ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDVlMDczNjcuLmU4YjdkMzY2IDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTM3MzgsNyArMzczOCw3IEBACiBTOiBHZXJtYW55CiAKIE46IEdlcnRqYW4gdmFuIFdpbmdlcmRlCi1FOiBnd2luZ2VyZGVAaG9tZS5ubAorRTogZ3dpbmdlcmRlQGdtYWlsLmNvbQogRDogUmFsaW5rIHJ0MngwMCBXTEFOIGRyaXZlcgogRDogTWluaXggVjIgZmlsZS1zeXN0ZW0KIEQ6IE1pc2MgZml4ZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeSBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvaW1hX3BvbGljeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDM0ZjBkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9pbWFfcG9saWN5CkBAIC0wLDAgKzEsNjEgQEAKK1doYXQ6CQlzZWN1cml0eS9pbWEvcG9saWN5CitEYXRlOgkJTWF5IDIwMDgKK0NvbnRhY3Q6CU1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhlIFRydXN0ZWQgQ29tcHV0aW5nIEdyb3VwKFRDRykgcnVudGltZSBJbnRlZ3JpdHkKKwkJTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkgbWFpbnRhaW5zIGEgbGlzdCBvZiBoYXNoCisJCXZhbHVlcyBvZiBleGVjdXRhYmxlcyBhbmQgb3RoZXIgc2Vuc2l0aXZlIHN5c3RlbSBmaWxlcworCQlsb2FkZWQgaW50byB0aGUgcnVuLXRpbWUgb2YgdGhpcyBzeXN0ZW0uICBBdCBydW50aW1lLAorCQl0aGUgcG9saWN5IGNhbiBiZSBjb25zdHJhaW5lZCBiYXNlZCBvbiBMU00gc3BlY2lmaWMgZGF0YS4KKwkJUG9saWNpZXMgYXJlIGxvYWRlZCBpbnRvIHRoZSBzZWN1cml0eWZzIGZpbGUgaW1hL3BvbGljeQorCQlieSBvcGVuaW5nIHRoZSBmaWxlLCB3cml0aW5nIHRoZSBydWxlcyBvbmUgYXQgYSB0aW1lIGFuZAorCQl0aGVuIGNsb3NpbmcgdGhlIGZpbGUuICBUaGUgbmV3IHBvbGljeSB0YWtlcyBlZmZlY3QgYWZ0ZXIKKwkJdGhlIGZpbGUgaW1hL3BvbGljeSBpcyBjbG9zZWQuCisKKwkJcnVsZSBmb3JtYXQ6IGFjdGlvbiBbY29uZGl0aW9uIC4uLl0KKworCQlhY3Rpb246IG1lYXN1cmUgfCBkb250X21lYXN1cmUKKwkJY29uZGl0aW9uOj0gYmFzZSB8IGxzbQorCQkJYmFzZToJW1tmdW5jPV0gW21hc2s9XSBbZnNtYWdpYz1dIFt1aWQ9XV0KKwkJCWxzbToJW1tzdWJqX3VzZXI9XSBbc3Vial9yb2xlPV0gW3N1YmpfdHlwZT1dCisJCQkJIFtvYmpfdXNlcj1dIFtvYmpfcm9sZT1dIFtvYmpfdHlwZT1dXQorCisJCWJhc2U6IAlmdW5jOj0gW0JQUk1fQ0hFQ0tdW0ZJTEVfTU1BUF1bSU5PREVfUEVSTUlTU0lPTl0KKwkJCW1hc2s6PSBbTUFZX1JFQURdIFtNQVlfV1JJVEVdIFtNQVlfQVBQRU5EXSBbTUFZX0VYRUNdCisJCQlmc21hZ2ljOj0gaGV4IHZhbHVlCisJCQl1aWQ6PSBkZWNpbWFsIHZhbHVlCisJCWxzbTogIAlhcmUgTFNNIHNwZWNpZmljCisKKwkJZGVmYXVsdCBwb2xpY3k6CisJCQkjIFBST0NfU1VQRVJfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4OWZhMAorCQkJIyBTWVNGU19NQUdJQworCQkJZG9udF9tZWFzdXJlIGZzbWFnaWM9MHg2MjY1NjU3MgorCQkJIyBERUJVR0ZTX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDY0NjI2NzIwCisJCQkjIFRNUEZTX01BR0lDCisJCQlkb250X21lYXN1cmUgZnNtYWdpYz0weDAxMDIxOTk0CisJCQkjIFNFQ1VSSVRZRlNfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4NzM2MzY2NzMKKworCQkJbWVhc3VyZSBmdW5jPUJQUk1fQ0hFQ0sKKwkJCW1lYXN1cmUgZnVuYz1GSUxFX01NQVAgbWFzaz1NQVlfRVhFQworCQkJbWVhc3VyZSBmdW5jPUlOT0RFX1BFUk0gbWFzaz1NQVlfUkVBRCB1aWQ9MAorCisJCVRoZSBkZWZhdWx0IHBvbGljeSBtZWFzdXJlcyBhbGwgZXhlY3V0YWJsZXMgaW4gYnBybV9jaGVjaywKKwkJYWxsIGZpbGVzIG1tYXBwZWQgZXhlY3V0YWJsZSBpbiBmaWxlX21tYXAsIGFuZCBhbGwgZmlsZXMKKwkJb3BlbiBmb3IgcmVhZCBieSByb290IGluIGlub2RlX3Blcm1pc3Npb24uCisKKwkJRXhhbXBsZXMgb2YgTFNNIHNwZWNpZmljIGRlZmluaXRpb25zOgorCisJCVNFTGludXg6CisJCQkjIFNFTElOVVhfTUFHSUMKKwkJCWRvbnRfbWVhc3VyZSBmc21hZ2ljPTB4Rjk3Q0ZGOEMKKworCQkJZG9udF9tZWFzdXJlIG9ial90eXBlPXZhcl9sb2dfdAorCQkJZG9udF9tZWFzdXJlIG9ial90eXBlPWF1ZGl0ZF9sb2dfdAorCQkJbWVhc3VyZSBzdWJqX3VzZXI9c3lzdGVtX3UgZnVuYz1JTk9ERV9QRVJNIG1hc2s9TUFZX1JFQUQKKwkJCW1lYXN1cmUgc3Vial9yb2xlPXN5c3RlbV9yIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECisKKwkJU21hY2s6CisJCQltZWFzdXJlIHN1YmpfdXNlcj1fIGZ1bmM9SU5PREVfUEVSTSBtYXNrPU1BWV9SRUFECmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKaW5kZXggMTQ2MmVkOC4uYTNhODNkMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQpAQCAtMTIsNyArMTIsOCBAQAogCSAgICBrZXJuZWwtYXBpLnhtbCBmaWxlc3lzdGVtcy54bWwgbHNtLnhtbCB1c2IueG1sIGtnZGIueG1sIFwKIAkgICAgZ2FkZ2V0LnhtbCBsaWJhdGEueG1sIG10ZG5hbmQueG1sIGxpYnJzLnhtbCByYXBpZGlvLnhtbCBcCiAJICAgIGdlbmVyaWNpcnEueG1sIHMzOTAtZHJpdmVycy54bWwgdWlvLWhvd3RvLnhtbCBzY3NpLnhtbCBcCi0JICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sCisJICAgIG1hYzgwMjExLnhtbCBkZWJ1Z29iamVjdHMueG1sIHNoLnhtbCByZWd1bGF0b3IueG1sIFwKKwkgICAgYWxzYS1kcml2ZXItYXBpLnhtbCB3cml0aW5nLWFuLWFsc2EtZHJpdmVyLnhtbAogCiAjIyMKICMgVGhlIGJ1aWxkIHByb2Nlc3MgaXMgYXMgZm9sbG93cyAodGFyZ2V0cyk6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzMGE5NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApAQCAtMCwwICsxLDEwOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBib29rIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIgorCSJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2RvY2Jvb2sveG1sLzQuMS4yL2RvY2Jvb2t4LmR0ZCIgW10+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBIZWFkZXIgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8Ym9vayBpZD0iQUxTQS1Ecml2ZXItQVBJIj4KKyAgPGJvb2tpbmZvPgorICAgIDx0aXRsZT5UaGUgQUxTQSBEcml2ZXIgQVBJPC90aXRsZT4KKworICAgIDxsZWdhbG5vdGljZT4KKyAgICA8cGFyYT4KKyAgICBUaGlzIGRvY3VtZW50IGlzIGZyZWU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgVGhpcyBkb2N1bWVudCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCA8ZW1waGFzaXM+V0lUSE9VVCBBTlkgV0FSUkFOVFk8L2VtcGhhc2lzPjsgd2l0aG91dCBldmVuIHRoZQorICAgIGltcGxpZWQgd2FycmFudHkgb2YgPGVtcGhhc2lzPk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisgICAgUEFSVElDVUxBUiBQVVJQT1NFPC9lbXBoYXNpcz4uIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBmb3IgbW9yZSBkZXRhaWxzLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICAgIE1BIDAyMTExLTEzMDcgVVNBCisgICAgPC9wYXJhPgorICAgIDwvbGVnYWxub3RpY2U+CisKKyAgPC9ib29raW5mbz4KKworPHRvYz48L3RvYz4KKworICA8Y2hhcHRlcj48dGl0bGU+TWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgRGV2aWNlczwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+Q2FyZCBNYW5hZ2VtZW50PC90aXRsZT4KKyFFc291bmQvY29yZS9pbml0LmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5EZXZpY2UgQ29tcG9uZW50czwvdGl0bGU+CishRXNvdW5kL2NvcmUvZGV2aWNlLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Nb2R1bGUgcmVxdWVzdHMgYW5kIERldmljZSBGaWxlIEVudHJpZXM8L3RpdGxlPgorIUVzb3VuZC9jb3JlL3NvdW5kLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5NZW1vcnkgTWFuYWdlbWVudCBIZWxwZXJzPC90aXRsZT4KKyFFc291bmQvY29yZS9tZW1vcnkuYworIUVzb3VuZC9jb3JlL21lbWFsbG9jLmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj48dGl0bGU+UENNIEFQSTwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+UENNIENvcmU8L3RpdGxlPgorIUVzb3VuZC9jb3JlL3BjbS5jCishRXNvdW5kL2NvcmUvcGNtX2xpYi5jCishRXNvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+UENNIEZvcm1hdCBIZWxwZXJzPC90aXRsZT4KKyFFc291bmQvY29yZS9wY21fbWlzYy5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+UENNIE1lbW9yeSBNYW5hZ2VtZW50PC90aXRsZT4KKyFFc291bmQvY29yZS9wY21fbWVtb3J5LmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj48dGl0bGU+Q29udHJvbC9NaXhlciBBUEk8L3RpdGxlPgorICAgICA8c2VjdDE+PHRpdGxlPkdlbmVyYWwgQ29udHJvbCBJbnRlcmZhY2U8L3RpdGxlPgorIUVzb3VuZC9jb3JlL2NvbnRyb2wuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPkFDOTcgQ29kZWMgQVBJPC90aXRsZT4KKyFFc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCishRXNvdW5kL3BjaS9hYzk3L2FjOTdfcGNtLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5WaXJ0dWFsIE1hc3RlciBDb250cm9sIEFQSTwvdGl0bGU+CishRXNvdW5kL2NvcmUvdm1hc3Rlci5jCishSWluY2x1ZGUvc291bmQvY29udHJvbC5oCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXI+PHRpdGxlPk1JREkgQVBJPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5SYXcgTUlESSBBUEk8L3RpdGxlPgorIUVzb3VuZC9jb3JlL3Jhd21pZGkuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPk1QVTQwMS1VQVJUIEFQSTwvdGl0bGU+CishRXNvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMKKyAgICAgPC9zZWN0MT4KKyAgPC9jaGFwdGVyPgorICA8Y2hhcHRlcj48dGl0bGU+UHJvYyBJbmZvIEFQSTwvdGl0bGU+CisgICAgIDxzZWN0MT48dGl0bGU+UHJvYyBJbmZvIEludGVyZmFjZTwvdGl0bGU+CishRXNvdW5kL2NvcmUvaW5mby5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKyAgPGNoYXB0ZXI+PHRpdGxlPk1pc2NlbGxhbmVvdXMgRnVuY3Rpb25zPC90aXRsZT4KKyAgICAgPHNlY3QxPjx0aXRsZT5IYXJkd2FyZS1EZXBlbmRlbnQgRGV2aWNlcyBBUEk8L3RpdGxlPgorIUVzb3VuZC9jb3JlL2h3ZGVwLmMKKyAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5KYWNrIEFic3RyYWN0aW9uIExheWVyIEFQSTwvdGl0bGU+CishRXNvdW5kL2NvcmUvamFjay5jCisgICAgIDwvc2VjdDE+CisgICAgIDxzZWN0MT48dGl0bGU+SVNBIERNQSBIZWxwZXJzPC90aXRsZT4KKyFFc291bmQvY29yZS9pc2FkbWEuYworICAgICA8L3NlY3QxPgorICAgICA8c2VjdDE+PHRpdGxlPk90aGVyIEhlbHBlciBNYWNyb3M8L3RpdGxlPgorIUlpbmNsdWRlL3NvdW5kL2NvcmUuaAorICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKzwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsCmluZGV4IDNhODgyZDkuLmM2NzFhMDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEudG1wbApAQCAtNDQwLDYgKzQ0MCw3IEBACiAgICAgIHVzZWQgaW4gdGhlIGdlbmVyaWMgSVJRIGxheWVyLgogICAgICA8L3BhcmE+CiAhSWluY2x1ZGUvbGludXgvaXJxLmgKKyFJaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXIgaWQ9InB1YmZ1bmN0aW9ucyI+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYWM4MDIxMS50bXBsCmluZGV4IDc3YzNjMjAuLmZiZWFmZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYWM4MDIxMS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYWM4MDIxMS50bXBsCkBAIC0xNyw4ICsxNyw3IEBACiAgICAgPC9hdXRob3Jncm91cD4KIAogICAgIDxjb3B5cmlnaHQ+Ci0gICAgICA8eWVhcj4yMDA3PC95ZWFyPgotICAgICAgPHllYXI+MjAwODwveWVhcj4KKyAgICAgIDx5ZWFyPjIwMDctMjAwOTwveWVhcj4KICAgICAgIDxob2xkZXI+Sm9oYW5uZXMgQmVyZzwvaG9sZGVyPgogICAgIDwvY29weXJpZ2h0PgogCkBAIC0xNjUsOCArMTY0LDggQEAKICFQaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBGcmFtZSBmb3JtYXQKICAgICAgIDwvc2VjdDE+CiAgICAgICA8c2VjdDE+Ci0gICAgICAgIDx0aXRsZT5BbGlnbm1lbnQgaXNzdWVzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+VEJEPC9wYXJhPgorICAgICAgICA8dGl0bGU+UGFja2V0IGFsaWdubWVudDwvdGl0bGU+CishUG5ldC9tYWM4MDIxMS9yeC5jIFBhY2tldCBhbGlnbm1lbnQKICAgICAgIDwvc2VjdDE+CiAgICAgICA8c2VjdDE+CiAgICAgICAgIDx0aXRsZT5DYWxsaW5nIGludG8gbWFjODAyMTEgZnJvbSBpbnRlcnJ1cHRzPC90aXRsZT4KQEAgLTIyMyw2ICsyMjIsMTcgQEAKICFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfa2V5X2ZsYWdzCiAgICAgPC9jaGFwdGVyPgogCisgICAgPGNoYXB0ZXIgaWQ9InBvd2Vyc2F2ZSI+CisgICAgICA8dGl0bGU+UG93ZXJzYXZlIHN1cHBvcnQ8L3RpdGxlPgorIVBpbmNsdWRlL25ldC9tYWM4MDIxMS5oIFBvd2Vyc2F2ZSBzdXBwb3J0CisgICAgPC9jaGFwdGVyPgorCisgICAgPGNoYXB0ZXIgaWQ9ImJlYWNvbi1maWx0ZXIiPgorICAgICAgPHRpdGxlPkJlYWNvbiBmaWx0ZXIgc3VwcG9ydDwvdGl0bGU+CishUGluY2x1ZGUvbmV0L21hYzgwMjExLmggQmVhY29uIGZpbHRlciBzdXBwb3J0CishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2JlYWNvbl9sb3NzCisgICAgPC9jaGFwdGVyPgorCiAgICAgPGNoYXB0ZXIgaWQ9InFvcyI+CiAgICAgICA8dGl0bGU+TXVsdGlwbGUgcXVldWVzIGFuZCBRb1Mgc3VwcG9ydDwvdGl0bGU+CiAgICAgICA8cGFyYT5UQkQ8L3BhcmE+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwKaW5kZXggNTJlMWI3OS4uOGY2ZTNiMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Vpby1ob3d0by50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91aW8taG93dG8udG1wbApAQCAtNDIsNiArNDIsMTMgQEAKIAogPHJldmhpc3Rvcnk+CiAJPHJldmlzaW9uPgorCTxyZXZudW1iZXI+MC44PC9yZXZudW1iZXI+CisJPGRhdGU+MjAwOC0xMi0yNDwvZGF0ZT4KKwk8YXV0aG9yaW5pdGlhbHM+aGprPC9hdXRob3Jpbml0aWFscz4KKwk8cmV2cmVtYXJrPkFkZGVkIG5hbWUgYXR0cmlidXRlcyBpbiBtZW0gYW5kIHBvcnRpbyBzeXNmcyBkaXJlY3Rvcmllcy4KKwkJPC9yZXZyZW1hcms+CisJPC9yZXZpc2lvbj4KKwk8cmV2aXNpb24+CiAJPHJldm51bWJlcj4wLjc8L3Jldm51bWJlcj4KIAk8ZGF0ZT4yMDA4LTEyLTIzPC9kYXRlPgogCTxhdXRob3Jpbml0aWFscz5oams8L2F1dGhvcmluaXRpYWxzPgpAQCAtMzAzLDEyICszMTAsMTkgQEAKIAlhcHBlYXIgaWYgdGhlIHNpemUgb2YgdGhlIG1hcHBpbmcgaXMgbm90IDAuCiA8L3BhcmE+CiA8cGFyYT4KLQlFYWNoIDxmaWxlbmFtZT5tYXBYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyB0d28gcmVhZC1vbmx5IGZpbGVzCi0JdGhhdCBzaG93IHN0YXJ0IGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIG1lbW9yeToKKwlFYWNoIDxmaWxlbmFtZT5tYXBYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyBmb3VyIHJlYWQtb25seSBmaWxlcworCXRoYXQgc2hvdyBhdHRyaWJ1dGVzIG9mIHRoZSBtZW1vcnk6CiA8L3BhcmE+CiA8aXRlbWl6ZWRsaXN0PgogPGxpc3RpdGVtPgogCTxwYXJhPgorCTxmaWxlbmFtZT5uYW1lPC9maWxlbmFtZT46IEEgc3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoaXMgbWFwcGluZy4gVGhpcworCWlzIG9wdGlvbmFsLCB0aGUgc3RyaW5nIGNhbiBiZSBlbXB0eS4gRHJpdmVycyBjYW4gc2V0IHRoaXMgdG8gbWFrZSBpdAorCWVhc2llciBmb3IgdXNlcnNwYWNlIHRvIGZpbmQgdGhlIGNvcnJlY3QgbWFwcGluZy4KKwk8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorCTxwYXJhPgogCTxmaWxlbmFtZT5hZGRyPC9maWxlbmFtZT46IFRoZSBhZGRyZXNzIG9mIG1lbW9yeSB0aGF0IGNhbiBiZSBtYXBwZWQuCiAJPC9wYXJhPgogPC9saXN0aXRlbT4KQEAgLTM2NiwxMiArMzgwLDE5IEBACiAJPGZpbGVuYW1lPi9zeXMvY2xhc3MvdWlvL3Vpb1gvcG9ydGlvLzwvZmlsZW5hbWU+LgogPC9wYXJhPgogPHBhcmE+Ci0JRWFjaCA8ZmlsZW5hbWU+cG9ydFgvPC9maWxlbmFtZT4gZGlyZWN0b3J5IGNvbnRhaW5zIHRocmVlIHJlYWQtb25seQotCWZpbGVzIHRoYXQgc2hvdyBzdGFydCwgc2l6ZSwgYW5kIHR5cGUgb2YgdGhlIHBvcnQgcmVnaW9uOgorCUVhY2ggPGZpbGVuYW1lPnBvcnRYLzwvZmlsZW5hbWU+IGRpcmVjdG9yeSBjb250YWlucyBmb3VyIHJlYWQtb25seQorCWZpbGVzIHRoYXQgc2hvdyBuYW1lLCBzdGFydCwgc2l6ZSwgYW5kIHR5cGUgb2YgdGhlIHBvcnQgcmVnaW9uOgogPC9wYXJhPgogPGl0ZW1pemVkbGlzdD4KIDxsaXN0aXRlbT4KIAk8cGFyYT4KKwk8ZmlsZW5hbWU+bmFtZTwvZmlsZW5hbWU+OiBBIHN0cmluZyBpZGVudGlmaWVyIGZvciB0aGlzIHBvcnQgcmVnaW9uLgorCVRoZSBzdHJpbmcgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSBlbXB0eS4gRHJpdmVycyBjYW4gc2V0IGl0IHRvIG1ha2UgaXQKKwllYXNpZXIgZm9yIHVzZXJzcGFjZSB0byBmaW5kIGEgY2VydGFpbiBwb3J0IHJlZ2lvbi4KKwk8L3BhcmE+Cis8L2xpc3RpdGVtPgorPGxpc3RpdGVtPgorCTxwYXJhPgogCTxmaWxlbmFtZT5zdGFydDwvZmlsZW5hbWU+OiBUaGUgZmlyc3QgcG9ydCBvZiB0aGlzIHJlZ2lvbi4KIAk8L3BhcmE+CiA8L2xpc3RpdGVtPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiMDhmZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnRtcGwKQEAgLTAsMCArMSw2MjE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGJvb2sgUFVCTElDICItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjEuMi8vRU4iCisJImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4xLjIvZG9jYm9va3guZHRkIiBbXT4KKworPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Cis8IS0tIEhlYWRlciAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzxib29rIGlkPSJXcml0aW5nLWFuLUFMU0EtRHJpdmVyIj4KKyAgPGJvb2tpbmZvPgorICAgIDx0aXRsZT5Xcml0aW5nIGFuIEFMU0EgRHJpdmVyPC90aXRsZT4KKyAgICA8YXV0aG9yPgorICAgICAgPGZpcnN0bmFtZT5UYWthc2hpPC9maXJzdG5hbWU+CisgICAgICA8c3VybmFtZT5Jd2FpPC9zdXJuYW1lPgorICAgICAgPGFmZmlsaWF0aW9uPgorICAgICAgICA8YWRkcmVzcz4KKyAgICAgICAgICA8ZW1haWw+dGl3YWlAc3VzZS5kZTwvZW1haWw+CisgICAgICAgIDwvYWRkcmVzcz4KKyAgICAgIDwvYWZmaWxpYXRpb24+CisgICAgIDwvYXV0aG9yPgorCisgICAgIDxkYXRlPk9jdCAxNSwgMjAwNzwvZGF0ZT4KKyAgICAgPGVkaXRpb24+MC4zLjc8L2VkaXRpb24+CisKKyAgICA8YWJzdHJhY3Q+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHdyaXRlIGFuIEFMU0EgKEFkdmFuY2VkIExpbnV4CisgICAgICAgIFNvdW5kIEFyY2hpdGVjdHVyZSkgZHJpdmVyLgorICAgICAgPC9wYXJhPgorICAgIDwvYWJzdHJhY3Q+CisKKyAgICA8bGVnYWxub3RpY2U+CisgICAgPHBhcmE+CisgICAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUgIFRha2FzaGkgSXdhaSA8ZW1haWw+dGl3YWlAc3VzZS5kZTwvZW1haWw+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgVGhpcyBkb2N1bWVudCBpcyBmcmVlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoaXMgZG9jdW1lbnQgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgPGVtcGhhc2lzPldJVEhPVVQgQU5ZIFdBUlJBTlRZPC9lbXBoYXNpcz47IHdpdGhvdXQgZXZlbiB0aGUKKyAgICBpbXBsaWVkIHdhcnJhbnR5IG9mIDxlbXBoYXNpcz5NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorICAgIFBBUlRJQ1VMQVIgUFVSUE9TRTwvZW1waGFzaXM+LiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgZm9yIG1vcmUgZGV0YWlscy4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAgICBNQSAwMjExMS0xMzA3IFVTQQorICAgIDwvcGFyYT4KKyAgICA8L2xlZ2Fsbm90aWNlPgorCisgIDwvYm9va2luZm8+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBQcmVmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8cHJlZmFjZSBpZD0icHJlZmFjZSI+CisgICAgPHRpdGxlPlByZWZhY2U8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgaG93IHRvIHdyaXRlIGFuCisgICAgICA8dWxpbmsgdXJsPSJodHRwOi8vd3d3LmFsc2EtcHJvamVjdC5vcmcvIj48Y2l0ZXRpdGxlPgorICAgICAgQUxTQSAoQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlKTwvY2l0ZXRpdGxlPjwvdWxpbms+CisgICAgICBkcml2ZXIuIFRoZSBkb2N1bWVudCBmb2N1c2VzIG1haW5seSBvbiBQQ0kgc291bmRjYXJkcy4KKyAgICAgIEluIHRoZSBjYXNlIG9mIG90aGVyIGRldmljZSB0eXBlcywgdGhlIEFQSSBtaWdodAorICAgICAgYmUgZGlmZmVyZW50LCB0b28uIEhvd2V2ZXIsIGF0IGxlYXN0IHRoZSBBTFNBIGtlcm5lbCBBUEkgaXMKKyAgICAgIGNvbnNpc3RlbnQsIGFuZCB0aGVyZWZvcmUgaXQgd291bGQgYmUgc3RpbGwgYSBiaXQgaGVscCBmb3IKKyAgICAgIHdyaXRpbmcgdGhlbS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICBUaGlzIGRvY3VtZW50IHRhcmdldHMgcGVvcGxlIHdobyBhbHJlYWR5IGhhdmUgZW5vdWdoCisgICAgQyBsYW5ndWFnZSBza2lsbHMgYW5kIGhhdmUgYmFzaWMgbGludXgga2VybmVsIHByb2dyYW1taW5nCisgICAga25vd2xlZGdlLiAgVGhpcyBkb2N1bWVudCBkb2Vzbid0IGV4cGxhaW4gdGhlIGdlbmVyYWwKKyAgICB0b3BpYyBvZiBsaW51eCBrZXJuZWwgY29kaW5nIGFuZCBkb2Vzbid0IGNvdmVyIGxvdy1sZXZlbAorICAgIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJdCBvbmx5IGRlc2NyaWJlcworICAgIHRoZSBzdGFuZGFyZCB3YXkgdG8gd3JpdGUgYSBQQ0kgc291bmQgZHJpdmVyIG9uIEFMU0EuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBJZiB5b3UgYXJlIGFscmVhZHkgZmFtaWxpYXIgd2l0aCB0aGUgb2xkZXIgQUxTQSB2ZXIuMC41LnggQVBJLCB5b3UKKyAgICBjYW4gY2hlY2sgdGhlIGRyaXZlcnMgc3VjaCBhcyA8ZmlsZW5hbWU+c291bmQvcGNpL2VzMTkzOC5jPC9maWxlbmFtZT4gb3IKKyAgICA8ZmlsZW5hbWU+c291bmQvcGNpL21hZXN0cm8zLmM8L2ZpbGVuYW1lPiB3aGljaCBoYXZlIGFsc28gYWxtb3N0IHRoZSBzYW1lCisgICAgY29kZS1iYXNlIGluIHRoZSBBTFNBIDAuNS54IHRyZWUsIHNvIHlvdSBjYW4gY29tcGFyZSB0aGUgZGlmZmVyZW5jZXMuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGlzIGRvY3VtZW50IGlzIHN0aWxsIGEgZHJhZnQgdmVyc2lvbi4gQW55IGZlZWRiYWNrIGFuZAorICAgIGNvcnJlY3Rpb25zLCBwbGVhc2UhIQorICAgIDwvcGFyYT4KKyAgPC9wcmVmYWNlPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBGaWxlIFRyZWUgU3RydWN0dXJlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iZmlsZS10cmVlIj4KKyAgICA8dGl0bGU+RmlsZSBUcmVlIFN0cnVjdHVyZTwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWdlbmVyYWwiPgorICAgICAgPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBBTFNBIGRyaXZlcnMgYXJlIHByb3ZpZGVkIGluIHR3byB3YXlzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgT25lIGlzIHRoZSB0cmVlcyBwcm92aWRlZCBhcyBhIHRhcmJhbGwgb3IgdmlhIGN2cyBmcm9tIHRoZQorICAgICAgQUxTQSdzIGZ0cCBzaXRlLCBhbmQgYW5vdGhlciBpcyB0aGUgMi42IChvciBsYXRlcikgTGludXgga2VybmVsCisgICAgICB0cmVlLiBUbyBzeW5jaHJvbml6ZSBib3RoLCB0aGUgQUxTQSBkcml2ZXIgdHJlZSBpcyBzcGxpdCBpbnRvCisgICAgICB0d28gZGlmZmVyZW50IHRyZWVzOiBhbHNhLWtlcm5lbCBhbmQgYWxzYS1kcml2ZXIuIFRoZSBmb3JtZXIKKyAgICAgIGNvbnRhaW5zIHB1cmVseSB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaW51eCAyLjYgKG9yIGxhdGVyKQorICAgICAgdHJlZS4gVGhpcyB0cmVlIGlzIGRlc2lnbmVkIG9ubHkgZm9yIGNvbXBpbGF0aW9uIG9uIDIuNiBvcgorICAgICAgbGF0ZXIgZW52aXJvbm1lbnQuIFRoZSBsYXR0ZXIsIGFsc2EtZHJpdmVyLCBjb250YWlucyBtYW55IHN1YnRsZQorICAgICAgZmlsZXMgZm9yIGNvbXBpbGluZyBBTFNBIGRyaXZlcnMgb3V0c2lkZSBvZiB0aGUgTGludXgga2VybmVsIHRyZWUsCisgICAgICB3cmFwcGVyIGZ1bmN0aW9ucyBmb3Igb2xkZXIgMi4yIGFuZCAyLjQga2VybmVscywgdG8gYWRhcHQgdGhlIGxhdGVzdCBrZXJuZWwgQVBJLAorICAgICAgYW5kIGFkZGl0aW9uYWwgZHJpdmVycyB3aGljaCBhcmUgc3RpbGwgaW4gZGV2ZWxvcG1lbnQgb3IgaW4KKyAgICAgIHRlc3RzLiAgVGhlIGRyaXZlcnMgaW4gYWxzYS1kcml2ZXIgdHJlZSB3aWxsIGJlIG1vdmVkIHRvCisgICAgICBhbHNhLWtlcm5lbCAoYW5kIGV2ZW50dWFsbHkgdG8gdGhlIDIuNiBrZXJuZWwgdHJlZSkgd2hlbiB0aGV5IGFyZQorICAgICAgZmluaXNoZWQgYW5kIGNvbmZpcm1lZCB0byB3b3JrIGZpbmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZmlsZSB0cmVlIHN0cnVjdHVyZSBvZiBBTFNBIGRyaXZlciBpcyBkZXBpY3RlZCBiZWxvdy4gQm90aAorICAgICAgICBhbHNhLWtlcm5lbCBhbmQgYWxzYS1kcml2ZXIgaGF2ZSBhbG1vc3QgdGhlIHNhbWUgZmlsZQorICAgICAgICBzdHJ1Y3R1cmUsIGV4Y2VwdCBmb3IgPHF1b3RlPmNvcmU8L3F1b3RlPiBkaXJlY3RvcnkuIEl0J3MKKyAgICAgICAgbmFtZWQgYXMgPHF1b3RlPmFjb3JlPC9xdW90ZT4gaW4gYWxzYS1kcml2ZXIgdHJlZS4gCisKKyAgICAgICAgPGV4YW1wbGU+CisgICAgICAgICAgPHRpdGxlPkFMU0EgRmlsZSBUcmVlIFN0cnVjdHVyZTwvdGl0bGU+CisgICAgICAgICAgPGxpdGVyYWxsYXlvdXQ+CisgICAgICAgIHNvdW5kCisgICAgICAgICAgICAgICAgL2NvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC9vc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIC9zZXEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL29zcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvaW5zdHIKKyAgICAgICAgICAgICAgICAvaW9jdGwzMgorICAgICAgICAgICAgICAgIC9pbmNsdWRlCisgICAgICAgICAgICAgICAgL2RyaXZlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgIC9tcHU0MDEKKyAgICAgICAgICAgICAgICAgICAgICAgIC9vcGwzCisgICAgICAgICAgICAgICAgL2kyYworICAgICAgICAgICAgICAgICAgICAgICAgL2wzCisgICAgICAgICAgICAgICAgL3N5bnRoCisgICAgICAgICAgICAgICAgICAgICAgICAvZW11eAorICAgICAgICAgICAgICAgIC9wY2kKKyAgICAgICAgICAgICAgICAgICAgICAgIC8oY2FyZHMpCisgICAgICAgICAgICAgICAgL2lzYQorICAgICAgICAgICAgICAgICAgICAgICAgLyhjYXJkcykKKyAgICAgICAgICAgICAgICAvYXJtCisgICAgICAgICAgICAgICAgL3BwYworICAgICAgICAgICAgICAgIC9zcGFyYworICAgICAgICAgICAgICAgIC91c2IKKyAgICAgICAgICAgICAgICAvcGNtY2lhIC8oY2FyZHMpCisgICAgICAgICAgICAgICAgL29zcworICAgICAgICAgIDwvbGl0ZXJhbGxheW91dD4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmNvcmUgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgbWlkZGxlIGxheWVyIHdoaWNoIGlzIHRoZSBoZWFydAorICAgICAgb2YgQUxTQSBkcml2ZXJzLiBJbiB0aGlzIGRpcmVjdG9yeSwgdGhlIG5hdGl2ZSBBTFNBIG1vZHVsZXMgYXJlCisgICAgICBzdG9yZWQuIFRoZSBzdWItZGlyZWN0b3JpZXMgY29udGFpbiBkaWZmZXJlbnQgbW9kdWxlcyBhbmQgYXJlCisgICAgICBkZXBlbmRlbnQgdXBvbiB0aGUga2VybmVsIGNvbmZpZy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3Rvcnktb3NzIj4KKyAgICAgICAgPHRpdGxlPmNvcmUvb3NzPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgY29kZXMgZm9yIFBDTSBhbmQgbWl4ZXIgT1NTIGVtdWxhdGlvbiBtb2R1bGVzIGFyZSBzdG9yZWQKKyAgICAgICAgaW4gdGhpcyBkaXJlY3RvcnkuIFRoZSByYXdtaWRpIE9TUyBlbXVsYXRpb24gaXMgaW5jbHVkZWQgaW4KKyAgICAgICAgdGhlIEFMU0EgcmF3bWlkaSBjb2RlIHNpbmNlIGl0J3MgcXVpdGUgc21hbGwuIFRoZSBzZXF1ZW5jZXIKKyAgICAgICAgY29kZSBpcyBzdG9yZWQgaW4gPGZpbGVuYW1lPmNvcmUvc2VxL29zczwvZmlsZW5hbWU+IGRpcmVjdG9yeSAoc2VlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1zZXEtb3NzIj48Y2l0ZXRpdGxlPgorICAgICAgICBiZWxvdzwvY2l0ZXRpdGxlPjwvbGluaz4pLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3RvcnktaW9jdGwzMiI+CisgICAgICAgIDx0aXRsZT5jb3JlL2lvY3RsMzI8L3RpdGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSAzMmJpdC1pb2N0bCB3cmFwcGVycyBmb3IgNjRiaXQKKyAgICAgICAgYXJjaGl0ZWN0dXJlcyBzdWNoIGxpa2UgeDg2LTY0LCBwcGM2NCBhbmQgc3BhcmM2NC4gRm9yIDMyYml0CisgICAgICAgIGFuZCBhbHBoYSBhcmNoaXRlY3R1cmVzLCB0aGVzZSBhcmUgbm90IGNvbXBpbGVkLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LXNlcSI+CisgICAgICAgIDx0aXRsZT5jb3JlL3NlcTwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGFuZCBpdHMgc3ViLWRpcmVjdG9yaWVzIGFyZSBmb3IgdGhlIEFMU0EKKyAgICAgICAgc2VxdWVuY2VyLiBUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgc2VxdWVuY2VyIGNvcmUgYW5kCisgICAgICAgIHByaW1hcnkgc2VxdWVuY2VyIG1vZHVsZXMgc3VjaCBsaWtlIHNuZC1zZXEtbWlkaSwKKyAgICAgICAgc25kLXNlcS12aXJtaWRpLCBldGMuIFRoZXkgYXJlIGNvbXBpbGVkIG9ubHkgd2hlbgorICAgICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9TRVFVRU5DRVI8L2NvbnN0YW50PiBpcyBzZXQgaW4gdGhlIGtlcm5lbAorICAgICAgICBjb25maWcuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3Rvcnktc2VxLW9zcyI+CisgICAgICAgIDx0aXRsZT5jb3JlL3NlcS9vc3M8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNvbnRhaW5zIHRoZSBPU1Mgc2VxdWVuY2VyIGVtdWxhdGlvbiBjb2Rlcy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LWRlcS1pbnN0ciI+CisgICAgICAgIDx0aXRsZT5jb3JlL3NlcS9pbnN0cjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBtb2R1bGVzIGZvciB0aGUgc2VxdWVuY2VyCisgICAgICAgIGluc3RydW1lbnQgbGF5ZXIuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1pbmNsdWRlLWRpcmVjdG9yeSI+CisgICAgICA8dGl0bGU+aW5jbHVkZSBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgdGhlIHBsYWNlIGZvciB0aGUgcHVibGljIGhlYWRlciBmaWxlcyBvZiBBTFNBIGRyaXZlcnMsCisgICAgICB3aGljaCBhcmUgdG8gYmUgZXhwb3J0ZWQgdG8gdXNlci1zcGFjZSwgb3IgaW5jbHVkZWQgYnkKKyAgICAgIHNldmVyYWwgZmlsZXMgYXQgZGlmZmVyZW50IGRpcmVjdG9yaWVzLiBCYXNpY2FsbHksIHRoZSBwcml2YXRlCisgICAgICBoZWFkZXIgZmlsZXMgc2hvdWxkIG5vdCBiZSBwbGFjZWQgaW4gdGhpcyBkaXJlY3RvcnksIGJ1dCB5b3UgbWF5CisgICAgICBzdGlsbCBmaW5kIGZpbGVzIHRoZXJlLCBkdWUgdG8gaGlzdG9yaWNhbCByZWFzb25zIDopIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtZHJpdmVycy1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmRyaXZlcnMgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRpcmVjdG9yeSBjb250YWlucyBjb2RlIHNoYXJlZCBhbW9uZyBkaWZmZXJlbnQgZHJpdmVycworICAgICAgb24gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuICBUaGV5IGFyZSBoZW5jZSBzdXBwb3NlZCBub3QgdG8gYmUKKyAgICAgIGFyY2hpdGVjdHVyZS1zcGVjaWZpYy4KKyAgICAgIEZvciBleGFtcGxlLCB0aGUgZHVtbXkgcGNtIGRyaXZlciBhbmQgdGhlIHNlcmlhbCBNSURJCisgICAgICBkcml2ZXIgYXJlIGZvdW5kIGluIHRoaXMgZGlyZWN0b3J5LiBJbiB0aGUgc3ViLWRpcmVjdG9yaWVzLAorICAgICAgdGhlcmUgaXMgY29kZSBmb3IgY29tcG9uZW50cyB3aGljaCBhcmUgaW5kZXBlbmRlbnQgZnJvbQorICAgICAgYnVzIGFuZCBjcHUgYXJjaGl0ZWN0dXJlcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtZHJpdmVycy1kaXJlY3RvcnktbXB1NDAxIj4KKyAgICAgICAgPHRpdGxlPmRyaXZlcnMvbXB1NDAxPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIE1QVTQwMSBhbmQgTVBVNDAxLVVBUlQgbW9kdWxlcyBhcmUgc3RvcmVkIGhlcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1kcml2ZXJzLWRpcmVjdG9yeS1vcGwzIj4KKyAgICAgICAgPHRpdGxlPmRyaXZlcnMvb3BsMyBhbmQgb3BsNDwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBPUEwzIGFuZCBPUEw0IEZNLXN5bnRoIHN0dWZmIGlzIGZvdW5kIGhlcmUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWkyYy1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPmkyYyBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY29udGFpbnMgdGhlIEFMU0EgaTJjIGNvbXBvbmVudHMuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBbHRob3VnaCB0aGVyZSBpcyBhIHN0YW5kYXJkIGkyYyBsYXllciBvbiBMaW51eCwgQUxTQSBoYXMgaXRzCisgICAgICBvd24gaTJjIGNvZGUgZm9yIHNvbWUgY2FyZHMsIGJlY2F1c2UgdGhlIHNvdW5kY2FyZCBuZWVkcyBvbmx5IGEKKyAgICAgIHNpbXBsZSBvcGVyYXRpb24gYW5kIHRoZSBzdGFuZGFyZCBpMmMgQVBJIGlzIHRvbyBjb21wbGljYXRlZCBmb3IKKyAgICAgIHN1Y2ggYSBwdXJwb3NlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1pMmMtZGlyZWN0b3J5LWwzIj4KKyAgICAgICAgPHRpdGxlPmkyYy9sMzwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgaXMgYSBzdWItZGlyZWN0b3J5IGZvciBBUk0gTDMgaTJjLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1zeW50aC1kaXJlY3RvcnkiPgorICAgICAgICA8dGl0bGU+c3ludGggZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjb250YWlucyB0aGUgc3ludGggbWlkZGxlLWxldmVsIG1vZHVsZXMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBTbyBmYXIsIHRoZXJlIGlzIG9ubHkgRW11ODAwMC9FbXUxMGsxIHN5bnRoIGRyaXZlciB1bmRlcgorICAgICAgICB0aGUgPGZpbGVuYW1lPnN5bnRoL2VtdXg8L2ZpbGVuYW1lPiBzdWItZGlyZWN0b3J5LiAKKyAgICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtcGNpLWRpcmVjdG9yeSI+CisgICAgICA8dGl0bGU+cGNpIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBkaXJlY3RvcnkgYW5kIGl0cyBzdWItZGlyZWN0b3JpZXMgaG9sZCB0aGUgdG9wLWxldmVsIGNhcmQgbW9kdWxlcworICAgICAgZm9yIFBDSSBzb3VuZGNhcmRzIGFuZCB0aGUgY29kZSBzcGVjaWZpYyB0byB0aGUgUENJIEJVUy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBkcml2ZXJzIGNvbXBpbGVkIGZyb20gYSBzaW5nbGUgZmlsZSBhcmUgc3RvcmVkIGRpcmVjdGx5CisgICAgICBpbiB0aGUgcGNpIGRpcmVjdG9yeSwgd2hpbGUgdGhlIGRyaXZlcnMgd2l0aCBzZXZlcmFsIHNvdXJjZSBmaWxlcyBhcmUKKyAgICAgIHN0b3JlZCBvbiB0aGVpciBvd24gc3ViLWRpcmVjdG9yeSAoZS5nLiBlbXUxMGsxLCBpY2UxNzEyKS4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1pc2EtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5pc2EgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGRpcmVjdG9yeSBhbmQgaXRzIHN1Yi1kaXJlY3RvcmllcyBob2xkIHRoZSB0b3AtbGV2ZWwgY2FyZCBtb2R1bGVzCisgICAgICBmb3IgSVNBIHNvdW5kY2FyZHMuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtYXJtLXBwYy1zcGFyYy1kaXJlY3RvcmllcyI+CisgICAgICA8dGl0bGU+YXJtLCBwcGMsIGFuZCBzcGFyYyBkaXJlY3RvcmllczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhleSBhcmUgdXNlZCBmb3IgdG9wLWxldmVsIGNhcmQgbW9kdWxlcyB3aGljaCBhcmUKKyAgICAgIHNwZWNpZmljIHRvIG9uZSBvZiB0aGVzZSBhcmNoaXRlY3R1cmVzLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLXVzYi1kaXJlY3RvcnkiPgorICAgICAgPHRpdGxlPnVzYiBkaXJlY3Rvcnk8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBVU0ItYXVkaW8gZHJpdmVyLiBJbiB0aGUgbGF0ZXN0IHZlcnNpb24sIHRoZQorICAgICAgVVNCIE1JREkgZHJpdmVyIGlzIGludGVncmF0ZWQgaW4gdGhlIHVzYi1hdWRpbyBkcml2ZXIuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtcGNtY2lhLWRpcmVjdG9yeSI+CisgICAgICA8dGl0bGU+cGNtY2lhIGRpcmVjdG9yeTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIFBDTUNJQSwgZXNwZWNpYWxseSBQQ0NhcmQgZHJpdmVycyB3aWxsIGdvIGhlcmUuIENhcmRCdXMKKyAgICAgIGRyaXZlcnMgd2lsbCBiZSBpbiB0aGUgcGNpIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGVpciBBUEkgaXMgaWRlbnRpY2FsCisgICAgICB0byB0aGF0IG9mIHN0YW5kYXJkIFBDSSBjYXJkcy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1vc3MtZGlyZWN0b3J5Ij4KKyAgICAgIDx0aXRsZT5vc3MgZGlyZWN0b3J5PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgT1NTL0xpdGUgc291cmNlIGZpbGVzIGFyZSBzdG9yZWQgaGVyZSBpbiBMaW51eCAyLjYgKG9yCisgICAgICBsYXRlcikgdHJlZS4gSW4gdGhlIEFMU0EgZHJpdmVyIHRhcmJhbGwsIHRoaXMgZGlyZWN0b3J5IGlzIGVtcHR5LAorICAgICAgb2YgY291cnNlIDopIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBCYXNpYyBGbG93IGZvciBQQ0kgRHJpdmVycyAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9ImJhc2ljLWZsb3ciPgorICAgIDx0aXRsZT5CYXNpYyBGbG93IGZvciBQQ0kgRHJpdmVyczwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1vdXRsaW5lIj4KKyAgICAgIDx0aXRsZT5PdXRsaW5lPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbWluaW11bSBmbG93IGZvciBQQ0kgc291bmRjYXJkcyBpcyBhcyBmb2xsb3dzOgorCisgICAgICAgIDxpdGVtaXplZGxpc3Q+CisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmRlZmluZSB0aGUgUENJIElEIHRhYmxlIChzZWUgdGhlIHNlY3Rpb24KKyAgICAgICAgICA8bGluayBsaW5rZW5kPSJwY2ktcmVzb3VyY2UtZW50cmllcyI+PGNpdGV0aXRsZT5QQ0kgRW50cmllcworICAgICAgICAgIDwvY2l0ZXRpdGxlPjwvbGluaz4pLjwvcGFyYT48L2xpc3RpdGVtPiAKKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIDxmdW5jdGlvbj5wcm9iZSgpPC9mdW5jdGlvbj4gY2FsbGJhY2suPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmNyZWF0ZSA8ZnVuY3Rpb24+cmVtb3ZlKCk8L2Z1bmN0aW9uPiBjYWxsYmFjay48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIGEgPHN0cnVjdG5hbWU+cGNpX2RyaXZlcjwvc3RydWN0bmFtZT4gc3RydWN0dXJlCisJICBjb250YWluaW5nIHRoZSB0aHJlZSBwb2ludGVycyBhYm92ZS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIGFuIDxmdW5jdGlvbj5pbml0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBqdXN0IGNhbGxpbmcKKwkgIHRoZSA8ZnVuY3Rpb24+cGNpX3JlZ2lzdGVyX2RyaXZlcigpPC9mdW5jdGlvbj4gdG8gcmVnaXN0ZXIgdGhlIHBjaV9kcml2ZXIgdGFibGUKKwkgIGRlZmluZWQgYWJvdmUuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgICAgPGxpc3RpdGVtPjxwYXJhPmNyZWF0ZSBhbiA8ZnVuY3Rpb24+ZXhpdCgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gdG8gY2FsbAorCSAgdGhlIDxmdW5jdGlvbj5wY2lfdW5yZWdpc3Rlcl9kcml2ZXIoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLjwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgICA8L2l0ZW1pemVkbGlzdD4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1leGFtcGxlIj4KKyAgICAgIDx0aXRsZT5GdWxsIENvZGUgRXhhbXBsZTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNvZGUgZXhhbXBsZSBpcyBzaG93biBiZWxvdy4gU29tZSBwYXJ0cyBhcmUga2VwdAorICAgICAgdW5pbXBsZW1lbnRlZCBhdCB0aGlzIG1vbWVudCBidXQgd2lsbCBiZSBmaWxsZWQgaW4gdGhlCisgICAgICBuZXh0IHNlY3Rpb25zLiBUaGUgbnVtYmVycyBpbiB0aGUgY29tbWVudCBsaW5lcyBvZiB0aGUKKyAgICAgIDxmdW5jdGlvbj5zbmRfbXljaGlwX3Byb2JlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbgorICAgICAgcmVmZXIgdG8gZGV0YWlscyBleHBsYWluZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uLiAKKworICAgICAgICA8ZXhhbXBsZT4KKyAgICAgICAgICA8dGl0bGU+QmFzaWMgRmxvdyBmb3IgUENJIERyaXZlcnMgLSBFeGFtcGxlPC90aXRsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorICAjaW5jbHVkZSA8c291bmQvY29yZS5oPgorICAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorCisgIC8qIG1vZHVsZSBwYXJhbWV0ZXJzIChzZWUgIk1vZHVsZSBQYXJhbWV0ZXJzIikgKi8KKyAgLyogU05EUlZfQ0FSRFM6IG1heGltdW0gbnVtYmVyIG9mIGNhcmRzIHN1cHBvcnRlZCBieSB0aGlzIG1vZHVsZSAqLworICBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOworICBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7CisgIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKKworICAvKiBkZWZpbml0aW9uIG9mIHRoZSBjaGlwLXNwZWNpZmljIHJlY29yZCAqLworICBzdHJ1Y3QgbXljaGlwIHsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisgICAgICAgICAgLyogdGhlIHJlc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwgYmUgaW4gc2VjdGlvbgorICAgICAgICAgICAqICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCIKKyAgICAgICAgICAgKi8KKyAgfTsKKworICAvKiBjaGlwLXNwZWNpZmljIGRlc3RydWN0b3IKKyAgICogKHNlZSAiUENJIFJlc291cmNlIE1hbmFnZW1lbnQiKQorICAgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2ZyZWUoc3RydWN0IG15Y2hpcCAqY2hpcCkKKyAgeworICAgICAgICAgIC4uLi4gLyogd2lsbCBiZSBpbXBsZW1lbnRlZCBsYXRlci4uLiAqLworICB9CisKKyAgLyogY29tcG9uZW50LWRlc3RydWN0b3IKKyAgICogKHNlZSAiTWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgQ29tcG9uZW50cyIpCisgICAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKKyAgeworICAgICAgICAgIHJldHVybiBzbmRfbXljaGlwX2ZyZWUoZGV2aWNlLT5kZXZpY2VfZGF0YSk7CisgIH0KKworICAvKiBjaGlwLXNwZWNpZmljIGNvbnN0cnVjdG9yCisgICAqIChzZWUgIk1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHMiKQorICAgKi8KKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9jcmVhdGUoc3RydWN0IHNuZF9jYXJkICpjYXJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqcGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXljaGlwICoqcmNoaXApCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwOworICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CisgICAgICAgICAgICAgICAgIC5kZXZfZnJlZSA9IHNuZF9teWNoaXBfZGV2X2ZyZWUsCisgICAgICAgICAgfTsKKworICAgICAgICAgICpyY2hpcCA9IE5VTEw7CisKKyAgICAgICAgICAvKiBjaGVjayBQQ0kgYXZhaWxhYmlsaXR5IGhlcmUKKyAgICAgICAgICAgKiAoc2VlICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCIpCisgICAgICAgICAgICovCisgICAgICAgICAgLi4uLgorCisgICAgICAgICAgLyogYWxsb2NhdGUgYSBjaGlwLXNwZWNpZmljIGRhdGEgd2l0aCB6ZXJvIGZpbGxlZCAqLworICAgICAgICAgIGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpCisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKworICAgICAgICAgIGNoaXAtPmNhcmQgPSBjYXJkOworCisgICAgICAgICAgLyogcmVzdCBvZiBpbml0aWFsaXphdGlvbiBoZXJlOyB3aWxsIGJlIGltcGxlbWVudGVkCisgICAgICAgICAgICogbGF0ZXIsIHNlZSAiUENJIFJlc291cmNlIE1hbmFnZW1lbnQiCisgICAgICAgICAgICovCisgICAgICAgICAgLi4uLgorCisgICAgICAgICAgZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKKyAgICAgICAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICAgICAgICAgICAgc25kX215Y2hpcF9mcmVlKGNoaXApOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CisKKyAgICAgICAgICAqcmNoaXAgPSBjaGlwOworICAgICAgICAgIHJldHVybiAwOworICB9CisKKyAgLyogY29uc3RydWN0b3IgLS0gc2VlICJDb25zdHJ1Y3RvciIgc3ViLXNlY3Rpb24gKi8KKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCisgIHsKKyAgICAgICAgICBzdGF0aWMgaW50IGRldjsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOworCisgICAgICAgICAgLyogKDEpICovCisgICAgICAgICAgaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICAgIGlmICghZW5hYmxlW2Rldl0pIHsKKyAgICAgICAgICAgICAgICAgIGRldisrOworICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogKDIpICovCisgICAgICAgICAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworCisgICAgICAgICAgLyogKDMpICovCisgICAgICAgICAgZXJyID0gc25kX215Y2hpcF9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CisgICAgICAgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgICAgICAgICAgIHNuZF9jYXJkX2ZyZWUoY2FyZCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qICg0KSAqLworICAgICAgICAgIHN0cmNweShjYXJkLT5kcml2ZXIsICJNeSBDaGlwIik7CisgICAgICAgICAgc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIk15IE93biBDaGlwIDEyMyIpOworICAgICAgICAgIHNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCBpcnEgJWkiLAorICAgICAgICAgICAgICAgICAgY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5pb3BvcnQsIGNoaXAtPmlycSk7CisKKyAgICAgICAgICAvKiAoNSkgKi8KKyAgICAgICAgICAuLi4uIC8qIGltcGxlbWVudGVkIGxhdGVyICovCisKKyAgICAgICAgICAvKiAoNikgKi8KKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKyAgICAgICAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICAgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogKDcpICovCisgICAgICAgICAgcGNpX3NldF9kcnZkYXRhKHBjaSwgY2FyZCk7CisgICAgICAgICAgZGV2Kys7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBkZXN0cnVjdG9yIC0tIHNlZSB0aGUgIkRlc3RydWN0b3IiIHN1Yi1zZWN0aW9uICovCisgIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfbXljaGlwX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQorICB7CisgICAgICAgICAgc25kX2NhcmRfZnJlZShwY2lfZ2V0X2RydmRhdGEocGNpKSk7CisgICAgICAgICAgcGNpX3NldF9kcnZkYXRhKHBjaSwgTlVMTCk7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSByZWFsIGNvbnN0cnVjdG9yIG9mIFBDSSBkcml2ZXJzIGlzIHRoZSA8ZnVuY3Rpb24+cHJvYmU8L2Z1bmN0aW9uPiBjYWxsYmFjay4KKyAgICAgIFRoZSA8ZnVuY3Rpb24+cHJvYmU8L2Z1bmN0aW9uPiBjYWxsYmFjayBhbmQgb3RoZXIgY29tcG9uZW50LWNvbnN0cnVjdG9ycyB3aGljaCBhcmUgY2FsbGVkCisgICAgICBmcm9tIHRoZSA8ZnVuY3Rpb24+cHJvYmU8L2Z1bmN0aW9uPiBjYWxsYmFjayBzaG91bGQgYmUgZGVmaW5lZCB3aXRoCisgICAgICB0aGUgPHBhcmFtZXRlcj5fX2RldmluaXQ8L3BhcmFtZXRlcj4gcHJlZml4LiBZb3UgCisgICAgICBjYW5ub3QgdXNlIHRoZSA8cGFyYW1ldGVyPl9faW5pdDwvcGFyYW1ldGVyPiBwcmVmaXggZm9yIHRoZW0sCisgICAgICBiZWNhdXNlIGFueSBQQ0kgZGV2aWNlIGNvdWxkIGJlIGEgaG90cGx1ZyBkZXZpY2UuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIDxmdW5jdGlvbj5wcm9iZTwvZnVuY3Rpb24+IGNhbGxiYWNrLCB0aGUgZm9sbG93aW5nIHNjaGVtZSBpcyBvZnRlbiB1c2VkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1kZXZpY2UtaW5kZXgiPgorICAgICAgICA8dGl0bGU+MSkgQ2hlY2sgYW5kIGluY3JlbWVudCB0aGUgZGV2aWNlIGluZGV4LjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBkZXY7CisgIC4uLi4KKyAgaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKKyAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgaWYgKCFlbmFibGVbZGV2XSkgeworICAgICAgICAgIGRldisrOworICAgICAgICAgIHJldHVybiAtRU5PRU5UOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgd2hlcmUgZW5hYmxlW2Rldl0gaXMgdGhlIG1vZHVsZSBvcHRpb24uCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBFYWNoIHRpbWUgdGhlIDxmdW5jdGlvbj5wcm9iZTwvZnVuY3Rpb24+IGNhbGxiYWNrIGlzIGNhbGxlZCwgY2hlY2sgdGhlCisgICAgICAgIGF2YWlsYWJpbGl0eSBvZiB0aGUgZGV2aWNlLiBJZiBub3QgYXZhaWxhYmxlLCBzaW1wbHkgaW5jcmVtZW50CisgICAgICAgIHRoZSBkZXZpY2UgaW5kZXggYW5kIHJldHVybnMuIGRldiB3aWxsIGJlIGluY3JlbWVudGVkIGFsc28KKyAgICAgICAgbGF0ZXIgKDxsaW5rCisgICAgICAgIGxpbmtlbmQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3Itc2V0LXBjaSI+PGNpdGV0aXRsZT5zdGVwCisgICAgICAgIDc8L2NpdGV0aXRsZT48L2xpbms+KS4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItY3JlYXRlLWNhcmQiPgorICAgICAgICA8dGl0bGU+MikgQ3JlYXRlIGEgY2FyZCBpbnN0YW5jZTwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9jYXJkICpjYXJkOworICBpbnQgZXJyOworICAuLi4uCisgIGVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGRldGFpbHMgd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24KKyAgICAgICAgICA8bGluayBsaW5rZW5kPSJjYXJkLW1hbmFnZW1lbnQtY2FyZC1pbnN0YW5jZSI+PGNpdGV0aXRsZT4KKyAgICAgICAgICBNYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1jcmVhdGUtbWFpbiI+CisgICAgICAgIDx0aXRsZT4zKSBDcmVhdGUgYSBtYWluIGNvbXBvbmVudDwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEluIHRoaXMgcGFydCwgdGhlIFBDSSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZC4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgLi4uLgorICBlcnIgPSBzbmRfbXljaGlwX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKKyAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOworICAgICAgICAgIHJldHVybiBlcnI7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIFRoZSBkZXRhaWxzIHdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBzZWN0aW9uIDxsaW5rCisgICAgICAgIGxpbmtlbmQ9InBjaS1yZXNvdXJjZSI+PGNpdGV0aXRsZT5QQ0kgUmVzb3VyY2UKKyAgICAgICAgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItbWFpbi1jb21wb25lbnQiPgorICAgICAgICA8dGl0bGU+NCkgU2V0IHRoZSBkcml2ZXIgSUQgYW5kIG5hbWUgc3RyaW5ncy48L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cmNweShjYXJkLT5kcml2ZXIsICJNeSBDaGlwIik7CisgIHN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJNeSBPd24gQ2hpcCAxMjMiKTsKKyAgc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlaSIsCisgICAgICAgICAgY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5pb3BvcnQsIGNoaXAtPmlycSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGUgZHJpdmVyIGZpZWxkIGhvbGRzIHRoZSBtaW5pbWFsIElEIHN0cmluZyBvZiB0aGUKKyAgICAgICAgY2hpcC4gVGhpcyBpcyB1c2VkIGJ5IGFsc2EtbGliJ3MgY29uZmlndXJhdG9yLCBzbyBrZWVwIGl0CisgICAgICAgIHNpbXBsZSBidXQgdW5pcXVlLiAKKyAgICAgICAgICBFdmVuIHRoZSBzYW1lIGRyaXZlciBjYW4gaGF2ZSBkaWZmZXJlbnQgZHJpdmVyIElEcyB0bworICAgICAgICBkaXN0aW5ndWlzaCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBlYWNoIGNoaXAgdHlwZS4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgc2hvcnRuYW1lIGZpZWxkIGlzIGEgc3RyaW5nIHNob3duIGFzIG1vcmUgdmVyYm9zZQorICAgICAgICBuYW1lLiBUaGUgbG9uZ25hbWUgZmllbGQgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uCisgICAgICAgIHNob3duIGluIDxmaWxlbmFtZT4vcHJvYy9hc291bmQvY2FyZHM8L2ZpbGVuYW1lPi4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3ItY3JlYXRlLW90aGVyIj4KKyAgICAgICAgPHRpdGxlPjUpIENyZWF0ZSBvdGhlciBjb21wb25lbnRzLCBzdWNoIGFzIG1peGVyLCBNSURJLCBldGMuPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSGVyZSB5b3UgZGVmaW5lIHRoZSBiYXNpYyBjb21wb25lbnRzIHN1Y2ggYXMKKyAgICAgICAgICA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlIj48Y2l0ZXRpdGxlPlBDTTwvY2l0ZXRpdGxlPjwvbGluaz4sCisgICAgICAgICAgbWl4ZXIgKGUuZy4gPGxpbmsgbGlua2VuZD0iYXBpLWFjOTciPjxjaXRldGl0bGU+QUM5NzwvY2l0ZXRpdGxlPjwvbGluaz4pLAorICAgICAgICAgIE1JREkgKGUuZy4gPGxpbmsgbGlua2VuZD0ibWlkaS1pbnRlcmZhY2UiPjxjaXRldGl0bGU+TVBVLTQwMTwvY2l0ZXRpdGxlPjwvbGluaz4pLAorICAgICAgICAgIGFuZCBvdGhlciBpbnRlcmZhY2VzLgorICAgICAgICAgIEFsc28sIGlmIHlvdSB3YW50IGEgPGxpbmsgbGlua2VuZD0icHJvYy1pbnRlcmZhY2UiPjxjaXRldGl0bGU+cHJvYworICAgICAgICBmaWxlPC9jaXRldGl0bGU+PC9saW5rPiwgZGVmaW5lIGl0IGhlcmUsIHRvby4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1yZWdpc3Rlci1jYXJkIj4KKyAgICAgICAgPHRpdGxlPjYpIFJlZ2lzdGVyIHRoZSBjYXJkIGluc3RhbmNlLjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisgIGlmIChlcnIgPCAwKSB7CisgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaWxsIGJlIGV4cGxhaW5lZCBpbiB0aGUgc2VjdGlvbiA8bGluaworICAgICAgICBsaW5rZW5kPSJjYXJkLW1hbmFnZW1lbnQtcmVnaXN0cmF0aW9uIj48Y2l0ZXRpdGxlPk1hbmFnZW1lbnQKKyAgICAgICAgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHM8L2NpdGV0aXRsZT48L2xpbms+LCB0b28uIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLXNldC1wY2kiPgorICAgICAgICA8dGl0bGU+NykgU2V0IHRoZSBQQ0kgZHJpdmVyIGRhdGEgYW5kIHJldHVybiB6ZXJvLjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgICAgICAgcGNpX3NldF9kcnZkYXRhKHBjaSwgY2FyZCk7CisgICAgICAgIGRldisrOworICAgICAgICByZXR1cm4gMDsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIEluIHRoZSBhYm92ZSwgdGhlIGNhcmQgcmVjb3JkIGlzIHN0b3JlZC4gVGhpcyBwb2ludGVyIGlzCisgICAgICAgIHVzZWQgaW4gdGhlIHJlbW92ZSBjYWxsYmFjayBhbmQgcG93ZXItbWFuYWdlbWVudAorICAgICAgICBjYWxsYmFja3MsIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1kZXN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT5EZXN0cnVjdG9yPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVzdHJ1Y3RvciwgcmVtb3ZlIGNhbGxiYWNrLCBzaW1wbHkgcmVsZWFzZXMgdGhlIGNhcmQKKyAgICAgIGluc3RhbmNlLiBUaGVuIHRoZSBBTFNBIG1pZGRsZSBsYXllciB3aWxsIHJlbGVhc2UgYWxsIHRoZQorICAgICAgYXR0YWNoZWQgY29tcG9uZW50cyBhdXRvbWF0aWNhbGx5LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEl0IHdvdWxkIGJlIHR5cGljYWxseSBsaWtlIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9teWNoaXBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpCisgIHsKKyAgICAgICAgICBzbmRfY2FyZF9mcmVlKHBjaV9nZXRfZHJ2ZGF0YShwY2kpKTsKKyAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgVGhlIGFib3ZlIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSBjYXJkIHBvaW50ZXIgaXMgc2V0IHRvIHRoZSBQQ0kKKwlkcml2ZXIgZGF0YS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1oZWFkZXItZmlsZXMiPgorICAgICAgPHRpdGxlPkhlYWRlciBGaWxlczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIHRoZSBhYm92ZSBleGFtcGxlLCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGluY2x1ZGUgZmlsZXMKKyAgICAgIGFyZSBuZWNlc3NhcnkuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisgICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyAgI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyAgI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyAgI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisJd2hlcmUgdGhlIGxhc3Qgb25lIGlzIG5lY2Vzc2FyeSBvbmx5IHdoZW4gbW9kdWxlIG9wdGlvbnMgYXJlCisgICAgICBkZWZpbmVkIGluIHRoZSBzb3VyY2UgZmlsZS4gIElmIHRoZSBjb2RlIGlzIHNwbGl0IGludG8gc2V2ZXJhbAorICAgICAgZmlsZXMsIHRoZSBmaWxlcyB3aXRob3V0IG1vZHVsZSBvcHRpb25zIGRvbid0IG5lZWQgdGhlbS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZXNlIGhlYWRlcnMsIHlvdSdsbCBuZWVkCisgICAgICA8ZmlsZW5hbWU+Jmx0O2xpbnV4L2ludGVycnVwdC5oJmd0OzwvZmlsZW5hbWU+IGZvciBpbnRlcnJ1cHQKKyAgICAgIGhhbmRsaW5nLCBhbmQgPGZpbGVuYW1lPiZsdDthc20vaW8uaCZndDs8L2ZpbGVuYW1lPiBmb3IgSS9PCisgICAgICBhY2Nlc3MuIElmIHlvdSB1c2UgdGhlIDxmdW5jdGlvbj5tZGVsYXkoKTwvZnVuY3Rpb24+IG9yCisgICAgICA8ZnVuY3Rpb24+dWRlbGF5KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMsIHlvdSdsbCBuZWVkIHRvIGluY2x1ZGUKKyAgICAgIDxmaWxlbmFtZT4mbHQ7bGludXgvZGVsYXkuaCZndDs8L2ZpbGVuYW1lPiB0b28uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBBTFNBIGludGVyZmFjZXMgbGlrZSB0aGUgUENNIGFuZCBjb250cm9sIEFQSXMgYXJlIGRlZmluZWQgaW4gb3RoZXIKKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQveHh4LmgmZ3Q7PC9maWxlbmFtZT4gaGVhZGVyIGZpbGVzLgorICAgICAgVGhleSBoYXZlIHRvIGJlIGluY2x1ZGVkIGFmdGVyCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2NvcmUuaCZndDs8L2ZpbGVuYW1lPi4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBNYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iY2FyZC1tYW5hZ2VtZW50Ij4KKyAgICA8dGl0bGU+TWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgQ29tcG9uZW50czwvdGl0bGU+CisKKyAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNhcmQtaW5zdGFuY2UiPgorICAgICAgPHRpdGxlPkNhcmQgSW5zdGFuY2U8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICBGb3IgZWFjaCBzb3VuZGNhcmQsIGEgPHF1b3RlPmNhcmQ8L3F1b3RlPiByZWNvcmQgbXVzdCBiZSBhbGxvY2F0ZWQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQSBjYXJkIHJlY29yZCBpcyB0aGUgaGVhZHF1YXJ0ZXJzIG9mIHRoZSBzb3VuZGNhcmQuICBJdCBtYW5hZ2VzCisgICAgICB0aGUgd2hvbGUgbGlzdCBvZiBkZXZpY2VzIChjb21wb25lbnRzKSBvbiB0aGUgc291bmRjYXJkLCBzdWNoIGFzCisgICAgICBQQ00sIG1peGVycywgTUlESSwgc3ludGhlc2l6ZXIsIGFuZCBzbyBvbi4gIEFsc28sIHRoZSBjYXJkCisgICAgICByZWNvcmQgaG9sZHMgdGhlIElEIGFuZCB0aGUgbmFtZSBzdHJpbmdzIG9mIHRoZSBjYXJkLCBtYW5hZ2VzCisgICAgICB0aGUgcm9vdCBvZiBwcm9jIGZpbGVzLCBhbmQgY29udHJvbHMgdGhlIHBvd2VyLW1hbmFnZW1lbnQgc3RhdGVzCisgICAgICBhbmQgaG90cGx1ZyBkaXNjb25uZWN0aW9ucy4gIFRoZSBjb21wb25lbnQgbGlzdCBvbiB0aGUgY2FyZAorICAgICAgcmVjb3JkIGlzIHVzZWQgdG8gbWFuYWdlIHRoZSBjb3JyZWN0IHJlbGVhc2Ugb2YgcmVzb3VyY2VzIGF0CisgICAgICBkZXN0cnVjdGlvbi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBcyBtZW50aW9uZWQgYWJvdmUsIHRvIGNyZWF0ZSBhIGNhcmQgaW5zdGFuY2UsIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9jcmVhdGUoKTwvZnVuY3Rpb24+LgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKyAgaW50IGVycjsKKyAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgbW9kdWxlLCBleHRyYV9zaXplLCAmY2FyZCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmdW5jdGlvbiB0YWtlcyBmaXZlIGFyZ3VtZW50cywgdGhlIGNhcmQtaW5kZXggbnVtYmVyLCB0aGUKKyAgICAgICAgaWQgc3RyaW5nLCB0aGUgbW9kdWxlIHBvaW50ZXIgKHVzdWFsbHkKKyAgICAgICAgPGNvbnN0YW50PlRISVNfTU9EVUxFPC9jb25zdGFudD4pLAorICAgICAgICB0aGUgc2l6ZSBvZiBleHRyYS1kYXRhIHNwYWNlLCBhbmQgdGhlIHBvaW50ZXIgdG8gcmV0dXJuIHRoZQorICAgICAgICBjYXJkIGluc3RhbmNlLiAgVGhlIGV4dHJhX3NpemUgYXJndW1lbnQgaXMgdXNlZCB0bworICAgICAgICBhbGxvY2F0ZSBjYXJkLSZndDtwcml2YXRlX2RhdGEgZm9yIHRoZQorICAgICAgICBjaGlwLXNwZWNpZmljIGRhdGEuICBOb3RlIHRoYXQgdGhlc2UgZGF0YQorICAgICAgICBhcmUgYWxsb2NhdGVkIGJ5IDxmdW5jdGlvbj5zbmRfY2FyZF9jcmVhdGUoKTwvZnVuY3Rpb24+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtY29tcG9uZW50Ij4KKyAgICAgIDx0aXRsZT5Db21wb25lbnRzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciB0aGUgY2FyZCBpcyBjcmVhdGVkLCB5b3UgY2FuIGF0dGFjaCB0aGUgY29tcG9uZW50cworICAgICAgKGRldmljZXMpIHRvIHRoZSBjYXJkIGluc3RhbmNlLiBJbiBhbiBBTFNBIGRyaXZlciwgYSBjb21wb25lbnQgaXMKKyAgICAgIHJlcHJlc2VudGVkIGFzIGEgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9kZXZpY2U8L3N0cnVjdG5hbWU+IG9iamVjdC4KKyAgICAgIEEgY29tcG9uZW50IGNhbiBiZSBhIFBDTSBpbnN0YW5jZSwgYSBjb250cm9sIGludGVyZmFjZSwgYSByYXcKKyAgICAgIE1JREkgaW50ZXJmYWNlLCBldGMuICBFYWNoIHN1Y2ggaW5zdGFuY2UgaGFzIG9uZSBjb21wb25lbnQKKyAgICAgIGVudHJ5LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQSBjb21wb25lbnQgY2FuIGJlIGNyZWF0ZWQgdmlhCisgICAgICAgIDxmdW5jdGlvbj5zbmRfZGV2aWNlX25ldygpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9YWFgsIGNoaXAsICZvcHMpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIHRha2VzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBkZXZpY2UtbGV2ZWwKKyAgICAgICg8Y29uc3RhbnQ+U05EUlZfREVWX1hYWDwvY29uc3RhbnQ+KSwgdGhlIGRhdGEgcG9pbnRlciwgYW5kIHRoZQorICAgICAgY2FsbGJhY2sgcG9pbnRlcnMgKDxwYXJhbWV0ZXI+JmFtcDtvcHM8L3BhcmFtZXRlcj4pLiBUaGUKKyAgICAgIGRldmljZS1sZXZlbCBkZWZpbmVzIHRoZSB0eXBlIG9mIGNvbXBvbmVudHMgYW5kIHRoZSBvcmRlciBvZgorICAgICAgcmVnaXN0cmF0aW9uIGFuZCBkZS1yZWdpc3RyYXRpb24uICBGb3IgbW9zdCBjb21wb25lbnRzLCB0aGUKKyAgICAgIGRldmljZS1sZXZlbCBpcyBhbHJlYWR5IGRlZmluZWQuICBGb3IgYSB1c2VyLWRlZmluZWQgY29tcG9uZW50LAorICAgICAgeW91IGNhbiB1c2UgPGNvbnN0YW50PlNORFJWX0RFVl9MT1dMRVZFTDwvY29uc3RhbnQ+LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoaXMgZnVuY3Rpb24gaXRzZWxmIGRvZXNuJ3QgYWxsb2NhdGUgdGhlIGRhdGEgc3BhY2UuIFRoZSBkYXRhCisgICAgICBtdXN0IGJlIGFsbG9jYXRlZCBtYW51YWxseSBiZWZvcmVoYW5kLCBhbmQgaXRzIHBvaW50ZXIgaXMgcGFzc2VkCisgICAgICBhcyB0aGUgYXJndW1lbnQuIFRoaXMgcG9pbnRlciBpcyB1c2VkIGFzIHRoZQorICAgICAgKDxwYXJhbWV0ZXI+Y2hpcDwvcGFyYW1ldGVyPiBpZGVudGlmaWVyIGluIHRoZSBhYm92ZSBleGFtcGxlKQorICAgICAgZm9yIHRoZSBpbnN0YW5jZS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBFYWNoIHByZS1kZWZpbmVkIEFMU0EgY29tcG9uZW50IHN1Y2ggYXMgYWM5NyBhbmQgcGNtIGNhbGxzCisgICAgICA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+IGluc2lkZSBpdHMKKyAgICAgIGNvbnN0cnVjdG9yLiBUaGUgZGVzdHJ1Y3RvciBmb3IgZWFjaCBjb21wb25lbnQgaXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgIGNhbGxiYWNrIHBvaW50ZXJzLiAgSGVuY2UsIHlvdSBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZgorICAgICAgY2FsbGluZyBhIGRlc3RydWN0b3IgZm9yIHN1Y2ggYSBjb21wb25lbnQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3Ugd2lzaCB0byBjcmVhdGUgeW91ciBvd24gY29tcG9uZW50LCB5b3UgbmVlZCB0bworICAgICAgc2V0IHRoZSBkZXN0cnVjdG9yIGZ1bmN0aW9uIHRvIHRoZSBkZXZfZnJlZSBjYWxsYmFjayBpbgorICAgICAgdGhlIDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+LCBzbyB0aGF0IGl0IGNhbiBiZSByZWxlYXNlZAorICAgICAgYXV0b21hdGljYWxseSB2aWEgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWUoKTwvZnVuY3Rpb24+LgorICAgICAgVGhlIG5leHQgZXhhbXBsZSB3aWxsIHNob3cgYW4gaW1wbGVtZW50YXRpb24gb2YgY2hpcC1zcGVjaWZpYworICAgICAgZGF0YS4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMiPgorICAgICAgPHRpdGxlPkNoaXAtU3BlY2lmaWMgRGF0YTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgIENoaXAtc3BlY2lmaWMgaW5mb3JtYXRpb24sIGUuZy4gdGhlIEkvTyBwb3J0IGFkZHJlc3MsIGl0cworICAgICAgcmVzb3VyY2UgcG9pbnRlciwgb3IgdGhlIGlycSBudW1iZXIsIGlzIHN0b3JlZCBpbiB0aGUKKyAgICAgIGNoaXAtc3BlY2lmaWMgcmVjb3JkLgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBteWNoaXAgeworICAgICAgICAgIC4uLi4KKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gZ2VuZXJhbCwgdGhlcmUgYXJlIHR3byB3YXlzIG9mIGFsbG9jYXRpbmcgdGhlIGNoaXAgcmVjb3JkLgorICAgICAgPC9wYXJhPgorCisgICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtc25kLWNhcmQtbmV3Ij4KKyAgICAgICAgPHRpdGxlPjEuIEFsbG9jYXRpbmcgdmlhIDxmdW5jdGlvbj5zbmRfY2FyZF9jcmVhdGUoKTwvZnVuY3Rpb24+LjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgeW91IGNhbiBwYXNzIHRoZSBleHRyYS1kYXRhLWxlbmd0aAorCSAgdG8gdGhlIDR0aCBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPiwgaS5lLgorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IG15Y2hpcCksICZjYXJkKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIHN0cnVjdCA8c3RydWN0bmFtZT5teWNoaXA8L3N0cnVjdG5hbWU+IGlzIHRoZSB0eXBlIG9mIHRoZSBjaGlwIHJlY29yZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEluIHJldHVybiwgdGhlIGFsbG9jYXRlZCByZWNvcmQgY2FuIGJlIGFjY2Vzc2VkIGFzCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBXaXRoIHRoaXMgbWV0aG9kLCB5b3UgZG9uJ3QgaGF2ZSB0byBhbGxvY2F0ZSB0d2ljZS4KKyAgICAgICAgICBUaGUgcmVjb3JkIGlzIHJlbGVhc2VkIHRvZ2V0aGVyIHdpdGggdGhlIGNhcmQgaW5zdGFuY2UuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNhcmQtbWFuYWdlbWVudC1jaGlwLXNwZWNpZmljLWFsbG9jYXRlLWV4dHJhIj4KKyAgICAgICAgPHRpdGxlPjIuIEFsbG9jYXRpbmcgYW4gZXh0cmEgZGV2aWNlLjwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQWZ0ZXIgYWxsb2NhdGluZyBhIGNhcmQgaW5zdGFuY2UgdmlhCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2NyZWF0ZSgpPC9mdW5jdGlvbj4gKHdpdGgKKyAgICAgICAgICA8Y29uc3RhbnQ+MDwvY29uc3RhbnQ+IG9uIHRoZSA0dGggYXJnKSwgY2FsbAorICAgICAgICAgIDxmdW5jdGlvbj5remFsbG9jKCk8L2Z1bmN0aW9uPi4gCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKyAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisgIC4uLi4uCisgIGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGNoaXAgcmVjb3JkIHNob3VsZCBoYXZlIHRoZSBmaWVsZCB0byBob2xkIHRoZSBjYXJkCisgICAgICAgICAgcG9pbnRlciBhdCBsZWFzdCwgCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBteWNoaXAgeworICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKyAgICAgICAgICAuLi4uCisgIH07CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGVuLCBzZXQgdGhlIGNhcmQgcG9pbnRlciBpbiB0aGUgcmV0dXJuZWQgY2hpcCBpbnN0YW5jZS4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgY2hpcC0+Y2FyZCA9IGNhcmQ7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBOZXh0LCBpbml0aWFsaXplIHRoZSBmaWVsZHMsIGFuZCByZWdpc3RlciB0aGlzIGNoaXAKKyAgICAgICAgICByZWNvcmQgYXMgYSBsb3ctbGV2ZWwgZGV2aWNlIHdpdGggYSBzcGVjaWZpZWQKKyAgICAgICAgICA8cGFyYW1ldGVyPm9wczwvcGFyYW1ldGVyPiwgCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0geworICAgICAgICAgIC5kZXZfZnJlZSA9ICAgICAgICBzbmRfbXljaGlwX2Rldl9mcmVlLAorICB9OworICAuLi4uCisgIHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcyk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICA8ZnVuY3Rpb24+c25kX215Y2hpcF9kZXZfZnJlZSgpPC9mdW5jdGlvbj4gaXMgdGhlCisgICAgICAgIGRldmljZS1kZXN0cnVjdG9yIGZ1bmN0aW9uLCB3aGljaCB3aWxsIGNhbGwgdGhlIHJlYWwKKyAgICAgICAgZGVzdHJ1Y3Rvci4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQorICB7CisgICAgICAgICAgcmV0dXJuIHNuZF9teWNoaXBfZnJlZShkZXZpY2UtPmRldmljZV9kYXRhKTsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgd2hlcmUgPGZ1bmN0aW9uPnNuZF9teWNoaXBfZnJlZSgpPC9mdW5jdGlvbj4gaXMgdGhlIHJlYWwgZGVzdHJ1Y3Rvci4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtcmVnaXN0cmF0aW9uIj4KKyAgICAgIDx0aXRsZT5SZWdpc3RyYXRpb24gYW5kIFJlbGVhc2U8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEFmdGVyIGFsbCBjb21wb25lbnRzIGFyZSBhc3NpZ25lZCwgcmVnaXN0ZXIgdGhlIGNhcmQgaW5zdGFuY2UKKyAgICAgIGJ5IGNhbGxpbmcgPGZ1bmN0aW9uPnNuZF9jYXJkX3JlZ2lzdGVyKCk8L2Z1bmN0aW9uPi4gQWNjZXNzCisgICAgICB0byB0aGUgZGV2aWNlIGZpbGVzIGlzIGVuYWJsZWQgYXQgdGhpcyBwb2ludC4gVGhhdCBpcywgYmVmb3JlCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfcmVnaXN0ZXIoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgdGhlCisgICAgICBjb21wb25lbnRzIGFyZSBzYWZlbHkgaW5hY2Nlc3NpYmxlIGZyb20gZXh0ZXJuYWwgc2lkZS4gSWYgdGhpcworICAgICAgY2FsbCBmYWlscywgZXhpdCB0aGUgcHJvYmUgZnVuY3Rpb24gYWZ0ZXIgcmVsZWFzaW5nIHRoZSBjYXJkIHZpYQorICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWUoKTwvZnVuY3Rpb24+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciByZWxlYXNpbmcgdGhlIGNhcmQgaW5zdGFuY2UsIHlvdSBjYW4gY2FsbCBzaW1wbHkKKyAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9mcmVlKCk8L2Z1bmN0aW9uPi4gQXMgbWVudGlvbmVkIGVhcmxpZXIsIGFsbAorICAgICAgY29tcG9uZW50cyBhcmUgcmVsZWFzZWQgYXV0b21hdGljYWxseSBieSB0aGlzIGNhbGwuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQXMgZnVydGhlciBub3RlcywgdGhlIGRlc3RydWN0b3JzIChib3RoCisgICAgICA8ZnVuY3Rpb24+c25kX215Y2hpcF9kZXZfZnJlZTwvZnVuY3Rpb24+IGFuZAorICAgICAgPGZ1bmN0aW9uPnNuZF9teWNoaXBfZnJlZTwvZnVuY3Rpb24+KSBjYW5ub3QgYmUgZGVmaW5lZCB3aXRoCisgICAgICB0aGUgPHBhcmFtZXRlcj5fX2RldmV4aXQ8L3BhcmFtZXRlcj4gcHJlZml4LCBiZWNhdXNlIHRoZXkgbWF5IGJlCisgICAgICBjYWxsZWQgZnJvbSB0aGUgY29uc3RydWN0b3IsIHRvbywgYXQgdGhlIGZhbHNlIHBhdGguIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIEZvciBhIGRldmljZSB3aGljaCBhbGxvd3MgaG90cGx1Z2dpbmcsIHlvdSBjYW4gdXNlCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZDwvZnVuY3Rpb24+LiAgVGhpcyBvbmUgd2lsbAorICAgICAgcG9zdHBvbmUgdGhlIGRlc3RydWN0aW9uIHVudGlsIGFsbCBkZXZpY2VzIGFyZSBjbG9zZWQuCisgICAgICA8L3BhcmE+CisKKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9InBjaS1yZXNvdXJjZSI+CisgICAgPHRpdGxlPlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50PC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2UtZXhhbXBsZSI+CisgICAgICA8dGl0bGU+RnVsbCBDb2RlIEV4YW1wbGU8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoaXMgc2VjdGlvbiwgd2UnbGwgY29tcGxldGUgdGhlIGNoaXAtc3BlY2lmaWMgY29uc3RydWN0b3IsCisgICAgICBkZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LAorICAgICAgYmVsb3cuIAorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5QQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCBFeGFtcGxlPC90aXRsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IG15Y2hpcCB7CisgICAgICAgICAgc3RydWN0IHNuZF9jYXJkICpjYXJkOworICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2k7CisKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcnQ7CisgICAgICAgICAgaW50IGlycTsKKyAgfTsKKworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZnJlZShzdHJ1Y3QgbXljaGlwICpjaGlwKQorICB7CisgICAgICAgICAgLyogZGlzYWJsZSBoYXJkd2FyZSBoZXJlIGlmIGFueSAqLworICAgICAgICAgIC4uLi4gLyogKG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGRvY3VtZW50KSAqLworCisgICAgICAgICAgLyogcmVsZWFzZSB0aGUgaXJxICovCisgICAgICAgICAgaWYgKGNoaXAtPmlycSA+PSAwKQorICAgICAgICAgICAgICAgICAgZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKyAgICAgICAgICAvKiByZWxlYXNlIHRoZSBJL08gcG9ydHMgJiBtZW1vcnkgKi8KKyAgICAgICAgICBwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CisgICAgICAgICAgLyogZGlzYWJsZSB0aGUgUENJIGVudHJ5ICovCisgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CisgICAgICAgICAgLyogcmVsZWFzZSB0aGUgZGF0YSAqLworICAgICAgICAgIGtmcmVlKGNoaXApOworICAgICAgICAgIHJldHVybiAwOworICB9CisKKyAgLyogY2hpcC1zcGVjaWZpYyBjb25zdHJ1Y3RvciAqLworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBteWNoaXAgKipyY2hpcCkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXA7CisgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICBzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKKyAgICAgICAgICAgICAgICAgLmRldl9mcmVlID0gc25kX215Y2hpcF9kZXZfZnJlZSwKKyAgICAgICAgICB9OworCisgICAgICAgICAgKnJjaGlwID0gTlVMTDsKKworICAgICAgICAgIC8qIGluaXRpYWxpemUgdGhlIFBDSSBlbnRyeSAqLworICAgICAgICAgIGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIC8qIGNoZWNrIFBDSSBhdmFpbGFiaWxpdHkgKDI4Yml0IERNQSkgKi8KKyAgICAgICAgICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDAgfHwKKyAgICAgICAgICAgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCkgeworICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOworICAgICAgICAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOWElPOworICAgICAgICAgIH0KKworICAgICAgICAgIGNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOworICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgc3R1ZmYgKi8KKyAgICAgICAgICBjaGlwLT5jYXJkID0gY2FyZDsKKyAgICAgICAgICBjaGlwLT5wY2kgPSBwY2k7CisgICAgICAgICAgY2hpcC0+aXJxID0gLTE7CisKKyAgICAgICAgICAvKiAoMSkgUENJIHJlc291cmNlIGFsbG9jYXRpb24gKi8KKyAgICAgICAgICBlcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaSwgIk15IENoaXAiKTsKKyAgICAgICAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICAgICAgICAgICAga2ZyZWUoY2hpcCk7CisgICAgICAgICAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorICAgICAgICAgIGNoaXAtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKKyAgICAgICAgICBpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9teWNoaXBfaW50ZXJydXB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBJUlFGX1NIQVJFRCwgIk15IENoaXAiLCBjaGlwKSkgeworICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpcnEgJWRcbiIsIHBjaS0+aXJxKTsKKyAgICAgICAgICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgICAgfQorICAgICAgICAgIGNoaXAtPmlycSA9IHBjaS0+aXJxOworCisgICAgICAgICAgLyogKDIpIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjaGlwIGhhcmR3YXJlICovCisgICAgICAgICAgLi4uLiAvKiAgIChub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBkb2N1bWVudCkgKi8KKworICAgICAgICAgIGVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcyk7CisgICAgICAgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorCisgICAgICAgICAgc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNpLT5kZXYpOworCisgICAgICAgICAgKnJjaGlwID0gY2hpcDsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfSAgICAgICAgCisKKyAgLyogUENJIElEcyAqLworICBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX215Y2hpcF9pZHNbXSA9IHsKKyAgICAgICAgICB7IFBDSV9WRU5ET1JfSURfRk9PLCBQQ0lfREVWSUNFX0lEX0JBUiwKKyAgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCisgICAgICAgICAgLi4uLgorICAgICAgICAgIHsgMCwgfQorICB9OworICBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc25kX215Y2hpcF9pZHMpOworCisgIC8qIHBjaV9kcml2ZXIgZGVmaW5pdGlvbiAqLworICBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0geworICAgICAgICAgIC5uYW1lID0gIk15IE93biBDaGlwIiwKKyAgICAgICAgICAuaWRfdGFibGUgPSBzbmRfbXljaGlwX2lkcywKKyAgICAgICAgICAucHJvYmUgPSBzbmRfbXljaGlwX3Byb2JlLAorICAgICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXljaGlwX3JlbW92ZSksCisgIH07CisKKyAgLyogbW9kdWxlIGluaXRpYWxpemF0aW9uICovCisgIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9teWNoaXBfaW5pdCh2b2lkKQorICB7CisgICAgICAgICAgcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisgIH0KKworICAvKiBtb2R1bGUgY2xlYW4gdXAgKi8KKyAgc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY2FyZF9teWNoaXBfZXhpdCh2b2lkKQorICB7CisgICAgICAgICAgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOworICB9CisKKyAgbW9kdWxlX2luaXQoYWxzYV9jYXJkX215Y2hpcF9pbml0KQorICBtb2R1bGVfZXhpdChhbHNhX2NhcmRfbXljaGlwX2V4aXQpCisKKyAgRVhQT1JUX05PX1NZTUJPTFM7IC8qIGZvciBvbGQga2VybmVscyBvbmx5ICovCitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1zb21lLWhhZnRhcyI+CisgICAgICA8dGl0bGU+U29tZSBIYWZ0YSdzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgYWxsb2NhdGlvbiBvZiBQQ0kgcmVzb3VyY2VzIGlzIGRvbmUgaW4gdGhlCisgICAgICA8ZnVuY3Rpb24+cHJvYmUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLCBhbmQgdXN1YWxseSBhbiBleHRyYQorICAgICAgPGZ1bmN0aW9uPnh4eF9jcmVhdGUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIHdyaXR0ZW4gZm9yIHRoaXMKKyAgICAgIHB1cnBvc2UuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBQQ0kgZGV2aWNlcywgeW91IGZpcnN0IGhhdmUgdG8gY2FsbAorICAgICAgdGhlIDxmdW5jdGlvbj5wY2lfZW5hYmxlX2RldmljZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gYmVmb3JlCisgICAgICBhbGxvY2F0aW5nIHJlc291cmNlcy4gQWxzbywgeW91IG5lZWQgdG8gc2V0IHRoZSBwcm9wZXIgUENJIERNQQorICAgICAgbWFzayB0byBsaW1pdCB0aGUgYWNjZXNzZWQgSS9PIHJhbmdlLiBJbiBzb21lIGNhc2VzLCB5b3UgbWlnaHQKKyAgICAgIG5lZWQgdG8gY2FsbCA8ZnVuY3Rpb24+cGNpX3NldF9tYXN0ZXIoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uLAorICAgICAgdG9vLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgU3VwcG9zZSB0aGUgMjhiaXQgbWFzaywgYW5kIHRoZSBjb2RlIHRvIGJlIGFkZGVkIHdvdWxkIGJlIGxpa2U6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKKyAgaWYgKGVyciA8IDApCisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgaWYgKHBjaV9zZXRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwIHx8CisgICAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwKSB7CisgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJlcnJvciB0byBzZXQgMjhiaXQgbWFzayBETUFcbiIpOworICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOworICAgICAgICAgIHJldHVybiAtRU5YSU87CisgIH0KKyAgCitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNpLXJlc291cmNlLXJlc291cmNlLWFsbG9jYXRpb24iPgorICAgICAgPHRpdGxlPlJlc291cmNlIEFsbG9jYXRpb248L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIEkvTyBwb3J0cyBhbmQgaXJxcyBpcyBkb25lIHZpYSBzdGFuZGFyZCBrZXJuZWwKKyAgICAgIGZ1bmN0aW9ucy4gVW5saWtlIEFMU0EgdmVyLjAuNS54LiwgdGhlcmUgYXJlIG5vIGhlbHBlcnMgZm9yCisgICAgICB0aGF0LiBBbmQgdGhlc2UgcmVzb3VyY2VzIG11c3QgYmUgcmVsZWFzZWQgaW4gdGhlIGRlc3RydWN0b3IKKyAgICAgIGZ1bmN0aW9uIChzZWUgYmVsb3cpLiBBbHNvLCBvbiBBTFNBIDAuOS54LCB5b3UgZG9uJ3QgbmVlZCB0bworICAgICAgYWxsb2NhdGUgKHBzZXVkby0pRE1BIGZvciBQQ0kgbGlrZSBpbiBBTFNBIDAuNS54LgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTm93IGFzc3VtZSB0aGF0IHRoZSBQQ0kgZGV2aWNlIGhhcyBhbiBJL08gcG9ydCB3aXRoIDggYnl0ZXMKKyAgICAgICAgYW5kIGFuIGludGVycnVwdC4gVGhlbiBzdHJ1Y3QgPHN0cnVjdG5hbWU+bXljaGlwPC9zdHJ1Y3RuYW1lPiB3aWxsIGhhdmUgdGhlCisgICAgICAgIGZvbGxvd2luZyBmaWVsZHM6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IG15Y2hpcCB7CisgICAgICAgICAgc3RydWN0IHNuZF9jYXJkICpjYXJkOworCisgICAgICAgICAgdW5zaWduZWQgbG9uZyBwb3J0OworICAgICAgICAgIGludCBpcnE7CisgIH07CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBhbiBJL08gcG9ydCAoYW5kIGFsc28gYSBtZW1vcnkgcmVnaW9uKSwgeW91IG5lZWQgdG8gaGF2ZQorICAgICAgdGhlIHJlc291cmNlIHBvaW50ZXIgZm9yIHRoZSBzdGFuZGFyZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBGb3IKKyAgICAgIGFuIGlycSwgeW91IGhhdmUgdG8ga2VlcCBvbmx5IHRoZSBpcnEgbnVtYmVyIChpbnRlZ2VyKS4gQnV0IHlvdQorICAgICAgbmVlZCB0byBpbml0aWFsaXplIHRoaXMgbnVtYmVyIGFzIC0xIGJlZm9yZSBhY3R1YWwgYWxsb2NhdGlvbiwKKyAgICAgIHNpbmNlIGlycSAwIGlzIHZhbGlkLiBUaGUgcG9ydCBhZGRyZXNzIGFuZCBpdHMgcmVzb3VyY2UgcG9pbnRlcgorICAgICAgY2FuIGJlIGluaXRpYWxpemVkIGFzIG51bGwgYnkKKyAgICAgIDxmdW5jdGlvbj5remFsbG9jKCk8L2Z1bmN0aW9uPiBhdXRvbWF0aWNhbGx5LCBzbyB5b3UKKyAgICAgIGRvbid0IGhhdmUgdG8gdGFrZSBjYXJlIG9mIHJlc2V0dGluZyB0aGVtLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIGFuIEkvTyBwb3J0IGlzIGRvbmUgbGlrZSB0aGlzOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCAiTXkgQ2hpcCIpOworICBpZiAoZXJyIDwgMCkgeyAKKyAgICAgICAgICBrZnJlZShjaGlwKTsKKyAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICB9CisgIGNoaXAtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPCEtLSBvYnNvbGV0ZSAtLT4KKyAgICAgICAgSXQgd2lsbCByZXNlcnZlIHRoZSBJL08gcG9ydCByZWdpb24gb2YgOCBieXRlcyBvZiB0aGUgZ2l2ZW4KKyAgICAgIFBDSSBkZXZpY2UuIFRoZSByZXR1cm5lZCB2YWx1ZSwgY2hpcC0mZ3Q7cmVzX3BvcnQsIGlzIGFsbG9jYXRlZAorICAgICAgdmlhIDxmdW5jdGlvbj5rbWFsbG9jKCk8L2Z1bmN0aW9uPiBieQorICAgICAgPGZ1bmN0aW9uPnJlcXVlc3RfcmVnaW9uKCk8L2Z1bmN0aW9uPi4gVGhlIHBvaW50ZXIgbXVzdCBiZQorICAgICAgcmVsZWFzZWQgdmlhIDxmdW5jdGlvbj5rZnJlZSgpPC9mdW5jdGlvbj4sIGJ1dCB0aGVyZSBpcyBhCisgICAgICBwcm9ibGVtIHdpdGggdGhpcy4gVGhpcyBpc3N1ZSB3aWxsIGJlIGV4cGxhaW5lZCBsYXRlci4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIGFuIGludGVycnVwdCBzb3VyY2UgaXMgZG9uZSBsaWtlIHRoaXM6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfbXljaGlwX2ludGVycnVwdCwKKyAgICAgICAgICAgICAgICAgIElSUUZfU0hBUkVELCAiTXkgQ2hpcCIsIGNoaXApKSB7CisgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZ3JhYiBpcnEgJWRcbiIsIHBjaS0+aXJxKTsKKyAgICAgICAgICBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7CisgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKKyAgfQorICBjaGlwLT5pcnEgPSBwY2ktPmlycTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIHdoZXJlIDxmdW5jdGlvbj5zbmRfbXljaGlwX2ludGVycnVwdCgpPC9mdW5jdGlvbj4gaXMgdGhlCisgICAgICBpbnRlcnJ1cHQgaGFuZGxlciBkZWZpbmVkIDxsaW5rCisgICAgICBsaW5rZW5kPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyIj48Y2l0ZXRpdGxlPmxhdGVyPC9jaXRldGl0bGU+PC9saW5rPi4KKyAgICAgIE5vdGUgdGhhdCBjaGlwLSZndDtpcnEgc2hvdWxkIGJlIGRlZmluZWQKKyAgICAgIG9ubHkgd2hlbiA8ZnVuY3Rpb24+cmVxdWVzdF9pcnEoKTwvZnVuY3Rpb24+IHN1Y2NlZWRlZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBPbiB0aGUgUENJIGJ1cywgaW50ZXJydXB0cyBjYW4gYmUgc2hhcmVkLiBUaHVzLAorICAgICAgPGNvbnN0YW50PklSUUZfU0hBUkVEPC9jb25zdGFudD4gaXMgdXNlZCBhcyB0aGUgaW50ZXJydXB0IGZsYWcgb2YKKyAgICAgIDxmdW5jdGlvbj5yZXF1ZXN0X2lycSgpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGxhc3QgYXJndW1lbnQgb2YgPGZ1bmN0aW9uPnJlcXVlc3RfaXJxKCk8L2Z1bmN0aW9uPiBpcyB0aGUKKyAgICAgIGRhdGEgcG9pbnRlciBwYXNzZWQgdG8gdGhlIGludGVycnVwdCBoYW5kbGVyLiBVc3VhbGx5LCB0aGUKKyAgICAgIGNoaXAtc3BlY2lmaWMgcmVjb3JkIGlzIHVzZWQgZm9yIHRoYXQsIGJ1dCB5b3UgY2FuIHVzZSB3aGF0IHlvdQorICAgICAgbGlrZSwgdG9vLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEkgd29uJ3QgZ2l2ZSBkZXRhaWxzIGFib3V0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhdCB0aGlzCisgICAgICAgIHBvaW50LCBidXQgYXQgbGVhc3QgaXRzIGFwcGVhcmFuY2UgY2FuIGJlIGV4cGxhaW5lZCBub3cuIFRoZQorICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlciBsb29rcyB1c3VhbGx5IGxpa2UgdGhlIGZvbGxvd2luZzogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGlycXJldHVybl90IHNuZF9teWNoaXBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBkZXZfaWQ7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBOb3cgbGV0J3Mgd3JpdGUgdGhlIGNvcnJlc3BvbmRpbmcgZGVzdHJ1Y3RvciBmb3IgdGhlIHJlc291cmNlcworICAgICAgYWJvdmUuIFRoZSByb2xlIG9mIGRlc3RydWN0b3IgaXMgc2ltcGxlOiBkaXNhYmxlIHRoZSBoYXJkd2FyZQorICAgICAgKGlmIGFscmVhZHkgYWN0aXZhdGVkKSBhbmQgcmVsZWFzZSB0aGUgcmVzb3VyY2VzLiBTbyBmYXIsIHdlCisgICAgICBoYXZlIG5vIGhhcmR3YXJlIHBhcnQsIHNvIHRoZSBkaXNhYmxpbmcgY29kZSBpcyBub3Qgd3JpdHRlbiBoZXJlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRvIHJlbGVhc2UgdGhlIHJlc291cmNlcywgdGhlIDxxdW90ZT5jaGVjay1hbmQtcmVsZWFzZTwvcXVvdGU+CisgICAgICAgIG1ldGhvZCBpcyBhIHNhZmVyIHdheS4gRm9yIHRoZSBpbnRlcnJ1cHQsIGRvIGxpa2UgdGhpczogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWYgKGNoaXAtPmlycSA+PSAwKQorICAgICAgICAgIGZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBTaW5jZSB0aGUgaXJxIG51bWJlciBjYW4gc3RhcnQgZnJvbSAwLCB5b3Ugc2hvdWxkIGluaXRpYWxpemUKKyAgICAgICAgY2hpcC0mZ3Q7aXJxIHdpdGggYSBuZWdhdGl2ZSB2YWx1ZSAoZS5nLiAtMSksIHNvIHRoYXQgeW91IGNhbgorICAgICAgICBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIGlycSBudW1iZXIgYXMgYWJvdmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaGVuIHlvdSByZXF1ZXN0ZWQgSS9PIHBvcnRzIG9yIG1lbW9yeSByZWdpb25zIHZpYQorCTxmdW5jdGlvbj5wY2lfcmVxdWVzdF9yZWdpb24oKTwvZnVuY3Rpb24+IG9yCisJPGZ1bmN0aW9uPnBjaV9yZXF1ZXN0X3JlZ2lvbnMoKTwvZnVuY3Rpb24+IGxpa2UgaW4gdGhpcyBleGFtcGxlLAorCXJlbGVhc2UgdGhlIHJlc291cmNlKHMpIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uLAorCTxmdW5jdGlvbj5wY2lfcmVsZWFzZV9yZWdpb24oKTwvZnVuY3Rpb24+IG9yCisJPGZ1bmN0aW9uPnBjaV9yZWxlYXNlX3JlZ2lvbnMoKTwvZnVuY3Rpb24+LgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlXaGVuIHlvdSByZXF1ZXN0ZWQgbWFudWFsbHkgdmlhIDxmdW5jdGlvbj5yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4KKwlvciA8ZnVuY3Rpb24+cmVxdWVzdF9tZW1fcmVnaW9uPC9mdW5jdGlvbj4sIHlvdSBjYW4gcmVsZWFzZSBpdCB2aWEKKwk8ZnVuY3Rpb24+cmVsZWFzZV9yZXNvdXJjZSgpPC9mdW5jdGlvbj4uICBTdXBwb3NlIHRoYXQgeW91IGtlZXAKKwl0aGUgcmVzb3VyY2UgcG9pbnRlciByZXR1cm5lZCBmcm9tIDxmdW5jdGlvbj5yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4KKwlpbiBjaGlwLSZndDtyZXNfcG9ydCwgdGhlIHJlbGVhc2UgcHJvY2VkdXJlIGxvb2tzIGxpa2U6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfcG9ydCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBEb24ndCBmb3JnZXQgdG8gY2FsbCA8ZnVuY3Rpb24+cGNpX2Rpc2FibGVfZGV2aWNlKCk8L2Z1bmN0aW9uPgorICAgICAgYmVmb3JlIHRoZSBlbmQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBbmQgZmluYWxseSwgcmVsZWFzZSB0aGUgY2hpcC1zcGVjaWZpYyByZWNvcmQuCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAga2ZyZWUoY2hpcCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBZ2FpbiwgcmVtZW1iZXIgdGhhdCB5b3UgY2Fubm90CisgICAgICB1c2UgdGhlIDxwYXJhbWV0ZXI+X19kZXZleGl0PC9wYXJhbWV0ZXI+IHByZWZpeCBmb3IgdGhpcyBkZXN0cnVjdG9yLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBXZSBkaWRuJ3QgaW1wbGVtZW50IHRoZSBoYXJkd2FyZSBkaXNhYmxpbmcgcGFydCBpbiB0aGUgYWJvdmUuCisgICAgICBJZiB5b3UgbmVlZCB0byBkbyB0aGlzLCBwbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZXN0cnVjdG9yIG1heSBiZQorICAgICAgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2hpcCBpcyBjb21wbGV0ZWQuCisgICAgICBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSBhIGZsYWcgdG8gc2tpcCBoYXJkd2FyZSBkaXNhYmxpbmcKKyAgICAgIGlmIHRoZSBoYXJkd2FyZSB3YXMgbm90IGluaXRpYWxpemVkIHlldC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBXaGVuIHRoZSBjaGlwLWRhdGEgaXMgYXNzaWduZWQgdG8gdGhlIGNhcmQgdXNpbmcKKyAgICAgIDxmdW5jdGlvbj5zbmRfZGV2aWNlX25ldygpPC9mdW5jdGlvbj4gd2l0aAorICAgICAgPGNvbnN0YW50PlNORFJWX0RFVl9MT1dMRUxWRUw8L2NvbnN0YW50PiAsIGl0cyBkZXN0cnVjdG9yIGlzIAorICAgICAgY2FsbGVkIGF0IHRoZSBsYXN0LiAgVGhhdCBpcywgaXQgaXMgYXNzdXJlZCB0aGF0IGFsbCBvdGhlcgorICAgICAgY29tcG9uZW50cyBsaWtlIFBDTXMgYW5kIGNvbnRyb2xzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbGVhc2VkLgorICAgICAgWW91IGRvbid0IGhhdmUgdG8gc3RvcCBQQ01zLCBldGMuIGV4cGxpY2l0bHksIGJ1dCBqdXN0CisgICAgICBjYWxsIGxvdy1sZXZlbCBoYXJkd2FyZSBzdG9wcGluZy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBtYW5hZ2VtZW50IG9mIGEgbWVtb3J5LW1hcHBlZCByZWdpb24gaXMgYWxtb3N0IGFzIHNhbWUgYXMKKyAgICAgICAgdGhlIG1hbmFnZW1lbnQgb2YgYW4gSS9PIHBvcnQuIFlvdSdsbCBuZWVkIHRocmVlIGZpZWxkcyBsaWtlCisgICAgICAgIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBteWNoaXAgeworICAgICAgICAgIC4uLi4KKyAgICAgICAgICB1bnNpZ25lZCBsb25nIGlvYmFzZV9waHlzOworICAgICAgICAgIHZvaWQgX19pb21lbSAqaW9iYXNlX3ZpcnQ7CisgIH07CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBhbmQgdGhlIGFsbG9jYXRpb24gd291bGQgYmUgbGlrZSBiZWxvdzoKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCAiTXkgQ2hpcCIpKSA8IDApIHsKKyAgICAgICAgICBrZnJlZShjaGlwKTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICB9CisgIGNoaXAtPmlvYmFzZV9waHlzID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CisgIGNoaXAtPmlvYmFzZV92aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKGNoaXAtPmlvYmFzZV9waHlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBjaSwgMCkpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIAorICAgICAgICBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZGVzdHJ1Y3RvciB3b3VsZCBiZToKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZnJlZShzdHJ1Y3QgbXljaGlwICpjaGlwKQorICB7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGlmIChjaGlwLT5pb2Jhc2VfdmlydCkKKyAgICAgICAgICAgICAgICAgIGlvdW5tYXAoY2hpcC0+aW9iYXNlX3ZpcnQpOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CisgICAgICAgICAgLi4uLgorICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2UtZGV2aWNlLXN0cnVjdCI+CisgICAgICA8dGl0bGU+UmVnaXN0cmF0aW9uIG9mIERldmljZSBTdHJ1Y3Q8L3RpdGxlPgorICAgICAgPHBhcmE+CisJQXQgc29tZSBwb2ludCwgdHlwaWNhbGx5IGFmdGVyIGNhbGxpbmcgPGZ1bmN0aW9uPnNuZF9kZXZpY2VfbmV3KCk8L2Z1bmN0aW9uPiwKKwl5b3UgbmVlZCB0byByZWdpc3RlciB0aGUgc3RydWN0IDxzdHJ1Y3RuYW1lPmRldmljZTwvc3RydWN0bmFtZT4gb2YgdGhlIGNoaXAKKwl5b3UncmUgaGFuZGxpbmcgZm9yIHVkZXYgYW5kIGNvLiAgQUxTQSBwcm92aWRlcyBhIG1hY3JvIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKwlvbGRlciBrZXJuZWxzLiAgU2ltcGx5IGNhbGwgbGlrZSB0aGUgZm9sbG93aW5nOgorICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKwlzbyB0aGF0IGl0IHN0b3JlcyB0aGUgUENJJ3MgZGV2aWNlIHBvaW50ZXIgdG8gdGhlIGNhcmQuICBUaGlzIHdpbGwgYmUKKwlyZWZlcnJlZCBieSBBTFNBIGNvcmUgZnVuY3Rpb25zIGxhdGVyIHdoZW4gdGhlIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQuCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKwlJbiB0aGUgY2FzZSBvZiBub24tUENJLCBwYXNzIHRoZSBwcm9wZXIgZGV2aWNlIHN0cnVjdCBwb2ludGVyIG9mIHRoZSBCVVMKKwlpbnN0ZWFkLiAgKEluIHRoZSBjYXNlIG9mIGxlZ2FjeSBJU0Egd2l0aG91dCBQblAsIHlvdSBkb24ndCBoYXZlIHRvIGRvCisJYW55dGhpbmcuKQorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2UtZW50cmllcyI+CisgICAgICA8dGl0bGU+UENJIEVudHJpZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFNvIGZhciwgc28gZ29vZC4gTGV0J3MgZmluaXNoIHRoZSBtaXNzaW5nIFBDSQorICAgICAgc3R1ZmYuIEF0IGZpcnN0LCB3ZSBuZWVkIGEKKyAgICAgIDxzdHJ1Y3RuYW1lPnBjaV9kZXZpY2VfaWQ8L3N0cnVjdG5hbWU+IHRhYmxlIGZvciB0aGlzCisgICAgICBjaGlwc2V0LiBJdCdzIGEgdGFibGUgb2YgUENJIHZlbmRvci9kZXZpY2UgSUQgbnVtYmVyLCBhbmQgc29tZQorICAgICAgbWFza3MuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgRm9yIGV4YW1wbGUsCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9teWNoaXBfaWRzW10gPSB7CisgICAgICAgICAgeyBQQ0lfVkVORE9SX0lEX0ZPTywgUENJX0RFVklDRV9JRF9CQVIsCisgICAgICAgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LAorICAgICAgICAgIC4uLi4KKyAgICAgICAgICB7IDAsIH0KKyAgfTsKKyAgTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNuZF9teWNoaXBfaWRzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZpcnN0IGFuZCBzZWNvbmQgZmllbGRzIG9mCisgICAgICB0aGUgPHN0cnVjdG5hbWU+cGNpX2RldmljZV9pZDwvc3RydWN0bmFtZT4gc3RydWN0dXJlIGFyZSB0aGUgdmVuZG9yIGFuZAorICAgICAgZGV2aWNlIElEcy4gSWYgeW91IGhhdmUgbm8gcmVhc29uIHRvIGZpbHRlciB0aGUgbWF0Y2hpbmcKKyAgICAgIGRldmljZXMsIHlvdSBjYW4gbGVhdmUgdGhlIHJlbWFpbmluZyBmaWVsZHMgYXMgYWJvdmUuIFRoZSBsYXN0CisgICAgICBmaWVsZCBvZiB0aGUgPHN0cnVjdG5hbWU+cGNpX2RldmljZV9pZDwvc3RydWN0bmFtZT4gc3RydWN0IGNvbnRhaW5zCisgICAgICBwcml2YXRlIGRhdGEgZm9yIHRoaXMgZW50cnkuIFlvdSBjYW4gc3BlY2lmeSBhbnkgdmFsdWUgaGVyZSwgZm9yCisgICAgICBleGFtcGxlLCB0byBkZWZpbmUgc3BlY2lmaWMgb3BlcmF0aW9ucyBmb3Igc3VwcG9ydGVkIGRldmljZSBJRHMuCisgICAgICBTdWNoIGFuIGV4YW1wbGUgaXMgZm91bmQgaW4gdGhlIGludGVsOHgwIGRyaXZlci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbGFzdCBlbnRyeSBvZiB0aGlzIGxpc3QgaXMgdGhlIHRlcm1pbmF0b3IuIFlvdSBtdXN0CisgICAgICBzcGVjaWZ5IHRoaXMgYWxsLXplcm8gZW50cnkuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlbiwgcHJlcGFyZSB0aGUgPHN0cnVjdG5hbWU+cGNpX2RyaXZlcjwvc3RydWN0bmFtZT4gcmVjb3JkOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7CisgICAgICAgICAgLm5hbWUgPSAiTXkgT3duIENoaXAiLAorICAgICAgICAgIC5pZF90YWJsZSA9IHNuZF9teWNoaXBfaWRzLAorICAgICAgICAgIC5wcm9iZSA9IHNuZF9teWNoaXBfcHJvYmUsCisgICAgICAgICAgLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9teWNoaXBfcmVtb3ZlKSwKKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5wcm9iZTwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPnJlbW92ZTwvc3RydWN0ZmllbGQ+IGZ1bmN0aW9ucyBoYXZlIGFscmVhZHkKKyAgICAgIGJlZW4gZGVmaW5lZCBpbiB0aGUgcHJldmlvdXMgc2VjdGlvbnMuCisgICAgICBUaGUgPHN0cnVjdGZpZWxkPnJlbW92ZTwvc3RydWN0ZmllbGQ+IGZ1bmN0aW9uIHNob3VsZAorICAgICAgYmUgZGVmaW5lZCB3aXRoIHRoZSAKKyAgICAgIDxmdW5jdGlvbj5fX2RldmV4aXRfcCgpPC9mdW5jdGlvbj4gbWFjcm8sIHNvIHRoYXQgaXQncyBub3QKKyAgICAgIGRlZmluZWQgZm9yIGJ1aWx0LWluIChhbmQgbm9uLWhvdC1wbHVnZ2FibGUpIGNhc2UuIFRoZQorICAgICAgPHN0cnVjdGZpZWxkPm5hbWU8L3N0cnVjdGZpZWxkPiAKKyAgICAgIGZpZWxkIGlzIHRoZSBuYW1lIHN0cmluZyBvZiB0aGlzIGRldmljZS4gTm90ZSB0aGF0IHlvdSBtdXN0IG5vdAorICAgICAgdXNlIGEgc2xhc2ggPHF1b3RlPi88L3F1b3RlPiBpbiB0aGlzIHN0cmluZy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBbmQgYXQgbGFzdCwgdGhlIG1vZHVsZSBlbnRyaWVzOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgX19pbml0IGFsc2FfY2FyZF9teWNoaXBfaW5pdCh2b2lkKQorICB7CisgICAgICAgICAgcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisgIH0KKworICBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX215Y2hpcF9leGl0KHZvaWQpCisgIHsKKyAgICAgICAgICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CisgIH0KKworICBtb2R1bGVfaW5pdChhbHNhX2NhcmRfbXljaGlwX2luaXQpCisgIG1vZHVsZV9leGl0KGFsc2FfY2FyZF9teWNoaXBfZXhpdCkKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTm90ZSB0aGF0IHRoZXNlIG1vZHVsZSBlbnRyaWVzIGFyZSB0YWdnZWQgd2l0aAorICAgICAgPHBhcmFtZXRlcj5fX2luaXQ8L3BhcmFtZXRlcj4gYW5kIAorICAgICAgPHBhcmFtZXRlcj5fX2V4aXQ8L3BhcmFtZXRlcj4gcHJlZml4ZXMsIG5vdAorICAgICAgPHBhcmFtZXRlcj5fX2RldmluaXQ8L3BhcmFtZXRlcj4gbm9yCisgICAgICA8cGFyYW1ldGVyPl9fZGV2ZXhpdDwvcGFyYW1ldGVyPi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIE9oLCBvbmUgdGhpbmcgd2FzIGZvcmdvdHRlbi4gSWYgeW91IGhhdmUgbm8gZXhwb3J0ZWQgc3ltYm9scywKKyAgICAgICAgeW91IG5lZWQgdG8gZGVjbGFyZSBpdCBpbiAyLjIgb3IgMi40IGtlcm5lbHMgKGl0J3Mgbm90IG5lY2Vzc2FyeSBpbiAyLjYga2VybmVscykuCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgRVhQT1JUX05PX1NZTUJPTFM7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICBUaGF0J3MgYWxsIQorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBQQ00gSW50ZXJmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0icGNtLWludGVyZmFjZSI+CisgICAgPHRpdGxlPlBDTSBJbnRlcmZhY2U8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtZ2VuZXJhbCI+CisgICAgICA8dGl0bGU+R2VuZXJhbDwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIFBDTSBtaWRkbGUgbGF5ZXIgb2YgQUxTQSBpcyBxdWl0ZSBwb3dlcmZ1bCBhbmQgaXQgaXMgb25seQorICAgICAgbmVjZXNzYXJ5IGZvciBlYWNoIGRyaXZlciB0byBpbXBsZW1lbnQgdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMKKyAgICAgIHRvIGFjY2VzcyBpdHMgaGFyZHdhcmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgYWNjZXNzaW5nIHRvIHRoZSBQQ00gbGF5ZXIsIHlvdSBuZWVkIHRvIGluY2x1ZGUKKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvcGNtLmgmZ3Q7PC9maWxlbmFtZT4gZmlyc3QuIEluIGFkZGl0aW9uLAorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY21fcGFyYW1zLmgmZ3Q7PC9maWxlbmFtZT4gbWlnaHQgYmUgbmVlZGVkCisgICAgICBpZiB5b3UgYWNjZXNzIHRvIHNvbWUgZnVuY3Rpb25zIHJlbGF0ZWQgd2l0aCBod19wYXJhbS4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBFYWNoIGNhcmQgZGV2aWNlIGNhbiBoYXZlIHVwIHRvIGZvdXIgcGNtIGluc3RhbmNlcy4gQSBwY20KKyAgICAgIGluc3RhbmNlIGNvcnJlc3BvbmRzIHRvIGEgcGNtIGRldmljZSBmaWxlLiBUaGUgbGltaXRhdGlvbiBvZgorICAgICAgbnVtYmVyIG9mIGluc3RhbmNlcyBjb21lcyBvbmx5IGZyb20gdGhlIGF2YWlsYWJsZSBiaXQgc2l6ZSBvZgorICAgICAgdGhlIExpbnV4J3MgZGV2aWNlIG51bWJlcnMuIE9uY2Ugd2hlbiA2NGJpdCBkZXZpY2UgbnVtYmVyIGlzCisgICAgICB1c2VkLCB3ZSdsbCBoYXZlIG1vcmUgcGNtIGluc3RhbmNlcyBhdmFpbGFibGUuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQSBwY20gaW5zdGFuY2UgY29uc2lzdHMgb2YgcGNtIHBsYXliYWNrIGFuZCBjYXB0dXJlIHN0cmVhbXMsCisgICAgICBhbmQgZWFjaCBwY20gc3RyZWFtIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIHBjbSBzdWJzdHJlYW1zLiBTb21lCisgICAgICBzb3VuZGNhcmRzIHN1cHBvcnQgbXVsdGlwbGUgcGxheWJhY2sgZnVuY3Rpb25zLiBGb3IgZXhhbXBsZSwKKyAgICAgIGVtdTEwazEgaGFzIGEgUENNIHBsYXliYWNrIG9mIDMyIHN0ZXJlbyBzdWJzdHJlYW1zLiBJbiB0aGlzIGNhc2UsIGF0CisgICAgICBlYWNoIG9wZW4sIGEgZnJlZSBzdWJzdHJlYW0gaXMgKHVzdWFsbHkpIGF1dG9tYXRpY2FsbHkgY2hvc2VuCisgICAgICBhbmQgb3BlbmVkLiBNZWFud2hpbGUsIHdoZW4gb25seSBvbmUgc3Vic3RyZWFtIGV4aXN0cyBhbmQgaXQgd2FzCisgICAgICBhbHJlYWR5IG9wZW5lZCwgdGhlIHN1Y2Nlc3NmdWwgb3BlbiB3aWxsIGVpdGhlciBibG9jaworICAgICAgb3IgZXJyb3Igd2l0aCA8Y29uc3RhbnQ+RUFHQUlOPC9jb25zdGFudD4gYWNjb3JkaW5nIHRvIHRoZQorICAgICAgZmlsZSBvcGVuIG1vZGUuIEJ1dCB5b3UgZG9uJ3QgaGF2ZSB0byBjYXJlIGFib3V0IHN1Y2ggZGV0YWlscyBpbiB5b3VyCisgICAgICBkcml2ZXIuIFRoZSBQQ00gbWlkZGxlIGxheWVyIHdpbGwgdGFrZSBjYXJlIG9mIHN1Y2ggd29yay4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1leGFtcGxlIj4KKyAgICAgIDx0aXRsZT5GdWxsIENvZGUgRXhhbXBsZTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBleGFtcGxlIGNvZGUgYmVsb3cgZG9lcyBub3QgaW5jbHVkZSBhbnkgaGFyZHdhcmUgYWNjZXNzCisgICAgICByb3V0aW5lcyBidXQgc2hvd3Mgb25seSB0aGUgc2tlbGV0b24sIGhvdyB0byBidWlsZCB1cCB0aGUgUENNCisgICAgICBpbnRlcmZhY2VzLgorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5QQ00gRXhhbXBsZSBDb2RlPC90aXRsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorICAuLi4uCisKKyAgLyogaGFyZHdhcmUgZGVmaW5pdGlvbiAqLworICBzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX215Y2hpcF9wbGF5YmFja19odyA9IHsKKyAgICAgICAgICAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorICAgICAgICAgIC5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisgICAgICAgICAgLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorICAgICAgICAgIC5yYXRlX21pbiA9ICAgICAgICAgODAwMCwKKyAgICAgICAgICAucmF0ZV9tYXggPSAgICAgICAgIDQ4MDAwLAorICAgICAgICAgIC5jaGFubmVsc19taW4gPSAgICAgMiwKKyAgICAgICAgICAuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisgICAgICAgICAgLmJ1ZmZlcl9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kX2J5dGVzX21pbiA9IDQwOTYsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kc19taW4gPSAgICAgIDEsCisgICAgICAgICAgLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0LAorICB9OworCisgIC8qIGhhcmR3YXJlIGRlZmluaXRpb24gKi8KKyAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9teWNoaXBfY2FwdHVyZV9odyA9IHsKKyAgICAgICAgICAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAorICAgICAgICAgIC5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisgICAgICAgICAgLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAorICAgICAgICAgIC5yYXRlX21pbiA9ICAgICAgICAgODAwMCwKKyAgICAgICAgICAucmF0ZV9tYXggPSAgICAgICAgIDQ4MDAwLAorICAgICAgICAgIC5jaGFubmVsc19taW4gPSAgICAgMiwKKyAgICAgICAgICAuY2hhbm5lbHNfbWF4ID0gICAgIDIsCisgICAgICAgICAgLmJ1ZmZlcl9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kX2J5dGVzX21pbiA9IDQwOTYsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19tYXggPSAzMjc2OCwKKyAgICAgICAgICAucGVyaW9kc19taW4gPSAgICAgIDEsCisgICAgICAgICAgLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0LAorICB9OworCisgIC8qIG9wZW4gY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKyAgICAgICAgICBydW50aW1lLT5odyA9IHNuZF9teWNoaXBfcGxheWJhY2tfaHc7CisgICAgICAgICAgLyogbW9yZSBoYXJkd2FyZS1pbml0aWFsaXphdGlvbiB3aWxsIGJlIGRvbmUgaGVyZSAqLworICAgICAgICAgIC4uLi4KKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIGNsb3NlIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisgICAgICAgICAgLyogdGhlIGhhcmR3YXJlLXNwZWNpZmljIGNvZGVzIHdpbGwgYmUgaGVyZSAqLworICAgICAgICAgIC4uLi4KKyAgICAgICAgICByZXR1cm4gMDsKKworICB9CisKKyAgLyogb3BlbiBjYWxsYmFjayAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisgICAgICAgICAgcnVudGltZS0+aHcgPSBzbmRfbXljaGlwX2NhcHR1cmVfaHc7CisgICAgICAgICAgLyogbW9yZSBoYXJkd2FyZS1pbml0aWFsaXphdGlvbiB3aWxsIGJlIGRvbmUgaGVyZSAqLworICAgICAgICAgIC4uLi4KKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIGNsb3NlIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICAvKiB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZXMgd2lsbCBiZSBoZXJlICovCisgICAgICAgICAgLi4uLgorICAgICAgICAgIHJldHVybiAwOworCisgIH0KKworICAvKiBod19wYXJhbXMgY2FsbGJhY2sgKi8KKyAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCisgIHsKKyAgICAgICAgICByZXR1cm4gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworICB9CisKKyAgLyogaHdfZnJlZSBjYWxsYmFjayAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGNtX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICByZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOworICB9CisKKyAgLyogcHJlcGFyZSBjYWxsYmFjayAqLworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGNtX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisKKyAgICAgICAgICAvKiBzZXQgdXAgdGhlIGhhcmR3YXJlIHdpdGggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbgorICAgICAgICAgICAqIGZvciBleGFtcGxlLi4uCisgICAgICAgICAgICovCisgICAgICAgICAgbXljaGlwX3NldF9zYW1wbGVfZm9ybWF0KGNoaXAsIHJ1bnRpbWUtPmZvcm1hdCk7CisgICAgICAgICAgbXljaGlwX3NldF9zYW1wbGVfcmF0ZShjaGlwLCBydW50aW1lLT5yYXRlKTsKKyAgICAgICAgICBteWNoaXBfc2V0X2NoYW5uZWxzKGNoaXAsIHJ1bnRpbWUtPmNoYW5uZWxzKTsKKyAgICAgICAgICBteWNoaXBfc2V0X2RtYV9zZXR1cChjaGlwLCBydW50aW1lLT5kbWFfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwLT5idWZmZXJfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwLT5wZXJpb2Rfc2l6ZSk7CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiB0cmlnZ2VyIGNhbGxiYWNrICovCisgIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbWQpCisgIHsKKyAgICAgICAgICBzd2l0Y2ggKGNtZCkgeworICAgICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisgICAgICAgICAgICAgICAgICAvKiBkbyBzb21ldGhpbmcgdG8gc3RhcnQgdGhlIFBDTSBlbmdpbmUgKi8KKyAgICAgICAgICAgICAgICAgIC4uLi4KKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKyAgICAgICAgICAgICAgICAgIC8qIGRvIHNvbWV0aGluZyB0byBzdG9wIHRoZSBQQ00gZW5naW5lICovCisgICAgICAgICAgICAgICAgICAuLi4uCisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgfQorICB9CisKKyAgLyogcG9pbnRlciBjYWxsYmFjayAqLworICBzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKKyAgc25kX215Y2hpcF9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisgICAgICAgICAgdW5zaWduZWQgaW50IGN1cnJlbnRfcHRyOworCisgICAgICAgICAgLyogZ2V0IHRoZSBjdXJyZW50IGhhcmR3YXJlIHBvaW50ZXIgKi8KKyAgICAgICAgICBjdXJyZW50X3B0ciA9IG15Y2hpcF9nZXRfaHdfcG9pbnRlcihjaGlwKTsKKyAgICAgICAgICByZXR1cm4gY3VycmVudF9wdHI7CisgIH0KKworICAvKiBvcGVyYXRvcnMgKi8KKyAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbXljaGlwX3BsYXliYWNrX29wcyA9IHsKKyAgICAgICAgICAub3BlbiA9ICAgICAgICBzbmRfbXljaGlwX3BsYXliYWNrX29wZW4sCisgICAgICAgICAgLmNsb3NlID0gICAgICAgc25kX215Y2hpcF9wbGF5YmFja19jbG9zZSwKKyAgICAgICAgICAuaW9jdGwgPSAgICAgICBzbmRfcGNtX2xpYl9pb2N0bCwKKyAgICAgICAgICAuaHdfcGFyYW1zID0gICBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMsCisgICAgICAgICAgLmh3X2ZyZWUgPSAgICAgc25kX215Y2hpcF9wY21faHdfZnJlZSwKKyAgICAgICAgICAucHJlcGFyZSA9ICAgICBzbmRfbXljaGlwX3BjbV9wcmVwYXJlLAorICAgICAgICAgIC50cmlnZ2VyID0gICAgIHNuZF9teWNoaXBfcGNtX3RyaWdnZXIsCisgICAgICAgICAgLnBvaW50ZXIgPSAgICAgc25kX215Y2hpcF9wY21fcG9pbnRlciwKKyAgfTsKKworICAvKiBvcGVyYXRvcnMgKi8KKyAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbXljaGlwX2NhcHR1cmVfb3BzID0geworICAgICAgICAgIC5vcGVuID0gICAgICAgIHNuZF9teWNoaXBfY2FwdHVyZV9vcGVuLAorICAgICAgICAgIC5jbG9zZSA9ICAgICAgIHNuZF9teWNoaXBfY2FwdHVyZV9jbG9zZSwKKyAgICAgICAgICAuaW9jdGwgPSAgICAgICBzbmRfcGNtX2xpYl9pb2N0bCwKKyAgICAgICAgICAuaHdfcGFyYW1zID0gICBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMsCisgICAgICAgICAgLmh3X2ZyZWUgPSAgICAgc25kX215Y2hpcF9wY21faHdfZnJlZSwKKyAgICAgICAgICAucHJlcGFyZSA9ICAgICBzbmRfbXljaGlwX3BjbV9wcmVwYXJlLAorICAgICAgICAgIC50cmlnZ2VyID0gICAgIHNuZF9teWNoaXBfcGNtX3RyaWdnZXIsCisgICAgICAgICAgLnBvaW50ZXIgPSAgICAgc25kX215Y2hpcF9wY21fcG9pbnRlciwKKyAgfTsKKworICAvKgorICAgKiAgZGVmaW5pdGlvbnMgb2YgY2FwdHVyZSBhcmUgb21pdHRlZCBoZXJlLi4uCisgICAqLworCisgIC8qIGNyZWF0ZSBhIHBjbSBkZXZpY2UgKi8KKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9uZXdfcGNtKHN0cnVjdCBteWNoaXAgKmNoaXApCisgIHsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbSAqcGNtOworICAgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgICBlcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiTXkgQ2hpcCIsIDAsIDEsIDEsICZwY20pOworICAgICAgICAgIGlmIChlcnIgPCAwKSAKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOworICAgICAgICAgIHN0cmNweShwY20tPm5hbWUsICJNeSBDaGlwIik7CisgICAgICAgICAgY2hpcC0+cGNtID0gcGNtOworICAgICAgICAgIC8qIHNldCBvcGVyYXRvcnMgKi8KKyAgICAgICAgICBzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc25kX215Y2hpcF9wbGF5YmFja19vcHMpOworICAgICAgICAgIHNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnNuZF9teWNoaXBfY2FwdHVyZV9vcHMpOworICAgICAgICAgIC8qIHByZS1hbGxvY2F0aW9uIG9mIGJ1ZmZlcnMgKi8KKyAgICAgICAgICAvKiBOT1RFOiB0aGlzIG1heSBmYWlsICovCisgICAgICAgICAgc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0KjEwMjQsIDY0KjEwMjQpOworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtY29uc3RydWN0b3IiPgorICAgICAgPHRpdGxlPkNvbnN0cnVjdG9yPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBIHBjbSBpbnN0YW5jZSBpcyBhbGxvY2F0ZWQgYnkgdGhlIDxmdW5jdGlvbj5zbmRfcGNtX25ldygpPC9mdW5jdGlvbj4KKyAgICAgIGZ1bmN0aW9uLiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gY3JlYXRlIGEgY29uc3RydWN0b3IgZm9yIHBjbSwKKyAgICAgIG5hbWVseSwgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBfX2RldmluaXQgc25kX215Y2hpcF9uZXdfcGNtKHN0cnVjdCBteWNoaXAgKmNoaXApCisgIHsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbSAqcGNtOworICAgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgICBlcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiTXkgQ2hpcCIsIDAsIDEsIDEsICZwY20pOworICAgICAgICAgIGlmIChlcnIgPCAwKSAKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOworICAgICAgICAgIHN0cmNweShwY20tPm5hbWUsICJNeSBDaGlwIik7CisgICAgICAgICAgY2hpcC0+cGNtID0gcGNtOworCSAgLi4uLgorICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZnVuY3Rpb24+c25kX3BjbV9uZXcoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIHRha2VzIGZvdXIKKyAgICAgIGFyZ3VtZW50cy4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYXJkIHBvaW50ZXIgdG8gd2hpY2ggdGhpcworICAgICAgcGNtIGlzIGFzc2lnbmVkLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgSUQgc3RyaW5nLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCAoPHBhcmFtZXRlcj5pbmRleDwvcGFyYW1ldGVyPiwgMCBpbiB0aGUKKyAgICAgIGFib3ZlKSBpcyB0aGUgaW5kZXggb2YgdGhpcyBuZXcgcGNtLiBJdCBiZWdpbnMgZnJvbSB6ZXJvLiBJZgorICAgICAgeW91IGNyZWF0ZSBtb3JlIHRoYW4gb25lIHBjbSBpbnN0YW5jZXMsIHNwZWNpZnkgdGhlCisgICAgICBkaWZmZXJlbnQgbnVtYmVycyBpbiB0aGlzIGFyZ3VtZW50LiBGb3IgZXhhbXBsZSwKKyAgICAgIDxwYXJhbWV0ZXI+aW5kZXg8L3BhcmFtZXRlcj4gPSAxIGZvciB0aGUgc2Vjb25kIFBDTSBkZXZpY2UuICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb3VydGggYW5kIGZpZnRoIGFyZ3VtZW50cyBhcmUgdGhlIG51bWJlciBvZiBzdWJzdHJlYW1zCisgICAgICBmb3IgcGxheWJhY2sgYW5kIGNhcHR1cmUsIHJlc3BlY3RpdmVseS4gSGVyZSAxIGlzIHVzZWQgZm9yCisgICAgICBib3RoIGFyZ3VtZW50cy4gV2hlbiBubyBwbGF5YmFjayBvciBjYXB0dXJlIHN1YnN0cmVhbXMgYXJlIGF2YWlsYWJsZSwKKyAgICAgIHBhc3MgMCB0byB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIElmIGEgY2hpcCBzdXBwb3J0cyBtdWx0aXBsZSBwbGF5YmFja3Mgb3IgY2FwdHVyZXMsIHlvdSBjYW4KKyAgICAgIHNwZWNpZnkgbW9yZSBudW1iZXJzLCBidXQgdGhleSBtdXN0IGJlIGhhbmRsZWQgcHJvcGVybHkgaW4KKyAgICAgIG9wZW4vY2xvc2UsIGV0Yy4gY2FsbGJhY2tzLiAgV2hlbiB5b3UgbmVlZCB0byBrbm93IHdoaWNoCisgICAgICBzdWJzdHJlYW0geW91IGFyZSByZWZlcnJpbmcgdG8sIHRoZW4gaXQgY2FuIGJlIG9idGFpbmVkIGZyb20KKyAgICAgIHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfcGNtX3N1YnN0cmVhbTwvc3RydWN0bmFtZT4gZGF0YSBwYXNzZWQgdG8gZWFjaCBjYWxsYmFjaworICAgICAgYXMgZm9sbG93czogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CisgIGludCBpbmRleCA9IHN1YnN0cmVhbS0+bnVtYmVyOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciB0aGUgcGNtIGlzIGNyZWF0ZWQsIHlvdSBuZWVkIHRvIHNldCBvcGVyYXRvcnMgZm9yIGVhY2gKKyAgICAgICAgcGNtIHN0cmVhbS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKKyAgICAgICAgICAgICAgICAgICZzbmRfbXljaGlwX3BsYXliYWNrX29wcyk7CisgIHNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKyAgICAgICAgICAgICAgICAgICZzbmRfbXljaGlwX2NhcHR1cmVfb3BzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG9wZXJhdG9ycyBhcmUgZGVmaW5lZCB0eXBpY2FsbHkgbGlrZSB0aGlzOgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX215Y2hpcF9wbGF5YmFja19vcHMgPSB7CisgICAgICAgICAgLm9wZW4gPSAgICAgICAgc25kX215Y2hpcF9wY21fb3BlbiwKKyAgICAgICAgICAuY2xvc2UgPSAgICAgICBzbmRfbXljaGlwX3BjbV9jbG9zZSwKKyAgICAgICAgICAuaW9jdGwgPSAgICAgICBzbmRfcGNtX2xpYl9pb2N0bCwKKyAgICAgICAgICAuaHdfcGFyYW1zID0gICBzbmRfbXljaGlwX3BjbV9od19wYXJhbXMsCisgICAgICAgICAgLmh3X2ZyZWUgPSAgICAgc25kX215Y2hpcF9wY21faHdfZnJlZSwKKyAgICAgICAgICAucHJlcGFyZSA9ICAgICBzbmRfbXljaGlwX3BjbV9wcmVwYXJlLAorICAgICAgICAgIC50cmlnZ2VyID0gICAgIHNuZF9teWNoaXBfcGNtX3RyaWdnZXIsCisgICAgICAgICAgLnBvaW50ZXIgPSAgICAgc25kX215Y2hpcF9wY21fcG9pbnRlciwKKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIEFsbCB0aGUgY2FsbGJhY2tzIGFyZSBkZXNjcmliZWQgaW4gdGhlCisgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzIj48Y2l0ZXRpdGxlPgorICAgICAgICBPcGVyYXRvcnM8L2NpdGV0aXRsZT48L2xpbms+IHN1YnNlY3Rpb24uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBZnRlciBzZXR0aW5nIHRoZSBvcGVyYXRvcnMsIHlvdSBwcm9iYWJseSB3aWxsIHdhbnQgdG8KKyAgICAgICAgcHJlLWFsbG9jYXRlIHRoZSBidWZmZXIuIEZvciB0aGUgcHJlLWFsbG9jYXRpb24sIHNpbXBseSBjYWxsCisgICAgICAgIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDY0KjEwMjQsIDY0KjEwMjQpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgSXQgd2lsbCBhbGxvY2F0ZSBhIGJ1ZmZlciB1cCB0byA2NGtCIGFzIGRlZmF1bHQuCisgICAgICBCdWZmZXIgbWFuYWdlbWVudCBkZXRhaWxzIHdpbGwgYmUgZGVzY3JpYmVkIGluIHRoZSBsYXRlciBzZWN0aW9uIDxsaW5rCisgICAgICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeSI+PGNpdGV0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeQorICAgICAgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQWRkaXRpb25hbGx5LCB5b3UgY2FuIHNldCBzb21lIGV4dHJhIGluZm9ybWF0aW9uIGZvciB0aGlzIHBjbQorICAgICAgICBpbiBwY20tJmd0O2luZm9fZmxhZ3MuCisgICAgICAgIFRoZSBhdmFpbGFibGUgdmFsdWVzIGFyZSBkZWZpbmVkIGFzCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19YWFg8L2NvbnN0YW50PiBpbgorICAgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2Fzb3VuZC5oJmd0OzwvZmlsZW5hbWU+LCB3aGljaCBpcyB1c2VkIGZvcgorICAgICAgICB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbiAoZGVzY3JpYmVkIGxhdGVyKS4gV2hlbiB5b3VyIHNvdW5kY2hpcAorICAgICAgICBzdXBwb3J0cyBvbmx5IGhhbGYtZHVwbGV4LCBzcGVjaWZ5IGxpa2UgdGhpczogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgcGNtLT5pbmZvX2ZsYWdzID0gU05EUlZfUENNX0lORk9fSEFMRl9EVVBMRVg7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1kZXN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT4uLi4gQW5kIHRoZSBEZXN0cnVjdG9yPzwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGRlc3RydWN0b3IgZm9yIGEgcGNtIGluc3RhbmNlIGlzIG5vdCBhbHdheXMKKyAgICAgIG5lY2Vzc2FyeS4gU2luY2UgdGhlIHBjbSBkZXZpY2Ugd2lsbCBiZSByZWxlYXNlZCBieSB0aGUgbWlkZGxlCisgICAgICBsYXllciBjb2RlIGF1dG9tYXRpY2FsbHksIHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgdGhlIGRlc3RydWN0b3IKKyAgICAgIGV4cGxpY2l0bHkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgZGVzdHJ1Y3RvciB3b3VsZCBiZSBuZWNlc3NhcnkgaWYgeW91IGNyZWF0ZWQKKyAgICAgICAgc3BlY2lhbCByZWNvcmRzIGludGVybmFsbHkgYW5kIG5lZWRlZCB0byByZWxlYXNlIHRoZW0uIEluIHN1Y2ggYQorICAgICAgICBjYXNlLCBzZXQgdGhlIGRlc3RydWN0b3IgZnVuY3Rpb24gdG8KKyAgICAgICAgcGNtLSZndDtwcml2YXRlX2ZyZWU6IAorCisgICAgICAgIDxleGFtcGxlPgorICAgICAgICAgIDx0aXRsZT5QQ00gSW5zdGFuY2Ugd2l0aCBhIERlc3RydWN0b3I8L3RpdGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteWNoaXBfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX2NoaXAocGNtKTsKKyAgICAgICAgICAvKiBmcmVlIHlvdXIgb3duIGRhdGEgKi8KKyAgICAgICAgICBrZnJlZShjaGlwLT5teV9wcml2YXRlX3BjbV9kYXRhKTsKKyAgICAgICAgICAvKiBkbyB3aGF0IHlvdSBsaWtlIGVsc2UgKi8KKyAgICAgICAgICAuLi4uCisgIH0KKworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX25ld19wY20oc3RydWN0IG15Y2hpcCAqY2hpcCkKKyAgeworICAgICAgICAgIHN0cnVjdCBzbmRfcGNtICpwY207CisgICAgICAgICAgLi4uLgorICAgICAgICAgIC8qIGFsbG9jYXRlIHlvdXIgb3duIGRhdGEgKi8KKyAgICAgICAgICBjaGlwLT5teV9wcml2YXRlX3BjbV9kYXRhID0ga21hbGxvYyguLi4pOworICAgICAgICAgIC8qIHNldCB0aGUgZGVzdHJ1Y3RvciAqLworICAgICAgICAgIHBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKyAgICAgICAgICBwY20tPnByaXZhdGVfZnJlZSA9IG15Y2hpcF9wY21fZnJlZTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lIj4KKyAgICAgIDx0aXRsZT5SdW50aW1lIFBvaW50ZXIgLSBUaGUgQ2hlc3Qgb2YgUENNIEluZm9ybWF0aW9uPC90aXRsZT4KKwk8cGFyYT4KKwkgIFdoZW4gdGhlIFBDTSBzdWJzdHJlYW0gaXMgb3BlbmVkLCBhIFBDTSBydW50aW1lIGluc3RhbmNlIGlzCisJYWxsb2NhdGVkIGFuZCBhc3NpZ25lZCB0byB0aGUgc3Vic3RyZWFtLiBUaGlzIHBvaW50ZXIgaXMKKwlhY2Nlc3NpYmxlIHZpYSA8Y29uc3RhbnQ+c3Vic3RyZWFtLSZndDtydW50aW1lPC9jb25zdGFudD4uCisJVGhpcyBydW50aW1lIHBvaW50ZXIgaG9sZHMgbW9zdCBpbmZvcm1hdGlvbiB5b3UgbmVlZAorCXRvIGNvbnRyb2wgdGhlIFBDTTogdGhlIGNvcHkgb2YgaHdfcGFyYW1zIGFuZCBzd19wYXJhbXMgY29uZmlndXJhdGlvbnMsIHRoZSBidWZmZXIKKwlwb2ludGVycywgbW1hcCByZWNvcmRzLCBzcGlubG9ja3MsIGV0Yy4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlUaGUgZGVmaW5pdGlvbiBvZiBydW50aW1lIGluc3RhbmNlIGlzIGZvdW5kIGluCisJPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPi4gIEhlcmUgYXJlCisgICAgICAgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZToKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCitzdHJ1Y3QgX3NuZF9wY21fcnVudGltZSB7CisJLyogLS0gU3RhdHVzIC0tICovCisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICp0cmlnZ2VyX21hc3RlcjsKKwlzbmRfdGltZXN0YW1wX3QgdHJpZ2dlcl90c3RhbXA7CS8qIHRyaWdnZXIgdGltZXN0YW1wICovCisJaW50IG92ZXJyYW5nZTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBhdmFpbF9tYXg7CisJc25kX3BjbV91ZnJhbWVzX3QgaHdfcHRyX2Jhc2U7CS8qIFBvc2l0aW9uIGF0IGJ1ZmZlciByZXN0YXJ0ICovCisJc25kX3BjbV91ZnJhbWVzX3QgaHdfcHRyX2ludGVycnVwdDsgLyogUG9zaXRpb24gYXQgaW50ZXJydXB0IHRpbWUqLworCisJLyogLS0gSFcgcGFyYW1zIC0tICovCisJc25kX3BjbV9hY2Nlc3NfdCBhY2Nlc3M7CS8qIGFjY2VzcyBtb2RlICovCisJc25kX3BjbV9mb3JtYXRfdCBmb3JtYXQ7CS8qIFNORFJWX1BDTV9GT1JNQVRfKiAqLworCXNuZF9wY21fc3ViZm9ybWF0X3Qgc3ViZm9ybWF0OwkvKiBzdWJmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgcmF0ZTsJCS8qIHJhdGUgaW4gSHogKi8KKwl1bnNpZ25lZCBpbnQgY2hhbm5lbHM7CQkvKiBjaGFubmVscyAqLworCXNuZF9wY21fdWZyYW1lc190IHBlcmlvZF9zaXplOwkvKiBwZXJpb2Qgc2l6ZSAqLworCXVuc2lnbmVkIGludCBwZXJpb2RzOwkJLyogcGVyaW9kcyAqLworCXNuZF9wY21fdWZyYW1lc190IGJ1ZmZlcl9zaXplOwkvKiBidWZmZXIgc2l6ZSAqLworCXVuc2lnbmVkIGludCB0aWNrX3RpbWU7CQkvKiB0aWNrIHRpbWUgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBtaW5fYWxpZ247CS8qIE1pbiBhbGlnbm1lbnQgZm9yIHRoZSBmb3JtYXQgKi8KKwlzaXplX3QgYnl0ZV9hbGlnbjsKKwl1bnNpZ25lZCBpbnQgZnJhbWVfYml0czsKKwl1bnNpZ25lZCBpbnQgc2FtcGxlX2JpdHM7CisJdW5zaWduZWQgaW50IGluZm87CisJdW5zaWduZWQgaW50IHJhdGVfbnVtOworCXVuc2lnbmVkIGludCByYXRlX2RlbjsKKworCS8qIC0tIFNXIHBhcmFtcyAtLSAqLworCXN0cnVjdCB0aW1lc3BlYyB0c3RhbXBfbW9kZTsJLyogbW1hcCB0aW1lc3RhbXAgaXMgdXBkYXRlZCAqLworICAJdW5zaWduZWQgaW50IHBlcmlvZF9zdGVwOworCXVuc2lnbmVkIGludCBzbGVlcF9taW47CQkvKiBtaW4gdGlja3MgdG8gc2xlZXAgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBzdGFydF90aHJlc2hvbGQ7CisJc25kX3BjbV91ZnJhbWVzX3Qgc3RvcF90aHJlc2hvbGQ7CisJc25kX3BjbV91ZnJhbWVzX3Qgc2lsZW5jZV90aHJlc2hvbGQ7IC8qIFNpbGVuY2UgZmlsbGluZyBoYXBwZW5zIHdoZW4KKwkJCQkJCW5vaXNlIGlzIG5lYXJlc3QgdGhhbiB0aGlzICovCisJc25kX3BjbV91ZnJhbWVzX3Qgc2lsZW5jZV9zaXplOwkvKiBTaWxlbmNlIGZpbGxpbmcgc2l6ZSAqLworCXNuZF9wY21fdWZyYW1lc190IGJvdW5kYXJ5OwkvKiBwb2ludGVycyB3cmFwIHBvaW50ICovCisKKwlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlZF9zdGFydDsKKwlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlZF9zaXplOworCisJc25kX3BjbV9zeW5jX2lkX3Qgc3luYzsJCS8qIGhhcmR3YXJlIHN5bmNocm9uaXphdGlvbiBJRCAqLworCisJLyogLS0gbW1hcCAtLSAqLworCXZvbGF0aWxlIHN0cnVjdCBzbmRfcGNtX21tYXBfc3RhdHVzICpzdGF0dXM7CisJdm9sYXRpbGUgc3RydWN0IHNuZF9wY21fbW1hcF9jb250cm9sICpjb250cm9sOworCWF0b21pY190IG1tYXBfY291bnQ7CisKKwkvKiAtLSBsb2NraW5nIC8gc2NoZWR1bGluZyAtLSAqLworCXNwaW5sb2NrX3QgbG9jazsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBzbGVlcDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aWNrX3RpbWVyOworCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CisKKwkvKiAtLSBwcml2YXRlIHNlY3Rpb24gLS0gKi8KKwl2b2lkICpwcml2YXRlX2RhdGE7CisJdm9pZCAoKnByaXZhdGVfZnJlZSkoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSk7CisKKwkvKiAtLSBoYXJkd2FyZSBkZXNjcmlwdGlvbiAtLSAqLworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIGh3OworCXN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRzIGh3X2NvbnN0cmFpbnRzOworCisJLyogLS0gaW50ZXJydXB0IGNhbGxiYWNrcyAtLSAqLworCXZvaWQgKCp0cmFuc2Zlcl9hY2tfYmVnaW4pKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKKwl2b2lkICgqdHJhbnNmZXJfYWNrX2VuZCkoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOworCisJLyogLS0gdGltZXIgLS0gKi8KKwl1bnNpZ25lZCBpbnQgdGltZXJfcmVzb2x1dGlvbjsJLyogdGltZXIgcmVzb2x1dGlvbiAqLworCisJLyogLS0gRE1BIC0tICovICAgICAgICAgICAKKwl1bnNpZ25lZCBjaGFyICpkbWFfYXJlYTsJLyogRE1BIGFyZWEgKi8KKwlkbWFfYWRkcl90IGRtYV9hZGRyOwkJLyogcGh5c2ljYWwgYnVzIGFkZHJlc3MgKG5vdCBhY2Nlc3NpYmxlIGZyb20gbWFpbiBDUFUpICovCisJc2l6ZV90IGRtYV9ieXRlczsJCS8qIHNpemUgb2YgRE1BIGFyZWEgKi8KKworCXN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hX2J1ZmZlcl9wOwkvKiBhbGxvY2F0ZWQgYnVmZmVyICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1NfTU9EVUxFKQorCS8qIC0tIE9TUyB0aGluZ3MgLS0gKi8KKwlzdHJ1Y3Qgc25kX3BjbV9vc3NfcnVudGltZSBvc3M7CisjZW5kaWYKK307CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisJPC9wYXJhPgorCisJPHBhcmE+CisJICBGb3IgdGhlIG9wZXJhdG9ycyAoY2FsbGJhY2tzKSBvZiBlYWNoIHNvdW5kIGRyaXZlciwgbW9zdCBvZgorCXRoZXNlIHJlY29yZHMgYXJlIHN1cHBvc2VkIHRvIGJlIHJlYWQtb25seS4gIE9ubHkgdGhlIFBDTQorCW1pZGRsZS1sYXllciBjaGFuZ2VzIC8gdXBkYXRlcyB0aGVtLiAgVGhlIGV4Y2VwdGlvbnMgYXJlCisJdGhlIGhhcmR3YXJlIGRlc2NyaXB0aW9uIChodyksIGludGVycnVwdCBjYWxsYmFja3MKKwkodHJhbnNmZXJfYWNrX3h4eCksIERNQSBidWZmZXIgaW5mb3JtYXRpb24sIGFuZCB0aGUgcHJpdmF0ZQorCWRhdGEuICBCZXNpZGVzLCBpZiB5b3UgdXNlIHRoZSBzdGFuZGFyZCBidWZmZXIgYWxsb2NhdGlvbgorCW1ldGhvZCB2aWEgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4sCisJeW91IGRvbid0IG5lZWQgdG8gc2V0IHRoZSBETUEgYnVmZmVyIGluZm9ybWF0aW9uIGJ5IHlvdXJzZWxmLgorCTwvcGFyYT4KKworCTxwYXJhPgorCUluIHRoZSBzZWN0aW9ucyBiZWxvdywgaW1wb3J0YW50IHJlY29yZHMgYXJlIGV4cGxhaW5lZC4KKwk8L3BhcmE+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLWh3Ij4KKwk8dGl0bGU+SGFyZHdhcmUgRGVzY3JpcHRpb248L3RpdGxlPgorCTxwYXJhPgorCSAgVGhlIGhhcmR3YXJlIGRlc2NyaXB0b3IgKHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfcGNtX2hhcmR3YXJlPC9zdHJ1Y3RuYW1lPikKKwljb250YWlucyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGZ1bmRhbWVudGFsIGhhcmR3YXJlCisJY29uZmlndXJhdGlvbi4gIEFib3ZlIGFsbCwgeW91J2xsIG5lZWQgdG8gZGVmaW5lIHRoaXMgaW4KKwk8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1vcGVuLWNhbGxiYWNrIj48Y2l0ZXRpdGxlPgorCXRoZSBvcGVuIGNhbGxiYWNrPC9jaXRldGl0bGU+PC9saW5rPi4KKwlOb3RlIHRoYXQgdGhlIHJ1bnRpbWUgaW5zdGFuY2UgaG9sZHMgdGhlIGNvcHkgb2YgdGhlCisJZGVzY3JpcHRvciwgbm90IHRoZSBwb2ludGVyIHRvIHRoZSBleGlzdGluZyBkZXNjcmlwdG9yLiAgVGhhdAorCWlzLCBpbiB0aGUgb3BlbiBjYWxsYmFjaywgeW91IGNhbiBtb2RpZnkgdGhlIGNvcGllZCBkZXNjcmlwdG9yCisJKDxjb25zdGFudD5ydW50aW1lLSZndDtodzwvY29uc3RhbnQ+KSBhcyB5b3UgbmVlZC4gIEZvciBleGFtcGxlLCBpZiB0aGUgbWF4aW11bQorCW51bWJlciBvZiBjaGFubmVscyBpcyAxIG9ubHkgb24gc29tZSBjaGlwIG1vZGVscywgeW91IGNhbgorCXN0aWxsIHVzZSB0aGUgc2FtZSBoYXJkd2FyZSBkZXNjcmlwdG9yIGFuZCBjaGFuZ2UgdGhlCisJY2hhbm5lbHNfbWF4IGxhdGVyOgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworICAgICAgICAgIC4uLgorICAgICAgICAgIHJ1bnRpbWUtPmh3ID0gc25kX215Y2hpcF9wbGF5YmFja19odzsgLyogY29tbW9uIGRlZmluaXRpb24gKi8KKyAgICAgICAgICBpZiAoY2hpcC0+bW9kZWwgPT0gVkVSWV9PTERfT05FKQorICAgICAgICAgICAgICAgICAgcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4ID0gMTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwkgIFR5cGljYWxseSwgeW91J2xsIGhhdmUgYSBoYXJkd2FyZSBkZXNjcmlwdG9yIGFzIGJlbG93OgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9teWNoaXBfcGxheWJhY2tfaHcgPSB7CisgICAgICAgICAgLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKKyAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEKSwKKyAgICAgICAgICAuZm9ybWF0cyA9ICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorICAgICAgICAgIC5yYXRlcyA9ICAgICAgICAgICAgU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKyAgICAgICAgICAucmF0ZV9taW4gPSAgICAgICAgIDgwMDAsCisgICAgICAgICAgLnJhdGVfbWF4ID0gICAgICAgICA0ODAwMCwKKyAgICAgICAgICAuY2hhbm5lbHNfbWluID0gICAgIDIsCisgICAgICAgICAgLmNoYW5uZWxzX21heCA9ICAgICAyLAorICAgICAgICAgIC5idWZmZXJfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZF9ieXRlc19taW4gPSA0MDk2LAorICAgICAgICAgIC5wZXJpb2RfYnl0ZXNfbWF4ID0gMzI3NjgsCisgICAgICAgICAgLnBlcmlvZHNfbWluID0gICAgICAxLAorICAgICAgICAgIC5wZXJpb2RzX21heCA9ICAgICAgMTAyNCwKKyAgfTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCTxpdGVtaXplZGxpc3Q+CisJPGxpc3RpdGVtPjxwYXJhPgorICAgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSB0eXBlIGFuZAorICAgICAgICBjYXBhYmlsaXRpZXMgb2YgdGhpcyBwY20uIFRoZSBiaXQgZmxhZ3MgYXJlIGRlZmluZWQgaW4KKyAgICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9hc291bmQuaCZndDs8L2ZpbGVuYW1lPiBhcworICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fWFhYPC9jb25zdGFudD4uIEhlcmUsIGF0IGxlYXN0LCB5b3UKKyAgICAgICAgaGF2ZSB0byBzcGVjaWZ5IHdoZXRoZXIgdGhlIG1tYXAgaXMgc3VwcG9ydGVkIGFuZCB3aGljaAorICAgICAgICBpbnRlcmxlYXZlZCBmb3JtYXQgaXMgc3VwcG9ydGVkLgorICAgICAgICBXaGVuIHRoZSBpcyBzdXBwb3J0ZWQsIGFkZCB0aGUKKyAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX01NQVA8L2NvbnN0YW50PiBmbGFnIGhlcmUuIFdoZW4gdGhlCisgICAgICAgIGhhcmR3YXJlIHN1cHBvcnRzIHRoZSBpbnRlcmxlYXZlZCBvciB0aGUgbm9uLWludGVybGVhdmVkCisgICAgICAgIGZvcm1hdHMsIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRDwvY29uc3RhbnQ+IG9yCisgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19OT05JTlRFUkxFQVZFRDwvY29uc3RhbnQ+IGZsYWcgbXVzdAorICAgICAgICBiZSBzZXQsIHJlc3BlY3RpdmVseS4gSWYgYm90aCBhcmUgc3VwcG9ydGVkLCB5b3UgY2FuIHNldCBib3RoLAorICAgICAgICB0b28uIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgSW4gdGhlIGFib3ZlIGV4YW1wbGUsIDxjb25zdGFudD5NTUFQX1ZBTElEPC9jb25zdGFudD4gYW5kCisgICAgICAgIDxjb25zdGFudD5CTE9DS19UUkFOU0ZFUjwvY29uc3RhbnQ+IGFyZSBzcGVjaWZpZWQgZm9yIHRoZSBPU1MgbW1hcAorICAgICAgICBtb2RlLiBVc3VhbGx5IGJvdGggYXJlIHNldC4gT2YgY291cnNlLAorICAgICAgICA8Y29uc3RhbnQ+TU1BUF9WQUxJRDwvY29uc3RhbnQ+IGlzIHNldCBvbmx5IGlmIHRoZSBtbWFwIGlzCisgICAgICAgIHJlYWxseSBzdXBwb3J0ZWQuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIG90aGVyIHBvc3NpYmxlIGZsYWdzIGFyZQorICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUEFVU0U8L2NvbnN0YW50PiBhbmQKKyAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1JFU1VNRTwvY29uc3RhbnQ+LiBUaGUKKyAgICAgICAgPGNvbnN0YW50PlBBVVNFPC9jb25zdGFudD4gYml0IG1lYW5zIHRoYXQgdGhlIHBjbSBzdXBwb3J0cyB0aGUKKyAgICAgICAgPHF1b3RlPnBhdXNlPC9xdW90ZT4gb3BlcmF0aW9uLCB3aGlsZSB0aGUKKyAgICAgICAgPGNvbnN0YW50PlJFU1VNRTwvY29uc3RhbnQ+IGJpdCBtZWFucyB0aGF0IHRoZSBwY20gc3VwcG9ydHMKKyAgICAgICAgdGhlIGZ1bGwgPHF1b3RlPnN1c3BlbmQvcmVzdW1lPC9xdW90ZT4gb3BlcmF0aW9uLgorCUlmIHRoZSA8Y29uc3RhbnQ+UEFVU0U8L2NvbnN0YW50PiBmbGFnIGlzIHNldCwKKwl0aGUgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBiZWxvdworICAgICAgICBtdXN0IGhhbmRsZSB0aGUgY29ycmVzcG9uZGluZyAocGF1c2UgcHVzaC9yZWxlYXNlKSBjb21tYW5kcy4KKwlUaGUgc3VzcGVuZC9yZXN1bWUgdHJpZ2dlciBjb21tYW5kcyBjYW4gYmUgZGVmaW5lZCBldmVuIHdpdGhvdXQKKwl0aGUgPGNvbnN0YW50PlJFU1VNRTwvY29uc3RhbnQ+IGZsYWcuICBTZWUgPGxpbmsKKwlsaW5rZW5kPSJwb3dlci1tYW5hZ2VtZW50Ij48Y2l0ZXRpdGxlPgorCVBvd2VyIE1hbmFnZW1lbnQ8L2NpdGV0aXRsZT48L2xpbms+IHNlY3Rpb24gZm9yIGRldGFpbHMuCisgICAgICAgIDwvcGFyYT4KKworCTxwYXJhPgorCSAgV2hlbiB0aGUgUENNIHN1YnN0cmVhbXMgY2FuIGJlIHN5bmNocm9uaXplZCAodHlwaWNhbGx5LAorCXN5bmNocm9uaXplZCBzdGFydC9zdG9wIG9mIGEgcGxheWJhY2sgYW5kIGEgY2FwdHVyZSBzdHJlYW1zKSwKKwl5b3UgY2FuIGdpdmUgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQ8L2NvbnN0YW50PiwKKwl0b28uICBJbiB0aGlzIGNhc2UsIHlvdSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBsaW5rZWQtbGlzdCBvZgorCVBDTSBzdWJzdHJlYW1zIGluIHRoZSB0cmlnZ2VyIGNhbGxiYWNrLiAgVGhpcyB3aWxsIGJlCisJZGVzY3JpYmVkIGluIHRoZSBsYXRlciBzZWN0aW9uLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8c3RydWN0ZmllbGQ+Zm9ybWF0czwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSBiaXQtZmxhZ3MKKyAgICAgICAgb2Ygc3VwcG9ydGVkIGZvcm1hdHMgKDxjb25zdGFudD5TTkRSVl9QQ01fRk1UQklUX1hYWDwvY29uc3RhbnQ+KS4KKyAgICAgICAgSWYgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIG1vcmUgdGhhbiBvbmUgZm9ybWF0LCBnaXZlIGFsbCBvcidlZAorICAgICAgICBiaXRzLiAgSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBzaWduZWQgMTZiaXQgbGl0dGxlLWVuZGlhbgorICAgICAgICBmb3JtYXQgaXMgc3BlY2lmaWVkLgorICAgICAgICA8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIDxzdHJ1Y3RmaWVsZD5yYXRlczwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSBiaXQtZmxhZ3Mgb2YKKyAgICAgICAgc3VwcG9ydGVkIHJhdGVzICg8Y29uc3RhbnQ+U05EUlZfUENNX1JBVEVfWFhYPC9jb25zdGFudD4pLgorICAgICAgICBXaGVuIHRoZSBjaGlwIHN1cHBvcnRzIGNvbnRpbnVvdXMgcmF0ZXMsIHBhc3MKKyAgICAgICAgPGNvbnN0YW50PkNPTlRJTlVPVVM8L2NvbnN0YW50PiBiaXQgYWRkaXRpb25hbGx5LgorICAgICAgICBUaGUgcHJlLWRlZmluZWQgcmF0ZSBiaXRzIGFyZSBwcm92aWRlZCBvbmx5IGZvciB0eXBpY2FsCisJcmF0ZXMuIElmIHlvdXIgY2hpcCBzdXBwb3J0cyB1bmNvbnZlbnRpb25hbCByYXRlcywgeW91IG5lZWQgdG8gYWRkCisgICAgICAgIHRoZSA8Y29uc3RhbnQ+S05PVDwvY29uc3RhbnQ+IGJpdCBhbmQgc2V0IHVwIHRoZSBoYXJkd2FyZQorICAgICAgICBjb25zdHJhaW50IG1hbnVhbGx5IChleHBsYWluZWQgbGF0ZXIpLgorICAgICAgICA8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwk8c3RydWN0ZmllbGQ+cmF0ZV9taW48L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+cmF0ZV9tYXg8L3N0cnVjdGZpZWxkPiBkZWZpbmUgdGhlIG1pbmltdW0gYW5kCisJbWF4aW11bSBzYW1wbGUgcmF0ZS4gIFRoaXMgc2hvdWxkIGNvcnJlc3BvbmQgc29tZWhvdyB0bworCTxzdHJ1Y3RmaWVsZD5yYXRlczwvc3RydWN0ZmllbGQ+IGJpdHMuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJPHN0cnVjdGZpZWxkPmNoYW5uZWxfbWluPC9zdHJ1Y3RmaWVsZD4gYW5kCisJPHN0cnVjdGZpZWxkPmNoYW5uZWxfbWF4PC9zdHJ1Y3RmaWVsZD4gCisJZGVmaW5lLCBhcyB5b3UgbWlnaHQgYWxyZWFkeSBleHBlY3RlZCwgdGhlIG1pbmltdW0gYW5kIG1heGltdW0KKwludW1iZXIgb2YgY2hhbm5lbHMuCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJPHN0cnVjdGZpZWxkPmJ1ZmZlcl9ieXRlc19tYXg8L3N0cnVjdGZpZWxkPiBkZWZpbmVzIHRoZQorCW1heGltdW0gYnVmZmVyIHNpemUgaW4gYnl0ZXMuICBUaGVyZSBpcyBubworCTxzdHJ1Y3RmaWVsZD5idWZmZXJfYnl0ZXNfbWluPC9zdHJ1Y3RmaWVsZD4gZmllbGQsIHNpbmNlCisJaXQgY2FuIGJlIGNhbGN1bGF0ZWQgZnJvbSB0aGUgbWluaW11bSBwZXJpb2Qgc2l6ZSBhbmQgdGhlCisJbWluaW11bSBudW1iZXIgb2YgcGVyaW9kcy4KKwlNZWFud2hpbGUsIDxzdHJ1Y3RmaWVsZD5wZXJpb2RfYnl0ZXNfbWluPC9zdHJ1Y3RmaWVsZD4gYW5kCisJZGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHNpemUgb2YgdGhlIHBlcmlvZCBpbiBieXRlcy4KKwk8c3RydWN0ZmllbGQ+cGVyaW9kc19tYXg8L3N0cnVjdGZpZWxkPiBhbmQKKwk8c3RydWN0ZmllbGQ+cGVyaW9kc19taW48L3N0cnVjdGZpZWxkPiBkZWZpbmUgdGhlIG1heGltdW0gYW5kCisJbWluaW11bSBudW1iZXIgb2YgcGVyaW9kcyBpbiB0aGUgYnVmZmVyLgorICAgICAgICA8L3BhcmE+CisKKwk8cGFyYT4KKwlUaGUgPHF1b3RlPnBlcmlvZDwvcXVvdGU+IGlzIGEgdGVybSB0aGF0IGNvcnJlc3BvbmRzIHRvCisJYSBmcmFnbWVudCBpbiB0aGUgT1NTIHdvcmxkLiBUaGUgcGVyaW9kIGRlZmluZXMgdGhlIHNpemUgYXQKKwl3aGljaCBhIFBDTSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiBUaGlzIHNpemUgc3Ryb25nbHkKKwlkZXBlbmRzIG9uIHRoZSBoYXJkd2FyZS4gCisJR2VuZXJhbGx5LCB0aGUgc21hbGxlciBwZXJpb2Qgc2l6ZSB3aWxsIGdpdmUgeW91IG1vcmUKKwlpbnRlcnJ1cHRzLCB0aGF0IGlzLCBtb3JlIGNvbnRyb2xzLiAKKwlJbiB0aGUgY2FzZSBvZiBjYXB0dXJlLCB0aGlzIHNpemUgZGVmaW5lcyB0aGUgaW5wdXQgbGF0ZW5jeS4KKwlPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHdob2xlIGJ1ZmZlciBzaXplIGRlZmluZXMgdGhlCisJb3V0cHV0IGxhdGVuY3kgZm9yIHRoZSBwbGF5YmFjayBkaXJlY3Rpb24uCisJPC9wYXJhPgorCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJVGhlcmUgaXMgYWxzbyBhIGZpZWxkIDxzdHJ1Y3RmaWVsZD5maWZvX3NpemU8L3N0cnVjdGZpZWxkPi4KKwlUaGlzIHNwZWNpZmllcyB0aGUgc2l6ZSBvZiB0aGUgaGFyZHdhcmUgRklGTywgYnV0IGN1cnJlbnRseSBpdAorCWlzIG5laXRoZXIgdXNlZCBpbiB0aGUgZHJpdmVyIG5vciBpbiB0aGUgYWxzYS1saWIuICBTbywgeW91CisJY2FuIGlnbm9yZSB0aGlzIGZpZWxkLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTwvaXRlbWl6ZWRsaXN0PgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLWNvbmZpZyI+CisJPHRpdGxlPlBDTSBDb25maWd1cmF0aW9uczwvdGl0bGU+CisJPHBhcmE+CisJT2ssIGxldCdzIGdvIGJhY2sgYWdhaW4gdG8gdGhlIFBDTSBydW50aW1lIHJlY29yZHMuCisJVGhlIG1vc3QgZnJlcXVlbnRseSByZWZlcnJlZCByZWNvcmRzIGluIHRoZSBydW50aW1lIGluc3RhbmNlIGFyZQorCXRoZSBQQ00gY29uZmlndXJhdGlvbnMuCisJVGhlIFBDTSBjb25maWd1cmF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZSBydW50aW1lIGluc3RhbmNlCisJYWZ0ZXIgdGhlIGFwcGxpY2F0aW9uIHNlbmRzIDx0eXBlPmh3X3BhcmFtczwvdHlwZT4gZGF0YSB2aWEKKwlhbHNhLWxpYi4gIFRoZXJlIGFyZSBtYW55IGZpZWxkcyBjb3BpZWQgZnJvbSBod19wYXJhbXMgYW5kCisJc3dfcGFyYW1zIHN0cnVjdHMuICBGb3IgZXhhbXBsZSwKKwk8c3RydWN0ZmllbGQ+Zm9ybWF0PC9zdHJ1Y3RmaWVsZD4gaG9sZHMgdGhlIGZvcm1hdCB0eXBlCisJY2hvc2VuIGJ5IHRoZSBhcHBsaWNhdGlvbi4gIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIGVudW0gdmFsdWUKKwk8Y29uc3RhbnQ+U05EUlZfUENNX0ZPUk1BVF9YWFg8L2NvbnN0YW50Pi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlPbmUgdGhpbmcgdG8gYmUgbm90ZWQgaXMgdGhhdCB0aGUgY29uZmlndXJlZCBidWZmZXIgYW5kIHBlcmlvZAorCXNpemVzIGFyZSBzdG9yZWQgaW4gPHF1b3RlPmZyYW1lczwvcXVvdGU+IGluIHRoZSBydW50aW1lLgorICAgICAgICBJbiB0aGUgQUxTQSB3b3JsZCwgMSBmcmFtZSA9IGNoYW5uZWxzICogc2FtcGxlcy1zaXplLgorCUZvciBjb252ZXJzaW9uIGJldHdlZW4gZnJhbWVzIGFuZCBieXRlcywgeW91IGNhbiB1c2UgdGhlCisJPGZ1bmN0aW9uPmZyYW1lc190b19ieXRlcygpPC9mdW5jdGlvbj4gYW5kCisgICAgICAgICAgPGZ1bmN0aW9uPmJ5dGVzX3RvX2ZyYW1lcygpPC9mdW5jdGlvbj4gaGVscGVyIGZ1bmN0aW9ucy4gCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBwZXJpb2RfYnl0ZXMgPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKwk8cGFyYT4KKwlBbHNvLCBtYW55IHNvZnR3YXJlIHBhcmFtZXRlcnMgKHN3X3BhcmFtcykgYXJlCisJc3RvcmVkIGluIGZyYW1lcywgdG9vLiAgUGxlYXNlIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBmaWVsZC4KKwk8dHlwZT5zbmRfcGNtX3VmcmFtZXNfdDwvdHlwZT4gaXMgZm9yIHRoZSBmcmFtZXMgYXMgdW5zaWduZWQKKwlpbnRlZ2VyIHdoaWxlIDx0eXBlPnNuZF9wY21fc2ZyYW1lc190PC90eXBlPiBpcyBmb3IgdGhlIGZyYW1lcworCWFzIHNpZ25lZCBpbnRlZ2VyLgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLWRtYSI+CisJPHRpdGxlPkRNQSBCdWZmZXIgSW5mb3JtYXRpb248L3RpdGxlPgorCTxwYXJhPgorCVRoZSBETUEgYnVmZmVyIGlzIGRlZmluZWQgYnkgdGhlIGZvbGxvd2luZyBmb3VyIGZpZWxkcywKKwk8c3RydWN0ZmllbGQ+ZG1hX2FyZWE8L3N0cnVjdGZpZWxkPiwKKwk8c3RydWN0ZmllbGQ+ZG1hX2FkZHI8L3N0cnVjdGZpZWxkPiwKKwk8c3RydWN0ZmllbGQ+ZG1hX2J5dGVzPC9zdHJ1Y3RmaWVsZD4gYW5kCisJPHN0cnVjdGZpZWxkPmRtYV9wcml2YXRlPC9zdHJ1Y3RmaWVsZD4uCisJVGhlIDxzdHJ1Y3RmaWVsZD5kbWFfYXJlYTwvc3RydWN0ZmllbGQ+IGhvbGRzIHRoZSBidWZmZXIKKwlwb2ludGVyICh0aGUgbG9naWNhbCBhZGRyZXNzKS4gIFlvdSBjYW4gY2FsbAorCTxmdW5jdGlvbj5tZW1jcHk8L2Z1bmN0aW9uPiBmcm9tL3RvIAorCXRoaXMgcG9pbnRlci4gIE1lYW53aGlsZSwgPHN0cnVjdGZpZWxkPmRtYV9hZGRyPC9zdHJ1Y3RmaWVsZD4KKwlob2xkcyB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgYnVmZmVyLiAgVGhpcyBmaWVsZCBpcworCXNwZWNpZmllZCBvbmx5IHdoZW4gdGhlIGJ1ZmZlciBpcyBhIGxpbmVhciBidWZmZXIuCisJPHN0cnVjdGZpZWxkPmRtYV9ieXRlczwvc3RydWN0ZmllbGQ+IGhvbGRzIHRoZSBzaXplIG9mIGJ1ZmZlcgorCWluIGJ5dGVzLiAgPHN0cnVjdGZpZWxkPmRtYV9wcml2YXRlPC9zdHJ1Y3RmaWVsZD4gaXMgdXNlZCBmb3IKKwl0aGUgQUxTQSBETUEgYWxsb2NhdG9yLgorCTwvcGFyYT4KKworCTxwYXJhPgorCUlmIHlvdSB1c2UgYSBzdGFuZGFyZCBBTFNBIGZ1bmN0aW9uLAorCTxmdW5jdGlvbj5zbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKTwvZnVuY3Rpb24+LCBmb3IKKwlhbGxvY2F0aW5nIHRoZSBidWZmZXIsIHRoZXNlIGZpZWxkcyBhcmUgc2V0IGJ5IHRoZSBBTFNBIG1pZGRsZQorCWxheWVyLCBhbmQgeW91IHNob3VsZCA8ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gY2hhbmdlIHRoZW0gYnkKKwl5b3Vyc2VsZi4gIFlvdSBjYW4gcmVhZCB0aGVtIGJ1dCBub3Qgd3JpdGUgdGhlbS4KKwlPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IHdhbnQgdG8gYWxsb2NhdGUgdGhlIGJ1ZmZlciBieQorCXlvdXJzZWxmLCB5b3UnbGwgbmVlZCB0byBtYW5hZ2UgaXQgaW4gaHdfcGFyYW1zIGNhbGxiYWNrLgorCUF0IGxlYXN0LCA8c3RydWN0ZmllbGQ+ZG1hX2J5dGVzPC9zdHJ1Y3RmaWVsZD4gaXMgbWFuZGF0b3J5LgorCTxzdHJ1Y3RmaWVsZD5kbWFfYXJlYTwvc3RydWN0ZmllbGQ+IGlzIG5lY2Vzc2FyeSB3aGVuIHRoZQorCWJ1ZmZlciBpcyBtbWFwcGVkLiAgSWYgeW91ciBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IG1tYXAsIHRoaXMKKwlmaWVsZCBpcyBub3QgbmVjZXNzYXJ5LiAgPHN0cnVjdGZpZWxkPmRtYV9hZGRyPC9zdHJ1Y3RmaWVsZD4KKwlpcyBhbHNvIG9wdGlvbmFsLiAgWW91IGNhbiB1c2UKKwk8c3RydWN0ZmllbGQ+ZG1hX3ByaXZhdGU8L3N0cnVjdGZpZWxkPiBhcyB5b3UgbGlrZSwgdG9vLgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLXN0YXR1cyI+CisJPHRpdGxlPlJ1bm5pbmcgU3RhdHVzPC90aXRsZT4KKwk8cGFyYT4KKwlUaGUgcnVubmluZyBzdGF0dXMgY2FuIGJlIHJlZmVycmVkIHZpYSA8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7c3RhdHVzPC9jb25zdGFudD4uCisJVGhpcyBpcyB0aGUgcG9pbnRlciB0byB0aGUgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9wY21fbW1hcF9zdGF0dXM8L3N0cnVjdG5hbWU+CisJcmVjb3JkLiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gZ2V0IHRoZSBjdXJyZW50IERNQSBoYXJkd2FyZQorCXBvaW50ZXIgdmlhIDxjb25zdGFudD5ydW50aW1lLSZndDtzdGF0dXMtJmd0O2h3X3B0cjwvY29uc3RhbnQ+LgorCTwvcGFyYT4KKworCTxwYXJhPgorCVRoZSBETUEgYXBwbGljYXRpb24gcG9pbnRlciBjYW4gYmUgcmVmZXJyZWQgdmlhCisJPGNvbnN0YW50PnJ1bnRpbWUtJmd0O2NvbnRyb2w8L2NvbnN0YW50Piwgd2hpY2ggcG9pbnRzIHRvIHRoZQorCXN0cnVjdCA8c3RydWN0bmFtZT5zbmRfcGNtX21tYXBfY29udHJvbDwvc3RydWN0bmFtZT4gcmVjb3JkLgorCUhvd2V2ZXIsIGFjY2Vzc2luZyBkaXJlY3RseSB0byB0aGlzIHZhbHVlIGlzIG5vdCByZWNvbW1lbmRlZC4KKwk8L3BhcmE+CisJPC9zZWN0aW9uPgorCisJPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1wcml2YXRlIj4KKwk8dGl0bGU+UHJpdmF0ZSBEYXRhPC90aXRsZT4gCisJPHBhcmE+CisJWW91IGNhbiBhbGxvY2F0ZSBhIHJlY29yZCBmb3IgdGhlIHN1YnN0cmVhbSBhbmQgc3RvcmUgaXQgaW4KKwk8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4uICBVc3VhbGx5LCB0aGlzCisJaXMgZG9uZSBpbgorCTxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPjxjaXRldGl0bGU+CisJdGhlIG9wZW4gY2FsbGJhY2s8L2NpdGV0aXRsZT48L2xpbms+LgorCURvbid0IG1peCB0aGlzIHdpdGggPGNvbnN0YW50PnBjbS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4uCisJVGhlIDxjb25zdGFudD5wY20tJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+IHVzdWFsbHkgcG9pbnRzIHRvIHRoZQorCWNoaXAgaW5zdGFuY2UgYXNzaWduZWQgc3RhdGljYWxseSBhdCB0aGUgY3JlYXRpb24gb2YgUENNLCB3aGlsZSB0aGUgCisJPGNvbnN0YW50PnJ1bnRpbWUtJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+IHBvaW50cyB0byBhIGR5bmFtaWMKKwlkYXRhIHN0cnVjdHVyZSBjcmVhdGVkIGF0IHRoZSBQQ00gb3BlbiBjYWxsYmFjay4KKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXlfcGNtX2RhdGEgKmRhdGE7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworICAgICAgICAgIHN1YnN0cmVhbS0+cnVudGltZS0+cHJpdmF0ZV9kYXRhID0gZGF0YTsKKyAgICAgICAgICAuLi4uCisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBhbGxvY2F0ZWQgb2JqZWN0IG11c3QgYmUgcmVsZWFzZWQgaW4KKwk8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1vcGVuLWNhbGxiYWNrIj48Y2l0ZXRpdGxlPgorCXRoZSBjbG9zZSBjYWxsYmFjazwvY2l0ZXRpdGxlPjwvbGluaz4uCisgICAgICAgIDwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLWludHIiPgorCTx0aXRsZT5JbnRlcnJ1cHQgQ2FsbGJhY2tzPC90aXRsZT4KKwk8cGFyYT4KKwlUaGUgZmllbGQgPHN0cnVjdGZpZWxkPnRyYW5zZmVyX2Fja19iZWdpbjwvc3RydWN0ZmllbGQ+IGFuZAorCTxzdHJ1Y3RmaWVsZD50cmFuc2Zlcl9hY2tfZW5kPC9zdHJ1Y3RmaWVsZD4gYXJlIGNhbGxlZCBhdAorCXRoZSBiZWdpbm5pbmcgYW5kIGF0IHRoZSBlbmQgb2YKKwk8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4sIHJlc3BlY3RpdmVseS4gCisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycyI+CisgICAgICA8dGl0bGU+T3BlcmF0b3JzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBPSywgbm93IGxldCBtZSBnaXZlIGRldGFpbHMgYWJvdXQgZWFjaCBwY20gY2FsbGJhY2sKKyAgICAgICg8cGFyYW1ldGVyPm9wczwvcGFyYW1ldGVyPikuIEluIGdlbmVyYWwsIGV2ZXJ5IGNhbGxiYWNrIG11c3QKKyAgICAgIHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyCisgICAgICBzdWNoIGFzIDxjb25zdGFudD4tRUlOVkFMPC9jb25zdGFudD4uIFRvIGNob29zZSBhbiBhcHByb3ByaWF0ZQorICAgICAgZXJyb3IgbnVtYmVyLCBpdCBpcyBhZHZpc2VkIHRvIGNoZWNrIHdoYXQgdmFsdWUgb3RoZXIgcGFydHMgb2YKKyAgICAgIHRoZSBrZXJuZWwgcmV0dXJuIHdoZW4gdGhlIHNhbWUga2luZCBvZiByZXF1ZXN0IGZhaWxzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRha2VzIGF0IGxlYXN0IHRoZSBhcmd1bWVudCB3aXRoCisgICAgICAgIDxzdHJ1Y3RuYW1lPnNuZF9wY21fc3Vic3RyZWFtPC9zdHJ1Y3RuYW1lPiBwb2ludGVyLiBUbyByZXRyaWV2ZQorICAgICAgICB0aGUgY2hpcCByZWNvcmQgZnJvbSB0aGUgZ2l2ZW4gc3Vic3RyZWFtIGluc3RhbmNlLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgZm9sbG93aW5nIG1hY3JvLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBpbnQgeHh4KCkgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisgICAgICAgICAgLi4uLgorICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworCVRoZSBtYWNybyByZWFkcyA8Y29uc3RhbnQ+c3Vic3RyZWFtLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50PiwKKwl3aGljaCBpcyBhIGNvcHkgb2YgPGNvbnN0YW50PnBjbS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4uCisJWW91IGNhbiBvdmVycmlkZSB0aGUgZm9ybWVyIGlmIHlvdSBuZWVkIHRvIGFzc2lnbiBkaWZmZXJlbnQgZGF0YQorCXJlY29yZHMgcGVyIFBDTSBzdWJzdHJlYW0uICBGb3IgZXhhbXBsZSwgdGhlIGNtaTgzMzAgZHJpdmVyIGFzc2lnbnMKKwlkaWZmZXJlbnQgcHJpdmF0ZV9kYXRhIGZvciBwbGF5YmFjayBhbmQgY2FwdHVyZSBkaXJlY3Rpb25zLAorCWJlY2F1c2UgaXQgdXNlcyB0d28gZGlmZmVyZW50IGNvZGVjcyAoU0ItIGFuZCBBRC1jb21wYXRpYmxlKSBmb3IKKwlkaWZmZXJlbnQgZGlyZWN0aW9ucy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+b3BlbiBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHBjbSBzdWJzdHJlYW0gaXMgb3BlbmVkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQXQgbGVhc3QsIGhlcmUgeW91IGhhdmUgdG8gaW5pdGlhbGl6ZSB0aGUgcnVudGltZS0mZ3Q7aHcKKyAgICAgICAgICByZWNvcmQuIFR5cGljYWxseSwgdGhpcyBpcyBkb25lIGJ5IGxpa2UgdGhpczogCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisgICAgICAgICAgcnVudGltZS0+aHcgPSBzbmRfbXljaGlwX3BsYXliYWNrX2h3OworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICB3aGVyZSA8cGFyYW1ldGVyPnNuZF9teWNoaXBfcGxheWJhY2tfaHc8L3BhcmFtZXRlcj4gaXMgdGhlCisgICAgICAgICAgcHJlLWRlZmluZWQgaGFyZHdhcmUgZGVzY3JpcHRpb24uCisJPC9wYXJhPgorCisJPHBhcmE+CisJWW91IGNhbiBhbGxvY2F0ZSBhIHByaXZhdGUgZGF0YSBpbiB0aGlzIGNhbGxiYWNrLCBhcyBkZXNjcmliZWQKKwlpbiA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtcHJpdmF0ZSI+PGNpdGV0aXRsZT4KKwlQcml2YXRlIERhdGE8L2NpdGV0aXRsZT48L2xpbms+IHNlY3Rpb24uCisJPC9wYXJhPgorCisJPHBhcmE+CisJSWYgdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gbmVlZHMgbW9yZSBjb25zdHJhaW50cywgc2V0IHRoZQorCWhhcmR3YXJlIGNvbnN0cmFpbnRzIGhlcmUsIHRvby4KKwlTZWUgPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1jb25zdHJhaW50cyI+PGNpdGV0aXRsZT4KKwlDb25zdHJhaW50czwvY2l0ZXRpdGxlPjwvbGluaz4gZm9yIG1vcmUgZGV0YWlscy4KKwk8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1jbG9zZS1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5jbG9zZSBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICAgIE9idmlvdXNseSwgdGhpcyBpcyBjYWxsZWQgd2hlbiBhIHBjbSBzdWJzdHJlYW0gaXMgY2xvc2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgQW55IHByaXZhdGUgaW5zdGFuY2UgZm9yIGEgcGNtIHN1YnN0cmVhbSBhbGxvY2F0ZWQgaW4gdGhlCisgICAgICAgICAgb3BlbiBjYWxsYmFjayB3aWxsIGJlIHJlbGVhc2VkIGhlcmUuIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAga2ZyZWUoc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEpOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1pb2N0bC1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5pb2N0bCBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgaXMgdXNlZCBmb3IgYW55IHNwZWNpYWwgY2FsbCB0byBwY20gaW9jdGxzLiBCdXQKKyAgICAgICAgdXN1YWxseSB5b3UgY2FuIHBhc3MgYSBnZW5lcmljIGlvY3RsIGNhbGxiYWNrLCAKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX2lvY3RsPC9mdW5jdGlvbj4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWh3LXBhcmFtcy1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5od19wYXJhbXMgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgaGFyZHdhcmUgcGFyYW1ldGVyCisgICAgICAgICg8c3RydWN0ZmllbGQ+aHdfcGFyYW1zPC9zdHJ1Y3RmaWVsZD4pIGlzIHNldAorICAgICAgICB1cCBieSB0aGUgYXBwbGljYXRpb24sIAorICAgICAgICB0aGF0IGlzLCBvbmNlIHdoZW4gdGhlIGJ1ZmZlciBzaXplLCB0aGUgcGVyaW9kIHNpemUsIHRoZQorICAgICAgICBmb3JtYXQsIGV0Yy4gYXJlIGRlZmluZWQgZm9yIHRoZSBwY20gc3Vic3RyZWFtLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE1hbnkgaGFyZHdhcmUgc2V0dXBzIHNob3VsZCBiZSBkb25lIGluIHRoaXMgY2FsbGJhY2ssCisgICAgICAgIGluY2x1ZGluZyB0aGUgYWxsb2NhdGlvbiBvZiBidWZmZXJzLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFBhcmFtZXRlcnMgdG8gYmUgaW5pdGlhbGl6ZWQgYXJlIHJldHJpZXZlZCBieQorICAgICAgICAgIDxmdW5jdGlvbj5wYXJhbXNfeHh4KCk8L2Z1bmN0aW9uPiBtYWNyb3MuIFRvIGFsbG9jYXRlCisgICAgICAgICAgYnVmZmVyLCB5b3UgY2FuIGNhbGwgYSBoZWxwZXIgZnVuY3Rpb24sIAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4gaXMgYXZhaWxhYmxlCisJICBvbmx5IHdoZW4gdGhlIERNQSBidWZmZXJzIGhhdmUgYmVlbiBwcmUtYWxsb2NhdGVkLgorCSAgU2VlIHRoZSBzZWN0aW9uIDxsaW5rCisJICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeS1idWZmZXItdHlwZXMiPjxjaXRldGl0bGU+CisJICBCdWZmZXIgVHlwZXM8L2NpdGV0aXRsZT48L2xpbms+IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBhbmQgPHN0cnVjdGZpZWxkPnByZXBhcmU8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MKKyAgICAgICAgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBwZXIgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgT1NTIGVtdWxhdGlvbiBtYXkKKyAgICAgICAgY2FsbCB0aGVzZSBjYWxsYmFja3MgYXQgZWFjaCBjaGFuZ2UgdmlhIGl0cyBpb2N0bC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaHVzLCB5b3UgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byBhbGxvY2F0ZSB0aGUgc2FtZSBidWZmZXJzCisgICAgICAgIG1hbnkgdGltZXMsIHdoaWNoIHdpbGwgbGVhZCB0byBtZW1vcnkgbGVha3MhICBDYWxsaW5nIHRoZQorICAgICAgICBoZWxwZXIgZnVuY3Rpb24gYWJvdmUgbWFueSB0aW1lcyBpcyBPSy4gSXQgd2lsbCByZWxlYXNlIHRoZQorICAgICAgICBwcmV2aW91cyBidWZmZXIgYXV0b21hdGljYWxseSB3aGVuIGl0IHdhcyBhbHJlYWR5IGFsbG9jYXRlZC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbm90aGVyIG5vdGUgaXMgdGhhdCB0aGlzIGNhbGxiYWNrIGlzIG5vbi1hdG9taWMKKyAgICAgICAgKHNjaGVkdWxhYmxlKS4gVGhpcyBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlCisgICAgICAgIDxzdHJ1Y3RmaWVsZD50cmlnZ2VyPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgCisgICAgICAgIGlzIGF0b21pYyAobm9uLXNjaGVkdWxhYmxlKS4gVGhhdCBpcywgbXV0ZXhlcyBvciBhbnkKKyAgICAgICAgc2NoZWR1bGUtcmVsYXRlZCBmdW5jdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgaW4KKyAgICAgICAgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KKwlQbGVhc2Ugc2VlIHRoZSBzdWJzZWN0aW9uCisJPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1hdG9taWNpdHkiPjxjaXRldGl0bGU+CisJQXRvbWljaXR5PC9jaXRldGl0bGU+PC9saW5rPiBmb3IgZGV0YWlscy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtaHctZnJlZS1jYWxsYmFjayI+CisgICAgICAgIDx0aXRsZT5od19mcmVlIGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB0byByZWxlYXNlIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIHZpYQorICAgICAgICAgIDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPi4gRm9yIGV4YW1wbGUsIHJlbGVhc2luZyB0aGUKKyAgICAgICAgICBidWZmZXIgdmlhIAorICAgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKTwvZnVuY3Rpb24+IGlzIGRvbmUgYnkKKyAgICAgICAgICBjYWxsaW5nIHRoZSBmb2xsb3dpbmc6IAorCisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGFsd2F5cyBjYWxsZWQgYmVmb3JlIHRoZSBjbG9zZSBjYWxsYmFjayBpcyBjYWxsZWQuCisgICAgICAgICAgQWxzbywgdGhlIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRvby4KKyAgICAgICAgICBLZWVwIHRyYWNrIHdoZXRoZXIgdGhlIHJlc291cmNlIHdhcyBhbHJlYWR5IHJlbGVhc2VkLiAKKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtcHJlcGFyZS1jYWxsYmFjayI+CisgICAgICAgPHRpdGxlPnByZXBhcmUgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHBjbSBpcworICAgICAgICA8cXVvdGU+cHJlcGFyZWQ8L3F1b3RlPi4gWW91IGNhbiBzZXQgdGhlIGZvcm1hdCB0eXBlLCBzYW1wbGUKKyAgICAgICAgcmF0ZSwgZXRjLiBoZXJlLiBUaGUgZGlmZmVyZW5jZSBmcm9tCisgICAgICAgIDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPiBpcyB0aGF0IHRoZSAKKyAgICAgICAgPHN0cnVjdGZpZWxkPnByZXBhcmU8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBlYWNoCisgICAgICAgIHRpbWUgCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3ByZXBhcmUoKTwvZnVuY3Rpb24+IGlzIGNhbGxlZCwgaS5lLiB3aGVuCisgICAgICAgIHJlY292ZXJpbmcgYWZ0ZXIgdW5kZXJydW5zLCBldGMuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisJTm90ZSB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgbm93IG5vbi1hdG9taWMuCisJWW91IGNhbiB1c2Ugc2NoZWR1bGUtcmVsYXRlZCBmdW5jdGlvbnMgc2FmZWx5IGluIHRoaXMgY2FsbGJhY2suCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJbiB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIGNhbGxiYWNrcywgeW91IGNhbiByZWZlciB0byB0aGUKKyAgICAgICAgdmFsdWVzIHZpYSB0aGUgcnVudGltZSByZWNvcmQsCisgICAgICAgIHN1YnN0cmVhbS0mZ3Q7cnVudGltZS4KKyAgICAgICAgRm9yIGV4YW1wbGUsIHRvIGdldCB0aGUgY3VycmVudAorICAgICAgICByYXRlLCBmb3JtYXQgb3IgY2hhbm5lbHMsIGFjY2VzcyB0bworICAgICAgICBydW50aW1lLSZndDtyYXRlLAorICAgICAgICBydW50aW1lLSZndDtmb3JtYXQgb3IKKyAgICAgICAgcnVudGltZS0mZ3Q7Y2hhbm5lbHMsIHJlc3BlY3RpdmVseS4gCisgICAgICAgIFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIGlzIHNldCB0bworCXJ1bnRpbWUtJmd0O2RtYV9hcmVhLiAgVGhlIGJ1ZmZlciBhbmQgcGVyaW9kIHNpemVzIGFyZQorCWluIHJ1bnRpbWUtJmd0O2J1ZmZlcl9zaXplIGFuZCBydW50aW1lLSZndDtwZXJpb2Rfc2l6ZSwKKwlyZXNwZWN0aXZlbHkuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBCZSBjYXJlZnVsIHRoYXQgdGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBtYW55IHRpbWVzIGF0CisgICAgICAgIGVhY2ggc2V0dXAsIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXRyaWdnZXItY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+dHJpZ2dlciBjYWxsYmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzbmRfeHh4X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpOworXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgcGNtIGlzIHN0YXJ0ZWQsIHN0b3BwZWQgb3IgcGF1c2VkLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgV2hpY2ggYWN0aW9uIGlzIHNwZWNpZmllZCBpbiB0aGUgc2Vjb25kIGFyZ3VtZW50LAorICAgICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fVFJJR0dFUl9YWFg8L2NvbnN0YW50PiBpbgorICAgICAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvcGNtLmgmZ3Q7PC9maWxlbmFtZT4uIEF0IGxlYXN0LAorICAgICAgICAgIHRoZSA8Y29uc3RhbnQ+U1RBUlQ8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50PlNUT1A8L2NvbnN0YW50PgorICAgICAgICAgIGNvbW1hbmRzIG11c3QgYmUgZGVmaW5lZCBpbiB0aGlzIGNhbGxiYWNrLiAKKworICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3dpdGNoIChjbWQpIHsKKyAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKKyAgICAgICAgICAvKiBkbyBzb21ldGhpbmcgdG8gc3RhcnQgdGhlIFBDTSBlbmdpbmUgKi8KKyAgICAgICAgICBicmVhazsKKyAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorICAgICAgICAgIC8qIGRvIHNvbWV0aGluZyB0byBzdG9wIHRoZSBQQ00gZW5naW5lICovCisgICAgICAgICAgYnJlYWs7CisgIGRlZmF1bHQ6CisgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFdoZW4gdGhlIHBjbSBzdXBwb3J0cyB0aGUgcGF1c2Ugb3BlcmF0aW9uIChnaXZlbiBpbiB0aGUgaW5mbworICAgICAgICBmaWVsZCBvZiB0aGUgaGFyZHdhcmUgdGFibGUpLCB0aGUgPGNvbnN0YW50PlBBVVNFX1BVU0U8L2NvbnN0YW50PgorICAgICAgICBhbmQgPGNvbnN0YW50PlBBVVNFX1JFTEVBU0U8L2NvbnN0YW50PiBjb21tYW5kcyBtdXN0IGJlCisgICAgICAgIGhhbmRsZWQgaGVyZSwgdG9vLiBUaGUgZm9ybWVyIGlzIHRoZSBjb21tYW5kIHRvIHBhdXNlIHRoZSBwY20sCisgICAgICAgIGFuZCB0aGUgbGF0dGVyIHRvIHJlc3RhcnQgdGhlIHBjbSBhZ2Fpbi4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBXaGVuIHRoZSBwY20gc3VwcG9ydHMgdGhlIHN1c3BlbmQvcmVzdW1lIG9wZXJhdGlvbiwKKwlyZWdhcmRsZXNzIG9mIGZ1bGwgb3IgcGFydGlhbCBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0LAorICAgICAgICB0aGUgPGNvbnN0YW50PlNVU1BFTkQ8L2NvbnN0YW50PiBhbmQgPGNvbnN0YW50PlJFU1VNRTwvY29uc3RhbnQ+CisgICAgICAgIGNvbW1hbmRzIG11c3QgYmUgaGFuZGxlZCwgdG9vLgorICAgICAgICBUaGVzZSBjb21tYW5kcyBhcmUgaXNzdWVkIHdoZW4gdGhlIHBvd2VyLW1hbmFnZW1lbnQgc3RhdHVzIGlzCisgICAgICAgIGNoYW5nZWQuICBPYnZpb3VzbHksIHRoZSA8Y29uc3RhbnQ+U1VTUEVORDwvY29uc3RhbnQ+IGFuZAorICAgICAgICA8Y29uc3RhbnQ+UkVTVU1FPC9jb25zdGFudD4gY29tbWFuZHMKKyAgICAgICAgc3VzcGVuZCBhbmQgcmVzdW1lIHRoZSBwY20gc3Vic3RyZWFtLCBhbmQgdXN1YWxseSwgdGhleQorICAgICAgICBhcmUgaWRlbnRpY2FsIHRvIHRoZSA8Y29uc3RhbnQ+U1RPUDwvY29uc3RhbnQ+IGFuZAorICAgICAgICA8Y29uc3RhbnQ+U1RBUlQ8L2NvbnN0YW50PiBjb21tYW5kcywgcmVzcGVjdGl2ZWx5LgorCSAgU2VlIHRoZSA8bGluayBsaW5rZW5kPSJwb3dlci1tYW5hZ2VtZW50Ij48Y2l0ZXRpdGxlPgorCVBvd2VyIE1hbmFnZW1lbnQ8L2NpdGV0aXRsZT48L2xpbms+IHNlY3Rpb24gZm9yIGRldGFpbHMuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBcyBtZW50aW9uZWQsIHRoaXMgY2FsbGJhY2sgaXMgYXRvbWljLiAgWW91IGNhbm5vdCBjYWxsCisJICBmdW5jdGlvbnMgd2hpY2ggbWF5IHNsZWVwLgorCSAgVGhlIHRyaWdnZXIgY2FsbGJhY2sgc2hvdWxkIGJlIGFzIG1pbmltYWwgYXMgcG9zc2libGUsCisJICBqdXN0IHJlYWxseSB0cmlnZ2VyaW5nIHRoZSBETUEuICBUaGUgb3RoZXIgc3R1ZmYgc2hvdWxkIGJlCisJICBpbml0aWFsaXplZCBod19wYXJhbXMgYW5kIHByZXBhcmUgY2FsbGJhY2tzIHByb3Blcmx5CisJICBiZWZvcmVoYW5kLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1wb2ludGVyLWNhbGxiYWNrIj4KKyAgICAgICAgPHRpdGxlPnBvaW50ZXIgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfeHh4X3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBQQ00gbWlkZGxlIGxheWVyIGlucXVpcmVzCisgICAgICAgIHRoZSBjdXJyZW50IGhhcmR3YXJlIHBvc2l0aW9uIG9uIHRoZSBidWZmZXIuIFRoZSBwb3NpdGlvbiBtdXN0CisgICAgICAgIGJlIHJldHVybmVkIGluIGZyYW1lcywKKyAgICAgICAgcmFuZ2luZyBmcm9tIDAgdG8gYnVmZmVyX3NpemUgLSAxLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBpcyBjYWxsZWQgdXN1YWxseSBmcm9tIHRoZSBidWZmZXItdXBkYXRlIHJvdXRpbmUgaW4gdGhlCisgICAgICAgIHBjbSBtaWRkbGUgbGF5ZXIsIHdoaWNoIGlzIGludm9rZWQgd2hlbgorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gaXMgY2FsbGVkIGluIHRoZQorICAgICAgICBpbnRlcnJ1cHQgcm91dGluZS4gVGhlbiB0aGUgcGNtIG1pZGRsZSBsYXllciB1cGRhdGVzIHRoZQorICAgICAgICBwb3NpdGlvbiBhbmQgY2FsY3VsYXRlcyB0aGUgYXZhaWxhYmxlIHNwYWNlLCBhbmQgd2FrZXMgdXAgdGhlCisgICAgICAgIHNsZWVwaW5nIHBvbGwgdGhyZWFkcywgZXRjLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgYWxzbyBhdG9taWMuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWNvcHktc2lsZW5jZSI+CisgICAgICAgIDx0aXRsZT5jb3B5IGFuZCBzaWxlbmNlIGNhbGxiYWNrczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZXNlIGNhbGxiYWNrcyBhcmUgbm90IG1hbmRhdG9yeSwgYW5kIGNhbiBiZSBvbWl0dGVkIGluCisgICAgICAgIG1vc3QgY2FzZXMuIFRoZXNlIGNhbGxiYWNrcyBhcmUgdXNlZCB3aGVuIHRoZSBoYXJkd2FyZSBidWZmZXIKKyAgICAgICAgY2Fubm90IGJlIGluIHRoZSBub3JtYWwgbWVtb3J5IHNwYWNlLiBTb21lIGNoaXBzIGhhdmUgdGhlaXIKKyAgICAgICAgb3duIGJ1ZmZlciBvbiB0aGUgaGFyZHdhcmUgd2hpY2ggaXMgbm90IG1hcHBhYmxlLiBJbiBzdWNoIGEKKyAgICAgICAgY2FzZSwgeW91IGhhdmUgdG8gdHJhbnNmZXIgdGhlIGRhdGEgbWFudWFsbHkgZnJvbSB0aGUgbWVtb3J5CisgICAgICAgIGJ1ZmZlciB0byB0aGUgaGFyZHdhcmUgYnVmZmVyLiBPciwgaWYgdGhlIGJ1ZmZlciBpcworICAgICAgICBub24tY29udGlndW91cyBvbiBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIG1lbW9yeSBzcGFjZXMsCisgICAgICAgIHRoZXNlIGNhbGxiYWNrcyBtdXN0IGJlIGRlZmluZWQsIHRvby4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBJZiB0aGVzZSB0d28gY2FsbGJhY2tzIGFyZSBkZWZpbmVkLCBjb3B5IGFuZCBzZXQtc2lsZW5jZQorICAgICAgICBvcGVyYXRpb25zIGFyZSBkb25lIGJ5IHRoZW0uIFRoZSBkZXRhaWxlZCB3aWxsIGJlIGRlc2NyaWJlZCBpbgorICAgICAgICB0aGUgbGF0ZXIgc2VjdGlvbiA8bGluaworICAgICAgICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeSI+PGNpdGV0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeQorICAgICAgICBNYW5hZ2VtZW50PC9jaXRldGl0bGU+PC9saW5rPi4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWFjayI+CisgICAgICAgIDx0aXRsZT5hY2sgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIGFsc28gbm90IG1hbmRhdG9yeS4gVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQKKyAgICAgICAgd2hlbiB0aGUgYXBwbF9wdHIgaXMgdXBkYXRlZCBpbiByZWFkIG9yIHdyaXRlIG9wZXJhdGlvbnMuCisgICAgICAgIFNvbWUgZHJpdmVycyBsaWtlIGVtdTEwazEtZnggYW5kIGNzNDZ4eCBuZWVkIHRvIHRyYWNrIHRoZQorCWN1cnJlbnQgYXBwbF9wdHIgZm9yIHRoZSBpbnRlcm5hbCBidWZmZXIsIGFuZCB0aGlzIGNhbGxiYWNrCisJaXMgdXNlZnVsIG9ubHkgZm9yIHN1Y2ggYSBwdXJwb3NlLgorCTwvcGFyYT4KKwk8cGFyYT4KKwkgIFRoaXMgY2FsbGJhY2sgaXMgYXRvbWljLgorCTwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXBhZ2UtY2FsbGJhY2siPgorICAgICAgICA8dGl0bGU+cGFnZSBjYWxsYmFjazwvdGl0bGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbCB0b28uIFRoaXMgY2FsbGJhY2sgaXMgdXNlZAorICAgICAgICBtYWlubHkgZm9yIG5vbi1jb250aWd1b3VzIGJ1ZmZlcnMuIFRoZSBtbWFwIGNhbGxzIHRoaXMKKyAgICAgICAgY2FsbGJhY2sgdG8gZ2V0IHRoZSBwYWdlIGFkZHJlc3MuIFNvbWUgZXhhbXBsZXMgd2lsbCBiZQorICAgICAgICBleHBsYWluZWQgaW4gdGhlIGxhdGVyIHNlY3Rpb24gPGxpbmsKKyAgICAgICAgbGlua2VuZD0iYnVmZmVyLWFuZC1tZW1vcnkiPjxjaXRldGl0bGU+QnVmZmVyIGFuZCBNZW1vcnkKKyAgICAgICAgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4sIHRvby4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlciI+CisgICAgICA8dGl0bGU+SW50ZXJydXB0IEhhbmRsZXI8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSByZXN0IG9mIHBjbSBzdHVmZiBpcyB0aGUgUENNIGludGVycnVwdCBoYW5kbGVyLiBUaGUKKyAgICAgIHJvbGUgb2YgUENNIGludGVycnVwdCBoYW5kbGVyIGluIHRoZSBzb3VuZCBkcml2ZXIgaXMgdG8gdXBkYXRlCisgICAgICB0aGUgYnVmZmVyIHBvc2l0aW9uIGFuZCB0byB0ZWxsIHRoZSBQQ00gbWlkZGxlIGxheWVyIHdoZW4gdGhlCisgICAgICBidWZmZXIgcG9zaXRpb24gZ29lcyBhY3Jvc3MgdGhlIHByZXNjcmliZWQgcGVyaW9kIHNpemUuIFRvCisgICAgICBpbmZvcm0gdGhpcywgY2FsbCB0aGUgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+CisgICAgICBmdW5jdGlvbi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgc2V2ZXJhbCB0eXBlcyBvZiBzb3VuZCBjaGlwcyB0byBnZW5lcmF0ZSB0aGUgaW50ZXJydXB0cy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXItYm91bmRhcnkiPgorICAgICAgICA8dGl0bGU+SW50ZXJydXB0cyBhdCB0aGUgcGVyaW9kIChmcmFnbWVudCkgYm91bmRhcnk8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGlzIHRoZSBtb3N0IGZyZXF1ZW50bHkgZm91bmQgdHlwZTogIHRoZSBoYXJkd2FyZQorICAgICAgICBnZW5lcmF0ZXMgYW4gaW50ZXJydXB0IGF0IGVhY2ggcGVyaW9kIGJvdW5kYXJ5LgorCUluIHRoaXMgY2FzZSwgeW91IGNhbiBjYWxsCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiBhdCBlYWNoIAorICAgICAgICBpbnRlcnJ1cHQuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IHRha2VzIHRoZQorICAgICAgICBzdWJzdHJlYW0gcG9pbnRlciBhcyBpdHMgYXJndW1lbnQuIFRodXMsIHlvdSBuZWVkIHRvIGtlZXAgdGhlCisgICAgICAgIHN1YnN0cmVhbSBwb2ludGVyIGFjY2Vzc2libGUgZnJvbSB0aGUgY2hpcCBpbnN0YW5jZS4gRm9yCisgICAgICAgIGV4YW1wbGUsIGRlZmluZSBzdWJzdHJlYW0gZmllbGQgaW4gdGhlIGNoaXAgcmVjb3JkIHRvIGhvbGQgdGhlCisgICAgICAgIGN1cnJlbnQgcnVubmluZyBzdWJzdHJlYW0gcG9pbnRlciwgYW5kIHNldCB0aGUgcG9pbnRlciB2YWx1ZQorICAgICAgICBhdCBvcGVuIGNhbGxiYWNrIChhbmQgcmVzZXQgYXQgY2xvc2UgY2FsbGJhY2spLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIElmIHlvdSBhY3F1aXJlIGEgc3BpbmxvY2sgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLCBhbmQgdGhlCisgICAgICAgIGxvY2sgaXMgdXNlZCBpbiBvdGhlciBwY20gY2FsbGJhY2tzLCB0b28sIHRoZW4geW91IGhhdmUgdG8KKyAgICAgICAgcmVsZWFzZSB0aGUgbG9jayBiZWZvcmUgY2FsbGluZworICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4sIGJlY2F1c2UKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IGNhbGxzIG90aGVyIHBjbQorICAgICAgICBjYWxsYmFja3MgaW5zaWRlLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFR5cGljYWwgY29kZSB3b3VsZCBiZSBsaWtlOgorCisgICAgICAgICAgPGV4YW1wbGU+CisJICAgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxlciBDYXNlICMxPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX215Y2hpcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGRldl9pZDsKKyAgICAgICAgICBzcGluX2xvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBpZiAocGNtX2lycV9pbnZva2VkKGNoaXApKSB7CisgICAgICAgICAgICAgICAgICAvKiBjYWxsIHVwZGF0ZXIsIHVubG9jayBiZWZvcmUgaXQgKi8KKyAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICAgICAgICAgIHNuZF9wY21fcGVyaW9kX2VsYXBzZWQoY2hpcC0+c3Vic3RyZWFtKTsKKyAgICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+bG9jayk7CisgICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IGlmIG5lY2Vzc2FyeSAqLworICAgICAgICAgIH0KKyAgICAgICAgICAuLi4uCisgICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlci10aW1lciI+CisgICAgICAgIDx0aXRsZT5IaWdoIGZyZXF1ZW5jeSB0aW1lciBpbnRlcnJ1cHRzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisJVGhpcyBoYXBwZW5zZSB3aGVuIHRoZSBoYXJkd2FyZSBkb2Vzbid0IGdlbmVyYXRlIGludGVycnVwdHMKKyAgICAgICAgYXQgdGhlIHBlcmlvZCBib3VuZGFyeSBidXQgaXNzdWVzIHRpbWVyIGludGVycnVwdHMgYXQgYSBmaXhlZAorICAgICAgICB0aW1lciByYXRlIChlLmcuIGVzMTk2OCBvciB5bWZwY2kgZHJpdmVycykuIAorICAgICAgICBJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIGNoZWNrIHRoZSBjdXJyZW50IGhhcmR3YXJlCisgICAgICAgIHBvc2l0aW9uIGFuZCBhY2N1bXVsYXRlIHRoZSBwcm9jZXNzZWQgc2FtcGxlIGxlbmd0aCBhdCBlYWNoCisgICAgICAgIGludGVycnVwdC4gIFdoZW4gdGhlIGFjY3VtdWxhdGVkIHNpemUgZXhjZWVkcyB0aGUgcGVyaW9kCisgICAgICAgIHNpemUsIGNhbGwgCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiBhbmQgcmVzZXQgdGhlCisgICAgICAgIGFjY3VtdWxhdG9yLiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIFR5cGljYWwgY29kZSB3b3VsZCBiZSBsaWtlIHRoZSBmb2xsb3dpbmcuCisKKyAgICAgICAgICA8ZXhhbXBsZT4KKwkgICAgPHRpdGxlPkludGVycnVwdCBIYW5kbGVyIENhc2UgIzI8L3RpdGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfbXljaGlwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gZGV2X2lkOworICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+bG9jayk7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGlmIChwY21faXJxX2ludm9rZWQoY2hpcCkpIHsKKyAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsYXN0X3B0ciwgc2l6ZTsKKyAgICAgICAgICAgICAgICAgIC8qIGdldCB0aGUgY3VycmVudCBoYXJkd2FyZSBwb2ludGVyIChpbiBmcmFtZXMpICovCisgICAgICAgICAgICAgICAgICBsYXN0X3B0ciA9IGdldF9od19wdHIoY2hpcCk7CisgICAgICAgICAgICAgICAgICAvKiBjYWxjdWxhdGUgdGhlIHByb2Nlc3NlZCBmcmFtZXMgc2luY2UgdGhlCisgICAgICAgICAgICAgICAgICAgKiBsYXN0IHVwZGF0ZQorICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICBpZiAobGFzdF9wdHIgPCBjaGlwLT5sYXN0X3B0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplICsgbGFzdF9wdHIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gY2hpcC0+bGFzdF9wdHI7IAorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gbGFzdF9wdHIgLSBjaGlwLT5sYXN0X3B0cjsKKyAgICAgICAgICAgICAgICAgIC8qIHJlbWVtYmVyIHRoZSBsYXN0IHVwZGF0ZWQgcG9pbnQgKi8KKyAgICAgICAgICAgICAgICAgIGNoaXAtPmxhc3RfcHRyID0gbGFzdF9wdHI7CisgICAgICAgICAgICAgICAgICAvKiBhY2N1bXVsYXRlIHRoZSBzaXplICovCisgICAgICAgICAgICAgICAgICBjaGlwLT5zaXplICs9IHNpemU7CisgICAgICAgICAgICAgICAgICAvKiBvdmVyIHRoZSBwZXJpb2QgYm91bmRhcnk/ICovCisgICAgICAgICAgICAgICAgICBpZiAoY2hpcC0+c2l6ZSA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZXNldCB0aGUgYWNjdW11bGF0b3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpcC0+c2l6ZSAlPSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FsbCB1cGRhdGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2soJmNoaXAtPmxvY2spOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgLyogYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCBpZiBuZWNlc3NhcnkgKi8KKyAgICAgICAgICB9CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKKyAgICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2V4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXItYm90aCI+CisgICAgICAgIDx0aXRsZT5PbiBjYWxsaW5nIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPjwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIEluIGJvdGggY2FzZXMsIGV2ZW4gaWYgbW9yZSB0aGFuIG9uZSBwZXJpb2QgYXJlIGVsYXBzZWQsIHlvdQorICAgICAgICBkb24ndCBoYXZlIHRvIGNhbGwKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IG1hbnkgdGltZXMuIENhbGwKKyAgICAgICAgb25seSBvbmNlLiBBbmQgdGhlIHBjbSBsYXllciB3aWxsIGNoZWNrIHRoZSBjdXJyZW50IGhhcmR3YXJlCisgICAgICAgIHBvaW50ZXIgYW5kIHVwZGF0ZSB0byB0aGUgbGF0ZXN0IHN0YXR1cy4gCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1hdG9taWNpdHkiPgorICAgICAgPHRpdGxlPkF0b21pY2l0eTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgIE9uZSBvZiB0aGUgbW9zdCBpbXBvcnRhbnQgKGFuZCB0aHVzIGRpZmZpY3VsdCB0byBkZWJ1ZykgcHJvYmxlbXMKKyAgICAgIGluIGtlcm5lbCBwcm9ncmFtbWluZyBhcmUgcmFjZSBjb25kaXRpb25zLgorICAgICAgSW4gdGhlIExpbnV4IGtlcm5lbCwgdGhleSBhcmUgdXN1YWxseSBhdm9pZGVkIHZpYSBzcGluLWxvY2tzLCBtdXRleGVzCisgICAgICBvciBzZW1hcGhvcmVzLiAgSW4gZ2VuZXJhbCwgaWYgYSByYWNlIGNvbmRpdGlvbiBjYW4gaGFwcGVuCisgICAgICBpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgaXQgaGFzIHRvIGJlIG1hbmFnZWQgYXRvbWljYWxseSwgYW5kIHlvdQorICAgICAgaGF2ZSB0byB1c2UgYSBzcGlubG9jayB0byBwcm90ZWN0IHRoZSBjcml0aWNhbCBzZXNzaW9uLiBJZiB0aGUKKyAgICAgIGNyaXRpY2FsIHNlY3Rpb24gaXMgbm90IGluIGludGVycnVwdCBoYW5kbGVyIGNvZGUgYW5kCisgICAgICBpZiB0YWtpbmcgYSByZWxhdGl2ZWx5IGxvbmcgdGltZSB0byBleGVjdXRlIGlzIGFjY2VwdGFibGUsIHlvdQorICAgICAgc2hvdWxkIHVzZSBtdXRleGVzIG9yIHNlbWFwaG9yZXMgaW5zdGVhZC4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBcyBhbHJlYWR5IHNlZW4sIHNvbWUgcGNtIGNhbGxiYWNrcyBhcmUgYXRvbWljIGFuZCBzb21lIGFyZQorICAgICAgbm90LiAgRm9yIGV4YW1wbGUsIHRoZSA8cGFyYW1ldGVyPmh3X3BhcmFtczwvcGFyYW1ldGVyPiBjYWxsYmFjayBpcworICAgICAgbm9uLWF0b21pYywgd2hpbGUgPHBhcmFtZXRlcj50cmlnZ2VyPC9wYXJhbWV0ZXI+IGNhbGxiYWNrIGlzCisgICAgICBhdG9taWMuICBUaGlzIG1lYW5zLCB0aGUgbGF0dGVyIGlzIGNhbGxlZCBhbHJlYWR5IGluIGEgc3BpbmxvY2sKKyAgICAgIGhlbGQgYnkgdGhlIFBDTSBtaWRkbGUgbGF5ZXIuIFBsZWFzZSB0YWtlIHRoaXMgYXRvbWljaXR5IGludG8KKyAgICAgIGFjY291bnQgd2hlbiB5b3UgY2hvb3NlIGEgbG9ja2luZyBzY2hlbWUgaW4gdGhlIGNhbGxiYWNrcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBJbiB0aGUgYXRvbWljIGNhbGxiYWNrcywgeW91IGNhbm5vdCB1c2UgZnVuY3Rpb25zIHdoaWNoIG1heSBjYWxsCisgICAgICA8ZnVuY3Rpb24+c2NoZWR1bGU8L2Z1bmN0aW9uPiBvciBnbyB0bworICAgICAgPGZ1bmN0aW9uPnNsZWVwPC9mdW5jdGlvbj4uICBTZW1hcGhvcmVzIGFuZCBtdXRleGVzIGNhbiBzbGVlcCwKKyAgICAgIGFuZCBoZW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGluc2lkZSB0aGUgYXRvbWljIGNhbGxiYWNrcworICAgICAgKGUuZy4gPHBhcmFtZXRlcj50cmlnZ2VyPC9wYXJhbWV0ZXI+IGNhbGxiYWNrKS4KKyAgICAgIFRvIGltcGxlbWVudCBzb21lIGRlbGF5IGluIHN1Y2ggYSBjYWxsYmFjaywgcGxlYXNlIHVzZQorICAgICAgPGZ1bmN0aW9uPnVkZWxheSgpPC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPm1kZWxheSgpPC9mdW5jdGlvbj4uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgQWxsIHRocmVlIGF0b21pYyBjYWxsYmFja3MgKHRyaWdnZXIsIHBvaW50ZXIsIGFuZCBhY2spIGFyZQorICAgICAgY2FsbGVkIHdpdGggbG9jYWwgaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAgICAgIDwvcGFyYT4KKworICAgIDwvc2VjdGlvbj4KKyAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1jb25zdHJhaW50cyI+CisgICAgICA8dGl0bGU+Q29uc3RyYWludHM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIElmIHlvdXIgY2hpcCBzdXBwb3J0cyB1bmNvbnZlbnRpb25hbCBzYW1wbGUgcmF0ZXMsIG9yIG9ubHkgdGhlCisgICAgICBsaW1pdGVkIHNhbXBsZXMsIHlvdSBuZWVkIHRvIHNldCBhIGNvbnN0cmFpbnQgZm9yIHRoZQorICAgICAgY29uZGl0aW9uLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBleGFtcGxlLCBpbiBvcmRlciB0byByZXN0cmljdCB0aGUgc2FtcGxlIHJhdGVzIGluIHRoZSBzb21lCisgICAgICAgIHN1cHBvcnRlZCB2YWx1ZXMsIHVzZQorCTxmdW5jdGlvbj5zbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCgpPC9mdW5jdGlvbj4uCisJWW91IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGluIHRoZSBvcGVuIGNhbGxiYWNrLgorCisgICAgICAgIDxleGFtcGxlPgorCSAgPHRpdGxlPkV4YW1wbGUgb2YgSGFyZHdhcmUgQ29uc3RyYWludHM8L3RpdGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdW5zaWduZWQgaW50IHJhdGVzW10gPQorICAgICAgICAgIHs0MDAwLCAxMDAwMCwgMjIwNTAsIDQ0MTAwfTsKKyAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCBjb25zdHJhaW50c19yYXRlcyA9IHsKKyAgICAgICAgICAuY291bnQgPSBBUlJBWV9TSVpFKHJhdGVzKSwKKyAgICAgICAgICAubGlzdCA9IHJhdGVzLAorICAgICAgICAgIC5tYXNrID0gMCwKKyAgfTsKKworICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGNtX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisgIHsKKyAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnN0cmFpbnRzX3JhdGVzKTsKKyAgICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgLi4uLgorICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgY29uc3RyYWludHMuCisgICAgICAgIExvb2sgYXQgPGZpbGVuYW1lPnNvdW5kL3BjbS5oPC9maWxlbmFtZT4gZm9yIGEgY29tcGxldGUgbGlzdC4KKyAgICAgICAgWW91IGNhbiBldmVuIGRlZmluZSB5b3VyIG93biBjb25zdHJhaW50IHJ1bGVzLgorICAgICAgICBGb3IgZXhhbXBsZSwgbGV0J3Mgc3VwcG9zZSBteV9jaGlwIGNhbiBtYW5hZ2UgYSBzdWJzdHJlYW0gb2YgMSBjaGFubmVsCisgICAgICAgIGlmIGFuZCBvbmx5IGlmIHRoZSBmb3JtYXQgaXMgUzE2X0xFLCBvdGhlcndpc2UgaXQgc3VwcG9ydHMgYW55IGZvcm1hdAorICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIDxzdHJ1Y3RuYW1lPnNuZF9wY21faGFyZHdhcmU8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZSAob3IgaW4gYW55CisgICAgICAgIG90aGVyIGNvbnN0cmFpbnRfbGlzdCkuIFlvdSBjYW4gYnVpbGQgYSBydWxlIGxpa2UgdGhpczoKKworICAgICAgICA8ZXhhbXBsZT4KKwkgIDx0aXRsZT5FeGFtcGxlIG9mIEhhcmR3YXJlIENvbnN0cmFpbnRzIGZvciBDaGFubmVsczwvdGl0bGU+CisJICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBod19ydWxlX2Zvcm1hdF9ieV9jaGFubmVscyhzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQorICB7CisgICAgICAgICAgc3RydWN0IHNuZF9pbnRlcnZhbCAqYyA9IGh3X3BhcmFtX2ludGVydmFsKHBhcmFtcywKKyAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworICAgICAgICAgIHN0cnVjdCBzbmRfbWFzayAqZiA9IGh3X3BhcmFtX21hc2socGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUKTsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX21hc2sgZm10OworCisgICAgICAgICAgc25kX21hc2tfYW55KCZmbXQpOyAgICAvKiBJbml0IHRoZSBzdHJ1Y3QgKi8KKyAgICAgICAgICBpZiAoYy0+bWluIDwgMikgeworICAgICAgICAgICAgICAgICAgZm10LmJpdHNbMF0gJj0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEU7CisgICAgICAgICAgICAgICAgICByZXR1cm4gc25kX21hc2tfcmVmaW5lKGYsICZmbXQpOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorIAorICAgICAgPHBhcmE+CisgICAgICAgIFRoZW4geW91IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGFkZCB5b3VyIHJ1bGU6CisKKyAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorCSA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3BjbV9od19ydWxlX2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKKyAgICAgICAgICAgICAgICAgICAgICBod19ydWxlX2NoYW5uZWxzX2J5X2Zvcm1hdCwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCwKKyAgICAgICAgICAgICAgICAgICAgICAtMSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBydWxlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIGFwcGxpY2F0aW9uIHNldHMgdGhlIG51bWJlciBvZgorICAgICAgICBjaGFubmVscy4gQnV0IGFuIGFwcGxpY2F0aW9uIGNhbiBzZXQgdGhlIGZvcm1hdCBiZWZvcmUgdGhlIG51bWJlciBvZgorICAgICAgICBjaGFubmVscy4gVGh1cyB5b3UgYWxzbyBuZWVkIHRvIGRlZmluZSB0aGUgaW52ZXJzZSBydWxlOgorCisgICAgICAgPGV4YW1wbGU+CisJIDx0aXRsZT5FeGFtcGxlIG9mIEhhcmR3YXJlIENvbnN0cmFpbnRzIGZvciBDaGFubmVsczwvdGl0bGU+CisJIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IGh3X3J1bGVfY2hhbm5lbHNfYnlfZm9ybWF0KHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3J1bGUgKnJ1bGUpCisgIHsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX2ludGVydmFsICpjID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTKTsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX21hc2sgKmYgPSBod19wYXJhbV9tYXNrKHBhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCk7CisgICAgICAgICAgc3RydWN0IHNuZF9pbnRlcnZhbCBjaDsKKworICAgICAgICAgIHNuZF9pbnRlcnZhbF9hbnkoJmNoKTsKKyAgICAgICAgICBpZiAoZi0+Yml0c1swXSA9PSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSkgeworICAgICAgICAgICAgICAgICAgY2gubWluID0gY2gubWF4ID0gMTsKKyAgICAgICAgICAgICAgICAgIGNoLmludGVnZXIgPSAxOworICAgICAgICAgICAgICAgICAgcmV0dXJuIHNuZF9pbnRlcnZhbF9yZWZpbmUoYywgJmNoKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAuLi5hbmQgaW4gdGhlIG9wZW4gY2FsbGJhY2s6CisgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKwkgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21faHdfcnVsZV9hZGQoc3Vic3RyZWFtLT5ydW50aW1lLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFULAorICAgICAgICAgICAgICAgICAgICAgIGh3X3J1bGVfZm9ybWF0X2J5X2NoYW5uZWxzLCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMsCisgICAgICAgICAgICAgICAgICAgICAgLTEpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJIHdvbid0IGdpdmUgbW9yZSBkZXRhaWxzIGhlcmUsIHJhdGhlciBJCisgICAgICAgIHdvdWxkIGxpa2UgdG8gc2F5LCA8cXVvdGU+THVrZSwgdXNlIHRoZSBzb3VyY2UuPC9xdW90ZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBDb250cm9sIEludGVyZmFjZSAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9ImNvbnRyb2wtaW50ZXJmYWNlIj4KKyAgICA8dGl0bGU+Q29udHJvbCBJbnRlcmZhY2U8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWdlbmVyYWwiPgorICAgICAgPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBjb250cm9sIGludGVyZmFjZSBpcyB1c2VkIHdpZGVseSBmb3IgbWFueSBzd2l0Y2hlcywKKyAgICAgIHNsaWRlcnMsIGV0Yy4gd2hpY2ggYXJlIGFjY2Vzc2VkIGZyb20gdXNlci1zcGFjZS4gSXRzIG1vc3QKKyAgICAgIGltcG9ydGFudCB1c2UgaXMgdGhlIG1peGVyIGludGVyZmFjZS4gSW4gb3RoZXIgd29yZHMsIHNpbmNlIEFMU0EKKyAgICAgIDAuOS54LCBhbGwgdGhlIG1peGVyIHN0dWZmIGlzIGltcGxlbWVudGVkIG9uIHRoZSBjb250cm9sIGtlcm5lbCBBUEkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBTFNBIGhhcyBhIHdlbGwtZGVmaW5lZCBBQzk3IGNvbnRyb2wgbW9kdWxlLiBJZiB5b3VyIGNoaXAKKyAgICAgIHN1cHBvcnRzIG9ubHkgdGhlIEFDOTcgYW5kIG5vdGhpbmcgZWxzZSwgeW91IGNhbiBza2lwIHRoaXMKKyAgICAgIHNlY3Rpb24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGNvbnRyb2wgQVBJIGlzIGRlZmluZWQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvY29udHJvbC5oJmd0OzwvZmlsZW5hbWU+LgorICAgICAgSW5jbHVkZSB0aGlzIGZpbGUgaWYgeW91IHdhbnQgdG8gYWRkIHlvdXIgb3duIGNvbnRyb2xzLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1kZWZpbml0aW9uIj4KKyAgICAgIDx0aXRsZT5EZWZpbml0aW9uIG9mIENvbnRyb2xzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBUbyBjcmVhdGUgYSBuZXcgY29udHJvbCwgeW91IG5lZWQgdG8gZGVmaW5lIHRoZQorCWZvbGxvd2luZyB0aHJlZQorICAgICAgY2FsbGJhY2tzOiA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+LAorICAgICAgPHN0cnVjdGZpZWxkPmdldDwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPnB1dDwvc3RydWN0ZmllbGQ+LiBUaGVuLCBkZWZpbmUgYQorICAgICAgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9rY29udHJvbF9uZXc8L3N0cnVjdG5hbWU+IHJlY29yZCwgc3VjaCBhczogCisKKyAgICAgICAgPGV4YW1wbGU+CisJICA8dGl0bGU+RGVmaW5pdGlvbiBvZiBhIENvbnRyb2w8L3RpdGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgbXlfY29udHJvbCBfX2RldmluaXRkYXRhID0geworICAgICAgICAgIC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorICAgICAgICAgIC5uYW1lID0gIlBDTSBQbGF5YmFjayBTd2l0Y2giLAorICAgICAgICAgIC5pbmRleCA9IDAsCisgICAgICAgICAgLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCisgICAgICAgICAgLnByaXZhdGVfdmFsdWUgPSAweGZmZmYsCisgICAgICAgICAgLmluZm8gPSBteV9jb250cm9sX2luZm8sCisgICAgICAgICAgLmdldCA9IG15X2NvbnRyb2xfZ2V0LAorICAgICAgICAgIC5wdXQgPSBteV9jb250cm9sX3B1dAorICB9OworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9leGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTW9zdCBsaWtlbHkgdGhlIGNvbnRyb2wgaXMgY3JlYXRlZCB2aWEKKyAgICAgIDxmdW5jdGlvbj5zbmRfY3RsX25ldzEoKTwvZnVuY3Rpb24+LCBhbmQgaW4gc3VjaCBhIGNhc2UsIHlvdSBjYW4KKyAgICAgIGFkZCB0aGUgPHBhcmFtZXRlcj5fX2RldmluaXRkYXRhPC9wYXJhbWV0ZXI+IHByZWZpeCB0byB0aGUKKyAgICAgIGRlZmluaXRpb24gYXMgYWJvdmUuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pZmFjZTwvc3RydWN0ZmllbGQ+IGZpZWxkIHNwZWNpZmllcyB0aGUgY29udHJvbAorICAgICAgdHlwZSwgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0lGQUNFX1hYWDwvY29uc3RhbnQ+LCB3aGljaAorICAgICAgaXMgdXN1YWxseSA8Y29uc3RhbnQ+TUlYRVI8L2NvbnN0YW50Pi4KKyAgICAgIFVzZSA8Y29uc3RhbnQ+Q0FSRDwvY29uc3RhbnQ+IGZvciBnbG9iYWwgY29udHJvbHMgdGhhdCBhcmUgbm90CisgICAgICBsb2dpY2FsbHkgcGFydCBvZiB0aGUgbWl4ZXIuCisgICAgICBJZiB0aGUgY29udHJvbCBpcyBjbG9zZWx5IGFzc29jaWF0ZWQgd2l0aCBzb21lIHNwZWNpZmljIGRldmljZSBvbgorICAgICAgdGhlIHNvdW5kIGNhcmQsIHVzZSA8Y29uc3RhbnQ+SFdERVA8L2NvbnN0YW50PiwKKyAgICAgIDxjb25zdGFudD5QQ008L2NvbnN0YW50PiwgPGNvbnN0YW50PlJBV01JREk8L2NvbnN0YW50PiwKKyAgICAgIDxjb25zdGFudD5USU1FUjwvY29uc3RhbnQ+LCBvciA8Y29uc3RhbnQ+U0VRVUVOQ0VSPC9jb25zdGFudD4sIGFuZAorICAgICAgc3BlY2lmeSB0aGUgZGV2aWNlIG51bWJlciB3aXRoIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPmRldmljZTwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPnN1YmRldmljZTwvc3RydWN0ZmllbGQ+IGZpZWxkcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+IGlzIHRoZSBuYW1lIGlkZW50aWZpZXIKKyAgICAgIHN0cmluZy4gU2luY2UgQUxTQSAwLjkueCwgdGhlIGNvbnRyb2wgbmFtZSBpcyB2ZXJ5IGltcG9ydGFudCwKKyAgICAgIGJlY2F1c2UgaXRzIHJvbGUgaXMgY2xhc3NpZmllZCBmcm9tIGl0cyBuYW1lLiBUaGVyZSBhcmUKKyAgICAgIHByZS1kZWZpbmVkIHN0YW5kYXJkIGNvbnRyb2wgbmFtZXMuIFRoZSBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4KKyAgICAgIHRoZSA8bGluayBsaW5rZW5kPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzIj48Y2l0ZXRpdGxlPgorICAgICAgQ29udHJvbCBOYW1lczwvY2l0ZXRpdGxlPjwvbGluaz4gc3Vic2VjdGlvbi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5kZXg8L3N0cnVjdGZpZWxkPiBmaWVsZCBob2xkcyB0aGUgaW5kZXggbnVtYmVyCisgICAgICBvZiB0aGlzIGNvbnRyb2wuIElmIHRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCBjb250cm9scyB3aXRoCisgICAgICB0aGUgc2FtZSBuYW1lLCB0aGV5IGNhbiBiZSBkaXN0aW5ndWlzaGVkIGJ5IHRoZSBpbmRleAorICAgICAgbnVtYmVyLiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gCisgICAgICBzZXZlcmFsIGNvZGVjcyBleGlzdCBvbiB0aGUgY2FyZC4gSWYgdGhlIGluZGV4IGlzIHplcm8sIHlvdSBjYW4KKyAgICAgIG9taXQgdGhlIGRlZmluaXRpb24gYWJvdmUuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5hY2Nlc3M8L3N0cnVjdGZpZWxkPiBmaWVsZCBjb250YWlucyB0aGUgYWNjZXNzCisgICAgICB0eXBlIG9mIHRoaXMgY29udHJvbC4gR2l2ZSB0aGUgY29tYmluYXRpb24gb2YgYml0IG1hc2tzLAorICAgICAgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0FDQ0VTU19YWFg8L2NvbnN0YW50PiwgdGhlcmUuCisgICAgICBUaGUgZGV0YWlscyB3aWxsIGJlIGV4cGxhaW5lZCBpbgorICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9ImNvbnRyb2wtaW50ZXJmYWNlLWFjY2Vzcy1mbGFncyI+PGNpdGV0aXRsZT4KKyAgICAgIEFjY2VzcyBGbGFnczwvY2l0ZXRpdGxlPjwvbGluaz4gc3Vic2VjdGlvbi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cHJpdmF0ZV92YWx1ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zCisgICAgICBhbiBhcmJpdHJhcnkgbG9uZyBpbnRlZ2VyIHZhbHVlIGZvciB0aGlzIHJlY29yZC4gV2hlbiB1c2luZworICAgICAgdGhlIGdlbmVyaWMgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPiwKKyAgICAgIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5wdXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MsIHlvdSBjYW4gcGFzcyBhIHZhbHVlIAorICAgICAgdGhyb3VnaCB0aGlzIGZpZWxkLiBJZiBzZXZlcmFsIHNtYWxsIG51bWJlcnMgYXJlIG5lY2Vzc2FyeSwgeW91IGNhbgorICAgICAgY29tYmluZSB0aGVtIGluIGJpdHdpc2UuIE9yLCBpdCdzIHBvc3NpYmxlIHRvIGdpdmUgYSBwb2ludGVyCisgICAgICAoY2FzdGVkIHRvIHVuc2lnbmVkIGxvbmcpIG9mIHNvbWUgcmVjb3JkIHRvIHRoaXMgZmllbGQsIHRvby4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD50bHY8L3N0cnVjdGZpZWxkPiBmaWVsZCBjYW4gYmUgdXNlZCB0byBwcm92aWRlCisgICAgICBtZXRhZGF0YSBhYm91dCB0aGUgY29udHJvbDsgc2VlIHRoZQorICAgICAgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtdGx2Ij4KKyAgICAgIDxjaXRldGl0bGU+TWV0YWRhdGE8L2NpdGV0aXRsZT48L2xpbms+IHN1YnNlY3Rpb24uCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgb3RoZXIgdGhyZWUgYXJlCisJPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzIj48Y2l0ZXRpdGxlPgorCWNhbGxiYWNrIGZ1bmN0aW9uczwvY2l0ZXRpdGxlPjwvbGluaz4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMiPgorICAgICAgPHRpdGxlPkNvbnRyb2wgTmFtZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBzb21lIHN0YW5kYXJkcyB0byBkZWZpbmUgdGhlIGNvbnRyb2wgbmFtZXMuIEEKKyAgICAgIGNvbnRyb2wgaXMgdXN1YWxseSBkZWZpbmVkIGZyb20gdGhlIHRocmVlIHBhcnRzIGFzCisgICAgICA8cXVvdGU+U09VUkNFIERJUkVDVElPTiBGVU5DVElPTjwvcXVvdGU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCwgPGNvbnN0YW50PlNPVVJDRTwvY29uc3RhbnQ+LCBzcGVjaWZpZXMgdGhlIHNvdXJjZQorICAgICAgb2YgdGhlIGNvbnRyb2wsIGFuZCBpcyBhIHN0cmluZyBzdWNoIGFzIDxxdW90ZT5NYXN0ZXI8L3F1b3RlPiwKKyAgICAgIDxxdW90ZT5QQ008L3F1b3RlPiwgPHF1b3RlPkNEPC9xdW90ZT4gYW5kCisgICAgICA8cXVvdGU+TGluZTwvcXVvdGU+LiBUaGVyZSBhcmUgbWFueSBwcmUtZGVmaW5lZCBzb3VyY2VzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBzZWNvbmQsIDxjb25zdGFudD5ESVJFQ1RJT048L2NvbnN0YW50PiwgaXMgb25lIG9mIHRoZQorICAgICAgZm9sbG93aW5nIHN0cmluZ3MgYWNjb3JkaW5nIHRvIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGNvbnRyb2w6CisgICAgICA8cXVvdGU+UGxheWJhY2s8L3F1b3RlPiwgPHF1b3RlPkNhcHR1cmU8L3F1b3RlPiwgPHF1b3RlPkJ5cGFzcworICAgICAgUGxheWJhY2s8L3F1b3RlPiBhbmQgPHF1b3RlPkJ5cGFzcyBDYXB0dXJlPC9xdW90ZT4uIE9yLCBpdCBjYW4KKyAgICAgIGJlIG9taXR0ZWQsIG1lYW5pbmcgYm90aCBwbGF5YmFjayBhbmQgY2FwdHVyZSBkaXJlY3Rpb25zLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSB0aGlyZCwgPGNvbnN0YW50PkZVTkNUSU9OPC9jb25zdGFudD4sIGlzIG9uZSBvZiB0aGUKKyAgICAgIGZvbGxvd2luZyBzdHJpbmdzIGFjY29yZGluZyB0byB0aGUgZnVuY3Rpb24gb2YgdGhlIGNvbnRyb2w6CisgICAgICA8cXVvdGU+U3dpdGNoPC9xdW90ZT4sIDxxdW90ZT5Wb2x1bWU8L3F1b3RlPiBhbmQKKyAgICAgIDxxdW90ZT5Sb3V0ZTwvcXVvdGU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBleGFtcGxlIG9mIGNvbnRyb2wgbmFtZXMgYXJlLCB0aHVzLCA8cXVvdGU+TWFzdGVyIENhcHR1cmUKKyAgICAgIFN3aXRjaDwvcXVvdGU+IG9yIDxxdW90ZT5QQ00gUGxheWJhY2sgVm9sdW1lPC9xdW90ZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIHNvbWUgZXhjZXB0aW9uczoKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtZ2xvYmFsIj4KKyAgICAgICAgPHRpdGxlPkdsb2JhbCBjYXB0dXJlIGFuZCBwbGF5YmFjazwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIDxxdW90ZT5DYXB0dXJlIFNvdXJjZTwvcXVvdGU+LCA8cXVvdGU+Q2FwdHVyZSBTd2l0Y2g8L3F1b3RlPgorICAgICAgICBhbmQgPHF1b3RlPkNhcHR1cmUgVm9sdW1lPC9xdW90ZT4gYXJlIHVzZWQgZm9yIHRoZSBnbG9iYWwKKyAgICAgICAgY2FwdHVyZSAoaW5wdXQpIHNvdXJjZSwgc3dpdGNoIGFuZCB2b2x1bWUuIFNpbWlsYXJseSwKKyAgICAgICAgPHF1b3RlPlBsYXliYWNrIFN3aXRjaDwvcXVvdGU+IGFuZCA8cXVvdGU+UGxheWJhY2sKKyAgICAgICAgVm9sdW1lPC9xdW90ZT4gYXJlIHVzZWQgZm9yIHRoZSBnbG9iYWwgb3V0cHV0IGdhaW4gc3dpdGNoIGFuZAorICAgICAgICB2b2x1bWUuIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLXRvbmUiPgorICAgICAgICA8dGl0bGU+VG9uZS1jb250cm9sczwvdGl0bGU+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgIHRvbmUtY29udHJvbCBzd2l0Y2ggYW5kIHZvbHVtZXMgYXJlIHNwZWNpZmllZCBsaWtlCisgICAgICAgIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBYWFg8L3F1b3RlPiwgZS5nLiA8cXVvdGU+VG9uZSBDb250cm9sIC0KKyAgICAgICAgU3dpdGNoPC9xdW90ZT4sIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBCYXNzPC9xdW90ZT4sCisgICAgICAgIDxxdW90ZT5Ub25lIENvbnRyb2wgLSBDZW50ZXI8L3F1b3RlPi4gIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLTNkIj4KKyAgICAgICAgPHRpdGxlPjNEIGNvbnRyb2xzPC90aXRsZT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgM0QtY29udHJvbCBzd2l0Y2hlcyBhbmQgdm9sdW1lcyBhcmUgc3BlY2lmaWVkIGxpa2UgPHF1b3RlPjNECisgICAgICAgIENvbnRyb2wgLSBYWFg8L3F1b3RlPiwgZS5nLiA8cXVvdGU+M0QgQ29udHJvbCAtCisgICAgICAgIFN3aXRjaDwvcXVvdGU+LCA8cXVvdGU+M0QgQ29udHJvbCAtIENlbnRlcjwvcXVvdGU+LCA8cXVvdGU+M0QKKyAgICAgICAgQ29udHJvbCAtIFNwYWNlPC9xdW90ZT4uIAorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb250cm9sLW5hbWVzLW1pYyI+CisgICAgICAgIDx0aXRsZT5NaWMgYm9vc3Q8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBNaWMtYm9vc3Qgc3dpdGNoIGlzIHNldCBhcyA8cXVvdGU+TWljIEJvb3N0PC9xdW90ZT4gb3IKKyAgICAgICAgPHF1b3RlPk1pYyBCb29zdCAoNmRCKTwvcXVvdGU+LiAKKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICAgIE1vcmUgcHJlY2lzZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4KKyAgICAgICAgPGZpbGVuYW1lPkRvY3VtZW50YXRpb24vc291bmQvYWxzYS9Db250cm9sTmFtZXMudHh0PC9maWxlbmFtZT4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtYWNjZXNzLWZsYWdzIj4KKyAgICAgIDx0aXRsZT5BY2Nlc3MgRmxhZ3M8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBhY2Nlc3MgZmxhZyBpcyB0aGUgYml0bWFzayB3aGljaCBzcGVjaWZpZXMgdGhlIGFjY2VzcyB0eXBlCisgICAgICBvZiB0aGUgZ2l2ZW4gY29udHJvbC4gIFRoZSBkZWZhdWx0IGFjY2VzcyB0eXBlIGlzCisgICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURTwvY29uc3RhbnQ+LCAKKyAgICAgIHdoaWNoIG1lYW5zIGJvdGggcmVhZCBhbmQgd3JpdGUgYXJlIGFsbG93ZWQgdG8gdGhpcyBjb250cm9sLgorICAgICAgV2hlbiB0aGUgYWNjZXNzIGZsYWcgaXMgb21pdHRlZCAoaS5lLiA9IDApLCBpdCBpcworICAgICAgY29uc2lkZXJlZCBhcyA8Y29uc3RhbnQ+UkVBRFdSSVRFPC9jb25zdGFudD4gYWNjZXNzIGFzIGRlZmF1bHQuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFdoZW4gdGhlIGNvbnRyb2wgaXMgcmVhZC1vbmx5LCBwYXNzCisgICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQ8L2NvbnN0YW50PiBpbnN0ZWFkLgorICAgICAgSW4gdGhpcyBjYXNlLCB5b3UgZG9uJ3QgaGF2ZSB0byBkZWZpbmUKKyAgICAgIHRoZSA8c3RydWN0ZmllbGQ+cHV0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2suCisgICAgICBTaW1pbGFybHksIHdoZW4gdGhlIGNvbnRyb2wgaXMgd3JpdGUtb25seSAoYWx0aG91Z2ggaXQncyBhIHJhcmUKKyAgICAgIGNhc2UpLCB5b3UgY2FuIHVzZSB0aGUgPGNvbnN0YW50PldSSVRFPC9jb25zdGFudD4gZmxhZyBpbnN0ZWFkLCBhbmQKKyAgICAgIHlvdSBkb24ndCBuZWVkIHRoZSA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2suCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgSWYgdGhlIGNvbnRyb2wgdmFsdWUgY2hhbmdlcyBmcmVxdWVudGx5IChlLmcuIHRoZSBWVSBtZXRlciksCisgICAgICA8Y29uc3RhbnQ+Vk9MQVRJTEU8L2NvbnN0YW50PiBmbGFnIHNob3VsZCBiZSBnaXZlbi4gIFRoaXMgbWVhbnMKKyAgICAgIHRoYXQgdGhlIGNvbnRyb2wgbWF5IGJlIGNoYW5nZWQgd2l0aG91dAorICAgICAgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtY2hhbmdlLW5vdGlmaWNhdGlvbiI+PGNpdGV0aXRsZT4KKyAgICAgIG5vdGlmaWNhdGlvbjwvY2l0ZXRpdGxlPjwvbGluaz4uIEFwcGxpY2F0aW9ucyBzaG91bGQgcG9sbCBzdWNoCisgICAgICBhIGNvbnRyb2wgY29uc3RhbnRseS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBXaGVuIHRoZSBjb250cm9sIGlzIGluYWN0aXZlLCBzZXQKKyAgICAgIHRoZSA8Y29uc3RhbnQ+SU5BQ1RJVkU8L2NvbnN0YW50PiBmbGFnLCB0b28uCisgICAgICBUaGVyZSBhcmUgPGNvbnN0YW50PkxPQ0s8L2NvbnN0YW50PiBhbmQKKyAgICAgIDxjb25zdGFudD5PV05FUjwvY29uc3RhbnQ+IGZsYWdzIHRvIGNoYW5nZSB0aGUgd3JpdGUKKyAgICAgIHBlcm1pc3Npb25zLgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcyI+CisgICAgICA8dGl0bGU+Q2FsbGJhY2tzPC90aXRsZT4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcy1pbmZvIj4KKyAgICAgICAgPHRpdGxlPmluZm8gY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB1c2VkIHRvIGdldAorICAgICAgICBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB0aGlzIGNvbnRyb2wuIFRoaXMgbXVzdCBzdG9yZSB0aGUKKyAgICAgICAgdmFsdWVzIG9mIHRoZSBnaXZlbiBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX2N0bF9lbGVtX2luZm88L3N0cnVjdG5hbWU+CisgICAgICAgIG9iamVjdC4gRm9yIGV4YW1wbGUsIGZvciBhIGJvb2xlYW4gY29udHJvbCB3aXRoIGEgc2luZ2xlCisgICAgICAgIGVsZW1lbnQ6IAorCisgICAgICAgICAgPGV4YW1wbGU+CisJICAgIDx0aXRsZT5FeGFtcGxlIG9mIGluZm8gY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX215Y3RsX21vbm9faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKKyAgeworICAgICAgICAgIHVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9CT09MRUFOOworICAgICAgICAgIHVpbmZvLT5jb3VudCA9IDE7CisgICAgICAgICAgdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKyAgICAgICAgICB1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxOworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9leGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD50eXBlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlCisgICAgICAgIG9mIHRoZSBjb250cm9sLiBUaGVyZSBhcmUgPGNvbnN0YW50PkJPT0xFQU48L2NvbnN0YW50PiwKKyAgICAgICAgPGNvbnN0YW50PklOVEVHRVI8L2NvbnN0YW50PiwgPGNvbnN0YW50PkVOVU1FUkFURUQ8L2NvbnN0YW50PiwKKyAgICAgICAgPGNvbnN0YW50PkJZVEVTPC9jb25zdGFudD4sIDxjb25zdGFudD5JRUM5NTg8L2NvbnN0YW50PiBhbmQKKyAgICAgICAgPGNvbnN0YW50PklOVEVHRVI2NDwvY29uc3RhbnQ+LiBUaGUKKyAgICAgICAgPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gZmllbGQgc3BlY2lmaWVzIHRoZSAKKyAgICAgICAgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMgY29udHJvbC4gRm9yIGV4YW1wbGUsIGEgc3RlcmVvCisgICAgICAgIHZvbHVtZSB3b3VsZCBoYXZlIGNvdW50ID0gMi4gVGhlCisgICAgICAgIDxzdHJ1Y3RmaWVsZD52YWx1ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIGEgdW5pb24sIGFuZCAKKyAgICAgICAgdGhlIHZhbHVlcyBzdG9yZWQgYXJlIGRlcGVuZGluZyBvbiB0aGUgdHlwZS4gVGhlIGJvb2xlYW4gYW5kCisgICAgICAgIGludGVnZXIgdHlwZXMgYXJlIGlkZW50aWNhbC4gCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgZW51bWVyYXRlZCB0eXBlIGlzIGEgYml0IGRpZmZlcmVudCBmcm9tIG90aGVycy4gIFlvdSdsbAorICAgICAgICAgIG5lZWQgdG8gc2V0IHRoZSBzdHJpbmcgZm9yIHRoZSBjdXJyZW50bHkgZ2l2ZW4gaXRlbSBpbmRleC4gCisKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX215Y3RsX2VudW1faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKKyAgeworICAgICAgICAgIHN0YXRpYyBjaGFyICp0ZXh0c1s0XSA9IHsKKyAgICAgICAgICAgICAgICAgICJGaXJzdCIsICJTZWNvbmQiLCAiVGhpcmQiLCAiRm91cnRoIgorICAgICAgICAgIH07CisgICAgICAgICAgdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQ7CisgICAgICAgICAgdWluZm8tPmNvdW50ID0gMTsKKyAgICAgICAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtcyA9IDQ7CisgICAgICAgICAgaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPiAzKQorICAgICAgICAgICAgICAgICAgdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDM7CisgICAgICAgICAgc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisgICAgICAgICAgICAgICAgIHRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisJICBTb21lIGNvbW1vbiBpbmZvIGNhbGxiYWNrcyBhcmUgYXZhaWxhYmxlIGZvciB5b3VyIGNvbnZlbmllbmNlOgorCTxmdW5jdGlvbj5zbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvKCk8L2Z1bmN0aW9uPiBhbmQKKwk8ZnVuY3Rpb24+c25kX2N0bF9ib29sZWFuX3N0ZXJlb19pbmZvKCk8L2Z1bmN0aW9uPi4KKwlPYnZpb3VzbHksIHRoZSBmb3JtZXIgaXMgYW4gaW5mbyBjYWxsYmFjayBmb3IgYSBtb25vIGNoYW5uZWwKKwlib29sZWFuIGl0ZW0sIGp1c3QgbGlrZSA8ZnVuY3Rpb24+c25kX215Y3RsX21vbm9faW5mbzwvZnVuY3Rpb24+CisJYWJvdmUsIGFuZCB0aGUgbGF0dGVyIGlzIGZvciBhIHN0ZXJlbyBjaGFubmVsIGJvb2xlYW4gaXRlbS4KKwk8L3BhcmE+CisKKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcy1nZXQiPgorICAgICAgICA8dGl0bGU+Z2V0IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gcmVhZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUKKyAgICAgICAgY29udHJvbCBhbmQgdG8gcmV0dXJuIHRvIHVzZXItc3BhY2UuIAorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgICAgRm9yIGV4YW1wbGUsCisKKyAgICAgICAgICA8ZXhhbXBsZT4KKwkgICAgPHRpdGxlPkV4YW1wbGUgb2YgZ2V0IGNhbGxiYWNrPC90aXRsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF9teWN0bF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisgICAgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBnZXRfc29tZV92YWx1ZShjaGlwKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorCVRoZSA8c3RydWN0ZmllbGQ+dmFsdWU8L3N0cnVjdGZpZWxkPiBmaWVsZCBkZXBlbmRzIG9uIAorICAgICAgICB0aGUgdHlwZSBvZiBjb250cm9sIGFzIHdlbGwgYXMgb24gdGhlIGluZm8gY2FsbGJhY2suICBGb3IgZXhhbXBsZSwKKwl0aGUgc2IgZHJpdmVyIHVzZXMgdGhpcyBmaWVsZCB0byBzdG9yZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0LAorICAgICAgICB0aGUgYml0LXNoaWZ0IGFuZCB0aGUgYml0LW1hc2suICBUaGUKKyAgICAgICAgPHN0cnVjdGZpZWxkPnByaXZhdGVfdmFsdWU8L3N0cnVjdGZpZWxkPiBmaWVsZCBpcyBzZXQgYXMgZm9sbG93czoKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIC5wcml2YXRlX3ZhbHVlID0gcmVnIHwgKHNoaWZ0IDw8IDE2KSB8IChtYXNrIDw8IDI0KQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCWFuZCBpcyByZXRyaWV2ZWQgaW4gY2FsbGJhY2tzIGxpa2UKKyAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3NibWl4ZXJfZ2V0X3NpbmdsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorICB7CisgICAgICAgICAgaW50IHJlZyA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZjsKKyAgICAgICAgICBpbnQgc2hpZnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTYpICYgMHhmZjsKKyAgICAgICAgICBpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAyNCkgJiAweGZmOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKworCTxwYXJhPgorCUluIHRoZSA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2ssCisJeW91IGhhdmUgdG8gZmlsbCBhbGwgdGhlIGVsZW1lbnRzIGlmIHRoZQorICAgICAgICBjb250cm9sIGhhcyBtb3JlIHRoYW4gb25lIGVsZW1lbnRzLAorICAgICAgICBpLmUuIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+ICZndDsgMS4KKwlJbiB0aGUgZXhhbXBsZSBhYm92ZSwgd2UgZmlsbGVkIG9ubHkgb25lIGVsZW1lbnQKKyAgICAgICAgKDxzdHJ1Y3RmaWVsZD52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdPC9zdHJ1Y3RmaWVsZD4pIHNpbmNlIGl0J3MKKyAgICAgICAgYXNzdW1lZCBhcyA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiA9IDEuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNhbGxiYWNrcy1wdXQiPgorICAgICAgICA8dGl0bGU+cHV0IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIHVzZWQgdG8gd3JpdGUgYSB2YWx1ZSBmcm9tIHVzZXItc3BhY2UuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgICBGb3IgZXhhbXBsZSwKKworICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+RXhhbXBsZSBvZiBwdXQgY2FsbGJhY2s8L3RpdGxlPgorICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX215Y3RsX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKyAgICAgICAgICBpbnQgY2hhbmdlZCA9IDA7CisgICAgICAgICAgaWYgKGNoaXAtPmN1cnJlbnRfdmFsdWUgIT0KKyAgICAgICAgICAgICAgIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKSB7CisgICAgICAgICAgICAgICAgICBjaGFuZ2VfY3VycmVudF92YWx1ZShjaGlwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBjaGFuZ2VkOworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9leGFtcGxlPgorCisgICAgICAgICAgQXMgc2VlbiBhYm92ZSwgeW91IGhhdmUgdG8gcmV0dXJuIDEgaWYgdGhlIHZhbHVlIGlzCisgICAgICAgIGNoYW5nZWQuIElmIHRoZSB2YWx1ZSBpcyBub3QgY2hhbmdlZCwgcmV0dXJuIDAgaW5zdGVhZC4gCisJSWYgYW55IGZhdGFsIGVycm9yIGhhcHBlbnMsIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgYXMKKyAgICAgICAgdXN1YWwuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKwlBcyBpbiB0aGUgPHN0cnVjdGZpZWxkPmdldDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLAorCXdoZW4gdGhlIGNvbnRyb2wgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudHMsCisJYWxsIGVsZW1lbnRzIG11c3QgYmUgZXZhbHVhdGVkIGluIHRoaXMgY2FsbGJhY2ssIHRvby4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLWFsbCI+CisgICAgICAgIDx0aXRsZT5DYWxsYmFja3MgYXJlIG5vdCBhdG9taWM8L3RpdGxlPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgICBBbGwgdGhlc2UgdGhyZWUgY2FsbGJhY2tzIGFyZSBiYXNpY2FsbHkgbm90IGF0b21pYy4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gZXZlcnl0aGluZyBpcyByZWFkeSwgZmluYWxseSB3ZSBjYW4gY3JlYXRlIGEgbmV3CisgICAgICBjb250cm9sLiBUbyBjcmVhdGUgYSBjb250cm9sLCB0aGVyZSBhcmUgdHdvIGZ1bmN0aW9ucyB0byBiZQorICAgICAgY2FsbGVkLCA8ZnVuY3Rpb24+c25kX2N0bF9uZXcxKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgIDxmdW5jdGlvbj5zbmRfY3RsX2FkZCgpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gdGhlIHNpbXBsZXN0IHdheSwgeW91IGNhbiBkbyBsaWtlIHRoaXM6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZteV9jb250cm9sLCBjaGlwKSk7CisgIGlmIChlcnIgPCAwKQorICAgICAgICAgIHJldHVybiBlcnI7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICB3aGVyZSA8cGFyYW1ldGVyPm15X2NvbnRyb2w8L3BhcmFtZXRlcj4gaXMgdGhlCisgICAgICBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX2tjb250cm9sX25ldzwvc3RydWN0bmFtZT4gb2JqZWN0IGRlZmluZWQgYWJvdmUsIGFuZCBjaGlwCisgICAgICBpcyB0aGUgb2JqZWN0IHBvaW50ZXIgdG8gYmUgcGFzc2VkIHRvCisgICAgICBrY29udHJvbC0mZ3Q7cHJpdmF0ZV9kYXRhIAorICAgICAgd2hpY2ggY2FuIGJlIHJlZmVycmVkIHRvIGluIGNhbGxiYWNrcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICA8ZnVuY3Rpb24+c25kX2N0bF9uZXcxKCk8L2Z1bmN0aW9uPiBhbGxvY2F0ZXMgYSBuZXcKKyAgICAgIDxzdHJ1Y3RuYW1lPnNuZF9rY29udHJvbDwvc3RydWN0bmFtZT4gaW5zdGFuY2UgKHRoYXQncyB3aHkgdGhlIGRlZmluaXRpb24KKyAgICAgIG9mIDxwYXJhbWV0ZXI+bXlfY29udHJvbDwvcGFyYW1ldGVyPiBjYW4gYmUgd2l0aAorICAgICAgdGhlIDxwYXJhbWV0ZXI+X19kZXZpbml0ZGF0YTwvcGFyYW1ldGVyPiAKKyAgICAgIHByZWZpeCksIGFuZCA8ZnVuY3Rpb24+c25kX2N0bF9hZGQ8L2Z1bmN0aW9uPiBhc3NpZ25zIHRoZSBnaXZlbgorICAgICAgY29udHJvbCBjb21wb25lbnQgdG8gdGhlIGNhcmQuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jaGFuZ2Utbm90aWZpY2F0aW9uIj4KKyAgICAgIDx0aXRsZT5DaGFuZ2UgTm90aWZpY2F0aW9uPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3UgbmVlZCB0byBjaGFuZ2UgYW5kIHVwZGF0ZSBhIGNvbnRyb2wgaW4gdGhlIGludGVycnVwdAorICAgICAgcm91dGluZSwgeW91IGNhbiBjYWxsIDxmdW5jdGlvbj5zbmRfY3RsX25vdGlmeSgpPC9mdW5jdGlvbj4uIEZvcgorICAgICAgZXhhbXBsZSwgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX2N0bF9ub3RpZnkoY2FyZCwgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsIGlkX3BvaW50ZXIpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgY2FyZCBwb2ludGVyLCB0aGUgZXZlbnQtbWFzaywgYW5kIHRoZQorICAgICAgY29udHJvbCBpZCBwb2ludGVyIGZvciB0aGUgbm90aWZpY2F0aW9uLiBUaGUgZXZlbnQtbWFzaworICAgICAgc3BlY2lmaWVzIHRoZSB0eXBlcyBvZiBub3RpZmljYXRpb24sIGZvciBleGFtcGxlLCBpbiB0aGUgYWJvdmUKKyAgICAgIGV4YW1wbGUsIHRoZSBjaGFuZ2Ugb2YgY29udHJvbCB2YWx1ZXMgaXMgbm90aWZpZWQuCisgICAgICBUaGUgaWQgcG9pbnRlciBpcyB0aGUgcG9pbnRlciBvZiBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX2N0bF9lbGVtX2lkPC9zdHJ1Y3RuYW1lPgorICAgICAgdG8gYmUgbm90aWZpZWQuCisgICAgICBZb3UgY2FuIGZpbmQgc29tZSBleGFtcGxlcyBpbiA8ZmlsZW5hbWU+ZXMxOTM4LmM8L2ZpbGVuYW1lPiBvcgorICAgICAgPGZpbGVuYW1lPmVzMTk2OC5jPC9maWxlbmFtZT4gZm9yIGhhcmR3YXJlIHZvbHVtZSBpbnRlcnJ1cHRzLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtdGx2Ij4KKyAgICAgIDx0aXRsZT5NZXRhZGF0YTwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgIFRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRCIHZhbHVlcyBvZiBhIG1peGVyIGNvbnRyb2wsIHVzZQorICAgICAgb24gb2YgdGhlIDxjb25zdGFudD5ERUNMQVJFX1RMVl94eHg8L2NvbnN0YW50PiBtYWNyb3MgZnJvbQorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC90bHYuaCZndDs8L2ZpbGVuYW1lPiB0byBkZWZpbmUgYSB2YXJpYWJsZQorICAgICAgY29udGFpbmluZyB0aGlzIGluZm9ybWF0aW9uLCBzZXQgdGhlPHN0cnVjdGZpZWxkPnRsdi5wCisgICAgICA8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byBwb2ludCB0byB0aGlzIHZhcmlhYmxlLCBhbmQgaW5jbHVkZSB0aGUKKyAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQ8L2NvbnN0YW50PiBmbGFnIGluIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPmFjY2Vzczwvc3RydWN0ZmllbGQ+IGZpZWxkOyBsaWtlIHRoaXM6CisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIERFQ0xBUkVfVExWX0RCX1NDQUxFKGRiX3NjYWxlX215X2NvbnRyb2wsIC00MDUwLCAxNTAsIDApOworCisgIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBteV9jb250cm9sIF9fZGV2aW5pdGRhdGEgPSB7CisgICAgICAgICAgLi4uCisgICAgICAgICAgLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUgfAorICAgICAgICAgICAgICAgICAgICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsCisgICAgICAgICAgLi4uCisgICAgICAgICAgLnRsdi5wID0gZGJfc2NhbGVfbXlfY29udHJvbCwKKyAgfTsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIDxmdW5jdGlvbj5ERUNMQVJFX1RMVl9EQl9TQ0FMRTwvZnVuY3Rpb24+IG1hY3JvIGRlZmluZXMKKyAgICAgIGluZm9ybWF0aW9uIGFib3V0IGEgbWl4ZXIgY29udHJvbCB3aGVyZSBlYWNoIHN0ZXAgaW4gdGhlIGNvbnRyb2wncworICAgICAgdmFsdWUgY2hhbmdlcyB0aGUgZEIgdmFsdWUgYnkgYSBjb25zdGFudCBkQiBhbW91bnQuCisgICAgICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBiZSBkZWZpbmVkLgorICAgICAgVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIG1pbmltdW0gdmFsdWUsIGluIHVuaXRzIG9mIDAuMDEgZEIuCisgICAgICBUaGUgdGhpcmQgcGFyYW1ldGVyIGlzIHRoZSBzdGVwIHNpemUsIGluIHVuaXRzIG9mIDAuMDEgZEIuCisgICAgICBTZXQgdGhlIGZvdXJ0aCBwYXJhbWV0ZXIgdG8gMSBpZiB0aGUgbWluaW11bSB2YWx1ZSBhY3R1YWxseSBtdXRlcworICAgICAgdGhlIGNvbnRyb2wuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIDxmdW5jdGlvbj5ERUNMQVJFX1RMVl9EQl9MSU5FQVI8L2Z1bmN0aW9uPiBtYWNybyBkZWZpbmVzCisgICAgICBpbmZvcm1hdGlvbiBhYm91dCBhIG1peGVyIGNvbnRyb2wgd2hlcmUgdGhlIGNvbnRyb2wncyB2YWx1ZSBhZmZlY3RzCisgICAgICB0aGUgb3V0cHV0IGxpbmVhcmx5LgorICAgICAgVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gYmUgZGVmaW5lZC4KKyAgICAgIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBtaW5pbXVtIHZhbHVlLCBpbiB1bml0cyBvZiAwLjAxIGRCLgorICAgICAgVGhlIHRoaXJkIHBhcmFtZXRlciBpcyB0aGUgbWF4aW11bSB2YWx1ZSwgaW4gdW5pdHMgb2YgMC4wMSBkQi4KKyAgICAgIElmIHRoZSBtaW5pbXVtIHZhbHVlIG11dGVzIHRoZSBjb250cm9sLCBzZXQgdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8KKyAgICAgIDxjb25zdGFudD5UTFZfREJfR0FJTl9NVVRFPC9jb25zdGFudD4uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQVBJIGZvciBBQzk3IENvZGVjICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iYXBpLWFjOTciPgorICAgIDx0aXRsZT5BUEkgZm9yIEFDOTcgQ29kZWM8L3RpdGxlPgorCisgICAgPHNlY3Rpb24+CisgICAgICA8dGl0bGU+R2VuZXJhbDwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIEFMU0EgQUM5NyBjb2RlYyBsYXllciBpcyBhIHdlbGwtZGVmaW5lZCBvbmUsIGFuZCB5b3UgZG9uJ3QKKyAgICAgIGhhdmUgdG8gd3JpdGUgbXVjaCBjb2RlIHRvIGNvbnRyb2wgaXQuIE9ubHkgbG93LWxldmVsIGNvbnRyb2wKKyAgICAgIHJvdXRpbmVzIGFyZSBuZWNlc3NhcnkuIFRoZSBBQzk3IGNvZGVjIEFQSSBpcyBkZWZpbmVkIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2FjOTdfY29kZWMuaCZndDs8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWV4YW1wbGUiPgorICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICAgIDxleGFtcGxlPgorCSAgICA8dGl0bGU+RXhhbXBsZSBvZiBBQzk3IEludGVyZmFjZTwvdGl0bGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IG15Y2hpcCB7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHN0cnVjdCBzbmRfYWM5NyAqYWM5NzsKKyAgICAgICAgICAuLi4uCisgIH07CisKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNuZF9teWNoaXBfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZykKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIC8qIHJlYWQgYSByZWdpc3RlciB2YWx1ZSBoZXJlIGZyb20gdGhlIGNvZGVjICovCisgICAgICAgICAgcmV0dXJuIHRoZV9yZWdpc3Rlcl92YWx1ZTsKKyAgfQorCisgIHN0YXRpYyB2b2lkIHNuZF9teWNoaXBfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKQorICB7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgLyogd3JpdGUgdGhlIGdpdmVuIHJlZ2lzdGVyIHZhbHVlIHRvIHRoZSBjb2RlYyAqLworICB9CisKKyAgc3RhdGljIGludCBzbmRfbXljaGlwX2FjOTcoc3RydWN0IG15Y2hpcCAqY2hpcCkKKyAgeworICAgICAgICAgIHN0cnVjdCBzbmRfYWM5N19idXMgKmJ1czsKKyAgICAgICAgICBzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgYWM5NzsKKyAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgIHN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBvcHMgPSB7CisgICAgICAgICAgICAgICAgICAud3JpdGUgPSBzbmRfbXljaGlwX2FjOTdfd3JpdGUsCisgICAgICAgICAgICAgICAgICAucmVhZCA9IHNuZF9teWNoaXBfYWM5N19yZWFkLAorICAgICAgICAgIH07CisKKyAgICAgICAgICBlcnIgPSBzbmRfYWM5N19idXMoY2hpcC0+Y2FyZCwgMCwgJm9wcywgTlVMTCwgJmJ1cyk7CisgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIG1lbXNldCgmYWM5NywgMCwgc2l6ZW9mKGFjOTcpKTsKKyAgICAgICAgICBhYzk3LnByaXZhdGVfZGF0YSA9IGNoaXA7CisgICAgICAgICAgcmV0dXJuIHNuZF9hYzk3X21peGVyKGJ1cywgJmFjOTcsICZjaGlwLT5hYzk3KTsKKyAgfQorCitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2V4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWNvbnN0cnVjdG9yIj4KKyAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gY3JlYXRlIGFuIGFjOTcgaW5zdGFuY2UsIGZpcnN0IGNhbGwgPGZ1bmN0aW9uPnNuZF9hYzk3X2J1czwvZnVuY3Rpb24+CisgICAgICB3aXRoIGFuIDx0eXBlPmFjOTdfYnVzX29wc190PC90eXBlPiByZWNvcmQgd2l0aCBjYWxsYmFjayBmdW5jdGlvbnMuCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9hYzk3X2J1cyAqYnVzOworICBzdGF0aWMgc3RydWN0IHNuZF9hYzk3X2J1c19vcHMgb3BzID0geworICAgICAgICAud3JpdGUgPSBzbmRfbXljaGlwX2FjOTdfd3JpdGUsCisgICAgICAgIC5yZWFkID0gc25kX215Y2hpcF9hYzk3X3JlYWQsCisgIH07CisKKyAgc25kX2FjOTdfYnVzKGNhcmQsIDAsICZvcHMsIE5VTEwsICZwYnVzKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICBUaGUgYnVzIHJlY29yZCBpcyBzaGFyZWQgYW1vbmcgYWxsIGJlbG9uZ2luZyBhYzk3IGluc3RhbmNlcy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBBbmQgdGhlbiBjYWxsIDxmdW5jdGlvbj5zbmRfYWM5N19taXhlcigpPC9mdW5jdGlvbj4gd2l0aCBhbgorICAgICAgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9hYzk3X3RlbXBsYXRlPC9zdHJ1Y3RuYW1lPgorICAgICAgcmVjb3JkIHRvZ2V0aGVyIHdpdGggdGhlIGJ1cyBwb2ludGVyIGNyZWF0ZWQgYWJvdmUuCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9hYzk3X3RlbXBsYXRlIGFjOTc7CisgIGludCBlcnI7CisKKyAgbWVtc2V0KCZhYzk3LCAwLCBzaXplb2YoYWM5NykpOworICBhYzk3LnByaXZhdGVfZGF0YSA9IGNoaXA7CisgIHNuZF9hYzk3X21peGVyKGJ1cywgJmFjOTcsICZjaGlwLT5hYzk3KTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIHdoZXJlIGNoaXAtJmd0O2FjOTcgaXMgYSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZAorICAgICAgICA8dHlwZT5hYzk3X3Q8L3R5cGU+IGluc3RhbmNlLgorICAgICAgICBJbiB0aGlzIGNhc2UsIHRoZSBjaGlwIHBvaW50ZXIgaXMgc2V0IGFzIHRoZSBwcml2YXRlIGRhdGEsIHNvIHRoYXQKKyAgICAgICAgdGhlIHJlYWQvd3JpdGUgY2FsbGJhY2sgZnVuY3Rpb25zIGNhbiByZWZlciB0byB0aGlzIGNoaXAgaW5zdGFuY2UuCisgICAgICAgIFRoaXMgaW5zdGFuY2UgaXMgbm90IG5lY2Vzc2FyaWx5IHN0b3JlZCBpbiB0aGUgY2hpcAorCXJlY29yZC4gIElmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIGZyb20gdGhlCisgICAgICAgIGRyaXZlciwgb3IgbmVlZCB0aGUgc3VzcGVuZC9yZXN1bWUgb2YgYWM5NyBjb2RlY3MsIGtlZXAgdGhpcworICAgICAgICBwb2ludGVyIHRvIHBhc3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb25zLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny1jYWxsYmFja3MiPgorICAgICAgPHRpdGxlPkNhbGxiYWNrczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHN0YW5kYXJkIGNhbGxiYWNrcyBhcmUgPHN0cnVjdGZpZWxkPnJlYWQ8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD53cml0ZTwvc3RydWN0ZmllbGQ+LiBPYnZpb3VzbHkgdGhleSAKKyAgICAgIGNvcnJlc3BvbmQgdG8gdGhlIGZ1bmN0aW9ucyBmb3IgcmVhZCBhbmQgd3JpdGUgYWNjZXNzZXMgdG8gdGhlCisgICAgICBoYXJkd2FyZSBsb3ctbGV2ZWwgY29kZXMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5yZWFkPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgcmV0dXJucyB0aGUKKyAgICAgICAgcmVnaXN0ZXIgdmFsdWUgc3BlY2lmaWVkIGluIHRoZSBhcmd1bWVudC4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHNuZF9teWNoaXBfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZykKKyAgeworICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBhYzk3LT5wcml2YXRlX2RhdGE7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIHJldHVybiB0aGVfcmVnaXN0ZXJfdmFsdWU7CisgIH0KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIEhlcmUsIHRoZSBjaGlwIGNhbiBiZSBjYXN0IGZyb20gYWM5Ny0mZ3Q7cHJpdmF0ZV9kYXRhLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgTWVhbndoaWxlLCB0aGUgPHN0cnVjdGZpZWxkPndyaXRlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMKKyAgICAgICAgdXNlZCB0byBzZXQgdGhlIHJlZ2lzdGVyIHZhbHVlLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBzbmRfbXljaGlwX2FjOTdfd3JpdGUoc3RydWN0IHNuZF9hYzk3ICphYzk3LAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IHZhbCkKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZXNlIGNhbGxiYWNrcyBhcmUgbm9uLWF0b21pYyBsaWtlIHRoZSBjb250cm9sIEFQSSBjYWxsYmFja3MuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGVyZSBhcmUgYWxzbyBvdGhlciBjYWxsYmFja3M6CisgICAgICA8c3RydWN0ZmllbGQ+cmVzZXQ8L3N0cnVjdGZpZWxkPiwKKyAgICAgIDxzdHJ1Y3RmaWVsZD53YWl0PC9zdHJ1Y3RmaWVsZD4gYW5kCisgICAgICA8c3RydWN0ZmllbGQ+aW5pdDwvc3RydWN0ZmllbGQ+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cmVzZXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB1c2VkIHRvIHJlc2V0CisgICAgICB0aGUgY29kZWMuIElmIHRoZSBjaGlwIHJlcXVpcmVzIGEgc3BlY2lhbCBraW5kIG9mIHJlc2V0LCB5b3UgY2FuCisgICAgICBkZWZpbmUgdGhpcyBjYWxsYmFjay4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPndhaXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcyB1c2VkIHRvCisgICAgICBhZGQgc29tZSB3YWl0aW5nIHRpbWUgaW4gdGhlIHN0YW5kYXJkIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjb2RlYy4gSWYgdGhlCisgICAgICBjaGlwIHJlcXVpcmVzIHRoZSBleHRyYSB3YWl0aW5nIHRpbWUsIGRlZmluZSB0aGlzIGNhbGxiYWNrLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5pdDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgZm9yCisgICAgICBhZGRpdGlvbmFsIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjb2RlYy4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctdXBkYXRpbmctcmVnaXN0ZXJzIj4KKyAgICAgIDx0aXRsZT5VcGRhdGluZyBSZWdpc3RlcnMgaW4gVGhlIERyaXZlcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRvIHRoZSBjb2RlYyBmcm9tIHRoZSBkcml2ZXIsIHlvdSBjYW4KKyAgICAgIGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfd3JpdGUoKTwvZnVuY3Rpb24+LAorICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3JlYWQoKTwvZnVuY3Rpb24+LAorICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3VwZGF0ZSgpPC9mdW5jdGlvbj4gYW5kCisgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlX2JpdHMoKTwvZnVuY3Rpb24+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEJvdGggPGZ1bmN0aW9uPnNuZF9hYzk3X3dyaXRlKCk8L2Z1bmN0aW9uPiBhbmQKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3VwZGF0ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb25zIGFyZSB1c2VkIHRvCisgICAgICAgIHNldCBhIHZhbHVlIHRvIHRoZSBnaXZlbiByZWdpc3RlcgorICAgICAgICAoPGNvbnN0YW50PkFDOTdfWFhYPC9jb25zdGFudD4pLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gaXMKKyAgICAgICAgdGhhdCA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlKCk8L2Z1bmN0aW9uPiBkb2Vzbid0IHdyaXRlIGEKKyAgICAgICAgdmFsdWUgaWYgdGhlIGdpdmVuIHZhbHVlIGhhcyBiZWVuIGFscmVhZHkgc2V0LCB3aGlsZQorICAgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfd3JpdGUoKTwvZnVuY3Rpb24+IGFsd2F5cyByZXdyaXRlcyB0aGUKKyAgICAgICAgdmFsdWUuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9hYzk3X3dyaXRlKGFjOTcsIEFDOTdfTUFTVEVSLCAweDgwODApOworICBzbmRfYWM5N191cGRhdGUoYWM5NywgQUM5N19NQVNURVIsIDB4ODA4MCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N19yZWFkKCk8L2Z1bmN0aW9uPiBpcyB1c2VkIHRvIHJlYWQgdGhlIHZhbHVlCisgICAgICAgIG9mIHRoZSBnaXZlbiByZWdpc3Rlci4gRm9yIGV4YW1wbGUsIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHZhbHVlID0gc25kX2FjOTdfcmVhZChhYzk3LCBBQzk3X01BU1RFUik7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGVfYml0cygpPC9mdW5jdGlvbj4gaXMgdXNlZCB0byB1cGRhdGUKKyAgICAgICAgc29tZSBiaXRzIGluIHRoZSBnaXZlbiByZWdpc3Rlci4gIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9hYzk3X3VwZGF0ZV9iaXRzKGFjOTcsIHJlZywgbWFzaywgdmFsdWUpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBBbHNvLCB0aGVyZSBpcyBhIGZ1bmN0aW9uIHRvIGNoYW5nZSB0aGUgc2FtcGxlIHJhdGUgKG9mIGEKKyAgICAgICAgZ2l2ZW4gcmVnaXN0ZXIgc3VjaCBhcworICAgICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fRlJPTlRfREFDX1JBVEU8L2NvbnN0YW50Pikgd2hlbiBWUkEgb3IKKyAgICAgICAgRFJBIGlzIHN1cHBvcnRlZCBieSB0aGUgY29kZWM6CisgICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N19zZXRfcmF0ZSgpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9hYzk3X3NldF9yYXRlKGFjOTcsIEFDOTdfUENNX0ZST05UX0RBQ19SQVRFLCA0NDEwMCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIGFyZSBhdmFpbGFibGUgdG8gc2V0IHRoZSByYXRlOgorICAgICAgPGNvbnN0YW50PkFDOTdfUENNX01JQ19BRENfUkFURTwvY29uc3RhbnQ+LAorICAgICAgPGNvbnN0YW50PkFDOTdfUENNX0ZST05UX0RBQ19SQVRFPC9jb25zdGFudD4sCisgICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fTFJfQURDX1JBVEU8L2NvbnN0YW50PiwKKyAgICAgIDxjb25zdGFudD5BQzk3X1NQRElGPC9jb25zdGFudD4uIFdoZW4KKyAgICAgIDxjb25zdGFudD5BQzk3X1NQRElGPC9jb25zdGFudD4gaXMgc3BlY2lmaWVkLCB0aGUgcmVnaXN0ZXIgaXMKKyAgICAgIG5vdCByZWFsbHkgY2hhbmdlZCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgSUVDOTU4IHN0YXR1cyBiaXRzIHdpbGwKKyAgICAgIGJlIHVwZGF0ZWQuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny1jbG9jay1hZGp1c3RtZW50Ij4KKyAgICAgIDx0aXRsZT5DbG9jayBBZGp1c3RtZW50PC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBJbiBzb21lIGNoaXBzLCB0aGUgY2xvY2sgb2YgdGhlIGNvZGVjIGlzbid0IDQ4MDAwIGJ1dCB1c2luZyBhCisgICAgICBQQ0kgY2xvY2sgKHRvIHNhdmUgYSBxdWFydHohKS4gSW4gdGhpcyBjYXNlLCBjaGFuZ2UgdGhlIGZpZWxkCisgICAgICBidXMtJmd0O2Nsb2NrIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICB2YWx1ZS4gRm9yIGV4YW1wbGUsIGludGVsOHgwIAorICAgICAgYW5kIGVzMTk2OCBkcml2ZXJzIGhhdmUgdGhlaXIgb3duIGZ1bmN0aW9uIHRvIHJlYWQgZnJvbSB0aGUgY2xvY2suCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LXByb2MtZmlsZXMiPgorICAgICAgPHRpdGxlPlByb2MgRmlsZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBBTFNBIEFDOTcgaW50ZXJmYWNlIHdpbGwgY3JlYXRlIGEgcHJvYyBmaWxlIHN1Y2ggYXMKKyAgICAgIDxmaWxlbmFtZT4vcHJvYy9hc291bmQvY2FyZDAvY29kZWM5NyMwL2FjOTcjMC0wPC9maWxlbmFtZT4gYW5kCisgICAgICA8ZmlsZW5hbWU+YWM5NyMwLTArcmVnczwvZmlsZW5hbWU+LiBZb3UgY2FuIHJlZmVyIHRvIHRoZXNlIGZpbGVzIHRvCisgICAgICBzZWUgdGhlIGN1cnJlbnQgc3RhdHVzIGFuZCByZWdpc3RlcnMgb2YgdGhlIGNvZGVjLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctbXVsdGlwbGUtY29kZWNzIj4KKyAgICAgIDx0aXRsZT5NdWx0aXBsZSBDb2RlY3M8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlcmUgYXJlIHNldmVyYWwgY29kZWNzIG9uIHRoZSBzYW1lIGNhcmQsIHlvdSBuZWVkIHRvCisgICAgICBjYWxsIDxmdW5jdGlvbj5zbmRfYWM5N19taXhlcigpPC9mdW5jdGlvbj4gbXVsdGlwbGUgdGltZXMgd2l0aAorICAgICAgYWM5Ny5udW09MSBvciBncmVhdGVyLiBUaGUgPHN0cnVjdGZpZWxkPm51bTwvc3RydWN0ZmllbGQ+IGZpZWxkCisgICAgICBzcGVjaWZpZXMgdGhlIGNvZGVjIG51bWJlci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3Ugc2V0IHVwIG11bHRpcGxlIGNvZGVjcywgeW91IGVpdGhlciBuZWVkIHRvIHdyaXRlCisgICAgICBkaWZmZXJlbnQgY2FsbGJhY2tzIGZvciBlYWNoIGNvZGVjIG9yIGNoZWNrCisgICAgICBhYzk3LSZndDtudW0gaW4gdGhlIGNhbGxiYWNrIHJvdXRpbmVzLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBNSURJIChNUFU0MDEtVUFSVCkgSW50ZXJmYWNlICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0ibWlkaS1pbnRlcmZhY2UiPgorICAgIDx0aXRsZT5NSURJIChNUFU0MDEtVUFSVCkgSW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJtaWRpLWludGVyZmFjZS1nZW5lcmFsIj4KKyAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBNYW55IHNvdW5kY2FyZHMgaGF2ZSBidWlsdC1pbiBNSURJIChNUFU0MDEtVUFSVCkKKyAgICAgIGludGVyZmFjZXMuIFdoZW4gdGhlIHNvdW5kY2FyZCBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgTVBVNDAxLVVBUlQKKyAgICAgIGludGVyZmFjZSwgbW9zdCBsaWtlbHkgeW91IGNhbiB1c2UgdGhlIEFMU0EgTVBVNDAxLVVBUlQgQVBJLiBUaGUKKyAgICAgIE1QVTQwMS1VQVJUIEFQSSBpcyBkZWZpbmVkIGluCisgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL21wdTQwMS5oJmd0OzwvZmlsZW5hbWU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFNvbWUgc291bmRjaGlwcyBoYXZlIGEgc2ltaWxhciBidXQgc2xpZ2h0bHkgZGlmZmVyZW50CisgICAgICBpbXBsZW1lbnRhdGlvbiBvZiBtcHU0MDEgc3R1ZmYuIEZvciBleGFtcGxlLCBlbXUxMGsxIGhhcyBpdHMgb3duCisgICAgICBtcHU0MDEgcm91dGluZXMuIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJtaWRpLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFRvIGNyZWF0ZSBhIHJhd21pZGkgb2JqZWN0LCBjYWxsCisgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CisgIHNuZF9tcHU0MDFfdWFydF9uZXcoY2FyZCwgMCwgTVBVNDAxX0hXX01QVTQwMSwgcG9ydCwgaW5mb19mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICBpcnEsIGlycV9mbGFncywgJnJtaWRpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYXJkIHBvaW50ZXIsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZQorICAgICAgaW5kZXggb2YgdGhpcyBjb21wb25lbnQuIFlvdSBjYW4gY3JlYXRlIHVwIHRvIDggcmF3bWlkaQorICAgICAgZGV2aWNlcy4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIHR5cGUgb2YgdGhlIGhhcmR3YXJlLAorICAgICAgPGNvbnN0YW50Pk1QVTQwMV9IV19YWFg8L2NvbnN0YW50Pi4gSWYgaXQncyBub3QgYSBzcGVjaWFsIG9uZSwKKyAgICAgIHlvdSBjYW4gdXNlIDxjb25zdGFudD5NUFU0MDFfSFdfTVBVNDAxPC9jb25zdGFudD4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDR0aCBhcmd1bWVudCBpcyB0aGUgSS9PIHBvcnQgYWRkcmVzcy4gTWFueQorICAgICAgYmFja3dhcmQtY29tcGF0aWJsZSBNUFU0MDEgaGF2ZSBhbiBJL08gcG9ydCBzdWNoIGFzIDB4MzMwLiBPciwgaXQKKyAgICAgIG1pZ2h0IGJlIGEgcGFydCBvZiBpdHMgb3duIFBDSSBJL08gcmVnaW9uLiBJdCBkZXBlbmRzIG9uIHRoZQorICAgICAgY2hpcCBkZXNpZ24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKwlUaGUgNXRoIGFyZ3VtZW50IGlzIGEgYml0ZmxhZyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgICAgICAgV2hlbiB0aGUgSS9PIHBvcnQgYWRkcmVzcyBhYm92ZSBpcyBwYXJ0IG9mIHRoZSBQQ0kgSS9PCisgICAgICByZWdpb24sIHRoZSBNUFU0MDEgSS9PIHBvcnQgbWlnaHQgaGF2ZSBiZWVuIGFscmVhZHkgYWxsb2NhdGVkCisgICAgICAocmVzZXJ2ZWQpIGJ5IHRoZSBkcml2ZXIgaXRzZWxmLiBJbiBzdWNoIGEgY2FzZSwgcGFzcyBhIGJpdCBmbGFnCisgICAgICA8Y29uc3RhbnQ+TVBVNDAxX0lORk9fSU5URUdSQVRFRDwvY29uc3RhbnQ+LAorICAgICAgYW5kIHRoZSBtcHU0MDEtdWFydCBsYXllciB3aWxsIGFsbG9jYXRlIHRoZSBJL08gcG9ydHMgYnkgaXRzZWxmLiAKKyAgICAgIDwvcGFyYT4KKworCTxwYXJhPgorCVdoZW4gdGhlIGNvbnRyb2xsZXIgc3VwcG9ydHMgb25seSB0aGUgaW5wdXQgb3Igb3V0cHV0IE1JREkgc3RyZWFtLAorCXBhc3MgdGhlIDxjb25zdGFudD5NUFU0MDFfSU5GT19JTlBVVDwvY29uc3RhbnQ+IG9yCisJPGNvbnN0YW50Pk1QVTQwMV9JTkZPX09VVFBVVDwvY29uc3RhbnQ+IGJpdGZsYWcsIHJlc3BlY3RpdmVseS4KKwlUaGVuIHRoZSByYXdtaWRpIGluc3RhbmNlIGlzIGNyZWF0ZWQgYXMgYSBzaW5nbGUgc3RyZWFtLgorCTwvcGFyYT4KKworCTxwYXJhPgorCTxjb25zdGFudD5NUFU0MDFfSU5GT19NTUlPPC9jb25zdGFudD4gYml0ZmxhZyBpcyB1c2VkIHRvIGNoYW5nZQorCXRoZSBhY2Nlc3MgbWV0aG9kIHRvIE1NSU8gKHZpYSByZWFkYiBhbmQgd3JpdGViKSBpbnN0ZWFkIG9mCisJaW9iIGFuZCBvdXRiLiBJbiB0aGlzIGNhc2UsIHlvdSBoYXZlIHRvIHBhc3MgdGhlIGlvbWFwcGVkIGFkZHJlc3MKKwl0byA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4uCisJPC9wYXJhPgorCisJPHBhcmE+CisJV2hlbiA8Y29uc3RhbnQ+TVBVNDAxX0lORk9fVFhfSVJRPC9jb25zdGFudD4gaXMgc2V0LCB0aGUgb3V0cHV0CisJc3RyZWFtIGlzbid0IGNoZWNrZWQgaW4gdGhlIGRlZmF1bHQgaW50ZXJydXB0IGhhbmRsZXIuICBUaGUgZHJpdmVyCisJbmVlZHMgdG8gY2FsbCA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X2ludGVycnVwdF90eCgpPC9mdW5jdGlvbj4KKwlieSBpdHNlbGYgdG8gc3RhcnQgcHJvY2Vzc2luZyB0aGUgb3V0cHV0IHN0cmVhbSBpbiB0aGUgaXJxIGhhbmRsZXIuCisJPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVXN1YWxseSwgdGhlIHBvcnQgYWRkcmVzcyBjb3JyZXNwb25kcyB0byB0aGUgY29tbWFuZCBwb3J0IGFuZAorICAgICAgICBwb3J0ICsgMSBjb3JyZXNwb25kcyB0byB0aGUgZGF0YSBwb3J0LiBJZiBub3QsIHlvdSBtYXkgY2hhbmdlCisgICAgICAgIHRoZSA8c3RydWN0ZmllbGQ+Y3BvcnQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBvZgorICAgICAgICBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX21wdTQwMTwvc3RydWN0bmFtZT4gbWFudWFsbHkgCisgICAgICAgIGFmdGVyd2FyZC4gSG93ZXZlciwgPHN0cnVjdG5hbWU+c25kX21wdTQwMTwvc3RydWN0bmFtZT4gcG9pbnRlciBpcyBub3QKKyAgICAgICAgcmV0dXJuZWQgZXhwbGljaXRseSBieQorICAgICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4uIFlvdSBuZWVkIHRvIGNhc3QKKyAgICAgICAgcm1pZGktJmd0O3ByaXZhdGVfZGF0YSB0bworICAgICAgICA8c3RydWN0bmFtZT5zbmRfbXB1NDAxPC9zdHJ1Y3RuYW1lPiBleHBsaWNpdGx5LCAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3Qgc25kX21wdTQwMSAqbXB1OworICBtcHUgPSBybWlkaS0+cHJpdmF0ZV9kYXRhOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgYW5kIHJlc2V0IHRoZSBjcG9ydCBhcyB5b3UgbGlrZToKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBtcHUtPmNwb3J0ID0gbXlfb3duX2NvbnRyb2xfcG9ydDsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDZ0aCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGlycSBudW1iZXIgZm9yIFVBUlQuIElmIHRoZSBpcnEKKyAgICAgIGlzIGFscmVhZHkgYWxsb2NhdGVkLCBwYXNzIDAgdG8gdGhlIDd0aCBhcmd1bWVudAorICAgICAgKDxwYXJhbWV0ZXI+aXJxX2ZsYWdzPC9wYXJhbWV0ZXI+KS4gT3RoZXJ3aXNlLCBwYXNzIHRoZSBmbGFncworICAgICAgZm9yIGlycSBhbGxvY2F0aW9uIAorICAgICAgKDxjb25zdGFudD5TQV9YWFg8L2NvbnN0YW50PiBiaXRzKSB0byBpdCwgYW5kIHRoZSBpcnEgd2lsbCBiZQorICAgICAgcmVzZXJ2ZWQgYnkgdGhlIG1wdTQwMS11YXJ0IGxheWVyLiBJZiB0aGUgY2FyZCBkb2Vzbid0IGdlbmVyYXRlCisgICAgICBVQVJUIGludGVycnVwdHMsIHBhc3MgLTEgYXMgdGhlIGlycSBudW1iZXIuIFRoZW4gYSB0aW1lcgorICAgICAgaW50ZXJydXB0IHdpbGwgYmUgaW52b2tlZCBmb3IgcG9sbGluZy4gCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9Im1pZGktaW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyIj4KKyAgICAgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxlcjwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiB0aGUgaW50ZXJydXB0IGlzIGFsbG9jYXRlZCBpbgorICAgICAgPGZ1bmN0aW9uPnNuZF9tcHU0MDFfdWFydF9uZXcoKTwvZnVuY3Rpb24+LCB0aGUgcHJpdmF0ZQorICAgICAgaW50ZXJydXB0IGhhbmRsZXIgaXMgdXNlZCwgaGVuY2UgeW91IGRvbid0IGhhdmUgYW55dGhpbmcgZWxzZSB0byBkbworICAgICAgdGhhbiBjcmVhdGluZyB0aGUgbXB1NDAxIHN0dWZmLiBPdGhlcndpc2UsIHlvdSBoYXZlIHRvIGNhbGwKKyAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfaW50ZXJydXB0KCk8L2Z1bmN0aW9uPiBleHBsaWNpdGx5IHdoZW4KKyAgICAgIGEgVUFSVCBpbnRlcnJ1cHQgaXMgaW52b2tlZCBhbmQgY2hlY2tlZCBpbiB5b3VyIG93biBpbnRlcnJ1cHQKKyAgICAgIGhhbmRsZXIuICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoaXMgY2FzZSwgeW91IG5lZWQgdG8gcGFzcyB0aGUgcHJpdmF0ZV9kYXRhIG9mIHRoZQorICAgICAgICByZXR1cm5lZCByYXdtaWRpIG9iamVjdCBmcm9tCisgICAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPiBhcyB0aGUgc2Vjb25kCisgICAgICAgIGFyZ3VtZW50IG9mIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfaW50ZXJydXB0KCk8L2Z1bmN0aW9uPi4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX21wdTQwMV91YXJ0X2ludGVycnVwdChpcnEsIHJtaWRpLT5wcml2YXRlX2RhdGEsIHJlZ3MpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gUmF3TUlESSBJbnRlcmZhY2UgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJyYXdtaWRpLWludGVyZmFjZSI+CisgICAgPHRpdGxlPlJhd01JREkgSW50ZXJmYWNlPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vdmVydmlldyI+CisgICAgICA8dGl0bGU+T3ZlcnZpZXc8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSByYXcgTUlESSBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgaGFyZHdhcmUgTUlESSBwb3J0cyB0aGF0IGNhbgorICAgICAgYmUgYWNjZXNzZWQgYXMgYSBieXRlIHN0cmVhbS4gIEl0IGlzIG5vdCB1c2VkIGZvciBzeW50aGVzaXplcgorICAgICAgY2hpcHMgdGhhdCBkbyBub3QgZGlyZWN0bHkgdW5kZXJzdGFuZCBNSURJLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIEFMU0EgaGFuZGxlcyBmaWxlIGFuZCBidWZmZXIgbWFuYWdlbWVudC4gIEFsbCB5b3UgaGF2ZSB0byBkbyBpcworICAgICAgdG8gd3JpdGUgc29tZSBjb2RlIHRvIG1vdmUgZGF0YSBiZXR3ZWVuIHRoZSBidWZmZXIgYW5kIHRoZQorICAgICAgaGFyZHdhcmUuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIHJhd21pZGkgQVBJIGlzIGRlZmluZWQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvcmF3bWlkaS5oJmd0OzwvZmlsZW5hbWU+LgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+CisgICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRvIGNyZWF0ZSBhIHJhd21pZGkgZGV2aWNlLCBjYWxsIHRoZQorICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX25ldzwvZnVuY3Rpb24+IGZ1bmN0aW9uOgorICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworICBlcnIgPSBzbmRfcmF3bWlkaV9uZXcoY2hpcC0+Y2FyZCwgIk15TUlESSIsIDAsIG91dHMsIGlucywgJnJtaWRpKTsKKyAgaWYgKGVyciA8IDApCisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgcm1pZGktPnByaXZhdGVfZGF0YSA9IGNoaXA7CisgIHN0cmNweShybWlkaS0+bmFtZSwgIk15IE1JREkiKTsKKyAgcm1pZGktPmluZm9fZmxhZ3MgPSBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUIHwKKyAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQgfAorICAgICAgICAgICAgICAgICAgICAgIFNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNhcmQgcG9pbnRlciwgdGhlIHNlY29uZCBhcmd1bWVudCBpcworICAgICAgdGhlIElEIHN0cmluZy4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGluZGV4IG9mIHRoaXMgY29tcG9uZW50LiAgWW91IGNhbgorICAgICAgY3JlYXRlIHVwIHRvIDggcmF3bWlkaSBkZXZpY2VzLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSBmb3VydGggYW5kIGZpZnRoIGFyZ3VtZW50cyBhcmUgdGhlIG51bWJlciBvZiBvdXRwdXQgYW5kCisgICAgICBpbnB1dCBzdWJzdHJlYW1zLCByZXNwZWN0aXZlbHksIG9mIHRoaXMgZGV2aWNlIChhIHN1YnN0cmVhbSBpcworICAgICAgdGhlIGVxdWl2YWxlbnQgb2YgYSBNSURJIHBvcnQpLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFNldCB0aGUgPHN0cnVjdGZpZWxkPmluZm9fZmxhZ3M8L3N0cnVjdGZpZWxkPiBmaWVsZCB0byBzcGVjaWZ5CisgICAgICB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBkZXZpY2UuCisgICAgICBTZXQgPGNvbnN0YW50PlNORFJWX1JBV01JRElfSU5GT19PVVRQVVQ8L2NvbnN0YW50PiBpZiB0aGVyZSBpcworICAgICAgYXQgbGVhc3Qgb25lIG91dHB1dCBwb3J0LAorICAgICAgPGNvbnN0YW50PlNORFJWX1JBV01JRElfSU5GT19JTlBVVDwvY29uc3RhbnQ+IGlmIHRoZXJlIGlzIGF0CisgICAgICBsZWFzdCBvbmUgaW5wdXQgcG9ydCwKKyAgICAgIGFuZCA8Y29uc3RhbnQ+U05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDwvY29uc3RhbnQ+IGlmIHRoZSBkZXZpY2UKKyAgICAgIGNhbiBoYW5kbGUgb3V0cHV0IGFuZCBpbnB1dCBhdCB0aGUgc2FtZSB0aW1lLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIEFmdGVyIHRoZSByYXdtaWRpIGRldmljZSBpcyBjcmVhdGVkLCB5b3UgbmVlZCB0byBzZXQgdGhlCisgICAgICBvcGVyYXRvcnMgKGNhbGxiYWNrcykgZm9yIGVhY2ggc3Vic3RyZWFtLiAgVGhlcmUgYXJlIGhlbHBlcgorICAgICAgZnVuY3Rpb25zIHRvIHNldCB0aGUgb3BlcmF0b3JzIGZvciBhbGwgdGhlIHN1YnN0cmVhbXMgb2YgYSBkZXZpY2U6CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9yYXdtaWRpX3NldF9vcHMocm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVCwgJnNuZF9teW1pZGlfb3V0cHV0X29wcyk7CisgIHNuZF9yYXdtaWRpX3NldF9vcHMocm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULCAmc25kX215bWlkaV9pbnB1dF9vcHMpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgVGhlIG9wZXJhdG9ycyBhcmUgdXN1YWxseSBkZWZpbmVkIGxpa2UgdGhpczoKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBzbmRfcmF3bWlkaV9vcHMgc25kX215bWlkaV9vdXRwdXRfb3BzID0geworICAgICAgICAgIC5vcGVuID0gICAgc25kX215bWlkaV9vdXRwdXRfb3BlbiwKKyAgICAgICAgICAuY2xvc2UgPSAgIHNuZF9teW1pZGlfb3V0cHV0X2Nsb3NlLAorICAgICAgICAgIC50cmlnZ2VyID0gc25kX215bWlkaV9vdXRwdXRfdHJpZ2dlciwKKyAgfTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgVGhlc2UgY2FsbGJhY2tzIGFyZSBleHBsYWluZWQgaW4gdGhlIDxsaW5rCisgICAgICBsaW5rZW5kPSJyYXdtaWRpLWludGVyZmFjZS1jYWxsYmFja3MiPjxjaXRldGl0bGU+Q2FsbGJhY2tzPC9jaXRldGl0bGU+PC9saW5rPgorICAgICAgc2VjdGlvbi4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBzdWJzdHJlYW0sIHlvdSBzaG91bGQgZ2l2ZSBhCisgICAgICB1bmlxdWUgbmFtZSB0byBlYWNoIG9mIHRoZW06CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKyAgbGlzdF9mb3JfZWFjaF9lbnRyeShzdWJzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgJnJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtcywKKyAgICAgICAgICAgICAgICAgICAgICBsaXN0IHsKKyAgICAgICAgICBzcHJpbnRmKHN1YnN0cmVhbS0+bmFtZSwgIk15IE1JREkgUG9ydCAlZCIsIHN1YnN0cmVhbS0+bnVtYmVyICsgMSk7CisgIH0KKyAgLyogc2FtZSBmb3IgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQgKi8KK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1jYWxsYmFja3MiPgorICAgICAgPHRpdGxlPkNhbGxiYWNrczwvdGl0bGU+CisKKyAgICAgIDxwYXJhPgorICAgICAgSW4gYWxsIHRoZSBjYWxsYmFja3MsIHRoZSBwcml2YXRlIGRhdGEgdGhhdCB5b3UndmUgc2V0IGZvciB0aGUKKyAgICAgIHJhd21pZGkgZGV2aWNlIGNhbiBiZSBhY2Nlc3NlZCBhcworICAgICAgc3Vic3RyZWFtLSZndDtybWlkaS0mZ3Q7cHJpdmF0ZV9kYXRhLgorICAgICAgPCEtLSA8Y29kZT4gaXNuJ3QgYXZhaWxhYmxlIGJlZm9yZSBEb2NCb29rIDQuMyAtLT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBvcnQsIHlvdXIgY2FsbGJhY2tzIGNhbiBkZXRlcm1pbmUgdGhlCisgICAgICBwb3J0IGluZGV4IGZyb20gdGhlIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gZGF0YSBwYXNzZWQgdG8gZWFjaAorICAgICAgY2FsbGJhY2s6CisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKyAgaW50IGluZGV4ID0gc3Vic3RyZWFtLT5udW1iZXI7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW9wLW9wZW4iPgorICAgICAgPHRpdGxlPjxmdW5jdGlvbj5vcGVuPC9mdW5jdGlvbj4gY2FsbGJhY2s8L3RpdGxlPgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgc25kX3h4eF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbiBhIHN1YnN0cmVhbSBpcyBvcGVuZWQuCisgICAgICAgIFlvdSBjYW4gaW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgaGVyZSwgYnV0IHlvdSBzaG91bGRuJ3QKKyAgICAgICAgc3RhcnQgdHJhbnNtaXR0aW5nL3JlY2VpdmluZyBkYXRhIHlldC4KKyAgICAgICAgPC9wYXJhPgorICAgICAgPC9zZWN0aW9uPgorCisgICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtY2xvc2UiPgorICAgICAgPHRpdGxlPjxmdW5jdGlvbj5jbG9zZTwvZnVuY3Rpb24+IGNhbGxiYWNrPC90aXRsZT4KKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBHdWVzcyB3aGF0LgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8ZnVuY3Rpb24+b3BlbjwvZnVuY3Rpb24+IGFuZCA8ZnVuY3Rpb24+Y2xvc2U8L2Z1bmN0aW9uPgorICAgICAgICBjYWxsYmFja3Mgb2YgYSByYXdtaWRpIGRldmljZSBhcmUgc2VyaWFsaXplZCB3aXRoIGEgbXV0ZXgsCisgICAgICAgIGFuZCBjYW4gc2xlZXAuCisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW9wLXRyaWdnZXItb3V0Ij4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+dHJpZ2dlcjwvZnVuY3Rpb24+IGNhbGxiYWNrIGZvciBvdXRwdXQKKyAgICAgIHN1YnN0cmVhbXM8L3RpdGxlPgorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyB2b2lkIHNuZF94eHhfb3V0cHV0X3RyaWdnZXIoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgdXApOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdpdGggYSBub256ZXJvIDxwYXJhbWV0ZXI+dXA8L3BhcmFtZXRlcj4KKyAgICAgICAgcGFyYW1ldGVyIHdoZW4gdGhlcmUgaXMgc29tZSBkYXRhIGluIHRoZSBzdWJzdHJlYW0gYnVmZmVyIHRoYXQKKyAgICAgICAgbXVzdCBiZSB0cmFuc21pdHRlZC4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUbyByZWFkIGRhdGEgZnJvbSB0aGUgYnVmZmVyLCBjYWxsCisgICAgICAgIDxmdW5jdGlvbj5zbmRfcmF3bWlkaV90cmFuc21pdF9wZWVrPC9mdW5jdGlvbj4uICBJdCB3aWxsCisgICAgICAgIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIHJlYWQ7IHRoaXMgd2lsbCBiZQorICAgICAgICBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBieXRlcyByZXF1ZXN0ZWQgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZQorICAgICAgICBkYXRhIGluIHRoZSBidWZmZXIuCisgICAgICAgIEFmdGVyIHRoZSBkYXRhIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBzdWNjZXNzZnVsbHksIGNhbGwKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0X2FjazwvZnVuY3Rpb24+IHRvIHJlbW92ZSB0aGUKKyAgICAgICAgZGF0YSBmcm9tIHRoZSBzdWJzdHJlYW0gYnVmZmVyOgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgdW5zaWduZWQgY2hhciBkYXRhOworICB3aGlsZSAoc25kX3Jhd21pZGlfdHJhbnNtaXRfcGVlayhzdWJzdHJlYW0sICZkYXRhLCAxKSA9PSAxKSB7CisgICAgICAgICAgaWYgKHNuZF9teWNoaXBfdHJ5X3RvX3RyYW5zbWl0KGRhdGEpKQorICAgICAgICAgICAgICAgICAgc25kX3Jhd21pZGlfdHJhbnNtaXRfYWNrKHN1YnN0cmVhbSwgMSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGhhcmR3YXJlIEZJRk8gZnVsbCAqLworICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91IGtub3cgYmVmb3JlaGFuZCB0aGF0IHRoZSBoYXJkd2FyZSB3aWxsIGFjY2VwdCBkYXRhLCB5b3UKKyAgICAgICAgY2FuIHVzZSB0aGUgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0PC9mdW5jdGlvbj4gZnVuY3Rpb24KKyAgICAgICAgd2hpY2ggcmVhZHMgc29tZSBkYXRhIGFuZCByZW1vdmVzIHRoZW0gZnJvbSB0aGUgYnVmZmVyIGF0IG9uY2U6CisgICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICB3aGlsZSAoc25kX215Y2hpcF90cmFuc21pdF9wb3NzaWJsZSgpKSB7CisgICAgICAgICAgdW5zaWduZWQgY2hhciBkYXRhOworICAgICAgICAgIGlmIChzbmRfcmF3bWlkaV90cmFuc21pdChzdWJzdHJlYW0sICZkYXRhLCAxKSAhPSAxKQorICAgICAgICAgICAgICAgICAgYnJlYWs7IC8qIG5vIG1vcmUgZGF0YSAqLworICAgICAgICAgIHNuZF9teWNoaXBfdHJhbnNtaXQoZGF0YSk7CisgIH0KK11dPgorICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBJZiB5b3Uga25vdyBiZWZvcmVoYW5kIGhvdyBtYW55IGJ5dGVzIHlvdSBjYW4gYWNjZXB0LCB5b3UgY2FuCisgICAgICAgIHVzZSBhIGJ1ZmZlciBzaXplIGdyZWF0ZXIgdGhhbiBvbmUgd2l0aCB0aGUKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0KjwvZnVuY3Rpb24+IGZ1bmN0aW9ucy4KKyAgICAgICAgPC9wYXJhPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBtdXN0IG5vdCBzbGVlcC4gIElmCisgICAgICAgIHRoZSBoYXJkd2FyZSBGSUZPIGlzIGZ1bGwgYmVmb3JlIHRoZSBzdWJzdHJlYW0gYnVmZmVyIGhhcyBiZWVuCisgICAgICAgIGVtcHRpZWQsIHlvdSBoYXZlIHRvIGNvbnRpbnVlIHRyYW5zbWl0dGluZyBkYXRhIGxhdGVyLCBlaXRoZXIKKyAgICAgICAgaW4gYW4gaW50ZXJydXB0IGhhbmRsZXIsIG9yIHdpdGggYSB0aW1lciBpZiB0aGUgaGFyZHdhcmUKKyAgICAgICAgZG9lc24ndCBoYXZlIGEgTUlESSB0cmFuc21pdCBpbnRlcnJ1cHQuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmdW5jdGlvbj50cmlnZ2VyPC9mdW5jdGlvbj4gY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggYQorICAgICAgICB6ZXJvIDxwYXJhbWV0ZXI+dXA8L3BhcmFtZXRlcj4gcGFyYW1ldGVyIHdoZW4gdGhlIHRyYW5zbWlzc2lvbgorICAgICAgICBvZiBkYXRhIHNob3VsZCBiZSBhYm9ydGVkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisKKyAgICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vcC10cmlnZ2VyLWluIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+dHJpZ2dlcjwvZnVuY3Rpb24+IGNhbGxiYWNrIGZvciBpbnB1dAorICAgICAgc3Vic3RyZWFtczwvdGl0bGU+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgc25kX3h4eF9pbnB1dF90cmlnZ2VyKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IHVwKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIDxwYXJhPgorICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aXRoIGEgbm9uemVybyA8cGFyYW1ldGVyPnVwPC9wYXJhbWV0ZXI+CisgICAgICAgIHBhcmFtZXRlciB0byBlbmFibGUgcmVjZWl2aW5nIGRhdGEsIG9yIHdpdGggYSB6ZXJvCisgICAgICAgIDxwYXJhbWV0ZXI+dXA8L3BhcmFtZXRlcj4gcGFyYW1ldGVyIGRvIGRpc2FibGUgcmVjZWl2aW5nIGRhdGEuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxmdW5jdGlvbj50cmlnZ2VyPC9mdW5jdGlvbj4gY2FsbGJhY2sgbXVzdCBub3Qgc2xlZXA7IHRoZQorICAgICAgICBhY3R1YWwgcmVhZGluZyBvZiBkYXRhIGZyb20gdGhlIGRldmljZSBpcyB1c3VhbGx5IGRvbmUgaW4gYW4KKyAgICAgICAgaW50ZXJydXB0IGhhbmRsZXIuCisgICAgICAgIDwvcGFyYT4KKworICAgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBkYXRhIHJlY2VwdGlvbiBpcyBlbmFibGVkLCB5b3VyIGludGVycnVwdCBoYW5kbGVyIHNob3VsZAorICAgICAgICBjYWxsIDxmdW5jdGlvbj5zbmRfcmF3bWlkaV9yZWNlaXZlPC9mdW5jdGlvbj4gZm9yIGFsbCByZWNlaXZlZAorICAgICAgICBkYXRhOgorICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgdm9pZCBzbmRfbXljaGlwX21pZGlfaW50ZXJydXB0KC4uLikKKyAgeworICAgICAgICAgIHdoaWxlIChteWNoaXBfbWlkaV9hdmFpbGFibGUoKSkgeworICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBkYXRhOworICAgICAgICAgICAgICAgICAgZGF0YSA9IG15Y2hpcF9taWRpX3JlYWQoKTsKKyAgICAgICAgICAgICAgICAgIHNuZF9yYXdtaWRpX3JlY2VpdmUoc3Vic3RyZWFtLCAmZGF0YSwgMSk7CisgICAgICAgICAgfQorICB9CitdXT4KKyAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgIDwvc2VjdGlvbj4KKworICAgICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW9wLWRyYWluIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+ZHJhaW48L2Z1bmN0aW9uPiBjYWxsYmFjazwvdGl0bGU+CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgc25kX3h4eF9kcmFpbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgaXMgb25seSB1c2VkIHdpdGggb3V0cHV0IHN1YnN0cmVhbXMuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCB3YWl0CisgICAgICAgIHVudGlsIGFsbCBkYXRhIHJlYWQgZnJvbSB0aGUgc3Vic3RyZWFtIGJ1ZmZlciBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuCisgICAgICAgIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBkZXZpY2UgY2FuIGJlIGNsb3NlZCBhbmQgdGhlIGRyaXZlciB1bmxvYWRlZAorICAgICAgICB3aXRob3V0IGxvc2luZyBkYXRhLgorICAgICAgICA8L3BhcmE+CisKKyAgICAgICAgPHBhcmE+CisgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwuIElmIHlvdSBkbyBub3Qgc2V0CisgICAgICAgIDxzdHJ1Y3RmaWVsZD5kcmFpbjwvc3RydWN0ZmllbGQ+IGluIHRoZSBzdHJ1Y3Qgc25kX3Jhd21pZGlfb3BzCisgICAgICAgIHN0cnVjdHVyZSwgQUxTQSB3aWxsIHNpbXBseSB3YWl0IGZvciA1MCZuYnNwO21pbGxpc2Vjb25kcworICAgICAgICBpbnN0ZWFkLgorICAgICAgICA8L3BhcmE+CisgICAgICA8L3NlY3Rpb24+CisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gTWlzY2VsbGFuZW91cyBEZXZpY2VzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0ibWlzYy1kZXZpY2VzIj4KKyAgICA8dGl0bGU+TWlzY2VsbGFuZW91cyBEZXZpY2VzPC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJtaXNjLWRldmljZXMtb3BsMyI+CisgICAgICA8dGl0bGU+Rk0gT1BMMzwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIEZNIE9QTDMgaXMgc3RpbGwgdXNlZCBpbiBtYW55IGNoaXBzIChtYWlubHkgZm9yIGJhY2t3YXJkCisgICAgICBjb21wYXRpYmlsaXR5KS4gQUxTQSBoYXMgYSBuaWNlIE9QTDMgRk0gY29udHJvbCBsYXllciwgdG9vLiBUaGUKKyAgICAgIE9QTDMgQVBJIGlzIGRlZmluZWQgaW4KKyAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvb3BsMy5oJmd0OzwvZmlsZW5hbWU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZNIHJlZ2lzdGVycyBjYW4gYmUgZGlyZWN0bHkgYWNjZXNzZWQgdGhyb3VnaCB0aGUgZGlyZWN0LUZNIEFQSSwKKyAgICAgIGRlZmluZWQgaW4gPGZpbGVuYW1lPiZsdDtzb3VuZC9hc291bmRfZm0uaCZndDs8L2ZpbGVuYW1lPi4gSW4KKyAgICAgIEFMU0EgbmF0aXZlIG1vZGUsIEZNIHJlZ2lzdGVycyBhcmUgYWNjZXNzZWQgdGhyb3VnaAorICAgICAgdGhlIEhhcmR3YXJlLURlcGVuZGFudCBEZXZpY2UgZGlyZWN0LUZNIGV4dGVuc2lvbiBBUEksIHdoZXJlYXMgaW4KKyAgICAgIE9TUyBjb21wYXRpYmxlIG1vZGUsIEZNIHJlZ2lzdGVycyBjYW4gYmUgYWNjZXNzZWQgd2l0aCB0aGUgT1NTCisgICAgICBkaXJlY3QtRk0gY29tcGF0aWJsZSBBUEkgaW4gPGZpbGVuYW1lPi9kZXYvZG1mbVg8L2ZpbGVuYW1lPiBkZXZpY2UuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gY3JlYXRlIHRoZSBPUEwzIGNvbXBvbmVudCwgeW91IGhhdmUgdHdvIGZ1bmN0aW9ucyB0bworICAgICAgICBjYWxsLiBUaGUgZmlyc3Qgb25lIGlzIGEgY29uc3RydWN0b3IgZm9yIHRoZSA8dHlwZT5vcGwzX3Q8L3R5cGU+CisgICAgICAgIGluc3RhbmNlLiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CisgIHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBscG9ydCwgcnBvcnQsIE9QTDNfSFdfT1BMM19YWFgsCisgICAgICAgICAgICAgICAgICBpbnRlZ3JhdGVkLCAmb3BsMyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FyZCBwb2ludGVyLCB0aGUgc2Vjb25kIG9uZSBpcyB0aGUKKyAgICAgIGxlZnQgcG9ydCBhZGRyZXNzLCBhbmQgdGhlIHRoaXJkIGlzIHRoZSByaWdodCBwb3J0IGFkZHJlc3MuIEluCisgICAgICBtb3N0IGNhc2VzLCB0aGUgcmlnaHQgcG9ydCBpcyBwbGFjZWQgYXQgdGhlIGxlZnQgcG9ydCArIDIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGZvdXJ0aCBhcmd1bWVudCBpcyB0aGUgaGFyZHdhcmUgdHlwZS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlIGxlZnQgYW5kIHJpZ2h0IHBvcnRzIGhhdmUgYmVlbiBhbHJlYWR5IGFsbG9jYXRlZCBieQorICAgICAgdGhlIGNhcmQgZHJpdmVyLCBwYXNzIG5vbi16ZXJvIHRvIHRoZSBmaWZ0aCBhcmd1bWVudAorICAgICAgKDxwYXJhbWV0ZXI+aW50ZWdyYXRlZDwvcGFyYW1ldGVyPikuIE90aGVyd2lzZSwgdGhlIG9wbDMgbW9kdWxlIHdpbGwKKyAgICAgIGFsbG9jYXRlIHRoZSBzcGVjaWZpZWQgcG9ydHMgYnkgaXRzZWxmLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFdoZW4gdGhlIGFjY2Vzc2luZyB0aGUgaGFyZHdhcmUgcmVxdWlyZXMgc3BlY2lhbCBtZXRob2QKKyAgICAgICAgaW5zdGVhZCBvZiB0aGUgc3RhbmRhcmQgSS9PIGFjY2VzcywgeW91IGNhbiBjcmVhdGUgb3BsMyBpbnN0YW5jZQorICAgICAgICBzZXBhcmF0ZWx5IHdpdGggPGZ1bmN0aW9uPnNuZF9vcGwzX25ldygpPC9mdW5jdGlvbj4uCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9vcGwzICpvcGwzOworICBzbmRfb3BsM19uZXcoY2FyZCwgT1BMM19IV19PUEwzX1hYWCwgJm9wbDMpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCVRoZW4gc2V0IDxzdHJ1Y3RmaWVsZD5jb21tYW5kPC9zdHJ1Y3RmaWVsZD4sCisJPHN0cnVjdGZpZWxkPnByaXZhdGVfZGF0YTwvc3RydWN0ZmllbGQ+IGFuZAorCTxzdHJ1Y3RmaWVsZD5wcml2YXRlX2ZyZWU8L3N0cnVjdGZpZWxkPiBmb3IgdGhlIHByaXZhdGUKKwlhY2Nlc3MgZnVuY3Rpb24sIHRoZSBwcml2YXRlIGRhdGEgYW5kIHRoZSBkZXN0cnVjdG9yLgorCVRoZSBsX3BvcnQgYW5kIHJfcG9ydCBhcmUgbm90IG5lY2Vzc2FyaWx5IHNldC4gIE9ubHkgdGhlCisJY29tbWFuZCBtdXN0IGJlIHNldCBwcm9wZXJseS4gIFlvdSBjYW4gcmV0cmlldmUgdGhlIGRhdGEKKwlmcm9tIHRoZSBvcGwzLSZndDtwcml2YXRlX2RhdGEgZmllbGQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorCUFmdGVyIGNyZWF0aW5nIHRoZSBvcGwzIGluc3RhbmNlIHZpYSA8ZnVuY3Rpb24+c25kX29wbDNfbmV3KCk8L2Z1bmN0aW9uPiwKKwljYWxsIDxmdW5jdGlvbj5zbmRfb3BsM19pbml0KCk8L2Z1bmN0aW9uPiB0byBpbml0aWFsaXplIHRoZSBjaGlwIHRvIHRoZQorCXByb3BlciBzdGF0ZS4gTm90ZSB0aGF0IDxmdW5jdGlvbj5zbmRfb3BsM19jcmVhdGUoKTwvZnVuY3Rpb24+IGFsd2F5cworCWNhbGxzIGl0IGludGVybmFsbHkuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJZiB0aGUgb3BsMyBpbnN0YW5jZSBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseSwgdGhlbiBjcmVhdGUgYQorICAgICAgICBod2RlcCBkZXZpY2UgZm9yIHRoaXMgb3BsMy4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9od2RlcCAqb3BsM2h3ZGVwOworICBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgJm9wbDNod2RlcCk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgPHR5cGU+b3BsM190PC90eXBlPiBpbnN0YW5jZSB5b3UKKyAgICAgIGNyZWF0ZWQsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBpbmRleCBudW1iZXIsIHVzdWFsbHkgMC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGluZGV4LW9mZnNldCBmb3IgdGhlIHNlcXVlbmNlcgorICAgICAgY2xpZW50IGFzc2lnbmVkIHRvIHRoZSBPUEwzIHBvcnQuIFdoZW4gdGhlcmUgaXMgYW4gTVBVNDAxLVVBUlQsCisgICAgICBnaXZlIDEgZm9yIGhlcmUgKFVBUlQgYWx3YXlzIHRha2VzIDApLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0ibWlzYy1kZXZpY2VzLWhhcmR3YXJlLWRlcGVuZGVudCI+CisgICAgICA8dGl0bGU+SGFyZHdhcmUtRGVwZW5kZW50IERldmljZXM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFNvbWUgY2hpcHMgbmVlZCB1c2VyLXNwYWNlIGFjY2VzcyBmb3Igc3BlY2lhbAorICAgICAgY29udHJvbHMgb3IgZm9yIGxvYWRpbmcgdGhlIG1pY3JvIGNvZGUuIEluIHN1Y2ggYSBjYXNlLCB5b3UgY2FuCisgICAgICBjcmVhdGUgYSBod2RlcCAoaGFyZHdhcmUtZGVwZW5kZW50KSBkZXZpY2UuIFRoZSBod2RlcCBBUEkgaXMKKyAgICAgIGRlZmluZWQgaW4gPGZpbGVuYW1lPiZsdDtzb3VuZC9od2RlcC5oJmd0OzwvZmlsZW5hbWU+LiBZb3UgY2FuCisgICAgICBmaW5kIGV4YW1wbGVzIGluIG9wbDMgZHJpdmVyIG9yCisgICAgICA8ZmlsZW5hbWU+aXNhL3NiL3NiMTZfY3NwLmM8L2ZpbGVuYW1lPi4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgY3JlYXRpb24gb2YgdGhlIDx0eXBlPmh3ZGVwPC90eXBlPiBpbnN0YW5jZSBpcyBkb25lIHZpYQorICAgICAgICA8ZnVuY3Rpb24+c25kX2h3ZGVwX25ldygpPC9mdW5jdGlvbj4uIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfaHdkZXAgKmh3OworICBzbmRfaHdkZXBfbmV3KGNhcmQsICJNeSBIV0RFUCIsIDAsICZodyk7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgICB3aGVyZSB0aGUgdGhpcmQgYXJndW1lbnQgaXMgdGhlIGluZGV4IG51bWJlci4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gdGhlbiBwYXNzIGFueSBwb2ludGVyIHZhbHVlIHRvIHRoZQorICAgICAgICA8cGFyYW1ldGVyPnByaXZhdGVfZGF0YTwvcGFyYW1ldGVyPi4KKyAgICAgICAgSWYgeW91IGFzc2lnbiBhIHByaXZhdGUgZGF0YSwgeW91IHNob3VsZCBkZWZpbmUgdGhlCisgICAgICAgIGRlc3RydWN0b3IsIHRvby4gVGhlIGRlc3RydWN0b3IgZnVuY3Rpb24gaXMgc2V0IGluCisgICAgICAgIHRoZSA8c3RydWN0ZmllbGQ+cHJpdmF0ZV9mcmVlPC9zdHJ1Y3RmaWVsZD4gZmllbGQuICAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdHJ1Y3QgbXlkYXRhICpwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKyAgaHctPnByaXZhdGVfZGF0YSA9IHA7CisgIGh3LT5wcml2YXRlX2ZyZWUgPSBteWRhdGFfZnJlZTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRlc3RydWN0b3Igd291bGQgYmU6CisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHZvaWQgbXlkYXRhX2ZyZWUoc3RydWN0IHNuZF9od2RlcCAqaHcpCisgIHsKKyAgICAgICAgICBzdHJ1Y3QgbXlkYXRhICpwID0gaHctPnByaXZhdGVfZGF0YTsKKyAgICAgICAgICBrZnJlZShwKTsKKyAgfQorXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgYXJiaXRyYXJ5IGZpbGUgb3BlcmF0aW9ucyBjYW4gYmUgZGVmaW5lZCBmb3IgdGhpcworICAgICAgICBpbnN0YW5jZS4gVGhlIGZpbGUgb3BlcmF0b3JzIGFyZSBkZWZpbmVkIGluCisgICAgICAgIHRoZSA8cGFyYW1ldGVyPm9wczwvcGFyYW1ldGVyPiB0YWJsZS4gRm9yIGV4YW1wbGUsIGFzc3VtZSB0aGF0CisgICAgICAgIHRoaXMgY2hpcCBuZWVkcyBhbiBpb2N0bC4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaHctPm9wcy5vcGVuID0gbXlkYXRhX29wZW47CisgIGh3LT5vcHMuaW9jdGwgPSBteWRhdGFfaW9jdGw7CisgIGh3LT5vcHMucmVsZWFzZSA9IG15ZGF0YV9yZWxlYXNlOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgQW5kIGltcGxlbWVudCB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGFzIHlvdSBsaWtlLgorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJtaXNjLWRldmljZXMtSUVDOTU4Ij4KKyAgICAgIDx0aXRsZT5JRUM5NTggKFMvUERJRik8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIFVzdWFsbHkgdGhlIGNvbnRyb2xzIGZvciBJRUM5NTggZGV2aWNlcyBhcmUgaW1wbGVtZW50ZWQgdmlhCisgICAgICB0aGUgY29udHJvbCBpbnRlcmZhY2UuIFRoZXJlIGlzIGEgbWFjcm8gdG8gY29tcG9zZSBhIG5hbWUgc3RyaW5nIGZvcgorICAgICAgSUVDOTU4IGNvbnRyb2xzLCA8ZnVuY3Rpb24+U05EUlZfQ1RMX05BTUVfSUVDOTU4KCk8L2Z1bmN0aW9uPgorICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+Jmx0O2luY2x1ZGUvYXNvdW5kLmgmZ3Q7PC9maWxlbmFtZT4uICAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGNvbnRyb2xzIGZvciBJRUM5NTggc3RhdHVzIGJpdHMuIFRoZXNlCisgICAgICBjb250cm9scyB1c2UgdGhlIHR5cGUgPHR5cGU+U05EUlZfQ1RMX0VMRU1fVFlQRV9JRUM5NTg8L3R5cGU+LAorICAgICAgYW5kIHRoZSBzaXplIG9mIGVsZW1lbnQgaXMgZml4ZWQgYXMgNCBieXRlcyBhcnJheQorICAgICAgKHZhbHVlLmllYzk1OC5zdGF0dXNbeF0pLiBGb3IgdGhlIDxzdHJ1Y3RmaWVsZD5pbmZvPC9zdHJ1Y3RmaWVsZD4KKyAgICAgIGNhbGxiYWNrLCB5b3UgZG9uJ3Qgc3BlY2lmeSAKKyAgICAgIHRoZSB2YWx1ZSBmaWVsZCBmb3IgdGhpcyB0eXBlICh0aGUgY291bnQgZmllbGQgbXVzdCBiZSBzZXQsCisgICAgICB0aG91Z2gpLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIDxxdW90ZT5JRUM5NTggUGxheWJhY2sgQ29uIE1hc2s8L3F1b3RlPiBpcyB1c2VkIHRvIHJldHVybiB0aGUKKyAgICAgIGJpdC1tYXNrIGZvciB0aGUgSUVDOTU4IHN0YXR1cyBiaXRzIG9mIGNvbnN1bWVyIG1vZGUuIFNpbWlsYXJseSwKKyAgICAgIDxxdW90ZT5JRUM5NTggUGxheWJhY2sgUHJvIE1hc2s8L3F1b3RlPiByZXR1cm5zIHRoZSBiaXRtYXNrIGZvcgorICAgICAgcHJvZmVzc2lvbmFsIG1vZGUuIFRoZXkgYXJlIHJlYWQtb25seSBjb250cm9scywgYW5kIGFyZSBkZWZpbmVkCisgICAgICBhcyBNSVhFUiBjb250cm9scyAoaWZhY2UgPQorICAgICAgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSPC9jb25zdGFudD4pLiAgCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBNZWFud2hpbGUsIDxxdW90ZT5JRUM5NTggUGxheWJhY2sgRGVmYXVsdDwvcXVvdGU+IGNvbnRyb2wgaXMKKyAgICAgIGRlZmluZWQgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgdGhlIGN1cnJlbnQgZGVmYXVsdCBJRUM5NTgKKyAgICAgIGJpdHMuIE5vdGUgdGhhdCB0aGlzIG9uZSBpcyB1c3VhbGx5IGRlZmluZWQgYXMgYSBQQ00gY29udHJvbAorICAgICAgKGlmYWNlID0gPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0lGQUNFX1BDTTwvY29uc3RhbnQ+KSwKKyAgICAgIGFsdGhvdWdoIGluIHNvbWUgcGxhY2VzIGl0J3MgZGVmaW5lZCBhcyBhIE1JWEVSIGNvbnRyb2wuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgSW4gYWRkaXRpb24sIHlvdSBjYW4gZGVmaW5lIHRoZSBjb250cm9sIHN3aXRjaGVzIHRvCisgICAgICBlbmFibGUvZGlzYWJsZSBvciB0byBzZXQgdGhlIHJhdyBiaXQgbW9kZS4gVGhlIGltcGxlbWVudGF0aW9uCisgICAgICB3aWxsIGRlcGVuZCBvbiB0aGUgY2hpcCwgYnV0IHRoZSBjb250cm9sIHNob3VsZCBiZSBuYW1lZCBhcworICAgICAgPHF1b3RlPklFQzk1OCB4eHg8L3F1b3RlPiwgcHJlZmVyYWJseSB1c2luZworICAgICAgdGhlIDxmdW5jdGlvbj5TTkRSVl9DVExfTkFNRV9JRUM5NTgoKTwvZnVuY3Rpb24+IG1hY3JvLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFlvdSBjYW4gZmluZCBzZXZlcmFsIGNhc2VzLCBmb3IgZXhhbXBsZSwKKyAgICAgIDxmaWxlbmFtZT5wY2kvZW11MTBrMTwvZmlsZW5hbWU+LAorICAgICAgPGZpbGVuYW1lPnBjaS9pY2UxNzEyPC9maWxlbmFtZT4sIG9yCisgICAgICA8ZmlsZW5hbWU+cGNpL2NtaXBjaS5jPC9maWxlbmFtZT4uICAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBCdWZmZXIgYW5kIE1lbW9yeSBNYW5hZ2VtZW50ICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iYnVmZmVyLWFuZC1tZW1vcnkiPgorICAgIDx0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeSBNYW5hZ2VtZW50PC90aXRsZT4KKworICAgIDxzZWN0aW9uIGlkPSJidWZmZXItYW5kLW1lbW9yeS1idWZmZXItdHlwZXMiPgorICAgICAgPHRpdGxlPkJ1ZmZlciBUeXBlczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgQUxTQSBwcm92aWRlcyBzZXZlcmFsIGRpZmZlcmVudCBidWZmZXIgYWxsb2NhdGlvbiBmdW5jdGlvbnMKKyAgICAgIGRlcGVuZGluZyBvbiB0aGUgYnVzIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLiBBbGwgdGhlc2UgaGF2ZSBhCisgICAgICBjb25zaXN0ZW50IEFQSS4gVGhlIGFsbG9jYXRpb24gb2YgcGh5c2ljYWxseS1jb250aWd1b3VzIHBhZ2VzIGlzCisgICAgICBkb25lIHZpYSAKKyAgICAgIDxmdW5jdGlvbj5zbmRfbWFsbG9jX3h4eF9wYWdlcygpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIHdoZXJlIHh4eAorICAgICAgaXMgdGhlIGJ1cyB0eXBlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIHBhZ2VzIHdpdGggZmFsbGJhY2sgaXMKKyAgICAgIDxmdW5jdGlvbj5zbmRfbWFsbG9jX3h4eF9wYWdlc19mYWxsYmFjaygpPC9mdW5jdGlvbj4uIFRoaXMKKyAgICAgIGZ1bmN0aW9uIHRyaWVzIHRvIGFsbG9jYXRlIHRoZSBzcGVjaWZpZWQgcGFnZXMgYnV0IGlmIHRoZSBwYWdlcworICAgICAgYXJlIG5vdCBhdmFpbGFibGUsIGl0IHRyaWVzIHRvIHJlZHVjZSB0aGUgcGFnZSBzaXplcyB1bnRpbAorICAgICAgZW5vdWdoIHNwYWNlIGlzIGZvdW5kLgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFRoZSByZWxlYXNlIHRoZSBwYWdlcywgY2FsbAorICAgICAgPGZ1bmN0aW9uPnNuZF9mcmVlX3h4eF9wYWdlcygpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgIFVzdWFsbHksIEFMU0EgZHJpdmVycyB0cnkgdG8gYWxsb2NhdGUgYW5kIHJlc2VydmUKKyAgICAgICBhIGxhcmdlIGNvbnRpZ3VvdXMgcGh5c2ljYWwgc3BhY2UKKyAgICAgICBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzIGxvYWRlZCBmb3IgdGhlIGxhdGVyIHVzZS4KKyAgICAgICBUaGlzIGlzIGNhbGxlZCA8cXVvdGU+cHJlLWFsbG9jYXRpb248L3F1b3RlPi4KKyAgICAgICBBcyBhbHJlYWR5IHdyaXR0ZW4sIHlvdSBjYW4gY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIGF0IAorICAgICAgIHBjbSBpbnN0YW5jZSBjb25zdHJ1Y3Rpb24gdGltZSAoaW4gdGhlIGNhc2Ugb2YgUENJIGJ1cykuIAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2RtYV9wY2lfZGF0YShwY2kpLCBzaXplLCBtYXgpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisKKyAgICAgICAgd2hlcmUgPHBhcmFtZXRlcj5zaXplPC9wYXJhbWV0ZXI+IGlzIHRoZSBieXRlIHNpemUgdG8gYmUKKyAgICAgIHByZS1hbGxvY2F0ZWQgYW5kIHRoZSA8cGFyYW1ldGVyPm1heDwvcGFyYW1ldGVyPiBpcyB0aGUgbWF4aW11bQorICAgICAgc2l6ZSB0byBiZSBjaGFuZ2VkIHZpYSB0aGUgPGZpbGVuYW1lPnByZWFsbG9jPC9maWxlbmFtZT4gcHJvYyBmaWxlLgorICAgICAgVGhlIGFsbG9jYXRvciB3aWxsIHRyeSB0byBnZXQgYW4gYXJlYSBhcyBsYXJnZSBhcyBwb3NzaWJsZQorICAgICAgd2l0aGluIHRoZSBnaXZlbiBzaXplLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICBUaGUgc2Vjb25kIGFyZ3VtZW50ICh0eXBlKSBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50IChkZXZpY2UgcG9pbnRlcikKKyAgICAgIGFyZSBkZXBlbmRlbnQgb24gdGhlIGJ1cy4KKyAgICAgIEluIHRoZSBjYXNlIG9mIHRoZSBJU0EgYnVzLCBwYXNzIDxmdW5jdGlvbj5zbmRfZG1hX2lzYV9kYXRhKCk8L2Z1bmN0aW9uPgorICAgICAgYXMgdGhlIHRoaXJkIGFyZ3VtZW50IHdpdGggPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0RFVjwvY29uc3RhbnQ+IHR5cGUuCisgICAgICBGb3IgdGhlIGNvbnRpbnVvdXMgYnVmZmVyIHVucmVsYXRlZCB0byB0aGUgYnVzIGNhbiBiZSBwcmUtYWxsb2NhdGVkCisgICAgICB3aXRoIDxjb25zdGFudD5TTkRSVl9ETUFfVFlQRV9DT05USU5VT1VTPC9jb25zdGFudD4gdHlwZSBhbmQgdGhlCisgICAgICA8ZnVuY3Rpb24+c25kX2RtYV9jb250aW51b3VzX2RhdGEoR0ZQX0tFUk5FTCk8L2Z1bmN0aW9uPiBkZXZpY2UgcG9pbnRlciwKKyAgICAgIHdoZXJlIDxjb25zdGFudD5HRlBfS0VSTkVMPC9jb25zdGFudD4gaXMgdGhlIGtlcm5lbCBhbGxvY2F0aW9uIGZsYWcgdG8KKyAgICAgIHVzZS4KKyAgICAgIEZvciB0aGUgUENJIHNjYXR0ZXItZ2F0aGVyIGJ1ZmZlcnMsIHVzZQorICAgICAgPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0RFVl9TRzwvY29uc3RhbnQ+IHdpdGgKKyAgICAgIDxmdW5jdGlvbj5zbmRfZG1hX3BjaV9kYXRhKHBjaSk8L2Z1bmN0aW9uPgorICAgICAgKHNlZSB0aGUgCisgICAgICAgICAgPGxpbmsgbGlua2VuZD0iYnVmZmVyLWFuZC1tZW1vcnktbm9uLWNvbnRpZ3VvdXMiPjxjaXRldGl0bGU+Tm9uLUNvbnRpZ3VvdXMgQnVmZmVycworICAgICAgICAgIDwvY2l0ZXRpdGxlPjwvbGluaz4gc2VjdGlvbikuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBPbmNlIHRoZSBidWZmZXIgaXMgcHJlLWFsbG9jYXRlZCwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgIGFsbG9jYXRvciBpbiB0aGUgPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrOiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBzaXplKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIE5vdGUgdGhhdCB5b3UgaGF2ZSB0byBwcmUtYWxsb2NhdGUgdG8gdXNlIHRoaXMgZnVuY3Rpb24uCisgICAgICA8L3BhcmE+CisgICAgPC9zZWN0aW9uPgorCisgICAgPHNlY3Rpb24gaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5LWV4dGVybmFsLWhhcmR3YXJlIj4KKyAgICAgIDx0aXRsZT5FeHRlcm5hbCBIYXJkd2FyZSBCdWZmZXJzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBTb21lIGNoaXBzIGhhdmUgdGhlaXIgb3duIGhhcmR3YXJlIGJ1ZmZlcnMgYW5kIHRoZSBETUEKKyAgICAgIHRyYW5zZmVyIGZyb20gdGhlIGhvc3QgbWVtb3J5IGlzIG5vdCBhdmFpbGFibGUuIEluIHN1Y2ggYSBjYXNlLAorICAgICAgeW91IG5lZWQgdG8gZWl0aGVyIDEpIGNvcHkvc2V0IHRoZSBhdWRpbyBkYXRhIGRpcmVjdGx5IHRvIHRoZQorICAgICAgZXh0ZXJuYWwgaGFyZHdhcmUgYnVmZmVyLCBvciAyKSBtYWtlIGFuIGludGVybWVkaWF0ZSBidWZmZXIgYW5kCisgICAgICBjb3B5L3NldCB0aGUgZGF0YSBmcm9tIGl0IHRvIHRoZSBleHRlcm5hbCBoYXJkd2FyZSBidWZmZXIgaW4KKyAgICAgIGludGVycnVwdHMgKG9yIGluIHRhc2tsZXRzLCBwcmVmZXJhYmx5KS4KKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBmaXJzdCBjYXNlIHdvcmtzIGZpbmUgaWYgdGhlIGV4dGVybmFsIGhhcmR3YXJlIGJ1ZmZlciBpcyBsYXJnZQorICAgICAgZW5vdWdoLiAgVGhpcyBtZXRob2QgZG9lc24ndCBuZWVkIGFueSBleHRyYSBidWZmZXJzIGFuZCB0aHVzIGlzCisgICAgICBtb3JlIGVmZmVjdGl2ZS4gWW91IG5lZWQgdG8gZGVmaW5lIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiBhbmQKKyAgICAgIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGZvciAKKyAgICAgIHRoZSBkYXRhIHRyYW5zZmVyLiBIb3dldmVyLCB0aGVyZSBpcyBhIGRyYXdiYWNrOiBpdCBjYW5ub3QKKyAgICAgIGJlIG1tYXBwZWQuIFRoZSBleGFtcGxlcyBhcmUgR1VTJ3MgR0YxIFBDTSBvciBlbXU4MDAwJ3MKKyAgICAgIHdhdmV0YWJsZSBQQ00uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIHNlY29uZCBjYXNlIGFsbG93cyBmb3IgbW1hcCBvbiB0aGUgYnVmZmVyLCBhbHRob3VnaCB5b3UgaGF2ZQorICAgICAgdG8gaGFuZGxlIGFuIGludGVycnVwdCBvciBhIHRhc2tsZXQgdG8gdHJhbnNmZXIgdGhlIGRhdGEKKyAgICAgIGZyb20gdGhlIGludGVybWVkaWF0ZSBidWZmZXIgdG8gdGhlIGhhcmR3YXJlIGJ1ZmZlci4gWW91IGNhbiBmaW5kIGFuCisgICAgICBleGFtcGxlIGluIHRoZSB2eHBvY2tldCBkcml2ZXIuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgQW5vdGhlciBjYXNlIGlzIHdoZW4gdGhlIGNoaXAgdXNlcyBhIFBDSSBtZW1vcnktbWFwCisgICAgICByZWdpb24gZm9yIHRoZSBidWZmZXIgaW5zdGVhZCBvZiB0aGUgaG9zdCBtZW1vcnkuIEluIHRoaXMgY2FzZSwKKyAgICAgIG1tYXAgaXMgYXZhaWxhYmxlIG9ubHkgb24gY2VydGFpbiBhcmNoaXRlY3R1cmVzIGxpa2UgdGhlIEludGVsIG9uZS4KKyAgICAgIEluIG5vbi1tbWFwIG1vZGUsIHRoZSBkYXRhIGNhbm5vdCBiZSB0cmFuc2ZlcnJlZCBhcyBpbiB0aGUgbm9ybWFsCisgICAgICB3YXkuIFRodXMgeW91IG5lZWQgdG8gZGVmaW5lIHRoZSA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgPHN0cnVjdGZpZWxkPnNpbGVuY2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MgYXMgd2VsbCwgCisgICAgICBhcyBpbiB0aGUgY2FzZXMgYWJvdmUuIFRoZSBleGFtcGxlcyBhcmUgZm91bmQgaW4KKyAgICAgIDxmaWxlbmFtZT5ybWUzMi5jPC9maWxlbmFtZT4gYW5kIDxmaWxlbmFtZT5ybWU5Ni5jPC9maWxlbmFtZT4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGFuZAorICAgICAgICA8c3RydWN0ZmllbGQ+c2lsZW5jZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrcyBkZXBlbmRzIHVwb24gCisgICAgICAgIHdoZXRoZXIgdGhlIGhhcmR3YXJlIHN1cHBvcnRzIGludGVybGVhdmVkIG9yIG5vbi1pbnRlcmxlYXZlZAorICAgICAgICBzYW1wbGVzLiBUaGUgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcworICAgICAgICBkZWZpbmVkIGxpa2UgYmVsb3csIGEgYml0IAorICAgICAgICBkaWZmZXJlbnRseSBkZXBlbmRpbmcgd2hldGhlciB0aGUgZGlyZWN0aW9uIGlzIHBsYXliYWNrIG9yCisgICAgICAgIGNhcHR1cmU6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgcGxheWJhY2tfY29weShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNoYW5uZWwsCisgICAgICAgICAgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsIHZvaWQgKnNyYywgc25kX3BjbV91ZnJhbWVzX3QgY291bnQpOworICBzdGF0aWMgaW50IGNhcHR1cmVfY29weShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNoYW5uZWwsCisgICAgICAgICAgICAgICBzbmRfcGNtX3VmcmFtZXNfdCBwb3MsIHZvaWQgKmRzdCwgc25kX3BjbV91ZnJhbWVzX3QgY291bnQpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBpbnRlcmxlYXZlZCBzYW1wbGVzLCB0aGUgc2Vjb25kIGFyZ3VtZW50CisgICAgICAoPHBhcmFtZXRlcj5jaGFubmVsPC9wYXJhbWV0ZXI+KSBpcyBub3QgdXNlZC4gVGhlIHRoaXJkIGFyZ3VtZW50CisgICAgICAoPHBhcmFtZXRlcj5wb3M8L3BhcmFtZXRlcj4pIHBvaW50cyB0aGUgCisgICAgICBjdXJyZW50IHBvc2l0aW9uIG9mZnNldCBpbiBmcmFtZXMuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1lYW5pbmcgb2YgdGhlIGZvdXJ0aCBhcmd1bWVudCBpcyBkaWZmZXJlbnQgYmV0d2VlbgorICAgICAgcGxheWJhY2sgYW5kIGNhcHR1cmUuIEZvciBwbGF5YmFjaywgaXQgaG9sZHMgdGhlIHNvdXJjZSBkYXRhCisgICAgICBwb2ludGVyLCBhbmQgZm9yIGNhcHR1cmUsIGl0J3MgdGhlIGRlc3RpbmF0aW9uIGRhdGEgcG9pbnRlci4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byBiZSBjb3BpZWQuCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBXaGF0IHlvdSBoYXZlIHRvIGRvIGluIHRoaXMgY2FsbGJhY2sgaXMgYWdhaW4gZGlmZmVyZW50CisgICAgICAgIGJldHdlZW4gcGxheWJhY2sgYW5kIGNhcHR1cmUgZGlyZWN0aW9ucy4gSW4gdGhlCisgICAgICAgIHBsYXliYWNrIGNhc2UsIHlvdSBjb3B5IHRoZSBnaXZlbiBhbW91bnQgb2YgZGF0YQorICAgICAgICAoPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPikgYXQgdGhlIHNwZWNpZmllZCBwb2ludGVyCisgICAgICAgICg8cGFyYW1ldGVyPnNyYzwvcGFyYW1ldGVyPikgdG8gdGhlIHNwZWNpZmllZCBvZmZzZXQKKyAgICAgICAgKDxwYXJhbWV0ZXI+cG9zPC9wYXJhbWV0ZXI+KSBvbiB0aGUgaGFyZHdhcmUgYnVmZmVyLiBXaGVuCisgICAgICAgIGNvZGVkIGxpa2UgbWVtY3B5LWxpa2Ugd2F5LCB0aGUgY29weSB3b3VsZCBiZSBsaWtlOiAKKworICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBteV9tZW1jcHkobXlfYnVmZmVyICsgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHBvcyksIHNyYywKKyAgICAgICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBjb3VudCkpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBGb3IgdGhlIGNhcHR1cmUgZGlyZWN0aW9uLCB5b3UgY29weSB0aGUgZ2l2ZW4gYW1vdW50IG9mCisgICAgICAgIGRhdGEgKDxwYXJhbWV0ZXI+Y291bnQ8L3BhcmFtZXRlcj4pIGF0IHRoZSBzcGVjaWZpZWQgb2Zmc2V0CisgICAgICAgICg8cGFyYW1ldGVyPnBvczwvcGFyYW1ldGVyPikgb24gdGhlIGhhcmR3YXJlIGJ1ZmZlciB0byB0aGUKKyAgICAgICAgc3BlY2lmaWVkIHBvaW50ZXIgKDxwYXJhbWV0ZXI+ZHN0PC9wYXJhbWV0ZXI+KS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgbXlfbWVtY3B5KGRzdCwgbXlfYnVmZmVyICsgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHBvcyksCisgICAgICAgICAgICBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgY291bnQpKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICAgIE5vdGUgdGhhdCBib3RoIHRoZSBwb3NpdGlvbiBhbmQgdGhlIGFtb3VudCBvZiBkYXRhIGFyZSBnaXZlbgorICAgICAgaW4gZnJhbWVzLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEluIHRoZSBjYXNlIG9mIG5vbi1pbnRlcmxlYXZlZCBzYW1wbGVzLCB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAgIHdpbGwgYmUgYSBiaXQgbW9yZSBjb21wbGljYXRlZC4gCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBZb3UgbmVlZCB0byBjaGVjayB0aGUgY2hhbm5lbCBhcmd1bWVudCwgYW5kIGlmIGl0J3MgLTEsIGNvcHkKKyAgICAgIHRoZSB3aG9sZSBjaGFubmVscy4gT3RoZXJ3aXNlLCB5b3UgaGF2ZSB0byBjb3B5IG9ubHkgdGhlCisgICAgICBzcGVjaWZpZWQgY2hhbm5lbC4gUGxlYXNlIGNoZWNrCisgICAgICA8ZmlsZW5hbWU+aXNhL2d1cy9ndXNfcGNtLmM8L2ZpbGVuYW1lPiBhcyBhbiBleGFtcGxlLiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+c2lsZW5jZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIGFsc28KKyAgICAgICAgaW1wbGVtZW50ZWQgaW4gYSBzaW1pbGFyIHdheS4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBzaWxlbmNlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY2hhbm5lbCwKKyAgICAgICAgICAgICAgICAgICAgIHNuZF9wY21fdWZyYW1lc190IHBvcywgc25kX3BjbV91ZnJhbWVzX3QgY291bnQpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgbWVhbmluZ3Mgb2YgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBpbiB0aGUKKyAgICAgIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gCisgICAgICBjYWxsYmFjaywgYWx0aG91Z2ggdGhlcmUgaXMgbm8gPHBhcmFtZXRlcj5zcmMvZHN0PC9wYXJhbWV0ZXI+CisgICAgICBhcmd1bWVudC4gSW4gdGhlIGNhc2Ugb2YgaW50ZXJsZWF2ZWQgc2FtcGxlcywgdGhlIGNoYW5uZWwKKyAgICAgIGFyZ3VtZW50IGhhcyBubyBtZWFuaW5nLCBhcyB3ZWxsIGFzIG9uCisgICAgICA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLiAgCisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBUaGUgcm9sZSBvZiA8c3RydWN0ZmllbGQ+c2lsZW5jZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHRvCisgICAgICAgIHNldCB0aGUgZ2l2ZW4gYW1vdW50IAorICAgICAgICAoPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPikgb2Ygc2lsZW5jZSBkYXRhIGF0IHRoZQorICAgICAgICBzcGVjaWZpZWQgb2Zmc2V0ICg8cGFyYW1ldGVyPnBvczwvcGFyYW1ldGVyPikgb24gdGhlIGhhcmR3YXJlCisgICAgICAgIGJ1ZmZlci4gU3VwcG9zZSB0aGF0IHRoZSBkYXRhIGZvcm1hdCBpcyBzaWduZWQgKHRoYXQgaXMsIHRoZQorICAgICAgICBzaWxlbnQtZGF0YSBpcyAwKSwgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBhIG1lbXNldC1saWtlCisgICAgICAgIGZ1bmN0aW9uIHdvdWxkIGJlIGxpa2U6IAorCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIG15X21lbWNweShteV9idWZmZXIgKyBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcG9zKSwgMCwKKyAgICAgICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBjb3VudCkpOworXV0+CisgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgICA8L3BhcmE+CisKKyAgICAgIDxwYXJhPgorICAgICAgICBJbiB0aGUgY2FzZSBvZiBub24taW50ZXJsZWF2ZWQgc2FtcGxlcywgYWdhaW4sIHRoZQorICAgICAgaW1wbGVtZW50YXRpb24gYmVjb21lcyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkLiBTZWUsIGZvciBleGFtcGxlLAorICAgICAgPGZpbGVuYW1lPmlzYS9ndXMvZ3VzX3BjbS5jPC9maWxlbmFtZT4uIAorICAgICAgPC9wYXJhPgorICAgIDwvc2VjdGlvbj4KKworICAgIDxzZWN0aW9uIGlkPSJidWZmZXItYW5kLW1lbW9yeS1ub24tY29udGlndW91cyI+CisgICAgICA8dGl0bGU+Tm9uLUNvbnRpZ3VvdXMgQnVmZmVyczwvdGl0bGU+CisgICAgICA8cGFyYT4KKyAgICAgICAgSWYgeW91ciBoYXJkd2FyZSBzdXBwb3J0cyB0aGUgcGFnZSB0YWJsZSBhcyBpbiBlbXUxMGsxIG9yIHRoZQorICAgICAgYnVmZmVyIGRlc2NyaXB0b3JzIGFzIGluIHZpYTgyeHgsIHlvdSBjYW4gdXNlIHRoZSBzY2F0dGVyLWdhdGhlcgorICAgICAgKFNHKSBETUEuIEFMU0EgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciBoYW5kbGluZyBTRy1idWZmZXJzLgorICAgICAgVGhlIEFQSSBpcyBwcm92aWRlZCBpbiA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3BjbS5oJmd0OzwvZmlsZW5hbWU+LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIEZvciBjcmVhdGluZyB0aGUgU0ctYnVmZmVyIGhhbmRsZXIsIGNhbGwKKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzKCk8L2Z1bmN0aW9uPiBvcgorICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbCgpPC9mdW5jdGlvbj4KKyAgICAgICAgd2l0aCA8Y29uc3RhbnQ+U05EUlZfRE1BX1RZUEVfREVWX1NHPC9jb25zdGFudD4KKwlpbiB0aGUgUENNIGNvbnN0cnVjdG9yIGxpa2Ugb3RoZXIgUENJIHByZS1hbGxvY2F0b3IuCisgICAgICAgIFlvdSBuZWVkIHRvIHBhc3MgPGZ1bmN0aW9uPnNuZF9kbWFfcGNpX2RhdGEocGNpKTwvZnVuY3Rpb24+LAorICAgICAgICB3aGVyZSBwY2kgaXMgdGhlIHN0cnVjdCA8c3RydWN0bmFtZT5wY2lfZGV2PC9zdHJ1Y3RuYW1lPiBwb2ludGVyCisgICAgICAgIG9mIHRoZSBjaGlwIGFzIHdlbGwuCisgICAgICAgIFRoZSA8dHlwZT5zdHJ1Y3Qgc25kX3NnX2J1ZjwvdHlwZT4gaW5zdGFuY2UgaXMgY3JlYXRlZCBhcworICAgICAgICBzdWJzdHJlYW0tJmd0O2RtYV9wcml2YXRlLiBZb3UgY2FuIGNhc3QKKyAgICAgICAgdGhlIHBvaW50ZXIgbGlrZTogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RydWN0IHNuZF9zZ19idWYgKnNnYnVmID0gKHN0cnVjdCBzbmRfc2dfYnVmICopc3Vic3RyZWFtLT5kbWFfcHJpdmF0ZTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlbiBjYWxsIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoKTwvZnVuY3Rpb24+CisgICAgICBpbiB0aGUgPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrCisgICAgICBhcyB3ZWxsIGFzIGluIHRoZSBjYXNlIG9mIG5vcm1hbCBQQ0kgYnVmZmVyLgorICAgICAgVGhlIFNHLWJ1ZmZlciBoYW5kbGVyIHdpbGwgYWxsb2NhdGUgdGhlIG5vbi1jb250aWd1b3VzIGtlcm5lbAorICAgICAgcGFnZXMgb2YgdGhlIGdpdmVuIHNpemUgYW5kIG1hcCB0aGVtIG9udG8gdGhlIHZpcnR1YWxseSBjb250aWd1b3VzCisgICAgICBtZW1vcnkuICBUaGUgdmlydHVhbCBwb2ludGVyIGlzIGFkZHJlc3NlZCBpbiBydW50aW1lLSZndDtkbWFfYXJlYS4KKyAgICAgIFRoZSBwaHlzaWNhbCBhZGRyZXNzIChydW50aW1lLSZndDtkbWFfYWRkcikgaXMgc2V0IHRvIHplcm8sCisgICAgICBiZWNhdXNlIHRoZSBidWZmZXIgaXMgcGh5c2ljYWxseSBub24tY29udGlnb3VzLgorICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3MgdGFibGUgaXMgc2V0IHVwIGluIHNnYnVmLSZndDt0YWJsZS4KKyAgICAgIFlvdSBjYW4gZ2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIGF0IGEgY2VydGFpbiBvZmZzZXQgdmlhCisgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9zZ2J1Zl9nZXRfYWRkcigpPC9mdW5jdGlvbj4uIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgV2hlbiBhIFNHLWhhbmRsZXIgaXMgdXNlZCwgeW91IG5lZWQgdG8gc2V0CisgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9zZ2J1Zl9vcHNfcGFnZTwvZnVuY3Rpb24+IGFzCisgICAgICB0aGUgPHN0cnVjdGZpZWxkPnBhZ2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KKyAgICAgIChTZWUgPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtcGFnZS1jYWxsYmFjayI+CisgICAgICA8Y2l0ZXRpdGxlPnBhZ2UgY2FsbGJhY2sgc2VjdGlvbjwvY2l0ZXRpdGxlPjwvbGluaz4uKQorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVG8gcmVsZWFzZSB0aGUgZGF0YSwgY2FsbAorICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX2ZyZWVfcGFnZXMoKTwvZnVuY3Rpb24+IGluIHRoZQorICAgICAgPHN0cnVjdGZpZWxkPmh3X2ZyZWU8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBhcyB1c3VhbC4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0iYnVmZmVyLWFuZC1tZW1vcnktdm1hbGxvY2VkIj4KKyAgICAgIDx0aXRsZT5WbWFsbG9jJ2VkIEJ1ZmZlcnM8L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEl0J3MgcG9zc2libGUgdG8gdXNlIGEgYnVmZmVyIGFsbG9jYXRlZCB2aWEKKyAgICAgIDxmdW5jdGlvbj52bWFsbG9jPC9mdW5jdGlvbj4sIGZvciBleGFtcGxlLCBmb3IgYW4gaW50ZXJtZWRpYXRlCisgICAgICBidWZmZXIuIFNpbmNlIHRoZSBhbGxvY2F0ZWQgcGFnZXMgYXJlIG5vdCBjb250aWd1b3VzLCB5b3UgbmVlZAorICAgICAgdG8gc2V0IHRoZSA8c3RydWN0ZmllbGQ+cGFnZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIHRvIG9idGFpbgorICAgICAgdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXQgZXZlcnkgb2Zmc2V0LiAKKyAgICAgIDwvcGFyYT4KKworICAgICAgPHBhcmE+CisgICAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiA8c3RydWN0ZmllbGQ+cGFnZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrCisgICAgICAgIHdvdWxkIGJlIGxpa2UgdGhpczogCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworICAvKiBnZXQgdGhlIHBoeXNpY2FsIHBhZ2UgcG9pbnRlciBvbiB0aGUgZ2l2ZW4gb2Zmc2V0ICovCisgIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqbXljaGlwX3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCisgIHsKKyAgICAgICAgICB2b2lkICpwYWdlcHRyID0gc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldDsKKyAgICAgICAgICByZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOworICB9CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBQcm9jIEludGVyZmFjZSAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9InByb2MtaW50ZXJmYWNlIj4KKyAgICA8dGl0bGU+UHJvYyBJbnRlcmZhY2U8L3RpdGxlPgorICAgIDxwYXJhPgorICAgICAgQUxTQSBwcm92aWRlcyBhbiBlYXN5IGludGVyZmFjZSBmb3IgcHJvY2ZzLiBUaGUgcHJvYyBmaWxlcyBhcmUKKyAgICAgIHZlcnkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuIEkgcmVjb21tZW5kIHlvdSBzZXQgdXAgcHJvYyBmaWxlcyBpZgorICAgICAgeW91IHdyaXRlIGEgZHJpdmVyIGFuZCB3YW50IHRvIGdldCBhIHJ1bm5pbmcgc3RhdHVzIG9yIHJlZ2lzdGVyCisgICAgICBkdW1wcy4gVGhlIEFQSSBpcyBmb3VuZCBpbgorICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9pbmZvLmgmZ3Q7PC9maWxlbmFtZT4uIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVG8gY3JlYXRlIGEgcHJvYyBmaWxlLCBjYWxsCisgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfcHJvY19uZXcoKTwvZnVuY3Rpb24+LiAKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnk7CisgIGludCBlcnIgPSBzbmRfY2FyZF9wcm9jX25ldyhjYXJkLCAibXktZmlsZSIsICZlbnRyeSk7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisgICAgICB3aGVyZSB0aGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgcHJvYyBmaWxlIHRvIGJlCisgICAgY3JlYXRlZC4gVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCBjcmVhdGUgYSBmaWxlCisgICAgPGZpbGVuYW1lPm15LWZpbGU8L2ZpbGVuYW1lPiB1bmRlciB0aGUgY2FyZCBkaXJlY3RvcnksCisgICAgZS5nLiA8ZmlsZW5hbWU+L3Byb2MvYXNvdW5kL2NhcmQwL215LWZpbGU8L2ZpbGVuYW1lPi4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgTGlrZSBvdGhlciBjb21wb25lbnRzLCB0aGUgcHJvYyBlbnRyeSBjcmVhdGVkIHZpYQorICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9wcm9jX25ldygpPC9mdW5jdGlvbj4gd2lsbCBiZSByZWdpc3RlcmVkIGFuZAorICAgIHJlbGVhc2VkIGF1dG9tYXRpY2FsbHkgaW4gdGhlIGNhcmQgcmVnaXN0cmF0aW9uIGFuZCByZWxlYXNlCisgICAgZnVuY3Rpb25zLgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgV2hlbiB0aGUgY3JlYXRpb24gaXMgc3VjY2Vzc2Z1bCwgdGhlIGZ1bmN0aW9uIHN0b3JlcyBhIG5ldworICAgIGluc3RhbmNlIGluIHRoZSBwb2ludGVyIGdpdmVuIGluIHRoZSB0aGlyZCBhcmd1bWVudC4KKyAgICBJdCBpcyBpbml0aWFsaXplZCBhcyBhIHRleHQgcHJvYyBmaWxlIGZvciByZWFkIG9ubHkuICBUbyB1c2UKKyAgICB0aGlzIHByb2MgZmlsZSBhcyBhIHJlYWQtb25seSB0ZXh0IGZpbGUgYXMgaXQgaXMsIHNldCB0aGUgcmVhZAorICAgIGNhbGxiYWNrIHdpdGggYSBwcml2YXRlIGRhdGEgdmlhIAorICAgICA8ZnVuY3Rpb24+c25kX2luZm9fc2V0X3RleHRfb3BzKCk8L2Z1bmN0aW9uPi4KKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgbXlfcHJvY19yZWFkKTsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgCisgICAgd2hlcmUgdGhlIHNlY29uZCBhcmd1bWVudCAoPHBhcmFtZXRlcj5jaGlwPC9wYXJhbWV0ZXI+KSBpcyB0aGUKKyAgICBwcml2YXRlIGRhdGEgdG8gYmUgdXNlZCBpbiB0aGUgY2FsbGJhY2tzLiBUaGUgdGhpcmQgcGFyYW1ldGVyCisgICAgc3BlY2lmaWVzIHRoZSByZWFkIGJ1ZmZlciBzaXplIGFuZCB0aGUgZm91cnRoCisgICAgKDxwYXJhbWV0ZXI+bXlfcHJvY19yZWFkPC9wYXJhbWV0ZXI+KSBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoCisgICAgaXMgZGVmaW5lZCBsaWtlCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteV9wcm9jX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcik7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIAorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIEluIHRoZSByZWFkIGNhbGxiYWNrLCB1c2UgPGZ1bmN0aW9uPnNuZF9pcHJpbnRmKCk8L2Z1bmN0aW9uPiBmb3IKKyAgICBvdXRwdXQgc3RyaW5ncywgd2hpY2ggd29ya3MganVzdCBsaWtlIG5vcm1hbAorICAgIDxmdW5jdGlvbj5wcmludGYoKTwvZnVuY3Rpb24+LiAgRm9yIGV4YW1wbGUsCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgdm9pZCBteV9wcm9jX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKKyAgeworICAgICAgICAgIHN0cnVjdCBteV9jaGlwICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKworICAgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIlRoaXMgaXMgbXkgY2hpcCFcbiIpOworICAgICAgICAgIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIlBvcnQgPSAlbGRcbiIsIGNoaXAtPnBvcnQpOworICB9CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoZSBmaWxlIHBlcm1pc3Npb25zIGNhbiBiZSBjaGFuZ2VkIGFmdGVyd2FyZHMuICBBcyBkZWZhdWx0LCBpdCdzCisgICAgc2V0IGFzIHJlYWQgb25seSBmb3IgYWxsIHVzZXJzLiAgSWYgeW91IHdhbnQgdG8gYWRkIHdyaXRlCisgICAgcGVybWlzc2lvbiBmb3IgdGhlIHVzZXIgKHJvb3QgYXMgZGVmYXVsdCksIGRvIGFzIGZvbGxvd3M6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworIGVudHJ5LT5tb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgIGFuZCBzZXQgdGhlIHdyaXRlIGJ1ZmZlciBzaXplIGFuZCB0aGUgY2FsbGJhY2sKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGVudHJ5LT5jLnRleHQud3JpdGUgPSBteV9wcm9jX3dyaXRlOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEZvciB0aGUgd3JpdGUgY2FsbGJhY2ssIHlvdSBjYW4gdXNlCisgICAgPGZ1bmN0aW9uPnNuZF9pbmZvX2dldF9saW5lKCk8L2Z1bmN0aW9uPiB0byBnZXQgYSB0ZXh0IGxpbmUsIGFuZAorICAgIDxmdW5jdGlvbj5zbmRfaW5mb19nZXRfc3RyKCk8L2Z1bmN0aW9uPiB0byByZXRyaWV2ZSBhIHN0cmluZyBmcm9tCisgICAgdGhlIGxpbmUuIFNvbWUgZXhhbXBsZXMgYXJlIGZvdW5kIGluCisgICAgPGZpbGVuYW1lPmNvcmUvb3NzL21peGVyX29zcy5jPC9maWxlbmFtZT4sIGNvcmUvb3NzL2FuZAorICAgIDxmaWxlbmFtZT5wY21fb3NzLmM8L2ZpbGVuYW1lPi4gCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBGb3IgYSByYXctZGF0YSBwcm9jLWZpbGUsIHNldCB0aGUgYXR0cmlidXRlcyBhcyBmb2xsb3dzOgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBzbmRfaW5mb19lbnRyeV9vcHMgbXlfZmlsZV9pb19vcHMgPSB7CisgICAgICAgICAgLnJlYWQgPSBteV9maWxlX2lvX3JlYWQsCisgIH07CisKKyAgZW50cnktPmNvbnRlbnQgPSBTTkRSVl9JTkZPX0NPTlRFTlRfREFUQTsKKyAgZW50cnktPnByaXZhdGVfZGF0YSA9IGNoaXA7CisgIGVudHJ5LT5jLm9wcyA9ICZteV9maWxlX2lvX29wczsKKyAgZW50cnktPnNpemUgPSA0MDk2OworICBlbnRyeS0+bW9kZSA9IFNfSUZSRUcgfCBTX0lSVUdPOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBjYWxsYmFjayBpcyBtdWNoIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGUgdGV4dC1maWxlCisgICAgICB2ZXJzaW9uLiBZb3UgbmVlZCB0byB1c2UgYSBsb3ctbGV2ZWwgSS9PIGZ1bmN0aW9ucyBzdWNoIGFzCisgICAgICA8ZnVuY3Rpb24+Y29weV9mcm9tL3RvX3VzZXIoKTwvZnVuY3Rpb24+IHRvIHRyYW5zZmVyIHRoZQorICAgICAgZGF0YS4KKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBsb25nIG15X2ZpbGVfaW9fcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZmlsZV9wcml2YXRlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcykKKyAgeworICAgICAgICAgIGxvbmcgc2l6ZSA9IGNvdW50OworICAgICAgICAgIGlmIChwb3MgKyBzaXplID4gbG9jYWxfbWF4X3NpemUpCisgICAgICAgICAgICAgICAgICBzaXplID0gbG9jYWxfbWF4X3NpemUgLSBwb3M7CisgICAgICAgICAgaWYgKGNvcHlfdG9fdXNlcihidWYsIGxvY2FsX2RhdGEgKyBwb3MsIHNpemUpKQorICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisgICAgICAgICAgcmV0dXJuIHNpemU7CisgIH0KK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gUG93ZXIgTWFuYWdlbWVudCAgLS0+Cis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgPGNoYXB0ZXIgaWQ9InBvd2VyLW1hbmFnZW1lbnQiPgorICAgIDx0aXRsZT5Qb3dlciBNYW5hZ2VtZW50PC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIElmIHRoZSBjaGlwIGlzIHN1cHBvc2VkIHRvIHdvcmsgd2l0aCBzdXNwZW5kL3Jlc3VtZQorICAgICAgZnVuY3Rpb25zLCB5b3UgbmVlZCB0byBhZGQgcG93ZXItbWFuYWdlbWVudCBjb2RlIHRvIHRoZQorICAgICAgZHJpdmVyLiBUaGUgYWRkaXRpb25hbCBjb2RlIGZvciBwb3dlci1tYW5hZ2VtZW50IHNob3VsZCBiZQorICAgICAgPGZ1bmN0aW9uPmlmZGVmPC9mdW5jdGlvbj4nZWQgd2l0aAorICAgICAgPGNvbnN0YW50PkNPTkZJR19QTTwvY29uc3RhbnQ+LiAKKyAgICA8L3BhcmE+CisKKwk8cGFyYT4KKwlJZiB0aGUgZHJpdmVyIDxlbXBoYXNpcz5mdWxseTwvZW1waGFzaXM+IHN1cHBvcnRzIHN1c3BlbmQvcmVzdW1lCisJdGhhdCBpcywgdGhlIGRldmljZSBjYW4gYmUKKwlwcm9wZXJseSByZXN1bWVkIHRvIGl0cyBzdGF0ZSB3aGVuIHN1c3BlbmQgd2FzIGNhbGxlZCwKKwl5b3UgY2FuIHNldCB0aGUgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1JFU1VNRTwvY29uc3RhbnQ+IGZsYWcKKwlpbiB0aGUgcGNtIGluZm8gZmllbGQuICBVc3VhbGx5LCB0aGlzIGlzIHBvc3NpYmxlIHdoZW4gdGhlCisJcmVnaXN0ZXJzIG9mIHRoZSBjaGlwIGNhbiBiZSBzYWZlbHkgc2F2ZWQgYW5kIHJlc3RvcmVkIHRvCisJUkFNLiBJZiB0aGlzIGlzIHNldCwgdGhlIHRyaWdnZXIgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGgKKwk8Y29uc3RhbnQ+U05EUlZfUENNX1RSSUdHRVJfUkVTVU1FPC9jb25zdGFudD4gYWZ0ZXIgdGhlIHJlc3VtZQorCWNhbGxiYWNrIGNvbXBsZXRlcy4gCisJPC9wYXJhPgorCisJPHBhcmE+CisJRXZlbiBpZiB0aGUgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBQTSBmdWxseSBidXQgCisJcGFydGlhbCBzdXNwZW5kL3Jlc3VtZSBpcyBzdGlsbCBwb3NzaWJsZSwgaXQncyBzdGlsbCB3b3J0aHkgdG8KKwlpbXBsZW1lbnQgc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzLiBJbiBzdWNoIGEgY2FzZSwgYXBwbGljYXRpb25zCisJd291bGQgcmVzZXQgdGhlIHN0YXR1cyBieSBjYWxsaW5nCisJPGZ1bmN0aW9uPnNuZF9wY21fcHJlcGFyZSgpPC9mdW5jdGlvbj4gYW5kIHJlc3RhcnQgdGhlIHN0cmVhbQorCWFwcHJvcHJpYXRlbHkuICBIZW5jZSwgeW91IGNhbiBkZWZpbmUgc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzCisJYmVsb3cgYnV0IGRvbid0IHNldCA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUkVTVU1FPC9jb25zdGFudD4KKwlpbmZvIGZsYWcgdG8gdGhlIFBDTS4KKwk8L3BhcmE+CisJCisJPHBhcmE+CisJTm90ZSB0aGF0IHRoZSB0cmlnZ2VyIHdpdGggU1VTUEVORCBjYW4gYWx3YXlzIGJlIGNhbGxlZCB3aGVuCisJPGZ1bmN0aW9uPnNuZF9wY21fc3VzcGVuZF9hbGw8L2Z1bmN0aW9uPiBpcyBjYWxsZWQsCisJcmVnYXJkbGVzcyBvZiB0aGUgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1JFU1VNRTwvY29uc3RhbnQ+IGZsYWcuCisJVGhlIDxjb25zdGFudD5SRVNVTUU8L2NvbnN0YW50PiBmbGFnIGFmZmVjdHMgb25seSB0aGUgYmVoYXZpb3IKKwlvZiA8ZnVuY3Rpb24+c25kX3BjbV9yZXN1bWUoKTwvZnVuY3Rpb24+LgorCShUaHVzLCBpbiB0aGVvcnksCisJPGNvbnN0YW50PlNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTwvY29uc3RhbnQ+IGlzbid0IG5lZWRlZAorCXRvIGJlIGhhbmRsZWQgaW4gdGhlIHRyaWdnZXIgY2FsbGJhY2sgd2hlbiBubworCTxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19SRVNVTUU8L2NvbnN0YW50PiBmbGFnIGlzIHNldC4gIEJ1dCwKKwlpdCdzIGJldHRlciB0byBrZWVwIGl0IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuKQorCTwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICAgIEluIHRoZSBlYXJsaWVyIHZlcnNpb24gb2YgQUxTQSBkcml2ZXJzLCBhIGNvbW1vbgorICAgICAgcG93ZXItbWFuYWdlbWVudCBsYXllciB3YXMgcHJvdmlkZWQsIGJ1dCBpdCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgVGhlIGRyaXZlciBuZWVkcyB0byBkZWZpbmUgdGhlIHN1c3BlbmQvcmVzdW1lIGhvb2tzIGFjY29yZGluZyB0bworICAgICAgdGhlIGJ1cyB0aGUgZGV2aWNlIGlzIGNvbm5lY3RlZCB0by4gIEluIHRoZSBjYXNlIG9mIFBDSSBkcml2ZXJzLCB0aGUKKyAgICAgIGNhbGxiYWNrcyBsb29rIGxpa2UgYmVsb3c6CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICAjaWZkZWYgQ09ORklHX1BNCisgIHN0YXRpYyBpbnQgc25kX215X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBjaSwgcG1fbWVzc2FnZV90IHN0YXRlKQorICB7CisgICAgICAgICAgLi4uLiAvKiBkbyB0aGluZ3MgZm9yIHN1c3BlbmQgKi8KKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorICBzdGF0aWMgaW50IHNuZF9teV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaSkKKyAgeworICAgICAgICAgIC4uLi4gLyogZG8gdGhpbmdzIGZvciBzdXNwZW5kICovCisgICAgICAgICAgcmV0dXJuIDA7CisgIH0KKyAgI2VuZGlmCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgVGhlIHNjaGVtZSBvZiB0aGUgcmVhbCBzdXNwZW5kIGpvYiBpcyBhcyBmb2xsb3dzLgorCisgICAgICA8b3JkZXJlZGxpc3Q+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZXRyaWV2ZSB0aGUgY2FyZCBhbmQgdGhlIGNoaXAgZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNhbGwgPGZ1bmN0aW9uPnNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoKTwvZnVuY3Rpb24+IHdpdGgKKwkgIDxjb25zdGFudD5TTkRSVl9DVExfUE9XRVJfRDNob3Q8L2NvbnN0YW50PiB0byBjaGFuZ2UgdGhlCisJICBwb3dlciBzdGF0dXMuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5DYWxsIDxmdW5jdGlvbj5zbmRfcGNtX3N1c3BlbmRfYWxsKCk8L2Z1bmN0aW9uPiB0byBzdXNwZW5kIHRoZSBydW5uaW5nIFBDTSBzdHJlYW1zLjwvcGFyYT48L2xpc3RpdGVtPgorCTxsaXN0aXRlbT48cGFyYT5JZiBBQzk3IGNvZGVjcyBhcmUgdXNlZCwgY2FsbAorCTxmdW5jdGlvbj5zbmRfYWM5N19zdXNwZW5kKCk8L2Z1bmN0aW9uPiBmb3IgZWFjaCBjb2RlYy48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlNhdmUgdGhlIHJlZ2lzdGVyIHZhbHVlcyBpZiBuZWNlc3NhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5TdG9wIHRoZSBoYXJkd2FyZSBpZiBuZWNlc3NhcnkuPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT48cGFyYT5EaXNhYmxlIHRoZSBQQ0kgZGV2aWNlIGJ5IGNhbGxpbmcKKwkgIDxmdW5jdGlvbj5wY2lfZGlzYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+LiAgVGhlbiwgY2FsbAorICAgICAgICAgIDxmdW5jdGlvbj5wY2lfc2F2ZV9zdGF0ZSgpPC9mdW5jdGlvbj4gYXQgbGFzdC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBBIHR5cGljYWwgY29kZSB3b3VsZCBiZSBsaWtlOgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBteWNoaXBfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCisgIHsKKyAgICAgICAgICAvKiAoMSkgKi8KKyAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKKyAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworICAgICAgICAgIC8qICgyKSAqLworICAgICAgICAgIHNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKKyAgICAgICAgICAvKiAoMykgKi8KKyAgICAgICAgICBzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7CisgICAgICAgICAgLyogKDQpICovCisgICAgICAgICAgc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3KTsKKyAgICAgICAgICAvKiAoNSkgKi8KKyAgICAgICAgICBzbmRfbXljaGlwX3NhdmVfcmVnaXN0ZXJzKGNoaXApOworICAgICAgICAgIC8qICg2KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfc3RvcF9oYXJkd2FyZShjaGlwKTsKKyAgICAgICAgICAvKiAoNykgKi8KKyAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKyAgICAgICAgICBwY2lfc2F2ZV9zdGF0ZShwY2kpOworICAgICAgICAgIHJldHVybiAwOworICB9CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgIFRoZSBzY2hlbWUgb2YgdGhlIHJlYWwgcmVzdW1lIGpvYiBpcyBhcyBmb2xsb3dzLgorCisgICAgPG9yZGVyZWRsaXN0PgorICAgIDxsaXN0aXRlbT48cGFyYT5SZXRyaWV2ZSB0aGUgY2FyZCBhbmQgdGhlIGNoaXAgZGF0YS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+U2V0IHVwIFBDSS4gRmlyc3QsIGNhbGwgPGZ1bmN0aW9uPnBjaV9yZXN0b3JlX3N0YXRlKCk8L2Z1bmN0aW9uPi4KKyAgICAJVGhlbiBlbmFibGUgdGhlIHBjaSBkZXZpY2UgYWdhaW4gYnkgY2FsbGluZyA8ZnVuY3Rpb24+cGNpX2VuYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+LgorCUNhbGwgPGZ1bmN0aW9uPnBjaV9zZXRfbWFzdGVyKCk8L2Z1bmN0aW9uPiBpZiBuZWNlc3NhcnksIHRvby48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmUtaW5pdGlhbGl6ZSB0aGUgY2hpcC48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzdG9yZSB0aGUgc2F2ZWQgcmVnaXN0ZXJzIGlmIG5lY2Vzc2FyeS48L3BhcmE+PC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzdW1lIHRoZSBtaXhlciwgZS5nLiBjYWxsaW5nCisgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3Jlc3VtZSgpPC9mdW5jdGlvbj4uPC9wYXJhPjwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPjxwYXJhPlJlc3RhcnQgdGhlIGhhcmR3YXJlIChpZiBhbnkpLjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT48cGFyYT5DYWxsIDxmdW5jdGlvbj5zbmRfcG93ZXJfY2hhbmdlX3N0YXRlKCk8L2Z1bmN0aW9uPiB3aXRoCisJPGNvbnN0YW50PlNORFJWX0NUTF9QT1dFUl9EMDwvY29uc3RhbnQ+IHRvIG5vdGlmeSB0aGUgcHJvY2Vzc2VzLjwvcGFyYT48L2xpc3RpdGVtPgorICAgIDwvb3JkZXJlZGxpc3Q+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgQSB0eXBpY2FsIGNvZGUgd291bGQgYmUgbGlrZToKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHN0YXRpYyBpbnQgbXljaGlwX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQorICB7CisgICAgICAgICAgLyogKDEpICovCisgICAgICAgICAgc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBjaSk7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKyAgICAgICAgICAvKiAoMikgKi8KKyAgICAgICAgICBwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOworICAgICAgICAgIHBjaV9lbmFibGVfZGV2aWNlKHBjaSk7CisgICAgICAgICAgcGNpX3NldF9tYXN0ZXIocGNpKTsKKyAgICAgICAgICAvKiAoMykgKi8KKyAgICAgICAgICBzbmRfbXljaGlwX3JlaW5pdF9jaGlwKGNoaXApOworICAgICAgICAgIC8qICg0KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfcmVzdG9yZV9yZWdpc3RlcnMoY2hpcCk7CisgICAgICAgICAgLyogKDUpICovCisgICAgICAgICAgc25kX2FjOTdfcmVzdW1lKGNoaXAtPmFjOTcpOworICAgICAgICAgIC8qICg2KSAqLworICAgICAgICAgIHNuZF9teWNoaXBfcmVzdGFydF9jaGlwKGNoaXApOworICAgICAgICAgIC8qICg3KSAqLworICAgICAgICAgIHNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgfQorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKwlBcyBzaG93biBpbiB0aGUgYWJvdmUsIGl0J3MgYmV0dGVyIHRvIHNhdmUgcmVnaXN0ZXJzIGFmdGVyCisJc3VzcGVuZGluZyB0aGUgUENNIG9wZXJhdGlvbnMgdmlhCisJPGZ1bmN0aW9uPnNuZF9wY21fc3VzcGVuZF9hbGwoKTwvZnVuY3Rpb24+IG9yCisJPGZ1bmN0aW9uPnNuZF9wY21fc3VzcGVuZCgpPC9mdW5jdGlvbj4uICBJdCBtZWFucyB0aGF0IHRoZSBQQ00KKwlzdHJlYW1zIGFyZSBhbHJlYWR5IHN0b3BwcGVkIHdoZW4gdGhlIHJlZ2lzdGVyIHNuYXBzaG90IGlzCisJdGFrZW4uICBCdXQsIHJlbWVtYmVyIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gcmVzdGFydCB0aGUgUENNCisJc3RyZWFtIGluIHRoZSByZXN1bWUgY2FsbGJhY2suIEl0J2xsIGJlIHJlc3RhcnRlZCB2aWEgCisJdHJpZ2dlciBjYWxsIHdpdGggPGNvbnN0YW50PlNORFJWX1BDTV9UUklHR0VSX1JFU1VNRTwvY29uc3RhbnQ+CisJd2hlbiBuZWNlc3NhcnkuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBPSywgd2UgaGF2ZSBhbGwgY2FsbGJhY2tzIG5vdy4gTGV0J3Mgc2V0IHRoZW0gdXAuIEluIHRoZQorICAgICAgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNhcmQsIG1ha2Ugc3VyZSB0aGF0IHlvdSBjYW4gZ2V0IHRoZSBjaGlwCisgICAgICBkYXRhIGZyb20gdGhlIGNhcmQgaW5zdGFuY2UsIHR5cGljYWxseSB2aWEKKyAgICAgIDxzdHJ1Y3RmaWVsZD5wcml2YXRlX2RhdGE8L3N0cnVjdGZpZWxkPiBmaWVsZCwgaW4gY2FzZSB5b3UKKyAgICAgIGNyZWF0ZWQgdGhlIGNoaXAgZGF0YSBpbmRpdmlkdWFsbHkuCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKKyAgeworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKyAgICAgICAgICAuLi4uCisgICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgLi4uLgorICAgICAgICAgIGNhcmQtPnByaXZhdGVfZGF0YSA9IGNoaXA7CisgICAgICAgICAgLi4uLgorICB9CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisJV2hlbiB5b3UgY3JlYXRlZCB0aGUgY2hpcCBkYXRhIHdpdGgKKwk8ZnVuY3Rpb24+c25kX2NhcmRfY3JlYXRlKCk8L2Z1bmN0aW9uPiwgaXQncyBhbnl3YXkgYWNjZXNzaWJsZQorCXZpYSA8c3RydWN0ZmllbGQ+cHJpdmF0ZV9kYXRhPC9zdHJ1Y3RmaWVsZD4gZmllbGQuCisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKKyAgeworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisgICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKKyAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBlcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXljaGlwKSwgJmNhcmQpOworICAgICAgICAgIC4uLi4KKyAgICAgICAgICBjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworICAgICAgICAgIC4uLi4KKyAgfQorXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSWYgeW91IG5lZWQgYSBzcGFjZSB0byBzYXZlIHRoZSByZWdpc3RlcnMsIGFsbG9jYXRlIHRoZQorCWJ1ZmZlciBmb3IgaXQgaGVyZSwgdG9vLCBzaW5jZSBpdCB3b3VsZCBiZSBmYXRhbAorICAgIGlmIHlvdSBjYW5ub3QgYWxsb2NhdGUgYSBtZW1vcnkgaW4gdGhlIHN1c3BlbmQgcGhhc2UuCisgICAgVGhlIGFsbG9jYXRlZCBidWZmZXIgc2hvdWxkIGJlIHJlbGVhc2VkIGluIHRoZSBjb3JyZXNwb25kaW5nCisgICAgZGVzdHJ1Y3Rvci4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIEFuZCBuZXh0LCBzZXQgc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzIHRvIHRoZSBwY2lfZHJpdmVyLgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKKyAgICAgICAgICAubmFtZSA9ICJNeSBDaGlwIiwKKyAgICAgICAgICAuaWRfdGFibGUgPSBzbmRfbXlfaWRzLAorICAgICAgICAgIC5wcm9iZSA9IHNuZF9teV9wcm9iZSwKKyAgICAgICAgICAucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX215X3JlbW92ZSksCisgICNpZmRlZiBDT05GSUdfUE0KKyAgICAgICAgICAuc3VzcGVuZCA9IHNuZF9teV9zdXNwZW5kLAorICAgICAgICAgIC5yZXN1bWUgPSBzbmRfbXlfcmVzdW1lLAorICAjZW5kaWYKKyAgfTsKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+CisgICAgPC9wYXJhPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gTW9kdWxlIFBhcmFtZXRlcnMgIC0tPgorPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CisgIDxjaGFwdGVyIGlkPSJtb2R1bGUtcGFyYW1ldGVycyI+CisgICAgPHRpdGxlPk1vZHVsZSBQYXJhbWV0ZXJzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIFRoZXJlIGFyZSBzdGFuZGFyZCBtb2R1bGUgb3B0aW9ucyBmb3IgQUxTQS4gQXQgbGVhc3QsIGVhY2gKKyAgICAgIG1vZHVsZSBzaG91bGQgaGF2ZSB0aGUgPHBhcmFtZXRlcj5pbmRleDwvcGFyYW1ldGVyPiwKKyAgICAgIDxwYXJhbWV0ZXI+aWQ8L3BhcmFtZXRlcj4gYW5kIDxwYXJhbWV0ZXI+ZW5hYmxlPC9wYXJhbWV0ZXI+CisgICAgICBvcHRpb25zLiAKKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIElmIHRoZSBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMgKHVzdWFsbHkgdXAgdG8KKyAgICAgIDggPSA8Y29uc3RhbnQ+U05EUlZfQ0FSRFM8L2NvbnN0YW50PiBjYXJkcyksIHRoZXkgc2hvdWxkIGJlCisgICAgICBhcnJheXMuIFRoZSBkZWZhdWx0IGluaXRpYWwgdmFsdWVzIGFyZSBkZWZpbmVkIGFscmVhZHkgYXMKKyAgICAgIGNvbnN0YW50cyBmb3IgZWFzaWVyIHByb2dyYW1taW5nOgorCisgICAgICA8aW5mb3JtYWxleGFtcGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKKyAgc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOworICBzdGF0aWMgaW50IGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgSWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBvbmx5IGEgc2luZ2xlIGNhcmQsIHRoZXkgY291bGQgYmUgc2luZ2xlCisgICAgdmFyaWFibGVzLCBpbnN0ZWFkLiAgPHBhcmFtZXRlcj5lbmFibGU8L3BhcmFtZXRlcj4gb3B0aW9uIGlzIG5vdAorICAgIGFsd2F5cyBuZWNlc3NhcnkgaW4gdGhpcyBjYXNlLCBidXQgaXQgd291bGQgYmUgYmV0dGVyIHRvIGhhdmUgYQorICAgIGR1bW15IG9wdGlvbiBmb3IgY29tcGF0aWJpbGl0eS4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgIFRoZSBtb2R1bGUgcGFyYW1ldGVycyBtdXN0IGJlIGRlY2xhcmVkIHdpdGggdGhlIHN0YW5kYXJkCisgICAgPGZ1bmN0aW9uPm1vZHVsZV9wYXJhbSgpKCk8L2Z1bmN0aW9uPiwKKyAgICA8ZnVuY3Rpb24+bW9kdWxlX3BhcmFtX2FycmF5KCkoKTwvZnVuY3Rpb24+IGFuZAorICAgIDxmdW5jdGlvbj5NT0RVTEVfUEFSTV9ERVNDKCk8L2Z1bmN0aW9uPiBtYWNyb3MuCisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgICBUaGUgdHlwaWNhbCBjb2Rpbmcgd291bGQgYmUgbGlrZSBiZWxvdzoKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgICNkZWZpbmUgQ0FSRF9OQU1FICJNeSBDaGlwIgorCisgIG1vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKKyAgTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciAiIENBUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKKyAgbW9kdWxlX3BhcmFtX2FycmF5KGlkLCBjaGFycCwgTlVMTCwgMDQ0NCk7CisgIE1PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yICIgQ0FSRF9OQU1FICIgc291bmRjYXJkLiIpOworICBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlLCBib29sLCBOVUxMLCAwNDQ0KTsKKyAgTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJFbmFibGUgIiBDQVJEX05BTUUgIiBzb3VuZGNhcmQuIik7CitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICAgQWxzbywgZG9uJ3QgZm9yZ2V0IHRvIGRlZmluZSB0aGUgbW9kdWxlIGRlc2NyaXB0aW9uLCBjbGFzc2VzLAorICAgICAgbGljZW5zZSBhbmQgZGV2aWNlcy4gRXNwZWNpYWxseSwgdGhlIHJlY2VudCBtb2Rwcm9iZSByZXF1aXJlcyB0bworICAgICAgZGVmaW5lIHRoZSBtb2R1bGUgbGljZW5zZSBhcyBHUEwsIGV0Yy4sIG90aGVyd2lzZSB0aGUgc3lzdGVtIGlzCisgICAgICBzaG93biBhcyA8cXVvdGU+dGFpbnRlZDwvcXVvdGU+LiAKKworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIE1PRFVMRV9ERVNDUklQVElPTigiTXkgQ2hpcCIpOworICBNT0RVTEVfTElDRU5TRSgiR1BMIik7CisgIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1ZlbmRvcixNeSBDaGlwIE5hbWV9fSIpOworXV0+CisgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKyAgICA8L3BhcmE+CisKKyAgPC9jaGFwdGVyPgorCisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBIb3cgVG8gUHV0IFlvdXIgRHJpdmVyICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iaG93LXRvLXB1dC15b3VyLWRyaXZlciI+CisgICAgPHRpdGxlPkhvdyBUbyBQdXQgWW91ciBEcml2ZXIgSW50byBBTFNBIFRyZWU8L3RpdGxlPgorCTxzZWN0aW9uPgorCTx0aXRsZT5HZW5lcmFsPC90aXRsZT4KKwk8cGFyYT4KKwlTbyBmYXIsIHlvdSd2ZSBsZWFybmVkIGhvdyB0byB3cml0ZSB0aGUgZHJpdmVyIGNvZGVzLgorCUFuZCB5b3UgbWlnaHQgaGF2ZSBhIHF1ZXN0aW9uIG5vdzogaG93IHRvIHB1dCBteSBvd24KKwlkcml2ZXIgaW50byB0aGUgQUxTQSBkcml2ZXIgdHJlZT8KKwlIZXJlIChmaW5hbGx5IDopIHRoZSBzdGFuZGFyZCBwcm9jZWR1cmUgaXMgZGVzY3JpYmVkIGJyaWVmbHkuCisJPC9wYXJhPgorCisJPHBhcmE+CisJU3VwcG9zZSB0aGF0IHlvdSBjcmVhdGUgYSBuZXcgUENJIGRyaXZlciBmb3IgdGhlIGNhcmQKKwk8cXVvdGU+eHl6PC9xdW90ZT4uICBUaGUgY2FyZCBtb2R1bGUgbmFtZSB3b3VsZCBiZQorCXNuZC14eXouICBUaGUgbmV3IGRyaXZlciBpcyB1c3VhbGx5IHB1dCBpbnRvIHRoZSBhbHNhLWRyaXZlcgorCXRyZWUsIDxmaWxlbmFtZT5hbHNhLWRyaXZlci9wY2k8L2ZpbGVuYW1lPiBkaXJlY3RvcnkgaW4KKwl0aGUgY2FzZSBvZiBQQ0kgY2FyZHMuCisJVGhlbiB0aGUgZHJpdmVyIGlzIGV2YWx1YXRlZCwgYXVkaXRlZCBhbmQgdGVzdGVkCisJYnkgZGV2ZWxvcGVycyBhbmQgdXNlcnMuICBBZnRlciBhIGNlcnRhaW4gdGltZSwgdGhlIGRyaXZlcgorCXdpbGwgZ28gdG8gdGhlIGFsc2Eta2VybmVsIHRyZWUgKHRvIHRoZSBjb3JyZXNwb25kaW5nIGRpcmVjdG9yeSwKKwlzdWNoIGFzIDxmaWxlbmFtZT5hbHNhLWtlcm5lbC9wY2k8L2ZpbGVuYW1lPikgYW5kIGV2ZW50dWFsbHkKKyAJd2lsbCBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIExpbnV4IDIuNiB0cmVlICh0aGUgZGlyZWN0b3J5IHdvdWxkIGJlCisJPGZpbGVuYW1lPmxpbnV4L3NvdW5kL3BjaTwvZmlsZW5hbWU+KS4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCB0aGUgZHJpdmVyIGNvZGUgaXMgc3VwcG9zZWQKKwl0byBiZSBwdXQgaW50byBhbHNhLWRyaXZlciB0cmVlLiBUaGUgdHdvIGNhc2VzIGFyZSBjb3ZlcmVkOgorCWEgZHJpdmVyIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgc291cmNlIGZpbGUgYW5kIG9uZSBjb25zaXN0aW5nCisJb2Ygc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworCTxzZWN0aW9uPgorCTx0aXRsZT5Ecml2ZXIgd2l0aCBBIFNpbmdsZSBTb3VyY2UgRmlsZTwvdGl0bGU+CisJPHBhcmE+CisJPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlNb2RpZnkgYWxzYS1kcml2ZXIvcGNpL01ha2VmaWxlCisJPC9wYXJhPgorCisJPHBhcmE+CisJU3VwcG9zZSB5b3UgaGF2ZSBhIGZpbGUgeHl6LmMuICBBZGQgdGhlIGZvbGxvd2luZworCXR3byBsaW5lcworICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIHNuZC14eXotb2JqcyA6PSB4eXoubworICBvYmotJChDT05GSUdfU05EX1hZWikgKz0gc25kLXh5ei5vCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCUNyZWF0ZSB0aGUgS2NvbmZpZyBlbnRyeQorCTwvcGFyYT4KKworCTxwYXJhPgorCUFkZCB0aGUgbmV3IGVudHJ5IG9mIEtjb25maWcgZm9yIHlvdXIgeHl6IGRyaXZlci4KKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBjb25maWcgU05EX1hZWgorICAgICAgICAgIHRyaXN0YXRlICJGb29iYXIgWFlaIgorICAgICAgICAgIGRlcGVuZHMgb24gU05ECisgICAgICAgICAgc2VsZWN0IFNORF9QQ00KKyAgICAgICAgICBoZWxwCisgICAgICAgICAgICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRm9vYmFyIFhZWiBzb3VuZGNhcmQuCisKKyAgICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKyAgICAgICAgICAgIHdpbGwgYmUgY2FsbGVkIHNuZC14eXouCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCisJdGhlIGxpbmUsIHNlbGVjdCBTTkRfUENNLCBzcGVjaWZpZXMgdGhhdCB0aGUgZHJpdmVyIHh5eiBzdXBwb3J0cworCVBDTS4gIEluIGFkZGl0aW9uIHRvIFNORF9QQ00sIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBhcmUKKwlzdXBwb3J0ZWQgZm9yIHNlbGVjdCBjb21tYW5kOgorCVNORF9SQVdNSURJLCBTTkRfVElNRVIsIFNORF9IV0RFUCwgU05EX01QVTQwMV9VQVJULAorCVNORF9PUEwzX0xJQiwgU05EX09QTDRfTElCLCBTTkRfVlhfTElCLCBTTkRfQUM5N19DT0RFQy4KKwlBZGQgdGhlIHNlbGVjdCBjb21tYW5kIGZvciBlYWNoIHN1cHBvcnRlZCBjb21wb25lbnQuCisJPC9wYXJhPgorCisJPHBhcmE+CisJTm90ZSB0aGF0IHNvbWUgc2VsZWN0aW9ucyBpbXBseSB0aGUgbG93bGV2ZWwgc2VsZWN0aW9ucy4KKwlGb3IgZXhhbXBsZSwgUENNIGluY2x1ZGVzIFRJTUVSLCBNUFU0MDFfVUFSVCBpbmNsdWRlcyBSQVdNSURJLAorCUFDOTdfQ09ERUMgaW5jbHVkZXMgUENNLCBhbmQgT1BMM19MSUIgaW5jbHVkZXMgSFdERVAuCisJWW91IGRvbid0IG5lZWQgdG8gZ2l2ZSB0aGUgbG93bGV2ZWwgc2VsZWN0aW9ucyBhZ2Fpbi4KKwk8L3BhcmE+CisKKwk8cGFyYT4KKwlGb3IgdGhlIGRldGFpbHMgb2YgS2NvbmZpZyBzY3JpcHQsIHJlZmVyIHRvIHRoZSBrYnVpbGQKKwlkb2N1bWVudGF0aW9uLgorCTwvcGFyYT4KKworCTwvbGlzdGl0ZW0+CisKKwk8bGlzdGl0ZW0+CisJPHBhcmE+CisJUnVuIGN2c2NvbXBpbGUgc2NyaXB0IHRvIHJlLWdlbmVyYXRlIHRoZSBjb25maWd1cmUgc2NyaXB0IGFuZAorCWJ1aWxkIHRoZSB3aG9sZSBzdHVmZiBhZ2Fpbi4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKwk8L29yZGVyZWRsaXN0PgorCTwvcGFyYT4KKwk8L3NlY3Rpb24+CisKKwk8c2VjdGlvbj4KKwk8dGl0bGU+RHJpdmVycyB3aXRoIFNldmVyYWwgU291cmNlIEZpbGVzPC90aXRsZT4KKwk8cGFyYT4KKwlTdXBwb3NlIHRoYXQgdGhlIGRyaXZlciBzbmQteHl6IGhhdmUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCisJVGhleSBhcmUgbG9jYXRlZCBpbiB0aGUgbmV3IHN1YmRpcmVjdG9yeSwKKwlwY2kveHl6LgorCisJPG9yZGVyZWRsaXN0PgorCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlBZGQgYSBuZXcgZGlyZWN0b3J5ICg8ZmlsZW5hbWU+eHl6PC9maWxlbmFtZT4pIGluCisJPGZpbGVuYW1lPmFsc2EtZHJpdmVyL3BjaS9NYWtlZmlsZTwvZmlsZW5hbWU+IGFzIGJlbG93CisKKyAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KKzwhW0NEQVRBWworICBvYmotJChDT05GSUdfU05EKSArPSB4eXovCitdXT4KKyAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KKyAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCVVuZGVyIHRoZSBkaXJlY3RvcnkgPGZpbGVuYW1lPnh5ejwvZmlsZW5hbWU+LCBjcmVhdGUgYSBNYWtlZmlsZQorCisgICAgICA8ZXhhbXBsZT4KKwk8dGl0bGU+U2FtcGxlIE1ha2VmaWxlIGZvciBhIGRyaXZlciB4eXo8L3RpdGxlPgorICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgaWZuZGVmIFNORF9UT1BESVIKKyAgU05EX1RPUERJUj0uLi8uLgorICBlbmRpZgorCisgIGluY2x1ZGUgJChTTkRfVE9QRElSKS90b3BsZXZlbC5jb25maWcKKyAgaW5jbHVkZSAkKFNORF9UT1BESVIpL01ha2VmaWxlLmNvbmYKKworICBzbmQteHl6LW9ianMgOj0geHl6Lm8gYWJjLm8gZGVmLm8KKworICBvYmotJChDT05GSUdfU05EX1hZWikgKz0gc25kLXh5ei5vCisKKyAgaW5jbHVkZSAkKFNORF9UT1BESVIpL1J1bGVzLm1ha2UKK11dPgorICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgPC9leGFtcGxlPgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCisJPGxpc3RpdGVtPgorCTxwYXJhPgorCUNyZWF0ZSB0aGUgS2NvbmZpZyBlbnRyeQorCTwvcGFyYT4KKworCTxwYXJhPgorCVRoaXMgcHJvY2VkdXJlIGlzIGFzIHNhbWUgYXMgaW4gdGhlIGxhc3Qgc2VjdGlvbi4KKwk8L3BhcmE+CisJPC9saXN0aXRlbT4KKworCTxsaXN0aXRlbT4KKwk8cGFyYT4KKwlSdW4gY3ZzY29tcGlsZSBzY3JpcHQgdG8gcmUtZ2VuZXJhdGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYW5kCisJYnVpbGQgdGhlIHdob2xlIHN0dWZmIGFnYWluLgorCTwvcGFyYT4KKwk8L2xpc3RpdGVtPgorCTwvb3JkZXJlZGxpc3Q+CisJPC9wYXJhPgorCTwvc2VjdGlvbj4KKworICA8L2NoYXB0ZXI+CisKKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorPCEtLSBVc2VmdWwgRnVuY3Rpb25zICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0idXNlZnVsLWZ1bmN0aW9ucyI+CisgICAgPHRpdGxlPlVzZWZ1bCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICAgPHNlY3Rpb24gaWQ9InVzZWZ1bC1mdW5jdGlvbnMtc25kLXByaW50ayI+CisgICAgICA8dGl0bGU+PGZ1bmN0aW9uPnNuZF9wcmludGsoKTwvZnVuY3Rpb24+IGFuZCBmcmllbmRzPC90aXRsZT4KKyAgICAgIDxwYXJhPgorICAgICAgICBBTFNBIHByb3ZpZGVzIGEgdmVyYm9zZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgPGZ1bmN0aW9uPnByaW50aygpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIElmIGEga2VybmVsIGNvbmZpZworICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs8L2NvbnN0YW50PiBpcyBzZXQsIHRoaXMKKyAgICAgIGZ1bmN0aW9uIHByaW50cyB0aGUgZ2l2ZW4gbWVzc2FnZSB0b2dldGhlciB3aXRoIHRoZSBmaWxlIG5hbWUKKyAgICAgIGFuZCB0aGUgbGluZSBvZiB0aGUgY2FsbGVyLiBUaGUgPGNvbnN0YW50PktFUk5fWFhYPC9jb25zdGFudD4KKyAgICAgIHByZWZpeCBpcyBwcm9jZXNzZWQgYXMgCisgICAgICB3ZWxsIGFzIHRoZSBvcmlnaW5hbCA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPiBkb2VzLCBzbyBpdCdzCisgICAgICByZWNvbW1lbmRlZCB0byBhZGQgdGhpcyBwcmVmaXgsIGUuZy4gCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX3ByaW50ayhLRVJOX0VSUiAiT2ggbXksIHNvcnJ5LCBpdCdzIGV4dHJlbWVseSBiYWQhXG4iKTsKK11dPgorICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+CisgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlcmUgYXJlIGFsc28gPGZ1bmN0aW9uPnByaW50aygpPC9mdW5jdGlvbj4ncyBmb3IKKyAgICAgIGRlYnVnZ2luZy4gPGZ1bmN0aW9uPnNuZF9wcmludGQoKTwvZnVuY3Rpb24+IGNhbiBiZSB1c2VkIGZvcgorICAgICAgZ2VuZXJhbCBkZWJ1Z2dpbmcgcHVycG9zZXMuIElmCisgICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9ERUJVRzwvY29uc3RhbnQ+IGlzIHNldCwgdGhpcyBmdW5jdGlvbiBpcworICAgICAgY29tcGlsZWQsIGFuZCB3b3JrcyBqdXN0IGxpa2UKKyAgICAgIDxmdW5jdGlvbj5zbmRfcHJpbnRrKCk8L2Z1bmN0aW9uPi4gSWYgdGhlIEFMU0EgaXMgY29tcGlsZWQKKyAgICAgIHdpdGhvdXQgdGhlIGRlYnVnZ2luZyBmbGFnLCBpdCdzIGlnbm9yZWQuIAorICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgPGZ1bmN0aW9uPnNuZF9wcmludGRkKCk8L2Z1bmN0aW9uPiBpcyBjb21waWxlZCBpbiBvbmx5IHdoZW4KKyAgICAgIDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHX1ZFUkJPU0U8L2NvbnN0YW50PiBpcyBzZXQuIFBsZWFzZSBub3RlCisgICAgICB0aGF0IDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHX1ZFUkJPU0U8L2NvbnN0YW50PiBpcyBub3Qgc2V0IGFzIGRlZmF1bHQKKyAgICAgIGV2ZW4gaWYgeW91IGNvbmZpZ3VyZSB0aGUgYWxzYS1kcml2ZXIgd2l0aAorICAgICAgPG9wdGlvbj4tLXdpdGgtZGVidWc9ZnVsbDwvb3B0aW9uPiBvcHRpb24uIFlvdSBuZWVkIHRvIGdpdmUKKyAgICAgIGV4cGxpY2l0bHkgPG9wdGlvbj4tLXdpdGgtZGVidWc9ZGV0ZWN0PC9vcHRpb24+IG9wdGlvbiBpbnN0ZWFkLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlZnVsLWZ1bmN0aW9ucy1zbmQtYnVnIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX0JVRygpPC9mdW5jdGlvbj48L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIEl0IHNob3dzIHRoZSA8Y29tcHV0ZXJvdXRwdXQ+QlVHPzwvY29tcHV0ZXJvdXRwdXQ+IG1lc3NhZ2UgYW5kCisgICAgICBzdGFjayB0cmFjZSBhcyB3ZWxsIGFzIDxmdW5jdGlvbj5zbmRfQlVHX09OPC9mdW5jdGlvbj4gYXQgdGhlIHBvaW50LgorICAgICAgSXQncyB1c2VmdWwgdG8gc2hvdyB0aGF0IGEgZmF0YWwgZXJyb3IgaGFwcGVucyB0aGVyZS4gCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKwkgV2hlbiBubyBkZWJ1ZyBmbGFnIGlzIHNldCwgdGhpcyBtYWNybyBpcyBpZ25vcmVkLiAKKyAgICAgIDwvcGFyYT4KKyAgICA8L3NlY3Rpb24+CisKKyAgICA8c2VjdGlvbiBpZD0idXNlZnVsLWZ1bmN0aW9ucy1zbmQtYnVnLW9uIj4KKyAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX0JVR19PTigpPC9mdW5jdGlvbj48L3RpdGxlPgorICAgICAgPHBhcmE+CisgICAgICAgIDxmdW5jdGlvbj5zbmRfQlVHX09OKCk8L2Z1bmN0aW9uPiBtYWNybyBpcyBzaW1pbGFyIHdpdGgKKwk8ZnVuY3Rpb24+V0FSTl9PTigpPC9mdW5jdGlvbj4gbWFjcm8uIEZvciBleGFtcGxlLCAgCisKKyAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KKyAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Cis8IVtDREFUQVsKKyAgc25kX0JVR19PTighcG9pbnRlcik7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworCW9yIGl0IGNhbiBiZSB1c2VkIGFzIHRoZSBjb25kaXRpb24sCisgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+CisgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgorPCFbQ0RBVEFbCisgIGlmIChzbmRfQlVHX09OKG5vbl96ZXJvX2lzX2J1ZykpCisgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CitdXT4KKyAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgorICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KKworICAgICAgPC9wYXJhPgorCisgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIG1hY3JvIHRha2VzIGFuIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUuCisJV2hlbiA8Y29uc3RhbnQ+Q09ORklHX1NORF9ERUJVRzwvY29uc3RhbnQ+LCBpcyBzZXQsIHRoZQorCWV4cHJlc3Npb24gaXMgYWN0dWFsbHkgZXZhbHVhdGVkLiBJZiBpdCdzIG5vbi16ZXJvLCBpdCBzaG93cworCXRoZSB3YXJuaW5nIG1lc3NhZ2Ugc3VjaCBhcworCTxjb21wdXRlcm91dHB1dD5CVUc/ICh4eHgpPC9jb21wdXRlcm91dHB1dD4KKwlub3JtYWxseSBmb2xsb3dlZCBieSBzdGFjayB0cmFjZS4gIEl0IHJldHVybnMgdGhlIGV2YWx1YXRlZAorCXZhbHVlLgorCVdoZW4gbm8gPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUc8L2NvbnN0YW50PiBpcyBzZXQsIHRoaXMKKwltYWNybyBhbHdheXMgcmV0dXJucyB6ZXJvLgorICAgICAgPC9wYXJhPgorCisgICAgPC9zZWN0aW9uPgorCisgIDwvY2hhcHRlcj4KKworCis8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKzwhLS0gQWNrbm93bGVkZ21lbnRzICAtLT4KKzwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICA8Y2hhcHRlciBpZD0iYWNrbm93bGVkZ21lbnRzIj4KKyAgICA8dGl0bGU+QWNrbm93bGVkZ21lbnRzPC90aXRsZT4KKyAgICA8cGFyYT4KKyAgICAgIEkgd291bGQgbGlrZSB0byB0aGFuayBQaGlsIEtlcnIgZm9yIGhpcyBoZWxwIGZvciBpbXByb3ZlbWVudCBhbmQKKyAgICAgIGNvcnJlY3Rpb25zIG9mIHRoaXMgZG9jdW1lbnQuIAorICAgIDwvcGFyYT4KKyAgICA8cGFyYT4KKyAgICBLZXZpbiBDb25kZXIgcmVmb3JtYXR0ZWQgdGhlIG9yaWdpbmFsIHBsYWluLXRleHQgdG8gdGhlCisgICAgRG9jQm9vayBmb3JtYXQuCisgICAgPC9wYXJhPgorICAgIDxwYXJhPgorICAgIEdpdWxpYW5vIFBvY2hpbmkgY29ycmVjdGVkIHR5cG9zIGFuZCBjb250cmlidXRlZCB0aGUgZXhhbXBsZSBjb2RlcworICAgIGluIHRoZSBoYXJkd2FyZSBjb25zdHJhaW50cyBzZWN0aW9uLgorICAgIDwvcGFyYT4KKyAgPC9jaGFwdGVyPgorPC9ib29rPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0CmluZGV4IDBkYWI2ZTMuLmEzMGZlNTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQKQEAgLTQwLDEzICs0MCwxMyBAQAogTWFjaGluZSBTdXBwb3J0CiAtLS0tLS0tLS0tLS0tLS0KIAotICBUaGUgbWFjaGluZSBzcGVjaWZpYyBmdW5jdGlvbnMgbXVzdCBjYWxsIHRoZSBzM2MyNDEwX3BtX2luaXQoKSBmdW5jdGlvbgorICBUaGUgbWFjaGluZSBzcGVjaWZpYyBmdW5jdGlvbnMgbXVzdCBjYWxsIHRoZSBzM2NfcG1faW5pdCgpIGZ1bmN0aW9uCiAgIHRvIHNheSB0aGF0IGl0cyBib290bG9hZGVyIGlzIGNhcGFibGUgb2YgcmVzdW1pbmcuIFRoaXMgY2FuIGJlIGFzCiAgIHNpbXBsZSBhcyBhZGRpbmcgdGhlIGZvbGxvd2luZyB0byB0aGUgbWFjaGluZSdzIGRlZmluaXRpb246CiAKLSAgSU5JVE1BQ0hJTkUoczNjMjQxMF9wbV9pbml0KQorICBJTklUTUFDSElORShzM2NfcG1faW5pdCkKIAotICBBIGJvYXJkIGNhbiBkbyBpdHMgb3duIHNldHVwIGJlZm9yZSBjYWxsaW5nIHMzYzI0MTBfcG1faW5pdCwgaWYgaXQKKyAgQSBib2FyZCBjYW4gZG8gaXRzIG93biBzZXR1cCBiZWZvcmUgY2FsbGluZyBzM2NfcG1faW5pdCwgaWYgaXQKICAgbmVlZHMgdG8gc2V0dXAgYW55dGhpbmcgZWxzZSBmb3IgcG93ZXIgbWFuYWdlbWVudCBzdXBwb3J0LgogCiAgIFRoZXJlIGlzIGN1cnJlbnRseSBubyBzdXBwb3J0IGZvciBvdmVyLXJpZGluZyB0aGUgZGVmYXVsdCBtZXRob2Qgb2YKQEAgLTc0LDcgKzc0LDcgQEAKIAogCWVuYWJsZV9pcnFfd2FrZShJUlFfRUlOVDApOwogCi0JczNjMjQxMF9wbV9pbml0KCk7CisJczNjX3BtX2luaXQoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vbWVtb3J5LnR4dAppbmRleCBkYzYwNDU1Li40M2NiMTAwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9tZW1vcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYXJtL21lbW9yeS50eHQKQEAgLTI5LDcgKzI5LDE0IEBACiAJCQkJQ1BVIHN1cHBvcnRzIHZlY3RvciByZWxvY2F0aW9uIChjb250cm9sCiAJCQkJcmVnaXN0ZXIgViBiaXQuKQogCi1mZmMwMDAwMAlmZmZlZmZmZglETUEgbWVtb3J5IG1hcHBpbmcgcmVnaW9uLiAgTWVtb3J5IHJldHVybmVkCitmZmZlMDAwMAlmZmZlZmZmZglYU2NhbGUgY2FjaGUgZmx1c2ggYXJlYS4gIFRoaXMgaXMgdXNlZAorCQkJCWluIHByb2MteHNjYWxlLlMgdG8gZmx1c2ggdGhlIHdob2xlIGRhdGEKKwkJCQljYWNoZS4gIEZyZWUgZm9yIG90aGVyIHVzYWdlIG9uIG5vbi1YU2NhbGUuCisKK2ZmZjAwMDAwCWZmZmRmZmZmCUZpeG1hcCBtYXBwaW5nIHJlZ2lvbi4gIEFkZHJlc3NlcyBwcm92aWRlZAorCQkJCWJ5IGZpeF90b192aXJ0KCkgd2lsbCBiZSBsb2NhdGVkIGhlcmUuCisKK2ZmYzAwMDAwCWZmZWZmZmZmCURNQSBtZW1vcnkgbWFwcGluZyByZWdpb24uICBNZW1vcnkgcmV0dXJuZWQKIAkJCQlieSB0aGUgZG1hX2FsbG9jX3h4eCBmdW5jdGlvbnMgd2lsbCBiZQogCQkJCWR5bmFtaWNhbGx5IG1hcHBlZCBoZXJlLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Jsb2NrL3N3aXRjaGluZy1zY2hlZC50eHQgYi9Eb2N1bWVudGF0aW9uL2Jsb2NrL3N3aXRjaGluZy1zY2hlZC50eHQKaW5kZXggNjM0Yzk1Mi4uZDVhZjNmNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibG9jay9zd2l0Y2hpbmctc2NoZWQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vYmxvY2svc3dpdGNoaW5nLXNjaGVkLnR4dApAQCAtMzUsOSArMzUsMyBAQAogIyBlY2hvIGFudGljaXBhdG9yeSA+IC9zeXMvYmxvY2svaGRhL3F1ZXVlL3NjaGVkdWxlcgogIyBjYXQgL3N5cy9ibG9jay9oZGEvcXVldWUvc2NoZWR1bGVyCiBub29wIFthbnRpY2lwYXRvcnldIGRlYWRsaW5lIGNmcQotCi1FYWNoIGlvIHF1ZXVlIGhhcyBhIHNldCBvZiBpbyBzY2hlZHVsZXIgdHVuYWJsZXMgYXNzb2NpYXRlZCB3aXRoIGl0LiBUaGVzZQotdHVuYWJsZXMgY29udHJvbCBob3cgdGhlIGlvIHNjaGVkdWxlciB3b3Jrcy4gWW91IGNhbiBmaW5kIHRoZXNlIGVudHJpZXMKLWluOgotCi0vc3lzL2Jsb2NrLzxkZXZpY2U+L3F1ZXVlL2lvc2NoZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dCBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dAppbmRleCA1YjBjZmE2Li5jZTczZjNlYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9nb3Zlcm5vcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvZ292ZXJub3JzLnR4dApAQCAtMTE3LDEwICsxMTcsMjggQEAKIHNhbXBsaW5nX3JhdGU6IG1lYXN1cmVkIGluIHVTICgxMF4tNiBzZWNvbmRzKSwgdGhpcyBpcyBob3cgb2Z0ZW4geW91CiB3YW50IHRoZSBrZXJuZWwgdG8gbG9vayBhdCB0aGUgQ1BVIHVzYWdlIGFuZCB0byBtYWtlIGRlY2lzaW9ucyBvbgogd2hhdCB0byBkbyBhYm91dCB0aGUgZnJlcXVlbmN5LiAgVHlwaWNhbGx5IHRoaXMgaXMgc2V0IHRvIHZhbHVlcyBvZgotYXJvdW5kICcxMDAwMCcgb3IgbW9yZS4KK2Fyb3VuZCAnMTAwMDAnIG9yIG1vcmUuIEl0J3MgZGVmYXVsdCB2YWx1ZSBpcyAoY21wLiB3aXRoIHVzZXJzLWd1aWRlLnR4dCk6Cit0cmFuc2l0aW9uX2xhdGVuY3kgKiAxMDAwCitUaGUgbG93ZXN0IHZhbHVlIHlvdSBjYW4gc2V0IGlzOgordHJhbnNpdGlvbl9sYXRlbmN5ICogMTAwIG9yIGl0IG1heSBnZXQgcmVzdHJpY3RlZCB0byBhIHZhbHVlIHdoZXJlIGl0CittYWtlcyBub3Qgc2Vuc2UgZm9yIHRoZSBrZXJuZWwgYW55bW9yZSB0byBwb2xsIHRoYXQgb2Z0ZW4gd2hpY2ggZGVwZW5kcworb24geW91ciBIWiBjb25maWcgdmFyaWFibGUgKEhaPTEwMDA6IG1heD0yMDAwMHVzLCBIWj0yNTA6IG1heD01MDAwKS4KK0JlIGF3YXJlIHRoYXQgdHJhbnNpdGlvbiBsYXRlbmN5IGlzIGluIG5zIGFuZCBzYW1wbGluZ19yYXRlIGlzIGluIHVzLCBzbyB5b3UKK2dldCB0aGUgc2FtZSBzeXNmcyB2YWx1ZSBieSBkZWZhdWx0LgorU2FtcGxpbmcgcmF0ZSBzaG91bGQgYWx3YXlzIGdldCBhZGp1c3RlZCBjb25zaWRlcmluZyB0aGUgdHJhbnNpdGlvbiBsYXRlbmN5CitUbyBzZXQgdGhlIHNhbXBsaW5nIHJhdGUgNzUwIHRpbWVzIGFzIGhpZ2ggYXMgdGhlIHRyYW5zaXRpb24gbGF0ZW5jeQoraW4gdGhlIGJhc2ggKGFzIHNhaWQsIDEwMDAgaXMgZGVmYXVsdCksIGRvOgorZWNobyBgJCgoJChjYXQgY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3kpICogNzUwIC8gMTAwMCkpIFwKKyAgICA+b25kZW1hbmQvc2FtcGxpbmdfcmF0ZQogCi1zaG93X3NhbXBsaW5nX3JhdGVfKG1pbnxtYXgpOiB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBzYW1wbGluZyByYXRlcwotYXZhaWxhYmxlIHRoYXQgeW91IG1heSBzZXQgJ3NhbXBsaW5nX3JhdGUnIHRvLgorc2hvd19zYW1wbGluZ19yYXRlXyhtaW58bWF4KTogVEhJUyBJTlRFUkZBQ0UgSVMgREVQUkVDQVRFRCwgRE9OJ1QgVVNFIElULgorWW91IGNhbiB1c2Ugd2lkZXIgcmFuZ2VzIG5vdyBhbmQgdGhlIGdlbmVyYWwKK2NwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5IHZhcmlhYmxlIChjbXAuIHdpdGggdXNlci1ndWlkZS50eHQpIGNhbiBiZQordXNlZCB0byBvYnRhaW4gZXhhY3RseSB0aGUgc2FtZSBpbmZvOgorc2hvd19zYW1wbGluZ19yYXRlX21pbiA9IHRyYW5zdGl0aW9uX2xhdGVuY3kgKiA1MDAgICAgLyAxMDAwCitzaG93X3NhbXBsaW5nX3JhdGVfbWF4ID0gdHJhbnN0aXRpb25fbGF0ZW5jeSAqIDUwMDAwMCAvIDEwMDAKKyhkaXZpZGVkIGJ5IDEwMDAgaXMgdG8gaWxsdXN0cmF0ZSB0aGF0IHNhbXBsaW5nIHJhdGUgaXMgaW4gdXMgYW5kCit0cmFuc2l0aW9uIGxhdGVuY3kgaXMgZXhwb3J0ZWQgbnMpLgogCiB1cF90aHJlc2hvbGQ6IGRlZmluZXMgd2hhdCB0aGUgYXZlcmFnZSBDUFUgdXNhZ2UgYmV0d2VlbiB0aGUgc2FtcGxpbmdzCiBvZiAnc2FtcGxpbmdfcmF0ZScgbmVlZHMgdG8gYmUgZm9yIHRoZSBrZXJuZWwgdG8gbWFrZSBhIGRlY2lzaW9uIG9uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS91c2VyLWd1aWRlLnR4dAppbmRleCA5MTc5MThmLi43NWY0MTE5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQKQEAgLTE1Miw2ICsxNTIsMTggQEAKIAkJCQlmcmVxdWVuY3kgdGhlIHByb2Nlc3NvciBjYW4gcnVuIGF0KGluIGtIeikgCiBjcHVpbmZvX21heF9mcmVxIDoJCXRoaXMgZmlsZSBzaG93cyB0aGUgbWF4aW11bSBvcGVyYXRpbmcKIAkJCQlmcmVxdWVuY3kgdGhlIHByb2Nlc3NvciBjYW4gcnVuIGF0KGluIGtIeikgCitjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeQlUaGUgdGltZSBpdCB0YWtlcyBvbiB0aGlzIENQVSB0bworCQkJCXN3aXRjaCBiZXR3ZWVuIHR3byBmcmVxdWVuY2llcyBpbiBuYW5vCisJCQkJc2Vjb25kcy4gSWYgdW5rbm93biBvciBrbm93biB0byBiZQorCQkJCXRoYXQgaGlnaCB0aGF0IHRoZSBkcml2ZXIgZG9lcyBub3QKKwkJCQl3b3JrIHdpdGggdGhlIG9uZGVtYW5kIGdvdmVybm9yLCAtMQorCQkJCShDUFVGUkVRX0VURVJOQUwpIHdpbGwgYmUgcmV0dXJuZWQuCisJCQkJVXNpbmcgdGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsCisJCQkJdG8gY2hvb3NlIGFuIGFwcHJvcHJpYXRlIHBvbGxpbmcKKwkJCQlmcmVxdWVuY3kgZm9yIGEga2VybmVsIGdvdmVybm9yIG9yCisJCQkJdXNlcnNwYWNlIGRhZW1vbi4gTWFrZSBzdXJlIHRvIG5vdAorCQkJCXN3aXRjaCB0aGUgZnJlcXVlbmN5IHRvbyBvZnRlbgorCQkJCXJlc3VsdGluZyBpbiBwZXJmb3JtYW5jZSBsb3NzLgogc2NhbGluZ19kcml2ZXIgOgkJdGhpcyBmaWxlIHNob3dzIHdoYXQgY3B1ZnJlcSBkcml2ZXIgaXMKIAkJCQl1c2VkIHRvIHNldCB0aGUgZnJlcXVlbmN5IG9uIHRoaXMgQ1BVCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYgYi9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmCmluZGV4IDFlODlhNTEuLjg4NTE5ZGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZG9udGRpZmYKKysrIGIvRG9jdW1lbnRhdGlvbi9kb250ZGlmZgpAQCAtNjIsNyArNjIsNiBAQAogYWljNypzZXEuaCoKIGFpY2FzbQogYWljZGIuaCoKLWFzbQogYXNtLW9mZnNldHMuaAogYXNtX29mZnNldHMuaAogYXV0b2NvbmYuaCoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQgYi9Eb2N1bWVudGF0aW9uL2R5bmFtaWMtZGVidWctaG93dG8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NGM1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2R5bmFtaWMtZGVidWctaG93dG8udHh0CkBAIC0wLDAgKzEsMjQwIEBACisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGhvdyB0byB1c2UgdGhlIGR5bmFtaWMgZGVidWcgKGRkZWJ1ZykgZmVhdHVyZS4KKworRHluYW1pYyBkZWJ1ZyBpcyBkZXNpZ25lZCB0byBhbGxvdyB5b3UgdG8gZHluYW1pY2FsbHkgZW5hYmxlL2Rpc2FibGUga2VybmVsCitjb2RlIHRvIG9idGFpbiBhZGRpdGlvbmFsIGtlcm5lbCBpbmZvcm1hdGlvbi4gQ3VycmVudGx5LCBpZgorQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgc2V0LCB0aGVuIGFsbCBwcl9kZWJ1ZygpL2Rldl9kZWJ1ZygpIGNhbGxzIGNhbiBiZQorZHluYW1pY2FsbHkgZW5hYmxlZCBwZXItY2FsbHNpdGUuCisKK0R5bmFtaWMgZGVidWcgaGFzIGV2ZW4gbW9yZSB1c2VmdWwgZmVhdHVyZXM6CisKKyAqIFNpbXBsZSBxdWVyeSBsYW5ndWFnZSBhbGxvd3MgdHVybmluZyBvbiBhbmQgb2ZmIGRlYnVnZ2luZyBzdGF0ZW1lbnRzIGJ5CisgICBtYXRjaGluZyBhbnkgY29tYmluYXRpb24gb2Y6CisKKyAgIC0gc291cmNlIGZpbGVuYW1lCisgICAtIGZ1bmN0aW9uIG5hbWUKKyAgIC0gbGluZSBudW1iZXIgKGluY2x1ZGluZyByYW5nZXMgb2YgbGluZSBudW1iZXJzKQorICAgLSBtb2R1bGUgbmFtZQorICAgLSBmb3JtYXQgc3RyaW5nCisKKyAqIFByb3ZpZGVzIGEgZGVidWdmcyBjb250cm9sIGZpbGU6IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wgd2hpY2ggY2FuIGJlCisgICByZWFkIHRvIGRpc3BsYXkgdGhlIGNvbXBsZXRlIGxpc3Qgb2Yga25vd24gZGVidWcgc3RhdGVtZW50cywgdG8gaGVscCBndWlkZSB5b3UKKworQ29udHJvbGxpbmcgZHluYW1pYyBkZWJ1ZyBCZWhhdmlvdXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGJlaGF2aW91ciBvZiBwcl9kZWJ1ZygpL2Rldl9kZWJ1ZygpcyBhcmUgY29udHJvbGxlZCB2aWEgd3JpdGluZyB0byBhCitjb250cm9sIGZpbGUgaW4gdGhlICdkZWJ1Z2ZzJyBmaWxlc3lzdGVtLiBUaHVzLCB5b3UgbXVzdCBmaXJzdCBtb3VudCB0aGUgZGVidWdmcworZmlsZXN5c3RlbSwgaW4gb3JkZXIgdG8gbWFrZSB1c2Ugb2YgdGhpcyBmZWF0dXJlLiBTdWJzZXF1ZW50bHksIHdlIHJlZmVyIHRvIHRoZQorY29udHJvbCBmaWxlIGFzOiA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8KK2VuYWJsZSBwcmludGluZyBmcm9tIHNvdXJjZSBmaWxlICdzdmNzb2NrLmMnLCBsaW5lIDE2MDMgeW91IHNpbXBseSBkbzoKKworbnVsbGFyYm9yOn4gIyBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKK0lmIHlvdSBtYWtlIGEgbWlzdGFrZSB3aXRoIHRoZSBzeW50YXgsIHRoZSB3cml0ZSB3aWxsIGZhaWwgdGh1czoKKworbnVsbGFyYm9yOn4gIyBlY2hvICdmaWxlIHN2Y3NvY2suYyB3dGYgMSArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKy1iYXNoOiBlY2hvOiB3cml0ZSBlcnJvcjogSW52YWxpZCBhcmd1bWVudAorCitWaWV3aW5nIER5bmFtaWMgRGVidWcgQmVoYXZpb3VyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworWW91IGNhbiB2aWV3IHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBiZWhhdmlvdXIgb2YgYWxsIHRoZSBkZWJ1ZyBzdGF0ZW1lbnRzCit2aWE6CisKK251bGxhcmJvcjp+ICMgY2F0IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKyMgZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CisvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNfcmRtYS5jOjMyMyBbc3ZjeHBydF9yZG1hXXN2Y19yZG1hX2NsZWFudXAgLSAiU1ZDUkRNQSBNb2R1bGUgUmVtb3ZlZCwgZGVyZWdpc3RlciBSUEMgUkRNQSB0cmFuc3BvcnRcMDEyIgorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3ZjX3JkbWEuYzozNDEgW3N2Y3hwcnRfcmRtYV1zdmNfcmRtYV9pbml0IC0gIlwwMTFtYXhfaW5saW5lICAgICAgIDogJWRcMDEyIgorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3ZjX3JkbWEuYzozNDAgW3N2Y3hwcnRfcmRtYV1zdmNfcmRtYV9pbml0IC0gIlwwMTFzcV9kZXB0aCAgICAgICAgIDogJWRcMDEyIgorL3Vzci9zcmMvcGFja2FnZXMvQlVJTEQvc2dpLWVuaGFuY2VkbmZzLTEuNC9kZWZhdWx0L25ldC9zdW5ycGMvc3ZjX3JkbWEuYzozMzggW3N2Y3hwcnRfcmRtYV1zdmNfcmRtYV9pbml0IC0gIlwwMTFtYXhfcmVxdWVzdHMgICAgIDogJWRcMDEyIgorLi4uCisKKworWW91IGNhbiBhbHNvIGFwcGx5IHN0YW5kYXJkIFVuaXggdGV4dCBtYW5pcHVsYXRpb24gZmlsdGVycyB0byB0aGlzCitkYXRhLCBlLmcuCisKK251bGxhcmJvcjp+ICMgZ3JlcCAtaSByZG1hIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wgIHwgd2MgLWwKKzYyCisKK251bGxhcmJvcjp+ICMgZ3JlcCAtaSB0Y3AgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbCB8IHdjIC1sCis0MgorCitOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCB0aGUgdGhpcmQgY29sdW1uIHNob3dzIHRoZSBlbmFibGVkIGJlaGF2aW91cgorZmxhZ3MgZm9yIGVhY2ggZGVidWcgc3RhdGVtZW50IGNhbGxzaXRlIChzZWUgYmVsb3cgZm9yIGRlZmluaXRpb25zIG9mIHRoZQorZmxhZ3MpLiAgVGhlIGRlZmF1bHQgdmFsdWUsIG5vIGV4dHJhIGJlaGF2aW91ciBlbmFibGVkLCBpcyAiLSIuICBTbworeW91IGNhbiB2aWV3IGFsbCB0aGUgZGVidWcgc3RhdGVtZW50IGNhbGxzaXRlcyB3aXRoIGFueSBub24tZGVmYXVsdCBmbGFnczoKKworbnVsbGFyYm9yOn4gIyBhd2sgJyQzICE9ICItIicgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorIyBmaWxlbmFtZTpsaW5lbm8gW21vZHVsZV1mdW5jdGlvbiBmbGFncyBmb3JtYXQKKy91c3Ivc3JjL3BhY2thZ2VzL0JVSUxEL3NnaS1lbmhhbmNlZG5mcy0xLjQvZGVmYXVsdC9uZXQvc3VucnBjL3N2Y3NvY2suYzoxNjAzIFtzdW5ycGNdc3ZjX3NlbmQgcCAic3ZjX3Byb2Nlc3M6IHN0X3NlbmR0byByZXR1cm5lZCAlZFwwMTIiCisKKworQ29tbWFuZCBMYW5ndWFnZSBSZWZlcmVuY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0F0IHRoZSBsZXhpY2FsIGxldmVsLCBhIGNvbW1hbmQgY29tcHJpc2VzIGEgc2VxdWVuY2Ugb2Ygd29yZHMgc2VwYXJhdGVkCitieSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuICBOb3RlIHRoYXQgbmV3bGluZXMgYXJlIHRyZWF0ZWQgYXMgd29yZAorc2VwYXJhdG9ycyBhbmQgZG8gKm5vdCogZW5kIGEgY29tbWFuZCBvciBhbGxvdyBtdWx0aXBsZSBjb21tYW5kcyB0bworYmUgZG9uZSB0b2dldGhlci4gIFNvIHRoZXNlIGFyZSBhbGwgZXF1aXZhbGVudDoKKworbnVsbGFyYm9yOn4gIyBlY2hvIC1jICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCitudWxsYXJib3I6fiAjIGVjaG8gLWMgJyAgZmlsZSAgIHN2Y3NvY2suYyAgICAgbGluZSAgMTYwMyArcCAgJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorbnVsbGFyYm9yOn4gIyBlY2hvIC1jICdmaWxlIHN2Y3NvY2suY1xubGluZSAxNjAzICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKK0NvbW1hbmRzIGFyZSBib3VuZGVkIGJ5IGEgd3JpdGUoKSBzeXN0ZW0gY2FsbC4gIElmIHlvdSB3YW50IHRvIGRvCittdWx0aXBsZSBjb21tYW5kcyB5b3UgbmVlZCB0byBkbyBhIHNlcGFyYXRlICJlY2hvIiBmb3IgZWFjaCwgbGlrZToKKworbnVsbGFyYm9yOn4gIyBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnID4gL3Byb2MvZHByaW50ayA7XAorPiBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE1NjMgK3AnID4gL3Byb2MvZHByaW50aworCitvciBldmVuIGxpa2U6CisKK251bGxhcmJvcjp+ICMgKAorPiBlY2hvICdmaWxlIHN2Y3NvY2suYyBsaW5lIDE2MDMgK3AnIDtcCis+IGVjaG8gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTU2MyArcCcgO1wKKz4gKSA+IC9wcm9jL2RwcmludGsKKworQXQgdGhlIHN5bnRhY3RpY2FsIGxldmVsLCBhIGNvbW1hbmQgY29tcHJpc2VzIGEgc2VxdWVuY2Ugb2YgbWF0Y2gKK3NwZWNpZmljYXRpb25zLCBmb2xsb3dlZCBieSBhIGZsYWdzIGNoYW5nZSBzcGVjaWZpY2F0aW9uLgorCitjb21tYW5kIDo6PSBtYXRjaC1zcGVjKiBmbGFncy1zcGVjCisKK1RoZSBtYXRjaC1zcGVjJ3MgYXJlIHVzZWQgdG8gY2hvb3NlIGEgc3Vic2V0IG9mIHRoZSBrbm93biBkcHJpbnRrKCkKK2NhbGxzaXRlcyB0byB3aGljaCB0byBhcHBseSB0aGUgZmxhZ3Mtc3BlYy4gIFRoaW5rIG9mIHRoZW0gYXMgYSBxdWVyeQord2l0aCBpbXBsaWNpdCBBTkRzIGJldHdlZW4gZWFjaCBwYWlyLiAgTm90ZSB0aGF0IGFuIGVtcHR5IGxpc3Qgb2YKK21hdGNoLXNwZWNzIGlzIHBvc3NpYmxlLCBidXQgaXMgbm90IHZlcnkgdXNlZnVsIGJlY2F1c2UgaXQgd2lsbCBub3QKK21hdGNoIGFueSBkZWJ1ZyBzdGF0ZW1lbnQgY2FsbHNpdGVzLgorCitBIG1hdGNoIHNwZWNpZmljYXRpb24gY29tcHJpc2VzIGEga2V5d29yZCwgd2hpY2ggY29udHJvbHMgdGhlIGF0dHJpYnV0ZQorb2YgdGhlIGNhbGxzaXRlIHRvIGJlIGNvbXBhcmVkLCBhbmQgYSB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QuICBQb3NzaWJsZQora2V5d29yZHMgYXJlOgorCittYXRjaC1zcGVjIDo6PSAnZnVuYycgc3RyaW5nIHwKKwkgICAgICAgJ2ZpbGUnIHN0cmluZyB8CisJICAgICAgICdtb2R1bGUnIHN0cmluZyB8CisJICAgICAgICdmb3JtYXQnIHN0cmluZyB8CisJICAgICAgICdsaW5lJyBsaW5lLXJhbmdlCisKK2xpbmUtcmFuZ2UgOjo9IGxpbmVubyB8CisJICAgICAgICctJ2xpbmVubyB8CisJICAgICAgIGxpbmVubyctJyB8CisJICAgICAgIGxpbmVubyctJ2xpbmVubworLy8gTm90ZTogbGluZS1yYW5nZSBjYW5ub3QgY29udGFpbiBzcGFjZSwgZS5nLgorLy8gIjEtMzAiIGlzIHZhbGlkIHJhbmdlIGJ1dCAiMSAtIDMwIiBpcyBub3QuCisKK2xpbmVubyA6Oj0gdW5zaWduZWQtaW50CisKK1RoZSBtZWFuaW5ncyBvZiBlYWNoIGtleXdvcmQgYXJlOgorCitmdW5jCisgICAgVGhlIGdpdmVuIHN0cmluZyBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBmdW5jdGlvbiBuYW1lCisgICAgb2YgZWFjaCBjYWxsc2l0ZS4gIEV4YW1wbGU6CisKKyAgICBmdW5jIHN2Y190Y3BfYWNjZXB0CisKK2ZpbGUKKyAgICBUaGUgZ2l2ZW4gc3RyaW5nIGlzIGNvbXBhcmVkIGFnYWluc3QgZWl0aGVyIHRoZSBmdWxsCisgICAgcGF0aG5hbWUgb3IgdGhlIGJhc2VuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSBvZiBlYWNoCisgICAgY2FsbHNpdGUuICBFeGFtcGxlczoKKworICAgIGZpbGUgc3Zjc29jay5jCisgICAgZmlsZSAvdXNyL3NyYy9wYWNrYWdlcy9CVUlMRC9zZ2ktZW5oYW5jZWRuZnMtMS40L2RlZmF1bHQvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKworbW9kdWxlCisgICAgVGhlIGdpdmVuIHN0cmluZyBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSBtb2R1bGUgbmFtZQorICAgIG9mIGVhY2ggY2FsbHNpdGUuICBUaGUgbW9kdWxlIG5hbWUgaXMgdGhlIHN0cmluZyBhcworICAgIHNlZW4gaW4gImxzbW9kIiwgaS5lLiB3aXRob3V0IHRoZSBkaXJlY3Rvcnkgb3IgdGhlIC5rbworICAgIHN1ZmZpeCBhbmQgd2l0aCAnLScgY2hhbmdlZCB0byAnXycuICBFeGFtcGxlczoKKworICAgIG1vZHVsZSBzdW5ycGMKKyAgICBtb2R1bGUgbmZzZAorCitmb3JtYXQKKyAgICBUaGUgZ2l2ZW4gc3RyaW5nIGlzIHNlYXJjaGVkIGZvciBpbiB0aGUgZHluYW1pYyBkZWJ1ZyBmb3JtYXQKKyAgICBzdHJpbmcuICBOb3RlIHRoYXQgdGhlIHN0cmluZyBkb2VzIG5vdCBuZWVkIHRvIG1hdGNoIHRoZQorICAgIGVudGlyZSBmb3JtYXQsIG9ubHkgc29tZSBwYXJ0LiAgV2hpdGVzcGFjZSBhbmQgb3RoZXIKKyAgICBzcGVjaWFsIGNoYXJhY3RlcnMgY2FuIGJlIGVzY2FwZWQgdXNpbmcgQyBvY3RhbCBjaGFyYWN0ZXIKKyAgICBlc2NhcGUgXG9vbyBub3RhdGlvbiwgZS5nLiB0aGUgc3BhY2UgY2hhcmFjdGVyIGlzIFwwNDAuCisgICAgQWx0ZXJuYXRpdmVseSwgdGhlIHN0cmluZyBjYW4gYmUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlCisgICAgY2hhcmFjdGVycyAoIikgb3Igc2luZ2xlIHF1b3RlIGNoYXJhY3RlcnMgKCcpLgorICAgIEV4YW1wbGVzOgorCisgICAgZm9ybWF0IHN2Y3JkbWE6CSAgICAvLyBtYW55IG9mIHRoZSBORlMvUkRNQSBzZXJ2ZXIgZHByaW50a3MKKyAgICBmb3JtYXQgcmVhZGFoZWFkCSAgICAvLyBzb21lIGRwcmludGtzIGluIHRoZSByZWFkYWhlYWQgY2FjaGUKKyAgICBmb3JtYXQgbmZzZDpcMDQwU0VUQVRUUiAvLyBvbmUgd2F5IHRvIG1hdGNoIGEgZm9ybWF0IHdpdGggd2hpdGVzcGFjZQorICAgIGZvcm1hdCAibmZzZDogU0VUQVRUUiIgIC8vIGEgbmVhdGVyIHdheSB0byBtYXRjaCBhIGZvcm1hdCB3aXRoIHdoaXRlc3BhY2UKKyAgICBmb3JtYXQgJ25mc2Q6IFNFVEFUVFInICAvLyB5ZXQgYW5vdGhlciB3YXkgdG8gbWF0Y2ggYSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlCisKK2xpbmUKKyAgICBUaGUgZ2l2ZW4gbGluZSBudW1iZXIgb3IgcmFuZ2Ugb2YgbGluZSBudW1iZXJzIGlzIGNvbXBhcmVkCisgICAgYWdhaW5zdCB0aGUgbGluZSBudW1iZXIgb2YgZWFjaCBkcHJpbnRrKCkgY2FsbHNpdGUuICBBIHNpbmdsZQorICAgIGxpbmUgbnVtYmVyIG1hdGNoZXMgdGhlIGNhbGxzaXRlIGxpbmUgbnVtYmVyIGV4YWN0bHkuICBBCisgICAgcmFuZ2Ugb2YgbGluZSBudW1iZXJzIG1hdGNoZXMgYW55IGNhbGxzaXRlIGJldHdlZW4gdGhlIGZpcnN0CisgICAgYW5kIGxhc3QgbGluZSBudW1iZXIgaW5jbHVzaXZlLiAgQW4gZW1wdHkgZmlyc3QgbnVtYmVyIG1lYW5zCisgICAgdGhlIGZpcnN0IGxpbmUgaW4gdGhlIGZpbGUsIGFuIGVtcHR5IGxpbmUgbnVtYmVyIG1lYW5zIHRoZQorICAgIGxhc3QgbnVtYmVyIGluIHRoZSBmaWxlLiAgRXhhbXBsZXM6CisKKyAgICBsaW5lIDE2MDMJICAgIC8vIGV4YWN0bHkgbGluZSAxNjAzCisgICAgbGluZSAxNjAwLTE2MDUgIC8vIHRoZSBzaXggbGluZXMgZnJvbSBsaW5lIDE2MDAgdG8gbGluZSAxNjA1CisgICAgbGluZSAtMTYwNQkgICAgLy8gdGhlIDE2MDUgbGluZXMgZnJvbSBsaW5lIDEgdG8gbGluZSAxNjA1CisgICAgbGluZSAxNjAwLQkgICAgLy8gYWxsIGxpbmVzIGZyb20gbGluZSAxNjAwIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUKKworVGhlIGZsYWdzIHNwZWNpZmljYXRpb24gY29tcHJpc2VzIGEgY2hhbmdlIG9wZXJhdGlvbiBmb2xsb3dlZAorYnkgb25lIG9yIG1vcmUgZmxhZyBjaGFyYWN0ZXJzLiAgVGhlIGNoYW5nZSBvcGVyYXRpb24gaXMgb25lCitvZiB0aGUgY2hhcmFjdGVyczoKKworLQorICAgIHJlbW92ZSB0aGUgZ2l2ZW4gZmxhZ3MKKworKworICAgIGFkZCB0aGUgZ2l2ZW4gZmxhZ3MKKworPQorICAgIHNldCB0aGUgZmxhZ3MgdG8gdGhlIGdpdmVuIGZsYWdzCisKK1RoZSBmbGFncyBhcmU6CisKK3AKKyAgICBDYXVzZXMgYSBwcmludGsoKSBtZXNzYWdlIHRvIGJlIGVtaXR0ZWQgdG8gZG1lc2cKKworTm90ZSB0aGUgcmVnZXhwIF5bLSs9XVtzY3BdKyQgbWF0Y2hlcyBhIGZsYWdzIHNwZWNpZmljYXRpb24uCitOb3RlIGFsc28gdGhhdCB0aGVyZSBpcyBubyBjb252ZW5pZW50IHN5bnRheCB0byByZW1vdmUgYWxsCit0aGUgZmxhZ3MgYXQgb25jZSwgeW91IG5lZWQgdG8gdXNlICItcHNjIi4KKworRXhhbXBsZXMKKz09PT09PT09CisKKy8vIGVuYWJsZSB0aGUgbWVzc2FnZSBhdCBsaW5lIDE2MDMgb2YgZmlsZSBzdmNzb2NrLmMKK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZmlsZSBzdmNzb2NrLmMgbGluZSAxNjAzICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCisvLyBlbmFibGUgYWxsIHRoZSBtZXNzYWdlcyBpbiBmaWxlIHN2Y3NvY2suYworbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmaWxlIHN2Y3NvY2suYyArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKKworLy8gZW5hYmxlIGFsbCB0aGUgbWVzc2FnZXMgaW4gdGhlIE5GUyBzZXJ2ZXIgbW9kdWxlCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ21vZHVsZSBuZnNkICtwJyA+CisJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29udHJvbAorCisvLyBlbmFibGUgYWxsIDEyIG1lc3NhZ2VzIGluIHRoZSBmdW5jdGlvbiBzdmNfcHJvY2VzcygpCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2Z1bmMgc3ZjX3Byb2Nlc3MgK3AnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKKy8vIGRpc2FibGUgYWxsIDEyIG1lc3NhZ2VzIGluIHRoZSBmdW5jdGlvbiBzdmNfcHJvY2VzcygpCitudWxsYXJib3I6fiAjIGVjaG8gLW4gJ2Z1bmMgc3ZjX3Byb2Nlc3MgLXAnID4KKwkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sCisKKy8vIGVuYWJsZSBtZXNzYWdlcyBmb3IgTkZTIGNhbGxzIFJFQUQsIFJFQURMSU5LLCBSRUFERElSIGFuZCBSRUFERElSKy4KK251bGxhcmJvcjp+ICMgZWNobyAtbiAnZm9ybWF0ICJuZnNkOiBSRUFEIiArcCcgPgorCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAyMGQzYjk0Li4wMmVhMzc3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC02LDIwICs2LDQ3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglvbGQgc3RhdGljIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gYW5kIGllZWU4MDIxMV9yZWdkb20gbW9kdWxlIHBhcmFtZXRlcgotV2hlbjoJMi42LjI5CitXaGF0OglUaGUgaWVlZTgwMjExX3JlZ2RvbSBtb2R1bGUgcGFyYW1ldGVyCitXaGVuOglNYXJjaCAyMDEwIC8gZGVza3RvcCBjYXRjaHVwCisKK1doeToJVGhpcyB3YXMgaW5oZXJpdGVkIGJ5IHRoZSBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgY29kZSwKKwlhbmQgY3VycmVudGx5IHNlcnZlcyBhcyBhbiBvcHRpb24gZm9yIHVzZXJzIHRvIGRlZmluZSBhbgorCUlTTyAvIElFQyAzMTY2IGFscGhhMiBjb2RlIGZvciB0aGUgY291bnRyeSB0aGV5IGFyZSBjdXJyZW50bHkKKwlwcmVzZW50IGluLiBBbHRob3VnaCB0aGVyZSBhcmUgdXNlcnNwYWNlIEFQSSByZXBsYWNlbWVudHMgZm9yIHRoaXMKKwl0aHJvdWdoIG5sODAyMTEgZGlzdHJpYnV0aW9ucyBoYXZlbid0IHlldCBjYXVnaHQgdXAgd2l0aCBpbXBsZW1lbnRpbmcKKwlkZWNlbnQgYWx0ZXJuYXRpdmVzIHRocm91Z2ggc3RhbmRhcmQgR1VJcy4gQWx0aG91Z2ggYXZhaWxhYmxlIGFzIGFuCisJb3B0aW9uIHRocm91Z2ggaXcgb3Igd3BhX3N1cHBsaWNhbnQgaXRzIGp1c3QgYSBtYXR0ZXIgb2YgdGltZSBiZWZvcmUKKwlkaXN0cmlidXRpb25zIHBpY2sgdXAgZ29vZCBHVUkgb3B0aW9ucyBmb3IgdGhpcy4gVGhlIGlkZWFsIHNvbHV0aW9uCisJd291bGQgYWN0dWFsbHkgY29uc2lzdCBvZiBpbnRlbGxpZ2VudCBkZXNpZ25zIHdoaWNoIHdvdWxkIGRvIHRoaXMgZm9yCisJdGhlIHVzZXIgYXV0b21hdGljYWxseSBldmVuIHdoZW4gdHJhdmVsbGluZyB0aHJvdWdoIGRpZmZlcmVudCBjb3VudHJpZXMuCisJVW50aWwgdGhlbiB3ZSBsZWF2ZSB0aGlzIG1vZHVsZSBwYXJhbWV0ZXIgYXMgYSBjb21wcm9taXNlLgorCisJV2hlbiB1c2Vyc3BhY2UgaW1wcm92ZXMgd2l0aCByZWFzb25hYmxlIHdpZGVseS1hdmFpbGFibGUgYWx0ZXJuYXRpdmVzIGZvcgorCXRoaXMgd2Ugd2lsbCBubyBsb25nZXIgbmVlZCB0aGlzIG1vZHVsZSBwYXJhbWV0ZXIuIFRoaXMgZW50cnkgaG9wZXMgdGhhdAorCWJ5IHRoZSBzdXBlci1mdXR1cmlzdGljYWxseSBsb29raW5nIGRhdGUgb2YgIk1hcmNoIDIwMTAiIHdlIHdpbGwgaGF2ZQorCXN1Y2ggcmVwbGFjZW1lbnRzIHdpZGVseSBhdmFpbGFibGUuCisKK1dobzoJTHVpcyBSLiBSb2RyaWd1ZXogPGxyb2RyaWd1ZXpAYXRoZXJvcy5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgLSBvbGQgc3RhdGljIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24KK1doZW46CU1hcmNoIDIwMTAgLyBkZXNrdG9wIGNhdGNodXAKKwogV2h5OglUaGUgb2xkIHJlZ3VsYXRvcnkgaW5mcmFzdHJ1Y3R1cmUgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIG5ldyBvbmUKIAl3aGljaCBkb2VzIG5vdCByZXF1aXJlIHN0YXRpY2FsbHkgZGVmaW5lZCByZWd1bGF0b3J5IGRvbWFpbnMuIFdlIGRvCiAJbm90IHdhbnQgdG8ga2VlcCBzdGF0aWMgcmVndWxhdG9yeSBkb21haW5zIGluIHRoZSBrZXJuZWwgZHVlIHRvIHRoZQogCXRoZSBkeW5hbWljIG5hdHVyZSBvZiByZWd1bGF0b3J5IGxhdyBhbmQgbG9jYWxpemF0aW9uLiBXZSBrZXB0IGFyb3VuZAogCXRoZSBvbGQgc3RhdGljIGRlZmluaXRpb25zIGZvciB0aGUgcmVndWxhdG9yeSBkb21haW5zIG9mOgorCiAJCSogVVMKIAkJKiBKUAogCQkqIEVVCisKIAlhbmQgdXNlZCBieSBkZWZhdWx0IHRoZSBVUyB3aGVuIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSB3YXMKLQlzZXQuIFdlIGFsc28ga2VwdCBhcm91bmQgdGhlIGllZWU4MDIxMV9yZWdkb20gbW9kdWxlIHBhcmFtZXRlciBpbiBjYXNlCi0Jc29tZSBhcHBsaWNhdGlvbnMgd2VyZSByZWx5aW5nIG9uIGl0LiBDaGFuZ2luZyByZWd1bGF0b3J5IGRvbWFpbnMKLQljYW4gbm93IGJlIGRvbmUgaW5zdGVhZCBieSB1c2luZyBubDgwMjExLCBhcyBpcyBkb25lIHdpdGggaXcuCisJc2V0LiBXZSB3aWxsIHJlbW92ZSB0aGlzIG9wdGlvbiBvbmNlIHRoZSBzdGFuZGFyZCBMaW51eCBkZXNrdG9wIGNhdGNoZXMKKwl1cCB3aXRoIHRoZSBuZXcgdXNlcnNwYWNlIEFQSXMgd2UgaGF2ZSBpbXBsZW1lbnRlZC4KKwogV2hvOglMdWlzIFIuIFJvZHJpZ3VleiA8bHJvZHJpZ3VlekBhdGhlcm9zLmNvbT4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMjksNyArMjU2LDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBXaGF0OgliNDMgc3VwcG9ydCBmb3IgZmlybXdhcmUgcmV2aXNpb24gPCA0MTAKLVdoZW46CUp1bHkgMjAwOAorV2hlbjoJVGhlIHNjaGVkdWxlIHdhcyBKdWx5IDIwMDgsIGJ1dCBpdCB3YXMgZGVjaWRlZCB0aGF0IHdlIGFyZSBnb2luZyB0byBrZWVwIHRoZQorICAgICAgICBjb2RlIGFzIGxvbmcgYXMgdGhlcmUgYXJlIG5vIG1ham9yIG1haW50YW5hbmNlIGhlYWRhY2hlcy4KKwlTbyBpdCBfY291bGRfIGJlIHJlbW92ZWQgX2FueV8gdGltZSBub3csIGlmIGl0IGNvbmZsaWN0cyB3aXRoIHNvbWV0aGluZyBuZXcuCiBXaHk6CVRoZSBzdXBwb3J0IGNvZGUgZm9yIHRoZSBvbGQgZmlybXdhcmUgaHVydHMgY29kZSByZWFkYWJpbGl0eS9tYWludGFpbmFiaWxpdHkKIAlhbmQgc2xpZ2h0bHkgaHVydHMgcnVudGltZSBwZXJmb3JtYW5jZS4gQnVnZml4ZXMgZm9yIHRoZSBvbGQgZmlybXdhcmUKIAlhcmUgbm90IHByb3ZpZGVkIGJ5IEJyb2FkY29tIGFueW1vcmUuCkBAIC0zNDQsMyArMzczLDIwIEBACiAJUmVtb3ZhbCBpcyBzdWJqZWN0IHRvIGZpeGluZyBhbnkgcmVtYWluaW5nIGJ1Z3MgaW4gQUNQSSB3aGljaCBtYXkKIAljYXVzZSB0aGUgdGhlcm1hbCB0aHJvdHRsaW5nIG5vdCB0byBoYXBwZW4gYXQgdGhlIHJpZ2h0IHRpbWUuCiBXaG86CURhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCBNYXR0aGV3IEdhcnJldHQgPG1qZ0ByZWRoYXQuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglfX2RvX0lSUSBhbGwgaW4gb25lIGZpdHMgbm90aGluZyBpbnRlcnJ1cHQgaGFuZGxlcgorV2hlbjoJMi42LjMyCitXaHk6CV9fZG9fSVJRIHdhcyBrZXB0IGZvciBlYXN5IG1pZ3JhdGlvbiB0byB0aGUgdHlwZSBmbG93IGhhbmRsZXJzLgorCU1vcmUgdGhhbiB0d28geWVhcnMgb2YgbWlncmF0aW9uIHRpbWUgaXMgZW5vdWdoLgorV2hvOglUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJb2Jzb2xldGUgZ2VuZXJpYyBpcnEgZGVmaW5lcyBhbmQgdHlwZWRlZnMKK1doZW46CTIuNi4zMAorV2h5OglUaGUgZGVmaW5lcyBhbmQgdHlwZWRlZnMgKGh3X2ludGVycnVwdF90eXBlLCBub19pcnFfdHlwZSwgaXJxX2Rlc2NfdCkKKwloYXZlIGJlZW4ga2VwdCBhcm91bmQgZm9yIG1pZ3JhdGlvbiByZWFzb25zLiBBZnRlciBtb3JlIHRoYW4gdHdvIHllYXJzCisJaXQncyB0aW1lIHRvIHJlbW92ZSB0aGVtIGZpbmFsbHkKK1dobzoJVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKaW5kZXggZWM2YTkzOS4uNGU3OGNlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwpAQCAtNDM3LDggKzQzNywxMSBAQAogY2FuIGFuZCBzaG91bGQgYmUgZG9uZSB1c2luZyB0aGUgaW50ZXJuYWwgbG9ja2luZyB3aXRoIHNtYWxsZXIgY3JpdGljYWwgYXJlYXMpLgogQ3VycmVudCB3b3JzdCBvZmZlbmRlciBpcyBleHQyX2dldF9ibG9jaygpLi4uCiAKLS0+ZmFzeW5jKCkgaXMgYSBtZXNzLiBUaGlzIGFyZWEgbmVlZHMgYSBiaWcgY2xlYW51cCBhbmQgdGhhdCB3aWxsIHByb2JhYmx5Ci1hZmZlY3QgbG9ja2luZy4KKy0+ZmFzeW5jKCkgaXMgY2FsbGVkIHdpdGhvdXQgQktMIHByb3RlY3Rpb24sIGFuZCBpcyByZXNwb25zaWJsZSBmb3IKK21haW50YWluaW5nIHRoZSBGQVNZTkMgYml0IGluIGZpbHAtPmZfZmxhZ3MuICBNb3N0IGluc3RhbmNlcyBjYWxsCitmYXN5bmNfaGVscGVyKCksIHdoaWNoIGRvZXMgdGhhdCBtYWludGVuYW5jZSwgc28gaXQncyBub3Qgbm9ybWFsbHkKK3NvbWV0aGluZyBvbmUgbmVlZHMgdG8gd29ycnkgYWJvdXQuICBSZXR1cm4gdmFsdWVzID4gMCB3aWxsIGJlIG1hcHBlZCB0bworemVybyBpbiB0aGUgVkZTIGxheWVyLgogCiAtPnJlYWRkaXIoKSBhbmQgLT5pb2N0bCgpIG9uIGRpcmVjdG9yaWVzIG11c3QgYmUgY2hhbmdlZC4gSWRlYWxseSB3ZSB3b3VsZAogbW92ZSAtPnJlYWRkaXIoKSB0byBpbm9kZV9vcGVyYXRpb25zIGFuZCB1c2UgYSBzZXBhcmF0ZSBtZXRob2QgZm9yIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQyLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0Mi50eHQKaW5kZXggMjM0NDg1NS4uZTA1NWFjYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9leHQyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDIudHh0CkBAIC0zNzYsNyArMzc2LDggQEAKIFdpbmRvd3MgOTUvOTgvTlQvMjAwMAlodHRwOi8vd3d3LmNocnlzb2NvbWUubmV0L2V4cGxvcmUyZnMKIFdpbmRvd3MgOTUgKCopCQlodHRwOi8vd3d3LnlpcHRvbi5uZXQvY29udGVudC5odG1sI0ZTREVYVDIKIERPUyBjbGllbnQgKCopCQlmdHA6Ly9tZXRhbGFiLnVuYy5lZHUvcHViL0xpbnV4L3N5c3RlbS9maWxlc3lzdGVtcy9leHQyLwotT1MvMiAoKikJCWZ0cDovL21ldGFsYWIudW5jLmVkdS9wdWIvTGludXgvc3lzdGVtL2ZpbGVzeXN0ZW1zL2V4dDIvCitPUy8yICgrKQkJZnRwOi8vbWV0YWxhYi51bmMuZWR1L3B1Yi9MaW51eC9zeXN0ZW0vZmlsZXN5c3RlbXMvZXh0Mi8KIFJJU0MgT1MgY2xpZW50CQlodHRwOi8vd3d3LmVzdy1oZWltLnR1LWNsYXVzdGhhbC5kZS9+bWFyY28vc21vcmJyb2QvSXNjYUZTLwogCi0oKikgbm8gbG9uZ2VyIGFjdGl2ZWx5IGRldmVsb3BlZC9zdXBwb3J0ZWQgKGFzIG9mIE1hciAyMDA5KQorKCopIG5vIGxvbmdlciBhY3RpdmVseSBkZXZlbG9wZWQvc3VwcG9ydGVkIChhcyBvZiBBcHIgMjAwMSkKKygrKSBubyBsb25nZXIgYWN0aXZlbHkgZGV2ZWxvcGVkL3N1cHBvcnRlZCAoYXMgb2YgTWFyIDIwMDkpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBhODdiZTQyLi44MzBiYWQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTE0NzgsNiArMTQ3OCwxMyBAQAogdGhpcyBzaG91bGQgYmUgZW5hYmxlZCwgYnV0IGlmIHRoZSBwcm9ibGVtIHBlcnNpc3RzIHRoZSBtZXNzYWdlcyBjYW4gYmUKIGRpc2FibGVkLgogCituZXRkZXZfYnVkZ2V0CistLS0tLS0tLS0tLS0tCisKK01heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdGFrZW4gZnJvbSBhbGwgaW50ZXJmYWNlcyBpbiBvbmUgcG9sbGluZyBjeWNsZSAoTkFQSQorcG9sbCkuIEluIG9uZSBwb2xsaW5nIGN5Y2xlIGludGVyZmFjZXMgd2hpY2ggYXJlIHJlZ2lzdGVyZWQgdG8gcG9sbGluZyBhcmUKK3Byb2JlZCBpbiBhIHJvdW5kLXJvYmluIG1hbm5lci4gVGhlIGxpbWl0IG9mIHBhY2tldHMgaW4gb25lIHN1Y2ggcHJvYmUgY2FuIGJlCitzZXQgcGVyLWRldmljZSB2aWEgc3lzZnMgY2xhc3MvbmV0LzxkZXZpY2U+L3dlaWdodCAuCiAKIG5ldGRldl9tYXhfYmFja2xvZwogLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDU0ZjIxYTUuLjZkZGExY2MgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC00NCw2ICs0NCw3IEBACiAJRkIJVGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgaXMgZW5hYmxlZC4KIAlIVwlBcHByb3ByaWF0ZSBoYXJkd2FyZSBpcyBlbmFibGVkLgogCUlBLTY0CUlBLTY0IGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgorCUlNQSAgICAgSW50ZWdyaXR5IG1lYXN1cmVtZW50IGFyY2hpdGVjdHVyZSBpcyBlbmFibGVkLgogCUlPU0NIRUQJTW9yZSB0aGFuIG9uZSBJL08gc2NoZWR1bGVyIGlzIGVuYWJsZWQuCiAJSVBfUE5QCUlQIERIQ1AsIEJPT1RQLCBvciBSQVJQIGlzIGVuYWJsZWQuCiAJSVNBUE5QCUlTQSBQblAgY29kZSBpcyBlbmFibGVkLgpAQCAtNDkyLDEwICs0OTMsMTIgQEAKIAkJCURlZmF1bHQ6IDY0CiAKIAlocGV0PQkJW1g4Ni0zMixIUEVUXSBvcHRpb24gdG8gY29udHJvbCBIUEVUIHVzYWdlCi0JCQlGb3JtYXQ6IHsgZW5hYmxlIChkZWZhdWx0KSB8IGRpc2FibGUgfCBmb3JjZSB9CisJCQlGb3JtYXQ6IHsgZW5hYmxlIChkZWZhdWx0KSB8IGRpc2FibGUgfCBmb3JjZSB8CisJCQkJdmVyYm9zZSB9CiAJCQlkaXNhYmxlOiBkaXNhYmxlIEhQRVQgYW5kIHVzZSBQSVQgaW5zdGVhZAogCQkJZm9yY2U6IGFsbG93IGZvcmNlIGVuYWJsZWQgb2YgdW5kb2N1bWVudGVkIGNoaXBzIChJQ0g0LAogCQkJVklBLCBuVmlkaWEpCisJCQl2ZXJib3NlOiBzaG93IGNvbnRlbnRzIG9mIEhQRVQgcmVnaXN0ZXJzIGR1cmluZyBzZXR1cAogCiAJY29tMjAwMjA9CVtIVyxORVRdIEFSQ25ldCAtIENPTTIwMDIwIGNoaXBzZXQKIAkJCUZvcm1hdDoKQEAgLTgyOSw2ICs4MzIsMTUgQEAKIAogCWh2Y19pdWN2PQlbUzM5MF0gTnVtYmVyIG9mIHovVk0gSVVDViBoeXBlcnZpc29yIGNvbnNvbGUgKEhWQykKIAkJCSAgICAgICB0ZXJtaW5hbCBkZXZpY2VzLiBWYWxpZCB2YWx1ZXM6IDAuLjgKKwlodmNfaXVjdl9hbGxvdz0JW1MzOTBdIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHovVk0gdXNlciBJRHMuCisJCQkgICAgICAgSWYgc3BlY2lmaWVkLCB6L1ZNIElVQ1YgSFZDIGFjY2VwdHMgY29ubmVjdGlvbnMKKwkJCSAgICAgICBmcm9tIGxpc3RlZCB6L1ZNIHVzZXIgSURzIG9ubHkuCisKKwlpMmNfYnVzPQlbSFddIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGJvYXJkIHNwZWNpZmljIEkyQyBidXMgc3BlZWQKKwkJCSAgICAgb3IgcmVnaXN0ZXIgYW4gYWRkaXRpb25hbCBJMkMgYnVzIHRoYXQgaXMgbm90CisJCQkgICAgIHJlZ2lzdGVyZWQgZnJvbSBib2FyZCBpbml0aWFsaXphdGlvbiBjb2RlLgorCQkJICAgICBGb3JtYXQ6CisJCQkgICAgIDxidXNfaWQ+LDxjbGtyYXRlPgogCiAJaTgwNDIuZGVidWcJW0hXXSBUb2dnbGUgaTgwNDIgZGVidWcgbW9kZQogCWk4MDQyLmRpcmVjdAlbSFddIFB1dCBrZXlib2FyZCBwb3J0IGludG8gbm9uLXRyYW5zbGF0ZWQgbW9kZQpAQCAtOTAyLDYgKzkxNCwxNSBAQAogCWloYXNoX2VudHJpZXM9CVtLTkxdCiAJCQlTZXQgbnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgaW5vZGUgY2FjaGUuCiAKKwlpbWFfYXVkaXQ9CVtJTUFdCisJCQlGb3JtYXQ6IHsgIjAiIHwgIjEiIH0KKwkJCTAgLS0gaW50ZWdyaXR5IGF1ZGl0aW5nIG1lc3NhZ2VzLiAoRGVmYXVsdCkKKwkJCTEgLS0gZW5hYmxlIGluZm9ybWF0aW9uYWwgaW50ZWdyaXR5IGF1ZGl0aW5nIG1lc3NhZ2VzLgorCisJaW1hX2hhc2g9CVtJTUFdCisJCQlGb3JtdDogeyAic2hhMSIgfCAibWQ1IiB9CisJCQlkZWZhdWx0OiAic2hhMSIKKwogCWluMjAwMD0JCVtIVyxTQ1NJXQogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvaW4yMDAwLmMuCiAKQEAgLTE4MTYsMTEgKzE4MzcsNiBAQAogCQkJYXV0b2NvbmZpZ3VyYXRpb24uCiAJCQlSYW5nZXMgYXJlIGluIHBhaXJzIChtZW1vcnkgYmFzZSBhbmQgc2l6ZSkuCiAKLQlkeW5hbWljX3ByaW50awlFbmFibGVzIHByX2RlYnVnKCkvZGV2X2RiZygpIGNhbGxzIGlmCi0JCQlDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaGFzIGJlZW4gZW5hYmxlZC4KLQkJCVRoZXNlIGNhbiBhbHNvIGJlIHN3aXRjaGVkIG9uL29mZiB2aWEKLQkJCTxkZWJ1Z2ZzPi9keW5hbWljX3ByaW50ay9tb2R1bGVzCi0KIAlwcmludC1mYXRhbC1zaWduYWxzPQogCQkJW0tOTF0gZGVidWc6IHByaW50IGZhdGFsIHNpZ25hbHMKIAkJCXByaW50LWZhdGFsLXNpZ25hbHM9MTogcHJpbnQgc2VnZmF1bHQgaW5mbyB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CmluZGV4IDdhM2JiMWEuLmIxMzJlNGEzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RjY3AudHh0CkBAIC0xNDEsNyArMTQxLDggQEAKIAlEZWZhdWx0IENDSUQgZm9yIHRoZSByZWNlaXZlci1zZW5kZXIgaGFsZi1jb25uZWN0aW9uOyBzZWUgdHhfY2NpZC4KIAogc2VxX3dpbmRvdyA9IDEwMAotCVRoZSBpbml0aWFsIHNlcXVlbmNlIHdpbmRvdyAoc2VjLiA3LjUuMikuCisJVGhlIGluaXRpYWwgc2VxdWVuY2Ugd2luZG93IChzZWMuIDcuNS4yKSBvZiB0aGUgc2VuZGVyLiBUaGlzIGluZmx1ZW5jZXMKKwl0aGUgbG9jYWwgYWNrbm8gdmFsaWRpdHkgYW5kIHRoZSByZW1vdGUgc2Vxbm8gdmFsaWRpdHkgd2luZG93cyAoNy41LjEpLgogCiB0eF9xbGVuID0gNQogCVRoZSBzaXplIG9mIHRoZSB0cmFuc21pdCBidWZmZXIgaW4gcGFja2V0cy4gQSB2YWx1ZSBvZiAwIGNvcnJlc3BvbmRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IGM3NzEyNzguLmVjNWRlMDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0yLDcgKzIsNyBAQAogCiBpcF9mb3J3YXJkIC0gQk9PTEVBTgogCTAgLSBkaXNhYmxlZCAoZGVmYXVsdCkKLQlub3QgMCAtIGVuYWJsZWQgCisJbm90IDAgLSBlbmFibGVkCiAKIAlGb3J3YXJkIFBhY2tldHMgYmV0d2VlbiBpbnRlcmZhY2VzLgogCkBAIC0zNiw0OSArMzYsNDkgQEAKIElQIEZyYWdtZW50YXRpb246CiAKIGlwZnJhZ19oaWdoX3RocmVzaCAtIElOVEVHRVIKLQlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVAgZnJhZ21lbnRzLiBXaGVuIAorCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUCBmcmFnbWVudHMuIFdoZW4KIAlpcGZyYWdfaGlnaF90aHJlc2ggYnl0ZXMgb2YgbWVtb3J5IGlzIGFsbG9jYXRlZCBmb3IgdGhpcyBwdXJwb3NlLAogCXRoZSBmcmFnbWVudCBoYW5kbGVyIHdpbGwgdG9zcyBwYWNrZXRzIHVudGlsIGlwZnJhZ19sb3dfdGhyZXNoCiAJaXMgcmVhY2hlZC4KLQkKKwogaXBmcmFnX2xvd190aHJlc2ggLSBJTlRFR0VSCi0JU2VlIGlwZnJhZ19oaWdoX3RocmVzaAkKKwlTZWUgaXBmcmFnX2hpZ2hfdGhyZXNoCiAKIGlwZnJhZ190aW1lIC0gSU5URUdFUgotCVRpbWUgaW4gc2Vjb25kcyB0byBrZWVwIGFuIElQIGZyYWdtZW50IGluIG1lbW9yeS4JCisJVGltZSBpbiBzZWNvbmRzIHRvIGtlZXAgYW4gSVAgZnJhZ21lbnQgaW4gbWVtb3J5LgogCiBpcGZyYWdfc2VjcmV0X2ludGVydmFsIC0gSU5URUdFUgotCVJlZ2VuZXJhdGlvbiBpbnRlcnZhbCAoaW4gc2Vjb25kcykgb2YgdGhlIGhhc2ggc2VjcmV0IChvciBsaWZldGltZSAKKwlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUKIAlmb3IgdGhlIGhhc2ggc2VjcmV0KSBmb3IgSVAgZnJhZ21lbnRzLgogCURlZmF1bHQ6IDYwMAogCiBpcGZyYWdfbWF4X2Rpc3QgLSBJTlRFR0VSCi0JaXBmcmFnX21heF9kaXN0IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgd2hpY2ggZGVmaW5lcyB0aGUgCi0JbWF4aW11bSAiZGlzb3JkZXIiIHdoaWNoIGlzIGFsbG93ZWQgYW1vbmcgZnJhZ21lbnRzIHdoaWNoIHNoYXJlIGEgCi0JY29tbW9uIElQIHNvdXJjZSBhZGRyZXNzLiBOb3RlIHRoYXQgcmVvcmRlcmluZyBvZiBwYWNrZXRzIGlzIAotCW5vdCB1bnVzdWFsLCBidXQgaWYgYSBsYXJnZSBudW1iZXIgb2YgZnJhZ21lbnRzIGFycml2ZSBmcm9tIGEgc291cmNlIAotCUlQIGFkZHJlc3Mgd2hpbGUgYSBwYXJ0aWN1bGFyIGZyYWdtZW50IHF1ZXVlIHJlbWFpbnMgaW5jb21wbGV0ZSwgaXQgCi0JcHJvYmFibHkgaW5kaWNhdGVzIHRoYXQgb25lIG9yIG1vcmUgZnJhZ21lbnRzIGJlbG9uZ2luZyB0byB0aGF0IHF1ZXVlIAotCWhhdmUgYmVlbiBsb3N0LiBXaGVuIGlwZnJhZ19tYXhfZGlzdCBpcyBwb3NpdGl2ZSwgYW4gYWRkaXRpb25hbCBjaGVjayAKLQlpcyBkb25lIG9uIGZyYWdtZW50cyBiZWZvcmUgdGhleSBhcmUgYWRkZWQgdG8gYSByZWFzc2VtYmx5IHF1ZXVlIC0gaWYgCi0JaXBmcmFnX21heF9kaXN0IChvciBtb3JlKSBmcmFnbWVudHMgaGF2ZSBhcnJpdmVkIGZyb20gYSBwYXJ0aWN1bGFyIElQIAotCWFkZHJlc3MgYmV0d2VlbiBhZGRpdGlvbnMgdG8gYW55IElQIGZyYWdtZW50IHF1ZXVlIHVzaW5nIHRoYXQgc291cmNlIAotCWFkZHJlc3MsIGl0J3MgcHJlc3VtZWQgdGhhdCBvbmUgb3IgbW9yZSBmcmFnbWVudHMgaW4gdGhlIHF1ZXVlIGFyZSAKLQlsb3N0LiBUaGUgZXhpc3RpbmcgZnJhZ21lbnQgcXVldWUgd2lsbCBiZSBkcm9wcGVkLCBhbmQgYSBuZXcgb25lIAorCWlwZnJhZ19tYXhfZGlzdCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIHdoaWNoIGRlZmluZXMgdGhlCisJbWF4aW11bSAiZGlzb3JkZXIiIHdoaWNoIGlzIGFsbG93ZWQgYW1vbmcgZnJhZ21lbnRzIHdoaWNoIHNoYXJlIGEKKwljb21tb24gSVAgc291cmNlIGFkZHJlc3MuIE5vdGUgdGhhdCByZW9yZGVyaW5nIG9mIHBhY2tldHMgaXMKKwlub3QgdW51c3VhbCwgYnV0IGlmIGEgbGFyZ2UgbnVtYmVyIG9mIGZyYWdtZW50cyBhcnJpdmUgZnJvbSBhIHNvdXJjZQorCUlQIGFkZHJlc3Mgd2hpbGUgYSBwYXJ0aWN1bGFyIGZyYWdtZW50IHF1ZXVlIHJlbWFpbnMgaW5jb21wbGV0ZSwgaXQKKwlwcm9iYWJseSBpbmRpY2F0ZXMgdGhhdCBvbmUgb3IgbW9yZSBmcmFnbWVudHMgYmVsb25naW5nIHRvIHRoYXQgcXVldWUKKwloYXZlIGJlZW4gbG9zdC4gV2hlbiBpcGZyYWdfbWF4X2Rpc3QgaXMgcG9zaXRpdmUsIGFuIGFkZGl0aW9uYWwgY2hlY2sKKwlpcyBkb25lIG9uIGZyYWdtZW50cyBiZWZvcmUgdGhleSBhcmUgYWRkZWQgdG8gYSByZWFzc2VtYmx5IHF1ZXVlIC0gaWYKKwlpcGZyYWdfbWF4X2Rpc3QgKG9yIG1vcmUpIGZyYWdtZW50cyBoYXZlIGFycml2ZWQgZnJvbSBhIHBhcnRpY3VsYXIgSVAKKwlhZGRyZXNzIGJldHdlZW4gYWRkaXRpb25zIHRvIGFueSBJUCBmcmFnbWVudCBxdWV1ZSB1c2luZyB0aGF0IHNvdXJjZQorCWFkZHJlc3MsIGl0J3MgcHJlc3VtZWQgdGhhdCBvbmUgb3IgbW9yZSBmcmFnbWVudHMgaW4gdGhlIHF1ZXVlIGFyZQorCWxvc3QuIFRoZSBleGlzdGluZyBmcmFnbWVudCBxdWV1ZSB3aWxsIGJlIGRyb3BwZWQsIGFuZCBhIG5ldyBvbmUKIAlzdGFydGVkLiBBbiBpcGZyYWdfbWF4X2Rpc3QgdmFsdWUgb2YgemVybyBkaXNhYmxlcyB0aGlzIGNoZWNrLgogCiAJVXNpbmcgYSB2ZXJ5IHNtYWxsIHZhbHVlLCBlLmcuIDEgb3IgMiwgZm9yIGlwZnJhZ19tYXhfZGlzdCBjYW4KIAlyZXN1bHQgaW4gdW5uZWNlc3NhcmlseSBkcm9wcGluZyBmcmFnbWVudCBxdWV1ZXMgd2hlbiBub3JtYWwKLQlyZW9yZGVyaW5nIG9mIHBhY2tldHMgb2NjdXJzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHBvb3IgYXBwbGljYXRpb24gCi0JcGVyZm9ybWFuY2UuIFVzaW5nIGEgdmVyeSBsYXJnZSB2YWx1ZSwgZS5nLiA1MDAwMCwgaW5jcmVhc2VzIHRoZSAKLQlsaWtlbGlob29kIG9mIGluY29ycmVjdGx5IHJlYXNzZW1ibGluZyBJUCBmcmFnbWVudHMgdGhhdCBvcmlnaW5hdGUgCisJcmVvcmRlcmluZyBvZiBwYWNrZXRzIG9jY3Vycywgd2hpY2ggY291bGQgbGVhZCB0byBwb29yIGFwcGxpY2F0aW9uCisJcGVyZm9ybWFuY2UuIFVzaW5nIGEgdmVyeSBsYXJnZSB2YWx1ZSwgZS5nLiA1MDAwMCwgaW5jcmVhc2VzIHRoZQorCWxpa2VsaWhvb2Qgb2YgaW5jb3JyZWN0bHkgcmVhc3NlbWJsaW5nIElQIGZyYWdtZW50cyB0aGF0IG9yaWdpbmF0ZQogCWZyb20gZGlmZmVyZW50IElQIGRhdGFncmFtcywgd2hpY2ggY291bGQgcmVzdWx0IGluIGRhdGEgY29ycnVwdGlvbi4KIAlEZWZhdWx0OiA2NAogCiBJTkVUIHBlZXIgc3RvcmFnZToKIAogaW5ldF9wZWVyX3RocmVzaG9sZCAtIElOVEVHRVIKLQlUaGUgYXBwcm94aW1hdGUgc2l6ZSBvZiB0aGUgc3RvcmFnZS4gIFN0YXJ0aW5nIGZyb20gdGhpcyB0aHJlc2hvbGQJCisJVGhlIGFwcHJveGltYXRlIHNpemUgb2YgdGhlIHN0b3JhZ2UuICBTdGFydGluZyBmcm9tIHRoaXMgdGhyZXNob2xkCiAJZW50cmllcyB3aWxsIGJlIHRocm93biBhZ2dyZXNzaXZlbHkuICBUaGlzIHRocmVzaG9sZCBhbHNvIGRldGVybWluZXMKIAllbnRyaWVzJyB0aW1lLXRvLWxpdmUgYW5kIHRpbWUgaW50ZXJ2YWxzIGJldHdlZW4gZ2FyYmFnZSBjb2xsZWN0aW9uCiAJcGFzc2VzLiAgTW9yZSBlbnRyaWVzLCBsZXNzIHRpbWUtdG8tbGl2ZSwgbGVzcyBHQyBpbnRlcnZhbC4KQEAgLTEwNSw3ICsxMDUsNyBAQAogCWluIGVmZmVjdCB1bmRlciBsb3cgKG9yIGFic2VudCkgbWVtb3J5IHByZXNzdXJlIG9uIHRoZSBwb29sLgogCU1lYXN1cmVkIGluIHNlY29uZHMuCiAKLVRDUCB2YXJpYWJsZXM6IAorVENQIHZhcmlhYmxlczoKIAogc29tYXhjb25uIC0gSU5URUdFUgogCUxpbWl0IG9mIHNvY2tldCBsaXN0ZW4oKSBiYWNrbG9nLCBrbm93biBpbiB1c2Vyc3BhY2UgYXMgU09NQVhDT05OLgpAQCAtMzEwLDcgKzMxMCw3IEBACiAKIHRjcF9yZW9yZGVyaW5nIC0gSU5URUdFUgogCU1heGltYWwgcmVvcmRlcmluZyBvZiBwYWNrZXRzIGluIGEgVENQIHN0cmVhbS4KLQlEZWZhdWx0OiAzCQorCURlZmF1bHQ6IDMKIAogdGNwX3JldHJhbnNfY29sbGFwc2UgLSBCT09MRUFOCiAJQnVnLXRvLWJ1ZyBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBicm9rZW4gcHJpbnRlcnMuCkBAIC01MjEsNyArNTIxLDcgQEAKIAogaXBfbG9jYWxfcG9ydF9yYW5nZSAtIDIgSU5URUdFUlMKIAlEZWZpbmVzIHRoZSBsb2NhbCBwb3J0IHJhbmdlIHRoYXQgaXMgdXNlZCBieSBUQ1AgYW5kIFVEUCB0bwotCWNob29zZSB0aGUgbG9jYWwgcG9ydC4gVGhlIGZpcnN0IG51bWJlciBpcyB0aGUgZmlyc3QsIHRoZSAKKwljaG9vc2UgdGhlIGxvY2FsIHBvcnQuIFRoZSBmaXJzdCBudW1iZXIgaXMgdGhlIGZpcnN0LCB0aGUKIAlzZWNvbmQgdGhlIGxhc3QgbG9jYWwgcG9ydCBudW1iZXIuIERlZmF1bHQgdmFsdWUgZGVwZW5kcyBvbgogCWFtb3VudCBvZiBtZW1vcnkgYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW06CiAJPiAxMjhNYiAzMjc2OC02MTAwMApAQCAtNTk0LDEyICs1OTQsMTIgQEAKIAogCUlmIHplcm8sIGljbXAgZXJyb3IgbWVzc2FnZXMgYXJlIHNlbnQgd2l0aCB0aGUgcHJpbWFyeSBhZGRyZXNzIG9mCiAJdGhlIGV4aXRpbmcgaW50ZXJmYWNlLgotIAorCiAJSWYgbm9uLXplcm8sIHRoZSBtZXNzYWdlIHdpbGwgYmUgc2VudCB3aXRoIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YKIAl0aGUgaW50ZXJmYWNlIHRoYXQgcmVjZWl2ZWQgdGhlIHBhY2tldCB0aGF0IGNhdXNlZCB0aGUgaWNtcCBlcnJvci4KIAlUaGlzIGlzIHRoZSBiZWhhdmlvdXIgbmV0d29yayBtYW55IGFkbWluaXN0cmF0b3JzIHdpbGwgZXhwZWN0IGZyb20KIAlhIHJvdXRlci4gQW5kIGl0IGNhbiBtYWtlIGRlYnVnZ2luZyBjb21wbGljYXRlZCBuZXR3b3JrIGxheW91dHMKLQltdWNoIGVhc2llci4gCisJbXVjaCBlYXNpZXIuCiAKIAlOb3RlIHRoYXQgaWYgbm8gcHJpbWFyeSBhZGRyZXNzIGV4aXN0cyBmb3IgdGhlIGludGVyZmFjZSBzZWxlY3RlZCwKIAl0aGVuIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IG5vbi1sb29wYmFjayBpbnRlcmZhY2UgdGhhdApAQCAtNjExLDcgKzYxMSw3IEBACiAJQ2hhbmdlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtdWx0aWNhc3QgZ3JvdXBzIHdlIGNhbiBzdWJzY3JpYmUgdG8uCiAJRGVmYXVsdDogMjAKIAotY29uZi9pbnRlcmZhY2UvKiAgY2hhbmdlcyBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UgKHdoZXJlICJpbnRlcmZhY2UiIGlzIAorY29uZi9pbnRlcmZhY2UvKiAgY2hhbmdlcyBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UgKHdoZXJlICJpbnRlcmZhY2UiIGlzCiAJCSAgdGhlIG5hbWUgb2YgeW91ciBuZXR3b3JrIGludGVyZmFjZSkKIGNvbmYvYWxsLyoJICBpcyBzcGVjaWFsLCBjaGFuZ2VzIHRoZSBzZXR0aW5ncyBmb3IgYWxsIGludGVyZmFjZXMKIApAQCAtNjI1LDExICs2MjUsMTEgQEAKIGFjY2VwdF9yZWRpcmVjdHMgLSBCT09MRUFOCiAJQWNjZXB0IElDTVAgcmVkaXJlY3QgbWVzc2FnZXMuCiAJYWNjZXB0X3JlZGlyZWN0cyBmb3IgdGhlIGludGVyZmFjZSB3aWxsIGJlIGVuYWJsZWQgaWY6Ci0JLSBib3RoIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgYXJlIFRSVUUgaW4gdGhlIGNhc2UgZm9yd2FyZGluZwotCSAgZm9yIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZAorCS0gYm90aCBjb25mL3thbGwsaW50ZXJmYWNlfS9hY2NlcHRfcmVkaXJlY3RzIGFyZSBUUlVFIGluIHRoZSBjYXNlCisJICBmb3J3YXJkaW5nIGZvciB0aGUgaW50ZXJmYWNlIGlzIGVuYWJsZWQKIAlvcgotCS0gYXQgbGVhc3Qgb25lIG9mIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgaXMgVFJVRSBpbiB0aGUgY2FzZQotCSAgZm9yd2FyZGluZyBmb3IgdGhlIGludGVyZmFjZSBpcyBkaXNhYmxlZAorCS0gYXQgbGVhc3Qgb25lIG9mIGNvbmYve2FsbCxpbnRlcmZhY2V9L2FjY2VwdF9yZWRpcmVjdHMgaXMgVFJVRSBpbiB0aGUKKwkgIGNhc2UgZm9yd2FyZGluZyBmb3IgdGhlIGludGVyZmFjZSBpcyBkaXNhYmxlZAogCWFjY2VwdF9yZWRpcmVjdHMgZm9yIHRoZSBpbnRlcmZhY2Ugd2lsbCBiZSBkaXNhYmxlZCBvdGhlcndpc2UKIAlkZWZhdWx0IFRSVUUgKGhvc3QpCiAJCUZBTFNFIChyb3V0ZXIpCkBAIC02NDAsOCArNjQwLDggQEAKIG1jX2ZvcndhcmRpbmcgLSBCT09MRUFOCiAJRG8gbXVsdGljYXN0IHJvdXRpbmcuIFRoZSBrZXJuZWwgbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCBDT05GSUdfTVJPVVRFCiAJYW5kIGEgbXVsdGljYXN0IHJvdXRpbmcgZGFlbW9uIGlzIHJlcXVpcmVkLgotCWNvbmYvYWxsL21jX2ZvcndhcmRpbmcgbXVzdCBhbHNvIGJlIHNldCB0byBUUlVFIHRvIGVuYWJsZSBtdWx0aWNhc3Qgcm91dGluZwotCWZvciB0aGUgaW50ZXJmYWNlCisJY29uZi9hbGwvbWNfZm9yd2FyZGluZyBtdXN0IGFsc28gYmUgc2V0IHRvIFRSVUUgdG8gZW5hYmxlIG11bHRpY2FzdAorCXJvdXRpbmcJZm9yIHRoZSBpbnRlcmZhY2UKIAogbWVkaXVtX2lkIC0gSU5URUdFUgogCUludGVnZXIgdmFsdWUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIHRoZSBkZXZpY2VzIGJ5IHRoZSBtZWRpdW0gdGhleQpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJdGhlIGJyb2FkY2FzdCBwYWNrZXRzIGFyZSByZWNlaXZlZCBvbmx5IG9uIG9uZSBvZiB0aGVtLgogCVRoZSBkZWZhdWx0IHZhbHVlIDAgbWVhbnMgdGhhdCB0aGUgZGV2aWNlIGlzIHRoZSBvbmx5IGludGVyZmFjZQogCXRvIGl0cyBtZWRpdW0sIHZhbHVlIG9mIC0xIG1lYW5zIHRoYXQgbWVkaXVtIGlzIG5vdCBrbm93bi4KLQkKKwogCUN1cnJlbnRseSwgaXQgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIHByb3h5X2FycCBiZWhhdmlvcjoKIAl0aGUgcHJveHlfYXJwIGZlYXR1cmUgaXMgZW5hYmxlZCBmb3IgcGFja2V0cyBmb3J3YXJkZWQgYmV0d2VlbgogCXR3byBkZXZpY2VzIGF0dGFjaGVkIHRvIGRpZmZlcmVudCBtZWRpYS4KQEAgLTY5OSwxNiArNjk5LDIyIEBACiAJZGVmYXVsdCBUUlVFIChyb3V0ZXIpCiAJCUZBTFNFIChob3N0KQogCi1ycF9maWx0ZXIgLSBCT09MRUFOCi0JMSAtIGRvIHNvdXJjZSB2YWxpZGF0aW9uIGJ5IHJldmVyc2VkIHBhdGgsIGFzIHNwZWNpZmllZCBpbiBSRkMxODEyCi0JICAgIFJlY29tbWVuZGVkIG9wdGlvbiBmb3Igc2luZ2xlIGhvbWVkIGhvc3RzIGFuZCBzdHViIG5ldHdvcmsKLQkgICAgcm91dGVycy4gQ291bGQgY2F1c2UgdHJvdWJsZXMgZm9yIGNvbXBsaWNhdGVkIChub3QgbG9vcCBmcmVlKQotCSAgICBuZXR3b3JrcyBydW5uaW5nIGEgc2xvdyB1bnJlbGlhYmxlIHByb3RvY29sIChzb3J0IG9mIFJJUCksCi0JICAgIG9yIHVzaW5nIHN0YXRpYyByb3V0ZXMuCi0KK3JwX2ZpbHRlciAtIElOVEVHRVIKIAkwIC0gTm8gc291cmNlIHZhbGlkYXRpb24uCisJMSAtIFN0cmljdCBtb2RlIGFzIGRlZmluZWQgaW4gUkZDMzcwNCBTdHJpY3QgUmV2ZXJzZSBQYXRoCisJICAgIEVhY2ggaW5jb21pbmcgcGFja2V0IGlzIHRlc3RlZCBhZ2FpbnN0IHRoZSBGSUIgYW5kIGlmIHRoZSBpbnRlcmZhY2UKKwkgICAgaXMgbm90IHRoZSBiZXN0IHJldmVyc2UgcGF0aCB0aGUgcGFja2V0IGNoZWNrIHdpbGwgZmFpbC4KKwkgICAgQnkgZGVmYXVsdCBmYWlsZWQgcGFja2V0cyBhcmUgZGlzY2FyZGVkLgorCTIgLSBMb29zZSBtb2RlIGFzIGRlZmluZWQgaW4gUkZDMzcwNCBMb29zZSBSZXZlcnNlIFBhdGgKKwkgICAgRWFjaCBpbmNvbWluZyBwYWNrZXQncyBzb3VyY2UgYWRkcmVzcyBpcyBhbHNvIHRlc3RlZCBhZ2FpbnN0IHRoZSBGSUIKKwkgICAgYW5kIGlmIHRoZSBzb3VyY2UgYWRkcmVzcyBpcyBub3QgcmVhY2hhYmxlIHZpYSBhbnkgaW50ZXJmYWNlCisJICAgIHRoZSBwYWNrZXQgY2hlY2sgd2lsbCBmYWlsLgogCi0JY29uZi9hbGwvcnBfZmlsdGVyIG11c3QgYWxzbyBiZSBzZXQgdG8gVFJVRSB0byBkbyBzb3VyY2UgdmFsaWRhdGlvbgorCUN1cnJlbnQgcmVjb21tZW5kZWQgcHJhY3RpY2UgaW4gUkZDMzcwNCBpcyB0byBlbmFibGUgc3RyaWN0IG1vZGUKKwl0byBwcmV2ZW50IElQIHNwb29maW5nIGZyb20gRERvcyBhdHRhY2tzLiBJZiB1c2luZyBhc3ltbWV0cmljIHJvdXRpbmcKKwlvciBvdGhlciBjb21wbGljYXRlZCByb3V0aW5nLCB0aGVuIGxvb3NlIG1vZGUgaXMgcmVjb21tZW5kZWQuCisKKwljb25mL2FsbC9ycF9maWx0ZXIgbXVzdCBhbHNvIGJlIHNldCB0byBub24temVybyB0byBkbyBzb3VyY2UgdmFsaWRhdGlvbgogCW9uIHRoZSBpbnRlcmZhY2UKIAogCURlZmF1bHQgdmFsdWUgaXMgMC4gTm90ZSB0aGF0IHNvbWUgZGlzdHJpYnV0aW9ucyBlbmFibGUgaXQKQEAgLTc4Miw2ICs3ODgsMTIgQEAKIAlUaGUgbWF4IHZhbHVlIGZyb20gY29uZi97YWxsLGludGVyZmFjZX0vYXJwX2lnbm9yZSBpcyB1c2VkCiAJd2hlbiBBUlAgcmVxdWVzdCBpcyByZWNlaXZlZCBvbiB0aGUge2ludGVyZmFjZX0KIAorYXJwX25vdGlmeSAtIEJPT0xFQU4KKwlEZWZpbmUgbW9kZSBmb3Igbm90aWZpY2F0aW9uIG9mIGFkZHJlc3MgYW5kIGRldmljZSBjaGFuZ2VzLgorCTAgLSAoZGVmYXVsdCk6IGRvIG5vdGhpbmcKKwkxIC0gR2VuZXJhdGUgZ3JhdHVpdG91cyBhcnAgcmVwbGllcyB3aGVuIGRldmljZSBpcyBicm91Z2h0IHVwCisJICAgIG9yIGhhcmR3YXJlIGFkZHJlc3MgY2hhbmdlcy4KKwogYXJwX2FjY2VwdCAtIEJPT0xFQU4KIAlEZWZpbmUgYmVoYXZpb3Igd2hlbiBncmF0dWl0b3VzIGFycCByZXBsaWVzIGFyZSByZWNlaXZlZDoKIAkwIC0gZHJvcCBncmF0dWl0b3VzIGFycCBmcmFtZXMKQEAgLTgyMyw3ICs4MzUsNyBAQAogCiBiaW5kdjZvbmx5IC0gQk9PTEVBTgogCURlZmF1bHQgdmFsdWUgZm9yIElQVjZfVjZPTkxZIHNvY2tldCBvcHRpb24sCi0Jd2hpY2ggcmVzdHJpY3RzIHVzZSBvZiB0aGUgSVB2NiBzb2NrZXQgdG8gSVB2NiBjb21tdW5pY2F0aW9uIAorCXdoaWNoIHJlc3RyaWN0cyB1c2Ugb2YgdGhlIElQdjYgc29ja2V0IHRvIElQdjYgY29tbXVuaWNhdGlvbgogCW9ubHkuCiAJCVRSVUU6IGRpc2FibGUgSVB2NC1tYXBwZWQgYWRkcmVzcyBmZWF0dXJlCiAJCUZBTFNFOiBlbmFibGUgSVB2NC1tYXBwZWQgYWRkcmVzcyBmZWF0dXJlCkBAIC04MzMsMTkgKzg0NSwxOSBAQAogSVB2NiBGcmFnbWVudGF0aW9uOgogCiBpcDZmcmFnX2hpZ2hfdGhyZXNoIC0gSU5URUdFUgotCU1heGltdW0gbWVtb3J5IHVzZWQgdG8gcmVhc3NlbWJsZSBJUHY2IGZyYWdtZW50cy4gV2hlbiAKKwlNYXhpbXVtIG1lbW9yeSB1c2VkIHRvIHJlYXNzZW1ibGUgSVB2NiBmcmFnbWVudHMuIFdoZW4KIAlpcDZmcmFnX2hpZ2hfdGhyZXNoIGJ5dGVzIG9mIG1lbW9yeSBpcyBhbGxvY2F0ZWQgZm9yIHRoaXMgcHVycG9zZSwKIAl0aGUgZnJhZ21lbnQgaGFuZGxlciB3aWxsIHRvc3MgcGFja2V0cyB1bnRpbCBpcDZmcmFnX2xvd190aHJlc2gKIAlpcyByZWFjaGVkLgotCQorCiBpcDZmcmFnX2xvd190aHJlc2ggLSBJTlRFR0VSCi0JU2VlIGlwNmZyYWdfaGlnaF90aHJlc2gJCisJU2VlIGlwNmZyYWdfaGlnaF90aHJlc2gKIAogaXA2ZnJhZ190aW1lIC0gSU5URUdFUgogCVRpbWUgaW4gc2Vjb25kcyB0byBrZWVwIGFuIElQdjYgZnJhZ21lbnQgaW4gbWVtb3J5LgogCiBpcDZmcmFnX3NlY3JldF9pbnRlcnZhbCAtIElOVEVHRVIKLQlSZWdlbmVyYXRpb24gaW50ZXJ2YWwgKGluIHNlY29uZHMpIG9mIHRoZSBoYXNoIHNlY3JldCAob3IgbGlmZXRpbWUgCisJUmVnZW5lcmF0aW9uIGludGVydmFsIChpbiBzZWNvbmRzKSBvZiB0aGUgaGFzaCBzZWNyZXQgKG9yIGxpZmV0aW1lCiAJZm9yIHRoZSBoYXNoIHNlY3JldCkgZm9yIElQdjYgZnJhZ21lbnRzLgogCURlZmF1bHQ6IDYwMAogCkBAIC04NTQsMTcgKzg2NiwxNyBAQAogCiAKIGNvbmYvYWxsLyo6Ci0JQ2hhbmdlIGFsbCB0aGUgaW50ZXJmYWNlLXNwZWNpZmljIHNldHRpbmdzLiAgCisJQ2hhbmdlIGFsbCB0aGUgaW50ZXJmYWNlLXNwZWNpZmljIHNldHRpbmdzLgogCiAJW1hYWDogIE90aGVyIHNwZWNpYWwgZmVhdHVyZXMgdGhhbiBmb3J3YXJkaW5nP10KIAogY29uZi9hbGwvZm9yd2FyZGluZyAtIEJPT0xFQU4KLQlFbmFibGUgZ2xvYmFsIElQdjYgZm9yd2FyZGluZyBiZXR3ZWVuIGFsbCBpbnRlcmZhY2VzLiAgCisJRW5hYmxlIGdsb2JhbCBJUHY2IGZvcndhcmRpbmcgYmV0d2VlbiBhbGwgaW50ZXJmYWNlcy4KIAotCUlQdjQgYW5kIElQdjYgd29yayBkaWZmZXJlbnRseSBoZXJlOyBlLmcuIG5ldGZpbHRlciBtdXN0IGJlIHVzZWQgCisJSVB2NCBhbmQgSVB2NiB3b3JrIGRpZmZlcmVudGx5IGhlcmU7IGUuZy4gbmV0ZmlsdGVyIG11c3QgYmUgdXNlZAogCXRvIGNvbnRyb2wgd2hpY2ggaW50ZXJmYWNlcyBtYXkgZm9yd2FyZCBwYWNrZXRzIGFuZCB3aGljaCBub3QuCiAKLQlUaGlzIGFsc28gc2V0cyBhbGwgaW50ZXJmYWNlcycgSG9zdC9Sb3V0ZXIgc2V0dGluZyAKKwlUaGlzIGFsc28gc2V0cyBhbGwgaW50ZXJmYWNlcycgSG9zdC9Sb3V0ZXIgc2V0dGluZwogCSdmb3J3YXJkaW5nJyB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLiAgU2VlIGJlbG93IGZvciBkZXRhaWxzLgogCiAJVGhpcyByZWZlcnJlZCB0byBhcyBnbG9iYWwgZm9yd2FyZGluZy4KQEAgLTg3NSwxMiArODg3LDEyIEBACiBjb25mL2ludGVyZmFjZS8qOgogCUNoYW5nZSBzcGVjaWFsIHNldHRpbmdzIHBlciBpbnRlcmZhY2UuCiAKLQlUaGUgZnVuY3Rpb25hbCBiZWhhdmlvdXIgZm9yIGNlcnRhaW4gc2V0dGluZ3MgaXMgZGlmZmVyZW50IAorCVRoZSBmdW5jdGlvbmFsIGJlaGF2aW91ciBmb3IgY2VydGFpbiBzZXR0aW5ncyBpcyBkaWZmZXJlbnQKIAlkZXBlbmRpbmcgb24gd2hldGhlciBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQgb3Igbm90LgogCiBhY2NlcHRfcmEgLSBCT09MRUFOCiAJQWNjZXB0IFJvdXRlciBBZHZlcnRpc2VtZW50czsgYXV0b2NvbmZpZ3VyZSB1c2luZyB0aGVtLgotCQorCiAJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZGlzYWJsZWQuCiAJCQkgICAgZGlzYWJsZWQgaWYgbG9jYWwgZm9yd2FyZGluZyBpcyBlbmFibGVkLgogCkBAIC05MjYsNyArOTM4LDcgQEAKIAlEZWZhdWx0OiAwCiAKIGF1dG9jb25mIC0gQk9PTEVBTgotCUF1dG9jb25maWd1cmUgYWRkcmVzc2VzIHVzaW5nIFByZWZpeCBJbmZvcm1hdGlvbiBpbiBSb3V0ZXIgCisJQXV0b2NvbmZpZ3VyZSBhZGRyZXNzZXMgdXNpbmcgUHJlZml4IEluZm9ybWF0aW9uIGluIFJvdXRlcgogCUFkdmVydGlzZW1lbnRzLgogCiAJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGFjY2VwdF9yYV9waW5mbyBpcyBlbmFibGVkLgpAQCAtOTM1LDExICs5NDcsMTEgQEAKIGRhZF90cmFuc21pdHMgLSBJTlRFR0VSCiAJVGhlIGFtb3VudCBvZiBEdXBsaWNhdGUgQWRkcmVzcyBEZXRlY3Rpb24gcHJvYmVzIHRvIHNlbmQuCiAJRGVmYXVsdDogMQotCQotZm9yd2FyZGluZyAtIEJPT0xFQU4KLQlDb25maWd1cmUgaW50ZXJmYWNlLXNwZWNpZmljIEhvc3QvUm91dGVyIGJlaGF2aW91ci4gIAogCi0JTm90ZTogSXQgaXMgcmVjb21tZW5kZWQgdG8gaGF2ZSB0aGUgc2FtZSBzZXR0aW5nIG9uIGFsbCAKK2ZvcndhcmRpbmcgLSBCT09MRUFOCisJQ29uZmlndXJlIGludGVyZmFjZS1zcGVjaWZpYyBIb3N0L1JvdXRlciBiZWhhdmlvdXIuCisKKwlOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byBoYXZlIHRoZSBzYW1lIHNldHRpbmcgb24gYWxsCiAJaW50ZXJmYWNlczsgbWl4ZWQgcm91dGVyL2hvc3Qgc2NlbmFyaW9zIGFyZSByYXRoZXIgdW5jb21tb24uCiAKIAlGQUxTRToKQEAgLTk0OCwxMyArOTYwLDEzIEBACiAKIAkxLiBJc1JvdXRlciBmbGFnIGlzIG5vdCBzZXQgaW4gTmVpZ2hib3VyIEFkdmVydGlzZW1lbnRzLgogCTIuIFJvdXRlciBTb2xpY2l0YXRpb25zIGFyZSBiZWluZyBzZW50IHdoZW4gbmVjZXNzYXJ5LgotCTMuIElmIGFjY2VwdF9yYSBpcyBUUlVFIChkZWZhdWx0KSwgYWNjZXB0IFJvdXRlciAKKwkzLiBJZiBhY2NlcHRfcmEgaXMgVFJVRSAoZGVmYXVsdCksIGFjY2VwdCBSb3V0ZXIKIAkgICBBZHZlcnRpc2VtZW50cyAoYW5kIGRvIGF1dG9jb25maWd1cmF0aW9uKS4KIAk0LiBJZiBhY2NlcHRfcmVkaXJlY3RzIGlzIFRSVUUgKGRlZmF1bHQpLCBhY2NlcHQgUmVkaXJlY3RzLgogCiAJVFJVRToKIAotCUlmIGxvY2FsIGZvcndhcmRpbmcgaXMgZW5hYmxlZCwgUm91dGVyIGJlaGF2aW91ciBpcyBhc3N1bWVkLiAKKwlJZiBsb2NhbCBmb3J3YXJkaW5nIGlzIGVuYWJsZWQsIFJvdXRlciBiZWhhdmlvdXIgaXMgYXNzdW1lZC4KIAlUaGlzIG1lYW5zIGV4YWN0bHkgdGhlIHJldmVyc2UgZnJvbSB0aGUgYWJvdmU6CiAKIAkxLiBJc1JvdXRlciBmbGFnIGlzIHNldCBpbiBOZWlnaGJvdXIgQWR2ZXJ0aXNlbWVudHMuCkBAIC05ODksNyArMTAwMSw3IEBACiAJRGVmYXVsdDogNAogCiByb3V0ZXJfc29saWNpdGF0aW9ucyAtIElOVEVHRVIKLQlOdW1iZXIgb2YgUm91dGVyIFNvbGljaXRhdGlvbnMgdG8gc2VuZCB1bnRpbCBhc3N1bWluZyBubyAKKwlOdW1iZXIgb2YgUm91dGVyIFNvbGljaXRhdGlvbnMgdG8gc2VuZCB1bnRpbCBhc3N1bWluZyBubwogCXJvdXRlcnMgYXJlIHByZXNlbnQuCiAJRGVmYXVsdDogMwogCkBAIC0xMDEzLDExICsxMDI1LDExIEBACiAKIG1heF9kZXN5bmNfZmFjdG9yIC0gSU5URUdFUgogCU1heGltdW0gdmFsdWUgZm9yIERFU1lOQ19GQUNUT1IsIHdoaWNoIGlzIGEgcmFuZG9tIHZhbHVlCi0JdGhhdCBlbnN1cmVzIHRoYXQgY2xpZW50cyBkb24ndCBzeW5jaHJvbml6ZSB3aXRoIGVhY2ggCisJdGhhdCBlbnN1cmVzIHRoYXQgY2xpZW50cyBkb24ndCBzeW5jaHJvbml6ZSB3aXRoIGVhY2gKIAlvdGhlciBhbmQgZ2VuZXJhdGUgbmV3IGFkZHJlc3NlcyBhdCBleGFjdGx5IHRoZSBzYW1lIHRpbWUuCiAJdmFsdWUgaXMgaW4gc2Vjb25kcy4KIAlEZWZhdWx0OiA2MDAKLQkKKwogcmVnZW5fbWF4X3JldHJ5IC0gSU5URUdFUgogCU51bWJlciBvZiBhdHRlbXB0cyBiZWZvcmUgZ2l2ZSB1cCBhdHRlbXB0aW5nIHRvIGdlbmVyYXRlCiAJdmFsaWQgdGVtcG9yYXJ5IGFkZHJlc3Nlcy4KQEAgLTEwMjUsMTMgKzEwMzcsMTUgQEAKIAogbWF4X2FkZHJlc3NlcyAtIElOVEVHRVIKIAlOdW1iZXIgb2YgbWF4aW11bSBhZGRyZXNzZXMgcGVyIGludGVyZmFjZS4gIDAgZGlzYWJsZXMgbGltaXRhdGlvbi4KLQlJdCBpcyByZWNvbW1lbmRlZCBub3Qgc2V0IHRvbyBsYXJnZSB2YWx1ZSAob3IgMCkgYmVjYXVzZSBpdCB3b3VsZCAKLQliZSB0b28gZWFzeSB3YXkgdG8gY3Jhc2gga2VybmVsIHRvIGFsbG93IHRvIGNyZWF0ZSB0b28gbXVjaCBvZiAKKwlJdCBpcyByZWNvbW1lbmRlZCBub3Qgc2V0IHRvbyBsYXJnZSB2YWx1ZSAob3IgMCkgYmVjYXVzZSBpdCB3b3VsZAorCWJlIHRvbyBlYXN5IHdheSB0byBjcmFzaCBrZXJuZWwgdG8gYWxsb3cgdG8gY3JlYXRlIHRvbyBtdWNoIG9mCiAJYXV0b2NvbmZpZ3VyZWQgYWRkcmVzc2VzLgogCURlZmF1bHQ6IDE2CiAKIGRpc2FibGVfaXB2NiAtIEJPT0xFQU4KLQlEaXNhYmxlIElQdjYgb3BlcmF0aW9uLgorCURpc2FibGUgSVB2NiBvcGVyYXRpb24uICBJZiBhY2NlcHRfZGFkIGlzIHNldCB0byAyLCB0aGlzIHZhbHVlCisJd2lsbCBiZSBkeW5hbWljYWxseSBzZXQgdG8gVFJVRSBpZiBEQUQgZmFpbHMgZm9yIHRoZSBsaW5rLWxvY2FsCisJYWRkcmVzcy4KIAlEZWZhdWx0OiBGQUxTRSAoZW5hYmxlIElQdjYgb3BlcmF0aW9uKQogCiBhY2NlcHRfZGFkIC0gSU5URUdFUgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JlLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWViNjg2OAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZS50eHQKQEAgLTAsMCArMSwxOTkgQEAKK0xpbnV4IEJhc2UgRHJpdmVyIGZvciAxMCBHaWdhYml0IFBDSSBFeHByZXNzIEludGVsKFIpIE5ldHdvcmsgQ29ubmVjdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK01hcmNoIDEwLCAyMDA5CisKKworQ29udGVudHMKKz09PT09PT09CisKKy0gSW4gVGhpcyBSZWxlYXNlCistIElkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorLSBCdWlsZGluZyBhbmQgSW5zdGFsbGF0aW9uCistIEFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKy0gU3VwcG9ydAorCisKKworSW4gVGhpcyBSZWxlYXNlCis9PT09PT09PT09PT09PT0KKworVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgaXhnYmUgTGludXggQmFzZSBEcml2ZXIgZm9yIHRoZSAxMCBHaWdhYml0IFBDSQorRXhwcmVzcyBJbnRlbChSKSBOZXR3b3JrIENvbm5lY3Rpb24uICBUaGlzIGRyaXZlciBpbmNsdWRlcyBzdXBwb3J0IGZvcgorSXRhbml1bShSKTItYmFzZWQgc3lzdGVtcy4KKworRm9yIHF1ZXN0aW9ucyByZWxhdGVkIHRvIGhhcmR3YXJlIHJlcXVpcmVtZW50cywgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24KK3N1cHBsaWVkIHdpdGggeW91ciAxMCBHaWdhYml0IGFkYXB0ZXIuICBBbGwgaGFyZHdhcmUgcmVxdWlyZW1lbnRzIGxpc3RlZCBhcHBseQordG8gdXNlIHdpdGggTGludXguCisKK1RoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGlzIGtlcm5lbDoKKyAtIE5hdGl2ZSBWTEFOcworIC0gQ2hhbm5lbCBCb25kaW5nICh0ZWFtaW5nKQorIC0gU05NUAorIC0gR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQKKyAtIERhdGEgQ2VudGVyIEJyaWRnaW5nCisKK0NoYW5uZWwgQm9uZGluZyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgTGludXgga2VybmVsIHNvdXJjZToKKy9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKKworRXRodG9vbCwgbHNwY2ksIGFuZCBpZmNvbmZpZyBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IGRldmljZSBhbmQgZHJpdmVyCitzcGVjaWZpYyBpbmZvcm1hdGlvbi4KKworCitJZGVudGlmeWluZyBZb3VyIEFkYXB0ZXIKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRyaXZlciBzdXBwb3J0cyBkZXZpY2VzIGJhc2VkIG9uIHRoZSA4MjU5OCBjb250cm9sbGVyIGFuZCB0aGUgODI1OTkKK2NvbnRyb2xsZXIuCisKK0ZvciBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBpZGVudGlmeWluZyB3aGljaCBhZGFwdGVyIHlvdSBoYXZlLCBwbGVhc2UgdmlzaXQ6CisKKyAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9uZXR3b3JrL3NiL0NTLTAwODQ0MS5odG0KKworCitCdWlsZGluZyBhbmQgSW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09CisKK3NlbGVjdCBtIGZvciAiSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydCIgbG9jYXRlZCBhdDoKKyAgICAgIExvY2F0aW9uOgorICAgICAgICAtPiBEZXZpY2UgRHJpdmVycworICAgICAgICAgIC0+IE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQgKE5FVERFVklDRVMgWz15XSkKKyAgICAgICAgICAgIC0+IEV0aGVybmV0ICgxMDAwMCBNYml0KSAoTkVUREVWXzEwMDAwIFs9eV0pCisKKzEuIG1ha2UgbW9kdWxlcyAmIG1ha2UgbW9kdWxlc19pbnN0YWxsCisKKzIuIExvYWQgdGhlIG1vZHVsZToKKworIyBtb2Rwcm9iZSBpeGdiZQorCisgICBUaGUgaW5zbW9kIGNvbW1hbmQgY2FuIGJlIHVzZWQgaWYgdGhlIGZ1bGwKKyAgIHBhdGggdG8gdGhlIGRyaXZlciBtb2R1bGUgaXMgc3BlY2lmaWVkLiAgRm9yIGV4YW1wbGU6CisKKyAgICAgaW5zbW9kIC9saWIvbW9kdWxlcy88S0VSTkVMIFZFUlNJT04+L2tlcm5lbC9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5rbworCisgICBXaXRoIDIuNiBiYXNlZCBrZXJuZWxzIGFsc28gbWFrZSBzdXJlIHRoYXQgb2xkZXIgaXhnYmUgZHJpdmVycyBhcmUKKyAgIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsLCBiZWZvcmUgbG9hZGluZyB0aGUgbmV3IG1vZHVsZToKKworICAgICBybW1vZCBpeGdiZTsgbW9kcHJvYmUgaXhnYmUKKworMy4gQXNzaWduIGFuIElQIGFkZHJlc3MgdG8gdGhlIGludGVyZmFjZSBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nLCB3aGVyZQorICAgeCBpcyB0aGUgaW50ZXJmYWNlIG51bWJlcjoKKworICAgICBpZmNvbmZpZyBldGh4IDxJUF9hZGRyZXNzPgorCis0LiBWZXJpZnkgdGhhdCB0aGUgaW50ZXJmYWNlIHdvcmtzLiBFbnRlciB0aGUgZm9sbG93aW5nLCB3aGVyZSA8SVBfYWRkcmVzcz4KKyAgIGlzIHRoZSBJUCBhZGRyZXNzIGZvciBhbm90aGVyIG1hY2hpbmUgb24gdGhlIHNhbWUgc3VibmV0IGFzIHRoZSBpbnRlcmZhY2UKKyAgIHRoYXQgaXMgYmVpbmcgdGVzdGVkOgorCisgICAgIHBpbmcgIDxJUF9hZGRyZXNzPgorCisKK0FkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBWaWV3aW5nIExpbmsgTWVzc2FnZXMKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIExpbmsgbWVzc2FnZXMgd2lsbCBub3QgYmUgZGlzcGxheWVkIHRvIHRoZSBjb25zb2xlIGlmIHRoZSBkaXN0cmlidXRpb24gaXMKKyAgcmVzdHJpY3Rpbmcgc3lzdGVtIG1lc3NhZ2VzLiBJbiBvcmRlciB0byBzZWUgbmV0d29yayBkcml2ZXIgbGluayBtZXNzYWdlcyBvbgorICB5b3VyIGNvbnNvbGUsIHNldCBkbWVzZyB0byBlaWdodCBieSBlbnRlcmluZyB0aGUgZm9sbG93aW5nOgorCisgICAgICAgZG1lc2cgLW4gOAorCisgIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuCisKKworICBKdW1ibyBGcmFtZXMKKyAgLS0tLS0tLS0tLS0tCisgIFRoZSBkcml2ZXIgc3VwcG9ydHMgSnVtYm8gRnJhbWVzIGZvciBhbGwgYWRhcHRlcnMuIEp1bWJvIEZyYW1lcyBzdXBwb3J0IGlzCisgIGVuYWJsZWQgYnkgY2hhbmdpbmcgdGhlIE1UVSB0byBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSBkZWZhdWx0IG9mIDE1MDAuCisgIFRoZSBtYXhpbXVtIHZhbHVlIGZvciB0aGUgTVRVIGlzIDE2MTEwLiAgVXNlIHRoZSBpZmNvbmZpZyBjb21tYW5kIHRvCisgIGluY3JlYXNlIHRoZSBNVFUgc2l6ZS4gIEZvciBleGFtcGxlOgorCisgICAgICAgIGlmY29uZmlnIGV0aHggbXR1IDkwMDAgdXAKKworICBUaGUgbWF4aW11bSBNVFUgc2V0dGluZyBmb3IgSnVtYm8gRnJhbWVzIGlzIDE2MTEwLiAgVGhpcyB2YWx1ZSBjb2luY2lkZXMKKyAgd2l0aCB0aGUgbWF4aW11bSBKdW1ibyBGcmFtZXMgc2l6ZSBvZiAxNjEyOC4KKworICBHZW5lcmljIFJlY2VpdmUgT2ZmbG9hZCwgYWthIEdSTworICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBUaGUgZHJpdmVyIHN1cHBvcnRzIHRoZSBpbi1rZXJuZWwgc29mdHdhcmUgaW1wbGVtZW50YXRpb24gb2YgR1JPLiAgR1JPIGhhcworICBzaG93biB0aGF0IGJ5IGNvYWxlc2NpbmcgUnggdHJhZmZpYyBpbnRvIGxhcmdlciBjaHVua3Mgb2YgZGF0YSwgQ1BVCisgIHV0aWxpemF0aW9uIGNhbiBiZSBzaWduaWZpY2FudGx5IHJlZHVjZWQgd2hlbiB1bmRlciBsYXJnZSBSeCBsb2FkLiAgR1JPIGlzIGFuCisgIGV2b2x1dGlvbiBvZiB0aGUgcHJldmlvdXNseS11c2VkIExSTyBpbnRlcmZhY2UuICBHUk8gaXMgYWJsZSB0byBjb2FsZXNjZQorICBvdGhlciBwcm90b2NvbHMgYmVzaWRlcyBUQ1AuICBJdCdzIGFsc28gc2FmZSB0byB1c2Ugd2l0aCBjb25maWd1cmF0aW9ucyB0aGF0CisgIGFyZSBwcm9ibGVtYXRpYyBmb3IgTFJPLCBuYW1lbHkgYnJpZGdpbmcgYW5kIGlTQ1NJLgorCisgIEdSTyBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIGRyaXZlci4gIEZ1dHVyZSB2ZXJzaW9ucyBvZiBldGh0b29sIHdpbGwKKyAgc3VwcG9ydCBkaXNhYmxpbmcgYW5kIHJlLWVuYWJsaW5nIEdSTyBvbiB0aGUgZmx5LgorCisKKyAgRGF0YSBDZW50ZXIgQnJpZGdpbmcsIGFrYSBEQ0IKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBEQ0IgaXMgYSBjb25maWd1cmF0aW9uIFF1YWxpdHkgb2YgU2VydmljZSBpbXBsZW1lbnRhdGlvbiBpbiBoYXJkd2FyZS4KKyAgSXQgdXNlcyB0aGUgVkxBTiBwcmlvcml0eSB0YWcgKDgwMi4xcCkgdG8gZmlsdGVyIHRyYWZmaWMuICBUaGF0IG1lYW5zCisgIHRoYXQgdGhlcmUgYXJlIDggZGlmZmVyZW50IHByaW9yaXRpZXMgdGhhdCB0cmFmZmljIGNhbiBiZSBmaWx0ZXJlZCBpbnRvLgorICBJdCBhbHNvIGVuYWJsZXMgcHJpb3JpdHkgZmxvdyBjb250cm9sIHdoaWNoIGNhbiBsaW1pdCBvciBlbGltaW5hdGUgdGhlCisgIG51bWJlciBvZiBkcm9wcGVkIHBhY2tldHMgZHVyaW5nIG5ldHdvcmsgc3RyZXNzLiAgQmFuZHdpZHRoIGNhbiBiZQorICBhbGxvY2F0ZWQgdG8gZWFjaCBvZiB0aGVzZSBwcmlvcml0aWVzLCB3aGljaCBpcyBlbmZvcmNlZCBhdCB0aGUgaGFyZHdhcmUKKyAgbGV2ZWwuCisKKyAgVG8gZW5hYmxlIERDQiBzdXBwb3J0IGluIGl4Z2JlLCB5b3UgbXVzdCBlbmFibGUgdGhlIERDQiBuZXRsaW5rIGxheWVyIHRvCisgIGFsbG93IHRoZSB1c2Vyc3BhY2UgdG9vbHMgKHNlZSBiZWxvdykgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgZHJpdmVyLgorICBUaGlzIGNhbiBiZSBmb3VuZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gaGVyZToKKworICAgICAgICAtPiBOZXR3b3JraW5nIHN1cHBvcnQKKyAgICAgICAgICAtPiBOZXR3b3JraW5nIG9wdGlvbnMKKyAgICAgICAgICAgIC0+IERhdGEgQ2VudGVyIEJyaWRnaW5nIHN1cHBvcnQKKworICBPbmNlIHRoaXMgaXMgc2VsZWN0ZWQsIERDQiBzdXBwb3J0IG11c3QgYmUgc2VsZWN0ZWQgZm9yIGl4Z2JlLiAgVGhpcyBjYW4KKyAgYmUgZm91bmQgaGVyZToKKworICAgICAgICAtPiBEZXZpY2UgRHJpdmVycworICAgICAgICAgIC0+IE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQgKE5FVERFVklDRVMgWz15XSkKKyAgICAgICAgICAgIC0+IEV0aGVybmV0ICgxMDAwMCBNYml0KSAoTkVUREVWXzEwMDAwIFs9eV0pCisgICAgICAgICAgICAgIC0+IEludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAtPiBEYXRhIENlbnRlciBCcmlkZ2luZyAoRENCKSBTdXBwb3J0CisKKyAgQWZ0ZXIgdGhlc2Ugb3B0aW9ucyBhcmUgc2VsZWN0ZWQsIHlvdSBtdXN0IHJlYnVpbGQgeW91ciBrZXJuZWwgYW5kIHlvdXIKKyAgbW9kdWxlcy4KKworICBJbiBvcmRlciB0byB1c2UgRENCLCB1c2Vyc3BhY2UgdG9vbHMgbXVzdCBiZSBkb3dubG9hZGVkIGFuZCBpbnN0YWxsZWQuCisgIFRoZSBkY2JkIHRvb2xzIGNhbiBiZSBmb3VuZCBhdDoKKworICAgICAgICBodHRwOi8vZTEwMDAuc2YubmV0CisKKworICBFdGh0b29sCisgIC0tLS0tLS0KKyAgVGhlIGRyaXZlciB1dGlsaXplcyB0aGUgZXRodG9vbCBpbnRlcmZhY2UgZm9yIGRyaXZlciBjb25maWd1cmF0aW9uIGFuZAorICBkaWFnbm9zdGljcywgYXMgd2VsbCBhcyBkaXNwbGF5aW5nIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLiAgRXRodG9vbAorICB2ZXJzaW9uIDMuMCBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LgorCisgIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBldGh0b29sIGNhbiBiZSBmb3VuZCBmcm9tCisgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KKworCisgIE5BUEkKKyAgLS0tLQorCisgIE5BUEkgKFJ4IHBvbGxpbmcgbW9kZSkgaXMgc3VwcG9ydGVkIGluIHRoZSBpeGdiZSBkcml2ZXIuICBOQVBJIGlzIGVuYWJsZWQKKyAgYnkgZGVmYXVsdCBpbiB0aGUgZHJpdmVyLgorCisgIFNlZSB3d3cuY3liZXJ1cy5jYS9+aGFkaS91c2VuaXgtcGFwZXIudGd6IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIE5BUEkuCisKKworU3VwcG9ydAorPT09PT09PQorCitGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbQorCitvciB0aGUgSW50ZWwgV2lyZWQgTmV0d29ya2luZyBwcm9qZWN0IGhvc3RlZCBieSBTb3VyY2Vmb3JnZSBhdDoKKworICAgIGh0dHA6Ly9lMTAwMC5zb3VyY2Vmb3JnZS5uZXQKKworSWYgYW4gaXNzdWUgaXMgaWRlbnRpZmllZCB3aXRoIHRoZSByZWxlYXNlZCBzb3VyY2UgY29kZSBvbiB0aGUgc3VwcG9ydGVkCitrZXJuZWwgd2l0aCBhIHN1cHBvcnRlZCBhZGFwdGVyLCBlbWFpbCB0aGUgc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVsYXRlZAordG8gdGhlIGlzc3VlIHRvIGUxMDAwLWRldmVsQGxpc3RzLnNmLm5ldApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Jkcy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmRzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjcwNzdjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3Jkcy50eHQKQEAgLTAsMCArMSwzNTYgQEAKKworT3ZlcnZpZXcKKz09PT09PT09CisKK1RoaXMgcmVhZG1lIHRyaWVzIHRvIHByb3ZpZGUgc29tZSBiYWNrZ3JvdW5kIG9uIHRoZSBob3dzIGFuZCB3aHlzIG9mIFJEUywKK2FuZCB3aWxsIGhvcGVmdWxseSBoZWxwIHlvdSBmaW5kIHlvdXIgd2F5IGFyb3VuZCB0aGUgY29kZS4KKworSW4gYWRkaXRpb24sIHBsZWFzZSBzZWUgdGhpcyBlbWFpbCBhYm91dCBSRFMgb3JpZ2luczoKK2h0dHA6Ly9vc3Mub3JhY2xlLmNvbS9waXBlcm1haWwvcmRzLWRldmVsLzIwMDctTm92ZW1iZXIvMDAwMjI4Lmh0bWwKKworUkRTIEFyY2hpdGVjdHVyZQorPT09PT09PT09PT09PT09PQorCitSRFMgcHJvdmlkZXMgcmVsaWFibGUsIG9yZGVyZWQgZGF0YWdyYW0gZGVsaXZlcnkgYnkgdXNpbmcgYSBzaW5nbGUKK3JlbGlhYmxlIGNvbm5lY3Rpb24gYmV0d2VlbiBhbnkgdHdvIG5vZGVzIGluIHRoZSBjbHVzdGVyLiBUaGlzIGFsbG93cworYXBwbGljYXRpb25zIHRvIHVzZSBhIHNpbmdsZSBzb2NrZXQgdG8gdGFsayB0byBhbnkgb3RoZXIgcHJvY2VzcyBpbiB0aGUKK2NsdXN0ZXIgLSBzbyBpbiBhIGNsdXN0ZXIgd2l0aCBOIHByb2Nlc3NlcyB5b3UgbmVlZCBOIHNvY2tldHMsIGluIGNvbnRyYXN0Cit0byBOKk4gaWYgeW91IHVzZSBhIGNvbm5lY3Rpb24tb3JpZW50ZWQgc29ja2V0IHRyYW5zcG9ydCBsaWtlIFRDUC4KKworUkRTIGlzIG5vdCBJbmZpbmliYW5kLXNwZWNpZmljOyBpdCB3YXMgZGVzaWduZWQgdG8gc3VwcG9ydCBkaWZmZXJlbnQKK3RyYW5zcG9ydHMuICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIHN1cHBvcnQgUkRTIG92ZXIgVENQIGFzIHdlbGwKK2FzIElCLiBXb3JrIGlzIGluIHByb2dyZXNzIHRvIHN1cHBvcnQgUkRTIG92ZXIgaVdBUlAsIGFuZCB1c2luZyBEQ0UgdG8KK2d1YXJhbnRlZSBubyBkcm9wcGVkIHBhY2tldHMgb24gRXRoZXJuZXQsIGl0IG1heSBiZSBwb3NzaWJsZSB0byB1c2UgUkRTIG92ZXIKK1VEUCBpbiB0aGUgZnV0dXJlLgorCitUaGUgaGlnaC1sZXZlbCBzZW1hbnRpY3Mgb2YgUkRTIGZyb20gdGhlIGFwcGxpY2F0aW9uJ3MgcG9pbnQgb2YgdmlldyBhcmUKKworICoJQWRkcmVzc2luZworICAgICAgICBSRFMgdXNlcyBJUHY0IGFkZHJlc3NlcyBhbmQgMTZiaXQgcG9ydCBudW1iZXJzIHRvIGlkZW50aWZ5CisgICAgICAgIHRoZSBlbmQgcG9pbnQgb2YgYSBjb25uZWN0aW9uLiBBbGwgc29ja2V0IG9wZXJhdGlvbnMgdGhhdCBpbnZvbHZlCisgICAgICAgIHBhc3NpbmcgYWRkcmVzc2VzIGJldHdlZW4ga2VybmVsIGFuZCB1c2VyIHNwYWNlIGdlbmVyYWxseQorICAgICAgICB1c2UgYSBzdHJ1Y3Qgc29ja2FkZHJfaW4uCisKKyAgICAgICAgVGhlIGZhY3QgdGhhdCBJUHY0IGFkZHJlc3NlcyBhcmUgdXNlZCBkb2VzIG5vdCBtZWFuIHRoZSB1bmRlcmx5aW5nCisgICAgICAgIHRyYW5zcG9ydCBoYXMgdG8gYmUgSVAtYmFzZWQuIEluIGZhY3QsIFJEUyBvdmVyIElCIHVzZXMgYQorICAgICAgICByZWxpYWJsZSBJQiBjb25uZWN0aW9uOyB0aGUgSVAgYWRkcmVzcyBpcyB1c2VkIGV4Y2x1c2l2ZWx5IHRvCisgICAgICAgIGxvY2F0ZSB0aGUgcmVtb3RlIG5vZGUncyBHSUQgKGJ5IEFSUGluZyBmb3IgdGhlIGdpdmVuIElQKS4KKworICAgICAgICBUaGUgcG9ydCBzcGFjZSBpcyBlbnRpcmVseSBpbmRlcGVuZGVudCBvZiBVRFAsIFRDUCBvciBhbnkgb3RoZXIKKyAgICAgICAgcHJvdG9jb2wuCisKKyAqCVNvY2tldCBpbnRlcmZhY2UKKyAgICAgICAgUkRTIHNvY2tldHMgd29yayAqbW9zdGx5KiBhcyB5b3Ugd291bGQgZXhwZWN0IGZyb20gYSBCU0QKKyAgICAgICAgc29ja2V0LiBUaGUgbmV4dCBzZWN0aW9uIHdpbGwgY292ZXIgdGhlIGRldGFpbHMuIEF0IGFueSByYXRlLAorICAgICAgICBhbGwgSS9PIGlzIHBlcmZvcm1lZCB0aHJvdWdoIHRoZSBzdGFuZGFyZCBCU0Qgc29ja2V0IEFQSS4KKyAgICAgICAgU29tZSBhZGRpdGlvbnMgbGlrZSB6ZXJvY29weSBzdXBwb3J0IGFyZSBpbXBsZW1lbnRlZCB0aHJvdWdoCisgICAgICAgIGNvbnRyb2wgbWVzc2FnZXMsIHdoaWxlIG90aGVyIGV4dGVuc2lvbnMgdXNlIHRoZSBnZXRzb2Nrb3B0LworICAgICAgICBzZXRzb2Nrb3B0IGNhbGxzLgorCisgICAgICAgIFNvY2tldHMgbXVzdCBiZSBib3VuZCBiZWZvcmUgeW91IGNhbiBzZW5kIG9yIHJlY2VpdmUgZGF0YS4KKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBiaW5kaW5nIGFsc28gc2VsZWN0cyBhIHRyYW5zcG9ydCBhbmQKKyAgICAgICAgYXR0YWNoZXMgaXQgdG8gdGhlIHNvY2tldC4gT25jZSBib3VuZCwgdGhlIHRyYW5zcG9ydCBhc3NpZ25tZW50CisgICAgICAgIGRvZXMgbm90IGNoYW5nZS4gUkRTIHdpbGwgdG9sZXJhdGUgSVBzIG1vdmluZyBhcm91bmQgKGVnIGluCisgICAgICAgIGEgYWN0aXZlLWFjdGl2ZSBIQSBzY2VuYXJpbyksIGJ1dCBvbmx5IGFzIGxvbmcgYXMgdGhlIGFkZHJlc3MKKyAgICAgICAgZG9lc24ndCBtb3ZlIHRvIGEgZGlmZmVyZW50IHRyYW5zcG9ydC4KKworICoJc3lzY3RscworICAgICAgICBSRFMgc3VwcG9ydHMgYSBudW1iZXIgb2Ygc3lzY3RscyBpbiAvcHJvYy9zeXMvbmV0L3JkcworCisKK1NvY2tldCBJbnRlcmZhY2UKKz09PT09PT09PT09PT09PT0KKworICBBRl9SRFMsIFBGX1JEUywgU09MX1JEUworICAgICAgICBUaGVzZSBjb25zdGFudHMgaGF2ZW4ndCBiZWVuIGFzc2lnbmVkIHlldCwgYmVjYXVzZSBSRFMgaXNuJ3QgaW4KKyAgICAgICAgbWFpbmxpbmUgeWV0LiBDdXJyZW50bHksIHRoZSBrZXJuZWwgbW9kdWxlIGFzc2lnbnMgc29tZSBjb25zdGFudAorICAgICAgICBhbmQgcHVibGlzaGVzIGl0IHRvIHVzZXIgc3BhY2UgdGhyb3VnaCB0d28gc3lzY3RsIGZpbGVzCisgICAgICAgICAgICAgICAgL3Byb2Mvc3lzL25ldC9yZHMvcGZfcmRzCisgICAgICAgICAgICAgICAgL3Byb2Mvc3lzL25ldC9yZHMvc29sX3JkcworCisgIGZkID0gc29ja2V0KFBGX1JEUywgU09DS19TRVFQQUNLRVQsIDApOworICAgICAgICBUaGlzIGNyZWF0ZXMgYSBuZXcsIHVuYm91bmQgUkRTIHNvY2tldC4KKworICBzZXRzb2Nrb3B0KFNPTF9TT0NLRVQpOiBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciBzaXplCisgICAgICAgIFJEUyBob25vcnMgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVyIHNpemUgc29ja2V0IG9wdGlvbnMuCisgICAgICAgIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gcXVldWUgbW9yZSB0aGFuIFNPX1NORFNJWkUgYnl0ZXMgdG8KKyAgICAgICAgYSBzb2NrZXQuIEEgbWVzc2FnZSBpcyBxdWV1ZWQgd2hlbiBzZW5kbXNnIGlzIGNhbGxlZCwgYW5kCisgICAgICAgIGl0IGxlYXZlcyB0aGUgcXVldWUgd2hlbiB0aGUgcmVtb3RlIHN5c3RlbSBhY2tub3dsZWRnZXMKKyAgICAgICAgaXRzIGFycml2YWwuCisKKyAgICAgICAgVGhlIFNPX1JDVlNJWkUgb3B0aW9uIGNvbnRyb2xzIHRoZSBtYXhpbXVtIHJlY2VpdmUgcXVldWUgbGVuZ3RoLgorICAgICAgICBUaGlzIGlzIGEgc29mdCBsaW1pdCByYXRoZXIgdGhhbiBhIGhhcmQgbGltaXQgLSBSRFMgd2lsbAorICAgICAgICBjb250aW51ZSB0byBhY2NlcHQgYW5kIHF1ZXVlIGluY29taW5nIG1lc3NhZ2VzLCBldmVuIGlmIHRoYXQKKyAgICAgICAgdGFrZXMgdGhlIHF1ZXVlIGxlbmd0aCBvdmVyIHRoZSBsaW1pdC4gSG93ZXZlciwgaXQgd2lsbCBhbHNvCisgICAgICAgIG1hcmsgdGhlIHBvcnQgYXMgImNvbmdlc3RlZCIgYW5kIHNlbmQgYSBjb25nZXN0aW9uIHVwZGF0ZSB0bworICAgICAgICB0aGUgc291cmNlIG5vZGUuIFRoZSBzb3VyY2Ugbm9kZSBpcyBzdXBwb3NlZCB0byB0aHJvdHRsZSBhbnkKKyAgICAgICAgcHJvY2Vzc2VzIHNlbmRpbmcgdG8gdGhpcyBjb25nZXN0ZWQgcG9ydC4KKworICBiaW5kKGZkLCAmc29ja2FkZHJfaW4sIC4uLikKKyAgICAgICAgVGhpcyBiaW5kcyB0aGUgc29ja2V0IHRvIGEgbG9jYWwgSVAgYWRkcmVzcyBhbmQgcG9ydCwgYW5kIGEKKyAgICAgICAgdHJhbnNwb3J0LgorCisgIHNlbmRtc2coZmQsIC4uLikKKyAgICAgICAgU2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBpbmRpY2F0ZWQgcmVjaXBpZW50LiBUaGUga2VybmVsIHdpbGwKKyAgICAgICAgdHJhbnNwYXJlbnRseSBlc3RhYmxpc2ggdGhlIHVuZGVybHlpbmcgcmVsaWFibGUgY29ubmVjdGlvbgorICAgICAgICBpZiBpdCBpc24ndCB1cCB5ZXQuCisKKyAgICAgICAgQW4gYXR0ZW1wdCB0byBzZW5kIGEgbWVzc2FnZSB0aGF0IGV4Y2VlZHMgU09fU05EU0laRSB3aWxsCisgICAgICAgIHJldHVybiB3aXRoIC1FTVNHU0laRQorCisgICAgICAgIEFuIGF0dGVtcHQgdG8gc2VuZCBhIG1lc3NhZ2UgdGhhdCB3b3VsZCB0YWtlIHRoZSB0b3RhbCBudW1iZXIKKyAgICAgICAgb2YgcXVldWVkIGJ5dGVzIG92ZXIgdGhlIFNPX1NORFNJWkUgdGhyZXNob2xkIHdpbGwgcmV0dXJuCisgICAgICAgIEVBR0FJTi4KKworICAgICAgICBBbiBhdHRlbXB0IHRvIHNlbmQgYSBtZXNzYWdlIHRvIGEgZGVzdGluYXRpb24gdGhhdCBpcyBtYXJrZWQKKyAgICAgICAgYXMgImNvbmdlc3RlZCIgd2lsbCByZXR1cm4gRU5PQlVGUy4KKworICByZWN2bXNnKGZkLCAuLi4pCisgICAgICAgIFJlY2VpdmVzIGEgbWVzc2FnZSB0aGF0IHdhcyBxdWV1ZWQgdG8gdGhpcyBzb2NrZXQuIFRoZSBzb2NrZXRzCisgICAgICAgIHJlY3YgcXVldWUgYWNjb3VudGluZyBpcyBhZGp1c3RlZCwgYW5kIGlmIHRoZSBxdWV1ZSBsZW5ndGgKKyAgICAgICAgZHJvcHMgYmVsb3cgU09fU05EU0laRSwgdGhlIHBvcnQgaXMgbWFya2VkIHVuY29uZ2VzdGVkLCBhbmQKKyAgICAgICAgYSBjb25nZXN0aW9uIHVwZGF0ZSBpcyBzZW50IHRvIGFsbCBwZWVycy4KKworICAgICAgICBBcHBsaWNhdGlvbnMgY2FuIGFzayB0aGUgUkRTIGtlcm5lbCBtb2R1bGUgdG8gcmVjZWl2ZQorICAgICAgICBub3RpZmljYXRpb25zIHZpYSBjb250cm9sIG1lc3NhZ2VzIChmb3IgaW5zdGFuY2UsIHRoZXJlIGlzIGEKKyAgICAgICAgbm90aWZpY2F0aW9uIHdoZW4gYSBjb25nZXN0aW9uIHVwZGF0ZSBhcnJpdmVkLCBvciB3aGVuIGEgUkRNQQorICAgICAgICBvcGVyYXRpb24gY29tcGxldGVzKS4gVGhlc2Ugbm90aWZpY2F0aW9ucyBhcmUgcmVjZWl2ZWQgdGhyb3VnaAorICAgICAgICB0aGUgbXNnLm1zZ19jb250cm9sIGJ1ZmZlciBvZiBzdHJ1Y3QgbXNnaGRyLiBUaGUgZm9ybWF0IG9mIHRoZQorICAgICAgICBtZXNzYWdlcyBpcyBkZXNjcmliZWQgaW4gbWFucGFnZXMuCisKKyAgcG9sbChmZCkKKyAgICAgICAgUkRTIHN1cHBvcnRzIHRoZSBwb2xsIGludGVyZmFjZSB0byBhbGxvdyB0aGUgYXBwbGljYXRpb24KKyAgICAgICAgdG8gaW1wbGVtZW50IGFzeW5jIEkvTy4KKworICAgICAgICBQT0xMSU4gaGFuZGxpbmcgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gV2hlbiB0aGVyZSdzIGFuCisgICAgICAgIGluY29taW5nIG1lc3NhZ2UgcXVldWVkIHRvIHRoZSBzb2NrZXQsIG9yIGEgcGVuZGluZyBub3RpZmljYXRpb24sCisgICAgICAgIHdlIHNpZ25hbCBQT0xMSU4uCisKKyAgICAgICAgUE9MTE9VVCBpcyBhIGxpdHRsZSBoYXJkZXIuIFNpbmNlIHlvdSBjYW4gZXNzZW50aWFsbHkgc2VuZAorICAgICAgICB0byBhbnkgZGVzdGluYXRpb24sIFJEUyB3aWxsIGFsd2F5cyBzaWduYWwgUE9MTE9VVCBhcyBsb25nIGFzCisgICAgICAgIHRoZXJlJ3Mgcm9vbSBvbiB0aGUgc2VuZCBxdWV1ZSAoaWUgdGhlIG51bWJlciBvZiBieXRlcyBxdWV1ZWQKKyAgICAgICAgaXMgbGVzcyB0aGFuIHRoZSBzZW5kYnVmIHNpemUpLgorCisgICAgICAgIEhvd2V2ZXIsIHRoZSBrZXJuZWwgd2lsbCByZWZ1c2UgdG8gYWNjZXB0IG1lc3NhZ2VzIHRvCisgICAgICAgIGEgZGVzdGluYXRpb24gbWFya2VkIGNvbmdlc3RlZCAtIGluIHRoaXMgY2FzZSB5b3Ugd2lsbCBsb29wCisgICAgICAgIGZvcmV2ZXIgaWYgeW91IHJlbHkgb24gcG9sbCB0byB0ZWxsIHlvdSB3aGF0IHRvIGRvLgorICAgICAgICBUaGlzIGlzbid0IGEgdHJpdmlhbCBwcm9ibGVtLCBidXQgYXBwbGljYXRpb25zIGNhbiBkZWFsIHdpdGgKKyAgICAgICAgdGhpcyAtIGJ5IHVzaW5nIGNvbmdlc3Rpb24gbm90aWZpY2F0aW9ucywgYW5kIGJ5IGNoZWNraW5nIGZvcgorICAgICAgICBFTk9CVUZTIGVycm9ycyByZXR1cm5lZCBieSBzZW5kbXNnLgorCisgIHNldHNvY2tvcHQoU09MX1JEUywgUkRTX0NBTkNFTF9TRU5UX1RPLCAmc29ja2FkZHJfaW4pCisgICAgICAgIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byBkaXNjYXJkIGFsbCBtZXNzYWdlcyBxdWV1ZWQgdG8gYQorICAgICAgICBzcGVjaWZpYyBkZXN0aW5hdGlvbiBvbiB0aGlzIHBhcnRpY3VsYXIgc29ja2V0LgorCisgICAgICAgIFRoaXMgYWxsb3dzIHRoZSBhcHBsaWNhdGlvbiB0byBjYW5jZWwgb3V0c3RhbmRpbmcgbWVzc2FnZXMgaWYKKyAgICAgICAgaXQgZGV0ZWN0cyBhIHRpbWVvdXQuIEZvciBpbnN0YW5jZSwgaWYgaXQgdHJpZWQgdG8gc2VuZCBhIG1lc3NhZ2UsCisgICAgICAgIGFuZCB0aGUgcmVtb3RlIGhvc3QgaXMgdW5yZWFjaGFibGUsIFJEUyB3aWxsIGtlZXAgdHJ5aW5nIGZvcmV2ZXIuCisgICAgICAgIFRoZSBhcHBsaWNhdGlvbiBtYXkgZGVjaWRlIGl0J3Mgbm90IHdvcnRoIGl0LCBhbmQgY2FuY2VsIHRoZQorICAgICAgICBvcGVyYXRpb24uIEluIHRoaXMgY2FzZSwgaXQgd291bGQgdXNlIFJEU19DQU5DRUxfU0VOVF9UTyB0bworICAgICAgICBudWtlIGFueSBwZW5kaW5nIG1lc3NhZ2VzLgorCisKK1JETUEgZm9yIFJEUworPT09PT09PT09PT09CisKKyAgc2VlIHJkcy1yZG1hKDcpIG1hbnBhZ2UgKGF2YWlsYWJsZSBpbiByZHMtdG9vbHMpCisKKworQ29uZ2VzdGlvbiBOb3RpZmljYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworICBzZWUgcmRzKDcpIG1hbnBhZ2UKKworCitSRFMgUHJvdG9jb2wKKz09PT09PT09PT09PQorCisgIE1lc3NhZ2UgaGVhZGVyCisKKyAgICBUaGUgbWVzc2FnZSBoZWFkZXIgaXMgYSAnc3RydWN0IHJkc19oZWFkZXInIChzZWUgcmRzLmgpOgorICAgIEZpZWxkczoKKyAgICAgIGhfc2VxdWVuY2U6CisgICAgICAgICAgcGVyLXBhY2tldCBzZXF1ZW5jZSBudW1iZXIKKyAgICAgIGhfYWNrOgorICAgICAgICAgIHBpZ2d5YmFja2VkIGFja25vd2xlZGdtZW50IG9mIGxhc3QgcGFja2V0IHJlY2VpdmVkCisgICAgICBoX2xlbjoKKyAgICAgICAgICBsZW5ndGggb2YgZGF0YSwgbm90IGluY2x1ZGluZyBoZWFkZXIKKyAgICAgIGhfc3BvcnQ6CisgICAgICAgICAgc291cmNlIHBvcnQKKyAgICAgIGhfZHBvcnQ6CisgICAgICAgICAgZGVzdGluYXRpb24gcG9ydAorICAgICAgaF9mbGFnczoKKyAgICAgICAgICBDT05HX0JJVE1BUCAtIHRoaXMgaXMgYSBjb25nZXN0aW9uIHVwZGF0ZSBiaXRtYXAKKyAgICAgICAgICBBQ0tfUkVRVUlSRUQgLSByZWNlaXZlciBtdXN0IGFjayB0aGlzIHBhY2tldAorICAgICAgICAgIFJFVFJBTlNNSVRURUQgLSBwYWNrZXQgaGFzIHByZXZpb3VzbHkgYmVlbiBzZW50CisgICAgICBoX2NyZWRpdDoKKyAgICAgICAgICBpbmRpY2F0ZSB0byBvdGhlciBlbmQgb2YgY29ubmVjdGlvbiB0aGF0CisgICAgICAgICAgaXQgaGFzIG1vcmUgY3JlZGl0cyBhdmFpbGFibGUgKGkuZS4gdGhlcmUgaXMKKyAgICAgICAgICBtb3JlIHNlbmQgcm9vbSkKKyAgICAgIGhfcGFkZGluZ1s0XToKKyAgICAgICAgICB1bnVzZWQsIGZvciBmdXR1cmUgdXNlCisgICAgICBoX2NzdW06CisgICAgICAgICAgaGVhZGVyIGNoZWNrc3VtCisgICAgICBoX2V4dGhkcjoKKyAgICAgICAgICBvcHRpb25hbCBkYXRhIGNhbiBiZSBwYXNzZWQgaGVyZS4gVGhpcyBpcyBjdXJyZW50bHkgdXNlZCBmb3IKKyAgICAgICAgICBwYXNzaW5nIFJETUEtcmVsYXRlZCBpbmZvcm1hdGlvbi4KKworICBBQ0sgYW5kIHJldHJhbnNtaXQgaGFuZGxpbmcKKworICAgICAgT25lIG1pZ2h0IHRoaW5rIHRoYXQgd2l0aCByZWxpYWJsZSBJQiBjb25uZWN0aW9ucyB5b3Ugd291bGRuJ3QgbmVlZAorICAgICAgdG8gYWNrIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAgVGhlIHByb2JsZW0gaXMgdGhhdCBJQgorICAgICAgaGFyZHdhcmUgZ2VuZXJhdGVzIGFuIGFjayBtZXNzYWdlIGJlZm9yZSBpdCBoYXMgRE1BZWQgdGhlIG1lc3NhZ2UKKyAgICAgIGludG8gbWVtb3J5LiAgVGhpcyBjcmVhdGVzIGEgcG90ZW50aWFsIG1lc3NhZ2UgbG9zcyBpZiB0aGUgSENBIGlzCisgICAgICBkaXNhYmxlZCBmb3IgYW55IHJlYXNvbiBiZXR3ZWVuIHdoZW4gaXQgc2VuZHMgdGhlIGFjayBhbmQgYmVmb3JlCisgICAgICB0aGUgbWVzc2FnZSBpcyBETUFlZCBhbmQgcHJvY2Vzc2VkLiAgVGhpcyBpcyBvbmx5IGEgcG90ZW50aWFsIGlzc3VlCisgICAgICBpZiBhbm90aGVyIEhDQSBpcyBhdmFpbGFibGUgZm9yIGZhaWwtb3Zlci4KKworICAgICAgU2VuZGluZyBhbiBhY2sgaW1tZWRpYXRlbHkgd291bGQgYWxsb3cgdGhlIHNlbmRlciB0byBmcmVlIHRoZSBzZW50CisgICAgICBtZXNzYWdlIGZyb20gdGhlaXIgc2VuZCBxdWV1ZSBxdWlja2x5LCBidXQgY291bGQgY2F1c2UgZXhjZXNzaXZlCisgICAgICB0cmFmZmljIHRvIGJlIHVzZWQgZm9yIGFja3MuIFJEUyBwaWdneWJhY2tzIGFja3Mgb24gc2VudCBkYXRhCisgICAgICBwYWNrZXRzLiAgQWNrLW9ubHkgcGFja2V0cyBhcmUgcmVkdWNlZCBieSBvbmx5IGFsbG93aW5nIG9uZSB0byBiZQorICAgICAgaW4gZmxpZ2h0IGF0IGEgdGltZSwgYW5kIGJ5IHRoZSBzZW5kZXIgb25seSBhc2tpbmcgZm9yIGFja3Mgd2hlbgorICAgICAgaXRzIHNlbmQgYnVmZmVycyBzdGFydCB0byBmaWxsIHVwLiBBbGwgcmV0cmFuc21pc3Npb25zIGFyZSBhbHNvCisgICAgICBhY2tlZC4KKworICBGbG93IENvbnRyb2wKKworICAgICAgUkRTJ3MgSUIgdHJhbnNwb3J0IHVzZXMgYSBjcmVkaXQtYmFzZWQgbWVjaGFuaXNtIHRvIHZlcmlmeSB0aGF0CisgICAgICB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcGVlcidzIHJlY2VpdmUgYnVmZmVycyBmb3IgbW9yZSBkYXRhLiBUaGlzCisgICAgICBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciBoYXJkd2FyZSByZXRyaWVzIG9uIHRoZSBjb25uZWN0aW9uLgorCisgIENvbmdlc3Rpb24KKworICAgICAgTWVzc2FnZXMgd2FpdGluZyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZSBvbiB0aGUgcmVjZWl2aW5nIHNvY2tldAorICAgICAgYXJlIGFjY291bnRlZCBhZ2FpbnN0IHRoZSBzb2NrZXRzIFNPX1JDVkJVRiBvcHRpb24gdmFsdWUuICBPbmx5CisgICAgICB0aGUgcGF5bG9hZCBieXRlcyBpbiB0aGUgbWVzc2FnZSBhcmUgYWNjb3VudGVkIGZvci4gIElmIHRoZQorICAgICAgbnVtYmVyIG9mIGJ5dGVzIHF1ZXVlZCBlcXVhbHMgb3IgZXhjZWVkcyByY3ZidWYgdGhlbiB0aGUgc29ja2V0CisgICAgICBpcyBjb25nZXN0ZWQuICBBbGwgc2VuZHMgYXR0ZW1wdGVkIHRvIHRoaXMgc29ja2V0J3MgYWRkcmVzcworICAgICAgc2hvdWxkIHJldHVybiBibG9jayBvciByZXR1cm4gLUVXT1VMREJMT0NLLgorCisgICAgICBBcHBsaWNhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlIHJlYXNvbmFibHkgdHVuZWQgc3VjaCB0aGF0IHRoaXMKKyAgICAgIHNpdHVhdGlvbiB2ZXJ5IHJhcmVseSBvY2N1cnMuICBBbiBhcHBsaWNhdGlvbiBlbmNvdW50ZXJpbmcgdGhpcworICAgICAgImJhY2stcHJlc3N1cmUiIGlzIGNvbnNpZGVyZWQgYSBidWcuCisKKyAgICAgIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgaGF2aW5nIGVhY2ggbm9kZSBtYWludGFpbiBiaXRtYXBzIHdoaWNoCisgICAgICBpbmRpY2F0ZSB3aGljaCBwb3J0cyBvbiBib3VuZCBhZGRyZXNzZXMgYXJlIGNvbmdlc3RlZC4gIEFzIHRoZQorICAgICAgYml0bWFwIGNoYW5nZXMgaXQgaXMgc2VudCB0aHJvdWdoIGFsbCB0aGUgY29ubmVjdGlvbnMgd2hpY2gKKyAgICAgIHRlcm1pbmF0ZSBpbiB0aGUgbG9jYWwgYWRkcmVzcyBvZiB0aGUgYml0bWFwIHdoaWNoIGNoYW5nZWQuCisKKyAgICAgIFRoZSBiaXRtYXBzIGFyZSBhbGxvY2F0ZWQgYXMgY29ubmVjdGlvbnMgYXJlIGJyb3VnaHQgdXAuICBUaGlzCisgICAgICBhdm9pZHMgYWxsb2NhdGlvbiBpbiB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHBhdGggd2hpY2ggcXVldWVzCisgICAgICBzYWdlcyBvbiBzb2NrZXRzLiAgVGhlIGRlbnNlIGJpdG1hcHMgbGV0IHRyYW5zcG9ydHMgc2VuZCB0aGUKKyAgICAgIGVudGlyZSBiaXRtYXAgb24gYW55IGJpdG1hcCBjaGFuZ2UgcmVhc29uYWJseSBlZmZpY2llbnRseS4gIFRoaXMKKyAgICAgIGlzIG11Y2ggZWFzaWVyIHRvIGltcGxlbWVudCB0aGFuIHNvbWUgZmluZXItZ3JhaW5lZAorICAgICAgY29tbXVuaWNhdGlvbiBvZiBwZXItcG9ydCBjb25nZXN0aW9uLiAgVGhlIHNlbmRlciBkb2VzIGEgdmVyeQorICAgICAgaW5leHBlbnNpdmUgYml0IHRlc3QgdG8gdGVzdCBpZiB0aGUgcG9ydCBpdCdzIGFib3V0IHRvIHNlbmQgdG8KKyAgICAgIGlzIGNvbmdlc3RlZCBvciBub3QuCisKKworUkRTIFRyYW5zcG9ydCBMYXllcgorPT09PT09PT09PT09PT09PT09CisKKyAgQXMgbWVudGlvbmVkIGFib3ZlLCBSRFMgaXMgbm90IElCLXNwZWNpZmljLiBJdHMgY29kZSBpcyBkaXZpZGVkCisgIGludG8gYSBnZW5lcmFsIFJEUyBsYXllciBhbmQgYSB0cmFuc3BvcnQgbGF5ZXIuCisKKyAgVGhlIGdlbmVyYWwgbGF5ZXIgaGFuZGxlcyB0aGUgc29ja2V0IEFQSSwgY29uZ2VzdGlvbiBoYW5kbGluZywKKyAgbG9vcGJhY2ssIHN0YXRzLCB1c2VybWVtIHBpbm5pbmcsIGFuZCB0aGUgY29ubmVjdGlvbiBzdGF0ZSBtYWNoaW5lLgorCisgIFRoZSB0cmFuc3BvcnQgbGF5ZXIgaGFuZGxlcyB0aGUgZGV0YWlscyBvZiB0aGUgdHJhbnNwb3J0LiBUaGUgSUIKKyAgdHJhbnNwb3J0LCBmb3IgZXhhbXBsZSwgaGFuZGxlcyBhbGwgdGhlIHF1ZXVlIHBhaXJzLCB3b3JrIHJlcXVlc3RzLAorICBDTSBldmVudCBoYW5kbGVycywgYW5kIG90aGVyIEluZmluaWJhbmQgZGV0YWlscy4KKworCitSRFMgS2VybmVsIFN0cnVjdHVyZXMKKz09PT09PT09PT09PT09PT09PT09PQorCisgIHN0cnVjdCByZHNfbWVzc2FnZQorICAgIGFrYSBwb3NzaWJseSAicmRzX291dGdvaW5nIiwgdGhlIGdlbmVyaWMgUkRTIGxheWVyIGNvcGllcyBkYXRhIHRvCisgICAgYmUgc2VudCBhbmQgc2V0cyBoZWFkZXIgZmllbGRzIGFzIG5lZWRlZCwgYmFzZWQgb24gdGhlIHNvY2tldCBBUEkuCisgICAgVGhpcyBpcyB0aGVuIHF1ZXVlZCBmb3IgdGhlIGluZGl2aWR1YWwgY29ubmVjdGlvbiBhbmQgc2VudCBieSB0aGUKKyAgICBjb25uZWN0aW9uJ3MgdHJhbnNwb3J0LgorICBzdHJ1Y3QgcmRzX2luY29taW5nCisgICAgYSBnZW5lcmljIHN0cnVjdCByZWZlcnJpbmcgdG8gaW5jb21pbmcgZGF0YSB0aGF0IGNhbiBiZSBoYW5kZWQgZnJvbQorICAgIHRoZSB0cmFuc3BvcnQgdG8gdGhlIGdlbmVyYWwgY29kZSBhbmQgcXVldWVkIGJ5IHRoZSBnZW5lcmFsIGNvZGUKKyAgICB3aGlsZSB0aGUgc29ja2V0IGlzIGF3b2tlbi4gSXQgaXMgdGhlbiBwYXNzZWQgYmFjayB0byB0aGUgdHJhbnNwb3J0CisgICAgY29kZSB0byBoYW5kbGUgdGhlIGFjdHVhbCBjb3B5LXRvLXVzZXIuCisgIHN0cnVjdCByZHNfc29ja2V0CisgICAgcGVyLXNvY2tldCBpbmZvcm1hdGlvbgorICBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24KKyAgICBwZXItY29ubmVjdGlvbiBpbmZvcm1hdGlvbgorICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydAorICAgIHBvaW50ZXJzIHRvIHRyYW5zcG9ydC1zcGVjaWZpYyBmdW5jdGlvbnMKKyAgc3RydWN0IHJkc19zdGF0aXN0aWNzCisgICAgbm9uLXRyYW5zcG9ydC1zcGVjaWZpYyBzdGF0aXN0aWNzCisgIHN0cnVjdCByZHNfY29uZ19tYXAKKyAgICB3cmFwcyB0aGUgcmF3IGNvbmdlc3Rpb24gYml0bWFwLCBjb250YWlucyByYm5vZGUsIHdhaXRxLCBldGMuCisKK0Nvbm5lY3Rpb24gbWFuYWdlbWVudAorPT09PT09PT09PT09PT09PT09PT09CisKKyAgQ29ubmVjdGlvbnMgbWF5IGJlIGluIFVQLCBET1dOLCBDT05ORUNUSU5HLCBESVNDT05ORUNUSU5HLCBhbmQKKyAgRVJST1Igc3RhdGVzLgorCisgIFRoZSBmaXJzdCB0aW1lIGFuIGF0dGVtcHQgaXMgbWFkZSBieSBhbiBSRFMgc29ja2V0IHRvIHNlbmQgZGF0YSB0bworICBhIG5vZGUsIGEgY29ubmVjdGlvbiBpcyBhbGxvY2F0ZWQgYW5kIGNvbm5lY3RlZC4gVGhhdCBjb25uZWN0aW9uIGlzCisgIHRoZW4gbWFpbnRhaW5lZCBmb3JldmVyIC0tIGlmIHRoZXJlIGFyZSB0cmFuc3BvcnQgZXJyb3JzLCB0aGUKKyAgY29ubmVjdGlvbiB3aWxsIGJlIGRyb3BwZWQgYW5kIHJlLWVzdGFibGlzaGVkLgorCisgIERyb3BwaW5nIGEgY29ubmVjdGlvbiB3aGlsZSBwYWNrZXRzIGFyZSBxdWV1ZWQgd2lsbCBjYXVzZSBxdWV1ZWQgb3IKKyAgcGFydGlhbGx5LXNlbnQgZGF0YWdyYW1zIHRvIGJlIHJldHJhbnNtaXR0ZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBpcworICByZS1lc3RhYmxpc2hlZC4KKworCitUaGUgc2VuZCBwYXRoCis9PT09PT09PT09PT09CisKKyAgcmRzX3NlbmRtc2coKQorICAgIHN0cnVjdCByZHNfbWVzc2FnZSBidWlsdCBmcm9tIGluY29taW5nIGRhdGEKKyAgICBDTVNHcyBwYXJzZWQgKGUuZy4gUkRNQSBvcHMpCisgICAgdHJhbnNwb3J0IGNvbm5lY3Rpb24gYWxsb2NlZCBhbmQgY29ubmVjdGVkIGlmIG5vdCBhbHJlYWR5CisgICAgcmRzX21lc3NhZ2UgcGxhY2VkIG9uIHNlbmQgcXVldWUKKyAgICBzZW5kIHdvcmtlciBhd29rZW4KKyAgcmRzX3NlbmRfd29ya2VyKCkKKyAgICBjYWxscyByZHNfc2VuZF94bWl0KCkgdW50aWwgcXVldWUgaXMgZW1wdHkKKyAgcmRzX3NlbmRfeG1pdCgpCisgICAgdHJhbnNtaXRzIGNvbmdlc3Rpb24gbWFwIGlmIG9uZSBpcyBwZW5kaW5nCisgICAgbWF5IHNldCBBQ0tfUkVRVUlSRUQKKyAgICBjYWxscyB0cmFuc3BvcnQgdG8gc2VuZCBlaXRoZXIgbm9uLVJETUEgb3IgUkRNQSBtZXNzYWdlCisgICAgKFJETUEgb3BzIG5ldmVyIHJldHJhbnNtaXR0ZWQpCisgIHJkc19pYl94bWl0KCkKKyAgICBhbGxvY3Mgd29yayByZXF1ZXN0cyBmcm9tIHNlbmQgcmluZworICAgIGFkZHMgYW55IG5ldyBzZW5kIGNyZWRpdHMgYXZhaWxhYmxlIHRvIHBlZXIgKGhfY3JlZGl0cykKKyAgICBtYXBzIHRoZSByZHNfbWVzc2FnZSdzIHNnIGxpc3QKKyAgICBwaWdneWJhY2tzIGFjaworICAgIHBvcHVsYXRlcyB3b3JrIHJlcXVlc3RzCisgICAgcG9zdCBzZW5kIHRvIGNvbm5lY3Rpb24ncyBxdWV1ZSBwYWlyCisKK1RoZSByZWN2IHBhdGgKKz09PT09PT09PT09PT0KKworICByZHNfaWJfcmVjdl9jcV9jb21wX2hhbmRsZXIoKQorICAgIGxvb2tzIGF0IHdyaXRlIGNvbXBsZXRpb25zCisgICAgdW5tYXBzIHJlY3YgYnVmZmVyIGZyb20gZGV2aWNlCisgICAgbm8gZXJyb3JzLCBjYWxsIHJkc19pYl9wcm9jZXNzX3JlY3YoKQorICAgIHJlZmlsbCByZWN2IHJpbmcKKyAgcmRzX2liX3Byb2Nlc3NfcmVjdigpCisgICAgdmFsaWRhdGUgaGVhZGVyIGNoZWNrc3VtCisgICAgY29weSBoZWFkZXIgdG8gcmRzX2liX2luY29taW5nIHN0cnVjdCBpZiBzdGFydCBvZiBhIG5ldyBkYXRhZ3JhbQorICAgIGFkZCB0byBpYmluYydzIGZyYWdsaXN0CisgICAgaWYgY29tcGV0ZWQgZGF0YWdyYW06CisgICAgICB1cGRhdGUgY29uZyBtYXAgaWYgZGF0YWdyYW0gd2FzIGNvbmcgdXBkYXRlCisgICAgICBjYWxsIHJkc19yZWN2X2luY29taW5nKCkgb3RoZXJ3aXNlCisgICAgICBub3RlIGlmIGFjayBpcyByZXF1aXJlZAorICByZHNfcmVjdl9pbmNvbWluZygpCisgICAgZHJvcCBkdXBsaWNhdGUgcGFja2V0cworICAgIHJlc3BvbmQgdG8gcGluZ3MKKyAgICBmaW5kIHRoZSBzb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRhdGFncmFtCisgICAgYWRkIHRvIHNvY2sgcXVldWUKKyAgICB3YWtlIHVwIHNvY2sKKyAgICBkbyBzb21lIGNvbmdlc3Rpb24gY2FsY3VsYXRpb25zCisgIHJkc19yZWN2bXNnCisgICAgY29weSBkYXRhIGludG8gdXNlciBpb3ZlYworICAgIGhhbmRsZSBDTVNHcworICAgIHJldHVybiB0byBhcHBsaWNhdGlvbgorCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1OGI0NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcudHh0CkBAIC0wLDAgKzEsMTgwIEBACitUaGUgZXhpc3RpbmcgaW50ZXJmYWNlcyBmb3IgZ2V0dGluZyBuZXR3b3JrIHBhY2thZ2VzIHRpbWUgc3RhbXBlZCBhcmU6CisKKyogU09fVElNRVNUQU1QCisgIEdlbmVyYXRlIHRpbWUgc3RhbXAgZm9yIGVhY2ggaW5jb21pbmcgcGFja2V0IHVzaW5nIHRoZSAobm90IG5lY2Vzc2FyaWx5CisgIG1vbm90b25vdXMhKSBzeXN0ZW0gdGltZS4gUmVzdWx0IGlzIHJldHVybmVkIHZpYSByZWN2X21zZygpIGluIGEKKyAgY29udHJvbCBtZXNzYWdlIGFzIHRpbWV2YWwgKHVzZWMgcmVzb2x1dGlvbikuCisKKyogU09fVElNRVNUQU1QTlMKKyAgU2FtZSB0aW1lIHN0YW1waW5nIG1lY2hhbmlzbSBhcyBTT19USU1FU1RBTVAsIGJ1dCByZXR1cm5zIHJlc3VsdCBhcworICB0aW1lc3BlYyAobnNlYyByZXNvbHV0aW9uKS4KKworKiBJUF9NVUxUSUNBU1RfTE9PUCArIFNPX1RJTUVTVEFNUFtOU10KKyAgT25seSBmb3IgbXVsdGljYXN0czogYXBwcm94aW1hdGUgc2VuZCB0aW1lIHN0YW1wIGJ5IHJlY2VpdmluZyB0aGUgbG9vcGVkCisgIHBhY2tldCBhbmQgdXNpbmcgaXRzIHJlY2VpdmUgdGltZSBzdGFtcC4KKworVGhlIGZvbGxvd2luZyBpbnRlcmZhY2UgY29tcGxlbWVudHMgdGhlIGV4aXN0aW5nIG9uZXM6IHJlY2VpdmUgdGltZQorc3RhbXBzIGNhbiBiZSBnZW5lcmF0ZWQgYW5kIHJldHVybmVkIGZvciBhcmJpdHJhcnkgcGFja2V0cyBhbmQgbXVjaAorY2xvc2VyIHRvIHRoZSBwb2ludCB3aGVyZSB0aGUgcGFja2V0IGlzIHJlYWxseSBzZW50LiBUaW1lIHN0YW1wcyBjYW4KK2JlIGdlbmVyYXRlZCBpbiBzb2Z0d2FyZSAoYXMgYmVmb3JlKSBvciBpbiBoYXJkd2FyZSAoaWYgdGhlIGhhcmR3YXJlCitoYXMgc3VjaCBhIGZlYXR1cmUpLgorCitTT19USU1FU1RBTVBJTkc6CisKK0luc3RydWN0cyB0aGUgc29ja2V0IGxheWVyIHdoaWNoIGtpbmQgb2YgaW5mb3JtYXRpb24gaXMgd2FudGVkLiBUaGUKK3BhcmFtZXRlciBpcyBhbiBpbnRlZ2VyIHdpdGggc29tZSBvZiB0aGUgZm9sbG93aW5nIGJpdHMgc2V0LiBTZXR0aW5nCitvdGhlciBiaXRzIGlzIGFuIGVycm9yIGFuZCBkb2Vzbid0IGNoYW5nZSB0aGUgY3VycmVudCBzdGF0ZS4KKworU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRTogIHRyeSB0byBvYnRhaW4gc2VuZCB0aW1lIHN0YW1wIGluIGhhcmR3YXJlCitTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFOiAgaWYgU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSBpcyBvZmYgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlscywgdGhlbiBkbyBpdCBpbiBzb2Z0d2FyZQorU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRTogIHJldHVybiB0aGUgb3JpZ2luYWwsIHVubW9kaWZpZWQgdGltZSBzdGFtcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGdlbmVyYXRlZCBieSB0aGUgaGFyZHdhcmUKK1NPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkU6ICBpZiBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFIGlzIG9mZiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxzLCB0aGVuIGRvIGl0IGluIHNvZnR3YXJlCitTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRTogcmV0dXJuIG9yaWdpbmFsIHJhdyBoYXJkd2FyZSB0aW1lIHN0YW1wCitTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRTogcmV0dXJuIGhhcmR3YXJlIHRpbWUgc3RhbXAgdHJhbnNmb3JtZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3lzdGVtIHRpbWUgYmFzZQorU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTogICAgIHJldHVybiBzeXN0ZW0gdGltZSBzdGFtcCBnZW5lcmF0ZWQgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZQorCitTT0ZfVElNRVNUQU1QSU5HX1RYL1JYIGRldGVybWluZSBob3cgdGltZSBzdGFtcHMgYXJlIGdlbmVyYXRlZC4KK1NPRl9USU1FU1RBTVBJTkdfUkFXL1NZUyBkZXRlcm1pbmUgaG93IHRoZXkgYXJlIHJlcG9ydGVkIGluIHRoZQorZm9sbG93aW5nIGNvbnRyb2wgbWVzc2FnZToKKyAgICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZyB7CisgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyBzeXN0aW1lOworICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaHd0aW1ldHJhbnM7CisgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyBod3RpbWVyYXc7CisgICAgfTsKKworcmVjdm1zZygpIGNhbiBiZSB1c2VkIHRvIGdldCB0aGlzIGNvbnRyb2wgbWVzc2FnZSBmb3IgcmVndWxhciBpbmNvbWluZworcGFja2V0cy4gRm9yIHNlbmQgdGltZSBzdGFtcHMgdGhlIG91dGdvaW5nIHBhY2tldCBpcyBsb29wZWQgYmFjayB0bwordGhlIHNvY2tldCdzIGVycm9yIHF1ZXVlIHdpdGggdGhlIHNlbmQgdGltZSBzdGFtcChzKSBhdHRhY2hlZC4gSXQgY2FuCitiZSByZWNlaXZlZCB3aXRoIHJlY3Ztc2coZmxhZ3M9TVNHX0VSUlFVRVVFKS4gVGhlIGNhbGwgcmV0dXJucyB0aGUKK29yaWdpbmFsIG91dGdvaW5nIHBhY2tldCBkYXRhIGluY2x1ZGluZyBhbGwgaGVhZGVycyBwcmVwcmVuZGVkIGRvd24gdG8KK2FuZCBpbmNsdWRpbmcgdGhlIGxpbmsgbGF5ZXIsIHRoZSBzY21fdGltZXN0YW1waW5nIGNvbnRyb2wgbWVzc2FnZSBhbmQKK2Egc29ja19leHRlbmRlZF9lcnIgY29udHJvbCBtZXNzYWdlIHdpdGggZWVfZXJybm89PUVOT01TRyBhbmQKK2VlX29yaWdpbj09U09fRUVfT1JJR0lOX1RJTUVTVEFNUElORy4gQSBzb2NrZXQgd2l0aCBzdWNoIGEgcGVuZGluZworYm91bmNlZCBwYWNrZXQgaXMgcmVhZHkgZm9yIHJlYWRpbmcgYXMgZmFyIGFzIHNlbGVjdCgpIGlzIGNvbmNlcm5lZC4KK0lmIHRoZSBvdXRnb2luZyBwYWNrZXQgaGFzIHRvIGJlIGZyYWdtZW50ZWQsIHRoZW4gb25seSB0aGUgZmlyc3QKK2ZyYWdtZW50IGlzIHRpbWUgc3RhbXBlZCBhbmQgcmV0dXJuZWQgdG8gdGhlIHNlbmRpbmcgc29ja2V0LgorCitBbGwgdGhyZWUgdmFsdWVzIGNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgZXZlbnQgaW4gdGltZSwgYnV0IHdlcmUKK2dlbmVyYXRlZCBpbiBkaWZmZXJlbnQgd2F5cy4gRWFjaCBvZiB0aGVzZSB2YWx1ZXMgbWF5IGJlIGVtcHR5ICg9IGFsbAoremVybyksIGluIHdoaWNoIGNhc2Ugbm8gc3VjaCB2YWx1ZSB3YXMgYXZhaWxhYmxlLiBJZiB0aGUgYXBwbGljYXRpb24KK2lzIG5vdCBpbnRlcmVzdGVkIGluIHNvbWUgb2YgdGhlc2UgdmFsdWVzLCB0aGV5IGNhbiBiZSBsZWZ0IGJsYW5rIHRvCithdm9pZCB0aGUgcG90ZW50aWFsIG92ZXJoZWFkIG9mIGNhbGN1bGF0aW5nIHRoZW0uCisKK3N5c3RpbWUgaXMgdGhlIHZhbHVlIG9mIHRoZSBzeXN0ZW0gdGltZSBhdCB0aGF0IG1vbWVudC4gVGhpcworY29ycmVzcG9uZHMgdG8gdGhlIHZhbHVlIGFsc28gcmV0dXJuZWQgdmlhIFNPX1RJTUVTVEFNUFtOU10uIElmIHRoZQordGltZSBzdGFtcCB3YXMgZ2VuZXJhdGVkIGJ5IGhhcmR3YXJlLCB0aGVuIHRoaXMgZmllbGQgaXMKK2VtcHR5LiBPdGhlcndpc2UgaXQgaXMgZmlsbGVkIGluIGlmIFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgaXMKK3NldC4KKworaHd0aW1lcmF3IGlzIHRoZSBvcmlnaW5hbCBoYXJkd2FyZSB0aW1lIHN0YW1wLiBGaWxsZWQgaW4gaWYKK1NPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFIGlzIHNldC4gTm8gYXNzdW1wdGlvbnMgYWJvdXQgaXRzCityZWxhdGlvbiB0byBzeXN0ZW0gdGltZSBzaG91bGQgYmUgbWFkZS4KKworaHd0aW1ldHJhbnMgaXMgdGhlIGhhcmR3YXJlIHRpbWUgc3RhbXAgdHJhbnNmb3JtZWQgc28gdGhhdCBpdAorY29ycmVzcG9uZHMgYXMgZ29vZCBhcyBwb3NzaWJsZSB0byBzeXN0ZW0gdGltZS4gVGhpcyBjb3JyZWxhdGlvbiBpcworbm90IHBlcmZlY3Q7IGFzIGEgY29uc2VxdWVuY2UsIHNvcnRpbmcgcGFja2V0cyByZWNlaXZlZCB2aWEgZGlmZmVyZW50CitOSUNzIGJ5IHRoZWlyIGh3dGltZXRyYW5zIG1heSBkaWZmZXIgZnJvbSB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlCityZWNlaXZlZC4gaHd0aW1ldHJhbnMgbWF5IGJlIG5vbi1tb25vdG9uaWMgZXZlbiBmb3IgdGhlIHNhbWUgTklDLgorRmlsbGVkIGluIGlmIFNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFIGlzIHNldC4gUmVxdWlyZXMgc3VwcG9ydAorYnkgdGhlIG5ldHdvcmsgZGV2aWNlIGFuZCB3aWxsIGJlIGVtcHR5IHdpdGhvdXQgdGhhdCBzdXBwb3J0LgorCisKK1NJT0NTSFdUU1RBTVA6CisKK0hhcmR3YXJlIHRpbWUgc3RhbXBpbmcgbXVzdCBhbHNvIGJlIGluaXRpYWxpemVkIGZvciBlYWNoIGRldmljZSBkcml2ZXIKK3RoYXQgaXMgZXhwZWN0ZWQgdG8gZG8gaGFyZHdhcmUgdGltZSBzdGFtcGluZy4gVGhlIHBhcmFtZXRlciBpczoKKworc3RydWN0IGh3dHN0YW1wX2NvbmZpZyB7CisgICAgaW50IGZsYWdzOyAgICAgICAgICAgLyogbm8gZmxhZ3MgZGVmaW5lZCByaWdodCBub3csIG11c3QgYmUgemVybyAqLworICAgIGludCB0eF90eXBlOyAgICAgICAgIC8qIEhXVFNUQU1QX1RYXyogKi8KKyAgICBpbnQgcnhfZmlsdGVyOyAgICAgICAvKiBIV1RTVEFNUF9GSUxURVJfKiAqLworfTsKKworRGVzaXJlZCBiZWhhdmlvciBpcyBwYXNzZWQgaW50byB0aGUga2VybmVsIGFuZCB0byBhIHNwZWNpZmljIGRldmljZSBieQorY2FsbGluZyBpb2N0bChTSU9DU0hXVFNUQU1QKSB3aXRoIGEgcG9pbnRlciB0byBhIHN0cnVjdCBpZnJlcSB3aG9zZQoraWZyX2RhdGEgcG9pbnRzIHRvIGEgc3RydWN0IGh3dHN0YW1wX2NvbmZpZy4gVGhlIHR4X3R5cGUgYW5kCityeF9maWx0ZXIgYXJlIGhpbnRzIHRvIHRoZSBkcml2ZXIgd2hhdCBpdCBpcyBleHBlY3RlZCB0byBkby4gSWYKK3RoZSByZXF1ZXN0ZWQgZmluZS1ncmFpbmVkIGZpbHRlcmluZyBmb3IgaW5jb21pbmcgcGFja2V0cyBpcyBub3QKK3N1cHBvcnRlZCwgdGhlIGRyaXZlciBtYXkgdGltZSBzdGFtcCBtb3JlIHRoYW4ganVzdCB0aGUgcmVxdWVzdGVkIHR5cGVzCitvZiBwYWNrZXRzLgorCitBIGRyaXZlciB3aGljaCBzdXBwb3J0cyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIHNoYWxsIHVwZGF0ZSB0aGUgc3RydWN0Cit3aXRoIHRoZSBhY3R1YWwsIHBvc3NpYmx5IG1vcmUgcGVybWlzc2l2ZSBjb25maWd1cmF0aW9uLiBJZiB0aGUKK3JlcXVlc3RlZCBwYWNrZXRzIGNhbm5vdCBiZSB0aW1lIHN0YW1wZWQsIHRoZW4gbm90aGluZyBzaG91bGQgYmUKK2NoYW5nZWQgYW5kIEVSQU5HRSBzaGFsbCBiZSByZXR1cm5lZCAoaW4gY29udHJhc3QgdG8gRUlOVkFMLCB3aGljaAoraW5kaWNhdGVzIHRoYXQgU0lPQ1NIV1RTVEFNUCBpcyBub3Qgc3VwcG9ydGVkIGF0IGFsbCkuCisKK09ubHkgYSBwcm9jZXNzZXMgd2l0aCBhZG1pbiByaWdodHMgbWF5IGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbi4gVXNlcgorc3BhY2UgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgbXVsdGlwbGUgcHJvY2Vzc2VzIGRvbid0IGludGVyZmVyZQord2l0aCBlYWNoIG90aGVyIGFuZCB0aGF0IHRoZSBzZXR0aW5ncyBhcmUgcmVzZXQuCisKKy8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgaHd0c3RhbXBfY29uZmlnLT50eF90eXBlICovCitlbnVtIHsKKwkvKgorCSAqIG5vIG91dGdvaW5nIHBhY2tldCB3aWxsIG5lZWQgaGFyZHdhcmUgdGltZSBzdGFtcGluZzsKKwkgKiBzaG91bGQgYSBwYWNrZXQgYXJyaXZlIHdoaWNoIGFza3MgZm9yIGl0LCBubyBoYXJkd2FyZQorCSAqIHRpbWUgc3RhbXBpbmcgd2lsbCBiZSBkb25lCisJICovCisJSFdUU1RBTVBfVFhfT0ZGLAorCisJLyoKKwkgKiBlbmFibGVzIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgZm9yIG91dGdvaW5nIHBhY2tldHM7CisJICogdGhlIHNlbmRlciBvZiB0aGUgcGFja2V0IGRlY2lkZXMgd2hpY2ggYXJlIHRvIGJlCisJICogdGltZSBzdGFtcGVkIGJ5IHNldHRpbmcgU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRQorCSAqIGJlZm9yZSBzZW5kaW5nIHRoZSBwYWNrZXQKKwkgKi8KKwlIV1RTVEFNUF9UWF9PTiwKK307CisKKy8qIHBvc3NpYmxlIHZhbHVlcyBmb3IgaHd0c3RhbXBfY29uZmlnLT5yeF9maWx0ZXIgKi8KK2VudW0geworCS8qIHRpbWUgc3RhbXAgbm8gaW5jb21pbmcgcGFja2V0IGF0IGFsbCAqLworCUhXVFNUQU1QX0ZJTFRFUl9OT05FLAorCisJLyogdGltZSBzdGFtcCBhbnkgaW5jb21pbmcgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX0FMTCwKKworICAgICAgICAvKiByZXR1cm4gdmFsdWU6IHRpbWUgc3RhbXAgYWxsIHBhY2tldHMgcmVxdWVzdGVkIHBsdXMgc29tZSBvdGhlcnMgKi8KKyAgICAgICAgSFdUU1RBTVBfRklMVEVSX1NPTUUsCisKKwkvKiBQVFAgdjEsIFVEUCwgYW55IGtpbmQgb2YgZXZlbnQgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9FVkVOVCwKKworICAgICAgICAuLi4KK307CisKKworREVWSUNFIElNUExFTUVOVEFUSU9OCisKK0EgZHJpdmVyIHdoaWNoIHN1cHBvcnRzIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgbXVzdCBzdXBwb3J0IHRoZQorU0lPQ1NIV1RTVEFNUCBpb2N0bC4gVGltZSBzdGFtcHMgZm9yIHJlY2VpdmVkIHBhY2tldHMgbXVzdCBiZSBzdG9yZWQKK2luIHRoZSBza2Igd2l0aCBza2JfaHd0c3RhbXBfc2V0KCkuCisKK1RpbWUgc3RhbXBzIGZvciBvdXRnb2luZyBwYWNrZXRzIGFyZSB0byBiZSBnZW5lcmF0ZWQgYXMgZm9sbG93czoKKy0gSW4gaGFyZF9zdGFydF94bWl0KCksIGNoZWNrIGlmIHNrYl9od3RzdGFtcF9jaGVja190eF9oYXJkd2FyZSgpCisgIHJldHVybnMgbm9uLXplcm8uIElmIHllcywgdGhlbiB0aGUgZHJpdmVyIGlzIGV4cGVjdGVkCisgIHRvIGRvIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcuCistIElmIHRoaXMgaXMgcG9zc2libGUgZm9yIHRoZSBza2IgYW5kIHJlcXVlc3RlZCwgdGhlbiBkZWNsYXJlCisgIHRoYXQgdGhlIGRyaXZlciBpcyBkb2luZyB0aGUgdGltZSBzdGFtcGluZyBieSBjYWxsaW5nCisgIHNrYl9od3RzdGFtcF90eF9pbl9wcm9ncmVzcygpLiBBIGRyaXZlciBub3Qgc3VwcG9ydGluZworICBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIGRvZXNuJ3QgZG8gdGhhdC4gQSBkcml2ZXIgbXVzdCBuZXZlcgorICB0b3VjaCBza19idWZmOjp0c3RhbXAhIEl0IGlzIHVzZWQgdG8gc3RvcmUgaG93IHRpbWUgc3RhbXBpbmcKKyAgZm9yIGFuIG91dGdvaW5nIHBhY2tldHMgaXMgdG8gYmUgZG9uZS4KKy0gQXMgc29vbiBhcyB0aGUgZHJpdmVyIGhhcyBzZW50IHRoZSBwYWNrZXQgYW5kL29yIG9idGFpbmVkIGEKKyAgaGFyZHdhcmUgdGltZSBzdGFtcCBmb3IgaXQsIGl0IHBhc3NlcyB0aGUgdGltZSBzdGFtcCBiYWNrIGJ5CisgIGNhbGxpbmcgc2tiX2h3dHN0YW1wX3R4KCkgd2l0aCB0aGUgb3JpZ2luYWwgc2tiLCB0aGUgcmF3CisgIGhhcmR3YXJlIHRpbWUgc3RhbXAgYW5kIGEgaGFuZGxlIHRvIHRoZSBkZXZpY2UgKG5lY2Vzc2FyeQorICB0byBjb252ZXJ0IHRoZSBoYXJkd2FyZSB0aW1lIHN0YW1wIHRvIHN5c3RlbSB0aW1lKS4gSWYgb2J0YWluaW5nCisgIHRoZSBoYXJkd2FyZSB0aW1lIHN0YW1wIHNvbWVob3cgZmFpbHMsIHRoZW4gdGhlIGRyaXZlciBzaG91bGQKKyAgbm90IGZhbGwgYmFjayB0byBzb2Z0d2FyZSB0aW1lIHN0YW1waW5nLiBUaGUgcmF0aW9uYWxlIGlzIHRoYXQKKyAgdGhpcyB3b3VsZCBvY2N1ciBhdCBhIGxhdGVyIHRpbWUgaW4gdGhlIHByb2Nlc3NpbmcgcGlwZWxpbmUKKyAgdGhhbiBvdGhlciBzb2Z0d2FyZSB0aW1lIHN0YW1waW5nIGFuZCB0aGVyZWZvcmUgY291bGQgbGVhZAorICB0byB1bmV4cGVjdGVkIGRlbHRhcyBiZXR3ZWVuIHRpbWUgc3RhbXBzLgorLSBJZiB0aGUgZHJpdmVyIGRpZCBub3QgY2FsbCBza2JfaHd0c3RhbXBfdHhfaW5fcHJvZ3Jlc3MoKSwgdGhlbgorICBkZXZfaGFyZF9zdGFydF94bWl0KCkgY2hlY2tzIHdoZXRoZXIgc29mdHdhcmUgdGltZSBzdGFtcGluZworICBpcyB3YW50ZWQgYXMgZmFsbGJhY2sgYW5kIHBvdGVudGlhbGx5IGdlbmVyYXRlcyB0aGUgdGltZSBzdGFtcC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvLmdpdGlnbm9yZSBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWU4MWViCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3RpbWVzdGFtcGluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExNDg5ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACitDUFBGTEFHUyA9IC1JLi4vLi4vLi4vaW5jbHVkZQorCit0aW1lc3RhbXBpbmc6IHRpbWVzdGFtcGluZy5jCisKK2NsZWFuOgorCXJtIC1mIHRpbWVzdGFtcGluZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy90aW1lc3RhbXBpbmcuYyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvdGltZXN0YW1waW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkMTQzMQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvdGltZXN0YW1waW5nLmMKQEAgLTAsMCArMSw1MzMgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gZGVtb25zdHJhdGVzIGhvdyB0aGUgdmFyaW91cyB0aW1lIHN0YW1waW5nIGZlYXR1cmVzIGluCisgKiB0aGUgTGludXgga2VybmVsIHdvcmsuIEl0IGVtdWxhdGVzIHRoZSBiZWhhdmlvciBvZiBhIFBUUAorICogaW1wbGVtZW50YXRpb24gaW4gc3RhbmQtYWxvbmUgbWFzdGVyIG1vZGUgYnkgc2VuZGluZyBQVFB2MSBTeW5jCisgKiBtdWx0aWNhc3RzIG9uY2UgZXZlcnkgc2Vjb25kLiBJdCBsb29rcyBmb3Igc2ltaWxhciBwYWNrZXRzLCBidXQKKyAqIGJleW9uZCB0aGF0IGRvZXNuJ3QgYWN0dWFsbHkgaW1wbGVtZW50IFBUUC4KKyAqCisgKiBPdXRnb2luZyBwYWNrZXRzIGFyZSB0aW1lIHN0YW1wZWQgd2l0aCBTT19USU1FU1RBTVBJTkcgd2l0aCBvcgorICogd2l0aG91dCBoYXJkd2FyZSBzdXBwb3J0LgorICoKKyAqIEluY29taW5nIHBhY2tldHMgYXJlIHRpbWUgc3RhbXBlZCB3aXRoIFNPX1RJTUVTVEFNUElORyB3aXRoIG9yCisgKiB3aXRob3V0IGhhcmR3YXJlIHN1cHBvcnQsIFNJT0NHU1RBTVBbTlNdIChwZXItc29ja2V0IHRpbWUgc3RhbXApIGFuZAorICogU09fVElNRVNUQU1QW05TXS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisgKiBBdXRob3I6IFBhdHJpY2sgT2hseSA8cGF0cmljay5vaGx5QGludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gKiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorCisjaW5jbHVkZSAiYXNtL3R5cGVzLmgiCisjaW5jbHVkZSAibGludXgvbmV0X3RzdGFtcC5oIgorI2luY2x1ZGUgImxpbnV4L2VycnF1ZXVlLmgiCisKKyNpZm5kZWYgU09fVElNRVNUQU1QSU5HCisjIGRlZmluZSBTT19USU1FU1RBTVBJTkcgICAgICAgICAzNworIyBkZWZpbmUgU0NNX1RJTUVTVEFNUElORyAgICAgICAgU09fVElNRVNUQU1QSU5HCisjZW5kaWYKKworI2lmbmRlZiBTT19USU1FU1RBTVBOUworIyBkZWZpbmUgU09fVElNRVNUQU1QTlMgMzUKKyNlbmRpZgorCisjaWZuZGVmIFNJT0NHU1RBTVBOUworIyBkZWZpbmUgU0lPQ0dTVEFNUE5TIDB4ODkwNworI2VuZGlmCisKKyNpZm5kZWYgU0lPQ1NIV1RTVEFNUAorIyBkZWZpbmUgU0lPQ1NIV1RTVEFNUCAweDg5YjAKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB1c2FnZShjb25zdCBjaGFyICplcnJvcikKK3sKKwlpZiAoZXJyb3IpCisJCXByaW50ZigiaW52YWxpZCBvcHRpb246ICVzXG4iLCBlcnJvcik7CisJcHJpbnRmKCJ0aW1lc3RhbXBpbmcgaW50ZXJmYWNlIG9wdGlvbipcblxuIgorCSAgICAgICAiT3B0aW9uczpcbiIKKwkgICAgICAgIiAgSVBfTVVMVElDQVNUX0xPT1AgLSBsb29waW5nIG91dGdvaW5nIG11bHRpY2FzdHNcbiIKKwkgICAgICAgIiAgU09fVElNRVNUQU1QIC0gbm9ybWFsIHNvZnR3YXJlIHRpbWUgc3RhbXBpbmcsIG1zIHJlc29sdXRpb25cbiIKKwkgICAgICAgIiAgU09fVElNRVNUQU1QTlMgLSBtb3JlIGFjY3VyYXRlIHNvZnR3YXJlIHRpbWUgc3RhbXBpbmdcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSAtIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgb2Ygb3V0Z29pbmcgcGFja2V0c1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIC0gc29mdHdhcmUgZmFsbGJhY2sgZm9yIG91dGdvaW5nIHBhY2tldHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSAtIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmcgb2YgaW5jb21pbmcgcGFja2V0c1xuIgorCSAgICAgICAiICBTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFIC0gc29mdHdhcmUgZmFsbGJhY2sgZm9yIGluY29taW5nIHBhY2tldHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSAtIHJlcXVlc3QgcmVwb3J0aW5nIG9mIHNvZnR3YXJlIHRpbWUgc3RhbXBzXG4iCisJICAgICAgICIgIFNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFIC0gcmVxdWVzdCByZXBvcnRpbmcgb2YgdHJhbnNmb3JtZWQgSFcgdGltZSBzdGFtcHNcbiIKKwkgICAgICAgIiAgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUgLSByZXF1ZXN0IHJlcG9ydGluZyBvZiByYXcgSFcgdGltZSBzdGFtcHNcbiIKKwkgICAgICAgIiAgU0lPQ0dTVEFNUCAtIGNoZWNrIGxhc3Qgc29ja2V0IHRpbWUgc3RhbXBcbiIKKwkgICAgICAgIiAgU0lPQ0dTVEFNUE5TIC0gbW9yZSBhY2N1cmF0ZSBzb2NrZXQgdGltZSBzdGFtcFxuIik7CisJZXhpdCgxKTsKK30KKworc3RhdGljIHZvaWQgYmFpbChjb25zdCBjaGFyICplcnJvcikKK3sKKwlwcmludGYoIiVzOiAlc1xuIiwgZXJyb3IsIHN0cmVycm9yKGVycm5vKSk7CisJZXhpdCgxKTsKK30KKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc3luY1tdID0geworCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsCisJMHg1ZiwgMHg0NCwgMHg0NiwgMHg0YywKKwkweDU0LCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAxLCAweDAxLAorCisJLyogZmFrZSB1dWlkICovCisJMHgwMCwgMHgwMSwKKwkweDAyLCAweDAzLCAweDA0LCAweDA1LAorCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgzNywKKwkweDAwLCAweDAwLCAweDAwLCAweDA4LAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHg0OSwgMHgwNSwgMHhjZCwgMHgwMSwKKwkweDI5LCAweGIxLCAweDhkLCAweGIwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMSwKKworCS8qIGZha2UgdXVpZCAqLworCTB4MDAsIDB4MDEsCisJMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MzcsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwNCwKKwkweDQ0LCAweDQ2LCAweDRjLCAweDU0LAorCTB4MDAsIDB4MDAsIDB4ZjAsIDB4NjAsCisJMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAxLAorCTB4MDAsIDB4MDAsIDB4ZjAsIDB4NjAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDA0LAorCTB4NDQsIDB4NDYsIDB4NGMsIDB4NTQsCisJMHgwMCwgMHgwMSwKKworCS8qIGZha2UgdXVpZCAqLworCTB4MDAsIDB4MDEsCisJMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwKKworCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisKK3N0YXRpYyB2b2lkIHNlbmRwYWNrZXQoaW50IHNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFkZHJfbGVuKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQgcmVzOworCisJcmVzID0gc2VuZHRvKHNvY2ssIHN5bmMsIHNpemVvZihzeW5jKSwgMCwKKwkJYWRkciwgYWRkcl9sZW4pOworCWdldHRpbWVvZmRheSgmbm93LCAwKTsKKwlpZiAocmVzIDwgMCkKKwkJcHJpbnRmKCIlczogJXNcbiIsICJzZW5kIiwgc3RyZXJyb3IoZXJybm8pKTsKKwllbHNlCisJCXByaW50ZigiJWxkLiUwNmxkOiBzZW50ICVkIGJ5dGVzXG4iLAorCQkgICAgICAgKGxvbmcpbm93LnR2X3NlYywgKGxvbmcpbm93LnR2X3VzZWMsCisJCSAgICAgICByZXMpOworfQorCitzdGF0aWMgdm9pZCBwcmludHBhY2tldChzdHJ1Y3QgbXNnaGRyICptc2csIGludCByZXMsCisJCQljaGFyICpkYXRhLAorCQkJaW50IHNvY2ssIGludCByZWN2bXNnX2ZsYWdzLAorCQkJaW50IHNpb2Nnc3RhbXAsIGludCBzaW9jZ3N0YW1wbnMpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpmcm9tX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopbXNnLT5tc2dfbmFtZTsKKwlzdHJ1Y3QgY21zZ2hkciAqY21zZzsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJc3RydWN0IHRpbWV2YWwgbm93OworCisJZ2V0dGltZW9mZGF5KCZub3csIDApOworCisJcHJpbnRmKCIlbGQuJTA2bGQ6IHJlY2VpdmVkICVzIGRhdGEsICVkIGJ5dGVzIGZyb20gJXMsICVkIGJ5dGVzIGNvbnRyb2wgbWVzc2FnZXNcbiIsCisJICAgICAgIChsb25nKW5vdy50dl9zZWMsIChsb25nKW5vdy50dl91c2VjLAorCSAgICAgICAocmVjdm1zZ19mbGFncyAmIE1TR19FUlJRVUVVRSkgPyAiZXJyb3IiIDogInJlZ3VsYXIiLAorCSAgICAgICByZXMsCisJICAgICAgIGluZXRfbnRvYShmcm9tX2FkZHItPnNpbl9hZGRyKSwKKwkgICAgICAgbXNnLT5tc2dfY29udHJvbGxlbik7CisJZm9yIChjbXNnID0gQ01TR19GSVJTVEhEUihtc2cpOworCSAgICAgY21zZzsKKwkgICAgIGNtc2cgPSBDTVNHX05YVEhEUihtc2csIGNtc2cpKSB7CisJCXByaW50ZigiICAgY21zZyBsZW4gJWQ6ICIsIGNtc2ctPmNtc2dfbGVuKTsKKwkJc3dpdGNoIChjbXNnLT5jbXNnX2xldmVsKSB7CisJCWNhc2UgU09MX1NPQ0tFVDoKKwkJCXByaW50ZigiU09MX1NPQ0tFVCAiKTsKKwkJCXN3aXRjaCAoY21zZy0+Y21zZ190eXBlKSB7CisJCQljYXNlIFNPX1RJTUVTVEFNUDogeworCQkJCXN0cnVjdCB0aW1ldmFsICpzdGFtcCA9CisJCQkJCShzdHJ1Y3QgdGltZXZhbCAqKUNNU0dfREFUQShjbXNnKTsKKwkJCQlwcmludGYoIlNPX1RJTUVTVEFNUCAlbGQuJTA2bGQiLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfc2VjLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfdXNlYyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIFNPX1RJTUVTVEFNUE5TOiB7CisJCQkJc3RydWN0IHRpbWVzcGVjICpzdGFtcCA9CisJCQkJCShzdHJ1Y3QgdGltZXNwZWMgKilDTVNHX0RBVEEoY21zZyk7CisJCQkJcHJpbnRmKCJTT19USU1FU1RBTVBOUyAlbGQuJTA5bGQiLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfc2VjLAorCQkJCSAgICAgICAobG9uZylzdGFtcC0+dHZfbnNlYyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIFNPX1RJTUVTVEFNUElORzogeworCQkJCXN0cnVjdCB0aW1lc3BlYyAqc3RhbXAgPQorCQkJCQkoc3RydWN0IHRpbWVzcGVjICopQ01TR19EQVRBKGNtc2cpOworCQkJCXByaW50ZigiU09fVElNRVNUQU1QSU5HICIpOworCQkJCXByaW50ZigiU1cgJWxkLiUwOWxkICIsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9zZWMsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9uc2VjKTsKKwkJCQlzdGFtcCsrOworCQkJCXByaW50ZigiSFcgdHJhbnNmb3JtZWQgJWxkLiUwOWxkICIsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9zZWMsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9uc2VjKTsKKwkJCQlzdGFtcCsrOworCQkJCXByaW50ZigiSFcgcmF3ICVsZC4lMDlsZCIsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9zZWMsCisJCQkJICAgICAgIChsb25nKXN0YW1wLT50dl9uc2VjKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRmKCJ0eXBlICVkIiwgY21zZy0+Y21zZ190eXBlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIElQUFJPVE9fSVA6CisJCQlwcmludGYoIklQUFJPVE9fSVAgIik7CisJCQlzd2l0Y2ggKGNtc2ctPmNtc2dfdHlwZSkgeworCQkJY2FzZSBJUF9SRUNWRVJSOiB7CisJCQkJc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICplcnIgPQorCQkJCQkoc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyICopQ01TR19EQVRBKGNtc2cpOworCQkJCXByaW50ZigiSVBfUkVDVkVSUiBlZV9lcnJubyAnJXMnIGVlX29yaWdpbiAlZCA9PiAlcyIsCisJCQkJCXN0cmVycm9yKGVyci0+ZWVfZXJybm8pLAorCQkJCQllcnItPmVlX29yaWdpbiwKKyNpZmRlZiBTT19FRV9PUklHSU5fVElNRVNUQU1QSU5HCisJCQkJCWVyci0+ZWVfb3JpZ2luID09IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgPworCQkJCQkiYm91bmNlZCBwYWNrZXQiIDogInVuZXhwZWN0ZWQgb3JpZ2luIgorI2Vsc2UKKwkJCQkJInByb2JhYmx5IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkciCisjZW5kaWYKKwkJCQkJKTsKKwkJCQlpZiAocmVzIDwgc2l6ZW9mKHN5bmMpKQorCQkJCQlwcmludGYoIiA9PiB0cnVuY2F0ZWQgZGF0YT8hIik7CisJCQkJZWxzZSBpZiAoIW1lbWNtcChzeW5jLCBkYXRhICsgcmVzIC0gc2l6ZW9mKHN5bmMpLAorCQkJCQkJCXNpemVvZihzeW5jKSkpCisJCQkJCXByaW50ZigiID0+IEdPVCBPVVIgREFUQSBCQUNLIChIVVJSQVkhKSIpOworCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBJUF9QS1RJTkZPOiB7CisJCQkJc3RydWN0IGluX3BrdGluZm8gKnBrdGluZm8gPQorCQkJCQkoc3RydWN0IGluX3BrdGluZm8gKilDTVNHX0RBVEEoY21zZyk7CisJCQkJcHJpbnRmKCJJUF9QS1RJTkZPIGludGVyZmFjZSBpbmRleCAldSIsCisJCQkJCXBrdGluZm8tPmlwaV9pZmluZGV4KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRmKCJ0eXBlICVkIiwgY21zZy0+Y21zZ190eXBlKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRmKCJsZXZlbCAlZCB0eXBlICVkIiwKKwkJCQljbXNnLT5jbXNnX2xldmVsLAorCQkJCWNtc2ctPmNtc2dfdHlwZSk7CisJCQlicmVhazsKKwkJfQorCQlwcmludGYoIlxuIik7CisJfQorCisJaWYgKHNpb2Nnc3RhbXApIHsKKwkJaWYgKGlvY3RsKHNvY2ssIFNJT0NHU1RBTVAsICZ0dikpCisJCQlwcmludGYoIiAgICVzOiAlc1xuIiwgIlNJT0NHU1RBTVAiLCBzdHJlcnJvcihlcnJubykpOworCQllbHNlCisJCQlwcmludGYoIlNJT0NHU1RBTVAgJWxkLiUwNmxkXG4iLAorCQkJICAgICAgIChsb25nKXR2LnR2X3NlYywKKwkJCSAgICAgICAobG9uZyl0di50dl91c2VjKTsKKwl9CisJaWYgKHNpb2Nnc3RhbXBucykgeworCQlpZiAoaW9jdGwoc29jaywgU0lPQ0dTVEFNUE5TLCAmdHMpKQorCQkJcHJpbnRmKCIgICAlczogJXNcbiIsICJTSU9DR1NUQU1QTlMiLCBzdHJlcnJvcihlcnJubykpOworCQllbHNlCisJCQlwcmludGYoIlNJT0NHU1RBTVBOUyAlbGQuJTA5bGRcbiIsCisJCQkgICAgICAgKGxvbmcpdHMudHZfc2VjLAorCQkJICAgICAgIChsb25nKXRzLnR2X25zZWMpOworCX0KK30KKworc3RhdGljIHZvaWQgcmVjdnBhY2tldChpbnQgc29jaywgaW50IHJlY3Ztc2dfZmxhZ3MsCisJCSAgICAgICBpbnQgc2lvY2dzdGFtcCwgaW50IHNpb2Nnc3RhbXBucykKK3sKKwljaGFyIGRhdGFbMjU2XTsKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3QgaW92ZWMgZW50cnk7CisJc3RydWN0IHNvY2thZGRyX2luIGZyb21fYWRkcjsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgY21zZ2hkciBjbTsKKwkJY2hhciBjb250cm9sWzUxMl07CisJfSBjb250cm9sOworCWludCByZXM7CisKKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCW1zZy5tc2dfaW92ID0gJmVudHJ5OworCW1zZy5tc2dfaW92bGVuID0gMTsKKwllbnRyeS5pb3ZfYmFzZSA9IGRhdGE7CisJZW50cnkuaW92X2xlbiA9IHNpemVvZihkYXRhKTsKKwltc2cubXNnX25hbWUgPSAoY2FkZHJfdCkmZnJvbV9hZGRyOworCW1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihmcm9tX2FkZHIpOworCW1zZy5tc2dfY29udHJvbCA9ICZjb250cm9sOworCW1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjb250cm9sKTsKKworCXJlcyA9IHJlY3Ztc2coc29jaywgJm1zZywgcmVjdm1zZ19mbGFnc3xNU0dfRE9OVFdBSVQpOworCWlmIChyZXMgPCAwKSB7CisJCXByaW50ZigiJXMgJXM6ICVzXG4iLAorCQkgICAgICAgInJlY3Ztc2ciLAorCQkgICAgICAgKHJlY3Ztc2dfZmxhZ3MgJiBNU0dfRVJSUVVFVUUpID8gImVycm9yIiA6ICJyZWd1bGFyIiwKKwkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRwYWNrZXQoJm1zZywgcmVzLCBkYXRhLAorCQkJICAgIHNvY2ssIHJlY3Ztc2dfZmxhZ3MsCisJCQkgICAgc2lvY2dzdGFtcCwgc2lvY2dzdGFtcG5zKTsKKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgc29fdGltZXN0YW1waW5nX2ZsYWdzID0gMDsKKwlpbnQgc29fdGltZXN0YW1wID0gMDsKKwlpbnQgc29fdGltZXN0YW1wbnMgPSAwOworCWludCBzaW9jZ3N0YW1wID0gMDsKKwlpbnQgc2lvY2dzdGFtcG5zID0gMDsKKwlpbnQgaXBfbXVsdGljYXN0X2xvb3AgPSAwOworCWNoYXIgKmludGVyZmFjZTsKKwlpbnQgaTsKKwlpbnQgZW5hYmxlZCA9IDE7CisJaW50IHNvY2s7CisJc3RydWN0IGlmcmVxIGRldmljZTsKKwlzdHJ1Y3QgaWZyZXEgaHd0c3RhbXA7CisJc3RydWN0IGh3dHN0YW1wX2NvbmZpZyBod2NvbmZpZywgaHdjb25maWdfcmVxdWVzdGVkOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXN0cnVjdCBpcF9tcmVxIGltcjsKKwlzdHJ1Y3QgaW5fYWRkciBpYWRkcjsKKwlpbnQgdmFsOworCXNvY2tsZW5fdCBsZW47CisJc3RydWN0IHRpbWV2YWwgbmV4dDsKKworCWlmIChhcmdjIDwgMikKKwkJdXNhZ2UoMCk7CisJaW50ZXJmYWNlID0gYXJndlsxXTsKKworCWZvciAoaSA9IDI7IGkgPCBhcmdjOyBpKyspIHsKKwkJaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT19USU1FU1RBTVAiKSkKKwkJCXNvX3RpbWVzdGFtcCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT19USU1FU1RBTVBOUyIpKQorCQkJc29fdGltZXN0YW1wbnMgPSAxOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU0lPQ0dTVEFNUCIpKQorCQkJc2lvY2dzdGFtcCA9IDE7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTSU9DR1NUQU1QTlMiKSkKKwkJCXNpb2Nnc3RhbXBucyA9IDE7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJJUF9NVUxUSUNBU1RfTE9PUCIpKQorCQkJaXBfbXVsdGljYXN0X2xvb3AgPSAxOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUiKSkKKwkJCXNvX3RpbWVzdGFtcGluZ19mbGFncyB8PSBTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFOworCQllbHNlIGlmICghc3RyY2FzZWNtcChhcmd2W2ldLCAiU09GX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1NPRlRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJndltpXSwgIlNPRl9USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFIikpCisJCQlzb190aW1lc3RhbXBpbmdfZmxhZ3MgfD0gU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkU7CisJCWVsc2UgaWYgKCFzdHJjYXNlY21wKGFyZ3ZbaV0sICJTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSIpKQorCQkJc29fdGltZXN0YW1waW5nX2ZsYWdzIHw9IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOworCQllbHNlCisJCQl1c2FnZShhcmd2W2ldKTsKKwl9CisKKwlzb2NrID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKKwlpZiAoc29ja2V0IDwgMCkKKwkJYmFpbCgic29ja2V0Iik7CisKKwltZW1zZXQoJmRldmljZSwgMCwgc2l6ZW9mKGRldmljZSkpOworCXN0cm5jcHkoZGV2aWNlLmlmcl9uYW1lLCBpbnRlcmZhY2UsIHNpemVvZihkZXZpY2UuaWZyX25hbWUpKTsKKwlpZiAoaW9jdGwoc29jaywgU0lPQ0dJRkFERFIsICZkZXZpY2UpIDwgMCkKKwkJYmFpbCgiZ2V0dGluZyBpbnRlcmZhY2UgSVAgYWRkcmVzcyIpOworCisJbWVtc2V0KCZod3RzdGFtcCwgMCwgc2l6ZW9mKGh3dHN0YW1wKSk7CisJc3RybmNweShod3RzdGFtcC5pZnJfbmFtZSwgaW50ZXJmYWNlLCBzaXplb2YoaHd0c3RhbXAuaWZyX25hbWUpKTsKKwlod3RzdGFtcC5pZnJfZGF0YSA9ICh2b2lkICopJmh3Y29uZmlnOworCW1lbXNldCgmaHdjb25maWcsIDAsIHNpemVvZigmaHdjb25maWcpKTsKKwlod2NvbmZpZy50eF90eXBlID0KKwkJKHNvX3RpbWVzdGFtcGluZ19mbGFncyAmIFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUpID8KKwkJSFdUU1RBTVBfVFhfT04gOiBIV1RTVEFNUF9UWF9PRkY7CisJaHdjb25maWcucnhfZmlsdGVyID0KKwkJKHNvX3RpbWVzdGFtcGluZ19mbGFncyAmIFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUpID8KKwkJSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DIDogSFdUU1RBTVBfRklMVEVSX05PTkU7CisJaHdjb25maWdfcmVxdWVzdGVkID0gaHdjb25maWc7CisJaWYgKGlvY3RsKHNvY2ssIFNJT0NTSFdUU1RBTVAsICZod3RzdGFtcCkgPCAwKSB7CisJCWlmICgoZXJybm8gPT0gRUlOVkFMIHx8IGVycm5vID09IEVOT1RTVVApICYmCisJCSAgICBod2NvbmZpZ19yZXF1ZXN0ZWQudHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PRkYgJiYKKwkJICAgIGh3Y29uZmlnX3JlcXVlc3RlZC5yeF9maWx0ZXIgPT0gSFdUU1RBTVBfRklMVEVSX05PTkUpCisJCQlwcmludGYoIlNJT0NTSFdUU1RBTVA6IGRpc2FibGluZyBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIG5vdCBwb3NzaWJsZVxuIik7CisJCWVsc2UKKwkJCWJhaWwoIlNJT0NTSFdUU1RBTVAiKTsKKwl9CisJcHJpbnRmKCJTSU9DU0hXVFNUQU1QOiB0eF90eXBlICVkIHJlcXVlc3RlZCwgZ290ICVkOyByeF9maWx0ZXIgJWQgcmVxdWVzdGVkLCBnb3QgJWRcbiIsCisJICAgICAgIGh3Y29uZmlnX3JlcXVlc3RlZC50eF90eXBlLCBod2NvbmZpZy50eF90eXBlLAorCSAgICAgICBod2NvbmZpZ19yZXF1ZXN0ZWQucnhfZmlsdGVyLCBod2NvbmZpZy5yeF9maWx0ZXIpOworCisJLyogYmluZCB0byBQVFAgcG9ydCAqLworCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKwlhZGRyLnNpbl9wb3J0ID0gaHRvbnMoMzE5IC8qIFBUUCBldmVudCBwb3J0ICovKTsKKwlpZiAoYmluZChzb2NrLAorCQkgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLAorCQkgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkKKwkJYmFpbCgiYmluZCIpOworCisJLyogc2V0IG11bHRpY2FzdCBncm91cCBmb3Igb3V0Z29pbmcgcGFja2V0cyAqLworCWluZXRfYXRvbigiMjI0LjAuMS4xMzAiLCAmaWFkZHIpOyAvKiBhbHRlcm5hdGUgUFRQIGRvbWFpbiAxICovCisJYWRkci5zaW5fYWRkciA9IGlhZGRyOworCWltci5pbXJfbXVsdGlhZGRyLnNfYWRkciA9IGlhZGRyLnNfYWRkcjsKKwlpbXIuaW1yX2ludGVyZmFjZS5zX2FkZHIgPQorCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZkZXZpY2UuaWZyX2FkZHIpLT5zaW5fYWRkci5zX2FkZHI7CisJaWYgKHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19JUCwgSVBfTVVMVElDQVNUX0lGLAorCQkgICAgICAgJmltci5pbXJfaW50ZXJmYWNlLnNfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgPCAwKQorCQliYWlsKCJzZXQgbXVsdGljYXN0Iik7CisKKwkvKiBqb2luIG11bHRpY2FzdCBncm91cCwgbG9vcCBvdXIgb3duIHBhY2tldCAqLworCWlmIChzZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fSVAsIElQX0FERF9NRU1CRVJTSElQLAorCQkgICAgICAgJmltciwgc2l6ZW9mKHN0cnVjdCBpcF9tcmVxKSkgPCAwKQorCQliYWlsKCJqb2luIG11bHRpY2FzdCBncm91cCIpOworCisJaWYgKHNldHNvY2tvcHQoc29jaywgSVBQUk9UT19JUCwgSVBfTVVMVElDQVNUX0xPT1AsCisJCSAgICAgICAmaXBfbXVsdGljYXN0X2xvb3AsIHNpemVvZihlbmFibGVkKSkgPCAwKSB7CisJCWJhaWwoImxvb3AgbXVsdGljYXN0Iik7CisJfQorCisJLyogc2V0IHNvY2tldCBvcHRpb25zIGZvciB0aW1lIHN0YW1waW5nICovCisJaWYgKHNvX3RpbWVzdGFtcCAmJgorCQlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUCwKKwkJCSAgICZlbmFibGVkLCBzaXplb2YoZW5hYmxlZCkpIDwgMCkKKwkJYmFpbCgic2V0c29ja29wdCBTT19USU1FU1RBTVAiKTsKKworCWlmIChzb190aW1lc3RhbXBucyAmJgorCQlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1RJTUVTVEFNUE5TLAorCQkJICAgJmVuYWJsZWQsIHNpemVvZihlbmFibGVkKSkgPCAwKQorCQliYWlsKCJzZXRzb2Nrb3B0IFNPX1RJTUVTVEFNUE5TIik7CisKKwlpZiAoc29fdGltZXN0YW1waW5nX2ZsYWdzICYmCisJCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QSU5HLAorCQkJICAgJnNvX3RpbWVzdGFtcGluZ19mbGFncywKKwkJCSAgIHNpemVvZihzb190aW1lc3RhbXBpbmdfZmxhZ3MpKSA8IDApCisJCWJhaWwoInNldHNvY2tvcHQgU09fVElNRVNUQU1QSU5HIik7CisKKwkvKiByZXF1ZXN0IElQX1BLVElORk8gZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyAqLworCWlmIChzZXRzb2Nrb3B0KHNvY2ssIFNPTF9JUCwgSVBfUEtUSU5GTywKKwkJICAgICAgICZlbmFibGVkLCBzaXplb2YoZW5hYmxlZCkpIDwgMCkKKwkJcHJpbnRmKCIlczogJXNcbiIsICJzZXRzb2Nrb3B0IElQX1BLVElORk8iLCBzdHJlcnJvcihlcnJubykpOworCisJLyogdmVyaWZ5IHNvY2tldCBvcHRpb25zICovCisJbGVuID0gc2l6ZW9mKHZhbCk7CisJaWYgKGdldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fVElNRVNUQU1QLCAmdmFsLCAmbGVuKSA8IDApCisJCXByaW50ZigiJXM6ICVzXG4iLCAiZ2V0c29ja29wdCBTT19USU1FU1RBTVAiLCBzdHJlcnJvcihlcnJubykpOworCWVsc2UKKwkJcHJpbnRmKCJTT19USU1FU1RBTVAgJWRcbiIsIHZhbCk7CisKKwlpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBOUywgJnZhbCwgJmxlbikgPCAwKQorCQlwcmludGYoIiVzOiAlc1xuIiwgImdldHNvY2tvcHQgU09fVElNRVNUQU1QTlMiLAorCQkgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKwllbHNlCisJCXByaW50ZigiU09fVElNRVNUQU1QTlMgJWRcbiIsIHZhbCk7CisKKwlpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsICZ2YWwsICZsZW4pIDwgMCkgeworCQlwcmludGYoIiVzOiAlc1xuIiwgImdldHNvY2tvcHQgU09fVElNRVNUQU1QSU5HIiwKKwkJICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJTT19USU1FU1RBTVBJTkcgJWRcbiIsIHZhbCk7CisJCWlmICh2YWwgIT0gc29fdGltZXN0YW1waW5nX2ZsYWdzKQorCQkJcHJpbnRmKCIgICBub3QgdGhlIGV4cGVjdGVkIHZhbHVlICVkXG4iLAorCQkJICAgICAgIHNvX3RpbWVzdGFtcGluZ19mbGFncyk7CisJfQorCisJLyogc2VuZCBwYWNrZXRzIGZvcmV2ZXIgZXZlcnkgZml2ZSBzZWNvbmRzICovCisJZ2V0dGltZW9mZGF5KCZuZXh0LCAwKTsKKwluZXh0LnR2X3NlYyA9IChuZXh0LnR2X3NlYyArIDEpIC8gNSAqIDU7CisJbmV4dC50dl91c2VjID0gMDsKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgdGltZXZhbCBub3c7CisJCXN0cnVjdCB0aW1ldmFsIGRlbHRhOworCQlsb25nIGRlbHRhX3VzOworCQlpbnQgcmVzOworCQlmZF9zZXQgcmVhZGZzLCBlcnJvcmZzOworCisJCWdldHRpbWVvZmRheSgmbm93LCAwKTsKKwkJZGVsdGFfdXMgPSAobG9uZykobmV4dC50dl9zZWMgLSBub3cudHZfc2VjKSAqIDEwMDAwMDAgKworCQkJKGxvbmcpKG5leHQudHZfdXNlYyAtIG5vdy50dl91c2VjKTsKKwkJaWYgKGRlbHRhX3VzID4gMCkgeworCQkJLyogY29udGludWUgd2FpdGluZyBmb3IgdGltZW91dCBvciBkYXRhICovCisJCQlkZWx0YS50dl9zZWMgPSBkZWx0YV91cyAvIDEwMDAwMDA7CisJCQlkZWx0YS50dl91c2VjID0gZGVsdGFfdXMgJSAxMDAwMDAwOworCisJCQlGRF9aRVJPKCZyZWFkZnMpOworCQkJRkRfWkVSTygmZXJyb3Jmcyk7CisJCQlGRF9TRVQoc29jaywgJnJlYWRmcyk7CisJCQlGRF9TRVQoc29jaywgJmVycm9yZnMpOworCQkJcHJpbnRmKCIlbGQuJTA2bGQ6IHNlbGVjdCAlbGR1c1xuIiwKKwkJCSAgICAgICAobG9uZylub3cudHZfc2VjLCAobG9uZylub3cudHZfdXNlYywKKwkJCSAgICAgICBkZWx0YV91cyk7CisJCQlyZXMgPSBzZWxlY3Qoc29jayArIDEsICZyZWFkZnMsIDAsICZlcnJvcmZzLCAmZGVsdGEpOworCQkJZ2V0dGltZW9mZGF5KCZub3csIDApOworCQkJcHJpbnRmKCIlbGQuJTA2bGQ6IHNlbGVjdCByZXR1cm5lZDogJWQsICVzXG4iLAorCQkJICAgICAgIChsb25nKW5vdy50dl9zZWMsIChsb25nKW5vdy50dl91c2VjLAorCQkJICAgICAgIHJlcywKKwkJCSAgICAgICByZXMgPCAwID8gc3RyZXJyb3IoZXJybm8pIDogInN1Y2Nlc3MiKTsKKwkJCWlmIChyZXMgPiAwKSB7CisJCQkJaWYgKEZEX0lTU0VUKHNvY2ssICZyZWFkZnMpKQorCQkJCQlwcmludGYoInJlYWR5IGZvciByZWFkaW5nXG4iKTsKKwkJCQlpZiAoRkRfSVNTRVQoc29jaywgJmVycm9yZnMpKQorCQkJCQlwcmludGYoImhhcyBlcnJvclxuIik7CisJCQkJcmVjdnBhY2tldChzb2NrLCAwLAorCQkJCQkgICBzaW9jZ3N0YW1wLAorCQkJCQkgICBzaW9jZ3N0YW1wbnMpOworCQkJCXJlY3ZwYWNrZXQoc29jaywgTVNHX0VSUlFVRVVFLAorCQkJCQkgICBzaW9jZ3N0YW1wLAorCQkJCQkgICBzaW9jZ3N0YW1wbnMpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogd3JpdGUgb25lIHBhY2tldCAqLworCQkJc2VuZHBhY2tldChzb2NrLAorCQkJCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwKKwkJCQkgICBzaXplb2YoYWRkcikpOworCQkJbmV4dC50dl9zZWMgKz0gNTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC90c2VjLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3RzZWMudHh0CmluZGV4IDdmYTRiMjcuLmVkYjdhZTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3RzZWMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3RzZWMudHh0CkBAIC01Niw2ICs1NiwxMiBAQAogICAgIGhhcmR3YXJlLgogICAtIGZzbCxtYWdpYy1wYWNrZXQgOiBJZiBwcmVzZW50LCBpbmRpY2F0ZXMgdGhhdCB0aGUgaGFyZHdhcmUgc3VwcG9ydHMKICAgICB3YWtpbmcgdXAgdmlhIG1hZ2ljIHBhY2tldC4KKyAgLSBiZC1zdGFzaCA6IElmIHByZXNlbnQsIGluZGljYXRlcyB0aGF0IHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBzdGFzaGluZworICAgIGJ1ZmZlciBkZXNjcmlwdG9ycyBpbiB0aGUgTDIuCisgIC0gcngtc3Rhc2gtbGVuIDogRGVub3RlcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGEgcmVjZWl2ZWQgYnVmZmVyIHRvIHN0YXNoCisgICAgaW4gdGhlIEwyLgorICAtIHJ4LXN0YXNoLWlkeCA6IERlbm90ZXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBieXRlIGZyb20gdGhlIHJlY2VpdmVkCisgICAgYnVmZmVyIHRvIHN0YXNoIGluIHRoZSBMMi4KIAogRXhhbXBsZToKIAlldGhlcm5ldEAyNDAwMCB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCmluZGV4IGFhYmNjM2EuLjNjMDBjOWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyLzAwLUlOREVYCkBAIC0yLDggKzIsNiBAQAogCS0gdGhpcyBmaWxlLgogc2NoZWQtYXJjaC50eHQKIAktIENQVSBTY2hlZHVsZXIgaW1wbGVtZW50YXRpb24gaGludHMgZm9yIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb2RlLgotc2NoZWQtY29kaW5nLnR4dAotCS0gcmVmZXJlbmNlIGZvciB2YXJpb3VzIHNjaGVkdWxlci1yZWxhdGVkIG1ldGhvZHMgaW4gdGhlIE8oMSkgc2NoZWR1bGVyLgogc2NoZWQtZGVzaWduLUNGUy50eHQKIAktIGdvYWxzLCBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDb21wbGV0ZSBGYWlyIFNjaGVkdWxlci4KIHNjaGVkLWRvbWFpbnMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1jb2RpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtY29kaW5nLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2JkOGRiNy4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1jb2RpbmcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLSAgICAgUmVmZXJlbmNlIGZvciB2YXJpb3VzIHNjaGVkdWxlci1yZWxhdGVkIG1ldGhvZHMgaW4gdGhlIE8oMSkgc2NoZWR1bGVyCi0JCVJvYmVydCBMb3ZlIDxybWxAdGVjaDkubmV0PiwgTW9udGFWaXN0YSBTb2Z0d2FyZQotCi0KLU5vdGUgbW9zdCBvZiB0aGVzZSBtZXRob2RzIGFyZSBsb2NhbCB0byBrZXJuZWwvc2NoZWQuYyAtIHRoaXMgaXMgYnkgZGVzaWduLgotVGhlIHNjaGVkdWxlciBpcyBtZWFudCB0byBiZSBzZWxmLWNvbnRhaW5lZCBhbmQgYWJzdHJhY3RlZCBhd2F5LiAgVGhpcyBkb2N1bWVudAotaXMgcHJpbWFyaWx5IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBzY2hlZHVsZXIsIG5vdCBpbnRlcmZhY2luZyB0byBpdC4gIFNvbWUgb2YKLXRoZSBkaXNjdXNzZWQgaW50ZXJmYWNlcywgaG93ZXZlciwgYXJlIGdlbmVyYWwgcHJvY2Vzcy9zY2hlZHVsaW5nIG1ldGhvZHMuCi1UaGV5IGFyZSB0eXBpY2FsbHkgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L3NjaGVkLmguCi0KLQotTWFpbiBTY2hlZHVsaW5nIE1ldGhvZHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgbG9hZF9iYWxhbmNlKHJ1bnF1ZXVlX3QgKnRoaXNfcnEsIGludCBpZGxlKQotCUF0dGVtcHRzIHRvIHB1bGwgdGFza3MgZnJvbSBvbmUgY3B1IHRvIGFub3RoZXIgdG8gYmFsYW5jZSBjcHUgdXNhZ2UsCi0JaWYgbmVlZGVkLiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGV4cGxpY2l0bHkgaWYgdGhlIHJ1bnF1ZXVlcyBhcmUKLQlpbWJhbGFuY2VkIG9yIHBlcmlvZGljYWxseSBieSB0aGUgdGltZXIgdGljay4gIFByaW9yIHRvIGNhbGxpbmcsCi0JdGhlIGN1cnJlbnQgcnVucXVldWUgbXVzdCBiZSBsb2NrZWQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCi0KLXZvaWQgc2NoZWR1bGUoKQotCVRoZSBtYWluIHNjaGVkdWxpbmcgZnVuY3Rpb24uICBVcG9uIHJldHVybiwgdGhlIGhpZ2hlc3QgcHJpb3JpdHkKLQlwcm9jZXNzIHdpbGwgYmUgYWN0aXZlLgotCi0KLUxvY2tpbmcKLS0tLS0tLS0KLQotRWFjaCBydW5xdWV1ZSBoYXMgaXRzIG93biBsb2NrLCBycS0+bG9jay4gIFdoZW4gbXVsdGlwbGUgcnVucXVldWVzIG5lZWQKLXRvIGJlIGxvY2tlZCwgbG9jayBhY3F1aXJlcyBtdXN0IGJlIG9yZGVyZWQgYnkgYXNjZW5kaW5nICZydW5xdWV1ZSB2YWx1ZS4KLQotQSBzcGVjaWZpYyBydW5xdWV1ZSBpcyBsb2NrZWQgdmlhCi0KLQl0YXNrX3JxX2xvY2sodGFza190IHBpZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCi0KLXdoaWNoIGRpc2FibGVzIHByZWVtcHRpb24sIGRpc2FibGVzIGludGVycnVwdHMsIGFuZCBsb2NrcyB0aGUgcnVucXVldWUgcGlkIGlzCi1ydW5uaW5nIG9uLiAgTGlrZXdpc2UsCi0KLQl0YXNrX3JxX3VubG9jayh0YXNrX3QgcGlkLCB1bnNpZ25lZCBsb25nICpmbGFncykKLQotdW5sb2NrcyB0aGUgcnVucXVldWUgcGlkIGlzIHJ1bm5pbmcgb24sIHJlc3RvcmVzIGludGVycnVwdHMgdG8gdGhlaXIgcHJldmlvdXMKLXN0YXRlLCBhbmQgcmVlbmFibGVzIHByZWVtcHRpb24uCi0KLVRoZSByb3V0aW5lcwotCi0JZG91YmxlX3JxX2xvY2socnVucXVldWVfdCAqcnExLCBydW5xdWV1ZV90ICpycTIpCi0KLWFuZAotCi0JZG91YmxlX3JxX3VubG9jayhydW5xdWV1ZV90ICpycTEsIHJ1bnF1ZXVlX3QgKnJxMikKLQotc2FmZWx5IGxvY2sgYW5kIHVubG9jaywgcmVzcGVjdGl2ZWx5LCB0aGUgdHdvIHNwZWNpZmllZCBydW5xdWV1ZXMuICBUaGV5IGRvCi1ub3QsIGhvd2V2ZXIsIGRpc2FibGUgYW5kIHJlc3RvcmUgaW50ZXJydXB0cy4gIFVzZXJzIGFyZSByZXF1aXJlZCB0byBkbyBzbwotbWFudWFsbHkgYmVmb3JlIGFuZCBhZnRlciBjYWxscy4KLQotCi1WYWx1ZXMKLS0tLS0tLQotCi1NQVhfUFJJTwotCVRoZSBtYXhpbXVtIHByaW9yaXR5IG9mIHRoZSBzeXN0ZW0sIHN0b3JlZCBpbiB0aGUgdGFzayBhcyB0YXNrLT5wcmlvLgotCUxvd2VyIHByaW9yaXRpZXMgYXJlIGhpZ2hlci4gIE5vcm1hbCAobm9uLVJUKSBwcmlvcml0aWVzIHJhbmdlIGZyb20KLQlNQVhfUlRfUFJJTyB0byAoTUFYX1BSSU8gLSAxKS4KLU1BWF9SVF9QUklPCi0JVGhlIG1heGltdW0gcmVhbC10aW1lIHByaW9yaXR5IG9mIHRoZSBzeXN0ZW0uICBWYWxpZCBSVCBwcmlvcml0aWVzCi0JcmFuZ2UgZnJvbSAwIHRvIChNQVhfUlRfUFJJTyAtIDEpLgotTUFYX1VTRVJfUlRfUFJJTwotCVRoZSBtYXhpbXVtIHJlYWwtdGltZSBwcmlvcml0eSB0aGF0IGlzIGV4cG9ydGVkIHRvIHVzZXItc3BhY2UuICBTaG91bGQKLQlhbHdheXMgYmUgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIE1BWF9SVF9QUklPLiAgU2V0dGluZyBpdCBsZXNzIGFsbG93cwotCWtlcm5lbCB0aHJlYWRzIHRvIGhhdmUgaGlnaGVyIHByaW9yaXRpZXMgdGhhbiBhbnkgdXNlci1zcGFjZSB0YXNrLgotTUlOX1RJTUVTTElDRQotTUFYX1RJTUVTTElDRQotCVJlc3BlY3RpdmVseSwgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdGltZXNsaWNlcyAocXVhbnRhKSBvZiBhIHByb2Nlc3MuCi0KLURhdGEKLS0tLS0KLQotc3RydWN0IHJ1bnF1ZXVlCi0JVGhlIG1haW4gcGVyLUNQVSBydW5xdWV1ZSBkYXRhIHN0cnVjdHVyZS4KLXN0cnVjdCB0YXNrX3N0cnVjdAotCVRoZSBtYWluIHBlci1wcm9jZXNzIGRhdGEgc3RydWN0dXJlLgotCi0KLUdlbmVyYWwgTWV0aG9kcwotLS0tLS0tLS0tLS0tLS0tCi0KLWNwdV9ycShjcHUpCi0JUmV0dXJucyB0aGUgcnVucXVldWUgb2YgdGhlIHNwZWNpZmllZCBjcHUuCi10aGlzX3JxKCkKLQlSZXR1cm5zIHRoZSBydW5xdWV1ZSBvZiB0aGUgY3VycmVudCBjcHUuCi10YXNrX3JxKHBpZCkKLQlSZXR1cm5zIHRoZSBydW5xdWV1ZSB3aGljaCBob2xkcyB0aGUgc3BlY2lmaWVkIHBpZC4KLWNwdV9jdXJyKGNwdSkKLQlSZXR1cm5zIHRoZSB0YXNrIGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZSBnaXZlbiBjcHUuCi1ydF90YXNrKHBpZCkKLQlSZXR1cm5zIHRydWUgaWYgcGlkIGlzIHJlYWwtdGltZSwgZmFsc2UgaWYgbm90LgotCi0KLVByb2Nlc3MgQ29udHJvbCBNZXRob2RzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIHNldF91c2VyX25pY2UodGFza190ICpwLCBsb25nIG5pY2UpCi0JU2V0cyB0aGUgIm5pY2UiIHZhbHVlIG9mIHRhc2sgcCB0byB0aGUgZ2l2ZW4gdmFsdWUuCi1pbnQgc2V0c2NoZWR1bGVyKHBpZF90IHBpZCwgaW50IHBvbGljeSwgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkKLQlTZXRzIHRoZSBzY2hlZHVsaW5nIHBvbGljeSBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGdpdmVuIHBpZC4KLWludCBzZXRfY3B1c19hbGxvd2VkKHRhc2tfdCAqcCwgdW5zaWduZWQgbG9uZyBuZXdfbWFzaykKLQlTZXRzIGEgZ2l2ZW4gdGFzaydzIENQVSBhZmZpbml0eSBhbmQgbWlncmF0ZXMgaXQgdG8gYSBwcm9wZXIgY3B1LgotCUNhbGxlcnMgbXVzdCBoYXZlIGEgdmFsaWQgcmVmZXJlbmNlIHRvIHRoZSB0YXNrIGFuZCBhc3N1cmUgdGhlCi0JdGFzayBub3QgZXhpdCBwcmVtYXR1cmVseS4gIE5vIGxvY2tzIGNhbiBiZSBoZWxkIGR1cmluZyB0aGUgY2FsbC4KLXNldF90YXNrX3N0YXRlKHRzaywgc3RhdGVfdmFsdWUpCi0JU2V0cyB0aGUgZ2l2ZW4gdGFzaydzIHN0YXRlIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLXNldF9jdXJyZW50X3N0YXRlKHN0YXRlX3ZhbHVlKQotCVNldHMgdGhlIGN1cnJlbnQgdGFzaydzIHN0YXRlIHRvIHRoZSBnaXZlbiB2YWx1ZS4KLXZvaWQgc2V0X3Rza19uZWVkX3Jlc2NoZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi0JU2V0cyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGdpdmVuIHRhc2suCi12b2lkIGNsZWFyX3Rza19uZWVkX3Jlc2NoZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi0JQ2xlYXJzIG5lZWRfcmVzY2hlZCBpbiB0aGUgZ2l2ZW4gdGFzay4KLXZvaWQgc2V0X25lZWRfcmVzY2hlZCgpCi0JU2V0cyBuZWVkX3Jlc2NoZWQgaW4gdGhlIGN1cnJlbnQgdGFzay4KLXZvaWQgY2xlYXJfbmVlZF9yZXNjaGVkKCkKLQlDbGVhcnMgbmVlZF9yZXNjaGVkIGluIHRoZSBjdXJyZW50IHRhc2suCi1pbnQgbmVlZF9yZXNjaGVkKCkKLQlSZXR1cm5zIHRydWUgaWYgbmVlZF9yZXNjaGVkIGlzIHNldCBpbiB0aGUgY3VycmVudCB0YXNrLCBmYWxzZQotCW90aGVyd2lzZS4KLXlpZWxkKCkKLQlQbGFjZSB0aGUgY3VycmVudCBwcm9jZXNzIGF0IHRoZSBlbmQgb2YgdGhlIHJ1bnF1ZXVlIGFuZCBjYWxsIHNjaGVkdWxlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAppbmRleCA4NDFhOTM2Li4wMTI4NThkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApAQCAtMzQ2LDYgKzM0Niw5IEBACiAgICAgc2JpcnEJLSBJUlEgIyBmb3IgQ01JODMzMCBjaGlwIChTQjE2KQogICAgIHNiZG1hOAktIDhiaXQgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKICAgICBzYmRtYTE2CS0gMTZiaXQgRE1BICMgZm9yIENNSTgzMzAgY2hpcCAoU0IxNikKKyAgICBmbXBvcnQJLSAob3B0aW9uYWwpIE9QTDMgSS9PIHBvcnQKKyAgICBtcHVwb3J0CS0gKG9wdGlvbmFsKSBNUFU0MDEgSS9PIHBvcnQKKyAgICBtcHVpcnEJLSAob3B0aW9uYWwpIE1QVTQwMSBpcnEgIwogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgbXVsdGlwbGUgY2FyZHMgYW5kIGF1dG9wcm9iZS4KIApAQCAtMzg4LDM0ICszOTEsMTEgQEAKIAogICAgIFRoZSBwb3dlci1tYW5hZ2VtZW50IGlzIHN1cHBvcnRlZC4KICAgICAKLSAgTW9kdWxlIHNuZC1jczQyMzIKLSAgLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjMyL0NTNDIzMkEgSVNBIGNoaXBzLgotCi0gICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKLQotICAgIHdpdGggaXNhcG5wPTAsIHRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgYXZhaWxhYmxlOgotCi0gICAgcG9ydAktIHBvcnQgIyBmb3IgQ1M0MjMyIGNoaXAgKFBuUCBzZXR1cCAtIDB4NTM0KQotICAgIGNwb3J0CS0gY29udHJvbCBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDEyMCwweDIxMCwweGYwMCkKLSAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBVQVJUIChQblAgc2V0dXAgLSAweDMwMCksIC0xID0gZGlzYWJsZQotICAgIGZtX3BvcnQJLSBGTSBwb3J0ICMgZm9yIENTNDIzMiBjaGlwIChQblAgc2V0dXAgLSAweDM4OCksIC0xID0gZGlzYWJsZQotICAgIGlycQkJLSBJUlEgIyBmb3IgQ1M0MjMyIGNoaXAgKDUsNyw5LDExLDEyLDE1KQotICAgIG1wdV9pcnEJLSBJUlEgIyBmb3IgTVBVLTQwMSBVQVJUICg5LDExLDEyLDE1KQotICAgIGRtYTEJLSBmaXJzdCBETUEgIyBmb3IgQ1M0MjMyIGNoaXAgKDAsMSwzKQotICAgIGRtYTIJLSBzZWNvbmQgRE1BICMgZm9yIFlhbWFoYSBDUzQyMzIgY2hpcCAoMCwxLDMpLCAtMSA9IGRpc2FibGUKLSAgICAKLSAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcy4gVGhpcyBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydCBhdXRvcHJvYmUKLSAgICAoaWYgSVNBIFBuUCBpcyBub3QgdXNlZCkgdGh1cyBtYWluIHBvcnQgbXVzdCBiZSBzcGVjaWZpZWQhISEgT3RoZXIgcG9ydHMgYXJlCi0gICAgb3B0aW9uYWwuCi0KLSAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCi0gICAgCiAgIE1vZHVsZSBzbmQtY3M0MjM2CiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBNb2R1bGUgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIENTNDIzNS9DUzQyMzYvQ1M0MjM2Qi9DUzQyMzdCLworICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gQ1M0MjMyL0NTNDIzMkEsCisgICAgCSAgICAgICAJICAgICAJICAgCSAgIENTNDIzNS9DUzQyMzYvQ1M0MjM2Qi9DUzQyMzdCLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUzQyMzhCL0NTNDIzOSBJU0EgY2hpcHMuCiAKICAgICBpc2FwbnAJLSBJU0EgUG5QIGRldGVjdGlvbiAtIDAgPSBkaXNhYmxlLCAxID0gZW5hYmxlIChkZWZhdWx0KQpAQCAtNDM3LDYgKzQxNyw5IEBACiAKICAgICBUaGUgcG93ZXItbWFuYWdlbWVudCBpcyBzdXBwb3J0ZWQuCiAKKyAgICBUaGlzIG1vZHVsZSBpcyBhbGlhc2VkIGFzIHNuZC1jczQyMzIgc2luY2UgaXQgcHJvdmlkZXMgdGhlIG9sZAorICAgIHNuZC1jczQyMzIgZnVuY3Rpb25hbGl0eSwgdG9vLgorCiAgIE1vZHVsZSBzbmQtY3M0MjgxCiAgIC0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTYwNiw2ICs1ODksNyBAQAogICAgIE1vZHVsZSBmb3IgRVNTIEF1ZGlvRHJpdmUgRVMtMTY4OCBhbmQgRVMtNjg4IHNvdW5kIGNhcmRzLgogCiAgICAgcG9ydAktIHBvcnQgIyBmb3IgRVMtMTY4OCBjaGlwICgweDIyMCwweDI0MCwweDI2MCkKKyAgICBmbV9wb3J0CS0gcG9ydCAjIGZvciBPUEwzIChvcHRpb247IHNoYXJlIHRoZSBzYW1lIHBvcnQgYXMgZGVmYXVsdCkKICAgICBtcHVfcG9ydAktIHBvcnQgIyBmb3IgTVBVLTQwMSBwb3J0ICgweDMwMCwweDMxMCwweDMyMCwweDMzMCksIC0xID0gZGlzYWJsZSAoZGVmYXVsdCkKICAgICBpcnEJCS0gSVJRICMgZm9yIEVTLTE2ODggY2hpcCAoNSw3LDksMTApCiAgICAgbXB1X2lycQktIElSUSAjIGZvciBNUFUtNDAxIHBvcnQgKDUsNyw5LDEwKQpAQCAtNzU3LDYgKzc0MSw5IEBACiAgICAgbW9kZWwJLSBmb3JjZSB0aGUgbW9kZWwgbmFtZQogICAgIHBvc2l0aW9uX2ZpeCAtIEZpeCBETUEgcG9pbnRlciAoMCA9IGF1dG8sIDEgPSB1c2UgTFBJQiwgMiA9IFBPU0JVRikKICAgICBwcm9iZV9tYXNrICAtIEJpdG1hc2sgdG8gcHJvYmUgY29kZWNzIChkZWZhdWx0ID0gLTEsIG1lYW5pbmcgYWxsIHNsb3RzKQorICAgIAkJICBXaGVuIHRoZSBiaXQgOCAoMHgxMDApIGlzIHNldCwgdGhlIGxvd2VyIDggYml0cyBhcmUgdXNlZAorCQkgIGFzIHRoZSAiZml4ZWQiIGNvZGVjIHNsb3RzOyBpLmUuIHRoZSBkcml2ZXIgcHJvYmVzIHRoZQorCQkgIHNsb3RzIHJlZ2FyZGxlc3Mgd2hhdCBoYXJkd2FyZSByZXBvcnRzIGJhY2sKICAgICBwcm9iZV9vbmx5CS0gT25seSBwcm9iaW5nIGFuZCBubyBjb2RlYyBpbml0aWFsaXphdGlvbiAoZGVmYXVsdD1vZmYpOwogCQkgIFVzZWZ1bCB0byBjaGVjayB0aGUgaW5pdGlhbCBjb2RlYyBzdGF0dXMgZm9yIGRlYnVnZ2luZwogICAgIGJkbF9wb3NfYWRqCS0gU3BlY2lmaWVzIHRoZSBETUEgSVJRIHRpbWluZyBkZWxheSBpbiBzYW1wbGVzLgpAQCAtMTE4NSw2ICsxMTcyLDU0IEBACiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBkZXZpY2VzIGFuZCBQblAuCiAgICAgCisgIE1vZHVsZSBzbmQtbXNuZC1jbGFzc2ljCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb2R1bGUgZm9yIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIENsYXNzaWMsIFRhaGl0aSBvciBNb250ZXJleQorICAgIHNvdW5kY2FyZHMuCisKKyAgICBpbwkJLSBQb3J0ICMgZm9yIG1zbmQtY2xhc3NpYyBjYXJkCisgICAgaXJxCQktIElSUSAjIGZvciBtc25kLWNsYXNzaWMgY2FyZAorICAgIG1lbQkJLSBNZW1vcnkgYWRkcmVzcyAoMHhiMDAwMCwgMHhjODAwMCwgMHhkMDAwMCwgMHhkODAwMCwKKwkJICAweGUwMDAwIG9yIDB4ZTgwMDApCisgICAgd3JpdGVfbmRlbGF5IC0gZW5hYmxlIHdyaXRlIG5kZWxheSAoZGVmYXVsdCA9IDEpCisgICAgY2FsaWJyYXRlX3NpZ25hbCAtIGNhbGlicmF0ZSBzaWduYWwgKGRlZmF1bHQgPSAwKQorICAgIGlzYXBucAktIElTQSBQblAgZGV0ZWN0aW9uIC0gMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKGRlZmF1bHQpCisgICAgZGlnaXRhbAktIERpZ2l0YWwgZGF1Z2h0ZXJib2FyZCBwcmVzZW50IChkZWZhdWx0ID0gMCkKKyAgICBjZmcJCS0gQ29uZmlnIHBvcnQgKDB4MjUwLCAweDI2MCBvciAweDI3MCkgZGVmYXVsdCA9IFBuUAorICAgIHJlc2V0CS0gUmVzZXQgYWxsIGRldmljZXMKKyAgICBtcHVfaW8JLSBNUFU0MDEgSS9PIHBvcnQKKyAgICBtcHVfaXJxCS0gTVBVNDAxIGlycSMKKyAgICBpZGVfaW8wCS0gSURFIHBvcnQgIzAKKyAgICBpZGVfaW8xCS0gSURFIHBvcnQgIzEKKyAgICBpZGVfaXJxCS0gSURFIGlycSMKKyAgICBqb3lzdGlja19pbwktIEpveXN0aWNrIEkvTyBwb3J0CisKKyAgICBUaGUgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGZpbGVzICJ0dXJ0bGViZWFjaC9tc25kaW5pdC5iaW4iIGFuZAorICAgICJ0dXJ0bGViZWFjaC9tc25kcGVybS5iaW4iIGluIHRoZSBwcm9wZXIgZmlybXdhcmUgZGlyZWN0b3J5LgorCisgICAgU2VlIERvY3VtZW50YXRpb24vc291bmQvb3NzL011bHRpU291bmQgZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbgorICAgIGFib3V0IHRoaXMgZHJpdmVyLiAgTm90ZSB0aGF0IGl0IGhhcyBiZWVuIGRpc2NvbnRpbnVlZCwgYnV0IHRoZSAKKyAgICBWb3lldHJhIFR1cnRsZSBCZWFjaCBrbm93bGVkZ2UgYmFzZSBlbnRyeSBmb3IgaXQgaXMgc3RpbGwgYXZhaWxhYmxlCisgICAgYXQKKwlodHRwOi8vd3d3LnR1cnRsZWJlYWNoLmNvbS9zaXRlL2tiX2Z0cC83OTAuYXNwCisKKyAgTW9kdWxlIHNuZC1tc25kLXBpbm5hY2xlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9kdWxlIGZvciBUdXJ0bGUgQmVhY2ggTXVsdGlTb3VuZCBQaW5uYWNsZS9GaWppIHNvdW5kY2FyZHMuCisKKyAgICBpbwkJLSBQb3J0ICMgZm9yIHBpbm5hY2xlL2ZpamkgY2FyZAorICAgIGlycQkJLSBJUlEgIyBmb3IgcGlubmFsY2UvZmlqaSBjYXJkCisgICAgbWVtCQktIE1lbW9yeSBhZGRyZXNzICgweGIwMDAwLCAweGM4MDAwLCAweGQwMDAwLCAweGQ4MDAwLAorCQkgIDB4ZTAwMDAgb3IgMHhlODAwMCkKKyAgICB3cml0ZV9uZGVsYXkgLSBlbmFibGUgd3JpdGUgbmRlbGF5IChkZWZhdWx0ID0gMSkKKyAgICBjYWxpYnJhdGVfc2lnbmFsIC0gY2FsaWJyYXRlIHNpZ25hbCAoZGVmYXVsdCA9IDApCisgICAgaXNhcG5wCS0gSVNBIFBuUCBkZXRlY3Rpb24gLSAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAoZGVmYXVsdCkKKworICAgIFRoZSBkcml2ZXIgcmVxdWlyZXMgZmlybXdhcmUgZmlsZXMgInR1cnRsZWJlYWNoL3BuZHNwaW5pLmJpbiIgYW5kCisgICAgInR1cnRsZWJlYWNoL3BuZHNwZXJtLmJpbiIgaW4gdGhlIHByb3BlciBmaXJtd2FyZSBkaXJlY3RvcnkuCisKICAgTW9kdWxlIHNuZC1tdHBhdgogICAtLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE4MjQsNyArMTg1OSw3IEBACiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIE1vZHVsZSBmb3Igc291bmQgY2FyZHMgYmFzZWQgb24gdGhlIEFzdXMgQVYxMDAvQVYyMDAgY2hpcHMsCi0gICAgaS5lLiwgWG9uYXIgRDEsIERYLCBEMiwgRDJYIGFuZCBIREFWMS4zIChEZWx1eGUpLgorICAgIGkuZS4sIFhvbmFyIEQxLCBEWCwgRDIsIEQyWCwgSERBVjEuMyAoRGVsdXhlKSwgYW5kIEVzc2VuY2UgU1RYLgogCiAgICAgVGhpcyBtb2R1bGUgc3VwcG9ydHMgYXV0b3Byb2JlIGFuZCBtdWx0aXBsZSBjYXJkcy4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svYWxzYS1kcml2ZXItYXBpLnRtcGwgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ2NDRmNy4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvRG9jQm9vay9hbHNhLWRyaXZlci1hcGkudG1wbAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC4xLy9FTiI+Ci0KLTxib29rPgotPD9kYmh0bWwgZmlsZW5hbWU9ImluZGV4Lmh0bWwiPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLTwhLS0gSGVhZGVyICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Ym9va2luZm8+Ci0gICAgPHRpdGxlPlRoZSBBTFNBIERyaXZlciBBUEk8L3RpdGxlPgotCi0gICAgPGxlZ2Fsbm90aWNlPgotICAgIDxwYXJhPgotICAgIFRoaXMgZG9jdW1lbnQgaXMgZnJlZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAKLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICBUaGlzIGRvY3VtZW50IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IDxlbXBoYXNpcz5XSVRIT1VUIEFOWSBXQVJSQU5UWTwvZW1waGFzaXM+OyB3aXRob3V0IGV2ZW4gdGhlCi0gICAgaW1wbGllZCB3YXJyYW50eSBvZiA8ZW1waGFzaXM+TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKLSAgICBQQVJUSUNVTEFSIFBVUlBPU0U8L2VtcGhhc2lzPi4gU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGZvciBtb3JlIGRldGFpbHMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICAgIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCi0gICAgTUEgMDIxMTEtMTMwNyBVU0EKLSAgICA8L3BhcmE+Ci0gICAgPC9sZWdhbG5vdGljZT4KLQotICA8L2Jvb2tpbmZvPgotCi0gIDxjaGFwdGVyPjx0aXRsZT5NYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBEZXZpY2VzPC90aXRsZT4KLSAgICAgPHNlY3QxPjx0aXRsZT5DYXJkIE1hbmFnZW1lbnQ8L3RpdGxlPgotIUVzb3VuZC9jb3JlL2luaXQuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPkRldmljZSBDb21wb25lbnRzPC90aXRsZT4KLSFFc291bmQvY29yZS9kZXZpY2UuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPk1vZHVsZSByZXF1ZXN0cyBhbmQgRGV2aWNlIEZpbGUgRW50cmllczwvdGl0bGU+Ci0hRXNvdW5kL2NvcmUvc291bmQuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPk1lbW9yeSBNYW5hZ2VtZW50IEhlbHBlcnM8L3RpdGxlPgotIUVzb3VuZC9jb3JlL21lbW9yeS5jCi0hRXNvdW5kL2NvcmUvbWVtYWxsb2MuYwotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0gIDxjaGFwdGVyPjx0aXRsZT5QQ00gQVBJPC90aXRsZT4KLSAgICAgPHNlY3QxPjx0aXRsZT5QQ00gQ29yZTwvdGl0bGU+Ci0hRXNvdW5kL2NvcmUvcGNtLmMKLSFFc291bmQvY29yZS9wY21fbGliLmMKLSFFc291bmQvY29yZS9wY21fbmF0aXZlLmMKLSAgICAgPC9zZWN0MT4KLSAgICAgPHNlY3QxPjx0aXRsZT5QQ00gRm9ybWF0IEhlbHBlcnM8L3RpdGxlPgotIUVzb3VuZC9jb3JlL3BjbV9taXNjLmMKLSAgICAgPC9zZWN0MT4KLSAgICAgPHNlY3QxPjx0aXRsZT5QQ00gTWVtb3J5IE1hbmFnZW1lbnQ8L3RpdGxlPgotIUVzb3VuZC9jb3JlL3BjbV9tZW1vcnkuYwotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0gIDxjaGFwdGVyPjx0aXRsZT5Db250cm9sL01peGVyIEFQSTwvdGl0bGU+Ci0gICAgIDxzZWN0MT48dGl0bGU+R2VuZXJhbCBDb250cm9sIEludGVyZmFjZTwvdGl0bGU+Ci0hRXNvdW5kL2NvcmUvY29udHJvbC5jCi0gICAgIDwvc2VjdDE+Ci0gICAgIDxzZWN0MT48dGl0bGU+QUM5NyBDb2RlYyBBUEk8L3RpdGxlPgotIUVzb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKLSFFc291bmQvcGNpL2FjOTcvYWM5N19wY20uYwotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0gIDxjaGFwdGVyPjx0aXRsZT5NSURJIEFQSTwvdGl0bGU+Ci0gICAgIDxzZWN0MT48dGl0bGU+UmF3IE1JREkgQVBJPC90aXRsZT4KLSFFc291bmQvY29yZS9yYXdtaWRpLmMKLSAgICAgPC9zZWN0MT4KLSAgICAgPHNlY3QxPjx0aXRsZT5NUFU0MDEtVUFSVCBBUEk8L3RpdGxlPgotIUVzb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDFfdWFydC5jCi0gICAgIDwvc2VjdDE+Ci0gIDwvY2hhcHRlcj4KLSAgPGNoYXB0ZXI+PHRpdGxlPlByb2MgSW5mbyBBUEk8L3RpdGxlPgotICAgICA8c2VjdDE+PHRpdGxlPlByb2MgSW5mbyBJbnRlcmZhY2U8L3RpdGxlPgotIUVzb3VuZC9jb3JlL2luZm8uYwotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0gIDxjaGFwdGVyPjx0aXRsZT5NaXNjZWxsYW5lb3VzIEZ1bmN0aW9uczwvdGl0bGU+Ci0gICAgIDxzZWN0MT48dGl0bGU+SGFyZHdhcmUtRGVwZW5kZW50IERldmljZXMgQVBJPC90aXRsZT4KLSFFc291bmQvY29yZS9od2RlcC5jCi0gICAgIDwvc2VjdDE+Ci0gICAgIDxzZWN0MT48dGl0bGU+SVNBIERNQSBIZWxwZXJzPC90aXRsZT4KLSFFc291bmQvY29yZS9pc2FkbWEuYwotICAgICA8L3NlY3QxPgotICAgICA8c2VjdDE+PHRpdGxlPk90aGVyIEhlbHBlciBNYWNyb3M8L3RpdGxlPgotIUlpbmNsdWRlL3NvdW5kL2NvcmUuaAotICAgICA8L3NlY3QxPgotICA8L2NoYXB0ZXI+Ci0KLTwvYm9vaz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9Eb2NCb29rL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIudG1wbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhN2MwN2EuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0RvY0Jvb2svd3JpdGluZy1hbi1hbHNhLWRyaXZlci50bXBsCisrKyAvZGV2L251bGwKQEAgLTEsNjIxMCArMCwwIEBACi08IURPQ1RZUEUgYm9vayBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRG9jQm9vayBWNC4xLy9FTiI+Ci0KLTxib29rPgotPD9kYmh0bWwgZmlsZW5hbWU9ImluZGV4Lmh0bWwiPgotCi08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLTwhLS0gSGVhZGVyICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Ym9va2luZm8+Ci0gICAgPHRpdGxlPldyaXRpbmcgYW4gQUxTQSBEcml2ZXI8L3RpdGxlPgotICAgIDxhdXRob3I+Ci0gICAgICA8Zmlyc3RuYW1lPlRha2FzaGk8L2ZpcnN0bmFtZT4KLSAgICAgIDxzdXJuYW1lPkl3YWk8L3N1cm5hbWU+Ci0gICAgICA8YWZmaWxpYXRpb24+Ci0gICAgICAgIDxhZGRyZXNzPgotICAgICAgICAgIDxlbWFpbD50aXdhaUBzdXNlLmRlPC9lbWFpbD4KLSAgICAgICAgPC9hZGRyZXNzPgotICAgICAgPC9hZmZpbGlhdGlvbj4KLSAgICAgPC9hdXRob3I+Ci0KLSAgICAgPGRhdGU+T2N0IDE1LCAyMDA3PC9kYXRlPgotICAgICA8ZWRpdGlvbj4wLjMuNzwvZWRpdGlvbj4KLQotICAgIDxhYnN0cmFjdD4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gd3JpdGUgYW4gQUxTQSAoQWR2YW5jZWQgTGludXgKLSAgICAgICAgU291bmQgQXJjaGl0ZWN0dXJlKSBkcml2ZXIuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9hYnN0cmFjdD4KLQotICAgIDxsZWdhbG5vdGljZT4KLSAgICA8cGFyYT4KLSAgICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSAgVGFrYXNoaSBJd2FpIDxlbWFpbD50aXdhaUBzdXNlLmRlPC9lbWFpbD4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICBUaGlzIGRvY3VtZW50IGlzIGZyZWU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgVGhpcyBkb2N1bWVudCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCA8ZW1waGFzaXM+V0lUSE9VVCBBTlkgV0FSUkFOVFk8L2VtcGhhc2lzPjsgd2l0aG91dCBldmVuIHRoZQotICAgIGltcGxpZWQgd2FycmFudHkgb2YgPGVtcGhhc2lzPk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0gICAgUEFSVElDVUxBUiBQVVJQT1NFPC9lbXBoYXNpcz4uIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBmb3IgbW9yZSBkZXRhaWxzLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKLSAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAotICAgIE1BIDAyMTExLTEzMDcgVVNBCi0gICAgPC9wYXJhPgotICAgIDwvbGVnYWxub3RpY2U+Ci0KLSAgPC9ib29raW5mbz4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIFByZWZhY2UgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxwcmVmYWNlIGlkPSJwcmVmYWNlIj4KLSAgICA8dGl0bGU+UHJlZmFjZTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyBob3cgdG8gd3JpdGUgYW4KLSAgICAgIDx1bGluayB1cmw9Imh0dHA6Ly93d3cuYWxzYS1wcm9qZWN0Lm9yZy8iPjxjaXRldGl0bGU+Ci0gICAgICBBTFNBIChBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUpPC9jaXRldGl0bGU+PC91bGluaz4KLSAgICAgIGRyaXZlci4gVGhlIGRvY3VtZW50IGZvY3VzZXMgbWFpbmx5IG9uIFBDSSBzb3VuZGNhcmRzLgotICAgICAgSW4gdGhlIGNhc2Ugb2Ygb3RoZXIgZGV2aWNlIHR5cGVzLCB0aGUgQVBJIG1pZ2h0Ci0gICAgICBiZSBkaWZmZXJlbnQsIHRvby4gSG93ZXZlciwgYXQgbGVhc3QgdGhlIEFMU0Ega2VybmVsIEFQSSBpcwotICAgICAgY29uc2lzdGVudCwgYW5kIHRoZXJlZm9yZSBpdCB3b3VsZCBiZSBzdGlsbCBhIGJpdCBoZWxwIGZvcgotICAgICAgd3JpdGluZyB0aGVtLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgIFRoaXMgZG9jdW1lbnQgdGFyZ2V0cyBwZW9wbGUgd2hvIGFscmVhZHkgaGF2ZSBlbm91Z2gKLSAgICBDIGxhbmd1YWdlIHNraWxscyBhbmQgaGF2ZSBiYXNpYyBsaW51eCBrZXJuZWwgcHJvZ3JhbW1pbmcKLSAgICBrbm93bGVkZ2UuICBUaGlzIGRvY3VtZW50IGRvZXNuJ3QgZXhwbGFpbiB0aGUgZ2VuZXJhbAotICAgIHRvcGljIG9mIGxpbnV4IGtlcm5lbCBjb2RpbmcgYW5kIGRvZXNuJ3QgY292ZXIgbG93LWxldmVsCi0gICAgZHJpdmVyIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEl0IG9ubHkgZGVzY3JpYmVzCi0gICAgdGhlIHN0YW5kYXJkIHdheSB0byB3cml0ZSBhIFBDSSBzb3VuZCBkcml2ZXIgb24gQUxTQS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIElmIHlvdSBhcmUgYWxyZWFkeSBmYW1pbGlhciB3aXRoIHRoZSBvbGRlciBBTFNBIHZlci4wLjUueCBBUEksIHlvdQotICAgIGNhbiBjaGVjayB0aGUgZHJpdmVycyBzdWNoIGFzIDxmaWxlbmFtZT5zb3VuZC9wY2kvZXMxOTM4LmM8L2ZpbGVuYW1lPiBvcgotICAgIDxmaWxlbmFtZT5zb3VuZC9wY2kvbWFlc3RybzMuYzwvZmlsZW5hbWU+IHdoaWNoIGhhdmUgYWxzbyBhbG1vc3QgdGhlIHNhbWUKLSAgICBjb2RlLWJhc2UgaW4gdGhlIEFMU0EgMC41LnggdHJlZSwgc28geW91IGNhbiBjb21wYXJlIHRoZSBkaWZmZXJlbmNlcy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFRoaXMgZG9jdW1lbnQgaXMgc3RpbGwgYSBkcmFmdCB2ZXJzaW9uLiBBbnkgZmVlZGJhY2sgYW5kCi0gICAgY29ycmVjdGlvbnMsIHBsZWFzZSEhCi0gICAgPC9wYXJhPgotICA8L3ByZWZhY2U+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIEZpbGUgVHJlZSBTdHJ1Y3R1cmUgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJmaWxlLXRyZWUiPgotICAgIDx0aXRsZT5GaWxlIFRyZWUgU3RydWN0dXJlPC90aXRsZT4KLQotICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtZ2VuZXJhbCI+Ci0gICAgICA8dGl0bGU+R2VuZXJhbDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIEFMU0EgZHJpdmVycyBhcmUgcHJvdmlkZWQgaW4gdHdvIHdheXMuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBPbmUgaXMgdGhlIHRyZWVzIHByb3ZpZGVkIGFzIGEgdGFyYmFsbCBvciB2aWEgY3ZzIGZyb20gdGhlCi0gICAgICBBTFNBJ3MgZnRwIHNpdGUsIGFuZCBhbm90aGVyIGlzIHRoZSAyLjYgKG9yIGxhdGVyKSBMaW51eCBrZXJuZWwKLSAgICAgIHRyZWUuIFRvIHN5bmNocm9uaXplIGJvdGgsIHRoZSBBTFNBIGRyaXZlciB0cmVlIGlzIHNwbGl0IGludG8KLSAgICAgIHR3byBkaWZmZXJlbnQgdHJlZXM6IGFsc2Eta2VybmVsIGFuZCBhbHNhLWRyaXZlci4gVGhlIGZvcm1lcgotICAgICAgY29udGFpbnMgcHVyZWx5IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpbnV4IDIuNiAob3IgbGF0ZXIpCi0gICAgICB0cmVlLiBUaGlzIHRyZWUgaXMgZGVzaWduZWQgb25seSBmb3IgY29tcGlsYXRpb24gb24gMi42IG9yCi0gICAgICBsYXRlciBlbnZpcm9ubWVudC4gVGhlIGxhdHRlciwgYWxzYS1kcml2ZXIsIGNvbnRhaW5zIG1hbnkgc3VidGxlCi0gICAgICBmaWxlcyBmb3IgY29tcGlsaW5nIEFMU0EgZHJpdmVycyBvdXRzaWRlIG9mIHRoZSBMaW51eCBrZXJuZWwgdHJlZSwKLSAgICAgIHdyYXBwZXIgZnVuY3Rpb25zIGZvciBvbGRlciAyLjIgYW5kIDIuNCBrZXJuZWxzLCB0byBhZGFwdCB0aGUgbGF0ZXN0IGtlcm5lbCBBUEksCi0gICAgICBhbmQgYWRkaXRpb25hbCBkcml2ZXJzIHdoaWNoIGFyZSBzdGlsbCBpbiBkZXZlbG9wbWVudCBvciBpbgotICAgICAgdGVzdHMuICBUaGUgZHJpdmVycyBpbiBhbHNhLWRyaXZlciB0cmVlIHdpbGwgYmUgbW92ZWQgdG8KLSAgICAgIGFsc2Eta2VybmVsIChhbmQgZXZlbnR1YWxseSB0byB0aGUgMi42IGtlcm5lbCB0cmVlKSB3aGVuIHRoZXkgYXJlCi0gICAgICBmaW5pc2hlZCBhbmQgY29uZmlybWVkIHRvIHdvcmsgZmluZS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBmaWxlIHRyZWUgc3RydWN0dXJlIG9mIEFMU0EgZHJpdmVyIGlzIGRlcGljdGVkIGJlbG93LiBCb3RoCi0gICAgICAgIGFsc2Eta2VybmVsIGFuZCBhbHNhLWRyaXZlciBoYXZlIGFsbW9zdCB0aGUgc2FtZSBmaWxlCi0gICAgICAgIHN0cnVjdHVyZSwgZXhjZXB0IGZvciA8cXVvdGU+Y29yZTwvcXVvdGU+IGRpcmVjdG9yeS4gSXQncwotICAgICAgICBuYW1lZCBhcyA8cXVvdGU+YWNvcmU8L3F1b3RlPiBpbiBhbHNhLWRyaXZlciB0cmVlLiAKLQotICAgICAgICA8ZXhhbXBsZT4KLSAgICAgICAgICA8dGl0bGU+QUxTQSBGaWxlIFRyZWUgU3RydWN0dXJlPC90aXRsZT4KLSAgICAgICAgICA8bGl0ZXJhbGxheW91dD4KLSAgICAgICAgc291bmQKLSAgICAgICAgICAgICAgICAvY29yZQotICAgICAgICAgICAgICAgICAgICAgICAgL29zcwotICAgICAgICAgICAgICAgICAgICAgICAgL3NlcQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvb3NzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9pbnN0cgotICAgICAgICAgICAgICAgIC9pb2N0bDMyCi0gICAgICAgICAgICAgICAgL2luY2x1ZGUKLSAgICAgICAgICAgICAgICAvZHJpdmVycwotICAgICAgICAgICAgICAgICAgICAgICAgL21wdTQwMQotICAgICAgICAgICAgICAgICAgICAgICAgL29wbDMKLSAgICAgICAgICAgICAgICAvaTJjCi0gICAgICAgICAgICAgICAgICAgICAgICAvbDMKLSAgICAgICAgICAgICAgICAvc3ludGgKLSAgICAgICAgICAgICAgICAgICAgICAgIC9lbXV4Ci0gICAgICAgICAgICAgICAgL3BjaQotICAgICAgICAgICAgICAgICAgICAgICAgLyhjYXJkcykKLSAgICAgICAgICAgICAgICAvaXNhCi0gICAgICAgICAgICAgICAgICAgICAgICAvKGNhcmRzKQotICAgICAgICAgICAgICAgIC9hcm0KLSAgICAgICAgICAgICAgICAvcHBjCi0gICAgICAgICAgICAgICAgL3NwYXJjCi0gICAgICAgICAgICAgICAgL3VzYgotICAgICAgICAgICAgICAgIC9wY21jaWEgLyhjYXJkcykKLSAgICAgICAgICAgICAgICAvb3NzCi0gICAgICAgICAgPC9saXRlcmFsbGF5b3V0PgotICAgICAgICA8L2V4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeSI+Ci0gICAgICA8dGl0bGU+Y29yZSBkaXJlY3Rvcnk8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBtaWRkbGUgbGF5ZXIgd2hpY2ggaXMgdGhlIGhlYXJ0Ci0gICAgICBvZiBBTFNBIGRyaXZlcnMuIEluIHRoaXMgZGlyZWN0b3J5LCB0aGUgbmF0aXZlIEFMU0EgbW9kdWxlcyBhcmUKLSAgICAgIHN0b3JlZC4gVGhlIHN1Yi1kaXJlY3RvcmllcyBjb250YWluIGRpZmZlcmVudCBtb2R1bGVzIGFuZCBhcmUKLSAgICAgIGRlcGVuZGVudCB1cG9uIHRoZSBrZXJuZWwgY29uZmlnLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1vc3MiPgotICAgICAgICA8dGl0bGU+Y29yZS9vc3M8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBjb2RlcyBmb3IgUENNIGFuZCBtaXhlciBPU1MgZW11bGF0aW9uIG1vZHVsZXMgYXJlIHN0b3JlZAotICAgICAgICBpbiB0aGlzIGRpcmVjdG9yeS4gVGhlIHJhd21pZGkgT1NTIGVtdWxhdGlvbiBpcyBpbmNsdWRlZCBpbgotICAgICAgICB0aGUgQUxTQSByYXdtaWRpIGNvZGUgc2luY2UgaXQncyBxdWl0ZSBzbWFsbC4gVGhlIHNlcXVlbmNlcgotICAgICAgICBjb2RlIGlzIHN0b3JlZCBpbiA8ZmlsZW5hbWU+Y29yZS9zZXEvb3NzPC9maWxlbmFtZT4gZGlyZWN0b3J5IChzZWUKLSAgICAgICAgPGxpbmsgbGlua2VuZD0iZmlsZS10cmVlLWNvcmUtZGlyZWN0b3J5LXNlcS1vc3MiPjxjaXRldGl0bGU+Ci0gICAgICAgIGJlbG93PC9jaXRldGl0bGU+PC9saW5rPikuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1pb2N0bDMyIj4KLSAgICAgICAgPHRpdGxlPmNvcmUvaW9jdGwzMjwvdGl0bGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIDMyYml0LWlvY3RsIHdyYXBwZXJzIGZvciA2NGJpdAotICAgICAgICBhcmNoaXRlY3R1cmVzIHN1Y2ggbGlrZSB4ODYtNjQsIHBwYzY0IGFuZCBzcGFyYzY0LiBGb3IgMzJiaXQKLSAgICAgICAgYW5kIGFscGhhIGFyY2hpdGVjdHVyZXMsIHRoZXNlIGFyZSBub3QgY29tcGlsZWQuIAotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3Rvcnktc2VxIj4KLSAgICAgICAgPHRpdGxlPmNvcmUvc2VxPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBkaXJlY3RvcnkgYW5kIGl0cyBzdWItZGlyZWN0b3JpZXMgYXJlIGZvciB0aGUgQUxTQQotICAgICAgICBzZXF1ZW5jZXIuIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSBzZXF1ZW5jZXIgY29yZSBhbmQKLSAgICAgICAgcHJpbWFyeSBzZXF1ZW5jZXIgbW9kdWxlcyBzdWNoIGxpa2Ugc25kLXNlcS1taWRpLAotICAgICAgICBzbmQtc2VxLXZpcm1pZGksIGV0Yy4gVGhleSBhcmUgY29tcGlsZWQgb25seSB3aGVuCi0gICAgICAgIDxjb25zdGFudD5DT05GSUdfU05EX1NFUVVFTkNFUjwvY29uc3RhbnQ+IGlzIHNldCBpbiB0aGUga2VybmVsCi0gICAgICAgIGNvbmZpZy4gCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1jb3JlLWRpcmVjdG9yeS1zZXEtb3NzIj4KLSAgICAgICAgPHRpdGxlPmNvcmUvc2VxL29zczwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgY29udGFpbnMgdGhlIE9TUyBzZXF1ZW5jZXIgZW11bGF0aW9uIGNvZGVzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtY29yZS1kaXJlY3RvcnktZGVxLWluc3RyIj4KLSAgICAgICAgPHRpdGxlPmNvcmUvc2VxL2luc3RyPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIG1vZHVsZXMgZm9yIHRoZSBzZXF1ZW5jZXIKLSAgICAgICAgaW5zdHJ1bWVudCBsYXllci4gCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWluY2x1ZGUtZGlyZWN0b3J5Ij4KLSAgICAgIDx0aXRsZT5pbmNsdWRlIGRpcmVjdG9yeTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBpcyB0aGUgcGxhY2UgZm9yIHRoZSBwdWJsaWMgaGVhZGVyIGZpbGVzIG9mIEFMU0EgZHJpdmVycywKLSAgICAgIHdoaWNoIGFyZSB0byBiZSBleHBvcnRlZCB0byB1c2VyLXNwYWNlLCBvciBpbmNsdWRlZCBieQotICAgICAgc2V2ZXJhbCBmaWxlcyBhdCBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuIEJhc2ljYWxseSwgdGhlIHByaXZhdGUKLSAgICAgIGhlYWRlciBmaWxlcyBzaG91bGQgbm90IGJlIHBsYWNlZCBpbiB0aGlzIGRpcmVjdG9yeSwgYnV0IHlvdSBtYXkKLSAgICAgIHN0aWxsIGZpbmQgZmlsZXMgdGhlcmUsIGR1ZSB0byBoaXN0b3JpY2FsIHJlYXNvbnMgOikgCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1kcml2ZXJzLWRpcmVjdG9yeSI+Ci0gICAgICA8dGl0bGU+ZHJpdmVycyBkaXJlY3Rvcnk8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGNvZGUgc2hhcmVkIGFtb25nIGRpZmZlcmVudCBkcml2ZXJzCi0gICAgICBvbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcy4gIFRoZXkgYXJlIGhlbmNlIHN1cHBvc2VkIG5vdCB0byBiZQotICAgICAgYXJjaGl0ZWN0dXJlLXNwZWNpZmljLgotICAgICAgRm9yIGV4YW1wbGUsIHRoZSBkdW1teSBwY20gZHJpdmVyIGFuZCB0aGUgc2VyaWFsIE1JREkKLSAgICAgIGRyaXZlciBhcmUgZm91bmQgaW4gdGhpcyBkaXJlY3RvcnkuIEluIHRoZSBzdWItZGlyZWN0b3JpZXMsCi0gICAgICB0aGVyZSBpcyBjb2RlIGZvciBjb21wb25lbnRzIHdoaWNoIGFyZSBpbmRlcGVuZGVudCBmcm9tCi0gICAgICBidXMgYW5kIGNwdSBhcmNoaXRlY3R1cmVzLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1kcml2ZXJzLWRpcmVjdG9yeS1tcHU0MDEiPgotICAgICAgICA8dGl0bGU+ZHJpdmVycy9tcHU0MDE8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgTVBVNDAxIGFuZCBNUFU0MDEtVUFSVCBtb2R1bGVzIGFyZSBzdG9yZWQgaGVyZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWRyaXZlcnMtZGlyZWN0b3J5LW9wbDMiPgotICAgICAgICA8dGl0bGU+ZHJpdmVycy9vcGwzIGFuZCBvcGw0PC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIE9QTDMgYW5kIE9QTDQgRk0tc3ludGggc3R1ZmYgaXMgZm91bmQgaGVyZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtaTJjLWRpcmVjdG9yeSI+Ci0gICAgICA8dGl0bGU+aTJjIGRpcmVjdG9yeTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBjb250YWlucyB0aGUgQUxTQSBpMmMgY29tcG9uZW50cy4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFsdGhvdWdoIHRoZXJlIGlzIGEgc3RhbmRhcmQgaTJjIGxheWVyIG9uIExpbnV4LCBBTFNBIGhhcyBpdHMKLSAgICAgIG93biBpMmMgY29kZSBmb3Igc29tZSBjYXJkcywgYmVjYXVzZSB0aGUgc291bmRjYXJkIG5lZWRzIG9ubHkgYQotICAgICAgc2ltcGxlIG9wZXJhdGlvbiBhbmQgdGhlIHN0YW5kYXJkIGkyYyBBUEkgaXMgdG9vIGNvbXBsaWNhdGVkIGZvcgotICAgICAgc3VjaCBhIHB1cnBvc2UuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWkyYy1kaXJlY3RvcnktbDMiPgotICAgICAgICA8dGl0bGU+aTJjL2wzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBpcyBhIHN1Yi1kaXJlY3RvcnkgZm9yIEFSTSBMMyBpMmMuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLXN5bnRoLWRpcmVjdG9yeSI+Ci0gICAgICAgIDx0aXRsZT5zeW50aCBkaXJlY3Rvcnk8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGlzIGNvbnRhaW5zIHRoZSBzeW50aCBtaWRkbGUtbGV2ZWwgbW9kdWxlcy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFNvIGZhciwgdGhlcmUgaXMgb25seSBFbXU4MDAwL0VtdTEwazEgc3ludGggZHJpdmVyIHVuZGVyCi0gICAgICAgIHRoZSA8ZmlsZW5hbWU+c3ludGgvZW11eDwvZmlsZW5hbWU+IHN1Yi1kaXJlY3RvcnkuIAotICAgICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1wY2ktZGlyZWN0b3J5Ij4KLSAgICAgIDx0aXRsZT5wY2kgZGlyZWN0b3J5PC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIGRpcmVjdG9yeSBhbmQgaXRzIHN1Yi1kaXJlY3RvcmllcyBob2xkIHRoZSB0b3AtbGV2ZWwgY2FyZCBtb2R1bGVzCi0gICAgICBmb3IgUENJIHNvdW5kY2FyZHMgYW5kIHRoZSBjb2RlIHNwZWNpZmljIHRvIHRoZSBQQ0kgQlVTLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGRyaXZlcnMgY29tcGlsZWQgZnJvbSBhIHNpbmdsZSBmaWxlIGFyZSBzdG9yZWQgZGlyZWN0bHkKLSAgICAgIGluIHRoZSBwY2kgZGlyZWN0b3J5LCB3aGlsZSB0aGUgZHJpdmVycyB3aXRoIHNldmVyYWwgc291cmNlIGZpbGVzIGFyZQotICAgICAgc3RvcmVkIG9uIHRoZWlyIG93biBzdWItZGlyZWN0b3J5IChlLmcuIGVtdTEwazEsIGljZTE3MTIpLiAKLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLWlzYS1kaXJlY3RvcnkiPgotICAgICAgPHRpdGxlPmlzYSBkaXJlY3Rvcnk8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgZGlyZWN0b3J5IGFuZCBpdHMgc3ViLWRpcmVjdG9yaWVzIGhvbGQgdGhlIHRvcC1sZXZlbCBjYXJkIG1vZHVsZXMKLSAgICAgIGZvciBJU0Egc291bmRjYXJkcy4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1hcm0tcHBjLXNwYXJjLWRpcmVjdG9yaWVzIj4KLSAgICAgIDx0aXRsZT5hcm0sIHBwYywgYW5kIHNwYXJjIGRpcmVjdG9yaWVzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGV5IGFyZSB1c2VkIGZvciB0b3AtbGV2ZWwgY2FyZCBtb2R1bGVzIHdoaWNoIGFyZQotICAgICAgc3BlY2lmaWMgdG8gb25lIG9mIHRoZXNlIGFyY2hpdGVjdHVyZXMuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJmaWxlLXRyZWUtdXNiLWRpcmVjdG9yeSI+Ci0gICAgICA8dGl0bGU+dXNiIGRpcmVjdG9yeTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdGhlIFVTQi1hdWRpbyBkcml2ZXIuIEluIHRoZSBsYXRlc3QgdmVyc2lvbiwgdGhlCi0gICAgICBVU0IgTUlESSBkcml2ZXIgaXMgaW50ZWdyYXRlZCBpbiB0aGUgdXNiLWF1ZGlvIGRyaXZlci4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImZpbGUtdHJlZS1wY21jaWEtZGlyZWN0b3J5Ij4KLSAgICAgIDx0aXRsZT5wY21jaWEgZGlyZWN0b3J5PC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgUENNQ0lBLCBlc3BlY2lhbGx5IFBDQ2FyZCBkcml2ZXJzIHdpbGwgZ28gaGVyZS4gQ2FyZEJ1cwotICAgICAgZHJpdmVycyB3aWxsIGJlIGluIHRoZSBwY2kgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZWlyIEFQSSBpcyBpZGVudGljYWwKLSAgICAgIHRvIHRoYXQgb2Ygc3RhbmRhcmQgUENJIGNhcmRzLiAKLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iZmlsZS10cmVlLW9zcy1kaXJlY3RvcnkiPgotICAgICAgPHRpdGxlPm9zcyBkaXJlY3Rvcnk8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBPU1MvTGl0ZSBzb3VyY2UgZmlsZXMgYXJlIHN0b3JlZCBoZXJlIGluIExpbnV4IDIuNiAob3IKLSAgICAgIGxhdGVyKSB0cmVlLiBJbiB0aGUgQUxTQSBkcml2ZXIgdGFyYmFsbCwgdGhpcyBkaXJlY3RvcnkgaXMgZW1wdHksCi0gICAgICBvZiBjb3Vyc2UgOikgCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIEJhc2ljIEZsb3cgZm9yIFBDSSBEcml2ZXJzICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Y2hhcHRlciBpZD0iYmFzaWMtZmxvdyI+Ci0gICAgPHRpdGxlPkJhc2ljIEZsb3cgZm9yIFBDSSBEcml2ZXJzPC90aXRsZT4KLQotICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LW91dGxpbmUiPgotICAgICAgPHRpdGxlPk91dGxpbmU8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBtaW5pbXVtIGZsb3cgZm9yIFBDSSBzb3VuZGNhcmRzIGlzIGFzIGZvbGxvd3M6Ci0KLSAgICAgICAgPGl0ZW1pemVkbGlzdD4KLSAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+ZGVmaW5lIHRoZSBQQ0kgSUQgdGFibGUgKHNlZSB0aGUgc2VjdGlvbgotICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBjaS1yZXNvdXJjZS1lbnRyaWVzIj48Y2l0ZXRpdGxlPlBDSSBFbnRyaWVzCi0gICAgICAgICAgPC9jaXRldGl0bGU+PC9saW5rPikuPC9wYXJhPjwvbGlzdGl0ZW0+IAotICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5jcmVhdGUgPGZ1bmN0aW9uPnByb2JlKCk8L2Z1bmN0aW9uPiBjYWxsYmFjay48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIDxmdW5jdGlvbj5yZW1vdmUoKTwvZnVuY3Rpb24+IGNhbGxiYWNrLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5jcmVhdGUgYSA8c3RydWN0bmFtZT5wY2lfZHJpdmVyPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUKLQkgIGNvbnRhaW5pbmcgdGhlIHRocmVlIHBvaW50ZXJzIGFib3ZlLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICAgIDxsaXN0aXRlbT48cGFyYT5jcmVhdGUgYW4gPGZ1bmN0aW9uPmluaXQoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uIGp1c3QgY2FsbGluZwotCSAgdGhlIDxmdW5jdGlvbj5wY2lfcmVnaXN0ZXJfZHJpdmVyKCk8L2Z1bmN0aW9uPiB0byByZWdpc3RlciB0aGUgcGNpX2RyaXZlciB0YWJsZQotCSAgZGVmaW5lZCBhYm92ZS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Y3JlYXRlIGFuIDxmdW5jdGlvbj5leGl0KCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiB0byBjYWxsCi0JICB0aGUgPGZ1bmN0aW9uPnBjaV91bnJlZ2lzdGVyX2RyaXZlcigpPC9mdW5jdGlvbj4gZnVuY3Rpb24uPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgICAgIDwvaXRlbWl6ZWRsaXN0PgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWV4YW1wbGUiPgotICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgY29kZSBleGFtcGxlIGlzIHNob3duIGJlbG93LiBTb21lIHBhcnRzIGFyZSBrZXB0Ci0gICAgICB1bmltcGxlbWVudGVkIGF0IHRoaXMgbW9tZW50IGJ1dCB3aWxsIGJlIGZpbGxlZCBpbiB0aGUKLSAgICAgIG5leHQgc2VjdGlvbnMuIFRoZSBudW1iZXJzIGluIHRoZSBjb21tZW50IGxpbmVzIG9mIHRoZQotICAgICAgPGZ1bmN0aW9uPnNuZF9teWNoaXBfcHJvYmUoKTwvZnVuY3Rpb24+IGZ1bmN0aW9uCi0gICAgICByZWZlciB0byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uIAotCi0gICAgICAgIDxleGFtcGxlPgotICAgICAgICAgIDx0aXRsZT5CYXNpYyBGbG93IGZvciBQQ0kgRHJpdmVycyAtIEV4YW1wbGU8L3RpdGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotICAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0gICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0gICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0gICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0KLSAgLyogbW9kdWxlIHBhcmFtZXRlcnMgKHNlZSAiTW9kdWxlIFBhcmFtZXRlcnMiKSAqLwotICAvKiBTTkRSVl9DQVJEUzogbWF4aW11bSBudW1iZXIgb2YgY2FyZHMgc3VwcG9ydGVkIGJ5IHRoaXMgbW9kdWxlICovCi0gIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7Ci0gIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKLSAgc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOwotCi0gIC8qIGRlZmluaXRpb24gb2YgdGhlIGNoaXAtc3BlY2lmaWMgcmVjb3JkICovCi0gIHN0cnVjdCBteWNoaXAgewotICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLSAgICAgICAgICAvKiB0aGUgcmVzdCBvZiB0aGUgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBpbiBzZWN0aW9uCi0gICAgICAgICAgICogIlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50IgotICAgICAgICAgICAqLwotICB9OwotCi0gIC8qIGNoaXAtc3BlY2lmaWMgZGVzdHJ1Y3RvcgotICAgKiAoc2VlICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCIpCi0gICAqLwotICBzdGF0aWMgaW50IHNuZF9teWNoaXBfZnJlZShzdHJ1Y3QgbXljaGlwICpjaGlwKQotICB7Ci0gICAgICAgICAgLi4uLiAvKiB3aWxsIGJlIGltcGxlbWVudGVkIGxhdGVyLi4uICovCi0gIH0KLQotICAvKiBjb21wb25lbnQtZGVzdHJ1Y3RvcgotICAgKiAoc2VlICJNYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzIikKLSAgICovCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQotICB7Ci0gICAgICAgICAgcmV0dXJuIHNuZF9teWNoaXBfZnJlZShkZXZpY2UtPmRldmljZV9kYXRhKTsKLSAgfQotCi0gIC8qIGNoaXAtc3BlY2lmaWMgY29uc3RydWN0b3IKLSAgICogKHNlZSAiTWFuYWdlbWVudCBvZiBDYXJkcyBhbmQgQ29tcG9uZW50cyIpCi0gICAqLwotICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwY2lfZGV2ICpwY2ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBteWNoaXAgKipyY2hpcCkKLSAgewotICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXA7Ci0gICAgICAgICAgaW50IGVycjsKLSAgICAgICAgICBzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIG9wcyA9IHsKLSAgICAgICAgICAgICAgICAgLmRldl9mcmVlID0gc25kX215Y2hpcF9kZXZfZnJlZSwKLSAgICAgICAgICB9OwotCi0gICAgICAgICAgKnJjaGlwID0gTlVMTDsKLQotICAgICAgICAgIC8qIGNoZWNrIFBDSSBhdmFpbGFiaWxpdHkgaGVyZQotICAgICAgICAgICAqIChzZWUgIlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50IikKLSAgICAgICAgICAgKi8KLSAgICAgICAgICAuLi4uCi0KLSAgICAgICAgICAvKiBhbGxvY2F0ZSBhIGNoaXAtc3BlY2lmaWMgZGF0YSB3aXRoIHplcm8gZmlsbGVkICovCi0gICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotCi0gICAgICAgICAgY2hpcC0+Y2FyZCA9IGNhcmQ7Ci0KLSAgICAgICAgICAvKiByZXN0IG9mIGluaXRpYWxpemF0aW9uIGhlcmU7IHdpbGwgYmUgaW1wbGVtZW50ZWQKLSAgICAgICAgICAgKiBsYXRlciwgc2VlICJQQ0kgUmVzb3VyY2UgTWFuYWdlbWVudCIKLSAgICAgICAgICAgKi8KLSAgICAgICAgICAuLi4uCi0KLSAgICAgICAgICBlcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGNoaXAsICZvcHMpOwotICAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICBzbmRfbXljaGlwX2ZyZWUoY2hpcCk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgIH0KLQotICAgICAgICAgIHNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKLQotICAgICAgICAgICpyY2hpcCA9IGNoaXA7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvKiBjb25zdHJ1Y3RvciAtLSBzZWUgIkNvbnN0cnVjdG9yIiBzdWItc2VjdGlvbiAqLwotICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKLSAgewotICAgICAgICAgIHN0YXRpYyBpbnQgZGV2OwotICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwOwotICAgICAgICAgIGludCBlcnI7Ci0KLSAgICAgICAgICAvKiAoMSkgKi8KLSAgICAgICAgICBpZiAoZGV2ID49IFNORFJWX0NBUkRTKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgICAgaWYgKCFlbmFibGVbZGV2XSkgewotICAgICAgICAgICAgICAgICAgZGV2Kys7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0VOVDsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvKiAoMikgKi8KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLSAgICAgICAgICBpZiAoY2FyZCA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07Ci0KLSAgICAgICAgICAvKiAoMykgKi8KLSAgICAgICAgICBlcnIgPSBzbmRfbXljaGlwX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKTsKLSAgICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgICAgICAgc25kX2NhcmRfZnJlZShjYXJkKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgLyogKDQpICovCi0gICAgICAgICAgc3RyY3B5KGNhcmQtPmRyaXZlciwgIk15IENoaXAiKTsKLSAgICAgICAgICBzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiTXkgT3duIENoaXAgMTIzIik7Ci0gICAgICAgICAgc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4IGlycSAlaSIsCi0gICAgICAgICAgICAgICAgICBjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPmlvcG9ydCwgY2hpcC0+aXJxKTsKLQotICAgICAgICAgIC8qICg1KSAqLwotICAgICAgICAgIC4uLi4gLyogaW1wbGVtZW50ZWQgbGF0ZXIgKi8KLQotICAgICAgICAgIC8qICg2KSAqLwotICAgICAgICAgIGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpOwotICAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvKiAoNykgKi8KLSAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBjYXJkKTsKLSAgICAgICAgICBkZXYrKzsKLSAgICAgICAgICByZXR1cm4gMDsKLSAgfQotCi0gIC8qIGRlc3RydWN0b3IgLS0gc2VlIHRoZSAiRGVzdHJ1Y3RvciIgc3ViLXNlY3Rpb24gKi8KLSAgc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9teWNoaXBfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpCi0gIHsKLSAgICAgICAgICBzbmRfY2FyZF9mcmVlKHBjaV9nZXRfZHJ2ZGF0YShwY2kpKTsKLSAgICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBOVUxMKTsKLSAgfQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9leGFtcGxlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yIj4KLSAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHJlYWwgY29uc3RydWN0b3Igb2YgUENJIGRyaXZlcnMgaXMgdGhlIDxmdW5jdGlvbj5wcm9iZTwvZnVuY3Rpb24+IGNhbGxiYWNrLgotICAgICAgVGhlIDxmdW5jdGlvbj5wcm9iZTwvZnVuY3Rpb24+IGNhbGxiYWNrIGFuZCBvdGhlciBjb21wb25lbnQtY29uc3RydWN0b3JzIHdoaWNoIGFyZSBjYWxsZWQKLSAgICAgIGZyb20gdGhlIDxmdW5jdGlvbj5wcm9iZTwvZnVuY3Rpb24+IGNhbGxiYWNrIHNob3VsZCBiZSBkZWZpbmVkIHdpdGgKLSAgICAgIHRoZSA8cGFyYW1ldGVyPl9fZGV2aW5pdDwvcGFyYW1ldGVyPiBwcmVmaXguIFlvdSAKLSAgICAgIGNhbm5vdCB1c2UgdGhlIDxwYXJhbWV0ZXI+X19pbml0PC9wYXJhbWV0ZXI+IHByZWZpeCBmb3IgdGhlbSwKLSAgICAgIGJlY2F1c2UgYW55IFBDSSBkZXZpY2UgY291bGQgYmUgYSBob3RwbHVnIGRldmljZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiB0aGUgPGZ1bmN0aW9uPnByb2JlPC9mdW5jdGlvbj4gY2FsbGJhY2ssIHRoZSBmb2xsb3dpbmcgc2NoZW1lIGlzIG9mdGVuIHVzZWQuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLWRldmljZS1pbmRleCI+Ci0gICAgICAgIDx0aXRsZT4xKSBDaGVjayBhbmQgaW5jcmVtZW50IHRoZSBkZXZpY2UgaW5kZXguPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IGRldjsKLSAgLi4uLgotICBpZiAoZGV2ID49IFNORFJWX0NBUkRTKQotICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICBpZiAoIWVuYWJsZVtkZXZdKSB7Ci0gICAgICAgICAgZGV2Kys7Ci0gICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICB3aGVyZSBlbmFibGVbZGV2XSBpcyB0aGUgbW9kdWxlIG9wdGlvbi4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEVhY2ggdGltZSB0aGUgPGZ1bmN0aW9uPnByb2JlPC9mdW5jdGlvbj4gY2FsbGJhY2sgaXMgY2FsbGVkLCBjaGVjayB0aGUKLSAgICAgICAgYXZhaWxhYmlsaXR5IG9mIHRoZSBkZXZpY2UuIElmIG5vdCBhdmFpbGFibGUsIHNpbXBseSBpbmNyZW1lbnQKLSAgICAgICAgdGhlIGRldmljZSBpbmRleCBhbmQgcmV0dXJucy4gZGV2IHdpbGwgYmUgaW5jcmVtZW50ZWQgYWxzbwotICAgICAgICBsYXRlciAoPGxpbmsKLSAgICAgICAgbGlua2VuZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1zZXQtcGNpIj48Y2l0ZXRpdGxlPnN0ZXAKLSAgICAgICAgNzwvY2l0ZXRpdGxlPjwvbGluaz4pLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1jcmVhdGUtY2FyZCI+Ci0gICAgICAgIDx0aXRsZT4yKSBDcmVhdGUgYSBjYXJkIGluc3RhbmNlPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0gIC4uLi4KLSAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgZGV0YWlscyB3aWxsIGJlIGV4cGxhaW5lZCBpbiB0aGUgc2VjdGlvbgotICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9ImNhcmQtbWFuYWdlbWVudC1jYXJkLWluc3RhbmNlIj48Y2l0ZXRpdGxlPgotICAgICAgICAgIE1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHM8L2NpdGV0aXRsZT48L2xpbms+LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLWNyZWF0ZS1tYWluIj4KLSAgICAgICAgPHRpdGxlPjMpIENyZWF0ZSBhIG1haW4gY29tcG9uZW50PC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSW4gdGhpcyBwYXJ0LCB0aGUgUENJIHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLgotCi0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3QgbXljaGlwICpjaGlwOwotICAuLi4uCi0gIGVyciA9IHNuZF9teWNoaXBfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApOwotICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgIHNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0gICAgICAgICAgcmV0dXJuIGVycjsKLSAgfQotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgICAgVGhlIGRldGFpbHMgd2lsbCBiZSBleHBsYWluZWQgaW4gdGhlIHNlY3Rpb24gPGxpbmsKLSAgICAgICAgbGlua2VuZD0icGNpLXJlc291cmNlIj48Y2l0ZXRpdGxlPlBDSSBSZXNvdXJjZQotICAgICAgICBNYW5hZ2VtZW50PC9jaXRldGl0bGU+PC9saW5rPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1tYWluLWNvbXBvbmVudCI+Ci0gICAgICAgIDx0aXRsZT40KSBTZXQgdGhlIGRyaXZlciBJRCBhbmQgbmFtZSBzdHJpbmdzLjwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RyY3B5KGNhcmQtPmRyaXZlciwgIk15IENoaXAiKTsKLSAgc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIk15IE93biBDaGlwIDEyMyIpOwotICBzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHggaXJxICVpIiwKLSAgICAgICAgICBjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPmlvcG9ydCwgY2hpcC0+aXJxKTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICAgIFRoZSBkcml2ZXIgZmllbGQgaG9sZHMgdGhlIG1pbmltYWwgSUQgc3RyaW5nIG9mIHRoZQotICAgICAgICBjaGlwLiBUaGlzIGlzIHVzZWQgYnkgYWxzYS1saWIncyBjb25maWd1cmF0b3IsIHNvIGtlZXAgaXQKLSAgICAgICAgc2ltcGxlIGJ1dCB1bmlxdWUuIAotICAgICAgICAgIEV2ZW4gdGhlIHNhbWUgZHJpdmVyIGNhbiBoYXZlIGRpZmZlcmVudCBkcml2ZXIgSURzIHRvCi0gICAgICAgIGRpc3Rpbmd1aXNoIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGVhY2ggY2hpcCB0eXBlLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBzaG9ydG5hbWUgZmllbGQgaXMgYSBzdHJpbmcgc2hvd24gYXMgbW9yZSB2ZXJib3NlCi0gICAgICAgIG5hbWUuIFRoZSBsb25nbmFtZSBmaWVsZCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24KLSAgICAgICAgc2hvd24gaW4gPGZpbGVuYW1lPi9wcm9jL2Fzb3VuZC9jYXJkczwvZmlsZW5hbWU+LiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iYmFzaWMtZmxvdy1jb25zdHJ1Y3Rvci1jcmVhdGUtb3RoZXIiPgotICAgICAgICA8dGl0bGU+NSkgQ3JlYXRlIG90aGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgbWl4ZXIsIE1JREksIGV0Yy48L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBIZXJlIHlvdSBkZWZpbmUgdGhlIGJhc2ljIGNvbXBvbmVudHMgc3VjaCBhcwotICAgICAgICAgIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UiPjxjaXRldGl0bGU+UENNPC9jaXRldGl0bGU+PC9saW5rPiwKLSAgICAgICAgICBtaXhlciAoZS5nLiA8bGluayBsaW5rZW5kPSJhcGktYWM5NyI+PGNpdGV0aXRsZT5BQzk3PC9jaXRldGl0bGU+PC9saW5rPiksCi0gICAgICAgICAgTUlESSAoZS5nLiA8bGluayBsaW5rZW5kPSJtaWRpLWludGVyZmFjZSI+PGNpdGV0aXRsZT5NUFUtNDAxPC9jaXRldGl0bGU+PC9saW5rPiksCi0gICAgICAgICAgYW5kIG90aGVyIGludGVyZmFjZXMuCi0gICAgICAgICAgQWxzbywgaWYgeW91IHdhbnQgYSA8bGluayBsaW5rZW5kPSJwcm9jLWludGVyZmFjZSI+PGNpdGV0aXRsZT5wcm9jCi0gICAgICAgIGZpbGU8L2NpdGV0aXRsZT48L2xpbms+LCBkZWZpbmUgaXQgaGVyZSwgdG9vLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWNvbnN0cnVjdG9yLXJlZ2lzdGVyLWNhcmQiPgotICAgICAgICA8dGl0bGU+NikgUmVnaXN0ZXIgdGhlIGNhcmQgaW5zdGFuY2UuPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKLSAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICBzbmRfY2FyZF9mcmVlKGNhcmQpOwotICAgICAgICAgIHJldHVybiBlcnI7Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBzZWN0aW9uIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9ImNhcmQtbWFuYWdlbWVudC1yZWdpc3RyYXRpb24iPjxjaXRldGl0bGU+TWFuYWdlbWVudAotICAgICAgICBvZiBDYXJkcyBhbmQgQ29tcG9uZW50czwvY2l0ZXRpdGxlPjwvbGluaz4sIHRvby4gCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImJhc2ljLWZsb3ctY29uc3RydWN0b3Itc2V0LXBjaSI+Ci0gICAgICAgIDx0aXRsZT43KSBTZXQgdGhlIFBDSSBkcml2ZXIgZGF0YSBhbmQgcmV0dXJuIHplcm8uPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICAgICAgICBwY2lfc2V0X2RydmRhdGEocGNpLCBjYXJkKTsKLSAgICAgICAgZGV2Kys7Ci0gICAgICAgIHJldHVybiAwOwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgICAgSW4gdGhlIGFib3ZlLCB0aGUgY2FyZCByZWNvcmQgaXMgc3RvcmVkLiBUaGlzIHBvaW50ZXIgaXMKLSAgICAgICAgdXNlZCBpbiB0aGUgcmVtb3ZlIGNhbGxiYWNrIGFuZCBwb3dlci1tYW5hZ2VtZW50Ci0gICAgICAgIGNhbGxiYWNrcywgdG9vLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWRlc3RydWN0b3IiPgotICAgICAgPHRpdGxlPkRlc3RydWN0b3I8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBkZXN0cnVjdG9yLCByZW1vdmUgY2FsbGJhY2ssIHNpbXBseSByZWxlYXNlcyB0aGUgY2FyZAotICAgICAgaW5zdGFuY2UuIFRoZW4gdGhlIEFMU0EgbWlkZGxlIGxheWVyIHdpbGwgcmVsZWFzZSBhbGwgdGhlCi0gICAgICBhdHRhY2hlZCBjb21wb25lbnRzIGF1dG9tYXRpY2FsbHkuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSXQgd291bGQgYmUgdHlwaWNhbGx5IGxpa2UgdGhlIGZvbGxvd2luZzoKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX215Y2hpcF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSkKLSAgewotICAgICAgICAgIHNuZF9jYXJkX2ZyZWUocGNpX2dldF9kcnZkYXRhKHBjaSkpOwotICAgICAgICAgIHBjaV9zZXRfZHJ2ZGF0YShwY2ksIE5VTEwpOwotICB9Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICBUaGUgYWJvdmUgY29kZSBhc3N1bWVzIHRoYXQgdGhlIGNhcmQgcG9pbnRlciBpcyBzZXQgdG8gdGhlIFBDSQotCWRyaXZlciBkYXRhLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJiYXNpYy1mbG93LWhlYWRlci1maWxlcyI+Ci0gICAgICA8dGl0bGU+SGVhZGVyIEZpbGVzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBGb3IgdGhlIGFib3ZlIGV4YW1wbGUsIGF0IGxlYXN0IHRoZSBmb2xsb3dpbmcgaW5jbHVkZSBmaWxlcwotICAgICAgYXJlIG5lY2Vzc2FyeS4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSAgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotICAjaW5jbHVkZSA8c291bmQvY29yZS5oPgotICAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLQl3aGVyZSB0aGUgbGFzdCBvbmUgaXMgbmVjZXNzYXJ5IG9ubHkgd2hlbiBtb2R1bGUgb3B0aW9ucyBhcmUKLSAgICAgIGRlZmluZWQgaW4gdGhlIHNvdXJjZSBmaWxlLiAgSWYgdGhlIGNvZGUgaXMgc3BsaXQgaW50byBzZXZlcmFsCi0gICAgICBmaWxlcywgdGhlIGZpbGVzIHdpdGhvdXQgbW9kdWxlIG9wdGlvbnMgZG9uJ3QgbmVlZCB0aGVtLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gYWRkaXRpb24gdG8gdGhlc2UgaGVhZGVycywgeW91J2xsIG5lZWQKLSAgICAgIDxmaWxlbmFtZT4mbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7PC9maWxlbmFtZT4gZm9yIGludGVycnVwdAotICAgICAgaGFuZGxpbmcsIGFuZCA8ZmlsZW5hbWU+Jmx0O2FzbS9pby5oJmd0OzwvZmlsZW5hbWU+IGZvciBJL08KLSAgICAgIGFjY2Vzcy4gSWYgeW91IHVzZSB0aGUgPGZ1bmN0aW9uPm1kZWxheSgpPC9mdW5jdGlvbj4gb3IKLSAgICAgIDxmdW5jdGlvbj51ZGVsYXkoKTwvZnVuY3Rpb24+IGZ1bmN0aW9ucywgeW91J2xsIG5lZWQgdG8gaW5jbHVkZQotICAgICAgPGZpbGVuYW1lPiZsdDtsaW51eC9kZWxheS5oJmd0OzwvZmlsZW5hbWU+IHRvby4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIEFMU0EgaW50ZXJmYWNlcyBsaWtlIHRoZSBQQ00gYW5kIGNvbnRyb2wgQVBJcyBhcmUgZGVmaW5lZCBpbiBvdGhlcgotICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC94eHguaCZndDs8L2ZpbGVuYW1lPiBoZWFkZXIgZmlsZXMuCi0gICAgICBUaGV5IGhhdmUgdG8gYmUgaW5jbHVkZWQgYWZ0ZXIKLSAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvY29yZS5oJmd0OzwvZmlsZW5hbWU+LgotICAgICAgPC9wYXJhPgotCi0gICAgPC9zZWN0aW9uPgotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIE1hbmFnZW1lbnQgb2YgQ2FyZHMgYW5kIENvbXBvbmVudHMgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJjYXJkLW1hbmFnZW1lbnQiPgotICAgIDx0aXRsZT5NYW5hZ2VtZW50IG9mIENhcmRzIGFuZCBDb21wb25lbnRzPC90aXRsZT4KLQotICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtY2FyZC1pbnN0YW5jZSI+Ci0gICAgICA8dGl0bGU+Q2FyZCBJbnN0YW5jZTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgIEZvciBlYWNoIHNvdW5kY2FyZCwgYSA8cXVvdGU+Y2FyZDwvcXVvdGU+IHJlY29yZCBtdXN0IGJlIGFsbG9jYXRlZC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBBIGNhcmQgcmVjb3JkIGlzIHRoZSBoZWFkcXVhcnRlcnMgb2YgdGhlIHNvdW5kY2FyZC4gIEl0IG1hbmFnZXMKLSAgICAgIHRoZSB3aG9sZSBsaXN0IG9mIGRldmljZXMgKGNvbXBvbmVudHMpIG9uIHRoZSBzb3VuZGNhcmQsIHN1Y2ggYXMKLSAgICAgIFBDTSwgbWl4ZXJzLCBNSURJLCBzeW50aGVzaXplciwgYW5kIHNvIG9uLiAgQWxzbywgdGhlIGNhcmQKLSAgICAgIHJlY29yZCBob2xkcyB0aGUgSUQgYW5kIHRoZSBuYW1lIHN0cmluZ3Mgb2YgdGhlIGNhcmQsIG1hbmFnZXMKLSAgICAgIHRoZSByb290IG9mIHByb2MgZmlsZXMsIGFuZCBjb250cm9scyB0aGUgcG93ZXItbWFuYWdlbWVudCBzdGF0ZXMKLSAgICAgIGFuZCBob3RwbHVnIGRpc2Nvbm5lY3Rpb25zLiAgVGhlIGNvbXBvbmVudCBsaXN0IG9uIHRoZSBjYXJkCi0gICAgICByZWNvcmQgaXMgdXNlZCB0byBtYW5hZ2UgdGhlIGNvcnJlY3QgcmVsZWFzZSBvZiByZXNvdXJjZXMgYXQKLSAgICAgIGRlc3RydWN0aW9uLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgdG8gY3JlYXRlIGEgY2FyZCBpbnN0YW5jZSwgY2FsbAotICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX25ldygpPC9mdW5jdGlvbj4uCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9jYXJkICpjYXJkOwotICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgbW9kdWxlLCBleHRyYV9zaXplKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZ1bmN0aW9uIHRha2VzIGZvdXIgYXJndW1lbnRzLCB0aGUgY2FyZC1pbmRleCBudW1iZXIsIHRoZQotICAgICAgICBpZCBzdHJpbmcsIHRoZSBtb2R1bGUgcG9pbnRlciAodXN1YWxseQotICAgICAgICA8Y29uc3RhbnQ+VEhJU19NT0RVTEU8L2NvbnN0YW50PiksCi0gICAgICAgIGFuZCB0aGUgc2l6ZSBvZiBleHRyYS1kYXRhIHNwYWNlLiAgVGhlIGxhc3QgYXJndW1lbnQgaXMgdXNlZCB0bwotICAgICAgICBhbGxvY2F0ZSBjYXJkLSZndDtwcml2YXRlX2RhdGEgZm9yIHRoZQotICAgICAgICBjaGlwLXNwZWNpZmljIGRhdGEuICBOb3RlIHRoYXQgdGhlc2UgZGF0YQotICAgICAgICBhcmUgYWxsb2NhdGVkIGJ5IDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJjYXJkLW1hbmFnZW1lbnQtY29tcG9uZW50Ij4KLSAgICAgIDx0aXRsZT5Db21wb25lbnRzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBBZnRlciB0aGUgY2FyZCBpcyBjcmVhdGVkLCB5b3UgY2FuIGF0dGFjaCB0aGUgY29tcG9uZW50cwotICAgICAgKGRldmljZXMpIHRvIHRoZSBjYXJkIGluc3RhbmNlLiBJbiBhbiBBTFNBIGRyaXZlciwgYSBjb21wb25lbnQgaXMKLSAgICAgIHJlcHJlc2VudGVkIGFzIGEgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9kZXZpY2U8L3N0cnVjdG5hbWU+IG9iamVjdC4KLSAgICAgIEEgY29tcG9uZW50IGNhbiBiZSBhIFBDTSBpbnN0YW5jZSwgYSBjb250cm9sIGludGVyZmFjZSwgYSByYXcKLSAgICAgIE1JREkgaW50ZXJmYWNlLCBldGMuICBFYWNoIHN1Y2ggaW5zdGFuY2UgaGFzIG9uZSBjb21wb25lbnQKLSAgICAgIGVudHJ5LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgQSBjb21wb25lbnQgY2FuIGJlIGNyZWF0ZWQgdmlhCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfZGV2aWNlX25ldygpPC9mdW5jdGlvbj4gZnVuY3Rpb24uIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9YWFgsIGNoaXAsICZvcHMpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIHRha2VzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBkZXZpY2UtbGV2ZWwKLSAgICAgICg8Y29uc3RhbnQ+U05EUlZfREVWX1hYWDwvY29uc3RhbnQ+KSwgdGhlIGRhdGEgcG9pbnRlciwgYW5kIHRoZQotICAgICAgY2FsbGJhY2sgcG9pbnRlcnMgKDxwYXJhbWV0ZXI+JmFtcDtvcHM8L3BhcmFtZXRlcj4pLiBUaGUKLSAgICAgIGRldmljZS1sZXZlbCBkZWZpbmVzIHRoZSB0eXBlIG9mIGNvbXBvbmVudHMgYW5kIHRoZSBvcmRlciBvZgotICAgICAgcmVnaXN0cmF0aW9uIGFuZCBkZS1yZWdpc3RyYXRpb24uICBGb3IgbW9zdCBjb21wb25lbnRzLCB0aGUKLSAgICAgIGRldmljZS1sZXZlbCBpcyBhbHJlYWR5IGRlZmluZWQuICBGb3IgYSB1c2VyLWRlZmluZWQgY29tcG9uZW50LAotICAgICAgeW91IGNhbiB1c2UgPGNvbnN0YW50PlNORFJWX0RFVl9MT1dMRVZFTDwvY29uc3RhbnQ+LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFRoaXMgZnVuY3Rpb24gaXRzZWxmIGRvZXNuJ3QgYWxsb2NhdGUgdGhlIGRhdGEgc3BhY2UuIFRoZSBkYXRhCi0gICAgICBtdXN0IGJlIGFsbG9jYXRlZCBtYW51YWxseSBiZWZvcmVoYW5kLCBhbmQgaXRzIHBvaW50ZXIgaXMgcGFzc2VkCi0gICAgICBhcyB0aGUgYXJndW1lbnQuIFRoaXMgcG9pbnRlciBpcyB1c2VkIGFzIHRoZQotICAgICAgKDxwYXJhbWV0ZXI+Y2hpcDwvcGFyYW1ldGVyPiBpZGVudGlmaWVyIGluIHRoZSBhYm92ZSBleGFtcGxlKQotICAgICAgZm9yIHRoZSBpbnN0YW5jZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBFYWNoIHByZS1kZWZpbmVkIEFMU0EgY29tcG9uZW50IHN1Y2ggYXMgYWM5NyBhbmQgcGNtIGNhbGxzCi0gICAgICA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+IGluc2lkZSBpdHMKLSAgICAgIGNvbnN0cnVjdG9yLiBUaGUgZGVzdHJ1Y3RvciBmb3IgZWFjaCBjb21wb25lbnQgaXMgZGVmaW5lZCBpbiB0aGUKLSAgICAgIGNhbGxiYWNrIHBvaW50ZXJzLiAgSGVuY2UsIHlvdSBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZgotICAgICAgY2FsbGluZyBhIGRlc3RydWN0b3IgZm9yIHN1Y2ggYSBjb21wb25lbnQuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBJZiB5b3Ugd2lzaCB0byBjcmVhdGUgeW91ciBvd24gY29tcG9uZW50LCB5b3UgbmVlZCB0bwotICAgICAgc2V0IHRoZSBkZXN0cnVjdG9yIGZ1bmN0aW9uIHRvIHRoZSBkZXZfZnJlZSBjYWxsYmFjayBpbgotICAgICAgdGhlIDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+LCBzbyB0aGF0IGl0IGNhbiBiZSByZWxlYXNlZAotICAgICAgYXV0b21hdGljYWxseSB2aWEgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWUoKTwvZnVuY3Rpb24+LgotICAgICAgVGhlIG5leHQgZXhhbXBsZSB3aWxsIHNob3cgYW4gaW1wbGVtZW50YXRpb24gb2YgY2hpcC1zcGVjaWZpYwotICAgICAgZGF0YS4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMiPgotICAgICAgPHRpdGxlPkNoaXAtU3BlY2lmaWMgRGF0YTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgIENoaXAtc3BlY2lmaWMgaW5mb3JtYXRpb24sIGUuZy4gdGhlIEkvTyBwb3J0IGFkZHJlc3MsIGl0cwotICAgICAgcmVzb3VyY2UgcG9pbnRlciwgb3IgdGhlIGlycSBudW1iZXIsIGlzIHN0b3JlZCBpbiB0aGUKLSAgICAgIGNoaXAtc3BlY2lmaWMgcmVjb3JkLgotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0cnVjdCBteWNoaXAgewotICAgICAgICAgIC4uLi4KLSAgfTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gZ2VuZXJhbCwgdGhlcmUgYXJlIHR3byB3YXlzIG9mIGFsbG9jYXRpbmcgdGhlIGNoaXAgcmVjb3JkLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtc25kLWNhcmQtbmV3Ij4KLSAgICAgICAgPHRpdGxlPjEuIEFsbG9jYXRpbmcgdmlhIDxmdW5jdGlvbj5zbmRfY2FyZF9uZXcoKTwvZnVuY3Rpb24+LjwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFzIG1lbnRpb25lZCBhYm92ZSwgeW91IGNhbiBwYXNzIHRoZSBleHRyYS1kYXRhLWxlbmd0aAotCSAgdG8gdGhlIDR0aCBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiwgaS5lLgotCi0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IG15Y2hpcCkpOwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgICAgc3RydWN0IDxzdHJ1Y3RuYW1lPm15Y2hpcDwvc3RydWN0bmFtZT4gaXMgdGhlIHR5cGUgb2YgdGhlIGNoaXAgcmVjb3JkLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSW4gcmV0dXJuLCB0aGUgYWxsb2NhdGVkIHJlY29yZCBjYW4gYmUgYWNjZXNzZWQgYXMKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICAgIFdpdGggdGhpcyBtZXRob2QsIHlvdSBkb24ndCBoYXZlIHRvIGFsbG9jYXRlIHR3aWNlLgotICAgICAgICAgIFRoZSByZWNvcmQgaXMgcmVsZWFzZWQgdG9nZXRoZXIgd2l0aCB0aGUgY2FyZCBpbnN0YW5jZS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY2FyZC1tYW5hZ2VtZW50LWNoaXAtc3BlY2lmaWMtYWxsb2NhdGUtZXh0cmEiPgotICAgICAgICA8dGl0bGU+Mi4gQWxsb2NhdGluZyBhbiBleHRyYSBkZXZpY2UuPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEKLSAgICAgICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiAod2l0aAotICAgICAgICAgIDxjb25zdGFudD5OVUxMPC9jb25zdGFudD4gb24gdGhlIDR0aCBhcmcpLCBjYWxsCi0gICAgICAgICAgPGZ1bmN0aW9uPmt6YWxsb2MoKTwvZnVuY3Rpb24+LiAKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9jYXJkICpjYXJkOwotICBzdHJ1Y3QgbXljaGlwICpjaGlwOwotICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKLSAgLi4uLi4KLSAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgY2hpcCByZWNvcmQgc2hvdWxkIGhhdmUgdGhlIGZpZWxkIHRvIGhvbGQgdGhlIGNhcmQKLSAgICAgICAgICBwb2ludGVyIGF0IGxlYXN0LCAKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IG15Y2hpcCB7Ci0gICAgICAgICAgc3RydWN0IHNuZF9jYXJkICpjYXJkOwotICAgICAgICAgIC4uLi4KLSAgfTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZW4sIHNldCB0aGUgY2FyZCBwb2ludGVyIGluIHRoZSByZXR1cm5lZCBjaGlwIGluc3RhbmNlLgotCi0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBjaGlwLT5jYXJkID0gY2FyZDsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE5leHQsIGluaXRpYWxpemUgdGhlIGZpZWxkcywgYW5kIHJlZ2lzdGVyIHRoaXMgY2hpcAotICAgICAgICAgIHJlY29yZCBhcyBhIGxvdy1sZXZlbCBkZXZpY2Ugd2l0aCBhIHNwZWNpZmllZAotICAgICAgICAgIDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+LCAKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7Ci0gICAgICAgICAgLmRldl9mcmVlID0gICAgICAgIHNuZF9teWNoaXBfZGV2X2ZyZWUsCi0gIH07Ci0gIC4uLi4KLSAgc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICAgIDxmdW5jdGlvbj5zbmRfbXljaGlwX2Rldl9mcmVlKCk8L2Z1bmN0aW9uPiBpcyB0aGUKLSAgICAgICAgZGV2aWNlLWRlc3RydWN0b3IgZnVuY3Rpb24sIHdoaWNoIHdpbGwgY2FsbCB0aGUgcmVhbAotICAgICAgICBkZXN0cnVjdG9yLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfbXljaGlwX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCi0gIHsKLSAgICAgICAgICByZXR1cm4gc25kX215Y2hpcF9mcmVlKGRldmljZS0+ZGV2aWNlX2RhdGEpOwotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgICB3aGVyZSA8ZnVuY3Rpb24+c25kX215Y2hpcF9mcmVlKCk8L2Z1bmN0aW9uPiBpcyB0aGUgcmVhbCBkZXN0cnVjdG9yLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImNhcmQtbWFuYWdlbWVudC1yZWdpc3RyYXRpb24iPgotICAgICAgPHRpdGxlPlJlZ2lzdHJhdGlvbiBhbmQgUmVsZWFzZTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgQWZ0ZXIgYWxsIGNvbXBvbmVudHMgYXJlIGFzc2lnbmVkLCByZWdpc3RlciB0aGUgY2FyZCBpbnN0YW5jZQotICAgICAgYnkgY2FsbGluZyA8ZnVuY3Rpb24+c25kX2NhcmRfcmVnaXN0ZXIoKTwvZnVuY3Rpb24+LiBBY2Nlc3MKLSAgICAgIHRvIHRoZSBkZXZpY2UgZmlsZXMgaXMgZW5hYmxlZCBhdCB0aGlzIHBvaW50LiBUaGF0IGlzLCBiZWZvcmUKLSAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9yZWdpc3RlcigpPC9mdW5jdGlvbj4gaXMgY2FsbGVkLCB0aGUKLSAgICAgIGNvbXBvbmVudHMgYXJlIHNhZmVseSBpbmFjY2Vzc2libGUgZnJvbSBleHRlcm5hbCBzaWRlLiBJZiB0aGlzCi0gICAgICBjYWxsIGZhaWxzLCBleGl0IHRoZSBwcm9iZSBmdW5jdGlvbiBhZnRlciByZWxlYXNpbmcgdGhlIGNhcmQgdmlhCi0gICAgICA8ZnVuY3Rpb24+c25kX2NhcmRfZnJlZSgpPC9mdW5jdGlvbj4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgRm9yIHJlbGVhc2luZyB0aGUgY2FyZCBpbnN0YW5jZSwgeW91IGNhbiBjYWxsIHNpbXBseQotICAgICAgPGZ1bmN0aW9uPnNuZF9jYXJkX2ZyZWUoKTwvZnVuY3Rpb24+LiBBcyBtZW50aW9uZWQgZWFybGllciwgYWxsCi0gICAgICBjb21wb25lbnRzIGFyZSByZWxlYXNlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoaXMgY2FsbC4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBBcyBmdXJ0aGVyIG5vdGVzLCB0aGUgZGVzdHJ1Y3RvcnMgKGJvdGgKLSAgICAgIDxmdW5jdGlvbj5zbmRfbXljaGlwX2Rldl9mcmVlPC9mdW5jdGlvbj4gYW5kCi0gICAgICA8ZnVuY3Rpb24+c25kX215Y2hpcF9mcmVlPC9mdW5jdGlvbj4pIGNhbm5vdCBiZSBkZWZpbmVkIHdpdGgKLSAgICAgIHRoZSA8cGFyYW1ldGVyPl9fZGV2ZXhpdDwvcGFyYW1ldGVyPiBwcmVmaXgsIGJlY2F1c2UgdGhleSBtYXkgYmUKLSAgICAgIGNhbGxlZCBmcm9tIHRoZSBjb25zdHJ1Y3RvciwgdG9vLCBhdCB0aGUgZmFsc2UgcGF0aC4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgRm9yIGEgZGV2aWNlIHdoaWNoIGFsbG93cyBob3RwbHVnZ2luZywgeW91IGNhbiB1c2UKLSAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkPC9mdW5jdGlvbj4uICBUaGlzIG9uZSB3aWxsCi0gICAgICBwb3N0cG9uZSB0aGUgZGVzdHJ1Y3Rpb24gdW50aWwgYWxsIGRldmljZXMgYXJlIGNsb3NlZC4KLSAgICAgIDwvcGFyYT4KLQotICAgIDwvc2VjdGlvbj4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIFBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50ICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Y2hhcHRlciBpZD0icGNpLXJlc291cmNlIj4KLSAgICA8dGl0bGU+UENJIFJlc291cmNlIE1hbmFnZW1lbnQ8L3RpdGxlPgotCi0gICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1leGFtcGxlIj4KLSAgICAgIDx0aXRsZT5GdWxsIENvZGUgRXhhbXBsZTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gdGhpcyBzZWN0aW9uLCB3ZSdsbCBjb21wbGV0ZSB0aGUgY2hpcC1zcGVjaWZpYyBjb25zdHJ1Y3RvciwKLSAgICAgIGRlc3RydWN0b3IgYW5kIFBDSSBlbnRyaWVzLiBFeGFtcGxlIGNvZGUgaXMgc2hvd24gZmlyc3QsCi0gICAgICBiZWxvdy4gCi0KLSAgICAgICAgPGV4YW1wbGU+Ci0gICAgICAgICAgPHRpdGxlPlBDSSBSZXNvdXJjZSBNYW5hZ2VtZW50IEV4YW1wbGU8L3RpdGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3QgbXljaGlwIHsKLSAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0gICAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaTsKLQotICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9ydDsKLSAgICAgICAgICBpbnQgaXJxOwotICB9OwotCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9mcmVlKHN0cnVjdCBteWNoaXAgKmNoaXApCi0gIHsKLSAgICAgICAgICAvKiBkaXNhYmxlIGhhcmR3YXJlIGhlcmUgaWYgYW55ICovCi0gICAgICAgICAgLi4uLiAvKiAobm90IGltcGxlbWVudGVkIGluIHRoaXMgZG9jdW1lbnQpICovCi0KLSAgICAgICAgICAvKiByZWxlYXNlIHRoZSBpcnEgKi8KLSAgICAgICAgICBpZiAoY2hpcC0+aXJxID49IDApCi0gICAgICAgICAgICAgICAgICBmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOwotICAgICAgICAgIC8qIHJlbGVhc2UgdGhlIEkvTyBwb3J0cyAmIG1lbW9yeSAqLwotICAgICAgICAgIHBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKLSAgICAgICAgICAvKiBkaXNhYmxlIHRoZSBQQ0kgZW50cnkgKi8KLSAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKLSAgICAgICAgICAvKiByZWxlYXNlIHRoZSBkYXRhICovCi0gICAgICAgICAga2ZyZWUoY2hpcCk7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLQotICAvKiBjaGlwLXNwZWNpZmljIGNvbnN0cnVjdG9yICovCi0gIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfY3JlYXRlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG15Y2hpcCAqKnJjaGlwKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKLSAgICAgICAgICBpbnQgZXJyOwotICAgICAgICAgIHN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0gewotICAgICAgICAgICAgICAgICAuZGV2X2ZyZWUgPSBzbmRfbXljaGlwX2Rldl9mcmVlLAotICAgICAgICAgIH07Ci0KLSAgICAgICAgICAqcmNoaXAgPSBOVUxMOwotCi0gICAgICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgUENJIGVudHJ5ICovCi0gICAgICAgICAgZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKLSAgICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgLyogY2hlY2sgUENJIGF2YWlsYWJpbGl0eSAoMjhiaXQgRE1BKSAqLwotICAgICAgICAgIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaSwgRE1BXzI4QklUX01BU0spIDwgMCB8fAotICAgICAgICAgICAgICBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpLCBETUFfMjhCSVRfTUFTSykgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVycm9yIHRvIHNldCAyOGJpdCBtYXNrIERNQVxuIik7Ci0gICAgICAgICAgICAgICAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5YSU87Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgaWYgKGNoaXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvKiBpbml0aWFsaXplIHRoZSBzdHVmZiAqLwotICAgICAgICAgIGNoaXAtPmNhcmQgPSBjYXJkOwotICAgICAgICAgIGNoaXAtPnBjaSA9IHBjaTsKLSAgICAgICAgICBjaGlwLT5pcnEgPSAtMTsKLQotICAgICAgICAgIC8qICgxKSBQQ0kgcmVzb3VyY2UgYWxsb2NhdGlvbiAqLwotICAgICAgICAgIGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCAiTXkgQ2hpcCIpOwotICAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICBrZnJlZShjaGlwKTsKLSAgICAgICAgICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2hpcC0+cG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwotICAgICAgICAgIGlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX215Y2hpcF9pbnRlcnJ1cHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfU0hBUkVELCAiTXkgQ2hpcCIsIGNoaXApKSB7Ci0gICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycSAlZFxuIiwgcGNpLT5pcnEpOwotICAgICAgICAgICAgICAgICAgc25kX215Y2hpcF9mcmVlKGNoaXApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2hpcC0+aXJxID0gcGNpLT5pcnE7Ci0KLSAgICAgICAgICAvKiAoMikgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNoaXAgaGFyZHdhcmUgKi8KLSAgICAgICAgICAuLi4uIC8qICAgKG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGRvY3VtZW50KSAqLwotCi0gICAgICAgICAgZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKTsKLSAgICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgICAgICAgc25kX215Y2hpcF9mcmVlKGNoaXApOwotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7Ci0KLSAgICAgICAgICAqcmNoaXAgPSBjaGlwOwotICAgICAgICAgIHJldHVybiAwOwotICB9ICAgICAgICAKLQotICAvKiBQQ0kgSURzICovCi0gIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbmRfbXljaGlwX2lkc1tdID0gewotICAgICAgICAgIHsgUENJX1ZFTkRPUl9JRF9GT08sIFBDSV9ERVZJQ0VfSURfQkFSLAotICAgICAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgeyAwLCB9Ci0gIH07Ci0gIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzbmRfbXljaGlwX2lkcyk7Ci0KLSAgLyogcGNpX2RyaXZlciBkZWZpbml0aW9uICovCi0gIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBkcml2ZXIgPSB7Ci0gICAgICAgICAgLm5hbWUgPSAiTXkgT3duIENoaXAiLAotICAgICAgICAgIC5pZF90YWJsZSA9IHNuZF9teWNoaXBfaWRzLAotICAgICAgICAgIC5wcm9iZSA9IHNuZF9teWNoaXBfcHJvYmUsCi0gICAgICAgICAgLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9teWNoaXBfcmVtb3ZlKSwKLSAgfTsKLQotICAvKiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKi8KLSAgc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX215Y2hpcF9pbml0KHZvaWQpCi0gIHsKLSAgICAgICAgICByZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKLSAgfQotCi0gIC8qIG1vZHVsZSBjbGVhbiB1cCAqLwotICBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX215Y2hpcF9leGl0KHZvaWQpCi0gIHsKLSAgICAgICAgICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7Ci0gIH0KLQotICBtb2R1bGVfaW5pdChhbHNhX2NhcmRfbXljaGlwX2luaXQpCi0gIG1vZHVsZV9leGl0KGFsc2FfY2FyZF9teWNoaXBfZXhpdCkKLQotICBFWFBPUlRfTk9fU1lNQk9MUzsgLyogZm9yIG9sZCBrZXJuZWxzIG9ubHkgKi8KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0icGNpLXJlc291cmNlLXNvbWUtaGFmdGFzIj4KLSAgICAgIDx0aXRsZT5Tb21lIEhhZnRhJ3M8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBhbGxvY2F0aW9uIG9mIFBDSSByZXNvdXJjZXMgaXMgZG9uZSBpbiB0aGUKLSAgICAgIDxmdW5jdGlvbj5wcm9iZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24sIGFuZCB1c3VhbGx5IGFuIGV4dHJhCi0gICAgICA8ZnVuY3Rpb24+eHh4X2NyZWF0ZSgpPC9mdW5jdGlvbj4gZnVuY3Rpb24gaXMgd3JpdHRlbiBmb3IgdGhpcwotICAgICAgcHVycG9zZS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHRoZSBjYXNlIG9mIFBDSSBkZXZpY2VzLCB5b3UgZmlyc3QgaGF2ZSB0byBjYWxsCi0gICAgICB0aGUgPGZ1bmN0aW9uPnBjaV9lbmFibGVfZGV2aWNlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiBiZWZvcmUKLSAgICAgIGFsbG9jYXRpbmcgcmVzb3VyY2VzLiBBbHNvLCB5b3UgbmVlZCB0byBzZXQgdGhlIHByb3BlciBQQ0kgRE1BCi0gICAgICBtYXNrIHRvIGxpbWl0IHRoZSBhY2Nlc3NlZCBJL08gcmFuZ2UuIEluIHNvbWUgY2FzZXMsIHlvdSBtaWdodAotICAgICAgbmVlZCB0byBjYWxsIDxmdW5jdGlvbj5wY2lfc2V0X21hc3RlcigpPC9mdW5jdGlvbj4gZnVuY3Rpb24sCi0gICAgICB0b28uCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBTdXBwb3NlIHRoZSAyOGJpdCBtYXNrLCBhbmQgdGhlIGNvZGUgdG8gYmUgYWRkZWQgd291bGQgYmUgbGlrZToKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBlcnIgPSBwY2lfZW5hYmxlX2RldmljZShwY2kpOwotICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICByZXR1cm4gZXJyOwotICBpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDAgfHwKLSAgICAgIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2ksIERNQV8yOEJJVF9NQVNLKSA8IDApIHsKLSAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImVycm9yIHRvIHNldCAyOGJpdCBtYXNrIERNQVxuIik7Ci0gICAgICAgICAgcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0gICAgICAgICAgcmV0dXJuIC1FTlhJTzsKLSAgfQotICAKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY2ktcmVzb3VyY2UtcmVzb3VyY2UtYWxsb2NhdGlvbiI+Ci0gICAgICA8dGl0bGU+UmVzb3VyY2UgQWxsb2NhdGlvbjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgSS9PIHBvcnRzIGFuZCBpcnFzIGlzIGRvbmUgdmlhIHN0YW5kYXJkIGtlcm5lbAotICAgICAgZnVuY3Rpb25zLiBVbmxpa2UgQUxTQSB2ZXIuMC41LnguLCB0aGVyZSBhcmUgbm8gaGVscGVycyBmb3IKLSAgICAgIHRoYXQuIEFuZCB0aGVzZSByZXNvdXJjZXMgbXVzdCBiZSByZWxlYXNlZCBpbiB0aGUgZGVzdHJ1Y3RvcgotICAgICAgZnVuY3Rpb24gKHNlZSBiZWxvdykuIEFsc28sIG9uIEFMU0EgMC45LngsIHlvdSBkb24ndCBuZWVkIHRvCi0gICAgICBhbGxvY2F0ZSAocHNldWRvLSlETUEgZm9yIFBDSSBsaWtlIGluIEFMU0EgMC41LnguCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBOb3cgYXNzdW1lIHRoYXQgdGhlIFBDSSBkZXZpY2UgaGFzIGFuIEkvTyBwb3J0IHdpdGggOCBieXRlcwotICAgICAgICBhbmQgYW4gaW50ZXJydXB0LiBUaGVuIHN0cnVjdCA8c3RydWN0bmFtZT5teWNoaXA8L3N0cnVjdG5hbWU+IHdpbGwgaGF2ZSB0aGUKLSAgICAgICAgZm9sbG93aW5nIGZpZWxkczoKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3QgbXljaGlwIHsKLSAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0KLSAgICAgICAgICB1bnNpZ25lZCBsb25nIHBvcnQ7Ci0gICAgICAgICAgaW50IGlycTsKLSAgfTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgRm9yIGFuIEkvTyBwb3J0IChhbmQgYWxzbyBhIG1lbW9yeSByZWdpb24pLCB5b3UgbmVlZCB0byBoYXZlCi0gICAgICB0aGUgcmVzb3VyY2UgcG9pbnRlciBmb3IgdGhlIHN0YW5kYXJkIHJlc291cmNlIG1hbmFnZW1lbnQuIEZvcgotICAgICAgYW4gaXJxLCB5b3UgaGF2ZSB0byBrZWVwIG9ubHkgdGhlIGlycSBudW1iZXIgKGludGVnZXIpLiBCdXQgeW91Ci0gICAgICBuZWVkIHRvIGluaXRpYWxpemUgdGhpcyBudW1iZXIgYXMgLTEgYmVmb3JlIGFjdHVhbCBhbGxvY2F0aW9uLAotICAgICAgc2luY2UgaXJxIDAgaXMgdmFsaWQuIFRoZSBwb3J0IGFkZHJlc3MgYW5kIGl0cyByZXNvdXJjZSBwb2ludGVyCi0gICAgICBjYW4gYmUgaW5pdGlhbGl6ZWQgYXMgbnVsbCBieQotICAgICAgPGZ1bmN0aW9uPmt6YWxsb2MoKTwvZnVuY3Rpb24+IGF1dG9tYXRpY2FsbHksIHNvIHlvdQotICAgICAgZG9uJ3QgaGF2ZSB0byB0YWtlIGNhcmUgb2YgcmVzZXR0aW5nIHRoZW0uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgYW4gSS9PIHBvcnQgaXMgZG9uZSBsaWtlIHRoaXM6Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksICJNeSBDaGlwIik7Ci0gIGlmIChlcnIgPCAwKSB7IAotICAgICAgICAgIGtmcmVlKGNoaXApOwotICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotICAgICAgICAgIHJldHVybiBlcnI7Ci0gIH0KLSAgY2hpcC0+cG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2ksIDApOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICA8IS0tIG9ic29sZXRlIC0tPgotICAgICAgICBJdCB3aWxsIHJlc2VydmUgdGhlIEkvTyBwb3J0IHJlZ2lvbiBvZiA4IGJ5dGVzIG9mIHRoZSBnaXZlbgotICAgICAgUENJIGRldmljZS4gVGhlIHJldHVybmVkIHZhbHVlLCBjaGlwLSZndDtyZXNfcG9ydCwgaXMgYWxsb2NhdGVkCi0gICAgICB2aWEgPGZ1bmN0aW9uPmttYWxsb2MoKTwvZnVuY3Rpb24+IGJ5Ci0gICAgICA8ZnVuY3Rpb24+cmVxdWVzdF9yZWdpb24oKTwvZnVuY3Rpb24+LiBUaGUgcG9pbnRlciBtdXN0IGJlCi0gICAgICByZWxlYXNlZCB2aWEgPGZ1bmN0aW9uPmtmcmVlKCk8L2Z1bmN0aW9uPiwgYnV0IHRoZXJlIGlzIGEKLSAgICAgIHByb2JsZW0gd2l0aCB0aGlzLiBUaGlzIGlzc3VlIHdpbGwgYmUgZXhwbGFpbmVkIGxhdGVyLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgYW4gaW50ZXJydXB0IHNvdXJjZSBpcyBkb25lIGxpa2UgdGhpczoKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBpZiAocmVxdWVzdF9pcnEocGNpLT5pcnEsIHNuZF9teWNoaXBfaW50ZXJydXB0LAotICAgICAgICAgICAgICAgICAgSVJRRl9TSEFSRUQsICJNeSBDaGlwIiwgY2hpcCkpIHsKLSAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImNhbm5vdCBncmFiIGlycSAlZFxuIiwgcGNpLT5pcnEpOwotICAgICAgICAgIHNuZF9teWNoaXBfZnJlZShjaGlwKTsKLSAgICAgICAgICByZXR1cm4gLUVCVVNZOwotICB9Ci0gIGNoaXAtPmlycSA9IHBjaS0+aXJxOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgd2hlcmUgPGZ1bmN0aW9uPnNuZF9teWNoaXBfaW50ZXJydXB0KCk8L2Z1bmN0aW9uPiBpcyB0aGUKLSAgICAgIGludGVycnVwdCBoYW5kbGVyIGRlZmluZWQgPGxpbmsKLSAgICAgIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXIiPjxjaXRldGl0bGU+bGF0ZXI8L2NpdGV0aXRsZT48L2xpbms+LgotICAgICAgTm90ZSB0aGF0IGNoaXAtJmd0O2lycSBzaG91bGQgYmUgZGVmaW5lZAotICAgICAgb25seSB3aGVuIDxmdW5jdGlvbj5yZXF1ZXN0X2lycSgpPC9mdW5jdGlvbj4gc3VjY2VlZGVkLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIE9uIHRoZSBQQ0kgYnVzLCBpbnRlcnJ1cHRzIGNhbiBiZSBzaGFyZWQuIFRodXMsCi0gICAgICA8Y29uc3RhbnQ+SVJRRl9TSEFSRUQ8L2NvbnN0YW50PiBpcyB1c2VkIGFzIHRoZSBpbnRlcnJ1cHQgZmxhZyBvZgotICAgICAgPGZ1bmN0aW9uPnJlcXVlc3RfaXJxKCk8L2Z1bmN0aW9uPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgbGFzdCBhcmd1bWVudCBvZiA8ZnVuY3Rpb24+cmVxdWVzdF9pcnEoKTwvZnVuY3Rpb24+IGlzIHRoZQotICAgICAgZGF0YSBwb2ludGVyIHBhc3NlZCB0byB0aGUgaW50ZXJydXB0IGhhbmRsZXIuIFVzdWFsbHksIHRoZQotICAgICAgY2hpcC1zcGVjaWZpYyByZWNvcmQgaXMgdXNlZCBmb3IgdGhhdCwgYnV0IHlvdSBjYW4gdXNlIHdoYXQgeW91Ci0gICAgICBsaWtlLCB0b28uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSSB3b24ndCBnaXZlIGRldGFpbHMgYWJvdXQgdGhlIGludGVycnVwdCBoYW5kbGVyIGF0IHRoaXMKLSAgICAgICAgcG9pbnQsIGJ1dCBhdCBsZWFzdCBpdHMgYXBwZWFyYW5jZSBjYW4gYmUgZXhwbGFpbmVkIG5vdy4gVGhlCi0gICAgICAgIGludGVycnVwdCBoYW5kbGVyIGxvb2tzIHVzdWFsbHkgbGlrZSB0aGUgZm9sbG93aW5nOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaXJxcmV0dXJuX3Qgc25kX215Y2hpcF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGRldl9pZDsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwotICB9Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIE5vdyBsZXQncyB3cml0ZSB0aGUgY29ycmVzcG9uZGluZyBkZXN0cnVjdG9yIGZvciB0aGUgcmVzb3VyY2VzCi0gICAgICBhYm92ZS4gVGhlIHJvbGUgb2YgZGVzdHJ1Y3RvciBpcyBzaW1wbGU6IGRpc2FibGUgdGhlIGhhcmR3YXJlCi0gICAgICAoaWYgYWxyZWFkeSBhY3RpdmF0ZWQpIGFuZCByZWxlYXNlIHRoZSByZXNvdXJjZXMuIFNvIGZhciwgd2UKLSAgICAgIGhhdmUgbm8gaGFyZHdhcmUgcGFydCwgc28gdGhlIGRpc2FibGluZyBjb2RlIGlzIG5vdCB3cml0dGVuIGhlcmUuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVG8gcmVsZWFzZSB0aGUgcmVzb3VyY2VzLCB0aGUgPHF1b3RlPmNoZWNrLWFuZC1yZWxlYXNlPC9xdW90ZT4KLSAgICAgICAgbWV0aG9kIGlzIGEgc2FmZXIgd2F5LiBGb3IgdGhlIGludGVycnVwdCwgZG8gbGlrZSB0aGlzOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBpZiAoY2hpcC0+aXJxID49IDApCi0gICAgICAgICAgZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIFNpbmNlIHRoZSBpcnEgbnVtYmVyIGNhbiBzdGFydCBmcm9tIDAsIHlvdSBzaG91bGQgaW5pdGlhbGl6ZQotICAgICAgICBjaGlwLSZndDtpcnEgd2l0aCBhIG5lZ2F0aXZlIHZhbHVlIChlLmcuIC0xKSwgc28gdGhhdCB5b3UgY2FuCi0gICAgICAgIGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgaXJxIG51bWJlciBhcyBhYm92ZS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFdoZW4geW91IHJlcXVlc3RlZCBJL08gcG9ydHMgb3IgbWVtb3J5IHJlZ2lvbnMgdmlhCi0JPGZ1bmN0aW9uPnBjaV9yZXF1ZXN0X3JlZ2lvbigpPC9mdW5jdGlvbj4gb3IKLQk8ZnVuY3Rpb24+cGNpX3JlcXVlc3RfcmVnaW9ucygpPC9mdW5jdGlvbj4gbGlrZSBpbiB0aGlzIGV4YW1wbGUsCi0JcmVsZWFzZSB0aGUgcmVzb3VyY2UocykgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24sCi0JPGZ1bmN0aW9uPnBjaV9yZWxlYXNlX3JlZ2lvbigpPC9mdW5jdGlvbj4gb3IKLQk8ZnVuY3Rpb24+cGNpX3JlbGVhc2VfcmVnaW9ucygpPC9mdW5jdGlvbj4uCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotCVdoZW4geW91IHJlcXVlc3RlZCBtYW51YWxseSB2aWEgPGZ1bmN0aW9uPnJlcXVlc3RfcmVnaW9uKCk8L2Z1bmN0aW9uPgotCW9yIDxmdW5jdGlvbj5yZXF1ZXN0X21lbV9yZWdpb248L2Z1bmN0aW9uPiwgeW91IGNhbiByZWxlYXNlIGl0IHZpYQotCTxmdW5jdGlvbj5yZWxlYXNlX3Jlc291cmNlKCk8L2Z1bmN0aW9uPi4gIFN1cHBvc2UgdGhhdCB5b3Uga2VlcAotCXRoZSByZXNvdXJjZSBwb2ludGVyIHJldHVybmVkIGZyb20gPGZ1bmN0aW9uPnJlcXVlc3RfcmVnaW9uKCk8L2Z1bmN0aW9uPgotCWluIGNoaXAtJmd0O3Jlc19wb3J0LCB0aGUgcmVsZWFzZSBwcm9jZWR1cmUgbG9va3MgbGlrZToKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICByZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPnJlc19wb3J0KTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIERvbid0IGZvcmdldCB0byBjYWxsIDxmdW5jdGlvbj5wY2lfZGlzYWJsZV9kZXZpY2UoKTwvZnVuY3Rpb24+Ci0gICAgICBiZWZvcmUgdGhlIGVuZC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFuZCBmaW5hbGx5LCByZWxlYXNlIHRoZSBjaGlwLXNwZWNpZmljIHJlY29yZC4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBrZnJlZShjaGlwKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIEFnYWluLCByZW1lbWJlciB0aGF0IHlvdSBjYW5ub3QKLSAgICAgIHVzZSB0aGUgPHBhcmFtZXRlcj5fX2RldmV4aXQ8L3BhcmFtZXRlcj4gcHJlZml4IGZvciB0aGlzIGRlc3RydWN0b3IuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFdlIGRpZG4ndCBpbXBsZW1lbnQgdGhlIGhhcmR3YXJlIGRpc2FibGluZyBwYXJ0IGluIHRoZSBhYm92ZS4KLSAgICAgIElmIHlvdSBuZWVkIHRvIGRvIHRoaXMsIHBsZWFzZSBub3RlIHRoYXQgdGhlIGRlc3RydWN0b3IgbWF5IGJlCi0gICAgICBjYWxsZWQgZXZlbiBiZWZvcmUgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjaGlwIGlzIGNvbXBsZXRlZC4KLSAgICAgIEl0IHdvdWxkIGJlIGJldHRlciB0byBoYXZlIGEgZmxhZyB0byBza2lwIGhhcmR3YXJlIGRpc2FibGluZwotICAgICAgaWYgdGhlIGhhcmR3YXJlIHdhcyBub3QgaW5pdGlhbGl6ZWQgeWV0LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFdoZW4gdGhlIGNoaXAtZGF0YSBpcyBhc3NpZ25lZCB0byB0aGUgY2FyZCB1c2luZwotICAgICAgPGZ1bmN0aW9uPnNuZF9kZXZpY2VfbmV3KCk8L2Z1bmN0aW9uPiB3aXRoCi0gICAgICA8Y29uc3RhbnQ+U05EUlZfREVWX0xPV0xFTFZFTDwvY29uc3RhbnQ+ICwgaXRzIGRlc3RydWN0b3IgaXMgCi0gICAgICBjYWxsZWQgYXQgdGhlIGxhc3QuICBUaGF0IGlzLCBpdCBpcyBhc3N1cmVkIHRoYXQgYWxsIG90aGVyCi0gICAgICBjb21wb25lbnRzIGxpa2UgUENNcyBhbmQgY29udHJvbHMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVsZWFzZWQuCi0gICAgICBZb3UgZG9uJ3QgaGF2ZSB0byBzdG9wIFBDTXMsIGV0Yy4gZXhwbGljaXRseSwgYnV0IGp1c3QKLSAgICAgIGNhbGwgbG93LWxldmVsIGhhcmR3YXJlIHN0b3BwaW5nLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIG1hbmFnZW1lbnQgb2YgYSBtZW1vcnktbWFwcGVkIHJlZ2lvbiBpcyBhbG1vc3QgYXMgc2FtZSBhcwotICAgICAgICB0aGUgbWFuYWdlbWVudCBvZiBhbiBJL08gcG9ydC4gWW91J2xsIG5lZWQgdGhyZWUgZmllbGRzIGxpa2UKLSAgICAgICAgdGhlIGZvbGxvd2luZzogCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IG15Y2hpcCB7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW9iYXNlX3BoeXM7Ci0gICAgICAgICAgdm9pZCBfX2lvbWVtICppb2Jhc2VfdmlydDsKLSAgfTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIGFuZCB0aGUgYWxsb2NhdGlvbiB3b3VsZCBiZSBsaWtlIGJlbG93OgotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIGlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksICJNeSBDaGlwIikpIDwgMCkgewotICAgICAgICAgIGtmcmVlKGNoaXApOwotICAgICAgICAgIHJldHVybiBlcnI7Ci0gIH0KLSAgY2hpcC0+aW9iYXNlX3BoeXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKLSAgY2hpcC0+aW9iYXNlX3ZpcnQgPSBpb3JlbWFwX25vY2FjaGUoY2hpcC0+aW9iYXNlX3BoeXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpLCAwKSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgCi0gICAgICAgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkZXN0cnVjdG9yIHdvdWxkIGJlOgotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9mcmVlKHN0cnVjdCBteWNoaXAgKmNoaXApCi0gIHsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgaWYgKGNoaXAtPmlvYmFzZV92aXJ0KQotICAgICAgICAgICAgICAgICAgaW91bm1hcChjaGlwLT5pb2Jhc2VfdmlydCk7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIHBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKLSAgICAgICAgICAuLi4uCi0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1kZXZpY2Utc3RydWN0Ij4KLSAgICAgIDx0aXRsZT5SZWdpc3RyYXRpb24gb2YgRGV2aWNlIFN0cnVjdDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLQlBdCBzb21lIHBvaW50LCB0eXBpY2FsbHkgYWZ0ZXIgY2FsbGluZyA8ZnVuY3Rpb24+c25kX2RldmljZV9uZXcoKTwvZnVuY3Rpb24+LAotCXlvdSBuZWVkIHRvIHJlZ2lzdGVyIHRoZSBzdHJ1Y3QgPHN0cnVjdG5hbWU+ZGV2aWNlPC9zdHJ1Y3RuYW1lPiBvZiB0aGUgY2hpcAotCXlvdSdyZSBoYW5kbGluZyBmb3IgdWRldiBhbmQgY28uICBBTFNBIHByb3ZpZGVzIGEgbWFjcm8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aAotCW9sZGVyIGtlcm5lbHMuICBTaW1wbHkgY2FsbCBsaWtlIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJnBjaS0+ZGV2KTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCXNvIHRoYXQgaXQgc3RvcmVzIHRoZSBQQ0kncyBkZXZpY2UgcG9pbnRlciB0byB0aGUgY2FyZC4gIFRoaXMgd2lsbCBiZQotCXJlZmVycmVkIGJ5IEFMU0EgY29yZSBmdW5jdGlvbnMgbGF0ZXIgd2hlbiB0aGUgZGV2aWNlcyBhcmUgcmVnaXN0ZXJlZC4KLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotCUluIHRoZSBjYXNlIG9mIG5vbi1QQ0ksIHBhc3MgdGhlIHByb3BlciBkZXZpY2Ugc3RydWN0IHBvaW50ZXIgb2YgdGhlIEJVUwotCWluc3RlYWQuICAoSW4gdGhlIGNhc2Ugb2YgbGVnYWN5IElTQSB3aXRob3V0IFBuUCwgeW91IGRvbid0IGhhdmUgdG8gZG8KLQlhbnl0aGluZy4pCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InBjaS1yZXNvdXJjZS1lbnRyaWVzIj4KLSAgICAgIDx0aXRsZT5QQ0kgRW50cmllczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgU28gZmFyLCBzbyBnb29kLiBMZXQncyBmaW5pc2ggdGhlIG1pc3NpbmcgUENJCi0gICAgICBzdHVmZi4gQXQgZmlyc3QsIHdlIG5lZWQgYQotICAgICAgPHN0cnVjdG5hbWU+cGNpX2RldmljZV9pZDwvc3RydWN0bmFtZT4gdGFibGUgZm9yIHRoaXMKLSAgICAgIGNoaXBzZXQuIEl0J3MgYSB0YWJsZSBvZiBQQ0kgdmVuZG9yL2RldmljZSBJRCBudW1iZXIsIGFuZCBzb21lCi0gICAgICBtYXNrcy4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBGb3IgZXhhbXBsZSwKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX215Y2hpcF9pZHNbXSA9IHsKLSAgICAgICAgICB7IFBDSV9WRU5ET1JfSURfRk9PLCBQQ0lfREVWSUNFX0lEX0JBUiwKLSAgICAgICAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCi0gICAgICAgICAgLi4uLgotICAgICAgICAgIHsgMCwgfQotICB9OwotICBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc25kX215Y2hpcF9pZHMpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZmlyc3QgYW5kIHNlY29uZCBmaWVsZHMgb2YKLSAgICAgIHRoZSA8c3RydWN0bmFtZT5wY2lfZGV2aWNlX2lkPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUgYXJlIHRoZSB2ZW5kb3IgYW5kCi0gICAgICBkZXZpY2UgSURzLiBJZiB5b3UgaGF2ZSBubyByZWFzb24gdG8gZmlsdGVyIHRoZSBtYXRjaGluZwotICAgICAgZGV2aWNlcywgeW91IGNhbiBsZWF2ZSB0aGUgcmVtYWluaW5nIGZpZWxkcyBhcyBhYm92ZS4gVGhlIGxhc3QKLSAgICAgIGZpZWxkIG9mIHRoZSA8c3RydWN0bmFtZT5wY2lfZGV2aWNlX2lkPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3QgY29udGFpbnMKLSAgICAgIHByaXZhdGUgZGF0YSBmb3IgdGhpcyBlbnRyeS4gWW91IGNhbiBzcGVjaWZ5IGFueSB2YWx1ZSBoZXJlLCBmb3IKLSAgICAgIGV4YW1wbGUsIHRvIGRlZmluZSBzcGVjaWZpYyBvcGVyYXRpb25zIGZvciBzdXBwb3J0ZWQgZGV2aWNlIElEcy4KLSAgICAgIFN1Y2ggYW4gZXhhbXBsZSBpcyBmb3VuZCBpbiB0aGUgaW50ZWw4eDAgZHJpdmVyLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBsYXN0IGVudHJ5IG9mIHRoaXMgbGlzdCBpcyB0aGUgdGVybWluYXRvci4gWW91IG11c3QKLSAgICAgIHNwZWNpZnkgdGhpcyBhbGwtemVybyBlbnRyeS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGVuLCBwcmVwYXJlIHRoZSA8c3RydWN0bmFtZT5wY2lfZHJpdmVyPC9zdHJ1Y3RuYW1lPiByZWNvcmQ6Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGRyaXZlciA9IHsKLSAgICAgICAgICAubmFtZSA9ICJNeSBPd24gQ2hpcCIsCi0gICAgICAgICAgLmlkX3RhYmxlID0gc25kX215Y2hpcF9pZHMsCi0gICAgICAgICAgLnByb2JlID0gc25kX215Y2hpcF9wcm9iZSwKLSAgICAgICAgICAucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX215Y2hpcF9yZW1vdmUpLAotICB9OwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnByb2JlPC9zdHJ1Y3RmaWVsZD4gYW5kCi0gICAgICA8c3RydWN0ZmllbGQ+cmVtb3ZlPC9zdHJ1Y3RmaWVsZD4gZnVuY3Rpb25zIGhhdmUgYWxyZWFkeQotICAgICAgYmVlbiBkZWZpbmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9ucy4KLSAgICAgIFRoZSA8c3RydWN0ZmllbGQ+cmVtb3ZlPC9zdHJ1Y3RmaWVsZD4gZnVuY3Rpb24gc2hvdWxkCi0gICAgICBiZSBkZWZpbmVkIHdpdGggdGhlIAotICAgICAgPGZ1bmN0aW9uPl9fZGV2ZXhpdF9wKCk8L2Z1bmN0aW9uPiBtYWNybywgc28gdGhhdCBpdCdzIG5vdAotICAgICAgZGVmaW5lZCBmb3IgYnVpbHQtaW4gKGFuZCBub24taG90LXBsdWdnYWJsZSkgY2FzZS4gVGhlCi0gICAgICA8c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+IAotICAgICAgZmllbGQgaXMgdGhlIG5hbWUgc3RyaW5nIG9mIHRoaXMgZGV2aWNlLiBOb3RlIHRoYXQgeW91IG11c3Qgbm90Ci0gICAgICB1c2UgYSBzbGFzaCA8cXVvdGU+LzwvcXVvdGU+IGluIHRoaXMgc3RyaW5nLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFuZCBhdCBsYXN0LCB0aGUgbW9kdWxlIGVudHJpZXM6Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBfX2luaXQgYWxzYV9jYXJkX215Y2hpcF9pbml0KHZvaWQpCi0gIHsKLSAgICAgICAgICByZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKLSAgfQotCi0gIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX2NhcmRfbXljaGlwX2V4aXQodm9pZCkKLSAgewotICAgICAgICAgIHBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKLSAgfQotCi0gIG1vZHVsZV9pbml0KGFsc2FfY2FyZF9teWNoaXBfaW5pdCkKLSAgbW9kdWxlX2V4aXQoYWxzYV9jYXJkX215Y2hpcF9leGl0KQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBOb3RlIHRoYXQgdGhlc2UgbW9kdWxlIGVudHJpZXMgYXJlIHRhZ2dlZCB3aXRoCi0gICAgICA8cGFyYW1ldGVyPl9faW5pdDwvcGFyYW1ldGVyPiBhbmQgCi0gICAgICA8cGFyYW1ldGVyPl9fZXhpdDwvcGFyYW1ldGVyPiBwcmVmaXhlcywgbm90Ci0gICAgICA8cGFyYW1ldGVyPl9fZGV2aW5pdDwvcGFyYW1ldGVyPiBub3IKLSAgICAgIDxwYXJhbWV0ZXI+X19kZXZleGl0PC9wYXJhbWV0ZXI+LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgT2gsIG9uZSB0aGluZyB3YXMgZm9yZ290dGVuLiBJZiB5b3UgaGF2ZSBubyBleHBvcnRlZCBzeW1ib2xzLAotICAgICAgICB5b3UgbmVlZCB0byBkZWNsYXJlIGl0IGluIDIuMiBvciAyLjQga2VybmVscyAoaXQncyBub3QgbmVjZXNzYXJ5IGluIDIuNiBrZXJuZWxzKS4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBFWFBPUlRfTk9fU1lNQk9MUzsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIFRoYXQncyBhbGwhCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIFBDTSBJbnRlcmZhY2UgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJwY20taW50ZXJmYWNlIj4KLSAgICA8dGl0bGU+UENNIEludGVyZmFjZTwvdGl0bGU+Ci0KLSAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1nZW5lcmFsIj4KLSAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgUENNIG1pZGRsZSBsYXllciBvZiBBTFNBIGlzIHF1aXRlIHBvd2VyZnVsIGFuZCBpdCBpcyBvbmx5Ci0gICAgICBuZWNlc3NhcnkgZm9yIGVhY2ggZHJpdmVyIHRvIGltcGxlbWVudCB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucwotICAgICAgdG8gYWNjZXNzIGl0cyBoYXJkd2FyZS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEZvciBhY2Nlc3NpbmcgdG8gdGhlIFBDTSBsYXllciwgeW91IG5lZWQgdG8gaW5jbHVkZQotICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPiBmaXJzdC4gSW4gYWRkaXRpb24sCi0gICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3BjbV9wYXJhbXMuaCZndDs8L2ZpbGVuYW1lPiBtaWdodCBiZSBuZWVkZWQKLSAgICAgIGlmIHlvdSBhY2Nlc3MgdG8gc29tZSBmdW5jdGlvbnMgcmVsYXRlZCB3aXRoIGh3X3BhcmFtLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEVhY2ggY2FyZCBkZXZpY2UgY2FuIGhhdmUgdXAgdG8gZm91ciBwY20gaW5zdGFuY2VzLiBBIHBjbQotICAgICAgaW5zdGFuY2UgY29ycmVzcG9uZHMgdG8gYSBwY20gZGV2aWNlIGZpbGUuIFRoZSBsaW1pdGF0aW9uIG9mCi0gICAgICBudW1iZXIgb2YgaW5zdGFuY2VzIGNvbWVzIG9ubHkgZnJvbSB0aGUgYXZhaWxhYmxlIGJpdCBzaXplIG9mCi0gICAgICB0aGUgTGludXgncyBkZXZpY2UgbnVtYmVycy4gT25jZSB3aGVuIDY0Yml0IGRldmljZSBudW1iZXIgaXMKLSAgICAgIHVzZWQsIHdlJ2xsIGhhdmUgbW9yZSBwY20gaW5zdGFuY2VzIGF2YWlsYWJsZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBBIHBjbSBpbnN0YW5jZSBjb25zaXN0cyBvZiBwY20gcGxheWJhY2sgYW5kIGNhcHR1cmUgc3RyZWFtcywKLSAgICAgIGFuZCBlYWNoIHBjbSBzdHJlYW0gY29uc2lzdHMgb2Ygb25lIG9yIG1vcmUgcGNtIHN1YnN0cmVhbXMuIFNvbWUKLSAgICAgIHNvdW5kY2FyZHMgc3VwcG9ydCBtdWx0aXBsZSBwbGF5YmFjayBmdW5jdGlvbnMuIEZvciBleGFtcGxlLAotICAgICAgZW11MTBrMSBoYXMgYSBQQ00gcGxheWJhY2sgb2YgMzIgc3RlcmVvIHN1YnN0cmVhbXMuIEluIHRoaXMgY2FzZSwgYXQKLSAgICAgIGVhY2ggb3BlbiwgYSBmcmVlIHN1YnN0cmVhbSBpcyAodXN1YWxseSkgYXV0b21hdGljYWxseSBjaG9zZW4KLSAgICAgIGFuZCBvcGVuZWQuIE1lYW53aGlsZSwgd2hlbiBvbmx5IG9uZSBzdWJzdHJlYW0gZXhpc3RzIGFuZCBpdCB3YXMKLSAgICAgIGFscmVhZHkgb3BlbmVkLCB0aGUgc3VjY2Vzc2Z1bCBvcGVuIHdpbGwgZWl0aGVyIGJsb2NrCi0gICAgICBvciBlcnJvciB3aXRoIDxjb25zdGFudD5FQUdBSU48L2NvbnN0YW50PiBhY2NvcmRpbmcgdG8gdGhlCi0gICAgICBmaWxlIG9wZW4gbW9kZS4gQnV0IHlvdSBkb24ndCBoYXZlIHRvIGNhcmUgYWJvdXQgc3VjaCBkZXRhaWxzIGluIHlvdXIKLSAgICAgIGRyaXZlci4gVGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2lsbCB0YWtlIGNhcmUgb2Ygc3VjaCB3b3JrLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWV4YW1wbGUiPgotICAgICAgPHRpdGxlPkZ1bGwgQ29kZSBFeGFtcGxlPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIGV4YW1wbGUgY29kZSBiZWxvdyBkb2VzIG5vdCBpbmNsdWRlIGFueSBoYXJkd2FyZSBhY2Nlc3MKLSAgICAgIHJvdXRpbmVzIGJ1dCBzaG93cyBvbmx5IHRoZSBza2VsZXRvbiwgaG93IHRvIGJ1aWxkIHVwIHRoZSBQQ00KLSAgICAgIGludGVyZmFjZXMuCi0KLSAgICAgICAgPGV4YW1wbGU+Ci0gICAgICAgICAgPHRpdGxlPlBDTSBFeGFtcGxlIENvZGU8L3RpdGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICAjaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0gIC4uLi4KLQotICAvKiBoYXJkd2FyZSBkZWZpbml0aW9uICovCi0gIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfbXljaGlwX3BsYXliYWNrX2h3ID0gewotICAgICAgICAgIC5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAotICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLSAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Ci0gICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCksCi0gICAgICAgICAgLmZvcm1hdHMgPSAgICAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLSAgICAgICAgICAucmF0ZXMgPSAgICAgICAgICAgIFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCi0gICAgICAgICAgLnJhdGVfbWluID0gICAgICAgICA4MDAwLAotICAgICAgICAgIC5yYXRlX21heCA9ICAgICAgICAgNDgwMDAsCi0gICAgICAgICAgLmNoYW5uZWxzX21pbiA9ICAgICAyLAotICAgICAgICAgIC5jaGFubmVsc19tYXggPSAgICAgMiwKLSAgICAgICAgICAuYnVmZmVyX2J5dGVzX21heCA9IDMyNzY4LAotICAgICAgICAgIC5wZXJpb2RfYnl0ZXNfbWluID0gNDA5NiwKLSAgICAgICAgICAucGVyaW9kX2J5dGVzX21heCA9IDMyNzY4LAotICAgICAgICAgIC5wZXJpb2RzX21pbiA9ICAgICAgMSwKLSAgICAgICAgICAucGVyaW9kc19tYXggPSAgICAgIDEwMjQsCi0gIH07Ci0KLSAgLyogaGFyZHdhcmUgZGVmaW5pdGlvbiAqLwotICBzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX215Y2hpcF9jYXB0dXJlX2h3ID0gewotICAgICAgICAgIC5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAotICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLSAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Ci0gICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCksCi0gICAgICAgICAgLmZvcm1hdHMgPSAgICAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLSAgICAgICAgICAucmF0ZXMgPSAgICAgICAgICAgIFNORFJWX1BDTV9SQVRFXzgwMDBfNDgwMDAsCi0gICAgICAgICAgLnJhdGVfbWluID0gICAgICAgICA4MDAwLAotICAgICAgICAgIC5yYXRlX21heCA9ICAgICAgICAgNDgwMDAsCi0gICAgICAgICAgLmNoYW5uZWxzX21pbiA9ICAgICAyLAotICAgICAgICAgIC5jaGFubmVsc19tYXggPSAgICAgMiwKLSAgICAgICAgICAuYnVmZmVyX2J5dGVzX21heCA9IDMyNzY4LAotICAgICAgICAgIC5wZXJpb2RfYnl0ZXNfbWluID0gNDA5NiwKLSAgICAgICAgICAucGVyaW9kX2J5dGVzX21heCA9IDMyNzY4LAotICAgICAgICAgIC5wZXJpb2RzX21pbiA9ICAgICAgMSwKLSAgICAgICAgICAucGVyaW9kc19tYXggPSAgICAgIDEwMjQsCi0gIH07Ci0KLSAgLyogb3BlbiBjYWxsYmFjayAqLwotICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0gICAgICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQotICAgICAgICAgIHJ1bnRpbWUtPmh3ID0gc25kX215Y2hpcF9wbGF5YmFja19odzsKLSAgICAgICAgICAvKiBtb3JlIGhhcmR3YXJlLWluaXRpYWxpemF0aW9uIHdpbGwgYmUgZG9uZSBoZXJlICovCi0gICAgICAgICAgLi4uLgotICAgICAgICAgIHJldHVybiAwOwotICB9Ci0KLSAgLyogY2xvc2UgY2FsbGJhY2sgKi8KLSAgc3RhdGljIGludCBzbmRfbXljaGlwX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLSAgICAgICAgICAvKiB0aGUgaGFyZHdhcmUtc3BlY2lmaWMgY29kZXMgd2lsbCBiZSBoZXJlICovCi0gICAgICAgICAgLi4uLgotICAgICAgICAgIHJldHVybiAwOwotCi0gIH0KLQotICAvKiBvcGVuIGNhbGxiYWNrICovCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0KLSAgICAgICAgICBydW50aW1lLT5odyA9IHNuZF9teWNoaXBfY2FwdHVyZV9odzsKLSAgICAgICAgICAvKiBtb3JlIGhhcmR3YXJlLWluaXRpYWxpemF0aW9uIHdpbGwgYmUgZG9uZSBoZXJlICovCi0gICAgICAgICAgLi4uLgotICAgICAgICAgIHJldHVybiAwOwotICB9Ci0KLSAgLyogY2xvc2UgY2FsbGJhY2sgKi8KLSAgc3RhdGljIGludCBzbmRfbXljaGlwX2NhcHR1cmVfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotICAgICAgICAgIC8qIHRoZSBoYXJkd2FyZS1zcGVjaWZpYyBjb2RlcyB3aWxsIGJlIGhlcmUgKi8KLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgfQotCi0gIC8qIGh3X3BhcmFtcyBjYWxsYmFjayAqLwotICBzdGF0aWMgaW50IHNuZF9teWNoaXBfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKLSAgewotICAgICAgICAgIHJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Ci0gIH0KLQotICAvKiBod19mcmVlIGNhbGxiYWNrICovCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21faHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIHJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Ci0gIH0KLQotICAvKiBwcmVwYXJlIGNhbGxiYWNrICovCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21fcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0gICAgICAgICAgc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQotICAgICAgICAgIC8qIHNldCB1cCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICogZm9yIGV4YW1wbGUuLi4KLSAgICAgICAgICAgKi8KLSAgICAgICAgICBteWNoaXBfc2V0X3NhbXBsZV9mb3JtYXQoY2hpcCwgcnVudGltZS0+Zm9ybWF0KTsKLSAgICAgICAgICBteWNoaXBfc2V0X3NhbXBsZV9yYXRlKGNoaXAsIHJ1bnRpbWUtPnJhdGUpOwotICAgICAgICAgIG15Y2hpcF9zZXRfY2hhbm5lbHMoY2hpcCwgcnVudGltZS0+Y2hhbm5lbHMpOwotICAgICAgICAgIG15Y2hpcF9zZXRfZG1hX3NldHVwKGNoaXAsIHJ1bnRpbWUtPmRtYV9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAtPmJ1ZmZlcl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaXAtPnBlcmlvZF9zaXplKTsKLSAgICAgICAgICByZXR1cm4gMDsKLSAgfQotCi0gIC8qIHRyaWdnZXIgY2FsbGJhY2sgKi8KLSAgc3RhdGljIGludCBzbmRfbXljaGlwX3BjbV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNtZCkKLSAgewotICAgICAgICAgIHN3aXRjaCAoY21kKSB7Ci0gICAgICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLSAgICAgICAgICAgICAgICAgIC8qIGRvIHNvbWV0aGluZyB0byBzdGFydCB0aGUgUENNIGVuZ2luZSAqLwotICAgICAgICAgICAgICAgICAgLi4uLgotICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgotICAgICAgICAgICAgICAgICAgLyogZG8gc29tZXRoaW5nIHRvIHN0b3AgdGhlIFBDTSBlbmdpbmUgKi8KLSAgICAgICAgICAgICAgICAgIC4uLi4KLSAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICB9Ci0gIH0KLQotICAvKiBwb2ludGVyIGNhbGxiYWNrICovCi0gIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAotICBzbmRfbXljaGlwX3BjbV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLSAgICAgICAgICB1bnNpZ25lZCBpbnQgY3VycmVudF9wdHI7Ci0KLSAgICAgICAgICAvKiBnZXQgdGhlIGN1cnJlbnQgaGFyZHdhcmUgcG9pbnRlciAqLwotICAgICAgICAgIGN1cnJlbnRfcHRyID0gbXljaGlwX2dldF9od19wb2ludGVyKGNoaXApOwotICAgICAgICAgIHJldHVybiBjdXJyZW50X3B0cjsKLSAgfQotCi0gIC8qIG9wZXJhdG9ycyAqLwotICBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9teWNoaXBfcGxheWJhY2tfb3BzID0gewotICAgICAgICAgIC5vcGVuID0gICAgICAgIHNuZF9teWNoaXBfcGxheWJhY2tfb3BlbiwKLSAgICAgICAgICAuY2xvc2UgPSAgICAgICBzbmRfbXljaGlwX3BsYXliYWNrX2Nsb3NlLAotICAgICAgICAgIC5pb2N0bCA9ICAgICAgIHNuZF9wY21fbGliX2lvY3RsLAotICAgICAgICAgIC5od19wYXJhbXMgPSAgIHNuZF9teWNoaXBfcGNtX2h3X3BhcmFtcywKLSAgICAgICAgICAuaHdfZnJlZSA9ICAgICBzbmRfbXljaGlwX3BjbV9od19mcmVlLAotICAgICAgICAgIC5wcmVwYXJlID0gICAgIHNuZF9teWNoaXBfcGNtX3ByZXBhcmUsCi0gICAgICAgICAgLnRyaWdnZXIgPSAgICAgc25kX215Y2hpcF9wY21fdHJpZ2dlciwKLSAgICAgICAgICAucG9pbnRlciA9ICAgICBzbmRfbXljaGlwX3BjbV9wb2ludGVyLAotICB9OwotCi0gIC8qIG9wZXJhdG9ycyAqLwotICBzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9teWNoaXBfY2FwdHVyZV9vcHMgPSB7Ci0gICAgICAgICAgLm9wZW4gPSAgICAgICAgc25kX215Y2hpcF9jYXB0dXJlX29wZW4sCi0gICAgICAgICAgLmNsb3NlID0gICAgICAgc25kX215Y2hpcF9jYXB0dXJlX2Nsb3NlLAotICAgICAgICAgIC5pb2N0bCA9ICAgICAgIHNuZF9wY21fbGliX2lvY3RsLAotICAgICAgICAgIC5od19wYXJhbXMgPSAgIHNuZF9teWNoaXBfcGNtX2h3X3BhcmFtcywKLSAgICAgICAgICAuaHdfZnJlZSA9ICAgICBzbmRfbXljaGlwX3BjbV9od19mcmVlLAotICAgICAgICAgIC5wcmVwYXJlID0gICAgIHNuZF9teWNoaXBfcGNtX3ByZXBhcmUsCi0gICAgICAgICAgLnRyaWdnZXIgPSAgICAgc25kX215Y2hpcF9wY21fdHJpZ2dlciwKLSAgICAgICAgICAucG9pbnRlciA9ICAgICBzbmRfbXljaGlwX3BjbV9wb2ludGVyLAotICB9OwotCi0gIC8qCi0gICAqICBkZWZpbml0aW9ucyBvZiBjYXB0dXJlIGFyZSBvbWl0dGVkIGhlcmUuLi4KLSAgICovCi0KLSAgLyogY3JlYXRlIGEgcGNtIGRldmljZSAqLwotICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX25ld19wY20oc3RydWN0IG15Y2hpcCAqY2hpcCkKLSAgewotICAgICAgICAgIHN0cnVjdCBzbmRfcGNtICpwY207Ci0gICAgICAgICAgaW50IGVycjsKLQotICAgICAgICAgIGVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJNeSBDaGlwIiwgMCwgMSwgMSwgJnBjbSk7Ci0gICAgICAgICAgaWYgKGVyciA8IDApIAotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0gICAgICAgICAgc3RyY3B5KHBjbS0+bmFtZSwgIk15IENoaXAiKTsKLSAgICAgICAgICBjaGlwLT5wY20gPSBwY207Ci0gICAgICAgICAgLyogc2V0IG9wZXJhdG9ycyAqLwotICAgICAgICAgIHNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZzbmRfbXljaGlwX3BsYXliYWNrX29wcyk7Ci0gICAgICAgICAgc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc25kX215Y2hpcF9jYXB0dXJlX29wcyk7Ci0gICAgICAgICAgLyogcHJlLWFsbG9jYXRpb24gb2YgYnVmZmVycyAqLwotICAgICAgICAgIC8qIE5PVEU6IHRoaXMgbWF5IGZhaWwgKi8KLSAgICAgICAgICBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1jb25zdHJ1Y3RvciI+Ci0gICAgICA8dGl0bGU+Q29uc3RydWN0b3I8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEEgcGNtIGluc3RhbmNlIGlzIGFsbG9jYXRlZCBieSB0aGUgPGZ1bmN0aW9uPnNuZF9wY21fbmV3KCk8L2Z1bmN0aW9uPgotICAgICAgZnVuY3Rpb24uIEl0IHdvdWxkIGJlIGJldHRlciB0byBjcmVhdGUgYSBjb25zdHJ1Y3RvciBmb3IgcGNtLAotICAgICAgbmFtZWx5LCAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX25ld19wY20oc3RydWN0IG15Y2hpcCAqY2hpcCkKLSAgewotICAgICAgICAgIHN0cnVjdCBzbmRfcGNtICpwY207Ci0gICAgICAgICAgaW50IGVycjsKLQotICAgICAgICAgIGVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJNeSBDaGlwIiwgMCwgMSwgMSwgJnBjbSk7Ci0gICAgICAgICAgaWYgKGVyciA8IDApIAotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICBwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0gICAgICAgICAgc3RyY3B5KHBjbS0+bmFtZSwgIk15IENoaXAiKTsKLSAgICAgICAgICBjaGlwLT5wY20gPSBwY207Ci0JICAuLi4uCi0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxmdW5jdGlvbj5zbmRfcGNtX25ldygpPC9mdW5jdGlvbj4gZnVuY3Rpb24gdGFrZXMgZm91cgotICAgICAgYXJndW1lbnRzLiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNhcmQgcG9pbnRlciB0byB3aGljaCB0aGlzCi0gICAgICBwY20gaXMgYXNzaWduZWQsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBJRCBzdHJpbmcuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHRoaXJkIGFyZ3VtZW50ICg8cGFyYW1ldGVyPmluZGV4PC9wYXJhbWV0ZXI+LCAwIGluIHRoZQotICAgICAgYWJvdmUpIGlzIHRoZSBpbmRleCBvZiB0aGlzIG5ldyBwY20uIEl0IGJlZ2lucyBmcm9tIHplcm8uIElmCi0gICAgICB5b3UgY3JlYXRlIG1vcmUgdGhhbiBvbmUgcGNtIGluc3RhbmNlcywgc3BlY2lmeSB0aGUKLSAgICAgIGRpZmZlcmVudCBudW1iZXJzIGluIHRoaXMgYXJndW1lbnQuIEZvciBleGFtcGxlLAotICAgICAgPHBhcmFtZXRlcj5pbmRleDwvcGFyYW1ldGVyPiA9IDEgZm9yIHRoZSBzZWNvbmQgUENNIGRldmljZS4gIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZvdXJ0aCBhbmQgZmlmdGggYXJndW1lbnRzIGFyZSB0aGUgbnVtYmVyIG9mIHN1YnN0cmVhbXMKLSAgICAgIGZvciBwbGF5YmFjayBhbmQgY2FwdHVyZSwgcmVzcGVjdGl2ZWx5LiBIZXJlIDEgaXMgdXNlZCBmb3IKLSAgICAgIGJvdGggYXJndW1lbnRzLiBXaGVuIG5vIHBsYXliYWNrIG9yIGNhcHR1cmUgc3Vic3RyZWFtcyBhcmUgYXZhaWxhYmxlLAotICAgICAgcGFzcyAwIHRvIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSWYgYSBjaGlwIHN1cHBvcnRzIG11bHRpcGxlIHBsYXliYWNrcyBvciBjYXB0dXJlcywgeW91IGNhbgotICAgICAgc3BlY2lmeSBtb3JlIG51bWJlcnMsIGJ1dCB0aGV5IG11c3QgYmUgaGFuZGxlZCBwcm9wZXJseSBpbgotICAgICAgb3Blbi9jbG9zZSwgZXRjLiBjYWxsYmFja3MuICBXaGVuIHlvdSBuZWVkIHRvIGtub3cgd2hpY2gKLSAgICAgIHN1YnN0cmVhbSB5b3UgYXJlIHJlZmVycmluZyB0bywgdGhlbiBpdCBjYW4gYmUgb2J0YWluZWQgZnJvbQotICAgICAgc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9wY21fc3Vic3RyZWFtPC9zdHJ1Y3RuYW1lPiBkYXRhIHBhc3NlZCB0byBlYWNoIGNhbGxiYWNrCi0gICAgICBhcyBmb2xsb3dzOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKLSAgaW50IGluZGV4ID0gc3Vic3RyZWFtLT5udW1iZXI7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFmdGVyIHRoZSBwY20gaXMgY3JlYXRlZCwgeW91IG5lZWQgdG8gc2V0IG9wZXJhdG9ycyBmb3IgZWFjaAotICAgICAgICBwY20gc3RyZWFtLiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAotICAgICAgICAgICAgICAgICAgJnNuZF9teWNoaXBfcGxheWJhY2tfb3BzKTsKLSAgc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAotICAgICAgICAgICAgICAgICAgJnNuZF9teWNoaXBfY2FwdHVyZV9vcHMpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgb3BlcmF0b3JzIGFyZSBkZWZpbmVkIHR5cGljYWxseSBsaWtlIHRoaXM6Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbXljaGlwX3BsYXliYWNrX29wcyA9IHsKLSAgICAgICAgICAub3BlbiA9ICAgICAgICBzbmRfbXljaGlwX3BjbV9vcGVuLAotICAgICAgICAgIC5jbG9zZSA9ICAgICAgIHNuZF9teWNoaXBfcGNtX2Nsb3NlLAotICAgICAgICAgIC5pb2N0bCA9ICAgICAgIHNuZF9wY21fbGliX2lvY3RsLAotICAgICAgICAgIC5od19wYXJhbXMgPSAgIHNuZF9teWNoaXBfcGNtX2h3X3BhcmFtcywKLSAgICAgICAgICAuaHdfZnJlZSA9ICAgICBzbmRfbXljaGlwX3BjbV9od19mcmVlLAotICAgICAgICAgIC5wcmVwYXJlID0gICAgIHNuZF9teWNoaXBfcGNtX3ByZXBhcmUsCi0gICAgICAgICAgLnRyaWdnZXIgPSAgICAgc25kX215Y2hpcF9wY21fdHJpZ2dlciwKLSAgICAgICAgICAucG9pbnRlciA9ICAgICBzbmRfbXljaGlwX3BjbV9wb2ludGVyLAotICB9OwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgQWxsIHRoZSBjYWxsYmFja3MgYXJlIGRlc2NyaWJlZCBpbiB0aGUKLSAgICAgICAgPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMiPjxjaXRldGl0bGU+Ci0gICAgICAgIE9wZXJhdG9yczwvY2l0ZXRpdGxlPjwvbGluaz4gc3Vic2VjdGlvbi4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFmdGVyIHNldHRpbmcgdGhlIG9wZXJhdG9ycywgeW91IHByb2JhYmx5IHdpbGwgd2FudCB0bwotICAgICAgICBwcmUtYWxsb2NhdGUgdGhlIGJ1ZmZlci4gRm9yIHRoZSBwcmUtYWxsb2NhdGlvbiwgc2ltcGx5IGNhbGwKLSAgICAgICAgdGhlIGZvbGxvd2luZzogCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfZG1hX3BjaV9kYXRhKGNoaXAtPnBjaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICBJdCB3aWxsIGFsbG9jYXRlIGEgYnVmZmVyIHVwIHRvIDY0a0IgYXMgZGVmYXVsdC4KLSAgICAgIEJ1ZmZlciBtYW5hZ2VtZW50IGRldGFpbHMgd2lsbCBiZSBkZXNjcmliZWQgaW4gdGhlIGxhdGVyIHNlY3Rpb24gPGxpbmsKLSAgICAgIGxpbmtlbmQ9ImJ1ZmZlci1hbmQtbWVtb3J5Ij48Y2l0ZXRpdGxlPkJ1ZmZlciBhbmQgTWVtb3J5Ci0gICAgICBNYW5hZ2VtZW50PC9jaXRldGl0bGU+PC9saW5rPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBBZGRpdGlvbmFsbHksIHlvdSBjYW4gc2V0IHNvbWUgZXh0cmEgaW5mb3JtYXRpb24gZm9yIHRoaXMgcGNtCi0gICAgICAgIGluIHBjbS0mZ3Q7aW5mb19mbGFncy4KLSAgICAgICAgVGhlIGF2YWlsYWJsZSB2YWx1ZXMgYXJlIGRlZmluZWQgYXMKLSAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1hYWDwvY29uc3RhbnQ+IGluCi0gICAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvYXNvdW5kLmgmZ3Q7PC9maWxlbmFtZT4sIHdoaWNoIGlzIHVzZWQgZm9yCi0gICAgICAgIHRoZSBoYXJkd2FyZSBkZWZpbml0aW9uIChkZXNjcmliZWQgbGF0ZXIpLiBXaGVuIHlvdXIgc291bmRjaGlwCi0gICAgICAgIHN1cHBvcnRzIG9ubHkgaGFsZi1kdXBsZXgsIHNwZWNpZnkgbGlrZSB0aGlzOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBwY20tPmluZm9fZmxhZ3MgPSBTTkRSVl9QQ01fSU5GT19IQUxGX0RVUExFWDsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWRlc3RydWN0b3IiPgotICAgICAgPHRpdGxlPi4uLiBBbmQgdGhlIERlc3RydWN0b3I/PC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZGVzdHJ1Y3RvciBmb3IgYSBwY20gaW5zdGFuY2UgaXMgbm90IGFsd2F5cwotICAgICAgbmVjZXNzYXJ5LiBTaW5jZSB0aGUgcGNtIGRldmljZSB3aWxsIGJlIHJlbGVhc2VkIGJ5IHRoZSBtaWRkbGUKLSAgICAgIGxheWVyIGNvZGUgYXV0b21hdGljYWxseSwgeW91IGRvbid0IGhhdmUgdG8gY2FsbCB0aGUgZGVzdHJ1Y3RvcgotICAgICAgZXhwbGljaXRseS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBkZXN0cnVjdG9yIHdvdWxkIGJlIG5lY2Vzc2FyeSBpZiB5b3UgY3JlYXRlZAotICAgICAgICBzcGVjaWFsIHJlY29yZHMgaW50ZXJuYWxseSBhbmQgbmVlZGVkIHRvIHJlbGVhc2UgdGhlbS4gSW4gc3VjaCBhCi0gICAgICAgIGNhc2UsIHNldCB0aGUgZGVzdHJ1Y3RvciBmdW5jdGlvbiB0bwotICAgICAgICBwY20tJmd0O3ByaXZhdGVfZnJlZTogCi0KLSAgICAgICAgPGV4YW1wbGU+Ci0gICAgICAgICAgPHRpdGxlPlBDTSBJbnN0YW5jZSB3aXRoIGEgRGVzdHJ1Y3RvcjwvdGl0bGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyB2b2lkIG15Y2hpcF9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fY2hpcChwY20pOwotICAgICAgICAgIC8qIGZyZWUgeW91ciBvd24gZGF0YSAqLwotICAgICAgICAgIGtmcmVlKGNoaXAtPm15X3ByaXZhdGVfcGNtX2RhdGEpOwotICAgICAgICAgIC8qIGRvIHdoYXQgeW91IGxpa2UgZWxzZSAqLwotICAgICAgICAgIC4uLi4KLSAgfQotCi0gIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfbmV3X3BjbShzdHJ1Y3QgbXljaGlwICpjaGlwKQotICB7Ci0gICAgICAgICAgc3RydWN0IHNuZF9wY20gKnBjbTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgLyogYWxsb2NhdGUgeW91ciBvd24gZGF0YSAqLwotICAgICAgICAgIGNoaXAtPm15X3ByaXZhdGVfcGNtX2RhdGEgPSBrbWFsbG9jKC4uLik7Ci0gICAgICAgICAgLyogc2V0IHRoZSBkZXN0cnVjdG9yICovCi0gICAgICAgICAgcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOwotICAgICAgICAgIHBjbS0+cHJpdmF0ZV9mcmVlID0gbXljaGlwX3BjbV9mcmVlOwotICAgICAgICAgIC4uLi4KLSAgfQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9leGFtcGxlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUiPgotICAgICAgPHRpdGxlPlJ1bnRpbWUgUG9pbnRlciAtIFRoZSBDaGVzdCBvZiBQQ00gSW5mb3JtYXRpb248L3RpdGxlPgotCTxwYXJhPgotCSAgV2hlbiB0aGUgUENNIHN1YnN0cmVhbSBpcyBvcGVuZWQsIGEgUENNIHJ1bnRpbWUgaW5zdGFuY2UgaXMKLQlhbGxvY2F0ZWQgYW5kIGFzc2lnbmVkIHRvIHRoZSBzdWJzdHJlYW0uIFRoaXMgcG9pbnRlciBpcwotCWFjY2Vzc2libGUgdmlhIDxjb25zdGFudD5zdWJzdHJlYW0tJmd0O3J1bnRpbWU8L2NvbnN0YW50Pi4KLQlUaGlzIHJ1bnRpbWUgcG9pbnRlciBob2xkcyBtb3N0IGluZm9ybWF0aW9uIHlvdSBuZWVkCi0JdG8gY29udHJvbCB0aGUgUENNOiB0aGUgY29weSBvZiBod19wYXJhbXMgYW5kIHN3X3BhcmFtcyBjb25maWd1cmF0aW9ucywgdGhlIGJ1ZmZlcgotCXBvaW50ZXJzLCBtbWFwIHJlY29yZHMsIHNwaW5sb2NrcywgZXRjLgotCTwvcGFyYT4KLQotCTxwYXJhPgotCVRoZSBkZWZpbml0aW9uIG9mIHJ1bnRpbWUgaW5zdGFuY2UgaXMgZm91bmQgaW4KLQk8ZmlsZW5hbWU+Jmx0O3NvdW5kL3BjbS5oJmd0OzwvZmlsZW5hbWU+LiAgSGVyZSBhcmUKLSAgICAgICB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlOgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLXN0cnVjdCBfc25kX3BjbV9ydW50aW1lIHsKLQkvKiAtLSBTdGF0dXMgLS0gKi8KLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnRyaWdnZXJfbWFzdGVyOwotCXNuZF90aW1lc3RhbXBfdCB0cmlnZ2VyX3RzdGFtcDsJLyogdHJpZ2dlciB0aW1lc3RhbXAgKi8KLQlpbnQgb3ZlcnJhbmdlOwotCXNuZF9wY21fdWZyYW1lc190IGF2YWlsX21heDsKLQlzbmRfcGNtX3VmcmFtZXNfdCBod19wdHJfYmFzZTsJLyogUG9zaXRpb24gYXQgYnVmZmVyIHJlc3RhcnQgKi8KLQlzbmRfcGNtX3VmcmFtZXNfdCBod19wdHJfaW50ZXJydXB0OyAvKiBQb3NpdGlvbiBhdCBpbnRlcnJ1cHQgdGltZSovCi0KLQkvKiAtLSBIVyBwYXJhbXMgLS0gKi8KLQlzbmRfcGNtX2FjY2Vzc190IGFjY2VzczsJLyogYWNjZXNzIG1vZGUgKi8KLQlzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdDsJLyogU05EUlZfUENNX0ZPUk1BVF8qICovCi0Jc25kX3BjbV9zdWJmb3JtYXRfdCBzdWJmb3JtYXQ7CS8qIHN1YmZvcm1hdCAqLwotCXVuc2lnbmVkIGludCByYXRlOwkJLyogcmF0ZSBpbiBIeiAqLwotCXVuc2lnbmVkIGludCBjaGFubmVsczsJCS8qIGNoYW5uZWxzICovCi0Jc25kX3BjbV91ZnJhbWVzX3QgcGVyaW9kX3NpemU7CS8qIHBlcmlvZCBzaXplICovCi0JdW5zaWduZWQgaW50IHBlcmlvZHM7CQkvKiBwZXJpb2RzICovCi0Jc25kX3BjbV91ZnJhbWVzX3QgYnVmZmVyX3NpemU7CS8qIGJ1ZmZlciBzaXplICovCi0JdW5zaWduZWQgaW50IHRpY2tfdGltZTsJCS8qIHRpY2sgdGltZSAqLwotCXNuZF9wY21fdWZyYW1lc190IG1pbl9hbGlnbjsJLyogTWluIGFsaWdubWVudCBmb3IgdGhlIGZvcm1hdCAqLwotCXNpemVfdCBieXRlX2FsaWduOwotCXVuc2lnbmVkIGludCBmcmFtZV9iaXRzOwotCXVuc2lnbmVkIGludCBzYW1wbGVfYml0czsKLQl1bnNpZ25lZCBpbnQgaW5mbzsKLQl1bnNpZ25lZCBpbnQgcmF0ZV9udW07Ci0JdW5zaWduZWQgaW50IHJhdGVfZGVuOwotCi0JLyogLS0gU1cgcGFyYW1zIC0tICovCi0Jc3RydWN0IHRpbWVzcGVjIHRzdGFtcF9tb2RlOwkvKiBtbWFwIHRpbWVzdGFtcCBpcyB1cGRhdGVkICovCi0gIAl1bnNpZ25lZCBpbnQgcGVyaW9kX3N0ZXA7Ci0JdW5zaWduZWQgaW50IHNsZWVwX21pbjsJCS8qIG1pbiB0aWNrcyB0byBzbGVlcCAqLwotCXNuZF9wY21fdWZyYW1lc190IHN0YXJ0X3RocmVzaG9sZDsKLQlzbmRfcGNtX3VmcmFtZXNfdCBzdG9wX3RocmVzaG9sZDsKLQlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3RocmVzaG9sZDsgLyogU2lsZW5jZSBmaWxsaW5nIGhhcHBlbnMgd2hlbgotCQkJCQkJbm9pc2UgaXMgbmVhcmVzdCB0aGFuIHRoaXMgKi8KLQlzbmRfcGNtX3VmcmFtZXNfdCBzaWxlbmNlX3NpemU7CS8qIFNpbGVuY2UgZmlsbGluZyBzaXplICovCi0Jc25kX3BjbV91ZnJhbWVzX3QgYm91bmRhcnk7CS8qIHBvaW50ZXJzIHdyYXAgcG9pbnQgKi8KLQotCXNuZF9wY21fdWZyYW1lc190IHNpbGVuY2VkX3N0YXJ0OwotCXNuZF9wY21fdWZyYW1lc190IHNpbGVuY2VkX3NpemU7Ci0KLQlzbmRfcGNtX3N5bmNfaWRfdCBzeW5jOwkJLyogaGFyZHdhcmUgc3luY2hyb25pemF0aW9uIElEICovCi0KLQkvKiAtLSBtbWFwIC0tICovCi0Jdm9sYXRpbGUgc3RydWN0IHNuZF9wY21fbW1hcF9zdGF0dXMgKnN0YXR1czsKLQl2b2xhdGlsZSBzdHJ1Y3Qgc25kX3BjbV9tbWFwX2NvbnRyb2wgKmNvbnRyb2w7Ci0JYXRvbWljX3QgbW1hcF9jb3VudDsKLQotCS8qIC0tIGxvY2tpbmcgLyBzY2hlZHVsaW5nIC0tICovCi0Jc3BpbmxvY2tfdCBsb2NrOwotCXdhaXRfcXVldWVfaGVhZF90IHNsZWVwOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpY2tfdGltZXI7Ci0Jc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKLQotCS8qIC0tIHByaXZhdGUgc2VjdGlvbiAtLSAqLwotCXZvaWQgKnByaXZhdGVfZGF0YTsKLQl2b2lkICgqcHJpdmF0ZV9mcmVlKShzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKTsKLQotCS8qIC0tIGhhcmR3YXJlIGRlc2NyaXB0aW9uIC0tICovCi0Jc3RydWN0IHNuZF9wY21faGFyZHdhcmUgaHc7Ci0Jc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludHMgaHdfY29uc3RyYWludHM7Ci0KLQkvKiAtLSBpbnRlcnJ1cHQgY2FsbGJhY2tzIC0tICovCi0Jdm9pZCAoKnRyYW5zZmVyX2Fja19iZWdpbikoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwotCXZvaWQgKCp0cmFuc2Zlcl9hY2tfZW5kKShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7Ci0KLQkvKiAtLSB0aW1lciAtLSAqLwotCXVuc2lnbmVkIGludCB0aW1lcl9yZXNvbHV0aW9uOwkvKiB0aW1lciByZXNvbHV0aW9uICovCi0KLQkvKiAtLSBETUEgLS0gKi8gICAgICAgICAgIAotCXVuc2lnbmVkIGNoYXIgKmRtYV9hcmVhOwkvKiBETUEgYXJlYSAqLwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7CQkvKiBwaHlzaWNhbCBidXMgYWRkcmVzcyAobm90IGFjY2Vzc2libGUgZnJvbSBtYWluIENQVSkgKi8KLQlzaXplX3QgZG1hX2J5dGVzOwkJLyogc2l6ZSBvZiBETUEgYXJlYSAqLwotCi0Jc3RydWN0IHNuZF9kbWFfYnVmZmVyICpkbWFfYnVmZmVyX3A7CS8qIGFsbG9jYXRlZCBidWZmZXIgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NORF9QQ01fT1NTKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TU19NT0RVTEUpCi0JLyogLS0gT1NTIHRoaW5ncyAtLSAqLwotCXN0cnVjdCBzbmRfcGNtX29zc19ydW50aW1lIG9zczsKLSNlbmRpZgotfTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQkgIEZvciB0aGUgb3BlcmF0b3JzIChjYWxsYmFja3MpIG9mIGVhY2ggc291bmQgZHJpdmVyLCBtb3N0IG9mCi0JdGhlc2UgcmVjb3JkcyBhcmUgc3VwcG9zZWQgdG8gYmUgcmVhZC1vbmx5LiAgT25seSB0aGUgUENNCi0JbWlkZGxlLWxheWVyIGNoYW5nZXMgLyB1cGRhdGVzIHRoZW0uICBUaGUgZXhjZXB0aW9ucyBhcmUKLQl0aGUgaGFyZHdhcmUgZGVzY3JpcHRpb24gKGh3KSwgaW50ZXJydXB0IGNhbGxiYWNrcwotCSh0cmFuc2Zlcl9hY2tfeHh4KSwgRE1BIGJ1ZmZlciBpbmZvcm1hdGlvbiwgYW5kIHRoZSBwcml2YXRlCi0JZGF0YS4gIEJlc2lkZXMsIGlmIHlvdSB1c2UgdGhlIHN0YW5kYXJkIGJ1ZmZlciBhbGxvY2F0aW9uCi0JbWV0aG9kIHZpYSA8ZnVuY3Rpb24+c25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKCk8L2Z1bmN0aW9uPiwKLQl5b3UgZG9uJ3QgbmVlZCB0byBzZXQgdGhlIERNQSBidWZmZXIgaW5mb3JtYXRpb24gYnkgeW91cnNlbGYuCi0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JSW4gdGhlIHNlY3Rpb25zIGJlbG93LCBpbXBvcnRhbnQgcmVjb3JkcyBhcmUgZXhwbGFpbmVkLgotCTwvcGFyYT4KLQotCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtaHciPgotCTx0aXRsZT5IYXJkd2FyZSBEZXNjcmlwdGlvbjwvdGl0bGU+Ci0JPHBhcmE+Ci0JICBUaGUgaGFyZHdhcmUgZGVzY3JpcHRvciAoc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9wY21faGFyZHdhcmU8L3N0cnVjdG5hbWU+KQotCWNvbnRhaW5zIHRoZSBkZWZpbml0aW9ucyBvZiB0aGUgZnVuZGFtZW50YWwgaGFyZHdhcmUKLQljb25maWd1cmF0aW9uLiAgQWJvdmUgYWxsLCB5b3UnbGwgbmVlZCB0byBkZWZpbmUgdGhpcyBpbgotCTxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPjxjaXRldGl0bGU+Ci0JdGhlIG9wZW4gY2FsbGJhY2s8L2NpdGV0aXRsZT48L2xpbms+LgotCU5vdGUgdGhhdCB0aGUgcnVudGltZSBpbnN0YW5jZSBob2xkcyB0aGUgY29weSBvZiB0aGUKLQlkZXNjcmlwdG9yLCBub3QgdGhlIHBvaW50ZXIgdG8gdGhlIGV4aXN0aW5nIGRlc2NyaXB0b3IuICBUaGF0Ci0JaXMsIGluIHRoZSBvcGVuIGNhbGxiYWNrLCB5b3UgY2FuIG1vZGlmeSB0aGUgY29waWVkIGRlc2NyaXB0b3IKLQkoPGNvbnN0YW50PnJ1bnRpbWUtJmd0O2h3PC9jb25zdGFudD4pIGFzIHlvdSBuZWVkLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBtYXhpbXVtCi0JbnVtYmVyIG9mIGNoYW5uZWxzIGlzIDEgb25seSBvbiBzb21lIGNoaXAgbW9kZWxzLCB5b3UgY2FuCi0Jc3RpbGwgdXNlIHRoZSBzYW1lIGhhcmR3YXJlIGRlc2NyaXB0b3IgYW5kIGNoYW5nZSB0aGUKLQljaGFubmVsc19tYXggbGF0ZXI6Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0gICAgICAgICAgLi4uCi0gICAgICAgICAgcnVudGltZS0+aHcgPSBzbmRfbXljaGlwX3BsYXliYWNrX2h3OyAvKiBjb21tb24gZGVmaW5pdGlvbiAqLwotICAgICAgICAgIGlmIChjaGlwLT5tb2RlbCA9PSBWRVJZX09MRF9PTkUpCi0gICAgICAgICAgICAgICAgICBydW50aW1lLT5ody5jaGFubmVsc19tYXggPSAxOwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCTwvcGFyYT4KLQotCTxwYXJhPgotCSAgVHlwaWNhbGx5LCB5b3UnbGwgaGF2ZSBhIGhhcmR3YXJlIGRlc2NyaXB0b3IgYXMgYmVsb3c6Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX215Y2hpcF9wbGF5YmFja19odyA9IHsKLSAgICAgICAgICAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKLSAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8Ci0gICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQpLAotICAgICAgICAgIC5mb3JtYXRzID0gICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCi0gICAgICAgICAgLnJhdGVzID0gICAgICAgICAgICBTTkRSVl9QQ01fUkFURV84MDAwXzQ4MDAwLAotICAgICAgICAgIC5yYXRlX21pbiA9ICAgICAgICAgODAwMCwKLSAgICAgICAgICAucmF0ZV9tYXggPSAgICAgICAgIDQ4MDAwLAotICAgICAgICAgIC5jaGFubmVsc19taW4gPSAgICAgMiwKLSAgICAgICAgICAuY2hhbm5lbHNfbWF4ID0gICAgIDIsCi0gICAgICAgICAgLmJ1ZmZlcl9ieXRlc19tYXggPSAzMjc2OCwKLSAgICAgICAgICAucGVyaW9kX2J5dGVzX21pbiA9IDQwOTYsCi0gICAgICAgICAgLnBlcmlvZF9ieXRlc19tYXggPSAzMjc2OCwKLSAgICAgICAgICAucGVyaW9kc19taW4gPSAgICAgIDEsCi0gICAgICAgICAgLnBlcmlvZHNfbWF4ID0gICAgICAxMDI0LAotICB9OwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0JPGl0ZW1pemVkbGlzdD4KLQk8bGlzdGl0ZW0+PHBhcmE+Ci0gICAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pbmZvPC9zdHJ1Y3RmaWVsZD4gZmllbGQgY29udGFpbnMgdGhlIHR5cGUgYW5kCi0gICAgICAgIGNhcGFiaWxpdGllcyBvZiB0aGlzIHBjbS4gVGhlIGJpdCBmbGFncyBhcmUgZGVmaW5lZCBpbgotICAgICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2Fzb3VuZC5oJmd0OzwvZmlsZW5hbWU+IGFzCi0gICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19YWFg8L2NvbnN0YW50Pi4gSGVyZSwgYXQgbGVhc3QsIHlvdQotICAgICAgICBoYXZlIHRvIHNwZWNpZnkgd2hldGhlciB0aGUgbW1hcCBpcyBzdXBwb3J0ZWQgYW5kIHdoaWNoCi0gICAgICAgIGludGVybGVhdmVkIGZvcm1hdCBpcyBzdXBwb3J0ZWQuCi0gICAgICAgIFdoZW4gdGhlIGlzIHN1cHBvcnRlZCwgYWRkIHRoZQotICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fTU1BUDwvY29uc3RhbnQ+IGZsYWcgaGVyZS4gV2hlbiB0aGUKLSAgICAgICAgaGFyZHdhcmUgc3VwcG9ydHMgdGhlIGludGVybGVhdmVkIG9yIHRoZSBub24taW50ZXJsZWF2ZWQKLSAgICAgICAgZm9ybWF0cywgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEPC9jb25zdGFudD4gb3IKLSAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX05PTklOVEVSTEVBVkVEPC9jb25zdGFudD4gZmxhZyBtdXN0Ci0gICAgICAgIGJlIHNldCwgcmVzcGVjdGl2ZWx5LiBJZiBib3RoIGFyZSBzdXBwb3J0ZWQsIHlvdSBjYW4gc2V0IGJvdGgsCi0gICAgICAgIHRvby4gCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgPGNvbnN0YW50Pk1NQVBfVkFMSUQ8L2NvbnN0YW50PiBhbmQKLSAgICAgICAgPGNvbnN0YW50PkJMT0NLX1RSQU5TRkVSPC9jb25zdGFudD4gYXJlIHNwZWNpZmllZCBmb3IgdGhlIE9TUyBtbWFwCi0gICAgICAgIG1vZGUuIFVzdWFsbHkgYm90aCBhcmUgc2V0LiBPZiBjb3Vyc2UsCi0gICAgICAgIDxjb25zdGFudD5NTUFQX1ZBTElEPC9jb25zdGFudD4gaXMgc2V0IG9ubHkgaWYgdGhlIG1tYXAgaXMKLSAgICAgICAgcmVhbGx5IHN1cHBvcnRlZC4gCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgb3RoZXIgcG9zc2libGUgZmxhZ3MgYXJlCi0gICAgICAgIDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19QQVVTRTwvY29uc3RhbnQ+IGFuZAotICAgICAgICA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUkVTVU1FPC9jb25zdGFudD4uIFRoZQotICAgICAgICA8Y29uc3RhbnQ+UEFVU0U8L2NvbnN0YW50PiBiaXQgbWVhbnMgdGhhdCB0aGUgcGNtIHN1cHBvcnRzIHRoZQotICAgICAgICA8cXVvdGU+cGF1c2U8L3F1b3RlPiBvcGVyYXRpb24sIHdoaWxlIHRoZQotICAgICAgICA8Y29uc3RhbnQ+UkVTVU1FPC9jb25zdGFudD4gYml0IG1lYW5zIHRoYXQgdGhlIHBjbSBzdXBwb3J0cwotICAgICAgICB0aGUgZnVsbCA8cXVvdGU+c3VzcGVuZC9yZXN1bWU8L3F1b3RlPiBvcGVyYXRpb24uCi0JSWYgdGhlIDxjb25zdGFudD5QQVVTRTwvY29uc3RhbnQ+IGZsYWcgaXMgc2V0LAotCXRoZSA8c3RydWN0ZmllbGQ+dHJpZ2dlcjwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGJlbG93Ci0gICAgICAgIG11c3QgaGFuZGxlIHRoZSBjb3JyZXNwb25kaW5nIChwYXVzZSBwdXNoL3JlbGVhc2UpIGNvbW1hbmRzLgotCVRoZSBzdXNwZW5kL3Jlc3VtZSB0cmlnZ2VyIGNvbW1hbmRzIGNhbiBiZSBkZWZpbmVkIGV2ZW4gd2l0aG91dAotCXRoZSA8Y29uc3RhbnQ+UkVTVU1FPC9jb25zdGFudD4gZmxhZy4gIFNlZSA8bGluawotCWxpbmtlbmQ9InBvd2VyLW1hbmFnZW1lbnQiPjxjaXRldGl0bGU+Ci0JUG93ZXIgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4gc2VjdGlvbiBmb3IgZGV0YWlscy4KLSAgICAgICAgPC9wYXJhPgotCi0JPHBhcmE+Ci0JICBXaGVuIHRoZSBQQ00gc3Vic3RyZWFtcyBjYW4gYmUgc3luY2hyb25pemVkICh0eXBpY2FsbHksCi0Jc3luY2hyb25pemVkIHN0YXJ0L3N0b3Agb2YgYSBwbGF5YmFjayBhbmQgYSBjYXB0dXJlIHN0cmVhbXMpLAotCXlvdSBjYW4gZ2l2ZSA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fU1lOQ19TVEFSVDwvY29uc3RhbnQ+LAotCXRvby4gIEluIHRoaXMgY2FzZSwgeW91J2xsIG5lZWQgdG8gY2hlY2sgdGhlIGxpbmtlZC1saXN0IG9mCi0JUENNIHN1YnN0cmVhbXMgaW4gdGhlIHRyaWdnZXIgY2FsbGJhY2suICBUaGlzIHdpbGwgYmUKLQlkZXNjcmliZWQgaW4gdGhlIGxhdGVyIHNlY3Rpb24uCi0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0KLQk8bGlzdGl0ZW0+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxzdHJ1Y3RmaWVsZD5mb3JtYXRzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgY29udGFpbnMgdGhlIGJpdC1mbGFncwotICAgICAgICBvZiBzdXBwb3J0ZWQgZm9ybWF0cyAoPGNvbnN0YW50PlNORFJWX1BDTV9GTVRCSVRfWFhYPC9jb25zdGFudD4pLgotICAgICAgICBJZiB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgbW9yZSB0aGFuIG9uZSBmb3JtYXQsIGdpdmUgYWxsIG9yJ2VkCi0gICAgICAgIGJpdHMuICBJbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIHNpZ25lZCAxNmJpdCBsaXR0bGUtZW5kaWFuCi0gICAgICAgIGZvcm1hdCBpcyBzcGVjaWZpZWQuCi0gICAgICAgIDwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCi0JPGxpc3RpdGVtPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgPHN0cnVjdGZpZWxkPnJhdGVzPC9zdHJ1Y3RmaWVsZD4gZmllbGQgY29udGFpbnMgdGhlIGJpdC1mbGFncyBvZgotICAgICAgICBzdXBwb3J0ZWQgcmF0ZXMgKDxjb25zdGFudD5TTkRSVl9QQ01fUkFURV9YWFg8L2NvbnN0YW50PikuCi0gICAgICAgIFdoZW4gdGhlIGNoaXAgc3VwcG9ydHMgY29udGludW91cyByYXRlcywgcGFzcwotICAgICAgICA8Y29uc3RhbnQ+Q09OVElOVU9VUzwvY29uc3RhbnQ+IGJpdCBhZGRpdGlvbmFsbHkuCi0gICAgICAgIFRoZSBwcmUtZGVmaW5lZCByYXRlIGJpdHMgYXJlIHByb3ZpZGVkIG9ubHkgZm9yIHR5cGljYWwKLQlyYXRlcy4gSWYgeW91ciBjaGlwIHN1cHBvcnRzIHVuY29udmVudGlvbmFsIHJhdGVzLCB5b3UgbmVlZCB0byBhZGQKLSAgICAgICAgdGhlIDxjb25zdGFudD5LTk9UPC9jb25zdGFudD4gYml0IGFuZCBzZXQgdXAgdGhlIGhhcmR3YXJlCi0gICAgICAgIGNvbnN0cmFpbnQgbWFudWFsbHkgKGV4cGxhaW5lZCBsYXRlcikuCi0gICAgICAgIDwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCi0JPGxpc3RpdGVtPgotCTxwYXJhPgotCTxzdHJ1Y3RmaWVsZD5yYXRlX21pbjwvc3RydWN0ZmllbGQ+IGFuZAotCTxzdHJ1Y3RmaWVsZD5yYXRlX21heDwvc3RydWN0ZmllbGQ+IGRlZmluZSB0aGUgbWluaW11bSBhbmQKLQltYXhpbXVtIHNhbXBsZSByYXRlLiAgVGhpcyBzaG91bGQgY29ycmVzcG9uZCBzb21laG93IHRvCi0JPHN0cnVjdGZpZWxkPnJhdGVzPC9zdHJ1Y3RmaWVsZD4gYml0cy4KLQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQotCTxsaXN0aXRlbT4KLQk8cGFyYT4KLQk8c3RydWN0ZmllbGQ+Y2hhbm5lbF9taW48L3N0cnVjdGZpZWxkPiBhbmQKLQk8c3RydWN0ZmllbGQ+Y2hhbm5lbF9tYXg8L3N0cnVjdGZpZWxkPiAKLQlkZWZpbmUsIGFzIHlvdSBtaWdodCBhbHJlYWR5IGV4cGVjdGVkLCB0aGUgbWluaW11bSBhbmQgbWF4aW11bQotCW51bWJlciBvZiBjaGFubmVscy4KLQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQotCTxsaXN0aXRlbT4KLQk8cGFyYT4KLQk8c3RydWN0ZmllbGQ+YnVmZmVyX2J5dGVzX21heDwvc3RydWN0ZmllbGQ+IGRlZmluZXMgdGhlCi0JbWF4aW11bSBidWZmZXIgc2l6ZSBpbiBieXRlcy4gIFRoZXJlIGlzIG5vCi0JPHN0cnVjdGZpZWxkPmJ1ZmZlcl9ieXRlc19taW48L3N0cnVjdGZpZWxkPiBmaWVsZCwgc2luY2UKLQlpdCBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIHRoZSBtaW5pbXVtIHBlcmlvZCBzaXplIGFuZCB0aGUKLQltaW5pbXVtIG51bWJlciBvZiBwZXJpb2RzLgotCU1lYW53aGlsZSwgPHN0cnVjdGZpZWxkPnBlcmlvZF9ieXRlc19taW48L3N0cnVjdGZpZWxkPiBhbmQKLQlkZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gc2l6ZSBvZiB0aGUgcGVyaW9kIGluIGJ5dGVzLgotCTxzdHJ1Y3RmaWVsZD5wZXJpb2RzX21heDwvc3RydWN0ZmllbGQ+IGFuZAotCTxzdHJ1Y3RmaWVsZD5wZXJpb2RzX21pbjwvc3RydWN0ZmllbGQ+IGRlZmluZSB0aGUgbWF4aW11bSBhbmQKLQltaW5pbXVtIG51bWJlciBvZiBwZXJpb2RzIGluIHRoZSBidWZmZXIuCi0gICAgICAgIDwvcGFyYT4KLQotCTxwYXJhPgotCVRoZSA8cXVvdGU+cGVyaW9kPC9xdW90ZT4gaXMgYSB0ZXJtIHRoYXQgY29ycmVzcG9uZHMgdG8KLQlhIGZyYWdtZW50IGluIHRoZSBPU1Mgd29ybGQuIFRoZSBwZXJpb2QgZGVmaW5lcyB0aGUgc2l6ZSBhdAotCXdoaWNoIGEgUENNIGludGVycnVwdCBpcyBnZW5lcmF0ZWQuIFRoaXMgc2l6ZSBzdHJvbmdseQotCWRlcGVuZHMgb24gdGhlIGhhcmR3YXJlLiAKLQlHZW5lcmFsbHksIHRoZSBzbWFsbGVyIHBlcmlvZCBzaXplIHdpbGwgZ2l2ZSB5b3UgbW9yZQotCWludGVycnVwdHMsIHRoYXQgaXMsIG1vcmUgY29udHJvbHMuIAotCUluIHRoZSBjYXNlIG9mIGNhcHR1cmUsIHRoaXMgc2l6ZSBkZWZpbmVzIHRoZSBpbnB1dCBsYXRlbmN5LgotCU9uIHRoZSBvdGhlciBoYW5kLCB0aGUgd2hvbGUgYnVmZmVyIHNpemUgZGVmaW5lcyB0aGUKLQlvdXRwdXQgbGF0ZW5jeSBmb3IgdGhlIHBsYXliYWNrIGRpcmVjdGlvbi4KLQk8L3BhcmE+Ci0JPC9saXN0aXRlbT4KLQotCTxsaXN0aXRlbT4KLQk8cGFyYT4KLQlUaGVyZSBpcyBhbHNvIGEgZmllbGQgPHN0cnVjdGZpZWxkPmZpZm9fc2l6ZTwvc3RydWN0ZmllbGQ+LgotCVRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBoYXJkd2FyZSBGSUZPLCBidXQgY3VycmVudGx5IGl0Ci0JaXMgbmVpdGhlciB1c2VkIGluIHRoZSBkcml2ZXIgbm9yIGluIHRoZSBhbHNhLWxpYi4gIFNvLCB5b3UKLQljYW4gaWdub3JlIHRoaXMgZmllbGQuCi0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JPC9pdGVtaXplZGxpc3Q+Ci0JPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtY29uZmlnIj4KLQk8dGl0bGU+UENNIENvbmZpZ3VyYXRpb25zPC90aXRsZT4KLQk8cGFyYT4KLQlPaywgbGV0J3MgZ28gYmFjayBhZ2FpbiB0byB0aGUgUENNIHJ1bnRpbWUgcmVjb3Jkcy4KLQlUaGUgbW9zdCBmcmVxdWVudGx5IHJlZmVycmVkIHJlY29yZHMgaW4gdGhlIHJ1bnRpbWUgaW5zdGFuY2UgYXJlCi0JdGhlIFBDTSBjb25maWd1cmF0aW9ucy4KLQlUaGUgUENNIGNvbmZpZ3VyYXRpb25zIGFyZSBzdG9yZWQgaW4gdGhlIHJ1bnRpbWUgaW5zdGFuY2UKLQlhZnRlciB0aGUgYXBwbGljYXRpb24gc2VuZHMgPHR5cGU+aHdfcGFyYW1zPC90eXBlPiBkYXRhIHZpYQotCWFsc2EtbGliLiAgVGhlcmUgYXJlIG1hbnkgZmllbGRzIGNvcGllZCBmcm9tIGh3X3BhcmFtcyBhbmQKLQlzd19wYXJhbXMgc3RydWN0cy4gIEZvciBleGFtcGxlLAotCTxzdHJ1Y3RmaWVsZD5mb3JtYXQ8L3N0cnVjdGZpZWxkPiBob2xkcyB0aGUgZm9ybWF0IHR5cGUKLQljaG9zZW4gYnkgdGhlIGFwcGxpY2F0aW9uLiAgVGhpcyBmaWVsZCBjb250YWlucyB0aGUgZW51bSB2YWx1ZQotCTxjb25zdGFudD5TTkRSVl9QQ01fRk9STUFUX1hYWDwvY29uc3RhbnQ+LgotCTwvcGFyYT4KLQotCTxwYXJhPgotCU9uZSB0aGluZyB0byBiZSBub3RlZCBpcyB0aGF0IHRoZSBjb25maWd1cmVkIGJ1ZmZlciBhbmQgcGVyaW9kCi0Jc2l6ZXMgYXJlIHN0b3JlZCBpbiA8cXVvdGU+ZnJhbWVzPC9xdW90ZT4gaW4gdGhlIHJ1bnRpbWUuCi0gICAgICAgIEluIHRoZSBBTFNBIHdvcmxkLCAxIGZyYW1lID0gY2hhbm5lbHMgKiBzYW1wbGVzLXNpemUuCi0JRm9yIGNvbnZlcnNpb24gYmV0d2VlbiBmcmFtZXMgYW5kIGJ5dGVzLCB5b3UgY2FuIHVzZSB0aGUKLQk8ZnVuY3Rpb24+ZnJhbWVzX3RvX2J5dGVzKCk8L2Z1bmN0aW9uPiBhbmQKLSAgICAgICAgICA8ZnVuY3Rpb24+Ynl0ZXNfdG9fZnJhbWVzKCk8L2Z1bmN0aW9uPiBoZWxwZXIgZnVuY3Rpb25zLiAKLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHBlcmlvZF9ieXRlcyA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotCTxwYXJhPgotCUFsc28sIG1hbnkgc29mdHdhcmUgcGFyYW1ldGVycyAoc3dfcGFyYW1zKSBhcmUKLQlzdG9yZWQgaW4gZnJhbWVzLCB0b28uICBQbGVhc2UgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIGZpZWxkLgotCTx0eXBlPnNuZF9wY21fdWZyYW1lc190PC90eXBlPiBpcyBmb3IgdGhlIGZyYW1lcyBhcyB1bnNpZ25lZAotCWludGVnZXIgd2hpbGUgPHR5cGU+c25kX3BjbV9zZnJhbWVzX3Q8L3R5cGU+IGlzIGZvciB0aGUgZnJhbWVzCi0JYXMgc2lnbmVkIGludGVnZXIuCi0JPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtZG1hIj4KLQk8dGl0bGU+RE1BIEJ1ZmZlciBJbmZvcm1hdGlvbjwvdGl0bGU+Ci0JPHBhcmE+Ci0JVGhlIERNQSBidWZmZXIgaXMgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nIGZvdXIgZmllbGRzLAotCTxzdHJ1Y3RmaWVsZD5kbWFfYXJlYTwvc3RydWN0ZmllbGQ+LAotCTxzdHJ1Y3RmaWVsZD5kbWFfYWRkcjwvc3RydWN0ZmllbGQ+LAotCTxzdHJ1Y3RmaWVsZD5kbWFfYnl0ZXM8L3N0cnVjdGZpZWxkPiBhbmQKLQk8c3RydWN0ZmllbGQ+ZG1hX3ByaXZhdGU8L3N0cnVjdGZpZWxkPi4KLQlUaGUgPHN0cnVjdGZpZWxkPmRtYV9hcmVhPC9zdHJ1Y3RmaWVsZD4gaG9sZHMgdGhlIGJ1ZmZlcgotCXBvaW50ZXIgKHRoZSBsb2dpY2FsIGFkZHJlc3MpLiAgWW91IGNhbiBjYWxsCi0JPGZ1bmN0aW9uPm1lbWNweTwvZnVuY3Rpb24+IGZyb20vdG8gCi0JdGhpcyBwb2ludGVyLiAgTWVhbndoaWxlLCA8c3RydWN0ZmllbGQ+ZG1hX2FkZHI8L3N0cnVjdGZpZWxkPgotCWhvbGRzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIuICBUaGlzIGZpZWxkIGlzCi0Jc3BlY2lmaWVkIG9ubHkgd2hlbiB0aGUgYnVmZmVyIGlzIGEgbGluZWFyIGJ1ZmZlci4KLQk8c3RydWN0ZmllbGQ+ZG1hX2J5dGVzPC9zdHJ1Y3RmaWVsZD4gaG9sZHMgdGhlIHNpemUgb2YgYnVmZmVyCi0JaW4gYnl0ZXMuICA8c3RydWN0ZmllbGQ+ZG1hX3ByaXZhdGU8L3N0cnVjdGZpZWxkPiBpcyB1c2VkIGZvcgotCXRoZSBBTFNBIERNQSBhbGxvY2F0b3IuCi0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JSWYgeW91IHVzZSBhIHN0YW5kYXJkIEFMU0EgZnVuY3Rpb24sCi0JPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4sIGZvcgotCWFsbG9jYXRpbmcgdGhlIGJ1ZmZlciwgdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgdGhlIEFMU0EgbWlkZGxlCi0JbGF5ZXIsIGFuZCB5b3Ugc2hvdWxkIDxlbXBoYXNpcz5ub3Q8L2VtcGhhc2lzPiBjaGFuZ2UgdGhlbSBieQotCXlvdXJzZWxmLiAgWW91IGNhbiByZWFkIHRoZW0gYnV0IG5vdCB3cml0ZSB0aGVtLgotCU9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3Ugd2FudCB0byBhbGxvY2F0ZSB0aGUgYnVmZmVyIGJ5Ci0JeW91cnNlbGYsIHlvdSdsbCBuZWVkIHRvIG1hbmFnZSBpdCBpbiBod19wYXJhbXMgY2FsbGJhY2suCi0JQXQgbGVhc3QsIDxzdHJ1Y3RmaWVsZD5kbWFfYnl0ZXM8L3N0cnVjdGZpZWxkPiBpcyBtYW5kYXRvcnkuCi0JPHN0cnVjdGZpZWxkPmRtYV9hcmVhPC9zdHJ1Y3RmaWVsZD4gaXMgbmVjZXNzYXJ5IHdoZW4gdGhlCi0JYnVmZmVyIGlzIG1tYXBwZWQuICBJZiB5b3VyIGRyaXZlciBkb2Vzbid0IHN1cHBvcnQgbW1hcCwgdGhpcwotCWZpZWxkIGlzIG5vdCBuZWNlc3NhcnkuICA8c3RydWN0ZmllbGQ+ZG1hX2FkZHI8L3N0cnVjdGZpZWxkPgotCWlzIGFsc28gb3B0aW9uYWwuICBZb3UgY2FuIHVzZQotCTxzdHJ1Y3RmaWVsZD5kbWFfcHJpdmF0ZTwvc3RydWN0ZmllbGQ+IGFzIHlvdSBsaWtlLCB0b28uCi0JPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtc3RhdHVzIj4KLQk8dGl0bGU+UnVubmluZyBTdGF0dXM8L3RpdGxlPgotCTxwYXJhPgotCVRoZSBydW5uaW5nIHN0YXR1cyBjYW4gYmUgcmVmZXJyZWQgdmlhIDxjb25zdGFudD5ydW50aW1lLSZndDtzdGF0dXM8L2NvbnN0YW50Pi4KLQlUaGlzIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX3BjbV9tbWFwX3N0YXR1czwvc3RydWN0bmFtZT4KLQlyZWNvcmQuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBnZXQgdGhlIGN1cnJlbnQgRE1BIGhhcmR3YXJlCi0JcG9pbnRlciB2aWEgPGNvbnN0YW50PnJ1bnRpbWUtJmd0O3N0YXR1cy0mZ3Q7aHdfcHRyPC9jb25zdGFudD4uCi0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JVGhlIERNQSBhcHBsaWNhdGlvbiBwb2ludGVyIGNhbiBiZSByZWZlcnJlZCB2aWEKLQk8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7Y29udHJvbDwvY29uc3RhbnQ+LCB3aGljaCBwb2ludHMgdG8gdGhlCi0Jc3RydWN0IDxzdHJ1Y3RuYW1lPnNuZF9wY21fbW1hcF9jb250cm9sPC9zdHJ1Y3RuYW1lPiByZWNvcmQuCi0JSG93ZXZlciwgYWNjZXNzaW5nIGRpcmVjdGx5IHRvIHRoaXMgdmFsdWUgaXMgbm90IHJlY29tbWVuZGVkLgotCTwvcGFyYT4KLQk8L3NlY3Rpb24+Ci0KLQk8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1ydW50aW1lLXByaXZhdGUiPgotCTx0aXRsZT5Qcml2YXRlIERhdGE8L3RpdGxlPiAKLQk8cGFyYT4KLQlZb3UgY2FuIGFsbG9jYXRlIGEgcmVjb3JkIGZvciB0aGUgc3Vic3RyZWFtIGFuZCBzdG9yZSBpdCBpbgotCTxjb25zdGFudD5ydW50aW1lLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50Pi4gIFVzdWFsbHksIHRoaXMKLQlpcyBkb25lIGluCi0JPGxpbmsgbGlua2VuZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtb3Blbi1jYWxsYmFjayI+PGNpdGV0aXRsZT4KLQl0aGUgb3BlbiBjYWxsYmFjazwvY2l0ZXRpdGxlPjwvbGluaz4uCi0JRG9uJ3QgbWl4IHRoaXMgd2l0aCA8Y29uc3RhbnQ+cGNtLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50Pi4KLQlUaGUgPGNvbnN0YW50PnBjbS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4gdXN1YWxseSBwb2ludHMgdG8gdGhlCi0JY2hpcCBpbnN0YW5jZSBhc3NpZ25lZCBzdGF0aWNhbGx5IGF0IHRoZSBjcmVhdGlvbiBvZiBQQ00sIHdoaWxlIHRoZSAKLQk8Y29uc3RhbnQ+cnVudGltZS0mZ3Q7cHJpdmF0ZV9kYXRhPC9jb25zdGFudD4gcG9pbnRzIHRvIGEgZHluYW1pYwotCWRhdGEgc3RydWN0dXJlIGNyZWF0ZWQgYXQgdGhlIFBDTSBvcGVuIGNhbGxiYWNrLgotCi0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IHNuZF94eHhfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIHN0cnVjdCBteV9wY21fZGF0YSAqZGF0YTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkYXRhOwotICAgICAgICAgIC4uLi4KLSAgfQotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlIGFsbG9jYXRlZCBvYmplY3QgbXVzdCBiZSByZWxlYXNlZCBpbgotCTxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLW9wZW4tY2FsbGJhY2siPjxjaXRldGl0bGU+Ci0JdGhlIGNsb3NlIGNhbGxiYWNrPC9jaXRldGl0bGU+PC9saW5rPi4KLSAgICAgICAgPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLXJ1bnRpbWUtaW50ciI+Ci0JPHRpdGxlPkludGVycnVwdCBDYWxsYmFja3M8L3RpdGxlPgotCTxwYXJhPgotCVRoZSBmaWVsZCA8c3RydWN0ZmllbGQ+dHJhbnNmZXJfYWNrX2JlZ2luPC9zdHJ1Y3RmaWVsZD4gYW5kCi0JPHN0cnVjdGZpZWxkPnRyYW5zZmVyX2Fja19lbmQ8L3N0cnVjdGZpZWxkPiBhcmUgY2FsbGVkIGF0Ci0JdGhlIGJlZ2lubmluZyBhbmQgYXQgdGhlIGVuZCBvZgotCTxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiwgcmVzcGVjdGl2ZWx5LiAKLQk8L3BhcmE+Ci0JPC9zZWN0aW9uPgotCi0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzIj4KLSAgICAgIDx0aXRsZT5PcGVyYXRvcnM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIE9LLCBub3cgbGV0IG1lIGdpdmUgZGV0YWlscyBhYm91dCBlYWNoIHBjbSBjYWxsYmFjawotICAgICAgKDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+KS4gSW4gZ2VuZXJhbCwgZXZlcnkgY2FsbGJhY2sgbXVzdAotICAgICAgcmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIKLSAgICAgIHN1Y2ggYXMgPGNvbnN0YW50Pi1FSU5WQUw8L2NvbnN0YW50Pi4gVG8gY2hvb3NlIGFuIGFwcHJvcHJpYXRlCi0gICAgICBlcnJvciBudW1iZXIsIGl0IGlzIGFkdmlzZWQgdG8gY2hlY2sgd2hhdCB2YWx1ZSBvdGhlciBwYXJ0cyBvZgotICAgICAgdGhlIGtlcm5lbCByZXR1cm4gd2hlbiB0aGUgc2FtZSBraW5kIG9mIHJlcXVlc3QgZmFpbHMuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdGFrZXMgYXQgbGVhc3QgdGhlIGFyZ3VtZW50IHdpdGgKLSAgICAgICAgPHN0cnVjdG5hbWU+c25kX3BjbV9zdWJzdHJlYW08L3N0cnVjdG5hbWU+IHBvaW50ZXIuIFRvIHJldHJpZXZlCi0gICAgICAgIHRoZSBjaGlwIHJlY29yZCBmcm9tIHRoZSBnaXZlbiBzdWJzdHJlYW0gaW5zdGFuY2UsIHlvdSBjYW4gdXNlIHRoZQotICAgICAgICBmb2xsb3dpbmcgbWFjcm8uIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIGludCB4eHgoKSB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLSAgICAgICAgICAuLi4uCi0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0JVGhlIG1hY3JvIHJlYWRzIDxjb25zdGFudD5zdWJzdHJlYW0tJmd0O3ByaXZhdGVfZGF0YTwvY29uc3RhbnQ+LAotCXdoaWNoIGlzIGEgY29weSBvZiA8Y29uc3RhbnQ+cGNtLSZndDtwcml2YXRlX2RhdGE8L2NvbnN0YW50Pi4KLQlZb3UgY2FuIG92ZXJyaWRlIHRoZSBmb3JtZXIgaWYgeW91IG5lZWQgdG8gYXNzaWduIGRpZmZlcmVudCBkYXRhCi0JcmVjb3JkcyBwZXIgUENNIHN1YnN0cmVhbS4gIEZvciBleGFtcGxlLCB0aGUgY21pODMzMCBkcml2ZXIgYXNzaWducwotCWRpZmZlcmVudCBwcml2YXRlX2RhdGEgZm9yIHBsYXliYWNrIGFuZCBjYXB0dXJlIGRpcmVjdGlvbnMsCi0JYmVjYXVzZSBpdCB1c2VzIHR3byBkaWZmZXJlbnQgY29kZWNzIChTQi0gYW5kIEFELWNvbXBhdGlibGUpIGZvcgotCWRpZmZlcmVudCBkaXJlY3Rpb25zLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtb3Blbi1jYWxsYmFjayI+Ci0gICAgICAgIDx0aXRsZT5vcGVuIGNhbGxiYWNrPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IHNuZF94eHhfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgcGNtIHN1YnN0cmVhbSBpcyBvcGVuZWQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBdCBsZWFzdCwgaGVyZSB5b3UgaGF2ZSB0byBpbml0aWFsaXplIHRoZSBydW50aW1lLSZndDtodwotICAgICAgICAgIHJlY29yZC4gVHlwaWNhbGx5LCB0aGlzIGlzIGRvbmUgYnkgbGlrZSB0aGlzOiAKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0KLSAgICAgICAgICBydW50aW1lLT5odyA9IHNuZF9teWNoaXBfcGxheWJhY2tfaHc7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICAgIHdoZXJlIDxwYXJhbWV0ZXI+c25kX215Y2hpcF9wbGF5YmFja19odzwvcGFyYW1ldGVyPiBpcyB0aGUKLSAgICAgICAgICBwcmUtZGVmaW5lZCBoYXJkd2FyZSBkZXNjcmlwdGlvbi4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlZb3UgY2FuIGFsbG9jYXRlIGEgcHJpdmF0ZSBkYXRhIGluIHRoaXMgY2FsbGJhY2ssIGFzIGRlc2NyaWJlZAotCWluIDxsaW5rIGxpbmtlbmQ9InBjbS1pbnRlcmZhY2UtcnVudGltZS1wcml2YXRlIj48Y2l0ZXRpdGxlPgotCVByaXZhdGUgRGF0YTwvY2l0ZXRpdGxlPjwvbGluaz4gc2VjdGlvbi4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlJZiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBuZWVkcyBtb3JlIGNvbnN0cmFpbnRzLCBzZXQgdGhlCi0JaGFyZHdhcmUgY29uc3RyYWludHMgaGVyZSwgdG9vLgotCVNlZSA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLWNvbnN0cmFpbnRzIj48Y2l0ZXRpdGxlPgotCUNvbnN0cmFpbnRzPC9jaXRldGl0bGU+PC9saW5rPiBmb3IgbW9yZSBkZXRhaWxzLgotCTwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWNsb3NlLWNhbGxiYWNrIj4KLSAgICAgICAgPHRpdGxlPmNsb3NlIGNhbGxiYWNrPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IHNuZF94eHhfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgICAgT2J2aW91c2x5LCB0aGlzIGlzIGNhbGxlZCB3aGVuIGEgcGNtIHN1YnN0cmVhbSBpcyBjbG9zZWQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBBbnkgcHJpdmF0ZSBpbnN0YW5jZSBmb3IgYSBwY20gc3Vic3RyZWFtIGFsbG9jYXRlZCBpbiB0aGUKLSAgICAgICAgICBvcGVuIGNhbGxiYWNrIHdpbGwgYmUgcmVsZWFzZWQgaGVyZS4gCi0KLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgc25kX3h4eF9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIC4uLi4KLSAgICAgICAgICBrZnJlZShzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZGF0YSk7Ci0gICAgICAgICAgLi4uLgotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLWlvY3RsLWNhbGxiYWNrIj4KLSAgICAgICAgPHRpdGxlPmlvY3RsIGNhbGxiYWNrPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBpcyB1c2VkIGZvciBhbnkgc3BlY2lhbCBjYWxsIHRvIHBjbSBpb2N0bHMuIEJ1dAotICAgICAgICB1c3VhbGx5IHlvdSBjYW4gcGFzcyBhIGdlbmVyaWMgaW9jdGwgY2FsbGJhY2ssIAotICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfaW9jdGw8L2Z1bmN0aW9uPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtaHctcGFyYW1zLWNhbGxiYWNrIj4KLSAgICAgICAgPHRpdGxlPmh3X3BhcmFtcyBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfeHh4X2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcyk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBoYXJkd2FyZSBwYXJhbWV0ZXIKLSAgICAgICAgKDxzdHJ1Y3RmaWVsZD5od19wYXJhbXM8L3N0cnVjdGZpZWxkPikgaXMgc2V0Ci0gICAgICAgIHVwIGJ5IHRoZSBhcHBsaWNhdGlvbiwgCi0gICAgICAgIHRoYXQgaXMsIG9uY2Ugd2hlbiB0aGUgYnVmZmVyIHNpemUsIHRoZSBwZXJpb2Qgc2l6ZSwgdGhlCi0gICAgICAgIGZvcm1hdCwgZXRjLiBhcmUgZGVmaW5lZCBmb3IgdGhlIHBjbSBzdWJzdHJlYW0uIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgTWFueSBoYXJkd2FyZSBzZXR1cHMgc2hvdWxkIGJlIGRvbmUgaW4gdGhpcyBjYWxsYmFjaywKLSAgICAgICAgaW5jbHVkaW5nIHRoZSBhbGxvY2F0aW9uIG9mIGJ1ZmZlcnMuIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgUGFyYW1ldGVycyB0byBiZSBpbml0aWFsaXplZCBhcmUgcmV0cmlldmVkIGJ5Ci0gICAgICAgICAgPGZ1bmN0aW9uPnBhcmFtc194eHgoKTwvZnVuY3Rpb24+IG1hY3Jvcy4gVG8gYWxsb2NhdGUKLSAgICAgICAgICBidWZmZXIsIHlvdSBjYW4gY2FsbCBhIGhlbHBlciBmdW5jdGlvbiwgCi0KLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKCk8L2Z1bmN0aW9uPiBpcyBhdmFpbGFibGUKLQkgIG9ubHkgd2hlbiB0aGUgRE1BIGJ1ZmZlcnMgaGF2ZSBiZWVuIHByZS1hbGxvY2F0ZWQuCi0JICBTZWUgdGhlIHNlY3Rpb24gPGxpbmsKLQkgIGxpbmtlbmQ9ImJ1ZmZlci1hbmQtbWVtb3J5LWJ1ZmZlci10eXBlcyI+PGNpdGV0aXRsZT4KLQkgIEJ1ZmZlciBUeXBlczwvY2l0ZXRpdGxlPjwvbGluaz4gZm9yIG1vcmUgZGV0YWlscy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE5vdGUgdGhhdCB0aGlzIGFuZCA8c3RydWN0ZmllbGQ+cHJlcGFyZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrcwotICAgICAgICBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHBlciBpbml0aWFsaXphdGlvbi4KLSAgICAgICAgRm9yIGV4YW1wbGUsIHRoZSBPU1MgZW11bGF0aW9uIG1heQotICAgICAgICBjYWxsIHRoZXNlIGNhbGxiYWNrcyBhdCBlYWNoIGNoYW5nZSB2aWEgaXRzIGlvY3RsLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRodXMsIHlvdSBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGFsbG9jYXRlIHRoZSBzYW1lIGJ1ZmZlcnMKLSAgICAgICAgbWFueSB0aW1lcywgd2hpY2ggd2lsbCBsZWFkIHRvIG1lbW9yeSBsZWFrcyEgIENhbGxpbmcgdGhlCi0gICAgICAgIGhlbHBlciBmdW5jdGlvbiBhYm92ZSBtYW55IHRpbWVzIGlzIE9LLiBJdCB3aWxsIHJlbGVhc2UgdGhlCi0gICAgICAgIHByZXZpb3VzIGJ1ZmZlciBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgd2FzIGFscmVhZHkgYWxsb2NhdGVkLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFub3RoZXIgbm90ZSBpcyB0aGF0IHRoaXMgY2FsbGJhY2sgaXMgbm9uLWF0b21pYwotICAgICAgICAoc2NoZWR1bGFibGUpLiBUaGlzIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUKLSAgICAgICAgPHN0cnVjdGZpZWxkPnRyaWdnZXI8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayAKLSAgICAgICAgaXMgYXRvbWljIChub24tc2NoZWR1bGFibGUpLiBUaGF0IGlzLCBtdXRleGVzIG9yIGFueQotICAgICAgICBzY2hlZHVsZS1yZWxhdGVkIGZ1bmN0aW9ucyBhcmUgbm90IGF2YWlsYWJsZSBpbgotICAgICAgICA8c3RydWN0ZmllbGQ+dHJpZ2dlcjwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLgotCVBsZWFzZSBzZWUgdGhlIHN1YnNlY3Rpb24KLQk8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLWF0b21pY2l0eSI+PGNpdGV0aXRsZT4KLQlBdG9taWNpdHk8L2NpdGV0aXRsZT48L2xpbms+IGZvciBkZXRhaWxzLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1ody1mcmVlLWNhbGxiYWNrIj4KLSAgICAgICAgPHRpdGxlPmh3X2ZyZWUgY2FsbGJhY2s8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgc25kX3h4eF9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHRvIHJlbGVhc2UgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgdmlhCi0gICAgICAgICAgPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+LiBGb3IgZXhhbXBsZSwgcmVsZWFzaW5nIHRoZQotICAgICAgICAgIGJ1ZmZlciB2aWEgCi0gICAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4gaXMgZG9uZSBieQotICAgICAgICAgIGNhbGxpbmcgdGhlIGZvbGxvd2luZzogCi0KLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNhbGxlZCBiZWZvcmUgdGhlIGNsb3NlIGNhbGxiYWNrIGlzIGNhbGxlZC4KLSAgICAgICAgICBBbHNvLCB0aGUgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgdG9vLgotICAgICAgICAgIEtlZXAgdHJhY2sgd2hldGhlciB0aGUgcmVzb3VyY2Ugd2FzIGFscmVhZHkgcmVsZWFzZWQuIAotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1wcmVwYXJlLWNhbGxiYWNrIj4KLSAgICAgICA8dGl0bGU+cHJlcGFyZSBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfeHh4X3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2hlbiB0aGUgcGNtIGlzCi0gICAgICAgIDxxdW90ZT5wcmVwYXJlZDwvcXVvdGU+LiBZb3UgY2FuIHNldCB0aGUgZm9ybWF0IHR5cGUsIHNhbXBsZQotICAgICAgICByYXRlLCBldGMuIGhlcmUuIFRoZSBkaWZmZXJlbmNlIGZyb20KLSAgICAgICAgPHN0cnVjdGZpZWxkPmh3X3BhcmFtczwvc3RydWN0ZmllbGQ+IGlzIHRoYXQgdGhlIAotICAgICAgICA8c3RydWN0ZmllbGQ+cHJlcGFyZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGVhY2gKLSAgICAgICAgdGltZSAKLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcHJlcGFyZSgpPC9mdW5jdGlvbj4gaXMgY2FsbGVkLCBpLmUuIHdoZW4KLSAgICAgICAgcmVjb3ZlcmluZyBhZnRlciB1bmRlcnJ1bnMsIGV0Yy4gCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLQlOb3RlIHRoYXQgdGhpcyBjYWxsYmFjayBpcyBub3cgbm9uLWF0b21pYy4KLQlZb3UgY2FuIHVzZSBzY2hlZHVsZS1yZWxhdGVkIGZ1bmN0aW9ucyBzYWZlbHkgaW4gdGhpcyBjYWxsYmFjay4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEluIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgY2FsbGJhY2tzLCB5b3UgY2FuIHJlZmVyIHRvIHRoZQotICAgICAgICB2YWx1ZXMgdmlhIHRoZSBydW50aW1lIHJlY29yZCwKLSAgICAgICAgc3Vic3RyZWFtLSZndDtydW50aW1lLgotICAgICAgICBGb3IgZXhhbXBsZSwgdG8gZ2V0IHRoZSBjdXJyZW50Ci0gICAgICAgIHJhdGUsIGZvcm1hdCBvciBjaGFubmVscywgYWNjZXNzIHRvCi0gICAgICAgIHJ1bnRpbWUtJmd0O3JhdGUsCi0gICAgICAgIHJ1bnRpbWUtJmd0O2Zvcm1hdCBvcgotICAgICAgICBydW50aW1lLSZndDtjaGFubmVscywgcmVzcGVjdGl2ZWx5LiAKLSAgICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIgaXMgc2V0IHRvCi0JcnVudGltZS0mZ3Q7ZG1hX2FyZWEuICBUaGUgYnVmZmVyIGFuZCBwZXJpb2Qgc2l6ZXMgYXJlCi0JaW4gcnVudGltZS0mZ3Q7YnVmZmVyX3NpemUgYW5kIHJ1bnRpbWUtJmd0O3BlcmlvZF9zaXplLAotCXJlc3BlY3RpdmVseS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEJlIGNhcmVmdWwgdGhhdCB0aGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIG1hbnkgdGltZXMgYXQKLSAgICAgICAgZWFjaCBzZXR1cCwgdG9vLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtdHJpZ2dlci1jYWxsYmFjayI+Ci0gICAgICAgIDx0aXRsZT50cmlnZ2VyIGNhbGxiYWNrPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IHNuZF94eHhfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCk7Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBwY20gaXMgc3RhcnRlZCwgc3RvcHBlZCBvciBwYXVzZWQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBXaGljaCBhY3Rpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgYXJndW1lbnQsCi0gICAgICAgICAgPGNvbnN0YW50PlNORFJWX1BDTV9UUklHR0VSX1hYWDwvY29uc3RhbnQ+IGluCi0gICAgICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9wY20uaCZndDs8L2ZpbGVuYW1lPi4gQXQgbGVhc3QsCi0gICAgICAgICAgdGhlIDxjb25zdGFudD5TVEFSVDwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+U1RPUDwvY29uc3RhbnQ+Ci0gICAgICAgICAgY29tbWFuZHMgbXVzdCBiZSBkZWZpbmVkIGluIHRoaXMgY2FsbGJhY2suIAotCi0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzd2l0Y2ggKGNtZCkgewotICBjYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotICAgICAgICAgIC8qIGRvIHNvbWV0aGluZyB0byBzdGFydCB0aGUgUENNIGVuZ2luZSAqLwotICAgICAgICAgIGJyZWFrOwotICBjYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0gICAgICAgICAgLyogZG8gc29tZXRoaW5nIHRvIHN0b3AgdGhlIFBDTSBlbmdpbmUgKi8KLSAgICAgICAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgfQotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgV2hlbiB0aGUgcGNtIHN1cHBvcnRzIHRoZSBwYXVzZSBvcGVyYXRpb24gKGdpdmVuIGluIHRoZSBpbmZvCi0gICAgICAgIGZpZWxkIG9mIHRoZSBoYXJkd2FyZSB0YWJsZSksIHRoZSA8Y29uc3RhbnQ+UEFVU0VfUFVTRTwvY29uc3RhbnQ+Ci0gICAgICAgIGFuZCA8Y29uc3RhbnQ+UEFVU0VfUkVMRUFTRTwvY29uc3RhbnQ+IGNvbW1hbmRzIG11c3QgYmUKLSAgICAgICAgaGFuZGxlZCBoZXJlLCB0b28uIFRoZSBmb3JtZXIgaXMgdGhlIGNvbW1hbmQgdG8gcGF1c2UgdGhlIHBjbSwKLSAgICAgICAgYW5kIHRoZSBsYXR0ZXIgdG8gcmVzdGFydCB0aGUgcGNtIGFnYWluLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFdoZW4gdGhlIHBjbSBzdXBwb3J0cyB0aGUgc3VzcGVuZC9yZXN1bWUgb3BlcmF0aW9uLAotCXJlZ2FyZGxlc3Mgb2YgZnVsbCBvciBwYXJ0aWFsIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQsCi0gICAgICAgIHRoZSA8Y29uc3RhbnQ+U1VTUEVORDwvY29uc3RhbnQ+IGFuZCA8Y29uc3RhbnQ+UkVTVU1FPC9jb25zdGFudD4KLSAgICAgICAgY29tbWFuZHMgbXVzdCBiZSBoYW5kbGVkLCB0b28uCi0gICAgICAgIFRoZXNlIGNvbW1hbmRzIGFyZSBpc3N1ZWQgd2hlbiB0aGUgcG93ZXItbWFuYWdlbWVudCBzdGF0dXMgaXMKLSAgICAgICAgY2hhbmdlZC4gIE9idmlvdXNseSwgdGhlIDxjb25zdGFudD5TVVNQRU5EPC9jb25zdGFudD4gYW5kCi0gICAgICAgIDxjb25zdGFudD5SRVNVTUU8L2NvbnN0YW50PiBjb21tYW5kcwotICAgICAgICBzdXNwZW5kIGFuZCByZXN1bWUgdGhlIHBjbSBzdWJzdHJlYW0sIGFuZCB1c3VhbGx5LCB0aGV5Ci0gICAgICAgIGFyZSBpZGVudGljYWwgdG8gdGhlIDxjb25zdGFudD5TVE9QPC9jb25zdGFudD4gYW5kCi0gICAgICAgIDxjb25zdGFudD5TVEFSVDwvY29uc3RhbnQ+IGNvbW1hbmRzLCByZXNwZWN0aXZlbHkuCi0JICBTZWUgdGhlIDxsaW5rIGxpbmtlbmQ9InBvd2VyLW1hbmFnZW1lbnQiPjxjaXRldGl0bGU+Ci0JUG93ZXIgTWFuYWdlbWVudDwvY2l0ZXRpdGxlPjwvbGluaz4gc2VjdGlvbiBmb3IgZGV0YWlscy4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFzIG1lbnRpb25lZCwgdGhpcyBjYWxsYmFjayBpcyBhdG9taWMuICBZb3UgY2Fubm90IGNhbGwKLQkgIGZ1bmN0aW9ucyB3aGljaCBtYXkgc2xlZXAuCi0JICBUaGUgdHJpZ2dlciBjYWxsYmFjayBzaG91bGQgYmUgYXMgbWluaW1hbCBhcyBwb3NzaWJsZSwKLQkgIGp1c3QgcmVhbGx5IHRyaWdnZXJpbmcgdGhlIERNQS4gIFRoZSBvdGhlciBzdHVmZiBzaG91bGQgYmUKLQkgIGluaXRpYWxpemVkIGh3X3BhcmFtcyBhbmQgcHJlcGFyZSBjYWxsYmFja3MgcHJvcGVybHkKLQkgIGJlZm9yZWhhbmQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9InBjbS1pbnRlcmZhY2Utb3BlcmF0b3JzLXBvaW50ZXItY2FsbGJhY2siPgotICAgICAgICA8dGl0bGU+cG9pbnRlciBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHNuZF94eHhfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIFBDTSBtaWRkbGUgbGF5ZXIgaW5xdWlyZXMKLSAgICAgICAgdGhlIGN1cnJlbnQgaGFyZHdhcmUgcG9zaXRpb24gb24gdGhlIGJ1ZmZlci4gVGhlIHBvc2l0aW9uIG11c3QKLSAgICAgICAgYmUgcmV0dXJuZWQgaW4gZnJhbWVzLAotICAgICAgICByYW5naW5nIGZyb20gMCB0byBidWZmZXJfc2l6ZSAtIDEuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGlzIGlzIGNhbGxlZCB1c3VhbGx5IGZyb20gdGhlIGJ1ZmZlci11cGRhdGUgcm91dGluZSBpbiB0aGUKLSAgICAgICAgcGNtIG1pZGRsZSBsYXllciwgd2hpY2ggaXMgaW52b2tlZCB3aGVuCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiBpcyBjYWxsZWQgaW4gdGhlCi0gICAgICAgIGludGVycnVwdCByb3V0aW5lLiBUaGVuIHRoZSBwY20gbWlkZGxlIGxheWVyIHVwZGF0ZXMgdGhlCi0gICAgICAgIHBvc2l0aW9uIGFuZCBjYWxjdWxhdGVzIHRoZSBhdmFpbGFibGUgc3BhY2UsIGFuZCB3YWtlcyB1cCB0aGUKLSAgICAgICAgc2xlZXBpbmcgcG9sbCB0aHJlYWRzLCBldGMuIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBhbHNvIGF0b21pYy4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtY29weS1zaWxlbmNlIj4KLSAgICAgICAgPHRpdGxlPmNvcHkgYW5kIHNpbGVuY2UgY2FsbGJhY2tzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVGhlc2UgY2FsbGJhY2tzIGFyZSBub3QgbWFuZGF0b3J5LCBhbmQgY2FuIGJlIG9taXR0ZWQgaW4KLSAgICAgICAgbW9zdCBjYXNlcy4gVGhlc2UgY2FsbGJhY2tzIGFyZSB1c2VkIHdoZW4gdGhlIGhhcmR3YXJlIGJ1ZmZlcgotICAgICAgICBjYW5ub3QgYmUgaW4gdGhlIG5vcm1hbCBtZW1vcnkgc3BhY2UuIFNvbWUgY2hpcHMgaGF2ZSB0aGVpcgotICAgICAgICBvd24gYnVmZmVyIG9uIHRoZSBoYXJkd2FyZSB3aGljaCBpcyBub3QgbWFwcGFibGUuIEluIHN1Y2ggYQotICAgICAgICBjYXNlLCB5b3UgaGF2ZSB0byB0cmFuc2ZlciB0aGUgZGF0YSBtYW51YWxseSBmcm9tIHRoZSBtZW1vcnkKLSAgICAgICAgYnVmZmVyIHRvIHRoZSBoYXJkd2FyZSBidWZmZXIuIE9yLCBpZiB0aGUgYnVmZmVyIGlzCi0gICAgICAgIG5vbi1jb250aWd1b3VzIG9uIGJvdGggcGh5c2ljYWwgYW5kIHZpcnR1YWwgbWVtb3J5IHNwYWNlcywKLSAgICAgICAgdGhlc2UgY2FsbGJhY2tzIG11c3QgYmUgZGVmaW5lZCwgdG9vLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIElmIHRoZXNlIHR3byBjYWxsYmFja3MgYXJlIGRlZmluZWQsIGNvcHkgYW5kIHNldC1zaWxlbmNlCi0gICAgICAgIG9wZXJhdGlvbnMgYXJlIGRvbmUgYnkgdGhlbS4gVGhlIGRldGFpbGVkIHdpbGwgYmUgZGVzY3JpYmVkIGluCi0gICAgICAgIHRoZSBsYXRlciBzZWN0aW9uIDxsaW5rCi0gICAgICAgIGxpbmtlbmQ9ImJ1ZmZlci1hbmQtbWVtb3J5Ij48Y2l0ZXRpdGxlPkJ1ZmZlciBhbmQgTWVtb3J5Ci0gICAgICAgIE1hbmFnZW1lbnQ8L2NpdGV0aXRsZT48L2xpbms+LiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtYWNrIj4KLSAgICAgICAgPHRpdGxlPmFjayBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgYWxzbyBub3QgbWFuZGF0b3J5LiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZAotICAgICAgICB3aGVuIHRoZSBhcHBsX3B0ciBpcyB1cGRhdGVkIGluIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9ucy4KLSAgICAgICAgU29tZSBkcml2ZXJzIGxpa2UgZW11MTBrMS1meCBhbmQgY3M0Nnh4IG5lZWQgdG8gdHJhY2sgdGhlCi0JY3VycmVudCBhcHBsX3B0ciBmb3IgdGhlIGludGVybmFsIGJ1ZmZlciwgYW5kIHRoaXMgY2FsbGJhY2sKLQlpcyB1c2VmdWwgb25seSBmb3Igc3VjaCBhIHB1cnBvc2UuCi0JPC9wYXJhPgotCTxwYXJhPgotCSAgVGhpcyBjYWxsYmFjayBpcyBhdG9taWMuCi0JPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1vcGVyYXRvcnMtcGFnZS1jYWxsYmFjayI+Ci0gICAgICAgIDx0aXRsZT5wYWdlIGNhbGxiYWNrPC90aXRsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsIHRvby4gVGhpcyBjYWxsYmFjayBpcyB1c2VkCi0gICAgICAgIG1haW5seSBmb3Igbm9uLWNvbnRpZ3VvdXMgYnVmZmVycy4gVGhlIG1tYXAgY2FsbHMgdGhpcwotICAgICAgICBjYWxsYmFjayB0byBnZXQgdGhlIHBhZ2UgYWRkcmVzcy4gU29tZSBleGFtcGxlcyB3aWxsIGJlCi0gICAgICAgIGV4cGxhaW5lZCBpbiB0aGUgbGF0ZXIgc2VjdGlvbiA8bGluawotICAgICAgICBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeSI+PGNpdGV0aXRsZT5CdWZmZXIgYW5kIE1lbW9yeQotICAgICAgICBNYW5hZ2VtZW50PC9jaXRldGl0bGU+PC9saW5rPiwgdG9vLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyIj4KLSAgICAgIDx0aXRsZT5JbnRlcnJ1cHQgSGFuZGxlcjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHJlc3Qgb2YgcGNtIHN0dWZmIGlzIHRoZSBQQ00gaW50ZXJydXB0IGhhbmRsZXIuIFRoZQotICAgICAgcm9sZSBvZiBQQ00gaW50ZXJydXB0IGhhbmRsZXIgaW4gdGhlIHNvdW5kIGRyaXZlciBpcyB0byB1cGRhdGUKLSAgICAgIHRoZSBidWZmZXIgcG9zaXRpb24gYW5kIHRvIHRlbGwgdGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2hlbiB0aGUKLSAgICAgIGJ1ZmZlciBwb3NpdGlvbiBnb2VzIGFjcm9zcyB0aGUgcHJlc2NyaWJlZCBwZXJpb2Qgc2l6ZS4gVG8KLSAgICAgIGluZm9ybSB0aGlzLCBjYWxsIHRoZSA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4KLSAgICAgIGZ1bmN0aW9uLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZXJlIGFyZSBzZXZlcmFsIHR5cGVzIG9mIHNvdW5kIGNoaXBzIHRvIGdlbmVyYXRlIHRoZSBpbnRlcnJ1cHRzLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlci1ib3VuZGFyeSI+Ci0gICAgICAgIDx0aXRsZT5JbnRlcnJ1cHRzIGF0IHRoZSBwZXJpb2QgKGZyYWdtZW50KSBib3VuZGFyeTwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgaXMgdGhlIG1vc3QgZnJlcXVlbnRseSBmb3VuZCB0eXBlOiAgdGhlIGhhcmR3YXJlCi0gICAgICAgIGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQgYXQgZWFjaCBwZXJpb2QgYm91bmRhcnkuCi0JSW4gdGhpcyBjYXNlLCB5b3UgY2FuIGNhbGwKLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IGF0IGVhY2ggCi0gICAgICAgIGludGVycnVwdC4gCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gdGFrZXMgdGhlCi0gICAgICAgIHN1YnN0cmVhbSBwb2ludGVyIGFzIGl0cyBhcmd1bWVudC4gVGh1cywgeW91IG5lZWQgdG8ga2VlcCB0aGUKLSAgICAgICAgc3Vic3RyZWFtIHBvaW50ZXIgYWNjZXNzaWJsZSBmcm9tIHRoZSBjaGlwIGluc3RhbmNlLiBGb3IKLSAgICAgICAgZXhhbXBsZSwgZGVmaW5lIHN1YnN0cmVhbSBmaWVsZCBpbiB0aGUgY2hpcCByZWNvcmQgdG8gaG9sZCB0aGUKLSAgICAgICAgY3VycmVudCBydW5uaW5nIHN1YnN0cmVhbSBwb2ludGVyLCBhbmQgc2V0IHRoZSBwb2ludGVyIHZhbHVlCi0gICAgICAgIGF0IG9wZW4gY2FsbGJhY2sgKGFuZCByZXNldCBhdCBjbG9zZSBjYWxsYmFjaykuIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSWYgeW91IGFjcXVpcmUgYSBzcGlubG9jayBpbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGFuZCB0aGUKLSAgICAgICAgbG9jayBpcyB1c2VkIGluIG90aGVyIHBjbSBjYWxsYmFja3MsIHRvbywgdGhlbiB5b3UgaGF2ZSB0bwotICAgICAgICByZWxlYXNlIHRoZSBsb2NrIGJlZm9yZSBjYWxsaW5nCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3BlcmlvZF9lbGFwc2VkKCk8L2Z1bmN0aW9uPiwgYmVjYXVzZQotICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gY2FsbHMgb3RoZXIgcGNtCi0gICAgICAgIGNhbGxiYWNrcyBpbnNpZGUuIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVHlwaWNhbCBjb2RlIHdvdWxkIGJlIGxpa2U6Ci0KLSAgICAgICAgICA8ZXhhbXBsZT4KLQkgICAgPHRpdGxlPkludGVycnVwdCBIYW5kbGVyIENhc2UgIzE8L3RpdGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpcnFyZXR1cm5fdCBzbmRfbXljaGlwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gZGV2X2lkOwotICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+bG9jayk7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIGlmIChwY21faXJxX2ludm9rZWQoY2hpcCkpIHsKLSAgICAgICAgICAgICAgICAgIC8qIGNhbGwgdXBkYXRlciwgdW5sb2NrIGJlZm9yZSBpdCAqLwotICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOwotICAgICAgICAgICAgICAgICAgc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5zdWJzdHJlYW0pOwotICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKLSAgICAgICAgICAgICAgICAgIC8qIGFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgaWYgbmVjZXNzYXJ5ICovCi0gICAgICAgICAgfQotICAgICAgICAgIC4uLi4KLSAgICAgICAgICBzcGluX3VubG9jaygmY2hpcC0+bG9jayk7Ci0gICAgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9leGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWludGVycnVwdC1oYW5kbGVyLXRpbWVyIj4KLSAgICAgICAgPHRpdGxlPkhpZ2ggZnJlcXVlbmN5IHRpbWVyIGludGVycnVwdHM8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLQlUaGlzIGhhcHBlbnNlIHdoZW4gdGhlIGhhcmR3YXJlIGRvZXNuJ3QgZ2VuZXJhdGUgaW50ZXJydXB0cwotICAgICAgICBhdCB0aGUgcGVyaW9kIGJvdW5kYXJ5IGJ1dCBpc3N1ZXMgdGltZXIgaW50ZXJydXB0cyBhdCBhIGZpeGVkCi0gICAgICAgIHRpbWVyIHJhdGUgKGUuZy4gZXMxOTY4IG9yIHltZnBjaSBkcml2ZXJzKS4gCi0gICAgICAgIEluIHRoaXMgY2FzZSwgeW91IG5lZWQgdG8gY2hlY2sgdGhlIGN1cnJlbnQgaGFyZHdhcmUKLSAgICAgICAgcG9zaXRpb24gYW5kIGFjY3VtdWxhdGUgdGhlIHByb2Nlc3NlZCBzYW1wbGUgbGVuZ3RoIGF0IGVhY2gKLSAgICAgICAgaW50ZXJydXB0LiAgV2hlbiB0aGUgYWNjdW11bGF0ZWQgc2l6ZSBleGNlZWRzIHRoZSBwZXJpb2QKLSAgICAgICAgc2l6ZSwgY2FsbCAKLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+IGFuZCByZXNldCB0aGUKLSAgICAgICAgYWNjdW11bGF0b3IuIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgVHlwaWNhbCBjb2RlIHdvdWxkIGJlIGxpa2UgdGhlIGZvbGxvd2luZy4KLQotICAgICAgICAgIDxleGFtcGxlPgotCSAgICA8dGl0bGU+SW50ZXJydXB0IEhhbmRsZXIgQ2FzZSAjMjwvdGl0bGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGlycXJldHVybl90IHNuZF9teWNoaXBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLSAgewotICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBkZXZfaWQ7Ci0gICAgICAgICAgc3Bpbl9sb2NrKCZjaGlwLT5sb2NrKTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgaWYgKHBjbV9pcnFfaW52b2tlZChjaGlwKSkgewotICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxhc3RfcHRyLCBzaXplOwotICAgICAgICAgICAgICAgICAgLyogZ2V0IHRoZSBjdXJyZW50IGhhcmR3YXJlIHBvaW50ZXIgKGluIGZyYW1lcykgKi8KLSAgICAgICAgICAgICAgICAgIGxhc3RfcHRyID0gZ2V0X2h3X3B0cihjaGlwKTsKLSAgICAgICAgICAgICAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgcHJvY2Vzc2VkIGZyYW1lcyBzaW5jZSB0aGUKLSAgICAgICAgICAgICAgICAgICAqIGxhc3QgdXBkYXRlCi0gICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3B0ciA8IGNoaXAtPmxhc3RfcHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gcnVudGltZS0+YnVmZmVyX3NpemUgKyBsYXN0X3B0ciAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBjaGlwLT5sYXN0X3B0cjsgCi0gICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBsYXN0X3B0ciAtIGNoaXAtPmxhc3RfcHRyOwotICAgICAgICAgICAgICAgICAgLyogcmVtZW1iZXIgdGhlIGxhc3QgdXBkYXRlZCBwb2ludCAqLwotICAgICAgICAgICAgICAgICAgY2hpcC0+bGFzdF9wdHIgPSBsYXN0X3B0cjsKLSAgICAgICAgICAgICAgICAgIC8qIGFjY3VtdWxhdGUgdGhlIHNpemUgKi8KLSAgICAgICAgICAgICAgICAgIGNoaXAtPnNpemUgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICAgIC8qIG92ZXIgdGhlIHBlcmlvZCBib3VuZGFyeT8gKi8KLSAgICAgICAgICAgICAgICAgIGlmIChjaGlwLT5zaXplID49IHJ1bnRpbWUtPnBlcmlvZF9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2V0IHRoZSBhY2N1bXVsYXRvciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlwLT5zaXplICU9IHJ1bnRpbWUtPnBlcmlvZF9zaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjYWxsIHVwZGF0ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOwotICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmY2hpcC0+bG9jayk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAvKiBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0IGlmIG5lY2Vzc2FyeSAqLwotICAgICAgICAgIH0KLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgc3Bpbl91bmxvY2soJmNoaXAtPmxvY2spOwotICAgICAgICAgIHJldHVybiBJUlFfSEFORExFRDsKLSAgfQotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icGNtLWludGVyZmFjZS1pbnRlcnJ1cHQtaGFuZGxlci1ib3RoIj4KLSAgICAgICAgPHRpdGxlPk9uIGNhbGxpbmcgPGZ1bmN0aW9uPnNuZF9wY21fcGVyaW9kX2VsYXBzZWQoKTwvZnVuY3Rpb24+PC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgSW4gYm90aCBjYXNlcywgZXZlbiBpZiBtb3JlIHRoYW4gb25lIHBlcmlvZCBhcmUgZWxhcHNlZCwgeW91Ci0gICAgICAgIGRvbid0IGhhdmUgdG8gY2FsbAotICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9wZXJpb2RfZWxhcHNlZCgpPC9mdW5jdGlvbj4gbWFueSB0aW1lcy4gQ2FsbAotICAgICAgICBvbmx5IG9uY2UuIEFuZCB0aGUgcGNtIGxheWVyIHdpbGwgY2hlY2sgdGhlIGN1cnJlbnQgaGFyZHdhcmUKLSAgICAgICAgcG9pbnRlciBhbmQgdXBkYXRlIHRvIHRoZSBsYXRlc3Qgc3RhdHVzLiAKLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWF0b21pY2l0eSI+Ci0gICAgICA8dGl0bGU+QXRvbWljaXR5PC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgT25lIG9mIHRoZSBtb3N0IGltcG9ydGFudCAoYW5kIHRodXMgZGlmZmljdWx0IHRvIGRlYnVnKSBwcm9ibGVtcwotICAgICAgaW4ga2VybmVsIHByb2dyYW1taW5nIGFyZSByYWNlIGNvbmRpdGlvbnMuCi0gICAgICBJbiB0aGUgTGludXgga2VybmVsLCB0aGV5IGFyZSB1c3VhbGx5IGF2b2lkZWQgdmlhIHNwaW4tbG9ja3MsIG11dGV4ZXMKLSAgICAgIG9yIHNlbWFwaG9yZXMuICBJbiBnZW5lcmFsLCBpZiBhIHJhY2UgY29uZGl0aW9uIGNhbiBoYXBwZW4KLSAgICAgIGluIGFuIGludGVycnVwdCBoYW5kbGVyLCBpdCBoYXMgdG8gYmUgbWFuYWdlZCBhdG9taWNhbGx5LCBhbmQgeW91Ci0gICAgICBoYXZlIHRvIHVzZSBhIHNwaW5sb2NrIHRvIHByb3RlY3QgdGhlIGNyaXRpY2FsIHNlc3Npb24uIElmIHRoZQotICAgICAgY3JpdGljYWwgc2VjdGlvbiBpcyBub3QgaW4gaW50ZXJydXB0IGhhbmRsZXIgY29kZSBhbmQKLSAgICAgIGlmIHRha2luZyBhIHJlbGF0aXZlbHkgbG9uZyB0aW1lIHRvIGV4ZWN1dGUgaXMgYWNjZXB0YWJsZSwgeW91Ci0gICAgICBzaG91bGQgdXNlIG11dGV4ZXMgb3Igc2VtYXBob3JlcyBpbnN0ZWFkLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIEFzIGFscmVhZHkgc2Vlbiwgc29tZSBwY20gY2FsbGJhY2tzIGFyZSBhdG9taWMgYW5kIHNvbWUgYXJlCi0gICAgICBub3QuICBGb3IgZXhhbXBsZSwgdGhlIDxwYXJhbWV0ZXI+aHdfcGFyYW1zPC9wYXJhbWV0ZXI+IGNhbGxiYWNrIGlzCi0gICAgICBub24tYXRvbWljLCB3aGlsZSA8cGFyYW1ldGVyPnRyaWdnZXI8L3BhcmFtZXRlcj4gY2FsbGJhY2sgaXMKLSAgICAgIGF0b21pYy4gIFRoaXMgbWVhbnMsIHRoZSBsYXR0ZXIgaXMgY2FsbGVkIGFscmVhZHkgaW4gYSBzcGlubG9jawotICAgICAgaGVsZCBieSB0aGUgUENNIG1pZGRsZSBsYXllci4gUGxlYXNlIHRha2UgdGhpcyBhdG9taWNpdHkgaW50bwotICAgICAgYWNjb3VudCB3aGVuIHlvdSBjaG9vc2UgYSBsb2NraW5nIHNjaGVtZSBpbiB0aGUgY2FsbGJhY2tzLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIEluIHRoZSBhdG9taWMgY2FsbGJhY2tzLCB5b3UgY2Fubm90IHVzZSBmdW5jdGlvbnMgd2hpY2ggbWF5IGNhbGwKLSAgICAgIDxmdW5jdGlvbj5zY2hlZHVsZTwvZnVuY3Rpb24+IG9yIGdvIHRvCi0gICAgICA8ZnVuY3Rpb24+c2xlZXA8L2Z1bmN0aW9uPi4gIFNlbWFwaG9yZXMgYW5kIG11dGV4ZXMgY2FuIHNsZWVwLAotICAgICAgYW5kIGhlbmNlIHRoZXkgY2Fubm90IGJlIHVzZWQgaW5zaWRlIHRoZSBhdG9taWMgY2FsbGJhY2tzCi0gICAgICAoZS5nLiA8cGFyYW1ldGVyPnRyaWdnZXI8L3BhcmFtZXRlcj4gY2FsbGJhY2spLgotICAgICAgVG8gaW1wbGVtZW50IHNvbWUgZGVsYXkgaW4gc3VjaCBhIGNhbGxiYWNrLCBwbGVhc2UgdXNlCi0gICAgICA8ZnVuY3Rpb24+dWRlbGF5KCk8L2Z1bmN0aW9uPiBvciA8ZnVuY3Rpb24+bWRlbGF5KCk8L2Z1bmN0aW9uPi4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBBbGwgdGhyZWUgYXRvbWljIGNhbGxiYWNrcyAodHJpZ2dlciwgcG9pbnRlciwgYW5kIGFjaykgYXJlCi0gICAgICBjYWxsZWQgd2l0aCBsb2NhbCBpbnRlcnJ1cHRzIGRpc2FibGVkLgotICAgICAgPC9wYXJhPgotCi0gICAgPC9zZWN0aW9uPgotICAgIDxzZWN0aW9uIGlkPSJwY20taW50ZXJmYWNlLWNvbnN0cmFpbnRzIj4KLSAgICAgIDx0aXRsZT5Db25zdHJhaW50czwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSWYgeW91ciBjaGlwIHN1cHBvcnRzIHVuY29udmVudGlvbmFsIHNhbXBsZSByYXRlcywgb3Igb25seSB0aGUKLSAgICAgIGxpbWl0ZWQgc2FtcGxlcywgeW91IG5lZWQgdG8gc2V0IGEgY29uc3RyYWludCBmb3IgdGhlCi0gICAgICBjb25kaXRpb24uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgRm9yIGV4YW1wbGUsIGluIG9yZGVyIHRvIHJlc3RyaWN0IHRoZSBzYW1wbGUgcmF0ZXMgaW4gdGhlIHNvbWUKLSAgICAgICAgc3VwcG9ydGVkIHZhbHVlcywgdXNlCi0JPGZ1bmN0aW9uPnNuZF9wY21faHdfY29uc3RyYWludF9saXN0KCk8L2Z1bmN0aW9uPi4KLQlZb3UgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaW4gdGhlIG9wZW4gY2FsbGJhY2suCi0KLSAgICAgICAgPGV4YW1wbGU+Ci0JICA8dGl0bGU+RXhhbXBsZSBvZiBIYXJkd2FyZSBDb25zdHJhaW50czwvdGl0bGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNbXSA9Ci0gICAgICAgICAgezQwMDAsIDEwMDAwLCAyMjA1MCwgNDQxMDB9OwotICBzdGF0aWMgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0IGNvbnN0cmFpbnRzX3JhdGVzID0gewotICAgICAgICAgIC5jb3VudCA9IEFSUkFZX1NJWkUocmF0ZXMpLAotICAgICAgICAgIC5saXN0ID0gcmF0ZXMsCi0gICAgICAgICAgLm1hc2sgPSAwLAotICB9OwotCi0gIHN0YXRpYyBpbnQgc25kX215Y2hpcF9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLSAgewotICAgICAgICAgIGludCBlcnI7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHN1YnN0cmVhbS0+cnVudGltZSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uc3RyYWludHNfcmF0ZXMpOwotICAgICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAuLi4uCi0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZXJlIGFyZSBtYW55IGRpZmZlcmVudCBjb25zdHJhaW50cy4KLSAgICAgICAgTG9vayBhdCA8ZmlsZW5hbWU+c291bmQvcGNtLmg8L2ZpbGVuYW1lPiBmb3IgYSBjb21wbGV0ZSBsaXN0LgotICAgICAgICBZb3UgY2FuIGV2ZW4gZGVmaW5lIHlvdXIgb3duIGNvbnN0cmFpbnQgcnVsZXMuCi0gICAgICAgIEZvciBleGFtcGxlLCBsZXQncyBzdXBwb3NlIG15X2NoaXAgY2FuIG1hbmFnZSBhIHN1YnN0cmVhbSBvZiAxIGNoYW5uZWwKLSAgICAgICAgaWYgYW5kIG9ubHkgaWYgdGhlIGZvcm1hdCBpcyBTMTZfTEUsIG90aGVyd2lzZSBpdCBzdXBwb3J0cyBhbnkgZm9ybWF0Ci0gICAgICAgIHNwZWNpZmllZCBpbiB0aGUgPHN0cnVjdG5hbWU+c25kX3BjbV9oYXJkd2FyZTwvc3RydWN0bmFtZT4gc3RydWN0dXJlIChvciBpbiBhbnkKLSAgICAgICAgb3RoZXIgY29uc3RyYWludF9saXN0KS4gWW91IGNhbiBidWlsZCBhIHJ1bGUgbGlrZSB0aGlzOgotCi0gICAgICAgIDxleGFtcGxlPgotCSAgPHRpdGxlPkV4YW1wbGUgb2YgSGFyZHdhcmUgQ29uc3RyYWludHMgZm9yIENoYW5uZWxzPC90aXRsZT4KLQkgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IGh3X3J1bGVfZm9ybWF0X2J5X2NoYW5uZWxzKHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3J1bGUgKnJ1bGUpCi0gIHsKLSAgICAgICAgICBzdHJ1Y3Qgc25kX2ludGVydmFsICpjID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLAotICAgICAgICAgICAgICAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUyk7Ci0gICAgICAgICAgc3RydWN0IHNuZF9tYXNrICpmID0gaHdfcGFyYW1fbWFzayhwYXJhbXMsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQpOwotICAgICAgICAgIHN0cnVjdCBzbmRfbWFzayBmbXQ7Ci0KLSAgICAgICAgICBzbmRfbWFza19hbnkoJmZtdCk7ICAgIC8qIEluaXQgdGhlIHN0cnVjdCAqLwotICAgICAgICAgIGlmIChjLT5taW4gPCAyKSB7Ci0gICAgICAgICAgICAgICAgICBmbXQuYml0c1swXSAmPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRTsKLSAgICAgICAgICAgICAgICAgIHJldHVybiBzbmRfbWFza19yZWZpbmUoZiwgJmZtdCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiAwOwotICB9Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2V4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0gCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlbiB5b3UgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gdG8gYWRkIHlvdXIgcnVsZToKLQotICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0JIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfcGNtX2h3X3J1bGVfYWRkKHN1YnN0cmVhbS0+cnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTLAotICAgICAgICAgICAgICAgICAgICAgIGh3X3J1bGVfY2hhbm5lbHNfYnlfZm9ybWF0LCAwLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFULAotICAgICAgICAgICAgICAgICAgICAgIC0xKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHJ1bGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYW4gYXBwbGljYXRpb24gc2V0cyB0aGUgbnVtYmVyIG9mCi0gICAgICAgIGNoYW5uZWxzLiBCdXQgYW4gYXBwbGljYXRpb24gY2FuIHNldCB0aGUgZm9ybWF0IGJlZm9yZSB0aGUgbnVtYmVyIG9mCi0gICAgICAgIGNoYW5uZWxzLiBUaHVzIHlvdSBhbHNvIG5lZWQgdG8gZGVmaW5lIHRoZSBpbnZlcnNlIHJ1bGU6Ci0KLSAgICAgICA8ZXhhbXBsZT4KLQkgPHRpdGxlPkV4YW1wbGUgb2YgSGFyZHdhcmUgQ29uc3RyYWludHMgZm9yIENoYW5uZWxzPC90aXRsZT4KLQkgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgaHdfcnVsZV9jaGFubmVsc19ieV9mb3JtYXQoc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9wY21faHdfcnVsZSAqcnVsZSkKLSAgewotICAgICAgICAgIHN0cnVjdCBzbmRfaW50ZXJ2YWwgKmMgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOwotICAgICAgICAgIHN0cnVjdCBzbmRfbWFzayAqZiA9IGh3X3BhcmFtX21hc2socGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUKTsKLSAgICAgICAgICBzdHJ1Y3Qgc25kX2ludGVydmFsIGNoOwotCi0gICAgICAgICAgc25kX2ludGVydmFsX2FueSgmY2gpOwotICAgICAgICAgIGlmIChmLT5iaXRzWzBdID09IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFKSB7Ci0gICAgICAgICAgICAgICAgICBjaC5taW4gPSBjaC5tYXggPSAxOwotICAgICAgICAgICAgICAgICAgY2guaW50ZWdlciA9IDE7Ci0gICAgICAgICAgICAgICAgICByZXR1cm4gc25kX2ludGVydmFsX3JlZmluZShjLCAmY2gpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gMDsKLSAgfQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9leGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIC4uLmFuZCBpbiB0aGUgb3BlbiBjYWxsYmFjazoKLSAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotCSA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX3BjbV9od19ydWxlX2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQsCi0gICAgICAgICAgICAgICAgICAgICAgaHdfcnVsZV9mb3JtYXRfYnlfY2hhbm5lbHMsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywKLSAgICAgICAgICAgICAgICAgICAgICAtMSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEkgd29uJ3QgZ2l2ZSBtb3JlIGRldGFpbHMgaGVyZSwgcmF0aGVyIEkKLSAgICAgICAgd291bGQgbGlrZSB0byBzYXksIDxxdW90ZT5MdWtlLCB1c2UgdGhlIHNvdXJjZS48L3F1b3RlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIENvbnRyb2wgSW50ZXJmYWNlICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Y2hhcHRlciBpZD0iY29udHJvbC1pbnRlcmZhY2UiPgotICAgIDx0aXRsZT5Db250cm9sIEludGVyZmFjZTwvdGl0bGU+Ci0KLSAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtZ2VuZXJhbCI+Ci0gICAgICA8dGl0bGU+R2VuZXJhbDwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGNvbnRyb2wgaW50ZXJmYWNlIGlzIHVzZWQgd2lkZWx5IGZvciBtYW55IHN3aXRjaGVzLAotICAgICAgc2xpZGVycywgZXRjLiB3aGljaCBhcmUgYWNjZXNzZWQgZnJvbSB1c2VyLXNwYWNlLiBJdHMgbW9zdAotICAgICAgaW1wb3J0YW50IHVzZSBpcyB0aGUgbWl4ZXIgaW50ZXJmYWNlLiBJbiBvdGhlciB3b3Jkcywgc2luY2UgQUxTQQotICAgICAgMC45LngsIGFsbCB0aGUgbWl4ZXIgc3R1ZmYgaXMgaW1wbGVtZW50ZWQgb24gdGhlIGNvbnRyb2wga2VybmVsIEFQSS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFMU0EgaGFzIGEgd2VsbC1kZWZpbmVkIEFDOTcgY29udHJvbCBtb2R1bGUuIElmIHlvdXIgY2hpcAotICAgICAgc3VwcG9ydHMgb25seSB0aGUgQUM5NyBhbmQgbm90aGluZyBlbHNlLCB5b3UgY2FuIHNraXAgdGhpcwotICAgICAgc2VjdGlvbi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgY29udHJvbCBBUEkgaXMgZGVmaW5lZCBpbgotICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9jb250cm9sLmgmZ3Q7PC9maWxlbmFtZT4uCi0gICAgICBJbmNsdWRlIHRoaXMgZmlsZSBpZiB5b3Ugd2FudCB0byBhZGQgeW91ciBvd24gY29udHJvbHMuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWRlZmluaXRpb24iPgotICAgICAgPHRpdGxlPkRlZmluaXRpb24gb2YgQ29udHJvbHM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFRvIGNyZWF0ZSBhIG5ldyBjb250cm9sLCB5b3UgbmVlZCB0byBkZWZpbmUgdGhlCi0JZm9sbG93aW5nIHRocmVlCi0gICAgICBjYWxsYmFja3M6IDxzdHJ1Y3RmaWVsZD5pbmZvPC9zdHJ1Y3RmaWVsZD4sCi0gICAgICA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gYW5kCi0gICAgICA8c3RydWN0ZmllbGQ+cHV0PC9zdHJ1Y3RmaWVsZD4uIFRoZW4sIGRlZmluZSBhCi0gICAgICBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX2tjb250cm9sX25ldzwvc3RydWN0bmFtZT4gcmVjb3JkLCBzdWNoIGFzOiAKLQotICAgICAgICA8ZXhhbXBsZT4KLQkgIDx0aXRsZT5EZWZpbml0aW9uIG9mIGEgQ29udHJvbDwvdGl0bGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBteV9jb250cm9sIF9fZGV2aW5pdGRhdGEgPSB7Ci0gICAgICAgICAgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0gICAgICAgICAgLm5hbWUgPSAiUENNIFBsYXliYWNrIFN3aXRjaCIsCi0gICAgICAgICAgLmluZGV4ID0gMCwKLSAgICAgICAgICAuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSwKLSAgICAgICAgICAucHJpdmF0ZV92YWx1ZSA9IDB4ZmZmZiwKLSAgICAgICAgICAuaW5mbyA9IG15X2NvbnRyb2xfaW5mbywKLSAgICAgICAgICAuZ2V0ID0gbXlfY29udHJvbF9nZXQsCi0gICAgICAgICAgLnB1dCA9IG15X2NvbnRyb2xfcHV0Ci0gIH07Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2V4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBNb3N0IGxpa2VseSB0aGUgY29udHJvbCBpcyBjcmVhdGVkIHZpYQotICAgICAgPGZ1bmN0aW9uPnNuZF9jdGxfbmV3MSgpPC9mdW5jdGlvbj4sIGFuZCBpbiBzdWNoIGEgY2FzZSwgeW91IGNhbgotICAgICAgYWRkIHRoZSA8cGFyYW1ldGVyPl9fZGV2aW5pdGRhdGE8L3BhcmFtZXRlcj4gcHJlZml4IHRvIHRoZQotICAgICAgZGVmaW5pdGlvbiBhcyBhYm92ZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmlmYWNlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgc3BlY2lmaWVzIHRoZSBjb250cm9sCi0gICAgICB0eXBlLCA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fSUZBQ0VfWFhYPC9jb25zdGFudD4sIHdoaWNoCi0gICAgICBpcyB1c3VhbGx5IDxjb25zdGFudD5NSVhFUjwvY29uc3RhbnQ+LgotICAgICAgVXNlIDxjb25zdGFudD5DQVJEPC9jb25zdGFudD4gZm9yIGdsb2JhbCBjb250cm9scyB0aGF0IGFyZSBub3QKLSAgICAgIGxvZ2ljYWxseSBwYXJ0IG9mIHRoZSBtaXhlci4KLSAgICAgIElmIHRoZSBjb250cm9sIGlzIGNsb3NlbHkgYXNzb2NpYXRlZCB3aXRoIHNvbWUgc3BlY2lmaWMgZGV2aWNlIG9uCi0gICAgICB0aGUgc291bmQgY2FyZCwgdXNlIDxjb25zdGFudD5IV0RFUDwvY29uc3RhbnQ+LAotICAgICAgPGNvbnN0YW50PlBDTTwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+UkFXTUlESTwvY29uc3RhbnQ+LAotICAgICAgPGNvbnN0YW50PlRJTUVSPC9jb25zdGFudD4sIG9yIDxjb25zdGFudD5TRVFVRU5DRVI8L2NvbnN0YW50PiwgYW5kCi0gICAgICBzcGVjaWZ5IHRoZSBkZXZpY2UgbnVtYmVyIHdpdGggdGhlCi0gICAgICA8c3RydWN0ZmllbGQ+ZGV2aWNlPC9zdHJ1Y3RmaWVsZD4gYW5kCi0gICAgICA8c3RydWN0ZmllbGQ+c3ViZGV2aWNlPC9zdHJ1Y3RmaWVsZD4gZmllbGRzLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5uYW1lPC9zdHJ1Y3RmaWVsZD4gaXMgdGhlIG5hbWUgaWRlbnRpZmllcgotICAgICAgc3RyaW5nLiBTaW5jZSBBTFNBIDAuOS54LCB0aGUgY29udHJvbCBuYW1lIGlzIHZlcnkgaW1wb3J0YW50LAotICAgICAgYmVjYXVzZSBpdHMgcm9sZSBpcyBjbGFzc2lmaWVkIGZyb20gaXRzIG5hbWUuIFRoZXJlIGFyZQotICAgICAgcHJlLWRlZmluZWQgc3RhbmRhcmQgY29udHJvbCBuYW1lcy4gVGhlIGRldGFpbHMgYXJlIGRlc2NyaWJlZCBpbgotICAgICAgdGhlIDxsaW5rIGxpbmtlbmQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMiPjxjaXRldGl0bGU+Ci0gICAgICBDb250cm9sIE5hbWVzPC9jaXRldGl0bGU+PC9saW5rPiBzdWJzZWN0aW9uLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pbmRleDwvc3RydWN0ZmllbGQ+IGZpZWxkIGhvbGRzIHRoZSBpbmRleCBudW1iZXIKLSAgICAgIG9mIHRoaXMgY29udHJvbC4gSWYgdGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IGNvbnRyb2xzIHdpdGgKLSAgICAgIHRoZSBzYW1lIG5hbWUsIHRoZXkgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlIGluZGV4Ci0gICAgICBudW1iZXIuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiAKLSAgICAgIHNldmVyYWwgY29kZWNzIGV4aXN0IG9uIHRoZSBjYXJkLiBJZiB0aGUgaW5kZXggaXMgemVybywgeW91IGNhbgotICAgICAgb21pdCB0aGUgZGVmaW5pdGlvbiBhYm92ZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPmFjY2Vzczwvc3RydWN0ZmllbGQ+IGZpZWxkIGNvbnRhaW5zIHRoZSBhY2Nlc3MKLSAgICAgIHR5cGUgb2YgdGhpcyBjb250cm9sLiBHaXZlIHRoZSBjb21iaW5hdGlvbiBvZiBiaXQgbWFza3MsCi0gICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fQUNDRVNTX1hYWDwvY29uc3RhbnQ+LCB0aGVyZS4KLSAgICAgIFRoZSBkZXRhaWxzIHdpbGwgYmUgZXhwbGFpbmVkIGluCi0gICAgICB0aGUgPGxpbmsgbGlua2VuZD0iY29udHJvbC1pbnRlcmZhY2UtYWNjZXNzLWZsYWdzIj48Y2l0ZXRpdGxlPgotICAgICAgQWNjZXNzIEZsYWdzPC9jaXRldGl0bGU+PC9saW5rPiBzdWJzZWN0aW9uLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5wcml2YXRlX3ZhbHVlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgY29udGFpbnMKLSAgICAgIGFuIGFyYml0cmFyeSBsb25nIGludGVnZXIgdmFsdWUgZm9yIHRoaXMgcmVjb3JkLiBXaGVuIHVzaW5nCi0gICAgICB0aGUgZ2VuZXJpYyA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+LAotICAgICAgPHN0cnVjdGZpZWxkPmdldDwvc3RydWN0ZmllbGQ+IGFuZAotICAgICAgPHN0cnVjdGZpZWxkPnB1dDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrcywgeW91IGNhbiBwYXNzIGEgdmFsdWUgCi0gICAgICB0aHJvdWdoIHRoaXMgZmllbGQuIElmIHNldmVyYWwgc21hbGwgbnVtYmVycyBhcmUgbmVjZXNzYXJ5LCB5b3UgY2FuCi0gICAgICBjb21iaW5lIHRoZW0gaW4gYml0d2lzZS4gT3IsIGl0J3MgcG9zc2libGUgdG8gZ2l2ZSBhIHBvaW50ZXIKLSAgICAgIChjYXN0ZWQgdG8gdW5zaWduZWQgbG9uZykgb2Ygc29tZSByZWNvcmQgdG8gdGhpcyBmaWVsZCwgdG9vLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBUaGUgPHN0cnVjdGZpZWxkPnRsdjwvc3RydWN0ZmllbGQ+IGZpZWxkIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUKLSAgICAgIG1ldGFkYXRhIGFib3V0IHRoZSBjb250cm9sOyBzZWUgdGhlCi0gICAgICA8bGluayBsaW5rZW5kPSJjb250cm9sLWludGVyZmFjZS10bHYiPgotICAgICAgPGNpdGV0aXRsZT5NZXRhZGF0YTwvY2l0ZXRpdGxlPjwvbGluaz4gc3Vic2VjdGlvbi4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBvdGhlciB0aHJlZSBhcmUKLQk8bGluayBsaW5rZW5kPSJjb250cm9sLWludGVyZmFjZS1jYWxsYmFja3MiPjxjaXRldGl0bGU+Ci0JY2FsbGJhY2sgZnVuY3Rpb25zPC9jaXRldGl0bGU+PC9saW5rPi4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY29udHJvbC1uYW1lcyI+Ci0gICAgICA8dGl0bGU+Q29udHJvbCBOYW1lczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlcmUgYXJlIHNvbWUgc3RhbmRhcmRzIHRvIGRlZmluZSB0aGUgY29udHJvbCBuYW1lcy4gQQotICAgICAgY29udHJvbCBpcyB1c3VhbGx5IGRlZmluZWQgZnJvbSB0aGUgdGhyZWUgcGFydHMgYXMKLSAgICAgIDxxdW90ZT5TT1VSQ0UgRElSRUNUSU9OIEZVTkNUSU9OPC9xdW90ZT4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0LCA8Y29uc3RhbnQ+U09VUkNFPC9jb25zdGFudD4sIHNwZWNpZmllcyB0aGUgc291cmNlCi0gICAgICBvZiB0aGUgY29udHJvbCwgYW5kIGlzIGEgc3RyaW5nIHN1Y2ggYXMgPHF1b3RlPk1hc3RlcjwvcXVvdGU+LAotICAgICAgPHF1b3RlPlBDTTwvcXVvdGU+LCA8cXVvdGU+Q0Q8L3F1b3RlPiBhbmQKLSAgICAgIDxxdW90ZT5MaW5lPC9xdW90ZT4uIFRoZXJlIGFyZSBtYW55IHByZS1kZWZpbmVkIHNvdXJjZXMuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHNlY29uZCwgPGNvbnN0YW50PkRJUkVDVElPTjwvY29uc3RhbnQ+LCBpcyBvbmUgb2YgdGhlCi0gICAgICBmb2xsb3dpbmcgc3RyaW5ncyBhY2NvcmRpbmcgdG8gdGhlIGRpcmVjdGlvbiBvZiB0aGUgY29udHJvbDoKLSAgICAgIDxxdW90ZT5QbGF5YmFjazwvcXVvdGU+LCA8cXVvdGU+Q2FwdHVyZTwvcXVvdGU+LCA8cXVvdGU+QnlwYXNzCi0gICAgICBQbGF5YmFjazwvcXVvdGU+IGFuZCA8cXVvdGU+QnlwYXNzIENhcHR1cmU8L3F1b3RlPi4gT3IsIGl0IGNhbgotICAgICAgYmUgb21pdHRlZCwgbWVhbmluZyBib3RoIHBsYXliYWNrIGFuZCBjYXB0dXJlIGRpcmVjdGlvbnMuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIHRoaXJkLCA8Y29uc3RhbnQ+RlVOQ1RJT048L2NvbnN0YW50PiwgaXMgb25lIG9mIHRoZQotICAgICAgZm9sbG93aW5nIHN0cmluZ3MgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbiBvZiB0aGUgY29udHJvbDoKLSAgICAgIDxxdW90ZT5Td2l0Y2g8L3F1b3RlPiwgPHF1b3RlPlZvbHVtZTwvcXVvdGU+IGFuZAotICAgICAgPHF1b3RlPlJvdXRlPC9xdW90ZT4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGV4YW1wbGUgb2YgY29udHJvbCBuYW1lcyBhcmUsIHRodXMsIDxxdW90ZT5NYXN0ZXIgQ2FwdHVyZQotICAgICAgU3dpdGNoPC9xdW90ZT4gb3IgPHF1b3RlPlBDTSBQbGF5YmFjayBWb2x1bWU8L3F1b3RlPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGVyZSBhcmUgc29tZSBleGNlcHRpb25zOgotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY29udHJvbC1uYW1lcy1nbG9iYWwiPgotICAgICAgICA8dGl0bGU+R2xvYmFsIGNhcHR1cmUgYW5kIHBsYXliYWNrPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgPHF1b3RlPkNhcHR1cmUgU291cmNlPC9xdW90ZT4sIDxxdW90ZT5DYXB0dXJlIFN3aXRjaDwvcXVvdGU+Ci0gICAgICAgIGFuZCA8cXVvdGU+Q2FwdHVyZSBWb2x1bWU8L3F1b3RlPiBhcmUgdXNlZCBmb3IgdGhlIGdsb2JhbAotICAgICAgICBjYXB0dXJlIChpbnB1dCkgc291cmNlLCBzd2l0Y2ggYW5kIHZvbHVtZS4gU2ltaWxhcmx5LAotICAgICAgICA8cXVvdGU+UGxheWJhY2sgU3dpdGNoPC9xdW90ZT4gYW5kIDxxdW90ZT5QbGF5YmFjawotICAgICAgICBWb2x1bWU8L3F1b3RlPiBhcmUgdXNlZCBmb3IgdGhlIGdsb2JhbCBvdXRwdXQgZ2FpbiBzd2l0Y2ggYW5kCi0gICAgICAgIHZvbHVtZS4gCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtdG9uZSI+Ci0gICAgICAgIDx0aXRsZT5Ub25lLWNvbnRyb2xzPC90aXRsZT4KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgdG9uZS1jb250cm9sIHN3aXRjaCBhbmQgdm9sdW1lcyBhcmUgc3BlY2lmaWVkIGxpa2UKLSAgICAgICAgPHF1b3RlPlRvbmUgQ29udHJvbCAtIFhYWDwvcXVvdGU+LCBlLmcuIDxxdW90ZT5Ub25lIENvbnRyb2wgLQotICAgICAgICBTd2l0Y2g8L3F1b3RlPiwgPHF1b3RlPlRvbmUgQ29udHJvbCAtIEJhc3M8L3F1b3RlPiwKLSAgICAgICAgPHF1b3RlPlRvbmUgQ29udHJvbCAtIENlbnRlcjwvcXVvdGU+LiAgCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtM2QiPgotICAgICAgICA8dGl0bGU+M0QgY29udHJvbHM8L3RpdGxlPgotICAgICAgICA8cGFyYT4KLSAgICAgICAgICAzRC1jb250cm9sIHN3aXRjaGVzIGFuZCB2b2x1bWVzIGFyZSBzcGVjaWZpZWQgbGlrZSA8cXVvdGU+M0QKLSAgICAgICAgQ29udHJvbCAtIFhYWDwvcXVvdGU+LCBlLmcuIDxxdW90ZT4zRCBDb250cm9sIC0KLSAgICAgICAgU3dpdGNoPC9xdW90ZT4sIDxxdW90ZT4zRCBDb250cm9sIC0gQ2VudGVyPC9xdW90ZT4sIDxxdW90ZT4zRAotICAgICAgICBDb250cm9sIC0gU3BhY2U8L3F1b3RlPi4gCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnRyb2wtbmFtZXMtbWljIj4KLSAgICAgICAgPHRpdGxlPk1pYyBib29zdDwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIE1pYy1ib29zdCBzd2l0Y2ggaXMgc2V0IGFzIDxxdW90ZT5NaWMgQm9vc3Q8L3F1b3RlPiBvcgotICAgICAgICA8cXVvdGU+TWljIEJvb3N0ICg2ZEIpPC9xdW90ZT4uIAotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgICAgTW9yZSBwcmVjaXNlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBpbgotICAgICAgICA8ZmlsZW5hbWU+RG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0NvbnRyb2xOYW1lcy50eHQ8L2ZpbGVuYW1lPi4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1hY2Nlc3MtZmxhZ3MiPgotICAgICAgPHRpdGxlPkFjY2VzcyBGbGFnczwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIGFjY2VzcyBmbGFnIGlzIHRoZSBiaXRtYXNrIHdoaWNoIHNwZWNpZmllcyB0aGUgYWNjZXNzIHR5cGUKLSAgICAgIG9mIHRoZSBnaXZlbiBjb250cm9sLiAgVGhlIGRlZmF1bHQgYWNjZXNzIHR5cGUgaXMKLSAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFPC9jb25zdGFudD4sIAotICAgICAgd2hpY2ggbWVhbnMgYm90aCByZWFkIGFuZCB3cml0ZSBhcmUgYWxsb3dlZCB0byB0aGlzIGNvbnRyb2wuCi0gICAgICBXaGVuIHRoZSBhY2Nlc3MgZmxhZyBpcyBvbWl0dGVkIChpLmUuID0gMCksIGl0IGlzCi0gICAgICBjb25zaWRlcmVkIGFzIDxjb25zdGFudD5SRUFEV1JJVEU8L2NvbnN0YW50PiBhY2Nlc3MgYXMgZGVmYXVsdC4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgV2hlbiB0aGUgY29udHJvbCBpcyByZWFkLW9ubHksIHBhc3MKLSAgICAgIDxjb25zdGFudD5TTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRDwvY29uc3RhbnQ+IGluc3RlYWQuCi0gICAgICBJbiB0aGlzIGNhc2UsIHlvdSBkb24ndCBoYXZlIHRvIGRlZmluZQotICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5wdXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KLSAgICAgIFNpbWlsYXJseSwgd2hlbiB0aGUgY29udHJvbCBpcyB3cml0ZS1vbmx5IChhbHRob3VnaCBpdCdzIGEgcmFyZQotICAgICAgY2FzZSksIHlvdSBjYW4gdXNlIHRoZSA8Y29uc3RhbnQ+V1JJVEU8L2NvbnN0YW50PiBmbGFnIGluc3RlYWQsIGFuZAotICAgICAgeW91IGRvbid0IG5lZWQgdGhlIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjay4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBJZiB0aGUgY29udHJvbCB2YWx1ZSBjaGFuZ2VzIGZyZXF1ZW50bHkgKGUuZy4gdGhlIFZVIG1ldGVyKSwKLSAgICAgIDxjb25zdGFudD5WT0xBVElMRTwvY29uc3RhbnQ+IGZsYWcgc2hvdWxkIGJlIGdpdmVuLiAgVGhpcyBtZWFucwotICAgICAgdGhhdCB0aGUgY29udHJvbCBtYXkgYmUgY2hhbmdlZCB3aXRob3V0Ci0gICAgICA8bGluayBsaW5rZW5kPSJjb250cm9sLWludGVyZmFjZS1jaGFuZ2Utbm90aWZpY2F0aW9uIj48Y2l0ZXRpdGxlPgotICAgICAgbm90aWZpY2F0aW9uPC9jaXRldGl0bGU+PC9saW5rPi4gQXBwbGljYXRpb25zIHNob3VsZCBwb2xsIHN1Y2gKLSAgICAgIGEgY29udHJvbCBjb25zdGFudGx5LgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFdoZW4gdGhlIGNvbnRyb2wgaXMgaW5hY3RpdmUsIHNldAotICAgICAgdGhlIDxjb25zdGFudD5JTkFDVElWRTwvY29uc3RhbnQ+IGZsYWcsIHRvby4KLSAgICAgIFRoZXJlIGFyZSA8Y29uc3RhbnQ+TE9DSzwvY29uc3RhbnQ+IGFuZAotICAgICAgPGNvbnN0YW50Pk9XTkVSPC9jb25zdGFudD4gZmxhZ3MgdG8gY2hhbmdlIHRoZSB3cml0ZQotICAgICAgcGVybWlzc2lvbnMuCi0gICAgICA8L3BhcmE+Ci0KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzIj4KLSAgICAgIDx0aXRsZT5DYWxsYmFja3M8L3RpdGxlPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLWluZm8iPgotICAgICAgICA8dGl0bGU+aW5mbyBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+aW5mbzwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgdG8gZ2V0Ci0gICAgICAgIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udHJvbC4gVGhpcyBtdXN0IHN0b3JlIHRoZQotICAgICAgICB2YWx1ZXMgb2YgdGhlIGdpdmVuIHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfY3RsX2VsZW1faW5mbzwvc3RydWN0bmFtZT4KLSAgICAgICAgb2JqZWN0LiBGb3IgZXhhbXBsZSwgZm9yIGEgYm9vbGVhbiBjb250cm9sIHdpdGggYSBzaW5nbGUKLSAgICAgICAgZWxlbWVudDogCi0KLSAgICAgICAgICA8ZXhhbXBsZT4KLQkgICAgPHRpdGxlPkV4YW1wbGUgb2YgaW5mbyBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfbXljdGxfbW9ub19pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotICB7Ci0gICAgICAgICAgdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU47Ci0gICAgICAgICAgdWluZm8tPmNvdW50ID0gMTsKLSAgICAgICAgICB1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwotICAgICAgICAgIHVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDE7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2V4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnR5cGU8L3N0cnVjdGZpZWxkPiBmaWVsZCBzcGVjaWZpZXMgdGhlIHR5cGUKLSAgICAgICAgb2YgdGhlIGNvbnRyb2wuIFRoZXJlIGFyZSA8Y29uc3RhbnQ+Qk9PTEVBTjwvY29uc3RhbnQ+LAotICAgICAgICA8Y29uc3RhbnQ+SU5URUdFUjwvY29uc3RhbnQ+LCA8Y29uc3RhbnQ+RU5VTUVSQVRFRDwvY29uc3RhbnQ+LAotICAgICAgICA8Y29uc3RhbnQ+QllURVM8L2NvbnN0YW50PiwgPGNvbnN0YW50PklFQzk1ODwvY29uc3RhbnQ+IGFuZAotICAgICAgICA8Y29uc3RhbnQ+SU5URUdFUjY0PC9jb25zdGFudD4uIFRoZQotICAgICAgICA8c3RydWN0ZmllbGQ+Y291bnQ8L3N0cnVjdGZpZWxkPiBmaWVsZCBzcGVjaWZpZXMgdGhlIAotICAgICAgICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhpcyBjb250cm9sLiBGb3IgZXhhbXBsZSwgYSBzdGVyZW8KLSAgICAgICAgdm9sdW1lIHdvdWxkIGhhdmUgY291bnQgPSAyLiBUaGUKLSAgICAgICAgPHN0cnVjdGZpZWxkPnZhbHVlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaXMgYSB1bmlvbiwgYW5kIAotICAgICAgICB0aGUgdmFsdWVzIHN0b3JlZCBhcmUgZGVwZW5kaW5nIG9uIHRoZSB0eXBlLiBUaGUgYm9vbGVhbiBhbmQKLSAgICAgICAgaW50ZWdlciB0eXBlcyBhcmUgaWRlbnRpY2FsLiAKLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoZSBlbnVtZXJhdGVkIHR5cGUgaXMgYSBiaXQgZGlmZmVyZW50IGZyb20gb3RoZXJzLiAgWW91J2xsCi0gICAgICAgICAgbmVlZCB0byBzZXQgdGhlIHN0cmluZyBmb3IgdGhlIGN1cnJlbnRseSBnaXZlbiBpdGVtIGluZGV4LiAKLQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfbXljdGxfZW51bV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotICB7Ci0gICAgICAgICAgc3RhdGljIGNoYXIgKnRleHRzWzRdID0gewotICAgICAgICAgICAgICAgICAgIkZpcnN0IiwgIlNlY29uZCIsICJUaGlyZCIsICJGb3VydGgiCi0gICAgICAgICAgfTsKLSAgICAgICAgICB1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKLSAgICAgICAgICB1aW5mby0+Y291bnQgPSAxOwotICAgICAgICAgIHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gNDsKLSAgICAgICAgICBpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IDMpCi0gICAgICAgICAgICAgICAgICB1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID0gMzsKLSAgICAgICAgICBzdHJjcHkodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwKLSAgICAgICAgICAgICAgICAgdGV4dHNbdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbV0pOwotICAgICAgICAgIHJldHVybiAwOwotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLQkgIFNvbWUgY29tbW9uIGluZm8gY2FsbGJhY2tzIGFyZSBhdmFpbGFibGUgZm9yIHlvdXIgY29udmVuaWVuY2U6Ci0JPGZ1bmN0aW9uPnNuZF9jdGxfYm9vbGVhbl9tb25vX2luZm8oKTwvZnVuY3Rpb24+IGFuZAotCTxmdW5jdGlvbj5zbmRfY3RsX2Jvb2xlYW5fc3RlcmVvX2luZm8oKTwvZnVuY3Rpb24+LgotCU9idmlvdXNseSwgdGhlIGZvcm1lciBpcyBhbiBpbmZvIGNhbGxiYWNrIGZvciBhIG1vbm8gY2hhbm5lbAotCWJvb2xlYW4gaXRlbSwganVzdCBsaWtlIDxmdW5jdGlvbj5zbmRfbXljdGxfbW9ub19pbmZvPC9mdW5jdGlvbj4KLQlhYm92ZSwgYW5kIHRoZSBsYXR0ZXIgaXMgZm9yIGEgc3RlcmVvIGNoYW5uZWwgYm9vbGVhbiBpdGVtLgotCTwvcGFyYT4KLQotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLWdldCI+Ci0gICAgICAgIDx0aXRsZT5nZXQgY2FsbGJhY2s8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCB0byByZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQotICAgICAgICBjb250cm9sIGFuZCB0byByZXR1cm4gdG8gdXNlci1zcGFjZS4gCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgICBGb3IgZXhhbXBsZSwKLQotICAgICAgICAgIDxleGFtcGxlPgotCSAgICA8dGl0bGU+RXhhbXBsZSBvZiBnZXQgY2FsbGJhY2s8L3RpdGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgc25kX215Y3RsX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLSAgICAgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGdldF9zb21lX3ZhbHVlKGNoaXApOwotICAgICAgICAgIHJldHVybiAwOwotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9leGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0JVGhlIDxzdHJ1Y3RmaWVsZD52YWx1ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGRlcGVuZHMgb24gCi0gICAgICAgIHRoZSB0eXBlIG9mIGNvbnRyb2wgYXMgd2VsbCBhcyBvbiB0aGUgaW5mbyBjYWxsYmFjay4gIEZvciBleGFtcGxlLAotCXRoZSBzYiBkcml2ZXIgdXNlcyB0aGlzIGZpZWxkIHRvIHN0b3JlIHRoZSByZWdpc3RlciBvZmZzZXQsCi0gICAgICAgIHRoZSBiaXQtc2hpZnQgYW5kIHRoZSBiaXQtbWFzay4gIFRoZQotICAgICAgICA8c3RydWN0ZmllbGQ+cHJpdmF0ZV92YWx1ZTwvc3RydWN0ZmllbGQ+IGZpZWxkIGlzIHNldCBhcyBmb2xsb3dzOgotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgLnByaXZhdGVfdmFsdWUgPSByZWcgfCAoc2hpZnQgPDwgMTYpIHwgKG1hc2sgPDwgMjQpCi1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0JYW5kIGlzIHJldHJpZXZlZCBpbiBjYWxsYmFja3MgbGlrZQotICAgICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfc2JtaXhlcl9nZXRfc2luZ2xlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi0gIHsKLSAgICAgICAgICBpbnQgcmVnID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmOwotICAgICAgICAgIGludCBzaGlmdCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweGZmOwotICAgICAgICAgIGludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDI0KSAmIDB4ZmY7Ci0gICAgICAgICAgLi4uLgotICB9Ci1dXT4KLSAgICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JSW4gdGhlIDxzdHJ1Y3RmaWVsZD5nZXQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjaywKLQl5b3UgaGF2ZSB0byBmaWxsIGFsbCB0aGUgZWxlbWVudHMgaWYgdGhlCi0gICAgICAgIGNvbnRyb2wgaGFzIG1vcmUgdGhhbiBvbmUgZWxlbWVudHMsCi0gICAgICAgIGkuZS4gPHN0cnVjdGZpZWxkPmNvdW50PC9zdHJ1Y3RmaWVsZD4gJmd0OyAxLgotCUluIHRoZSBleGFtcGxlIGFib3ZlLCB3ZSBmaWxsZWQgb25seSBvbmUgZWxlbWVudAotICAgICAgICAoPHN0cnVjdGZpZWxkPnZhbHVlLmludGVnZXIudmFsdWVbMF08L3N0cnVjdGZpZWxkPikgc2luY2UgaXQncwotICAgICAgICBhc3N1bWVkIGFzIDxzdHJ1Y3RmaWVsZD5jb3VudDwvc3RydWN0ZmllbGQ+ID0gMS4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0iY29udHJvbC1pbnRlcmZhY2UtY2FsbGJhY2tzLXB1dCI+Ci0gICAgICAgIDx0aXRsZT5wdXQgY2FsbGJhY2s8L3RpdGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIFRoaXMgY2FsbGJhY2sgaXMgdXNlZCB0byB3cml0ZSBhIHZhbHVlIGZyb20gdXNlci1zcGFjZS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEZvciBleGFtcGxlLAotCi0gICAgICAgICAgPGV4YW1wbGU+Ci0JICAgIDx0aXRsZT5FeGFtcGxlIG9mIHB1dCBjYWxsYmFjazwvdGl0bGU+Ci0gICAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfbXljdGxfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotICAgICAgICAgIGludCBjaGFuZ2VkID0gMDsKLSAgICAgICAgICBpZiAoY2hpcC0+Y3VycmVudF92YWx1ZSAhPQotICAgICAgICAgICAgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pIHsKLSAgICAgICAgICAgICAgICAgIGNoYW5nZV9jdXJyZW50X3ZhbHVlKGNoaXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSk7Ci0gICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIGNoYW5nZWQ7Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2V4YW1wbGU+Ci0KLSAgICAgICAgICBBcyBzZWVuIGFib3ZlLCB5b3UgaGF2ZSB0byByZXR1cm4gMSBpZiB0aGUgdmFsdWUgaXMKLSAgICAgICAgY2hhbmdlZC4gSWYgdGhlIHZhbHVlIGlzIG5vdCBjaGFuZ2VkLCByZXR1cm4gMCBpbnN0ZWFkLiAKLQlJZiBhbnkgZmF0YWwgZXJyb3IgaGFwcGVucywgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBhcwotICAgICAgICB1c3VhbC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotCUFzIGluIHRoZSA8c3RydWN0ZmllbGQ+Z2V0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2ssCi0Jd2hlbiB0aGUgY29udHJvbCBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50cywKLQlhbGwgZWxlbWVudHMgbXVzdCBiZSBldmFsdWF0ZWQgaW4gdGhpcyBjYWxsYmFjaywgdG9vLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS1jYWxsYmFja3MtYWxsIj4KLSAgICAgICAgPHRpdGxlPkNhbGxiYWNrcyBhcmUgbm90IGF0b21pYzwvdGl0bGU+Ci0gICAgICAgIDxwYXJhPgotICAgICAgICAgIEFsbCB0aGVzZSB0aHJlZSBjYWxsYmFja3MgYXJlIGJhc2ljYWxseSBub3QgYXRvbWljLgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNvbnN0cnVjdG9yIj4KLSAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgV2hlbiBldmVyeXRoaW5nIGlzIHJlYWR5LCBmaW5hbGx5IHdlIGNhbiBjcmVhdGUgYSBuZXcKLSAgICAgIGNvbnRyb2wuIFRvIGNyZWF0ZSBhIGNvbnRyb2wsIHRoZXJlIGFyZSB0d28gZnVuY3Rpb25zIHRvIGJlCi0gICAgICBjYWxsZWQsIDxmdW5jdGlvbj5zbmRfY3RsX25ldzEoKTwvZnVuY3Rpb24+IGFuZAotICAgICAgPGZ1bmN0aW9uPnNuZF9jdGxfYWRkKCk8L2Z1bmN0aW9uPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiB0aGUgc2ltcGxlc3Qgd2F5LCB5b3UgY2FuIGRvIGxpa2UgdGhpczoKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBlcnIgPSBzbmRfY3RsX2FkZChjYXJkLCBzbmRfY3RsX25ldzEoJm15X2NvbnRyb2wsIGNoaXApKTsKLSAgaWYgKGVyciA8IDApCi0gICAgICAgICAgcmV0dXJuIGVycjsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIHdoZXJlIDxwYXJhbWV0ZXI+bXlfY29udHJvbDwvcGFyYW1ldGVyPiBpcyB0aGUKLSAgICAgIHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfa2NvbnRyb2xfbmV3PC9zdHJ1Y3RuYW1lPiBvYmplY3QgZGVmaW5lZCBhYm92ZSwgYW5kIGNoaXAKLSAgICAgIGlzIHRoZSBvYmplY3QgcG9pbnRlciB0byBiZSBwYXNzZWQgdG8KLSAgICAgIGtjb250cm9sLSZndDtwcml2YXRlX2RhdGEgCi0gICAgICB3aGljaCBjYW4gYmUgcmVmZXJyZWQgdG8gaW4gY2FsbGJhY2tzLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIDxmdW5jdGlvbj5zbmRfY3RsX25ldzEoKTwvZnVuY3Rpb24+IGFsbG9jYXRlcyBhIG5ldwotICAgICAgPHN0cnVjdG5hbWU+c25kX2tjb250cm9sPC9zdHJ1Y3RuYW1lPiBpbnN0YW5jZSAodGhhdCdzIHdoeSB0aGUgZGVmaW5pdGlvbgotICAgICAgb2YgPHBhcmFtZXRlcj5teV9jb250cm9sPC9wYXJhbWV0ZXI+IGNhbiBiZSB3aXRoCi0gICAgICB0aGUgPHBhcmFtZXRlcj5fX2RldmluaXRkYXRhPC9wYXJhbWV0ZXI+IAotICAgICAgcHJlZml4KSwgYW5kIDxmdW5jdGlvbj5zbmRfY3RsX2FkZDwvZnVuY3Rpb24+IGFzc2lnbnMgdGhlIGdpdmVuCi0gICAgICBjb250cm9sIGNvbXBvbmVudCB0byB0aGUgY2FyZC4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImNvbnRyb2wtaW50ZXJmYWNlLWNoYW5nZS1ub3RpZmljYXRpb24iPgotICAgICAgPHRpdGxlPkNoYW5nZSBOb3RpZmljYXRpb248L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHlvdSBuZWVkIHRvIGNoYW5nZSBhbmQgdXBkYXRlIGEgY29udHJvbCBpbiB0aGUgaW50ZXJydXB0Ci0gICAgICByb3V0aW5lLCB5b3UgY2FuIGNhbGwgPGZ1bmN0aW9uPnNuZF9jdGxfbm90aWZ5KCk8L2Z1bmN0aW9uPi4gRm9yCi0gICAgICBleGFtcGxlLCAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfY3RsX25vdGlmeShjYXJkLCBTTkRSVl9DVExfRVZFTlRfTUFTS19WQUxVRSwgaWRfcG9pbnRlcik7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBldmVudC1tYXNrLCBhbmQgdGhlCi0gICAgICBjb250cm9sIGlkIHBvaW50ZXIgZm9yIHRoZSBub3RpZmljYXRpb24uIFRoZSBldmVudC1tYXNrCi0gICAgICBzcGVjaWZpZXMgdGhlIHR5cGVzIG9mIG5vdGlmaWNhdGlvbiwgZm9yIGV4YW1wbGUsIGluIHRoZSBhYm92ZQotICAgICAgZXhhbXBsZSwgdGhlIGNoYW5nZSBvZiBjb250cm9sIHZhbHVlcyBpcyBub3RpZmllZC4KLSAgICAgIFRoZSBpZCBwb2ludGVyIGlzIHRoZSBwb2ludGVyIG9mIHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfY3RsX2VsZW1faWQ8L3N0cnVjdG5hbWU+Ci0gICAgICB0byBiZSBub3RpZmllZC4KLSAgICAgIFlvdSBjYW4gZmluZCBzb21lIGV4YW1wbGVzIGluIDxmaWxlbmFtZT5lczE5MzguYzwvZmlsZW5hbWU+IG9yCi0gICAgICA8ZmlsZW5hbWU+ZXMxOTY4LmM8L2ZpbGVuYW1lPiBmb3IgaGFyZHdhcmUgdm9sdW1lIGludGVycnVwdHMuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJjb250cm9sLWludGVyZmFjZS10bHYiPgotICAgICAgPHRpdGxlPk1ldGFkYXRhPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgVG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZEIgdmFsdWVzIG9mIGEgbWl4ZXIgY29udHJvbCwgdXNlCi0gICAgICBvbiBvZiB0aGUgPGNvbnN0YW50PkRFQ0xBUkVfVExWX3h4eDwvY29uc3RhbnQ+IG1hY3JvcyBmcm9tCi0gICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL3Rsdi5oJmd0OzwvZmlsZW5hbWU+IHRvIGRlZmluZSBhIHZhcmlhYmxlCi0gICAgICBjb250YWluaW5nIHRoaXMgaW5mb3JtYXRpb24sIHNldCB0aGU8c3RydWN0ZmllbGQ+dGx2LnAKLSAgICAgIDwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHBvaW50IHRvIHRoaXMgdmFyaWFibGUsIGFuZCBpbmNsdWRlIHRoZQotICAgICAgPGNvbnN0YW50PlNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRDwvY29uc3RhbnQ+IGZsYWcgaW4gdGhlCi0gICAgICA8c3RydWN0ZmllbGQ+YWNjZXNzPC9zdHJ1Y3RmaWVsZD4gZmllbGQ7IGxpa2UgdGhpczoKLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgREVDTEFSRV9UTFZfREJfU0NBTEUoZGJfc2NhbGVfbXlfY29udHJvbCwgLTQwNTAsIDE1MCwgMCk7Ci0KLSAgc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG15X2NvbnRyb2wgX19kZXZpbml0ZGF0YSA9IHsKLSAgICAgICAgICAuLi4KLSAgICAgICAgICAuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8Ci0gICAgICAgICAgICAgICAgICAgIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCwKLSAgICAgICAgICAuLi4KLSAgICAgICAgICAudGx2LnAgPSBkYl9zY2FsZV9teV9jb250cm9sLAotICB9OwotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBUaGUgPGZ1bmN0aW9uPkRFQ0xBUkVfVExWX0RCX1NDQUxFPC9mdW5jdGlvbj4gbWFjcm8gZGVmaW5lcwotICAgICAgaW5mb3JtYXRpb24gYWJvdXQgYSBtaXhlciBjb250cm9sIHdoZXJlIGVhY2ggc3RlcCBpbiB0aGUgY29udHJvbCdzCi0gICAgICB2YWx1ZSBjaGFuZ2VzIHRoZSBkQiB2YWx1ZSBieSBhIGNvbnN0YW50IGRCIGFtb3VudC4KLSAgICAgIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlIHRvIGJlIGRlZmluZWQuCi0gICAgICBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0aGUgbWluaW11bSB2YWx1ZSwgaW4gdW5pdHMgb2YgMC4wMSBkQi4KLSAgICAgIFRoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgdGhlIHN0ZXAgc2l6ZSwgaW4gdW5pdHMgb2YgMC4wMSBkQi4KLSAgICAgIFNldCB0aGUgZm91cnRoIHBhcmFtZXRlciB0byAxIGlmIHRoZSBtaW5pbXVtIHZhbHVlIGFjdHVhbGx5IG11dGVzCi0gICAgICB0aGUgY29udHJvbC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBUaGUgPGZ1bmN0aW9uPkRFQ0xBUkVfVExWX0RCX0xJTkVBUjwvZnVuY3Rpb24+IG1hY3JvIGRlZmluZXMKLSAgICAgIGluZm9ybWF0aW9uIGFib3V0IGEgbWl4ZXIgY29udHJvbCB3aGVyZSB0aGUgY29udHJvbCdzIHZhbHVlIGFmZmVjdHMKLSAgICAgIHRoZSBvdXRwdXQgbGluZWFybHkuCi0gICAgICBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBiZSBkZWZpbmVkLgotICAgICAgVGhlIHNlY29uZCBwYXJhbWV0ZXIgaXMgdGhlIG1pbmltdW0gdmFsdWUsIGluIHVuaXRzIG9mIDAuMDEgZEIuCi0gICAgICBUaGUgdGhpcmQgcGFyYW1ldGVyIGlzIHRoZSBtYXhpbXVtIHZhbHVlLCBpbiB1bml0cyBvZiAwLjAxIGRCLgotICAgICAgSWYgdGhlIG1pbmltdW0gdmFsdWUgbXV0ZXMgdGhlIGNvbnRyb2wsIHNldCB0aGUgc2Vjb25kIHBhcmFtZXRlciB0bwotICAgICAgPGNvbnN0YW50PlRMVl9EQl9HQUlOX01VVEU8L2NvbnN0YW50Pi4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBBUEkgZm9yIEFDOTcgQ29kZWMgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJhcGktYWM5NyI+Ci0gICAgPHRpdGxlPkFQSSBmb3IgQUM5NyBDb2RlYzwvdGl0bGU+Ci0KLSAgICA8c2VjdGlvbj4KLSAgICAgIDx0aXRsZT5HZW5lcmFsPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgQUxTQSBBQzk3IGNvZGVjIGxheWVyIGlzIGEgd2VsbC1kZWZpbmVkIG9uZSwgYW5kIHlvdSBkb24ndAotICAgICAgaGF2ZSB0byB3cml0ZSBtdWNoIGNvZGUgdG8gY29udHJvbCBpdC4gT25seSBsb3ctbGV2ZWwgY29udHJvbAotICAgICAgcm91dGluZXMgYXJlIG5lY2Vzc2FyeS4gVGhlIEFDOTcgY29kZWMgQVBJIGlzIGRlZmluZWQgaW4KLSAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvYWM5N19jb2RlYy5oJmd0OzwvZmlsZW5hbWU+LiAKLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctZXhhbXBsZSI+Ci0gICAgICA8dGl0bGU+RnVsbCBDb2RlIEV4YW1wbGU8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgICAgPGV4YW1wbGU+Ci0JICAgIDx0aXRsZT5FeGFtcGxlIG9mIEFDOTcgSW50ZXJmYWNlPC90aXRsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3QgbXljaGlwIHsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgc3RydWN0IHNuZF9hYzk3ICphYzk3OwotICAgICAgICAgIC4uLi4KLSAgfTsKLQotICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc25kX215Y2hpcF9hYzk3X3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgLyogcmVhZCBhIHJlZ2lzdGVyIHZhbHVlIGhlcmUgZnJvbSB0aGUgY29kZWMgKi8KLSAgICAgICAgICByZXR1cm4gdGhlX3JlZ2lzdGVyX3ZhbHVlOwotICB9Ci0KLSAgc3RhdGljIHZvaWQgc25kX215Y2hpcF9hYzk3X3dyaXRlKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnLCB1bnNpZ25lZCBzaG9ydCB2YWwpCi0gIHsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gYWM5Ny0+cHJpdmF0ZV9kYXRhOwotICAgICAgICAgIC4uLi4KLSAgICAgICAgICAvKiB3cml0ZSB0aGUgZ2l2ZW4gcmVnaXN0ZXIgdmFsdWUgdG8gdGhlIGNvZGVjICovCi0gIH0KLQotICBzdGF0aWMgaW50IHNuZF9teWNoaXBfYWM5NyhzdHJ1Y3QgbXljaGlwICpjaGlwKQotICB7Ci0gICAgICAgICAgc3RydWN0IHNuZF9hYzk3X2J1cyAqYnVzOwotICAgICAgICAgIHN0cnVjdCBzbmRfYWM5N190ZW1wbGF0ZSBhYzk3OwotICAgICAgICAgIGludCBlcnI7Ci0gICAgICAgICAgc3RhdGljIHN0cnVjdCBzbmRfYWM5N19idXNfb3BzIG9wcyA9IHsKLSAgICAgICAgICAgICAgICAgIC53cml0ZSA9IHNuZF9teWNoaXBfYWM5N193cml0ZSwKLSAgICAgICAgICAgICAgICAgIC5yZWFkID0gc25kX215Y2hpcF9hYzk3X3JlYWQsCi0gICAgICAgICAgfTsKLQotICAgICAgICAgIGVyciA9IHNuZF9hYzk3X2J1cyhjaGlwLT5jYXJkLCAwLCAmb3BzLCBOVUxMLCAmYnVzKTsKLSAgICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgbWVtc2V0KCZhYzk3LCAwLCBzaXplb2YoYWM5NykpOwotICAgICAgICAgIGFjOTcucHJpdmF0ZV9kYXRhID0gY2hpcDsKLSAgICAgICAgICByZXR1cm4gc25kX2FjOTdfbWl4ZXIoYnVzLCAmYWM5NywgJmNoaXAtPmFjOTcpOwotICB9Ci0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctY29uc3RydWN0b3IiPgotICAgICAgPHRpdGxlPkNvbnN0cnVjdG9yPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUbyBjcmVhdGUgYW4gYWM5NyBpbnN0YW5jZSwgZmlyc3QgY2FsbCA8ZnVuY3Rpb24+c25kX2FjOTdfYnVzPC9mdW5jdGlvbj4KLSAgICAgIHdpdGggYW4gPHR5cGU+YWM5N19idXNfb3BzX3Q8L3R5cGU+IHJlY29yZCB3aXRoIGNhbGxiYWNrIGZ1bmN0aW9ucy4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX2FjOTdfYnVzICpidXM7Ci0gIHN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcyBvcHMgPSB7Ci0gICAgICAgIC53cml0ZSA9IHNuZF9teWNoaXBfYWM5N193cml0ZSwKLSAgICAgICAgLnJlYWQgPSBzbmRfbXljaGlwX2FjOTdfcmVhZCwKLSAgfTsKLQotICBzbmRfYWM5N19idXMoY2FyZCwgMCwgJm9wcywgTlVMTCwgJnBidXMpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgIFRoZSBidXMgcmVjb3JkIGlzIHNoYXJlZCBhbW9uZyBhbGwgYmVsb25naW5nIGFjOTcgaW5zdGFuY2VzLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIEFuZCB0aGVuIGNhbGwgPGZ1bmN0aW9uPnNuZF9hYzk3X21peGVyKCk8L2Z1bmN0aW9uPiB3aXRoIGFuCi0gICAgICBzdHJ1Y3QgPHN0cnVjdG5hbWU+c25kX2FjOTdfdGVtcGxhdGU8L3N0cnVjdG5hbWU+Ci0gICAgICByZWNvcmQgdG9nZXRoZXIgd2l0aCB0aGUgYnVzIHBvaW50ZXIgY3JlYXRlZCBhYm92ZS4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgYWM5NzsKLSAgaW50IGVycjsKLQotICBtZW1zZXQoJmFjOTcsIDAsIHNpemVvZihhYzk3KSk7Ci0gIGFjOTcucHJpdmF0ZV9kYXRhID0gY2hpcDsKLSAgc25kX2FjOTdfbWl4ZXIoYnVzLCAmYWM5NywgJmNoaXAtPmFjOTcpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgd2hlcmUgY2hpcC0mZ3Q7YWM5NyBpcyBhIHBvaW50ZXIgdG8gYSBuZXdseSBjcmVhdGVkCi0gICAgICAgIDx0eXBlPmFjOTdfdDwvdHlwZT4gaW5zdGFuY2UuCi0gICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIGNoaXAgcG9pbnRlciBpcyBzZXQgYXMgdGhlIHByaXZhdGUgZGF0YSwgc28gdGhhdAotICAgICAgICB0aGUgcmVhZC93cml0ZSBjYWxsYmFjayBmdW5jdGlvbnMgY2FuIHJlZmVyIHRvIHRoaXMgY2hpcCBpbnN0YW5jZS4KLSAgICAgICAgVGhpcyBpbnN0YW5jZSBpcyBub3QgbmVjZXNzYXJpbHkgc3RvcmVkIGluIHRoZSBjaGlwCi0JcmVjb3JkLiAgSWYgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSByZWdpc3RlciB2YWx1ZXMgZnJvbSB0aGUKLSAgICAgICAgZHJpdmVyLCBvciBuZWVkIHRoZSBzdXNwZW5kL3Jlc3VtZSBvZiBhYzk3IGNvZGVjcywga2VlcCB0aGlzCi0gICAgICAgIHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWNhbGxiYWNrcyI+Ci0gICAgICA8dGl0bGU+Q2FsbGJhY2tzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgc3RhbmRhcmQgY2FsbGJhY2tzIGFyZSA8c3RydWN0ZmllbGQ+cmVhZDwvc3RydWN0ZmllbGQ+IGFuZAotICAgICAgPHN0cnVjdGZpZWxkPndyaXRlPC9zdHJ1Y3RmaWVsZD4uIE9idmlvdXNseSB0aGV5IAotICAgICAgY29ycmVzcG9uZCB0byB0aGUgZnVuY3Rpb25zIGZvciByZWFkIGFuZCB3cml0ZSBhY2Nlc3NlcyB0byB0aGUKLSAgICAgIGhhcmR3YXJlIGxvdy1sZXZlbCBjb2Rlcy4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPHN0cnVjdGZpZWxkPnJlYWQ8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayByZXR1cm5zIHRoZQotICAgICAgICByZWdpc3RlciB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIGFyZ3VtZW50LiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc25kX215Y2hpcF9hYzk3X3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcCA9IGFjOTctPnByaXZhdGVfZGF0YTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgcmV0dXJuIHRoZV9yZWdpc3Rlcl92YWx1ZTsKLSAgfQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgSGVyZSwgdGhlIGNoaXAgY2FuIGJlIGNhc3QgZnJvbSBhYzk3LSZndDtwcml2YXRlX2RhdGEuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBNZWFud2hpbGUsIHRoZSA8c3RydWN0ZmllbGQ+d3JpdGU8L3N0cnVjdGZpZWxkPiBjYWxsYmFjayBpcwotICAgICAgICB1c2VkIHRvIHNldCB0aGUgcmVnaXN0ZXIgdmFsdWUuIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyB2b2lkIHNuZF9teWNoaXBfYWM5N193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKQotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlc2UgY2FsbGJhY2tzIGFyZSBub24tYXRvbWljIGxpa2UgdGhlIGNvbnRyb2wgQVBJIGNhbGxiYWNrcy4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZXJlIGFyZSBhbHNvIG90aGVyIGNhbGxiYWNrczoKLSAgICAgIDxzdHJ1Y3RmaWVsZD5yZXNldDwvc3RydWN0ZmllbGQ+LAotICAgICAgPHN0cnVjdGZpZWxkPndhaXQ8L3N0cnVjdGZpZWxkPiBhbmQKLSAgICAgIDxzdHJ1Y3RmaWVsZD5pbml0PC9zdHJ1Y3RmaWVsZD4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5yZXNldDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgdG8gcmVzZXQKLSAgICAgIHRoZSBjb2RlYy4gSWYgdGhlIGNoaXAgcmVxdWlyZXMgYSBzcGVjaWFsIGtpbmQgb2YgcmVzZXQsIHlvdSBjYW4KLSAgICAgIGRlZmluZSB0aGlzIGNhbGxiYWNrLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSA8c3RydWN0ZmllbGQ+d2FpdDwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzIHVzZWQgdG8KLSAgICAgIGFkZCBzb21lIHdhaXRpbmcgdGltZSBpbiB0aGUgc3RhbmRhcmQgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvZGVjLiBJZiB0aGUKLSAgICAgIGNoaXAgcmVxdWlyZXMgdGhlIGV4dHJhIHdhaXRpbmcgdGltZSwgZGVmaW5lIHRoaXMgY2FsbGJhY2suIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5pbml0PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMgdXNlZCBmb3IKLSAgICAgIGFkZGl0aW9uYWwgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNvZGVjLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny11cGRhdGluZy1yZWdpc3RlcnMiPgotICAgICAgPHRpdGxlPlVwZGF0aW5nIFJlZ2lzdGVycyBpbiBUaGUgRHJpdmVyPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdG8gdGhlIGNvZGVjIGZyb20gdGhlIGRyaXZlciwgeW91IGNhbgotICAgICAgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKLSAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N193cml0ZSgpPC9mdW5jdGlvbj4sCi0gICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfcmVhZCgpPC9mdW5jdGlvbj4sCi0gICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlKCk8L2Z1bmN0aW9uPiBhbmQKLSAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGVfYml0cygpPC9mdW5jdGlvbj4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgQm90aCA8ZnVuY3Rpb24+c25kX2FjOTdfd3JpdGUoKTwvZnVuY3Rpb24+IGFuZAotICAgICAgICA8ZnVuY3Rpb24+c25kX2FjOTdfdXBkYXRlKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbnMgYXJlIHVzZWQgdG8KLSAgICAgICAgc2V0IGEgdmFsdWUgdG8gdGhlIGdpdmVuIHJlZ2lzdGVyCi0gICAgICAgICg8Y29uc3RhbnQ+QUM5N19YWFg8L2NvbnN0YW50PikuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlbSBpcwotICAgICAgICB0aGF0IDxmdW5jdGlvbj5zbmRfYWM5N191cGRhdGUoKTwvZnVuY3Rpb24+IGRvZXNuJ3Qgd3JpdGUgYQotICAgICAgICB2YWx1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaGFzIGJlZW4gYWxyZWFkeSBzZXQsIHdoaWxlCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfYWM5N193cml0ZSgpPC9mdW5jdGlvbj4gYWx3YXlzIHJld3JpdGVzIHRoZQotICAgICAgICB2YWx1ZS4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX2FjOTdfd3JpdGUoYWM5NywgQUM5N19NQVNURVIsIDB4ODA4MCk7Ci0gIHNuZF9hYzk3X3VwZGF0ZShhYzk3LCBBQzk3X01BU1RFUiwgMHg4MDgwKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3JlYWQoKTwvZnVuY3Rpb24+IGlzIHVzZWQgdG8gcmVhZCB0aGUgdmFsdWUKLSAgICAgICAgb2YgdGhlIGdpdmVuIHJlZ2lzdGVyLiBGb3IgZXhhbXBsZSwgCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgdmFsdWUgPSBzbmRfYWM5N19yZWFkKGFjOTcsIEFDOTdfTUFTVEVSKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3VwZGF0ZV9iaXRzKCk8L2Z1bmN0aW9uPiBpcyB1c2VkIHRvIHVwZGF0ZQotICAgICAgICBzb21lIGJpdHMgaW4gdGhlIGdpdmVuIHJlZ2lzdGVyLiAgCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX2FjOTdfdXBkYXRlX2JpdHMoYWM5NywgcmVnLCBtYXNrLCB2YWx1ZSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEFsc28sIHRoZXJlIGlzIGEgZnVuY3Rpb24gdG8gY2hhbmdlIHRoZSBzYW1wbGUgcmF0ZSAob2YgYQotICAgICAgICBnaXZlbiByZWdpc3RlciBzdWNoIGFzCi0gICAgICAgIDxjb25zdGFudD5BQzk3X1BDTV9GUk9OVF9EQUNfUkFURTwvY29uc3RhbnQ+KSB3aGVuIFZSQSBvcgotICAgICAgICBEUkEgaXMgc3VwcG9ydGVkIGJ5IHRoZSBjb2RlYzoKLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9hYzk3X3NldF9yYXRlKCk8L2Z1bmN0aW9uPi4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX2FjOTdfc2V0X3JhdGUoYWM5NywgQUM5N19QQ01fRlJPTlRfREFDX1JBVEUsIDQ0MTAwKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZvbGxvd2luZyByZWdpc3RlcnMgYXJlIGF2YWlsYWJsZSB0byBzZXQgdGhlIHJhdGU6Ci0gICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fTUlDX0FEQ19SQVRFPC9jb25zdGFudD4sCi0gICAgICA8Y29uc3RhbnQ+QUM5N19QQ01fRlJPTlRfREFDX1JBVEU8L2NvbnN0YW50PiwKLSAgICAgIDxjb25zdGFudD5BQzk3X1BDTV9MUl9BRENfUkFURTwvY29uc3RhbnQ+LAotICAgICAgPGNvbnN0YW50PkFDOTdfU1BESUY8L2NvbnN0YW50Pi4gV2hlbgotICAgICAgPGNvbnN0YW50PkFDOTdfU1BESUY8L2NvbnN0YW50PiBpcyBzcGVjaWZpZWQsIHRoZSByZWdpc3RlciBpcwotICAgICAgbm90IHJlYWxseSBjaGFuZ2VkIGJ1dCB0aGUgY29ycmVzcG9uZGluZyBJRUM5NTggc3RhdHVzIGJpdHMgd2lsbAotICAgICAgYmUgdXBkYXRlZC4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImFwaS1hYzk3LWNsb2NrLWFkanVzdG1lbnQiPgotICAgICAgPHRpdGxlPkNsb2NrIEFkanVzdG1lbnQ8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHNvbWUgY2hpcHMsIHRoZSBjbG9jayBvZiB0aGUgY29kZWMgaXNuJ3QgNDgwMDAgYnV0IHVzaW5nIGEKLSAgICAgIFBDSSBjbG9jayAodG8gc2F2ZSBhIHF1YXJ0eiEpLiBJbiB0aGlzIGNhc2UsIGNoYW5nZSB0aGUgZmllbGQKLSAgICAgIGJ1cy0mZ3Q7Y2xvY2sgdG8gdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgIHZhbHVlLiBGb3IgZXhhbXBsZSwgaW50ZWw4eDAgCi0gICAgICBhbmQgZXMxOTY4IGRyaXZlcnMgaGF2ZSB0aGVpciBvd24gZnVuY3Rpb24gdG8gcmVhZCBmcm9tIHRoZSBjbG9jay4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iYXBpLWFjOTctcHJvYy1maWxlcyI+Ci0gICAgICA8dGl0bGU+UHJvYyBGaWxlczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIEFMU0EgQUM5NyBpbnRlcmZhY2Ugd2lsbCBjcmVhdGUgYSBwcm9jIGZpbGUgc3VjaCBhcwotICAgICAgPGZpbGVuYW1lPi9wcm9jL2Fzb3VuZC9jYXJkMC9jb2RlYzk3IzAvYWM5NyMwLTA8L2ZpbGVuYW1lPiBhbmQKLSAgICAgIDxmaWxlbmFtZT5hYzk3IzAtMCtyZWdzPC9maWxlbmFtZT4uIFlvdSBjYW4gcmVmZXIgdG8gdGhlc2UgZmlsZXMgdG8KLSAgICAgIHNlZSB0aGUgY3VycmVudCBzdGF0dXMgYW5kIHJlZ2lzdGVycyBvZiB0aGUgY29kZWMuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJhcGktYWM5Ny1tdWx0aXBsZS1jb2RlY3MiPgotICAgICAgPHRpdGxlPk11bHRpcGxlIENvZGVjczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgV2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCBjb2RlY3Mgb24gdGhlIHNhbWUgY2FyZCwgeW91IG5lZWQgdG8KLSAgICAgIGNhbGwgPGZ1bmN0aW9uPnNuZF9hYzk3X21peGVyKCk8L2Z1bmN0aW9uPiBtdWx0aXBsZSB0aW1lcyB3aXRoCi0gICAgICBhYzk3Lm51bT0xIG9yIGdyZWF0ZXIuIFRoZSA8c3RydWN0ZmllbGQ+bnVtPC9zdHJ1Y3RmaWVsZD4gZmllbGQKLSAgICAgIHNwZWNpZmllcyB0aGUgY29kZWMgbnVtYmVyLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHlvdSBzZXQgdXAgbXVsdGlwbGUgY29kZWNzLCB5b3UgZWl0aGVyIG5lZWQgdG8gd3JpdGUKLSAgICAgIGRpZmZlcmVudCBjYWxsYmFja3MgZm9yIGVhY2ggY29kZWMgb3IgY2hlY2sKLSAgICAgIGFjOTctJmd0O251bSBpbiB0aGUgY2FsbGJhY2sgcm91dGluZXMuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIE1JREkgKE1QVTQwMS1VQVJUKSBJbnRlcmZhY2UgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJtaWRpLWludGVyZmFjZSI+Ci0gICAgPHRpdGxlPk1JREkgKE1QVTQwMS1VQVJUKSBJbnRlcmZhY2U8L3RpdGxlPgotCi0gICAgPHNlY3Rpb24gaWQ9Im1pZGktaW50ZXJmYWNlLWdlbmVyYWwiPgotICAgICAgPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIE1hbnkgc291bmRjYXJkcyBoYXZlIGJ1aWx0LWluIE1JREkgKE1QVTQwMS1VQVJUKQotICAgICAgaW50ZXJmYWNlcy4gV2hlbiB0aGUgc291bmRjYXJkIHN1cHBvcnRzIHRoZSBzdGFuZGFyZCBNUFU0MDEtVUFSVAotICAgICAgaW50ZXJmYWNlLCBtb3N0IGxpa2VseSB5b3UgY2FuIHVzZSB0aGUgQUxTQSBNUFU0MDEtVUFSVCBBUEkuIFRoZQotICAgICAgTVBVNDAxLVVBUlQgQVBJIGlzIGRlZmluZWQgaW4KLSAgICAgIDxmaWxlbmFtZT4mbHQ7c291bmQvbXB1NDAxLmgmZ3Q7PC9maWxlbmFtZT4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgU29tZSBzb3VuZGNoaXBzIGhhdmUgYSBzaW1pbGFyIGJ1dCBzbGlnaHRseSBkaWZmZXJlbnQKLSAgICAgIGltcGxlbWVudGF0aW9uIG9mIG1wdTQwMSBzdHVmZi4gRm9yIGV4YW1wbGUsIGVtdTEwazEgaGFzIGl0cyBvd24KLSAgICAgIG1wdTQwMSByb3V0aW5lcy4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9Im1pZGktaW50ZXJmYWNlLWNvbnN0cnVjdG9yIj4KLSAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVG8gY3JlYXRlIGEgcmF3bWlkaSBvYmplY3QsIGNhbGwKLSAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPi4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKLSAgc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfTVBVNDAxLCBwb3J0LCBpbmZvX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgIGlycSwgaXJxX2ZsYWdzLCAmcm1pZGkpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNhcmQgcG9pbnRlciwgYW5kIHRoZSBzZWNvbmQgaXMgdGhlCi0gICAgICBpbmRleCBvZiB0aGlzIGNvbXBvbmVudC4gWW91IGNhbiBjcmVhdGUgdXAgdG8gOCByYXdtaWRpCi0gICAgICBkZXZpY2VzLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgdHlwZSBvZiB0aGUgaGFyZHdhcmUsCi0gICAgICA8Y29uc3RhbnQ+TVBVNDAxX0hXX1hYWDwvY29uc3RhbnQ+LiBJZiBpdCdzIG5vdCBhIHNwZWNpYWwgb25lLAotICAgICAgeW91IGNhbiB1c2UgPGNvbnN0YW50Pk1QVTQwMV9IV19NUFU0MDE8L2NvbnN0YW50Pi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgNHRoIGFyZ3VtZW50IGlzIHRoZSBJL08gcG9ydCBhZGRyZXNzLiBNYW55Ci0gICAgICBiYWNrd2FyZC1jb21wYXRpYmxlIE1QVTQwMSBoYXZlIGFuIEkvTyBwb3J0IHN1Y2ggYXMgMHgzMzAuIE9yLCBpdAotICAgICAgbWlnaHQgYmUgYSBwYXJ0IG9mIGl0cyBvd24gUENJIEkvTyByZWdpb24uIEl0IGRlcGVuZHMgb24gdGhlCi0gICAgICBjaGlwIGRlc2lnbi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotCVRoZSA1dGggYXJndW1lbnQgaXMgYSBiaXRmbGFnIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgotICAgICAgICBXaGVuIHRoZSBJL08gcG9ydCBhZGRyZXNzIGFib3ZlIGlzIHBhcnQgb2YgdGhlIFBDSSBJL08KLSAgICAgIHJlZ2lvbiwgdGhlIE1QVTQwMSBJL08gcG9ydCBtaWdodCBoYXZlIGJlZW4gYWxyZWFkeSBhbGxvY2F0ZWQKLSAgICAgIChyZXNlcnZlZCkgYnkgdGhlIGRyaXZlciBpdHNlbGYuIEluIHN1Y2ggYSBjYXNlLCBwYXNzIGEgYml0IGZsYWcKLSAgICAgIDxjb25zdGFudD5NUFU0MDFfSU5GT19JTlRFR1JBVEVEPC9jb25zdGFudD4sCi0gICAgICBhbmQgdGhlIG1wdTQwMS11YXJ0IGxheWVyIHdpbGwgYWxsb2NhdGUgdGhlIEkvTyBwb3J0cyBieSBpdHNlbGYuIAotICAgICAgPC9wYXJhPgotCi0JPHBhcmE+Ci0JV2hlbiB0aGUgY29udHJvbGxlciBzdXBwb3J0cyBvbmx5IHRoZSBpbnB1dCBvciBvdXRwdXQgTUlESSBzdHJlYW0sCi0JcGFzcyB0aGUgPGNvbnN0YW50Pk1QVTQwMV9JTkZPX0lOUFVUPC9jb25zdGFudD4gb3IKLQk8Y29uc3RhbnQ+TVBVNDAxX0lORk9fT1VUUFVUPC9jb25zdGFudD4gYml0ZmxhZywgcmVzcGVjdGl2ZWx5LgotCVRoZW4gdGhlIHJhd21pZGkgaW5zdGFuY2UgaXMgY3JlYXRlZCBhcyBhIHNpbmdsZSBzdHJlYW0uCi0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JPGNvbnN0YW50Pk1QVTQwMV9JTkZPX01NSU88L2NvbnN0YW50PiBiaXRmbGFnIGlzIHVzZWQgdG8gY2hhbmdlCi0JdGhlIGFjY2VzcyBtZXRob2QgdG8gTU1JTyAodmlhIHJlYWRiIGFuZCB3cml0ZWIpIGluc3RlYWQgb2YKLQlpb2IgYW5kIG91dGIuIEluIHRoaXMgY2FzZSwgeW91IGhhdmUgdG8gcGFzcyB0aGUgaW9tYXBwZWQgYWRkcmVzcwotCXRvIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPi4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlXaGVuIDxjb25zdGFudD5NUFU0MDFfSU5GT19UWF9JUlE8L2NvbnN0YW50PiBpcyBzZXQsIHRoZSBvdXRwdXQKLQlzdHJlYW0gaXNuJ3QgY2hlY2tlZCBpbiB0aGUgZGVmYXVsdCBpbnRlcnJ1cHQgaGFuZGxlci4gIFRoZSBkcml2ZXIKLQluZWVkcyB0byBjYWxsIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfaW50ZXJydXB0X3R4KCk8L2Z1bmN0aW9uPgotCWJ5IGl0c2VsZiB0byBzdGFydCBwcm9jZXNzaW5nIHRoZSBvdXRwdXQgc3RyZWFtIGluIHRoZSBpcnEgaGFuZGxlci4KLQk8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBVc3VhbGx5LCB0aGUgcG9ydCBhZGRyZXNzIGNvcnJlc3BvbmRzIHRvIHRoZSBjb21tYW5kIHBvcnQgYW5kCi0gICAgICAgIHBvcnQgKyAxIGNvcnJlc3BvbmRzIHRvIHRoZSBkYXRhIHBvcnQuIElmIG5vdCwgeW91IG1heSBjaGFuZ2UKLSAgICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5jcG9ydDwvc3RydWN0ZmllbGQ+IGZpZWxkIG9mCi0gICAgICAgIHN0cnVjdCA8c3RydWN0bmFtZT5zbmRfbXB1NDAxPC9zdHJ1Y3RuYW1lPiBtYW51YWxseSAKLSAgICAgICAgYWZ0ZXJ3YXJkLiBIb3dldmVyLCA8c3RydWN0bmFtZT5zbmRfbXB1NDAxPC9zdHJ1Y3RuYW1lPiBwb2ludGVyIGlzIG5vdAotICAgICAgICByZXR1cm5lZCBleHBsaWNpdGx5IGJ5Ci0gICAgICAgIDxmdW5jdGlvbj5zbmRfbXB1NDAxX3VhcnRfbmV3KCk8L2Z1bmN0aW9uPi4gWW91IG5lZWQgdG8gY2FzdAotICAgICAgICBybWlkaS0mZ3Q7cHJpdmF0ZV9kYXRhIHRvCi0gICAgICAgIDxzdHJ1Y3RuYW1lPnNuZF9tcHU0MDE8L3N0cnVjdG5hbWU+IGV4cGxpY2l0bHksIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0cnVjdCBzbmRfbXB1NDAxICptcHU7Ci0gIG1wdSA9IHJtaWRpLT5wcml2YXRlX2RhdGE7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICBhbmQgcmVzZXQgdGhlIGNwb3J0IGFzIHlvdSBsaWtlOgotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIG1wdS0+Y3BvcnQgPSBteV9vd25fY29udHJvbF9wb3J0OwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgNnRoIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgaXJxIG51bWJlciBmb3IgVUFSVC4gSWYgdGhlIGlycQotICAgICAgaXMgYWxyZWFkeSBhbGxvY2F0ZWQsIHBhc3MgMCB0byB0aGUgN3RoIGFyZ3VtZW50Ci0gICAgICAoPHBhcmFtZXRlcj5pcnFfZmxhZ3M8L3BhcmFtZXRlcj4pLiBPdGhlcndpc2UsIHBhc3MgdGhlIGZsYWdzCi0gICAgICBmb3IgaXJxIGFsbG9jYXRpb24gCi0gICAgICAoPGNvbnN0YW50PlNBX1hYWDwvY29uc3RhbnQ+IGJpdHMpIHRvIGl0LCBhbmQgdGhlIGlycSB3aWxsIGJlCi0gICAgICByZXNlcnZlZCBieSB0aGUgbXB1NDAxLXVhcnQgbGF5ZXIuIElmIHRoZSBjYXJkIGRvZXNuJ3QgZ2VuZXJhdGUKLSAgICAgIFVBUlQgaW50ZXJydXB0cywgcGFzcyAtMSBhcyB0aGUgaXJxIG51bWJlci4gVGhlbiBhIHRpbWVyCi0gICAgICBpbnRlcnJ1cHQgd2lsbCBiZSBpbnZva2VkIGZvciBwb2xsaW5nLiAKLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0ibWlkaS1pbnRlcmZhY2UtaW50ZXJydXB0LWhhbmRsZXIiPgotICAgICAgPHRpdGxlPkludGVycnVwdCBIYW5kbGVyPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBXaGVuIHRoZSBpbnRlcnJ1cHQgaXMgYWxsb2NhdGVkIGluCi0gICAgICA8ZnVuY3Rpb24+c25kX21wdTQwMV91YXJ0X25ldygpPC9mdW5jdGlvbj4sIHRoZSBwcml2YXRlCi0gICAgICBpbnRlcnJ1cHQgaGFuZGxlciBpcyB1c2VkLCBoZW5jZSB5b3UgZG9uJ3QgaGF2ZSBhbnl0aGluZyBlbHNlIHRvIGRvCi0gICAgICB0aGFuIGNyZWF0aW5nIHRoZSBtcHU0MDEgc3R1ZmYuIE90aGVyd2lzZSwgeW91IGhhdmUgdG8gY2FsbAotICAgICAgPGZ1bmN0aW9uPnNuZF9tcHU0MDFfdWFydF9pbnRlcnJ1cHQoKTwvZnVuY3Rpb24+IGV4cGxpY2l0bHkgd2hlbgotICAgICAgYSBVQVJUIGludGVycnVwdCBpcyBpbnZva2VkIGFuZCBjaGVja2VkIGluIHlvdXIgb3duIGludGVycnVwdAotICAgICAgaGFuZGxlci4gIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gdGhpcyBjYXNlLCB5b3UgbmVlZCB0byBwYXNzIHRoZSBwcml2YXRlX2RhdGEgb2YgdGhlCi0gICAgICAgIHJldHVybmVkIHJhd21pZGkgb2JqZWN0IGZyb20KLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9tcHU0MDFfdWFydF9uZXcoKTwvZnVuY3Rpb24+IGFzIHRoZSBzZWNvbmQKLSAgICAgICAgYXJndW1lbnQgb2YgPGZ1bmN0aW9uPnNuZF9tcHU0MDFfdWFydF9pbnRlcnJ1cHQoKTwvZnVuY3Rpb24+LiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfbXB1NDAxX3VhcnRfaW50ZXJydXB0KGlycSwgcm1pZGktPnByaXZhdGVfZGF0YSwgcmVncyk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBSYXdNSURJIEludGVyZmFjZSAgLS0+Ci08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLSAgPGNoYXB0ZXIgaWQ9InJhd21pZGktaW50ZXJmYWNlIj4KLSAgICA8dGl0bGU+UmF3TUlESSBJbnRlcmZhY2U8L3RpdGxlPgotCi0gICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW92ZXJ2aWV3Ij4KLSAgICAgIDx0aXRsZT5PdmVydmlldzwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIHJhdyBNSURJIGludGVyZmFjZSBpcyB1c2VkIGZvciBoYXJkd2FyZSBNSURJIHBvcnRzIHRoYXQgY2FuCi0gICAgICBiZSBhY2Nlc3NlZCBhcyBhIGJ5dGUgc3RyZWFtLiAgSXQgaXMgbm90IHVzZWQgZm9yIHN5bnRoZXNpemVyCi0gICAgICBjaGlwcyB0aGF0IGRvIG5vdCBkaXJlY3RseSB1bmRlcnN0YW5kIE1JREkuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgQUxTQSBoYW5kbGVzIGZpbGUgYW5kIGJ1ZmZlciBtYW5hZ2VtZW50LiAgQWxsIHlvdSBoYXZlIHRvIGRvIGlzCi0gICAgICB0byB3cml0ZSBzb21lIGNvZGUgdG8gbW92ZSBkYXRhIGJldHdlZW4gdGhlIGJ1ZmZlciBhbmQgdGhlCi0gICAgICBoYXJkd2FyZS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBUaGUgcmF3bWlkaSBBUEkgaXMgZGVmaW5lZCBpbgotICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9yYXdtaWRpLmgmZ3Q7PC9maWxlbmFtZT4uCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLWNvbnN0cnVjdG9yIj4KLSAgICAgIDx0aXRsZT5Db25zdHJ1Y3RvcjwvdGl0bGU+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVG8gY3JlYXRlIGEgcmF3bWlkaSBkZXZpY2UsIGNhbGwgdGhlCi0gICAgICA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfbmV3PC9mdW5jdGlvbj4gZnVuY3Rpb246Ci0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7Ci0gIGVyciA9IHNuZF9yYXdtaWRpX25ldyhjaGlwLT5jYXJkLCAiTXlNSURJIiwgMCwgb3V0cywgaW5zLCAmcm1pZGkpOwotICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICByZXR1cm4gZXJyOwotICBybWlkaS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKLSAgc3RyY3B5KHJtaWRpLT5uYW1lLCAiTXkgTUlESSIpOwotICBybWlkaS0+aW5mb19mbGFncyA9IFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQgfAotICAgICAgICAgICAgICAgICAgICAgIFNORFJWX1JBV01JRElfSU5GT19JTlBVVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY2FyZCBwb2ludGVyLCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCi0gICAgICB0aGUgSUQgc3RyaW5nLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgaW5kZXggb2YgdGhpcyBjb21wb25lbnQuICBZb3UgY2FuCi0gICAgICBjcmVhdGUgdXAgdG8gOCByYXdtaWRpIGRldmljZXMuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIGZvdXJ0aCBhbmQgZmlmdGggYXJndW1lbnRzIGFyZSB0aGUgbnVtYmVyIG9mIG91dHB1dCBhbmQKLSAgICAgIGlucHV0IHN1YnN0cmVhbXMsIHJlc3BlY3RpdmVseSwgb2YgdGhpcyBkZXZpY2UgKGEgc3Vic3RyZWFtIGlzCi0gICAgICB0aGUgZXF1aXZhbGVudCBvZiBhIE1JREkgcG9ydCkuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgU2V0IHRoZSA8c3RydWN0ZmllbGQ+aW5mb19mbGFnczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRvIHNwZWNpZnkKLSAgICAgIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhlIGRldmljZS4KLSAgICAgIFNldCA8Y29uc3RhbnQ+U05EUlZfUkFXTUlESV9JTkZPX09VVFBVVDwvY29uc3RhbnQ+IGlmIHRoZXJlIGlzCi0gICAgICBhdCBsZWFzdCBvbmUgb3V0cHV0IHBvcnQsCi0gICAgICA8Y29uc3RhbnQ+U05EUlZfUkFXTUlESV9JTkZPX0lOUFVUPC9jb25zdGFudD4gaWYgdGhlcmUgaXMgYXQKLSAgICAgIGxlYXN0IG9uZSBpbnB1dCBwb3J0LAotICAgICAgYW5kIDxjb25zdGFudD5TTkRSVl9SQVdNSURJX0lORk9fRFVQTEVYPC9jb25zdGFudD4gaWYgdGhlIGRldmljZQotICAgICAgY2FuIGhhbmRsZSBvdXRwdXQgYW5kIGlucHV0IGF0IHRoZSBzYW1lIHRpbWUuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgQWZ0ZXIgdGhlIHJhd21pZGkgZGV2aWNlIGlzIGNyZWF0ZWQsIHlvdSBuZWVkIHRvIHNldCB0aGUKLSAgICAgIG9wZXJhdG9ycyAoY2FsbGJhY2tzKSBmb3IgZWFjaCBzdWJzdHJlYW0uICBUaGVyZSBhcmUgaGVscGVyCi0gICAgICBmdW5jdGlvbnMgdG8gc2V0IHRoZSBvcGVyYXRvcnMgZm9yIGFsbCB0aGUgc3Vic3RyZWFtcyBvZiBhIGRldmljZToKLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULCAmc25kX215bWlkaV9vdXRwdXRfb3BzKTsKLSAgc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsICZzbmRfbXltaWRpX2lucHV0X29wcyk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBUaGUgb3BlcmF0b3JzIGFyZSB1c3VhbGx5IGRlZmluZWQgbGlrZSB0aGlzOgotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgc3RydWN0IHNuZF9yYXdtaWRpX29wcyBzbmRfbXltaWRpX291dHB1dF9vcHMgPSB7Ci0gICAgICAgICAgLm9wZW4gPSAgICBzbmRfbXltaWRpX291dHB1dF9vcGVuLAotICAgICAgICAgIC5jbG9zZSA9ICAgc25kX215bWlkaV9vdXRwdXRfY2xvc2UsCi0gICAgICAgICAgLnRyaWdnZXIgPSBzbmRfbXltaWRpX291dHB1dF90cmlnZ2VyLAotICB9OwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICBUaGVzZSBjYWxsYmFja3MgYXJlIGV4cGxhaW5lZCBpbiB0aGUgPGxpbmsKLSAgICAgIGxpbmtlbmQ9InJhd21pZGktaW50ZXJmYWNlLWNhbGxiYWNrcyI+PGNpdGV0aXRsZT5DYWxsYmFja3M8L2NpdGV0aXRsZT48L2xpbms+Ci0gICAgICBzZWN0aW9uLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHN1YnN0cmVhbSwgeW91IHNob3VsZCBnaXZlIGEKLSAgICAgIHVuaXF1ZSBuYW1lIHRvIGVhY2ggb2YgdGhlbToKLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YnN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAmcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1zLAotICAgICAgICAgICAgICAgICAgICAgIGxpc3QgewotICAgICAgICAgIHNwcmludGYoc3Vic3RyZWFtLT5uYW1lLCAiTXkgTUlESSBQb3J0ICVkIiwgc3Vic3RyZWFtLT5udW1iZXIgKyAxKTsKLSAgfQotICAvKiBzYW1lIGZvciBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCAqLwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLWNhbGxiYWNrcyI+Ci0gICAgICA8dGl0bGU+Q2FsbGJhY2tzPC90aXRsZT4KLQotICAgICAgPHBhcmE+Ci0gICAgICBJbiBhbGwgdGhlIGNhbGxiYWNrcywgdGhlIHByaXZhdGUgZGF0YSB0aGF0IHlvdSd2ZSBzZXQgZm9yIHRoZQotICAgICAgcmF3bWlkaSBkZXZpY2UgY2FuIGJlIGFjY2Vzc2VkIGFzCi0gICAgICBzdWJzdHJlYW0tJmd0O3JtaWRpLSZndDtwcml2YXRlX2RhdGEuCi0gICAgICA8IS0tIDxjb2RlPiBpc24ndCBhdmFpbGFibGUgYmVmb3JlIERvY0Jvb2sgNC4zIC0tPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcG9ydCwgeW91ciBjYWxsYmFja3MgY2FuIGRldGVybWluZSB0aGUKLSAgICAgIHBvcnQgaW5kZXggZnJvbSB0aGUgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSBkYXRhIHBhc3NlZCB0byBlYWNoCi0gICAgICBjYWxsYmFjazoKLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotICBpbnQgaW5kZXggPSBzdWJzdHJlYW0tPm51bWJlcjsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3Atb3BlbiI+Ci0gICAgICA8dGl0bGU+PGZ1bmN0aW9uPm9wZW48L2Z1bmN0aW9uPiBjYWxsYmFjazwvdGl0bGU+Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBzbmRfeHh4X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgc3Vic3RyZWFtIGlzIG9wZW5lZC4KLSAgICAgICAgWW91IGNhbiBpbml0aWFsaXplIHRoZSBoYXJkd2FyZSBoZXJlLCBidXQgeW91IHNob3VsZG4ndAotICAgICAgICBzdGFydCB0cmFuc21pdHRpbmcvcmVjZWl2aW5nIGRhdGEgeWV0LgotICAgICAgICA8L3BhcmE+Ci0gICAgICA8L3NlY3Rpb24+Ci0KLSAgICAgIDxzZWN0aW9uIGlkPSJyYXdtaWRpLWludGVyZmFjZS1vcC1jbG9zZSI+Ci0gICAgICA8dGl0bGU+PGZ1bmN0aW9uPmNsb3NlPC9mdW5jdGlvbj4gY2FsbGJhY2s8L3RpdGxlPgotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgc25kX3h4eF9jbG9zZShzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIEd1ZXNzIHdoYXQuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxmdW5jdGlvbj5vcGVuPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5jbG9zZTwvZnVuY3Rpb24+Ci0gICAgICAgIGNhbGxiYWNrcyBvZiBhIHJhd21pZGkgZGV2aWNlIGFyZSBzZXJpYWxpemVkIHdpdGggYSBtdXRleCwKLSAgICAgICAgYW5kIGNhbiBzbGVlcC4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtdHJpZ2dlci1vdXQiPgotICAgICAgPHRpdGxlPjxmdW5jdGlvbj50cmlnZ2VyPC9mdW5jdGlvbj4gY2FsbGJhY2sgZm9yIG91dHB1dAotICAgICAgc3Vic3RyZWFtczwvdGl0bGU+Ci0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIHZvaWQgc25kX3h4eF9vdXRwdXRfdHJpZ2dlcihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCB1cCk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2l0aCBhIG5vbnplcm8gPHBhcmFtZXRlcj51cDwvcGFyYW1ldGVyPgotICAgICAgICBwYXJhbWV0ZXIgd2hlbiB0aGVyZSBpcyBzb21lIGRhdGEgaW4gdGhlIHN1YnN0cmVhbSBidWZmZXIgdGhhdAotICAgICAgICBtdXN0IGJlIHRyYW5zbWl0dGVkLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIFRvIHJlYWQgZGF0YSBmcm9tIHRoZSBidWZmZXIsIGNhbGwKLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3RyYW5zbWl0X3BlZWs8L2Z1bmN0aW9uPi4gIEl0IHdpbGwKLSAgICAgICAgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZDsgdGhpcyB3aWxsIGJlCi0gICAgICAgIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlCi0gICAgICAgIGRhdGEgaW4gdGhlIGJ1ZmZlci4KLSAgICAgICAgQWZ0ZXIgdGhlIGRhdGEgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkIHN1Y2Nlc3NmdWxseSwgY2FsbAotICAgICAgICA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfdHJhbnNtaXRfYWNrPC9mdW5jdGlvbj4gdG8gcmVtb3ZlIHRoZQotICAgICAgICBkYXRhIGZyb20gdGhlIHN1YnN0cmVhbSBidWZmZXI6Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICB1bnNpZ25lZCBjaGFyIGRhdGE7Ci0gIHdoaWxlIChzbmRfcmF3bWlkaV90cmFuc21pdF9wZWVrKHN1YnN0cmVhbSwgJmRhdGEsIDEpID09IDEpIHsKLSAgICAgICAgICBpZiAoc25kX215Y2hpcF90cnlfdG9fdHJhbnNtaXQoZGF0YSkpCi0gICAgICAgICAgICAgICAgICBzbmRfcmF3bWlkaV90cmFuc21pdF9hY2soc3Vic3RyZWFtLCAxKTsKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBicmVhazsgLyogaGFyZHdhcmUgRklGTyBmdWxsICovCi0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICBJZiB5b3Uga25vdyBiZWZvcmVoYW5kIHRoYXQgdGhlIGhhcmR3YXJlIHdpbGwgYWNjZXB0IGRhdGEsIHlvdQotICAgICAgICBjYW4gdXNlIHRoZSA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfdHJhbnNtaXQ8L2Z1bmN0aW9uPiBmdW5jdGlvbgotICAgICAgICB3aGljaCByZWFkcyBzb21lIGRhdGEgYW5kIHJlbW92ZXMgdGhlbSBmcm9tIHRoZSBidWZmZXIgYXQgb25jZToKLSAgICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHdoaWxlIChzbmRfbXljaGlwX3RyYW5zbWl0X3Bvc3NpYmxlKCkpIHsKLSAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGE7Ci0gICAgICAgICAgaWYgKHNuZF9yYXdtaWRpX3RyYW5zbWl0KHN1YnN0cmVhbSwgJmRhdGEsIDEpICE9IDEpCi0gICAgICAgICAgICAgICAgICBicmVhazsgLyogbm8gbW9yZSBkYXRhICovCi0gICAgICAgICAgc25kX215Y2hpcF90cmFuc21pdChkYXRhKTsKLSAgfQotXV0+Ci0gICAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHlvdSBrbm93IGJlZm9yZWhhbmQgaG93IG1hbnkgYnl0ZXMgeW91IGNhbiBhY2NlcHQsIHlvdSBjYW4KLSAgICAgICAgdXNlIGEgYnVmZmVyIHNpemUgZ3JlYXRlciB0aGFuIG9uZSB3aXRoIHRoZQotICAgICAgICA8ZnVuY3Rpb24+c25kX3Jhd21pZGlfdHJhbnNtaXQqPC9mdW5jdGlvbj4gZnVuY3Rpb25zLgotICAgICAgICA8L3BhcmE+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSA8ZnVuY3Rpb24+dHJpZ2dlcjwvZnVuY3Rpb24+IGNhbGxiYWNrIG11c3Qgbm90IHNsZWVwLiAgSWYKLSAgICAgICAgdGhlIGhhcmR3YXJlIEZJRk8gaXMgZnVsbCBiZWZvcmUgdGhlIHN1YnN0cmVhbSBidWZmZXIgaGFzIGJlZW4KLSAgICAgICAgZW1wdGllZCwgeW91IGhhdmUgdG8gY29udGludWUgdHJhbnNtaXR0aW5nIGRhdGEgbGF0ZXIsIGVpdGhlcgotICAgICAgICBpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciwgb3Igd2l0aCBhIHRpbWVyIGlmIHRoZSBoYXJkd2FyZQotICAgICAgICBkb2Vzbid0IGhhdmUgYSBNSURJIHRyYW5zbWl0IGludGVycnVwdC4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBhCi0gICAgICAgIHplcm8gPHBhcmFtZXRlcj51cDwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIgd2hlbiB0aGUgdHJhbnNtaXNzaW9uCi0gICAgICAgIG9mIGRhdGEgc2hvdWxkIGJlIGFib3J0ZWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLQotICAgICAgPHNlY3Rpb24gaWQ9InJhd21pZGktaW50ZXJmYWNlLW9wLXRyaWdnZXItaW4iPgotICAgICAgPHRpdGxlPjxmdW5jdGlvbj50cmlnZ2VyPC9mdW5jdGlvbj4gY2FsbGJhY2sgZm9yIGlucHV0Ci0gICAgICBzdWJzdHJlYW1zPC90aXRsZT4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgdm9pZCBzbmRfeHh4X2lucHV0X3RyaWdnZXIoc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgdXApOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgPHBhcmE+Ci0gICAgICAgIFRoaXMgaXMgY2FsbGVkIHdpdGggYSBub256ZXJvIDxwYXJhbWV0ZXI+dXA8L3BhcmFtZXRlcj4KLSAgICAgICAgcGFyYW1ldGVyIHRvIGVuYWJsZSByZWNlaXZpbmcgZGF0YSwgb3Igd2l0aCBhIHplcm8KLSAgICAgICAgPHBhcmFtZXRlcj51cDwvcGFyYW1ldGVyPiBwYXJhbWV0ZXIgZG8gZGlzYWJsZSByZWNlaXZpbmcgZGF0YS4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICBUaGUgPGZ1bmN0aW9uPnRyaWdnZXI8L2Z1bmN0aW9uPiBjYWxsYmFjayBtdXN0IG5vdCBzbGVlcDsgdGhlCi0gICAgICAgIGFjdHVhbCByZWFkaW5nIG9mIGRhdGEgZnJvbSB0aGUgZGV2aWNlIGlzIHVzdWFsbHkgZG9uZSBpbiBhbgotICAgICAgICBpbnRlcnJ1cHQgaGFuZGxlci4KLSAgICAgICAgPC9wYXJhPgotCi0gICAgICAgIDxwYXJhPgotICAgICAgICBXaGVuIGRhdGEgcmVjZXB0aW9uIGlzIGVuYWJsZWQsIHlvdXIgaW50ZXJydXB0IGhhbmRsZXIgc2hvdWxkCi0gICAgICAgIGNhbGwgPGZ1bmN0aW9uPnNuZF9yYXdtaWRpX3JlY2VpdmU8L2Z1bmN0aW9uPiBmb3IgYWxsIHJlY2VpdmVkCi0gICAgICAgIGRhdGE6Ci0gICAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICB2b2lkIHNuZF9teWNoaXBfbWlkaV9pbnRlcnJ1cHQoLi4uKQotICB7Ci0gICAgICAgICAgd2hpbGUgKG15Y2hpcF9taWRpX2F2YWlsYWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGE7Ci0gICAgICAgICAgICAgICAgICBkYXRhID0gbXljaGlwX21pZGlfcmVhZCgpOwotICAgICAgICAgICAgICAgICAgc25kX3Jhd21pZGlfcmVjZWl2ZShzdWJzdHJlYW0sICZkYXRhLCAxKTsKLSAgICAgICAgICB9Ci0gIH0KLV1dPgotICAgICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPC9wYXJhPgotICAgICAgPC9zZWN0aW9uPgotCi0gICAgICA8c2VjdGlvbiBpZD0icmF3bWlkaS1pbnRlcmZhY2Utb3AtZHJhaW4iPgotICAgICAgPHRpdGxlPjxmdW5jdGlvbj5kcmFpbjwvZnVuY3Rpb24+IGNhbGxiYWNrPC90aXRsZT4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgdm9pZCBzbmRfeHh4X2RyYWluKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBpcyBvbmx5IHVzZWQgd2l0aCBvdXRwdXQgc3Vic3RyZWFtcy4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIHdhaXQKLSAgICAgICAgdW50aWwgYWxsIGRhdGEgcmVhZCBmcm9tIHRoZSBzdWJzdHJlYW0gYnVmZmVyIGhhdmUgYmVlbiB0cmFuc21pdHRlZC4KLSAgICAgICAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGRldmljZSBjYW4gYmUgY2xvc2VkIGFuZCB0aGUgZHJpdmVyIHVubG9hZGVkCi0gICAgICAgIHdpdGhvdXQgbG9zaW5nIGRhdGEuCi0gICAgICAgIDwvcGFyYT4KLQotICAgICAgICA8cGFyYT4KLSAgICAgICAgVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4gSWYgeW91IGRvIG5vdCBzZXQKLSAgICAgICAgPHN0cnVjdGZpZWxkPmRyYWluPC9zdHJ1Y3RmaWVsZD4gaW4gdGhlIHN0cnVjdCBzbmRfcmF3bWlkaV9vcHMKLSAgICAgICAgc3RydWN0dXJlLCBBTFNBIHdpbGwgc2ltcGx5IHdhaXQgZm9yIDUwJm5ic3A7bWlsbGlzZWNvbmRzCi0gICAgICAgIGluc3RlYWQuCi0gICAgICAgIDwvcGFyYT4KLSAgICAgIDwvc2VjdGlvbj4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBNaXNjZWxsYW5lb3VzIERldmljZXMgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJtaXNjLWRldmljZXMiPgotICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzIERldmljZXM8L3RpdGxlPgotCi0gICAgPHNlY3Rpb24gaWQ9Im1pc2MtZGV2aWNlcy1vcGwzIj4KLSAgICAgIDx0aXRsZT5GTSBPUEwzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgRk0gT1BMMyBpcyBzdGlsbCB1c2VkIGluIG1hbnkgY2hpcHMgKG1haW5seSBmb3IgYmFja3dhcmQKLSAgICAgIGNvbXBhdGliaWxpdHkpLiBBTFNBIGhhcyBhIG5pY2UgT1BMMyBGTSBjb250cm9sIGxheWVyLCB0b28uIFRoZQotICAgICAgT1BMMyBBUEkgaXMgZGVmaW5lZCBpbgotICAgICAgPGZpbGVuYW1lPiZsdDtzb3VuZC9vcGwzLmgmZ3Q7PC9maWxlbmFtZT4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgRk0gcmVnaXN0ZXJzIGNhbiBiZSBkaXJlY3RseSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBkaXJlY3QtRk0gQVBJLAotICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2Fzb3VuZF9mbS5oJmd0OzwvZmlsZW5hbWU+LiBJbgotICAgICAgQUxTQSBuYXRpdmUgbW9kZSwgRk0gcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCB0aHJvdWdoCi0gICAgICB0aGUgSGFyZHdhcmUtRGVwZW5kYW50IERldmljZSBkaXJlY3QtRk0gZXh0ZW5zaW9uIEFQSSwgd2hlcmVhcyBpbgotICAgICAgT1NTIGNvbXBhdGlibGUgbW9kZSwgRk0gcmVnaXN0ZXJzIGNhbiBiZSBhY2Nlc3NlZCB3aXRoIHRoZSBPU1MKLSAgICAgIGRpcmVjdC1GTSBjb21wYXRpYmxlIEFQSSBpbiA8ZmlsZW5hbWU+L2Rldi9kbWZtWDwvZmlsZW5hbWU+IGRldmljZS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUbyBjcmVhdGUgdGhlIE9QTDMgY29tcG9uZW50LCB5b3UgaGF2ZSB0d28gZnVuY3Rpb25zIHRvCi0gICAgICAgIGNhbGwuIFRoZSBmaXJzdCBvbmUgaXMgYSBjb25zdHJ1Y3RvciBmb3IgdGhlIDx0eXBlPm9wbDNfdDwvdHlwZT4KLSAgICAgICAgaW5zdGFuY2UuIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKLSAgc25kX29wbDNfY3JlYXRlKGNhcmQsIGxwb3J0LCBycG9ydCwgT1BMM19IV19PUEwzX1hYWCwKLSAgICAgICAgICAgICAgICAgIGludGVncmF0ZWQsICZvcGwzKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjYXJkIHBvaW50ZXIsIHRoZSBzZWNvbmQgb25lIGlzIHRoZQotICAgICAgbGVmdCBwb3J0IGFkZHJlc3MsIGFuZCB0aGUgdGhpcmQgaXMgdGhlIHJpZ2h0IHBvcnQgYWRkcmVzcy4gSW4KLSAgICAgIG1vc3QgY2FzZXMsIHRoZSByaWdodCBwb3J0IGlzIHBsYWNlZCBhdCB0aGUgbGVmdCBwb3J0ICsgMi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgZm91cnRoIGFyZ3VtZW50IGlzIHRoZSBoYXJkd2FyZSB0eXBlLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgV2hlbiB0aGUgbGVmdCBhbmQgcmlnaHQgcG9ydHMgaGF2ZSBiZWVuIGFscmVhZHkgYWxsb2NhdGVkIGJ5Ci0gICAgICB0aGUgY2FyZCBkcml2ZXIsIHBhc3Mgbm9uLXplcm8gdG8gdGhlIGZpZnRoIGFyZ3VtZW50Ci0gICAgICAoPHBhcmFtZXRlcj5pbnRlZ3JhdGVkPC9wYXJhbWV0ZXI+KS4gT3RoZXJ3aXNlLCB0aGUgb3BsMyBtb2R1bGUgd2lsbAotICAgICAgYWxsb2NhdGUgdGhlIHNwZWNpZmllZCBwb3J0cyBieSBpdHNlbGYuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgV2hlbiB0aGUgYWNjZXNzaW5nIHRoZSBoYXJkd2FyZSByZXF1aXJlcyBzcGVjaWFsIG1ldGhvZAotICAgICAgICBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBJL08gYWNjZXNzLCB5b3UgY2FuIGNyZWF0ZSBvcGwzIGluc3RhbmNlCi0gICAgICAgIHNlcGFyYXRlbHkgd2l0aCA8ZnVuY3Rpb24+c25kX29wbDNfbmV3KCk8L2Z1bmN0aW9uPi4KLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7Ci0gIHNuZF9vcGwzX25ldyhjYXJkLCBPUEwzX0hXX09QTDNfWFhYLCAmb3BsMyk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0JVGhlbiBzZXQgPHN0cnVjdGZpZWxkPmNvbW1hbmQ8L3N0cnVjdGZpZWxkPiwKLQk8c3RydWN0ZmllbGQ+cHJpdmF0ZV9kYXRhPC9zdHJ1Y3RmaWVsZD4gYW5kCi0JPHN0cnVjdGZpZWxkPnByaXZhdGVfZnJlZTwvc3RydWN0ZmllbGQ+IGZvciB0aGUgcHJpdmF0ZQotCWFjY2VzcyBmdW5jdGlvbiwgdGhlIHByaXZhdGUgZGF0YSBhbmQgdGhlIGRlc3RydWN0b3IuCi0JVGhlIGxfcG9ydCBhbmQgcl9wb3J0IGFyZSBub3QgbmVjZXNzYXJpbHkgc2V0LiAgT25seSB0aGUKLQljb21tYW5kIG11c3QgYmUgc2V0IHByb3Blcmx5LiAgWW91IGNhbiByZXRyaWV2ZSB0aGUgZGF0YQotCWZyb20gdGhlIG9wbDMtJmd0O3ByaXZhdGVfZGF0YSBmaWVsZC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0JQWZ0ZXIgY3JlYXRpbmcgdGhlIG9wbDMgaW5zdGFuY2UgdmlhIDxmdW5jdGlvbj5zbmRfb3BsM19uZXcoKTwvZnVuY3Rpb24+LAotCWNhbGwgPGZ1bmN0aW9uPnNuZF9vcGwzX2luaXQoKTwvZnVuY3Rpb24+IHRvIGluaXRpYWxpemUgdGhlIGNoaXAgdG8gdGhlCi0JcHJvcGVyIHN0YXRlLiBOb3RlIHRoYXQgPGZ1bmN0aW9uPnNuZF9vcGwzX2NyZWF0ZSgpPC9mdW5jdGlvbj4gYWx3YXlzCi0JY2FsbHMgaXQgaW50ZXJuYWxseS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIElmIHRoZSBvcGwzIGluc3RhbmNlIGlzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LCB0aGVuIGNyZWF0ZSBhCi0gICAgICAgIGh3ZGVwIGRldmljZSBmb3IgdGhpcyBvcGwzLiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX2h3ZGVwICpvcGwzaHdkZXA7Ci0gIHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCAmb3BsM2h3ZGVwKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSA8dHlwZT5vcGwzX3Q8L3R5cGU+IGluc3RhbmNlIHlvdQotICAgICAgY3JlYXRlZCwgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIGluZGV4IG51bWJlciwgdXN1YWxseSAwLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgaW5kZXgtb2Zmc2V0IGZvciB0aGUgc2VxdWVuY2VyCi0gICAgICBjbGllbnQgYXNzaWduZWQgdG8gdGhlIE9QTDMgcG9ydC4gV2hlbiB0aGVyZSBpcyBhbiBNUFU0MDEtVUFSVCwKLSAgICAgIGdpdmUgMSBmb3IgaGVyZSAoVUFSVCBhbHdheXMgdGFrZXMgMCkuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJtaXNjLWRldmljZXMtaGFyZHdhcmUtZGVwZW5kZW50Ij4KLSAgICAgIDx0aXRsZT5IYXJkd2FyZS1EZXBlbmRlbnQgRGV2aWNlczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgU29tZSBjaGlwcyBuZWVkIHVzZXItc3BhY2UgYWNjZXNzIGZvciBzcGVjaWFsCi0gICAgICBjb250cm9scyBvciBmb3IgbG9hZGluZyB0aGUgbWljcm8gY29kZS4gSW4gc3VjaCBhIGNhc2UsIHlvdSBjYW4KLSAgICAgIGNyZWF0ZSBhIGh3ZGVwIChoYXJkd2FyZS1kZXBlbmRlbnQpIGRldmljZS4gVGhlIGh3ZGVwIEFQSSBpcwotICAgICAgZGVmaW5lZCBpbiA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2h3ZGVwLmgmZ3Q7PC9maWxlbmFtZT4uIFlvdSBjYW4KLSAgICAgIGZpbmQgZXhhbXBsZXMgaW4gb3BsMyBkcml2ZXIgb3IKLSAgICAgIDxmaWxlbmFtZT5pc2Evc2Ivc2IxNl9jc3AuYzwvZmlsZW5hbWU+LiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBjcmVhdGlvbiBvZiB0aGUgPHR5cGU+aHdkZXA8L3R5cGU+IGluc3RhbmNlIGlzIGRvbmUgdmlhCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfaHdkZXBfbmV3KCk8L2Z1bmN0aW9uPi4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9od2RlcCAqaHc7Ci0gIHNuZF9od2RlcF9uZXcoY2FyZCwgIk15IEhXREVQIiwgMCwgJmh3KTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICAgIHdoZXJlIHRoZSB0aGlyZCBhcmd1bWVudCBpcyB0aGUgaW5kZXggbnVtYmVyLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgWW91IGNhbiB0aGVuIHBhc3MgYW55IHBvaW50ZXIgdmFsdWUgdG8gdGhlCi0gICAgICAgIDxwYXJhbWV0ZXI+cHJpdmF0ZV9kYXRhPC9wYXJhbWV0ZXI+LgotICAgICAgICBJZiB5b3UgYXNzaWduIGEgcHJpdmF0ZSBkYXRhLCB5b3Ugc2hvdWxkIGRlZmluZSB0aGUKLSAgICAgICAgZGVzdHJ1Y3RvciwgdG9vLiBUaGUgZGVzdHJ1Y3RvciBmdW5jdGlvbiBpcyBzZXQgaW4KLSAgICAgICAgdGhlIDxzdHJ1Y3RmaWVsZD5wcml2YXRlX2ZyZWU8L3N0cnVjdGZpZWxkPiBmaWVsZC4gIAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0cnVjdCBteWRhdGEgKnAgPSBrbWFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpOwotICBody0+cHJpdmF0ZV9kYXRhID0gcDsKLSAgaHctPnByaXZhdGVfZnJlZSA9IG15ZGF0YV9mcmVlOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgYW5kIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGVzdHJ1Y3RvciB3b3VsZCBiZToKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgdm9pZCBteWRhdGFfZnJlZShzdHJ1Y3Qgc25kX2h3ZGVwICpodykKLSAgewotICAgICAgICAgIHN0cnVjdCBteWRhdGEgKnAgPSBody0+cHJpdmF0ZV9kYXRhOwotICAgICAgICAgIGtmcmVlKHApOwotICB9Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBhcmJpdHJhcnkgZmlsZSBvcGVyYXRpb25zIGNhbiBiZSBkZWZpbmVkIGZvciB0aGlzCi0gICAgICAgIGluc3RhbmNlLiBUaGUgZmlsZSBvcGVyYXRvcnMgYXJlIGRlZmluZWQgaW4KLSAgICAgICAgdGhlIDxwYXJhbWV0ZXI+b3BzPC9wYXJhbWV0ZXI+IHRhYmxlLiBGb3IgZXhhbXBsZSwgYXNzdW1lIHRoYXQKLSAgICAgICAgdGhpcyBjaGlwIG5lZWRzIGFuIGlvY3RsLiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBody0+b3BzLm9wZW4gPSBteWRhdGFfb3BlbjsKLSAgaHctPm9wcy5pb2N0bCA9IG15ZGF0YV9pb2N0bDsKLSAgaHctPm9wcy5yZWxlYXNlID0gbXlkYXRhX3JlbGVhc2U7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICBBbmQgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgYXMgeW91IGxpa2UuCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9Im1pc2MtZGV2aWNlcy1JRUM5NTgiPgotICAgICAgPHRpdGxlPklFQzk1OCAoUy9QRElGKTwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgVXN1YWxseSB0aGUgY29udHJvbHMgZm9yIElFQzk1OCBkZXZpY2VzIGFyZSBpbXBsZW1lbnRlZCB2aWEKLSAgICAgIHRoZSBjb250cm9sIGludGVyZmFjZS4gVGhlcmUgaXMgYSBtYWNybyB0byBjb21wb3NlIGEgbmFtZSBzdHJpbmcgZm9yCi0gICAgICBJRUM5NTggY29udHJvbHMsIDxmdW5jdGlvbj5TTkRSVl9DVExfTkFNRV9JRUM5NTgoKTwvZnVuY3Rpb24+Ci0gICAgICBkZWZpbmVkIGluIDxmaWxlbmFtZT4mbHQ7aW5jbHVkZS9hc291bmQuaCZndDs8L2ZpbGVuYW1lPi4gIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlcmUgYXJlIHNvbWUgc3RhbmRhcmQgY29udHJvbHMgZm9yIElFQzk1OCBzdGF0dXMgYml0cy4gVGhlc2UKLSAgICAgIGNvbnRyb2xzIHVzZSB0aGUgdHlwZSA8dHlwZT5TTkRSVl9DVExfRUxFTV9UWVBFX0lFQzk1ODwvdHlwZT4sCi0gICAgICBhbmQgdGhlIHNpemUgb2YgZWxlbWVudCBpcyBmaXhlZCBhcyA0IGJ5dGVzIGFycmF5Ci0gICAgICAodmFsdWUuaWVjOTU4LnN0YXR1c1t4XSkuIEZvciB0aGUgPHN0cnVjdGZpZWxkPmluZm88L3N0cnVjdGZpZWxkPgotICAgICAgY2FsbGJhY2ssIHlvdSBkb24ndCBzcGVjaWZ5IAotICAgICAgdGhlIHZhbHVlIGZpZWxkIGZvciB0aGlzIHR5cGUgKHRoZSBjb3VudCBmaWVsZCBtdXN0IGJlIHNldCwKLSAgICAgIHRob3VnaCkuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBDb24gTWFzazwvcXVvdGU+IGlzIHVzZWQgdG8gcmV0dXJuIHRoZQotICAgICAgYml0LW1hc2sgZm9yIHRoZSBJRUM5NTggc3RhdHVzIGJpdHMgb2YgY29uc3VtZXIgbW9kZS4gU2ltaWxhcmx5LAotICAgICAgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBQcm8gTWFzazwvcXVvdGU+IHJldHVybnMgdGhlIGJpdG1hc2sgZm9yCi0gICAgICBwcm9mZXNzaW9uYWwgbW9kZS4gVGhleSBhcmUgcmVhZC1vbmx5IGNvbnRyb2xzLCBhbmQgYXJlIGRlZmluZWQKLSAgICAgIGFzIE1JWEVSIGNvbnRyb2xzIChpZmFjZSA9Ci0gICAgICA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVI8L2NvbnN0YW50PikuICAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIE1lYW53aGlsZSwgPHF1b3RlPklFQzk1OCBQbGF5YmFjayBEZWZhdWx0PC9xdW90ZT4gY29udHJvbCBpcwotICAgICAgZGVmaW5lZCBmb3IgZ2V0dGluZyBhbmQgc2V0dGluZyB0aGUgY3VycmVudCBkZWZhdWx0IElFQzk1OAotICAgICAgYml0cy4gTm90ZSB0aGF0IHRoaXMgb25lIGlzIHVzdWFsbHkgZGVmaW5lZCBhcyBhIFBDTSBjb250cm9sCi0gICAgICAoaWZhY2UgPSA8Y29uc3RhbnQ+U05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNPC9jb25zdGFudD4pLAotICAgICAgYWx0aG91Z2ggaW4gc29tZSBwbGFjZXMgaXQncyBkZWZpbmVkIGFzIGEgTUlYRVIgY29udHJvbC4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBJbiBhZGRpdGlvbiwgeW91IGNhbiBkZWZpbmUgdGhlIGNvbnRyb2wgc3dpdGNoZXMgdG8KLSAgICAgIGVuYWJsZS9kaXNhYmxlIG9yIHRvIHNldCB0aGUgcmF3IGJpdCBtb2RlLiBUaGUgaW1wbGVtZW50YXRpb24KLSAgICAgIHdpbGwgZGVwZW5kIG9uIHRoZSBjaGlwLCBidXQgdGhlIGNvbnRyb2wgc2hvdWxkIGJlIG5hbWVkIGFzCi0gICAgICA8cXVvdGU+SUVDOTU4IHh4eDwvcXVvdGU+LCBwcmVmZXJhYmx5IHVzaW5nCi0gICAgICB0aGUgPGZ1bmN0aW9uPlNORFJWX0NUTF9OQU1FX0lFQzk1OCgpPC9mdW5jdGlvbj4gbWFjcm8uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgWW91IGNhbiBmaW5kIHNldmVyYWwgY2FzZXMsIGZvciBleGFtcGxlLAotICAgICAgPGZpbGVuYW1lPnBjaS9lbXUxMGsxPC9maWxlbmFtZT4sCi0gICAgICA8ZmlsZW5hbWU+cGNpL2ljZTE3MTI8L2ZpbGVuYW1lPiwgb3IKLSAgICAgIDxmaWxlbmFtZT5wY2kvY21pcGNpLmM8L2ZpbGVuYW1lPi4gIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIEJ1ZmZlciBhbmQgTWVtb3J5IE1hbmFnZW1lbnQgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJidWZmZXItYW5kLW1lbW9yeSI+Ci0gICAgPHRpdGxlPkJ1ZmZlciBhbmQgTWVtb3J5IE1hbmFnZW1lbnQ8L3RpdGxlPgotCi0gICAgPHNlY3Rpb24gaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5LWJ1ZmZlci10eXBlcyI+Ci0gICAgICA8dGl0bGU+QnVmZmVyIFR5cGVzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBBTFNBIHByb3ZpZGVzIHNldmVyYWwgZGlmZmVyZW50IGJ1ZmZlciBhbGxvY2F0aW9uIGZ1bmN0aW9ucwotICAgICAgZGVwZW5kaW5nIG9uIHRoZSBidXMgYW5kIHRoZSBhcmNoaXRlY3R1cmUuIEFsbCB0aGVzZSBoYXZlIGEKLSAgICAgIGNvbnNpc3RlbnQgQVBJLiBUaGUgYWxsb2NhdGlvbiBvZiBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgcGFnZXMgaXMKLSAgICAgIGRvbmUgdmlhIAotICAgICAgPGZ1bmN0aW9uPnNuZF9tYWxsb2NfeHh4X3BhZ2VzKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbiwgd2hlcmUgeHh4Ci0gICAgICBpcyB0aGUgYnVzIHR5cGUuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGFsbG9jYXRpb24gb2YgcGFnZXMgd2l0aCBmYWxsYmFjayBpcwotICAgICAgPGZ1bmN0aW9uPnNuZF9tYWxsb2NfeHh4X3BhZ2VzX2ZhbGxiYWNrKCk8L2Z1bmN0aW9uPi4gVGhpcwotICAgICAgZnVuY3Rpb24gdHJpZXMgdG8gYWxsb2NhdGUgdGhlIHNwZWNpZmllZCBwYWdlcyBidXQgaWYgdGhlIHBhZ2VzCi0gICAgICBhcmUgbm90IGF2YWlsYWJsZSwgaXQgdHJpZXMgdG8gcmVkdWNlIHRoZSBwYWdlIHNpemVzIHVudGlsCi0gICAgICBlbm91Z2ggc3BhY2UgaXMgZm91bmQuCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVGhlIHJlbGVhc2UgdGhlIHBhZ2VzLCBjYWxsCi0gICAgICA8ZnVuY3Rpb24+c25kX2ZyZWVfeHh4X3BhZ2VzKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgVXN1YWxseSwgQUxTQSBkcml2ZXJzIHRyeSB0byBhbGxvY2F0ZSBhbmQgcmVzZXJ2ZQotICAgICAgIGEgbGFyZ2UgY29udGlndW91cyBwaHlzaWNhbCBzcGFjZQotICAgICAgIGF0IHRoZSB0aW1lIHRoZSBtb2R1bGUgaXMgbG9hZGVkIGZvciB0aGUgbGF0ZXIgdXNlLgotICAgICAgIFRoaXMgaXMgY2FsbGVkIDxxdW90ZT5wcmUtYWxsb2NhdGlvbjwvcXVvdGU+LgotICAgICAgIEFzIGFscmVhZHkgd3JpdHRlbiwgeW91IGNhbiBjYWxsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYXQgCi0gICAgICAgcGNtIGluc3RhbmNlIGNvbnN0cnVjdGlvbiB0aW1lIChpbiB0aGUgY2FzZSBvZiBQQ0kgYnVzKS4gCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmRfZG1hX3BjaV9kYXRhKHBjaSksIHNpemUsIG1heCk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLQotICAgICAgICB3aGVyZSA8cGFyYW1ldGVyPnNpemU8L3BhcmFtZXRlcj4gaXMgdGhlIGJ5dGUgc2l6ZSB0byBiZQotICAgICAgcHJlLWFsbG9jYXRlZCBhbmQgdGhlIDxwYXJhbWV0ZXI+bWF4PC9wYXJhbWV0ZXI+IGlzIHRoZSBtYXhpbXVtCi0gICAgICBzaXplIHRvIGJlIGNoYW5nZWQgdmlhIHRoZSA8ZmlsZW5hbWU+cHJlYWxsb2M8L2ZpbGVuYW1lPiBwcm9jIGZpbGUuCi0gICAgICBUaGUgYWxsb2NhdG9yIHdpbGwgdHJ5IHRvIGdldCBhbiBhcmVhIGFzIGxhcmdlIGFzIHBvc3NpYmxlCi0gICAgICB3aXRoaW4gdGhlIGdpdmVuIHNpemUuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgIFRoZSBzZWNvbmQgYXJndW1lbnQgKHR5cGUpIGFuZCB0aGUgdGhpcmQgYXJndW1lbnQgKGRldmljZSBwb2ludGVyKQotICAgICAgYXJlIGRlcGVuZGVudCBvbiB0aGUgYnVzLgotICAgICAgSW4gdGhlIGNhc2Ugb2YgdGhlIElTQSBidXMsIHBhc3MgPGZ1bmN0aW9uPnNuZF9kbWFfaXNhX2RhdGEoKTwvZnVuY3Rpb24+Ci0gICAgICBhcyB0aGUgdGhpcmQgYXJndW1lbnQgd2l0aCA8Y29uc3RhbnQ+U05EUlZfRE1BX1RZUEVfREVWPC9jb25zdGFudD4gdHlwZS4KLSAgICAgIEZvciB0aGUgY29udGludW91cyBidWZmZXIgdW5yZWxhdGVkIHRvIHRoZSBidXMgY2FuIGJlIHByZS1hbGxvY2F0ZWQKLSAgICAgIHdpdGggPGNvbnN0YW50PlNORFJWX0RNQV9UWVBFX0NPTlRJTlVPVVM8L2NvbnN0YW50PiB0eXBlIGFuZCB0aGUKLSAgICAgIDxmdW5jdGlvbj5zbmRfZG1hX2NvbnRpbnVvdXNfZGF0YShHRlBfS0VSTkVMKTwvZnVuY3Rpb24+IGRldmljZSBwb2ludGVyLAotICAgICAgd2hlcmUgPGNvbnN0YW50PkdGUF9LRVJORUw8L2NvbnN0YW50PiBpcyB0aGUga2VybmVsIGFsbG9jYXRpb24gZmxhZyB0bwotICAgICAgdXNlLgotICAgICAgRm9yIHRoZSBQQ0kgc2NhdHRlci1nYXRoZXIgYnVmZmVycywgdXNlCi0gICAgICA8Y29uc3RhbnQ+U05EUlZfRE1BX1RZUEVfREVWX1NHPC9jb25zdGFudD4gd2l0aAotICAgICAgPGZ1bmN0aW9uPnNuZF9kbWFfcGNpX2RhdGEocGNpKTwvZnVuY3Rpb24+Ci0gICAgICAoc2VlIHRoZSAKLSAgICAgICAgICA8bGluayBsaW5rZW5kPSJidWZmZXItYW5kLW1lbW9yeS1ub24tY29udGlndW91cyI+PGNpdGV0aXRsZT5Ob24tQ29udGlndW91cyBCdWZmZXJzCi0gICAgICAgICAgPC9jaXRldGl0bGU+PC9saW5rPiBzZWN0aW9uKS4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIE9uY2UgdGhlIGJ1ZmZlciBpcyBwcmUtYWxsb2NhdGVkLCB5b3UgY2FuIHVzZSB0aGUKLSAgICAgICAgYWxsb2NhdG9yIGluIHRoZSA8c3RydWN0ZmllbGQ+aHdfcGFyYW1zPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2s6IAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sIHNpemUpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgTm90ZSB0aGF0IHlvdSBoYXZlIHRvIHByZS1hbGxvY2F0ZSB0byB1c2UgdGhpcyBmdW5jdGlvbi4KLSAgICAgIDwvcGFyYT4KLSAgICA8L3NlY3Rpb24+Ci0KLSAgICA8c2VjdGlvbiBpZD0iYnVmZmVyLWFuZC1tZW1vcnktZXh0ZXJuYWwtaGFyZHdhcmUiPgotICAgICAgPHRpdGxlPkV4dGVybmFsIEhhcmR3YXJlIEJ1ZmZlcnM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIFNvbWUgY2hpcHMgaGF2ZSB0aGVpciBvd24gaGFyZHdhcmUgYnVmZmVycyBhbmQgdGhlIERNQQotICAgICAgdHJhbnNmZXIgZnJvbSB0aGUgaG9zdCBtZW1vcnkgaXMgbm90IGF2YWlsYWJsZS4gSW4gc3VjaCBhIGNhc2UsCi0gICAgICB5b3UgbmVlZCB0byBlaXRoZXIgMSkgY29weS9zZXQgdGhlIGF1ZGlvIGRhdGEgZGlyZWN0bHkgdG8gdGhlCi0gICAgICBleHRlcm5hbCBoYXJkd2FyZSBidWZmZXIsIG9yIDIpIG1ha2UgYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBhbmQKLSAgICAgIGNvcHkvc2V0IHRoZSBkYXRhIGZyb20gaXQgdG8gdGhlIGV4dGVybmFsIGhhcmR3YXJlIGJ1ZmZlciBpbgotICAgICAgaW50ZXJydXB0cyAob3IgaW4gdGFza2xldHMsIHByZWZlcmFibHkpLgotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGZpcnN0IGNhc2Ugd29ya3MgZmluZSBpZiB0aGUgZXh0ZXJuYWwgaGFyZHdhcmUgYnVmZmVyIGlzIGxhcmdlCi0gICAgICBlbm91Z2guICBUaGlzIG1ldGhvZCBkb2Vzbid0IG5lZWQgYW55IGV4dHJhIGJ1ZmZlcnMgYW5kIHRodXMgaXMKLSAgICAgIG1vcmUgZWZmZWN0aXZlLiBZb3UgbmVlZCB0byBkZWZpbmUgdGhlCi0gICAgICA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGFuZAotICAgICAgPHN0cnVjdGZpZWxkPnNpbGVuY2U8L3N0cnVjdGZpZWxkPiBjYWxsYmFja3MgZm9yIAotICAgICAgdGhlIGRhdGEgdHJhbnNmZXIuIEhvd2V2ZXIsIHRoZXJlIGlzIGEgZHJhd2JhY2s6IGl0IGNhbm5vdAotICAgICAgYmUgbW1hcHBlZC4gVGhlIGV4YW1wbGVzIGFyZSBHVVMncyBHRjEgUENNIG9yIGVtdTgwMDAncwotICAgICAgd2F2ZXRhYmxlIFBDTS4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgc2Vjb25kIGNhc2UgYWxsb3dzIGZvciBtbWFwIG9uIHRoZSBidWZmZXIsIGFsdGhvdWdoIHlvdSBoYXZlCi0gICAgICB0byBoYW5kbGUgYW4gaW50ZXJydXB0IG9yIGEgdGFza2xldCB0byB0cmFuc2ZlciB0aGUgZGF0YQotICAgICAgZnJvbSB0aGUgaW50ZXJtZWRpYXRlIGJ1ZmZlciB0byB0aGUgaGFyZHdhcmUgYnVmZmVyLiBZb3UgY2FuIGZpbmQgYW4KLSAgICAgIGV4YW1wbGUgaW4gdGhlIHZ4cG9ja2V0IGRyaXZlci4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBBbm90aGVyIGNhc2UgaXMgd2hlbiB0aGUgY2hpcCB1c2VzIGEgUENJIG1lbW9yeS1tYXAKLSAgICAgIHJlZ2lvbiBmb3IgdGhlIGJ1ZmZlciBpbnN0ZWFkIG9mIHRoZSBob3N0IG1lbW9yeS4gSW4gdGhpcyBjYXNlLAotICAgICAgbW1hcCBpcyBhdmFpbGFibGUgb25seSBvbiBjZXJ0YWluIGFyY2hpdGVjdHVyZXMgbGlrZSB0aGUgSW50ZWwgb25lLgotICAgICAgSW4gbm9uLW1tYXAgbW9kZSwgdGhlIGRhdGEgY2Fubm90IGJlIHRyYW5zZmVycmVkIGFzIGluIHRoZSBub3JtYWwKLSAgICAgIHdheS4gVGh1cyB5b3UgbmVlZCB0byBkZWZpbmUgdGhlIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gYW5kCi0gICAgICA8c3RydWN0ZmllbGQ+c2lsZW5jZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrcyBhcyB3ZWxsLCAKLSAgICAgIGFzIGluIHRoZSBjYXNlcyBhYm92ZS4gVGhlIGV4YW1wbGVzIGFyZSBmb3VuZCBpbgotICAgICAgPGZpbGVuYW1lPnJtZTMyLmM8L2ZpbGVuYW1lPiBhbmQgPGZpbGVuYW1lPnJtZTk2LmM8L2ZpbGVuYW1lPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gYW5kCi0gICAgICAgIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2tzIGRlcGVuZHMgdXBvbiAKLSAgICAgICAgd2hldGhlciB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgaW50ZXJsZWF2ZWQgb3Igbm9uLWludGVybGVhdmVkCi0gICAgICAgIHNhbXBsZXMuIFRoZSA8c3RydWN0ZmllbGQ+Y29weTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGlzCi0gICAgICAgIGRlZmluZWQgbGlrZSBiZWxvdywgYSBiaXQgCi0gICAgICAgIGRpZmZlcmVudGx5IGRlcGVuZGluZyB3aGV0aGVyIHRoZSBkaXJlY3Rpb24gaXMgcGxheWJhY2sgb3IKLSAgICAgICAgY2FwdHVyZTogCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBwbGF5YmFja19jb3B5KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY2hhbm5lbCwKLSAgICAgICAgICAgICAgIHNuZF9wY21fdWZyYW1lc190IHBvcywgdm9pZCAqc3JjLCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCk7Ci0gIHN0YXRpYyBpbnQgY2FwdHVyZV9jb3B5KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY2hhbm5lbCwKLSAgICAgICAgICAgICAgIHNuZF9wY21fdWZyYW1lc190IHBvcywgdm9pZCAqZHN0LCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHRoZSBjYXNlIG9mIGludGVybGVhdmVkIHNhbXBsZXMsIHRoZSBzZWNvbmQgYXJndW1lbnQKLSAgICAgICg8cGFyYW1ldGVyPmNoYW5uZWw8L3BhcmFtZXRlcj4pIGlzIG5vdCB1c2VkLiBUaGUgdGhpcmQgYXJndW1lbnQKLSAgICAgICg8cGFyYW1ldGVyPnBvczwvcGFyYW1ldGVyPikgcG9pbnRzIHRoZSAKLSAgICAgIGN1cnJlbnQgcG9zaXRpb24gb2Zmc2V0IGluIGZyYW1lcy4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgbWVhbmluZyBvZiB0aGUgZm91cnRoIGFyZ3VtZW50IGlzIGRpZmZlcmVudCBiZXR3ZWVuCi0gICAgICBwbGF5YmFjayBhbmQgY2FwdHVyZS4gRm9yIHBsYXliYWNrLCBpdCBob2xkcyB0aGUgc291cmNlIGRhdGEKLSAgICAgIHBvaW50ZXIsIGFuZCBmb3IgY2FwdHVyZSwgaXQncyB0aGUgZGVzdGluYXRpb24gZGF0YSBwb2ludGVyLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIGJlIGNvcGllZC4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFdoYXQgeW91IGhhdmUgdG8gZG8gaW4gdGhpcyBjYWxsYmFjayBpcyBhZ2FpbiBkaWZmZXJlbnQKLSAgICAgICAgYmV0d2VlbiBwbGF5YmFjayBhbmQgY2FwdHVyZSBkaXJlY3Rpb25zLiBJbiB0aGUKLSAgICAgICAgcGxheWJhY2sgY2FzZSwgeW91IGNvcHkgdGhlIGdpdmVuIGFtb3VudCBvZiBkYXRhCi0gICAgICAgICg8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+KSBhdCB0aGUgc3BlY2lmaWVkIHBvaW50ZXIKLSAgICAgICAgKDxwYXJhbWV0ZXI+c3JjPC9wYXJhbWV0ZXI+KSB0byB0aGUgc3BlY2lmaWVkIG9mZnNldAotICAgICAgICAoPHBhcmFtZXRlcj5wb3M8L3BhcmFtZXRlcj4pIG9uIHRoZSBoYXJkd2FyZSBidWZmZXIuIFdoZW4KLSAgICAgICAgY29kZWQgbGlrZSBtZW1jcHktbGlrZSB3YXksIHRoZSBjb3B5IHdvdWxkIGJlIGxpa2U6IAotCi0gICAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIG15X21lbWNweShteV9idWZmZXIgKyBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcG9zKSwgc3JjLAotICAgICAgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIGNvdW50KSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEZvciB0aGUgY2FwdHVyZSBkaXJlY3Rpb24sIHlvdSBjb3B5IHRoZSBnaXZlbiBhbW91bnQgb2YKLSAgICAgICAgZGF0YSAoPHBhcmFtZXRlcj5jb3VudDwvcGFyYW1ldGVyPikgYXQgdGhlIHNwZWNpZmllZCBvZmZzZXQKLSAgICAgICAgKDxwYXJhbWV0ZXI+cG9zPC9wYXJhbWV0ZXI+KSBvbiB0aGUgaGFyZHdhcmUgYnVmZmVyIHRvIHRoZQotICAgICAgICBzcGVjaWZpZWQgcG9pbnRlciAoPHBhcmFtZXRlcj5kc3Q8L3BhcmFtZXRlcj4pLiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBteV9tZW1jcHkoZHN0LCBteV9idWZmZXIgKyBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcG9zKSwKLSAgICAgICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBjb3VudCkpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgICAgTm90ZSB0aGF0IGJvdGggdGhlIHBvc2l0aW9uIGFuZCB0aGUgYW1vdW50IG9mIGRhdGEgYXJlIGdpdmVuCi0gICAgICBpbiBmcmFtZXMuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgSW4gdGhlIGNhc2Ugb2Ygbm9uLWludGVybGVhdmVkIHNhbXBsZXMsIHRoZSBpbXBsZW1lbnRhdGlvbgotICAgICAgd2lsbCBiZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkLiAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFlvdSBuZWVkIHRvIGNoZWNrIHRoZSBjaGFubmVsIGFyZ3VtZW50LCBhbmQgaWYgaXQncyAtMSwgY29weQotICAgICAgdGhlIHdob2xlIGNoYW5uZWxzLiBPdGhlcndpc2UsIHlvdSBoYXZlIHRvIGNvcHkgb25seSB0aGUKLSAgICAgIHNwZWNpZmllZCBjaGFubmVsLiBQbGVhc2UgY2hlY2sKLSAgICAgIDxmaWxlbmFtZT5pc2EvZ3VzL2d1c19wY20uYzwvZmlsZW5hbWU+IGFzIGFuIGV4YW1wbGUuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMgYWxzbwotICAgICAgICBpbXBsZW1lbnRlZCBpbiBhIHNpbWlsYXIgd2F5LiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IHNpbGVuY2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgc25kX3BjbV91ZnJhbWVzX3QgcG9zLCBzbmRfcGNtX3VmcmFtZXNfdCBjb3VudCk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSBtZWFuaW5ncyBvZiBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGluIHRoZQotICAgICAgPHN0cnVjdGZpZWxkPmNvcHk8L3N0cnVjdGZpZWxkPiAKLSAgICAgIGNhbGxiYWNrLCBhbHRob3VnaCB0aGVyZSBpcyBubyA8cGFyYW1ldGVyPnNyYy9kc3Q8L3BhcmFtZXRlcj4KLSAgICAgIGFyZ3VtZW50LiBJbiB0aGUgY2FzZSBvZiBpbnRlcmxlYXZlZCBzYW1wbGVzLCB0aGUgY2hhbm5lbAotICAgICAgYXJndW1lbnQgaGFzIG5vIG1lYW5pbmcsIGFzIHdlbGwgYXMgb24KLSAgICAgIDxzdHJ1Y3RmaWVsZD5jb3B5PC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2suICAKLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIFRoZSByb2xlIG9mIDxzdHJ1Y3RmaWVsZD5zaWxlbmNlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgaXMgdG8KLSAgICAgICAgc2V0IHRoZSBnaXZlbiBhbW91bnQgCi0gICAgICAgICg8cGFyYW1ldGVyPmNvdW50PC9wYXJhbWV0ZXI+KSBvZiBzaWxlbmNlIGRhdGEgYXQgdGhlCi0gICAgICAgIHNwZWNpZmllZCBvZmZzZXQgKDxwYXJhbWV0ZXI+cG9zPC9wYXJhbWV0ZXI+KSBvbiB0aGUgaGFyZHdhcmUKLSAgICAgICAgYnVmZmVyLiBTdXBwb3NlIHRoYXQgdGhlIGRhdGEgZm9ybWF0IGlzIHNpZ25lZCAodGhhdCBpcywgdGhlCi0gICAgICAgIHNpbGVudC1kYXRhIGlzIDApLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIHVzaW5nIGEgbWVtc2V0LWxpa2UKLSAgICAgICAgZnVuY3Rpb24gd291bGQgYmUgbGlrZTogCi0KLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgbXlfbWVtY3B5KG15X2J1ZmZlciArIGZyYW1lc190b19ieXRlcyhydW50aW1lLCBwb3MpLCAwLAotICAgICAgICAgICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIGNvdW50KSk7Ci1dXT4KLSAgICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAgIDwvcGFyYT4KLQotICAgICAgPHBhcmE+Ci0gICAgICAgIEluIHRoZSBjYXNlIG9mIG5vbi1pbnRlcmxlYXZlZCBzYW1wbGVzLCBhZ2FpbiwgdGhlCi0gICAgICBpbXBsZW1lbnRhdGlvbiBiZWNvbWVzIGEgYml0IG1vcmUgY29tcGxpY2F0ZWQuIFNlZSwgZm9yIGV4YW1wbGUsCi0gICAgICA8ZmlsZW5hbWU+aXNhL2d1cy9ndXNfcGNtLmM8L2ZpbGVuYW1lPi4gCi0gICAgICA8L3BhcmE+Ci0gICAgPC9zZWN0aW9uPgotCi0gICAgPHNlY3Rpb24gaWQ9ImJ1ZmZlci1hbmQtbWVtb3J5LW5vbi1jb250aWd1b3VzIj4KLSAgICAgIDx0aXRsZT5Ob24tQ29udGlndW91cyBCdWZmZXJzPC90aXRsZT4KLSAgICAgIDxwYXJhPgotICAgICAgICBJZiB5b3VyIGhhcmR3YXJlIHN1cHBvcnRzIHRoZSBwYWdlIHRhYmxlIGFzIGluIGVtdTEwazEgb3IgdGhlCi0gICAgICBidWZmZXIgZGVzY3JpcHRvcnMgYXMgaW4gdmlhODJ4eCwgeW91IGNhbiB1c2UgdGhlIHNjYXR0ZXItZ2F0aGVyCi0gICAgICAoU0cpIERNQS4gQUxTQSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGhhbmRsaW5nIFNHLWJ1ZmZlcnMuCi0gICAgICBUaGUgQVBJIGlzIHByb3ZpZGVkIGluIDxmaWxlbmFtZT4mbHQ7c291bmQvcGNtLmgmZ3Q7PC9maWxlbmFtZT4uIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgRm9yIGNyZWF0aW5nIHRoZSBTRy1idWZmZXIgaGFuZGxlciwgY2FsbAotICAgICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXMoKTwvZnVuY3Rpb24+IG9yCi0gICAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKCk8L2Z1bmN0aW9uPgotICAgICAgICB3aXRoIDxjb25zdGFudD5TTkRSVl9ETUFfVFlQRV9ERVZfU0c8L2NvbnN0YW50PgotCWluIHRoZSBQQ00gY29uc3RydWN0b3IgbGlrZSBvdGhlciBQQ0kgcHJlLWFsbG9jYXRvci4KLSAgICAgICAgWW91IG5lZWQgdG8gcGFzcyA8ZnVuY3Rpb24+c25kX2RtYV9wY2lfZGF0YShwY2kpPC9mdW5jdGlvbj4sCi0gICAgICAgIHdoZXJlIHBjaSBpcyB0aGUgc3RydWN0IDxzdHJ1Y3RuYW1lPnBjaV9kZXY8L3N0cnVjdG5hbWU+IHBvaW50ZXIKLSAgICAgICAgb2YgdGhlIGNoaXAgYXMgd2VsbC4KLSAgICAgICAgVGhlIDx0eXBlPnN0cnVjdCBzbmRfc2dfYnVmPC90eXBlPiBpbnN0YW5jZSBpcyBjcmVhdGVkIGFzCi0gICAgICAgIHN1YnN0cmVhbS0mZ3Q7ZG1hX3ByaXZhdGUuIFlvdSBjYW4gY2FzdAotICAgICAgICB0aGUgcG9pbnRlciBsaWtlOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdHJ1Y3Qgc25kX3NnX2J1ZiAqc2didWYgPSAoc3RydWN0IHNuZF9zZ19idWYgKilzdWJzdHJlYW0tPmRtYV9wcml2YXRlOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGVuIGNhbGwgPGZ1bmN0aW9uPnNuZF9wY21fbGliX21hbGxvY19wYWdlcygpPC9mdW5jdGlvbj4KLSAgICAgIGluIHRoZSA8c3RydWN0ZmllbGQ+aHdfcGFyYW1zPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sKLSAgICAgIGFzIHdlbGwgYXMgaW4gdGhlIGNhc2Ugb2Ygbm9ybWFsIFBDSSBidWZmZXIuCi0gICAgICBUaGUgU0ctYnVmZmVyIGhhbmRsZXIgd2lsbCBhbGxvY2F0ZSB0aGUgbm9uLWNvbnRpZ3VvdXMga2VybmVsCi0gICAgICBwYWdlcyBvZiB0aGUgZ2l2ZW4gc2l6ZSBhbmQgbWFwIHRoZW0gb250byB0aGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMKLSAgICAgIG1lbW9yeS4gIFRoZSB2aXJ0dWFsIHBvaW50ZXIgaXMgYWRkcmVzc2VkIGluIHJ1bnRpbWUtJmd0O2RtYV9hcmVhLgotICAgICAgVGhlIHBoeXNpY2FsIGFkZHJlc3MgKHJ1bnRpbWUtJmd0O2RtYV9hZGRyKSBpcyBzZXQgdG8gemVybywKLSAgICAgIGJlY2F1c2UgdGhlIGJ1ZmZlciBpcyBwaHlzaWNhbGx5IG5vbi1jb250aWdvdXMuCi0gICAgICBUaGUgcGh5c2ljYWwgYWRkcmVzcyB0YWJsZSBpcyBzZXQgdXAgaW4gc2didWYtJmd0O3RhYmxlLgotICAgICAgWW91IGNhbiBnZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXQgYSBjZXJ0YWluIG9mZnNldCB2aWEKLSAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3NnYnVmX2dldF9hZGRyKCk8L2Z1bmN0aW9uPi4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBXaGVuIGEgU0ctaGFuZGxlciBpcyB1c2VkLCB5b3UgbmVlZCB0byBzZXQKLSAgICAgIDxmdW5jdGlvbj5zbmRfcGNtX3NnYnVmX29wc19wYWdlPC9mdW5jdGlvbj4gYXMKLSAgICAgIHRoZSA8c3RydWN0ZmllbGQ+cGFnZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrLgotICAgICAgKFNlZSA8bGluayBsaW5rZW5kPSJwY20taW50ZXJmYWNlLW9wZXJhdG9ycy1wYWdlLWNhbGxiYWNrIj4KLSAgICAgIDxjaXRldGl0bGU+cGFnZSBjYWxsYmFjayBzZWN0aW9uPC9jaXRldGl0bGU+PC9saW5rPi4pCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUbyByZWxlYXNlIHRoZSBkYXRhLCBjYWxsCi0gICAgICA8ZnVuY3Rpb24+c25kX3BjbV9saWJfZnJlZV9wYWdlcygpPC9mdW5jdGlvbj4gaW4gdGhlCi0gICAgICA8c3RydWN0ZmllbGQ+aHdfZnJlZTwvc3RydWN0ZmllbGQ+IGNhbGxiYWNrIGFzIHVzdWFsLgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJidWZmZXItYW5kLW1lbW9yeS12bWFsbG9jZWQiPgotICAgICAgPHRpdGxlPlZtYWxsb2MnZWQgQnVmZmVyczwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSXQncyBwb3NzaWJsZSB0byB1c2UgYSBidWZmZXIgYWxsb2NhdGVkIHZpYQotICAgICAgPGZ1bmN0aW9uPnZtYWxsb2M8L2Z1bmN0aW9uPiwgZm9yIGV4YW1wbGUsIGZvciBhbiBpbnRlcm1lZGlhdGUKLSAgICAgIGJ1ZmZlci4gU2luY2UgdGhlIGFsbG9jYXRlZCBwYWdlcyBhcmUgbm90IGNvbnRpZ3VvdXMsIHlvdSBuZWVkCi0gICAgICB0byBzZXQgdGhlIDxzdHJ1Y3RmaWVsZD5wYWdlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sgdG8gb2J0YWluCi0gICAgICB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhdCBldmVyeSBvZmZzZXQuIAotICAgICAgPC9wYXJhPgotCi0gICAgICA8cGFyYT4KLSAgICAgICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIDxzdHJ1Y3RmaWVsZD5wYWdlPC9zdHJ1Y3RmaWVsZD4gY2FsbGJhY2sKLSAgICAgICAgd291bGQgYmUgbGlrZSB0aGlzOiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotCi0gIC8qIGdldCB0aGUgcGh5c2ljYWwgcGFnZSBwb2ludGVyIG9uIHRoZSBnaXZlbiBvZmZzZXQgKi8KLSAgc3RhdGljIHN0cnVjdCBwYWdlICpteWNoaXBfcGFnZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKLSAgewotICAgICAgICAgIHZvaWQgKnBhZ2VwdHIgPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hcmVhICsgb2Zmc2V0OwotICAgICAgICAgIHJldHVybiB2bWFsbG9jX3RvX3BhZ2UocGFnZXB0cik7Ci0gIH0KLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIFByb2MgSW50ZXJmYWNlICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Y2hhcHRlciBpZD0icHJvYy1pbnRlcmZhY2UiPgotICAgIDx0aXRsZT5Qcm9jIEludGVyZmFjZTwvdGl0bGU+Ci0gICAgPHBhcmE+Ci0gICAgICBBTFNBIHByb3ZpZGVzIGFuIGVhc3kgaW50ZXJmYWNlIGZvciBwcm9jZnMuIFRoZSBwcm9jIGZpbGVzIGFyZQotICAgICAgdmVyeSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gSSByZWNvbW1lbmQgeW91IHNldCB1cCBwcm9jIGZpbGVzIGlmCi0gICAgICB5b3Ugd3JpdGUgYSBkcml2ZXIgYW5kIHdhbnQgdG8gZ2V0IGEgcnVubmluZyBzdGF0dXMgb3IgcmVnaXN0ZXIKLSAgICAgIGR1bXBzLiBUaGUgQVBJIGlzIGZvdW5kIGluCi0gICAgICA8ZmlsZW5hbWU+Jmx0O3NvdW5kL2luZm8uaCZndDs8L2ZpbGVuYW1lPi4gCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBUbyBjcmVhdGUgYSBwcm9jIGZpbGUsIGNhbGwKLSAgICAgIDxmdW5jdGlvbj5zbmRfY2FyZF9wcm9jX25ldygpPC9mdW5jdGlvbj4uIAotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKLSAgaW50IGVyciA9IHNuZF9jYXJkX3Byb2NfbmV3KGNhcmQsICJteS1maWxlIiwgJmVudHJ5KTsKLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLSAgICAgIHdoZXJlIHRoZSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBwcm9jIGZpbGUgdG8gYmUKLSAgICBjcmVhdGVkLiBUaGUgYWJvdmUgZXhhbXBsZSB3aWxsIGNyZWF0ZSBhIGZpbGUKLSAgICA8ZmlsZW5hbWU+bXktZmlsZTwvZmlsZW5hbWU+IHVuZGVyIHRoZSBjYXJkIGRpcmVjdG9yeSwKLSAgICBlLmcuIDxmaWxlbmFtZT4vcHJvYy9hc291bmQvY2FyZDAvbXktZmlsZTwvZmlsZW5hbWU+LiAKLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICBMaWtlIG90aGVyIGNvbXBvbmVudHMsIHRoZSBwcm9jIGVudHJ5IGNyZWF0ZWQgdmlhCi0gICAgPGZ1bmN0aW9uPnNuZF9jYXJkX3Byb2NfbmV3KCk8L2Z1bmN0aW9uPiB3aWxsIGJlIHJlZ2lzdGVyZWQgYW5kCi0gICAgcmVsZWFzZWQgYXV0b21hdGljYWxseSBpbiB0aGUgY2FyZCByZWdpc3RyYXRpb24gYW5kIHJlbGVhc2UKLSAgICBmdW5jdGlvbnMuCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBXaGVuIHRoZSBjcmVhdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGUgZnVuY3Rpb24gc3RvcmVzIGEgbmV3Ci0gICAgaW5zdGFuY2UgaW4gdGhlIHBvaW50ZXIgZ2l2ZW4gaW4gdGhlIHRoaXJkIGFyZ3VtZW50LgotICAgIEl0IGlzIGluaXRpYWxpemVkIGFzIGEgdGV4dCBwcm9jIGZpbGUgZm9yIHJlYWQgb25seS4gIFRvIHVzZQotICAgIHRoaXMgcHJvYyBmaWxlIGFzIGEgcmVhZC1vbmx5IHRleHQgZmlsZSBhcyBpdCBpcywgc2V0IHRoZSByZWFkCi0gICAgY2FsbGJhY2sgd2l0aCBhIHByaXZhdGUgZGF0YSB2aWEgCi0gICAgIDxmdW5jdGlvbj5zbmRfaW5mb19zZXRfdGV4dF9vcHMoKTwvZnVuY3Rpb24+LgotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kX2luZm9fc2V0X3RleHRfb3BzKGVudHJ5LCBjaGlwLCBteV9wcm9jX3JlYWQpOwotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICAKLSAgICB3aGVyZSB0aGUgc2Vjb25kIGFyZ3VtZW50ICg8cGFyYW1ldGVyPmNoaXA8L3BhcmFtZXRlcj4pIGlzIHRoZQotICAgIHByaXZhdGUgZGF0YSB0byBiZSB1c2VkIGluIHRoZSBjYWxsYmFja3MuIFRoZSB0aGlyZCBwYXJhbWV0ZXIKLSAgICBzcGVjaWZpZXMgdGhlIHJlYWQgYnVmZmVyIHNpemUgYW5kIHRoZSBmb3VydGgKLSAgICAoPHBhcmFtZXRlcj5teV9wcm9jX3JlYWQ8L3BhcmFtZXRlcj4pIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2gKLSAgICBpcyBkZWZpbmVkIGxpa2UKLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyB2b2lkIG15X3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKTsKLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgSW4gdGhlIHJlYWQgY2FsbGJhY2ssIHVzZSA8ZnVuY3Rpb24+c25kX2lwcmludGYoKTwvZnVuY3Rpb24+IGZvcgotICAgIG91dHB1dCBzdHJpbmdzLCB3aGljaCB3b3JrcyBqdXN0IGxpa2Ugbm9ybWFsCi0gICAgPGZ1bmN0aW9uPnByaW50ZigpPC9mdW5jdGlvbj4uICBGb3IgZXhhbXBsZSwKLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyB2b2lkIG15X3Byb2NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQotICB7Ci0gICAgICAgICAgc3RydWN0IG15X2NoaXAgKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOwotCi0gICAgICAgICAgc25kX2lwcmludGYoYnVmZmVyLCAiVGhpcyBpcyBteSBjaGlwIVxuIik7Ci0gICAgICAgICAgc25kX2lwcmludGYoYnVmZmVyLCAiUG9ydCA9ICVsZFxuIiwgY2hpcC0+cG9ydCk7Ci0gIH0KLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgVGhlIGZpbGUgcGVybWlzc2lvbnMgY2FuIGJlIGNoYW5nZWQgYWZ0ZXJ3YXJkcy4gIEFzIGRlZmF1bHQsIGl0J3MKLSAgICBzZXQgYXMgcmVhZCBvbmx5IGZvciBhbGwgdXNlcnMuICBJZiB5b3Ugd2FudCB0byBhZGQgd3JpdGUKLSAgICBwZXJtaXNzaW9uIGZvciB0aGUgdXNlciAocm9vdCBhcyBkZWZhdWx0KSwgZG8gYXMgZm9sbG93czoKLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gZW50cnktPm1vZGUgPSBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1I7Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgYW5kIHNldCB0aGUgd3JpdGUgYnVmZmVyIHNpemUgYW5kIHRoZSBjYWxsYmFjawotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgZW50cnktPmMudGV4dC53cml0ZSA9IG15X3Byb2Nfd3JpdGU7Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgRm9yIHRoZSB3cml0ZSBjYWxsYmFjaywgeW91IGNhbiB1c2UKLSAgICA8ZnVuY3Rpb24+c25kX2luZm9fZ2V0X2xpbmUoKTwvZnVuY3Rpb24+IHRvIGdldCBhIHRleHQgbGluZSwgYW5kCi0gICAgPGZ1bmN0aW9uPnNuZF9pbmZvX2dldF9zdHIoKTwvZnVuY3Rpb24+IHRvIHJldHJpZXZlIGEgc3RyaW5nIGZyb20KLSAgICB0aGUgbGluZS4gU29tZSBleGFtcGxlcyBhcmUgZm91bmQgaW4KLSAgICA8ZmlsZW5hbWU+Y29yZS9vc3MvbWl4ZXJfb3NzLmM8L2ZpbGVuYW1lPiwgY29yZS9vc3MvYW5kCi0gICAgPGZpbGVuYW1lPnBjbV9vc3MuYzwvZmlsZW5hbWU+LiAKLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIEZvciBhIHJhdy1kYXRhIHByb2MtZmlsZSwgc2V0IHRoZSBhdHRyaWJ1dGVzIGFzIGZvbGxvd3M6Ci0KLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgc3RydWN0IHNuZF9pbmZvX2VudHJ5X29wcyBteV9maWxlX2lvX29wcyA9IHsKLSAgICAgICAgICAucmVhZCA9IG15X2ZpbGVfaW9fcmVhZCwKLSAgfTsKLQotICBlbnRyeS0+Y29udGVudCA9IFNORFJWX0lORk9fQ09OVEVOVF9EQVRBOwotICBlbnRyeS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKLSAgZW50cnktPmMub3BzID0gJm15X2ZpbGVfaW9fb3BzOwotICBlbnRyeS0+c2l6ZSA9IDQwOTY7Ci0gIGVudHJ5LT5tb2RlID0gU19JRlJFRyB8IFNfSVJVR087Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgVGhlIGNhbGxiYWNrIGlzIG11Y2ggbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoZSB0ZXh0LWZpbGUKLSAgICAgIHZlcnNpb24uIFlvdSBuZWVkIHRvIHVzZSBhIGxvdy1sZXZlbCBJL08gZnVuY3Rpb25zIHN1Y2ggYXMKLSAgICAgIDxmdW5jdGlvbj5jb3B5X2Zyb20vdG9fdXNlcigpPC9mdW5jdGlvbj4gdG8gdHJhbnNmZXIgdGhlCi0gICAgICBkYXRhLgotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGxvbmcgbXlfZmlsZV9pb19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpmaWxlX3ByaXZhdGVfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmaWxlICpmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG9zKQotICB7Ci0gICAgICAgICAgbG9uZyBzaXplID0gY291bnQ7Ci0gICAgICAgICAgaWYgKHBvcyArIHNpemUgPiBsb2NhbF9tYXhfc2l6ZSkKLSAgICAgICAgICAgICAgICAgIHNpemUgPSBsb2NhbF9tYXhfc2l6ZSAtIHBvczsKLSAgICAgICAgICBpZiAoY29weV90b191c2VyKGJ1ZiwgbG9jYWxfZGF0YSArIHBvcywgc2l6ZSkpCi0gICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgICByZXR1cm4gc2l6ZTsKLSAgfQotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICA8L3BhcmE+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBQb3dlciBNYW5hZ2VtZW50ICAtLT4KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotICA8Y2hhcHRlciBpZD0icG93ZXItbWFuYWdlbWVudCI+Ci0gICAgPHRpdGxlPlBvd2VyIE1hbmFnZW1lbnQ8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgSWYgdGhlIGNoaXAgaXMgc3VwcG9zZWQgdG8gd29yayB3aXRoIHN1c3BlbmQvcmVzdW1lCi0gICAgICBmdW5jdGlvbnMsIHlvdSBuZWVkIHRvIGFkZCBwb3dlci1tYW5hZ2VtZW50IGNvZGUgdG8gdGhlCi0gICAgICBkcml2ZXIuIFRoZSBhZGRpdGlvbmFsIGNvZGUgZm9yIHBvd2VyLW1hbmFnZW1lbnQgc2hvdWxkIGJlCi0gICAgICA8ZnVuY3Rpb24+aWZkZWY8L2Z1bmN0aW9uPidlZCB3aXRoCi0gICAgICA8Y29uc3RhbnQ+Q09ORklHX1BNPC9jb25zdGFudD4uIAotICAgIDwvcGFyYT4KLQotCTxwYXJhPgotCUlmIHRoZSBkcml2ZXIgPGVtcGhhc2lzPmZ1bGx5PC9lbXBoYXNpcz4gc3VwcG9ydHMgc3VzcGVuZC9yZXN1bWUKLQl0aGF0IGlzLCB0aGUgZGV2aWNlIGNhbiBiZQotCXByb3Blcmx5IHJlc3VtZWQgdG8gaXRzIHN0YXRlIHdoZW4gc3VzcGVuZCB3YXMgY2FsbGVkLAotCXlvdSBjYW4gc2V0IHRoZSA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUkVTVU1FPC9jb25zdGFudD4gZmxhZwotCWluIHRoZSBwY20gaW5mbyBmaWVsZC4gIFVzdWFsbHksIHRoaXMgaXMgcG9zc2libGUgd2hlbiB0aGUKLQlyZWdpc3RlcnMgb2YgdGhlIGNoaXAgY2FuIGJlIHNhZmVseSBzYXZlZCBhbmQgcmVzdG9yZWQgdG8KLQlSQU0uIElmIHRoaXMgaXMgc2V0LCB0aGUgdHJpZ2dlciBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aAotCTxjb25zdGFudD5TTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU8L2NvbnN0YW50PiBhZnRlciB0aGUgcmVzdW1lCi0JY2FsbGJhY2sgY29tcGxldGVzLiAKLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlFdmVuIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IFBNIGZ1bGx5IGJ1dCAKLQlwYXJ0aWFsIHN1c3BlbmQvcmVzdW1lIGlzIHN0aWxsIHBvc3NpYmxlLCBpdCdzIHN0aWxsIHdvcnRoeSB0bwotCWltcGxlbWVudCBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3MuIEluIHN1Y2ggYSBjYXNlLCBhcHBsaWNhdGlvbnMKLQl3b3VsZCByZXNldCB0aGUgc3RhdHVzIGJ5IGNhbGxpbmcKLQk8ZnVuY3Rpb24+c25kX3BjbV9wcmVwYXJlKCk8L2Z1bmN0aW9uPiBhbmQgcmVzdGFydCB0aGUgc3RyZWFtCi0JYXBwcm9wcmlhdGVseS4gIEhlbmNlLCB5b3UgY2FuIGRlZmluZSBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3MKLQliZWxvdyBidXQgZG9uJ3Qgc2V0IDxjb25zdGFudD5TTkRSVl9QQ01fSU5GT19SRVNVTUU8L2NvbnN0YW50PgotCWluZm8gZmxhZyB0byB0aGUgUENNLgotCTwvcGFyYT4KLQkKLQk8cGFyYT4KLQlOb3RlIHRoYXQgdGhlIHRyaWdnZXIgd2l0aCBTVVNQRU5EIGNhbiBhbHdheXMgYmUgY2FsbGVkIHdoZW4KLQk8ZnVuY3Rpb24+c25kX3BjbV9zdXNwZW5kX2FsbDwvZnVuY3Rpb24+IGlzIGNhbGxlZCwKLQlyZWdhcmRsZXNzIG9mIHRoZSA8Y29uc3RhbnQ+U05EUlZfUENNX0lORk9fUkVTVU1FPC9jb25zdGFudD4gZmxhZy4KLQlUaGUgPGNvbnN0YW50PlJFU1VNRTwvY29uc3RhbnQ+IGZsYWcgYWZmZWN0cyBvbmx5IHRoZSBiZWhhdmlvcgotCW9mIDxmdW5jdGlvbj5zbmRfcGNtX3Jlc3VtZSgpPC9mdW5jdGlvbj4uCi0JKFRodXMsIGluIHRoZW9yeSwKLQk8Y29uc3RhbnQ+U05EUlZfUENNX1RSSUdHRVJfUkVTVU1FPC9jb25zdGFudD4gaXNuJ3QgbmVlZGVkCi0JdG8gYmUgaGFuZGxlZCBpbiB0aGUgdHJpZ2dlciBjYWxsYmFjayB3aGVuIG5vCi0JPGNvbnN0YW50PlNORFJWX1BDTV9JTkZPX1JFU1VNRTwvY29uc3RhbnQ+IGZsYWcgaXMgc2V0LiAgQnV0LAotCWl0J3MgYmV0dGVyIHRvIGtlZXAgaXQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4pCi0JPC9wYXJhPgotICAgIDxwYXJhPgotICAgICAgSW4gdGhlIGVhcmxpZXIgdmVyc2lvbiBvZiBBTFNBIGRyaXZlcnMsIGEgY29tbW9uCi0gICAgICBwb3dlci1tYW5hZ2VtZW50IGxheWVyIHdhcyBwcm92aWRlZCwgYnV0IGl0IGhhcyBiZWVuIHJlbW92ZWQuCi0gICAgICBUaGUgZHJpdmVyIG5lZWRzIHRvIGRlZmluZSB0aGUgc3VzcGVuZC9yZXN1bWUgaG9va3MgYWNjb3JkaW5nIHRvCi0gICAgICB0aGUgYnVzIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkIHRvLiAgSW4gdGhlIGNhc2Ugb2YgUENJIGRyaXZlcnMsIHRoZQotICAgICAgY2FsbGJhY2tzIGxvb2sgbGlrZSBiZWxvdzoKLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gICNpZmRlZiBDT05GSUdfUE0KLSAgc3RhdGljIGludCBzbmRfbXlfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi0gIHsKLSAgICAgICAgICAuLi4uIC8qIGRvIHRoaW5ncyBmb3Igc3VzcGVuZCAqLwotICAgICAgICAgIHJldHVybiAwOwotICB9Ci0gIHN0YXRpYyBpbnQgc25kX215X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpKQotICB7Ci0gICAgICAgICAgLi4uLiAvKiBkbyB0aGluZ3MgZm9yIHN1c3BlbmQgKi8KLSAgICAgICAgICByZXR1cm4gMDsKLSAgfQotICAjZW5kaWYKLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBUaGUgc2NoZW1lIG9mIHRoZSByZWFsIHN1c3BlbmQgam9iIGlzIGFzIGZvbGxvd3MuCi0KLSAgICAgIDxvcmRlcmVkbGlzdD4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlJldHJpZXZlIHRoZSBjYXJkIGFuZCB0aGUgY2hpcCBkYXRhLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Q2FsbCA8ZnVuY3Rpb24+c25kX3Bvd2VyX2NoYW5nZV9zdGF0ZSgpPC9mdW5jdGlvbj4gd2l0aAotCSAgPGNvbnN0YW50PlNORFJWX0NUTF9QT1dFUl9EM2hvdDwvY29uc3RhbnQ+IHRvIGNoYW5nZSB0aGUKLQkgIHBvd2VyIHN0YXR1cy48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkNhbGwgPGZ1bmN0aW9uPnNuZF9wY21fc3VzcGVuZF9hbGwoKTwvZnVuY3Rpb24+IHRvIHN1c3BlbmQgdGhlIHJ1bm5pbmcgUENNIHN0cmVhbXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JPGxpc3RpdGVtPjxwYXJhPklmIEFDOTcgY29kZWNzIGFyZSB1c2VkLCBjYWxsCi0JPGZ1bmN0aW9uPnNuZF9hYzk3X3N1c3BlbmQoKTwvZnVuY3Rpb24+IGZvciBlYWNoIGNvZGVjLjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgICA8bGlzdGl0ZW0+PHBhcmE+U2F2ZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIGlmIG5lY2Vzc2FyeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPlN0b3AgdGhlIGhhcmR3YXJlIGlmIG5lY2Vzc2FyeS48L3BhcmE+PC9saXN0aXRlbT4KLSAgICAgICAgPGxpc3RpdGVtPjxwYXJhPkRpc2FibGUgdGhlIFBDSSBkZXZpY2UgYnkgY2FsbGluZwotCSAgPGZ1bmN0aW9uPnBjaV9kaXNhYmxlX2RldmljZSgpPC9mdW5jdGlvbj4uICBUaGVuLCBjYWxsCi0gICAgICAgICAgPGZ1bmN0aW9uPnBjaV9zYXZlX3N0YXRlKCk8L2Z1bmN0aW9uPiBhdCBsYXN0LjwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPC9vcmRlcmVkbGlzdD4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIEEgdHlwaWNhbCBjb2RlIHdvdWxkIGJlIGxpa2U6Ci0KLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IG15Y2hpcF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLSAgewotICAgICAgICAgIC8qICgxKSAqLwotICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHBjaV9nZXRfZHJ2ZGF0YShwY2kpOwotICAgICAgICAgIHN0cnVjdCBteWNoaXAgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0gICAgICAgICAgLyogKDIpICovCi0gICAgICAgICAgc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwotICAgICAgICAgIC8qICgzKSAqLwotICAgICAgICAgIHNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKLSAgICAgICAgICAvKiAoNCkgKi8KLSAgICAgICAgICBzbmRfYWM5N19zdXNwZW5kKGNoaXAtPmFjOTcpOwotICAgICAgICAgIC8qICg1KSAqLwotICAgICAgICAgIHNuZF9teWNoaXBfc2F2ZV9yZWdpc3RlcnMoY2hpcCk7Ci0gICAgICAgICAgLyogKDYpICovCi0gICAgICAgICAgc25kX215Y2hpcF9zdG9wX2hhcmR3YXJlKGNoaXApOwotICAgICAgICAgIC8qICg3KSAqLwotICAgICAgICAgIHBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotICAgICAgICAgIHBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0gICAgICAgICAgcmV0dXJuIDA7Ci0gIH0KLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgVGhlIHNjaGVtZSBvZiB0aGUgcmVhbCByZXN1bWUgam9iIGlzIGFzIGZvbGxvd3MuCi0KLSAgICA8b3JkZXJlZGxpc3Q+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPlJldHJpZXZlIHRoZSBjYXJkIGFuZCB0aGUgY2hpcCBkYXRhLjwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5TZXQgdXAgUENJLiBGaXJzdCwgY2FsbCA8ZnVuY3Rpb24+cGNpX3Jlc3RvcmVfc3RhdGUoKTwvZnVuY3Rpb24+LgotICAgIAlUaGVuIGVuYWJsZSB0aGUgcGNpIGRldmljZSBhZ2FpbiBieSBjYWxsaW5nIDxmdW5jdGlvbj5wY2lfZW5hYmxlX2RldmljZSgpPC9mdW5jdGlvbj4uCi0JQ2FsbCA8ZnVuY3Rpb24+cGNpX3NldF9tYXN0ZXIoKTwvZnVuY3Rpb24+IGlmIG5lY2Vzc2FyeSwgdG9vLjwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5SZS1pbml0aWFsaXplIHRoZSBjaGlwLjwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5SZXN0b3JlIHRoZSBzYXZlZCByZWdpc3RlcnMgaWYgbmVjZXNzYXJ5LjwvcGFyYT48L2xpc3RpdGVtPgotICAgIDxsaXN0aXRlbT48cGFyYT5SZXN1bWUgdGhlIG1peGVyLCBlLmcuIGNhbGxpbmcKLSAgICA8ZnVuY3Rpb24+c25kX2FjOTdfcmVzdW1lKCk8L2Z1bmN0aW9uPi48L3BhcmE+PC9saXN0aXRlbT4KLSAgICA8bGlzdGl0ZW0+PHBhcmE+UmVzdGFydCB0aGUgaGFyZHdhcmUgKGlmIGFueSkuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPGxpc3RpdGVtPjxwYXJhPkNhbGwgPGZ1bmN0aW9uPnNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoKTwvZnVuY3Rpb24+IHdpdGgKLQk8Y29uc3RhbnQ+U05EUlZfQ1RMX1BPV0VSX0QwPC9jb25zdGFudD4gdG8gbm90aWZ5IHRoZSBwcm9jZXNzZXMuPC9wYXJhPjwvbGlzdGl0ZW0+Ci0gICAgPC9vcmRlcmVkbGlzdD4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICBBIHR5cGljYWwgY29kZSB3b3VsZCBiZSBsaWtlOgotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc3RhdGljIGludCBteWNoaXBfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwY2kpCi0gIHsKLSAgICAgICAgICAvKiAoMSkgKi8KLSAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEocGNpKTsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotICAgICAgICAgIC8qICgyKSAqLwotICAgICAgICAgIHBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0gICAgICAgICAgcGNpX2VuYWJsZV9kZXZpY2UocGNpKTsKLSAgICAgICAgICBwY2lfc2V0X21hc3RlcihwY2kpOwotICAgICAgICAgIC8qICgzKSAqLwotICAgICAgICAgIHNuZF9teWNoaXBfcmVpbml0X2NoaXAoY2hpcCk7Ci0gICAgICAgICAgLyogKDQpICovCi0gICAgICAgICAgc25kX215Y2hpcF9yZXN0b3JlX3JlZ2lzdGVycyhjaGlwKTsKLSAgICAgICAgICAvKiAoNSkgKi8KLSAgICAgICAgICBzbmRfYWM5N19yZXN1bWUoY2hpcC0+YWM5Nyk7Ci0gICAgICAgICAgLyogKDYpICovCi0gICAgICAgICAgc25kX215Y2hpcF9yZXN0YXJ0X2NoaXAoY2hpcCk7Ci0gICAgICAgICAgLyogKDcpICovCi0gICAgICAgICAgc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOwotICAgICAgICAgIHJldHVybiAwOwotICB9Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotCUFzIHNob3duIGluIHRoZSBhYm92ZSwgaXQncyBiZXR0ZXIgdG8gc2F2ZSByZWdpc3RlcnMgYWZ0ZXIKLQlzdXNwZW5kaW5nIHRoZSBQQ00gb3BlcmF0aW9ucyB2aWEKLQk8ZnVuY3Rpb24+c25kX3BjbV9zdXNwZW5kX2FsbCgpPC9mdW5jdGlvbj4gb3IKLQk8ZnVuY3Rpb24+c25kX3BjbV9zdXNwZW5kKCk8L2Z1bmN0aW9uPi4gIEl0IG1lYW5zIHRoYXQgdGhlIFBDTQotCXN0cmVhbXMgYXJlIGFscmVhZHkgc3RvcHBwZWQgd2hlbiB0aGUgcmVnaXN0ZXIgc25hcHNob3QgaXMKLQl0YWtlbi4gIEJ1dCwgcmVtZW1iZXIgdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byByZXN0YXJ0IHRoZSBQQ00KLQlzdHJlYW0gaW4gdGhlIHJlc3VtZSBjYWxsYmFjay4gSXQnbGwgYmUgcmVzdGFydGVkIHZpYSAKLQl0cmlnZ2VyIGNhbGwgd2l0aCA8Y29uc3RhbnQ+U05EUlZfUENNX1RSSUdHRVJfUkVTVU1FPC9jb25zdGFudD4KLQl3aGVuIG5lY2Vzc2FyeS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIE9LLCB3ZSBoYXZlIGFsbCBjYWxsYmFja3Mgbm93LiBMZXQncyBzZXQgdGhlbSB1cC4gSW4gdGhlCi0gICAgICBpbml0aWFsaXphdGlvbiBvZiB0aGUgY2FyZCwgbWFrZSBzdXJlIHRoYXQgeW91IGNhbiBnZXQgdGhlIGNoaXAKLSAgICAgIGRhdGEgZnJvbSB0aGUgY2FyZCBpbnN0YW5jZSwgdHlwaWNhbGx5IHZpYQotICAgICAgPHN0cnVjdGZpZWxkPnByaXZhdGVfZGF0YTwvc3RydWN0ZmllbGQ+IGZpZWxkLCBpbiBjYXNlIHlvdQotICAgICAgY3JlYXRlZCB0aGUgY2hpcCBkYXRhIGluZGl2aWR1YWxseS4KLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9teWNoaXBfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQotICB7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIHN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKLSAgICAgICAgICBzdHJ1Y3QgbXljaGlwICpjaGlwOwotICAgICAgICAgIC4uLi4KLSAgICAgICAgICBjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCBOVUxMKTsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIGNhcmQtPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0gICAgICAgICAgLi4uLgotICB9Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0JV2hlbiB5b3UgY3JlYXRlZCB0aGUgY2hpcCBkYXRhIHdpdGgKLQk8ZnVuY3Rpb24+c25kX2NhcmRfbmV3KCk8L2Z1bmN0aW9uPiwgaXQncyBhbnl3YXkgYWNjZXNzaWJsZQotCXZpYSA8c3RydWN0ZmllbGQ+cHJpdmF0ZV9kYXRhPC9zdHJ1Y3RmaWVsZD4gZmllbGQuCi0KLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXljaGlwX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKLSAgewotICAgICAgICAgIC4uLi4KLSAgICAgICAgICBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0gICAgICAgICAgc3RydWN0IG15Y2hpcCAqY2hpcDsKLSAgICAgICAgICAuLi4uCi0gICAgICAgICAgY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbXljaGlwKSk7Ci0gICAgICAgICAgLi4uLgotICAgICAgICAgIGNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0gICAgICAgICAgLi4uLgotICB9Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBJZiB5b3UgbmVlZCBhIHNwYWNlIHRvIHNhdmUgdGhlIHJlZ2lzdGVycywgYWxsb2NhdGUgdGhlCi0JYnVmZmVyIGZvciBpdCBoZXJlLCB0b28sIHNpbmNlIGl0IHdvdWxkIGJlIGZhdGFsCi0gICAgaWYgeW91IGNhbm5vdCBhbGxvY2F0ZSBhIG1lbW9yeSBpbiB0aGUgc3VzcGVuZCBwaGFzZS4KLSAgICBUaGUgYWxsb2NhdGVkIGJ1ZmZlciBzaG91bGQgYmUgcmVsZWFzZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcKLSAgICBkZXN0cnVjdG9yLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgQW5kIG5leHQsIHNldCBzdXNwZW5kL3Jlc3VtZSBjYWxsYmFja3MgdG8gdGhlIHBjaV9kcml2ZXIuCi0KLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZHJpdmVyID0gewotICAgICAgICAgIC5uYW1lID0gIk15IENoaXAiLAotICAgICAgICAgIC5pZF90YWJsZSA9IHNuZF9teV9pZHMsCi0gICAgICAgICAgLnByb2JlID0gc25kX215X3Byb2JlLAotICAgICAgICAgIC5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfbXlfcmVtb3ZlKSwKLSAgI2lmZGVmIENPTkZJR19QTQotICAgICAgICAgIC5zdXNwZW5kID0gc25kX215X3N1c3BlbmQsCi0gICAgICAgICAgLnJlc3VtZSA9IHNuZF9teV9yZXN1bWUsCi0gICNlbmRpZgotICB9OwotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L2luZm9ybWFsZXhhbXBsZT4KLSAgICA8L3BhcmE+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBNb2R1bGUgUGFyYW1ldGVycyAgLS0+Ci08IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLSAgPGNoYXB0ZXIgaWQ9Im1vZHVsZS1wYXJhbWV0ZXJzIj4KLSAgICA8dGl0bGU+TW9kdWxlIFBhcmFtZXRlcnM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgVGhlcmUgYXJlIHN0YW5kYXJkIG1vZHVsZSBvcHRpb25zIGZvciBBTFNBLiBBdCBsZWFzdCwgZWFjaAotICAgICAgbW9kdWxlIHNob3VsZCBoYXZlIHRoZSA8cGFyYW1ldGVyPmluZGV4PC9wYXJhbWV0ZXI+LAotICAgICAgPHBhcmFtZXRlcj5pZDwvcGFyYW1ldGVyPiBhbmQgPHBhcmFtZXRlcj5lbmFibGU8L3BhcmFtZXRlcj4KLSAgICAgIG9wdGlvbnMuIAotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgSWYgdGhlIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBjYXJkcyAodXN1YWxseSB1cCB0bwotICAgICAgOCA9IDxjb25zdGFudD5TTkRSVl9DQVJEUzwvY29uc3RhbnQ+IGNhcmRzKSwgdGhleSBzaG91bGQgYmUKLSAgICAgIGFycmF5cy4gVGhlIGRlZmF1bHQgaW5pdGlhbCB2YWx1ZXMgYXJlIGRlZmluZWQgYWxyZWFkeSBhcwotICAgICAgY29uc3RhbnRzIGZvciBlYXNpZXIgcHJvZ3JhbW1pbmc6Ci0KLSAgICAgIDxpbmZvcm1hbGV4YW1wbGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwotICBzdGF0aWMgY2hhciAqaWRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9TVFI7Ci0gIHN0YXRpYyBpbnQgZW5hYmxlW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfRU5BQkxFX1BOUDsKLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBJZiB0aGUgbW9kdWxlIHN1cHBvcnRzIG9ubHkgYSBzaW5nbGUgY2FyZCwgdGhleSBjb3VsZCBiZSBzaW5nbGUKLSAgICB2YXJpYWJsZXMsIGluc3RlYWQuICA8cGFyYW1ldGVyPmVuYWJsZTwvcGFyYW1ldGVyPiBvcHRpb24gaXMgbm90Ci0gICAgYWx3YXlzIG5lY2Vzc2FyeSBpbiB0aGlzIGNhc2UsIGJ1dCBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSBhCi0gICAgZHVtbXkgb3B0aW9uIGZvciBjb21wYXRpYmlsaXR5LgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICAgVGhlIG1vZHVsZSBwYXJhbWV0ZXJzIG11c3QgYmUgZGVjbGFyZWQgd2l0aCB0aGUgc3RhbmRhcmQKLSAgICA8ZnVuY3Rpb24+bW9kdWxlX3BhcmFtKCkoKTwvZnVuY3Rpb24+LAotICAgIDxmdW5jdGlvbj5tb2R1bGVfcGFyYW1fYXJyYXkoKSgpPC9mdW5jdGlvbj4gYW5kCi0gICAgPGZ1bmN0aW9uPk1PRFVMRV9QQVJNX0RFU0MoKTwvZnVuY3Rpb24+IG1hY3Jvcy4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KLSAgICAgIFRoZSB0eXBpY2FsIGNvZGluZyB3b3VsZCBiZSBsaWtlIGJlbG93OgotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgI2RlZmluZSBDQVJEX05BTUUgIk15IENoaXAiCi0KLSAgbW9kdWxlX3BhcmFtX2FycmF5KGluZGV4LCBpbnQsIE5VTEwsIDA0NDQpOwotICBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yICIgQ0FSRF9OQU1FICIgc291bmRjYXJkLiIpOwotICBtb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKLSAgTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgIiBDQVJEX05BTUUgIiBzb3VuZGNhcmQuIik7Ci0gIG1vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOwotICBNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZSwgIkVuYWJsZSAiIENBUkRfTkFNRSAiIHNvdW5kY2FyZC4iKTsKLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgPC9wYXJhPgotCi0gICAgPHBhcmE+Ci0gICAgICBBbHNvLCBkb24ndCBmb3JnZXQgdG8gZGVmaW5lIHRoZSBtb2R1bGUgZGVzY3JpcHRpb24sIGNsYXNzZXMsCi0gICAgICBsaWNlbnNlIGFuZCBkZXZpY2VzLiBFc3BlY2lhbGx5LCB0aGUgcmVjZW50IG1vZHByb2JlIHJlcXVpcmVzIHRvCi0gICAgICBkZWZpbmUgdGhlIG1vZHVsZSBsaWNlbnNlIGFzIEdQTCwgZXRjLiwgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gaXMKLSAgICAgIHNob3duIGFzIDxxdW90ZT50YWludGVkPC9xdW90ZT4uIAotCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgTU9EVUxFX0RFU0NSSVBUSU9OKCJNeSBDaGlwIik7Ci0gIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLSAgTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7VmVuZG9yLE15IENoaXAgTmFtZX19Iik7Ci1dXT4KLSAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotICAgIDwvcGFyYT4KLQotICA8L2NoYXB0ZXI+Ci0KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIEhvdyBUbyBQdXQgWW91ciBEcml2ZXIgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJob3ctdG8tcHV0LXlvdXItZHJpdmVyIj4KLSAgICA8dGl0bGU+SG93IFRvIFB1dCBZb3VyIERyaXZlciBJbnRvIEFMU0EgVHJlZTwvdGl0bGU+Ci0JPHNlY3Rpb24+Ci0JPHRpdGxlPkdlbmVyYWw8L3RpdGxlPgotCTxwYXJhPgotCVNvIGZhciwgeW91J3ZlIGxlYXJuZWQgaG93IHRvIHdyaXRlIHRoZSBkcml2ZXIgY29kZXMuCi0JQW5kIHlvdSBtaWdodCBoYXZlIGEgcXVlc3Rpb24gbm93OiBob3cgdG8gcHV0IG15IG93bgotCWRyaXZlciBpbnRvIHRoZSBBTFNBIGRyaXZlciB0cmVlPwotCUhlcmUgKGZpbmFsbHkgOikgdGhlIHN0YW5kYXJkIHByb2NlZHVyZSBpcyBkZXNjcmliZWQgYnJpZWZseS4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlTdXBwb3NlIHRoYXQgeW91IGNyZWF0ZSBhIG5ldyBQQ0kgZHJpdmVyIGZvciB0aGUgY2FyZAotCTxxdW90ZT54eXo8L3F1b3RlPi4gIFRoZSBjYXJkIG1vZHVsZSBuYW1lIHdvdWxkIGJlCi0Jc25kLXh5ei4gIFRoZSBuZXcgZHJpdmVyIGlzIHVzdWFsbHkgcHV0IGludG8gdGhlIGFsc2EtZHJpdmVyCi0JdHJlZSwgPGZpbGVuYW1lPmFsc2EtZHJpdmVyL3BjaTwvZmlsZW5hbWU+IGRpcmVjdG9yeSBpbgotCXRoZSBjYXNlIG9mIFBDSSBjYXJkcy4KLQlUaGVuIHRoZSBkcml2ZXIgaXMgZXZhbHVhdGVkLCBhdWRpdGVkIGFuZCB0ZXN0ZWQKLQlieSBkZXZlbG9wZXJzIGFuZCB1c2Vycy4gIEFmdGVyIGEgY2VydGFpbiB0aW1lLCB0aGUgZHJpdmVyCi0Jd2lsbCBnbyB0byB0aGUgYWxzYS1rZXJuZWwgdHJlZSAodG8gdGhlIGNvcnJlc3BvbmRpbmcgZGlyZWN0b3J5LAotCXN1Y2ggYXMgPGZpbGVuYW1lPmFsc2Eta2VybmVsL3BjaTwvZmlsZW5hbWU+KSBhbmQgZXZlbnR1YWxseQotIAl3aWxsIGJlIGludGVncmF0ZWQgaW50byB0aGUgTGludXggMi42IHRyZWUgKHRoZSBkaXJlY3Rvcnkgd291bGQgYmUKLQk8ZmlsZW5hbWU+bGludXgvc291bmQvcGNpPC9maWxlbmFtZT4pLgotCTwvcGFyYT4KLQotCTxwYXJhPgotCUluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMsIHRoZSBkcml2ZXIgY29kZSBpcyBzdXBwb3NlZAotCXRvIGJlIHB1dCBpbnRvIGFsc2EtZHJpdmVyIHRyZWUuIFRoZSB0d28gY2FzZXMgYXJlIGNvdmVyZWQ6Ci0JYSBkcml2ZXIgY29uc2lzdGluZyBvZiBhIHNpbmdsZSBzb3VyY2UgZmlsZSBhbmQgb25lIGNvbnNpc3RpbmcKLQlvZiBzZXZlcmFsIHNvdXJjZSBmaWxlcy4KLQk8L3BhcmE+Ci0JPC9zZWN0aW9uPgotCi0JPHNlY3Rpb24+Ci0JPHRpdGxlPkRyaXZlciB3aXRoIEEgU2luZ2xlIFNvdXJjZSBGaWxlPC90aXRsZT4KLQk8cGFyYT4KLQk8b3JkZXJlZGxpc3Q+Ci0JPGxpc3RpdGVtPgotCTxwYXJhPgotCU1vZGlmeSBhbHNhLWRyaXZlci9wY2kvTWFrZWZpbGUKLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlTdXBwb3NlIHlvdSBoYXZlIGEgZmlsZSB4eXouYy4gIEFkZCB0aGUgZm9sbG93aW5nCi0JdHdvIGxpbmVzCi0gICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgc25kLXh5ei1vYmpzIDo9IHh5ei5vCi0gIG9iai0kKENPTkZJR19TTkRfWFlaKSArPSBzbmQteHl6Lm8KLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0KLQk8bGlzdGl0ZW0+Ci0JPHBhcmE+Ci0JQ3JlYXRlIHRoZSBLY29uZmlnIGVudHJ5Ci0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JQWRkIHRoZSBuZXcgZW50cnkgb2YgS2NvbmZpZyBmb3IgeW91ciB4eXogZHJpdmVyLgotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIGNvbmZpZyBTTkRfWFlaCi0gICAgICAgICAgdHJpc3RhdGUgIkZvb2JhciBYWVoiCi0gICAgICAgICAgZGVwZW5kcyBvbiBTTkQKLSAgICAgICAgICBzZWxlY3QgU05EX1BDTQotICAgICAgICAgIGhlbHAKLSAgICAgICAgICAgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBGb29iYXIgWFlaIHNvdW5kY2FyZC4KLQotICAgICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQotICAgICAgICAgICAgd2lsbCBiZSBjYWxsZWQgc25kLXh5ei4KLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0KLQl0aGUgbGluZSwgc2VsZWN0IFNORF9QQ00sIHNwZWNpZmllcyB0aGF0IHRoZSBkcml2ZXIgeHl6IHN1cHBvcnRzCi0JUENNLiAgSW4gYWRkaXRpb24gdG8gU05EX1BDTSwgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzIGFyZQotCXN1cHBvcnRlZCBmb3Igc2VsZWN0IGNvbW1hbmQ6Ci0JU05EX1JBV01JREksIFNORF9USU1FUiwgU05EX0hXREVQLCBTTkRfTVBVNDAxX1VBUlQsCi0JU05EX09QTDNfTElCLCBTTkRfT1BMNF9MSUIsIFNORF9WWF9MSUIsIFNORF9BQzk3X0NPREVDLgotCUFkZCB0aGUgc2VsZWN0IGNvbW1hbmQgZm9yIGVhY2ggc3VwcG9ydGVkIGNvbXBvbmVudC4KLQk8L3BhcmE+Ci0KLQk8cGFyYT4KLQlOb3RlIHRoYXQgc29tZSBzZWxlY3Rpb25zIGltcGx5IHRoZSBsb3dsZXZlbCBzZWxlY3Rpb25zLgotCUZvciBleGFtcGxlLCBQQ00gaW5jbHVkZXMgVElNRVIsIE1QVTQwMV9VQVJUIGluY2x1ZGVzIFJBV01JREksCi0JQUM5N19DT0RFQyBpbmNsdWRlcyBQQ00sIGFuZCBPUEwzX0xJQiBpbmNsdWRlcyBIV0RFUC4KLQlZb3UgZG9uJ3QgbmVlZCB0byBnaXZlIHRoZSBsb3dsZXZlbCBzZWxlY3Rpb25zIGFnYWluLgotCTwvcGFyYT4KLQotCTxwYXJhPgotCUZvciB0aGUgZGV0YWlscyBvZiBLY29uZmlnIHNjcmlwdCwgcmVmZXIgdG8gdGhlIGtidWlsZAotCWRvY3VtZW50YXRpb24uCi0JPC9wYXJhPgotCi0JPC9saXN0aXRlbT4KLQotCTxsaXN0aXRlbT4KLQk8cGFyYT4KLQlSdW4gY3ZzY29tcGlsZSBzY3JpcHQgdG8gcmUtZ2VuZXJhdGUgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYW5kCi0JYnVpbGQgdGhlIHdob2xlIHN0dWZmIGFnYWluLgotCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCTwvb3JkZXJlZGxpc3Q+Ci0JPC9wYXJhPgotCTwvc2VjdGlvbj4KLQotCTxzZWN0aW9uPgotCTx0aXRsZT5Ecml2ZXJzIHdpdGggU2V2ZXJhbCBTb3VyY2UgRmlsZXM8L3RpdGxlPgotCTxwYXJhPgotCVN1cHBvc2UgdGhhdCB0aGUgZHJpdmVyIHNuZC14eXogaGF2ZSBzZXZlcmFsIHNvdXJjZSBmaWxlcy4KLQlUaGV5IGFyZSBsb2NhdGVkIGluIHRoZSBuZXcgc3ViZGlyZWN0b3J5LAotCXBjaS94eXouCi0KLQk8b3JkZXJlZGxpc3Q+Ci0JPGxpc3RpdGVtPgotCTxwYXJhPgotCUFkZCBhIG5ldyBkaXJlY3RvcnkgKDxmaWxlbmFtZT54eXo8L2ZpbGVuYW1lPikgaW4KLQk8ZmlsZW5hbWU+YWxzYS1kcml2ZXIvcGNpL01ha2VmaWxlPC9maWxlbmFtZT4gYXMgYmVsb3cKLQotICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgPHByb2dyYW1saXN0aW5nPgotPCFbQ0RBVEFbCi0gIG9iai0kKENPTkZJR19TTkQpICs9IHh5ei8KLV1dPgotICAgICAgICA8L3Byb2dyYW1saXN0aW5nPgotICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0KLQk8bGlzdGl0ZW0+Ci0JPHBhcmE+Ci0JVW5kZXIgdGhlIGRpcmVjdG9yeSA8ZmlsZW5hbWU+eHl6PC9maWxlbmFtZT4sIGNyZWF0ZSBhIE1ha2VmaWxlCi0KLSAgICAgIDxleGFtcGxlPgotCTx0aXRsZT5TYW1wbGUgTWFrZWZpbGUgZm9yIGEgZHJpdmVyIHh5ejwvdGl0bGU+Ci0gICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBpZm5kZWYgU05EX1RPUERJUgotICBTTkRfVE9QRElSPS4uLy4uCi0gIGVuZGlmCi0KLSAgaW5jbHVkZSAkKFNORF9UT1BESVIpL3RvcGxldmVsLmNvbmZpZwotICBpbmNsdWRlICQoU05EX1RPUERJUikvTWFrZWZpbGUuY29uZgotCi0gIHNuZC14eXotb2JqcyA6PSB4eXoubyBhYmMubyBkZWYubwotCi0gIG9iai0kKENPTkZJR19TTkRfWFlaKSArPSBzbmQteHl6Lm8KLQotICBpbmNsdWRlICQoU05EX1RPUERJUikvUnVsZXMubWFrZQotXV0+Ci0gICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICA8L2V4YW1wbGU+Ci0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0KLQk8bGlzdGl0ZW0+Ci0JPHBhcmE+Ci0JQ3JlYXRlIHRoZSBLY29uZmlnIGVudHJ5Ci0JPC9wYXJhPgotCi0JPHBhcmE+Ci0JVGhpcyBwcm9jZWR1cmUgaXMgYXMgc2FtZSBhcyBpbiB0aGUgbGFzdCBzZWN0aW9uLgotCTwvcGFyYT4KLQk8L2xpc3RpdGVtPgotCi0JPGxpc3RpdGVtPgotCTxwYXJhPgotCVJ1biBjdnNjb21waWxlIHNjcmlwdCB0byByZS1nZW5lcmF0ZSB0aGUgY29uZmlndXJlIHNjcmlwdCBhbmQKLQlidWlsZCB0aGUgd2hvbGUgc3R1ZmYgYWdhaW4uCi0JPC9wYXJhPgotCTwvbGlzdGl0ZW0+Ci0JPC9vcmRlcmVkbGlzdD4KLQk8L3BhcmE+Ci0JPC9zZWN0aW9uPgotCi0gIDwvY2hhcHRlcj4KLQotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci08IS0tIFVzZWZ1bCBGdW5jdGlvbnMgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJ1c2VmdWwtZnVuY3Rpb25zIj4KLSAgICA8dGl0bGU+VXNlZnVsIEZ1bmN0aW9uczwvdGl0bGU+Ci0KLSAgICA8c2VjdGlvbiBpZD0idXNlZnVsLWZ1bmN0aW9ucy1zbmQtcHJpbnRrIj4KLSAgICAgIDx0aXRsZT48ZnVuY3Rpb24+c25kX3ByaW50aygpPC9mdW5jdGlvbj4gYW5kIGZyaWVuZHM8L3RpdGxlPgotICAgICAgPHBhcmE+Ci0gICAgICAgIEFMU0EgcHJvdmlkZXMgYSB2ZXJib3NlIHZlcnNpb24gb2YgdGhlCi0gICAgICA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPiBmdW5jdGlvbi4gSWYgYSBrZXJuZWwgY29uZmlnCi0gICAgICA8Y29uc3RhbnQ+Q09ORklHX1NORF9WRVJCT1NFX1BSSU5USzwvY29uc3RhbnQ+IGlzIHNldCwgdGhpcwotICAgICAgZnVuY3Rpb24gcHJpbnRzIHRoZSBnaXZlbiBtZXNzYWdlIHRvZ2V0aGVyIHdpdGggdGhlIGZpbGUgbmFtZQotICAgICAgYW5kIHRoZSBsaW5lIG9mIHRoZSBjYWxsZXIuIFRoZSA8Y29uc3RhbnQ+S0VSTl9YWFg8L2NvbnN0YW50PgotICAgICAgcHJlZml4IGlzIHByb2Nlc3NlZCBhcyAKLSAgICAgIHdlbGwgYXMgdGhlIG9yaWdpbmFsIDxmdW5jdGlvbj5wcmludGsoKTwvZnVuY3Rpb24+IGRvZXMsIHNvIGl0J3MKLSAgICAgIHJlY29tbWVuZGVkIHRvIGFkZCB0aGlzIHByZWZpeCwgZS5nLiAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfcHJpbnRrKEtFUk5fRVJSICJPaCBteSwgc29ycnksIGl0J3MgZXh0cmVtZWx5IGJhZCFcbiIpOwotXV0+Ci0gICAgICAgICAgPC9wcm9ncmFtbGlzdGluZz4KLSAgICAgICAgPC9pbmZvcm1hbGV4YW1wbGU+Ci0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGVyZSBhcmUgYWxzbyA8ZnVuY3Rpb24+cHJpbnRrKCk8L2Z1bmN0aW9uPidzIGZvcgotICAgICAgZGVidWdnaW5nLiA8ZnVuY3Rpb24+c25kX3ByaW50ZCgpPC9mdW5jdGlvbj4gY2FuIGJlIHVzZWQgZm9yCi0gICAgICBnZW5lcmFsIGRlYnVnZ2luZyBwdXJwb3Nlcy4gSWYKLSAgICAgIDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHPC9jb25zdGFudD4gaXMgc2V0LCB0aGlzIGZ1bmN0aW9uIGlzCi0gICAgICBjb21waWxlZCwgYW5kIHdvcmtzIGp1c3QgbGlrZQotICAgICAgPGZ1bmN0aW9uPnNuZF9wcmludGsoKTwvZnVuY3Rpb24+LiBJZiB0aGUgQUxTQSBpcyBjb21waWxlZAotICAgICAgd2l0aG91dCB0aGUgZGVidWdnaW5nIGZsYWcsIGl0J3MgaWdub3JlZC4gCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICA8ZnVuY3Rpb24+c25kX3ByaW50ZGQoKTwvZnVuY3Rpb24+IGlzIGNvbXBpbGVkIGluIG9ubHkgd2hlbgotICAgICAgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUdfVkVSQk9TRTwvY29uc3RhbnQ+IGlzIHNldC4gUGxlYXNlIG5vdGUKLSAgICAgIHRoYXQgPGNvbnN0YW50PkNPTkZJR19TTkRfREVCVUdfVkVSQk9TRTwvY29uc3RhbnQ+IGlzIG5vdCBzZXQgYXMgZGVmYXVsdAotICAgICAgZXZlbiBpZiB5b3UgY29uZmlndXJlIHRoZSBhbHNhLWRyaXZlciB3aXRoCi0gICAgICA8b3B0aW9uPi0td2l0aC1kZWJ1Zz1mdWxsPC9vcHRpb24+IG9wdGlvbi4gWW91IG5lZWQgdG8gZ2l2ZQotICAgICAgZXhwbGljaXRseSA8b3B0aW9uPi0td2l0aC1kZWJ1Zz1kZXRlY3Q8L29wdGlvbj4gb3B0aW9uIGluc3RlYWQuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJ1c2VmdWwtZnVuY3Rpb25zLXNuZC1idWciPgotICAgICAgPHRpdGxlPjxmdW5jdGlvbj5zbmRfQlVHKCk8L2Z1bmN0aW9uPjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgSXQgc2hvd3MgdGhlIDxjb21wdXRlcm91dHB1dD5CVUc/PC9jb21wdXRlcm91dHB1dD4gbWVzc2FnZSBhbmQKLSAgICAgIHN0YWNrIHRyYWNlIGFzIHdlbGwgYXMgPGZ1bmN0aW9uPnNuZF9CVUdfT048L2Z1bmN0aW9uPiBhdCB0aGUgcG9pbnQuCi0gICAgICBJdCdzIHVzZWZ1bCB0byBzaG93IHRoYXQgYSBmYXRhbCBlcnJvciBoYXBwZW5zIHRoZXJlLiAKLSAgICAgIDwvcGFyYT4KLSAgICAgIDxwYXJhPgotCSBXaGVuIG5vIGRlYnVnIGZsYWcgaXMgc2V0LCB0aGlzIG1hY3JvIGlzIGlnbm9yZWQuIAotICAgICAgPC9wYXJhPgotICAgIDwvc2VjdGlvbj4KLQotICAgIDxzZWN0aW9uIGlkPSJ1c2VmdWwtZnVuY3Rpb25zLXNuZC1idWctb24iPgotICAgICAgPHRpdGxlPjxmdW5jdGlvbj5zbmRfQlVHX09OKCk8L2Z1bmN0aW9uPjwvdGl0bGU+Ci0gICAgICA8cGFyYT4KLSAgICAgICAgPGZ1bmN0aW9uPnNuZF9CVUdfT04oKTwvZnVuY3Rpb24+IG1hY3JvIGlzIHNpbWlsYXIgd2l0aAotCTxmdW5jdGlvbj5XQVJOX09OKCk8L2Z1bmN0aW9uPiBtYWNyby4gRm9yIGV4YW1wbGUsICAKLQotICAgICAgICA8aW5mb3JtYWxleGFtcGxlPgotICAgICAgICAgIDxwcm9ncmFtbGlzdGluZz4KLTwhW0NEQVRBWwotICBzbmRfQlVHX09OKCFwb2ludGVyKTsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0Jb3IgaXQgY2FuIGJlIHVzZWQgYXMgdGhlIGNvbmRpdGlvbiwKLSAgICAgICAgPGluZm9ybWFsZXhhbXBsZT4KLSAgICAgICAgICA8cHJvZ3JhbWxpc3Rpbmc+Ci08IVtDREFUQVsKLSAgaWYgKHNuZF9CVUdfT04obm9uX3plcm9faXNfYnVnKSkKLSAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLV1dPgotICAgICAgICAgIDwvcHJvZ3JhbWxpc3Rpbmc+Ci0gICAgICAgIDwvaW5mb3JtYWxleGFtcGxlPgotCi0gICAgICA8L3BhcmE+Ci0KLSAgICAgIDxwYXJhPgotICAgICAgICBUaGUgbWFjcm8gdGFrZXMgYW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbiB0byBldmFsdWF0ZS4KLQlXaGVuIDxjb25zdGFudD5DT05GSUdfU05EX0RFQlVHPC9jb25zdGFudD4sIGlzIHNldCwgdGhlCi0JZXhwcmVzc2lvbiBpcyBhY3R1YWxseSBldmFsdWF0ZWQuIElmIGl0J3Mgbm9uLXplcm8sIGl0IHNob3dzCi0JdGhlIHdhcm5pbmcgbWVzc2FnZSBzdWNoIGFzCi0JPGNvbXB1dGVyb3V0cHV0PkJVRz8gKHh4eCk8L2NvbXB1dGVyb3V0cHV0PgotCW5vcm1hbGx5IGZvbGxvd2VkIGJ5IHN0YWNrIHRyYWNlLiAgSXQgcmV0dXJucyB0aGUgZXZhbHVhdGVkCi0JdmFsdWUuCi0JV2hlbiBubyA8Y29uc3RhbnQ+Q09ORklHX1NORF9ERUJVRzwvY29uc3RhbnQ+IGlzIHNldCwgdGhpcwotCW1hY3JvIGFsd2F5cyByZXR1cm5zIHplcm8uCi0gICAgICA8L3BhcmE+Ci0KLSAgICA8L3NlY3Rpb24+Ci0KLSAgPC9jaGFwdGVyPgotCi0KLTwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotPCEtLSBBY2tub3dsZWRnbWVudHMgIC0tPgotPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+Ci0gIDxjaGFwdGVyIGlkPSJhY2tub3dsZWRnbWVudHMiPgotICAgIDx0aXRsZT5BY2tub3dsZWRnbWVudHM8L3RpdGxlPgotICAgIDxwYXJhPgotICAgICAgSSB3b3VsZCBsaWtlIHRvIHRoYW5rIFBoaWwgS2VyciBmb3IgaGlzIGhlbHAgZm9yIGltcHJvdmVtZW50IGFuZAotICAgICAgY29ycmVjdGlvbnMgb2YgdGhpcyBkb2N1bWVudC4gCi0gICAgPC9wYXJhPgotICAgIDxwYXJhPgotICAgIEtldmluIENvbmRlciByZWZvcm1hdHRlZCB0aGUgb3JpZ2luYWwgcGxhaW4tdGV4dCB0byB0aGUKLSAgICBEb2NCb29rIGZvcm1hdC4KLSAgICA8L3BhcmE+Ci0gICAgPHBhcmE+Ci0gICAgR2l1bGlhbm8gUG9jaGluaSBjb3JyZWN0ZWQgdHlwb3MgYW5kIGNvbnRyaWJ1dGVkIHRoZSBleGFtcGxlIGNvZGVzCi0gICAgaW4gdGhlIGhhcmR3YXJlIGNvbnN0cmFpbnRzIHNlY3Rpb24uCi0gICAgPC9wYXJhPgotICA8L2NoYXB0ZXI+Ci08L2Jvb2s+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CmluZGV4IDBmNWQyNmIuLjhlZWMwNWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby1Nb2RlbHMudHh0CkBAIC01Niw2ICs1Niw3IEBACiAgIHNvbnktYXNzYW1kCVNvbnkgQVNTQU1ECiAgIHRvc2hpYmEtczA2CVRvc2hpYmEgUzA2CiAgIHRvc2hpYmEtcngxCVRvc2hpYmEgUlgxCisgIHR5YW4JCVR5YW4gVGh1bmRlciBuNjY1MFcgKFMyOTE1LUUpCiAgIHVsdHJhCQlTYW1zdW5nIFExIFVsdHJhIFZpc3RhIG1vZGVsCiAgIGxlbm92by0zMDAwCUxlbm92byAzMDAwIHk0MTAKICAgbmVjCQlORUMgVmVyc2EgUzkxMDAKQEAgLTI2MSw2ICsyNjIsOCBAQAogPT09PT09PT09PT09PQogICBsYXB0b3AJQmFzaWMgTGFwdG9wIGNvbmZpZyAoZGVmYXVsdCkKICAgaHAJCUhQIFNwYXJ0YW4gbGFwdG9wCisgIGhwLWR2NjczNglIUCBkdjY3MzYKKyAgbGVub3ZvLXgyMDAJTGVub3ZvIFgyMDAgbGFwdG9wCiAKIFNUQUM5MjAwCiA9PT09PT09PQpAQCAtMjc4LDYgKzI4MSw3IEBACiAgIGdhdGV3YXktbTQJR2F0ZXdheSBsYXB0b3BzIHdpdGggRUFQRCBjb250cm9sCiAgIGdhdGV3YXktbTQtMglHYXRld2F5IGxhcHRvcHMgd2l0aCBFQVBEIGNvbnRyb2wKICAgcGFuYXNvbmljCVBhbmFzb25pYyBDRi03NAorICBhdXRvCQlCSU9TIHNldHVwIChkZWZhdWx0KQogCiBTVEFDOTIwNS85MjU0CiA9PT09PT09PT09PT09CkBAIC0yODUsNiArMjg5LDggQEAKICAgZGVsbC1tNDIJRGVsbCAodW5rbm93bikKICAgZGVsbC1tNDMJRGVsbCBQcmVjaXNpb24KICAgZGVsbC1tNDQJRGVsbCBJbnNwaXJvbgorICBlYXBkCQlLZWVwIEVBUEQgb24gKGUuZy4gR2F0ZXdheSBUMTYxNikKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkyMjAvOTIyMQogPT09PT09PT09PT09PQpAQCAtMzA4LDYgKzMxNCw3IEBACiAgIGRlbGwtZDgyCURlbGwgKHVua25vd24pCiAgIGRlbGwtbTgxCURlbGwgKHVua25vd24pCiAgIGRlbGwtbTgyCURlbGwgWFBTIE0xMjEwCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MjAyLzkyNTAvOTI1MQogPT09PT09PT09PT09PT09PT09CkBAIC0zMTksNiArMzI2LDcgQEAKICAgbTMJCVNvbWUgR2F0ZXdheSBNWCBzZXJpZXMgbGFwdG9wcwogICBtNQkJU29tZSBHYXRld2F5IE1YIHNlcmllcyBsYXB0b3BzIChNUDY5NTQpCiAgIG02CQlTb21lIEdhdGV3YXkgTlggc2VyaWVzIGxhcHRvcHMKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkyMjcvOTIyOC85MjI5LzkyN3gKID09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zMjgsNiArMzM2LDcgQEAKICAgNXN0YWNrCUQ5NjUgNXN0YWNrICsgU1BESUYKICAgZGVsbC0zc3RhY2sJRGVsbCBEaW1lbnNpb24gRTUyMAogICBkZWxsLWJpb3MJRml4ZXMgd2l0aCBEZWxsIEJJT1Mgc2V0dXAKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzkySEQ3MUIqCiA9PT09PT09PT09PT0KQEAgLTMzNSw3ICszNDQsMTAgQEAKICAgZGVsbC1tNC0xCURlbGwgZGVza3RvcHMKICAgZGVsbC1tNC0yCURlbGwgZGVza3RvcHMKICAgZGVsbC1tNC0zCURlbGwgZGVza3RvcHMKLSAgaHAtbTQJCUhQIGR2IGxhcHRvcHMKKyAgaHAtbTQJCUhQIG1pbmkgMTAwMAorICBocC1kdjUJSFAgZHYgc2VyaWVzCisgIGhwLWhkeAlIUCBIRFggc2VyaWVzCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhENzMqCiA9PT09PT09PT09PQpAQCAtMzQ1LDEzICszNTcsMTYgQEAKICAgZGVsbC1tNi1kbWljCURlbGwgZGVza3RvcHMvbGFwdG9wcyB3aXRoIGRpZ2l0YWwgbWljcwogICBkZWxsLW02CURlbGwgZGVza3RvcHMvbGFwdG9wcyB3aXRoIGJvdGggdHlwZSBvZiBtaWNzCiAgIGRlbGwtZXEJRGVsbCBkZXNrdG9wcy9sYXB0b3BzCisgIGF1dG8JCUJJT1Mgc2V0dXAgKGRlZmF1bHQpCiAKIFNUQUM5MkhEODMqCiA9PT09PT09PT09PQogICByZWYJCVJlZmVyZW5jZSBib2FyZAogICBtaWMtcmVmCVJlZmVyZW5jZSBib2FyZCB3aXRoIHBvd2VyIG1hbmFnbWVudCBmb3IgcG9ydHMKKyAgZGVsbC1zMTQJRGVsbCBsYXB0b3AKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKIAogU1RBQzk4NzIKID09PT09PT09Ci0gIHZhaW8JCVNldHVwIGZvciBWQUlPIEZFNTUwRy9TWjExMAotICB2YWlvLWFyIFNldHVwIGZvciBWQUlPIEFSCisgIHZhaW8JCVZBSU8gbGFwdG9wIHdpdGhvdXQgU1BESUYKKyAgYXV0bwkJQklPUyBzZXR1cCAoZGVmYXVsdCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8udHh0CmluZGV4IDhkNjhmZmYuLmM1OTQ4ZjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9IRC1BdWRpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLnR4dApAQCAtMTA5LDYgKzEwOSwxMyBAQAogU2luY2UgMi42LjI5IGtlcm5lbCwgdGhlIGRyaXZlciBoYXMgYSBtb3JlIHJvYnVzdCBwcm9iaW5nIG1ldGhvZCwgc28KIHRoaXMgZXJyb3IgbWlnaHQgaGFwcGVuIHJhcmVseSwgdGhvdWdoLgogCitPbiBhIG1hY2hpbmUgd2l0aCBhIGJyb2tlbiBCSU9TLCBzb21ldGltZXMgeW91IG5lZWQgdG8gZm9yY2UgdGhlCitkcml2ZXIgdG8gcHJvYmUgdGhlIGNvZGVjIHNsb3RzIHRoZSBoYXJkd2FyZSBkb2Vzbid0IHJlcG9ydCBmb3IgdXNlLgorSW4gc3VjaCBhIGNhc2UsIHR1cm4gdGhlIGJpdCA4ICgweDEwMCkgb2YgYHByb2JlX21hc2tgIG9wdGlvbiBvbi4KK1RoZW4gdGhlIHJlc3QgOCBiaXRzIGFyZSBwYXNzZWQgYXMgdGhlIGNvZGVjIHNsb3RzIHRvIHByb2JlCit1bmNvbmRpdGlvbmFsbHkuICBGb3IgZXhhbXBsZSwgYHByb2JlX21hc2s9MHgxMDNgIHdpbGwgZm9yY2UgdG8gcHJvYmUKK3RoZSBjb2RlYyBzbG90cyAwIGFuZCAxIG5vIG1hdHRlciB3aGF0IHRoZSBoYXJkd2FyZSByZXBvcnRzLgorCiAKIEludGVycnVwdCBIYW5kbGluZwogfn5+fn5+fn5+fn5+fn5+fn5+CkBAIC0zNTgsMTAgKzM2NSwyNiBAQAogICB0byB0aGlzIGZpbGUuCiBpbml0X3ZlcmJzOjoKICAgVGhlIGV4dHJhIHZlcmJzIHRvIGV4ZWN1dGUgYXQgaW5pdGlhbGl6YXRpb24uICBZb3UgY2FuIGFkZCBhIHZlcmIgYnkKLSAgd3JpdGluZyB0byB0aGlzIGZpbGUuICBQYXNzIHRyZWUgbnVtYmVycywgbmlkLCB2ZXJiIGFuZCBwYXJhbWV0ZXIuCisgIHdyaXRpbmcgdG8gdGhpcyBmaWxlLiAgUGFzcyB0aHJlZSBudW1iZXJzOiBuaWQsIHZlcmIgYW5kIHBhcmFtZXRlcgorICAoc2VwYXJhdGVkIHdpdGggYSBzcGFjZSkuCiBoaW50czo6Ci0gIFNob3dzIGhpbnQgc3RyaW5ncyBmb3IgY29kZWMgcGFyc2VycyBmb3IgYW55IHVzZS4gIFJpZ2h0IG5vdyBpdCdzCi0gIG5vdCB1c2VkLgorICBTaG93cyAvIHN0b3JlcyBoaW50IHN0cmluZ3MgZm9yIGNvZGVjIHBhcnNlcnMgZm9yIGFueSB1c2UuCisgIEl0cyBmb3JtYXQgaXMgYGtleSA9IHZhbHVlYC4gIEZvciBleGFtcGxlLCBwYXNzaW5nIGBocF9kZXRlY3QgPSB5ZXNgCisgIHRvIElEVC9TVEFDIGNvZGVjIHBhcnNlciB3aWxsIHJlc3VsdCBpbiB0aGUgZGlzYWJsZW1lbnQgb2YgdGhlCisgIGhlYWRwaG9uZSBkZXRlY3Rpb24uCitpbml0X3Bpbl9jb25maWdzOjoKKyAgU2hvd3MgdGhlIGluaXRpYWwgcGluIGRlZmF1bHQgY29uZmlnIHZhbHVlcyBzZXQgYnkgQklPUy4KK2RyaXZlcl9waW5fY29uZmlnczo6CisgIFNob3dzIHRoZSBwaW4gZGVmYXVsdCB2YWx1ZXMgc2V0IGJ5IHRoZSBjb2RlYyBwYXJzZXIgZXhwbGljaXRseS4KKyAgVGhpcyBkb2Vzbid0IHNob3cgYWxsIHBpbiB2YWx1ZXMgYnV0IG9ubHkgdGhlIGNoYW5nZWQgdmFsdWVzIGJ5CisgIHRoZSBwYXJzZXIuICBUaGF0IGlzLCBpZiB0aGUgcGFyc2VyIGRvZXNuJ3QgY2hhbmdlIHRoZSBwaW4gZGVmYXVsdAorICBjb25maWcgdmFsdWVzIGJ5IGl0c2VsZiwgdGhpcyB3aWxsIGNvbnRhaW4gbm90aGluZy4KK3VzZXJfcGluX2NvbmZpZ3M6OgorICBTaG93cyB0aGUgcGluIGRlZmF1bHQgY29uZmlnIHZhbHVlcyB0byBvdmVycmlkZSB0aGUgQklPUyBzZXR1cC4KKyAgV3JpdGluZyB0aGlzICh3aXRoIHR3byBudW1iZXJzLCBOSUQgYW5kIHZhbHVlKSBhcHBlbmRzIHRoZSBuZXcKKyAgdmFsdWUuICBUaGUgZ2l2ZW4gd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGluaXRpYWwgQklPUyB2YWx1ZSBhdAorICB0aGUgbmV4dCByZWNvbmZpZ3VyYXRpb24gdGltZS4gIE5vdGUgdGhhdCB0aGlzIGNvbmZpZyB3aWxsIG92ZXJyaWRlCisgIGV2ZW4gdGhlIGRyaXZlciBwaW4gY29uZmlncywgdG9vLgogcmVjb25maWc6OgogICBUcmlnZ2VycyB0aGUgY29kZWMgcmUtY29uZmlndXJhdGlvbi4gIFdoZW4gYW55IHZhbHVlIGlzIHdyaXR0ZW4gdG8KICAgdGhpcyBmaWxlLCB0aGUgZHJpdmVyIHJlLWluaXRpYWxpemUgYW5kIHBhcnNlcyB0aGUgY29kZWMgdHJlZQpAQCAtMzcxLDYgKzM5NCwxNCBAQAogICBSZXNldHMgdGhlIGNvZGVjLCByZW1vdmVzIHRoZSBtaXhlciBlbGVtZW50cyBhbmQgUENNIHN0dWZmIG9mIHRoZQogICBzcGVjaWZpZWQgY29kZWMsIGFuZCBjbGVhciBhbGwgaW5pdCB2ZXJicyBhbmQgaGludHMuCiAKK0ZvciBleGFtcGxlLCB3aGVuIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgcGluIGRlZmF1bHQgY29uZmlndXJhdGlvbgordmFsdWUgb2YgdGhlIHBpbiB3aWRnZXQgMHgxNCB0byAweDk5OTMwMTNmLCBhbmQgbGV0IHRoZSBkcml2ZXIKK3JlLWNvbmZpZ3VyZSBiYXNlZCBvbiB0aGF0IHN0YXRlLCBydW4gbGlrZSBiZWxvdzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAjIGVjaG8gMHgxNCAweDk5OTMwMTNmID4gL3N5cy9jbGFzcy9zb3VuZC9od0MwRDAvdXNlcl9waW5fY29uZmlncworICAjIGVjaG8gMSA+IC9zeXMvY2xhc3Mvc291bmQvaHdDMEQwL3JlY29uZmlnICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiAKIFBvd2VyLVNhdmluZwogfn5+fn5+fn5+fn5+CkBAIC00NjEsNiArNDkyLDE2IEBACiBUaGVyZSBhcmUgc29tZSBvdGhlciB1c2VmdWwgb3B0aW9ucy4gIFNlZSBgLS1oZWxwYCBvcHRpb24gb3V0cHV0IGZvcgogZGV0YWlscy4KIAorV2hlbiBhIHByb2JlIGVycm9yIG9jY3VycyBvciB3aGVuIHRoZSBkcml2ZXIgb2J2aW91c2x5IGFzc2lnbnMgYQorbWlzbWF0Y2hlZCBtb2RlbCwgaXQnZCBiZSBoZWxwZnVsIHRvIGxvYWQgdGhlIGRyaXZlciB3aXRoCitgcHJvYmVfb25seT0xYCBvcHRpb24gKGF0IGJlc3QgYWZ0ZXIgdGhlIGNvbGQgcmVib290KSBhbmQgcnVuCithbHNhLWluZm8gYXQgdGhpcyBzdGF0ZS4gIFdpdGggdGhpcyBvcHRpb24sIHRoZSBkcml2ZXIgd29uJ3QgY29uZmlndXJlCit0aGUgbWl4ZXIgYW5kIFBDTSBidXQganVzdCB0cmllcyB0byBwcm9iZSB0aGUgY29kZWMgc2xvdC4gIEFmdGVyCitwcm9iaW5nLCB0aGUgcHJvYyBmaWxlIGlzIGF2YWlsYWJsZSwgc28geW91IGNhbiBnZXQgdGhlIHJhdyBjb2RlYworaW5mb3JtYXRpb24gYmVmb3JlIG1vZGlmaWVkIGJ5IHRoZSBkcml2ZXIuICBPZiBjb3Vyc2UsIHRoZSBkcml2ZXIKK2lzbid0IHVzYWJsZSB3aXRoIGBwcm9iZV9vbmx5PTFgLiAgQnV0IHlvdSBjYW4gY29udGludWUgdGhlCitjb25maWd1cmF0aW9uIHZpYSBod2RlcCBzeXNmcyBmaWxlIGlmIGhkYS1yZWNvbmZpZyBvcHRpb24gaXMgZW5hYmxlZC4KKwogCiBoZGEtdmVyYgogfn5+fn5+fn4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvZGFwbS50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2RhcG0udHh0CmluZGV4IDQ2Zjk2ODQuLjllNjc2MzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvZGFwbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9kYXBtLnR4dApAQCAtMTE2LDYgKzExNiw5IEBACiBTTkRfU09DX0RBUE1fTUlYRVIoIk91dHB1dCBNaXhlciIsIFdNODczMV9QV1IsIDQsIDEsIHdtODczMV9vdXRwdXRfbWl4ZXJfY29udHJvbHMsCiAJQVJSQVlfU0laRSh3bTg3MzFfb3V0cHV0X21peGVyX2NvbnRyb2xzKSksCiAKK0lmIHlvdSBkb250IHdhbnQgdGhlIG1peGVyIGVsZW1lbnRzIHByZWZpeGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIG1peGVyIHdpZGdldCwKK3lvdSBjYW4gdXNlIFNORF9TT0NfREFQTV9NSVhFUl9OQU1FRF9DVEwgaW5zdGVhZC4gdGhlIHBhcmFtZXRlcnMgYXJlIHRoZSBzYW1lCithcyBmb3IgU05EX1NPQ19EQVBNX01JWEVSLgogCiAyLjMgUGxhdGZvcm0vTWFjaGluZSBkb21haW4gV2lkZ2V0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMiBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0NTNDIzMgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q2YWY3YS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9DUzQyMzIKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1UbyBjb25maWd1cmUgdGhlIENyeXN0YWwgQ1M0MjN4IHNvdW5kIGNoaXAgYW5kIGFjdGl2YXRlIGl0cyBEU1AgZnVuY3Rpb25zLAotbW9kdWxlcyBtYXkgYmUgbG9hZGVkIGluIHRoaXMgb3JkZXI6Ci0gIAotCW1vZHByb2JlIHNvdW5kCi0JaW5zbW9kIGFkMTg0OAotCWluc21vZCB1YXJ0NDAxCi0JaW5zbW9kIGNzNDIzMiBpbz0qIGlycT0qIGRtYT0qIGRtYTI9KgotICAKLVRoaXMgaXMgdGhlIG1lYW5pbmcgb2YgdGhlIHBhcmFtZXRlcnM6Ci0gIAotCWlvLS1JL08gYWRkcmVzcyBvZiB0aGUgV2luZG93cyBTb3VuZCBTeXN0ZW0gKG5vcm1hbGx5IDB4NTM0KQotCWlycS0tSVJRIG9mIHRoaXMgZGV2aWNlCi0JZG1hIGFuZCBkbWEyLS1ETUEgY2hhbm5lbHMgKERNQTIgbWF5IGJlIDApCi0gIAotT24gc29tZSBjYXJkcywgdGhlIGJvYXJkIGF0dGVtcHRzIHRvIGRvIG5vbi1QblAgc2V0dXAsIGFuZCBmYWlscy4gIElmIHlvdQotaGF2ZSBwcm9ibGVtcywgdXNlIExpbnV4JyBQblAgZmFjaWxpdGllcy4gCi0gIAotVG8gZ2V0IE1JREkgZmFjaWxpdGllcyBhZGQKLSAgCi0JaW5zbW9kIG9wbDMgaW89KgotICAKLXdoZXJlICJpbyIgaXMgdGhlIEkvTyBhZGRyZXNzIG9mIHRoZSBPUEwzIHN5bnRoZXNpemVyLiBUaGlzIHdpbGwgYmUgc2hvd24KLWluIC9wcm9jL3N5cy9wbnAgYW5kIGlzIG5vcm1hbGx5IDB4Mzg4LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvSW50cm9kdWN0aW9uCmluZGV4IGYwNGJhNmIuLjc1ZDk2N2YgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL0ludHJvZHVjdGlvbgorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9JbnRyb2R1Y3Rpb24KQEAgLTgwLDcgKzgwLDcgQEAKICAgICBhZGRpdGlvbmFsIGZlYXR1cmVzLgogCiAyLiAgVGhlIGNvbW1lcmNpYWwgT1NTIGRyaXZlciBtYXkgYmUgb2J0YWluZWQgZnJvbSB0aGUgc2l0ZToKLSAgICBodHRwOi8vd3d3L29wZW5zb3VuZC5jb20uICBUaGlzIG1heSBiZSB1c2VkIGZvciBjYXJkcyB0aGF0CisgICAgaHR0cDovL3d3dy5vcGVuc291bmQuY29tLiAgVGhpcyBtYXkgYmUgdXNlZCBmb3IgY2FyZHMgdGhhdAogICAgIGFyZSB1bnN1cHBvcnRlZCBieSB0aGUga2VybmVsIGRyaXZlciwgb3IgbWF5IGJlIHVzZWQKICAgICBieSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4gIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dAppbmRleCAyNzA0ODE5Li42YzNjNjI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQKQEAgLTIyOSwxNiArMjI5LDI2IEBACiAJaW50IHN0YXR1czsJCS8qIDI4OiAqLwogCXVuc2lnbmVkIGludCBsZW5ndGg7CS8qIDMyOiBMZW5ndGggb2YgZGF0YSAoc3VibWl0dGVkIG9yIGFjdHVhbCkgKi8KIAl1bnNpZ25lZCBpbnQgbGVuX2NhcDsJLyogMzY6IERlbGl2ZXJlZCBsZW5ndGggKi8KLQl1bnNpZ25lZCBjaGFyIHNldHVwWzhdOwkvKiA0MDogT25seSBmb3IgQ29udHJvbCAnUycgKi8KLX07CQkJCS8qIDQ4IGJ5dGVzIHRvdGFsICovCisJdW5pb24gewkJCS8qIDQwOiAqLworCQl1bnNpZ25lZCBjaGFyIHNldHVwW1NFVFVQX0xFTl07CS8qIE9ubHkgZm9yIENvbnRyb2wgUy10eXBlICovCisJCXN0cnVjdCBpc29fcmVjIHsJCS8qIE9ubHkgZm9yIElTTyAqLworCQkJaW50IGVycm9yX2NvdW50OworCQkJaW50IG51bWRlc2M7CisJCX0gaXNvOworCX0gczsKKwlpbnQgaW50ZXJ2YWw7CQkvKiA0ODogT25seSBmb3IgSW50ZXJydXB0IGFuZCBJU08gKi8KKwlpbnQgc3RhcnRfZnJhbWU7CS8qIDUyOiBGb3IgSVNPICovCisJdW5zaWduZWQgaW50IHhmZXJfZmxhZ3M7IC8qIDU2OiBjb3B5IG9mIFVSQidzIHRyYW5zZmVyX2ZsYWdzICovCisJdW5zaWduZWQgaW50IG5kZXNjOwkvKiA2MDogQWN0dWFsIG51bWJlciBvZiBJU08gZGVzY3JpcHRvcnMgKi8KK307CQkJCS8qIDY0IHRvdGFsIGxlbmd0aCAqLwogCiBUaGVzZSBldmVudHMgY2FuIGJlIHJlY2VpdmVkIGZyb20gYSBjaGFyYWN0ZXIgZGV2aWNlIGJ5IHJlYWRpbmcgd2l0aCByZWFkKDIpLAotd2l0aCBhbiBpb2N0bCgyKSwgb3IgYnkgYWNjZXNzaW5nIHRoZSBidWZmZXIgd2l0aCBtbWFwLgord2l0aCBhbiBpb2N0bCgyKSwgb3IgYnkgYWNjZXNzaW5nIHRoZSBidWZmZXIgd2l0aCBtbWFwLiBIb3dldmVyLCByZWFkKDIpCitvbmx5IHJldHVybnMgZmlyc3QgNDggYnl0ZXMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KIAogVGhlIGNoYXJhY3RlciBkZXZpY2UgaXMgdXN1YWxseSBjYWxsZWQgL2Rldi91c2Jtb25OLCB3aGVyZSBOIGlzIHRoZSBVU0IgYnVzCiBudW1iZXIuIE51bWJlciB6ZXJvICgvZGV2L3VzYm1vbjApIGlzIHNwZWNpYWwgYW5kIG1lYW5zICJhbGwgYnVzZXMiLgotSG93ZXZlciwgdGhpcyBmZWF0dXJlIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuIE5vdGUgdGhhdCBzcGVjaWZpYyBuYW1pbmcKLXBvbGljeSBpcyBzZXQgYnkgeW91ciBMaW51eCBkaXN0cmlidXRpb24uCitOb3RlIHRoYXQgc3BlY2lmaWMgbmFtaW5nIHBvbGljeSBpcyBzZXQgYnkgeW91ciBMaW51eCBkaXN0cmlidXRpb24uCiAKIElmIHlvdSBjcmVhdGUgL2Rldi91c2Jtb24wIGJ5IGhhbmQsIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG93bmVkIGJ5IHJvb3QKIGFuZCBoYXMgbW9kZSAwNjAwLiBPdGhlcndpc2UsIHVucHJpdmlsZWRnZWQgdXNlcnMgd2lsbCBiZSBhYmxlIHRvIHNub29wCkBAIC0yNzksOSArMjg5LDEwIEBACiBUaGlzIGNhbGwgcmV0dXJucyB0aGUgY3VycmVudCBzaXplIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMuCiAKICBNT05fSU9DWF9HRVQsIGRlZmluZWQgYXMgX0lPVyhNT05fSU9DX01BR0lDLCA2LCBzdHJ1Y3QgbW9uX2dldF9hcmcpCisgTU9OX0lPQ1hfR0VUWCwgZGVmaW5lZCBhcyBfSU9XKE1PTl9JT0NfTUFHSUMsIDEwLCBzdHJ1Y3QgbW9uX2dldF9hcmcpCiAKLVRoaXMgY2FsbCB3YWl0cyBmb3IgZXZlbnRzIHRvIGFycml2ZSBpZiBub25lIHdlcmUgaW4gdGhlIGtlcm5lbCBidWZmZXIsCi10aGVuIHJldHVybnMgdGhlIGZpcnN0IGV2ZW50LiBJdHMgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBmb2xsb3dpbmcKK1RoZXNlIGNhbGxzIHdhaXQgZm9yIGV2ZW50cyB0byBhcnJpdmUgaWYgbm9uZSB3ZXJlIGluIHRoZSBrZXJuZWwgYnVmZmVyLAordGhlbiByZXR1cm4gdGhlIGZpcnN0IGV2ZW50LiBUaGUgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBmb2xsb3dpbmcKIHN0cnVjdHVyZToKIAogc3RydWN0IG1vbl9nZXRfYXJnIHsKQEAgLTI5NCw2ICszMDUsOCBAQAogcG9pbnRlZCBieSBoZHIgY29udGFpbnMgdGhlIG5leHQgZXZlbnQgc3RydWN0dXJlLCBhbmQgdGhlIGRhdGEgYnVmZmVyIGNvbnRhaW5zCiB0aGUgZGF0YSwgaWYgYW55LiBUaGUgZXZlbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBrZXJuZWwgYnVmZmVyLgogCitUaGUgTU9OX0lPQ1hfR0VUIGNvcGllcyA0OCBieXRlcywgTU9OX0lPQ1hfR0VUWCBjb3BpZXMgNjQgYnl0ZXMuCisKICBNT05fSU9DWF9NRkVUQ0gsIGRlZmluZWQgYXMgX0lPV1IoTU9OX0lPQ19NQUdJQywgNywgc3RydWN0IG1vbl9tZmV0Y2hfYXJnKQogCiBUaGlzIGlvY3RsIGlzIHByaW1hcmlseSB1c2VkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGFjY2Vzc2VzIHRoZSBidWZmZXIKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggNWQ0NjBjOS4uZGE0ODhjZSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTUwMiw2ICs1MDIsMTMgQEAKIE06CXJwdXJkaWVAcnBzeXMubmV0CiBTOglNYWludGFpbmVkCiAKK0FSTS9DT1JUSU5BIFNZU1RFTVMgR0VNSU5JIEFSTSBBUkNISVRFQ1RVUkUKK1A6CVBhdWxpdXMgWmFsZWNrYXMKK006CXBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitUOglnaXQgZ2l0b3Jpb3VzLm9yZy9saW51eC1nZW1pbmkvbWFpbmxpbmUuZ2l0CitTOglNYWludGFpbmVkCisKIEFSTS9FWlggU01BUlRQSE9ORVMgKEE3ODAsIEE5MTAsIEExMjAwLCBFNjgwLCBST0tSIEUyIGFuZCBST0tSIEU2KQogUDoJRGFuaWVsIFJpYmVpcm8KIE06CWRyd3lybUBnbWFpbC5jb20KQEAgLTUxMyw2ICs1MjAsMTIgQEAKIFc6CWh0dHA6Ly93d3cub3BlbmV6eC5vcmcvCiBTOglNYWludGFpbmVkCiAKK0FSTS9GQVJBREFZIEZBNTI2IFBPUlQKK1A6CVBhdWxpdXMgWmFsZWNrYXMKK006CXBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsgKHN1YnNjcmliZXJzLW9ubHkpCitTOglNYWludGFpbmVkCisKIEFSTS9GUkVFU0NBTEUgSU1YIC8gTVhDIEFSTSBBUkNISVRFQ1RVUkUKIFA6CVNhc2NoYSBIYXVlcgogTToJa2VybmVsQHBlbmd1dHJvbml4LmRlCkBAIC02MjIsNyArNjM1LDcgQEAKIE06CWRpcmtAb3BmZXItb25saW5lLmRlCiBTOglNYWludGFpbmVkCiAKLUFSTS9QQUxNVFggU1VQUE9SVAorQVJNL1BBTE1UWCxQQUxNVDUsUEFMTUxEIFNVUFBPUlQKIFA6CU1hcmVrIFZhc3V0CiBNOgltYXJlay52YXN1dEBnbWFpbC5jb20KIFc6CWh0dHA6Ly9oYWNrbmRldi5jb20KQEAgLTc2NSw2ICs3NzgsMTQgQEAKIEw6CWF0aDlrLWRldmVsQGxpc3RzLmF0aDlrLm9yZwogUzoJU3VwcG9ydGVkCiAKK0FUSEVST1MgQVI5MTcwIFdJUkVMRVNTIERSSVZFUgorUDoJQ2hyaXN0aWFuIExhbXBhcnRlcgorTToJY2h1bmtlZXlAd2ViLmRlCitMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXI5MTcwCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvCisKIEFUSV9SRU1PVEUyIERSSVZFUgogUDoJVmlsbGUgU3lyamFsYQogTToJc3lyamFsYUBzY2kuZmkKQEAgLTEwMTEsNiArMTAzMiw4IEBACiBTOglTdXBwb3J0ZWQKIAogQlJPQURDT00gVEczIEdJR0FCSVQgRVRIRVJORVQgRFJJVkVSCitQOglNYXR0IENhcmxzb24KK006CW1jYXJsc29uQGJyb2FkY29tLmNvbQogUDoJTWljaGFlbCBDaGFuCiBNOgltY2hhbkBicm9hZGNvbS5jb20KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKQEAgLTEyNjksNiArMTI5MiwxMiBAQAogVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9oZXJiZXJ0L2NyeXB0by0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiAKK0NSWVBUT0dSQVBISUMgUkFORE9NIE5VTUJFUiBHRU5FUkFUT1IKK1A6CU5laWwgSG9ybWFuCitNOgluaG9ybWFuQHR1eGRyaXZlci5jb20KK0w6CWxpbnV4LWNyeXB0b0B2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogQ1M1NTM1IEF1ZGlvIEFMU0EgZHJpdmVyCiBQOglKYXlhIEt1bWFyCiBNOglqYXlha3VtYXIuYWxzYUBnbWFpbC5jb20KQEAgLTIyMTYsNiArMjI0NSwxMSBAQAogTDoJbGludXgxMzk0LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAogCitJTlRFR1JJVFkgTUVBU1VSRU1FTlQgQVJDSElURUNUVVJFIChJTUEpCitQOglNaW1pIFpvaGFyCitNOgl6b2hhckB1cy5pYm0uY29tCitTOglTdXBwb3J0ZWQKKwogSU1TIFRXSU5UVVJCTyBGUkFNRUJVRkZFUiBEUklWRVIKIEw6CWxpbnV4LWZiZGV2LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglPcnBoYW4KQEAgLTI4MzIsNyArMjg2Niw3IEBACiBNOgl6aXBwZWxAbGludXgtbTY4ay5vcmcKIEw6CWxpbnV4LW02OGtAbGlzdHMubGludXgtbTY4ay5vcmcKIFc6CWh0dHA6Ly93d3cubGludXgtbTY4ay5vcmcvCi1XOglodHRwOi8vbGludXgtbTY4ay1jdnMudWJiLmNhLworVDoJZ2l0IGdpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9nZWVydC9saW51eC1tNjhrLmdpdAogUzoJTWFpbnRhaW5lZAogCiBNNjhLIE9OIEFQUExFIE1BQ0lOVE9TSApAQCAtMzUzOSw2ICszNTczLDIyIEBACiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCiBTOglNYWludGFpbmVkCiAKK1BYQTE2OCBTVVBQT1JUCitQOglFcmljIE1pYW8KK006CWVyaWMubWlhb0BtYXJ2ZWxsLmNvbQorUDoJSmFzb24gQ2hhZ2FzCitNOglqYXNvbi5jaGFnYXNAbWFydmVsbC5jb20KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awkoc3Vic2NyaWJlcnMtb25seSkKK1Q6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQveWNtaWFvL3B4YS1saW51eC0yLjYuZ2l0CitTOglTdXBwb3J0ZWQKKworUFhBOTEwIFNVUFBPUlQKK1A6CUVyaWMgTWlhbworTToJZXJpYy5taWFvQG1hcnZlbGwuY29tCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmFybS5saW51eC5vcmcudWsJKHN1YnNjcmliZXJzLW9ubHkpCitUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3ljbWlhby9weGEtbGludXgtMi42LmdpdAorUzoJU3VwcG9ydGVkCisKIFBYQSBNTUNJIERSSVZFUgogUzoJT3JwaGFuCiAKQEAgLTM1ODksNyArMzYzOSw3IEBACiBSQUxJTksgUlQyWDAwIFdJUkVMRVNTIExBTiBEUklWRVIKIFA6CXJ0MngwMCBwcm9qZWN0CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKLUw6CXJ0MjQwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKK0w6CXVzZXJzQHJ0MngwMC5zZXJpYWxtb25rZXkuY29tCiBXOglodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20vCiBTOglNYWludGFpbmVkCiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2l2ZC9ydDJ4MDAuZ2l0CkBAIC0zNjM1LDYgKzM2ODUsMTIgQEAKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAorUkRTIC0gUkVMSUFCTEUgREFUQUdSQU0gU09DS0VUUworUDoJQW5keSBHcm92ZXIKK006CWFuZHkuZ3JvdmVyQG9yYWNsZS5jb20KK0w6CXJkcy1kZXZlbEBvc3Mub3JhY2xlLmNvbQorUzoJU3VwcG9ydGVkCisKIFJFQUQtQ09QWSBVUERBVEUgKFJDVSkKIFA6CURpcGFua2FyIFNhcm1hCiBNOglkaXBhbmthckBpbi5pYm0uY29tCkBAIC0zNzI2LDYgKzM3ODIsMTUgQEAKIFc6CWh0dHA6Ly93d3cuaWJtLmNvbS9kZXZlbG9wZXJ3b3Jrcy9saW51eC9saW51eDM5MC8KIFM6CVN1cHBvcnRlZAogCitTMzkwIFpDUllQVCBEUklWRVIKK1A6CUZlbGl4IEJlY2sKK006CWZlbGl4LmJlY2tAZGUuaWJtLmNvbQorUDoJUmFscGggV3VlcnRobmVyCitNOglyYWxwaC53dWVydGhuZXJAZGUuaWJtLmNvbQorTToJbGludXgzOTBAZGUuaWJtLmNvbQorTDoJbGludXgtczM5MEB2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorCiBTMzkwIFpGQ1AgRFJJVkVSCiBQOglDaHJpc3RvZiBTY2htaXR0CiBNOgljaHJpc3RvZi5zY2htaXR0QGRlLmlibS5jb20KQEAgLTM4NDQsNiArMzkwOSw3IEBACiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBMOglsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJuZWwub3JnIChzdWdnZXN0ZWQgQ2M6KQogVDoJZ2l0IGtlcm5lbC5vcmc6cHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2ptb3JyaXMvc2VjdXJpdHktdGVzdGluZy0yLjYuZ2l0CitXOglodHRwOi8vc2VjdXJpdHkud2lraS5rZXJuZWwub3JnLwogUzoJU3VwcG9ydGVkCiAKIFNFQ1VSSVRZIENPTlRBQ1QKQEAgLTQyODUsNiArNDM1MSwxOSBAQAogVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy90bGFuLwogUzoJTWFpbnRhaW5lZAogCitUT01PWU8gU0VDVVJJVFkgTU9EVUxFCitQOglLZW50YXJvIFRha2VkYQorTToJdGFrZWRha25AbnR0ZGF0YS5jby5qcAorUDoJVGV0c3VvIEhhbmRhCitNOglwZW5ndWluLWtlcm5lbEBJLWxvdmUuU0FLVVJBLm5lLmpwCitMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnIChrZXJuZWwgaXNzdWVzKQorTDoJdG9tb3lvLXVzZXJzLWVuQGxpc3RzLnNvdXJjZWZvcmdlLmpwIChzdWJzY3JpYmVycy1vbmx5LCBmb3IgZGV2ZWxvcGVycyBhbmQgdXNlcnMgaW4gRW5nbGlzaCkKK0w6CXRvbW95by1kZXZAbGlzdHMuc291cmNlZm9yZ2UuanAgKHN1YnNjcmliZXJzLW9ubHksIGZvciBkZXZlbG9wZXJzIGluIEphcGFuZXNlKQorTDoJdG9tb3lvLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLmpwIChzdWJzY3JpYmVycy1vbmx5LCBmb3IgdXNlcnMgaW4gSmFwYW5lc2UpCitXOglodHRwOi8vdG9tb3lvLnNvdXJjZWZvcmdlLmpwLworVDoJcXVpbHQgaHR0cDovL3N2bi5zb3VyY2Vmb3JnZS5qcC9zdm5yb290L3RvbW95by90cnVuay8yLjIueC90b21veW8tbHNtL3BhdGNoZXMvCitTOglNYWludGFpbmVkCisKIFRPU0hJQkEgQUNQSSBFWFRSQVMgRFJJVkVSCiBQOglKb2huIEJlbG1vbnRlCiBNOgl0b3NoaWJhX2FjcGlAbWVtZWJlYW0ub3JnCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGEyYzJlZmUuLjFhYjNlYmYgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDggKzEsOCBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDI5Ci1FWFRSQVZFUlNJT04gPSAtcmM4Ci1OQU1FID0gRXJvdGljIFBpY2tsZWQgSGVycmluZworRVhUUkFWRVJTSU9OID0KK05BTUUgPSBUZW1wb3JhcnkgVGFzbWFuaWFuIERldmlsCiAKICMgKkRPQ1VNRU5UQVRJT04qCiAjIFRvIHNlZSBhIGxpc3Qgb2YgdHlwaWNhbCB0YXJnZXRzIGV4ZWN1dGUgIm1ha2UgaGVscCIKQEAgLTU2OSw2ICs1NjksOSBAQAogIyBkaXNhYmxlIGludmFsaWQgImNhbid0IHdyYXAiIG9wdGltemF0aW9ucyBmb3Igc2lnbmVkIC8gcG9pbnRlcnMKIEtCVUlMRF9DRkxBR1MJKz0gJChjYWxsIGNjLW9wdGlvbiwtZndyYXB2KQogCisjIHJldmVydCB0byBwcmUtZ2NjLTQuNCBiZWhhdmlvdXIgb2YgLmVoX2ZyYW1lCitLQlVJTERfQ0ZMQUdTCSs9ICQoY2FsbCBjYy1vcHRpb24sLWZuby1kd2FyZjItY2ZpLWFzbSkKKwogIyBBZGQgdXNlciBzdXBwbGllZCBDUFBGTEFHUywgQUZMQUdTIGFuZCBDRkxBR1MgYXMgdGhlIGxhc3QgYXNzaWdubWVudHMKICMgQnV0IHdhcm4gdXNlciB3aGVuIHdlIGRvIHNvCiB3YXJuLWFzc2lnbiA9IFwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGExMDU3YzIuLjM2NDFlYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjIsNiArNjIsOSBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogLyogT19OT05CTE9DSyBjbGFzaGVzIHdpdGggdGhlIGJpdHMgdXNlZCBmb3Igc29ja2V0IHR5cGVzLiAgVGhlcmVmb3JlIHdlCiAgKiBoYXZlIHRvIGRlZmluZSBTT0NLX05PTkJMT0NLIHRvIGEgZGlmZmVyZW50IHZhbHVlIGhlcmUuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N0YXRmcy5oCmluZGV4IGRlMzVjZDQuLmNjZDJlMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vc3RhdGZzLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zdGF0ZnMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0FMUEhBX1NUQVRGU19ICiAjZGVmaW5lIF9BTFBIQV9TVEFURlNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogQWxwaGEgaXMgdGhlIG9ubHkgNjQtYml0IHBsYXRmb3JtIHdpdGggMzItYml0IHN0YXRmcy4gQW5kIGRvZXNuJ3QKICAgIGV2ZW4gc2VlbSB0byBpbXBsZW1lbnQgc3RhdGZzNjQgKi8KICNkZWZpbmUgX19zdGF0ZnNfd29yZCBfX3UzMgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA2OGU3MDg5Li40ZDY4MmIxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0FMUEhBX1NXQUJfSAogI2RlZmluZSBfQUxQSEFfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2VudHJ5LlMgYi9hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TCmluZGV4IGU0YTU0YjYxNS4uYjQ1ZDkxMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lbnRyeS5TCkBAIC05MDMsOCArOTAzLDkgQEAKIAlzdHEJJDI2LCAwKCRzcCkKIAkucHJvbG9ndWUgMAogCisJbW92CSQzMSwgJDE3CiAJbGRhCSQxNiwgOCgkc3ApCi0JanNyCSQyNiwgZG9fcGlwZQorCWpzcgkkMjYsIGRvX3BpcGVfZmxhZ3MKIAogCWxkcQkkMjYsIDAoJHNwKQogCWJuZQkkMCwgMWYKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKaW5kZXggNzAzNzMxYS4uZDM4MTJlYiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGlycSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpcnFdKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaXJxLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpcnFdLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlYyVzIiwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9hbHBoYS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMKaW5kZXggZTE2YWViNi4uNjdjMTlmOCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMKQEAgLTY0LDcgKzY0LDcgQEAKIAkJc21wX3BlcmNwdV90aW1lcl9pbnRlcnJ1cHQocmVncyk7CiAJCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkJaWYgKGNwdSAhPSBib290X2NwdWlkKSB7Ci0JCSAgICAgICAga3N0YXRfY3B1KGNwdSkuaXJxc1tSVENfSVJRXSsrOworCQkgICAgICAgIGtzdGF0X2luY3JfaXJxc190aGlzX2NwdShSVENfSVJRLCBpcnFfdG9fZGVzYyhSVENfSVJRKSk7CiAJCX0gZWxzZSB7CiAJCQloYW5kbGVfaXJxKFJUQ19JUlEpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKaW5kZXggYWU0MWYwOS4uNDJlZTA1OSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYwpAQCAtNDYsOCArNDYsNiBAQAogI2luY2x1ZGUgPGFzbS9od3JwYi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAotZXh0ZXJuIGludCBkb19waXBlKGludCAqKTsKLQogLyoKICAqIEJyayBuZWVkcyB0byByZXR1cm4gYW4gZXJyb3IuICBTdGlsbCBzdXBwb3J0IExpbnV4J3MgYnJrKDApIHF1ZXJ5IGlkaW9tLAogICogd2hpY2ggT1NGIHByb2dyYW1zIGp1c3Qgc2hvdWxkbid0IGJlIGRvaW5nLiAgV2UncmUgc3RpbGwgbm90IHF1aXRlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCBkYmZkZjg3Li5lMDJiODkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTI0MSw2ICsyNDEsNyBAQAogY29uZmlnIEFSQ0hfQVQ5MQogCWJvb2wgIkF0bWVsIEFUOTEiCiAJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCXNlbGVjdCBIQVZFX0NMSwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBBdG1lbCBBVDkxUk05MjAwLApAQCAtMjc1LDYgKzI3NiwxNCBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgQ2lycnVzIEVQOTN4eCBzZXJpZXMgb2YgQ1BVcy4KIAorY29uZmlnIEFSQ0hfR0VNSU5JCisJYm9vbCAiQ29ydGluYSBTeXN0ZW1zIEdlbWluaSIKKwlzZWxlY3QgQ1BVX0ZBNTI2CisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBDb3J0aW5hIFN5c3RlbXMgR2VtaW5pIGZhbWlseSBTb0NzCisKIGNvbmZpZyBBUkNIX0ZPT1RCUklER0UKIAlib29sICJGb290QnJpZGdlIgogCXNlbGVjdCBDUFVfU0ExMTAKQEAgLTQ3NywxMiArNDg2LDI5IEBACiAJc2VsZWN0IEhBVkVfQ0xLCiAJc2VsZWN0IENPTU1PTl9DTEtERVYKIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBUSUNLX09ORVNIT1QKKwlzZWxlY3QgUExBVF9QWEEKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJbnRlbC9NYXJ2ZWxsJ3MgUFhBMnh4L1BYQTN4eCBwcm9jZXNzb3IgbGluZS4KIAorY29uZmlnIEFSQ0hfTU1QCisJYm9vbCAiTWFydmVsbCBQWEExNjgvOTEwIgorCWRlcGVuZHMgb24gTU1VCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisJc2VsZWN0IFRJQ0tfT05FU0hPVAorCXNlbGVjdCBQTEFUX1BYQQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIE1hcnZlbGwncyBQWEExNjgvOTEwIHByb2Nlc3NvciBsaW5lLgorCiBjb25maWcgQVJDSF9SUEMKIAlib29sICJSaXNjUEMiCiAJc2VsZWN0IEFSQ0hfQUNPUk4KQEAgLTU5OCw2ICs2MjQsOCBAQAogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9LY29uZmlnIgogCitzb3VyY2UgImFyY2gvYXJtL21hY2gtZ2VtaW5pL0tjb25maWciCisKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1pb3AzMngvS2NvbmZpZyIKQEAgLTYxNyw2ICs2NDUsOSBAQAogc291cmNlICJhcmNoL2FybS9tYWNoLW12Nzh4eDAvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnIgorc291cmNlICJhcmNoL2FybS9wbGF0LXB4YS9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvYXJtL21hY2gtbW1wL0tjb25maWciCiAKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZyIKIApAQCAtNjg2LDEyICs3MTcsMTUgQEAKIGNvbmZpZyBQTEFUX09SSU9OCiAJYm9vbAogCitjb25maWcgUExBVF9QWEEKKwlib29sCisKIHNvdXJjZSBhcmNoL2FybS9tbS9LY29uZmlnCiAKIGNvbmZpZyBJV01NWFQKIAlib29sICJFbmFibGUgaVdNTVh0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBDUFVfWFNDQUxFIHx8IENQVV9YU0MzCi0JZGVmYXVsdCB5IGlmIFBYQTI3eCB8fCBQWEEzeHgKKwlkZXBlbmRzIG9uIENQVV9YU0NBTEUgfHwgQ1BVX1hTQzMgfHwgQ1BVX01PSEFXSworCWRlZmF1bHQgeSBpZiBQWEEyN3ggfHwgUFhBM3h4IHx8IEFSQ0hfTU1QCiAJaGVscAogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIGlXTU1YdCBjb250ZXh0IHN3aXRjaGluZyBhdCBydW4gdGltZSBpZgogCSAgcnVubmluZyBvbiBhIENQVSB0aGF0IHN1cHBvcnRzIGl0LgpAQCAtOTE1LDYgKzk0OSwyMyBAQAogCWRlZmF1bHQgIjIiCiAJZGVwZW5kcyBvbiBORUVEX01VTFRJUExFX05PREVTCiAKK2NvbmZpZyBISUdITUVNCisJYm9vbCAiSGlnaCBNZW1vcnkgU3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIE1NVSAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBUaGUgYWRkcmVzcyBzcGFjZSBvZiBBUk0gcHJvY2Vzc29ycyBpcyBvbmx5IDQgR2lnYWJ5dGVzIGxhcmdlCisJICBhbmQgaXQgaGFzIHRvIGFjY29tbW9kYXRlIHVzZXIgYWRkcmVzcyBzcGFjZSwga2VybmVsIGFkZHJlc3MKKwkgIHNwYWNlIGFzIHdlbGwgYXMgc29tZSBtZW1vcnkgbWFwcGVkIElPLiBUaGF0IG1lYW5zIHRoYXQsIGlmIHlvdQorCSAgaGF2ZSBhIGxhcmdlIGFtb3VudCBvZiBwaHlzaWNhbCBtZW1vcnkgYW5kL29yIElPLCBub3QgYWxsIG9mIHRoZQorCSAgbWVtb3J5IGNhbiBiZSAicGVybWFuZW50bHkgbWFwcGVkIiBieSB0aGUga2VybmVsLiBUaGUgcGh5c2ljYWwKKwkgIG1lbW9yeSB0aGF0IGlzIG5vdCBwZXJtYW5lbnRseSBtYXBwZWQgaXMgY2FsbGVkICJoaWdoIG1lbW9yeSIuCisKKwkgIERlcGVuZGluZyBvbiB0aGUgc2VsZWN0ZWQga2VybmVsL3VzZXIgbWVtb3J5IHNwbGl0LCBtaW5pbXVtCisJICB2bWFsbG9jIHNwYWNlIGFuZCBhY3R1YWwgYW1vdW50IG9mIFJBTSwgeW91IG1heSBub3QgbmVlZCB0aGlzCisJICBvcHRpb24gd2hpY2ggc2hvdWxkIHJlc3VsdCBpbiBhIHNsaWdodGx5IGZhc3RlciBrZXJuZWwuCisKKwkgIElmIHVuc3VyZSwgc2F5IG4uCisKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAogY29uZmlnIExFRFMKQEAgLTEwOTIsNyArMTE0Myw3IEBACiAKIGNvbmZpZyBDUFVfRlJFUV9TQTExMDAKIAlib29sCi0JZGVwZW5kcyBvbiBDUFVfRlJFUSAmJiAoU0ExMTAwX0gzMTAwIHx8IFNBMTEwMF9IMzYwMCB8fCBTQTExMDBfSDM4MDAgfHwgU0ExMTAwX0xBUlQgfHwgU0ExMTAwX1BMRUIgfHwgU0ExMTAwX0JBREdFNCB8fCBTQTExMDBfSEFDS0tJVCkKKwlkZXBlbmRzIG9uIENQVV9GUkVRICYmIChTQTExMDBfSDMxMDAgfHwgU0ExMTAwX0gzNjAwIHx8IFNBMTEwMF9MQVJUIHx8IFNBMTEwMF9QTEVCIHx8IFNBMTEwMF9CQURHRTQgfHwgU0ExMTAwX0hBQ0tLSVQpCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBDUFVfRlJFUV9TQTExMTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCmluZGV4IDE5MmVlMDEuLmE3MWZkOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwpAQCAtMiwxOCArMiwyOSBAQAogCiBzb3VyY2UgImxpYi9LY29uZmlnLmRlYnVnIgogCi0jIFJNSyB3YW50cyBhcm0ga2VybmVscyBjb21waWxlZCB3aXRoIGZyYW1lIHBvaW50ZXJzIHNvIGhhcmR3aXJlIHRoaXMgdG8geS4KKyMgUk1LIHdhbnRzIGFybSBrZXJuZWxzIGNvbXBpbGVkIHdpdGggZnJhbWUgcG9pbnRlcnMgb3Igc3RhY2sgdW53aW5kaW5nLgogIyBJZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgYW5kIGFyZSB3aWxsaW5nIHRvIGxpdmUgd2l0aG91dCBzdGFjawogIyB0cmFjZXMsIHlvdSBjYW4gZ2V0IGEgc2xpZ2h0bHkgc21hbGxlciBrZXJuZWwgYnkgc2V0dGluZyB0aGlzIG9wdGlvbiB0bwogIyBuLCBidXQgdGhlbiBSTUsgd2lsbCBoYXZlIHRvIGtpbGwgeW91IDspLgogY29uZmlnIEZSQU1FX1BPSU5URVIKIAlib29sCi0JZGVmYXVsdCB5CisJZGVmYXVsdCB5IGlmICFBUk1fVU5XSU5ECiAJaGVscAogCSAgSWYgeW91IHNheSBOIGhlcmUsIHRoZSByZXN1bHRpbmcga2VybmVsIHdpbGwgYmUgc2xpZ2h0bHkgc21hbGxlciBhbmQKLQkgIGZhc3Rlci4gSG93ZXZlciwgd2hlbiBhIHByb2JsZW0gb2NjdXJzIHdpdGggdGhlIGtlcm5lbCwgdGhlCi0JICBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlcG9ydGVkIGlzIHNldmVyZWx5IGxpbWl0ZWQuIE1vc3QgcGVvcGxlCi0JICBzaG91bGQgc2F5IFkgaGVyZS4KKwkgIGZhc3Rlci4gSG93ZXZlciwgaWYgbmVpdGhlciBGUkFNRV9QT0lOVEVSIG5vciBBUk1fVU5XSU5EIGFyZSBlbmFibGVkLAorCSAgd2hlbiBhIHByb2JsZW0gb2NjdXJzIHdpdGggdGhlIGtlcm5lbCwgdGhlIGluZm9ybWF0aW9uIHRoYXQgaXMKKwkgIHJlcG9ydGVkIGlzIHNldmVyZWx5IGxpbWl0ZWQuCisKK2NvbmZpZyBBUk1fVU5XSU5ECisJYm9vbCAiRW5hYmxlIHN0YWNrIHVud2luZGluZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQUVBQkkgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdGFjayB1bndpbmRpbmcgc3VwcG9ydCBpbiB0aGUga2VybmVsCisJICB1c2luZyB0aGUgaW5mb3JtYXRpb24gYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgdGhlCisJICBjb21waWxlci4gVGhlIHJlc3VsdGluZyBrZXJuZWwgaW1hZ2UgaXMgc2xpZ2h0bHkgYmlnZ2VyIGJ1dAorCSAgdGhlIHBlcmZvcm1hbmNlIGlzIG5vdCBhZmZlY3RlZC4gQ3VycmVudGx5LCB0aGlzIGZlYXR1cmUKKwkgIG9ubHkgd29ya3Mgd2l0aCBFQUJJIGNvbXBpbGVycy4gSWYgdW5zdXJlIHNheSBZLgogCiBjb25maWcgREVCVUdfVVNFUgogCWJvb2wgIlZlcmJvc2UgdXNlciBmYXVsdCBtZXNzYWdlcyIKQEAgLTY2LDcgKzc3LDcgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIGRlYnVnIHByaW50IHJvdXRpbmVzIHRvIGRpcmVjdCB0aGVpcgogCSAgb3V0cHV0IHRvIHRoZSBFbWJlZGRlZElDRSBtYWNyb2NlbGwncyBEQ0MgY2hhbm5lbCB1c2luZwogCSAgY28tcHJvY2Vzc29yIDE0LiBUaGlzIGlzIGtub3duIHRvIHdvcmsgb24gdGhlIEFSTTkgc3R5bGUgSUNFCi0JICBjaGFubmVsLgorCSAgY2hhbm5lbCBhbmQgb24gdGhlIFhTY2FsZSB3aXRoIHRoZSBQRUVESS4KIAogCSAgSXQgZG9lcyBpbmNsdWRlIGEgdGltZW91dCB0byBlbnN1cmUgdGhhdCB0aGUgc3lzdGVtIGRvZXMgbm90CiAJICB0b3RhbGx5IGZyZWV6ZSB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgY29ubmVjdGVkIHRvIHJlYWQuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDI0ZTBmMDEuLmU4NDcyOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC03Miw2ICs3Miw3IEBACiB0dW5lLSQoQ09ORklHX0NQVV9BUk05MjJUKQk6PS1tdHVuZT1hcm05dGRtaQogdHVuZS0kKENPTkZJR19DUFVfQVJNOTI1VCkJOj0tbXR1bmU9YXJtOXRkbWkKIHR1bmUtJChDT05GSUdfQ1BVX0FSTTkyNlQpCTo9LW10dW5lPWFybTl0ZG1pCit0dW5lLSQoQ09ORklHX0NQVV9GQTUyNikJOj0tbXR1bmU9YXJtOXRkbWkKIHR1bmUtJChDT05GSUdfQ1BVX1NBMTEwKQk6PS1tdHVuZT1zdHJvbmdhcm0xMTAKIHR1bmUtJChDT05GSUdfQ1BVX1NBMTEwMCkJOj0tbXR1bmU9c3Ryb25nYXJtMTEwMAogdHVuZS0kKENPTkZJR19DUFVfWFNDQUxFKQk6PSQoY2FsbCBjYy1vcHRpb24sLW10dW5lPXhzY2FsZSwtbXR1bmU9c3Ryb25nYXJtMTEwKSAtV2EsLW1jcHU9eHNjYWxlCkBAIC04NSw2ICs4NiwxMCBAQAogQ0ZMQUdTX0FCSQk6PSQoY2FsbCBjYy1vcHRpb24sLW1hcGNzLTMyLC1tYWJpPWFwY3MtZ251KSAkKGNhbGwgY2Mtb3B0aW9uLC1tbm8tdGh1bWItaW50ZXJ3b3JrLCkKIGVuZGlmCiAKK2lmZXEgKCQoQ09ORklHX0FSTV9VTldJTkQpLHkpCitDRkxBR1NfQUJJCSs9LWZ1bndpbmQtdGFibGVzCitlbmRpZgorCiAjIE5lZWQgLVVhcm0gZm9yIGdjYyA8IDMueAogS0JVSUxEX0NGTEFHUwkrPSQoQ0ZMQUdTX0FCSSkgJChhcmNoLXkpICQodHVuZS15KSAkKGNhbGwgY2Mtb3B0aW9uLC1tc2hvcnQtbG9hZC1ieXRlcywkKGNhbGwgY2Mtb3B0aW9uLC1tYWxpZ25tZW50LXRyYXBzLCkpIC1tc29mdC1mbG9hdCAtVWFybQogS0JVSUxEX0FGTEFHUwkrPSQoQ0ZMQUdTX0FCSSkgJChhcmNoLXkpICQodHVuZS15KSAtbXNvZnQtZmxvYXQKQEAgLTEwNSw4ICsxMTAsMTEgQEAKICB0ZXh0b2ZzLSQoQ09ORklHX1NBMTExMSkJICAgOj0gMHgwMDIwODAwMAogZW5kaWYKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUFhBKQkgICA6PSBweGEKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTU1QKQkgICA6PSBtbXAKKyAgICBwbGF0LSQoQ09ORklHX1BMQVRfUFhBKQkgICA6PSBweGEKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTDcyMDApCSAgIDo9IGw3MjAwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpIDo9IGludGVncmF0b3IKKyBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfR0VNSU5JKSAgICAgOj0gZ2VtaW5pCiAgdGV4dG9mcy0kKENPTkZJR19BUkNIX0NMUFM3MTFYKSAgIDo9IDB4MDAwMjgwMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfQ0xQUzcxMVgpICAgOj0gY2xwczcxMXgKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfSU9QMzJYKQkgICA6PSBpb3AzMngKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IDc3ZDYxNDIzLi5iMzcxZmJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTI3LDYgKzI3LDEyIEBACiAJCS5tYWNybwl3cml0ZWIsIGNoLCByYgogCQltY3IJcDE0LCAwLCBcY2gsIGMwLCBjNSwgMAogCQkuZW5kbQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKKwkJLm1hY3JvCWxvYWRzcCwgcmIKKwkJLmVuZG0KKwkJLm1hY3JvCXdyaXRlYiwgY2gsIHJiCisJCW1jcglwMTQsIDAsIFxjaCwgYzgsIGMwLCAwCisJCS5lbmRtCiAjZWxzZQogCQkubWFjcm8JbG9hZHNwLCByYgogCQkuZW5kbQpAQCAtNDU5LDYgKzQ2NSwyMCBAQAogCQltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA0CUAgSVNCCiAJCW1vdglwYywgcjEyCiAKK19fZmE1MjZfY2FjaGVfb246CisJCW1vdglyMTIsIGxyCisJCWJsCV9fc2V0dXBfbW11CisJCW1vdglyMCwgIzAKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAlAIEludmFsaWRhdGUgd2hvbGUgY2FjaGUKKwkJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwkJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAlAIGZsdXNoIFVUTEIKKwkJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAlAIHJlYWQgY29udHJvbCByZWcKKwkJb3JyCXIwLCByMCwgIzB4MTAwMAkJQCBJLWNhY2hlIGVuYWJsZQorCQlibAlfX2NvbW1vbl9tbXVfY2FjaGVfb24KKwkJbW92CXIwLCAjMAorCQltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCUAgZmx1c2ggVVRMQgorCQltb3YJcGMsIHIxMgorCiBfX2FybTZfbW11X2NhY2hlX29uOgogCQltb3YJcjEyLCBscgogCQlibAlfX3NldHVwX21tdQpAQCAtNjMwLDEyICs2NTAsMzAgQEAKIAkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKIAkJYglfX2FybXY0X21tdV9jYWNoZV9mbHVzaAogCisJCS53b3JkCTB4NTYxNTgwMDAJCUAgUFhBMTY4CisJCS53b3JkCTB4ZmZmZmYwMDAKKwkJYiBfX2FybXY0X21tdV9jYWNoZV9vbgorCQliIF9fYXJtdjRfbW11X2NhY2hlX29mZgorCQliIF9fYXJtdjV0ZWpfbW11X2NhY2hlX2ZsdXNoCisKKwkJLndvcmQJMHg1NjA1NjkzMAorCQkud29yZAkweGZmMGZmZmYwCQlAIFBYQTkzNQorCQliCV9fYXJtdjRfbW11X2NhY2hlX29uCisJCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCisJCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKKwogCQkud29yZAkweDU2MDUwMDAwCQlAIEZlcm9jZW9uCiAJCS53b3JkCTB4ZmYwZjAwMDAKIAkJYglfX2FybXY0X21tdV9jYWNoZV9vbgogCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgogCQliCV9fYXJtdjV0ZWpfbW11X2NhY2hlX2ZsdXNoCiAKKwkJLndvcmQJMHg2NjAxNTI2MQkJQCBGQTUyNgorCQkud29yZAkweGZmMDFmZmYxCisJCWIJX19mYTUyNl9jYWNoZV9vbgorCQliCV9fYXJtdjRfbW11X2NhY2hlX29mZgorCQliCV9fZmE1MjZfY2FjaGVfZmx1c2gKKwogCQlAIFRoZXNlIG1hdGNoIG9uIHRoZSBhcmNoaXRlY3R1cmUgSUQKIAogCQkud29yZAkweDAwMDIwMDAwCQlAIEFSTXY0VApAQCAtNzc1LDYgKzgxMywxMiBAQAogCQltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAlAIGRyYWluIFdCCiAJCW1vdglwYywgbHIKIAkJCitfX2ZhNTI2X2NhY2hlX2ZsdXNoOgorCQltb3YJcjEsICMwCisJCW1jcglwMTUsIDAsIHIxLCBjNywgYzE0LCAwCUAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBjYWNoZQorCQltY3IJcDE1LCAwLCByMSwgYzcsIGM1LCAwCUAgZmx1c2ggSSBjYWNoZQorCQltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAlAIGRyYWluIFdCCisJCW1vdglwYywgbHIKIAogX19hcm12Nl9tbXVfY2FjaGVfZmx1c2g6CiAJCW1vdglyMSwgIzAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvbWlzYy5jCmluZGV4IDNmYzA4NDEuLjM5M2M4MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtNDYsNiArNDYsMjEgQEAKIAogCWFzbSgibWNyIHAxNCwgMCwgJTAsIGMwLCBjNSwgMCIgOiA6ICJyIiAoY2gpKTsKIH0KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9YU0NBTEUpCisKK3N0YXRpYyB2b2lkIGljZWRjY19wdXRjKGludCBjaCkKK3sKKwlpbnQgc3RhdHVzLCBpID0gMHg0MDAwMDAwOworCisJZG8geworCQlpZiAoLS1pIDwgMCkKKwkJCXJldHVybjsKKworCQlhc20gdm9sYXRpbGUgKCJtcmMgcDE0LCAwLCAlMCwgYzE0LCBjMCwgMCIgOiAiPXIiIChzdGF0dXMpKTsKKwl9IHdoaWxlIChzdGF0dXMgJiAoMSA8PCAyOCkpOworCisJYXNtKCJtY3IgcDE0LCAwLCAlMCwgYzgsIGMwLCAwIiA6IDogInIiIChjaCkpOworfQogCiAjZWxzZQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4gYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KaW5kZXggMTUzYTA3ZS4uYTU5MjRiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgpAQCAtMTEsNiArMTEsMTEgQEAKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7CisgIC9ESVNDQVJELyA6IHsKKyAgICAqKC5BUk0uZXhpZHgqKQorICAgICooLkFSTS5leHRhYiopCisgIH0KKwogICAuID0gVEVYVF9TVEFSVDsKICAgX3RleHQgPSAuOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vY2xrZGV2LmMgYi9hcmNoL2FybS9jb21tb24vY2xrZGV2LmMKaW5kZXggMTAzN2JiYS4uNTU4OTQ0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYwpAQCAtNjIsOSArNjIsOCBAQAogCXJldHVybiBjbGs7CiB9CiAKLXN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3N5cyhjb25zdCBjaGFyICpkZXZfaWQsIGNvbnN0IGNoYXIgKmNvbl9pZCkKIHsKLQljb25zdCBjaGFyICpkZXZfaWQgPSBkZXYgPyBkZXZfbmFtZShkZXYpIDogTlVMTDsKIAlzdHJ1Y3QgY2xrICpjbGs7CiAKIAltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwpAQCAtNzUsNiArNzQsMTQgQEAKIAogCXJldHVybiBjbGsgPyBjbGsgOiBFUlJfUFRSKC1FTk9FTlQpOwogfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3N5cyk7CisKK3N0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpCit7CisJY29uc3QgY2hhciAqZGV2X2lkID0gZGV2ID8gZGV2X25hbWUoZGV2KSA6IE5VTEw7CisKKwlyZXR1cm4gY2xrX2dldF9zeXMoZGV2X2lkLCBjb25faWQpOworfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKIAogdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwppbmRleCBmMDMwZjA3Li43MzRhYzkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CkBAIC0zNDksNiArMzUwLDEyIEBACiAKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAKKwlpZiAoUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJZGV2X2VycihkZXYsICJETUEgYnVmZmVyIGJvdW5jaW5nIG9mIEhJR0hNRU0gcGFnZXMgIgorCQkJICAgICAiaXMgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiB+MDsKKwl9CisKIAlyZXR1cm4gbWFwX3NpbmdsZShkZXYsIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgc2l6ZSwgZGlyKTsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX21hcF9wYWdlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jIGIvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKaW5kZXggNjk3YzY0OS4uNzcxM2EwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3Njb29wLmMKQEAgLTEyNCwzNyArMTI0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgc2hvcnQgc2V0X3Njb29wX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCBiaXQpCi17Ci0JdW5zaWduZWQgc2hvcnQgZ3Bpb19iaXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCXN0cnVjdCBzY29vcF9kZXYgKnNkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFnKTsKLQlncGlvX2JpdCA9IGlvcmVhZDE2KHNkZXYtPmJhc2UgKyBTQ09PUF9HUFdSKSB8IGJpdDsKLQlpb3dyaXRlMTYoZ3Bpb19iaXQsIHNkZXYtPmJhc2UgKyBTQ09PUF9HUFdSKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFnKTsKLQotCXJldHVybiBncGlvX2JpdDsKLX0KLQotdW5zaWduZWQgc2hvcnQgcmVzZXRfc2Nvb3BfZ3BpbyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IGJpdCkKLXsKLQl1bnNpZ25lZCBzaG9ydCBncGlvX2JpdDsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0Jc3RydWN0IHNjb29wX2RldiAqc2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNkZXYtPnNjb29wX2xvY2ssIGZsYWcpOwotCWdwaW9fYml0ID0gaW9yZWFkMTYoc2Rldi0+YmFzZSArIFNDT09QX0dQV1IpICYgfmJpdDsKLQlpb3dyaXRlMTYoZ3Bpb19iaXQsIHNkZXYtPmJhc2UgKyBTQ09PUF9HUFdSKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZGV2LT5zY29vcF9sb2NrLCBmbGFnKTsKLQotCXJldHVybiBncGlvX2JpdDsKLX0KLQotRVhQT1JUX1NZTUJPTChzZXRfc2Nvb3BfZ3Bpbyk7Ci1FWFBPUlRfU1lNQk9MKHJlc2V0X3Njb29wX2dwaW8pOwotCiB1bnNpZ25lZCBzaG9ydCByZWFkX3Njb29wX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHJlZykKIHsKIAlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jIGIvYXJjaC9hcm0vY29tbW9uL3NoYXJwc2xfcG0uYwppbmRleCA3ODBiYmY3Li4xNDBmMWQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BtLmMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvcG0uaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ydGMuaD4KICNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2hhcnBzbF9wbS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2FjczVrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYWNzNWtfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYWI0ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2FjczVrX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEyMzMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yNy1zaW10ZWMtbWljcmVsMQorIyBUdWUgRGVjIDE2IDEzOjMxOjM0IDIwMDgKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX1NVUFBPUlRTX0FPVVQ9eQorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0tTODY5NT15CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIEtlbmRpbi9NaWNyZWwgS1M4Njk1IEltcGxlbWVudGF0aW9ucworIworQ09ORklHX01BQ0hfS1M4Njk1PXkKK0NPTkZJR19NQUNIX0RTTTMyMD15CitDT05GSUdfTUFDSF9BQ1M1Sz15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjJUPXkKK0NPTkZJR19DUFVfMzJ2NFQ9eQorQ09ORklHX0NQVV9BQlJUX0VWNFQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WNFdUPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCisjIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19QQ0k9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKK0NPTkZJR19QQ0lfREVCVUc9eQorQ09ORklHX1BDQ0FSRD15CisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT15CitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorQ09ORklHX0NBUkRCVVM9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworQ09ORklHX1lFTlRBPXkKK0NPTkZJR19ZRU5UQV9PMj15CitDT05GSUdfWUVOVEFfUklDT0g9eQorQ09ORklHX1lFTlRBX1RJPXkKK0NPTkZJR19ZRU5UQV9FTkVfVFVORT15CitDT05GSUdfWUVOVEFfVE9TSElCQT15CisjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAorIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0NBUkRfTk9OU1RBVElDPXkKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJtZW09MzJNIGNvbnNvbGU9dHR5UzAsMTE1MjAwIGluaXRyZD0weDIwNDEwMDAwLDMxNDU3Mjggcm9vdD0vZGV2L3JhbTAgcnciCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKKyMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfR0VPTUVUUlkgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUD15CitDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHg4MDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9NAorIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorQ09ORklHX0FSTV9LUzg2OTVfRVRIRVI9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTl84MDIxMT15CisjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAorQ09ORklHX1BSSVNNNTQ9bQorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0tTODY5NT15CitDT05GSUdfU0VSSUFMX0tTODY5NV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT1tCisjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19BQ1M1S0NBTj15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKK0NPTkZJR19JMkNfQUxHT0JJVD15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19HUElPPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorQ09ORklHX0dQSU9fUENBOTUzWD15CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0tTODY5NV9XQVRDSERPRz15CisjIENPTkZJR19BTElNNzEwMV9XRFQgaXMgbm90IHNldAorCisjCisjIFBDSS1iYXNlZCBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CitDT05GSUdfSElEX0RFQlVHPXkKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBIb3N0IG9yIEdhZGdldCBzdXBwb3J0IHRvIHNlZSBJbnZlbnRyYSBvcHRpb25zCisjCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzPXkKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorCisjCisjIFZvbHRhZ2UgYW5kIEN1cnJlbnQgcmVndWxhdG9ycworIworIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9WSVJUVUFMX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUz15CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKK0NPTkZJR19KRkZTMl9SVUJJTj15CisjIENPTkZJR19KRkZTMl9DTU9ERV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DTU9ERV9QUklPUklUWT15CisjIENPTkZJR19KRkZTMl9DTU9ERV9TSVpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NNT0RFX0ZBVk9VUkxaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlRSQUNFPXkKK0NPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19QQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKKyMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2FjczVrX3RpbnlfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hY3M1a190aW55X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTNkMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hY3M1a190aW55X2RlZmNvbmZpZwpAQCAtMCwwICsxLDk0MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI3LXNpbXRlYy1taWNyZWwxCisjIFR1ZSBKYW4gIDYgMTM6MjM6MDcgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfU1VQUE9SVFNfQU9VVD15CitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CisjIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBVkVfQ0xLIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0tTODY5NT15CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU003WDAwQSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworCisjCisjIEtlbmRpbi9NaWNyZWwgS1M4Njk1IEltcGxlbWVudGF0aW9ucworIworIyBDT05GSUdfTUFDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9EU00zMjAgaXMgbm90IHNldAorQ09ORklHX01BQ0hfQUNTNUs9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfQVJNOTIyVD15CitDT05GSUdfQ1BVXzMydjRUPXkKK0NPTkZJR19DUFVfQUJSVF9FVjRUPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjRXVD15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eUFNMCwxMTUyMDAgaW5pdD0vYmluL3NoIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzCisjCisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCisjIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKK0NPTkZJR19BUk1fS1M4Njk1X0VUSEVSPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfS1M4Njk1PXkKK0NPTkZJR19TRVJJQUxfS1M4Njk1X0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfQUNTNUtDQU49eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09CSVQ9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworQ09ORklHX0kyQ19HUElPPXkKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19QQ0E5NTNYPXkKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19LUzg2OTVfV0FUQ0hET0c9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworQ09ORklHX1NTQl9QT1NTSUJMRT15CisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1BDRjg1NjM9eQorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgVm9sdGFnZSBhbmQgQ3VycmVudCByZWd1bGF0b3JzCisjCisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TPXkKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CitDT05GSUdfU1FVQVNIRlM9eQorIyBDT05GSUdfU1FVQVNIRlNfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1NRVUFTSEZTX0ZSQUdNRU5UX0NBQ0hFX1NJWkU9MworIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZUUkFDRT15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19VU0VSPXkKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKKyMgQ09ORklHX0dFTkVSSUNfRklORF9GSVJTVF9CSVQgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2Fzc2FiZXRfZGVmY29uZmlnCmluZGV4IGIxY2QzMzEuLmM2NmRkMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYXNzYWJldF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hc3NhYmV0X2RlZmNvbmZpZwpAQCAtODksNyArODksNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvYmFkZ2U0X2RlZmNvbmZpZwppbmRleCA4MDIyMmZlLi5mMjY0ODQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2JhZGdlNF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9iYWRnZTRfZGVmY29uZmlnCkBAIC05MSw3ICs5MSw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKIENPTkZJR19TQTExMDBfQkFER0U0PXkKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY2VyZmN1YmVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKaW5kZXggZWUxMzBiNS4uMmI0YzA2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jZXJmY3ViZV9kZWZjb25maWcKQEAgLTkzLDcgKzkzLDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2NtX3gyeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTdiNzkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jbV94Mnh4X2RlZmNvbmZpZwpAQCAtMCwwICsxLDE5NjIgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKKyMgU3VuIEZlYiAgMSAxNjozMTozNiAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19aT05FX0RNQT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CitDT05GSUdfUENJX1FVSVJLUz15CisjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FWEVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9BUk1DT1JFPXkKKyMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAorQ09ORklHX1BYQTI1eD15CitDT05GSUdfUFhBMjd4PXkKK0NPTkZJR19QWEFfU1NQPXkKKyMgQ09ORklHX1BYQV9QV00gaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0lXTU1YVD15CitDT05GSUdfWFNDQUxFX1BNVT15CitDT05GSUdfRE1BQk9VTkNFPXkKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworQ09ORklHX1BDST15CitDT05GSUdfUENJX1NZU0NBTEw9eQorQ09ORklHX1BDSV9IT1NUX0lURTgxNTI9eQorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorQ09ORklHX1BDSV9MRUdBQ1k9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0NBUkQ9bQorIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUE9bQorQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CitDT05GSUdfUENNQ0lBX0lPQ1RMPXkKK0NPTkZJR19DQVJEQlVTPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKK0NPTkZJR19ZRU5UQT1tCisjIENPTkZJR19ZRU5UQV9PMiBpcyBub3Qgc2V0CisjIENPTkZJR19ZRU5UQV9SSUNPSCBpcyBub3Qgc2V0CitDT05GSUdfWUVOVEFfVEk9eQorIyBDT05GSUdfWUVOVEFfRU5FX1RVTkUgaXMgbm90IHNldAorIyBDT05GSUdfWUVOVEFfVE9TSElCQSBpcyBub3Qgc2V0CisjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAorIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfUFhBMlhYPW0KK0NPTkZJR19QQ0NBUkRfTk9OU1RBVElDPW0KKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PTFmMDMgbWVtPTMyTSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fU0xFRVA9eQorQ09ORklHX1NVU1BFTkQ9eQorQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CitDT05GSUdfQVBNX0VNVUxBVElPTj1tCitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorQ09ORklHX0JUPW0KK0NPTkZJR19CVF9MMkNBUD1tCitDT05GSUdfQlRfU0NPPW0KK0NPTkZJR19CVF9SRkNPTU09bQorIyBDT05GSUdfQlRfUkZDT01NX1RUWSBpcyBub3Qgc2V0CitDT05GSUdfQlRfQk5FUD1tCisjIENPTkZJR19CVF9CTkVQX01DX0ZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUiBpcyBub3Qgc2V0CitDT05GSUdfQlRfSElEUD1tCisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lEVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJUM0MgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkxVRUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKK0NPTkZJR19MSUI4MDIxMT1tCisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX05PU1dBUD15CisjIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorQ09ORklHX01URF9DRklfQU1EU1REPXkKK0NPTkZJR19NVERfQ0ZJX1NUQUE9eQorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUFhBMlhYPXkKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NIQVJQX1NMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9HUElPPW0KK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0NNX1gyNzA9eQorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPW0KKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BNUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX0FIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwyNCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1NGRj15CisjIENPTkZJR19TQVRBX1NWVyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX01WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfTlYgaXMgbm90IHNldAorIyBDT05GSUdfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9RU1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1BST01JU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TWDQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSUwgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9VTEkgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9WSVRFU1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfSU5JQzE2MlggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTEkgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9BUlRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FUSUlYUCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0MF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9DWVBSRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfRUZBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM2NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDM3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMk4gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9IUFQzWDMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01BUlZFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9NUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09MRFBJSVggaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9ORVRDRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTklOSkEzMiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX09QVElETUEgaXMgbm90IHNldAorQ09ORklHX1BBVEFfUENNQ0lBPW0KKyMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CitDT05GSUdfRE05MDAwPXkKK0NPTkZJR19ETTkwMDBfREVCVUdMRVZFTD0xCisjIENPTkZJR19ETTkwMDBfRk9SQ0VfU0lNUExFX1BIWV9QT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAorQ09ORklHXzgxMzlUT089bQorIyBDT05GSUdfODEzOVRPT19QSU8gaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAorIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTl84MDIxMT15CisjIENPTkZJR19QQ01DSUFfUkFZQ1MgaXMgbm90IHNldAorQ09ORklHX0xJQkVSVEFTPW0KKyMgQ09ORklHX0xJQkVSVEFTX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBU19DUyBpcyBub3Qgc2V0CitDT05GSUdfTElCRVJUQVNfU0RJTz1tCisjIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfQUlST19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ01DSUFfV0wzNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KKyMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0CitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FQTVBPV0VSIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9QWEEyN3g9bQorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKK0NPTkZJR19UT1VDSFNDUkVFTl9VQ0IxNDAwPW0KKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CisjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorCisjCisjIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfU1lOQ0xJTktfQ1MgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBUkRNQU5fNDA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFdJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfREVWUE9SVD15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj1tCitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUFhBPXkKKyMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3MgYWRhcHRlciBJMkMvRERDIGNoYW5uZWwgZHJpdmVycworIworIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKKyMgQ09ORklHX1NQSV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX01BU1RFUj15CisKKyMKKyMgU1BJIE1hc3RlciBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfUFhBMlhYPW0KKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKK0NPTkZJR19VQ0IxNDAwX0NPUkU9bQorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCitDT05GSUdfVklERU9fREVWPW0KK0NPTkZJR19WSURFT19WNEwyX0NPTU1PTj1tCisjIENPTkZJR19WSURFT19BTExPV19WNEwxIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwxX0NPTVBBVD15CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fTUVESUE9bQorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfTUVESUFfQVRUQUNIIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUj1tCitDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFPXkKKyMgQ09ORklHX01FRElBX1RVTkVSX1NJTVBMRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1ggaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzEgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVERBOTg4NyBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjcgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01UMjA2MCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NVDIyNjYgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMTMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1FUMTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9YQzIwMjggaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01YTDUwMDdUIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPW0KK0NPTkZJR19WSURFT0JVRl9HRU49bQorQ09ORklHX1ZJREVPQlVGX0RNQV9TRz1tCitDT05GSUdfVklERU9fQ0FQVFVSRV9EUklWRVJTPXkKKyMgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19GSVhFRF9NSU5PUl9SQU5HRVMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE8gaXMgbm90IHNldAorCisjCisjIEVuY29kZXJzL2RlY29kZXJzIGFuZCBvdGhlciBoZWxwZXIgY2hpcHMKKyMKKworIworIyBBdWRpbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fVFZBVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE3NDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTk4NDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBOTg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19URUE2NDE1QyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19URUE2NDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01TUDM0MDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1M1MzQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NTNTNMMzJBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX001Mjc5MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UTFYzMjBBSUMyM0IgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fV004Nzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1dNODczOSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19WUDI3U01QWCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX09WNzY3MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UQ004MjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxMVggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzE3WCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UVlA1MTRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RWUDUxNTAgaXMgbm90IHNldAorCisjCisjIFZpZGVvIGFuZCBhdWRpbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fQ1gyNTg0MCBpcyBub3Qgc2V0CisKKyMKKyMgTVBFRyB2aWRlbyBlbmNvZGVycworIworIyBDT05GSUdfVklERU9fQ1gyMzQxWCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gZW5jb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX1NBQTcxMjcgaXMgbm90IHNldAorCisjCisjIFZpZGVvIGltcHJvdmVtZW50IGNoaXBzCisjCisjIENPTkZJR19WSURFT19VUEQ2NDAzMUEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVBENjQwODMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19CVDg0OCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxMzQgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSEVYSVVNX09SSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hFWElVTV9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1g4OCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19JVlRWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NBRkVfQ0NJQyBpcyBub3Qgc2V0CitDT05GSUdfU09DX0NBTUVSQT1tCisjIENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEgaXMgbm90IHNldAorQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMT1tCisjIENPTkZJR19TT0NfQ0FNRVJBX01UOVQwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9NVDlWMDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfVFc5OTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9PVjc3MlggaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1BYQTI3eD1tCisjIENPTkZJR19WSURFT19TSF9NT0JJTEVfQ0VVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1Y0TF9VU0JfRFJJVkVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19BREFQVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorIyBDT05GSUdfRkJfUkFERU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWTEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0FWQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DQVJNSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9QWEE9eQorIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAorQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTPXkKK0NPTkZJR19GQl9NQlg9bQorIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9bQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1ZNQVNURVI9eQorQ09ORklHX1NORF9BQzk3X0NPREVDPW0KKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NORF9BUk09eQorQ09ORklHX1NORF9QWEEyWFhfUENNPW0KK0NPTkZJR19TTkRfUFhBMlhYX0xJQj1tCitDT05GSUdfU05EX1BYQTJYWF9MSUJfQUM5Nz15CitDT05GSUdfU05EX1BYQTJYWF9BQzk3PW0KKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNQ0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPW0KK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKK0NPTkZJR19ISURfREVCVUc9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKKyMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CitDT05GSUdfTU1DPW0KKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPW0KK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfUFhBPW0KKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19TRFJJQ09IX0NTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89bQorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfVjMwMjA9eQorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfU0ExMTAwPXkKKyMgQ09ORklHX1JUQ19EUlZfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz1tCitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0wCisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0NDA4NmYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDE0ODEgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI0LXJjMwotIyBNb24gRGVjICAzIDEzOjM2OjA5IDIwMDcKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKLUNPTkZJR19HRU5FUklDX0dQSU89eQotQ09ORklHX0dFTkVSSUNfVElNRT15Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IQVJESVJRUz15Ci1DT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfWk9ORV9ETUE9eQotQ09ORklHX0FSQ0hfTVREX1hJUD15Ci1DT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci1DT05GSUdfTE9DS19LRVJORUw9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLUNPTkZJR19TWVNWSVBDX1NZU0NUTD15Ci1DT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU1lTQ1RMPXkKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX1BSSU5USz15Ci1DT05GSUdfQlVHPXkKLUNPTkZJR19FTEZfQ09SRT15Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKLUNPTkZJR19TTEFCPXkKLSMgQ09ORklHX1NMVUIgaXMgbm90IHNldAotIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLUNPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLUNPTkZJR19NT0RWRVJTSU9OUz15Ci1DT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci1DT05GSUdfTEJEPXkKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotQ09ORklHX0xTRj15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQotQ09ORklHX0RFRkFVTFRfQVM9eQotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1BYQT15Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RSSVpFUFM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0Ci1DT05GSUdfTUFDSF9DT0xJQlJJPXkKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKLUNPTkZJR19QWEEyN3g9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQKLSMKLQotIwotIyBQcm9jZXNzb3IgVHlwZQotIwotQ09ORklHX0NQVV8zMj15Ci1DT05GSUdfQ1BVX1hTQ0FMRT15Ci1DT05GSUdfQ1BVXzMydjU9eQotQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQotQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKLUNPTkZJR19DUFVfVExCX1Y0V0JJPXkKLUNPTkZJR19DUFVfQ1AxNT15Ci1DT05GSUdfQ1BVX0NQMTVfTU1VPXkKLQotIwotIyBQcm9jZXNzb3IgRmVhdHVyZXMKLSMKLUNPTkZJR19BUk1fVEhVTUI9eQotIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19JV01NWFQ9eQotQ09ORklHX1hTQ0FMRV9QTVU9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfUFJFRU1QVD15Ci1DT05GSUdfSFo9MTAwCi1DT05GSUdfQUVBQkk9eQotQ09ORklHX09BQklfQ09NUEFUPXkKLSMgQ09ORklHX0FSQ0hfRElTQ09OVElHTUVNX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKLUNPTkZJR19CT1VOQ0U9eQotQ09ORklHX1ZJUlRfVE9fQlVTPXkKLUNPTkZJR19BTElHTk1FTlRfVFJBUD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MAotQ09ORklHX0NNRExJTkU9IiIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAotIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotQ09ORklHX1BNPXkKLSMgQ09ORklHX1BNX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkRfVVBfUE9TU0lCTEU9eQotQ09ORklHX1NVU1BFTkQ9eQotIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZwotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLUNPTkZJR19QQUNLRVRfTU1BUD15Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotQ09ORklHX05FVF9LRVk9eQotIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15Ci0jIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9ESUFHPXkKLUNPTkZJR19JTkVUX1RDUF9ESUFHPXkKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVURklMVEVSPXkKLSMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgotIwotIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLX0VOQUJMRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKLQotIwotIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLUNPTkZJR19JUF9ORl9RVUVVRT1tCi0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAotIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci1DT05GSUdfVkxBTl84MDIxUT1tCi0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotQ09ORklHX0lSREE9bQotCi0jCi0jIElyREEgcHJvdG9jb2xzCi0jCi1DT05GSUdfSVJMQU49bQotQ09ORklHX0lSQ09NTT1tCi1DT05GSUdfSVJEQV9VTFRSQT15Ci0KLSMKLSMgSXJEQSBvcHRpb25zCi0jCi1DT05GSUdfSVJEQV9DQUNIRV9MQVNUX0xTQVA9eQotQ09ORklHX0lSREFfRkFTVF9SUj15Ci0jIENPTkZJR19JUkRBX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbmZyYXJlZC1wb3J0IGRldmljZSBkcml2ZXJzCi0jCi0KLSMKLSMgU0lSIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfSVJUVFlfU0lSPW0KLQotIwotIyBEb25nbGUgc3VwcG9ydAotIwotIyBDT05GSUdfRE9OR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tJTkdTVU5fRE9OR0xFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tTREFaWkxFX0RPTkdMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19LUzk1OV9ET05HTEUgaXMgbm90IHNldAotCi0jCi0jIE9sZCBTSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0lSUE9SVF9TSVIgaXMgbm90IHNldAotCi0jCi0jIE9sZCBTZXJpYWwgZG9uZ2xlIHN1cHBvcnQKLSMKLQotIwotIyBGSVIgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfRklDUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQ1NfRklSIGlzIG5vdCBzZXQKLUNPTkZJR19CVD1tCi1DT05GSUdfQlRfTDJDQVA9bQotQ09ORklHX0JUX1NDTz1tCi1DT05GSUdfQlRfUkZDT01NPW0KLUNPTkZJR19CVF9SRkNPTU1fVFRZPXkKLUNPTkZJR19CVF9CTkVQPW0KLUNPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15Ci1DT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQotQ09ORklHX0JUX0hJRFA9bQotCi0jCi0jIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwotIwotIyBDT05GSUdfQlRfSENJVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi1DT05GSUdfQ0ZHODAyMTE9eQotQ09ORklHX05MODAyMTE9eQotQ09ORklHX1dJUkVMRVNTX0VYVD15Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPXkKLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD15Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9DUllQVF9US0lQPW0KLUNPTkZJR19JRUVFODAyMTFfU09GVE1BQz1tCi0jIENPTkZJR19JRUVFODAyMTFfU09GVE1BQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRktJTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKLQotIwotIyBEZXZpY2UgRHJpdmVycwotIwotCi0jCi0jIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKLSMKLUNPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPXkKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19FVkVOVFM9eQotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci1DT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci0jIENPTkZJR19NVERfQ0ZJX05PU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVA9eQotQ09ORklHX01URF9DRklfR0VPTUVUUlk9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotIyBDT05GSUdfTVREX09UUCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci1DT05GSUdfTVREX0NGSV9BTURTVEQ9eQotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTPXkKLUNPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0yCi1DT05GSUdfTVREX1BYQTJYWD15Ci0jIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAotQ09ORklHX01URF9CTE9DSzJNVEQ9eQotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORD15Ci0jIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9JRFM9eQotQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVA9eQotQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQURWQU5DRUQ9eQotQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfQUREUkVTUz0weDQwMDAwMDAKLUNPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0hJR0g9eQotQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfQkJUV1JJVEU9eQotIyBDT05GSUdfTVREX05BTkRfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotQ09ORklHX01URF9PTkVOQU5EPXkKLSMgQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT05FTkFORF8yWF9QUk9HUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9PTkVOQU5EX1NJTSBpcyBub3Qgc2V0Ci0KLSMKLSMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCi0jCi0jIENPTkZJR19NVERfVUJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVY9eQotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0xPT1A9eQotQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCi1DT05GSUdfQkxLX0RFVl9OQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTgKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKLUNPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAotIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotQ09ORklHX01JU0NfREVWSUNFUz15Ci0jIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAotQ09ORklHX0lERT15Ci1DT05GSUdfSURFX01BWF9IV0lGUz00Ci1DT05GSUdfQkxLX0RFVl9JREU9eQotCi0jCi0jIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcwotIwotIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLUNPTkZJR19JREVESVNLX01VTFRJX01PREU9eQotIyBDT05GSUdfQkxLX0RFVl9JREVDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAotIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAotQ09ORklHX0lERV9QUk9DX0ZTPXkKLQotIwotIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCi0jCi1DT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfQkxLX0RFVl9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLUNPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUPXkKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLUNPTkZJR19QSFlMSUI9eQotCi0jCi0jIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAotIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKLSMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotQ09ORklHX0RNOTAwMD15Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotIyBDT05GSUdfTElCRVJUQVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0Ci1DT05GSUdfSE9TVEFQPXkKLUNPTkZJR19IT1NUQVBfRklSTVdBUkU9eQotQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15Ci0jIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKLSMKLSMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD02NDAKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT00ODAKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi1DT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQotQ09ORklHX0tFWUJPQVJEX0FUS0JEPW0KLSMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfUFhBMjd4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFPXkKLSMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0Ci1DT05GSUdfTU9VU0VfU0VSSUFMPW0KLSMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAotQ09ORklHX1RPVUNIU0NSRUVOX1VDQjE0MDA9eQotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9VSU5QVVQ9bQotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotQ09ORklHX1NFUklPPXkKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLUNPTkZJR19TRVJJT19MSUJQUzI9eQotIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9QWEE9eQotQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQk9BUkRJTkZPPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QWEEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfVzEgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKLUNPTkZJR19IV01PTj15Ci0jIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAotCi0jCi0jIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQotIwotQ09ORklHX1NTQl9QT1NTSUJMRT15Ci0jIENPTkZJR19TU0IgaXMgbm90IHNldAotCi0jCi0jIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotQ09ORklHX0RBQj15Ci0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0Ci1DT05GSUdfRkI9eQotQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQotIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQotQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15Ci1DT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15Ci0jIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfREVGRVJSRURfSU89eQotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9QWEE9eQotIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15Ci1DT05GSUdfTENEX0NMQVNTX0RFVklDRT15Ci1DT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15Ci0jIENPTkZJR19CQUNLTElHSFRfQ09SR0kgaXMgbm90IHNldAotCi0jCi0jIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci1DT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKLUNPTkZJR19GT05UUz15Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15Ci0jIENPTkZJR19GT05UXzZ4MTEgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF83eDE0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfUEVBUkxfOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfQUNPUk5fOHg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfTUlOSV80eDYgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF9TVU44eDE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRfU1VOMTJ4MjIgaXMgbm90IHNldAotIyBDT05GSUdfRk9OVF8xMHgxOCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HTz15Ci1DT05GSUdfTE9HT19MSU5VWF9NT05PPXkKLUNPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKLUNPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci1DT05GSUdfQUM5N19CVVM9eQotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIElucHV0IERldmljZXMKLSMKLSMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLUNPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCi0jCi1DT05GSUdfVVNCX0RFVklDRUZTPXkKLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVVNQRU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QRVJTSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotCi0jCi0jIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSMKLSMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEltYWdpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgcG9ydCBkcml2ZXJzCi0jCi0KLSMKLSMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAotIwotQ09ORklHX1VTQl9TRVJJQUw9bQotIyBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQUlSQ0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09QVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgRFNMIG1vZGVtIHN1cHBvcnQKLSMKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLUNPTkZJR19VU0JfR0FER0VUPW0KLSMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKLSMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyWFggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0Q9eQotQ09ORklHX1VTQl9EVU1NWV9IQ0Q9bQotQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKLSMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DPXkKLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz15Ci1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfTU1DX1BYQSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVXX0xFRFM9eQotIyBDT05GSUdfTEVEU19DTEFTUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLUNPTkZJR19MRURTX1RSSUdHRVJTPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0lERV9ESVNLIGlzIG5vdCBzZXQKLUNPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19SVENfTElCPXkKLUNPTkZJR19SVENfQ0xBU1M9eQotIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKLQotIwotIyBSVEMgaW50ZXJmYWNlcwotIwotQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKLUNPTkZJR19SVENfSU5URl9QUk9DPXkKLUNPTkZJR19SVENfSU5URl9ERVY9eQotIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDX0RSVl9QQ0Y4NTgzPW0KLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgUlRDIGRyaXZlcnMKLSMKLQotIwotIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0Ci0KLSMKLSMgb24tQ1BVIFJUQyBkcml2ZXJzCi0jCi0jIENPTkZJR19SVENfRFJWX1NBMTEwMCBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi0jIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQVVUT0ZTNF9GUz15Ci0jIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz1tCi1DT05GSUdfTVNET1NfRlM9bQotQ09ORklHX1ZGQVRfRlM9bQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xNSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfQ09ORklHRlNfRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MQotQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKLUNPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWT15Ci0jIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTX1Y0PXkKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD15Ci1DT05GSUdfTkZTRF9WMz15Ci0jIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRF9WND15Ci1DT05GSUdfTkZTRF9UQ1A9eQotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPXkKLUNPTkZJR19ORlNfQ09NTU9OPXkKLUNPTkZJR19TVU5SUEM9eQotQ09ORklHX1NVTlJQQ19HU1M9eQotIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0Ci1DT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLUNPTkZJR19OTFM9eQotQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTE1IgotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLUNPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX0FTQ0lJPXkKLUNPTkZJR19OTFNfSVNPODg1OV8xPW0KLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotQ09ORklHX05MU19JU084ODU5XzE1PW0KLSMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0Ci1DT05GSUdfTkxTX1VURjg9bQotIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKLUNPTkZJR19JTlNUUlVNRU5UQVRJT049eQotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi1DT05GSUdfUFJJTlRLX1RJTUU9eQotQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQotQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLSMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKLUNPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15Ci1DT05GSUdfU0NIRURfREVCVUc9eQotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19QUkVFTVBUPXkKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19GT1JDRURfSU5MSU5JTkc9eQotIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfVVNFUj15Ci1DT05GSUdfREVCVUdfRVJST1JTPXkKLUNPTkZJR19ERUJVR19MTD15Ci0jIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLUNPTkZJR19LRVlTPXkKLUNPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15Ci1DT05GSUdfU0VDVVJJVFk9eQotIyBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTPXkKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotQ09ORklHX0NSWVBUT19BTEdBUEk9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQotQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKLSMgQ09ORklHX0NSWVBUT19ITUFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19NRDU9eQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0VDQj15Ci1DT05GSUdfQ1JZUFRPX0NCQz15Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERVM9eQotIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BRVM9bQotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fQVJDND15Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9eQotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fSFc9eQotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLUNPTkZJR19CSVRSRVZFUlNFPXkKLUNPTkZJR19DUkNfQ0NJVFQ9eQotQ09ORklHX0NSQzE2PXkKLSMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0Ci1DT05GSUdfTElCQ1JDMzJDPXkKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15Ci1DT05GSUdfUkVFRF9TT0xPTU9OPXkKLUNPTkZJR19SRUVEX1NPTE9NT05fREVDMTY9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTI3MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMjcwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2YzYmRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTI3MF9kZWZjb25maWcKQEAgLTAsMCArMSwxNzM3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmM4CisjIEZyaSBNYXIgMTMgMTY6MTg6MTcgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEPXkKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKK0NPTkZJR19ERUZBVUxUX0FTPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKK0NPTkZJR19GUkVFWkVSPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorCisjCisjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCisjCisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfVFJJWkVQU19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9INTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorQ09ORklHX01BQ0hfQ09MSUJSST15CisjIENPTkZJR19NQUNIX0NPTElCUkkzMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1JBVU1GRUxEX1BST1RPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9TQUFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfUEFMTSBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKK0NPTkZJR19QWEEyN3g9eQorIyBDT05GSUdfUFhBX1BXTSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9YU0NBTEU9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfSVdNTVhUPXkKK0NPTkZJR19YU0NBTEVfUE1VPXkKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTAKK0NPTkZJR19DTURMSU5FPSIiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPW0KKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVExBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkZfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9RVUVVRT1tCisjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CitDT05GSUdfSVJEQT1tCisKKyMKKyMgSXJEQSBwcm90b2NvbHMKKyMKK0NPTkZJR19JUkxBTj1tCitDT05GSUdfSVJDT01NPW0KK0NPTkZJR19JUkRBX1VMVFJBPXkKKworIworIyBJckRBIG9wdGlvbnMKKyMKK0NPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUD15CitDT05GSUdfSVJEQV9GQVNUX1JSPXkKKyMgQ09ORklHX0lSREFfREVCVUcgaXMgbm90IHNldAorCisjCisjIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKKyMKKworIworIyBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19JUlRUWV9TSVI9bQorCisjCisjIERvbmdsZSBzdXBwb3J0CisjCisjIENPTkZJR19ET05HTEUgaXMgbm90IHNldAorIyBDT05GSUdfS0lOR1NVTl9ET05HTEUgaXMgbm90IHNldAorIyBDT05GSUdfS1NEQVpaTEVfRE9OR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTOTU5X0RPTkdMRSBpcyBub3Qgc2V0CisKKyMKKyMgRklSIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUdNQVRFTF9GSVIgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0ZJQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTUNTX0ZJUiBpcyBub3Qgc2V0CitDT05GSUdfQlQ9bQorQ09ORklHX0JUX0wyQ0FQPW0KK0NPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX1JGQ09NTT1tCitDT05GSUdfQlRfUkZDT01NX1RUWT15CitDT05GSUdfQlRfQk5FUD1tCitDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQorQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKK0NPTkZJR19CVF9ISURQPW0KKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CitDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OTDgwMjExPXkKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorQ09ORklHX0xJQjgwMjExPXkKK0NPTkZJR19MSUI4MDIxMV9DUllQVF9XRVA9eQorQ09ORklHX0xJQjgwMjExX0NSWVBUX0NDTVA9eQorQ09ORklHX0xJQjgwMjExX0NSWVBUX1RLSVA9eQorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPXkKK0NPTkZJR19QUk9DX0VWRU5UUz15CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKKyMgQ09ORklHX01URF9DRklfTk9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUD15CitDT05GSUdfTVREX0NGSV9HRU9NRVRSWT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BYQTJYWD15CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorQ09ORklHX01URF9CTE9DSzJNVEQ9eQorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CitDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUD15CitDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9BRFZBTkNFRD15CitDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9QUk9CRV9BRERSRVNTPTB4NDAwMDAwMAorQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVBfUFJPQkVfSElHSD15CitDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9CQlRXUklURT15CisjIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkQ9eQorIyBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD15CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9OAorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NDA5NgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorQ09ORklHX0lERT15CisKKyMKKyMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorQ09ORklHX0RNOTAwMD15CitDT05GSUdfRE05MDAwX0RFQlVHTEVWRUw9NAorIyBDT05GSUdfRE05MDAwX0ZPUkNFX1NJTVBMRV9QSFlfUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfSE9TVEFQPXkKK0NPTkZJR19IT1NUQVBfRklSTVdBUkU9eQorQ09ORklHX0hPU1RBUF9GSVJNV0FSRV9OVlJBTT15CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD02NDAKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT00ODAKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPW0KKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfUFhBMjd4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKKyMgQ09ORklHX01PVVNFX1BTMiBpcyBub3Qgc2V0CitDT05GSUdfTU9VU0VfU0VSSUFMPW0KKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVUlOUFVUPW0KKyMgQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVIgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfU0ExMTAwX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfVVZFU0EgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorQ09ORklHX0ZCX1BYQT15CisjIENPTkZJR19GQl9QWEFfT1ZFUkxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QWEFfU01BUlRQQU5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QWEFfUEFSQU1FVEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAorIyBDT05GSUdfTENEX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT049eQorQ09ORklHX0ZPTlRTPXkKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKKyMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9FWlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DSDM0MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZUFJFU1NfTTggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FTVBFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0dBUk1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lVVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fUERBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tMU0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LT0JJTF9TQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9NT1M3ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTU9UT1JPTEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PVEk2ODU4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09QVElDT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRD15CitDT05GSUdfVVNCX0RVTU1ZX0hDRD1tCitDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQorIyBDT05GSUdfVVNCX1pFUk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19QWEEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKKyMgQ09ORklHX0xFRFNfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSyBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorIyBDT05GSUdfUlRDX0hDVE9TWVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzPW0KKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQVVUT0ZTNF9GUz15CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xNSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorQ09ORklHX0NPTkZJR0ZTX0ZTPXkKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQ1JZUFRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MQorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKK0NPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWT15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19ORlNEPXkKK0NPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMTUiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKK0NPTkZJR19LRVlTPXkKK0NPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CitDT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9eQorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NIQTE9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPXkKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PXkKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD15CitDT05GSUdfQ1JDMTY9eQorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz15CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1JFRURfU09MT01PTj15CitDT05GSUdfUkVFRF9TT0xPTU9OX0RFQzE2PXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY29saWJyaV9weGEzMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb2xpYnJpX3B4YTMwMF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc3NGEzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGlicmlfcHhhMzAwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDExNTYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAxNjoxMzoyMCAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1BYQT15CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKworIworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucworIworCisjCisjIFN1cHBvcnRlZCBQWEEzeHggUHJvY2Vzc29yIFZhcmlhbnRzCisjCitDT05GSUdfQ1BVX1BYQTMwMD15CisjIENPTkZJR19DUFVfUFhBMzEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9QWEEzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1BYQTkzMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfUFhBOTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAorQ09ORklHX01BQ0hfQ09MSUJSSTMwMD15CisjIENPTkZJR19NQUNIX1pZTE9OSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTElUVExFVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUkFVTUZFTERfUFJPVE8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAorQ09ORklHX1BYQTN4eD15CisjIENPTkZJR19QWEFfUFdNIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQzM9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CitDT05GSUdfSU9fMzY9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX09VVEVSX0NBQ0hFPXkKK0NPTkZJR19DQUNIRV9YU0MzTDI9eQorQ09ORklHX0lXTU1YVD15CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCBydyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0lETEU9eQorQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CisjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD15CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKK0NPTkZJR19BWDg4Nzk2PXkKKyMgQ09ORklHX0FYODg3OTZfOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9VSU5QVVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0dQSU9fUk9UQVJZX0VOQ09ERVI9eQorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0RFQlVHX0dQSU89eQorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9QWEE9eQorIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKKyMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CitDT05GSUdfVVNCX0RFQlVHPXkKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKKyMgQ09ORklHX01NQ19CTE9DS19CT1VOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19QWEE9eQorIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAorQ09ORklHX1JPT1RfTkZTPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPXkKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PXkKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9jb2xsaWVfZGVmY29uZmlnCmluZGV4IGY3NjIyZTYuLjFhYTYyMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvY29sbGllX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2NvbGxpZV9kZWZjb25maWcKQEAgLTExMyw3ICsxMTMsNiBAQAogQ09ORklHX1NBMTEwMF9DT0xMSUU9eQogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VtX3gyNzBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9lbV94MjcwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTk1NWI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9lbV94MjcwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE3NDEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKKyMgU3VuIEZlYiAgMSAxNjo0MzozMSAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QWEE9eQorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lOVEVMTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUlOU1RPTkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NUDkwMEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfSURQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0VNX1gyNzA9eQorQ09ORklHX01BQ0hfRVhFREE9eQorIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAorQ09ORklHX1BYQTI3eD15CitDT05GSUdfUFhBX1NTUD15CisjIENPTkZJR19QWEFfUFdNIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVX1hTQ0FMRT15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9OT0lGQVI9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19JV01NWFQ9eQorQ09ORklHX1hTQ0FMRV9QTVU9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJyb290PTFmMDMgbWVtPTMyTSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9TVEFUPXkKKyMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPW0KKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfU1VTUEVORF9GUkVFWkVSPXkKK0NPTkZJR19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CitDT05GSUdfQlQ9bQorQ09ORklHX0JUX0wyQ0FQPW0KK0NPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX1JGQ09NTT1tCisjIENPTkZJR19CVF9SRkNPTU1fVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9CTkVQPW0KKyMgQ09ORklHX0JUX0JORVBfTUNfRklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9ISURQPW0KKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19CVF9IQ0lCVFVTQj1tCisjIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lWSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CitDT05GSUdfTElCODAyMTE9bQorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CitDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CitDT05GSUdfTVREX0NGSV9OT1NXQVA9eQorIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CitDT05GSUdfTVREX0NGSV9TVEFBPXkKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BYQTJYWD15CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0lNUEE3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TSEFSUF9TTCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0gxOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1NIQVJQU0wgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQorIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKK0NPTkZJR19ETTkwMDA9eQorQ09ORklHX0RNOTAwMF9ERUJVR0xFVkVMPTEKKyMgQ09ORklHX0RNOTAwMF9GT1JDRV9TSU1QTEVfUEhZX1BPTEwgaXMgbm90IHNldAorIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTl84MDIxMT15CitDT05GSUdfTElCRVJUQVM9bQorIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJFUlRBU19TRElPPW0KKyMgQ09ORklHX0xJQkVSVEFTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorIyBDT05GSUdfUFBQX1NZTkNfVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0UgaXMgbm90IHNldAorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CitDT05GSUdfU0xIQz1tCisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfQVBNUE9XRVI9eQorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX1BYQTI3eD15CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fREE5MDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYPW0KKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcwNSBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEyPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFhfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorQ09ORklHX1NFUklPX0xJQlBTMj15CisjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTE2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj1tCitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9eQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX1BYQTJYWD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9BVDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKK0NPTkZJR19QT1dFUl9TVVBQTFk9eQorIyBDT05GSUdfUE9XRVJfU1VQUExZX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQV9QT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fUE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKK0NPTkZJR19CQVRURVJZX0RBOTAzMD15CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVUNCMTQwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKK0NPTkZJR19QTUlDX0RBOTAzWD15CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKK0NPTkZJR19WSURFT19ERVY9bQorQ09ORklHX1ZJREVPX1Y0TDJfQ09NTU9OPW0KKyMgQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDEgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19NRURJQT1tCisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSPW0KK0NPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JWkU9eQorIyBDT05GSUdfTUVESUFfVFVORVJfU0lNUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTAgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVERBODI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9UREExODI3MSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjEgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2NyBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NVDIwWFggaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMDYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01UMjI2NiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NVDIxMzEgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwNVMgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwN1QgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDI9bQorQ09ORklHX1ZJREVPQlVGX0dFTj1tCitDT05GSUdfVklERU9CVUZfRE1BX1NHPW0KK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTyBpcyBub3Qgc2V0CisKKyMKKyMgRW5jb2RlcnMvZGVjb2RlcnMgYW5kIG90aGVyIGhlbHBlciBjaGlwcworIworCisjCisjIEF1ZGlvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19UVkFVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTc0MzIgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBOTg0MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE5ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RFQTY0MTVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RFQTY0MjAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTVNQMzQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUzUzNDUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1M1M0wzMkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTTUyNzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RMVjMyMEFJQzIzQiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19XTTg3NzUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fV004NzM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZQMjdTTVBYIGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fT1Y3NjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RDTTgyNVggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE3MTdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RWUDUxNFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVFZQNTE1MCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gYW5kIGF1ZGlvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19DWDI1ODQwIGlzIG5vdCBzZXQKKworIworIyBNUEVHIHZpZGVvIGVuY29kZXJzCisjCisjIENPTkZJR19WSURFT19DWDIzNDFYIGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBlbmNvZGVycworIworIyBDT05GSUdfVklERU9fU0FBNzEyNyBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gaW1wcm92ZW1lbnQgY2hpcHMKKyMKKyMgQ09ORklHX1ZJREVPX1VQRDY0MDMxQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19VUEQ2NDA4MyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19WSVZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorQ09ORklHX1NPQ19DQU1FUkE9bQorIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTE9bQorIyBDT05GSUdfU09DX0NBTUVSQV9NVDlUMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VjAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX1RXOTkxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfT1Y3NzJYIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19QWEEyN3g9bQorIyBDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVSBpcyBub3Qgc2V0CisjIENPTkZJR19WNExfVVNCX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fQURBUFRFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CitDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01PREVfSEVMUEVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CitDT05GSUdfRkJfUFhBPXkKKyMgQ09ORklHX0ZCX1BYQV9PVkVSTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9QWEFfUEFSQU1FVEVSUz15CitDT05GSUdfRkJfTUJYPW0KKyMgQ09ORklHX0ZCX01CWF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9XMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19MQ0RfTFRWMzUwUVYgaXMgbm90IHNldAorIyBDT05GSUdfTENEX0lMSTkzMjAgaXMgbm90IHNldAorQ09ORklHX0xDRF9URE8yNE09eQorIyBDT05GSUdfTENEX1ZHRzI0MzJBNCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9bQorIyBDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUMgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9EQTkwM1g9bQorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRk9OVFMgaXMgbm90IHNldAorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0xPR089eQorQ09ORklHX0xPR09fTElOVVhfTU9OTz15CitDT05GSUdfTE9HT19MSU5VWF9WR0ExNj15CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKK0NPTkZJR19TT1VORD1tCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQorQ09ORklHX1NORD1tCitDT05GSUdfU05EX1RJTUVSPW0KK0NPTkZJR19TTkRfUENNPW0KKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorQ09ORklHX1NORF9PU1NFTVVMPXkKK0NPTkZJR19TTkRfTUlYRVJfT1NTPW0KK0NPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfVk1BU1RFUj15CitDT05GSUdfU05EX0FDOTdfQ09ERUM9bQorIyBDT05GSUdfU05EX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9BUk09eQorQ09ORklHX1NORF9QWEEyWFhfTElCPW0KK0NPTkZJR19TTkRfUFhBMlhYX0xJQl9BQzk3PXkKKyMgQ09ORklHX1NORF9QWEEyWFhfQUM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9bQorQ09ORklHX1NORF9TT0NfQUM5N19CVVM9eQorQ09ORklHX1NORF9QWEEyWFhfU09DPW0KK0NPTkZJR19TTkRfUFhBMlhYX1NPQ19BQzk3PW0KK0NPTkZJR19TTkRfUFhBMlhYX1NPQ19FTV9YMjcwPW0KK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPW0KKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQ19XTTk3MTI9bQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0FDOTdfQlVTPW0KK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKK0NPTkZJR19ISURfREVCVUc9eQorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CitDT05GSUdfTU1DPW0KKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPW0KK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfUFhBPW0KKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorQ09ORklHX0xFRFNfREE5MDNYPXkKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfVjMwMjA9eQorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfU0ExMTAwPXkKKyMgQ09ORklHX1JUQ19EUlZfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUj15CisjIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUl9EQTkwM1g9eQorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKKyMgQ09ORklHX1BST0NfUEFHRV9NT05JVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9TVU1NQVJZPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz1tCisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz1tCitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0wCisjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPW0KK0NPTkZJR19DUllQVE9fQUxHQVBJMj1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQorQ09ORklHX0NSWVBUT19IQVNIMj1tCitDT05GSUdfQ1JZUFRPX1JORzI9bQorQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9bQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9bQorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oMzYwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwppbmRleCA4Zjk4NmU5Li4xNTAyOTU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2gzNjAwX2RlZmNvbmZpZwpAQCAtOTAsNyArOTAsNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9IMzYwMD15Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9IM1hYWD15CiAjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKQEAgLTEwMCw3ICs5OSw2IEBACiAjIENPTkZJR19TQTExMDBfU0hBTk5PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfU0lNUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9TU1AgaXMgbm90IHNldAotIyBDT05GSUdfSDM2MDBfU0xFRVZFIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaGFja2tpdF9kZWZjb25maWcKaW5kZXggMWM4ZmI4OS4uZGIwNzA4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9oYWNra2l0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2hhY2traXRfZGVmY29uZmlnCkBAIC05MSw3ICs5MSw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9IQUNLS0lUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2pvcm5hZGE3MjBfZGVmY29uZmlnCmluZGV4IDgxZmFkYWYuLmYzMDc0ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvam9ybmFkYTcyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9qb3JuYWRhNzIwX2RlZmNvbmZpZwpAQCAtMTc4LDcgKzE3OCw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwPXkKIENPTkZJR19TQTExMDBfSk9STkFEQTcyMF9TU1A9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwppbmRleCA0YmMzODA3Li5jMzY3YWU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2tpcmt3b29kX2RlZmNvbmZpZwpAQCAtMSwxMSArMSwxMSBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjNwotIyBUaHUgRGVjICA0IDE1OjI3OjM5IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzUKKyMgVHVlIE1hciAgMyAyMTo0NTo1NyAyMDA5CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15Ci0jIENPTkZJR19HRU5FUklDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfR1BJTz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKIENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKIENPTkZJR19NTVU9eQpAQCAtNDIsMTAgKzQyLDE5IEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE5CiAjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX05BTUVTUEFDRVM9eQpAQCAtNTMsNiArNjIsNyBAQAogIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAogIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CkBAIC04Myw2ICs5Myw3IEBACiBDT05GSUdfU0xVQj15CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX1RSQUNFUE9JTlRTPXkKICMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX09QUk9GSUxFPXkKIENPTkZJR19IQVZFX09QUk9GSUxFPXkKQEAgLTkzLDcgKzEwNCw2IEBACiBDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CiBDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CkBAIC0xMDEsMTEgKzExMSw5IEBACiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIApAQCAtMTIxLDcgKzEyOSw2IEBACiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMTMyLDcgKzEzOSw2IEBACiAjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKQEAgLTE1OSwxMSArMTY1LDEzIEBACiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKIAogIwogIyBNYXJ2ZWxsIEtpcmt3b29kIEltcGxlbWVudGF0aW9ucwpAQCAtMTcxLDE0ICsxNzksOCBAQAogQ09ORklHX01BQ0hfREI4OEY2MjgxX0JQPXkKIENPTkZJR19NQUNIX1JEODhGNjE5Ml9OQVM9eQogQ09ORklHX01BQ0hfUkQ4OEY2MjgxPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCitDT05GSUdfTUFDSF9TSEVFVkFQTFVHPXkKK0NPTkZJR19NQUNIX1RTMjE5PXkKIENPTkZJR19QTEFUX09SSU9OPXkKIAogIwpAQCAtMjE0LDYgKzIxNiw3IEBACiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwpAQCAtMjQyLDcgKzI0NSw2IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15CkBAIC0yOTEsNiArMjkzLDcgQEAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTM1NSw2ICszNTgsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zNjgsMTIgKzM3MiwyNyBAQAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15Ci0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MODAyMTEgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKIENPTkZJR19XSVJFTEVTU19FWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorQ09ORklHX0xJQjgwMjExPXkKK0NPTkZJR19NQUM4MDIxMT15CisKKyMKKyMgUmF0ZSBjb250cm9sIGFsZ29yaXRobSBzZWxlY3Rpb24KKyMKK0NPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTD15CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0ibWluc3RyZWwiCisjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC0zOTgsNiArNDE3LDcgQEAKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldApAQCAtNDUxLDkgKzQ3MSw3IEBACiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MAorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CkBAIC00ODEsNiArNDk5LDcgQEAKICMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfSURTPXkKICMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CkBAIC00OTEsNiArNTEwLDEyIEBACiAjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC01NjgsNiArNTkzLDggQEAKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfRkNPRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CkBAIC02ODIsNiArNzA5LDkgQEAKICMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfRVRIRVJORVQ9eQpAQCAtNjk1LDYgKzcyNSw3IEBACiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAogIyBDT05GSUdfRU5DMjhKNjAgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldApAQCAtNzEwLDcgKzc0MSw2IEBACiAjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAogIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CkBAIC03MjAsNiArNzUwLDcgQEAKICMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5NDIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKQEAgLTc1NCw4ICs3ODUsMzkgQEAKICMgV2lyZWxlc3MgTEFOCiAjCiAjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU5fODAyMTE9eQorQ09ORklHX0xJQkVSVEFTPXkKKyMgQ09ORklHX0xJQkVSVEFTX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfTElCRVJUQVNfU0RJTz15CisjIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0CisjIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNRUwgaXMgbm90IHNldAorIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVEw4MTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAorIyBDT05GSUdfQURNODIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSDVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSDlLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xDT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xBR04gaXMgbm90IHNldAorIyBDT05GSUdfSVdMMzk0NSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CisjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNzkxLDEzICs4NTMsMjAgQEAKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9HUElPPXkKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CkBAIC04MDcsNyArODc2LDExIEBACiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTgzOSwxMSArOTEyLDExIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0xNgogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKQEAgLTg3OSw2ICs5NTIsNyBAQAogIwogIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKICMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKIENPTkZJR19JMkNfTVY2NFhYWD15CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldApAQCAtOTA1LDggKzk3OSw2IEBACiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwogIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKQEAgLTkyNSwxMiArOTk3LDEyIEBACiAjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09SSU9OPXkKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CkBAIC05NTIsMTAgKzEwMjQsMTIgQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGltZWRpYSBkZXZpY2VzCkBAIC0xMDEyLDExICsxMDg2LDkgQEAKIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQotQ09ORklHX0hJRF9CUklHSFQ9eQogQ09ORklHX0hJRF9DSEVSUlk9eQogQ09ORklHX0hJRF9DSElDT05ZPXkKIENPTkZJR19ISURfQ1lQUkVTUz15Ci1DT05GSUdfSElEX0RFTEw9eQogQ09ORklHX0hJRF9FWktFWT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKIENPTkZJR19ISURfTE9HSVRFQ0g9eQpAQCAtMTAyNCwxMiArMTA5NiwxNSBAQAogIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9NSUNST1NPRlQ9eQogQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQogQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKICMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NVUFBPUlQ9eQpAQCAtMTA1OCw2ICsxMTMzLDcgQEAKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRD15CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKQEAgLTEwODcsNyArMTE2Myw2IEBACiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAotQ09ORklHX1VTQl9TVE9SQUdFX0RQQ009eQogIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15CiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKQEAgLTExMzUsMjEgKzEyMTAsNTEgQEAKICMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VV0IgaXMgbm90IHNldAotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorQ09ORklHX1NESU9fVUFSVD15CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVElGTV9TRCBpcyBub3Qgc2V0CitDT05GSUdfTU1DX01WU0RJTz15CisjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKLSMgQ09ORklHX0xFRFNfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX0xFRFNfQ0xBU1M9eQogCiAjCiAjIExFRCBkcml2ZXJzCiAjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz15CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAogCiAjCiAjIExFRCBUcmlnZ2VycwogIwotIyBDT05GSUdfTEVEU19UUklHR0VSUyBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTExNzgsNyArMTI4Myw3IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKIApAQCAtMTIyNyw2ICsxMzMyLDcgQEAKICMgQ09ORklHX0RNQVRFU1QgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTEyMzgsMTYgKzEzNDQsMTQgQEAKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19GSUxFX0xPQ0tJTkc9eQotQ09ORklHX1hGU19GUz15Ci0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTEyNjgsOSArMTM3Miw5IEBACiAjCiAjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKICMKLUNPTkZJR19GQVRfRlM9bQotQ09ORklHX01TRE9TX0ZTPW0KLUNPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKIENPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKICMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldApAQCAtMTI4NiwxMCArMTM5MCw3IEBACiAjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEzMDksNiArMTQxMCw3IEBACiBDT05GSUdfSkZGUzJfUlRJTUU9eQogIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAogQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldApAQCAtMTM5Myw3ICsxNDk1LDcgQEAKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKQEAgLTE0MTYsNiArMTUxOCw3IEBACiAjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFDS1RSQUNFPXkKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQpAQCAtMTQyNCw3ICsxNTI3LDcgQEAKIENPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldApAQCAtMTQzNSw3ICsxNTM4LDEwIEBACiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX05PUF9UUkFDRVI9eQogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19SSU5HX0JVRkZFUj15CitDT05GSUdfVFJBQ0lORz15CiAKICMKICMgVHJhY2VycwpAQCAtMTQ0NiwxMSArMTU1MiwxNCBAQAogIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19GVFJBQ0VfU1RBUlRVUF9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0FSTV9VTldJTkQ9eQogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CkBAIC0xNDY0LDE5ICsxNTczLDIyIEBACiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19BU1lOQ19DT1JFPXkKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwogIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BTEdBUEk9bQotQ09ORklHX0NSWVBUT19BRUFEPW0KLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD1tCi1DT05GSUdfQ1JZUFRPX1JORz1tCi1DT05GSUdfQ1JZUFRPX01BTkFHRVI9bQorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiAjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CkBAIC0xNDk2LDcgKzE2MDgsNyBAQAogQ09ORklHX0NSWVBUT19DQkM9bQogIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRUNCPW0KK0NPTkZJR19DUllQVE9fRUNCPXkKICMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldApAQCAtMTUxMCw3ICsxNjIyLDcgQEAKICMKICMgRGlnZXN0CiAjCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ1JDMzJDPXkKICMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldApAQCAtMTUyNyw5ICsxNjM5LDkgQEAKICMKICMgQ2lwaGVycwogIwotIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FFUz15CiAjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND15CiAjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CkBAIC0xNTYwLDYgKzE2NzIsNyBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogQ09ORklHX0NSQzE2PXkKICMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbGFydF9kZWZjb25maWcKaW5kZXggYTFjYzM0Zi4uNTZhZTU2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9sYXJ0X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xhcnRfZGVmY29uZmlnCkBAIC04Nyw3ICs4Nyw2IEBACiAjIENPTkZJR19TQTExMDBfQ09MTElFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDM2MDAgaXMgbm90IHNldAotIyBDT05GSUdfU0ExMTAwX0gzODAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9CQURHRTQgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0pPUk5BREE3MjAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0hBQ0tLSVQgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tYWdpY2lhbl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZwppbmRleCA3M2JhNjJiLi44MjQyOGMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL21hZ2ljaWFuX2RlZmNvbmZpZwpAQCAtMSw5ICsxLDEwIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjQtcmM2Ci0jIFN1biBEZWMgMzAgMTM6MDI6NTQgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBGcmkgSmFuIDMwIDEyOjQyOjAzIDIwMDkKICMKIENPTkZJR19BUk09eQorQ09ORklHX0hBVkVfUFdNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQpAQCAtMTIsNiArMTMsNyBAQAogIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKIENPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CkBAIC0yMSw4ICsyMyw4IEBACiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX1pPTkVfRE1BPXkKIENPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKQEAgLTQxLDE2ICs0MywyNCBAQAogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAotIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQpAQCAtNjUsMzEgKzc1LDQxIEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQogQ09ORklHX1JUX01VVEVYRVM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci1DT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xMDMsOCArMTIzLDcgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX05PT1A9eQogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CitDT05GSUdfRlJFRVpFUj15CiAKICMKICMgU3lzdGVtIFR5cGUKQEAgLTExNCw5ICsxMzMsNyBAQAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CkBAIC0xMzAsNDEgKzE0Nyw1OCBAQAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfUFhBPXkKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogCiAjCiAjIEludGVsIFBYQTJ4eC9QWEEzeHggSW1wbGVtZW50YXRpb25zCiAjCisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QWEFfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1RSSVpFUFM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVklQRVIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9aWUxPTklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xJVFRMRVRPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU0FBUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0FSTUNPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DTV9YMzAwIGlzIG5vdCBzZXQKIENPTkZJR19NQUNIX01BR0lDSUFOPXkKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1BDTTAyNyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BYQV9FWlggaXMgbm90IHNldAogQ09ORklHX1BYQTI3eD15Ci0KLSMKLSMgQm9vdCBvcHRpb25zCi0jCi0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudAotIworQ09ORklHX1BYQV9TU1A9eQorQ09ORklHX1BYQV9QV009eQorQ09ORklHX1BYQV9IQVZFX0JPQVJEX0lSUVM9eQogCiAjCiAjIFByb2Nlc3NvciBUeXBlCkBAIC0xNzMsNiArMjA3LDcgQEAKIENPTkZJR19DUFVfWFNDQUxFPXkKIENPTkZJR19DUFVfMzJ2NT15CiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQogQ09ORklHX0NQVV9DUDE1PXkKQEAgLTE4Niw2ICsyMjEsNyBAQAogIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAogQ09ORklHX0lXTU1YVD15CiBDT05GSUdfWFNDQUxFX1BNVT15CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CiAKICMKICMgQnVzIHN1cHBvcnQKQEAgLTE5NywyOCArMjMzLDMzIEBACiAjCiAjIEtlcm5lbCBGZWF0dXJlcwogIwotIyBDT05GSUdfVElDS19PTkVTSE9UIGlzIG5vdCBzZXQKLSMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKICMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiBDT05GSUdfT0FCSV9DT01QQVQ9eQotIyBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKLSMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAotIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0Ci1DT05GSUdfWk9ORV9ETUFfRkxBRz0xCi1DT05GSUdfQk9VTkNFPXkKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKICMKQEAgLTIyOSw5ICsyNzAsMTAgQEAKIENPTkZJR19DTURMSU5FPSJrZWVwaW5pdHJkIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfS0VYRUM9eQorQ09ORklHX0FUQUdTX1BST0M9eQogCiAjCi0jIENQVSBGcmVxdWVuY3kgc2NhbGluZworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAogIwogQ09ORklHX0NQVV9GUkVRPXkKIENPTkZJR19DUFVfRlJFUV9UQUJMRT15CkBAIC0yMzksNiArMjgxLDcgQEAKIENPTkZJR19DUFVfRlJFUV9TVEFUPXkKICMgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfUE9XRVJTQVZFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldApAQCAtMjQ3LDYgKzI5MCw3IEBACiAjIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQogIyBDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiAKICMKICMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCkBAIC0yNjMsNiArMzA3LDggQEAKICMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKICMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKIApAQCAtMjcwLDIxICszMTYsMTggQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiBDT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QTV9TTEVFUD15Ci1DT05GSUdfU1VTUEVORF9VUF9QT1NTSUJMRT15CiBDT05GSUdfU1VTUEVORD15Ci1DT05GSUdfQVBNX0VNVUxBVElPTj15Ci0KLSMKLSMgTmV0d29ya2luZwotIworQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQogQ09ORklHX05FVD15CiAKICMKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKQEAgLTMxNiwzMyArMzU5LDE1IEBACiBDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQogQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgogIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAotQ09ORklHX05FVEZJTFRFUj15Ci0jIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KLSMKLSMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDS19FTkFCTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUyBpcyBub3Qgc2V0Ci0KLSMKLSMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCi0jCi0jIENPTkZJR19JUF9ORl9RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKQEAgLTM1Myw2ICszNzgsNyBAQAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zOTAsMjAgKzQxNiwxNyBAQAogIyBEb25nbGUgc3VwcG9ydAogIwogIyBDT05GSUdfRE9OR0xFIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19JUlBPUlRfU0lSIGlzIG5vdCBzZXQKLQotIwotIyBPbGQgU2VyaWFsIGRvbmdsZSBzdXBwb3J0Ci0jCisjIENPTkZJR19LSU5HU1VOX0RPTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19LU0RBWlpMRV9ET05HTEUgaXMgbm90IHNldAorIyBDT05GSUdfS1M5NTlfRE9OR0xFIGlzIG5vdCBzZXQKIAogIwogIyBGSVIgZGV2aWNlIGRyaXZlcnMKICMKKyMgQ09ORklHX1VTQl9JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJR01BVEVMX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfUFhBX0ZJQ1A9bQorIyBDT05GSUdfTUNTX0ZJUiBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9bQogQ09ORklHX0JUX0wyQ0FQPW0KIENPTkZJR19CVF9TQ089bQpAQCAtNDE3LDE3ICs0NDAsMTcgQEAKICMKICMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCiAjCitDT05GSUdfQlRfSENJQlRVU0I9bQorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAogIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MKLSMKLSMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAogCkBAIC00NDIsMjUgKzQ2NSwyOCBAQAogQ09ORklHX1NUQU5EQUxPTkU9eQogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CisjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLUNPTkZJR19NVERfREVCVUc9eQotQ09ORklHX01URF9ERUJVR19WRVJCT1NFPTAKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKICMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CiAKICMKICMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKICMKLUNPTkZJR19NVERfQ0hBUj1tCi1DT05GSUdfTVREX0JMS0RFVlM9bQotQ09ORklHX01URF9CTE9DSz1tCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldApAQCAtNDczLDYgKzQ5OSw3IEBACiAjCiBDT05GSUdfTVREX0NGST15CiAjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CiAjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQpAQCAtNDg3LDYgKzUxNCw3IEBACiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiAjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CkBAIC00OTcsOSArNTI1LDcgQEAKICMKICMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHgwMDAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDA0MDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTQKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUFhBMlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0hBUlBfU0wgaXMgbm90IHNldApAQCAtNTIzLDYgKzU0OSwxMiBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIwogIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKICMKICMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldApAQCAtNTMxLDEwICs1NjMsMTIgQEAKICMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKICMKQEAgLTU0Nyw3ICs1ODEsNiBAQAogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01EIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldApAQCAtNTYzLDYgKzU5NiwyMCBAQAogIwogIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQogIyBDT05GSUdfUFBQX01VTFRJTElOSyBpcyBub3Qgc2V0CkBAIC02MTIsNyArNjU5LDI2IEBACiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9VSU5QVVQ9bQogCiAjCkBAIC02MjUsOSArNjkxLDExIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKICMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTY0Miw2ICs3MTAsNyBAQAogIyBDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKQEAgLTY0OSwzNyArNzE4LDQ1IEBACiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0kyQz1tCitDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKIENPTkZJR19JMkNfQ0hBUkRFVj1tCi0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQogCiAjCiAjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAogIworCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIwogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotQ09ORklHX0kyQ19QWEE9bQotIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUFhBPXkKKyMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKICMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19BVDI0IGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldApAQCAtNjg4LDE5ICs3NjUsMzkgQEAKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAogCiAjCi0jIFNQSSBzdXBwb3J0CisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CiAjCi0jIENPTkZJR19TUEkgaXMgbm90IHNldAotIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCiBDT05GSUdfVzE9eQogCiAjCiAjIDEtd2lyZSBCdXMgTWFzdGVycwogIworIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19XMV9NQVNURVJfRFMyNDgyIGlzIG5vdCBzZXQKIENPTkZJR19XMV9NQVNURVJfRFMxV009eQorIyBDT05GSUdfVzFfTUFTVEVSX0dQSU8gaXMgbm90IHNldAogCiAjCiAjIDEtd2lyZSBTbGF2ZXMKQEAgLTcwOSwzMiArODA2LDU2IEBACiAjIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMyBpcyBub3Qgc2V0CiBDT05GSUdfVzFfU0xBVkVfRFMyNzYwPXkKKyMgQ09ORklHX1cxX1NMQVZFX0JRMjcwMDAgaXMgbm90IHNldAogQ09ORklHX1BPV0VSX1NVUFBMWT15CiAjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BEQV9QT1dFUj15Ci0jIENPTkZJR19BUE1fUE9XRVIgaXMgbm90IHNldAogQ09ORklHX0JBVFRFUllfRFMyNzYwPXkKKyMgQ09ORklHX0JBVFRFUllfQlEyN3gwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKICMKICMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCi1DT05GSUdfU1NCX1BPU1NJQkxFPXkKICMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CiAKICMKICMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycwogIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CiBDT05GSUdfSFRDX0VHUElPPXkKIENPTkZJR19IVENfUEFTSUMzPXkKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKICMgQ09ORklHX0RBQiBpcyBub3Qgc2V0CiAKICMKQEAgLTc0NSw2ICs4NjYsNyBAQAogQ09ORklHX0ZCPXkKICMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CkBAIC03NTIsOCArODc0LDggQEAKICMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAogIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfREVGRVJSRURfSU89eQogIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldApAQCAtNzY1LDEzICs4ODcsMjEgQEAKICMKICMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKIENPTkZJR19GQl9QWEE9eQorQ09ORklHX0ZCX1BYQV9PVkVSTEFZPXkKKyMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BYQV9QQVJBTUVURVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9XMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9DT1JHST15CisjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX1BXTT15CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydApAQCAtODAyLDE1ICs5MzIsOCBAQAogIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKICMgQ09ORklHX0xPR08gaXMgbm90IHNldAotCi0jCi0jIFNvdW5kCi0jCiBDT05GSUdfU09VTkQ9eQotCi0jCi0jIEFkdmFuY2VkIExpbnV4IFNvdW5kIEFyY2hpdGVjdHVyZQotIworQ09ORklHX1NPVU5EX09TU19DT1JFPXkKIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9USU1FUj1tCiBDT05GSUdfU05EX1BDTT1tCkBAIC04MjQsNTMgKzk0NywxODUgQEAKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgR2VuZXJpYyBkZXZpY2VzCi0jCitDT05GSUdfU05EX0RSSVZFUlM9eQogIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKLQotIwotIyBBTFNBIEFSTSBkZXZpY2VzCi0jCi0jIENPTkZJR19TTkRfUFhBMlhYX0FDOTcgaXMgbm90IHNldAotCi0jCi0jIFN5c3RlbSBvbiBDaGlwIGF1ZGlvIHN1cHBvcnQKLSMKKyMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAorQ09ORklHX1NORF9QWEEyWFhfTElCPW0KKyMgQ09ORklHX1NORF9VU0IgaXMgbm90IHNldAogQ09ORklHX1NORF9TT0M9bQogQ09ORklHX1NORF9QWEEyWFhfU09DPW0KLQotIwotIyBTb0MgQXVkaW8gc3VwcG9ydCBmb3IgU3VwZXJICi0jCi0KLSMKLSMgT3BlbiBTb3VuZCBTeXN0ZW0KLSMKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPW0KKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfSElEPW0KLSMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049bQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkgYWxzbyBiZSBuZWVkZWQ7CisjCisKKyMKKyMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9NTAwCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9QWEEyN1g9eQorQ09ORklHX1VTQl9QWEEyN1g9eQorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VUSD1tCisjIENPTkZJR19VU0JfRVRIX1JORElTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VURlM9bQorQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1BSSU5URVIgaXMgbm90IHNldAorQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFPW0KKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKK0NPTkZJR19VU0JfT1RHX1VUSUxTPXkKK0NPTkZJR19VU0JfR1BJT19WQlVTPXkKIENPTkZJR19NTUM9eQogIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgQ2FyZCBEcml2ZXJzCisjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwogIwogQ09ORklHX01NQ19CTE9DSz15CiBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15CiBDT05GSUdfU0RJT19VQVJUPW0KKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKIAogIwotIyBNTUMvU0QgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKIENPTkZJR19NTUNfUFhBPXkKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19HUElPPXkKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVCBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0JBQ0tMSUdIVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTiBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSENUT1NZUz15CkBAIC04OTksNiArMTE1NCw5IEBACiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC05MDgsMTcgKzExNjYsMjYgQEAKICMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKICMKICMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKICMgb24tQ1BVIFJUQyBkcml2ZXJzCiAjCiBDT05GSUdfUlRDX0RSVl9TQTExMDA9eQorIyBDT05GSUdfUlRDX0RSVl9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwpAQCAtOTI3LDE5ICsxMTk0LDE4IEBACiAjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUNERFVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldApAQCAtOTY1LDE1ICsxMjMxLDEzIEBACiAjCiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKIENPTkZJR19TWVNGUz15CiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC05OTcsOSArMTI2MSwxMyBAQAogIyBDT05GSUdfSkZGUzJfQ01PREVfU0laRSBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9DTU9ERV9GQVZPVVJMWk8gaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CkBAIC0xMDA3LDE0ICsxMjc1LDEzIEBACiBDT05GSUdfTkZTX1YzPXkKICMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19TVU5SUENfQklORDM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtMTA3Niw2ICsxMzQzLDcgQEAKIENPTkZJR19QUklOVEtfVElNRT15CiBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldApAQCAtMTA4MywxNSArMTM1MSwxOCBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1RJTUVSX1NUQVRTPXkKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CkBAIC0xMTAwLDE3ICsxMzcxLDQxIEBACiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1ZNPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0ZPUkNFRF9JTkxJTklORz15CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQogIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKIApAQCAtMTExOSw1NSArMTQxNCwxMTAgQEAKICMKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fQUxHQVBJPW0KK0NPTkZJR19DUllQVE9fQUxHQVBJMj1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPW0KIENPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj1tCitDT05GSUdfQ1JZUFRPX0hBU0g9bQorQ09ORklHX0NSWVBUT19IQVNIMj1tCitDT05GSUdfQ1JZUFRPX1JORzI9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9bQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPW0KKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19TSEExPW0KICMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQotIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX1BDQkM9bQotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKICMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19BUkM0PW0KKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnCmluZGV4IDgzYzgxN2YuLmIwNjk4NzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZwpAQCAtMTY1LDYgKzE2NSw3IEBACiAjIE1hcnZlbGwgTVY3OHh4MCBJbXBsZW1lbnRhdGlvbnMKICMKIENPTkZJR19NQUNIX0RCNzhYMDBfQlA9eQorQ09ORklHX01BQ0hfUkQ3OFgwMF9NQVNBPXkKIAogIwogIyBCb290IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbmVwb25zZXRfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKaW5kZXggZDgxZWEyMS4uMzZjZDYyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9uZXBvbnNldF9kZWZjb25maWcKQEAgLTkxLDcgKzkxLDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfMzQzMHNkcF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiOTE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF8zNDMwc2RwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDIwNjEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAxNDoxNzowMSAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX09QUk9GSUxFX0FSTVY3PXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfVFJBQ0VQT0lOVFM9eQorIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CitDT05GSUdfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfRlJFRVpFUj15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKworIworIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfT01BUF9PVEc9eQorIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAzPXkKKworIworIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucworIworIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01VWD15CitDT05GSUdfT01BUF9NVVhfREVCVUc9eQorQ09ORklHX09NQVBfTVVYX1dBUk5JTkdTPXkKK0NPTkZJR19PTUFQX01DQlNQPXkKKyMgQ09ORklHX09NQVBfTVBVX1RJTUVSIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQXzMyS19USU1FUj15CitDT05GSUdfT01BUF8zMktfVElNRVJfSFo9MTI4CitDT05GSUdfT01BUF9ETV9USU1FUj15CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIgaXMgbm90IHNldAorQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDM9eQorQ09ORklHX09NQVBfU0VSSUFMX1dBS0U9eQorQ09ORklHX0FSQ0hfT01BUDM0WFg9eQorQ09ORklHX0FSQ0hfT01BUDM0MzA9eQorCisjCisjIE9NQVAgQm9hcmQgVHlwZQorIworQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFPXkKK0NPTkZJR19NQUNIX09NQVBfTERQPXkKK0NPTkZJR19NQUNIX09WRVJPPXkKK0NPTkZJR19NQUNIX09NQVAzX1BBTkRPUkE9eQorQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfVjc9eQorQ09ORklHX0NQVV8zMnY3PXkKK0NPTkZJR19DUFVfQUJSVF9FVjc9eQorQ09ORklHX0NQVV9QQUJSVF9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorQ09ORklHX0FSTV9USFVNQkVFPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0hBU19UTFNfUkVHPXkKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfTEVEUz15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMiwxMTUyMDAgcm9vdD0vZGV2L21tY2JsazBwMyByb290d2FpdCBkZWJ1ZyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0tFWEVDPXkKK0NPTkZJR19BVEFHU19QUk9DPXkKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CitDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTPXkKK0NPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX0NPTlNFUlZBVElWRSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkUgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD15CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19WRlA9eQorQ09ORklHX1ZGUHYzPXkKK0NPTkZJR19ORU9OPXkKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKK0NPTkZJR19IQVZFX0FPVVQ9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz15CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorQ09ORklHX0lQVjY9bQorIyBDT05GSUdfSVBWNl9QUklWQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfUk9VVEVSX1BSRUYgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9PUFRJTUlTVElDX0RBRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfTUlQNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KKyMgQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9TSVQ9bQorQ09ORklHX0lQVjZfTkRJU0NfTk9ERVRZUEU9eQorIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKK0NPTkZJR19CVD15CitDT05GSUdfQlRfTDJDQVA9eQorQ09ORklHX0JUX1NDTz15CitDT05GSUdfQlRfUkZDT01NPXkKK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPXkKK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorQ09ORklHX0JUX0hJRFA9eQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKK0NPTkZJR19CVF9IQ0lVQVJUPXkKK0NPTkZJR19CVF9IQ0lVQVJUX0g0PXkKK0NPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQorIyBDT05GSUdfQlRfSENJVUFSVF9MTCBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJQkNNMjAzWD15CitDT05GSUdfQlRfSENJQlBBMTBYPXkKKyMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CitDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OTDgwMjExPXkKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQorQ09ORklHX0xJQjgwMjExPXkKK0NPTkZJR19MSUI4MDIxMV9DUllQVF9XRVA9bQorQ09ORklHX0xJQjgwMjExX0NSWVBUX0NDTVA9bQorQ09ORklHX0xJQjgwMjExX0NSWVBUX1RLSVA9bQorQ09ORklHX01BQzgwMjExPXkKKworIworIyBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIHNlbGVjdGlvbgorIworQ09ORklHX01BQzgwMjExX1JDX1BJRD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9QSUQ9eQorIyBDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVF9NSU5TVFJFTCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfUkNfREVGQVVMVD0icGlkIgorIyBDT05GSUdfTUFDODAyMTFfTUVTSCBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTFfTEVEUz15CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0RFQlVHX01FTlUgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19DRFJPTV9QS1RDRFZEPW0KK0NPTkZJR19DRFJPTV9QS1RDRFZEX0JVRkZFUlM9OAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRF9XQ0FDSEUgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CitDT05GSUdfRUVQUk9NXzkzQ1g2PW0KK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19SQUlEX0FUVFJTPW0KK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9bQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCitDT05GSUdfTURfUkFJRDEwPW0KK0NPTkZJR19NRF9SQUlENDU2PW0KK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKK0NPTkZJR19NRF9NVUxUSVBBVEg9bQorQ09ORklHX01EX0ZBVUxUWT1tCitDT05GSUdfQkxLX0RFVl9ETT1tCisjIENPTkZJR19ETV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfRE1fQ1JZUFQ9bQorQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9NSVJST1I9bQorQ09ORklHX0RNX1pFUk89bQorQ09ORklHX0RNX01VTFRJUEFUSD1tCitDT05GSUdfRE1fREVMQVk9bQorIyBDT05GSUdfRE1fVUVWRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT1tCisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDX1BIWT15CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CitDT05GSUdfU01DOTExWD1tCitDT05GSUdfU01TQzkxMVg9bQorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dMQU5fODAyMTE9eQorQ09ORklHX0xJQkVSVEFTPXkKK0NPTkZJR19MSUJFUlRBU19VU0I9eQorQ09ORklHX0xJQkVSVEFTX1NESU89eQorQ09ORklHX0xJQkVSVEFTX0RFQlVHPXkKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWkQxMjAxPW0KKyMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CitDT05GSUdfUlRMODE4Nz1tCisjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CitDT05GSUdfUDU0X0NPTU1PTj1tCitDT05GSUdfUDU0X1VTQj1tCisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX0hPU1RBUD1tCitDT05GSUdfSE9TVEFQX0ZJUk1XQVJFPXkKK0NPTkZJR19IT1NUQVBfRklSTVdBUkVfTlZSQU09eQorIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CisjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworQ09ORklHX1VTQl9DQVRDPW0KK0NPTkZJR19VU0JfS0FXRVRIPW0KK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorQ09ORklHX1VTQl9VU0JORVQ9eQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD15CitDT05GSUdfVVNCX05FVF9DRENFVEhFUj15CitDT05GSUdfVVNCX05FVF9ETTk2MDE9bQorIyBDT05GSUdfVVNCX05FVF9TTVNDOTVYWCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9HTDYyMEE9bQorQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCitDT05GSUdfVVNCX05FVF9QTFVTQj1tCitDT05GSUdfVVNCX05FVF9NQ1M3ODMwPW0KK0NPTkZJR19VU0JfTkVUX1JORElTX0hPU1Q9bQorQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVD1tCitDT05GSUdfVVNCX0FMSV9NNTYzMj15CitDT05GSUdfVVNCX0FOMjcyMD15CitDT05GSUdfVVNCX0JFTEtJTj15CitDT05GSUdfVVNCX0FSTUxJTlVYPXkKK0NPTkZJR19VU0JfRVBTT04yODg4PXkKK0NPTkZJR19VU0JfS0MyMTkwPXkKK0NPTkZJR19VU0JfTkVUX1pBVVJVUz1tCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorQ09ORklHX1BQUD1tCisjIENPTkZJR19QUFBfTVVMVElMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUF9GSUxURVIgaXMgbm90IHNldAorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9NUFBFPW0KK0NPTkZJR19QUFBPRT1tCisjIENPTkZJR19QUFBPTDJUUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKK0NPTkZJR19TTEhDPW0KKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9UUkFDS1BPSU5UPXkKKyMgQ09ORklHX01PVVNFX1BTMl9FTEFOVEVDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0FQUExFVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQkNNNTk3NCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9WU1hYWEFBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MzIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfT01BUD15CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorQ09ORklHX1NQSV9PTUFQMjRYWD15CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKK0NPTkZJR19ERUJVR19HUElPPXkKK0NPTkZJR19HUElPX1NZU0ZTPXkKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKK0NPTkZJR19HUElPX1RXTDQwMzA9eQorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJfU1VQUExZPW0KKyMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QREFfUE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EUzI3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorQ09ORklHX1dBVENIRE9HX05PV0FZT1VUPXkKKworIworIyBXYXRjaGRvZyBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfU09GVF9XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX1dBVENIRE9HIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorQ09ORklHX1RXTDQwMzBfQ09SRT15CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworQ09ORklHX1ZJREVPX0RFVj1tCitDT05GSUdfVklERU9fVjRMMl9DT01NT049bQorQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDE9eQorQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKK0NPTkZJR19EVkJfQ09SRT1tCitDT05GSUdfVklERU9fTUVESUE9bQorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX01FRElBX0FUVEFDSD15CitDT05GSUdfTUVESUFfVFVORVI9bQorIyBDT05GSUdfTUVESUFfVFVORVJfQ1VTVE9NSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19NRURJQV9UVU5FUl9TSU1QTEU9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTA9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTgyN1g9bQorQ09ORklHX01FRElBX1RVTkVSX1REQTE4MjcxPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9bQorQ09ORklHX01FRElBX1RVTkVSX01UMjA2MD1tCitDT05GSUdfTUVESUFfVFVORVJfTVQyMjY2PW0KK0NPTkZJR19NRURJQV9UVU5FUl9RVDEwMTA9bQorQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD1tCitDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA1Uz1tCitDT05GSUdfVklERU9fVjRMMj1tCitDT05GSUdfVklERU9fVjRMMT1tCitDT05GSUdfVklERU9fVFZFRVBST009bQorQ09ORklHX1ZJREVPX1RVTkVSPW0KK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQorQ09ORklHX1ZJREVPX01TUDM0MDA9bQorQ09ORklHX1ZJREVPX0NTNTNMMzJBPW0KK0NPTkZJR19WSURFT19XTTg3NzU9bQorQ09ORklHX1ZJREVPX1NBQTcxMVg9bQorQ09ORklHX1ZJREVPX0NYMjU4NDA9bQorQ09ORklHX1ZJREVPX0NYMjM0MVg9bQorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQVUwODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkEgaXMgbm90IHNldAorQ09ORklHX1Y0TF9VU0JfRFJJVkVSUz15CitDT05GSUdfVVNCX1ZJREVPX0NMQVNTPW0KK0NPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfVVNCX0dTUENBIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19QVlJVU0IyPW0KK0NPTkZJR19WSURFT19QVlJVU0IyX1NZU0ZTPXkKK0NPTkZJR19WSURFT19QVlJVU0IyX0RWQj15CisjIENPTkZJR19WSURFT19QVlJVU0IyX0RFQlVHSUZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0VNMjhYWCBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVVNCVklTSU9OPW0KK0NPTkZJR19WSURFT19VU0JWSURFTz1tCitDT05GSUdfVVNCX1ZJQ0FNPW0KK0NPTkZJR19VU0JfSUJNQ0FNPW0KK0NPTkZJR19VU0JfS09OSUNBV0M9bQorQ09ORklHX1VTQl9RVUlDS0NBTV9NRVNTRU5HRVI9bQorIyBDT05GSUdfVVNCX0VUNjFYMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVkNBTUNISVA9bQorQ09ORklHX1VTQl9XOTk2OENGPW0KK0NPTkZJR19VU0JfT1Y1MTE9bQorQ09ORklHX1VTQl9TRTQwMT1tCitDT05GSUdfVVNCX1NOOUMxMDI9bQorQ09ORklHX1VTQl9TVFY2ODA9bQorIyBDT05GSUdfVVNCX1pDMDMwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1BXQz1tCisjIENPTkZJR19VU0JfUFdDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfWlIzNjRYWD1tCisjIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0CitDT05GSUdfUkFESU9fQURBUFRFUlM9eQorIyBDT05GSUdfVVNCX0RTQlIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJNDcwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVI4MDAgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVEVBNTc2NCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX0RWQl9DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVFRQQ0lfRUVQUk9NIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgVVNCIEFkYXB0ZXJzCisjCitDT05GSUdfRFZCX1VTQj1tCisjIENPTkZJR19EVkJfVVNCX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfVVNCX0E4MDA9bQorQ09ORklHX0RWQl9VU0JfRElCVVNCX01CPW0KKyMgQ09ORklHX0RWQl9VU0JfRElCVVNCX01CX0ZBVUxUWSBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1VTQl9ESUJVU0JfTUM9bQorQ09ORklHX0RWQl9VU0JfRElCMDcwMD1tCitDT05GSUdfRFZCX1VTQl9VTVRfMDEwPW0KK0NPTkZJR19EVkJfVVNCX0NYVVNCPW0KK0NPTkZJR19EVkJfVVNCX005MjBYPW0KK0NPTkZJR19EVkJfVVNCX0dMODYxPW0KK0NPTkZJR19EVkJfVVNCX0FVNjYxMD1tCitDT05GSUdfRFZCX1VTQl9ESUdJVFY9bQorQ09ORklHX0RWQl9VU0JfVlA3MDQ1PW0KK0NPTkZJR19EVkJfVVNCX1ZQNzAyWD1tCitDT05GSUdfRFZCX1VTQl9HUDhQU0s9bQorQ09ORklHX0RWQl9VU0JfTk9WQV9UX1VTQjI9bQorQ09ORklHX0RWQl9VU0JfVFRVU0IyPW0KK0NPTkZJR19EVkJfVVNCX0RUVDIwMFU9bQorQ09ORklHX0RWQl9VU0JfT1BFUkExPW0KK0NPTkZJR19EVkJfVVNCX0FGOTAwNT1tCitDT05GSUdfRFZCX1VTQl9BRjkwMDVfUkVNT1RFPW0KKyMgQ09ORklHX0RWQl9VU0JfRFcyMTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9VU0JfQ0lORVJHWV9UMiBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVVNCX0FOWVNFRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfVVNCX0RUVjUxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1VTQl9BRjkwMTUgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFggaXMgbm90IHNldAorCisjCisjIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcworIworCisjCisjIEN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfRkVfQ1VTVE9NSVNFIGlzIG5vdCBzZXQKKworIworIyBNdWx0aXN0YW5kYXJkIChzYXRlbGxpdGUpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX1NUQjA4OTkgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX1NUQjYxMDAgaXMgbm90IHNldAorCisjCisjIERWQi1TIChzYXRlbGxpdGUpIGZyb250ZW5kcworIworQ09ORklHX0RWQl9DWDI0MTEwPW0KK0NPTkZJR19EVkJfQ1gyNDEyMz1tCitDT05GSUdfRFZCX01UMzEyPW0KK0NPTkZJR19EVkJfUzVIMTQyMD1tCisjIENPTkZJR19EVkJfU1RWMDI4OCBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfU1RCNjAwMCBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1NUVjAyOTk9bQorQ09ORklHX0RWQl9UREE4MDgzPW0KK0NPTkZJR19EVkJfVERBMTAwODY9bQorIyBDT05GSUdfRFZCX1REQTgyNjEgaXMgbm90IHNldAorQ09ORklHX0RWQl9WRVMxWDkzPW0KK0NPTkZJR19EVkJfVFVORVJfSVREMTAwMD1tCisjIENPTkZJR19EVkJfVFVORVJfQ1gyNDExMyBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1REQTgyNlg9bQorQ09ORklHX0RWQl9UVUE2MTAwPW0KKyMgQ09ORklHX0RWQl9DWDI0MTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9TSTIxWFggaXMgbm90IHNldAorCisjCisjIERWQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCisjCitDT05GSUdfRFZCX1NQODg3MD1tCitDT05GSUdfRFZCX1NQODg3WD1tCitDT05GSUdfRFZCX0NYMjI3MDA9bQorQ09ORklHX0RWQl9DWDIyNzAyPW0KKyMgQ09ORklHX0RWQl9EUlgzOTdYRCBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0w2NDc4MT1tCitDT05GSUdfRFZCX1REQTEwMDRYPW0KK0NPTkZJR19EVkJfTlhUNjAwMD1tCitDT05GSUdfRFZCX01UMzUyPW0KK0NPTkZJR19EVkJfWkwxMDM1Mz1tCitDT05GSUdfRFZCX0RJQjMwMDBNQj1tCitDT05GSUdfRFZCX0RJQjMwMDBNQz1tCitDT05GSUdfRFZCX0RJQjcwMDBNPW0KK0NPTkZJR19EVkJfRElCNzAwMFA9bQorQ09ORklHX0RWQl9UREExMDA0OD1tCisKKyMKKyMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfVkVTMTgyMD1tCitDT05GSUdfRFZCX1REQTEwMDIxPW0KK0NPTkZJR19EVkJfVERBMTAwMjM9bQorQ09ORklHX0RWQl9TVFYwMjk3PW0KKworIworIyBBVFNDIChOb3J0aCBBbWVyaWNhbi9Lb3JlYW4gVGVycmVzdHJpYWwvQ2FibGUgRFRWKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfTlhUMjAwWD1tCisjIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0JDTTM1MTA9bQorQ09ORklHX0RWQl9MR0RUMzMwWD1tCisjIENPTkZJR19EVkJfTEdEVDMzMDQgaXMgbm90IHNldAorQ09ORklHX0RWQl9TNUgxNDA5PW0KK0NPTkZJR19EVkJfQVU4NTIyPW0KK0NPTkZJR19EVkJfUzVIMTQxMT1tCisKKyMKKyMgSVNEQi1UICh0ZXJyZXN0cmlhbCkgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfUzkyMSBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCB0ZXJyZXN0cmlhbCBvbmx5IHR1bmVycy9QTEwKKyMKK0NPTkZJR19EVkJfUExMPW0KK0NPTkZJR19EVkJfVFVORVJfRElCMDA3MD1tCisKKyMKKyMgU0VDIGNvbnRyb2wgZGV2aWNlcyBmb3IgRFZCLVMKKyMKK0NPTkZJR19EVkJfTE5CUDIxPW0KKyMgQ09ORklHX0RWQl9JU0w2NDA1IGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfSVNMNjQyMT1tCisjIENPTkZJR19EVkJfTEdTOEdMNSBpcyBub3Qgc2V0CisKKyMKKyMgVG9vbHMgdG8gZGV2ZWxvcCBuZXcgZnJvbnRlbmRzCisjCisjIENPTkZJR19EVkJfRFVNTVlfRkUgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0FGOTAxMyBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfU09VTkQ9eQorQ09ORklHX1NPVU5EX09TU19DT1JFPXkKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX0hXREVQPXkKK0NPTkZJR19TTkRfUkFXTUlEST15CitDT05GSUdfU05EX1NFUVVFTkNFUj1tCisjIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTPXkKKyMgQ09ORklHX1NORF9IUlRJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CitDT05GSUdfU05EX1ZFUkJPU0VfUFJPQ0ZTPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUklOVEs9eQorQ09ORklHX1NORF9ERUJVRz15CisjIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1NQST15CitDT05GSUdfU05EX1VTQj15CitDT05GSUdfU05EX1VTQl9BVURJTz15CitDT05GSUdfU05EX1VTQl9DQUlBUT1tCitDT05GSUdfU05EX1VTQl9DQUlBUV9JTlBVVD15CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0NfTUNCU1A9eQorIyBDT05GSUdfU05EX09NQVBfU09DX09WRVJPIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT01BUF9TT0NfU0RQMzQzMD15CitDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQorQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX1RXTDQwMzA9eQorIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorQ09ORklHX0hJRF9ERUJVRz15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKK0NPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlM9eQorQ09ORklHX1VTQl9TVVNQRU5EPXkKK0NPTkZJR19VU0JfT1RHPXkKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hXQV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX0hEUkM9eQorQ09ORklHX1VTQl9NVVNCX1NPQz15CisKKyMKKyMgT01BUCAzNDN4IGhpZ2ggc3BlZWQgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9NVVNCX0hPU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfT1RHPXkKK0NPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQorQ09ORklHX01VU0JfUElPX09OTFk9eQorIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1BSSU5URVI9eQorQ09ORklHX1VTQl9XRE09eQorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRVRIPXkKK0NPTkZJR19VU0JfRVRIX1JORElTPXkKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCitDT05GSUdfVVNCX09UR19VVElMUz15CisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CitDT05GSUdfVFdMNDAzMF9VU0I9eQorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorQ09ORklHX1NESU9fVUFSVD15CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfT01BUCBpcyBub3Qgc2V0CitDT05GSUdfTU1DX09NQVBfSFM9eQorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz15CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19HUElPPXkKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1RXTDQwMzA9eQorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfWEZTX0ZTPW0KKyMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CitDT05GSUdfUVVPVEFfVFJFRT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPXkKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfU1VNTUFSWT15CitDT05GSUdfSkZGUzJfRlNfWEFUVFI9eQorQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKK0NPTkZJR19TQ0hFRFNUQVRTPXkKK0NPTkZJR19USU1FUl9TVEFUUz15CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19OT1BfVFJBQ0VSPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfUklOR19CVUZGRVI9eQorQ09ORklHX1RSQUNJTkc9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZUUkFDRV9TVEFSVFVQX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19YT1JfQkxPQ0tTPW0KK0NPTkZJR19BU1lOQ19DT1JFPW0KK0NPTkZJR19BU1lOQ19NRU1DUFk9bQorQ09ORklHX0FTWU5DX1hPUj1tCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD1tCitDT05GSUdfQ1JZUFRPX05VTEw9bQorQ09ORklHX0NSWVBUT19DUllQVEQ9bQorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9eQorQ09ORklHX0NSWVBUT19MUlc9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19YVFMgaXMgbm90IHNldAorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz1tCitDT05GSUdfQ1JZUFRPX1hDQkM9bQorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9eQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz15CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKworIworIyBDaXBoZXJzCisjCitDT05GSUdfQ1JZUFRPX0FFUz15CitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX0NBTUVMTElBPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz15CitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorQ09ORklHX0NSQzE2PW0KK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9eQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19DUkM3PXkKK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCmluZGV4IGE4ZWU2OTguLjAyMGU2YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwpAQCAtNDgxLDcgKzQ4MSw3IEBACiAjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX0NBRkUgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfUExBVEZPUk09eQogIyBDT05GSUdfTVREX0FMQVVEQSBpcyBub3Qgc2V0CiBDT05GSUdfTVREX05BTkRfT1JJT049eQogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldApAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfTTQ4VDg2PXkKICMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9wbGViX2RlZmNvbmZpZwppbmRleCBhNmI0N2VhLi5mMmQyZGRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3BsZWJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcGxlYl9kZWZjb25maWcKQEAgLTg4LDcgKzg4LDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3B4YTE2OF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3B4YTE2OF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1ZmFlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZwpAQCAtMCwwICsxLDg5MSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBGcmkgTWFyIDIwIDEzOjQzOjEzIDIwMDkKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfTU1VPXkKKyMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKKyMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0NPTVBBVF9CUks9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTU1QPXkKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0CisKKyMKKyMgTWFydmVsbCBQWEExNjgvOTEwIEltcGxtZW50YXRpb25zCisjCitDT05GSUdfTUFDSF9BU1BFTklURT15CitDT05GSUdfTUFDSF9aWUxPTklURTI9eQorIyBDT05GSUdfTUFDSF9UVENfREtCIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfUFhBMTY4PXkKK0NPTkZJR19QTEFUX1BYQT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9NT0hBV0s9eQorQ09ORklHX0NQVV8zMnY1PXkKK0NPTkZJR19DUFVfQUJSVF9FVjVUPXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfQ0FDSEVfVklWVD15CitDT05GSUdfQ1BVX0NPUFlfVjRXQj15CitDT05GSUdfQ1BVX1RMQl9WNFdCST15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0lXTU1YVD15CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMi4xMDA6L25mc3Jvb3QvIGlwPTE5Mi4xNjguMi4xMDE6MTkyLjE2OC4yLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09MTI4TSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCitDT05GSUdfRlBFX05XRlBFPXkKKyMgQ09ORklHX0ZQRV9OV0ZQRV9YUCBpcyBub3Qgc2V0CisjIENPTkZJR19GUEVfRkFTVEZQRSBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CisjIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfQk9PVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDOTExWCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfUFhBPXkKK0NPTkZJR19TRVJJQUxfUFhBX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUNMPXkKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUFJFRU1QVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKKworIworIyBUcmFjZXJzCisjCisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVJRU09GRl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTlRFWFRfU1dJVENIX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9weGE5MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9weGE5MTBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjN2UyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL3B4YTkxMF9kZWZjb25maWcKQEAgLTAsMCArMSw4OTEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzMKKyMgRnJpIE1hciAyMCAxMzo0NToxMiAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX01NUD15CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1RBVk9SRVZCPXkKKworIworIyBNYXJ2ZWxsIFBYQTE2OC85MTAgSW1wbG1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX01BQ0hfQVNQRU5JVEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9aWUxPTklURTIgaXMgbm90IHNldAorQ09ORklHX01BQ0hfVFRDX0RLQj15CitDT05GSUdfQ1BVX1BYQTkxMD15CitDT05GSUdfUExBVF9QWEE9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfTU9IQVdLPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19JV01NWFQ9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9uZnMgcm9vdGZzdHlwZT1uZnMgbmZzcm9vdD0xOTIuMTY4LjIuMTAwOi9uZnNyb290LyBpcD0xOTIuMTY4LjIuMTAxOjE5Mi4xNjguMi4xMDA6OjI1NS4yNTUuMjU1LjA6OmV0aDA6b24gY29uc29sZT10dHlTMCwxMTUyMDAgbWVtPTEyOE0iCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorQ09ORklHX1RNUEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQUNMX1NVUFBPUlQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MzEwMmRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yeDUxX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE4MjEgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzgKKyMgRnJpIE1hciAxMyAxNToyODo1NiAyMDA5CisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX01NVT15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorIyBDT05GSUdfVFJFRV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfVUlEMTY9eQorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19LUFJPQkVTPXkKK0NPTkZJR19LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRD15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCitDT05GSUdfRlJFRVpFUj15CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA9eQorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKworIworIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfT01BUF9PVEc9eQorIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAzPXkKKworIworIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucworIworIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX1JFU0VUX0NMT0NLUz15CitDT05GSUdfT01BUF9NVVg9eQorQ09ORklHX09NQVBfTVVYX0RFQlVHPXkKK0NPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15CitDT05GSUdfT01BUF9NQ0JTUD15CisjIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF8zMktfVElNRVI9eQorQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAorQ09ORklHX09NQVBfRE1fVElNRVI9eQorIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzPXkKK0NPTkZJR19PTUFQX1NFUklBTF9XQUtFPXkKK0NPTkZJR19BUkNIX09NQVAzNFhYPXkKK0NPTkZJR19BUkNIX09NQVAzNDMwPXkKKworIworIyBPTUFQIEJvYXJkIFR5cGUKKyMKKyMgQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUF9MRFAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PVkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVAzX1BBTkRPUkEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQXzM0MzBTRFAgaXMgbm90IHNldAorQ09ORklHX01BQ0hfTk9LSUFfUlg1MT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nz15CitDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfSUZBUj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKK0NPTkZJR19DUFVfQ0FDSEVfVklQVD15CitDT05GSUdfQ1BVX0NPUFlfVjY9eQorQ09ORklHX0NQVV9UTEJfVjc9eQorQ09ORklHX0NQVV9IQVNfQVNJRD15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0FSTV9USFVNQkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0hBU19UTFNfUkVHPXkKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJpbml0PS9zYmluL3ByZWluaXQgdWJpLm10ZD00IHJvb3Q9dWJpMDpyb290ZnMgcm9vdGZzdHlwZT11YmlmcyBydyBjb25zb2xlPXR0eU1URDUiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX1ZGUD15CitDT05GSUdfVkZQdjM9eQorQ09ORklHX05FT049eQorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX01JU0M9eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKK0NPTkZJR19QTV9ERUJVRz15CisjIENPTkZJR19QTV9WRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19DQU5fUE1fVFJBQ0U9eQorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0tFWT15CisjIENPTkZJR19ORVRfS0VZX01JR1JBVEUgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVI9eQorIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfQURWQU5DRUQ9eQorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9DT05OVFJBQ0sgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlkgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09NTUVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IQVNITElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVBTE0gaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05GX0RFRlJBR19JUFY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9JUFRBQkxFUz1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9FQ04gaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GSUxURVI9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9UQVJHRVRfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX01BTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9SQVcgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfQVJQVEFCTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RDUFBST0JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKK0NPTkZJR19CVD1tCitDT05GSUdfQlRfTDJDQVA9bQorQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfUkZDT01NPW0KK0NPTkZJR19CVF9SRkNPTU1fVFRZPXkKK0NPTkZJR19CVF9CTkVQPW0KK0NPTkZJR19CVF9CTkVQX01DX0ZJTFRFUj15CitDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVI9eQorQ09ORklHX0JUX0hJRFA9bQorCisjCisjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfQlRfSENJQlRVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlRTRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVVBUlQgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkNNMjAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQkZVU0IgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVkhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKK0NPTkZJR19DRkc4MDIxMT15CisjIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05MODAyMTE9eQorQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CisjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTE9bQorCisjCisjIFJhdGUgY29udHJvbCBhbGdvcml0aG0gc2VsZWN0aW9uCisjCitDT05GSUdfTUFDODAyMTFfUkNfUElEPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15CisjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJwaWQiCisjIENPTkZJR19NQUM4MDIxMV9NRVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfREVCVUdGUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT09QUz15CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQorIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT01BUF9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CitDT05GSUdfTVREX09ORU5BTkQ9eQorIyBDT05GSUdfTVREX09ORU5BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUMgaXMgbm90IHNldAorQ09ORklHX01URF9PTkVOQU5EX09NQVAyPXkKKyMgQ09ORklHX01URF9PTkVOQU5EX09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF8yWF9QUk9HUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EX1NJTSBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIC0gVW5zb3J0ZWQgYmxvY2sgaW1hZ2VzCisjCitDT05GSUdfTVREX1VCST15CitDT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgorQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQorIyBDT05GSUdfTVREX1VCSV9HTFVFQkkgaXMgbm90IHNldAorCisjCisjIFVCSSBkZWJ1Z2dpbmcgb3B0aW9ucworIworIyBDT05GSUdfTVREX1VCSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD1tCisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TQ0FOX0FTWU5DPXkKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPW0KKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MgTEFOCisjCisjIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOXzgwMjExPXkKKyMgQ09ORklHX0xJQkVSVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19XTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUTDgxODcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAorIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CisjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAorIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfSU5QVVRfS0VZQk9BUkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9DTTEwOSBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVUlOUFVUPW0KKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPW0KKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19PTUFQPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX09NQVAyNFhYPXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19TWVNGUz15CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CitDT05GSUdfR1BJT19UV0w0MDMwPXkKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX1dBVENIRE9HPW0KKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorQ09ORklHX1RXTDQwMzBfQ09SRT15CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworQ09ORklHX1ZJREVPX0RFVj1tCitDT05GSUdfVklERU9fVjRMMl9DT01NT049bQorQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDE9eQorQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19NRURJQT1tCisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSPW0KKyMgQ09ORklHX01FRElBX1RVTkVSX0NVU1RPTUlaRSBpcyBub3Qgc2V0CitDT05GSUdfTUVESUFfVFVORVJfU0lNUExFPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE4MjkwPW0KK0NPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzYxPW0KK0NPTkZJR19NRURJQV9UVU5FUl9URUE1NzY3PW0KK0NPTkZJR19NRURJQV9UVU5FUl9NVDIwWFg9bQorQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOD1tCitDT05GSUdfTUVESUFfVFVORVJfWEM1MDAwPW0KK0NPTkZJR19WSURFT19WNEwyPW0KK0NPTkZJR19WSURFT19WNEwxPW0KK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fSEVMUEVSX0NISVBTX0FVVE89eQorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQSBpcyBub3Qgc2V0CitDT05GSUdfVjRMX1VTQl9EUklWRVJTPXkKKyMgQ09ORklHX1VTQl9WSURFT19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR1NQQ0EgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fUFZSVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19FTTI4WFggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVNCVklTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WSUNBTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSUJNQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LT05JQ0FXQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FVDYxWDI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVkNBTUNISVAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09WNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRTQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU045QzEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RWNjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aQzAzMDEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BXQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWlIzNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RLV0VCQ0FNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TMjI1NSBpcyBub3Qgc2V0CitDT05GSUdfUkFESU9fQURBUFRFUlM9eQorIyBDT05GSUdfVVNCX0RTQlIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJNDcwWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVI4MDAgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fVEVBNTc2NCBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CisKKyMKKyMgRGlzcGxheSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CitDT05GSUdfU09VTkQ9eQorIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorQ09ORklHX1NORF9BUk09eQorQ09ORklHX1NORF9TUEk9eQorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DPXkKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD1tCisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9bQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworIyBDT05GSUdfVVNCX0tCRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9VU0UgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQ09NUEFUPXkKK0NPTkZJR19ISURfQTRURUNIPW0KK0NPTkZJR19ISURfQVBQTEU9bQorQ09ORklHX0hJRF9CRUxLSU49bQorQ09ORklHX0hJRF9DSEVSUlk9bQorQ09ORklHX0hJRF9DSElDT05ZPW0KK0NPTkZJR19ISURfQ1lQUkVTUz1tCitDT05GSUdfSElEX0VaS0VZPW0KK0NPTkZJR19ISURfR1lSQVRJT049bQorQ09ORklHX0hJRF9MT0dJVEVDSD1tCisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD1tCitDT05GSUdfSElEX01PTlRFUkVZPW0KKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9bQorQ09ORklHX0hJRF9TQU1TVU5HPW0KK0NPTkZJR19ISURfU09OWT1tCitDT05GSUdfSElEX1NVTlBMVVM9bQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0I9eQorQ09ORklHX1VTQl9ERUJVRz15CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVU1BFTkQ9eQorQ09ORklHX1VTQl9PVEc9eQorQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUPXkKK0NPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUI9eQorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTVVTQl9IRFJDPXkKK0NPTkZJR19VU0JfTVVTQl9TT0M9eQorCisjCisjIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CisjCisjIENPTkZJR19VU0JfTVVTQl9IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUwgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX09URz15CitDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQorQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKKyMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAorQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQorIyBDT05GSUdfVVNCX1RJX0NQUElfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTElCVVNVQUw9eQorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorQ09ORklHX1VTQl9URVNUPW0KKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPW0KK0NPTkZJR19VU0JfR0FER0VUX0RFQlVHPXkKK0NPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTPXkKK0NPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZTPXkKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CitDT05GSUdfVVNCX1pFUk89bQorIyBDT05GSUdfVVNCX1pFUk9fSE5QVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKK0NPTkZJR19VU0JfT1RHX1VUSUxTPXkKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19UV0w0MDMwX1VTQj15CitDT05GSUdfTU1DPW0KKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPW0KK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfT01BUCBpcyBub3Qgc2V0CitDT05GSUdfTU1DX09NQVBfSFM9bQorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19ORVdfTEVEUz15CitDT05GSUdfTEVEU19DTEFTUz1tCisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKyMgQ09ORklHX0xFRFNfUENBOTUzMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKyMgQ09ORklHX0xFRFNfVFJJR0dFUlMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz1tCisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1RXTDQwMzA9bQorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9bQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz1tCisjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD1tCisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKK0NPTkZJR19RVU9UQT15CisjIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORz15CitDT05GSUdfUVVPVEFfVFJFRT15CisjIENPTkZJR19RRk1UX1YxIGlzIG5vdCBzZXQKK0NPTkZJR19RRk1UX1YyPXkKK0NPTkZJR19RVU9UQUNUTD15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTRV9GUz1tCisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlM9eQorIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAorQ09ORklHX1VCSUZTX0ZTX0xaTz15CitDT05GSUdfVUJJRlNfRlNfWkxJQj15CisjIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPW0KK0NPTkZJR19TVU5SUENfR1NTPW0KKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKK0NPTkZJR19USU1FUl9TVEFUUz15CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19MT0NLX0FMTE9DPXkKK0NPTkZJR19QUk9WRV9MT0NLSU5HPXkKK0NPTkZJR19MT0NLREVQPXkKK0NPTkZJR19MT0NLX1NUQVQ9eQorIyBDT05GSUdfREVCVUdfTE9DS0RFUCBpcyBub3Qgc2V0CitDT05GSUdfVFJBQ0VfSVJRRkxBR1M9eQorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfS1BST0JFU19TQU5JVFlfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xLRFRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZX0RFRkFVTFRfTU1BUF9NSU5fQUREUj0wCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKKyMgQ09ORklHX0NSWVBUT19GSVBTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj15CisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9eQorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKK0NPTkZJR19DUllQVE9fTFpPPXkKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD15CitDT05GSUdfQ1JDMTY9eQorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19DUkM3PW0KK0NPTkZJR19MSUJDUkMzMkM9eQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NoYW5ub25fZGVmY29uZmlnCmluZGV4IGQwNTJjOGYuLjk4NGY3MDk2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3NoYW5ub25fZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhbm5vbl9kZWZjb25maWcKQEAgLTg3LDcgKzg3LDYgQEAKICMgQ09ORklHX1NBMTEwMF9DT0xMSUUgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IMzYwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQTExMDBfSDM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0JBREdFNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSk9STkFEQTcyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSEFDS0tJVCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NoYXJrX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCmluZGV4IDliNjU2MWQuLjkwMjM1YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2hhcmtfZGVmY29uZmlnCkBAIC0xLDg4ICsxLDE3NCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLWdpdDMKLSMgU2F0IEp1bCAxNiAxNToyMTo0NyAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtZ2l0NgorIyBUaHUgSmFuICA4IDE3OjE0OjQ3IDIwMDkKICMKIENPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKKyMgQ09ORklHX0dFTkVSSUNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUyBpcyBub3Qgc2V0CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CisjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKIENPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKICMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKICMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CiBDT05GSUdfS01PRD15CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIAogIwogIyBTeXN0ZW0gVHlwZQogIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1NIQVJLPXkKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogCiAjCiAjIFByb2Nlc3NvciBUeXBlCkBAIC05MSwxNCArMTc3LDIwIEBACiBDT05GSUdfQ1BVX1NBMTEwPXkKIENPTkZJR19DUFVfMzJ2ND15CiBDT05GSUdfQ1BVX0FCUlRfRVY0PXkKK0NPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKIENPTkZJR19DUFVfQ0FDSEVfVjRXQj15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQogQ09ORklHX0NQVV9UTEJfVjRXQj15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CiAKICMKICMgUHJvY2Vzc29yIEZlYXR1cmVzCiAjCisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKIAogIwogIyBCdXMgc3VwcG9ydApAQCAtMTA3LDIyICsxOTksNDAgQEAKIENPTkZJR19JU0FfRE1BPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiBDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfU1lTQ0FMTD15CiBDT05GSUdfUENJX0hPU1RfVklBODJDNTA1PXkKLUNPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQotIyBDT05GSUdfUENJX05BTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwogIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgRmVhdHVyZXMKICMKLSMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotIyBDT05GSUdfRElTQ09OVElHTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0ZMQVRNRU1fSEFTX0hPTEVTPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKIENPTkZJR19MRURTPXkKIENPTkZJR19MRURTX1RJTUVSPXkKICMgQ09ORklHX0xFRFNfQ1BVIGlzIG5vdCBzZXQKQEAgLTEzNSw2ICsyNDUsMTIgQEAKIENPTkZJR19aQk9PVF9ST01fQlNTPTB4MAogQ09ORklHX0NNRExJTkU9IiIKICMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CiAKICMKICMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCkBAIC0xNDMsMTMgKzI1OSwxNiBAQAogIwogIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKICMKLSMgQ09ORklHX0ZQRV9OV0ZQRSBpcyBub3Qgc2V0Ci1DT05GSUdfRlBFX0ZBU1RGUEU9eQorQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAogCiAjCiAjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwogIwogQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CiAjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUlRIVVIgaXMgbm90IHNldApAQCAtMTU4LDYgKzI3Nyw3NSBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtMTY2LDM2ICszNTQsMjcgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCiBDT05GSUdfUEFSUE9SVD1tCiBDT05GSUdfUEFSUE9SVF9QQz1tCiAjIENPTkZJR19QQVJQT1JUX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUX1BDX0ZJRk8gaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBUlBPUlRfQVJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfQVg4ODc5NiBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUXzEyODQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwogIyBDT05GSUdfUE5QIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKQEAgLTIxMCw1MiArMzg5LDc4IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CiBDT05GSUdfSURFPXkKLUNPTkZJR19CTEtfREVWX0lERT15CiAKICMKLSMgUGxlYXNlIHNlZSBEb2N1bWVudGF0aW9uL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUvaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKICMKK0NPTkZJR19JREVfQVRBUEk9eQogIyBDT05GSUdfQkxLX0RFVl9JREVfU0FUQSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVESVNLPXkKLSMgQ09ORklHX0lERURJU0tfTVVMVElfTU9ERSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0dEPXkKK0NPTkZJR19JREVfR0RfQVRBPXkKKyMgQ09ORklHX0lERV9HRF9BVEFQSSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVDRD1tCitDT05GSUdfQkxLX0RFVl9JREVDRF9WRVJCT1NFX0VSUk9SUz15CiAjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRkxPUFBZPXkKLSMgQ09ORklHX0JMS19ERVZfSURFU0NTSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQogCiAjCiAjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKICMKLUNPTkZJR19JREVfR0VORVJJQz15Ci0jIENPTkZJR19CTEtfREVWX0lERVBDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BMQVRGT1JNIGlzIG5vdCBzZXQKKworIworIyBQQ0kgSURFIGNoaXBzZXRzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0JMS19ERVZfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09QVEk2MjEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSSUZMRVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9KTUlDUk9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTDgyQzEwNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NMQzkwRTY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJNMjkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAogQ09ORklHX0lERV9BUk09eQotIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lERURNQV9BVVRPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAogCiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIAogIwpAQCAtMjc1LDE3ICs0ODAsMjAgQEAKICMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KIAogIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjIFNDU0kgVHJhbnNwb3J0cwogIwogIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCi0jCisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ1hHQjNfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfNzAwMEZBU1NUIGlzIG5vdCBzZXQKQEAgLTI5NiwxMiArNTA0LDE4IEBACiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM5NFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FEVkFOU1lTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU4yMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQVJDTVNSIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKQEAgLTMxNCwyMCArNTI4LDE1IEBACiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTU0gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05DUjUzQzQwNkEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1BTSTI0MEkgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMlhYWD1tCi0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CkBAIC0zMzYsMTIzICs1NDUsNTcgQEAKICMgQ09ORklHX1NDU0lfVTE0XzM0RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAotIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CiAjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJPIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19JMk8gaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfVENQRElBRz15Ci0jIENPTkZJR19JUF9UQ1BESUFHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUk9VVEUgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgdGVzdGluZwotIwotIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKICMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAogIyBDT05GSUdfTEFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TTUMgaXMgbm90IHNldAogIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfUkFDQUwgaXMgbm90IHNldAotCi0jCi0jIFR1bGlwIGZhbWlseSBuZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCiAjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAogIyBDT05GSUdfQVQxNzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFUENBIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JU0EgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUX1BDST15CiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKQEAgLTQ2Miw1NiArNjA1LDY5IEBACiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKIENPTkZJR19DUzg5eDA9eQotIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CitDT05GSUdfQ1M4OXgwX05PRUVQUk9NPXkKICMgQ09ORklHX0UxMDAgaXMgbm90IHNldAogIyBDT05GSUdfRkVBTE5YIGlzIG5vdCBzZXQKICMgQ09ORklHX05BVFNFTUkgaXMgbm90IHNldAogIyBDT05GSUdfTkUyS19QQ0kgaXMgbm90IHNldAogIyBDT05GSUdfODEzOUNQIGlzIG5vdCBzZXQKICMgQ09ORklHXzgxMzlUT08gaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAogIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAogIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMCBNYml0KQotIworIyBDT05GSUdfQVRMMiBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWXzEwMDA9eQogIyBDT05GSUdfQUNFTklDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RMMksgaXMgbm90IHNldAogIyBDT05GSUdfRTEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMDBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JR0IgaXMgbm90IHNldAogIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKICMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SODE2OSBpcyBub3Qgc2V0CisjIENPTkZJR19TSVMxOTAgaXMgbm90IHNldAogIyBDT05GSUdfU0tHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwMD15CisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKK0NPTkZJR19DSEVMU0lPX1QzX0RFUEVORFM9eQorIyBDT05GSUdfQ0hFTFNJT19UMyBpcyBub3Qgc2V0CisjIENPTkZJR19FTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lYR0JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRYRU5fTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JVSBpcyBub3Qgc2V0CisjIENPTkZJR19NTFg0X0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01MWDRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19URUhVVEkgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMlggaXMgbm90IHNldAorIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CisjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIyBXaXJlbGVzcyBMQU4KICMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAogIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZEREkgaXMgbm90IHNldAogIyBDT05GSUdfSElQUEkgaXMgbm90IHNldApAQCAtNTE5LDE4ICs2NzUsMTcgQEAKICMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwogQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtNTQwLDcgKzY5NSw2IEBACiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIApAQCAtNTUzLDE0ICs3MDcsMjUgQEAKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTU9VU0U9eQogQ09ORklHX01PVVNFX1BTMj15CitDT05GSUdfTU9VU0VfUFMyX0FMUFM9eQorQ09ORklHX01PVVNFX1BTMl9MT0dJUFMyUFA9eQorQ09ORklHX01PVVNFX1BTMl9TWU5BUFRJQ1M9eQorQ09ORklHX01PVVNFX1BTMl9MSUZFQk9PSz15CitDT05GSUdfTU9VU0VfUFMyX1RSQUNLUE9JTlQ9eQorIyBDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX0lOUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9MT0dJQk0gaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfUEMxMTBQQUQgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKQEAgLTU4MCwxNiArNzQ1LDIyIEBACiAjIENoYXJhY3RlciBkZXZpY2VzCiAjCiBDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtNTk5LDkwICs3NzAsMTIyIEBACiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKIENPTkZJR19QUklOVEVSPW0KICMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBERVYgaXMgbm90IHNldAotIyBDT05GSUdfVElQQVIgaXMgbm90IHNldAotCi0jCi0jIElQTUkKLSMKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009bQogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotQ09ORklHX1JUQz15CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKK0NPTkZJR19ERVZQT1JUPXkKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwotIyBNaXNjIGRldmljZXMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCiAjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKIAogIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CiAKICMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAogIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQorIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9EREMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKLUNPTkZJR19GQl9TT0ZUX0NVUlNPUj15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIwogIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQ1lCRVIyMDAwPXkKICMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAogIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKQEAgLTY5MSwxMjYgKzg5NCwxMzIgQEAKICMgQ09ORklHX01EQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15Ci0KLSMKLSMgTG9nbyBjb25maWd1cmF0aW9uCi0jCiBDT05GSUdfTE9HTz15CiAjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAogIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CiBDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgU291bmQKLSMKIENPTkZJR19TT1VORD1tCi0KLSMKLSMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCi0jCitDT05GSUdfU09VTkRfT1NTX0NPUkU9eQogIyBDT05GSUdfU05EIGlzIG5vdCBzZXQKLQotIwotIyBPcGVuIFNvdW5kIFN5c3RlbQotIwogQ09ORklHX1NPVU5EX1BSSU1FPW0KLSMgQ09ORklHX1NPVU5EX0JUODc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0NNUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0VNVTEwSzEgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRlVTSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9FUzEzNzAgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfRVMxMzcxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0VTU1NPTE8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX01BRVNUUk8gaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTUFFU1RSTzMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfSUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1NPTklDVklCRVMgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EQ0xBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9NU05EUElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfU09VTkRfT1NTPW0KICMgQ09ORklHX1NPVU5EX1RSQUNFSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9ETUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0FEMTgxNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfU0dBTEFYWSBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfQURMSUI9bQotIyBDT05GSUdfU09VTkRfQUNJX01JWEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0NTNDIzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9TU0NBUEUgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfR1VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1ZNSURJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX1RSSVggaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX01QVTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9NQUQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9QQVMgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfUFNTIGlzIG5vdCBzZXQKIENPTkZJR19TT1VORF9TQj1tCi0jIENPTkZJR19TT1VORF9BV0UzMl9TWU5USCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9XQVZFRlJPTlQgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfTUFVSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9ZTTM4MTIgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfT1BMM1NBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9PUEwzU0EyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1lNRlBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9VQVJUNjg1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TT1VORF9BRURTUDE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NPVU5EX0tBSExVQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT1VORF9BTEk1NDU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX0ZPUlRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPVU5EX1JNRTk2WFggaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfQUQxOTgwIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKKyMgQ09ORklHX0hJRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIHN1cHBvcnQKKyMgU3BlY2lhbCBISUQgZHJpdmVycwogIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMgRW5hYmxlIEhvc3Qgb3IgR2FkZ2V0IHN1cHBvcnQgdG8gc2VlIEludmVudHJhIG9wdGlvbnMKICMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKICMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfQ01PUz15CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAogCiAjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAogQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIworIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0lOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKICMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwpAQCAtODM0LDE0ICsxMDQzLDEyIEBACiAjIFBzZXVkbyBmaWxlc3lzdGVtcwogIwogQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVkZTX0ZTPXkKLUNPTkZJR19ERVZGU19NT1VOVD15Ci0jIENPTkZJR19ERVZGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtODU1LDIyICsxMDYyLDI3IEBACiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLUNPTkZJR19ORlNfRlM9bQorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CiBDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19MT0NLRD1tCitDT05GSUdfTkZTRD1tCisjIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfU1VOUlBDPW0KK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19SRUdJU1RFUl9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldApAQCAtODk3LDExICsxMTA5LDkgQEAKICMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIworIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfTkxTPW0KIENPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQpAQCAtOTQyLDMwICsxMTUyLDc0IEBACiAjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKICMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAogIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSQUNFX0JSQU5DSF9QUk9GSUxJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKIAogIwpAQCAtOTczLDE5ICsxMjI3LDIzIEBACiAjCiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCiAjIExpYnJhcnkgcm91dGluZXMKICMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3NpbXBhZF9kZWZjb25maWcKaW5kZXggMDNmNzgzZS4uNjg1ZDJiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zaW1wYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvc2ltcGFkX2RlZmNvbmZpZwpAQCAtODksNyArODksNiBAQAogIyBDT05GSUdfU0ExMTAwX0NPTExJRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfSDMxMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0ExMTAwX0gzNjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBMTEwMF9IMzgwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQTExMDBfQkFER0U0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9KT1JOQURBNzIwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBMTEwMF9IQUNLS0lUIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MveG1feDJ4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3htX3gyeHhfZGVmY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDM5ZjM2Ni4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL3htX3gyeHhfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTgwNiArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjctcmM4Ci0jIFN1biBPY3QgIDUgMTE6MDU6MzYgMjAwOAotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQotQ09ORklHX0dFTkVSSUNfR1BJTz15Ci1DT05GSUdfR0VORVJJQ19USU1FPXkKLUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKLUNPTkZJR19NTVU9eQotIyBDT05GSUdfTk9fSU9QT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKLUNPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQotQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKLUNPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQotQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQotQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15Ci1DT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1U2NCBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfQVJDSF9TVVBQT1JUU19BT1VUPXkKLUNPTkZJR19aT05FX0RNQT15Ci1DT05GSUdfQVJDSF9NVERfWElQPXkKLUNPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQotQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCi1DT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUtDT05GSUc9eQotQ09ORklHX0lLQ09ORklHX1BST0M9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLSMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0VSX1NDSEVEPXkKLSMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRD15Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15Ci0jIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TWVNDVEw9eQotQ09ORklHX0VNQkVEREVEPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19IT1RQTFVHPXkKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfQU5PTl9JTk9ERVM9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSUdOQUxGRD15Ci1DT05GSUdfVElNRVJGRD15Ci1DT05GSUdfRVZFTlRGRD15Ci1DT05GSUdfU0hNRU09eQotIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19TTFVCPXkKLSMgQ09ORklHX1NMT0IgaXMgbm90IHNldAotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfT1BST0ZJTEU9eQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0tQUk9CRVM9eQotQ09ORklHX0hBVkVfS1JFVFBST0JFUz15Ci0jIENPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTIGlzIG5vdCBzZXQKLUNPTkZJR19IQVZFX0NMSz15Ci0jIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLUNPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLUNPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MU0YgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9DRlE9eQotIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUFhBPXkKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNN1gwMEEgaXMgbm90IHNldAotQ09ORklHX0RNQUJPVU5DRT15Ci0KLSMKLSMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKLSMKLSMgQ09ORklHX0FSQ0hfR1VNU1RJWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xVQkJPQ0sgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MT0dJQ1BEX1BYQTI3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9JRFAgaXMgbm90IHNldAotIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WSVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQV9FU0VSSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSSVpFUFNfUFhBIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX0VNX1gyNzA9eQotIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAotQ09ORklHX01BQ0hfQVJNQ09SRT15Ci0jIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEFfUEFMTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKLUNPTkZJR19QWEEyNXg9eQotQ09ORklHX1BYQTI3eD15Ci1DT05GSUdfUFhBX1NTUD15Ci0jIENPTkZJR19QWEFfUFdNIGlzIG5vdCBzZXQKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX0NQMTU9eQotQ09ORklHX0NQVV9DUDE1X01NVT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi1DT05GSUdfQVJNX1RIVU1CPXkKLSMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVdNTVhUPXkKLUNPTkZJR19YU0NBTEVfUE1VPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX1BDST15Ci1DT05GSUdfUENJX1NZU0NBTEw9eQotQ09ORklHX1BDSV9IT1NUX0lURTgxNTI9eQotIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAotQ09ORklHX1BDSV9MRUdBQ1k9eQotIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ0NBUkQ9bQotIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUE9bQotQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15Ci1DT05GSUdfUENNQ0lBX0lPQ1RMPXkKLUNPTkZJR19DQVJEQlVTPXkKLQotIwotIyBQQy1jYXJkIGJyaWRnZXMKLSMKLUNPTkZJR19ZRU5UQT1tCi0jIENPTkZJR19ZRU5UQV9PMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ZRU5UQV9SSUNPSCBpcyBub3Qgc2V0Ci1DT05GSUdfWUVOVEFfVEk9eQotIyBDT05GSUdfWUVOVEFfRU5FX1RVTkUgaXMgbm90IHNldAotIyBDT05GSUdfWUVOVEFfVE9TSElCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAotIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKLUNPTkZJR19QQ01DSUFfUFhBMlhYPW0KLUNPTkZJR19QQ0NBUkRfTk9OU1RBVElDPW0KLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLUNPTkZJR19USUNLX09ORVNIT1Q9eQotQ09ORklHX05PX0haPXkKLSMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0Ci1DT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15Ci1DT05GSUdfVk1TUExJVF8zRz15Ci0jIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAotQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0haPTEwMAotQ09ORklHX0FFQUJJPXkKLUNPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15Ci0jIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0Ci1DT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQotQ09ORklHX0JPVU5DRT15Ci1DT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9InJvb3Q9MWYwMyBtZW09MzJNIgotIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKLSMKLSMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLUNPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLSMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKLSMKLUNPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUE1fU0xFRVA9eQotQ09ORklHX1NVU1BFTkQ9eQotQ09ORklHX1NVU1BFTkRfRlJFRVpFUj15Ci1DT05GSUdfQVBNX0VNVUxBVElPTj1tCi1DT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotQ09ORklHX1VOSVg9eQotQ09ORklHX1hGUk09eQotIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAotIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotQ09ORklHX0lQX1BOUF9ESENQPXkKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQotIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19UQ1BfQ09OR19DVUJJQz15Ci1DT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCi0jIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLUNPTkZJR19CVD1tCi1DT05GSUdfQlRfTDJDQVA9bQotQ09ORklHX0JUX1NDTz1tCi1DT05GSUdfQlRfUkZDT01NPW0KLSMgQ09ORklHX0JUX1JGQ09NTV9UVFkgaXMgbm90IHNldAotQ09ORklHX0JUX0JORVA9bQotIyBDT05GSUdfQlRfQk5FUF9NQ19GSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfQlRfQk5FUF9QUk9UT19GSUxURVIgaXMgbm90IHNldAotQ09ORklHX0JUX0hJRFA9bQotCi0jCi0jIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX0JUX0hDSVVTQj1tCi1DT05GSUdfQlRfSENJVVNCX1NDTz15Ci0jIENPTkZJR19CVF9IQ0lCVFVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCVFNESU8gaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJVUFSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCQ00yMDNYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJQQTEwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lCRlVTQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVF9IQ0lEVEwxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSUJUM0MgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQkxVRUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfQlRfSENJQlRVQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAotIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzCi0jCi0jIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQotIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19TVEFOREFMT05FPXkKLUNPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKLUNPTkZJR19GV19MT0FERVI9bQotQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15Ci1DT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAotIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLSMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfSkVERUNQUk9CRT15Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci1DT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15Ci1DT05GSUdfTVREX0NGSV9OT1NXQVA9eQotIyBDT05GSUdfTVREX0NGSV9CRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9MRV9CWVRFX1NXQVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9HRU9NRVRSWSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfT1RQIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLUNPTkZJR19NVERfQ0ZJX0FNRFNURD15Ci1DT05GSUdfTVREX0NGSV9TVEFBPXkKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKLUNPTkZJR19NVERfUEhZU01BUF9MRU49MHg0MDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgotQ09ORklHX01URF9QWEEyWFg9eQotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfU0hBUlBfU0wgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKLQotIwotIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkQ9eQotIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9IMTkwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX05BTkRfR1BJTz1tCi1DT05GSUdfTVREX05BTkRfSURTPXkKLSMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX05BTkRfU0hBUlBTTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9DQUZFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9DTV9YMjcwPXkKLSMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX1BMQVRGT1JNPXkKLSMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAotCi0jCi0jIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwotIwotIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWPXkKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD15Ci0jIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2Ci0jIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfSURFPXkKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9ETUE9eQotIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1BST0NfRlM9eQotCi0jCi0jIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCi0jCi1DT05GSUdfQkxLX0RFVl9TRD15Ci0jIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9XQUlUX1NDQU49bQotCi0jCi0jIFNDU0kgVHJhbnNwb3J0cwotIwotIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9MT1dMRVZFTD15Ci0jIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTE9XTEVWRUxfUENNQ0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAotQ09ORklHX0FUQT1tCi0jIENPTkZJR19BVEFfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QTVAgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAotQ09ORklHX0FUQV9TRkY9eQotIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBVEFfVklURVNTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQVRBX0lOSUMxNjJYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQUxJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQU1EIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQVJUT1AgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9BVElJWFAgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9DTUQ2NDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ01ENjRYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1M1NTMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX0VGQVIgaXMgbm90IHNldAotIyBDT05GSUdfQVRBX0dFTkVSSUMgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzNjYgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzN1ggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9IUFQzWDJOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSFBUM1gzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSVQ4MjEzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfSk1JQ1JPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1RSSUZMRVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9NQVJWRUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTVBJSVggaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PTERQSUlYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTkVUQ0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX05JTkpBMzIgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9OUzg3NDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKLUNPTkZJR19QQVRBX1BDTUNJQT1tCi0jIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAotIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKLSMKLSMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAotIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MVggaXMgbm90IHNldAotQ09ORklHX0RNOTAwMD15Ci1DT05GSUdfRE05MDAwX0RFQlVHTEVWRUw9MQotIyBDT05GSUdfRE05MDAwX0ZPUkNFX1NJTVBMRV9QSFlfUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAotIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAotQ09ORklHX05FVF9QQ0k9eQotIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0I0NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAotIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GRUFMTlggaXMgbm90IHNldAotIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR184MTM5Q1AgaXMgbm90IHNldAotQ09ORklHXzgxMzlUT089eQotIyBDT05GSUdfODEzOVRPT19QSU8gaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVIgaXMgbm90IHNldAotIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKLSMgQ09ORklHXzgxMzlfT0xEX1JYX1JFU0VUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I2MDQwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJUzkwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUElDMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTkRBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RMQU4gaXMgbm90IHNldAotIyBDT05GSUdfVklBX1JISU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDOTIwMzEgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dMQU5fODAyMTE9eQotIyBDT05GSUdfUENNQ0lBX1JBWUNTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0Ci1DT05GSUdfTElCRVJUQVM9bQotIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkVSVEFTX0NTIGlzIG5vdCBzZXQKLUNPTkZJR19MSUJFUlRBU19TRElPPW0KLSMgQ09ORklHX0xJQkVSVEFTX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hFUk1FUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BSVJPX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDTUNJQV9XTDM1MDEgaXMgbm90IHNldAotIyBDT05GSUdfUFJJU001NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAotIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgTmV0d29yayBBZGFwdGVycwotIwotIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ01DSUEgaXMgbm90IHNldAotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15Ci1DT05GSUdfUFBQX0ZJTFRFUj15Ci1DT05GSUdfUFBQX0FTWU5DPW0KLSMgQ09ORklHX1BQUF9TWU5DX1RUWSBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQX0RFRkxBVEU9bQotQ09ORklHX1BQUF9CU0RDT01QPW0KLSMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotQ09ORklHX1NMSEM9bQotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX0VWREVWPXkKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0FQTVBPV0VSIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKLUNPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKLUNPTkZJR19LRVlCT0FSRF9QWEEyN3g9bQotIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAotQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYPW0KLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcwNSBpcyBub3Qgc2V0Ci1DT05GSUdfVE9VQ0hTQ1JFRU5fV005NzEyPXkKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1dNOTcxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1VDSFNDUkVFTl9XTTk3WFhfTUFJTlNUT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAotIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fTElCUFMyPXkKLSMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKLUNPTkZJR19ERVZLTUVNPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi0jIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9QWEE9eQotQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTE2Ci0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1NZTkNMSU5LX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAotIyBDT05GSUdfSVBXSVJFTEVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotQ09ORklHX0RFVlBPUlQ9eQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0JPQVJESU5GTz15Ci1DT05GSUdfSTJDX0NIQVJERVY9bQotQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0KLSMKLSMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQotIwotIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX1BYQT15Ci0jIENPTkZJR19JMkNfUFhBX1NMQVZFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAotCi0jCi0jIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15Ci1DT05GSUdfR1BJT0xJQj15Ci0jIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAotCi0jCi0jIEkyQyBHUElPIGV4cGFuZGVyczoKLSMKLSMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAotIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKLQotIwotIyBQQ0kgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgR1BJTyBleHBhbmRlcnM6Ci0jCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLQotIwotIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKLSMKLUNPTkZJR19TU0JfUE9TU0lCTEU9eQotIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VDQjE0MDBfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAotIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLSMgQ09ORklHX0RBQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLUNPTkZJR19GQj15Ci0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKLUNPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQotQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKLSMKLSMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX01BVFJPWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9SQURFT04gaXMgbm90IHNldAotIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX05FT01BR0lDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0tZUk8gaXMgbm90IHNldAotIyBDT05GSUdfRkJfM0RGWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WT09ET08xIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1ZUODYyMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX0FSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTTMgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ0FSTUlORSBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfUFhBPXkKLSMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9QWEFfUEFSQU1FVEVSUz15Ci1DT05GSUdfRkJfTUJYPW0KLSMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAotIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKLUNPTkZJR19MT0dPPXkKLUNPTkZJR19MT0dPX0xJTlVYX01PTk89eQotQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQotQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15Ci1DT05GSUdfU09VTkQ9bQotQ09ORklHX1NORD1tCi1DT05GSUdfU05EX1RJTUVSPW0KLUNPTkZJR19TTkRfUENNPW0KLSMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAotQ09ORklHX1NORF9PU1NFTVVMPXkKLUNPTkZJR19TTkRfTUlYRVJfT1NTPW0KLUNPTkZJR19TTkRfUENNX09TUz1tCi1DT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15Ci0jIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQotQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15Ci0jIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfVk1BU1RFUj15Ci1DT05GSUdfU05EX0FDOTdfQ09ERUM9bQotQ09ORklHX1NORF9EUklWRVJTPXkKLSMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUM5N19QT1dFUl9TQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUENJPXkKLSMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FVODgxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVU4ODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BVTg4MzAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0FXMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NBMDEwNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ01JUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PWFlHRU4gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRU5TMTM3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfRVMxOTM4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9FUzE5NjggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0ZNODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IREFfSU5URUwgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1AgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEU1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ISUZJRVIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAotIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVklSVFVPU08gaXMgbm90IHNldAotIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAotQ09ORklHX1NORF9BUk09eQotQ09ORklHX1NORF9QWEEyWFhfUENNPW0KLUNPTkZJR19TTkRfUFhBMlhYX0FDOTc9bQotQ09ORklHX1NORF9VU0I9eQotIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfUENNQ0lBPXkKLSMgQ09ORklHX1NORF9WWFBPQ0tFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUERBVURJT0NGIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9TT0MgaXMgbm90IHNldAotIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAotQ09ORklHX0FDOTdfQlVTPW0KLUNPTkZJR19ISURfU1VQUE9SVD15Ci1DT05GSUdfSElEPXkKLUNPTkZJR19ISURfREVCVUc9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfRkYgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1NVUFBPUlQ9eQotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15Ci1DT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKLSMKLUNPTkZJR19VU0JfREVWSUNFRlM9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAotQ09ORklHX1VTQl9NT049eQotCi0jCi0jIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0VIQ0lfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAotQ09ORklHX1VTQl9PSENJX0hDRD15Ci0jIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKLSMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCi0jCi0jIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAotCi0jCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKLSMKLQotIwotIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCi0jCi1DT05GSUdfVVNCX1NUT1JBR0U9eQotIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW1hZ2luZyBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHBvcnQgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycwotIwotIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci1DT05GSUdfTU1DPW0KLSMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgRHJpdmVycwotIwotQ09ORklHX01NQ19CTE9DSz1tCi1DT05GSUdfTU1DX0JMT0NLX0JPVU5DRT15Ci0jIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAotIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwotIwotQ09ORklHX01NQ19QWEE9bQotIyBDT05GSUdfTU1DX1NESENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19USUZNX1NEIGlzIG5vdCBzZXQKLSMgQ09ORklHX01NQ19TRFJJQ09IX0NTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAotQ09ORklHX05FV19MRURTPXkKLUNPTkZJR19MRURTX0NMQVNTPXkKLQotIwotIyBMRUQgZHJpdmVycwotIwotIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTEVEU19DTV9YMjcwPXkKLSMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi1DT05GSUdfTEVEU19UUklHR0VSUz15Ci0jIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAotQ09ORklHX0xFRFNfVFJJR0dFUl9IRUFSVEJFQVQ9eQotIyBDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT04gaXMgbm90IHNldAotQ09ORklHX1JUQ19MSUI9eQotQ09ORklHX1JUQ19DTEFTUz15Ci1DT05GSUdfUlRDX0hDVE9TWVM9eQotQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKLSMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUlRDIGludGVyZmFjZXMKLSMKLUNPTkZJR19SVENfSU5URl9TWVNGUz15Ci1DT05GSUdfUlRDX0lOVEZfUFJPQz15Ci1DT05GSUdfUlRDX0lOVEZfREVWPXkKLSMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEkyQyBSVEMgZHJpdmVycwotIwotIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0Ci0KLSMKLSMgU1BJIFJUQyBkcml2ZXJzCi0jCi0KLSMKLSMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKLSMKLSMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKLUNPTkZJR19SVENfRFJWX1YzMDIwPXkKLQotIwotIyBvbi1DUFUgUlRDIGRyaXZlcnMKLSMKLUNPTkZJR19SVENfRFJWX1NBMTEwMD15Ci0jIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKLQotIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKLSMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDRERVZfRlMgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfSU5PVElGWV9VU0VSPXkKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfRkFUX0ZTPW0KLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19WRkFUX0ZTPW0KLUNPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKLUNPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfU1lTQ1RMPXkKLUNPTkZJR19TWVNGUz15Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci0jIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfU1VNTUFSWT15Ci0jIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLSMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15Ci1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci1DT05GSUdfQ0lGUz1tCi0jIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX05MUz1tCi1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLUNPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KLSMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAotQ09ORklHX05MU19JU084ODU5XzE9bQotIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAotQ09ORklHX05MU19VVEY4PW0KLSMgQ09ORklHX0RMTSBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLUNPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKLUNPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15Ci1DT05GSUdfRlJBTUVfV0FSTj0wCi0jIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQotIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAotIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0hBVkVfRlRSQUNFPXkKLUNPTkZJR19IQVZFX0RZTkFNSUNfRlRSQUNFPXkKLSMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAotQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKLSMgQ09ORklHX0tHREIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1VTRVI9eQotQ09ORklHX0RFQlVHX0VSUk9SUz15Ci0jIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTEw9eQotIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE89eQotCi0jCi0jIENyeXB0byBjb3JlIG9yIGhlbHBlcgotIwotIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQotIwotIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgbW9kZXMKLSMKLSMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKLQotIwotIyBIYXNoIG1vZGVzCi0jCi0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnZXN0Ci0jCi0jIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotCi0jCi0jIENpcGhlcnMKLSMKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29tcHJlc3Npb24KLSMKLSMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQklUUkVWRVJTRT15Ci0jIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDX0NDSVRUPW0KLSMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX1BMSVNUPXkKLUNPTkZJR19IQVNfSU9NRU09eQotQ09ORklHX0hBU19JT1BPUlQ9eQotQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYS5vdXQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2Eub3V0LmgKaW5kZXggNzk0ODlmZC4uMDgzODk0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYS5vdXQuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9hLm91dC5oCkBAIC0yLDcgKzIsNyBAQAogI2RlZmluZSBfX0FSTV9BX09VVF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IGV4ZWMKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA2Y2JkOGZkLi5iYjdkNjk1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC00Niw2ICs0NiwxNCBAQAogIyBkZWZpbmUgTVVMVElfQ0FDSEUgMQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfRkE1MjYpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBmYQorIyBlbmRpZgorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTI2VCkKICMgaWZkZWYgX0NBQ0hFCiAjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQpAQCAtOTQsNiArMTAyLDE0IEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NT0hBV0spCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBtb2hhd2sKKyMgZW5kaWYKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZFUk9DRU9OKQogIyBkZWZpbmUgTVVMVElfQ0FDSEUgMQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCAyMmNiMTRlLi5mZjQ2ZGZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTE1LDEwICsxNSwyMCBAQAogICogbXVzdCBub3QgYmUgdXNlZCBieSBkcml2ZXJzLgogICovCiAjaWZuZGVmIF9fYXJjaF9wYWdlX3RvX2RtYQorCisjaWYgIWRlZmluZWQoQ09ORklHX0hJR0hNRU0pCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGFnZV90b19kbWEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlyZXR1cm4gKGRtYV9hZGRyX3QpX192aXJ0X3RvX2J1cygodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocGFnZSkpOwogfQorI2VsaWYgZGVmaW5lZChfX3Bmbl90b19idXMpCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgcGFnZV90b19kbWEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gKGRtYV9hZGRyX3QpX19wZm5fdG9fYnVzKHBhZ2VfdG9fcGZuKHBhZ2UpKTsKK30KKyNlbHNlCisjZXJyb3IgInRoaXMgbWFjaGluZSBjbGFzcyBuZWVkcyB0byBkZWZpbmUgX19hcmNoX3BhZ2VfdG9fZG1hIHRvIHVzZSBISUdITUVNIgorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX3RvX3ZpcnQoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIpCiB7CkBAIC01Nyw2ICs2Nyw4IEBACiAgKiBVc2UgdGhlIGRyaXZlciBETUEgc3VwcG9ydCAtIHNlZSBkbWEtbWFwcGluZy5oIChkbWFfc3luY18qKQogICovCiBleHRlcm4gdm9pZCBkbWFfY2FjaGVfbWFpbnQoY29uc3Qgdm9pZCAqa2FkZHIsIHNpemVfdCBzaXplLCBpbnQgcncpOworZXh0ZXJuIHZvaWQgZG1hX2NhY2hlX21haW50X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCSBzaXplX3Qgc2l6ZSwgaW50IHJ3KTsKIAogLyoKICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBkZXZpY2UgRE1BIGFkZHJlc3MgbWFzayBjYW4gYmUgc3VwcG9ydGVkCkBAIC0zMTYsNyArMzI4LDcgQEAKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAKIAlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKLQkJZG1hX2NhY2hlX21haW50KHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgc2l6ZSwgZGlyKTsKKwkJZG1hX2NhY2hlX21haW50X3BhZ2UocGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIpOwogCiAJcmV0dXJuIHBhZ2VfdG9fZG1hKGRldiwgcGFnZSkgKyBvZmZzZXQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS5oCmluZGV4IGRmNTYzOGYuLjdlZGYzNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS5oCkBAIC0xOSwyMSArMTksMTcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAKLXR5cGVkZWYgdW5zaWduZWQgaW50IGRtYWNoX3Q7Ci0KICNpbmNsdWRlIDxtYWNoL2lzYS1kbWEuaD4KIAogLyoKLSAqIERNQSBtb2RlcworICogVGhlIERNQSBtb2RlcyByZWZsZWN0IHRoZSBzZXR0aW5ncyBmb3IgdGhlIElTQSBETUEgY29udHJvbGxlcgogICovCi10eXBlZGVmIHVuc2lnbmVkIGludCBkbWFtb2RlX3Q7CisjZGVmaW5lIERNQV9NT0RFX01BU0sJIDB4Y2MKIAotI2RlZmluZSBETUFfTU9ERV9NQVNLCTMKLQotI2RlZmluZSBETUFfTU9ERV9SRUFECSAwCi0jZGVmaW5lIERNQV9NT0RFX1dSSVRFCSAxCi0jZGVmaW5lIERNQV9NT0RFX0NBU0NBREUgMgotI2RlZmluZSBETUFfQVVUT0lOSVQJIDQKKyNkZWZpbmUgRE1BX01PREVfUkVBRAkgMHg0NAorI2RlZmluZSBETUFfTU9ERV9XUklURQkgMHg0OAorI2RlZmluZSBETUFfTU9ERV9DQVNDQURFIDB4YzAKKyNkZWZpbmUgRE1BX0FVVE9JTklUCSAweDEwCiAKIGV4dGVybiBzcGlubG9ja190ICBkbWFfc3Bpbl9sb2NrOwogCkBAIC01Miw0NCArNDgsNDQgQEAKIC8qIENsZWFyIHRoZSAnRE1BIFBvaW50ZXIgRmxpcCBGbG9wJy4KICAqIFdyaXRlIDAgZm9yIExTQi9NU0IsIDEgZm9yIE1TQi9MU0IgYWNjZXNzLgogICovCi0jZGVmaW5lIGNsZWFyX2RtYV9mZihjaGFubmVsKQorI2RlZmluZSBjbGVhcl9kbWFfZmYoY2hhbikKIAogLyogU2V0IG9ubHkgdGhlIHBhZ2UgcmVnaXN0ZXIgYml0cyBvZiB0aGUgdHJhbnNmZXIgYWRkcmVzcy4KICAqCiAgKiBOT1RFOiBUaGlzIGlzIGFuIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmdW5jdGlvbiwgYW5kIHNob3VsZAogICogICAgICAgYmUgaGlkZGVuIGZyb20gdGhlIGRyaXZlcnMKICAqLwotZXh0ZXJuIHZvaWQgc2V0X2RtYV9wYWdlKGRtYWNoX3QgY2hhbm5lbCwgY2hhciBwYWdlbnIpOworZXh0ZXJuIHZvaWQgc2V0X2RtYV9wYWdlKHVuc2lnbmVkIGludCBjaGFuLCBjaGFyIHBhZ2Vucik7CiAKIC8qIFJlcXVlc3QgYSBETUEgY2hhbm5lbAogICoKICAqIFNvbWUgYXJjaGl0ZWN0dXJlcyBtYXkgbmVlZCB0byBkbyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQKICAqLwotZXh0ZXJuIGludCAgcmVxdWVzdF9kbWEoZG1hY2hfdCBjaGFubmVsLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsKK2V4dGVybiBpbnQgIHJlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBjb25zdCBjaGFyICogZGV2aWNlX2lkKTsKIAogLyogRnJlZSBhIERNQSBjaGFubmVsCiAgKgogICogU29tZSBhcmNoaXRlY3R1cmVzIG1heSBuZWVkIHRvIGRvIGZyZWUgYW4gaW50ZXJydXB0CiAgKi8KLWV4dGVybiB2b2lkIGZyZWVfZG1hKGRtYWNoX3QgY2hhbm5lbCk7CitleHRlcm4gdm9pZCBmcmVlX2RtYSh1bnNpZ25lZCBpbnQgY2hhbik7CiAKIC8qIEVuYWJsZSBETUEgZm9yIHRoaXMgY2hhbm5lbAogICoKICAqIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcywgdGhpcyBtYXkgaGF2ZSBvdGhlciBzaWRlIGVmZmVjdHMgbGlrZQogICogZW5hYmxpbmcgYW4gaW50ZXJydXB0IGFuZCBzZXR0aW5nIHRoZSBETUEgcmVnaXN0ZXJzLgogICovCi1leHRlcm4gdm9pZCBlbmFibGVfZG1hKGRtYWNoX3QgY2hhbm5lbCk7CitleHRlcm4gdm9pZCBlbmFibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuKTsKIAogLyogRGlzYWJsZSBETUEgZm9yIHRoaXMgY2hhbm5lbAogICoKICAqIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcywgdGhpcyBtYXkgaGF2ZSBvdGhlciBzaWRlIGVmZmVjdHMgbGlrZQogICogZGlzYWJsaW5nIGFuIGludGVycnVwdCBvciB3aGF0ZXZlci4KICAqLwotZXh0ZXJuIHZvaWQgZGlzYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsKTsKK2V4dGVybiB2b2lkIGRpc2FibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuKTsKIAogLyogVGVzdCB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCBoYXMgYW4gYWN0aXZlIERNQSB0cmFuc2ZlcgogICovCi1leHRlcm4gaW50IGRtYV9jaGFubmVsX2FjdGl2ZShkbWFjaF90IGNoYW5uZWwpOworZXh0ZXJuIGludCBkbWFfY2hhbm5lbF9hY3RpdmUodW5zaWduZWQgaW50IGNoYW4pOwogCiAvKiBTZXQgdGhlIERNQSBzY2F0dGVyIGdhdGhlciBsaXN0IGZvciB0aGlzIGNoYW5uZWwKICAqCkBAIC05Nyw3ICs5Myw3IEBACiAgKiBlc3BlY2lhbGx5IHNpbmNlIHNvbWUgRE1BIGFyY2hpdGVjdHVyZXMgZG9uJ3QgdXBkYXRlIHRoZQogICogRE1BIGFkZHJlc3MgaW1tZWRpYXRlbHksIGJ1dCBkZWZlciBpdCB0byB0aGUgZW5hYmxlX2RtYSgpLgogICovCi1leHRlcm4gdm9pZCBzZXRfZG1hX3NnKGRtYWNoX3QgY2hhbm5lbCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5yX3NnKTsKK2V4dGVybiB2b2lkIHNldF9kbWFfc2codW5zaWduZWQgaW50IGNoYW4sIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBucl9zZyk7CiAKIC8qIFNldCB0aGUgRE1BIGFkZHJlc3MgZm9yIHRoaXMgY2hhbm5lbAogICoKQEAgLTEwNSw5ICsxMDEsOSBAQAogICogZXNwZWNpYWxseSBzaW5jZSBzb21lIERNQSBhcmNoaXRlY3R1cmVzIGRvbid0IHVwZGF0ZSB0aGUKICAqIERNQSBhZGRyZXNzIGltbWVkaWF0ZWx5LCBidXQgZGVmZXIgaXQgdG8gdGhlIGVuYWJsZV9kbWEoKS4KICAqLwotZXh0ZXJuIHZvaWQgX19zZXRfZG1hX2FkZHIoZG1hY2hfdCBjaGFubmVsLCB2b2lkICphZGRyKTsKLSNkZWZpbmUgc2V0X2RtYV9hZGRyKGNoYW5uZWwsIGFkZHIpCQkJCVwKLQlfX3NldF9kbWFfYWRkcihjaGFubmVsLCBidXNfdG9fdmlydChhZGRyKSkKK2V4dGVybiB2b2lkIF9fc2V0X2RtYV9hZGRyKHVuc2lnbmVkIGludCBjaGFuLCB2b2lkICphZGRyKTsKKyNkZWZpbmUgc2V0X2RtYV9hZGRyKGNoYW4sIGFkZHIpCQkJCVwKKwlfX3NldF9kbWFfYWRkcihjaGFuLCBidXNfdG9fdmlydChhZGRyKSkKIAogLyogU2V0IHRoZSBETUEgYnl0ZSBjb3VudCBmb3IgdGhpcyBjaGFubmVsCiAgKgpAQCAtMTE1LDcgKzExMSw3IEBACiAgKiBlc3BlY2lhbGx5IHNpbmNlIHNvbWUgRE1BIGFyY2hpdGVjdHVyZXMgZG9uJ3QgdXBkYXRlIHRoZQogICogRE1BIGNvdW50IGltbWVkaWF0ZWx5LCBidXQgZGVmZXIgaXQgdG8gdGhlIGVuYWJsZV9kbWEoKS4KICAqLwotZXh0ZXJuIHZvaWQgc2V0X2RtYV9jb3VudChkbWFjaF90IGNoYW5uZWwsIHVuc2lnbmVkIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgc2V0X2RtYV9jb3VudCh1bnNpZ25lZCBpbnQgY2hhbiwgdW5zaWduZWQgbG9uZyBjb3VudCk7CiAKIC8qIFNldCB0aGUgdHJhbnNmZXIgZGlyZWN0aW9uIGZvciB0aGlzIGNoYW5uZWwKICAqCkBAIC0xMjQsMTEgKzEyMCwxMSBAQAogICogRE1BIHRyYW5zZmVyIGRpcmVjdGlvbiBpbW1lZGlhdGVseSwgYnV0IGRlZmVyIGl0IHRvIHRoZQogICogZW5hYmxlX2RtYSgpLgogICovCi1leHRlcm4gdm9pZCBzZXRfZG1hX21vZGUoZG1hY2hfdCBjaGFubmVsLCBkbWFtb2RlX3QgbW9kZSk7CitleHRlcm4gdm9pZCBzZXRfZG1hX21vZGUodW5zaWduZWQgaW50IGNoYW4sIHVuc2lnbmVkIGludCBtb2RlKTsKIAogLyogU2V0IHRoZSB0cmFuc2ZlciBzcGVlZCBmb3IgdGhpcyBjaGFubmVsCiAgKi8KLWV4dGVybiB2b2lkIHNldF9kbWFfc3BlZWQoZG1hY2hfdCBjaGFubmVsLCBpbnQgY3ljbGVfbnMpOworZXh0ZXJuIHZvaWQgc2V0X2RtYV9zcGVlZCh1bnNpZ25lZCBpbnQgY2hhbiwgaW50IGN5Y2xlX25zKTsKIAogLyogR2V0IERNQSByZXNpZHVlIGNvdW50LiBBZnRlciBhIERNQSB0cmFuc2ZlciwgdGhpcwogICogc2hvdWxkIHJldHVybiB6ZXJvLiBSZWFkaW5nIHRoaXMgd2hpbGUgYSBETUEgdHJhbnNmZXIgaXMKQEAgLTEzNiw3ICsxMzIsNyBAQAogICogSWYgY2FsbGVkIGJlZm9yZSB0aGUgY2hhbm5lbCBoYXMgYmVlbiB1c2VkLCBpdCBtYXkgcmV0dXJuIDEuCiAgKiBPdGhlcndpc2UsIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiBfYnl0ZXNfIGxlZnQgdG8gdHJhbnNmZXIuCiAgKi8KLWV4dGVybiBpbnQgIGdldF9kbWFfcmVzaWR1ZShkbWFjaF90IGNoYW5uZWwpOworZXh0ZXJuIGludCAgZ2V0X2RtYV9yZXNpZHVlKHVuc2lnbmVkIGludCBjaGFuKTsKIAogI2lmbmRlZiBOT19ETUEKICNkZWZpbmUgTk9fRE1BCTI1NQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBjZTNiMzZlLi5kN2RhMTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9lbGYuaApAQCAtNTEsNiArNTEsNyBAQAogI2RlZmluZSBSX0FSTV9DQUxMCTI4CiAjZGVmaW5lIFJfQVJNX0pVTVAyNAkyOQogI2RlZmluZSBSX0FSTV9WNEJYCTQwCisjZGVmaW5lIFJfQVJNX1BSRUwzMQk0MgogCiAvKgogICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMgaW4gdGhlIGNvcmUgZHVtcHMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYWU5MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIF9BU01fRklYTUFQX0gKKyNkZWZpbmUgX0FTTV9GSVhNQVBfSAorCisvKgorICogTm90aGluZyB0b28gZmFuY3kgZm9yIG5vdy4KKyAqCisgKiBPbiBBUk0gd2UgYWxyZWFkeSBoYXZlIHdlbGwga25vd24gZml4ZWQgdmlydHVhbCBhZGRyZXNzZXMgaW1wb3NlZCBieQorICogdGhlIGFyY2hpdGVjdHVyZSBzdWNoIGFzIHRoZSB2ZWN0b3IgcGFnZSB3aGljaCBpcyBsb2NhdGVkIGF0IDB4ZmZmZjAwMDAsCisgKiB0aGVyZWZvcmUgYSBzZWNvbmQgbGV2ZWwgcGFnZSB0YWJsZSBpcyBhbHJlYWR5IGFsbG9jYXRlZCBjb3ZlcmluZworICogMHhmZmYwMDAwMCB1cHdhcmRzLgorICoKKyAqIFRoZSBjYWNoZSBmbHVzaGluZyBjb2RlIGluIHByb2MteHNjYWxlLlMgdXNlcyB0aGUgdmlydHVhbCBhcmVhIGJldHdlZW4KKyAqIDB4ZmZmZTAwMDAgYW5kIDB4ZmZmZWZmZmYuCisgKi8KKworI2RlZmluZSBGSVhBRERSX1NUQVJUCQkweGZmZjAwMDAwVUwKKyNkZWZpbmUgRklYQUREUl9UT1AJCTB4ZmZmZTAwMDBVTAorI2RlZmluZSBGSVhBRERSX1NJWkUJCShGSVhBRERSX1RPUCAtIEZJWEFERFJfU1RBUlQpCisKKyNkZWZpbmUgRklYX0tNQVBfQkVHSU4JCTAKKyNkZWZpbmUgRklYX0tNQVBfRU5ECQkoRklYQUREUl9TSVpFID4+IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgX19maXhfdG9fdmlydCh4KQkoRklYQUREUl9TVEFSVCArICgoeCkgPDwgUEFHRV9TSElGVCkpCisjZGVmaW5lIF9fdmlydF90b19maXgoeCkJKCgoeCkgLSBGSVhBRERSX1NUQVJUKSA+PiBQQUdFX1NISUZUKQorCitleHRlcm4gdm9pZCBfX3RoaXNfZml4bWFwX2RvZXNfbm90X2V4aXN0KHZvaWQpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZml4X3RvX3ZpcnQoY29uc3QgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlpZiAoaWR4ID49IEZJWF9LTUFQX0VORCkKKwkJX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCgpOworCXJldHVybiBfX2ZpeF90b192aXJ0KGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZpcnRfdG9fZml4KGNvbnN0IHVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJQlVHX09OKHZhZGRyID49IEZJWEFERFJfVE9QIHx8IHZhZGRyIDwgRklYQUREUl9TVEFSVCk7CisJcmV0dXJuIF9fdmlydF90b19maXgodmFkZHIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3Njb29wLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zY29vcC5oCmluZGV4IGRmYjgzMzAuLjQ2NDkyYTYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zY29vcC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3Njb29wLmgKQEAgLTYzLDcgKzYzLDUgQEAKIGV4dGVybiBzdHJ1Y3Qgc2Nvb3BfcGNtY2lhX2NvbmZpZyAqcGxhdGZvcm1fc2Nvb3BfY29uZmlnOwogCiB2b2lkIHJlc2V0X3Njb29wKHN0cnVjdCBkZXZpY2UgKmRldik7Ci11bnNpZ25lZCBzaG9ydCBfX2RlcHJlY2F0ZWQgc2V0X3Njb29wX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCBiaXQpOwotdW5zaWduZWQgc2hvcnQgX19kZXByZWNhdGVkIHJlc2V0X3Njb29wX2dwaW8oc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCBiaXQpOwogdW5zaWduZWQgc2hvcnQgcmVhZF9zY29vcF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCByZWcpOwogdm9pZCB3cml0ZV9zY29vcF9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBzaG9ydCByZWcsIHVuc2lnbmVkIHNob3J0IGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGlnaG1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMzZkMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oaWdobWVtLmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBfQVNNX0hJR0hNRU1fSAorI2RlZmluZSBfQVNNX0hJR0hNRU1fSAorCisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKworI2RlZmluZSBQS01BUF9CQVNFCQkoUEFHRV9PRkZTRVQgLSBQTURfU0laRSkKKyNkZWZpbmUgTEFTVF9QS01BUAkJUFRSU19QRVJfUFRFCisjZGVmaW5lIExBU1RfUEtNQVBfTUFTSwkJKExBU1RfUEtNQVAgLSAxKQorI2RlZmluZSBQS01BUF9OUih2aXJ0KQkJKCgodmlydCkgLSBQS01BUF9CQVNFKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSBQS01BUF9BRERSKG5yKQkJKFBLTUFQX0JBU0UgKyAoKG5yKSA8PCBQQUdFX1NISUZUKSkKKworI2RlZmluZSBrbWFwX3Byb3QJCVBBR0VfS0VSTkVMCisKKyNkZWZpbmUgZmx1c2hfY2FjaGVfa21hcHMoKQlmbHVzaF9jYWNoZV9hbGwoKQorCitleHRlcm4gcHRlX3QgKnBrbWFwX3BhZ2VfdGFibGU7CisKKyNkZWZpbmUgQVJDSF9ORUVEU19LTUFQX0hJR0hfR0VUCisKK2V4dGVybiB2b2lkICprbWFwX2hpZ2goc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgKmttYXBfaGlnaF9nZXQoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQga3VubWFwX2hpZ2goc3RydWN0IHBhZ2UgKnBhZ2UpOworCitleHRlcm4gdm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gdm9pZCBrdW5tYXAoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIHZvaWQgKmttYXBfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSk7CitleHRlcm4gdm9pZCBrdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpOworZXh0ZXJuIHZvaWQgKmttYXBfYXRvbWljX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUpOworZXh0ZXJuIHN0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKGNvbnN0IHZvaWQgKnB0cik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaHdjYXAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2h3Y2FwLmgKaW5kZXggYmRhNDg5Zi4uZjdiZDUyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaHdjYXAuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9od2NhcC5oCkBAIC0xNyw2ICsxNyw4IEBACiAjZGVmaW5lIEhXQ0FQX0NSVU5DSAkxMDI0CiAjZGVmaW5lIEhXQ0FQX1RIVU1CRUUJMjA0OAogI2RlZmluZSBIV0NBUF9ORU9OCTQwOTYKKyNkZWZpbmUgSFdDQVBfVkZQdjMJODE5MgorI2RlZmluZSBIV0NBUF9WRlB2M0QxNgkxNjM4NAogCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va21hcF90eXBlcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va21hcF90eXBlcy5oCmluZGV4IDQ1ZGVmMTMuLmQxNmVjOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2ttYXBfdHlwZXMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rbWFwX3R5cGVzLmgKQEAgLTE4LDYgKzE4LDcgQEAKIAlLTV9JUlExLAogCUtNX1NPRlRJUlEwLAogCUtNX1NPRlRJUlExLAorCUtNX0wyX0NBQ0hFLAogCUtNX1RZUEVfTlIKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvZG1hLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL2RtYS5oCmluZGV4IGZjNzI3OGUuLjllNjE0YTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvZG1hLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9kbWEuaApAQCAtMTUsMTMgKzE1LDEzIEBACiB0eXBlZGVmIHN0cnVjdCBkbWFfc3RydWN0IGRtYV90OwogCiBzdHJ1Y3QgZG1hX29wcyB7Ci0JaW50CSgqcmVxdWVzdCkoZG1hY2hfdCwgZG1hX3QgKik7CQkvKiBvcHRpb25hbCAqLwotCXZvaWQJKCpmcmVlKShkbWFjaF90LCBkbWFfdCAqKTsJCS8qIG9wdGlvbmFsICovCi0Jdm9pZAkoKmVuYWJsZSkoZG1hY2hfdCwgZG1hX3QgKik7CQkvKiBtYW5kYXRvcnkgKi8KLQl2b2lkIAkoKmRpc2FibGUpKGRtYWNoX3QsIGRtYV90ICopOwkJLyogbWFuZGF0b3J5ICovCi0JaW50CSgqcmVzaWR1ZSkoZG1hY2hfdCwgZG1hX3QgKik7CQkvKiBvcHRpb25hbCAqLwotCWludAkoKnNldHNwZWVkKShkbWFjaF90LCBkbWFfdCAqLCBpbnQpOwkvKiBvcHRpb25hbCAqLwotCWNoYXIJKnR5cGU7CisJaW50CSgqcmVxdWVzdCkodW5zaWduZWQgaW50LCBkbWFfdCAqKTsJCS8qIG9wdGlvbmFsICovCisJdm9pZAkoKmZyZWUpKHVuc2lnbmVkIGludCwgZG1hX3QgKik7CQkJLyogb3B0aW9uYWwgKi8KKwl2b2lkCSgqZW5hYmxlKSh1bnNpZ25lZCBpbnQsIGRtYV90ICopOwkJLyogbWFuZGF0b3J5ICovCisJdm9pZCAJKCpkaXNhYmxlKSh1bnNpZ25lZCBpbnQsIGRtYV90ICopOwkJLyogbWFuZGF0b3J5ICovCisJaW50CSgqcmVzaWR1ZSkodW5zaWduZWQgaW50LCBkbWFfdCAqKTsJCS8qIG9wdGlvbmFsICovCisJaW50CSgqc2V0c3BlZWQpKHVuc2lnbmVkIGludCwgZG1hX3QgKiwgaW50KTsJLyogb3B0aW9uYWwgKi8KKwljb25zdCBjaGFyICp0eXBlOwogfTsKIAogc3RydWN0IGRtYV9zdHJ1Y3QgewpAQCAtMzQsMjQgKzM0LDIxIEBACiAJdW5zaWduZWQgaW50CWFjdGl2ZToxOwkvKiBUcmFuc2ZlciBhY3RpdmUJCSovCiAJdW5zaWduZWQgaW50CWludmFsaWQ6MTsJLyogQWRkcmVzcy9Db3VudCBjaGFuZ2VkCSovCiAKLQlkbWFtb2RlX3QJZG1hX21vZGU7CS8qIERNQSBtb2RlCQkJKi8KKwl1bnNpZ25lZCBpbnQJZG1hX21vZGU7CS8qIERNQSBtb2RlCQkJKi8KIAlpbnQJCXNwZWVkOwkJLyogRE1BIHNwZWVkCQkJKi8KIAogCXVuc2lnbmVkIGludAlsb2NrOwkJLyogRGV2aWNlIGlzIGFsbG9jYXRlZAkJKi8KIAljb25zdCBjaGFyCSpkZXZpY2VfaWQ7CS8qIERldmljZSBuYW1lCQkJKi8KIAotCXVuc2lnbmVkIGludAlkbWFfYmFzZTsJLyogQ29udHJvbGxlciBiYXNlIGFkZHJlc3MJKi8KLQlpbnQJCWRtYV9pcnE7CS8qIENvbnRyb2xsZXIgSVJRCQkqLwotCXN0cnVjdCBzY2F0dGVybGlzdCBjdXJfc2c7CS8qIEN1cnJlbnQgY29udHJvbGxlciBidWZmZXIJKi8KLQl1bnNpZ25lZCBpbnQJc3RhdGU7Ci0KLQlzdHJ1Y3QgZG1hX29wcwkqZF9vcHM7CisJY29uc3Qgc3RydWN0IGRtYV9vcHMgKmRfb3BzOwogfTsKIAotLyogUHJvdG90eXBlOiB2b2lkIGFyY2hfZG1hX2luaXQoZG1hKQotICogUHVycG9zZSAgOiBJbml0aWFsaXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBETUEKLSAqIFBhcmFtcyAgIDogZG1hIC0gcG9pbnRlciB0byBhcnJheSBvZiBETUEgc3RydWN0dXJlcworLyoKKyAqIGlzYV9kbWFfYWRkIC0gYWRkIGFuIElTQS1zdHlsZSBETUEgY2hhbm5lbAogICovCi1leHRlcm4gdm9pZCBhcmNoX2RtYV9pbml0KGRtYV90ICpkbWEpOworZXh0ZXJuIGludCBpc2FfZG1hX2FkZCh1bnNpZ25lZCBpbnQsIGRtYV90ICpkbWEpOwogCi1leHRlcm4gdm9pZCBpc2FfaW5pdF9kbWEoZG1hX3QgKmRtYSk7CisvKgorICogQWRkIHRoZSBJU0EgRE1BIGNvbnRyb2xsZXIuICBBbHdheXMgdGFrZXMgY2hhbm5lbHMgMC03LgorICovCitleHRlcm4gdm9pZCBpc2FfaW5pdF9kbWEodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9tYXAuaAppbmRleCAzOWQ5NDliLi41OGNmOTFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvbWFwLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNkZWZpbmUgTVRfSElHSF9WRUNUT1JTCQk4CiAjZGVmaW5lIE1UX01FTU9SWQkJOQogI2RlZmluZSBNVF9ST00JCQkxMAorI2RlZmluZSBNVF9NRU1PUllfTk9OQ0FDSEVECTExCiAKICNpZmRlZiBDT05GSUdfTU1VCiBleHRlcm4gdm9pZCBpb3RhYmxlX2luaXQoc3RydWN0IG1hcF9kZXNjICosIGludCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCmluZGV4IDAyMDJhN2MuLjg1NzYzZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCkBAIC00NCwxNCArNDQsMjEgQEAKICAqIFRoZSBtb2R1bGUgc3BhY2UgbGl2ZXMgYmV0d2VlbiB0aGUgYWRkcmVzc2VzIGdpdmVuIGJ5IFRBU0tfU0laRQogICogYW5kIFBBR0VfT0ZGU0VUIC0gaXQgbXVzdCBiZSB3aXRoaW4gMzJNQiBvZiB0aGUga2VybmVsIHRleHQuCiAgKi8KLSNkZWZpbmUgTU9EVUxFU19FTkQJCShQQUdFX09GRlNFVCkKLSNkZWZpbmUgTU9EVUxFU19WQUREUgkJKE1PRFVMRVNfRU5EIC0gMTYqMTA0ODU3NikKLQorI2RlZmluZSBNT0RVTEVTX1ZBRERSCQkoUEFHRV9PRkZTRVQgLSAxNioxMDI0KjEwMjQpCiAjaWYgVEFTS19TSVpFID4gTU9EVUxFU19WQUREUgogI2Vycm9yIFRvcCBvZiB1c2VyIHNwYWNlIGNsYXNoZXMgd2l0aCBzdGFydCBvZiBtb2R1bGUgc3BhY2UKICNlbmRpZgogCiAvKgorICogVGhlIGhpZ2htZW0gcGttYXAgdmlydHVhbCBzcGFjZSBzaGFyZXMgdGhlIGVuZCBvZiB0aGUgbW9kdWxlIGFyZWEuCisgKi8KKyNpZmRlZiBDT05GSUdfSElHSE1FTQorI2RlZmluZSBNT0RVTEVTX0VORAkJKFBBR0VfT0ZGU0VUIC0gUE1EX1NJWkUpCisjZWxzZQorI2RlZmluZSBNT0RVTEVTX0VORAkJKFBBR0VfT0ZGU0VUKQorI2VuZGlmCisKKy8qCiAgKiBUaGUgWElQIGtlcm5lbCBnZXRzIG1hcHBlZCBhdCB0aGUgYm90dG9tIG9mIHRoZSBtb2R1bGUgdm0gYXJlYS4KICAqIFNpbmNlIHdlIHVzZSBzZWN0aW9ucyB0byBtYXAgaXQsIHRoaXMgbWFjcm8gcmVwbGFjZXMgdGhlIHBoeXNpY2FsIGFkZHJlc3MKICAqIHdpdGggaXRzIHZpcnR1YWwgYWRkcmVzcyB3aGlsZSBrZWVwaW5nIG9mZnNldCBmcm9tIHRoZSBiYXNlIHNlY3Rpb24uCkBAIC0xODEsNiArMTg4LDcgQEAKICNpZm5kZWYgX192aXJ0X3RvX2J1cwogI2RlZmluZSBfX3ZpcnRfdG9fYnVzCV9fdmlydF90b19waHlzCiAjZGVmaW5lIF9fYnVzX3RvX3ZpcnQJX19waHlzX3RvX3ZpcnQKKyNkZWZpbmUgX19wZm5fdG9fYnVzKHgpCSgoeCkgPDwgUEFHRV9TSElGVCkKICNlbmRpZgogCiBzdGF0aWMgaW5saW5lIF9fZGVwcmVjYXRlZCB1bnNpZ25lZCBsb25nIHZpcnRfdG9fYnVzKHZvaWQgKngpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21vZHVsZS5oCmluZGV4IDI0YjE2OGQuLmU0ZGZhNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21vZHVsZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xLDE1ICsxLDI3IEBACiAjaWZuZGVmIF9BU01fQVJNX01PRFVMRV9ICiAjZGVmaW5lIF9BU01fQVJNX01PRFVMRV9ICiAKLXN0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYwotewotCWludCBmb287Ci19OwotCiAjZGVmaW5lIEVsZl9TaGRyCUVsZjMyX1NoZHIKICNkZWZpbmUgRWxmX1N5bQkJRWxmMzJfU3ltCiAjZGVmaW5lIEVsZl9FaGRyCUVsZjMyX0VoZHIKIAorc3RydWN0IHVud2luZF90YWJsZTsKKworc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljCit7CisjaWZkZWYgQ09ORklHX0FSTV9VTldJTkQKKwlFbGZfU2hkciAqdW53X3NlY19pbml0OworCUVsZl9TaGRyICp1bndfc2VjX2RldmluaXQ7CisJRWxmX1NoZHIgKnVud19zZWNfY29yZTsKKwlFbGZfU2hkciAqc2VjX2luaXRfdGV4dDsKKwlFbGZfU2hkciAqc2VjX2RldmluaXRfdGV4dDsKKwlFbGZfU2hkciAqc2VjX2NvcmVfdGV4dDsKKwlzdHJ1Y3QgdW53aW5kX3RhYmxlICp1bndpbmRfaW5pdDsKKwlzdHJ1Y3QgdW53aW5kX3RhYmxlICp1bndpbmRfZGV2aW5pdDsKKwlzdHJ1Y3QgdW53aW5kX3RhYmxlICp1bndpbmRfY29yZTsKKyNlbmRpZgorfTsKKwogLyoKICAqIEluY2x1ZGUgdGhlIEFSTSBhcmNoaXRlY3R1cmUgdmVyc2lvbi4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS5oCmluZGV4IGYzNDFjOWQuLmU2ZWI4YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2UuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTc2LDYgKzc2LDE0IEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DUFVfQ09QWV9GQQorIyBpZmRlZiBfVVNFUgorIyAgZGVmaW5lIE1VTFRJX1VTRVIgMQorIyBlbHNlCisjICBkZWZpbmUgX1VTRVIgZmEKKyMgZW5kaWYKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKICMgaWZkZWYgX1VTRVIKICMgIGRlZmluZSBNVUxUSV9VU0VSIDEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oCmluZGV4IGRiODAyMDMuLjM5NzY0MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaApAQCAtODksNiArODksMTQgQEAKICMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyMgogIyAgZW5kaWYKICMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0NQVV9GQTUyNgorIyAgaWZkZWYgQ1BVX05BTUUKKyMgICB1bmRlZiAgTVVMVElfQ1BVCisjICAgZGVmaW5lIE1VTFRJX0NQVQorIyAgZWxzZQorIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfZmE1MjYKKyMgIGVuZGlmCisjIGVuZGlmCiAjIGlmZGVmIENPTkZJR19DUFVfQVJNOTI1VAogIyAgaWZkZWYgQ1BVX05BTUUKICMgICB1bmRlZiAgTVVMVElfQ1BVCkBAIC0xODUsNiArMTkzLDE0IEBACiAjICAgZGVmaW5lIENQVV9OQU1FIGNwdV94c2MzCiAjICBlbmRpZgogIyBlbmRpZgorIyBpZmRlZiBDT05GSUdfQ1BVX01PSEFXSworIyAgaWZkZWYgQ1BVX05BTUUKKyMgICB1bmRlZiAgTVVMVElfQ1BVCisjICAgZGVmaW5lIE1VTFRJX0NQVQorIyAgZWxzZQorIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfbW9oYXdrCisjICBlbmRpZgorIyBlbmRpZgogIyBpZmRlZiBDT05GSUdfQ1BVX0ZFUk9DRU9OCiAjICBpZmRlZiBDUFVfTkFNRQogIyAgIHVuZGVmICBNVUxUSV9DUFUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggNzMxOTI2MS4uMjM2YTA2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTI3LDYgKzI3LDggQEAKIC8qIFBUUkFDRV9TWVNDQUxMIGlzIDI0ICovCiAjZGVmaW5lIFBUUkFDRV9HRVRDUlVOQ0hSRUdTCTI1CiAjZGVmaW5lIFBUUkFDRV9TRVRDUlVOQ0hSRUdTCTI2CisjZGVmaW5lIFBUUkFDRV9HRVRWRlBSRUdTCTI3CisjZGVmaW5lIFBUUkFDRV9TRVRWRlBSRUdTCTI4CiAKIC8qCiAgKiBQU1IgYml0cwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggZjJjZDE4YS4uZWUxMzA0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaWZuZGVmIF9fQVNNQVJNX1NFVFVQX0gKICNkZWZpbmUgX19BU01BUk1fU0VUVVBfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAxMDI0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NpemVzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zaXplcy5oCmluZGV4IDUwMzg0M2QuLmMxMGQxYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NpemVzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc2l6ZXMuaApAQCAtNDMsNiArNDMsNyBAQAogI2RlZmluZSBTWl84TSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDAKICNkZWZpbmUgU1pfMTZNICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCiAjZGVmaW5lIFNaXzMyTSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBTWl80OE0gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMwMDAwMDAKICNkZWZpbmUgU1pfNjRNICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCiAjZGVmaW5lIFNaXzEyOE0gICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAogI2RlZmluZSBTWl8yNTZNICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggNjgxN2JlOS4uNTM3ZGU0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTU0LDQgKzU0LDcgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNlbmRpZiAvKiBfQVNNX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwYTE2NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaApAQCAtMCwwICsxLDE1IEBACisjaWZuZGVmIF9fQVNNX1NUQUNLVFJBQ0VfSAorI2RlZmluZSBfX0FTTV9TVEFDS1RSQUNFX0gKKworc3RydWN0IHN0YWNrZnJhbWUgeworCXVuc2lnbmVkIGxvbmcgZnA7CisJdW5zaWduZWQgbG9uZyBzcDsKKwl1bnNpZ25lZCBsb25nIGxyOworCXVuc2lnbmVkIGxvbmcgcGM7Cit9OworCitleHRlcm4gaW50IHVud2luZF9mcmFtZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUpOworZXh0ZXJuIHZvaWQgd2Fsa19zdGFja2ZyYW1lKHN0cnVjdCBzdGFja2ZyYW1lICpmcmFtZSwKKwkJCSAgICBpbnQgKCpmbikoc3RydWN0IHN0YWNrZnJhbWUgKiwgdm9pZCAqKSwgdm9pZCAqZGF0YSk7CisKKyNlbmRpZgkvKiBfX0FTTV9TVEFDS1RSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCAyN2E2ODliLi5jYTJiZjJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xNiw3ICsxNiw3IEBACiAjZGVmaW5lIF9fQVNNX0FSTV9TV0FCX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggODExYmU1NS4uYmQ0ZGM4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc3lzdGVtLmgKQEAgLTk3LDggKzk3LDggQEAKIGV4dGVybiBpbnQgY3B1X2FyY2hpdGVjdHVyZSh2b2lkKTsKIGV4dGVybiB2b2lkIGNwdV9pbml0KHZvaWQpOwogCi12b2lkIGFybV9tYWNoaW5lX3Jlc3RhcnQoY2hhciBtb2RlKTsKLWV4dGVybiB2b2lkICgqYXJtX3BtX3Jlc3RhcnQpKGNoYXIgc3RyKTsKK3ZvaWQgYXJtX21hY2hpbmVfcmVzdGFydChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCk7CitleHRlcm4gdm9pZCAoKmFybV9wbV9yZXN0YXJ0KShjaGFyIHN0ciwgY29uc3QgY2hhciAqY21kKTsKIAogI2RlZmluZSBVREJHX1VOREVGSU5FRAkoMSA8PCAwKQogI2RlZmluZSBVREJHX1NZU0NBTEwJKDEgPDwgMSkKQEAgLTEyNSw2ICsxMjUsMTIgQEAKIAkJCQkgICAgOiA6ICJyIiAoMCkgOiAibWVtb3J5IikKICNkZWZpbmUgZG1iKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNSIgXAogCQkJCSAgICA6IDogInIiICgwKSA6ICJtZW1vcnkiKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZBNTI2KQorI2RlZmluZSBpc2IoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm1jciBwMTUsIDAsICUwLCBjNywgYzUsIDQiIFwKKwkJCQkgICAgOiA6ICJyIiAoMCkgOiAibWVtb3J5IikKKyNkZWZpbmUgZHNiKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIgXAorCQkJCSAgICA6IDogInIiICgwKSA6ICJtZW1vcnkiKQorI2RlZmluZSBkbWIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiA6IDogIm1lbW9yeSIpCiAjZWxzZQogI2RlZmluZSBpc2IoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiIgOiA6IDogIm1lbW9yeSIpCiAjZGVmaW5lIGRzYigpIF9fYXNtX18gX192b2xhdGlsZV9fICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDY4YjllYzguLjRmODg0ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtOTksNiArOTksOCBAQAogCiAjZGVmaW5lIHRocmVhZF9zYXZlZF9wYyh0c2spCVwKIAkoKHVuc2lnbmVkIGxvbmcpKHRhc2tfdGhyZWFkX2luZm8odHNrKS0+Y3B1X2NvbnRleHQucGMpKQorI2RlZmluZSB0aHJlYWRfc2F2ZWRfc3AodHNrKQlcCisJKCh1bnNpZ25lZCBsb25nKSh0YXNrX3RocmVhZF9pbmZvKHRzayktPmNwdV9jb250ZXh0LnNwKSkKICNkZWZpbmUgdGhyZWFkX3NhdmVkX2ZwKHRzaykJXAogCSgodW5zaWduZWQgbG9uZykodGFza190aHJlYWRfaW5mbyh0c2spLT5jcHVfY29udGV4dC5mcCkpCiAKQEAgLTExMyw2ICsxMTUsOCBAQAogZXh0ZXJuIHZvaWQgaXdtbXh0X3Rhc2tfcmVsZWFzZShzdHJ1Y3QgdGhyZWFkX2luZm8gKik7CiBleHRlcm4gdm9pZCBpd21teHRfdGFza19zd2l0Y2goc3RydWN0IHRocmVhZF9pbmZvICopOwogCitleHRlcm4gdm9pZCB2ZnBfc3luY19zdGF0ZShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCk7CisKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggYjU0M2EwNS4uYTYyMjE4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGJmbHVzaC5oCkBAIC0zOSw2ICszOSw3IEBACiAjZGVmaW5lIFRMQl9WNl9EX0FTSUQJKDEgPDwgMTcpCiAjZGVmaW5lIFRMQl9WNl9JX0FTSUQJKDEgPDwgMTgpCiAKKyNkZWZpbmUgVExCX0JUQgkJKDEgPDwgMjgpCiAjZGVmaW5lIFRMQl9MMkNMRUFOX0ZSCSgxIDw8IDI5KQkJLyogRmVyb2Nlb24gKi8KICNkZWZpbmUgVExCX0RDTEVBTgkoMSA8PCAzMCkKICNkZWZpbmUgVExCX1dCCQkoMSA8PCAzMSkKQEAgLTUzLDYgKzU0LDcgQEAKICAqCSAgdjR3YiAgLSBBUk12NCB3aXRoIHdyaXRlIGJ1ZmZlciB3aXRob3V0IEkgVExCIGZsdXNoIGVudHJ5IGluc3RydWN0aW9uCiAgKgkgIHY0d2JpIC0gQVJNdjQgd2l0aCB3cml0ZSBidWZmZXIgd2l0aCBJIFRMQiBmbHVzaCBlbnRyeSBpbnN0cnVjdGlvbgogICoJICBmciAgICAtIEZlcm9jZW9uICh2NHdiaSB3aXRoIG5vbi1vdXRlci1jYWNoZWFibGUgcGFnZSB0YWJsZSB3YWxrcykKKyAqCSAgZmEgICAgLSBGYXJhZGF5ICh2NCB3aXRoIHdyaXRlIGJ1ZmZlciB3aXRoIFVUTEIgYW5kIGJyYW5jaCB0YXJnZXQgYnVmZmVyIChCVEIpKQogICoJICB2NndiaSAtIEFSTXY2IHdpdGggd3JpdGUgYnVmZmVyIHdpdGggSSBUTEIgZmx1c2ggZW50cnkgaW5zdHJ1Y3Rpb24KICAqCSAgdjd3YmkgLSBpZGVudGljYWwgdG8gdjZ3YmkKICAqLwpAQCAtODksNiArOTEsMjIgQEAKICMgZGVmaW5lIHY0X2Fsd2F5c19mbGFncwkoLTFVTCkKICNlbmRpZgogCisjZGVmaW5lIGZhX3RsYl9mbGFncwkoVExCX1dCIHwgVExCX0JUQiB8IFRMQl9EQ0xFQU4gfCBcCisJCQkgVExCX1Y0X1VfRlVMTCB8IFRMQl9WNF9VX1BBR0UpCisKKyNpZmRlZiBDT05GSUdfQ1BVX1RMQl9GQQorIyBkZWZpbmUgZmFfcG9zc2libGVfZmxhZ3MJZmFfdGxiX2ZsYWdzCisjIGRlZmluZSBmYV9hbHdheXNfZmxhZ3MJZmFfdGxiX2ZsYWdzCisjIGlmZGVmIF9UTEIKKyMgIGRlZmluZSBNVUxUSV9UTEIgMQorIyBlbHNlCisjICBkZWZpbmUgX1RMQiBmYQorIyBlbmRpZgorI2Vsc2UKKyMgZGVmaW5lIGZhX3Bvc3NpYmxlX2ZsYWdzCTAKKyMgZGVmaW5lIGZhX2Fsd2F5c19mbGFncwkoLTFVTCkKKyNlbmRpZgorCiAjZGVmaW5lIHY0d2JpX3RsYl9mbGFncwkoVExCX1dCIHwgVExCX0RDTEVBTiB8IFwKIAkJCSBUTEJfVjRfSV9GVUxMIHwgVExCX1Y0X0RfRlVMTCB8IFwKIAkJCSBUTEJfVjRfSV9QQUdFIHwgVExCX1Y0X0RfUEFHRSkKQEAgLTE0MCw3ICsxNTgsNyBAQAogIyBkZWZpbmUgdjR3Yl9hbHdheXNfZmxhZ3MJKC0xVUwpCiAjZW5kaWYKIAotI2RlZmluZSB2NndiaV90bGJfZmxhZ3MgKFRMQl9XQiB8IFRMQl9EQ0xFQU4gfCBcCisjZGVmaW5lIHY2d2JpX3RsYl9mbGFncyAoVExCX1dCIHwgVExCX0RDTEVBTiB8IFRMQl9CVEIgfCBcCiAJCQkgVExCX1Y2X0lfRlVMTCB8IFRMQl9WNl9EX0ZVTEwgfCBcCiAJCQkgVExCX1Y2X0lfUEFHRSB8IFRMQl9WNl9EX1BBR0UgfCBcCiAJCQkgVExCX1Y2X0lfQVNJRCB8IFRMQl9WNl9EX0FTSUQpCkBAIC0yNjcsNiArMjg1LDcgQEAKIAkJCQkgdjR3YmlfcG9zc2libGVfZmxhZ3MgfCBcCiAJCQkJIGZyX3Bvc3NpYmxlX2ZsYWdzIHwgXAogCQkJCSB2NHdiX3Bvc3NpYmxlX2ZsYWdzIHwgXAorCQkJCSBmYV9wb3NzaWJsZV9mbGFncyB8IFwKIAkJCQkgdjZ3YmlfcG9zc2libGVfZmxhZ3MgfCBcCiAJCQkJIHY3d2JpX3Bvc3NpYmxlX2ZsYWdzKQogCkBAIC0yNzUsNiArMjk0LDcgQEAKIAkJCQkgdjR3YmlfYWx3YXlzX2ZsYWdzICYgXAogCQkJCSBmcl9hbHdheXNfZmxhZ3MgJiBcCiAJCQkJIHY0d2JfYWx3YXlzX2ZsYWdzICYgXAorCQkJCSBmYV9hbHdheXNfZmxhZ3MgJiBcCiAJCQkJIHY2d2JpX2Fsd2F5c19mbGFncyAmIFwKIAkJCQkgdjd3YmlfYWx3YXlzX2ZsYWdzKQogCkBAIC0yOTcsOSArMzE3LDcgQEAKIAlpZiAodGxiX2ZsYWcoVExCX1Y0X0lfRlVMTCB8IFRMQl9WNl9JX0ZVTEwpKQogCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAKLQlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfRlVMTCB8IFRMQl9WNl9EX0ZVTEwgfAotCQkgICAgIFRMQl9WNl9JX1BBR0UgfCBUTEJfVjZfRF9QQUdFIHwKLQkJICAgICBUTEJfVjZfSV9BU0lEIHwgVExCX1Y2X0RfQVNJRCkpIHsKKwlpZiAodGxiX2ZsYWcoVExCX0JUQikpIHsKIAkJLyogZmx1c2ggdGhlIGJyYW5jaCB0YXJnZXQgY2FjaGUgKi8KIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCA2IiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCQlkc2IoKTsKQEAgLTMzNCw5ICszNTIsNyBAQAogCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9BU0lEKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAyIiA6IDogInIiIChhc2lkKSA6ICJjYyIpOwogCi0JaWYgKHRsYl9mbGFnKFRMQl9WNl9JX0ZVTEwgfCBUTEJfVjZfRF9GVUxMIHwKLQkJICAgICBUTEJfVjZfSV9QQUdFIHwgVExCX1Y2X0RfUEFHRSB8Ci0JCSAgICAgVExCX1Y2X0lfQVNJRCB8IFRMQl9WNl9EX0FTSUQpKSB7CisJaWYgKHRsYl9mbGFnKFRMQl9CVEIpKSB7CiAJCS8qIGZsdXNoIHRoZSBicmFuY2ggdGFyZ2V0IGNhY2hlICovCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjNSwgNiIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKIAkJZHNiKCk7CkBAIC0zNzQsOSArMzkwLDcgQEAKIAlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfUEFHRSkpCiAJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNSwgMSIgOiA6ICJyIiAodWFkZHIpIDogImNjIik7CiAKLQlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfRlVMTCB8IFRMQl9WNl9EX0ZVTEwgfAotCQkgICAgIFRMQl9WNl9JX1BBR0UgfCBUTEJfVjZfRF9QQUdFIHwKLQkJICAgICBUTEJfVjZfSV9BU0lEIHwgVExCX1Y2X0RfQVNJRCkpIHsKKwlpZiAodGxiX2ZsYWcoVExCX0JUQikpIHsKIAkJLyogZmx1c2ggdGhlIGJyYW5jaCB0YXJnZXQgY2FjaGUgKi8KIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGM1LCA2IiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCQlkc2IoKTsKQEAgLTQxMSw5ICs0MjUsNyBAQAogCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9QQUdFKSkKIAkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAxIiA6IDogInIiIChrYWRkcikgOiAiY2MiKTsKIAotCWlmICh0bGJfZmxhZyhUTEJfVjZfSV9GVUxMIHwgVExCX1Y2X0RfRlVMTCB8Ci0JCSAgICAgVExCX1Y2X0lfUEFHRSB8IFRMQl9WNl9EX1BBR0UgfAotCQkgICAgIFRMQl9WNl9JX0FTSUQgfCBUTEJfVjZfRF9BU0lEKSkgeworCWlmICh0bGJfZmxhZyhUTEJfQlRCKSkgewogCQkvKiBmbHVzaCB0aGUgYnJhbmNoIHRhcmdldCBjYWNoZSAqLwogCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNywgYzUsIDYiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJCWRzYigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdHJhcHMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RyYXBzLmgKaW5kZXggYWEzOTlhZS4uNDkxOTYwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdHJhcHMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS90cmFwcy5oCkBAIC0yNSw1ICsyNSw2IEBACiB9CiAKIGV4dGVybiB2b2lkIF9faW5pdCBlYXJseV90cmFwX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBkdW1wX2JhY2t0cmFjZV9lbnRyeSh1bnNpZ25lZCBsb25nIHdoZXJlLCB1bnNpZ25lZCBsb25nIGZyb20sIHVuc2lnbmVkIGxvbmcgZnJhbWUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Vud2luZC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW53aW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVlZGY0MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Vud2luZC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBhcmNoL2FybS9pbmNsdWRlL2FzbS91bndpbmQuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2lmbmRlZiBfX0FTTV9VTldJTkRfSAorI2RlZmluZSBfX0FTTV9VTldJTkRfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiBVbndpbmQgcmVhc29uIGNvZGUgYWNjb3JkaW5nIHRoZSB0aGUgQVJNIEVBQkkgZG9jdW1lbnRzICovCitlbnVtIHVud2luZF9yZWFzb25fY29kZSB7CisJVVJDX09LID0gMCwJCQkvKiBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAqLworCVVSQ19DT05USU5VRV9VTldJTkQgPSA4LAorCVVSQ19GQUlMVVJFID0gOQkJCS8qIHVuc3BlY2lmaWVkIGZhaWx1cmUgb2Ygc29tZSBraW5kICovCit9OworCitzdHJ1Y3QgdW53aW5kX2lkeCB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgaW5zbjsKK307CisKK3N0cnVjdCB1bndpbmRfdGFibGUgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdW53aW5kX2lkeCAqc3RhcnQ7CisJc3RydWN0IHVud2luZF9pZHggKnN0b3A7CisJdW5zaWduZWQgbG9uZyBiZWdpbl9hZGRyOworCXVuc2lnbmVkIGxvbmcgZW5kX2FkZHI7Cit9OworCitleHRlcm4gc3RydWN0IHVud2luZF90YWJsZSAqdW53aW5kX3RhYmxlX2FkZCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHRleHRfYWRkciwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIHRleHRfc2l6ZSk7CitleHRlcm4gdm9pZCB1bndpbmRfdGFibGVfZGVsKHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYik7CitleHRlcm4gdm9pZCB1bndpbmRfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisKKyNpZmRlZiBDT05GSUdfQVJNX1VOV0lORAorZXh0ZXJuIGludCBfX2luaXQgdW53aW5kX2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgX19pbml0IHVud2luZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2VuZGlmCS8qICFfX0FTU0VNQkxZX18gKi8KKworI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECisjZGVmaW5lIFVOV0lORChjb2RlLi4uKQkJY29kZQorI2Vsc2UKKyNkZWZpbmUgVU5XSU5EKGNvZGUuLi4pCisjZW5kaWYKKworI2VuZGlmCS8qIF9fQVNNX1VOV0lORF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91c2VyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS91c2VyLmgKaW5kZXggODI1YzFlNy4uZGY5NWUwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdXNlci5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VzZXIuaApAQCAtODEsNCArODEsMTMgQEAKICNkZWZpbmUgSE9TVF9URVhUX1NUQVJUX0FERFIgKHUuc3RhcnRfY29kZSkKICNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUiAodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCiAKKy8qCisgKiBVc2VyIHNwZWNpZmljIFZGUCByZWdpc3RlcnMuIElmIG9ubHkgVkZQdjIgaXMgcHJlc2VudCwgcmVnaXN0ZXJzIDE2IHRvIDMxCisgKiBhcmUgaWdub3JlZCBieSB0aGUgcHRyYWNlIHN5c3RlbSBjYWxsLgorICovCitzdHJ1Y3QgdXNlcl92ZnAgeworCXVuc2lnbmVkIGxvbmcgbG9uZyBmcHJlZ3NbMzJdOworCXVuc2lnbmVkIGxvbmcgZnBzY3I7Cit9OworCiAjZW5kaWYgLyogX0FSTV9VU0VSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCA0MzA1MzQ1Li4xMWE1MTk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC0yOSwxMiArMjksMTQgQEAKIG9iai0kKENPTkZJR19PQUJJX0NPTVBBVCkJKz0gc3lzX29hYmktY29tcGF0Lm8KIG9iai0kKENPTkZJR19BUk1fVEhVTUJFRSkJKz0gdGh1bWJlZS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubworb2JqLSQoQ09ORklHX0FSTV9VTldJTkQpCSs9IHVud2luZC5vCiAKIG9iai0kKENPTkZJR19DUlVOQ0gpCQkrPSBjcnVuY2gubyBjcnVuY2gtYml0cy5vCiBBRkxBR1NfY3J1bmNoLWJpdHMubwkJOj0gLVdhLC1tY3B1PWVwOTMxMgogCiBvYmotJChDT05GSUdfQ1BVX1hTQ0FMRSkJKz0geHNjYWxlLWNwMC5vCiBvYmotJChDT05GSUdfQ1BVX1hTQzMpCQkrPSB4c2NhbGUtY3AwLm8KK29iai0kKENPTkZJR19DUFVfTU9IQVdLKQkrPSB4c2NhbGUtY3AwLm8KIG9iai0kKENPTkZJR19JV01NWFQpCQkrPSBpd21teHQubwogQUZMQUdTX2l3bW14dC5vCQkJOj0gLVdhLC1tY3B1PWl3bW14dAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBiL2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TCmluZGV4IGY1M2M1ODIuLmIxMjFiNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9kZWJ1Zy5TCkBAIC00OSw2ICs0OSwzMyBAQAogMTAwMjoKIAkJLmVuZG0KIAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQ0FMRSkKKworCQkubWFjcm8JYWRkcnVhcnQsIHJ4CisJCS5lbmRtCisKKwkJLm1hY3JvCXNlbmR1YXJ0LCByZCwgcngKKwkJbWNyCXAxNCwgMCwgXHJkLCBjOCwgYzAsIDAKKwkJLmVuZG0KKworCQkubWFjcm8JYnVzeXVhcnQsIHJkLCByeAorMTAwMToKKwkJbXJjCXAxNCwgMCwgXHJ4LCBjMTQsIGMwLCAwCisJCXRzdAlccngsICMweDEwMDAwMDAwCisJCWJlcQkxMDAxYgorCQkuZW5kbQorCisJCS5tYWNybwl3YWl0dWFydCwgcmQsIHJ4CisJCW1vdglccmQsICMweDEwMDAwMDAwCisxMDAxOgorCQlzdWJzCVxyZCwgXHJkLCAjMQorCQlibWkJMTAwMmYKKwkJbXJjCXAxNCwgMCwgXHJ4LCBjMTQsIGMwLCAwCisJCXRzdAlccngsICMweDEwMDAwMDAwCisJCWJuZQkxMDAxYgorMTAwMjoKKwkJLmVuZG0KKwogI2Vsc2UKIAogCQkubWFjcm8JYWRkcnVhcnQsIHJ4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZG1hLWlzYS5jIGIvYXJjaC9hcm0va2VybmVsL2RtYS1pc2EuYwppbmRleCA0YTNhNTA0Li4wZTg4ZTQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZG1hLWlzYS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9kbWEtaXNhLmMKQEAgLTI0LDExICsyNCw2IEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgogCi0jZGVmaW5lIElTQV9ETUFfTU9ERV9SRUFECTB4NDQKLSNkZWZpbmUgSVNBX0RNQV9NT0RFX1dSSVRFCTB4NDgKLSNkZWZpbmUgSVNBX0RNQV9NT0RFX0NBU0NBREUJMHhjMAotI2RlZmluZSBJU0FfRE1BX0FVVE9JTklUCTB4MTAKLQogI2RlZmluZSBJU0FfRE1BX01BU0sJCTAKICNkZWZpbmUgSVNBX0RNQV9NT0RFCQkxCiAjZGVmaW5lIElTQV9ETUFfQ0xSRkYJCTIKQEAgLTQ5LDM4ICs0NCwzNSBAQAogCXsgIDB4ZDQsICAweGQ2LCAgMHhkOCwgIDB4NDhhLCAgMHgwOGEsICAweGNjLCAweGNlIH0KIH07CiAKLXN0YXRpYyBpbnQgaXNhX2dldF9kbWFfcmVzaWR1ZShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgaW50IGlzYV9nZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7Ci0JdW5zaWduZWQgaW50IGlvX3BvcnQgPSBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9DT1VOVF07CisJdW5zaWduZWQgaW50IGlvX3BvcnQgPSBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9DT1VOVF07CiAJaW50IGNvdW50OwogCiAJY291bnQgPSAxICsgaW5iKGlvX3BvcnQpOwogCWNvdW50IHw9IGluYihpb19wb3J0KSA8PCA4OwogCi0JcmV0dXJuIGNoYW5uZWwgPCA0ID8gY291bnQgOiAoY291bnQgPDwgMSk7CisJcmV0dXJuIGNoYW4gPCA0ID8gY291bnQgOiAoY291bnQgPDwgMSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlzYV9lbmFibGVfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIGlzYV9lbmFibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewogCWlmIChkbWEtPmludmFsaWQpIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBsZW5ndGg7CiAJCXVuc2lnbmVkIGludCBtb2RlOwogCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247CiAKLQkJbW9kZSA9IGNoYW5uZWwgJiAzOworCQltb2RlID0gKGNoYW4gJiAzKSB8IGRtYS0+ZG1hX21vZGU7CiAJCXN3aXRjaCAoZG1hLT5kbWFfbW9kZSAmIERNQV9NT0RFX01BU0spIHsKIAkJY2FzZSBETUFfTU9ERV9SRUFEOgotCQkJbW9kZSB8PSBJU0FfRE1BX01PREVfUkVBRDsKIAkJCWRpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRE1BX01PREVfV1JJVEU6Ci0JCQltb2RlIHw9IElTQV9ETUFfTU9ERV9XUklURTsKIAkJCWRpcmVjdGlvbiA9IERNQV9UT19ERVZJQ0U7CiAJCQlicmVhazsKIAogCQljYXNlIERNQV9NT0RFX0NBU0NBREU6Ci0JCQltb2RlIHw9IElTQV9ETUFfTU9ERV9DQVNDQURFOwogCQkJZGlyZWN0aW9uID0gRE1BX0JJRElSRUNUSU9OQUw7CiAJCQlicmVhazsKIApAQCAtMTA1LDM0ICs5NywzMSBAQAogCQlhZGRyZXNzID0gZG1hLT5idWYuZG1hX2FkZHJlc3M7CiAJCWxlbmd0aCAgPSBkbWEtPmJ1Zi5sZW5ndGggLSAxOwogCi0JCW91dGIoYWRkcmVzcyA+PiAxNiwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfUEdMT10pOwotCQlvdXRiKGFkZHJlc3MgPj4gMjQsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX1BHSEldKTsKKwkJb3V0YihhZGRyZXNzID4+IDE2LCBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9QR0xPXSk7CisJCW91dGIoYWRkcmVzcyA+PiAyNCwgaXNhX2RtYV9wb3J0W2NoYW5dW0lTQV9ETUFfUEdISV0pOwogCi0JCWlmIChjaGFubmVsID49IDQpIHsKKwkJaWYgKGNoYW4gPj0gNCkgewogCQkJYWRkcmVzcyA+Pj0gMTsKIAkJCWxlbmd0aCA+Pj0gMTsKIAkJfQogCi0JCW91dGIoMCwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQ0xSRkZdKTsKKwkJb3V0YigwLCBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9DTFJGRl0pOwogCi0JCW91dGIoYWRkcmVzcywgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQUREUl0pOwotCQlvdXRiKGFkZHJlc3MgPj4gOCwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQUREUl0pOworCQlvdXRiKGFkZHJlc3MsIGlzYV9kbWFfcG9ydFtjaGFuXVtJU0FfRE1BX0FERFJdKTsKKwkJb3V0YihhZGRyZXNzID4+IDgsIGlzYV9kbWFfcG9ydFtjaGFuXVtJU0FfRE1BX0FERFJdKTsKIAotCQlvdXRiKGxlbmd0aCwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQ09VTlRdKTsKLQkJb3V0YihsZW5ndGggPj4gOCwgaXNhX2RtYV9wb3J0W2NoYW5uZWxdW0lTQV9ETUFfQ09VTlRdKTsKKwkJb3V0YihsZW5ndGgsIGlzYV9kbWFfcG9ydFtjaGFuXVtJU0FfRE1BX0NPVU5UXSk7CisJCW91dGIobGVuZ3RoID4+IDgsIGlzYV9kbWFfcG9ydFtjaGFuXVtJU0FfRE1BX0NPVU5UXSk7CiAKLQkJaWYgKGRtYS0+ZG1hX21vZGUgJiBETUFfQVVUT0lOSVQpCi0JCQltb2RlIHw9IElTQV9ETUFfQVVUT0lOSVQ7Ci0KLQkJb3V0Yihtb2RlLCBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9NT0RFXSk7CisJCW91dGIobW9kZSwgaXNhX2RtYV9wb3J0W2NoYW5dW0lTQV9ETUFfTU9ERV0pOwogCQlkbWEtPmludmFsaWQgPSAwOwogCX0KLQlvdXRiKGNoYW5uZWwgJiAzLCBpc2FfZG1hX3BvcnRbY2hhbm5lbF1bSVNBX0RNQV9NQVNLXSk7CisJb3V0YihjaGFuICYgMywgaXNhX2RtYV9wb3J0W2NoYW5dW0lTQV9ETUFfTUFTS10pOwogfQogCi1zdGF0aWMgdm9pZCBpc2FfZGlzYWJsZV9kbWEoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RhdGljIHZvaWQgaXNhX2Rpc2FibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewotCW91dGIoY2hhbm5lbCB8IDQsIGlzYV9kbWFfcG9ydFtjaGFubmVsXVtJU0FfRE1BX01BU0tdKTsKKwlvdXRiKGNoYW4gfCA0LCBpc2FfZG1hX3BvcnRbY2hhbl1bSVNBX0RNQV9NQVNLXSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX29wcyBpc2FfZG1hX29wcyA9IHsKQEAgLTE2MCw3ICsxNDksMTIgQEAKIAkuZW5kCT0gMHgwNDhmCiB9IH07CiAKLXZvaWQgX19pbml0IGlzYV9pbml0X2RtYShkbWFfdCAqZG1hKQorc3RhdGljIGRtYV90IGlzYV9kbWFbOF07CisKKy8qCisgKiBJU0EgRE1BIGFsd2F5cyBzdGFydHMgYXQgY2hhbm5lbCAwCisgKi8KK3ZvaWQgX19pbml0IGlzYV9pbml0X2RtYSh2b2lkKQogewogCS8qCiAJICogVHJ5IHRvIGF1dG9kZXRlY3QgcHJlc2VuY2Ugb2YgYW4gSVNBIERNQSBjb250cm9sbGVyLgpAQCAtMTc4LDExICsxNzIsMTEgQEAKIAlvdXRiKDB4YWEsIDB4MDApOwogCiAJaWYgKGluYigwKSA9PSAweDU1ICYmIGluYigwKSA9PSAweGFhKSB7Ci0JCWludCBjaGFubmVsLCBpOworCQl1bnNpZ25lZCBpbnQgY2hhbiwgaTsKIAotCQlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgODsgY2hhbm5lbCsrKSB7Ci0JCQlkbWFbY2hhbm5lbF0uZF9vcHMgPSAmaXNhX2RtYV9vcHM7Ci0JCQlpc2FfZGlzYWJsZV9kbWEoY2hhbm5lbCwgTlVMTCk7CisJCWZvciAoY2hhbiA9IDA7IGNoYW4gPCA4OyBjaGFuKyspIHsKKwkJCWlzYV9kbWFbY2hhbl0uZF9vcHMgPSAmaXNhX2RtYV9vcHM7CisJCQlpc2FfZGlzYWJsZV9kbWEoY2hhbiwgTlVMTCk7CiAJCX0KIAogCQlvdXRiKDB4NDAsIDB4MGIpOwpAQCAtMjE3LDUgKzIxMSwxMiBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRtYV9yZXNvdXJjZXMpOyBpKyspCiAJCQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsIGRtYV9yZXNvdXJjZXMgKyBpKTsKKworCQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgODsgY2hhbisrKSB7CisJCQlpbnQgcmV0ID0gaXNhX2RtYV9hZGQoY2hhbiwgJmlzYV9kbWFbY2hhbl0pOworCQkJaWYgKHJldCkKKwkJCQlwcmludGsoS0VSTl9FUlIgIklTQURNQSV1OiB1bmFibGUgdG8gcmVnaXN0ZXI6ICVkXG4iLAorCQkJCQljaGFuLCByZXQpOworCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2RtYS5jIGIvYXJjaC9hcm0va2VybmVsL2RtYS5jCmluZGV4IGQwMDYwODUuLjdkNWI5ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9kbWEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvZG1hLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKQEAgLTIzLDE5ICsyNCw0MCBAQAogREVGSU5FX1NQSU5MT0NLKGRtYV9zcGluX2xvY2spOwogRVhQT1JUX1NZTUJPTChkbWFfc3Bpbl9sb2NrKTsKIAotc3RhdGljIGRtYV90IGRtYV9jaGFuW01BWF9ETUFfQ0hBTk5FTFNdOworc3RhdGljIGRtYV90ICpkbWFfY2hhbltNQVhfRE1BX0NIQU5ORUxTXTsKKworc3RhdGljIGlubGluZSBkbWFfdCAqZG1hX2NoYW5uZWwodW5zaWduZWQgaW50IGNoYW4pCit7CisJaWYgKGNoYW4gPj0gTUFYX0RNQV9DSEFOTkVMUykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gZG1hX2NoYW5bY2hhbl07Cit9CisKK2ludCBfX2luaXQgaXNhX2RtYV9hZGQodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCit7CisJaWYgKCFkbWEtPmRfb3BzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNnX2luaXRfdGFibGUoJmRtYS0+YnVmLCAxKTsKKworCWlmIChkbWFfY2hhbltjaGFuXSkKKwkJcmV0dXJuIC1FQlVTWTsKKwlkbWFfY2hhbltjaGFuXSA9IGRtYTsKKwlyZXR1cm4gMDsKK30KIAogLyoKICAqIFJlcXVlc3QgRE1BIGNoYW5uZWwKICAqCiAgKiBPbiBjZXJ0YWluIHBsYXRmb3Jtcywgd2UgaGF2ZSB0byBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgYXMgd2VsbC4uLgogICovCi1pbnQgcmVxdWVzdF9kbWEoZG1hY2hfdCBjaGFubmVsLCBjb25zdCBjaGFyICpkZXZpY2VfaWQpCitpbnQgcmVxdWVzdF9kbWEodW5zaWduZWQgaW50IGNoYW4sIGNvbnN0IGNoYXIgKmRldmljZV9pZCkKIHsKLQlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCWRtYV90ICpkbWEgPSBkbWFfY2hhbm5lbChjaGFuKTsKIAlpbnQgcmV0OwogCi0JaWYgKGNoYW5uZWwgPj0gTUFYX0RNQV9DSEFOTkVMUyB8fCAhZG1hLT5kX29wcykKKwlpZiAoIWRtYSkKIAkJZ290byBiYWRfZG1hOwogCiAJaWYgKHhjaGcoJmRtYS0+bG9jaywgMSkgIT0gMCkKQEAgLTQ3LDcgKzY5LDcgQEAKIAogCXJldCA9IDA7CiAJaWYgKGRtYS0+ZF9vcHMtPnJlcXVlc3QpCi0JCXJldCA9IGRtYS0+ZF9vcHMtPnJlcXVlc3QoY2hhbm5lbCwgZG1hKTsKKwkJcmV0ID0gZG1hLT5kX29wcy0+cmVxdWVzdChjaGFuLCBkbWEpOwogCiAJaWYgKHJldCkKIAkJeGNoZygmZG1hLT5sb2NrLCAwKTsKQEAgLTU1LDcgKzc3LDcgQEAKIAlyZXR1cm4gcmV0OwogCiBiYWRfZG1hOgotCXByaW50ayhLRVJOX0VSUiAiZG1hOiB0cnlpbmcgdG8gYWxsb2NhdGUgRE1BJWRcbiIsIGNoYW5uZWwpOworCXByaW50ayhLRVJOX0VSUiAiZG1hOiB0cnlpbmcgdG8gYWxsb2NhdGUgRE1BJWRcbiIsIGNoYW4pOwogCXJldHVybiAtRUlOVkFMOwogCiBidXN5OgpAQCAtNjgsNDIgKzkwLDQyIEBACiAgKgogICogT24gY2VydGFpbiBwbGF0Zm9ybXMsIHdlIGhhdmUgdG8gZnJlZSBpbnRlcnJ1cHQgYXMgd2VsbC4uLgogICovCi12b2lkIGZyZWVfZG1hKGRtYWNoX3QgY2hhbm5lbCkKK3ZvaWQgZnJlZV9kbWEodW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAKLQlpZiAoY2hhbm5lbCA+PSBNQVhfRE1BX0NIQU5ORUxTIHx8ICFkbWEtPmRfb3BzKQorCWlmICghZG1hKQogCQlnb3RvIGJhZF9kbWE7CiAKIAlpZiAoZG1hLT5hY3RpdmUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogZnJlZWluZyBhY3RpdmUgRE1BXG4iLCBjaGFubmVsKTsKLQkJZG1hLT5kX29wcy0+ZGlzYWJsZShjaGFubmVsLCBkbWEpOworCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBmcmVlaW5nIGFjdGl2ZSBETUFcbiIsIGNoYW4pOworCQlkbWEtPmRfb3BzLT5kaXNhYmxlKGNoYW4sIGRtYSk7CiAJCWRtYS0+YWN0aXZlID0gMDsKIAl9CiAKIAlpZiAoeGNoZygmZG1hLT5sb2NrLCAwKSAhPSAwKSB7CiAJCWlmIChkbWEtPmRfb3BzLT5mcmVlKQotCQkJZG1hLT5kX29wcy0+ZnJlZShjaGFubmVsLCBkbWEpOworCQkJZG1hLT5kX29wcy0+ZnJlZShjaGFuLCBkbWEpOwogCQlyZXR1cm47CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJkbWElZDogdHJ5aW5nIHRvIGZyZWUgZnJlZSBETUFcbiIsIGNoYW5uZWwpOworCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBmcmVlIGZyZWUgRE1BXG4iLCBjaGFuKTsKIAlyZXR1cm47CiAKIGJhZF9kbWE6Ci0JcHJpbnRrKEtFUk5fRVJSICJkbWE6IHRyeWluZyB0byBmcmVlIERNQSVkXG4iLCBjaGFubmVsKTsKKwlwcmludGsoS0VSTl9FUlIgImRtYTogdHJ5aW5nIHRvIGZyZWUgRE1BJWRcbiIsIGNoYW4pOwogfQogRVhQT1JUX1NZTUJPTChmcmVlX2RtYSk7CiAKIC8qIFNldCBETUEgU2NhdHRlci1HYXRoZXIgbGlzdAogICovCi12b2lkIHNldF9kbWFfc2cgKGRtYWNoX3QgY2hhbm5lbCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5yX3NnKQordm9pZCBzZXRfZG1hX3NnICh1bnNpZ25lZCBpbnQgY2hhbiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5yX3NnKQogewotCWRtYV90ICpkbWEgPSBkbWFfY2hhbiArIGNoYW5uZWw7CisJZG1hX3QgKmRtYSA9IGRtYV9jaGFubmVsKGNoYW4pOwogCiAJaWYgKGRtYS0+YWN0aXZlKQogCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiBhbHRlcmluZyBETUEgU0cgd2hpbGUgIgotCQkgICAgICAgIkRNQSBhY3RpdmVcbiIsIGNoYW5uZWwpOworCQkgICAgICAgIkRNQSBhY3RpdmVcbiIsIGNoYW4pOwogCiAJZG1hLT5zZyA9IHNnOwogCWRtYS0+c2djb3VudCA9IG5yX3NnOwpAQCAtMTE1LDEzICsxMzcsMTMgQEAKICAqCiAgKiBDb3B5IGFkZHJlc3MgdG8gdGhlIHN0cnVjdHVyZSwgYW5kIHNldCB0aGUgaW52YWxpZCBiaXQKICAqLwotdm9pZCBfX3NldF9kbWFfYWRkciAoZG1hY2hfdCBjaGFubmVsLCB2b2lkICphZGRyKQordm9pZCBfX3NldF9kbWFfYWRkciAodW5zaWduZWQgaW50IGNoYW4sIHZvaWQgKmFkZHIpCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAKIAlpZiAoZG1hLT5hY3RpdmUpCiAJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGFsdGVyaW5nIERNQSBhZGRyZXNzIHdoaWxlICIKLQkJICAgICAgICJETUEgYWN0aXZlXG4iLCBjaGFubmVsKTsKKwkJICAgICAgICJETUEgYWN0aXZlXG4iLCBjaGFuKTsKIAogCWRtYS0+c2cgPSBOVUxMOwogCWRtYS0+YWRkciA9IGFkZHI7CkBAIC0xMzMsMTMgKzE1NSwxMyBAQAogICoKICAqIENvcHkgYWRkcmVzcyB0byB0aGUgc3RydWN0dXJlLCBhbmQgc2V0IHRoZSBpbnZhbGlkIGJpdAogICovCi12b2lkIHNldF9kbWFfY291bnQgKGRtYWNoX3QgY2hhbm5lbCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3ZvaWQgc2V0X2RtYV9jb3VudCAodW5zaWduZWQgaW50IGNoYW4sIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAKIAlpZiAoZG1hLT5hY3RpdmUpCiAJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGFsdGVyaW5nIERNQSBjb3VudCB3aGlsZSAiCi0JCSAgICAgICAiRE1BIGFjdGl2ZVxuIiwgY2hhbm5lbCk7CisJCSAgICAgICAiRE1BIGFjdGl2ZVxuIiwgY2hhbik7CiAKIAlkbWEtPnNnID0gTlVMTDsKIAlkbWEtPmNvdW50ID0gY291bnQ7CkBAIC0xNDksMTMgKzE3MSwxMyBAQAogCiAvKiBTZXQgRE1BIGRpcmVjdGlvbiBtb2RlCiAgKi8KLXZvaWQgc2V0X2RtYV9tb2RlIChkbWFjaF90IGNoYW5uZWwsIGRtYW1vZGVfdCBtb2RlKQordm9pZCBzZXRfZG1hX21vZGUgKHVuc2lnbmVkIGludCBjaGFuLCB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKLQlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCWRtYV90ICpkbWEgPSBkbWFfY2hhbm5lbChjaGFuKTsKIAogCWlmIChkbWEtPmFjdGl2ZSkKIAkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogYWx0ZXJpbmcgRE1BIG1vZGUgd2hpbGUgIgotCQkgICAgICAgIkRNQSBhY3RpdmVcbiIsIGNoYW5uZWwpOworCQkgICAgICAgIkRNQSBhY3RpdmVcbiIsIGNoYW4pOwogCiAJZG1hLT5kbWFfbW9kZSA9IG1vZGU7CiAJZG1hLT5pbnZhbGlkID0gMTsKQEAgLTE2NCw0MiArMTg2LDQyIEBACiAKIC8qIEVuYWJsZSBETUEgY2hhbm5lbAogICovCi12b2lkIGVuYWJsZV9kbWEgKGRtYWNoX3QgY2hhbm5lbCkKK3ZvaWQgZW5hYmxlX2RtYSAodW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAKIAlpZiAoIWRtYS0+bG9jaykKIAkJZ290byBmcmVlX2RtYTsKIAogCWlmIChkbWEtPmFjdGl2ZSA9PSAwKSB7CiAJCWRtYS0+YWN0aXZlID0gMTsKLQkJZG1hLT5kX29wcy0+ZW5hYmxlKGNoYW5uZWwsIGRtYSk7CisJCWRtYS0+ZF9vcHMtPmVuYWJsZShjaGFuLCBkbWEpOwogCX0KIAlyZXR1cm47CiAKIGZyZWVfZG1hOgotCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBlbmFibGUgZnJlZSBETUFcbiIsIGNoYW5uZWwpOworCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBlbmFibGUgZnJlZSBETUFcbiIsIGNoYW4pOwogCUJVRygpOwogfQogRVhQT1JUX1NZTUJPTChlbmFibGVfZG1hKTsKIAogLyogRGlzYWJsZSBETUEgY2hhbm5lbAogICovCi12b2lkIGRpc2FibGVfZG1hIChkbWFjaF90IGNoYW5uZWwpCit2b2lkIGRpc2FibGVfZG1hICh1bnNpZ25lZCBpbnQgY2hhbikKIHsKLQlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCWRtYV90ICpkbWEgPSBkbWFfY2hhbm5lbChjaGFuKTsKIAogCWlmICghZG1hLT5sb2NrKQogCQlnb3RvIGZyZWVfZG1hOwogCiAJaWYgKGRtYS0+YWN0aXZlID09IDEpIHsKIAkJZG1hLT5hY3RpdmUgPSAwOwotCQlkbWEtPmRfb3BzLT5kaXNhYmxlKGNoYW5uZWwsIGRtYSk7CisJCWRtYS0+ZF9vcHMtPmRpc2FibGUoY2hhbiwgZG1hKTsKIAl9CiAJcmV0dXJuOwogCiBmcmVlX2RtYToKLQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0cnlpbmcgdG8gZGlzYWJsZSBmcmVlIERNQVxuIiwgY2hhbm5lbCk7CisJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogdHJ5aW5nIHRvIGRpc2FibGUgZnJlZSBETUFcbiIsIGNoYW4pOwogCUJVRygpOwogfQogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2RtYSk7CkBAIC0yMDcsNDUgKzIyOSwzOCBAQAogLyoKICAqIElzIHRoZSBzcGVjaWZpZWQgRE1BIGNoYW5uZWwgYWN0aXZlPwogICovCi1pbnQgZG1hX2NoYW5uZWxfYWN0aXZlKGRtYWNoX3QgY2hhbm5lbCkKK2ludCBkbWFfY2hhbm5lbF9hY3RpdmUodW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JcmV0dXJuIGRtYV9jaGFuW2NoYW5uZWxdLmFjdGl2ZTsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CisJcmV0dXJuIGRtYS0+YWN0aXZlOwogfQogRVhQT1JUX1NZTUJPTChkbWFfY2hhbm5lbF9hY3RpdmUpOwogCi12b2lkIHNldF9kbWFfcGFnZShkbWFjaF90IGNoYW5uZWwsIGNoYXIgcGFnZW5yKQordm9pZCBzZXRfZG1hX3BhZ2UodW5zaWduZWQgaW50IGNoYW4sIGNoYXIgcGFnZW5yKQogewotCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBzZXRfZG1hX3BhZ2VcbiIsIGNoYW5uZWwpOworCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRyeWluZyB0byBzZXRfZG1hX3BhZ2VcbiIsIGNoYW4pOwogfQogRVhQT1JUX1NZTUJPTChzZXRfZG1hX3BhZ2UpOwogCi12b2lkIHNldF9kbWFfc3BlZWQoZG1hY2hfdCBjaGFubmVsLCBpbnQgY3ljbGVfbnMpCit2b2lkIHNldF9kbWFfc3BlZWQodW5zaWduZWQgaW50IGNoYW4sIGludCBjeWNsZV9ucykKIHsKLQlkbWFfdCAqZG1hID0gZG1hX2NoYW4gKyBjaGFubmVsOworCWRtYV90ICpkbWEgPSBkbWFfY2hhbm5lbChjaGFuKTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChkbWEtPmRfb3BzLT5zZXRzcGVlZCkKLQkJcmV0ID0gZG1hLT5kX29wcy0+c2V0c3BlZWQoY2hhbm5lbCwgZG1hLCBjeWNsZV9ucyk7CisJCXJldCA9IGRtYS0+ZF9vcHMtPnNldHNwZWVkKGNoYW4sIGRtYSwgY3ljbGVfbnMpOwogCWRtYS0+c3BlZWQgPSByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHNldF9kbWFfc3BlZWQpOwogCi1pbnQgZ2V0X2RtYV9yZXNpZHVlKGRtYWNoX3QgY2hhbm5lbCkKK2ludCBnZXRfZG1hX3Jlc2lkdWUodW5zaWduZWQgaW50IGNoYW4pCiB7Ci0JZG1hX3QgKmRtYSA9IGRtYV9jaGFuICsgY2hhbm5lbDsKKwlkbWFfdCAqZG1hID0gZG1hX2NoYW5uZWwoY2hhbik7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoZG1hLT5kX29wcy0+cmVzaWR1ZSkKLQkJcmV0ID0gZG1hLT5kX29wcy0+cmVzaWR1ZShjaGFubmVsLCBkbWEpOworCQlyZXQgPSBkbWEtPmRfb3BzLT5yZXNpZHVlKGNoYW4sIGRtYSk7CiAKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChnZXRfZG1hX3Jlc2lkdWUpOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2RtYSh2b2lkKQotewotCWFyY2hfZG1hX2luaXQoZG1hX2NoYW4pOwotCXJldHVybiAwOwotfQotCi1jb3JlX2luaXRjYWxsKGluaXRfZG1hKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCmluZGV4IDg1MDQwY2YuLmQ2NjJhMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS92ZnBtYWNyb3MuaD4KICNpbmNsdWRlIDxtYWNoL2VudHJ5LW1hY3JvLlM+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9ub3RpZnkuaD4KKyNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKICNpbmNsdWRlICJlbnRyeS1oZWFkZXIuUyIKIApAQCAtMTIzLDYgKzEyNCw4IEBACiAjZW5kaWYKIAogCS5tYWNybwlzdmNfZW50cnksIHN0YWNrX2hvbGU9MAorIFVOV0lORCguZm5zdGFydAkJKQorIFVOV0lORCguc2F2ZSB7cjAgLSBwY30JCSkKIAlzdWIJc3AsIHNwLCAjKFNfRlJBTUVfU0laRSArIFxzdGFja19ob2xlKQogIFNQRklYKAl0c3QJc3AsICM0CQkpCiAgU1BGSVgoCWJpY25lCXNwLCBzcCwgIzQJKQpAQCAtMTk2LDYgKzE5OSw3IEBACiAJbGRyCXIwLCBbc3AsICNTX1BTUl0KIAltc3IJc3Bzcl9jeHNmLCByMAogCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBsb2FkIHIwIC0gcGMsIGNwc3IKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fZGFidF9zdmMpCiAKIAkuYWxpZ24JNQpAQCAtMjI4LDYgKzIzMiw3IEBACiAJYmxlcQl0cmFjZV9oYXJkaXJxc19vbgogI2VuZGlmCiAJbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIGxvYWQgcjAgLSBwYywgY3BzcgorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0MoX19pcnFfc3ZjKQogCiAJLmx0b3JnCkBAIC0yNzgsNiArMjgzLDcgQEAKIAlsZHIJbHIsIFtzcCwgI1NfUFNSXQkJQCBHZXQgU1ZDIGNwc3IKIAltc3IJc3Bzcl9jeHNmLCBscgogCWxkbWlhCXNwLCB7cjAgLSBwY31eCQkJQCBSZXN0b3JlIFNWQyByZWdpc3RlcnMKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fdW5kX3N2YykKIAogCS5hbGlnbgk1CkBAIC0zMjAsNiArMzI2LDcgQEAKIAlsZHIJcjAsIFtzcCwgI1NfUFNSXQogCW1zcglzcHNyX2N4c2YsIHIwCiAJbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIGxvYWQgcjAgLSBwYywgY3BzcgorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0MoX19wYWJ0X3N2YykKIAogCS5hbGlnbgk1CkBAIC0zNDMsNiArMzUwLDggQEAKICNlbmRpZgogCiAJLm1hY3JvCXVzcl9lbnRyeQorIFVOV0lORCguZm5zdGFydAkpCisgVU5XSU5EKC5jYW50dW53aW5kCSkJQCBkb24ndCB1bndpbmQgdGhlIHVzZXIgc3BhY2UKIAlzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCiAJc3RtaWIJc3AsIHtyMSAtIHIxMn0KIApAQCAtNDIwLDYgKzQyOSw3IEBACiAJbW92CXIyLCBzcAogCWFkcglsciwgcmV0X2Zyb21fZXhjZXB0aW9uCiAJYglkb19EYXRhQWJvcnQKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9fZGFidF91c3IpCiAKIAkuYWxpZ24JNQpAQCAtNDUwLDYgKzQ2MCw3IEBACiAKIAltb3YJd2h5LCAjMAogCWIJcmV0X3RvX3VzZXIKKyBVTldJTkQoLmZuZW5kCQkpCiBFTkRQUk9DKF9faXJxX3VzcikKIAogCS5sdG9yZwpAQCAtNDg0LDYgKzQ5NSw3IEBACiAjZWxzZQogCWIJX191bmRfdXNyX3Vua25vd24KICNlbmRpZgorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0MoX191bmRfdXNyKQogCiAJQApAQCAtNjcxLDE0ICs2ODMsMTggQEAKIAllbmFibGVfaXJxCQkJCUAgRW5hYmxlIGludGVycnVwdHMKIAltb3YJcjEsIHNwCQkJCUAgcmVncwogCWJsCWRvX1ByZWZldGNoQWJvcnQJCUAgY2FsbCBhYm9ydCBoYW5kbGVyCisgVU5XSU5EKC5mbmVuZAkJKQogCS8qIGZhbGwgdGhyb3VnaCAqLwogLyoKICAqIFRoaXMgaXMgdGhlIHJldHVybiBjb2RlIHRvIHVzZXIgbW9kZSBmb3IgYWJvcnQgaGFuZGxlcnMKICAqLwogRU5UUlkocmV0X2Zyb21fZXhjZXB0aW9uKQorIFVOV0lORCguZm5zdGFydAkpCisgVU5XSU5EKC5jYW50dW53aW5kCSkKIAlnZXRfdGhyZWFkX2luZm8gdHNrCiAJbW92CXdoeSwgIzAKIAliCXJldF90b191c2VyCisgVU5XSU5EKC5mbmVuZAkJKQogRU5EUFJPQyhfX3BhYnRfdXNyKQogRU5EUFJPQyhyZXRfZnJvbV9leGNlcHRpb24pCiAKQEAgLTY4OCw2ICs3MDQsOCBAQAogICogcHJldmlvdXMgYW5kIG5leHQgYXJlIGd1YXJhbnRlZWQgbm90IHRvIGJlIHRoZSBzYW1lLgogICovCiBFTlRSWShfX3N3aXRjaF90bykKKyBVTldJTkQoLmZuc3RhcnQJKQorIFVOV0lORCguY2FudHVud2luZAkpCiAJYWRkCWlwLCByMSwgI1RJX0NQVV9TQVZFCiAJbGRyCXIzLCBbcjIsICNUSV9UUF9WQUxVRV0KIAlzdG1pYQlpcCEsIHtyNCAtIHNsLCBmcCwgc3AsIGxyfQlAIFN0b3JlIG1vc3QgcmVncyBvbiBzdGFjawpAQCAtNzE3LDYgKzczNSw3IEBACiAJYmwJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4KIAltb3YJcjAsIHI1CiAJbGRtaWEJcjQsIHtyNCAtIHNsLCBmcCwgc3AsIHBjfQlAIExvYWQgYWxsIHJlZ3Mgc2F2ZWQgcHJldmlvdXNseQorIFVOV0lORCguZm5lbmQJCSkKIEVORFBST0MoX19zd2l0Y2hfdG8pCiAKIAlfX0lOSVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUwppbmRleCAxNTlkMDQxLi5iNTVjYjAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KICNpbmNsdWRlIDxtYWNoL2VudHJ5LW1hY3JvLlM+CisjaW5jbHVkZSA8YXNtL3Vud2luZC5oPgogCiAjaW5jbHVkZSAiZW50cnktaGVhZGVyLlMiCiAKQEAgLTIyLDYgKzIzLDggQEAKICAqIHN0YWNrLgogICovCiByZXRfZmFzdF9zeXNjYWxsOgorIFVOV0lORCguZm5zdGFydAkpCisgVU5XSU5EKC5jYW50dW53aW5kCSkKIAlkaXNhYmxlX2lycQkJCQlAIGRpc2FibGUgaW50ZXJydXB0cwogCWxkcglyMSwgW3RzaywgI1RJX0ZMQUdTXQogCXRzdAlyMSwgI19USUZfV09SS19NQVNLCkBAIC0zOCw2ICs0MSw3IEBACiAJbW92CXIwLCByMAogCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUgLSBTX1BDCiAJbW92cwlwYywgbHIJCQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgorIFVOV0lORCguZm5lbmQJCSkKIAogLyoKICAqIE9rLCB3ZSBuZWVkIHRvIGRvIGV4dHJhIHByb2Nlc3NpbmcsIGVudGVyIHRoZSBzbG93IHBhdGguCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKaW5kZXggMzYzZGIxOC4uNzI5NmYwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9pcnEuYwpAQCAtNzYsNyArNzYsNyBAQAogCiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGNwdSkuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGNwdSkpOwogCQlzZXFfcHJpbnRmKHAsICIgJTEwcyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUgPyA6ICItIik7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQlmb3IgKGFjdGlvbiA9IGFjdGlvbi0+bmV4dDsgYWN0aW9uOyBhY3Rpb24gPSBhY3Rpb24tPm5leHQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKaW5kZXggOWY1MDlmZC4uZDE3MzFlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdW53aW5kLmg+CiAKICNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAogLyoKQEAgLTY2LDYgKzY3LDI0IEBACiAJCQkgICAgICBjaGFyICpzZWNzdHJpbmdzLAogCQkJICAgICAgc3RydWN0IG1vZHVsZSAqbW9kKQogeworI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECisJRWxmX1NoZHIgKnMsICpzZWNoZHJzX2VuZCA9IHNlY2hkcnMgKyBoZHItPmVfc2hudW07CisKKwlmb3IgKHMgPSBzZWNoZHJzOyBzIDwgc2VjaGRyc19lbmQ7IHMrKykgeworCQlpZiAoc3RyY21wKCIuQVJNLmV4aWR4LmluaXQudGV4dCIsIHNlY3N0cmluZ3MgKyBzLT5zaF9uYW1lKSA9PSAwKQorCQkJbW9kLT5hcmNoLnVud19zZWNfaW5pdCA9IHM7CisJCWVsc2UgaWYgKHN0cmNtcCgiLkFSTS5leGlkeC5kZXZpbml0LnRleHQiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkgPT0gMCkKKwkJCW1vZC0+YXJjaC51bndfc2VjX2RldmluaXQgPSBzOworCQllbHNlIGlmIChzdHJjbXAoIi5BUk0uZXhpZHgiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkgPT0gMCkKKwkJCW1vZC0+YXJjaC51bndfc2VjX2NvcmUgPSBzOworCQllbHNlIGlmIChzdHJjbXAoIi5pbml0LnRleHQiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkgPT0gMCkKKwkJCW1vZC0+YXJjaC5zZWNfaW5pdF90ZXh0ID0gczsKKwkJZWxzZSBpZiAoc3RyY21wKCIuZGV2aW5pdC50ZXh0Iiwgc2Vjc3RyaW5ncyArIHMtPnNoX25hbWUpID09IDApCisJCQltb2QtPmFyY2guc2VjX2RldmluaXRfdGV4dCA9IHM7CisJCWVsc2UgaWYgKHN0cmNtcCgiLnRleHQiLCBzZWNzdHJpbmdzICsgcy0+c2hfbmFtZSkgPT0gMCkKKwkJCW1vZC0+YXJjaC5zZWNfY29yZV90ZXh0ID0gczsKKwl9CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA0LDYgKzEyMywxMCBAQAogCQlsb2MgPSBkc3RzZWMtPnNoX2FkZHIgKyByZWwtPnJfb2Zmc2V0OwogCiAJCXN3aXRjaCAoRUxGMzJfUl9UWVBFKHJlbC0+cl9pbmZvKSkgeworCQljYXNlIFJfQVJNX05PTkU6CisJCQkvKiBpZ25vcmUgKi8KKwkJCWJyZWFrOworCiAJCWNhc2UgUl9BUk1fQUJTMzI6CiAJCQkqKHUzMiAqKWxvYyArPSBzeW0tPnN0X3ZhbHVlOwogCQkJYnJlYWs7CkBAIC0xNDEsNiArMTY0LDExIEBACiAJCSAgICAgICAqKHUzMiAqKWxvYyB8PSAweDAxYTBmMDAwOwogCQkgICAgICAgYnJlYWs7CiAKKwkJY2FzZSBSX0FSTV9QUkVMMzE6CisJCQlvZmZzZXQgPSAqKHUzMiAqKWxvYyArIHN5bS0+c3RfdmFsdWUgLSBsb2M7CisJCQkqKHUzMiAqKWxvYyA9IG9mZnNldCAmIDB4N2ZmZmZmZmY7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biByZWxvY2F0aW9uOiAldVxuIiwKIAkJCSAgICAgICBtb2R1bGUtPm5hbWUsIEVMRjMyX1JfVFlQRShyZWwtPnJfaW5mbykpOwpAQCAtMTU5LDE0ICsxODcsNTAgQEAKIAlyZXR1cm4gLUVOT0VYRUM7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVJNX1VOV0lORAorc3RhdGljIHZvaWQgcmVnaXN0ZXJfdW53aW5kX3RhYmxlcyhzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJaWYgKG1vZC0+YXJjaC51bndfc2VjX2luaXQgJiYgbW9kLT5hcmNoLnNlY19pbml0X3RleHQpCisJCW1vZC0+YXJjaC51bndpbmRfaW5pdCA9CisJCQl1bndpbmRfdGFibGVfYWRkKG1vZC0+YXJjaC51bndfc2VjX2luaXQtPnNoX2FkZHIsCisJCQkJCSBtb2QtPmFyY2gudW53X3NlY19pbml0LT5zaF9zaXplLAorCQkJCQkgbW9kLT5hcmNoLnNlY19pbml0X3RleHQtPnNoX2FkZHIsCisJCQkJCSBtb2QtPmFyY2guc2VjX2luaXRfdGV4dC0+c2hfc2l6ZSk7CisJaWYgKG1vZC0+YXJjaC51bndfc2VjX2RldmluaXQgJiYgbW9kLT5hcmNoLnNlY19kZXZpbml0X3RleHQpCisJCW1vZC0+YXJjaC51bndpbmRfZGV2aW5pdCA9CisJCQl1bndpbmRfdGFibGVfYWRkKG1vZC0+YXJjaC51bndfc2VjX2RldmluaXQtPnNoX2FkZHIsCisJCQkJCSBtb2QtPmFyY2gudW53X3NlY19kZXZpbml0LT5zaF9zaXplLAorCQkJCQkgbW9kLT5hcmNoLnNlY19kZXZpbml0X3RleHQtPnNoX2FkZHIsCisJCQkJCSBtb2QtPmFyY2guc2VjX2RldmluaXRfdGV4dC0+c2hfc2l6ZSk7CisJaWYgKG1vZC0+YXJjaC51bndfc2VjX2NvcmUgJiYgbW9kLT5hcmNoLnNlY19jb3JlX3RleHQpCisJCW1vZC0+YXJjaC51bndpbmRfY29yZSA9CisJCQl1bndpbmRfdGFibGVfYWRkKG1vZC0+YXJjaC51bndfc2VjX2NvcmUtPnNoX2FkZHIsCisJCQkJCSBtb2QtPmFyY2gudW53X3NlY19jb3JlLT5zaF9zaXplLAorCQkJCQkgbW9kLT5hcmNoLnNlY19jb3JlX3RleHQtPnNoX2FkZHIsCisJCQkJCSBtb2QtPmFyY2guc2VjX2NvcmVfdGV4dC0+c2hfc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHVucmVnaXN0ZXJfdW53aW5kX3RhYmxlcyhzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJdW53aW5kX3RhYmxlX2RlbChtb2QtPmFyY2gudW53aW5kX2luaXQpOworCXVud2luZF90YWJsZV9kZWwobW9kLT5hcmNoLnVud2luZF9kZXZpbml0KTsKKwl1bndpbmRfdGFibGVfZGVsKG1vZC0+YXJjaC51bndpbmRfY29yZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX3Vud2luZF90YWJsZXMoc3RydWN0IG1vZHVsZSAqbW9kKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCB1bnJlZ2lzdGVyX3Vud2luZF90YWJsZXMoc3RydWN0IG1vZHVsZSAqbW9kKSB7IH0KKyNlbmRpZgorCiBpbnQKIG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGYzMl9FaGRyICpoZHIsIGNvbnN0IEVsZl9TaGRyICpzZWNoZHJzLAogCQlzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCiB7CisJcmVnaXN0ZXJfdW53aW5kX3RhYmxlcyhtb2R1bGUpOwogCXJldHVybiAwOwogfQogCiB2b2lkCiBtb2R1bGVfYXJjaF9jbGVhbnVwKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKKwl1bnJlZ2lzdGVyX3Vud2luZF90YWJsZXMobW9kKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGQzZWE2ZmEuLjJkZTE0ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9ub3RpZnkuaD4KKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAogc3RhdGljIGNvbnN0IGNoYXIgKnByb2Nlc3Nvcl9tb2Rlc1tdID0gewpAQCAtODIsNyArODMsNyBAQAogX19zZXR1cCgibm9obHQiLCBub2hsdF9zZXR1cCk7CiBfX3NldHVwKCJobHQiLCBobHRfc2V0dXApOwogCi12b2lkIGFybV9tYWNoaW5lX3Jlc3RhcnQoY2hhciBtb2RlKQordm9pZCBhcm1fbWFjaGluZV9yZXN0YXJ0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qCiAJICogQ2xlYW4gYW5kIGRpc2FibGUgY2FjaGUsIGFuZCB0dXJuIG9mZiBpbnRlcnJ1cHRzCkBAIC05OSw3ICsxMDAsNyBAQAogCS8qCiAJICogTm93IGNhbGwgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyByZWJvb3QgY29kZS4KIAkgKi8KLQlhcmNoX3Jlc2V0KG1vZGUpOworCWFyY2hfcmVzZXQobW9kZSwgY21kKTsKIAogCS8qCiAJICogV2hvb3BzIC0gdGhlIGFyY2hpdGVjdHVyZSB3YXMgdW5hYmxlIHRvIHJlYm9vdC4KQEAgLTExOSw3ICsxMjAsNyBAQAogdm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCk7CiBFWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7CiAKLXZvaWQgKCphcm1fcG1fcmVzdGFydCkoY2hhciBzdHIpID0gYXJtX21hY2hpbmVfcmVzdGFydDsKK3ZvaWQgKCphcm1fcG1fcmVzdGFydCkoY2hhciBzdHIsIGNvbnN0IGNoYXIgKmNtZCkgPSBhcm1fbWFjaGluZV9yZXN0YXJ0OwogRVhQT1JUX1NZTUJPTF9HUEwoYXJtX3BtX3Jlc3RhcnQpOwogCiAKQEAgLTE5NCw5ICsxOTUsOSBAQAogCQlwbV9wb3dlcl9vZmYoKTsKIH0KIAotdm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqIF9fdW51c2VkKQordm9pZCBtYWNoaW5lX3Jlc3RhcnQoY2hhciAqY21kKQogewotCWFybV9wbV9yZXN0YXJ0KHJlYm9vdF9tb2RlKTsKKwlhcm1fcG1fcmVzdGFydChyZWJvb3RfbW9kZSwgY21kKTsKIH0KIAogdm9pZCBfX3Nob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTM3MiwyMyArMzczLDIxIEBACiAKIHVuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQl1bnNpZ25lZCBsb25nIGZwLCBscjsKLQl1bnNpZ25lZCBsb25nIHN0YWNrX3N0YXJ0LCBzdGFja19lbmQ7CisJc3RydWN0IHN0YWNrZnJhbWUgZnJhbWU7CiAJaW50IGNvdW50ID0gMDsKIAlpZiAoIXAgfHwgcCA9PSBjdXJyZW50IHx8IHAtPnN0YXRlID09IFRBU0tfUlVOTklORykKIAkJcmV0dXJuIDA7CiAKLQlzdGFja19zdGFydCA9ICh1bnNpZ25lZCBsb25nKWVuZF9vZl9zdGFjayhwKTsKLQlzdGFja19lbmQgPSAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UocCkgKyBUSFJFQURfU0laRTsKLQotCWZwID0gdGhyZWFkX3NhdmVkX2ZwKHApOworCWZyYW1lLmZwID0gdGhyZWFkX3NhdmVkX2ZwKHApOworCWZyYW1lLnNwID0gdGhyZWFkX3NhdmVkX3NwKHApOworCWZyYW1lLmxyID0gMDsJCQkvKiByZWNvdmVyZWQgZnJvbSB0aGUgc3RhY2sgKi8KKwlmcmFtZS5wYyA9IHRocmVhZF9zYXZlZF9wYyhwKTsKIAlkbyB7Ci0JCWlmIChmcCA8IHN0YWNrX3N0YXJ0IHx8IGZwID4gc3RhY2tfZW5kKQorCQlpbnQgcmV0ID0gdW53aW5kX2ZyYW1lKCZmcmFtZSk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIDA7Ci0JCWxyID0gKCh1bnNpZ25lZCBsb25nICopZnApWy0xXTsKLQkJaWYgKCFpbl9zY2hlZF9mdW5jdGlvbnMobHIpKQotCQkJcmV0dXJuIGxyOwotCQlmcCA9ICoodW5zaWduZWQgbG9uZyAqKSAoZnAgLSAxMik7CisJCWlmICghaW5fc2NoZWRfZnVuY3Rpb25zKGZyYW1lLnBjKSkKKwkJCXJldHVybiBmcmFtZS5wYzsKIAl9IHdoaWxlIChjb3VudCArKyA8IDE2KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCBkZjY1M2VhLi44OTg4MmExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC02NTMsNiArNjUzLDU0IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19WRlAKKy8qCisgKiBHZXQgdGhlIGNoaWxkIFZGUCBzdGF0ZS4KKyAqLworc3RhdGljIGludCBwdHJhY2VfZ2V0dmZwcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdm9pZCBfX3VzZXIgKmRhdGEpCit7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aHJlYWQgPSB0YXNrX3RocmVhZF9pbmZvKHRzayk7CisJdW5pb24gdmZwX3N0YXRlICp2ZnAgPSAmdGhyZWFkLT52ZnBzdGF0ZTsKKwlzdHJ1Y3QgdXNlcl92ZnAgX191c2VyICp1ZnAgPSBkYXRhOworCisJdmZwX3N5bmNfc3RhdGUodGhyZWFkKTsKKworCS8qIGNvcHkgdGhlIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLworCWlmIChjb3B5X3RvX3VzZXIoJnVmcC0+ZnByZWdzLCAmdmZwLT5oYXJkLmZwcmVncywKKwkJCSBzaXplb2YodmZwLT5oYXJkLmZwcmVncykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIGNvcHkgdGhlIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3RlciAqLworCWlmIChwdXRfdXNlcih2ZnAtPmhhcmQuZnBzY3IsICZ1ZnAtPmZwc2NyKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB0aGUgY2hpbGQgVkZQIHN0YXRlLgorICovCitzdGF0aWMgaW50IHB0cmFjZV9zZXR2ZnByZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB2b2lkIF9fdXNlciAqZGF0YSkKK3sKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCA9IHRhc2tfdGhyZWFkX2luZm8odHNrKTsKKwl1bmlvbiB2ZnBfc3RhdGUgKnZmcCA9ICZ0aHJlYWQtPnZmcHN0YXRlOworCXN0cnVjdCB1c2VyX3ZmcCBfX3VzZXIgKnVmcCA9IGRhdGE7CisKKwl2ZnBfc3luY19zdGF0ZSh0aHJlYWQpOworCisJLyogY29weSB0aGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ZnAtPmhhcmQuZnByZWdzLCAmdWZwLT5mcHJlZ3MsCisJCQkgICBzaXplb2YodmZwLT5oYXJkLmZwcmVncykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIGNvcHkgdGhlIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3RlciAqLworCWlmIChnZXRfdXNlcih2ZnAtPmhhcmQuZnBzY3IsICZ1ZnAtPmZwc2NyKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBsb25nIGFyY2hfcHRyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwgbG9uZyBhZGRyLCBsb25nIGRhdGEpCiB7CiAJaW50IHJldDsKQEAgLTc3NSw2ICs4MjMsMTYgQEAKIAkJCWJyZWFrOwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfVkZQCisJCWNhc2UgUFRSQUNFX0dFVFZGUFJFR1M6CisJCQlyZXQgPSBwdHJhY2VfZ2V0dmZwcmVncyhjaGlsZCwgKHZvaWQgX191c2VyICopZGF0YSk7CisJCQlicmVhazsKKworCQljYXNlIFBUUkFDRV9TRVRWRlBSRUdTOgorCQkJcmV0ID0gcHRyYWNlX3NldHZmcHJlZ3MoY2hpbGQsICh2b2lkIF9fdXNlciAqKWRhdGEpOworCQkJYnJlYWs7CisjZW5kaWYKKwogCQlkZWZhdWx0OgogCQkJcmV0ID0gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCmluZGV4IDY4ZDY0OTQuLmJjNWU0MTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2luY2x1ZGUgImNvbXBhdC5oIgogI2luY2x1ZGUgImF0YWdzLmgiCkBAIC02ODUsNiArNjg2LDggQEAKIAlzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYzsKIAljaGFyICpmcm9tID0gZGVmYXVsdF9jb21tYW5kX2xpbmU7CiAKKwl1bndpbmRfaW5pdCgpOworCiAJc2V0dXBfcHJvY2Vzc29yKCk7CiAJbWRlc2MgPSBzZXR1cF9tYWNoaW5lKG1hY2hpbmVfYXJjaF90eXBlKTsKIAltYWNoaW5lX25hbWUgPSBtZGVzYy0+bmFtZTsKQEAgLTc4MCw2ICs3ODMsOCBAQAogCSJjcnVuY2giLAogCSJ0aHVtYmVlIiwKIAkibmVvbiIsCisJInZmcHYzIiwKKwkidmZwdjNkMTYiLAogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYyBiL2FyY2gvYXJtL2tlcm5lbC9zbXAuYwppbmRleCA1NWZhN2ZmLi43ODAxYWFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCkBAIC05Myw2ICs5Myw3IEBACiAJcG1kID0gcG1kX29mZnNldChwZ2QgKyBwZ2RfaW5kZXgoUEhZU19PRkZTRVQpLCBQSFlTX09GRlNFVCk7CiAJKnBtZCA9IF9fcG1kKChQSFlTX09GRlNFVCAmIFBHRElSX01BU0spIHwKIAkJICAgICBQTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQVBfV1JJVEUpOworCWZsdXNoX3BtZF9lbnRyeShwbWQpOwogCiAJLyoKIAkgKiBXZSBuZWVkIHRvIHRlbGwgdGhlIHNlY29uZGFyeSBjb3JlIHdoZXJlIHRvIGZpbmQKQEAgLTEzMCw2ICsxMzEsNyBAQAogCXNlY29uZGFyeV9kYXRhLnBnZGlyID0gMDsKIAogCSpwbWQgPSBfX3BtZCgwKTsKKwljbGVhbl9wbWRfZW50cnkocG1kKTsKIAlwZ2RfZnJlZSgmaW5pdF9tbSwgcGdkKTsKIAogCWlmIChyZXQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvc3RhY2t0cmFjZS5jCmluZGV4IGZjNjUwZjYuLjlmNDQ0ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zdGFja3RyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3N0YWNrdHJhY2UuYwpAQCAtMiwzNCArMiw1OSBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgogCi0jaW5jbHVkZSAic3RhY2t0cmFjZS5oIgorI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKLWludCB3YWxrX3N0YWNrZnJhbWUodW5zaWduZWQgbG9uZyBmcCwgdW5zaWduZWQgbG9uZyBsb3csIHVuc2lnbmVkIGxvbmcgaGlnaCwKLQkJICAgIGludCAoKmZuKShzdHJ1Y3Qgc3RhY2tmcmFtZSAqLCB2b2lkICopLCB2b2lkICpkYXRhKQorI2lmIGRlZmluZWQoQ09ORklHX0ZSQU1FX1BPSU5URVIpICYmICFkZWZpbmVkKENPTkZJR19BUk1fVU5XSU5EKQorLyoKKyAqIFVud2luZCB0aGUgY3VycmVudCBzdGFjayBmcmFtZSBhbmQgc3RvcmUgdGhlIG5ldyByZWdpc3RlciB2YWx1ZXMgaW4gdGhlCisgKiBzdHJ1Y3R1cmUgcGFzc2VkIGFzIGFyZ3VtZW50LiBVbndpbmRpbmcgaXMgZXF1aXZhbGVudCB0byBhIGZ1bmN0aW9uIHJldHVybiwKKyAqIGhlbmNlIHRoZSBuZXcgUEMgdmFsdWUgcmF0aGVyIHRoYW4gTFIgc2hvdWxkIGJlIHVzZWQgZm9yIGJhY2t0cmFjZS4KKyAqCisgKiBXaXRoIGZyYW1lcG9pbnRlciBlbmFibGVkLCBhIHNpbXBsZSBmdW5jdGlvbiBwcm9sb2d1ZSBsb29rcyBsaWtlIHRoaXM6CisgKgltb3YJaXAsIHNwCisgKglzdG1kYglzcCEsIHtmcCwgaXAsIGxyLCBwY30KKyAqCXN1YglmcCwgaXAsICM0CisgKgorICogQSBzaW1wbGUgZnVuY3Rpb24gZXBpbG9ndWUgbG9va3MgbGlrZSB0aGlzOgorICoJbGRtCXNwLCB7ZnAsIHNwLCBwY30KKyAqCisgKiBOb3RlIHRoYXQgd2l0aCBmcmFtZXBvaW50ZXIgZW5hYmxlZCwgZXZlbiB0aGUgbGVhZiBmdW5jdGlvbnMgaGF2ZSB0aGUgc2FtZQorICogcHJvbG9ndWUgYW5kIGVwaWxvZ3VlLCB0aGVyZWZvcmUgd2UgY2FuIGlnbm9yZSB0aGUgTFIgdmFsdWUgaW4gdGhpcyBjYXNlLgorICovCitpbnQgdW53aW5kX2ZyYW1lKHN0cnVjdCBzdGFja2ZyYW1lICpmcmFtZSkKIHsKLQlzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWU7CisJdW5zaWduZWQgbG9uZyBoaWdoLCBsb3c7CisJdW5zaWduZWQgbG9uZyBmcCA9IGZyYW1lLT5mcDsKIAotCWRvIHsKLQkJLyoKLQkJICogQ2hlY2sgY3VycmVudCBmcmFtZSBwb2ludGVyIGlzIHdpdGhpbiBib3VuZHMKLQkJICovCi0JCWlmIChmcCA8IChsb3cgKyAxMikgfHwgZnAgKyA0ID49IGhpZ2gpCi0JCQlicmVhazsKKwkvKiBvbmx5IGdvIHRvIGEgaGlnaGVyIGFkZHJlc3Mgb24gdGhlIHN0YWNrICovCisJbG93ID0gZnJhbWUtPnNwOworCWhpZ2ggPSBBTElHTihsb3csIFRIUkVBRF9TSVpFKSArIFRIUkVBRF9TSVpFOwogCi0JCWZyYW1lID0gKHN0cnVjdCBzdGFja2ZyYW1lICopKGZwIC0gMTIpOworCS8qIGNoZWNrIGN1cnJlbnQgZnJhbWUgcG9pbnRlciBpcyB3aXRoaW4gYm91bmRzICovCisJaWYgKGZwIDwgKGxvdyArIDEyKSB8fCBmcCArIDQgPj0gaGlnaCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiByZXN0b3JlIHRoZSByZWdpc3RlcnMgZnJvbSB0aGUgc3RhY2sgZnJhbWUgKi8KKwlmcmFtZS0+ZnAgPSAqKHVuc2lnbmVkIGxvbmcgKikoZnAgLSAxMik7CisJZnJhbWUtPnNwID0gKih1bnNpZ25lZCBsb25nICopKGZwIC0gOCk7CisJZnJhbWUtPnBjID0gKih1bnNpZ25lZCBsb25nICopKGZwIC0gNCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCit2b2lkIHdhbGtfc3RhY2tmcmFtZShzdHJ1Y3Qgc3RhY2tmcmFtZSAqZnJhbWUsCisJCSAgICAgaW50ICgqZm4pKHN0cnVjdCBzdGFja2ZyYW1lICosIHZvaWQgKiksIHZvaWQgKmRhdGEpCit7CisJd2hpbGUgKDEpIHsKKwkJaW50IHJldDsKIAogCQlpZiAoZm4oZnJhbWUsIGRhdGEpKQogCQkJYnJlYWs7Ci0KLQkJLyoKLQkJICogVXBkYXRlIHRoZSBsb3cgYm91bmQgLSB0aGUgbmV4dCBmcmFtZSBtdXN0IGFsd2F5cwotCQkgKiBiZSBhdCBhIGhpZ2hlciBhZGRyZXNzIHRoYW4gdGhlIGN1cnJlbnQgZnJhbWUuCi0JCSAqLwotCQlsb3cgPSBmcCArIDQ7Ci0JCWZwID0gZnJhbWUtPmZwOwotCX0gd2hpbGUgKGZwKTsKLQotCXJldHVybiAwOworCQlyZXQgPSB1bndpbmRfZnJhbWUoZnJhbWUpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCX0KIH0KIEVYUE9SVF9TWU1CT0wod2Fsa19zdGFja2ZyYW1lKTsKIApAQCAtNDQsNyArNjksNyBAQAogewogCXN0cnVjdCBzdGFja190cmFjZV9kYXRhICpkYXRhID0gZDsKIAlzdHJ1Y3Qgc3RhY2tfdHJhY2UgKnRyYWNlID0gZGF0YS0+dHJhY2U7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gZnJhbWUtPmxyOworCXVuc2lnbmVkIGxvbmcgYWRkciA9IGZyYW1lLT5wYzsKIAogCWlmIChkYXRhLT5ub19zY2hlZF9mdW5jdGlvbnMgJiYgaW5fc2NoZWRfZnVuY3Rpb25zKGFkZHIpKQogCQlyZXR1cm4gMDsKQEAgLTYxLDExICs4NiwxMCBAQAogdm9pZCBzYXZlX3N0YWNrX3RyYWNlX3RzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHN0YWNrX3RyYWNlICp0cmFjZSkKIHsKIAlzdHJ1Y3Qgc3RhY2tfdHJhY2VfZGF0YSBkYXRhOwotCXVuc2lnbmVkIGxvbmcgZnAsIGJhc2U7CisJc3RydWN0IHN0YWNrZnJhbWUgZnJhbWU7CiAKIAlkYXRhLnRyYWNlID0gdHJhY2U7CiAJZGF0YS5za2lwID0gdHJhY2UtPnNraXA7Ci0JYmFzZSA9ICh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZSh0c2spOwogCiAJaWYgKHRzayAhPSBjdXJyZW50KSB7CiAjaWZkZWYgQ09ORklHX1NNUApAQCAtNzYsMTQgKzEwMCwyMiBAQAogCQlCVUcoKTsKICNlbHNlCiAJCWRhdGEubm9fc2NoZWRfZnVuY3Rpb25zID0gMTsKLQkJZnAgPSB0aHJlYWRfc2F2ZWRfZnAodHNrKTsKKwkJZnJhbWUuZnAgPSB0aHJlYWRfc2F2ZWRfZnAodHNrKTsKKwkJZnJhbWUuc3AgPSB0aHJlYWRfc2F2ZWRfc3AodHNrKTsKKwkJZnJhbWUubHIgPSAwOwkJLyogcmVjb3ZlcmVkIGZyb20gdGhlIHN0YWNrICovCisJCWZyYW1lLnBjID0gdGhyZWFkX3NhdmVkX3BjKHRzayk7CiAjZW5kaWYKIAl9IGVsc2UgeworCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGN1cnJlbnRfc3AgYXNtICgic3AiKTsKKwogCQlkYXRhLm5vX3NjaGVkX2Z1bmN0aW9ucyA9IDA7Ci0JCWFzbSgibW92ICUwLCBmcCIgOiAiPXIiIChmcCkpOworCQlmcmFtZS5mcCA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9mcmFtZV9hZGRyZXNzKDApOworCQlmcmFtZS5zcCA9IGN1cnJlbnRfc3A7CisJCWZyYW1lLmxyID0gKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOworCQlmcmFtZS5wYyA9ICh1bnNpZ25lZCBsb25nKXNhdmVfc3RhY2tfdHJhY2VfdHNrOwogCX0KIAotCXdhbGtfc3RhY2tmcmFtZShmcCwgYmFzZSwgYmFzZSArIFRIUkVBRF9TSVpFLCBzYXZlX3RyYWNlLCAmZGF0YSk7CisJd2Fsa19zdGFja2ZyYW1lKCZmcmFtZSwgc2F2ZV90cmFjZSwgJmRhdGEpOwogCWlmICh0cmFjZS0+bnJfZW50cmllcyA8IHRyYWNlLT5tYXhfZW50cmllcykKIAkJdHJhY2UtPmVudHJpZXNbdHJhY2UtPm5yX2VudHJpZXMrK10gPSBVTE9OR19NQVg7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc3RhY2t0cmFjZS5oIGIvYXJjaC9hcm0va2VybmVsL3N0YWNrdHJhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlmZDIwY2IuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0va2VybmVsL3N0YWNrdHJhY2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotc3RydWN0IHN0YWNrZnJhbWUgewotCXVuc2lnbmVkIGxvbmcgZnA7Ci0JdW5zaWduZWQgbG9uZyBzcDsKLQl1bnNpZ25lZCBsb25nIGxyOwotCXVuc2lnbmVkIGxvbmcgcGM7Ci19OwotCi1pbnQgd2Fsa19zdGFja2ZyYW1lKHVuc2lnbmVkIGxvbmcgZnAsIHVuc2lnbmVkIGxvbmcgbG93LCB1bnNpZ25lZCBsb25nIGhpZ2gsCi0JCSAgICBpbnQgKCpmbikoc3RydWN0IHN0YWNrZnJhbWUgKiwgdm9pZCAqKSwgdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwppbmRleCBjNjhiNDRhLi40Y2RjNGEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKIC8qCkBAIC01NSwxNCArNTYsMjIgQEAKICNpZmRlZiBDT05GSUdfU01QCiB1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBmcCwgcGMgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOworCXN0cnVjdCBzdGFja2ZyYW1lIGZyYW1lOwogCi0JaWYgKGluX2xvY2tfZnVuY3Rpb25zKHBjKSkgewotCQlmcCA9IHJlZ3MtPkFSTV9mcDsKLQkJcGMgPSAoKHVuc2lnbmVkIGxvbmcgKilmcClbLTFdOwotCX0KKwlpZiAoIWluX2xvY2tfZnVuY3Rpb25zKHJlZ3MtPkFSTV9wYykpCisJCXJldHVybiByZWdzLT5BUk1fcGM7CiAKLQlyZXR1cm4gcGM7CisJZnJhbWUuZnAgPSByZWdzLT5BUk1fZnA7CisJZnJhbWUuc3AgPSByZWdzLT5BUk1fc3A7CisJZnJhbWUubHIgPSByZWdzLT5BUk1fbHI7CisJZnJhbWUucGMgPSByZWdzLT5BUk1fcGM7CisJZG8geworCQlpbnQgcmV0ID0gdW53aW5kX2ZyYW1lKCZmcmFtZSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIDA7CisJfSB3aGlsZSAoaW5fbG9ja19mdW5jdGlvbnMoZnJhbWUucGMpKTsKKworCXJldHVybiBmcmFtZS5wYzsKIH0KIEVYUE9SVF9TWU1CT0wocHJvZmlsZV9wYyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggNzlhYmM0ZC4uNTdlYjBmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2luY2x1ZGUgInB0cmFjZS5oIgogI2luY2x1ZGUgInNpZ25hbC5oIgpAQCAtNjEsNiArNjIsNyBAQAogCQlkdW1wX21lbSgiRXhjZXB0aW9uIHN0YWNrIiwgZnJhbWUgKyA0LCBmcmFtZSArIDQgKyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKIH0KIAorI2lmbmRlZiBDT05GSUdfQVJNX1VOV0lORAogLyoKICAqIFN0YWNrIHBvaW50ZXJzIHNob3VsZCBhbHdheXMgYmUgd2l0aGluIHRoZSBrZXJuZWxzIHZpZXcgb2YKICAqIHBoeXNpY2FsIG1lbW9yeS4gIElmIGl0IGlzIG5vdCB0aGVyZSwgdGhlbiB3ZSBjYW4ndCBkdW1wCkBAIC03NCw2ICs3Niw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCiAvKgogICogRHVtcCBvdXQgdGhlIGNvbnRlbnRzIG9mIHNvbWUgbWVtb3J5IG5pY2VseS4uLgpAQCAtMTUwLDEzICsxNTMsMzMgQEAKIAlzZXRfZnMoZnMpOwogfQogCisjaWZkZWYgQ09ORklHX0FSTV9VTldJTkQKK3N0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX2JhY2t0cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJdW53aW5kX2JhY2t0cmFjZShyZWdzLCB0c2spOworfQorI2Vsc2UKIHN0YXRpYyB2b2lkIGR1bXBfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQl1bnNpZ25lZCBpbnQgZnA7CisJdW5zaWduZWQgaW50IGZwLCBtb2RlOwogCWludCBvayA9IDE7CiAKIAlwcmludGsoIkJhY2t0cmFjZTogIik7Ci0JZnAgPSByZWdzLT5BUk1fZnA7CisKKwlpZiAoIXRzaykKKwkJdHNrID0gY3VycmVudDsKKworCWlmIChyZWdzKSB7CisJCWZwID0gcmVncy0+QVJNX2ZwOworCQltb2RlID0gcHJvY2Vzc29yX21vZGUocmVncyk7CisJfSBlbHNlIGlmICh0c2sgIT0gY3VycmVudCkgeworCQlmcCA9IHRocmVhZF9zYXZlZF9mcCh0c2spOworCQltb2RlID0gMHgxMDsKKwl9IGVsc2UgeworCQlhc20oIm1vdiAlMCwgZnAiIDogIj1yIiAoZnApIDogOiAiY2MiKTsKKwkJbW9kZSA9IDB4MTA7CisJfQorCiAJaWYgKCFmcCkgewogCQlwcmludGsoIm5vIGZyYW1lIHBvaW50ZXIiKTsKIAkJb2sgPSAwOwpAQCAtMTY4LDI5ICsxOTEsMjAgQEAKIAlwcmludGsoIlxuIik7CiAKIAlpZiAob2spCi0JCWNfYmFja3RyYWNlKGZwLCBwcm9jZXNzb3JfbW9kZShyZWdzKSk7CisJCWNfYmFja3RyYWNlKGZwLCBtb2RlKTsKIH0KKyNlbmRpZgogCiB2b2lkIGR1bXBfc3RhY2sodm9pZCkKIHsKLQlfX2JhY2t0cmFjZSgpOworCWR1bXBfYmFja3RyYWNlKE5VTEwsIE5VTEwpOwogfQogCiBFWFBPUlRfU1lNQk9MKGR1bXBfc3RhY2spOwogCiB2b2lkIHNob3dfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgKnNwKQogewotCXVuc2lnbmVkIGxvbmcgZnA7Ci0KLQlpZiAoIXRzaykKLQkJdHNrID0gY3VycmVudDsKLQotCWlmICh0c2sgIT0gY3VycmVudCkKLQkJZnAgPSB0aHJlYWRfc2F2ZWRfZnAodHNrKTsKLQllbHNlCi0JCWFzbSgibW92ICUwLCBmcCIgOiAiPXIiIChmcCkgOiA6ICJjYyIpOwotCi0JY19iYWNrdHJhY2UoZnAsIDB4MTApOworCWR1bXBfYmFja3RyYWNlKE5VTEwsIHRzayk7CiAJYmFycmllcigpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMgYi9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlZGMyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwpAQCAtMCwwICsxLDQzNCBAQAorLyoKKyAqIGFyY2gvYXJtL2tlcm5lbC91bndpbmQuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKgorICoKKyAqIFN0YWNrIHVud2luZGluZyBzdXBwb3J0IGZvciBBUk0KKyAqCisgKiBBbiBBUk0gRUFCSSB2ZXJzaW9uIG9mIGdjYyBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGUgdW53aW5kCisgKiB0YWJsZXMuIEZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RydWN0dXJlIG9mIHRoZSB1bndpbmQgdGFibGVzLAorICogc2VlICJFeGNlcHRpb24gSGFuZGxpbmcgQUJJIGZvciB0aGUgQVJNIEFyY2hpdGVjdHVyZSIgYXQ6CisgKgorICogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLnN1YnNldC5zd2Rldi5hYmkvaW5kZXguaHRtbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgorI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KKworLyogRHVtbXkgZnVuY3Rpb25zIHRvIGF2b2lkIGxpbmtlciBjb21wbGFpbnRzICovCit2b2lkIF9fYWVhYmlfdW53aW5kX2NwcF9wcjAodm9pZCkKK3sKK307CitFWFBPUlRfU1lNQk9MKF9fYWVhYmlfdW53aW5kX2NwcF9wcjApOworCit2b2lkIF9fYWVhYmlfdW53aW5kX2NwcF9wcjEodm9pZCkKK3sKK307CitFWFBPUlRfU1lNQk9MKF9fYWVhYmlfdW53aW5kX2NwcF9wcjEpOworCit2b2lkIF9fYWVhYmlfdW53aW5kX2NwcF9wcjIodm9pZCkKK3sKK307CitFWFBPUlRfU1lNQk9MKF9fYWVhYmlfdW53aW5kX2NwcF9wcjIpOworCitzdHJ1Y3QgdW53aW5kX2N0cmxfYmxvY2sgeworCXVuc2lnbmVkIGxvbmcgdnJzWzE2XTsJCS8qIHZpcnR1YWwgcmVnaXN0ZXIgc2V0ICovCisJdW5zaWduZWQgbG9uZyAqaW5zbjsJCS8qIHBvaW50ZXIgdG8gdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb25zIHdvcmQgKi8KKwlpbnQgZW50cmllczsJCQkvKiBudW1iZXIgb2YgZW50cmllcyBsZWZ0IHRvIGludGVycHJldCAqLworCWludCBieXRlOwkJCS8qIGN1cnJlbnQgYnl0ZSBudW1iZXIgaW4gdGhlIGluc3RydWN0aW9ucyB3b3JkICovCit9OworCitlbnVtIHJlZ3MgeworCUZQID0gMTEsCisJU1AgPSAxMywKKwlMUiA9IDE0LAorCVBDID0gMTUKK307CisKK2V4dGVybiBzdHJ1Y3QgdW53aW5kX2lkeCBfX3N0YXJ0X3Vud2luZF9pZHhbXTsKK2V4dGVybiBzdHJ1Y3QgdW53aW5kX2lkeCBfX3N0b3BfdW53aW5kX2lkeFtdOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHVud2luZF9sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQodW53aW5kX3RhYmxlcyk7CisKKy8qIENvbnZlcnQgYSBwcmVsMzEgc3ltYm9sIHRvIGFuIGFic29sdXRlIGFkZHJlc3MgKi8KKyNkZWZpbmUgcHJlbDMxX3RvX2FkZHIocHRyKQkJCQlcCisoewkJCQkJCQlcCisJLyogc2lnbi1leHRlbmQgdG8gMzIgYml0cyAqLwkJCVwKKwlsb25nIG9mZnNldCA9ICgoKGxvbmcpKihwdHIpKSA8PCAxKSA+PiAxOwlcCisJKHVuc2lnbmVkIGxvbmcpKHB0cikgKyBvZmZzZXQ7CQkJXAorfSkKKworLyoKKyAqIEJpbmFyeSBzZWFyY2ggaW4gdGhlIHVud2luZCBpbmRleC4gVGhlIGVudHJpZXMgZW50cmllcyBhcmUKKyAqIGd1YXJhbnRlZWQgdG8gYmUgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBieSB0aGUgbGlua2VyLgorICovCitzdGF0aWMgc3RydWN0IHVud2luZF9pZHggKnNlYXJjaF9pbmRleCh1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJICAgICAgIHN0cnVjdCB1bndpbmRfaWR4ICpmaXJzdCwKKwkJCQkgICAgICAgc3RydWN0IHVud2luZF9pZHggKmxhc3QpCit7CisJcHJfZGVidWcoIiVzKCUwOGx4LCAlcCwgJXApXG4iLCBfX2Z1bmNfXywgYWRkciwgZmlyc3QsIGxhc3QpOworCisJaWYgKGFkZHIgPCBmaXJzdC0+YWRkcikgeworCQlwcl93YXJuaW5nKCJ1bndpbmQ6IFVua25vd24gc3ltYm9sIGFkZHJlc3MgJTA4bHhcbiIsIGFkZHIpOworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgaWYgKGFkZHIgPj0gbGFzdC0+YWRkcikKKwkJcmV0dXJuIGxhc3Q7CisKKwl3aGlsZSAoZmlyc3QgPCBsYXN0IC0gMSkgeworCQlzdHJ1Y3QgdW53aW5kX2lkeCAqbWlkID0gZmlyc3QgKyAoKGxhc3QgLSBmaXJzdCArIDEpID4+IDEpOworCisJCWlmIChhZGRyIDwgbWlkLT5hZGRyKQorCQkJbGFzdCA9IG1pZDsKKwkJZWxzZQorCQkJZmlyc3QgPSBtaWQ7CisJfQorCisJcmV0dXJuIGZpcnN0OworfQorCitzdGF0aWMgc3RydWN0IHVud2luZF9pZHggKnVud2luZF9maW5kX2lkeCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHVud2luZF9pZHggKmlkeCA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXByX2RlYnVnKCIlcyglMDhseClcbiIsIF9fZnVuY19fLCBhZGRyKTsKKworCWlmIChjb3JlX2tlcm5lbF90ZXh0KGFkZHIpKQorCQkvKiBtYWluIHVud2luZCB0YWJsZSAqLworCQlpZHggPSBzZWFyY2hfaW5kZXgoYWRkciwgX19zdGFydF91bndpbmRfaWR4LAorCQkJCSAgIF9fc3RvcF91bndpbmRfaWR4IC0gMSk7CisJZWxzZSB7CisJCS8qIG1vZHVsZSB1bndpbmQgdGFibGVzICovCisJCXN0cnVjdCB1bndpbmRfdGFibGUgKnRhYmxlOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ1bndpbmRfbG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRhYmxlLCAmdW53aW5kX3RhYmxlcywgbGlzdCkgeworCQkJaWYgKGFkZHIgPj0gdGFibGUtPmJlZ2luX2FkZHIgJiYKKwkJCSAgICBhZGRyIDwgdGFibGUtPmVuZF9hZGRyKSB7CisJCQkJaWR4ID0gc2VhcmNoX2luZGV4KGFkZHIsIHRhYmxlLT5zdGFydCwKKwkJCQkJCSAgIHRhYmxlLT5zdG9wIC0gMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdW53aW5kX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlwcl9kZWJ1ZygiJXM6IGlkeCA9ICVwXG4iLCBfX2Z1bmNfXywgaWR4KTsKKwlyZXR1cm4gaWR4OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bndpbmRfZ2V0X2J5dGUoc3RydWN0IHVud2luZF9jdHJsX2Jsb2NrICpjdHJsKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJaWYgKGN0cmwtPmVudHJpZXMgPD0gMCkgeworCQlwcl93YXJuaW5nKCJ1bndpbmQ6IENvcnJ1cHQgdW53aW5kIHRhYmxlXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0ID0gKCpjdHJsLT5pbnNuID4+IChjdHJsLT5ieXRlICogOCkpICYgMHhmZjsKKworCWlmIChjdHJsLT5ieXRlID09IDApIHsKKwkJY3RybC0+aW5zbisrOworCQljdHJsLT5lbnRyaWVzLS07CisJCWN0cmwtPmJ5dGUgPSAzOworCX0gZWxzZQorCQljdHJsLT5ieXRlLS07CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogRXhlY3V0ZSB0aGUgY3VycmVudCB1bndpbmQgaW5zdHJ1Y3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgdW53aW5kX2V4ZWNfaW5zbihzdHJ1Y3QgdW53aW5kX2N0cmxfYmxvY2sgKmN0cmwpCit7CisJdW5zaWduZWQgbG9uZyBpbnNuID0gdW53aW5kX2dldF9ieXRlKGN0cmwpOworCisJcHJfZGVidWcoIiVzOiBpbnNuID0gJTA4bHhcbiIsIF9fZnVuY19fLCBpbnNuKTsKKworCWlmICgoaW5zbiAmIDB4YzApID09IDB4MDApCisJCWN0cmwtPnZyc1tTUF0gKz0gKChpbnNuICYgMHgzZikgPDwgMikgKyA0OworCWVsc2UgaWYgKChpbnNuICYgMHhjMCkgPT0gMHg0MCkKKwkJY3RybC0+dnJzW1NQXSAtPSAoKGluc24gJiAweDNmKSA8PCAyKSArIDQ7CisJZWxzZSBpZiAoKGluc24gJiAweGYwKSA9PSAweDgwKSB7CisJCXVuc2lnbmVkIGxvbmcgbWFzazsKKwkJdW5zaWduZWQgbG9uZyAqdnNwID0gKHVuc2lnbmVkIGxvbmcgKiljdHJsLT52cnNbU1BdOworCQlpbnQgbG9hZF9zcCwgcmVnID0gNDsKKworCQlpbnNuID0gKGluc24gPDwgOCkgfCB1bndpbmRfZ2V0X2J5dGUoY3RybCk7CisJCW1hc2sgPSBpbnNuICYgMHgwZmZmOworCQlpZiAobWFzayA9PSAwKSB7CisJCQlwcl93YXJuaW5nKCJ1bndpbmQ6ICdSZWZ1c2UgdG8gdW53aW5kJyBpbnN0cnVjdGlvbiAlMDRseFxuIiwKKwkJCQkgICBpbnNuKTsKKwkJCXJldHVybiAtVVJDX0ZBSUxVUkU7CisJCX0KKworCQkvKiBwb3AgUjQtUjE1IGFjY29yZGluZyB0byBtYXNrICovCisJCWxvYWRfc3AgPSBtYXNrICYgKDEgPDwgKDEzIC0gNCkpOworCQl3aGlsZSAobWFzaykgeworCQkJaWYgKG1hc2sgJiAxKQorCQkJCWN0cmwtPnZyc1tyZWddID0gKnZzcCsrOworCQkJbWFzayA+Pj0gMTsKKwkJCXJlZysrOworCQl9CisJCWlmICghbG9hZF9zcCkKKwkJCWN0cmwtPnZyc1tTUF0gPSAodW5zaWduZWQgbG9uZyl2c3A7CisJfSBlbHNlIGlmICgoaW5zbiAmIDB4ZjApID09IDB4OTAgJiYKKwkJICAgKGluc24gJiAweDBkKSAhPSAweDBkKQorCQljdHJsLT52cnNbU1BdID0gY3RybC0+dnJzW2luc24gJiAweDBmXTsKKwllbHNlIGlmICgoaW5zbiAmIDB4ZjApID09IDB4YTApIHsKKwkJdW5zaWduZWQgbG9uZyAqdnNwID0gKHVuc2lnbmVkIGxvbmcgKiljdHJsLT52cnNbU1BdOworCQlpbnQgcmVnOworCisJCS8qIHBvcCBSNC1SWzQrYmJiXSAqLworCQlmb3IgKHJlZyA9IDQ7IHJlZyA8PSA0ICsgKGluc24gJiA3KTsgcmVnKyspCisJCQljdHJsLT52cnNbcmVnXSA9ICp2c3ArKzsKKwkJaWYgKGluc24gJiAweDgwKQorCQkJY3RybC0+dnJzWzE0XSA9ICp2c3ArKzsKKwkJY3RybC0+dnJzW1NQXSA9ICh1bnNpZ25lZCBsb25nKXZzcDsKKwl9IGVsc2UgaWYgKGluc24gPT0gMHhiMCkgeworCQljdHJsLT52cnNbUENdID0gY3RybC0+dnJzW0xSXTsKKwkJLyogbm8gZnVydGhlciBwcm9jZXNzaW5nICovCisJCWN0cmwtPmVudHJpZXMgPSAwOworCX0gZWxzZSBpZiAoaW5zbiA9PSAweGIxKSB7CisJCXVuc2lnbmVkIGxvbmcgbWFzayA9IHVud2luZF9nZXRfYnl0ZShjdHJsKTsKKwkJdW5zaWduZWQgbG9uZyAqdnNwID0gKHVuc2lnbmVkIGxvbmcgKiljdHJsLT52cnNbU1BdOworCQlpbnQgcmVnID0gMDsKKworCQlpZiAobWFzayA9PSAwIHx8IG1hc2sgJiAweGYwKSB7CisJCQlwcl93YXJuaW5nKCJ1bndpbmQ6IFNwYXJlIGVuY29kaW5nICUwNGx4XG4iLAorCQkJICAgICAgIChpbnNuIDw8IDgpIHwgbWFzayk7CisJCQlyZXR1cm4gLVVSQ19GQUlMVVJFOworCQl9CisKKwkJLyogcG9wIFIwLVIzIGFjY29yZGluZyB0byBtYXNrICovCisJCXdoaWxlIChtYXNrKSB7CisJCQlpZiAobWFzayAmIDEpCisJCQkJY3RybC0+dnJzW3JlZ10gPSAqdnNwKys7CisJCQltYXNrID4+PSAxOworCQkJcmVnKys7CisJCX0KKwkJY3RybC0+dnJzW1NQXSA9ICh1bnNpZ25lZCBsb25nKXZzcDsKKwl9IGVsc2UgaWYgKGluc24gPT0gMHhiMikgeworCQl1bnNpZ25lZCBsb25nIHVsZWIxMjggPSB1bndpbmRfZ2V0X2J5dGUoY3RybCk7CisKKwkJY3RybC0+dnJzW1NQXSArPSAweDIwNCArICh1bGViMTI4IDw8IDIpOworCX0gZWxzZSB7CisJCXByX3dhcm5pbmcoInVud2luZDogVW5oYW5kbGVkIGluc3RydWN0aW9uICUwMmx4XG4iLCBpbnNuKTsKKwkJcmV0dXJuIC1VUkNfRkFJTFVSRTsKKwl9CisKKwlwcl9kZWJ1ZygiJXM6IGZwID0gJTA4bHggc3AgPSAlMDhseCBsciA9ICUwOGx4IHBjID0gJTA4bHhcbiIsIF9fZnVuY19fLAorCQkgY3RybC0+dnJzW0ZQXSwgY3RybC0+dnJzW1NQXSwgY3RybC0+dnJzW0xSXSwgY3RybC0+dnJzW1BDXSk7CisKKwlyZXR1cm4gVVJDX09LOworfQorCisvKgorICogVW53aW5kIGEgc2luZ2xlIGZyYW1lIHN0YXJ0aW5nIHdpdGggKnNwIGZvciB0aGUgc3ltYm9sIGF0ICpwYy4gSXQKKyAqIHVwZGF0ZXMgdGhlICpwYyBhbmQgKnNwIHdpdGggdGhlIG5ldyB2YWx1ZXMuCisgKi8KK2ludCB1bndpbmRfZnJhbWUoc3RydWN0IHN0YWNrZnJhbWUgKmZyYW1lKQoreworCXVuc2lnbmVkIGxvbmcgaGlnaCwgbG93OworCXN0cnVjdCB1bndpbmRfaWR4ICppZHg7CisJc3RydWN0IHVud2luZF9jdHJsX2Jsb2NrIGN0cmw7CisKKwkvKiBvbmx5IGdvIHRvIGEgaGlnaGVyIGFkZHJlc3Mgb24gdGhlIHN0YWNrICovCisJbG93ID0gZnJhbWUtPnNwOworCWhpZ2ggPSBBTElHTihsb3csIFRIUkVBRF9TSVpFKSArIFRIUkVBRF9TSVpFOworCisJcHJfZGVidWcoIiVzKHBjID0gJTA4bHggbHIgPSAlMDhseCBzcCA9ICUwOGx4KVxuIiwgX19mdW5jX18sCisJCSBmcmFtZS0+cGMsIGZyYW1lLT5sciwgZnJhbWUtPnNwKTsKKworCWlmICgha2VybmVsX3RleHRfYWRkcmVzcyhmcmFtZS0+cGMpKQorCQlyZXR1cm4gLVVSQ19GQUlMVVJFOworCisJaWR4ID0gdW53aW5kX2ZpbmRfaWR4KGZyYW1lLT5wYyk7CisJaWYgKCFpZHgpIHsKKwkJcHJfd2FybmluZygidW53aW5kOiBJbmRleCBub3QgZm91bmQgJTA4bHhcbiIsIGZyYW1lLT5wYyk7CisJCXJldHVybiAtVVJDX0ZBSUxVUkU7CisJfQorCisJY3RybC52cnNbRlBdID0gZnJhbWUtPmZwOworCWN0cmwudnJzW1NQXSA9IGZyYW1lLT5zcDsKKwljdHJsLnZyc1tMUl0gPSBmcmFtZS0+bHI7CisJY3RybC52cnNbUENdID0gMDsKKworCWlmIChpZHgtPmluc24gPT0gMSkKKwkJLyogY2FuJ3QgdW53aW5kICovCisJCXJldHVybiAtVVJDX0ZBSUxVUkU7CisJZWxzZSBpZiAoKGlkeC0+aW5zbiAmIDB4ODAwMDAwMDApID09IDApCisJCS8qIHByZWwzMSB0byB0aGUgdW53aW5kIHRhYmxlICovCisJCWN0cmwuaW5zbiA9ICh1bnNpZ25lZCBsb25nICopcHJlbDMxX3RvX2FkZHIoJmlkeC0+aW5zbik7CisJZWxzZSBpZiAoKGlkeC0+aW5zbiAmIDB4ZmYwMDAwMDApID09IDB4ODAwMDAwMDApCisJCS8qIG9ubHkgcGVyc29uYWxpdHkgcm91dGluZSAwIHN1cHBvcnRlZCBpbiB0aGUgaW5kZXggKi8KKwkJY3RybC5pbnNuID0gJmlkeC0+aW5zbjsKKwllbHNlIHsKKwkJcHJfd2FybmluZygidW53aW5kOiBVbnN1cHBvcnRlZCBwZXJzb25hbGl0eSByb3V0aW5lICUwOGx4IGluIHRoZSBpbmRleCBhdCAlcFxuIiwKKwkJCSAgIGlkeC0+aW5zbiwgaWR4KTsKKwkJcmV0dXJuIC1VUkNfRkFJTFVSRTsKKwl9CisKKwkvKiBjaGVjayB0aGUgcGVyc29uYWxpdHkgcm91dGluZSAqLworCWlmICgoKmN0cmwuaW5zbiAmIDB4ZmYwMDAwMDApID09IDB4ODAwMDAwMDApIHsKKwkJY3RybC5ieXRlID0gMjsKKwkJY3RybC5lbnRyaWVzID0gMTsKKwl9IGVsc2UgaWYgKCgqY3RybC5pbnNuICYgMHhmZjAwMDAwMCkgPT0gMHg4MTAwMDAwMCkgeworCQljdHJsLmJ5dGUgPSAxOworCQljdHJsLmVudHJpZXMgPSAxICsgKCgqY3RybC5pbnNuICYgMHgwMGZmMDAwMCkgPj4gMTYpOworCX0gZWxzZSB7CisJCXByX3dhcm5pbmcoInVud2luZDogVW5zdXBwb3J0ZWQgcGVyc29uYWxpdHkgcm91dGluZSAlMDhseCBhdCAlcFxuIiwKKwkJCSAgICpjdHJsLmluc24sIGN0cmwuaW5zbik7CisJCXJldHVybiAtVVJDX0ZBSUxVUkU7CisJfQorCisJd2hpbGUgKGN0cmwuZW50cmllcyA+IDApIHsKKwkJaW50IHVyYzsKKworCQlpZiAoY3RybC52cnNbU1BdIDwgbG93IHx8IGN0cmwudnJzW1NQXSA+PSBoaWdoKQorCQkJcmV0dXJuIC1VUkNfRkFJTFVSRTsKKwkJdXJjID0gdW53aW5kX2V4ZWNfaW5zbigmY3RybCk7CisJCWlmICh1cmMgPCAwKQorCQkJcmV0dXJuIHVyYzsKKwl9CisKKwlpZiAoY3RybC52cnNbUENdID09IDApCisJCWN0cmwudnJzW1BDXSA9IGN0cmwudnJzW0xSXTsKKworCWZyYW1lLT5mcCA9IGN0cmwudnJzW0ZQXTsKKwlmcmFtZS0+c3AgPSBjdHJsLnZyc1tTUF07CisJZnJhbWUtPmxyID0gY3RybC52cnNbTFJdOworCWZyYW1lLT5wYyA9IGN0cmwudnJzW1BDXTsKKworCXJldHVybiBVUkNfT0s7Cit9CisKK3ZvaWQgdW53aW5kX2JhY2t0cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc3RydWN0IHN0YWNrZnJhbWUgZnJhbWU7CisJdW5zaWduZWQgbG9uZyBoaWdoLCBsb3c7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBjdXJyZW50X3NwIGFzbSAoInNwIik7CisKKwlwcl9kZWJ1ZygiJXMocmVncyA9ICVwIHRzayA9ICVwKVxuIiwgX19mdW5jX18sIHJlZ3MsIHRzayk7CisKKwlpZiAoIXRzaykKKwkJdHNrID0gY3VycmVudDsKKworCWlmIChyZWdzKSB7CisJCWZyYW1lLmZwID0gcmVncy0+QVJNX2ZwOworCQlmcmFtZS5zcCA9IHJlZ3MtPkFSTV9zcDsKKwkJZnJhbWUubHIgPSByZWdzLT5BUk1fbHI7CisJCWZyYW1lLnBjID0gcmVncy0+QVJNX3BjOworCX0gZWxzZSBpZiAodHNrID09IGN1cnJlbnQpIHsKKwkJZnJhbWUuZnAgPSAodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcygwKTsKKwkJZnJhbWUuc3AgPSBjdXJyZW50X3NwOworCQlmcmFtZS5sciA9ICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKwkJZnJhbWUucGMgPSAodW5zaWduZWQgbG9uZyl1bndpbmRfYmFja3RyYWNlOworCX0gZWxzZSB7CisJCS8qIHRhc2sgYmxvY2tlZCBpbiBfX3N3aXRjaF90byAqLworCQlmcmFtZS5mcCA9IHRocmVhZF9zYXZlZF9mcCh0c2spOworCQlmcmFtZS5zcCA9IHRocmVhZF9zYXZlZF9zcCh0c2spOworCQkvKgorCQkgKiBUaGUgZnVuY3Rpb24gY2FsbGluZyBfX3N3aXRjaF90byBjYW5ub3QgYmUgYSBsZWFmIGZ1bmN0aW9uCisJCSAqIHNvIExSIGlzIHJlY292ZXJlZCBmcm9tIHRoZSBzdGFjay4KKwkJICovCisJCWZyYW1lLmxyID0gMDsKKwkJZnJhbWUucGMgPSB0aHJlYWRfc2F2ZWRfcGModHNrKTsKKwl9CisKKwlsb3cgPSBmcmFtZS5zcCAmIH4oVEhSRUFEX1NJWkUgLSAxKTsKKwloaWdoID0gbG93ICsgVEhSRUFEX1NJWkU7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgdXJjOworCQl1bnNpZ25lZCBsb25nIHdoZXJlID0gZnJhbWUucGM7CisKKwkJdXJjID0gdW53aW5kX2ZyYW1lKCZmcmFtZSk7CisJCWlmICh1cmMgPCAwKQorCQkJYnJlYWs7CisJCWR1bXBfYmFja3RyYWNlX2VudHJ5KHdoZXJlLCBmcmFtZS5wYywgZnJhbWUuc3AgLSA0KTsKKwl9Cit9CisKK3N0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF90YWJsZV9hZGQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdGV4dF9hZGRyLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdGV4dF9zaXplKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVud2luZF9pZHggKmlkeDsKKwlzdHJ1Y3QgdW53aW5kX3RhYmxlICp0YWIgPSBrbWFsbG9jKHNpemVvZigqdGFiKSwgR0ZQX0tFUk5FTCk7CisKKwlwcl9kZWJ1ZygiJXMoJTA4bHgsICUwOGx4LCAlMDhseCwgJTA4bHgpXG4iLCBfX2Z1bmNfXywgc3RhcnQsIHNpemUsCisJCSB0ZXh0X2FkZHIsIHRleHRfc2l6ZSk7CisKKwlpZiAoIXRhYikKKwkJcmV0dXJuIHRhYjsKKworCXRhYi0+c3RhcnQgPSAoc3RydWN0IHVud2luZF9pZHggKilzdGFydDsKKwl0YWItPnN0b3AgPSAoc3RydWN0IHVud2luZF9pZHggKikoc3RhcnQgKyBzaXplKTsKKwl0YWItPmJlZ2luX2FkZHIgPSB0ZXh0X2FkZHI7CisJdGFiLT5lbmRfYWRkciA9IHRleHRfYWRkciArIHRleHRfc2l6ZTsKKworCS8qIENvbnZlcnQgdGhlIHN5bWJvbCBhZGRyZXNzZXMgdG8gYWJzb2x1dGUgdmFsdWVzICovCisJZm9yIChpZHggPSB0YWItPnN0YXJ0OyBpZHggPCB0YWItPnN0b3A7IGlkeCsrKQorCQlpZHgtPmFkZHIgPSBwcmVsMzFfdG9fYWRkcigmaWR4LT5hZGRyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1bndpbmRfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJnRhYi0+bGlzdCwgJnVud2luZF90YWJsZXMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVud2luZF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdGFiOworfQorCit2b2lkIHVud2luZF90YWJsZV9kZWwoc3RydWN0IHVud2luZF90YWJsZSAqdGFiKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXRhYikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVud2luZF9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJnRhYi0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdW53aW5kX2xvY2ssIGZsYWdzKTsKKworCWtmcmVlKHRhYik7Cit9CisKK2ludCBfX2luaXQgdW53aW5kX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgdW53aW5kX2lkeCAqaWR4OworCisJLyogQ29udmVydCB0aGUgc3ltYm9sIGFkZHJlc3NlcyB0byBhYnNvbHV0ZSB2YWx1ZXMgKi8KKwlmb3IgKGlkeCA9IF9fc3RhcnRfdW53aW5kX2lkeDsgaWR4IDwgX19zdG9wX3Vud2luZF9pZHg7IGlkeCsrKQorCQlpZHgtPmFkZHIgPSBwcmVsMzFfdG9fYWRkcigmaWR4LT5hZGRyKTsKKworCXByX2RlYnVnKCJ1bndpbmQ6IEFSTSBzdGFjayB1bndpbmRpbmcgaW5pdGlhbGlzZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDAwMjE2MDcuLjVmNjY0NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC04MCw2ICs4MCw4IEBACiAJCUVYSVRfVEVYVAogCQlFWElUX0RBVEEKIAkJKiguZXhpdGNhbGwuZXhpdCkKKwkJKiguQVJNLmV4aWR4LmV4aXQudGV4dCkKKwkJKiguQVJNLmV4dGFiLmV4aXQudGV4dCkKICNpZm5kZWYgQ09ORklHX01NVQogCQkqKC5maXh1cCkKIAkJKihfX2V4X3RhYmxlKQpAQCAtMTEwLDYgKzExMiwyMyBAQAogCiAJX2V0ZXh0ID0gLjsJCQkvKiBFbmQgb2YgdGV4dCBhbmQgcm9kYXRhIHNlY3Rpb24gKi8KIAorI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECisJLyoKKwkgKiBTdGFjayB1bndpbmRpbmcgdGFibGVzCisJICovCisJLiA9IEFMSUdOKDgpOworCS5BUk0udW53aW5kX2lkeCA6IHsKKwkJX19zdGFydF91bndpbmRfaWR4ID0gLjsKKwkJKiguQVJNLmV4aWR4KikKKwkJX19zdG9wX3Vud2luZF9pZHggPSAuOworCX0KKwkuQVJNLnVud2luZF90YWIgOiB7CisJCV9fc3RhcnRfdW53aW5kX3RhYiA9IC47CisJCSooLkFSTS5leHRhYiopCisJCV9fc3RvcF91bndpbmRfdGFiID0gLjsKKwl9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCiAJX19kYXRhX2xvYyA9IEFMSUdOKDQpOwkJLyogbG9jYXRpb24gaW4gYmluYXJ5ICovCiAJLiA9IFBBR0VfT0ZGU0VUICsgVEVYVF9PRkZTRVQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWFhZWMyMDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDhmNDExNWQuLmZlMDhjYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtYWFlYzIwMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNiw3ICsxNiw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJY3B1X3Jlc2V0KDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNhbTlnMjBlay5jCmluZGV4IDgxNDM5ZmUuLjQzOGVmYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zYW05ZzIwZWsuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtc2FtOWcyMGVrLmMKQEAgLTIzOCw2ICsyMzgsMTAgQEAKIAlhdDkxX2FkZF9kZXZpY2VfaTJjKE5VTEwsIDApOwogCS8qIExFRHMgKi8KIAlhdDkxX2dwaW9fbGVkcyhla19sZWRzLCBBUlJBWV9TSVpFKGVrX2xlZHMpKTsKKwkvKiBQQ0swIHByb3ZpZGVzIE1DTEsgdG8gdGhlIFdNODczMSAqLworCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BDMSwgMCk7CisJLyogU1NDIChmb3IgV004NzMxKSAqLworCWF0OTFfYWRkX2RldmljZV9zc2MoQVQ5MVNBTTkyNjBfSURfU1NDLCBBVE1FTF9TU0NfVFgpOwogfQogCiBNQUNISU5FX1NUQVJUKEFUOTFTQU05RzIwRUssICJBdG1lbCBBVDkxU0FNOUcyMC1FSyIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dlbmVyaWMuaAppbmRleCA3YjljZTdhLi5iNWRhZjdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvZ2VuZXJpYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9nZW5lcmljLmgKQEAgLTQ3LDkgKzQ3LDYgQEAKICNkZWZpbmUgQVQ5MVJNOTIwMF9CR0EJCTQJLyogQVQ5MVJNOTIwMCBCR0EgcGFja2FnZSBoYXMgNCBiYW5rcyAqLwogCiBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgewotCXVuc2lnbmVkIGNoaXBiYXNlOwkJLyogYmFuaydzIGZpcnN0IEdQSU8gbnVtYmVyICovCi0Jdm9pZCBfX2lvbWVtICpyZWdiYXNlOwkJLyogYmFzZSBvZiByZWdpc3RlciBiYW5rICovCi0Jc3RydWN0IGF0OTFfZ3Bpb19iYW5rICpuZXh0OwkvKiBiYW5rIHNoYXJpbmcgc2FtZSBJUlEvY2xvY2svLi4uICovCiAJdW5zaWduZWQgc2hvcnQgaWQ7CQkvKiBwZXJpcGhlcmFsIElEICovCiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CQkvKiBvZmZzZXQgZnJvbSBzeXN0ZW0gcGVyaXBoZXJhbCBiYXNlICovCiAJc3RydWN0IGNsayAqY2xvY2s7CQkvKiBhc3NvY2lhdGVkIGNsb2NrICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwppbmRleCAyZjdkNDk3Li5mMjIzNmYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMKQEAgLTI0LDE5ICsyNCw1OSBAQAogI2luY2x1ZGUgPG1hY2gvYXQ5MV9waW8uaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKK3N0cnVjdCBhdDkxX2dwaW9fY2hpcCB7CisJc3RydWN0IGdwaW9fY2hpcAljaGlwOworCXN0cnVjdCBhdDkxX2dwaW9fY2hpcAkqbmV4dDsJCS8qIEJhbmsgc2hhcmluZyBzYW1lIGNsb2NrICovCisJc3RydWN0IGF0OTFfZ3Bpb19iYW5rCSpiYW5rOwkJLyogQmFuayBkZWZpbml0aW9uICovCisJdm9pZCBfX2lvbWVtCQkqcmVnYmFzZTsJLyogQmFzZSBvZiByZWdpc3RlciBiYW5rICovCit9OwogCi1zdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19iYW5rICpncGlvOworI2RlZmluZSB0b19hdDkxX2dwaW9fY2hpcChjKSBjb250YWluZXJfb2YoYywgc3RydWN0IGF0OTFfZ3Bpb19jaGlwLCBjaGlwKQorCitzdGF0aWMgdm9pZCBhdDkxX2dwaW9saWJfZGJnX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKTsKK3N0YXRpYyB2b2lkIGF0OTFfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOworc3RhdGljIGludCBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsKTsKK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQpOworc3RhdGljIGludCBhdDkxX2dwaW9saWJfcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpOworCisjZGVmaW5lIEFUOTFfR1BJT19DSElQKG5hbWUsIGJhc2VfZ3BpbywgbnJfZ3BpbykJCQlcCisJewkJCQkJCQkJXAorCQkuY2hpcCA9IHsJCQkJCQlcCisJCQkubGFiZWwJCSAgPSBuYW1lLAkJCVwKKwkJCS5yZXF1ZXN0CSAgPSBhdDkxX2dwaW9saWJfcmVxdWVzdCwJXAorCQkJLmRpcmVjdGlvbl9pbnB1dCAgPSBhdDkxX2dwaW9saWJfZGlyZWN0aW9uX2lucHV0LCBcCisJCQkuZGlyZWN0aW9uX291dHB1dCA9IGF0OTFfZ3Bpb2xpYl9kaXJlY3Rpb25fb3V0cHV0LCBcCisJCQkuZ2V0CQkgID0gYXQ5MV9ncGlvbGliX2dldCwJCVwKKwkJCS5zZXQJCSAgPSBhdDkxX2dwaW9saWJfc2V0LAkJXAorCQkJLmRiZ19zaG93CSAgPSBhdDkxX2dwaW9saWJfZGJnX3Nob3csCVwKKwkJCS5iYXNlCQkgID0gYmFzZV9ncGlvLAkJCVwKKwkJCS5uZ3BpbwkJICA9IG5yX2dwaW8sCQkJXAorCQl9LAkJCQkJCQlcCisJfQorCitzdGF0aWMgc3RydWN0IGF0OTFfZ3Bpb19jaGlwIGdwaW9fY2hpcFtdID0geworCUFUOTFfR1BJT19DSElQKCJBIiwgMHgwMCArIFBJTl9CQVNFLCAzMiksCisJQVQ5MV9HUElPX0NISVAoIkIiLCAweDIwICsgUElOX0JBU0UsIDMyKSwKKwlBVDkxX0dQSU9fQ0hJUCgiQyIsIDB4NDAgKyBQSU5fQkFTRSwgMzIpLAorCUFUOTFfR1BJT19DSElQKCJEIiwgMHg2MCArIFBJTl9CQVNFLCAzMiksCisJQVQ5MV9HUElPX0NISVAoIkUiLCAweDgwICsgUElOX0JBU0UsIDMyKSwKK307CisKIHN0YXRpYyBpbnQgZ3Bpb19iYW5rczsKIAotCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcGluX3RvX2NvbnRyb2xsZXIodW5zaWduZWQgcGluKQogewogCXBpbiAtPSBQSU5fQkFTRTsKIAlwaW4gLz0gMzI7CiAJaWYgKGxpa2VseShwaW4gPCBncGlvX2JhbmtzKSkKLQkJcmV0dXJuIGdwaW9bcGluXS5yZWdiYXNlOworCQlyZXR1cm4gZ3Bpb19jaGlwW3Bpbl0ucmVnYmFzZTsKIAogCXJldHVybiBOVUxMOwogfQpAQCAtMTk3LDM5ICsyMzcsNiBAQAogfQogRVhQT1JUX1NZTUJPTChhdDkxX3NldF9tdWx0aV9kcml2ZSk7CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBuZXctc3R5bGUgR1BJTyBjYWxsczsgdGhlc2UgZXhwZWN0IGF0OTFfc2V0X0dQSU9fcGVyaXBoIHRvIGhhdmUgYmVlbgotICogY2FsbGVkLCBhbmQgbWF5YmUgYXQ5MV9zZXRfbXVsdGlfZHJpdmUoKSBmb3IgcHV0b3V0IHBpbnMuCi0gKi8KLQotaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIHBpbikKLXsKLQl2b2lkIF9faW9tZW0JKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7Ci0JdW5zaWduZWQJbWFzayA9IHBpbl90b19tYXNrKHBpbik7Ci0KLQlpZiAoIXBpbyB8fCAhKF9fcmF3X3JlYWRsKHBpbyArIFBJT19QU1IpICYgbWFzaykpCi0JCXJldHVybiAtRUlOVkFMOwotCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fT0RSKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25faW5wdXQpOwotCi1pbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIHBpbiwgaW50IHZhbHVlKQotewotCXZvaWQgX19pb21lbQkqcGlvID0gcGluX3RvX2NvbnRyb2xsZXIocGluKTsKLQl1bnNpZ25lZAltYXNrID0gcGluX3RvX21hc2socGluKTsKLQotCWlmICghcGlvIHx8ICEoX19yYXdfcmVhZGwocGlvICsgUElPX1BTUikgJiBtYXNrKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIHBpbyArICh2YWx1ZSA/IFBJT19TT0RSIDogUElPX0NPRFIpKTsKLQlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX09FUik7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZGlyZWN0aW9uX291dHB1dCk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAvKgogICogYXNzdW1pbmcgdGhlIHBpbiBpcyBtdXhlZCBhcyBhIGdwaW8gb3V0cHV0LCBzZXQgaXRzIHZhbHVlLgogICovCkBAIC0yODIsNyArMjg5LDcgQEAKIAllbHNlCiAJCXdha2V1cHNbYmFua10gJj0gfm1hc2s7CiAKLQlzZXRfaXJxX3dha2UoZ3Bpb1tiYW5rXS5pZCwgc3RhdGUpOworCXNldF9pcnFfd2FrZShncGlvX2NoaXBbYmFua10uYmFuay0+aWQsIHN0YXRlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjkyLDE0ICsyOTksMTQgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspIHsKLQkJdm9pZCBfX2lvbWVtCSpwaW8gPSBncGlvW2ldLnJlZ2Jhc2U7CisJCXZvaWQgX19pb21lbQkqcGlvID0gZ3Bpb19jaGlwW2ldLnJlZ2Jhc2U7CiAKIAkJYmFja3Vwc1tpXSA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19JTVIpOwogCQlfX3Jhd193cml0ZWwoYmFja3Vwc1tpXSwgcGlvICsgUElPX0lEUik7CiAJCV9fcmF3X3dyaXRlbCh3YWtldXBzW2ldLCBwaW8gKyBQSU9fSUVSKTsKIAogCQlpZiAoIXdha2V1cHNbaV0pCi0JCQljbGtfZGlzYWJsZShncGlvW2ldLmNsb2NrKTsKKwkJCWNsa19kaXNhYmxlKGdwaW9fY2hpcFtpXS5iYW5rLT5jbG9jayk7CiAJCWVsc2UgewogI2lmZGVmIENPTkZJR19QTV9ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIkdQSU8tJWMgbWF5IHdha2UgZm9yICUwOHhcbiIsICdBJytpLCB3YWtldXBzW2ldKTsKQEAgLTMxMywxMCArMzIwLDEwIEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19iYW5rczsgaSsrKSB7Ci0JCXZvaWQgX19pb21lbQkqcGlvID0gZ3Bpb1tpXS5yZWdiYXNlOworCQl2b2lkIF9faW9tZW0JKnBpbyA9IGdwaW9fY2hpcFtpXS5yZWdiYXNlOwogCiAJCWlmICghd2FrZXVwc1tpXSkKLQkJCWNsa19lbmFibGUoZ3Bpb1tpXS5jbG9jayk7CisJCQljbGtfZW5hYmxlKGdwaW9fY2hpcFtpXS5iYW5rLT5jbG9jayk7CiAKIAkJX19yYXdfd3JpdGVsKHdha2V1cHNbaV0sIHBpbyArIFBJT19JRFIpOwogCQlfX3Jhd193cml0ZWwoYmFja3Vwc1tpXSwgcGlvICsgUElPX0lFUik7CkBAIC0zODAsMTIgKzM4NywxMiBAQAogewogCXVuc2lnbmVkCXBpbjsKIAlzdHJ1Y3QgaXJxX2Rlc2MJKmdwaW87Ci0Jc3RydWN0IGF0OTFfZ3Bpb19iYW5rICpiYW5rOworCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvOwogCXZvaWQgX19pb21lbQkqcGlvOwogCXUzMgkJaXNyOwogCi0JYmFuayA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JcGlvID0gYmFuay0+cmVnYmFzZTsKKwlhdDkxX2dwaW8gPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKIAogCS8qIHRlbXBvcmFyaWx5IG1hc2sgKGxldmVsIHNlbnNpdGl2ZSkgcGFyZW50IElSUSAqLwogCWRlc2MtPmNoaXAtPmFjayhpcnEpOwpAQCAtMzk2LDE0ICs0MDMsMTQgQEAKIAkJICovCiAJCWlzciA9IF9fcmF3X3JlYWRsKHBpbyArIFBJT19JU1IpICYgX19yYXdfcmVhZGwocGlvICsgUElPX0lNUik7CiAJCWlmICghaXNyKSB7Ci0JCQlpZiAoIWJhbmstPm5leHQpCisJCQlpZiAoIWF0OTFfZ3Bpby0+bmV4dCkKIAkJCQlicmVhazsKLQkJCWJhbmsgPSBiYW5rLT5uZXh0OwotCQkJcGlvID0gYmFuay0+cmVnYmFzZTsKKwkJCWF0OTFfZ3BpbyA9IGF0OTFfZ3Bpby0+bmV4dDsKKwkJCXBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcGluID0gYmFuay0+Y2hpcGJhc2U7CisJCXBpbiA9IGF0OTFfZ3Bpby0+Y2hpcC5iYXNlOwogCQlncGlvID0gJmlycV9kZXNjW3Bpbl07CiAKIAkJd2hpbGUgKGlzcikgewpAQCAtNTAyLDE3ICs1MDksMTcgQEAKIHZvaWQgX19pbml0IGF0OTFfZ3Bpb19pcnFfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZAkJcGlvYywgcGluOwotCXN0cnVjdCBhdDkxX2dwaW9fYmFuawkqdGhpcywgKnByZXY7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwCSp0aGlzLCAqcHJldjsKIAotCWZvciAocGlvYyA9IDAsIHBpbiA9IFBJTl9CQVNFLCB0aGlzID0gZ3BpbywgcHJldiA9IE5VTEw7CisJZm9yIChwaW9jID0gMCwgcGluID0gUElOX0JBU0UsIHRoaXMgPSBncGlvX2NoaXAsIHByZXYgPSBOVUxMOwogCQkJcGlvYysrIDwgZ3Bpb19iYW5rczsKIAkJCXByZXYgPSB0aGlzLCB0aGlzKyspIHsKLQkJdW5zaWduZWQJaWQgPSB0aGlzLT5pZDsKKwkJdW5zaWduZWQJaWQgPSB0aGlzLT5iYW5rLT5pZDsKIAkJdW5zaWduZWQJaTsKIAogCQlfX3Jhd193cml0ZWwofjAsIHRoaXMtPnJlZ2Jhc2UgKyBQSU9fSURSKTsKIAotCQlmb3IgKGkgPSAwLCBwaW4gPSB0aGlzLT5jaGlwYmFzZTsgaSA8IDMyOyBpKyssIHBpbisrKSB7CisJCWZvciAoaSA9IDAsIHBpbiA9IHRoaXMtPmNoaXAuYmFzZTsgaSA8IDMyOyBpKyssIHBpbisrKSB7CiAJCQlsb2NrZGVwX3NldF9jbGFzcygmaXJxX2Rlc2NbcGluXS5sb2NrLCAmZ3Bpb19sb2NrX2NsYXNzKTsKIAogCQkJLyoKQEAgLTUzNywzMiArNTQ0LDExNyBAQAogCXByX2luZm8oIkFUOTE6ICVkIGdwaW8gaXJxcyBpbiAlZCBiYW5rc1xuIiwgcGluIC0gUElOX0JBU0UsIGdwaW9fYmFua3MpOwogfQogCisvKiBncGlvbGliIHN1cHBvcnQgKi8KK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKKwl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7CisKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgUElPX09EUik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXQ5MV9ncGlvbGliX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IHRvX2F0OTFfZ3Bpb19jaGlwKGNoaXApOworCXZvaWQgX19pb21lbSAqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOworCXVuc2lnbmVkIG1hc2sgPSAxIDw8IG9mZnNldDsKKworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyAodmFsID8gUElPX1NPRFIgOiBQSU9fQ09EUikpOworCV9fcmF3X3dyaXRlbChtYXNrLCBwaW8gKyBQSU9fT0VSKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDkxX2dwaW9saWJfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbyA9IHRvX2F0OTFfZ3Bpb19jaGlwKGNoaXApOworCXZvaWQgX19pb21lbSAqcGlvID0gYXQ5MV9ncGlvLT5yZWdiYXNlOworCXVuc2lnbmVkIG1hc2sgPSAxIDw8IG9mZnNldDsKKwl1MzIgcGRzcjsKKworCXBkc3IgPSBfX3Jhd19yZWFkbChwaW8gKyBQSU9fUERTUik7CisJcmV0dXJuIChwZHNyICYgbWFzaykgIT0gMDsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9ncGlvbGliX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCit7CisJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8gPSB0b19hdDkxX2dwaW9fY2hpcChjaGlwKTsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IGF0OTFfZ3Bpby0+cmVnYmFzZTsKKwl1bnNpZ25lZCBtYXNrID0gMSA8PCBvZmZzZXQ7CisKKwlfX3Jhd193cml0ZWwobWFzaywgcGlvICsgKHZhbCA/IFBJT19TT0RSIDogUElPX0NPRFIpKTsKK30KKworc3RhdGljIGludCBhdDkxX2dwaW9saWJfcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJdW5zaWduZWQgcGluID0gY2hpcC0+YmFzZSArIG9mZnNldDsKKwl2b2lkIF9faW9tZW0gKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7CisJdW5zaWduZWQgbWFzayA9IHBpbl90b19tYXNrKHBpbik7CisKKwkvKiBDYW5ub3QgcmVxdWVzdCBHUElPcyB0aGF0IGFyZSBpbiBhbHRlcm5hdGUgZnVuY3Rpb24gbW9kZSAqLworCWlmICghKF9fcmF3X3JlYWRsKHBpbyArIFBJT19QU1IpICYgbWFzaykpCisJCXJldHVybiAtRVBFUk07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXQ5MV9ncGlvbGliX2RiZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5uZ3BpbzsgaSsrKSB7CisJCXVuc2lnbmVkIHBpbiA9IGNoaXAtPmJhc2UgKyBpOworCQl2b2lkIF9faW9tZW0gKnBpbyA9IHBpbl90b19jb250cm9sbGVyKHBpbik7CisJCXVuc2lnbmVkIG1hc2sgPSBwaW5fdG9fbWFzayhwaW4pOworCQljb25zdCBjaGFyICpncGlvX2xhYmVsOworCisJCWdwaW9fbGFiZWwgPSBncGlvY2hpcF9pc19yZXF1ZXN0ZWQoY2hpcCwgaSk7CisJCWlmIChncGlvX2xhYmVsKSB7CisJCQlzZXFfcHJpbnRmKHMsICJbJXNdIEdQSU8lcyVkOiAiLAorCQkJCSAgIGdwaW9fbGFiZWwsIGNoaXAtPmxhYmVsLCBpKTsKKwkJCWlmIChfX3Jhd19yZWFkbChwaW8gKyBQSU9fUFNSKSAmIG1hc2spCisJCQkJc2VxX3ByaW50ZihzLCAiW2dwaW9dICVzXG4iLAorCQkJCQkgICBhdDkxX2dldF9ncGlvX3ZhbHVlKHBpbikgPworCQkJCQkgICAic2V0IiA6ICJjbGVhciIpOworCQkJZWxzZQorCQkJCXNlcV9wcmludGYocywgIltwZXJpcGggJXNdXG4iLAorCQkJCQkgICBfX3Jhd19yZWFkbChwaW8gKyBQSU9fQUJTUikgJgorCQkJCQkgICBtYXNrID8gIkIiIDogIkEiKTsKKwkJfQorCX0KK30KKwogLyoKICAqIENhbGxlZCBmcm9tIHRoZSBwcm9jZXNzb3Itc3BlY2lmaWMgaW5pdCB0byBlbmFibGUgR1BJTyBwaW4gc3VwcG9ydC4KICAqLwogdm9pZCBfX2luaXQgYXQ5MV9ncGlvX2luaXQoc3RydWN0IGF0OTFfZ3Bpb19iYW5rICpkYXRhLCBpbnQgbnJfYmFua3MpCiB7CiAJdW5zaWduZWQJCWk7Ci0Jc3RydWN0IGF0OTFfZ3Bpb19iYW5rCSpsYXN0OworCXN0cnVjdCBhdDkxX2dwaW9fY2hpcCAqYXQ5MV9ncGlvLCAqbGFzdCA9IE5VTEw7CiAKIAlCVUdfT04obnJfYmFua3MgPiBNQVhfR1BJT19CQU5LUyk7CiAKLQlncGlvID0gZGF0YTsKIAlncGlvX2JhbmtzID0gbnJfYmFua3M7CiAKLQlmb3IgKGkgPSAwLCBsYXN0ID0gTlVMTDsgaSA8IG5yX2JhbmtzOyBpKyssIGxhc3QgPSBkYXRhLCBkYXRhKyspIHsKLQkJZGF0YS0+Y2hpcGJhc2UgPSBQSU5fQkFTRSArIGkgKiAzMjsKLQkJZGF0YS0+cmVnYmFzZSA9IGRhdGEtPm9mZnNldCArICh2b2lkIF9faW9tZW0gKilBVDkxX1ZBX0JBU0VfU1lTOworCWZvciAoaSA9IDA7IGkgPCBucl9iYW5rczsgaSsrKSB7CisJCWF0OTFfZ3BpbyA9ICZncGlvX2NoaXBbaV07CisKKwkJYXQ5MV9ncGlvLT5iYW5rID0gJmRhdGFbaV07CisJCWF0OTFfZ3Bpby0+Y2hpcC5iYXNlID0gUElOX0JBU0UgKyBpICogMzI7CisJCWF0OTFfZ3Bpby0+cmVnYmFzZSA9IGF0OTFfZ3Bpby0+YmFuay0+b2Zmc2V0ICsKKwkJCSh2b2lkIF9faW9tZW0gKilBVDkxX1ZBX0JBU0VfU1lTOwogCiAJCS8qIGVuYWJsZSBQSU8gY29udHJvbGxlcidzIGNsb2NrICovCi0JCWNsa19lbmFibGUoZGF0YS0+Y2xvY2spOworCQljbGtfZW5hYmxlKGF0OTFfZ3Bpby0+YmFuay0+Y2xvY2spOwogCi0JCS8qCi0JCSAqIFNvbWUgcHJvY2Vzc29ycyBzaGFyZSBwZXJpcGhlcmFsIElEIGJldHdlZW4gbXVsdGlwbGUgR1BJTyBiYW5rcy4KLQkJICogIFNBTTkyNjMgKFBJT0MsIFBJT0QsIFBJT0UpCi0JCSAqICBDQVA5IChQSU9BLCBQSU9CLCBQSU9DLCBQSU9EKQotCQkgKi8KLQkJaWYgKGxhc3QgJiYgbGFzdC0+aWQgPT0gZGF0YS0+aWQpCi0JCQlsYXN0LT5uZXh0ID0gZGF0YTsKKwkJLyogQVQ5MVNBTTkyNjNfSURfUElPQ0RFIGdyb3VwcyBQSU9DLCBQSU9ELCBQSU9FICovCisJCWlmIChsYXN0ICYmIGxhc3QtPmJhbmstPmlkID09IGF0OTFfZ3Bpby0+YmFuay0+aWQpCisJCQlsYXN0LT5uZXh0ID0gYXQ5MV9ncGlvOworCQlsYXN0ID0gYXQ5MV9ncGlvOworCisJCWdwaW9jaGlwX2FkZCgmYXQ5MV9ncGlvLT5jaGlwKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IGJmZmE2NzQuLjA0YzkxZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yMTMsMzIgKzIxMywxMiBAQAogICovCiAKICNpbmNsdWRlIDxhc20vZXJybm8uaD4KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JbWlnaHRfc2xlZXAoKTsKLX0KLQotZXh0ZXJuIGludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKLWV4dGVybiBpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIGF0OTFfZ2V0X2dwaW9fdmFsdWUoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JYXQ5MV9zZXRfZ3Bpb192YWx1ZShncGlvLCB2YWx1ZSk7Ci19Ci0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CQkvKiBjYW5zbGVlcCB3cmFwcGVycyAqLwogCisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlCV9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUJX19ncGlvX3NldF92YWx1ZQorI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAorCiBzdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQogewogCXJldHVybiBncGlvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZTcxMjY1OC4uNTI2OGFmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC00Myw3ICs0Myw3IEBACiAKIHZvaWQgKCphdDkxX2FyY2hfcmVzZXQpKHZvaWQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkvKiBjYWxsIHRoZSBDUFUtc3BlY2lmaWMgcmVzZXQgZnVuY3Rpb24gKi8KIAlpZiAoYXQ5MV9hcmNoX3Jlc2V0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1jbHBzNzExeC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAyNGU5NjE1Li5mOTE2Y2Q3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWNscHM3MTF4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMzIsNyArMzIsNyBAQAogCW1vdglyMCwgcjAiKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJY3B1X3Jlc2V0KDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMTdjYTQxZC4uYjdlNzAzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yMSw3ICsyMSw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWRhdmluY2lfd2F0Y2hkb2dfcmVzZXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWVic2ExMTAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDM1MGEwMjguLjlhMjYyNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZWJzYTExMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1lYnNhMTEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMzQsNiArMzQsNiBAQAogCWFzbSB2b2xhdGlsZSAoIm1jciBwMTUsIDAsIGlwLCBjMTUsIGMxLCAyIiA6IDogOiAiY2MiKTsKIH0KIAotI2RlZmluZSBhcmNoX3Jlc2V0KG1vZGUpCWNwdV9yZXNldCgweDgwMDAwMDAwKQorI2RlZmluZSBhcmNoX3Jlc2V0KG1vZGUsIGNtZCkJY3B1X3Jlc2V0KDB4ODAwMDAwMDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQppbmRleCA5NDRlNDJkLi45NTIyZTIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCi1vYmoteQkJCTo9IGNvcmUubyBjbG9jay5vIGdwaW8ubworb2JqLXkJCQk6PSBjb3JlLm8gY2xvY2subyBkbWEtbTJwLm8gZ3Bpby5vCiBvYmotbQkJCTo9CiBvYmotbgkJCTo9CiBvYmotCQkJOj0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9jbG9jay5jCmluZGV4IDk2MDQ5MjguLmU4ZWJlYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY2xvY2suYwpAQCAtNDEsNiArNDEsNTYgQEAKIAkuZW5hYmxlX21hc2sJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX1VTSF9FTiwKIH07CiAKKy8qIERNQSBDbG9ja3MgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAwID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDAwMjAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDEgPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwMDAxMDAwMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwMiA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDAwMDgwMDAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnAzID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDAwNDAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDQgPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwMDIwMDAwMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwNSA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDAwMTAwMDAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA2ID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDA4MDAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ycDcgPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwMDQwMDAwMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJwOCA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDAyMDAwMDAwLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tMnA5ID0geworCS5lbmFibGVfcmVnCT0gRVA5M1hYX1NZU0NPTl9DTE9DS19DT05UUk9MLAorCS5lbmFibGVfbWFzawk9IDB4MDEwMDAwMDAsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgY2xrX20ybTAgPSB7CisJLmVuYWJsZV9yZWcJPSBFUDkzWFhfU1lTQ09OX0NMT0NLX0NPTlRST0wsCisJLmVuYWJsZV9tYXNrCT0gMHgwNDAwMDAwMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBjbGtfbTJtMSA9IHsKKwkuZW5hYmxlX3JlZwk9IEVQOTNYWF9TWVNDT05fQ0xPQ0tfQ09OVFJPTCwKKwkuZW5hYmxlX21hc2sJPSAweDA4MDAwMDAwLAorfTsKKwogI2RlZmluZSBJTklUX0NLKGRldixjb24sY2spCQkJCQlcCiAJeyAuZGV2X2lkID0gZGV2LCAuY29uX2lkID0gY29uLCAuY2xrID0gY2sgfQogCkBAIC01NCw2ICsxMDQsMTggQEAKIAlJTklUX0NLKE5VTEwsICJwY2xrIiwgJmNsa19wKSwKIAlJTklUX0NLKE5VTEwsICJwbGwyIiwgJmNsa19wbGwyKSwKIAlJTklUX0NLKE5VTEwsICJ1c2JfaG9zdCIsICZjbGtfdXNiX2hvc3QpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDAiLCAmY2xrX20ycDApLAorCUlOSVRfQ0soTlVMTCwgIm0ycDEiLCAmY2xrX20ycDEpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDIiLCAmY2xrX20ycDIpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDMiLCAmY2xrX20ycDMpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDQiLCAmY2xrX20ycDQpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDUiLCAmY2xrX20ycDUpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDYiLCAmY2xrX20ycDYpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDciLCAmY2xrX20ycDcpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDgiLCAmY2xrX20ycDgpLAorCUlOSVRfQ0soTlVMTCwgIm0ycDkiLCAmY2xrX20ycDkpLAorCUlOSVRfQ0soTlVMTCwgIm0ybTAiLCAmY2xrX20ybTApLAorCUlOSVRfQ0soTlVMTCwgIm0ybTEiLCAmY2xrX20ybTEpLAogfTsKIAogCkBAIC0xMTAsNiArMTcyLDIyIEBACiAJcmV0dXJuICh1bnNpZ25lZCBsb25nKXJhdGU7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBlcDkzeHhfZG1hX2Nsb2NrX2luaXQodm9pZCkKK3sKKwljbGtfbTJwMC5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwMS5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwMi5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwMy5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwNC5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwNS5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwNi5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwNy5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwOC5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJwOS5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJtMC5yYXRlID0gY2xrX2gucmF0ZTsKKwljbGtfbTJtMS5yYXRlID0gY2xrX2gucmF0ZTsKK30KKwogc3RhdGljIGludCBfX2luaXQgZXA5M3h4X2Nsb2NrX2luaXQodm9pZCkKIHsKIAl1MzIgdmFsdWU7CkBAIC0xMjQsNiArMjAyLDcgQEAKIAljbGtfZi5yYXRlID0gY2xrX3BsbDEucmF0ZSAvIGZjbGtfZGl2aXNvcnNbKHZhbHVlID4+IDI1KSAmIDB4N107CiAJY2xrX2gucmF0ZSA9IGNsa19wbGwxLnJhdGUgLyBoY2xrX2Rpdmlzb3JzWyh2YWx1ZSA+PiAyMCkgJiAweDddOwogCWNsa19wLnJhdGUgPSBjbGtfaC5yYXRlIC8gcGNsa19kaXZpc29yc1sodmFsdWUgPj4gMTgpICYgMHgzXTsKKwllcDkzeHhfZG1hX2Nsb2NrX2luaXQoKTsKIAogCXZhbHVlID0gX19yYXdfcmVhZGwoRVA5M1hYX1NZU0NPTl9DTE9DS19TRVQyKTsKIAlpZiAoISh2YWx1ZSAmIDB4MDAwODAwMDApKSB7CQkJLyogUExMMiBieXBhc3NlZD8gICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEtbTJwLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9kbWEtbTJwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJkZjViYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS1tMnAuYwpAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtZXA5M3h4L2RtYS1tMnAuYworICogTTJQIERNQSBoYW5kbGluZyBmb3IgQ2lycnVzIEVQOTN4eCBjaGlwcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGllZCBEYXRhIFN5c3RlbXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUnlhbiBNYWxsb24gPHJ5YW5AYmx1ZXdhdGVyc3lzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qCisgKiBPbiB0aGUgRVA5M3h4IGNoaXAgdGhlIGZvbGxvd2luZyBwZXJpcGhlcmFscyBteSBiZSBhbGxvY2F0ZWQgdG8gdGhlIDEwCisgKiBNZW1vcnkgdG8gSW50ZXJuYWwgUGVyaXBoZXJhbCAoTTJQKSBjaGFubmVscyAoNSB0cmFuc21pdCArIDUgcmVjZWl2ZSkuCisgKgorICoJSTJTCWNvbnRhaW5zIDMgVHggYW5kIDMgUnggRE1BIENoYW5uZWxzCisgKglBQUMJY29udGFpbnMgMyBUeCBhbmQgMyBSeCBETUEgQ2hhbm5lbHMKKyAqCVVBUlQxCWNvbnRhaW5zIDEgVHggYW5kIDEgUnggRE1BIENoYW5uZWxzCisgKglVQVJUMgljb250YWlucyAxIFR4IGFuZCAxIFJ4IERNQSBDaGFubmVscworICoJVUFSVDMJY29udGFpbnMgMSBUeCBhbmQgMSBSeCBETUEgQ2hhbm5lbHMKKyAqCUlyREEJY29udGFpbnMgMSBUeCBhbmQgMSBSeCBETUEgQ2hhbm5lbHMKKyAqCisgKiBTU1AgYW5kIElERSB1c2UgdGhlIE1lbW9yeSB0byBNZW1vcnkgKE0yTSkgY2hhbm5lbHMgYW5kIGFyZSBub3QgY292ZXJlZAorICogd2l0aCB0aGlzIGltcGxlbWVudGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIE0yUF9DT05UUk9MCQkJMHgwMAorI2RlZmluZSAgTTJQX0NPTlRST0xfU1RBTExfSVJRX0VOCSgxIDw8IDApCisjZGVmaW5lICBNMlBfQ09OVFJPTF9ORkJfSVJRX0VOCQkoMSA8PCAxKQorI2RlZmluZSAgTTJQX0NPTlRST0xfRVJST1JfSVJRX0VOCSgxIDw8IDMpCisjZGVmaW5lICBNMlBfQ09OVFJPTF9FTkFCTEUJCSgxIDw8IDQpCisjZGVmaW5lIE0yUF9JTlRFUlJVUFQJCQkweDA0CisjZGVmaW5lICBNMlBfSU5URVJSVVBUX1NUQUxMCQkoMSA8PCAwKQorI2RlZmluZSAgTTJQX0lOVEVSUlVQVF9ORkIJCSgxIDw8IDEpCisjZGVmaW5lICBNMlBfSU5URVJSVVBUX0VSUk9SCQkoMSA8PCAzKQorI2RlZmluZSBNMlBfUFBBTExPQwkJCTB4MDgKKyNkZWZpbmUgTTJQX1NUQVRVUwkJCTB4MGMKKyNkZWZpbmUgTTJQX1JFTUFJTgkJCTB4MTQKKyNkZWZpbmUgTTJQX01BWENOVDAJCQkweDIwCisjZGVmaW5lIE0yUF9CQVNFMAkJCTB4MjQKKyNkZWZpbmUgTTJQX01BWENOVDEJCQkweDMwCisjZGVmaW5lIE0yUF9CQVNFMQkJCTB4MzQKKworI2RlZmluZSBTVEFURV9JRExFCTAJLyogQ2hhbm5lbCBpcyBpbmFjdGl2ZS4gICovCisjZGVmaW5lIFNUQVRFX1NUQUxMCTEJLyogQ2hhbm5lbCBpcyBhY3RpdmUsIG5vIGJ1ZmZlcnMgcGVuZGluZy4gICovCisjZGVmaW5lIFNUQVRFX09OCTIJLyogQ2hhbm5lbCBpcyBhY3RpdmUsIG9uZSBidWZmZXIgcGVuZGluZy4gICovCisjZGVmaW5lIFNUQVRFX05FWFQJMwkvKiBDaGFubmVsIGlzIGFjdGl2ZSwgdHdvIGJ1ZmZlcnMgcGVuZGluZy4gICovCisKK3N0cnVjdCBtMnBfY2hhbm5lbCB7CisJY2hhcgkJCQkqbmFtZTsKKwl2b2lkIF9faW9tZW0JCQkqYmFzZTsKKwlpbnQJCQkJaXJxOworCisJc3RydWN0IGNsawkJCSpjbGs7CisJc3BpbmxvY2tfdAkJCWxvY2s7CisKKwl2b2lkCQkJCSpjbGllbnQ7CisJdW5zaWduZWQJCQluZXh0X3Nsb3Q6MTsKKwlzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIJKmJ1ZmZlcl94ZmVyOworCXN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlcgkqYnVmZmVyX25leHQ7CisJc3RydWN0IGxpc3RfaGVhZAkJYnVmZmVyc19wZW5kaW5nOworfTsKKworc3RhdGljIHN0cnVjdCBtMnBfY2hhbm5lbCBtMnBfcnhbXSA9IHsKKwl7Im0ycDEiLCBFUDkzWFhfRE1BX0JBU0UgKyAweDAwNDAsIElSUV9FUDkzWFhfRE1BTTJQMX0sCisJeyJtMnAzIiwgRVA5M1hYX0RNQV9CQVNFICsgMHgwMGMwLCBJUlFfRVA5M1hYX0RNQU0yUDN9LAorCXsibTJwNSIsIEVQOTNYWF9ETUFfQkFTRSArIDB4MDIwMCwgSVJRX0VQOTNYWF9ETUFNMlA1fSwKKwl7Im0ycDciLCBFUDkzWFhfRE1BX0JBU0UgKyAweDAyODAsIElSUV9FUDkzWFhfRE1BTTJQN30sCisJeyJtMnA5IiwgRVA5M1hYX0RNQV9CQVNFICsgMHgwMzAwLCBJUlFfRVA5M1hYX0RNQU0yUDl9LAorCXtOVUxMfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbTJwX2NoYW5uZWwgbTJwX3R4W10gPSB7CisJeyJtMnAwIiwgRVA5M1hYX0RNQV9CQVNFICsgMHgwMDAwLCBJUlFfRVA5M1hYX0RNQU0yUDB9LAorCXsibTJwMiIsIEVQOTNYWF9ETUFfQkFTRSArIDB4MDA4MCwgSVJRX0VQOTNYWF9ETUFNMlAyfSwKKwl7Im0ycDQiLCBFUDkzWFhfRE1BX0JBU0UgKyAweDAyNDAsIElSUV9FUDkzWFhfRE1BTTJQNH0sCisJeyJtMnA2IiwgRVA5M1hYX0RNQV9CQVNFICsgMHgwMmMwLCBJUlFfRVA5M1hYX0RNQU0yUDZ9LAorCXsibTJwOCIsIEVQOTNYWF9ETUFfQkFTRSArIDB4MDM0MCwgSVJRX0VQOTNYWF9ETUFNMlA4fSwKKwl7TlVMTH0sCit9OworCitzdGF0aWMgdm9pZCBmZWVkX2J1ZihzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoLCBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1ZikKK3sKKwlpZiAoY2gtPm5leHRfc2xvdCA9PSAwKSB7CisJCXdyaXRlbChidWYtPnNpemUsIGNoLT5iYXNlICsgTTJQX01BWENOVDApOworCQl3cml0ZWwoYnVmLT5idXNfYWRkciwgY2gtPmJhc2UgKyBNMlBfQkFTRTApOworCX0gZWxzZSB7CisJCXdyaXRlbChidWYtPnNpemUsIGNoLT5iYXNlICsgTTJQX01BWENOVDEpOworCQl3cml0ZWwoYnVmLT5idXNfYWRkciwgY2gtPmJhc2UgKyBNMlBfQkFTRTEpOworCX0KKwljaC0+bmV4dF9zbG90IF49IDE7Cit9CisKK3N0YXRpYyB2b2lkIGNob29zZV9idWZmZXJfeGZlcihzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoKQoreworCXN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciAqYnVmOworCisJY2gtPmJ1ZmZlcl94ZmVyID0gTlVMTDsKKwlpZiAoIWxpc3RfZW1wdHkoJmNoLT5idWZmZXJzX3BlbmRpbmcpKSB7CisJCWJ1ZiA9IGxpc3RfZW50cnkoY2gtPmJ1ZmZlcnNfcGVuZGluZy5uZXh0LAorCQkJCSBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIsIGxpc3QpOworCQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKKwkJZmVlZF9idWYoY2gsIGJ1Zik7CisJCWNoLT5idWZmZXJfeGZlciA9IGJ1ZjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNob29zZV9idWZmZXJfbmV4dChzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoKQoreworCXN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciAqYnVmOworCisJY2gtPmJ1ZmZlcl9uZXh0ID0gTlVMTDsKKwlpZiAoIWxpc3RfZW1wdHkoJmNoLT5idWZmZXJzX3BlbmRpbmcpKSB7CisJCWJ1ZiA9IGxpc3RfZW50cnkoY2gtPmJ1ZmZlcnNfcGVuZGluZy5uZXh0LAorCQkJCSBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIsIGxpc3QpOworCQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKKwkJZmVlZF9idWYoY2gsIGJ1Zik7CisJCWNoLT5idWZmZXJfbmV4dCA9IGJ1ZjsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtMnBfc2V0X2NvbnRyb2woc3RydWN0IG0ycF9jaGFubmVsICpjaCwgdTMyIHYpCit7CisJLyoKKwkgKiBUaGUgY29udHJvbCByZWdpc3RlciBtdXN0IGJlIHJlYWQgaW1tZWRpYXRlbHkgYWZ0ZXIgYmVpbmcgd3JpdHRlbiBzbworCSAqIHRoYXQgdGhlIGludGVybmFsIHN0YXRlIG1hY2hpbmUgaXMgY29ycmVjdGx5IHVwZGF0ZWQuIFNlZSB0aGUgZXA5M3h4CisJICogdXNlcnMnIGd1aWRlIGZvciBkZXRhaWxzLgorCSAqLworCXdyaXRlbCh2LCBjaC0+YmFzZSArIE0yUF9DT05UUk9MKTsKKwlyZWFkbChjaC0+YmFzZSArIE0yUF9DT05UUk9MKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbTJwX2NoYW5uZWxfc3RhdGUoc3RydWN0IG0ycF9jaGFubmVsICpjaCkKK3sKKwlyZXR1cm4gKHJlYWRsKGNoLT5iYXNlICsgTTJQX1NUQVRVUykgPj4gNCkgJiAweDM7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtMnBfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoID0gZGV2X2lkOworCXN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKmNsOworCXUzMiBpcnFfc3RhdHVzLCB2OworCWludCBlcnJvciA9IDA7CisKKwljbCA9IGNoLT5jbGllbnQ7CisKKwlzcGluX2xvY2soJmNoLT5sb2NrKTsKKwlpcnFfc3RhdHVzID0gcmVhZGwoY2gtPmJhc2UgKyBNMlBfSU5URVJSVVBUKTsKKworCWlmIChpcnFfc3RhdHVzICYgTTJQX0lOVEVSUlVQVF9FUlJPUikgeworCQl3cml0ZWwoTTJQX0lOVEVSUlVQVF9FUlJPUiwgY2gtPmJhc2UgKyBNMlBfSU5URVJSVVBUKTsKKwkJZXJyb3IgPSAxOworCX0KKworCWlmICgoaXJxX3N0YXR1cyAmIChNMlBfSU5URVJSVVBUX1NUQUxMIHwgTTJQX0lOVEVSUlVQVF9ORkIpKSA9PSAwKSB7CisJCXNwaW5fdW5sb2NrKCZjaC0+bG9jayk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlzd2l0Y2ggKG0ycF9jaGFubmVsX3N0YXRlKGNoKSkgeworCWNhc2UgU1RBVEVfSURMRToKKwkJcHJfY3JpdCgibTJwX2lycTogZG1hIGludGVycnVwdCB3aXRob3V0IGEgZG1hIGJ1ZmZlclxuIik7CisJCUJVRygpOworCQlicmVhazsKKworCWNhc2UgU1RBVEVfU1RBTEw6CisJCWNsLT5idWZmZXJfZmluaXNoZWQoY2wtPmNvb2tpZSwgY2gtPmJ1ZmZlcl94ZmVyLCAwLCBlcnJvcik7CisJCWlmIChjaC0+YnVmZmVyX25leHQgIT0gTlVMTCkgeworCQkJY2wtPmJ1ZmZlcl9maW5pc2hlZChjbC0+Y29va2llLCBjaC0+YnVmZmVyX25leHQsCisJCQkJCSAgICAwLCBlcnJvcik7CisJCX0KKwkJY2hvb3NlX2J1ZmZlcl94ZmVyKGNoKTsKKwkJY2hvb3NlX2J1ZmZlcl9uZXh0KGNoKTsKKwkJaWYgKGNoLT5idWZmZXJfeGZlciAhPSBOVUxMKQorCQkJY2wtPmJ1ZmZlcl9zdGFydGVkKGNsLT5jb29raWUsIGNoLT5idWZmZXJfeGZlcik7CisJCWJyZWFrOworCisJY2FzZSBTVEFURV9PTjoKKwkJY2wtPmJ1ZmZlcl9maW5pc2hlZChjbC0+Y29va2llLCBjaC0+YnVmZmVyX3hmZXIsIDAsIGVycm9yKTsKKwkJY2gtPmJ1ZmZlcl94ZmVyID0gY2gtPmJ1ZmZlcl9uZXh0OworCQljaG9vc2VfYnVmZmVyX25leHQoY2gpOworCQljbC0+YnVmZmVyX3N0YXJ0ZWQoY2wtPmNvb2tpZSwgY2gtPmJ1ZmZlcl94ZmVyKTsKKwkJYnJlYWs7CisKKwljYXNlIFNUQVRFX05FWFQ6CisJCXByX2NyaXQoIm0ycF9pcnE6IGRtYSBpbnRlcnJ1cHQgd2hpbGUgbmV4dFxuIik7CisJCUJVRygpOworCQlicmVhazsKKwl9CisKKwl2ID0gcmVhZGwoY2gtPmJhc2UgKyBNMlBfQ09OVFJPTCkgJiB+KE0yUF9DT05UUk9MX1NUQUxMX0lSUV9FTiB8CisJCQkJCSAgICAgIE0yUF9DT05UUk9MX05GQl9JUlFfRU4pOworCWlmIChjaC0+YnVmZmVyX3hmZXIgIT0gTlVMTCkKKwkJdiB8PSBNMlBfQ09OVFJPTF9TVEFMTF9JUlFfRU47CisJaWYgKGNoLT5idWZmZXJfbmV4dCAhPSBOVUxMKQorCQl2IHw9IE0yUF9DT05UUk9MX05GQl9JUlFfRU47CisJbTJwX3NldF9jb250cm9sKGNoLCB2KTsKKworCXNwaW5fdW5sb2NrKCZjaC0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IG0ycF9jaGFubmVsICpmaW5kX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICpjbCkKK3sKKwlzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoOworCWludCBpOworCisJaWYgKGNsLT5mbGFncyAmIEVQOTNYWF9ETUFfTTJQX1JYKQorCQljaCA9IG0ycF9yeDsKKwllbHNlCisJCWNoID0gbTJwX3R4OworCisJZm9yIChpID0gMDsgY2hbaV0uYmFzZTsgaSsrKSB7CisJCXN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKmNsaWVudDsKKworCQljbGllbnQgPSBjaFtpXS5jbGllbnQ7CisJCWlmIChjbGllbnQgIT0gTlVMTCkgeworCQkJaW50IHBvcnQ7CisKKwkJCXBvcnQgPSBjbC0+ZmxhZ3MgJiBFUDkzWFhfRE1BX00yUF9QT1JUX01BU0s7CisJCQlpZiAocG9ydCA9PSAoY2xpZW50LT5mbGFncyAmCisJCQkJICAgICBFUDkzWFhfRE1BX00yUF9QT1JUX01BU0spKSB7CisJCQkJcHJfd2FybmluZygiRE1BIGNoYW5uZWwgYWxyZWFkeSB1c2VkIGJ5ICVzXG4iLAorCQkJCQkgICBjbC0+bmFtZSA/IDogInVua25vd24gY2xpZW50Iik7CisJCQkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwkJCX0KKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGNoW2ldLmJhc2U7IGkrKykgeworCQlpZiAoY2hbaV0uY2xpZW50ID09IE5VTEwpCisJCQlyZXR1cm4gY2ggKyBpOworCX0KKworCXByX3dhcm5pbmcoIk5vIGZyZWUgRE1BIGNoYW5uZWwgZm9yICVzXG4iLAorCQkgICBjbC0+bmFtZSA/IDogInVua25vd24gY2xpZW50Iik7CisJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Cit9CisKK3N0YXRpYyB2b2lkIGNoYW5uZWxfZW5hYmxlKHN0cnVjdCBtMnBfY2hhbm5lbCAqY2gpCit7CisJc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqY2wgPSBjaC0+Y2xpZW50OworCXUzMiB2OworCisJY2xrX2VuYWJsZShjaC0+Y2xrKTsKKworCXYgPSBjbC0+ZmxhZ3MgJiBFUDkzWFhfRE1BX00yUF9QT1JUX01BU0s7CisJd3JpdGVsKHYsIGNoLT5iYXNlICsgTTJQX1BQQUxMT0MpOworCisJdiA9IGNsLT5mbGFncyAmIEVQOTNYWF9ETUFfTTJQX0VSUk9SX01BU0s7CisJdiB8PSBNMlBfQ09OVFJPTF9FTkFCTEUgfCBNMlBfQ09OVFJPTF9FUlJPUl9JUlFfRU47CisJbTJwX3NldF9jb250cm9sKGNoLCB2KTsKK30KKworc3RhdGljIHZvaWQgY2hhbm5lbF9kaXNhYmxlKHN0cnVjdCBtMnBfY2hhbm5lbCAqY2gpCit7CisJdTMyIHY7CisKKwl2ID0gcmVhZGwoY2gtPmJhc2UgKyBNMlBfQ09OVFJPTCk7CisJdiAmPSB+KE0yUF9DT05UUk9MX1NUQUxMX0lSUV9FTiB8IE0yUF9DT05UUk9MX05GQl9JUlFfRU4pOworCW0ycF9zZXRfY29udHJvbChjaCwgdik7CisKKwl3aGlsZSAobTJwX2NoYW5uZWxfc3RhdGUoY2gpID09IFNUQVRFX09OKQorCQljcHVfcmVsYXgoKTsKKworCW0ycF9zZXRfY29udHJvbChjaCwgMHgwKTsKKworCXdoaWxlIChtMnBfY2hhbm5lbF9zdGF0ZShjaCkgPT0gU1RBVEVfU1RBTEwpCisJCWNwdV9yZWxheCgpOworCisJY2xrX2Rpc2FibGUoY2gtPmNsayk7Cit9CisKK2ludCBlcDkzeHhfZG1hX20ycF9jbGllbnRfcmVnaXN0ZXIoc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqY2wpCit7CisJc3RydWN0IG0ycF9jaGFubmVsICpjaDsKKwlpbnQgZXJyOworCisJY2ggPSBmaW5kX2ZyZWVfY2hhbm5lbChjbCk7CisJaWYgKElTX0VSUihjaCkpCisJCXJldHVybiBQVFJfRVJSKGNoKTsKKworCWVyciA9IHJlcXVlc3RfaXJxKGNoLT5pcnEsIG0ycF9pcnEsIDAsIGNsLT5uYW1lID8gOiAiZG1hLW0ycCIsIGNoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJY2gtPmNsaWVudCA9IGNsOworCWNoLT5uZXh0X3Nsb3QgPSAwOworCWNoLT5idWZmZXJfeGZlciA9IE5VTEw7CisJY2gtPmJ1ZmZlcl9uZXh0ID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmY2gtPmJ1ZmZlcnNfcGVuZGluZyk7CisKKwljbC0+Y2hhbm5lbCA9IGNoOworCisJY2hhbm5lbF9lbmFibGUoY2gpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlcDkzeHhfZG1hX20ycF9jbGllbnRfcmVnaXN0ZXIpOworCit2b2lkIGVwOTN4eF9kbWFfbTJwX2NsaWVudF91bnJlZ2lzdGVyKHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKmNsKQoreworCXN0cnVjdCBtMnBfY2hhbm5lbCAqY2ggPSBjbC0+Y2hhbm5lbDsKKworCWNoYW5uZWxfZGlzYWJsZShjaCk7CisJZnJlZV9pcnEoY2gtPmlycSwgY2gpOworCWNoLT5jbGllbnQgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZXA5M3h4X2RtYV9tMnBfY2xpZW50X3VucmVnaXN0ZXIpOworCit2b2lkIGVwOTN4eF9kbWFfbTJwX3N1Ym1pdChzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICpjbCwKKwkJCSAgIHN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBtMnBfY2hhbm5lbCAqY2ggPSBjbC0+Y2hhbm5lbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoLT5sb2NrLCBmbGFncyk7CisJdiA9IHJlYWRsKGNoLT5iYXNlICsgTTJQX0NPTlRST0wpOworCWlmIChjaC0+YnVmZmVyX3hmZXIgPT0gTlVMTCkgeworCQljaC0+YnVmZmVyX3hmZXIgPSBidWY7CisJCWZlZWRfYnVmKGNoLCBidWYpOworCQljbC0+YnVmZmVyX3N0YXJ0ZWQoY2wtPmNvb2tpZSwgYnVmKTsKKworCQl2IHw9IE0yUF9DT05UUk9MX1NUQUxMX0lSUV9FTjsKKwkJbTJwX3NldF9jb250cm9sKGNoLCB2KTsKKworCX0gZWxzZSBpZiAoY2gtPmJ1ZmZlcl9uZXh0ID09IE5VTEwpIHsKKwkJY2gtPmJ1ZmZlcl9uZXh0ID0gYnVmOworCQlmZWVkX2J1ZihjaCwgYnVmKTsKKworCQl2IHw9IE0yUF9DT05UUk9MX05GQl9JUlFfRU47CisJCW0ycF9zZXRfY29udHJvbChjaCwgdik7CisJfSBlbHNlIHsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAmY2gtPmJ1ZmZlcnNfcGVuZGluZyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoLT5sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlcDkzeHhfZG1hX20ycF9zdWJtaXQpOworCit2b2lkIGVwOTN4eF9kbWFfbTJwX3N1Ym1pdF9yZWN1cnNpdmUoc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqY2wsCisJCQkJICAgICBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbTJwX2NoYW5uZWwgKmNoID0gY2wtPmNoYW5uZWw7CisKKwlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZjaC0+YnVmZmVyc19wZW5kaW5nKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGVwOTN4eF9kbWFfbTJwX3N1Ym1pdF9yZWN1cnNpdmUpOworCit2b2lkIGVwOTN4eF9kbWFfbTJwX2ZsdXNoKHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKmNsKQoreworCXN0cnVjdCBtMnBfY2hhbm5lbCAqY2ggPSBjbC0+Y2hhbm5lbDsKKworCWNoYW5uZWxfZGlzYWJsZShjaCk7CisJY2gtPm5leHRfc2xvdCA9IDA7CisJY2gtPmJ1ZmZlcl94ZmVyID0gTlVMTDsKKwljaC0+YnVmZmVyX25leHQgPSBOVUxMOworCUlOSVRfTElTVF9IRUFEKCZjaC0+YnVmZmVyc19wZW5kaW5nKTsKKwljaGFubmVsX2VuYWJsZShjaCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlcDkzeHhfZG1hX20ycF9mbHVzaCk7CisKK3N0YXRpYyBpbnQgaW5pdF9jaGFubmVsKHN0cnVjdCBtMnBfY2hhbm5lbCAqY2gpCit7CisJY2gtPmNsayA9IGNsa19nZXQoTlVMTCwgY2gtPm5hbWUpOworCWlmIChJU19FUlIoY2gtPmNsaykpCisJCXJldHVybiBQVFJfRVJSKGNoLT5jbGspOworCisJc3Bpbl9sb2NrX2luaXQoJmNoLT5sb2NrKTsKKwljaC0+Y2xpZW50ID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBlcDkzeHhfZG1hX20ycF9pbml0KHZvaWQpCit7CisJaW50IGk7CisJaW50IHJldDsKKworCWZvciAoaSA9IDA7IG0ycF9yeFtpXS5iYXNlOyBpKyspIHsKKwkJcmV0ID0gaW5pdF9jaGFubmVsKG0ycF9yeCArIGkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBtMnBfdHhbaV0uYmFzZTsgaSsrKSB7CisJCXJldCA9IGluaXRfY2hhbm5lbChtMnBfdHggKyBpKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcHJfaW5mbygiTTJQIERNQSBzdWJzeXN0ZW0gaW5pdGlhbGl6ZWRcbiIpOworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChlcDkzeHhfZG1hX20ycF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMDdhLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzA3YS5jCmluZGV4IDViNWMyMmIuLjYxNzExNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMDdhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMwN2EuYwpAQCAtNDgsMTIgKzQ4LDI0IEBACiAJLnBoeV9pZAkJPSAxLAogfTsKIAorc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGVkYjkzMDdhX2kyY19kYXRhW10gPSB7CisJeworCQkvKiBPbi1ib2FyZCBiYXR0ZXJ5IGJhY2tlZCBSVEMgKi8KKwkJSTJDX0JPQVJEX0lORk8oImlzbDEyMDgiLCAweDZmKSwKKwl9LAorCS8qCisJICogVGhlIEkyQyBzaWduYWxzIGFyZSBhbHNvIHJvdXRlZCB0byB0aGUgRXhwYW5zaW9uIENvbm5lY3RvciAoSjQpCisJICovCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTMwN2FfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CiAJZXA5M3h4X2luaXRfZGV2aWNlcygpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZWRiOTMwN2FfZmxhc2gpOwogCiAJZXA5M3h4X3JlZ2lzdGVyX2V0aCgmZWRiOTMwN2FfZXRoX2RhdGEsIDEpOworCisJZXA5M3h4X2luaXRfaTJjKGVkYjkzMDdhX2kyY19kYXRhLCBBUlJBWV9TSVpFKGVkYjkzMDdhX2kyY19kYXRhKSk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoRURCOTMwN0EsICJDaXJydXMgTG9naWMgRURCOTMwN0EgRXZhbHVhdGlvbiBCb2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2YmQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9kbWEuaApAQCAtMCwwICsxLDUyIEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKKyNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXUzMgkJCWJ1c19hZGRyOworCXUxNgkJCXNpemU7Cit9OworCitzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50IHsKKwljaGFyCQkJKm5hbWU7CisJdTgJCQlmbGFnczsKKwl2b2lkCQkJKmNvb2tpZTsKKwl2b2lkCQkJKCpidWZmZXJfc3RhcnRlZCkodm9pZCAqY29va2llLAorCQkJCQlzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1Zik7CisJdm9pZAkJCSgqYnVmZmVyX2ZpbmlzaGVkKSh2b2lkICpjb29raWUsCisJCQkJCXN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciAqYnVmLAorCQkJCQlpbnQgYnl0ZXMsIGludCBlcnJvcik7CisKKwkvKiBJbnRlcm5hbCB0byB0aGUgRE1BIGNvZGUuICAqLworCXZvaWQJCQkqY2hhbm5lbDsKK307CisKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9JMlMxCTB4MDAKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9JMlMyCTB4MDEKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9BQUMxCTB4MDIKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9BQUMyCTB4MDMKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9BQUMzCTB4MDQKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9JMlMzCTB4MDUKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9VQVJUMQkweDA2CisjZGVmaW5lIEVQOTNYWF9ETUFfTTJQX1BPUlRfVUFSVDIJMHgwNworI2RlZmluZSBFUDkzWFhfRE1BX00yUF9QT1JUX1VBUlQzCTB4MDgKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9JUkRBCTB4MDkKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUE9SVF9NQVNLCTB4MGYKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfVFgJCTB4MDAKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfUlgJCTB4MTAKKyNkZWZpbmUgRVA5M1hYX0RNQV9NMlBfQUJPUlRfT05fRVJST1IJMHgyMAorI2RlZmluZSBFUDkzWFhfRE1BX00yUF9JR05PUkVfRVJST1IJMHg0MAorI2RlZmluZSBFUDkzWFhfRE1BX00yUF9FUlJPUl9NQVNLCTB4NjAKKworaW50ICBlcDkzeHhfZG1hX20ycF9jbGllbnRfcmVnaXN0ZXIoc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqbTJwKTsKK3ZvaWQgZXA5M3h4X2RtYV9tMnBfY2xpZW50X3VucmVnaXN0ZXIoc3RydWN0IGVwOTN4eF9kbWFfbTJwX2NsaWVudCAqbTJwKTsKK3ZvaWQgZXA5M3h4X2RtYV9tMnBfc3VibWl0KHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKm0ycCwKKwkJCSAgIHN0cnVjdCBlcDkzeHhfZG1hX2J1ZmZlciAqYnVmKTsKK3ZvaWQgZXA5M3h4X2RtYV9tMnBfc3VibWl0X3JlY3Vyc2l2ZShzdHJ1Y3QgZXA5M3h4X2RtYV9tMnBfY2xpZW50ICptMnAsCisJCQkJICAgICBzdHJ1Y3QgZXA5M3h4X2RtYV9idWZmZXIgKmJ1Zik7Cit2b2lkIGVwOTN4eF9kbWFfbTJwX2ZsdXNoKHN0cnVjdCBlcDkzeHhfZG1hX20ycF9jbGllbnQgKm0ycCk7CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZXA5M3h4LXJlZ3MuaCBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCmluZGV4IDIyZDZjOWEuLmY2NmJlMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9lcDkzeHgtcmVncy5oCkBAIC01OCw3ICs1OCw4IEBACiAKIAogLyogQUhCIHBlcmlwaGVyYWxzICovCi0jZGVmaW5lIEVQOTNYWF9ETUFfQkFTRQkJCShFUDkzWFhfQUhCX1ZJUlRfQkFTRSArIDB4MDAwMDAwMDApCisjZGVmaW5lIEVQOTNYWF9ETUFfQkFTRQkJCSgodm9pZCBfX2lvbWVtICopCQlcCisJCQkJCSAoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDAwMDAwKSkKIAogI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfQkFTRQkJKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDAxMDAwMCkKICNkZWZpbmUgRVA5M1hYX0VUSEVSTkVUX1BIWVNfQkFTRQkoRVA5M1hYX0FIQl9QSFlTX0JBU0UgKyAweDAwMDEwMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDY3Nzg5ZDAuLmVkOGYzNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTksNyArOSw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJdTMyIGRldmljZWNmZzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RtYS5jCmluZGV4IDRmMzUwNjMuLmUyZTBkZjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZG1hLmMKQEAgLTIxLDE2ICsyMSwxNiBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWMyMTI4NS5oPgogCiAjaWYgMAotc3RhdGljIGludCBmYl9kbWFfcmVxdWVzdChkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgaW50IGZiX2RtYV9yZXF1ZXN0KHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgdm9pZCBmYl9kbWFfZW5hYmxlKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIGZiX2RtYV9lbmFibGUodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7CiB9CiAKLXN0YXRpYyB2b2lkIGZiX2RtYV9kaXNhYmxlKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIGZiX2RtYV9kaXNhYmxlKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewogfQogCkBAIC00Miw3ICs0Miw3IEBACiB9OwogI2VuZGlmCiAKLXZvaWQgX19pbml0IGFyY2hfZG1hX2luaXQoZG1hX3QgKmRtYSkKK3N0YXRpYyBpbnQgX19pbml0IGZiX2RtYV9pbml0KHZvaWQpCiB7CiAjaWYgMAogCWRtYVtfREMyMTI4NV9ETUEoMCldLmRfb3BzID0gJmZiX2RtYV9vcHM7CkBAIC01MCw2ICs1MCw4IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSVNBX0RNQQogCWlmIChmb290YnJpZGdlX2Nmbl9tb2RlKCkpCi0JCWlzYV9pbml0X2RtYShkbWEgKyBfSVNBX0RNQSgwKSk7CisJCWlzYV9pbml0X2RtYSgpOwogI2VuZGlmCisJcmV0dXJuIDA7CiB9Citjb3JlX2luaXRjYWxsKGZiX2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDJkYjdmMzYuLjBiMjkzMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTgsNyArMTgsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWlmIChtb2RlID09ICdzJykgewogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1Yjc1YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL0tjb25maWcKQEAgLTAsMCArMSwxOSBAQAoraWYgQVJDSF9HRU1JTkkKKworbWVudSAiQ29ydGluYSBTeXN0ZW1zIEdlbWluaSBJbXBsZW1lbnRhdGlvbnMiCisKK2NvbmZpZyBNQUNIX1JVVDEwMAorCWJvb2wgIlRlbHRvbmlrYSBSVVQxMDAiCisJc2VsZWN0IEdFTUlOSV9NRU1fU1dBUAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYQorCSAgVGVsdG9uaWthIDNHIFJvdXRlciBSVVQxMDAuCisKK2VuZG1lbnUKKworY29uZmlnIEdFTUlOSV9NRU1fU1dBUAorCWJvb2wgIkdlbWluaSBtZW1vcnkgaXMgc3dhcHBlZCIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIEdlbWluaSBtZW1vcnkgaXMgc3dhcHBlZCBieSBib290bG9hZGVyLgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTk1MDViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvTWFrZWZpbGUKQEAgLTAsMCArMSwxMCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBPYmplY3QgZmlsZSBsaXN0cy4KKworb2JqLXkJCQk6PSBpcnEubyBtbS5vIHRpbWUubyBkZXZpY2VzLm8gZ3Bpby5vCisKKyMgQm9hcmQtc3BlY2lmaWMgc3VwcG9ydAorb2JqLSQoQ09ORklHX01BQ0hfUlVUMTAwKQkrPSBib2FyZC1ydXQxeHgubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJhNTJjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsOSBAQAoraWZlcSAoJChDT05GSUdfR0VNSU5JX01FTV9TV0FQKSx5KQorICAgenJlbGFkZHIteQk6PSAweDAwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MDAwMDAxMDAKK2luaXRyZF9waHlzLXkJOj0gMHgwMDgwMDAwMAorZWxzZQorICAgenJlbGFkZHIteQk6PSAweDEwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MTAwMDAxMDAKK2luaXRyZF9waHlzLXkJOj0gMHgxMDgwMDAwMAorZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLXJ1dDF4eC5jIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvYm9hcmQtcnV0MXh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBkZTk2OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2JvYXJkLXJ1dDF4eC5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiAgU3VwcG9ydCBmb3IgVGVsdG9uaWthIFJVVDF4eAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBydXQxeHhfa2V5c1tdID0geworCXsKKwkJLmNvZGUJCT0gS0VZX1NFVFVQLAorCQkuZ3BpbwkJPSA2MCwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCQkuZGVzYwkJPSAiUmVzZXQgdG8gZGVmYXVsdHMiLAorCQkudHlwZQkJPSBFVl9LRVksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgcnV0MXh4X2tleXNfZGF0YSA9IHsKKwkuYnV0dG9ucwk9IHJ1dDF4eF9rZXlzLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUocnV0MXh4X2tleXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnV0MXh4X2tleXNfZGV2aWNlID0geworCS5uYW1lCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcnV0MXh4X2tleXNfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBydXQxMDBfbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJQb3dlciIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiaGVhcnRiZWF0IiwKKwkJLmdwaW8JCQk9IDE3LAorCX0sCisJeworCQkubmFtZQkJCT0gIkdTTSIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCisJCS5ncGlvCQkJPSA3LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgcnV0MTAwX2xlZHNfZGF0YSA9IHsKKwkubnVtX2xlZHMJPSBBUlJBWV9TSVpFKHJ1dDEwMF9sZWRzKSwKKwkubGVkcwkJPSBydXQxMDBfbGVkcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ1dDF4eF9sZWRzID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcnV0MTAwX2xlZHNfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgcnV0MXh4X3RpbWVyID0geworCS5pbml0CT0gZ2VtaW5pX3RpbWVyX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcnV0MXh4X2luaXQodm9pZCkKK3sKKwlnZW1pbmlfZ3Bpb19pbml0KCk7CisJcGxhdGZvcm1fcmVnaXN0ZXJfdWFydCgpOworCXBsYXRmb3JtX3JlZ2lzdGVyX3BmbGFzaChTWl84TSwgTlVMTCwgMCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydXQxeHhfbGVkcyk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydXQxeHhfa2V5c19kZXZpY2UpOworfQorCitNQUNISU5FX1NUQVJUKFJVVDEwMCwgIlRlbHRvbmlrYSBSVVQxMDAiKQorCS5waHlzX2lvCT0gMHg3ZmZmYzAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmZmZmMwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDEwMCwKKwkubWFwX2lvCQk9IGdlbWluaV9tYXBfaW8sCisJLmluaXRfaXJxCT0gZ2VtaW5pX2luaXRfaXJxLAorCS50aW1lcgkJPSAmcnV0MXh4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBydXQxeHhfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOTI4MzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9jb21tb24uaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29tbW9uIEdlbWluaSBhcmNoaXRlY3R1cmUgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fR0VNSU5JX0NPTU1PTl9IX18KKyNkZWZpbmUgX19HRU1JTklfQ09NTU9OX0hfXworCitzdHJ1Y3QgbXRkX3BhcnRpdGlvbjsKKworZXh0ZXJuIHZvaWQgZ2VtaW5pX21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIGdlbWluaV9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIGdlbWluaV90aW1lcl9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgZ2VtaW5pX2dwaW9faW5pdCh2b2lkKTsKKworLyogQ29tbW9uIHBsYXRmb3JtIGRldmljZXMgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucyAqLworZXh0ZXJuIGludCBwbGF0Zm9ybV9yZWdpc3Rlcl91YXJ0KHZvaWQpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9yZWdpc3Rlcl9wZmxhc2godW5zaWduZWQgaW50IHNpemUsCisJCQkJICAgIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cywKKwkJCQkgICAgdW5zaWduZWQgaW50IG5yX3BhcnRzKTsKKworI2VuZGlmIC8qIF9fR0VNSU5JX0NPTU1PTl9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjUyNTI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvZGV2aWNlcy5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb21tb24gZGV2aWNlcyBkZWZpbml0aW9uIGZvciBHZW1pbmkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ2xvYmFsX3JlZy5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhW10gPSB7CisJeworCQkubWVtYmFzZQk9ICh2b2lkICopSU9fQUREUkVTUyhHRU1JTklfVUFSVF9CQVNFKSwKKwkJLm1hcGJhc2UJPSBHRU1JTklfVUFSVF9CQVNFLAorCQkuaXJxCQk9IElSUV9VQVJULAorCQkudWFydGNsawk9IFVBUlRfQ0xLLAorCQkucmVnc2hpZnQJPSAyLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkudHlwZQkJPSBQT1JUXzE2NTUwQSwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9GSVhFRF9UWVBFLAorCX0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZXJpYWxfZGV2aWNlID0geworCS5uYW1lCT0gInNlcmlhbDgyNTAiLAorCS5pZAk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitpbnQgcGxhdGZvcm1fcmVnaXN0ZXJfdWFydCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNlcmlhbF9kZXZpY2UpOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IEdFTUlOSV9GTEFTSF9CQVNFLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGZsYXNoX3BsYXRmb3JtX2RhdGEgPSB7fTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGZsYXNoX2RldmljZSA9IHsKKwkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJPSAwLAorCS5kZXYgCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwZmxhc2hfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZSA9ICZmbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCitpbnQgcGxhdGZvcm1fcmVnaXN0ZXJfcGZsYXNoKHVuc2lnbmVkIGludCBzaXplLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMsCisJCQkgICAgIHVuc2lnbmVkIGludCBucl9wYXJ0cykKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoSU9fQUREUkVTUyhHRU1JTklfR0xPQkFMX0JBU0UpICsgR0xPQkFMX1NUQVRVUyk7CisKKwlpZiAoKHJlZyAmIEZMQVNIX1RZUEVfTUFTSykgIT0gRkxBU0hfVFlQRV9QQVJBTExFTCkKKwkJcmV0dXJuIC1FTlhJTzsKKworCWlmIChyZWcgJiBGTEFTSF9XSURUSF8xNkJJVCkKKwkJcGZsYXNoX3BsYXRmb3JtX2RhdGEud2lkdGggPSAyOworCWVsc2UKKwkJcGZsYXNoX3BsYXRmb3JtX2RhdGEud2lkdGggPSAxOworCisJLyogZW5hYmxlIHBhcmFsbGVsIGZsYXNoIHBpbnMgYW5kIGRpc2FibGUgb3RoZXJzICovCisJcmVnID0gX19yYXdfcmVhZGwoSU9fQUREUkVTUyhHRU1JTklfR0xPQkFMX0JBU0UpICsgR0xPQkFMX01JU0NfQ1RSTCk7CisJcmVnICY9IH5QRkxBU0hfUEFEU19ESVNBQkxFOworCXJlZyB8PSBTRkxBU0hfUEFEU19ESVNBQkxFIHwgTkFORF9QQURTX0RJU0FCTEU7CisJX19yYXdfd3JpdGVsKHJlZywgSU9fQUREUkVTUyhHRU1JTklfR0xPQkFMX0JBU0UpICsgR0xPQkFMX01JU0NfQ1RSTCk7CisKKwlmbGFzaF9yZXNvdXJjZS5lbmQgPSBmbGFzaF9yZXNvdXJjZS5zdGFydCArIHNpemUgLSAxOworCisJcGZsYXNoX3BsYXRmb3JtX2RhdGEucGFydHMgPSBwYXJ0czsKKwlwZmxhc2hfcGxhdGZvcm1fZGF0YS5ucl9wYXJ0cyA9IG5yX3BhcnRzOworCisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGZsYXNoX2RldmljZSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyNjM4NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2dwaW8uYwpAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqIEdlbWluaSBncGlvY2hpcCBhbmQgaW50ZXJydXB0IHJvdXRpbmVzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogQmFzZWQgb24gcGxhdC1teGMvZ3Bpby5jOgorICogIE1YQyBHUElPIHN1cHBvcnQuIChjKSAyMDA4IERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKiAgQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisKKyNkZWZpbmUgR1BJT19CQVNFKHgpCQlJT19BRERSRVNTKEdFTUlOSV9HUElPX0JBU0UoeCkpCisKKy8qIEdQSU8gcmVnaXN0ZXJzIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgR1BJT19EQVRBX09VVAkJMHgwCisjZGVmaW5lIEdQSU9fREFUQV9JTgkJMHg0CisjZGVmaW5lIEdQSU9fRElSCQkweDgKKyNkZWZpbmUgR1BJT19EQVRBX1NFVAkJMHgxMAorI2RlZmluZSBHUElPX0RBVEFfQ0xSCQkweDE0CisjZGVmaW5lIEdQSU9fUFVMTF9FTgkJMHgxOAorI2RlZmluZSBHUElPX1BVTExfVFlQRQkJMHgxQworI2RlZmluZSBHUElPX0lOVF9FTgkJMHgyMAorI2RlZmluZSBHUElPX0lOVF9TVEFUCQkweDI0CisjZGVmaW5lIEdQSU9fSU5UX01BU0sJCTB4MkMKKyNkZWZpbmUgR1BJT19JTlRfQ0xSCQkweDMwCisjZGVmaW5lIEdQSU9fSU5UX1RZUEUJCTB4MzQKKyNkZWZpbmUgR1BJT19JTlRfQk9USF9FREdFCTB4MzgKKyNkZWZpbmUgR1BJT19JTlRfTEVWRUwJCTB4M0MKKyNkZWZpbmUgR1BJT19ERUJPVU5DRV9FTgkweDQwCisjZGVmaW5lIEdQSU9fREVCT1VOQ0VfUFJFU0NBTEUJMHg0NAorCisjZGVmaW5lIEdQSU9fUE9SVF9OVU0JCTMKKworc3RhdGljIHZvaWQgX3NldF9ncGlvX2lycWVuYWJsZSh1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgaW50IGluZGV4LAorCQkJCWludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPX0lOVF9FTik7CisJcmVnID0gKHJlZyAmICh+KDEgPDwgaW5kZXgpKSkgfCAoISFlbmFibGUgPDwgaW5kZXgpOworCV9fcmF3X3dyaXRlbChyZWcsIGJhc2UgKyBHUElPX0lOVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1bnNpZ25lZCBpbnQgYmFzZSA9IEdQSU9fQkFTRShncGlvIC8gMzIpOworCisJX19yYXdfd3JpdGVsKDEgPDwgKGdwaW8gJSAzMiksIGJhc2UgKyBHUElPX0lOVF9DTFIpOworfQorCitzdGF0aWMgdm9pZCBncGlvX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXVuc2lnbmVkIGludCBiYXNlID0gR1BJT19CQVNFKGdwaW8gLyAzMik7CisKKwlfc2V0X2dwaW9faXJxZW5hYmxlKGJhc2UsIGdwaW8gJSAzMiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1bnNpZ25lZCBpbnQgYmFzZSA9IEdQSU9fQkFTRShncGlvIC8gMzIpOworCisJX3NldF9ncGlvX2lycWVuYWJsZShiYXNlLCBncGlvICUgMzIsIDEpOworfQorCitzdGF0aWMgaW50IGdwaW9fc2V0X2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXVuc2lnbmVkIGludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1bnNpZ25lZCBpbnQgZ3Bpb19tYXNrID0gMSA8PCAoZ3BpbyAlIDMyKTsKKwl1bnNpZ25lZCBpbnQgYmFzZSA9IEdQSU9fQkFTRShncGlvIC8gMzIpOworCXVuc2lnbmVkIGludCByZWdfYm90aCwgcmVnX2xldmVsLCByZWdfdHlwZTsKKworCXJlZ190eXBlID0gX19yYXdfcmVhZGwoYmFzZSArIEdQSU9fSU5UX1RZUEUpOworCXJlZ19sZXZlbCA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPX0lOVF9CT1RIX0VER0UpOworCXJlZ19ib3RoID0gX19yYXdfcmVhZGwoYmFzZSArIEdQSU9fSU5UX0JPVEhfRURHRSk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKKwkJcmVnX3R5cGUgJj0gfmdwaW9fbWFzazsKKwkJcmVnX2JvdGggfD0gZ3Bpb19tYXNrOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgorCQlyZWdfdHlwZSAmPSB+Z3Bpb19tYXNrOworCQlyZWdfYm90aCAmPSB+Z3Bpb19tYXNrOworCQlyZWdfbGV2ZWwgJj0gfmdwaW9fbWFzazsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9FREdFX0ZBTExJTkc6CisJCXJlZ190eXBlICY9IH5ncGlvX21hc2s7CisJCXJlZ19ib3RoICY9IH5ncGlvX21hc2s7CisJCXJlZ19sZXZlbCB8PSBncGlvX21hc2s7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKKwkJcmVnX3R5cGUgfD0gZ3Bpb19tYXNrOworCQlyZWdfbGV2ZWwgJj0gfmdwaW9fbWFzazsKKwkJYnJlYWs7CisJY2FzZSBJUlFfVFlQRV9MRVZFTF9MT1c6CisJCXJlZ190eXBlIHw9IGdwaW9fbWFzazsKKwkJcmVnX2xldmVsIHw9IGdwaW9fbWFzazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJX19yYXdfd3JpdGVsKHJlZ190eXBlLCBiYXNlICsgR1BJT19JTlRfVFlQRSk7CisJX19yYXdfd3JpdGVsKHJlZ19sZXZlbCwgYmFzZSArIEdQSU9fSU5UX0JPVEhfRURHRSk7CisJX19yYXdfd3JpdGVsKHJlZ19ib3RoLCBiYXNlICsgR1BJT19JTlRfQk9USF9FREdFKTsKKworCWdwaW9fYWNrX2lycShpcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9faXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGludCBncGlvX2lycV9ubywgaXJxX3N0YXQ7CisJdW5zaWduZWQgaW50IHBvcnQgPSAodW5zaWduZWQgaW50KWdldF9pcnFfZGF0YShpcnEpOworCisJaXJxX3N0YXQgPSBfX3Jhd19yZWFkbChHUElPX0JBU0UocG9ydCkgKyBHUElPX0lOVF9TVEFUKTsKKworCWdwaW9faXJxX25vID0gR1BJT19JUlFfQkFTRSArIHBvcnQgKiAzMjsKKwlmb3IgKDsgaXJxX3N0YXQgIT0gMDsgaXJxX3N0YXQgPj49IDEsIGdwaW9faXJxX25vKyspIHsKKworCQlpZiAoKGlycV9zdGF0ICYgMSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCUJVR19PTighKGlycV9kZXNjW2dwaW9faXJxX25vXS5oYW5kbGVfaXJxKSk7CisJCWlycV9kZXNjW2dwaW9faXJxX25vXS5oYW5kbGVfaXJxKGdwaW9faXJxX25vLAorCQkJCSZpcnFfZGVzY1tncGlvX2lycV9ub10pOworCX0KK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncGlvX2lycV9jaGlwID0geworCS5uYW1lID0gIkdQSU8iLAorCS5hY2sgPSBncGlvX2Fja19pcnEsCisJLm1hc2sgPSBncGlvX21hc2tfaXJxLAorCS51bm1hc2sgPSBncGlvX3VubWFza19pcnEsCisJLnNldF90eXBlID0gZ3Bpb19zZXRfaXJxX3R5cGUsCit9OworCitzdGF0aWMgdm9pZCBfc2V0X2dwaW9fZGlyZWN0aW9uKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQlpbnQgZGlyKQoreworCXVuc2lnbmVkIGludCBiYXNlID0gR1BJT19CQVNFKG9mZnNldCAvIDMyKTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoYmFzZSArIEdQSU9fRElSKTsKKwlpZiAoZGlyKQorCQlyZWcgfD0gMSA8PCAob2Zmc2V0ICUgMzIpOworCWVsc2UKKwkJcmVnICY9IH4oMSA8PCAob2Zmc2V0ICUgMzIpKTsKKwlfX3Jhd193cml0ZWwocmVnLCBiYXNlICsgR1BJT19ESVIpOworfQorCitzdGF0aWMgdm9pZCBnZW1pbmlfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgaW50IGJhc2UgPSBHUElPX0JBU0Uob2Zmc2V0IC8gMzIpOworCisJaWYgKHZhbHVlKQorCQlfX3Jhd193cml0ZWwoMSA8PCAob2Zmc2V0ICUgMzIpLCBiYXNlICsgR1BJT19EQVRBX1NFVCk7CisJZWxzZQorCQlfX3Jhd193cml0ZWwoMSA8PCAob2Zmc2V0ICUgMzIpLCBiYXNlICsgR1BJT19EQVRBX0NMUik7Cit9CisKK3N0YXRpYyBpbnQgZ2VtaW5pX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwl1bnNpZ25lZCBpbnQgYmFzZSA9IEdQSU9fQkFTRShvZmZzZXQgLyAzMik7CisKKwlyZXR1cm4gKF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPX0RBVEFfSU4pID4+IChvZmZzZXQgJSAzMikpICYgMTsKK30KKworc3RhdGljIGludCBnZW1pbmlfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCV9zZXRfZ3Bpb19kaXJlY3Rpb24oY2hpcCwgb2Zmc2V0LCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZW1pbmlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKKwkJCQkJaW50IHZhbHVlKQoreworCV9zZXRfZ3Bpb19kaXJlY3Rpb24oY2hpcCwgb2Zmc2V0LCAxKTsKKwlnZW1pbmlfZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIGdlbWluaV9ncGlvX2NoaXAgPSB7CisJLmxhYmVsCQkJPSAiR2VtaW5pIiwKKwkuZGlyZWN0aW9uX2lucHV0CT0gZ2VtaW5pX2dwaW9fZGlyZWN0aW9uX2lucHV0LAorCS5nZXQJCQk9IGdlbWluaV9ncGlvX2dldCwKKwkuZGlyZWN0aW9uX291dHB1dAk9IGdlbWluaV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQsCisJLnNldAkJCT0gZ2VtaW5pX2dwaW9fc2V0LAorCS5iYXNlCQkJPSAwLAorCS5uZ3BpbwkJCT0gR1BJT19QT1JUX05VTSAqIDMyLAorfTsKKwordm9pZCBfX2luaXQgZ2VtaW5pX2dwaW9faW5pdCh2b2lkKQoreworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IEdQSU9fUE9SVF9OVU07IGkrKykgeworCQkvKiBkaXNhYmxlLCB1bm1hc2sgYW5kIGNsZWFyIGFsbCBpbnRlcnJ1cHRzICovCisJCV9fcmF3X3dyaXRlbCgweDAsIEdQSU9fQkFTRShpKSArIEdQSU9fSU5UX0VOKTsKKwkJX19yYXdfd3JpdGVsKDB4MCwgR1BJT19CQVNFKGkpICsgR1BJT19JTlRfTUFTSyk7CisJCV9fcmF3X3dyaXRlbCh+MHgwLCBHUElPX0JBU0UoaSkgKyBHUElPX0lOVF9DTFIpOworCisJCWZvciAoaiA9IEdQSU9fSVJRX0JBU0UgKyBpICogMzI7CisJCSAgICAgaiA8IEdQSU9fSVJRX0JBU0UgKyAoaSArIDEpICogMzI7IGorKykgeworCQkJc2V0X2lycV9jaGlwKGosICZncGlvX2lycV9jaGlwKTsKKwkJCXNldF9pcnFfaGFuZGxlcihqLCBoYW5kbGVfZWRnZV9pcnEpOworCQkJc2V0X2lycV9mbGFncyhqLCBJUlFGX1ZBTElEKTsKKwkJfQorCisJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPKGkpLCBncGlvX2lycV9oYW5kbGVyKTsKKwkJc2V0X2lycV9kYXRhKElSUV9HUElPKGkpLCAodm9pZCAqKWkpOworCX0KKworCUJVR19PTihncGlvY2hpcF9hZGQoJmdlbWluaV9ncGlvX2NoaXApKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0YTZlYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgU3RvcmxpbmssIENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworCS5tYWNybwlhZGRydWFydCxyeAorCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJdHN0CVxyeCwgIzEJCQkJCUAgTU1VIGVuYWJsZWQ/CisJbGRyZXEJXHJ4LCA9R0VNSU5JX1VBUlRfQkFTRQkJCUAgcGh5c2ljYWwKKwlsZHJuZQlccngsID1JT19BRERSRVNTKEdFTUlOSV9VQVJUX0JBU0UpCUAgdmlydHVhbAorCS5lbmRtCisKKyNkZWZpbmUgVUFSVF9TSElGVAkyCisjZGVmaW5lIEZMT1dfQ09OVFJPTAorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9kZWJ1Zy04MjUwLlM+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjRmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDM5IEBACisvKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBHZW1pbmkgcGxhdGZvcm0uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IFN0b3JsaW5rLCBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIElSUV9TVEFUVVMJMHgxNAorCisJLm1hY3JvICBkaXNhYmxlX2ZpcQorCS5lbmRtCisKKwkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJLmVuZG0KKworCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCWxkciAgICAgXGlycXN0YXQsID1JT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSArIElSUV9TVEFUVVMpCisJbGRyICAgICBcaXJxbnIsIFtcaXJxc3RhdF0KKwljbXAgICAgIFxpcnFuciwgIzAKKwliZXEgICAgIDIzMTNmCisJbW92ICAgICBcdG1wLCBcaXJxbnIKKwltb3YgICAgIFxpcnFuciwgIzAKKzIzMTI6CisJdHN0ICAgICBcdG1wLCAjMQorCWJuZSAgICAgMjMxM2YKKwlhZGQgICAgIFxpcnFuciwgXGlycW5yLCAjMQorCW1vdiAgICAgXHRtcCwgXHRtcCwgbHNyICMxCisJY21wICAgICBcaXJxbnIsICMzMQorCWJjYyAgICAgMjMxMmIKKzIzMTM6CisJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9nbG9iYWxfcmVnLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZ2xvYmFsX3JlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlN2ZmN2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZ2xvYmFsX3JlZy5oCkBAIC0wLDAgKzEsMjc4IEBACisvKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIEdlbWluaS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19NQUNIX0dMT0JBTF9SRUdfSAorI2RlZmluZSBfX01BQ0hfR0xPQkFMX1JFR19ICisKKy8qIEdsb2JhbCBXb3JkIElEIFJlZ2lzdGVyKi8KKyNkZWZpbmUgR0xPQkFMX0lECQkJMHgwMAorCisjZGVmaW5lIENISVBfSUQocmVnKQkJCSgocmVnKSA+PiA4KQorI2RlZmluZSBDSElQX1JFVklTSU9OKHJlZykJCSgocmVnKSAmIDB4RkYpCisKKy8qIEdsb2JhbCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX1NUQVRVUwkJCTB4MDQKKworI2RlZmluZSBDUFVfQklHX0VORElBTgkJCSgxIDw8IDMxKQorI2RlZmluZSBQTExfT1NDXzMwTQkJCSgxIDw8IDMwKQkvKiBlbHNlIDYwTUh6ICovCisKKyNkZWZpbmUgT1BFUkFUSU9OX01PREVfTUFTSwkJKDB4RiA8PCAyNikKKyNkZWZpbmUgT1BNX0lERFEJCQkoMHhGIDw8IDI2KQorI2RlZmluZSBPUE1fTkFORAkJCSgweEUgPDwgMjYpCisjZGVmaW5lIE9QTV9SSU5HCQkJKDB4RCA8PCAyNikKKyNkZWZpbmUgT1BNX0RJUkVDVF9CT09UCQkJKDB4QyA8PCAyNikKKyNkZWZpbmUgT1BNX1VTQjFfUEhZX1RFU1QJCSgweEIgPDwgMjYpCisjZGVmaW5lIE9QTV9VU0IwX1BIWV9URVNUCQkoMHhBIDw8IDI2KQorI2RlZmluZSBPUE1fU0FUQTFfUEhZX1RFU1QJCSgweDkgPDwgMjYpCisjZGVmaW5lIE9QTV9TQVRBMF9QSFlfVEVTVAkJKDB4OCA8PCAyNikKKyNkZWZpbmUgT1BNX0lDRV9BUk0JCQkoMHg3IDw8IDI2KQorI2RlZmluZSBPUE1fSUNFX0ZBUkFEQVkJCQkoMHg2IDw8IDI2KQorI2RlZmluZSBPUE1fUExMX0JZUEFTUwkJCSgweDUgPDwgMjYpCisjZGVmaW5lIE9QTV9ERUJVRwkJCSgweDQgPDwgMjYpCisjZGVmaW5lIE9QTV9CVVJOX0lOCQkJKDB4MyA8PCAyNikKKyNkZWZpbmUgT1BNX01CSVNUCQkJKDB4MiA8PCAyNikKKyNkZWZpbmUgT1BNX1NDQU4JCQkoMHgxIDw8IDI2KQorI2RlZmluZSBPUE1fUkVBTAkJCSgweDAgPDwgMjYpCisKKyNkZWZpbmUgRkxBU0hfVFlQRV9NQVNLCQkJKDB4MyA8PCAyNCkKKyNkZWZpbmUgRkxBU0hfVFlQRV9OQU5EXzJLCQkoMHgzIDw8IDI0KQorI2RlZmluZSBGTEFTSF9UWVBFX05BTkRfNTEyCQkoMHgyIDw8IDI0KQorI2RlZmluZSBGTEFTSF9UWVBFX1BBUkFMTEVMCQkoMHgxIDw8IDI0KQorI2RlZmluZSBGTEFTSF9UWVBFX1NFUklBTAkJKDB4MCA8PCAyNCkKKy8qIGlmIHBhcmFsbGVsICovCisjZGVmaW5lIEZMQVNIX1dJRFRIXzE2QklUCQkoMSA8PCAyMykJLyogZWxzZSA4IGJpdCAqLworLyogaWYgc2VyaWFsICovCisjZGVmaW5lIEZMQVNIX0FUTUVMCQkJKDEgPDwgMjMpCS8qIGVsc2UgU1RNICovCisKKyNkZWZpbmUgRkxBU0hfU0laRV9NQVNLCQkJKDB4MyA8PCAyMSkKKyNkZWZpbmUgTkFORF8yNTZNCQkJKDB4MyA8PCAyMSkJLyogYW5kIG1vcmUgKi8KKyNkZWZpbmUgTkFORF8xMjhNCQkJKDB4MiA8PCAyMSkKKyNkZWZpbmUgTkFORF82NE0JCQkoMHgxIDw8IDIxKQorI2RlZmluZSBOQU5EXzMyTQkJCSgweDAgPDwgMjEpCisjZGVmaW5lIEFUTUVMXzE2TQkJCSgweDMgPDwgMjEpCS8qIGFuZCBtb3JlICovCisjZGVmaW5lIEFUTUVMXzhNCQkJKDB4MiA8PCAyMSkKKyNkZWZpbmUgQVRNRUxfNE1fMk0JCQkoMHgxIDw8IDIxKQorI2RlZmluZSBBVE1FTF8xTQkJCSgweDAgPDwgMjEpCS8qIGFuZCBsZXNzICovCisjZGVmaW5lIFNUTV8zMk0JCQkJKDEgPDwgMjIpCS8qIGFuZCBtb3JlICovCisjZGVmaW5lIFNUTV8xNk0JCQkJKDAgPDwgMjIpCS8qIGFuZCBsZXNzICovCisKKyNkZWZpbmUgRkxBU0hfUEFSQUxMRUxfSElHSF9QSU5fQ05UCSgxIDw8IDIwKQkvKiBlbHNlIGxvdyBwaW4gY250ICovCisKKyNkZWZpbmUgQ1BVX0FIQl9SQVRJT19NQVNLCQkoMHgzIDw8IDE4KQorI2RlZmluZSBDUFVfQUhCXzFfMQkJCSgweDAgPDwgMTgpCisjZGVmaW5lIENQVV9BSEJfM18yCQkJKDB4MSA8PCAxOCkKKyNkZWZpbmUgQ1BVX0FIQl8yNF8xMwkJCSgweDIgPDwgMTgpCisjZGVmaW5lIENQVV9BSEJfMl8xCQkJKDB4MyA8PCAxOCkKKworI2RlZmluZSBSRUdfVE9fQUhCX1NQRUVEKHJlZykJCSgoKChyZWcpID4+IDE1KSAmIDB4NykgKiAxMCArIDEzMCkKKyNkZWZpbmUgQUhCX1NQRUVEX1RPX1JFRyh4KQkJKCgoKHggLSAxMzApKSAvIDEwKSA8PCAxNSkKKworLyogaXQgaXMgcG9zaWJsZSB0byBvdmVycmlkZSBzb21lIHNldHRpbmdzLCB1c2UgPj4gT1ZFUlJJREVfeHh4eF9TSElGVCAqLworI2RlZmluZSBPVkVSUklERV9GTEFTSF9UWVBFX1NISUZUCTE2CisjZGVmaW5lIE9WRVJSSURFX0ZMQVNIX1dJRFRIX1NISUZUCTE2CisjZGVmaW5lIE9WRVJSSURFX0ZMQVNIX1NJWkVfU0hJRlQJMTYKKyNkZWZpbmUgT1ZFUlJJREVfQ1BVX0FIQl9SQVRJT19TSElGVAkxNQorI2RlZmluZSBPVkVSUklERV9BSEJfU1BFRURfU0hJRlQJMTUKKworLyogR2xvYmFsIFBMTCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9QTExfQ1RSTAkJCTB4MDgKKworI2RlZmluZSBQTExfQllQQVNTCQkJKDEgPDwgMzEpCisjZGVmaW5lIFBMTF9QT1dFUl9ET1dOCQkJKDEgPDwgOCkKKyNkZWZpbmUgUExMX0NPTlRST0xfUQkJCSgweDFGIDw8IDApCisKKy8qIEdsb2JhbCBTb2Z0IFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0xPQkFMX1JFU0VUCQkJMHgwQworCisjZGVmaW5lIFJFU0VUX0dMT0JBTAkJCSgxIDw8IDMxKQorI2RlZmluZSBSRVNFVF9DUFUxCQkJKDEgPDwgMzApCisjZGVmaW5lIFJFU0VUX1RWRQkJCSgxIDw8IDI4KQorI2RlZmluZSBSRVNFVF9TQVRBMQkJCSgxIDw8IDI3KQorI2RlZmluZSBSRVNFVF9TQVRBMAkJCSgxIDw8IDI2KQorI2RlZmluZSBSRVNFVF9DSVIJCQkoMSA8PCAyNSkKKyNkZWZpbmUgUkVTRVRfRVhUX0RFVgkJCSgxIDw8IDI0KQorI2RlZmluZSBSRVNFVF9XRAkJCSgxIDw8IDIzKQorI2RlZmluZSBSRVNFVF9HUElPMgkJCSgxIDw8IDIyKQorI2RlZmluZSBSRVNFVF9HUElPMQkJCSgxIDw8IDIxKQorI2RlZmluZSBSRVNFVF9HUElPMAkJCSgxIDw8IDIwKQorI2RlZmluZSBSRVNFVF9TU1AJCQkoMSA8PCAxOSkKKyNkZWZpbmUgUkVTRVRfVUFSVAkJCSgxIDw8IDE4KQorI2RlZmluZSBSRVNFVF9USU1FUgkJCSgxIDw8IDE3KQorI2RlZmluZSBSRVNFVF9SVEMJCQkoMSA8PCAxNikKKyNkZWZpbmUgUkVTRVRfSU5UMQkJCSgxIDw8IDE1KQorI2RlZmluZSBSRVNFVF9JTlQwCQkJKDEgPDwgMTQpCisjZGVmaW5lIFJFU0VUX0xDRAkJCSgxIDw8IDEzKQorI2RlZmluZSBSRVNFVF9MUEMJCQkoMSA8PCAxMikKKyNkZWZpbmUgUkVTRVRfQVBCCQkJKDEgPDwgMTEpCisjZGVmaW5lIFJFU0VUX0RNQQkJCSgxIDw8IDEwKQorI2RlZmluZSBSRVNFVF9VU0IxCQkJKDEgPDwgOSkKKyNkZWZpbmUgUkVTRVRfVVNCMAkJCSgxIDw8IDgpCisjZGVmaW5lIFJFU0VUX1BDSQkJCSgxIDw8IDcpCisjZGVmaW5lIFJFU0VUX0dNQUMxCQkJKDEgPDwgNikKKyNkZWZpbmUgUkVTRVRfR01BQzAJCQkoMSA8PCA1KQorI2RlZmluZSBSRVNFVF9TRUNVUklUWQkJCSgxIDw8IDQpCisjZGVmaW5lIFJFU0VUX1JBSUQJCQkoMSA8PCAzKQorI2RlZmluZSBSRVNFVF9JREUJCQkoMSA8PCAyKQorI2RlZmluZSBSRVNFVF9GTEFTSAkJCSgxIDw8IDEpCisjZGVmaW5lIFJFU0VUX0RSQU0JCQkoMSA8PCAwKQorCisvKiBHbG9iYWwgSU8gUGFkIERyaXZpbmcgQ2FwYWJpbGl0eSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9JT19EUklWSU5HX0NUUkwJCTB4MTAKKworI2RlZmluZSBEUklWSU5HX0NVUlJFTlRfTUFTSwkJMHgzCisKKy8qIGhlcmUgMDAtNG1BLCAwMS04bUEsIDEwLTEybUEsIDExLTE2bUEgKi8KKyNkZWZpbmUgR1BJTzFfUEFEU18zMV8yOF9TSElGVAkJMjgKKyNkZWZpbmUgR1BJTzBfUEFEU18zMV8xNl9TSElGVAkJMjYKKyNkZWZpbmUgR1BJTzBfUEFEU18xNV8wX1NISUZUCQkyNAorI2RlZmluZSBQQ0lfQU5EX0VYVF9SRVNFVF9QQURTX1NISUZUCTIyCisjZGVmaW5lIElERV9QQURTX1NISUZUCQkJMjAKKyNkZWZpbmUgR01BQzFfUEFEU19TSElGVAkJMTgKKyNkZWZpbmUgR01BQzBfUEFEU19TSElGVAkJMTYKKy8qIERSQU0gaXMgbm90IGluIG1BIGFuZCBwb29ybHkgZG9jdW1lbnRlZCAqLworI2RlZmluZSBEUkFNX0NMT0NLX1BBRFNfU0hJRlQJCTgKKyNkZWZpbmUgRFJBTV9EQVRBX1BBRFNfU0hJRlQJCTQKKyNkZWZpbmUgRFJBTV9DT05UUk9MX1BBRFNfU0hJRlQJCTAKKworLyogR2xvYmFsIElPIFBhZCBTbGV3IFJhdGUgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBHTE9CQUxfSU9fU0xFV19SQVRFX0NUUkwJMHgxNAorCisjZGVmaW5lIEdQSU8xX1BBRFNfMzFfMjhfU0xPVwkJKDEgPDwgMTApCisjZGVmaW5lIEdQSU8wX1BBRFNfMzFfMTZfU0xPVwkJKDEgPDwgOSkKKyNkZWZpbmUgR1BJTzBfUEFEU18xNV8wX1NMT1cJCSgxIDw8IDgpCisjZGVmaW5lIFBDSV9QQURTX1NMT1cJCQkoMSA8PCA3KQorI2RlZmluZSBJREVfUEFEU19TTE9XCQkJKDEgPDwgNikKKyNkZWZpbmUgR01BQzFfUEFEU19TTE9XCQkJKDEgPDwgNSkKKyNkZWZpbmUgR01BQzBfUEFEU19TTE9XCQkJKDEgPDwgNCkKKyNkZWZpbmUgRFJBTV9DTE9DS19QQURTX1NMT1cJCSgxIDw8IDEpCisjZGVmaW5lIERSQU1fSU9fUEFEU19TTE9XCQkoMSA8PCAwKQorCisvKgorICogR2VuZXJhbCBza2V3IGNvbnRyb2wgZGVmaW5lcworICogMTYgc3RlcHMsIGVhY2ggc3RlcCBpcyBhcm91bmQgMC4ybnMKKyAqLworI2RlZmluZSBTS0VXX01BU0sJCQkweEYKKworLyogR2xvYmFsIElERSBQQUQgU2tldyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9JREVfU0tFV19DVFJMCQkweDE4CisKKyNkZWZpbmUgSURFMV9IT1NUX1NUUk9CRV9ERUxBWV9TSElGVAkyOAorI2RlZmluZSBJREUxX0RFVklDRV9TVFJPQkVfREVMQVlfU0hJRlQJMjQKKyNkZWZpbmUgSURFMV9PVVRQVVRfSU9fU0tFV19TSElGVAkyMAorI2RlZmluZSBJREUxX0lOUFVUX0lPX1NLRVdfU0hJRlQJMTYKKyNkZWZpbmUgSURFMF9IT1NUX1NUUk9CRV9ERUxBWV9TSElGVAkxMgorI2RlZmluZSBJREUwX0RFVklDRV9TVFJPQkVfREVMQVlfU0hJRlQJOAorI2RlZmluZSBJREUwX09VVFBVVF9JT19TS0VXX1NISUZUCTQKKyNkZWZpbmUgSURFMF9JTlBVVF9JT19TS0VXX1NISUZUCTAKKworLyogR2xvYmFsIEdNQUMgQ29udHJvbCBQYWQgU2tldyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9HTUFDX0NUUkxfU0tFV19DVFJMCTB4MUMKKworI2RlZmluZSBHTUFDMV9UWENfU0tFV19TSElGVAkJMjgKKyNkZWZpbmUgR01BQzFfVFhFTl9TS0VXX1NISUZUCQkyNAorI2RlZmluZSBHTUFDMV9SWENfU0tFV19TSElGVAkJMjAKKyNkZWZpbmUgR01BQzFfUlhEVl9TS0VXX1NISUZUCQkxNgorI2RlZmluZSBHTUFDMF9UWENfU0tFV19TSElGVAkJMTIKKyNkZWZpbmUgR01BQzBfVFhFTl9TS0VXX1NISUZUCQk4CisjZGVmaW5lIEdNQUMwX1JYQ19TS0VXX1NISUZUCQk0CisjZGVmaW5lIEdNQUMwX1JYRFZfU0tFV19TSElGVAkJMAorCisvKiBHbG9iYWwgR01BQzAgRGF0YSBQQUQgU2tldyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9HTUFDMF9EQVRBX1NLRVdfQ1RSTAkweDIwCisvKiBHbG9iYWwgR01BQzEgRGF0YSBQQUQgU2tldyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9HTUFDMV9EQVRBX1NLRVdfQ1RSTAkweDI0CisKKyNkZWZpbmUgR01BQ19UWERfU0tFV19TSElGVCh4KQkJKCgoeCkgKiA0KSArIDE2KQorI2RlZmluZSBHTUFDX1JYRF9TS0VXX1NISUZUKHgpCQkoKHgpICogNCkKKworLyogQ1BVIGhhcyB0d28gQUhCIGJ1c3Nlcy4gKi8KKworLyogR2xvYmFsIEFyYml0cmF0aW9uMCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9BUkJJVFJBVElPTjBfQ1RSTAkweDI4CisKKyNkZWZpbmUgQk9PVF9DT05UUk9MTEVSX0hJR0hfUFJJTwkoMSA8PCAzKQorI2RlZmluZSBETUFfQlVTMV9ISUdIX1BSSU8JCSgxIDw8IDIpCisjZGVmaW5lIENQVTBfSElHSF9QUklPCQkJKDEgPDwgMCkKKworLyogR2xvYmFsIEFyYml0cmF0aW9uMSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9BUkJJVFJBVElPTjFfQ1RSTAkweDJDCisKKyNkZWZpbmUgVFZFX0hJR0hfUFJJTwkJCSgxIDw8IDkpCisjZGVmaW5lIFBDSV9ISUdIX1BSSU8JCQkoMSA8PCA4KQorI2RlZmluZSBVU0IxX0hJR0hfUFJJTwkJCSgxIDw8IDcpCisjZGVmaW5lIFVTQjBfSElHSF9QUklPCQkJKDEgPDwgNikKKyNkZWZpbmUgR01BQzFfSElHSF9QUklPCQkJKDEgPDwgNSkKKyNkZWZpbmUgR01BQzBfSElHSF9QUklPCQkJKDEgPDwgNCkKKyNkZWZpbmUgU0VDVVJJVFlfSElHSF9QUklPCQkoMSA8PCAzKQorI2RlZmluZSBSQUlEX0hJR0hfUFJJTwkJCSgxIDw8IDIpCisjZGVmaW5lIElERV9ISUdIX1BSSU8JCQkoMSA8PCAxKQorI2RlZmluZSBETUFfQlVTMl9ISUdIX1BSSU8JCSgxIDw8IDApCisKKy8qIENvbW1vbiBiaXRzIGZvciBib3RoIGFyYml0cmF0aW9uIHJlZ2lzdGVycyAqLworI2RlZmluZSBCVVJTVF9MRU5HVEhfU0hJRlQJCTE2CisjZGVmaW5lIEJVUlNUX0xFTkdUSF9NQVNLCQkoMHgzRiA8PCAxNikKKworLyogTWlzY2VsbGFuZW91cyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9NSVNDX0NUUkwJCTB4MzAKKworI2RlZmluZSBNRU1PUllfU1BBQ0VfU1dBUAkJKDEgPDwgMzEpCisjZGVmaW5lIFVTQjFfUExVR19NSU5JQgkJCSgxIDw8IDMwKSAvKiBlbHNlIHBsdWcgaXMgbWluaS1BICovCisjZGVmaW5lIFVTQjBfUExVR19NSU5JQgkJCSgxIDw8IDI5KQorI2RlZmluZSBHTUFDX0dNSUkJCQkoMSA8PCAyOCkKKyNkZWZpbmUgR01BQ18xX0VOQUJMRQkJCSgxIDw8IDI3KQorLyogVE9ETzogZGVmaW5lIEFUQS9TQVRBIGJpdHMgKi8KKyNkZWZpbmUgVVNCMV9WQlVTX09OCQkJKDEgPDwgMjMpCisjZGVmaW5lIFVTQjBfVkJVU19PTgkJCSgxIDw8IDIyKQorI2RlZmluZSBBUEJfQ0xLT1VUX0VOQUJMRQkJKDEgPDwgMjEpCisjZGVmaW5lIFRWQ19DTEtPVVRfRU5BQkxFCQkoMSA8PCAyMCkKKyNkZWZpbmUgRVhUX0NMS0lOX0VOQUJMRQkJKDEgPDwgMTkpCisjZGVmaW5lIFBDSV82Nk1IWgkJCSgxIDw8IDE4KSAvKiBlbHNlIDMzIE1IeiAqLworI2RlZmluZSBQQ0lfQ0xLT1VUX0VOQUJMRQkJKDEgPDwgMTcpCisjZGVmaW5lIExQQ19DTEtPVVRfRU5BQkxFCQkoMSA8PCAxNikKKyNkZWZpbmUgVVNCMV9XQUtFVVBfT04JCQkoMSA8PCAxNSkKKyNkZWZpbmUgVVNCMF9XQUtFVVBfT04JCQkoMSA8PCAxNCkKKy8qIFRPRE86IGRlZmluZSBQQ0kgaWRsZSBkZXRlY3QgYml0cyAqLworI2RlZmluZSBUVkNfUEFEU19FTkFCTEUJCQkoMSA8PCA5KQorI2RlZmluZSBTU1BfUEFEU19FTkFCTEUJCQkoMSA8PCA4KQorI2RlZmluZSBMQ0RfUEFEU19FTkFCTEUJCQkoMSA8PCA3KQorI2RlZmluZSBMUENfUEFEU19FTkFCTEUJCQkoMSA8PCA2KQorI2RlZmluZSBQQ0lfUEFEU19FTkFCTEUJCQkoMSA8PCA1KQorI2RlZmluZSBJREVfUEFEU19FTkFCTEUJCQkoMSA8PCA0KQorI2RlZmluZSBEUkFNX1BBRFNfUE9XRVJfRE9XTgkJKDEgPDwgMykKKyNkZWZpbmUgTkFORF9QQURTX0RJU0FCTEUJCSgxIDw8IDIpCisjZGVmaW5lIFBGTEFTSF9QQURTX0RJU0FCTEUJCSgxIDw8IDEpCisjZGVmaW5lIFNGTEFTSF9QQURTX0RJU0FCTEUJCSgxIDw8IDApCisKKy8qIEdsb2JhbCBDbG9jayBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEdMT0JBTF9DTE9DS19DVFJMCQkweDM0CisKKyNkZWZpbmUgUE9XRVJfU1RBVEVfRzAJCQkoMSA8PCAzMSkKKyNkZWZpbmUgUE9XRVJfU1RBVEVfUzEJCQkoMSA8PCAzMCkgLyogZWxzZSBpdCBpcyBTMy9TNCBzdGF0ZSAqLworI2RlZmluZSBTRUNVUklUWV9BUEJfQUhCCQkoMSA8PCAyOSkKKy8qIGVsc2UgU2VjdXJpdHkgQVBCIGNsayB3aWxsIGJlIDAuNzV4QUhCICovCisvKiBUT0RPOiBUVkMgY2xvY2sgZGl2aWRlciAqLworI2RlZmluZSBQQ0lfQ0xLUlVOX0VOQUJMRQkJKDEgPDwgMTYpCisjZGVmaW5lIEJPT1RfQ0xLX0RJU0FCTEUJCSgxIDw8IDEzKQorI2RlZmluZSBUVkNfQ0xLX0RJU0FCTEUJCQkoMSA8PCAxMikKKyNkZWZpbmUgRkxBU0hfQ0xLX0RJU0FCTEUJCSgxIDw8IDExKQorI2RlZmluZSBERFJfQ0xLX0RJU0FCTEUJCQkoMSA8PCAxMCkKKyNkZWZpbmUgUENJX0NMS19ESVNBQkxFCQkJKDEgPDwgOSkKKyNkZWZpbmUgSURFX0NMS19ESVNBQkxFCQkJKDEgPDwgOCkKKyNkZWZpbmUgVVNCMV9DTEtfRElTQUJMRQkJKDEgPDwgNykKKyNkZWZpbmUgVVNCMF9DTEtfRElTQUJMRQkJKDEgPDwgNikKKyNkZWZpbmUgU0FUQTFfQ0xLX0RJU0FCTEUJCSgxIDw8IDUpCisjZGVmaW5lIFNBVEEwX0NMS19ESVNBQkxFCQkoMSA8PCA0KQorI2RlZmluZSBHTUFDMV9DTEtfRElTQUJMRQkJKDEgPDwgMykKKyNkZWZpbmUgR01BQzBfQ0xLX0RJU0FCTEUJCSgxIDw8IDIpCisjZGVmaW5lIFNFQ1VSSVRZX0NMS19ESVNBQkxFCQkoMSA8PCAxKQorCisvKiBUT0RPOiBvdGhlciByZWdpc3RlcnMgZGVmaW5pdGlvbnMgaWYgbmVlZGVkICovCisKKyNlbmRpZiAvKiBfX01BQ0hfR0xPQkFMX1JFR19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmMyYzcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDI1IEBACisvKgorICogR2VtaW5pIGdwaW9saWIgc3BlY2lmaWMgZGVmaW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX01BQ0hfR1BJT19IX18KKyNkZWZpbmUgX19NQUNIX0dQSU9fSF9fCisKKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisKKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUJX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZQlfX2dwaW9fc2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCisKKyNkZWZpbmUgZ3Bpb190b19pcnEoeCkJKCh4KSArIEdQSU9fSVJRX0JBU0UpCisjZGVmaW5lIGlycV90b19ncGlvKHgpCSgoeCkgLSBHUElPX0lSUV9CQVNFKQorCisjZW5kaWYgLyogX19NQUNIX0dQSU9fSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjc1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIEdlbWluaS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgU3RvcmxpbmssIENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX01BQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX01BQ0hfSEFSRFdBUkVfSAorCisvKgorICogTWVtb3J5IE1hcCBkZWZpbml0aW9ucworICovCisvKiBGSVhNRTogRG9lcyBpdCByZWFsbHkgc3dhcCBTUkFNIGxpa2UgdGhpcz8gKi8KKyNpZmRlZiBDT05GSUdfR0VNSU5JX01FTV9TV0FQCisjIGRlZmluZSBHRU1JTklfRFJBTV9CQVNFCTB4MDAwMDAwMDAKKyMgZGVmaW5lIEdFTUlOSV9TUkFNX0JBU0UJMHgyMDAwMDAwMAorI2Vsc2UKKyMgZGVmaW5lIEdFTUlOSV9TUkFNX0JBU0UJMHgwMDAwMDAwMAorIyBkZWZpbmUgR0VNSU5JX0RSQU1fQkFTRQkweDEwMDAwMDAwCisjZW5kaWYKKyNkZWZpbmUgR0VNSU5JX0ZMQVNIX0JBU0UJMHgzMDAwMDAwMAorI2RlZmluZSBHRU1JTklfR0xPQkFMX0JBU0UJMHg0MDAwMDAwMAorI2RlZmluZSBHRU1JTklfV0FRVENIRE9HX0JBU0UJMHg0MTAwMDAwMAorI2RlZmluZSBHRU1JTklfVUFSVF9CQVNFCTB4NDIwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX1RJTUVSX0JBU0UJMHg0MzAwMDAwMAorI2RlZmluZSBHRU1JTklfTENEX0JBU0UJCTB4NDQwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX1JUQ19CQVNFCQkweDQ1MDAwMDAwCisjZGVmaW5lIEdFTUlOSV9TQVRBX0JBU0UJMHg0NjAwMDAwMAorI2RlZmluZSBHRU1JTklfTFBDX0hPU1RfQkFTRQkweDQ3MDAwMDAwCisjZGVmaW5lIEdFTUlOSV9MUENfSU9fQkFTRQkweDQ3ODAwMDAwCisjZGVmaW5lIEdFTUlOSV9JTlRFUlJVUFRfQkFTRQkweDQ4MDAwMDAwCisvKiBUT0RPOiBEaWZmZXJlbnQgaW50ZXJydXB0IGNvbnRyb2xlcnMgd2hlbiBTTVAKKyAqICNkZWZpbmUgR0VNSU5JX0lOVEVSUlVQVDBfQkFTRQkweDQ4MDAwMDAwCisgKiAjZGVmaW5lIEdFTUlOSV9JTlRFUlJVUFQxX0JBU0UJMHg0OTAwMDAwMAorICovCisjZGVmaW5lIEdFTUlOSV9TU1BfQ1RSTF9CQVNFCTB4NEEwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX1BPV0VSX0NUUkxfQkFTRQkweDRCMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9DSVJfQkFTRQkJMHg0QzAwMDAwMAorI2RlZmluZSBHRU1JTklfR1BJT19CQVNFKHgpCSgweDREMDAwMDAwICsgKHgpICogMHgxMDAwMDAwKQorI2RlZmluZSBHRU1JTklfUENJX0lPX0JBU0UJMHg1MDAwMDAwMAorI2RlZmluZSBHRU1JTklfUENJX01FTV9CQVNFCTB4NTgwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX1RPRV9CQVNFCQkweDYwMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9HTUFDMF9CQVNFCTB4NjAwMEEwMDAKKyNkZWZpbmUgR0VNSU5JX0dNQUMxX0JBU0UJMHg2MDAwRTAwMAorI2RlZmluZSBHRU1JTklfU0VDVVJJVFlfQkFTRQkweDYyMDAwMDAwCisjZGVmaW5lIEdFTUlOSV9JREUwX0JBU0UJMHg2MzAwMDAwMAorI2RlZmluZSBHRU1JTklfSURFMV9CQVNFCTB4NjM0MDAwMDAKKyNkZWZpbmUgR0VNSU5JX1JBSURfQkFTRQkweDY0MDAwMDAwCisjZGVmaW5lIEdFTUlOSV9GTEFTSF9DVFJMX0JBU0UJMHg2NTAwMDAwMAorI2RlZmluZSBHRU1JTklfRFJBTV9DVFJMX0JBU0UJMHg2NjAwMDAwMAorI2RlZmluZSBHRU1JTklfR0VORVJBTF9ETUFfQkFTRQkweDY3MDAwMDAwCisjZGVmaW5lIEdFTUlOSV9VU0IwX0JBU0UJMHg2ODAwMDAwMAorI2RlZmluZSBHRU1JTklfVVNCMV9CQVNFCTB4NjkwMDAwMDAKKyNkZWZpbmUgR0VNSU5JX0JJR19FTkRJQU5fQkFTRQkweDgwMDAwMDAwCisKKyNkZWZpbmUgR0VNSU5JX1RJTUVSMV9CQVNFCUdFTUlOSV9USU1FUl9CQVNFCisjZGVmaW5lIEdFTUlOSV9USU1FUjJfQkFTRQkoR0VNSU5JX1RJTUVSX0JBU0UgKyAweDEwKQorI2RlZmluZSBHRU1JTklfVElNRVIzX0JBU0UJKEdFTUlOSV9USU1FUl9CQVNFICsgMHgyMCkKKworLyoKKyAqIFVBUlQgQ2xvY2sgd2hlbiBTeXN0ZW0gY2xrIGlzIDE1ME1IegorICovCisjZGVmaW5lIFVBUlRfQ0xLCTQ4MDAwMDAwCisKKy8qCisgKiBtYWNybyB0byBnZXQgYXQgSU8gc3BhY2Ugd2hlbiBydW5uaW5nIHZpcnR1YWxseQorICovCisjZGVmaW5lIElPX0FERFJFU1MoeCkJKCgoKHgpICYgMHhGRkYwMDAwMCkgPj4gNCkgfCAoKHgpICYgMHgwMDBGRkZGRikgfCAweEYwMDAwMDAwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0ODA1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgU3RvcmxpbmssIENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX01BQ0hfSU9fSAorI2RlZmluZSBfX01BQ0hfSU9fSAorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUCTB4ZmZmZmZmZmYKKworI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKKworI2VuZGlmIC8qIF9fTUFDSF9JT19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmJjNDdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IFN0b3JsaW5rLCBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX01BQ0hfSVJRU19IX18KKyNkZWZpbmUgX19NQUNIX0lSUVNfSF9fCisKKyNkZWZpbmUgSVJRX1NFUklSUTEJMzEKKyNkZWZpbmUgSVJRX1NFUklSUTAJMzAKKyNkZWZpbmUgSVJRX1BDSUQJMjkKKyNkZWZpbmUgSVJRX1BDSUMJMjgKKyNkZWZpbmUgSVJRX1BDSUIJMjcKKyNkZWZpbmUgSVJRX1BXUgkJMjYKKyNkZWZpbmUgSVJRX0NJUgkJMjUKKyNkZWZpbmUgSVJRX0dQSU8oeCkJKDIyICsgKHgpKQorI2RlZmluZSBJUlFfU1NQCQkyMQorI2RlZmluZSBJUlFfTFBDCQkyMAorI2RlZmluZSBJUlFfTENECQkxOQorI2RlZmluZSBJUlFfVUFSVAkxOAorI2RlZmluZSBJUlFfUlRDCQkxNworI2RlZmluZSBJUlFfVElNRVIzCTE2CisjZGVmaW5lIElSUV9USU1FUjIJMTUKKyNkZWZpbmUgSVJRX1RJTUVSMQkxNAorI2RlZmluZSBJUlFfRkxBU0gJMTIKKyNkZWZpbmUgSVJRX1VTQjEJMTEKKyNkZWZpbmUgSVJRX1VTQjAJMTAKKyNkZWZpbmUgSVJRX0RNQQkJOQorI2RlZmluZSBJUlFfUENJCQk4CisjZGVmaW5lIElSUV9JUFNFQwk3CisjZGVmaW5lIElSUV9SQUlECTYKKyNkZWZpbmUgSVJRX0lERTEJNQorI2RlZmluZSBJUlFfSURFMAk0CisjZGVmaW5lIElSUV9XQVRDSERPRwkzCisjZGVmaW5lIElSUV9HTUFDMQkyCisjZGVmaW5lIElSUV9HTUFDMAkxCisjZGVmaW5lIElSUV9JUEkJCTAKKworI2RlZmluZSBOT1JNQUxfSVJRX05VTQkzMgorCisjZGVmaW5lIEdQSU9fSVJRX0JBU0UJTk9STUFMX0lSUV9OVU0KKyNkZWZpbmUgR1BJT19JUlFfTlVNCSgzICogMzIpCisKKyNkZWZpbmUgQVJDSF9USU1FUl9JUlEJSVJRX1RJTUVSMgorCisjZGVmaW5lIE5SX0lSUVMJCShOT1JNQUxfSVJRX05VTSArIEdQSU9fSVJRX05VTSkKKworI2VuZGlmIC8qIF9fTUFDSF9JUlFTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMTRkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBTdG9ybGluaywgQ29ycC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIF9fTUFDSF9NRU1PUllfSAorI2RlZmluZSBfX01BQ0hfTUVNT1JZX0gKKworI2lmZGVmIENPTkZJR19HRU1JTklfTUVNX1NXQVAKKyMgZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4MDAwMDAwMDApCisjZWxzZQorIyBkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgxMDAwMDAwMCkKKyNlbmRpZgorCisjZW5kaWYgLyogX19NQUNIX01FTU9SWV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJiZDcyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMCwwICsxLDM3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IFN0b3JsaW5rLCBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19NQUNIX1NZU1RFTV9ICisjZGVmaW5lIF9fTUFDSF9TWVNURU1fSAorCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9nbG9iYWxfcmVnLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwkvKgorCSAqIEJlY2F1c2Ugb2YgYnJva2VuIGhhcmR3YXJlIHdlIGhhdmUgdG8gZW5hYmxlIGludGVycnVwdHMgb3IgdGhlIENQVQorCSAqIHdpbGwgbmV2ZXIgd2FrZXVwLi4uIEFjY3R1YWx5IGl0IGlzIG5vdCB2ZXJ5IGdvb2QgdG8gZW5hYmxlCisJICogaW50ZXJydXB0cyBoZXJlIHNpbmNlIHNjaGVkdWxlciBjYW4gbWlzcyBhIHRpY2ssIGJ1dCB0aGVyZSBpcworCSAqIG5vIG90aGVyIHdheSBhcm91bmQgdGhpcy4gUGxhdGZvcm1zIHRoYXQgbmVlZHMgaXQgZm9yIHBvd2VyIHNhdmluZworCSAqIHNob3VsZCBjYWxsIGVuYWJsZV9obHQoKSBpbiBpbml0IGNvZGUsIHNpbmNlIGJ5IGRlZmF1bHQgaXQgaXMKKwkgKiBkaXNhYmxlZC4KKwkgKi8KKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJY3B1X2RvX2lkbGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQoreworCV9fcmF3X3dyaXRlbChSRVNFVF9HTE9CQUwgfCBSRVNFVF9DUFUxLAorCQkgICAgIElPX0FERFJFU1MoR0VNSU5JX0dMT0JBTF9CQVNFKSArIEdMT0JBTF9SRVNFVCk7Cit9CisKKyNlbmRpZiAvKiBfX01BQ0hfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM1NjkwYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBHZW1pbmkgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBQYXVsaXVzIFphbGVja2FzIDxwYXVsaXVzLnphbGVja2FzQHRlbHRvbmlrYS5sdD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy8qIFdoZW4gQUhCIGJ1cyBmcmVxdWVuY3kgaXMgMTUwTUh6ICovCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkzODAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljNWRmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIEJhc2VkIG9uIG1hY2gtcHhhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmg6CisgKiBDb3B5cmlnaHQ6CShDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX01BQ0hfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fTUFDSF9VTkNPTVBSRVNTX0gKKworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKK3N0YXRpYyB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpVQVJUID0gKHVuc2lnbmVkIGxvbmcgKilHRU1JTklfVUFSVF9CQVNFOworCisvKgorICogVGhlIGZvbGxvd2luZyBjb2RlIGFzc3VtZXMgdGhlIHNlcmlhbCBwb3J0IGhhcyBhbHJlYWR5IGJlZW4KKyAqIGluaXRpYWxpemVkIGJ5IHRoZSBib290bG9hZGVyLiAgSWYgeW91IGRpZG4ndCBzZXR1cCBhIHBvcnQgaW4KKyAqIHlvdXIgYm9vdGxvYWRlciB0aGVuIG5vdGhpbmcgd2lsbCBhcHBlYXIgKHdoaWNoIG1pZ2h0IGJlIGRlc2lyZWQpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJd2hpbGUgKCEoVUFSVFtVQVJUX0xTUl0gJiBVQVJUX0xTUl9USFJFKSkKKwkJYmFycmllcigpOworCVVBUlRbVUFSVF9UWF0gPSBjOworfQorCisjZGVmaW5lIGZsdXNoKCkgZG8geyB9IHdoaWxlICgwKQorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKworI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKKworI2VuZGlmIC8qIF9fTUFDSF9VTkNPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZTUzNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWdlbWluaS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4RjAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2MTNjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL2lycS5jCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogIEludGVycnVwdCByb3V0aW5lcyBmb3IgR2VtaW5pCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IFN0b3JsaW5rLCBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjZGVmaW5lIElSUV9TT1VSQ0UoYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgwMCkKKyNkZWZpbmUgSVJRX01BU0soYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgwNCkKKyNkZWZpbmUgSVJRX0NMRUFSKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MDgpCisjZGVmaW5lIElSUV9UTU9ERShiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDBDKQorI2RlZmluZSBJUlFfVExFVkVMKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MTApCisjZGVmaW5lIElSUV9TVEFUVVMoYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgxNCkKKyNkZWZpbmUgRklRX1NPVVJDRShiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDIwKQorI2RlZmluZSBGSVFfTUFTSyhiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDI0KQorI2RlZmluZSBGSVFfQ0xFQVIoYmFzZV9hZGRyKQkoYmFzZV9hZGRyICsgMHgyOCkKKyNkZWZpbmUgRklRX1RNT0RFKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MkMpCisjZGVmaW5lIEZJUV9MRVZFTChiYXNlX2FkZHIpCShiYXNlX2FkZHIgKyAweDMwKQorI2RlZmluZSBGSVFfU1RBVFVTKGJhc2VfYWRkcikJKGJhc2VfYWRkciArIDB4MzQpCisKK3N0YXRpYyB2b2lkIGdlbWluaV9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKDEgPDwgaXJxLCBJUlFfQ0xFQVIoSU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbWluaV9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBtYXNrOworCisJbWFzayA9IF9fcmF3X3JlYWRsKElSUV9NQVNLKElPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSkpOworCW1hc2sgJj0gfigxIDw8IGlycSk7CisJX19yYXdfd3JpdGVsKG1hc2ssIElSUV9NQVNLKElPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSkpOworfQorCitzdGF0aWMgdm9pZCBnZW1pbmlfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIGludCBtYXNrOworCisJbWFzayA9IF9fcmF3X3JlYWRsKElSUV9NQVNLKElPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSkpOworCW1hc2sgfD0gKDEgPDwgaXJxKTsKKwlfX3Jhd193cml0ZWwobWFzaywgSVJRX01BU0soSU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ2VtaW5pX2lycV9jaGlwID0geworCS5uYW1lCT0gIklOVEMiLAorCS5hY2sJPSBnZW1pbmlfYWNrX2lycSwKKwkubWFzawk9IGdlbWluaV9tYXNrX2lycSwKKwkudW5tYXNrCT0gZ2VtaW5pX3VubWFza19pcnEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlycV9yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJpcnFfaGFuZGxlciIsCisJLnN0YXJ0CT0gSU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpLAorCS5lbmQJPSBJT19BRERSRVNTKEZJUV9TVEFUVVMoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSkgKyA0LAorfTsKKwordm9pZCBfX2luaXQgZ2VtaW5pX2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGksIG1vZGUgPSAwLCBsZXZlbCA9IDA7CisKKwkvKgorCSAqIERpc2FibGUgYXJjaF9pZGxlKCkgYnkgZGVmYXVsdCBzaW5jZSBpdCBpcyBidWdneQorCSAqIEZvciBtb3JlIGluZm8gc2VlIGFyY2gvYXJtL21hY2gtZ2VtaW5pL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorCSAqLworCWRpc2FibGVfaGx0KCk7CisKKwlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmlycV9yZXNvdXJjZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7CisJCXNldF9pcnFfY2hpcChpLCAmZ2VtaW5pX2lycV9jaGlwKTsKKwkJaWYoKGkgPj0gSVJRX1RJTUVSMSAmJiBpIDw9IElSUV9USU1FUjMpIHx8IChpID49IElSUV9TRVJJUlEwICYmIGkgPD0gSVJRX1NFUklSUTEpKSB7CisJCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJCW1vZGUgfD0gMSA8PCBpOworCQkJbGV2ZWwgfD0gMSA8PCBpOworCQl9IGVsc2UgewkJCQorCQkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOworCQl9CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworCX0KKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwlfX3Jhd193cml0ZWwoMCwgSVJRX01BU0soSU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpKSk7CisJX19yYXdfd3JpdGVsKDAsIEZJUV9NQVNLKElPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSkpOworCisJLyogU2V0IGludGVycnVwdCBtb2RlICovCisJX19yYXdfd3JpdGVsKG1vZGUsIElSUV9UTU9ERShJT19BRERSRVNTKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSkpKTsKKwlfX3Jhd193cml0ZWwobGV2ZWwsIElSUV9UTEVWRUwoSU9fQUREUkVTUyhHRU1JTklfSU5URVJSVVBUX0JBU0UpKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWdlbWluaS9tbS5jIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvbW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTk0ODI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvbW0uYwpAQCAtMCwwICsxLDgyIEBACisvKgorICogIFN0YXRpYyBtYXBwaW5ncyBmb3IgR2VtaW5pCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IFN0b3JsaW5rLCBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisvKiBQYWdlIHRhYmxlIG1hcHBpbmcgZm9yIEkvTyByZWdpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgZ2VtaW5pX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEdFTUlOSV9HTE9CQUxfQkFTRSksCisJCS5wZm4JCT1fX3BoeXNfdG9fcGZuKEdFTUlOSV9HTE9CQUxfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNTEySywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhHRU1JTklfVUFSVF9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEdFTUlOSV9VQVJUX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzUxMkssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoR0VNSU5JX1RJTUVSX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oR0VNSU5JX1RJTUVSX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzUxMkssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoR0VNSU5JX0lOVEVSUlVQVF9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEdFTUlOSV9JTlRFUlJVUFRfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfNTEySywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhHRU1JTklfUE9XRVJfQ1RSTF9CQVNFKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEdFTUlOSV9QT1dFUl9DVFJMX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzUxMkssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoR0VNSU5JX0dQSU9fQkFTRSgwKSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihHRU1JTklfR1BJT19CQVNFKDApKSwKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEdFTUlOSV9HUElPX0JBU0UoMSkpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oR0VNSU5JX0dQSU9fQkFTRSgxKSksCisJCS5sZW5ndGgJCT0gU1pfNTEySywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gSU9fQUREUkVTUyhHRU1JTklfR1BJT19CQVNFKDIpKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEdFTUlOSV9HUElPX0JBU0UoMikpLAorCQkubGVuZ3RoCQk9IFNaXzUxMkssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoR0VNSU5JX0ZMQVNIX0NUUkxfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihHRU1JTklfRkxBU0hfQ1RSTF9CQVNFKSwKKwkJLmxlbmd0aAkJPSBTWl81MTJLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSBJT19BRERSRVNTKEdFTUlOSV9EUkFNX0NUUkxfQkFTRSksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihHRU1JTklfRFJBTV9DVFJMX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzUxMkssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9IElPX0FERFJFU1MoR0VNSU5JX0dFTkVSQUxfRE1BX0JBU0UpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oR0VNSU5JX0dFTkVSQUxfRE1BX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzUxMkssCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwKK307CisKK3ZvaWQgX19pbml0IGdlbWluaV9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoZ2VtaW5pX2lvX2Rlc2MsIEFSUkFZX1NJWkUoZ2VtaW5pX2lvX2Rlc2MpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZ2VtaW5pL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtZ2VtaW5pL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWRjNWE4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1nZW1pbmkvdGltZS5jCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgU3RvcmxpbmssIENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZ2xvYmFsX3JlZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworLyoKKyAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgdGltZXJzCisgKi8KKyNkZWZpbmUgVElNRVJfQ09VTlQoQkFTRV9BRERSKQkJKEJBU0VfQUREUiAgKyAweDAwKQorI2RlZmluZSBUSU1FUl9MT0FEKEJBU0VfQUREUikJCShCQVNFX0FERFIgICsgMHgwNCkKKyNkZWZpbmUgVElNRVJfTUFUQ0gxKEJBU0VfQUREUikJCShCQVNFX0FERFIgICsgMHgwOCkKKyNkZWZpbmUgVElNRVJfTUFUQ0gyKEJBU0VfQUREUikJCShCQVNFX0FERFIgICsgMHgwQykKKyNkZWZpbmUgVElNRVJfQ1IoQkFTRV9BRERSKQkJKEJBU0VfQUREUiAgKyAweDMwKQorCisjZGVmaW5lIFRJTUVSXzFfQ1JfRU5BQkxFCQkoMSA8PCAwKQorI2RlZmluZSBUSU1FUl8xX0NSX0NMT0NLCQkoMSA8PCAxKQorI2RlZmluZSBUSU1FUl8xX0NSX0lOVAkJCSgxIDw8IDIpCisjZGVmaW5lIFRJTUVSXzJfQ1JfRU5BQkxFCQkoMSA8PCAzKQorI2RlZmluZSBUSU1FUl8yX0NSX0NMT0NLCQkoMSA8PCA0KQorI2RlZmluZSBUSU1FUl8yX0NSX0lOVAkJCSgxIDw8IDUpCisjZGVmaW5lIFRJTUVSXzNfQ1JfRU5BQkxFCQkoMSA8PCA2KQorI2RlZmluZSBUSU1FUl8zX0NSX0NMT0NLCQkoMSA8PCA3KQorI2RlZmluZSBUSU1FUl8zX0NSX0lOVAkJCSgxIDw8IDgpCisKKy8qCisgKiBJUlEgaGFuZGxlciBmb3IgdGhlIHRpbWVyCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBnZW1pbmlfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl0aW1lcl90aWNrKCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGdlbWluaV90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIkdlbWluaSBUaW1lciBUaWNrIiwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCisJLmhhbmRsZXIJPSBnZW1pbmlfdGltZXJfaW50ZXJydXB0LAorfTsKKworLyoKKyAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQsIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzLgorICovCit2b2lkIF9faW5pdCBnZW1pbmlfdGltZXJfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0aWNrX3JhdGUsIHJlZ192OworCisJcmVnX3YgPSBfX3Jhd19yZWFkbChJT19BRERSRVNTKEdFTUlOSV9HTE9CQUxfQkFTRSArIEdMT0JBTF9TVEFUVVMpKTsKKwl0aWNrX3JhdGUgPSBSRUdfVE9fQUhCX1NQRUVEKHJlZ192KSAqIDEwMDAwMDA7CisKKwlwcmludGsoS0VSTl9JTkZPICJCdXM6ICVkTUh6IiwgdGlja19yYXRlIC8gMTAwMDAwMCk7CisKKwl0aWNrX3JhdGUgLz0gNjsJCS8qIEFQQiBidXMgcnVuIEFIQiooMS82KSAqLworCisJc3dpdGNoKHJlZ192ICYgQ1BVX0FIQl9SQVRJT19NQVNLKSB7CisJY2FzZSBDUFVfQUhCXzFfMToKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKDEvMSlcbiIpOworCQlicmVhazsKKwljYXNlIENQVV9BSEJfM18yOgorCQlwcmludGsoS0VSTl9DT05UICIoMy8yKVxuIik7CisJCWJyZWFrOworCWNhc2UgQ1BVX0FIQl8yNF8xMzoKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKDI0LzEzKVxuIik7CisJCWJyZWFrOworCWNhc2UgQ1BVX0FIQl8yXzE6CisJCXByaW50ayhLRVJOX0NPTlQgIigyLzEpXG4iKTsKKwkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBNYWtlIGlycXMgaGFwcGVuIGZvciB0aGUgc3lzdGVtIHRpbWVyCisJICovCisJc2V0dXBfaXJxKElSUV9USU1FUjIsICZnZW1pbmlfdGltZXJfaXJxKTsKKwkvKiBTdGFydCB0aGUgdGltZXIgKi8KKwlfX3Jhd193cml0ZWwodGlja19yYXRlIC8gSFosIFRJTUVSX0NPVU5UKElPX0FERFJFU1MoR0VNSU5JX1RJTUVSMl9CQVNFKSkpOworCV9fcmF3X3dyaXRlbCh0aWNrX3JhdGUgLyBIWiwgVElNRVJfTE9BRChJT19BRERSRVNTKEdFTUlOSV9USU1FUjJfQkFTRSkpKTsKKwlfX3Jhd193cml0ZWwoVElNRVJfMl9DUl9FTkFCTEUgfCBUSU1FUl8yX0NSX0lOVCwgVElNRVJfQ1IoSU9fQUREUkVTUyhHRU1JTklfVElNRVJfQkFTRSkpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaDcyMHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZTRhN2M3Ni4uYTcwOGQyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1oNzIweC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTI1LDcgKzI1LDcgQEAKIH0KIAogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIF9faW5saW5lX18gdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCUNQVV9SRUcgKFBNVV9CQVNFLCBQTVVfU1RBVCkgfD0gUE1VX1dBUk1SRVNFVDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtaW14L2dlbmVyaWMuYwppbmRleCA4ODdjYjIxLi4wNWYxNzM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvZ2VuZXJpYy5jCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vZXJybm8uaD4KLSNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvaW14LXJlZ3MuaD4KIApAQCAtMjQ1LDQzICsyNDQsOCBAQAogCWlteF9tbWNfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5mbzsKIH0KIAotc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBpbXhfZmJfaW5mbzsKLQotdm9pZCBfX2luaXQgc2V0X2lteF9mYl9pbmZvKHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSAqaGFyZF9pbXhfZmJfaW5mbykKLXsKLQltZW1jcHkoJmlteF9mYl9pbmZvLGhhcmRfaW14X2ZiX2luZm8sc2l6ZW9mKHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSkpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteGZiX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0CT0gMHgwMDIwNTAwMCwKLQkJLmVuZAk9IDB4MDAyMDUwRkYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBMQ0RDX0lOVCwKLQkJLmVuZAk9IExDRENfSU5ULAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHU2NCBmYl9kbWFfbWFzayA9IH4odTY0KTA7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteGZiX2RldmljZSA9IHsKLQkubmFtZQkJPSAiaW14LWZiIiwKLQkuaWQJCT0gMCwKLQkuZGV2CQk9IHsKLSAJCS5wbGF0Zm9ybV9kYXRhCT0gJmlteF9mYl9pbmZvLAotCQkuZG1hX21hc2sJPSAmZmJfZG1hX21hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCi0JfSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoaW14ZmJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBpbXhmYl9yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJmlteF9tbWNfZGV2aWNlLAotCSZpbXhmYl9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlteF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9pbXhmYi5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL2lteGZiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3MGQwZDkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL2lteGZiLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBtYWNoaW5lIHdoaWNoIHdlIGFyZSBydW5uaW5nIG9uLgotICovCi0KLSNkZWZpbmUgUENSX1RGVAkJKDEgPDwgMzEpCi0jZGVmaW5lIFBDUl9DT0xPUgkoMSA8PCAzMCkKLSNkZWZpbmUgUENSX1BCU0laXzEJKDAgPDwgMjgpCi0jZGVmaW5lIFBDUl9QQlNJWl8yCSgxIDw8IDI4KQotI2RlZmluZSBQQ1JfUEJTSVpfNAkoMiA8PCAyOCkKLSNkZWZpbmUgUENSX1BCU0laXzgJKDMgPDwgMjgpCi0jZGVmaW5lIFBDUl9CUElYXzEJKDAgPDwgMjUpCi0jZGVmaW5lIFBDUl9CUElYXzIJKDEgPDwgMjUpCi0jZGVmaW5lIFBDUl9CUElYXzQJKDIgPDwgMjUpCi0jZGVmaW5lIFBDUl9CUElYXzgJKDMgPDwgMjUpCi0jZGVmaW5lIFBDUl9CUElYXzEyCSg0IDw8IDI1KQotI2RlZmluZSBQQ1JfQlBJWF8xNgkoNCA8PCAyNSkKLSNkZWZpbmUgUENSX1BJWFBPTAkoMSA8PCAyNCkKLSNkZWZpbmUgUENSX0ZMTVBPTAkoMSA8PCAyMykKLSNkZWZpbmUgUENSX0xQUE9MCSgxIDw8IDIyKQotI2RlZmluZSBQQ1JfQ0xLUE9MCSgxIDw8IDIxKQotI2RlZmluZSBQQ1JfT0VQT0wJKDEgPDwgMjApCi0jZGVmaW5lIFBDUl9TQ0xLSURMRQkoMSA8PCAxOSkKLSNkZWZpbmUgUENSX0VORF9TRUwJKDEgPDwgMTgpCi0jZGVmaW5lIFBDUl9FTkRfQllURV9TV0FQICgxIDw8IDE3KQotI2RlZmluZSBQQ1JfUkVWX1ZTCSgxIDw8IDE2KQotI2RlZmluZSBQQ1JfQUNEX1NFTAkoMSA8PCAxNSkKLSNkZWZpbmUgUENSX0FDRCh4KQkoKCh4KSAmIDB4N2YpIDw8IDgpCi0jZGVmaW5lIFBDUl9TQ0xLX1NFTAkoMSA8PCA3KQotI2RlZmluZSBQQ1JfU0hBUlAJKDEgPDwgNikKLSNkZWZpbmUgUENSX1BDRCh4KQkoKHgpICYgMHgzZikKLQotI2RlZmluZSBQV01SX0NMUyh4KQkoKCh4KSAmIDB4MWZmKSA8PCAxNikKLSNkZWZpbmUgUFdNUl9MRE1TSwkoMSA8PCAxNSkKLSNkZWZpbmUgUFdNUl9TQ1IxCSgxIDw8IDEwKQotI2RlZmluZSBQV01SX1NDUjAJKDEgPDwgOSkKLSNkZWZpbmUgUFdNUl9DQ19FTgkoMSA8PCA4KQotI2RlZmluZSBQV01SX1BXKHgpCSgoeCkgJiAweGZmKQotCi0jZGVmaW5lIExTQ1IxX1BTX1JJU0VfREVMQVkoeCkgICAgKCgoeCkgJiAweDdmKSA8PCAyNikKLSNkZWZpbmUgTFNDUjFfQ0xTX1JJU0VfREVMQVkoeCkgICAoKCh4KSAmIDB4M2YpIDw8IDE2KQotI2RlZmluZSBMU0NSMV9SRVZfVE9HR0xFX0RFTEFZKHgpICgoKHgpICYgMHhmKSA8PCA4KQotI2RlZmluZSBMU0NSMV9HUkFZMih4KSAgICAgICAgICAgICgoKHgpICYgMHhmKSA8PCA0KQotI2RlZmluZSBMU0NSMV9HUkFZMSh4KSAgICAgICAgICAgICgoKHgpICYgMHhmKSkKLQotI2RlZmluZSBETUFDUl9CVVJTVAkoMSA8PCAzMSkKLSNkZWZpbmUgRE1BQ1JfSE0oeCkJKCgoeCkgJiAweGYpIDw8IDE2KQotI2RlZmluZSBETUFDUl9UTSh4KQkoKHgpICYgMHhmKQotCi1zdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgewotCXVfbG9uZwkJcGl4Y2xvY2s7Ci0KLQl1X3Nob3J0CQl4cmVzOwotCXVfc2hvcnQJCXlyZXM7Ci0KLQl1X2ludAkJbm9uc3RkOwotCXVfY2hhcgkJYnBwOwotCXVfY2hhcgkJaHN5bmNfbGVuOwotCXVfY2hhcgkJbGVmdF9tYXJnaW47Ci0JdV9jaGFyCQlyaWdodF9tYXJnaW47Ci0KLQl1X2NoYXIJCXZzeW5jX2xlbjsKLQl1X2NoYXIJCXVwcGVyX21hcmdpbjsKLQl1X2NoYXIJCWxvd2VyX21hcmdpbjsKLQl1X2NoYXIJCXN5bmM7Ci0KLQl1X2ludAkJY21hcF9ncmV5c2NhbGU6MSwKLQkJCWNtYXBfaW52ZXJzZToxLAotCQkJY21hcF9zdGF0aWM6MSwKLQkJCXVudXNlZDoyOTsKLQotCXVfaW50CQlwY3I7Ci0JdV9pbnQJCXB3bXI7Ci0JdV9pbnQJCWxzY3IxOwotCXVfaW50CQlkbWFjcjsKLQotCXVfY2hhciAqIGZpeGVkX3NjcmVlbl9jcHU7Ci0JZG1hX2FkZHJfdCBmaXhlZF9zY3JlZW5fZG1hOwotCi0Jdm9pZCAoKmxjZF9wb3dlcikoaW50KTsKLQl2b2lkICgqYmFja2xpZ2h0X3Bvd2VyKShpbnQpOwotfTsKLQotdm9pZCBzZXRfaW14X2ZiX2luZm8oc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhICopOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1pbXgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGFkZWU3ZTUuLjQ2ZDRjYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW14L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWlteC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTMyLDcgKzMyLDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1hcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK2FyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJY3B1X3Jlc2V0KDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggYzQ4NTM0NS4uZTE1NTFiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0zMiw3ICszMiw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyoKIAkgKiBUbyByZXNldCwgd2UgaGl0IHRoZSBvbi1ib2FyZCByZXNldCByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggZTAxMmJmMS4uNDJhZTI5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC01OSw3ICs1OSwxMCBAQAogCX0pCiAKICNkZWZpbmUgX19hcmNoX3BhZ2VfdG9fZG1hKGRldiwgcGFnZSkJCQkJCVwKLQlfX2FyY2hfdmlydF90b19kbWEoZGV2LCBwYWdlX2FkZHJlc3MocGFnZSkpCisJKHsJCQkJCQkJCVwKKwkJLyogX19pc19sYnVzX3ZpcnQoKSBjYW4gbmV2ZXIgYmUgdHJ1ZSBmb3IgUkFNIHBhZ2VzICovCVwKKwkJKGRtYV9hZGRyX3QpcGFnZV90b19waHlzKHBhZ2UpOwkJCQlcCisJfSkKIAogI2VuZGlmIC8qIENPTkZJR19BUkNIX0lPUDEzWFggKi8KICNlbmRpZiAvKiAhQVNTRU1CTFkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWlvcDEzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGM3MTI3ZjQuLmQwYzY2ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMTN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AxM3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTMsNyArMTMsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qCiAJICogUmVzZXQgdGhlIGludGVybmFsIGJ1cyAod2FybmluZyBib3RoIGNvcmVzIGFyZSByZXNldCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAzMmQ5ZTViLi5hNGI4MDhmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNiw3ICsxNiw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDBjYjNhZDguLmYxOTJhMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTE0LDcgKzE0LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkqSU9QM1hYX1BDU1IgPSAweDMwOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1peHAyMDAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCAyZTljNjhmLi5kZTM3MDk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIwMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjAwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTE3LDcgKzE3LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1peHAyM3h4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBkNTdjM2ZjLi44OTIwZmYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDIzeHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwMjN4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTE5LDcgKzE5LDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkvKiBGaXJzdCB0cnkgbWFjaGluZSBzcGVjaWZpYyBzdXBwb3J0ICovCiAJaWYgKG1hY2hpbmVfaXNfaXhkcDIzNTEoKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCmluZGV4IGQ4MTZjNTEuLjcwYWZjZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMKQEAgLTM2Niw3ICszNjYsNyBAQAogfQogCiB2b2lkIF9faW5pdCBpeHA0eHhfcGNpX3ByZWluaXQodm9pZCkKLXsgIAorewogCXVuc2lnbmVkIGxvbmcgY3B1aWQgPSByZWFkX2NwdWlkX2lkKCk7CiAKIAkvKgpAQCAtMzg2LDE3ICszODYsMTcgQEAKIAogCXByX2RlYnVnKCJzZXR1cCBQQ0ktQUhCKGluYm91bmQpIGFuZCBBSEItUENJKG91dGJvdW5kKSBhZGRyZXNzIG1hcHBpbmdzXG4iKTsKIAotCS8qIAorCS8qCiAJICogV2UgdXNlIGlkZW50aXR5IEFIQi0+UENJIGFkZHJlc3MgdHJhbnNsYXRpb24KIAkgKiBpbiB0aGUgMHg0ODAwMDAwMCB0byAweDRiZmZmZmZmIGFkZHJlc3Mgc3BhY2UKIAkgKi8KIAkqUENJX1BDSU1FTUJBU0UgPSAweDQ4NDk0QTRCOwogCi0JLyogCisJLyoKIAkgKiBXZSBhbHNvIHVzZSBpZGVudGl0eSBQQ0ktPkFIQiBhZGRyZXNzIHRyYW5zbGF0aW9uCiAJICogaW4gNCAxNk1CIEJBUnMgdGhhdCBiZWdpbiBhdCB0aGUgcGh5c2ljYWwgbWVtb3J5IHN0YXJ0CiAJICovCi0JKlBDSV9BSEJNRU1CQVNFID0gKFBIWVNfT0ZGU0VUICYgMHhGRjAwMDAwMCkgKyAKKwkqUENJX0FIQk1FTUJBU0UgPSAoUEhZU19PRkZTRVQgJiAweEZGMDAwMDAwKSArCiAJCSgoUEhZU19PRkZTRVQgJiAweEZGMDAwMDAwKSA+PiA4KSArCiAJCSgoUEhZU19PRkZTRVQgJiAweEZGMDAwMDAwKSA+PiAxNikgKwogCQkoKFBIWVNfT0ZGU0VUICYgMHhGRjAwMDAwMCkgPj4gMjQpICsKQEAgLTQwOCwxOCArNDA4LDE5IEBACiAJCXByX2RlYnVnKCJzZXR1cCBCQVJzIGluIGNvbnRyb2xsZXJcbiIpOwogCiAJCS8qCi0JCSAqIFdlIGNvbmZpZ3VyZSB0aGUgUENJIGluYm91bmQgbWVtb3J5IHdpbmRvd3MgdG8gYmUgCisJCSAqIFdlIGNvbmZpZ3VyZSB0aGUgUENJIGluYm91bmQgbWVtb3J5IHdpbmRvd3MgdG8gYmUKIAkJICogMToxIG1hcHBlZCB0byBTRFJBTQogCQkgKi8KLQkJbG9jYWxfd3JpdGVfY29uZmlnKFBDSV9CQVNFX0FERFJFU1NfMCwgNCwgUEhZU19PRkZTRVQgKyAweDAwMDAwMDAwKTsKLQkJbG9jYWxfd3JpdGVfY29uZmlnKFBDSV9CQVNFX0FERFJFU1NfMSwgNCwgUEhZU19PRkZTRVQgKyAweDAxMDAwMDAwKTsKLQkJbG9jYWxfd3JpdGVfY29uZmlnKFBDSV9CQVNFX0FERFJFU1NfMiwgNCwgUEhZU19PRkZTRVQgKyAweDAyMDAwMDAwKTsKLQkJbG9jYWxfd3JpdGVfY29uZmlnKFBDSV9CQVNFX0FERFJFU1NfMywgNCwgUEhZU19PRkZTRVQgKyAweDAzMDAwMDAwKTsKKwkJbG9jYWxfd3JpdGVfY29uZmlnKFBDSV9CQVNFX0FERFJFU1NfMCwgNCwgUEhZU19PRkZTRVQpOworCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU18xLCA0LCBQSFlTX09GRlNFVCArIFNaXzE2TSk7CisJCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQkFTRV9BRERSRVNTXzIsIDQsIFBIWVNfT0ZGU0VUICsgU1pfMzJNKTsKKwkJbG9jYWxfd3JpdGVfY29uZmlnKFBDSV9CQVNFX0FERFJFU1NfMywgNCwgUEhZU19PRkZTRVQgKyBTWl80OE0pOwogCiAJCS8qCi0JCSAqIEVuYWJsZSBDU1Igd2luZG93IGF0IDB4ZmYwMDAwMDAuCisJCSAqIEVuYWJsZSBDU1Igd2luZG93IGF0IDY0IE1pQiB0byBhbGxvdyBQQ0kgbWFzdGVycworCQkgKiB0byBjb250aW51ZSBwcmVmZXRjaGluZyBwYXN0IDY0IE1pQiBib3VuZGFyeS4KIAkJICovCi0JCWxvY2FsX3dyaXRlX2NvbmZpZyhQQ0lfQkFTRV9BRERSRVNTXzQsIDQsIDB4ZmYwMDAwMDgpOworCQlsb2NhbF93cml0ZV9jb25maWcoUENJX0JBU0VfQUREUkVTU180LCA0LCBQSFlTX09GRlNFVCArIFNaXzY0TSk7CiAKIAkJLyoKIAkJICogRW5hYmxlIHRoZSBJTyB3aW5kb3cgdG8gYmUgd2F5IHVwIGhpZ2gsIGF0IDB4ZmZmZmZjMDAKQEAgLTUwMCw3ICs1MDEsNyBAQAogCXJldHVybiAxOwogfQogCi1zdHJ1Y3QgcGNpX2J1cyAqaXhwNHh4X3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQorc3RydWN0IHBjaV9idXMgKiBfX2RldmluaXQgaXhwNHh4X3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQogewogCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJml4cDR4eF9vcHMsIHN5cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvY3B1LmgKaW5kZXggNTFiZDY5Yy4uZGVmNzc3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2NwdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtMTcsMjYgKzE3LDMxIEBACiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KIAogLyogUHJvY2Vzc29yIGlkIHZhbHVlIGluIENQMTUgUmVnaXN0ZXIgMCAqLwotI2RlZmluZSBJWFA0MjVfUFJPQ0VTU09SX0lEX1ZBTFVFCTB4NjkwNTQxYzAKLSNkZWZpbmUgSVhQNDM1X1BST0NFU1NPUl9JRF9WQUxVRQkweDY5MDU0MDQwCi0jZGVmaW5lIElYUDQ2NV9QUk9DRVNTT1JfSURfVkFMVUUJMHg2OTA1NDIwMAotI2RlZmluZSBJWFA0WFhfUFJPQ0VTU09SX0lEX01BU0sJMHhmZmZmZmZmMAorI2RlZmluZSBJWFA0MlhfUFJPQ0VTU09SX0lEX1ZBTFVFCTB4NjkwNTQxYzAgLyogaW5jbHVkaW5nIHVudXNlZCAweDY5MDU0MUV4ICovCisjZGVmaW5lIElYUDQyWF9QUk9DRVNTT1JfSURfTUFTSwkweGZmZmZmZmMwCiAKLSNkZWZpbmUgY3B1X2lzX2l4cDQyeCgpCSgocmVhZF9jcHVpZF9pZCgpICYgSVhQNFhYX1BST0NFU1NPUl9JRF9NQVNLKSA9PSBcCi0JCQkgIElYUDQyNV9QUk9DRVNTT1JfSURfVkFMVUUpCi0jZGVmaW5lIGNwdV9pc19peHA0M3goKQkoKHJlYWRfY3B1aWRfaWQoKSAmIElYUDRYWF9QUk9DRVNTT1JfSURfTUFTSykgPT0gXAotCQkJICBJWFA0MzVfUFJPQ0VTU09SX0lEX1ZBTFVFKQotI2RlZmluZSBjcHVfaXNfaXhwNDZ4KCkJKChyZWFkX2NwdWlkX2lkKCkgJiBJWFA0WFhfUFJPQ0VTU09SX0lEX01BU0spID09IFwKLQkJCSAgSVhQNDY1X1BST0NFU1NPUl9JRF9WQUxVRSkKKyNkZWZpbmUgSVhQNDNYX1BST0NFU1NPUl9JRF9WQUxVRQkweDY5MDU0MDQwCisjZGVmaW5lIElYUDQzWF9QUk9DRVNTT1JfSURfTUFTSwkweGZmZmZmZmYwCisKKyNkZWZpbmUgSVhQNDZYX1BST0NFU1NPUl9JRF9WQUxVRQkweDY5MDU0MjAwIC8qIGluY2x1ZGluZyBJWFA0NTUgKi8KKyNkZWZpbmUgSVhQNDZYX1BST0NFU1NPUl9JRF9NQVNLCTB4ZmZmZmZmZjAKKworI2RlZmluZSBjcHVfaXNfaXhwNDJ4KCkJKChyZWFkX2NwdWlkX2lkKCkgJiBJWFA0MlhfUFJPQ0VTU09SX0lEX01BU0spID09IFwKKwkJCSBJWFA0MlhfUFJPQ0VTU09SX0lEX1ZBTFVFKQorI2RlZmluZSBjcHVfaXNfaXhwNDN4KCkJKChyZWFkX2NwdWlkX2lkKCkgJiBJWFA0M1hfUFJPQ0VTU09SX0lEX01BU0spID09IFwKKwkJCSBJWFA0M1hfUFJPQ0VTU09SX0lEX1ZBTFVFKQorI2RlZmluZSBjcHVfaXNfaXhwNDZ4KCkJKChyZWFkX2NwdWlkX2lkKCkgJiBJWFA0NlhfUFJPQ0VTU09SX0lEX01BU0spID09IFwKKwkJCSBJWFA0NlhfUFJPQ0VTU09SX0lEX1ZBTFVFKQogCiBzdGF0aWMgaW5saW5lIHUzMiBpeHA0eHhfcmVhZF9mZWF0dXJlX2JpdHModm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgdmFsID0gfipJWFA0WFhfRVhQX0NGRzI7Ci0JdmFsICY9IH5JWFA0WFhfRkVBVFVSRV9SRVNFUlZFRDsKLQlpZiAoIWNwdV9pc19peHA0NngoKSkKLQkJdmFsICY9IH5JWFA0WFhfRkVBVFVSRV9JWFA0NlhfT05MWTsKIAotCXJldHVybiB2YWw7CisJaWYgKGNwdV9pc19peHA0MngoKSkKKwkJcmV0dXJuIHZhbCAmIElYUDQyWF9GRUFUVVJFX01BU0s7CisJaWYgKGNwdV9pc19peHA0M3goKSkKKwkJcmV0dXJuIHZhbCAmIElYUDQzWF9GRUFUVVJFX01BU0s7CisJcmV0dXJuIHZhbCAmIElYUDQ2WF9GRUFUVVJFX01BU0s7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpeHA0eHhfd3JpdGVfZmVhdHVyZV9iaXRzKHUzMiB2YWx1ZSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9peHA0eHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2l4cDR4eC1yZWdzLmgKaW5kZXggYWQ5Yzg4OC4uOTdjNTMwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2l4cDR4eC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2l4cDR4eC1yZWdzLmgKQEAgLTYwNCw2ICs2MDQsNyBAQAogI2RlZmluZSBEQ01EX0xFTkdUSAkweDAxZmZmCQkvKiBsZW5ndGggbWFzayAobWF4ID0gOEsgLSAxKSAqLwogCiAvKiAiZnVzZSIgYml0cyBvZiBJWFBfRVhQX0NGRzIgKi8KKy8qIEFsbCBJWFA0eHggQ1BVcyAqLwogI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9SQ09NUAkJKDEgPDwgMCkKICNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfVVNCX0RFVklDRQkoMSA8PCAxKQogI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9IQVNICQkoMSA8PCAyKQpAQCAtNjE5LDIwICs2MjAsNDEgQEAKICNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfUkVTRVRfTlBFQgkoMSA8PCAxMikKICNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfUkVTRVRfTlBFQwkoMSA8PCAxMykKICNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfUENJCQkoMSA8PCAxNCkKLSNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfRUNDX1RJTUVTWU5DCSgxIDw8IDE1KQogI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9VVE9QSUFfUEhZX0xJTUlUCSgzIDw8IDE2KQorI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9YU0NBTEVfTUFYX0ZSRVEJKDMgPDwgMjIpCisjZGVmaW5lIElYUDQyWF9GRUFUVVJFX01BU0sJCShJWFA0WFhfRkVBVFVSRV9SQ09NUCAgICAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfVVNCX0RFVklDRSAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX0hBU0ggICAgICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9BRVMgICAgICAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfREVTICAgICAgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX0hETEMgICAgICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9BQUwgICAgICAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfSFNTICAgICAgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX1VUT1BJQSAgICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9OUEVCX0VUSDAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfTlBFQ19FVEggICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX1JFU0VUX05QRUEgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9SRVNFVF9OUEVCICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfUkVTRVRfTlBFQyAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX1BDSSAgICAgICAgICAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9VVE9QSUFfUEhZX0xJTUlUIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfWFNDQUxFX01BWF9GUkVRKQorCisKKy8qIElYUDQzeC80NnggQ1BVcyAqLworI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9FQ0NfVElNRVNZTkMJKDEgPDwgMTUpCiAjZGVmaW5lIElYUDRYWF9GRUFUVVJFX1VTQl9IT1NUCQkoMSA8PCAxOCkKICNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfTlBFQV9FVEgJCSgxIDw8IDE5KQorI2RlZmluZSBJWFA0M1hfRkVBVFVSRV9NQVNLCQkoSVhQNDJYX0ZFQVRVUkVfTUFTSyAgICAgICAgICAgICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX0VDQ19USU1FU1lOQyAgICAgfCBcCisJCQkJCSBJWFA0WFhfRkVBVFVSRV9VU0JfSE9TVCAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfTlBFQV9FVEgpCisKKy8qIElYUDQ2eCBDUFUgKGluY2x1ZGluZyBJWFA0NTUpIG9ubHkgKi8KICNkZWZpbmUgSVhQNFhYX0ZFQVRVUkVfTlBFQl9FVEhfMV9UT18zCSgxIDw8IDIwKQogI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9SU0EJCSgxIDw8IDIxKQotI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9YU0NBTEVfTUFYX0ZSRVEJKDMgPDwgMjIpCi0jZGVmaW5lIElYUDRYWF9GRUFUVVJFX1JFU0VSVkVECQkoMHhGRiA8PCAyNCkKLQotI2RlZmluZSBJWFA0WFhfRkVBVFVSRV9JWFA0NlhfT05MWSAoSVhQNFhYX0ZFQVRVUkVfRUNDX1RJTUVTWU5DIHwJXAotCQkJCSAgICBJWFA0WFhfRkVBVFVSRV9VU0JfSE9TVCB8CQlcCi0JCQkJICAgIElYUDRYWF9GRUFUVVJFX05QRUFfRVRIIHwJCVwKLQkJCQkgICAgSVhQNFhYX0ZFQVRVUkVfTlBFQl9FVEhfMV9UT18zIHwJXAotCQkJCSAgICBJWFA0WFhfRkVBVFVSRV9SU0EgfAkJXAotCQkJCSAgICBJWFA0WFhfRkVBVFVSRV9YU0NBTEVfTUFYX0ZSRVEpCisjZGVmaW5lIElYUDQ2WF9GRUFUVVJFX01BU0sJCShJWFA0M1hfRkVBVFVSRV9NQVNLICAgICAgICAgICAgIHwgXAorCQkJCQkgSVhQNFhYX0ZFQVRVUkVfTlBFQl9FVEhfMV9UT18zICB8IFwKKwkJCQkJIElYUDRYWF9GRUFUVVJFX1JTQSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggOTJhN2U4ZC4uZDJhYTI2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjAsNyArMjAsNyBAQAogfQogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWlmICggMSAmJiBtb2RlID09ICdzJykgewogCQkvKiBKdW1wIGludG8gUk9NIGF0IGFkZHJlc3MgMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X25wZS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X25wZS5jCmluZGV4IGM3M2E5NGQuLjI1MjMxMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4cDR4eF9ucGUuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfbnBlLmMKQEAgLTU3NSw4ICs1NzUsOCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgaW1hZ2UtPnNpemU7IGkrKykKIAkJCWltYWdlLT5kYXRhW2ldID0gc3dhYjMyKGltYWdlLT5kYXRhW2ldKTsKIAotCWlmICghY3B1X2lzX2l4cDQ2eCgpICYmICgoaW1hZ2UtPmlkID4+IDI4KSAmIDB4RiAvKiBkZXZpY2UgSUQgKi8pKSB7Ci0JCXByaW50X25wZShLRVJOX0lORk8sIG5wZSwgIklYUDQ2eCBmaXJtd2FyZSBpZ25vcmVkIG9uICIKKwlpZiAoY3B1X2lzX2l4cDQyeCgpICYmICgoaW1hZ2UtPmlkID4+IDI4KSAmIDB4RiAvKiBkZXZpY2UgSUQgKi8pKSB7CisJCXByaW50X25wZShLRVJOX0lORk8sIG5wZSwgIklYUDQzeC9JWFA0NnggZmlybXdhcmUgaWdub3JlZCBvbiAiCiAJCQkgICJJWFA0MnhcbiIpOwogCQlnb3RvIGVycjsKIAl9CkBAIC01OTYsNyArNTk2LDcgQEAKIAkJICAicmV2aXNpb24gMHglWDolWFxuIiwgKGltYWdlLT5pZCA+PiAxNikgJiAweEZGLAogCQkgIChpbWFnZS0+aWQgPj4gOCkgJiAweEZGLCBpbWFnZS0+aWQgJiAweEZGKTsKIAotCWlmICghY3B1X2lzX2l4cDQ2eCgpKSB7CisJaWYgKGNwdV9pc19peHA0MngoKSkgewogCQlpZiAoIW5wZS0+aWQpCiAJCQlpbnN0cl9zaXplID0gTlBFX0FfNDJYX0lOU1RSX1NJWkU7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZwppbmRleCAzNjAwY2Q5Li5iNTQyMWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnCkBAIC0yMCw2ICsyMCwxOCBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCiAJICBNYXJ2ZWxsIFJELTg4RjYyODEgUmVmZXJlbmNlIEJvYXJkLgogCitjb25maWcgTUFDSF9TSEVFVkFQTFVHCisJYm9vbCAiTWFydmVsbCBTaGVldmFQbHVnIFJlZmVyZW5jZSBCb2FyZCIKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKKwkgIE1hcnZlbGwgU2hlZXZhUGx1ZyBSZWZlcmVuY2UgQm9hcmQuCisKK2NvbmZpZyBNQUNIX1RTMjE5CisJYm9vbCAiUU5BUCBUUy0xMTkgYW5kIFRTLTIxOSBUdXJibyBOQVMiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBRTkFQIFRTLTExOSBhbmQgVFMtMjE5IFR1cmJvIE5BUyBkZXZpY2VzLgorCiBlbmRtZW51CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZQppbmRleCBiOTZjNTVkLi44ZjAzYzliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUKQEAgLTEsNSArMSw3IEBACi1vYmoteQkJCQkrPSBjb21tb24ubyBhZGRyLW1hcC5vIGlycS5vIHBjaWUubworb2JqLXkJCQkJKz0gY29tbW9uLm8gYWRkci1tYXAubyBpcnEubyBwY2llLm8gbXBwLm8KIAogb2JqLSQoQ09ORklHX01BQ0hfREI4OEY2MjgxX0JQKQkJKz0gZGI4OGY2MjgxLWJwLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX1JEODhGNjE5Ml9OQVMpCSs9IHJkODhmNjE5Mi1uYXMtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfUkQ4OEY2MjgxKQkJKz0gcmQ4OGY2MjgxLXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX1NIRUVWQVBMVUcpCQkrPSBzaGVldmFwbHVnLXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX1RTMjE5KQkJKz0gdHMyMTktc2V0dXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKaW5kZXggYjM0MDRiNy4uM2QyZmFlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KICNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CiAjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9vcmlvbl9zcGkuaD4KICNpbmNsdWRlIDxuZXQvZHNhLmg+CkBAIC0yNCw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bWFjaC9raXJrd29vZC5oPgogI2luY2x1ZGUgPHBsYXQvY2FjaGUtZmVyb2Nlb24tbDIuaD4KICNpbmNsdWRlIDxwbGF0L2VoY2ktb3Jpb24uaD4KKyNpbmNsdWRlIDxwbGF0L212c2Rpby5oPgogI2luY2x1ZGUgPHBsYXQvbXZfeG9yLmg+CiAjaW5jbHVkZSA8cGxhdC9vcmlvbl9uYW5kLmg+CiAjaW5jbHVkZSA8cGxhdC90aW1lLmg+CkBAIC0yMzEsMTQgKzIzMywxNyBAQAogCiB2b2lkIF9faW5pdCBraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqZCwgaW50IGlycSkKIHsKKwlpbnQgaTsKKwogCWlmIChpcnEgIT0gTk9fSVJRKSB7CiAJCWtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBpcnE7CiAJCWtpcmt3b29kX3N3aXRjaF9yZXNvdXJjZXNbMF0uZW5kID0gaXJxOwogCQlraXJrd29vZF9zd2l0Y2hfZGV2aWNlLm51bV9yZXNvdXJjZXMgPSAxOwogCX0KIAotCWQtPm1paV9idXMgPSAma2lya3dvb2RfZ2UwMF9zaGFyZWQuZGV2OwogCWQtPm5ldGRldiA9ICZraXJrd29vZF9nZTAwLmRldjsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+bnJfY2hpcHM7IGkrKykKKwkJZC0+Y2hpcFtpXS5taWlfYnVzID0gJmtpcmt3b29kX2dlMDBfc2hhcmVkLmRldjsKIAlraXJrd29vZF9zd2l0Y2hfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gZDsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma2lya3dvb2Rfc3dpdGNoX2RldmljZSk7CkBAIC0yNTQsNyArMjU5LDcgQEAKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLXZvaWQgX19pbml0IGtpcmt3b29kX3J0Y19pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQga2lya3dvb2RfcnRjX2luaXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJydGMtbXYiLCAtMSwgJmtpcmt3b29kX3J0Y19yZXNvdXJjZSwgMSk7CiB9CkBAIC0yOTYsNiArMzAxLDUwIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTRC9TRElPL01NQworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG12c2Rpb19yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFNESU9fUEhZU19CQVNFLAorCQkuZW5kCT0gU0RJT19QSFlTX0JBU0UgKyBTWl8xSyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfS0lSS1dPT0RfU0RJTywKKwkJLmVuZAk9IElSUV9LSVJLV09PRF9TRElPLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCBtdnNkaW9fZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga2lya3dvb2Rfc2RpbyA9IHsKKwkubmFtZQkJPSAibXZzZGlvIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzayA9ICZtdnNkaW9fZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdnNkaW9fcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtdnNkaW9fcmVzb3VyY2VzLAorfTsKKwordm9pZCBfX2luaXQga2lya3dvb2Rfc2Rpb19pbml0KHN0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSAqbXZzZGlvX2RhdGEpCit7CisJdTMyIGRldiwgcmV2OworCisJa2lya3dvb2RfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKwlpZiAocmV2ID09IDApICAvKiBjYXRjaCBhbGwgS2lya3dvb2QgWjAncyAqLworCQltdnNkaW9fZGF0YS0+Y2xvY2sgPSAxMDAwMDAwMDA7CisJZWxzZQorCQltdnNkaW9fZGF0YS0+Y2xvY2sgPSAyMDAwMDAwMDA7CisJbXZzZGlvX2RhdGEtPmRyYW0gPSAma2lya3dvb2RfbWJ1c19kcmFtX2luZm87CisJa2lya3dvb2Rfc2Rpby5kZXYucGxhdGZvcm1fZGF0YSA9IG12c2Rpb19kYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigma2lya3dvb2Rfc2Rpbyk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTUEkKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCBvcmlvbl9zcGlfaW5mbyBraXJrd29vZF9zcGlfcGxhdF9kYXRhID0gewpAQCAtMzI2LDYgKzM3NSw0NSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSTJDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgbXY2NHh4eF9pMmNfcGRhdGEga2lya3dvb2RfaTJjX3BkYXRhID0geworCS5mcmVxX20JCT0gOCwgLyogYXNzdW1lcyAxNjYgTUh6IFRDTEsgKi8KKwkuZnJlcV9uCQk9IDMsCisJLnRpbWVvdXQJPSAxMDAwLCAvKiBEZWZhdWx0IHRpbWVvdXQgb2YgMSBzZWNvbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga2lya3dvb2RfaTJjX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiaTJjIiwKKwkJLnN0YXJ0CT0gSTJDX1BIWVNfQkFTRSwKKwkJLmVuZAk9IEkyQ19QSFlTX0JBU0UgKyAweDFmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5uYW1lCT0gImkyYyIsCisJCS5zdGFydAk9IElSUV9LSVJLV09PRF9UV1NJLAorCQkuZW5kCT0gSVJRX0tJUktXT09EX1RXU0ksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBraXJrd29vZF9pMmMgPSB7CisJLm5hbWUJCT0gTVY2NFhYWF9JMkNfQ1RMUl9OQU1FLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShraXJrd29vZF9pMmNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBraXJrd29vZF9pMmNfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZraXJrd29vZF9pMmNfcGRhdGEsCisJfSwKK307CisKK3ZvaWQgX19pbml0IGtpcmt3b29kX2kyY19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZraXJrd29vZF9pMmMpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVUFSVDAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBraXJrd29vZF91YXJ0MF9kYXRhW10gPSB7CkBAIC01MDIsNyArNTkwLDcgQEAKIAl9LAogfTsKIAotdm9pZCBfX2luaXQga2lya3dvb2RfeG9yMF9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQga2lya3dvb2RfeG9yMF9pbml0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZraXJrd29vZF94b3IwX3NoYXJlZCk7CiAKQEAgLTYwMCw3ICs2ODgsNyBAQAogCX0sCiB9OwogCi12b2lkIF9faW5pdCBraXJrd29vZF94b3IxX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBraXJrd29vZF94b3IxX2luaXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmtpcmt3b29kX3hvcjFfc2hhcmVkKTsKIApAQCAtNzA4LDQgKzc5Niw5IEBACiAjaWZkZWYgQ09ORklHX0NBQ0hFX0ZFUk9DRU9OX0wyCiAJa2lya3dvb2RfbDJfaW5pdCgpOwogI2VuZGlmCisKKwkvKiBpbnRlcm5hbCBkZXZpY2VzIHRoYXQgZXZlcnkgYm9hcmQgaGFzICovCisJa2lya3dvb2RfcnRjX2luaXQoKTsKKwlraXJrd29vZF94b3IwX2luaXQoKTsKKwlraXJrd29vZF94b3IxX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5oCmluZGV4IGZlMzY3YzEuLjZlZTg4NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uaApAQCAtMTQsNiArMTQsNyBAQAogc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhOwogc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGE7CiBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhOworc3RydWN0IG12c2Rpb19wbGF0Zm9ybV9kYXRhOwogCiAvKgogICogQmFzaWMgS2lya3dvb2QgaW5pdCBmdW5jdGlvbnMgdXNlZCBlYXJseSBieSBtYWNoaW5lLXNldHVwLgpAQCAtMzMsMTQgKzM0LDE0IEBACiB2b2lkIGtpcmt3b29kX2dlMDFfaW5pdChzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqZXRoX2RhdGEpOwogdm9pZCBraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqZCwgaW50IGlycSk7CiB2b2lkIGtpcmt3b29kX3BjaWVfaW5pdCh2b2lkKTsKLXZvaWQga2lya3dvb2RfcnRjX2luaXQodm9pZCk7CiB2b2lkIGtpcmt3b29kX3NhdGFfaW5pdChzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhICpzYXRhX2RhdGEpOwordm9pZCBraXJrd29vZF9zZGlvX2luaXQoc3RydWN0IG12c2Rpb19wbGF0Zm9ybV9kYXRhICptdnNkaW9fZGF0YSk7CiB2b2lkIGtpcmt3b29kX3NwaV9pbml0KHZvaWQpOwordm9pZCBraXJrd29vZF9pMmNfaW5pdCh2b2lkKTsKIHZvaWQga2lya3dvb2RfdWFydDBfaW5pdCh2b2lkKTsKIHZvaWQga2lya3dvb2RfdWFydDFfaW5pdCh2b2lkKTsKLXZvaWQga2lya3dvb2RfeG9yMF9pbml0KHZvaWQpOwotdm9pZCBraXJrd29vZF94b3IxX2luaXQodm9pZCk7CiAKK2V4dGVybiBpbnQga2lya3dvb2RfdGNsazsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGtpcmt3b29kX3RpbWVyOwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvZGI4OGY2MjgxLWJwLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2RiODhmNjI4MS1icC1zZXR1cC5jCmluZGV4IGExNGMyOTQuLjU1MDVkNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvZGI4OGY2MjgxLWJwLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9kYjg4ZjYyODEtYnAtc2V0dXAuYwpAQCAtMTEsMTggKzExLDU5IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CisjaW5jbHVkZSA8cGxhdC9vcmlvbl9uYW5kLmg+CisjaW5jbHVkZSA8cGxhdC9tdnNkaW8uaD4KICNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtcHAuaCIKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGRiODhmNjI4MV9uYW5kX3BhcnRzW10gPSB7CisJeworCQkubmFtZSA9ICJ1LWJvb3QiLAorCQkub2Zmc2V0ID0gMCwKKwkJLnNpemUgPSBTWl8xTQorCX0sIHsKKwkJLm5hbWUgPSAidUltYWdlIiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUgPSBTWl80TQorCX0sIHsKKwkJLm5hbWUgPSAicm9vdCIsCisJCS5vZmZzZXQgPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplID0gTVREUEFSVF9TSVpfRlVMTAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRiODhmNjI4MV9uYW5kX3Jlc291cmNlID0geworCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJCT0gS0lSS1dPT0RfTkFORF9NRU1fUEhZU19CQVNFLAorCS5lbmQJCT0gS0lSS1dPT0RfTkFORF9NRU1fUEhZU19CQVNFICsKKwkJCSAgS0lSS1dPT0RfTkFORF9NRU1fU0laRSAtIDEsCit9OworCitzdGF0aWMgc3RydWN0IG9yaW9uX25hbmRfZGF0YSBkYjg4ZjYyODFfbmFuZF9kYXRhID0geworCS5wYXJ0cwkJPSBkYjg4ZjYyODFfbmFuZF9wYXJ0cywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGRiODhmNjI4MV9uYW5kX3BhcnRzKSwKKwkuY2xlCQk9IDAsCisJLmFsZQkJPSAxLAorCS53aWR0aAkJPSA4LAorCS5jaGlwX2RlbGF5CT0gMjUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkYjg4ZjYyODFfbmFuZF9mbGFzaCA9IHsKKwkubmFtZQkJPSAib3Jpb25fbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkYjg4ZjYyODFfbmFuZF9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gJmRiODhmNjI4MV9uYW5kX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBkYjg4ZjYyODFfZ2UwMF9kYXRhID0gewogCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDgpLApAQCAtMzIsMTggKzczLDMyIEBACiAJLm5fcG9ydHMJPSAyLAogfTsKIAorc3RhdGljIHN0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSBkYjg4ZjYyODFfbXZzZGlvX2RhdGEgPSB7CisJLmdwaW9fd3JpdGVfcHJvdGVjdAk9IDM3LAorCS5ncGlvX2NhcmRfZGV0ZWN0CT0gMzgsCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGRiODhmNjI4MV9tcHBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlNUFAzN19HUElPLAorCU1QUDM4X0dQSU8sCisJMAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGRiODhmNjI4MV9pbml0KHZvaWQpCiB7CiAJLyoKIAkgKiBCYXNpYyBzZXR1cC4gTmVlZHMgdG8gYmUgY2FsbGVkIGVhcmx5LgogCSAqLwogCWtpcmt3b29kX2luaXQoKTsKKwlraXJrd29vZF9tcHBfY29uZihkYjg4ZjYyODFfbXBwX2NvbmZpZyk7CiAKIAlraXJrd29vZF9laGNpX2luaXQoKTsKIAlraXJrd29vZF9nZTAwX2luaXQoJmRiODhmNjI4MV9nZTAwX2RhdGEpOwotCWtpcmt3b29kX3J0Y19pbml0KCk7CiAJa2lya3dvb2Rfc2F0YV9pbml0KCZkYjg4ZjYyODFfc2F0YV9kYXRhKTsKIAlraXJrd29vZF91YXJ0MF9pbml0KCk7CisJa2lya3dvb2Rfc2Rpb19pbml0KCZkYjg4ZjYyODFfbXZzZGlvX2RhdGEpOworCQorCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGI4OGY2MjgxX25hbmRfZmxhc2gpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBkYjg4ZjYyODFfcGNpX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2luY2x1ZGUvbWFjaC9raXJrd29vZC5oCmluZGV4IGFkYTQ4MGMuLjM4Yzk4NjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL2tpcmt3b29kLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gva2lya3dvb2QuaApAQCAtOTMsNiArOTMsNyBAQAogI2RlZmluZSAgREVWSUNFX0lECQkoREVWX0JVU19WSVJUX0JBU0UgfCAweDAwMzQpCiAjZGVmaW5lICBSVENfUEhZU19CQVNFCQkoREVWX0JVU19QSFlTX0JBU0UgfCAweDAzMDApCiAjZGVmaW5lICBTUElfUEhZU19CQVNFCQkoREVWX0JVU19QSFlTX0JBU0UgfCAweDA2MDApCisjZGVmaW5lICBJMkNfUEhZU19CQVNFCQkoREVWX0JVU19QSFlTX0JBU0UgfCAweDEwMDApCiAjZGVmaW5lICBVQVJUMF9QSFlTX0JBU0UJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgyMDAwKQogI2RlZmluZSAgVUFSVDBfVklSVF9CQVNFCShERVZfQlVTX1ZJUlRfQkFTRSB8IDB4MjAwMCkKICNkZWZpbmUgIFVBUlQxX1BIWVNfQkFTRQkoREVWX0JVU19QSFlTX0JBU0UgfCAweDIxMDApCkBAIC0xMTYsNSArMTE3LDcgQEAKIAogI2RlZmluZSBTQVRBX1BIWVNfQkFTRQkJKEtJUktXT09EX1JFR1NfUEhZU19CQVNFIHwgMHg4MDAwMCkKIAorI2RlZmluZSBTRElPX1BIWVNfQkFTRQkJKEtJUktXT09EX1JFR1NfUEhZU19CQVNFIHwgMHg5MDAwMCkKKwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggODUxMGY2Yy4uMjNhMTkxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTE3LDcgKzE3LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkvKgogCSAqIEVuYWJsZSBzb2Z0IHJlc2V0IHRvIGFzc2VydCBSU1RPVVRuLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNjNDQ5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmMKKyAqCisgKiBNUFAgZnVuY3Rpb25zIGZvciBNYXJ2ZWxsIEtpcmt3b29kIFNvQ3MKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIm1wcC5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBraXJrd29vZF92YXJpYW50KHZvaWQpCit7CisJdTMyIGRldiwgcmV2OworCisJa2lya3dvb2RfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKworCWlmIChkZXYgPT0gTVY4OEY2MjgxX0RFVl9JRCAmJiByZXYgPj0gTVY4OEY2MjgxX1JFVl9BMCkKKwkJcmV0dXJuIE1QUF9GNjI4MV9NQVNLOworCWlmIChkZXYgPT0gTVY4OEY2MTkyX0RFVl9JRCAmJiByZXYgPj0gTVY4OEY2MTkyX1JFVl9BMCkKKwkJcmV0dXJuIE1QUF9GNjE5Ml9NQVNLOworCWlmIChkZXYgPT0gTVY4OEY2MTgwX0RFVl9JRCkKKwkJcmV0dXJuIE1QUF9GNjE4MF9NQVNLOworCisJcHJpbnRrKEtFUk5fRVJSICJNUFAgc2V0dXA6IHVua25vd24ga2lya3dvb2QgdmFyaWFudCAiCisJCQkiKGRldiAlI3ggcmV2ICUjeClcbiIsIGRldiwgcmV2KTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBNUFBfQ1RSTChpKQkoREVWX0JVU19WSVJUX0JBU0UgKyAoaSkgKiA0KQorI2RlZmluZSBNUFBfTlJfUkVHUwkoMSArIE1QUF9NQVgvOCkKKwordm9pZCBfX2luaXQga2lya3dvb2RfbXBwX2NvbmYodW5zaWduZWQgaW50ICptcHBfbGlzdCkKK3sKKwl1MzIgbXBwX2N0cmxbTVBQX05SX1JFR1NdOworCXVuc2lnbmVkIGludCB2YXJpYW50X21hc2s7CisJaW50IGk7CisKKwl2YXJpYW50X21hc2sgPSBraXJrd29vZF92YXJpYW50KCk7CisJaWYgKCF2YXJpYW50X21hc2spCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHICJpbml0aWFsIE1QUCByZWdzOiIpOworCWZvciAoaSA9IDA7IGkgPCBNUFBfTlJfUkVHUzsgaSsrKSB7CisJCW1wcF9jdHJsW2ldID0gcmVhZGwoTVBQX0NUUkwoaSkpOworCQlwcmludGsoIiAlMDh4IiwgbXBwX2N0cmxbaV0pOworCX0KKwlwcmludGsoIlxuIik7CisKKwl3aGlsZSAoKm1wcF9saXN0KSB7CisJCXVuc2lnbmVkIGludCBudW0gPSBNUFBfTlVNKCptcHBfbGlzdCk7CisJCXVuc2lnbmVkIGludCBzZWwgPSBNUFBfU0VMKCptcHBfbGlzdCk7CisJCWludCBzaGlmdCwgZ3Bpb19tb2RlOworCisJCWlmIChudW0gPiBNUFBfTUFYKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImtpcmt3b29kX21wcF9jb25mOiBpbnZhbGlkIE1QUCAiCisJCQkJCSJudW1iZXIgKCV1KVxuIiwgbnVtKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghKCptcHBfbGlzdCAmIHZhcmlhbnRfbWFzaykpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAia2lya3dvb2RfbXBwX2NvbmY6IHJlcXVlc3RlZCBNUFAldSBjb25maWcgIgorCQkJICAgICAgICJ1bmF2YWlsYWJsZSBvbiB0aGlzIGhhcmR3YXJlXG4iLCBudW0pOworCQkJY29udGludWU7CisJCX0KKworCQlzaGlmdCA9IChudW0gJiA3KSA8PCAyOworCQltcHBfY3RybFtudW0gLyA4XSAmPSB+KDB4ZiA8PCBzaGlmdCk7CisJCW1wcF9jdHJsW251bSAvIDhdIHw9IHNlbCA8PCBzaGlmdDsKKworCQlncGlvX21vZGUgPSAwOworCQlpZiAoKm1wcF9saXN0ICYgTVBQX0lOUFVUX01BU0spCisJCQlncGlvX21vZGUgfD0gR1BJT19JTlBVVF9PSzsKKwkJaWYgKCptcHBfbGlzdCAmIE1QUF9PVVRQVVRfTUFTSykKKwkJCWdwaW9fbW9kZSB8PSBHUElPX09VVFBVVF9PSzsKKwkJaWYgKHNlbCAhPSAwKQorCQkJZ3Bpb19tb2RlID0gMDsKKwkJb3Jpb25fZ3Bpb19zZXRfdmFsaWQobnVtLCBncGlvX21vZGUpOworCisJCW1wcF9saXN0Kys7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiAgZmluYWwgTVBQIHJlZ3M6Iik7CisJZm9yIChpID0gMDsgaSA8IE1QUF9OUl9SRUdTOyBpKyspIHsKKwkJd3JpdGVsKG1wcF9jdHJsW2ldLCBNUFBfQ1RSTChpKSk7CisJCXByaW50aygiICUwOHgiLCBtcHBfY3RybFtpXSk7CisJfQorCXByaW50aygiXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbXBwLmggYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL21wcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjFhODAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL21wcC5oCkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9tcHAuaCAtLSBNdWx0aSBQdXJwb3NlIFBpbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOTogTWFydmVsbCBUZWNobm9sb2d5IEdyb3VwIEx0ZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fS0lSS1dPT0RfTVBQX0gKKyNkZWZpbmUgX19LSVJLV09PRF9NUFBfSAorCisjZGVmaW5lIE1QUChfbnVtLCBfc2VsLCBfaW4sIF9vdXQsIF9GNjE4MCwgX0Y2MTkwLCBfRjYxOTIsIF9GNjI4MSkgKCBcCisJLyogTVBQIG51bWJlciAqLwkJKChfbnVtKSAmIDB4ZmYpIHwgXAorCS8qIE1QUCBzZWxlY3QgdmFsdWUgKi8JCSgoKF9zZWwpICYgMHhmKSA8PCA4KSB8IFwKKwkvKiBtYXkgYmUgaW5wdXQgc2lnbmFsICovCSgoISEoX2luKSkgPDwgMTIpIHwgXAorCS8qIG1heSBiZSBvdXRwdXQgc2lnbmFsICovCSgoISEoX291dCkpIDw8IDEzKSB8IFwKKwkvKiBhdmFpbGFibGUgb24gRjYxODAgKi8JKCghIShfRjYxODApKSA8PCAxNCkgfCBcCisJLyogYXZhaWxhYmxlIG9uIEY2MTkwICovCSgoISEoX0Y2MTkwKSkgPDwgMTUpIHwgXAorCS8qIGF2YWlsYWJsZSBvbiBGNjE5MiAqLwkoKCEhKF9GNjE5MikpIDw8IDE2KSB8IFwKKwkvKiBhdmFpbGFibGUgb24gRjYyODEgKi8JKCghIShfRjYyODEpKSA8PCAxNykpCisKKyNkZWZpbmUgTVBQX05VTSh4KQkoKHgpICYgMHhmZikKKyNkZWZpbmUgTVBQX1NFTCh4KQkoKCh4KSA+PiA4KSAmIDB4ZikKKworCQkJCS8qICAgbnVtIHNlbCAgaSAgbyAgNjE4MCA2MTkwIDYxOTIgNjI4MSAqLworCisjZGVmaW5lIE1QUF9JTlBVVF9NQVNLCQlNUFAoICAwLCAweDAsIDEsIDAsIDAsICAgMCwgICAwLCAgIDAgICAgKQorI2RlZmluZSBNUFBfT1VUUFVUX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMSwgMCwgICAwLCAgIDAsICAgMCAgICApCisKKyNkZWZpbmUgTVBQX0Y2MTgwX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMCwgMSwgICAwLCAgIDAsICAgMCAgICApCisjZGVmaW5lIE1QUF9GNjE5MF9NQVNLCQlNUFAoICAwLCAweDAsIDAsIDAsIDAsICAgMSwgICAwLCAgIDAgICAgKQorI2RlZmluZSBNUFBfRjYxOTJfTUFTSwkJTVBQKCAgMCwgMHgwLCAwLCAwLCAwLCAgIDAsICAgMSwgICAwICAgICkKKyNkZWZpbmUgTVBQX0Y2MjgxX01BU0sJCU1QUCggIDAsIDB4MCwgMCwgMCwgMCwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMF9HUElPCQlNUFAoICAwLCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAwX05GX0lPMgkJTVBQKCAgMCwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMF9TUElfU0NuCQlNUFAoICAwLCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDFfR1BPCQlNUFAoICAxLCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxX05GX0lPMwkJTVBQKCAgMSwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMV9TUElfTU9TSQkJTVBQKCAgMSwgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAyX0dQTwkJTVBQKCAgMiwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMl9ORl9JTzQJCU1QUCggIDIsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDJfU1BJX1NDSwkJTVBQKCAgMiwgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAzX0dQTwkJTVBQKCAgMywgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQM19ORl9JTzUJCU1QUCggIDMsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDNfU1BJX01JU08JCU1QUCggIDMsIDB4MiwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNF9HUElPCQlNUFAoICA0LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA0X05GX0lPNgkJTVBQKCAgNCwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQNF9VQVJUMF9SWEQJCU1QUCggIDQsIDB4MiwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDRfU0FUQTFfQUNUbgkJTVBQKCAgNCwgMHg1LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQNF9QVFBfQ0xLCQlNUFAoICA0LCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDVfR1BPCQlNUFAoICA1LCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA1X05GX0lPNwkJTVBQKCAgNSwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQNV9VQVJUMF9UWEQJCU1QUCggIDUsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDVfUFRQX1RSSUdfR0VOCU1QUCggIDUsIDB4NCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDVfU0FUQTBfQUNUbgkJTVBQKCAgNSwgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFA2X1NZU1JTVF9PVVRuCU1QUCggIDYsIDB4MSwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDZfU1BJX01PU0kJCU1QUCggIDYsIDB4MiwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDZfUFRQX1RSSUdfR0VOCU1QUCggIDYsIDB4MywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQN19HUE8JCU1QUCggIDcsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDdfUEVYX1JTVF9PVVRuCU1QUCggIDcsIDB4MSwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDdfU1BJX1NDbgkJTVBQKCAgNywgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQN19QVFBfVFJJR19HRU4JTVBQKCAgNywgMHgzLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFA4X0dQSU8JCU1QUCggIDgsIDB4MCwgMSwgMSwgMSwgICAgMSwgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDhfVFdfU0RBCQlNUFAoICA4LCAweDEsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA4X1VBUlQwX1JUUwkJTVBQKCAgOCwgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOF9VQVJUMV9SVFMJCU1QUCggIDgsIDB4MywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDhfTUlJMF9SWEVSUgkJTVBQKCAgOCwgMHg0LCAxLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOF9TQVRBMV9QUkVTRU5UbglNUFAoICA4LCAweDUsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA4X1BUUF9DTEsJCU1QUCggIDgsIDB4YywgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDhfTUlJMF9DT0wJCU1QUCggIDgsIDB4ZCwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQOV9HUElPCQlNUFAoICA5LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA5X1RXX1NDSwkJTVBQKCAgOSwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQOV9VQVJUMF9DVFMJCU1QUCggIDksIDB4MiwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDlfVUFSVDFfQ1RTCQlNUFAoICA5LCAweDMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA5X1NBVEEwX1BSRVNFTlRuCU1QUCggIDksIDB4NSwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDlfUFRQX0VWRU5UX1JFUQlNUFAoICA5LCAweGMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFA5X01JSTBfQ1JTCQlNUFAoICA5LCAweGQsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDEwX0dQTwkJTVBQKCAxMCwgMHgwLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTBfU1BJX1NDSwkJTVBQKCAxMCwgMHgyLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTBfVUFSVDBfVFhECQlNUFAoIDEwLCAwWDMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMF9TQVRBMV9BQ1RuCU1QUCggMTAsIDB4NSwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDEwX1BUUF9UUklHX0dFTglNUFAoIDEwLCAweGMsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDExX0dQSU8JCU1QUCggMTEsIDB4MCwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDExX1NQSV9NSVNPCQlNUFAoIDExLCAweDIsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxMV9VQVJUMF9SWEQJCU1QUCggMTEsIDB4MywgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDExX1BUUF9FVkVOVF9SRVEJTVBQKCAxMSwgMHg0LCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTFfUFRQX1RSSUdfR0VOCU1QUCggMTEsIDB4YywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDExX1BUUF9DTEsJCU1QUCggMTEsIDB4ZCwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDExX1NBVEEwX0FDVG4JTVBQKCAxMSwgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAxMl9HUE8JCU1QUCggMTIsIDB4MCwgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDEyX1NEX0NMSwkJTVBQKCAxMiwgMHgxLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAxM19HUElPCQlNUFAoIDEzLCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxM19TRF9DTUQJCU1QUCggMTMsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDEzX1VBUlQxX1RYRAkJTVBQKCAxMywgMHgzLCAwLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAxNF9HUElPCQlNUFAoIDE0LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNF9TRF9EMAkJTVBQKCAxNCwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTRfVUFSVDFfUlhECQlNUFAoIDE0LCAweDMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNF9TQVRBMV9QUkVTRU5UbglNUFAoIDE0LCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNF9NSUkwX0NPTAkJTVBQKCAxNCwgMHhkLCAxLCAwLCAxLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAxNV9HUElPCQlNUFAoIDE1LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNV9TRF9EMQkJTVBQKCAxNSwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTVfVUFSVDBfUlRTCQlNUFAoIDE1LCAweDIsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNV9VQVJUMV9UWEQJCU1QUCggMTUsIDB4MywgMCwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE1X1NBVEEwX0FDVG4JTVBQKCAxNSwgMHg0LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAxNl9HUElPCQlNUFAoIDE2LCAweDAsIDEsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNl9TRF9EMgkJTVBQKCAxNiwgMHgxLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTZfVUFSVDBfQ1RTCQlNUFAoIDE2LCAweDIsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxNl9VQVJUMV9SWEQJCU1QUCggMTYsIDB4MywgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE2X1NBVEExX0FDVG4JTVBQKCAxNiwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTZfTUlJMF9DUlMJCU1QUCggMTYsIDB4ZCwgMSwgMCwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMTdfR1BJTwkJTVBQKCAxNywgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMTdfU0RfRDMJCU1QUCggMTcsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDE3X1NBVEEwX1BSRVNFTlRuCU1QUCggMTcsIDB4NCwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMThfR1BPCQlNUFAoIDE4LCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxOF9ORl9JTzAJCU1QUCggMTgsIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMTlfR1BPCQlNUFAoIDE5LCAweDAsIDAsIDEsIDEsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAxOV9ORl9JTzEJCU1QUCggMTksIDB4MSwgMSwgMSwgMSwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMjBfR1BJTwkJTVBQKCAyMCwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjBfVFNNUDAJCU1QUCggMjAsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIwX1RETV9DSDBfVFhfUUwJTVBQKCAyMCwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjBfR0UxXzAJCU1QUCggMjAsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIwX0FVRElPX1NQRElGSQlNUFAoIDIwLCAweDQsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMF9TQVRBMV9BQ1RuCU1QUCggMjAsIDB4NSwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMjFfR1BJTwkJTVBQKCAyMSwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjFfVFNNUDEJCU1QUCggMjEsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIxX1RETV9DSDBfUlhfUUwJTVBQKCAyMSwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjFfR0UxXzEJCU1QUCggMjEsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIxX0FVRElPX1NQRElGTwlNUFAoIDIxLCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyMV9TQVRBMF9BQ1RuCU1QUCggMjEsIDB4NSwgMCwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMjJfR1BJTwkJTVBQKCAyMiwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjJfVFNNUDIJCU1QUCggMjIsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIyX1RETV9DSDJfVFhfUUwJTVBQKCAyMiwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjJfR0UxXzIJCU1QUCggMjIsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIyX0FVRElPX1NQRElGUk1LQ0xLCU1QUCggMjIsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIyX1NBVEExX1BSRVNFTlRuCU1QUCggMjIsIDB4NSwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMjNfR1BJTwkJTVBQKCAyMywgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjNfVFNNUDMJCU1QUCggMjMsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIzX1RETV9DSDJfUlhfUUwJTVBQKCAyMywgMHgyLCAxLCAwLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjNfR0UxXzMJCU1QUCggMjMsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDIzX0FVRElPX0kyU0JDTEsJTVBQKCAyMywgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjNfU0FUQTBfUFJFU0VOVG4JTVBQKCAyMywgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAyNF9HUElPCQlNUFAoIDI0LCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNF9UU01QNAkJTVBQKCAyNCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjRfVERNX1NQSV9DUzAJREVWKCAyNCwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjRfR0UxXzQJCU1QUCggMjQsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI0X0FVRElPX0kyU0RPCU1QUCggMjQsIDB4NCwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMjVfR1BJTwkJTVBQKCAyNSwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjVfVFNNUDUJCU1QUCggMjUsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI1X1RETV9TUElfU0NLCU1QUCggMjUsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI1X0dFMV81CQlNUFAoIDI1LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNV9BVURJT19JMlNMUkNMSwlNUFAoIDI1LCAweDQsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDI2X0dQSU8JCU1QUCggMjYsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI2X1RTTVA2CQlNUFAoIDI2LCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyNl9URE1fU1BJX01JU08JTVBQKCAyNiwgMHgyLCAxLCAwLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjZfR0UxXzYJCU1QUCggMjYsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI2X0FVRElPX0kyU01DTEsJTVBQKCAyNiwgMHg0LCAwLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAyN19HUElPCQlNUFAoIDI3LCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyN19UU01QNwkJTVBQKCAyNywgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjdfVERNX1NQSV9NT1NJCU1QUCggMjcsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI3X0dFMV83CQlNUFAoIDI3LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyN19BVURJT19JMlNESQlNUFAoIDI3LCAweDQsIDEsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDI4X0dQSU8JCU1QUCggMjgsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI4X1RTTVA4CQlNUFAoIDI4LCAweDEsIDEsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyOF9URE1fQ09ERUNfSU5UbglNUFAoIDI4LCAweDIsIDAsIDAsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAyOF9HRTFfOAkJTVBQKCAyOCwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjhfQVVESU9fRVhUQ0xLCU1QUCggMjgsIDB4NCwgMSwgMCwgMCwgICAwLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMjlfR1BJTwkJTVBQKCAyOSwgMHgwLCAxLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMjlfVFNNUDkJCU1QUCggMjksIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI5X1RETV9DT0RFQ19SU1RuCU1QUCggMjksIDB4MiwgMCwgMCwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDI5X0dFMV85CQlNUFAoIDI5LCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDMwX0dQSU8JCU1QUCggMzAsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMwX1RTTVAxMAkJTVBQKCAzMCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzBfVERNX1BDTEsJCU1QUCggMzAsIDB4MiwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMwX0dFMV8xMAkJTVBQKCAzMCwgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAzMV9HUElPCQlNUFAoIDMxLCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzMV9UU01QMTEJCU1QUCggMzEsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMxX1RETV9GUwkJTVBQKCAzMSwgMHgyLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzFfR0UxXzExCQlNUFAoIDMxLCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDMyX0dQSU8JCU1QUCggMzIsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMyX1RTTVAxMgkJTVBQKCAzMiwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzJfVERNX0RSWAkJTVBQKCAzMiwgMHgyLCAxLCAwLCAwLCAgIDAsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzJfR0UxXzEyCQlNUFAoIDMyLCAweDMsIDAsIDAsIDAsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDMzX0dQSU8JCU1QUCggMzMsIDB4MCwgMSwgMSwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMzX1RETV9EVFgJCU1QUCggMzMsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDMzX0dFMV8xMwkJTVBQKCAzMywgMHgzLCAwLCAwLCAwLCAgIDEsICAgMSwgICAxICAgICkKKworI2RlZmluZSBNUFAzNF9HUElPCQlNUFAoIDM0LCAweDAsIDEsIDEsIDAsICAgMSwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzNF9URE1fU1BJX0NTMQlNUFAoIDM0LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzNF9HRTFfMTQJCU1QUCggMzQsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisKKyNkZWZpbmUgTVBQMzVfR1BJTwkJTVBQKCAzNSwgMHgwLCAxLCAxLCAxLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzVfVERNX0NIMF9UWF9RTAlNUFAoIDM1LCAweDIsIDAsIDEsIDAsICAgMCwgICAxLCAgIDEgICAgKQorI2RlZmluZSBNUFAzNV9HRTFfMTUJCU1QUCggMzUsIDB4MywgMCwgMCwgMCwgICAxLCAgIDEsICAgMSAgICApCisjZGVmaW5lIE1QUDM1X1NBVEEwX0FDVG4JTVBQKCAzNSwgMHg1LCAwLCAxLCAwLCAgIDEsICAgMSwgICAxICAgICkKKyNkZWZpbmUgTVBQMzVfTUlJMF9SWEVSUglNUFAoIDM1LCAweGMsIDEsIDAsIDEsICAgMSwgICAxLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDM2X0dQSU8JCU1QUCggMzYsIDB4MCwgMSwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM2X1RTTVAwCQlNUFAoIDM2LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzNl9URE1fU1BJX0NTMQlNUFAoIDM2LCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzNl9BVURJT19TUERJRkkJTVBQKCAzNiwgMHg0LCAxLCAwLCAxLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFAzN19HUElPCQlNUFAoIDM3LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzN19UU01QMQkJTVBQKCAzNywgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzdfVERNX0NIMl9UWF9RTAlNUFAoIDM3LCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzN19BVURJT19TUERJRk8JTVBQKCAzNywgMHg0LCAwLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFAzOF9HUElPCQlNUFAoIDM4LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzOF9UU01QMgkJTVBQKCAzOCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQMzhfVERNX0NIMl9SWF9RTAlNUFAoIDM4LCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzOF9BVURJT19TUERJRlJNTENMSwlNUFAoIDM4LCAweDQsIDAsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDM5X0dQSU8JCU1QUCggMzksIDB4MCwgMSwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDM5X1RTTVAzCQlNUFAoIDM5LCAweDEsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzOV9URE1fU1BJX0NTMAlNUFAoIDM5LCAweDIsIDAsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFAzOV9BVURJT19JMlNCQ0xLCU1QUCggMzksIDB4NCwgMCwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNDBfR1BJTwkJTVBQKCA0MCwgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDBfVFNNUDQJCU1QUCggNDAsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQwX1RETV9TUElfU0NLCU1QUCggNDAsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQwX0FVRElPX0kyU0RPCU1QUCggNDAsIDB4NCwgMCwgMSwgMSwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNDFfR1BJTwkJTVBQKCA0MSwgMHgwLCAxLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDFfVFNNUDUJCU1QUCggNDEsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQxX1RETV9TUElfTUlTTwlNUFAoIDQxLCAweDIsIDEsIDAsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0MV9BVURJT19JMlNMUkMJTVBQKCA0MSwgMHg0LCAwLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFA0Ml9HUElPCQlNUFAoIDQyLCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0Ml9UU01QNgkJTVBQKCA0MiwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDJfVERNX1NQSV9NT1NJCU1QUCggNDIsIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQyX0FVRElPX0kyU01DTEsJTVBQKCA0MiwgMHg0LCAwLCAxLCAxLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFA0M19HUElPCQlNUFAoIDQzLCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0M19UU01QNwkJTVBQKCA0MywgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDNfVERNX0NPREVDX0lOVG4JTVBQKCA0MywgMHgyLCAwLCAwLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDNfQVVESU9fSTJTREkJTVBQKCA0MywgMHg0LCAxLCAwLCAxLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFA0NF9HUElPCQlNUFAoIDQ0LCAweDAsIDEsIDEsIDEsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0NF9UU01QOAkJTVBQKCA0NCwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDRfVERNX0NPREVDX1JTVG4JTVBQKCA0NCwgMHgyLCAwLCAwLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDRfQVVESU9fRVhUQ0xLCU1QUCggNDQsIDB4NCwgMSwgMCwgMSwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNDVfR1BJTwkJTVBQKCA0NSwgMHgwLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDVfVFNNUDkJCU1QUCggNDUsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ1X1RETV9QQ0xLCQlNUFAoIDQ1LCAweDIsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDQ2X0dQSU8JCU1QUCggNDYsIDB4MCwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ2X1RTTVAxMAkJTVBQKCA0NiwgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDZfVERNX0ZTCQlNUFAoIDQ2LCAweDIsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorCisjZGVmaW5lIE1QUDQ3X0dQSU8JCU1QUCggNDcsIDB4MCwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ3X1RTTVAxMQkJTVBQKCA0NywgMHgxLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDdfVERNX0RSWAkJTVBQKCA0NywgMHgyLCAxLCAwLCAwLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFA0OF9HUElPCQlNUFAoIDQ4LCAweDAsIDEsIDEsIDAsICAgMCwgICAwLCAgIDEgICAgKQorI2RlZmluZSBNUFA0OF9UU01QMTIJCU1QUCggNDgsIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ4X1RETV9EVFgJCU1QUCggNDguIDB4MiwgMCwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisKKyNkZWZpbmUgTVBQNDlfR1BJTwkJTVBQKCA0OSwgMHgwLCAxLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDlfVFNNUDkJCU1QUCggNDksIDB4MSwgMSwgMSwgMCwgICAwLCAgIDAsICAgMSAgICApCisjZGVmaW5lIE1QUDQ5X1RETV9DSDBfUlhfUUwJTVBQKCA0OSwgMHgyLCAwLCAxLCAwLCAgIDAsICAgMCwgICAxICAgICkKKyNkZWZpbmUgTVBQNDlfUFRQX0NMSwkJTVBQKCA0OSwgMHg1LCAxLCAwLCAwLCAgIDAsICAgMCwgICAxICAgICkKKworI2RlZmluZSBNUFBfTUFYCQkJNDkKKwordm9pZCBraXJrd29vZF9tcHBfY29uZih1bnNpZ25lZCBpbnQgKm1wcF9saXN0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MTkyLW5hcy1zZXR1cC5jCmluZGV4IGIxZDFhODdhLi4yZjBlNGVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjE5Mi1uYXMtc2V0dXAuYwpAQCAtMTEsMTEgKzExLDggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgpAQCAtMjMsNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9vcmlvbl9zcGkuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KICNpbmNsdWRlIDxtYWNoL2tpcmt3b29kLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKQEAgLTYxLDE0ICs1NywxMSBAQAogCiAJa2lya3dvb2RfZWhjaV9pbml0KCk7CiAJa2lya3dvb2RfZ2UwMF9pbml0KCZyZDg4ZjYxOTJfZ2UwMF9kYXRhKTsKLQlraXJrd29vZF9ydGNfaW5pdCgpOwogCWtpcmt3b29kX3NhdGFfaW5pdCgmcmQ4OGY2MTkyX3NhdGFfZGF0YSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocmQ4OEY2MTkyX3NwaV9zbGF2ZV9pbmZvLAogCQkJCUFSUkFZX1NJWkUocmQ4OEY2MTkyX3NwaV9zbGF2ZV9pbmZvKSk7CiAJa2lya3dvb2Rfc3BpX2luaXQoKTsKIAlraXJrd29vZF91YXJ0MF9pbml0KCk7Ci0Ja2lya3dvb2RfeG9yMF9pbml0KCk7Ci0Ja2lya3dvb2RfeG9yMV9pbml0KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHJkODhmNjE5Ml9wY2lfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvcmQ4OGY2MjgxLXNldHVwLmMKaW5kZXggOWEwZTkwNS4uMzFlOTk2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9yZDg4ZjYyODEtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3JkODhmNjI4MS1zZXR1cC5jCkBAIC0xMSwyMSArMTEsMjAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxuZXQvZHNhLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9raXJrd29vZC5oPgorI2luY2x1ZGUgPHBsYXQvbXZzZGlvLmg+CiAjaW5jbHVkZSA8cGxhdC9vcmlvbl9uYW5kLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibXBwLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiByZDg4ZjYyODFfbmFuZF9wYXJ0c1tdID0gewogCXsKQEAgLTc1LDcgKzc0LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjYyODFfc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgcmQ4OGY2MjgxX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMl0JPSAibGFuMyIsCkBAIC04Myw2ICs4MiwxMSBAQAogCS5wb3J0X25hbWVzWzVdCT0gImNwdSIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJnJkODhmNjI4MV9zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHJkODhmNjI4MV9nZTAxX2RhdGEgPSB7CiAJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoMTEpLAogfTsKQEAgLTkxLDYgKzk1LDE1IEBACiAJLm5fcG9ydHMJPSAyLAogfTsKIAorc3RhdGljIHN0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSByZDg4ZjYyODFfbXZzZGlvX2RhdGEgPSB7CisJLmdwaW9fY2FyZF9kZXRlY3QgPSAyOCwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcmQ4OGY2MjgxX21wcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCU1QUDI4X0dQSU8sCisJMAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHJkODhmNjI4MV9pbml0KHZvaWQpCiB7CiAJdTMyIGRldiwgcmV2OwpAQCAtOTksMjEgKzExMiwyMiBAQAogCSAqIEJhc2ljIHNldHVwLiBOZWVkcyB0byBiZSBjYWxsZWQgZWFybHkuCiAJICovCiAJa2lya3dvb2RfaW5pdCgpOworCWtpcmt3b29kX21wcF9jb25mKHJkODhmNjI4MV9tcHBfY29uZmlnKTsKIAogCWtpcmt3b29kX2VoY2lfaW5pdCgpOwogCiAJa2lya3dvb2RfZ2UwMF9pbml0KCZyZDg4ZjYyODFfZ2UwMF9kYXRhKTsKIAlraXJrd29vZF9wY2llX2lkKCZkZXYsICZyZXYpOwogCWlmIChyZXYgPT0gTVY4OEY2MjgxX1JFVl9BMCkgewotCQlyZDg4ZjYyODFfc3dpdGNoX2RhdGEuc3dfYWRkciA9IDEwOworCQlyZDg4ZjYyODFfc3dpdGNoX2NoaXBfZGF0YS5zd19hZGRyID0gMTA7CiAJCWtpcmt3b29kX2dlMDFfaW5pdCgmcmQ4OGY2MjgxX2dlMDFfZGF0YSk7CiAJfSBlbHNlIHsKLQkJcmQ4OGY2MjgxX3N3aXRjaF9kYXRhLnBvcnRfbmFtZXNbNF0gPSAid2FuIjsKKwkJcmQ4OGY2MjgxX3N3aXRjaF9jaGlwX2RhdGEucG9ydF9uYW1lc1s0XSA9ICJ3YW4iOwogCX0KLQlraXJrd29vZF9nZTAwX3N3aXRjaF9pbml0KCZyZDg4ZjYyODFfc3dpdGNoX2RhdGEsIE5PX0lSUSk7CisJa2lya3dvb2RfZ2UwMF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MjgxX3N3aXRjaF9wbGF0X2RhdGEsIE5PX0lSUSk7CiAKLQlraXJrd29vZF9ydGNfaW5pdCgpOwogCWtpcmt3b29kX3NhdGFfaW5pdCgmcmQ4OGY2MjgxX3NhdGFfZGF0YSk7CisJa2lya3dvb2Rfc2Rpb19pbml0KCZyZDg4ZjYyODFfbXZzZGlvX2RhdGEpOwogCWtpcmt3b29kX3VhcnQwX2luaXQoKTsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmQ4OGY2MjgxX25hbmRfZmxhc2gpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9zaGVldmFwbHVnLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3NoZWV2YXBsdWctc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzFlNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9zaGVldmFwbHVnLXNldHVwLmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWtpcmt3b29kL3NoZWV2YXBsdWctc2V0dXAuYworICoKKyAqIE1hcnZlbGwgU2hlZXZhUGx1ZyBSZWZlcmVuY2UgQm9hcmQgU2V0dXAKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bWFjaC9raXJrd29vZC5oPgorI2luY2x1ZGUgPHBsYXQvbXZzZGlvLmg+CisjaW5jbHVkZSA8cGxhdC9vcmlvbl9uYW5kLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibXBwLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzaGVldmFwbHVnX25hbmRfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lID0gInUtYm9vdCIsCisJCS5vZmZzZXQgPSAwLAorCQkuc2l6ZSA9IFNaXzFNCisJfSwgeworCQkubmFtZSA9ICJ1SW1hZ2UiLAorCQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfTlhUQkxLLAorCQkuc2l6ZSA9IFNaXzRNCisJfSwgeworCQkubmFtZSA9ICJyb290IiwKKwkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2hlZXZhcGx1Z19uYW5kX3Jlc291cmNlID0geworCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwkuc3RhcnQJCT0gS0lSS1dPT0RfTkFORF9NRU1fUEhZU19CQVNFLAorCS5lbmQJCT0gS0lSS1dPT0RfTkFORF9NRU1fUEhZU19CQVNFICsKKwkJCSAgS0lSS1dPT0RfTkFORF9NRU1fU0laRSAtIDEsCit9OworCitzdGF0aWMgc3RydWN0IG9yaW9uX25hbmRfZGF0YSBzaGVldmFwbHVnX25hbmRfZGF0YSA9IHsKKwkucGFydHMJCT0gc2hlZXZhcGx1Z19uYW5kX3BhcnRzLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoc2hlZXZhcGx1Z19uYW5kX3BhcnRzKSwKKwkuY2xlCQk9IDAsCisJLmFsZQkJPSAxLAorCS53aWR0aAkJPSA4LAorCS5jaGlwX2RlbGF5CT0gMjUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaGVldmFwbHVnX25hbmRfZmxhc2ggPSB7CisJLm5hbWUJCT0gIm9yaW9uX25hbmQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2hlZXZhcGx1Z19uYW5kX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSAmc2hlZXZhcGx1Z19uYW5kX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBzaGVldmFwbHVnX2dlMDBfZGF0YSA9IHsKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUigwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXZzZGlvX3BsYXRmb3JtX2RhdGEgc2hlZXZhcGx1Z19tdnNkaW9fZGF0YSA9IHsKKwkvLyB1bmZvcnR1bmF0ZWx5IHRoZSBDRCBzaWduYWwgaGFzIG5vdCBiZWVuIGNvbm5lY3RlZCAqLworfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBzaGVldmFwbHVnX2xlZF9waW5zW10gPSB7CisJeworCQkubmFtZQkJCT0gInBsdWc6Z3JlZW46aGVhbHRoIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKKwkJLmdwaW8JCQk9IDQ5LAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgc2hlZXZhcGx1Z19sZWRfZGF0YSA9IHsKKwkubGVkcwkJPSBzaGVldmFwbHVnX2xlZF9waW5zLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoc2hlZXZhcGx1Z19sZWRfcGlucyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaGVldmFwbHVnX2xlZHMgPSB7CisJLm5hbWUJPSAibGVkcy1ncGlvIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzaGVldmFwbHVnX2xlZF9kYXRhLAorCX0KK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2hlZXZhcGx1Z19tcHBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlNUFAyOV9HUElPLAkvKiBVU0IgUG93ZXIgRW5hYmxlICovCisJTVBQNDlfR1BJTywJLyogTEVEICovCisJMAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHNoZWV2YXBsdWdfaW5pdCh2b2lkKQoreworCS8qCisJICogQmFzaWMgc2V0dXAuIE5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseS4KKwkgKi8KKwlraXJrd29vZF9pbml0KCk7CisJa2lya3dvb2RfbXBwX2NvbmYoc2hlZXZhcGx1Z19tcHBfY29uZmlnKTsKKworCWtpcmt3b29kX3VhcnQwX2luaXQoKTsKKworCWlmIChncGlvX3JlcXVlc3QoMjksICJVU0IgUG93ZXIgRW5hYmxlIikgIT0gMCB8fAorCSAgICBncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjksIDEpICE9IDApCisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3Qgc2V0IHVwIEdQSU8gMjkgKFVTQiBQb3dlciBFbmFibGUpXG4iKTsKKwlraXJrd29vZF9laGNpX2luaXQoKTsKKworCWtpcmt3b29kX2dlMDBfaW5pdCgmc2hlZXZhcGx1Z19nZTAwX2RhdGEpOworCWtpcmt3b29kX3NkaW9faW5pdCgmc2hlZXZhcGx1Z19tdnNkaW9fZGF0YSk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNoZWV2YXBsdWdfbmFuZF9mbGFzaCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzaGVldmFwbHVnX2xlZHMpOworfQorCitNQUNISU5FX1NUQVJUKFNIRUVWQVBMVUcsICJNYXJ2ZWxsIFNoZWV2YVBsdWcgUmVmZXJlbmNlIEJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBzaGFkaSBBbW1vdXJpIDxzaGFkaUBtYXJ2ZWxsLmNvbT4gKi8KKwkucGh5c19pbwk9IEtJUktXT09EX1JFR1NfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoS0lSS1dPT0RfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBzaGVldmFwbHVnX2luaXQsCisJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzMjE5LXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL3RzMjE5LXNldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhNTc0MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvdHMyMTktc2V0dXAuYwpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqCisgKiBRTkFQIFRTLTExOS9UUy0yMTkgVHVyYm8gTkFTIEJvYXJkIFNldHVwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5ICBNYXJ0aW4gTWljaGxtYXlyIDx0Ym1AY3lyaXVzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCAgQnlyb24gQnJhZGxleSA8Ynlyb24uYmJyYWRsZXlAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9mbGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvb3Jpb25fc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJtcHAuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIDE2IE1pQiBOT1IgZmxhc2guIFRoZSBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBpcyBub3QgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlCisgKiAgICAgcGFydGl0aW9ucyBvbiB0aGUgZGV2aWNlIGJlY2F1c2Ugd2Ugd2FudCB0byBrZWVwIGNvbXBhdGFiaWxpdHkgd2l0aAorICogICAgIHRoZSBRTkFQIGZpcm13YXJlLgorICogTGF5b3V0IGFzIHVzZWQgYnkgUU5BUDoKKyAqICAweDAwMDAwMDAwLTB4MDAwODAwMDAgOiAiVS1Cb290IgorICogIDB4MDAyMDAwMDAtMHgwMDQwMDAwMCA6ICJLZXJuZWwiCisgKiAgMHgwMDQwMDAwMC0weDAwZDAwMDAwIDogIlJvb3RGUyIKKyAqICAweDAwZDAwMDAwLTB4MDEwMDAwMDAgOiAiUm9vdEZTMiIKKyAqICAweDAwMDgwMDAwLTB4MDAwYzAwMDAgOiAiVS1Cb290IENvbmZpZyIKKyAqICAweDAwMGMwMDAwLTB4MDAyMDAwMDAgOiAiTkFTIENvbmZpZyIKKyAqCisgKiBXZSdsbCB1c2UgIlJvb3RGUzEiIGluc3RlYWQgb2YgIlJvb3RGUyIgdG8gc3RheSBjb21wYXRpYmxlIHdpdGggdGhlIGxheW91dAorICogdXNlZCBieSB0aGUgUU5BUCBUUy0xMDkvVFMtMjA5LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBxbmFwX3RzMjE5X3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJVLUJvb3QiLAorCQkuc2l6ZQkJPSAweDAwMDgwMDAwLAorCQkub2Zmc2V0CQk9IDAsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKKwl9LCB7CisJCS5uYW1lCQk9ICJLZXJuZWwiLAorCQkuc2l6ZQkJPSAweDAwMjAwMDAwLAorCQkub2Zmc2V0CQk9IDB4MDAyMDAwMDAsCisJfSwgeworCQkubmFtZQkJPSAiUm9vdEZTMSIsCisJCS5zaXplCQk9IDB4MDA5MDAwMDAsCisJCS5vZmZzZXQJCT0gMHgwMDQwMDAwMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJSb290RlMyIiwKKwkJLnNpemUJCT0gMHgwMDMwMDAwMCwKKwkJLm9mZnNldAkJPSAweDAwZDAwMDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIlUtQm9vdCBDb25maWciLAorCQkuc2l6ZQkJPSAweDAwMDQwMDAwLAorCQkub2Zmc2V0CQk9IDB4MDAwODAwMDAsCisJfSwgeworCQkubmFtZQkJPSAiTkFTIENvbmZpZyIsCisJCS5zaXplCQk9IDB4MDAxNDAwMDAsCisJCS5vZmZzZXQJCT0gMHgwMDBjMDAwMCwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIHFuYXBfdHMyMTlfZmxhc2ggPSB7CisJLnR5cGUJCT0gIm0yNXAxMjgiLAorCS5uYW1lCQk9ICJzcGlfZmxhc2giLAorCS5wYXJ0cwkJPSBxbmFwX3RzMjE5X3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShxbmFwX3RzMjE5X3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHFuYXBfdHMyMTlfc3BpX3NsYXZlX2luZm9bXSA9IHsKKwl7CisJCS5tb2RhbGlhcwk9ICJtMjVwODAiLAorCQkucGxhdGZvcm1fZGF0YQk9ICZxbmFwX3RzMjE5X2ZsYXNoLAorCQkuaXJxCQk9IC0xLAorCQkubWF4X3NwZWVkX2h6CT0gMjAwMDAwMDAsCisJCS5idXNfbnVtCT0gMCwKKwkJLmNoaXBfc2VsZWN0CT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHFuYXBfdHMyMTlfaTJjX3J0YyA9IHsKKwlJMkNfQk9BUkRfSU5GTygiczM1MzkwYSIsIDB4MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHFuYXBfdHMyMTlfZ2UwMF9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDgpLAorfTsKKworc3RhdGljIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgcW5hcF90czIxOV9zYXRhX2RhdGEgPSB7CisJLm5fcG9ydHMJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHFuYXBfdHMyMTlfYnV0dG9uc1tdID0geworCXsKKwkJLmNvZGUJCT0gS0VZX0NPUFksCisJCS5ncGlvCQk9IDE1LAorCQkuZGVzYwkJPSAiVVNCIENvcHkiLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJfSwKKwl7CisJCS5jb2RlCQk9IEtFWV9SRVNUQVJULAorCQkuZ3BpbwkJPSAxNiwKKwkJLmRlc2MJCT0gIlJlc2V0IiwKKwkJLmFjdGl2ZV9sb3cJPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIHFuYXBfdHMyMTlfYnV0dG9uX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBxbmFwX3RzMjE5X2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShxbmFwX3RzMjE5X2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcW5hcF90czIxOV9idXR0b25fZGV2aWNlID0geworCS5uYW1lCQk9ICJncGlvLWtleXMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnFuYXBfdHMyMTlfYnV0dG9uX2RhdGEsCisJfQorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBxbmFwX3RzMjE5X21wcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCU1QUDBfU1BJX1NDbiwKKwlNUFAxX1NQSV9NT1NJLAorCU1QUDJfU1BJX1NDSywKKwlNUFAzX1NQSV9NSVNPLAorCU1QUDhfVFdfU0RBLAorCU1QUDlfVFdfU0NLLAorCU1QUDEwX1VBUlQwX1RYRCwKKwlNUFAxMV9VQVJUMF9SWEQsCisJTVBQMTNfVUFSVDFfVFhELAkvKiBQSUMgY29udHJvbGxlciAqLworCU1QUDE0X1VBUlQxX1JYRCwJLyogUElDIGNvbnRyb2xsZXIgKi8KKwlNUFAxNV9HUElPLAkJLyogVVNCIENvcHkgYnV0dG9uICovCisJTVBQMTZfR1BJTywJCS8qIFJlc2V0IGJ1dHRvbiAqLworCU1QUDIwX1NBVEExX0FDVG4sCisJTVBQMjFfU0FUQTBfQUNUbiwKKwlNUFAyMl9TQVRBMV9QUkVTRU5UbiwKKwlNUFAyM19TQVRBMF9QUkVTRU5UbiwKKwkwCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUU5BUCBUUy14MTkgc3BlY2lmaWMgcG93ZXIgb2ZmIG1ldGhvZCB2aWEgVUFSVDEtYXR0YWNoZWQgUElDCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBVQVJUMV9SRUcoeCkJKFVBUlQxX1ZJUlRfQkFTRSArICgoVUFSVF8jI3gpIDw8IDIpKQorCit2b2lkIHFuYXBfdHMyMTlfcG93ZXJfb2ZmKHZvaWQpCit7CisJLyogMTkyMDAgYmF1ZCBkaXZpc29yICovCisJY29uc3QgdW5zaWduZWQgZGl2aXNvciA9ICgoa2lya3dvb2RfdGNsayArICg4ICogMTkyMDApKSAvICgxNiAqIDE5MjAwKSk7CisKKwlwcl9pbmZvKCIlczogdHJpZ2dlcmluZyBwb3dlci1vZmYuLi5cbiIsIF9fZnVuY19fKTsKKworCS8qIGhpamFjayBVQVJUMSBhbmQgcmVzZXQgaW50byBzYW5lIHN0YXRlICgxOTIwMCw4bjEpICovCisJd3JpdGVsKDB4ODMsIFVBUlQxX1JFRyhMQ1IpKTsKKwl3cml0ZWwoZGl2aXNvciAmIDB4ZmYsIFVBUlQxX1JFRyhETEwpKTsKKwl3cml0ZWwoKGRpdmlzb3IgPj4gOCkgJiAweGZmLCBVQVJUMV9SRUcoRExNKSk7CisJd3JpdGVsKDB4MDMsIFVBUlQxX1JFRyhMQ1IpKTsKKwl3cml0ZWwoMHgwMCwgVUFSVDFfUkVHKElFUikpOworCXdyaXRlbCgweDAwLCBVQVJUMV9SRUcoRkNSKSk7CisJd3JpdGVsKDB4MDAsIFVBUlQxX1JFRyhNQ1IpKTsKKworCS8qIHNlbmQgdGhlIHBvd2VyLW9mZiBjb21tYW5kICdBJyB0byBQSUMgKi8KKwl3cml0ZWwoJ0EnLCBVQVJUMV9SRUcoVFgpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHFuYXBfdHMyMTlfaW5pdCh2b2lkKQoreworCS8qCisJICogQmFzaWMgc2V0dXAuIE5lZWRzIHRvIGJlIGNhbGxlZCBlYXJseS4KKwkgKi8KKwlraXJrd29vZF9pbml0KCk7CisJa2lya3dvb2RfbXBwX2NvbmYocW5hcF90czIxOV9tcHBfY29uZmlnKTsKKworCWtpcmt3b29kX3VhcnQwX2luaXQoKTsKKwlraXJrd29vZF91YXJ0MV9pbml0KCk7IC8qIEEgUElDIGNvbnRyb2xsZXIgaXMgY29ubmVjdGVkIGhlcmUuICovCisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocW5hcF90czIxOV9zcGlfc2xhdmVfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHFuYXBfdHMyMTlfc3BpX3NsYXZlX2luZm8pKTsKKwlraXJrd29vZF9zcGlfaW5pdCgpOworCWtpcmt3b29kX2kyY19pbml0KCk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgJnFuYXBfdHMyMTlfaTJjX3J0YywgMSk7CisJa2lya3dvb2RfZ2UwMF9pbml0KCZxbmFwX3RzMjE5X2dlMDBfZGF0YSk7CisJa2lya3dvb2Rfc2F0YV9pbml0KCZxbmFwX3RzMjE5X3NhdGFfZGF0YSk7CisJa2lya3dvb2RfZWhjaV9pbml0KCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZxbmFwX3RzMjE5X2J1dHRvbl9kZXZpY2UpOworCisJcG1fcG93ZXJfb2ZmID0gcW5hcF90czIxOV9wb3dlcl9vZmY7CisKK30KKworTUFDSElORV9TVEFSVChUUzIxOSwgIlFOQVAgVFMtMTE5L1RTLTIxOSIpCisJLyogTWFpbnRhaW5lcjogTWFydGluIE1pY2hsbWF5ciA8dGJtQGN5cml1cy5jb20+ICovCisJLnBoeXNfaW8JPSBLSVJLV09PRF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKEtJUktXT09EX1JFR1NfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gcW5hcF90czIxOV9pbml0LAorCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2lycQk9IGtpcmt3b29kX2luaXRfaXJxLAorCS50aW1lcgkJPSAma2lya3dvb2RfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L0tjb25maWcKaW5kZXggMjc1NGRhYS4uZmUwYzgyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9LY29uZmlnCkBAIC0xNCw2ICsxNCwxMiBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHJ1biBvbiB0aGUgRC1MaW5rCiAJICBEU00tMzIwIFdpcmVsZXNzIE1lZGlhIFBsYXllci4KIAorY29uZmlnIE1BQ0hfQUNTNUsKKwlib29sICJCcml2byBTeXN0ZW1zIExMQywgQUNTLTUwMDAgTWFzdGVyIGJvYXJkIgorCWhlbHAKKwkgIHNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBydW4gb24gdGhlIEJyaXZvCisJICBTeXN0ZW1zIExMQywgQUNTLTUwMDAgTWFzdGVyIGJvYXJkLgorCiBlbmRtZW51CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gta3M4Njk1L01ha2VmaWxlCmluZGV4IGY3MzVkMmMuLjdlM2U4MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L01ha2VmaWxlCkBAIC0xNywzICsxNyw0IEBACiAjIEJvYXJkLXNwZWNpZmljIHN1cHBvcnQKIG9iai0kKENPTkZJR19NQUNIX0tTODY5NSkJKz0gYm9hcmQtbWljcmVsLm8KIG9iai0kKENPTkZJR19NQUNIX0RTTTMyMCkJKz0gYm9hcmQtZHNtMzIwLm8KK29iai0kKENPTkZJR19NQUNIX0FDUzVLKQkrPSBib2FyZC1hY3M1ay5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9ib2FyZC1hY3M1ay5jIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtYWNzNWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTNlNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvYm9hcmQtYWNzNWsuYwpAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gta3M4Njk1L2JvYXJkLWFjczVrLmMKKyAqCisgKiBCcml2byBTeXN0ZW1zIExMQywgQUNTLTUwMDAgTWFzdGVyIEJvYXJkCisgKgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKgkJICBEYW5pZWwgU2lsdmVyc3RvbmUgPGRzaWx2ZXJzQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3BjYTk1M3guaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCitzdGF0aWMgc3RydWN0IGkyY19ncGlvX3BsYXRmb3JtX2RhdGEgYWNzNWtfaTJjX2RldmljZV9wbGF0ZGF0YSA9IHsKKwkuc2RhX3Bpbgk9IDQsCisJLnNjbF9waW4JPSA1LAorCS51ZGVsYXkJCT0gMTAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhY3M1a19pMmNfZGV2aWNlID0geworCS5uYW1lCQk9ICJpMmMtZ3BpbyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gMCwKKwkucmVzb3VyY2UJPSBOVUxMLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZhY3M1a19pMmNfZGV2aWNlX3BsYXRkYXRhLAorCX0sCit9OworCitzdGF0aWMgaW50IGFjczVrX3BjYTk1NTVfc2V0dXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgICB1bnNpZ25lZCBncGlvX2Jhc2UsIHVuc2lnbmVkIG5ncGlvLAorCQkJICAgICAgIHZvaWQgKmNvbnRleHQpCit7CisJc3RhdGljIGludCBhY3M1a19ncGlvX3ZhbHVlW10gPSB7CisJCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAxLCAxLCAtMSwgMCwgMSwgMCwgLTEsIC0xCisJfTsKKwlpbnQgbjsKKworCWZvciAobiA9IDA7IG4gPCBBUlJBWV9TSVpFKGFjczVrX2dwaW9fdmFsdWUpOyArK24pIHsKKwkJZ3Bpb19yZXF1ZXN0KGdwaW9fYmFzZSArIG4sICJBQ1MtNTAwMCBHUElPIEV4cGFuZGVyIik7CisJCWlmIChhY3M1a19ncGlvX3ZhbHVlW25dIDwgMCkKKwkJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fYmFzZSArIG4pOworCQllbHNlCisJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb19iYXNlICsgbiwKKwkJCQkJICAgICAgYWNzNWtfZ3Bpb192YWx1ZVtuXSk7CisJCWdwaW9fZXhwb3J0KGdwaW9fYmFzZSArIG4sIDApOyAvKiBFeHBvcnQsIGRpcmVjdGlvbiBsb2NrZWQgZG93biAqLworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjYTk1M3hfcGxhdGZvcm1fZGF0YSBhY3M1a19pMmNfcGNhOTU1NV9wbGF0ZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gMTYsIC8qIFN0YXJ0IGRpcmVjdGx5IGFmdGVyIHRoZSBDUFUncyBHUElPICovCisJLmludmVydAkJPSAwLCAvKiBEbyBub3QgaW52ZXJ0ICovCisJLnNldHVwCQk9IGFjczVrX3BjYTk1NTVfc2V0dXAsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGFjczVrX2kyY19kZXZzW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTYzIiwgMHg1MSksCisJfSwKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2E5NTU1IiwgMHgyMCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJmFjczVrX2kyY19wY2E5NTU1X3BsYXRkYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYWNzNWtfaTJjX2luaXQodm9pZCkKK3sKKwkvKiBUaGUgZ3BpbyBpbnRlcmZhY2UgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFjczVrX2kyY19kZXZpY2UpOworCS8qIEkyQyBkZXZpY2VzICovCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgYWNzNWtfaTJjX2RldnMsCisJCQkJQVJSQVlfU0laRShhY3M1a19pMmNfZGV2cykpOworfQorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYWNzNWtfbm9yX3BhcnRpdGlvbnNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkJvb3QgQWdlbnQgYW5kIGNvbmZpZyIsCisJCS5zaXplCT0gU1pfMjU2SywKKwkJLm9mZnNldAk9IDAsCisJCS5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRSwKKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJPSAiS2VybmVsIiwKKwkJLnNpemUJPSBTWl8xTSwKKwkJLm9mZnNldAk9IFNaXzI1NkssCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lCT0gIlNxdWFzaEZTMSIsCisJCS5zaXplCT0gU1pfMk0sCisJCS5vZmZzZXQJPSBTWl8yNTZLICsgU1pfMU0sCisJfSwKKwlbM10gPSB7CisJCS5uYW1lCT0gIlNxdWFzaEZTMiIsCisJCS5zaXplCT0gU1pfNE0gKyBTWl8yTSwKKwkJLm9mZnNldAk9IFNaXzI1NksgKyBTWl8xTSArIFNaXzJNLAorCX0sCisJWzRdID0geworCQkubmFtZQk9ICJEYXRhIiwKKwkJLnNpemUJPSBTWl8xNk0gKyBTWl80TSArIFNaXzJNICsgU1pfNTEySywgLyogMjIuNSBNQiAqLworCQkub2Zmc2V0CT0gU1pfMjU2SyArIFNaXzhNICsgU1pfMU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgYWNzNWtfbm9yX3BkYXRhID0geworCS53aWR0aAkJPSA0LAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoYWNzNWtfbm9yX3BhcnRpdGlvbnMpLAorCS5wYXJ0cwkJPSBhY3M1a19ub3JfcGFydGl0aW9ucywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYWNzNWtfbm9yX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTWl8zMk0sIC8qIFdlIGV4cGVjdCB0aGUgYm9vdGxvYWRlciB0byBtYXAKKwkJCQkgICogdGhlIGZsYXNoIGhlcmUuCisJCQkJICAqLworCQkuZW5kICAgPSBTWl8zMk0gKyBTWl8xNk0gLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gU1pfMzJNICsgU1pfMTZNLAorCQkuZW5kICAgPSBTWl8zMk0gKyBTWl8zMk0gLSBTWl8yNTZLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYWNzNWtfZGV2aWNlX25vciA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhY3M1a19ub3JfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQk9IGFjczVrX25vcl9yZXNvdXJjZSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYWNzNWtfbm9yX3BkYXRhLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYWNzNWtfcmVnaXN0ZXJfbm9yKHZvaWQpCit7CisJaW50IHJldDsKKworCWlmIChhY3M1a19ub3JfcGFydGl0aW9uc1swXS5tYXNrX2ZsYWdzID09IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IFVucHJvdGVjdGluZyBib290bG9hZGVyIGFuZCBjb25maWd1cmF0aW9uIHBhcnRpdGlvblxuIik7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFjczVrX2RldmljZV9ub3IpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBwaHlzbWFwLWZsYXNoIGRldmljZVxuIik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFjczVrX3Byb3RlY3Rpb25fc2V0dXAoY2hhciAqcykKK3sKKwkvKiBXZSBjYW4ndCBhbGxvY2F0ZSBhbnl0aGluZyBoZXJlIGJ1dCB3ZSBzaG91bGQgYmUgYWJsZQorCSAqIHRvIHRyaXZpYWxseSBwYXJzZSBzIGFuZCBkZWNpZGUgaWYgd2UgY2FuIHByb3RlY3QgdGhlCisJICogYm9vdGxvYWRlciBwYXJ0aXRpb24gb3Igbm90CisJICovCisJaWYgKHN0cmNtcChzLCAibm8iKSA9PSAwKQorCQlhY3M1a19ub3JfcGFydGl0aW9uc1swXS5tYXNrX2ZsYWdzID0gMDsKKworCXJldHVybiAxOworfQorCitfX3NldHVwKCJwcm90ZWN0X2Jvb3Rsb2FkZXI9IiwgYWNzNWtfcHJvdGVjdGlvbl9zZXR1cCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhY3M1a19pbml0X2dwaW8odm9pZCkKK3sKKwlpbnQgaTsKKworCWtzODY5NV9yZWdpc3Rlcl9ncGlvcygpOworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJCWdwaW9fcmVxdWVzdChpLCAiQUNTNUsgSVJRIik7CisJZ3Bpb19yZXF1ZXN0KDcsICJBQ1M1SyBLU19GUkRZIik7CisJZm9yIChpID0gODsgaSA8IDE2OyArK2kpCisJCWdwaW9fcmVxdWVzdChpLCAiQUNTNUsgVW51c2VkIik7CisKKwlncGlvX3JlcXVlc3QoMywgIkFDUzVLIENBTiBDb250cm9sIik7CisJZ3Bpb19yZXF1ZXN0KDYsICJBQ1M1SyBIZWFydGJlYXQiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoMywgMSk7IC8qIERlZmF1bHQgQ0FOX1JFU0VUIGhpZ2ggKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoNiwgMCk7IC8qIERlZmF1bHQgS1M4Njk1X0FDVElWRSBsb3cgKi8KKwlncGlvX2V4cG9ydCgzLCAwKTsgLyogZXhwb3J0IENBTl9SRVNFVCBhcyBvdXRwdXQgb25seSAqLworCWdwaW9fZXhwb3J0KDYsIDApOyAvKiBleHBvcnQgS1M4Njk1X0FDVElWRSBhcyBvdXRwdXQgb25seSAqLworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYWNzNWtfaW5pdCh2b2lkKQoreworCWFjczVrX2luaXRfZ3BpbygpOworCisJLyogTmV0d29yayBkZXZpY2UgKi8KKwlrczg2OTVfYWRkX2RldmljZV9sYW4oKTsJLyogZXRoMCA9IExBTiAqLworCWtzODY5NV9hZGRfZGV2aWNlX3dhbigpOwkvKiBldGhYID0gV0FOICovCisKKwkvKiBOT1IgZGV2aWNlcyAqLworCWFjczVrX3JlZ2lzdGVyX25vcigpOworCisJLyogSTJDIGJ1cyAqLworCWFjczVrX2kyY19pbml0KCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQUNTNUssICJCcml2byBTeXN0ZW1zIExMQyBBQ1MtNTAwMCBNYXN0ZXIgYm9hcmQiKQorCS8qIE1haW50YWluZXI6IFNpbXRlYyBFbGVjdHJvbmljcy4gKi8KKwkucGh5c19pbwk9IEtTODY5NV9JT19QQSwKKwkuaW9fcGdfb2Zmc3QJPSAoS1M4Njk1X0lPX1ZBID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBLUzg2OTVfU0RSQU1fUEEgKyAweDEwMCwKKwkubWFwX2lvCQk9IGtzODY5NV9tYXBfaW8sCisJLmluaXRfaXJxCT0ga3M4Njk1X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBhY3M1a19pbml0LAorCS50aW1lcgkJPSAma3M4Njk1X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCA2ZDU4ODdjLi43NmU1MzA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0zNSw3ICszNSwxMSBAQAogCQkJCQlfX3BoeXNfdG9fdmlydCh4KSA6IF9fYnVzX3RvX3ZpcnQoeCkpOyB9KQogI2RlZmluZSBfX2FyY2hfdmlydF90b19kbWEoZGV2LCB4KQkoeyBpc19sYnVzX2RldmljZShkZXYpID8gXAogCQkJCQkoZG1hX2FkZHJfdClfX3ZpcnRfdG9fcGh5cyh4KSA6IChkbWFfYWRkcl90KV9fdmlydF90b19idXMoeCk7IH0pCi0jZGVmaW5lIF9fYXJjaF9wYWdlX3RvX2RtYShkZXYsIHgpCV9fYXJjaF92aXJ0X3RvX2RtYShkZXYsIHBhZ2VfYWRkcmVzcyh4KSkKKyNkZWZpbmUgX19hcmNoX3BhZ2VfdG9fZG1hKGRldiwgeCkJXAorCSh7IGRtYV9hZGRyX3QgX19kbWEgPSBwYWdlX3RvX3BoeXMocGFnZSk7IFwKKwkgICBpZiAoIWlzX2xidXNfZGV2aWNlKGRldikpIFwKKwkJX19kbWEgPSBfX2RtYSAtIFBIWVNfT0ZGU0VUICsgS1M4Njk1X1BDSU1FTV9QQTsgXAorCSAgIF9fZG1hOyB9KQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDVhOWIwMzIuLmZiMWRkYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWtzODY5NS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogfQogCi1zdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJdW5zaWduZWQgaW50IHJlZzsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1sNzIwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCA1MjcyYWJlLi5lMGRkM2I2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLWw3MjAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTksNyArMTksNyBAQAogCSoodW5zaWduZWQgbG9uZyAqKShJT19CQVNFICsgMHg1MDAwNCkgPSAxOwkvKiBpZGxlIG1vZGUgKi8KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJaWYgKG1vZGUgPT0gJ3MnKSB7CiAJCWNwdV9yZXNldCgwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGZhNDZiYjFlLi40NWE1NmQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTEzLDcgKzEzLDcgQEAKIAljcHVfZG9faWRsZSAoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJY3B1X3Jlc2V0ICgwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLWxva2kvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDhkYjExNDcuLmMxZGUzNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbG9raS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1sb2tpL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTcsNyArMTcsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qCiAJICogRW5hYmxlIHNvZnQgcmVzZXQgdG8gYXNzZXJ0IFJTVE9VVG4uCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1tbXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmE1NjRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvS2NvbmZpZwpAQCAtMCwwICsxLDQ3IEBACitpZiBBUkNIX01NUAorCittZW51ICJNYXJ2ZWxsIFBYQTE2OC85MTAgSW1wbG1lbnRhdGlvbnMiCisKK2NvbmZpZyBNQUNIX0FTUEVOSVRFCisJYm9vbCAiTWFydmVsbCdzIFBYQTE2OCBBc3Blbml0ZSBEZXZlbG9wbWVudCBCb2FyZCIKKwlzZWxlY3QgQ1BVX1BYQTE2OAorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoZSBNYXJ2ZWxsIFBYQTE2OC1iYXNlZAorCSAgQXNwZW5pdGUgRGV2ZWxvcG1lbnQgQm9hcmQuCisKK2NvbmZpZyBNQUNIX1pZTE9OSVRFMgorCWJvb2wgIk1hcnZlbGwncyBQWEExNjggWnlsb25pdGUyIERldmVsb3BtZW50IEJvYXJkIgorCXNlbGVjdCBDUFVfUFhBMTY4CisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIE1hcnZlbGwgUFhBMTY4LWJhc2VkCisJICBaeWxvbml0ZTIgRGV2ZWxvcG1lbnQgQm9hcmQuCisKK2NvbmZpZyBNQUNIX1RBVk9SRVZCCisJYm9vbCAiTWFydmVsbCdzIFBYQTkxMCBUYXZvckVWQiBEZXZlbG9wbWVudCBCb2FyZCIKKwlzZWxlY3QgQ1BVX1BYQTkxMAorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoZSBNYXJ2ZWxsIFBYQTkxMC1iYXNlZAorCSAgVGF2b3JFVkIgRGV2ZWxvcG1lbnQgQm9hcmQuCisKK2NvbmZpZyBNQUNIX1RUQ19ES0IKKwlib29sICJNYXJ2ZWxsJ3MgUFhBOTEwIFRhdm9yRVZCIERldmVsb3BtZW50IEJvYXJkIgorCXNlbGVjdCBDUFVfUFhBOTEwCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIE1hcnZlbGwgUFhBOTEwLWJhc2VkCisJICBUVENfREtCIERldmVsb3BtZW50IEJvYXJkLgorCitlbmRtZW51CisKK2NvbmZpZyBDUFVfUFhBMTY4CisJYm9vbAorCXNlbGVjdCBDUFVfTU9IQVdLCisJaGVscAorCSAgU2VsZWN0IGNvZGUgc3BlY2lmaWMgdG8gUFhBMTY4CisKK2NvbmZpZyBDUFVfUFhBOTEwCisJYm9vbAorCXNlbGVjdCBDUFVfTU9IQVdLCisJaGVscAorCSAgU2VsZWN0IGNvZGUgc3BlY2lmaWMgdG8gUFhBOTEwCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ODNlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9NYWtlZmlsZQpAQCAtMCwwICsxLDE1IEBACisjCisjIE1ha2VmaWxlIGZvciBNYXJ2ZWxsJ3MgUFhBMTY4IHByb2Nlc3NvcnMgbGluZQorIworCitvYmoteQkJCQkrPSBjb21tb24ubyBjbG9jay5vIGRldmljZXMubyBpcnEubyB0aW1lLm8KKworIyBTb0Mgc3VwcG9ydAorb2JqLSQoQ09ORklHX0NQVV9QWEExNjgpCSs9IHB4YTE2OC5vCitvYmotJChDT05GSUdfQ1BVX1BYQTkxMCkJKz0gcHhhOTEwLm8KKworIyBib2FyZCBzdXBwb3J0CitvYmotJChDT05GSUdfTUFDSF9BU1BFTklURSkJKz0gYXNwZW5pdGUubworb2JqLSQoQ09ORklHX01BQ0hfWllMT05JVEUyKQkrPSBhc3Blbml0ZS5vCitvYmotJChDT05GSUdfTUFDSF9UQVZPUkVWQikJKz0gdGF2b3JldmIubworb2JqLSQoQ09ORklHX01BQ0hfVFRDX0RLQikJKz0gdHRjX2RrYi5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1tbXAvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzRhNGFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxIEBACisgICB6cmVsYWRkci15CTo9IDB4MDAwMDgwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2FzcGVuaXRlLmMgYi9hcmNoL2FybS9tYWNoLW1tcC9hc3Blbml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NjI0NTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9hc3Blbml0ZS5jCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2FzcGVuaXRlLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgUFhBMTY4LWJhc2VkIEFzcGVuaXRlIGFuZCBaeWxvbml0ZTIKKyAqICBEZXZlbG9wbWVudCBQbGF0Zm9ybS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxeC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTE2OC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMTY4Lmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY29tbW9uX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIERhdGEgRmxhc2ggSW50ZXJmYWNlICovCisJR1BJTzBfREZJX0QxNSwKKwlHUElPMV9ERklfRDE0LAorCUdQSU8yX0RGSV9EMTMsCisJR1BJTzNfREZJX0QxMiwKKwlHUElPNF9ERklfRDExLAorCUdQSU81X0RGSV9EMTAsCisJR1BJTzZfREZJX0Q5LAorCUdQSU83X0RGSV9EOCwKKwlHUElPOF9ERklfRDcsCisJR1BJTzlfREZJX0Q2LAorCUdQSU8xMF9ERklfRDUsCisJR1BJTzExX0RGSV9ENCwKKwlHUElPMTJfREZJX0QzLAorCUdQSU8xM19ERklfRDIsCisJR1BJTzE0X0RGSV9EMSwKKwlHUElPMTVfREZJX0QwLAorCisJLyogU3RhdGljIE1lbW9yeSBDb250cm9sbGVyICovCisJR1BJTzE4X1NNQ19uQ1MwLAorCUdQSU8zNF9TTUNfbkNTMSwKKwlHUElPMjNfU01DX25MVUEsCisJR1BJTzI1X1NNQ19uTExBLAorCUdQSU8yOF9TTUNfUkRZLAorCUdQSU8yOV9TTUNfU0NMSywKKwlHUElPMzVfU01DX0JFMSwKKwlHUElPMzZfU01DX0JFMiwKKwlHUElPMjdfR1BJTywJLyogRXRoZXJuZXQgSVJRICovCisKKwkvKiBVQVJUMSAqLworCUdQSU8xMDdfVUFSVDFfUlhELAorCUdQSU8xMDhfVUFSVDFfVFhELAorfTsKKworc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgc21jOTF4X2luZm8gPSB7CisJLmZsYWdzCT0gU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9OT1dBSVQsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFNNQ19DUzFfUEhZU19CQVNFICsgMHgzMDAsCisJCS5lbmQJPSBTTUNfQ1MxX1BIWVNfQkFTRSArIDB4ZmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBncGlvX3RvX2lycSgyNyksCisJCS5lbmQJPSBncGlvX3RvX2lycSgyNyksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc21jOTF4X2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb21tb25faW5pdCh2b2lkKQoreworCW1mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29tbW9uX3Bpbl9jb25maWcpKTsKKworCS8qIG9uLWNoaXAgZGV2aWNlcyAqLworCXB4YTE2OF9hZGRfdWFydCgxKTsKKworCS8qIG9mZi1jaGlwIGRldmljZXMgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNtYzkxeF9kZXZpY2UpOworfQorCitNQUNISU5FX1NUQVJUKEFTUEVOSVRFLCAiUFhBMTY4LWJhc2VkIEFzcGVuaXRlIERldmVsb3BtZW50IFBsYXRmb3JtIikKKwkucGh5c19pbyAgICAgICAgPSBBUEJfUEhZU19CQVNFLAorCS5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCisJLmlvX3BnX29mZnN0ICAgID0gKEFQQl9WSVJUX0JBU0UgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBweGExNjhfaW5pdF9pcnEsCisJLnRpbWVyICAgICAgICAgID0gJnB4YTE2OF90aW1lciwKKwkuaW5pdF9tYWNoaW5lICAgPSBjb21tb25faW5pdCwKK01BQ0hJTkVfRU5ECisKK01BQ0hJTkVfU1RBUlQoWllMT05JVEUyLCAiUFhBMTY4LWJhc2VkIFp5bG9uaXRlMiBEZXZlbG9wbWVudCBQbGF0Zm9ybSIpCisJLnBoeXNfaW8gICAgICAgID0gQVBCX1BIWVNfQkFTRSwKKwkuYm9vdF9wYXJhbXMgICAgPSAweDAwMDAwMTAwLAorCS5pb19wZ19vZmZzdCAgICA9IChBUEJfVklSVF9CQVNFID4+IDE4KSAmIDB4ZmZmYywKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gcHhhMTY4X2luaXRfaXJxLAorCS50aW1lciAgICAgICAgICA9ICZweGExNjhfdGltZXIsCisJLmluaXRfbWFjaGluZSAgID0gY29tbW9uX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5Y2M1YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmMKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5jCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1hcGJjLmg+CisjaW5jbHVkZSAiY2xvY2suaCIKKworc3RhdGljIHZvaWQgYXBiY19jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1aW50MzJfdCBjbGtfcnN0OworCisJY2xrX3JzdCA9IEFQQkNfQVBCQ0xLIHwgQVBCQ19GTkNMSyB8IEFQQkNfRk5DTEtTRUwoY2xrLT5mbmNsa3NlbCk7CisJX19yYXdfd3JpdGVsKGNsa19yc3QsIGNsay0+Y2xrX3JzdCk7Cit9CisKK3N0YXRpYyB2b2lkIGFwYmNfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCV9fcmF3X3dyaXRlbCgwLCBjbGstPmNsa19yc3QpOworfQorCitzdHJ1Y3QgY2xrb3BzIGFwYmNfY2xrX29wcyA9IHsKKwkuZW5hYmxlCQk9IGFwYmNfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9IGFwYmNfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2Nrc19sb2NrKTsKKworaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlpZiAoY2xrLT5lbmFibGVkKysgPT0gMCkKKwkJY2xrLT5vcHMtPmVuYWJsZShjbGspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJV0FSTl9PTihjbGstPmVuYWJsZWQgPT0gMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlpZiAoLS1jbGstPmVuYWJsZWQgPT0gMCkKKwkJY2xrLT5vcHMtPmRpc2FibGUoY2xrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisKKwlpZiAoY2xrLT5vcHMtPmdldHJhdGUpCisJCXJhdGUgPSBjbGstPm9wcy0+Z2V0cmF0ZShjbGspOworCWVsc2UKKwkJcmF0ZSA9IGNsay0+cmF0ZTsKKworCXJldHVybiByYXRlOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCit2b2lkIGNsa3NfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKmNsa3MsIHNpemVfdCBudW0pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJCWNsa2Rldl9hZGQoJmNsa3NbaV0pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ5NjdlNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2Nsb2NrLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9jbG9jay5oCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorCitzdHJ1Y3QgY2xrb3BzIHsKKwl2b2lkCQkJKCplbmFibGUpKHN0cnVjdCBjbGsgKik7CisJdm9pZAkJCSgqZGlzYWJsZSkoc3RydWN0IGNsayAqKTsKKwl1bnNpZ25lZCBsb25nCQkoKmdldHJhdGUpKHN0cnVjdCBjbGsgKik7Cit9OworCitzdHJ1Y3QgY2xrIHsKKwljb25zdCBzdHJ1Y3QgY2xrb3BzCSpvcHM7CisKKwl2b2lkIF9faW9tZW0JKmNsa19yc3Q7CS8qIGNsb2NrIHJlc2V0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlpbnQJCWZuY2xrc2VsOwkvKiBmdW5jdGlvbmFsIGNsb2NrIHNlbGVjdCAoQVBCQykgKi8KKwl1aW50MzJfdAllbmFibGVfdmFsOwkvKiB2YWx1ZSBmb3IgY2xvY2sgZW5hYmxlIChBUE1VKSAqLworCXVuc2lnbmVkIGxvbmcJcmF0ZTsKKwlpbnQJCWVuYWJsZWQ7Cit9OworCitleHRlcm4gc3RydWN0IGNsa29wcyBhcGJjX2Nsa19vcHM7CisKKyNkZWZpbmUgQVBCQ19DTEsoX25hbWUsIF9yZWcsIF9mbmNsa3NlbCwgX3JhdGUpCQkJXAorc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJCVwKKwkJLmNsa19yc3QJPSAodm9pZCBfX2lvbWVtICopQVBCQ18jI19yZWcsCVwKKwkJLmZuY2xrc2VsCT0gX2ZuY2xrc2VsLAkJCVwKKwkJLnJhdGUJCT0gX3JhdGUsCQkJXAorCQkub3BzCQk9ICZhcGJjX2Nsa19vcHMsCQlcCit9CisKKyNkZWZpbmUgQVBCQ19DTEtfT1BTKF9uYW1lLCBfcmVnLCBfZm5jbGtzZWwsIF9yYXRlLCBfb3BzKQlcCitzdHJ1Y3QgY2xrIGNsa18jI19uYW1lID0gewkJCQkJXAorCQkuY2xrX3JzdAk9ICh2b2lkIF9faW9tZW0gKilBUEJDXyMjX3JlZywJXAorCQkuZm5jbGtzZWwJPSBfZm5jbGtzZWwsCQkJXAorCQkucmF0ZQkJPSBfcmF0ZSwJCQlcCisJCS5vcHMJCT0gX29wcywJCQkJXAorfQorCisjZGVmaW5lIEFQTVVfQ0xLKF9uYW1lLCBfcmVnLCBfZXZhbCwgX3JhdGUpCQkJXAorc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJCVwKKwkJLmNsa19yc3QJPSAodm9pZCBfX2lvbWVtICopQVBNVV8jI19yZWcsCVwKKwkJLmVuYWJsZV92YWwJPSBfZXZhbCwJCQlcCisJCS5yYXRlCQk9IF9yYXRlLAkJCVwKKwkJLm9wcwkJPSAmYXBtdV9jbGtfb3BzLAkJXAorfQorCisjZGVmaW5lIEFQTVVfQ0xLX09QUyhfbmFtZSwgX3JlZywgX2V2YWwsIF9yYXRlLCBfb3BzKQkJXAorc3RydWN0IGNsayBjbGtfIyNfbmFtZSA9IHsJCQkJCVwKKwkJLmNsa19yc3QJPSAodm9pZCBfX2lvbWVtICopQVBNVV8jI19yZWcsCVwKKwkJLmVuYWJsZV92YWwJPSBfZXZhbCwJCQlcCisJCS5yYXRlCQk9IF9yYXRlLAkJCVwKKwkJLm9wcwkJPSBfb3BzLAkJCQlcCit9CisKKyNkZWZpbmUgSU5JVF9DTEtSRUcoX2NsaywgX2Rldm5hbWUsIF9jb25uYW1lKQkJCVwKKwl7CQkJCQkJCVwKKwkJLmNsawkJPSBfY2xrLAkJCQlcCisJCS5kZXZfaWQJCT0gX2Rldm5hbWUsCQkJXAorCQkuY29uX2lkCQk9IF9jb25uYW1lLAkJCVwKKwl9CisKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa19weGExNjhfZ3BpbzsKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa19weGExNjhfdGltZXJzOworCitleHRlcm4gdm9pZCBjbGtzX3JlZ2lzdGVyKHN0cnVjdCBjbGtfbG9va3VwICosIHNpemVfdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtbW1wL2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZTY2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uYwpAQCAtMCwwICsxLDM3IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2NvbW1vbi5jCisgKgorICogIENvZGUgY29tbW9uIHRvIFBYQTE2OCBwcm9jZXNzb3IgbGluZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHN0YW5kYXJkX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFQQl9QSFlTX0JBU0UpLAorCQkudmlydHVhbAk9IEFQQl9WSVJUX0JBU0UsCisJCS5sZW5ndGgJCT0gQVBCX1BIWVNfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFYSV9QSFlTX0JBU0UpLAorCQkudmlydHVhbAk9IEFYSV9WSVJUX0JBU0UsCisJCS5sZW5ndGgJCT0gQVhJX1BIWVNfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sCit9OworCit2b2lkIF9faW5pdCBweGFfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KHN0YW5kYXJkX2lvX2Rlc2MsIEFSUkFZX1NJWkUoc3RhbmRhcmRfaW9fZGVzYykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvY29tbW9uLmggYi9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzNmYmJjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvY29tbW9uLmgKQEAgLTAsMCArMSwxMyBAQAorI2RlZmluZSBBUlJBWV9BTkRfU0laRSh4KQkoeCksIEFSUkFZX1NJWkUoeCkKKworc3RydWN0IHN5c190aW1lcjsKKworZXh0ZXJuIHZvaWQgdGltZXJfaW5pdChpbnQgaXJxKTsKKworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgcHhhMTY4X3RpbWVyOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgcHhhOTEwX3RpbWVyOworZXh0ZXJuIHZvaWQgX19pbml0IHB4YTE2OF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGE5MTBfaW5pdF9pcnEodm9pZCk7CisKK2V4dGVybiB2b2lkIF9faW5pdCBpY3VfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgcHhhX21hcF9pbyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2RldmljZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTFkOWRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvZGV2aWNlcy5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9kZXZpY2VzLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMuaD4KKworaW50IF9faW5pdCBweGFfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgKmRlc2MsCisJCQkJdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzWzIgKyBNQVhfUkVTT1VSQ0VfRE1BXTsKKwlpbnQgaSwgcmV0ID0gMCwgbnJlcyA9IDA7CisKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKGRlc2MtPmRydl9uYW1lLCBkZXNjLT5pZCk7CisJaWYgKHBkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworCisJbWVtc2V0KHJlcywgMCwgc2l6ZW9mKHJlcykpOworCisJaWYgKGRlc2MtPnN0YXJ0ICE9IC0xdWwgJiYgZGVzYy0+c2l6ZSA+IDApIHsKKwkJcmVzW25yZXNdLnN0YXJ0CT0gZGVzYy0+c3RhcnQ7CisJCXJlc1tucmVzXS5lbmQJPSBkZXNjLT5zdGFydCArIGRlc2MtPnNpemUgLSAxOworCQlyZXNbbnJlc10uZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKKwkJbnJlcysrOworCX0KKworCWlmIChkZXNjLT5pcnEgIT0gTk9fSVJRKSB7CisJCXJlc1tucmVzXS5zdGFydAk9IGRlc2MtPmlycTsKKwkJcmVzW25yZXNdLmVuZAk9IGRlc2MtPmlycTsKKwkJcmVzW25yZXNdLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlE7CisJCW5yZXMrKzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1JFU09VUkNFX0RNQTsgaSsrLCBucmVzKyspIHsKKwkJaWYgKGRlc2MtPmRtYVtpXSA9PSAwKQorCQkJYnJlYWs7CisKKwkJcmVzW25yZXNdLnN0YXJ0CT0gZGVzYy0+ZG1hW2ldOworCQlyZXNbbnJlc10uZW5kCT0gZGVzYy0+ZG1hW2ldOworCQlyZXNbbnJlc10uZmxhZ3MJPSBJT1JFU09VUkNFX0RNQTsKKwl9CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByZXMsIG5yZXMpOworCWlmIChyZXQpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZGF0YSAmJiBzaXplKSB7CisJCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YShwZGV2LCBkYXRhLCBzaXplKTsKKwkJaWYgKHJldCkgeworCQkJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9hZGRyLW1hcC5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2FkZHItbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI1NDA4OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9hZGRyLW1hcC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvYWRkci1tYXAuaAorICoKKyAqICAgQ29tbW9uIGFkZHJlc3MgbWFwIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfQUREUl9NQVBfSAorI2RlZmluZSBfX0FTTV9NQUNIX0FERFJfTUFQX0gKKworLyogQVBCIC0gQXBwbGljYXRpb24gU3Vic3lzdGVtIFBlcmlwaGVyYWwgQnVzCisgKgorICogTk9URTogdGhlIERNQSBjb250cm9sbGVyIHJlZ2lzdGVycyBhcmUgYWN0dWFsbHkgb24gdGhlIEFYSSBmYWJyaWMgIzEKKyAqIHNsYXZlIHBvcnQgdG8gQUhCL0FQQiBicmlkZ2UsIGR1ZSB0byBpdHMgY2xvc2UgcmVsYXRpb25zaGlwIHRvIHRob3NlCisgKiBwZXJpcGhlcmFscyBvbiBBUEIsIGxldCdzIGNvdW50IGl0IGludG8gdGhlIEFCUCBtYXBwaW5nIGFyZWEuCisgKi8KKyNkZWZpbmUgQVBCX1BIWVNfQkFTRQkJMHhkNDAwMDAwMAorI2RlZmluZSBBUEJfVklSVF9CQVNFCQkweGZlMDAwMDAwCisjZGVmaW5lIEFQQl9QSFlTX1NJWkUJCTB4MDAyMDAwMDAKKworI2RlZmluZSBBWElfUEhZU19CQVNFCQkweGQ0MjAwMDAwCisjZGVmaW5lIEFYSV9WSVJUX0JBU0UJCTB4ZmUyMDAwMDAKKyNkZWZpbmUgQVhJX1BIWVNfU0laRQkJMHgwMDIwMDAwMAorCisvKiBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgLSBDaGlwIFNlbGVjdCAwIGFuZCAxICovCisjZGVmaW5lIFNNQ19DUzBfUEhZU19CQVNFCTB4ODAwMDAwMDAKKyNkZWZpbmUgU01DX0NTMF9QSFlTX1NJWkUJMHgxMDAwMDAwMAorI2RlZmluZSBTTUNfQ1MxX1BIWVNfQkFTRQkweDkwMDAwMDAwCisjZGVmaW5lIFNNQ19DUzFfUEhZU19TSVpFCTB4MTAwMDAwMDAKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfQUREUl9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYjM1NGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvY2xrZGV2LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfQ0xLREVWX0gKKyNkZWZpbmUgX19BU01fTUFDSF9DTEtERVZfSAorCisjZGVmaW5lIF9fY2xrX2dldChjbGspICh7IDE7IH0pCisjZGVmaW5lIF9fY2xrX3B1dChjbGspIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfQ0xLREVWX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9jcHV0eXBlLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvY3B1dHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1ZTc5N2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvY3B1dHlwZS5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9DUFVUWVBFX0gKKyNkZWZpbmUgX19BU01fTUFDSF9DUFVUWVBFX0gKKworI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CisKKy8qCisgKiAgQ1BVICAgU3RlcHBpbmcgICBPTERfSUQgICAgICAgQ1BVX0lEICAgICAgQ0hJUF9JRAorICoKKyAqIFBYQTE2OCAgICBBMCAgICAweDQxMTU5MjYzICAgMHg1NjE1ODQwMCAgIDB4MDBBMEEzMzMKKyAqIFBYQTkxMCAgICBZMCAgICAweDQxMTU5MjYyICAgMHg1NjE1ODAwMCAgIDB4MDBGMEM5MTAKKyAqLworCisjaWZkZWYgQ09ORklHX0NQVV9QWEExNjgKKyMgIGRlZmluZSBfX2NwdV9pc19weGExNjgoaWQpCVwKKwkoeyB1bnNpZ25lZCBpbnQgX2lkID0gKChpZCkgPj4gOCkgJiAweGZmOyBfaWQgPT0gMHg4NDsgfSkKKyNlbHNlCisjICBkZWZpbmUgX19jcHVfaXNfcHhhMTY4KGlkKQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9QWEE5MTAKKyMgIGRlZmluZSBfX2NwdV9pc19weGE5MTAoaWQpCVwKKwkoeyB1bnNpZ25lZCBpbnQgX2lkID0gKChpZCkgPj4gOCkgJiAweGZmOyBfaWQgPT0gMHg4MDsgfSkKKyNlbHNlCisjICBkZWZpbmUgX19jcHVfaXNfcHhhOTEwKGlkKQkoMCkKKyNlbmRpZgorCisjZGVmaW5lIGNwdV9pc19weGExNjgoKQkJKHsgX19jcHVfaXNfcHhhMTY4KHJlYWRfY3B1aWRfaWQoKSk7IH0pCisjZGVmaW5lIGNwdV9pc19weGE5MTAoKQkJKHsgX19jcHVfaXNfcHhhOTEwKHJlYWRfY3B1aWRfaWQoKSk7IH0pCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0NQVVRZUEVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODUwZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29waWVkIGZyb20gYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2RlYnVnLlMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJCUAgTU1VIGVuYWJsZWQ/CisJCWxkcmVxCVxyeCwgPUFQQl9QSFlTX0JBU0UJCUAgcGh5c2ljYWwKKwkJbGRybmUJXHJ4LCA9QVBCX1ZJUlRfQkFTRQkJQCB2aXJ0dWFsCisJCW9ycglccngsIFxyeCwgIzB4MDAwMTcwMDAKKwkJLmVuZG0KKworI2RlZmluZSBVQVJUX1NISUZUCTIKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kZXZpY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1ODUzOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kZXZpY2VzLmgKQEAgLTAsMCArMSwzNyBAQAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTUFYX1JFU09VUkNFX0RNQQkyCisKKy8qIHN0cnVjdHVyZSBmb3IgZGVzY3JpYmluZyB0aGUgb24tY2hpcCBkZXZpY2VzICovCitzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIHsKKwljb25zdCBjaGFyCSpkZXZfbmFtZTsKKwljb25zdCBjaGFyCSpkcnZfbmFtZTsKKwlpbnQJCWlkOworCWludAkJaXJxOworCXVuc2lnbmVkIGxvbmcJc3RhcnQ7CisJdW5zaWduZWQgbG9uZwlzaXplOworCWludAkJZG1hW01BWF9SRVNPVVJDRV9ETUFdOworfTsKKworI2RlZmluZSBQWEExNjhfREVWSUNFKF9uYW1lLCBfZHJ2LCBfaWQsIF9pcnEsIF9zdGFydCwgX3NpemUsIF9kbWEuLi4pCVwKK3N0cnVjdCBweGFfZGV2aWNlX2Rlc2MgcHhhMTY4X2RldmljZV8jI19uYW1lIF9faW5pdGRhdGEgPSB7CQlcCisJLmRldl9uYW1lCT0gInB4YTE2OC0iICNfbmFtZSwJCQkJXAorCS5kcnZfbmFtZQk9IF9kcnYsCQkJCQkJXAorCS5pZAkJPSBfaWQsCQkJCQkJXAorCS5pcnEJCT0gSVJRX1BYQTE2OF8jI19pcnEsCQkJCVwKKwkuc3RhcnQJCT0gX3N0YXJ0LAkJCQkJXAorCS5zaXplCQk9IF9zaXplLAkJCQkJXAorCS5kbWEJCT0geyBfZG1hIH0sCQkJCQlcCit9OworCisjZGVmaW5lIFBYQTkxMF9ERVZJQ0UoX25hbWUsIF9kcnYsIF9pZCwgX2lycSwgX3N0YXJ0LCBfc2l6ZSwgX2RtYS4uLikJXAorc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBweGE5MTBfZGV2aWNlXyMjX25hbWUgX19pbml0ZGF0YSA9IHsJCVwKKwkuZGV2X25hbWUJPSAicHhhOTEwLSIgI19uYW1lLAkJCQlcCisJLmRydl9uYW1lCT0gX2RydiwJCQkJCQlcCisJLmlkCQk9IF9pZCwJCQkJCQlcCisJLmlycQkJPSBJUlFfUFhBOTEwXyMjX2lycSwJCQkJXAorCS5zdGFydAkJPSBfc3RhcnQsCQkJCQlcCisJLnNpemUJCT0gX3NpemUsCQkJCQlcCisJLmRtYQkJPSB7IF9kbWEgfSwJCQkJCVwKK307CitleHRlcm4gaW50IHB4YV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHB4YV9kZXZpY2VfZGVzYyAqLCB2b2lkICosIHNpemVfdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ2OTE0NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kbWEuaApAQCAtMCwwICsxLDEzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RtYS5oCisgKi8KKworI2lmbmRlZiBfX0FTTV9NQUNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX01BQ0hfRE1BX0gKKworI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKworI2RlZmluZSBETUFDX1JFR1NfVklSVAkoQVBCX1ZJUlRfQkFTRSArIDB4MDAwMDApCisKKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorI2VuZGlmIC8qIF9fQVNNX01BQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzY2QzNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPG1hY2gvcmVncy1pY3UuaD4KKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCisKKwkubWFjcm8JYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwlsZHIJXGJhc2UsID1JQ1VfQVBfSVJRX1NFTF9JTlRfTlVNCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwlsZHIJXHRtcCwgW1xiYXNlLCAjMF0KKwlhbmQJXGlycW5yLCBcdG1wLCAjMHgzZgorCXRzdAlcdG1wLCAjKDEgPDwgNikKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyNmQxMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTAsMCArMSwzNiBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0dQSU9fSAorI2RlZmluZSBfX0FTTV9NQUNIX0dQSU9fSAorCisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KKworI2RlZmluZSBHUElPX1JFR1NfVklSVAkoQVBCX1ZJUlRfQkFTRSArIDB4MTkwMDApCisKKyNkZWZpbmUgQkFOS19PRkYobikJKCgobikgPCAzKSA/IChuKSA8PCAyIDogMHgxMDAgKyAoKChuKSAtIDMpIDw8IDIpKQorI2RlZmluZSBHUElPX1JFRyh4KQkoKigodm9sYXRpbGUgdTMyICopKEdQSU9fUkVHU19WSVJUICsgKHgpKSkpCisKKyNkZWZpbmUgTlJfQlVJTFRJTl9HUElPCSgxMjgpCisKKyNkZWZpbmUgZ3Bpb190b19iYW5rKGdwaW8pCSgoZ3BpbykgPj4gNSkKKyNkZWZpbmUgZ3Bpb190b19pcnEoZ3BpbykJKElSUV9HUElPX1NUQVJUICsgKGdwaW8pKQorI2RlZmluZSBpcnFfdG9fZ3BpbyhpcnEpCSgoaXJxKSAtIElSUV9HUElPX1NUQVJUKQorCisKKyNkZWZpbmUgX19ncGlvX2lzX2ludmVydGVkKGdwaW8pCSgwKQorI2RlZmluZSBfX2dwaW9faXNfb2NjdXBpZWQoZ3BpbykJKDApCisKKy8qIE5PVEU6IHRoZXNlIG1hY3JvcyBhcmUgZGVmaW5lZCBoZXJlIHRvIG1ha2Ugb3B0aW1pemF0aW9uIG9mCisgKiBncGlvX3tnZXQsc2V0fV92YWx1ZSgpIHRvIHdvcmsgd2hlbiAnZ3BpbycgaXMgYSBjb25zdGFudC4KKyAqIFVzYWdlIG9mIHRoZXNlIG1hY3JvcyBvdGhlcndpc2UgaXMgbm8gbG9uZ2VyIHJlY29tbWVuZGVkLAorICogdXNlIGdlbmVyaWMgR1BJTyBBUEkgd2hlbmV2ZXIgcG9zc2libGUuCisgKi8KKyNkZWZpbmUgR1BJT19iaXQoZ3BpbykJKDEgPDwgKChncGlvKSAmIDB4MWYpKQorCisjZGVmaW5lIEdQTFIoeCkJCUdQSU9fUkVHKEJBTktfT0ZGKGdwaW9fdG9fYmFuayh4KSkgKyAweDAwKQorI2RlZmluZSBHUERSKHgpCQlHUElPX1JFRyhCQU5LX09GRihncGlvX3RvX2JhbmsoeCkpICsgMHgwYykKKyNkZWZpbmUgR1BTUih4KQkJR1BJT19SRUcoQkFOS19PRkYoZ3Bpb190b19iYW5rKHgpKSArIDB4MTgpCisjZGVmaW5lIEdQQ1IoeCkJCUdQSU9fUkVHKEJBTktfT0ZGKGdwaW9fdG9fYmFuayh4KSkgKyAweDI0KQorCisjaW5jbHVkZSA8cGxhdC9ncGlvLmg+CisjZW5kaWYgLyogX19BU01fTUFDSF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkyNjRhNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fTUFDSF9IQVJEV0FSRV9ICisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdhZGYzZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvaW8uaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9NQUNIX0lPX0gKKyNkZWZpbmUgX19BU01fTUFDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorCisvKgorICogV2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSByZWFsIElTQSBub3IgUENJIGJ1c2VzLCBidXQgdGhlcmUgaXMgc28gbWFueQorICogZHJpdmVycyBvdXQgdGhlcmUgdGhhdCBtaWdodCBqdXN0IHdvcmsgaWYgd2UgZmFrZSB0aGVtLi4uCisgKi8KKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbyhhKQorI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0lPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4M2U0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0wLDAgKzEsMTE5IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfSVJRU19ICisjZGVmaW5lIF9fQVNNX01BQ0hfSVJRU19ICisKKy8qCisgKiBJbnRlcnJ1cHQgbnVtYmVycyBmb3IgUFhBMTY4CisgKi8KKyNkZWZpbmUgSVJRX1BYQTE2OF9OT05FCQkJKC0xKQorI2RlZmluZSBJUlFfUFhBMTY4X1NTUDMJCQkwCisjZGVmaW5lIElSUV9QWEExNjhfU1NQMgkJCTEKKyNkZWZpbmUgSVJRX1BYQTE2OF9TU1AxCQkJMgorI2RlZmluZSBJUlFfUFhBMTY4X1NTUDAJCQkzCisjZGVmaW5lIElSUV9QWEExNjhfUE1JQ19JTlQJCTQKKyNkZWZpbmUgSVJRX1BYQTE2OF9SVENfSU5UCQk1CisjZGVmaW5lIElSUV9QWEExNjhfUlRDX0FMQVJNCQk2CisjZGVmaW5lIElSUV9QWEExNjhfVFdTSTAJCTcKKyNkZWZpbmUgSVJRX1BYQTE2OF9HUFUJCQk4CisjZGVmaW5lIElSUV9QWEExNjhfS0VZUEFECQk5CisjZGVmaW5lIElSUV9QWEExNjhfT05FV0lSRQkJMTIKKyNkZWZpbmUgSVJRX1BYQTE2OF9USU1FUjEJCTEzCisjZGVmaW5lIElSUV9QWEExNjhfVElNRVIyCQkxNAorI2RlZmluZSBJUlFfUFhBMTY4X1RJTUVSMwkJMTUKKyNkZWZpbmUgSVJRX1BYQTE2OF9DTVUJCQkxNgorI2RlZmluZSBJUlFfUFhBMTY4X1NTUDQJCQkxNworI2RlZmluZSBJUlFfUFhBMTY4X01TUF9XQUtFVVAJCTE5CisjZGVmaW5lIElSUV9QWEExNjhfQ0ZfV0FLRVVQCQkyMAorI2RlZmluZSBJUlFfUFhBMTY4X1hEX1dBS0VVUAkJMjEKKyNkZWZpbmUgSVJRX1BYQTE2OF9NRlUJCQkyMgorI2RlZmluZSBJUlFfUFhBMTY4X01TUAkJCTIzCisjZGVmaW5lIElSUV9QWEExNjhfQ0YJCQkyNAorI2RlZmluZSBJUlFfUFhBMTY4X1hECQkJMjUKKyNkZWZpbmUgSVJRX1BYQTE2OF9ERFJfSU5UCQkyNgorI2RlZmluZSBJUlFfUFhBMTY4X1VBUlQxCQkyNworI2RlZmluZSBJUlFfUFhBMTY4X1VBUlQyCQkyOAorI2RlZmluZSBJUlFfUFhBMTY4X1dEVAkJCTM1CisjZGVmaW5lIElSUV9QWEExNjhfRlJRX0NIQU5HRQkJMzgKKyNkZWZpbmUgSVJRX1BYQTE2OF9TREgxCQkJMzkKKyNkZWZpbmUgSVJRX1BYQTE2OF9TREgyCQkJNDAKKyNkZWZpbmUgSVJRX1BYQTE2OF9MQ0QJCQk0MQorI2RlZmluZSBJUlFfUFhBMTY4X0NJCQkJNDIKKyNkZWZpbmUgSVJRX1BYQTE2OF9VU0IxCQkJNDQKKyNkZWZpbmUgSVJRX1BYQTE2OF9OQU5ECQkJNDUKKyNkZWZpbmUgSVJRX1BYQTE2OF9ISUZJX0RNQQkJNDYKKyNkZWZpbmUgSVJRX1BYQTE2OF9ETUFfSU5UMAkJNDcKKyNkZWZpbmUgSVJRX1BYQTE2OF9ETUFfSU5UMQkJNDgKKyNkZWZpbmUgSVJRX1BYQTE2OF9HUElPWAkJNDkKKyNkZWZpbmUgSVJRX1BYQTE2OF9VU0IyCQkJNTEKKyNkZWZpbmUgSVJRX1BYQTE2OF9BQzk3CQkJNTcKKyNkZWZpbmUgSVJRX1BYQTE2OF9UV1NJMQkJNTgKKyNkZWZpbmUgSVJRX1BYQTE2OF9QTVUJCQk2MAorI2RlZmluZSBJUlFfUFhBMTY4X1NNX0lOVAkJNjMKKworLyoKKyAqIEludGVycnVwdCBudW1iZXJzIGZvciBQWEE5MTAKKyAqLworI2RlZmluZSBJUlFfUFhBOTEwX0FJUlEJCQkwCisjZGVmaW5lIElSUV9QWEE5MTBfU1NQMwkJCTEKKyNkZWZpbmUgSVJRX1BYQTkxMF9TU1AyCQkJMgorI2RlZmluZSBJUlFfUFhBOTEwX1NTUDEJCQkzCisjZGVmaW5lIElSUV9QWEE5MTBfUE1JQ19JTlQJCTQKKyNkZWZpbmUgSVJRX1BYQTkxMF9SVENfSU5UCQk1CisjZGVmaW5lIElSUV9QWEE5MTBfUlRDX0FMQVJNCQk2CisjZGVmaW5lIElSUV9QWEE5MTBfVFdTSTAJCTcKKyNkZWZpbmUgSVJRX1BYQTkxMF9HUFUJCQk4CisjZGVmaW5lIElSUV9QWEE5MTBfS0VZUEFECQk5CisjZGVmaW5lIElSUV9QWEE5MTBfUk9UQVJZCQkxMAorI2RlZmluZSBJUlFfUFhBOTEwX1RSQUNLQkFMTAkJMTEKKyNkZWZpbmUgSVJRX1BYQTkxMF9PTkVXSVJFCQkxMgorI2RlZmluZSBJUlFfUFhBOTEwX0FQMV9USU1FUjEJCTEzCisjZGVmaW5lIElSUV9QWEE5MTBfQVAxX1RJTUVSMgkJMTQKKyNkZWZpbmUgSVJRX1BYQTkxMF9BUDFfVElNRVIzCQkxNQorI2RlZmluZSBJUlFfUFhBOTEwX0lQQ19BUDAJCTE2CisjZGVmaW5lIElSUV9QWEE5MTBfSVBDX0FQMQkJMTcKKyNkZWZpbmUgSVJRX1BYQTkxMF9JUENfQVAyCQkxOAorI2RlZmluZSBJUlFfUFhBOTEwX0lQQ19BUDMJCTE5CisjZGVmaW5lIElSUV9QWEE5MTBfSVBDX0FQNAkJMjAKKyNkZWZpbmUgSVJRX1BYQTkxMF9JUENfQ1AwCQkyMQorI2RlZmluZSBJUlFfUFhBOTEwX0lQQ19DUDEJCTIyCisjZGVmaW5lIElSUV9QWEE5MTBfSVBDX0NQMgkJMjMKKyNkZWZpbmUgSVJRX1BYQTkxMF9JUENfQ1AzCQkyNAorI2RlZmluZSBJUlFfUFhBOTEwX0lQQ19DUDQJCTI1CisjZGVmaW5lIElSUV9QWEE5MTBfTDJfRERSCQkyNgorI2RlZmluZSBJUlFfUFhBOTEwX1VBUlQyCQkyNworI2RlZmluZSBJUlFfUFhBOTEwX1VBUlQzCQkyOAorI2RlZmluZSBJUlFfUFhBOTEwX0FQMl9USU1FUjEJCTI5CisjZGVmaW5lIElSUV9QWEE5MTBfQVAyX1RJTUVSMgkJMzAKKyNkZWZpbmUgSVJRX1BYQTkxMF9DUDJfVElNRVIxCQkzMQorI2RlZmluZSBJUlFfUFhBOTEwX0NQMl9USU1FUjIJCTMyCisjZGVmaW5lIElSUV9QWEE5MTBfQ1AyX1RJTUVSMwkJMzMKKyNkZWZpbmUgSVJRX1BYQTkxMF9HU1NQCQkJMzQKKyNkZWZpbmUgSVJRX1BYQTkxMF9DUDJfV0RUCQkzNQorI2RlZmluZSBJUlFfUFhBOTEwX01BSU5fUE1VCQkzNgorI2RlZmluZSBJUlFfUFhBOTEwX0NQX0ZSRVFfQ0hHCQkzNworI2RlZmluZSBJUlFfUFhBOTEwX0FQX0ZSRVFfQ0hHCQkzOAorI2RlZmluZSBJUlFfUFhBOTEwX01NQwkJCTM5CisjZGVmaW5lIElSUV9QWEE5MTBfQUVVCQkJNDAKKyNkZWZpbmUgSVJRX1BYQTkxMF9MQ0QJCQk0MQorI2RlZmluZSBJUlFfUFhBOTEwX0NDSUMJCQk0MgorI2RlZmluZSBJUlFfUFhBOTEwX0lSRQkJCTQzCisjZGVmaW5lIElSUV9QWEE5MTBfVVNCMQkJCTQ0CisjZGVmaW5lIElSUV9QWEE5MTBfTkFORAkJCTQ1CisjZGVmaW5lIElSUV9QWEE5MTBfSElGSV9ETUEJCTQ2CisjZGVmaW5lIElSUV9QWEE5MTBfRE1BX0lOVDAJCTQ3CisjZGVmaW5lIElSUV9QWEE5MTBfRE1BX0lOVDEJCTQ4CisjZGVmaW5lIElSUV9QWEE5MTBfQVBfR1BJTwkJNDkKKyNkZWZpbmUgSVJRX1BYQTkxMF9BUDJfVElNRVIzCQk1MAorI2RlZmluZSBJUlFfUFhBOTEwX1VTQjIJCQk1MQorI2RlZmluZSBJUlFfUFhBOTEwX1RXU0kxCQk1NAorI2RlZmluZSBJUlFfUFhBOTEwX0NQX0dQSU8JCTU1CisjZGVmaW5lIElSUV9QWEE5MTBfVUFSVDEJCTU5CS8qIFNsb3cgVUFSVCAqLworI2RlZmluZSBJUlFfUFhBOTEwX0FQX1BNVQkJNjAKKyNkZWZpbmUgSVJRX1BYQTkxMF9TTV9JTlQJCTYzCS8qIGZyb20gUGluTXV4ICovCisKKyNkZWZpbmUgSVJRX0dQSU9fU1RBUlQJCQk2NAorI2RlZmluZSBJUlFfR1BJT19OVU0JCQkxMjgKKyNkZWZpbmUgSVJRX0dQSU8oeCkJCQkoSVJRX0dQSU9fU1RBUlQgKyAoeCkpCisKKyNkZWZpbmUgTlJfSVJRUwkJKElSUV9HUElPX1NUQVJUICsgSVJRX0dQSU9fTlVNKQorCisjZW5kaWYgLyogX19BU01fTUFDSF9JUlFTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGIyMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9NQUNIX01FTU9SWV9ICisKKyNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfTUVNT1JZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhMTY4LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTE2OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYmRiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTE2OC5oCkBAIC0wLDAgKzEsMjU4IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfTUZQX1BYQTE2OF9ICisjZGVmaW5lIF9fQVNNX01BQ0hfTUZQX1BYQTE2OF9ICisKKyNpbmNsdWRlIDxtYWNoL21mcC5oPgorCisvKiBHUElPICovCisjZGVmaW5lIEdQSU8wX0dQSU8JCU1GUF9DRkcoR1BJTzAsIEFGNSkKKyNkZWZpbmUgR1BJTzFfR1BJTwkJTUZQX0NGRyhHUElPMSwgQUY1KQorI2RlZmluZSBHUElPMl9HUElPCQlNRlBfQ0ZHKEdQSU8yLCBBRjUpCisjZGVmaW5lIEdQSU8zX0dQSU8JCU1GUF9DRkcoR1BJTzMsIEFGNSkKKyNkZWZpbmUgR1BJTzRfR1BJTwkJTUZQX0NGRyhHUElPNCwgQUY1KQorI2RlZmluZSBHUElPNV9HUElPCQlNRlBfQ0ZHKEdQSU81LCBBRjUpCisjZGVmaW5lIEdQSU82X0dQSU8JCU1GUF9DRkcoR1BJTzYsIEFGNSkKKyNkZWZpbmUgR1BJTzdfR1BJTwkJTUZQX0NGRyhHUElPNywgQUY1KQorI2RlZmluZSBHUElPOF9HUElPCQlNRlBfQ0ZHKEdQSU84LCBBRjUpCisjZGVmaW5lIEdQSU85X0dQSU8JCU1GUF9DRkcoR1BJTzksIEFGNSkKKyNkZWZpbmUgR1BJTzEwX0dQSU8JCU1GUF9DRkcoR1BJTzEwLCBBRjUpCisjZGVmaW5lIEdQSU8xMV9HUElPCQlNRlBfQ0ZHKEdQSU8xMSwgQUY1KQorI2RlZmluZSBHUElPMTJfR1BJTwkJTUZQX0NGRyhHUElPMTIsIEFGNSkKKyNkZWZpbmUgR1BJTzEzX0dQSU8JCU1GUF9DRkcoR1BJTzEzLCBBRjUpCisjZGVmaW5lIEdQSU8xNF9HUElPCQlNRlBfQ0ZHKEdQSU8xNCwgQUY1KQorI2RlZmluZSBHUElPMTVfR1BJTwkJTUZQX0NGRyhHUElPMTUsIEFGNSkKKyNkZWZpbmUgR1BJTzE2X0dQSU8JCU1GUF9DRkcoR1BJTzE2LCBBRjApCisjZGVmaW5lIEdQSU8xN19HUElPCQlNRlBfQ0ZHKEdQSU8xNywgQUY1KQorI2RlZmluZSBHUElPMThfR1BJTwkJTUZQX0NGRyhHUElPMTgsIEFGMCkKKyNkZWZpbmUgR1BJTzE5X0dQSU8JCU1GUF9DRkcoR1BJTzE5LCBBRjUpCisjZGVmaW5lIEdQSU8yMF9HUElPCQlNRlBfQ0ZHKEdQSU8yMCwgQUYwKQorI2RlZmluZSBHUElPMjFfR1BJTwkJTUZQX0NGRyhHUElPMjEsIEFGNSkKKyNkZWZpbmUgR1BJTzIyX0dQSU8JCU1GUF9DRkcoR1BJTzIyLCBBRjUpCisjZGVmaW5lIEdQSU8yM19HUElPCQlNRlBfQ0ZHKEdQSU8yMywgQUY1KQorI2RlZmluZSBHUElPMjRfR1BJTwkJTUZQX0NGRyhHUElPMjQsIEFGNSkKKyNkZWZpbmUgR1BJTzI1X0dQSU8JCU1GUF9DRkcoR1BJTzI1LCBBRjUpCisjZGVmaW5lIEdQSU8yNl9HUElPCQlNRlBfQ0ZHKEdQSU8yNiwgQUYwKQorI2RlZmluZSBHUElPMjdfR1BJTwkJTUZQX0NGRyhHUElPMjcsIEFGNSkKKyNkZWZpbmUgR1BJTzI4X0dQSU8JCU1GUF9DRkcoR1BJTzI4LCBBRjUpCisjZGVmaW5lIEdQSU8yOV9HUElPCQlNRlBfQ0ZHKEdQSU8yOSwgQUY1KQorI2RlZmluZSBHUElPMzBfR1BJTwkJTUZQX0NGRyhHUElPMzAsIEFGNSkKKyNkZWZpbmUgR1BJTzMxX0dQSU8JCU1GUF9DRkcoR1BJTzMxLCBBRjUpCisjZGVmaW5lIEdQSU8zMl9HUElPCQlNRlBfQ0ZHKEdQSU8zMiwgQUY1KQorI2RlZmluZSBHUElPMzNfR1BJTwkJTUZQX0NGRyhHUElPMzMsIEFGNSkKKyNkZWZpbmUgR1BJTzM0X0dQSU8JCU1GUF9DRkcoR1BJTzM0LCBBRjApCisjZGVmaW5lIEdQSU8zNV9HUElPCQlNRlBfQ0ZHKEdQSU8zNSwgQUYwKQorI2RlZmluZSBHUElPMzZfR1BJTwkJTUZQX0NGRyhHUElPMzYsIEFGMCkKKyNkZWZpbmUgR1BJTzM3X0dQSU8JCU1GUF9DRkcoR1BJTzM3LCBBRjApCisjZGVmaW5lIEdQSU8zOF9HUElPCQlNRlBfQ0ZHKEdQSU8zOCwgQUYwKQorI2RlZmluZSBHUElPMzlfR1BJTwkJTUZQX0NGRyhHUElPMzksIEFGMCkKKyNkZWZpbmUgR1BJTzQwX0dQSU8JCU1GUF9DRkcoR1BJTzQwLCBBRjApCisjZGVmaW5lIEdQSU80MV9HUElPCQlNRlBfQ0ZHKEdQSU80MSwgQUYwKQorI2RlZmluZSBHUElPNDJfR1BJTwkJTUZQX0NGRyhHUElPNDIsIEFGMCkKKyNkZWZpbmUgR1BJTzQzX0dQSU8JCU1GUF9DRkcoR1BJTzQzLCBBRjApCisjZGVmaW5lIEdQSU80NF9HUElPCQlNRlBfQ0ZHKEdQSU80NCwgQUYwKQorI2RlZmluZSBHUElPNDVfR1BJTwkJTUZQX0NGRyhHUElPNDUsIEFGMCkKKyNkZWZpbmUgR1BJTzQ2X0dQSU8JCU1GUF9DRkcoR1BJTzQ2LCBBRjApCisjZGVmaW5lIEdQSU80N19HUElPCQlNRlBfQ0ZHKEdQSU80NywgQUYwKQorI2RlZmluZSBHUElPNDhfR1BJTwkJTUZQX0NGRyhHUElPNDgsIEFGMCkKKyNkZWZpbmUgR1BJTzQ5X0dQSU8JCU1GUF9DRkcoR1BJTzQ5LCBBRjApCisjZGVmaW5lIEdQSU81MF9HUElPCQlNRlBfQ0ZHKEdQSU81MCwgQUYwKQorI2RlZmluZSBHUElPNTFfR1BJTwkJTUZQX0NGRyhHUElPNTEsIEFGMCkKKyNkZWZpbmUgR1BJTzUyX0dQSU8JCU1GUF9DRkcoR1BJTzUyLCBBRjApCisjZGVmaW5lIEdQSU81M19HUElPCQlNRlBfQ0ZHKEdQSU81MywgQUYwKQorI2RlZmluZSBHUElPNTRfR1BJTwkJTUZQX0NGRyhHUElPNTQsIEFGMCkKKyNkZWZpbmUgR1BJTzU1X0dQSU8JCU1GUF9DRkcoR1BJTzU1LCBBRjApCisjZGVmaW5lIEdQSU81Nl9HUElPCQlNRlBfQ0ZHKEdQSU81NiwgQUYwKQorI2RlZmluZSBHUElPNTdfR1BJTwkJTUZQX0NGRyhHUElPNTcsIEFGMCkKKyNkZWZpbmUgR1BJTzU4X0dQSU8JCU1GUF9DRkcoR1BJTzU4LCBBRjApCisjZGVmaW5lIEdQSU81OV9HUElPCQlNRlBfQ0ZHKEdQSU81OSwgQUYwKQorI2RlZmluZSBHUElPNjBfR1BJTwkJTUZQX0NGRyhHUElPNjAsIEFGMCkKKyNkZWZpbmUgR1BJTzYxX0dQSU8JCU1GUF9DRkcoR1BJTzYxLCBBRjApCisjZGVmaW5lIEdQSU82Ml9HUElPCQlNRlBfQ0ZHKEdQSU82MiwgQUYwKQorI2RlZmluZSBHUElPNjNfR1BJTwkJTUZQX0NGRyhHUElPNjMsIEFGMCkKKyNkZWZpbmUgR1BJTzY0X0dQSU8JCU1GUF9DRkcoR1BJTzY0LCBBRjApCisjZGVmaW5lIEdQSU82NV9HUElPCQlNRlBfQ0ZHKEdQSU82NSwgQUYwKQorI2RlZmluZSBHUElPNjZfR1BJTwkJTUZQX0NGRyhHUElPNjYsIEFGMCkKKyNkZWZpbmUgR1BJTzY3X0dQSU8JCU1GUF9DRkcoR1BJTzY3LCBBRjApCisjZGVmaW5lIEdQSU82OF9HUElPCQlNRlBfQ0ZHKEdQSU82OCwgQUYwKQorI2RlZmluZSBHUElPNjlfR1BJTwkJTUZQX0NGRyhHUElPNjksIEFGMCkKKyNkZWZpbmUgR1BJTzcwX0dQSU8JCU1GUF9DRkcoR1BJTzcwLCBBRjApCisjZGVmaW5lIEdQSU83MV9HUElPCQlNRlBfQ0ZHKEdQSU83MSwgQUYwKQorI2RlZmluZSBHUElPNzJfR1BJTwkJTUZQX0NGRyhHUElPNzIsIEFGMCkKKyNkZWZpbmUgR1BJTzczX0dQSU8JCU1GUF9DRkcoR1BJTzczLCBBRjApCisjZGVmaW5lIEdQSU83NF9HUElPCQlNRlBfQ0ZHKEdQSU83NCwgQUYwKQorI2RlZmluZSBHUElPNzVfR1BJTwkJTUZQX0NGRyhHUElPNzUsIEFGMCkKKyNkZWZpbmUgR1BJTzc2X0dQSU8JCU1GUF9DRkcoR1BJTzc2LCBBRjApCisjZGVmaW5lIEdQSU83N19HUElPCQlNRlBfQ0ZHKEdQSU83NywgQUYwKQorI2RlZmluZSBHUElPNzhfR1BJTwkJTUZQX0NGRyhHUElPNzgsIEFGMCkKKyNkZWZpbmUgR1BJTzc5X0dQSU8JCU1GUF9DRkcoR1BJTzc5LCBBRjApCisjZGVmaW5lIEdQSU84MF9HUElPCQlNRlBfQ0ZHKEdQSU84MCwgQUYwKQorI2RlZmluZSBHUElPODFfR1BJTwkJTUZQX0NGRyhHUElPODEsIEFGMCkKKyNkZWZpbmUgR1BJTzgyX0dQSU8JCU1GUF9DRkcoR1BJTzgyLCBBRjApCisjZGVmaW5lIEdQSU84M19HUElPCQlNRlBfQ0ZHKEdQSU84MywgQUYwKQorI2RlZmluZSBHUElPODRfR1BJTwkJTUZQX0NGRyhHUElPODQsIEFGMCkKKyNkZWZpbmUgR1BJTzg1X0dQSU8JCU1GUF9DRkcoR1BJTzg1LCBBRjApCisjZGVmaW5lIEdQSU84Nl9HUElPCQlNRlBfQ0ZHKEdQSU84NiwgQUYwKQorI2RlZmluZSBHUElPODdfR1BJTwkJTUZQX0NGRyhHUElPODcsIEFGMCkKKyNkZWZpbmUgR1BJTzg4X0dQSU8JCU1GUF9DRkcoR1BJTzg4LCBBRjApCisjZGVmaW5lIEdQSU84OV9HUElPCQlNRlBfQ0ZHKEdQSU84OSwgQUYwKQorI2RlZmluZSBHUElPOTBfR1BJTwkJTUZQX0NGRyhHUElPOTAsIEFGMCkKKyNkZWZpbmUgR1BJTzkxX0dQSU8JCU1GUF9DRkcoR1BJTzkxLCBBRjApCisjZGVmaW5lIEdQSU85Ml9HUElPCQlNRlBfQ0ZHKEdQSU85MiwgQUYwKQorI2RlZmluZSBHUElPOTNfR1BJTwkJTUZQX0NGRyhHUElPOTMsIEFGMCkKKyNkZWZpbmUgR1BJTzk0X0dQSU8JCU1GUF9DRkcoR1BJTzk0LCBBRjApCisjZGVmaW5lIEdQSU85NV9HUElPCQlNRlBfQ0ZHKEdQSU85NSwgQUYwKQorI2RlZmluZSBHUElPOTZfR1BJTwkJTUZQX0NGRyhHUElPOTYsIEFGMCkKKyNkZWZpbmUgR1BJTzk3X0dQSU8JCU1GUF9DRkcoR1BJTzk3LCBBRjApCisjZGVmaW5lIEdQSU85OF9HUElPCQlNRlBfQ0ZHKEdQSU85OCwgQUYwKQorI2RlZmluZSBHUElPOTlfR1BJTwkJTUZQX0NGRyhHUElPOTksIEFGMCkKKyNkZWZpbmUgR1BJTzEwMF9HUElPCQlNRlBfQ0ZHKEdQSU8xMDAsIEFGMCkKKyNkZWZpbmUgR1BJTzEwMV9HUElPCQlNRlBfQ0ZHKEdQSU8xMDEsIEFGMCkKKyNkZWZpbmUgR1BJTzEwMl9HUElPCQlNRlBfQ0ZHKEdQSU8xMDIsIEFGMCkKKyNkZWZpbmUgR1BJTzEwM19HUElPCQlNRlBfQ0ZHKEdQSU8xMDMsIEFGMCkKKyNkZWZpbmUgR1BJTzEwNF9HUElPCQlNRlBfQ0ZHKEdQSU8xMDQsIEFGMCkKKyNkZWZpbmUgR1BJTzEwNV9HUElPCQlNRlBfQ0ZHKEdQSU8xMDUsIEFGMCkKKyNkZWZpbmUgR1BJTzEwNl9HUElPCQlNRlBfQ0ZHKEdQSU8xMDYsIEFGMCkKKyNkZWZpbmUgR1BJTzEwN19HUElPCQlNRlBfQ0ZHKEdQSU8xMDcsIEFGMCkKKyNkZWZpbmUgR1BJTzEwOF9HUElPCQlNRlBfQ0ZHKEdQSU8xMDgsIEFGMCkKKyNkZWZpbmUgR1BJTzEwOV9HUElPCQlNRlBfQ0ZHKEdQSU8xMDksIEFGMCkKKyNkZWZpbmUgR1BJTzExMF9HUElPCQlNRlBfQ0ZHKEdQSU8xMTAsIEFGMCkKKyNkZWZpbmUgR1BJTzExMV9HUElPCQlNRlBfQ0ZHKEdQSU8xMTEsIEFGMCkKKyNkZWZpbmUgR1BJTzExMl9HUElPCQlNRlBfQ0ZHKEdQSU8xMTIsIEFGMCkKKyNkZWZpbmUgR1BJTzExM19HUElPCQlNRlBfQ0ZHKEdQSU8xMTMsIEFGMCkKKyNkZWZpbmUgR1BJTzExNF9HUElPCQlNRlBfQ0ZHKEdQSU8xMTQsIEFGMCkKKyNkZWZpbmUgR1BJTzExNV9HUElPCQlNRlBfQ0ZHKEdQSU8xMTUsIEFGMCkKKyNkZWZpbmUgR1BJTzExNl9HUElPCQlNRlBfQ0ZHKEdQSU8xMTYsIEFGMCkKKyNkZWZpbmUgR1BJTzExN19HUElPCQlNRlBfQ0ZHKEdQSU8xMTcsIEFGMCkKKyNkZWZpbmUgR1BJTzExOF9HUElPCQlNRlBfQ0ZHKEdQSU8xMTgsIEFGMCkKKyNkZWZpbmUgR1BJTzExOV9HUElPCQlNRlBfQ0ZHKEdQSU8xMTksIEFGMCkKKyNkZWZpbmUgR1BJTzEyMF9HUElPCQlNRlBfQ0ZHKEdQSU8xMjAsIEFGMCkKKyNkZWZpbmUgR1BJTzEyMV9HUElPCQlNRlBfQ0ZHKEdQSU8xMjEsIEFGMCkKKyNkZWZpbmUgR1BJTzEyMl9HUElPCQlNRlBfQ0ZHKEdQSU8xMjIsIEFGMCkKKworLyogREZJICovCisjZGVmaW5lIEdQSU8wX0RGSV9EMTUJCU1GUF9DRkcoR1BJTzAsIEFGMCkKKyNkZWZpbmUgR1BJTzFfREZJX0QxNAkJTUZQX0NGRyhHUElPMSwgQUYwKQorI2RlZmluZSBHUElPMl9ERklfRDEzCQlNRlBfQ0ZHKEdQSU8yLCBBRjApCisjZGVmaW5lIEdQSU8zX0RGSV9EMTIJCU1GUF9DRkcoR1BJTzMsIEFGMCkKKyNkZWZpbmUgR1BJTzRfREZJX0QxMQkJTUZQX0NGRyhHUElPNCwgQUYwKQorI2RlZmluZSBHUElPNV9ERklfRDEwCQlNRlBfQ0ZHKEdQSU81LCBBRjApCisjZGVmaW5lIEdQSU82X0RGSV9EOQkJTUZQX0NGRyhHUElPNiwgQUYwKQorI2RlZmluZSBHUElPN19ERklfRDgJCU1GUF9DRkcoR1BJTzcsIEFGMCkKKyNkZWZpbmUgR1BJTzhfREZJX0Q3CQlNRlBfQ0ZHKEdQSU84LCBBRjApCisjZGVmaW5lIEdQSU85X0RGSV9ENgkJTUZQX0NGRyhHUElPOSwgQUYwKQorI2RlZmluZSBHUElPMTBfREZJX0Q1CQlNRlBfQ0ZHKEdQSU8xMCwgQUYwKQorI2RlZmluZSBHUElPMTFfREZJX0Q0CQlNRlBfQ0ZHKEdQSU8xMSwgQUYwKQorI2RlZmluZSBHUElPMTJfREZJX0QzCQlNRlBfQ0ZHKEdQSU8xMiwgQUYwKQorI2RlZmluZSBHUElPMTNfREZJX0QyCQlNRlBfQ0ZHKEdQSU8xMywgQUYwKQorI2RlZmluZSBHUElPMTRfREZJX0QxCQlNRlBfQ0ZHKEdQSU8xNCwgQUYwKQorI2RlZmluZSBHUElPMTVfREZJX0QwCQlNRlBfQ0ZHKEdQSU8xNSwgQUYwKQorCisjZGVmaW5lIEdQSU8zMF9ERklfQUREUjAJTUZQX0NGRyhHUElPMzAsIEFGMCkKKyNkZWZpbmUgR1BJTzMxX0RGSV9BRERSMQlNRlBfQ0ZHKEdQSU8zMSwgQUYwKQorI2RlZmluZSBHUElPMzJfREZJX0FERFIyCU1GUF9DRkcoR1BJTzMyLCBBRjApCisjZGVmaW5lIEdQSU8zM19ERklfQUREUjMJTUZQX0NGRyhHUElPMzMsIEFGMCkKKworLyogTkFORCAqLworI2RlZmluZSBHUElPMTZfTkRfbkNTMAkJTUZQX0NGRyhHUElPMTYsIEFGMSkKKyNkZWZpbmUgR1BJTzE3X05EX25XRQkJTUZQX0NGRyhHUElPMTcsIEFGMCkKKyNkZWZpbmUgR1BJTzIxX05EX0FMRQkJTUZQX0NGRyhHUElPMjEsIEFGMCkKKyNkZWZpbmUgR1BJTzIyX05EX0NMRQkJTUZQX0NGRyhHUElPMjIsIEFGMCkKKyNkZWZpbmUgR1BJTzI0X05EX25SRQkJTUZQX0NGRyhHUElPMjQsIEFGMCkKKyNkZWZpbmUgR1BJTzI2X05EX1JuQjEJCU1GUF9DRkcoR1BJTzI2LCBBRjEpCisjZGVmaW5lIEdQSU8yN19ORF9SbkIyCQlNRlBfQ0ZHKEdQSU8yNywgQUYxKQorCisvKiBTdGF0aWMgTWVtb3J5IENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgR1BJTzE4X1NNQ19uQ1MwCQlNRlBfQ0ZHKEdQSU8xOCwgQUYzKQorI2RlZmluZSBHUElPMThfU01DX25DUzEJCU1GUF9DRkcoR1BJTzE4LCBBRjIpCisjZGVmaW5lIEdQSU8xNl9TTUNfbkNTMAkJTUZQX0NGRyhHUElPMTYsIEFGMikKKyNkZWZpbmUgR1BJTzE2X1NNQ19uQ1MxCQlNRlBfQ0ZHKEdQSU8xNiwgQUYzKQorI2RlZmluZSBHUElPMTlfU01DX25DUzAJCU1GUF9DRkcoR1BJTzE5LCBBRjApCisjZGVmaW5lIEdQSU8yMF9TTUNfbkNTMQkJTUZQX0NGRyhHUElPMjAsIEFGMikKKyNkZWZpbmUgR1BJTzIzX1NNQ19uTFVBCQlNRlBfQ0ZHKEdQSU8yMywgQUYwKQorI2RlZmluZSBHUElPMjVfU01DX25MTEEJCU1GUF9DRkcoR1BJTzI1LCBBRjApCisjZGVmaW5lIEdQSU8yN19TTUNfSVJRCQlNRlBfQ0ZHKEdQSU8yNywgQUYwKQorI2RlZmluZSBHUElPMjhfU01DX1JEWQkJTUZQX0NGRyhHUElPMjgsIEFGMCkKKyNkZWZpbmUgR1BJTzI5X1NNQ19TQ0xLCQlNRlBfQ0ZHKEdQSU8yOSwgQUYwKQorI2RlZmluZSBHUElPMzRfU01DX25DUzEJCU1GUF9DRkcoR1BJTzM0LCBBRjIpCisjZGVmaW5lIEdQSU8zNV9TTUNfQkUxCQlNRlBfQ0ZHKEdQSU8zNSwgQUYyKQorI2RlZmluZSBHUElPMzZfU01DX0JFMgkJTUZQX0NGRyhHUElPMzYsIEFGMikKKworLyogQ29tcGFjdCBGbGFzaCAqLworI2RlZmluZSBHUElPMTlfQ0ZfbkNFMQkJTUZQX0NGRyhHUElPMTksIEFGMykKKyNkZWZpbmUgR1BJTzIwX0NGX25DRTIJCU1GUF9DRkcoR1BJTzIwLCBBRjMpCisjZGVmaW5lIEdQSU8yM19DRl9uQUxFCQlNRlBfQ0ZHKEdQSU8yMywgQUYzKQorI2RlZmluZSBHUElPMjVfQ0ZfblJFU0VUCU1GUF9DRkcoR1BJTzI1LCBBRjMpCisjZGVmaW5lIEdQSU8yOF9DRl9SRFkJCU1GUF9DRkcoR1BJTzI4LCBBRjMpCisjZGVmaW5lIEdQSU8yOV9DRl9TVFNDSAkJTUZQX0NGRyhHUElPMjksIEFGMykKKyNkZWZpbmUgR1BJTzMwX0NGX25SRUcJCU1GUF9DRkcoR1BJTzMwLCBBRjMpCisjZGVmaW5lIEdQSU8zMV9DRl9uSU9JUzE2CU1GUF9DRkcoR1BJTzMxLCBBRjMpCisjZGVmaW5lIEdQSU8zMl9DRl9uQ0QxCQlNRlBfQ0ZHKEdQSU8zMiwgQUYzKQorI2RlZmluZSBHUElPMzNfQ0ZfbkNEMgkJTUZQX0NGRyhHUElPMzMsIEFGMykKKworLyogVUFSVDEgKi8KKyNkZWZpbmUgR1BJTzEwN19VQVJUMV9UWEQJTUZQX0NGR19EUlYoR1BJTzEwNywgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPMTA3X1VBUlQxX1JYRAlNRlBfQ0ZHX0RSVihHUElPMTA3LCBBRjIsIEZBU1QpCisjZGVmaW5lIEdQSU8xMDhfVUFSVDFfUlhECU1GUF9DRkdfRFJWKEdQSU8xMDgsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzEwOF9VQVJUMV9UWEQJTUZQX0NGR19EUlYoR1BJTzEwOCwgQUYyLCBGQVNUKQorI2RlZmluZSBHUElPMTA5X1VBUlQxX0NUUwlNRlBfQ0ZHKEdQSU8xMDksIEFGMSkKKyNkZWZpbmUgR1BJTzEwOV9VQVJUMV9SVFMJTUZQX0NGRyhHUElPMTA5LCBBRjIpCisjZGVmaW5lIEdQSU8xMTBfVUFSVDFfUlRTCU1GUF9DRkcoR1BJTzExMCwgQUYxKQorI2RlZmluZSBHUElPMTEwX1VBUlQxX0NUUwlNRlBfQ0ZHKEdQSU8xMTAsIEFGMikKKyNkZWZpbmUgR1BJTzExMV9VQVJUMV9SSQlNRlBfQ0ZHKEdQSU8xMTEsIEFGMSkKKyNkZWZpbmUgR1BJTzExMV9VQVJUMV9EU1IJTUZQX0NGRyhHUElPMTExLCBBRjIpCisjZGVmaW5lIEdQSU8xMTJfVUFSVDFfRFRSCU1GUF9DRkcoR1BJTzExMSwgQUYxKQorI2RlZmluZSBHUElPMTEyX1VBUlQxX0RDRAlNRlBfQ0ZHKEdQSU8xMTIsIEFGMikKKworLyogTU1DMSAqLworI2RlZmluZSBHUElPMzdfTU1DMV9EQVQ3CU1GUF9DRkcoR1BJTzM3LCBBRjEpCisjZGVmaW5lIEdQSU8zOF9NTUMxX0RBVDYJTUZQX0NGRyhHUElPMzgsIEFGMSkKKyNkZWZpbmUgR1BJTzU0X01NQzFfREFUNQlNRlBfQ0ZHKEdQSU81NCwgQUYxKQorI2RlZmluZSBHUElPNDhfTU1DMV9EQVQ0CU1GUF9DRkcoR1BJTzQ4LCBBRjEpCisjZGVmaW5lIEdQSU81MV9NTUMxX0RBVDMJTUZQX0NGRyhHUElPNTEsIEFGMSkKKyNkZWZpbmUgR1BJTzUyX01NQzFfREFUMglNRlBfQ0ZHKEdQSU81MiwgQUYxKQorI2RlZmluZSBHUElPNDBfTU1DMV9EQVQxCU1GUF9DRkcoR1BJTzQwLCBBRjEpCisjZGVmaW5lIEdQSU80MV9NTUMxX0RBVDAJTUZQX0NGRyhHUElPNDEsIEFGMSkKKyNkZWZpbmUgR1BJTzQ5X01NQzFfQ01ECQlNRlBfQ0ZHKEdQSU80OSwgQUYxKQorI2RlZmluZSBHUElPNDNfTU1DMV9DTEsJCU1GUF9DRkcoR1BJTzQzLCBBRjEpCisjZGVmaW5lIEdQSU81M19NTUMxX0NECQlNRlBfQ0ZHKEdQSU81MywgQUYxKQorI2RlZmluZSBHUElPNDZfTU1DMV9XUAkJTUZQX0NGRyhHUElPNDYsIEFGMSkKKworLyogTENEICovCisjZGVmaW5lIEdQSU84NF9MQ0RfQ1MJCU1GUF9DRkcoR1BJTzg0LCBBRjEpCisjZGVmaW5lIEdQSU82MF9MQ0RfREQwCQlNRlBfQ0ZHKEdQSU82MCwgQUYxKQorI2RlZmluZSBHUElPNjFfTENEX0REMQkJTUZQX0NGRyhHUElPNjEsIEFGMSkKKyNkZWZpbmUgR1BJTzcwX0xDRF9ERDEwCQlNRlBfQ0ZHKEdQSU83MCwgQUYxKQorI2RlZmluZSBHUElPNzFfTENEX0REMTEJCU1GUF9DRkcoR1BJTzcxLCBBRjEpCisjZGVmaW5lIEdQSU83Ml9MQ0RfREQxMgkJTUZQX0NGRyhHUElPNzIsIEFGMSkKKyNkZWZpbmUgR1BJTzczX0xDRF9ERDEzCQlNRlBfQ0ZHKEdQSU83MywgQUYxKQorI2RlZmluZSBHUElPNzRfTENEX0REMTQJCU1GUF9DRkcoR1BJTzc0LCBBRjEpCisjZGVmaW5lIEdQSU83NV9MQ0RfREQxNQkJTUZQX0NGRyhHUElPNzUsIEFGMSkKKyNkZWZpbmUgR1BJTzc2X0xDRF9ERDE2CQlNRlBfQ0ZHKEdQSU83NiwgQUYxKQorI2RlZmluZSBHUElPNzdfTENEX0REMTcJCU1GUF9DRkcoR1BJTzc3LCBBRjEpCisjZGVmaW5lIEdQSU83OF9MQ0RfREQxOAkJTUZQX0NGRyhHUElPNzgsIEFGMSkKKyNkZWZpbmUgR1BJTzc5X0xDRF9ERDE5CQlNRlBfQ0ZHKEdQSU83OSwgQUYxKQorI2RlZmluZSBHUElPNjJfTENEX0REMgkJTUZQX0NGRyhHUElPNjIsIEFGMSkKKyNkZWZpbmUgR1BJTzgwX0xDRF9ERDIwCQlNRlBfQ0ZHKEdQSU84MCwgQUYxKQorI2RlZmluZSBHUElPODFfTENEX0REMjEJCU1GUF9DRkcoR1BJTzgxLCBBRjEpCisjZGVmaW5lIEdQSU84Ml9MQ0RfREQyMgkJTUZQX0NGRyhHUElPODIsIEFGMSkKKyNkZWZpbmUgR1BJTzgzX0xDRF9ERDIzCQlNRlBfQ0ZHKEdQSU84MywgQUYxKQorI2RlZmluZSBHUElPNjNfTENEX0REMwkJTUZQX0NGRyhHUElPNjMsIEFGMSkKKyNkZWZpbmUgR1BJTzY0X0xDRF9ERDQJCU1GUF9DRkcoR1BJTzY0LCBBRjEpCisjZGVmaW5lIEdQSU82NV9MQ0RfREQ1CQlNRlBfQ0ZHKEdQSU82NSwgQUYxKQorI2RlZmluZSBHUElPNjZfTENEX0RENgkJTUZQX0NGRyhHUElPNjYsIEFGMSkKKyNkZWZpbmUgR1BJTzY3X0xDRF9ERDcJCU1GUF9DRkcoR1BJTzY3LCBBRjEpCisjZGVmaW5lIEdQSU82OF9MQ0RfREQ4CQlNRlBfQ0ZHKEdQSU82OCwgQUYxKQorI2RlZmluZSBHUElPNjlfTENEX0REOQkJTUZQX0NGRyhHUElPNjksIEFGMSkKKyNkZWZpbmUgR1BJTzU5X0xDRF9ERU5BX0JJQVMJTUZQX0NGRyhHUElPNTksIEFGMSkKKyNkZWZpbmUgR1BJTzU2X0xDRF9GQ0xLX1JECU1GUF9DRkcoR1BJTzU2LCBBRjEpCisjZGVmaW5lIEdQSU81N19MQ0RfTENMS19BMAlNRlBfQ0ZHKEdQSU81NywgQUYxKQorI2RlZmluZSBHUElPNThfTENEX1BDTEtfV1IJTUZQX0NGRyhHUElPNTgsIEFGMSkKKyNkZWZpbmUgR1BJTzg1X0xDRF9WU1lOQwlNRlBfQ0ZHKEdQSU84NSwgQUYxKQorCisvKiBJMlMgKi8KKyNkZWZpbmUgR1BJTzExM19JMlNfTUNMSwlNRlBfQ0ZHKEdQSU8xMTMsQUY2KQorI2RlZmluZSBHUElPMTE0X0kyU19GUk0JCU1GUF9DRkcoR1BJTzExNCxBRjEpCisjZGVmaW5lIEdQSU8xMTVfSTJTX0JDTEsJTUZQX0NGRyhHUElPMTE1LEFGMSkKKyNkZWZpbmUgR1BJTzExNl9JMlNfUlhECQlNRlBfQ0ZHKEdQSU8xMTYsQUYyKQorI2RlZmluZSBHUElPMTE3X0kyU19UWEQJCU1GUF9DRkcoR1BJTzExNyxBRjIpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01GUF9QWEExNjhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGE5MTAuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhhMWNiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTEwLmgKQEAgLTAsMCArMSwxNTcgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9NRlBfUFhBOTEwX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NRlBfUFhBOTEwX0gKKworI2luY2x1ZGUgPG1hY2gvbWZwLmg+CisKKy8qIFVBUlQyICovCisjZGVmaW5lIEdQSU80N19VQVJUMl9SWEQJTUZQX0NGRyhHUElPNDcsIEFGNikKKyNkZWZpbmUgR1BJTzQ4X1VBUlQyX1RYRAlNRlBfQ0ZHKEdQSU80OCwgQUY2KQorCisvKiBVQVJUMyAqLworI2RlZmluZSBHUElPMzFfVUFSVDNfUlhECU1GUF9DRkcoR1BJTzMxLCBBRjQpCisjZGVmaW5lIEdQSU8zMl9VQVJUM19UWEQJTUZQX0NGRyhHUElPMzIsIEFGNCkKKworLypJUkRBKi8KKyNkZWZpbmUgR1BJTzUxX0lSREFfU0hETglNRlBfQ0ZHKEdQSU81MSwgQUYwKQorCisvKiBTTUMgKi8KKyNkZWZpbmUgU01fbkNTMF9uQ1MwCQlNRlBfQ0ZHKFNNX25DUzAsIEFGMCkKKyNkZWZpbmUgU01fQURWX1NNX0FEVgkJTUZQX0NGRyhTTV9BRFYsIEFGMCkKKyNkZWZpbmUgU01fU0NMS19TTV9TQ0xLCQlNRlBfQ0ZHKFNNX1NDTEssIEFGMCkKKyNkZWZpbmUgU01fU0NMS19TTV9TQ0xLCQlNRlBfQ0ZHKFNNX1NDTEssIEFGMCkKKyNkZWZpbmUgU01fQkUwX1NNX0JFMAkJTUZQX0NGRyhTTV9CRTAsIEFGMSkKKyNkZWZpbmUgU01fQkUxX1NNX0JFMQkJTUZQX0NGRyhTTV9CRTEsIEFGMSkKKworLyogSTJDICovCisjZGVmaW5lIEdQSU81M19DSTJDX1NDTAkJTUZQX0NGRyhHUElPNTMsIEFGMikKKyNkZWZpbmUgR1BJTzU0X0NJMkNfU0RBCQlNRlBfQ0ZHKEdQSU81NCwgQUYyKQorCisvKiBTU1AxIChJMlMpICovCisjZGVmaW5lIEdQSU8yNF9TU1AxX1NEQVRBX0lOCU1GUF9DRkdfRFJWKEdQSU8yNCwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU8yMV9TU1AxX0JJVENMSwlNRlBfQ0ZHX0RSVihHUElPMjEsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPMjBfU1NQMV9TWVNDTEsJTUZQX0NGR19EUlYoR1BJTzIwLCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzIyX1NTUDFfU1lOQwlNRlBfQ0ZHX0RSVihHUElPMjIsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPMjNfU1NQMV9EQVRBX09VVAlNRlBfQ0ZHX0RSVihHUElPMjMsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPMTI0X01OX0NMS19PVVQJTUZQX0NGR19EUlYoR1BJTzEyNCwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU8xMjNfQ0xLX1JFUQkJTUZQX0NGR19EUlYoR1BJTzEyMywgQUYwLCBNRURJVU0pCisKKy8qIERGSSAqLworI2RlZmluZSBERl9JTzBfTkRfSU8wCQlNRlBfQ0ZHKERGX0lPMCwgQUYwKQorI2RlZmluZSBERl9JTzFfTkRfSU8xCQlNRlBfQ0ZHKERGX0lPMSwgQUYwKQorI2RlZmluZSBERl9JTzJfTkRfSU8yCQlNRlBfQ0ZHKERGX0lPMiwgQUYwKQorI2RlZmluZSBERl9JTzNfTkRfSU8zCQlNRlBfQ0ZHKERGX0lPMywgQUYwKQorI2RlZmluZSBERl9JTzRfTkRfSU80CQlNRlBfQ0ZHKERGX0lPNCwgQUYwKQorI2RlZmluZSBERl9JTzVfTkRfSU81CQlNRlBfQ0ZHKERGX0lPNSwgQUYwKQorI2RlZmluZSBERl9JTzZfTkRfSU82CQlNRlBfQ0ZHKERGX0lPNiwgQUYwKQorI2RlZmluZSBERl9JTzdfTkRfSU83CQlNRlBfQ0ZHKERGX0lPNywgQUYwKQorI2RlZmluZSBERl9JTzhfTkRfSU84CQlNRlBfQ0ZHKERGX0lPOCwgQUYwKQorI2RlZmluZSBERl9JTzlfTkRfSU85CQlNRlBfQ0ZHKERGX0lPOSwgQUYwKQorI2RlZmluZSBERl9JTzEwX05EX0lPMTAJCU1GUF9DRkcoREZfSU8xMCwgQUYwKQorI2RlZmluZSBERl9JTzExX05EX0lPMTEJCU1GUF9DRkcoREZfSU8xMSwgQUYwKQorI2RlZmluZSBERl9JTzEyX05EX0lPMTIJCU1GUF9DRkcoREZfSU8xMiwgQUYwKQorI2RlZmluZSBERl9JTzEzX05EX0lPMTMJCU1GUF9DRkcoREZfSU8xMywgQUYwKQorI2RlZmluZSBERl9JTzE0X05EX0lPMTQJCU1GUF9DRkcoREZfSU8xNCwgQUYwKQorI2RlZmluZSBERl9JTzE1X05EX0lPMTUJCU1GUF9DRkcoREZfSU8xNSwgQUYwKQorI2RlZmluZSBERl9uQ1MwX1NNX25DUzJfbkNTMAlNRlBfQ0ZHKERGX25DUzBfU01fbkNTMiwgQUYwKQorI2RlZmluZSBERl9BTEVfU01fV0VuX05EX0FMRQlNRlBfQ0ZHKERGX0FMRV9TTV9XRW4sIEFGMSkKKyNkZWZpbmUgREZfQ0xFX1NNX09Fbl9ORF9DTEUJTUZQX0NGRyhERl9DTEVfU01fT0VuLCBBRjApCisjZGVmaW5lIERGX1dFbl9ERl9XRW4JCU1GUF9DRkcoREZfV0VuLCBBRjEpCisjZGVmaW5lIERGX1JFbl9ERl9SRW4JCU1GUF9DRkcoREZfUkVuLCBBRjEpCisjZGVmaW5lIERGX1JEWTBfREZfUkRZMAkJTUZQX0NGRyhERl9SRFkwLCBBRjApCisKKy8qa2V5cGFkKi8KKyNkZWZpbmUgR1BJTzAwX0tQX01LSU4wCQlNRlBfQ0ZHKEdQSU8wLCBBRjEpCisjZGVmaW5lIEdQSU8wMV9LUF9NS09VVDAJTUZQX0NGRyhHUElPMSwgQUYxKQorI2RlZmluZSBHUElPMDJfS1BfTUtJTjEJCU1GUF9DRkcoR1BJTzIsIEFGMSkKKyNkZWZpbmUgR1BJTzAzX0tQX01LT1VUMQlNRlBfQ0ZHKEdQSU8zLCBBRjEpCisjZGVmaW5lIEdQSU8wNF9LUF9NS0lOMgkJTUZQX0NGRyhHUElPNCwgQUYxKQorI2RlZmluZSBHUElPMDVfS1BfTUtPVVQyCU1GUF9DRkcoR1BJTzUsIEFGMSkKKyNkZWZpbmUgR1BJTzA2X0tQX01LSU4zCQlNRlBfQ0ZHKEdQSU82LCBBRjEpCisjZGVmaW5lIEdQSU8wN19LUF9NS09VVDMJTUZQX0NGRyhHUElPNywgQUYxKQorI2RlZmluZSBHUElPMDhfS1BfTUtJTjQJCU1GUF9DRkcoR1BJTzgsIEFGMSkKKyNkZWZpbmUgR1BJTzA5X0tQX01LT1VUNAlNRlBfQ0ZHKEdQSU85LCBBRjEpCisjZGVmaW5lIEdQSU8xMF9LUF9NS0lONQkJTUZQX0NGRyhHUElPMTAsIEFGMSkKKyNkZWZpbmUgR1BJTzExX0tQX01LT1VUNQlNRlBfQ0ZHKEdQSU8xMSwgQUYxKQorI2RlZmluZSBHUElPMTJfS1BfTUtJTjYJCU1GUF9DRkcoR1BJTzEyLCBBRjEpCisjZGVmaW5lIEdQSU8xM19LUF9NS09VVDYJTUZQX0NGRyhHUElPMTMsIEFGMSkKKyNkZWZpbmUgR1BJTzE0X0tQX01LSU43CQlNRlBfQ0ZHKEdQSU8xNCwgQUYxKQorI2RlZmluZSBHUElPMTVfS1BfTUtPVVQ3CU1GUF9DRkcoR1BJTzE1LCBBRjEpCisjZGVmaW5lIEdQSU8xNl9LUF9ES0lOMAkJTUZQX0NGRyhHUElPMTYsIEFGMSkKKyNkZWZpbmUgR1BJTzE3X0tQX0RLSU4xCQlNRlBfQ0ZHKEdQSU8xNywgQUYxKQorI2RlZmluZSBHUElPMThfS1BfREtJTjIJCU1GUF9DRkcoR1BJTzE4LCBBRjEpCisjZGVmaW5lIEdQSU8xOV9LUF9ES0lOMwkJTUZQX0NGRyhHUElPMTksIEFGMSkKKworLyogTENEICovCisjZGVmaW5lIEdQSU84MV9MQ0RfRkNMSwkJTUZQX0NGRyhHUElPODEsIEFGMSkKKyNkZWZpbmUgR1BJTzgyX0xDRF9MQ0xLCQlNRlBfQ0ZHKEdQSU84MiwgQUYxKQorI2RlZmluZSBHUElPODNfTENEX1BDTEsJCU1GUF9DRkcoR1BJTzgzLCBBRjEpCisjZGVmaW5lIEdQSU84NF9MQ0RfREVOQQkJTUZQX0NGRyhHUElPODQsIEFGMSkKKyNkZWZpbmUgR1BJTzg1X0xDRF9ERDAJCU1GUF9DRkcoR1BJTzg1LCBBRjEpCisjZGVmaW5lIEdQSU84Nl9MQ0RfREQxCQlNRlBfQ0ZHKEdQSU84NiwgQUYxKQorI2RlZmluZSBHUElPODdfTENEX0REMgkJTUZQX0NGRyhHUElPODcsIEFGMSkKKyNkZWZpbmUgR1BJTzg4X0xDRF9ERDMJCU1GUF9DRkcoR1BJTzg4LCBBRjEpCisjZGVmaW5lIEdQSU84OV9MQ0RfREQ0CQlNRlBfQ0ZHKEdQSU84OSwgQUYxKQorI2RlZmluZSBHUElPOTBfTENEX0RENQkJTUZQX0NGRyhHUElPOTAsIEFGMSkKKyNkZWZpbmUgR1BJTzkxX0xDRF9ERDYJCU1GUF9DRkcoR1BJTzkxLCBBRjEpCisjZGVmaW5lIEdQSU85Ml9MQ0RfREQ3CQlNRlBfQ0ZHKEdQSU85MiwgQUYxKQorI2RlZmluZSBHUElPOTNfTENEX0REOAkJTUZQX0NGRyhHUElPOTMsIEFGMSkKKyNkZWZpbmUgR1BJTzk0X0xDRF9ERDkJCU1GUF9DRkcoR1BJTzk0LCBBRjEpCisjZGVmaW5lIEdQSU85NV9MQ0RfREQxMAkJTUZQX0NGRyhHUElPOTUsIEFGMSkKKyNkZWZpbmUgR1BJTzk2X0xDRF9ERDExCQlNRlBfQ0ZHKEdQSU85NiwgQUYxKQorI2RlZmluZSBHUElPOTdfTENEX0REMTIJCU1GUF9DRkcoR1BJTzk3LCBBRjEpCisjZGVmaW5lIEdQSU85OF9MQ0RfREQxMwkJTUZQX0NGRyhHUElPOTgsIEFGMSkKKyNkZWZpbmUgR1BJTzEwMF9MQ0RfREQxNAlNRlBfQ0ZHKEdQSU8xMDAsIEFGMSkKKyNkZWZpbmUgR1BJTzEwMV9MQ0RfREQxNQlNRlBfQ0ZHKEdQSU8xMDEsIEFGMSkKKyNkZWZpbmUgR1BJTzEwMl9MQ0RfREQxNglNRlBfQ0ZHKEdQSU8xMDIsIEFGMSkKKyNkZWZpbmUgR1BJTzEwM19MQ0RfREQxNwlNRlBfQ0ZHKEdQSU8xMDMsIEFGMSkKKyNkZWZpbmUgR1BJTzEwNF9MQ0RfREQxOAlNRlBfQ0ZHKEdQSU8xMDQsIEFGMSkKKyNkZWZpbmUgR1BJTzEwNV9MQ0RfREQxOQlNRlBfQ0ZHKEdQSU8xMDUsIEFGMSkKKyNkZWZpbmUgR1BJTzEwNl9MQ0RfREQyMAlNRlBfQ0ZHKEdQSU8xMDYsIEFGMSkKKyNkZWZpbmUgR1BJTzEwN19MQ0RfREQyMQlNRlBfQ0ZHKEdQSU8xMDcsIEFGMSkKKyNkZWZpbmUgR1BJTzEwOF9MQ0RfREQyMglNRlBfQ0ZHKEdQSU8xMDgsIEFGMSkKKyNkZWZpbmUgR1BJTzEwOV9MQ0RfREQyMwlNRlBfQ0ZHKEdQSU8xMDksIEFGMSkKKworI2RlZmluZSBHUElPMTA0X0xDRF9TUElET1VUCU1GUF9DRkcoR1BJTzEwNCwgQUYzKQorI2RlZmluZSBHUElPMTA1X0xDRF9TUElESU4JTUZQX0NGRyhHUElPMTA1LCBBRjMpCisjZGVmaW5lIEdQSU8xMDdfTENEX0NTMSAJTUZQX0NGRyhHUElPMTA3LCBBRjMpCisjZGVmaW5lIEdQSU8xMDhfTENEX0RDTEsJTUZQX0NGRyhHUElPMTA4LCBBRjMpCisKKyNkZWZpbmUgR1BJTzEwNl9MQ0RfUkVTRVQJTUZQX0NGRyhHUElPMTA2LCBBRjApCisKKy8qc21hcnQgcGFuZWwqLworI2RlZmluZSBHUElPODJfTENEX0EwCQlNRlBfQ0ZHKEdQSU84MiwgQUYwKQorI2RlZmluZSBHUElPODNfTENEX1dSCQlNRlBfQ0ZHKEdQSU84MywgQUYwKQorI2RlZmluZSBHUElPMTAzX0xDRF9DUwkJTUZQX0NGRyhHUElPMTAzLCBBRjApCisKKy8qMXdpcmUqLworI2RlZmluZSBHUElPMTA2XzFXSVJFCQlNRlBfQ0ZHKEdQSU8xMDYsIEFGMykKKworLypDQ0lDKi8KKyNkZWZpbmUgR1BJTzY3X0NDSUNfSU43CQlNRlBfQ0ZHX0RSVihHUElPNjcsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPNjhfQ0NJQ19JTjYJCU1GUF9DRkdfRFJWKEdQSU82OCwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU82OV9DQ0lDX0lONQkJTUZQX0NGR19EUlYoR1BJTzY5LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzcwX0NDSUNfSU40CQlNRlBfQ0ZHX0RSVihHUElPNzAsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPNzFfQ0NJQ19JTjMJCU1GUF9DRkdfRFJWKEdQSU83MSwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU83Ml9DQ0lDX0lOMgkJTUZQX0NGR19EUlYoR1BJTzcyLCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzczX0NDSUNfSU4xCQlNRlBfQ0ZHX0RSVihHUElPNzMsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPNzRfQ0NJQ19JTjAJCU1GUF9DRkdfRFJWKEdQSU83NCwgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU83NV9DQU1fSFNZTkMJTUZQX0NGR19EUlYoR1BJTzc1LCBBRjEsIE1FRElVTSkKKyNkZWZpbmUgR1BJTzc2X0NBTV9WU1lOQwlNRlBfQ0ZHX0RSVihHUElPNzYsIEFGMSwgTUVESVVNKQorI2RlZmluZSBHUElPNzdfQ0FNX01DTEsJCU1GUF9DRkdfRFJWKEdQSU83NywgQUYxLCBNRURJVU0pCisjZGVmaW5lIEdQSU83OF9DQU1fUENMSwkJTUZQX0NGR19EUlYoR1BJTzc4LCBBRjEsIE1FRElVTSkKKworLyogTU1DMSAqLworI2RlZmluZSBNTUMxX0RBVDdfTU1DMV9EQVQ3CU1GUF9DRkdfRFJWKE1NQzFfREFUNywgQUYwLCBNRURJVU0pCisjZGVmaW5lIE1NQzFfREFUNl9NTUMxX0RBVDYJTUZQX0NGR19EUlYoTU1DMV9EQVQ2LCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9EQVQ1X01NQzFfREFUNQlNRlBfQ0ZHX0RSVihNTUMxX0RBVDUsIEFGMCwgTUVESVVNKQorI2RlZmluZSBNTUMxX0RBVDRfTU1DMV9EQVQ0CU1GUF9DRkdfRFJWKE1NQzFfREFUNCwgQUYwLCBNRURJVU0pCisjZGVmaW5lIE1NQzFfREFUM19NTUMxX0RBVDMJTUZQX0NGR19EUlYoTU1DMV9EQVQzLCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9EQVQyX01NQzFfREFUMglNRlBfQ0ZHX0RSVihNTUMxX0RBVDIsIEFGMCwgTUVESVVNKQorI2RlZmluZSBNTUMxX0RBVDFfTU1DMV9EQVQxCU1GUF9DRkdfRFJWKE1NQzFfREFUMSwgQUYwLCBNRURJVU0pCisjZGVmaW5lIE1NQzFfREFUMF9NTUMxX0RBVDAJTUZQX0NGR19EUlYoTU1DMV9EQVQwLCBBRjAsIE1FRElVTSkKKyNkZWZpbmUgTU1DMV9DTURfTU1DMV9DTUQJTUZQX0NGR19EUlYoTU1DMV9DTUQsIEFGMCwgTUVESVVNKQorI2RlZmluZSBNTUMxX0NMS19NTUMxX0NMSwlNRlBfQ0ZHX0RSVihNTUMxX0NMSywgQUYwLCBNRURJVU0pCisjZGVmaW5lIE1NQzFfQ0RfTU1DMV9DRAkJTUZQX0NGR19EUlYoTU1DMV9DRCwgQUYwLCBNRURJVU0pCisjZGVmaW5lIE1NQzFfV1BfTU1DMV9XUAkJTUZQX0NGR19EUlYoTU1DMV9XUCwgQUYwLCBNRURJVU0pCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIIE1GUF9QWEE5MTBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3N2VhNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLmgKQEAgLTAsMCArMSwzNyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX01GUF9ICisjZGVmaW5lIF9fQVNNX01BQ0hfTUZQX0gKKworI2luY2x1ZGUgPHBsYXQvbWZwLmg+CisKKy8qCisgKiBOT1RFOiB0aGUgTUZQUiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgb24gUFhBMTY4IHByb2Nlc3NvciBsaW5lcyBhcmUgYQorICogYml0IGRpZmZlcmVudCBmcm9tIHRob3NlIG9uIFBYQTN4eC4gIEJpdCBbNzoxMF0gYXJlIG5vdyByZXNlcnZlZCwgd2hpY2gKKyAqIHdlcmUgU0xFRVBfT0VfTiwgU0xFRVBfREFUQSwgU0xFRVBfU0VMIGFuZCB0aGUgTFNCIG9mIERSSVZFIGJpdHMuCisgKgorICogVG8gY29wZSB3aXRoIHRoaXMgZGlmZmVyZW5jZSBhbmQgcmUtdXNlIHRoZSBweGEzeHggbWZwIGNvZGUgYXMgbXVjaCBhcworICogcG9zc2libGUsIHdlIG1ha2UgdGhlIGZvbGxvd2luZyBjb21wcm9taXNlOgorICoKKyAqIDEuIFNMRUVQX09FX04gd2lsbCBhbHdheXMgYmUgcHJvZ3JhbW1lZCB0byAnMScgKGJ5IE1GUF9MUE1fRkxPQVQpCisgKiAyLiBEUklWRSBzdHJlbmd0aCBkZWZpbml0aW9ucyByZWRlZmluZWQgdG8gaW5jbHVkZSB0aGUgcmVzZXJ2ZWQgYml0MTAKKyAqIDMuIE92ZXJyaWRlIE1GUF9DRkcoKSBhbmQgTUZQX0NGR19EUlYoKQorICogNC4gRHJvcCB0aGUgdXNlIG9mIE1GUF9DRkdfTFBNKCkgYW5kIE1GUF9DRkdfWCgpCisgKi8KKworI2RlZmluZSBNRlBfRFJJVkVfVkVSWV9TTE9XCSgweDAgPDwgMTMpCisjZGVmaW5lIE1GUF9EUklWRV9TTE9XCQkoMHgyIDw8IDEzKQorI2RlZmluZSBNRlBfRFJJVkVfTUVESVVNCSgweDQgPDwgMTMpCisjZGVmaW5lIE1GUF9EUklWRV9GQVNUCQkoMHg4IDw8IDEzKQorCisjdW5kZWYgTUZQX0NGRworI3VuZGVmIE1GUF9DRkdfRFJWCisjdW5kZWYgTUZQX0NGR19MUE0KKyN1bmRlZiBNRlBfQ0ZHX1gKKyN1bmRlZiBNRlBfQ0ZHX0RFRkFVTFQKKworI2RlZmluZSBNRlBfQ0ZHKHBpbiwgYWYpCQlcCisJKE1GUF9MUE1fRkxPQVQgfCBNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfRFJJVkVfTUVESVVNKQorCisjZGVmaW5lIE1GUF9DRkdfRFJWKHBpbiwgYWYsIGRydikJXAorCShNRlBfTFBNX0ZMT0FUIHwgTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmIHwgTUZQX0RSSVZFXyMjZHJ2KQorCisjZW5kaWYgLyogX19BU01fTUFDSF9NRlBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3B4YTE2OC5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3B4YTE2OC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGE4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhMTY4LmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX1BYQTE2OF9ICisjZGVmaW5lIF9fQVNNX01BQ0hfUFhBMTY4X0gKKworI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorCitleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBweGExNjhfZGV2aWNlX3VhcnQxOworZXh0ZXJuIHN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgcHhhMTY4X2RldmljZV91YXJ0MjsKKworc3RhdGljIGlubGluZSBpbnQgcHhhMTY4X2FkZF91YXJ0KGludCBpZCkKK3sKKwlzdHJ1Y3QgcHhhX2RldmljZV9kZXNjICpkID0gTlVMTDsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIDE6IGQgPSAmcHhhMTY4X2RldmljZV91YXJ0MTsgYnJlYWs7CisJY2FzZSAyOiBkID0gJnB4YTE2OF9kZXZpY2VfdWFydDI7IGJyZWFrOworCX0KKworCWlmIChkID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHB4YV9yZWdpc3Rlcl9kZXZpY2UoZCwgTlVMTCwgMCk7Cit9CisjZW5kaWYgLyogX19BU01fTUFDSF9QWEExNjhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3B4YTkxMC5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3B4YTkxMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YWVhZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcHhhOTEwLmgKQEAgLTAsMCArMSwyMyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX1BYQTkxMF9ICisjZGVmaW5lIF9fQVNNX01BQ0hfUFhBOTEwX0gKKworI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorCitleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBweGE5MTBfZGV2aWNlX3VhcnQxOworZXh0ZXJuIHN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgcHhhOTEwX2RldmljZV91YXJ0MjsKKworc3RhdGljIGlubGluZSBpbnQgcHhhOTEwX2FkZF91YXJ0KGludCBpZCkKK3sKKwlzdHJ1Y3QgcHhhX2RldmljZV9kZXNjICpkID0gTlVMTDsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIDE6IGQgPSAmcHhhOTEwX2RldmljZV91YXJ0MTsgYnJlYWs7CisJY2FzZSAyOiBkID0gJnB4YTkxMF9kZXZpY2VfdWFydDI7IGJyZWFrOworCX0KKworCWlmIChkID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHB4YV9yZWdpc3Rlcl9kZXZpY2UoZCwgTlVMTCwgMCk7Cit9CisjZW5kaWYgLyogX19BU01fTUFDSF9QWEE5MTBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtYXBiYy5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtYXBiYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YjhjOWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcGJjLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWFwYmMuaAorICoKKyAqICAgQXBwbGljYXRpb24gUGVyaXBoZXJhbCBCdXMgQ2xvY2sgVW5pdAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9NQUNIX1JFR1NfQVBCQ19ICisjZGVmaW5lIF9fQVNNX01BQ0hfUkVHU19BUEJDX0gKKworI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKworI2RlZmluZSBBUEJDX1ZJUlRfQkFTRQkoQVBCX1ZJUlRfQkFTRSArIDB4MDE1MDAwKQorI2RlZmluZSBBUEJDX1JFRyh4KQkoQVBCQ19WSVJUX0JBU0UgKyAoeCkpCisKKy8qCisgKiBBUEIgY2xvY2sgcmVnaXN0ZXIgb2Zmc2V0cyBmb3IgUFhBMTY4CisgKi8KKyNkZWZpbmUgQVBCQ19QWEExNjhfVUFSVDEJQVBCQ19SRUcoMHgwMDApCisjZGVmaW5lIEFQQkNfUFhBMTY4X1VBUlQyCUFQQkNfUkVHKDB4MDA0KQorI2RlZmluZSBBUEJDX1BYQTE2OF9HUElPCUFQQkNfUkVHKDB4MDA4KQorI2RlZmluZSBBUEJDX1BYQTE2OF9QV00wCUFQQkNfUkVHKDB4MDBjKQorI2RlZmluZSBBUEJDX1BYQTE2OF9QV00xCUFQQkNfUkVHKDB4MDEwKQorI2RlZmluZSBBUEJDX1BYQTE2OF9TU1AxCUFQQkNfUkVHKDB4MDFjKQorI2RlZmluZSBBUEJDX1BYQTE2OF9TU1AyCUFQQkNfUkVHKDB4MDIwKQorI2RlZmluZSBBUEJDX1BYQTE2OF9SVEMJCUFQQkNfUkVHKDB4MDI4KQorI2RlZmluZSBBUEJDX1BYQTE2OF9UV1NJMAlBUEJDX1JFRygweDAyYykKKyNkZWZpbmUgQVBCQ19QWEExNjhfS1BDCQlBUEJDX1JFRygweDAzMCkKKyNkZWZpbmUgQVBCQ19QWEExNjhfVElNRVJTCUFQQkNfUkVHKDB4MDM0KQorI2RlZmluZSBBUEJDX1BYQTE2OF9BSUIJCUFQQkNfUkVHKDB4MDNjKQorI2RlZmluZSBBUEJDX1BYQTE2OF9TV19KVEFHCUFQQkNfUkVHKDB4MDQwKQorI2RlZmluZSBBUEJDX1BYQTE2OF9PTkVXSVJFCUFQQkNfUkVHKDB4MDQ4KQorI2RlZmluZSBBUEJDX1BYQTE2OF9TU1AzCUFQQkNfUkVHKDB4MDRjKQorI2RlZmluZSBBUEJDX1BYQTE2OF9BU0ZBUglBUEJDX1JFRygweDA1MCkKKyNkZWZpbmUgQVBCQ19QWEExNjhfQVNTQVIJQVBCQ19SRUcoMHgwNTQpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1NTUDQJQVBCQ19SRUcoMHgwNTgpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1NTUDUJQVBCQ19SRUcoMHgwNWMpCisjZGVmaW5lIEFQQkNfUFhBMTY4X1RXU0kxCUFQQkNfUkVHKDB4MDZjKQorI2RlZmluZSBBUEJDX1BYQTE2OF9VQVJUMwlBUEJDX1JFRygweDA3MCkKKyNkZWZpbmUgQVBCQ19QWEExNjhfQUM5NwlBUEJDX1JFRygweDA4NCkKKworLyoKKyAqIEFQQiBDbG9jayByZWdpc3RlciBvZmZzZXRzIGZvciBQWEE5MTAKKyAqLworI2RlZmluZSBBUEJDX1BYQTkxMF9VQVJUMAlBUEJDX1JFRygweDAwMCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfVUFSVDEJQVBCQ19SRUcoMHgwMDQpCisjZGVmaW5lIEFQQkNfUFhBOTEwX0dQSU8JQVBCQ19SRUcoMHgwMDgpCisjZGVmaW5lIEFQQkNfUFhBOTEwX1BXTTAJQVBCQ19SRUcoMHgwMGMpCisjZGVmaW5lIEFQQkNfUFhBOTEwX1BXTTEJQVBCQ19SRUcoMHgwMTApCisjZGVmaW5lIEFQQkNfUFhBOTEwX1BXTTIJQVBCQ19SRUcoMHgwMTQpCisjZGVmaW5lIEFQQkNfUFhBOTEwX1BXTTMJQVBCQ19SRUcoMHgwMTgpCisjZGVmaW5lIEFQQkNfUFhBOTEwX1NTUDEJQVBCQ19SRUcoMHgwMWMpCisjZGVmaW5lIEFQQkNfUFhBOTEwX1NTUDIJQVBCQ19SRUcoMHgwMjApCisjZGVmaW5lIEFQQkNfUFhBOTEwX0lQQwkJQVBCQ19SRUcoMHgwMjQpCisjZGVmaW5lIEFQQkNfUFhBOTEwX1RXU0kwCUFQQkNfUkVHKDB4MDJjKQorI2RlZmluZSBBUEJDX1BYQTkxMF9LUEMJCUFQQkNfUkVHKDB4MDMwKQorI2RlZmluZSBBUEJDX1BYQTkxMF9USU1FUlMJQVBCQ19SRUcoMHgwMzQpCisjZGVmaW5lIEFQQkNfUFhBOTEwX1RCUk9UCUFQQkNfUkVHKDB4MDM4KQorI2RlZmluZSBBUEJDX1BYQTkxMF9BSUIJCUFQQkNfUkVHKDB4MDNjKQorI2RlZmluZSBBUEJDX1BYQTkxMF9TV19KVEFHCUFQQkNfUkVHKDB4MDQwKQorI2RlZmluZSBBUEJDX1BYQTkxMF9USU1FUlMxCUFQQkNfUkVHKDB4MDQ0KQorI2RlZmluZSBBUEJDX1BYQTkxMF9PTkVXSVJFCUFQQkNfUkVHKDB4MDQ4KQorI2RlZmluZSBBUEJDX1BYQTkxMF9TU1AzCUFQQkNfUkVHKDB4MDRjKQorI2RlZmluZSBBUEJDX1BYQTkxMF9BU0ZBUglBUEJDX1JFRygweDA1MCkKKyNkZWZpbmUgQVBCQ19QWEE5MTBfQVNTQVIJQVBCQ19SRUcoMHgwNTQpCisKKy8qIENvbW1vbiBBUEIgY2xvY2sgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIEFQQkNfQVBCQ0xLCSgxIDw8IDApICAvKiBBUEIgQnVzIENsb2NrIEVuYWJsZSAqLworI2RlZmluZSBBUEJDX0ZOQ0xLCSgxIDw8IDEpICAvKiBGdW5jdGlvbmFsIENsb2NrIEVuYWJsZSAqLworI2RlZmluZSBBUEJDX1JTVAkoMSA8PCAyKSAgLyogUmVzZXQgR2VuZXJhdGlvbiAqLworCisvKiBGdW5jdGlvbmFsIENsb2NrIFNlbGVjdGlvbiBNYXNrICovCisjZGVmaW5lIEFQQkNfRk5DTEtTRUwoeCkJKCgoeCkgJiAweGYpIDw8IDQpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1JFR1NfQVBCQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcG11LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcG11LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5MDMwNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWFwbXUuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtYXBtdS5oCisgKgorICogICBBcHBsaWNhdGlvbiBTdWJzeXN0ZW0gUG93ZXIgTWFuYWdlbWVudCBVbml0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfUkVHU19BUE1VX0gKKyNkZWZpbmUgX19BU01fTUFDSF9SRUdTX0FQTVVfSAorCisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorCisjZGVmaW5lIEFQTVVfVklSVF9CQVNFCShBWElfVklSVF9CQVNFICsgMHg4MjgwMCkKKyNkZWZpbmUgQVBNVV9SRUcoeCkJKEFQTVVfVklSVF9CQVNFICsgKHgpKQorCisvKiBDbG9jayBSZXNldCBDb250cm9sICovCisjZGVmaW5lIEFQTVVfSVJFCUFQTVVfUkVHKDB4MDQ4KQorI2RlZmluZSBBUE1VX0xDRAlBUE1VX1JFRygweDA0YykKKyNkZWZpbmUgQVBNVV9DQ0lDCUFQTVVfUkVHKDB4MDUwKQorI2RlZmluZSBBUE1VX1NESDAJQVBNVV9SRUcoMHgwNTQpCisjZGVmaW5lIEFQTVVfU0RIMQlBUE1VX1JFRygweDA1OCkKKyNkZWZpbmUgQVBNVV9VU0IJQVBNVV9SRUcoMHgwNWMpCisjZGVmaW5lIEFQTVVfTkFORAlBUE1VX1JFRygweDA2MCkKKyNkZWZpbmUgQVBNVV9ETUEJQVBNVV9SRUcoMHgwNjQpCisjZGVmaW5lIEFQTVVfR0VVCUFQTVVfUkVHKDB4MDY4KQorI2RlZmluZSBBUE1VX0JVUwlBUE1VX1JFRygweDA2YykKKworI2RlZmluZSBBUE1VX0ZOQ0xLX0VOCSgxIDw8IDQpCisjZGVmaW5lIEFQTVVfQVhJQ0xLX0VOCSgxIDw8IDMpCisjZGVmaW5lIEFQTVVfRk5SU1RfRElTCSgxIDw8IDEpCisjZGVmaW5lIEFQTVVfQVhJUlNUX0RJUwkoMSA8PCAwKQorCisjZW5kaWYgLyogX19BU01fTUFDSF9SRUdTX0FQTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtaWN1LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1pY3UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWYwODcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtaWN1LmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWljdS5oCisgKgorICogICBJbnRlcnJ1cHQgQ29udHJvbCBVbml0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfSUNVX0gKKyNkZWZpbmUgX19BU01fTUFDSF9JQ1VfSAorCisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorCisjZGVmaW5lIElDVV9WSVJUX0JBU0UJKEFYSV9WSVJUX0JBU0UgKyAweDgyMDAwKQorI2RlZmluZSBJQ1VfUkVHKHgpCShJQ1VfVklSVF9CQVNFICsgKHgpKQorCisjZGVmaW5lIElDVV9JTlRfQ09ORihuKQkJSUNVX1JFRygobikgPDwgMikKKyNkZWZpbmUgSUNVX0lOVF9DT05GX0FQX0lOVAkoMSA8PCA2KQorI2RlZmluZSBJQ1VfSU5UX0NPTkZfQ1BfSU5UCSgxIDw8IDUpCisjZGVmaW5lIElDVV9JTlRfQ09ORl9JUlEJKDEgPDwgNCkKKyNkZWZpbmUgSUNVX0lOVF9DT05GX01BU0sJKDB4ZikKKworI2RlZmluZSBJQ1VfQVBfRklRX1NFTF9JTlRfTlVNCUlDVV9SRUcoMHgxMDgpCS8qIEFQIEZJUSBTZWxlY3RlZCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSUNVX0FQX0lSUV9TRUxfSU5UX05VTQlJQ1VfUkVHKDB4MTBDKQkvKiBBUCBJUlEgU2VsZWN0ZWQgSW50ZXJydXB0ICovCisjZGVmaW5lIElDVV9BUF9HQkxfSVJRX01TSwlJQ1VfUkVHKDB4MTE0KQkvKiBBUCBHbG9iYWwgSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgSUNVX0lOVF9TVEFUVVNfMAlJQ1VfUkVHKDB4MTI4KQkvKiBJbnRlcnJ1cHQgU3R1YXRzIDAgKi8KKyNkZWZpbmUgSUNVX0lOVF9TVEFUVVNfMQlJQ1VfUkVHKDB4MTJDKQkvKiBJbnRlcnJ1cHQgU3RhdHVzIDEgKi8KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSUNVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLXRpbWVycy5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtdGltZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1ODlmZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLXRpbWVycy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy10aW1lcnMuaAorICoKKyAqICAgVGltZXJzIE1vZHVsZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9NQUNIX1JFR1NfVElNRVJTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9SRUdTX1RJTUVSU19ICisKKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisKKyNkZWZpbmUgVElNRVJTMV9WSVJUX0JBU0UJKEFQQl9WSVJUX0JBU0UgKyAweDE0MDAwKQorI2RlZmluZSBUSU1FUlMyX1ZJUlRfQkFTRQkoQVBCX1ZJUlRfQkFTRSArIDB4MTYwMDApCisKKyNkZWZpbmUgVE1SX0NDUgkJKDB4MDAwMCkKKyNkZWZpbmUgVE1SX1ROX01NKG4sIG0pCSgweDAwMDQgKyAoKG4pIDw8IDMpICsgKCgobikgKyAobSkpIDw8IDIpKQorI2RlZmluZSBUTVJfQ1IobikJKDB4MDAyOCArICgobikgPDwgMikpCisjZGVmaW5lIFRNUl9TUihuKQkoMHgwMDM0ICsgKChuKSA8PCAyKSkKKyNkZWZpbmUgVE1SX0lFUihuKQkoMHgwMDQwICsgKChuKSA8PCAyKSkKKyNkZWZpbmUgVE1SX1BMVlIobikJKDB4MDA0YyArICgobikgPDwgMikpCisjZGVmaW5lIFRNUl9QTENSKG4pCSgweDAwNTggKyAoKG4pIDw8IDIpKQorI2RlZmluZSBUTVJfV01FUgkoMHgwMDY0KQorI2RlZmluZSBUTVJfV01SCQkoMHgwMDY4KQorI2RlZmluZSBUTVJfV1ZSCQkoMHgwMDZjKQorI2RlZmluZSBUTVJfV1NSCQkoMHgwMDcwKQorI2RlZmluZSBUTVJfSUNSKG4pCSgweDAwNzQgKyAoKG4pIDw8IDIpKQorI2RlZmluZSBUTVJfV0lDUgkoMHgwMDgwKQorI2RlZmluZSBUTVJfQ0VSCQkoMHgwMDg0KQorI2RlZmluZSBUTVJfQ01SCQkoMHgwMDg4KQorI2RlZmluZSBUTVJfSUxSKG4pCSgweDAwOGMgKyAoKG4pIDw8IDIpKQorI2RlZmluZSBUTVJfV0NSCQkoMHgwMDk4KQorI2RlZmluZSBUTVJfV0ZBUgkoMHgwMDljKQorI2RlZmluZSBUTVJfV1NBUgkoMHgwMEEwKQorI2RlZmluZSBUTVJfQ1ZXUihuKQkoMHgwMEE0ICsgKChuKSA8PCAyKSkKKworI2RlZmluZSBUTVJfQ0NSX0NTXzAoeCkJKCgoeCkgJiAweDMpIDw8IDApCisjZGVmaW5lIFRNUl9DQ1JfQ1NfMSh4KQkoKCh4KSAmIDB4NykgPDwgMikKKyNkZWZpbmUgVE1SX0NDUl9DU18yKHgpCSgoKHgpICYgMHgzKSA8PCA1KQorCisjZW5kaWYgLyogX19BU01fTUFDSF9SRUdTX1RJTUVSU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxZWRmZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMCwwICsxLDIxIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fTUFDSF9TWVNURU1fSAorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJY3B1X2RvX2lkbGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQoreworCWNwdV9yZXNldCgwKTsKK30KKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1NZU1RFTV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZWJiZDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdGltZXguaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCTMyNTAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5M2Q1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKworI2RlZmluZSBVQVJUMV9CQVNFCShBUEJfUEhZU19CQVNFICsgMHgzNjAwMCkKKyNkZWZpbmUgVUFSVDJfQkFTRQkoQVBCX1BIWVNfQkFTRSArIDB4MTcwMDApCisjZGVmaW5lIFVBUlQzX0JBU0UJKEFQQl9QSFlTX0JBU0UgKyAweDE4MDAwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqVUFSVCA9ICh1bnNpZ25lZCBsb25nICopVUFSVDJfQkFTRTsKKworCS8qIFVBUlQgZW5hYmxlZD8gKi8KKwlpZiAoIShVQVJUW1VBUlRfSUVSXSAmIFVBUlRfSUVSX1VVRSkpCisJCXJldHVybjsKKworCXdoaWxlICghKFVBUlRbVUFSVF9MU1JdICYgVUFSVF9MU1JfVEhSRSkpCisJCWJhcnJpZXIoKTsKKworCVVBUlRbVUFSVF9UWF0gPSBjOworfQorCisvKgorICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQoreworfQorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjBjY2FmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDUgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisgKi8KKworI2RlZmluZSBWTUFMTE9DX0VORAkweGZlMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZmYyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pcnEuYwpAQCAtMCwwICsxLDU1IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2lycS5jCisgKgorICogIEdlbmVyaWMgSVJRIGhhbmRsaW5nLCBHUElPIElSUSBkZW11bHRpcGxleGluZywgZXRjLgorICoKKyAqICBBdXRob3I6CUJpbiBZYW5nIDxiaW4ueWFuZ0BtYXJ2ZWxsLmNvbT4KKyAqICBDcmVhdGVkOglTZXAgMzAsIDIwMDgKKyAqICBDb3B5cmlnaHQ6CU1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL3JlZ3MtaWN1Lmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworI2RlZmluZSBJUlFfUk9VVEVfVE9fQVAJCShJQ1VfSU5UX0NPTkZfQVBfSU5UIHwgSUNVX0lOVF9DT05GX0lSUSkKKworI2RlZmluZSBQUklPUklUWV9ERUZBVUxUCTB4MQorI2RlZmluZSBQUklPUklUWV9OT05FCQkweDAJLyogbWVhbnMgSVJRIGRpc2FibGVkICovCisKK3N0YXRpYyB2b2lkIGljdV9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9fcmF3X3dyaXRlbChQUklPUklUWV9OT05FLCBJQ1VfSU5UX0NPTkYoaXJxKSk7Cit9CisKK3N0YXRpYyB2b2lkIGljdV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJX19yYXdfd3JpdGVsKElSUV9ST1VURV9UT19BUCB8IFBSSU9SSVRZX0RFRkFVTFQsIElDVV9JTlRfQ09ORihpcnEpKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpY3VfaXJxX2NoaXAgPSB7CisJLm5hbWUJPSAiaWN1X2lycSIsCisJLmFjawk9IGljdV9tYXNrX2lycSwKKwkubWFzawk9IGljdV9tYXNrX2lycSwKKwkudW5tYXNrCT0gaWN1X3VubWFza19pcnEsCit9OworCit2b2lkIF9faW5pdCBpY3VfaW5pdF9pcnEodm9pZCkKK3sKKwlpbnQgaXJxOworCisJZm9yIChpcnEgPSAwOyBpcnEgPCA2NDsgaXJxKyspIHsKKwkJaWN1X21hc2tfaXJxKGlycSk7CisJCXNldF9pcnFfY2hpcChpcnEsICZpY3VfaXJxX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3B4YTE2OC5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvcHhhMTY4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5MjQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3B4YTE2OC5jCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL3B4YTE2OC5jCisgKgorICogIENvZGUgc3BlY2lmaWMgdG8gUFhBMTY4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2NwdXR5cGUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtYXBiYy5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKKyNkZWZpbmUgTUZQUl9WSVJUX0JBU0UJKEFQQl9WSVJUX0JBU0UgKyAweDFlMDAwKQorCitzdGF0aWMgc3RydWN0IG1mcF9hZGRyX21hcCBweGExNjhfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9Cit7CisJTUZQX0FERFJfWChHUElPMCwgICBHUElPMzYsICAweDA0YyksCisJTUZQX0FERFJfWChHUElPMzcsICBHUElPNTUsICAweDAwMCksCisJTUZQX0FERFJfWChHUElPNTYsICBHUElPMTIzLCAweDBlMCksCisJTUZQX0FERFJfWChHUElPMTI0LCBHUElPMTI3LCAweDBmNCksCisKKwlNRlBfQUREUl9FTkQsCit9OworCisjZGVmaW5lIEFQTUFTSyhpKQkoR1BJT19SRUdTX1ZJUlQgKyBCQU5LX09GRihpKSArIDB4MDljKQorCitzdGF0aWMgdm9pZCBfX2luaXQgcHhhMTY4X2luaXRfZ3Bpbyh2b2lkKQoreworCWludCBpOworCisJLyogZW5hYmxlIEdQSU8gY2xvY2sgKi8KKwlfX3Jhd193cml0ZWwoQVBCQ19BUEJDTEsgfCBBUEJDX0ZOQ0xLLCBBUEJDX1BYQTE2OF9HUElPKTsKKworCS8qIHVubWFzayBHUElPIGVkZ2UgZGV0ZWN0aW9uIGZvciBhbGwgNCBiYW5rcyAtIEFQTUFTS3ggKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgQVBNQVNLKGkpKTsKKworCXB4YV9pbml0X2dwaW8oSVJRX1BYQTE2OF9HUElPWCwgMCwgMTI3LCBOVUxMKTsKK30KKwordm9pZCBfX2luaXQgcHhhMTY4X2luaXRfaXJxKHZvaWQpCit7CisJaWN1X2luaXRfaXJxKCk7CisJcHhhMTY4X2luaXRfZ3BpbygpOworfQorCisvKiBBUEIgcGVyaXBoZXJhbCBjbG9ja3MgKi8KK3N0YXRpYyBBUEJDX0NMSyh1YXJ0MSwgUFhBMTY4X1VBUlQxLCAxLCAxNDc0NTYwMCk7CitzdGF0aWMgQVBCQ19DTEsodWFydDIsIFBYQTE2OF9VQVJUMiwgMSwgMTQ3NDU2MDApOworCisvKiBkZXZpY2UgYW5kIGNsb2NrIGJpbmRpbmdzICovCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgcHhhMTY4X2Nsa3JlZ3NbXSA9IHsKKwlJTklUX0NMS1JFRygmY2xrX3VhcnQxLCAicHhhMnh4LXVhcnQuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfdWFydDIsICJweGEyeHgtdWFydC4xIiwgTlVMTCksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBweGExNjhfaW5pdCh2b2lkKQoreworCWlmIChjcHVfaXNfcHhhMTY4KCkpIHsKKwkJbWZwX2luaXRfYmFzZShNRlBSX1ZJUlRfQkFTRSk7CisJCW1mcF9pbml0X2FkZHIocHhhMTY4X21mcF9hZGRyX21hcCk7CisJCXB4YV9pbml0X2RtYShJUlFfUFhBMTY4X0RNQV9JTlQwLCAzMik7CisJCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhMTY4X2Nsa3JlZ3MpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK3Bvc3Rjb3JlX2luaXRjYWxsKHB4YTE2OF9pbml0KTsKKworLyogc3lzdGVtIHRpbWVyIC0gY2xvY2sgZW5hYmxlZCwgMy4yNU1IeiAqLworI2RlZmluZSBUSU1FUl9DTEtfUlNUCShBUEJDX0FQQkNMSyB8IEFQQkNfRk5DTEsgfCBBUEJDX0ZOQ0xLU0VMKDMpKQorCitzdGF0aWMgdm9pZCBfX2luaXQgcHhhMTY4X3RpbWVyX2luaXQodm9pZCkKK3sKKwkvKiB0aGlzIGlzIGVhcmx5LCB3ZSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIENDVSByZWdpc3RlcnMgYnkKKwkgKiBvdXJzZWx2ZXMgaW5zdGVhZCBvZiB1c2luZyBjbGtfKiBBUEkuIENsb2NrIHJhdGUgaXMgZGVmaW5lZAorCSAqIGJ5IEFQQkNfVElNRVJTX0NMS19SU1QgKDMuMjVNSHopIGFuZCBlbmFibGVkIGZyZWUtcnVubmluZworCSAqLworCV9fcmF3X3dyaXRlbChBUEJDX0FQQkNMSyB8IEFQQkNfUlNULCBBUEJDX1BYQTE2OF9USU1FUlMpOworCisJLyogMy4yNU1IeiwgYnVzL2Z1bmN0aW9uYWwgY2xvY2sgZW5hYmxlZCwgcmVsZWFzZSByZXNldCAqLworCV9fcmF3X3dyaXRlbChUSU1FUl9DTEtfUlNULCBBUEJDX1BYQTE2OF9USU1FUlMpOworCisJdGltZXJfaW5pdChJUlFfUFhBMTY4X1RJTUVSMSk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgcHhhMTY4X3RpbWVyID0geworCS5pbml0CT0gcHhhMTY4X3RpbWVyX2luaXQsCit9OworCisvKiBvbi1jaGlwIGRldmljZXMgKi8KK1BYQTE2OF9ERVZJQ0UodWFydDEsICJweGEyeHgtdWFydCIsIDAsIFVBUlQxLCAweGQ0MDE3MDAwLCAweDMwLCAyMSwgMjIpOworUFhBMTY4X0RFVklDRSh1YXJ0MiwgInB4YTJ4eC11YXJ0IiwgMSwgVUFSVDIsIDB4ZDQwMTgwMDAsIDB4MzAsIDIzLCAyNCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9weGE5MTAuYyBiL2FyY2gvYXJtL21hY2gtbW1wL3B4YTkxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1M2Y4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9weGE5MTAuYwpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW1tcC9weGE5MTAuYworICoKKyAqICBDb2RlIHNwZWNpZmljIHRvIFBYQTkxMAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWFwYmMuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtYXBtdS5oPgorI2luY2x1ZGUgPG1hY2gvY3B1dHlwZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAuaD4KKyNpbmNsdWRlIDxtYWNoL2RldmljZXMuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKKyNkZWZpbmUgTUZQUl9WSVJUX0JBU0UJKEFQQl9WSVJUX0JBU0UgKyAweDFlMDAwKQorCitzdGF0aWMgc3RydWN0IG1mcF9hZGRyX21hcCBweGE5MTBfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9Cit7CisJTUZQX0FERFJfWChHUElPMCwgR1BJTzU0LCAweGRjKSwKKwlNRlBfQUREUl9YKEdQSU82NywgR1BJTzk4LCAweDFiOCksCisJTUZQX0FERFJfWChHUElPMTAwLCBHUElPMTA5LCAweDIzOCksCisKKwlNRlBfQUREUihHUElPMTIzLCAweGNjKSwKKwlNRlBfQUREUihHUElPMTI0LCAweGQwKSwKKworCU1GUF9BRERSKERGX0lPMCwgMHg0MCksCisJTUZQX0FERFIoREZfSU8xLCAweDNjKSwKKwlNRlBfQUREUihERl9JTzIsIDB4MzgpLAorCU1GUF9BRERSKERGX0lPMywgMHgzNCksCisJTUZQX0FERFIoREZfSU80LCAweDMwKSwKKwlNRlBfQUREUihERl9JTzUsIDB4MmMpLAorCU1GUF9BRERSKERGX0lPNiwgMHgyOCksCisJTUZQX0FERFIoREZfSU83LCAweDI0KSwKKwlNRlBfQUREUihERl9JTzgsIDB4MjApLAorCU1GUF9BRERSKERGX0lPOSwgMHgxYyksCisJTUZQX0FERFIoREZfSU8xMCwgMHgxOCksCisJTUZQX0FERFIoREZfSU8xMSwgMHgxNCksCisJTUZQX0FERFIoREZfSU8xMiwgMHgxMCksCisJTUZQX0FERFIoREZfSU8xMywgMHhjKSwKKwlNRlBfQUREUihERl9JTzE0LCAweDgpLAorCU1GUF9BRERSKERGX0lPMTUsIDB4NCksCisKKwlNRlBfQUREUihERl9uQ1MwX1NNX25DUzIsIDB4NDQpLAorCU1GUF9BRERSKERGX25DUzFfU01fbkNTMywgMHg0OCksCisJTUZQX0FERFIoU01fbkNTMCwgMHg0YyksCisJTUZQX0FERFIoU01fbkNTMSwgMHg1MCksCisJTUZQX0FERFIoREZfV0VuLCAweDU0KSwKKwlNRlBfQUREUihERl9SRW4sIDB4NTgpLAorCU1GUF9BRERSKERGX0NMRV9TTV9PRW4sIDB4NWMpLAorCU1GUF9BRERSKERGX0FMRV9TTV9XRW4sIDB4NjApLAorCU1GUF9BRERSKFNNX1NDTEssIDB4NjQpLAorCU1GUF9BRERSKERGX1JEWTAsIDB4NjgpLAorCU1GUF9BRERSKFNNX0JFMCwgMHg2YyksCisJTUZQX0FERFIoU01fQkUxLCAweDcwKSwKKwlNRlBfQUREUihTTV9BRFYsIDB4NzQpLAorCU1GUF9BRERSKERGX1JEWTEsIDB4NzgpLAorCU1GUF9BRERSKFNNX0FEVk1VWCwgMHg3YyksCisJTUZQX0FERFIoU01fUkRZLCAweDgwKSwKKworCU1GUF9BRERSX1goTU1DMV9EQVQ3LCBNTUMxX1dQLCAweDg0KSwKKworCU1GUF9BRERSX0VORCwKK307CisKKyNkZWZpbmUgQVBNQVNLKGkpCShHUElPX1JFR1NfVklSVCArIEJBTktfT0ZGKGkpICsgMHgwOWMpCisKK3N0YXRpYyB2b2lkIF9faW5pdCBweGE5MTBfaW5pdF9ncGlvKHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBlbmFibGUgR1BJTyBjbG9jayAqLworCV9fcmF3X3dyaXRlbChBUEJDX0FQQkNMSyB8IEFQQkNfRk5DTEssIEFQQkNfUFhBOTEwX0dQSU8pOworCisJLyogdW5tYXNrIEdQSU8gZWRnZSBkZXRlY3Rpb24gZm9yIGFsbCA0IGJhbmtzIC0gQVBNQVNLeCAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBBUE1BU0soaSkpOworCisJcHhhX2luaXRfZ3BpbyhJUlFfUFhBOTEwX0FQX0dQSU8sIDAsIDEyNywgTlVMTCk7Cit9CisKK3ZvaWQgX19pbml0IHB4YTkxMF9pbml0X2lycSh2b2lkKQoreworCWljdV9pbml0X2lycSgpOworCXB4YTkxMF9pbml0X2dwaW8oKTsKK30KKworLyogQVBCIHBlcmlwaGVyYWwgY2xvY2tzICovCitzdGF0aWMgQVBCQ19DTEsodWFydDEsIFBYQTkxMF9VQVJUMCwgMSwgMTQ3NDU2MDApOworc3RhdGljIEFQQkNfQ0xLKHVhcnQyLCBQWEE5MTBfVUFSVDEsIDEsIDE0NzQ1NjAwKTsKKworLyogZGV2aWNlIGFuZCBjbG9jayBiaW5kaW5ncyAqLworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIHB4YTkxMF9jbGtyZWdzW10gPSB7CisJSU5JVF9DTEtSRUcoJmNsa191YXJ0MSwgInB4YTJ4eC11YXJ0LjAiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3VhcnQyLCAicHhhMnh4LXVhcnQuMSIsIE5VTEwpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHhhOTEwX2luaXQodm9pZCkKK3sKKwlpZiAoY3B1X2lzX3B4YTkxMCgpKSB7CisJCW1mcF9pbml0X2Jhc2UoTUZQUl9WSVJUX0JBU0UpOworCQltZnBfaW5pdF9hZGRyKHB4YTkxMF9tZnBfYWRkcl9tYXApOworCQlweGFfaW5pdF9kbWEoSVJRX1BYQTkxMF9ETUFfSU5UMCwgMzIpOworCQljbGtzX3JlZ2lzdGVyKEFSUkFZX0FORF9TSVpFKHB4YTkxMF9jbGtyZWdzKSk7CisJfQorCisJcmV0dXJuIDA7Cit9Citwb3N0Y29yZV9pbml0Y2FsbChweGE5MTBfaW5pdCk7CisKKy8qIHN5c3RlbSB0aW1lciAtIGNsb2NrIGVuYWJsZWQsIDMuMjVNSHogKi8KKyNkZWZpbmUgVElNRVJfQ0xLX1JTVAkoQVBCQ19BUEJDTEsgfCBBUEJDX0ZOQ0xLIHwgQVBCQ19GTkNMS1NFTCgzKSkKKworc3RhdGljIHZvaWQgX19pbml0IHB4YTkxMF90aW1lcl9pbml0KHZvaWQpCit7CisJLyogcmVzZXQgYW5kIGNvbmZpZ3VyZSAqLworCV9fcmF3X3dyaXRlbChBUEJDX0FQQkNMSyB8IEFQQkNfUlNULCBBUEJDX1BYQTkxMF9USU1FUlMpOworCV9fcmF3X3dyaXRlbChUSU1FUl9DTEtfUlNULCBBUEJDX1BYQTkxMF9USU1FUlMpOworCisJdGltZXJfaW5pdChJUlFfUFhBOTEwX0FQMV9USU1FUjEpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIHB4YTkxMF90aW1lciA9IHsKKwkuaW5pdAk9IHB4YTkxMF90aW1lcl9pbml0LAorfTsKKworLyogb24tY2hpcCBkZXZpY2VzICovCisKKy8qIE5PVEU6IHRoZXJlIGFyZSB0b3RhbGx5IDMgVUFSVHMgb24gUFhBOTEwOgorICoKKyAqICAgVUFSVDEgICAtIFNsb3cgVUFSVCAoY2FuIGJlIHVzZWQgYm90aCBieSBBUCBhbmQgQ1ApCisgKiAgIFVBUlQyLzMgLSBGYXN0IFVBUlQKKyAqCisgKiBUbyBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggdGhlIGxlZ2FjeSBGRlVBUlQvQlRVQVJUL1NUVUFSVCBzZXF1ZW5jZSwKKyAqIHRoZXkgYXJlIHJlLW9yZGVyZWQgYXM6CisgKgorICogICBweGE5MTBfZGV2aWNlX3VhcnQxIC0gVUFSVDIgYXMgRkZVQVJUCisgKiAgIHB4YTkxMF9kZXZpY2VfdWFydDIgLSBVQVJUMyBhcyBCVFVBUlQKKyAqCisgKiBVQVJUMSBpcyBub3QgdXNlZCBieSBBUCBmb3IgdGhlIG1vbWVudC4KKyAqLworUFhBOTEwX0RFVklDRSh1YXJ0MSwgInB4YTJ4eC11YXJ0IiwgMCwgVUFSVDIsIDB4ZDQwMTcwMDAsIDB4MzAsIDIxLCAyMik7CitQWEE5MTBfREVWSUNFKHVhcnQyLCAicHhhMnh4LXVhcnQiLCAxLCBVQVJUMywgMHhkNDAxODAwMCwgMHgzMCwgMjMsIDI0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3Rhdm9yZXZiLmMgYi9hcmNoL2FybS9tYWNoLW1tcC90YXZvcmV2Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMGM5MjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC90YXZvcmV2Yi5jCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL3Rhdm9yZXZiLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgUFhBOTEwLWJhc2VkIFRhdm9yRVZCIERldmVsb3BtZW50IFBsYXRmb3JtLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGhlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTEwLmg+CisjaW5jbHVkZSA8bWFjaC9weGE5MTAuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0YXZvcmV2Yl9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBVQVJUMiAqLworCUdQSU80N19VQVJUMl9SWEQsCisJR1BJTzQ4X1VBUlQyX1RYRCwKKworCS8qIFNNQyAqLworCVNNX25DUzBfbkNTMCwKKwlTTV9BRFZfU01fQURWLAorCVNNX1NDTEtfU01fU0NMSywKKwlTTV9TQ0xLX1NNX1NDTEssCisJU01fQkUwX1NNX0JFMCwKKwlTTV9CRTFfU01fQkUxLAorCisJLyogREZJICovCisJREZfSU8wX05EX0lPMCwKKwlERl9JTzFfTkRfSU8xLAorCURGX0lPMl9ORF9JTzIsCisJREZfSU8zX05EX0lPMywKKwlERl9JTzRfTkRfSU80LAorCURGX0lPNV9ORF9JTzUsCisJREZfSU82X05EX0lPNiwKKwlERl9JTzdfTkRfSU83LAorCURGX0lPOF9ORF9JTzgsCisJREZfSU85X05EX0lPOSwKKwlERl9JTzEwX05EX0lPMTAsCisJREZfSU8xMV9ORF9JTzExLAorCURGX0lPMTJfTkRfSU8xMiwKKwlERl9JTzEzX05EX0lPMTMsCisJREZfSU8xNF9ORF9JTzE0LAorCURGX0lPMTVfTkRfSU8xNSwKKwlERl9uQ1MwX1NNX25DUzJfbkNTMCwKKwlERl9BTEVfU01fV0VuX05EX0FMRSwKKwlERl9DTEVfU01fT0VuX05EX0NMRSwKKwlERl9XRW5fREZfV0VuLAorCURGX1JFbl9ERl9SRW4sCisJREZfUkRZMF9ERl9SRFkwLAorfTsKKworc3RhdGljIHN0cnVjdCBzbWM5MXhfcGxhdGRhdGEgdGF2b3JldmJfc21jOTF4X2luZm8gPSB7CisJLmZsYWdzCT0gU01DOTFYX1VTRV8xNkJJVCB8IFNNQzkxWF9OT1dBSVQsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFNNQ19DUzFfUEhZU19CQVNFICsgMHgzMDAsCisJCS5lbmQJPSBTTUNfQ1MxX1BIWVNfQkFTRSArIDB4ZmZmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBncGlvX3RvX2lycSg4MCksCisJCS5lbmQJPSBncGlvX3RvX2lycSg4MCksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21jOTF4IiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmdGF2b3JldmJfc21jOTF4X2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0YXZvcmV2Yl9pbml0KHZvaWQpCit7CisJbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRSh0YXZvcmV2Yl9waW5fY29uZmlnKSk7CisKKwkvKiBvbi1jaGlwIGRldmljZXMgKi8KKwlweGE5MTBfYWRkX3VhcnQoMSk7CisKKwkvKiBvZmYtY2hpcCBkZXZpY2VzICovCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbWM5MXhfZGV2aWNlKTsKK30KKworTUFDSElORV9TVEFSVChUQVZPUkVWQiwgIlBYQTkxMCBFdmFsdWF0aW9uIEJvYXJkIChha2EgVGF2b3JFVkIpIikKKwkucGh5c19pbyAgICAgICAgPSBBUEJfUEhZU19CQVNFLAorCS5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCisJLmlvX3BnX29mZnN0ICAgID0gKEFQQl9WSVJUX0JBU0UgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBweGE5MTBfaW5pdF9pcnEsCisJLnRpbWVyICAgICAgICAgID0gJnB4YTkxMF90aW1lciwKKwkuaW5pdF9tYWNoaW5lICAgPSB0YXZvcmV2Yl9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtbW1wL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDNhNmVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jCkBAIC0wLDAgKzEsMTk5IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jCisgKgorICogICBTdXBwb3J0IGZvciBjbG9ja3NvdXJjZSBhbmQgY2xvY2tldmVudHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogICAyMDA4LTA0LTExOiBKYXNvbiBDaGFnYXMgPEphc29uLmNoYWdhc0BtYXJ2ZWxsLmNvbT4KKyAqICAgMjAwOC0xMC0wODogQmluIFlhbmcgPGJpbi55YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoZSB0aW1lcnMgbW9kdWxlIGFjdHVhbGx5IGluY2x1ZGVzIHRocmVlIHRpbWVycywgZWFjaCB0aW1lciB3aXRoIHVwdG8KKyAqIHRocmVlIG1hdGNoIGNvbXBhcmF0b3JzLiBUaW1lciAjMCBpcyB1c2VkIGhlcmUgaW4gZnJlZS1ydW5uaW5nIG1vZGUgYXMKKyAqIHRoZSBjbG9jayBzb3VyY2UsIGFuZCBtYXRjaCBjb21wYXJhdG9yICMxIHVzZWQgYXMgY2xvY2sgZXZlbnQgZGV2aWNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvY250MzJfdG9fNjMuaD4KKworI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtdGltZXJzLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorCisjZGVmaW5lIFRJTUVSU19WSVJUX0JBU0UJVElNRVJTMV9WSVJUX0JBU0UKKworI2RlZmluZSBNQVhfREVMVEEJCSgweGZmZmZmZmZlKQorI2RlZmluZSBNSU5fREVMVEEJCSgxNikKKworI2RlZmluZSBUQ1IyTlNfU0NBTEVfRkFDVE9SCTEwCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRjcjJuc19zY2FsZTsKKworc3RhdGljIHZvaWQgX19pbml0IHNldF90Y3IybnNfc2NhbGUodW5zaWduZWQgbG9uZyB0Y3JfcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdiA9IDEwMDAwMDAwMDBVTEwgPDwgVENSMk5TX1NDQUxFX0ZBQ1RPUjsKKwlkb19kaXYodiwgdGNyX3JhdGUpOworCXRjcjJuc19zY2FsZSA9IHY7CisJLyoKKwkgKiBXZSB3YW50IGFuIGV2ZW4gdmFsdWUgdG8gYXV0b21hdGljYWxseSBjbGVhciB0aGUgdG9wIGJpdAorCSAqIHJldHVybmVkIGJ5IGNudDMyX3RvXzYzKCkgd2l0aG91dCBhbiBhZGRpdGlvbmFsIHJ1biB0aW1lCisJICogaW5zdHJ1Y3Rpb24uIFNvIGlmIHRoZSBMU0IgaXMgMSB0aGVuIHJvdW5kIGl0IHVwLgorCSAqLworCWlmICh0Y3IybnNfc2NhbGUgJiAxKQorCQl0Y3IybnNfc2NhbGUrKzsKK30KKworLyoKKyAqIEZJWE1FOiB0aGUgdGltZXIgbmVlZHMgc29tZSBkZWxheSB0byBzdGFibGl6ZSB0aGUgY291bnRlciBjYXB0dXJlCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgdGltZXJfcmVhZCh2b2lkKQoreworCWludCBkZWxheSA9IDEwMDsKKworCV9fcmF3X3dyaXRlbCgxLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NWV1IoMCkpOworCisJd2hpbGUgKGRlbGF5LS0pCisJCWNwdV9yZWxheCgpOworCisJcmV0dXJuIF9fcmF3X3JlYWRsKFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ1ZXUigwKSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF9jbG9jayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gY250MzJfdG9fNjModGltZXJfcmVhZCgpKTsKKwlyZXR1cm4gKHYgKiB0Y3IybnNfc2NhbGUpID4+IFRDUjJOU19TQ0FMRV9GQUNUT1I7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmMgPSBkZXZfaWQ7CisKKwkvKiBkaXNhYmxlIGFuZCBjbGVhciBwZW5kaW5nIGludGVycnVwdCBzdGF0dXMgKi8KKwlfX3Jhd193cml0ZWwoMHgwLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0lFUigwKSk7CisJX19yYXdfd3JpdGVsKDB4MSwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9JQ1IoMCkpOworCWMtPmV2ZW50X2hhbmRsZXIoYyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHRpbWVyX3NldF9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG5leHQ7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwkvKiBjbGVhciBwZW5kaW5nIGludGVycnVwdCBzdGF0dXMgYW5kIGVuYWJsZSAqLworCV9fcmF3X3dyaXRlbCgweDAxLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0lDUigwKSk7CisJX19yYXdfd3JpdGVsKDB4MDEsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfSUVSKDApKTsKKworCW5leHQgPSB0aW1lcl9yZWFkKCkgKyBkZWx0YTsKKwlfX3Jhd193cml0ZWwobmV4dCwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9UTl9NTSgwLCAwKSk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRpbWVyX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJCS8qIGRpc2FibGUgdGhlIG1hdGNoaW5nIGludGVycnVwdCAqLworCQlfX3Jhd193cml0ZWwoMHgwMCwgVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9JRVIoMCkpOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlicmVhazsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBja2V2dCA9IHsKKwkubmFtZQkJPSAiY2xvY2tldmVudCIsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuc2hpZnQJCT0gMzIsCisJLnJhdGluZwkJPSAyMDAsCisJLnNldF9uZXh0X2V2ZW50CT0gdGltZXJfc2V0X25leHRfZXZlbnQsCisJLnNldF9tb2RlCT0gdGltZXJfc2V0X21vZGUsCit9OworCitzdGF0aWMgY3ljbGVfdCBjbGtzcmNfcmVhZCh2b2lkKQoreworCXJldHVybiB0aW1lcl9yZWFkKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2tzcmMgPSB7CisJLm5hbWUJCT0gImNsb2Nrc291cmNlIiwKKwkuc2hpZnQJCT0gMjAsCisJLnJhdGluZwkJPSAyMDAsCisJLnJlYWQJCT0gY2xrc3JjX3JlYWQsCisJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHRpbWVyX2NvbmZpZyh2b2lkKQoreworCXVpbnQzMl90IGNjciA9IF9fcmF3X3JlYWRsKFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ0NSKTsKKwl1aW50MzJfdCBjZXIgPSBfX3Jhd19yZWFkbChUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NFUik7CisJdWludDMyX3QgY21yID0gX19yYXdfcmVhZGwoVElNRVJTX1ZJUlRfQkFTRSArIFRNUl9DTVIpOworCisJX19yYXdfd3JpdGVsKGNlciAmIH4weDEsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ0VSKTsgLyogZGlzYWJsZSAqLworCisJY2NyICY9IFRNUl9DQ1JfQ1NfMCgweDMpOworCV9fcmF3X3dyaXRlbChjY3IsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ0NSKTsKKworCS8qIGZyZWUtcnVubmluZyBtb2RlICovCisJX19yYXdfd3JpdGVsKGNtciB8IDB4MDEsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ01SKTsKKworCV9fcmF3X3dyaXRlbCgweDAsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfUExDUigwKSk7IC8qIGZyZWUtcnVubmluZyAqLworCV9fcmF3X3dyaXRlbCgweDcsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfSUNSKDApKTsgIC8qIGNsZWFyIHN0YXR1cyAqLworCV9fcmF3X3dyaXRlbCgweDAsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfSUVSKDApKTsKKworCS8qIGVuYWJsZSB0aW1lciBjb3VudGVyICovCisJX19yYXdfd3JpdGVsKGNlciB8IDB4MDEsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ0VSKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gdGltZXJfaXJxID0geworCS5uYW1lCQk9ICJ0aW1lciIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAorCS5oYW5kbGVyCT0gdGltZXJfaW50ZXJydXB0LAorCS5kZXZfaWQJCT0gJmNrZXZ0LAorfTsKKwordm9pZCBfX2luaXQgdGltZXJfaW5pdChpbnQgaXJxKQoreworCXRpbWVyX2NvbmZpZygpOworCisJc2V0X3RjcjJuc19zY2FsZShDTE9DS19USUNLX1JBVEUpOworCisJY2tldnQubXVsdCA9IGRpdl9zYyhDTE9DS19USUNLX1JBVEUsIE5TRUNfUEVSX1NFQywgY2tldnQuc2hpZnQpOworCWNrZXZ0Lm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoTUFYX0RFTFRBLCAmY2tldnQpOworCWNrZXZ0Lm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoTUlOX0RFTFRBLCAmY2tldnQpOworCWNrZXZ0LmNwdW1hc2sgPSBjcHVtYXNrX29mKDApOworCisJY2tzcmMubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoQ0xPQ0tfVElDS19SQVRFLCBja3NyYy5zaGlmdCk7CisKKwlzZXR1cF9pcnEoaXJxLCAmdGltZXJfaXJxKTsKKworCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZja3NyYyk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZja2V2dCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC90dGNfZGtiLmMgYi9hcmNoL2FybS9tYWNoLW1tcC90dGNfZGtiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhjZmVmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3R0Y19ka2IuYwpAQCAtMCwwICsxLDQ3IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL3R0Y19ka2IuYworICoKKyAqICBTdXBwb3J0IGZvciB0aGUgTWFydmVsbCBQWEE5MTAtYmFzZWQgVFRDX0RLQiBEZXZlbG9wbWVudCBQbGF0Zm9ybS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTkxMC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhOTEwLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworI2RlZmluZSBBUlJBWV9BTkRfU0laRSh4KSAgICAgICAoeCksIEFSUkFZX1NJWkUoeCkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdHRjX2RrYl9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBVQVJUMiAqLworCUdQSU80N19VQVJUMl9SWEQsCisJR1BJTzQ4X1VBUlQyX1RYRCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0dGNfZGtiX2luaXQodm9pZCkKK3sKKwltZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHR0Y19ka2JfcGluX2NvbmZpZykpOworCisJLyogb24tY2hpcCBkZXZpY2VzICovCisJcHhhOTEwX2FkZF91YXJ0KDEpOworfQorCitNQUNISU5FX1NUQVJUKFRUQ19ES0IsICJQWEE5MTAtYmFzZWQgVFRDX0RLQiBEZXZlbG9wbWVudCBQbGF0Zm9ybSIpCisJLnBoeXNfaW8gICAgICAgID0gQVBCX1BIWVNfQkFTRSwKKwkuYm9vdF9wYXJhbXMgICAgPSAweDAwMDAwMTAwLAorCS5pb19wZ19vZmZzdCAgICA9IChBUEJfVklSVF9CQVNFID4+IDE4KSAmIDB4ZmZmYywKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gcHhhOTEwX2luaXRfaXJxLAorCS50aW1lciAgICAgICAgICA9ICZweGE5MTBfdGltZXIsCisJLmluaXRfbWFjaGluZSAgID0gdHRjX2RrYl9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtbXNtL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBmMDVhZDJlLi41NzRjY2M0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1zbS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNyw3ICsxNyw3IEBACiAKIHZvaWQgYXJjaF9pZGxlKHZvaWQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlmb3IgKDs7KSA7ICAvKiBkZXBlbmRzIG9uIElQQyB3LyBvdGhlciBjb3JlICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9LY29uZmlnCmluZGV4IGQ4M2NiODYuLjZmYmU2OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9LY29uZmlnCkBAIC04LDYgKzgsMTIgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgTWFydmVsbCBEQi03OHgwMC1CUCBEZXZlbG9wbWVudCBCb2FyZC4KIAorY29uZmlnIE1BQ0hfUkQ3OFgwMF9NQVNBCisJYm9vbCAiTWFydmVsbCBSRC03OHgwMC1tQVNBIFJlZmVyZW5jZSBEZXNpZ24iCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBNYXJ2ZWxsIFJELTc4eDAwLW1BU0EgUmVmZXJlbmNlIERlc2lnbi4KKwogZW5kbWVudQogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL01ha2VmaWxlCmluZGV4IGVjMTZjMDUuLmRhNjI4YjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvTWFrZWZpbGUKQEAgLTEsMiArMSwzIEBACiBvYmoteQkJCQkrPSBjb21tb24ubyBhZGRyLW1hcC5vIGlycS5vIHBjaWUubwogb2JqLSQoQ09ORklHX01BQ0hfREI3OFgwMF9CUCkJKz0gZGI3OHgwMC1icC1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9SRDc4WDAwX01BU0EpCSs9IHJkNzh4MDAtbWFzYS1zZXR1cC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmMKaW5kZXggYjBlNGUwZC4uYTU3NWRhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uYwpAQCAtMTQsNyArMTQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CiAjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPG1hY2gvbXY3OHh4MC5oPgpAQCAtNDMwLDkgKzQzMiwyMiBAQAogCiB2b2lkIF9faW5pdCBtdjc4eHgwX2dlMTBfaW5pdChzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSAqZXRoX2RhdGEpCiB7CisJdTMyIGRldiwgcmV2OworCiAJZXRoX2RhdGEtPnNoYXJlZCA9ICZtdjc4eHgwX2dlMTBfc2hhcmVkOwogCW12Nzh4eDBfZ2UxMC5kZXYucGxhdGZvcm1fZGF0YSA9IGV0aF9kYXRhOwogCisJLyoKKwkgKiBPbiB0aGUgWjAsIGdlMTAgYW5kIGdlMTEgYXJlIGludGVybmFsbHkgY29ubmVjdGVkIGJhY2sKKwkgKiB0byBiYWNrLCBhbmQgbm90IGJyb3VnaHQgb3V0LgorCSAqLworCW12Nzh4eDBfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKwlpZiAoZGV2ID09IE1WNzhYMDBfWjBfREVWX0lEKSB7CisJCWV0aF9kYXRhLT5waHlfYWRkciA9IE1WNjQzWFhfRVRIX1BIWV9OT05FOworCQlldGhfZGF0YS0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQlldGhfZGF0YS0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJfQorCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtdjc4eHgwX2dlMTBfc2hhcmVkKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm12Nzh4eDBfZ2UxMCk7CiB9CkBAIC00ODQsMTMgKzQ5OSwxMDEgQEAKIAogdm9pZCBfX2luaXQgbXY3OHh4MF9nZTExX2luaXQoc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgKmV0aF9kYXRhKQogeworCXUzMiBkZXYsIHJldjsKKwogCWV0aF9kYXRhLT5zaGFyZWQgPSAmbXY3OHh4MF9nZTExX3NoYXJlZDsKIAltdjc4eHgwX2dlMTEuZGV2LnBsYXRmb3JtX2RhdGEgPSBldGhfZGF0YTsKIAorCS8qCisJICogT24gdGhlIFowLCBnZTEwIGFuZCBnZTExIGFyZSBpbnRlcm5hbGx5IGNvbm5lY3RlZCBiYWNrCisJICogdG8gYmFjaywgYW5kIG5vdCBicm91Z2h0IG91dC4KKwkgKi8KKwltdjc4eHgwX3BjaWVfaWQoJmRldiwgJnJldik7CisJaWYgKGRldiA9PSBNVjc4WDAwX1owX0RFVl9JRCkgeworCQlldGhfZGF0YS0+cGh5X2FkZHIgPSBNVjY0M1hYX0VUSF9QSFlfTk9ORTsKKwkJZXRoX2RhdGEtPnNwZWVkID0gU1BFRURfMTAwMDsKKwkJZXRoX2RhdGEtPmR1cGxleCA9IERVUExFWF9GVUxMOworCX0KKwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXY3OHh4MF9nZTExX3NoYXJlZCk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtdjc4eHgwX2dlMTEpOwogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEkyQyBidXMgMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXY2NHh4eF9pMmNfcGRhdGEgbXY3OHh4MF9pMmNfMF9wZGF0YSA9IHsKKwkuZnJlcV9tCQk9IDgsIC8qIGFzc3VtZXMgMTY2IE1IeiBUQ0xLICovCisJLmZyZXFfbgkJPSAzLAorCS50aW1lb3V0CT0gMTAwMCwgLyogRGVmYXVsdCB0aW1lb3V0IG9mIDEgc2Vjb25kICovCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG12Nzh4eDBfaTJjXzBfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZSAgID0gImkyYyAwIGJhc2UiLAorCQkuc3RhcnQgID0gSTJDXzBfUEhZU19CQVNFLAorCQkuZW5kICAgID0gSTJDXzBfUEhZU19CQVNFICsgMHgxZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLm5hbWUgICA9ICJpMmMgMCBpcnEiLAorCQkuc3RhcnQgID0gSVJRX01WNzhYWDBfSTJDXzAsCisJCS5lbmQgICAgPSBJUlFfTVY3OFhYMF9JMkNfMCwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG12Nzh4eDBfaTJjXzAgPSB7CisJLm5hbWUJCT0gTVY2NFhYWF9JMkNfQ1RMUl9OQU1FLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdjc4eHgwX2kyY18wX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbXY3OHh4MF9pMmNfMF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm12Nzh4eDBfaTJjXzBfcGRhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSTJDIGJ1cyAxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBtdjY0eHh4X2kyY19wZGF0YSBtdjc4eHgwX2kyY18xX3BkYXRhID0geworCS5mcmVxX20JCT0gOCwgLyogYXNzdW1lcyAxNjYgTUh6IFRDTEsgKi8KKwkuZnJlcV9uCQk9IDMsCisJLnRpbWVvdXQJPSAxMDAwLCAvKiBEZWZhdWx0IHRpbWVvdXQgb2YgMSBzZWNvbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXY3OHh4MF9pMmNfMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lICAgPSAiaTJjIDEgYmFzZSIsCisJCS5zdGFydCAgPSBJMkNfMV9QSFlTX0JBU0UsCisJCS5lbmQgICAgPSBJMkNfMV9QSFlTX0JBU0UgKyAweDFmLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkubmFtZSAgID0gImkyYyAxIGlycSIsCisJCS5zdGFydCAgPSBJUlFfTVY3OFhYMF9JMkNfMSwKKwkJLmVuZCAgICA9IElSUV9NVjc4WFgwX0kyQ18xLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXY3OHh4MF9pMmNfMSA9IHsKKwkubmFtZQkJPSBNVjY0WFhYX0kyQ19DVExSX05BTUUsCisJLmlkCQk9IDEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12Nzh4eDBfaTJjXzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtdjc4eHgwX2kyY18xX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbXY3OHh4MF9pMmNfMV9wZGF0YSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgbXY3OHh4MF9pMmNfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXY3OHh4MF9pMmNfMCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtdjc4eHgwX2kyY18xKTsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTQVRBCkBAIC03MTksNiArODIyLDMyIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdlbmVyYWwKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGNoYXIgKiBfX2luaXQgbXY3OHh4MF9pZCh2b2lkKQoreworCXUzMiBkZXYsIHJldjsKKworCW12Nzh4eDBfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKworCWlmIChkZXYgPT0gTVY3OFgwMF9aMF9ERVZfSUQpIHsKKwkJaWYgKHJldiA9PSBNVjc4WDAwX1JFVl9aMCkKKwkJCXJldHVybiAiTVY3OFgwMC1aMCI7CisJCWVsc2UKKwkJCXJldHVybiAiTVY3OFgwMC1SZXYtVW5zdXBwb3J0ZWQiOworCX0gZWxzZSBpZiAoZGV2ID09IE1WNzgxMDBfREVWX0lEKSB7CisJCWlmIChyZXYgPT0gTVY3ODEwMF9SRVZfQTApCisJCQlyZXR1cm4gIk1WNzgxMDAtQTAiOworCQllbHNlCisJCQlyZXR1cm4gIk1WNzgxMDAtUmV2LVVuc3VwcG9ydGVkIjsKKwl9IGVsc2UgaWYgKGRldiA9PSBNVjc4MjAwX0RFVl9JRCkgeworCQlpZiAocmV2ID09IE1WNzgxMDBfUkVWX0EwKQorCQkJcmV0dXJuICJNVjc4MjAwLUEwIjsKKwkJZWxzZQorCQkJcmV0dXJuICJNVjc4MjAwLVJldi1VbnN1cHBvcnRlZCI7CisJfSBlbHNlIHsKKwkJcmV0dXJuICJEZXZpY2UtVW5rbm93biI7CisJfQorfQorCiBzdGF0aWMgaW50IF9faW5pdCBpc19sMl93cml0ZXRocm91Z2godm9pZCkKIHsKIAlyZXR1cm4gISEocmVhZGwoQ1BVX0NPTlRST0wpICYgTDJfV1JJVEVUSFJPVUdIKTsKQEAgLTczNyw3ICs4NjYsOCBAQAogCWdldF9wY2xrX2wyY2xrKGhjbGssIGNvcmVfaW5kZXgsICZwY2xrLCAmbDJjbGspOwogCXRjbGsgPSBnZXRfdGNsaygpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiTVY3OHh4MCBjb3JlICMlZCwgIiwgY29yZV9pbmRleCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgIiwgbXY3OHh4MF9pZCgpKTsKKwlwcmludGsoImNvcmUgIyVkLCAiLCBjb3JlX2luZGV4KTsKIAlwcmludGsoIlBDTEsgPSAlZE1IeiwgIiwgKHBjbGsgKyA0OTk5OTkpIC8gMTAwMDAwMCk7CiAJcHJpbnRrKCJMMiA9ICVkTUh6LCAiLCAobDJjbGsgKyA0OTk5OTkpIC8gMTAwMDAwMCk7CiAJcHJpbnRrKCJIQ0xLID0gJWRNSHosICIsIChoY2xrICsgNDk5OTk5KSAvIDEwMDAwMDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2NvbW1vbi5oCmluZGV4IDc4YWY1ZGUuLmJlZmMyMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvY29tbW9uLmgKQEAgLTI5LDYgKzI5LDggQEAKIHZvaWQgbXY3OHh4MF9zZXR1cF9wY2llX21lbV93aW4oaW50IHdpbmRvdywgdTMyIGJhc2UsIHUzMiBzaXplLAogCQkJCWludCBtYWosIGludCBtaW4pOwogCit2b2lkIG12Nzh4eDBfcGNpZV9pZCh1MzIgKmRldiwgdTMyICpyZXYpOworCiB2b2lkIG12Nzh4eDBfZWhjaTBfaW5pdCh2b2lkKTsKIHZvaWQgbXY3OHh4MF9laGNpMV9pbml0KHZvaWQpOwogdm9pZCBtdjc4eHgwX2VoY2kyX2luaXQodm9pZCk7CkBAIC00Miw2ICs0NCw3IEBACiB2b2lkIG12Nzh4eDBfdWFydDFfaW5pdCh2b2lkKTsKIHZvaWQgbXY3OHh4MF91YXJ0Ml9pbml0KHZvaWQpOwogdm9pZCBtdjc4eHgwX3VhcnQzX2luaXQodm9pZCk7Cit2b2lkIG12Nzh4eDBfaTJjX2luaXQodm9pZCk7CiAKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG12Nzh4eDBfdGltZXI7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9kYjc4eDAwLWJwLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvZGI3OHgwMC1icC1zZXR1cC5jCmluZGV4IDJlMjg1YmIuLmVmZGFiZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9kYjc4eDAwLWJwLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2RiNzh4MDAtYnAtc2V0dXAuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvbXY3OHh4MC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtMjgsMjEgKzI5LDIyIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZGI3OHgwMF9nZTEwX2RhdGEgPSB7Ci0JLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX05PTkUsCi0JLnNwZWVkCQk9IFNQRUVEXzEwMDAsCi0JLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUigxMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZGI3OHgwMF9nZTExX2RhdGEgPSB7Ci0JLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX05PTkUsCi0JLnNwZWVkCQk9IFNQRUVEXzEwMDAsCi0JLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUigxMSksCiB9OwogCiBzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBkYjc4eDAwX3NhdGFfZGF0YSA9IHsKIAkubl9wb3J0cwk9IDIsCiB9OwogCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZGI3OHgwMF9pMmNfcnRjID0geworCUkyQ19CT0FSRF9JTkZPKCJkczEzMzgiLCAweDY4KSwKK307CisKKwogc3RhdGljIHZvaWQgX19pbml0IGRiNzh4MDBfaW5pdCh2b2lkKQogewogCS8qCkBAIC02NCw2ICs2Niw4IEBACiAJCW12Nzh4eDBfc2F0YV9pbml0KCZkYjc4eDAwX3NhdGFfZGF0YSk7CiAJCW12Nzh4eDBfdWFydDBfaW5pdCgpOwogCQltdjc4eHgwX3VhcnQyX2luaXQoKTsKKwkJbXY3OHh4MF9pMmNfaW5pdCgpOworCQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmZGI3OHgwMF9pMmNfcnRjLCAxKTsKIAl9IGVsc2UgewogCQltdjc4eHgwX3VhcnQxX2luaXQoKTsKIAkJbXY3OHh4MF91YXJ0M19pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL212Nzh4eDAuaCBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCmluZGV4IGU5MzBlYTUuLjU4MmNmZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvbXY3OHh4MC5oCkBAIC04MCw2ICs4MCwxOCBAQAogI2RlZmluZSAgVElNRVJfVklSVF9CQVNFCShCUklER0VfVklSVF9CQVNFIHwgMHgwMzAwKQogCiAvKgorICogU3VwcG9ydGVkIGRldmljZXMgYW5kIHJldmlzaW9ucy4KKyAqLworI2RlZmluZSBNVjc4WDAwX1owX0RFVl9JRAkweDYzODEKKyNkZWZpbmUgTVY3OFgwMF9SRVZfWjAJCTEKKworI2RlZmluZSBNVjc4MTAwX0RFVl9JRAkJMHg3ODEwCisjZGVmaW5lIE1WNzgxMDBfUkVWX0EwCQkxCisKKyNkZWZpbmUgTVY3ODIwMF9ERVZfSUQJCTB4NzgyMAorI2RlZmluZSBNVjc4MjAwX1JFVl9BMAkJMQorCisvKgogICogUmVnaXN0ZXIgTWFwCiAgKi8KICNkZWZpbmUgRERSX1ZJUlRfQkFTRQkJKE1WNzhYWDBfUkVHU19WSVJUX0JBU0UgfCAweDAwMDAwKQpAQCAtOTAsNiArMTAyLDggQEAKICNkZWZpbmUgREVWX0JVU19WSVJUX0JBU0UJKE1WNzhYWDBfUkVHU19WSVJUX0JBU0UgfCAweDEwMDAwKQogI2RlZmluZSAgU0FNUExFX0FUX1JFU0VUX0xPVwkoREVWX0JVU19WSVJUX0JBU0UgfCAweDAwMzApCiAjZGVmaW5lICBTQU1QTEVfQVRfUkVTRVRfSElHSAkoREVWX0JVU19WSVJUX0JBU0UgfCAweDAwMzQpCisjZGVmaW5lICBJMkNfMF9QSFlTX0JBU0UJKERFVl9CVVNfUEhZU19CQVNFIHwgMHgxMDAwKQorI2RlZmluZSAgSTJDXzFfUEhZU19CQVNFCShERVZfQlVTX1BIWVNfQkFTRSB8IDB4MTEwMCkKICNkZWZpbmUgIFVBUlQwX1BIWVNfQkFTRQkoREVWX0JVU19QSFlTX0JBU0UgfCAweDIwMDApCiAjZGVmaW5lICBVQVJUMF9WSVJUX0JBU0UJKERFVl9CVVNfVklSVF9CQVNFIHwgMHgyMDAwKQogI2RlZmluZSAgVUFSVDFfUEhZU19CQVNFCShERVZfQlVTX1BIWVNfQkFTRSB8IDB4MjEwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDdkNTE3OTQuLjFkNjM1MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTcsNyArMTcsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qCiAJICogRW5hYmxlIHNvZnQgcmVzZXQgdG8gYXNzZXJ0IFJTVE9VVG4uCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvcGNpZS5jIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL3BjaWUuYwppbmRleCBhYWQzYTdhLi5hNTYwNDM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvcGNpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9wY2llLmMKQEAgLTMzLDYgKzMzLDEyIEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaWVfbWVtX3NwYWNlOwogCiAKK3ZvaWQgX19pbml0IG12Nzh4eDBfcGNpZV9pZCh1MzIgKmRldiwgdTMyICpyZXYpCit7CisJKmRldiA9IG9yaW9uX3BjaWVfZGV2X2lkKCh2b2lkIF9faW9tZW0gKilQQ0lFMDBfVklSVF9CQVNFKTsKKwkqcmV2ID0gb3Jpb25fcGNpZV9yZXYoKHZvaWQgX19pb21lbSAqKVBDSUUwMF9WSVJUX0JBU0UpOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgbXY3OHh4MF9wY2llX3ByZWluaXQodm9pZCkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9yZDc4eDAwLW1hc2Etc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9yZDc4eDAwLW1hc2Etc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTM2YjdhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL3JkNzh4MDAtbWFzYS1zZXR1cC5jCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW12Nzh4MDAvcmQ3OHgwMC1tYXNhLXNldHVwLmMKKyAqCisgKiBNYXJ2ZWxsIFJELTc4eDAwLW1BU0EgRGV2ZWxvcG1lbnQgQm9hcmQgU2V0dXAKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPG1hY2gvbXY3OHh4MC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgcmQ3OHgwMF9tYXNhX2dlMDBfZGF0YSA9IHsKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUig4KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSByZDc4eDAwX21hc2FfZ2UwMV9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDkpLAorfTsKKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIHJkNzh4MDBfbWFzYV9nZTEwX2RhdGEgPSB7Cit9OworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgcmQ3OHgwMF9tYXNhX2dlMTFfZGF0YSA9IHsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIHJkNzh4MDBfbWFzYV9zYXRhX2RhdGEgPSB7CisJLm5fcG9ydHMJPSAyLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHJkNzh4MDBfbWFzYV9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBCYXNpYyBNVjc4eDAwIHNldHVwLiBOZWVkcyB0byBiZSBjYWxsZWQgZWFybHkuCisJICovCisJbXY3OHh4MF9pbml0KCk7CisKKwkvKgorCSAqIFBhcnRpdGlvbiBvbi1jaGlwIHBlcmlwaGVyYWxzIGJldHdlZW4gdGhlIHR3byBDUFUgY29yZXMuCisJICovCisJaWYgKG12Nzh4eDBfY29yZV9pbmRleCgpID09IDApIHsKKwkJbXY3OHh4MF9laGNpMF9pbml0KCk7CisJCW12Nzh4eDBfZWhjaTFfaW5pdCgpOworCQltdjc4eHgwX2dlMDBfaW5pdCgmcmQ3OHgwMF9tYXNhX2dlMDBfZGF0YSk7CisJCW12Nzh4eDBfZ2UxMF9pbml0KCZyZDc4eDAwX21hc2FfZ2UxMF9kYXRhKTsKKwkJbXY3OHh4MF9zYXRhX2luaXQoJnJkNzh4MDBfbWFzYV9zYXRhX2RhdGEpOworCQltdjc4eHgwX3VhcnQwX2luaXQoKTsKKwkJbXY3OHh4MF91YXJ0Ml9pbml0KCk7CisJfSBlbHNlIHsKKwkJbXY3OHh4MF9laGNpMl9pbml0KCk7CisJCW12Nzh4eDBfZ2UwMV9pbml0KCZyZDc4eDAwX21hc2FfZ2UwMV9kYXRhKTsKKwkJbXY3OHh4MF9nZTExX2luaXQoJnJkNzh4MDBfbWFzYV9nZTExX2RhdGEpOworCQltdjc4eHgwX3VhcnQxX2luaXQoKTsKKwkJbXY3OHh4MF91YXJ0M19pbml0KCk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCByZDc4eDAwX3BjaV9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBBc3NpZ24gYWxsIFBDSWUgZGV2aWNlcyB0byBDUFUgY29yZSAjMC4KKwkgKi8KKwlpZiAobWFjaGluZV9pc19yZDc4eDAwX21hc2EoKSAmJiBtdjc4eHgwX2NvcmVfaW5kZXgoKSA9PSAwKQorCQltdjc4eHgwX3BjaWVfaW5pdCgxLCAxKTsKKworCXJldHVybiAwOworfQorc3Vic3lzX2luaXRjYWxsKHJkNzh4MDBfcGNpX2luaXQpOworCitNQUNISU5FX1NUQVJUKFJENzhYMDBfTUFTQSwgIk1hcnZlbGwgUkQtNzh4MDAtTUFTQSBEZXZlbG9wbWVudCBCb2FyZCIpCisJLyogTWFpbnRhaW5lcjogTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAbWFydmVsbC5jb20+ICovCisJLnBoeXNfaW8JPSBNVjc4WFgwX1JFR1NfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoTVY3OFhYMF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IHJkNzh4MDBfbWFzYV9pbml0LAorCS5tYXBfaW8JCT0gbXY3OHh4MF9tYXBfaW8sCisJLmluaXRfaXJxCT0gbXY3OHh4MF9pbml0X2lycSwKKwkudGltZXIJCT0gJm12Nzh4eDBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXgxL0tjb25maWcKaW5kZXggMmI1OWZjNy4uZWI3NjYwZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW14MS9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogaWYgQVJDSF9NWDEKIAotY29tbWVudCAiTVgxIFBsYXRmb3JtcyIKK2NvbW1lbnQgIk1YMSBwbGF0Zm9ybXM6IgogCiBjb25maWcgTUFDSF9NWExBRFMKIAlib29sCkBAIC0xMSw0ICsxMSw5IEBACiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIE1vdG9yb2xhIE1YMUFEUy9NWExBRFMgYm9hcmRzCiAKK2NvbmZpZyBNQUNIX1NDQjkzMjgKKwlib29sICJTeW5lcnRyb25peHggc2NiOTMyOCIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgYSBTeW5lcnRyb25peHggc2NiOTMyOCBib2FyZAorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW14MS9NYWtlZmlsZQppbmRleCBiOTY5NzE5Li44MmYxMzA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW14MS9NYWtlZmlsZQpAQCAtOCwzICs4LDQgQEAKIAogIyBTcGVjaWZpYyBib2FyZCBzdXBwb3J0CiBvYmotJChDT05GSUdfQVJDSF9NWDFBRFMpICs9IG14MWFkcy5vCitvYmotJChDT05GSUdfTUFDSF9TQ0I5MzI4KSArPSBzY2I5MzI4Lm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDEvY2xvY2suYwppbmRleCA0YmNkMWVjLi4wZDBmMzA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgxL2Nsb2NrLmMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlICJjcm1fcmVncy5oIgogCiBzdGF0aWMgaW50IF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKQEAgLTg3LDMzICs4OCw2IEBACiAJcmV0dXJuIGNsay0+cGFyZW50LT5zZXRfcmF0ZShjbGstPnBhcmVudCwgcmF0ZSk7CiB9CiAKLS8qCi0gKiAgZ2V0IHRoZSBzeXN0ZW0gcGxsIGNsb2NrIGluIEh6Ci0gKgotICogICAgICAgICAgICAgICAgICBtZmkgKyBtZm4gLyAobWZkICsxKQotICogIGYgPSAyICogZl9yZWYgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICAgICAgICAgICBwZCArIDEKLSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbXgxX2RlY29kZV9wbGwodW5zaWduZWQgaW50IHBsbCwgdTMyIGZfcmVmKQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyBsbDsKLQl1bnNpZ25lZCBsb25nIHF1b3Q7Ci0KLQl1MzIgbWZpID0gKHBsbCA+PiAxMCkgJiAweGY7Ci0JdTMyIG1mbiA9IHBsbCAmIDB4M2ZmOwotCXUzMiBtZmQgPSAocGxsID4+IDE2KSAmIDB4M2ZmOwotCXUzMiBwZCA9ICAocGxsID4+IDI2KSAmIDB4ZjsKLQotCW1maSA9IG1maSA8PSA1ID8gNSA6IG1maTsKLQotCWxsID0gMiAqICh1bnNpZ25lZCBsb25nIGxvbmcpZl9yZWYgKgotCQkoKG1maSA8PCAxNikgKyAobWZuIDw8IDE2KSAvIChtZmQgKyAxKSk7Ci0JcXVvdCA9IChwZCArIDEpICogKDEgPDwgMTYpOwotCWxsICs9IHF1b3QgLyAyOwotCWRvX2RpdihsbCwgcXVvdCk7Ci0JcmV0dXJuICh1bnNpZ25lZCBsb25nKWxsOwotfQotCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGsxNm1fZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXJldHVybiAxNjAwMDAwMDsKQEAgLTE4OCw3ICsxNjIsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzeXN0ZW1fY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlyZXR1cm4gbXgxX2RlY29kZV9wbGwoX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMCksCisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKF9fcmF3X3JlYWRsKENDTV9TUENUTDApLAogCQkJICAgICAgY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSk7CiB9CiAKQEAgLTIwMCw3ICsxNzQsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtY3VfY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlyZXR1cm4gbXgxX2RlY29kZV9wbGwoX19yYXdfcmVhZGwoQ0NNX01QQ1RMMCksCisJcmV0dXJuIG14Y19kZWNvZGVfcGxsKF9fcmF3X3JlYWRsKENDTV9NUENUTDApLAogCQkJICAgICAgY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSk7CiB9CiAKQEAgLTQ4OCw3ICs0NjIsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NsayA9IHsKLQkubmFtZSA9ICJkbWFfY2xrIiwKKwkubmFtZSA9ICJkbWEiLAogCS5wYXJlbnQgPSAmaGNsaywKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCkBAIC01MzksNyArNTEzLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfY2xrID0gewotCS5uYW1lID0gInVhcnRfY2xrIiwKKwkubmFtZSA9ICJ1YXJ0IiwKIAkucGFyZW50ID0gJnBlcmNsa1swXSwKIAkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCkBAIC02MjEsNyArNTk1LDcgQEAKIAkmcnRjX2NsaywKIH07CiAKLWludCBfX2luaXQgbXhjX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKK2ludCBfX2luaXQgbXgxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKIHsKIAlzdHJ1Y3QgY2xrICoqY2xrcDsKIAl1bnNpZ25lZCBpbnQgcmVnOwpAQCAtNjUyLDUgKzYyNiw3IEBACiAJY2xrX2VuYWJsZSgmaGNsayk7CiAJY2xrX2VuYWJsZSgmZmNsayk7CiAKKwlteGNfdGltZXJfaW5pdCgmZ3B0X2Nsayk7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXgxL2RldmljZXMuYwppbmRleCBhOTU2NDQxLi45N2Y0MmQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvZGV2aWNlcy5jCkBAIC0yMywxMCArMjMsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotCiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9jc2lfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQgID0gMHgwMDIyNDAwMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL214MWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMKaW5kZXggMzIwMGNmNi4uN2FlMjI5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvbXgxYWRzLmMKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcGNmODU3eC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CkBAIC0yNSw3ICsyNywxMSBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MS1teDIuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpZmRlZiBDT05GSUdfSTJDX0lNWAorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogCiAvKgpAQCAtMTA1LDYgKzExMSw1NSBAQAogfTsKIAogLyoKKyAqIEkyQworICovCisKKyNpZmRlZiBDT05GSUdfSTJDX0lNWAorc3RhdGljIGludCBpMmNfcGluc1tdID0geworCVBBMTVfUEZfSTJDX1NEQSwKKwlQQTE2X1BGX0kyQ19TQ0wsCit9OworCitzdGF0aWMgaW50IGkyY19pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhpMmNfcGlucywKKwkJCUFSUkFZX1NJWkUoaTJjX3BpbnMpLCAiSTJDIik7Cit9CisKK3N0YXRpYyB2b2lkIGkyY19leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMoaTJjX3BpbnMsCisJCQlBUlJBWV9TSVpFKGkyY19waW5zKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNmODU3eF9wbGF0Zm9ybV9kYXRhIHBjZjg1N3hfZGF0YVtdID0geworCXsKKwkJLmdwaW9fYmFzZSA9IDQgKiAzMiwKKwl9LCB7CisJCS5ncGlvX2Jhc2UgPSA0ICogMzIgKyAxNiwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIG14MWFkc19pMmNfZGF0YSA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKKwkuaW5pdCA9IGkyY19pbml0LAorCS5leGl0ID0gaTJjX2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIG14MWFkc19pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1N3giLCAweDIyKSwKKwkJLnR5cGUgPSAicGNmODU3NSIsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjg1N3hfZGF0YVswXSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTd4IiwgMHgyNCksCisJCS50eXBlID0gInBjZjg1NzUiLAorCQkucGxhdGZvcm1fZGF0YSA9ICZwY2Y4NTd4X2RhdGFbMV0sCisJfSwKK307CisjZW5kaWYKKworLyoKICAqIEJvYXJkIGluaXQKICAqLwogc3RhdGljIHZvaWQgX19pbml0IG14MWFkc19pbml0KHZvaWQpCkBAIC0xMTUsMTIgKzE3MCwxOSBAQAogCiAJLyogUGh5c21hcCBmbGFzaCAqLwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmZsYXNoX2RldmljZSwgJm14MWFkc19mbGFzaF9kYXRhKTsKKworCS8qIEkyQyAqLworI2lmZGVmIENPTkZJR19JMkNfSU1YCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgbXgxYWRzX2kyY19kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUobXgxYWRzX2kyY19kZXZpY2VzKSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfaTJjX2RldmljZSwgJm14MWFkc19pMmNfZGF0YSk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG14MWFkc190aW1lcl9pbml0KHZvaWQpCiB7Ci0JbXhjX2Nsb2Nrc19pbml0KDMyMDAwKTsKLQlteGNfdGltZXJfaW5pdCgiZ3B0X2NsayIpOworCW14MV9jbG9ja3NfaW5pdCgzMjAwMCk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgbXgxYWRzX3RpbWVyID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvc2NiOTMyOC5jIGIvYXJjaC9hcm0vbWFjaC1teDEvc2NiOTMyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNzFmM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14MS9zY2I5MzI4LmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW14MS9zY2I5MzI4LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2FzY2hhIEhhdWVyIDxzYXNjaGFoYXVlckB3ZWIuZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBKdWVyZ2VuIEJlaXNlcnQgPGpiZWlzZXJ0QG5ldHNjYXBlLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbTkwMDAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qCisgKiBUaGlzIHNjYjkzMjggaGFzIGEgMzJNaUIgZmxhc2gKKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBJTVhfQ1MwX1BIWVMsCisJLmVuZAk9IElNWF9DUzBfUEhZUyArICgzMiAqIDEwMjQgKiAxMDI0KSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBzY2JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjYl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNjYl9mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKKy8qCisgKiBzY2I5MzI4IGhhcyBhIERNOTAwMCBuZXR3b3JrIGNvbnRyb2xsZXIKKyAqIGNvbm5lY3RlZCB0byBDUzUsIHdpdGggMTYgYml0IGRhdGEgcGF0aAorICogYW5kIGludGVycnVwdCBjb25uZWN0ZWQgdG8gR1BJTyAzCisgKi8KKworLyoKKyAqIGludGVybmFsIGRhdGFwYXRoIGlzIGZpeGVkIDE2IGJpdAorICovCitzdGF0aWMgc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgZG05MDAwX3BsYXRkYXRhID0geworCS5mbGFncwk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFksCit9OworCisvKgorICogdGhlIERNOTAwMCBkcml2ZXJzIHdhbnRzIHR3byBkZWZpbmVkIGFkZHJlc3Mgc3BhY2VzCisgKiB0byBnYWluIGFjY2VzcyB0byBhZGRyZXNzIGxhdGNoIHJlZ2lzdGVycyBhbmQgdGhlIGRhdGEgcGF0aC4KKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDB4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiYWRkcmVzcyBhcmVhIiwKKwkJLnN0YXJ0CT0gSU1YX0NTNV9QSFlTLAorCQkuZW5kCT0gSU1YX0NTNV9QSFlTICsgMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0JLyogYWRkcmVzcyBhY2Nlc3MgKi8KKwl9LAorCVsxXSA9IHsKKwkJLm5hbWUJPSAiZGF0YSBhcmVhIiwKKwkJLnN0YXJ0CT0gSU1YX0NTNV9QSFlTICsgNCwKKwkJLmVuZAk9IElNWF9DUzVfUEhZUyArIDUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCS8qIGRhdGEgYWNjZXNzICovCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IElSUV9HUElPQygzKSwKKwkJLmVuZAk9IElSUV9HUElPQygzKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTkwMDB4X2RldmljZSA9IHsKKwkubmFtZQkJPSAiZG05MDAwIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZG05MDAweF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGRtOTAwMHhfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZkbTkwMDBfcGxhdGRhdGEsCisJfQorfTsKKworc3RhdGljIGludCBteGNfdWFydDFfcGluc1tdID0geworCVBDOV9QRl9VQVJUMV9DVFMsCisJUEMxMF9QRl9VQVJUMV9SVFMsCisJUEMxMV9QRl9VQVJUMV9UWEQsCisJUEMxMl9QRl9VQVJUMV9SWEQsCit9OworCitzdGF0aWMgaW50IHVhcnQxX214Y19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQxX3BpbnMsCisJCQlBUlJBWV9TSVpFKG14Y191YXJ0MV9waW5zKSwgIlVBUlQxIik7Cit9CisKK3N0YXRpYyBpbnQgdWFydDFfbXhjX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX3VhcnQxX3BpbnMsCisJCQlBUlJBWV9TSVpFKG14Y191YXJ0MV9waW5zKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CisJLmluaXQgPSB1YXJ0MV9teGNfaW5pdCwKKwkuZXhpdCA9IHVhcnQxX214Y19leGl0LAorCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjYl9mbGFzaF9kZXZpY2UsCisJJmRtOTAwMHhfZGV2aWNlLAorfTsKKworLyoKKyAqIHNjYjkzMjhfaW5pdCAtIEluaXQgdGhlIENQVSBjYXJkIGl0c2VsZgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgc2NiOTMyOF9pbml0KHZvaWQpCit7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X3VhcnQxX2RldmljZSwgJnVhcnRfcGRhdGEpOworCisJcHJpbnRrKEtFUk5fSU5GTyJTY2I5MzI4OiBBZGRpbmcgZGV2aWNlc1xuIik7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzY2I5MzI4X3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDFfY2xvY2tzX2luaXQoMzIwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBzY2I5MzI4X3RpbWVyID0geworCS5pbml0CT0gc2NiOTMyOF90aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChTQ0I5MzI4LCAiU3luZXJ0cm9uaXh4IHNjYjkzMjgiKQorICAgIC8qIFNhc2NoYSBIYXVlciAqLworCS5waHlzX2lvCT0gMHgwMDIwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZTAyMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDA4MDAwMTAwLAorCS5tYXBfaW8JCT0gbXhjX21hcF9pbywKKwkuaW5pdF9pcnEJPSBteGNfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZzY2I5MzI4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBzY2I5MzI4X2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXgyL0tjb25maWcKaW5kZXggMWVhYTk3Yy4uNDJhNzg4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9LY29uZmlnCkBAIC0xLDE0ICsxLDIyIEBACi1jb21tZW50ICJNWDIgZmFtaWx5IENQVSBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVJDSF9NWDIKK2lmIEFSQ0hfTVgyCisKK2Nob2ljZQorCXByb21wdCAiQ1BVczoiCisJZGVmYXVsdCBNQUNIX01YMjEKKworY29uZmlnIE1BQ0hfTVgyMQorCWJvb2wgImkuTVgyMSBzdXBwb3J0IgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBGcmVlc2NhbGUncyBNWDIgYmFzZWQgaS5NWDIxIHByb2Nlc3Nvci4KIAogY29uZmlnIE1BQ0hfTVgyNwogCWJvb2wgImkuTVgyNyBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVJDSF9NWDIKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgRnJlZXNjYWxlJ3MgTVgyIGJhc2VkIGkuTVgyNyBwcm9jZXNzb3IuCiAKLWNvbW1lbnQgIk1YMiBQbGF0Zm9ybXMiCi0JZGVwZW5kcyBvbiBBUkNIX01YMgorZW5kY2hvaWNlCisKK2NvbW1lbnQgIk1YMiBwbGF0Zm9ybXM6IgogCiBjb25maWcgTUFDSF9NWDI3QURTCiAJYm9vbCAiTVgyN0FEUyBwbGF0Zm9ybSIKQEAgLTM3LDMgKzQ1LDUgQEAKIAkgIFBDTTk3MCBldmFsdWF0aW9uIGJvYXJkLgogCiBlbmRjaG9pY2UKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDIvTWFrZWZpbGUKaW5kZXggMzgyZDg2MC4uOTUwNjQ5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvTWFrZWZpbGUKQEAgLTQsNyArNCw5IEBACiAKICMgT2JqZWN0IGZpbGUgbGlzdHMuCiAKLW9iai15CTo9ICBzeXN0ZW0ubyBnZW5lcmljLm8gZGV2aWNlcy5vIHNlcmlhbC5vCitvYmoteQk6PSAgZ2VuZXJpYy5vIGRldmljZXMubyBzZXJpYWwubworCitvYmotJChDT05GSUdfTUFDSF9NWDIxKSArPSBjbG9ja19pbXgyMS5vCiAKIG9iai0kKENPTkZJR19NQUNIX01YMjcpICs9IGNwdV9pbXgyNy5vCiBvYmotJChDT05GSUdfTUFDSF9NWDI3KSArPSBjbG9ja19pbXgyNy5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1teDIvTWFrZWZpbGUuYm9vdAppbmRleCA2OTY4MzFkY2QuLmU4NjczOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlLmJvb3QKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvTWFrZWZpbGUuYm9vdApAQCAtMSwzICsxLDcgQEAKLSAgIHpyZWxhZGRyLXkJOj0gMHhBMDAwODAwMAotcGFyYW1zX3BoeXMteQk6PSAweEEwMDAwMTAwCi1pbml0cmRfcGh5cy15CTo9IDB4QTA4MDAwMDAKK3pyZWxhZGRyLSQoQ09ORklHX01BQ0hfTVgyMSkJOj0gMHhDMDAwODAwMAorcGFyYW1zX3BoeXMtJChDT05GSUdfTUFDSF9NWDIxKQk6PSAweEMwMDAwMTAwCitpbml0cmRfcGh5cy0kKENPTkZJR19NQUNIX01YMjEpCTo9IDB4QzA4MDAwMDAKKworenJlbGFkZHItJChDT05GSUdfTUFDSF9NWDI3KQk6PSAweEEwMDA4MDAwCitwYXJhbXNfcGh5cy0kKENPTkZJR19NQUNIX01YMjcpCTo9IDB4QTAwMDAxMDAKK2luaXRyZF9waHlzLSQoQ09ORklHX01BQ0hfTVgyNykJOj0gMHhBMDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRlZTVjOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICogQ29weXJpZ2h0IDIwMDggTWFydGluIEZ1enpleSwgbWZ1enpleUBnbWFpbC5jb20KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgImNybV9yZWdzLmgiCisKK3N0YXRpYyBpbnQgX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyB8PSAxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnICY9IH4oMSA8PCBjbGstPmVuYWJsZV9zaGlmdCk7CisJX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIGludCBfY2xrX3NwbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOworCXJlZyB8PSBDQ01fQ1NDUl9TUEVOOworCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DU0NSKTsKKworCXdoaWxlICgoX19yYXdfcmVhZGwoQ0NNX1NQQ1RMMSkgJiBDQ01fU1BDVEwxX0xGKSA9PSAwKQorCQk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9jbGtfc3BsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NTQ1IpOworCXJlZyAmPSB+Q0NNX0NTQ1JfU1BFTjsKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7Cit9CisKKworI2RlZmluZSBDU0NSKCkgKF9fcmF3X3JlYWRsKENDTV9DU0NSKSkKKyNkZWZpbmUgUENEUjAoKSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSkKKyNkZWZpbmUgUENEUjEoKSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIxKSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19wZXJjbGt4X3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgZGl2OworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisJaWYgKHBhcmVudF9yYXRlICUgcmF0ZSkKKwkJZGl2Kys7CisKKwlpZiAoZGl2ID4gNjQpCisJCWRpdiA9IDY0OworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OworfQorCitzdGF0aWMgaW50IF9jbGtfcGVyY2xreF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgcmVnOworCXUzMiBkaXY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWlmIChjbGstPmlkIDwgMCB8fCBjbGstPmlkID4gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisJaWYgKGRpdiA+IDY0IHx8IGRpdiA8IDEgfHwgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCWRpdi0tOworCisJcmVnID0KKwkgICAgX19yYXdfcmVhZGwoQ0NNX1BDRFIxKSAmIH4oQ0NNX1BDRFIxX1BFUkRJVjFfTUFTSyA8PAorCQkJCSAgICAgICAoY2xrLT5pZCA8PCAzKSk7CisJcmVnIHw9IGRpdiA8PCAoY2xrLT5pZCA8PCAzKTsKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENEUjEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfdXNiX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyB1c2JfcGRmOworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwl1c2JfcGRmID0gKENTQ1IoKSAmIENDTV9DU0NSX1VTQl9NQVNLKSA+PiBDQ01fQ1NDUl9VU0JfT0ZGU0VUOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKHVzYl9wZGYgKyAxVSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfc3NpeF9yZWNhbGMoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHBkZikKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcGRmID0gKHBkZiA8IDIpID8gMTI0VUwgOiBwZGY7ICAvKiBNWDIxICYgTVgyNyBUTzEgKi8KKworCXJldHVybiAyVUwgKiBwYXJlbnRfcmF0ZSAvIHBkZjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19zc2kxX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIF9jbGtfc3NpeF9yZWNhbGMoY2xrLAorCQkoUENEUjAoKSAmIENDTV9QQ0RSMF9TU0kxQkFVRERJVl9NQVNLKQorCQk+PiBDQ01fUENEUjBfU1NJMUJBVURESVZfT0ZGU0VUKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19zc2kyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIF9jbGtfc3NpeF9yZWNhbGMoY2xrLAorCQkoUENEUjAoKSAmIENDTV9QQ0RSMF9TU0kyQkFVRERJVl9NQVNLKSA+PgorCQlDQ01fUENEUjBfU1NJMkJBVURESVZfT0ZGU0VUKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19uZmNfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIG5mY19wZGY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCW5mY19wZGYgPSAoUENEUjAoKSAmIENDTV9QQ0RSMF9ORkNESVZfTUFTSykKKwkJPj4gQ0NNX1BDRFIwX05GQ0RJVl9PRkZTRVQ7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAobmZjX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3BhcmVudF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiBjbGstPnBhcmVudC0+cm91bmRfcmF0ZShjbGstPnBhcmVudCwgcmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19wYXJlbnRfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJcmV0dXJuIGNsay0+cGFyZW50LT5zZXRfcmF0ZShjbGstPnBhcmVudCwgcmF0ZSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlOyAvKiBpbiBIeiAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlOworfQorCisvKgorICogdGhlIGhpZ2ggZnJlcXVlbmN5IGV4dGVybmFsIGNsb2NrIHJlZmVyZW5jZQorICogRGVmYXVsdCBjYXNlIGlzIDI2TUh6LgorICovCitzdGF0aWMgc3RydWN0IGNsayBja2loX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4dGVybmFsX2xvd19yZWZlcmVuY2U7IC8qIGluIEh6ICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9sb3dfcmVmZXJlbmNlX2Nsb2NrX3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBleHRlcm5hbF9sb3dfcmVmZXJlbmNlOworfQorCisvKgorICogdGhlIGxvdyBmcmVxdWVuY3kgZXh0ZXJuYWwgY2xvY2sgcmVmZXJlbmNlCisgKiBEZWZhdWx0IGNhc2UgaXMgMzIuNzY4a0h6LgorICovCitzdGF0aWMgc3RydWN0IGNsayBja2lsX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBnZXRfbG93X3JlZmVyZW5jZV9jbG9ja19yYXRlLAorfTsKKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2ZwbV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpICogNTEyOworfQorCisvKiBPdXRwdXQgb2YgZnJlcXVlbmN5IHByZSBtdWx0aXBsaWVyICovCitzdGF0aWMgc3RydWN0IGNsayBmcG1fY2xrID0geworCS5wYXJlbnQgPSAmY2tpbF9jbGssCisJLmdldF9yYXRlID0gX2Nsa19mcG1fcmVjYWxjLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X21wbGxfY2xrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1aW50MzJfdCByZWc7CisJdW5zaWduZWQgbG9uZyByZWZfY2xrOworCXVuc2lnbmVkIGxvbmcgbWZpID0gMCwgbWZuID0gMCwgbWZkID0gMCwgcGRmID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdGVtcDsKKworCXJlZl9jbGsgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX01QQ1RMMCk7CisJcGRmID0gKHJlZyAmIENDTV9NUENUTDBfUERfTUFTSykgID4+IENDTV9NUENUTDBfUERfT0ZGU0VUOworCW1mZCA9IChyZWcgJiBDQ01fTVBDVEwwX01GRF9NQVNLKSA+PiBDQ01fTVBDVEwwX01GRF9PRkZTRVQ7CisJbWZpID0gKHJlZyAmIENDTV9NUENUTDBfTUZJX01BU0spID4+IENDTV9NUENUTDBfTUZJX09GRlNFVDsKKwltZm4gPSAocmVnICYgQ0NNX01QQ1RMMF9NRk5fTUFTSykgPj4gQ0NNX01QQ1RMMF9NRk5fT0ZGU0VUOworCisJbWZpID0gKG1maSA8PSA1KSA/IDUgOiBtZmk7CisJdGVtcCA9IDJMTCAqIHJlZl9jbGsgKiBtZm47CisJZG9fZGl2KHRlbXAsIG1mZCArIDEpOworCXRlbXAgPSAyTEwgKiByZWZfY2xrICogbWZpICsgdGVtcDsKKwlkb19kaXYodGVtcCwgcGRmICsgMSk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdGVtcDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgbXBsbF9jbGsgPSB7CisJLnBhcmVudCA9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUgPSBnZXRfbXBsbF9jbGssCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2ZjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisJdTMyIGRpdjsKKworCWRpdiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9QUkVTQ19NQVNLKSA+PiBDQ01fQ1NDUl9QUkVTQ19PRkZTRVQ7CisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdisxKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgZmNsa19jbGsgPSB7CisJLnBhcmVudCA9ICZtcGxsX2NsaywKKwkuZ2V0X3JhdGUgPSBfY2xrX2ZjbGtfZ2V0X3JhdGUKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zcGxsX2NsayhzdHJ1Y3QgY2xrICpjbGspCit7CisJdWludDMyX3QgcmVnOworCXVuc2lnbmVkIGxvbmcgcmVmX2NsazsKKwl1bnNpZ25lZCBsb25nIG1maSA9IDAsIG1mbiA9IDAsIG1mZCA9IDAsIHBkZiA9IDA7CisJdW5zaWduZWQgbG9uZyBsb25nIHRlbXA7CisKKwlyZWZfY2xrID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9TUENUTDApOworCXBkZiA9IChyZWcgJiBDQ01fU1BDVEwwX1BEX01BU0spID4+IENDTV9TUENUTDBfUERfT0ZGU0VUOworCW1mZCA9IChyZWcgJiBDQ01fU1BDVEwwX01GRF9NQVNLKSA+PiBDQ01fU1BDVEwwX01GRF9PRkZTRVQ7CisJbWZpID0gKHJlZyAmIENDTV9TUENUTDBfTUZJX01BU0spID4+IENDTV9TUENUTDBfTUZJX09GRlNFVDsKKwltZm4gPSAocmVnICYgQ0NNX1NQQ1RMMF9NRk5fTUFTSykgPj4gQ0NNX1NQQ1RMMF9NRk5fT0ZGU0VUOworCisJbWZpID0gKG1maSA8PSA1KSA/IDUgOiBtZmk7CisJdGVtcCA9IDJMTCAqIHJlZl9jbGsgKiBtZm47CisJZG9fZGl2KHRlbXAsIG1mZCArIDEpOworCXRlbXAgPSAyTEwgKiByZWZfY2xrICogbWZpICsgdGVtcDsKKwlkb19kaXYodGVtcCwgcGRmICsgMSk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdGVtcDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgc3BsbF9jbGsgPSB7CisJLnBhcmVudCA9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUgPSBnZXRfc3BsbF9jbGssCisJLmVuYWJsZSA9IF9jbGtfc3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSBfY2xrX3NwbGxfZGlzYWJsZSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9oY2xrX2NsayhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXVuc2lnbmVkIGxvbmcgYmNsa19wZGY7CisKKwliY2xrX3BkZiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9CQ0xLX01BU0spCisJCT4+IENDTV9DU0NSX0JDTEtfT0ZGU0VUOworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJcmV0dXJuIHJhdGUgLyAoYmNsa19wZGYgKyAxKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgaGNsa19jbGsgPSB7CisJLnBhcmVudCA9ICZmY2xrX2NsaywKKwkuZ2V0X3JhdGUgPSBnZXRfaGNsa19jbGssCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfaXBnX2NsayhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXVuc2lnbmVkIGxvbmcgaXBnX3BkZjsKKworCWlwZ19wZGYgPSAoQ1NDUigpICYgQ0NNX0NTQ1JfSVBESVYpID4+IENDTV9DU0NSX0lQRElWX09GRlNFVDsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXJldHVybiByYXRlIC8gKGlwZ19wZGYgKyAxKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgaXBnX2NsayA9IHsKKwkucGFyZW50ID0gJmhjbGtfY2xrLAorCS5nZXRfcmF0ZSA9IGdldF9pcGdfY2xrLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19wZXJjbGt4X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZXJjbGtfcGRmOworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlpZiAoY2xrLT5pZCA8IDAgfHwgY2xrLT5pZCA+IDMpCisJCXJldHVybiAwOworCisJcGVyY2xrX3BkZiA9IChQQ0RSMSgpID4+IChjbGstPmlkIDw8IDMpKSAmIENDTV9QQ0RSMV9QRVJESVYxX01BU0s7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAocGVyY2xrX3BkZiArIDEpOworfQorCitzdGF0aWMgc3RydWN0IGNsayBwZXJfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJm1wbGxfY2xrLAorCQkuZ2V0X3JhdGUgPSBfY2xrX3BlcmNsa3hfcmVjYWxjLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZtcGxsX2NsaywKKwkJLmdldF9yYXRlID0gX2Nsa19wZXJjbGt4X3JlY2FsYywKKwl9LCB7CisJCS5pZCA9IDIsCisJCS5wYXJlbnQgPSAmbXBsbF9jbGssCisJCS5yb3VuZF9yYXRlID0gX2Nsa19wZXJjbGt4X3JvdW5kX3JhdGUsCisJCS5zZXRfcmF0ZSA9IF9jbGtfcGVyY2xreF9zZXRfcmF0ZSwKKwkJLmdldF9yYXRlID0gX2Nsa19wZXJjbGt4X3JlY2FsYywKKwkJLyogRW5hYmxlL0Rpc2FibGUgZG9uZSB2aWEgbGNkX2Nsa2NbMV0gKi8KKwl9LCB7CisJCS5pZCA9IDMsCisJCS5wYXJlbnQgPSAmbXBsbF9jbGssCisJCS5yb3VuZF9yYXRlID0gX2Nsa19wZXJjbGt4X3JvdW5kX3JhdGUsCisJCS5zZXRfcmF0ZSA9IF9jbGtfcGVyY2xreF9zZXRfcmF0ZSwKKwkJLmdldF9yYXRlID0gX2Nsa19wZXJjbGt4X3JlY2FsYywKKwkJLyogRW5hYmxlL0Rpc2FibGUgZG9uZSB2aWEgY3NpX2Nsa1sxXSAqLworCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0X2lwZ19jbGtbXTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydF9jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKKwkJLnNlY29uZGFyeSA9ICZ1YXJ0X2lwZ19jbGtbMF0sCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCisJCS5zZWNvbmRhcnkgPSAmdWFydF9pcGdfY2xrWzFdLAorCX0sIHsKKwkJLmlkID0gMiwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAorCQkuc2Vjb25kYXJ5ID0gJnVhcnRfaXBnX2Nsa1syXSwKKwl9LCB7CisJCS5pZCA9IDMsCisJCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKKwkJLnNlY29uZGFyeSA9ICZ1YXJ0X2lwZ19jbGtbM10sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfaXBnX2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfVUFSVDFfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfVUFSVDFfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDEsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1VBUlQyX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1VBUlQyX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAyLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9VQVJUM19SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9VQVJUM19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMywKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfVUFSVDRfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfVUFSVDRfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0X2lwZ19jbGtbXTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0X2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAorCQkuc2Vjb25kYXJ5ID0gJmdwdF9pcGdfY2xrWzBdLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAorCQkuc2Vjb25kYXJ5ID0gJmdwdF9pcGdfY2xrWzFdLAorCX0sIHsKKwkJLmlkID0gMiwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAorCQkuc2Vjb25kYXJ5ID0gJmdwdF9pcGdfY2xrWzJdLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHRfaXBnX2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfR1BUMV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9HUFQxX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAxLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9HUFQyX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0dQVDJfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDIsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0dQVDNfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfR1BUM19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwd21fY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCisJCS5zZWNvbmRhcnkgPSAmcHdtX2Nsa1sxXSwKKwl9LCB7CisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1BXTV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9QV01fT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RoY19pcGdfY2xrW107CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNkaGNfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCisJCS5zZWNvbmRhcnkgPSAmc2RoY19pcGdfY2xrWzBdLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAorCQkuc2Vjb25kYXJ5ID0gJnNkaGNfaXBnX2Nsa1sxXSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RoY19pcGdfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9TREhDMV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9TREhDMV9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfU0RIQzJfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfU0RIQzJfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3NwaV9pcGdfY2xrW107CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNzcGlfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJnBlcl9jbGtbMV0sCisJCS5zZWNvbmRhcnkgPSAmY3NwaV9pcGdfY2xrWzBdLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAorCQkuc2Vjb25kYXJ5ID0gJmNzcGlfaXBnX2Nsa1sxXSwKKwl9LCB7CisJCS5pZCA9IDIsCisJCS5wYXJlbnQgPSAmcGVyX2Nsa1sxXSwKKwkJLnNlY29uZGFyeSA9ICZjc3BpX2lwZ19jbGtbMl0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNzcGlfaXBnX2Nsa1tdID0geworCXsKKwkJLmlkID0gMCwKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfQ1NQSTFfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfQ1NQSTFfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDEsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0NTUEkyX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0NTUEkyX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkuaWQgPSAzLAorCQkucGFyZW50ID0gJmlwZ19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9DU1BJM19SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9DU1BJM19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBsY2RjX2Nsa1tdID0geworCXsKKwkJLnBhcmVudCA9ICZwZXJfY2xrWzJdLAorCQkuc2Vjb25kYXJ5ID0gJmxjZGNfY2xrWzFdLAorCQkucm91bmRfcmF0ZSA9IF9jbGtfcGFyZW50X3JvdW5kX3JhdGUsCisJCS5zZXRfcmF0ZSA9IF9jbGtfcGFyZW50X3NldF9yYXRlLAorCX0sIHsKKwkJLnBhcmVudCA9ICZpcGdfY2xrLAorCQkuc2Vjb25kYXJ5ID0gJmxjZGNfY2xrWzJdLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfTENEQ19SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9MQ0RDX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkucGFyZW50ID0gJmhjbGtfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSENMS19MQ0RDX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0hDTEtfTENEQ19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjc2lfY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJnBlcl9jbGtbM10sCisJCS5zZWNvbmRhcnkgPSAmY3NpX2Nsa1sxXSwKKwkJLnJvdW5kX3JhdGUgPSBfY2xrX3BhcmVudF9yb3VuZF9yYXRlLAorCQkuc2V0X3JhdGUgPSBfY2xrX3BhcmVudF9zZXRfcmF0ZSwKKwl9LCB7CisJCS5wYXJlbnQgPSAmaGNsa19jbGssCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9IQ0xLX0NTSV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9IQ0xLX0NTSV9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJnNwbGxfY2xrLAorCQkuZ2V0X3JhdGUgPSBfY2xrX3VzYl9yZWNhbGMsCisJCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9VU0JPVEdfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfVVNCT1RHX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwgeworCQkucGFyZW50ID0gJmhjbGtfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSENMS19VU0JPVEdfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfSENMS19VU0JPVEdfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfaXBnX2Nsa1tdOworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfY2xrW10gPSB7CisJeworCQkuaWQgPSAwLAorCQkucGFyZW50ID0gJm1wbGxfY2xrLAorCQkuc2Vjb25kYXJ5ID0gJnNzaV9pcGdfY2xrWzBdLAorCQkuZ2V0X3JhdGUgPSBfY2xrX3NzaTFfcmVjYWxjLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfU1NJMV9CQVVEX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1NTSTFfQkFVRF9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0sIHsKKwkJLmlkID0gMSwKKwkJLnBhcmVudCA9ICZtcGxsX2NsaywKKwkJLnNlY29uZGFyeSA9ICZzc2lfaXBnX2Nsa1sxXSwKKwkJLmdldF9yYXRlID0gX2Nsa19zc2kyX3JlY2FsYywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1NTSTJfQkFVRF9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9TU0kyX0JBVURfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX2lwZ19jbGtbXSA9IHsKKwl7CisJCS5pZCA9IDAsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1NTSTFfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfU1NJMV9JUEdfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LCB7CisJCS5pZCA9IDEsCisJCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1NTSTJfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfU1NJMl9JUEdfT0ZGU0VULAorCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKwl9LAorfTsKKworCitzdGF0aWMgc3RydWN0IGNsayBuZmNfY2xrID0geworCS5wYXJlbnQgPSAmZmNsa19jbGssCisJLmdldF9yYXRlID0gX2Nsa19uZmNfcmVjYWxjLAorCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX05GQ19SRUcsCisJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX05GQ19PRkZTRVQsCisJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJmhjbGtfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfRE1BX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0RNQV9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCQkuc2Vjb25kYXJ5ID0gJmRtYV9jbGtbMV0sCisJfSwgIHsKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0hDTEtfRE1BX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0hDTEtfRE1BX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGJyb21fY2xrID0geworCS5wYXJlbnQgPSAmaGNsa19jbGssCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSENMS19CUk9NX1JFRywKKwkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfSENMS19CUk9NX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtbWFfY2xrW10gPSB7CisJeworCQkucGFyZW50ID0gJmhjbGtfY2xrLAorCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfRU1NQV9SRUcsCisJCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9FTU1BX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJCS5zZWNvbmRhcnkgPSAmZW1tYV9jbGtbMV0sCisJfSwgeworCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSENMS19FTU1BX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0hDTEtfRU1NQV9PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNsY2RjX2Nsa1tdID0geworCXsKKwkJLnBhcmVudCA9ICZoY2xrX2NsaywKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX1NMQ0RDX1JFRywKKwkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX1NMQ0RDX09GRlNFVCwKKwkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCisJCS5zZWNvbmRhcnkgPSAmc2xjZGNfY2xrWzFdLAorCX0sIHsKKwkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0hDTEtfU0xDRENfUkVHLAorCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfSENMS19TTENEQ19PRkZTRVQsCisJCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkb2dfY2xrID0geworCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9XRFRfUkVHLAorCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9XRFRfT0ZGU0VULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb19jbGsgPSB7CisJLnBhcmVudCA9ICZpcGdfY2xrLAorCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKKwkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSX0dQSU9fUkVHLAorCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9HUElPX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyY19jbGsgPSB7CisJLmlkID0gMCwKKwkucGFyZW50ID0gJmlwZ19jbGssCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfSTJDMV9SRUcsCisJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSX0kyQzFfT0ZGU0VULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsga3BwX2NsayA9IHsKKwkucGFyZW50ID0gJmlwZ19jbGssCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfS1BQX1JFRywKKwkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1JfS1BQX09GRlNFVCwKKwkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG93aXJlX2NsayA9IHsKKwkucGFyZW50ID0gJmlwZ19jbGssCisJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAorCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1JfT1dJUkVfUkVHLAorCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9PV0lSRV9PRkZTRVQsCisJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBydGNfY2xrID0geworCS5wYXJlbnQgPSAmaXBnX2NsaywKKwkuZW5hYmxlID0gX2Nsa19lbmFibGUsCisJLmVuYWJsZV9yZWcgPSBDQ01fUENDUl9SVENfUkVHLAorCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUl9SVENfT0ZGU0VULAorCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19jbGtvX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKwlpZiAocGFyZW50X3JhdGUgJSByYXRlKQorCQlkaXYrKzsKKworCWlmIChkaXYgPiA4KQorCQlkaXYgPSA4OworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OworfQorCitzdGF0aWMgaW50IF9jbGtfY2xrb19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgcmVnOworCXUzMiBkaXY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWlmIChkaXYgPiA4IHx8IGRpdiA8IDEgfHwgKChwYXJlbnRfcmF0ZSAvIGRpdikgIT0gcmF0ZSkpCisJCXJldHVybiAtRUlOVkFMOworCWRpdi0tOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIwKTsKKworCWlmIChjbGstPnBhcmVudCA9PSAmdXNiX2Nsa1swXSkgeworCQlyZWcgJj0gfkNDTV9QQ0RSMF80OE1ESVZfTUFTSzsKKwkJcmVnIHw9IGRpdiA8PCBDQ01fUENEUjBfNDhNRElWX09GRlNFVDsKKwl9CisJX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDRFIwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2Nsa29fcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgZGl2ID0gMDsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKGNsay0+cGFyZW50ID09ICZ1c2JfY2xrWzBdKSAvKiA0OE0gKi8KKwkJZGl2ID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSAmIENDTV9QQ0RSMF80OE1ESVZfTUFTSworCQkJID4+IENDTV9QQ0RSMF80OE1ESVZfT0ZGU0VUOworCWRpdisrOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OworfQorCitzdGF0aWMgc3RydWN0IGNsayBjbGtvX2NsazsKKworc3RhdGljIGludCBfY2xrX2Nsa29fc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NDU1IpICYgfkNDTV9DQ1NSX0NMS09TRUxfTUFTSzsKKworCWlmIChwYXJlbnQgPT0gJmNraWxfY2xrKQorCQlyZWcgfD0gMCA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmZwbV9jbGspCisJCXJlZyB8PSAxIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2tpaF9jbGspCisJCXJlZyB8PSAyIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSBtcGxsX2Nsay5wYXJlbnQpCisJCXJlZyB8PSAzIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSBzcGxsX2Nsay5wYXJlbnQpCisJCXJlZyB8PSA0IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmbXBsbF9jbGspCisJCXJlZyB8PSA1IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmc3BsbF9jbGspCisJCXJlZyB8PSA2IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmZmNsa19jbGspCisJCXJlZyB8PSA3IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmaGNsa19jbGspCisJCXJlZyB8PSA4IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmaXBnX2NsaykKKwkJcmVnIHw9IDkgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZwZXJfY2xrWzBdKQorCQlyZWcgfD0gMHhBIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmcGVyX2Nsa1sxXSkKKwkJcmVnIHw9IDB4QiA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJnBlcl9jbGtbMl0pCisJCXJlZyB8PSAweEMgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZwZXJfY2xrWzNdKQorCQlyZWcgfD0gMHhEIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmc3NpX2Nsa1swXSkKKwkJcmVnIHw9IDB4RSA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJnNzaV9jbGtbMV0pCisJCXJlZyB8PSAweEYgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7CisJZWxzZSBpZiAocGFyZW50ID09ICZuZmNfY2xrKQorCQlyZWcgfD0gMHgxMCA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJnVzYl9jbGtbMF0pCisJCXJlZyB8PSAweDE0IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrb19jbGspCisJCXJlZyB8PSAweDE1IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ0NTUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrb19jbGsgPSB7CisJLmdldF9yYXRlID0gX2Nsa19jbGtvX3JlY2FsYywKKwkuc2V0X3JhdGUgPSBfY2xrX2Nsa29fc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUgPSBfY2xrX2Nsa29fcm91bmRfcmF0ZSwKKwkuc2V0X3BhcmVudCA9IF9jbGtfY2xrb19zZXRfcGFyZW50LAorfTsKKworCisjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKSBcCisJeyBcCisJCS5kZXZfaWQgPSBkLCBcCisJCS5jb25faWQgPSBuLCBcCisJCS5jbGsgPSAmYywgXAorCX0sCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdIF9faW5pdGRhdGEgPSB7CisvKiBJdCdzIHVubGlrZWx5IHRoYXQgYW55IGRyaXZlciB3YW50cyBvbmUgb2YgdGhlbSBkaXJlY3RseToKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNraWgiLCBja2loX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNraWwiLCBja2lsX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImZwbSIsIGZwbV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtcGxsIiwgbXBsbF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzcGxsIiwgc3BsbF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJmY2xrIiwgZmNsa19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJoY2xrIiwgaGNsa19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpcGciLCBpcGdfY2xrKQorKi8KKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInBlcmNsazEiLCBwZXJfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicGVyY2xrMiIsIHBlcl9jbGtbMV0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJwZXJjbGszIiwgcGVyX2Nsa1syXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInBlcmNsazQiLCBwZXJfY2xrWzNdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY2xrbyIsIGNsa29fY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMCIsIE5VTEwsIHVhcnRfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMSIsIE5VTEwsIHVhcnRfY2xrWzFdKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnRfY2xrWzJdKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMyIsIE5VTEwsIHVhcnRfY2xrWzNdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0MSIsIGdwdF9jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQxIiwgZ3B0X2Nsa1sxXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdDEiLCBncHRfY2xrWzJdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicHdtIiwgcHdtX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNkaGMxIiwgc2RoY19jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzZGhjMiIsIHNkaGNfY2xrWzFdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTEiLCBjc3BpX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkyIiwgY3NwaV9jbGtbMV0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMyIsIGNzcGlfY2xrWzJdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibGNkYyIsIGxjZGNfY2xrWzBdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NpIiwgY3NpX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInVzYiIsIHVzYl9jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzc2kxIiwgc3NpX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaTIiLCBzc2lfY2xrWzFdKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibmZjIiwgbmZjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImRtYSIsIGRtYV9jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJicm9tIiwgYnJvbV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbW1hIiwgZW1tYV9jbGtbMF0pCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzbGNkYyIsIHNsY2RjX2Nsa1swXSkKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIndkb2ciLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImkyYyIsIGkyY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGMta2V5cGFkIiwgTlVMTCwga3BwX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm93aXJlIiwgb3dpcmVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKK307CisKKy8qCisgKiBtdXN0IGJlIGNhbGxlZCB2ZXJ5IGVhcmx5IHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAqIGF2YWlsYWJsZSBjbG9jayByYXRlIHdoZW4gdGhlIHRpbWVyIGZyYW1ld29yayBzdGFydHMKKyAqLworaW50IF9faW5pdCBteDIxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgbHJlZiwgdW5zaWduZWQgbG9uZyBocmVmKQoreworCWludCBpOworCXUzMiBjc2NyOworCisJZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSA9IGxyZWY7CisJZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2UgPSBocmVmOworCisJLyogZGV0ZWN0IGNsb2NrIHJlZmVyZW5jZSBmb3IgYm90aCBzeXN0ZW0gUExMICovCisJY3NjciA9IENTQ1IoKTsKKwlpZiAoY3NjciAmIENDTV9DU0NSX01DVSkKKwkJbXBsbF9jbGsucGFyZW50ID0gJmNraWhfY2xrOworCWVsc2UKKwkJbXBsbF9jbGsucGFyZW50ID0gJmZwbV9jbGs7CisKKwlpZiAoY3NjciAmIENDTV9DU0NSX1NQKQorCQlzcGxsX2Nsay5wYXJlbnQgPSAmY2tpaF9jbGs7CisJZWxzZQorCQlzcGxsX2Nsay5wYXJlbnQgPSAmZnBtX2NsazsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCisJLyogVHVybiBvZmYgYWxsIGNsb2NrIGdhdGVzICovCisJX19yYXdfd3JpdGVsKDAsIENDTV9QQ0NSMCk7CisJX19yYXdfd3JpdGVsKENDTV9QQ0NSX0dQVDFfTUFTSywgQ0NNX1BDQ1IxKTsKKworCS8qIFRoaXMgdHVybnMgb2YgdGhlIHNlcmlhbCBQTEwgYXMgd2VsbCAqLworCXNwbGxfY2xrLmRpc2FibGUoJnNwbGxfY2xrKTsKKworCS8qIFRoaXMgd2lsbCBwcm9wYWdhdGUgdG8gYWxsIGNoaWxkcmVuIGFuZCBpbml0IGFsbCB0aGUgY2xvY2sgcmF0ZXMuICovCisJY2xrX2VuYWJsZSgmcGVyX2Nsa1swXSk7CisJY2xrX2VuYWJsZSgmZ3Bpb19jbGspOworCisjaWZkZWYgQ09ORklHX0RFQlVHX0xMX0NPTlNPTEUKKwljbGtfZW5hYmxlKCZ1YXJ0X2Nsa1swXSk7CisjZW5kaWYKKworCW14Y190aW1lcl9pbml0KCZncHRfY2xrWzBdKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCmluZGV4IGM2OTg5NmQuLjNmNzI4MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAwNC0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwOCBKdWVyZ2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICogQ29weXJpZ2h0IDIwMDggTWFydGluIEZ1enpleSwgbWZ1enpleUBnbWFpbC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMjAsMjMgKzIxLDYwIEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jaW5jbHVkZSAiY3JtX3JlZ3MuaCIKKy8qIFJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgQ0NNX0NTQ1IgICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDApCisjZGVmaW5lIENDTV9NUENUTDAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHg0KQorI2RlZmluZSBDQ01fTVBDVEwxICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4OCkKKyNkZWZpbmUgQ0NNX1NQQ1RMMCAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweEMpCisjZGVmaW5lIENDTV9TUENUTDEgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgxMCkKKyNkZWZpbmUgQ0NNX09TQzI2TUNUTCAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDE0KQorI2RlZmluZSBDQ01fUENEUjAgICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MTgpCisjZGVmaW5lIENDTV9QQ0RSMSAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgxYykKKyNkZWZpbmUgQ0NNX1BDQ1IwICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDIwKQorI2RlZmluZSBDQ01fUENDUjEgICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MjQpCisjZGVmaW5lIENDTV9DQ1NSICAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgyOCkKKyNkZWZpbmUgQ0NNX1BNQ1RMICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDJjKQorI2RlZmluZSBDQ01fUE1DT1VOVCAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MzApCisjZGVmaW5lIENDTV9XS0dEQ1RMICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgzNCkKIAotc3RhdGljIHN0cnVjdCBjbGsgY2tpbF9jbGs7Ci1zdGF0aWMgc3RydWN0IGNsayBtcGxsX2NsazsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbl9jbGtbXTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwbGxfY2xrOworI2RlZmluZSBDQ01fQ1NDUl9VUERBVEVfRElTCSgxIDw8IDMxKQorI2RlZmluZSBDQ01fQ1NDUl9TU0kyCQkoMSA8PCAyMykKKyNkZWZpbmUgQ0NNX0NTQ1JfU1NJMQkJKDEgPDwgMjIpCisjZGVmaW5lIENDTV9DU0NSX1ZQVQkJKDEgPDwgMjEpCisjZGVmaW5lIENDTV9DU0NSX01TSEMgICAgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSBDQ01fQ1NDUl9TUExMUkVTICAgICAgICAoMSA8PCAxOSkKKyNkZWZpbmUgQ0NNX0NTQ1JfTVBMTFJFUyAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIENDTV9DU0NSX1NQICAgICAgICAgICAgICgxIDw8IDE3KQorI2RlZmluZSBDQ01fQ1NDUl9NQ1UgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgQ0NNX0NTQ1JfT1NDMjZNRElWICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgQ0NNX0NTQ1JfT1NDMjZNICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgQ0NNX0NTQ1JfRlBNICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgQ0NNX0NTQ1JfU1BFTiAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgQ0NNX0NTQ1JfTVBFTiAgICAgICAgICAgKDEgPDwgMCkKIAotc3RhdGljIGludCBfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCisvKiBpLk1YMjcgVE8gMisgKi8KKyNkZWZpbmUgQ0NNX0NTQ1JfQVJNX1NSQyAgICAgICAgKDEgPDwgMTUpCisKKyNkZWZpbmUgQ0NNX1NQQ1RMMV9MRiAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIENDTV9TUENUTDFfQlJNTyAgICAgICAgICgxIDw8IDYpCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbjFfY2xrLCBtcGxsX21haW4yX2NsazsKKworc3RhdGljIGludCBjbGtfcGNjcl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgcmVnOwogCisJaWYgKCFjbGstPmVuYWJsZV9yZWcpCisJCXJldHVybiAwOworCiAJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAlyZWcgfD0gMSA8PCBjbGstPmVuYWJsZV9zaGlmdDsKIAlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOwpAQCAtNDQsMTYgKzgyLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdm9pZCBjbGtfcGNjcl9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIHJlZzsKIAorCWlmICghY2xrLT5lbmFibGVfcmVnKQorCQlyZXR1cm47CisKIAlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCXJlZyAmPSB+KDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpOwogCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CiB9CiAKLXN0YXRpYyBpbnQgX2Nsa19zcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgaW50IGNsa19zcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyByZWc7CiAKQEAgLTYxLDEzICsxMDIsMTIgQEAKIAlyZWcgfD0gQ0NNX0NTQ1JfU1BFTjsKIAlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ1NDUik7CiAKLQl3aGlsZSAoKF9fcmF3X3JlYWRsKENDTV9TUENUTDEpICYgQ0NNX1NQQ1RMMV9MRikgPT0gMCkKLQkJOworCXdoaWxlICghKF9fcmF3X3JlYWRsKENDTV9TUENUTDEpICYgQ0NNX1NQQ1RMMV9MRikpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9jbGtfc3BsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB2b2lkIGNsa19zcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgcmVnOwogCkBAIC03NiwxOTIgKzExNiwzMCBAQAogCV9fcmF3X3dyaXRlbChyZWcsIENDTV9DU0NSKTsKIH0KIAotc3RhdGljIHZvaWQgX2Nsa19wY2NyMDFfZW5hYmxlKHVuc2lnbmVkIGxvbmcgbWFzazAsIHVuc2lnbmVkIGxvbmcgbWFzazEpCitzdGF0aWMgaW50IGNsa19jcHVfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKIHsKLQl1bnNpZ25lZCBsb25nIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0NSMCk7Ci0JcmVnIHw9IG1hc2swOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMCk7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENDUjEpOwotCXJlZyB8PSBtYXNrMTsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENDUjEpOwotCi19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfcGNjcjAxX2Rpc2FibGUodW5zaWduZWQgbG9uZyBtYXNrMCwgdW5zaWduZWQgbG9uZyBtYXNrMSkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0NSMCk7Ci0JcmVnICY9IH5tYXNrMDsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENDUjApOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDQ1IxKTsKLQlyZWcgJj0gfm1hc2sxOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfcGNjcjEwX2VuYWJsZSh1bnNpZ25lZCBsb25nIG1hc2sxLCB1bnNpZ25lZCBsb25nIG1hc2swKQotewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDQ1IxKTsKLQlyZWcgfD0gbWFzazE7Ci0JX19yYXdfd3JpdGVsKHJlZywgQ0NNX1BDQ1IxKTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0NSMCk7Ci0JcmVnIHw9IG1hc2swOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfcGNjcjEwX2Rpc2FibGUodW5zaWduZWQgbG9uZyBtYXNrMSwgdW5zaWduZWQgbG9uZyBtYXNrMCkKLXsKLQl1bnNpZ25lZCBsb25nIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0NSMSk7Ci0JcmVnICY9IH5tYXNrMTsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENDUjEpOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDQ1IwKTsKLQlyZWcgJj0gfm1hc2swOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMCk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19kbWFfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9lbmFibGUoQ0NNX1BDQ1IwX0RNQV9NQVNLLCBDQ01fUENDUjFfSENMS19ETUFfTUFTSyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19kbWFfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX2Nsa19wY2NyMDFfZGlzYWJsZShDQ01fUENDUjBfRE1BX01BU0ssIENDTV9QQ0NSMV9IQ0xLX0RNQV9NQVNLKTsKLX0KLQotc3RhdGljIGludCBfY2xrX3J0aWNfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9lbmFibGUoQ0NNX1BDQ1IwX1JUSUNfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfUlRJQ19NQVNLKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfY2xrX3J0aWNfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX2Nsa19wY2NyMDFfZGlzYWJsZShDQ01fUENDUjBfUlRJQ19NQVNLLCBDQ01fUENDUjFfSENMS19SVElDX01BU0spOwotfQotCi1zdGF0aWMgaW50IF9jbGtfZW1tYV9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2VuYWJsZShDQ01fUENDUjBfRU1NQV9NQVNLLCBDQ01fUENDUjFfSENMS19FTU1BX01BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfZW1tYV9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9kaXNhYmxlKENDTV9QQ0NSMF9FTU1BX01BU0ssIENDTV9QQ0NSMV9IQ0xLX0VNTUFfTUFTSyk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19zbGNkY19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2VuYWJsZShDQ01fUENDUjBfU0xDRENfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfU0xDRENfTUFTSyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19zbGNkY19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9kaXNhYmxlKENDTV9QQ0NSMF9TTENEQ19NQVNLLCBDQ01fUENDUjFfSENMS19TTENEQ19NQVNLKTsKLX0KLQotc3RhdGljIGludCBfY2xrX2ZlY19lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjAxX2VuYWJsZShDQ01fUENDUjBfRkVDX01BU0ssIENDTV9QQ0NSMV9IQ0xLX0ZFQ19NQVNLKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfY2xrX2ZlY19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9kaXNhYmxlKENDTV9QQ0NSMF9GRUNfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfRkVDX01BU0spOwotfQotCi1zdGF0aWMgaW50IF9jbGtfdnB1X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENDUjEpOwotCXJlZyB8PSBDQ01fUENDUjFfVlBVX0JBVURfTUFTSyB8IENDTV9QQ0NSMV9IQ0xLX1ZQVV9NQVNLOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa192cHVfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENDUjEpOwotCXJlZyAmPSB+KENDTV9QQ0NSMV9WUFVfQkFVRF9NQVNLIHwgQ0NNX1BDQ1IxX0hDTEtfVlBVX01BU0spOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0NSMSk7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19zYWhhcmEyX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JX2Nsa19wY2NyMDFfZW5hYmxlKENDTV9QQ0NSMF9TQUhBUkFfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfU0FIQVJBX01BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfc2FoYXJhMl9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IwMV9kaXNhYmxlKENDTV9QQ0NSMF9TQUhBUkFfTUFTSywgQ0NNX1BDQ1IxX0hDTEtfU0FIQVJBX01BU0spOwotfQotCi1zdGF0aWMgaW50IF9jbGtfbXN0aWNrMV9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9jbGtfcGNjcjEwX2VuYWJsZShDQ01fUENDUjFfTVNIQ19CQVVEX01BU0ssIENDTV9QQ0NSMF9NU0hDX01BU0spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9jbGtfbXN0aWNrMV9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlfY2xrX3BjY3IxMF9kaXNhYmxlKENDTV9QQ0NSMV9NU0hDX0JBVURfTUFTSywgQ0NNX1BDQ1IwX01TSENfTUFTSyk7Ci19Ci0KLSNkZWZpbmUgQ1NDUigpIChfX3Jhd19yZWFkbChDQ01fQ1NDUikpCi0jZGVmaW5lIFBDRFIwKCkgKF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkpCi0jZGVmaW5lIFBDRFIxKCkgKF9fcmF3X3JlYWRsKENDTV9QQ0RSMSkpCi0KLXN0YXRpYyBpbnQgX2Nsa19jcHVfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQlpbnQgY3NjciA9IENTQ1IoKTsKKwlpbnQgY3NjciA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKIAogCWlmIChjbGstPnBhcmVudCA9PSBwYXJlbnQpCiAJCXJldHVybiAwOwogCiAJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKLQkJaWYgKHBhcmVudCA9PSAmbXBsbF9tYWluX2Nsa1swXSkgeworCQlpZiAocGFyZW50ID09ICZtcGxsX21haW4xX2NsaykgewogCQkJY3NjciB8PSBDQ01fQ1NDUl9BUk1fU1JDOwogCQl9IGVsc2UgewotCQkJaWYgKHBhcmVudCA9PSAmbXBsbF9tYWluX2Nsa1sxXSkKKwkJCWlmIChwYXJlbnQgPT0gJm1wbGxfbWFpbjJfY2xrKQogCQkJCWNzY3IgJj0gfkNDTV9DU0NSX0FSTV9TUkM7CiAJCQllbHNlCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJX19yYXdfd3JpdGVsKGNzY3IsIENDTV9DU0NSKTsKLQl9IGVsc2UKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQljbGstPnBhcmVudCA9IHBhcmVudDsKLQlyZXR1cm4gMDsKKwkJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19jcHVfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX3JhdGVfY3B1KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCWludCBkaXY7CiAJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKQEAgLTI3OCw3ICsxNTYsNyBAQAogCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKIH0KIAotc3RhdGljIGludCBfY2xrX2NwdV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3N0YXRpYyBpbnQgc2V0X3JhdGVfY3B1KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXVuc2lnbmVkIGludCBkaXY7CiAJdWludDMyX3QgcmVnOwpAQCAtMjk1LDE5ICsxNzMsMTggQEAKIAogCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKIAlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkgewotCQlyZWcgJj0gfkNDTV9DU0NSX0FSTV9NQVNLOwotCQlyZWcgfD0gZGl2IDw8IENDTV9DU0NSX0FSTV9PRkZTRVQ7Ci0JCXJlZyAmPSB+MHgwNjsKLQkJX19yYXdfd3JpdGVsKHJlZyB8IDB4ODAwMDAwMDAsIENDTV9DU0NSKTsKKwkJcmVnICY9IH4oMyA8PCAxMik7CisJCXJlZyB8PSBkaXYgPDwgMTI7CisJCXJlZyAmPSB+KENDTV9DU0NSX0ZQTSB8IENDTV9DU0NSX1NQRU4pOworCQlfX3Jhd193cml0ZWwocmVnIHwgQ0NNX0NTQ1JfVVBEQVRFX0RJUywgQ0NNX0NTQ1IpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ2FudCBzZXQgQ1BVIGZyZXF1ZW5jeSFcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IHNldCBDUFUgZnJlcXVlbmN5IVxuIik7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfcGVyY2xreF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIHJhdGUpCitzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9yYXRlX3BlcihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAl1MzIgZGl2OwogCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CkBAIC0zMjQsNyArMjAxLDcgQEAKIAlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7CiB9CiAKLXN0YXRpYyBpbnQgX2Nsa19wZXJjbGt4X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIGludCBzZXRfcmF0ZV9wZXIoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJdTMyIHJlZzsKIAl1MzIgZGl2OwpAQCAtMzQwLDg0ICsyMTcsNjUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGl2LS07CiAKLQlyZWcgPQotCSAgICBfX3Jhd19yZWFkbChDQ01fUENEUjEpICYgfihDQ01fUENEUjFfUEVSRElWMV9NQVNLIDw8Ci0JCQkJICAgICAgIChjbGstPmlkIDw8IDMpKTsKKwlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENEUjEpICYgfigweDNmIDw8IChjbGstPmlkIDw8IDMpKTsKIAlyZWcgfD0gZGl2IDw8IChjbGstPmlkIDw8IDMpOwogCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0RSMSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa191c2JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3VzYihzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyB1c2JfcGRmOwogCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CiAKIAlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAKLQl1c2JfcGRmID0gKENTQ1IoKSAmIENDTV9DU0NSX1VTQl9NQVNLKSA+PiBDQ01fQ1NDUl9VU0JfT0ZGU0VUOworCXVzYl9wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX0NTQ1IpID4+IDI4KSAmIDB4NzsKIAogCXJldHVybiBwYXJlbnRfcmF0ZSAvICh1c2JfcGRmICsgMVUpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3NzaTFfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3NzaXgoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHBkZikKIHsKLQl1bnNpZ25lZCBsb25nIHNzaTFfcGRmOwogCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CiAKIAlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAKLQlzc2kxX3BkZiA9IChQQ0RSMCgpICYgQ0NNX1BDRFIwX1NTSTFCQVVERElWX01BU0spID4+Ci0JCQkJCUNDTV9QQ0RSMF9TU0kxQkFVRERJVl9PRkZTRVQ7Ci0KIAlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkKLQkJc3NpMV9wZGYgKz0gNDsKKwkJcGRmICs9IDQ7ICAvKiBNWDI3IFRPMisgKi8KIAllbHNlCi0JCXNzaTFfcGRmID0gKHNzaTFfcGRmIDwgMikgPyAxMjRVTCA6IHNzaTFfcGRmOworCQlwZGYgPSAocGRmIDwgMikgPyAxMjRVTCA6IHBkZjsgIC8qIE1YMjEgJiBNWDI3IFRPMSAqLwogCi0JcmV0dXJuIDJVTCAqIHBhcmVudF9yYXRlIC8gc3NpMV9wZGY7CisJcmV0dXJuIDJVTCAqIHBhcmVudF9yYXRlIC8gcGRmOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3NzaTJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3NzaTEoc3RydWN0IGNsayAqY2xrKQogewotCXVuc2lnbmVkIGxvbmcgc3NpMl9wZGY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXNzaTJfcGRmID0gKFBDRFIwKCkgJiBDQ01fUENEUjBfU1NJMkJBVURESVZfTUFTSykgPj4KLQkgICAgQ0NNX1BDRFIwX1NTSTJCQVVERElWX09GRlNFVDsKLQotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQotCQlzc2kyX3BkZiArPSA0OwotCWVsc2UKLQkJc3NpMl9wZGYgPSAoc3NpMl9wZGYgPCAyKSA/IDEyNFVMIDogc3NpMl9wZGY7Ci0KLQlyZXR1cm4gMlVMICogcGFyZW50X3JhdGUgLyBzc2kyX3BkZjsKKwlyZXR1cm4gZ2V0X3JhdGVfc3NpeChjbGssIChfX3Jhd19yZWFkbChDQ01fUENEUjApID4+IDE2KSAmIDB4M2YpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX25mY19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfc3NpMihzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGdldF9yYXRlX3NzaXgoY2xrLCAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiAyNikgJiAweDNmKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfbmZjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIG5mY19wZGY7CiAJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKIAogCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKIAotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKSB7Ci0JCW5mY19wZGYgPQotCQkgICAgKFBDRFIwKCkgJiBDQ01fUENEUjBfTkZDRElWMl9NQVNLKSA+PgotCQkgICAgQ0NNX1BDRFIwX05GQ0RJVjJfT0ZGU0VUOwotCX0gZWxzZSB7Ci0JCW5mY19wZGYgPQotCQkgICAgKFBDRFIwKCkgJiBDQ01fUENEUjBfTkZDRElWX01BU0spID4+Ci0JCSAgICBDQ01fUENEUjBfTkZDRElWX09GRlNFVDsKLQl9CisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCisJCW5mY19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiA2KSAmIDB4ZjsKKwllbHNlCisJCW5mY19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiAxMikgJiAweGY7CiAKIAlyZXR1cm4gcGFyZW50X3JhdGUgLyAobmZjX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3ZwdV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfdnB1KHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIHZwdV9wZGY7CiAJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKQEAgLTQyNSwyNSArMjgzLDI3IEBACiAJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwogCiAJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApIHsKLQkJdnB1X3BkZiA9Ci0JCSAgICAoUENEUjAoKSAmIENDTV9QQ0RSMF9WUFVESVYyX01BU0spID4+Ci0JCSAgICBDQ01fUENEUjBfVlBVRElWMl9PRkZTRVQ7CisJCXZwdV9wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSA+PiAxMCkgJiAweDNmOwogCQl2cHVfcGRmICs9IDQ7CiAJfSBlbHNlIHsKLQkJdnB1X3BkZiA9Ci0JCSAgICAoUENEUjAoKSAmIENDTV9QQ0RSMF9WUFVESVZfTUFTSykgPj4KLQkJICAgIENDTV9QQ0RSMF9WUFVESVZfT0ZGU0VUOworCQl2cHVfcGRmID0gKF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkgPj4gOCkgJiAweGY7CiAJCXZwdV9wZGYgPSAodnB1X3BkZiA8IDIpID8gMTI0IDogdnB1X3BkZjsKIAl9CisKIAlyZXR1cm4gMlVMICogcGFyZW50X3JhdGUgLyB2cHVfcGRmOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3BhcmVudF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcm91bmRfcmF0ZV9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJcmV0dXJuIGNsay0+cGFyZW50LT5yb3VuZF9yYXRlKGNsay0+cGFyZW50LCByYXRlKTsKIH0KIAotc3RhdGljIGludCBfY2xrX3BhcmVudF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3JhdGVfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXJldHVybiBjbGstPnBhcmVudC0+c2V0X3JhdGUoY2xrLT5wYXJlbnQsIHJhdGUpOwogfQpAQCAtNDUxLDExMTIgKzMxMSwzODAgQEAKIC8qIGluIEh6ICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBleHRlcm5hbF9oaWdoX3JlZmVyZW5jZSA9IDI2MDAwMDAwOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9oaWdoX3JlZmVyZW5jZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlOwogfQogCisvKiBpbiBIeiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSA9IDMyNzY4OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9sb3dfcmVmZXJlbmNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZXh0ZXJuYWxfbG93X3JlZmVyZW5jZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfZnBtKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAqIDEwMjQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX21wbGwoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBteGNfZGVjb2RlX3BsbChfX3Jhd19yZWFkbChDQ01fTVBDVEwwKSwKKwkJCWNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9tcGxsX21haW4oc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwkvKiBpLk1YMjcgVE8yOgorCSAqIGNsay0+aWQgPT0gMDogYXJtIGNsb2NrIHNvdXJjZSBwYXRoIDEgd2hpY2ggaXMgZnJvbSAyICogTVBMTCAvIDIKKwkgKiBjbGstPmlkID09IDE6IGFybSBjbG9jayBzb3VyY2UgcGF0aCAyIHdoaWNoIGlzIGZyb20gMiAqIE1QTEwgLyAzCisJICovCisJaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzAgJiYgY2xrLT5pZCA9PSAxKQorCQlyZXR1cm4gMlVMICogcGFyZW50X3JhdGUgLyAzVUw7CisKKwlyZXR1cm4gcGFyZW50X3JhdGU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3NwbGwoc3RydWN0IGNsayAqY2xrKQoreworCXVpbnQzMl90IHJlZzsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9TUENUTDApOworCisJLyogT24gVE8yIHdlIGhhdmUgdG8gd3JpdGUgdGhlIHZhbHVlIGJhY2suIE90aGVyd2lzZSB3ZQorCSAqIHJlYWQgMCBmcm9tIHRoaXMgcmVnaXN0ZXIgdGhlIG5leHQgdGltZS4KKwkgKi8KKwlpZiAobXgyN19yZXZpc2lvbigpID49IENISVBfUkVWXzJfMCkKKwkJX19yYXdfd3JpdGVsKHJlZywgQ0NNX1NQQ1RMMCk7CisKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwocmVnLCByYXRlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfY3B1KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgZGl2OworCXVuc2lnbmVkIGxvbmcgcmF0ZTsKKworCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQorCQlkaXYgPSAoX19yYXdfcmVhZGwoQ0NNX0NTQ1IpID4+IDEyKSAmIDB4MzsKKwllbHNlCisJCWRpdiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gMTMpICYgMHg3OworCisJcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJcmV0dXJuIHJhdGUgLyAoZGl2ICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2FoYihzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlLCBiY2xrX3BkZjsKKworCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQorCQliY2xrX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gOCkgJiAweDM7CisJZWxzZQorCQliY2xrX3BkZiA9IChfX3Jhd19yZWFkbChDQ01fQ1NDUikgPj4gOSkgJiAweGY7CisKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwlyZXR1cm4gcmF0ZSAvIChiY2xrX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9pcGcoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZSwgaXBnX3BkZjsKKworCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQorCQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwllbHNlCisJCWlwZ19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX0NTQ1IpID4+IDgpICYgMTsKKworCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXJldHVybiByYXRlIC8gKGlwZ19wZGYgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfcGVyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBlcmNsa19wZGYsIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKGNsay0+aWQgPCAwIHx8IGNsay0+aWQgPiAzKQorCQlyZXR1cm4gMDsKKworCXBlcmNsa19wZGYgPSAoX19yYXdfcmVhZGwoQ0NNX1BDRFIxKSA+PiAoY2xrLT5pZCA8PCAzKSkgJiAweDNmOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKHBlcmNsa19wZGYgKyAxKTsKK30KKwogLyoKICAqIHRoZSBoaWdoIGZyZXF1ZW5jeSBleHRlcm5hbCBjbG9jayByZWZlcmVuY2UKICAqIERlZmF1bHQgY2FzZSBpcyAyNk1Iei4gQ291bGQgYmUgY2hhbmdlZCBhdCBydW50aW1lCiAgKiB3aXRoIGEgY2FsbCB0byBjaGFuZ2VfZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2UoKQogICovCiBzdGF0aWMgc3RydWN0IGNsayBja2loX2NsayA9IHsKLQkubmFtZSA9ICJja2loIiwKLQkuZ2V0X3JhdGUgPSBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZSwKKwkuZ2V0X3JhdGUJPSBnZXRfcmF0ZV9oaWdoX3JlZmVyZW5jZSwKIH07CiAKLS8qIGluIEh6ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBleHRlcm5hbF9sb3dfcmVmZXJlbmNlID0gMzI3Njg7CitzdGF0aWMgc3RydWN0IGNsayBtcGxsX2NsayA9IHsKKwkucGFyZW50CQk9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUJPSBnZXRfcmF0ZV9tcGxsLAorfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2xvd19yZWZlcmVuY2VfY2xvY2tfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGV4dGVybmFsX2xvd19yZWZlcmVuY2U7Ci19CisvKiBGb3IgaS5NWDI3IFRPMiwgaXQgaXMgdGhlIE1QTEwgcGF0aCAxIG9mIEFSTSBjb3JlCisgKiBJdCBwcm92aWRlcyB0aGUgY2xvY2sgc291cmNlIHdob3NlIHJhdGUgaXMgc2FtZSBhcyBNUExMCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wbGxfbWFpbjFfY2xrID0geworCS5pZAkJPSAwLAorCS5wYXJlbnQJCT0gJm1wbGxfY2xrLAorCS5nZXRfcmF0ZQk9IGdldF9yYXRlX21wbGxfbWFpbiwKK307CisKKy8qIEZvciBpLk1YMjcgVE8yLCBpdCBpcyB0aGUgTVBMTCBwYXRoIDIgb2YgQVJNIGNvcmUKKyAqIEl0IHByb3ZpZGVzIHRoZSBjbG9jayBzb3VyY2Ugd2hvc2UgcmF0ZSBpcyBzYW1lIE1QTEwgKiAyIC8gMworICovCitzdGF0aWMgc3RydWN0IGNsayBtcGxsX21haW4yX2NsayA9IHsKKwkuaWQJCT0gMSwKKwkucGFyZW50CQk9ICZtcGxsX2NsaywKKwkuZ2V0X3JhdGUJPSBnZXRfcmF0ZV9tcGxsX21haW4sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0geworCS5wYXJlbnQJCT0gJm1wbGxfbWFpbjJfY2xrLAorCS5nZXRfcmF0ZQk9IGdldF9yYXRlX2FoYiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGlwZ19jbGsgPSB7CisJLnBhcmVudAkJPSAmYWhiX2NsaywKKwkuZ2V0X3JhdGUJPSBnZXRfcmF0ZV9pcGcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjcHVfY2xrID0geworCS5wYXJlbnQgPSAmbXBsbF9tYWluMl9jbGssCisJLnNldF9wYXJlbnQgPSBjbGtfY3B1X3NldF9wYXJlbnQsCisJLnJvdW5kX3JhdGUgPSByb3VuZF9yYXRlX2NwdSwKKwkuZ2V0X3JhdGUgPSBnZXRfcmF0ZV9jcHUsCisJLnNldF9yYXRlID0gc2V0X3JhdGVfY3B1LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3BsbF9jbGsgPSB7CisJLnBhcmVudCA9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUgPSBnZXRfcmF0ZV9zcGxsLAorCS5lbmFibGUgPSBjbGtfc3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSBjbGtfc3BsbF9kaXNhYmxlLAorfTsKIAogLyoKICAqIHRoZSBsb3cgZnJlcXVlbmN5IGV4dGVybmFsIGNsb2NrIHJlZmVyZW5jZQotICogRGVmYXVsdCBjYXNlIGlzIDMyLjc2OGtIeiBDb3VsZCBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUKLSAqIHdpdGggYSBjYWxsIHRvIGNoYW5nZV9leHRlcm5hbF9sb3dfcmVmZXJlbmNlKCkKKyAqIERlZmF1bHQgY2FzZSBpcyAzMi43NjhrSHouCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNraWxfY2xrID0gewotCS5uYW1lID0gImNraWwiLAotCS5nZXRfcmF0ZSA9IGdldF9sb3dfcmVmZXJlbmNlX2Nsb2NrX3JhdGUsCisJLmdldF9yYXRlID0gZ2V0X3JhdGVfbG93X3JlZmVyZW5jZSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9tcGxsX2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdWludDMyX3QgcmVnOwotCXVuc2lnbmVkIGxvbmcgcmVmX2NsazsKLQl1bnNpZ25lZCBsb25nIG1maSA9IDAsIG1mbiA9IDAsIG1mZCA9IDAsIHBkZiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRlbXA7Ci0KLQlyZWZfY2xrID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9NUENUTDApOwotCXBkZiA9IChyZWcgJiBDQ01fTVBDVEwwX1BEX01BU0spID4+IENDTV9NUENUTDBfUERfT0ZGU0VUOwotCW1mZCA9IChyZWcgJiBDQ01fTVBDVEwwX01GRF9NQVNLKSA+PiBDQ01fTVBDVEwwX01GRF9PRkZTRVQ7Ci0JbWZpID0gKHJlZyAmIENDTV9NUENUTDBfTUZJX01BU0spID4+IENDTV9NUENUTDBfTUZJX09GRlNFVDsKLQltZm4gPSAocmVnICYgQ0NNX01QQ1RMMF9NRk5fTUFTSykgPj4gQ0NNX01QQ1RMMF9NRk5fT0ZGU0VUOwotCi0JbWZpID0gKG1maSA8PSA1KSA/IDUgOiBtZmk7Ci0JdGVtcCA9IDJMTCAqIHJlZl9jbGsgKiBtZm47Ci0JZG9fZGl2KHRlbXAsIG1mZCArIDEpOwotCXRlbXAgPSAyTEwgKiByZWZfY2xrICogbWZpICsgdGVtcDsKLQlkb19kaXYodGVtcCwgcGRmICsgMSk7Ci0KLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpdGVtcDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgbXBsbF9jbGsgPSB7Ci0JLm5hbWUgPSAibXBsbCIsCi0JLnBhcmVudCA9ICZja2loX2NsaywKLQkuZ2V0X3JhdGUgPSBnZXRfbXBsbF9jbGssCisvKiBPdXRwdXQgb2YgZnJlcXVlbmN5IHByZSBtdWx0aXBsaWVyICovCitzdGF0aWMgc3RydWN0IGNsayBmcG1fY2xrID0geworCS5wYXJlbnQgPSAmY2tpbF9jbGssCisJLmdldF9yYXRlID0gZ2V0X3JhdGVfZnBtLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19tcGxsX21haW5fZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisjZGVmaW5lIFBDQ1IwIENDTV9QQ0NSMAorI2RlZmluZSBQQ0NSMSBDQ01fUENDUjEKIAotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCS8qIGkuTVgyNyBUTzI6Ci0JICogY2xrLT5pZCA9PSAwOiBhcm0gY2xvY2sgc291cmNlIHBhdGggMSB3aGljaCBpcyBmcm9tIDIqTVBMTC9ESVZfMgotCSAqIGNsay0+aWQgPT0gMTogYXJtIGNsb2NrIHNvdXJjZSBwYXRoIDIgd2hpY2ggaXMgZnJvbSAyKk1QTEwvRElWXzMKLQkgKi8KLQotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wICYmIGNsay0+aWQgPT0gMSkKLQkJcmV0dXJuIDJVTCAqIHBhcmVudF9yYXRlIC8gM1VMOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBtcGxsX21haW5fY2xrW10gPSB7Ci0JewotCQkvKiBGb3IgaS5NWDI3IFRPMiwgaXQgaXMgdGhlIE1QTEwgcGF0aCAxIG9mIEFSTSBjb3JlCi0JCSAqIEl0IHByb3ZpZGUgdGhlIGNsb2NrIHNvdXJjZSB3aG9zZSByYXRlIGlzIHNhbWUgYXMgTVBMTAotCQkgKi8KLQkJLm5hbWUgPSAibXBsbF9tYWluIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZtcGxsX2NsaywKLQkJLmdldF9yYXRlID0gX2Nsa19tcGxsX21haW5fZ2V0X3JhdGUKLQl9LCB7Ci0JCS8qIEZvciBpLk1YMjcgVE8yLCBpdCBpcyB0aGUgTVBMTCBwYXRoIDIgb2YgQVJNIGNvcmUKLQkJICogSXQgcHJvdmlkZSB0aGUgY2xvY2sgc291cmNlIHdob3NlIHJhdGUgaXMgc2FtZSBNUExMICogMi8zCi0JCSAqLwotCQkubmFtZSA9ICJtcGxsX21haW4iLAotCQkuaWQgPSAxLAotCQkucGFyZW50ID0gJm1wbGxfY2xrLAotCQkuZ2V0X3JhdGUgPSBfY2xrX21wbGxfbWFpbl9nZXRfcmF0ZQorI2RlZmluZSBERUZJTkVfQ0xPQ0sobmFtZSwgaSwgZXIsIGVzLCBnciwgcywgcCkJCVwKKwlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCVwKKwkJLmlkCQk9IGksCQkJXAorCQkuZW5hYmxlX3JlZwk9IGVyLAkJCVwKKwkJLmVuYWJsZV9zaGlmdAk9IGVzLAkJCVwKKwkJLmdldF9yYXRlCT0gZ3IsCQkJXAorCQkuZW5hYmxlCQk9IGNsa19wY2NyX2VuYWJsZSwJXAorCQkuZGlzYWJsZQk9IGNsa19wY2NyX2Rpc2FibGUsCVwKKwkJLnNlY29uZGFyeQk9IHMsCQkJXAorCQkucGFyZW50CQk9IHAsCQkJXAogCX0KLX07CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9zcGxsX2NsayhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdWludDMyX3QgcmVnOwotCXVuc2lnbmVkIGxvbmcgcmVmX2NsazsKLQl1bnNpZ25lZCBsb25nIG1maSA9IDAsIG1mbiA9IDAsIG1mZCA9IDAsIHBkZiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRlbXA7Ci0KLQlyZWZfY2xrID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9TUENUTDApOwotCS8qVE9ETzogVGhpcyBpcyBUTzIgQnVnICovCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCV9fcmF3X3dyaXRlbChyZWcsIENDTV9TUENUTDApOwotCi0JcGRmID0gKHJlZyAmIENDTV9TUENUTDBfUERfTUFTSykgPj4gQ0NNX1NQQ1RMMF9QRF9PRkZTRVQ7Ci0JbWZkID0gKHJlZyAmIENDTV9TUENUTDBfTUZEX01BU0spID4+IENDTV9TUENUTDBfTUZEX09GRlNFVDsKLQltZmkgPSAocmVnICYgQ0NNX1NQQ1RMMF9NRklfTUFTSykgPj4gQ0NNX1NQQ1RMMF9NRklfT0ZGU0VUOwotCW1mbiA9IChyZWcgJiBDQ01fU1BDVEwwX01GTl9NQVNLKSA+PiBDQ01fU1BDVEwwX01GTl9PRkZTRVQ7Ci0KLQltZmkgPSAobWZpIDw9IDUpID8gNSA6IG1maTsKLQl0ZW1wID0gMkxMICogcmVmX2NsayAqIG1mbjsKLQlkb19kaXYodGVtcCwgbWZkICsgMSk7Ci0JdGVtcCA9IDJMTCAqIHJlZl9jbGsgKiBtZmkgKyB0ZW1wOwotCWRvX2Rpdih0ZW1wLCBwZGYgKyAxKTsKLQotCXJldHVybiAodW5zaWduZWQgbG9uZyl0ZW1wOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBzcGxsX2NsayA9IHsKLQkubmFtZSA9ICJzcGxsIiwKLQkucGFyZW50ID0gJmNraWhfY2xrLAotCS5nZXRfcmF0ZSA9IGdldF9zcGxsX2NsaywKLQkuZW5hYmxlID0gX2Nsa19zcGxsX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfc3BsbF9kaXNhYmxlLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2NwdV9jbGsoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBkaXY7Ci0JdW5zaWduZWQgbG9uZyByYXRlOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCWRpdiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9BUk1fTUFTSykgPj4gQ0NNX0NTQ1JfQVJNX09GRlNFVDsKLQllbHNlCi0JCWRpdiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9QUkVTQ19NQVNLKSA+PiBDQ01fQ1NDUl9QUkVTQ19PRkZTRVQ7Ci0KLQlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQlyZXR1cm4gcmF0ZSAvIChkaXYgKyAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY3B1X2NsayA9IHsKLQkubmFtZSA9ICJjcHVfY2xrIiwKLQkucGFyZW50ID0gJm1wbGxfbWFpbl9jbGtbMV0sCi0JLnNldF9wYXJlbnQgPSBfY2xrX2NwdV9zZXRfcGFyZW50LAotCS5yb3VuZF9yYXRlID0gX2Nsa19jcHVfcm91bmRfcmF0ZSwKLQkuZ2V0X3JhdGUgPSBnZXRfY3B1X2NsaywKLQkuc2V0X3JhdGUgPSBfY2xrX2NwdV9zZXRfcmF0ZSwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9haGJfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGU7Ci0JdW5zaWduZWQgbG9uZyBiY2xrX3BkZjsKLQotCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKQotCQliY2xrX3BkZiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9BSEJfTUFTSykKLQkJCQkJPj4gQ0NNX0NTQ1JfQUhCX09GRlNFVDsKLQllbHNlCi0JCWJjbGtfcGRmID0gKENTQ1IoKSAmIENDTV9DU0NSX0JDTEtfTUFTSykKLQkJCQkJPj4gQ0NNX0NTQ1JfQkNMS19PRkZTRVQ7Ci0KLQlyYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQlyZXR1cm4gcmF0ZSAvIChiY2xrX3BkZiArIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0gewotCS5uYW1lID0gImFoYl9jbGsiLAotCS5wYXJlbnQgPSAmbXBsbF9tYWluX2Nsa1sxXSwKLQkuZ2V0X3JhdGUgPSBnZXRfYWhiX2NsaywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9pcGdfY2xrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGU7Ci0JdW5zaWduZWQgbG9uZyBpcGdfcGRmOwotCi0JaWYgKG14MjdfcmV2aXNpb24oKSA+PSBDSElQX1JFVl8yXzApCi0JCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCWVsc2UKLQkJaXBnX3BkZiA9IChDU0NSKCkgJiBDQ01fQ1NDUl9JUERJVikgPj4gQ0NNX0NTQ1JfSVBESVZfT0ZGU0VUOwotCi0JcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JcmV0dXJuIHJhdGUgLyAoaXBnX3BkZiArIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBpcGdfY2xrID0gewotCS5uYW1lID0gImlwZ19jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZ2V0X3JhdGUgPSBnZXRfaXBnX2NsaywKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfcGVyY2xreF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGVyY2xrX3BkZjsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCi0JcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JaWYgKGNsay0+aWQgPCAwIHx8IGNsay0+aWQgPiAzKQotCQlyZXR1cm4gMDsKLQotCXBlcmNsa19wZGYgPSAoUENEUjEoKSA+PiAoY2xrLT5pZCA8PCAzKSkgJiBDQ01fUENEUjFfUEVSRElWMV9NQVNLOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gKHBlcmNsa19wZGYgKyAxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgcGVyX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAicGVyX2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmbXBsbF9tYWluX2Nsa1sxXSwKLQkJLmdldF9yYXRlID0gX2Nsa19wZXJjbGt4X3JlY2FsYywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9QRVJDTEsxX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwgewotCQkubmFtZSA9ICJwZXJfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZtcGxsX21haW5fY2xrWzFdLAotCQkuZ2V0X3JhdGUgPSBfY2xrX3BlcmNsa3hfcmVjYWxjLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1BFUkNMSzJfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LCB7Ci0JCS5uYW1lID0gInBlcl9jbGsiLAotCQkuaWQgPSAyLAotCQkucGFyZW50ID0gJm1wbGxfbWFpbl9jbGtbMV0sCi0JCS5yb3VuZF9yYXRlID0gX2Nsa19wZXJjbGt4X3JvdW5kX3JhdGUsCi0JCS5zZXRfcmF0ZSA9IF9jbGtfcGVyY2xreF9zZXRfcmF0ZSwKLQkJLmdldF9yYXRlID0gX2Nsa19wZXJjbGt4X3JlY2FsYywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9QRVJDTEszX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwgewotCQkubmFtZSA9ICJwZXJfY2xrIiwKLQkJLmlkID0gMywKLQkJLnBhcmVudCA9ICZtcGxsX21haW5fY2xrWzFdLAotCQkucm91bmRfcmF0ZSA9IF9jbGtfcGVyY2xreF9yb3VuZF9yYXRlLAotCQkuc2V0X3JhdGUgPSBfY2xrX3BlcmNsa3hfc2V0X3JhdGUsCi0JCS5nZXRfcmF0ZSA9IF9jbGtfcGVyY2xreF9yZWNhbGMsCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfUEVSQ0xLNF9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdHJ1Y3QgY2xrIHVhcnQxX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAidWFydF9jbGsiLAotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmdWFydDFfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAidWFydF9pcGdfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1VBUlQxX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0cnVjdCBjbGsgdWFydDJfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJ1YXJ0X2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZ1YXJ0Ml9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJ1YXJ0X2lwZ19jbGsiLAotCQkuaWQgPSAxLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfVUFSVDJfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RydWN0IGNsayB1YXJ0M19jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInVhcnRfY2xrIiwKLQkJLmlkID0gMiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJnVhcnQzX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInVhcnRfaXBnX2NsayIsCi0JCS5pZCA9IDIsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9VQVJUM19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdHJ1Y3QgY2xrIHVhcnQ0X2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAidWFydF9jbGsiLAotCQkuaWQgPSAzLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmdWFydDRfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAidWFydF9pcGdfY2xrIiwKLQkJLmlkID0gMywKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1VBUlQ0X09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0cnVjdCBjbGsgdWFydDVfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJ1YXJ0X2NsayIsCi0JCS5pZCA9IDQsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZ1YXJ0NV9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJ1YXJ0X2lwZ19jbGsiLAotCQkuaWQgPSA0LAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfVUFSVDVfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RydWN0IGNsayB1YXJ0Nl9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInVhcnRfY2xrIiwKLQkJLmlkID0gNSwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJnVhcnQ2X2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInVhcnRfaXBnX2NsayIsCi0JCS5pZCA9IDUsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9VQVJUNl9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQxX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAiZ3B0X2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZncHQxX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImdwdF9pcGdfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0dQVDFfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImdwdF9jbGsiLAotCQkuaWQgPSAxLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmZ3B0Ml9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJncHRfaXBnX2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9HUFQyX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJncHRfY2xrIiwKLQkJLmlkID0gMiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJmdwdDNfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAiZ3B0X2lwZ19jbGsiLAotCQkuaWQgPSAyLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfR1BUM19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ0X2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAiZ3B0X2NsayIsCi0JCS5pZCA9IDMsCi0JCS5wYXJlbnQgPSAmcGVyX2Nsa1swXSwKLQkJLnNlY29uZGFyeSA9ICZncHQ0X2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImdwdF9pcGdfY2xrIiwKLQkJLmlkID0gMywKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0dQVDRfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImdwdF9jbGsiLAotCQkuaWQgPSA0LAotCQkucGFyZW50ID0gJnBlcl9jbGtbMF0sCi0JCS5zZWNvbmRhcnkgPSAmZ3B0NV9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJncHRfaXBnX2NsayIsCi0JCS5pZCA9IDQsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9HUFQ1X09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJncHRfY2xrIiwKLQkJLmlkID0gNSwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJmdwdDZfY2xrWzFdLAotCX0sIHsKLQkJLm5hbWUgPSAiZ3B0X2lwZ19jbGsiLAotCQkuaWQgPSA1LAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfR1BUNl9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwd21fY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJwd21fY2xrIiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzBdLAotCQkuc2Vjb25kYXJ5ID0gJnB3bV9jbGtbMV0sCi0JfSwgewotCQkubmFtZSA9ICJwd21fY2xrIiwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX1BXTV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZGhjMV9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInNkaGNfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJnNkaGMxX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInNkaGNfaXBnX2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9TREhDMV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZGhjMl9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInNkaGNfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJnNkaGMyX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInNkaGNfaXBnX2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9TREhDMl9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZGhjM19jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInNkaGNfY2xrIiwKLQkJLmlkID0gMiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJnNkaGMzX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gInNkaGNfaXBnX2NsayIsCi0JCS5pZCA9IDIsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9TREhDM19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjc3BpMV9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImNzcGlfY2xrIiwKLQkJLmlkID0gMCwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJmNzcGkxX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImNzcGlfaXBnX2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9DU1BJMV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjc3BpMl9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImNzcGlfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJmNzcGkyX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImNzcGlfaXBnX2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9DU1BJMl9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjc3BpM19jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImNzcGlfY2xrIiwKLQkJLmlkID0gMiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzFdLAotCQkuc2Vjb25kYXJ5ID0gJmNzcGkzX2Nsa1sxXSwKLQl9LCB7Ci0JCS5uYW1lID0gImNzcGlfaXBnX2NsayIsCi0JCS5pZCA9IDIsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9DU1BJM19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBsY2RjX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAibGNkY19jbGsiLAotCQkucGFyZW50ID0gJnBlcl9jbGtbMl0sCi0JCS5zZWNvbmRhcnkgPSAmbGNkY19jbGtbMV0sCi0JCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKLQkJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCi0JfSwgewotCQkubmFtZSA9ICJsY2RjX2lwZ19jbGsiLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5zZWNvbmRhcnkgPSAmbGNkY19jbGtbMl0sCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfTENEQ19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sIHsKLQkJLm5hbWUgPSAibGNkY19haGJfY2xrIiwKLQkJLnBhcmVudCA9ICZhaGJfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX0hDTEtfTENEQ19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjc2lfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJjc2lfcGVyY2xrIiwKLQkJLnBhcmVudCA9ICZwZXJfY2xrWzNdLAotCQkuc2Vjb25kYXJ5ID0gJmNzaV9jbGtbMV0sCi0JCS5yb3VuZF9yYXRlID0gX2Nsa19wYXJlbnRfcm91bmRfcmF0ZSwKLQkJLnNldF9yYXRlID0gX2Nsa19wYXJlbnRfc2V0X3JhdGUsCi0JfSwgewotCQkubmFtZSA9ICJjc2lfYWhiX2NsayIsCi0JCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9IQ0xLX0NTSV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfY2xrW10gPSB7Ci0JewotCQkubmFtZSA9ICJ1c2JfY2xrIiwKLQkJLnBhcmVudCA9ICZzcGxsX2NsaywKLQkJLmdldF9yYXRlID0gX2Nsa191c2JfcmVjYWxjLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX1VTQk9UR19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sIHsKLQkJLm5hbWUgPSAidXNiX2FoYl9jbGsiLAotCQkucGFyZW50ID0gJmFoYl9jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfSENMS19VU0JPVEdfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKKyNkZWZpbmUgREVGSU5FX0NMT0NLMShuYW1lLCBpLCBlciwgZXMsIGdldHNldHJvdW5kLCBzLCBwKQlcCisJc3RhdGljIHN0cnVjdCBjbGsgbmFtZSA9IHsJCQkJXAorCQkuaWQJCT0gaSwJCQkJXAorCQkuZW5hYmxlX3JlZwk9IGVyLAkJCQlcCisJCS5lbmFibGVfc2hpZnQJPSBlcywJCQkJXAorCQkuZ2V0X3JhdGUJPSBnZXRfcmF0ZV8jI2dldHNldHJvdW5kLAlcCisJCS5zZXRfcmF0ZQk9IHNldF9yYXRlXyMjZ2V0c2V0cm91bmQsCVwKKwkJLnJvdW5kX3JhdGUJPSByb3VuZF9yYXRlXyMjZ2V0c2V0cm91bmQsCVwKKwkJLmVuYWJsZQkJPSBjbGtfcGNjcl9lbmFibGUsCQlcCisJCS5kaXNhYmxlCT0gY2xrX3BjY3JfZGlzYWJsZSwJCVwKKwkJLnNlY29uZGFyeQk9IHMsCQkJCVwKKwkJLnBhcmVudAkJPSBwLAkJCQlcCiAJfQotfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgc3NpMV9jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gInNzaV9jbGsiLAotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJm1wbGxfbWFpbl9jbGtbMV0sCi0JCS5zZWNvbmRhcnkgPSAmc3NpMV9jbGtbMV0sCi0JCS5nZXRfcmF0ZSA9IF9jbGtfc3NpMV9yZWNhbGMsCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfU1NJMV9CQVVEX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwgewotCQkubmFtZSA9ICJzc2lfaXBnX2NsayIsCi0JCS5pZCA9IDAsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9TU0kxX0lQR19PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAorLyogRm9yd2FyZCBkZWNsYXJhdGlvbiB0byBrZWVwIHRoZSBmb2xsb3dpbmcgbGlzdCBpbiBvcmRlciAqLworc3RhdGljIHN0cnVjdCBjbGsgc2xjZGNfY2xrMSwgc2FoYXJhMl9jbGsxLCBydGljX2NsazEsIGZlY19jbGsxLCBlbW1hX2NsazEsCisJCSAgZG1hX2NsazEsIGxjZGNfY2xrMiwgdnB1X2NsazE7CisKKy8qIEFsbCBjbG9ja3Mgd2UgY2FuIGdhdGUgdGhyb3VnaCBQQ0NSeCBpbiB0aGUgb3JkZXIgb2YgUENDUnggYml0cyAqLworREVGSU5FX0NMT0NLKHNzaTJfY2xrMSwgICAgMSwgUENDUjAsICAwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMV9jbGsxLCAgICAwLCBQQ0NSMCwgIDEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhzbGNkY19jbGssICAgIDAsIFBDQ1IwLCAgMiwgTlVMTCwgJnNsY2RjX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhzZGhjM19jbGsxLCAgIDAsIFBDQ1IwLCAgMywgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHNkaGMyX2NsazEsICAgMCwgUENDUjAsICA0LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RoYzFfY2xrMSwgICAwLCBQQ0NSMCwgIDUsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhzY2NfY2xrLCAgICAgIDAsIFBDQ1IwLCAgNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHNhaGFyYTJfY2xrLCAgMCwgUENDUjAsICA3LCBOVUxMLCAmc2FoYXJhMl9jbGsxLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0socnRpY19jbGssICAgICAwLCBQQ0NSMCwgIDgsIE5VTEwsICZydGljX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhydGNfY2xrLCAgICAgIDAsIFBDQ1IwLCAgOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHB3bV9jbGsxLCAgICAgMCwgUENDUjAsIDExLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sob3dpcmVfY2xrLCAgICAwLCBQQ0NSMCwgMTIsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhtc3RpY2tfY2xrMSwgIDAsIFBDQ1IwLCAxMywgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGxjZGNfY2xrMSwgICAgMCwgUENDUjAsIDE0LCBOVUxMLCAmbGNkY19jbGsyLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soa3BwX2NsaywgICAgICAwLCBQQ0NSMCwgMTUsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhpaW1fY2xrLCAgICAgIDAsIFBDQ1IwLCAxNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGkyYzJfY2xrLCAgICAgMSwgUENDUjAsIDE3LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soaTJjMV9jbGssICAgICAwLCBQQ0NSMCwgMTgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhncHQ2X2NsazEsICAgIDAsIFBDQ1IwLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGdwdDVfY2xrMSwgICAgMCwgUENDUjAsIDIwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0NF9jbGsxLCAgICAwLCBQQ0NSMCwgMjEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhncHQzX2NsazEsICAgIDAsIFBDQ1IwLCAyMiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGdwdDJfY2xrMSwgICAgMCwgUENDUjAsIDIzLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0MV9jbGsxLCAgICAwLCBQQ0NSMCwgMjQsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhncGlvX2NsaywgICAgIDAsIFBDQ1IwLCAyNSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGZlY19jbGssICAgICAgMCwgUENDUjAsIDI2LCBOVUxMLCAmZmVjX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhlbW1hX2NsaywgICAgIDAsIFBDQ1IwLCAyNywgTlVMTCwgJmVtbWFfY2xrMSwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGRtYV9jbGssICAgICAgMCwgUENDUjAsIDI4LCBOVUxMLCAmZG1hX2NsazEsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhjc3BpMTNfY2xrMSwgIDAsIFBDQ1IwLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGNzcGkyX2NsazEsICAgMCwgUENDUjAsIDMwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soY3NwaTFfY2xrMSwgICAwLCBQQ0NSMCwgMzEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKKworREVGSU5FX0NMT0NLKG1zdGlja19jbGssICAgMCwgUENDUjEsICAyLCBOVUxMLCAmbXN0aWNrX2NsazEsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhuZmNfY2xrLCAgICAgIDAsIFBDQ1IxLCAgMywgZ2V0X3JhdGVfbmZjLCBOVUxMLCAmY3B1X2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMl9jbGssICAgICAxLCBQQ0NSMSwgIDQsIGdldF9yYXRlX3NzaTIsICZzc2kyX2NsazEsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMV9jbGssICAgICAwLCBQQ0NSMSwgIDUsIGdldF9yYXRlX3NzaTEsICZzc2kxX2NsazEsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0sodnB1X2NsaywgICAgICAwLCBQQ0NSMSwgIDYsIGdldF9yYXRlX3ZwdSwgJnZwdV9jbGsxLCAmbXBsbF9tYWluMl9jbGspOworREVGSU5FX0NMT0NLMShwZXI0X2NsaywgICAgMywgUENDUjEsICA3LCBwZXIsIE5VTEwsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0sxKHBlcjNfY2xrLCAgICAyLCBQQ0NSMSwgIDgsIHBlciwgTlVMTCwgJm1wbGxfbWFpbjJfY2xrKTsKK0RFRklORV9DTE9DSzEocGVyMl9jbGssICAgIDEsIFBDQ1IxLCAgOSwgcGVyLCBOVUxMLCAmbXBsbF9tYWluMl9jbGspOworREVGSU5FX0NMT0NLMShwZXIxX2NsaywgICAgMCwgUENDUjEsIDEwLCBwZXIsIE5VTEwsICZtcGxsX21haW4yX2Nsayk7CitERUZJTkVfQ0xPQ0sodXNiX2NsazEsICAgICAwLCBQQ0NSMSwgMTEsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhzbGNkY19jbGsxLCAgIDAsIFBDQ1IxLCAxMiwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKHNhaGFyYTJfY2xrMSwgMCwgUENDUjEsIDEzLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0socnRpY19jbGsxLCAgICAwLCBQQ0NSMSwgMTQsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhsY2RjX2NsazIsICAgIDAsIFBDQ1IxLCAxNSwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKHZwdV9jbGsxLCAgICAgMCwgUENDUjEsIDE2LCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZmVjX2NsazEsICAgICAwLCBQQ0NSMSwgMTcsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhlbW1hX2NsazEsICAgIDAsIFBDQ1IxLCAxOCwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGVtaV9jbGssICAgICAgMCwgUENDUjEsIDE5LCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZG1hX2NsazEsICAgICAwLCBQQ0NSMSwgMjAsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhjc2lfY2xrMSwgICAgIDAsIFBDQ1IxLCAyMSwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGJyb21fY2xrLCAgICAgMCwgUENDUjEsIDIyLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soYXRhX2NsaywgICAgICAwLCBQQ0NSMSwgMjMsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyh3ZG9nX2NsaywgICAgIDAsIFBDQ1IxLCAyNCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHVzYl9jbGssICAgICAgMCwgUENDUjEsIDI1LCBnZXRfcmF0ZV91c2IsICZ1c2JfY2xrMSwgJnNwbGxfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0Nl9jbGsxLCAgIDAsIFBDQ1IxLCAyNiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHVhcnQ1X2NsazEsICAgMCwgUENDUjEsIDI3LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDRfY2xrMSwgICAwLCBQQ0NSMSwgMjgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0M19jbGsxLCAgIDAsIFBDQ1IxLCAyOSwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHVhcnQyX2NsazEsICAgMCwgUENDUjEsIDMwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDFfY2xrMSwgICAwLCBQQ0NSMSwgMzEsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKKworLyogQ2xvY2tzIHdlIGNhbm5vdCBkaXJlY3RseSBnYXRlLCBidXQgZHJpdmVycyBuZWVkIHRoZWlyIHJhdGVzICovCitERUZJTkVfQ0xPQ0soY3NwaTFfY2xrLCAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZjc3BpMV9jbGsxLCAmcGVyMl9jbGspOworREVGSU5FX0NMT0NLKGNzcGkyX2NsaywgICAgMSwgMCwgICAgICAwLCBOVUxMLCAmY3NwaTJfY2xrMSwgJnBlcjJfY2xrKTsKK0RFRklORV9DTE9DSyhjc3BpM19jbGssICAgIDIsIDAsICAgICAgMCwgTlVMTCwgJmNzcGkxM19jbGsxLCAmcGVyMl9jbGspOworREVGSU5FX0NMT0NLKHNkaGMxX2NsaywgICAgMCwgMCwgICAgICAwLCBOVUxMLCAmc2RoYzFfY2xrMSwgJnBlcjJfY2xrKTsKK0RFRklORV9DTE9DSyhzZGhjMl9jbGssICAgIDEsIDAsICAgICAgMCwgTlVMTCwgJnNkaGMyX2NsazEsICZwZXIyX2Nsayk7CitERUZJTkVfQ0xPQ0soc2RoYzNfY2xrLCAgICAyLCAwLCAgICAgIDAsIE5VTEwsICZzZGhjM19jbGsxLCAmcGVyMl9jbGspOworREVGSU5FX0NMT0NLKHB3bV9jbGssICAgICAgMCwgMCwgICAgICAwLCBOVUxMLCAmcHdtX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0MV9jbGssICAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZncHQxX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0Ml9jbGssICAgICAxLCAwLCAgICAgIDAsIE5VTEwsICZncHQyX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0M19jbGssICAgICAyLCAwLCAgICAgIDAsIE5VTEwsICZncHQzX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0NF9jbGssICAgICAzLCAwLCAgICAgIDAsIE5VTEwsICZncHQ0X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0NV9jbGssICAgICA0LCAwLCAgICAgIDAsIE5VTEwsICZncHQ1X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0Nl9jbGssICAgICA1LCAwLCAgICAgIDAsIE5VTEwsICZncHQ2X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDFfY2xrLCAgICAwLCAwLCAgICAgIDAsIE5VTEwsICZ1YXJ0MV9jbGsxLCAmcGVyMV9jbGspOworREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgICAgMSwgMCwgICAgICAwLCBOVUxMLCAmdWFydDJfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0M19jbGssICAgIDIsIDAsICAgICAgMCwgTlVMTCwgJnVhcnQzX2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDRfY2xrLCAgICAzLCAwLCAgICAgIDAsIE5VTEwsICZ1YXJ0NF9jbGsxLCAmcGVyMV9jbGspOworREVGSU5FX0NMT0NLKHVhcnQ1X2NsaywgICAgNCwgMCwgICAgICAwLCBOVUxMLCAmdWFydDVfY2xrMSwgJnBlcjFfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0Nl9jbGssICAgIDUsIDAsICAgICAgMCwgTlVMTCwgJnVhcnQ2X2NsazEsICZwZXIxX2Nsayk7CitERUZJTkVfQ0xPQ0sxKGxjZGNfY2xrLCAgICAwLCAwLCAgICAgIDAsIHBhcmVudCwgJmxjZGNfY2xrMSwgJnBlcjNfY2xrKTsKK0RFRklORV9DTE9DSzEoY3NpX2NsaywgICAgIDAsIDAsICAgICAgMCwgcGFyZW50LCAmY3NpX2NsazEsICZwZXI0X2Nsayk7CisKKyNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpIFwKKwl7IFwKKwkJLmRldl9pZCA9IGQsIFwKKwkJLmNvbl9pZCA9IG4sIFwKKwkJLmNsayA9ICZjLCBcCiAJfSwKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSBfX2luaXRkYXRhID0geworCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMCIsIE5VTEwsIHVhcnQxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjEiLCBOVUxMLCB1YXJ0Ml9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4yIiwgTlVMTCwgdWFydDNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMyIsIE5VTEwsIHVhcnQ0X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjQiLCBOVUxMLCB1YXJ0NV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC41IiwgTlVMTCwgdWFydDZfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0MSIsIGdwdDFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0MiIsIGdwdDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0MyIsIGdwdDNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0NCIsIGdwdDRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0NSIsIGdwdDVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0NiIsIGdwdDZfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX3B3bS4wIiwgTlVMTCwgcHdtX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMCIsIE5VTEwsIHNkaGMxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMSIsIE5VTEwsIHNkaGMyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1tbWMuMiIsIE5VTEwsIHNkaGMzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkxIiwgY3NwaTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaTIiLCBjc3BpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpMyIsIGNzcGkzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1mYi4wIiwgTlVMTCwgbGNkY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc2kiLCBjc2lfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAidXNiIiwgdXNiX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaTEiLCBzc2kxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNzaTIiLCBzc2kyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19uYW5kLjAiLCBOVUxMLCBuZmNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAidnB1IiwgdnB1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImRtYSIsIGRtYV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGljIiwgcnRpY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJicm9tIiwgYnJvbV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbW1hIiwgZW1tYV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzbGNkYyIsIHNsY2RjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImZlYy4wIiwgTlVMTCwgZmVjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVtaSIsIGVtaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzYWhhcmEyIiwgc2FoYXJhMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhdGEiLCBhdGFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXN0aWNrIiwgbXN0aWNrX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIndkb2ciLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMCIsIE5VTEwsIGkyYzFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpaW0iLCBpaW1fY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAia3BwIiwga3BwX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y193MS4wIiwgTlVMTCwgb3dpcmVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNjYyIsIHNjY19jbGspCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBzc2kyX2Nsa1tdID0gewotCXsKLQkJLm5hbWUgPSAic3NpX2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmbXBsbF9tYWluX2Nsa1sxXSwKLQkJLnNlY29uZGFyeSA9ICZzc2kyX2Nsa1sxXSwKLQkJLmdldF9yYXRlID0gX2Nsa19zc2kyX3JlY2FsYywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9TU0kyX0JBVURfT0ZGU0VULAotCQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLQl9LCB7Ci0JCS5uYW1lID0gInNzaV9pcGdfY2xrIiwKLQkJLmlkID0gMSwKLQkJLnBhcmVudCA9ICZpcGdfY2xrLAotCQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IwLAotCQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX1NTSTJfSVBHX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG5mY19jbGsgPSB7Ci0JLm5hbWUgPSAibmZjX2NsayIsCi0JLnBhcmVudCA9ICZjcHVfY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfbmZjX3JlY2FsYywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9ORkNfQkFVRF9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2cHVfY2xrID0gewotCS5uYW1lID0gInZwdV9jbGsiLAotCS5wYXJlbnQgPSAmbXBsbF9tYWluX2Nsa1sxXSwKLQkuZ2V0X3JhdGUgPSBfY2xrX3ZwdV9yZWNhbGMsCi0JLmVuYWJsZSA9IF9jbGtfdnB1X2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfdnB1X2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkbWFfY2xrID0gewotCS5uYW1lID0gImRtYV9jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19kbWFfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19kbWFfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHJ0aWNfY2xrID0gewotCS5uYW1lID0gInJ0aWNfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfcnRpY19lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX3J0aWNfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGJyb21fY2xrID0gewotCS5uYW1lID0gImJyb21fY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfSENMS19CUk9NX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtbWFfY2xrID0gewotCS5uYW1lID0gImVtbWFfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW1tYV9lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX2VtbWFfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNsY2RjX2NsayA9IHsKLQkubmFtZSA9ICJzbGNkY19jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19zbGNkY19lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX3NsY2RjX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmZWNfY2xrID0gewotCS5uYW1lID0gImZlY19jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19mZWNfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19mZWNfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtaV9jbGsgPSB7Ci0JLm5hbWUgPSAiZW1pX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IxX0hDTEtfRU1JX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNhaGFyYTJfY2xrID0gewotCS5uYW1lID0gInNhaGFyYV9jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19zYWhhcmEyX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfc2FoYXJhMl9kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXRhX2NsayA9IHsKLQkubmFtZSA9ICJhdGFfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gQ0NNX1BDQ1IxLAotCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjFfSENMS19BVEFfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXN0aWNrMV9jbGsgPSB7Ci0JLm5hbWUgPSAibXN0aWNrMV9jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19tc3RpY2sxX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfbXN0aWNrMV9kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2RvZ19jbGsgPSB7Ci0JLm5hbWUgPSAid2RvZ19jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMV9XRFRfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb19jbGsgPSB7Ci0JLm5hbWUgPSAiZ3Bpb19jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjEsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9HUElPX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyY19jbGtbXSA9IHsKLQl7Ci0JCS5uYW1lID0gImkyY19jbGsiLAotCQkuaWQgPSAwLAotCQkucGFyZW50ID0gJmlwZ19jbGssCi0JCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkJLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JCS5lbmFibGVfc2hpZnQgPSBDQ01fUENDUjBfSTJDMV9PRkZTRVQsCi0JCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotCX0sIHsKLQkJLm5hbWUgPSAiaTJjX2NsayIsCi0JCS5pZCA9IDEsCi0JCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkJLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkJLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9JMkMyX09GRlNFVCwKLQkJLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGlpbV9jbGsgPSB7Ci0JLm5hbWUgPSAiaWltX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX0lJTV9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBrcHBfY2xrID0gewotCS5uYW1lID0gImtwcF9jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9LUFBfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgb3dpcmVfY2xrID0gewotCS5uYW1lID0gIm93aXJlX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX09XSVJFX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHJ0Y19jbGsgPSB7Ci0JLm5hbWUgPSAicnRjX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IENDTV9QQ0NSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gQ0NNX1BDQ1IwX1JUQ19PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzY2NfY2xrID0gewotCS5uYW1lID0gInNjY19jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBDQ01fUENDUjAsCi0JLmVuYWJsZV9zaGlmdCA9IENDTV9QQ0NSMF9TQ0NfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19jbGtvX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCisvKiBBZGp1c3QgdGhlIGNsb2NrIHBhdGggZm9yIFRPMiBhbmQgbGF0ZXIgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB0bzJfYWRqdXN0X2Nsb2Nrcyh2b2lkKQogewotCXUzMiBkaXY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7Ci0JaWYgKHBhcmVudF9yYXRlICUgcmF0ZSkKLQkJZGl2Kys7Ci0KLQlpZiAoZGl2ID4gOCkKLQkJZGl2ID0gODsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKLX0KLQotc3RhdGljIGludCBfY2xrX2Nsa29fc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIHJlZzsKLQl1MzIgZGl2OwotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7Ci0KLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0KLQlkaXYgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7Ci0KLQlpZiAoZGl2ID4gOCB8fCBkaXYgPCAxIHx8ICgocGFyZW50X3JhdGUgLyBkaXYpICE9IHJhdGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlkaXYtLTsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkgJiB+Q0NNX1BDRFIwX0NMS09ESVZfTUFTSzsKLQlyZWcgfD0gZGl2IDw8IENDTV9QQ0RSMF9DTEtPRElWX09GRlNFVDsKLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fUENEUjApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfY2xrb19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBkaXY7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCWRpdiA9IF9fcmF3X3JlYWRsKENDTV9QQ0RSMCkgJiBDQ01fUENEUjBfQ0xLT0RJVl9NQVNLID4+Ci0JCUNDTV9QQ0RSMF9DTEtPRElWX09GRlNFVDsKLQlkaXYrKzsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKLX0KLQotc3RhdGljIGludCBfY2xrX2Nsa29fc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX0NDU1IpICYgfkNDTV9DQ1NSX0NMS09TRUxfTUFTSzsKLQotCWlmIChwYXJlbnQgPT0gJmNraWxfY2xrKQotCQlyZWcgfD0gMCA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNraWhfY2xrKQotCQlyZWcgfD0gMiA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gbXBsbF9jbGsucGFyZW50KQotCQlyZWcgfD0gMyA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gc3BsbF9jbGsucGFyZW50KQotCQlyZWcgfD0gNCA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJm1wbGxfY2xrKQotCQlyZWcgfD0gNSA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnNwbGxfY2xrKQotCQlyZWcgfD0gNiA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNwdV9jbGspCi0JCXJlZyB8PSA3IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmYWhiX2NsaykKLQkJcmVnIHw9IDggPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZpcGdfY2xrKQotCQlyZWcgfD0gOSA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnBlcl9jbGtbMF0pCi0JCXJlZyB8PSAweEEgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZwZXJfY2xrWzFdKQotCQlyZWcgfD0gMHhCIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmcGVyX2Nsa1syXSkKLQkJcmVnIHw9IDB4QyA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnBlcl9jbGtbM10pCi0JCXJlZyB8PSAweEQgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZzc2kxX2Nsa1swXSkKLQkJcmVnIHw9IDB4RSA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnNzaTJfY2xrWzBdKQotCQlyZWcgfD0gMHhGIDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmbmZjX2NsaykKLQkJcmVnIHw9IDB4MTAgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZtc3RpY2sxX2NsaykKLQkJcmVnIHw9IDB4MTEgPDwgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZ2cHVfY2xrKQotCQlyZWcgfD0gMHgxMiA8PCBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJnVzYl9jbGtbMF0pCi0JCXJlZyB8PSAweDE1IDw8IENDTV9DQ1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlfX3Jhd193cml0ZWwocmVnLCBDQ01fQ0NTUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfY2xrX2Nsa29fZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoQ0NNX1BDRFIwKSB8IENDTV9QQ0RSMF9DTEtPX0VOOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0RSMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19jbGtvX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChDQ01fUENEUjApICYgfkNDTV9QQ0RSMF9DTEtPX0VOOwotCV9fcmF3X3dyaXRlbChyZWcsIENDTV9QQ0RSMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa29fY2xrID0gewotCS5uYW1lID0gImNsa29fY2xrIiwKLQkuZ2V0X3JhdGUgPSBfY2xrX2Nsa29fcmVjYWxjLAotCS5zZXRfcmF0ZSA9IF9jbGtfY2xrb19zZXRfcmF0ZSwKLQkucm91bmRfcmF0ZSA9IF9jbGtfY2xrb19yb3VuZF9yYXRlLAotCS5zZXRfcGFyZW50ID0gX2Nsa19jbGtvX3NldF9wYXJlbnQsCi0JLmVuYWJsZSA9IF9jbGtfY2xrb19lbmFibGUsCi0JLmRpc2FibGUgPSBfY2xrX2Nsa29fZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpteGNfY2xrc1tdID0gewotCSZja2loX2NsaywKLQkmY2tpbF9jbGssCi0JJm1wbGxfY2xrLAotCSZtcGxsX21haW5fY2xrWzBdLAotCSZtcGxsX21haW5fY2xrWzFdLAotCSZzcGxsX2NsaywKLQkmY3B1X2NsaywKLQkmYWhiX2NsaywKLQkmaXBnX2NsaywKLQkmcGVyX2Nsa1swXSwKLQkmcGVyX2Nsa1sxXSwKLQkmcGVyX2Nsa1syXSwKLQkmcGVyX2Nsa1szXSwKLQkmY2xrb19jbGssCi0JJnVhcnQxX2Nsa1swXSwKLQkmdWFydDFfY2xrWzFdLAotCSZ1YXJ0Ml9jbGtbMF0sCi0JJnVhcnQyX2Nsa1sxXSwKLQkmdWFydDNfY2xrWzBdLAotCSZ1YXJ0M19jbGtbMV0sCi0JJnVhcnQ0X2Nsa1swXSwKLQkmdWFydDRfY2xrWzFdLAotCSZ1YXJ0NV9jbGtbMF0sCi0JJnVhcnQ1X2Nsa1sxXSwKLQkmdWFydDZfY2xrWzBdLAotCSZ1YXJ0Nl9jbGtbMV0sCi0JJmdwdDFfY2xrWzBdLAotCSZncHQxX2Nsa1sxXSwKLQkmZ3B0Ml9jbGtbMF0sCi0JJmdwdDJfY2xrWzFdLAotCSZncHQzX2Nsa1swXSwKLQkmZ3B0M19jbGtbMV0sCi0JJmdwdDRfY2xrWzBdLAotCSZncHQ0X2Nsa1sxXSwKLQkmZ3B0NV9jbGtbMF0sCi0JJmdwdDVfY2xrWzFdLAotCSZncHQ2X2Nsa1swXSwKLQkmZ3B0Nl9jbGtbMV0sCi0JJnB3bV9jbGtbMF0sCi0JJnB3bV9jbGtbMV0sCi0JJnNkaGMxX2Nsa1swXSwKLQkmc2RoYzFfY2xrWzFdLAotCSZzZGhjMl9jbGtbMF0sCi0JJnNkaGMyX2Nsa1sxXSwKLQkmc2RoYzNfY2xrWzBdLAotCSZzZGhjM19jbGtbMV0sCi0JJmNzcGkxX2Nsa1swXSwKLQkmY3NwaTFfY2xrWzFdLAotCSZjc3BpMl9jbGtbMF0sCi0JJmNzcGkyX2Nsa1sxXSwKLQkmY3NwaTNfY2xrWzBdLAotCSZjc3BpM19jbGtbMV0sCi0JJmxjZGNfY2xrWzBdLAotCSZsY2RjX2Nsa1sxXSwKLQkmbGNkY19jbGtbMl0sCi0JJmNzaV9jbGtbMF0sCi0JJmNzaV9jbGtbMV0sCi0JJnVzYl9jbGtbMF0sCi0JJnVzYl9jbGtbMV0sCi0JJnNzaTFfY2xrWzBdLAotCSZzc2kxX2Nsa1sxXSwKLQkmc3NpMl9jbGtbMF0sCi0JJnNzaTJfY2xrWzFdLAotCSZuZmNfY2xrLAotCSZ2cHVfY2xrLAotCSZkbWFfY2xrLAotCSZydGljX2NsaywKLQkmYnJvbV9jbGssCi0JJmVtbWFfY2xrLAotCSZzbGNkY19jbGssCi0JJmZlY19jbGssCi0JJmVtaV9jbGssCi0JJnNhaGFyYTJfY2xrLAotCSZhdGFfY2xrLAotCSZtc3RpY2sxX2NsaywKLQkmd2RvZ19jbGssCi0JJmdwaW9fY2xrLAotCSZpMmNfY2xrWzBdLAotCSZpMmNfY2xrWzFdLAotCSZpaW1fY2xrLAotCSZrcHBfY2xrLAotCSZvd2lyZV9jbGssCi0JJnJ0Y19jbGssCi0JJnNjY19jbGssCi19OwotCi12b2lkIF9faW5pdCBjaGFuZ2VfZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSh1bnNpZ25lZCBsb25nIG5ld19yZWYpCi17Ci0JZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSA9IG5ld19yZWY7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgX19pbml0IGNsa19lYXJseV9nZXRfdGltZXJfcmF0ZSh2b2lkKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoJnBlcl9jbGtbMF0pOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgcHJvYmVfbXhjX2Nsb2Nrcyh2b2lkKQotewotCWludCBpOworCXVuc2lnbmVkIGxvbmcgY3NjciA9IF9fcmF3X3JlYWRsKENDTV9DU0NSKTsKIAogCWlmIChteDI3X3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKSB7Ci0JCWlmIChDU0NSKCkgJiAweDgwMDApCi0JCQljcHVfY2xrLnBhcmVudCA9ICZtcGxsX21haW5fY2xrWzBdOworCQlpZiAoY3NjciAmIENDTV9DU0NSX0FSTV9TUkMpCisJCQljcHVfY2xrLnBhcmVudCA9ICZtcGxsX21haW4xX2NsazsKIAotCQlpZiAoIShDU0NSKCkgJiAweDAwODAwMDAwKSkKLQkJCXNzaTJfY2xrWzBdLnBhcmVudCA9ICZzcGxsX2NsazsKKwkJaWYgKCEoY3NjciAmIENDTV9DU0NSX1NTSTIpKQorCQkJc3NpMV9jbGsucGFyZW50ID0gJnNwbGxfY2xrOwogCi0JCWlmICghKENTQ1IoKSAmIDB4MDA0MDAwMDApKQotCQkJc3NpMV9jbGtbMF0ucGFyZW50ID0gJnNwbGxfY2xrOworCQlpZiAoIShjc2NyICYgQ0NNX0NTQ1JfU1NJMSkpCisJCQlzc2kxX2Nsay5wYXJlbnQgPSAmc3BsbF9jbGs7CiAKLQkJaWYgKCEoQ1NDUigpICYgMHgwMDIwMDAwMCkpCisJCWlmICghKGNzY3IgJiBDQ01fQ1NDUl9WUFUpKQogCQkJdnB1X2Nsay5wYXJlbnQgPSAmc3BsbF9jbGs7CiAJfSBlbHNlIHsKIAkJY3B1X2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CkBAIC0xNTY1LDExICs2OTMsMTMgQEAKIAkJY3B1X2Nsay5zZXRfcmF0ZSA9IE5VTEw7CiAJCWFoYl9jbGsucGFyZW50ID0gJm1wbGxfY2xrOwogCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YocGVyX2NsaykgLyBzaXplb2YocGVyX2Nsa1swXSk7IGkrKykKLQkJCXBlcl9jbGtbaV0ucGFyZW50ID0gJm1wbGxfY2xrOworCQlwZXIxX2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CisJCXBlcjJfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKKwkJcGVyM19jbGsucGFyZW50ID0gJm1wbGxfY2xrOworCQlwZXI0X2Nsay5wYXJlbnQgPSAmbXBsbF9jbGs7CiAKLQkJc3NpMV9jbGtbMF0ucGFyZW50ID0gJm1wbGxfY2xrOwotCQlzc2kyX2Nsa1swXS5wYXJlbnQgPSAmbXBsbF9jbGs7CisJCXNzaTFfY2xrLnBhcmVudCA9ICZtcGxsX2NsazsKKwkJc3NpMl9jbGsucGFyZW50ID0gJm1wbGxfY2xrOwogCiAJCXZwdV9jbGsucGFyZW50ID0gJm1wbGxfY2xrOwogCX0KQEAgLTE1NzksNDcgKzcwOSw0NyBAQAogICogbXVzdCBiZSBjYWxsZWQgdmVyeSBlYXJseSB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAgKiBhdmFpbGFibGUgY2xvY2sgcmF0ZSB3aGVuIHRoZSB0aW1lciBmcmFtZXdvcmsgc3RhcnRzCiAgKi8KLWludCBfX2luaXQgbXhjX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKK2ludCBfX2luaXQgbXgyN19jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpCiB7Ci0JdTMyIGNzY3I7Ci0Jc3RydWN0IGNsayAqKmNsa3A7CisJdTMyIGNzY3IgPSBfX3Jhd19yZWFkbChDQ01fQ1NDUik7CisJaW50IGk7CiAKIAlleHRlcm5hbF9oaWdoX3JlZmVyZW5jZSA9IGZyZWY7CiAKLQkvKiBkZXRlY3QgY2xvY2sgcmVmZXJlbmNlIGZvciBib3RoIHN5c3RlbSBQTEwgKi8KLQljc2NyID0gQ1NDUigpOworCS8qIGRldGVjdCBjbG9jayByZWZlcmVuY2UgZm9yIGJvdGggc3lzdGVtIFBMTHMgKi8KIAlpZiAoY3NjciAmIENDTV9DU0NSX01DVSkKIAkJbXBsbF9jbGsucGFyZW50ID0gJmNraWhfY2xrOwogCWVsc2UKLQkJbXBsbF9jbGsucGFyZW50ID0gJmNraWxfY2xrOworCQltcGxsX2Nsay5wYXJlbnQgPSAmZnBtX2NsazsKIAogCWlmIChjc2NyICYgQ0NNX0NTQ1JfU1ApCiAJCXNwbGxfY2xrLnBhcmVudCA9ICZja2loX2NsazsKIAllbHNlCi0JCXNwbGxfY2xrLnBhcmVudCA9ICZja2lsX2NsazsKKwkJc3BsbF9jbGsucGFyZW50ID0gJmZwbV9jbGs7CiAKLQlwcm9iZV9teGNfY2xvY2tzKCk7CisJdG8yX2FkanVzdF9jbG9ja3MoKTsKIAotCXBlcl9jbGtbMF0uZW5hYmxlKCZwZXJfY2xrWzBdKTsKLQlncHQxX2Nsa1sxXS5lbmFibGUoJmdwdDFfY2xrWzFdKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQorCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKIAotCWZvciAoY2xrcCA9IG14Y19jbGtzOyBjbGtwIDwgbXhjX2Nsa3MgKyBBUlJBWV9TSVpFKG14Y19jbGtzKTsgY2xrcCsrKQotCQljbGtfcmVnaXN0ZXIoKmNsa3ApOworCS8qIFR1cm4gb2ZmIGFsbCBjbG9ja3Mgd2UgZG8gbm90IG5lZWQgKi8KKwlfX3Jhd193cml0ZWwoMCwgQ0NNX1BDQ1IwKTsKKwlfX3Jhd193cml0ZWwoKDEgPDwgMTApIHwgKDEgPDwgMTkpLCBDQ01fUENDUjEpOwogCi0JLyogVHVybiBvZmYgYWxsIHBvc3NpYmxlIGNsb2NrcyAqLwotCV9fcmF3X3dyaXRlbChDQ01fUENDUjBfR1BUMV9NQVNLLCBDQ01fUENDUjApOwotCV9fcmF3X3dyaXRlbChDQ01fUENDUjFfUEVSQ0xLMV9NQVNLIHwgQ0NNX1BDQ1IxX0hDTEtfRU1JX01BU0ssCi0JCSAgICAgQ0NNX1BDQ1IxKTsKIAlzcGxsX2Nsay5kaXNhYmxlKCZzcGxsX2Nsayk7CiAKLQkvKiBUaGlzIHdpbGwgcHJvcGFnYXRlIHRvIGFsbCBjaGlsZHJlbiBhbmQgaW5pdCBhbGwgdGhlIGNsb2NrIHJhdGVzICovCi0KLQljbGtfZW5hYmxlKCZlbWlfY2xrKTsKKwkvKiBlbmFibGUgYmFzaWMgY2xvY2tzICovCisJY2xrX2VuYWJsZSgmcGVyMV9jbGspOwogCWNsa19lbmFibGUoJmdwaW9fY2xrKTsKKwljbGtfZW5hYmxlKCZlbWlfY2xrKTsKIAljbGtfZW5hYmxlKCZpaW1fY2xrKTsKLQljbGtfZW5hYmxlKCZncHQxX2Nsa1swXSk7CisKICNpZmRlZiBDT05GSUdfREVCVUdfTExfQ09OU09MRQotCWNsa19lbmFibGUoJnVhcnQxX2Nsa1swXSk7CisJY2xrX2VuYWJsZSgmdWFydDFfY2xrKTsKICNlbmRpZgorCisJbXhjX3RpbWVyX2luaXQoJmdwdDFfY2xrKTsKKwogCXJldHVybiAwOwogfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jcHVfaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2NwdV9pbXgyNy5jCmluZGV4IDIzOTMwOGYuLmQ5ZTNiZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2NwdV9pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2NwdV9pbXgyNy5jCkBAIC0yNiwxMSArMjYsMTEgQEAKIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImNybV9yZWdzLmgiCi0KIHN0YXRpYyBpbnQgY3B1X3NpbGljb25fcmV2ID0gLTE7CiBzdGF0aWMgaW50IGNwdV9wYXJ0bnVtYmVyOwogCisjZGVmaW5lIFNZU19DSElQX0lEICAgICAgICAgICAgIDB4MDAgICAgLyogVGhlIG9mZnNldCBvZiBDSElQIElEIHJlZ2lzdGVyICovCisKIHN0YXRpYyB2b2lkIHF1ZXJ5X3NpbGljb25fcGFyYW1ldGVyKHZvaWQpCiB7CiAJdTMyIHZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2NybV9yZWdzLmggYi9hcmNoL2FybS9tYWNoLW14Mi9jcm1fcmVncy5oCmluZGV4IDk0NjQ0Y2QuLjc0OWRlNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2NybV9yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvY3JtX3JlZ3MuaApAQCAtMzgsNDIgKzM4LDM2IEBACiAjZGVmaW5lIENDTV9QTUNPVU5UICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgzMCkKICNkZWZpbmUgQ0NNX1dLR0RDVEwgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDM0KQogCi0jZGVmaW5lIENDTV9DU0NSX1VTQl9PRkZTRVQgICAgIDI4Ci0jZGVmaW5lIENDTV9DU0NSX1VTQl9NQVNLICAgICAgICgweDcgPDwgMjgpCisjZGVmaW5lIENDTV9DU0NSX1BSRVNDX09GRlNFVCAgIDI5CisjZGVmaW5lIENDTV9DU0NSX1BSRVNDX01BU0sgICAgICgweDcgPDwgQ0NNX0NTQ1JfUFJFU0NfT0ZGU0VUKQorCisjZGVmaW5lIENDTV9DU0NSX1VTQl9PRkZTRVQgICAgIDI2CisjZGVmaW5lIENDTV9DU0NSX1VTQl9NQVNLICAgICAgICgweDcgPDwgQ0NNX0NTQ1JfVVNCX09GRlNFVCkKICNkZWZpbmUgQ0NNX0NTQ1JfU0RfT0ZGU0VUICAgICAgMjQKLSNkZWZpbmUgQ0NNX0NTQ1JfU0RfTUFTSyAgICAgICAgKDB4MyA8PCAyNCkKLSNkZWZpbmUgQ0NNX0NTQ1JfU1NJMiAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIENDTV9DU0NSX1NTSTJfT0ZGU0VUICAgIDIzCi0jZGVmaW5lIENDTV9DU0NSX1NTSTEgICAgICAgICAgICgxIDw8IDIyKQotI2RlZmluZSBDQ01fQ1NDUl9TU0kxX09GRlNFVCAgICAyMgotI2RlZmluZSBDQ01fQ1NDUl9WUFUgICAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBDQ01fQ1NDUl9WUFVfT0ZGU0VUICAgIDIxCi0jZGVmaW5lIENDTV9DU0NSX01TSEMgICAgICAgICAgICgxIDw8IDIwKQotI2RlZmluZSBDQ01fQ1NDUl9TUExMUkVTICAgICAgICAoMSA8PCAxOSkKLSNkZWZpbmUgQ0NNX0NTQ1JfTVBMTFJFUyAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIENDTV9DU0NSX1NEX01BU0sgICAgICAgICgweDMgPDwgQ0NNX0NTQ1JfU0RfT0ZGU0VUKQorI2RlZmluZSBDQ01fQ1NDUl9TUExMUkVTICAgICAgICAoMSA8PCAyMikKKyNkZWZpbmUgQ0NNX0NTQ1JfTVBMTFJFUyAgICAgICAgKDEgPDwgMjEpCisjZGVmaW5lIENDTV9DU0NSX1NTSTJfT0ZGU0VUICAgIDIwCisjZGVmaW5lIENDTV9DU0NSX1NTSTIgICAgICAgICAgICgxIDw8IENDTV9DU0NSX1NTSTJfT0ZGU0VUKQorI2RlZmluZSBDQ01fQ1NDUl9TU0kxX09GRlNFVCAgICAxOQorI2RlZmluZSBDQ01fQ1NDUl9TU0kxICAgICAgICAgICAoMSA8PCBDQ01fQ1NDUl9TU0kxX09GRlNFVCkKKyNkZWZpbmUgQ0NNX0NTQ1JfRklSX09GRlNFVCAgICAJMTgKKyNkZWZpbmUgQ0NNX0NTQ1JfRklSCQkoMSA8PCBDQ01fQ1NDUl9GSVJfT0ZGU0VUKQogI2RlZmluZSBDQ01fQ1NDUl9TUCAgICAgICAgICAgICAoMSA8PCAxNykKICNkZWZpbmUgQ0NNX0NTQ1JfTUNVICAgICAgICAgICAgKDEgPDwgMTYpCi0vKiBDQ01fQ1NDUl9BUk1feHh4IGp1c3QgYmUgYXZhbGlhYmxlIG9uIGkuTVgyNyBUTzIqLwotI2RlZmluZSBDQ01fQ1NDUl9BUk1fU1JDICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgQ0NNX0NTQ1JfQVJNX09GRlNFVCAgICAgMTIKLSNkZWZpbmUgQ0NNX0NTQ1JfQVJNX01BU0sgICAgICAgKDB4MyA8PCAxMikKLS8qIENDTV9DU0NSX0FSTV94eHgganVzdCBiZSBhdmFsaWFibGUgb24gaS5NWDI3IFRPMiovCi0jZGVmaW5lIENDTV9DU0NSX1BSRVNDX09GRlNFVCAgIDEzCi0jZGVmaW5lIENDTV9DU0NSX1BSRVNDX01BU0sgICAgICgweDcgPDwgMTMpCi0jZGVmaW5lIENDTV9DU0NSX0JDTEtfT0ZGU0VUICAgIDkKLSNkZWZpbmUgQ0NNX0NTQ1JfQkNMS19NQVNLICAgICAgKDB4ZiA8PCA5KQotI2RlZmluZSBDQ01fQ1NDUl9JUERJVl9PRkZTRVQgICA4Ci0jZGVmaW5lIENDTV9DU0NSX0lQRElWICAgICAgICAgICgxIDw8IDgpCi0vKiBDQ01fQ1NDUl9BSEJfeHh4IGp1c3QgYmUgYXZhbGlhYmxlIG9uIGkuTVgyNyBUTzIqLwotI2RlZmluZSBDQ01fQ1NDUl9BSEJfT0ZGU0VUICAgICA4Ci0jZGVmaW5lIENDTV9DU0NSX0FIQl9NQVNLICAgICAgICgweDMgPDwgOCkKLS8qIENDTV9DU0NSX0FIQl94eHgganVzdCBiZSBhdmFsaWFibGUgb24gaS5NWDI3IFRPMiovCisjZGVmaW5lIENDTV9DU0NSX0JDTEtfT0ZGU0VUCTEwCisjZGVmaW5lIENDTV9DU0NSX0JDTEtfTUFTSyAgICAgICgweGYgPDwgQ0NNX0NTQ1JfQkNMS19PRkZTRVQpCisjZGVmaW5lIENDTV9DU0NSX0lQRElWX09GRlNFVCAgIDkKKyNkZWZpbmUgQ0NNX0NTQ1JfSVBESVYgICAgICAgICAgKDEgPDwgQ0NNX0NTQ1JfSVBESVZfT0ZGU0VUKQorCiAjZGVmaW5lIENDTV9DU0NSX09TQzI2TURJViAgICAgICgxIDw8IDQpCiAjZGVmaW5lIENDTV9DU0NSX09TQzI2TSAgICAgICAgICgxIDw8IDMpCiAjZGVmaW5lIENDTV9DU0NSX0ZQTSAgICAgICAgICAgICgxIDw8IDIpCiAjZGVmaW5lIENDTV9DU0NSX1NQRU4gICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIENDTV9DU0NSX01QRU4gICAgICAgICAgIDEKIAorCisKICNkZWZpbmUgQ0NNX01QQ1RMMF9DUExNICAgICAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIENDTV9NUENUTDBfUERfT0ZGU0VUICAgIDI2CiAjZGVmaW5lIENDTV9NUENUTDBfUERfTUFTSyAgICAgICgweGYgPDwgMjYpCkBAIC0xMDksMjUgKzEwMywxNCBAQAogCiAjZGVmaW5lIENDTV9QQ0RSMF9TU0kyQkFVRERJVl9PRkZTRVQgICAgMjYKICNkZWZpbmUgQ0NNX1BDRFIwX1NTSTJCQVVERElWX01BU0sgICAgICAoMHgzZiA8PCAyNikKLSNkZWZpbmUgQ0NNX1BDRFIwX0NMS09fRU4gICAgICAgICAgICAgICAyNQotI2RlZmluZSBDQ01fUENEUjBfQ0xLT0RJVl9PRkZTRVQgICAgICAgIDIyCi0jZGVmaW5lIENDTV9QQ0RSMF9DTEtPRElWX01BU0sgICAgICAgICAgKDB4NyA8PCAyMikKICNkZWZpbmUgQ0NNX1BDRFIwX1NTSTFCQVVERElWX09GRlNFVCAgICAxNgogI2RlZmluZSBDQ01fUENEUjBfU1NJMUJBVURESVZfTUFTSyAgICAgICgweDNmIDw8IDE2KQotLypUaGUgZGlmaW5pdGlvbiBmb3IgaS5NWDI3IFRPMiovCi0jZGVmaW5lIENDTV9QQ0RSMF9WUFVESVYyX09GRlNFVCAgICAgICAgMTAKLSNkZWZpbmUgQ0NNX1BDRFIwX1ZQVURJVjJfTUFTSyAgICAgICAgICAoMHgzZiA8PCAxMCkKLSNkZWZpbmUgQ0NNX1BDRFIwX05GQ0RJVjJfT0ZGU0VUICAgICAgICAgNgotI2RlZmluZSBDQ01fUENEUjBfTkZDRElWMl9NQVNLICAgICAgICAgICAoMHhmIDw8IDYpCi0jZGVmaW5lIENDTV9QQ0RSMF9NU0hDRElWMl9NQVNLICAgICAgICAgIDB4M2YKLS8qVGhlIGRpZmluaXRpb24gZm9yIGkuTVgyNyBUTzIqLwogI2RlZmluZSBDQ01fUENEUjBfTkZDRElWX09GRlNFVCAgICAgICAgIDEyCiAjZGVmaW5lIENDTV9QQ0RSMF9ORkNESVZfTUFTSyAgICAgICAgICAgKDB4ZiA8PCAxMikKLSNkZWZpbmUgQ0NNX1BDRFIwX1ZQVURJVl9PRkZTRVQgICAgICAgIDgKLSNkZWZpbmUgQ0NNX1BDRFIwX1ZQVURJVl9NQVNLICAgICAgICAgICgweGYgPDwgOCkKLSNkZWZpbmUgQ0NNX1BDRFIwX01TSENESVZfT0ZGU0VUICAgICAgICAwCi0jZGVmaW5lIENDTV9QQ0RSMF9NU0hDRElWX01BU0sgICAgICAgICAgMHgxZgotCisjZGVmaW5lIENDTV9QQ0RSMF80OE1ESVZfT0ZGU0VUCQk1CisjZGVmaW5lIENDTV9QQ0RSMF80OE1ESVZfTUFTSwkJKDB4NyA8PCBDQ01fUENEUjBfNDhNRElWX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDRFIwX0ZJUklESVZfT0ZGU0VUCTAKKyNkZWZpbmUgQ0NNX1BDRFIwX0ZJUklESVZfTUFTSwkJMHgxZgogI2RlZmluZSBDQ01fUENEUjFfUEVSRElWNF9PRkZTRVQgICAgICAgIDI0CiAjZGVmaW5lIENDTV9QQ0RSMV9QRVJESVY0X01BU0sgICAgICAgICAgKDB4M2YgPDwgMjQpCiAjZGVmaW5lIENDTV9QQ0RSMV9QRVJESVYzX09GRlNFVCAgICAgICAgMTYKQEAgLTEzNywxMzMgKzEyMCwxMzUgQEAKICNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjFfT0ZGU0VUICAgICAgICAwCiAjZGVmaW5lIENDTV9QQ0RSMV9QRVJESVYxX01BU0sgICAgICAgICAgMHgzZgogCi0jZGVmaW5lIENDTV9QQ0NSMF9DU1BJMV9PRkZTRVQgICAgICAgICAgMzEKLSNkZWZpbmUgQ0NNX1BDQ1IwX0NTUEkxX01BU0sgICAgICAgICAgICAoMSA8PCAzMSkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0NTUEkyX09GRlNFVCAgICAgICAgICAzMAotI2RlZmluZSBDQ01fUENDUjBfQ1NQSTJfTUFTSyAgICAgICAgICAgICgxIDw8IDMwKQotI2RlZmluZSBDQ01fUENDUjBfQ1NQSTNfT0ZGU0VUICAgICAgICAgIDI5Ci0jZGVmaW5lIENDTV9QQ0NSMF9DU1BJM19NQVNLICAgICAgICAgICAgKDEgPDwgMjkpCi0jZGVmaW5lIENDTV9QQ0NSMF9ETUFfT0ZGU0VUICAgICAgICAgICAgMjgKLSNkZWZpbmUgQ0NNX1BDQ1IwX0RNQV9NQVNLICAgICAgICAgICAgICAoMSA8PCAyOCkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0VNTUFfT0ZGU0VUICAgICAgICAgICAyNwotI2RlZmluZSBDQ01fUENDUjBfRU1NQV9NQVNLICAgICAgICAgICAgICgxIDw8IDI3KQotI2RlZmluZSBDQ01fUENDUjBfRkVDX09GRlNFVCAgICAgICAgICAgIDI2Ci0jZGVmaW5lIENDTV9QQ0NSMF9GRUNfTUFTSyAgICAgICAgICAgICAgKDEgPDwgMjYpCi0jZGVmaW5lIENDTV9QQ0NSMF9HUElPX09GRlNFVCAgICAgICAgICAgMjUKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQSU9fTUFTSyAgICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDFfT0ZGU0VUICAgICAgICAgICAyNAotI2RlZmluZSBDQ01fUENDUjBfR1BUMV9NQVNLICAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBDQ01fUENDUjBfR1BUMl9PRkZTRVQgICAgICAgICAgIDIzCi0jZGVmaW5lIENDTV9QQ0NSMF9HUFQyX01BU0sgICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIENDTV9QQ0NSMF9HUFQzX09GRlNFVCAgICAgICAgICAgMjIKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDNfTUFTSyAgICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDRfT0ZGU0VUICAgICAgICAgICAyMQotI2RlZmluZSBDQ01fUENDUjBfR1BUNF9NQVNLICAgICAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBDQ01fUENDUjBfR1BUNV9PRkZTRVQgICAgICAgICAgIDIwCi0jZGVmaW5lIENDTV9QQ0NSMF9HUFQ1X01BU0sgICAgICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIENDTV9QQ0NSMF9HUFQ2X09GRlNFVCAgICAgICAgICAgMTkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0dQVDZfTUFTSyAgICAgICAgICAgICAoMSA8PCAxOSkKLSNkZWZpbmUgQ0NNX1BDQ1IwX0kyQzFfT0ZGU0VUICAgICAgICAgICAxOAotI2RlZmluZSBDQ01fUENDUjBfSTJDMV9NQVNLICAgICAgICAgICAgICgxIDw8IDE4KQotI2RlZmluZSBDQ01fUENDUjBfSTJDMl9PRkZTRVQgICAgICAgICAgIDE3Ci0jZGVmaW5lIENDTV9QQ0NSMF9JMkMyX01BU0sgICAgICAgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIENDTV9QQ0NSMF9JSU1fT0ZGU0VUICAgICAgICAgICAgMTYKLSNkZWZpbmUgQ0NNX1BDQ1IwX0lJTV9NQVNLICAgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgQ0NNX1BDQ1IwX0tQUF9PRkZTRVQgICAgICAgICAgICAxNQotI2RlZmluZSBDQ01fUENDUjBfS1BQX01BU0sgICAgICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBDQ01fUENDUjBfTENEQ19PRkZTRVQgICAgICAgICAgIDE0Ci0jZGVmaW5lIENDTV9QQ0NSMF9MQ0RDX01BU0sgICAgICAgICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIENDTV9QQ0NSMF9NU0hDX09GRlNFVCAgICAgICAgICAgMTMKLSNkZWZpbmUgQ0NNX1BDQ1IwX01TSENfTUFTSyAgICAgICAgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgQ0NNX1BDQ1IwX09XSVJFX09GRlNFVCAgICAgICAgICAxMgotI2RlZmluZSBDQ01fUENDUjBfT1dJUkVfTUFTSyAgICAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBDQ01fUENDUjBfUFdNX09GRlNFVCAgICAgICAgICAgIDExCi0jZGVmaW5lIENDTV9QQ0NSMF9QV01fTUFTSyAgICAgICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIENDTV9QQ0NSMF9SVENfT0ZGU0VUICAgICAgICAgICAgOQotI2RlZmluZSBDQ01fUENDUjBfUlRDX01BU0sgICAgICAgICAgICAgICgxIDw8IDkpCi0jZGVmaW5lIENDTV9QQ0NSMF9SVElDX09GRlNFVCAgICAgICAgICAgOAotI2RlZmluZSBDQ01fUENDUjBfUlRJQ19NQVNLICAgICAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIENDTV9QQ0NSMF9TQUhBUkFfT0ZGU0VUICAgICAgICAgNwotI2RlZmluZSBDQ01fUENDUjBfU0FIQVJBX01BU0sgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIENDTV9QQ0NSMF9TQ0NfT0ZGU0VUICAgICAgICAgICAgNgotI2RlZmluZSBDQ01fUENDUjBfU0NDX01BU0sgICAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIENDTV9QQ0NSMF9TREhDMV9PRkZTRVQgICAgICAgICAgNQotI2RlZmluZSBDQ01fUENDUjBfU0RIQzFfTUFTSyAgICAgICAgICAgICgxIDw8IDUpCi0jZGVmaW5lIENDTV9QQ0NSMF9TREhDMl9PRkZTRVQgICAgICAgICAgNAotI2RlZmluZSBDQ01fUENDUjBfU0RIQzJfTUFTSyAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIENDTV9QQ0NSMF9TREhDM19PRkZTRVQgICAgICAgICAgMwotI2RlZmluZSBDQ01fUENDUjBfU0RIQzNfTUFTSyAgICAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIENDTV9QQ0NSMF9TTENEQ19PRkZTRVQgICAgICAgICAgMgotI2RlZmluZSBDQ01fUENDUjBfU0xDRENfTUFTSyAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIENDTV9QQ0NSMF9TU0kxX0lQR19PRkZTRVQgICAgICAgMQotI2RlZmluZSBDQ01fUENDUjBfU1NJMV9JUEdfTUFTSyAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIENDTV9QQ0NSMF9TU0kyX0lQR19PRkZTRVQgICAgICAgMAotI2RlZmluZSBDQ01fUENDUjBfU1NJMl9JUEdfTUFTSyAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfQ1NJX09GRlNFVCAgICAgICAJMzEKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19DU0lfUkVHCSAgICAgICAgQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfRE1BX09GRlNFVCAgICAgICAJMzAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19ETUFfUkVHCSAgICAgICAgQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfQlJPTV9PRkZTRVQgICAgICAJMjgKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19CUk9NX1JFRwkgICAgICAgIENDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0VNTUFfT0ZGU0VUICAgICAgCTI3CisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfRU1NQV9SRUcJICAgICAgICBDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19MQ0RDX09GRlNFVCAgICAgIAkyNgorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0xDRENfUkVHCSAgICAgICAgQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfU0xDRENfT0ZGU0VUICAgICAJMjUKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19TTENEQ19SRUcJICAgICAgICBDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19VU0JPVEdfT0ZGU0VUICAgIAkyNAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX1VTQk9UR19SRUcJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfQk1JX09GRlNFVCAgICAJMjMKKyNkZWZpbmUgQ0NNX1BDQ1JfQk1JX01BU0sgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0JNSV9NQVNLKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0JNSV9SRUcJICAgIAlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfUEVSQ0xLNF9PRkZTRVQgICAgICAgIAkyMgorI2RlZmluZSBDQ01fUENDUl9QRVJDTEs0X1JFRwkgICAgCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TTENEQ19PRkZTRVQgICAgICAgICAgCTIxCisjZGVmaW5lIENDTV9QQ0NSX1NMQ0RDX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0ZJUklfQkFVRF9PRkZTRVQgICAgICAgMjAKKyNkZWZpbmUgQ0NNX1BDQ1JfRklSSV9CQVVEX01BU0sgICAgICAgICAoMSA8PCBDQ01fUENDUl9GSVJJX0JBVURfTUFTSykKKyNkZWZpbmUgQ0NNX1BDQ1JfRklSSV9CQVVEX1JFRwkgICAgICAgIENDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9ORkNfT0ZGU0VUCQkxOQorI2RlZmluZSBDQ01fUENDUl9ORkNfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfTENEQ19PRkZTRVQgICAgICAgICAgIAkxOAorI2RlZmluZSBDQ01fUENDUl9MQ0RDX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1NTSTFfQkFVRF9PRkZTRVQgICAgICAJMTcKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMV9CQVVEX1JFRwkgICAgCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TU0kyX0JBVURfT0ZGU0VUICAgICAgCTE2CisjZGVmaW5lIENDTV9QQ0NSX1NTSTJfQkFVRF9SRUcJICAgIAlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfRU1NQV9PRkZTRVQgICAgICAgICAgIAkxNQorI2RlZmluZSBDQ01fUENDUl9FTU1BX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1VTQk9UR19PRkZTRVQgICAgICAgICAJMTQKKyNkZWZpbmUgQ0NNX1BDQ1JfVVNCT1RHX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0RNQV9PRkZTRVQgICAgICAgICAgICAJMTMKKyNkZWZpbmUgQ0NNX1BDQ1JfRE1BX1JFRyAgICAgICAgICAgIAlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSTJDMV9PRkZTRVQgICAgICAgICAgIAkxMgorI2RlZmluZSBDQ01fUENDUl9JMkMxX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0dQSU9fT0ZGU0VUICAgICAgICAgICAJMTEKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BJT19SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TREhDMl9PRkZTRVQgICAgICAgICAgCTEwCisjZGVmaW5lIENDTV9QQ0NSX1NESEMyX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1NESEMxX09GRlNFVCAgICAgICAgICAJOQorI2RlZmluZSBDQ01fUENDUl9TREhDMV9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9GSVJJX09GRlNFVAkJOAorI2RlZmluZSBDQ01fUENDUl9GSVJJX01BU0sJCSgxIDw8IENDTV9QQ0NSX0JBVURfTUFTSykKKyNkZWZpbmUgQ0NNX1BDQ1JfRklSSV9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TU0kyX0lQR19PRkZTRVQgICAgICAgCTcKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMl9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TU0kxX0lQR19PRkZTRVQgICAgICAgCTYKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMV9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9DU1BJMl9PRkZTRVQJCTUKKyNkZWZpbmUJQ0NNX1BDQ1JfQ1NQSTJfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfQ1NQSTFfT0ZGU0VUCQk0CisjZGVmaW5lCUNDTV9QQ0NSX0NTUEkxX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQ0X09GRlNFVCAgICAgICAgICAJMworI2RlZmluZSBDQ01fUENDUl9VQVJUNF9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9VQVJUM19PRkZTRVQgICAgICAgICAgCTIKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDNfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDJfT0ZGU0VUICAgICAgICAgIAkxCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQyX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQxX09GRlNFVCAgICAgICAgICAJMAorI2RlZmluZSBDQ01fUENDUl9VQVJUMV9SRUcJCUNDTV9QQ0NSMAogCi0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUMV9PRkZTRVQgICAgICAgICAgMzEKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQxX01BU0sgICAgICAgICAgICAoMSA8PCAzMSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQyX09GRlNFVCAgICAgICAgICAzMAotI2RlZmluZSBDQ01fUENDUjFfVUFSVDJfTUFTSyAgICAgICAgICAgICgxIDw8IDMwKQotI2RlZmluZSBDQ01fUENDUjFfVUFSVDNfT0ZGU0VUICAgICAgICAgIDI5Ci0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUM19NQVNLICAgICAgICAgICAgKDEgPDwgMjkpCi0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUNF9PRkZTRVQgICAgICAgICAgMjgKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQ0X01BU0sgICAgICAgICAgICAoMSA8PCAyOCkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VBUlQ1X09GRlNFVCAgICAgICAgICAyNwotI2RlZmluZSBDQ01fUENDUjFfVUFSVDVfTUFTSyAgICAgICAgICAgICgxIDw8IDI3KQotI2RlZmluZSBDQ01fUENDUjFfVUFSVDZfT0ZGU0VUICAgICAgICAgIDI2Ci0jZGVmaW5lIENDTV9QQ0NSMV9VQVJUNl9NQVNLICAgICAgICAgICAgKDEgPDwgMjYpCi0jZGVmaW5lIENDTV9QQ0NSMV9VU0JPVEdfT0ZGU0VUICAgICAgICAgMjUKLSNkZWZpbmUgQ0NNX1BDQ1IxX1VTQk9UR19NQVNLICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1dEVF9PRkZTRVQgICAgICAgICAgICAyNAotI2RlZmluZSBDQ01fUENDUjFfV0RUX01BU0sgICAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBDQ01fUENDUjFfSENMS19BVEFfT0ZGU0VUICAgICAgIDIzCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0FUQV9NQVNLICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0JST01fT0ZGU0VUICAgICAgMjIKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfQlJPTV9NQVNLICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfQ1NJX09GRlNFVCAgICAgICAyMQotI2RlZmluZSBDQ01fUENDUjFfSENMS19DU0lfTUFTSyAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBDQ01fUENDUjFfSENMS19ETUFfT0ZGU0VUICAgICAgIDIwCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0RNQV9NQVNLICAgICAgICAgKDEgPDwgMjApCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0VNSV9PRkZTRVQgICAgICAgMTkKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfRU1JX01BU0sgICAgICAgICAoMSA8PCAxOSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfRU1NQV9PRkZTRVQgICAgICAxOAotI2RlZmluZSBDQ01fUENDUjFfSENMS19FTU1BX01BU0sgICAgICAgICgxIDw8IDE4KQotI2RlZmluZSBDQ01fUENDUjFfSENMS19GRUNfT0ZGU0VUICAgICAgIDE3Ci0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX0ZFQ19NQVNLICAgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX1ZQVV9PRkZTRVQgICAgICAgMTYKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfVlBVX01BU0sgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfTENEQ19PRkZTRVQgICAgICAxNQotI2RlZmluZSBDQ01fUENDUjFfSENMS19MQ0RDX01BU0sgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBDQ01fUENDUjFfSENMS19SVElDX09GRlNFVCAgICAgIDE0Ci0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX1JUSUNfTUFTSyAgICAgICAgKDEgPDwgMTQpCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX1NBSEFSQV9PRkZTRVQgICAgMTMKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfU0FIQVJBX01BU0sgICAgICAoMSA8PCAxMykKLSNkZWZpbmUgQ0NNX1BDQ1IxX0hDTEtfU0xDRENfT0ZGU0VUICAgICAxMgotI2RlZmluZSBDQ01fUENDUjFfSENMS19TTENEQ19NQVNLICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBDQ01fUENDUjFfSENMS19VU0JPVEdfT0ZGU0VUICAgIDExCi0jZGVmaW5lIENDTV9QQ0NSMV9IQ0xLX1VTQk9UR19NQVNLICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIENDTV9QQ0NSMV9QRVJDTEsxX09GRlNFVCAgICAgICAgMTAKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzFfTUFTSyAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzJfT0ZGU0VUICAgICAgICA5Ci0jZGVmaW5lIENDTV9QQ0NSMV9QRVJDTEsyX01BU0sgICAgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzNfT0ZGU0VUICAgICAgICA4Ci0jZGVmaW5lIENDTV9QQ0NSMV9QRVJDTEszX01BU0sgICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1BFUkNMSzRfT0ZGU0VUICAgICAgICA3Ci0jZGVmaW5lIENDTV9QQ0NSMV9QRVJDTEs0X01BU0sgICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgQ0NNX1BDQ1IxX1ZQVV9CQVVEX09GRlNFVCAgICAgICA2Ci0jZGVmaW5lIENDTV9QQ0NSMV9WUFVfQkFVRF9NQVNLICAgICAgICAgKDEgPDwgNikKLSNkZWZpbmUgQ0NNX1BDQ1IxX1NTSTFfQkFVRF9PRkZTRVQgICAgICA1Ci0jZGVmaW5lIENDTV9QQ0NSMV9TU0kxX0JBVURfTUFTSyAgICAgICAgKDEgPDwgNSkKLSNkZWZpbmUgQ0NNX1BDQ1IxX1NTSTJfQkFVRF9PRkZTRVQgICAgICA0Ci0jZGVmaW5lIENDTV9QQ0NSMV9TU0kyX0JBVURfTUFTSyAgICAgICAgKDEgPDwgNCkKLSNkZWZpbmUgQ0NNX1BDQ1IxX05GQ19CQVVEX09GRlNFVCAgICAgICAzCi0jZGVmaW5lIENDTV9QQ0NSMV9ORkNfQkFVRF9NQVNLICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgQ0NNX1BDQ1IxX01TSENfQkFVRF9PRkZTRVQgICAgICAyCi0jZGVmaW5lIENDTV9QQ0NSMV9NU0hDX0JBVURfTUFTSyAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgQ0NNX1BDQ1JfT1dJUkVfT0ZGU0VUICAgICAgICAgIAkzMQorI2RlZmluZSBDQ01fUENDUl9PV0lSRV9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9LUFBfT0ZGU0VUICAgICAgICAgICAgCTMwCisjZGVmaW5lIENDTV9QQ0NSX0tQUF9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9SVENfT0ZGU0VUICAgICAgICAgICAgCTI5CisjZGVmaW5lIENDTV9QQ0NSX1JUQ19SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9QV01fT0ZGU0VUICAgICAgICAgICAgCTI4CisjZGVmaW5lIENDTV9QQ0NSX1BXTV9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9HUFQzX09GRlNFVCAgICAgICAgICAgCTI3CisjZGVmaW5lIENDTV9QQ0NSX0dQVDNfUkVHCQlDQ01fUENDUjEKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BUMl9PRkZTRVQgICAgICAgICAgIAkyNgorI2RlZmluZSBDQ01fUENDUl9HUFQyX1JFRwkJQ0NNX1BDQ1IxCisjZGVmaW5lIENDTV9QQ0NSX0dQVDFfT0ZGU0VUICAgICAgICAgICAJMjUKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BUMV9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9XRFRfT0ZGU0VUICAgICAgICAgICAgCTI0CisjZGVmaW5lIENDTV9QQ0NSX1dEVF9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9DU1BJM19PRkZTRVQJCTIzCisjZGVmaW5lCUNDTV9QQ0NSX0NTUEkzX1JFRwkJQ0NNX1BDQ1IxCisKKyNkZWZpbmUgQ0NNX1BDQ1JfQ1NQSTFfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9DU1BJMV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0NTUEkyX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfQ1NQSTJfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9DU1BJM19NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0NTUEkzX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfRE1BX01BU0sgICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9ETUFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9FTU1BX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0VNTUFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUElPX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQSU9fT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUFQxX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQVDFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUFQyX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQVDJfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUFQzX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQVDNfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0JST01fTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfSENMS19CUk9NX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19DU0lfTUFTSyAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9IQ0xLX0NTSV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfRE1BX01BU0sgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfSENMS19ETUFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0VNTUFfTUFTSyAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0hDTEtfRU1NQV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfTENEQ19NQVNLICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfSENMS19MQ0RDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19TTENEQ19NQVNLICAgICAgIAkoMSA8PCBDQ01fUENDUl9IQ0xLX1NMQ0RDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19VU0JPVEdfTUFTSyAgICAgIAkoMSA8PCBDQ01fUENDUl9IQ0xLX1VTQk9UR19PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0kyQzFfTUFTSyAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfSTJDMV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0tQUF9NQVNLICAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfS1BQX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfTENEQ19NQVNLICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9MQ0RDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfTkZDX01BU0sJCSgxIDw8IENDTV9QQ0NSX05GQ19PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX09XSVJFX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfT1dJUkVfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9QRVJDTEs0X01BU0sgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1BFUkNMSzRfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9QV01fTUFTSyAgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1BXTV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1JUQ19NQVNLICAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfUlRDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfU0RIQzFfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9TREhDMV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1NESEMyX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfU0RIQzJfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9TTENEQ19NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NMQ0RDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMV9CQVVEX01BU0sgICAgICAgIAkoMSA8PCBDQ01fUENDUl9TU0kxX0JBVURfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9TU0kxX0lQR19NQVNLICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NTSTFfSVBHX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMl9CQVVEX01BU0sgICAgICAgIAkoMSA8PCBDQ01fUENDUl9TU0kyX0JBVURfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9TU0kyX0lQR19NQVNLICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NTSTJfSVBHX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDFfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9VQVJUMV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQyX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfVUFSVDJfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9VQVJUM19NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1VBUlQzX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDRfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9VQVJUNF9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1VTQk9UR19NQVNLICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfVVNCT1RHX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfV0RUX01BU0sgICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9XRFRfT0ZGU0VUKQorCiAKICNkZWZpbmUgQ0NNX0NDU1JfMzJLU1IgICAgICAgICAgKDEgPDwgMTUpCisKICNkZWZpbmUgQ0NNX0NDU1JfQ0xLTU9ERTEgICAgICAgKDEgPDwgOSkKICNkZWZpbmUgQ0NNX0NDU1JfQ0xLTU9ERTAgICAgICAgKDEgPDwgOCkKKwogI2RlZmluZSBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVCAwCiAjZGVmaW5lIENDTV9DQ1NSX0NMS09TRUxfTUFTSyAgIDB4MWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jCmluZGV4IDJmOTI0MGIuLmEwZjFiMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmMKQEAgLTM0LDYgKzM0LDEwIEBACiAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgogCiAvKgogICogUmVzb3VyY2UgZGVmaW5pdGlvbiBmb3IgdGhlIE1YQyBJckRBCkBAIC0yMjUsMzcgKzIyOSwyMTUgQEAKIAkucmVzb3VyY2UgPSBteGNfbmFuZF9yZXNvdXJjZXMsCiB9OwogCisvKgorICogbGNkYzoKKyAqIC0gaS5NWDE6IHRoZSBiYXNpYyBjb250cm9sbGVyCisgKiAtIGkuTVgyMTogdG8gYmUgY2hlY2tlZAorICogLSBpLk1YMjc6IGxpa2UgaS5NWDEsIHdpdGggc2xpZ2h0bHkgdmFyaWF0aW9ucworICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mYltdID0geworCXsKKwkJLnN0YXJ0ID0gTENEQ19CQVNFX0FERFIsCisJCS5lbmQgICA9IExDRENfQkFTRV9BRERSICsgMHhGRkYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQgPSBNWENfSU5UX0xDREMsCisJCS5lbmQgICA9IE1YQ19JTlRfTENEQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworLyogbXhjIGxjZCBkcml2ZXIgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2ZiX2RldmljZSA9IHsKKwkubmFtZSA9ICJpbXgtZmIiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19mYiksCisJLnJlc291cmNlID0gbXhjX2ZiLAorCS5kZXYgPSB7CisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4RkZGRkZGRkYsCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBGRUNfQkFTRV9BRERSLAorCQkuZW5kCT0gRkVDX0JBU0VfQUREUiArIDB4ZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sIHsKKwkJLnN0YXJ0CT0gTVhDX0lOVF9GRUMsCisJCS5lbmQJPSBNWENfSU5UX0ZFQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmVjX2RldmljZSA9IHsKKwkubmFtZSA9ICJmZWMiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfZmVjX3Jlc291cmNlcywKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjXzFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJMkNfQkFTRV9BRERSLAorCQkuZW5kCT0gSTJDX0JBU0VfQUREUiArIDB4MGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gTVhDX0lOVF9JMkMsCisJCS5lbmQJPSBNWENfSU5UX0kyQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMCA9IHsKKwkubmFtZSA9ICJpbXgtaTJjIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjXzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfaTJjXzFfcmVzb3VyY2VzCit9OworCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjXzJfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJMkMyX0JBU0VfQUREUiwKKwkJLmVuZAk9IEkyQzJfQkFTRV9BRERSICsgMHgwZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBNWENfSU5UX0kyQzIsCisJCS5lbmQJPSBNWENfSU5UX0kyQzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTEgPSB7CisJLm5hbWUgPSAiaW14LWkyYyIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyY18yX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2kyY18yX3Jlc291cmNlcworfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19wd21fcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBQV01fQkFTRV9BRERSLAorCQkuZW5kCT0gUFdNX0JBU0VfQUREUiArIDB4MGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0KKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICAgPSBNWENfSU5UX1BXTSwKKwkJLmVuZCAgICAgPSBNWENfSU5UX1BXTSwKKwkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlID0geworCS5uYW1lID0gIm14Y19wd20iLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19wd21fcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfcHdtX3Jlc291cmNlcworfTsKKworLyoKKyAqIFJlc291cmNlIGRlZmluaXRpb24gZm9yIHRoZSBNWEMgU0RIQworICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjMV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCQkuc3RhcnQgPSBTREhDMV9CQVNFX0FERFIsCisJCQkuZW5kICAgPSBTREhDMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJWzFdID0geworCQkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMSwKKwkJCS5lbmQgICA9IE1YQ19JTlRfU0RIQzEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJWzJdID0geworCQkJLnN0YXJ0ICA9IERNQV9SRVFfU0RIQzEsCisJCQkuZW5kICAgID0gRE1BX1JFUV9TREhDMSwKKwkJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQQorCQl9LAorfTsKKworc3RhdGljIHU2NCBteGNfc2RoYzFfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UwID0geworICAgICAgIC5uYW1lICAgICAgICAgICA9ICJteGMtbW1jIiwKKyAgICAgICAuaWQgICAgICAgICAgICAgPSAwLAorICAgICAgIC5kZXYgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgICAgIC5kbWFfbWFzayA9ICZteGNfc2RoYzFfZG1hbWFzaywKKyAgICAgICAgICAgICAgIC5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisgICAgICAgfSwKKyAgICAgICAubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG14Y19zZGhjMV9yZXNvdXJjZXMpLAorICAgICAgIC5yZXNvdXJjZSAgICAgICA9IG14Y19zZGhjMV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjMl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCQkuc3RhcnQgPSBTREhDMl9CQVNFX0FERFIsCisJCQkuZW5kICAgPSBTREhDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJWzFdID0geworCQkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMiwKKwkJCS5lbmQgICA9IE1YQ19JTlRfU0RIQzIsCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwkJCX0sCisJWzJdID0geworCQkJLnN0YXJ0ICA9IERNQV9SRVFfU0RIQzIsCisJCQkuZW5kICAgID0gRE1BX1JFUV9TREhDMiwKKwkJCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQQorCQl9LAorfTsKKworc3RhdGljIHU2NCBteGNfc2RoYzJfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UxID0geworICAgICAgIC5uYW1lICAgICAgICAgICA9ICJteGMtbW1jIiwKKyAgICAgICAuaWQgICAgICAgICAgICAgPSAxLAorICAgICAgIC5kZXYgICAgICAgICAgICA9IHsKKyAgICAgICAgICAgICAgIC5kbWFfbWFzayA9ICZteGNfc2RoYzJfZG1hbWFzaywKKyAgICAgICAgICAgICAgIC5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisgICAgICAgfSwKKyAgICAgICAubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG14Y19zZGhjMl9yZXNvdXJjZXMpLAorICAgICAgIC5yZXNvdXJjZSAgICAgICA9IG14Y19zZGhjMl9yZXNvdXJjZXMsCit9OworCiAvKiBHUElPIHBvcnQgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXhfZ3Bpb19wb3J0c1tdID0gewogCVswXSA9IHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby0wIiwKIAkJLmlycSA9IE1YQ19JTlRfR1BJTywKLQkJLmJhc2UgPSAodm9pZCopKEFJUElfQkFTRV9BRERSX1ZJUlQgKyAweDE1MDAwICsgMHgxMDAgKiAwKSwKKwkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSKSwKIAkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAogCX0sCiAJWzFdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTEiLAotCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDEpLAorCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDEwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDMyLAogCX0sCiAJWzJdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTIiLAotCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDIpLAorCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDIwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDY0LAogCX0sCiAJWzNdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTMiLAotCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDMpLAorCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDMwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2LAogCX0sCiAJWzRdID0gewogCQkuY2hpcC5sYWJlbCA9ICJncGlvLTQiLAotCQkuYmFzZSA9ICh2b2lkKikoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MTUwMDAgKyAweDEwMCAqIDQpLAorCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDQwMCksCiAJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDEyOCwKIAl9LAogCVs1XSA9IHsKIAkJLmNoaXAubGFiZWwgPSAiZ3Bpby01IiwKLQkJLmJhc2UgPSAodm9pZCopKEFJUElfQkFTRV9BRERSX1ZJUlQgKyAweDE1MDAwICsgMHgxMDAgKiA1KSwKKwkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHg1MDApLAogCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAxNjAsCiAJfQogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaAppbmRleCAxZThjYjU3Li4wNDkwMDViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oCkBAIC0xLDQgKzEsMyBAQAotCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0MTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQyOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDM7CkBAIC0xNCwzICsxMywxMCBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlNTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193MV9tYXN0ZXJfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX25hbmRfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2ZiX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19mZWNfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3B3bV9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NkaGNfZGV2aWNlMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2dlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2dlbmVyaWMuYwppbmRleCBkZWE2NTIxLi5iZDUxZGQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZ2VuZXJpYy5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2Fkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2Fkcy5jCmluZGV4IDJiNWM2N2YuLjRhM2IwOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9teDI3YWRzLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC1teDEtbXgyLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyN2Fkcy5oPgogCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgpAQCAtMTM1LDYgKzEzNSw3IEBACiB7CiAJbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKG14Y191YXJ0M19waW5zLAogCQkJQVJSQVlfU0laRShteGNfdWFydDNfcGlucykpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG14Y191YXJ0NF9waW5zW10gPSB7CkBAIC0xNzksNiArMTgwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZteDI3YWRzX25vcl9tdGRfZGV2aWNlLAorCSZteGNfZmVjX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgbXhjX2ZlY19waW5zW10gPSB7CkBAIC0xOTYsNyArMTk4LDcgQEAKIAlQRDExX0FPVVRfRkVDX1RYX0NMSywKIAlQRDEyX0FPVVRfRkVDX1JYRDAsCiAJUEQxM19BT1VUX0ZFQ19SWF9EViwKLQlQRDE0X0FPVVRfRkVDX0NMUiwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKIAlQRDE1X0FPVVRfRkVDX0NPTCwKIAlQRDE2X0FJTl9GRUNfVFhfRVIsCiAJUEYyM19BSU5fRkVDX1RYX0VOCkBAIC0yMDgsMTIgKzIxMCw2IEBACiAJCQlBUlJBWV9TSVpFKG14Y19mZWNfcGlucyksICJGRUMiKTsKIH0KIAotc3RhdGljIHZvaWQgZ3Bpb19mZWNfaW5hY3RpdmUodm9pZCkKLXsKLQlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX2ZlY19waW5zLAotCQkJQVJSQVlfU0laRShteGNfZmVjX3BpbnMpKTsKLX0KLQogc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YVtdID0gewogCXsKIAkJLmluaXQgPSB1YXJ0X214Y19wb3J0MF9pbml0LApAQCAtMjYzLDExICsyNTksMTAgQEAKIAlpZiAoKF9fcmF3X3JlYWR3KFBCQ19WRVJTSU9OX1JFRykgJiBDS0lIXzI3TUhaX0JJVF9TRVQpID09IDApCiAJCWZyZWYgPSAyNzAwMDAwMDsKIAotCW14Y19jbG9ja3NfaW5pdChmcmVmKTsKLQlteGNfdGltZXJfaW5pdCgiZ3B0X2Nsay4wIik7CisJbXgyN19jbG9ja3NfaW5pdChmcmVmKTsKIH0KIAotc3RydWN0IHN5c190aW1lciBteDI3YWRzX3RpbWVyID0geworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgyN2Fkc190aW1lciA9IHsKIAkuaW5pdAk9IG14MjdhZHNfdGltZXJfaW5pdCwKIH07CiAKQEAgLTI4MCw3ICsyNzUsNyBAQAogCX0sCiB9OwogCi12b2lkIF9faW5pdCBteDI3YWRzX21hcF9pbyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG14MjdhZHNfbWFwX2lvKHZvaWQpCiB7CiAJbXhjX21hcF9pbygpOwogCWlvdGFibGVfaW5pdChteDI3YWRzX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgyN2Fkc19pb19kZXNjKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY20wMzguYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCmluZGV4IGRmZDQxNTYuLmFhNGVhYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jCkBAIC0yMCwxMSArMjAsMTggQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgxLW14Mi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKyNpZmRlZiBDT05GSUdfSTJDX0lNWAorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjZW5kaWYKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGNtMDM4Lmg+CkBAIC0xMjEsMTAgKzEyOCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG14Y191YXJ0Ml9waW5zW10gPSB7IFBFMTBfUEZfVUFSVDNfQ1RTLAorc3RhdGljIGludCBteGNfdWFydDJfcGluc1tdID0geyBQRThfUEZfVUFSVDNfVFhELAogCQkJCVBFOV9QRl9VQVJUM19SWEQsCiAJCQkJUEUxMF9QRl9VQVJUM19DVFMsCi0JCQkJUEU5X1BGX1VBUlQzX1JYRCB9OworCQkJCVBFMTFfUEZfVUFSVDNfUlRTIH07CiAKIHN0YXRpYyBpbnQgdWFydF9teGNfcG9ydDJfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtMTcwLDcgKzE3Nyw3IEBACiAJUEQxMV9BT1VUX0ZFQ19UWF9DTEssCiAJUEQxMl9BT1VUX0ZFQ19SWEQwLAogCVBEMTNfQU9VVF9GRUNfUlhfRFYsCi0JUEQxNF9BT1VUX0ZFQ19DTFIsCisJUEQxNF9BT1VUX0ZFQ19SWF9DTEssCiAJUEQxNV9BT1VUX0ZFQ19DT0wsCiAJUEQxNl9BSU5fRkVDX1RYX0VSLAogCVBGMjNfQUlOX0ZFQ19UWF9FTgpAQCAtMTgyLDEyICsxODksNiBAQAogCQkJQVJSQVlfU0laRShteGNfZmVjX3BpbnMpLCAiRkVDIik7CiB9CiAKLXN0YXRpYyB2b2lkIGdwaW9fZmVjX2luYWN0aXZlKHZvaWQpCi17Ci0JbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKG14Y19mZWNfcGlucywKLQkJCUFSUkFZX1NJWkUobXhjX2ZlY19waW5zKSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBwY20wMzhfbmFuZF9ib2FyZF9pbmZvID0gewogCS53aWR0aCA9IDEsCiAJLmh3X2VjYyA9IDEsCkBAIC0xOTYsNiArMTk3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmcGNtMDM4X25vcl9tdGRfZGV2aWNlLAogCSZteGNfdzFfbWFzdGVyX2RldmljZSwKKwkmbXhjX2ZlY19kZXZpY2UsCiAJJnBjbTAzOF9zcmFtX210ZF9kZXZpY2UsCiB9OwogCkBAIC0yMDgsNiArMjEwLDUxIEBACiAJX19yYXdfd3JpdGVsKDB4MjIyMjBhMDAsIENTQ1JfQSgxKSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfSTJDX0lNWAorc3RhdGljIGludCBteGNfaTJjMV9waW5zW10gPSB7CisJUEM1X1BGX0kyQzJfU0RBLAorCVBDNl9QRl9JMkMyX1NDTAorfTsKKworc3RhdGljIGludCBwY20wMzhfaTJjXzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX2kyYzFfcGlucywgQVJSQVlfU0laRShteGNfaTJjMV9waW5zKSwKKwkJCSJJMkMxIik7Cit9CisKK3N0YXRpYyB2b2lkIHBjbTAzOF9pMmNfMV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX2kyYzFfcGlucywgQVJSQVlfU0laRShteGNfaTJjMV9waW5zKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgcGNtMDM4X2kyY18xX2RhdGEgPSB7CisJLmJpdHJhdGUgPSAxMDAwMDAsCisJLmluaXQgPSBwY20wMzhfaTJjXzFfaW5pdCwKKwkuZXhpdCA9IHBjbTAzOF9pMmNfMV9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYm9hcmRfZWVwcm9tID0geworCS5ieXRlX2xlbiA9IDQwOTYsCisJLnBhZ2Vfc2l6ZSA9IDMyLAorCS5mbGFncyA9IEFUMjRfRkxBR19BRERSMTYsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHBjbTAzOF9pMmNfZGV2aWNlc1tdID0geworCVswXSA9IHsKKwkJSTJDX0JPQVJEX0lORk8oImF0MjQiLCAweDUyKSwgLyogRTA9MCwgRTE9MSwgRTI9MCAqLworCQkucGxhdGZvcm1fZGF0YSA9ICZib2FyZF9lZXByb20sCisJfSwKKwlbMV0gPSB7CisJCUkyQ19CT0FSRF9JTkZPKCJydGMtcGNmODU2MyIsIDB4NTEpLAorCQkudHlwZSA9ICJwY2Y4NTYzIgorCX0sCisJWzJdID0geworCQlJMkNfQk9BUkRfSU5GTygibG03NSIsIDB4NGEpLAorCQkudHlwZSA9ICJsbTc1IgorCX0KK307CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF9pbml0KHZvaWQpCiB7CiAJZ3Bpb19mZWNfYWN0aXZlKCk7CkBAIC0yMTcsOSArMjY0LDE3IEBACiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGFbMV0pOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X3BkYXRhWzJdKTsKIAotCW14Y19ncGlvX21vZGUoUEUxNl9BRl9SVENLKTsgLyogT1dJUkUgKi8KKwlteGNfZ3Bpb19tb2RlKFBFMTZfQUZfT1dJUkUpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJnBjbTAzOF9uYW5kX2JvYXJkX2luZm8pOwogCisjaWZkZWYgQ09ORklHX0kyQ19JTVgKKwkvKiBvbmx5IHRoZSBpMmMgbWFzdGVyIDEgaXMgdXNlZCBvbiB0aGlzIENQVSBjYXJkICovCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgcGNtMDM4X2kyY19kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUocGNtMDM4X2kyY19kZXZpY2VzKSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsICZwY20wMzhfaTJjXzFfZGF0YSk7CisjZW5kaWYKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOwogCiAjaWZkZWYgQ09ORklHX01BQ0hfUENNOTcwX0JBU0VCT0FSRApAQCAtMjI5LDExICsyODQsMTAgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF90aW1lcl9pbml0KHZvaWQpCiB7Ci0JbXhjX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLQlteGNfdGltZXJfaW5pdCgiZ3B0X2Nsay4wIik7CisJbXgyN19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CiB9CiAKLXN0cnVjdCBzeXNfdGltZXIgcGNtMDM4X3RpbWVyID0geworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgcGNtMDM4X3RpbWVyID0gewogCS5pbml0ID0gcGNtMDM4X3RpbWVyX2luaXQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKaW5kZXggYTU2MGNkNi4uYmY0ZTUyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYwpAQCAtMTcsOSArMTcsMTM4IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvaW14ZmIuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBpbnQgcGNtOTcwX3NkaGMyX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fUE9SVEMgKyAyOCk7Cit9CisKK3N0YXRpYyBpbnQgcGNtOTcwX3NkaGMyX3BpbnNbXSA9IHsKKwlQQjRfUEZfU0QyX0QwLAorCVBCNV9QRl9TRDJfRDEsCisJUEI2X1BGX1NEMl9EMiwKKwlQQjdfUEZfU0QyX0QzLAorCVBCOF9QRl9TRDJfQ01ELAorCVBCOV9QRl9TRDJfQ0xLLAorfTsKKworc3RhdGljIGludCBwY205NzBfc2RoYzJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhwY205NzBfc2RoYzJfcGlucywKKwkJQVJSQVlfU0laRShwY205NzBfc2RoYzJfcGlucyksICJzZGhjMiIpOworCWlmKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHJlcXVlc3RfaXJxKElSUV9HUElPQygyOSksIGRldGVjdF9pcnEsIDAsCisJCQkJImlteC1tbWMtZGV0ZWN0IiwgZGF0YSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcmVsZWFzZV9ncGlvOworCisJc2V0X2lycV90eXBlKElSUV9HUElPQygyOSksIElSUUZfVFJJR0dFUl9GQUxMSU5HKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1BPUlRDICsgMjgsICJpbXgtbW1jLXJvIik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfcmVsZWFzZV9ncGlvOworCisJbXhjX2dwaW9fbW9kZSgoR1BJT19QT1JUQyB8IDI4KSB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUE9SVEMgKyAyOCk7CisKKwlyZXR1cm4gMDsKKworb3V0X3JlbGVhc2VfZ3BpbzoKKwlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMocGNtOTcwX3NkaGMyX3BpbnMsCisJCQlBUlJBWV9TSVpFKHBjbTk3MF9zZGhjMl9waW5zKSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcGNtOTcwX3NkaGMyX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKElSUV9HUElPQygyOSksIGRhdGEpOworCWdwaW9fZnJlZShHUElPX1BPUlRDICsgMjgpOworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhwY205NzBfc2RoYzJfcGlucywKKwkJCUFSUkFZX1NJWkUocGNtOTcwX3NkaGMyX3BpbnMpKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhID0geworCS5nZXRfcm8gPSBwY205NzBfc2RoYzJfZ2V0X3JvLAorCS5pbml0ID0gcGNtOTcwX3NkaGMyX2luaXQsCisJLmV4aXQgPSBwY205NzBfc2RoYzJfZXhpdCwKK307CisKK3N0YXRpYyBpbnQgbXhjX2ZiX3BpbnNbXSA9IHsKKwlQQTVfUEZfTFNDTEssCVBBNl9QRl9MRDAsCVBBN19QRl9MRDEsCVBBOF9QRl9MRDIsCisJUEE5X1BGX0xEMywJUEExMF9QRl9MRDQsCVBBMTFfUEZfTEQ1LAlQQTEyX1BGX0xENiwKKwlQQTEzX1BGX0xENywJUEExNF9QRl9MRDgsCVBBMTVfUEZfTEQ5LAlQQTE2X1BGX0xEMTAsCisJUEExN19QRl9MRDExLAlQQTE4X1BGX0xEMTIsCVBBMTlfUEZfTEQxMywJUEEyMF9QRl9MRDE0LAorCVBBMjFfUEZfTEQxNSwJUEEyMl9QRl9MRDE2LAlQQTIzX1BGX0xEMTcsCVBBMjRfUEZfUkVWLAorCVBBMjVfUEZfQ0xTLAlQQTI2X1BGX1BTLAlQQTI3X1BGX1NQTF9TUFIsIFBBMjhfUEZfSFNZTkMsCisJUEEyOV9QRl9WU1lOQywJUEEzMF9QRl9DT05UUkFTVCwgUEEzMV9QRl9PRV9BQ0QKK307CisKK3N0YXRpYyBpbnQgcGNtMDM4X2ZiX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfZmJfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX2ZiX3BpbnMpLCAiRkIiKTsKK30KKworc3RhdGljIGludCBwY20wMzhfZmJfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfZmJfcGlucywgQVJSQVlfU0laRShteGNfZmJfcGlucykpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb25uZWN0ZWQgaXMgYSBwb3J0cmFpdCBTaGFycC1RVkdBIGRpc3BsYXkKKyAqIG9mIHR5cGU6IExRMDM1UTdESDA2CisgKi8KK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgcGNtMDM4X2ZiX2RhdGEgPSB7CisJLnBpeGNsb2NrCT0gMTg4Njc5LCAvKiBpbiBwcyAoNS4zTUh6KSAqLworCS54cmVzCQk9IDI0MCwKKwkueXJlcwkJPSAzMjAsCisKKwkuYnBwCQk9IDE2LAorCS5oc3luY19sZW4JPSA3LAorCS5sZWZ0X21hcmdpbgk9IDUsCisJLnJpZ2h0X21hcmdpbgk9IDE2LAorCisJLnZzeW5jX2xlbgk9IDEsCisJLnVwcGVyX21hcmdpbgk9IDcsCisJLmxvd2VyX21hcmdpbgk9IDksCisJLmZpeGVkX3NjcmVlbl9jcHUgPSAwLAorCisJLyoKKwkgKiAtIEhTWU5DIGFjdGl2ZSBoaWdoCisJICogLSBWU1lOQyBhY3RpdmUgaGlnaAorCSAqIC0gY2xrIG5vdGVuYWJsZWQgd2hpbGUgaWRsZQorCSAqIC0gY2xvY2sgbm90IGludmVydGVkCisJICogLSBkYXRhIG5vdCBpbnZlcnRlZAorCSAqIC0gZGF0YSBlbmFibGUgbG93IGFjdGl2ZQorCSAqIC0gZW5hYmxlIHNoYXJwIG1vZGUKKwkgKi8KKwkucGNyCQk9IDB4RkEwMDgwQzAsCisJLnB3bXIJCT0gMHgwMEE5MDNGRiwKKwkubHNjcjEJCT0gMHgwMDEyMDMwMCwKKwkuZG1hY3IJCT0gMHgwMDAyMDAxMCwKKworCS5pbml0ID0gcGNtMDM4X2ZiX2luaXQsCisJLmV4aXQgPSBwY20wMzhfZmJfZXhpdCwKK307CisKIC8qCiAgKiBzeXN0ZW0gaW5pdCBmb3IgYmFzZWJvYXJkIHVzYWdlLiBXaWxsIGJlIGNhbGxlZCBieSBwY20wMzggaW5pdC4KICAqCkBAIC0yOCw0ICsxNTcsNiBAQAogICovCiB2b2lkIF9faW5pdCBwY205NzBfYmFzZWJvYXJkX2luaXQodm9pZCkKIHsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmcGNtMDM4X2ZiX2RhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTEsICZzZGhjX3BkYXRhKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvc2VyaWFsLmMKaW5kZXggMTZkZWJjMi4uNDBhNDg1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvc2VyaWFsLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgImRldmljZXMuaCIKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MFtdID0gewogCXsKQEAgLTk5LDYgKzEwMCw3IEBACiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQzKSwKIH07CiAKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQ0W10gPSB7CiAJewogCQkuc3RhcnQgPSBVQVJUNV9CQVNFX0FERFIsCkBAIC0xMzYsMyArMTM4LDQgQEAKIAkucmVzb3VyY2UgPSB1YXJ0NSwKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDUpLAogfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvc3lzdGVtLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9zeXN0ZW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I4MjY5Ny4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9zeXN0ZW0uYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKLSAqIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAotICogQ29weXJpZ2h0IDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotCi0vKgotICogUHV0IHRoZSBDUFUgaW50byBpZGxlIG1vZGUuIEl0IGlzIGNhbGxlZCBieSBkZWZhdWx0X2lkbGUoKQotICogaW4gcHJvY2Vzcy5jIGZpbGUuCi0gKi8KLXZvaWQgYXJjaF9pZGxlKHZvaWQpCi17Ci0JLyoKLQkgKiBUaGlzIHNob3VsZCBkbyBhbGwgdGhlIGNsb2NrIHN3aXRjaGluZwotCSAqIGFuZCB3YWl0IGZvciBpbnRlcnJ1cHQgdHJpY2tzLgotCSAqLwotCWNwdV9kb19pZGxlKCk7Ci19Ci0KLSNkZWZpbmUgV0RPR19XQ1JfUkVHICAgICAgICAgICAgICAgICAgICBJT19BRERSRVNTKFdET0dfQkFTRV9BRERSKQotI2RlZmluZSBXRE9HX1dDUl9TUlMgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCi0KLS8qCi0gKiBSZXNldCB0aGUgc3lzdGVtLiBJdCBpcyBjYWxsZWQgYnkgbWFjaGluZV9yZXN0YXJ0KCkuCi0gKi8KLXZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCi17Ci0Jc3RydWN0IGNsayAqY2xrOwotCi0JY2xrID0gY2xrX2dldChOVUxMLCAid2RvZ19jbGsiKTsKLQlpZiAoIWNsaykgewotCQlwcmludGsoS0VSTl9FUlIiQ2Fubm90IGFjdGl2YXRlIHRoZSB3YXRjaGRvZy4gR2l2aW5nIHVwXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWNsa19lbmFibGUoY2xrKTsKLQotCS8qIEFzc2VydCBTUlMgc2lnbmFsICovCi0JX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KFdET0dfV0NSX1JFRykgJiB+V0RPR19XQ1JfU1JTLCBXRE9HX1dDUl9SRUcpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXgzL0tjb25maWcKaW5kZXggZTc5NjU5ZS4uZDYyMzU1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnCkBAIC0xLDIxICsxLDQwIEBACi1tZW51ICJNWDMgT3B0aW9ucyIKLQlkZXBlbmRzIG9uIEFSQ0hfTVgzCitpZiBBUkNIX01YMworCitjb25maWcgQVJDSF9NWDMxCisJYm9vbAorCitjb25maWcgQVJDSF9NWDM1CisJYm9vbAorCitjb21tZW50ICJNWDMgcGxhdGZvcm1zOiIKIAogY29uZmlnIE1BQ0hfTVgzMUFEUwogCWJvb2wgIlN1cHBvcnQgTVgzMUFEUyBwbGF0Zm9ybXMiCisJc2VsZWN0IEFSQ0hfTVgzMQogCWRlZmF1bHQgeQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgzMUFEUyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwogCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgogCitjb25maWcgTUFDSF9NWDMxQURTX1dNMTEzM19FVjEKKwlib29sICJTdXBwb3J0IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyAxMTMzLUVWMSBtb2R1bGUiCisJZGVwZW5kcyBvbiBNQUNIX01YMzFBRFMKKwlzZWxlY3QgTUZEX1dNODM1MF9DT05GSUdfTU9ERV8wCisJc2VsZWN0IE1GRF9XTTgzNTJfQ09ORklHX01PREVfMAorCWhlbHAKKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyAxMTMzLUVWMSBQTVUKKwkgIGFuZCBhdWRpbyBtb2R1bGUgZm9yIHRoZSBNWDMxQURTIHBsYXRmb3JtLgorCiBjb25maWcgTUFDSF9QQ00wMzcKLQlib29sICJTdXBwb3J0IFBoeXRlYyBwY20wMzcgcGxhdGZvcm1zIgorCWJvb2wgIlN1cHBvcnQgUGh5dGVjIHBjbTAzNyAoaS5NWDMxKSBwbGF0Zm9ybXMiCisJc2VsZWN0IEFSQ0hfTVgzMQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgUGh5dGVjIHBjbTAzNyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcwogCSAgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgogCiBjb25maWcgTUFDSF9NWDMxTElURQogCWJvb2wgIlN1cHBvcnQgTVgzMSBMSVRFS0lUIChMb2dpY1BEKSIKKwlzZWxlY3QgQVJDSF9NWDMxCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBNWDMxIExJVEVLSVQgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMKQEAgLTIzLDYgKzQyLDcgQEAKIAogY29uZmlnIE1BQ0hfTVgzMV8zRFMKIAlib29sICJTdXBwb3J0IE1YMzFQREsgKDNEUykiCisJc2VsZWN0IEFSQ0hfTVgzMQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgzMVBESyAoM0RTKSBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwpAQCAtMzAsMTAgKzUwLDE4IEBACiAKIGNvbmZpZyBNQUNIX01YMzFNT0JPQVJECiAJYm9vbCAiU3VwcG9ydCBteDMxbW9ib2FyZCBwbGF0Zm9ybXMgKEVQRkwgTW9ib3RzIGdyb3VwKSIKKwlzZWxlY3QgQVJDSF9NWDMxCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBteDMxbW9ib2FyZCBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwogCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgogCi1lbmRtZW51Citjb25maWcgTUFDSF9RT05HCisJYm9vbCAiU3VwcG9ydCBEYXZlL0RFTlggUW9uZ0VWQi1MSVRFIHBsYXRmb3JtIgorCXNlbGVjdCBBUkNIX01YMzEKKwlkZWZhdWx0IG4KKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIERhdmUvREVOWCBRb25nRVZCLUxJVEUgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMKKwkgIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KIAorZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKaW5kZXggNWExNTE1NDAuLjI3MmM4YTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL01ha2VmaWxlCkBAIC00LDkgKzQsMTMgQEAKIAogIyBPYmplY3QgZmlsZSBsaXN0cy4KIAotb2JqLXkJCQk6PSBtbS5vIGNsb2NrLm8gZGV2aWNlcy5vIGlvbXV4Lm8KK29iai15CQkJCTo9IG1tLm8gZGV2aWNlcy5vCitvYmotJChDT05GSUdfQVJDSF9NWDMxKQkJKz0gY2xvY2subyBpb211eC5vCitvYmotJChDT05GSUdfQVJDSF9NWDM1KQkJKz0gY2xvY2staW14MzUubwogb2JqLSQoQ09ORklHX01BQ0hfTVgzMUFEUykJKz0gbXgzMWFkcy5vCiBvYmotJChDT05GSUdfTUFDSF9NWDMxTElURSkJKz0gbXgzMWxpdGUubwogb2JqLSQoQ09ORklHX01BQ0hfUENNMDM3KQkrPSBwY20wMzcubwogb2JqLSQoQ09ORklHX01BQ0hfTVgzMV8zRFMpCSs9IG14MzFwZGsubwotb2JqLSQoQ09ORklHX01BQ0hfTVgzMU1PQk9BUkQpCSs9IG14MzFtb2JvYXJkLm8KK29iai0kKENPTkZJR19NQUNIX01YMzFNT0JPQVJEKQkrPSBteDMxbW9ib2FyZC5vIG14MzFtb2JvYXJkLWRldmJvYXJkLm8gXAorCQkJCSAgIG14MzFtb2JvYXJkLW1hcnhib3Qubworb2JqLSQoQ09ORklHX01BQ0hfUU9ORykJCSs9IHFvbmcubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNhMTEyZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisKKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisKKyNkZWZpbmUgQ0NNX0JBU0UJSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKQorCisjZGVmaW5lIENDTV9DQ01SICAgICAgICAweDAwCisjZGVmaW5lIENDTV9QRFIwICAgICAgICAweDA0CisjZGVmaW5lIENDTV9QRFIxICAgICAgICAweDA4CisjZGVmaW5lIENDTV9QRFIyICAgICAgICAweDBDCisjZGVmaW5lIENDTV9QRFIzICAgICAgICAweDEwCisjZGVmaW5lIENDTV9QRFI0ICAgICAgICAweDE0CisjZGVmaW5lIENDTV9SQ1NSICAgICAgICAweDE4CisjZGVmaW5lIENDTV9NUENUTCAgICAgICAweDFDCisjZGVmaW5lIENDTV9QUENUTCAgICAgICAweDIwCisjZGVmaW5lIENDTV9BQ01SICAgICAgICAweDI0CisjZGVmaW5lIENDTV9DT1NSICAgICAgICAweDI4CisjZGVmaW5lIENDTV9DR1IwICAgICAgICAweDJDCisjZGVmaW5lIENDTV9DR1IxICAgICAgICAweDMwCisjZGVmaW5lIENDTV9DR1IyICAgICAgICAweDM0CisjZGVmaW5lIENDTV9DR1IzICAgICAgICAweDM4CisKKyNpZmRlZiBIQVZFX1NFVF9SQVRFX1NVUFBPUlQKK3N0YXRpYyB2b2lkIGNhbGNfZGl2aWRlcnModTMyIGRpdiwgdTMyICpwcmUsIHUzMiAqcG9zdCwgdTMyIG1heHBvc3QpCit7CisJdTMyIG1pbl9wcmUsIHRlbXBfcHJlLCBvbGRfZXJyLCBlcnI7CisKKwltaW5fcHJlID0gKGRpdiAtIDEpIC8gbWF4cG9zdCArIDE7CisJb2xkX2VyciA9IDg7CisKKwlmb3IgKHRlbXBfcHJlID0gODsgdGVtcF9wcmUgPj0gbWluX3ByZTsgdGVtcF9wcmUtLSkgeworCQlpZiAoZGl2ID4gKHRlbXBfcHJlICogbWF4cG9zdCkpCisJCQlicmVhazsKKworCQlpZiAoZGl2IDwgKHRlbXBfcHJlICogdGVtcF9wcmUpKQorCQkJY29udGludWU7CisKKwkJZXJyID0gZGl2ICUgdGVtcF9wcmU7CisKKwkJaWYgKGVyciA9PSAwKSB7CisJCQkqcHJlID0gdGVtcF9wcmU7CisJCQlicmVhazsKKwkJfQorCisJCWVyciA9IHRlbXBfcHJlIC0gZXJyOworCisJCWlmIChlcnIgPCBvbGRfZXJyKSB7CisJCQlvbGRfZXJyID0gZXJyOworCQkJKnByZSA9IHRlbXBfcHJlOworCQl9CisJfQorCisJKnBvc3QgPSAoZGl2ICsgKnByZSAtIDEpIC8gKnByZTsKK30KKworLyogZ2V0IHRoZSBiZXN0IHZhbHVlcyBmb3IgYSAzLWJpdCBkaXZpZGVyIGNvbWJpbmVkIHdpdGggYSA2LWJpdCBkaXZpZGVyICovCitzdGF0aWMgdm9pZCBjYWxjX2RpdmlkZXJzXzNfNih1MzIgZGl2LCB1MzIgKnByZSwgdTMyICpwb3N0KQoreworCWlmIChkaXYgPj0gNTEyKSB7CisJCSpwcmUgPSA4OworCQkqcG9zdCA9IDY0OworCX0gZWxzZSBpZiAoZGl2ID49IDY0KSB7CisJCWNhbGNfZGl2aWRlcnMoZGl2LCBwcmUsIHBvc3QsIDY0KTsKKwl9IGVsc2UgaWYgKGRpdiA8PSA4KSB7CisJCSpwcmUgPSBkaXY7CisJCSpwb3N0ID0gMTsKKwl9IGVsc2UgeworCQkqcHJlID0gMTsKKwkJKnBvc3QgPSBkaXY7CisJfQorfQorCisvKiBnZXQgdGhlIGJlc3QgdmFsdWVzIGZvciB0d28gY2FzY2FkZWQgMy1iaXQgZGl2aWRlcnMgKi8KK3N0YXRpYyB2b2lkIGNhbGNfZGl2aWRlcnNfM18zKHUzMiBkaXYsIHUzMiAqcHJlLCB1MzIgKnBvc3QpCit7CisJaWYgKGRpdiA+PSA2NCkgeworCQkqcHJlID0gKnBvc3QgPSA4OworCX0gZWxzZSBpZiAoZGl2ID4gOCkgeworCQljYWxjX2RpdmlkZXJzKGRpdiwgcHJlLCBwb3N0LCA4KTsKKwl9IGVsc2UgeworCQkqcHJlID0gMTsKKwkJKnBvc3QgPSBkaXY7CisJfQorfQorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX21wbGwodm9pZCkKK3sKKwl1bG9uZyBtcGN0bCA9IF9fcmF3X3JlYWRsKENDTV9CQVNFICsgQ0NNX01QQ1RMKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChtcGN0bCwgMjQwMDAwMDApOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9wcGxsKHZvaWQpCit7CisJdWxvbmcgcHBjdGwgPSBfX3Jhd19yZWFkbChDQ01fQkFTRSArIENDTV9QUENUTCk7CisKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwocHBjdGwsIDI0MDAwMDAwKTsKK30KKworc3RydWN0IGFybV9haGJfZGl2IHsKKwl1bnNpZ25lZCBjaGFyIGFybSwgYWhiLCBzZWw7Cit9OworCitzdGF0aWMgc3RydWN0IGFybV9haGJfZGl2IGNsa19jb25zdW1lcltdID0geworCXsgLmFybSA9IDEsIC5haGIgPSA0LCAuc2VsID0gMH0sCisJeyAuYXJtID0gMSwgLmFoYiA9IDMsIC5zZWwgPSAxfSwKKwl7IC5hcm0gPSAyLCAuYWhiID0gMiwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDAsIC5haGIgPSAwLCAuc2VsID0gMH0sCisJeyAuYXJtID0gMCwgLmFoYiA9IDAsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAwLCAuYWhiID0gMCwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDQsIC5haGIgPSAxLCAuc2VsID0gMH0sCisJeyAuYXJtID0gMSwgLmFoYiA9IDUsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAxLCAuYWhiID0gOCwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDEsIC5haGIgPSA2LCAuc2VsID0gMX0sCisJeyAuYXJtID0gMiwgLmFoYiA9IDQsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAwLCAuYWhiID0gMCwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDAsIC5haGIgPSAwLCAuc2VsID0gMH0sCisJeyAuYXJtID0gMCwgLmFoYiA9IDAsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSA0LCAuYWhiID0gMiwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDAsIC5haGIgPSAwLCAuc2VsID0gMH0sCit9OworCitzdGF0aWMgc3RydWN0IGFybV9haGJfZGl2IGNsa19hdXRvbW90aXZlW10gPSB7CisJeyAuYXJtID0gMSwgLmFoYiA9IDMsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAxLCAuYWhiID0gMiwgLnNlbCA9IDF9LAorCXsgLmFybSA9IDIsIC5haGIgPSAxLCAuc2VsID0gMX0sCisJeyAuYXJtID0gMCwgLmFoYiA9IDAsIC5zZWwgPSAwfSwKKwl7IC5hcm0gPSAxLCAuYWhiID0gNiwgLnNlbCA9IDB9LAorCXsgLmFybSA9IDEsIC5haGIgPSA0LCAuc2VsID0gMX0sCisJeyAuYXJtID0gMiwgLmFoYiA9IDIsIC5zZWwgPSAxfSwKKwl7IC5hcm0gPSAwLCAuYWhiID0gMCwgLnNlbCA9IDB9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfYXJtKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBwZHIwID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMCk7CisJc3RydWN0IGFybV9haGJfZGl2ICphYWQ7CisJdW5zaWduZWQgbG9uZyBmcmVmID0gZ2V0X3JhdGVfbXBsbCgpOworCisJaWYgKHBkcjAgJiAxKSB7CisJCS8qIGNvbnN1bWVyIHBhdGggKi8KKwkJYWFkID0gJmNsa19jb25zdW1lclsocGRyMCA+PiAxNikgJiAweGZdOworCQlpZiAoYWFkLT5zZWwpCisJCQlmcmVmID0gZnJlZiAqIDIgLyAzOworCX0gZWxzZSB7CisJCS8qIGF1dG8gcGF0aCAqLworCQlhYWQgPSAmY2xrX2F1dG9tb3RpdmVbKHBkcjAgPj4gOSkgJiAweDddOworCQlpZiAoYWFkLT5zZWwpCisJCQlmcmVmID0gZnJlZiAqIDMgLyA0OworCX0KKwlyZXR1cm4gZnJlZiAvIGFhZC0+YXJtOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9haGIoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGRyMCA9IF9fcmF3X3JlYWRsKENDTV9CQVNFICsgQ0NNX1BEUjApOworCXN0cnVjdCBhcm1fYWhiX2RpdiAqYWFkOworCXVuc2lnbmVkIGxvbmcgZnJlZiA9IGdldF9yYXRlX21wbGwoKTsKKworCWlmIChwZHIwICYgMSkKKwkJLyogY29uc3VtZXIgcGF0aCAqLworCQlhYWQgPSAmY2xrX2NvbnN1bWVyWyhwZHIwID4+IDE2KSAmIDB4Zl07CisJZWxzZQorCQkvKiBhdXRvIHBhdGggKi8KKwkJYWFkID0gJmNsa19hdXRvbW90aXZlWyhwZHIwID4+IDkpICYgMHg3XTsKKworCXJldHVybiBmcmVmIC8gYWFkLT5haGI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX2lwZyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGdldF9yYXRlX2FoYihOVUxMKSA+PiAxOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfM18zX2Rpdih1bnNpZ25lZCBsb25nIGluKQoreworCXJldHVybiAoKChpbiA+PiAzKSAmIDB4NykgKyAxKSAqICgoaW4gJiAweDcpICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX3VhcnQoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGRyMyA9IF9fcmF3X3JlYWRsKENDTV9CQVNFICsgQ0NNX1BEUjMpOworCXVuc2lnbmVkIGxvbmcgcGRyNCA9IF9fcmF3X3JlYWRsKENDTV9CQVNFICsgQ0NNX1BEUjQpOworCXVuc2lnbmVkIGxvbmcgZGl2ID0gZ2V0XzNfM19kaXYocGRyNCA+PiAxMCk7CisKKwlpZiAocGRyMyAmICgxIDw8IDE0KSkKKwkJcmV0dXJuIGdldF9yYXRlX2FybSgpIC8gZGl2OworCWVsc2UKKwkJcmV0dXJuIGdldF9yYXRlX3BwbGwoKSAvIGRpdjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfc2RoYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZHIzID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMyk7CisJdW5zaWduZWQgbG9uZyBkaXYsIHJhdGU7CisKKwlpZiAocGRyMyAmICgxIDw8IDYpKQorCQlyYXRlID0gZ2V0X3JhdGVfYXJtKCk7CisJZWxzZQorCQlyYXRlID0gZ2V0X3JhdGVfcHBsbCgpOworCisJc3dpdGNoIChjbGstPmlkKSB7CisJZGVmYXVsdDoKKwljYXNlIDA6CisJCWRpdiA9IHBkcjMgJiAweDNmOworCQlicmVhazsKKwljYXNlIDE6CisJCWRpdiA9IChwZHIzID4+IDgpICYgMHgzZjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlkaXYgPSAocGRyMyA+PiAxNikgJiAweDNmOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmF0ZSAvIGdldF8zXzNfZGl2KGRpdik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9yYXRlX21zaGMoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGRyMSA9IF9fcmF3X3JlYWRsKENDTV9CQVNFICsgQ0NNX1BEUjEpOworCXVuc2lnbmVkIGxvbmcgZGl2MSwgZGl2MiwgcmF0ZTsKKworCWlmIChwZHIxICYgKDEgPDwgNykpCisJCXJhdGUgPSBnZXRfcmF0ZV9hcm0oKTsKKwllbHNlCisJCXJhdGUgPSBnZXRfcmF0ZV9wcGxsKCk7CisKKwlkaXYxID0gKHBkcjEgPj4gMjkpICYgMHg3OworCWRpdjIgPSAocGRyMSA+PiAyMikgJiAweDNmOworCisJcmV0dXJuIHJhdGUgLyAoKGRpdjEgKyAxKSAqIChkaXYyICsgMSkpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9zc2koc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcGRyMiA9IF9fcmF3X3JlYWRsKENDTV9CQVNFICsgQ0NNX1BEUjIpOworCXVuc2lnbmVkIGxvbmcgZGl2MSwgZGl2MiwgcmF0ZTsKKworCWlmIChwZHIyICYgKDEgPDwgNikpCisJCXJhdGUgPSBnZXRfcmF0ZV9hcm0oKTsKKwllbHNlCisJCXJhdGUgPSBnZXRfcmF0ZV9wcGxsKCk7CisKKwlzd2l0Y2ggKGNsay0+aWQpIHsKKwlkZWZhdWx0OgorCWNhc2UgMDoKKwkJZGl2MSA9IHBkcjIgJiAweDNmOworCQlkaXYyID0gKHBkcjIgPj4gMjQpICYgMHg3OworCQlicmVhazsKKwljYXNlIDE6CisJCWRpdjEgPSAocGRyMiA+PiA4KSAmIDB4M2Y7CisJCWRpdjIgPSAocGRyMiA+PiAyNykgJiAweDc7CisJCWJyZWFrOworCX0KKworCXJldHVybiByYXRlIC8gKChkaXYxICsgMSkgKiAoZGl2MiArIDEpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfY3NpKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHBkcjIgPSBfX3Jhd19yZWFkbChDQ01fQkFTRSArIENDTV9QRFIyKTsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisKKwlpZiAocGRyMiAmICgxIDw8IDcpKQorCQlyYXRlID0gZ2V0X3JhdGVfYXJtKCk7CisJZWxzZQorCQlyYXRlID0gZ2V0X3JhdGVfcHBsbCgpOworCisJcmV0dXJuIHJhdGUgLyBnZXRfM18zX2RpdigocGRyMiA+PiAxNikgJiAweDNmKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3JhdGVfaXBnX3BlcihzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBwZHIwID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSMCk7CisJdW5zaWduZWQgbG9uZyBwZHI0ID0gX19yYXdfcmVhZGwoQ0NNX0JBU0UgKyBDQ01fUERSNCk7CisJdW5zaWduZWQgbG9uZyBkaXYxLCBkaXYyOworCisJaWYgKHBkcjAgJiAoMSA8PCAyNikpIHsKKwkJZGl2MSA9IChwZHI0ID4+IDE5KSAmIDB4NzsKKwkJZGl2MiA9IChwZHI0ID4+IDE2KSAmIDB4NzsKKwkJcmV0dXJuIGdldF9yYXRlX2FybSgpIC8gKChkaXYxICsgMSkgKiAoZGl2MiArIDEpKTsKKwl9IGVsc2UgeworCQlkaXYxID0gKHBkcjAgPj4gMTIpICYgMHg3OworCQlyZXR1cm4gZ2V0X3JhdGVfYWhiKE5VTEwpIC8gZGl2MTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgY2xrX2Nncl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyB8PSAzIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xrX2Nncl9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWcgJj0gfigzIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKKwlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOworfQorCisjZGVmaW5lIERFRklORV9DTE9DSyhuYW1lLCBpLCBlciwgZXMsIGdyLCBzcikJCVwKKwlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCVwKKwkJLmlkCQk9IGksCQkJXAorCQkuZW5hYmxlX3JlZwk9IENDTV9CQVNFICsgZXIsCVwKKwkJLmVuYWJsZV9zaGlmdAk9IGVzLAkJCVwKKwkJLmdldF9yYXRlCT0gZ3IsCQkJXAorCQkuc2V0X3JhdGUJPSBzciwJCQlcCisJCS5lbmFibGUJCT0gY2xrX2Nncl9lbmFibGUsCVwKKwkJLmRpc2FibGUJPSBjbGtfY2dyX2Rpc2FibGUsCVwKKwl9CisKK0RFRklORV9DTE9DSyhhc3JjX2NsaywgICAwLCBDQ01fQ0dSMCwgIDAsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGF0YV9jbGssICAgIDAsIENDTV9DR1IwLCAgMiwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhhdWRtdXhfY2xrLCAwLCBDQ01fQ0dSMCwgIDQsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGNhbjFfY2xrLCAgIDAsIENDTV9DR1IwLCAgNiwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhjYW4yX2NsaywgICAxLCBDQ01fQ0dSMCwgIDgsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soY3NwaTFfY2xrLCAgMCwgQ0NNX0NHUjAsIDEwLCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGNzcGkyX2NsaywgIDEsIENDTV9DR1IwLCAxMiwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhlY3RfY2xrLCAgICAwLCBDQ01fQ0dSMCwgMTQsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soZWRpb19jbGssICAgMCwgQ0NNX0NHUjAsIDE2LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhlbWlfY2xrLCAgICAwLCBDQ01fQ0dSMCwgMTgsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soZXBpdDFfY2xrLCAgMCwgQ0NNX0NHUjAsIDIwLCBnZXRfcmF0ZV9pcGdfcGVyLCBOVUxMKTsKK0RFRklORV9DTE9DSyhlcGl0Ml9jbGssICAxLCBDQ01fQ0dSMCwgMjIsIGdldF9yYXRlX2lwZ19wZXIsIE5VTEwpOworREVGSU5FX0NMT0NLKGVzYWlfY2xrLCAgIDAsIENDTV9DR1IwLCAyNCwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soZXNkaGMxX2NsaywgMCwgQ0NNX0NHUjAsIDI2LCBnZXRfcmF0ZV9zZGhjLCBOVUxMKTsKK0RFRklORV9DTE9DSyhlc2RoYzJfY2xrLCAxLCBDQ01fQ0dSMCwgMjgsIGdldF9yYXRlX3NkaGMsIE5VTEwpOworREVGSU5FX0NMT0NLKGVzZGhjM19jbGssIDIsIENDTV9DR1IwLCAzMCwgZ2V0X3JhdGVfc2RoYywgTlVMTCk7CisKK0RFRklORV9DTE9DSyhmZWNfY2xrLCAgICAwLCBDQ01fQ0dSMSwgIDAsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0soZ3BpbzFfY2xrLCAgMCwgQ0NNX0NHUjEsICAyLCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhncGlvMl9jbGssICAxLCBDQ01fQ0dSMSwgIDQsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGdwaW8zX2NsaywgIDIsIENDTV9DR1IxLCAgNiwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soZ3B0X2NsaywgICAgMCwgQ0NNX0NHUjEsICA4LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKGkyYzFfY2xrLCAgIDAsIENDTV9DR1IxLCAxMCwgZ2V0X3JhdGVfaXBnX3BlciwgTlVMTCk7CitERUZJTkVfQ0xPQ0soaTJjMl9jbGssICAgMSwgQ0NNX0NHUjEsIDEyLCBnZXRfcmF0ZV9pcGdfcGVyLCBOVUxMKTsKK0RFRklORV9DTE9DSyhpMmMzX2NsaywgICAyLCBDQ01fQ0dSMSwgMTQsIGdldF9yYXRlX2lwZ19wZXIsIE5VTEwpOworREVGSU5FX0NMT0NLKGlvbXV4Y19jbGssIDAsIENDTV9DR1IxLCAxNiwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soaXB1X2NsaywgICAgMCwgQ0NNX0NHUjEsIDE4LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhrcHBfY2xrLCAgICAwLCBDQ01fQ0dSMSwgMjAsIGdldF9yYXRlX2lwZywgTlVMTCk7CitERUZJTkVfQ0xPQ0sobWxiX2NsaywgICAgMCwgQ0NNX0NHUjEsIDIyLCBnZXRfcmF0ZV9haGIsIE5VTEwpOworREVGSU5FX0NMT0NLKG1zaGNfY2xrLCAgIDAsIENDTV9DR1IxLCAyNCwgZ2V0X3JhdGVfbXNoYywgTlVMTCk7CitERUZJTkVfQ0xPQ0sob3dpcmVfY2xrLCAgMCwgQ0NNX0NHUjEsIDI2LCBnZXRfcmF0ZV9pcGdfcGVyLCBOVUxMKTsKK0RFRklORV9DTE9DSyhwd21fY2xrLCAgICAwLCBDQ01fQ0dSMSwgMjgsIGdldF9yYXRlX2lwZ19wZXIsIE5VTEwpOworREVGSU5FX0NMT0NLKHJuZ2NfY2xrLCAgIDAsIENDTV9DR1IxLCAzMCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKKworREVGSU5FX0NMT0NLKHJ0Y19jbGssICAgIDAsIENDTV9DR1IyLCAgMCwgZ2V0X3JhdGVfaXBnLCBOVUxMKTsKK0RFRklORV9DTE9DSyhydGljX2NsaywgICAwLCBDQ01fQ0dSMiwgIDIsIGdldF9yYXRlX2FoYiwgTlVMTCk7CitERUZJTkVfQ0xPQ0soc2NjX2NsaywgICAgMCwgQ0NNX0NHUjIsICA0LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKHNkbWFfY2xrLCAgIDAsIENDTV9DR1IyLCAgNiwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soc3BiYV9jbGssICAgMCwgQ0NNX0NHUjIsICA4LCBnZXRfcmF0ZV9pcGcsIE5VTEwpOworREVGSU5FX0NMT0NLKHNwZGlmX2NsaywgIDAsIENDTV9DR1IyLCAxMCwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soc3NpMV9jbGssICAgMCwgQ0NNX0NHUjIsIDEyLCBnZXRfcmF0ZV9zc2ksIE5VTEwpOworREVGSU5FX0NMT0NLKHNzaTJfY2xrLCAgIDEsIENDTV9DR1IyLCAxNCwgZ2V0X3JhdGVfc3NpLCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0MV9jbGssICAwLCBDQ01fQ0dSMiwgMTYsIGdldF9yYXRlX3VhcnQsIE5VTEwpOworREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgIDEsIENDTV9DR1IyLCAxOCwgZ2V0X3JhdGVfdWFydCwgTlVMTCk7CitERUZJTkVfQ0xPQ0sodWFydDNfY2xrLCAgMiwgQ0NNX0NHUjIsIDIwLCBnZXRfcmF0ZV91YXJ0LCBOVUxMKTsKK0RFRklORV9DTE9DSyh1c2JvdGdfY2xrLCAwLCBDQ01fQ0dSMiwgMjIsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKHdkb2dfY2xrLCAgIDAsIENDTV9DR1IyLCAyNCwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0sobWF4X2NsaywgICAgMCwgQ0NNX0NHUjIsIDI2LCBOVUxMLCBOVUxMKTsKK0RFRklORV9DTE9DSyhhZG11eF9jbGssICAwLCBDQ01fQ0dSMiwgMzAsIE5VTEwsIE5VTEwpOworCitERUZJTkVfQ0xPQ0soY3NpX2NsaywgICAgMCwgQ0NNX0NHUjMsICAwLCBnZXRfcmF0ZV9jc2ksIE5VTEwpOworREVGSU5FX0NMT0NLKGlpbV9jbGssICAgIDAsIENDTV9DR1IzLCAgMiwgTlVMTCwgTlVMTCk7CitERUZJTkVfQ0xPQ0soZ3B1MmRfY2xrLCAgMCwgQ0NNX0NHUjMsICA0LCBOVUxMLCBOVUxMKTsKKworI2RlZmluZSBfUkVHSVNURVJfQ0xPQ0soZCwgbiwgYykJXAorCXsJCQkJXAorCQkuZGV2X2lkID0gZCwJCVwKKwkJLmNvbl9pZCA9IG4sCQlcCisJCS5jbGsgPSAmYywJCVwKKwl9LAorCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdIF9faW5pdGRhdGEgPSB7CisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhc3JjIiwgYXNyY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhdGEiLCBhdGFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXVkbXV4IiwgYXVkbXV4X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNhbiIsIGNhbjFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY2FuIiwgY2FuMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjAiLCBOVUxMLCBjc3BpMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjEiLCBOVUxMLCBjc3BpMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlY3QiLCBlY3RfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZWRpbyIsIGVkaW9fY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZW1pIiwgZW1pX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0MV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlcGl0IiwgZXBpdDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZXNhaSIsIGVzYWlfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2RoYyIsIGVzZGhjMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzZGhjIiwgZXNkaGMyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNkaGMiLCBlc2RoYzNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZmVjLjAiLCBOVUxMLCBmZWNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3BpbyIsIGdwaW8xX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwaW8iLCBncGlvMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncGlvIiwgZ3BpbzNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiZ3B0LjAiLCBOVUxMLCBncHRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjEiLCBOVUxMLCBpMmMyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMiIsIE5VTEwsIGkyYzNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaW9tdXhjIiwgaW9tdXhjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImlwdSIsIGlwdV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJrcHAiLCBrcHBfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWxiIiwgbWxiX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1zaGMiLCBtc2hjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y193MSIsIE5VTEwsIG93aXJlX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInB3bSIsIHB3bV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJybmdjIiwgcm5nY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGMiLCBydGNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRpYyIsIHJ0aWNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2NjIiwgc2NjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNkbWEiLCBzZG1hX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNwYmEiLCBzcGJhX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNwZGlmIiwgc3BkaWZfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3NpIiwgc3NpMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzc2kiLCBzc2kyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInVzYm90ZyIsIHVzYm90Z19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteGNfd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1heCIsIG1heF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJhZG11eCIsIGFkbXV4X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzaSIsIGNzaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpaW0iLCBpaW1fY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B1MmQiLCBncHUyZF9jbGspCit9OworCitpbnQgX19pbml0IG14MzVfY2xvY2tzX2luaXQoKQoreworCWludCBpOworCXVuc2lnbmVkIGludCBsbCA9IDA7CisKKwlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgzNSk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfTExfQ09OU09MRQorCWxsID0gKDMgPDwgMTYpOworI2VuZGlmCisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKQorCQljbGtkZXZfYWRkKCZsb29rdXBzW2ldKTsKKworCS8qIFR1cm4gb2ZmIGFsbCBjbG9ja3MgZXhjZXB0IHRoZSBvbmVzIHdlIG5lZWQgdG8gc3Vydml2ZSwgbmFtZWx5OgorCSAqIEVNSSwgR1BJTzEvMi8zLCBHUFQsIElPTVVYLCBNQVggYW5kIGV2ZW50dWFsbHkgdWFydAorCSAqLworCV9fcmF3X3dyaXRlbCgoMyA8PCAxOCksIENDTV9CQVNFICsgQ0NNX0NHUjApOworCV9fcmF3X3dyaXRlbCgoMyA8PCAyKSB8ICgzIDw8IDQpIHwgKDMgPDwgNikgfCAoMyA8PCA4KSB8ICgzIDw8IDE2KSwKKwkJCUNDTV9CQVNFICsgQ0NNX0NHUjEpOworCV9fcmF3X3dyaXRlbCgoMyA8PCAyNikgfCBsbCwgQ0NNX0JBU0UgKyBDQ01fQ0dSMik7CisJX19yYXdfd3JpdGVsKDAsIENDTV9CQVNFICsgQ0NNX0NHUjMpOworCisJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGspOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW14My9jbG9jay5jCmluZGV4IGIxNzQ2YWEuLmNhNDZmNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYwpAQCAtMjMsOSArMjMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogCiAjaW5jbHVkZSAiY3JtX3JlZ3MuaCIKIApAQCAtNjQsMTcgKzY4LDE3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jdV9wbGxfY2xrOwotc3RhdGljIHN0cnVjdCBjbGsgbWN1X21haW5fY2xrOwotc3RhdGljIHN0cnVjdCBjbGsgdXNiX3BsbF9jbGs7CiBzdGF0aWMgc3RydWN0IGNsayBzZXJpYWxfcGxsX2NsazsKIHN0YXRpYyBzdHJ1Y3QgY2xrIGlwZ19jbGs7CiBzdGF0aWMgc3RydWN0IGNsayBja2loX2NsazsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9jbGs7CiAKLXN0YXRpYyBpbnQgX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIGludCBjZ3JfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgcmVnOwogCisJaWYgKCFjbGstPmVuYWJsZV9yZWcpCisJCXJldHVybiAwOworCiAJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAlyZWcgfD0gMyA8PCBjbGstPmVuYWJsZV9zaGlmdDsKIAlfX3Jhd193cml0ZWwocmVnLCBjbGstPmVuYWJsZV9yZWcpOwpAQCAtODIsMTMzICs4Niw2OSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgY2dyX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQogewogCXUzMiByZWc7CiAKKwlpZiAoIWNsay0+ZW5hYmxlX3JlZykKKwkJcmV0dXJuOworCiAJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAlyZWcgJj0gfigzIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKKworCS8qIHNwZWNpYWwgY2FzZSBmb3IgRU1JIGNsb2NrICovCisJaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSBNWENfQ0NNX0NHUjIgJiYgY2xrLT5lbmFibGVfc2hpZnQgPT0gOCkKKwkJcmVnIHw9ICgxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKKwogCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9jbGtfZW1pX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsX3JlZl9nZXRfcmF0ZSh2b2lkKQogewotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCXJlZyAmPSB+KDMgPDwgY2xrLT5lbmFibGVfc2hpZnQpOwotCXJlZyB8PSAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCk7Ci0JX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKLX0KLQotc3RhdGljIGludCBfY2xrX3BsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1MzIgcmVnOwotCXNpZ25lZCBsb25nIHBkID0gMTsJLyogUHJlLWRpdmlkZXIgKi8KLQlzaWduZWQgbG9uZyBtZmk7CS8qIE11bHRpcGxpY2F0aW9uIEZhY3RvciAoSW50ZWdlciBwYXJ0KSAqLwotCXNpZ25lZCBsb25nIG1mbjsJLyogTXVsdGlwbGljYXRpb24gRmFjdG9yIChJbnRlZ2VyIHBhcnQpICovCi0Jc2lnbmVkIGxvbmcgbWZkOwkvKiBNdWx0aXBsaWNhdGlvbiBGYWN0b3IgKERlbm9taW5hdG9yIFBhcnQpICovCi0Jc2lnbmVkIGxvbmcgdG1wOwotCXUzMiByZWZfZnJlcSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0KLQl3aGlsZSAoKChyZWZfZnJlcSAvIHBkKSAqIDEwKSA+IHJhdGUpCi0JCXBkKys7Ci0KLQlpZiAoKHJlZl9mcmVxIC8gcGQpIDwgUFJFX0RJVl9NSU5fRlJFUSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiB0aGUgcmVmX2ZyZXEvMiBpbiB0aGUgZm9sbG93aW5nIGlzIHRvIHJvdW5kIHVwICovCi0JbWZpID0gKCgocmF0ZSAvIDIpICogcGQpICsgKHJlZl9mcmVxIC8gMikpIC8gcmVmX2ZyZXE7Ci0JaWYgKG1maSA8IDUgfHwgbWZpID4gMTUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogcGljayBhIG1mZCB2YWx1ZSB0aGF0IHdpbGwgd29yawotCSAqIHRoZW4gc29sdmUgZm9yIG1mbiAqLwotCW1mZCA9IHJlZl9mcmVxIC8gNTAwMDA7Ci0KLQkvKgotCSAqICAgICAgICAgIHBsbF9mcmVxICogcGQgKiBtZmQKLQkgKiAgIG1mbiA9IC0tLS0tLS0tLS0tLS0tLS0tLS0tICAtICAobWZpICogbWZkKQotCSAqICAgICAgICAgICAyICogcmVmX2ZyZXEKLQkgKi8KLQkvKiB0aGUgdG1wLzIgaXMgZm9yIHJvdW5kaW5nICovCi0JdG1wID0gcmVmX2ZyZXEgLyAxMDAwMDsKLQltZm4gPQotCSAgICAoKCgoKChyYXRlIC8gMikgKyAodG1wIC8gMikpIC8gdG1wKSAqIHBkKSAqIG1mZCkgLyAxMDAwMCkgLQotCSAgICAobWZpICogbWZkKTsKLQotCW1mbiA9IG1mbiAmIDB4M2ZmOwotCXBkLS07Ci0JbWZkLS07Ci0KLQkvKiBDaGFuZ2UgdGhlIFBsbCB2YWx1ZSAqLwotCXJlZyA9IChtZmkgPDwgTVhDX0NDTV9QQ1RMX01GSV9PRkZTRVQpIHwKLQkgICAgKG1mbiA8PCBNWENfQ0NNX1BDVExfTUZOX09GRlNFVCkgfAotCSAgICAobWZkIDw8IE1YQ19DQ01fUENUTF9NRkRfT0ZGU0VUKSB8IChwZCA8PCBNWENfQ0NNX1BDVExfUERfT0ZGU0VUKTsKLQotCWlmIChjbGsgPT0gJm1jdV9wbGxfY2xrKQotCQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX01QQ1RMKTsKLQllbHNlIGlmIChjbGsgPT0gJnVzYl9wbGxfY2xrKQotCQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX1VQQ1RMKTsKLQllbHNlIGlmIChjbGsgPT0gJnNlcmlhbF9wbGxfY2xrKQotCQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX1NSUENUTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCWxvbmcgbWZpLCBtZm4sIG1mZCwgcGRmLCByZWZfY2xrLCBtZm5fYWJzOwotCXVuc2lnbmVkIGxvbmcgcmVnLCBjY21yOwotCXM2NCB0ZW1wOworCXVuc2lnbmVkIGxvbmcgY2NtcjsKIAl1bnNpZ25lZCBpbnQgcHJjczsKIAogCWNjbXIgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDTVIpOwogCXByY3MgPSAoY2NtciAmIE1YQ19DQ01fQ0NNUl9QUkNTX01BU0spID4+IE1YQ19DQ01fQ0NNUl9QUkNTX09GRlNFVDsKIAlpZiAocHJjcyA9PSAweDEpCi0JCXJlZl9jbGsgPSBDS0lMX0NMS19GUkVRICogMTAyNDsKKwkJcmV0dXJuIENLSUxfQ0xLX0ZSRVEgKiAxMDI0OwogCWVsc2UKLQkJcmVmX2NsayA9IGNsa19nZXRfcmF0ZSgmY2tpaF9jbGspOwotCi0JaWYgKGNsayA9PSAmbWN1X3BsbF9jbGspIHsKLQkJaWYgKChjY21yICYgTVhDX0NDTV9DQ01SX01QRSkgPT0gMCkKLQkJCXJldHVybiByZWZfY2xrOwotCQlpZiAoKGNjbXIgJiBNWENfQ0NNX0NDTVJfTURTKSAhPSAwKQotCQkJcmV0dXJuIHJlZl9jbGs7Ci0JCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fTVBDVEwpOwotCX0gZWxzZSBpZiAoY2xrID09ICZ1c2JfcGxsX2NsaykKLQkJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9VUENUTCk7Ci0JZWxzZSBpZiAoY2xrID09ICZzZXJpYWxfcGxsX2NsaykKLQkJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9TUlBDVEwpOwotCWVsc2UgewotCQlCVUcoKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcGRmID0gKHJlZyAmIE1YQ19DQ01fUENUTF9QRF9NQVNLKSA+PiBNWENfQ0NNX1BDVExfUERfT0ZGU0VUOwotCW1mZCA9IChyZWcgJiBNWENfQ0NNX1BDVExfTUZEX01BU0spID4+IE1YQ19DQ01fUENUTF9NRkRfT0ZGU0VUOwotCW1maSA9IChyZWcgJiBNWENfQ0NNX1BDVExfTUZJX01BU0spID4+IE1YQ19DQ01fUENUTF9NRklfT0ZGU0VUOwotCW1maSA9IChtZmkgPD0gNSkgPyA1IDogbWZpOwotCW1mbiA9IG1mbl9hYnMgPSByZWcgJiBNWENfQ0NNX1BDVExfTUZOX01BU0s7Ci0KLQlpZiAobWZuID49IDB4MjAwKSB7Ci0JCW1mbiB8PSAweEZGRkZGRTAwOwotCQltZm5fYWJzID0gLW1mbjsKLQl9Ci0KLQlyZWZfY2xrICo9IDI7Ci0JcmVmX2NsayAvPSBwZGYgKyAxOwotCi0JdGVtcCA9ICh1NjQpIHJlZl9jbGsgKiBtZm5fYWJzOwotCWRvX2Rpdih0ZW1wLCBtZmQgKyAxKTsKLQlpZiAobWZuIDwgMCkKLQkJdGVtcCA9IC10ZW1wOwotCXRlbXAgPSAocmVmX2NsayAqIG1maSkgKyB0ZW1wOwotCi0JcmV0dXJuIHRlbXA7CisJCXJldHVybiBjbGtfZ2V0X3JhdGUoJmNraWhfY2xrKTsKIH0KIAotc3RhdGljIGludCBfY2xrX3VzYl9wbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVzYl9wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9VUENUTCk7CisKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwocmVnLCBwbGxfcmVmX2dldF9yYXRlKCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZXJpYWxfcGxsX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fU1JQQ1RMKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChyZWcsIHBsbF9yZWZfZ2V0X3JhdGUoKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1jdV9wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnLCBjY21yOworCisJY2NtciA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NNUik7CisKKwlpZiAoIShjY21yICYgTVhDX0NDTV9DQ01SX01QRSkgfHwgKGNjbXIgJiBNWENfQ0NNX0NDTVJfTURTKSkKKwkJcmV0dXJuIGNsa19nZXRfcmF0ZSgmY2tpaF9jbGspOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9NUENUTCk7CisKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwocmVnLCBwbGxfcmVmX2dldF9yYXRlKCkpOworfQorCitzdGF0aWMgaW50IHVzYl9wbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgcmVnOwogCkBAIC0yMjIsNyArMTYyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX2Nsa191c2JfcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHZvaWQgdXNiX3BsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1MzIgcmVnOwogCkBAIC0yMzEsNyArMTcxLDcgQEAKIAlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NDTVIpOwogfQogCi1zdGF0aWMgaW50IF9jbGtfc2VyaWFsX3BsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIGludCBzZXJpYWxfcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdTMyIHJlZzsKIApAQCAtMjQ1LDcgKzE4NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9jbGtfc2VyaWFsX3BsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB2b2lkIHNlcmlhbF9wbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdTMyIHJlZzsKIApAQCAtMjU4LDcgKzE5OCw3IEBACiAjZGVmaW5lIFBEUjEobWFzaywgb2ZmKSAoKF9fcmF3X3JlYWRsKE1YQ19DQ01fUERSMSkgJiBtYXNrKSA+PiBvZmYpCiAjZGVmaW5lIFBEUjIobWFzaywgb2ZmKSAoKF9fcmF3X3JlYWRsKE1YQ19DQ01fUERSMikgJiBtYXNrKSA+PiBvZmYpCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfbWN1X21haW5fZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbWN1X21haW5fZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXUzMiBwbWNyMCA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fUE1DUjApOwogCkBAIC0yNjgsNyArMjA4LDcgQEAKIAkJcmV0dXJuIGNsa19nZXRfcmF0ZSgmbWN1X3BsbF9jbGspOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2hjbGtfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgYWhiX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIG1heF9wZGY7CiAKQEAgLTI3Nyw3ICsyMTcsNyBAQAogCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKG1heF9wZGYgKyAxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19pcGdfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaXBnX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIGlwZ19wZGY7CiAKQEAgLTI4Niw3ICsyMjYsNyBAQAogCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKGlwZ19wZGYgKyAxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19uZmNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbmZjX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIG5mY19wZGY7CiAKQEAgLTI5NSw3ICsyMzUsNyBAQAogCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKG5mY19wZGYgKyAxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19oc3BfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaHNwX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIGhzcF9wZGY7CiAKQEAgLTMwNCw3ICsyNDQsNyBAQAogCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKGhzcF9wZGYgKyAxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa191c2JfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgdXNiX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIHVzYl9wZGYsIHVzYl9wcmVwZGY7CiAKQEAgLTMxNSw3ICsyNTUsNyBAQAogCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKHVzYl9wcmVwZGYgKyAxKSAvICh1c2JfcGRmICsgMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfY3NpX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNzaV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdTMyIHJlZywgcHJlLCBwb3N0OwogCkBAIC0zMjksNyArMjY5LDcgQEAKIAlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChwcmUgKiBwb3N0KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19jc2lfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNzaV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCXUzMiBwcmUsIHBvc3QsIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAJdTMyIGRpdiA9IHBhcmVudCAvIHJhdGU7CkBAIC0zNDIsNyArMjgyLDcgQEAKIAlyZXR1cm4gcGFyZW50IC8gKHByZSAqIHBvc3QpOwogfQogCi1zdGF0aWMgaW50IF9jbGtfY3NpX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQorc3RhdGljIGludCBjc2lfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJdTMyIHJlZywgZGl2LCBwcmUsIHBvc3QsIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAKQEAgLTM2MywxNiArMzAzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19wZXJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGVyX3BkZjsKLQotCXBlcl9wZGYgPSBQRFIwKE1YQ19DQ01fUERSMF9QRVJfUE9ERl9NQVNLLAotCQkgICAgICAgTVhDX0NDTV9QRFIwX1BFUl9QT0RGX09GRlNFVCk7Ci0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAocGVyX3BkZiArIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX3NzaTFfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgc3NpMV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBzc2kxX3BkZiwgc3NpMV9wcmVwZGY7CiAKQEAgLTM4Myw3ICszMTQsNyBAQAogCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKHNzaTFfcHJlcGRmICsgMSkgLyAoc3NpMV9wZGYgKyAxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19zc2kyX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNzaTJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgc3NpMl9wZGYsIHNzaTJfcHJlcGRmOwogCkBAIC0zOTQsNyArMzI1LDcgQEAKIAlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChzc2kyX3ByZXBkZiArIDEpIC8gKHNzaTJfcGRmICsgMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfZmlyaV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaXJpX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAl1bnNpZ25lZCBsb25nIGZpcmlfcGRmLCBmaXJpX3ByZXBkZjsKIApAQCAtNDA1LDcgKzMzNiw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoZmlyaV9wcmVwZGYgKyAxKSAvIChmaXJpX3BkZiArIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX2Zpcmlfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpcmlfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKIAl1MzIgcHJlLCBwb3N0OwogCXUzMiBwYXJlbnQgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwpAQCAtNDIwLDcgKzM1MSw3IEBACiAKIH0KIAotc3RhdGljIGludCBfY2xrX2Zpcmlfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCitzdGF0aWMgaW50IGZpcmlfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJdTMyIHJlZywgZGl2LCBwcmUsIHBvc3QsIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CiAKQEAgLTQ0MSwxMiArMzcyLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9jbGtfbWJ4X2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1ieF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAyOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfY2xrX21zdGljazFfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbXN0aWNrMV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBtc3RpX3BkZjsKIApAQCAtNDU1LDcgKzM4Niw3IEBACiAJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAobXN0aV9wZGYgKyAxKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19tc3RpY2syX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1zdGljazJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgbXN0aV9wZGY7CiAKQEAgLTQ3Miw2NjEgKzQwMywxODUgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjbGsgY2tpaF9jbGsgPSB7Ci0JLm5hbWUgPSAiY2tpaCIsCiAJLmdldF9yYXRlID0gY2xrX2NraWhfZ2V0X3JhdGUsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfY2tpbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIENLSUxfQ0xLX0ZSRVE7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNraWxfY2xrID0gewotCS5uYW1lID0gImNraWwiLAotCS5nZXRfcmF0ZSA9IGNsa19ja2lsX2dldF9yYXRlLAotfTsKLQogc3RhdGljIHN0cnVjdCBjbGsgbWN1X3BsbF9jbGsgPSB7Ci0JLm5hbWUgPSAibWN1X3BsbCIsCiAJLnBhcmVudCA9ICZja2loX2NsaywKLQkuc2V0X3JhdGUgPSBfY2xrX3BsbF9zZXRfcmF0ZSwKLQkuZ2V0X3JhdGUgPSBfY2xrX3BsbF9nZXRfcmF0ZSwKKwkuZ2V0X3JhdGUgPSBtY3VfcGxsX2dldF9yYXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWN1X21haW5fY2xrID0gewotCS5uYW1lID0gIm1jdV9tYWluX2NsayIsCiAJLnBhcmVudCA9ICZtY3VfcGxsX2NsaywKLQkuZ2V0X3JhdGUgPSBfY2xrX21jdV9tYWluX2dldF9yYXRlLAorCS5nZXRfcmF0ZSA9IG1jdV9tYWluX2dldF9yYXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc2VyaWFsX3BsbF9jbGsgPSB7Ci0JLm5hbWUgPSAic2VyaWFsX3BsbCIsCiAJLnBhcmVudCA9ICZja2loX2NsaywKLQkuc2V0X3JhdGUgPSBfY2xrX3BsbF9zZXRfcmF0ZSwKLQkuZ2V0X3JhdGUgPSBfY2xrX3BsbF9nZXRfcmF0ZSwKLQkuZW5hYmxlID0gX2Nsa19zZXJpYWxfcGxsX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfc2VyaWFsX3BsbF9kaXNhYmxlLAorCS5nZXRfcmF0ZSA9IHNlcmlhbF9wbGxfZ2V0X3JhdGUsCisJLmVuYWJsZSA9IHNlcmlhbF9wbGxfZW5hYmxlLAorCS5kaXNhYmxlID0gc2VyaWFsX3BsbF9kaXNhYmxlLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX3BsbF9jbGsgPSB7Ci0JLm5hbWUgPSAidXNiX3BsbCIsCiAJLnBhcmVudCA9ICZja2loX2NsaywKLQkuc2V0X3JhdGUgPSBfY2xrX3BsbF9zZXRfcmF0ZSwKLQkuZ2V0X3JhdGUgPSBfY2xrX3BsbF9nZXRfcmF0ZSwKLQkuZW5hYmxlID0gX2Nsa191c2JfcGxsX2VuYWJsZSwKLQkuZGlzYWJsZSA9IF9jbGtfdXNiX3BsbF9kaXNhYmxlLAorCS5nZXRfcmF0ZSA9IHVzYl9wbGxfZ2V0X3JhdGUsCisJLmVuYWJsZSA9IHVzYl9wbGxfZW5hYmxlLAorCS5kaXNhYmxlID0gdXNiX3BsbF9kaXNhYmxlLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYWhiX2NsayA9IHsKLQkubmFtZSA9ICJhaGJfY2xrIiwKIAkucGFyZW50ID0gJm1jdV9tYWluX2NsaywKLQkuZ2V0X3JhdGUgPSBfY2xrX2hjbGtfZ2V0X3JhdGUsCisJLmdldF9yYXRlID0gYWhiX2dldF9yYXRlLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgcGVyX2NsayA9IHsKLQkubmFtZSA9ICJwZXJfY2xrIiwKLQkucGFyZW50ID0gJnVzYl9wbGxfY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfcGVyX2dldF9yYXRlLAorI2RlZmluZSBERUZJTkVfQ0xPQ0sobmFtZSwgaSwgZXIsIGVzLCBnciwgcywgcCkJCVwKKwlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCVwKKwkJLmlkCQk9IGksCQkJXAorCQkuZW5hYmxlX3JlZwk9IGVyLAkJCVwKKwkJLmVuYWJsZV9zaGlmdAk9IGVzLAkJCVwKKwkJLmdldF9yYXRlCT0gZ3IsCQkJXAorCQkuZW5hYmxlCQk9IGNncl9lbmFibGUsCQlcCisJCS5kaXNhYmxlCT0gY2dyX2Rpc2FibGUsCQlcCisJCS5zZWNvbmRhcnkJPSBzLAkJCVwKKwkJLnBhcmVudAkJPSBwLAkJCVwKKwl9CisKKyNkZWZpbmUgREVGSU5FX0NMT0NLMShuYW1lLCBpLCBlciwgZXMsIGdldHNldHJvdW5kLCBzLCBwKQlcCisJc3RhdGljIHN0cnVjdCBjbGsgbmFtZSA9IHsJCQkJXAorCQkuaWQJCT0gaSwJCQkJXAorCQkuZW5hYmxlX3JlZwk9IGVyLAkJCQlcCisJCS5lbmFibGVfc2hpZnQJPSBlcywJCQkJXAorCQkuZ2V0X3JhdGUJPSBnZXRzZXRyb3VuZCMjX2dldF9yYXRlLAlcCisJCS5zZXRfcmF0ZQk9IGdldHNldHJvdW5kIyNfc2V0X3JhdGUsCVwKKwkJLnJvdW5kX3JhdGUJPSBnZXRzZXRyb3VuZCMjX3JvdW5kX3JhdGUsCVwKKwkJLmVuYWJsZQkJPSBjZ3JfZW5hYmxlLAkJCVwKKwkJLmRpc2FibGUJPSBjZ3JfZGlzYWJsZSwJCQlcCisJCS5zZWNvbmRhcnkJPSBzLAkJCQlcCisJCS5wYXJlbnQJCT0gcCwJCQkJXAorCX0KKworREVGSU5FX0NMT0NLKHBlcmNsa19jbGssICAwLCBOVUxMLCAgICAgICAgICAwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CisKK0RFRklORV9DTE9DSyhzZGhjMV9jbGssICAgMCwgTVhDX0NDTV9DR1IwLCAgMCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKHNkaGMyX2NsaywgICAxLCBNWENfQ0NNX0NHUjAsICAyLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0soZ3B0X2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMCwgIDQsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyhlcGl0MV9jbGssICAgMCwgTVhDX0NDTV9DR1IwLCAgNiwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKGVwaXQyX2NsaywgICAxLCBNWENfQ0NNX0NHUjAsICA4LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0soaWltX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMCwgMTAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhhdGFfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IwLCAxMiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHNkbWFfY2xrMSwgICAwLCBNWENfQ0NNX0NHUjAsIDE0LCBOVUxMLCAmc2RtYV9jbGsxLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soY3NwaTNfY2xrLCAgIDIsIE1YQ19DQ01fQ0dSMCwgMTYsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhybmdfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IwLCAxOCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHVhcnQxX2NsaywgICAwLCBNWENfQ0NNX0NHUjAsIDIwLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDJfY2xrLCAgIDEsIE1YQ19DQ01fQ0dSMCwgMjIsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyhzc2kxX2NsaywgICAgMCwgTVhDX0NDTV9DR1IwLCAyNCwgc3NpMV9nZXRfcmF0ZSwgTlVMTCwgJnNlcmlhbF9wbGxfY2xrKTsKK0RFRklORV9DTE9DSyhpMmMxX2NsaywgICAgMCwgTVhDX0NDTV9DR1IwLCAyNiwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKGkyYzJfY2xrLCAgICAxLCBNWENfQ0NNX0NHUjAsIDI4LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0soaTJjM19jbGssICAgIDIsIE1YQ19DQ01fQ0dSMCwgMzAsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKKworREVGSU5FX0NMT0NLKG1wZWc0X2NsaywgICAwLCBNWENfQ0NNX0NHUjEsICAwLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0sobXN0aWNrMV9jbGssIDAsIE1YQ19DQ01fQ0dSMSwgIDIsIG1zdGljazFfZ2V0X3JhdGUsIE5VTEwsICZ1c2JfcGxsX2Nsayk7CitERUZJTkVfQ0xPQ0sobXN0aWNrMl9jbGssIDEsIE1YQ19DQ01fQ0dSMSwgIDQsIG1zdGljazJfZ2V0X3JhdGUsIE5VTEwsICZ1c2JfcGxsX2Nsayk7CitERUZJTkVfQ0xPQ0sxKGNzaV9jbGssICAgIDAsIE1YQ19DQ01fQ0dSMSwgIDYsIGNzaSwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKHJ0Y19jbGssICAgICAwLCBNWENfQ0NNX0NHUjEsICA4LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sod2RvZ19jbGssICAgIDAsIE1YQ19DQ01fQ0dSMSwgMTAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhwd21fY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IxLCAxMiwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKHVzYl9jbGsyLCAgICAwLCBNWENfQ0NNX0NHUjEsIDE4LCB1c2JfZ2V0X3JhdGUsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhrcHBfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IxLCAyMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGlwdV9jbGssICAgICAwLCBNWENfQ0NNX0NHUjEsIDIyLCBoc3BfZ2V0X3JhdGUsIE5VTEwsICZtY3VfbWFpbl9jbGspOworREVGSU5FX0NMT0NLKHVhcnQzX2NsaywgICAyLCBNWENfQ0NNX0NHUjEsIDI0LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDRfY2xrLCAgIDMsIE1YQ19DQ01fQ0dSMSwgMjYsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0NV9jbGssICAgNCwgTVhDX0NDTV9DR1IxLCAyOCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKG93aXJlX2NsaywgICAwLCBNWENfQ0NNX0NHUjEsIDMwLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CisKK0RFRklORV9DTE9DSyhzc2kyX2NsaywgICAgMSwgTVhDX0NDTV9DR1IyLCAgMCwgc3NpMl9nZXRfcmF0ZSwgTlVMTCwgJnNlcmlhbF9wbGxfY2xrKTsKK0RFRklORV9DTE9DSyhjc3BpMV9jbGssICAgMCwgTVhDX0NDTV9DR1IyLCAgMiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGNzcGkyX2NsaywgICAxLCBNWENfQ0NNX0NHUjIsICA0LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sobWJ4X2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMiwgIDYsIG1ieF9nZXRfcmF0ZSwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGVtaV9jbGssICAgICAwLCBNWENfQ0NNX0NHUjIsICA4LCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0socnRpY19jbGssICAgIDAsIE1YQ19DQ01fQ0dSMiwgMTAsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSzEoZmlyaV9jbGssICAgMCwgTVhDX0NDTV9DR1IyLCAxMiwgZmlyaSwgTlVMTCwgJnVzYl9wbGxfY2xrKTsKKworREVGSU5FX0NMT0NLKHNkbWFfY2xrMiwgICAwLCBOVUxMLCAgICAgICAgICAwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0sodXNiX2NsazEsICAgIDAsIE5VTEwsICAgICAgICAgIDAsIHVzYl9nZXRfcmF0ZSwgTlVMTCwgJnVzYl9wbGxfY2xrKTsKK0RFRklORV9DTE9DSyhuZmNfY2xrLCAgICAgMCwgTlVMTCwgICAgICAgICAgMCwgbmZjX2dldF9yYXRlLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soc2NjX2NsaywgICAgIDAsIE5VTEwsICAgICAgICAgIDAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhpcGdfY2xrLCAgICAgMCwgTlVMTCwgICAgICAgICAgMCwgaXBnX2dldF9yYXRlLCBOVUxMLCAmYWhiX2Nsayk7CisKKyNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpIFwKKwl7IFwKKwkJLmRldl9pZCA9IGQsIFwKKwkJLmNvbl9pZCA9IG4sIFwKKwkJLmNsayA9ICZjLCBcCisJfSwKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSBfX2luaXRkYXRhID0geworCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZW1pIiwgZW1pX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImNzcGkiLCBjc3BpMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJjc3BpIiwgY3NwaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiY3NwaSIsIGNzcGkzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImdwdCIsIGdwdF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJwd20iLCBwd21fY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAid2RvZyIsIHdkb2dfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0MV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlcGl0IiwgZXBpdDJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjX25hbmQuMCIsIE5VTEwsIG5mY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpcHUtY29yZSIsIE5VTEwsIGlwdV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJteDNfc2RjX2ZiIiwgTlVMTCwgaXB1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImtwcCIsIGtwcF9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiIiwgdXNiX2NsazEpCisJX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiX2FoYiIsIHVzYl9jbGsyKQorCV9SRUdJU1RFUl9DTE9DSygibXgzLWNhbWVyYS4wIiwgImNzaSIsIGNzaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4wIiwgTlVMTCwgdWFydDFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMSIsIE5VTEwsIHVhcnQyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjIiLCBOVUxMLCB1YXJ0M19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4zIiwgTlVMTCwgdWFydDRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuNCIsIE5VTEwsIHVhcnQ1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMCIsIE5VTEwsIGkyYzFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjIiLCBOVUxMLCBpMmMzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y193MS4wIiwgTlVMTCwgb3dpcmVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4wIiwgTlVMTCwgc2RoYzFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4xIiwgTlVMTCwgc2RoYzJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic3NpIiwgc3NpMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzc2kiLCBzc2kyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImZpcmkiLCBmaXJpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGljIiwgcnRpY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJybmciLCBybmdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2RtYV9haGIiLCBzZG1hX2NsazEpCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzZG1hX2lwZyIsIHNkbWFfY2xrMikKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1zdGljayIsIG1zdGljazFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXN0aWNrIiwgbXN0aWNrMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzY2MiLCBzY2NfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaWltIiwgaWltX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1wZWc0IiwgbXBlZzRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWJ4IiwgbWJ4X2NsaykKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBlcmNsa19jbGsgPSB7Ci0JLm5hbWUgPSAicGVyY2xrX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY3NwaV9jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gImNzcGlfY2xrIiwKLQkgLmlkID0gMCwKLQkgLnBhcmVudCA9ICZpcGdfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IyLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IyX0NTUEkxX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gImNzcGlfY2xrIiwKLQkgLmlkID0gMSwKLQkgLnBhcmVudCA9ICZpcGdfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IyLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IyX0NTUEkyX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gImNzcGlfY2xrIiwKLQkgLmlkID0gMiwKLQkgLnBhcmVudCA9ICZpcGdfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0NTUEkzX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGlwZ19jbGsgPSB7Ci0JLm5hbWUgPSAiaXBnX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5nZXRfcmF0ZSA9IF9jbGtfaXBnX2dldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZW1pX2NsayA9IHsKLQkubmFtZSA9ICJlbWlfY2xrIiwKLQkucGFyZW50ID0gJmFoYl9jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IyLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjJfRU1JX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZW1pX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHRfY2xrID0gewotCS5uYW1lID0gImdwdF9jbGsiLAotCS5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMF9HUFRfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcHdtX2NsayA9IHsKLQkubmFtZSA9ICJwd21fY2xrIiwKLQkucGFyZW50ID0gJnBlcmNsa19jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfUFdNX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVwaXRfY2xrW10gPSB7Ci0JewotCSAubmFtZSA9ICJlcGl0X2NsayIsCi0JIC5pZCA9IDAsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMF9FUElUMV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJlcGl0X2NsayIsCi0JIC5pZCA9IDEsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMF9FUElUMl9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBuZmNfY2xrID0gewotCS5uYW1lID0gIm5mY19jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZ2V0X3JhdGUgPSBfY2xrX25mY19nZXRfcmF0ZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNjY19jbGsgPSB7Ci0JLm5hbWUgPSAic2NjX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaXB1X2NsayA9IHsKLQkubmFtZSA9ICJpcHVfY2xrIiwKLQkucGFyZW50ID0gJm1jdV9tYWluX2NsaywKLQkuZ2V0X3JhdGUgPSBfY2xrX2hzcF9nZXRfcmF0ZSwKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9JUFVfT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsga3BwX2NsayA9IHsKLQkubmFtZSA9ICJrcHBfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfS1BQX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkb2dfY2xrID0gewotCS5uYW1lID0gIndkb2dfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfV0RPR19PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcnRjX2NsayA9IHsKLQkubmFtZSA9ICJydGNfY2xrIiwKLQkucGFyZW50ID0gJmlwZ19jbGssCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfUlRDX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gInVzYl9jbGsiLAotCSAucGFyZW50ID0gJnVzYl9wbGxfY2xrLAotCSAuZ2V0X3JhdGUgPSBfY2xrX3VzYl9nZXRfcmF0ZSx9LAotCXsKLQkgLm5hbWUgPSAidXNiX2FoYl9jbGsiLAotCSAucGFyZW50ID0gJmFoYl9jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfVVNCT1RHX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNzaV9jbGsgPSB7Ci0JLm5hbWUgPSAiY3NpX2NsayIsCi0JLnBhcmVudCA9ICZzZXJpYWxfcGxsX2NsaywKLQkuZ2V0X3JhdGUgPSBfY2xrX2NzaV9nZXRfcmF0ZSwKLQkucm91bmRfcmF0ZSA9IF9jbGtfY3NpX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gX2Nsa19jc2lfc2V0X3JhdGUsCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjFfQ1NJX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnRfY2xrW10gPSB7Ci0JewotCSAubmFtZSA9ICJ1YXJ0X2NsayIsCi0JIC5pZCA9IDAsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMF9VQVJUMV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJ1YXJ0X2NsayIsCi0JIC5pZCA9IDEsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMF9VQVJUMl9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJ1YXJ0X2NsayIsCi0JIC5pZCA9IDIsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9VQVJUM19PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJ1YXJ0X2NsayIsCi0JIC5pZCA9IDMsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9VQVJUNF9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJ1YXJ0X2NsayIsCi0JIC5pZCA9IDQsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9VQVJUNV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmNfY2xrW10gPSB7Ci0JewotCSAubmFtZSA9ICJpMmNfY2xrIiwKLQkgLmlkID0gMCwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0kyQzFfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotCXsKLQkgLm5hbWUgPSAiaTJjX2NsayIsCi0JIC5pZCA9IDEsCi0JIC5wYXJlbnQgPSAmcGVyY2xrX2NsaywKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMF9JMkMyX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLQl7Ci0JIC5uYW1lID0gImkyY19jbGsiLAotCSAuaWQgPSAyLAotCSAucGFyZW50ID0gJnBlcmNsa19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfSTJDM19PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvd2lyZV9jbGsgPSB7Ci0JLm5hbWUgPSAib3dpcmVfY2xrIiwKLQkucGFyZW50ID0gJnBlcmNsa19jbGssCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9PV0lSRV9PRkZTRVQsCi0JLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2RoY19jbGtbXSA9IHsKLQl7Ci0JIC5uYW1lID0gInNkaGNfY2xrIiwKLQkgLmlkID0gMCwKLQkgLnBhcmVudCA9ICZwZXJjbGtfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX1NEX01NQzFfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotCXsKLQkgLm5hbWUgPSAic2RoY19jbGsiLAotCSAuaWQgPSAxLAotCSAucGFyZW50ID0gJnBlcmNsa19jbGssCi0JIC5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkgLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JIC5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NHUjBfU0RfTU1DMl9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfY2xrW10gPSB7Ci0JewotCSAubmFtZSA9ICJzc2lfY2xrIiwKLQkgLnBhcmVudCA9ICZzZXJpYWxfcGxsX2NsaywKLQkgLmdldF9yYXRlID0gX2Nsa19zc2kxX2dldF9yYXRlLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX1NTSTFfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotCXsKLQkgLm5hbWUgPSAic3NpX2NsayIsCi0JIC5pZCA9IDEsCi0JIC5wYXJlbnQgPSAmc2VyaWFsX3BsbF9jbGssCi0JIC5nZXRfcmF0ZSA9IF9jbGtfc3NpMl9nZXRfcmF0ZSwKLQkgLmVuYWJsZSA9IF9jbGtfZW5hYmxlLAotCSAuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMiwKLQkgLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMl9TU0kyX09GRlNFVCwKLQkgLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZpcmlfY2xrID0gewotCS5uYW1lID0gImZpcmlfY2xrIiwKLQkucGFyZW50ID0gJnVzYl9wbGxfY2xrLAotCS5yb3VuZF9yYXRlID0gX2Nsa19maXJpX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlID0gX2Nsa19maXJpX3NldF9yYXRlLAotCS5nZXRfcmF0ZSA9IF9jbGtfZmlyaV9nZXRfcmF0ZSwKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjIsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMl9GSVJJX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGF0YV9jbGsgPSB7Ci0JLm5hbWUgPSAiYXRhX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX0FUQV9PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtYnhfY2xrID0gewotCS5uYW1lID0gIm1ieF9jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjIsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMl9HQUNDX09GRlNFVCwKLQkuZ2V0X3JhdGUgPSBfY2xrX21ieF9nZXRfcmF0ZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHZwdV9jbGsgPSB7Ci0JLm5hbWUgPSAidnB1X2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMiwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IyX0dBQ0NfT0ZGU0VULAotCS5nZXRfcmF0ZSA9IF9jbGtfbWJ4X2dldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcnRpY19jbGsgPSB7Ci0JLm5hbWUgPSAicnRpY19jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjIsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMl9SVElDX09GRlNFVCwKLQkuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19jbGsgPSB7Ci0JLm5hbWUgPSAicm5nX2NsayIsCi0JLnBhcmVudCA9ICZpcGdfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMCwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX1JOR19PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZG1hX2Nsa1tdID0gewotCXsKLQkgLm5hbWUgPSAic2RtYV9haGJfY2xrIiwKLQkgLnBhcmVudCA9ICZhaGJfY2xrLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IwLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IwX1NETUFfT0ZGU0VULAotCSAuZGlzYWJsZSA9IF9jbGtfZGlzYWJsZSx9LAotCXsKLQkgLm5hbWUgPSAic2RtYV9pcGdfY2xrIiwKLQkgLnBhcmVudCA9ICZpcGdfY2xrLH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1wZWc0X2NsayA9IHsKLQkubmFtZSA9ICJtcGVnNF9jbGsiLAotCS5wYXJlbnQgPSAmYWhiX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjEsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMV9IQU5UUk9fT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmwyY2NfY2xrID0gewotCS5uYW1lID0gInZsMmNjX2NsayIsCi0JLnBhcmVudCA9ICZhaGJfY2xrLAotCS5lbmFibGUgPSBfY2xrX2VuYWJsZSwKLQkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0dSMSwKLQkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX0hBTlRST19PRkZTRVQsCi0JLmRpc2FibGUgPSBfY2xrX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc3RpY2tfY2xrW10gPSB7Ci0JewotCSAubmFtZSA9ICJtc3RpY2tfY2xrIiwKLQkgLmlkID0gMCwKLQkgLnBhcmVudCA9ICZ1c2JfcGxsX2NsaywKLQkgLmdldF9yYXRlID0gX2Nsa19tc3RpY2sxX2dldF9yYXRlLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX01FTVNUSUNLMV9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi0JewotCSAubmFtZSA9ICJtc3RpY2tfY2xrIiwKLQkgLmlkID0gMSwKLQkgLnBhcmVudCA9ICZ1c2JfcGxsX2NsaywKLQkgLmdldF9yYXRlID0gX2Nsa19tc3RpY2syX2dldF9yYXRlLAotCSAuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JIC5lbmFibGVfcmVnID0gTVhDX0NDTV9DR1IxLAotCSAuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DR1IxX01FTVNUSUNLMl9PRkZTRVQsCi0JIC5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpaW1fY2xrID0gewotCS5uYW1lID0gImlpbV9jbGsiLAotCS5wYXJlbnQgPSAmaXBnX2NsaywKLQkuZW5hYmxlID0gX2Nsa19lbmFibGUsCi0JLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NHUjAsCi0JLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0dSMF9JSU1fT0ZGU0VULAotCS5kaXNhYmxlID0gX2Nsa19kaXNhYmxlLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19ja28xX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIGRpdiwgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCWRpdiA9IHBhcmVudCAvIHJhdGU7Ci0JaWYgKHBhcmVudCAlIHJhdGUpCi0JCWRpdisrOwotCi0JaWYgKGRpdiA+IDgpCi0JCWRpdiA9IDE2OwotCWVsc2UgaWYgKGRpdiA+IDQpCi0JCWRpdiA9IDg7Ci0JZWxzZSBpZiAoZGl2ID4gMikKLQkJZGl2ID0gNDsKLQotCXJldHVybiBwYXJlbnQgLyBkaXY7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19ja28xX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiByZWcsIGRpdiwgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCWRpdiA9IHBhcmVudCAvIHJhdGU7Ci0KLQlpZiAoZGl2ID09IDE2KQotCQlkaXYgPSA0OwotCWVsc2UgaWYgKGRpdiA9PSA4KQotCQlkaXYgPSAzOwotCWVsc2UgaWYgKGRpdiA9PSA0KQotCQlkaXYgPSAyOwotCWVsc2UgaWYgKGRpdiA9PSAyKQotCQlkaXYgPSAxOwotCWVsc2UgaWYgKGRpdiA9PSAxKQotCQlkaXYgPSAwOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NPU1IpICYgfk1YQ19DQ01fQ09TUl9DTEtPVVRESVZfTUFTSzsKLQlyZWcgfD0gZGl2IDw8IE1YQ19DQ01fQ09TUl9DTEtPVVRESVZfT0ZGU0VUOwotCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ09TUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19ja28xX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgZGl2OwotCi0JZGl2ID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DT1NSKSAmIE1YQ19DQ01fQ09TUl9DTEtPVVRESVZfTUFTSyA+PgotCSAgICBNWENfQ0NNX0NPU1JfQ0xLT1VURElWX09GRlNFVDsKLQotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKDEgPDwgZGl2KTsKLX0KLQotc3RhdGljIGludCBfY2xrX2NrbzFfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK2ludCBfX2luaXQgbXgzMV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpCiB7CiAJdTMyIHJlZzsKKwlpbnQgaTsKIAotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ09TUikgJiB+TVhDX0NDTV9DT1NSX0NMS09TRUxfTUFTSzsKLQotCWlmIChwYXJlbnQgPT0gJm1jdV9tYWluX2NsaykKLQkJcmVnIHw9IDAgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmaXBnX2NsaykKLQkJcmVnIHw9IDEgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmdXNiX3BsbF9jbGspCi0JCXJlZyB8PSAyIDw8IE1YQ19DQ01fQ09TUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gbWN1X21haW5fY2xrLnBhcmVudCkKLQkJcmVnIHw9IDMgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmYWhiX2NsaykKLQkJcmVnIHw9IDUgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmc2VyaWFsX3BsbF9jbGspCi0JCXJlZyB8PSA3IDw8IE1YQ19DQ01fQ09TUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJmNraWhfY2xrKQotCQlyZWcgfD0gOCA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZlbWlfY2xrKQotCQlyZWcgfD0gOSA8PCBNWENfQ0NNX0NPU1JfQ0xLT1NFTF9PRkZTRVQ7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZpcHVfY2xrKQotCQlyZWcgfD0gMHhBIDw8IE1YQ19DQ01fQ09TUl9DTEtPU0VMX09GRlNFVDsKLQllbHNlIGlmIChwYXJlbnQgPT0gJm5mY19jbGspCi0JCXJlZyB8PSAweEIgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmdWFydF9jbGtbMF0pCi0JCXJlZyB8PSAweEMgPDwgTVhDX0NDTV9DT1NSX0NMS09TRUxfT0ZGU0VUOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NPU1IpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX2Nsa19ja28xX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ09TUikgfCBNWENfQ0NNX0NPU1JfQ0xLT0VOOwotCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ09TUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX2Nsa19ja28xX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NPU1IpICYgfk1YQ19DQ01fQ09TUl9DTEtPRU47Ci0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DT1NSKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2tvMV9jbGsgPSB7Ci0JLm5hbWUgPSAiY2tvMV9jbGsiLAotCS5nZXRfcmF0ZSA9IF9jbGtfY2tvMV9nZXRfcmF0ZSwKLQkuc2V0X3JhdGUgPSBfY2xrX2NrbzFfc2V0X3JhdGUsCi0JLnJvdW5kX3JhdGUgPSBfY2xrX2NrbzFfcm91bmRfcmF0ZSwKLQkuc2V0X3BhcmVudCA9IF9jbGtfY2tvMV9zZXRfcGFyZW50LAotCS5lbmFibGUgPSBfY2xrX2NrbzFfZW5hYmxlLAotCS5kaXNhYmxlID0gX2Nsa19ja28xX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqbXhjX2Nsa3NbXSA9IHsKLQkmY2tpaF9jbGssCi0JJmNraWxfY2xrLAotCSZtY3VfcGxsX2NsaywKLQkmdXNiX3BsbF9jbGssCi0JJnNlcmlhbF9wbGxfY2xrLAotCSZtY3VfbWFpbl9jbGssCi0JJmFoYl9jbGssCi0JJnBlcl9jbGssCi0JJnBlcmNsa19jbGssCi0JJmNrbzFfY2xrLAotCSZlbWlfY2xrLAotCSZjc3BpX2Nsa1swXSwKLQkmY3NwaV9jbGtbMV0sCi0JJmNzcGlfY2xrWzJdLAotCSZpcGdfY2xrLAotCSZncHRfY2xrLAotCSZwd21fY2xrLAotCSZ3ZG9nX2NsaywKLQkmcnRjX2NsaywKLQkmZXBpdF9jbGtbMF0sCi0JJmVwaXRfY2xrWzFdLAotCSZuZmNfY2xrLAotCSZpcHVfY2xrLAotCSZrcHBfY2xrLAotCSZ1c2JfY2xrWzBdLAotCSZ1c2JfY2xrWzFdLAotCSZjc2lfY2xrLAotCSZ1YXJ0X2Nsa1swXSwKLQkmdWFydF9jbGtbMV0sCi0JJnVhcnRfY2xrWzJdLAotCSZ1YXJ0X2Nsa1szXSwKLQkmdWFydF9jbGtbNF0sCi0JJmkyY19jbGtbMF0sCi0JJmkyY19jbGtbMV0sCi0JJmkyY19jbGtbMl0sCi0JJm93aXJlX2NsaywKLQkmc2RoY19jbGtbMF0sCi0JJnNkaGNfY2xrWzFdLAotCSZzc2lfY2xrWzBdLAotCSZzc2lfY2xrWzFdLAotCSZmaXJpX2NsaywKLQkmYXRhX2NsaywKLQkmcnRpY19jbGssCi0JJnJuZ19jbGssCi0JJnNkbWFfY2xrWzBdLAotCSZzZG1hX2Nsa1sxXSwKLQkmbXN0aWNrX2Nsa1swXSwKLQkmbXN0aWNrX2Nsa1sxXSwKLQkmc2NjX2NsaywKLQkmaWltX2NsaywKLX07Ci0KLWludCBfX2luaXQgbXhjX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKLXsKLQl1MzIgcmVnOwotCXN0cnVjdCBjbGsgKipjbGtwOworCW14Y19zZXRfY3B1X3R5cGUoTVhDX0NQVV9NWDMxKTsKIAogCWNraWhfcmF0ZSA9IGZyZWY7CiAKLQlmb3IgKGNsa3AgPSBteGNfY2xrczsgY2xrcCA8IG14Y19jbGtzICsgQVJSQVlfU0laRShteGNfY2xrcyk7IGNsa3ArKykKLQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQotCWlmIChjcHVfaXNfbXgzMSgpKSB7Ci0JCWNsa19yZWdpc3RlcigmbXBlZzRfY2xrKTsKLQkJY2xrX3JlZ2lzdGVyKCZtYnhfY2xrKTsKLQl9IGVsc2UgewotCQljbGtfcmVnaXN0ZXIoJnZwdV9jbGspOwotCQljbGtfcmVnaXN0ZXIoJnZsMmNjX2Nsayk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOwogCiAJLyogVHVybiBvZmYgYWxsIHBvc3NpYmxlIGNsb2NrcyAqLwotCV9fcmF3X3dyaXRlbChNWENfQ0NNX0NHUjBfR1BUX01BU0ssIE1YQ19DQ01fQ0dSMCk7CisJX19yYXdfd3JpdGVsKCgzIDw8IDQpLCBNWENfQ0NNX0NHUjApOwogCV9fcmF3X3dyaXRlbCgwLCBNWENfQ0NNX0NHUjEpOwotCi0JX19yYXdfd3JpdGVsKE1YQ19DQ01fQ0dSMl9FTUlfTUFTSyB8Ci0JCSAgICAgTVhDX0NDTV9DR1IyX0lQTVVYMV9NQVNLIHwKLQkJICAgICBNWENfQ0NNX0NHUjJfSVBNVVgyX01BU0sgfAotCQkgICAgIE1YQ19DQ01fQ0dSMl9NWENDTEtFTlNFTF9NQVNLIHwJLyogZm9yIE1YMzIgKi8KLQkJICAgICBNWENfQ0NNX0NHUjJfQ0hJS0NBTVBFTl9NQVNLIHwJLyogZm9yIE1YMzIgKi8KLQkJICAgICBNWENfQ0NNX0NHUjJfT1ZSVlBVQlVTWV9NQVNLIHwJLyogZm9yIE1YMzIgKi8KKwlfX3Jhd193cml0ZWwoKDMgPDwgOCkgfCAoMyA8PCAxNCkgfCAoMyA8PCAxNil8CiAJCSAgICAgMSA8PCAyNyB8IDEgPDwgMjgsIC8qIEJpdCAyNyBhbmQgMjggYXJlIG5vdCBkZWZpbmVkIGZvcgogCQkJCQkgICBNWDMyLCBidXQgc3RpbGwgcmVxdWlyZWQgdG8gYmUgc2V0ICovCiAJCSAgICAgTVhDX0NDTV9DR1IyKTsKIAotCWNsa19kaXNhYmxlKCZja28xX2Nsayk7Ci0JY2xrX2Rpc2FibGUoJnVzYl9wbGxfY2xrKTsKKwl1c2JfcGxsX2Rpc2FibGUoJnVzYl9wbGxfY2xrKTsKIAogCXByX2luZm8oIkNsb2NrIGlucHV0IHNvdXJjZSBpcyAlbGRcbiIsIGNsa19nZXRfcmF0ZSgmY2tpaF9jbGspKTsKIApAQCAtMTE0Myw2ICs1OTgsOCBAQAogCQlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX1BNQ1IxKTsKIAl9CiAKKwlteGNfdGltZXJfaW5pdCgmaXBnX2Nsayk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY3JtX3JlZ3MuaCBiL2FyY2gvYXJtL21hY2gtbXgzL2NybV9yZWdzLmgKaW5kZXggNGEwZTBlZC4uYWRmYTM2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvY3JtX3JlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLW14My9jcm1fcmVncy5oCkBAIC05MSw0NyArOTEsNiBAQAogI2RlZmluZSBNWENfQ0NNX1BEUjBfTUNVX1BPREZfT0ZGU0VUICAgICAgICAgICAgMAogI2RlZmluZSBNWENfQ0NNX1BEUjBfTUNVX1BPREZfTUFTSyAgICAgICAgICAgICAgMHg3CiAKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0hTUF9ESVZfMSAgICAgICAgICAgICAgICAgICgweDAgPDwgMTEpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9IU1BfRElWXzIgICAgICAgICAgICAgICAgICAoMHgxIDw8IDExKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfSFNQX0RJVl8zICAgICAgICAgICAgICAgICAgKDB4MiA8PCAxMSkKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0hTUF9ESVZfNCAgICAgICAgICAgICAgICAgICgweDMgPDwgMTEpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9IU1BfRElWXzUgICAgICAgICAgICAgICAgICAoMHg0IDw8IDExKQotI2RlZmluZSBNWENfQ0NNX1BEUjBfSFNQX0RJVl82ICAgICAgICAgICAgICAgICAgKDB4NSA8PCAxMSkKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX0hTUF9ESVZfNyAgICAgICAgICAgICAgICAgICgweDYgPDwgMTEpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9IU1BfRElWXzggICAgICAgICAgICAgICAgICAoMHg3IDw8IDExKQotCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9JUEdfRElWXzEgICAgICAgICAgICAgICAgICAoMHgwIDw8IDYpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9JUEdfRElWXzIgICAgICAgICAgICAgICAgICAoMHgxIDw8IDYpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9JUEdfRElWXzMgICAgICAgICAgICAgICAgICAoMHgyIDw8IDYpCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9JUEdfRElWXzQgICAgICAgICAgICAgICAgICAoMHgzIDw8IDYpCi0KLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01BWF9ESVZfMSAgICAgICAgICAgICAgICAgICgweDAgPDwgMykKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01BWF9ESVZfMiAgICAgICAgICAgICAgICAgICgweDEgPDwgMykKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01BWF9ESVZfMyAgICAgICAgICAgICAgICAgICgweDIgPDwgMykKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01BWF9ESVZfNCAgICAgICAgICAgICAgICAgICgweDMgPDwgMykKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01BWF9ESVZfNSAgICAgICAgICAgICAgICAgICgweDQgPDwgMykKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01BWF9ESVZfNiAgICAgICAgICAgICAgICAgICgweDUgPDwgMykKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01BWF9ESVZfNyAgICAgICAgICAgICAgICAgICgweDYgPDwgMykKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01BWF9ESVZfOCAgICAgICAgICAgICAgICAgICgweDcgPDwgMykKLQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTkZDX0RJVl8xICAgICAgICAgICAgICAgICAgKDB4MCA8PCA4KQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTkZDX0RJVl8yICAgICAgICAgICAgICAgICAgKDB4MSA8PCA4KQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTkZDX0RJVl8zICAgICAgICAgICAgICAgICAgKDB4MiA8PCA4KQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTkZDX0RJVl80ICAgICAgICAgICAgICAgICAgKDB4MyA8PCA4KQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTkZDX0RJVl81ICAgICAgICAgICAgICAgICAgKDB4NCA8PCA4KQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTkZDX0RJVl82ICAgICAgICAgICAgICAgICAgKDB4NSA8PCA4KQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTkZDX0RJVl83ICAgICAgICAgICAgICAgICAgKDB4NiA8PCA4KQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTkZDX0RJVl84ICAgICAgICAgICAgICAgICAgKDB4NyA8PCA4KQotCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9NQ1VfRElWXzEgICAgICAgICAgICAgICAgICAweDAKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01DVV9ESVZfMiAgICAgICAgICAgICAgICAgIDB4MQotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUNVX0RJVl8zICAgICAgICAgICAgICAgICAgMHgyCi0jZGVmaW5lIE1YQ19DQ01fUERSMF9NQ1VfRElWXzQgICAgICAgICAgICAgICAgICAweDMKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01DVV9ESVZfNSAgICAgICAgICAgICAgICAgIDB4NAotI2RlZmluZSBNWENfQ0NNX1BEUjBfTUNVX0RJVl82ICAgICAgICAgICAgICAgICAgMHg1Ci0jZGVmaW5lIE1YQ19DQ01fUERSMF9NQ1VfRElWXzcgICAgICAgICAgICAgICAgICAweDYKLSNkZWZpbmUgTVhDX0NDTV9QRFIwX01DVV9ESVZfOCAgICAgICAgICAgICAgICAgIDB4NwotCiAjZGVmaW5lIE1YQ19DQ01fUERSMV9VU0JfUFJERl9PRkZTRVQgICAgICAgICAgICAzMAogI2RlZmluZSBNWENfQ0NNX1BEUjFfVVNCX1BSREZfTUFTSyAgICAgICAgICAgICAgKDB4MyA8PCAzMCkKICNkZWZpbmUgTVhDX0NDTV9QRFIxX1VTQl9QT0RGX09GRlNFVCAgICAgICAgICAgIDI3CkBAIC0xNTIsMTE4ICsxMTEsNiBAQAogLyogQml0IGRlZmluaXRpb25zIGZvciBSQ1NSICovCiAjZGVmaW5lIE1YQ19DQ01fUkNTUl9ORjE2QgkJCTB4ODAwMDAwMDAKIAotLyogQml0IGRlZmluaXRpb25zIGZvciBib3RoIE1DVSwgVVNCIGFuZCBTUiBQTEwgY29udHJvbCByZWdpc3RlcnMgKi8KLSNkZWZpbmUgTVhDX0NDTV9QQ1RMX0JSTSAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgTVhDX0NDTV9QQ1RMX1BEX09GRlNFVCAgICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIE1YQ19DQ01fUENUTF9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAoMHhGIDw8IDI2KQotI2RlZmluZSBNWENfQ0NNX1BDVExfTUZEX09GRlNFVCAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgTVhDX0NDTV9QQ1RMX01GRF9NQVNLICAgICAgICAgICAgICAgICAgICgweDNGRiA8PCAxNikKLSNkZWZpbmUgTVhDX0NDTV9QQ1RMX01GSV9PRkZTRVQgICAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIE1YQ19DQ01fUENUTF9NRklfTUFTSyAgICAgICAgICAgICAgICAgICAoMHhGIDw8IDEwKQotI2RlZmluZSBNWENfQ0NNX1BDVExfTUZOX09GRlNFVCAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNWENfQ0NNX1BDVExfTUZOX01BU0sgICAgICAgICAgICAgICAgICAgMHgzRkYKLQotI2RlZmluZSBNWENfQ0NNX0NHUjBfU0RfTU1DMV9PRkZTRVQgICAgICAgICAgICAgMAotI2RlZmluZSBNWENfQ0NNX0NHUjBfU0RfTU1DMV9NQVNLICAgICAgICAgICAgICAgKDB4MyA8PCAwKQotI2RlZmluZSBNWENfQ0NNX0NHUjBfU0RfTU1DMl9PRkZTRVQgICAgICAgICAgICAgMgotI2RlZmluZSBNWENfQ0NNX0NHUjBfU0RfTU1DMl9NQVNLICAgICAgICAgICAgICAgKDB4MyA8PCAyKQotI2RlZmluZSBNWENfQ0NNX0NHUjBfR1BUX09GRlNFVCAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBNWENfQ0NNX0NHUjBfR1BUX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCA0KQotI2RlZmluZSBNWENfQ0NNX0NHUjBfRVBJVDFfT0ZGU0VUICAgICAgICAgICAgICAgNgotI2RlZmluZSBNWENfQ0NNX0NHUjBfRVBJVDFfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCA2KQotI2RlZmluZSBNWENfQ0NNX0NHUjBfRVBJVDJfT0ZGU0VUICAgICAgICAgICAgICAgOAotI2RlZmluZSBNWENfQ0NNX0NHUjBfRVBJVDJfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCA4KQotI2RlZmluZSBNWENfQ0NNX0NHUjBfSUlNX09GRlNFVCAgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX0lJTV9NQVNLICAgICAgICAgICAgICAgICAgICgweDMgPDwgMTApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9BVEFfT0ZGU0VUICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBNWENfQ0NNX0NHUjBfQVRBX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMikKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX1NETUFfT0ZGU0VUICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TRE1BX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDE0KQotI2RlZmluZSBNWENfQ0NNX0NHUjBfQ1NQSTNfT0ZGU0VUICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX0NTUEkzX01BU0sgICAgICAgICAgICAgICAgICgweDMgPDwgMTYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9STkdfT0ZGU0VUICAgICAgICAgICAgICAgICAxOAotI2RlZmluZSBNWENfQ0NNX0NHUjBfUk5HX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxOCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX1VBUlQxX09GRlNFVCAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9VQVJUMV9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDIwKQotI2RlZmluZSBNWENfQ0NNX0NHUjBfVUFSVDJfT0ZGU0VUICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX1VBUlQyX01BU0sgICAgICAgICAgICAgICAgICgweDMgPDwgMjIpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9TU0kxX09GRlNFVCAgICAgICAgICAgICAgICAyNAotI2RlZmluZSBNWENfQ0NNX0NHUjBfU1NJMV9NQVNLICAgICAgICAgICAgICAgICAgKDB4MyA8PCAyNCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX0kyQzFfT0ZGU0VUICAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9JMkMxX01BU0sgICAgICAgICAgICAgICAgICAoMHgzIDw8IDI2KQotI2RlZmluZSBNWENfQ0NNX0NHUjBfSTJDMl9PRkZTRVQgICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgTVhDX0NDTV9DR1IwX0kyQzJfTUFTSyAgICAgICAgICAgICAgICAgICgweDMgPDwgMjgpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMF9JMkMzX09GRlNFVCAgICAgICAgICAgICAgICAzMAotI2RlZmluZSBNWENfQ0NNX0NHUjBfSTJDM19NQVNLICAgICAgICAgICAgICAgICAgKDB4MyA8PCAzMCkKLQotI2RlZmluZSBNWENfQ0NNX0NHUjFfSEFOVFJPX09GRlNFVCAgICAgICAgICAgICAgMAotI2RlZmluZSBNWENfQ0NNX0NHUjFfSEFOVFJPX01BU0sgICAgICAgICAgICAgICAgKDB4MyA8PCAwKQotI2RlZmluZSBNWENfQ0NNX0NHUjFfTUVNU1RJQ0sxX09GRlNFVCAgICAgICAgICAgMgotI2RlZmluZSBNWENfQ0NNX0NHUjFfTUVNU1RJQ0sxX01BU0sgICAgICAgICAgICAgKDB4MyA8PCAyKQotI2RlZmluZSBNWENfQ0NNX0NHUjFfTUVNU1RJQ0syX09GRlNFVCAgICAgICAgICAgNAotI2RlZmluZSBNWENfQ0NNX0NHUjFfTUVNU1RJQ0syX01BU0sgICAgICAgICAgICAgKDB4MyA8PCA0KQotI2RlZmluZSBNWENfQ0NNX0NHUjFfQ1NJX09GRlNFVCAgICAgICAgICAgICAgICAgNgotI2RlZmluZSBNWENfQ0NNX0NHUjFfQ1NJX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCA2KQotI2RlZmluZSBNWENfQ0NNX0NHUjFfUlRDX09GRlNFVCAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBNWENfQ0NNX0NHUjFfUlRDX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCA4KQotI2RlZmluZSBNWENfQ0NNX0NHUjFfV0RPR19PRkZTRVQgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1dET0dfTUFTSyAgICAgICAgICAgICAgICAgICgweDMgPDwgMTApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9QV01fT0ZGU0VUICAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBNWENfQ0NNX0NHUjFfUFdNX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMikKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1NJTV9PRkZTRVQgICAgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9TSU1fTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDE0KQotI2RlZmluZSBNWENfQ0NNX0NHUjFfRUNUX09GRlNFVCAgICAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX0VDVF9NQVNLICAgICAgICAgICAgICAgICAgICgweDMgPDwgMTYpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9VU0JPVEdfT0ZGU0VUICAgICAgICAgICAgICAxOAotI2RlZmluZSBNWENfQ0NNX0NHUjFfVVNCT1RHX01BU0sgICAgICAgICAgICAgICAgKDB4MyA8PCAxOCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX0tQUF9PRkZTRVQgICAgICAgICAgICAgICAgIDIwCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9LUFBfTUFTSyAgICAgICAgICAgICAgICAgICAoMHgzIDw8IDIwKQotI2RlZmluZSBNWENfQ0NNX0NHUjFfSVBVX09GRlNFVCAgICAgICAgICAgICAgICAgMjIKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX0lQVV9NQVNLICAgICAgICAgICAgICAgICAgICgweDMgPDwgMjIpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9VQVJUM19PRkZTRVQgICAgICAgICAgICAgICAyNAotI2RlZmluZSBNWENfQ0NNX0NHUjFfVUFSVDNfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCAyNCkKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1VBUlQ0X09GRlNFVCAgICAgICAgICAgICAgIDI2Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9VQVJUNF9NQVNLICAgICAgICAgICAgICAgICAoMHgzIDw8IDI2KQotI2RlZmluZSBNWENfQ0NNX0NHUjFfVUFSVDVfT0ZGU0VUICAgICAgICAgICAgICAgMjgKLSNkZWZpbmUgTVhDX0NDTV9DR1IxX1VBUlQ1X01BU0sgICAgICAgICAgICAgICAgICgweDMgPDwgMjgpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMV9PV0lSRV9PRkZTRVQgICAgICAgICAgICAgICAzMAotI2RlZmluZSBNWENfQ0NNX0NHUjFfT1dJUkVfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCAzMCkKLQotI2RlZmluZSBNWENfQ0NNX0NHUjJfU1NJMl9PRkZTRVQgICAgICAgICAgICAgICAgMAotI2RlZmluZSBNWENfQ0NNX0NHUjJfU1NJMl9NQVNLICAgICAgICAgICAgICAgICAgKDB4MyA8PCAwKQotI2RlZmluZSBNWENfQ0NNX0NHUjJfQ1NQSTFfT0ZGU0VUICAgICAgICAgICAgICAgMgotI2RlZmluZSBNWENfQ0NNX0NHUjJfQ1NQSTFfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCAyKQotI2RlZmluZSBNWENfQ0NNX0NHUjJfQ1NQSTJfT0ZGU0VUICAgICAgICAgICAgICAgNAotI2RlZmluZSBNWENfQ0NNX0NHUjJfQ1NQSTJfTUFTSyAgICAgICAgICAgICAgICAgKDB4MyA8PCA0KQotI2RlZmluZSBNWENfQ0NNX0NHUjJfR0FDQ19PRkZTRVQgICAgICAgICAgICAgICAgNgotI2RlZmluZSBNWENfQ0NNX0NHUjJfR0FDQ19NQVNLICAgICAgICAgICAgICAgICAgKDB4MyA8PCA2KQotI2RlZmluZSBNWENfQ0NNX0NHUjJfRU1JX09GRlNFVCAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBNWENfQ0NNX0NHUjJfRU1JX01BU0sgICAgICAgICAgICAgICAgICAgKDB4MyA8PCA4KQotI2RlZmluZSBNWENfQ0NNX0NHUjJfUlRJQ19PRkZTRVQgICAgICAgICAgICAgICAgMTAKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX1JUSUNfTUFTSyAgICAgICAgICAgICAgICAgICgweDMgPDwgMTApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9GSVJJX09GRlNFVCAgICAgICAgICAgICAgICAxMgotI2RlZmluZSBNWENfQ0NNX0NHUjJfRklSSV9NQVNLICAgICAgICAgICAgICAgICAgKDB4MyA8PCAxMikKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0lQTVVYMV9PRkZTRVQgICAgICAgICAgICAgIDE0Ci0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9JUE1VWDFfTUFTSyAgICAgICAgICAgICAgICAoMHgzIDw8IDE0KQotI2RlZmluZSBNWENfQ0NNX0NHUjJfSVBNVVgyX09GRlNFVCAgICAgICAgICAgICAgMTYKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0lQTVVYMl9NQVNLICAgICAgICAgICAgICAgICgweDMgPDwgMTYpCi0KLS8qIFRoZXNlIG5ldyBDR1IyIGJpdHMgYXJlIGFkZGVkIGluIE1YMzIgKi8KLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0FQTVNZU0NMS1NFTF9PRkZTRVQJMTgKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0FQTVNZU0NMS1NFTF9NQVNLCQkoMHgzIDw8IDE4KQotI2RlZmluZSBNWENfQ0NNX0NHUjJfQVBNU1NJQ0xLU0VMX09GRlNFVAkyMAotI2RlZmluZSBNWENfQ0NNX0NHUjJfQVBNU1NJQ0xLU0VMX01BU0sJCSgweDMgPDwgMjApCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9BUE1QRVJDTEtTRUxfT0ZGU0VUCTIyCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9BUE1QRVJDTEtTRUxfTUFTSwkJKDB4MyA8PCAyMikKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX01YQ0NMS0VOU0VMX09GRlNFVAkJMjQKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX01YQ0NMS0VOU0VMX01BU0sJCSgweDEgPDwgMjQpCi0jZGVmaW5lIE1YQ19DQ01fQ0dSMl9DSElLQ0FNUEVOX09GRlNFVAkJMjUKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0NISUtDQU1QRU5fTUFTSwkJKDB4MSA8PCAyNSkKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX09WUlZQVUJVU1lfT0ZGU0VUCQkyNgotI2RlZmluZSBNWENfQ0NNX0NHUjJfT1ZSVlBVQlVTWV9NQVNLCQkoMHgxIDw8IDI2KQotI2RlZmluZSBNWENfQ0NNX0NHUjJfQVBNRU5BX09GRlNFVAkJMzAKLSNkZWZpbmUgTVhDX0NDTV9DR1IyX0FPTUVOQV9NQVNLCQkoMHgxIDw8IDMwKQotCiAvKgogICogTFRSMCByZWdpc3RlciBvZmZzZXRzCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuYwppbmRleCBmODQyODgwLi4zODBiZTBjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5jCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgogCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwW10gPSB7CiAJewogCQkuc3RhcnQgPSBVQVJUMV9CQVNFX0FERFIsCkBAIC04Miw2ICs4NCw3IEBACiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHVhcnQyKSwKIH07CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDMxCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQzW10gPSB7CiAJewogCQkuc3RhcnQgPSBVQVJUNF9CQVNFX0FERFIsCkBAIC0xMTksNiArMTIyLDcgQEAKIAkucmVzb3VyY2UgPSB1YXJ0NCwKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodWFydDQpLAogfTsKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9NWDMxICovCiAKIC8qIEdQSU8gcG9ydCBkZXNjcmlwdGlvbiAqLwogc3RhdGljIHN0cnVjdCBteGNfZ3Bpb19wb3J0IGlteF9ncGlvX3BvcnRzW10gPSB7CkBAIC0xNjQsOCArMTY4LDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfbmFuZF9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydAk9IE5GQ19CQVNFX0FERFIsCi0JCS5lbmQJPSBORkNfQkFTRV9BRERSICsgMHhmZmYsCisJCS5zdGFydAk9IDAsIC8qIHJ1bnRpbWUgZGVwZW5kZW50ICovCisJCS5lbmQJPSAwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQogCX0sIHsKIAkJLnN0YXJ0CT0gTVhDX0lOVF9OQU5ERkMsCkBAIC0xODAsMyArMTg0LDE4OCBAQAogCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfbmFuZF9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZSA9IG14Y19uYW5kX3Jlc291cmNlcywKIH07CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2kyYzBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBJMkNfQkFTRV9BRERSLAorCQkuZW5kID0gSTJDX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCA9IE1YQ19JTlRfSTJDLAorCQkuZW5kID0gTVhDX0lOVF9JMkMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMCA9IHsKKwkubmFtZSA9ICJpbXgtaTJjIiwKKwkuaWQgPSAwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfaTJjMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IG14Y19pMmMwX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2kyYzFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBJMkMyX0JBU0VfQUREUiwKKwkJLmVuZCA9IEkyQzJfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9JMkMyLAorCQkuZW5kID0gTVhDX0lOVF9JMkMyLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTEgPSB7CisJLm5hbWUgPSAiaW14LWkyYyIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyYzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfaTJjMV9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmMyX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gSTJDM19CQVNFX0FERFIsCisJCS5lbmQgPSBJMkMzX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydCA9IE1YQ19JTlRfSTJDMywKKwkJLmVuZCA9IE1YQ19JTlRfSTJDMywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UyID0geworCS5uYW1lID0gImlteC1pMmMiLAorCS5pZCA9IDIsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19pMmMyX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjX2kyYzJfcmVzb3VyY2VzLAorfTsKKworI2lmZGVmIENPTkZJR19BUkNIX01YMzEKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjc2RoYzBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNTUNfU0RIQzFfQkFTRV9BRERSLAorCQkuZW5kID0gTU1DX1NESEMxX0JBU0VfQUREUiArIFNaXzE2SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9NTUNfU0RIQzEsCisJCS5lbmQgPSBNWENfSU5UX01NQ19TREhDMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjc2RoYzFfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBNTUNfU0RIQzJfQkFTRV9BRERSLAorCQkuZW5kID0gTU1DX1NESEMyX0JBU0VfQUREUiArIFNaXzE2SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9NTUNfU0RIQzIsCisJCS5lbmQgPSBNWENfSU5UX01NQ19TREhDMiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjc2RoY19kZXZpY2UwID0geworCS5uYW1lID0gIm14Yy1tbWMiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y3NkaGMwX3Jlc291cmNlcyksCisJLnJlc291cmNlID0gbXhjc2RoYzBfcmVzb3VyY2VzLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNzZGhjX2RldmljZTEgPSB7CisJLm5hbWUgPSAibXhjLW1tYyIsCisJLmlkID0gMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjc2RoYzFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNzZGhjMV9yZXNvdXJjZXMsCit9OworI2VuZGlmIC8qIENPTkZJR19BUkNIX01YMzEgKi8KKworLyogaS5NWDMxIEltYWdlIFByb2Nlc3NpbmcgVW5pdCAqLworCisvKiBUaGUgcmVzb3VyY2Ugb3JkZXIgaXMgaW1wb3J0YW50ISAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteDNfaXB1X3JzcmNbXSA9IHsKKwl7CisJCS5zdGFydCA9IElQVV9DVFJMX0JBU0VfQUREUiwKKwkJLmVuZCA9IElQVV9DVFJMX0JBU0VfQUREUiArIDB4NUYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gSVBVX0NUUkxfQkFTRV9BRERSICsgMHg4OCwKKwkJLmVuZCA9IElQVV9DVFJMX0JBU0VfQUREUiArIDB4QjMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVhDX0lOVF9JUFVfU1lOLAorCQkuZW5kID0gTVhDX0lOVF9JUFVfU1lOLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CisJCS5zdGFydCA9IE1YQ19JTlRfSVBVX0VSUiwKKwkJLmVuZCA9IE1YQ19JTlRfSVBVX0VSUiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgzX2lwdSA9IHsKKwkubmFtZSA9ICJpcHUtY29yZSIsCisJLmlkID0gLTEsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14M19pcHVfcnNyYyksCisJLnJlc291cmNlID0gbXgzX2lwdV9yc3JjLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmYl9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IElQVV9DVFJMX0JBU0VfQUREUiArIDB4QjQsCisJCS5lbmQJPSBJUFVfQ1RSTF9CQVNFX0FERFIgKyAweDFCRiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgzX2ZiID0geworCS5uYW1lCQk9ICJteDNfc2RjX2ZiIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGZiX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gZmJfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmLAorICAgICAgIH0sCit9OworCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzNQorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gTVhDX0ZFQ19CQVNFX0FERFIsCisJCS5lbmQJPSBNWENfRkVDX0JBU0VfQUREUiArIDB4ZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorCX0sIHsKKwkJLnN0YXJ0CT0gTVhDX0lOVF9GRUMsCisJCS5lbmQJPSBNWENfSU5UX0ZFQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmVjX2RldmljZSA9IHsKKwkubmFtZSA9ICJmZWMiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfZmVjX3Jlc291cmNlcywKK307CisjZW5kaWYKKworc3RhdGljIGludCBteDNfZGV2aWNlc19pbml0KHZvaWQpCit7CisJaWYgKGNwdV9pc19teDMxKCkpIHsKKwkJbXhjX25hbmRfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gTVgzMV9ORkNfQkFTRV9BRERSOworCQlteGNfbmFuZF9yZXNvdXJjZXNbMF0uZW5kID0gTVgzMV9ORkNfQkFTRV9BRERSICsgMHhmZmY7CisJfQorCWlmIChjcHVfaXNfbXgzNSgpKSB7CisJCW14Y19uYW5kX3Jlc291cmNlc1swXS5zdGFydCA9IE1YMzVfTkZDX0JBU0VfQUREUjsKKwkJbXhjX25hbmRfcmVzb3VyY2VzWzBdLmVuZCA9IE1YMzVfTkZDX0JBU0VfQUREUiArIDB4ZmZmOworCX0KKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwobXgzX2RldmljZXNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW14My9kZXZpY2VzLmgKaW5kZXggOTk0OWVmNC4uODhjMDRiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2RldmljZXMuaApAQCAtNiwzICs2LDExIEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2U0OwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3cxX21hc3Rlcl9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfbmFuZF9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDNfaXB1OworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgzX2ZiOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2ZlY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNzZGhjX2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNzZGhjX2RldmljZTE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9pb211eC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvaW9tdXguYwppbmRleCA3YTUwODhiLi40MGZmYzVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9pb211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2lvbXV4LmMKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IDIwMDQtMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IFZhbGVudGluIExvbmdjaGFtcCA8dmFsZW50aW4ubG9uZ2NoYW1wQGVwZmwuY2g+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTIxLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgpAQCAtMzgsNiArNDAsOCBAQAogc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX211eF9sb2NrKTsKIAogI2RlZmluZSBJT01VWF9SRUdfTUFTSyAoSU9NVVhfUEFETlVNX01BU0sgJiB+MHgzKQorCit1bnNpZ25lZCBsb25nIG14Y19waW5fYWxsb2NfbWFwW05CX1BPUlRTICogMzIgLyBCSVRTX1BFUl9MT05HXTsKIC8qCiAgKiBzZXQgdGhlIG1vZGUgZm9yIGEgSU9NVVggcGluLgogICovCkBAIC01MCw5ICs1NCw2IEBACiAJZmllbGQgPSBwaW5fbW9kZSAmIDB4MzsKIAltb2RlID0gKHBpbl9tb2RlICYgSU9NVVhfTU9ERV9NQVNLKSA+PiBJT01VWF9NT0RFX1NISUZUOwogCi0JcHJfZGVidWcoIiVzOiByZWcgb2Zmc2V0ID0gMHgleCBmaWVsZCA9ICVkIG1vZGUgPSAweCUwMnhcbiIsCi0JCQlfX2Z1bmNfXywgKHBpbl9tb2RlICYgSU9NVVhfUkVHX01BU0spLCBmaWVsZCwgbW9kZSk7Ci0KIAlzcGluX2xvY2soJmdwaW9fbXV4X2xvY2spOwogCiAJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CkBAIC05Myw2ICs5NCw4NiBAQAogRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfc2V0X3BhZCk7CiAKIC8qCisgKiBzZXR1cHMgYSBzaW5nbGUgcGluOgorICogCS0gcmVzZXJ2ZXMgdGhlIHBpbiBzbyB0aGF0IGl0IGlzIG5vdCBjbGFpbWVkIGJ5IGFub3RoZXIgZHJpdmVyCisgKiAJLSBzZXR1cHMgdGhlIGlvbXV4IGFjY29yZGluZyB0byB0aGUgY29uZmlndXJhdGlvbgorICogCS0gaWYgdGhlIHBpbiBpcyBjb25maWd1cmVkIGFzIGEgR1BJTywgd2UgY2xhaW0gaXQgdGhyb3VnaCBrZXJuZWwgZ3Bpb2xpYgorICovCitpbnQgbXhjX2lvbXV4X3NldHVwX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwl1bnNpZ25lZCBwYWQgPSBwaW4gJiBJT01VWF9QQUROVU1fTUFTSzsKKwl1bnNpZ25lZCBncGlvOworCisJaWYgKHBhZCA+PSAoUElOX01BWCArIDEpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXhjX2lvbXV4OiBBdHRlbXB0IHRvIHJlcXVlc3Qgbm9uZXhpc3RhbnQgcGluICV1IGZvciBcIiVzXCJcbiIsCisJCQlwYWQsIGxhYmVsID8gbGFiZWwgOiAiPyIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChwYWQsIG14Y19waW5fYWxsb2NfbWFwKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm14Y19pb211eDogcGluICV1IGFscmVhZHkgdXNlZC4gQWxsb2NhdGlvbiBmb3IgXCIlc1wiIGZhaWxlZFxuIiwKKwkJCXBhZCwgbGFiZWwgPyBsYWJlbCA6ICI/Iik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlteGNfaW9tdXhfbW9kZShwaW4pOworCisJLyogaWYgd2UgaGF2ZSBhIGdwaW8sIHdlIGNhbiBhbGxvY2F0ZSBpdCAqLworCWdwaW8gPSAocGluICYgSU9NVVhfR1BJT05VTV9NQVNLKSA+PiBJT01VWF9HUElPTlVNX1NISUZUOworCWlmIChncGlvIDwgKEdQSU9fUE9SVF9NQVggKyAxKSAqIDMyKQorCQlpZiAoZ3Bpb19yZXF1ZXN0KGdwaW8sIGxhYmVsKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG14Y19pb211eF9zZXR1cF9waW4pOworCitpbnQgbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModW5zaWduZWQgaW50ICpwaW5fbGlzdCwgdW5zaWduZWQgY291bnQsCisJCWNvbnN0IGNoYXIgKmxhYmVsKQoreworCXVuc2lnbmVkIGludCAqcCA9IHBpbl9saXN0OworCWludCBpOworCWludCByZXQgPSAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJaWYgKG14Y19pb211eF9zZXR1cF9waW4oKnAsIGxhYmVsKSkKKwkJCWdvdG8gc2V0dXBfZXJyb3I7CisJCXArKzsKKwl9CisJcmV0dXJuIDA7CisKK3NldHVwX2Vycm9yOgorCW14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnMocGluX2xpc3QsIGkpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKTsKKwordm9pZCBteGNfaW9tdXhfcmVsZWFzZV9waW4oY29uc3QgdW5zaWduZWQgaW50IHBpbikKK3sKKwl1bnNpZ25lZCBwYWQgPSBwaW4gJiBJT01VWF9QQUROVU1fTUFTSzsKKwl1bnNpZ25lZCBncGlvOworCisJaWYgKHBhZCA8IChQSU5fTUFYICsgMSkpCisJCWNsZWFyX2JpdChwYWQsIG14Y19waW5fYWxsb2NfbWFwKTsKKworCWdwaW8gPSAocGluICYgSU9NVVhfR1BJT05VTV9NQVNLKSA+PiBJT01VWF9HUElPTlVNX1NISUZUOworCWlmIChncGlvIDwgKEdQSU9fUE9SVF9NQVggKyAxKSAqIDMyKQorCQlncGlvX2ZyZWUoZ3Bpbyk7Cit9CitFWFBPUlRfU1lNQk9MKG14Y19pb211eF9yZWxlYXNlX3Bpbik7CisKK3ZvaWQgbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgaW50ICpwID0gcGluX2xpc3Q7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlteGNfaW9tdXhfcmVsZWFzZV9waW4oKnApOworCQlwKys7CisJfQorfQorRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKTsKKworLyoKICAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcy9kaXNhYmxlcyB0aGUgZ2VuZXJhbCBwdXJwb3NlIGZ1bmN0aW9uIGZvciBhIHBhcnRpY3VsYXIKICAqIHNpZ25hbC4KICAqLwpAQCAtMTExLDQgKzE5MiwzIEBACiAJc3Bpbl91bmxvY2soJmdwaW9fbXV4X2xvY2spOwogfQogRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfc2V0X2dwcik7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMgYi9hcmNoL2FybS9tYWNoLW14My9tbS5jCmluZGV4IDA1ODliNWMuLjllMTQ1OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL21tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbW0uYwpAQCAtMjIsMTAgKzIyLDE0IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CisKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogLyohCiAgKiBAZmlsZSBtbS5jCkBAIC01MCw2ICs1NCwxNiBAQAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVZJQ19CQVNFX0FERFIpLAogCQkubGVuZ3RoCQk9IEFWSUNfU0laRSwKIAkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBSVBTMV9CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMxX0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gQUlQUzFfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAorCX0sIHsKKwkJLnZpcnR1YWwJPSBBSVBTMl9CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFJUFMyX0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gQUlQUzJfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAogCX0sCiB9OwogCkBAIC02MiwzICs3NiwyNCBAQAogewogCWlvdGFibGVfaW5pdChteGNfaW9fZGVzYywgQVJSQVlfU0laRShteGNfaW9fZGVzYykpOwogfQorCisjaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKK3N0YXRpYyBpbnQgbXhjX2luaXRfbDJ4MCh2b2lkKQoreworCXZvaWQgX19pb21lbSAqbDJ4MF9iYXNlOworCisJbDJ4MF9iYXNlID0gaW9yZW1hcChMMkNDX0JBU0VfQUREUiwgNDA5Nik7CisJaWYgKElTX0VSUihsMngwX2Jhc2UpKSB7CisJCXByaW50ayhLRVJOX0VSUiAicmVtYXBwaW5nIEwyIGNhY2hlIGFyZWEgZmFpbGVkIHdpdGggJWxkXG4iLAorCQkJCVBUUl9FUlIobDJ4MF9iYXNlKSk7CisJCXJldHVybiAwOworCX0KKworCWwyeDBfaW5pdChsMngwX2Jhc2UsIDB4MDAwMzAwMjQsIDB4MDAwMDAwMDApOworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwobXhjX2luaXRfbDJ4MCk7CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jCmluZGV4IGY5MDJhN2MuLjgzZTVlOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxYWRzLmMKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CkBAIC0zNSw2ICszNywxMiBAQAogI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KICNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgogCisjaWZkZWYgQ09ORklHX01BQ0hfTVgzMUFEU19XTTExMzNfRVYxCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9hdWRpby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvcG1pYy5oPgorI2VuZGlmCisKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKIC8qIQpAQCAtOTQsMTMgKzEwMiwxNiBAQAogCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCiB9OwogCitzdGF0aWMgaW50IHVhcnRfcGluc1tdID0geworCU1YMzFfUElOX0NUUzFfX0NUUzEsCisJTVgzMV9QSU5fUlRTMV9fUlRTMSwKKwlNWDMxX1BJTl9UWEQxX19UWEQxLAorCU1YMzFfUElOX1JYRDFfX1JYRDEKK307CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9pbXhfdWFydCh2b2lkKQogewotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX0NUUzFfX0NUUzEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JUUzFfX1JUUzEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1RYRDFfX1RYRDEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JYRDFfX1JYRDEpOwotCisJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModWFydF9waW5zLCBBUlJBWV9TSVpFKHVhcnRfcGlucyksICJ1YXJ0LTAiKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CiB9CiAjZWxzZSAvKiAhU0VSSUFMX0lNWCAqLwpAQCAtMTc2LDcgKzE4Nyw3IEBACiAJLyoKIAkgKiBDb25maWd1cmUgSU5UIGxpbmUgYXMgR1BJTyBpbnB1dAogCSAqLwotCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fR1BJTzFfNCwgSU9NVVhfQ09ORklHX0dQSU8pKTsKKwlteGNfaW9tdXhfc2V0dXBfcGluKElPTVVYX01PREUoTVgzMV9QSU5fR1BJTzFfNCwgSU9NVVhfQ09ORklHX0dQSU8pLCAiZXhwaW8iKTsKIAogCS8qIGRpc2FibGUgdGhlIGludGVycnVwdCBhbmQgY2xlYXIgdGhlIHN0YXR1cyAqLwogCV9fcmF3X3dyaXRldygweEZGRkYsIFBCQ19JTlRNQVNLX0NMRUFSX1JFRyk7CkBAIC0xOTEsMjYgKzIwMiwzMDEgQEAKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihFWFBJT19QQVJFTlRfSU5ULCBteDMxYWRzX2V4cGlvX2lycV9oYW5kbGVyKTsKIH0KIAorI2lmZGVmIENPTkZJR19NQUNIX01YMzFBRFNfV00xMTMzX0VWMQorLyogVGhpcyBzZWN0aW9uIGRlZmluZXMgc2V0dXAgZm9yIHRoZSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MKKyAqIDExMzMtRVYxIFBNVS9hdWRpbyBib2FyZC4gIFdoZW4gb3RoZXIgUE1VIGJvYXJkcyBhcmUgc3VwcG9ydGVkIHRoZQorICogcmVndWxhdG9yIGRlZmluaXRpb25zIG1heSBiZSBzaGFyZWQgd2l0aCB0aGVtLCBidXQgZm9yIG5vdyB0aGV5IGNhbgorICogb25seSBiZSB1c2VkIHdpdGggdGhpcyBib2FyZCBzbyB3b3VsZCBnZW5lcmF0ZSB3YXJuaW5ncyBhYm91dAorICogdW51c2VkIHN0YXRpY3MgYW5kIHNvbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWMgdG8gdGhpcworICogbW9kdWxlLgorICovCisKKy8qIENQVSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHN3MWFfY29uc3VtZXJzW10gPSB7CisJeworCQkuc3VwcGx5ID0gImNwdV92Y2MiLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzdzFhX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJTVzFBIiwKKwkJLm1pbl91ViA9IDEyNzUwMDAsCisJCS5tYXhfdVYgPSAxNjAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9NT0RFLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8CisJCQkJICAgIFJFR1VMQVRPUl9NT0RFX0ZBU1QsCisJCS5zdGF0ZV9tZW0gPSB7CisJCQkgLnVWID0gMTQwMDAwMCwKKwkJCSAubW9kZSA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJCSAuZW5hYmxlZCA9IDEsCisJCSB9LAorCQkuaW5pdGlhbF9zdGF0ZSA9IFBNX1NVU1BFTkRfTUVNLAorCQkuYWx3YXlzX29uID0gMSwKKwkJLmJvb3Rfb24gPSAxLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoc3cxYV9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHN3MWFfY29uc3VtZXJzLAorfTsKKworLyogU3lzdGVtIElPIC0gSGlnaCAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHZpb2hpX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJWSU9ITyIsCisJCS5taW5fdVYgPSAyODAwMDAwLAorCQkubWF4X3VWID0gMjgwMDAwMCwKKwkJLnN0YXRlX21lbSA9IHsKKwkJCSAudVYgPSAyODAwMDAwLAorCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkJIC5lbmFibGVkID0gMSwKKwkJIH0sCisJCS5pbml0aWFsX3N0YXRlID0gUE1fU1VTUEVORF9NRU0sCisJCS5hbHdheXNfb24gPSAxLAorCQkuYm9vdF9vbiA9IDEsCisJfSwKK307CisKKy8qIFN5c3RlbSBJTyAtIExvdyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHZpb2xvX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJWSU9MTyIsCisJCS5taW5fdVYgPSAxODAwMDAwLAorCQkubWF4X3VWID0gMTgwMDAwMCwKKwkJLnN0YXRlX21lbSA9IHsKKwkJCSAudVYgPSAxODAwMDAwLAorCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkJIC5lbmFibGVkID0gMSwKKwkJIH0sCisJCS5pbml0aWFsX3N0YXRlID0gUE1fU1VTUEVORF9NRU0sCisJCS5hbHdheXNfb24gPSAxLAorCQkuYm9vdF9vbiA9IDEsCisJfSwKK307CisKKy8qIEREUiBSQU0gKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzdzJhX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJTVzJBIiwKKwkJLm1pbl91ViA9IDE4MDAwMDAsCisJCS5tYXhfdVYgPSAxODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJLnN0YXRlX21lbSA9IHsKKwkJCSAudVYgPSAxODAwMDAwLAorCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkJIC5lbmFibGVkID0gMSwKKwkJIH0sCisJCS5zdGF0ZV9kaXNrID0geworCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkJIC5lbmFibGVkID0gMCwKKwkJIH0sCisJCS5hbHdheXNfb24gPSAxLAorCQkuYm9vdF9vbiA9IDEsCisJCS5pbml0aWFsX3N0YXRlID0gUE1fU1VTUEVORF9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBsZG8xX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJWQ0FNL1ZNTUMxL1ZNTUMyIiwKKwkJLm1pbl91ViA9IDI4MDAwMDAsCisJCS5tYXhfdVYgPSAyODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJLmFwcGx5X3VWID0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGxkbzJfY29uc3VtZXJzW10gPSB7CisJeworCQkuc3VwcGx5ID0gIkFWREQiLAorCX0sCisJeworCQkuc3VwcGx5ID0gIkhQVkREIiwKKwl9LAorfTsKKworLyogQ09ERUMgYW5kIFNJTSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGxkbzJfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZFU0lNL1ZTSU0vQVZERCIsCisJCS5taW5fdVYgPSAzMzAwMDAwLAorCQkubWF4X3VWID0gMzMwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCS5hcHBseV91ViA9IDEsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShsZG8yX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gbGRvMl9jb25zdW1lcnMsCit9OworCisvKiBHZW5lcmFsICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmRpZ19kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiVkRJRyIsCisJCS5taW5fdVYgPSAxNTAwMDAwLAorCQkubWF4X3VWID0gMTUwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCS5hcHBseV91ViA9IDEsCisJCS5hbHdheXNfb24gPSAxLAorCQkuYm9vdF9vbiA9IDEsCisJfSwKK307CisKKy8qIFRyYW5jZWl2ZXJzICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbGRvNF9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiVlJGMS9DVkREXzIuNzc1IiwKKwkJLm1pbl91ViA9IDI1MDAwMDAsCisJCS5tYXhfdVYgPSAyNTAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJLmFwcGx5X3VWID0gMSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB3bTgzNTBfbGVkX3BsYXRmb3JtX2RhdGEgd204MzUwX2xlZF9kYXRhID0geworCS5uYW1lICAgICAgICAgICAgPSAid204MzUwOndoaXRlIiwKKwkuZGVmYXVsdF90cmlnZ2VyID0gImhlYXJ0YmVhdCIsCisJLm1heF91QSAgICAgICAgICA9IDI3ODk5LAorfTsKKworc3RhdGljIHN0cnVjdCB3bTgzNTBfYXVkaW9fcGxhdGZvcm1fZGF0YSBpbXgzMmFkc193bTgzNTBfc2V0dXAgPSB7CisJLnZtaWRfZGlzY2hhcmdlX21zZWNzID0gMTAwMCwKKwkuZHJhaW5fbXNlY3MgPSAzMCwKKwkuY2FwX2Rpc2NoYXJnZV9tc2VjcyA9IDcwMCwKKwkudm1pZF9jaGFyZ2VfbXNlY3MgPSA3MDAsCisJLnZtaWRfc19jdXJ2ZSA9IFdNODM1MF9TX0NVUlZFX1NMT1csCisJLmRpc19vdXQ0ID0gV004MzUwX0RJU0NIQVJHRV9TTE9XLAorCS5kaXNfb3V0MyA9IFdNODM1MF9ESVNDSEFSR0VfU0xPVywKKwkuZGlzX291dDIgPSBXTTgzNTBfRElTQ0hBUkdFX1NMT1csCisJLmRpc19vdXQxID0gV004MzUwX0RJU0NIQVJHRV9TTE9XLAorCS52cm9pX291dDQgPSBXTTgzNTBfVElFX09GRl81MDBSLAorCS52cm9pX291dDMgPSBXTTgzNTBfVElFX09GRl81MDBSLAorCS52cm9pX291dDIgPSBXTTgzNTBfVElFX09GRl81MDBSLAorCS52cm9pX291dDEgPSBXTTgzNTBfVElFX09GRl81MDBSLAorCS52cm9pX2VuYWJsZSA9IDAsCisJLmNvZGVjX2N1cnJlbnRfb24gPSBXTTgzNTBfQ09ERUNfSVNFTF8xXzAsCisJLmNvZGVjX2N1cnJlbnRfc3RhbmRieSA9IFdNODM1MF9DT0RFQ19JU0VMXzBfNSwKKwkuY29kZWNfY3VycmVudF9jaGFyZ2UgPSBXTTgzNTBfQ09ERUNfSVNFTF8xXzUsCit9OworCitzdGF0aWMgaW50IG14MzFfd204MzUwX2luaXQoc3RydWN0IHdtODM1MCAqd204MzUwKQoreworCWludCBpOworCisJd204MzUwX2dwaW9fY29uZmlnKHdtODM1MCwgMCwgV004MzUwX0dQSU9fRElSX0lOLAorCQkJICAgV004MzUwX0dQSU8wX1BXUl9PTl9JTiwgV004MzUwX0dQSU9fQUNUSVZFX0xPVywKKwkJCSAgIFdNODM1MF9HUElPX1BVTExfVVAsIFdNODM1MF9HUElPX0lOVkVSVF9PRkYsCisJCQkgICBXTTgzNTBfR1BJT19ERUJPVU5DRV9PTik7CisKKwl3bTgzNTBfZ3Bpb19jb25maWcod204MzUwLCAzLCBXTTgzNTBfR1BJT19ESVJfSU4sCisJCQkgICBXTTgzNTBfR1BJTzNfUFdSX09GRl9JTiwgV004MzUwX0dQSU9fQUNUSVZFX0hJR0gsCisJCQkgICBXTTgzNTBfR1BJT19QVUxMX0RPV04sIFdNODM1MF9HUElPX0lOVkVSVF9PRkYsCisJCQkgICBXTTgzNTBfR1BJT19ERUJPVU5DRV9PTik7CisKKwl3bTgzNTBfZ3Bpb19jb25maWcod204MzUwLCA0LCBXTTgzNTBfR1BJT19ESVJfSU4sCisJCQkgICBXTTgzNTBfR1BJTzRfTVJfSU4sIFdNODM1MF9HUElPX0FDVElWRV9ISUdILAorCQkJICAgV004MzUwX0dQSU9fUFVMTF9ET1dOLCBXTTgzNTBfR1BJT19JTlZFUlRfT0ZGLAorCQkJICAgV004MzUwX0dQSU9fREVCT1VOQ0VfT0ZGKTsKKworCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDcsIFdNODM1MF9HUElPX0RJUl9JTiwKKwkJCSAgIFdNODM1MF9HUElPN19ISUJFUk5BVEVfSU4sIFdNODM1MF9HUElPX0FDVElWRV9ISUdILAorCQkJICAgV004MzUwX0dQSU9fUFVMTF9ET1dOLCBXTTgzNTBfR1BJT19JTlZFUlRfT0ZGLAorCQkJICAgV004MzUwX0dQSU9fREVCT1VOQ0VfT0ZGKTsKKworCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDYsIFdNODM1MF9HUElPX0RJUl9PVVQsCisJCQkgICBXTTgzNTBfR1BJTzZfU0RPVVRfT1VULCBXTTgzNTBfR1BJT19BQ1RJVkVfSElHSCwKKwkJCSAgIFdNODM1MF9HUElPX1BVTExfTk9ORSwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKKwkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09GRik7CisKKwl3bTgzNTBfZ3Bpb19jb25maWcod204MzUwLCA4LCBXTTgzNTBfR1BJT19ESVJfT1VULAorCQkJICAgV004MzUwX0dQSU84X1ZDQ19GQVVMVF9PVVQsIFdNODM1MF9HUElPX0FDVElWRV9MT1csCisJCQkgICBXTTgzNTBfR1BJT19QVUxMX05PTkUsIFdNODM1MF9HUElPX0lOVkVSVF9PRkYsCisJCQkgICBXTTgzNTBfR1BJT19ERUJPVU5DRV9PRkYpOworCisJd204MzUwX2dwaW9fY29uZmlnKHdtODM1MCwgOSwgV004MzUwX0dQSU9fRElSX09VVCwKKwkJCSAgIFdNODM1MF9HUElPOV9CQVRUX0ZBVUxUX09VVCwgV004MzUwX0dQSU9fQUNUSVZFX0xPVywKKwkJCSAgIFdNODM1MF9HUElPX1BVTExfTk9ORSwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKKwkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09GRik7CisKKwkvKiBGaXggdXAgZm9yIG91ciBvd24gc3VwcGxpZXMuICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGRvMl9jb25zdW1lcnMpOyBpKyspCisJCWxkbzJfY29uc3VtZXJzW2ldLmRldiA9IHdtODM1MC0+ZGV2OworCisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9EQ0RDXzEsICZzdzFhX2RhdGEpOworCXdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLCBXTTgzNTBfRENEQ18zLCAmdmlvaGlfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9EQ0RDXzQsICZ2aW9sb19kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0RDRENfNiwgJnN3MmFfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9MRE9fMSwgJmxkbzFfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9MRE9fMiwgJmxkbzJfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9MRE9fMywgJnZkaWdfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9MRE9fNCwgJmxkbzRfZGF0YSk7CisKKwkvKiBMRURzICovCisJd204MzUwX2RjZGNfc2V0X3Nsb3Qod204MzUwLCBXTTgzNTBfRENEQ181LCAxLCAxLAorCQkJICAgICBXTTgzNTBfREM1X0VSUkFDVF9TSFVURE9XTl9DT05WKTsKKwl3bTgzNTBfaXNpbmtfc2V0X2ZsYXNoKHdtODM1MCwgV004MzUwX0lTSU5LX0EsCisJCQkgICAgICAgV004MzUwX0lTSU5LX0ZMQVNIX0RJU0FCTEUsCisJCQkgICAgICAgV004MzUwX0lTSU5LX0ZMQVNIX1RSSUdfQklULAorCQkJICAgICAgIFdNODM1MF9JU0lOS19GTEFTSF9EVVJfMzJNUywKKwkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfT05fSU5TVEFOVCwKKwkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfT0ZGX0lOU1RBTlQsCisJCQkgICAgICAgV004MzUwX0lTSU5LX0ZMQVNIX01PREVfRU4pOworCXdtODM1MF9kY2RjMjVfc2V0X21vZGUod204MzUwLCBXTTgzNTBfRENEQ181LAorCQkJICAgICAgIFdNODM1MF9JU0lOS19NT0RFX0JPT1NULAorCQkJICAgICAgIFdNODM1MF9JU0lOS19JTElNX05PUk1BTCwKKwkJCSAgICAgICBXTTgzNTBfREM1X1JNUF8yMFYsCisJCQkgICAgICAgV004MzUwX0RDNV9GQlNSQ19JU0lOS0EpOworCXdtODM1MF9yZWdpc3Rlcl9sZWQod204MzUwLCAwLCBXTTgzNTBfRENEQ181LCBXTTgzNTBfSVNJTktfQSwKKwkJCSAgICAmd204MzUwX2xlZF9kYXRhKTsKKworCXdtODM1MC0+Y29kZWMucGxhdGZvcm1fZGF0YSA9ICZpbXgzMmFkc193bTgzNTBfc2V0dXA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB3bTgzNTBfcGxhdGZvcm1fZGF0YSBfX2luaXRkYXRhIG14MzFfd204MzUwX3BkYXRhID0geworCS5pbml0ID0gbXgzMV93bTgzNTBfaW5pdCwKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19JTVgpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19JTVhfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG14MzFhZHNfaTJjMV9kZXZpY2VzW10gPSB7CisjaWZkZWYgQ09ORklHX01BQ0hfTVgzMUFEU19XTTExMzNfRVYxCisJeworCQlJMkNfQk9BUkRfSU5GTygid204MzUwIiwgMHgxYSksCisJCS5wbGF0Zm9ybV9kYXRhID0gJm14MzFfd204MzUwX3BkYXRhLAorCQkuaXJxID0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzMpLAorCX0sCisjZW5kaWYKK307CisKK3N0YXRpYyB2b2lkIG14Y19pbml0X2kyYyh2b2lkKQoreworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIG14MzFhZHNfaTJjMV9kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUobXgzMWFkc19pMmMxX2RldmljZXMpKTsKKworCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfTU9TSSwgSU9NVVhfQ09ORklHX0FMVDEpKTsKKwlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkyX01JU08sIElPTVVYX0NPTkZJR19BTFQxKSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsIE5VTEwpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIG14Y19pbml0X2kyYyh2b2lkKQoreworfQorI2VuZGlmCisKIC8qIQogICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBzdGF0aWMgbWFwcGluZ3MgZm9yIHRoZSBpLk1YMzFBRFMgYm9hcmQuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMWFkc19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKIAl7Ci0JCS52aXJ0dWFsCT0gQUlQUzFfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBSVBTMV9CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IEFJUFMxX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKLQl9LCB7CiAJCS52aXJ0dWFsCT0gU1BCQTBfQkFTRV9BRERSX1ZJUlQsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEJBMF9CQVNFX0FERFIpLAogCQkubGVuZ3RoCQk9IFNQQkEwX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKIAl9LCB7Ci0JCS52aXJ0dWFsCT0gQUlQUzJfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBSVBTMl9CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IEFJUFMyX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKLQl9LCB7CiAJCS52aXJ0dWFsCT0gQ1M0X0JBU0VfQUREUl9WSVJULAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1M0X0JBU0VfQUREUiksCiAJCS5sZW5ndGgJCT0gQ1M0X1NJWkUgLyAyLApAQCAtMjIxLDEzICs1MDcsMTMgQEAKIC8qIQogICogU2V0IHVwIHN0YXRpYyB2aXJ0dWFsIG1hcHBpbmdzLgogICovCi12b2lkIF9faW5pdCBteDMxYWRzX21hcF9pbyh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG14MzFhZHNfbWFwX2lvKHZvaWQpCiB7CiAJbXhjX21hcF9pbygpOwogCWlvdGFibGVfaW5pdChteDMxYWRzX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgzMWFkc19pb19kZXNjKSk7CiB9CiAKLXZvaWQgX19pbml0IG14MzFhZHNfaW5pdF9pcnEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBteDMxYWRzX2luaXRfaXJxKHZvaWQpCiB7CiAJbXhjX2luaXRfaXJxKCk7CiAJbXgzMWFkc19pbml0X2V4cGlvKCk7CkBAIC0yNDAsMTUgKzUyNiwxNSBAQAogewogCW14Y19pbml0X2V4dHVhcnQoKTsKIAlteGNfaW5pdF9pbXhfdWFydCgpOworCW14Y19pbml0X2kyYygpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgzMWFkc190aW1lcl9pbml0KHZvaWQpCiB7Ci0JbXhjX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLQlteGNfdGltZXJfaW5pdCgiaXBnX2Nsay4wIik7CisJbXgzMV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CiB9CiAKLXN0cnVjdCBzeXNfdGltZXIgbXgzMWFkc190aW1lciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14MzFhZHNfdGltZXIgPSB7CiAJLmluaXQJPSBteDMxYWRzX3RpbWVyX2luaXQsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUuYwppbmRleCBjNDM0NDAwLi44OTRkOThjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLmMKQEAgLTQyLDIxICs0MiwxMSBAQAogICovCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MzFsaXRlX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKLQkJLnZpcnR1YWwgPSBBSVBTMV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbiA9IF9fcGh5c190b19wZm4oQUlQUzFfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IEFJUFMxX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sIHsKIAkJLnZpcnR1YWwgPSBTUEJBMF9CQVNFX0FERFJfVklSVCwKIAkJLnBmbiA9IF9fcGh5c190b19wZm4oU1BCQTBfQkFTRV9BRERSKSwKIAkJLmxlbmd0aCA9IFNQQkEwX1NJWkUsCiAJCS50eXBlID0gTVRfREVWSUNFX05PTlNIQVJFRAogCX0sIHsKLQkJLnZpcnR1YWwgPSBBSVBTMl9CQVNFX0FERFJfVklSVCwKLQkJLnBmbiA9IF9fcGh5c190b19wZm4oQUlQUzJfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IEFJUFMyX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFX05PTlNIQVJFRAotCX0sIHsKIAkJLnZpcnR1YWwgPSBDUzRfQkFTRV9BRERSX1ZJUlQsCiAJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKENTNF9CQVNFX0FERFIpLAogCQkubGVuZ3RoID0gQ1M0X1NJWkUsCkBAIC04Miw4ICs3Miw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBteDMxbGl0ZV90aW1lcl9pbml0KHZvaWQpCiB7Ci0JbXhjX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLQlteGNfdGltZXJfaW5pdCgiaXBnX2Nsay4wIik7CisJbXgzMV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgbXgzMWxpdGVfdGltZXIgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtZGV2Ym9hcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDgwYjRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtZGV2Ym9hcmQuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFZhbGVudGluIExvbmdjaGFtcCwgRVBGTCBNb2JvdHMgZ3JvdXAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIGludCBteGNfdWFydDFfcGluc1tdID0geworCU1YMzFfUElOX0NUUzJfX0NUUzIsIE1YMzFfUElOX1JUUzJfX1JUUzIsCisJTVgzMV9QSU5fVFhEMl9fVFhEMiwgTVgzMV9QSU5fUlhEMl9fUlhEMiwKK307CisKKy8qCisgKiBzeXN0ZW0gaW5pdCBmb3IgYmFzZWJvYXJkIHVzYWdlLiBXaWxsIGJlIGNhbGxlZCBieSBteDMxbW9ib2FyZCBpbml0LgorICovCit2b2lkIF9faW5pdCBteDMxbW9ib2FyZF9kZXZib2FyZF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiSW5pdGlhbGl6aW5nIG14MzFkZXZib2FyZCBwZXJpcGhlcmFsc1xuIik7CisJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQxX3BpbnMsIEFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpLCAidWFydDEiKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UxLCAmdWFydF9wZGF0YSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVmOTU2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYwpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFZhbGVudGluIExvbmdjaGFtcCwgRVBGTCBNb2JvdHMgZ3JvdXAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworLyoKKyAqIHN5c3RlbSBpbml0IGZvciBiYXNlYm9hcmQgdXNhZ2UuIFdpbGwgYmUgY2FsbGVkIGJ5IG14MzFtb2JvYXJkIGluaXQuCisgKi8KK3ZvaWQgX19pbml0IG14MzFtb2JvYXJkX21hcnhib3RfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIkluaXRpYWxpemluZyBteDMxbWFyeGJvdCBwZXJpcGhlcmFsc1xuIik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQuYwppbmRleCBjMjkwOThhLi4zNGMyYTFiOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MzFtb2JvYXJkLmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAKQEAgLTYzLDYgKzY0LDE4IEBACiAJJm14MzFtb2JvYXJkX2ZsYXNoLAogfTsKIAorc3RhdGljIGludCBteGNfdWFydDBfcGluc1tdID0geworCU1YMzFfUElOX0NUUzFfX0NUUzEsIE1YMzFfUElOX1JUUzFfX1JUUzEsCisJTVgzMV9QSU5fVFhEMV9fVFhEMSwgTVgzMV9QSU5fUlhEMV9fUlhEMSwKK307CitzdGF0aWMgaW50IG14Y191YXJ0NF9waW5zW10gPSB7CisJTVgzMV9QSU5fUENfUlNUX19DVFM1LCBNWDMxX1BJTl9QQ19WUzJfX1JUUzUsCisJTVgzMV9QSU5fUENfQlZEMl9fVFhENSwgTVgzMV9QSU5fUENfQlZEMV9fUlhENSwKK307CisKK3N0YXRpYyBpbnQgbXgzMW1vYm9hcmRfYmFzZWJvYXJkOworY29yZV9wYXJhbShteDMxbW9ib2FyZF9iYXNlYm9hcmQsIG14MzFtb2JvYXJkX2Jhc2Vib2FyZCwgaW50LCAwNDQ0KTsKKwogLyoKICAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgogICovCkBAIC03MCw1OCArODMsMjkgQEAKIHsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX0NUUzFfX0NUUzEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JUUzFfX1JUUzEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1RYRDFfX1RYRDEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JYRDFfX1JYRDEpOwotCisJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQwX3BpbnMsIEFSUkFZX1NJWkUobXhjX3VhcnQwX3BpbnMpLCAidWFydDAiKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CiAKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9DVFMyX19DVFMyKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9SVFMyX19SVFMyKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9UWEQyX19UWEQyKTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9SWEQyX19SWEQyKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhKTsKLQotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1BDX1JTVF9fQ1RTNSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUENfVlMyX19SVFM1KTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9QQ19CVkQyX19UWEQ1KTsKLQlteGNfaW9tdXhfbW9kZShNWDMxX1BJTl9QQ19CVkQxX19SWEQ1KTsKLQorCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKG14Y191YXJ0NF9waW5zLCBBUlJBWV9TSVpFKG14Y191YXJ0NF9waW5zKSwgInVhcnQ0Iik7CiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlNCwgJnVhcnRfcGRhdGEpOwotfQogCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBzdGF0aWMgbWFwcGluZ3MgZm9yIHRoZSBteDMxbW9ib2FyZC4KLSAqLwotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDMxbW9ib2FyZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsCT0gQUlQUzFfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBSVBTMV9CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IEFJUFMxX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQUlQUzJfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBSVBTMl9CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IEFJUFMyX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKLQl9LAotfTsKLQotLyoKLSAqIFNldCB1cCBzdGF0aWMgdmlydHVhbCBtYXBwaW5ncy4KLSAqLwotdm9pZCBfX2luaXQgbXgzMW1vYm9hcmRfbWFwX2lvKHZvaWQpCi17Ci0JbXhjX21hcF9pbygpOwotCWlvdGFibGVfaW5pdChteDMxbW9ib2FyZF9pb19kZXNjLCBBUlJBWV9TSVpFKG14MzFtb2JvYXJkX2lvX2Rlc2MpKTsKKwlzd2l0Y2ggKG14MzFtb2JvYXJkX2Jhc2Vib2FyZCkgeworCWNhc2UgTVgzMU5PQk9BUkQ6CisJCWJyZWFrOworCWNhc2UgTVgzMURFVkJPQVJEOgorCQlteDMxbW9ib2FyZF9kZXZib2FyZF9pbml0KCk7CisJCWJyZWFrOworCWNhc2UgTVgzMU1BUlhCT1Q6CisJCW14MzFtb2JvYXJkX21hcnhib3RfaW5pdCgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIklsbGVnYWwgbXgzMW1vYm9hcmRfYmFzZWJvYXJkIHR5cGUgJWRcbiIsIG14MzFtb2JvYXJkX2Jhc2Vib2FyZCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgbXgzMW1vYm9hcmRfdGltZXJfaW5pdCh2b2lkKQogewotCW14Y19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Ci0JbXhjX3RpbWVyX2luaXQoImlwZ19jbGsuMCIpOworCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIG14MzFtb2JvYXJkX3RpbWVyID0gewpAQCAtMTMzLDcgKzExNyw3IEBACiAJLnBoeXNfaW8JPSBBSVBTMV9CQVNFX0FERFIsCiAJLmlvX3BnX29mZnN0CT0gKChBSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgzMW1vYm9hcmRfbWFwX2lvLAorCS5tYXBfaW8gICAgICAgICA9IG14Y19tYXBfaW8sCiAJLmluaXRfaXJxICAgICAgID0gbXhjX2luaXRfaXJxLAogCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAogCS50aW1lciAgICAgICAgICA9ICZteDMxbW9ib2FyZF90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYwppbmRleCBkNDY0ZDA2Li5iYzYzZjE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxcGRrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jCkBAIC00NSw0MCArNDUsMTcgQEAKIAkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCi17Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fQ1RTMV9fQ1RTMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlRTMV9fUlRTMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fVFhEMV9fVFhEMSk7Ci0JbXhjX2lvbXV4X21vZGUoTVgzMV9QSU5fUlhEMV9fUlhEMSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Ci19Ci0KLS8qIQotICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBzdGF0aWMgbWFwcGluZ3MgZm9yIHRoZSBpLk1YMzFQREsgYm9hcmQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMXBka19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsCT0gQUlQUzFfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBSVBTMV9CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IEFJUFMxX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQUlQUzJfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBSVBTMl9CQVNFX0FERFIpLAotCQkubGVuZ3RoCQk9IEFJUFMyX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKLQl9LAorc3RhdGljIGludCB1YXJ0X3BpbnNbXSA9IHsKKwlNWDMxX1BJTl9DVFMxX19DVFMxLAorCU1YMzFfUElOX1JUUzFfX1JUUzEsCisJTVgzMV9QSU5fVFhEMV9fVFhEMSwKKwlNWDMxX1BJTl9SWEQxX19SWEQxCiB9OwogCi0vKiEKLSAqIFNldCB1cCBzdGF0aWMgdmlydHVhbCBtYXBwaW5ncy4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG14MzFwZGtfbWFwX2lvKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgbXhjX2luaXRfaW14X3VhcnQodm9pZCkKIHsKLQlteGNfbWFwX2lvKCk7Ci0JaW90YWJsZV9pbml0KG14MzFwZGtfaW9fZGVzYywgQVJSQVlfU0laRShteDMxcGRrX2lvX2Rlc2MpKTsKKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1YXJ0X3BpbnMsIEFSUkFZX1NJWkUodWFydF9waW5zKSwgInVhcnQtMCIpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKIH0KIAogLyohCkBAIC05MSw4ICs2OCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBteDMxcGRrX3RpbWVyX2luaXQodm9pZCkKIHsKLQlteGNfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotCW14Y190aW1lcl9pbml0KCJpcGdfY2xrLjAiKTsKKwlteDMxX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgzMXBka190aW1lciA9IHsKQEAgLTEwOCw3ICs4NCw3IEBACiAJLnBoeXNfaW8JPSBBSVBTMV9CQVNFX0FERFIsCiAJLmlvX3BnX29mZnN0CT0gKChBSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAogCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgzMXBka19tYXBfaW8sCisJLm1hcF9pbyAgICAgICAgID0gbXhjX21hcF9pbywKIAkuaW5pdF9pcnEgICAgICAgPSBteGNfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCiAJLnRpbWVyICAgICAgICAgID0gJm14MzFwZGtfdGltZXIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9wY20wMzcuYyBiL2FyY2gvYXJtL21hY2gtbXgzL3BjbTAzNy5jCmluZGV4IDhjZWE4MjUuLjVmY2UwMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL3BjbTAzNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL3BjbTAzNy5jCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYzkxMXguaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvYXQyNC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zNyw2ICszOSwxMCBAQAogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC1wY20wMzcuaD4KICNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpZmRlZiBDT05GSUdfSTJDX0lNWAorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgImRldmljZXMuaCIKIApAQCAtMTE3LDEyICsxMjMsOTAgQEAKIAkuaHdfZWNjID0gMSwKIH07CiAKKyNpZmRlZiBDT05GSUdfSTJDX0lNWAorc3RhdGljIGludCBpMmNfMV9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1NQSTJfTU9TSV9fU0NMLAorCU1YMzFfUElOX0NTUEkyX01JU09fX1NEQSwKK307CisKK3N0YXRpYyBpbnQgcGNtMDM3X2kyY18xX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhpMmNfMV9waW5zLCBBUlJBWV9TSVpFKGkyY18xX3BpbnMpLAorCQkJImkyYy0xIik7Cit9CisKK3N0YXRpYyB2b2lkIHBjbTAzN19pMmNfMV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKGkyY18xX3BpbnMsIEFSUkFZX1NJWkUoaTJjXzFfcGlucykpOworfQorCitzdGF0aWMgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIHBjbTAzN19pMmNfMV9kYXRhID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorCS5pbml0ID0gcGNtMDM3X2kyY18xX2luaXQsCisJLmV4aXQgPSBwY20wMzdfaTJjXzFfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXQyNF9wbGF0Zm9ybV9kYXRhIGJvYXJkX2VlcHJvbSA9IHsKKwkuYnl0ZV9sZW4gPSA0MDk2LAorCS5wYWdlX3NpemUgPSAzMiwKKwkuZmxhZ3MgPSBBVDI0X0ZMQUdfQUREUjE2LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzdfaTJjX2RldmljZXNbXSA9IHsKKyAgICAgICB7CisJCUkyQ19CT0FSRF9JTkZPKCJhdDI0IiwgMHg1MiksIC8qIEUwPTAsIEUxPTEsIEUyPTAgKi8KKwkJLnBsYXRmb3JtX2RhdGEgPSAmYm9hcmRfZWVwcm9tLAorCX0sIHsKKwkJSTJDX0JPQVJEX0lORk8oInJ0Yy1wY2Y4NTYzIiwgMHg1MSksCisJCS50eXBlID0gInBjZjg1NjMiLAorCX0KK307CisjZW5kaWYKKworc3RhdGljIGludCBzZGhjMV9waW5zW10gPSB7CisJTVgzMV9QSU5fU0QxX0RBVEEzX19TRDFfREFUQTMsCisJTVgzMV9QSU5fU0QxX0RBVEEyX19TRDFfREFUQTIsCisJTVgzMV9QSU5fU0QxX0RBVEExX19TRDFfREFUQTEsCisJTVgzMV9QSU5fU0QxX0RBVEEwX19TRDFfREFUQTAsCisJTVgzMV9QSU5fU0QxX0NMS19fU0QxX0NMSywKKwlNWDMxX1BJTl9TRDFfQ01EX19TRDFfQ01ELAorfTsKKworc3RhdGljIGludCBwY205NzBfc2RoYzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgaCwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMoc2RoYzFfcGlucywgQVJSQVlfU0laRShzZGhjMV9waW5zKSwKKwkJCQkic2RoYy0xIik7Cit9CisKK3N0YXRpYyB2b2lkIHBjbTk3MF9zZGhjMV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKHNkaGMxX3BpbnMsIEFSUkFZX1NJWkUoc2RoYzFfcGlucykpOworfQorCisvKiBObyBjYXJkIGFuZCBydyBkZXRlY3Rpb24gYXQgdGhlIG1vbWVudCAqLworc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhID0geworCS5pbml0ID0gcGNtOTcwX3NkaGMxX2luaXQsCisJLmV4aXQgPSBwY205NzBfc2RoYzFfZXhpdCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmcGNtMDM3X2ZsYXNoLAogCSZwY20wMzdfZXRoLAogCSZwY20wMzdfc3JhbV9kZXZpY2UsCiB9OwogCitzdGF0aWMgaW50IHVhcnQwX3BpbnNbXSA9IHsKKwlNWDMxX1BJTl9DVFMxX19DVFMxLAorCU1YMzFfUElOX1JUUzFfX1JUUzEsCisJTVgzMV9QSU5fVFhEMV9fVFhEMSwKKwlNWDMxX1BJTl9SWEQxX19SWEQxCit9OworCitzdGF0aWMgaW50IHVhcnQyX3BpbnNbXSA9IHsKKwlNWDMxX1BJTl9DU1BJM19NT1NJX19SWEQzLAorCU1YMzFfUElOX0NTUEkzX01JU09fX1RYRDMKK307CisKIC8qCiAgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KICAqLwpAQCAtMTMwLDU5ICsyMTQsMzMgQEAKIHsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX0NUUzFfX0NUUzEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JUUzFfX1JUUzEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1RYRDFfX1RYRDEpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX1JYRDFfX1JYRDEpOwotCisJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModWFydDBfcGlucywgQVJSQVlfU0laRSh1YXJ0MF9waW5zKSwgInVhcnQtMCIpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKIAotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX0NTUEkzX01PU0lfX1JYRDMpOwotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX0NTUEkzX01JU09fX1RYRDMpOwotCisJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModWFydDJfcGlucywgQVJSQVlfU0laRSh1YXJ0Ml9waW5zKSwgInVhcnQtMiIpOwogCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X3BkYXRhKTsKIAotCW14Y19pb211eF9tb2RlKE1YMzFfUElOX0JBVFRfTElORV9fT1dJUkUpOworCW14Y19pb211eF9zZXR1cF9waW4oTVgzMV9QSU5fQkFUVF9MSU5FX19PV0lSRSwgImJhdHQtMHdpcmUiKTsKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdzFfbWFzdGVyX2RldmljZSwgTlVMTCk7CiAKIAkvKiBTTVNDOTIxNSBJUlEgcGluICovCi0JbXhjX2lvbXV4X21vZGUoSU9NVVhfTU9ERShNWDMxX1BJTl9HUElPM18xLCBJT01VWF9DT05GSUdfR1BJTykpOwotCWlmICghZ3Bpb19yZXF1ZXN0KE1YMzFfUElOX0dQSU8zXzEsICJwY20wMzctZXRoIikpCisJaWYgKCFteGNfaW9tdXhfc2V0dXBfcGluKElPTVVYX01PREUoTVgzMV9QSU5fR1BJTzNfMSwgSU9NVVhfQ09ORklHX0dQSU8pLAorCQkJCSJwY20wMzctZXRoIikpCiAJCWdwaW9fZGlyZWN0aW9uX2lucHV0KE1YMzFfUElOX0dQSU8zXzEpOwogCisjaWZkZWYgQ09ORklHX0kyQ19JTVgKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBwY20wMzdfaTJjX2RldmljZXMsCisJCQlBUlJBWV9TSVpFKHBjbTAzN19pMmNfZGV2aWNlcykpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UxLCAmcGNtMDM3X2kyY18xX2RhdGEpOworI2VuZGlmCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmcGNtMDM3X25hbmRfYm9hcmRfaW5mbyk7Ci19Ci0KLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHN0YXRpYyBtYXBwaW5ncyBmb3IgdGhlIHBjbTAzNyBib2FyZC4KLSAqLwotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBwY20wMzdfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkudmlydHVhbAk9IEFJUFMxX0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzFfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBBSVBTMV9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwgewotCQkudmlydHVhbAk9IEFJUFMyX0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQUlQUzJfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBBSVBTMl9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECi0JfSwKLX07Ci0KLS8qCi0gKiBTZXQgdXAgc3RhdGljIHZpcnR1YWwgbWFwcGluZ3MuCi0gKi8KLXZvaWQgX19pbml0IHBjbTAzN19tYXBfaW8odm9pZCkKLXsKLQlteGNfbWFwX2lvKCk7Ci0JaW90YWJsZV9pbml0KHBjbTAzN19pb19kZXNjLCBBUlJBWV9TSVpFKHBjbTAzN19pb19kZXNjKSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjc2RoY19kZXZpY2UwLCAmc2RoY19wZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwY20wMzdfdGltZXJfaW5pdCh2b2lkKQogewotCW14Y19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Ci0JbXhjX3RpbWVyX2luaXQoImlwZ19jbGsuMCIpOworCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIHBjbTAzN190aW1lciA9IHsKQEAgLTE5NCw3ICsyNTIsNyBAQAogCS5waHlzX2lvCT0gQUlQUzFfQkFTRV9BRERSLAogCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IHBjbTAzN19tYXBfaW8sCisJLm1hcF9pbyAgICAgICAgID0gbXhjX21hcF9pbywKIAkuaW5pdF9pcnEgICAgICAgPSBteGNfaW5pdF9pcnEsCiAJLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCiAJLnRpbWVyICAgICAgICAgID0gJnBjbTAzN190aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL3FvbmcuYyBiL2FyY2gvYXJtL21hY2gtbXgzL3FvbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzQyODNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvcW9uZy5jCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOSBJbHlhIFlhbm9rLCBFbWNyYWZ0IFN5c3RlbXMgTHRkLCA8eWFub2tAZW1jcmFmdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC1xb25nLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKiBGUEdBIGRlZmluZXMgKi8KKyNkZWZpbmUgUU9OR19GUEdBX1ZFUlNJT04obWFqb3IsIG1pbm9yLCByZXYpCVwKKwkoKChtYWpvciAmIDB4RikgPDwgMTIpIHwgKChtaW5vciAmIDB4RikgPDwgOCkgfCAocmV2ICYgMHhGRikpCisKKyNkZWZpbmUgUU9OR19GUEdBX0JBU0VBRERSIAkJQ1MxX0JBU0VfQUREUgorI2RlZmluZSBRT05HX0ZQR0FfUEVSSVBIX1NJWkUgCQkoMSA8PCAyNCkKKworI2RlZmluZSBRT05HX0ZQR0FfQ1RSTF9CQVNFQUREUgkJUU9OR19GUEdBX0JBU0VBRERSCisjZGVmaW5lIFFPTkdfRlBHQV9DVFJMX1NJWkUgCQkweDEwCisvKiBGUEdBIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIFFPTkdfRlBHQV9DVFJMX1ZFUlNJT04JCTB4MDAKKworI2RlZmluZSBRT05HX0RORVRfSUQJCTEKKyNkZWZpbmUgUU9OR19ETkVUX0JBU0VBRERSCVwKKwkoUU9OR19GUEdBX0JBU0VBRERSICsgUU9OR19ETkVUX0lEICogUU9OR19GUEdBX1BFUklQSF9TSVpFKQorI2RlZmluZSBRT05HX0RORVRfU0laRSAJCTB4MDAwMDEwMDAKKworI2RlZmluZSBRT05HX0ZQR0FfSVJRCQlJT01VWF9UT19JUlEoTVgzMV9QSU5fRFRSX0RDRTEpCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgorICovCisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBpbnQgdWFydF9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1RTMV9fQ1RTMSwKKwlNWDMxX1BJTl9SVFMxX19SVFMxLAorCU1YMzFfUElOX1RYRDFfX1RYRDEsCisJTVgzMV9QSU5fUlhEMV9fUlhEMQorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCit7CisJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModWFydF9waW5zLCBBUlJBWV9TSVpFKHVhcnRfcGlucyksCisJCQkidWFydC0wIik7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRuZXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJkbmV0LW1lbW9yeSIsCisJCS5zdGFydAk9IFFPTkdfRE5FVF9CQVNFQUREUiwKKwkJLmVuZAk9IFFPTkdfRE5FVF9CQVNFQUREUiArIFFPTkdfRE5FVF9TSVpFIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IFFPTkdfRlBHQV9JUlEsCisJCS5lbmQJPSBRT05HX0ZQR0FfSVJRLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG5ldF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJkbmV0IiwKKwkuaWQJCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUoZG5ldF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBkbmV0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHFvbmdfaW5pdF9kbmV0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZG5ldF9kZXZpY2UpOworCXJldHVybiByZXQ7Cit9CisKKy8qIE1URCBOT1IgZmxhc2ggKi8KKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcW9uZ19mbGFzaF9kYXRhID0geworCS53aWR0aCA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHFvbmdfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ID0gQ1MwX0JBU0VfQUREUiwKKwkuZW5kID0gQ1MwX0JBU0VfQUREUiArIFFPTkdfTk9SX1NJWkUgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcW9uZ19ub3JfbXRkX2RldmljZSA9IHsKKwkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnFvbmdfZmxhc2hfZGF0YSwKKwkJfSwKKwkucmVzb3VyY2UgPSAmcW9uZ19mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCitzdGF0aWMgdm9pZCBxb25nX2luaXRfbm9yX210ZCh2b2lkKQoreworCSh2b2lkKXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcW9uZ19ub3JfbXRkX2RldmljZSk7Cit9CisKKy8qCisgKiBIYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcworICovCitzdGF0aWMgdm9pZCBxb25nX25hbmRfY21kX2N0cmwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKworCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOworCisJaWYgKGN0cmwgJiBOQU5EX0NMRSkKKwkJd3JpdGViKGNtZCwgbmFuZF9jaGlwLT5JT19BRERSX1cgKyAoMSA8PCAyNCkpOworCWVsc2UKKwkJd3JpdGViKGNtZCwgbmFuZF9jaGlwLT5JT19BRERSX1cgKyAoMSA8PCAyMykpOworfQorCisvKgorICogUmVhZCB0aGUgRGV2aWNlIFJlYWR5IHBpbi4KKyAqLworc3RhdGljIGludCBxb25nX25hbmRfZGV2aWNlX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShJT01VWF9UT19HUElPKE1YMzFfUElOX05GUkIpKTsKK30KKworc3RhdGljIHZvaWQgcW9uZ19uYW5kX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKK3sKKwlpZiAoY2hpcCA+PSAwKQorCQlncGlvX3NldF92YWx1ZShJT01VWF9UT19HUElPKE1YMzFfUElOX05GQ0VfQiksIDApOworCWVsc2UKKwkJZ3Bpb19zZXRfdmFsdWUoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORkNFX0IpLCAxKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgcW9uZ19uYW5kX2RhdGEgPSB7CisJLmNoaXAgPSB7CisJCS5jaGlwX2RlbGF5CQk9IDIwLAorCQkub3B0aW9ucwkJPSAwLAorCX0sCisJLmN0cmwgPSB7CisJCS5jbWRfY3RybCAJCT0gcW9uZ19uYW5kX2NtZF9jdHJsLAorCQkuZGV2X3JlYWR5CQk9IHFvbmdfbmFuZF9kZXZpY2VfcmVhZHksCisJCS5zZWxlY3RfY2hpcAkJPSBxb25nX25hbmRfc2VsZWN0X2NoaXAsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBxb25nX25hbmRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ICAJPSBDUzNfQkFTRV9BRERSLAorCS5lbmQgICAgCT0gQ1MzX0JBU0VfQUREUiArIFNaXzMyTSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcW9uZ19uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZ2VuX25hbmQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcW9uZ19uYW5kX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnFvbmdfbmFuZF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBxb25nX2luaXRfbmFuZF9tdGQodm9pZCkKK3sKKwkvKiBpbml0IENTICovCisJX19yYXdfd3JpdGVsKDB4MDAwMDRmMDAsIENTQ1JfVSgzKSk7CisJX19yYXdfd3JpdGVsKDB4MjAwMTNiMzEsIENTQ1JfTCgzKSk7CisJX19yYXdfd3JpdGVsKDB4MDAwMjA4MDAsIENTQ1JfQSgzKSk7CisJbXhjX2lvbXV4X3NldF9ncHIoTVVYX1NEQ1RMX0NTRDFfU0VMLCB0cnVlKTsKKworCS8qIGVuYWJsZSBwaW4gKi8KKwlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX05GQ0VfQiwgSU9NVVhfQ09ORklHX0dQSU8pKTsKKwlpZiAoIWdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX05GQ0VfQiksICJuYW5kX2VuYWJsZSIpKQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORkNFX0IpLCAwKTsKKworCS8qIHJlYWR5L2J1c3kgcGluICovCisJbXhjX2lvbXV4X21vZGUoSU9NVVhfTU9ERShNWDMxX1BJTl9ORlJCLCBJT01VWF9DT05GSUdfR1BJTykpOworCWlmICghZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZSQiksICJuYW5kX3JkeSIpKQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX05GUkIpKTsKKworCS8qIHdyaXRlIHByb3RlY3QgcGluICovCisJbXhjX2lvbXV4X21vZGUoSU9NVVhfTU9ERShNWDMxX1BJTl9ORldQX0IsIElPTVVYX0NPTkZJR19HUElPKSk7CisJaWYgKCFncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORldQX0IpLCAibmFuZF93cCIpKQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX05GV1BfQikpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZxb25nX25hbmRfZGV2aWNlKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHFvbmdfaW5pdF9mcGdhKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXUzMiBmcGdhX3ZlcjsKKworCXJlZ3MgPSBpb3JlbWFwKFFPTkdfRlBHQV9DVFJMX0JBU0VBRERSLCBRT05HX0ZQR0FfQ1RSTF9TSVpFKTsKKwlpZiAoIXJlZ3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIG1hcCByZWdpc3RlcnMsIGFib3J0aW5nLlxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlmcGdhX3ZlciA9IHJlYWRsKHJlZ3MgKyBRT05HX0ZQR0FfQ1RSTF9WRVJTSU9OKTsKKwlpb3VubWFwKHJlZ3MpOworCXByaW50ayhLRVJOX0lORk8gIlFvbmcgRlBHQSB2ZXJzaW9uICVkLiVkLiVkXG4iLAorCQkJKGZwZ2FfdmVyICYgMHhGMDAwKSA+PiAxMiwKKwkJCShmcGdhX3ZlciAmIDB4MEYwMCkgPj4gOCwgZnBnYV92ZXIgJiAweDAwRkYpOworCWlmIChmcGdhX3ZlciA8IFFPTkdfRlBHQV9WRVJTSU9OKDAsIDgsIDcpKSB7CisJCXByaW50ayhLRVJOX0VSUiAicW9uZzogVW5leHBlY3RlZCBGUEdBIHZlcnNpb24sIEZQR0EtYmFzZWQgIgorCQkJCSJkZXZpY2VzIHdvbid0IGJlIHJlZ2lzdGVyZWQhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHJlZ2lzdGVyIEZQR0EtYmFzZWQgZGV2aWNlcyAqLworCXFvbmdfaW5pdF9uYW5kX210ZCgpOworCXFvbmdfaW5pdF9kbmV0KCk7Cit9CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBNWDMxIG1lbW9yeSBtYXAuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgcW9uZ19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsID0gQUlQUzFfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKEFJUFMxX0JBU0VfQUREUiksCisJCS5sZW5ndGggPSBBSVBTMV9TSVpFLAorCQkudHlwZSA9IE1UX0RFVklDRV9OT05TSEFSRUQKKwl9LCB7CisJCS52aXJ0dWFsID0gQUlQUzJfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKEFJUFMyX0JBU0VfQUREUiksCisJCS5sZW5ndGggPSBBSVBTMl9TSVpFLAorCQkudHlwZSA9IE1UX0RFVklDRV9OT05TSEFSRUQKKwl9Cit9OworCisvKgorICogU2V0IHVwIHN0YXRpYyB2aXJ0dWFsIG1hcHBpbmdzLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgcW9uZ19tYXBfaW8odm9pZCkKK3sKKwlteGNfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KHFvbmdfaW9fZGVzYywgQVJSQVlfU0laRShxb25nX2lvX2Rlc2MpKTsKK30KKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgbXhjX2JvYXJkX2luaXQodm9pZCkKK3sKKwlteGNfaW5pdF9pbXhfdWFydCgpOworCXFvbmdfaW5pdF9ub3JfbXRkKCk7CisJcW9uZ19pbml0X2ZwZ2EoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHFvbmdfdGltZXJfaW5pdCh2b2lkKQoreworCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBxb25nX3RpbWVyID0geworCS5pbml0CT0gcW9uZ190aW1lcl9pbml0LAorfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdXNlcyBzdGFuZGFyZCBrZXJuZWwgbWFjcm9zIGRlZmluZWQgaW4gYXJjaC5oIGluIG9yZGVyIHRvCisgKiBpbml0aWFsaXplIF9fbWFjaF9kZXNjX1FPTkcgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KKworTUFDSElORV9TVEFSVChRT05HLCAiRGF2ZS9ERU5YIFFvbmdFVkItTElURSIpCisJLyogTWFpbnRhaW5lcjogREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJIICovCisJLnBoeXNfaW8gICAgICAgID0gQUlQUzFfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gICAgICAgICA9IHFvbmdfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IG14Y19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmcW9uZ190aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCA2YzEwMjNiLi5kYzdiNGJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW5ldHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAl3cml0ZWwoTkVUWF9TWVNURU1fUkVTX0NSX0ZJUk1XX1JFU19FTiB8IE5FVFhfU1lTVEVNX1JFU19DUl9GSVJNV19SRVMsCiAJICAgICAgIE5FVFhfU1lTVEVNX1JFU19DUik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLW5zOXh4eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZTIwNjhjNS4uMTU2MTU4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtbnM5eHh4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMjAsNyArMjAsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogI2lmZGVmIENPTkZJR19QUk9DRVNTT1JfTlM5MzYwCiAJaWYgKHByb2Nlc3Nvcl9pc19uczkzNjAoKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbnM5eHh4L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKaW5kZXggMjJlMGViNi4uZmViMGU1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1uczl4eHgvaXJxLmMKQEAgLTYzLDcgKzYzLDYgQEAKICNlbHNlCiBzdGF0aWMgdm9pZCBoYW5kbGVfcHJpb19pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOwogCWlycXJldHVybl90IGFjdGlvbl9yZXQ7CiAKQEAgLTcyLDcgKzcxLDcgQEAKIAlCVUdfT04oZGVzYy0+c3RhdHVzICYgSVJRX0lOUFJPR1JFU1MpOwogCiAJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1JFUExBWSB8IElSUV9XQUlUSU5HKTsKLQlrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV0rKzsKKwlrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxLCBkZXNjKTsKIAogCWFjdGlvbiA9IGRlc2MtPmFjdGlvbjsKIAlpZiAodW5saWtlbHkoIWFjdGlvbiB8fCAoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKaW5kZXggMTBhMzAxZS4uM2YzMjVkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwpAQCAtNyw2ICs3LDExIEBACiAJc2VsZWN0IENQVV9BUk05MjZUCiAJc2VsZWN0IEFSQ0hfT01BUF9PVEcKIAorY29uZmlnIEFSQ0hfT01BUDg1MAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMQorCWJvb2wgIk9NQVA4NTAgQmFzZWQgU3lzdGVtIgorCXNlbGVjdCBDUFVfQVJNOTI2VAorCiBjb25maWcgQVJDSF9PTUFQMTVYWAogCWRlcGVuZHMgb24gQVJDSF9PTUFQMQogCWRlZmF1bHQgeQpAQCAtNDYsNiArNTEsMTIgQEAKIAkgIFRJIE9NQVAgMTcxMCBIMyBib2FyZCBzdXBwb3J0LiBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIHN1Y2gKIAkgIGEgYm9hcmQuCiAKK2NvbmZpZyBNQUNIX09NQVBfSFRDV0laQVJECisJYm9vbCAiSFRDIFdpemFyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDg1MAorCWhlbHAKKwkgIEhUQyBXaXphcmQgc21hcnRwaG9uZSBzdXBwb3J0IChBS0EgUVRFSyA5MTAwLCAuLi4pCisKIGNvbmZpZyBNQUNIX09NQVBfT1NLCiAJYm9vbCAiVEkgT1NLIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDE2WFgKQEAgLTE2Myw3ICsxNzQsNyBAQAogCiBjb25maWcgT01BUF9BUk1fMTk1TUhaCiAJYm9vbCAiT01BUCBBUk0gMTk1IE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIEFSQ0hfT01BUDczMAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDg1MCkKIAloZWxwCiAgICAgICAgICAgRW5hYmxlIDE5NU1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCiAKQEAgLTE3NSwxMyArMTg2LDEzIEBACiAKIGNvbmZpZyBPTUFQX0FSTV8xODJNSFoKIAlib29sICJPTUFQIEFSTSAxODIgTUh6IENQVSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgQVJDSF9PTUFQNzMwCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQODUwKQogCWhlbHAKICAgICAgICAgICBFbmFibGUgMTgyTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE9NQVBfQVJNXzE2OE1IWgogCWJvb2wgIk9NQVAgQVJNIDE2OCBNSHogQ1BVIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQODUwKQogCWhlbHAKICAgICAgICAgICBFbmFibGUgMTY4TUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtMTkzLDIwICsyMDQsMjAgQEAKIAogY29uZmlnIE9NQVBfQVJNXzEyME1IWgogCWJvb2wgIk9NQVAgQVJNIDEyMCBNSHogQ1BVIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCkKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQODUwKQogCWhlbHAKICAgICAgICAgICBFbmFibGUgMTIwTUh6IGNsb2NrIGZvciBPTUFQIENQVS4gSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIE9NQVBfQVJNXzYwTUhaCiAJYm9vbCAiT01BUCBBUk0gNjAgTUh6IENQVSIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDEgJiYgKEFSQ0hfT01BUDE1WFggfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVA3MzApCisJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDg1MCkKICAgICAgICAgZGVmYXVsdCB5CiAJaGVscAogICAgICAgICAgIEVuYWJsZSA2ME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IFkuCiAKIGNvbmZpZyBPTUFQX0FSTV8zME1IWgogCWJvb2wgIk9NQVAgQVJNIDMwIE1IeiBDUFUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIChBUkNIX09NQVAxNVhYIHx8IEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQNzMwKQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMSAmJiAoQVJDSF9PTUFQMTVYWCB8fCBBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVA4NTApCiAJaGVscAogICAgICAgICAgIEVuYWJsZSAzME1IeiBjbG9jayBmb3IgT01BUCBDUFUuIElmIHVuc3VyZSwgc2F5IE4uCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWFtcy1kZWx0YS5jCmluZGV4IDJlNjE4MzkuLjhiNDBhYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtYW1zLWRlbHRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1hbXMtZGVsdGEuYwpAQCAtMTc1LDcgKzE3NSw2IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBhbXNfZGVsdGFfY29uZmlnW10gPSB7CiAJeyBPTUFQX1RBR19MQ0QsCQkmYW1zX2RlbHRhX2xjZF9jb25maWcgfSwKIAl7IE9NQVBfVEFHX1VBUlQsCSZhbXNfZGVsdGFfdWFydF9jb25maWcgfSwKLQl7IE9NQVBfVEFHX1VTQiwJCSZhbXNfZGVsdGFfdXNiX2NvbmZpZyB9LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhbXNfZGVsdGFfa3BfcmVzb3VyY2VzW10gPSB7CkBAIC0yMzIsNiArMjMxLDcgQEAKIAkvKiBDbGVhciBsYXRjaDIgKE5BTkQsIExDRCwgbW9kZW0gZW5hYmxlKSAqLwogCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUofjAsIDApOwogCisJb21hcF91c2JfaW5pdCgmYW1zX2RlbHRhX3VzYl9jb25maWcpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFtc19kZWx0YV9kZXZpY2VzLCBBUlJBWV9TSVpFKGFtc19kZWx0YV9kZXZpY2VzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1mc2FtcGxlLmMKaW5kZXggMzAzMDgyOS4uMTllMGU5MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCkBAIC0zNCw3ICszNCwzOSBAQAogI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+Ci0jaW5jbHVkZSA8bWFjaC9ib2FyZC1mc2FtcGxlLmg+CisKKy8qIGZzYW1wbGUgaXMgcHJldHR5IGNsb3NlIHRvIHAyLXNhbXBsZSAqLworCisjZGVmaW5lIGZzYW1wbGVfY3BsZF9yZWFkKHJlZykgX19yYXdfcmVhZGIocmVnKQorI2RlZmluZSBmc2FtcGxlX2NwbGRfd3JpdGUodmFsLCByZWcpIF9fcmF3X3dyaXRlYih2YWwsIHJlZykKKworI2RlZmluZSBGU0FNUExFX0NQTERfQkFTRSAgICAweEU4MTAwMDAwCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9TSVpFICAgIFNaXzRLCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9TVEFSVCAgIDB4MDUwODAwMDAKKworI2RlZmluZSBGU0FNUExFX0NQTERfUkVHX0EgICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDAwKQorI2RlZmluZSBGU0FNUExFX0NQTERfU1dJVENIICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDAyKQorI2RlZmluZSBGU0FNUExFX0NQTERfVUFSVCAgICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDAyKQorI2RlZmluZSBGU0FNUExFX0NQTERfUkVHX0IgICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDA0KQorI2RlZmluZSBGU0FNUExFX0NQTERfVkVSU0lPTiAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDA2KQorI2RlZmluZSBGU0FNUExFX0NQTERfU0VUX0NMUiAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDA2KQorCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQlRfUkVTRVQgICAgICAgICAwCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfTENEX1JFU0VUICAgICAgICAxCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQ0FNX1BXRE4gICAgICAgICAyCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQ0hBUkdFUl9FTkFCTEUgICAzCisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfU0RfTU1DX0VOICAgICAgICA0CisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfYUdQU19QV1JFTiAgICAgICA1CisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQkFDS0xJR0hUICAgICAgICA2CisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfYUdQU19FTl9SRVNFVCAgICA3CisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfYUdQU19TTEVFUHhfTiAgICA4CisjZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfT1RHX1JFU0VUICAgICAgICA5CisKKyNkZWZpbmUgZnNhbXBsZV9jcGxkX3NldChiaXQpIFwKKyAgICBmc2FtcGxlX2NwbGRfd3JpdGUoKCgoYml0KSAmIDE1KSA8PCA0KSB8IDB4MGYsIEZTQU1QTEVfQ1BMRF9TRVRfQ0xSKQorCisjZGVmaW5lIGZzYW1wbGVfY3BsZF9jbGVhcihiaXQpIFwKKyAgICBmc2FtcGxlX2NwbGRfd3JpdGUoMHhmMCB8ICgoYml0KSAmIDE1KSwgRlNBTVBMRV9DUExEX1NFVF9DTFIpCiAKIHN0YXRpYyBpbnQgZnNhbXBsZV9rZXltYXBbXSA9IHsKIAlLRVkoMCwwLEtFWV9VUCksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IDdkMjY3MDIuLmU3MjQ5NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZ2VuZXJpYy5jCkBAIC02Miw3ICs2Miw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBnZW5lcmljX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JeyBPTUFQX1RBR19VU0IsCQlOVUxMIH0sCiAJeyBPTUFQX1RBR19VQVJULAkmZ2VuZXJpY191YXJ0X2NvbmZpZyB9LAogfTsKIApAQCAtNzAsMTIgKzY5LDEyIEBACiB7CiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKLQkJZ2VuZXJpY19jb25maWdbMF0uZGF0YSA9ICZnZW5lcmljMTUxMF91c2JfY29uZmlnOworCQlvbWFwX3VzYl9pbml0KCZnZW5lcmljMTUxMF91c2JfY29uZmlnKTsKIAl9CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKQogCWlmICghY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJZ2VuZXJpY19jb25maWdbMF0uZGF0YSA9ICZnZW5lcmljMTYxMF91c2JfY29uZmlnOworCQlvbWFwX3VzYl9pbml0KCZnZW5lcmljMTYxMF91c2JfY29uZmlnKTsKIAl9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi1tbWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDItbW1jLmMKaW5kZXggNDA5ZmE1Ni4uNDRkNGE5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi1tbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLW1tYy5jCkBAIC0xOSw2ICsxOSw4IEBACiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KIAorI2luY2x1ZGUgImJvYXJkLWgyLmgiCisKICNpZiBkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQogCiBzdGF0aWMgaW50IG1tY19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCmluZGV4IDBkNzg0YTcuLmY2OTVhYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKQEAgLTQ2LDYgKzQ2LDExIEBACiAjaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogCisjaW5jbHVkZSAiYm9hcmQtaDIuaCIKKworLyogQXQgT01BUDE2MTAgSW5ub3ZhdG9yIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCisjZGVmaW5lIE9NQVAxNjEwX0VUSFJfU1RBUlQJCTB4MDQwMDAzMDAKKwogc3RhdGljIGludCBoMl9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0xFRlQpLAogCUtFWSgwLCAxLCBLRVlfUklHSFQpLApAQCAtMzY0LDcgKzM2OSw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBoMl9jb25maWdbXSBfX2luaXRkYXRhID0gewotCXsgT01BUF9UQUdfVVNCLAkJJmgyX3VzYl9jb25maWcgfSwKIAl7IE9NQVBfVEFHX1VBUlQsCSZoMl91YXJ0X2NvbmZpZyB9LAogCXsgT01BUF9UQUdfTENELAkJJmgyX2xjZF9jb25maWcgfSwKIH07CkBAIC00MTMsNiArNDE3LDcgQEAKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgaDJfaTJjX2JvYXJkX2luZm8sCiAJCQkgICAgICBBUlJBWV9TSVpFKGgyX2kyY19ib2FyZF9pbmZvKSk7CisJb21hcF91c2JfaW5pdCgmaDJfdXNiX2NvbmZpZyk7CiAJaDJfbW1jX2luaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNWUyNjYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmgKKyAqCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDE2MTAgSDIgYm9hcmQuCisgKgorICogQ2xlYW51cCBmb3IgTGludXgtMi42IGJ5IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgorICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0gyX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0gyX0gKKworI2RlZmluZSBIMl9UUFNfR1BJT19CQVNFCQkoT01BUF9NQVhfR1BJT19MSU5FUyArIDE2IC8qIE1QVUlPICovKQorIwlkZWZpbmUgSDJfVFBTX0dQSU9fTU1DX1BXUl9FTgkoSDJfVFBTX0dQSU9fQkFTRSArIDMpCisKK2V4dGVybiB2b2lkIGgyX21tY19pbml0KHZvaWQpOworCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9IMl9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMtbW1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLW1tYy5jCmluZGV4IGZkZmU3OTMuLjBkOGEzYzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMtbW1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy1tbWMuYwpAQCAtMTksNiArMTksOCBAQAogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKKyNpbmNsdWRlICJib2FyZC1oMy5oIgorCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX09NQVApIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX01PRFVMRSkKIAogc3RhdGljIGludCBtbWNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwppbmRleCBiZjA4YjZhLi40Njk1OTY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCkBAIC01MCw2ICs1MCwxMSBAQAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KIAorI2luY2x1ZGUgImJvYXJkLWgzLmgiCisKKy8qIEluIE9NQVAxNzEwIEgzIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCisjZGVmaW5lIE9NQVAxNzEwX0VUSFJfU1RBUlQJCTB4MDQwMDAzMDAKKwogI2RlZmluZSBIM19UU19HUElPCTQ4CiAKIHN0YXRpYyBpbnQgaDNfa2V5bWFwW10gPSB7CkBAIC00MTgsNyArNDIzLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGgzX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JeyBPTUFQX1RBR19VU0IsCQkmaDNfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwJJmgzX3VhcnRfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19MQ0QsCQkmaDNfbGNkX2NvbmZpZyB9LAogfTsKQEAgLTQ3Miw2ICs0NzYsNyBAQAogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBoM19pMmNfYm9hcmRfaW5mbywKIAkJCSAgICAgIEFSUkFZX1NJWkUoaDNfaTJjX2JvYXJkX2luZm8pKTsKKwlvbWFwX3VzYl9pbml0KCZoM191c2JfY29uZmlnKTsKIAloM19tbWNfaW5pdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmggYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhkZTUzNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIFJpZGdlUnVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9IM19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9IM19ICisKKyNkZWZpbmUgSDNfVFBTX0dQSU9fQkFTRQkJKE9NQVBfTUFYX0dQSU9fTElORVMgKyAxNiAvKiBNUFVJTyAqLykKKyMJZGVmaW5lIEgzX1RQU19HUElPX01NQ19QV1JfRU4JKEgzX1RQU19HUElPX0JBU0UgKyA0KQorCitleHRlcm4gdm9pZCBoM19tbWNfaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVBfSDNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKaW5kZXggMDcxY2QwMi4uMmZkOTgyNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwpAQCAtMzksNiArMzksOSBAQAogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KIAorLyogQXQgT01BUDE2MTAgSW5ub3ZhdG9yIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCisjZGVmaW5lIElOTk9WQVRPUjE2MTBfRVRIUl9TVEFSVAkweDA0MDAwMzAwCisKIHN0YXRpYyBpbnQgaW5ub3ZhdG9yX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfRjEpLAogCUtFWSgwLCAzLCBLRVlfRE9XTiksCkBAIC0zNzAsNyArMzczLDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGlubm92YXRvcl9jb25maWdbXSA9IHsKLQl7IE9NQVBfVEFHX1VTQiwgICAgICAgICBOVUxMIH0sCiAJeyBPTUFQX1RBR19MQ0QsCQlOVUxMIH0sCiAJeyBPTUFQX1RBR19VQVJULAkmaW5ub3ZhdG9yX3VhcnRfY29uZmlnIH0sCiB9OwpAQCAtMzkyLDEzICszOTQsMTMgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiAJaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCWlubm92YXRvcl9jb25maWdbMF0uZGF0YSA9ICZpbm5vdmF0b3IxNTEwX3VzYl9jb25maWc7CisJCW9tYXBfdXNiX2luaXQoJmlubm92YXRvcjE1MTBfdXNiX2NvbmZpZyk7CiAJCWlubm92YXRvcl9jb25maWdbMV0uZGF0YSA9ICZpbm5vdmF0b3IxNTEwX2xjZF9jb25maWc7CiAJfQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKIAlpZiAoY3B1X2lzX29tYXAxNjEwKCkpIHsKLQkJaW5ub3ZhdG9yX2NvbmZpZ1swXS5kYXRhID0gJmgyX3VzYl9jb25maWc7CisJCW9tYXBfdXNiX2luaXQoJmgyX3VzYl9jb25maWcpOwogCQlpbm5vdmF0b3JfY29uZmlnWzFdLmRhdGEgPSAmaW5ub3ZhdG9yMTYxMF9sY2RfY29uZmlnOwogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jCmluZGV4IGFmNTFlMGIuLjdiYzdhM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKQEAgLTIzMywxMCArMjMzLDYgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBub2tpYTc3MF9jb25maWdbXSBfX2luaXRkYXRhID0gewotCXsgT01BUF9UQUdfVVNCLAkJTlVMTCB9LAotfTsKLQogI2lmCWRlZmluZWQoQ09ORklHX09NQVBfRFNQKQogLyoKICAqIGF1ZGlvIHBvd2VyIGNvbnRyb2wKQEAgLTM3MSwxOSArMzY3LDE2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX25va2lhNzcwX2luaXQodm9pZCkKIHsKLQlub2tpYTc3MF9jb25maWdbMF0uZGF0YSA9ICZub2tpYTc3MF91c2JfY29uZmlnOwotCiAJcGxhdGZvcm1fYWRkX2RldmljZXMobm9raWE3NzBfZGV2aWNlcywgQVJSQVlfU0laRShub2tpYTc3MF9kZXZpY2VzKSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8obm9raWE3NzBfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShub2tpYTc3MF9zcGlfYm9hcmRfaW5mbykpOwotCW9tYXBfYm9hcmRfY29uZmlnID0gbm9raWE3NzBfY29uZmlnOwotCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKG5va2lhNzcwX2NvbmZpZyk7CiAJb21hcF9ncGlvX2luaXQoKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgTlVMTCwgMCk7CiAJb21hcF9kc3BfaW5pdCgpOwogCWFkczc4NDZfZGV2X2luaXQoKTsKIAltaXBpZF9kZXZfaW5pdCgpOworCW9tYXBfdXNiX2luaXQoJm5va2lhNzcwX3VzYl9jb25maWcpOwogCW5va2lhNzcwX21tY19pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCmluZGV4IDFhMTZlY2IuLmNmMzI0N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwpAQCAtNTIsNiArNTIsMjAgQEAKICNpbmNsdWRlIDxtYWNoL3RjLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KIAorLyogQXQgT01BUDU5MTIgT1NLIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCisjZGVmaW5lIE9NQVBfT1NLX0VUSFJfU1RBUlQJCTB4MDQ4MDAzMDAKKworLyogVFBTNjUwMTAgaGFzIGZvdXIgR1BJT3MuICBuUEcgYW5kIExFRDIgY2FuIGJlIHRyZWF0ZWQgbGlrZSBHUElPcyB3aXRoCisgKiBhbHRlcm5hdGUgcGluIGNvbmZpZ3VyYXRpb25zIGZvciBoYXJkd2FyZS1jb250cm9sbGVkIGJsaW5raW5nLgorICovCisjZGVmaW5lIE9TS19UUFNfR1BJT19CQVNFCQkoT01BUF9NQVhfR1BJT19MSU5FUyArIDE2IC8qIE1QVUlPICovKQorIwlkZWZpbmUgT1NLX1RQU19HUElPX1VTQl9QV1JfRU4JKE9TS19UUFNfR1BJT19CQVNFICsgMCkKKyMJZGVmaW5lIE9TS19UUFNfR1BJT19MRURfRDMJKE9TS19UUFNfR1BJT19CQVNFICsgMSkKKyMJZGVmaW5lIE9TS19UUFNfR1BJT19MQU5fUkVTRVQJKE9TS19UUFNfR1BJT19CQVNFICsgMikKKyMJZGVmaW5lIE9TS19UUFNfR1BJT19EU1BfUFdSX0VOCShPU0tfVFBTX0dQSU9fQkFTRSArIDMpCisjCWRlZmluZSBPU0tfVFBTX0dQSU9fTEVEX0Q5CShPU0tfVFBTX0dQSU9fQkFTRSArIDQpCisjCWRlZmluZSBPU0tfVFBTX0dQSU9fTEVEX0QyCShPU0tfVFBTX0dQSU9fQkFTRSArIDUpCisKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvc2tfcGFydGl0aW9uc1tdID0gewogCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KIAl7CkBAIC0yOTAsNyArMzA0LDYgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBvc2tfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQl7IE9NQVBfVEFHX1VTQiwgICAgICAgICAgICZvc2tfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwJCSZvc2tfdWFydF9jb25maWcgfSwKICNpZmRlZglDT05GSUdfT01BUF9PU0tfTUlTVFJBTAogCXsgT01BUF9UQUdfTENELAkJCSZvc2tfbGNkX2NvbmZpZyB9LApAQCAtNTQxLDYgKzU1NCw4IEBACiAJbCB8PSAoMyA8PCAxKTsKIAlvbWFwX3dyaXRlbChsLCBVU0JfVFJBTlNDRUlWRVJfQ1RSTCk7CiAKKwlvbWFwX3VzYl9pbml0KCZvc2tfdXNiX2NvbmZpZyk7CisKIAkvKiBpcnEgZm9yIHRwczY1MDEwIGNoaXAgKi8KIAkvKiBib290bG9hZGVyIGVmZmVjdGl2ZWx5IGRvZXM6ICBvbWFwX2NmZ19yZWcoVTE5XzE2MTBfTVBVSU8xKTsgKi8KIAlpZiAoZ3Bpb19yZXF1ZXN0KE9NQVBfTVBVSU8oMSksICJ0cHM2NTAxMCIpID09IDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwppbmRleCA5OWYyYjQzLi44ODZiNGMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKQEAgLTQzLDYgKzQzLDIxIEBACiAjaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogCisjZGVmaW5lIFBBTE1URV9VU0JERVRFQ1RfR1BJTwkwCisjZGVmaW5lIFBBTE1URV9VU0JfT1JfRENfR1BJTwkxCisjZGVmaW5lIFBBTE1URV9UU0NfR1BJTwkJNAorI2RlZmluZSBQQUxNVEVfUElOVERBVl9HUElPCTYKKyNkZWZpbmUgUEFMTVRFX01NQ19XUF9HUElPCTgKKyNkZWZpbmUgUEFMTVRFX01NQ19QT1dFUl9HUElPCTkKKyNkZWZpbmUgUEFMTVRFX0hEUV9HUElPCQkxMQorI2RlZmluZSBQQUxNVEVfSEVBRFBIT05FU19HUElPCTE0CisjZGVmaW5lIFBBTE1URV9TUEVBS0VSX0dQSU8JMTUKKyNkZWZpbmUgUEFMTVRFX0RDX0dQSU8JCU9NQVBfTVBVSU8oMikKKyNkZWZpbmUgUEFMTVRFX01NQ19TV0lUQ0hfR1BJTwlPTUFQX01QVUlPKDQpCisjZGVmaW5lIFBBTE1URV9NTUMxX0dQSU8JT01BUF9NUFVJTyg2KQorI2RlZmluZSBQQUxNVEVfTU1DMl9HUElPCU9NQVBfTVBVSU8oNykKKyNkZWZpbmUgUEFMTVRFX01NQzNfR1BJTwlPTUFQX01QVUlPKDExKQorCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9wYWxtdGVfaW5pdF9pcnEodm9pZCkKIHsKIAlvbWFwMV9pbml0X2NvbW1vbl9odygpOwpAQCAtMjg2LDcgKzMwMSw2IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgcGFsbXRlX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JeyBPTUFQX1RBR19VU0IsCQkmcGFsbXRlX3VzYl9jb25maWcgfSwKIAl7IE9NQVBfVEFHX0xDRCwJCSZwYWxtdGVfbGNkX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfVUFSVCwJJnBhbG10ZV91YXJ0X2NvbmZpZyB9LAogfTsKQEAgLTM0MSw2ICszNTUsNyBAQAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBhbG10ZV9zcGlfaW5mbywgQVJSQVlfU0laRShwYWxtdGVfc3BpX2luZm8pKTsKIAlwYWxtdGVfbWlzY19ncGlvX3NldHVwKCk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOworCW9tYXBfdXNiX2luaXQoJnBhbG10ZV91c2JfY29uZmlnKTsKIAlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMTAwLCBOVUxMLCAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKaW5kZXggMWNiYzEyNy4uNGYxYjQ0OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCkBAIC00Myw2ICs0MywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgogCisjZGVmaW5lIFBBTE1UVF9VU0JERVRFQ1RfR1BJTwkwCisjZGVmaW5lIFBBTE1UVF9DQUJMRV9HUElPCTEKKyNkZWZpbmUgUEFMTVRUX0xFRF9HUElPCQkzCisjZGVmaW5lIFBBTE1UVF9QRU5JUlFfR1BJTwk2CisjZGVmaW5lIFBBTE1UVF9NTUNfV1BfR1BJTwk4CisjZGVmaW5lIFBBTE1UVF9IRFFfR1BJTwkJMTEKKwogc3RhdGljIGludCBwYWxtdHRfa2V5bWFwW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9FU0MpLAogCUtFWSgwLCAxLCBLRVlfU1BBQ0UpLApAQCAtMjcyLDcgKzI3OSw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBwYWxtdHRfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQl7IE9NQVBfVEFHX1VTQiwJCSZwYWxtdHRfdXNiX2NvbmZpZwl9LAogCXsgT01BUF9UQUdfTENELAkJJnBhbG10dF9sY2RfY29uZmlnCX0sCiAJeyBPTUFQX1RBR19VQVJULAkmcGFsbXR0X3VhcnRfY29uZmlnCX0sCiB9OwpAQCAtMjk3LDYgKzMwMyw3IEBACiAKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhwYWxtdHRfYm9hcmRpbmZvLEFSUkFZX1NJWkUocGFsbXR0X2JvYXJkaW5mbykpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKKwlvbWFwX3VzYl9pbml0KCZwYWxtdHRfdXNiX2NvbmZpZyk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgTlVMTCwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXo3MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKaW5kZXggYmFmNWVmYi4uOWE1NWMzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMKQEAgLTQ2LDYgKzQ2LDE2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAKKyNkZWZpbmUgUEFMTVo3MV9VU0JERVRFQ1RfR1BJTwkwCisjZGVmaW5lIFBBTE1aNzFfUEVOSVJRX0dQSU8JNgorI2RlZmluZSBQQUxNWjcxX01NQ19XUF9HUElPCTgKKyNkZWZpbmUgUEFMTVo3MV9IRFFfR1BJTyAJMTEKKworI2RlZmluZSBQQUxNWjcxX0hPVFNZTkNfR1BJTwlPTUFQX01QVUlPKDEpCisjZGVmaW5lIFBBTE1aNzFfQ0FCTEVfR1BJTwlPTUFQX01QVUlPKDIpCisjZGVmaW5lIFBBTE1aNzFfU0xJREVSX0dQSU8JT01BUF9NUFVJTygzKQorI2RlZmluZSBQQUxNWjcxX01NQ19JTl9HUElPCU9NQVBfTVBVSU8oNCkKKwogc3RhdGljIHZvaWQgX19pbml0CiBvbWFwX3BhbG16NzFfaW5pdF9pcnEodm9pZCkKIHsKQEAgLTIzOSw3ICsyNDksNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgcGFsbXo3MV9jb25maWdbXSBfX2luaXRkYXRhID0gewotCXtPTUFQX1RBR19VU0IsCSZwYWxtejcxX3VzYl9jb25maWd9LAogCXtPTUFQX1RBR19MQ0QsCSZwYWxtejcxX2xjZF9jb25maWd9LAogCXtPTUFQX1RBR19VQVJULAkmcGFsbXo3MV91YXJ0X2NvbmZpZ30sCiB9OwpAQCAtMzEzLDYgKzMyMiw3IEBACiAKIAlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhwYWxtejcxX2JvYXJkaW5mbywKIAkJCQlBUlJBWV9TSVpFKHBhbG16NzFfYm9hcmRpbmZvKSk7CisJb21hcF91c2JfaW5pdCgmcGFsbXo3MV91c2JfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgTlVMTCwgMCk7CiAJcGFsbXo3MV9ncGlvX3NldHVwKDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEtbW1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS1tbWMuYwppbmRleCA2NmE0ZDdkLi41OGE0NmU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS1tbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS1tbWMuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtc3gxLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwppbmRleCAyOGM3NmExLi5jMDk2NTc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtc3gxLmg+CiAKIC8qIFdyaXRlIHRvIEkyQyBkZXZpY2UgKi8KIGludCBzeDFfaTJjX3dyaXRlX2J5dGUodTggZGV2YWRkciwgdTggcmVnb2Zmc2V0LCB1OCB2YWx1ZSkKQEAgLTM3Myw3ICszNzQsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgc3gxX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JeyBPTUFQX1RBR19VU0IsCSZzeDFfdXNiX2NvbmZpZyB9LAogCXsgT01BUF9UQUdfTENELAkmc3gxX2xjZF9jb25maWcgfSwKIAl7IE9NQVBfVEFHX1VBUlQsCSZzeDFfdWFydF9jb25maWcgfSwKIH07CkBAIC0zODgsNiArMzg4LDcgQEAKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzeDFfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDEwMCwgTlVMTCwgMCk7CisJb21hcF91c2JfaW5pdCgmc3gxX3VzYl9jb25maWcpOwogCXN4MV9tbWNfaW5pdCgpOwogCiAJLyogdHVybiBvbiBVU0IgcG93ZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCmluZGV4IGE3NjUzNTQuLjk4Mjc1ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYwpAQCAtMTQ1LDcgKzE0NSw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCB2b2ljZWJsdWVfY29uZmlnW10gPSB7Ci0JeyBPTUFQX1RBR19VU0IsICAmdm9pY2VibHVlX3VzYl9jb25maWcgfSwKIAl7IE9NQVBfVEFHX1VBUlQsICZ2b2ljZWJsdWVfdWFydF9jb25maWcgfSwKIH07CiAKQEAgLTE4NSw2ICsxODQsNyBAQAogCW9tYXBfYm9hcmRfY29uZmlnID0gdm9pY2VibHVlX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRSh2b2ljZWJsdWVfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CisJb21hcF91c2JfaW5pdCgmdm9pY2VibHVlX3VzYl9jb25maWcpOwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAxMDAsIE5VTEwsIDApOwogCiAJLyogVGhlcmUgaXMgYSBnb29kIGNoYW5jZSBib2FyZCBpcyBnb2luZyB1cCwgc28gZW5hYmxlIHBvd2VyIExFRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCmluZGV4IDVmYmEyMDcuLmRhZmU0ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKQEAgLTIwLDQxICsyMCwxNjEgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2NwdS5oPgogI2luY2x1ZGUgPG1hY2gvdXNiLmg+CiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZ2VuZXJpYzsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc191YXJ0Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2RzcGNrOworCiAjaW5jbHVkZSAiY2xvY2suaCIKIAorc3RhdGljIGludCBjbGtfb21hcDFfZHVtbXlfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xrX29tYXAxX2R1bW15X2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZHVtbXkgPSB7CisJLmVuYWJsZSA9IGNsa19vbWFwMV9kdW1teV9lbmFibGUsCisJLmRpc2FibGUgPSBjbGtfb21hcDFfZHVtbXlfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGR1bW15X2NrID0geworCS5uYW1lCT0gImR1bW15IiwKKwkub3BzCT0gJmNsa29wc19kdW1teSwKKwkuZmxhZ3MJPSBSQVRFX0ZJWEVELAorfTsKKworc3RydWN0IG9tYXBfY2xrIHsKKwl1MzIJCWNwdTsKKwlzdHJ1Y3QgY2xrX2xvb2t1cCBsazsKK307CisKKyNkZWZpbmUgQ0xLKGRldiwgY29uLCBjaywgY3ApIAkJXAorCXsJCQkJXAorCQkgLmNwdSA9IGNwLAkJXAorCQkubGsgPSB7CQkJXAorCQkJLmRldl9pZCA9IGRldiwJXAorCQkJLmNvbl9pZCA9IGNvbiwJXAorCQkJLmNsayA9IGNrLAlcCisJCX0sCQkJXAorCX0KKworI2RlZmluZSBDS18zMTAJKDEgPDwgMCkKKyNkZWZpbmUgQ0tfNzMwCSgxIDw8IDEpCisjZGVmaW5lIENLXzE1MTAJKDEgPDwgMikKKyNkZWZpbmUgQ0tfMTZYWAkoMSA8PCAzKQorCitzdGF0aWMgc3RydWN0IG9tYXBfY2xrIG9tYXBfY2xrc1tdID0geworCS8qIG5vbi1VTFBEIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiY2tfcmVmIiwJJmNrX3JlZiwJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiY2tfZHBsbDEiLAkmY2tfZHBsbDEsCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwkvKiBDS19HRU4xIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiY2tfZHBsbDFvdXQiLAkmY2tfZHBsbDFvdXQuY2xrLCBDS18xNlhYKSwKKwlDTEsoTlVMTCwJImNrX3Nvc3NpIiwJJnNvc3NpX2NrLAlDS18xNlhYKSwKKwlDTEsoTlVMTCwJImFybV9jayIsCSZhcm1fY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImFybXBlcl9jayIsCSZhcm1wZXJfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJhcm1fZ3Bpb19jayIsCSZhcm1fZ3Bpb19jaywJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJhcm14b3JfY2siLAkmYXJteG9yX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiYXJtdGltX2NrIiwJJmFybXRpbV9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkmYXJtd2R0X2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcF93ZHQiLAkiaWNrIiwJCSZhcm1wZXJfY2suY2xrLAlDS18xNlhYKSwKKwlDTEsoIm9tYXBfd2R0IiwgImljayIsCQkmZHVtbXlfY2ssCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiYXJtaW50aF9jayIsCSZhcm1pbnRoX2NrMTUxMCwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJhcm1pbnRoX2NrIiwJJmFybWludGhfY2sxNnh4LCBDS18xNlhYKSwKKwkvKiBDS19HRU4yIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiZHNwX2NrIiwJJmRzcF9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiZHNwbW11X2NrIiwJJmRzcG1tdV9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiZHNwcGVyX2NrIiwJJmRzcHBlcl9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiZHNweG9yX2NrIiwJJmRzcHhvcl9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkiZHNwdGltX2NrIiwJJmRzcHRpbV9jaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCS8qIENLX0dFTjMgY2xvY2tzICovCisJQ0xLKE5VTEwsCSJ0Y19jayIsCSZ0Y19jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwIHwgQ0tfNzMwKSwKKwlDTEsoTlVMTCwJInRpcGJfY2siLAkmdGlwYl9jaywJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJsM19vY3BpX2NrIiwJJmwzX29jcGlfY2ssCUNLXzE2WFgpLAorCUNMSyhOVUxMLAkidGMxX2NrIiwJJnRjMV9jaywJQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJ0YzJfY2siLAkmdGMyX2NrLAlDS18xNlhYKSwKKwlDTEsoTlVMTCwJImRtYV9jayIsCSZkbWFfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJImRtYV9sY2RmcmVlX2NrIiwgJmRtYV9sY2RmcmVlX2NrLCBDS18xNlhYKSwKKwlDTEsoTlVMTCwJImFwaV9jayIsCSZhcGlfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJsYl9jayIsCSZsYl9jay5jbGssCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkicmhlYTFfY2siLAkmcmhlYTFfY2ssCUNLXzE2WFgpLAorCUNMSyhOVUxMLAkicmhlYTJfY2siLAkmcmhlYTJfY2ssCUNLXzE2WFgpLAorCUNMSyhOVUxMLAkibGNkX2NrIiwJJmxjZF9ja18xNnh4LAlDS18xNlhYIHwgQ0tfNzMwKSwKKwlDTEsoTlVMTCwJImxjZF9jayIsCSZsY2RfY2tfMTUxMC5jbGssIENLXzE1MTAgfCBDS18zMTApLAorCS8qIFVMUEQgY2xvY2tzICovCisJQ0xLKE5VTEwsCSJ1YXJ0MV9jayIsCSZ1YXJ0MV8xNTEwLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJInVhcnQxX2NrIiwJJnVhcnQxXzE2eHguY2xrLCBDS18xNlhYKSwKKwlDTEsoTlVMTCwJInVhcnQyX2NrIiwJJnVhcnQyX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJ1YXJ0M19jayIsCSZ1YXJ0M18xNTEwLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJInVhcnQzX2NrIiwJJnVhcnQzXzE2eHguY2xrLCBDS18xNlhYKSwKKwlDTEsoTlVMTCwJInVzYl9jbGtvIiwJJnVzYl9jbGtvLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJ1c2JfaGhjX2NrIiwJJnVzYl9oaGNfY2sxNTEwLCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoTlVMTCwJInVzYl9oaGNfY2siLAkmdXNiX2hoY19jazE2eHgsIENLXzE2WFgpLAorCUNMSyhOVUxMLAkidXNiX2RjX2NrIiwJJnVzYl9kY19jaywJQ0tfMTZYWCksCisJQ0xLKE5VTEwsCSJtY2xrIiwJCSZtY2xrXzE1MTAsCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSyhOVUxMLAkibWNsayIsCQkmbWNsa18xNnh4LAlDS18xNlhYKSwKKwlDTEsoTlVMTCwJImJjbGsiLAkJJmJjbGtfMTUxMCwJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKE5VTEwsCSJiY2xrIiwJCSZiY2xrXzE2eHgsCUNLXzE2WFgpLAorCUNMSygibW1jaS1vbWFwLjAiLCAiZmNrIiwJJm1tYzFfY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm1tY2ktb21hcC4wIiwgImljayIsCSZhcm1wZXJfY2suY2xrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJtbWNpLW9tYXAuMSIsICJmY2siLAkmbW1jMl9jaywJQ0tfMTZYWCksCisJQ0xLKCJtbWNpLW9tYXAuMSIsICJpY2siLAkmYXJtcGVyX2NrLmNsaywJQ0tfMTZYWCksCisJLyogVmlydHVhbCBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJIm1wdSIsCQkmdmlydHVhbF9ja19tcHUsIENLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyY19mY2ssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmkyY19pY2ssCUNLXzE2WFgpLAorCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmZHVtbXlfY2ssCUNLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcF91d2lyZSIsICJmY2siLAkmYXJteG9yX2NrLmNsaywJQ0tfMTZYWCB8IENLXzE1MTAgfCBDS18zMTApLAorCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZkc3BwZXJfY2ssCUNLXzE2WFgpLAorCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJmFybXBlcl9jay5jbGssCUNLXzE2WFgpLAorCUNMSygib21hcC1tY2JzcC4yIiwgImljayIsCSZkdW1teV9jaywJQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJvbWFwLW1jYnNwLjMiLCAiaWNrIiwJJmRzcHBlcl9jaywJQ0tfMTZYWCksCisJQ0xLKCJvbWFwLW1jYnNwLjMiLCAiaWNrIiwJJmR1bW15X2NrLAlDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJmY2siLAkmZHNweG9yX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiZmNrIiwJJmFybXBlcl9jay5jbGssCUNLXzE2WFggfCBDS18xNTEwIHwgQ0tfMzEwKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJmY2siLAkmZHNweG9yX2NrLAlDS18xNlhYIHwgQ0tfMTUxMCB8IENLXzMxMCksCit9OworCitzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYyhzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHZvaWQgb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYyhzdHJ1Y3QgY2xrICogY2xrKTsKK3N0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7CisKIF9fdTMyIGFybV9pZGxlY3QxX21hc2s7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogT21hcDEgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgdm9pZCBvbWFwMV93YXRjaGRvZ19yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX3dhdGNoZG9nX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAxNDsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyAxNDsKIH0KIAotc3RhdGljIHZvaWQgb21hcDFfdWFydF9yZWNhbGMoc3RydWN0IGNsayAqIGNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAxX3VhcnRfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQl1bnNpZ25lZCBpbnQgdmFsID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCWlmICh2YWwgJiBjbGstPmVuYWJsZV9iaXQpCi0JCWNsay0+cmF0ZSA9IDQ4MDAwMDAwOwotCWVsc2UKLQkJY2xrLT5yYXRlID0gMTIwMDAwMDA7CisJdW5zaWduZWQgaW50IHZhbCA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmV0dXJuIHZhbCAmIGNsay0+ZW5hYmxlX2JpdCA/IDQ4MDAwMDAwIDogMTIwMDAwMDA7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAxX3Nvc3NpX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV9zb3NzaV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewogCXUzMiBkaXYgPSBvbWFwX3JlYWRsKE1PRF9DT05GX0NUUkxfMSk7CiAKIAlkaXYgPSAoZGl2ID4+IDE3KSAmIDB4NzsKIAlkaXYrKzsKLQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdjsKKworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGRpdjsKIH0KIAogc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4oc3RydWN0IGNsayAqY2xrKQpAQCAtNzgsNiArMTk4LDExIEBACiAJfQogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZHNwY2sgPSB7CisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9kc3BfZG9tYWluLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2RzcF9kb21haW4sCit9OworCiBzdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfdWFydF9mdW5jdGlvbmFsKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlpbnQgcmV0OwpAQCAtMTA1LDYgKzIzMCwxMSBAQAogCW9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMoY2xrKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX3VhcnQgPSB7CisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfdWFydF9mdW5jdGlvbmFsLAorfTsKKwogc3RhdGljIHZvaWQgb21hcDFfY2xrX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKQogewogCXN0cnVjdCBhcm1faWRsZWN0MV9jbGsgKiBpY2xrID0gKHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgKiljbGs7CkBAIC0xOTcsOSArMzI3LDYgQEAKIAlzdHJ1Y3QgY2xrICogcGFyZW50OwogCXVuc2lnbmVkICBkc29yX2V4cDsKIAotCWlmICh1bmxpa2VseSghKGNsay0+ZmxhZ3MgJiBSQVRFX0NLQ1RMKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJcGFyZW50ID0gY2xrLT5wYXJlbnQ7CiAJaWYgKHVubGlrZWx5KHBhcmVudCA9PSBOVUxMKSkKIAkJcmV0dXJuIC1FSU87CkBAIC0yMTUsMjIgKzM0MiwxNSBAQAogCXJldHVybiBkc29yX2V4cDsKIH0KIAotc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV9ja2N0bF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWludCBkc29yOwotCiAJLyogQ2FsY3VsYXRlIGRpdmlzb3IgZW5jb2RlZCBhcyAyLWJpdCBleHBvbmVudCAqLwotCWRzb3IgPSAxIDw8ICgzICYgKG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7CisJaW50IGRzb3IgPSAxIDw8ICgzICYgKG9tYXBfcmVhZHcoQVJNX0NLQ1RMKSA+PiBjbGstPnJhdGVfb2Zmc2V0KSk7CiAKLQlpZiAodW5saWtlbHkoY2xrLT5yYXRlID09IGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcikpCi0JCXJldHVybjsgLyogTm8gY2hhbmdlLCBxdWljayBleGl0ICovCi0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yOwotCi0JaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3I7CiB9CiAKLXN0YXRpYyB2b2lkIG9tYXAxX2NrY3RsX3JlY2FsY19kc3BfZG9tYWluKHN0cnVjdCBjbGsgKiBjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV9ja2N0bF9yZWNhbGNfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGspCiB7CiAJaW50IGRzb3I7CiAKQEAgLTI0NSwxMiArMzY1LDcgQEAKIAlkc29yID0gMSA8PCAoMyAmIChfX3Jhd19yZWFkdyhEU1BfQ0tDVEwpID4+IGNsay0+cmF0ZV9vZmZzZXQpKTsKIAlvbWFwMV9jbGtfZGlzYWJsZSgmYXBpX2NrLmNsayk7CiAKLQlpZiAodW5saWtlbHkoY2xrLT5yYXRlID09IGNsay0+cGFyZW50LT5yYXRlIC8gZHNvcikpCi0JCXJldHVybjsgLyogTm8gY2hhbmdlLCBxdWljayBleGl0ICovCi0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkc29yOwotCi0JaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGRzb3I7CiB9CiAKIC8qIE1QVSB2aXJ0dWFsIGNsb2NrIGZ1bmN0aW9ucyAqLwpAQCAtMjg5LDM1ICs0MDQsNTcgQEAKIAkJb21hcF9zcmFtX3JlcHJvZ3JhbV9jbG9jayhwdHItPmRwbGxjdGxfdmFsLCBwdHItPmNrY3RsX3ZhbCk7CiAKIAlja19kcGxsMS5yYXRlID0gcHRyLT5wbGxfcmF0ZTsKLQlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9tYXAxX2Nsa19zZXRfcmF0ZV9kc3BfZG9tYWluKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewotCWludCAgcmV0ID0gLUVJTlZBTDsKLQlpbnQgIGRzb3JfZXhwOwotCV9fdTE2ICByZWd2YWw7CisJaW50IGRzb3JfZXhwOworCXUxNiByZWd2YWw7CiAKLQlpZiAoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpIHsKLQkJZHNvcl9leHAgPSBjYWxjX2Rzb3JfZXhwKGNsaywgcmF0ZSk7Ci0JCWlmIChkc29yX2V4cCA+IDMpCi0JCQlkc29yX2V4cCA9IC1FSU5WQUw7Ci0JCWlmIChkc29yX2V4cCA8IDApCi0JCQlyZXR1cm4gZHNvcl9leHA7CisJZHNvcl9leHAgPSBjYWxjX2Rzb3JfZXhwKGNsaywgcmF0ZSk7CisJaWYgKGRzb3JfZXhwID4gMykKKwkJZHNvcl9leHAgPSAtRUlOVkFMOworCWlmIChkc29yX2V4cCA8IDApCisJCXJldHVybiBkc29yX2V4cDsKIAotCQlyZWd2YWwgPSBfX3Jhd19yZWFkdyhEU1BfQ0tDVEwpOwotCQlyZWd2YWwgJj0gfigzIDw8IGNsay0+cmF0ZV9vZmZzZXQpOwotCQlyZWd2YWwgfD0gZHNvcl9leHAgPDwgY2xrLT5yYXRlX29mZnNldDsKLQkJX19yYXdfd3JpdGV3KHJlZ3ZhbCwgRFNQX0NLQ1RMKTsKLQkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7Ci0JCXJldCA9IDA7Ci0JfQorCXJlZ3ZhbCA9IF9fcmF3X3JlYWR3KERTUF9DS0NUTCk7CisJcmVndmFsICY9IH4oMyA8PCBjbGstPnJhdGVfb2Zmc2V0KTsKKwlyZWd2YWwgfD0gZHNvcl9leHAgPDwgY2xrLT5yYXRlX29mZnNldDsKKwlfX3Jhd193cml0ZXcocmVndmFsLCBEU1BfQ0tDVEwpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gKDEgPDwgZHNvcl9leHApOwogCi0JaWYgKHVubGlrZWx5KHJldCA9PSAwICYmIChjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJcmV0dXJuIDA7Cit9CiAKLQlyZXR1cm4gcmV0Oworc3RhdGljIGxvbmcgb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCBkc29yX2V4cCA9IGNhbGNfZHNvcl9leHAoY2xrLCByYXRlKTsKKwlpZiAoZHNvcl9leHAgPCAwKQorCQlyZXR1cm4gZHNvcl9leHA7CisJaWYgKGRzb3JfZXhwID4gMykKKwkJZHNvcl9leHAgPSAzOworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKK30KKworc3RhdGljIGludCBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCBkc29yX2V4cDsKKwl1MTYgcmVndmFsOworCisJZHNvcl9leHAgPSBjYWxjX2Rzb3JfZXhwKGNsaywgcmF0ZSk7CisJaWYgKGRzb3JfZXhwID4gMykKKwkJZHNvcl9leHAgPSAtRUlOVkFMOworCWlmIChkc29yX2V4cCA8IDApCisJCXJldHVybiBkc29yX2V4cDsKKworCXJlZ3ZhbCA9IG9tYXBfcmVhZHcoQVJNX0NLQ1RMKTsKKwlyZWd2YWwgJj0gfigzIDw8IGNsay0+cmF0ZV9vZmZzZXQpOworCXJlZ3ZhbCB8PSBkc29yX2V4cCA8PCBjbGstPnJhdGVfb2Zmc2V0OworCXJlZ3ZhbCA9IHZlcmlmeV9ja2N0bF92YWx1ZShyZWd2YWwpOworCW9tYXBfd3JpdGV3KHJlZ3ZhbCwgQVJNX0NLQ1RMKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGxvbmcgb21hcDFfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCkBAIC0zNzIsMTQgKzUwOSwxNCBAQAogewogCXVuc2lnbmVkIGludCB2YWw7CiAKLQl2YWwgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJdmFsID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAlpZiAocmF0ZSA9PSAxMjAwMDAwMCkKIAkJdmFsICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwogCWVsc2UgaWYgKHJhdGUgPT0gNDgwMDAwMDApCiAJCXZhbCB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwogCWVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jb21hcF93cml0ZWwodmFsLCBjbGstPmVuYWJsZV9yZWcpOworCV9fcmF3X3dyaXRlbCh2YWwsIGNsay0+ZW5hYmxlX3JlZyk7CiAJY2xrLT5yYXRlID0gcmF0ZTsKIAogCXJldHVybiAwOwpAQCAtMzk4LDggKzUzNSw4IEBACiAJZWxzZQogCQlyYXRpb19iaXRzID0gKGRzb3IgLSAyKSA8PCAyOwogCi0JcmF0aW9fYml0cyB8PSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZykgJiB+MHhmZDsKLQlvbWFwX3dyaXRldyhyYXRpb19iaXRzLCBjbGstPmVuYWJsZV9yZWcpOworCXJhdGlvX2JpdHMgfD0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4weGZkOworCV9fcmF3X3dyaXRldyhyYXRpb19iaXRzLCBjbGstPmVuYWJsZV9yZWcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MjMsOCArNTYwLDYgQEAKIAlvbWFwX3dyaXRlbChsLCBNT0RfQ09ORl9DVFJMXzEpOwogCiAJY2xrLT5yYXRlID0gcF9yYXRlIC8gKGRpdiArIDEpOwotCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQwLDggKzU3NSw4IEBACiAJX191MTYgcmF0aW9fYml0czsKIAogCS8qIERldGVybWluZSBjdXJyZW50IHJhdGUgYW5kIGVuc3VyZSBjbG9jayBpcyBiYXNlZCBvbiA5Nk1IeiBBUExMICovCi0JcmF0aW9fYml0cyA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKSAmIH4xOwotCW9tYXBfd3JpdGV3KHJhdGlvX2JpdHMsIGNsay0+ZW5hYmxlX3JlZyk7CisJcmF0aW9fYml0cyA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZykgJiB+MTsKKwlfX3Jhd193cml0ZXcocmF0aW9fYml0cywgY2xrLT5lbmFibGVfcmVnKTsKIAogCXJhdGlvX2JpdHMgPSAocmF0aW9fYml0cyAmIDB4ZmMpID4+IDI7CiAJaWYgKHJhdGlvX2JpdHMgPiA2KQpAQCAtNDY4LDcgKzYwMyw3IEBACiAJCQkJb21hcDFfY2xrX2RlbnlfaWRsZShjbGstPnBhcmVudCk7CiAJCX0KIAotCQlyZXQgPSBjbGstPmVuYWJsZShjbGspOworCQlyZXQgPSBjbGstPm9wcy0+ZW5hYmxlKGNsayk7CiAKIAkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSAmJiBjbGstPnBhcmVudCkgewogCQkJb21hcDFfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwpAQCAtNDgyLDcgKzYxNyw3IEBACiBzdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJaWYgKGNsay0+dXNlY291bnQgPiAwICYmICEoLS1jbGstPnVzZWNvdW50KSkgewotCQljbGstPmRpc2FibGUoY2xrKTsKKwkJY2xrLT5vcHMtPmRpc2FibGUoY2xrKTsKIAkJaWYgKGxpa2VseShjbGstPnBhcmVudCkpIHsKIAkJCW9tYXAxX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKIAkJCWlmIChjbGstPmZsYWdzICYgQ0xPQ0tfTk9fSURMRV9QQVJFTlQpCkBAIC00OTYsOSArNjMxLDYgQEAKIAlfX3UxNiByZWd2YWwxNjsKIAlfX3UzMiByZWd2YWwzMjsKIAotCWlmIChjbGstPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpCi0JCXJldHVybiAwOwotCiAJaWYgKHVubGlrZWx5KGNsay0+ZW5hYmxlX3JlZyA9PSBOVUxMKSkgewogCQlwcmludGsoS0VSTl9FUlIgImNsb2NrLmM6IEVuYWJsZSBmb3IgJXMgd2l0aG91dCBlbmFibGUgY29kZVxuIiwKIAkJICAgICAgIGNsay0+bmFtZSk7CkBAIC01MDYsMjUgKzYzOCwxMyBAQAogCX0KIAogCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgewotCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCW9tYXBfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwotCQl9CisJCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJcmVndmFsMzIgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwogCX0gZWxzZSB7Ci0JCWlmIChjbGstPmZsYWdzICYgVklSVFVBTF9JT19BRERSRVNTKSB7Ci0JCQlyZWd2YWwxNiA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwxNiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJX19yYXdfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOwotCQl9IGVsc2UgewotCQkJcmVndmFsMTYgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwxNiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJb21hcF93cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0KKwkJcmVndmFsMTYgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOworCQlyZWd2YWwxNiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01MzksNDQgKzY1OSwyNiBAQAogCQlyZXR1cm47CiAKIAlpZiAoY2xrLT5mbGFncyAmIEVOQUJMRV9SRUdfMzJCSVQpIHsKLQkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpIHsKLQkJCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwotCQl9IGVsc2UgewotCQkJcmVndmFsMzIgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JCQlyZWd2YWwzMiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKLQkJCW9tYXBfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwotCQl9CisJCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwkJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKIAl9IGVsc2UgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykgewotCQkJcmVndmFsMTYgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwotCQkJcmVndmFsMTYgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JCQlfX3Jhd193cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlyZWd2YWwxNiA9IG9tYXBfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKLQkJCXJlZ3ZhbDE2ICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCQkJb21hcF93cml0ZXcocmVndmFsMTYsIGNsay0+ZW5hYmxlX3JlZyk7Ci0JCX0KKwkJcmVndmFsMTYgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOworCQlyZWd2YWwxNiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJX19yYXdfd3JpdGV3KHJlZ3ZhbDE2LCBjbGstPmVuYWJsZV9yZWcpOwogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2dlbmVyaWMgPSB7CisJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAorCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCit9OworCiBzdGF0aWMgbG9uZyBvbWFwMV9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQlpbnQgZHNvcl9leHA7Ci0KIAlpZiAoY2xrLT5mbGFncyAmIFJBVEVfRklYRUQpCiAJCXJldHVybiBjbGstPnJhdGU7CiAKLQlpZiAoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpIHsKLQkJZHNvcl9leHAgPSBjYWxjX2Rzb3JfZXhwKGNsaywgcmF0ZSk7Ci0JCWlmIChkc29yX2V4cCA8IDApCi0JCQlyZXR1cm4gZHNvcl9leHA7Ci0JCWlmIChkc29yX2V4cCA+IDMpCi0JCQlkc29yX2V4cCA9IDM7Ci0JCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvICgxIDw8IGRzb3JfZXhwKTsKLQl9Ci0KIAlpZiAoY2xrLT5yb3VuZF9yYXRlICE9IE5VTEwpCiAJCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKIApAQCAtNTg2LDMwICs2ODgsOSBAQAogc3RhdGljIGludCBvbWFwMV9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7CiAJaW50ICByZXQgPSAtRUlOVkFMOwotCWludCAgZHNvcl9leHA7Ci0JX191MTYgIHJlZ3ZhbDsKIAogCWlmIChjbGstPnNldF9yYXRlKQogCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7Ci0JZWxzZSBpZiAoY2xrLT5mbGFncyAmIFJBVEVfQ0tDVEwpIHsKLQkJZHNvcl9leHAgPSBjYWxjX2Rzb3JfZXhwKGNsaywgcmF0ZSk7Ci0JCWlmIChkc29yX2V4cCA+IDMpCi0JCQlkc29yX2V4cCA9IC1FSU5WQUw7Ci0JCWlmIChkc29yX2V4cCA8IDApCi0JCQlyZXR1cm4gZHNvcl9leHA7Ci0KLQkJcmVndmFsID0gb21hcF9yZWFkdyhBUk1fQ0tDVEwpOwotCQlyZWd2YWwgJj0gfigzIDw8IGNsay0+cmF0ZV9vZmZzZXQpOwotCQlyZWd2YWwgfD0gZHNvcl9leHAgPDwgY2xrLT5yYXRlX29mZnNldDsKLQkJcmVndmFsID0gdmVyaWZ5X2NrY3RsX3ZhbHVlKHJlZ3ZhbCk7Ci0JCW9tYXBfd3JpdGV3KHJlZ3ZhbCwgQVJNX0NLQ1RMKTsKLQkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAoMSA8PCBkc29yX2V4cCk7Ci0JCXJldCA9IDA7Ci0JfQotCi0JaWYgKHVubGlrZWx5KHJldCA9PSAwICYmIChjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MzIsMTcgKzcxMywxMCBAQAogCX0KIAogCS8qIElzIHRoZSBjbG9jayBhbHJlYWR5IGRpc2FibGVkPyAqLwotCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykKLQkJCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQkJCWVsc2UKLQkJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKLQl9IGVsc2UgewotCQlpZiAoY2xrLT5mbGFncyAmIFZJUlRVQUxfSU9fQUREUkVTUykKLQkJCXJlZ3ZhbDMyID0gX19yYXdfcmVhZHcoY2xrLT5lbmFibGVfcmVnKTsKLQkJZWxzZQotCQkJcmVndmFsMzIgPSBvbWFwX3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7Ci0JfQorCWlmIChjbGstPmZsYWdzICYgRU5BQkxFX1JFR18zMkJJVCkKKwkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCWVsc2UKKwkJcmVndmFsMzIgPSBfX3Jhd19yZWFkdyhjbGstPmVuYWJsZV9yZWcpOwogCiAJaWYgKChyZWd2YWwzMiAmICgxIDw8IGNsay0+ZW5hYmxlX2JpdCkpID09IDApCiAJCXJldHVybjsKQEAgLTY1OSw3ICs3MzMsNyBAQAogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyB1bnVzZWQgY2xvY2sgXCIlc1wiLi4uICIsIGNsay0+bmFtZSk7Ci0JY2xrLT5kaXNhYmxlKGNsayk7CisJY2xrLT5vcHMtPmRpc2FibGUoY2xrKTsKIAlwcmludGsoIiBkb25lXG4iKTsKIH0KIApAQCAtNjc3LDEwICs3NTEsMTAgQEAKIAogaW50IF9faW5pdCBvbWFwMV9jbGtfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjbGsgKiogY2xrcDsKKwlzdHJ1Y3Qgb21hcF9jbGsgKmM7CiAJY29uc3Qgc3RydWN0IG9tYXBfY2xvY2tfY29uZmlnICppbmZvOwogCWludCBjcnlzdGFsX3R5cGUgPSAwOyAvKiBEZWZhdWx0IDEyIE1IeiAqLwotCXUzMiByZWc7CisJdTMyIHJlZywgY3B1X21hc2s7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfTEwKIAkvKiBSZXNldHMgc29tZSBjbG9ja3MgdGhhdCBtYXkgYmUgbGVmdCBvbiBmcm9tIGJvb3Rsb2FkZXIsCkBAIC03MDAsMjggKzc3NCwyNSBAQAogCS8qIEJ5IGRlZmF1bHQgYWxsIGlkbGVjdDEgY2xvY2tzIGFyZSBhbGxvd2VkIHRvIGlkbGUgKi8KIAlhcm1faWRsZWN0MV9tYXNrID0gfjA7CiAKLQlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzK0FSUkFZX1NJWkUob25jaGlwX2Nsa3MpOyBjbGtwKyspIHsKLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDE1MTApICYmIGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KKwlmb3IgKGMgPSBvbWFwX2Nsa3M7IGMgPCBvbWFwX2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXBfY2xrcyk7IGMrKykKKwkJY2xrX2luaXRfb25lKGMtPmxrLmNsayk7CiAKLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDE2WFgpICYmIGNwdV9pc19vbWFwMTZ4eCgpKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJY29udGludWU7Ci0JCX0KKwljcHVfbWFzayA9IDA7CisJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQljcHVfbWFzayB8PSBDS18xNlhYOworCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwkJY3B1X21hc2sgfD0gQ0tfMTUxMDsKKwlpZiAoY3B1X2lzX29tYXA3MzAoKSkKKwkJY3B1X21hc2sgfD0gQ0tfNzMwOworCWlmIChjcHVfaXNfb21hcDMxMCgpKQorCQljcHVfbWFzayB8PSBDS18zMTA7CiAKLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDczMCkgJiYgY3B1X2lzX29tYXA3MzAoKSkgewotCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQkJCWNvbnRpbnVlOworCWZvciAoYyA9IG9tYXBfY2xrczsgYyA8IG9tYXBfY2xrcyArIEFSUkFZX1NJWkUob21hcF9jbGtzKTsgYysrKQorCQlpZiAoYy0+Y3B1ICYgY3B1X21hc2spIHsKKwkJCWNsa2Rldl9hZGQoJmMtPmxrKTsKKwkJCWNsa19yZWdpc3RlcihjLT5say5jbGspOwogCQl9CiAKLQkJaWYgKCgoKmNsa3ApLT5mbGFncyAmQ0xPQ0tfSU5fT01BUDMxMCkgJiYgY3B1X2lzX29tYXAzMTAoKSkgewotCQkJY2xrX3JlZ2lzdGVyKCpjbGtwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JfQotCiAJaW5mbyA9IG9tYXBfZ2V0X2NvbmZpZyhPTUFQX1RBR19DTE9DSywgc3RydWN0IG9tYXBfY2xvY2tfY29uZmlnKTsKIAlpZiAoaW5mbyAhPSBOVUxMKSB7CiAJCWlmICghY3B1X2lzX29tYXAxNXh4KCkpCkBAIC03NjksNyArODQwLDYgQEAKIAkJCX0KIAkJfQogCX0KLQlwcm9wYWdhdGVfcmF0ZSgmY2tfZHBsbDEpOwogI2Vsc2UKIAkvKiBGaW5kIHRoZSBoaWdoZXN0IHN1cHBvcnRlZCBmcmVxdWVuY3kgYW5kIGVuYWJsZSBpdCAqLwogCWlmIChvbWFwMV9zZWxlY3RfdGFibGVfcmF0ZSgmdmlydHVhbF9ja19tcHUsIH4wKSkgewpAQCAtNzc4LDkgKzg0OCw5IEBACiAJCW9tYXBfd3JpdGV3KDB4MjI5MCwgRFBMTF9DVEwpOwogCQlvbWFwX3dyaXRldyhjcHVfaXNfb21hcDczMCgpID8gMHgzMDA1IDogMHgxMDA1LCBBUk1fQ0tDVEwpOwogCQlja19kcGxsMS5yYXRlID0gNjAwMDAwMDA7Ci0JCXByb3BhZ2F0ZV9yYXRlKCZja19kcGxsMSk7CiAJfQogI2VuZGlmCisJcHJvcGFnYXRlX3JhdGUoJmNrX2RwbGwxKTsKIAkvKiBDYWNoZSByYXRlcyBmb3IgY2xvY2tzIGNvbm5lY3RlZCB0byBja19yZWYgKG5vdCBkcGxsMSkgKi8KIAlwcm9wYWdhdGVfcmF0ZSgmY2tfcmVmKTsKIAlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlICh4dGFsL0RQTEwxL01QVSk6ICIKQEAgLTgzMiw0ICs5MDIsMyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAppbmRleCBjMWRjZGYxLi4xN2Y4NzQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCkBAIC0xMywyNyArMTMsMjIgQEAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAxX0NMT0NLX0gKICNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAxX0NMT0NLX0gKIAotc3RhdGljIGludCBvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMoc3RydWN0IGNsayAqIGNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljKHN0cnVjdCBjbGsgKiBjbGspOwotc3RhdGljIHZvaWQgb21hcDFfY2tjdGxfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOwotc3RhdGljIHZvaWQgb21hcDFfd2F0Y2hkb2dfcmVjYWxjKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfY2tjdGxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV93YXRjaGRvZ19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKIHN0YXRpYyBpbnQgb21hcDFfc2V0X3Nvc3NpX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIHZvaWQgb21hcDFfc29zc2lfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMV9ja2N0bF9yZWNhbGNfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICogY2xrKTsKLXN0YXRpYyBpbnQgb21hcDFfY2xrX2VuYWJsZV9kc3BfZG9tYWluKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfc29zc2lfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMV9ja2N0bF9yZWNhbGNfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICpjbGspOwogc3RhdGljIGludCBvbWFwMV9jbGtfc2V0X3JhdGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIHZvaWQgb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbihzdHJ1Y3QgY2xrICogY2xrKTsKIHN0YXRpYyBpbnQgb21hcDFfc2V0X3VhcnRfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIHZvaWQgb21hcDFfdWFydF9yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7Ci1zdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGVfdWFydF9mdW5jdGlvbmFsKHN0cnVjdCBjbGsgKiBjbGspOwotc3RhdGljIHZvaWQgb21hcDFfY2xrX2Rpc2FibGVfdWFydF9mdW5jdGlvbmFsKHN0cnVjdCBjbGsgKiBjbGspOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDFfdWFydF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKIHN0YXRpYyBpbnQgb21hcDFfc2V0X2V4dF9jbGtfcmF0ZShzdHJ1Y3QgY2xrICogY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogc3RhdGljIGxvbmcgb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiBzdGF0aWMgdm9pZCBvbWFwMV9pbml0X2V4dF9jbGsoc3RydWN0IGNsayAqIGNsayk7CiBzdGF0aWMgaW50IG9tYXAxX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiBzdGF0aWMgbG9uZyBvbWFwMV9yb3VuZF90b190YWJsZV9yYXRlKHN0cnVjdCBjbGsgKiBjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci1zdGF0aWMgaW50IG9tYXAxX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAxX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7CisKK3N0YXRpYyBpbnQgb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitzdGF0aWMgbG9uZyBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0oc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogCiBzdHJ1Y3QgbXB1X3JhdGUgewogCXVuc2lnbmVkIGxvbmcJCXJhdGU7CkBAIC0xNTIsMTAxICsxNDcsODQgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgY2tfcmVmID0gewogCS5uYW1lCQk9ICJja19yZWYiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IEFMV0FZU19FTkFCTEVELAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgY2tfZHBsbDEgPSB7CiAJLm5hbWUJCT0gImNrX2RwbGwxIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZja19yZWYsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGFybV9pZGxlY3QxX2NsayBja19kcGxsMW91dCA9IHsKIAkuY2xrID0gewogCQkubmFtZQkJPSAiY2tfZHBsbDFvdXQiLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkJLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IENMT0NLX0lETEVfQ09OVFJPTCB8Ci0JCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgUkFURV9QUk9QQUdBVEVTLAotCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCiAJCS5lbmFibGVfYml0CT0gRU5fQ0tPVVRfQVJNLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiAJfSwKIAkuaWRsZWN0X3NoaWZ0CT0gMTIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzb3NzaV9jayA9IHsKIAkubmFtZQkJPSAiY2tfc29zc2kiLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxb3V0LmNsaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBDTE9DS19OT19JRExFX1BBUkVOVCB8Ci0JCQkgIEVOQUJMRV9SRUdfMzJCSVQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8xLAorCS5mbGFncwkJPSBDTE9DS19OT19JRExFX1BBUkVOVCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMSksCiAJLmVuYWJsZV9iaXQJPSAxNiwKIAkucmVjYWxjCQk9ICZvbWFwMV9zb3NzaV9yZWNhbGMsCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF9zb3NzaV9yYXRlLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYXJtX2NrID0gewogCS5uYW1lCQk9ICJhcm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IFJBVEVfQ0tDVEwgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJICBBTFdBWVNfRU5BQkxFRCwKIAkucmF0ZV9vZmZzZXQJPSBDS0NUTF9BUk1ESVZfT0ZGU0VULAogCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKKwkucm91bmRfcmF0ZQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybSwKKwkuc2V0X3JhdGUJPSBvbWFwMV9jbGtfc2V0X3JhdGVfY2tjdGxfYXJtLAogfTsKIAogc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJtcGVyX2NrID0gewogCS5jbGsgPSB7CiAJCS5uYW1lCQk9ICJhcm1wZXJfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkJLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCQkgIENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0NLQ1RMIHwKLQkJCQkgIENMT0NLX0lETEVfQ09OVFJPTCwKLQkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCiAJCS5lbmFibGVfYml0CT0gRU5fUEVSQ0ssCiAJCS5yYXRlX29mZnNldAk9IENLQ1RMX1BFUkRJVl9PRkZTRVQsCiAJCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKLQkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAorCQkucm91bmRfcmF0ZQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybSwKKwkJLnNldF9yYXRlCT0gb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybSwKIAl9LAogCS5pZGxlY3Rfc2hpZnQJPSAyLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYXJtX2dwaW9fY2sgPSB7CiAJLm5hbWUJCT0gImFybV9ncGlvX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCiAJLmVuYWJsZV9iaXQJPSBFTl9HUElPQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGFybXhvcl9jayA9IHsKIAkuY2xrID0gewogCQkubmFtZQkJPSAiYXJteG9yX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJCS5wYXJlbnQJCT0gJmNrX3JlZiwKLQkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lETEVfQ09OVFJPTCwKLQkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCiAJCS5lbmFibGVfYml0CT0gRU5fWE9SUENLLAogCQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiAJfSwKIAkuaWRsZWN0X3NoaWZ0CT0gMSwKIH07CkBAIC0yNTQsMTQgKzIzMiwxMiBAQAogc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJtdGltX2NrID0gewogCS5jbGsgPSB7CiAJCS5uYW1lCQk9ICJhcm10aW1fY2siLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkJLnBhcmVudAkJPSAmY2tfcmVmLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKIAkJLmVuYWJsZV9iaXQJPSBFTl9USU1DSywKIAkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogCX0sCiAJLmlkbGVjdF9zaGlmdAk9IDksCiB9OwpAQCAtMjY5LDIwMSArMjQ1LDE2NiBAQAogc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXJtd2R0X2NrID0gewogCS5jbGsgPSB7CiAJCS5uYW1lCQk9ICJhcm13ZHRfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkJLnBhcmVudAkJPSAmY2tfcmVmLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKIAkJLmVuYWJsZV9iaXQJPSBFTl9XRFRDSywKIAkJLnJlY2FsYwkJPSAmb21hcDFfd2F0Y2hkb2dfcmVjYWxjLAotCQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiAJfSwKIAkuaWRsZWN0X3NoaWZ0CT0gMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFybWludGhfY2sxNnh4ID0gewogCS5uYW1lCQk9ICJhcm1pbnRoX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZhcm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIAkvKiBOb3RlOiBPbiAxNnh4IHRoZSBmcmVxdWVuY3kgY2FuIGJlIGRpdmlkZWQgYnkgMiBieSBwcm9ncmFtbWluZwogCSAqIEFSTV9DS0NUTDpBUk1fSU5USENLX1NFTCgxNCkgdG8gMQogCSAqCiAJICogMTUxMCB2ZXJzaW9uIGlzIGluIFRDIGNsb2Nrcy4KIAkgKi8KLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9jayA9IHsKIAkubmFtZQkJPSAiZHNwX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDMxMCB8IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0NLQ1RMLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9DS0NUTCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0NLQ1RMKSwKIAkuZW5hYmxlX2JpdAk9IEVOX0RTUENLLAogCS5yYXRlX29mZnNldAk9IENLQ1RMX0RTUERJVl9PRkZTRVQsCiAJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAorCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAorCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkc3BtbXVfY2sgPSB7CiAJLm5hbWUJCT0gImRzcG1tdV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgUkFURV9DS0NUTCB8IEFMV0FZU19FTkFCTEVELAogCS5yYXRlX29mZnNldAk9IENLQ1RMX0RTUE1NVURJVl9PRkZTRVQsCiAJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAorCS5yb3VuZF9yYXRlCT0gb21hcDFfY2xrX3JvdW5kX3JhdGVfY2tjdGxfYXJtLAorCS5zZXRfcmF0ZQk9IG9tYXAxX2Nsa19zZXRfcmF0ZV9ja2N0bF9hcm0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkc3BwZXJfY2sgPSB7CiAJLm5hbWUJCT0gImRzcHBlcl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2RzcGNrLAogCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfQ0tDVEwgfCBWSVJUVUFMX0lPX0FERFJFU1MsCiAJLmVuYWJsZV9yZWcJPSBEU1BfSURMRUNUMiwKIAkuZW5hYmxlX2JpdAk9IEVOX1BFUkNLLAogCS5yYXRlX29mZnNldAk9IENLQ1RMX1BFUkRJVl9PRkZTRVQsCiAJLnJlY2FsYwkJPSAmb21hcDFfY2tjdGxfcmVjYWxjX2RzcF9kb21haW4sCisJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCiAJLnNldF9yYXRlCT0gJm9tYXAxX2Nsa19zZXRfcmF0ZV9kc3BfZG9tYWluLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZHNwX2RvbWFpbiwKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9kc3BfZG9tYWluLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNweG9yX2NrID0gewogCS5uYW1lCQk9ICJkc3B4b3JfY2siLAorCS5vcHMJCT0gJmNsa29wc19kc3BjaywKIAkucGFyZW50CQk9ICZja19yZWYsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzMTAgfCBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgVklSVFVBTF9JT19BRERSRVNTLAogCS5lbmFibGVfcmVnCT0gRFNQX0lETEVDVDIsCiAJLmVuYWJsZV9iaXQJPSBFTl9YT1JQQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzcHRpbV9jayA9IHsKIAkubmFtZQkJPSAiZHNwdGltX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZHNwY2ssCiAJLnBhcmVudAkJPSAmY2tfcmVmLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFZJUlRVQUxfSU9fQUREUkVTUywKIAkuZW5hYmxlX3JlZwk9IERTUF9JRExFQ1QyLAogCS5lbmFibGVfYml0CT0gRU5fRFNQVElNQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2RzcF9kb21haW4sCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZHNwX2RvbWFpbiwKIH07CiAKIC8qIFRpZSBBUk1fSURMRUNUMTpJRExJRl9BUk0gdG8gdGhpcyBsb2dpY2FsIGNsb2NrIHN0cnVjdHVyZSAqLwogc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgdGNfY2sgPSB7CiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gInRjX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJCS5wYXJlbnQJCT0gJmNrX2RwbGwxLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkJICBDTE9DS19JTl9PTUFQNzMwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8Ci0JCQkJICBSQVRFX0NLQ1RMIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQkgIEFMV0FZU19FTkFCTEVEIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAogCQkucmF0ZV9vZmZzZXQJPSBDS0NUTF9UQ0RJVl9PRkZTRVQsCiAJCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKLQkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAorCQkucm91bmRfcmF0ZQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybSwKKwkJLnNldF9yYXRlCT0gb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybSwKIAl9LAogCS5pZGxlY3Rfc2hpZnQJPSA2LAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYXJtaW50aF9jazE1MTAgPSB7CiAJLm5hbWUJCT0gImFybWludGhfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIAkvKiBOb3RlOiBPbiAxNTEwIHRoZSBmcmVxdWVuY3kgZm9sbG93cyBUQ19DSwogCSAqCiAJICogMTZ4eCB2ZXJzaW9uIGlzIGluIE1QVSBjbG9ja3MuCiAJICovCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB0aXBiX2NrID0gewogCS8qIE5vLWlkbGUgY29udHJvbGxlZCBieSAidGNfY2siICovCiAJLm5hbWUJCT0gInRpcGJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwKLQkJCSAgQUxXQVlTX0VOQUJMRUQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGwzX29jcGlfY2sgPSB7CiAJLyogTm8taWRsZSBjb250cm9sbGVkIGJ5ICJ0Y19jayIgKi8KIAkubmFtZQkJPSAibDNfb2NwaV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMywKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDMpLAogCS5lbmFibGVfYml0CT0gRU5fT0NQSV9DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdGMxX2NrID0gewogCS5uYW1lCQk9ICJ0YzFfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDMsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QzKSwKIAkuZW5hYmxlX2JpdAk9IEVOX1RDMV9DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdGMyX2NrID0gewogCS5uYW1lCQk9ICJ0YzJfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFgsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDMsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QzKSwKIAkuZW5hYmxlX2JpdAk9IEVOX1RDMl9DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZG1hX2NrID0gewogCS8qIE5vLWlkbGUgY29udHJvbGxlZCBieSAidGNfY2siICovCiAJLm5hbWUJCT0gImRtYV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAxNlhYIHwKLQkJCSAgQ0xPQ0tfSU5fT01BUDMxMCB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkbWFfbGNkZnJlZV9jayA9IHsKIAkubmFtZQkJPSAiZG1hX2xjZGZyZWVfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgYXBpX2NrID0gewogCS5jbGsgPSB7CiAJCS5uYW1lCQk9ICJhcGlfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSURMRV9DT05UUk9MLAotCQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkJLmZsYWdzCQk9IENMT0NLX0lETEVfQ09OVFJPTCwKKwkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKEFSTV9JRExFQ1QyKSwKIAkJLmVuYWJsZV9iaXQJPSBFTl9BUElDSywKIAkJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogCX0sCiAJLmlkbGVjdF9zaGlmdAk9IDgsCiB9OwpAQCAtNDcxLDI3NiArNDEyLDIzOCBAQAogc3RhdGljIHN0cnVjdCBhcm1faWRsZWN0MV9jbGsgbGJfY2sgPSB7CiAJLmNsayA9IHsKIAkJLm5hbWUJCT0gImxiX2NrIiwKKwkJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJCS5wYXJlbnQJCT0gJnRjX2NrLmNsaywKLQkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8Ci0JCQkJICBDTE9DS19JRExFX0NPTlRST0wsCi0JCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUFSTV9JRExFQ1QyLAorCQkuZmxhZ3MJCT0gQ0xPQ0tfSURMRV9DT05UUk9MLAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAogCQkuZW5hYmxlX2JpdAk9IEVOX0xCQ0ssCiAJCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIAl9LAogCS5pZGxlY3Rfc2hpZnQJPSA0LAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcmhlYTFfY2sgPSB7CiAJLm5hbWUJCT0gInJoZWExX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZ0Y19jay5jbGssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHJoZWEyX2NrID0gewogCS5uYW1lCQk9ICJyaGVhMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmdGNfY2suY2xrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8IEFMV0FZU19FTkFCTEVELAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBsY2RfY2tfMTZ4eCA9IHsKIAkubmFtZQkJPSAibGNkX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkucGFyZW50CQk9ICZja19kcGxsMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfCBDTE9DS19JTl9PTUFQNzMwIHwgUkFURV9DS0NUTCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilBUk1fSURMRUNUMiwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoQVJNX0lETEVDVDIpLAogCS5lbmFibGVfYml0CT0gRU5fTENEQ0ssCiAJLnJhdGVfb2Zmc2V0CT0gQ0tDVExfTENERElWX09GRlNFVCwKIAkucmVjYWxjCQk9ICZvbWFwMV9ja2N0bF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCisJLnJvdW5kX3JhdGUJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZV9ja2N0bF9hcm0sCisJLnNldF9yYXRlCT0gb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXJtX2lkbGVjdDFfY2xrIGxjZF9ja18xNTEwID0gewogCS5jbGsgPSB7CiAJCS5uYW1lCQk9ICJsY2RfY2siLAorCQkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkJLnBhcmVudAkJPSAmY2tfZHBsbDEsCi0JCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTUxMCB8IENMT0NLX0lOX09NQVAzMTAgfAotCQkJCSAgUkFURV9DS0NUTCB8IENMT0NLX0lETEVfQ09OVFJPTCwKLQkJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopQVJNX0lETEVDVDIsCisJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCisJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCiAJCS5lbmFibGVfYml0CT0gRU5fTENEQ0ssCiAJCS5yYXRlX29mZnNldAk9IENLQ1RMX0xDRERJVl9PRkZTRVQsCiAJCS5yZWNhbGMJCT0gJm9tYXAxX2NrY3RsX3JlY2FsYywKLQkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAorCQkucm91bmRfcmF0ZQk9IG9tYXAxX2Nsa19yb3VuZF9yYXRlX2NrY3RsX2FybSwKKwkJLnNldF9yYXRlCT0gb21hcDFfY2xrX3NldF9yYXRlX2NrY3RsX2FybSwKIAl9LAogCS5pZGxlY3Rfc2hpZnQJPSAzLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfMTUxMCA9IHsKIAkubmFtZQkJPSAidWFydDFfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwKLQkJCSAgRU5BQkxFX1JFR18zMkJJVCB8IEFMV0FZU19FTkFCTEVEIHwKLQkJCSAgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCiAJLmVuYWJsZV9iaXQJPSAyOSwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLwogCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfdWFydF9yYXRlLAogCS5yZWNhbGMJCT0gJm9tYXAxX3VhcnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCB1YXJ0X2NsayB1YXJ0MV8xNnh4ID0gewogCS5jbGsJPSB7CiAJCS5uYW1lCQk9ICJ1YXJ0MV9jayIsCisJCS5vcHMJCT0gJmNsa29wc191YXJ0LAogCQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLwogCQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8Ci0JCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCi0JCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwKKwkJCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKIAkJLmVuYWJsZV9iaXQJPSAyOSwKLQkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCi0JCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbCwKIAl9LAogCS5zeXNjX2FkZHIJPSAweGZmZmIwMDU0LAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLwogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgRU5BQkxFX1JFR18zMkJJVCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVEIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCiAJLmVuYWJsZV9iaXQJPSAzMCwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLwogCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfdWFydF9yYXRlLAogCS5yZWNhbGMJCT0gJm9tYXAxX3VhcnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfMTUxMCA9IHsKIAkubmFtZQkJPSAidWFydDNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMzEwIHwKLQkJCSAgRU5BQkxFX1JFR18zMkJJVCB8IEFMV0FZU19FTkFCTEVEIHwKLQkJCSAgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCi0JLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopTU9EX0NPTkZfQ1RSTF8wLAorCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCiAJLmVuYWJsZV9iaXQJPSAzMSwJLyogQ2hvb3NlcyBiZXR3ZWVuIDEyTUh6IGFuZCA0OE1IeiAqLwogCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZXRfdWFydF9yYXRlLAogCS5yZWNhbGMJCT0gJm9tYXAxX3VhcnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCB1YXJ0X2NsayB1YXJ0M18xNnh4ID0gewogCS5jbGsJPSB7CiAJCS5uYW1lCQk9ICJ1YXJ0M19jayIsCisJCS5vcHMJCT0gJmNsa29wc191YXJ0LAogCQkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyByZWFsIHBhcmVudCAqLwogCQkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCB8Ci0JCQkJICBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCi0JCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwKKwkJCQkgIENMT0NLX05PX0lETEVfUEFSRU5ULAorCQkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKIAkJLmVuYWJsZV9iaXQJPSAzMSwKLQkJLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV91YXJ0X2Z1bmN0aW9uYWwsCi0JCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX3VhcnRfZnVuY3Rpb25hbCwKIAl9LAogCS5zeXNjX2FkZHIJPSAweGZmZmI5ODU0LAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2Nsa28gPSB7CS8qIDYgTUh6IG91dHB1dCBvbiBXNF9VU0JfQ0xLTyAqLwogCS5uYW1lCQk9ICJ1c2JfY2xrbyIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCiAJLnJhdGUJCT0gNjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIENMT0NLX0lOX09NQVAzMTAgfCBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilVTFBEX0NMT0NLX0NUUkwsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhVTFBEX0NMT0NLX0NUUkwpLAogCS5lbmFibGVfYml0CT0gVVNCX01DTEtfRU5fQklULAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hoY19jazE1MTAgPSB7CiAJLm5hbWUJCT0gInVzYl9oaGNfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDQ4MDAwMDAwLCAvKiBBY3R1YWxseSAyIGNsb2NrcywgMTJNSHogYW5kIDQ4TUh6ICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8Ci0JCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCiAJLmVuYWJsZV9iaXQJPSBVU0JfSE9TVF9ISENfVUhPU1RfRU4sCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1c2JfaGhjX2NrMTZ4eCA9IHsKIAkubmFtZQkJPSAidXNiX2hoY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCiAJLnJhdGUJCT0gNDgwMDAwMDAsCiAJLyogT1RHX1NZU0NPTl8yLk9UR19QQURFTiA9PSAwIChub3QgMTUxMC1jb21wYXRpYmxlKSAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU9UR19CQVNFICsgMHgwOCAvKiBPVEdfU1lTQ09OXzIgKi8sCisJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhPVEdfQkFTRSArIDB4MDgpLCAvKiBPVEdfU1lTQ09OXzIgKi8KIAkuZW5hYmxlX2JpdAk9IDggLyogVUhPU1RfRU4gKi8sCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1c2JfZGNfY2sgPSB7CiAJLm5hbWUJCT0gInVzYl9kY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCiAJLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYIHwgUkFURV9GSVhFRCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilTT0ZUX1JFUV9SRUcsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNPRlRfUkVRX1JFRyksCiAJLmVuYWJsZV9iaXQJPSA0LAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNsa18xNTEwID0gewogCS5uYW1lCQk9ICJtY2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KIAkucmF0ZQkJPSAxMjAwMDAwMCwKLSAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8IFJBVEVfRklYRUQsCi0gCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKVNPRlRfUkVRX1JFRywKLSAJLmVuYWJsZV9iaXQJPSA2LAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTT0ZUX1JFUV9SRUcpLAorCS5lbmFibGVfYml0CT0gNiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jbGtfMTZ4eCA9IHsKIAkubmFtZQkJPSAibWNsayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNlhYLAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKUNPTV9DTEtfRElWX0NUUkxfU0VMLAorCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhDT01fQ0xLX0RJVl9DVFJMX1NFTCksCiAJLmVuYWJsZV9iaXQJPSBDT01fVUxQRF9QTExfQ0xLX1JFUSwKIAkuc2V0X3JhdGUJPSAmb21hcDFfc2V0X2V4dF9jbGtfcmF0ZSwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMV9yb3VuZF9leHRfY2xrX3JhdGUsCiAJLmluaXQJCT0gJm9tYXAxX2luaXRfZXh0X2NsaywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGJjbGtfMTUxMCA9IHsKIAkubmFtZQkJPSAiYmNsayIsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50LiBNYXkgYmUgZW5hYmxlZCBieSBleHQgaGFyZHdhcmUuICovCiAJLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDMxMCB8IFJBVEVfRklYRUQsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBiY2xrXzE2eHggPSB7CiAJLm5hbWUJCT0gImJjbGsiLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilTV0RfQ0xLX0RJVl9DVFJMX1NFTCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoU1dEX0NMS19ESVZfQ1RSTF9TRUwpLAogCS5lbmFibGVfYml0CT0gU1dEX1VMUERfUExMX0NMS19SRVEsCiAJLnNldF9yYXRlCT0gJm9tYXAxX3NldF9leHRfY2xrX3JhdGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDFfcm91bmRfZXh0X2Nsa19yYXRlLAogCS5pbml0CQk9ICZvbWFwMV9pbml0X2V4dF9jbGssCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWMxX2NrID0gewogCS5uYW1lCQk9ICJtbWNfY2siLAorCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLwogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfAotCQkJICBDTE9DS19OT19JRExFX1BBUkVOVCwKLQkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKilNT0RfQ09ORl9DVFJMXzAsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCiAJLmVuYWJsZV9iaXQJPSAyMywKLQkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCi0JLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfY2sgPSB7CiAJLm5hbWUJCT0gIm1tY19jayIsCiAJLmlkCQk9IDEsCisJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAotCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKU1PRF9DT05GX0NUUkxfMCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKIAkuZW5hYmxlX2JpdAk9IDIwLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdmlydHVhbF9ja19tcHUgPSB7CiAJLm5hbWUJCT0gIm1wdSIsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAxNTEwIHwgQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBDTE9DS19JTl9PTUFQMzEwIHwgVklSVFVBTF9DTE9DSyB8IEFMV0FZU19FTkFCTEVELAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmFybV9jaywgLyogSXMgc21hcnRlciBhbGlhcyBmb3IgKi8KIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogCS5zZXRfcmF0ZQk9ICZvbWFwMV9zZWxlY3RfdGFibGVfcmF0ZSwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMV9yb3VuZF90b190YWJsZV9yYXRlLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAogfTsKIAogLyogdmlydHVhbCBmdW5jdGlvbmFsIGNsb2NrIGRvbWFpbiBmb3IgSTJDLiBKdXN0IGZvciBtYWtpbmcgc3VyZSB0aGF0IEFSTVhPUl9DSwpAQCAtNzQ4LDc4ICs2NTEsMTkgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyY19mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAogCS5pZAkJPSAxLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzEwIHwgQ0xPQ0tfSU5fT01BUDE1MTAgfCBDTE9DS19JTl9PTUFQMTZYWCB8Ci0JCQkgIFZJUlRVQUxfQ0xPQ0sgfCBDTE9DS19OT19JRExFX1BBUkVOVCB8Ci0JCQkgIEFMV0FZU19FTkFCTEVELAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5mbGFncwkJPSBDTE9DS19OT19JRExFX1BBUkVOVCwKIAkucGFyZW50CQk9ICZhcm14b3JfY2suY2xrLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmVuYWJsZQkJPSAmb21hcDFfY2xrX2VuYWJsZV9nZW5lcmljLAotCS5kaXNhYmxlCT0gJm9tYXAxX2Nsa19kaXNhYmxlX2dlbmVyaWMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmNfaWNrID0gewogCS5uYW1lCQk9ICJpMmNfaWNrIiwKIAkuaWQJCT0gMSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDE2WFggfAotCQkJICBWSVJUVUFMX0NMT0NLIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQgfAotCQkJICBBTFdBWVNfRU5BQkxFRCwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5lbmFibGUJCT0gJm9tYXAxX2Nsa19lbmFibGVfZ2VuZXJpYywKLQkuZGlzYWJsZQk9ICZvbWFwMV9jbGtfZGlzYWJsZV9nZW5lcmljLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKiBvbmNoaXBfY2xrc1tdID0gewotCS8qIG5vbi1VTFBEIGNsb2NrcyAqLwotCSZja19yZWYsCi0JJmNrX2RwbGwxLAotCS8qIENLX0dFTjEgY2xvY2tzICovCi0JJmNrX2RwbGwxb3V0LmNsaywKLQkmc29zc2lfY2ssCi0JJmFybV9jaywKLQkmYXJtcGVyX2NrLmNsaywKLQkmYXJtX2dwaW9fY2ssCi0JJmFybXhvcl9jay5jbGssCi0JJmFybXRpbV9jay5jbGssCi0JJmFybXdkdF9jay5jbGssCi0JJmFybWludGhfY2sxNTEwLCAgJmFybWludGhfY2sxNnh4LAotCS8qIENLX0dFTjIgY2xvY2tzICovCi0JJmRzcF9jaywKLQkmZHNwbW11X2NrLAotCSZkc3BwZXJfY2ssCi0JJmRzcHhvcl9jaywKLQkmZHNwdGltX2NrLAotCS8qIENLX0dFTjMgY2xvY2tzICovCi0JJnRjX2NrLmNsaywKLQkmdGlwYl9jaywKLQkmbDNfb2NwaV9jaywKLQkmdGMxX2NrLAotCSZ0YzJfY2ssCi0JJmRtYV9jaywKLQkmZG1hX2xjZGZyZWVfY2ssCi0JJmFwaV9jay5jbGssCi0JJmxiX2NrLmNsaywKLQkmcmhlYTFfY2ssCi0JJnJoZWEyX2NrLAotCSZsY2RfY2tfMTZ4eCwKLQkmbGNkX2NrXzE1MTAuY2xrLAotCS8qIFVMUEQgY2xvY2tzICovCi0JJnVhcnQxXzE1MTAsCi0JJnVhcnQxXzE2eHguY2xrLAotCSZ1YXJ0Ml9jaywKLQkmdWFydDNfMTUxMCwKLQkmdWFydDNfMTZ4eC5jbGssCi0JJnVzYl9jbGtvLAotCSZ1c2JfaGhjX2NrMTUxMCwgJnVzYl9oaGNfY2sxNnh4LAotCSZ1c2JfZGNfY2ssCi0JJm1jbGtfMTUxMCwgICZtY2xrXzE2eHgsCi0JJmJjbGtfMTUxMCwgICZiY2xrXzE2eHgsCi0JJm1tYzFfY2ssCi0JJm1tYzJfY2ssCi0JLyogVmlydHVhbCBjbG9ja3MgKi8KLQkmdmlydHVhbF9ja19tcHUsCi0JJmkyY19mY2ssCi0JJmkyY19pY2ssCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggYmE1ZDdjMC4uYmJiYWViMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKQEAgLTg2LDcgKzg2LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1ib3hfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtYWlsYm94IiwKKwkubmFtZQkJPSAib21hcDEtbWFpbGJveCIsCiAJLmlkCQk9IC0xLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtYm94X3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gbWJveF9yZXNvdXJjZXMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lkLmMKaW5kZXggODliYjg3NS4uNGVmMjZmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaWQuYwpAQCAtMzgsNiArMzgsNyBAQAogCXsgLmp0YWdfaWQgPSAweGI1NzQsIC5kaWVfcmV2ID0gMHgyLCAub21hcF9pZCA9IDB4MDMzMTAzMTUsIC50eXBlID0gMHgwMzEwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4MzU1ZiwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMyMDAwMCwgLnR5cGUgPSAweDA3MzAwMTAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNTVmLCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MDczMDAzMDB9LAorCXsgLmp0YWdfaWQgPSAweGI1NWYsIC5kaWVfcmV2ID0gMHgwLCAub21hcF9pZCA9IDB4MDMzMjA1MDAsIC50eXBlID0gMHgwODUwMDAwMH0sCiAJeyAuanRhZ19pZCA9IDB4YjQ3MCwgLmRpZV9yZXYgPSAweDAsIC5vbWFwX2lkID0gMHgwMzMxMDEwMCwgLnR5cGUgPSAweDE1MTAwMDAwfSwKIAl7IC5qdGFnX2lkID0gMHhiNTc2LCAuZGllX3JldiA9IDB4MCwgLm9tYXBfaWQgPSAweDAzMzIwMDAwLCAudHlwZSA9IDB4MTYxMDAwMDB9LAogCXsgLmp0YWdfaWQgPSAweGI1NzYsIC5kaWVfcmV2ID0gMHgyLCAub21hcF9pZCA9IDB4MDMzMjAxMDAsIC50eXBlID0gMHgxNjExMDAwMH0sCkBAIC03Nyw3ICs3OCw3IEBACiAJcHJvZF9pZCA9IG9tYXBfcmVhZGwoT01BUF9QUk9EVUNUSU9OX0lEXzEpOwogCW9tYXBfaWQgPSBvbWFwX3JlYWRsKE9NQVAzMl9JRF8xKTsKIAotCS8qIENoZWNrIGZvciB1bnVzYWJsZSBPTUFQX1BST0RVQ1RJT05fSURfMSBvbiAxNjExQi81OTEyIGFuZCA3MzAgKi8KKwkvKiBDaGVjayBmb3IgdW51c2FibGUgT01BUF9QUk9EVUNUSU9OX0lEXzEgb24gMTYxMUIvNTkxMiBhbmQgNzMwLzg1MCAqLwogCWlmICgoKHByb2RfaWQgPj4gMjApID09IDApIHx8IChwcm9kX2lkID09IG9tYXBfaWQpKQogCQlwcm9kX2lkID0gMDsKIAllbHNlCkBAIC0xNzgsNiArMTc5LDcgQEAKIAogCXN3aXRjaCAoY3B1X3R5cGUpIHsKIAljYXNlIDB4MDc6CisJY2FzZSAweDA4OgogCQlvbWFwX3JldmlzaW9uIHw9IDB4MDc7CiAJCWJyZWFrOwogCWNhc2UgMHgwMzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW8uYwppbmRleCA0YzNlNTgyLi4zYWZlNTQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pby5jCkBAIC01Miw2ICs1MiwyMiBAQAogfTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBvbWFwODUwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBPTUFQODUwX0RTUF9CQVNFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDg1MF9EU1BfU1RBUlQpLAorCQkubGVuZ3RoCQk9IE9NQVA4NTBfRFNQX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sIHsKKwkJLnZpcnR1YWwJPSBPTUFQODUwX0RTUFJFR19CQVNFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDg1MF9EU1BSRUdfU1RBUlQpLAorCQkubGVuZ3RoCQk9IE9NQVA4NTBfRFNQUkVHX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0KK307CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAxNTEwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKQEAgLTEwOSw2ICsxMjUsMTMgQEAKIAkJaW90YWJsZV9pbml0KG9tYXA3MzBfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwNzMwX2lvX2Rlc2MpKTsKIAl9CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwlpZiAoY3B1X2lzX29tYXA4NTAoKSkgeworCQlpb3RhYmxlX2luaXQob21hcDg1MF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXA4NTBfaW9fZGVzYykpOworCX0KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJaW90YWJsZV9pbml0KG9tYXAxNTEwX2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDE1MTBfaW9fZGVzYykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKaW5kZXggOWFkNTE5Ny4uZGUwM2M4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCkBAIC0xNDUsNiArMTQ1LDE0IEBACiB9OwogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCitzdGF0aWMgc3RydWN0IG9tYXBfaXJxX2Jhbmsgb21hcDg1MF9pcnFfYmFua3NbXSA9IHsKKwl7IC5iYXNlX3JlZyA9IE9NQVBfSUgxX0JBU0UsCQkudHJpZ2dlcl9tYXAgPSAweGIzZjhlMjJmIH0sCisJeyAuYmFzZV9yZWcgPSBPTUFQX0lIMl9CQVNFLAkJLnRyaWdnZXJfbWFwID0gMHhmZGI5YzFmMiB9LAorCXsgLmJhc2VfcmVnID0gT01BUF9JSDJfQkFTRSArIDB4MTAwLAkudHJpZ2dlcl9tYXAgPSAweDgwMDA0MGYzIH0sCit9OworI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTVYWAogc3RhdGljIHN0cnVjdCBvbWFwX2lycV9iYW5rIG9tYXAxNTEwX2lycV9iYW5rc1tdID0gewogCXsgLmJhc2VfcmVnID0gT01BUF9JSDFfQkFTRSwJCS50cmlnZ2VyX21hcCA9IDB4YjNmZWJmZmYgfSwKQEAgLTE4NCw2ICsxOTIsMTIgQEAKIAkJaXJxX2JhbmtfY291bnQgPSBBUlJBWV9TSVpFKG9tYXA3MzBfaXJxX2JhbmtzKTsKIAl9CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJaWYgKGNwdV9pc19vbWFwODUwKCkpIHsKKwkJaXJxX2JhbmtzID0gb21hcDg1MF9pcnFfYmFua3M7CisJCWlycV9iYW5rX2NvdW50ID0gQVJSQVlfU0laRShvbWFwODUwX2lycV9iYW5rcyk7CisJfQorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKIAkJaXJxX2JhbmtzID0gb21hcDE1MTBfaXJxX2JhbmtzOwpAQCAtMjE0LDkgKzIyOCw4IEBACiAJaXJxX2Jhbmtfd3JpdGVsKDB4MDMsIDEsIElSUV9DT05UUk9MX1JFR19PRkZTRVQpOwogCiAJLyogRW5hYmxlIGludGVycnVwdHMgaW4gZ2xvYmFsIG1hc2sgKi8KLQlpZiAoY3B1X2lzX29tYXA3MzAoKSkgeworCWlmIChjcHVfaXNfb21hcDd4eCgpKQogCQlpcnFfYmFua193cml0ZWwoMHgwLCAwLCBJUlFfR01SX1JFR19PRkZTRVQpOwotCX0KIAogCS8qIEluc3RhbGwgdGhlIGludGVycnVwdCBoYW5kbGVycyBmb3IgZWFjaCBiYW5rICovCiAJZm9yIChpID0gMDsgaSA8IGlycV9iYW5rX2NvdW50OyBpKyspIHsKQEAgLTIzNiw2ICsyNDksOCBAQAogCiAJaWYgKGNwdV9pc19vbWFwNzMwKCkpCiAJCW9tYXBfdW5tYXNrX2lycShJTlRfNzMwX0lIMl9JUlEpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwODUwKCkpCisJCW9tYXBfdW5tYXNrX2lycShJTlRfODUwX0lIMl9JUlEpOwogCWVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQlvbWFwX3VubWFza19pcnEoSU5UXzE1MTBfSUgyX0lSUSk7CiAJZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWFpbGJveC5jCmluZGV4IDU5YWJiZjMuLjBhZjRkNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbWFpbGJveC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvbWFpbGJveC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIE1haWxib3ggcmVzZXJ2YXRpb24gbW9kdWxlcyBmb3IgRFNQCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICogV3JpdHRlbiBieTogSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPgogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIE1BSUxCT1hfRFNQMkFSTTFfRmxhZwkJMHgxYwogI2RlZmluZSBNQUlMQk9YX0RTUDJBUk0yX0ZsYWcJCTB4MjAKIAotdW5zaWduZWQgbG9uZyBtYm94X2Jhc2U7CitzdGF0aWMgdm9pZCBfX2lvbWVtICptYm94X2Jhc2U7CiAKIHN0cnVjdCBvbWFwX21ib3gxX2ZpZm8gewogCXVuc2lnbmVkIGxvbmcgY21kOwpAQCAtNDAsMTQgKzQwLDE0IEBACiAJc3RydWN0IG9tYXBfbWJveDFfZmlmbyByeF9maWZvOwogfTsKIAotc3RhdGljIGlubGluZSBpbnQgbWJveF9yZWFkX3JlZyh1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGlubGluZSBpbnQgbWJveF9yZWFkX3JlZyhzaXplX3Qgb2ZzKQogewotCXJldHVybiBfX3Jhd19yZWFkdyhtYm94X2Jhc2UgKyByZWcpOworCXJldHVybiBfX3Jhd19yZWFkdyhtYm94X2Jhc2UgKyBvZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWJveF93cml0ZV9yZWcodW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3dyaXRlX3JlZyh1MzIgdmFsLCBzaXplX3Qgb2ZzKQogewotCV9fcmF3X3dyaXRldyh2YWwsIG1ib3hfYmFzZSArIHJlZyk7CisJX19yYXdfd3JpdGV3KHZhbCwgbWJveF9iYXNlICsgb2ZzKTsKIH0KIAogLyogbXNnICovCkBAIC0xNDMsNyArMTQzLDcgQEAKIH07CiBFWFBPUlRfU1lNQk9MKG1ib3hfZHNwX2luZm8pOwogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9tYm94X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwMV9tYm94X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldCA9IDA7CkBAIC0xNzAsMTIgKzE3MCwxMCBAQAogCX0KIAltYm94X2RzcF9pbmZvLmlycSA9IHJlcy0+c3RhcnQ7CiAKLQlyZXQgPSBvbWFwX21ib3hfcmVnaXN0ZXIoJm1ib3hfZHNwX2luZm8pOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gb21hcF9tYm94X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZtYm94X2RzcF9pbmZvKTsKIH0KIAotc3RhdGljIGludCBvbWFwMV9tYm94X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgb21hcDFfbWJveF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlvbWFwX21ib3hfdW5yZWdpc3RlcigmbWJveF9kc3BfaW5mbyk7CiAKQEAgLTE4NCw5ICsxODIsOSBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwMV9tYm94X2RyaXZlciA9IHsKIAkucHJvYmUJPSBvbWFwMV9tYm94X3Byb2JlLAotCS5yZW1vdmUJPSBvbWFwMV9tYm94X3JlbW92ZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3Aob21hcDFfbWJveF9yZW1vdmUpLAogCS5kcml2ZXIJPSB7Ci0JCS5uYW1lCT0gIm1haWxib3giLAorCQkubmFtZQk9ICJvbWFwMS1tYWlsYm94IiwKIAl9LAogfTsKIApAQCAtMjAzLDQgKzIwMSw3IEBACiBtb2R1bGVfaW5pdChvbWFwMV9tYm94X2luaXQpOwogbW9kdWxlX2V4aXQob21hcDFfbWJveF9leGl0KTsKIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJvbWFwIG1haWxib3g6IG9tYXAxIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmdW5jdGlvbnMiKTsKK01PRFVMRV9BVVRIT1IoIkhpcm9zaGkgRE9ZVSIgPEhpcm9zaGkuRE9ZVUBub2tpYS5jb20+KTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06b21hcDEtbWFpbGJveCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jCmluZGV4IDU3NWJhMzEuLmQwNDBjM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMKQEAgLTI4LDkgKzI4LDkgQEAKICNkZWZpbmUgRFBTX1JTVENUMl9QRVJfRU4JKDEgPDwgMCkKICNkZWZpbmUgRFNQX1JTVENUMl9XRF9QRVJfRU4JKDEgPDwgMSkKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCi1jb25zdCBjaGFyICpjbGtfbmFtZXNbXSA9IHsgImRzcF9jayIsICJhcGlfY2siLCAiZHNweG9yX2NrIiB9OwotI2VuZGlmCitzdGF0aWMgaW50IGRzcF91c2U7CitzdGF0aWMgc3RydWN0IGNsayAqYXBpX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICpkc3BfY2xrOwogCiBzdGF0aWMgdm9pZCBvbWFwMV9tY2JzcF9yZXF1ZXN0KHVuc2lnbmVkIGludCBpZCkKIHsKQEAgLTM5LDIwICszOSw0MCBAQAogCSAqIGFyZSBEU1AgcHVibGljIHBlcmlwaGVyYWxzLgogCSAqLwogCWlmIChpZCA9PSBPTUFQX01DQlNQMSB8fCBpZCA9PSBPTUFQX01DQlNQMykgewotCQlvbWFwX2RzcF9yZXF1ZXN0X21lbSgpOwotCQkvKgotCQkgKiBEU1AgZXh0ZXJuYWwgcGVyaXBoZXJhbCByZXNldAotCQkgKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8gZHNwIGNvZGUKLQkJICovCi0JCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhEU1BfUlNUQ1QyKSB8IERQU19SU1RDVDJfUEVSX0VOIHwKLQkJCQlEU1BfUlNUQ1QyX1dEX1BFUl9FTiwgRFNQX1JTVENUMik7CisJCWlmIChkc3BfdXNlKysgPT0gMCkgeworCQkJYXBpX2NsayA9IGNsa19nZXQoTlVMTCwgImFwaV9jbGsiKTsKKwkJCWRzcF9jbGsgPSBjbGtfZ2V0KE5VTEwsICJkc3BfY2xrIik7CisJCQlpZiAoIUlTX0VSUihhcGlfY2xrKSAmJiAhSVNfRVJSKGRzcF9jbGspKSB7CisJCQkJY2xrX2VuYWJsZShhcGlfY2xrKTsKKwkJCQljbGtfZW5hYmxlKGRzcF9jbGspOworCisJCQkJb21hcF9kc3BfcmVxdWVzdF9tZW0oKTsKKwkJCQkvKgorCQkJCSAqIERTUCBleHRlcm5hbCBwZXJpcGhlcmFsIHJlc2V0CisJCQkJICogRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIGRzcCBjb2RlCisJCQkJICovCisJCQkJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KERTUF9SU1RDVDIpIHwgRFBTX1JTVENUMl9QRVJfRU4gfAorCQkJCQkJRFNQX1JTVENUMl9XRF9QRVJfRU4sIERTUF9SU1RDVDIpOworCQkJfQorCQl9CiAJfQogfQogCiBzdGF0aWMgdm9pZCBvbWFwMV9tY2JzcF9mcmVlKHVuc2lnbmVkIGludCBpZCkKIHsKLQlpZiAoaWQgPT0gT01BUF9NQ0JTUDEgfHwgaWQgPT0gT01BUF9NQ0JTUDMpCi0JCW9tYXBfZHNwX3JlbGVhc2VfbWVtKCk7CisJaWYgKGlkID09IE9NQVBfTUNCU1AxIHx8IGlkID09IE9NQVBfTUNCU1AzKSB7CisJCWlmICgtLWRzcF91c2UgPT0gMCkgeworCQkJb21hcF9kc3BfcmVsZWFzZV9tZW0oKTsKKwkJCWlmICghSVNfRVJSKGFwaV9jbGspKSB7CisJCQkJY2xrX2Rpc2FibGUoYXBpX2Nsayk7CisJCQkJY2xrX3B1dChhcGlfY2xrKTsKKwkJCX0KKwkJCWlmICghSVNfRVJSKGRzcF9jbGspKSB7CisJCQkJY2xrX2Rpc2FibGUoZHNwX2Nsayk7CisJCQkJY2xrX3B1dChkc3BfY2xrKTsKKwkJCX0KKwkJfQorCX0KIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX21jYnNwX29wcyBvbWFwMV9tY2JzcF9vcHMgPSB7CkBAIC05NCw4ICsxMTQsNiBAQAogCQkucnhfaXJxCQk9IElOVF9NY0JTUDFSWCwKIAkJLnR4X2lycQkJPSBJTlRfTWNCU1AxVFgsCiAJCS5vcHMJCT0gJm9tYXAxX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMywKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAxNTEwX01DQlNQMl9CQVNFLApAQCAtMTEyLDggKzEzMCw2IEBACiAJCS5yeF9pcnEJCT0gSU5UX01jQlNQM1JYLAogCQkudHhfaXJxCQk9IElOVF9NY0JTUDNUWCwKIAkJLm9wcwkJPSAmb21hcDFfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAzLAogCX0sCiB9OwogI2RlZmluZSBPTUFQMTVYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMTV4eF9tY2JzcF9wZGF0YSkKQEAgLTEzMSw4ICsxNDcsNiBAQAogCQkucnhfaXJxCQk9IElOVF9NY0JTUDFSWCwKIAkJLnR4X2lycQkJPSBJTlRfTWNCU1AxVFgsCiAJCS5vcHMJCT0gJm9tYXAxX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMywKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAxNjEwX01DQlNQMl9CQVNFLApAQCAtMTQ5LDggKzE2Myw2IEBACiAJCS5yeF9pcnEJCT0gSU5UX01jQlNQM1JYLAogCQkudHhfaXJxCQk9IElOVF9NY0JTUDNUWCwKIAkJLm9wcwkJPSAmb21hcDFfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAzLAogCX0sCiB9OwogI2RlZmluZSBPTUFQMTZYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMTZ4eF9tY2JzcF9wZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCmluZGV4IDA2MmM5MDUuLjcyMWUwZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYwpAQCAtNTgsNiArNTgsMjUgQEAKICNkZWZpbmUgT01BUDczMF9QSU5TX1NaCQkwCiAjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDczMCAqLwogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorc3RydWN0IHBpbl9jb25maWcgX19pbml0ZGF0YV9vcl9tb2R1bGUgb21hcDg1MF9waW5zW10gPSB7CitNVVhfQ0ZHXzg1MCgiRTJfODUwX0tCUjAiLCAgICAgICAgMTIsICAgMjEsICAgIDAsICAgMjAsICAgMSwgMCkKK01VWF9DRkdfODUwKCJKN184NTBfS0JSMSIsICAgICAgICAxMiwgICAyNSwgICAgMCwgICAyNCwgICAxLCAwKQorTVVYX0NGR184NTAoIkUxXzg1MF9LQlIyIiwgICAgICAgIDEyLCAgIDI5LCAgICAwLCAgIDI4LCAgIDEsIDApCitNVVhfQ0ZHXzg1MCgiRjNfODUwX0tCUjMiLCAgICAgICAgMTMsICAgIDEsICAgIDAsICAgIDAsICAgMSwgMCkKK01VWF9DRkdfODUwKCJEMl84NTBfS0JSNCIsICAgICAgICAxMywgICAgNSwgICAgMCwgICAgNCwgICAxLCAwKQorTVVYX0NGR184NTAoIkMyXzg1MF9LQkMwIiwgICAgICAgIDEzLCAgICA5LCAgICAwLCAgICA4LCAgIDEsIDApCitNVVhfQ0ZHXzg1MCgiRDNfODUwX0tCQzEiLCAgICAgICAgMTMsICAgMTMsICAgIDAsICAgMTIsICAgMSwgMCkKK01VWF9DRkdfODUwKCJFNF84NTBfS0JDMiIsICAgICAgICAxMywgICAxNywgICAgMCwgICAxNiwgICAxLCAwKQorTVVYX0NGR184NTAoIkY0Xzg1MF9LQkMzIiwgICAgICAgIDEzLCAgIDIxLCAgICAwLCAgIDIwLCAgIDEsIDApCitNVVhfQ0ZHXzg1MCgiRTNfODUwX0tCQzQiLCAgICAgICAgMTMsICAgMjUsICAgIDAsICAgMjQsICAgMSwgMCkKKworTVVYX0NGR184NTAoIkFBMTdfODUwX1VTQl9ETSIsICAgICAyLCAgIDIxLCAgICAwLCAgIDIwLCAgIDAsIDApCitNVVhfQ0ZHXzg1MCgiVzE2Xzg1MF9VU0JfUFVfRU4iLCAgIDIsICAgMjUsICAgIDAsICAgMjQsICAgMCwgMCkKK01VWF9DRkdfODUwKCJXMTdfODUwX1VTQl9WQlVTSSIsICAgMiwgICAyOSwgICAgMCwgICAyOCwgICAwLCAwKQorfTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkKIHN0YXRpYyBzdHJ1Y3QgcGluX2NvbmZpZyBfX2luaXRkYXRhX29yX21vZHVsZSBvbWFwMXh4eF9waW5zW10gPSB7CiAvKgpAQCAtNDE5LDYgKzQzOCwxMSBAQAogCQkJcHJpbnRrKCIgICAgICAlcyAoMHglMDh4KSA9IDB4JTA4eCAtPiAweCUwOHhcbiIsCiAJCQkgICAgICAgY2ZnLT5wdWxsX25hbWUsIGNmZy0+cHVsbF9yZWcsIHB1bGxfb3JpZywgcHVsbCk7CiAJfQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCW9tYXBfbXV4X3JlZ2lzdGVyKG9tYXA4NTBfcGlucywgQVJSQVlfU0laRShvbWFwODUwX3BpbnMpKTsKKyNlbmRpZgorCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19PTUFQX01VWF9FUlJPUlMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCmluZGV4IDAwMDIwODQuLjg0MjA5MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYwpAQCAtMTIxLDYgKzEyMSwxMyBAQAogCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVsxXS5pcnEgPSBJTlRfNzMwX1VBUlRfTU9ERU1fSVJEQV8yOwogCX0KIAorCWlmIChjcHVfaXNfb21hcDg1MCgpKSB7CisJCXNlcmlhbF9wbGF0Zm9ybV9kYXRhWzBdLnJlZ3NoaWZ0ID0gMDsKKwkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMV0ucmVnc2hpZnQgPSAwOworCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVswXS5pcnEgPSBJTlRfODUwX1VBUlRfTU9ERU1fMTsKKwkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMV0uaXJxID0gSU5UXzg1MF9VQVJUX01PREVNX0lSREFfMjsKKwl9CisKIAlpZiAoY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJc2VyaWFsX3BsYXRmb3JtX2RhdGFbMF0udWFydGNsayA9IE9NQVAxNTEwX0JBU0VfQkFVRCAqIDE2OwogCQlzZXJpYWxfcGxhdGZvcm1fZGF0YVsxXS51YXJ0Y2xrID0gT01BUDE1MTBfQkFTRV9CQVVEICogMTY7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggMzc1NGI3OS4uNjRhYjM4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtNTgsNCArNTgsMTIgQEAKIAogY29uZmlnIE1BQ0hfT01BUDNfUEFORE9SQQogCWJvb2wgIk9NQVAzIFBhbmRvcmEiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKworY29uZmlnIE1BQ0hfT01BUF8zNDMwU0RQCisJYm9vbCAiT01BUCAzNDMwIFNEUCBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCitjb25maWcgTUFDSF9OT0tJQV9SWDUxCisJYm9vbCAiTm9raWEgUlgtNTEgYm9hcmQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCmluZGV4IGJiZDEyYmMuLmEyYzNmY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKICMKIAogIyBDb21tb24gc3VwcG9ydAotb2JqLXkgOj0gaXJxLm8gaWQubyBpby5vIG1lbW9yeS5vIGNvbnRyb2wubyBwcmNtLm8gY2xvY2subyBtdXgubyBcCitvYmoteSA6PSBpcnEubyBpZC5vIGlvLm8gc2RyYy5vIGNvbnRyb2wubyBwcmNtLm8gY2xvY2subyBtdXgubyBcCiAJCWRldmljZXMubyBzZXJpYWwubyBncG1jLm8gdGltZXItZ3AubyBwb3dlcmRvbWFpbi5vIFwKIAkJY2xvY2tkb21haW4ubwogCkBAIC0xNCw2ICsxNCwxMCBAQAogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0MzApCQkrPSBzcmFtMjQzeC5vCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IHNyYW0zNHh4Lm8KIAorIyBTTVMvU0RSQworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBzZHJjMnh4eC5vCisjIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gc2RyYzN4eHgubworCiAjIFBvd2VyIE1hbmFnZW1lbnQKIGlmZXEgKCQoQ09ORklHX1BNKSx5KQogb2JqLXkJCQkJCSs9IHBtLm8KQEAgLTM4LDQgKzQyLDEyIEBACiAJCQkJCSAgIG1tYy10d2w0MDMwLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVAzX1BBTkRPUkEpCSs9IGJvYXJkLW9tYXAzcGFuZG9yYS5vIFwKIAkJCQkJICAgbW1jLXR3bDQwMzAubworb2JqLSQoQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQKQkJKz0gYm9hcmQtMzQzMHNkcC5vIFwKKwkJCQkJICAgbW1jLXR3bDQwMzAubwogCitvYmotJChDT05GSUdfTUFDSF9OT0tJQV9SWDUxKQkJKz0gYm9hcmQtcng1MS5vIFwKKwkJCQkJICAgYm9hcmQtcng1MS1wZXJpcGhlcmFscy5vIFwKKyMgUGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIGluaXQgY29kZQoraWZlcSAoJChDT05GSUdfVVNCX01VU0JfU09DKSx5KQorb2JqLXkJCQkJCSs9IHVzYi1tdXNiLm8KK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCmluZGV4IDgzZmEzNzIuLjIyMTQzNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMjQzMHNkcC5jCkBAIC0zNSwxMiArMzUsMTYgQEAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3VzYi5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIAorI2RlZmluZSBTRFAyNDMwX0NTMF9CQVNFCTB4MDQwMDAwMDAKICNkZWZpbmUJU0RQMjQzMF9GTEFTSF9DUwkwCiAjZGVmaW5lCVNEUDI0MzBfU01DOTFYX0NTCTUKIAorI2RlZmluZSBTRFAyNDMwX0VUSFJfR1BJT19JUlEJCTE0OQorCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2RwMjQzMF9wYXJ0aXRpb25zW10gPSB7CiAJLyogYm9vdGxvYWRlciAoVS1Cb290LCBldGMpIGluIGZpcnN0IHNlY3RvciAqLwogCXsKQEAgLTEwMiw4ICsxMDYsOCBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CT0gT01BUF9HUElPX0lSUShPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKSwKLQkJLmVuZAk9IE9NQVBfR1BJT19JUlEoT01BUDI0WFhfRVRIUl9HUElPX0lSUSksCisJCS5zdGFydAk9IE9NQVBfR1BJT19JUlEoU0RQMjQzMF9FVEhSX0dQSU9fSVJRKSwKKwkJLmVuZAk9IE9NQVBfR1BJT19JUlEoU0RQMjQzMF9FVEhSX0dQSU9fSVJRKSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKIAl9LAogfTsKQEAgLTE3MCwxMyArMTc0LDEzIEBACiAJc2RwMjQzMF9zbWM5MXhfcmVzb3VyY2VzWzBdLmVuZCA9IGNzX21lbV9iYXNlICsgMHgzMGY7CiAJdWRlbGF5KDEwMCk7CiAKLQlpZiAoZ3Bpb19yZXF1ZXN0KE9NQVAyNFhYX0VUSFJfR1BJT19JUlEsICJTTUM5MXggaXJxIikgPCAwKSB7CisJaWYgKGdwaW9fcmVxdWVzdChTRFAyNDMwX0VUSFJfR1BJT19JUlEsICJTTUM5MXggaXJxIikgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyVkIGZvciBzbWM5MXggSVJRXG4iLAotCQkJT01BUDI0WFhfRVRIUl9HUElPX0lSUSk7CisJCQlTRFAyNDMwX0VUSFJfR1BJT19JUlEpOwogCQlncG1jX2NzX2ZyZWUoZXRoX2NzKTsKIAkJZ290byBvdXQ7CiAJfQotCWdwaW9fZGlyZWN0aW9uX2lucHV0KE9NQVAyNFhYX0VUSFJfR1BJT19JUlEpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNEUDI0MzBfRVRIUl9HUElPX0lSUSk7CiAKIG91dDoKIAljbGtfZGlzYWJsZShncG1jX2Zjayk7CkBAIC0xODUsNyArMTg5LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMjQzMHNkcF9pbml0X2lycSh2b2lkKQogewotCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwogCW9tYXBfZ3Bpb19pbml0KCk7CiAJc2RwMjQzMF9pbml0X3NtYzkxeCgpOwpAQCAtMjUxLDYgKzI1NSw3IEBACiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwMjQzMF9jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJdXNiX211c2JfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8yNDMwc2RwX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDkyNzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNDMwc2RwLmMKQEAgLTAsMCArMSw1NDIgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIE1vZGlmaWVkIGZyb20gbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKKyAqCisgKiBJbml0aWFsIGNvZGU6IFN5ZWQgTW9oYW1tZWQgS2hhc2ltCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvdHdsNDAzMC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CisjaW5jbHVkZSA8bWFjaC9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CisjaW5jbHVkZSA8bWFjaC91c2IuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxtYWNoL2tleXBhZC5oPgorCisjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKworI2RlZmluZSBDT05GSUdfRElTQUJMRV9IRkNMSyAxCisKKyNkZWZpbmUgU0RQMzQzMF9FVEhSX0dQSU9fSVJRX1NEUFYxCTI5CisjZGVmaW5lIFNEUDM0MzBfRVRIUl9HUElPX0lSUV9TRFBWMgk2CisjZGVmaW5lIFNEUDM0MzBfU01DOTFYX0NTCQkzCisKKyNkZWZpbmUgU0RQMzQzMF9UU19HUElPX0lSUV9TRFBWMQkzCisjZGVmaW5lIFNEUDM0MzBfVFNfR1BJT19JUlFfU0RQVjIJMgorCisjZGVmaW5lIEVOQUJMRV9WQVVYM19ERURJQ0FURUQJMHgwMworI2RlZmluZSBFTkFCTEVfVkFVWDNfREVWX0dSUAkweDIwCisKKyNkZWZpbmUgVFdMNDAzMF9NU0VDVVJFX0dQSU8gMjIKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzZHAzNDMwX3NtYzkxeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAwLAorCQkuZW5kCT0gMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2RwMzQzMF9zbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2RwMzQzMF9zbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzZHAzNDMwX3NtYzkxeF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW50IHNkcDM0MzBfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9MRUZUKSwKKwlLRVkoMCwgMSwgS0VZX1JJR0hUKSwKKwlLRVkoMCwgMiwgS0VZX0EpLAorCUtFWSgwLCAzLCBLRVlfQiksCisJS0VZKDAsIDQsIEtFWV9DKSwKKwlLRVkoMSwgMCwgS0VZX0RPV04pLAorCUtFWSgxLCAxLCBLRVlfVVApLAorCUtFWSgxLCAyLCBLRVlfRSksCisJS0VZKDEsIDMsIEtFWV9GKSwKKwlLRVkoMSwgNCwgS0VZX0cpLAorCUtFWSgyLCAwLCBLRVlfRU5URVIpLAorCUtFWSgyLCAxLCBLRVlfSSksCisJS0VZKDIsIDIsIEtFWV9KKSwKKwlLRVkoMiwgMywgS0VZX0spLAorCUtFWSgyLCA0LCBLRVlfMyksCisJS0VZKDMsIDAsIEtFWV9NKSwKKwlLRVkoMywgMSwgS0VZX04pLAorCUtFWSgzLCAyLCBLRVlfTyksCisJS0VZKDMsIDMsIEtFWV9QKSwKKwlLRVkoMywgNCwgS0VZX1EpLAorCUtFWSg0LCAwLCBLRVlfUiksCisJS0VZKDQsIDEsIEtFWV80KSwKKwlLRVkoNCwgMiwgS0VZX1QpLAorCUtFWSg0LCAzLCBLRVlfVSksCisJS0VZKDQsIDQsIEtFWV9EKSwKKwlLRVkoNSwgMCwgS0VZX1YpLAorCUtFWSg1LCAxLCBLRVlfVyksCisJS0VZKDUsIDIsIEtFWV9MKSwKKwlLRVkoNSwgMywgS0VZX1MpLAorCUtFWSg1LCA0LCBLRVlfSCksCisJMAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIHNkcDM0MzBfa3BfZGF0YSA9IHsKKwkucm93cwkJPSA1LAorCS5jb2xzCQk9IDYsCisJLmtleW1hcAkJPSBzZHAzNDMwX2tleW1hcCwKKwkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUoc2RwMzQzMF9rZXltYXApLAorCS5yZXAJCT0gMSwKK307CisKK3N0YXRpYyBpbnQgdHNfZ3BpbzsJLyogTmVlZGVkIGZvciBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlICovCisKKy8qKgorICogQGJyaWVmIGFkczc4NDZfZGV2X2luaXQgOiBSZXF1ZXN0cyAmIHNldHMgR1BJTyBsaW5lIGZvciBwZW4taXJxCisgKgorICogQHJldHVybiAtIHZvaWQuIElmIHJlcXVlc3QgZ3BpbyBmYWlscyB0aGVuIEZsYWcgS0VSTl9FUlIuCisgKi8KK3N0YXRpYyB2b2lkIGFkczc4NDZfZGV2X2luaXQodm9pZCkKK3sKKwlpZiAoZ3Bpb19yZXF1ZXN0KHRzX2dwaW8sICJBRFM3ODQ2IHBlbmRvd24iKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBnZXQgYWRzNzQ2IHBlbiBkb3duIEdQSU9cbiIpOworCQlyZXR1cm47CisJfQorCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQodHNfZ3Bpbyk7CisKKwlvbWFwX3NldF9ncGlvX2RlYm91bmNlKHRzX2dwaW8sIDEpOworCW9tYXBfc2V0X2dwaW9fZGVib3VuY2VfdGltZSh0c19ncGlvLCAweGEpOworfQorCitzdGF0aWMgaW50IGFkczc4NDZfZ2V0X3BlbmRvd25fc3RhdGUodm9pZCkKK3sKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKHRzX2dwaW8pOworfQorCitzdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSB0c2MyMDQ2X2NvbmZpZyBfX2luaXRkYXRhID0geworCS5nZXRfcGVuZG93bl9zdGF0ZQk9IGFkczc4NDZfZ2V0X3BlbmRvd25fc3RhdGUsCisJLmtlZXBfdnJlZl9vbgkJPSAxLAorfTsKKworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2RldmljZV9jb25maWcgdHNjMjA0Nl9tY3NwaV9jb25maWcgPSB7CisJLnR1cmJvX21vZGUJPSAwLAorCS5zaW5nbGVfY2hhbm5lbAk9IDEsCS8qIDA6IHNsYXZlLCAxOiBtYXN0ZXIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gc2RwMzQzMF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geworCQkvKgorCQkgKiBUU0MyMDQ2IG9wZXJhdGVzIGF0IGEgbWF4IGZyZXFlbmN5IG9mIDJNSHosIHNvCisJCSAqIG9wZXJhdGUgc2xpZ2h0bHkgYmVsb3cgYXQgMS41TUh6CisJCSAqLworCQkubW9kYWxpYXMJCT0gImFkczc4NDYiLAorCQkuYnVzX251bQkJPSAxLAorCQkuY2hpcF9zZWxlY3QJCT0gMCwKKwkJLm1heF9zcGVlZF9oegkJPSAxNTAwMDAwLAorCQkuY29udHJvbGxlcl9kYXRhCT0gJnRzYzIwNDZfbWNzcGlfY29uZmlnLAorCQkuaXJxCQkJPSAwLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmdHNjMjA0Nl9jb25maWcsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNkcDM0MzBfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2RwMjQzMF9sY2QiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZkYWNfc3VwcGx5ID0geworCS5zdXBwbHkJCT0gInZkYWMiLAorCS5kZXYJCT0gJnNkcDM0MzBfbGNkX2RldmljZS5kZXYsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92ZHZpX3N1cHBseSA9IHsKKwkuc3VwcGx5CQk9ICJ2ZHZpIiwKKwkuZGV2CQk9ICZzZHAzNDMwX2xjZF9kZXZpY2UuZGV2LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNkcDM0MzBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNkcDM0MzBfc21jOTF4X2RldmljZSwKKwkmc2RwMzQzMF9sY2RfZGV2aWNlLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzZHAzNDMwX2luaXRfc21jOTF4KHZvaWQpCit7CisJaW50IGV0aF9jczsKKwl1bnNpZ25lZCBsb25nIGNzX21lbV9iYXNlOworCWludCBldGhfZ3BpbyA9IDA7CisKKwlldGhfY3MgPSBTRFAzNDMwX1NNQzkxWF9DUzsKKworCWlmIChncG1jX2NzX3JlcXVlc3QoZXRoX2NzLCBTWl8xNk0sICZjc19tZW1fYmFzZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BNQyBtZW0gZm9yIHNtYzkxeFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzZHAzNDMwX3NtYzkxeF9yZXNvdXJjZXNbMF0uc3RhcnQgPSBjc19tZW1fYmFzZSArIDB4MzAwOworCXNkcDM0MzBfc21jOTF4X3Jlc291cmNlc1swXS5lbmQgPSBjc19tZW1fYmFzZSArIDB4MzBmOworCXVkZWxheSgxMDApOworCisJaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApCisJCWV0aF9ncGlvID0gU0RQMzQzMF9FVEhSX0dQSU9fSVJRX1NEUFYyOworCWVsc2UKKwkJZXRoX2dwaW8gPSBTRFAzNDMwX0VUSFJfR1BJT19JUlFfU0RQVjE7CisKKwlzZHAzNDMwX3NtYzkxeF9yZXNvdXJjZXNbMV0uc3RhcnQgPSBncGlvX3RvX2lycShldGhfZ3Bpbyk7CisKKwlpZiAoZ3Bpb19yZXF1ZXN0KGV0aF9ncGlvLCAiU01DOTF4IGlycSIpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3Igc21jOTF4IElSUVxuIiwKKwkJCWV0aF9ncGlvKTsKKwkJcmV0dXJuOworCX0KKwlncGlvX2RpcmVjdGlvbl9pbnB1dChldGhfZ3Bpbyk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzM0MzBzZHBfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMKTsKKwlvbWFwX2luaXRfaXJxKCk7CisJb21hcF9ncGlvX2luaXQoKTsKKwlzZHAzNDMwX2luaXRfc21jOTF4KCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBzZHAzNDMwX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7CisJLmVuYWJsZWRfdWFydHMJPSAoKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIHNkcDM0MzBfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0geworCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgc2RwMzQzMF9jb25maWdbXSBfX2luaXRkYXRhID0geworCXsgT01BUF9UQUdfVUFSVCwJJnNkcDM0MzBfdWFydF9jb25maWcgfSwKKwl7IE9NQVBfVEFHX0xDRCwJCSZzZHAzNDMwX2xjZF9jb25maWcgfSwKK307CisKK3N0YXRpYyBpbnQgc2RwMzQzMF9iYXR0X3RhYmxlW10gPSB7CisvKiAwIEMqLworMzA4MDAsIDI5NTAwLCAyODMwMCwgMjcxMDAsCisyNjAwMCwgMjQ5MDAsIDIzOTAwLCAyMjkwMCwgMjIwMDAsIDIxMTAwLCAyMDMwMCwgMTk0MDAsIDE4NzAwLCAxNzkwMCwKKzE3MjAwLCAxNjUwMCwgMTU5MDAsIDE1MzAwLCAxNDcwMCwgMTQxMDAsIDEzNjAwLCAxMzEwMCwgMTI2MDAsIDEyMTAwLAorMTE2MDAsIDExMjAwLCAxMDgwMCwgMTA0MDAsIDEwMDAwLCA5NjMwLCAgIDkyODAsICAgODk1MCwgICA4NjIwLCAgIDgzMTAsCis4MDIwLCAgIDc3MzAsICAgNzQ2MCwgICA3MjAwLCAgIDY5NTAsICAgNjcxMCwgICA2NDcwLCAgIDYyNTAsICAgNjA0MCwgICA1ODMwLAorNTY0MCwgICA1NDUwLCAgIDUyNjAsICAgNTA5MCwgICA0OTIwLCAgIDQ3NjAsICAgNDYwMCwgICA0NDUwLCAgIDQzMTAsICAgNDE3MCwKKzQwNDAsICAgMzkxMCwgICAzNzkwLCAgIDM2NzAsICAgMzU1MAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2JjaV9wbGF0Zm9ybV9kYXRhIHNkcDM0MzBfYmNpX2RhdGEgPSB7CisJLmJhdHRlcnlfdG1wX3RibAk9IHNkcDM0MzBfYmF0dF90YWJsZSwKKwkudGJsc2l6ZQkJPSBBUlJBWV9TSVpFKHNkcDM0MzBfYmF0dF90YWJsZSksCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBtbWNbXSA9IHsKKwl7CisJCS5tbWMJCT0gMSwKKwkJLyogOCBiaXRzIChkZWZhdWx0KSByZXF1aXJlcyBTNi4zID09IE9OLAorCQkgKiBzbyB0aGUgU0lNIGNhcmQgaXNuJ3QgdXNlZDsgZWxzZSA0IGJpdHMuCisJCSAqLworCQkud2lyZXMJCT0gOCwKKwkJLmdwaW9fd3AJPSA0LAorCX0sCisJeworCQkubW1jCQk9IDIsCisJCS53aXJlcwkJPSA4LAorCQkuZ3Bpb193cAk9IDcsCisJfSwKKwl7fQkvKiBUZXJtaW5hdG9yICovCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RwMzQzMF92bW1jMV9zdXBwbHkgPSB7CisJLnN1cHBseQkJCT0gInZtbWMiLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHNkcDM0MzBfdnNpbV9zdXBwbHkgPSB7CisJLnN1cHBseQkJCT0gInZtbWNfYXV4IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZtbWMyX3N1cHBseSA9IHsKKwkuc3VwcGx5CQkJPSAidm1tYyIsCit9OworCitzdGF0aWMgaW50IHNkcDM0MzBfdHdsX2dwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAorCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3BpbykKK3sKKwkvKiBncGlvICsgMCBpcyAibW1jMF9jZCIgKGlucHV0L0lSUSksCisJICogZ3BpbyArIDEgaXMgIm1tYzFfY2QiIChpbnB1dC9JUlEpCisJICovCisJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKKwltbWNbMV0uZ3Bpb19jZCA9IGdwaW8gKyAxOworCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKKworCS8qIGxpbmsgcmVndWxhdG9ycyB0byBNTUMgYWRhcHRlcnMgLi4uIHdlICJrbm93IiB0aGUKKwkgKiByZWd1bGF0b3JzIHdpbGwgYmUgc2V0IHVwIG9ubHkgKmFmdGVyKiB3ZSByZXR1cm4uCisJICovCisJc2RwMzQzMF92bW1jMV9zdXBwbHkuZGV2ID0gbW1jWzBdLmRldjsKKwlzZHAzNDMwX3ZzaW1fc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CisJc2RwMzQzMF92bW1jMl9zdXBwbHkuZGV2ID0gbW1jWzFdLmRldjsKKworCS8qIGdwaW8gKyA3IGlzICJzdWJfbGNkX2VuX2JrbCIgKG91dHB1dC9QV00xKSAqLworCWdwaW9fcmVxdWVzdChncGlvICsgNywgInN1Yl9sY2RfZW5fYmtsIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyA3LCAwKTsKKworCS8qIGdwaW8gKyAxNSBpcyAic3ViX2xjZF9uUlNUIiAob3V0cHV0KSAqLworCWdwaW9fcmVxdWVzdChncGlvICsgMTUsICJzdWJfbGNkX25SU1QiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIDE1LCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfZ3Bpb19wbGF0Zm9ybV9kYXRhIHNkcDM0MzBfZ3Bpb19kYXRhID0geworCS5ncGlvX2Jhc2UJPSBPTUFQX01BWF9HUElPX0xJTkVTLAorCS5pcnFfYmFzZQk9IFRXTDQwMzBfR1BJT19JUlFfQkFTRSwKKwkuaXJxX2VuZAk9IFRXTDQwMzBfR1BJT19JUlFfRU5ELAorCS5wdWxsZG93bnMJPSBCSVQoMikgfCBCSVQoNikgfCBCSVQoOCkgfCBCSVQoMTMpCisJCQkJfCBCSVQoMTYpIHwgQklUKDE3KSwKKwkuc2V0dXAJCT0gc2RwMzQzMF90d2xfZ3Bpb19zZXR1cCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF91c2JfZGF0YSBzZHAzNDMwX3VzYl9kYXRhID0geworCS51c2JfbW9kZQk9IFQyX1VTQl9NT0RFX1VMUEksCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfbWFkY19wbGF0Zm9ybV9kYXRhIHNkcDM0MzBfbWFkY19kYXRhID0geworCS5pcnFfbGluZQk9IDEsCit9OworCisvKgorICogQXBwbHkgYWxsIHRoZSBmaXhlZCB2b2x0YWdlcyBzaW5jZSBtb3N0IHZlcnNpb25zIG9mIFUtQm9vdAorICogZG9uJ3QgYm90aGVyIHdpdGggdGhhdCBpbml0aWFsaXphdGlvbi4KKyAqLworCisvKiBWQVVYMSBmb3IgbWFpbmJvYXJkIChpcmRhIGFuZCBzdWItbGNkKSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdmF1eDEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAyODAwMDAwLAorCQkubWF4X3VWCQkJPSAyODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKK307CisKKy8qIFZBVVgyIGZvciBjYW1lcmEgbW9kdWxlICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92YXV4MiA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDI4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDI4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworLyogVkFVWDMgZm9yIExDRCBib2FyZCAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdmF1eDMgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAyODAwMDAwLAorCQkubWF4X3VWCQkJPSAyODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKK307CisKKy8qIFZBVVg0IGZvciBPTUFQIFZERF9DU0kyIChjYW1lcmEpICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RwMzQzMF92YXV4NCA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworLyogVk1NQzEgZm9yIE9NQVAgVkREX01NQzEgKGkvbykgYW5kIE1NQzEgY2FyZCAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdm1tYzEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODUwMDAwLAorCQkubWF4X3VWCQkJPSAzMTUwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZzZHAzNDMwX3ZtbWMxX3N1cHBseSwKK307CisKKy8qIFZNTUMyIGZvciBNTUMyIGNhcmQgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZtbWMyID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTg1MDAwMCwKKwkJLm1heF91VgkJCT0gMTg1MDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnNkcDM0MzBfdm1tYzJfc3VwcGx5LAorfTsKKworLyogVlNJTSBmb3IgT01BUCBWRERfTU1DMUEgKGkvbyBmb3IgREFUNC4uREFUNykgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzZHAzNDMwX3ZzaW0gPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAzMDAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZzZHAzNDMwX3ZzaW1fc3VwcGx5LAorfTsKKworLyogVkRBQyBmb3IgRFNTIGRyaXZpbmcgUy1WaWRlbyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdmRhYyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZzZHAzNDMwX3ZkYWNfc3VwcGx5LAorfTsKKworLyogVlBMTDIgZm9yIGRpZ2l0YWwgdmlkZW8gb3V0cHV0cyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkcDM0MzBfdnBsbDIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZEVkkiLAorCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZzZHAzNDMwX3Zkdmlfc3VwcGx5LAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgc2RwMzQzMF90d2xkYXRhID0geworCS5pcnFfYmFzZQk9IFRXTDQwMzBfSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0lSUV9FTkQsCisKKwkvKiBwbGF0Zm9ybV9kYXRhIGZvciBjaGlsZHJlbiBnb2VzIGhlcmUgKi8KKwkuYmNpCQk9ICZzZHAzNDMwX2JjaV9kYXRhLAorCS5ncGlvCQk9ICZzZHAzNDMwX2dwaW9fZGF0YSwKKwkubWFkYwkJPSAmc2RwMzQzMF9tYWRjX2RhdGEsCisJLmtleXBhZAkJPSAmc2RwMzQzMF9rcF9kYXRhLAorCS51c2IJCT0gJnNkcDM0MzBfdXNiX2RhdGEsCisKKwkudmF1eDEJCT0gJnNkcDM0MzBfdmF1eDEsCisJLnZhdXgyCQk9ICZzZHAzNDMwX3ZhdXgyLAorCS52YXV4MwkJPSAmc2RwMzQzMF92YXV4MywKKwkudmF1eDQJCT0gJnNkcDM0MzBfdmF1eDQsCisJLnZtbWMxCQk9ICZzZHAzNDMwX3ZtbWMxLAorCS52bW1jMgkJPSAmc2RwMzQzMF92bW1jMiwKKwkudnNpbQkJPSAmc2RwMzQzMF92c2ltLAorCS52ZGFjCQk9ICZzZHAzNDMwX3ZkYWMsCisJLnZwbGwyCQk9ICZzZHAzNDMwX3ZwbGwyLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIHNkcDM0MzBfaTJjX2JvYXJkaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInR3bDQwMzAiLCAweDQ4KSwKKwkJLmZsYWdzID0gSTJDX0NMSUVOVF9XQUtFLAorCQkuaXJxID0gSU5UXzM0WFhfU1lTX05JUlEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnNkcDM0MzBfdHdsZGF0YSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgb21hcDM0MzBfaTJjX2luaXQodm9pZCkKK3sKKwkvKiBpMmMxIGZvciBQTUlDIG9ubHkgKi8KKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMSwgMjYwMCwgc2RwMzQzMF9pMmNfYm9hcmRpbmZvLAorCQkJQVJSQVlfU0laRShzZHAzNDMwX2kyY19ib2FyZGluZm8pKTsKKwkvKiBpMmMyIG9uIGNhbWVyYSBjb25uZWN0b3IgKGZvciBzZW5zb3IgY29udHJvbCkgYW5kIG9wdGlvbmFsIGlzcDEzMDEgKi8KKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMiwgNDAwLCBOVUxMLCAwKTsKKwkvKiBpMmMzIG9uIGRpc3BsYXkgY29ubmVjdG9yIChmb3IgRFZJLCB0ZnA0MTApICovCisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzM0MzBzZHBfaW5pdCh2b2lkKQoreworCW9tYXAzNDMwX2kyY19pbml0KCk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoc2RwMzQzMF9kZXZpY2VzLCBBUlJBWV9TSVpFKHNkcDM0MzBfZGV2aWNlcykpOworCW9tYXBfYm9hcmRfY29uZmlnID0gc2RwMzQzMF9jb25maWc7CisJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoc2RwMzQzMF9jb25maWcpOworCWlmIChvbWFwX3JldigpID4gT01BUDM0MzBfUkVWX0VTMV8wKQorCQl0c19ncGlvID0gU0RQMzQzMF9UU19HUElPX0lSUV9TRFBWMjsKKwllbHNlCisJCXRzX2dwaW8gPSBTRFAzNDMwX1RTX0dQSU9fSVJRX1NEUFYxOworCXNkcDM0MzBfc3BpX2JvYXJkX2luZm9bMF0uaXJxID0gZ3Bpb190b19pcnEodHNfZ3Bpbyk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc2RwMzQzMF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHNkcDM0MzBfc3BpX2JvYXJkX2luZm8pKTsKKwlhZHM3ODQ2X2Rldl9pbml0KCk7CisJb21hcF9zZXJpYWxfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMzQzMHNkcF9tYXBfaW8odm9pZCkKK3sKKwlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7CisJb21hcDJfbWFwX2NvbW1vbl9pbygpOworfQorCitNQUNISU5FX1NUQVJUKE9NQVBfMzQzMFNEUCwgIk9NQVAzNDMwIDM0MzBTRFAgYm9hcmQiKQorCS8qIE1haW50YWluZXI6IFN5ZWQgS2hhc2ltIC0gVGV4YXMgSW5zdHJ1bWVudHMgSW5jICovCisJLnBoeXNfaW8JPSAweDQ4MDAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhkODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4ODAwMDAxMDAsCisJLm1hcF9pbwkJPSBvbWFwXzM0MzBzZHBfbWFwX2lvLAorCS5pbml0X2lycQk9IG9tYXBfMzQzMHNkcF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gb21hcF8zNDMwc2RwX2luaXQsCisJLnRpbWVyCQk9ICZvbWFwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKaW5kZXggMGE3YjI0YmEuLjA2ZGZiYTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCkBAIC01MSw2ICs1MSw3IEBACiAKICNkZWZpbmUgQVBPTExPTl9GTEFTSF9DUwkwCiAjZGVmaW5lIEFQT0xMT05fRVRIX0NTCQkxCisjZGVmaW5lIEFQT0xMT05fRVRIUl9HUElPX0lSUQk3NAogCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYXBvbGxvbl9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtMjQ5LDcgKzI1MCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2Fwb2xsb25faW5pdF9pcnEodm9pZCkKIHsKLQlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogCWFwb2xsb25faW5pdF9zbWM5MXgoKTsKQEAgLTI3Miw3ICsyNzMsNiBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBhcG9sbG9uX2NvbmZpZ1tdID0gewogCXsgT01BUF9UQUdfVUFSVCwJJmFwb2xsb25fdWFydF9jb25maWcgfSwKLQl7IE9NQVBfVEFHX1VTQiwJCSZhcG9sbG9uX3VzYl9jb25maWcgfSwKIAl7IE9NQVBfVEFHX0xDRCwJCSZhcG9sbG9uX2xjZF9jb25maWcgfSwKIH07CiAKQEAgLTI5OSw2ICsyOTksNyBAQAogCW9tYXBfY2ZnX3JlZyhQMjFfMjQyWF9HUElPMTIpOwogCWdwaW9fcmVxdWVzdCgxMiwgIlVTQiBzdXNwZW5kIik7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDEyLCAwKTsKKwlvbWFwX3VzYl9pbml0KCZhcG9sbG9uX3VzYl9jb25maWcpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9hcG9sbG9uX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKaW5kZXggM2IzNGMyMC4uMzQ5MjE2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZ2VuZXJpY19pbml0X2lycSh2b2lkKQogewotCW9tYXAyX2luaXRfY29tbW9uX2h3KCk7CisJb21hcDJfaW5pdF9jb21tb25faHcoTlVMTCk7CiAJb21hcF9pbml0X2lycSgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKaW5kZXggNWU5YjE0Ni4uYTAyNjdhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYwpAQCAtNDcsNiArNDcsOCBAQAogI2RlZmluZSBINF9GTEFTSF9DUwkwCiAjZGVmaW5lIEg0X1NNQzkxWF9DUwkxCiAKKyNkZWZpbmUgSDRfRVRIUl9HUElPX0lSUQkJOTIKKwogc3RhdGljIHVuc2lnbmVkIGludCByb3dfZ3Bpb3NbNl0gPSB7IDg4LCA4OSwgMTI0LCAxMSwgNiwgOTYgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29sX2dwaW9zWzddID0geyA5MCwgOTEsIDEwMCwgMzYsIDEyLCA5NywgOTggfTsKIApAQCAtMzQxLDcgKzM0Myw3IEBACiAJdWRlbGF5KDEwMCk7CiAKIAlvbWFwX2NmZ19yZWcoTTE1XzI0WFhfR1BJTzkyKTsKLQlpZiAoZGVidWdfY2FyZF9pbml0KGNzX21lbV9iYXNlLCBPTUFQMjRYWF9FVEhSX0dQSU9fSVJRKSA8IDApCisJaWYgKGRlYnVnX2NhcmRfaW5pdChjc19tZW1fYmFzZSwgSDRfRVRIUl9HUElPX0lSUSkgPCAwKQogCQlncG1jX2NzX2ZyZWUoZXRoX2NzKTsKIAogb3V0OgpAQCAtMzYzLDcgKzM2NSw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2g0X2luaXRfaXJxKHZvaWQpCiB7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKIAloNF9pbml0X2ZsYXNoKCk7CkBAIC0zNzcsNiArMzc5LDM5IEBACiAJLmN0cmxfbmFtZQk9ICJpbnRlcm5hbCIsCiB9OwogCitzdGF0aWMgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyBoNF91c2JfY29uZmlnIF9faW5pdGRhdGEgPSB7CisjaWZkZWYJQ09ORklHX01BQ0hfT01BUDJfSDRfVVNCMQorCS8qIE5PVEU6ICB1c2IxIGNvdWxkIGFsc28gYmUgdXNlZCB3aXRoIDMgd2lyZSBzaWduYWxpbmcgKi8KKwkucGluc1sxXQk9IDQsCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19NQUNIX09NQVBfSDRfT1RHCisJLyogUzEuMTAgT04gLS0gVVNCIE9URyBwb3J0CisJICogdXNiMCBzd2l0Y2hlZCB0byBNaW5pLUFCIHBvcnQgYW5kIGlzcDEzMDEgdHJhbnNjZWl2ZXI7CisJICogUzIuUE9TMyA9IE9GRiwgUzIuUE9TNCA9IE9OIC4uLiB0byBhbGxvdyBiYXR0ZXJ5IGNoYXJnaW5nCisJICovCisJLm90ZwkJPSAxLAorCS5waW5zWzBdCT0gNCwKKyNpZmRlZglDT05GSUdfVVNCX0dBREdFVF9PTUFQCisJLyogdXNlIE9URyBjYWJsZSwgb3Igc3RhbmRhcmQgQS10by1NaW5pQiAqLworCS5obWNfbW9kZQk9IDB4MTQsCS8qIDA6ZGV2L290ZyAxOmhvc3QgMjpkaXNhYmxlICovCisjZWxpZglkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCisJLyogdXNlIE9URyBjYWJsZSwgb3IgTk9OU1RBTkRBUkQgKEItdG8tTWluaUIpICovCisJLmhtY19tb2RlCT0gMHgxMSwJLyogMDpob3N0IDE6aG9zdCAyOmRpc2FibGUgKi8KKyNlbmRpZgkvKiBYWCAqLworCisjZWxzZQorCS8qIFMxLjEwIE9GRiAtLSB1c2IgImRvd25sb2FkIHBvcnQiCisJICogdXNiMCBzd2l0Y2hlZCB0byBNaW5pLUIgcG9ydCBhbmQgaXNwMTEwNSB0cmFuc2NlaXZlcjsKKwkgKiBTMi5QT1MzID0gT04sIFMyLlBPUzQgPSBPRkYgLi4uIHRvIGVuYWJsZSBiYXR0ZXJ5IGNoYXJnaW5nCisJICovCisJLnJlZ2lzdGVyX2Rldgk9IDEsCisJLnBpbnNbMF0JPSAzLAorLyoJLmhtY19tb2RlCT0gMHgxNCwqLwkvKiAwOmRldiAxOmhvc3QgMjpkaXNhYmxlICovCisJLmhtY19tb2RlCT0gMHgwMCwJCS8qIDA6ZGV2fG90ZyAxOmRpc2FibGUgMjpkaXNhYmxlICovCisjZW5kaWYKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGg0X2NvbmZpZ1tdID0gewogCXsgT01BUF9UQUdfVUFSVCwJJmg0X3VhcnRfY29uZmlnIH0sCiAJeyBPTUFQX1RBR19MQ0QsCQkmaDRfbGNkX2NvbmZpZyB9LApAQCAtNDI4LDYgKzQ2Myw3IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMoaDRfZGV2aWNlcywgQVJSQVlfU0laRShoNF9kZXZpY2VzKSk7CiAJb21hcF9ib2FyZF9jb25maWcgPSBoNF9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaDRfY29uZmlnKTsKKwlvbWFwX3VzYl9pbml0KCZoNF91c2JfY29uZmlnKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCmluZGV4IDYwMzFlMTcuLmUwOTZmNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYwpAQCAtMjIsMzEgKzIyLDM0IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3R3bDQwMzAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1sZHAuaD4KICNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CiAjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxtYWNoL3VzYi5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIAotI2RlZmluZSBTRFAzNDMwX1NNQzkxWF9DUwkzCisjZGVmaW5lIExEUF9TTUM5MTFYX0NTCQkxCisjZGVmaW5lIExEUF9TTUM5MTFYX0dQSU8JMTUyCisjZGVmaW5lIERFQlVHX0JBU0UJCTB4MDgwMDAwMDAKKyNkZWZpbmUgTERQX0VUSFJfU1RBUlQJCURFQlVHX0JBU0UKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsZHBfc21jOTExeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydAk9IE9NQVAzNFhYX0VUSFJfU1RBUlQsCi0JCS5lbmQJPSBPTUFQMzRYWF9FVEhSX1NUQVJUICsgU1pfNEssCisJCS5zdGFydAk9IExEUF9FVEhSX1NUQVJULAorCQkuZW5kCT0gTERQX0VUSFJfU1RBUlQgKyBTWl80SywKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC05OCw3ICsxMDEsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9sZHBfaW5pdF9pcnEodm9pZCkKIHsKLQlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogCWxkcF9pbml0X3NtYzkxMXgoKTsKQEAgLTE2Miw2ICsxNjUsNyBAQAogCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGxkcF9jb25maWcpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKIAl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJdXNiX211c2JfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9sZHBfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKaW5kZXggZTM5Y2QyYy4uNzQ0NzQwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgogI2luY2x1ZGUgPG1hY2gvbmFuZC5oPgogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC91c2IuaD4KIAogI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCiAKQEAgLTE3NSw5ICsxNzYsNiBAQAogewogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygxLCAyNjAwLCBiZWFnbGVfaTJjX2JvYXJkaW5mbywKIAkJCUFSUkFZX1NJWkUoYmVhZ2xlX2kyY19ib2FyZGluZm8pKTsKLSNpZmRlZiBDT05GSUdfSTJDMl9PTUFQX0JFQUdMRQotCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygyLCA0MDAsIE5VTEwsIDApOwotI2VuZGlmCiAJLyogQnVzIDMgaXMgYXR0YWNoZWQgdG8gdGhlIERWSSBwb3J0IHdoZXJlIGRldmljZXMgbGlrZSB0aGUgcGljbyBETFAKIAkgKiBwcm9qZWN0b3IgZG9uJ3Qgd29yayByZWxpYWJseSB3aXRoIDQwMGtIeiAqLwogCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCAxMDAsIE5VTEwsIDApOwpAQCAtMTg2LDcgKzE4NCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19iZWFnbGVfaW5pdF9pcnEodm9pZCkKIHsKLQlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogfQpAQCAtMzE2LDYgKzMxNCw3IEBACiAJLyogUkVWSVNJVCBsZWF2ZSBEVkkgcG93ZXJlZCBkb3duIHVudGlsIGl0J3MgbmVlZGVkIC4uLiAqLwogCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxNzAsIHRydWUpOwogCisJdXNiX211c2JfaW5pdCgpOwogCW9tYXAzYmVhZ2xlX2ZsYXNoX2luaXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKaW5kZXggYjMxOTYxMC4uNDAyZjA5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvbWNzcGkuaD4KKyNpbmNsdWRlIDxtYWNoL3VzYi5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIApAQCAtNTMsNiArNTQsMTMgQEAKIAkJLmdwaW9fY2QJPSAtRUlOVkFMLAogCQkuZ3Bpb193cAk9IDEyNywKIAkJLmV4dF9jbG9jawk9IDEsCisJCS50cmFuc2NlaXZlcgk9IHRydWUsCisJfSwKKwl7CisJCS5tbWMJCT0gMywKKwkJLndpcmVzCQk9IDQsCisJCS5ncGlvX2NkCT0gLUVJTlZBTCwKKwkJLmdwaW9fd3AJPSAtRUlOVkFMLAogCX0sCiAJe30JLyogVGVybWluYXRvciAqLwogfTsKQEAgLTExMCw3ICsxMTgsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNwYW5kb3JhX2luaXRfaXJxKHZvaWQpCiB7Ci0Jb21hcDJfaW5pdF9jb21tb25faHcoKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKIH0KQEAgLTE5Myw2ICsyMDEsNyBAQAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG9tYXAzcGFuZG9yYV9zcGlfYm9hcmRfaW5mbywKIAkJCUFSUkFZX1NJWkUob21hcDNwYW5kb3JhX3NwaV9ib2FyZF9pbmZvKSk7CiAJb21hcDNwYW5kb3JhX2Fkczc4NDZfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzcGFuZG9yYV9tYXBfaW8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYwppbmRleCA4MmIzZGM1Li5iM2Y2ZTlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCkBAIC0zNywyMCArMzcsODUgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1vdmVyby5oPgogI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvZ3BtYy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL3VzYi5oPgogCiAjaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKIAorI2RlZmluZSBPVkVST19HUElPX0JUX1hHQVRFCTE1CisjZGVmaW5lIE9WRVJPX0dQSU9fVzJXX05SRVNFVAkxNgorI2RlZmluZSBPVkVST19HUElPX0JUX05SRVNFVAkxNjQKKyNkZWZpbmUgT1ZFUk9fR1BJT19VU0JIX0NQRU4JMTY4CisjZGVmaW5lIE9WRVJPX0dQSU9fVVNCSF9OUkVTRVQJMTgzCisKICNkZWZpbmUgTkFORF9CTE9DS19TSVpFIFNaXzEyOEsKICNkZWZpbmUgR1BNQ19DUzBfQkFTRSAgMHg2MAogI2RlZmluZSBHUE1DX0NTX1NJWkUgICAweDMwCiAKKyNpZiBkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2KSB8fCBcCisJZGVmaW5lZChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nl9NT0RVTEUpCisKKyNpbmNsdWRlIDxtYWNoL21jc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9hZHM3ODQ2Lmg+CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfZGV2aWNlX2NvbmZpZyBhZHM3ODQ2X21jc3BpX2NvbmZpZyA9IHsKKwkudHVyYm9fbW9kZQk9IDAsCisJLnNpbmdsZV9jaGFubmVsCT0gMSwJLyogMDogc2xhdmUsIDE6IG1hc3RlciAqLworfTsKKworc3RhdGljIGludCBhZHM3ODQ2X2dldF9wZW5kb3duX3N0YXRlKHZvaWQpCit7CisJcmV0dXJuICFncGlvX2dldF92YWx1ZShPVkVST19HUElPX1BFTkRPV04pOworfQorCitzdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHM3ODQ2X2NvbmZpZyA9IHsKKwkueF9tYXgJCQk9IDB4MGZmZiwKKwkueV9tYXgJCQk9IDB4MGZmZiwKKwkueF9wbGF0ZV9vaG1zCQk9IDE4MCwKKwkucHJlc3N1cmVfbWF4CQk9IDI1NSwKKwkuZGVib3VuY2VfbWF4CQk9IDEwLAorCS5kZWJvdW5jZV90b2wJCT0gMywKKwkuZGVib3VuY2VfcmVwCQk9IDEsCisJLmdldF9wZW5kb3duX3N0YXRlCT0gYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSwKKwkua2VlcF92cmVmX29uCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG92ZXJvX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcwkJPSAiYWRzNzg0NiIsCisJCS5idXNfbnVtCQk9IDEsCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkubWF4X3NwZWVkX2h6CQk9IDE1MDAwMDAsCisJCS5jb250cm9sbGVyX2RhdGEJPSAmYWRzNzg0Nl9tY3NwaV9jb25maWcsCisJCS5pcnEJCQk9IE9NQVBfR1BJT19JUlEoT1ZFUk9fR1BJT19QRU5ET1dOKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmFkczc4NDZfY29uZmlnLAorCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19hZHM3ODQ2X2luaXQodm9pZCkKK3sKKwlpZiAoKGdwaW9fcmVxdWVzdChPVkVST19HUElPX1BFTkRPV04sICJBRFM3ODQ2X1BFTkRPV04iKSA9PSAwKSAmJgorCSAgICAoZ3Bpb19kaXJlY3Rpb25faW5wdXQoT1ZFUk9fR1BJT19QRU5ET1dOKSA9PSAwKSkgeworCQlncGlvX2V4cG9ydChPVkVST19HUElPX1BFTkRPV04sIDApOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiY291bGQgbm90IG9idGFpbiBncGlvIGZvciBBRFM3ODQ2X1BFTkRPV05cbiIpOworCQlyZXR1cm47CisJfQorCisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ob3Zlcm9fc3BpX2JvYXJkX2luZm8sCisJCQlBUlJBWV9TSVpFKG92ZXJvX3NwaV9ib2FyZF9pbmZvKSk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG92ZXJvX2Fkczc4NDZfaW5pdCh2b2lkKSB7IHJldHVybjsgfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvdmVyb19uYW5kX3BhcnRpdGlvbnNbXSA9IHsKIAl7CiAJCS5uYW1lICAgICAgICAgICA9ICJ4bG9hZGVyIiwKQEAgLTE3NCw3ICsyMzksNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgb3Zlcm9faW5pdF9pcnEodm9pZCkKIHsKLQlvbWFwMl9pbml0X2NvbW1vbl9odygpOworCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwogfQpAQCAtMjA5LDYgKzI3NCw3IEBACiAJCS53aXJlcwkJPSA0LAogCQkuZ3Bpb19jZAk9IC1FSU5WQUwsCiAJCS5ncGlvX3dwCT0gLUVJTlZBTCwKKwkJLnRyYW5zY2VpdmVyCT0gdHJ1ZSwKIAl9LAogCXt9CS8qIFRlcm1pbmF0b3IgKi8KIH07CkBAIC0yMjIsNiArMjg4LDggQEAKIAlvbWFwX3NlcmlhbF9pbml0KCk7CiAJdHdsNDAzMF9tbWNfaW5pdChtbWMpOwogCW92ZXJvX2ZsYXNoX2luaXQoKTsKKwl1c2JfbXVzYl9pbml0KCk7CisJb3Zlcm9fYWRzNzg0Nl9pbml0KCk7CiAKIAlpZiAoKGdwaW9fcmVxdWVzdChPVkVST19HUElPX1cyV19OUkVTRVQsCiAJCQkgICJPVkVST19HUElPX1cyV19OUkVTRVQiKSA9PSAwKSAmJgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzM4MTcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMKQEAgLTAsMCArMSw0MTkgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtZmxhc2guYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvbWNzcGkuaD4KKyNpbmNsdWRlIDxtYWNoL211eC5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CisjaW5jbHVkZSA8bWFjaC9rZXlwYWQuaD4KKworI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisKKworI2RlZmluZSBTTUM5MVhfQ1MJCQkxCisjZGVmaW5lIFNNQzkxWF9HUElPX0lSUQkJCTU0CisjZGVmaW5lIFNNQzkxWF9HUElPX1JFU0VUCQkxNjQKKyNkZWZpbmUgU01DOTFYX0dQSU9fUFdSRFdOCQk4NgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ4NTFfc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugcng1MV9zbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocng1MV9zbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSByeDUxX3NtYzkxeF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW50IHJ4NTFfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV9RKSwKKwlLRVkoMCwgMSwgS0VZX1cpLAorCUtFWSgwLCAyLCBLRVlfRSksCisJS0VZKDAsIDMsIEtFWV9SKSwKKwlLRVkoMCwgNCwgS0VZX1QpLAorCUtFWSgwLCA1LCBLRVlfWSksCisJS0VZKDAsIDYsIEtFWV9VKSwKKwlLRVkoMCwgNywgS0VZX0kpLAorCUtFWSgxLCAwLCBLRVlfTyksCisJS0VZKDEsIDEsIEtFWV9EKSwKKwlLRVkoMSwgMiwgS0VZX0RPVCksCisJS0VZKDEsIDMsIEtFWV9WKSwKKwlLRVkoMSwgNCwgS0VZX0RPV04pLAorCUtFWSgyLCAwLCBLRVlfUCksCisJS0VZKDIsIDEsIEtFWV9GKSwKKwlLRVkoMiwgMiwgS0VZX1VQKSwKKwlLRVkoMiwgMywgS0VZX0IpLAorCUtFWSgyLCA0LCBLRVlfUklHSFQpLAorCUtFWSgzLCAwLCBLRVlfQ09NTUEpLAorCUtFWSgzLCAxLCBLRVlfRyksCisJS0VZKDMsIDIsIEtFWV9FTlRFUiksCisJS0VZKDMsIDMsIEtFWV9OKSwKKwlLRVkoNCwgMCwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDQsIDEsIEtFWV9IKSwKKwlLRVkoNCwgMywgS0VZX00pLAorCUtFWSg0LCA0LCBLRVlfTEVGVENUUkwpLAorCUtFWSg1LCAxLCBLRVlfSiksCisJS0VZKDUsIDIsIEtFWV9aKSwKKwlLRVkoNSwgMywgS0VZX1NQQUNFKSwKKwlLRVkoNSwgNCwgS0VZX0xFRlRTSElGVCksCisJS0VZKDYsIDAsIEtFWV9BKSwKKwlLRVkoNiwgMSwgS0VZX0spLAorCUtFWSg2LCAyLCBLRVlfWCksCisJS0VZKDYsIDMsIEtFWV9TUEFDRSksCisJS0VZKDYsIDQsIEtFWV9GTiksCisJS0VZKDcsIDAsIEtFWV9TKSwKKwlLRVkoNywgMSwgS0VZX0wpLAorCUtFWSg3LCAyLCBLRVlfQyksCisJS0VZKDcsIDMsIEtFWV9MRUZUKSwKKwlLRVkoMHhmZiwgMCwgS0VZX0Y2KSwKKwlLRVkoMHhmZiwgMSwgS0VZX0Y3KSwKKwlLRVkoMHhmZiwgMiwgS0VZX0Y4KSwKKwlLRVkoMHhmZiwgNCwgS0VZX0Y5KSwKKwlLRVkoMHhmZiwgNSwgS0VZX0YxMCksCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgcng1MV9rcF9kYXRhID0geworCS5yb3dzCQk9IDgsCisJLmNvbHMJCT0gOCwKKwkua2V5bWFwCQk9IHJ4NTFfa2V5bWFwLAorCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShyeDUxX2tleW1hcCksCisJLnJlcAkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnJ4NTFfcGVyaXBoZXJhbHNfZGV2aWNlc1tdID0geworCSZyeDUxX3NtYzkxeF9kZXZpY2UsCit9OworCisvKgorICogVGltaW5ncyBhcmUgdGFrZW4gZnJvbSBzbXNjLWxhbjkxYzk2LW1zLnBkZgorICovCitzdGF0aWMgaW50IHNtYzkxeF9pbml0X2dwbWMoaW50IGNzKQoreworCXN0cnVjdCBncG1jX3RpbWluZ3MgdDsKKwljb25zdCBpbnQgdDJfciA9IDQ1OwkJLyogdDIgaW4gRmlndXJlIDEyLjEwICovCisJY29uc3QgaW50IHQyX3cgPSAzMDsJCS8qIHQyIGluIEZpZ3VyZSAxMi4xMSAqLworCWNvbnN0IGludCB0MyA9IDE1OwkJLyogdDMgaW4gRmlndXJlIDEyLjEwICovCisJY29uc3QgaW50IHQ1X3IgPSAwOwkJLyogdDUgaW4gRmlndXJlIDEyLjEwICovCisJY29uc3QgaW50IHQ2X3IgPSA0NTsJCS8qIHQ2IGluIEZpZ3VyZSAxMi4xMCAqLworCWNvbnN0IGludCB0Nl93ID0gMDsJCS8qIHQ2IGluIEZpZ3VyZSAxMi4xMSAqLworCWNvbnN0IGludCB0N193ID0gMTU7CQkvKiB0NyBpbiBGaWd1cmUgMTIuMTEgKi8KKwljb25zdCBpbnQgdDE1ID0gMTI7CQkvKiB0MTUgaW4gRmlndXJlIDEyLjIgKi8KKwljb25zdCBpbnQgdDIwID0gMTg1OwkJLyogdDIwIGluIEZpZ3VyZSAxMi4yICovCisKKwltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7CisKKwl0LmNzX29uID0gdDE1OworCXQuY3NfcmRfb2ZmID0gdDMgKyB0Ml9yICsgdDVfcjsJLyogRmlndXJlIDEyLjEwICovCisJdC5jc193cl9vZmYgPSB0MyArIHQyX3cgKyB0Nl93OwkvKiBGaWd1cmUgMTIuMTEgKi8KKwl0LmFkdl9vbiA9IHQzOwkJCS8qIEZpZ3VyZSAxMi4xMCAqLworCXQuYWR2X3JkX29mZiA9IHQzICsgdDJfcjsJLyogRmlndXJlIDEyLjEwICovCisJdC5hZHZfd3Jfb2ZmID0gdDMgKyB0Ml93OwkvKiBGaWd1cmUgMTIuMTEgKi8KKwl0Lm9lX29mZiA9IHQzICsgdDJfciArIHQ1X3I7CS8qIEZpZ3VyZSAxMi4xMCAqLworCXQub2Vfb24gPSB0Lm9lX29mZiAtIHQ2X3I7CS8qIEZpZ3VyZSAxMi4xMCAqLworCXQud2Vfb2ZmID0gdDMgKyB0Ml93ICsgdDZfdzsJLyogRmlndXJlIDEyLjExICovCisJdC53ZV9vbiA9IHQud2Vfb2ZmIC0gdDdfdzsJLyogRmlndXJlIDEyLjExICovCisJdC5yZF9jeWNsZSA9IHQyMDsJCS8qIEZpZ3VyZSAxMi4yICovCisJdC53cl9jeWNsZSA9IHQyMDsJCS8qIEZpZ3VyZSAxMi40ICovCisJdC5hY2Nlc3MgPSB0MyArIHQyX3IgKyB0NV9yOwkvKiBGaWd1cmUgMTIuMTAgKi8KKwl0LndyX2FjY2VzcyA9IHQzICsgdDJfdyArIHQ2X3c7CS8qIEZpZ3VyZSAxMi4xMSAqLworCisJZ3BtY19jc193cml0ZV9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHMSwgR1BNQ19DT05GSUcxX0RFVklDRVNJWkVfMTYpOworCisJcmV0dXJuIGdwbWNfY3Nfc2V0X3RpbWluZ3MoY3MsICZ0KTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHJ4NTFfaW5pdF9zbWM5MXgodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNzX21lbV9iYXNlOworCWludCByZXQ7CisKKwlvbWFwX2NmZ19yZWcoVThfMzRYWF9HUElPNTRfRE9XTik7CisJb21hcF9jZmdfcmVnKEcyNV8zNFhYX0dQSU84Nl9PVVQpOworCW9tYXBfY2ZnX3JlZyhIMTlfMzRYWF9HUElPMTY0X09VVCk7CisKKwlpZiAoZ3BtY19jc19yZXF1ZXN0KFNNQzkxWF9DUywgU1pfMTZNLCAmY3NfbWVtX2Jhc2UpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQTUMgbWVtIGZvciBzbWM5MXhcbiIpOworCQlyZXR1cm47CisJfQorCisJcng1MV9zbWM5MXhfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gY3NfbWVtX2Jhc2UgKyAweDMwMDsKKwlyeDUxX3NtYzkxeF9yZXNvdXJjZXNbMF0uZW5kID0gY3NfbWVtX2Jhc2UgKyAweDMwZjsKKworCXNtYzkxeF9pbml0X2dwbWMoU01DOTFYX0NTKTsKKworCWlmIChncGlvX3JlcXVlc3QoU01DOTFYX0dQSU9fSVJRLCAiU01DOTFYIGlycSIpIDwgMCkKKwkJZ290byBmcmVlMTsKKworCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNNQzkxWF9HUElPX0lSUSk7CisJcng1MV9zbWM5MXhfcmVzb3VyY2VzWzFdLnN0YXJ0ID0gZ3Bpb190b19pcnEoU01DOTFYX0dQSU9fSVJRKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChTTUM5MVhfR1BJT19QV1JEV04sICJTTUM5MVggcG93ZXJkb3duIik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlMjsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoU01DOTFYX0dQSU9fUFdSRFdOLCAwKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChTTUM5MVhfR1BJT19SRVNFVCwgIlNNQzkxWCByZXNldCIpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZTM7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFNNQzkxWF9HUElPX1JFU0VULCAwKTsKKwlncGlvX3NldF92YWx1ZShTTUM5MVhfR1BJT19SRVNFVCwgMSk7CisJbXNsZWVwKDEwMCk7CisJZ3Bpb19zZXRfdmFsdWUoU01DOTFYX0dQSU9fUkVTRVQsIDApOworCisJcmV0dXJuOworCitmcmVlMzoKKwlncGlvX2ZyZWUoU01DOTFYX0dQSU9fUFdSRFdOKTsKK2ZyZWUyOgorCWdwaW9fZnJlZShTTUM5MVhfR1BJT19JUlEpOworZnJlZTE6CisJZ3BtY19jc19mcmVlKFNNQzkxWF9DUyk7CisKKwlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBpbml0aWFsaXplIHNtYzkxeFxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9tYWRjX3BsYXRmb3JtX2RhdGEgcng1MV9tYWRjX2RhdGEgPSB7CisJLmlycV9saW5lCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBtbWNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJleHRlcm5hbCIsCisJCS5tbWMJCT0gMSwKKwkJLndpcmVzCQk9IDQsCisJCS5jb3Zlcl9vbmx5CT0gdHJ1ZSwKKwkJLmdwaW9fY2QJPSAxNjAsCisJCS5ncGlvX3dwCT0gLUVJTlZBTCwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImludGVybmFsIiwKKwkJLm1tYwkJPSAyLAorCQkud2lyZXMJCT0gOCwKKwkJLmdwaW9fY2QJPSAtRUlOVkFMLAorCQkuZ3Bpb193cAk9IC1FSU5WQUwsCisJfSwKKwl7fQkvKiBUZXJtaW5hdG9yICovCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92bW1jMV9zdXBwbHkgPSB7CisJLnN1cHBseQkJCT0gInZtbWMiLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHJ4NTFfdm1tYzJfc3VwcGx5ID0geworCS5zdXBwbHkJCQk9ICJ2bW1jIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZzaW1fc3VwcGx5ID0geworCS5zdXBwbHkJCQk9ICJ2bW1jX2F1eCIsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcng1MV92YXV4MSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lCQkJPSAiVjI4IiwKKwkJLm1pbl91VgkJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJCT0gMjgwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSByeDUxX3ZhdXgyID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUJCQk9ICJWQ1NJIiwKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKK307CisKKy8qIFZBVVgzIC0gYWRkcyBtb3JlIHBvd2VyIHRvIFZJT18xOCByYWlsICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcng1MV92YXV4MyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lCQkJPSAiVkNBTV9ESUdfMTgiLAorCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSByeDUxX3ZhdXg0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUJCQk9ICJWQ0FNX0FOQV8yOCIsCisJCS5taW5fdVYJCQk9IDI4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDI4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJ4NTFfdm1tYzEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODUwMDAwLAorCQkubWF4X3VWCQkJPSAzMTUwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZyeDUxX3ZtbWMxX3N1cHBseSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSByeDUxX3ZtbWMyID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUJCQk9ICJWTU1DMl8zMCIsCisJCS5taW5fdVYJCQk9IDE4NTAwMDAsCisJCS5tYXhfdVYJCQk9IDMxNTAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZyeDUxX3ZtbWMyX3N1cHBseSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSByeDUxX3ZzaW0gPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZNTUMyX0lPXzE4IiwKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnJ4NTFfdnNpbV9zdXBwbHksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcng1MV92ZGFjID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKK307CisKK3N0YXRpYyBpbnQgcng1MV90d2xncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbikKK3sKKwkvKiBGSVhNRSB0aGlzIGdwaW8gc2V0dXAgaXMganVzdCBhIHBsYWNlaG9sZGVyIGZvciBub3cgKi8KKwlncGlvX3JlcXVlc3QoZ3BpbyArIDYsICJiYWNrbGlnaHRfcHdtIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyA2LCAwKTsKKwlncGlvX3JlcXVlc3QoZ3BpbyArIDcsICJzcGVha2VyX2VuIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyA3LCAxKTsKKworCS8qIHNldCB1cCBNTUMgYWRhcHRlcnMsIGxpbmtpbmcgdGhlaXIgcmVndWxhdG9ycyB0byB0aGVtICovCisJdHdsNDAzMF9tbWNfaW5pdChtbWMpOworCXJ4NTFfdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CisJcng1MV92bW1jMl9zdXBwbHkuZGV2ID0gbW1jWzFdLmRldjsKKwlyeDUxX3ZzaW1fc3VwcGx5LmRldiA9IG1tY1sxXS5kZXY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSByeDUxX2dwaW9fZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCQk9IE9NQVBfTUFYX0dQSU9fTElORVMsCisJLmlycV9iYXNlCQk9IFRXTDQwMzBfR1BJT19JUlFfQkFTRSwKKwkuaXJxX2VuZAkJPSBUV0w0MDMwX0dQSU9fSVJRX0VORCwKKwkucHVsbGRvd25zCQk9IEJJVCgwKSB8IEJJVCgxKSB8IEJJVCgyKSB8IEJJVCgzKQorCQkJCXwgQklUKDQpIHwgQklUKDUpCisJCQkJfCBCSVQoOCkgfCBCSVQoOSkgfCBCSVQoMTApIHwgQklUKDExKQorCQkJCXwgQklUKDEyKSB8IEJJVCgxMykgfCBCSVQoMTQpIHwgQklUKDE1KQorCQkJCXwgQklUKDE2KSB8IEJJVCgxNykgLAorCS5zZXR1cAkJCT0gcng1MV90d2xncGlvX3NldHVwLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgcng1MV90d2xkYXRhID0geworCS5pcnFfYmFzZQkJPSBUV0w0MDMwX0lSUV9CQVNFLAorCS5pcnFfZW5kCQk9IFRXTDQwMzBfSVJRX0VORCwKKworCS8qIHBsYXRmb3JtX2RhdGEgZm9yIGNoaWxkcmVuIGdvZXMgaGVyZSAqLworCS5ncGlvCQkJPSAmcng1MV9ncGlvX2RhdGEsCisJLmtleXBhZAkJCT0gJnJ4NTFfa3BfZGF0YSwKKwkubWFkYwkJCT0gJnJ4NTFfbWFkY19kYXRhLAorCisJLnZhdXgxCQkJPSAmcng1MV92YXV4MSwKKwkudmF1eDIJCQk9ICZyeDUxX3ZhdXgyLAorCS52YXV4MwkJCT0gJnJ4NTFfdmF1eDMsCisJLnZhdXg0CQkJPSAmcng1MV92YXV4NCwKKwkudm1tYzEJCQk9ICZyeDUxX3ZtbWMxLAorCS52bW1jMgkJCT0gJnJ4NTFfdm1tYzIsCisJLnZzaW0JCQk9ICZyeDUxX3ZzaW0sCisJLnZkYWMJCQk9ICZyeDUxX3ZkYWMsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidHdsNTAzMCIsIDB4NDgpLAorCQkuZmxhZ3MgPSBJMkNfQ0xJRU5UX1dBS0UsCisJCS5pcnEgPSBJTlRfMzRYWF9TWVNfTklSUSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcng1MV90d2xkYXRhLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCByeDUxX2kyY19pbml0KHZvaWQpCit7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDI2MDAsIHJ4NTFfcGVyaXBoZXJhbHNfaTJjX2JvYXJkX2luZm9fMSwKKwkJCUFSUkFZX1NJWkUocng1MV9wZXJpcGhlcmFsc19pMmNfYm9hcmRfaW5mb18xKSk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDEwMCwgTlVMTCwgMCk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDMsIDQwMCwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKKwordm9pZCBfX2luaXQgcng1MV9wZXJpcGhlcmFsc19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fYWRkX2RldmljZXMocng1MV9wZXJpcGhlcmFsc19kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUocng1MV9wZXJpcGhlcmFsc19kZXZpY2VzKSk7CisJcng1MV9pMmNfaW5pdCgpOworCXJ4NTFfaW5pdF9zbWM5MXgoKTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBkYWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IE5va2lhCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvbWNzcGkuaD4KKyNpbmNsdWRlIDxtYWNoL211eC5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gva2V5cGFkLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2dwbWMuaD4KKyNpbmNsdWRlIDxtYWNoL3VzYi5oPgorCitzdGF0aWMgc3RydWN0IG9tYXBfdWFydF9jb25maWcgcng1MV91YXJ0X2NvbmZpZyA9IHsKKwkuZW5hYmxlZF91YXJ0cwk9ICgoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgcng1MV9sY2RfY29uZmlnID0geworCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2ZibWVtX2NvbmZpZyByeDUxX2ZibWVtMF9jb25maWcgPSB7CisJLnNpemUgPSA3NTIgKiAxMDI0LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2ZibWVtX2NvbmZpZyByeDUxX2ZibWVtMV9jb25maWcgPSB7CisJLnNpemUgPSA3NTIgKiAxMDI0LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2ZibWVtX2NvbmZpZyByeDUxX2ZibWVtMl9jb25maWcgPSB7CisJLnNpemUgPSA3NTIgKiAxMDI0LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19rZXJuZWwgcng1MV9jb25maWdbXSA9IHsKKwl7IE9NQVBfVEFHX1VBUlQsCSZyeDUxX3VhcnRfY29uZmlnIH0sCisJeyBPTUFQX1RBR19GQk1FTSwJJnJ4NTFfZmJtZW0wX2NvbmZpZyB9LAorCXsgT01BUF9UQUdfRkJNRU0sCSZyeDUxX2ZibWVtMV9jb25maWcgfSwKKwl7IE9NQVBfVEFHX0ZCTUVNLAkmcng1MV9mYm1lbTJfY29uZmlnIH0sCisJeyBPTUFQX1RBR19MQ0QsCQkmcng1MV9sY2RfY29uZmlnIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9pbml0X2lycSh2b2lkKQoreworCW9tYXAyX2luaXRfY29tbW9uX2h3KE5VTEwpOworCW9tYXBfaW5pdF9pcnEoKTsKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitleHRlcm4gdm9pZCBfX2luaXQgcng1MV9wZXJpcGhlcmFsc19pbml0KHZvaWQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9pbml0KHZvaWQpCit7CisJb21hcF9ib2FyZF9jb25maWcgPSByeDUxX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShyeDUxX2NvbmZpZyk7CisJb21hcF9zZXJpYWxfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoKTsKKwlyeDUxX3BlcmlwaGVyYWxzX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHJ4NTFfbWFwX2lvKHZvaWQpCit7CisJb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOworCW9tYXAyX21hcF9jb21tb25faW8oKTsKK30KKworTUFDSElORV9TVEFSVChOT0tJQV9SWDUxLCAiTm9raWEgUlgtNTEgYm9hcmQiKQorCS8qIE1haW50YWluZXI6IExhdXJpIExldWtrdW5lbiA8bGF1cmkubGV1a2t1bmVuQG5va2lhLmNvbT4gKi8KKwkucGh5c19pbwk9IDB4NDgwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGQ4MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvCQk9IHJ4NTFfbWFwX2lvLAorCS5pbml0X2lycQk9IHJ4NTFfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IHJ4NTFfaW5pdCwKKwkudGltZXIJCT0gJm9tYXBfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCmluZGV4IGNlNGQ0NmEuLjQyNDdhMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKQEAgLTI2LDExICsyNiwxMCBAQAogCiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvY2xvY2tkb21haW4uaD4KLSNpbmNsdWRlIDxtYWNoL3NyYW0uaD4KICNpbmNsdWRlIDxtYWNoL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCi0jaW5jbHVkZSAibWVtb3J5LmgiCisjaW5jbHVkZSA8bWFjaC9zZHJjLmg+CiAjaW5jbHVkZSAic2RyYy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAicHJtLmgiCkBAIC00Niw3ICs0NSw3IEBACiAjZGVmaW5lIERQTExfTUlOX0RJVklERVIJCTEKIAogLyogUG9zc2libGUgZXJyb3IgcmVzdWx0cyBmcm9tIF9kcGxsX3Rlc3RfbXVsdCAqLwotI2RlZmluZSBEUExMX01VTFRfVU5ERVJGTE9XCQkoMSA8PCAwKQorI2RlZmluZSBEUExMX01VTFRfVU5ERVJGTE9XCQktMQogCiAvKgogICogU2NhbGUgZmFjdG9yIHRvIG1pdGlnYXRlIHJvdW5kb2ZmIGVycm9ycyBpbiBEUExMIHJhdGUgcm91bmRpbmcuCkBAIC01OSw2ICs1OCwxNiBAQAogI2RlZmluZSBEUExMX1JPVU5ESU5HX1ZBTAkJKChEUExMX1NDQUxFX0JBU0UgLyAyKSAqIFwKIAkJCQkJIChEUExMX1NDQUxFX0ZBQ1RPUiAvIERQTExfU0NBTEVfQkFTRSkpCiAKKy8qIERQTEwgdmFsaWQgRmludCBmcmVxdWVuY3kgYmFuZCBsaW1pdHMgLSBmcm9tIDM0eHggVFJNIFNlY3Rpb24gNC43LjYuMiAqLworI2RlZmluZSBEUExMX0ZJTlRfQkFORDFfTUlOCQk3NTAwMDAKKyNkZWZpbmUgRFBMTF9GSU5UX0JBTkQxX01BWAkJMjEwMDAwMAorI2RlZmluZSBEUExMX0ZJTlRfQkFORDJfTUlOCQk3NTAwMDAwCisjZGVmaW5lIERQTExfRklOVF9CQU5EMl9NQVgJCTIxMDAwMDAwCisKKy8qIF9kcGxsX3Rlc3RfZmludCgpIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBEUExMX0ZJTlRfVU5ERVJGTE9XCQktMQorI2RlZmluZSBEUExMX0ZJTlRfSU5WQUxJRAkJLTIKKwogdTggY3B1X21hc2s7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjYsNiArNzUsNzQgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qKgorICogX29tYXAyeHh4X2Nsa19jb21taXQgLSBjb21taXQgY2xvY2sgcGFyZW50L3JhdGUgY2hhbmdlcyBpbiBoYXJkd2FyZQorICogQGNsazogc3RydWN0IGNsayAqCisgKgorICogSWYgQGNsayBoYXMgdGhlIERFTEFZRURfQVBQIGZsYWcgc2V0LCBtZWFuaW5nIHRoYXQgcGFyZW50L3JhdGUgY2hhbmdlcworICogZG9uJ3QgdGFrZSBlZmZlY3QgdW50aWwgdGhlIFZBTElEX0NPTkZJRyBiaXQgaXMgd3JpdHRlbiwgd3JpdGUgdGhlCisgKiBWQUxJRF9DT05GSUcgYml0IGFuZCB3YWl0IGZvciB0aGUgd3JpdGUgdG8gY29tcGxldGUuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIF9vbWFwMnh4eF9jbGtfY29tbWl0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQorCQlyZXR1cm47CisKKwlpZiAoIShjbGstPmZsYWdzICYgREVMQVlFRF9BUFApKQorCQlyZXR1cm47CisKKwlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQMjRYWF9WQUxJRF9DT05GSUcsIE9NQVAyNFhYX0dSX01PRCwKKwkJT01BUDI0WFhfUFJDTV9DTEtDRkdfQ1RSTF9PRkZTRVQpOworCS8qIE9DUCBiYXJyaWVyICovCisJcHJtX3JlYWRfbW9kX3JlZyhPTUFQMjRYWF9HUl9NT0QsIE9NQVAyNFhYX1BSQ01fQ0xLQ0ZHX0NUUkxfT0ZGU0VUKTsKK30KKworLyoKKyAqIF9kcGxsX3Rlc3RfZmludCAtIHRlc3Qgd2hldGhlciBhbiBGaW50IHZhbHVlIGlzIHZhbGlkIGZvciB0aGUgRFBMTAorICogQGNsazogRFBMTCBzdHJ1Y3QgY2xrIHRvIHRlc3QKKyAqIEBuOiBkaXZpZGVyIHZhbHVlIChOKSB0byB0ZXN0CisgKgorICogVGVzdHMgd2hldGhlciBhIHBhcnRpY3VsYXIgZGl2aWRlciBAbiB3aWxsIHJlc3VsdCBpbiBhIHZhbGlkIERQTEwKKyAqIGludGVybmFsIGNsb2NrIGZyZXF1ZW5jeSBGaW50LiBTZWUgdGhlIDM0eHggVFJNIDQuNy42LjIgIkRQTEwgSml0dGVyCisgKiBDb3JyZWN0aW9uIi4gIFJldHVybnMgMCBpZiBPSywgLTEgaWYgdGhlIGVuY2xvc2luZyBsb29wIGNhbiB0ZXJtaW5hdGUKKyAqIChhc3N1bWluZyB0aGF0IGl0IGlzIGNvdW50aW5nIE4gdXB3YXJkcyksIG9yIC0yIGlmIHRoZSBlbmNsb3NpbmcgbG9vcAorICogc2hvdWxkIHNraXAgdG8gdGhlIG5leHQgaXRlcmF0aW9uIChhZ2FpbiBhc3N1bWluZyBOIGlzIGluY3JlYXNpbmcpLgorICovCitzdGF0aWMgaW50IF9kcGxsX3Rlc3RfZmludChzdHJ1Y3QgY2xrICpjbGssIHU4IG4pCit7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJbG9uZyBmaW50OworCWludCByZXQgPSAwOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKworCS8qIERQTEwgZGl2aWRlciBtdXN0IHJlc3VsdCBpbiBhIHZhbGlkIGppdHRlciBjb3JyZWN0aW9uIHZhbCAqLworCWZpbnQgPSBjbGstPnBhcmVudC0+cmF0ZSAvIChuICsgMSk7CisJaWYgKGZpbnQgPCBEUExMX0ZJTlRfQkFORDFfTUlOKSB7CisKKwkJcHJfZGVidWcoInJlamVjdGluZyBuPSVkIGR1ZSB0byBGaW50IGZhaWx1cmUsICIKKwkJCSAibG93ZXJpbmcgbWF4X2RpdmlkZXJcbiIsIG4pOworCQlkZC0+bWF4X2RpdmlkZXIgPSBuOworCQlyZXQgPSBEUExMX0ZJTlRfVU5ERVJGTE9XOworCisJfSBlbHNlIGlmIChmaW50ID4gRFBMTF9GSU5UX0JBTkQxX01BWCAmJgorCQkgICBmaW50IDwgRFBMTF9GSU5UX0JBTkQyX01JTikgeworCisJCXByX2RlYnVnKCJyZWplY3Rpbmcgbj0lZCBkdWUgdG8gRmludCBmYWlsdXJlXG4iLCBuKTsKKwkJcmV0ID0gRFBMTF9GSU5UX0lOVkFMSUQ7CisKKwl9IGVsc2UgaWYgKGZpbnQgPiBEUExMX0ZJTlRfQkFORDJfTUFYKSB7CisKKwkJcHJfZGVidWcoInJlamVjdGluZyBuPSVkIGR1ZSB0byBGaW50IGZhaWx1cmUsICIKKwkJCSAiYm9vc3RpbmcgbWluX2RpdmlkZXJcbiIsIG4pOworCQlkZC0+bWluX2RpdmlkZXIgPSBuOworCQlyZXQgPSBEUExMX0ZJTlRfSU5WQUxJRDsKKworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qKgogICogb21hcDJfaW5pdF9jbGtfY2xrZG0gLSBsb29rIHVwIGEgY2xvY2tkb21haW4gbmFtZSwgc3RvcmUgcG9pbnRlciBpbiBjbGsKICAqIEBjbGs6IE9NQVAgY2xvY2sgc3RydWN0IHB0ciB0byB1c2UKICAqCkBAIC0xMjAsNyArMTk3LDcgQEAKIAkJCQkJCSBjbGstPm5hbWUsIGNsa3MtPnBhcmVudC0+bmFtZSwKIAkJCQkJCSAoKGNsay0+cGFyZW50KSA/CiAJCQkJCQkgIGNsay0+cGFyZW50LT5uYW1lIDogIk5VTEwiKSk7Ci0JCQkJCWNsay0+cGFyZW50ID0gY2xrcy0+cGFyZW50OworCQkJCQljbGtfcmVwYXJlbnQoY2xrLCBjbGtzLT5wYXJlbnQpOwogCQkJCX07CiAJCQkJZm91bmQgPSAxOwogCQkJfQpAQCAtMTM0LDI1ICsyMTEsNTIgQEAKIAlyZXR1cm47CiB9CiAKLS8qIFJldHVybnMgdGhlIERQTEwgcmF0ZSAqLworLyoqCisgKiBvbWFwMl9nZXRfZHBsbF9yYXRlIC0gcmV0dXJucyB0aGUgY3VycmVudCBEUExMIENMS09VVCByYXRlCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgYSBEUExMCisgKgorICogRFBMTHMgY2FuIGJlIGxvY2tlZCBvciBieXBhc3NlZCAtIGJhc2ljYWxseSwgZW5hYmxlZCBvciBkaXNhYmxlZC4KKyAqIFdoZW4gbG9ja2VkLCB0aGUgRFBMTCBvdXRwdXQgZGVwZW5kcyBvbiB0aGUgTSBhbmQgTiB2YWx1ZXMuICBXaGVuCisgKiBieXBhc3NlZCwgb24gT01BUDJ4eHgsIHRoZSBvdXRwdXQgcmF0ZSBpcyBlaXRoZXIgdGhlIDMyS2lIeiBjbG9jaworICogb3Igc3lzX2Nsay4gIEJ5cGFzcyByYXRlcyBvbiBPTUFQMyBkZXBlbmQgb24gdGhlIERQTEw6IERQTExzIDEgYW5kCisgKiAyIGFyZSBieXBhc3NlZCB3aXRoIGRwbGwxX2ZjbGsgYW5kIGRwbGwyX2ZjbGsgcmVzcGVjdGl2ZWx5CisgKiAoZ2VuZXJhdGVkIGJ5IERQTEwzKSwgd2hpbGUgRFBMTCAzLCA0LCBhbmQgNSBieXBhc3MgcmF0ZXMgYXJlIHN5c19jbGsuCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IERQTEwgQ0xLT1VUIHJhdGUgKCpub3QqIENMS09VVFgyKSBpZiB0aGUgRFBMTCBpcworICogbG9ja2VkLCBvciB0aGUgYXBwcm9wcmlhdGUgYnlwYXNzIHJhdGUgaWYgdGhlIERQTEwgaXMgYnlwYXNzZWQsIG9yIDAKKyAqIGlmIHRoZSBjbG9jayBAY2xrIGlzIG5vdCBhIERQTEwuCisgKi8KIHUzMiBvbWFwMl9nZXRfZHBsbF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlsb25nIGxvbmcgZHBsbF9jbGs7Ci0JdTMyIGRwbGxfbXVsdCwgZHBsbF9kaXYsIGRwbGw7CisJdTMyIGRwbGxfbXVsdCwgZHBsbF9kaXYsIHY7CiAJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CiAKIAlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCS8qIFJFVklTSVQ6IFdoYXQgZG8gd2UgcmV0dXJuIG9uIGVycm9yPyAqLwogCWlmICghZGQpCiAJCXJldHVybiAwOwogCi0JZHBsbCA9IF9fcmF3X3JlYWRsKGRkLT5tdWx0X2RpdjFfcmVnKTsKLQlkcGxsX211bHQgPSBkcGxsICYgZGQtPm11bHRfbWFzazsKKwkvKiBSZXR1cm4gYnlwYXNzIHJhdGUgaWYgRFBMTCBpcyBieXBhc3NlZCAqLworCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpOworCXYgJj0gZGQtPmVuYWJsZV9tYXNrOworCXYgPj49IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaWYgKHYgPT0gT01BUDJYWFhfRU5fRFBMTF9MUEJZUEFTUyB8fAorCQkgICAgdiA9PSBPTUFQMlhYWF9FTl9EUExMX0ZSQllQQVNTKQorCQkJcmV0dXJuIGRkLT5jbGtfYnlwYXNzLT5yYXRlOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJaWYgKHYgPT0gT01BUDNYWFhfRU5fRFBMTF9MUEJZUEFTUyB8fAorCQkgICAgdiA9PSBPTUFQM1hYWF9FTl9EUExMX0ZSQllQQVNTKQorCQkJcmV0dXJuIGRkLT5jbGtfYnlwYXNzLT5yYXRlOworCX0KKworCXYgPSBfX3Jhd19yZWFkbChkZC0+bXVsdF9kaXYxX3JlZyk7CisJZHBsbF9tdWx0ID0gdiAmIGRkLT5tdWx0X21hc2s7CiAJZHBsbF9tdWx0ID4+PSBfX2ZmcyhkZC0+bXVsdF9tYXNrKTsKLQlkcGxsX2RpdiA9IGRwbGwgJiBkZC0+ZGl2MV9tYXNrOworCWRwbGxfZGl2ID0gdiAmIGRkLT5kaXYxX21hc2s7CiAJZHBsbF9kaXYgPj49IF9fZmZzKGRkLT5kaXYxX21hc2spOwogCi0JZHBsbF9jbGsgPSAobG9uZyBsb25nKWNsay0+cGFyZW50LT5yYXRlICogZHBsbF9tdWx0OworCWRwbGxfY2xrID0gKGxvbmcgbG9uZylkZC0+Y2xrX3JlZi0+cmF0ZSAqIGRwbGxfbXVsdDsKIAlkb19kaXYoZHBsbF9jbGssIGRwbGxfZGl2ICsgMSk7CiAKIAlyZXR1cm4gZHBsbF9jbGs7CkBAIC0xNjIsMTQgKzI2NiwxMSBAQAogICogVXNlZCBmb3IgY2xvY2tzIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgcGFyZW50IGNsb2NrLAogICogZGl2aWRlZCBieSBzb21lIGZhY3RvcgogICovCi12b2lkIG9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3Vuc2lnbmVkIGxvbmcgb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewogCVdBUk5fT04oIWNsay0+Zml4ZWRfZGl2KTsKIAotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gY2xrLT5maXhlZF9kaXY7Ci0KLQlpZiAoY2xrLT5mbGFncyAmIFJBVEVfUFJPUEFHQVRFUykKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBjbGstPmZpeGVkX2RpdjsKIH0KIAogLyoqCkBAIC0xOTAsMTEgKzI5MSwxMCBAQAogCSAqIDI0eHggdXNlcyAwIHRvIGluZGljYXRlIG5vdCByZWFkeSwgYW5kIDEgdG8gaW5kaWNhdGUgcmVhZHkuCiAJICogMzR4eCByZXZlcnNlcyB0aGlzLCBqdXN0IHRvIGtlZXAgdXMgb24gb3VyIHRvZXMKIAkgKi8KLQlpZiAoY3B1X21hc2sgJiAoUkFURV9JTl8yNDJYIHwgUkFURV9JTl8yNDNYKSkgeworCWlmIChjcHVfbWFzayAmIChSQVRFX0lOXzI0MlggfCBSQVRFX0lOXzI0M1gpKQogCQllbmEgPSBtYXNrOwotCX0gZWxzZSBpZiAoY3B1X21hc2sgJiBSQVRFX0lOXzM0M1gpIHsKKwllbHNlIGlmIChjcHVfbWFzayAmIFJBVEVfSU5fMzQzWCkKIAkJZW5hID0gMDsKLQl9CiAKIAkvKiBXYWl0IGZvciBsb2NrICovCiAJd2hpbGUgKCgoX19yYXdfcmVhZGwocmVnKSAmIG1hc2spICE9IGVuYSkgJiYKQEAgLTIyOCwzMSArMzI4LDEyIEBACiAJICogaXQgYW5kIHB1bGwgaXQgaW50byBzdHJ1Y3QgY2xrIGl0c2VsZiBzb21laG93LgogCSAqLwogCXJlZyA9IGNsay0+ZW5hYmxlX3JlZzsKLQlpZiAoKCgodTMyKXJlZyAmIDB4ZmYpID49IENNX0ZDTEtFTjEpICYmCi0JICAgICgoKHUzMilyZWcgJiAweGZmKSA8PSBPTUFQMjRYWF9DTV9GQ0xLRU4yKSkKLQkJb3RoZXJfcmVnID0gKHZvaWQgX19pb21lbSAqKSgoKHUzMilyZWcgJiB+MHhmMCkgfCAweDEwKTsgLyogQ01fSUNMS0VOKiAqLwotCWVsc2UgaWYgKCgoKHUzMilyZWcgJiAweGZmKSA+PSBDTV9JQ0xLRU4xKSAmJgotCQkgKCgodTMyKXJlZyAmIDB4ZmYpIDw9IE9NQVAyNFhYX0NNX0lDTEtFTjQpKQotCQlvdGhlcl9yZWcgPSAodm9pZCBfX2lvbWVtICopKCgodTMyKXJlZyAmIH4weGYwKSB8IDB4MDApOyAvKiBDTV9GQ0xLRU4qICovCi0JZWxzZQotCQlyZXR1cm47CiAKLQkvKiBSRVZJU0lUOiBXaGF0IGFyZSB0aGUgYXBwcm9wcmlhdGUgZXhjbHVzaW9ucyBmb3IgMzRYWD8gKi8KLQkvKiBObyBjaGVjayBmb3IgRFNTIG9yIGNhbSBjbG9ja3MgKi8KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkgJiYgKCh1MzIpcmVnICYgMHgwZikgPT0gMCkgeyAvKiBDTV97RixJfUNMS0VOMSAqLwotCQlpZiAoY2xrLT5lbmFibGVfYml0ID09IE9NQVAyNFhYX0VOX0RTUzJfU0hJRlQgfHwKLQkJICAgIGNsay0+ZW5hYmxlX2JpdCA9PSBPTUFQMjRYWF9FTl9EU1MxX1NISUZUIHx8Ci0JCSAgICBjbGstPmVuYWJsZV9iaXQgPT0gT01BUDI0WFhfRU5fQ0FNX1NISUZUKQotCQkJcmV0dXJuOwotCX0KLQotCS8qIFJFVklTSVQ6IFdoYXQgYXJlIHRoZSBhcHByb3ByaWF0ZSBleGNsdXNpb25zIGZvciAzNFhYPyAqLwotCS8qIE9NQVAzOiBpZ25vcmUgRFNTLW1vZCBjbG9ja3MgKi8KLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkgJiYKLQkgICAgKCgodTMyKXJlZyAmIH4weGZmKSA9PSAodTMyKU9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCAwKSB8fAotCSAgICAgKCgoKHUzMilyZWcgJiB+MHhmZikgPT0gKHUzMilPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIDApKSAmJgotCSAgICAgY2xrLT5lbmFibGVfYml0ID09IE9NQVAzNDMwX0VOX1NTSV9TSElGVCkpKQotCQlyZXR1cm47CisJLyoKKwkgKiBDb252ZXJ0IENNX0lDTEtFTiogPC0+IENNX0ZDTEtFTiouICBUaGlzIGNvbnZlcnNpb24gYXNzdW1lcworCSAqIGl0J3MganVzdCBhIG1hdHRlciBvZiBYT1JpbmcgdGhlIGJpdHMuCisJICovCisJb3RoZXJfcmVnID0gKHZvaWQgX19pb21lbSAqKSgodTMyKXJlZyBeIChDTV9GQ0xLRU4gXiBDTV9JQ0xLRU4pKTsKIAogCS8qIENoZWNrIGlmIGJvdGggZnVuY3Rpb25hbCBhbmQgaW50ZXJmYWNlIGNsb2NrcwogCSAqIGFyZSBydW5uaW5nLiAqLwpAQCAtMjY0LDE4ICszNDUsOSBAQAogCW9tYXAyX3dhaXRfY2xvY2tfcmVhZHkoc3RfcmVnLCBiaXQsIGNsay0+bmFtZSk7CiB9CiAKLS8qIEVuYWJsZXMgY2xvY2sgd2l0aG91dCBjb25zaWRlcmluZyBwYXJlbnQgZGVwZW5kZW5jaWVzIG9yIHVzZSBjb3VudAotICogUkVWSVNJVDogTWF5YmUgY2hhbmdlIHRoaXMgdG8gdXNlIGNsay0+ZW5hYmxlIGxpa2Ugb24gb21hcDE/Ci0gKi8KLWludCBfb21hcDJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgaW50IG9tYXAyX2RmbHRfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JdTMyIHJlZ3ZhbDMyOwotCi0JaWYgKGNsay0+ZmxhZ3MgJiAoQUxXQVlTX0VOQUJMRUQgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0spKQotCQlyZXR1cm4gMDsKLQotCWlmIChjbGstPmVuYWJsZSkKLQkJcmV0dXJuIGNsay0+ZW5hYmxlKGNsayk7CisJdTMyIHY7CiAKIAlpZiAodW5saWtlbHkoY2xrLT5lbmFibGVfcmVnID09IE5VTEwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2xvY2suYzogRW5hYmxlIGZvciAlcyB3aXRob3V0IGVuYWJsZSBjb2RlXG4iLApAQCAtMjgzLDMzICszNTUsMzggQEAKIAkJcmV0dXJuIDA7IC8qIFJFVklTSVQ6IC1FSU5WQUwgKi8KIAl9CiAKLQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJdiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CiAJaWYgKGNsay0+ZmxhZ3MgJiBJTlZFUlRfRU5BQkxFKQotCQlyZWd2YWwzMiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwkJdiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKIAllbHNlCi0JCXJlZ3ZhbDMyIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7Ci0JX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOwotCXdtYigpOwotCi0Jb21hcDJfY2xrX3dhaXRfcmVhZHkoY2xrKTsKKwkJdiB8PSAoMSA8PCBjbGstPmVuYWJsZV9iaXQpOworCV9fcmF3X3dyaXRlbCh2LCBjbGstPmVuYWJsZV9yZWcpOworCXYgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOyAvKiBPQ1AgYmFycmllciAqLwogCiAJcmV0dXJuIDA7CiB9CiAKLS8qIERpc2FibGVzIGNsb2NrIHdpdGhvdXQgY29uc2lkZXJpbmcgcGFyZW50IGRlcGVuZGVuY2llcyBvciB1c2UgY291bnQgKi8KLXZvaWQgX29tYXAyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyBpbnQgb21hcDJfZGZsdF9jbGtfZW5hYmxlX3dhaXQoc3RydWN0IGNsayAqY2xrKQogewotCXUzMiByZWd2YWwzMjsKKwlpbnQgcmV0OwogCi0JaWYgKGNsay0+ZmxhZ3MgJiAoQUxXQVlTX0VOQUJMRUQgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0spKQotCQlyZXR1cm47Ci0KLQlpZiAoY2xrLT5kaXNhYmxlKSB7Ci0JCWNsay0+ZGlzYWJsZShjbGspOwotCQlyZXR1cm47CisJaWYgKCFjbGstPmVuYWJsZV9yZWcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jay5jOiBFbmFibGUgZm9yICVzIHdpdGhvdXQgZW5hYmxlIGNvZGVcbiIsCisJCSAgICAgICBjbGstPm5hbWUpOworCQlyZXR1cm4gMDsgLyogUkVWSVNJVDogLUVJTlZBTCAqLwogCX0KIAotCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gTlVMTCkgeworCXJldCA9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZShjbGspOworCWlmIChyZXQgPT0gMCkKKwkJb21hcDJfY2xrX3dhaXRfcmVhZHkoY2xrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBvbWFwMl9kZmx0X2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgdjsKKworCWlmICghY2xrLT5lbmFibGVfcmVnKSB7CiAJCS8qCiAJCSAqICdJbmRlcGVuZGVudCcgaGVyZSByZWZlcnMgdG8gYSBjbG9jayB3aGljaCBpcyBub3QKIAkJICogY29udHJvbGxlZCBieSBpdHMgcGFyZW50LgpAQCAtMzE5LDIwICszOTYsNDQgQEAKIAkJcmV0dXJuOwogCX0KIAotCXJlZ3ZhbDMyID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKIAlpZiAoY2xrLT5mbGFncyAmIElOVkVSVF9FTkFCTEUpCi0JCXJlZ3ZhbDMyIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJCXYgfD0gKDEgPDwgY2xrLT5lbmFibGVfYml0KTsKIAllbHNlCi0JCXJlZ3ZhbDMyICY9IH4oMSA8PCBjbGstPmVuYWJsZV9iaXQpOwotCV9fcmF3X3dyaXRlbChyZWd2YWwzMiwgY2xrLT5lbmFibGVfcmVnKTsKLQl3bWIoKTsKKwkJdiAmPSB+KDEgPDwgY2xrLT5lbmFibGVfYml0KTsKKwlfX3Jhd193cml0ZWwodiwgY2xrLT5lbmFibGVfcmVnKTsKKwkvKiBObyBPQ1AgYmFycmllciBuZWVkZWQgaGVyZSBzaW5jZSBpdCBpcyBhIGRpc2FibGUgb3BlcmF0aW9uICovCit9CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAyX2RmbHRfd2FpdCA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZV93YWl0LAorCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKK307CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAyX2RmbHQgPSB7CisJLmVuYWJsZQkJPSBvbWFwMl9kZmx0X2Nsa19lbmFibGUsCisJLmRpc2FibGUJPSBvbWFwMl9kZmx0X2Nsa19kaXNhYmxlLAorfTsKKworLyogRW5hYmxlcyBjbG9jayB3aXRob3V0IGNvbnNpZGVyaW5nIHBhcmVudCBkZXBlbmRlbmNpZXMgb3IgdXNlIGNvdW50CisgKiBSRVZJU0lUOiBNYXliZSBjaGFuZ2UgdGhpcyB0byB1c2UgY2xrLT5lbmFibGUgbGlrZSBvbiBvbWFwMT8KKyAqLworc3RhdGljIGludCBfb21hcDJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+b3BzLT5lbmFibGUoY2xrKTsKK30KKworLyogRGlzYWJsZXMgY2xvY2sgd2l0aG91dCBjb25zaWRlcmluZyBwYXJlbnQgZGVwZW5kZW5jaWVzIG9yIHVzZSBjb3VudCAqLworc3RhdGljIHZvaWQgX29tYXAyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPm9wcy0+ZGlzYWJsZShjbGspOwogfQogCiB2b2lkIG9tYXAyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlpZiAoY2xrLT51c2Vjb3VudCA+IDAgJiYgISgtLWNsay0+dXNlY291bnQpKSB7CiAJCV9vbWFwMl9jbGtfZGlzYWJsZShjbGspOwotCQlpZiAobGlrZWx5KCh1MzIpY2xrLT5wYXJlbnQpKQorCQlpZiAoY2xrLT5wYXJlbnQpCiAJCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CiAJCWlmIChjbGstPmNsa2RtKQogCQkJb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoY2xrLT5jbGtkbSwgY2xrKTsKQEAgLTM0NSwzMCArNDQ2LDI5IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKLQkJaWYgKGxpa2VseSgodTMyKWNsay0+cGFyZW50KSkKLQkJCXJldCA9IG9tYXAyX2Nsa19lbmFibGUoY2xrLT5wYXJlbnQpOwotCi0JCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJCWNsay0+dXNlY291bnQtLTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQogCQlpZiAoY2xrLT5jbGtkbSkKIAkJCW9tYXAyX2Nsa2RtX2Nsa19lbmFibGUoY2xrLT5jbGtkbSwgY2xrKTsKIAorCQlpZiAoY2xrLT5wYXJlbnQpIHsKKwkJCXJldCA9IG9tYXAyX2Nsa19lbmFibGUoY2xrLT5wYXJlbnQpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycjsKKwkJfQorCiAJCXJldCA9IF9vbWFwMl9jbGtfZW5hYmxlKGNsayk7Ci0KLQkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgewotCQkJaWYgKGNsay0+Y2xrZG0pCi0JCQkJb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoY2xrLT5jbGtkbSwgY2xrKTsKLQotCQkJaWYgKGNsay0+cGFyZW50KSB7CisJCWlmIChyZXQpIHsKKwkJCWlmIChjbGstPnBhcmVudCkKIAkJCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7Ci0JCQkJY2xrLT51c2Vjb3VudC0tOwotCQkJfQorCisJCQlnb3RvIGVycjsKIAkJfQogCX0KKwlyZXR1cm4gcmV0OwogCitlcnI6CisJaWYgKGNsay0+Y2xrZG0pCisJCW9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKGNsay0+Y2xrZG0sIGNsayk7CisJY2xrLT51c2Vjb3VudC0tOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM3NiwyNCArNDc2LDIyIEBACiAgKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhcmUgcGFydCBvZiBDTEtTRUxfeHl6IGdvdmVybmVkIGNsb2Nrcy4KICAqIFJFVklTSVQ6IE1heWJlIGNoYW5nZSB0byB1c2UgY2xrLT5lbmFibGUoKSBmdW5jdGlvbnMgbGlrZSBvbiBvbWFwMT8KICAqLwotdm9pZCBvbWFwMl9jbGtzZWxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3Vuc2lnbmVkIGxvbmcgb21hcDJfY2xrc2VsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7CisJdW5zaWduZWQgbG9uZyByYXRlOwogCXUzMiBkaXYgPSAwOwogCiAJcHJfZGVidWcoImNsb2NrOiByZWNhbGMnaW5nIGNsa3NlbCBjbGsgJXNcbiIsIGNsay0+bmFtZSk7CiAKIAlkaXYgPSBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3IoY2xrKTsKIAlpZiAoZGl2ID09IDApCi0JCXJldHVybjsKKwkJcmV0dXJuIGNsay0+cmF0ZTsKIAotCWlmICh1bmxpa2VseShjbGstPnJhdGUgPT0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXYpKQotCQlyZXR1cm47Ci0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXY7CisJcmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gZGl2OwogCi0JcHJfZGVidWcoImNsb2NrOiBuZXcgY2xvY2sgcmF0ZSBpcyAlbGQgKGRpdiAlZClcbiIsIGNsay0+cmF0ZSwgZGl2KTsKKwlwcl9kZWJ1ZygiY2xvY2s6IG5ldyBjbG9jayByYXRlIGlzICVsZCAoZGl2ICVkKVxuIiwgcmF0ZSwgZGl2KTsKIAotCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwlyZXR1cm4gcmF0ZTsKIH0KIAogLyoqCkBAIC00MDUsOCArNTAzLDggQEAKICAqIHRoZSBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VwcGxpZWQgcGFyZW50IGNsb2NrIGFkZHJlc3MuCiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IGNsa3NlbCBvbiBzdWNjZXNzIG9yIE5VTEwgb24gZXJyb3IuCiAgKi8KLWNvbnN0IHN0cnVjdCBjbGtzZWwgKm9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywKLQkJCQkJCXN0cnVjdCBjbGsgKnNyY19jbGspCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCAqb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoc3RydWN0IGNsayAqY2xrLAorCQkJCQkJICAgICAgIHN0cnVjdCBjbGsgKnNyY19jbGspCiB7CiAJY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKIApAQCAtNDU1LDcgKzU1Myw3IEBACiAJKm5ld19kaXYgPSAxOwogCiAJY2xrcyA9IG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgY2xrLT5wYXJlbnQpOwotCWlmIChjbGtzID09IE5VTEwpCisJaWYgKCFjbGtzKQogCQlyZXR1cm4gfjA7CiAKIAlmb3IgKGNsa3IgPSBjbGtzLT5yYXRlczsgY2xrci0+ZGl2OyBjbGtyKyspIHsKQEAgLTUxNCw3ICs2MTIsNyBAQAogLyogR2l2ZW4gYSBjbG9jayBhbmQgYSByYXRlIGFwcGx5IGEgY2xvY2sgc3BlY2lmaWMgcm91bmRpbmcgZnVuY3Rpb24gKi8KIGxvbmcgb21hcDJfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCiB7Ci0JaWYgKGNsay0+cm91bmRfcmF0ZSAhPSBOVUxMKQorCWlmIChjbGstPnJvdW5kX3JhdGUpCiAJCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKIAogCWlmIChjbGstPmZsYWdzICYgUkFURV9GSVhFRCkKQEAgLTU0MCw3ICs2MzgsNyBAQAogCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqY2xrcjsKIAogCWNsa3MgPSBvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChjbGssIGNsay0+cGFyZW50KTsKLQlpZiAoY2xrcyA9PSBOVUxMKQorCWlmICghY2xrcykKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGNsa3IgPSBjbGtzLT5yYXRlczsgY2xrci0+ZGl2OyBjbGtyKyspIHsKQEAgLTU3Niw3ICs2NzQsNyBAQAogCVdBUk5fT04oZGl2ID09IDApOwogCiAJY2xrcyA9IG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgY2xrLT5wYXJlbnQpOwotCWlmIChjbGtzID09IE5VTEwpCisJaWYgKCFjbGtzKQogCQlyZXR1cm4gfjA7CiAKIAlmb3IgKGNsa3IgPSBjbGtzLT5yYXRlczsgY2xrci0+ZGl2OyBjbGtyKyspIHsKQEAgLTU5NSwyMyArNjkzLDYgQEAKIH0KIAogLyoqCi0gKiBvbWFwMl9nZXRfY2xrc2VsIC0gZmluZCBjbGtzZWwgcmVnaXN0ZXIgYWRkciAmIGZpZWxkIG1hc2sgZm9yIGEgY2xrCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrIHRvIHVzZQotICogQGZpZWxkX21hc2s6IHB0ciB0byB1MzIgdG8gc3RvcmUgdGhlIHJlZ2lzdGVyIGZpZWxkIG1hc2sKLSAqCi0gKiBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBjbGtzZWwgcmVnaXN0ZXIgdXBvbiBzdWNjZXNzIG9yIE5VTEwgb24gZXJyb3IuCi0gKi8KLXZvaWQgX19pb21lbSAqb21hcDJfZ2V0X2Nsa3NlbChzdHJ1Y3QgY2xrICpjbGssIHUzMiAqZmllbGRfbWFzaykKLXsKLQlpZiAodW5saWtlbHkoKGNsay0+Y2xrc2VsX3JlZyA9PSBOVUxMKSB8fCAoY2xrLT5jbGtzZWxfbWFzayA9PSBOVUxMKSkpCi0JCXJldHVybiBOVUxMOwotCi0JKmZpZWxkX21hc2sgPSBjbGstPmNsa3NlbF9tYXNrOwotCi0JcmV0dXJuIGNsay0+Y2xrc2VsX3JlZzsKLX0KLQotLyoqCiAgKiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3IgLSBnZXQgY3VycmVudCBkaXZpZGVyIGFwcGxpZWQgdG8gcGFyZW50IGNsb2NrLgogICogQGNsazogT01BUCBzdHJ1Y3QgY2xrIHRvIHVzZS4KICAqCkBAIC02MTksNDkgKzcwMCw0MSBAQAogICovCiB1MzIgb21hcDJfY2xrc2VsX2dldF9kaXZpc29yKHN0cnVjdCBjbGsgKmNsaykKIHsKLQl1MzIgZmllbGRfbWFzaywgZmllbGRfdmFsOwotCXZvaWQgX19pb21lbSAqZGl2X2FkZHI7CisJdTMyIHY7CiAKLQlkaXZfYWRkciA9IG9tYXAyX2dldF9jbGtzZWwoY2xrLCAmZmllbGRfbWFzayk7Ci0JaWYgKGRpdl9hZGRyID09IE5VTEwpCisJaWYgKCFjbGstPmNsa3NlbF9tYXNrKQogCQlyZXR1cm4gMDsKIAotCWZpZWxkX3ZhbCA9IF9fcmF3X3JlYWRsKGRpdl9hZGRyKSAmIGZpZWxkX21hc2s7Ci0JZmllbGRfdmFsID4+PSBfX2ZmcyhmaWVsZF9tYXNrKTsKKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKSAmIGNsay0+Y2xrc2VsX21hc2s7CisJdiA+Pj0gX19mZnMoY2xrLT5jbGtzZWxfbWFzayk7CiAKLQlyZXR1cm4gb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3IoY2xrLCBmaWVsZF92YWwpOworCXJldHVybiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihjbGssIHYpOwogfQogCiBpbnQgb21hcDJfY2xrc2VsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewotCXUzMiBmaWVsZF9tYXNrLCBmaWVsZF92YWwsIHJlZ192YWwsIHZhbGlkcmF0ZSwgbmV3X2RpdiA9IDA7Ci0Jdm9pZCBfX2lvbWVtICpkaXZfYWRkcjsKKwl1MzIgdiwgZmllbGRfdmFsLCB2YWxpZHJhdGUsIG5ld19kaXYgPSAwOworCisJaWYgKCFjbGstPmNsa3NlbF9tYXNrKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZhbGlkcmF0ZSA9IG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlX2RpdihjbGssIHJhdGUsICZuZXdfZGl2KTsKIAlpZiAodmFsaWRyYXRlICE9IHJhdGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZGl2X2FkZHIgPSBvbWFwMl9nZXRfY2xrc2VsKGNsaywgJmZpZWxkX21hc2spOwotCWlmIChkaXZfYWRkciA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWZpZWxkX3ZhbCA9IG9tYXAyX2Rpdmlzb3JfdG9fY2xrc2VsKGNsaywgbmV3X2Rpdik7CiAJaWYgKGZpZWxkX3ZhbCA9PSB+MCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZWdfdmFsID0gX19yYXdfcmVhZGwoZGl2X2FkZHIpOwotCXJlZ192YWwgJj0gfmZpZWxkX21hc2s7Ci0JcmVnX3ZhbCB8PSAoZmllbGRfdmFsIDw8IF9fZmZzKGZpZWxkX21hc2spKTsKLQlfX3Jhd193cml0ZWwocmVnX3ZhbCwgZGl2X2FkZHIpOwotCXdtYigpOworCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpOworCXYgJj0gfmNsay0+Y2xrc2VsX21hc2s7CisJdiB8PSBmaWVsZF92YWwgPDwgX19mZnMoY2xrLT5jbGtzZWxfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGNsay0+Y2xrc2VsX3JlZyk7CisJdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZyk7IC8qIE9DUCBiYXJyaWVyICovCiAKIAljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIG5ld19kaXY7CiAKLQlpZiAoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQICYmIGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCXBybV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX1ZBTElEX0NPTkZJRywKLQkJCU9NQVAyNFhYX0dSX01PRCwgT01BUDI0WFhfUFJDTV9DTEtDRkdfQ1RSTF9PRkZTRVQpOwotCQl3bWIoKTsKLQl9CisJX29tYXAyeHh4X2Nsa19jb21taXQoY2xrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjgwLDMxICs3NTMsMjQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBkcGxsX2NrLCBjb3JlX2NrLCB2aXJ0X3ByY21fc2V0OyBwbHVzIGFsbCBjbGtzZWwgY2xvY2tzICovCi0JaWYgKGNsay0+c2V0X3JhdGUgIT0gTlVMTCkKKwlpZiAoY2xrLT5zZXRfcmF0ZSkKIAkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIHJhdGUpOwogCi0JaWYgKHVubGlrZWx5KHJldCA9PSAwICYmIChjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiAvKgogICogQ29udmVydHMgZW5jb2RlZCBjb250cm9sIHJlZ2lzdGVyIGFkZHJlc3MgaW50byBhIGZ1bGwgYWRkcmVzcwotICogT24gZXJyb3IsICpzcmNfYWRkciB3aWxsIGJlIHJldHVybmVkIGFzIDAuCisgKiBPbiBlcnJvciwgdGhlIHJldHVybiB2YWx1ZSAocGFyZW50X2Rpdikgd2lsbCBiZSAwLgogICovCi1zdGF0aWMgdTMyIG9tYXAyX2Nsa3NlbF9nZXRfc3JjX2ZpZWxkKHZvaWQgX19pb21lbSAqKnNyY19hZGRyLAotCQkJCSAgICAgIHN0cnVjdCBjbGsgKnNyY19jbGssIHUzMiAqZmllbGRfbWFzaywKLQkJCQkgICAgICBzdHJ1Y3QgY2xrICpjbGssIHUzMiAqcGFyZW50X2RpdikKK3N0YXRpYyB1MzIgX29tYXAyX2Nsa3NlbF9nZXRfc3JjX2ZpZWxkKHN0cnVjdCBjbGsgKnNyY19jbGssIHN0cnVjdCBjbGsgKmNsaywKKwkJCQkgICAgICAgdTMyICpmaWVsZF92YWwpCiB7CiAJY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKIAljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7CiAKLQkqcGFyZW50X2RpdiA9IDA7Ci0JKnNyY19hZGRyID0gTlVMTDsKLQogCWNsa3MgPSBvbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChjbGssIHNyY19jbGspOwotCWlmIChjbGtzID09IE5VTEwpCisJaWYgKCFjbGtzKQogCQlyZXR1cm4gMDsKIAogCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgewpAQCAtNzIyLDQ3ICs3ODgsMzUgQEAKIAkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLiAgQWRkIGEgY2xrc2VsIG1hc2sgdG8gdGhlIHN0cnVjdCBjbGsuICovCiAJV0FSTl9PTihjbGstPmNsa3NlbF9tYXNrID09IDApOwogCi0JKmZpZWxkX21hc2sgPSBjbGstPmNsa3NlbF9tYXNrOwotCSpzcmNfYWRkciA9IGNsay0+Y2xrc2VsX3JlZzsKLQkqcGFyZW50X2RpdiA9IGNsa3ItPmRpdjsKKwkqZmllbGRfdmFsID0gY2xrci0+dmFsOwogCi0JcmV0dXJuIGNsa3ItPnZhbDsKKwlyZXR1cm4gY2xrci0+ZGl2OwogfQogCiBpbnQgb21hcDJfY2xrX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpuZXdfcGFyZW50KQogewotCXZvaWQgX19pb21lbSAqc3JjX2FkZHI7Ci0JdTMyIGZpZWxkX3ZhbCwgZmllbGRfbWFzaywgcmVnX3ZhbCwgcGFyZW50X2RpdjsKKwl1MzIgZmllbGRfdmFsLCB2LCBwYXJlbnRfZGl2OwogCi0JaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBDT05GSUdfUEFSVElDSVBBTlQpKQorCWlmIChjbGstPmZsYWdzICYgQ09ORklHX1BBUlRJQ0lQQU5UKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghY2xrLT5jbGtzZWwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZmllbGRfdmFsID0gb21hcDJfY2xrc2VsX2dldF9zcmNfZmllbGQoJnNyY19hZGRyLCBuZXdfcGFyZW50LAotCQkJCQkgICAgICAgJmZpZWxkX21hc2ssIGNsaywgJnBhcmVudF9kaXYpOwotCWlmIChzcmNfYWRkciA9PSBOVUxMKQorCXBhcmVudF9kaXYgPSBfb21hcDJfY2xrc2VsX2dldF9zcmNfZmllbGQobmV3X3BhcmVudCwgY2xrLCAmZmllbGRfdmFsKTsKKwlpZiAoIXBhcmVudF9kaXYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNsay0+dXNlY291bnQgPiAwKQotCQlvbWFwMl9jbGtfZGlzYWJsZShjbGspOwotCiAJLyogU2V0IG5ldyBzb3VyY2UgdmFsdWUgKHByZXZpb3VzIGRpdmlkZXJzIGlmIGFueSBpbiBlZmZlY3QpICovCi0JcmVnX3ZhbCA9IF9fcmF3X3JlYWRsKHNyY19hZGRyKSAmIH5maWVsZF9tYXNrOwotCXJlZ192YWwgfD0gKGZpZWxkX3ZhbCA8PCBfX2ZmcyhmaWVsZF9tYXNrKSk7Ci0JX19yYXdfd3JpdGVsKHJlZ192YWwsIHNyY19hZGRyKTsKLQl3bWIoKTsKKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsKKwl2ICY9IH5jbGstPmNsa3NlbF9tYXNrOworCXYgfD0gZmllbGRfdmFsIDw8IF9fZmZzKGNsay0+Y2xrc2VsX21hc2spOworCV9fcmF3X3dyaXRlbCh2LCBjbGstPmNsa3NlbF9yZWcpOworCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpOyAgICAvKiBPQ1AgYmFycmllciAqLwogCi0JaWYgKGNsay0+ZmxhZ3MgJiBERUxBWUVEX0FQUCAmJiBjcHVfaXNfb21hcDI0eHgoKSkgewotCQlfX3Jhd193cml0ZWwoT01BUDI0WFhfVkFMSURfQ09ORklHLCBPTUFQMjRYWF9QUkNNX0NMS0NGR19DVFJMKTsKLQkJd21iKCk7Ci0JfQorCV9vbWFwMnh4eF9jbGtfY29tbWl0KGNsayk7CiAKLQljbGstPnBhcmVudCA9IG5ld19wYXJlbnQ7Ci0KLQlpZiAoY2xrLT51c2Vjb3VudCA+IDApCi0JCW9tYXAyX2Nsa19lbmFibGUoY2xrKTsKKwljbGtfcmVwYXJlbnQoY2xrLCBuZXdfcGFyZW50KTsKIAogCS8qIENMS1NFTCBjbG9ja3MgZm9sbG93IHRoZWlyIHBhcmVudHMnIHJhdGVzLCBkaXZpZGVkIGJ5IGEgZGl2aXNvciAqLwogCWNsay0+cmF0ZSA9IG5ld19wYXJlbnQtPnJhdGU7CkBAIC03NzMsOSArODI3LDYgQEAKIAlwcl9kZWJ1ZygiY2xvY2s6IHNldCBwYXJlbnQgb2YgJXMgdG8gJXMgKG5ldyByYXRlICVsZClcbiIsCiAJCSBjbGstPm5hbWUsIGNsay0+cGFyZW50LT5uYW1lLCBjbGstPnJhdGUpOwogCi0JaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpKQotCQlwcm9wYWdhdGVfcmF0ZShjbGspOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgwNSw3ICs4NTYsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfZHBsbF9jb21wdXRlX25ld19yYXRlKHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUsIHVuc2lnbmVkIGludCBtLCB1bnNpZ25lZCBpbnQgbikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9kcGxsX2NvbXB1dGVfbmV3X3JhdGUodW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBtLCB1bnNpZ25lZCBpbnQgbikKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbnVtOwogCkBAIC04MzgsNyArODkwLDcgQEAKIAkJCSAgIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUsCiAJCQkgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQogewotCWludCBmbGFncyA9IDAsIGNhcnJ5ID0gMDsKKwlpbnQgciA9IDAsIGNhcnJ5ID0gMDsKIAogCS8qIFVuc2NhbGUgbSBhbmQgcm91bmQgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKCptICUgRFBMTF9TQ0FMRV9GQUNUT1IgPj0gRFBMTF9ST1VORElOR19WQUwpCkBAIC04NTksMTMgKzkxMSwxMyBAQAogCWlmICgqbSA8IERQTExfTUlOX01VTFRJUExJRVIpIHsKIAkJKm0gPSBEUExMX01JTl9NVUxUSVBMSUVSOwogCQkqbmV3X3JhdGUgPSAwOwotCQlmbGFncyA9IERQTExfTVVMVF9VTkRFUkZMT1c7CisJCXIgPSBEUExMX01VTFRfVU5ERVJGTE9XOwogCX0KIAogCWlmICgqbmV3X3JhdGUgPT0gMCkKIAkJKm5ld19yYXRlID0gX2RwbGxfY29tcHV0ZV9uZXdfcmF0ZShwYXJlbnRfcmF0ZSwgKm0sIG4pOwogCi0JcmV0dXJuIGZsYWdzOworCXJldHVybiByOwogfQogCiAvKioKQEAgLTg4OSw1NCArOTQxLDY1IEBACiAJaW50IG0sIG4sIHIsIGUsIHNjYWxlZF9tYXhfbTsKIAl1bnNpZ25lZCBsb25nIHNjYWxlZF9ydF9ycCwgbmV3X3JhdGU7CiAJaW50IG1pbl9lID0gLTEsIG1pbl9lX20gPSAtMSwgbWluX2VfbiA9IC0xOworCXN0cnVjdCBkcGxsX2RhdGEgKmRkOwogCiAJaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQogCQlyZXR1cm4gfjA7CiAKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCiAJcHJfZGVidWcoImNsb2NrOiBzdGFydGluZyBEUExMIHJvdW5kX3JhdGUgZm9yIGNsb2NrICVzLCB0YXJnZXQgcmF0ZSAiCiAJCSAiJWxkXG4iLCBjbGstPm5hbWUsIHRhcmdldF9yYXRlKTsKIAotCXNjYWxlZF9ydF9ycCA9IHRhcmdldF9yYXRlIC8gKGNsay0+cGFyZW50LT5yYXRlIC8gRFBMTF9TQ0FMRV9GQUNUT1IpOwotCXNjYWxlZF9tYXhfbSA9IGNsay0+ZHBsbF9kYXRhLT5tYXhfbXVsdGlwbGllciAqIERQTExfU0NBTEVfRkFDVE9SOworCXNjYWxlZF9ydF9ycCA9IHRhcmdldF9yYXRlIC8gKGRkLT5jbGtfcmVmLT5yYXRlIC8gRFBMTF9TQ0FMRV9GQUNUT1IpOworCXNjYWxlZF9tYXhfbSA9IGRkLT5tYXhfbXVsdGlwbGllciAqIERQTExfU0NBTEVfRkFDVE9SOwogCi0JY2xrLT5kcGxsX2RhdGEtPmxhc3Rfcm91bmRlZF9yYXRlID0gMDsKKwlkZC0+bGFzdF9yb3VuZGVkX3JhdGUgPSAwOwogCi0JZm9yIChuID0gY2xrLT5kcGxsX2RhdGEtPm1heF9kaXZpZGVyOyBuID49IERQTExfTUlOX0RJVklERVI7IG4tLSkgeworCWZvciAobiA9IGRkLT5taW5fZGl2aWRlcjsgbiA8PSBkZC0+bWF4X2RpdmlkZXI7IG4rKykgeworCisJCS8qIElzIHRoZSAoaW5wdXQgY2xrLCBkaXZpZGVyKSBwYWlyIHZhbGlkIGZvciB0aGUgRFBMTD8gKi8KKwkJciA9IF9kcGxsX3Rlc3RfZmludChjbGssIG4pOworCQlpZiAociA9PSBEUExMX0ZJTlRfVU5ERVJGTE9XKQorCQkJYnJlYWs7CisJCWVsc2UgaWYgKHIgPT0gRFBMTF9GSU5UX0lOVkFMSUQpCisJCQljb250aW51ZTsKIAogCQkvKiBDb21wdXRlIHRoZSBzY2FsZWQgRFBMTCBtdWx0aXBsaWVyLCBiYXNlZCBvbiB0aGUgZGl2aWRlciAqLwogCQltID0gc2NhbGVkX3J0X3JwICogbjsKIAogCQkvKgotCQkgKiBTaW5jZSB3ZSdyZSBjb3VudGluZyBuIGRvd24sIGEgbSBvdmVyZmxvdyBtZWFucyB3ZSBjYW4KLQkJICogY2FuIGltbWVkaWF0ZWx5IHNraXAgdG8gdGhlIG5leHQgbgorCQkgKiBTaW5jZSB3ZSdyZSBjb3VudGluZyBuIHVwLCBhIG0gb3ZlcmZsb3cgbWVhbnMgd2UKKwkJICogY2FuIGJhaWwgb3V0IGNvbXBsZXRlbHkgKHNpbmNlIGFzIG4gaW5jcmVhc2VzIGluCisJCSAqIHRoZSBuZXh0IGl0ZXJhdGlvbiwgdGhlcmUncyBubyB3YXkgdGhhdCBtIGNhbgorCQkgKiBpbmNyZWFzZSBiZXlvbmQgdGhlIGN1cnJlbnQgbSkKIAkJICovCiAJCWlmIChtID4gc2NhbGVkX21heF9tKQotCQkJY29udGludWU7CisJCQlicmVhazsKIAogCQlyID0gX2RwbGxfdGVzdF9tdWx0KCZtLCBuLCAmbmV3X3JhdGUsIHRhcmdldF9yYXRlLAotCQkJCSAgICBjbGstPnBhcmVudC0+cmF0ZSk7CisJCQkJICAgIGRkLT5jbGtfcmVmLT5yYXRlKTsKKworCQkvKiBtIGNhbid0IGJlIHNldCBsb3cgZW5vdWdoIGZvciB0aGlzIG4gLSB0cnkgd2l0aCBhIGxhcmdlciBuICovCisJCWlmIChyID09IERQTExfTVVMVF9VTkRFUkZMT1cpCisJCQljb250aW51ZTsKIAogCQllID0gdGFyZ2V0X3JhdGUgLSBuZXdfcmF0ZTsKIAkJcHJfZGVidWcoImNsb2NrOiBuID0gJWQ6IG0gPSAlZDogcmF0ZSBlcnJvciBpcyAlZCAiCiAJCQkgIihuZXdfcmF0ZSA9ICVsZClcbiIsIG4sIG0sIGUsIG5ld19yYXRlKTsKIAogCQlpZiAobWluX2UgPT0gLTEgfHwKLQkJICAgIG1pbl9lID49IChpbnQpKGFicyhlKSAtIGNsay0+ZHBsbF9kYXRhLT5yYXRlX3RvbGVyYW5jZSkpIHsKKwkJICAgIG1pbl9lID49IChpbnQpKGFicyhlKSAtIGRkLT5yYXRlX3RvbGVyYW5jZSkpIHsKIAkJCW1pbl9lID0gZTsKIAkJCW1pbl9lX20gPSBtOwogCQkJbWluX2VfbiA9IG47CiAKIAkJCXByX2RlYnVnKCJjbG9jazogZm91bmQgbmV3IGxlYXN0IGVycm9yICVkXG4iLCBtaW5fZSk7Ci0JCX0KIAotCQkvKgotCQkgKiBTaW5jZSB3ZSdyZSBjb3VudGluZyBuIGRvd24sIGEgbSB1bmRlcmZsb3cgbWVhbnMgd2UKLQkJICogY2FuIGJhaWwgb3V0IGNvbXBsZXRlbHkgKHNpbmNlIGFzIG4gZGVjcmVhc2VzIGluCi0JCSAqIHRoZSBuZXh0IGl0ZXJhdGlvbiwgdGhlcmUncyBubyB3YXkgdGhhdCBtIGNhbgotCQkgKiBpbmNyZWFzZSBiZXlvbmQgdGhlIGN1cnJlbnQgbSkKLQkJICovCi0JCWlmIChyICYgRFBMTF9NVUxUX1VOREVSRkxPVykKLQkJCWJyZWFrOworCQkJLyogV2UgZm91bmQgZ29vZCBzZXR0aW5ncyAtLSBiYWlsIG91dCBub3cgKi8KKwkJCWlmIChtaW5fZSA8PSBkZC0+cmF0ZV90b2xlcmFuY2UpCisJCQkJYnJlYWs7CisJCX0KIAl9CiAKIAlpZiAobWluX2UgPCAwKSB7CkBAIC05NDQsMTcgKzEwMDcsMTcgQEAKIAkJcmV0dXJuIH4wOwogCX0KIAotCWNsay0+ZHBsbF9kYXRhLT5sYXN0X3JvdW5kZWRfbSA9IG1pbl9lX207Ci0JY2xrLT5kcGxsX2RhdGEtPmxhc3Rfcm91bmRlZF9uID0gbWluX2VfbjsKLQljbGstPmRwbGxfZGF0YS0+bGFzdF9yb3VuZGVkX3JhdGUgPQotCQlfZHBsbF9jb21wdXRlX25ld19yYXRlKGNsay0+cGFyZW50LT5yYXRlLCBtaW5fZV9tLCAgbWluX2Vfbik7CisJZGQtPmxhc3Rfcm91bmRlZF9tID0gbWluX2VfbTsKKwlkZC0+bGFzdF9yb3VuZGVkX24gPSBtaW5fZV9uOworCWRkLT5sYXN0X3JvdW5kZWRfcmF0ZSA9IF9kcGxsX2NvbXB1dGVfbmV3X3JhdGUoZGQtPmNsa19yZWYtPnJhdGUsCisJCQkJCQkgICAgICAgbWluX2VfbSwgIG1pbl9lX24pOwogCiAJcHJfZGVidWcoImNsb2NrOiBmaW5hbCBsZWFzdCBlcnJvcjogZSA9ICVkLCBtID0gJWQsIG4gPSAlZFxuIiwKIAkJIG1pbl9lLCBtaW5fZV9tLCBtaW5fZV9uKTsKIAlwcl9kZWJ1ZygiY2xvY2s6IGZpbmFsIHJhdGU6ICVsZCAgKHRhcmdldCByYXRlOiAlbGQpXG4iLAotCQkgY2xrLT5kcGxsX2RhdGEtPmxhc3Rfcm91bmRlZF9yYXRlLCB0YXJnZXRfcmF0ZSk7CisJCSBkZC0+bGFzdF9yb3VuZGVkX3JhdGUsIHRhcmdldF9yYXRlKTsKIAotCXJldHVybiBjbGstPmRwbGxfZGF0YS0+bGFzdF9yb3VuZGVkX3JhdGU7CisJcmV0dXJuIGRkLT5sYXN0X3JvdW5kZWRfcmF0ZTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC05NzMsNiArMTAzNiwxMCBAQAogCQlyZXR1cm47CiAKIAlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgdW51c2VkIGNsb2NrIFwiJXNcIlxuIiwgY2xrLT5uYW1lKTsKLQlfb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJb21hcDJfY2xrX2VuYWJsZShjbGspOworCQlvbWFwMl9jbGtfZGlzYWJsZShjbGspOworCX0gZWxzZQorCQlfb21hcDJfY2xrX2Rpc2FibGUoY2xrKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCmluZGV4IDFmYjMzMGUuLjI2NzlkZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKQEAgLTIxLDEzICsyMSwyOCBAQAogLyogVGhlIG1heGltdW0gZXJyb3IgYmV0d2VlbiBhIHRhcmdldCBEUExMIHJhdGUgYW5kIHRoZSByb3VuZGVkIHJhdGUgaW4gSHogKi8KICNkZWZpbmUgREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCTUwMDAwCiAKKy8qIENNX0NMS1NFTDJfUExMLkNPUkVfQ0xLX1NSQyBiaXRzICgyWFhYKSAqLworI2RlZmluZSBDT1JFX0NMS19TUkNfMzJLCQkweDAKKyNkZWZpbmUgQ09SRV9DTEtfU1JDX0RQTEwJCTB4MQorI2RlZmluZSBDT1JFX0NMS19TUkNfRFBMTF9YMgkJMHgyCisKKy8qIE9NQVAyeHh4IENNX0NMS0VOX1BMTC5FTl9EUExMIGJpdHMgLSBmb3Igb21hcDJfZ2V0X2RwbGxfcmF0ZSgpICovCisjZGVmaW5lIE9NQVAyWFhYX0VOX0RQTExfTFBCWVBBU1MJCTB4MQorI2RlZmluZSBPTUFQMlhYWF9FTl9EUExMX0ZSQllQQVNTCQkweDIKKyNkZWZpbmUgT01BUDJYWFhfRU5fRFBMTF9MT0NLRUQJCQkweDMKKworLyogT01BUDN4eHggQ01fQ0xLRU5fUExMKi5FTl8qX0RQTEwgYml0cyAtIGZvciBvbWFwMl9nZXRfZHBsbF9yYXRlKCkgKi8KKyNkZWZpbmUgT01BUDNYWFhfRU5fRFBMTF9MUEJZUEFTUwkJMHg1CisjZGVmaW5lIE9NQVAzWFhYX0VOX0RQTExfRlJCWVBBU1MJCTB4NgorI2RlZmluZSBPTUFQM1hYWF9FTl9EUExMX0xPQ0tFRAkJCTB4NworCiBpbnQgb21hcDJfY2xrX2luaXQodm9pZCk7CiBpbnQgb21hcDJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwogdm9pZCBvbWFwMl9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspOwogbG9uZyBvbWFwMl9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiBpbnQgb21hcDJfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIGludCBvbWFwMl9jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKm5ld19wYXJlbnQpOwotaW50IG9tYXAyX2RwbGxfcmF0ZV90b2xlcmFuY2Vfc2V0KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgaW50IHRvbGVyYW5jZSk7CitpbnQgb21hcDJfZHBsbF9zZXRfcmF0ZV90b2xlcmFuY2Uoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBpbnQgdG9sZXJhbmNlKTsKIGxvbmcgb21hcDJfZHBsbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSk7CiAKICNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKQEAgLTM2LDcgKzUxLDcgQEAKICNkZWZpbmUgb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkCU5VTEwKICNlbmRpZgogCi12b2lkIG9tYXAyX2Nsa3NlbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3Vuc2lnbmVkIGxvbmcgb21hcDJfY2xrc2VsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogdm9pZCBvbWFwMl9pbml0X2Nsa19jbGtkbShzdHJ1Y3QgY2xrICpjbGspOwogdm9pZCBvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKTsKIHUzMiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrKTsKQEAgLTQ0LDEzICs1OSwxNiBAQAogCQkJCXUzMiAqbmV3X2Rpdik7CiB1MzIgb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrLCB1MzIgZmllbGRfdmFsKTsKIHUzMiBvbWFwMl9kaXZpc29yX3RvX2Nsa3NlbChzdHJ1Y3QgY2xrICpjbGssIHUzMiBkaXYpOwotdm9pZCBvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwordW5zaWduZWQgbG9uZyBvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogbG9uZyBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpOwogaW50IG9tYXAyX2Nsa3NlbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiB1MzIgb21hcDJfZ2V0X2RwbGxfcmF0ZShzdHJ1Y3QgY2xrICpjbGspOwogaW50IG9tYXAyX3dhaXRfY2xvY2tfcmVhZHkodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBjdmFsLCBjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKTsKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAyX2RmbHRfd2FpdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMl9kZmx0OworCiBleHRlcm4gdTggY3B1X21hc2s7CiAKIC8qIGNsa3NlbF9yYXRlIGRhdGEgY29tbW9uIHRvIDI0eHgvMzQzeCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmMKaW5kZXggZDM4MmViMC4uMWU4MzljNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5jCkBAIC0zMSwxNSArMzEsMTkyIEBACiAjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgogI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KIAotI2luY2x1ZGUgIm1lbW9yeS5oIgorI2luY2x1ZGUgPG1hY2gvc2RyYy5oPgogI2luY2x1ZGUgImNsb2NrLmgiCi0jaW5jbHVkZSAiY2xvY2syNHh4LmgiCiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vc2NjazsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19maXhlZDsKKworI2luY2x1ZGUgImNsb2NrMjR4eC5oIgorCitzdHJ1Y3Qgb21hcF9jbGsgeworCXUzMgkJY3B1OworCXN0cnVjdCBjbGtfbG9va3VwIGxrOworfTsKKworI2RlZmluZSBDTEsoZGV2LCBjb24sIGNrLCBjcCkgCQlcCisJewkJCQlcCisJCSAuY3B1ID0gY3AsCQlcCisJCS5sayA9IHsJCQlcCisJCQkuZGV2X2lkID0gZGV2LAlcCisJCQkuY29uX2lkID0gY29uLAlcCisJCQkuY2xrID0gY2ssCVwKKwkJfSwJCQlcCisJfQorCisjZGVmaW5lIENLXzI0M1gJKDEgPDwgMCkKKyNkZWZpbmUgQ0tfMjQyWAkoMSA8PCAxKQorCitzdGF0aWMgc3RydWN0IG9tYXBfY2xrIG9tYXAyNHh4X2Nsa3NbXSA9IHsKKwkvKiBleHRlcm5hbCByb290IHNvdXJjZXMgKi8KKwlDTEsoTlVMTCwJImZ1bmNfMzJrX2NrIiwJJmZ1bmNfMzJrX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJvc2NfY2siLAkmb3NjX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2siLAkmc3lzX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJhbHRfY2siLAkmYWx0X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJLyogaW50ZXJuYWwgYW5hbG9nIHNvdXJjZXMgKi8KKwlDTEsoTlVMTCwJImRwbGxfY2siLAkmZHBsbF9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiYXBsbDk2X2NrIiwJJmFwbGw5Nl9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiYXBsbDU0X2NrIiwJJmFwbGw1NF9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCS8qIGludGVybmFsIHByY20gcm9vdCBzb3VyY2VzICovCisJQ0xLKE5VTEwsCSJmdW5jXzU0bV9jayIsCSZmdW5jXzU0bV9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiY29yZV9jayIsCSZjb3JlX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmdW5jXzk2bV9jayIsCSZmdW5jXzk2bV9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZnVuY180OG1fY2siLAkmZnVuY180OG1fY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImZ1bmNfMTJtX2NrIiwJJmZ1bmNfMTJtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJja193ZHQxX29zYyIsCSZ3ZHQxX29zY19jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic3lzX2Nsa291dF9zcmMiLCAmc3lzX2Nsa291dF9zcmMsIENLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQiLAkmc3lzX2Nsa291dCwJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic3lzX2Nsa291dDJfc3JjIiwgJnN5c19jbGtvdXQyX3NyYywgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0MiIsCSZzeXNfY2xrb3V0MiwJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJlbXVsX2NrIiwJJmVtdWxfY2ssCUNLXzI0MlgpLAorCS8qIG1wdSBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJtcHVfY2siLAkmbXB1X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJLyogZHNwIGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJImRzcF9mY2siLAkmZHNwX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZHNwX2lyYXRlX2ljayIsICZkc3BfaXJhdGVfaWNrLCBDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJkc3BfaWNrIiwJJmRzcF9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiaXZhMl8xX2ljayIsCSZpdmEyXzFfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIml2YTFfaWZjayIsCSZpdmExX2lmY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiaXZhMV9tcHVfaW50X2lmY2siLCAmaXZhMV9tcHVfaW50X2lmY2ssIENLXzI0MlgpLAorCS8qIEdGWCBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJnZnhfM2RfZmNrIiwJJmdmeF8zZF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdmeF8yZF9mY2siLAkmZ2Z4XzJkX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ2Z4X2ljayIsCSZnZnhfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJLyogTW9kZW0gZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkibWRtX2ljayIsCSZtZG1faWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIm1kbV9vc2NfY2siLAkmbWRtX29zY19jaywJQ0tfMjQzWCksCisJLyogRFNTIGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJImRzc19pY2siLAkmZHNzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZHNzMV9mY2siLAkmZHNzMV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImRzczJfZmNrIiwJJmRzczJfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJkc3NfNTRtX2ZjayIsCSZkc3NfNTRtX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCS8qIEwzIGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJImNvcmVfbDNfY2siLAkmY29yZV9sM19jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic3NpX2ZjayIsCSZzc2lfc3NyX3NzdF9mY2ssIENLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVzYl9sNF9pY2siLAkmdXNiX2w0X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCS8qIEw0IGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJImw0X2NrIiwJJmw0X2NrLAkJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic3NpX2w0X2ljayIsCSZzc2lfbDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJLyogdmlydHVhbCBtZXRhLWdyb3VwIGNsb2NrICovCisJQ0xLKE5VTEwsCSJ2aXJ0X3ByY21fc2V0IiwgJnZpcnRfcHJjbV9zZXQsIENLXzI0M1ggfCBDS18yNDJYKSwKKwkvKiBnZW5lcmFsIGw0IGludGVyZmFjZSBjaywgbXVsdGktcGFyZW50IGZ1bmN0aW9uYWwgY2xrICovCisJQ0xLKE5VTEwsCSJncHQxX2ljayIsCSZncHQxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MV9mY2siLAkmZ3B0MV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDJfaWNrIiwJJmdwdDJfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQyX2ZjayIsCSZncHQyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0M19pY2siLAkmZ3B0M19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDNfZmNrIiwJJmdwdDNfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ0X2ljayIsCSZncHQ0X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NF9mY2siLAkmZ3B0NF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDVfaWNrIiwJJmdwdDVfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ1X2ZjayIsCSZncHQ1X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Nl9pY2siLAkmZ3B0Nl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDZfZmNrIiwJJmdwdDZfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ3X2ljayIsCSZncHQ3X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0N19mY2siLAkmZ3B0N19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDhfaWNrIiwJJmdwdDhfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQ4X2ZjayIsCSZncHQ4X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OV9pY2siLAkmZ3B0OV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDlfZmNrIiwJJmdwdDlfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxMF9pY2siLAkmZ3B0MTBfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxMF9mY2siLAkmZ3B0MTBfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxMV9pY2siLAkmZ3B0MTFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxMV9mY2siLAkmZ3B0MTFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxMl9pY2siLAkmZ3B0MTJfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxMl9mY2siLAkmZ3B0MTJfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLCAiaWNrIiwJJm1jYnNwMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJmY2siLAkmbWNic3AxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcC1tY2JzcC4yIiwgImljayIsCSZtY2JzcDJfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiZmNrIiwJJm1jYnNwMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJpY2siLAkmbWNic3AzX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjMiLCAiZmNrIiwJJm1jYnNwM19mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC40IiwgImljayIsCSZtY2JzcDRfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNCIsICJmY2siLAkmbWNic3A0X2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjUiLCAiaWNrIiwJJm1jYnNwNV9pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC41IiwgImZjayIsCSZtY2JzcDVfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiaWNrIiwJJm1jc3BpMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiZmNrIiwJJm1jc3BpMV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjIiLCAiaWNrIiwJJm1jc3BpMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjIiLCAiZmNrIiwJJm1jc3BpMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjMiLCAiaWNrIiwJJm1jc3BpM19pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJmY2siLAkmbWNzcGkzX2ZjaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9pY2siLAkmdWFydDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9mY2siLAkmdWFydDFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1YXJ0Ml9pY2siLAkmdWFydDJfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1YXJ0Ml9mY2siLAkmdWFydDJfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1YXJ0M19pY2siLAkmdWFydDNfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1YXJ0M19mY2siLAkmdWFydDNfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncGlvc19pY2siLAkmZ3Bpb3NfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncGlvc19mY2siLAkmZ3Bpb3NfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwX3dkdCIsCSJpY2siLAkJJm1wdV93ZHRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwX3dkdCIsCSJmY2siLAkJJm1wdV93ZHRfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeW5jXzMya19pY2siLAkmc3luY18zMmtfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ3ZHQxX2ljayIsCSZ3ZHQxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkib21hcGN0cmxfaWNrIiwJJm9tYXBjdHJsX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiaWNyX2ljayIsCSZpY3JfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAyNHh4Y2FtIiwgImZjayIsCSZjYW1fZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJvbWFwMjR4eGNhbSIsICJpY2siLAkmY2FtX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkibWFpbGJveGVzX2ljayIsICZtYWlsYm94ZXNfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ3ZHQ0X2ljayIsCSZ3ZHQ0X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkid2R0NF9mY2siLAkmd2R0NF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDNfaWNrIiwJJndkdDNfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDNfZmNrIiwJJndkdDNfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ljayIsCSZtc3Byb19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ZjayIsCSZtc3Byb19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm1tY2ktb21hcC4wIiwgImljayIsCSZtbWNfaWNrLAlDS18yNDJYKSwKKwlDTEsoIm1tY2ktb21hcC4wIiwgImZjayIsCSZtbWNfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImZhY19pY2siLAkmZmFjX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkiZmFjX2ZjayIsCSZmYWNfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJlYWNfaWNrIiwJJmVhY19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZWFjX2ZjayIsCSZlYWNfZmNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXBfaGRxLjAiLCAiaWNrIiwJJmhkcV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoIm9tYXBfaGRxLjEiLCAiZmNrIiwJJmhkcV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmkyYzFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImZjayIsCSZpMmMxX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImZjayIsCSZpMmNoczFfZmNrLAlDS18yNDNYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKCJpMmNfb21hcC4yIiwgImZjayIsCSZpMmMyX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJpMmNfb21hcC4yIiwgImZjayIsCSZpMmNoczJfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwbWNfZmNrIiwJJmdwbWNfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzZG1hX2ZjayIsCSZzZG1hX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkic2RtYV9pY2siLAkmc2RtYV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInZseW5xX2ljayIsCSZ2bHlucV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkidmx5bnFfZmNrIiwJJnZseW5xX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzZHJjX2ljayIsCSZzZHJjX2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJkZXNfaWNrIiwJJmRlc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNoYV9pY2siLAkmc2hhX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSygib21hcF9ybmciLAkiaWNrIiwJCSZybmdfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJhZXNfaWNrIiwJJmFlc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJInBrYV9pY2siLAkmcGthX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAorCUNMSyhOVUxMLAkidXNiX2ZjayIsCSZ1c2JfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1c2Joc19pY2siLAkmdXNiaHNfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4wIiwgImljayIsCSZtbWNoczFfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4wIiwgImZjayIsCSZtbWNoczFfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwgImljayIsCSZtbWNoczJfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwgImZjayIsCSZtbWNoczJfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwaW81X2ljayIsCSZncGlvNV9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzVfZmNrIiwJJmdwaW81X2ZjaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJtZG1faW50Y19pY2siLAkmbWRtX2ludGNfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4wIiwgIm1tY2hzZGJfZmNrIiwJJm1tY2hzZGIxX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMSIsICJtbWNoc2RiX2ZjayIsIAkmbW1jaHNkYjJfZmNrLAlDS18yNDNYKSwKK307CisKIC8qIENNX0NMS0VOX1BMTC5FTl97NTQsOTZ9TV9QTEwgb3B0aW9ucyAoMjRYWCkgKi8KICNkZWZpbmUgRU5fQVBMTF9TVE9QUEVECQkJMAogI2RlZmluZSBFTl9BUExMX0xPQ0tFRAkJCTMKQEAgLTU5LDE5ICsyMzYsMzIgQEAKICAqIE9tYXAyNHh4IHNwZWNpZmljIGNsb2NrIGZ1bmN0aW9ucwogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyogVGhpcyBhY3R1YWxseSByZXR1cm5zIHRoZSByYXRlIG9mIGNvcmVfY2ssIG5vdCBkcGxsX2NrLiAqLwotc3RhdGljIHUzMiBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoc3RydWN0IGNsayAqdGNsaykKKy8qKgorICogb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUgLSByZXR1cm4gdGhlIENPUkVfQ0xLIHJhdGUKKyAqIEBjbGs6IHBvaW50ZXIgdG8gdGhlIGNvbWJpbmVkIGRwbGxfY2sgKyBjb3JlX2NrIChjdXJyZW50bHkgImRwbGxfY2siKQorICoKKyAqIFJldHVybnMgdGhlIENPUkVfQ0xLIHJhdGUuICBDT1JFX0NMSyBjYW4gaGF2ZSBvbmUgb2YgdGhyZWUgcmF0ZQorICogc291cmNlcyBvbiBPTUFQMnh4eDogdGhlIERQTEwgQ0xLT1VUIHJhdGUsIERQTEwgQ0xLT1VUWDIsIG9yIDMyS0h6CisgKiAodGhlIGxhdHRlciBpcyB1bnVzdWFsKS4gIFRoaXMgY3VycmVudGx5IHNob3VsZCBiZSBjYWxsZWQgd2l0aAorICogc3RydWN0IGNsayAqZHBsbF9jaywgd2hpY2ggaXMgYSBjb21wb3NpdGUgY2xvY2sgb2YgZHBsbF9jayBhbmQKKyAqIGNvcmVfY2suCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlsb25nIGxvbmcgZHBsbF9jbGs7Ci0JdTggYW11bHQ7CisJbG9uZyBsb25nIGNvcmVfY2xrOworCXUzMiB2OwogCi0JZHBsbF9jbGsgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKHRjbGspOworCWNvcmVfY2xrID0gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspOwogCi0JYW11bHQgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7Ci0JYW11bHQgJj0gT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7Ci0JZHBsbF9jbGsgKj0gYW11bHQ7CisJdiA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKKwl2ICY9IE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOwogCi0JcmV0dXJuIGRwbGxfY2xrOworCWlmICh2ID09IENPUkVfQ0xLX1NSQ18zMkspCisJCWNvcmVfY2xrID0gMzI3Njg7CisJZWxzZQorCQljb3JlX2NsayAqPSB2OworCisJcmV0dXJuIGNvcmVfY2xrOwogfQogCiBzdGF0aWMgaW50IG9tYXAyX2VuYWJsZV9vc2NfY2soc3RydWN0IGNsayAqY2xrKQpAQCAtOTYsNiArMjg2LDExIEBACiAJCSAgICAgIE9NQVAyNFhYX1BSQ01fQ0xLU1JDX0NUUkwpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb3NjY2sgPSB7CisJLmVuYWJsZQkJPSAmb21hcDJfZW5hYmxlX29zY19jaywKKwkuZGlzYWJsZQk9ICZvbWFwMl9kaXNhYmxlX29zY19jaywKK307CisKICNpZmRlZiBPTERfQ0sKIC8qIFJlY2FsY3VsYXRlIFNZU1RfQ0xLICovCiBzdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICogY2xrKQpAQCAtMTQ5LDExICszNDQsMTYgQEAKIAljbV93cml0ZV9tb2RfcmVnKGN2YWwsIFBMTF9NT0QsIENNX0NMS0VOKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2ZpeGVkID0geworCS5lbmFibGUJCT0gJm9tYXAyX2Nsa19maXhlZF9lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDJfY2xrX2ZpeGVkX2Rpc2FibGUsCit9OworCiAvKgogICogVXNlcyB0aGUgY3VycmVudCBwcmNtIHNldCB0byB0ZWxsIGlmIGEgcmF0ZSBpcyB2YWxpZC4KICAqIFlvdSBjYW4gZ28gc2xvd2VyLCBidXQgbm90IGZhc3RlciB3aXRoaW4gYSBnaXZlbiByYXRlIHNldC4KICAqLwotbG9uZyBvbWFwMl9kcGxsY29yZV9yb3VuZF9yYXRlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCitzdGF0aWMgbG9uZyBvbWFwMl9kcGxsY29yZV9yb3VuZF9yYXRlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCiB7CiAJdTMyIGhpZ2gsIGxvdywgY29yZV9jbGtfc3JjOwogCkBAIC0xODIsMTEgKzM4Miw5IEBACiAKIH0KIAotc3RhdGljIHZvaWQgb21hcDJfZHBsbGNvcmVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX2RwbGxjb3JlX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZV8yNHh4KGNsayk7Ci0KLQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZShjbGspOwogfQogCiBzdGF0aWMgaW50IG9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKQEAgLTE5NSwyMiArMzkzLDE5IEBACiAJdTMyIGJ5cGFzcyA9IDA7CiAJc3RydWN0IHByY21fY29uZmlnIHRtcHNldDsKIAljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAtRUlOVkFMOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN1cl9yYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZV8yNHh4KCZkcGxsX2NrKTsKKwljdXJfcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKCZkcGxsX2NrKTsKIAltdWx0ID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOwogCW11bHQgJj0gT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7CiAKIAlpZiAoKHJhdGUgPT0gKGN1cl9yYXRlIC8gMikpICYmIChtdWx0ID09IDIpKSB7Ci0JCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKENPUkVfQ0xLX1NSQ19EUExMLCAxKTsKKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTEwsIDEpOwogCX0gZWxzZSBpZiAoKHJhdGUgPT0gKGN1cl9yYXRlICogMikpICYmIChtdWx0ID09IDEpKSB7Ci0JCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKENPUkVfQ0xLX1NSQ19EUExMX1gyLCAxKTsKKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOwogCX0gZWxzZSBpZiAocmF0ZSAhPSBjdXJfcmF0ZSkgewogCQl2YWxpZF9yYXRlID0gb21hcDJfZHBsbGNvcmVfcm91bmRfcmF0ZShyYXRlKTsKIAkJaWYgKHZhbGlkX3JhdGUgIT0gcmF0ZSkKLQkJCWdvdG8gZHBsbF9leGl0OworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKG11bHQgPT0gMSkKIAkJCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7CkBAIC0yMTksNyArNDE0LDcgQEAKIAogCQlkZCA9IGNsay0+ZHBsbF9kYXRhOwogCQlpZiAoIWRkKQotCQkJZ290byBkcGxsX2V4aXQ7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgPSBfX3Jhd19yZWFkbChkZC0+bXVsdF9kaXYxX3JlZyk7CiAJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCAmPSB+KGRkLT5tdWx0X21hc2sgfApAQCAtMjQ1LDIyICs0NDAsMTkgQEAKIAkJaWYgKHJhdGUgPT0gY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCkJLyogSWYgYXNraW5nIGZvciAxLTEgKi8KIAkJCWJ5cGFzcyA9IDE7CiAKLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOyAvKiBGb3IgaW5pdF9tZW0gKi8KKwkJLyogRm9yIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMoKSAqLworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CiAKIAkJLyogRm9yY2UgZGxsIGxvY2sgbW9kZSAqLwogCQlvbWFwMl9zZXRfcHJjbSh0bXBzZXQuY21fY2xrc2VsMV9wbGwsIHRtcHNldC5iYXNlX3NkcmNfcmZyLAogCQkJICAgICAgIGJ5cGFzcyk7CiAKIAkJLyogRXJyYXRhOiByZXQgZGxsIGVudHJ5IHN0YXRlICovCi0JCW9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyhvbWFwMl9kbGxfZm9yY2VfbmVlZGVkKCkpOwotCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhkb25lX3JhdGUsIDApOworCQlvbWFwMnh4eF9zZHJjX2luaXRfcGFyYW1zKG9tYXAyeHh4X3NkcmNfZGxsX2lzX3VubG9ja2VkKCkpOworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShkb25lX3JhdGUsIDApOwogCX0KLQlvbWFwMl9kcGxsY29yZV9yZWNhbGMoJmRwbGxfY2spOwotCXJldCA9IDA7CiAKLWRwbGxfZXhpdDoKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuKHJldCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjY5LDkgKzQ2MSw5IEBACiAgKgogICogU2V0IHZpcnRfcHJjbV9zZXQncyByYXRlIHRvIHRoZSBtcHVfc3BlZWQgZmllbGQgb2YgdGhlIGN1cnJlbnQgUFJDTSBzZXQuCiAgKi8KLXN0YXRpYyB2b2lkIG9tYXAyX3RhYmxlX21wdV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJfdGFibGVfbXB1X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlID0gY3Vycl9wcmNtX3NldC0+bXB1X3NwZWVkOworCXJldHVybiBjdXJyX3ByY21fc2V0LT5tcHVfc3BlZWQ7CiB9CiAKIC8qCkBAIC0zMzcsMTIgKzUyOSwxMiBAQAogCX0KIAogCWN1cnJfcHJjbV9zZXQgPSBwcmNtOwotCWN1cl9yYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZV8yNHh4KCZkcGxsX2NrKTsKKwljdXJfcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKCZkcGxsX2NrKTsKIAogCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlIC8gMikgewotCQlvbWFwMl9yZXByb2dyYW1fc2RyYyhDT1JFX0NMS19TUkNfRFBMTCwgMSk7CisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMLCAxKTsKIAl9IGVsc2UgaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gY3VyX3JhdGUgKiAyKSB7Ci0JCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKENPUkVfQ0xLX1NSQ19EUExMX1gyLCAxKTsKKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOwogCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCAhPSBjdXJfcmF0ZSkgewogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKQEAgLTM2NiwyNyArNTU4LDY3IEBACiAKIAkJLyogTWFqb3Igc3Vic3lzdGVtIGRpdmlkZXJzICovCiAJCXRtcCA9IGNtX3JlYWRfbW9kX3JlZyhDT1JFX01PRCwgQ01fQ0xLU0VMMSkgJiBPTUFQMjRYWF9DTEtTRUxfRFNTMl9NQVNLOwotCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbDFfY29yZSB8IHRtcCwgQ09SRV9NT0QsIENNX0NMS1NFTDEpOworCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbDFfY29yZSB8IHRtcCwgQ09SRV9NT0QsCisJCQkJIENNX0NMS1NFTDEpOworCiAJCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKIAkJCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsX21kbSwKIAkJCQkJIE9NQVAyNDMwX01ETV9NT0QsIENNX0NMS1NFTCk7CiAKLQkJLyogeDIgdG8gZW50ZXIgaW5pdF9tZW0gKi8KLQkJb21hcDJfcmVwcm9ncmFtX3NkcmMoQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOworCQkvKiB4MiB0byBlbnRlciBvbWFwMnh4eF9zZHJjX2luaXRfcGFyYW1zKCkgKi8KKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOwogCiAJCW9tYXAyX3NldF9wcmNtKHByY20tPmNtX2Nsa3NlbDFfcGxsLCBwcmNtLT5iYXNlX3NkcmNfcmZyLAogCQkJICAgICAgIGJ5cGFzcyk7CiAKLQkJb21hcDJfaW5pdF9tZW1vcnlfcGFyYW1zKG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQoKSk7Ci0JCW9tYXAyX3JlcHJvZ3JhbV9zZHJjKGRvbmVfcmF0ZSwgMCk7CisJCW9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMob21hcDJ4eHhfc2RyY19kbGxfaXNfdW5sb2NrZWQoKSk7CisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKGRvbmVfcmF0ZSwgMCk7CiAKIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCX0KLQlvbWFwMl9kcGxsY29yZV9yZWNhbGMoJmRwbGxfY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKy8qCisgKiBXYWxrIFBSQ00gcmF0ZSB0YWJsZSBhbmQgZmlsbG91dCBjcHVmcmVxIGZyZXFfdGFibGUKKyAqLworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBmcmVxX3RhYmxlW0FSUkFZX1NJWkUocmF0ZV90YWJsZSldOworCit2b2lkIG9tYXAyX2Nsa19pbml0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpCit7CisJc3RydWN0IHByY21fY29uZmlnICpwcmNtOworCWludCBpID0gMDsKKworCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CisJCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQorCQkJY29udGludWU7CisJCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQkJY29udGludWU7CisKKwkJLyogZG9uJ3QgcHV0IGJ5cGFzcyByYXRlcyBpbiB0YWJsZSAqLworCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBwcmNtLT54dGFsX3NwZWVkKQorCQkJY29udGludWU7CisKKwkJZnJlcV90YWJsZVtpXS5pbmRleCA9IGk7CisJCWZyZXFfdGFibGVbaV0uZnJlcXVlbmN5ID0gcHJjbS0+bXB1X3NwZWVkIC8gMTAwMDsKKwkJaSsrOworCX0KKworCWlmIChpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byBpbml0aWFsaXplIGZyZXF1ZW5jeSAiCisJCSAgICAgICAidGFibGVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWZyZXFfdGFibGVbaV0uaW5kZXggPSBpOworCWZyZXFfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9UQUJMRV9FTkQ7CisKKwkqdGFibGUgPSAmZnJlcV90YWJsZVswXTsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgb21hcDJfY2xrX2Z1bmN0aW9ucyA9IHsKIAkuY2xrX2VuYWJsZQkJPSBvbWFwMl9jbGtfZW5hYmxlLAogCS5jbGtfZGlzYWJsZQkJPSBvbWFwMl9jbGtfZGlzYWJsZSwKQEAgLTM5NCwyNCArNjI2LDI3IEBACiAJLmNsa19zZXRfcmF0ZQkJPSBvbWFwMl9jbGtfc2V0X3JhdGUsCiAJLmNsa19zZXRfcGFyZW50CQk9IG9tYXAyX2Nsa19zZXRfcGFyZW50LAogCS5jbGtfZGlzYWJsZV91bnVzZWQJPSBvbWFwMl9jbGtfZGlzYWJsZV91bnVzZWQsCisjaWZkZWYJQ09ORklHX0NQVV9GUkVRCisJLmNsa19pbml0X2NwdWZyZXFfdGFibGUJPSBvbWFwMl9jbGtfaW5pdF9jcHVmcmVxX3RhYmxlLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgdTMyIG9tYXAyX2dldF9hcGxsX2Nsa2luKHZvaWQpCiB7Ci0JdTMyIGFwbGxzLCBzY2xrID0gMDsKKwl1MzIgYXBsbHMsIHNyYXRlID0gMDsKIAogCWFwbGxzID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDEpOwogCWFwbGxzICY9IE9NQVAyNFhYX0FQTExTX0NMS0lOX01BU0s7CiAJYXBsbHMgPj49IE9NQVAyNFhYX0FQTExTX0NMS0lOX1NISUZUOwogCiAJaWYgKGFwbGxzID09IEFQTExTX0NMS0lOXzE5XzJNSFopCi0JCXNjbGsgPSAxOTIwMDAwMDsKKwkJc3JhdGUgPSAxOTIwMDAwMDsKIAllbHNlIGlmIChhcGxscyA9PSBBUExMU19DTEtJTl8xM01IWikKLQkJc2NsayA9IDEzMDAwMDAwOworCQlzcmF0ZSA9IDEzMDAwMDAwOwogCWVsc2UgaWYgKGFwbGxzID09IEFQTExTX0NMS0lOXzEyTUhaKQotCQlzY2xrID0gMTIwMDAwMDA7CisJCXNyYXRlID0gMTIwMDAwMDA7CiAKLQlyZXR1cm4gc2NsazsKKwlyZXR1cm4gc3JhdGU7CiB9CiAKIHN0YXRpYyB1MzIgb21hcDJfZ2V0X3N5c2Nsa2Rpdih2b2lkKQpAQCAtNDI1LDE2ICs2NjAsMTQgQEAKIAlyZXR1cm4gZGl2OwogfQogCi1zdGF0aWMgdm9pZCBvbWFwMl9vc2NfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl9vc2NfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlID0gb21hcDJfZ2V0X2FwbGxfY2xraW4oKSAqIG9tYXAyX2dldF9zeXNjbGtkaXYoKTsKLQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiBvbWFwMl9nZXRfYXBsbF9jbGtpbigpICogb21hcDJfZ2V0X3N5c2Nsa2RpdigpOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBvbWFwMl9nZXRfc3lzY2xrZGl2KCk7Ci0JcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBvbWFwMl9nZXRfc3lzY2xrZGl2KCk7CiB9CiAKIC8qCkBAIC00NjAsNyArNjkzLDcgQEAKIAlpZiAoIW1wdXJhdGUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKCZ2aXJ0X3ByY21fc2V0LCBtcHVyYXRlKSkKKwlpZiAoY2xrX3NldF9yYXRlKCZ2aXJ0X3ByY21fc2V0LCBtcHVyYXRlKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBtYXRjaGluZyBNUFUgcmF0ZVxuIik7CiAKIAlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOwpAQCAtNDc3LDggKzcxMCw4IEBACiBpbnQgX19pbml0IG9tYXAyX2Nsa19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHByY21fY29uZmlnICpwcmNtOwotCXN0cnVjdCBjbGsgKipjbGtwOwotCXUzMiBjbGtyYXRlOworCXN0cnVjdCBvbWFwX2NsayAqYzsKKwl1MzIgY2xrcmF0ZSwgY3B1X21hc2s7CiAKIAlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpCiAJCWNwdV9tYXNrID0gUkFURV9JTl8yNDJYOwpAQCAtNDg3LDI2ICs3MjAsMjggQEAKIAogCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKIAotCW9tYXAyX29zY19jbGtfcmVjYWxjKCZvc2NfY2spOwotCW9tYXAyX3N5c19jbGtfcmVjYWxjKCZzeXNfY2spOworCW9zY19jay5yYXRlID0gb21hcDJfb3NjX2Nsa19yZWNhbGMoJm9zY19jayk7CisJcHJvcGFnYXRlX3JhdGUoJm9zY19jayk7CisJc3lzX2NrLnJhdGUgPSBvbWFwMl9zeXNfY2xrX3JlY2FsYygmc3lzX2NrKTsKKwlwcm9wYWdhdGVfcmF0ZSgmc3lzX2NrKTsKIAotCWZvciAoY2xrcCA9IG9uY2hpcF8yNHh4X2Nsa3M7Ci0JICAgICBjbGtwIDwgb25jaGlwXzI0eHhfY2xrcyArIEFSUkFZX1NJWkUob25jaGlwXzI0eHhfY2xrcyk7Ci0JICAgICBjbGtwKyspIHsKKwlmb3IgKGMgPSBvbWFwMjR4eF9jbGtzOyBjIDwgb21hcDI0eHhfY2xrcyArIEFSUkFZX1NJWkUob21hcDI0eHhfY2xrcyk7IGMrKykKKwkJY2xrX2luaXRfb25lKGMtPmxrLmNsayk7CiAKLQkJaWYgKCgqY2xrcCktPmZsYWdzICYgQ0xPQ0tfSU5fT01BUDI0MlggJiYgY3B1X2lzX29tYXAyNDIwKCkpIHsKLQkJCWNsa19yZWdpc3RlcigqY2xrcCk7Ci0JCQljb250aW51ZTsKKwljcHVfbWFzayA9IDA7CisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKQorCQljcHVfbWFzayB8PSBDS18yNDJYOworCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKKwkJY3B1X21hc2sgfD0gQ0tfMjQzWDsKKworCWZvciAoYyA9IG9tYXAyNHh4X2Nsa3M7IGMgPCBvbWFwMjR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwMjR4eF9jbGtzKTsgYysrKQorCQlpZiAoYy0+Y3B1ICYgY3B1X21hc2spIHsKKwkJCWNsa2Rldl9hZGQoJmMtPmxrKTsKKwkJCWNsa19yZWdpc3RlcihjLT5say5jbGspOwogCQl9CiAKLQkJaWYgKCgqY2xrcCktPmZsYWdzICYgQ0xPQ0tfSU5fT01BUDI0M1ggJiYgY3B1X2lzX29tYXAyNDMwKCkpIHsKLQkJCWNsa19yZWdpc3RlcigqY2xrcCk7Ci0JCQljb250aW51ZTsKLQkJfQotCX0KLQogCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLwotCWNsa3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoJmRwbGxfY2spOworCWNsa3JhdGUgPSBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZSgmZHBsbF9jayk7CiAJZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKIAkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjR4eC5oCmluZGV4IGFkNmQ5OGQuLjMzYzNlNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0eHguaApAQCAtMjQsMTcgKzI0LDEzIEBACiAjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCiAjaW5jbHVkZSAic2RyYy5oIgogCi1zdGF0aWMgdm9pZCBvbWFwMl90YWJsZV9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl90YWJsZV9tcHVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiBzdGF0aWMgaW50IG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIHN0YXRpYyBsb25nIG9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotc3RhdGljIHZvaWQgb21hcDJfc3lzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAyX29zY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDJfZHBsbGNvcmVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgaW50IG9tYXAyX2Nsa19maXhlZF9lbmFibGUoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAyX2Nsa19maXhlZF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsayk7Ci1zdGF0aWMgaW50IG9tYXAyX2VuYWJsZV9vc2NfY2soc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAyX2Rpc2FibGVfb3NjX2NrKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDJfb3NjX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvbWFwMl9kcGxsY29yZV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKIHN0YXRpYyBpbnQgb21hcDJfcmVwcm9ncmFtX2RwbGxjb3JlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIAogLyogS2V5IGRpdmlkZXJzIHdoaWNoIG1ha2UgdXAgYSBQUkNNIHNldC4gUmF0aW8ncyBmb3IgYSBQUkNNIGFyZSBtYW5kYXRlZC4KQEAgLTYyMyw0MSArNjE5LDM1IEBACiAvKiBCYXNlIGV4dGVybmFsIGlucHV0IGNsb2NrcyAqLwogc3RhdGljIHN0cnVjdCBjbGsgZnVuY18zMmtfY2sgPSB7CiAJLm5hbWUJCT0gImZ1bmNfMzJrX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmF0ZQkJPSAzMjAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAogfTsKIAogLyogVHlwaWNhbCAxMi8xM01IeiBpbiBzdGFuZGFsb25lIG1vZGUsIHdpbGwgYmUgMjZNaHogaW4gY2hhc3NpcyBtb2RlICovCiBzdGF0aWMgc3RydWN0IGNsayBvc2NfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsICoyNiwgMzguNClNSHogKi8KIAkubmFtZQkJPSAib3NjX2NrIiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9QUk9QQUdBVEVTLAorCS5vcHMJCT0gJmNsa29wc19vc2NjaywKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlCQk9ICZvbWFwMl9lbmFibGVfb3NjX2NrLAotCS5kaXNhYmxlCT0gJm9tYXAyX2Rpc2FibGVfb3NjX2NrLAogCS5yZWNhbGMJCT0gJm9tYXAyX29zY19jbGtfcmVjYWxjLAogfTsKIAogLyogV2l0aG91dCBtb2RlbSBsaWtlbHkgMTJNSHosIHdpdGggbW9kZW0gbGlrZWx5IDEzTUh6ICovCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsIDI2LCAzOC40KU1IeiAqLwogCS5uYW1lCQk9ICJzeXNfY2siLAkJLyogfiByZWZfY2xrIGFsc28gKi8KKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZvc2NfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX3N5c19jbGtfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYWx0X2NrID0gewkJLyogVHlwaWNhbCA1NE0gb3IgNDhNLCBtYXkgbm90IGV4aXN0ICovCiAJLm5hbWUJCT0gImFsdF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gNTQwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVJBVEVfRklYRUQgfCBBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKIH07CiAKIC8qCkBAIC02NzMsNyArNjYzLDEyIEBACiAJLm11bHRfZGl2MV9yZWcJCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAogCS5tdWx0X21hc2sJCT0gT01BUDI0WFhfRFBMTF9NVUxUX01BU0ssCiAJLmRpdjFfbWFzawkJPSBPTUFQMjRYWF9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCQk9ICZzeXNfY2ssCisJLmNsa19yZWYJCT0gJnN5c19jaywKKwkuY29udHJvbF9yZWcJCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX21hc2sJCT0gT01BUDI0WFhfRU5fRFBMTF9NQVNLLAogCS5tYXhfbXVsdGlwbGllcgkJPSAxMDI0LAorCS5taW5fZGl2aWRlcgkJPSAxLAogCS5tYXhfZGl2aWRlcgkJPSAxNiwKIAkucmF0ZV90b2xlcmFuY2UJCT0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwpAQCAtNjg0LDEwICs2NzksOSBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsX2NrID0gewogCS5uYW1lCQk9ICJkcGxsX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBDYW4gYmUgZnVuY18zMmsgYWxzbyAqLwogCS5kcGxsX2RhdGEJPSAmZHBsbF9kZCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfZHBsbGNvcmVfcmVjYWxjLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9yZXByb2dyYW1fZHBsbGNvcmUsCkBAIC02OTUsMzAgKzY4OSwyNCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBhcGxsOTZfY2sgPSB7CiAJLm5hbWUJCT0gImFwbGw5Nl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX2ZpeGVkLAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkucmF0ZQkJPSA5NjAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8IEVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX09OX0lOSVQsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fOTZNX1BMTF9TSElGVCwKLQkuZW5hYmxlCQk9ICZvbWFwMl9jbGtfZml4ZWRfZW5hYmxlLAotCS5kaXNhYmxlCT0gJm9tYXAyX2Nsa19maXhlZF9kaXNhYmxlLAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYXBsbDU0X2NrID0gewogCS5uYW1lCQk9ICJhcGxsNTRfY2siLAorCS5vcHMJCT0gJmNsa29wc19maXhlZCwKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLnJhdGUJCT0gNTQwMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfCBFTkFCTEVfT05fSU5JVCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9PTl9JTklULAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzU0TV9QTExfU0hJRlQsCi0JLmVuYWJsZQkJPSAmb21hcDJfY2xrX2ZpeGVkX2VuYWJsZSwKLQkuZGlzYWJsZQk9ICZvbWFwMl9jbGtfZml4ZWRfZGlzYWJsZSwKLQkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKIH07CiAKIC8qCkBAIC03NDUsOSArNzMzLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY181NG1fY2sgPSB7CiAJLm5hbWUJCT0gImZ1bmNfNTRtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZhcGxsNTRfY2ssCS8qIGNhbiBhbHNvIGJlIGFsdF9jbGsgKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9QUk9QQUdBVEVTIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCkBAIC03NTgsOSArNzQ1LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgY29yZV9jayA9IHsKIAkubmFtZQkJPSAiY29yZV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbF9jaywJCS8qIGNhbiBhbHNvIGJlIDMyayAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCB8IFJBVEVfUFJPUEFHQVRFUywKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTc4NSw5ICs3NzEsOCBAQAogLyogVGhlIHBhcmVudCBvZiB0aGlzIGNsb2NrIGlzIG5vdCBzZWxlY3RhYmxlIG9uIDI0MjAuICovCiBzdGF0aWMgc3RydWN0IGNsayBmdW5jXzk2bV9jayA9IHsKIAkubmFtZQkJPSAiZnVuY185Nm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9QUk9QQUdBVEVTIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCkBAIC04MTgsOSArODAzLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY180OG1fY2sgPSB7CiAJLm5hbWUJCT0gImZ1bmNfNDhtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZhcGxsOTZfY2ssCSAvKiA5Nk0gb3IgQWx0ICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCVJBVEVfUFJPUEFHQVRFUyB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLApAQCAtODMzLDEwICs4MTcsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBmdW5jXzEybV9jayA9IHsKIAkubmFtZQkJPSAiZnVuY18xMm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAogCS5maXhlZF9kaXYJPSA0LAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlSQVRFX1BST1BBR0FURVMgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCiB9OwpAQCAtODQ0LDggKzgyNyw4IEBACiAvKiBTZWN1cmUgdGltZXIsIG9ubHkgYXZhaWxhYmxlIGluIHNlY3VyZSBtb2RlICovCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQxX29zY19jayA9IHsKIAkubmFtZQkJPSAiY2tfd2R0MV9vc2MiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCiAJLnBhcmVudAkJPSAmb3NjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC04ODcsOSArODcwLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dF9zcmMgPSB7CiAJLm5hbWUJCT0gInN5c19jbGtvdXRfc3JjIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9QUk9QQUdBVEVTLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0NMS09VVF9FTl9TSElGVCwKQEAgLTkxOCw5ICs5MDAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0ID0gewogCS5uYW1lCQk9ICJzeXNfY2xrb3V0IiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZzeXNfY2xrb3V0X3NyYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfRElWX01BU0ssCkBAIC05MzMsOCArOTE0LDggQEAKIC8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLwogc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDJfc3JjID0gewogCS5uYW1lCQk9ICJzeXNfY2xrb3V0Ml9zcmMiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IFJBVEVfUFJPUEFHQVRFUywKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9DTEtPVVQyX0VOX1NISUZULApAQCAtOTU1LDggKzkzNiw4IEBACiAvKiBJbiAyNDMwLCBuZXcgaW4gMjQyMCBFUzIgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQyID0gewogCS5uYW1lCQk9ICJzeXNfY2xrb3V0MiIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmc3lzX2Nsa291dDJfc3JjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkuY2xrc2VsX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDI0MjBfQ0xLT1VUMl9ESVZfTUFTSywKQEAgLTk2OCw4ICs5NDksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBlbXVsX2NrID0gewogCS5uYW1lCQk9ICJlbXVsX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS0VNVUxfQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VNVUxBVElPTl9FTl9TSElGVCwKQEAgLTEwMDMsMTAgKzk4NCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsJLyogQ29udHJvbCBjcHUgKi8KIAkubmFtZQkJPSAibXB1X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCB8IERFTEFZRURfQVBQIHwKLQkJCQlDT05GSUdfUEFSVElDSVBBTlQgfCBSQVRFX1BST1BBR0FURVMsCisJLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAogCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBDTV9DTEtTRUwpLApAQCAtMTA0Niw5ICsxMDI2LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNwX2ZjayA9IHsKIAkubmFtZQkJPSAiZHNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgREVMQVlFRF9BUFAgfAotCQkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCiAJLmNsa2RtX25hbWUJPSAiZHNwX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ01fRkNMS0VOX0RTUF9FTl9EU1BfU0hJRlQsCkBAIC0xMDc2LDkgKzEwNTYsOSBAQAogLyogVGhpcyBjbG9jayBkb2VzIG5vdCBleGlzdCBhcyBzdWNoIGluIHRoZSBUUk0uICovCiBzdGF0aWMgc3RydWN0IGNsayBkc3BfaXJhdGVfaWNrID0gewogCS5uYW1lCQk9ICJkc3BfaXJhdGVfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkc3BfZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwgREVMQVlFRF9BUFAgfAotCQkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNQX0lGX01BU0ssCiAJLmNsa3NlbAkJPSBkc3BfaXJhdGVfaWNrX2Nsa3NlbCwKQEAgLTEwOTAsOCArMTA3MCw5IEBACiAvKiAyNDIwIG9ubHkgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9pY2sgPSB7CiAJLm5hbWUJCT0gImRzcF9pY2siLAkgLyogYXBwYXJlbnRseSBpcGkgYW5kIGlzcCAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZHNwX2lyYXRlX2ljaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0RTUF9JUElfU0hJRlQsCSAgICAgIC8qIGZvciBpcGkgKi8KIH07CkBAIC0xMDk5LDggKzEwODAsOSBAQAogLyogMjQzMCBvbmx5IC0gRU5fRFNQIGNvbnRyb2xzIGJvdGggZHNwIGZjbGsgYW5kIGljbGsgb24gMjQzMCAqLwogc3RhdGljIHN0cnVjdCBjbGsgaXZhMl8xX2ljayA9IHsKIAkubmFtZQkJPSAiaXZhMl8xX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ01fRkNMS0VOX0RTUF9FTl9EU1BfU0hJRlQsCiB9OwpAQCAtMTExMiw5ICsxMDk0LDkgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbGsgaXZhMV9pZmNrID0gewogCS5uYW1lCQk9ICJpdmExX2lmY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDT05GSUdfUEFSVElDSVBBTlQgfAotCQkJCVJBVEVfUFJPUEFHQVRFUyB8IERFTEFZRURfQVBQLAorCS5mbGFncwkJPSBDT05GSUdfUEFSVElDSVBBTlQgfCBERUxBWUVEX0FQUCwKIAkuY2xrZG1fbmFtZQk9ICJpdmExX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSVZBX0NPUF9TSElGVCwKQEAgLTExMjksOCArMTExMSw4IEBACiAvKiBJVkExIG1wdS9pbnQvaS9mIGNsb2NrcyBhcmUgLzIgb2YgcGFyZW50ICovCiBzdGF0aWMgc3RydWN0IGNsayBpdmExX21wdV9pbnRfaWZjayA9IHsKIAkubmFtZQkJPSAiaXZhMV9tcHVfaW50X2lmY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmaXZhMV9pZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJpdmExX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSVZBX01QVV9TSElGVCwKQEAgLTExNzUsMTAgKzExNTcsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBjb3JlX2wzX2NrID0gewkvKiBVc2VkIGZvciBpY2sgYW5kIGZjaywgaW50ZXJjb25uZWN0ICovCiAJLm5hbWUJCT0gImNvcmVfbDNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUFMV0FZU19FTkFCTEVEIHwgREVMQVlFRF9BUFAgfAotCQkJCUNPTkZJR19QQVJUSUNJUEFOVCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9MM19NQVNLLApAQCAtMTIwNCw5ICsxMTg1LDkgQEAKIC8qIEl0IGlzIHVuY2xlYXIgZnJvbSBUUk0gd2hldGhlciB1c2JfbDRfaWNrIGlzIHJlYWxseSBpbiBMMyBvciBMNCBjbGtkbSAqLwogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsJLyogRlMtVVNCIGludGVyZmFjZSBjbG9jayAqLwogCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCURFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VU0JfU0hJRlQsCkBAIC0xMjM4LDkgKzEyMTksOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBsNF9jayA9IHsJCS8qIHVzZWQgYm90aCBhcyBhbiBpY2sgYW5kIGZjayAqLwogCS5uYW1lCQk9ICJsNF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQgfCBERUxBWUVEX0FQUCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9MNF9NQVNLLApAQCAtMTI3Niw5ICsxMjU3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc3NpX3Nzcl9zc3RfZmNrID0gewogCS5uYW1lCQk9ICJzc2lfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCURFTEFZRURfQVBQLAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9TU0lfU0hJRlQsCkBAIC0xMjkwLDYgKzEyNzEsMjAgQEAKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCiB9OwogCisvKgorICogUHJlc3VtYWJseSB0aGlzIGlzIHRoZSBzYW1lIGFzIFNTSV9JQ0xLLgorICogVFJNIGNvbnRyYWRpY3RzIGl0c2VsZiBvbiB3aGF0IGNsb2NrZG9tYWluIFNTSV9JQ0xLIGlzIGluCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9sNF9pY2sgPSB7CisJLm5hbWUJCT0gInNzaV9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU1NJX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCiAKIC8qCiAgKiBHRlggY2xvY2sgZG9tYWluCkBAIC0xMzEyLDggKzEzMDcsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBnZnhfM2RfZmNrID0gewogCS5uYW1lCQk9ICJnZnhfM2RfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fM0RfU0hJRlQsCkBAIC0xMzI3LDggKzEzMjIsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBnZnhfMmRfZmNrID0gewogCS5uYW1lCQk9ICJnZnhfMmRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMkRfU0hJRlQsCkBAIC0xMzQyLDggKzEzMzcsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBnZnhfaWNrID0gewogCS5uYW1lCQk9ICJnZnhfaWNrIiwJCS8qIEZyb20gbDMgKi8KKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUF9FTl9HRlhfU0hJRlQsCkBAIC0xMzcyLDggKzEzNjcsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtZG1faWNrID0gewkJLyogdXNlZCBib3RoIGFzIGEgaWNrIGFuZCBmY2sgKi8KIAkubmFtZQkJPSAibWRtX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAorCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKIAkuY2xrZG1fbmFtZQk9ICJtZG1fY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNDMwX01ETV9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9DTV9JQ0xLRU5fTURNX0VOX01ETV9TSElGVCwKQEAgLTEzODcsOCArMTM4Myw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9vc2NfY2sgPSB7CiAJLm5hbWUJCT0gIm1kbV9vc2NfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmb3NjX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJtZG1fY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNDMwX01ETV9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9PU0NfU0hJRlQsCkBAIC0xNDMyLDggKzE0MjgsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkc3NfaWNrID0gewkJLyogRW5hYmxlcyBib3RoIEwzLEw0IElDTEsncyAqLwogCS5uYW1lCQk9ICJkc3NfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZsNF9jaywJLyogcmVhbGx5IGJvdGggbDMgYW5kIGw0ICovCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULApAQCAtMTQ0Miw5ICsxNDM4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzMV9mY2sgPSB7CiAJLm5hbWUJCT0gImRzczFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAkJLyogQ29yZSBvciBzeXMgKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJREVMQVlFRF9BUFAsCisJLmZsYWdzCQk9IERFTEFZRURfQVBQLAogCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRFNTMV9TSElGVCwKQEAgLTE0NzUsOSArMTQ3MSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRzczJfZmNrID0gewkJLyogQWx0IGNsayB1c2VkIGluIHBvd2VyIG1hbmFnZW1lbnQgKi8KIAkubmFtZQkJPSAiZHNzMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIGZpeGVkIGF0IHN5c19jayBvciA0OE1IeiAqLwotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlERUxBWUVEX0FQUCwKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCiAJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MyX1NISUZULApAQCAtMTQ5MCw4ICsxNDg2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzXzU0bV9mY2sgPSB7CS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCiAJLm5hbWUJCT0gImRzc181NG1fZmNrIiwJLyogNTRtIHR2IGNsayAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9UVl9TSElGVCwKQEAgLTE1MTgsOCArMTUxNCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfaWNrID0gewogCS5uYW1lCQk9ICJncHQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCkBAIC0xNTI4LDggKzE1MjQsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxX1NISUZULApAQCAtMTU0NCw4ICsxNTQwLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDJfU0hJRlQsCkBAIC0xNTU0LDggKzE1NTAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQyX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKQEAgLTE1NjgsOCArMTU2NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfaWNrID0gewogCS5uYW1lCQk9ICJncHQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULApAQCAtMTU3OCw4ICsxNTc0LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCkBAIC0xNTkyLDggKzE1ODgsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNF9TSElGVCwKQEAgLTE2MDIsOCArMTU5OCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfZmNrID0gewogCS5uYW1lCQk9ICJncHQ0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ0X1NISUZULApAQCAtMTYxNiw4ICsxNjEyLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDVfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDVfU0hJRlQsCkBAIC0xNjI2LDggKzE2MjIsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0NV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKQEAgLTE2NDAsOCArMTYzNiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfaWNrID0gewogCS5uYW1lCQk9ICJncHQ2X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULApAQCAtMTY1MCw4ICsxNjQ2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDZfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCkBAIC0xNjY0LDggKzE2NjAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMTY3Myw4ICsxNjY5LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDdfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCkBAIC0xNjg3LDggKzE2ODMsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0OF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOF9TSElGVCwKQEAgLTE2OTcsOCArMTY5Myw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfZmNrID0gewogCS5uYW1lCQk9ICJncHQ4X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULApAQCAtMTcxMSw4ICsxNzA3LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDlfU0hJRlQsCkBAIC0xNzIxLDggKzE3MTcsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0OV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOV9TSElGVCwKQEAgLTE3MzUsOCArMTczMSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MTBfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDEwX1NISUZULApAQCAtMTc0NSw4ICsxNzQxLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0gewogCS5uYW1lCQk9ICJncHQxMF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCkBAIC0xNzU5LDggKzE3NTUsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDExX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMV9TSElGVCwKQEAgLTE3NjksOCArMTc2NSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDExX1NISUZULApAQCAtMTc4Myw4ICsxNzc5LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0gewogCS5uYW1lCQk9ICJncHQxMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCkBAIC0xNzkzLDggKzE3ODksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMl9mY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKQEAgLTE4MDcsOSArMTgwMyw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9pY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDFfU0hJRlQsCkBAIC0xODE4LDkgKzE4MTQsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULApAQCAtMTgyOSw5ICsxODI1LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMl9TSElGVCwKQEAgLTE4NDAsOSArMTgzNiw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCkBAIC0xODUxLDkgKzE4NDcsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDMsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQM19TSElGVCwKQEAgLTE4NjIsOSArMTg1OCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19mY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1AzX1NISUZULApAQCAtMTg3Myw5ICsxODY5LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3A0X2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSA0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDRfU0hJRlQsCkBAIC0xODg0LDkgKzE4ODAsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDQsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQNF9TSElGVCwKQEAgLTE4OTUsOSArMTg5MSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9pY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gNSwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULApAQCAtMTkwNiw5ICsxOTAyLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ZjayA9IHsKIAkubmFtZQkJPSAibWNic3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSA1LAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDVfU0hJRlQsCkBAIC0xOTE3LDEwICsxOTEzLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9pY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTFfU0hJRlQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKQEAgLTE5MjgsOSArMTkyNCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTFfU0hJRlQsCkBAIC0xOTM5LDkgKzE5MzUsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULApAQCAtMTk1MCw5ICsxOTQ2LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkyX2ZjayA9IHsKIAkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMl9TSElGVCwKQEAgLTE5NjEsOSArMTk1Nyw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19pY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULApAQCAtMTk3Miw5ICsxOTY4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ZjayA9IHsKIAkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ1NQSTNfU0hJRlQsCkBAIC0xOTgzLDggKzE5NzksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMV9TSElGVCwKQEAgLTE5OTMsOCArMTk4OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ZjayA9IHsKIAkubmFtZQkJPSAidWFydDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQxX1NISUZULApAQCAtMjAwMyw4ICsxOTk5LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfaWNrID0gewogCS5uYW1lCQk9ICJ1YXJ0Ml9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDJfU0hJRlQsCkBAIC0yMDEzLDggKzIwMDksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9mY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKQEAgLTIwMjMsOCArMjAxOSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ljayA9IHsKIAkubmFtZQkJPSAidWFydDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULApAQCAtMjAzMyw4ICsyMDI5LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfZmNrID0gewogCS5uYW1lCQk9ICJ1YXJ0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCkBAIC0yMDQzLDggKzIwMzksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvc19pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW9zX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULApAQCAtMjA1Myw4ICsyMDQ5LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb3NfZmNrID0gewogCS5uYW1lCQk9ICJncGlvc19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKQEAgLTIwNjMsOCArMjA1OSw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1wdV93ZHRfaWNrID0gewogCS5uYW1lCQk9ICJtcHVfd2R0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01QVV9XRFRfU0hJRlQsCkBAIC0yMDczLDggKzIwNjksOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ZjayA9IHsKIAkubmFtZQkJPSAibXB1X3dkdF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULApAQCAtMjA4Myw5ICsyMDc5LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc3luY18zMmtfaWNrID0gewogCS5uYW1lCQk9ICJzeW5jXzMya19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzMyS1NZTkNfU0hJRlQsCkBAIC0yMDk0LDggKzIwOTAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKIAkubmFtZQkJPSAid2R0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQxX1NISUZULApAQCAtMjEwNCw5ICsyMTAwLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgb21hcGN0cmxfaWNrID0gewogCS5uYW1lCQk9ICJvbWFwY3RybF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1ggfAotCQkJCUVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX09NQVBDVFJMX1NISUZULApAQCAtMjExNSw4ICsyMTExLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgaWNyX2ljayA9IHsKIAkubmFtZQkJPSAiaWNyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JQ1JfU0hJRlQsCkBAIC0yMTI1LDggKzIxMjEsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBjYW1faWNrID0gewogCS5uYW1lCQk9ICJjYW1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9DQU1fU0hJRlQsCkBAIC0yMTQwLDggKzIxMzYsOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsayBjYW1fZmNrID0gewogCS5uYW1lCQk9ICJjYW1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9DQU1fU0hJRlQsCkBAIC0yMTUwLDggKzIxNDYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtYWlsYm94ZXNfaWNrID0gewogCS5uYW1lCQk9ICJtYWlsYm94ZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01BSUxCT1hFU19TSElGVCwKQEAgLTIxNjAsOCArMjE1Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfaWNrID0gewogCS5uYW1lCQk9ICJ3ZHQ0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQ0X1NISUZULApAQCAtMjE3MCw4ICsyMTY2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgd2R0NF9mY2sgPSB7CiAJLm5hbWUJCT0gIndkdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDRfU0hJRlQsCkBAIC0yMTgwLDggKzIxNzYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ljayA9IHsKIAkubmFtZQkJPSAid2R0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1dEVDNfU0hJRlQsCkBAIC0yMTkwLDggKzIxODYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ZjayA9IHsKIAkubmFtZQkJPSAid2R0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1dEVDNfU0hJRlQsCkBAIC0yMjAwLDggKzIxOTYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7CiAJLm5hbWUJCT0gIm1zcHJvX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NU1BST19TSElGVCwKQEAgLTIyMTAsOCArMjIwNiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ZjayA9IHsKIAkubmFtZQkJPSAibXNwcm9fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULApAQCAtMjIyMCw4ICsyMjE2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jX2ljayA9IHsKIAkubmFtZQkJPSAibW1jX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULApAQCAtMjIzMCw4ICsyMjI2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jX2ZjayA9IHsKIAkubmFtZQkJPSAibW1jX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULApAQCAtMjI0MCw4ICsyMjM2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ljayA9IHsKIAkubmFtZQkJPSAiZmFjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9GQUNfU0hJRlQsCkBAIC0yMjUwLDggKzIyNDYsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBmYWNfZmNrID0gewogCS5uYW1lCQk9ICJmYWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKQEAgLTIyNjAsOCArMjI1Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGVhY19pY2sgPSB7CiAJLm5hbWUJCT0gImVhY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKQEAgLTIyNzAsOCArMjI2Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGVhY19mY2sgPSB7CiAJLm5hbWUJCT0gImVhY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKQEAgLTIyODAsOCArMjI3Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9pY2sgPSB7CiAJLm5hbWUJCT0gImhkcV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fSERRX1NISUZULApAQCAtMjI5MCw4ICsyMjg2LDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ZjayA9IHsKIAkubmFtZQkJPSAiaGRxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9IRFFfU0hJRlQsCkBAIC0yMzAwLDkgKzIyOTYsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMyX1NISUZULApAQCAtMjMxMSw5ICsyMzA3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzJfU0hJRlQsCkBAIC0yMzIyLDkgKzIzMTgsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmNoczJfZmNrID0gewogCS5uYW1lCQk9ICJpMmNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JMkNIUzJfU0hJRlQsCkBAIC0yMzMzLDkgKzIzMjksOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULApAQCAtMjM0NCw5ICsyMzQwLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCkBAIC0yMzU1LDkgKzIzNTEsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmNoczFfZmNrID0gewogCS5uYW1lCQk9ICJpMmNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JMkNIUzFfU0hJRlQsCkBAIC0yMzY2LDMzICsyMzYyLDMzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfZmNrID0gewogCS5uYW1lCQk9ICJncG1jX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlFTkFCTEVfT05fSU5JVCwKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfZmNrID0gewogCS5uYW1lCQk9ICJzZG1hX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KIAkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzZG1hX2ljayA9IHsKIAkubmFtZQkJPSAic2RtYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHZseW5xX2ljayA9IHsKIAkubmFtZQkJPSAidmx5bnFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1ZMWU5RX1NISUZULApAQCAtMjQyNiw4ICsyNDIyLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfZmNrID0gewogCS5uYW1lCQk9ICJ2bHlucV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgREVMQVlFRF9BUFAsCisJLmZsYWdzCQk9IERFTEFZRURfQVBQLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1ZMWU5RX1NISUZULApAQCAtMjQ0Miw4ICsyNDM5LDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc2RyY19pY2sgPSB7CiAJLm5hbWUJCT0gInNkcmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IEVOQUJMRV9PTl9JTklULAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9TRFJDX1NISUZULApAQCAtMjQ1Miw4ICsyNDUwLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZGVzX2ljayA9IHsKIAkubmFtZQkJPSAiZGVzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9ERVNfU0hJRlQsCkBAIC0yNDYyLDggKzI0NjAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzaGFfaWNrID0gewogCS5uYW1lCQk9ICJzaGFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NIQV9TSElGVCwKQEAgLTI0NzIsOCArMjQ3MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19pY2sgPSB7CiAJLm5hbWUJCT0gInJuZ19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUk5HX1NISUZULApAQCAtMjQ4Miw4ICsyNDgwLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgYWVzX2ljayA9IHsKIAkubmFtZQkJPSAiYWVzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1ggfCBDTE9DS19JTl9PTUFQMjQyWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9BRVNfU0hJRlQsCkBAIC0yNDkyLDggKzI0OTAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBwa2FfaWNrID0gewogCS5uYW1lCQk9ICJwa2FfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCB8IENMT0NLX0lOX09NQVAyNDJYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1BLQV9TSElGVCwKQEAgLTI1MDIsOCArMjUwMCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9mY2sgPSB7CiAJLm5hbWUJCT0gInVzYl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYIHwgQ0xPQ0tfSU5fT01BUDI0MlgsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVVNCX1NISUZULApAQCAtMjUxMiw4ICsyNTEwLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaHNfaWNrID0gewogCS5uYW1lCQk9ICJ1c2Joc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fVVNCSFNfU0hJRlQsCkBAIC0yNTIyLDggKzI1MjAsOCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfaWNrID0gewogCS5uYW1lCQk9ICJtbWNoc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKQEAgLTI1MzIsOCArMjUzMCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMxX1NISUZULApAQCAtMjU0Miw5ICsyNTQwLDkgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKIAkubmFtZQkJPSAibW1jaHNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIUzJfU0hJRlQsCkBAIC0yNTUzLDkgKzI1NTEsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfZmNrID0gewogCS5uYW1lCQk9ICJtbWNoc19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLApAQCAtMjU2Myw4ICsyNTYxLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0gewogCS5uYW1lCQk9ICJncGlvNV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULApAQCAtMjU3Myw4ICsyNTcxLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfZmNrID0gewogCS5uYW1lCQk9ICJncGlvNV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULApAQCAtMjU4Myw4ICsyNTgxLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWRtX2ludGNfaWNrID0gewogCS5uYW1lCQk9ICJtZG1faW50Y19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01ETV9JTlRDX1NISUZULApAQCAtMjU5Myw4ICsyNTkxLDggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjFfZmNrID0gewogCS5uYW1lCQk9ICJtbWNoc2RiX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFNEQjFfU0hJRlQsCkBAIC0yNjAzLDkgKzI2MDEsOSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoc2RiMl9mY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzZGJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMl9TSElGVCwKQEAgLTI2MjgsMTY2ICsyNjI2LDEzIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfcHJjbV9zZXQgPSB7CiAJLm5hbWUJCT0gInZpcnRfcHJjbV9zZXQiLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYIHwKLQkJCQlWSVJUVUFMX0NMT0NLIHwgQUxXQVlTX0VOQUJMRUQgfCBERUxBWUVEX0FQUCwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCiAJLnBhcmVudAkJPSAmbXB1X2NrLAkvKiBJbmRleGVkIGJ5IG1wdSBzcGVlZCwgbm8gcGFyZW50ICovCiAJLnJlY2FsYwkJPSAmb21hcDJfdGFibGVfbXB1X3JlY2FsYywJLyogc2V0cyBhcmUga2V5ZWQgb24gbXB1IHJhdGUgKi8KIAkuc2V0X3JhdGUJPSAmb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrICpvbmNoaXBfMjR4eF9jbGtzW10gX19pbml0ZGF0YSA9IHsKLQkvKiBleHRlcm5hbCByb290IHNvdXJjZXMgKi8KLQkmZnVuY18zMmtfY2ssCi0JJm9zY19jaywKLQkmc3lzX2NrLAotCSZhbHRfY2ssCi0JLyogaW50ZXJuYWwgYW5hbG9nIHNvdXJjZXMgKi8KLQkmZHBsbF9jaywKLQkmYXBsbDk2X2NrLAotCSZhcGxsNTRfY2ssCi0JLyogaW50ZXJuYWwgcHJjbSByb290IHNvdXJjZXMgKi8KLQkmZnVuY181NG1fY2ssCi0JJmNvcmVfY2ssCi0JJmZ1bmNfOTZtX2NrLAotCSZmdW5jXzQ4bV9jaywKLQkmZnVuY18xMm1fY2ssCi0JJndkdDFfb3NjX2NrLAotCSZzeXNfY2xrb3V0X3NyYywKLQkmc3lzX2Nsa291dCwKLQkmc3lzX2Nsa291dDJfc3JjLAotCSZzeXNfY2xrb3V0MiwKLQkmZW11bF9jaywKLQkvKiBtcHUgZG9tYWluIGNsb2NrcyAqLwotCSZtcHVfY2ssCi0JLyogZHNwIGRvbWFpbiBjbG9ja3MgKi8KLQkmZHNwX2ZjaywKLQkmZHNwX2lyYXRlX2ljaywKLQkmZHNwX2ljaywJCS8qIDI0MnggKi8KLQkmaXZhMl8xX2ljaywJCS8qIDI0M3ggKi8KLQkmaXZhMV9pZmNrLAkJLyogMjQyeCAqLwotCSZpdmExX21wdV9pbnRfaWZjaywJLyogMjQyeCAqLwotCS8qIEdGWCBkb21haW4gY2xvY2tzICovCi0JJmdmeF8zZF9mY2ssCi0JJmdmeF8yZF9mY2ssCi0JJmdmeF9pY2ssCi0JLyogTW9kZW0gZG9tYWluIGNsb2NrcyAqLwotCSZtZG1faWNrLAotCSZtZG1fb3NjX2NrLAotCS8qIERTUyBkb21haW4gY2xvY2tzICovCi0JJmRzc19pY2ssCi0JJmRzczFfZmNrLAotCSZkc3MyX2ZjaywKLQkmZHNzXzU0bV9mY2ssCi0JLyogTDMgZG9tYWluIGNsb2NrcyAqLwotCSZjb3JlX2wzX2NrLAotCSZzc2lfc3NyX3NzdF9mY2ssCi0JJnVzYl9sNF9pY2ssCi0JLyogTDQgZG9tYWluIGNsb2NrcyAqLwotCSZsNF9jaywJCQkvKiB1c2VkIGFzIGJvdGggY29yZV9sNCBhbmQgd3VfbDQgKi8KLQkvKiB2aXJ0dWFsIG1ldGEtZ3JvdXAgY2xvY2sgKi8KLQkmdmlydF9wcmNtX3NldCwKLQkvKiBnZW5lcmFsIGw0IGludGVyZmFjZSBjaywgbXVsdGktcGFyZW50IGZ1bmN0aW9uYWwgY2xrICovCi0JJmdwdDFfaWNrLAotCSZncHQxX2ZjaywKLQkmZ3B0Ml9pY2ssCi0JJmdwdDJfZmNrLAotCSZncHQzX2ljaywKLQkmZ3B0M19mY2ssCi0JJmdwdDRfaWNrLAotCSZncHQ0X2ZjaywKLQkmZ3B0NV9pY2ssCi0JJmdwdDVfZmNrLAotCSZncHQ2X2ljaywKLQkmZ3B0Nl9mY2ssCi0JJmdwdDdfaWNrLAotCSZncHQ3X2ZjaywKLQkmZ3B0OF9pY2ssCi0JJmdwdDhfZmNrLAotCSZncHQ5X2ljaywKLQkmZ3B0OV9mY2ssCi0JJmdwdDEwX2ljaywKLQkmZ3B0MTBfZmNrLAotCSZncHQxMV9pY2ssCi0JJmdwdDExX2ZjaywKLQkmZ3B0MTJfaWNrLAotCSZncHQxMl9mY2ssCi0JJm1jYnNwMV9pY2ssCi0JJm1jYnNwMV9mY2ssCi0JJm1jYnNwMl9pY2ssCi0JJm1jYnNwMl9mY2ssCi0JJm1jYnNwM19pY2ssCi0JJm1jYnNwM19mY2ssCi0JJm1jYnNwNF9pY2ssCi0JJm1jYnNwNF9mY2ssCi0JJm1jYnNwNV9pY2ssCi0JJm1jYnNwNV9mY2ssCi0JJm1jc3BpMV9pY2ssCi0JJm1jc3BpMV9mY2ssCi0JJm1jc3BpMl9pY2ssCi0JJm1jc3BpMl9mY2ssCi0JJm1jc3BpM19pY2ssCi0JJm1jc3BpM19mY2ssCi0JJnVhcnQxX2ljaywKLQkmdWFydDFfZmNrLAotCSZ1YXJ0Ml9pY2ssCi0JJnVhcnQyX2ZjaywKLQkmdWFydDNfaWNrLAotCSZ1YXJ0M19mY2ssCi0JJmdwaW9zX2ljaywKLQkmZ3Bpb3NfZmNrLAotCSZtcHVfd2R0X2ljaywKLQkmbXB1X3dkdF9mY2ssCi0JJnN5bmNfMzJrX2ljaywKLQkmd2R0MV9pY2ssCi0JJm9tYXBjdHJsX2ljaywKLQkmaWNyX2ljaywKLQkmY2FtX2ZjaywKLQkmY2FtX2ljaywKLQkmbWFpbGJveGVzX2ljaywKLQkmd2R0NF9pY2ssCi0JJndkdDRfZmNrLAotCSZ3ZHQzX2ljaywKLQkmd2R0M19mY2ssCi0JJm1zcHJvX2ljaywKLQkmbXNwcm9fZmNrLAotCSZtbWNfaWNrLAotCSZtbWNfZmNrLAotCSZmYWNfaWNrLAotCSZmYWNfZmNrLAotCSZlYWNfaWNrLAotCSZlYWNfZmNrLAotCSZoZHFfaWNrLAotCSZoZHFfZmNrLAotCSZpMmMxX2ljaywKLQkmaTJjMV9mY2ssCi0JJmkyY2hzMV9mY2ssCi0JJmkyYzJfaWNrLAotCSZpMmMyX2ZjaywKLQkmaTJjaHMyX2ZjaywKLQkmZ3BtY19mY2ssCi0JJnNkbWFfZmNrLAotCSZzZG1hX2ljaywKLQkmdmx5bnFfaWNrLAotCSZ2bHlucV9mY2ssCi0JJnNkcmNfaWNrLAotCSZkZXNfaWNrLAotCSZzaGFfaWNrLAotCSZybmdfaWNrLAotCSZhZXNfaWNrLAotCSZwa2FfaWNrLAotCSZ1c2JfZmNrLAotCSZ1c2Joc19pY2ssCi0JJm1tY2hzMV9pY2ssCi0JJm1tY2hzMV9mY2ssCi0JJm1tY2hzMl9pY2ssCi0JJm1tY2hzMl9mY2ssCi0JJmdwaW81X2ljaywKLQkmZ3BpbzVfZmNrLAotCSZtZG1faW50Y19pY2ssCi0JJm1tY2hzZGIxX2ZjaywKLQkmbW1jaHNkYjJfZmNrLAotfTsKLQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCmluZGV4IDMxYmI3MDEuLjBhMTRkY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYwpAQCAtMzAsMTUgKzMwLDI1MSBAQAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KICNpbmNsdWRlIDxtYWNoL3NyYW0uaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAKLSNpbmNsdWRlICJtZW1vcnkuaCIKKyNpbmNsdWRlIDxtYWNoL3NkcmMuaD4KICNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgImNsb2NrMzR4eC5oIgogI2luY2x1ZGUgInBybS5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKICNpbmNsdWRlICJjbS5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfbm9uY29yZV9kcGxsX29wczsKKworI2luY2x1ZGUgImNsb2NrMzR4eC5oIgorCitzdHJ1Y3Qgb21hcF9jbGsgeworCXUzMgkJY3B1OworCXN0cnVjdCBjbGtfbG9va3VwIGxrOworfTsKKworI2RlZmluZSBDTEsoZGV2LCBjb24sIGNrLCBjcCkgCQlcCisJewkJCQlcCisJCSAuY3B1ID0gY3AsCQlcCisJCS5sayA9IHsJCQlcCisJCQkuZGV2X2lkID0gZGV2LAlcCisJCQkuY29uX2lkID0gY29uLAlcCisJCQkuY2xrID0gY2ssCVwKKwkJfSwJCQlcCisJfQorCisjZGVmaW5lIENLXzM0M1gJCSgxIDw8IDApCisjZGVmaW5lIENLXzM0MzBFUzEJKDEgPDwgMSkKKyNkZWZpbmUgQ0tfMzQzMEVTMgkoMSA8PCAyKQorCitzdGF0aWMgc3RydWN0IG9tYXBfY2xrIG9tYXAzNHh4X2Nsa3NbXSA9IHsKKwlDTEsoTlVMTCwJIm9tYXBfMzJrX2ZjayIsCSZvbWFwXzMya19mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidmlydF8xMm1fY2siLAkmdmlydF8xMm1fY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidmlydF8xM21fY2siLAkmdmlydF8xM21fY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidmlydF8xNl84bV9jayIsICZ2aXJ0XzE2XzhtX2NrLCBDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJInZpcnRfMTlfMm1fY2siLCAmdmlydF8xOV8ybV9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzI2bV9jayIsCSZ2aXJ0XzI2bV9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzM4XzRtX2NrIiwgJnZpcnRfMzhfNG1fY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkib3NjX3N5c19jayIsCSZvc2Nfc3lzX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInN5c19jayIsCSZzeXNfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3lzX2FsdGNsayIsCSZzeXNfYWx0Y2xrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm1jYnNwX2Nsa3MiLAkmbWNic3BfY2xrcywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0MSIsCSZzeXNfY2xrb3V0MSwJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMV9jayIsCSZkcGxsMV9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMV94Ml9jayIsCSZkcGxsMV94Ml9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMV94Mm0yX2NrIiwgJmRwbGwxX3gybTJfY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDJfY2siLAkmZHBsbDJfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDJfbTJfY2siLAkmZHBsbDJfbTJfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDNfY2siLAkmZHBsbDNfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY29yZV9jayIsCSZjb3JlX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwzX3gyX2NrIiwJJmRwbGwzX3gyX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwzX20yX2NrIiwJJmRwbGwzX20yX2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGwzX20yeDJfY2siLCAmZHBsbDNfbTJ4Ml9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsM19tM19jayIsCSZkcGxsM19tM19jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsM19tM3gyX2NrIiwgJmRwbGwzX20zeDJfY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZW11X2NvcmVfYWx3b25fY2siLCAmZW11X2NvcmVfYWx3b25fY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfY2siLAkmZHBsbDRfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfeDJfY2siLAkmZHBsbDRfeDJfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkib21hcF85Nm1fYWx3b25fZmNrIiwgJm9tYXBfOTZtX2Fsd29uX2ZjaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvbWFwXzk2bV9mY2siLAkmb21hcF85Nm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImNtXzk2bV9mY2siLAkmY21fOTZtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJvbWFwXzU0bV9mY2siLAkmb21hcF81NG1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm9tYXBfNDhtX2ZjayIsCSZvbWFwXzQ4bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkib21hcF8xMm1fZmNrIiwJJm9tYXBfMTJtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tMl9jayIsCSZkcGxsNF9tMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tMngyX2NrIiwgJmRwbGw0X20yeDJfY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTNfY2siLAkmZHBsbDRfbTNfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTN4Ml9jayIsICZkcGxsNF9tM3gyX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X200X2NrIiwJJmRwbGw0X200X2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRwbGw0X200eDJfY2siLCAmZHBsbDRfbTR4Ml9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNV9jayIsCSZkcGxsNF9tNV9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNXgyX2NrIiwgJmRwbGw0X201eDJfY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTZfY2siLAkmZHBsbDRfbTZfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTZ4Ml9jayIsICZkcGxsNF9tNngyX2NrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImVtdV9wZXJfYWx3b25fY2siLCAmZW11X3Blcl9hbHdvbl9jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsNV9jayIsCSZkcGxsNV9jaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJkcGxsNV9tMl9jayIsCSZkcGxsNV9tMl9jaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJjbGtvdXQyX3NyY19jayIsICZjbGtvdXQyX3NyY19jaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0MiIsCSZzeXNfY2xrb3V0MiwJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjb3JleDJfZmNrIiwJJmNvcmV4Ml9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDFfZmNrIiwJJmRwbGwxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJtcHVfY2siLAkmbXB1X2NrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImFybV9mY2siLAkmYXJtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJlbXVfbXB1X2Fsd29uX2NrIiwgJmVtdV9tcHVfYWx3b25fY2ssIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiZHBsbDJfZmNrIiwJJmRwbGwyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJpdmEyX2NrIiwJJml2YTJfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibDNfaWNrIiwJJmwzX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJsNF9pY2siLAkmbDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInJtX2ljayIsCSZybV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ2Z4X2wzX2NrIiwJJmdmeF9sM19jaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJnZnhfbDNfZmNrIiwJJmdmeF9sM19mY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkiZ2Z4X2wzX2ljayIsCSZnZnhfbDNfaWNrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJImdmeF9jZzFfY2siLAkmZ2Z4X2NnMV9jaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJnZnhfY2cyX2NrIiwJJmdmeF9jZzJfY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkic2d4X2ZjayIsCSZzZ3hfZmNrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJInNneF9pY2siLAkmc2d4X2ljaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJkMmRfMjZtX2ZjayIsCSZkMmRfMjZtX2ZjaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJncHQxMF9mY2siLAkmZ3B0MTBfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ZjayIsCSZncHQxMV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY3BlZnVzZV9mY2siLAkmY3BlZnVzZV9mY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkidHNfZmNrIiwJJnRzX2ZjaywJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJ1c2J0bGxfZmNrIiwJJnVzYnRsbF9mY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkiY29yZV85Nm1fZmNrIiwJJmNvcmVfOTZtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMiIsCSJmY2siLAkmbW1jaHMzX2ZjaywJQ0tfMzQzMEVTMiksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMSIsCSJmY2siLAkmbW1jaHMyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJtc3Byb19mY2siLAkmbXNwcm9fZmNrLAlDS18zNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4wIiwJImZjayIsCSZtbWNoczFfZmNrLAlDS18zNDNYKSwKKwlDTEsoImkyY19vbWFwLjMiLCAiZmNrIiwJJmkyYzNfZmNrLAlDS18zNDNYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyYzJfZmNrLAlDS18zNDNYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyYzFfZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNSIsICJmY2siLAkmbWNic3A1X2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLCAiZmNrIiwJJm1jYnNwMV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY29yZV80OG1fZmNrIiwJJmNvcmVfNDhtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS40IiwgImZjayIsCSZtY3NwaTRfZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjMiLCAiZmNrIiwJJm1jc3BpM19mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMiIsICJmY2siLAkmbWNzcGkyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4xIiwgImZjayIsCSZtY3NwaTFfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInVhcnQyX2ZjayIsCSZ1YXJ0Ml9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidWFydDFfZmNrIiwJJnVhcnQxX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJmc2hvc3R1c2JfZmNrIiwgJmZzaG9zdHVzYl9mY2ssIENLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkiY29yZV8xMm1fZmNrIiwJJmNvcmVfMTJtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwX2hkcS4wIiwgImZjayIsCSZoZHFfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNzaV9zc3JfZmNrIiwJJnNzaV9zc3JfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNzaV9zc3RfZmNrIiwJJnNzaV9zc3RfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImNvcmVfbDNfaWNrIiwJJmNvcmVfbDNfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImhzb3RndXNiX2ljayIsCSZoc290Z3VzYl9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic2RyY19pY2siLAkmc2RyY19pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic2VjdXJpdHlfbDNfaWNrIiwgJnNlY3VyaXR5X2wzX2ljaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwa2FfaWNrIiwJJnBrYV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY29yZV9sNF9pY2siLAkmY29yZV9sNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidXNidGxsX2ljayIsCSZ1c2J0bGxfaWNrLAlDS18zNDMwRVMyKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImljayIsCSZtbWNoczNfaWNrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJImljcl9pY2siLAkmaWNyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJhZXMyX2ljayIsCSZhZXMyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzaGExMl9pY2siLAkmc2hhMTJfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRlczJfaWNrIiwJJmRlczJfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImljayIsCSZtbWNoczJfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4wIiwJImljayIsCSZtbWNoczFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ljayIsCSZtc3Byb19pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS40IiwgImljayIsCSZtY3NwaTRfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjMiLCAiaWNrIiwJJm1jc3BpM19pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4xIiwgImljayIsCSZtY3NwaTFfaWNrLAlDS18zNDNYKSwKKwlDTEsoImkyY19vbWFwLjMiLCAiaWNrIiwJJmkyYzNfaWNrLAlDS18zNDNYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18zNDNYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmkyYzFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidWFydDFfaWNrIiwJJnVhcnQxX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQxMV9pY2siLAkmZ3B0MTFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ljayIsCSZncHQxMF9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC41IiwgImljayIsCSZtY2JzcDVfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmbWNic3AxX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJmYWNfaWNrIiwJJmZhY19pY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkibWFpbGJveGVzX2ljayIsICZtYWlsYm94ZXNfaWNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm9tYXBjdHJsX2ljayIsCSZvbWFwY3RybF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3NpX2w0X2ljayIsCSZzc2lfbDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNzaV9pY2siLAkmc3NpX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1c2JfbDRfaWNrIiwJJnVzYl9sNF9pY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkic2VjdXJpdHlfbDRfaWNrMiIsICZzZWN1cml0eV9sNF9pY2syLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImFlczFfaWNrIiwJJmFlczFfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXBfcm5nIiwJImljayIsCQkmcm5nX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzaGExMV9pY2siLAkmc2hhMTFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRlczFfaWNrIiwJJmRlczFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRzczFfYWx3b25fZmNrIiwgJmRzczFfYWx3b25fZmNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRzc190dl9mY2siLAkmZHNzX3R2X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkc3NfOTZtX2ZjayIsCSZkc3NfOTZtX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkc3MyX2Fsd29uX2ZjayIsICZkc3MyX2Fsd29uX2ZjaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkc3NfaWNrIiwJJmRzc19pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY2FtX21jbGsiLAkmY2FtX21jbGssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY2FtX2ljayIsCSZjYW1faWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImNzaTJfOTZtX2ZjayIsCSZjc2kyXzk2bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidXNiaG9zdF8xMjBtX2ZjayIsICZ1c2Job3N0XzEyMG1fZmNrLCBDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJInVzYmhvc3RfNDhtX2ZjayIsICZ1c2Job3N0XzQ4bV9mY2ssIENLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkidXNiaG9zdF9pY2siLAkmdXNiaG9zdF9pY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkidXNpbV9mY2siLAkmdXNpbV9mY2ssCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkiZ3B0MV9mY2siLAkmZ3B0MV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkid2t1cF8zMmtfZmNrIiwJJndrdXBfMzJrX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvMV9kYmNrIiwJJmdwaW8xX2RiY2ssCUNLXzM0M1gpLAorCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCSZ3ZHQyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ3a3VwX2w0X2ljayIsCSZ3a3VwX2w0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJ1c2ltX2ljayIsCSZ1c2ltX2ljaywJQ0tfMzQzMEVTMiksCisJQ0xLKCJvbWFwX3dkdCIsCSJpY2siLAkJJndkdDJfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIndkdDFfaWNrIiwJJndkdDFfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW8xX2ljayIsCSZncGlvMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkib21hcF8zMmtzeW5jX2ljayIsICZvbWFwXzMya3N5bmNfaWNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDEyX2ljayIsCSZncHQxMl9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MV9pY2siLAkmZ3B0MV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkicGVyXzk2bV9mY2siLAkmcGVyXzk2bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkicGVyXzQ4bV9mY2siLAkmcGVyXzQ4bV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidWFydDNfZmNrIiwJJnVhcnQzX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQyX2ZjayIsCSZncHQyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQzX2ZjayIsCSZncHQzX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ0X2ZjayIsCSZncHQ0X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ1X2ZjayIsCSZncHQ1X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ2X2ZjayIsCSZncHQ2X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ3X2ZjayIsCSZncHQ3X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ4X2ZjayIsCSZncHQ4X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ5X2ZjayIsCSZncHQ5X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwZXJfMzJrX2Fsd29uX2ZjayIsICZwZXJfMzJrX2Fsd29uX2ZjaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvNl9kYmNrIiwJJmdwaW82X2RiY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzVfZGJjayIsCSZncGlvNV9kYmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW80X2RiY2siLAkmZ3BpbzRfZGJjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvM19kYmNrIiwJJmdwaW8zX2RiY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzJfZGJjayIsCSZncGlvMl9kYmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJIndkdDNfZmNrIiwJJndkdDNfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInBlcl9sNF9pY2siLAkmcGVyX2w0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvNl9pY2siLAkmZ3BpbzZfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW81X2ljayIsCSZncGlvNV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzRfaWNrIiwJJmdwaW80X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncGlvM19pY2siLAkmZ3BpbzNfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwaW8yX2ljayIsCSZncGlvMl9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkid2R0M19pY2siLAkmd2R0M19pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidWFydDNfaWNrIiwJJnVhcnQzX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ5X2ljayIsCSZncHQ5X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ4X2ljayIsCSZncHQ4X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ3X2ljayIsCSZncHQ3X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ2X2ljayIsCSZncHQ2X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ1X2ljayIsCSZncHQ1X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQ0X2ljayIsCSZncHQ0X2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQzX2ljayIsCSZncHQzX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJncHQyX2ljayIsCSZncHQyX2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJm1jYnNwMl9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC4zIiwgImljayIsCSZtY2JzcDNfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNCIsICJpY2siLAkmbWNic3A0X2ljaywJQ0tfMzQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiZmNrIiwJJm1jYnNwMl9mY2ssCUNLXzM0M1gpLAorCUNMSygib21hcC1tY2JzcC4zIiwgImZjayIsCSZtY2JzcDNfZmNrLAlDS18zNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNCIsICJmY2siLAkmbWNic3A0X2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJlbXVfc3JjX2NrIiwJJmVtdV9zcmNfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkicGNsa19mY2siLAkmcGNsa19mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkicGNsa3gyX2ZjayIsCSZwY2xreDJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImF0Y2xrX2ZjayIsCSZhdGNsa19mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidHJhY2VjbGtfc3JjX2ZjayIsICZ0cmFjZWNsa19zcmNfZmNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJInRyYWNlY2xrX2ZjayIsCSZ0cmFjZWNsa19mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3IxX2ZjayIsCSZzcjFfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNyMl9mY2siLAkmc3IyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzcl9sNF9pY2siLAkmc3JfbDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNlY3VyZV8zMmtfZmNrIiwgJnNlY3VyZV8zMmtfZmNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDEyX2ZjayIsCSZncHQxMl9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkid2R0MV9mY2siLAkmd2R0MV9mY2ssCUNLXzM0M1gpLAorfTsKKwogLyogQ01fQVVUT0lETEVfUExMKi5BVVRPXyogYml0IHZhbHVlcyAqLwogI2RlZmluZSBEUExMX0FVVE9JRExFX0RJU0FCTEUJCQkweDAKICNkZWZpbmUgRFBMTF9BVVRPSURMRV9MT1dfUE9XRVJfU1RPUAkJMHgxCkBAIC01MSwxMSArMjg3LDkgQEAKICAqCiAgKiBSZWNhbGN1bGF0ZSBhbmQgcHJvcGFnYXRlIHRoZSBEUExMIHJhdGUuCiAgKi8KLXN0YXRpYyB2b2lkIG9tYXAzX2RwbGxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAzX2RwbGxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKLQljbGstPnJhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7Ci0KLQlwcm9wYWdhdGVfcmF0ZShjbGspOworCXJldHVybiBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7CiB9CiAKIC8qIF9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuIC0gd3JpdGUgY2xrZW5fYml0cyBhcmcgdG8gYSBEUExMJ3MgZW5hYmxlIGJpdHMgKi8KQEAgLTc4LDE0ICszMTIsMTIgQEAKIAljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKIAlpbnQgaSA9IDA7CiAJaW50IHJldCA9IC1FSU5WQUw7Ci0JdTMyIGlkbGVzdF9tYXNrOwogCiAJZGQgPSBjbGstPmRwbGxfZGF0YTsKIAotCXN0YXRlIDw8PSBkZC0+aWRsZXN0X2JpdDsKLQlpZGxlc3RfbWFzayA9IDEgPDwgZGQtPmlkbGVzdF9iaXQ7CisJc3RhdGUgPDw9IF9fZmZzKGRkLT5pZGxlc3RfbWFzayk7CiAKLQl3aGlsZSAoKChfX3Jhd19yZWFkbChkZC0+aWRsZXN0X3JlZykgJiBpZGxlc3RfbWFzaykgIT0gc3RhdGUpICYmCisJd2hpbGUgKCgoX19yYXdfcmVhZGwoZGQtPmlkbGVzdF9yZWcpICYgZGQtPmlkbGVzdF9tYXNrKSAhPSBzdGF0ZSkgJiYKIAkgICAgICAgaSA8IE1BWF9EUExMX1dBSVRfVFJJRVMpIHsKIAkJaSsrOwogCQl1ZGVsYXkoMSk7CkBAIC0xMDQsNiArMzM2LDQyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyogRnJvbSAzNDMwIFRSTSBFUzIgNC43LjYuMiAqLworc3RhdGljIHUxNiBfb21hcDNfZHBsbF9jb21wdXRlX2ZyZXFzZWwoc3RydWN0IGNsayAqY2xrLCB1OCBuKQoreworCXVuc2lnbmVkIGxvbmcgZmludDsKKwl1MTYgZiA9IDA7CisKKwlmaW50ID0gY2xrLT5kcGxsX2RhdGEtPmNsa19yZWYtPnJhdGUgLyAobiArIDEpOworCisJcHJfZGVidWcoImNsb2NrOiBmaW50IGlzICVsdVxuIiwgZmludCk7CisKKwlpZiAoZmludCA+PSA3NTAwMDAgJiYgZmludCA8PSAxMDAwMDAwKQorCQlmID0gMHgzOworCWVsc2UgaWYgKGZpbnQgPiAxMDAwMDAwICYmIGZpbnQgPD0gMTI1MDAwMCkKKwkJZiA9IDB4NDsKKwllbHNlIGlmIChmaW50ID4gMTI1MDAwMCAmJiBmaW50IDw9IDE1MDAwMDApCisJCWYgPSAweDU7CisJZWxzZSBpZiAoZmludCA+IDE1MDAwMDAgJiYgZmludCA8PSAxNzUwMDAwKQorCQlmID0gMHg2OworCWVsc2UgaWYgKGZpbnQgPiAxNzUwMDAwICYmIGZpbnQgPD0gMjEwMDAwMCkKKwkJZiA9IDB4NzsKKwllbHNlIGlmIChmaW50ID4gNzUwMDAwMCAmJiBmaW50IDw9IDEwMDAwMDAwKQorCQlmID0gMHhCOworCWVsc2UgaWYgKGZpbnQgPiAxMDAwMDAwMCAmJiBmaW50IDw9IDEyNTAwMDAwKQorCQlmID0gMHhDOworCWVsc2UgaWYgKGZpbnQgPiAxMjUwMDAwMCAmJiBmaW50IDw9IDE1MDAwMDAwKQorCQlmID0gMHhEOworCWVsc2UgaWYgKGZpbnQgPiAxNTAwMDAwMCAmJiBmaW50IDw9IDE3NTAwMDAwKQorCQlmID0gMHhFOworCWVsc2UgaWYgKGZpbnQgPiAxNzUwMDAwMCAmJiBmaW50IDw9IDIxMDAwMDAwKQorCQlmID0gMHhGOworCWVsc2UKKwkJcHJfZGVidWcoImNsb2NrOiB1bmtub3duIGZyZXFzZWwgc2V0dGluZyBmb3IgJWRcbiIsIG4pOworCisJcmV0dXJuIGY7Cit9CisKIC8qIE5vbi1DT1JFIERQTEwgKGUuZy4sIERQTExzIHRoYXQgZG8gbm90IGNvbnRyb2wgU0RSQykgY2xvY2sgZnVuY3Rpb25zICovCiAKIC8qCkBAIC0xMjgsMjUgKzM5NiwyMCBAQAogCiAJYWkgPSBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQoY2xrKTsKIAorCW9tYXAzX2RwbGxfZGVueV9pZGxlKGNsayk7CisKIAlfb21hcDNfZHBsbF93cml0ZV9jbGtlbihjbGssIERQTExfTE9DS0VEKTsKIAotCWlmIChhaSkgewotCQkvKgotCQkgKiBJZiBubyBkb3duc3RyZWFtIGNsb2NrcyBhcmUgZW5hYmxlZCwgQ01fSURMRVNUIGJpdAotCQkgKiBtYXkgbmV2ZXIgYmVjb21lIGFjdGl2ZSwgc28gZG9uJ3Qgd2FpdCBmb3IgRFBMTCB0byBsb2NrLgotCQkgKi8KLQkJciA9IDA7CisJciA9IF9vbWFwM193YWl0X2RwbGxfc3RhdHVzKGNsaywgMSk7CisKKwlpZiAoYWkpCiAJCW9tYXAzX2RwbGxfYWxsb3dfaWRsZShjbGspOwotCX0gZWxzZSB7Ci0JCXIgPSBfb21hcDNfd2FpdF9kcGxsX3N0YXR1cyhjbGssIDEpOwotCQlvbWFwM19kcGxsX2RlbnlfaWRsZShjbGspOwotCX07CiAKIAlyZXR1cm4gcjsKIH0KIAogLyoKLSAqIG9tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MgLSBpbnN0cnVjdCBhIERQTEwgdG8gYnlwYXNzIGFuZCB3YWl0IGZvciByZWFkaW5lc3MKKyAqIF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzIC0gaW5zdHJ1Y3QgYSBEUExMIHRvIGJ5cGFzcyBhbmQgd2FpdCBmb3IgcmVhZGluZXNzCiAgKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCiAgKgogICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBlbnRlciBsb3ctcG93ZXIgYnlwYXNzIG1vZGUuICBJbgpAQCAtMjM2LDE0ICs0OTksMjUgQEAKIHN0YXRpYyBpbnQgb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJaW50IHI7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CiAKIAlpZiAoY2xrID09ICZkcGxsM19jaykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoY2xrLT5wYXJlbnQtPnJhdGUgPT0gY2xrX2dldF9yYXRlKGNsaykpCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKwlpZiAoIWRkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjbGstPnJhdGUgPT0gZGQtPmNsa19ieXBhc3MtPnJhdGUpIHsKKwkJV0FSTl9PTihjbGstPnBhcmVudCAhPSBkZC0+Y2xrX2J5cGFzcyk7CiAJCXIgPSBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhjbGspOwotCWVsc2UKKwl9IGVsc2UgeworCQlXQVJOX09OKGNsay0+cGFyZW50ICE9IGRkLT5jbGtfcmVmKTsKIAkJciA9IF9vbWFwM19ub25jb3JlX2RwbGxfbG9jayhjbGspOworCX0KKwkvKiBGSVhNRTogdGhpcyBpcyBkdWJpb3VzIC0gaWYgY2xrLT5yYXRlIGhhcyBjaGFuZ2VkLCB3aGF0IGFib3V0IHByb3BhZ2F0aW5nPyAqLworCWlmICghcikKKwkJY2xrLT5yYXRlID0gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspOwogCiAJcmV0dXJuIHI7CiB9CkBAIC0yNzAsNiArNTQ0LDIxNSBAQAogCV9vbWFwM19ub25jb3JlX2RwbGxfc3RvcChjbGspOwogfQogCisKKy8qIE5vbi1DT1JFIERQTEwgcmF0ZSBzZXQgY29kZSAqLworCisvKgorICogb21hcDNfbm9uY29yZV9kcGxsX3Byb2dyYW0gLSBzZXQgbm9uLWNvcmUgRFBMTCBNLE4gdmFsdWVzIGRpcmVjdGx5CisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKKyAqIEBtOiBEUExMIG11bHRpcGxpZXIgdG8gc2V0CisgKiBAbjogRFBMTCBkaXZpZGVyIHRvIHNldAorICogQGZyZXFzZWw6IEZSRVFTRUwgdmFsdWUgdG8gc2V0CisgKgorICogUHJvZ3JhbSB0aGUgRFBMTCB3aXRoIHRoZSBzdXBwbGllZCBNLCBOIHZhbHVlcywgYW5kIHdhaXQgZm9yIHRoZSBEUExMIHRvCisgKiBsb2NrLi4gIFJldHVybnMgLUVJTlZBTCB1cG9uIGVycm9yLCBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBvbWFwM19ub25jb3JlX2RwbGxfcHJvZ3JhbShzdHJ1Y3QgY2xrICpjbGssIHUxNiBtLCB1OCBuLCB1MTYgZnJlcXNlbCkKK3sKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZCA9IGNsay0+ZHBsbF9kYXRhOworCXUzMiB2OworCisJLyogMzQzMCBFUzIgVFJNOiA0LjcuNi45IERQTEwgUHJvZ3JhbW1pbmcgU2VxdWVuY2UgKi8KKwlfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhjbGspOworCisJLyogU2V0IGppdHRlciBjb3JyZWN0aW9uICovCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7CisJdiAmPSB+ZGQtPmZyZXFzZWxfbWFzazsKKwl2IHw9IGZyZXFzZWwgPDwgX19mZnMoZGQtPmZyZXFzZWxfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGRkLT5jb250cm9sX3JlZyk7CisKKwkvKiBTZXQgRFBMTCBtdWx0aXBsaWVyLCBkaXZpZGVyICovCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5tdWx0X2RpdjFfcmVnKTsKKwl2ICY9IH4oZGQtPm11bHRfbWFzayB8IGRkLT5kaXYxX21hc2spOworCXYgfD0gbSA8PCBfX2ZmcyhkZC0+bXVsdF9tYXNrKTsKKwl2IHw9IChuIC0gMSkgPDwgX19mZnMoZGQtPmRpdjFfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGRkLT5tdWx0X2RpdjFfcmVnKTsKKworCS8qIFdlIGxldCB0aGUgY2xvY2sgZnJhbWV3b3JrIHNldCB0aGUgb3RoZXIgb3V0cHV0IGRpdmlkZXJzIGxhdGVyICovCisKKwkvKiBSRVZJU0lUOiBTZXQgcmFtcC11cCBkZWxheT8gKi8KKworCV9vbWFwM19ub25jb3JlX2RwbGxfbG9jayhjbGspOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlIC0gc2V0IG5vbi1jb3JlIERQTEwgcmF0ZQorICogQGNsazogc3RydWN0IGNsayAqIG9mIERQTEwgdG8gc2V0CisgKiBAcmF0ZTogcm91bmRlZCB0YXJnZXQgcmF0ZQorICoKKyAqIFNldCB0aGUgRFBMTCBDTEtPVVQgdG8gdGhlIHRhcmdldCByYXRlLiAgSWYgdGhlIERQTEwgY2FuIGVudGVyCisgKiBsb3ctcG93ZXIgYnlwYXNzLCBhbmQgdGhlIHRhcmdldCByYXRlIGlzIHRoZSBieXBhc3Mgc291cmNlIGNsb2NrCisgKiByYXRlLCB0aGVuIGNvbmZpZ3VyZSB0aGUgRFBMTCBmb3IgYnlwYXNzLiAgT3RoZXJ3aXNlLCByb3VuZCB0aGUKKyAqIHRhcmdldCByYXRlIGlmIGl0IGhhc24ndCBiZWVuIGRvbmUgYWxyZWFkeSwgdGhlbiBwcm9ncmFtIGFuZCBsb2NrCisgKiB0aGUgRFBMTC4gIFJldHVybnMgLUVJTlZBTCB1cG9uIGVycm9yLCBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJc3RydWN0IGNsayAqbmV3X3BhcmVudCA9IE5VTEw7CisJdTE2IGZyZXFzZWw7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJaW50IHJldDsKKworCWlmICghY2xrIHx8ICFyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisJaWYgKCFkZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmF0ZSA9PSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsaykpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBFbnN1cmUgYm90aCB0aGUgYnlwYXNzIGFuZCByZWYgY2xvY2tzIGFyZSBlbmFibGVkIHByaW9yIHRvCisJICogZG9pbmcgYW55dGhpbmc7IHdlIG5lZWQgdGhlIGJ5cGFzcyBjbG9jayBydW5uaW5nIHRvIHJlcHJvZ3JhbQorCSAqIHRoZSBEUExMLgorCSAqLworCW9tYXAyX2Nsa19lbmFibGUoZGQtPmNsa19ieXBhc3MpOworCW9tYXAyX2Nsa19lbmFibGUoZGQtPmNsa19yZWYpOworCisJaWYgKGRkLT5jbGtfYnlwYXNzLT5yYXRlID09IHJhdGUgJiYKKwkgICAgKGNsay0+ZHBsbF9kYXRhLT5tb2RlcyAmICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykpKSB7CisJCXByX2RlYnVnKCJjbG9jazogJXM6IHNldCByYXRlOiBlbnRlcmluZyBieXBhc3MuXG4iLCBjbGstPm5hbWUpOworCisJCXJldCA9IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7CisJCWlmICghcmV0KQorCQkJbmV3X3BhcmVudCA9IGRkLT5jbGtfYnlwYXNzOworCX0gZWxzZSB7CisJCWlmIChkZC0+bGFzdF9yb3VuZGVkX3JhdGUgIT0gcmF0ZSkKKwkJCW9tYXAyX2RwbGxfcm91bmRfcmF0ZShjbGssIHJhdGUpOworCisJCWlmIChkZC0+bGFzdF9yb3VuZGVkX3JhdGUgPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWZyZXFzZWwgPSBfb21hcDNfZHBsbF9jb21wdXRlX2ZyZXFzZWwoY2xrLCBkZC0+bGFzdF9yb3VuZGVkX24pOworCQlpZiAoIWZyZXFzZWwpCisJCQlXQVJOX09OKDEpOworCisJCXByX2RlYnVnKCJjbG9jazogJXM6IHNldCByYXRlOiBsb2NraW5nIHJhdGUgdG8gJWx1LlxuIiwKKwkJCSBjbGstPm5hbWUsIHJhdGUpOworCisJCXJldCA9IG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtKGNsaywgZGQtPmxhc3Rfcm91bmRlZF9tLAorCQkJCQkJIGRkLT5sYXN0X3JvdW5kZWRfbiwgZnJlcXNlbCk7CisJCWlmICghcmV0KQorCQkJbmV3X3BhcmVudCA9IGRkLT5jbGtfcmVmOworCX0KKwlpZiAoIXJldCkgeworCQkvKgorCQkgKiBTd2l0Y2ggdGhlIHBhcmVudCBjbG9jayBpbiB0aGUgaGVpcmFyY2h5LCBhbmQgbWFrZSBzdXJlCisJCSAqIHRoYXQgdGhlIG5ldyBwYXJlbnQncyB1c2Vjb3VudCBpcyBjb3JyZWN0LiAgTm90ZTogd2UKKwkJICogZW5hYmxlIHRoZSBuZXcgcGFyZW50IGJlZm9yZSBkaXNhYmxpbmcgdGhlIG9sZCB0byBhdm9pZAorCQkgKiBhbnkgdW5uZWNlc3NhcnkgaGFyZHdhcmUgZGlzYWJsZS0+ZW5hYmxlIHRyYW5zaXRpb25zLgorCQkgKi8KKwkJaWYgKGNsay0+dXNlY291bnQpIHsKKwkJCW9tYXAyX2Nsa19lbmFibGUobmV3X3BhcmVudCk7CisJCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJCX0KKwkJY2xrX3JlcGFyZW50KGNsaywgbmV3X3BhcmVudCk7CisJCWNsay0+cmF0ZSA9IHJhdGU7CisJfQorCW9tYXAyX2Nsa19kaXNhYmxlKGRkLT5jbGtfcmVmKTsKKwlvbWFwMl9jbGtfZGlzYWJsZShkZC0+Y2xrX2J5cGFzcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwM19kcGxsNF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUgMTItNSBDRFAgY29kZSBmcm9tIFRJLCAiTGltaXRhdGlvbiAyLjUiCisJICogb24gMzQzMEVTMSBwcmV2ZW50cyB1cyBmcm9tIGNoYW5naW5nIERQTEwgbXVsdGlwbGllcnMgb3IgZGl2aWRlcnMKKwkgKiBvbiBEUExMNC4KKwkgKi8KKwlpZiAob21hcF9yZXYoKSA9PSBPTUFQMzQzMF9SRVZfRVMxXzApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogRFBMTDQgY2Fubm90IGNoYW5nZSByYXRlIGR1ZSB0byAiCisJCSAgICAgICAic2lsaWNvbiAnTGltaXRhdGlvbiAyLjUnIG9uIDM0MzBFUzEuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUoY2xrLCByYXRlKTsKK30KKworCisvKgorICogQ09SRSBEUExMIChEUExMMykgcmF0ZSBwcm9ncmFtbWluZyBmdW5jdGlvbnMKKyAqCisgKiBUaGVzZSBjYWxsIGludG8gU1JBTSBjb2RlIHRvIGRvIHRoZSBhY3R1YWwgQ00gd3JpdGVzLCBzaW5jZSB0aGUgU0RSQU0KKyAqIGlzIGNsb2NrZWQgZnJvbSBEUExMMy4KKyAqLworCisvKioKKyAqIG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZSAtIHNldCBDT1JFIERQTEwgTTIgZGl2aWRlcgorICogQGNsazogc3RydWN0IGNsayAqIG9mIERQTEwgdG8gc2V0CisgKiBAcmF0ZTogcm91bmRlZCB0YXJnZXQgcmF0ZQorICoKKyAqIFByb2dyYW0gdGhlIERQTEwgTTIgZGl2aWRlciB3aXRoIHRoZSByb3VuZGVkIHRhcmdldCByYXRlLiAgUmV0dXJucworICogLUVJTlZBTCB1cG9uIGVycm9yLCBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIG5ld19kaXYgPSAwOworCXVuc2lnbmVkIGxvbmcgdmFsaWRyYXRlLCBzZHJjcmF0ZTsKKwlzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc3A7CisKKwlpZiAoIWNsayB8fCAhcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY2xrICE9ICZkcGxsM19tMl9jaykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmF0ZSA9PSBjbGstPnJhdGUpCisJCXJldHVybiAwOworCisJdmFsaWRyYXRlID0gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2KGNsaywgcmF0ZSwgJm5ld19kaXYpOworCWlmICh2YWxpZHJhdGUgIT0gcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzZHJjcmF0ZSA9IHNkcmNfaWNrLnJhdGU7CisJaWYgKHJhdGUgPiBjbGstPnJhdGUpCisJCXNkcmNyYXRlIDw8PSAoKHJhdGUgLyBjbGstPnJhdGUpIC0gMSk7CisJZWxzZQorCQlzZHJjcmF0ZSA+Pj0gKChjbGstPnJhdGUgLyByYXRlKSAtIDEpOworCisJc3AgPSBvbWFwMl9zZHJjX2dldF9wYXJhbXMoc2RyY3JhdGUpOworCWlmICghc3ApCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfaW5mbygiY2xvY2s6IGNoYW5naW5nIENPUkUgRFBMTCByYXRlIGZyb20gJWx1IHRvICVsdVxuIiwgY2xrLT5yYXRlLAorCQl2YWxpZHJhdGUpOworCXByX2luZm8oImNsb2NrOiBTRFJDIHRpbWluZyBwYXJhbXMgdXNlZDogJTA4eCAlMDh4ICUwOHhcbiIsCisJCXNwLT5yZnJfY3RybCwgc3AtPmFjdGltX2N0cmxhLCBzcC0+YWN0aW1fY3RybGIpOworCisJLyogUkVWSVNJVDogU1JBTSBjb2RlIGRvZXNuJ3Qgc3VwcG9ydCBvdGhlciBNMiBkaXZpc29ycyB5ZXQgKi8KKwlXQVJOX09OKG5ld19kaXYgIT0gMSAmJiBuZXdfZGl2ICE9IDIpOworCisJLyogUkVWSVNJVDogQWRkIFNEUkNfTVIgY2hhbmdpbmcgdG8gdGhpcyBjb2RlIGFsc28gKi8KKwlvbWFwM19jb25maWd1cmVfY29yZV9kcGxsKHNwLT5yZnJfY3RybCwgc3AtPmFjdGltX2N0cmxhLAorCQkJCSAgc3AtPmFjdGltX2N0cmxiLCBuZXdfZGl2KTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19ub25jb3JlX2RwbGxfb3BzID0geworCS5lbmFibGUJCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9lbmFibGUsCisJLmRpc2FibGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUsCit9OworCisvKiBEUExMIGF1dG9pZGxlIHJlYWQvc2V0IGNvZGUgKi8KKworCiAvKioKICAqIG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZCAtIHJlYWQgYSBEUExMJ3MgYXV0b2lkbGUgYml0cwogICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMIHRvIHJlYWQKQEAgLTM1Niw5ICs4MzksMTAgQEAKICAqIFVzaW5nIHBhcmVudCBjbG9jayBEUExMIGRhdGEsIGxvb2sgdXAgRFBMTCBzdGF0ZS4gIElmIGxvY2tlZCwgc2V0IG91cgogICogcmF0ZSB0byB0aGUgZHBsbF9jbGsgKiAyOyBvdGhlcndpc2UsIGp1c3QgdXNlIGRwbGxfY2xrLgogICovCi1zdGF0aWMgdm9pZCBvbWFwM19jbGtvdXR4Ml9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDNfY2xrb3V0eDJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CiAJdTMyIHY7CiAJc3RydWN0IGNsayAqcGNsazsKIApAQCAtMzcyLDE3ICs4NTYsMTUgQEAKIAogCWRkID0gcGNsay0+ZHBsbF9kYXRhOwogCi0JV0FSTl9PTighZGQtPmNvbnRyb2xfcmVnIHx8ICFkZC0+ZW5hYmxlX21hc2spOworCVdBUk5fT04oIWRkLT5lbmFibGVfbWFzayk7CiAKIAl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKSAmIGRkLT5lbmFibGVfbWFzazsKIAl2ID4+PSBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spOwotCWlmICh2ICE9IERQTExfTE9DS0VEKQotCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZTsKKwlpZiAodiAhPSBPTUFQM1hYWF9FTl9EUExMX0xPQ0tFRCkKKwkJcmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOwogCWVsc2UKLQkJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgKiAyOwotCi0JaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpCi0JCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJCXJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAqIDI7CisJcmV0dXJuIHJhdGU7CiB9CiAKIC8qIENvbW1vbiBjbG9jayBjb2RlICovCkBAIC00MzIsNyArOTE0LDcgQEAKIAogCS8qIFJFVklTSVQ6IG5vdCB5ZXQgcmVhZHkgZm9yIDM0M3ggKi8KICNpZiAwCi0JaWYgKG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKCZ2aXJ0X3ByY21fc2V0LCBtcHVyYXRlKSkKKwlpZiAoY2xrX3NldF9yYXRlKCZ2aXJ0X3ByY21fc2V0LCBtcHVyYXRlKSkKIAkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBtYXRjaGluZyBNUFUgcmF0ZVxuIik7CiAjZW5kaWYKIApAQCAtNDUwLDI2ICs5MzIsMTMgQEAKIGludCBfX2luaXQgb21hcDJfY2xrX2luaXQodm9pZCkKIHsKIAkvKiBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207ICovCi0Jc3RydWN0IGNsayAqKmNsa3A7CisJc3RydWN0IG9tYXBfY2xrICpjOwogCS8qIHUzMiBjbGtyYXRlOyAqLwogCXUzMiBjcHVfY2xrZmxnOwogCi0JLyogUkVWSVNJVDogVWx0aW1hdGVseSB0aGlzIHdpbGwgYmUgdXNlZCBmb3IgbXVsdGlib290ICovCi0jaWYgMAotCWlmIChjcHVfaXNfb21hcDI0MngoKSkgewotCQljcHVfbWFzayA9IFJBVEVfSU5fMjQyWDsKLQkJY3B1X2Nsa2ZsZyA9IENMT0NLX0lOX09NQVAyNDJYOwotCQljbGtwID0gb25jaGlwXzI0eHhfY2xrczsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7Ci0JCWNwdV9tYXNrID0gUkFURV9JTl8yNDNYOwotCQljcHVfY2xrZmxnID0gQ0xPQ0tfSU5fT01BUDI0M1g7Ci0JCWNsa3AgPSBvbmNoaXBfMjR4eF9jbGtzOwotCX0KLSNlbmRpZgogCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQljcHVfbWFzayA9IFJBVEVfSU5fMzQzWDsKLQkJY3B1X2Nsa2ZsZyA9IENMT0NLX0lOX09NQVAzNDNYOwotCQljbGtwID0gb25jaGlwXzM0eHhfY2xrczsKKwkJY3B1X2Nsa2ZsZyA9IENLXzM0M1g7CiAKIAkJLyoKIAkJICogVXBkYXRlIHRoaXMgaWYgdGhlcmUgYXJlIGZ1cnRoZXIgY2xvY2sgY2hhbmdlcyBiZXR3ZWVuIEVTMgpAQCAtNDc3LDIzICs5NDYsMjQgQEAKIAkJICovCiAJCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgewogCQkJLyogTm8gMzQzMEVTMS1vbmx5IHJhdGVzIGV4aXN0LCBzbyBubyBSQVRFX0lOXzM0MzBFUzEgKi8KLQkJCWNwdV9jbGtmbGcgfD0gQ0xPQ0tfSU5fT01BUDM0MzBFUzE7CisJCQljcHVfY2xrZmxnIHw9IENLXzM0MzBFUzE7CiAJCX0gZWxzZSB7CiAJCQljcHVfbWFzayB8PSBSQVRFX0lOXzM0MzBFUzI7Ci0JCQljcHVfY2xrZmxnIHw9IENMT0NLX0lOX09NQVAzNDMwRVMyOworCQkJY3B1X2Nsa2ZsZyB8PSBDS18zNDMwRVMyOwogCQl9CiAJfQogCiAJY2xrX2luaXQoJm9tYXAyX2Nsa19mdW5jdGlvbnMpOwogCi0JZm9yIChjbGtwID0gb25jaGlwXzM0eHhfY2xrczsKLQkgICAgIGNsa3AgPCBvbmNoaXBfMzR4eF9jbGtzICsgQVJSQVlfU0laRShvbmNoaXBfMzR4eF9jbGtzKTsKLQkgICAgIGNsa3ArKykgewotCQlpZiAoKCpjbGtwKS0+ZmxhZ3MgJiBjcHVfY2xrZmxnKSB7Ci0JCQljbGtfcmVnaXN0ZXIoKmNsa3ApOwotCQkJb21hcDJfaW5pdF9jbGtfY2xrZG0oKmNsa3ApOworCWZvciAoYyA9IG9tYXAzNHh4X2Nsa3M7IGMgPCBvbWFwMzR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwMzR4eF9jbGtzKTsgYysrKQorCQljbGtfaW5pdF9vbmUoYy0+bGsuY2xrKTsKKworCWZvciAoYyA9IG9tYXAzNHh4X2Nsa3M7IGMgPCBvbWFwMzR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwMzR4eF9jbGtzKTsgYysrKQorCQlpZiAoYy0+Y3B1ICYgY3B1X2Nsa2ZsZykgeworCQkJY2xrZGV2X2FkZCgmYy0+bGspOworCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7CisJCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOwogCQl9Ci0JfQogCiAJLyogUkVWSVNJVDogTm90IHlldCByZWFkeSBmb3IgT01BUDMgKi8KICNpZiAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaAppbmRleCBhODI2MDk0Li43MGVjMTBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKQEAgLTI3LDEzICsyNywxNCBAQAogI2luY2x1ZGUgInBybS5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKIAotc3RhdGljIHZvaWQgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyB2b2lkIG9tYXAzX2Nsa291dHgyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworc3RhdGljIHVuc2lnbmVkIGxvbmcgb21hcDNfZHBsbF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG9tYXAzX2Nsa291dHgyX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogc3RhdGljIHZvaWQgb21hcDNfZHBsbF9hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsayk7CiBzdGF0aWMgdm9pZCBvbWFwM19kcGxsX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspOwogc3RhdGljIHUzMiBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQoc3RydWN0IGNsayAqY2xrKTsKLXN0YXRpYyBpbnQgb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwotc3RhdGljIHZvaWQgb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKK3N0YXRpYyBpbnQgb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3N0YXRpYyBpbnQgb21hcDNfZHBsbDRfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOworc3RhdGljIGludCBvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwogCiAvKiBNYXhpbXVtIERQTEwgbXVsdGlwbGllciwgZGl2aWRlciB2YWx1ZXMgZm9yIE9NQVAzICovCiAjZGVmaW5lIE9NQVAzX01BWF9EUExMX01VTFQJCTIwNDgKQEAgLTQ3LDYgKzQ4LDEwIEBACiAgKiBEUExMNSBzdXBwbGllcyBvdGhlciBwZXJpcGhlcmFsIGNsb2NrcyAoVVNCSE9TVCwgVVNJTSkuCiAgKi8KIAorLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIERQTEwgYnlwYXNzIGNsb2NrcyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfZmNrOworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfZmNrOworCiAvKiBDTV9DTEtFTl9QTEwqLkVOKiBiaXQgdmFsdWVzIC0gbm90IGFsbCBhcmUgYXZhaWxhYmxlIGZvciBldmVyeSBEUExMICovCiAjZGVmaW5lIERQTExfTE9XX1BPV0VSX1NUT1AJCTB4MQogI2RlZmluZSBEUExMX0xPV19QT1dFUl9CWVBBU1MJCTB4NQpAQCAtNTcsNjcgKzYyLDU5IEBACiAvKiBBY2NvcmRpbmcgdG8gdGltZXIzMmsuYywgdGhpcyBpcyBhIDMyNzY4SHogY2xvY2ssIG5vdCBhIDMyMDAwSHogY2xvY2suICovCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwXzMya19mY2sgPSB7CiAJLm5hbWUJCT0gIm9tYXBfMzJrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMzI3NjgsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzZWN1cmVfMzJrX2ZjayA9IHsKIAkubmFtZQkJPSAic2VjdXJlXzMya19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yYXRlCQk9IDMyNzY4LAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCUFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogfTsKIAogLyogVmlydHVhbCBzb3VyY2UgY2xvY2tzIGZvciBvc2Nfc3lzX2NrICovCiBzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzEybV9jayA9IHsKIAkubmFtZQkJPSAidmlydF8xMm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCUFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xM21fY2sgPSB7CiAJLm5hbWUJCT0gInZpcnRfMTNtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmF0ZQkJPSAxMzAwMDAwMCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCwKLQkucmVjYWxjCQk9ICZwcm9wYWdhdGVfcmF0ZSwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTZfOG1fY2sgPSB7CiAJLm5hbWUJCT0gInZpcnRfMTZfOG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yYXRlCQk9IDE2ODAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCUFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xOV8ybV9jayA9IHsKIAkubmFtZQkJPSAidmlydF8xOV8ybV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMTkyMDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzI2bV9jayA9IHsKIAkubmFtZQkJPSAidmlydF8yNm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yYXRlCQk9IDI2MDAwMDAwLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCUFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdmlydF8zOF80bV9jayA9IHsKIAkubmFtZQkJPSAidmlydF8zOF80bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJhdGUJCT0gMzg0MDAwMDAsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9GSVhFRCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLmZsYWdzCQk9IFJBVEVfRklYRUQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMTJtX3JhdGVzW10gPSB7CkBAIC0xNjQsMTMgKzE2MSwxMyBAQAogLyogMTIsIDEzLCAxNi44LCAxOS4yLCAyNiwgb3IgMzguNCBNSHogKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIG9zY19zeXNfY2sgPSB7CiAJLm5hbWUJCT0gIm9zY19zeXNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9QUk1fQ0xLU0VMLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NZU19DTEtJTl9TRUxfTUFTSywKIAkuY2xrc2VsCQk9IG9zY19zeXNfY2xrc2VsLAogCS8qIFJFVklTSVQ6IGRlYWwgd2l0aCBhdXRvZXh0Y2xrbW9kZT8gKi8KLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX0ZJWEVEIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlBTFdBWVNfRU5BQkxFRCwKKwkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTg5LDM2ICsxODYsMzQgQEAKIC8qIEZlZWRzIERQTExzIC0gZGl2aWRlZCBmaXJzdCBieSBQUk1fQ0xLU1JDX0NUUkwuU1lTQ0xLRElWPyAqLwogc3RhdGljIHN0cnVjdCBjbGsgc3lzX2NrID0gewogCS5uYW1lCQk9ICJzeXNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtTUkNfQ1RSTCwKIAkuY2xrc2VsX21hc2sJPSBPTUFQX1NZU0NMS0RJVl9NQVNLLAogCS5jbGtzZWwJCT0gc3lzX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc3lzX2FsdGNsayA9IHsKIAkubmFtZQkJPSAic3lzX2FsdGNsayIsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCi0JLnJlY2FsYwkJPSAmcHJvcGFnYXRlX3JhdGUsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiB9OwogCiAvKiBPcHRpb25hbCBleHRlcm5hbCBjbG9jayBpbnB1dCBmb3Igc29tZSBNY0JTUHMgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwX2Nsa3MgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2Nsa3MiLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAotCS5yZWNhbGMJCT0gJnByb3BhZ2F0ZV9yYXRlLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogfTsKIAogLyogUFJNIEVYVEVSTkFMIENMT0NLIE9VVFBVVCAqLwogCiBzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MSA9IHsKIAkubmFtZQkJPSAic3lzX2Nsa291dDEiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9QUk1fQ0xLT1VUX0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTEtPVVRfRU5fU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0yMjYsMTYgKzIyMSw2IEBACiAKIC8qIENNIENMT0NLUyAqLwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRwbGxfYnlwYXNzX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkcGxsX2xvY2tlZF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2MTZfZHBsbF9yYXRlc1tdID0gewogCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKIAl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCkBAIC0yNjMsNiArMjQ4LDkgQEAKIAkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCiAJLm11bHRfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX01VTFRfTUFTSywKIAkuZGl2MV9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJPSAmZHBsbDFfZmNrLAorCS5jbGtfcmVmCT0gJnN5c19jaywKKwkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfRlJFUVNFTF9NQVNLLAogCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpLAogCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX01QVV9EUExMX01BU0ssCiAJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykgfCAoMSA8PCBEUExMX0xPQ0tFRCksCkBAIC0yNzIsMTggKzI2MCwyMSBAQAogCS5hdXRvaWRsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKSwKIAkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fTVBVX0RQTExfTUFTSywKIAkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9JRExFU1RfUExMKSwKLQkuaWRsZXN0X2JpdAk9IE9NQVAzNDMwX1NUX01QVV9DTEtfU0hJRlQsCisJLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfTVBVX0NMS19NQVNLLAogCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKIAkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCiAJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsMV9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDFfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZHBsbF9kYXRhCT0gJmRwbGwxX2RkLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5jbGtkbV9uYW1lCT0gImRwbGwxX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIH07CiAKQEAgLTI5Myw5ICsyODQsOSBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsMV94Ml9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDFfeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRwbGwxX2NrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGwxX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCkBAIC0zMTEsMTMgKzMwMiwxMyBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsMV94Mm0yX2NrID0gewogCS5uYW1lCQk9ICJkcGxsMV94Mm0yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZkcGxsMV94Ml9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDJfUExMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9DTEtPVVRfRElWX01BU0ssCiAJLmNsa3NlbAkJPSBkaXYxNl9kcGxsMV94Mm0yX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTMyOSw2ICszMjAsOSBAQAogCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCiAJLm11bHRfbWFzawk9IE9NQVAzNDMwX0lWQTJfRFBMTF9NVUxUX01BU0ssCiAJLmRpdjFfbWFzawk9IE9NQVAzNDMwX0lWQTJfRFBMTF9ESVZfTUFTSywKKwkuY2xrX2J5cGFzcwk9ICZkcGxsMl9mY2ssCisJLmNsa19yZWYJPSAmc3lzX2NrLAorCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfRlJFUVNFTF9NQVNLLAogCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQ0xLRU5fUExMKSwKIAkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9JVkEyX0RQTExfTUFTSywKIAkubW9kZXMJCT0gKDEgPDwgRFBMTF9MT1dfUE9XRVJfU1RPUCkgfCAoMSA8PCBEUExMX0xPQ0tFRCkgfApAQCAtMzM5LDIwICszMzMsMjEgQEAKIAkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwpLAogCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBfQVVUT19JVkEyX0RQTExfTUFTSywKIAkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCi0JLmlkbGVzdF9iaXQJPSBPTUFQMzQzMF9TVF9JVkEyX0NMS19TSElGVCwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9JVkEyX0NMS19NQVNLLAogCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKIAkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCiAJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsMl9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19ub25jb3JlX2RwbGxfb3BzLAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZHBsbF9kYXRhCT0gJmRwbGwyX2RkLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUywKLQkuZW5hYmxlCQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlLAotCS5kaXNhYmxlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5jbGtkbV9uYW1lCT0gImRwbGwyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIH07CiAKQEAgLTM2NywxNCArMzYyLDE0IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwyX20yX2NrID0gewogCS5uYW1lCQk9ICJkcGxsMl9tMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDJfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwKIAkJCQkJICBPTUFQMzQzMF9DTV9DTEtTRUwyX1BMTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0NMS09VVF9ESVZfTUFTSywKIAkuY2xrc2VsCQk9IGRpdjE2X2RwbGwyX20yeDJfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGwyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMzg3LDYgKzM4Miw5IEBACiAJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCiAJLm11bHRfbWFzawk9IE9NQVAzNDMwX0NPUkVfRFBMTF9NVUxUX01BU0ssCiAJLmRpdjFfbWFzawk9IE9NQVAzNDMwX0NPUkVfRFBMTF9ESVZfTUFTSywKKwkuY2xrX2J5cGFzcwk9ICZzeXNfY2ssCisJLmNsa19yZWYJPSAmc3lzX2NrLAorCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfRlJFUVNFTF9NQVNLLAogCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCiAJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBfRU5fQ09SRV9EUExMX01BU0ssCiAJLmF1dG9fcmVjYWxfYml0CT0gT01BUDM0MzBfRU5fQ09SRV9EUExMX0RSSUZUR1VBUkRfU0hJRlQsCkBAIC0zOTQsMTcgKzM5MiwyMSBAQAogCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMF9DT1JFX0RQTExfU1RfU0hJRlQsCiAJLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9BVVRPSURMRSksCiAJLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX0NPUkVfRFBMTF9NQVNLLAorCS5pZGxlc3RfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCisJLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfQ09SRV9DTEtfTUFTSywKIAkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAorCS5taW5fZGl2aWRlcgk9IDEsCiAJLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAogCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGwzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLmRwbGxfZGF0YQk9ICZkcGxsM19kZCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogfTsKIApAQCAtNDE0LDkgKzQxNiw5IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX3gyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsM194Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDNfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKIH07CiAKQEAgLTQ2MCw1NSArNDYyLDM0IEBACiAJeyAucGFyZW50ID0gTlVMTCB9CiB9OwogCi0vKgotICogRFBMTDMgb3V0cHV0IE0yCi0gKiBSRVZJU0lUOiBUaGlzIERQTEwgb3V0cHV0IGRpdmlkZXIgbXVzdCBiZSBjaGFuZ2VkIGluIFNSQU0sIHNvIHVudGlsCi0gKiB0aGF0IGNvZGUgaXMgcmVhZHksIHRoaXMgc2hvdWxkIHJlbWFpbiBhICdyZWFkLW9ubHknIGNsa3NlbCBjbG9jay4KLSAqLworLyogRFBMTDMgb3V0cHV0IE0yIC0gcHJpbWFyeSBjb250cm9sIHBvaW50IGZvciBDT1JFIHNwZWVkICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsM19tMl9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDNfbTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRwbGwzX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0NMS09VVF9ESVZfTUFTSywKIAkuY2xrc2VsCQk9IGRpdjMxX2RwbGwzbTJfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjb3JlX2NrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDNfbTJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0gewogCS5uYW1lCQk9ICJjb3JlX2NrIiwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfQ09SRV9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IGNvcmVfY2tfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkcGxsM19tMngyX2NrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDNfeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9CisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDNfbTJfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20yeDJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGwzX20yeDJfY2siLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TVF9DT1JFX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gZHBsbDNfbTJ4Ml9ja19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM194Ml9jaywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwpAQCAtNTIwLDQyICs1MDEsMzQgQEAKIC8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsM19tM3gyX2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsM19tM19jayA9IHsKIAkubmFtZQkJPSAiZHBsbDNfbTNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRwbGwzX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfRElWX0RQTEwzX01BU0ssCiAJLmNsa3NlbAkJPSBkaXYxNl9kcGxsM19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiAvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20zeDJfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGwzX20zeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmZHBsbDNfbTNfY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fRU1VX0NPUkVfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgSU5WRVJUX0VOQUJMRSwKKwkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZW11X2NvcmVfYWx3b25fY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGwzX20zeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGNsayBlbXVfY29yZV9hbHdvbl9jayA9IHsKIAkubmFtZQkJPSAiZW11X2NvcmVfYWx3b25fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRwbGwzX20zeDJfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX0NPUkVfQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBlbXVfY29yZV9hbHdvbl9ja19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qIERQTEw0ICovCkBAIC01NjUsNiArNTM4LDkgQEAKIAkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwyKSwKIAkubXVsdF9tYXNrCT0gT01BUDM0MzBfUEVSSVBIX0RQTExfTVVMVF9NQVNLLAogCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9ESVZfTUFTSywKKwkuY2xrX2J5cGFzcwk9ICZzeXNfY2ssCisJLmNsa19yZWYJPSAmc3lzX2NrLAorCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9GUkVRU0VMX01BU0ssCiAJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9NQVNLLAogCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKQEAgLTU3NCwyMCArNTUwLDIxIEBACiAJLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9BVVRPSURMRSksCiAJLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX1BFUklQSF9EUExMX01BU0ssCiAJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuaWRsZXN0X2JpdAk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEtfU0hJRlQsCisJLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAogCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKIAkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCiAJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDRfY2siLAorCS5vcHMJCT0gJmNsa29wc19ub25jb3JlX2RwbGxfb3BzLAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZHBsbF9kYXRhCT0gJmRwbGw0X2RkLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUywKLQkuZW5hYmxlCQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlLAotCS5kaXNhYmxlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfZHBsbDRfc2V0X3JhdGUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogfTsKIApAQCAtNTk4LDkgKzU3NSw5IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X3gyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF94Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDRfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKIH07CiAKQEAgLTYxMiwxMTIgKzU4OSwxMDEgQEAKIC8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tMngyX2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMl9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDRfbTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMyksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfRElWXzk2TV9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMngyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tMngyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRwbGw0X20yX2NrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROXzk2TV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBJTlZFUlRfRU5BQkxFLAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzk2bV9hbHdvbl9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGw0X20yeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCisvKgorICogRFBMTDQgZ2VuZXJhdGVzIERQTEw0X00yWDJfQ0xLIHdoaWNoIGlzIHRoZW4gcm91dGVkIGludG8gdGhlIFBSTSBhcworICogUFJNXzk2TV9BTFdPTl8oRilDTEsuICBUd28gY2xvY2tzIHRoZW4gZW1lcmdlIGZyb20gdGhlIFBSTToKKyAqIDk2TV9BTFdPTl9GQ0xLIChjYWxsZWQgIm9tYXBfOTZtX2Fsd29uX2ZjayIgYmVsb3cpIGFuZAorICogQ01fOTZLXyhGKUNMSy4KKyAqLwogc3RhdGljIHN0cnVjdCBjbGsgb21hcF85Nm1fYWx3b25fZmNrID0gewogCS5uYW1lCQk9ICJvbWFwXzk2bV9hbHdvbl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRwbGw0X20yeDJfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXBfOTZtX2Fsd29uX2Zja19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQkgUEFSRU5UX0NPTlRST0xTX0NMT0NLLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwXzk2bV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm9tYXBfOTZtX2ZjayIsCi0JLnBhcmVudAkJPSAmb21hcF85Nm1fYWx3b25fZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjbV85Nm1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsNF9tMngyX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQogc3RhdGljIHN0cnVjdCBjbGsgY21fOTZtX2ZjayA9IHsKIAkubmFtZQkJPSAiY21fOTZtX2ZjayIsCi0JLnBhcmVudAkJPSAmZHBsbDRfbTJ4Ml9jaywKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF85Nm1fZHBsbF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF85Nm1fc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF85Nm1fZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBvbWFwXzk2bV9kcGxsX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJIC5yYXRlcyA9IG9tYXBfOTZtX3N5c19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb21hcF85Nm1fZmNrID0geworCS5uYW1lCQk9ICJvbWFwXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gY21fOTZtX2Zja19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU09VUkNFXzk2TV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcF85Nm1fZmNrX2Nsa3NlbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X20zeDJfY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20zX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tM19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDRfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9UVl9NQVNLLAogCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM3gyX2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tM3gyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRwbGw0X20zX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fVFZfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgSU5WRVJUX0VOQUJMRSwKKwkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdmlydF9vbWFwXzU0bV9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGw0X20zeDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2aXJ0X29tYXBfNTRtX2ZjayA9IHsKLQkubmFtZQkJPSAidmlydF9vbWFwXzU0bV9mY2siLAotCS5wYXJlbnQJCT0gJmRwbGw0X20zeDJfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IHZpcnRfb21hcF81NG1fZmNrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzU0bV9kNG0zeDJfcmF0ZXNbXSA9IHsKIAl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCiAJeyAuZGl2ID0gMCB9CkBAIC03MjksMjMgKzY5NSwyMiBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF81NG1fY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnZpcnRfb21hcF81NG1fZmNrLCAucmF0ZXMgPSBvbWFwXzU0bV9kNG0zeDJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbDRfbTN4Ml9jaywgLnJhdGVzID0gb21hcF81NG1fZDRtM3gyX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJnN5c19hbHRjbGssICAgIC5yYXRlcyA9IG9tYXBfNTRtX2FsdF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgb21hcF81NG1fZmNrID0gewogCS5uYW1lCQk9ICJvbWFwXzU0bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU09VUkNFXzU0TSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfNTRNX01BU0ssCiAJLmNsa3NlbAkJPSBvbWFwXzU0bV9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF80OG1fOTZtZDJfcmF0ZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF80OG1fY205Nm1fcmF0ZXNbXSA9IHsKIAl7IC5kaXYgPSAyLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCiAJeyAuZGl2ID0gMCB9CiB9OwpAQCAtNzU2LDEwNiArNzIxLDExMiBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF80OG1fY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssIC5yYXRlcyA9IG9tYXBfNDhtXzk2bWQyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssIC5yYXRlcyA9IG9tYXBfNDhtX2NtOTZtX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gJnN5c19hbHRjbGssIC5yYXRlcyA9IG9tYXBfNDhtX2FsdF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgb21hcF80OG1fZmNrID0gewogCS5uYW1lCQk9ICJvbWFwXzQ4bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU09VUkNFXzQ4TSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfNDhNX01BU0ssCiAJLmNsa3NlbAkJPSBvbWFwXzQ4bV9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMTJtX2ZjayA9IHsKIAkubmFtZQkJPSAib21hcF8xMm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCiAJLmZpeGVkX2Rpdgk9IDQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCiB9OwogCiAvKiBUaGlzIHZpcnN0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X200eDJfY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X200X2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tNF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDRfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9EU1MxX01BU0ssCiAJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIH07CiAKIC8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTR4Ml9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDRfbTR4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZkcGxsNF9tNF9jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9DQU1fU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgSU5WRVJUX0VOQUJMRSwKKwkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAogfTsKIAogLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X201eDJfY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X201X2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tNV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDRfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9DQU1fTUFTSywKIAkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIC8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTV4Ml9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDRfbTV4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZkcGxsNF9tNV9jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9DQU1fU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgSU5WRVJUX0VOQUJMRSwKKwkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAogfTsKIAogLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X202eDJfY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X202X2NrID0gewogCS5uYW1lCQk9ICJkcGxsNF9tNl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDRfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9ESVZfRFBMTDRfTUFTSywKIAkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIC8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTZ4Ml9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDRfbTZ4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZkcGxsNF9tNl9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0VNVV9QRVJJUEhfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgSU5WRVJUX0VOQUJMRSwKKwkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZW11X3Blcl9hbHdvbl9jayA9IHsKIAkubmFtZQkJPSAiZW11X3Blcl9hbHdvbl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDRfbTZ4Ml9jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTg2Nyw2ICs4MzgsOSBAQAogCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDQpLAogCS5tdWx0X21hc2sJPSBPTUFQMzQzMEVTMl9QRVJJUEgyX0RQTExfTVVMVF9NQVNLLAogCS5kaXYxX21hc2sJPSBPTUFQMzQzMEVTMl9QRVJJUEgyX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJPSAmc3lzX2NrLAorCS5jbGtfcmVmCT0gJnN5c19jaywKKwkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX0ZSRVFTRUxfTUFTSywKIAkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBFUzJfQ01fQ0xLRU4yKSwKIAkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMEVTMl9FTl9QRVJJUEgyX0RQTExfTUFTSywKIAkubW9kZXMJCT0gKDEgPDwgRFBMTF9MT1dfUE9XRVJfU1RPUCkgfCAoMSA8PCBEUExMX0xPQ0tFRCksCkBAIC04NzYsMjAgKzg1MCwyMSBAQAogCS5hdXRvaWRsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBFUzJfQ01fQVVUT0lETEUyX1BMTCksCiAJLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMEVTMl9BVVRPX1BFUklQSDJfRFBMTF9NQVNLLAogCS5pZGxlc3RfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVDIpLAotCS5pZGxlc3RfYml0CT0gT01BUDM0MzBFUzJfU1RfUEVSSVBIMl9DTEtfU0hJRlQsCisJLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBFUzJfU1RfUEVSSVBIMl9DTEtfTUFTSywKIAkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAorCS5taW5fZGl2aWRlcgk9IDEsCiAJLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAogCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbDVfY2sgPSB7CiAJLm5hbWUJCT0gImRwbGw1X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLmRwbGxfZGF0YQk9ICZkcGxsNV9kZCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIgfCBSQVRFX1BST1BBR0FURVMsCi0JLmVuYWJsZQkJPSAmb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZSwKLQkuZGlzYWJsZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZSwKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiB9OwogCkBAIC05MDAsMzEgKzg3NSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsNV9tMl9jayA9IHsKIAkubmFtZQkJPSAiZHBsbDVfbTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRwbGw1X2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzJfRElWXzEyME1fTUFTSywKIAkuY2xrc2VsCQk9IGRpdjE2X2RwbGw1X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF8xMjBtX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGw1X20yX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgb21hcF8xMjBtX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF8xMjBtX2ZjayIsCi0JLnBhcmVudAkJPSAmZHBsbDVfbTJfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QyKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9TVF9QRVJJUEgyX0NMS19NQVNLLAotCS5jbGtzZWwJCT0gb21hcF8xMjBtX2Zja19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDVfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC05NTEsMjIgKzkwOCwyMyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY2xrb3V0Ml9zcmNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssCQkgIC5yYXRlcyA9IGNsa291dDJfc3JjX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkJICAucmF0ZXMgPSBjbGtvdXQyX3NyY19zeXNfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmb21hcF85Nm1fYWx3b25fZmNrLCAgLnJhdGVzID0gY2xrb3V0Ml9zcmNfOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJm9tYXBfNTRtX2ZjaywJICAucmF0ZXMgPSBjbGtvdXQyX3NyY181NG1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywJCS5yYXRlcyA9IGNsa291dDJfc3JjX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkJLnJhdGVzID0gY2xrb3V0Ml9zcmNfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssCS5yYXRlcyA9IGNsa291dDJfc3JjXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZvbWFwXzU0bV9mY2ssCS5yYXRlcyA9IGNsa291dDJfc3JjXzU0bV9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgY2xrb3V0Ml9zcmNfY2sgPSB7CiAJLm5hbWUJCT0gImNsa291dDJfc3JjX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUDM0MzBfQ01fQ0xLT1VUX0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTEtPVVQyX0VOX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfQ01fQ0xLT1VUX0NUUkwsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLT1VUMlNPVVJDRV9NQVNLLAogCS5jbGtzZWwJCT0gY2xrb3V0Ml9zcmNfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtOTg2LDExICs5NDQsMTEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7CiAJLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfQ01fQ0xLT1VUX0NUUkwsCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLT1VUMl9ESVZfTUFTSywKIAkuY2xrc2VsCQk9IHN5c19jbGtvdXQyX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTk5OCwxNiArOTU2LDIyIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmV4Ml9mY2sgPSB7CiAJLm5hbWUJCT0gImNvcmV4Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmRwbGwzX20yeDJfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qIERQTEwgcG93ZXIgZG9tYWluIGNsb2NrIGNvbnRyb2xzICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjJfY29yZV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXY0X3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXY0X2NvcmVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRpdjRfcmF0ZXMgfSwKIAl7IC5wYXJlbnQgPSBOVUxMIH0KIH07CiAKQEAgLTEwMTcsMzkgKzk4MSwyMSBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsMV9mY2sgPSB7CiAJLm5hbWUJCT0gImRwbGwxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmY29yZV9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NUFVfQ0xLX1NSQ19NQVNLLAotCS5jbGtzZWwJCT0gZGl2Ml9jb3JlX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKKwkuY2xrc2VsCQk9IGRpdjRfY29yZV9jbGtzZWwsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKLS8qCi0gKiBNUFUgY2xrc2VsOgotICogSWYgRFBMTDEgaXMgbG9ja2VkLCBtcHVfY2sgZGVyaXZlcyBmcm9tIERQTEwxOyBvdGhlcndpc2UsIG1wdV9jawotICogZGVyaXZlcyBmcm9tIHRoZSBoaWdoLWZyZXF1ZW5jeSBieXBhc3MgY2xvY2sgb3JpZ2luYXRpbmcgZnJvbSBEUExMMywKLSAqIGNhbGxlZCAnZHBsbDFfZmNrJwotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtcHVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwxX2ZjaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGwxX3gybTJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGNsayBtcHVfY2sgPSB7CiAJLm5hbWUJCT0gIm1wdV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmZHBsbDFfeDJtMl9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX01QVV9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IG1wdV9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiAvKiBhcm1fZmNrIGlzIGRpdmlkZWQgYnkgdHdvIHdoZW4gRFBMTDEgbG9ja2VkOyBvdGhlcndpc2UsIHBhc3N0aHJvdWdoIG1wdV9jayAqLwpAQCAtMTA2NiwxMyArMTAxMiwxMiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBhcm1fZmNrID0gewogCS5uYW1lCQk9ICJhcm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZtcHVfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9JRExFU1RfUExMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TVF9NUFVfQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSBhcm1fZmNrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIApAQCAtMTA4NCw2MyArMTAyOSw0OCBAQAogICovCiBzdGF0aWMgc3RydWN0IGNsayBlbXVfbXB1X2Fsd29uX2NrID0gewogCS5uYW1lCQk9ICJlbXVfbXB1X2Fsd29uX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZtcHVfY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwyX2ZjayA9IHsKIAkubmFtZQkJPSAiZHBsbDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZjb3JlX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9JVkEyX0NMS19TUkNfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjJfY29yZV9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCisJLmNsa3NlbAkJPSBkaXY0X2NvcmVfY2xrc2VsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCi0vKgotICogSVZBMiBjbGtzZWw6Ci0gKiBJZiBEUExMMiBpcyBsb2NrZWQsIGl2YTJfY2sgZGVyaXZlcyBmcm9tIERQTEwyOyBvdGhlcndpc2UsIGl2YTJfY2sKLSAqIGRlcml2ZXMgZnJvbSB0aGUgaGlnaC1mcmVxdWVuY3kgYnlwYXNzIGNsb2NrIG9yaWdpbmF0aW5nIGZyb20gRFBMTDMsCi0gKiBjYWxsZWQgJ2RwbGwyX2ZjaycKLSAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBpdmEyX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZkcGxsMl9mY2ssCSAgLnJhdGVzID0gZHBsbF9ieXBhc3NfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZHBsbDJfbTJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGNsayBpdmEyX2NrID0gewogCS5uYW1lCQk9ICJpdmEyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRwbGwyX20yX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTV9GQ0xLRU5fSVZBMl9FTl9JVkEyX1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELAotCQkJCQkgIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX0lWQTJfQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBpdmEyX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMsCiAJLmNsa2RtX25hbWUJPSAiaXZhMl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyogQ29tbW9uIGludGVyZmFjZSBjbG9ja3MgKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2Ml9jb3JlX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCiBzdGF0aWMgc3RydWN0IGNsayBsM19pY2sgPSB7CiAJLm5hbWUJCT0gImwzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmY29yZV9jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9MM19NQVNLLAogCS5jbGtzZWwJCT0gZGl2Ml9jb3JlX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTExNTIsMTMgKzEwODIsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbDRfaWNrID0gewogCS5uYW1lCQk9ICJsNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmwzX2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9MNF9NQVNLLAogCS5jbGtzZWwJCT0gZGl2Ml9sM19jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIApAQCAtMTE3MSwxMiArMTEwMCwxMiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBybV9pY2sgPSB7CiAJLm5hbWUJCT0gInJtX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDRfaWNrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1JNX01BU0ssCiAJLmNsa3NlbAkJPSBkaXYyX2w0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKQEAgLTExOTIsNTMgKzExMjEsNTIgQEAKIC8qIFZpcnR1YWwgcGFyZW50IGNsb2NrIGZvciBnZnhfbDNfaWNrIGFuZCBnZnhfbDNfZmNrICovCiBzdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9sM19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsM19pY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUF9FTl9HRlhfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfZmNrID0gewogCS5uYW1lCQk9ICJnZnhfbDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZnZnhfbDNfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAogCS5jbGtzZWwJCT0gZ2Z4X2wzX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEgfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19pY2sgPSB7CiAJLm5hbWUJCT0gImdmeF9sM19pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmdmeF9sM19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEgfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBnZnhfY2cxX2NrID0gewogCS5uYW1lCQk9ICJnZnhfY2cxX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmdmeF9sM19mY2ssIC8qIFJFVklTSVQ6IGNvcnJlY3Q/ICovCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl8yRF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCiAJLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBnZnhfY2cyX2NrID0gewogCS5uYW1lCQk9ICJnZnhfY2cyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmdmeF9sM19mY2ssIC8qIFJFVklTSVQ6IGNvcnJlY3Q/ICovCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl8zRF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCiAJLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMTI2NSwyNCArMTE5MywyNCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzZ3hfZmNrID0gewogCS5uYW1lCQk9ICJzZ3hfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1NHWF9TSElGVCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0NNX0ZDTEtFTl9TR1hfRU5fU0dYX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzJfQ0xLU0VMX1NHWF9NQVNLLAogCS5jbGtzZWwJCT0gc2d4X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCiAJLmNsa2RtX25hbWUJPSAic2d4X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ljayA9IHsKIAkubmFtZQkJPSAic2d4X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsM19pY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9TR1hfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfQ01fSUNMS0VOX1NHWF9FTl9TR1hfU0hJRlQsCiAJLmNsa2RtX25hbWUJPSAic2d4X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTEyOTEsMTEgKzEyMTksMTEgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZDJkXzI2bV9mY2sgPSB7CiAJLm5hbWUJCT0gImQyZF8yNm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRDJEX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMSwKIAkuY2xrZG1fbmFtZQk9ICJkMmRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMTMwOCw2ICsxMjM2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0gewogCS5uYW1lCQk9ICJncHQxMF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc3lzX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLApAQCAtMTMxNSwxMyArMTI0NCwxMyBAQAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxMF9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKQEAgLTEzMjksMzUgKzEyNTgsMzQgQEAKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMTFfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBjcGVmdXNlX2ZjayA9IHsKIAkubmFtZQkJPSAiY3BlZnVzZV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJnN5c19jaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDM0MzBFUzJfQ01fRkNMS0VOMyksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9DUEVGVVNFX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdHNfZmNrID0gewogCS5uYW1lCQk9ICJ0c19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDM0MzBFUzJfQ01fRkNMS0VOMyksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9UU19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYnRsbF9mY2sgPSB7CiAJLm5hbWUJCT0gInVzYnRsbF9mY2siLAotCS5wYXJlbnQJCT0gJm9tYXBfMTIwbV9mY2ssCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmZHBsbDVfbTJfY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCVExMX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTM2NSw4NCArMTI5Myw4MyBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBjb3JlXzk2bV9mY2sgPSB7CiAJLm5hbWUJCT0gImNvcmVfOTZtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmb21hcF85Nm1fZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczNfZmNrID0gewogCS5uYW1lCQk9ICJtbWNoc19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX01NQzNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfZmNrID0gewogCS5uYW1lCQk9ICJtbWNoc19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtc3Byb19mY2sgPSB7CiAJLm5hbWUJCT0gIm1zcHJvX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTVNQUk9fU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfZmNrID0gewogCS5uYW1lCQk9ICJtbWNoc19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMzX2ZjayA9IHsKIAkubmFtZQkJPSAiaTJjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfZmNrID0gewogCS5uYW1lCQk9ICJpMmNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9mY2sgPSB7CiAJLm5hbWUJCT0gImkyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMTQ2OSw2ICsxMzk2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ZjayA9IHsKIAkubmFtZQkJPSAibWNic3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSA1LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLApAQCAtMTQ3NiwxMyArMTQwNCwxMyBAQAogCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQNV9DTEtTX01BU0ssCiAJLmNsa3NlbAkJPSBtY2JzcF8xNV9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0gewogCS5uYW1lCQk9ICJtY2JzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCkBAIC0xNDkwLDcgKzE0MTgsNiBAQAogCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAyX0NPTlRST0xfREVWQ09ORjApLAogCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQMV9DTEtTX01BU0ssCiAJLmNsa3NlbAkJPSBtY2JzcF8xNV9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwpAQCAtMTQ5OSw3NyArMTQyNiw3NiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBjb3JlXzQ4bV9mY2sgPSB7CiAJLm5hbWUJCT0gImNvcmVfNDhtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTRfZmNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDQsCiAJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJNF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkzX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkyX2ZjayA9IHsKIAkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfZmNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKIAkubmFtZQkJPSAidWFydDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ZjayA9IHsKIAkubmFtZQkJPSAidWFydDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGZzaG9zdHVzYl9mY2sgPSB7CiAJLm5hbWUJCT0gImZzaG9zdHVzYl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0ZTSE9TVFVTQl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKQEAgLTE1NzcsMTkgKzE1MDMsMTggQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgY29yZV8xMm1fZmNrID0gewogCS5uYW1lCQk9ICJjb3JlXzEybV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJm9tYXBfMTJtX2ZjaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ZjayA9IHsKIAkubmFtZQkJPSAiaGRxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlXzEybV9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSERRX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTYxMiwyMiArMTUzNywyMiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX2ZjayA9IHsKIAkubmFtZQkJPSAic3NpX3Nzcl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9TU0lfTUFTSywKIAkuY2xrc2VsCQk9IHNzaV9zc3JfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc3NpX3NzdF9mY2sgPSB7CiAJLm5hbWUJCT0gInNzaV9zc3RfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZzc2lfc3NyX2ZjaywKIAkuZml4ZWRfZGl2CT0gMiwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCiB9OwogCkBAIC0xNjQxLDM5ICsxNTY2LDM5IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfaWNrID0gewogCS5uYW1lCQk9ICJjb3JlX2wzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmbDNfaWNrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaHNvdGd1c2JfaWNrID0gewogCS5uYW1lCQk9ICJoc290Z3VzYl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSFNPVEdVU0JfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzZHJjX2ljayA9IHsKIAkubmFtZQkJPSAic2RyY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sM19pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0RSQ19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBFTkFCTEVfT05fSU5JVCwKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfZmNrID0gewogCS5uYW1lCQk9ICJncG1jX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmY29yZV9sM19pY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUEFSRU5UX0NPTlRST0xTX0NMT0NLIHwKLQkJCQlFTkFCTEVfT05fSU5JVCwKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsIC8qIGh1aD8gKi8KIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTE2ODIsMTggKzE2MDcsMTcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJpdHlfbDNfaWNrID0gewogCS5uYW1lCQk9ICJzZWN1cml0eV9sM19pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmwzX2ljaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcGthX2ljayA9IHsKIAkubmFtZQkJPSAicGthX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZzZWN1cml0eV9sM19pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fUEtBX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIApAQCAtMTcwMSwzMSArMTYyNSwzMCBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBjb3JlX2w0X2ljayA9IHsKIAkubmFtZQkJPSAiY29yZV9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYnRsbF9pY2sgPSB7CiAJLm5hbWUJCT0gInVzYnRsbF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjMpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCVExMX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMzX2ljayA9IHsKIAkubmFtZQkJPSAibW1jaHNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX01NQzNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMTczMywyNTAgKzE2NTYsMjUxIEBACiAvKiBJbnRlcnN5c3RlbSBDb21tdW5pY2F0aW9uIFJlZ2lzdGVycyAtIGNoYXNzaXMgbW9kZSBvbmx5ICovCiBzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0gewogCS5uYW1lCQk9ICJpY3JfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0lDUl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGFlczJfaWNrID0gewogCS5uYW1lCQk9ICJhZXMyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9BRVMyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc2hhMTJfaWNrID0gewogCS5uYW1lCQk9ICJzaGExMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0hBMTJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkZXMyX2ljayA9IHsKIAkubmFtZQkJPSAiZGVzMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fREVTMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9pY2sgPSB7CiAJLm5hbWUJCT0gIm1tY2hzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ljayA9IHsKIAkubmFtZQkJPSAibW1jaHNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7CiAJLm5hbWUJCT0gIm1zcHJvX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NU1BST19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9pY2sgPSB7CiAJLm5hbWUJCT0gImhkcV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSERRX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGk0X2ljayA9IHsKIAkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSA0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJNF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19pY2sgPSB7CiAJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfaWNrID0gewogCS5uYW1lCQk9ICJtY3NwaV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ljayA9IHsKIAkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAxLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfaWNrID0gewogCS5uYW1lCQk9ICJpMmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ljayA9IHsKIAkubmFtZQkJPSAiaTJjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMiwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9pY2sgPSB7CiAJLm5hbWUJCT0gImkyY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKIAkubmFtZQkJPSAidWFydDJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfaWNrID0gewogCS5uYW1lCQk9ICJ1YXJ0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDExX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0MTBfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDEwX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSA1LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQNV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9pY2sgPSB7CiAJLm5hbWUJCT0gIm1jYnNwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0gewogCS5uYW1lCQk9ICJmYWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0ZBQ19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzEsCiAJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1haWxib3hlc19pY2sgPSB7CiAJLm5hbWUJCT0gIm1haWxib3hlc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUFJTEJPWEVTX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgb21hcGN0cmxfaWNrID0gewogCS5uYW1lCQk9ICJvbWFwY3RybF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fT01BUENUUkxfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgRU5BQkxFX09OX0lOSVQsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCkBAIC0xOTg0LDE5ICsxOTA4LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9sNF9pY2sgPSB7CiAJLm5hbWUJCT0gInNzaV9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc3NpX2ljayA9IHsKIAkubmFtZQkJPSAic3NpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnBhcmVudAkJPSAmc3NpX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMjAxMSw2ICsxOTM0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsKIAkubmFtZQkJPSAidXNiX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9pY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCkBAIC0yMDE4LDcgKzE5NDIsNiBAQAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMxX0NMS1NFTF9GU0hPU1RVU0JfTUFTSywKIAkuY2xrc2VsCQk9IHVzYl9sNF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMxLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiB9OwogCkBAIC0yMDI4LDk4ICsxOTUxLDg3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyaXR5X2w0X2ljazIgPSB7CiAJLm5hbWUJCT0gInNlY3VyaXR5X2w0X2ljazIiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgYWVzMV9pY2sgPSB7CiAJLm5hbWUJCT0gImFlczFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQUVTMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19pY2sgPSB7CiAJLm5hbWUJCT0gInJuZ19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9STkdfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzaGExMV9pY2sgPSB7CiAJLm5hbWUJCT0gInNoYTExX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZzZWN1cml0eV9sNF9pY2syLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTExX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZGVzMV9pY2sgPSB7CiAJLm5hbWUJCT0gImRlczFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fREVTMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIC8qIERTUyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHNzMV9hbHdvbl9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJICAgIC5yYXRlcyA9IGRwbGxfYnlwYXNzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmRwbGw0X200eDJfY2ssIC5yYXRlcyA9IGRwbGxfbG9ja2VkX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCiBzdGF0aWMgc3RydWN0IGNsayBkc3MxX2Fsd29uX2ZjayA9IHsKIAkubmFtZQkJPSAiZHNzMV9hbHdvbl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5wYXJlbnQJCT0gJmRwbGw0X200eDJfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fRFNTMV9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IGRzczFfYWx3b25fZmNrX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkc3NfdHZfZmNrID0gewogCS5uYW1lCQk9ICJkc3NfdHZfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZvbWFwXzU0bV9mY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9UVl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzXzk2bV9mY2sgPSB7CiAJLm5hbWUJCT0gImRzc185Nm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9UVl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHNzMl9hbHdvbl9mY2sgPSB7CiAJLm5hbWUJCT0gImRzczJfYWx3b25fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMjEyNyw0NSArMjAzOSw0NiBAQAogc3RhdGljIHN0cnVjdCBjbGsgZHNzX2ljayA9IHsKIAkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLwogCS5uYW1lCQk9ICJkc3NfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucGFyZW50CQk9ICZsNF9pY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTV9JQ0xLRU5fRFNTX0VOX0RTU19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogLyogQ0FNICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNhbV9tY2xrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgICAucmF0ZXMgPSBkcGxsX2J5cGFzc19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsNF9tNXgyX2NrLCAucmF0ZXMgPSBkcGxsX2xvY2tlZF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQogc3RhdGljIHN0cnVjdCBjbGsgY2FtX21jbGsgPSB7CiAJLm5hbWUJCT0gImNhbV9tY2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmRwbGw0X201eDJfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IGNhbV9tY2xrX2Nsa3NlbCwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ0FNX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJjYW1fY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9pY2sgPSB7CiAJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KIAkubmFtZQkJPSAiY2FtX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZsNF9pY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9DQU1fU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAorCS5jbGtkbV9uYW1lCT0gImNhbV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNzaTJfOTZtX2ZjayA9IHsKKwkubmFtZQkJPSAiY3NpMl85Nm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NTSTJfU0hJRlQsCiAJLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTIxNzQsMjIgKzIwODcsMjIgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF8xMjBtX2ZjayA9IHsKIAkubmFtZQkJPSAidXNiaG9zdF8xMjBtX2ZjayIsCi0JLnBhcmVudAkJPSAmb21hcF8xMjBtX2ZjaywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGw1X20yX2NrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKIAkuY2xrZG1fbmFtZQk9ICJ1c2Job3N0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF80OG1fZmNrID0gewogCS5uYW1lCQk9ICJ1c2Job3N0XzQ4bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QxX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKIAkuY2xrZG1fbmFtZQk9ICJ1c2Job3N0X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTIxOTcsMjIgKzIxMTAsMTEgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfaWNrID0gewogCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCiAJLm5hbWUJCT0gInVzYmhvc3RfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJmw0X2ljaywKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzMEVTMiwKLQkuY2xrZG1fbmFtZQk9ICJ1c2Job3N0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF9zYXJfZmNrID0gewotCS5uYW1lCQk9ICJ1c2Job3N0X3Nhcl9mY2siLAotCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAotCS5lbmFibGVfcmVnCT0gT01BUF9QUk1fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUE1fUFdTVENUUkwpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfU0FWRUFORFJFU1RPUkVfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMjIzNyw3ICsyMTM5LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNpbV9jbGtzZWxbXSA9IHsKIAl7IC5wYXJlbnQgPSAmb21hcF85Nm1fZmNrLAkucmF0ZXMgPSB1c2ltXzk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZvbWFwXzEyMG1fZmNrLAkucmF0ZXMgPSB1c2ltXzEyMG1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZHBsbDVfbTJfY2ssCS5yYXRlcyA9IHVzaW1fMTIwbV9yYXRlcyB9LAogCXsgLnBhcmVudCA9ICZzeXNfY2ssCQkucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCiAJeyAucGFyZW50ID0gTlVMTCB9LAogfTsKQEAgLTIyNDUsNjMgKzIxNDcsNjMgQEAKIC8qIDM0MzBFUzIgb25seSAqLwogc3RhdGljIHN0cnVjdCBjbGsgdXNpbV9mY2sgPSB7CiAJLm5hbWUJCT0gInVzaW1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0lNT0NQX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0NMS1NFTF9VU0lNT0NQX01BU0ssCiAJLmNsa3NlbAkJPSB1c2ltX2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0MzBFUzIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIC8qIFhYWCBzaG91bGQgZ3B0MSdzIGNsa3NlbCBoYXZlIHdrdXBfMzJrX2ZjayBhcyB0aGUgMzJrIG9wdD8gKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0gewogCS5uYW1lCQk9ICJncHQxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMV9NQVNLLAogCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHdrdXBfMzJrX2ZjayA9IHsKIAkubmFtZQkJPSAid2t1cF8zMmtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtfY2xrZG0sCiAJLnBhcmVudAkJPSAmb21hcF8zMmtfZmNrLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvMV9kYmNrID0gewogCS5uYW1lCQk9ICJncGlvMV9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfMzJrX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8xX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgd2R0Ml9mY2sgPSB7CiAJLm5hbWUJCT0gIndkdDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfMzJrX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3a3VwX2w0X2ljayA9IHsKIAkubmFtZQkJPSAid2t1cF9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfCBBTFdBWVNfRU5BQkxFRCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKQEAgLTIzMTAsNTAgKzIyMTIsNTAgQEAKIC8qIE5ldmVyIHNwZWNpZmljYWxseSBuYW1lZCBpbiB0aGUgVFJNLCBzbyB3ZSBoYXZlIHRvIGluZmVyIGEgbGlrZWx5IG5hbWUgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHVzaW1faWNrID0gewogCS5uYW1lCQk9ICJ1c2ltX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDMwRVMyLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQyX2ljayA9IHsKIAkubmFtZQkJPSAid2R0Ml9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9pY2sgPSB7CiAJLm5hbWUJCT0gIndkdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8xX2ljayA9IHsKIAkubmFtZQkJPSAiZ3BpbzFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBvbWFwXzMya3N5bmNfaWNrID0gewogCS5uYW1lCQk9ICJvbWFwXzMya3N5bmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fMzJLU1lOQ19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0yMzYxLDIwICsyMjYzLDIwIEBACiAvKiBYWFggVGhpcyBjbG9jayBubyBsb25nZXIgZXhpc3RzIGluIDM0MzAgVFJNIHJldiBGICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDEyX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CkBAIC0yMzg1LDQwNiArMjI4Nyw0MDQgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgcGVyXzk2bV9mY2sgPSB7CiAJLm5hbWUJCT0gInBlcl85Nm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrX2Nsa2RtLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8Ci0JCQkJUEFSRU5UX0NPTlRST0xTX0NMT0NLLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl80OG1fZmNrID0gewogCS5uYW1lCQk9ICJwZXJfNDhtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa19jbGtkbSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBSQVRFX1BST1BBR0FURVMgfAotCQkJCVBBUkVOVF9DT05UUk9MU19DTE9DSywKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CiAJLm5hbWUJCT0gInVhcnQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfNDhtX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfZmNrID0gewogCS5uYW1lCQk9ICJncHQyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQyX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDJfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfZmNrID0gewogCS5uYW1lCQk9ICJncHQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQzX1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDNfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfZmNrID0gewogCS5uYW1lCQk9ICJncHQ0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ0X1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDRfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfZmNrID0gewogCS5uYW1lCQk9ICJncHQ1X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ1X1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDVfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfZmNrID0gewogCS5uYW1lCQk9ICJncHQ2X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ2X1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDZfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfZmNrID0gewogCS5uYW1lCQk9ICJncHQ3X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ3X1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDdfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfZmNrID0gewogCS5uYW1lCQk9ICJncHQ4X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ4X1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDhfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfZmNrID0gewogCS5uYW1lCQk9ICJncHQ5X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ5X1NISUZULAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDlfTUFTSywKIAkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl8zMmtfYWx3b25fZmNrID0gewogCS5uYW1lCQk9ICJwZXJfMzJrX2Fsd29uX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnBhcmVudAkJPSAmb21hcF8zMmtfZmNrLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW82X2RiY2sgPSB7CiAJLm5hbWUJCT0gImdwaW82X2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU82X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvNV9kYmNrID0gewogCS5uYW1lCQk9ICJncGlvNV9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzRfZGJjayA9IHsKIAkubmFtZQkJPSAiZ3BpbzRfZGJjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzRfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8zX2RiY2sgPSB7CiAJLm5hbWUJCT0gImdwaW8zX2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8zX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvMl9kYmNrID0gewogCS5uYW1lCQk9ICJncGlvMl9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgd2R0M19mY2sgPSB7CiAJLm5hbWUJCT0gIndkdDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQzX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBwZXJfbDRfaWNrID0gewogCS5uYW1lCQk9ICJwZXJfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwKLQkJCQlQQVJFTlRfQ09OVFJPTFNfQ0xPQ0ssCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzZfaWNrID0gewogCS5uYW1lCQk9ICJncGlvNl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ljayA9IHsKIAkubmFtZQkJPSAiZ3BpbzVfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU81X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncGlvNF9pY2sgPSB7CiAJLm5hbWUJCT0gImdwaW80X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzNfaWNrID0gewogCS5uYW1lCQk9ICJncGlvM19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8yX2ljayA9IHsKIAkubmFtZQkJPSAiZ3BpbzJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8yX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ljayA9IHsKIAkubmFtZQkJPSAid2R0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0gewogCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfaWNrID0gewogCS5uYW1lCQk9ICJncHQ5X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ5X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0OF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUOF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDdfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDdfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfaWNrID0gewogCS5uYW1lCQk9ICJncHQ2X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ2X1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0NV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNV9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7CiAJLm5hbWUJCT0gImdwdDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDRfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfaWNrID0gewogCS5uYW1lCQk9ICJncHQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAogCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQzX1NISUZULAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCwKIAkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKIAkubmFtZQkJPSAiZ3B0Ml9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCiAJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKIAkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAogCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMl9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQM19TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3A0X2ljayA9IHsKIAkubmFtZQkJPSAibWNic3BfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSA0LAogCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKIAkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQNF9TSElGVCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbWNic3BfMjM0X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZwZXJfOTZtX2ZjaywgLnJhdGVzID0gY29tbW9uX21jYnNwXzk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZtY2JzcF9jbGtzLCAgLnJhdGVzID0gY29tbW9uX21jYnNwX21jYnNwX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmNvcmVfOTZtX2ZjaywgLnJhdGVzID0gY29tbW9uX21jYnNwXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZtY2JzcF9jbGtzLCAgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlcyB9LAogCXsgLnBhcmVudCA9IE5VTEwgfQogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ZjayA9IHsKIAkubmFtZQkJPSAibWNic3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAyLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKQEAgLTI3OTIsMTMgKzI2OTIsMTMgQEAKIAkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMl9DT05UUk9MX0RFVkNPTkYwKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDJfQ0xLU19NQVNLLAogCS5jbGtzZWwJCT0gbWNic3BfMjM0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKIAkubmFtZQkJPSAibWNic3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSAzLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKQEAgLTI4MDYsMTMgKzI3MDYsMTMgQEAKIAkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMzQzWF9DT05UUk9MX0RFVkNPTkYxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDNfQ0xLU19NQVNLLAogCS5jbGtzZWwJCT0gbWNic3BfMjM0X2Nsa3NlbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1gsCiAJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNic3A0X2ZjayA9IHsKIAkubmFtZQkJPSAibWNic3BfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAogCS5pZAkJPSA0LAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKQEAgLTI4MjAsNyArMjcyMCw2IEBACiAJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A0X0NMS1NfTUFTSywKIAkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CkBAIC0yODY0LDExICsyNzYzLDExIEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9zcmNfY2sgPSB7CiAJLm5hbWUJCT0gImVtdV9zcmNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVVYX0NUUkxfTUFTSywKIAkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CkBAIC0yODg4LDExICsyNzg3LDExIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBjbGtfZmNrID0gewogCS5uYW1lCQk9ICJwY2xrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKIAkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKIAkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfUENMS19NQVNLLAogCS5jbGtzZWwJCT0gcGNsa19lbXVfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CkBAIC0yOTExLDExICsyODEwLDExIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBjbGt4Ml9mY2sgPSB7CiAJLm5hbWUJCT0gInBjbGt4Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtYMl9NQVNLLAogCS5jbGtzZWwJCT0gcGNsa3gyX2VtdV9jbGtzZWwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTIHwgQUxXQVlTX0VOQUJMRUQsCiAJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogfTsKQEAgLTI5MjcsMjIgKzI4MjYsMjIgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgYXRjbGtfZmNrID0gewogCS5uYW1lCQk9ICJhdGNsa19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0FUQ0xLX01BU0ssCiAJLmNsa3NlbAkJPSBhdGNsa19lbXVfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRyYWNlY2xrX3NyY19mY2sgPSB7CiAJLm5hbWUJCT0gInRyYWNlY2xrX3NyY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCiAJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCiAJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfVFJBQ0VfTVVYX0NUUkxfTUFTSywKIAkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IFJBVEVfUFJPUEFHQVRFUyB8IEFMV0FZU19FTkFCTEVELAogCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CkBAIC0yOTYxLDExICsyODYwLDExIEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHRyYWNlY2xrX2ZjayA9IHsKIAkubmFtZQkJPSAidHJhY2VjbGtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAogCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAogCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9UUkFDRUNMS19NQVNLLAogCS5jbGtzZWwJCT0gdHJhY2VjbGtfY2xrc2VsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMzQzWCB8IEFMV0FZU19FTkFCTEVELAogCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIH07CkBAIC0yOTc1LDI3ICsyODc0LDI3IEBACiAvKiBTbWFydFJlZmxleCBmY2xrIChWREQxKSAqLwogc3RhdGljIHN0cnVjdCBjbGsgc3IxX2ZjayA9IHsKIAkubmFtZQkJPSAic3IxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TUjFfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiAvKiBTbWFydFJlZmxleCBmY2xrIChWREQyKSAqLwogc3RhdGljIHN0cnVjdCBjbGsgc3IyX2ZjayA9IHsKIAkubmFtZQkJPSAic3IyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKIAkucGFyZW50CQk9ICZzeXNfY2ssCiAJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCiAJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TUjJfU0hJRlQsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYIHwgUkFURV9QUk9QQUdBVEVTLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzcl9sNF9pY2sgPSB7CiAJLm5hbWUJCT0gInNyX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KIAkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVAzNDNYLAogCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwpAQCAtMzAwNSwyMzEgKzI5MDQsMTYgQEAKIC8qIFhYWCBUaGlzIGNsb2NrIG5vIGxvbmdlciBleGlzdHMgaW4gMzQzMCBUUk0gcmV2IEYgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKIAkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9mY2sgPSB7CiAJLm5hbWUJCT0gIndkdDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDM0M1ggfCBBTFdBWVNfRU5BQkxFRCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgKm9uY2hpcF8zNHh4X2Nsa3NbXSBfX2luaXRkYXRhID0gewotCSZvbWFwXzMya19mY2ssCi0JJnZpcnRfMTJtX2NrLAotCSZ2aXJ0XzEzbV9jaywKLQkmdmlydF8xNl84bV9jaywKLQkmdmlydF8xOV8ybV9jaywKLQkmdmlydF8yNm1fY2ssCi0JJnZpcnRfMzhfNG1fY2ssCi0JJm9zY19zeXNfY2ssCi0JJnN5c19jaywKLQkmc3lzX2FsdGNsaywKLQkmbWNic3BfY2xrcywKLQkmc3lzX2Nsa291dDEsCi0JJmRwbGwxX2NrLAotCSZkcGxsMV94Ml9jaywKLQkmZHBsbDFfeDJtMl9jaywKLQkmZHBsbDJfY2ssCi0JJmRwbGwyX20yX2NrLAotCSZkcGxsM19jaywKLQkmY29yZV9jaywKLQkmZHBsbDNfeDJfY2ssCi0JJmRwbGwzX20yX2NrLAotCSZkcGxsM19tMngyX2NrLAotCSZkcGxsM19tM19jaywKLQkmZHBsbDNfbTN4Ml9jaywKLQkmZW11X2NvcmVfYWx3b25fY2ssCi0JJmRwbGw0X2NrLAotCSZkcGxsNF94Ml9jaywKLQkmb21hcF85Nm1fYWx3b25fZmNrLAotCSZvbWFwXzk2bV9mY2ssCi0JJmNtXzk2bV9mY2ssCi0JJnZpcnRfb21hcF81NG1fZmNrLAotCSZvbWFwXzU0bV9mY2ssCi0JJm9tYXBfNDhtX2ZjaywKLQkmb21hcF8xMm1fZmNrLAotCSZkcGxsNF9tMl9jaywKLQkmZHBsbDRfbTJ4Ml9jaywKLQkmZHBsbDRfbTNfY2ssCi0JJmRwbGw0X20zeDJfY2ssCi0JJmRwbGw0X200X2NrLAotCSZkcGxsNF9tNHgyX2NrLAotCSZkcGxsNF9tNV9jaywKLQkmZHBsbDRfbTV4Ml9jaywKLQkmZHBsbDRfbTZfY2ssCi0JJmRwbGw0X202eDJfY2ssCi0JJmVtdV9wZXJfYWx3b25fY2ssCi0JJmRwbGw1X2NrLAotCSZkcGxsNV9tMl9jaywKLQkmb21hcF8xMjBtX2ZjaywKLQkmY2xrb3V0Ml9zcmNfY2ssCi0JJnN5c19jbGtvdXQyLAotCSZjb3JleDJfZmNrLAotCSZkcGxsMV9mY2ssCi0JJm1wdV9jaywKLQkmYXJtX2ZjaywKLQkmZW11X21wdV9hbHdvbl9jaywKLQkmZHBsbDJfZmNrLAotCSZpdmEyX2NrLAotCSZsM19pY2ssCi0JJmw0X2ljaywKLQkmcm1faWNrLAotCSZnZnhfbDNfY2ssCi0JJmdmeF9sM19mY2ssCi0JJmdmeF9sM19pY2ssCi0JJmdmeF9jZzFfY2ssCi0JJmdmeF9jZzJfY2ssCi0JJnNneF9mY2ssCi0JJnNneF9pY2ssCi0JJmQyZF8yNm1fZmNrLAotCSZncHQxMF9mY2ssCi0JJmdwdDExX2ZjaywKLQkmY3BlZnVzZV9mY2ssCi0JJnRzX2ZjaywKLQkmdXNidGxsX2ZjaywKLQkmY29yZV85Nm1fZmNrLAotCSZtbWNoczNfZmNrLAotCSZtbWNoczJfZmNrLAotCSZtc3Byb19mY2ssCi0JJm1tY2hzMV9mY2ssCi0JJmkyYzNfZmNrLAotCSZpMmMyX2ZjaywKLQkmaTJjMV9mY2ssCi0JJm1jYnNwNV9mY2ssCi0JJm1jYnNwMV9mY2ssCi0JJmNvcmVfNDhtX2ZjaywKLQkmbWNzcGk0X2ZjaywKLQkmbWNzcGkzX2ZjaywKLQkmbWNzcGkyX2ZjaywKLQkmbWNzcGkxX2ZjaywKLQkmdWFydDJfZmNrLAotCSZ1YXJ0MV9mY2ssCi0JJmZzaG9zdHVzYl9mY2ssCi0JJmNvcmVfMTJtX2ZjaywKLQkmaGRxX2ZjaywKLQkmc3NpX3Nzcl9mY2ssCi0JJnNzaV9zc3RfZmNrLAotCSZjb3JlX2wzX2ljaywKLQkmaHNvdGd1c2JfaWNrLAotCSZzZHJjX2ljaywKLQkmZ3BtY19mY2ssCi0JJnNlY3VyaXR5X2wzX2ljaywKLQkmcGthX2ljaywKLQkmY29yZV9sNF9pY2ssCi0JJnVzYnRsbF9pY2ssCi0JJm1tY2hzM19pY2ssCi0JJmljcl9pY2ssCi0JJmFlczJfaWNrLAotCSZzaGExMl9pY2ssCi0JJmRlczJfaWNrLAotCSZtbWNoczJfaWNrLAotCSZtbWNoczFfaWNrLAotCSZtc3Byb19pY2ssCi0JJmhkcV9pY2ssCi0JJm1jc3BpNF9pY2ssCi0JJm1jc3BpM19pY2ssCi0JJm1jc3BpMl9pY2ssCi0JJm1jc3BpMV9pY2ssCi0JJmkyYzNfaWNrLAotCSZpMmMyX2ljaywKLQkmaTJjMV9pY2ssCi0JJnVhcnQyX2ljaywKLQkmdWFydDFfaWNrLAotCSZncHQxMV9pY2ssCi0JJmdwdDEwX2ljaywKLQkmbWNic3A1X2ljaywKLQkmbWNic3AxX2ljaywKLQkmZmFjX2ljaywKLQkmbWFpbGJveGVzX2ljaywKLQkmb21hcGN0cmxfaWNrLAotCSZzc2lfbDRfaWNrLAotCSZzc2lfaWNrLAotCSZ1c2JfbDRfaWNrLAotCSZzZWN1cml0eV9sNF9pY2syLAotCSZhZXMxX2ljaywKLQkmcm5nX2ljaywKLQkmc2hhMTFfaWNrLAotCSZkZXMxX2ljaywKLQkmZHNzMV9hbHdvbl9mY2ssCi0JJmRzc190dl9mY2ssCi0JJmRzc185Nm1fZmNrLAotCSZkc3MyX2Fsd29uX2ZjaywKLQkmZHNzX2ljaywKLQkmY2FtX21jbGssCi0JJmNhbV9pY2ssCi0JJnVzYmhvc3RfMTIwbV9mY2ssCi0JJnVzYmhvc3RfNDhtX2ZjaywKLQkmdXNiaG9zdF9pY2ssCi0JJnVzYmhvc3Rfc2FyX2ZjaywKLQkmdXNpbV9mY2ssCi0JJmdwdDFfZmNrLAotCSZ3a3VwXzMya19mY2ssCi0JJmdwaW8xX2RiY2ssCi0JJndkdDJfZmNrLAotCSZ3a3VwX2w0X2ljaywKLQkmdXNpbV9pY2ssCi0JJndkdDJfaWNrLAotCSZ3ZHQxX2ljaywKLQkmZ3BpbzFfaWNrLAotCSZvbWFwXzMya3N5bmNfaWNrLAotCSZncHQxMl9pY2ssCi0JJmdwdDFfaWNrLAotCSZwZXJfOTZtX2ZjaywKLQkmcGVyXzQ4bV9mY2ssCi0JJnVhcnQzX2ZjaywKLQkmZ3B0Ml9mY2ssCi0JJmdwdDNfZmNrLAotCSZncHQ0X2ZjaywKLQkmZ3B0NV9mY2ssCi0JJmdwdDZfZmNrLAotCSZncHQ3X2ZjaywKLQkmZ3B0OF9mY2ssCi0JJmdwdDlfZmNrLAotCSZwZXJfMzJrX2Fsd29uX2ZjaywKLQkmZ3BpbzZfZGJjaywKLQkmZ3BpbzVfZGJjaywKLQkmZ3BpbzRfZGJjaywKLQkmZ3BpbzNfZGJjaywKLQkmZ3BpbzJfZGJjaywKLQkmd2R0M19mY2ssCi0JJnBlcl9sNF9pY2ssCi0JJmdwaW82X2ljaywKLQkmZ3BpbzVfaWNrLAotCSZncGlvNF9pY2ssCi0JJmdwaW8zX2ljaywKLQkmZ3BpbzJfaWNrLAotCSZ3ZHQzX2ljaywKLQkmdWFydDNfaWNrLAotCSZncHQ5X2ljaywKLQkmZ3B0OF9pY2ssCi0JJmdwdDdfaWNrLAotCSZncHQ2X2ljaywKLQkmZ3B0NV9pY2ssCi0JJmdwdDRfaWNrLAotCSZncHQzX2ljaywKLQkmZ3B0Ml9pY2ssCi0JJm1jYnNwMl9pY2ssCi0JJm1jYnNwM19pY2ssCi0JJm1jYnNwNF9pY2ssCi0JJm1jYnNwMl9mY2ssCi0JJm1jYnNwM19mY2ssCi0JJm1jYnNwNF9mY2ssCi0JJmVtdV9zcmNfY2ssCi0JJnBjbGtfZmNrLAotCSZwY2xreDJfZmNrLAotCSZhdGNsa19mY2ssCi0JJnRyYWNlY2xrX3NyY19mY2ssCi0JJnRyYWNlY2xrX2ZjaywKLQkmc3IxX2ZjaywKLQkmc3IyX2ZjaywKLQkmc3JfbDRfaWNrLAotCSZzZWN1cmVfMzJrX2ZjaywKLQkmZ3B0MTJfZmNrLAotCSZ3ZHQxX2ZjaywKLX07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCmluZGV4IDRjM2NlOWMuLjBlN2Q1MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIApAQCAtNzEsMTYgKzcyLDEzIEBACiAJaWYgKCFvbWFwX2NoaXBfaXMoYXV0b2RlcC0+b21hcF9jaGlwKSkKIAkJcmV0dXJuOwogCi0JcHdyZG0gPSBwd3JkbV9sb29rdXAoYXV0b2RlcC0+cHdyZG1fbmFtZSk7CisJcHdyZG0gPSBwd3JkbV9sb29rdXAoYXV0b2RlcC0+cHdyZG0ubmFtZSk7CiAJaWYgKCFwd3JkbSkgewotCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IF9hdXRvZGVwX2xvb2t1cDogcG93ZXJkb21haW4gJXMgIgotCQkJICJkb2VzIG5vdCBleGlzdFxuIiwgYXV0b2RlcC0+cHdyZG1fbmFtZSk7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybjsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogYXV0b2RlcHM6IHBvd2VyZG9tYWluICVzIGRvZXMgbm90IGV4aXN0XG4iLAorCQkJIGF1dG9kZXAtPnB3cmRtLm5hbWUpOworCQlwd3JkbSA9IEVSUl9QVFIoLUVOT0VOVCk7CiAJfQotCWF1dG9kZXAtPnB3cmRtID0gcHdyZG07Ci0KLQlyZXR1cm47CisJYXV0b2RlcC0+cHdyZG0ucHRyID0gcHdyZG07CiB9CiAKIC8qCkBAIC05NSwxNiArOTMsMTkgQEAKIHsKIAlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcDsKIAotCWZvciAoYXV0b2RlcCA9IGF1dG9kZXBzOyBhdXRvZGVwLT5wd3JkbV9uYW1lOyBhdXRvZGVwKyspIHsKLQkJaWYgKCFhdXRvZGVwLT5wd3JkbSkKKwlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG0ucHRyOyBhdXRvZGVwKyspIHsKKwkJaWYgKElTX0VSUihhdXRvZGVwLT5wd3JkbS5wdHIpKQorCQkJY29udGludWU7CisKKwkJaWYgKCFvbWFwX2NoaXBfaXMoYXV0b2RlcC0+b21hcF9jaGlwKSkKIAkJCWNvbnRpbnVlOwogCiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogYWRkaW5nICVzIHNsZWVwZGVwL3drZGVwIGZvciAiCi0JCQkgInB3cmRtICVzXG4iLCBhdXRvZGVwLT5wd3JkbV9uYW1lLAotCQkJIGNsa2RtLT5wd3JkbS0+bmFtZSk7CisJCQkgInB3cmRtICVzXG4iLCBhdXRvZGVwLT5wd3JkbS5wdHItPm5hbWUsCisJCQkgY2xrZG0tPnB3cmRtLnB0ci0+bmFtZSk7CiAKLQkJcHdyZG1fYWRkX3NsZWVwZGVwKGNsa2RtLT5wd3JkbSwgYXV0b2RlcC0+cHdyZG0pOwotCQlwd3JkbV9hZGRfd2tkZXAoY2xrZG0tPnB3cmRtLCBhdXRvZGVwLT5wd3JkbSk7CisJCXB3cmRtX2FkZF9zbGVlcGRlcChjbGtkbS0+cHdyZG0ucHRyLCBhdXRvZGVwLT5wd3JkbS5wdHIpOworCQlwd3JkbV9hZGRfd2tkZXAoY2xrZG0tPnB3cmRtLnB0ciwgYXV0b2RlcC0+cHdyZG0ucHRyKTsKIAl9CiB9CiAKQEAgLTEyMCwxNiArMTIxLDE5IEBACiB7CiAJc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmF1dG9kZXA7CiAKLQlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG1fbmFtZTsgYXV0b2RlcCsrKSB7Ci0JCWlmICghYXV0b2RlcC0+cHdyZG0pCisJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPnB3cmRtLnB0cjsgYXV0b2RlcCsrKSB7CisJCWlmIChJU19FUlIoYXV0b2RlcC0+cHdyZG0ucHRyKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghb21hcF9jaGlwX2lzKGF1dG9kZXAtPm9tYXBfY2hpcCkpCiAJCQljb250aW51ZTsKIAogCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IHJlbW92aW5nICVzIHNsZWVwZGVwL3drZGVwIGZvciAiCi0JCQkgInB3cmRtICVzXG4iLCBhdXRvZGVwLT5wd3JkbV9uYW1lLAotCQkJIGNsa2RtLT5wd3JkbS0+bmFtZSk7CisJCQkgInB3cmRtICVzXG4iLCBhdXRvZGVwLT5wd3JkbS5wdHItPm5hbWUsCisJCQkgY2xrZG0tPnB3cmRtLnB0ci0+bmFtZSk7CiAKLQkJcHdyZG1fZGVsX3NsZWVwZGVwKGNsa2RtLT5wd3JkbSwgYXV0b2RlcC0+cHdyZG0pOwotCQlwd3JkbV9kZWxfd2tkZXAoY2xrZG0tPnB3cmRtLCBhdXRvZGVwLT5wd3JkbSk7CisJCXB3cmRtX2RlbF9zbGVlcGRlcChjbGtkbS0+cHdyZG0ucHRyLCBhdXRvZGVwLT5wd3JkbS5wdHIpOworCQlwd3JkbV9kZWxfd2tkZXAoY2xrZG0tPnB3cmRtLnB0ciwgYXV0b2RlcC0+cHdyZG0ucHRyKTsKIAl9CiB9CiAKQEAgLTE3OSw3ICsxODMsNyBAQAogCiAJYXV0b2RlcHMgPSBpbml0X2F1dG9kZXBzOwogCWlmIChhdXRvZGVwcykKLQkJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPnB3cmRtX25hbWU7IGF1dG9kZXArKykKKwkJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPnB3cmRtLnB0cjsgYXV0b2RlcCsrKQogCQkJX2F1dG9kZXBfbG9va3VwKGF1dG9kZXApOwogfQogCkBAIC0yMDIsMjAgKzIwNiwyMCBAQAogCWlmICghb21hcF9jaGlwX2lzKGNsa2RtLT5vbWFwX2NoaXApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXB3cmRtID0gcHdyZG1fbG9va3VwKGNsa2RtLT5wd3JkbV9uYW1lKTsKKwlwd3JkbSA9IHB3cmRtX2xvb2t1cChjbGtkbS0+cHdyZG0ubmFtZSk7CiAJaWYgKCFwd3JkbSkgewotCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGNsa2RtX3JlZ2lzdGVyICVzOiBwb3dlcmRvbWFpbiAlcyAiCi0JCQkgImRvZXMgbm90IGV4aXN0XG4iLCBjbGtkbS0+bmFtZSwgY2xrZG0tPnB3cmRtX25hbWUpOworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlczogcG93ZXJkb21haW4gJXMgZG9lcyBub3QgZXhpc3RcbiIsCisJCQljbGtkbS0+bmFtZSwgY2xrZG0tPnB3cmRtLm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY2xrZG0tPnB3cmRtID0gcHdyZG07CisJY2xrZG0tPnB3cmRtLnB0ciA9IHB3cmRtOwogCiAJbXV0ZXhfbG9jaygmY2xrZG1fbXV0ZXgpOwogCS8qIFZlcmlmeSB0aGF0IHRoZSBjbG9ja2RvbWFpbiBpcyBub3QgYWxyZWFkeSByZWdpc3RlcmVkICovCiAJaWYgKF9jbGtkbV9sb29rdXAoY2xrZG0tPm5hbWUpKSB7CiAJCXJldCA9IC1FRVhJU1Q7CiAJCWdvdG8gY3JfdW5sb2NrOwotCX07CisJfQogCiAJbGlzdF9hZGQoJmNsa2RtLT5ub2RlLCAmY2xrZG1fbGlzdCk7CiAKQEAgLTI0Miw3ICsyNDYsNyBAQAogCWlmICghY2xrZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcHdyZG1fZGVsX2Nsa2RtKGNsa2RtLT5wd3JkbSwgY2xrZG0pOworCXB3cmRtX2RlbF9jbGtkbShjbGtkbS0+cHdyZG0ucHRyLCBjbGtkbSk7CiAKIAltdXRleF9sb2NrKCZjbGtkbV9tdXRleCk7CiAJbGlzdF9kZWwoJmNsa2RtLT5ub2RlKTsKQEAgLTMyNyw3ICszMzEsNyBAQAogCWlmICghY2xrZG0pCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIGNsa2RtLT5wd3JkbTsKKwlyZXR1cm4gY2xrZG0tPnB3cmRtLnB0cjsKIH0KIAogCkBAIC0zNDgsNyArMzUyLDcgQEAKIAlpZiAoIWNsa2RtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXYgPSBjbV9yZWFkX21vZF9yZWcoY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisJdiA9IGNtX3JlYWRfbW9kX3JlZyhjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CiAJdiAmPSBjbGtkbS0+Y2xrdHJjdHJsX21hc2s7CiAJdiA+Pj0gX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKIApAQCAtMzgwLDcgKzM4NCw3IEBACiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAKIAkJY21fc2V0X21vZF9yZWdfYml0cyhPTUFQMjRYWF9GT1JDRVNUQVRFLAotCQkJCSAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKIAogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIApAQCAtMzg4LDcgKzM5Miw3IEBACiAJCQkgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSk7CiAKIAkJY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssIHYsCi0JCQkJICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CiAKIAl9IGVsc2UgewogCQlCVUcoKTsKQEAgLTQyMiw3ICs0MjYsNyBAQAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCiAJCWNtX2NsZWFyX21vZF9yZWdfYml0cyhPTUFQMjRYWF9GT1JDRVNUQVRFLAotCQkJCSAgICAgIGNsa2RtLT5wd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisJCQkJICAgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CiAKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAKQEAgLTQzMCw3ICs0MzQsNyBAQAogCQkJIF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaykpOwogCiAJCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLCB2LAotCQkJCSAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKKwkJCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOwogCiAJfSBlbHNlIHsKIAkJQlVHKCk7CkBAIC00NzgsNyArNDgyLDcgQEAKIAogCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLAogCQkJICAgIHYgPDwgX19mZnMoY2xrZG0tPmNsa3RyY3RybF9tYXNrKSwKLQkJCSAgICBjbGtkbS0+cHdyZG0tPnByY21fb2ZmcywKKwkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCiAJCQkgICAgQ01fQ0xLU1RDVFJMKTsKIH0KIApAQCAtNTE2LDcgKzUyMCw3IEBACiAKIAljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywKIAkJCSAgICB2IDw8IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayksCi0JCQkgICAgY2xrZG0tPnB3cmRtLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisJCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOwogCiAJaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKIAkJX2Nsa2RtX2RlbF9hdXRvZGVwcyhjbGtkbSk7CkBAIC01NjcsNiArNTcxLDggQEAKIAllbHNlCiAJCW9tYXAyX2Nsa2RtX3dha2V1cChjbGtkbSk7CiAKKwlwd3JkbV93YWl0X3RyYW5zaXRpb24oY2xrZG0tPnB3cmRtLnB0cik7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zLmgKaW5kZXggY2Q4NmRjYy4uMjgxZDVkYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oCkBAIC0xNCwxMiArMTQsMjkgQEAKIAogLyoKICAqIE9NQVAyLzMtY29tbW9uIGNsb2NrZG9tYWlucworICoKKyAqIEV2ZW4gdGhvdWdoIHRoZSAyNDIwIGhhcyBhIHNpbmdsZSBQUkNNIG1vZHVsZSBmcm9tIHRoZQorICogaW50ZXJjb25uZWN0J3MgcGVyc3BlY3RpdmUsIGludGVybmFsbHkgaXQgZG9lcyBhcHBlYXIgdG8gaGF2ZQorICogc2VwYXJhdGUgUFJNIGFuZCBDTSBjbG9ja2RvbWFpbnMuICBUaGUgdXN1YWwgdGVzdCBjYXNlIGlzCisgKiBzeXNfY2xrb3V0L3N5c19jbGtvdXQyLgogICovCiAKIC8qIFRoaXMgaXMgYW4gaW1wbGljaXQgY2xvY2tkb21haW4gLSBpdCBpcyBuZXZlciBkZWZpbmVkIGFzIHN1Y2ggaW4gVFJNICovCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIHdrdXBfY2xrZG0gPSB7CiAJLm5hbWUJCT0gIndrdXBfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gIndrdXBfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gIndrdXBfcHdyZG0iIH0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfCBDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gcHJtX2Nsa2RtID0geworCS5uYW1lCQk9ICJwcm1fY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gIndrdXBfcHdyZG0iIH0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFggfCBDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY21fY2xrZG0gPSB7CisJLm5hbWUJCT0gImNtX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCkBAIC0zMSw3ICs0OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzI0MjBfY2xrZG0gPSB7CiAJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAibXB1X3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJtcHVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfTVBVX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLApAQCAtMzksNyArNTYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGl2YTFfMjQyMF9jbGtkbSA9IHsKIAkubmFtZQkJPSAiaXZhMV9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiZHNwX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJkc3BfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjQyMF9BVVRPU1RBVEVfSVZBX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLApAQCAtNTYsNyArNzMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdV8yNDMwX2Nsa2RtID0gewogCS5uYW1lCQk9ICJtcHVfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gIm1wdV9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX01QVV9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKQEAgLTY0LDcgKzgxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtZG1fY2xrZG0gPSB7CiAJLm5hbWUJCT0gIm1kbV9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAibWRtX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJtZG1fcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjQzMF9BVVRPU1RBVEVfTURNX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLApAQCAtODEsNyArOTgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzcF9jbGtkbSA9IHsKIAkubmFtZQkJPSAiZHNwX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJkc3BfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9EU1BfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCkBAIC04OSw3ICsxMDYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGdmeF8yNHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJnZnhfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImdmeF9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZ2Z4X3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0dGWF9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKQEAgLTk3LDcgKzExNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sM18yNHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0wzX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLApAQCAtMTA1LDcgKzEyMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8yNHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJjb3JlX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0w0X01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLApAQCAtMTEzLDcgKzEzMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNzXzI0eHhfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImRzc19jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiY29yZV9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9EU1NfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCkBAIC0xMzAsNyArMTQ3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtcHVfMzR4eF9jbGtkbSA9IHsKIAkubmFtZQkJPSAibXB1X2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJtcHVfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gIm1wdV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQIHwgQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTVBVX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLApAQCAtMTM4LDcgKzE1NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbmVvbl9jbGtkbSA9IHsKIAkubmFtZQkJPSAibmVvbl9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAibmVvbl9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAibmVvbl9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9ORU9OX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLApAQCAtMTQ2LDcgKzE2Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gaXZhMl9jbGtkbSA9IHsKIAkubmFtZQkJPSAiaXZhMl9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiaXZhMl9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiaXZhMl9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9JVkEyX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLApAQCAtMTU0LDcgKzE3MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZ2Z4XzM0MzBlczFfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImdmeF9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiZ2Z4X3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMV9DTEtUUkNUUkxfR0ZYX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzEpLApAQCAtMTYyLDEwICsxNzksMTAgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBzZ3hfY2xrZG0gPSB7CiAJLm5hbWUJCT0gInNneF9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAic2d4X3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJzZ3hfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMEVTMl9DTEtUUkNUUkxfU0dYX01BU0ssCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzIpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKIH07CiAKIC8qCkBAIC0xNzcsNyArMTk0LDcgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkMmRfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImQyZF9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiY29yZV9wd3JkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9EMkRfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0xODUsNyArMjAyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2wzXzM0eHhfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImNvcmVfbDNfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTDNfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0xOTMsNyArMjEwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2w0XzM0eHhfY2xrZG0gPSB7CiAJLm5hbWUJCT0gImNvcmVfbDRfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImNvcmVfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTDRfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0yMDEsNyArMjE4LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3NfMzR4eF9jbGtkbSA9IHsKIAkubmFtZQkJPSAiZHNzX2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJkc3NfcHdyZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzc19wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9EU1NfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCkBAIC0yMDksNyArMjI2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjYW1fY2xrZG0gPSB7CiAJLm5hbWUJCT0gImNhbV9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAiY2FtX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjYW1fcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfQ0FNX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLApAQCAtMjE3LDI4ICsyMzQsNjIgQEAKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiB1c2Job3N0X2Nsa2RtID0gewogCS5uYW1lCQk9ICJ1c2Job3N0X2Nsa2RtIiwKLQkucHdyZG1fbmFtZQk9ICJ1c2Job3N0X3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJ1c2Job3N0X3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBFUzJfQ0xLVFJDVFJMX1VTQkhPU1RfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMiksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBwZXJfY2xrZG0gPSB7CiAJLm5hbWUJCT0gInBlcl9jbGtkbSIsCi0JLnB3cmRtX25hbWUJPSAicGVyX3B3cmRtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJwZXJfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfUEVSX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAogfTsKIAorLyoKKyAqIERpc2FibGUgaHcgc3VwZXJ2aXNlZCBtb2RlIGZvciBlbXVfY2xrZG0sIGJlY2F1c2UgZW11X3B3cmRtIGlzCisgKiBzd2l0Y2hlZCBvZiBldmVuIGlmIHNkdGkgaXMgaW4gdXNlCisgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZW11X2Nsa2RtID0gewogCS5uYW1lCQk9ICJlbXVfY2xrZG0iLAotCS5wd3JkbV9uYW1lCT0gImVtdV9wd3JkbSIsCi0JLmZsYWdzCQk9IENMS0RNX0NBTl9FTkFCTEVfQVVUTyB8IENMS0RNX0NBTl9TV1NVUCwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJlbXVfcHdyZG0iIH0sCisJLmZsYWdzCQk9IC8qIENMS0RNX0NBTl9FTkFCTEVfQVVUTyB8ICAqL0NMS0RNX0NBTl9TV1NVUCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfRU1VX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAogfTsKIAorc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkcGxsMV9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDFfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRwbGwxX3B3cmRtIiB9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHBsbDJfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRwbGwyX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJkcGxsMl9wd3JkbSIgfSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRwbGwzX2Nsa2RtID0geworCS5uYW1lCQk9ICJkcGxsM19jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZHBsbDNfcHdyZG0iIH0sCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkcGxsNF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDRfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRwbGw0X3B3cmRtIiB9LAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHBsbDVfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRwbGw1X2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJkcGxsNV9wd3JkbSIgfSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTMiksCit9OworCiAjZW5kaWYgICAvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLwogCiAvKgpAQCAtMjQ3LDE0ICsyOTgsMTYgQEAKIAogc3RhdGljIHN0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwIGNsa2RtX3B3cmRtX2F1dG9kZXBzW10gPSB7CiAJewotCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAorCQkucHdyZG0JICAgPSB7IC5uYW1lID0gIm1wdV9wd3JkbSIgfSwKIAkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCiAJfSwKIAl7Ci0JCS5wd3JkbV9uYW1lID0gIml2YTJfcHdyZG0iLAorCQkucHdyZG0JICAgPSB7IC5uYW1lID0gIml2YTJfcHdyZG0iIH0sCiAJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQogCX0sCi0JeyBOVUxMIH0KKwl7CisJCS5wd3JkbQkgICA9IHsgLm5hbWUgPSBOVUxMIH0sCisJfQogfTsKIAogLyoKQEAgLTI2NCw2ICszMTcsOCBAQAogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xvY2tkb21haW5zX29tYXBbXSA9IHsKIAogCSZ3a3VwX2Nsa2RtLAorCSZjbV9jbGtkbSwKKwkmcHJtX2Nsa2RtLAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKIAkmbXB1XzI0MjBfY2xrZG0sCkBAIC0yOTcsNiArMzUyLDExIEBACiAJJnVzYmhvc3RfY2xrZG0sCiAJJnBlcl9jbGtkbSwKIAkmZW11X2Nsa2RtLAorCSZkcGxsMV9jbGtkbSwKKwkmZHBsbDJfY2xrZG0sCisJJmRwbGwzX2Nsa2RtLAorCSZkcGxsNF9jbGtkbSwKKwkmZHBsbDVfY2xrZG0sCiAjZW5kaWYKIAogCU5VTEwsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMjR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTI0eHguaAppbmRleCAxMDk4ZWNmLi4yOTdhMmZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMjR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0yNHh4LmgKQEAgLTExMCwzNSArMTEwLDU2IEBACiAjZGVmaW5lIE9NQVAyNFhYX0VOX0RFUwkJCQkJKDEgPDwgMCkKIAogLyogQ01fSURMRVNUMV9DT1JFIHNwZWNpZmljIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0WFhfU1RfTUFJTEJPWEVTCQkJCSgxIDw8IDMwKQotI2RlZmluZSBPTUFQMjRYWF9TVF9XRFQ0CQkJCSgxIDw8IDI5KQotI2RlZmluZSBPTUFQMjQyMF9TVF9XRFQzCQkJCSgxIDw8IDI4KQotI2RlZmluZSBPTUFQMjRYWF9TVF9NU1BSTwkJCQkoMSA8PCAyNykKLSNkZWZpbmUgT01BUDI0WFhfU1RfRkFDCQkJCQkoMSA8PCAyNSkKLSNkZWZpbmUgT01BUDI0MjBfU1RfRUFDCQkJCQkoMSA8PCAyNCkKLSNkZWZpbmUgT01BUDI0WFhfU1RfSERRCQkJCQkoMSA8PCAyMykKLSNkZWZpbmUgT01BUDI0WFhfU1RfSTJDMgkJCQkoMSA8PCAyMCkKLSNkZWZpbmUgT01BUDI0WFhfU1RfSTJDMQkJCQkoMSA8PCAxOSkKLSNkZWZpbmUgT01BUDI0WFhfU1RfTUNCU1AyCQkJCSgxIDw8IDE2KQotI2RlZmluZSBPTUFQMjRYWF9TVF9NQ0JTUDEJCQkJKDEgPDwgMTUpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0RTUwkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUFJTEJPWEVTX1NISUZUCQkJMzAKKyNkZWZpbmUgT01BUDI0WFhfU1RfTUFJTEJPWEVTX01BU0sJCQkoMSA8PCAzMCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfV0RUNF9TSElGVAkJCQkyOQorI2RlZmluZSBPTUFQMjRYWF9TVF9XRFQ0X01BU0sJCQkJKDEgPDwgMjkpCisjZGVmaW5lIE9NQVAyNDIwX1NUX1dEVDNfU0hJRlQJCQkJMjgKKyNkZWZpbmUgT01BUDI0MjBfU1RfV0RUM19NQVNLCQkJCSgxIDw8IDI4KQorI2RlZmluZSBPTUFQMjRYWF9TVF9NU1BST19TSElGVAkJCQkyNworI2RlZmluZSBPTUFQMjRYWF9TVF9NU1BST19NQVNLCQkJCSgxIDw8IDI3KQorI2RlZmluZSBPTUFQMjRYWF9TVF9GQUNfU0hJRlQJCQkJMjUKKyNkZWZpbmUgT01BUDI0WFhfU1RfRkFDX01BU0sJCQkJKDEgPDwgMjUpCisjZGVmaW5lIE9NQVAyNDIwX1NUX0VBQ19TSElGVAkJCQkyNAorI2RlZmluZSBPTUFQMjQyMF9TVF9FQUNfTUFTSwkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfSERRX1NISUZUCQkJCTIzCisjZGVmaW5lIE9NQVAyNFhYX1NUX0hEUV9NQVNLCQkJCSgxIDw8IDIzKQorI2RlZmluZSBPTUFQMjQyMF9TVF9JMkMyX1NISUZUCQkJCTIwCisjZGVmaW5lIE9NQVAyNDIwX1NUX0kyQzJfTUFTSwkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDI0MjBfU1RfSTJDMV9TSElGVAkJCQkxOQorI2RlZmluZSBPTUFQMjQyMF9TVF9JMkMxX01BU0sJCQkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMl9TSElGVAkJCTE2CisjZGVmaW5lIE9NQVAyNFhYX1NUX01DQlNQMl9NQVNLCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQMjRYWF9TVF9NQ0JTUDFfU0hJRlQJCQkxNQorI2RlZmluZSBPTUFQMjRYWF9TVF9NQ0JTUDFfTUFTSwkJCQkoMSA8PCAxNSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfRFNTX1NISUZUCQkJCTAKKyNkZWZpbmUgT01BUDI0WFhfU1RfRFNTX01BU0sJCQkJKDEgPDwgMCkKIAogLyogQ01fSURMRVNUMl9DT1JFICovCi0jZGVmaW5lIE9NQVAyNDMwX1NUX01DQlNQNQkJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMjQzMF9TVF9NQ0JTUDQJCQkJKDEgPDwgNCkKLSNkZWZpbmUgT01BUDI0MzBfU1RfTUNCU1AzCQkJCSgxIDw8IDMpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX1NTSQkJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDI0MzBfU1RfTUNCU1A1X1NISUZUCQkJNQorI2RlZmluZSBPTUFQMjQzMF9TVF9NQ0JTUDVfTUFTSwkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMjQzMF9TVF9NQ0JTUDRfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQMjQzMF9TVF9NQ0JTUDRfTUFTSwkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMjQzMF9TVF9NQ0JTUDNfU0hJRlQJCQkJMworI2RlZmluZSBPTUFQMjQzMF9TVF9NQ0JTUDNfTUFTSwkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMjRYWF9TVF9TU0lfU0hJRlQJCQkJMQorI2RlZmluZSBPTUFQMjRYWF9TVF9TU0lfTUFTSwkJCQkoMSA8PCAxKQogCiAvKiBDTV9JRExFU1QzX0NPUkUgKi8KIC8qIDI0MzAgb25seSAqLwotI2RlZmluZSBPTUFQMjQzMF9TVF9TRFJDCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAyNDMwX1NUX1NEUkNfTUFTSwkJCQkoMSA8PCAyKQogCiAvKiBDTV9JRExFU1Q0X0NPUkUgKi8KLSNkZWZpbmUgT01BUDI0WFhfU1RfUEtBCQkJCQkoMSA8PCA0KQotI2RlZmluZSBPTUFQMjRYWF9TVF9BRVMJCQkJCSgxIDw8IDMpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX1JORwkJCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDI0WFhfU1RfU0hBCQkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMjRYWF9TVF9ERVMJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAyNFhYX1NUX1BLQV9TSElGVAkJCQk0CisjZGVmaW5lIE9NQVAyNFhYX1NUX1BLQV9NQVNLCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0FFU19TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAyNFhYX1NUX0FFU19NQVNLCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1JOR19TSElGVAkJCQkyCisjZGVmaW5lIE9NQVAyNFhYX1NUX1JOR19NQVNLCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1NIQV9TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAyNFhYX1NUX1NIQV9NQVNLCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0RFU19TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAyNFhYX1NUX0RFU19NQVNLCQkJCSgxIDw8IDApCiAKIC8qIENNX0FVVE9JRExFMV9DT1JFICovCiAjZGVmaW5lIE9NQVAyNFhYX0FVVE9fQ0FNCQkJCSgxIDw8IDMxKQpAQCAtMjc1LDExICsyOTYsMTYgQEAKICNkZWZpbmUgT01BUDI0WFhfRU5fMzJLU1lOQwkJCQkoMSA8PCAxKQogCiAvKiBDTV9JRExFU1RfV0tVUCBzcGVjaWZpYyBiaXRzICovCi0jZGVmaW5lIE9NQVAyNDMwX1NUX0lDUgkJCQkJKDEgPDwgNikKLSNkZWZpbmUgT01BUDI0WFhfU1RfT01BUENUUkwJCQkJKDEgPDwgNSkKLSNkZWZpbmUgT01BUDI0WFhfU1RfV0RUMQkJCQkoMSA8PCA0KQotI2RlZmluZSBPTUFQMjRYWF9TVF9NUFVfV0RUCQkJCSgxIDw8IDMpCi0jZGVmaW5lIE9NQVAyNFhYX1NUXzMyS1NZTkMJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDI0MzBfU1RfSUNSX1NISUZUCQkJCTYKKyNkZWZpbmUgT01BUDI0MzBfU1RfSUNSX01BU0sJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDI0WFhfU1RfT01BUENUUkxfU0hJRlQJCQk1CisjZGVmaW5lIE9NQVAyNFhYX1NUX09NQVBDVFJMX01BU0sJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMjRYWF9TVF9XRFQxX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUDI0WFhfU1RfV0RUMV9NQVNLCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAyNFhYX1NUX01QVV9XRFRfU0hJRlQJCQkzCisjZGVmaW5lIE9NQVAyNFhYX1NUX01QVV9XRFRfTUFTSwkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAyNFhYX1NUXzMyS1NZTkNfU0hJRlQJCQkxCisjZGVmaW5lIE9NQVAyNFhYX1NUXzMyS1NZTkNfTUFTSwkJCSgxIDw8IDEpCiAKIC8qIENNX0FVVE9JRExFX1dLVVAgKi8KICNkZWZpbmUgT01BUDI0WFhfQVVUT19PTUFQQ1RSTAkJCQkoMSA8PCA1KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKaW5kZXggMjE5ZjVjOC4uNmYzZjVhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oCkBAIC0xODMsMzEgKzE4Myw1OCBAQAogI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9DUEVGVVNFX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9JRExFU1QxX0NPUkUgc3BlY2lmaWMgYml0cyAqLwotI2RlZmluZSBPTUFQMzQzMF9TVF9JQ1IJCQkJCSgxIDw8IDI5KQotI2RlZmluZSBPTUFQMzQzMF9TVF9BRVMyCQkJCSgxIDw8IDI4KQotI2RlZmluZSBPTUFQMzQzMF9TVF9TSEExMgkJCQkoMSA8PCAyNykKLSNkZWZpbmUgT01BUDM0MzBfU1RfREVTMgkJCQkoMSA8PCAyNikKLSNkZWZpbmUgT01BUDM0MzBfU1RfTVNQUk8JCQkJKDEgPDwgMjMpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0hEUQkJCQkJKDEgPDwgMjIpCi0jZGVmaW5lIE9NQVAzNDMwRVMxX1NUX0ZBQwkJCQkoMSA8PCA4KQotI2RlZmluZSBPTUFQMzQzMEVTMV9TVF9NQUlMQk9YRVMJCQkoMSA8PCA3KQotI2RlZmluZSBPTUFQMzQzMF9TVF9PTUFQQ1RSTAkJCQkoMSA8PCA2KQotI2RlZmluZSBPTUFQMzQzMF9TVF9TRE1BCQkJCSgxIDw8IDIpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1NEUkMJCQkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfU1NJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9NTUMzX1NISUZUCQkJMzAKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfTU1DM19NQVNLCQkJKDEgPDwgMzApCisjZGVmaW5lIE9NQVAzNDMwX1NUX0lDUl9TSElGVAkJCQkyOQorI2RlZmluZSBPTUFQMzQzMF9TVF9JQ1JfTUFTSwkJCQkoMSA8PCAyOSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfQUVTMl9TSElGVAkJCQkyOAorI2RlZmluZSBPTUFQMzQzMF9TVF9BRVMyX01BU0sJCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NIQTEyX1NISUZUCQkJCTI3CisjZGVmaW5lIE9NQVAzNDMwX1NUX1NIQTEyX01BU0sJCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0RFUzJfU0hJRlQJCQkJMjYKKyNkZWZpbmUgT01BUDM0MzBfU1RfREVTMl9NQVNLCQkJCSgxIDw8IDI2KQorI2RlZmluZSBPTUFQMzQzMF9TVF9NU1BST19TSElGVAkJCQkyMworI2RlZmluZSBPTUFQMzQzMF9TVF9NU1BST19NQVNLCQkJCSgxIDw8IDIzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9IRFFfU0hJRlQJCQkJMjIKKyNkZWZpbmUgT01BUDM0MzBfU1RfSERRX01BU0sJCQkJKDEgPDwgMjIpCisjZGVmaW5lIE9NQVAzNDMwRVMxX1NUX0ZBQ19TSElGVAkJCTgKKyNkZWZpbmUgT01BUDM0MzBFUzFfU1RfRkFDX01BU0sJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfU1NJX0lETEVfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX1NTSV9JRExFX01BU0sJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQUlMQk9YRVNfU0hJRlQJCQk3CisjZGVmaW5lIE9NQVAzNDMwX1NUX01BSUxCT1hFU19NQVNLCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDM0MzBfU1RfT01BUENUUkxfU0hJRlQJCQk2CisjZGVmaW5lIE9NQVAzNDMwX1NUX09NQVBDVFJMX01BU0sJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMzQzMF9TVF9TRE1BX1NISUZUCQkJCTIKKyNkZWZpbmUgT01BUDM0MzBfU1RfU0RNQV9NQVNLCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NEUkNfU0hJRlQJCQkJMQorI2RlZmluZSBPTUFQMzQzMF9TVF9TRFJDX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfU1NJX1NUREJZX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9TVF9TU0lfU1REQllfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0lETEVTVDJfQ09SRSAqLwotI2RlZmluZSBPTUFQMzQzMF9TVF9QS0EJCQkJCSgxIDw8IDQpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0FFUzEJCQkJKDEgPDwgMykKLSNkZWZpbmUgT01BUDM0MzBfU1RfUk5HCQkJCQkoMSA8PCAyKQotI2RlZmluZSBPTUFQMzQzMF9TVF9TSEExMQkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMzQzMF9TVF9ERVMxCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX1NUX1BLQV9TSElGVAkJCQk0CisjZGVmaW5lIE9NQVAzNDMwX1NUX1BLQV9NQVNLCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0FFUzFfU0hJRlQJCQkJMworI2RlZmluZSBPTUFQMzQzMF9TVF9BRVMxX01BU0sJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDM0MzBfU1RfUk5HX1NISUZUCQkJCTIKKyNkZWZpbmUgT01BUDM0MzBfU1RfUk5HX01BU0sJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBfU1RfU0hBMTFfU0hJRlQJCQkJMQorI2RlZmluZSBPTUFQMzQzMF9TVF9TSEExMV9NQVNLCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0RFUzFfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMzQzMF9TVF9ERVMxX01BU0sJCQkJKDEgPDwgMCkKIAogLyogQ01fSURMRVNUM19DT1JFICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX1VTQlRMTF9TSElGVAkJCTIKICNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNCVExMX01BU0sJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9DUEVGVVNFX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9DUEVGVVNFX01BU0sJCQkoMSA8PCAwKQogCiAvKiBDTV9BVVRPSURMRTFfQ09SRSAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9BVVRPX01NQzMJCQkJKDEgPDwgMzApCisjZGVmaW5lIE9NQVAzNDMwRVMyX0FVVE9fTU1DM19TSElGVAkJCTMwCisjZGVmaW5lIE9NQVAzNDMwRVMyX0FVVE9fSUNSCQkJCSgxIDw8IDI5KQorI2RlZmluZSBPTUFQMzQzMEVTMl9BVVRPX0lDUl9TSElGVAkJCTI5CiAjZGVmaW5lIE9NQVAzNDMwX0FVVE9fQUVTMgkJCQkoMSA8PCAyOCkKICNkZWZpbmUgT01BUDM0MzBfQVVUT19BRVMyX1NISUZUCQkJMjgKICNkZWZpbmUgT01BUDM0MzBfQVVUT19TSEExMgkJCQkoMSA8PCAyNykKQEAgLTI3Niw2ICszMDMsOSBAQAogI2RlZmluZSBPTUFQMzQzMF9BVVRPX0RFUzFfU0hJRlQJCQkwCiAKIC8qIENNX0FVVE9JRExFM19DT1JFICovCisjZGVmaW5lCU9NQVAzNDMwRVMyX0FVVE9fVVNCSE9TVAkJCSgxIDw8IDApCisjZGVmaW5lCU9NQVAzNDMwRVMyX0FVVE9fVVNCSE9TVF9TSElGVAkJCTAKKyNkZWZpbmUJT01BUDM0MzBFUzJfQVVUT19VU0JUTEwJCQkJKDEgPDwgMikKICNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19VU0JUTExfU0hJRlQJCQkyCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0FVVE9fVVNCVExMX01BU0sJCQkoMSA8PCAyKQogCkBAIC0zMzIsOCArMzYyLDEyIEBACiAjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS0FDVElWSVRZX0dGWF9NQVNLCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fU0dYICovCi0jZGVmaW5lIE9NQVAzNDMwRVMyX0VOX1NHWF9TSElGVAkJCTEKLSNkZWZpbmUgT01BUDM0MzBFUzJfRU5fU0dYX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBFUzJfQ01fRkNMS0VOX1NHWF9FTl9TR1hfU0hJRlQJCTEKKyNkZWZpbmUgT01BUDM0MzBFUzJfQ01fRkNMS0VOX1NHWF9FTl9TR1hfTUFTSwkJKDEgPDwgMSkKKworLyogQ01fSUNMS0VOX1NHWCAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9JQ0xLRU5fU0dYX0VOX1NHWF9TSElGVAkJMAorI2RlZmluZSBPTUFQMzQzMEVTMl9DTV9JQ0xLRU5fU0dYX0VOX1NHWF9NQVNLCQkoMSA8PCAwKQogCiAvKiBDTV9DTEtTRUxfU0dYICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0NMS1NFTF9TR1hfU0hJRlQJCQkwCkBAIC0zNDksNiArMzgzLDcgQEAKIAogLyogQ01fRkNMS0VOX1dLVVAgc3BlY2lmaWMgYml0cyAqLwogI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9VU0lNT0NQX1NISUZUCQkJOQorI2RlZmluZSBPTUFQMzQzMEVTMl9FTl9VU0lNT0NQX01BU0sJCQkoMSA8PCA5KQogCiAvKiBDTV9JQ0xLRU5fV0tVUCBzcGVjaWZpYyBiaXRzICovCiAjZGVmaW5lIE9NQVAzNDMwX0VOX1dEVDEJCQkJKDEgPDwgNCkKQEAgLTM1NywxMSArMzkyLDE4IEBACiAjZGVmaW5lIE9NQVAzNDMwX0VOXzMyS1NZTkNfU0hJRlQJCQkyCiAKIC8qIENNX0lETEVTVF9XS1VQIHNwZWNpZmljIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfU1RfV0RUMgkJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMzQzMF9TVF9XRFQxCQkJCSgxIDw8IDQpCi0jZGVmaW5lIE9NQVAzNDMwX1NUXzMyS1NZTkMJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNJTU9DUF9TSElGVAkJCTkKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNJTU9DUF9NQVNLCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfV0RUMl9TSElGVAkJCQk1CisjZGVmaW5lIE9NQVAzNDMwX1NUX1dEVDJfTUFTSwkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMF9TVF9XRFQxX1NISUZUCQkJCTQKKyNkZWZpbmUgT01BUDM0MzBfU1RfV0RUMV9NQVNLCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAzNDMwX1NUXzMyS1NZTkNfU0hJRlQJCQkyCisjZGVmaW5lIE9NQVAzNDMwX1NUXzMyS1NZTkNfTUFTSwkJCSgxIDw8IDIpCiAKIC8qIENNX0FVVE9JRExFX1dLVVAgKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfQVVUT19VU0lNT0NQCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAzNDMwRVMyX0FVVE9fVVNJTU9DUF9TSElGVAkJCTkKICNkZWZpbmUgT01BUDM0MzBfQVVUT19XRFQyCQkJCSgxIDw8IDUpCiAjZGVmaW5lIE9NQVAzNDMwX0FVVE9fV0RUMl9TSElGVAkJCTUKICNkZWZpbmUgT01BUDM0MzBfQVVUT19XRFQxCQkJCSgxIDw8IDQpCkBAIC00MjYsNiArNDY4LDggQEAKICNkZWZpbmUgT01BUDM0MzBfU1RfQ09SRV9DTEtfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0lETEVTVDJfQ0tHRU4gKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNJTV9DTEtfU0hJRlQJCQkyCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX1VTSU1fQ0xLX01BU0sJCQkoMSA8PCAyKQogI2RlZmluZSBPTUFQMzQzMEVTMl9TVF8xMjBNX0NMS19TSElGVAkJCTEKICNkZWZpbmUgT01BUDM0MzBFUzJfU1RfMTIwTV9DTEtfTUFTSwkJCSgxIDw8IDEpCiAjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX1BFUklQSDJfQ0xLX1NISUZUCQkwCkBAIC00NDksOCArNDkzLDEyIEBACiAjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9NVUxUX01BU0sJCQkoMHg3ZmYgPDwgMTYpCiAjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9ESVZfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVAzNDMwX0NPUkVfRFBMTF9ESVZfTUFTSwkJCSgweDdmIDw8IDgpCi0jZGVmaW5lIE9NQVAzNDMwX1NPVVJDRV81NE0JCQkJKDEgPDwgNSkKLSNkZWZpbmUgT01BUDM0MzBfU09VUkNFXzQ4TQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9TT1VSQ0VfOTZNX1NISUZUCQkJNgorI2RlZmluZSBPTUFQMzQzMF9TT1VSQ0VfOTZNX01BU0sJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMzQzMF9TT1VSQ0VfNTRNX1NISUZUCQkJNQorI2RlZmluZSBPTUFQMzQzMF9TT1VSQ0VfNTRNX01BU0sJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMF9TT1VSQ0VfNDhNX1NISUZUCQkJMworI2RlZmluZSBPTUFQMzQzMF9TT1VSQ0VfNDhNX01BU0sJCQkoMSA8PCAzKQogCiAvKiBDTV9DTEtTRUwyX1BMTCAqLwogI2RlZmluZSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9NVUxUX1NISUZUCQkJOApAQCAtNDkzLDcgKzU0MSwxMiBAQAogI2RlZmluZSBPTUFQMzQzMF9DTV9JQ0xLRU5fRFNTX0VOX0RTU19TSElGVAkJMAogCiAvKiBDTV9JRExFU1RfRFNTICovCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0RTUwkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfRFNTX0lETEVfU0hJRlQJCQkxCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX0RTU19JRExFX01BU0sJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9EU1NfU1REQllfU0hJRlQJCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX0RTU19TVERCWV9NQVNLCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDM0MzBFUzFfU1RfRFNTX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMEVTMV9TVF9EU1NfTUFTSwkJCQkoMSA8PCAwKQogCiAvKiBDTV9BVVRPSURMRV9EU1MgKi8KICNkZWZpbmUgT01BUDM0MzBfQVVUT19EU1MJCQkJKDEgPDwgMCkKQEAgLTUxNiw2ICs1NjksOCBAQAogI2RlZmluZSBPTUFQMzQzMF9DTEtBQ1RJVklUWV9EU1NfTUFTSwkJCSgxIDw8IDApCiAKIC8qIENNX0ZDTEtFTl9DQU0gc3BlY2lmaWMgYml0cyAqLworI2RlZmluZSBPTUFQMzQzMF9FTl9DU0kyCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVAzNDMwX0VOX0NTSTJfU0hJRlQJCQkJMQogCiAvKiBDTV9JQ0xLRU5fQ0FNIHNwZWNpZmljIGJpdHMgKi8KIApAQCAtNTQ1LDEwICs2MDAsMTQgQEAKIC8qIENNX0lDTEtFTl9QRVIgc3BlY2lmaWMgYml0cyAqLwogCiAvKiBDTV9JRExFU1RfUEVSICovCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1dEVDMJCQkJKDEgPDwgMTIpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQNAkJCQkoMSA8PCAyKQotI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDMJCQkJKDEgPDwgMSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1AyCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX1NUX1dEVDNfU0hJRlQJCQkJMTIKKyNkZWZpbmUgT01BUDM0MzBfU1RfV0RUM19NQVNLCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDRfU0hJRlQJCQkyCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQNF9NQVNLCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQM19TSElGVAkJCTEKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1AzX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1AyX1NISUZUCQkJMAorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDJfTUFTSwkJCQkoMSA8PCAwKQogCiAvKiBDTV9BVVRPSURMRV9QRVIgKi8KICNkZWZpbmUgT01BUDM0MzBfQVVUT19HUElPNgkJCQkoMSA8PCAxNykKQEAgLTY3Niw2ICs3MzUsMTAgQEAKICNkZWZpbmUgT01BUDM0MzBFUzJfRU5fVVNCSE9TVF9NQVNLCQkJKDEgPDwgMCkKIAogLyogQ01fSURMRVNUX1VTQkhPU1QgKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfVVNCSE9TVF9JRExFX1NISUZUCQkxCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX1VTQkhPU1RfSURMRV9NQVNLCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9VU0JIT1NUX1NUREJZX1NISUZUCQkwCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX1VTQkhPU1RfU1REQllfTUFTSwkJKDEgPDwgMCkKIAogLyogQ01fQVVUT0lETEVfVVNCSE9TVCAqLwogI2RlZmluZSBPTUFQMzQzMEVTMl9BVVRPX1VTQkhPU1RfU0hJRlQJCQkwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCmluZGV4IGNlMDNmYTcuLmQ2YjRiMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCkBAIC0yOCwxMyArMjgsMTIxIEBACiAjaW5jbHVkZSA8bWFjaC9lYWMuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfT01BUF9EU1ApIHx8IGRlZmluZWQoQ09ORklHX09NQVBfRFNQX01PRFVMRSkKLSNkZWZpbmUgT01BUDJfTUJPWF9CQVNFCQlJT19BRERSRVNTKE9NQVAyNFhYX01BSUxCT1hfQkFTRSkKKyNpZiBkZWZpbmVkKENPTkZJR19WSURFT19PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfVklERU9fT01BUDJfTU9EVUxFKQogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG1ib3hfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNhbV9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydAkJPSBPTUFQMl9NQk9YX0JBU0UsCi0JCS5lbmQJCT0gT01BUDJfTUJPWF9CQVNFICsgMHgxMWYsCisJCS5zdGFydAkJPSBPTUFQMjRYWF9DQU1FUkFfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMjRYWF9DQU1FUkFfQkFTRSArIDB4ZmZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBJTlRfMjRYWF9DQU1fSVJRLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcF9jYW1fZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwMjR4eGNhbSIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjYW1fcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBjYW1fcmVzb3VyY2VzLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9jYW1lcmEodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXBfY2FtX2RldmljZSk7Cit9CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1ZJREVPX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19PTUFQM19NT0RVTEUpCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDNpc3BfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUDM0MzBfSVNQX0JBU0UsCisJCS5lbmQJCT0gT01BUDM0MzBfSVNQX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDM0MzBfSVNQX0NCVUZGX0JBU0UsCisJCS5lbmQJCT0gT01BUDM0MzBfSVNQX0NCVUZGX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDM0MzBfSVNQX0NDUDJfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfQ0NQMl9FTkQsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAzNDMwX0lTUF9DQ0RDX0JBU0UsCisJCS5lbmQJCT0gT01BUDM0MzBfSVNQX0NDRENfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfSElTVF9CQVNFLAorCQkuZW5kCQk9IE9NQVAzNDMwX0lTUF9ISVNUX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDM0MzBfSVNQX0gzQV9CQVNFLAorCQkuZW5kCQk9IE9NQVAzNDMwX0lTUF9IM0FfRU5ELAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSBPTUFQMzQzMF9JU1BfUFJFVl9CQVNFLAorCQkuZW5kCQk9IE9NQVAzNDMwX0lTUF9QUkVWX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDM0MzBfSVNQX1JFU1pfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfUkVTWl9FTkQsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IE9NQVAzNDMwX0lTUF9TQkxfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfU0JMX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDM0MzBfSVNQX0NTSTJBX0JBU0UsCisJCS5lbmQJCT0gT01BUDM0MzBfSVNQX0NTSTJBX0VORCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gT01BUDM0MzBfSVNQX0NTSTJQSFlfQkFTRSwKKwkJLmVuZAkJPSBPTUFQMzQzMF9JU1BfQ1NJMlBIWV9FTkQsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElOVF8zNFhYX0NBTV9JUlEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBvbWFwM2lzcF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXAzaXNwIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG9tYXAzaXNwX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gb21hcDNpc3BfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9jYW1lcmEodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9tYXAzaXNwX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaW5pdF9jYW1lcmEodm9pZCkKK3sKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfT01BUF9NQk9YX0ZXSykgfHwgZGVmaW5lZChDT05GSUdfT01BUF9NQk9YX0ZXS19NT0RVTEUpCisKKyNkZWZpbmUgTUJPWF9SRUdfU0laRQkweDEyMAorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXAyX21ib3hfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gT01BUDI0WFhfTUFJTEJPWF9CQVNFLAorCQkuZW5kCQk9IE9NQVAyNFhYX01BSUxCT1hfQkFTRSArIE1CT1hfUkVHX1NJWkUgLSAxLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAl7CkBAIC00NywyMCArMTU1LDQwIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDNfbWJveF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBPTUFQMzRYWF9NQUlMQk9YX0JBU0UsCisJCS5lbmQJCT0gT01BUDM0WFhfTUFJTEJPWF9CQVNFICsgTUJPWF9SRUdfU0laRSAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IElOVF8yNFhYX01BSUxfVTBfTVBVLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1ib3hfZGV2aWNlID0gewotCS5uYW1lCQk9ICJtYWlsYm94IiwKKwkubmFtZQkJPSAib21hcDItbWFpbGJveCIsCiAJLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtYm94X3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gbWJveF9yZXNvdXJjZXMsCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21ib3godm9pZCkKIHsKKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkpIHsKKwkJbWJveF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUob21hcDJfbWJveF9yZXNvdXJjZXMpOworCQltYm94X2RldmljZS5yZXNvdXJjZSA9IG9tYXAyX21ib3hfcmVzb3VyY2VzOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNDMwKCkpIHsKKwkJbWJveF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUob21hcDNfbWJveF9yZXNvdXJjZXMpOworCQltYm94X2RldmljZS5yZXNvdXJjZSA9IG9tYXAzX21ib3hfcmVzb3VyY2VzOworCX0gZWxzZSB7CisJCXByX2VycigiJXM6IHBsYXRmb3JtIG5vdCBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm1ib3hfZGV2aWNlKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21ib3godm9pZCkgeyB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfT01BUF9NQk9YX0ZXSyAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfT01BUF9TVEkpCiAKQEAgLTM0OCwxMSArNDc2LDEyIEBACiAJCX0KIAogCQlkdW1teV9wZGV2LmlkID0gaTsKLQkJaWNsayA9IGNsa19nZXQoZGV2LCAibW1jaHNfaWNrIik7CisJCWRldl9zZXRfbmFtZSgmZHVtbXlfcGRldi5kZXYsICJtbWNpLW9tYXAtaHMuJWQiLCBpKTsKKwkJaWNsayA9IGNsa19nZXQoZGV2LCAiaWNrIik7CiAJCWlmIChpY2xrICYmIGNsa19lbmFibGUoaWNsaykpCiAJCQlpY2xrID0gTlVMTDsKIAotCQlmY2xrID0gY2xrX2dldChkZXYsICJtbWNoc19mY2siKTsKKwkJZmNsayA9IGNsa19nZXQoZGV2LCAiZmNrIik7CiAJCWlmIChmY2xrICYmIGNsa19lbmFibGUoZmNsaykpCiAJCQlmY2xrID0gTlVMTDsKIApAQCAtNTA2LDYgKzYzNSw3IEBACiAJICogaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHNvIHRoZXkncmUgZWFzaWVyIHRvIHNvcnQgdGhyb3VnaC4KIAkgKi8KIAlvbWFwX2hzbW1jX3Jlc2V0KCk7CisJb21hcF9pbml0X2NhbWVyYSgpOwogCW9tYXBfaW5pdF9tYm94KCk7CiAJb21hcF9pbml0X21jc3BpKCk7CiAJb21hcF9oZHFfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCmluZGV4IGI1MmEwMmYuLjM0YjU5MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKQEAgLTIxNyw4ICsyMTcsMTMgQEAKIAkJb21hcF9jaGlwLm9jID0gQ0hJUF9JU19PTUFQMzQzMDsKIAkJaWYgKG9tYXBfcmV2KCkgPT0gT01BUDM0MzBfUkVWX0VTMV8wKQogCQkJb21hcF9jaGlwLm9jIHw9IENISVBfSVNfT01BUDM0MzBFUzE7Ci0JCWVsc2UgaWYgKG9tYXBfcmV2KCkgPiBPTUFQMzQzMF9SRVZfRVMxXzApCisJCWVsc2UgaWYgKG9tYXBfcmV2KCkgPj0gT01BUDM0MzBfUkVWX0VTMl8wICYmCisJCQkgb21hcF9yZXYoKSA8PSBPTUFQMzQzMF9SRVZfRVMyXzEpCiAJCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQMzQzMEVTMjsKKwkJZWxzZSBpZiAob21hcF9yZXYoKSA9PSBPTUFQMzQzMF9SRVZfRVMzXzApCisJCQlvbWFwX2NoaXAub2MgfD0gQ0hJUF9JU19PTUFQMzQzMEVTM18wOworCQllbHNlIGlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzNfMSkKKwkJCW9tYXBfY2hpcC5vYyB8PSBDSElQX0lTX09NQVAzNDMwRVMzXzE7CiAJfSBlbHNlIHsKIAkJcHJfZXJyKCJVbmluaXRpYWxpemVkIG9tYXBfY2hpcCwgcGxlYXNlIGZpeCFcbiIpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYwppbmRleCA1ZWE2NGY5Li45MTZmY2QzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCkBAIC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSA8bWFjaC9tdXguaD4KICNpbmNsdWRlIDxtYWNoL29tYXBmYi5oPgogI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgotCi0jaW5jbHVkZSAibWVtb3J5LmgiCisjaW5jbHVkZSA8bWFjaC9zZHJjLmg+CisjaW5jbHVkZSA8bWFjaC9ncG1jLmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgogCkBAIC0xOTUsMTIgKzE5NSwxMiBAQAogCW9tYXBmYl9yZXNlcnZlX3NkcmFtKCk7CiB9CiAKLXZvaWQgX19pbml0IG9tYXAyX2luaXRfY29tbW9uX2h3KHZvaWQpCit2b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9odyhzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc3ApCiB7CiAJb21hcDJfbXV4X2luaXQoKTsKIAlwd3JkbV9pbml0KHBvd2VyZG9tYWluc19vbWFwKTsKIAljbGtkbV9pbml0KGNsb2NrZG9tYWluc19vbWFwLCBjbGtkbV9wd3JkbV9hdXRvZGVwcyk7CiAJb21hcDJfY2xrX2luaXQoKTsKLQlvbWFwMl9pbml0X21lbW9yeSgpOworCW9tYXAyX3NkcmNfaW5pdChzcCk7CiAJZ3BtY19pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCmluZGV4IDMyYjdhZjMuLmZkNWI4YTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jCkBAIC0xLDkgKzEsOSBAQAogLyoKLSAqIE1haWxib3ggcmVzZXJ2YXRpb24gbW9kdWxlcyBmb3IgT01BUDIKKyAqIE1haWxib3ggcmVzZXJ2YXRpb24gbW9kdWxlcyBmb3IgT01BUDIvMwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqIFdyaXR0ZW4gYnk6IEhpcm9zaGkgRE9ZVSA8SGlyb3NoaS5ET1lVQG5va2lhLmNvbT4KLSAqICAgICAgICBhbmQgIFBhdWwgTXVuZHQgPHBhdWwubXVuZHRAbm9raWEuY29tPgorICogICAgICAgIGFuZCAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xOCw0MCArMTgsMjIgQEAKICNpbmNsdWRlIDxtYWNoL21haWxib3guaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIAotI2RlZmluZSBNQUlMQk9YX1JFVklTSU9OCQkweDAwCi0jZGVmaW5lIE1BSUxCT1hfU1lTQ09ORklHCQkweDEwCi0jZGVmaW5lIE1BSUxCT1hfU1lTU1RBVFVTCQkweDE0Ci0jZGVmaW5lIE1BSUxCT1hfTUVTU0FHRV8wCQkweDQwCi0jZGVmaW5lIE1BSUxCT1hfTUVTU0FHRV8xCQkweDQ0Ci0jZGVmaW5lIE1BSUxCT1hfTUVTU0FHRV8yCQkweDQ4Ci0jZGVmaW5lIE1BSUxCT1hfTUVTU0FHRV8zCQkweDRjCi0jZGVmaW5lIE1BSUxCT1hfTUVTU0FHRV80CQkweDUwCi0jZGVmaW5lIE1BSUxCT1hfTUVTU0FHRV81CQkweDU0Ci0jZGVmaW5lIE1BSUxCT1hfRklGT1NUQVRVU18wCQkweDgwCi0jZGVmaW5lIE1BSUxCT1hfRklGT1NUQVRVU18xCQkweDg0Ci0jZGVmaW5lIE1BSUxCT1hfRklGT1NUQVRVU18yCQkweDg4Ci0jZGVmaW5lIE1BSUxCT1hfRklGT1NUQVRVU18zCQkweDhjCi0jZGVmaW5lIE1BSUxCT1hfRklGT1NUQVRVU180CQkweDkwCi0jZGVmaW5lIE1BSUxCT1hfRklGT1NUQVRVU181CQkweDk0Ci0jZGVmaW5lIE1BSUxCT1hfTVNHU1RBVFVTXzAJCTB4YzAKLSNkZWZpbmUgTUFJTEJPWF9NU0dTVEFUVVNfMQkJMHhjNAotI2RlZmluZSBNQUlMQk9YX01TR1NUQVRVU18yCQkweGM4Ci0jZGVmaW5lIE1BSUxCT1hfTVNHU1RBVFVTXzMJCTB4Y2MKLSNkZWZpbmUgTUFJTEJPWF9NU0dTVEFUVVNfNAkJMHhkMAotI2RlZmluZSBNQUlMQk9YX01TR1NUQVRVU181CQkweGQ0Ci0jZGVmaW5lIE1BSUxCT1hfSVJRU1RBVFVTXzAJCTB4MTAwCi0jZGVmaW5lIE1BSUxCT1hfSVJRRU5BQkxFXzAJCTB4MTA0Ci0jZGVmaW5lIE1BSUxCT1hfSVJRU1RBVFVTXzEJCTB4MTA4Ci0jZGVmaW5lIE1BSUxCT1hfSVJRRU5BQkxFXzEJCTB4MTBjCi0jZGVmaW5lIE1BSUxCT1hfSVJRU1RBVFVTXzIJCTB4MTEwCi0jZGVmaW5lIE1BSUxCT1hfSVJRRU5BQkxFXzIJCTB4MTE0Ci0jZGVmaW5lIE1BSUxCT1hfSVJRU1RBVFVTXzMJCTB4MTE4Ci0jZGVmaW5lIE1BSUxCT1hfSVJRRU5BQkxFXzMJCTB4MTFjCisjZGVmaW5lIE1BSUxCT1hfUkVWSVNJT04JCTB4MDAwCisjZGVmaW5lIE1BSUxCT1hfU1lTQ09ORklHCQkweDAxMAorI2RlZmluZSBNQUlMQk9YX1NZU1NUQVRVUwkJMHgwMTQKKyNkZWZpbmUgTUFJTEJPWF9NRVNTQUdFKG0pCQkoMHgwNDAgKyA0ICogKG0pKQorI2RlZmluZSBNQUlMQk9YX0ZJRk9TVEFUVVMobSkJCSgweDA4MCArIDQgKiAobSkpCisjZGVmaW5lIE1BSUxCT1hfTVNHU1RBVFVTKG0pCQkoMHgwYzAgKyA0ICogKG0pKQorI2RlZmluZSBNQUlMQk9YX0lSUVNUQVRVUyh1KQkJKDB4MTAwICsgOCAqICh1KSkKKyNkZWZpbmUgTUFJTEJPWF9JUlFFTkFCTEUodSkJCSgweDEwNCArIDggKiAodSkpCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1ib3hfYmFzZTsKKyNkZWZpbmUgTUFJTEJPWF9JUlFfTkVXTVNHKHUpCQkoMSA8PCAoMiAqICh1KSkpCisjZGVmaW5lIE1BSUxCT1hfSVJRX05PVEZVTEwodSkJCSgxIDw8ICgyICogKHUpICsgMSkpCiAKLSNkZWZpbmUgTUFJTEJPWF9JUlFfTk9URlVMTChuKQkJKDEgPDwgKDIgKiAobikgKyAxKSkKLSNkZWZpbmUgTUFJTEJPWF9JUlFfTkVXTVNHKG4pCQkoMSA8PCAoMiAqIChuKSkpCisjZGVmaW5lIE1CT1hfUkVHX1NJWkUJCQkweDEyMAorI2RlZmluZSBNQk9YX05SX1JFR1MJCQkoTUJPWF9SRUdfU0laRSAvIHNpemVvZih1MzIpKQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICptYm94X2Jhc2U7CiAKIHN0cnVjdCBvbWFwX21ib3gyX2ZpZm8gewogCXVuc2lnbmVkIGxvbmcgbXNnOwpAQCAtNjYsNiArNDgsNyBAQAogCXVuc2lnbmVkIGxvbmcgaXJxc3RhdHVzOwogCXUzMiBuZXdtc2dfYml0OwogCXUzMiBub3RmdWxsX2JpdDsKKwl1MzIgY3R4W01CT1hfTlJfUkVHU107CiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqbWJveF9pY2tfaGFuZGxlOwpAQCAtNzMsMTQgKzU2LDE0IEBACiBzdGF0aWMgdm9pZCBvbWFwMl9tYm94X2VuYWJsZV9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwKIAkJCQkgIG9tYXBfbWJveF90eXBlX3QgaXJxKTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWJveF9yZWFkX3JlZyh1bnNpZ25lZCBpbnQgcmVnKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWJveF9yZWFkX3JlZyhzaXplX3Qgb2ZzKQogewotCXJldHVybiBfX3Jhd19yZWFkbChtYm94X2Jhc2UgKyByZWcpOworCXJldHVybiBfX3Jhd19yZWFkbChtYm94X2Jhc2UgKyBvZnMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWJveF93cml0ZV9yZWcodW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IHJlZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3dyaXRlX3JlZyh1MzIgdmFsLCBzaXplX3Qgb2ZzKQogewotCV9fcmF3X3dyaXRlbCh2YWwsIG1ib3hfYmFzZSArIHJlZyk7CisJX19yYXdfd3JpdGVsKHZhbCwgbWJveF9iYXNlICsgb2ZzKTsKIH0KIAogLyogTWFpbGJveCBIL1cgcHJlcGFyYXRpb25zICovCkBAIC05NSw2ICs3OCw5IEBACiAJfQogCWNsa19lbmFibGUobWJveF9pY2tfaGFuZGxlKTsKIAorCWwgPSBtYm94X3JlYWRfcmVnKE1BSUxCT1hfUkVWSVNJT04pOworCXByX2luZm8oIm9tYXAgbWFpbGJveCByZXYgJWQuJWRcbiIsIChsICYgMHhmMCkgPj4gNCwgKGwgJiAweDBmKSk7CisKIAkvKiBzZXQgc21hcnQtaWRsZSAmIGF1dG9pZGxlICovCiAJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9TWVNDT05GSUcpOwogCWwgfD0gMHgwMDAwMDAxMTsKQEAgLTE4Myw2ICsxNjksMzIgQEAKIAlyZXR1cm4gKGVuYWJsZSAmIHN0YXR1cyAmIGJpdCk7CiB9CiAKK3N0YXRpYyB2b2lkIG9tYXAyX21ib3hfc2F2ZV9jdHgoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgb21hcF9tYm94Ml9wcml2ICpwID0gbWJveC0+cHJpdjsKKworCWZvciAoaSA9IDA7IGkgPCBNQk9YX05SX1JFR1M7IGkrKykgeworCQlwLT5jdHhbaV0gPSBtYm94X3JlYWRfcmVnKGkgKiBzaXplb2YodTMyKSk7CisKKwkJZGV2X2RiZyhtYm94LT5kZXYsICIlczogWyUwMnhdICUwOHhcbiIsIF9fZnVuY19fLAorCQkJaSwgcC0+Y3R4W2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAyX21ib3hfcmVzdG9yZV9jdHgoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qgb21hcF9tYm94Ml9wcml2ICpwID0gbWJveC0+cHJpdjsKKworCWZvciAoaSA9IDA7IGkgPCBNQk9YX05SX1JFR1M7IGkrKykgeworCQltYm94X3dyaXRlX3JlZyhwLT5jdHhbaV0sIGkgKiBzaXplb2YodTMyKSk7CisKKwkJZGV2X2RiZyhtYm94LT5kZXYsICIlczogWyUwMnhdICUwOHhcbiIsIF9fZnVuY19fLAorCQkJaSwgcC0+Y3R4W2ldKTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94X29wcyBvbWFwMl9tYm94X29wcyA9IHsKIAkudHlwZQkJPSBPTUFQX01CT1hfVFlQRTIsCiAJLnN0YXJ0dXAJPSBvbWFwMl9tYm94X3N0YXJ0dXAsCkBAIC0xOTUsNiArMjA3LDggQEAKIAkuZGlzYWJsZV9pcnEJPSBvbWFwMl9tYm94X2Rpc2FibGVfaXJxLAogCS5hY2tfaXJxCT0gb21hcDJfbWJveF9hY2tfaXJxLAogCS5pc19pcnEJCT0gb21hcDJfbWJveF9pc19pcnEsCisJLnNhdmVfY3R4CT0gb21hcDJfbWJveF9zYXZlX2N0eCwKKwkucmVzdG9yZV9jdHgJPSBvbWFwMl9tYm94X3Jlc3RvcmVfY3R4LAogfTsKIAogLyoKQEAgLTIwOSwxNSArMjIzLDE1IEBACiAvKiBEU1AgKi8KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94Ml9wcml2IG9tYXAyX21ib3hfZHNwX3ByaXYgPSB7CiAJLnR4X2ZpZm8gPSB7Ci0JCS5tc2cJCT0gTUFJTEJPWF9NRVNTQUdFXzAsCi0JCS5maWZvX3N0YXQJPSBNQUlMQk9YX0ZJRk9TVEFUVVNfMCwKKwkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0UoMCksCisJCS5maWZvX3N0YXQJPSBNQUlMQk9YX0ZJRk9TVEFUVVMoMCksCiAJfSwKIAkucnhfZmlmbyA9IHsKLQkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0VfMSwKLQkJLm1zZ19zdGF0CT0gTUFJTEJPWF9NU0dTVEFUVVNfMSwKKwkJLm1zZwkJPSBNQUlMQk9YX01FU1NBR0UoMSksCisJCS5tc2dfc3RhdAk9IE1BSUxCT1hfTVNHU1RBVFVTKDEpLAogCX0sCi0JLmlycWVuYWJsZQk9IE1BSUxCT1hfSVJRRU5BQkxFXzAsCi0JLmlycXN0YXR1cwk9IE1BSUxCT1hfSVJRU1RBVFVTXzAsCisJLmlycWVuYWJsZQk9IE1BSUxCT1hfSVJRRU5BQkxFKDApLAorCS5pcnFzdGF0dXMJPSBNQUlMQk9YX0lSUVNUQVRVUygwKSwKIAkubm90ZnVsbF9iaXQJPSBNQUlMQk9YX0lSUV9OT1RGVUxMKDApLAogCS5uZXdtc2dfYml0CT0gTUFJTEJPWF9JUlFfTkVXTVNHKDEpLAogfTsKQEAgLTIyOSwxOCArMjQzLDE4IEBACiB9OwogRVhQT1JUX1NZTUJPTChtYm94X2RzcF9pbmZvKTsKIAotLyogSVZBICovCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkgLyogSVZBICovCiBzdGF0aWMgc3RydWN0IG9tYXBfbWJveDJfcHJpdiBvbWFwMl9tYm94X2l2YV9wcml2ID0gewogCS50eF9maWZvID0gewotCQkubXNnCQk9IE1BSUxCT1hfTUVTU0FHRV8yLAotCQkuZmlmb19zdGF0CT0gTUFJTEJPWF9GSUZPU1RBVFVTXzIsCisJCS5tc2cJCT0gTUFJTEJPWF9NRVNTQUdFKDIpLAorCQkuZmlmb19zdGF0CT0gTUFJTEJPWF9GSUZPU1RBVFVTKDIpLAogCX0sCiAJLnJ4X2ZpZm8gPSB7Ci0JCS5tc2cJCT0gTUFJTEJPWF9NRVNTQUdFXzMsCi0JCS5tc2dfc3RhdAk9IE1BSUxCT1hfTVNHU1RBVFVTXzMsCisJCS5tc2cJCT0gTUFJTEJPWF9NRVNTQUdFKDMpLAorCQkubXNnX3N0YXQJPSBNQUlMQk9YX01TR1NUQVRVUygzKSwKIAl9LAotCS5pcnFlbmFibGUJPSBNQUlMQk9YX0lSUUVOQUJMRV8zLAotCS5pcnFzdGF0dXMJPSBNQUlMQk9YX0lSUVNUQVRVU18zLAorCS5pcnFlbmFibGUJPSBNQUlMQk9YX0lSUUVOQUJMRSgzKSwKKwkuaXJxc3RhdHVzCT0gTUFJTEJPWF9JUlFTVEFUVVMoMyksCiAJLm5vdGZ1bGxfYml0CT0gTUFJTEJPWF9JUlFfTk9URlVMTCgyKSwKIAkubmV3bXNnX2JpdAk9IE1BSUxCT1hfSVJRX05FV01TRygzKSwKIH07CkBAIC0yNTAsMTcgKzI2NCwxMiBAQAogCS5vcHMJPSAmb21hcDJfbWJveF9vcHMsCiAJLnByaXYJPSAmb21hcDJfbWJveF9pdmFfcHJpdiwKIH07CisjZW5kaWYKIAotc3RhdGljIGludCBfX2luaXQgb21hcDJfbWJveF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgb21hcDJfbWJveF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCByZXQgPSAwOwotCi0JaWYgKHBkZXYtPm51bV9yZXNvdXJjZXMgIT0gMykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIG51bWJlciBvZiByZXNvdXJjZXM6ICVkXG4iLAotCQkJcGRldi0+bnVtX3Jlc291cmNlcyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlpbnQgcmV0OwogCiAJLyogTUJPWCBiYXNlICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTI2OCw0MiArMjc3LDYxIEBACiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbWVtIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCW1ib3hfYmFzZSA9IHJlcy0+c3RhcnQ7CisJbWJveF9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOworCWlmICghbWJveF9iYXNlKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIERTUCBJUlEgKi8KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwotCWlmICh1bmxpa2VseSghcmVzKSkgeworCS8qIERTUCBvciBJVkEyIElSUSAqLworCW1ib3hfZHNwX2luZm8uaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAobWJveF9kc3BfaW5mby5pcnEgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgaXJxIHJlc291cmNlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2RzcDsKIAl9Ci0JbWJveF9kc3BfaW5mby5pcnEgPSByZXMtPnN0YXJ0OwogCi0JcmV0ID0gb21hcF9tYm94X3JlZ2lzdGVyKCZtYm94X2RzcF9pbmZvKTsKKwlyZXQgPSBvbWFwX21ib3hfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJm1ib3hfZHNwX2luZm8pOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2RzcDsKIAotCS8qIElWQSBJUlEgKi8KLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDEpOwotCWlmICh1bmxpa2VseSghcmVzKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIGlycSByZXNvdXJjZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApIC8qIElWQSAqLworCWlmIChjcHVfaXNfb21hcDI0MjAoKSkgeworCQkvKiBJVkEgSVJRICovCisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMSk7CisJCWlmICh1bmxpa2VseSghcmVzKSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBpcnEgcmVzb3VyY2VcbiIpOworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gZXJyX2l2YTE7CisJCX0KKwkJbWJveF9pdmFfaW5mby5pcnEgPSByZXMtPnN0YXJ0OworCQlyZXQgPSBvbWFwX21ib3hfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJm1ib3hfaXZhX2luZm8pOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfaXZhMTsKIAl9Ci0JbWJveF9pdmFfaW5mby5pcnEgPSByZXMtPnN0YXJ0OworI2VuZGlmCisJcmV0dXJuIDA7CiAKLQlyZXQgPSBvbWFwX21ib3hfcmVnaXN0ZXIoJm1ib3hfaXZhX2luZm8pOwotCitlcnJfaXZhMToKKwlvbWFwX21ib3hfdW5yZWdpc3RlcigmbWJveF9kc3BfaW5mbyk7CitlcnJfZHNwOgorCWlvdW5tYXAobWJveF9iYXNlKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9tYXAyX21ib3hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBvbWFwMl9tYm94X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCisJb21hcF9tYm94X3VucmVnaXN0ZXIoJm1ib3hfaXZhX2luZm8pOworI2VuZGlmCiAJb21hcF9tYm94X3VucmVnaXN0ZXIoJm1ib3hfZHNwX2luZm8pOworCWlvdW5tYXAobWJveF9iYXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcDJfbWJveF9kcml2ZXIgPSB7CiAJLnByb2JlID0gb21hcDJfbWJveF9wcm9iZSwKLQkucmVtb3ZlID0gb21hcDJfbWJveF9yZW1vdmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG9tYXAyX21ib3hfcmVtb3ZlKSwKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJtYWlsYm94IiwKKwkJLm5hbWUgPSAib21hcDItbWFpbGJveCIsCiAJfSwKIH07CiAKQEAgLTMyMCw0ICszNDgsNyBAQAogbW9kdWxlX2luaXQob21hcDJfbWJveF9pbml0KTsKIG1vZHVsZV9leGl0KG9tYXAyX21ib3hfZXhpdCk7CiAKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigib21hcCBtYWlsYm94OiBvbWFwMi8zIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBmdW5jdGlvbnMiKTsKK01PRFVMRV9BVVRIT1IoIkhpcm9zaGkgRE9ZVSA8SGlyb3NoaS5ET1lVQG5va2lhLmNvbT4sIFBhdWwgTXVuZHQiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06b21hcDItbWFpbGJveCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCmluZGV4IGE5ZTYzMWYuLmE1YzBmMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKQEAgLTI0LDggKzI0LDYgQEAKICNpbmNsdWRlIDxtYWNoL2NwdS5oPgogI2luY2x1ZGUgPG1hY2gvbWNic3AuaD4KIAotY29uc3QgY2hhciAqY2xrX25hbWVzW10gPSB7ICJtY2JzcF9pY2siLCAibWNic3BfZmNrIiB9OwotCiBzdGF0aWMgdm9pZCBvbWFwMl9tY2JzcDJfbXV4X3NldHVwKHZvaWQpCiB7CiAJb21hcF9jZmdfcmVnKFkxNV8yNFhYX01DQlNQMl9DTEtYKTsKQEAgLTU3LDggKzU1LDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMiwKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMl9CQVNFLApAQCAtNjcsOCArNjMsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiB9OwogI2RlZmluZSBPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMjQyMF9tY2JzcF9wZGF0YSkKQEAgLTg2LDggKzgwLDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQMV9JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMiwKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAyNFhYX01DQlNQMl9CQVNFLApAQCAtOTYsOCArODgsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDI0MzBfTUNCU1AzX0JBU0UsCkBAIC0xMDYsOCArOTYsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDI0MzBfTUNCU1A0X0JBU0UsCkBAIC0xMTYsOCArMTA0LDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQNF9JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMiwKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAyNDMwX01DQlNQNV9CQVNFLApAQCAtMTI2LDggKzExMiw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDVfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIH07CiAjZGVmaW5lIE9NQVAyNDMwX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAyNDMwX21jYnNwX3BkYXRhKQpAQCAtMTQ1LDggKzEyOSw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AxX0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDJfQkFTRSwKQEAgLTE1NSw4ICsxMzcsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AyX0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiAJewogCQkucGh5c19iYXNlCT0gT01BUDM0WFhfTUNCU1AzX0JBU0UsCkBAIC0xNjUsOCArMTQ1LDYgQEAKIAkJLnJ4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDNfSVJRX1JYLAogCQkudHhfaXJxCQk9IElOVF8yNFhYX01DQlNQM19JUlFfVFgsCiAJCS5vcHMJCT0gJm9tYXAyX21jYnNwX29wcywKLQkJLmNsa19uYW1lcwk9IGNsa19uYW1lcywKLQkJLm51bV9jbGtzCT0gMiwKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQNF9CQVNFLApAQCAtMTc1LDggKzE1Myw2IEBACiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A0X0lSUV9SWCwKIAkJLnR4X2lycQkJPSBJTlRfMjRYWF9NQ0JTUDRfSVJRX1RYLAogCQkub3BzCQk9ICZvbWFwMl9tY2JzcF9vcHMsCi0JCS5jbGtfbmFtZXMJPSBjbGtfbmFtZXMsCi0JCS5udW1fY2xrcwk9IDIsCiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDVfQkFTRSwKQEAgLTE4NSw4ICsxNjEsNiBAQAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQNV9JUlFfUlgsCiAJCS50eF9pcnEJCT0gSU5UXzI0WFhfTUNCU1A1X0lSUV9UWCwKIAkJLm9wcwkJPSAmb21hcDJfbWNic3Bfb3BzLAotCQkuY2xrX25hbWVzCT0gY2xrX25hbWVzLAotCQkubnVtX2Nsa3MJPSAyLAogCX0sCiB9OwogI2RlZmluZSBPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMzR4eF9tY2JzcF9wZGF0YSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODJjNzAyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmMKLSAqCi0gKiBNZW1vcnkgdGltaW5nIHJlbGF0ZWQgZnVuY3Rpb25zIGZvciBPTUFQMjRYWAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBUZXhhcyBJbnN0cnVtZW50cyBJbmMuCi0gKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCi0gKiBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9jbG9jay5oPgotI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgotCi0jaW5jbHVkZSAicHJtLmgiCi0KLSNpbmNsdWRlICJtZW1vcnkuaCIKLSNpbmNsdWRlICJzZHJjLmgiCi0KLXZvaWQgX19pb21lbSAqb21hcDJfc2RyY19iYXNlOwotdm9pZCBfX2lvbWVtICpvbWFwMl9zbXNfYmFzZTsKLQotc3RhdGljIHN0cnVjdCBtZW1vcnlfdGltaW5ncyBtZW1fdGltaW5nczsKLXN0YXRpYyB1MzIgY3Vycl9wZXJmX2xldmVsID0gQ09SRV9DTEtfU1JDX0RQTExfWDI7Ci0KLXUzMiBvbWFwMl9tZW1vcnlfZ2V0X3Nsb3dfZGxsX2N0cmwodm9pZCkKLXsKLQlyZXR1cm4gbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybDsKLX0KLQotdTMyIG9tYXAyX21lbW9yeV9nZXRfZmFzdF9kbGxfY3RybCh2b2lkKQotewotCXJldHVybiBtZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsOwotfQotCi11MzIgb21hcDJfbWVtb3J5X2dldF90eXBlKHZvaWQpCi17Ci0JcmV0dXJuIG1lbV90aW1pbmdzLm1fdHlwZTsKLX0KLQotLyoKLSAqIENoZWNrIHRoZSBETEwgbG9jayBzdGF0ZSwgYW5kIHJldHVybiB0dWUgaWYgcnVubmluZyBpbiB1bmxvY2sgbW9kZS4KLSAqIFRoaXMgaXMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBzaGlmdGVkIERMTCB2YWx1ZSBpbiB1bmxvY2sgbW9kZS4KLSAqLwotdTMyIG9tYXAyX2RsbF9mb3JjZV9uZWVkZWQodm9pZCkKLXsKLQkvKiBkbGxhIGFuZCBkbGxiIGFyZSBhIHNldCAqLwotCXUzMiBkbGxfc3RhdGUgPSBzZHJjX3JlYWRfcmVnKFNEUkNfRExMQV9DVFJMKTsKLQotCWlmICgoZGxsX3N0YXRlICYgKDEgPDwgMikpID09ICgxIDw8IDIpKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi0vKgotICogJ2xldmVsJyBpcyB0aGUgdmFsdWUgdG8gc3RvcmUgdG8gQ01fQ0xLU0VMMl9QTEwuQ09SRV9DTEtfU1JDLgotICogUHJhY3RpY2FsIHZhbHVlcyBhcmUgQ09SRV9DTEtfU1JDX0RQTEwgKGZvciBDT1JFX0NMSyA9IERQTExfQ0xLKSBvcgotICogQ09SRV9DTEtfU1JDX0RQTExfWDIgKGZvciBDT1JFX0NMSyA9ICogRFBMTF9DTEsgKiAyKQotICovCi11MzIgb21hcDJfcmVwcm9ncmFtX3NkcmModTMyIGxldmVsLCB1MzIgZm9yY2UpCi17Ci0JdTMyIGRsbF9jdHJsLCBtX3R5cGU7Ci0JdTMyIHByZXYgPSBjdXJyX3BlcmZfbGV2ZWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICgoY3Vycl9wZXJmX2xldmVsID09IGxldmVsKSAmJiAhZm9yY2UpCi0JCXJldHVybiBwcmV2OwotCi0JaWYgKGxldmVsID09IENPUkVfQ0xLX1NSQ19EUExMKSB7Ci0JCWRsbF9jdHJsID0gb21hcDJfbWVtb3J5X2dldF9zbG93X2RsbF9jdHJsKCk7Ci0JfSBlbHNlIGlmIChsZXZlbCA9PSBDT1JFX0NMS19TUkNfRFBMTF9YMikgewotCQlkbGxfY3RybCA9IG9tYXAyX21lbW9yeV9nZXRfZmFzdF9kbGxfY3RybCgpOwotCX0gZWxzZSB7Ci0JCXJldHVybiBwcmV2OwotCX0KLQotCW1fdHlwZSA9IG9tYXAyX21lbW9yeV9nZXRfdHlwZSgpOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fcmF3X3dyaXRlbCgweGZmZmYsIE9NQVAyNFhYX1BSQ01fVk9MVFNFVFVQKTsKLQlvbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKGxldmVsLCBkbGxfY3RybCwgbV90eXBlKTsKLQljdXJyX3BlcmZfbGV2ZWwgPSBsZXZlbDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gcHJldjsKLX0KLQotI2lmICFkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQotdm9pZCBvbWFwMl9zcmFtX2Rkcl9pbml0KHUzMiAqc2xvd19kbGxfY3RybCwgdTMyIGZhc3RfZGxsX2N0cmwsCi0JCQkJdTMyIGJhc2VfY3MsIHUzMiBmb3JjZV91bmxvY2spCi17Ci19Ci12b2lkIG9tYXAyX3NyYW1fcmVwcm9ncmFtX3NkcmModTMyIHBlcmZfbGV2ZWwsIHUzMiBkbGxfdmFsLAotCQkJCSAgICAgIHUzMiBtZW1fdHlwZSkKLXsKLX0KLSNlbmRpZgotCi12b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkKLXsKLQl1bnNpZ25lZCBsb25nIGRsbF9jbnQ7Ci0JdTMyIGZhc3RfZGxsID0gMDsKLQotCW1lbV90aW1pbmdzLm1fdHlwZSA9ICEoKHNkcmNfcmVhZF9yZWcoU0RSQ19NUl8wKSAmIDB4MykgPT0gMHgxKTsgLyogRERSID0gMSwgU0RSID0gMCAqLwotCi0JLyogMjQyMiBlczIuMDUgYW5kIGJleW9uZCBoYXMgYSBzaW5nbGUgU0lQIEREUiBpbnN0ZWFkIG9mIDIgbGlrZSBvdGhlcnMuCi0JICogSW4gdGhlIGNhc2Ugb2YgMjQyMiwgaXRzIG9rIHRvIHVzZSBDUzEgaW5zdGVhZCBvZiBDUzAuCi0JICovCi0JaWYgKGNwdV9pc19vbWFwMjQyMigpKQotCQltZW1fdGltaW5ncy5iYXNlX2NzID0gMTsKLQllbHNlCi0JCW1lbV90aW1pbmdzLmJhc2VfY3MgPSAwOwotCi0JaWYgKG1lbV90aW1pbmdzLm1fdHlwZSAhPSBNX0REUikKLQkJcmV0dXJuOwotCi0JLyogV2l0aCBERFIgd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGxvdyBmcmVxdWVuY3kgRExMIHZhbHVlICovCi0JaWYgKCgobWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCAmICgxIDw8IDIpKSA9PSBNX0xPQ0tfQ1RSTCkpCi0JCW1lbV90aW1pbmdzLmRsbF9tb2RlID0gTV9VTkxPQ0s7Ci0JZWxzZQotCQltZW1fdGltaW5ncy5kbGxfbW9kZSA9IE1fTE9DSzsKLQotCWlmIChtZW1fdGltaW5ncy5iYXNlX2NzID09IDApIHsKLQkJZmFzdF9kbGwgPSBzZHJjX3JlYWRfcmVnKFNEUkNfRExMQV9DVFJMKTsKLQkJZGxsX2NudCA9IHNkcmNfcmVhZF9yZWcoU0RSQ19ETExBX1NUQVRVUykgJiAweGZmMDA7Ci0JfSBlbHNlIHsKLQkJZmFzdF9kbGwgPSBzZHJjX3JlYWRfcmVnKFNEUkNfRExMQl9DVFJMKTsKLQkJZGxsX2NudCA9IHNkcmNfcmVhZF9yZWcoU0RSQ19ETExCX1NUQVRVUykgJiAweGZmMDA7Ci0JfQotCWlmIChmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKSB7Ci0JCWZhc3RfZGxsICY9IH4weGZmMDA7Ci0JCWZhc3RfZGxsIHw9IGRsbF9jbnQ7CQkvKiBDdXJyZW50IGxvY2sgbW9kZSAqLwotCX0KLQkvKiBzZXQgZmFzdCB0aW1pbmdzIHdpdGggRExMIGZpbHRlciBkaXNhYmxlZCAqLwotCW1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgPSAoZmFzdF9kbGwgfCAoMyA8PCA4KSk7Ci0KLQkvKiBObyBkaXNydXB0aW9ucywgRERSIHdpbGwgYmUgb2ZmbGluZSAmIEMtQUJJIG5vdCBmb2xsb3dlZCAqLwotCW9tYXAyX3NyYW1fZGRyX2luaXQoJm1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwsCi0JCQkgICAgbWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCwKLQkJCSAgICBtZW1fdGltaW5ncy5iYXNlX2NzLAotCQkJICAgIGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpOwotCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgJj0gMHhmZjAwOwkvKiBLZWVwIGxvY2sgdmFsdWUgKi8KLQotCS8qIFR1cm4gc3RhdHVzIGludG8gdW5sb2NrIGN0cmwgKi8KLQltZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsIHw9Ci0JCSgobWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybCAmIDB4RikgfCAoMSA8PCAyKSk7Ci0KLQkvKiA5MCBkZWdyZWUgcGhhc2UgZm9yIGFueXRoaW5nIGJlbG93IDEzM01oeiArIGRpc2FibGUgRExMIGZpbHRlciAqLwotCW1lbV90aW1pbmdzLnNsb3dfZGxsX2N0cmwgfD0gKCgxIDw8IDEpIHwgKDMgPDwgOCkpOwotfQotCi12b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc19tZW1vcnkoc3RydWN0IG9tYXBfZ2xvYmFscyAqb21hcDJfZ2xvYmFscykKLXsKLQlvbWFwMl9zZHJjX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT5zZHJjOwotCW9tYXAyX3Ntc19iYXNlID0gb21hcDJfZ2xvYmFscy0+c21zOwotfQotCi0vKiB0dXJuIG9uIHNtYXJ0IGlkbGUgbW9kZXMgZm9yIFNEUkFNIHNjaGVkdWxlciBhbmQgY29udHJvbGxlciAqLwotdm9pZCBfX2luaXQgb21hcDJfaW5pdF9tZW1vcnkodm9pZCkKLXsKLQl1MzIgbDsKLQotCWlmICghY3B1X2lzX29tYXAyNDIwKCkpCi0JCXJldHVybjsKLQotCWwgPSBzbXNfcmVhZF9yZWcoU01TX1NZU0NPTkZJRyk7Ci0JbCAmPSB+KDB4MyA8PCAzKTsKLQlsIHw9ICgweDIgPDwgMyk7Ci0Jc21zX3dyaXRlX3JlZyhsLCBTTVNfU1lTQ09ORklHKTsKLQotCWwgPSBzZHJjX3JlYWRfcmVnKFNEUkNfU1lTQ09ORklHKTsKLQlsICY9IH4oMHgzIDw8IDMpOwotCWwgfD0gKDB4MiA8PCAzKTsKLQlzZHJjX3dyaXRlX3JlZyhsLCBTRFJDX1NZU0NPTkZJRyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tZW1vcnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIzZGI4MC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21lbW9yeS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvbWVtb3J5LmgKLSAqCi0gKiBJbnRlcmZhY2UgZm9yIG1lbW9yeSB0aW1pbmcgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIE9NQVAyNFhYCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IFRleGFzIEluc3RydW1lbnRzIEluYy4KLSAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KLSAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIEFSQ0hfQVJNX01BQ0hfT01BUDJfTUVNT1JZX0gKLSNkZWZpbmUgQVJDSF9BUk1fTUFDSF9PTUFQMl9NRU1PUllfSAotCi0vKiBNZW1vcnkgdGltaW5ncyAqLwotI2RlZmluZSBNX0REUgkJMQotI2RlZmluZSBNX0xPQ0tfQ1RSTAkoMSA8PCAyKQotI2RlZmluZSBNX1VOTE9DSwkwCi0jZGVmaW5lIE1fTE9DSwkJMQotCi1zdHJ1Y3QgbWVtb3J5X3RpbWluZ3MgewotCXUzMiBtX3R5cGU7CQkvKiBkZHIgPSAxLCBzZHIgPSAwICovCi0JdTMyIGRsbF9tb2RlOwkJLyogdXNlIGxvY2sgbW9kZSA9IDEsIHVubG9jayBtb2RlID0gMCAqLwotCXUzMiBzbG93X2RsbF9jdHJsOwkvKiB1bmxvY2sgbW9kZSwgZGxsIHZhbHVlIGZvciBzbG93IHNwZWVkICovCi0JdTMyIGZhc3RfZGxsX2N0cmw7CS8qIHVubG9jayBtb2RlLCBkbGwgdmFsdWUgZm9yIGZhc3Qgc3BlZWQgKi8KLQl1MzIgYmFzZV9jczsJCS8qIGJhc2UgY2hpcCBzZWxlY3QgdG8gdXNlIGZvciBjYWxjdWxhdGlvbnMgKi8KLX07Ci0KLWV4dGVybiB2b2lkIG9tYXAyX2luaXRfbWVtb3J5X3BhcmFtcyh1MzIgZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSk7Ci1leHRlcm4gdTMyIG9tYXAyX21lbW9yeV9nZXRfc2xvd19kbGxfY3RybCh2b2lkKTsKLWV4dGVybiB1MzIgb21hcDJfbWVtb3J5X2dldF9mYXN0X2RsbF9jdHJsKHZvaWQpOwotZXh0ZXJuIHUzMiBvbWFwMl9tZW1vcnlfZ2V0X3R5cGUodm9pZCk7Ci11MzIgb21hcDJfZGxsX2ZvcmNlX25lZWRlZCh2b2lkKTsKLXUzMiBvbWFwMl9yZXByb2dyYW1fc2RyYyh1MzIgbGV2ZWwsIHUzMiBmb3JjZSk7Ci12b2lkIF9faW5pdCBvbWFwMl9pbml0X21lbW9yeSh2b2lkKTsKLXZvaWQgX19pbml0IGdwbWNfaW5pdCh2b2lkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKaW5kZXggZTFkYWRmNy4uZGM0MGIzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2w0MDMwLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2NvbnRyb2wuaD4KQEAgLTQ0LDYgKzQ1LDcgQEAKICNkZWZpbmUgVk1NQzJfMzE1VgkJMHgwYwogI2RlZmluZSBWTU1DMl8zMDBWCQkweDBiCiAjZGVmaW5lIFZNTUMyXzI4NVYJCTB4MGEKKyNkZWZpbmUgVk1NQzJfMjgwVgkJMHgwOQogI2RlZmluZSBWTU1DMl8yNjBWCQkweDA4CiAjZGVmaW5lIFZNTUMyXzE4NVYJCTB4MDYKICNkZWZpbmUgVk1NQzJfREVESUNBVEVECQkweDJFCkBAIC01OSw4ICs2MSw4IEBACiAJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEJKm1tYzsKIAl1OAkJdHdsX3ZtbWNfZGV2X2dycDsKIAl1OAkJdHdsX21tY19kZWRpY2F0ZWQ7Ci0JY2hhcgkJbmFtZVtIU01NQ19OQU1FX0xFTl07Ci19IGhzbW1jW10gPSB7CisJY2hhcgkJbmFtZVtIU01NQ19OQU1FX0xFTiArIDFdOworfSBoc21tY1tPTUFQMzRYWF9OUl9NTUNdID0gewogCXsKIAkJLnR3bF92bW1jX2Rldl9ncnAJCT0gVk1NQzFfREVWX0dSUCwKIAkJLnR3bF9tbWNfZGVkaWNhdGVkCQk9IFZNTUMxX0RFRElDQVRFRCwKQEAgLTk4LDYgKzEwMCwxNCBAQAogCXJldHVybiBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPnNsb3RzWzBdLmdwaW9fd3ApOwogfQogCitzdGF0aWMgaW50IHR3bF9tbWNfZ2V0X2NvdmVyX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCit7CisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCS8qIE5PVEU6IGFzc3VtZXMgY2FyZCBkZXRlY3Qgc2lnbmFsIGlzIGFjdGl2ZS1sb3cgKi8KKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7Cit9CisKIC8qCiAgKiBNTUMgU2xvdCBJbml0aWFsaXphdGlvbi4KICAqLwpAQCAtMTY2LDY2ICsxNzYsODUgQEAKIC8qCiAgKiBTZXRzIHRoZSBNTUMgdm9sdGFnZSBpbiB0d2w0MDMwCiAgKi8KKworI2RlZmluZSBNTUMxX09DUgkoTU1DX1ZERF8xNjVfMTk1IFwKKwkJfE1NQ19WRERfMjhfMjl8TU1DX1ZERF8yOV8zMHxNTUNfVkREXzMwXzMxfE1NQ19WRERfMzFfMzIpCisjZGVmaW5lIE1NQzJfT0NSCShNTUNfVkREXzE2NV8xOTUgXAorCQl8TU1DX1ZERF8yNV8yNnxNTUNfVkREXzI2XzI3fE1NQ19WRERfMjdfMjggXAorCQl8TU1DX1ZERF8yOF8yOXxNTUNfVkREXzI5XzMwfE1NQ19WRERfMzBfMzF8TU1DX1ZERF8zMV8zMikKKwogc3RhdGljIGludCB0d2xfbW1jX3NldF92b2x0YWdlKHN0cnVjdCB0d2xfbW1jX2NvbnRyb2xsZXIgKmMsIGludCB2ZGQpCiB7CiAJaW50IHJldDsKLQl1OCB2bW1jLCBkZXZfZ3JwX3ZhbDsKKwl1OCB2bW1jID0gMCwgZGV2X2dycF92YWw7CiAKLQlzd2l0Y2ggKDEgPDwgdmRkKSB7Ci0JY2FzZSBNTUNfVkREXzM1XzM2OgotCWNhc2UgTU1DX1ZERF8zNF8zNToKLQljYXNlIE1NQ19WRERfMzNfMzQ6Ci0JY2FzZSBNTUNfVkREXzMyXzMzOgotCWNhc2UgTU1DX1ZERF8zMV8zMjoKLQljYXNlIE1NQ19WRERfMzBfMzE6Ci0JCWlmIChjLT50d2xfdm1tY19kZXZfZ3JwID09IFZNTUMxX0RFVl9HUlApCi0JCQl2bW1jID0gVk1NQzFfMzE1VjsKLQkJZWxzZQotCQkJdm1tYyA9IFZNTUMyXzMxNVY7Ci0JCWJyZWFrOwotCWNhc2UgTU1DX1ZERF8yOV8zMDoKLQkJaWYgKGMtPnR3bF92bW1jX2Rldl9ncnAgPT0gVk1NQzFfREVWX0dSUCkKLQkJCXZtbWMgPSBWTU1DMV8zMTVWOwotCQllbHNlCi0JCQl2bW1jID0gVk1NQzJfMzAwVjsKLQkJYnJlYWs7Ci0JY2FzZSBNTUNfVkREXzI3XzI4OgotCWNhc2UgTU1DX1ZERF8yNl8yNzoKLQkJaWYgKGMtPnR3bF92bW1jX2Rldl9ncnAgPT0gVk1NQzFfREVWX0dSUCkKLQkJCXZtbWMgPSBWTU1DMV8yODVWOwotCQllbHNlCi0JCQl2bW1jID0gVk1NQzJfMjg1VjsKLQkJYnJlYWs7Ci0JY2FzZSBNTUNfVkREXzI1XzI2OgotCWNhc2UgTU1DX1ZERF8yNF8yNToKLQljYXNlIE1NQ19WRERfMjNfMjQ6Ci0JY2FzZSBNTUNfVkREXzIyXzIzOgotCWNhc2UgTU1DX1ZERF8yMV8yMjoKLQljYXNlIE1NQ19WRERfMjBfMjE6Ci0JCWlmIChjLT50d2xfdm1tY19kZXZfZ3JwID09IFZNTUMxX0RFVl9HUlApCi0JCQl2bW1jID0gVk1NQzFfMjg1VjsKLQkJZWxzZQotCQkJdm1tYyA9IFZNTUMyXzI2MFY7Ci0JCWJyZWFrOwotCWNhc2UgTU1DX1ZERF8xNjVfMTk1OgotCQlpZiAoYy0+dHdsX3ZtbWNfZGV2X2dycCA9PSBWTU1DMV9ERVZfR1JQKQorCWlmICghdmRkKQorCQlnb3RvIGRvaXQ7CisKKwlpZiAoYy0+dHdsX3ZtbWNfZGV2X2dycCA9PSBWTU1DMV9ERVZfR1JQKSB7CisJCS8qIFZNTUMxOiAgbWF4IDIyMCBtQS4gIEFuZCBmb3IgOC1iaXQgbW9kZSwKKwkJICogVlNJTTogIG1heCA1MCBtQQorCQkgKi8KKwkJc3dpdGNoICgxIDw8IHZkZCkgeworCQljYXNlIE1NQ19WRERfMTY1XzE5NToKIAkJCXZtbWMgPSBWTU1DMV8xODVWOwotCQllbHNlCisJCQkvKiBhbmQgVlNJTV8xODBWICovCisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzI4XzI5OgorCQkJdm1tYyA9IFZNTUMxXzI4NVY7CisJCQkvKiBhbmQgVlNJTV8yODBWICovCisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzI5XzMwOgorCQljYXNlIE1NQ19WRERfMzBfMzE6CisJCQl2bW1jID0gVk1NQzFfMzAwVjsKKwkJCS8qIGFuZCBWU0lNXzMwMFYgKi8KKwkJCWJyZWFrOworCQljYXNlIE1NQ19WRERfMzFfMzI6CisJCQl2bW1jID0gVk1NQzFfMzE1VjsKKwkJCS8qIGVycm9yIGlmIFZTSU0gbmVlZGVkICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmIChjLT50d2xfdm1tY19kZXZfZ3JwID09IFZNTUMyX0RFVl9HUlApIHsKKwkJLyogVk1NQzI6ICBtYXggMTAwIG1BICovCisJCXN3aXRjaCAoMSA8PCB2ZGQpIHsKKwkJY2FzZSBNTUNfVkREXzE2NV8xOTU6CiAJCQl2bW1jID0gVk1NQzJfMTg1VjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJdm1tYyA9IDA7Ci0JCWJyZWFrOworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8yNV8yNjoKKwkJY2FzZSBNTUNfVkREXzI2XzI3OgorCQkJdm1tYyA9IFZNTUMyXzI2MFY7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzI3XzI4OgorCQkJdm1tYyA9IFZNTUMyXzI4MFY7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzI4XzI5OgorCQkJdm1tYyA9IFZNTUMyXzI4NVY7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzI5XzMwOgorCQljYXNlIE1NQ19WRERfMzBfMzE6CisJCQl2bW1jID0gVk1NQzJfMzAwVjsKKwkJCWJyZWFrOworCQljYXNlIE1NQ19WRERfMzFfMzI6CisJCQl2bW1jID0gVk1NQzJfMzE1VjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAodm1tYykKK2RvaXQ6CisJaWYgKHZkZCkKIAkJZGV2X2dycF92YWwgPSBWTU1DX0RFVl9HUlBfUDE7CS8qIFBvd2VyIHVwICovCiAJZWxzZQogCQlkZXZfZ3JwX3ZhbCA9IExET19DTFI7CQkvKiBQb3dlciBkb3duICovCiAKIAlyZXQgPSB0d2w0MDMwX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9QTV9SRUNFSVZFUiwKIAkJCQkJZGV2X2dycF92YWwsIGMtPnR3bF92bW1jX2Rldl9ncnApOwotCWlmIChyZXQpCisJaWYgKHJldCB8fCAhdmRkKQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gdHdsNDAzMF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIsCkBAIC0yNDIsNiArMjcxLDE0IEBACiAJc3RydWN0IHR3bF9tbWNfY29udHJvbGxlciAqYyA9ICZoc21tY1swXTsKIAlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwogCisJLyoKKwkgKiBBc3N1bWUgd2UgcG93ZXIgYm90aCBPTUFQIFZNTUMxIChmb3IgQ01ELCBDTEssIERBVDAuLjMpIGFuZCB0aGUKKwkgKiBjYXJkIHVzaW5nIHRoZSBzYW1lIFRXTCBWTU1DMSBzdXBwbHkgKGhzbW1jWzBdKTsgT01BUCBoYXMgYm90aAorCSAqIDEuOFYgYW5kIDMuMFYgbW9kZXMsIGNvbnRyb2xsZWQgYnkgdGhlIFBCSUFTIHJlZ2lzdGVyLgorCSAqCisJICogSW4gOC1iaXQgbW9kZXMsIE9NQVAgVk1NQzFBIChmb3IgREFUNC4uNykgbmVlZHMgYSBzdXBwbHksIHdoaWNoCisJICogaXMgbW9zdCBuYXR1cmFsbHkgVFdMIFZTSU07IHRob3NlIHBpbnMgYWxzbyB1c2UgUEJJQVMuCisJICovCiAJaWYgKHBvd2VyX29uKSB7CiAJCWlmIChjcHVfaXNfb21hcDI0MzAoKSkgewogCQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyNDNYX0NPTlRST0xfREVWQ09ORjEpOwpAQCAtMjk4LDYgKzMzNSwxMiBAQAogCXN0cnVjdCB0d2xfbW1jX2NvbnRyb2xsZXIgKmMgPSAmaHNtbWNbMV07CiAJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAorCS8qCisJICogQXNzdW1lIFRXTCBWTU1DMiAoaHNtbWNbMV0pIGlzIHVzZWQgb25seSB0byBwb3dlciB0aGUgY2FyZCAuLi4gT01BUAorCSAqIFZERFMgaXMgdXNlZCB0byBwb3dlciB0aGUgcGlucywgb3B0aW9uYWxseSB3aXRoIGEgdHJhbnNjZWl2ZXIgdG8KKwkgKiBzdXBwb3J0IGNhcmRzIHVzaW5nIHZvbHRhZ2VzIG90aGVyIHRoYW4gVkREUyAoMS44ViBub21pbmFsKS4gIFdoZW4gYQorCSAqIHRyYW5zY2VpdmVyIGlzIHVzZWQsIERBVDMuLjcgYXJlIG11eGVkIGFzIHRyYW5zY2VpdmVyIGNvbnRyb2wgcGlucy4KKwkgKi8KIAlpZiAocG93ZXJfb24pIHsKIAkJaWYgKG1tYy0+c2xvdHNbMF0uaW50ZXJuYWxfY2xvY2spIHsKIAkJCXUzMiByZWc7CkBAIC0zMTQsNiArMzU3LDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCB0d2xfbW1jM19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLAorCQlpbnQgdmRkKQoreworCS8qCisJICogQXNzdW1lIE1NQzMgaGFzIHNlbGYtcG93ZXJlZCBkZXZpY2UgY29ubmVjdGVkLCBmb3IgZXhhbXBsZSBvbi1ib2FyZAorCSAqIGNoaXAgd2l0aCBleHRlcm5hbCBwb3dlciBzb3VyY2UuCisJICovCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqaHNtbWNfZGF0YVtPTUFQMzRYWF9OUl9NTUNdIF9faW5pdGRhdGE7CiAKIHZvaWQgX19pbml0IHR3bDQwMzBfbW1jX2luaXQoc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyAqY29udHJvbGxlcnMpCkBAIC0zNDksMTMgKzQwMiwxMyBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJc3ByaW50Zih0d2wtPm5hbWUsICJtbWMlaXNsb3QlaSIsIGMtPm1tYywgMSk7CisJCWlmIChjLT5uYW1lKQorCQkJc3RybmNweSh0d2wtPm5hbWUsIGMtPm5hbWUsIEhTTU1DX05BTUVfTEVOKTsKKwkJZWxzZQorCQkJc25wcmludGYodHdsLT5uYW1lLCBBUlJBWV9TSVpFKHR3bC0+bmFtZSksCisJCQkJIm1tYyVpc2xvdCVpIiwgYy0+bW1jLCAxKTsKIAkJbW1jLT5zbG90c1swXS5uYW1lID0gdHdsLT5uYW1lOwogCQltbWMtPm5yX3Nsb3RzID0gMTsKLQkJbW1jLT5zbG90c1swXS5vY3JfbWFzayA9IE1NQ19WRERfMTY1XzE5NSB8Ci0JCQkJCU1NQ19WRERfMjZfMjcgfCBNTUNfVkREXzI3XzI4IHwKLQkJCQkJTU1DX1ZERF8yOV8zMCB8Ci0JCQkJCU1NQ19WRERfMzBfMzEgfCBNTUNfVkREXzMxXzMyOwogCQltbWMtPnNsb3RzWzBdLndpcmVzID0gYy0+d2lyZXM7CiAJCW1tYy0+c2xvdHNbMF0uaW50ZXJuYWxfY2xvY2sgPSAhYy0+ZXh0X2Nsb2NrOwogCQltbWMtPmRtYV9tYXNrID0gMHhmZmZmZmZmZjsKQEAgLTM2OSw3ICs0MjIsMTAgQEAKIAogCQkJbW1jLT5zbG90c1swXS5zd2l0Y2hfcGluID0gYy0+Z3Bpb19jZDsKIAkJCW1tYy0+c2xvdHNbMF0uY2FyZF9kZXRlY3RfaXJxID0gZ3Bpb190b19pcnEoYy0+Z3Bpb19jZCk7Ci0JCQltbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0ID0gdHdsX21tY19jYXJkX2RldGVjdDsKKwkJCWlmIChjLT5jb3Zlcl9vbmx5KQorCQkJCW1tYy0+c2xvdHNbMF0uZ2V0X2NvdmVyX3N0YXRlID0gdHdsX21tY19nZXRfY292ZXJfc3RhdGU7CisJCQllbHNlCisJCQkJbW1jLT5zbG90c1swXS5jYXJkX2RldGVjdCA9IHR3bF9tbWNfY2FyZF9kZXRlY3Q7CiAJCX0gZWxzZQogCQkJbW1jLT5zbG90c1swXS5zd2l0Y2hfcGluID0gLUVJTlZBTDsKIApAQCAtMzg1LDE1ICs0NDEsMjQgQEAKIAogCQkvKiBOT1RFOiAgd2UgYXNzdW1lIE9NQVAncyBNTUMxIGFuZCBNTUMyIHVzZQogCQkgKiB0aGUgVFdMNDAzMCdzIFZNTUMxIGFuZCBWTU1DMiwgcmVzcGVjdGl2ZWx5OwotCQkgKiBhbmQgdGhhdCBPTUFQJ3MgTU1DMyBpc24ndCB1c2VkLgorCQkgKiBhbmQgdGhhdCBNTUMzIGRldmljZSBoYXMgaXQncyBvd24gcG93ZXIgc291cmNlLgogCQkgKi8KIAogCQlzd2l0Y2ggKGMtPm1tYykgewogCQljYXNlIDE6CiAJCQltbWMtPnNsb3RzWzBdLnNldF9wb3dlciA9IHR3bF9tbWMxX3NldF9wb3dlcjsKKwkJCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBNTUMxX09DUjsKIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQltbWMtPnNsb3RzWzBdLnNldF9wb3dlciA9IHR3bF9tbWMyX3NldF9wb3dlcjsKKwkJCWlmIChjLT50cmFuc2NlaXZlcikKKwkJCQltbWMtPnNsb3RzWzBdLm9jcl9tYXNrID0gTU1DMl9PQ1I7CisJCQllbHNlCisJCQkJbW1jLT5zbG90c1swXS5vY3JfbWFzayA9IE1NQ19WRERfMTY1XzE5NTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQltbWMtPnNsb3RzWzBdLnNldF9wb3dlciA9IHR3bF9tbWMzX3NldF9wb3dlcjsKKwkJCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBNTUNfVkREXzE2NV8xOTU7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXByX2VycigiTU1DJWQgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkIVxuIiwgYy0+bW1jKTsKQEAgLTQwNCw2ICs0NjksMTUgQEAKIAl9CiAKIAlvbWFwMl9pbml0X21tYyhoc21tY19kYXRhLCBPTUFQMzRYWF9OUl9NTUMpOworCisJLyogcGFzcyB0aGUgZGV2aWNlIG5vZGVzIGJhY2sgdG8gYm9hcmQgc2V0dXAgY29kZSAqLworCWZvciAoYyA9IGNvbnRyb2xsZXJzOyBjLT5tbWM7IGMrKykgeworCQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaHNtbWNfZGF0YVtjLT5tbWMgLSAxXTsKKworCQlpZiAoIWMtPm1tYyB8fCBjLT5tbWMgPiBucl9oc21tYykKKwkJCWNvbnRpbnVlOworCQljLT5kZXYgPSBtbWMtPmRldjsKKwl9CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5oCmluZGV4IGUxYzgwNzYuLmVhNTllODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmgKQEAgLTksOSArOSwxMyBAQAogc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyB7CiAJdTgJbW1jOwkJLyogY29udHJvbGxlciAxLzIvMyAqLwogCXU4CXdpcmVzOwkJLyogMS80Lzggd2lyZXMgKi8KKwlib29sCXRyYW5zY2VpdmVyOwkvKiBNTUMtMiBvcHRpb24gKi8KKwlib29sCWV4dF9jbG9jazsJLyogdXNlIGV4dGVybmFsIHBpbiBmb3IgaW5wdXQgY2xvY2sgKi8KKwlib29sCWNvdmVyX29ubHk7CS8qIE5vIGNhcmQgZGV0ZWN0IC0ganVzdCBjb3ZlciBzd2l0Y2ggKi8KIAlpbnQJZ3Bpb19jZDsJLyogb3IgLUVJTlZBTCAqLwogCWludAlncGlvX3dwOwkvKiBvciAtRUlOVkFMICovCi0JaW50CWV4dF9jbG9jazoxOwkvKiB1c2UgZXh0ZXJuYWwgcGluIGZvciBpbnB1dCBjbG9jayAqLworCWNoYXIJKm5hbWU7CQkvKiBvciBOVUxMIGZvciBkZWZhdWx0ICovCisJc3RydWN0IGRldmljZSAqZGV2OwkvKiByZXR1cm5lZDogcG9pbnRlciB0byBtbWMgYWRhcHRlciAqLwogfTsKIAogI2lmCWRlZmluZWQoQ09ORklHX1RXTDQwMzBfQ09SRSkgJiYgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggZGFjYjQxZi4uMDI2YzRmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC00NTMsMTAgKzQ1MywzNyBAQAogCiAKIC8qIDM0WFggR1BJTyAtIGJpZGlyZWN0aW9uYWwsIHVubGVzcyB0aGUgbmFtZSBoYXMgYW4gIl9PVVQiIHN1ZmZpeC4KKyAqIChBbHdheXMgc3BlY2lmeSBQSU5fSU5QVVQsIGV4Y2VwdCBmb3IgbmFtZXMgc3VmZml4ZWQgYnkgIl9PVVQiLikKICAqIE5vIGludGVybmFsIHB1bGx1cC9wdWxsZG93biB3aXRob3V0ICJfVVAiIG9yICJfRE9XTiIgc3VmZml4LgogICovCitNVVhfQ0ZHXzM0WFgoIkFGMjZfMzRYWF9HUElPMCIsIDB4MWUwLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIkFGMjJfMzRYWF9HUElPOSIsIDB4YTE4LAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiBNVVhfQ0ZHXzM0WFgoIkFIOF8zNFhYX0dQSU8yOSIsIDB4NWZhLAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIlU4XzM0WFhfR1BJTzU0X09VVCIsIDB4MGI0LAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fT1VUUFVUKQorTVVYX0NGR18zNFhYKCJVOF8zNFhYX0dQSU81NF9ET1dOIiwgMHgwYjQsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVF9QVUxMRE9XTikKK01VWF9DRkdfMzRYWCgiTDhfMzRYWF9HUElPNjMiLCAweDBjZSwKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQorTVVYX0NGR18zNFhYKCJHMjVfMzRYWF9HUElPODZfT1VUIiwgMHgwZmMsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCitNVVhfQ0ZHXzM0WFgoIkFHNF8zNFhYX0dQSU8xMzRfT1VUIiwgMHgxNjAsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCitNVVhfQ0ZHXzM0WFgoIkFFNF8zNFhYX0dQSU8xMzZfT1VUIiwgMHgxNjQsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9PVVRQVVQpCitNVVhfQ0ZHXzM0WFgoIkFGNl8zNFhYX0dQSU8xNDBfVVAiLCAweDE2YywKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUX1BVTExVUCkKK01VWF9DRkdfMzRYWCgiQUU2XzM0WFhfR1BJTzE0MSIsIDB4MTZlLAorCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCitNVVhfQ0ZHXzM0WFgoIkFGNV8zNFhYX0dQSU8xNDIiLCAweDE3MCwKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX0lOUFVUKQorTVVYX0NGR18zNFhYKCJBRTVfMzRYWF9HUElPMTQzIiwgMHgxNzIsCisJCU9NQVAzNFhYX01VWF9NT0RFNCB8IE9NQVAzNFhYX1BJTl9JTlBVVCkKK01VWF9DRkdfMzRYWCgiSDE5XzM0WFhfR1BJTzE2NF9PVVQiLCAweDE5YywKKwkJT01BUDM0WFhfTVVYX01PREU0IHwgT01BUDM0WFhfUElOX09VVFBVVCkKIE1VWF9DRkdfMzRYWCgiSjI1XzM0WFhfR1BJTzE3MCIsIDB4MWM2LAogCQlPTUFQMzRYWF9NVVhfTU9ERTQgfCBPTUFQMzRYWF9QSU5fSU5QVVQpCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCmluZGV4IDU1MzYxYzEuLmVhOGNlYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAogfTsKIAotaW50IF9faW5pdCBvbWFwMl9wbV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBvbWFwMl9wbV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaAppbmRleCAxZTE1MWZhLi42OTE0NzBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zLmgKQEAgLTE3MSwxMyArMTcxLDE5IEBACiAJJml2YTJfcHdyZG0sCiAJJm1wdV8zNHh4X3B3cmRtLAogCSZuZW9uX3B3cmRtLAotCSZjb3JlXzM0eHhfcHdyZG0sCisJJmNvcmVfMzR4eF9wcmVfZXMzXzFfcHdyZG0sCisJJmNvcmVfMzR4eF9lczNfMV9wd3JkbSwKIAkmY2FtX3B3cmRtLAogCSZkc3NfcHdyZG0sCiAJJnBlcl9wd3JkbSwKIAkmZW11X3B3cmRtLAogCSZzZ3hfcHdyZG0sCiAJJnVzYmhvc3RfcHdyZG0sCisJJmRwbGwxX3B3cmRtLAorCSZkcGxsMl9wd3JkbSwKKwkmZHBsbDNfcHdyZG0sCisJJmRwbGw0X3B3cmRtLAorCSZkcGxsNV9wd3JkbSwKICNlbmRpZgogCiAJTlVMTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczM0eHguaAppbmRleCBmNTczZjcxLi40ZGNmOTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluczM0eHguaApAQCAtMjAwLDEwICsyMDAsMTIgQEAKIH07CiAKIC8qIE5vIHdrZGVwcyBvciBzbGVlcGRlcHMgZm9yIDM0eHggY29yZSBhcHBhcmVudGx5ICovCi1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfMzR4eF9wd3JkbSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY29yZV8zNHh4X3ByZV9lczNfMV9wd3JkbSA9IHsKIAkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMxIHwKKwkJCQkJICAgQ0hJUF9JU19PTUFQMzQzMEVTMiB8CisJCQkJCSAgIENISVBfSVNfT01BUDM0MzBFUzNfMCksCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5kZXBfYml0CSAgPSBPTUFQMzQzMF9FTl9DT1JFX1NISUZULAogCS5iYW5rcwkJICA9IDIsCkBAIC0yMTcsNiArMjE5LDI1IEBACiAJfSwKIH07CiAKKy8qIE5vIHdrZGVwcyBvciBzbGVlcGRlcHMgZm9yIDM0eHggY29yZSBhcHBhcmVudGx5ICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfMzR4eF9lczNfMV9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMzXzEpLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkuZGVwX2JpdAkgID0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKKwkuZmxhZ3MJCSAgPSBQV1JETV9IQVNfSERXUl9TQVIsIC8qIGZvciBVU0JUTEwgb25seSAqLworCS5iYW5rcwkJICA9IDIsCisJLnB3cnN0c19tZW1fcmV0CSAgPSB7CisJCVswXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMVJFVFNUQVRFICovCisJCVsxXSA9IFBXUlNUU19PRkZfUkVULAkgLyogTUVNMlJFVFNUQVRFICovCisJfSwKKwkucHdyc3RzX21lbV9vbgkgID0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVF9PTiwgLyogTUVNMU9OU1RBVEUgKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVRfT04sIC8qIE1FTTJPTlNUQVRFICovCisJfSwKK307CisKIC8qIEFub3RoZXIgY2FzZSBvZiBiaXQgbmFtZSBjb2xsaXNpb25zIGJldHdlZW4gc2V2ZXJhbCByZWdpc3RlcnM6IEVOX0RTUyAqLwogc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkc3NfcHdyZG0gPSB7CiAJLm5hbWUJCSAgPSAiZHNzX3B3cmRtIiwKQEAgLTIzNiwxNCArMjU3LDE5IEBACiAJfSwKIH07CiAKKy8qCisgKiBBbHRob3VnaCB0aGUgMzRYWCBUUk0gUmV2IEsgVGFibGUgNC0zNzEgbm90ZXMgdGhhdCByZXRlbnRpb24gaXMgYQorICogcG9zc2libGUgU0dYIHBvd2Vyc3RhdGUsIHRoZSBTR1ggZGV2aWNlIGl0c2VsZiBkb2VzIG5vdCBzdXBwb3J0CisgKiByZXRlbnRpb24uCisgKi8KIHN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gc2d4X3B3cmRtID0gewogCS5uYW1lCQkgID0gInNneF9wd3JkbSIsCiAJLnByY21fb2ZmcwkgID0gT01BUDM0MzBFUzJfU0dYX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMyKSwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKIAkud2tkZXBfc3JjcwkgID0gZ2Z4X3NneF93a2RlcHMsCiAJLnNsZWVwZGVwX3NyY3MJICA9IGNhbV9nZnhfc2xlZXBkZXBzLAogCS8qIFhYWCBUaGlzIGlzIGFjY3VyYXRlIGZvciAzNDMwIFNHWCwgYnV0IHdoYXQgYWJvdXQgR0ZYPyAqLwotCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9PTiwKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKIAkuYmFua3MJCSAgPSAxLAogCS5wd3JzdHNfbWVtX3JldAkgID0gewpAQCAtMzA3LDExICszMzMsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gdXNiaG9zdF9wd3JkbSA9IHsKIAkubmFtZQkJICA9ICJ1c2Job3N0X3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKLQkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwRVMyKSwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKIAkud2tkZXBfc3JjcwkgID0gcGVyX3VzYmhvc3Rfd2tkZXBzLAogCS5zbGVlcGRlcF9zcmNzCSAgPSBkc3NfcGVyX3VzYmhvc3Rfc2xlZXBkZXBzLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUkRNX1BPV0VSX1JFVCwKKwkuZmxhZ3MJCSAgPSBQV1JETV9IQVNfSERXUl9TQVIsIC8qIGZvciBVU0JIT1NUIGN0cmxyIG9ubHkgKi8KIAkuYmFua3MJCSAgPSAxLAogCS5wd3JzdHNfbWVtX3JldAkgID0gewogCQlbMF0gPSBQV1JETV9QT1dFUl9SRVQsIC8qIE1FTVJFVFNUQVRFICovCkBAIC0zMjEsNiArMzQ4LDM3IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHBsbDFfcHdyZG0gPSB7CisJLm5hbWUJCT0gImRwbGwxX3B3cmRtIiwKKwkucHJjbV9vZmZzCT0gTVBVX01PRCwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRwbGwyX3B3cmRtID0geworCS5uYW1lCQk9ICJkcGxsMl9wd3JkbSIsCisJLnByY21fb2Zmcwk9IE9NQVAzNDMwX0lWQTJfTU9ELAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gZHBsbDNfcHdyZG0gPSB7CisJLm5hbWUJCT0gImRwbGwzX3B3cmRtIiwKKwkucHJjbV9vZmZzCT0gUExMX01PRCwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCit9OworCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGRwbGw0X3B3cmRtID0geworCS5uYW1lCQk9ICJkcGxsNF9wd3JkbSIsCisJLnByY21fb2Zmcwk9IFBMTF9NT0QsCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkcGxsNV9wd3JkbSA9IHsKKwkubmFtZQkJPSAiZHBsbDVfcHdyZG0iLAorCS5wcmNtX29mZnMJPSBQTExfTU9ELAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKK307CisKKwogI2VuZGlmICAgIC8qIENPTkZJR19BUkNIX09NQVAzNFhYICovCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCmluZGV4IDRhMzI4MjIuLjgxMmQ1MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKQEAgLTExMywzMyArMTEzLDU4IEBACiAjZGVmaW5lIE9NQVAyNDMwX0VOX1VTQkhTCQkJCSgxIDw8IDYpCiAKIC8qIENNX0lETEVTVDFfQ09SRSwgUE1fV0tTVDFfQ09SRSBzaGFyZWQgYml0cyAqLwotI2RlZmluZSBPTUFQMjQyMF9TVF9NTUMJCQkJCSgxIDw8IDI2KQotI2RlZmluZSBPTUFQMjRYWF9TVF9VQVJUMgkJCQkoMSA8PCAyMikKLSNkZWZpbmUgT01BUDI0WFhfU1RfVUFSVDEJCQkJKDEgPDwgMjEpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX01DU1BJMgkJCQkoMSA8PCAxOCkKLSNkZWZpbmUgT01BUDI0WFhfU1RfTUNTUEkxCQkJCSgxIDw8IDE3KQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxMgkJCQkoMSA8PCAxNCkKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTEJCQkJKDEgPDwgMTMpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDEwCQkJCSgxIDw8IDEyKQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ5CQkJCSgxIDw8IDExKQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ4CQkJCSgxIDw8IDEwKQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ3CQkJCSgxIDw8IDkpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDYJCQkJKDEgPDwgOCkKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNQkJCQkoMSA8PCA3KQotI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ0CQkJCSgxIDw8IDYpCi0jZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDMJCQkJKDEgPDwgNSkKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMgkJCQkoMSA8PCA0KQotI2RlZmluZSBPTUFQMjQyMF9TVF9WTFlOUQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMjQyMF9TVF9NTUNfU0hJRlQJCQkJMjYKKyNkZWZpbmUgT01BUDI0MjBfU1RfTU1DX01BU0sJCQkJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQyX1NISUZUCQkJCTIyCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQyX01BU0sJCQkJKDEgPDwgMjIpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQxX1NISUZUCQkJCTIxCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQxX01BU0sJCQkJKDEgPDwgMjEpCisjZGVmaW5lIE9NQVAyNFhYX1NUX01DU1BJMl9TSElGVAkJCTE4CisjZGVmaW5lIE9NQVAyNFhYX1NUX01DU1BJMl9NQVNLCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTFfU0hJRlQJCQkxNworI2RlZmluZSBPTUFQMjRYWF9TVF9NQ1NQSTFfTUFTSwkJCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTJfU0hJRlQJCQkJMTQKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTJfTUFTSwkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTFfU0hJRlQJCQkJMTMKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTFfTUFTSwkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTBfU0hJRlQJCQkJMTIKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMTBfTUFTSwkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUOV9TSElGVAkJCQkxMQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ5X01BU0sJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDhfU0hJRlQJCQkJMTAKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUOF9NQVNLCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ3X1NISUZUCQkJCTkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUN19NQVNLCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDZfU0hJRlQJCQkJOAorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ2X01BU0sJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNV9TSElGVAkJCQk3CisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDVfTUFTSwkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQ0X1NISUZUCQkJCTYKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUNF9NQVNLCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDNfU0hJRlQJCQkJNQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQzX01BU0sJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMl9TSElGVAkJCQk0CisjZGVmaW5lIE9NQVAyNFhYX1NUX0dQVDJfTUFTSwkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMjQyMF9TVF9WTFlOUV9TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAyNDIwX1NUX1ZMWU5RX01BU0sJCQkJKDEgPDwgMykKIAogLyogQ01fSURMRVNUMl9DT1JFLCBQTV9XS1NUMl9DT1JFIHNoYXJlZCBiaXRzICovCi0jZGVmaW5lIE9NQVAyNDMwX1NUX01ETV9JTlRDCQkJCSgxIDw8IDExKQotI2RlZmluZSBPTUFQMjQzMF9TVF9HUElPNQkJCQkoMSA8PCAxMCkKLSNkZWZpbmUgT01BUDI0MzBfU1RfTUNTUEkzCQkJCSgxIDw8IDkpCi0jZGVmaW5lIE9NQVAyNDMwX1NUX01NQ0hTMgkJCQkoMSA8PCA4KQotI2RlZmluZSBPTUFQMjQzMF9TVF9NTUNIUzEJCQkJKDEgPDwgNykKLSNkZWZpbmUgT01BUDI0MzBfU1RfVVNCSFMJCQkJKDEgPDwgNikKLSNkZWZpbmUgT01BUDI0WFhfU1RfVUFSVDMJCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDI0WFhfU1RfVVNCCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjQzMF9TVF9NRE1fSU5UQ19TSElGVAkJCTExCisjZGVmaW5lIE9NQVAyNDMwX1NUX01ETV9JTlRDX01BU0sJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDI0MzBfU1RfR1BJTzVfU0hJRlQJCQkJMTAKKyNkZWZpbmUgT01BUDI0MzBfU1RfR1BJTzVfTUFTSwkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDI0MzBfU1RfTUNTUEkzX1NISUZUCQkJOQorI2RlZmluZSBPTUFQMjQzMF9TVF9NQ1NQSTNfTUFTSwkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMjQzMF9TVF9NTUNIUzJfU0hJRlQJCQk4CisjZGVmaW5lIE9NQVAyNDMwX1NUX01NQ0hTMl9NQVNLCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAyNDMwX1NUX01NQ0hTMV9TSElGVAkJCTcKKyNkZWZpbmUgT01BUDI0MzBfU1RfTU1DSFMxX01BU0sJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDI0MzBfU1RfVVNCSFNfU0hJRlQJCQkJNgorI2RlZmluZSBPTUFQMjQzMF9TVF9VU0JIU19NQVNLCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAyNFhYX1NUX1VBUlQzX1NISUZUCQkJCTIKKyNkZWZpbmUgT01BUDI0WFhfU1RfVUFSVDNfTUFTSwkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9TVF9VU0JfU0hJRlQJCQkJMAorI2RlZmluZSBPTUFQMjRYWF9TVF9VU0JfTUFTSwkJCQkoMSA8PCAwKQogCiAvKiBDTV9GQ0xLRU5fV0tVUCwgQ01fSUNMS0VOX1dLVVAsIFBNX1dLRU5fV0tVUCBzaGFyZWQgYml0cyAqLwogI2RlZmluZSBPTUFQMjRYWF9FTl9HUElPU19TSElGVAkJCQkyCkBAIC0xNDgsMTEgKzE3MywxMyBAQAogI2RlZmluZSBPTUFQMjRYWF9FTl9HUFQxCQkJCSgxIDw8IDApCiAKIC8qIFBNX1dLU1RfV0tVUCwgQ01fSURMRVNUX1dLVVAgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BJT1MJCQkJKDEgPDwgMikKLSNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUElPU19TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUElPU19NQVNLCQkJCTIKKyNkZWZpbmUgT01BUDI0WFhfU1RfR1BUMV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQMjRYWF9TVF9HUFQxX01BU0sJCQkJMAogCiAvKiBDTV9JRExFU1RfTURNIGFuZCBQTV9XS1NUX01ETSBzaGFyZWQgYml0cyAqLwotI2RlZmluZSBPTUFQMjQzMF9TVF9NRE0JCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAyNDMwX1NUX01ETV9TSElGVAkJCQkoMSA8PCAwKQogCiAKIC8qIDM0MzAgcmVnaXN0ZXIgYml0cyBzaGFyZWQgYmV0d2VlbiBDTSAmIFBSTSByZWdpc3RlcnMgKi8KQEAgLTIwNSwyNCArMjMyLDQ2IEBACiAjZGVmaW5lIE9NQVAzNDMwX0VOX0hTT1RHVVNCX1NISUZUCQkJCTQKIAogLyogUE1fV0tTVDFfQ09SRSwgQ01fSURMRVNUMV9DT1JFIHNoYXJlZCBiaXRzICovCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01NQzIJCQkJKDEgPDwgMjUpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01NQzEJCQkJKDEgPDwgMjQpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJNAkJCQkoMSA8PCAyMSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEkzCQkJCSgxIDw8IDIwKQotI2RlZmluZSBPTUFQMzQzMF9TVF9NQ1NQSTIJCQkJKDEgPDwgMTkpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJMQkJCQkoMSA8PCAxOCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfSTJDMwkJCQkoMSA8PCAxNykKLSNkZWZpbmUgT01BUDM0MzBfU1RfSTJDMgkJCQkoMSA8PCAxNikKLSNkZWZpbmUgT01BUDM0MzBfU1RfSTJDMQkJCQkoMSA8PCAxNSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfVUFSVDIJCQkJKDEgPDwgMTQpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQxCQkJCSgxIDw8IDEzKQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMQkJCQkoMSA8PCAxMikKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMTAJCQkJKDEgPDwgMTEpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQNQkJCQkoMSA8PCAxMCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfTUNCU1AxCQkJCSgxIDw8IDkpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0ZTSE9TVFVTQgkJCQkoMSA8PCA1KQotI2RlZmluZSBPTUFQMzQzMF9TVF9IU09UR1VTQgkJCQkoMSA8PCA0KQotI2RlZmluZSBPTUFQMzQzMF9TVF9EMkQJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01NQzJfU0hJRlQJCQkJMjUKKyNkZWZpbmUgT01BUDM0MzBfU1RfTU1DMl9NQVNLCQkJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQMzQzMF9TVF9NTUMxX1NISUZUCQkJCTI0CisjZGVmaW5lIE9NQVAzNDMwX1NUX01NQzFfTUFTSwkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEk0X1NISUZUCQkJMjEKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEk0X01BU0sJCQkJKDEgPDwgMjEpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJM19TSElGVAkJCTIwCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DU1BJM19NQVNLCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ1NQSTJfU0hJRlQJCQkxOQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ1NQSTJfTUFTSwkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEkxX1NISUZUCQkJMTgKKyNkZWZpbmUgT01BUDM0MzBfU1RfTUNTUEkxX01BU0sJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0kyQzNfU0hJRlQJCQkJMTcKKyNkZWZpbmUgT01BUDM0MzBfU1RfSTJDM19NQVNLCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQMzQzMF9TVF9JMkMyX1NISUZUCQkJCTE2CisjZGVmaW5lIE9NQVAzNDMwX1NUX0kyQzJfTUFTSwkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfU1RfSTJDMV9TSElGVAkJCQkxNQorI2RlZmluZSBPTUFQMzQzMF9TVF9JMkMxX01BU0sJCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQyX1NISUZUCQkJCTE0CisjZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQyX01BU0sJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQxX1NISUZUCQkJCTEzCisjZGVmaW5lIE9NQVAzNDMwX1NUX1VBUlQxX01BU0sJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDExX1NISUZUCQkJCTEyCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDExX01BU0sJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDEwX1NISUZUCQkJCTExCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDEwX01BU0sJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQNV9TSElGVAkJCTEwCisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQNV9NQVNLCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQMzQzMF9TVF9NQ0JTUDFfU0hJRlQJCQk5CisjZGVmaW5lIE9NQVAzNDMwX1NUX01DQlNQMV9NQVNLCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVAzNDMwRVMxX1NUX0ZTSE9TVFVTQl9TSElGVAkJCTUKKyNkZWZpbmUgT01BUDM0MzBFUzFfU1RfRlNIT1NUVVNCX01BU0sJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMEVTMV9TVF9IU09UR1VTQl9TSElGVAkJCTQKKyNkZWZpbmUgT01BUDM0MzBFUzFfU1RfSFNPVEdVU0JfTUFTSwkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVAzNDMwRVMyX1NUX0hTT1RHVVNCX0lETEVfU0hJRlQJCTUKKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfSFNPVEdVU0JfSURMRV9NQVNLCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9IU09UR1VTQl9TVERCWV9TSElGVAkJNAorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9IU09UR1VTQl9TVERCWV9NQVNLCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQMzQzMF9TVF9EMkRfU0hJRlQJCQkJMworI2RlZmluZSBPTUFQMzQzMF9TVF9EMkRfTUFTSwkJCQkoMSA8PCAzKQogCiAvKiBDTV9GQ0xLRU5fV0tVUCwgQ01fSUNMS0VOX1dLVVAsIFBNX1dLRU5fV0tVUCBzaGFyZWQgYml0cyAqLwogI2RlZmluZSBPTUFQMzQzMF9FTl9HUElPMQkJCQkoMSA8PCAzKQpAQCAtMjQxLDExICsyOTAsMTYgQEAKICNkZWZpbmUgT01BUDM0MzBfRU5fR1BUMTJfU0hJRlQJCQkJMQogCiAvKiBDTV9JRExFU1RfV0tVUCwgUE1fV0tTVF9XS1VQIHNoYXJlZCBiaXRzICovCi0jZGVmaW5lIE9NQVAzNDMwX1NUX1NSMgkJCQkJKDEgPDwgNykKLSNkZWZpbmUgT01BUDM0MzBfU1RfU1IxCQkJCQkoMSA8PCA2KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPMQkJCQkoMSA8PCAzKQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMgkJCQkoMSA8PCAxKQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NSMl9TSElGVAkJCQk3CisjZGVmaW5lIE9NQVAzNDMwX1NUX1NSMl9NQVNLCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVAzNDMwX1NUX1NSMV9TSElGVAkJCQk2CisjZGVmaW5lIE9NQVAzNDMwX1NUX1NSMV9NQVNLCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQSU8xX1NISUZUCQkJCTMKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzFfTUFTSwkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQxMl9TSElGVAkJCQkxCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDEyX01BU0sJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMV9TSElGVAkJCQkwCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDFfTUFTSwkJCQkoMSA8PCAwKQogCiAvKgogICogQ01fU0xFRVBERVBfR0ZYLCBDTV9TTEVFUERFUF9EU1MsIENNX1NMRUVQREVQX0NBTSwKQEAgLTI5NiwyMCArMzUwLDM0IEBACiAjZGVmaW5lIE9NQVAzNDMwX0VOX01DQlNQMl9TSElGVAkJCTAKIAogLyogQ01fSURMRVNUX1BFUiwgUE1fV0tTVF9QRVIgc2hhcmVkIGJpdHMgKi8KLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzYJCQkJKDEgPDwgMTcpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQSU81CQkJCSgxIDw8IDE2KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNAkJCQkoMSA8PCAxNSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BJTzMJCQkJKDEgPDwgMTQpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQSU8yCQkJCSgxIDw8IDEzKQotI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUMwkJCQkoMSA8PCAxMSkKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUOQkJCQkoMSA8PCAxMCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUOAkJCQkoMSA8PCA5KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ3CQkJCSgxIDw8IDgpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDYJCQkJKDEgPDwgNykKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUNQkJCQkoMSA8PCA2KQotI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ0CQkJCSgxIDw8IDUpCi0jZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDMJCQkJKDEgPDwgNCkKLSNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMgkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNl9TSElGVAkJCQkxNworI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNl9NQVNLCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNV9TSElGVAkJCQkxNgorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNV9NQVNLCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNF9TSElGVAkJCQkxNQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPNF9NQVNLCQkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPM19TSElGVAkJCQkxNAorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPM19NQVNLCQkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPMl9TSElGVAkJCQkxMworI2RlZmluZSBPTUFQMzQzMF9TVF9HUElPMl9NQVNLCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUM19TSElGVAkJCQkxMQorI2RlZmluZSBPTUFQMzQzMF9TVF9VQVJUM19NQVNLCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ5X1NISUZUCQkJCTEwCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDlfTUFTSwkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUOF9TSElGVAkJCQk5CisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDhfTUFTSwkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ3X1NISUZUCQkJCTgKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUN19NQVNLCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDZfU0hJRlQJCQkJNworI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ2X01BU0sJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUNV9TSElGVAkJCQk2CisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDVfTUFTSwkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQ0X1NISUZUCQkJCTUKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUNF9NQVNLCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDNfU0hJRlQJCQkJNAorI2RlZmluZSBPTUFQMzQzMF9TVF9HUFQzX01BU0sJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDM0MzBfU1RfR1BUMl9TSElGVAkJCQkzCisjZGVmaW5lIE9NQVAzNDMwX1NUX0dQVDJfTUFTSwkJCQkoMSA8PCAzKQogCiAvKiBDTV9TTEVFUERFUF9QRVIsIFBNX1dLREVQX0lWQTIsIFBNX1dLREVQX01QVSwgUE1fV0tERVBfUEVSIHNoYXJlZCBiaXRzICovCiAjZGVmaW5lIE9NQVAzNDMwX0VOX0NPUkVfU0hJRlQJCQkJMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0tcmVnYml0cy0zNHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaAppbmRleCA1YjVlY2ZlLi5jNmE3OTQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTM0eHguaApAQCAtMzY2LDYgKzM2Niw3IEBACiAKIC8qIFBNX1dLRU5fV0tVUCBzcGVjaWZpYyBiaXRzICovCiAjZGVmaW5lIE9NQVAzNDMwX0VOX0lPCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQMzQzMF9FTl9HUElPMQkJCQkoMSA8PCAzKQogCiAvKiBQTV9NUFVHUlBTRUxfV0tVUCBzcGVjaWZpYyBiaXRzICovCiAKQEAgLTQ1Miw2ICs0NTMsMTQgQEAKICNkZWZpbmUgT01BUDM0MzBfQ01EUkEwX01BU0sJCQkJKDB4ZmYgPDwgMCkKIAogLyogUFJNX1ZDX0NNRF9WQUxfMCBzcGVjaWZpYyBiaXRzICovCisjZGVmaW5lIE9NQVAzNDMwX1ZDX0NNRF9PTl9TSElGVAkJCTI0CisjZGVmaW5lIE9NQVAzNDMwX1ZDX0NNRF9PTl9NQVNLCQkJCSgweEZGIDw8IDI0KQorI2RlZmluZSBPTUFQMzQzMF9WQ19DTURfT05MUF9TSElGVAkJCTE2CisjZGVmaW5lIE9NQVAzNDMwX1ZDX0NNRF9PTkxQX01BU0sJCQkoMHhGRiA8PCAxNikKKyNkZWZpbmUgT01BUDM0MzBfVkNfQ01EX1JFVF9TSElGVAkJCTgKKyNkZWZpbmUgT01BUDM0MzBfVkNfQ01EX1JFVF9NQVNLCQkJKDB4RkYgPDwgOCkKKyNkZWZpbmUgT01BUDM0MzBfVkNfQ01EX09GRl9TSElGVAkJCTAKKyNkZWZpbmUgT01BUDM0MzBfVkNfQ01EX09GRl9NQVNLCQkJKDB4RkYgPDwgMCkKIAogLyogUFJNX1ZDX0NNRF9WQUxfMSBzcGVjaWZpYyBiaXRzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCmluZGV4IGU0ZGM0YjEuLjgyNmQzMjZiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCkBAIC0xNDEsNiArMTQxLDE5IEBACiAjZGVmaW5lIFBNX1BXU1RDVFJMCQkJCQkweDAwZTAKICNkZWZpbmUgUE1fUFdTVFNUCQkJCQkweDAwZTQKIAorLyogT21hcDIgc3BlY2lmaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIE9NQVAyNFhYX1BNX1dLRU4yCQkJCTB4MDBhNAorI2RlZmluZSBPTUFQMjRYWF9QTV9XS1NUMgkJCQkweDAwYjQKKworI2RlZmluZSBPTUFQMjRYWF9QUkNNX0lSUVNUQVRVU19EU1AJCQkweDAwZjAJLyogSVZBIG1vZCAqLworI2RlZmluZSBPTUFQMjRYWF9QUkNNX0lSUUVOQUJMRV9EU1AJCQkweDAwZjQJLyogSVZBIG1vZCAqLworI2RlZmluZSBPTUFQMjRYWF9QUkNNX0lSUVNUQVRVU19JVkEJCQkweDAwZjgKKyNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFFTkFCTEVfSVZBCQkJMHgwMGZjCisKKy8qIE9tYXAzIHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBPTUFQMzQzMEVTMl9QTV9XS0VOMwkJCQkweDAwZjAKKyNkZWZpbmUgT01BUDM0MzBFUzJfUE1fV0tTVDMJCQkJMHgwMGI4CisKICNkZWZpbmUgT01BUDM0MzBfUE1fTVBVR1JQU0VMCQkJCTB4MDBhNAogI2RlZmluZSBPTUFQMzQzMF9QTV9NUFVHUlBTRUwxCQkJCU9NQVAzNDMwX1BNX01QVUdSUFNFTAogCkBAIC0xNTMsMTYgKzE2Niw2IEBACiAjZGVmaW5lIE9NQVAzNDMwX1BSTV9JUlFFTkFCTEVfSVZBMgkJCTB4MDBmYwogCiAKLS8qIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyByZWdpc3RlcnMgKi8KLQotI2RlZmluZSBPTUFQMjRYWF9QTV9XS0VOMgkJCQkweDAwYTQKLSNkZWZpbmUgT01BUDI0WFhfUE1fV0tTVDIJCQkJMHgwMGI0Ci0KLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFTVEFUVVNfRFNQCQkJMHgwMGYwCS8qIElWQSBtb2QgKi8KLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFFTkFCTEVfRFNQCQkJMHgwMGY0CS8qIElWQSBtb2QgKi8KLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9JUlFTVEFUVVNfSVZBCQkJMHgwMGY4Ci0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fSVJRRU5BQkxFX0lWQQkJCTB4MDBmYwotCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KIAogLyogUG93ZXIvcmVzZXQgbWFuYWdlbWVudCBkb21haW4gcmVnaXN0ZXIgZ2V0L3NldCAqLwpAQCAtMjI4LDcgKzIzMSw2IEBACiAjZGVmaW5lIE9NQVBfUlNUVElNRTFfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQX1JTVFRJTUUxX01BU0sJCQkJKDB4ZmYgPDwgMCkKIAotCiAvKiBQUk1fUlNUQ1RSTCAqLwogLyogTmFtZWQgUk1fUlNUQ1RSTF9XS1VQIG9uIHRoZSAyNHh4ICovCiAvKiAyNDIwIGNhbGxzIFJTVF9EUExMMyAnUlNUX0RQTEwnICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMzAwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuYwpAQCAtMCwwICsxLDkzIEBACisvKgorICogU01TL1NEUkMgKFNEUkFNIGNvbnRyb2xsZXIpIGNvbW1vbiBjb2RlIGZvciBPTUFQMi8zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4IFRleGFzIEluc3RydW1lbnRzIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CisgKiBQYXVsIFdhbG1zbGV5CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL3NyYW0uaD4KKworI2luY2x1ZGUgInBybS5oIgorCisjaW5jbHVkZSA8bWFjaC9zZHJjLmg+CisjaW5jbHVkZSAic2RyYy5oIgorCitzdGF0aWMgc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfaW5pdF9wYXJhbXM7CisKK3ZvaWQgX19pb21lbSAqb21hcDJfc2RyY19iYXNlOwordm9pZCBfX2lvbWVtICpvbWFwMl9zbXNfYmFzZTsKKworCisvKioKKyAqIG9tYXAyX3NkcmNfZ2V0X3BhcmFtcyAtIHJldHVybiBTRFJDIHJlZ2lzdGVyIHZhbHVlcyBmb3IgYSBnaXZlbiBjbG9jayByYXRlCisgKiBAcjogU0RSQyBjbG9jayByYXRlIChpbiBIeikKKyAqCisgKiBSZXR1cm4gcHJlLWNhbGN1bGF0ZWQgdmFsdWVzIGZvciB0aGUgU0RSQ19BQ1RJTV9DVFJMQSwKKyAqIFNEUkNfQUNUSU1fQ1RSTEIsIFNEUkNfUkZSX0NUUkwsIGFuZCBTRFJDX01SIHJlZ2lzdGVycywgZm9yIGEgZ2l2ZW4KKyAqIFNEUkMgY2xvY2sgcmF0ZSAncicuICBUaGVzZSBwYXJhbWV0ZXJzIGNvbnRyb2wgdmFyaW91cyB0aW1pbmcKKyAqIGRlbGF5cyBpbiB0aGUgU0RSQU0gY29udHJvbGxlciB0aGF0IGFyZSBleHByZXNzZWQgaW4gdGVybXMgb2YgdGhlCisgKiBudW1iZXIgb2YgU0RSQyBjbG9jayBjeWNsZXMgdG8gd2FpdDsgaGVuY2UgdGhlIGNsb2NrIHJhdGUKKyAqIGRlcGVuZGVuY3kuIE5vdGUgdGhhdCBzZHJjX2luaXRfcGFyYW1zIG11c3QgYmUgc29ydGVkIHJhdGUKKyAqIGRlc2NlbmRpbmcuICBBbHNvIGFzc3VtZXMgdGhhdCBib3RoIGNoaXAtc2VsZWN0cyB1c2UgdGhlIHNhbWUKKyAqIHRpbWluZyBwYXJhbWV0ZXJzLiAgUmV0dXJucyBhIHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICogdXBvbgorICogc3VjY2Vzcywgb3IgTlVMTCB1cG9uIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpvbWFwMl9zZHJjX2dldF9wYXJhbXModW5zaWduZWQgbG9uZyByKQoreworCXN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzcDsKKworCXNwID0gc2RyY19pbml0X3BhcmFtczsKKworCXdoaWxlIChzcC0+cmF0ZSAhPSByKQorCQlzcCsrOworCisJaWYgKCFzcC0+cmF0ZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gc3A7Cit9CisKKwordm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfc2RyYyhzdHJ1Y3Qgb21hcF9nbG9iYWxzICpvbWFwMl9nbG9iYWxzKQoreworCW9tYXAyX3NkcmNfYmFzZSA9IG9tYXAyX2dsb2JhbHMtPnNkcmM7CisJb21hcDJfc21zX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT5zbXM7Cit9CisKKy8qIHR1cm4gb24gc21hcnQgaWRsZSBtb2RlcyBmb3IgU0RSQU0gc2NoZWR1bGVyIGFuZCBjb250cm9sbGVyICovCit2b2lkIF9faW5pdCBvbWFwMl9zZHJjX2luaXQoc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNwKQoreworCXUzMiBsOworCisJbCA9IHNtc19yZWFkX3JlZyhTTVNfU1lTQ09ORklHKTsKKwlsICY9IH4oMHgzIDw8IDMpOworCWwgfD0gKDB4MiA8PCAzKTsKKwlzbXNfd3JpdGVfcmVnKGwsIFNNU19TWVNDT05GSUcpOworCisJbCA9IHNkcmNfcmVhZF9yZWcoU0RSQ19TWVNDT05GSUcpOworCWwgJj0gfigweDMgPDwgMyk7CisJbCB8PSAoMHgyIDw8IDMpOworCXNkcmNfd3JpdGVfcmVnKGwsIFNEUkNfU1lTQ09ORklHKTsKKworCXNkcmNfaW5pdF9wYXJhbXMgPSBzcDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2RyYzJ4eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWZkYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjMnh4eC5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjMnh4eC5jCisgKgorICogU0RSQU0gdGltaW5nIHJlbGF0ZWQgZnVuY3Rpb25zIGZvciBPTUFQMnh4eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwOCBUZXhhcyBJbnN0cnVtZW50cyBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPgorICogUGF1bCBXYWxtc2xleQorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvc3JhbS5oPgorCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlIDxtYWNoL3NkcmMuaD4KKyNpbmNsdWRlICJzZHJjLmgiCisKKy8qIE1lbW9yeSB0aW1pbmcsIERMTCBtb2RlIGZsYWdzICovCisjZGVmaW5lIE1fRERSCQkxCisjZGVmaW5lIE1fTE9DS19DVFJMCSgxIDw8IDIpCisjZGVmaW5lIE1fVU5MT0NLCTAKKyNkZWZpbmUgTV9MT0NLCQkxCisKKworc3RhdGljIHN0cnVjdCBtZW1vcnlfdGltaW5ncyBtZW1fdGltaW5nczsKK3N0YXRpYyB1MzIgY3Vycl9wZXJmX2xldmVsID0gQ09SRV9DTEtfU1JDX0RQTExfWDI7CisKK3N0YXRpYyB1MzIgb21hcDJ4eHhfc2RyY19nZXRfc2xvd19kbGxfY3RybCh2b2lkKQoreworCXJldHVybiBtZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsOworfQorCitzdGF0aWMgdTMyIG9tYXAyeHh4X3NkcmNfZ2V0X2Zhc3RfZGxsX2N0cmwodm9pZCkKK3sKKwlyZXR1cm4gbWVtX3RpbWluZ3MuZmFzdF9kbGxfY3RybDsKK30KKworc3RhdGljIHUzMiBvbWFwMnh4eF9zZHJjX2dldF90eXBlKHZvaWQpCit7CisJcmV0dXJuIG1lbV90aW1pbmdzLm1fdHlwZTsKK30KKworLyoKKyAqIENoZWNrIHRoZSBETEwgbG9jayBzdGF0ZSwgYW5kIHJldHVybiB0dWUgaWYgcnVubmluZyBpbiB1bmxvY2sgbW9kZS4KKyAqIFRoaXMgaXMgbmVlZGVkIHRvIGNvbXBlbnNhdGUgZm9yIHRoZSBzaGlmdGVkIERMTCB2YWx1ZSBpbiB1bmxvY2sgbW9kZS4KKyAqLwordTMyIG9tYXAyeHh4X3NkcmNfZGxsX2lzX3VubG9ja2VkKHZvaWQpCit7CisJLyogZGxsYSBhbmQgZGxsYiBhcmUgYSBzZXQgKi8KKwl1MzIgZGxsX3N0YXRlID0gc2RyY19yZWFkX3JlZyhTRFJDX0RMTEFfQ1RSTCk7CisKKwlpZiAoKGRsbF9zdGF0ZSAmICgxIDw8IDIpKSA9PSAoMSA8PCAyKSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoKKyAqICdsZXZlbCcgaXMgdGhlIHZhbHVlIHRvIHN0b3JlIHRvIENNX0NMS1NFTDJfUExMLkNPUkVfQ0xLX1NSQy4KKyAqIFByYWN0aWNhbCB2YWx1ZXMgYXJlIENPUkVfQ0xLX1NSQ19EUExMIChmb3IgQ09SRV9DTEsgPSBEUExMX0NMSykgb3IKKyAqIENPUkVfQ0xLX1NSQ19EUExMX1gyIChmb3IgQ09SRV9DTEsgPSAqIERQTExfQ0xLICogMikKKyAqCisgKiBVc2VkIGJ5IHRoZSBjbG9jayBmcmFtZXdvcmsgZHVyaW5nIENPUkUgRFBMTCBjaGFuZ2VzCisgKi8KK3UzMiBvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbSh1MzIgbGV2ZWwsIHUzMiBmb3JjZSkKK3sKKwl1MzIgZGxsX2N0cmwsIG1fdHlwZTsKKwl1MzIgcHJldiA9IGN1cnJfcGVyZl9sZXZlbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKChjdXJyX3BlcmZfbGV2ZWwgPT0gbGV2ZWwpICYmICFmb3JjZSkKKwkJcmV0dXJuIHByZXY7CisKKwlpZiAobGV2ZWwgPT0gQ09SRV9DTEtfU1JDX0RQTEwpCisJCWRsbF9jdHJsID0gb21hcDJ4eHhfc2RyY19nZXRfc2xvd19kbGxfY3RybCgpOworCWVsc2UgaWYgKGxldmVsID09IENPUkVfQ0xLX1NSQ19EUExMX1gyKQorCQlkbGxfY3RybCA9IG9tYXAyeHh4X3NkcmNfZ2V0X2Zhc3RfZGxsX2N0cmwoKTsKKwllbHNlCisJCXJldHVybiBwcmV2OworCisJbV90eXBlID0gb21hcDJ4eHhfc2RyY19nZXRfdHlwZSgpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fcmF3X3dyaXRlbCgweGZmZmYsIE9NQVAyNFhYX1BSQ01fVk9MVFNFVFVQKTsKKwlvbWFwMl9zcmFtX3JlcHJvZ3JhbV9zZHJjKGxldmVsLCBkbGxfY3RybCwgbV90eXBlKTsKKwljdXJyX3BlcmZfbGV2ZWwgPSBsZXZlbDsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcHJldjsKK30KKworLyogVXNlZCBieSB0aGUgY2xvY2sgZnJhbWV3b3JrIGR1cmluZyBDT1JFIERQTEwgY2hhbmdlcyAqLwordm9pZCBvbWFwMnh4eF9zZHJjX2luaXRfcGFyYW1zKHUzMiBmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKQoreworCXVuc2lnbmVkIGxvbmcgZGxsX2NudDsKKwl1MzIgZmFzdF9kbGwgPSAwOworCisJLyogRERSID0gMSwgU0RSID0gMCAqLworCW1lbV90aW1pbmdzLm1fdHlwZSA9ICEoKHNkcmNfcmVhZF9yZWcoU0RSQ19NUl8wKSAmIDB4MykgPT0gMHgxKTsKKworCS8qIDI0MjIgZXMyLjA1IGFuZCBiZXlvbmQgaGFzIGEgc2luZ2xlIFNJUCBERFIgaW5zdGVhZCBvZiAyIGxpa2Ugb3RoZXJzLgorCSAqIEluIHRoZSBjYXNlIG9mIDI0MjIsIGl0cyBvayB0byB1c2UgQ1MxIGluc3RlYWQgb2YgQ1MwLgorCSAqLworCWlmIChjcHVfaXNfb21hcDI0MjIoKSkKKwkJbWVtX3RpbWluZ3MuYmFzZV9jcyA9IDE7CisJZWxzZQorCQltZW1fdGltaW5ncy5iYXNlX2NzID0gMDsKKworCWlmIChtZW1fdGltaW5ncy5tX3R5cGUgIT0gTV9ERFIpCisJCXJldHVybjsKKworCS8qIFdpdGggRERSIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBsb3cgZnJlcXVlbmN5IERMTCB2YWx1ZSAqLworCWlmICgoKG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgJiAoMSA8PCAyKSkgPT0gTV9MT0NLX0NUUkwpKQorCQltZW1fdGltaW5ncy5kbGxfbW9kZSA9IE1fVU5MT0NLOworCWVsc2UKKwkJbWVtX3RpbWluZ3MuZGxsX21vZGUgPSBNX0xPQ0s7CisKKwlpZiAobWVtX3RpbWluZ3MuYmFzZV9jcyA9PSAwKSB7CisJCWZhc3RfZGxsID0gc2RyY19yZWFkX3JlZyhTRFJDX0RMTEFfQ1RSTCk7CisJCWRsbF9jbnQgPSBzZHJjX3JlYWRfcmVnKFNEUkNfRExMQV9TVEFUVVMpICYgMHhmZjAwOworCX0gZWxzZSB7CisJCWZhc3RfZGxsID0gc2RyY19yZWFkX3JlZyhTRFJDX0RMTEJfQ1RSTCk7CisJCWRsbF9jbnQgPSBzZHJjX3JlYWRfcmVnKFNEUkNfRExMQl9TVEFUVVMpICYgMHhmZjAwOworCX0KKwlpZiAoZm9yY2VfbG9ja190b191bmxvY2tfbW9kZSkgeworCQlmYXN0X2RsbCAmPSB+MHhmZjAwOworCQlmYXN0X2RsbCB8PSBkbGxfY250OwkJLyogQ3VycmVudCBsb2NrIG1vZGUgKi8KKwl9CisJLyogc2V0IGZhc3QgdGltaW5ncyB3aXRoIERMTCBmaWx0ZXIgZGlzYWJsZWQgKi8KKwltZW1fdGltaW5ncy5mYXN0X2RsbF9jdHJsID0gKGZhc3RfZGxsIHwgKDMgPDwgOCkpOworCisJLyogTm8gZGlzcnVwdGlvbnMsIEREUiB3aWxsIGJlIG9mZmxpbmUgJiBDLUFCSSBub3QgZm9sbG93ZWQgKi8KKwlvbWFwMl9zcmFtX2Rkcl9pbml0KCZtZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsLAorCQkJICAgIG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwsCisJCQkgICAgbWVtX3RpbWluZ3MuYmFzZV9jcywKKwkJCSAgICBmb3JjZV9sb2NrX3RvX3VubG9ja19tb2RlKTsKKwltZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsICY9IDB4ZmYwMDsJLyogS2VlcCBsb2NrIHZhbHVlICovCisKKwkvKiBUdXJuIHN0YXR1cyBpbnRvIHVubG9jayBjdHJsICovCisJbWVtX3RpbWluZ3Muc2xvd19kbGxfY3RybCB8PQorCQkoKG1lbV90aW1pbmdzLmZhc3RfZGxsX2N0cmwgJiAweEYpIHwgKDEgPDwgMikpOworCisJLyogOTAgZGVncmVlIHBoYXNlIGZvciBhbnl0aGluZyBiZWxvdyAxMzNNaHogKyBkaXNhYmxlIERMTCBmaWx0ZXIgKi8KKwltZW1fdGltaW5ncy5zbG93X2RsbF9jdHJsIHw9ICgoMSA8PCAxKSB8ICgzIDw8IDgpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzc0ZTkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItbXVzYi5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItbXVzYi5jCisgKgorICogVGhpcyBmaWxlIHdpbGwgY29udGFpbiB0aGUgYm9hcmQgc3BlY2lmaWMgZGV0YWlscyBmb3IgdGhlCisgKiBNRU5UT1IgVVNCIE9URyBjb250cm9sbGVyIG9uIE9NQVAzNDMwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBWaWtyYW0gUGFuZGl0YQorICoKKyAqIEdlbmVyYWxpemF0aW9uIGJ5OgorICogRmVsaXBlIEJhbGJpIDxmZWxpcGUuYmFsYmlAbm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYi9tdXNiLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9wbS5oPgorI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC91c2IuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdXNiX3Jlc291cmNlc1tdID0geworCVswXSA9IHsgLyogc3RhcnQgYW5kIGVuZCBzZXQgZHluYW1pY2FsbHkgKi8KKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CS8qIGdlbmVyYWwgSVJRICovCisJCS5zdGFydAk9IElOVF8yNDNYX0hTX1VTQl9NQywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CS8qIERNQSBJUlEgKi8KKwkJLnN0YXJ0CT0gSU5UXzI0M1hfSFNfVVNCX0RNQSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgY2xrX29uOworCitzdGF0aWMgaW50IG11c2Jfc2V0X2Nsb2NrKHN0cnVjdCBjbGsgKmNsaywgaW50IHN0YXRlKQoreworCWlmIChzdGF0ZSkgeworCQlpZiAoY2xrX29uID4gMCkKKwkJCXJldHVybiAtRU5PREVWOworCisJCWNsa19lbmFibGUoY2xrKTsKKwkJY2xrX29uID0gMTsKKwl9IGVsc2UgeworCQlpZiAoY2xrX29uID09IDApCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQljbGtfZGlzYWJsZShjbGspOworCQljbGtfb24gPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG11c2JfaGRyY19lcHNfYml0cyBtdXNiX2Vwc1tdID0geworCXsJImVwMV90eCIsIDEwLAl9LAorCXsJImVwMV9yeCIsIDEwLAl9LAorCXsJImVwMl90eCIsIDksCX0sCisJewkiZXAyX3J4IiwgOSwJfSwKKwl7CSJlcDNfdHgiLCAzLAl9LAorCXsJImVwM19yeCIsIDMsCX0sCisJewkiZXA0X3R4IiwgMywJfSwKKwl7CSJlcDRfcngiLCAzLAl9LAorCXsJImVwNV90eCIsIDMsCX0sCisJewkiZXA1X3J4IiwgMywJfSwKKwl7CSJlcDZfdHgiLCAzLAl9LAorCXsJImVwNl9yeCIsIDMsCX0sCisJewkiZXA3X3R4IiwgMywJfSwKKwl7CSJlcDdfcngiLCAzLAl9LAorCXsJImVwOF90eCIsIDIsCX0sCisJewkiZXA4X3J4IiwgMiwJfSwKKwl7CSJlcDlfdHgiLCAyLAl9LAorCXsJImVwOV9yeCIsIDIsCX0sCisJewkiZXAxMF90eCIsIDIsCX0sCisJewkiZXAxMF9yeCIsIDIsCX0sCisJewkiZXAxMV90eCIsIDIsCX0sCisJewkiZXAxMV9yeCIsIDIsCX0sCisJewkiZXAxMl90eCIsIDIsCX0sCisJewkiZXAxMl9yeCIsIDIsCX0sCisJewkiZXAxM190eCIsIDIsCX0sCisJewkiZXAxM19yeCIsIDIsCX0sCisJewkiZXAxNF90eCIsIDIsCX0sCisJewkiZXAxNF9yeCIsIDIsCX0sCisJewkiZXAxNV90eCIsIDIsCX0sCisJewkiZXAxNV9yeCIsIDIsCX0sCit9OworCitzdGF0aWMgc3RydWN0IG11c2JfaGRyY19jb25maWcgbXVzYl9jb25maWcgPSB7CisJLm11bHRpcG9pbnQJPSAxLAorCS5keW5fZmlmbwk9IDEsCisJLnNvZnRfY29uCT0gMSwKKwkuZG1hCQk9IDEsCisJLm51bV9lcHMJPSAxNiwKKwkuZG1hX2NoYW5uZWxzCT0gNywKKwkuZG1hX3JlcV9jaGFuCT0gKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpIHwgKDEgPDwgMyksCisJLnJhbV9iaXRzCT0gMTIsCisJLmVwc19iaXRzCT0gbXVzYl9lcHMsCit9OworCitzdGF0aWMgc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhIG11c2JfcGxhdCA9IHsKKyNpZmRlZiBDT05GSUdfVVNCX01VU0JfT1RHCisJLm1vZGUJCT0gTVVTQl9PVEcsCisjZWxpZiBkZWZpbmVkKENPTkZJR19VU0JfTVVTQl9IRFJDX0hDRCkKKwkubW9kZQkJPSBNVVNCX0hPU1QsCisjZWxpZiBkZWZpbmVkKENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQykKKwkubW9kZQkJPSBNVVNCX1BFUklQSEVSQUwsCisjZW5kaWYKKwkvKiAuY2xvY2sgaXMgc2V0IGR5bmFtaWNhbGx5ICovCisJLnNldF9jbG9jawk9IG11c2Jfc2V0X2Nsb2NrLAorCS5jb25maWcJCT0gJm11c2JfY29uZmlnLAorCisJLyogUkVWSVNJVCBjaGFyZ2UgcHVtcCBvbiBUV0w0MDMwIGNhbiBzdXBwbHkgdXAgdG8KKwkgKiAxMDAgbUEgLi4uIGJ1dCB0aGlzIHZhbHVlIGlzIGJvYXJkLXNwZWNpZmljLCBsaWtlCisJICogIm1vZGUiLCBhbmQgc2hvdWxkIGJlIHBhc3NlZCB0byB1c2JfbXVzYl9pbml0KCkuCisJICovCisJLnBvd2VyCQk9IDUwLAkJCS8qIHVwIHRvIDEwMCBtQSAqLworfTsKKworc3RhdGljIHU2NCBtdXNiX2RtYW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXVzYl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm11c2JfaGRyYyIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmbXVzYl9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfMzJCSVRfTUFTSywKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJm11c2JfcGxhdCwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtdXNiX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbXVzYl9yZXNvdXJjZXMsCit9OworCisjaWZkZWYgQ09ORklHX05PUF9VU0JfWENFSVYKK3N0YXRpYyB1NjQgbm9wX3hjZWl2X2RtYW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9wX3hjZWl2X2RldmljZSA9IHsKKwkubmFtZQkJPSAibm9wX3VzYl94Y2VpdiIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmbm9wX3hjZWl2X2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV8zMkJJVF9NQVNLLAorCQkucGxhdGZvcm1fZGF0YQkJPSBOVUxMLAorCX0sCit9OworI2VuZGlmCisKK3ZvaWQgX19pbml0IHVzYl9tdXNiX2luaXQodm9pZCkKK3sKKwlpZiAoY3B1X2lzX29tYXAyNDN4KCkpCisJCW11c2JfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gT01BUDI0M1hfSFNfQkFTRTsKKwllbHNlCisJCW11c2JfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gT01BUDM0WFhfSFNVU0JfT1RHX0JBU0U7CisJbXVzYl9yZXNvdXJjZXNbMF0uZW5kID0gbXVzYl9yZXNvdXJjZXNbMF0uc3RhcnQgKyBTWl84SyAtIDE7CisKKwkvKgorCSAqIFJFVklTSVQ6IFRoaXMgbGluZSBjYW4gYmUgcmVtb3ZlZCBvbmNlIGFsbCB0aGUgcGxhdGZvcm1zIHVzaW5nCisJICogbXVzYl9jb3JlLmMgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byB1c2UgdXNlIGNsa2Rldi4KKwkgKi8KKwltdXNiX3BsYXQuY2xvY2sgPSAiaWNrIjsKKworI2lmZGVmIENPTkZJR19OT1BfVVNCX1hDRUlWCisJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmbm9wX3hjZWl2X2RldmljZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIE5PUC1YQ0VJViBkZXZpY2VcbiIpOworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKwlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtdXNiX2RldmljZSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIEhTLVVTQiAoTVVTQikgZGV2aWNlXG4iKTsKKwkJcmV0dXJuOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcKaW5kZXggZjU5YThkMC4uMmM3MDM1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcKQEAgLTcxLDYgKzcxLDcgQEAKIAogY29uZmlnIE1BQ0hfVFM3OFhYCiAJYm9vbCAiVGVjaG5vbG9naWMgU3lzdGVtcyBUUy03OHh4IgorCXNlbGVjdCBQTQogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgVGVjaG5vbG9naWMgU3lzdGVtcyBUUy03OHh4IHBsYXRmb3JtLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCmluZGV4IDhhMGU0OWQuLjY4Y2MzZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxwbGF0L2VoY2ktb3Jpb24uaD4KICNpbmNsdWRlIDxwbGF0L212X3hvci5oPgogI2luY2x1ZGUgPHBsYXQvb3Jpb25fbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvb3Jpb241eF93ZHQuaD4KICNpbmNsdWRlIDxwbGF0L3RpbWUuaD4KICNpbmNsdWRlICJjb21tb24uaCIKIApAQCAtMjE5LDE0ICsyMjAsMTcgQEAKIAogdm9pZCBfX2luaXQgb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhICpkLCBpbnQgaXJxKQogeworCWludCBpOworCiAJaWYgKGlycSAhPSBOT19JUlEpIHsKIAkJb3Jpb241eF9zd2l0Y2hfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gaXJxOwogCQlvcmlvbjV4X3N3aXRjaF9yZXNvdXJjZXNbMF0uZW5kID0gaXJxOwogCQlvcmlvbjV4X3N3aXRjaF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IDE7CiAJfQogCi0JZC0+bWlpX2J1cyA9ICZvcmlvbjV4X2V0aF9zaGFyZWQuZGV2OwogCWQtPm5ldGRldiA9ICZvcmlvbjV4X2V0aC5kZXY7CisJZm9yIChpID0gMDsgaSA8IGQtPm5yX2NoaXBzOyBpKyspCisJCWQtPmNoaXBbaV0ubWlpX2J1cyA9ICZvcmlvbjV4X2V0aF9zaGFyZWQuZGV2OwogCW9yaW9uNXhfc3dpdGNoX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IGQ7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9yaW9uNXhfc3dpdGNoX2RldmljZSk7CkBAIC01MzMsNiArNTM3LDI5IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBXYXRjaGRvZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IG9yaW9uNXhfd2R0X3BsYXRmb3JtX2RhdGEgb3Jpb241eF93ZHRfZGF0YSA9IHsKKwkudGNsawkJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9yaW9uNXhfd2R0X2RldmljZSA9IHsKKwkubmFtZQkJPSAib3Jpb241eF93ZHQiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmb3Jpb241eF93ZHRfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMCwKK307CisKK3ZvaWQgX19pbml0IG9yaW9uNXhfd2R0X2luaXQodm9pZCkKK3sKKwlvcmlvbjV4X3dkdF9kYXRhLnRjbGsgPSBvcmlvbjV4X3RjbGs7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZvcmlvbjV4X3dkdF9kZXZpY2UpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGltZSBoYW5kbGluZwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgb3Jpb241eF90Y2xrOwpAQCAtNjMxLDYgKzY1OCwxMSBAQAogCQlwcmludGsoS0VSTl9JTkZPICJPcmlvbjogQXBwbHlpbmcgNTI4MSBEMCBXRkkgd29ya2Fyb3VuZC5cbiIpOwogCQlkaXNhYmxlX2hsdCgpOwogCX0KKworCS8qCisJICogUmVnaXN0ZXIgd2F0Y2hkb2cgZHJpdmVyCisJICovCisJb3Jpb241eF93ZHRfaW5pdCgpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jCmluZGV4IDA3MjJkNjUuLmIzMWNhNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZG5zMzIzLXNldHVwLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgZG5zMzIzX3BjaV9pbml0KHZvaWQpCiB7Ci0JLyogVGhlIDUxODIgZG9lc24ndCByZWFsbHkgdXNlIGl0J3MgUENJIGJ1cywgYW5kIGluaXRpYWxpc2luZyBQQ0kKKwkvKiBUaGUgNTE4MiBkb2Vzbid0IHJlYWxseSB1c2UgaXRzIFBDSSBidXMsIGFuZCBpbml0aWFsaXNpbmcgUENJCiAJICogZ2V0cyBpbiB0aGUgd2F5IG9mIGluaXRpYWxpc2luZyB0aGUgU0FUQSBjb250cm9sbGVyLgogCSAqLwogCWlmIChtYWNoaW5lX2lzX2RuczMyMygpICYmIGRuczMyM19kZXZfaWQoKSAhPSBNVjg4RjUxODJfREVWX0lEKQpAQCAtNDE4LDcgKzQxOCw3IEBACiAJb3Jpb241eF9pMmNfaW5pdCgpOwogCW9yaW9uNXhfdWFydDBfaW5pdCgpOwogCi0JLyogVGhlIDUxODIgaGFzIGl0J3MgU0FUQSBjb250cm9sbGVyIG9uLWNoaXAsIGFuZCBuZWVkcyBpdCdzIG93biBsaXR0bGUKKwkvKiBUaGUgNTE4MiBoYXMgaXRzIFNBVEEgY29udHJvbGxlciBvbi1jaGlwLCBhbmQgbmVlZHMgaXRzIG93biBsaXR0bGUKIAkgKiBpbml0IHJvdXRpbmUuCiAJICovCiAJaWYgKGRuczMyM19kZXZfaWQoKSA9PSBNVjg4RjUxODJfREVWX0lEKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMDhlNDMwNy4uOWI4ZGIxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xOSw3ICsxOSw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJLyoKIAkgKiBFbmFibGUgYW5kIGlzc3VlIHNvZnQgcmVzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9sc21pbmktc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9sc21pbmktc2V0dXAuYwppbmRleCBlMGM0M2I4Li5jOWJmNmI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHNtaW5pLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2xzbWluaS1zZXR1cC5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAogc3RhdGljIHZvaWQgbHNtaW5pX3Bvd2VyX29mZih2b2lkKQogewotCWFyY2hfcmVzZXQoMCk7CisJYXJjaF9yZXNldCgwLCBOVUxMKTsKIH0KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1meG8tc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCmluZGV4IDE1ZjUzMjMuLjljMWNhNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWZ4by1zZXR1cC5jCkBAIC05NCw3ICs5NCw3IEBACiAJLmR1cGxleAkJPSBEVVBMRVhfRlVMTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgcmQ4OGY1MTgxbF9meG9fc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgcmQ4OGY1MTgxbF9meG9fc3dpdGNoX2NoaXBfZGF0YSA9IHsKIAkucG9ydF9uYW1lc1swXQk9ICJsYW4yIiwKIAkucG9ydF9uYW1lc1sxXQk9ICJsYW4xIiwKIAkucG9ydF9uYW1lc1syXQk9ICJ3YW4iLApAQCAtMTAzLDYgKzEwMywxMSBAQAogCS5wb3J0X25hbWVzWzddCT0gImxhbjMiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSByZDg4ZjUxODFsX2Z4b19zd2l0Y2hfcGxhdF9kYXRhID0geworCS5ucl9jaGlwcwk9IDEsCisJLmNoaXAJCT0gJnJkODhmNTE4MWxfZnhvX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgcmQ4OGY1MTgxbF9meG9faW5pdCh2b2lkKQogewogCS8qCkBAIC0xMTcsNyArMTIyLDcgQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZyZDg4ZjUxODFsX2Z4b19ldGhfZGF0YSk7Ci0Jb3Jpb241eF9ldGhfc3dpdGNoX2luaXQoJnJkODhmNTE4MWxfZnhvX3N3aXRjaF9kYXRhLCBOT19JUlEpOworCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjUxODFsX2Z4b19zd2l0Y2hfcGxhdF9kYXRhLCBOT19JUlEpOwogCW9yaW9uNXhfdWFydDBfaW5pdCgpOwogCiAJb3Jpb241eF9zZXR1cF9kZXZfYm9vdF93aW4oUkQ4OEY1MTgxTF9GWE9fTk9SX0JPT1RfQkFTRSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY1MTgxbC1nZS1zZXR1cC5jCmluZGV4IDhhZDM5MzQuLmVlMTM5OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9yZDg4ZjUxODFsLWdlLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNTE4MWwtZ2Utc2V0dXAuYwpAQCAtOTUsNyArOTUsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNTE4MWxfZ2Vfc3dpdGNoX2RhdGEgPSB7CitzdGF0aWMgc3RydWN0IGRzYV9jaGlwX2RhdGEgcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfY2hpcF9kYXRhID0gewogCS5wb3J0X25hbWVzWzBdCT0gImxhbjIiLAogCS5wb3J0X25hbWVzWzFdCT0gImxhbjEiLAogCS5wb3J0X25hbWVzWzJdCT0gIndhbiIsCkBAIC0xMDQsNiArMTA0LDExIEBACiAJLnBvcnRfbmFtZXNbN10JPSAibGFuMyIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNTE4MWxfZ2Vfc3dpdGNoX3BsYXRfZGF0YSA9IHsKKwkubnJfY2hpcHMJPSAxLAorCS5jaGlwCQk9ICZyZDg4ZjUxODFsX2dlX3N3aXRjaF9jaGlwX2RhdGEsCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgcmQ4OGY1MTgxbF9nZV9pMmNfcnRjID0gewogCUkyQ19CT0FSRF9JTkZPKCJkczEzMzgiLCAweDY4KSwKIH07CkBAIC0xMjIsNyArMTI3LDggQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZyZDg4ZjUxODFsX2dlX2V0aF9kYXRhKTsKLQlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY1MTgxbF9nZV9zd2l0Y2hfZGF0YSwgZ3Bpb190b19pcnEoOCkpOworCW9yaW9uNXhfZXRoX3N3aXRjaF9pbml0KCZyZDg4ZjUxODFsX2dlX3N3aXRjaF9wbGF0X2RhdGEsCisJCQkJZ3Bpb190b19pcnEoOCkpOwogCW9yaW9uNXhfaTJjX2luaXQoKTsKIAlvcmlvbjV4X3VhcnQwX2luaXQoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3JkODhmNjE4M2FwLWdlLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY2MTgzYXAtZ2Utc2V0dXAuYwppbmRleCAyNjJlMjVlLi43NzM3Y2Y5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY2MTgzYXAtZ2Utc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvcmQ4OGY2MTgzYXAtZ2Utc2V0dXAuYwpAQCAtMzUsNyArMzUsNyBAQAogCS5kdXBsZXgJCT0gRFVQTEVYX0ZVTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjE4M2FwX2dlX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHJkODhmNjE4M2FwX2dlX3N3aXRjaF9jaGlwX2RhdGEgPSB7CiAJLnBvcnRfbmFtZXNbMF0JPSAibGFuMSIsCiAJLnBvcnRfbmFtZXNbMV0JPSAibGFuMiIsCiAJLnBvcnRfbmFtZXNbMl0JPSAibGFuMyIsCkBAIC00NCw2ICs0NCwxMSBAQAogCS5wb3J0X25hbWVzWzVdCT0gImNwdSIsCiB9OwogCitzdGF0aWMgc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhIHJkODhmNjE4M2FwX2dlX3N3aXRjaF9wbGF0X2RhdGEgPSB7CisJLm5yX2NoaXBzCT0gMSwKKwkuY2hpcAkJPSAmcmQ4OGY2MTgzYXBfZ2Vfc3dpdGNoX2NoaXBfZGF0YSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiByZDg4ZjYxODNhcF9nZV9wYXJ0aXRpb25zW10gPSB7CiAJewogCQkubmFtZQk9ICJrZXJuZWwiLApAQCAtODksNyArOTQsOCBAQAogCSAqLwogCW9yaW9uNXhfZWhjaTBfaW5pdCgpOwogCW9yaW9uNXhfZXRoX2luaXQoJnJkODhmNjE4M2FwX2dlX2V0aF9kYXRhKTsKLQlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MTgzYXBfZ2Vfc3dpdGNoX2RhdGEsIGdwaW9fdG9faXJxKDMpKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmcmQ4OGY2MTgzYXBfZ2Vfc3dpdGNoX3BsYXRfZGF0YSwKKwkJCQlncGlvX3RvX2lycSgzKSk7CiAJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocmQ4OGY2MTgzYXBfZ2Vfc3BpX3NsYXZlX2luZm8sCiAJCQkJQVJSQVlfU0laRShyZDg4ZjYxODNhcF9nZV9zcGlfc2xhdmVfaW5mbykpOwogCW9yaW9uNXhfc3BpX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtZnBnYS5oIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNzh4eC1mcGdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5Y2RmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtZnBnYS5oCkBAIC0wLDAgKzEsMzUgQEAKKyNkZWZpbmUgRlBHQUlEKF9tYWdpYywgX3JldikgKChfbWFnaWMgPDwgOCkgKyBfcmV2KQorCisvKgorICogZ2V0IHllciBpZCdzIGZyb20gaHR0cDovL3RzNzh4eC5kaWdyaXoub3JnLnVrLworICogZG8gKm5vdCogbWFrZSB1cCB5b3VyIG93biBvciAnYm9ycm93JyBhbnkhCisgKi8KK2VudW0gZnBnYV9pZHMgeworCS8qIFRlY2hub2xvZ2ljIFN5c3RlbXMgKi8KKwlUUzc4MDBfUkVWXzEJPSBGUEdBSUQoMHgwMGI0ODAsIDB4MDEpLAorCVRTNzgwMF9SRVZfMgk9IEZQR0FJRCgweDAwYjQ4MCwgMHgwMiksCisJVFM3ODAwX1JFVl8zCT0gRlBHQUlEKDB4MDBiNDgwLCAweDAzKSwKKwlUUzc4MDBfUkVWXzQJPSBGUEdBSUQoMHgwMGI0ODAsIDB4MDQpLAorCVRTNzgwMF9SRVZfNQk9IEZQR0FJRCgweDAwYjQ4MCwgMHgwNSksCisKKwkvKiBVbmFmZm9yZGFibGUgJiBFeHBlbnNpdmUgKi8KKwlVQUVfRFVNTVkJPSBGUEdBSUQoMHhmZmZmZmYsIDB4MDEpLAorfTsKKworc3RydWN0IGZwZ2FfZGV2aWNlIHsKKwl1bnNpZ25lZAkJcHJlc2VudDoxOworCXVuc2lnbmVkCQlpbml0OjE7Cit9OworCitzdHJ1Y3QgZnBnYV9kZXZpY2VzIHsKKwkvKiBUZWNobm9sb2dpYyBTeXN0ZW1zICovCisJc3RydWN0IGZwZ2FfZGV2aWNlIAl0c19ydGM7CisJc3RydWN0IGZwZ2FfZGV2aWNlIAl0c19uYW5kOworfTsKKworc3RydWN0IHRzNzh4eF9mcGdhX2RhdGEgeworCXVuc2lnbmVkIGludAkJaWQ7CisJaW50CQkJc3RhdGU7CisKKwlzdHJ1Y3QgZnBnYV9kZXZpY2VzCXN1cHBvcnRzOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC90czc4eHgtc2V0dXAuYwppbmRleCAxMzY4ZTlmLi45YTZiMzk3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvdHM3OHh4LXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3RzNzh4eC1zZXR1cC5jCkBAIC0xMCwxNyArMTAsMjAgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KICNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9tNDh0ODYuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9vcmlvbjV4Lmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAjaW5jbHVkZSAibXBwLmgiCisjaW5jbHVkZSAidHM3OHh4LWZwZ2EuaCIKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUUy03OHh4IEluZm8KQEAgLTMzLDE4ICszNiwxMSBAQAogI2RlZmluZSBUUzc4WFhfRlBHQV9SRUdTX1ZJUlRfQkFTRQkweGZmOTAwMDAwCiAjZGVmaW5lIFRTNzhYWF9GUEdBX1JFR1NfU0laRQkJU1pfMU0KIAotI2RlZmluZSBUUzc4WFhfRlBHQV9SRUdTX1NZU0NPTl9JRAkoVFM3OFhYX0ZQR0FfUkVHU19WSVJUX0JBU0UgfCAweDAwMCkKLSNkZWZpbmUgVFM3OFhYX0ZQR0FfUkVHU19TWVNDT05fTENESQkoVFM3OFhYX0ZQR0FfUkVHU19WSVJUX0JBU0UgfCAweDAwNCkKLSNkZWZpbmUgVFM3OFhYX0ZQR0FfUkVHU19TWVNDT05fTENETwkoVFM3OFhYX0ZQR0FfUkVHU19WSVJUX0JBU0UgfCAweDAwOCkKLQotI2RlZmluZSBUUzc4WFhfRlBHQV9SRUdTX1JUQ19DVFJMCShUUzc4WFhfRlBHQV9SRUdTX1ZJUlRfQkFTRSB8IDB4ODA4KQotI2RlZmluZSBUUzc4WFhfRlBHQV9SRUdTX1JUQ19EQVRBCShUUzc4WFhfRlBHQV9SRUdTX1ZJUlRfQkFTRSB8IDB4ODBjKQotCi0vKgotICogNTEya0IgTk9SIGZsYXNoIERldmljZQotICovCi0jZGVmaW5lIFRTNzhYWF9OT1JfQk9PVF9CQVNFCQkweGZmODAwMDAwCi0jZGVmaW5lIFRTNzhYWF9OT1JfQk9PVF9TSVpFCQlTWl81MTJLCitzdGF0aWMgc3RydWN0IHRzNzh4eF9mcGdhX2RhdGEgdHM3OHh4X2ZwZ2EgPSB7CisJLmlkCQk9IDAsCisJLnN0YXRlCQk9IDEsCisvKgkuc3VwcG9ydHMJPSAuLi4gLSBwb3B1bGF0ZWQgYnkgdHM3OHh4X2ZwZ2Ffc3VwcG9ydHMoKSAqLworfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJL08gQWRkcmVzcyBNYXBwaW5nCkBAIC02NSw0MSArNjEsNiBAQAogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIDUxMmtCIE5PUiBCb290IEZsYXNoIC0gdGhlIGNoaXAgaXMgYSBNMjVQNDAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHRzNzh4eF9ub3JfYm9vdF9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJ0cy1ib290cm9tIiwKLQkJLm9mZnNldAkJPSAwLAotCQkvKiBvbmx5IHRoZSBmaXJzdCAyNTZrQiBpcyB1c2VkICovCi0JCS5zaXplCQk9IFNaXzI1NkssCi0JCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgdHM3OHh4X25vcl9ib290X2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDEsCi0JLnBhcnRzCQk9IHRzNzh4eF9ub3JfYm9vdF9mbGFzaF9yZXNvdXJjZXMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRSh0czc4eHhfbm9yX2Jvb3RfZmxhc2hfcmVzb3VyY2VzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdHM3OHh4X25vcl9ib290X2ZsYXNoX3Jlc291cmNlID0gewotCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQkuc3RhcnQJCT0gVFM3OFhYX05PUl9CT09UX0JBU0UsCi0JLmVuZAkJPSBUUzc4WFhfTk9SX0JPT1RfQkFTRSArIFRTNzhYWF9OT1JfQk9PVF9TSVpFIC0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRzNzh4eF9ub3JfYm9vdF9mbGFzaCA9IHsKLQkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZ0czc4eHhfbm9yX2Jvb3RfZmxhc2hfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmdHM3OHh4X25vcl9ib290X2ZsYXNoX3Jlc291cmNlLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBFdGhlcm5ldAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgdHM3OHh4X2V0aF9kYXRhID0gewpAQCAtMTA3LDMxICs2OCw0MCBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBSVEMgTTQ4VDg2IC0gbmlja2VkXldib3Jyb3dlZCBmcm9tIGFyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCisgKiBTQVRBCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfUlRDX0RSVl9NNDhUODYKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHRzNzh4eF9ydGNfcmVhZGJ5dGUodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXdyaXRlYihhZGRyLCBUUzc4WFhfRlBHQV9SRUdTX1JUQ19DVFJMKTsKLQlyZXR1cm4gcmVhZGIoVFM3OFhYX0ZQR0FfUkVHU19SVENfREFUQSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRzNzh4eF9ydGNfd3JpdGVieXRlKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQl3cml0ZWIoYWRkciwgVFM3OFhYX0ZQR0FfUkVHU19SVENfQ1RSTCk7Ci0Jd3JpdGViKHZhbHVlLCBUUzc4WFhfRlBHQV9SRUdTX1JUQ19EQVRBKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtNDh0ODZfb3BzIHRzNzh4eF9ydGNfb3BzID0gewotCS5yZWFkYnl0ZQk9IHRzNzh4eF9ydGNfcmVhZGJ5dGUsCi0JLndyaXRlYnl0ZQk9IHRzNzh4eF9ydGNfd3JpdGVieXRlLAorc3RhdGljIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgdHM3OHh4X3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cwk9IDIsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0czc4eHhfcnRjX2RldmljZSA9IHsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUlRDIE00OFQ4NiAtIG5pY2tlZF5XYm9ycm93ZWQgZnJvbSBhcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFRTX1JUQ19DVFJMCShUUzc4WFhfRlBHQV9SRUdTX1ZJUlRfQkFTRSB8IDB4ODA4KQorI2RlZmluZSBUU19SVENfREFUQQkoVFM3OFhYX0ZQR0FfUkVHU19WSVJUX0JBU0UgfCAweDgwYykKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdHM3OHh4X3RzX3J0Y19yZWFkYnl0ZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJd3JpdGViKGFkZHIsIFRTX1JUQ19DVFJMKTsKKwlyZXR1cm4gcmVhZGIoVFNfUlRDX0RBVEEpOworfQorCitzdGF0aWMgdm9pZCB0czc4eHhfdHNfcnRjX3dyaXRlYnl0ZSh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJd3JpdGViKGFkZHIsIFRTX1JUQ19DVFJMKTsKKwl3cml0ZWIodmFsdWUsIFRTX1JUQ19EQVRBKTsKK30KKworc3RhdGljIHN0cnVjdCBtNDh0ODZfb3BzIHRzNzh4eF90c19ydGNfb3BzID0geworCS5yZWFkYnl0ZQk9IHRzNzh4eF90c19ydGNfcmVhZGJ5dGUsCisJLndyaXRlYnl0ZQk9IHRzNzh4eF90c19ydGNfd3JpdGVieXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdHM3OHh4X3RzX3J0Y19kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInJ0Yy1tNDh0ODYiLAogCS5pZAkJPSAtMSwKIAkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmdHM3OHh4X3J0Y19vcHMsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnRzNzh4eF90c19ydGNfb3BzLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSAwLAogfTsKQEAgLTE0Niw1OCArMTE2LDMxMyBAQAogICogVE9ETzogdHJhY2sgZG93biBhIGd1aW5lYSBwaWcgd2l0aG91dCBhbiBSVEMgdG8gc2VlIGlmIHdlIGNhbiB3b3JrIG91dCBhCiAgKiAJCWJldHRlciBSVEMgZGV0ZWN0aW9uIHJvdXRpbmUKICAqLwotc3RhdGljIGludCBfX2luaXQgdHM3OHh4X3J0Y19pbml0KHZvaWQpCitzdGF0aWMgaW50IHRzNzh4eF90c19ydGNfbG9hZCh2b2lkKQogeworCWludCByYzsKIAl1bnNpZ25lZCBjaGFyIHRtcF9ydGMwLCB0bXBfcnRjMTsKIAotCXRtcF9ydGMwID0gdHM3OHh4X3J0Y19yZWFkYnl0ZSgxMjYpOwotCXRtcF9ydGMxID0gdHM3OHh4X3J0Y19yZWFkYnl0ZSgxMjcpOworCXRtcF9ydGMwID0gdHM3OHh4X3RzX3J0Y19yZWFkYnl0ZSgxMjYpOworCXRtcF9ydGMxID0gdHM3OHh4X3RzX3J0Y19yZWFkYnl0ZSgxMjcpOwogCi0JdHM3OHh4X3J0Y193cml0ZWJ5dGUoMHgwMCwgMTI2KTsKLQl0czc4eHhfcnRjX3dyaXRlYnl0ZSgweDU1LCAxMjcpOwotCWlmICh0czc4eHhfcnRjX3JlYWRieXRlKDEyNykgPT0gMHg1NSkgewotCQl0czc4eHhfcnRjX3dyaXRlYnl0ZSgweGFhLCAxMjcpOwotCQlpZiAodHM3OHh4X3J0Y19yZWFkYnl0ZSgxMjcpID09IDB4YWEKLQkJCQkmJiB0czc4eHhfcnRjX3JlYWRieXRlKDEyNikgPT0gMHgwMCkgewotCQkJdHM3OHh4X3J0Y193cml0ZWJ5dGUodG1wX3J0YzAsIDEyNik7Ci0JCQl0czc4eHhfcnRjX3dyaXRlYnl0ZSh0bXBfcnRjMSwgMTI3KTsKLQkJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdHM3OHh4X3J0Y19kZXZpY2UpOwotCQkJcmV0dXJuIDE7CisJdHM3OHh4X3RzX3J0Y193cml0ZWJ5dGUoMHgwMCwgMTI2KTsKKwl0czc4eHhfdHNfcnRjX3dyaXRlYnl0ZSgweDU1LCAxMjcpOworCWlmICh0czc4eHhfdHNfcnRjX3JlYWRieXRlKDEyNykgPT0gMHg1NSkgeworCQl0czc4eHhfdHNfcnRjX3dyaXRlYnl0ZSgweGFhLCAxMjcpOworCQlpZiAodHM3OHh4X3RzX3J0Y19yZWFkYnl0ZSgxMjcpID09IDB4YWEKKwkJCQkmJiB0czc4eHhfdHNfcnRjX3JlYWRieXRlKDEyNikgPT0gMHgwMCkgeworCQkJdHM3OHh4X3RzX3J0Y193cml0ZWJ5dGUodG1wX3J0YzAsIDEyNik7CisJCQl0czc4eHhfdHNfcnRjX3dyaXRlYnl0ZSh0bXBfcnRjMSwgMTI3KTsKKworCQkJaWYgKHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3J0Yy5pbml0ID09IDApIHsKKwkJCQlyYyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdHM3OHh4X3RzX3J0Y19kZXZpY2UpOworCQkJCWlmICghcmMpCisJCQkJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3J0Yy5pbml0ID0gMTsKKwkJCX0gZWxzZQorCQkJCXJjID0gcGxhdGZvcm1fZGV2aWNlX2FkZCgmdHM3OHh4X3RzX3J0Y19kZXZpY2UpOworCisJCQlyZXR1cm4gcmM7CiAJCX0KIAl9CiAKKwlyZXR1cm4gLUVOT0RFVjsKK307CisKK3N0YXRpYyB2b2lkIHRzNzh4eF90c19ydGNfdW5sb2FkKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX2RlbCgmdHM3OHh4X3RzX3J0Y19kZXZpY2UpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5BTkQgRmxhc2gKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBUU19OQU5EX0NUUkwJKFRTNzhYWF9GUEdBX1JFR1NfVklSVF9CQVNFIHwgMHg4MDApCS8qIFZJUlQgKi8KKyNkZWZpbmUgVFNfTkFORF9EQVRBCShUUzc4WFhfRlBHQV9SRUdTX1BIWVNfQkFTRSB8IDB4ODA0KQkvKiBQSFlTICovCisKKy8qCisgKiBoYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcworICoKKyAqIGN0cmw6CisgKiBOQU5EX05DRTogYml0IDAgLT4gYml0IDIKKyAqIE5BTkRfQ0xFOiBiaXQgMSAtPiBiaXQgMQorICogTkFORF9BTEU6IGJpdCAyIC0+IGJpdCAwCisgKi8KK3N0YXRpYyB2b2lkIHRzNzh4eF90c19uYW5kX2NtZF9jdHJsKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl1bnNpZ25lZCBjaGFyIGJpdHM7CisKKwkJYml0cyA9IChjdHJsICYgTkFORF9OQ0UpIDw8IDI7CisJCWJpdHMgfD0gY3RybCAmIE5BTkRfQ0xFOworCQliaXRzIHw9IChjdHJsICYgTkFORF9BTEUpID4+IDI7CisKKwkJd3JpdGViKChyZWFkYihUU19OQU5EX0NUUkwpICYgfjB4NykgfCBiaXRzLCBUU19OQU5EX0NUUkwpOworCX0KKworCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgdGhpcy0+SU9fQUREUl9XKTsKK30KKworc3RhdGljIGludCB0czc4eHhfdHNfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJcmV0dXJuIHJlYWRiKFRTX05BTkRfQ1RSTCkgJiAweDIwOworfQorCitjb25zdCBjaGFyICp0c19uYW5kX3BhcnRfcHJvYmVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHRzNzh4eF90c19uYW5kX3BhcnRzW10gPSB7CisJeworCQkubmFtZQkJPSAibWJyIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSBTWl8xMjhLLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSwgeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IFNaXzRNLAorCX0sIHsKKwkJLm5hbWUJCT0gImluaXRyZCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl80TSwKKwl9LCB7CisJCS5uYW1lCQk9ICJyb290ZnMiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSB0czc4eHhfdHNfbmFuZF9kYXRhID0geworCS5jaGlwCT0geworCQkucGFydF9wcm9iZV90eXBlcwk9IHRzX25hbmRfcGFydF9wcm9iZXMsCisJCS5wYXJ0aXRpb25zCQk9IHRzNzh4eF90c19uYW5kX3BhcnRzLAorCQkubnJfcGFydGl0aW9ucwkJPSBBUlJBWV9TSVpFKHRzNzh4eF90c19uYW5kX3BhcnRzKSwKKwkJLmNoaXBfZGVsYXkJCT0gMTUsCisJCS5vcHRpb25zCQk9IE5BTkRfVVNFX0ZMQVNIX0JCVCwKKwl9LAorCS5jdHJsCT0geworCQkvKgorCQkgKiBUaGUgSFcgRUNDIG9mZmxvYWRpbmcgZnVuY3Rpb25zLCB1c2VkIHRvIGdpdmUgYWJvdXQgYSA5JQorCQkgKiBwZXJmb3JtYW5jZSBpbmNyZWFzZSBmb3IgJ2RkIGlmPS9kZXYvbXRkYmxvY2tYJyBhbmQgNSUgZm9yCisJCSAqIG5hbmRkdW1wLiAgVGhpcyBhbGwgaG93ZXZlciB3YXMgY2hhbmdlZCBieSBnaXQgY29tbWl0CisJCSAqIGU2Y2Y1ZGYxODM4YzI4YmIwNjBhYzQ1YjU1ODVlNDhlNzFiYmM3NDAgc28gbm93IHRoZXJlIGlzCisJCSAqIG5vIHBlcmZvcm1hbmNlIGFkdmFudGFnZSB0byBiZSBoYWQgc28gd2Ugbm8gbG9uZ2VyIGJvdGhlcgorCQkgKi8KKwkJLmNtZF9jdHJsCQk9IHRzNzh4eF90c19uYW5kX2NtZF9jdHJsLAorCQkuZGV2X3JlYWR5CQk9IHRzNzh4eF90c19uYW5kX2Rldl9yZWFkeSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0czc4eHhfdHNfbmFuZF9yZXNvdXJjZXMgPSB7CisJLnN0YXJ0CQk9IFRTX05BTkRfREFUQSwKKwkuZW5kCQk9IFRTX05BTkRfREFUQSArIDQsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSU8sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0czc4eHhfdHNfbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImdlbl9uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnRzNzh4eF90c19uYW5kX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSAmdHM3OHh4X3RzX25hbmRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKK307CisKK3N0YXRpYyBpbnQgdHM3OHh4X3RzX25hbmRfbG9hZCh2b2lkKQoreworCWludCByYzsKKworCWlmICh0czc4eHhfZnBnYS5zdXBwb3J0cy50c19uYW5kLmluaXQgPT0gMCkgeworCQlyYyA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdHM3OHh4X3RzX25hbmRfZGV2aWNlKTsKKwkJaWYgKCFyYykKKwkJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX25hbmQuaW5pdCA9IDE7CisJfSBlbHNlCisJCXJjID0gcGxhdGZvcm1fZGV2aWNlX2FkZCgmdHM3OHh4X3RzX25hbmRfZGV2aWNlKTsKKworCXJldHVybiByYzsKK307CisKK3N0YXRpYyB2b2lkIHRzNzh4eF90c19uYW5kX3VubG9hZCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9kZWwoJnRzNzh4eF90c19uYW5kX2RldmljZSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRlBHQSAnaG90cGx1Zycgc3VwcG9ydCBjb2RlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHRzNzh4eF9mcGdhX2RldmljZXNfemVyb19pbml0KHZvaWQpCit7CisJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLmluaXQgPSAwOworCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX25hbmQuaW5pdCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHRzNzh4eF9mcGdhX3N1cHBvcnRzKHZvaWQpCit7CisJLyogVE9ETzogcHV0IHRoaXMgJ3RhYmxlJyBpbnRvIHRzNzh4eC1mcGdhLmggKi8KKwlzd2l0Y2ggKHRzNzh4eF9mcGdhLmlkKSB7CisJY2FzZSBUUzc4MDBfUkVWXzE6CisJY2FzZSBUUzc4MDBfUkVWXzI6CisJY2FzZSBUUzc4MDBfUkVWXzM6CisJY2FzZSBUUzc4MDBfUkVWXzQ6CisJY2FzZSBUUzc4MDBfUkVWXzU6CisJCXRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3J0Yy5wcmVzZW50ID0gMTsKKwkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfbmFuZC5wcmVzZW50ID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdHM3OHh4X2ZwZ2Euc3VwcG9ydHMudHNfcnRjLnByZXNlbnQgPSAwOworCQl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19uYW5kLnByZXNlbnQgPSAwOworCX0KK30KKworc3RhdGljIGludCB0czc4eHhfZnBnYV9sb2FkX2RldmljZXModm9pZCkKK3sKKwlpbnQgdG1wLCByZXQgPSAwOworCisJaWYgKHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3J0Yy5wcmVzZW50ID09IDEpIHsKKwkJdG1wID0gdHM3OHh4X3RzX3J0Y19sb2FkKCk7CisJCWlmICh0bXApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIlRTLTc4eHg6IFJUQyBub3QgcmVnaXN0ZXJlZFxuIik7CisJCQl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19ydGMucHJlc2VudCA9IDA7CisJCX0KKwkJcmV0IHw9IHRtcDsKKwl9CisJaWYgKHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX25hbmQucHJlc2VudCA9PSAxKSB7CisJCXRtcCA9IHRzNzh4eF90c19uYW5kX2xvYWQoKTsKKwkJaWYgKHRtcCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiVFMtNzh4eDogTkFORCBub3QgcmVnaXN0ZXJlZFxuIik7CisJCQl0czc4eHhfZnBnYS5zdXBwb3J0cy50c19uYW5kLnByZXNlbnQgPSAwOworCQl9CisJCXJldCB8PSB0bXA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0czc4eHhfZnBnYV91bmxvYWRfZGV2aWNlcyh2b2lkKQoreworCWludCByZXQgPSAwOworCisJaWYgKHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX3J0Yy5wcmVzZW50ID09IDEpCisJCXRzNzh4eF90c19ydGNfdW5sb2FkKCk7CisJaWYgKHRzNzh4eF9mcGdhLnN1cHBvcnRzLnRzX25hbmQucHJlc2VudCA9PSAxKQorCQl0czc4eHhfdHNfbmFuZF91bmxvYWQoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHM3OHh4X2ZwZ2FfbG9hZCh2b2lkKQoreworCXRzNzh4eF9mcGdhLmlkID0gcmVhZGwoVFM3OFhYX0ZQR0FfUkVHU19WSVJUX0JBU0UpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiVFMtNzh4eCBGUEdBOiBtYWdpYz0weCUuNngsIHJldj0weCUuMnhcbiIsCisJCQkodHM3OHh4X2ZwZ2EuaWQgPj4gOCkgJiAweGZmZmZmZiwKKwkJCXRzNzh4eF9mcGdhLmlkICYgMHhmZik7CisKKwl0czc4eHhfZnBnYV9zdXBwb3J0cygpOworCisJaWYgKHRzNzh4eF9mcGdhX2xvYWRfZGV2aWNlcygpKSB7CisJCXRzNzh4eF9mcGdhLnN0YXRlID0gLTE7CisJCXJldHVybiAtRUJVU1k7CisJfQorCiAJcmV0dXJuIDA7CiB9OwotI2Vsc2UKLXN0YXRpYyBpbnQgX19pbml0IHRzNzh4eF9ydGNfaW5pdCh2b2lkKQorCitzdGF0aWMgaW50IHRzNzh4eF9mcGdhX3VubG9hZCh2b2lkKQogeworCXVuc2lnbmVkIGludCBmcGdhX2lkOworCisJZnBnYV9pZCA9IHJlYWRsKFRTNzhYWF9GUEdBX1JFR1NfVklSVF9CQVNFKTsKKworCS8qCisJICogVGhlcmUgZG9lcyBub3Qgc2VlbSB0byBiZSBhIGZlYXNpYmxlIHdheSB0byBibG9jayBhY2Nlc3MgdG8gdGhlIEdQSU8KKwkgKiBwaW5zIGZyb20gdXNlcnNwYWNlICgvZGV2L21lbSkuICBUaGlzIGlmIGNsYXVzZSBzaG91bGQgaG9wZWZ1bGx5IHdhcm4KKwkgKiB0aG9zZSBmb29saXNoIGVub3VnaCBub3QgdG8gZm9sbG93ICdwb2xpY3knIDopCisJICoKKwkgKiBVckpUQUcgU1ZOIHNpbmNlIHIxMzgxIGNhbiBiZSB1c2VkIHRvIHJlcHJvZ3JhbSB0aGUgRlBHQQorCSAqLworCWlmICh0czc4eHhfZnBnYS5pZCAhPSBmcGdhX2lkKSB7CisJCXByaW50ayhLRVJOX0VSUgkiVFMtNzh4eCBGUEdBOiBtYWdpYy9yZXYgbWlzbWF0Y2hcbiIKKwkJCSJUUy03OHh4IEZQR0E6IHdhcyAweCUuNngvJS4yeCBidXQgbm93IDB4JS42eC8lLjJ4XG4iLAorCQkJKHRzNzh4eF9mcGdhLmlkID4+IDgpICYgMHhmZmZmZmYsIHRzNzh4eF9mcGdhLmlkICYgMHhmZiwKKwkJCShmcGdhX2lkID4+IDgpICYgMHhmZmZmZmYsIGZwZ2FfaWQgJiAweGZmKTsKKwkJdHM3OHh4X2ZwZ2Euc3RhdGUgPSAtMTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAodHM3OHh4X2ZwZ2FfdW5sb2FkX2RldmljZXMoKSkgeworCQl0czc4eHhfZnBnYS5zdGF0ZSA9IC0xOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwogCXJldHVybiAwOwotfQotI2VuZGlmCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogU0FUQQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSB0czc4eHhfc2F0YV9kYXRhID0gewotCS5uX3BvcnRzCT0gMiwKIH07CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcHJpbnQgc29tZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIGJvYXJkCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkIF9faW5pdCB0czc4eHhfcHJpbnRfYm9hcmRfaWQodm9pZCkKK3N0YXRpYyBzc2l6ZV90IHRzNzh4eF9mcGdhX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQl1bnNpZ25lZCBpbnQgYm9hcmRfaW5mbzsKKwlpZiAodHM3OHh4X2ZwZ2Euc3RhdGUgPCAwKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICJib3JrZWRcbiIpOwogCi0JYm9hcmRfaW5mbyA9IHJlYWRsKFRTNzhYWF9GUEdBX1JFR1NfU1lTQ09OX0lEKTsKLQlwcmludGsoS0VSTl9JTkZPICJUUy03OHh4IEluZm86IEZQR0EgcmV2PSUuMngsIEJvYXJkIE1hZ2ljPSUuNngsICIsCi0JCQkJYm9hcmRfaW5mbyAmIDB4ZmYsCi0JCQkJKGJvYXJkX2luZm8gPj4gOCkgJiAweGZmZmZmZik7Ci0JYm9hcmRfaW5mbyA9IHJlYWRsKFRTNzhYWF9GUEdBX1JFR1NfU1lTQ09OX0xDREkpOwotCXByaW50aygiSlAxPSVkLCBKUDI9JWRcbiIsCi0JCQkJKGJvYXJkX2luZm8gPj4gMzApICYgMHgxLAotCQkJCShib2FyZF9pbmZvID4+IDMxKSAmIDB4MSk7Ci19OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCAodHM3OHh4X2ZwZ2Euc3RhdGUpID8gIm9ubGluZSIgOiAib2ZmbGluZSIpOworfQorCitzdGF0aWMgc3NpemVfdCB0czc4eHhfZnBnYV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwlpbnQgdmFsdWUsIHJldDsKKworCWlmICh0czc4eHhfZnBnYS5zdGF0ZSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJUUy03OHh4IEZQR0E6IGJvcmtlZCwgeW91IG11c3QgcG93ZXJjeWNsZSBhc2FwXG4iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAoc3RybmNtcChidWYsICJvbmxpbmUiLCBzaXplb2YoIm9ubGluZSIpIC0gMSkgPT0gMCkKKwkJdmFsdWUgPSAxOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCAib2ZmbGluZSIsIHNpemVvZigib2ZmbGluZSIpIC0gMSkgPT0gMCkKKwkJdmFsdWUgPSAwOworCWVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgInRzNzh4eF9mcGdhX3N0b3JlOiBJbnZhbGlkIHZhbHVlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHRzNzh4eF9mcGdhLnN0YXRlID09IHZhbHVlKQorCQlyZXR1cm4gbjsKKworCXJldCA9ICh0czc4eHhfZnBnYS5zdGF0ZSA9PSAwKQorCQk/IHRzNzh4eF9mcGdhX2xvYWQoKQorCQk6IHRzNzh4eF9mcGdhX3VubG9hZCgpOworCisJaWYgKCEocmV0IDwgMCkpCisJCXRzNzh4eF9mcGdhLnN0YXRlID0gdmFsdWU7CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0czc4eHhfZnBnYV9hdHRyID0KKwlfX0FUVFIodHM3OHh4X2ZwZ2EsIDA2NDQsIHRzNzh4eF9mcGdhX3Nob3csIHRzNzh4eF9mcGdhX3N0b3JlKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBHZW5lcmFsIFNldHVwCkBAIC0yMjMsMjAgKzQ0OCw2IEBACiAJeyAxNywgTVBQX1VBUlQgfSwKIAl7IDE4LCBNUFBfVUFSVCB9LAogCXsgMTksIE1QUF9VQVJUIH0sCi0JeyAtMSB9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHRzNzh4eF9pbml0KHZvaWQpCi17Ci0JLyoKLQkgKiBTZXR1cCBiYXNpYyBPcmlvbiBmdW5jdGlvbnMuIE5lZWQgdG8gYmUgY2FsbGVkIGVhcmx5LgotCSAqLwotCW9yaW9uNXhfaW5pdCgpOwotCi0JdHM3OHh4X3ByaW50X2JvYXJkX2lkKCk7Ci0KLQlvcmlvbjV4X21wcF9jb25mKHRzNzh4eF9tcHBfbW9kZXMpOwotCiAJLyoKIAkgKiBNUFBbMjBdIFBDSSBDbG9jayBPdXQgMQogCSAqIE1QUFsyMV0gUENJIENsb2NrIE91dCAwCkBAIC0yNDUsNiArNDU2LDE5IEBACiAJICogTVBQWzI0XSBVbnVzZWQKIAkgKiBNUFBbMjVdIFVudXNlZAogCSAqLworCXsgLTEgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB0czc4eHhfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwkvKgorCSAqIFNldHVwIGJhc2ljIE9yaW9uIGZ1bmN0aW9ucy4gTmVlZCB0byBiZSBjYWxsZWQgZWFybHkuCisJICovCisJb3Jpb241eF9pbml0KCk7CisKKwlvcmlvbjV4X21wcF9jb25mKHRzNzh4eF9tcHBfbW9kZXMpOwogCiAJLyoKIAkgKiBDb25maWd1cmUgcGVyaXBoZXJhbHMuCkBAIC0yNTcsMTIgKzQ4MSwxMiBAQAogCW9yaW9uNXhfdWFydDFfaW5pdCgpOwogCW9yaW9uNXhfeG9yX2luaXQoKTsKIAotCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKFRTNzhYWF9OT1JfQk9PVF9CQVNFLAotCQkJCSAgIFRTNzhYWF9OT1JfQk9PVF9TSVpFKTsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnRzNzh4eF9ub3JfYm9vdF9mbGFzaCk7Ci0KLQlpZiAoIXRzNzh4eF9ydGNfaW5pdCgpKQotCQlwcmludGsoS0VSTl9JTkZPICJUUy03OHh4IFJUQyBub3QgZGV0ZWN0ZWQgb3IgZW5hYmxlZFxuIik7CisJLyogRlBHQSBpbml0ICovCisJdHM3OHh4X2ZwZ2FfZGV2aWNlc196ZXJvX2luaXQoKTsKKwlyZXQgPSB0czc4eHhfZnBnYV9sb2FkKCk7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUocG93ZXJfa29iaiwgJnRzNzh4eF9mcGdhX2F0dHIuYXR0cik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJzeXNmc19jcmVhdGVfZmlsZSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogfQogCiBNQUNISU5FX1NUQVJUKFRTNzhYWCwgIlRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzh4eCBTQkMiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC93cnQzNTBuLXYyLXNldHVwLmMKaW5kZXggY2M4Zjg5Mi4uMWI0YWQ5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3dydDM1MG4tdjItc2V0dXAuYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvd3J0MzUwbi12Mi1zZXR1cC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAkuZHVwbGV4CQk9IERVUExFWF9GVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSB3cnQzNTBuX3YyX3N3aXRjaF9kYXRhID0geworc3RhdGljIHN0cnVjdCBkc2FfY2hpcF9kYXRhIHdydDM1MG5fdjJfc3dpdGNoX2NoaXBfZGF0YSA9IHsKIAkucG9ydF9uYW1lc1swXQk9ICJsYW4yIiwKIAkucG9ydF9uYW1lc1sxXQk9ICJsYW4xIiwKIAkucG9ydF9uYW1lc1syXQk9ICJ3YW4iLApAQCAtMTE1LDYgKzExNSwxMSBAQAogCS5wb3J0X25hbWVzWzddCT0gImxhbjQiLAogfTsKIAorc3RhdGljIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSB3cnQzNTBuX3YyX3N3aXRjaF9wbGF0X2RhdGEgPSB7CisJLm5yX2NoaXBzCT0gMSwKKwkuY2hpcAkJPSAmd3J0MzUwbl92Ml9zd2l0Y2hfY2hpcF9kYXRhLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHdydDM1MG5fdjJfaW5pdCh2b2lkKQogewogCS8qCkBAIC0xMjksNyArMTM0LDcgQEAKIAkgKi8KIAlvcmlvbjV4X2VoY2kwX2luaXQoKTsKIAlvcmlvbjV4X2V0aF9pbml0KCZ3cnQzNTBuX3YyX2V0aF9kYXRhKTsKLQlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmd3J0MzUwbl92Ml9zd2l0Y2hfZGF0YSwgTk9fSVJRKTsKKwlvcmlvbjV4X2V0aF9zd2l0Y2hfaW5pdCgmd3J0MzUwbl92Ml9zd2l0Y2hfcGxhdF9kYXRhLCBOT19JUlEpOwogCW9yaW9uNXhfdWFydDBfaW5pdCgpOwogCiAJb3Jpb241eF9zZXR1cF9kZXZfYm9vdF93aW4oV1JUMzUwTl9WMl9OT1JfQk9PVF9CQVNFLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggZTEyZTdhYi4uNWRkYTJiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0zMCw3ICszMCw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJY3B1X3Jlc2V0KDApOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKaW5kZXggOGVlYTczMC4uOTZhMjAwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCkBAIC00MCw2ICs0MCw5IEBACiBjb25maWcgR1VNU1RJWF9BTTIwMEVQRAogCWJvb2wgIkVuYWJsZSBBTTIwMEVQRCBib2FyZCBzdXBwb3J0IgogCitjb25maWcgR1VNU1RJWF9BTTMwMEVQRAorCWJvb2wgIkVuYWJsZSBBTTMwMEVQRCBib2FyZCBzdXBwb3J0IgorCiBlbmRjaG9pY2UKIAogY29uZmlnIE1BQ0hfSU5URUxNT1RFMgpAQCAtMjU0LDEwICsyNTcsMjQgQEAKIAlib29sICJDb21wdUxhYiBFTS14MjcwIHBsYXRmb3JtIgogCXNlbGVjdCBQWEEyN3gKIAotY29uZmlnIE1BQ0hfQ09MSUJSSQotCWJvb2wgIlRvcmFkZXggQ29saWJyaSBQWDI3eCIKK2NvbmZpZyBNQUNIX0VYRURBCisJYm9vbCAiQ29tcHVMYWIgZVhlZGEgcGxhdGZvcm0iCiAJc2VsZWN0IFBYQTI3eAogCitjb25maWcgTUFDSF9DT0xJQlJJCisJYm9vbCAiVG9yYWRleCBDb2xpYnJpIFBYQTI3MCIKKwlzZWxlY3QgUFhBMjd4CisKK2NvbmZpZyBNQUNIX0NPTElCUkkzMDAKKwlib29sICJUb3JhZGV4IENvbGlicmkgUFhBMzAwLzMxMCIKKwlzZWxlY3QgUFhBM3h4CisJc2VsZWN0IENQVV9QWEEzMDAKKworY29uZmlnIE1BQ0hfQ09MSUJSSTMyMAorCWJvb2wgIlRvcmFkZXggQ29saWJyaSBQWEEzMjAiCisJc2VsZWN0IFBYQTN4eAorCXNlbGVjdCBDUFVfUFhBMzIwCisKIGNvbmZpZyBNQUNIX1pZTE9OSVRFCiAJYm9vbCAiUFhBM3h4IERldmVsb3BtZW50IFBsYXRmb3JtIChha2EgWnlsb25pdGUpIgogCXNlbGVjdCBQWEEzeHgKQEAgLTI5NSw4ICszMTIsMTUgQEAKIAlib29sICJFbmFibGUgSFRDIE1hZ2ljaWFuIFN1cHBvcnQiCiAJc2VsZWN0IFBYQTI3eAogCXNlbGVjdCBJV01NWFQKKwlzZWxlY3QgUFhBX1NTUAorCXNlbGVjdCBIQVZFX1BXTQogCXNlbGVjdCBQWEFfSEFWRV9CT0FSRF9JUlFTCiAKK2NvbmZpZyBNQUNIX0hJTUFMQVlBCisJYm9vbCAiSFRDIEhpbWFsYXlhIFN1cHBvcnQiCisJc2VsZWN0IENQVV9QWEEyNngKKwlzZWxlY3QgRkJfVzEwMAorCiBjb25maWcgTUFDSF9NSU9BNzAxCiAJYm9vbCAiTWl0YWMgTWlvIEE3MDEgU3VwcG9ydCIKIAlzZWxlY3QgUFhBMjd4CkBAIC0zMTksNiArMzQzLDE2IEBACiAJYm9vbCAiUFhBIGJhc2VkIFBhbG0gUERBcyIKIAlzZWxlY3QgSEFWRV9QV00KIAorY29uZmlnIE1BQ0hfUEFMTVQ1CisJYm9vbCAiUGFsbSBUdW5nc3RlbnxUNSIKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBX1BBTE0KKwlzZWxlY3QgUFhBMjd4CisJc2VsZWN0IElXTU1YVAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYSBQYWxtIFR1bmdzdGVufFQ1CisJICBoYW5kaGVsZCBjb21wdXRlci4KKwogY29uZmlnIE1BQ0hfUEFMTVRYCiAJYm9vbCAiUGFsbSBUfFgiCiAJZGVmYXVsdCB5CkBAIC0zMzksNiArMzczLDE2IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIFBhbG0gWmlyZSA3MgogCSAgaGFuZGhlbGQgY29tcHV0ZXIuCiAKK2NvbmZpZyBNQUNIX1BBTE1MRAorCWJvb2wgIlBhbG0gTGlmZURyaXZlIgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gQVJDSF9QWEFfUEFMTQorCXNlbGVjdCBQWEEyN3gKKwlzZWxlY3QgSVdNTVhUCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIFBhbG0gTGlmZURyaXZlCisJICBoYW5kaGVsZCBjb21wdXRlci4KKwogY29uZmlnIE1BQ0hfUENNOTkwX0JBU0VCT0FSRAogCWJvb2wgIlBIWVRFQyBQQ00tOTkwIGRldmVsb3BtZW50IGJvYXJkIgogCXNlbGVjdCBIQVZFX1BXTQpAQCAtMzU5LDYgKzQwMywxOCBAQAogCiBlbmRjaG9pY2UKIAorY29uZmlnIE1BQ0hfQ1NCNzI2CisJYm9vbCAiRW5hYmxlIENvZ2VudCBDU0I3MjYgU3lzdGVtIE9uIGEgTW9kdWxlIgorCXNlbGVjdCBQWEEyN3gKKwlzZWxlY3QgSVdNTVhUCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaW50ZW5kIHRvIHJ1biB0aGlzIGtlcm5lbCBvbiBhIENvZ2VudAorCSAgQ1NCNzI2IFN5c3RlbSBPbiBNb2R1bGUuCisKK2NvbmZpZyBDU0I3MjZfQ1NCNzAxCisJYm9vbCAiRW5hYmxlIHN1cHByb3QgZm9yIENTQjcwMSBiYXNlYm9hcmQiCisJZGVwZW5kcyBvbiBNQUNIX0NTQjcyNgorCiBjb25maWcgUFhBX0VaWAogCWJvb2wgIk1vdG9yb2xhIEVaWCBQbGF0Zm9ybSIKIAlzZWxlY3QgUFhBMjd4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCmluZGV4IDdiMjhiYjUuLmM4MGUxYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlCkBAIC0zLDggKzMsOCBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0IChtdXN0IGJlIGxpbmtlZCBiZWZvcmUgYm9hcmQgc3BlY2lmaWMgc3VwcG9ydCkKLW9iai15CQkJCSs9IGNsb2NrLm8gZGV2aWNlcy5vIGdlbmVyaWMubyBpcnEubyBkbWEubyBcCi0JCQkJICAgdGltZS5vIGdwaW8ubyByZXNldC5vCitvYmoteQkJCQkrPSBjbG9jay5vIGRldmljZXMubyBnZW5lcmljLm8gaXJxLm8gXAorCQkJCSAgIHRpbWUubyByZXNldC5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vIHNsZWVwLm8gc3RhbmRieS5vCiAKIGlmZXEgKCQoQ09ORklHX0NQVV9GUkVRKSx5KQpAQCAtMjgsMTMgKzI4LDE2IEBACiAjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKIG9iai0kKENPTkZJR19BUkNIX0dVTVNUSVgpCSs9IGd1bXN0aXgubwogb2JqLSQoQ09ORklHX0dVTVNUSVhfQU0yMDBFUEQpCSs9IGFtMjAwZXBkLm8KK29iai0kKENPTkZJR19HVU1TVElYX0FNMzAwRVBEKQkrPSBhbTMwMGVwZC5vCiBvYmotJChDT05GSUdfQVJDSF9MVUJCT0NLKQkrPSBsdWJib2NrLm8KIG9iai0kKENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwKSArPSBscGQyNzAubwogb2JqLSQoQ09ORklHX01BQ0hfTUFJTlNUT05FKQkrPSBtYWluc3RvbmUubwogb2JqLSQoQ09ORklHX01BQ0hfTVA5MDBDKQkrPSBtcDkwMC5vCiBvYmotJChDT05GSUdfQVJDSF9QWEFfSURQKQkrPSBpZHAubwogb2JqLSQoQ09ORklHX01BQ0hfVFJJWkVQUzQpCSs9IHRyaXplcHM0Lm8KLW9iai0kKENPTkZJR19NQUNIX0NPTElCUkkpCSs9IGNvbGlicmkubworb2JqLSQoQ09ORklHX01BQ0hfQ09MSUJSSSkJKz0gY29saWJyaS1weGEyNzAubworb2JqLSQoQ09ORklHX01BQ0hfQ09MSUJSSTMwMCkJKz0gY29saWJyaS1weGEzeHgubyBjb2xpYnJpLXB4YTMwMC5vCitvYmotJChDT05GSUdfTUFDSF9DT0xJQlJJMzIwKQkrPSBjb2xpYnJpLXB4YTN4eC5vIGNvbGlicmktcHhhMzIwLm8KIG9iai0kKENPTkZJR19NQUNIX0g1MDAwKQkrPSBoNTAwMC5vCiBvYmotJChDT05GSUdfUFhBX1NIQVJQX0M3eHgpCSs9IGNvcmdpLm8gc2hhcnBzbF9wbS5vIGNvcmdpX3BtLm8KIG9iai0kKENPTkZJR19QWEFfU0hBUlBfQ3h4MDApCSs9IHNwaXR6Lm8gc2hhcnBzbF9wbS5vIHNwaXR6X3BtLm8KQEAgLTQ1LDYgKzQ4LDcgQEAKIG9iai0kKENPTkZJR19NQUNIX1RPU0EpCQkrPSB0b3NhLm8KIG9iai0kKENPTkZJR19NQUNIX0VNX1gyNzApCSs9IGVtLXgyNzAubwogb2JqLSQoQ09ORklHX01BQ0hfTUFHSUNJQU4pCSs9IG1hZ2ljaWFuLm8KK29iai0kKENPTkZJR19NQUNIX0hJTUFMQVlBKQkrPSBoaW1hbGF5YS5vCiBvYmotJChDT05GSUdfTUFDSF9NSU9BNzAxKQkrPSBtaW9hNzAxLm8gbWlvYTcwMV9ib290cmVzdW1lLm8KIG9iai0kKENPTkZJR19BUkNIX1BYQV9FU0VSSUVTKQkrPSBlc2VyaWVzLm8KIG9iai0kKENPTkZJR19NQUNIX0UzMzApCQkrPSBlMzMwLm8KQEAgLTUzLDcgKzU3LDkgQEAKIG9iai0kKENPTkZJR19NQUNIX0U3NTApCQkrPSBlNzUwLm8KIG9iai0kKENPTkZJR19NQUNIX0U0MDApCQkrPSBlNDAwLm8KIG9iai0kKENPTkZJR19NQUNIX0U4MDApCQkrPSBlODAwLm8KK29iai0kKENPTkZJR19NQUNIX1BBTE1UNSkJKz0gcGFsbXQ1Lm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1UWCkJKz0gcGFsbXR4Lm8KK29iai0kKENPTkZJR19NQUNIX1BBTE1MRCkJKz0gcGFsbWxkLm8KIG9iai0kKENPTkZJR19NQUNIX1BBTE1aNzIpCSs9IHBhbG16NzIubwogb2JqLSQoQ09ORklHX0FSQ0hfVklQRVIpCSs9IHZpcGVyLm8KIApAQCAtNzEsNiArNzcsOCBAQAogb2JqLSQoQ09ORklHX1BYQV9FWlgpICAgICAgICAgICArPSBlengubwogCiBvYmotJChDT05GSUdfTUFDSF9JTlRFTE1PVEUyKSAgICs9IGltb3RlMi5vCitvYmotJChDT05GSUdfTUFDSF9DU0I3MjYpCSs9IGNzYjcyNi5vCitvYmotJChDT05GSUdfQ1NCNzI2X0NTQjcwMSkJKz0gY3NiNzAxLm8KIAogIyBTdXBwb3J0IGZvciBibGlua3kgbGlnaHRzCiBsZWQteSA6PSBsZWRzLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2FtMjAwZXBkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9hbTIwMGVwZC5jCmluZGV4IDc3ZWU4MGUuLjM0OTlmYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2FtMjAwZXBkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvYW0yMDBlcGQuYwpAQCAtMzAsOCArMzAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9ndW1zdGl4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvYW0zMDBlcGQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2FtMzAwZXBkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJkMTBhMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2FtMzAwZXBkLmMKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBhbTMwMGVwZC5jIC0tIFBsYXRmb3JtIGRldmljZSBmb3IgQU0zMDAgRVBEIGtpdAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgSmF5YSBLdW1hcgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgd29yayB3YXMgbWFkZSBwb3NzaWJsZSBieSBoZWxwIGFuZCBlcXVpcG1lbnQgc3VwcG9ydCBmcm9tIEUtSW5rCisgKiBDb3Jwb3JhdGlvbi4gaHR0cDovL3N1cHBvcnQuZWluay5jb20vY29tbXVuaXR5CisgKgorICogVGhpcyBkcml2ZXIgaXMgd3JpdHRlbiB0byBiZSB1c2VkIHdpdGggdGhlIEJyb2Fkc2hlZXQgZGlzcGxheSBjb250cm9sbGVyLgorICogb24gdGhlIEFNMzAwIEVQRCBwcm90b3R5cGUga2l0L2RldmVsb3BtZW50IGtpdCB3aXRoIGFuIEUtSW5rIDgwMHg2MDAKKyAqIFZpenBsZXggRVBEIG9uIGEgR3Vtc3RpeCBib2FyZCB1c2luZyB0aGUgQnJvYWRzaGVldCBpbnRlcmZhY2UgYm9hcmQuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8bWFjaC9ndW1zdGl4Lmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisjaW5jbHVkZSA8dmlkZW8vYnJvYWRzaGVldGZiLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFuZWxfdHlwZSA9IDY7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYW0zMDBfZGV2aWNlOworc3RhdGljIHN0cnVjdCBicm9hZHNoZWV0X2JvYXJkIGFtMzAwX2JvYXJkOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhbTMwMF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPMTZfR1BJTywKKwlHUElPMTdfR1BJTywKKwlHUElPMzJfR1BJTywKKwlHUElPNDhfR1BJTywKKwlHUElPNDlfR1BJTywKKwlHUElPNTFfR1BJTywKKwlHUElPNzRfR1BJTywKKwlHUElPNzVfR1BJTywKKwlHUElPNzZfR1BJTywKKwlHUElPNzdfR1BJTywKKworCS8qIHRoaXMgaXMgdGhlIDE2LWJpdCBoZGIgYnVzIDU4LTczICovCisJR1BJTzU4X0dQSU8sCisJR1BJTzU5X0dQSU8sCisJR1BJTzYwX0dQSU8sCisJR1BJTzYxX0dQSU8sCisKKwlHUElPNjJfR1BJTywKKwlHUElPNjNfR1BJTywKKwlHUElPNjRfR1BJTywKKwlHUElPNjVfR1BJTywKKworCUdQSU82Nl9HUElPLAorCUdQSU82N19HUElPLAorCUdQSU82OF9HUElPLAorCUdQSU82OV9HUElPLAorCisJR1BJTzcwX0dQSU8sCisJR1BJTzcxX0dQSU8sCisJR1BJTzcyX0dQSU8sCisJR1BJTzczX0dQSU8sCit9OworCisvKiByZWdpc3RlciBvZmZzZXRzIGZvciBncGlvIGNvbnRyb2wgKi8KKyNkZWZpbmUgUFdSX0dQSU9fUElOCTE2CisjZGVmaW5lIENGR19HUElPX1BJTgkxNworI2RlZmluZSBSRFlfR1BJT19QSU4JMzIKKyNkZWZpbmUgRENfR1BJT19QSU4JNDgKKyNkZWZpbmUgUlNUX0dQSU9fUElOCTQ5CisjZGVmaW5lIExFRF9HUElPX1BJTgk1MQorI2RlZmluZSBSRF9HUElPX1BJTgk3NAorI2RlZmluZSBXUl9HUElPX1BJTgk3NQorI2RlZmluZSBDU19HUElPX1BJTgk3NgorI2RlZmluZSBJUlFfR1BJT19QSU4JNzcKKworLyogaGRiIGJ1cyAqLworI2RlZmluZSBEQjBfR1BJT19QSU4JNTgKKyNkZWZpbmUgREIxNV9HUElPX1BJTgk3MworCitzdGF0aWMgaW50IGdwaW9zW10gPSB7IFBXUl9HUElPX1BJTiwgQ0ZHX0dQSU9fUElOLCBSRFlfR1BJT19QSU4sIERDX0dQSU9fUElOLAorCQkJUlNUX0dQSU9fUElOLCBSRF9HUElPX1BJTiwgV1JfR1BJT19QSU4sIENTX0dQSU9fUElOLAorCQkJSVJRX0dQSU9fUElOLCBMRURfR1BJT19QSU4gfTsKK3N0YXRpYyBjaGFyICpncGlvX25hbWVzW10gPSB7ICJQV1IiLCAiQ0ZHIiwgIlJEWSIsICJEQyIsICJSU1QiLCAiUkQiLCAiV1IiLAorCQkJCSJDUyIsICJJUlEiLCAiTEVEIiB9OworCitzdGF0aWMgaW50IGFtMzAwX3dhaXRfZXZlbnQoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhcikKK3sKKwkvKiB0b2RvOiBpbXByb3ZlIGVyciByZWNvdmVyeSAqLworCXdhaXRfZXZlbnQocGFyLT53YWl0cSwgZ3Bpb19nZXRfdmFsdWUoUkRZX0dQSU9fUElOKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW0zMDBfaW5pdF9ncGlvX3JlZ3Moc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhcikKK3sKKwlpbnQgaTsKKwlpbnQgZXJyOworCWNoYXIgZGJuYW1lWzhdOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZ3Bpb3MpOyBpKyspIHsKKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KGdwaW9zW2ldLCBncGlvX25hbWVzW2ldKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycigmYW0zMDBfZGV2aWNlLT5kZXYsICJmYWlsZWQgcmVxdWVzdGluZyAiCisJCQkJImdwaW8gJXMsIGVycj0lZFxuIiwgZ3Bpb19uYW1lc1tpXSwgZXJyKTsKKwkJCWdvdG8gZXJyX3JlcV9ncGlvOworCQl9CisJfQorCisJLyogd2UgYWxzbyBuZWVkIHRvIHRha2UgY2FyZSBvZiB0aGUgaGRiIGJ1cyAqLworCWZvciAoaSA9IERCMF9HUElPX1BJTjsgaSA8PSBEQjE1X0dQSU9fUElOOyBpKyspIHsKKwkJc3ByaW50ZihkYm5hbWUsICJEQiVkIiwgaSk7CisJCWVyciA9IGdwaW9fcmVxdWVzdChpLCBkYm5hbWUpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZhbTMwMF9kZXZpY2UtPmRldiwgImZhaWxlZCByZXF1ZXN0aW5nICIKKwkJCQkiZ3BpbyAlZCwgZXJyPSVkXG4iLCBpLCBlcnIpOworCQkJd2hpbGUgKGkgPj0gREIwX0dQSU9fUElOKQorCQkJCWdwaW9fZnJlZShpLS0pOworCQkJaSA9IEFSUkFZX1NJWkUoZ3Bpb3MpIC0gMTsKKwkJCWdvdG8gZXJyX3JlcV9ncGlvOworCQl9CisJfQorCisJLyogc2V0dXAgdGhlIG91dHB1dHMgYW5kIGluaXQgdmFsdWVzICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFBXUl9HUElPX1BJTiwgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KENGR19HUElPX1BJTiwgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KERDX0dQSU9fUElOLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUkRfR1BJT19QSU4sIDEpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChXUl9HUElPX1BJTiwgMSk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KENTX0dQSU9fUElOLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUlNUX0dQSU9fUElOLCAwKTsKKworCS8qIHNldHVwIHRoZSBpbnB1dHMgKi8KKwlncGlvX2RpcmVjdGlvbl9pbnB1dChSRFlfR1BJT19QSU4pOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KElSUV9HUElPX1BJTik7CisKKwkvKiBzdGFydCB0aGUgaGRiIGJ1cyBhcyBhbiBpbnB1dCAqLworCWZvciAoaSA9IERCMF9HUElPX1BJTjsgaSA8PSBEQjE1X0dQSU9fUElOOyBpKyspCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChpLCAwKTsKKworCS8qIGdvIGludG8gY29tbWFuZCBtb2RlICovCisJZ3Bpb19zZXRfdmFsdWUoQ0ZHX0dQSU9fUElOLCAxKTsKKwlncGlvX3NldF92YWx1ZShSU1RfR1BJT19QSU4sIDApOworCW1zbGVlcCgxMCk7CisJZ3Bpb19zZXRfdmFsdWUoUlNUX0dQSU9fUElOLCAxKTsKKwltc2xlZXAoMTApOworCWFtMzAwX3dhaXRfZXZlbnQocGFyKTsKKworCXJldHVybiAwOworCitlcnJfcmVxX2dwaW86CisJd2hpbGUgKGkgPiAwKQorCQlncGlvX2ZyZWUoZ3Bpb3NbaS0tXSk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFtMzAwX2luaXRfYm9hcmQoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhcikKK3sKKwlyZXR1cm4gYW0zMDBfaW5pdF9ncGlvX3JlZ3MocGFyKTsKK30KKworc3RhdGljIHZvaWQgYW0zMDBfY2xlYW51cChzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyKQoreworCWludCBpOworCisJZnJlZV9pcnEoSVJRX0dQSU8oUkRZX0dQSU9fUElOKSwgcGFyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGdwaW9zKTsgaSsrKQorCQlncGlvX2ZyZWUoZ3Bpb3NbaV0pOworCisJZm9yIChpID0gREIwX0dQSU9fUElOOyBpIDw9IERCMTVfR1BJT19QSU47IGkrKykKKwkJZ3Bpb19mcmVlKGkpOworCit9CisKK3N0YXRpYyB1MTYgYW0zMDBfZ2V0X2hkYihzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyKQoreworCXUxNiByZXMgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8PSAoREIxNV9HUElPX1BJTiAtIERCMF9HUElPX1BJTikgOyBpKyspCisJCXJlcyB8PSAoZ3Bpb19nZXRfdmFsdWUoREIwX0dQSU9fUElOICsgaSkpID8gKDEgPDwgaSkgOiAwOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgYW0zMDBfc2V0X2hkYihzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLCB1MTYgZGF0YSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPD0gKERCMTVfR1BJT19QSU4gLSBEQjBfR1BJT19QSU4pIDsgaSsrKQorCQlncGlvX3NldF92YWx1ZShEQjBfR1BJT19QSU4gKyBpLCAoZGF0YSA+PiBpKSAmIDB4MDEpOworfQorCisKK3N0YXRpYyB2b2lkIGFtMzAwX3NldF9jdGwoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdW5zaWduZWQgY2hhciBiaXQsCisJCQkJdTggc3RhdGUpCit7CisJc3dpdGNoIChiaXQpIHsKKwljYXNlIEJTX0NTOgorCQlncGlvX3NldF92YWx1ZShDU19HUElPX1BJTiwgc3RhdGUpOworCQlicmVhazsKKwljYXNlIEJTX0RDOgorCQlncGlvX3NldF92YWx1ZShEQ19HUElPX1BJTiwgc3RhdGUpOworCQlicmVhazsKKwljYXNlIEJTX1dSOgorCQlncGlvX3NldF92YWx1ZShXUl9HUElPX1BJTiwgc3RhdGUpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYW0zMDBfZ2V0X3BhbmVsX3R5cGUodm9pZCkKK3sKKwlyZXR1cm4gcGFuZWxfdHlwZTsKK30KKworc3RhdGljIGlycXJldHVybl90IGFtMzAwX2hhbmRsZV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIgPSBkZXZfaWQ7CisKKwl3YWtlX3VwKCZwYXItPndhaXRxKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgYW0zMDBfc2V0dXBfaXJxKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWludCByZXQ7CisJc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCXJldCA9IHJlcXVlc3RfaXJxKElSUV9HUElPKFJEWV9HUElPX1BJTiksIGFtMzAwX2hhbmRsZV9pcnEsCisJCQkJSVJRRl9ESVNBQkxFRHxJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJCSJBTTMwMCIsIHBhcik7CisJaWYgKHJldCkKKwkJZGV2X2VycigmYW0zMDBfZGV2aWNlLT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBicm9hZHNoZWV0X2JvYXJkIGFtMzAwX2JvYXJkID0geworCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmluaXQJCQk9IGFtMzAwX2luaXRfYm9hcmQsCisJLmNsZWFudXAJCT0gYW0zMDBfY2xlYW51cCwKKwkuc2V0X2hkYgkJPSBhbTMwMF9zZXRfaGRiLAorCS5nZXRfaGRiCQk9IGFtMzAwX2dldF9oZGIsCisJLnNldF9jdGwJCT0gYW0zMDBfc2V0X2N0bCwKKwkud2FpdF9mb3JfcmR5CQk9IGFtMzAwX3dhaXRfZXZlbnQsCisJLmdldF9wYW5lbF90eXBlCQk9IGFtMzAwX2dldF9wYW5lbF90eXBlLAorCS5zZXR1cF9pcnEJCT0gYW0zMDBfc2V0dXBfaXJxLAorfTsKKworaW50IF9faW5pdCBhbTMwMF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGFtMzAwX3Bpbl9jb25maWcpKTsKKworCS8qIHJlcXVlc3Qgb3VyIHBsYXRmb3JtIGluZGVwZW5kZW50IGRyaXZlciAqLworCXJlcXVlc3RfbW9kdWxlKCJicm9hZHNoZWV0ZmIiKTsKKworCWFtMzAwX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygiYnJvYWRzaGVldGZiIiwgLTEpOworCWlmICghYW0zMDBfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHRoZSBhbTMwMF9ib2FyZCB0aGF0IHdpbGwgYmUgc2VlbiBieSBicm9hZHNoZWV0ZmIgaXMgYSBjb3B5ICovCisJcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKGFtMzAwX2RldmljZSwgJmFtMzAwX2JvYXJkLAorCQkJCQlzaXplb2YoYW0zMDBfYm9hcmQpKTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYW0zMDBfZGV2aWNlKTsKKworCWlmIChyZXQpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChhbTMwMF9kZXZpY2UpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCittb2R1bGVfcGFyYW0ocGFuZWxfdHlwZSwgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBhbmVsX3R5cGUsICJTZWxlY3QgdGhlIHBhbmVsIHR5cGU6IDYsIDgsIDk3Iik7CisKK01PRFVMRV9ERVNDUklQVElPTigiYm9hcmQgZHJpdmVyIGZvciBhbTMwMCBlcGQga2l0Iik7CitNT0RVTEVfQVVUSE9SKCJKYXlhIEt1bWFyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjU1LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjU1LmMKaW5kZXggODNhNGNkZi4uMjUzZmQ3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI1NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNTUuYwpAQCAtMjIsMTAgKzIyLDggQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+Ci0jaW5jbHVkZSA8bWFjaC9iaXRmaWVsZC5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKaW5kZXggZGY4M2I5Ny4uMzQ1NzZiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0Yy12MzAyMC5oPgogI2luY2x1ZGUgPHZpZGVvL21ieGZiLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHgtcGNpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LXBjaS5jCmluZGV4IDMxNTZiMjUuLjc4NzNmYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHgtcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC1wY2kuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2l0ODE1Mi5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jCmluZGV4IGQ5OWZkOWUuLjExN2I1NDM1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHguYwpAQCAtMjIsOCArMjIsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogCkBAIC05Niw3ICs5NCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgY214MjcwX2RtOTAwMF9wbGF0ZGF0YSA9IHsKLQkuZmxhZ3MJCT0gRE05MDAwX1BMQVRGXzMyQklUT05MWSwKKwkuZmxhZ3MJCT0gRE05MDAwX1BMQVRGXzMyQklUT05MWSB8IERNOTAwMF9QTEFURl9OT19FRVBST00sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXgyeHhfZG05MDAwX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgzMDAuYwppbmRleCBmZjBjNTc3Li5hOWY0OGIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDMwMC5jCkBAIC0yOCw5ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEzMDAuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTMwMC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgpAQCAtMTYyLDcgKzE2MCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgY21feDMwMF9kbTkwMDBfcGxhdGRhdGEgPSB7Ci0JLmZsYWdzCQk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFksCisJLmZsYWdzCQk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFkgfCBETTkwMDBfUExBVEZfTk9fRUVQUk9NLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG05MDAwX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYmNmYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgVG9yYWRleCBQWEEyNzAgYmFzZWQgQ29saWJyaSBtb2R1bGUKKyAqICBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9jb2xpYnJpLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKgorICogR1BJTyBjb25maWd1cmF0aW9uCisgKi8KK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEyNzBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzc4X25DU18yLAkvKiBFdGhlcm5ldCBDUyAqLworCUdQSU8xMTRfR1BJTywJLyogRXRoZXJuZXQgSVJRICovCit9OworCisvKgorICogTk9SIGZsYXNoCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBjb2xpYnJpX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lID0JCSJCb290bG9hZGVyIiwKKwkJLm9mZnNldCA9CTB4MDAwMDAwMDAsCisJCS5zaXplID0JCTB4MDAwNDAwMDAsCisJCS5tYXNrX2ZsYWdzID0JTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwgeworCQkubmFtZSA9CQkiS2VybmVsIiwKKwkJLm9mZnNldCA9CTB4MDAwNDAwMDAsCisJCS5zaXplID0JCTB4MDA0MDAwMDAsCisJCS5tYXNrX2ZsYWdzID0JMAorCX0sIHsKKwkJLm5hbWUgPQkJIlJvb3RmcyIsCisJCS5vZmZzZXQgPQkweDAwNDQwMDAwLAorCQkuc2l6ZSA9CQlNVERQQVJUX1NJWl9GVUxMLAorCQkubWFza19mbGFncyA9CTAKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBjb2xpYnJpX2ZsYXNoX2RhdGFbXSA9IHsKKwl7CisJCS53aWR0aAkJPSA0LAkJCS8qIGJhbmt3aWR0aCBpbiBieXRlcyAqLworCQkucGFydHMJCT0gY29saWJyaV9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGNvbGlicmlfcGFydGl0aW9ucykKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvbGlicmlfcHhhMjcwX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IFBYQV9DUzBfUEhZUywKKwkuZW5kCT0gUFhBX0NTMF9QSFlTICsgU1pfMzJNIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvbGlicmlfcHhhMjcwX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJPSAwLAorCS5kZXYgCT0geworCQkucGxhdGZvcm1fZGF0YSA9IGNvbGlicmlfZmxhc2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZSA9ICZjb2xpYnJpX3B4YTI3MF9mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCisvKgorICogRE05MDAwIEV0aGVybmV0CisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19ETTkwMDApCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtOTAwMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IENPTElCUklfUFhBMjcwX0VUSF9QSFlTLAorCQkuZW5kCT0gQ09MSUJSSV9QWEEyNzBfRVRIX1BIWVMgKyAzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gQ09MSUJSSV9QWEEyNzBfRVRIX1BIWVMgKyA0LAorCQkuZW5kCT0gQ09MSUJSSV9QWEEyNzBfRVRIX1BIWVMgKyA0ICsgNTAwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gQ09MSUJSSV9QWEEyNzBfRVRIX0lSUSwKKwkJLmVuZAk9IENPTElCUklfUFhBMjcwX0VUSF9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSVJRRl9UUklHR0VSX1JJU0lORywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG05MDAwX2RldmljZSA9IHsKKwkubmFtZQkJPSAiZG05MDAwIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGRtOTAwMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGRtOTAwMF9yZXNvdXJjZXMsCit9OworI2VuZGlmIC8qIENPTkZJR19ETTkwMDAgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvbGlicmlfcHhhMjcwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjb2xpYnJpX3B4YTI3MF9mbGFzaF9kZXZpY2UsCisjaWYgZGVmaW5lZChDT05GSUdfRE05MDAwKQorCSZkbTkwMDBfZGV2aWNlLAorI2VuZGlmCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY29saWJyaV9weGEyNzBfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMjcwX3Bpbl9jb25maWcpKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTI3MF9kZXZpY2VzKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQ09MSUJSSSwgIlRvcmFkZXggQ29saWJyaSBQWEEyNzAiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBDT0xJQlJJX1NEUkFNX0JBU0UgKyAweDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gY29saWJyaV9weGEyNzBfaW5pdCwKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhMjd4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjMmVhZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYworICoKKyAqICBTdXBwb3J0IGZvciBUb3JhZGV4IFBYQTMwMC8zMTAgYmFzZWQgQ29saWJyaSBtb2R1bGUKKyAqCisgKiAgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKyAqICBNYXR0aGlhcyBNZWllciA8bWF0dGhpYXMuai5tZWllckBnbXgubmV0PgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bmV0L2F4ODg3OTYuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEzMDAuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KKyNpbmNsdWRlIDxtYWNoL29oY2kuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfQVg4ODc5NikKKyNkZWZpbmUgQ09MSUJSSV9FVEhfSVJRX0dQSU8JbWZwX3RvX2dwaW8oR1BJTzI2X0dQSU8pCisvKgorICogQXNpeCBBWDg4Nzk2IEV0aGVybmV0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgYXhfcGxhdF9kYXRhIGNvbGlicmlfYXNpeF9wbGF0ZGF0YSA9IHsKKwkuZmxhZ3MJCT0gQVhGTEdfTUFDX0ZST01ERVYsCisJLndvcmRsZW5ndGgJPSAyCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvbGlicmlfYXNpeF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUFhBM3h4X0NTMl9QSFlTLAorCQkuZW5kICAgPSBQWEEzeHhfQ1MyX1BIWVMgKyAoMHgyMCAqIDIpIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IGdwaW9fdG9faXJxKENPTElCUklfRVRIX0lSUV9HUElPKSwKKwkJLmVuZCAgID0gZ3Bpb190b19pcnEoQ09MSUJSSV9FVEhfSVJRX0dQSU8pLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFzaXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJheDg4Nzk2IiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcyAJPSBBUlJBWV9TSVpFKGNvbGlicmlfYXNpeF9yZXNvdXJjZSksCisJLnJlc291cmNlCT0gY29saWJyaV9hc2l4X3Jlc291cmNlLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZjb2xpYnJpX2FzaXhfcGxhdGRhdGEKKwl9Cit9OworCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzAwX2V0aF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPMV9uQ1MyLAkJCS8qIEFYODg3OTYgY2hpcCBzZWxlY3QgKi8KKwlHUElPMjZfR1BJTyB8IE1GUF9QVUxMX0hJR0gJLyogQVg4ODc5NiBJUlEgKi8KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMwMF9pbml0X2V0aCh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzAwX2V0aF9waW5fY29uZmlnKSk7CisJc2V0X2lycV90eXBlKGdwaW9fdG9faXJxKENPTElCUklfRVRIX0lSUV9HUElPKSwgSVJRX1RZUEVfRURHRV9GQUxMSU5HKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmFzaXhfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzAwX2luaXRfZXRoKHZvaWQpIHt9CisjZW5kaWYgLyogQ09ORklHX0FYODg3OTYgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEzMDBfdXNiX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCUdQSU8wXzJfVVNCSF9QRU4sCisJR1BJTzFfMl9VU0JIX1BXUiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfcHhhMzAwX29oY2lfaW5mbyA9IHsKKwkucG9ydF9tb2RlCT0gUE1NX0dMT0JBTF9NT0RFLAorCS5mbGFncwkJPSBFTkFCTEVfUE9SVDEgfCBQT1dFUl9DT05UUk9MX0xPVyB8IFBPV0VSX1NFTlNFX0xPVywKK307CisKK3ZvaWQgX19pbml0IGNvbGlicmlfcHhhMzAwX2luaXRfb2hjaSh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzAwX3VzYl9waW5fY29uZmlnKSk7CisJcHhhX3NldF9vaGNpX2luZm8oJmNvbGlicmlfcHhhMzAwX29oY2lfaW5mbyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhMzAwX2luaXRfb2hjaSh2b2lkKSB7fQorI2VuZGlmIC8qIENPTkZJR19VU0JfT0hDSV9IQ0QgfHwgQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUgKi8KKworc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMwMF9tbWNfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzdfTU1DMV9DTEssCisJR1BJTzE0X01NQzFfQ01ELAorCUdQSU8zX01NQzFfREFUMCwKKwlHUElPNF9NTUMxX0RBVDEsCisJR1BJTzVfTU1DMV9EQVQyLAorCUdQSU82X01NQzFfREFUMywKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzAwX2xjZF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPNTRfTENEX0xERF8wLAorCUdQSU81NV9MQ0RfTEREXzEsCisJR1BJTzU2X0xDRF9MRERfMiwKKwlHUElPNTdfTENEX0xERF8zLAorCUdQSU81OF9MQ0RfTEREXzQsCisJR1BJTzU5X0xDRF9MRERfNSwKKwlHUElPNjBfTENEX0xERF82LAorCUdQSU82MV9MQ0RfTEREXzcsCisJR1BJTzYyX0xDRF9MRERfOCwKKwlHUElPNjNfTENEX0xERF85LAorCUdQSU82NF9MQ0RfTEREXzEwLAorCUdQSU82NV9MQ0RfTEREXzExLAorCUdQSU82Nl9MQ0RfTEREXzEyLAorCUdQSU82N19MQ0RfTEREXzEzLAorCUdQSU82OF9MQ0RfTEREXzE0LAorCUdQSU82OV9MQ0RfTEREXzE1LAorCUdQSU83MF9MQ0RfTEREXzE2LAorCUdQSU83MV9MQ0RfTEREXzE3LAorCUdQSU82Ml9MQ0RfQ1NfTiwKKwlHUElPNzJfTENEX0ZDTEssCisJR1BJTzczX0xDRF9MQ0xLLAorCUdQSU83NF9MQ0RfUENMSywKKwlHUElPNzVfTENEX0JJQVMsCisJR1BJTzc2X0xDRF9WU1lOQywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMwMF9pbml0X2xjZCh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzAwX2xjZF9waW5fY29uZmlnKSk7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMDBfaW5pdF9sY2Qodm9pZCkge30KKyNlbmRpZiAvKiBDT05GSUdfRkJfUFhBIHx8IENPTkZJR19GQl9QWEFfTU9EVUxFICovCisKKyNpZiBkZWZpbmVkKFNORF9BQzk3X0NPREVDKSB8fCBkZWZpbmVkKFNORF9BQzk3X0NPREVDX01PRFVMRSkKK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEzMTBfYWM5N19waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPMjRfQUM5N19TWVNDTEssCisJR1BJTzIzX0FDOTdfbkFDUkVTRVQsCisJR1BJTzI1X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMjdfQUM5N19TREFUQV9PVVQsCisJR1BJTzI4X0FDOTdfU1lOQywKKwlHUElPMjlfQUM5N19CSVRDTEsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY29saWJyaV9weGEzMTBfaW5pdF9hYzk3KHZvaWQpCit7CisJLyogbm8gQUM5NyBjb2RlYyBvbiBDb2xpYnJpIFBYQTMwMCAqLworCWlmICghY3B1X2lzX3B4YTMxMCgpKQorCQlyZXR1cm47CisKKwlweGEzeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3B4YTMxMF9hYzk3X3Bpbl9jb25maWcpKTsKKwlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMTBfaW5pdF9hYzk3KHZvaWQpIHt9CisjZW5kaWYKKwordm9pZCBfX2luaXQgY29saWJyaV9weGEzMDBfaW5pdCh2b2lkKQoreworCWNvbGlicmlfcHhhMzAwX2luaXRfZXRoKCk7CisJY29saWJyaV9weGEzMDBfaW5pdF9vaGNpKCk7CisJY29saWJyaV9weGEzMDBfaW5pdF9sY2QoKTsKKwljb2xpYnJpX3B4YTN4eF9pbml0X2xjZChtZnBfdG9fZ3BpbyhHUElPMzlfR1BJTykpOworCWNvbGlicmlfcHhhMzEwX2luaXRfYWM5NygpOworCWNvbGlicmlfcHhhM3h4X2luaXRfbW1jKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzAwX21tY19waW5fY29uZmlnKSwKKwkJCQltZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU8xMykpOworfQorCitNQUNISU5FX1NUQVJUKENPTElCUkkzMDAsICJUb3JhZGV4IENvbGlicmkgUFhBMzAwIikKKwkucGh5c19pbwk9IDB4NDAwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gQ09MSUJSSV9TRFJBTV9CQVNFICsgMHgxMDAsCisJLmluaXRfbWFjaGluZQk9IGNvbGlicmlfcHhhMzAwX2luaXQsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTN4eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Yjc0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMyMC5jCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzIwLmMKKyAqCisgKiAgU3VwcG9ydCBmb3IgVG9yYWRleCBQWEEzMjAvMzEwIGJhc2VkIENvbGlicmkgbW9kdWxlCisgKgorICogIERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKiAgTWF0dGhpYXMgTWVpZXIgPG1hdHRoaWFzLmoubWVpZXJAZ214Lm5ldD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPG5ldC9heDg4Nzk2Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEzMjAuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CisjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfQVg4ODc5NikKKyNkZWZpbmUgQ09MSUJSSV9FVEhfSVJRX0dQSU8JbWZwX3RvX2dwaW8oR1BJTzM2X0dQSU8pCisKKy8qCisgKiBBc2l4IEFYODg3OTYgRXRoZXJuZXQKKyAqLworc3RhdGljIHN0cnVjdCBheF9wbGF0X2RhdGEgY29saWJyaV9hc2l4X3BsYXRkYXRhID0geworCS5mbGFncwkJPSBBWEZMR19NQUNfRlJPTURFViwKKwkud29yZGxlbmd0aAk9IDIKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY29saWJyaV9hc2l4X3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBQWEEzeHhfQ1MyX1BIWVMsCisJCS5lbmQgICA9IFBYQTN4eF9DUzJfUEhZUyArICgweDIwICogMikgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gZ3Bpb190b19pcnEoQ09MSUJSSV9FVEhfSVJRX0dQSU8pLAorCQkuZW5kICAgPSBncGlvX3RvX2lycShDT0xJQlJJX0VUSF9JUlFfR1BJTyksCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXNpeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImF4ODg3OTYiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzIAk9IEFSUkFZX1NJWkUoY29saWJyaV9hc2l4X3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBjb2xpYnJpX2FzaXhfcmVzb3VyY2UsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmNvbGlicmlfYXNpeF9wbGF0ZGF0YQorCX0KK307CisKK3N0YXRpYyBtZnBfY2ZnX3QgY29saWJyaV9weGEzMjBfZXRoX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCUdQSU8zX25DUzIsCQkJLyogQVg4ODc5NiBjaGlwIHNlbGVjdCAqLworCUdQSU8zNl9HUElPIHwgTUZQX1BVTExfSElHSAkvKiBBWDg4Nzk2IElSUSAqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzIwX2luaXRfZXRoKHZvaWQpCit7CisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMjBfZXRoX3Bpbl9jb25maWcpKTsKKwlzZXRfaXJxX3R5cGUoZ3Bpb190b19pcnEoQ09MSUJSSV9FVEhfSVJRX0dQSU8pLCBJUlFfVFlQRV9FREdFX0ZBTExJTkcpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXNpeF9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdF9ldGgodm9pZCkge30KKyNlbmRpZiAvKiBDT05GSUdfQVg4ODc5NiAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEKSB8fCBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0RfTU9EVUxFKQorc3RhdGljIG1mcF9jZmdfdCBjb2xpYnJpX3B4YTMyMF91c2JfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzJfMl9VU0JIX1BFTiwKKwlHUElPM18yX1VTQkhfUFdSLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgY29saWJyaV9weGEzMjBfb2hjaV9pbmZvID0geworCS5wb3J0X21vZGUJPSBQTU1fR0xPQkFMX01PREUsCisJLmZsYWdzCQk9IEVOQUJMRV9QT1JUMSB8IFBPV0VSX0NPTlRST0xfTE9XIHwgUE9XRVJfU0VOU0VfTE9XLAorfTsKKwordm9pZCBfX2luaXQgY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKHZvaWQpCit7CisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMjBfdXNiX3Bpbl9jb25maWcpKTsKKwlweGFfc2V0X29oY2lfaW5mbygmY29saWJyaV9weGEzMjBfb2hjaV9pbmZvKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMjBfaW5pdF9vaGNpKHZvaWQpIHt9CisjZW5kaWYgLyogQ09ORklHX1VTQl9PSENJX0hDRCB8fCBDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSAqLworCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX21tY19waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPMjJfTU1DMV9DTEssCisJR1BJTzIzX01NQzFfQ01ELAorCUdQSU8xOF9NTUMxX0RBVDAsCisJR1BJTzE5X01NQzFfREFUMSwKKwlHUElPMjBfTU1DMV9EQVQyLAorCUdQSU8yMV9NTUMxX0RBVDMKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX2xjZF9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwlHUElPNl8yX0xDRF9MRERfMCwKKwlHUElPN18yX0xDRF9MRERfMSwKKwlHUElPOF8yX0xDRF9MRERfMiwKKwlHUElPOV8yX0xDRF9MRERfMywKKwlHUElPMTBfMl9MQ0RfTEREXzQsCisJR1BJTzExXzJfTENEX0xERF81LAorCUdQSU8xMl8yX0xDRF9MRERfNiwKKwlHUElPMTNfMl9MQ0RfTEREXzcsCisJR1BJTzYzX0xDRF9MRERfOCwKKwlHUElPNjRfTENEX0xERF85LAorCUdQSU82NV9MQ0RfTEREXzEwLAorCUdQSU82Nl9MQ0RfTEREXzExLAorCUdQSU82N19MQ0RfTEREXzEyLAorCUdQSU82OF9MQ0RfTEREXzEzLAorCUdQSU82OV9MQ0RfTEREXzE0LAorCUdQSU83MF9MQ0RfTEREXzE1LAorCUdQSU83MV9MQ0RfTEREXzE2LAorCUdQSU83Ml9MQ0RfTEREXzE3LAorCUdQSU83M19MQ0RfQ1NfTiwKKwlHUElPNzRfTENEX1ZTWU5DLAorCUdQSU8xNF8yX0xDRF9GQ0xLLAorCUdQSU8xNV8yX0xDRF9MQ0xLLAorCUdQSU8xNl8yX0xDRF9QQ0xLLAorCUdQSU8xN18yX0xDRF9CSUFTLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzIwX2luaXRfbGNkKHZvaWQpCit7CisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMjBfbGNkX3Bpbl9jb25maWcpKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgY29saWJyaV9weGEzMjBfaW5pdF9sY2Qodm9pZCkge30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChTTkRfQUM5N19DT0RFQykgfHwgZGVmaW5lZChTTkRfQUM5N19DT0RFQ19NT0RVTEUpCitzdGF0aWMgbWZwX2NmZ190IGNvbGlicmlfcHhhMzIwX2FjOTdfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJR1BJTzM0X0FDOTdfU1lTQ0xLLAorCUdQSU8zNV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzM3X0FDOTdfU0RBVEFfT1VULAorCUdQSU8zOF9BQzk3X1NZTkMsCisJR1BJTzM5X0FDOTdfQklUQ0xLLAorCUdQSU80MF9BQzk3X25BQ1JFU0VUCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IGNvbGlicmlfcHhhMzIwX2luaXRfYWM5Nyh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNvbGlicmlfcHhhMzIwX2FjOTdfcGluX2NvbmZpZykpOworCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb2xpYnJpX3B4YTMyMF9pbml0X2FjOTcodm9pZCkge30KKyNlbmRpZgorCit2b2lkIF9faW5pdCBjb2xpYnJpX3B4YTMyMF9pbml0KHZvaWQpCit7CisJY29saWJyaV9weGEzMjBfaW5pdF9ldGgoKTsKKwljb2xpYnJpX3B4YTMyMF9pbml0X29oY2koKTsKKwljb2xpYnJpX3B4YTMyMF9pbml0X2xjZCgpOworCWNvbGlicmlfcHhhM3h4X2luaXRfbGNkKG1mcF90b19ncGlvKEdQSU80OV9HUElPKSk7CisJY29saWJyaV9weGEzMjBfaW5pdF9hYzk3KCk7CisJY29saWJyaV9weGEzeHhfaW5pdF9tbWMoQVJSQVlfQU5EX1NJWkUoY29saWJyaV9weGEzMjBfbW1jX3Bpbl9jb25maWcpLAorCQkJCW1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzI4KSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQ09MSUJSSTMyMCwgIlRvcmFkZXggQ29saWJyaSBQWEEzMjAiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoaW9fcDJ2KDB4NDAwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBDT0xJQlJJX1NEUkFNX0JBU0UgKyAweDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gY29saWJyaV9weGEzMjBfaW5pdCwKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhM3h4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkMGFmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhM3h4LmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzeHguYworICoKKyAqICBDb21tb24gZnVuY3Rpb25zIGZvciBhbGwgVG9yYWRleCBQWEEzeHggbW9kdWxlcworICoKKyAqICBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEzMDAuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19NTUNfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfUFhBX01PRFVMRSkKK3N0YXRpYyBpbnQgbW1jX2RldGVjdF9waW47CisKK3N0YXRpYyBpbnQgY29saWJyaV9weGEzeHhfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIGlycV9oYW5kbGVyX3QgY29saWJyaV9tbWNfZGV0ZWN0X2ludCwKKwkJCQkgICB2b2lkICpkYXRhKQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QobW1jX2RldGVjdF9waW4sICJtbWMgY2FyZCBkZXRlY3QiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQobW1jX2RldGVjdF9waW4pOworCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKG1tY19kZXRlY3RfcGluKSwgY29saWJyaV9tbWNfZGV0ZWN0X2ludCwKKwkJCSAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CisJaWYgKHJldCkgeworCQlncGlvX2ZyZWUobW1jX2RldGVjdF9waW4pOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjb2xpYnJpX3B4YTN4eF9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZnJlZV9pcnEobW1jX2RldGVjdF9waW4sIGRhdGEpOworCWdwaW9fZnJlZShncGlvX3RvX2lycShtbWNfZGV0ZWN0X3BpbikpOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNvbGlicmlfcHhhM3h4X21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5kZXRlY3RfZGVsYXkJPSAyMCwKKwkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuaW5pdAkJPSBjb2xpYnJpX3B4YTN4eF9tY2lfaW5pdCwKKwkuZXhpdAkJPSBjb2xpYnJpX3B4YTN4eF9tY2lfZXhpdCwKK307CisKK3ZvaWQgX19pbml0IGNvbGlicmlfcHhhM3h4X2luaXRfbW1jKG1mcF9jZmdfdCAqcGlucywgaW50IGxlbiwgaW50IGRldGVjdF9waW4pCit7CisJcHhhM3h4X21mcF9jb25maWcocGlucywgbGVuKTsKKwltbWNfZGV0ZWN0X3BpbiA9IGRldGVjdF9waW47CisJcHhhX3NldF9tY2lfaW5mbygmY29saWJyaV9weGEzeHhfbWNpX3BsYXRmb3JtX2RhdGEpOworfQorI2VuZGlmIC8qIENPTkZJR19NTUNfUFhBIHx8IENPTkZJR19NTUNfUFhBX01PRFVMRSAqLworCisjaWYgZGVmaW5lZChDT05GSUdfRkJfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19GQl9QWEFfTU9EVUxFKQorc3RhdGljIGludCBsY2RfYmxfcGluOworCisvKgorICogTENEIHBhbmVsIChTaGFycCBMUTA0M1QzRFgwMikKKyAqLworc3RhdGljIHZvaWQgY29saWJyaV9sY2RfYmFja2xpZ2h0KGludCBvbikKK3sKKwlncGlvX3NldF92YWx1ZShsY2RfYmxfcGluLCAhIW9uKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gc2hhcnBfbHE0M19tb2RlID0geworCS5waXhjbG9jawk9IDEwMTkzNiwKKwkueHJlcwkJPSA0ODAsCisJLnlyZXMJCT0gMjcyLAorCS5icHAJCT0gMzIsCisJLmRlcHRoCQk9IDE4LAorCS5oc3luY19sZW4gICAgICA9IDQxLAorCS5sZWZ0X21hcmdpbiAgICA9IDIsCisJLnJpZ2h0X21hcmdpbiAgID0gMiwKKwkudnN5bmNfbGVuICAgICAgPSAxMCwKKwkudXBwZXJfbWFyZ2luICAgPSAyLAorCS5sb3dlcl9tYXJnaW4gICA9IDIsCisJLnN5bmMJICAgCT0gMCwKKwkuY21hcF9ncmV5c2NhbGUgPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gc2hhcnBfbHE0M19pbmZvID0geworCS5tb2RlcwkJPSAmc2hhcnBfbHE0M19tb2RlLAorCS5udW1fbW9kZXMJPSAxLAorCS5jbWFwX2ludmVyc2UJPSAwLAorCS5jbWFwX3N0YXRpYwk9IDAsCisJLmxjZF9jb25uCT0gTENEX0NPTE9SX1RGVF8xOEJQUCwKKwkucHhhZmJfYmFja2xpZ2h0X3Bvd2VyID0gY29saWJyaV9sY2RfYmFja2xpZ2h0LAorfTsKKwordm9pZCBfX2luaXQgY29saWJyaV9weGEzeHhfaW5pdF9sY2QoaW50IGJsX3BpbikKK3sKKwlsY2RfYmxfcGluID0gYmxfcGluOworCWdwaW9fcmVxdWVzdChibF9waW4sICJsY2QgYmFja2xpZ2h0Iik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGJsX3BpbiwgMCk7CisJc2V0X3B4YV9mYl9pbmZvKCZzaGFycF9scTQzX2luZm8pOworfQorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmkuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg0NzM2Mi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLmMKLSAqCi0gKiAgU3VwcG9ydCBmb3IgVG9yYWRleCBQWEEyN3ggYmFzZWQgQ29saWJyaSBtb2R1bGUKLSAqICBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9zaXplcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KLSNpbmNsdWRlIDxtYWNoL2NvbGlicmkuaD4KLQotI2luY2x1ZGUgImdlbmVyaWMuaCIKLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGlicmlfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7Ci0JR1BJTzc4X25DU18yLAkvKiBFdGhlcm5ldCBDUyAqLwotCUdQSU8xMTRfR1BJTywJLyogRXRoZXJuZXQgSVJRICovCi19OwotCi0vKgotICogRmxhc2gKLSAqLwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNvbGlicmlfcGFydGl0aW9uc1tdID0gewotCXsKLQkJLm5hbWUgPQkJIkJvb3Rsb2FkZXIiLAotCQkub2Zmc2V0ID0JMHgwMDAwMDAwMCwKLQkJLnNpemUgPQkJMHgwMDA0MDAwMCwKLQkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KLQl9LCB7Ci0JCS5uYW1lID0JCSJLZXJuZWwiLAotCQkub2Zmc2V0ID0JMHgwMDA0MDAwMCwKLQkJLnNpemUgPQkJMHgwMDQwMDAwMCwKLQkJLm1hc2tfZmxhZ3MgPQkwCi0JfSwgewotCQkubmFtZSA9CQkiUm9vdGZzIiwKLQkJLm9mZnNldCA9CTB4MDA0NDAwMDAsCi0JCS5zaXplID0JCU1URFBBUlRfU0laX0ZVTEwsCi0JCS5tYXNrX2ZsYWdzID0JMAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGNvbGlicmlfZmxhc2hfZGF0YVtdID0gewotCXsKLQkJLndpZHRoCQk9IDQsCQkJLyogYmFua3dpZHRoIGluIGJ5dGVzICovCi0JCS5wYXJ0cwkJPSBjb2xpYnJpX3BhcnRpdGlvbnMsCi0JCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY29saWJyaV9wYXJ0aXRpb25zKQotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gUFhBX0NTMF9QSFlTLAotCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl8zMk0gLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZmxhc2hfZGV2aWNlID0gewotCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAk9IDAsCi0JLmRldiAJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gY29saWJyaV9mbGFzaF9kYXRhLAotCX0sCi0JLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLX07Ci0KLS8qCi0gKiBETTkwMDAgRXRoZXJuZXQKLSAqLwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBDT0xJQlJJX0VUSF9QSFlTLAotCQkuZW5kCT0gQ09MSUJSSV9FVEhfUEhZUyArIDMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBDT0xJQlJJX0VUSF9QSFlTICsgNCwKLQkJLmVuZAk9IENPTElCUklfRVRIX1BIWVMgKyA0ICsgNTAwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CT0gQ09MSUJSSV9FVEhfSVJRLAotCQkuZW5kCT0gQ09MSUJSSV9FVEhfSVJRLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtOTAwMF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImRtOTAwMCIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkbTkwMDBfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBkbTkwMDBfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmNvbGlicmlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmZsYXNoX2RldmljZSwKLQkmZG05MDAwX2RldmljZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBjb2xpYnJpX2luaXQodm9pZCkKLXsKLQlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShjb2xpYnJpX3Bpbl9jb25maWcpKTsKLQotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGNvbGlicmlfZGV2aWNlcywgQVJSQVlfU0laRShjb2xpYnJpX2RldmljZXMpKTsKLX0KLQotTUFDSElORV9TVEFSVChDT0xJQlJJLCAiVG9yYWRleCBDb2xpYnJpIFBYQTI3eCIpCi0JLnBoeXNfaW8JPSAweDQwMDAwMDAwLAotCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IENPTElCUklfU0RSQU1fQkFTRSArIDB4MTAwLAotCS5pbml0X21hY2hpbmUJPSBjb2xpYnJpX2luaXQsCi0JLm1hcF9pbwkJPSBweGFfbWFwX2lvLAotCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKLQkudGltZXIJCT0gJnB4YV90aW1lciwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYwppbmRleCBhOGQ5MWI2Li5jZGYyMWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKQEAgLTQxLDkgKzQxLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CkBAIC02MzcsMTYgKzYzNSwxNiBAQAogCQkvKiBHcmVlbiBMRUQgb2ZmIHRlbGxzIHRoZSBib290bG9hZGVyIHRvIGhhbHQgKi8KIAkJZ3Bpb19zZXRfdmFsdWUoQ09SR0lfR1BJT19MRURfR1JFRU4sIDApOwogCi0JYXJtX21hY2hpbmVfcmVzdGFydCgnaCcpOworCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2gnLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgY29yZ2lfcmVzdGFydChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBjb3JnaV9yZXN0YXJ0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWlmICghbWFjaGluZV9pc19jb3JnaSgpKQogCQkvKiBHcmVlbiBMRUQgb24gdGVsbHMgdGhlIGJvb3Rsb2FkZXIgdG8gcmVib290ICovCiAJCWdwaW9fc2V0X3ZhbHVlKENPUkdJX0dQSU9fTEVEX0dSRUVOLCAxKTsKIAotCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2gnKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KCdoJywgY21kKTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGNvcmdpX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX2xjZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKaW5kZXggNDExNjA3Yi4uZDliOTYzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfbGNkLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxtYWNoL2NvcmdpLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxtYWNoL3NwaXR6Lmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3Njb29wLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9wbS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfcG0uYwppbmRleCBlMzUyNTkwLi43ZjA0YjNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3BtLmMKQEAgLTI0LDcgKzI0LDYgQEAKIAogI2luY2x1ZGUgPG1hY2gvc2hhcnBzbC5oPgogI2luY2x1ZGUgPG1hY2gvY29yZ2kuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlICJzaGFycHNsLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCmluZGV4IDhlMmYyMjEuLmE1ZWU3MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvc3NwLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3NwLmg+CiAjaW5jbHVkZSAic2hhcnBzbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhMnh4LmMKaW5kZXggNzcxZGQ0ZS4uMDgzYTFkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTJ4eC5jCkBAIC0zNyw4ICszNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jcHVmcmVxLXB4YTN4eC5jCmluZGV4IDk2OGM4MzAuLjY3ZjM0YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NwdWZyZXEtcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3B1ZnJlcS1weGEzeHguYwpAQCAtMTUsOCArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcwMS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyYTI5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NzYjcwMS5jCkBAIC0wLDAgKzEsNjEgQEAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGNzYjcwMV9idXR0b25zW10gPSB7CisJeworCQkuY29kZQk9IDB4NywKKwkJLmdwaW8JPSAxLAorCQkuYWN0aXZlX2xvdyA9IDEsCisJCS5kZXNjCT0gIlNXMiIsCisJCS50eXBlCT0gRVZfU1csCisJCS53YWtldXAgPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGNzYjcwMV9ncGlvX2tleXNfZGF0YSA9IHsKKwkuYnV0dG9ucyA9IGNzYjcwMV9idXR0b25zLAorCS5uYnV0dG9ucyA9IEFSUkFZX1NJWkUoY3NiNzAxX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBjc2I3MDFfbGVkc1tdID0geworCXsKKwkJLm5hbWUJPSAiY3NiNzAxOnllbGxvdzpoZWFydGJlYXQiLAorCQkuZGVmYXVsdF90cmlnZ2VyID0gImhlYXJ0YmVhdCIsCisJCS5ncGlvCT0gMTEsCisJCS5hY3RpdmVfbG93ID0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY3NiNzAxX2dwaW9fa2V5cyA9IHsKKwkubmFtZQkJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJCT0gLTEsCisJLmRldi5wbGF0Zm9ybV9kYXRhID0gJmNzYjcwMV9ncGlvX2tleXNfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBjc2I3MDFfbGVkc19ncGlvX2RhdGEgPSB7CisJLmxlZHMJCT0gY3NiNzAxX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShjc2I3MDFfbGVkcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2I3MDFfbGVkc19ncGlvID0geworCS5uYW1lCQk9ICJsZWRzLWdwaW8iLAorCS5pZAkJPSAtMSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmY3NiNzAxX2xlZHNfZ3Bpb19kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjc2I3MDFfZ3Bpb19rZXlzLAorCSZjc2I3MDFfbGVkc19ncGlvLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3NiNzAxX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK21vZHVsZV9pbml0KGNzYjcwMV9pbml0KTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jc2I3MjYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjI4OWY4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY3NiNzI2LmMKQEAgLTAsMCArMSwzMTggQEAKKy8qCisgKiAgU3VwcG9ydCBmb3IgQ29nZW50IENTQjcyNgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDggRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvc201MDEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPG1hY2gvY3NiNzI2Lmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qCisgKiBuL2E6IDIsIDUsIDYsIDcsIDgsIDIzLCAyNCwgMjUsIDI2LCAyNywgODcsIDg4LCA4OSwKKyAqIG51OiA1OCAtLSA3NywgOTAsIDkxLCA5MywgMTAyLCAxMDUtMTA4LCAxMTQtMTE2LAorICogWFhYOiAyMSwKKyAqIFhYWDogNzkgQ1NfMyBmb3IgTEFOOTIxNSBvciBQU0tUU0VMIG9uIFIyLCBSMworICogWFhYOiAzMyBDU181IGZvciBMQU45MjE1IG9uIFIxCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY3NiNzI2X3Bpbl9jb25maWdbXSA9IHsKKwlHUElPNzhfbkNTXzIsIC8qIEVYUF9DUyAqLworCUdQSU83OV9uQ1NfMywgLyogU01TQzkyMTUgKi8KKwlHUElPODBfbkNTXzQsIC8qIFNNNTAxICovCisKKwlHUElPNTJfR1BJTywgLyogI1NNU0M5MjUxIGludCAqLworCUdQSU81M19HUElPLCAvKiBTTTUwMSBpbnQgKi8KKworCUdQSU8xX0dQSU8sIC8qIEdQSU8wICovCisJR1BJTzExX0dQSU8sIC8qIEdQSU8xICovCisJR1BJTzlfR1BJTywgLyogR1BJTzIgKi8KKwlHUElPMTBfR1BJTywgLyogR1BJTzMgKi8KKwlHUElPMTZfUFdNMF9PVVQsIC8qIG9yIEdQSU80ICovCisJR1BJTzE3X1BXTTFfT1VULCAvKiBvciBHUElPNSAqLworCUdQSU85NF9HUElPLCAvKiBHUElPNiAqLworCUdQSU85NV9HUElPLCAvKiBHUElPNyAqLworCUdQSU85Nl9HUElPLCAvKiBHUElPOCAqLworCUdQSU85N19HUElPLCAvKiBHUElPOSAqLworCUdQSU8xNV9HUElPLCAvKiBFWFBfSVJRICovCisJR1BJTzE4X1JEWSwgLyogRVhQX1dBSVQgKi8KKworCUdQSU8wX0dQSU8sIC8qIFBXUl9JTlQgKi8KKwlHUElPMTA0X0dQSU8sIC8qIFBXUl9PRkYgKi8KKworCUdQSU8xMl9HUElPLCAvKiB0b3VjaCBpcnEgKi8KKworCUdQSU8xM19TU1AyX1RYRCwKKwlHUElPMTRfU1NQMl9TRlJNLAorCU1GUF9DRkdfT1VUKEdQSU8xOSwgQUYxLCBEUklWRV9MT1cpLC8qIFNTUDJfU1lTQ0xLICovCisJR1BJTzIyX1NTUDJfU0NMSywKKworCUdQSU84MV9TU1AzX1RYRCwKKwlHUElPODJfU1NQM19SWEQsCisJR1BJTzgzX1NTUDNfU0ZSTSwKKwlHUElPODRfU1NQM19TQ0xLLAorCisJR1BJTzIwX0dQSU8sIC8qIFNESU8gaW50ICovCisJR1BJTzMyX01NQ19DTEssCisJR1BJTzkyX01NQ19EQVRfMCwKKwlHUElPMTA5X01NQ19EQVRfMSwKKwlHUElPMTEwX01NQ19EQVRfMiwKKwlHUElPMTExX01NQ19EQVRfMywKKwlHUElPMTEyX01NQ19DTUQsCisJR1BJTzEwMF9HUElPLCAvKiBTRCBDRCAqLworCUdQSU8xMDFfR1BJTywgLyogU0QgV1AgKi8KKworCUdQSU8yOF9BQzk3X0JJVENMSywKKwlHUElPMjlfQUM5N19TREFUQV9JTl8wLAorCUdQSU8zMF9BQzk3X1NEQVRBX09VVCwKKwlHUElPMzFfQUM5N19TWU5DLAorCUdQSU8xMTNfQUM5N19uUkVTRVQsCisKKwlHUElPMzRfRkZVQVJUX1JYRCwKKwlHUElPMzVfRkZVQVJUX0NUUywKKwlHUElPMzZfRkZVQVJUX0RDRCwKKwlHUElPMzdfRkZVQVJUX0RTUiwKKwlHUElPMzhfRkZVQVJUX1JJLAorCUdQSU8zOV9GRlVBUlRfVFhELAorCUdQSU80MF9GRlVBUlRfRFRSLAorCUdQSU80MV9GRlVBUlRfUlRTLAorCisJR1BJTzQyX0JUVUFSVF9SWEQsCisJR1BJTzQzX0JUVUFSVF9UWEQsCisJR1BJTzQ0X0JUVUFSVF9DVFMsCisJR1BJTzQ1X0JUVUFSVF9SVFMsCisKKwlHUElPNDZfU1RVQVJUX1JYRCwKKwlHUElPNDdfU1RVQVJUX1RYRCwKKworCUdQSU80OF9uUE9FLAorCUdQSU80OV9uUFdFLAorCUdQSU81MF9uUElPUiwKKwlHUElPNTFfblBJT1csCisJR1BJTzU0X25QQ0VfMiwKKwlHUElPNTVfblBSRUcsCisJR1BJTzU2X25QV0FJVCwKKwlHUElPNTdfbklPSVMxNiwgLyogbWF5YmUgdW51c2VkICovCisJR1BJTzg1X25QQ0VfMSwKKwlHUElPOThfR1BJTywgLyogQ0YgSVJRICovCisJR1BJTzk5X0dQSU8sIC8qIENGIENEICovCisJR1BJTzEwM19HUElPLCAvKiBSZXNldCAqLworCisJR1BJTzExN19JMkNfU0NMLAorCUdQSU8xMThfSTJDX1NEQSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgY3NiNzI2X21jaV9kYXRhOworCitzdGF0aWMgaW50IGNzYjcyNl9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCWlycV9oYW5kbGVyX3QgZGV0ZWN0LCB2b2lkICpkYXRhKQoreworCWludCBlcnI7CisKKwljc2I3MjZfbWNpX2RhdGEuZGV0ZWN0X2RlbGF5ID0gbXNlY3NfdG9famlmZmllcyg1MDApOworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QsICJNTUMgZGV0ZWN0Iik7CisJaWYgKGVycikKKwkJZ290byBlcnJfZGV0X3JlcTsKKworCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2RldF9kaXI7CisKKwllcnIgPSBncGlvX3JlcXVlc3QoQ1NCNzI2X0dQSU9fTU1DX1JPLCAiTU1DIHJvIik7CisJaWYgKGVycikKKwkJZ290byBlcnJfcm9fcmVxOworCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yb19kaXI7CisKKwllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGV0ZWN0LAorCQkJSVJRRl9ESVNBQkxFRCwgIk1NQyBjYXJkIGRldGVjdCIsIGRhdGEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2lycTsKKworCXJldHVybiAwOworCitlcnJfaXJxOgorZXJyX3JvX2RpcjoKKwlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKK2Vycl9yb19yZXE6CitlcnJfZGV0X2RpcjoKKwlncGlvX2ZyZWUoQ1NCNzI2X0dQSU9fTU1DX0RFVEVDVCk7CitlcnJfZGV0X3JlcToKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNzYjcyNl9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoQ1NCNzI2X0dQSU9fTU1DX1JPKTsKK30KKworc3RhdGljIHZvaWQgY3NiNzI2X21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShncGlvX3RvX2lycShDU0I3MjZfR1BJT19NTUNfREVURUNUKSwgZGF0YSk7CisJZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19STyk7CisJZ3Bpb19mcmVlKENTQjcyNl9HUElPX01NQ19ERVRFQ1QpOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIGNzYjcyNl9tY2kgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0LAorCS5pbml0CQk9IGNzYjcyNl9tY2lfaW5pdCwKKwkuZ2V0X3JvCQk9IGNzYjcyNl9tY2lfZ2V0X3JvLAorCS8qIEZJWE1FIHNldHBvd2VyICovCisJLmV4aXQJCT0gY3NiNzI2X21jaV9leGl0LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgY3NiNzI2X29oY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkucG9ydF9tb2RlCT0gUE1NX05QU19NT0RFLAorCS5mbGFncwkJPSBFTkFCTEVfUE9SVDEgfCBOT19PQ19QUk9URUNUSU9OLAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGNzYjcyNl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiQm9vdGxvYWRlciIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gQ1NCNzI2X0ZMQVNIX3VNT04sCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJyb290IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgY3NiNzI2X2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IGNzYjcyNl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoY3NiNzI2X2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjc2I3MjZfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgICAgICAgICAgPSBQWEFfQ1MwX1BIWVMsCisJCS5lbmQgICAgICAgICAgICA9IFBYQV9DUzBfUEhZUyArIENTQjcyNl9GTEFTSF9TSVpFIC0gMSAsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNzYjcyNl9mbGFzaCA9IHsKKwkubmFtZSAgICAgICAgICAgPSAicGh5c21hcC1mbGFzaCIsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmY3NiNzI2X2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgICAgICAgPSBjc2I3MjZfZmxhc2hfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoY3NiNzI2X2ZsYXNoX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNzYjcyNl9zbTUwMV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCAgICAgICAgICA9IFBYQV9DUzRfUEhZUywKKwkJLmVuZCAgICAgICAgICAgID0gUFhBX0NTNF9QSFlTICsgU1pfOE0gLSAxLAorCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKKwkJLm5hbWUJCT0gInNtNTAxLWxvY2FsbWVtIiwKKwl9LAorCXsKKwkJLnN0YXJ0ICAgICAgICAgID0gUFhBX0NTNF9QSFlTICsgU1pfNjRNIC0gU1pfMk0sCisJCS5lbmQgICAgICAgICAgICA9IFBYQV9DUzRfUEhZUyArIFNaXzY0TSAtIDEsCisJCS5mbGFncyAgICAgICAgICA9IElPUkVTT1VSQ0VfTUVNLAorCQkubmFtZQkJPSAic201MDEtcmVncyIsCisJfSwKKwl7CisJCS5zdGFydAkJPSBDU0I3MjZfSVJRX1NNNTAxLAorCQkuZW5kCQk9IENTQjcyNl9JUlFfU001MDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbTUwMV9pbml0ZGF0YSBjc2I3MjZfc201MDFfaW5pdGRhdGEgPSB7CisvKgkuZGV2aWNlcwk9IFNNNTAxX1VTRV9VU0JfSE9TVCwgKi8KKwkuZGV2aWNlcwk9IFNNNTAxX1VTRV9VU0JfSE9TVCB8IFNNNTAxX1VTRV9VQVJUMCB8IFNNNTAxX1VTRV9VQVJUMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc201MDFfcGxhdGRhdGEgY3NiNzI2X3NtNTAxX3BsYXRkYXRhID0geworCS5pbml0CQk9ICZjc2I3MjZfc201MDFfaW5pdGRhdGEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjc2I3MjZfc201MDEgPSB7CisJLm5hbWUJCT0gInNtNTAxIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3NiNzI2X3NtNTAxX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gY3NiNzI2X3NtNTAxX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmY3NiNzI2X3NtNTAxX3BsYXRkYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNzYjcyNl9sYW5fcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBQWEFfQ1MzX1BIWVMsCisJCS5lbmQJPSBQWEFfQ1MzX1BIWVMgKyBTWl82NEsgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gQ1NCNzI2X0lSUV9MQU4sCisJCS5lbmQJPSBDU0I3MjZfSVJRX0xBTiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNzYjcyNl9sYW4gPSB7CisJLm5hbWUJCT0gInNtYzkxMXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY3NiNzI2X2xhbl9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGNzYjcyNl9sYW5fcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjc2I3MjZfZmxhc2gsCisJJmNzYjcyNl9zbTUwMSwKKwkmY3NiNzI2X2xhbiwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjc2I3MjZfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNzYjcyNl9waW5fY29uZmlnKSk7CisvKglNU0MxID0gMHg3ZmZjM2ZmYzsgKi8vKiBMQU45MjE1L0VYUF9DUyAqLworLyoJTVNDMiA9IDB4MDY2OTdmZjQ7ICovLyogbm9uZS9TTTUwMSAqLworCU1TQzIgPSAoTVNDMiAmIH4weGZmZmYpIHwgMHg3ZmY0OyAvKiBTTTUwMSAqLworCisJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKKwlweGEyN3hfc2V0X2kyY19wb3dlcl9pbmZvKE5VTEwpOworCXB4YV9zZXRfbWNpX2luZm8oJmNzYjcyNl9tY2kpOworCXB4YV9zZXRfb2hjaV9pbmZvKCZjc2I3MjZfb2hjaV9wbGF0Zm9ybV9kYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKENTQjcyNiwgIkNvZ2VudCBDU0I3MjYiKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8gICAgICAgICA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gcHhhMjd4X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IGNzYjcyNl9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZweGFfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCmluZGV4IGUxNmY4ZTMuLmQyNDVlNTljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZGV2aWNlcy5jCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkZTE3ZmMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZG1hLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9kbWEuYwotICoKLSAqICBQWEEgRE1BIHJlZ2lzdHJhdGlvbiBhbmQgSVJRIGRpc3BhdGNoaW5nCi0gKgotICogIEF1dGhvcjoJTmljb2xhcyBQaXRyZQotICogIENyZWF0ZWQ6CU5vdiAxNSwgMjAwMQotICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2RtYS5oPgotCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotCi1zdHJ1Y3QgZG1hX2NoYW5uZWwgewotCWNoYXIgKm5hbWU7Ci0JcHhhX2RtYV9wcmlvIHByaW87Ci0Jdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKik7Ci0Jdm9pZCAqZGF0YTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZG1hX2NoYW5uZWwgKmRtYV9jaGFubmVsczsKLXN0YXRpYyBpbnQgbnVtX2RtYV9jaGFubmVsczsKLQotaW50IHB4YV9yZXF1ZXN0X2RtYSAoY2hhciAqbmFtZSwgcHhhX2RtYV9wcmlvIHByaW8sCi0JCQkgdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiksCi0JCSAJIHZvaWQgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaSwgZm91bmQgPSAwOwotCi0JLyogYmFzaWMgc2FuaXR5IGNoZWNrcyAqLwotCWlmICghbmFtZSB8fCAhaXJxX2hhbmRsZXIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JZG8gewotCQkvKiB0cnkgZ3JhYmJpbmcgYSBETUEgY2hhbm5lbCB3aXRoIHRoZSByZXF1ZXN0ZWQgcHJpb3JpdHkgKi8KLQkJZm9yIChpID0gMDsgaSA8IG51bV9kbWFfY2hhbm5lbHM7IGkrKykgewotCQkJaWYgKChkbWFfY2hhbm5lbHNbaV0ucHJpbyA9PSBwcmlvKSAmJgotCQkJICAgICFkbWFfY2hhbm5lbHNbaV0ubmFtZSkgewotCQkJCWZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkvKiBpZiByZXF1ZXN0ZWQgcHJpbyBncm91cCBpcyBmdWxsLCB0cnkgYSBoaWVyIHByaW9yaXR5ICovCi0JfSB3aGlsZSAoIWZvdW5kICYmIHByaW8tLSk7Ci0KLQlpZiAoZm91bmQpIHsKLQkJRENTUihpKSA9IERDU1JfU1RBUlRJTlRSfERDU1JfRU5ESU5UUnxEQ1NSX0JVU0VSUjsKLQkJZG1hX2NoYW5uZWxzW2ldLm5hbWUgPSBuYW1lOwotCQlkbWFfY2hhbm5lbHNbaV0uaXJxX2hhbmRsZXIgPSBpcnFfaGFuZGxlcjsKLQkJZG1hX2NoYW5uZWxzW2ldLmRhdGEgPSBkYXRhOwotCX0gZWxzZSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJObyBtb3JlIGF2YWlsYWJsZSBETUEgY2hhbm5lbHMgZm9yICVzXG4iLCBuYW1lKTsKLQkJaSA9IC1FTk9ERVY7Ci0JfQotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiBpOwotfQotCi12b2lkIHB4YV9mcmVlX2RtYSAoaW50IGRtYV9jaCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCFkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lKSB7Ci0JCXByaW50ayAoS0VSTl9DUklUCi0JCQkiJXM6IHRyeWluZyB0byBmcmVlIGNoYW5uZWwgJWQgd2hpY2ggaXMgYWxyZWFkeSBmcmVlZFxuIiwKLQkJCV9fZnVuY19fLCBkbWFfY2gpOwotCQlyZXR1cm47Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCURDU1IoZG1hX2NoKSA9IERDU1JfU1RBUlRJTlRSfERDU1JfRU5ESU5UUnxEQ1NSX0JVU0VSUjsKLQlkbWFfY2hhbm5lbHNbZG1hX2NoXS5uYW1lID0gTlVMTDsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBkbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWludCBpLCBkaW50ID0gRElOVDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fZG1hX2NoYW5uZWxzOyBpKyspIHsKLQkJaWYgKGRpbnQgJiAoMSA8PCBpKSkgewotCQkJc3RydWN0IGRtYV9jaGFubmVsICpjaGFubmVsID0gJmRtYV9jaGFubmVsc1tpXTsKLQkJCWlmIChjaGFubmVsLT5uYW1lICYmIGNoYW5uZWwtPmlycV9oYW5kbGVyKSB7Ci0JCQkJY2hhbm5lbC0+aXJxX2hhbmRsZXIoaSwgY2hhbm5lbC0+ZGF0YSk7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogSVJRIGZvciBhbiB1bnJlZ2lzdGVyZWQgRE1BIGNoYW5uZWw6Ci0JCQkJICogbGV0J3MgY2xlYXIgdGhlIGludGVycnVwdHMgYW5kIGRpc2FibGUgaXQuCi0JCQkJICovCi0JCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgInNwdXJpb3VzIElSUSBmb3IgRE1BIGNoYW5uZWwgJWRcbiIsIGkpOwotCQkJCURDU1IoaSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1pbnQgX19pbml0IHB4YV9pbml0X2RtYShpbnQgbnVtX2NoKQotewotCWludCBpLCByZXQ7Ci0KLQlkbWFfY2hhbm5lbHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZG1hX2NoYW5uZWwpICogbnVtX2NoLCBHRlBfS0VSTkVMKTsKLQlpZiAoZG1hX2NoYW5uZWxzID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogZG1hIGNoYW5uZWwgcHJpb3JpdGllcyBvbiBweGEyeHggcHJvY2Vzc29yczoKLQkgKiBjaCAwIC0gMywgIDE2IC0gMTkgIDwtLT4gKDApIERNQV9QUklPX0hJR0gKLQkgKiBjaCA0IC0gNywgIDIwIC0gMjMgIDwtLT4gKDEpIERNQV9QUklPX01FRElVTQotCSAqIGNoIDggLSAxNSwgMjQgLSAzMSAgPC0tPiAoMikgRE1BX1BSSU9fTE9XCi0JICovCi0JZm9yIChpID0gMDsgaSA8IG51bV9jaDsgaSsrKSB7Ci0JCURDU1IoaSkgPSAwOwotCQlkbWFfY2hhbm5lbHNbaV0ucHJpbyA9IG1pbigoaSAmIDB4ZikgPj4gMiwgRE1BX1BSSU9fTE9XKTsKLQl9Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfRE1BLCBkbWFfaXJxX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsICJETUEiLCBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayAoS0VSTl9DUklUICJXb3chICBDYW4ndCByZWdpc3RlciBJUlEgZm9yIERNQVxuIik7Ci0JCWtmcmVlKGRtYV9jaGFubmVscyk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JbnVtX2RtYV9jaGFubmVscyA9IG51bV9jaDsKLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTChweGFfcmVxdWVzdF9kbWEpOwotRVhQT1JUX1NZTUJPTChweGFfZnJlZV9kbWEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTMzMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTMzMC5jCmluZGV4IDFiZDdmNzQuLjc0ZDNmODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2UzMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lMzMwLmMKQEAgLTIwLDkgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2UzNTAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2UzNTAuYwppbmRleCBlZGNkOWQ1Li4wODAwMzYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lMzUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTM1MC5jCkBAIC0yMSw5ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U0MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U0MDAuYwppbmRleCA3N2JiOGUyLi5lZDljMGMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTQwMC5jCkBAIC0yMiw5ICsyMiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwppbmRleCBmMjQwMmY2Li4wNzUwMGEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCkBAIC0yNCw5ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgpAQCAtMTM1LDYgKzEzMywxMSBAQAogCS8qIElyREEgKi8KIAlHUElPMzhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKIAorCS8qIEF1ZGlvIHBvd2VyIGNvbnRyb2wgKi8KKwlHUElPMTZfR1BJTywgIC8qIEFDOTcgY29kZWMgQVZERDIgc3VwcGx5IChhbmFsb2d1ZSBwb3dlcikgKi8KKwlHUElPNDBfR1BJTywgIC8qIE1pYyBhbXAgcG93ZXIgKi8KKwlHUElPNDFfR1BJTywgIC8qIEhlYWRwaG9uZSBhbXAgcG93ZXIgKi8KKwogCS8qIFBDIENhcmQgKi8KIAlHUElPOF9HUElPLCAgIC8qIENEMCAqLwogCUdQSU80NF9HUElPLCAgLyogQ0QxICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKaW5kZXggMTM3OWY5YS4uNjEyNmMwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYwpAQCAtMjMsOSArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvZXNlcmllcy1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KQEAgLTEzMyw2ICsxMzEsMTEgQEAKIAkvKiBJckRBICovCiAJR1BJTzM4X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0hJR0gsCiAKKwkvKiBBdWRpbyBwb3dlciBjb250cm9sICovCisJR1BJTzRfR1BJTywgIC8qIEhlYWRwaG9uZSBhbXAgcG93ZXIgKi8KKwlHUElPN19HUElPLCAgLyogU3BlYWtlciBhbXAgcG93ZXIgKi8KKwlHUElPMzdfR1BJTywgLyogSGVhZHBob25lIGRldGVjdCAqLworCiAJLyogUEMgQ2FyZCAqLwogCUdQSU84X0dQSU8sICAgLyogQ0QwICovCiAJR1BJTzQ0X0dQSU8sICAvKiBDRDEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U4MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U4MDAuYwppbmRleCAwY2MwMDYyLi43NGFiMDk4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lODAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTgwMC5jCkBAIC0yMyw5ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCmluZGV4IGY1ZWQ4MDMuLjkyMGRmYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKQEAgLTExLDQwICsxMSw2MyBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy12MzAyMC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9kYTkwM3guaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvdGRvMjRtLmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvYXBtLWVtdWxhdGlvbi5oPgorCisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eC11ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3hfa2V5cGFkLmg+CisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNpbmNsdWRlIDxtYWNoL2NhbWVyYS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKIAotLyogR1BJTyBJUlEgdXNhZ2UgKi8KLSNkZWZpbmUgR1BJTzQxX0VUSElSUQkJKDQxKQorLyogRU0tWDI3MCBzcGVjaWZpYyBHUElPcyAqLwogI2RlZmluZSBHUElPMTNfTU1DX0NECQkoMTMpCisjZGVmaW5lIEdQSU85NV9NTUNfV1AJCSg5NSkKKyNkZWZpbmUgR1BJTzU2X05BTkRfUkIJCSg1NikKKworLyogZVhlZGEgc3BlY2lmaWMgR1BJT3MgKi8KKyNkZWZpbmUgR1BJTzExNF9NTUNfQ0QJCSgxMTQpCisjZGVmaW5lIEdQSU8yMF9OQU5EX1JCCQkoMjApCisjZGVmaW5lIEdQSU8zOF9TRF9QV0VOCQkoMzgpCisKKy8qIGNvbW1vbiAgR1BJT3MgKi8KKyNkZWZpbmUgR1BJTzExX05BTkRfQ1MJCSgxMSkKKyNkZWZpbmUgR1BJTzkzX0NBTV9SRVNFVAkoOTMpCisjZGVmaW5lIEdQSU80MV9FVEhJUlEJCSg0MSkKICNkZWZpbmUgRU1fWDI3MF9FVEhJUlEJCUlSUV9HUElPKEdQSU80MV9FVEhJUlEpCi0jZGVmaW5lIEVNX1gyNzBfTU1DX0NECQlJUlFfR1BJTyhHUElPMTNfTU1DX0NEKQogCi0vKiBOQU5EIGNvbnRyb2wgR1BJT3MgKi8KLSNkZWZpbmUgR1BJTzExX05BTkRfQ1MJKDExKQotI2RlZmluZSBHUElPNTZfTkFORF9SQgkoNTYpCitzdGF0aWMgaW50IG1tY19jZDsKK3N0YXRpYyBpbnQgbmFuZF9yYjsKK3N0YXRpYyBpbnQgZG05MDAwX2ZsYWdzOwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBlbV94MjcwX3Bpbl9jb25maWdbXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNvbW1vbl9waW5fY29uZmlnW10gPSB7CiAJLyogQUMnOTcgKi8KIAlHUElPMjhfQUM5N19CSVRDTEssCiAJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKQEAgLTE1MCwyMSArMTczLDMyIEBACiAJR1BJTzE4X1JEWSwKIAogCS8qIEdQSU8gKi8KLQlHUElPMV9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwKKwlHUElPMV9HUElPIHwgV0FLRVVQX09OX0VER0VfQk9USCwJLyogc2xlZXAvcmVzdW1lIGJ1dHRvbiAqLwogCiAJLyogcG93ZXIgY29udHJvbHMgKi8KIAlHUElPMjBfR1BJTwl8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBHUFJTX1BXRU4gKi8KKwlHUElPOTNfR1BJTwl8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBDYW1lcmEgcmVzZXQgKi8KIAlHUElPMTE1X0dQSU8JfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogV0xBTl9QV0VOICovCiAKIAkvKiBOQU5EIGNvbnRyb2xzICovCiAJR1BJTzExX0dQSU8JfCBNRlBfTFBNX0RSSVZFX0hJR0gsCS8qIE5BTkQgQ0UjICovCi0JR1BJTzU2X0dQSU8sCQkJCS8qIE5BTkQgUmVhZHkvQnVzeSAqLwogCiAJLyogaW50ZXJydXB0cyAqLwotCUdQSU8xM19HUElPLAkvKiBNTUMgY2FyZCBkZXRlY3QgKi8KIAlHUElPNDFfR1BJTywJLyogRE05MDAwIGludGVycnVwdCAqLwogfTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgZW1feDI3MF9waW5fY29uZmlnW10gPSB7CisJR1BJTzEzX0dQSU8sCS8qIE1NQyBjYXJkIGRldGVjdCAqLworCUdQSU81Nl9HUElPLAkvKiBOQU5EIFJlYWR5L0J1c3kgKi8KKwlHUElPOTVfR1BJTywJLyogTU1DIFdyaXRlIHByb3RlY3QgKi8KK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGV4ZWRhX3Bpbl9jb25maWdbXSA9IHsKKwlHUElPMjBfR1BJTywJCQkJLyogTkFORCBSZWFkeS9CdXN5ICovCisJR1BJTzM4X0dQSU8JfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogU0Qgc2xvdCBwb3dlciAqLworCUdQSU8xMTRfR1BJTywJCQkJLyogTU1DIGNhcmQgZGV0ZWN0ICovCit9OworCiAjaWYgZGVmaW5lZChDT05GSUdfRE05MDAwKSB8fCBkZWZpbmVkKENPTkZJR19ETTkwMDBfTU9EVUxFKQogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlbV94MjcwX2RtOTAwMF9yZXNvdXJjZVtdID0gewogCVswXSA9IHsKQEAgLTE4NSw3ICsyMTksNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGVtX3gyNzBfZG05MDAwX3BsYXRkYXRhID0gewotCS5mbGFncwkJPSBETTkwMDBfUExBVEZfMzJCSVRPTkxZLAorCS5mbGFncwkJPSBETTkwMDBfUExBVEZfTk9fRUVQUk9NLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZW1feDI3MF9kbTkwMDAgPSB7CkBAIC0yMDAsNiArMjM0LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9kbTkwMDAodm9pZCkKIHsKKwllbV94MjcwX2RtOTAwMF9wbGF0ZGF0YS5mbGFncyB8PSBkbTkwMDBfZmxhZ3M7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlbV94MjcwX2RtOTAwMCk7CiB9CiAjZWxzZQpAQCAtMjg5LDcgKzMyNCw3IEBACiB7CiAJZHNiKCk7CiAKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJTzU2X05BTkRfUkIpOworCXJldHVybiBncGlvX2dldF92YWx1ZShuYW5kX3JiKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGVtX3gyNzBfcGFydGl0aW9uX2luZm9bXSA9IHsKQEAgLTM1NCwxNCArMzg5LDE0IEBACiAKIAlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJTzExX05BTkRfQ1MsIDEpOwogCi0JZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU81Nl9OQU5EX1JCLCAiTkFORCBSL0IiKTsKKwllcnIgPSBncGlvX3JlcXVlc3QobmFuZF9yYiwgIk5BTkQgUi9CIik7CiAJaWYgKGVycikgewogCQlwcl93YXJuaW5nKCJFTS1YMjcwOiBmYWlsZWQgdG8gcmVxdWVzdCBOQU5EIFIvQiBncGlvXG4iKTsKIAkJZ3Bpb19mcmVlKEdQSU8xMV9OQU5EX0NTKTsKIAkJcmV0dXJuOwogCX0KIAotCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU81Nl9OQU5EX1JCKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChuYW5kX3JiKTsKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZW1feDI3MF9uYW5kKTsKIH0KQEAgLTM2OSw2ICs0MDQsNjEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfbmFuZCh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfUEhZU01BUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX1BIWVNNQVBfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGVtX3gyNzBfbm9yX3BhcnRzW10gPSB7CisJeworCQkubmFtZSA9CQkiQm9vdGxvYWRlciIsCisJCS5vZmZzZXQgPQkweDAwMDAwMDAwLAorCQkuc2l6ZSA9CQkweDAwMDUwMDAwLAorCQkubWFza19mbGFncyA9CU1URF9XUklURUFCTEUgIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sIHsKKwkJLm5hbWUgPQkJIkVudmlyb25tZW50IiwKKwkJLm9mZnNldCA9CTB4MDAwNTAwMDAsCisJCS5zaXplID0JCTB4MDAwMTAwMDAsCisJfSwgeworCQkubmFtZSA9CQkiUmVzZXJ2ZWQiLAorCQkub2Zmc2V0ID0JMHgwMDA2MDAwMCwKKwkJLnNpemUgPQkJMHgwMDA1MDAwMCwKKwkJLm1hc2tfZmxhZ3MgPQlNVERfV1JJVEVBQkxFICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LCB7CisJCS5uYW1lID0JCSJTcGxhc2hzY3JlZW4iLAorCQkub2Zmc2V0ID0JMHgwMDBiMDAwMCwKKwkJLnNpemUgPQkJMHgwMDA1MDAwMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlbV94MjcwX25vcl9kYXRhW10gPSB7CisJWzBdID0geworCQkud2lkdGggPSAyLAorCQkucGFydHMgPSBlbV94MjcwX25vcl9wYXJ0cywKKwkJLm5yX3BhcnRzID0gQVJSQVlfU0laRShlbV94MjcwX25vcl9wYXJ0cyksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZW1feDI3MF9ub3JfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gUFhBX0NTMF9QSFlTLAorCS5lbmQJPSBQWEFfQ1MwX1BIWVMgKyBTWl8xTSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBlbV94MjcwX3BoeXNtYXBfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmZW1feDI3MF9ub3JfZmxhc2hfcmVzb3VyY2UsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmVtX3gyNzBfbm9yX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfbm9yKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlbV94MjcwX3BoeXNtYXBfZmxhc2gpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfbm9yKHZvaWQpIHt9CisjZW5kaWYKKwogLyogUFhBMjd4IE9IQ0kgY29udHJvbGxlciBzZXR1cCAqLwogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX09IQ0lfSENEX01PRFVMRSkKIHN0YXRpYyBpbnQgZW1feDI3MF9vaGNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMzk1LDQwICs0ODUsOTMgQEAKIAogLyogTUNJIGNvbnRyb2xsZXIgc2V0dXAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19NTUMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19NT0RVTEUpCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvciAqZW1feDI3MF9zZGlvX2xkbzsKKwogc3RhdGljIGludCBlbV94MjcwX21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICBpcnFfaGFuZGxlcl90IGVtX3gyNzBfZGV0ZWN0X2ludCwKIAkJCSAgICB2b2lkICpkYXRhKQogewotCWludCBlcnIgPSByZXF1ZXN0X2lycShFTV9YMjcwX01NQ19DRCwgZW1feDI3MF9kZXRlY3RfaW50LAotCQkJICAgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCWludCBlcnI7CisKKwllbV94MjcwX3NkaW9fbGRvID0gcmVndWxhdG9yX2dldChkZXYsICJ2Y2Mgc2RpbyIpOworCWlmIChJU19FUlIoZW1feDI3MF9zZGlvX2xkbykpIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCByZXF1ZXN0IFNESU8gcG93ZXIgc3VwcGx5OiAlbGRcbiIsCisJCQlQVFJfRVJSKGVtX3gyNzBfc2Rpb19sZG8pKTsKKwkJcmV0dXJuIFBUUl9FUlIoZW1feDI3MF9zZGlvX2xkbyk7CisJfQorCisJZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEobW1jX2NkKSwgZW1feDI3MF9kZXRlY3RfaW50LAorCQkJICAgICAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9SSVNJTkcgfAorCQkJICAgICAgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkgICAgICAiTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCByZXF1ZXN0IE1NQyBjYXJkIGRldGVjdCBJUlE6ICVkXG4iLAotCQkgICAgICAgX19mdW5jX18sIGVycik7Ci0JCXJldHVybiBlcnI7CisJCWRldl9lcnIoZGV2LCAiY2FuJ3QgcmVxdWVzdCBNTUMgY2FyZCBkZXRlY3QgSVJROiAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJfaXJxOworCX0KKworCWlmIChtYWNoaW5lX2lzX2VtX3gyNzAoKSkgeworCQllcnIgPSBncGlvX3JlcXVlc3QoR1BJTzk1X01NQ19XUCwgIk1NQyBXUCIpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKGRldiwgImNhbid0IHJlcXVlc3QgTU1DIHdyaXRlIHByb3RlY3Q6ICVkXG4iLAorCQkJCWVycik7CisJCQlnb3RvIGVycl9ncGlvX3dwOworCQl9CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU85NV9NTUNfV1ApOworCX0gZWxzZSB7CisJCWVyciA9IGdwaW9fcmVxdWVzdChHUElPMzhfU0RfUFdFTiwgInNkaW8gcG93ZXIiKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycihkZXYsICJjYW4ndCByZXF1ZXN0IE1NQyBwb3dlciBjb250cm9sIDogJWRcbiIsCisJCQkJZXJyKTsKKwkJCWdvdG8gZXJyX2dwaW9fd3A7CisJCX0KKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU8zOF9TRF9QV0VOLCAxKTsKIAl9CiAKIAlyZXR1cm4gMDsKKworZXJyX2dwaW9fd3A6CisJZnJlZV9pcnEoZ3Bpb190b19pcnEobW1jX2NkKSwgZGF0YSk7CitlcnJfaXJxOgorCXJlZ3VsYXRvcl9wdXQoZW1feDI3MF9zZGlvX2xkbyk7CisKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBlbV94MjcwX21jaV9zZXRwb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCiB7Ci0JLyoKLQkgICBGSVhNRTogY3VycmVudCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBhbGxvdyB0bwotCSAgIGVuYWJsZS9kaXNhYmxlIE1NQyBwb3dlci4gVGhpcyB3aWxsIGJlIGZpeGVkIGluIG5leHQgSFcgcmVsZWFzZXMsCi0JICAgYW5kIHdlJ2xsIG5lZWQgdG8gYWRkIGltcGxtZW50YXRpb24gaGVyZS4KLQkqLwotCXJldHVybjsKKwlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEqIHBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWlmICgoMSA8PCB2ZGQpICYgcF9kLT5vY3JfbWFzaykgeworCQlpbnQgdmRkX3VWID0gKDIwMDAgKyAodmRkIC0gX19mZnMoTU1DX1ZERF8yMF8yMSkpICogMTAwKSAqIDEwMDA7CisKKwkJcmVndWxhdG9yX3NldF92b2x0YWdlKGVtX3gyNzBfc2Rpb19sZG8sIHZkZF91ViwgdmRkX3VWKTsKKwkJcmVndWxhdG9yX2VuYWJsZShlbV94MjcwX3NkaW9fbGRvKTsKKwl9IGVsc2UgeworCQlyZWd1bGF0b3JfZGlzYWJsZShlbV94MjcwX3NkaW9fbGRvKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGVtX3gyNzBfbWNpX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewotCWludCBpcnEgPSBncGlvX3RvX2lycShHUElPMTNfTU1DX0NEKTsKLQlmcmVlX2lycShpcnEsIGRhdGEpOworCWZyZWVfaXJxKGdwaW9fdG9faXJxKG1tY19jZCksIGRhdGEpOworCXJlZ3VsYXRvcl9wdXQoZW1feDI3MF9zZGlvX2xkbyk7CisKKwlpZiAobWFjaGluZV9pc19lbV94MjcwKCkpCisJCWdwaW9fZnJlZShHUElPOTVfTU1DX1dQKTsKKwllbHNlCisJCWdwaW9fZnJlZShHUElPMzhfU0RfUFdFTik7Cit9CisKK3N0YXRpYyBpbnQgZW1feDI3MF9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJTzk1X01NQ19XUCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgZW1feDI3MF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKLQkub2NyX21hc2sJPSBNTUNfVkREXzI4XzI5fE1NQ19WRERfMjlfMzB8TU1DX1ZERF8zMF8zMSwKKwkub2NyX21hc2sJPSBNTUNfVkREXzIwXzIxfE1NQ19WRERfMjFfMjJ8TU1DX1ZERF8yMl8yM3wKKwkJCSAgTU1DX1ZERF8yNF8yNXxNTUNfVkREXzI1XzI2fE1NQ19WRERfMjZfMjd8CisJCQkgIE1NQ19WRERfMjdfMjh8TU1DX1ZERF8yOF8yOXxNTUNfVkREXzI5XzMwfAorCQkJICBNTUNfVkREXzMwXzMxfE1NQ19WRERfMzFfMzIsCiAJLmluaXQgCQk9IGVtX3gyNzBfbWNpX2luaXQsCiAJLnNldHBvd2VyIAk9IGVtX3gyNzBfbWNpX3NldHBvd2VyLAogCS5leGl0CQk9IGVtX3gyNzBfbWNpX2V4aXQsCkBAIC00MzYsMzMgKzU3OSw1MyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X21tYyh2b2lkKQogeworCWlmIChtYWNoaW5lX2lzX2VtX3gyNzAoKSkKKwkJZW1feDI3MF9tY2lfcGxhdGZvcm1fZGF0YS5nZXRfcm8gPSBlbV94MjcwX21jaV9nZXRfcm87CisKKwllbV94MjcwX21jaV9wbGF0Zm9ybV9kYXRhLmRldGVjdF9kZWxheQk9IG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAlweGFfc2V0X21jaV9pbmZvKCZlbV94MjcwX21jaV9wbGF0Zm9ybV9kYXRhKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgZW1feDI3MF9pbml0X21tYyh2b2lkKSB7fQogI2VuZGlmCiAKLS8qIExDRCA0ODB4NjQwICovCisvKiBMQ0QgKi8KICNpZiBkZWZpbmVkKENPTkZJR19GQl9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0ZCX1BYQV9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHB4YWZiX21vZGVfaW5mbyBlbV94MjcwX2xjZF9tb2RlID0gewotCS5waXhjbG9jawk9IDUwMDAwLAotCS5icHAJCT0gMTYsCi0JLnhyZXMJCT0gNDgwLAotCS55cmVzCQk9IDY0MCwKLQkuaHN5bmNfbGVuCT0gOCwKLQkudnN5bmNfbGVuCT0gMiwKLQkubGVmdF9tYXJnaW4JPSA4LAotCS51cHBlcl9tYXJnaW4JPSAwLAotCS5yaWdodF9tYXJnaW4JPSAyNCwKLQkubG93ZXJfbWFyZ2luCT0gNCwKLQkuY21hcF9ncmV5c2NhbGUJPSAwLAorc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gZW1feDI3MF9sY2RfbW9kZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5waXhjbG9jawk9IDM4MjUwLAorCQkuYnBwCQk9IDE2LAorCQkueHJlcwkJPSA0ODAsCisJCS55cmVzCQk9IDY0MCwKKwkJLmhzeW5jX2xlbgk9IDgsCisJCS52c3luY19sZW4JPSAyLAorCQkubGVmdF9tYXJnaW4JPSA4LAorCQkudXBwZXJfbWFyZ2luCT0gMiwKKwkJLnJpZ2h0X21hcmdpbgk9IDI0LAorCQkubG93ZXJfbWFyZ2luCT0gNCwKKwkJLnN5bmMJCT0gMCwKKwl9LAorCVsxXSA9IHsKKwkJLnBpeGNsb2NrICAgICAgID0gMTUzODAwLAorCQkuYnBwCQk9IDE2LAorCQkueHJlcwkJPSAyNDAsCisJCS55cmVzCQk9IDMyMCwKKwkJLmhzeW5jX2xlbgk9IDgsCisJCS52c3luY19sZW4JPSAyLAorCQkubGVmdF9tYXJnaW4JPSA4LAorCQkudXBwZXJfbWFyZ2luCT0gMiwKKwkJLnJpZ2h0X21hcmdpbgk9IDg4LAorCQkubG93ZXJfbWFyZ2luCT0gMiwKKwkJLnN5bmMJCT0gMCwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gZW1feDI3MF9sY2QgPSB7Ci0JLm1vZGVzCQk9ICZlbV94MjcwX2xjZF9tb2RlLAotCS5udW1fbW9kZXMJPSAxLAorCS5tb2RlcwkJPSBlbV94MjcwX2xjZF9tb2RlcywKKwkubnVtX21vZGVzCT0gMiwKIAkubGNkX2Nvbm4JPSBMQ0RfQ09MT1JfVEZUXzE2QlBQLAogfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9sY2Qodm9pZCkKIHsKIAlzZXRfcHhhX2ZiX2luZm8oJmVtX3gyNzBfbGNkKTsKQEAgLTQ3MSw2ICs2MzQsNDAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfbGNkKHZvaWQpIHt9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1NQSV9QWEEyWFgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9QWEEyWFhfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBlbV94MjcwX3NwaV9pbmZvID0geworCS5udW1fY2hpcHNlbGVjdAk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBlbV94MjcwX3RkbzI0bV9jaGlwID0geworCS5yeF90aHJlc2hvbGQgPSAxLAorCS50eF90aHJlc2hvbGQgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCB0ZG8yNG1fcGxhdGZvcm1fZGF0YSBlbV94MjcwX3RkbzI0bV9wZGF0YSA9IHsKKwkubW9kZWwgPSBURE8zNVMsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVtX3gyNzBfc3BpX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzID0gInRkbzI0bSIsCisJCS5tYXhfc3BlZWRfaHogPSAxMDAwMDAwLAorCQkuYnVzX251bSA9IDEsCisJCS5jaGlwX3NlbGVjdCA9IDAsCisJCS5jb250cm9sbGVyX2RhdGEgPSAmZW1feDI3MF90ZG8yNG1fY2hpcCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZW1feDI3MF90ZG8yNG1fcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfc3BpKHZvaWQpCit7CisJcHhhMnh4X3NldF9zcGlfaW5mbygxLCAmZW1feDI3MF9zcGlfaW5mbyk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oQVJSQVlfQU5EX1NJWkUoZW1feDI3MF9zcGlfZGV2aWNlcykpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbV94MjcwX2luaXRfc3BpKHZvaWQpIHt9CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1NORF9QWEEyWFhfQUM5NykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BYQTJYWF9BQzk3X01PRFVMRSkKIHN0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2luaXRfYWM5Nyh2b2lkKQogewpAQCAtNDgxLDIzICs2NzgsNzYgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfS0VZQk9BUkRfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9QWEEyN3hfTU9EVUxFKQotc3RhdGljIHVuc2lnbmVkIGludCBlbV94MjcwX21hdHJpeF9rZXlzW10gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGVtX3gyNzBfbW9kdWxlX21hdHJpeF9rZXlzW10gPSB7CiAJS0VZKDAsIDAsIEtFWV9BKSwgS0VZKDEsIDAsIEtFWV9VUCksIEtFWSgyLCAxLCBLRVlfQiksCiAJS0VZKDAsIDIsIEtFWV9MRUZUKSwgS0VZKDEsIDEsIEtFWV9FTlRFUiksIEtFWSgyLCAwLCBLRVlfUklHSFQpLAogCUtFWSgwLCAxLCBLRVlfQyksIEtFWSgxLCAyLCBLRVlfRE9XTiksIEtFWSgyLCAyLCBLRVlfRCksCiB9OwogCi1zdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIGVtX3gyNzBfa2V5cGFkX2luZm8gPSB7CitzdHJ1Y3QgcHhhMjd4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIGVtX3gyNzBfbW9kdWxlX2tleXBhZF9pbmZvID0gewogCS8qIGNvZGUgbWFwIGZvciB0aGUgbWF0cml4IGtleXMgKi8KIAkubWF0cml4X2tleV9yb3dzCT0gMywKIAkubWF0cml4X2tleV9jb2xzCT0gMywKLQkubWF0cml4X2tleV9tYXAJCT0gZW1feDI3MF9tYXRyaXhfa2V5cywKLQkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUoZW1feDI3MF9tYXRyaXhfa2V5cyksCisJLm1hdHJpeF9rZXlfbWFwCQk9IGVtX3gyNzBfbW9kdWxlX21hdHJpeF9rZXlzLAorCS5tYXRyaXhfa2V5X21hcF9zaXplCT0gQVJSQVlfU0laRShlbV94MjcwX21vZHVsZV9tYXRyaXhfa2V5cyksCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGVtX3gyNzBfZXhlZGFfbWF0cml4X2tleXNbXSA9IHsKKwlLRVkoMCwgMCwgS0VZX1JJR0hUU0hJRlQpLCBLRVkoMCwgMSwgS0VZX1JJR0hUQ1RSTCksCisJS0VZKDAsIDIsIEtFWV9SSUdIVEFMVCksIEtFWSgwLCAzLCBLRVlfU1BBQ0UpLAorCUtFWSgwLCA0LCBLRVlfTEVGVEFMVCksIEtFWSgwLCA1LCBLRVlfTEVGVENUUkwpLAorCUtFWSgwLCA2LCBLRVlfRU5URVIpLCBLRVkoMCwgNywgS0VZX1NMQVNIKSwKKworCUtFWSgxLCAwLCBLRVlfRE9UKSwgS0VZKDEsIDEsIEtFWV9NKSwKKwlLRVkoMSwgMiwgS0VZX04pLCBLRVkoMSwgMywgS0VZX0IpLAorCUtFWSgxLCA0LCBLRVlfViksIEtFWSgxLCA1LCBLRVlfQyksCisJS0VZKDEsIDYsIEtFWV9YKSwgS0VZKDEsIDcsIEtFWV9aKSwKKworCUtFWSgyLCAwLCBLRVlfTEVGVFNISUZUKSwgS0VZKDIsIDEsIEtFWV9TRU1JQ09MT04pLAorCUtFWSgyLCAyLCBLRVlfTCksIEtFWSgyLCAzLCBLRVlfSyksCisJS0VZKDIsIDQsIEtFWV9KKSwgS0VZKDIsIDUsIEtFWV9IKSwKKwlLRVkoMiwgNiwgS0VZX0cpLCBLRVkoMiwgNywgS0VZX0YpLAorCisJS0VZKDMsIDAsIEtFWV9EKSwgS0VZKDMsIDEsIEtFWV9TKSwKKwlLRVkoMywgMiwgS0VZX0EpLCBLRVkoMywgMywgS0VZX1RBQiksCisJS0VZKDMsIDQsIEtFWV9CQUNLU1BBQ0UpLCBLRVkoMywgNSwgS0VZX1ApLAorCUtFWSgzLCA2LCBLRVlfTyksIEtFWSgzLCA3LCBLRVlfSSksCisKKwlLRVkoNCwgMCwgS0VZX1UpLCBLRVkoNCwgMSwgS0VZX1kpLAorCUtFWSg0LCAyLCBLRVlfVCksIEtFWSg0LCAzLCBLRVlfUiksCisJS0VZKDQsIDQsIEtFWV9FKSwgS0VZKDQsIDUsIEtFWV9XKSwKKwlLRVkoNCwgNiwgS0VZX1EpLCBLRVkoNCwgNywgS0VZX01JTlVTKSwKKworCUtFWSg1LCAwLCBLRVlfMCksIEtFWSg1LCAxLCBLRVlfOSksCisJS0VZKDUsIDIsIEtFWV84KSwgS0VZKDUsIDMsIEtFWV83KSwKKwlLRVkoNSwgNCwgS0VZXzYpLCBLRVkoNSwgNSwgS0VZXzUpLAorCUtFWSg1LCA2LCBLRVlfNCksIEtFWSg1LCA3LCBLRVlfMyksCisKKwlLRVkoNiwgMCwgS0VZXzIpLCBLRVkoNiwgMSwgS0VZXzEpLAorCUtFWSg2LCAyLCBLRVlfRU5URVIpLCBLRVkoNiwgMywgS0VZX0VORCksCisJS0VZKDYsIDQsIEtFWV9ET1dOKSwgS0VZKDYsIDUsIEtFWV9VUCksCisJS0VZKDYsIDYsIEtFWV9NRU5VKSwgS0VZKDYsIDcsIEtFWV9GMSksCisKKwlLRVkoNywgMCwgS0VZX0xFRlQpLCBLRVkoNywgMSwgS0VZX1JJR0hUKSwKKwlLRVkoNywgMiwgS0VZX0JBQ0spLCBLRVkoNywgMywgS0VZX0hPTUUpLAorCUtFWSg3LCA0LCAwKSwgS0VZKDcsIDUsIDApLAorCUtFWSg3LCA2LCAwKSwgS0VZKDcsIDcsIDApLAorfTsKKworc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBlbV94MjcwX2V4ZWRhX2tleXBhZF9pbmZvID0geworCS8qIGNvZGUgbWFwIGZvciB0aGUgbWF0cml4IGtleXMgKi8KKwkubWF0cml4X2tleV9yb3dzCT0gOCwKKwkubWF0cml4X2tleV9jb2xzCT0gOCwKKwkubWF0cml4X2tleV9tYXAJCT0gZW1feDI3MF9leGVkYV9tYXRyaXhfa2V5cywKKwkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUoZW1feDI3MF9leGVkYV9tYXRyaXhfa2V5cyksCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0X2tleXBhZCh2b2lkKQogewotCXB4YV9zZXRfa2V5cGFkX2luZm8oJmVtX3gyNzBfa2V5cGFkX2luZm8pOworCWlmIChtYWNoaW5lX2lzX2VtX3gyNzAoKSkKKwkJcHhhX3NldF9rZXlwYWRfaW5mbygmZW1feDI3MF9tb2R1bGVfa2V5cGFkX2luZm8pOworCWVsc2UKKwkJcHhhX3NldF9rZXlwYWRfaW5mbygmZW1feDI3MF9leGVkYV9rZXlwYWRfaW5mbyk7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9rZXlwYWQodm9pZCkge30KQEAgLTUzNSwxOSArNzg1LDI2NCBAQAogc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9ncGlvX2tleXModm9pZCkge30KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0KHZvaWQpCisvKiBRdWljayBDYXB0dXJlIEludGVyZmFjZSBhbmQgc2Vuc29yIHNldHVwICovCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19WSURFT19QWEEyN3hfTU9EVUxFKQorc3RhdGljIHN0cnVjdCByZWd1bGF0b3IgKmVtX3gyNzBfY2FtZXJhX2xkbzsKKworc3RhdGljIGludCBlbV94MjcwX3NlbnNvcl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU85M19DQU1fUkVTRVQsICJjYW1lcmEgcmVzZXQiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU85M19DQU1fUkVTRVQsIDApOworCisJZW1feDI3MF9jYW1lcmFfbGRvID0gcmVndWxhdG9yX2dldChOVUxMLCAidmNjIGNhbSIpOworCWlmIChlbV94MjcwX2NhbWVyYV9sZG8gPT0gTlVMTCkgeworCQlncGlvX2ZyZWUoR1BJTzkzX0NBTV9SRVNFVCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZW1feDI3MF9jYW1lcmFfbGRvKTsKKwlpZiAocmV0KSB7CisJCXJlZ3VsYXRvcl9wdXQoZW1feDI3MF9jYW1lcmFfbGRvKTsKKwkJZ3Bpb19mcmVlKEdQSU85M19DQU1fUkVTRVQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWdwaW9fc2V0X3ZhbHVlKEdQSU85M19DQU1fUkVTRVQsIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBweGFjYW1lcmFfcGxhdGZvcm1fZGF0YSBlbV94MjcwX2NhbWVyYV9wbGF0Zm9ybV9kYXRhID0geworCS5pbml0CT0gZW1feDI3MF9zZW5zb3JfaW5pdCwKKwkuZmxhZ3MgID0gUFhBX0NBTUVSQV9NQVNURVIgfCBQWEFfQ0FNRVJBX0RBVEFXSURUSF84IHwKKwkJUFhBX0NBTUVSQV9QQ0xLX0VOIHwgUFhBX0NBTUVSQV9NQ0xLX0VOLAorCS5tY2xrXzEwa2h6ID0gMjYwMCwKK307CisKK3N0YXRpYyBpbnQgZW1feDI3MF9zZW5zb3JfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgb24pCit7CisJaW50IHJldDsKKwlpbnQgaXNfb24gPSByZWd1bGF0b3JfaXNfZW5hYmxlZChlbV94MjcwX2NhbWVyYV9sZG8pOworCisJaWYgKG9uID09IGlzX29uKQorCQlyZXR1cm4gMDsKKworCWdwaW9fc2V0X3ZhbHVlKEdQSU85M19DQU1fUkVTRVQsICFvbik7CisKKwlpZiAob24pCisJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZW1feDI3MF9jYW1lcmFfbGRvKTsKKwllbHNlCisJCXJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKGVtX3gyNzBfY2FtZXJhX2xkbyk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ3Bpb19zZXRfdmFsdWUoR1BJTzkzX0NBTV9SRVNFVCwgb24pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKKwkuYnVzX2lkCT0gMCwKKwkucG93ZXIgPSBlbV94MjcwX3NlbnNvcl9wb3dlciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZW1feDI3MF9pMmNfY2FtX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJtdDltMTExIiwgMHg0OCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJmljbGluaywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgZW1feDI3MF9pMmNfaW5mbyA9IHsKKwkuZmFzdF9tb2RlID0gMSwKK307CisKK3N0YXRpYyB2b2lkICBfX2luaXQgZW1feDI3MF9pbml0X2NhbWVyYSh2b2lkKQoreworCXB4YV9zZXRfaTJjX2luZm8oJmVtX3gyNzBfaTJjX2luZm8pOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIEFSUkFZX0FORF9TSVpFKGVtX3gyNzBfaTJjX2NhbV9pbmZvKSk7CisJcHhhX3NldF9jYW1lcmFfaW5mbygmZW1feDI3MF9jYW1lcmFfcGxhdGZvcm1fZGF0YSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGVtX3gyNzBfaW5pdF9jYW1lcmEodm9pZCkge30KKyNlbmRpZgorCisvKiBEQTkwMzAgcmVsYXRlZCBpbml0aWFsaXphdGlvbnMgKi8KKyNkZWZpbmUgUkVHVUxBVE9SX0NPTlNVTUVSKF9uYW1lLCBfZGV2LCBfc3VwcGx5KQkJCSAgICAgICBcCisJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IF9uYW1lIyNfY29uc3VtZXJzW10gPSB7CVwKKwkJewkJCQkJCQlcCisJCQkuZGV2ID0gX2RldiwJCQkJCVwKKwkJCS5zdXBwbHkgPSBfc3VwcGx5LAkJCQlcCisJCX0sCQkJCQkJCVwKKwl9CisKK1JFR1VMQVRPUl9DT05TVU1FUihsZG8zLCBOVUxMLCAidmNjIGdwcyIpOworUkVHVUxBVE9SX0NPTlNVTUVSKGxkbzUsIE5VTEwsICJ2Y2MgY2FtIik7CitSRUdVTEFUT1JfQ09OU1VNRVIobGRvMTAsICZweGFfZGV2aWNlX21jaS5kZXYsICJ2Y2Mgc2RpbyIpOworUkVHVUxBVE9SX0NPTlNVTUVSKGxkbzEyLCBOVUxMLCAidmNjIHVzYiIpOworUkVHVUxBVE9SX0NPTlNVTUVSKGxkbzE5LCBOVUxMLCAidmNjIGdwcnMiKTsKKworI2RlZmluZSBSRUdVTEFUT1JfSU5JVChfbGRvLCBfbWluX3VWLCBfbWF4X3VWLCBfb3BzX21hc2spCQlcCisJc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIF9sZG8jI19kYXRhID0gewkJXAorCQkuY29uc3RyYWludHMgPSB7CQkJCQlcCisJCQkubWluX3VWID0gX21pbl91ViwJCQkJXAorCQkJLm1heF91ViA9IF9tYXhfdVYsCQkJCVwKKwkJCS5zdGF0ZV9tZW0gPSB7CQkJCQlcCisJCQkJLmVuYWJsZWQgPSAwLAkJCQlcCisJCQl9LAkJCQkJCVwKKwkJCS52YWxpZF9vcHNfbWFzayA9IF9vcHNfbWFzaywJCQlcCisJCX0sCQkJCQkJCVwKKwkJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoX2xkbyMjX2NvbnN1bWVycyksCVwKKwkJLmNvbnN1bWVyX3N1cHBsaWVzID0gX2xkbyMjX2NvbnN1bWVycywJCQlcCisJfTsKKworUkVHVUxBVE9SX0lOSVQobGRvMywgMzIwMDAwMCwgMzIwMDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpOworUkVHVUxBVE9SX0lOSVQobGRvNSwgMzAwMDAwMCwgMzAwMDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpOworUkVHVUxBVE9SX0lOSVQobGRvMTAsIDIwMDAwMDAsIDMyMDAwMDAsCisJICAgICAgIFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTIHwgUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFKTsKK1JFR1VMQVRPUl9JTklUKGxkbzEyLCAzMDAwMDAwLCAzMDAwMDAwLCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUyk7CitSRUdVTEFUT1JfSU5JVChsZG8xOSwgMzIwMDAwMCwgMzIwMDAwMCwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMpOworCitzdHJ1Y3QgbGVkX2luZm8gZW1feDI3MF9sZWRfaW5mbyA9IHsKKwkubmFtZSA9ICJlbS14MjcwOm9yYW5nZSIsCisJLmRlZmF1bHRfdHJpZ2dlciA9ICJiYXR0ZXJ5LWNoYXJnaW5nLW9yLWZ1bGwiLAorfTsKKworc3RydWN0IHBvd2VyX3N1cHBseV9pbmZvIGVtX3gyNzBfcHN5X2luZm8gPSB7CisJLm5hbWUgPSAiTFA1NTU1OTdQNkgtRlBTIiwKKwkudGVjaG5vbG9neSA9IFBPV0VSX1NVUFBMWV9URUNITk9MT0dZX0xJUE8sCisJLnZvbHRhZ2VfbWF4X2Rlc2lnbiA9IDQyMDAwMDAsCisJLnZvbHRhZ2VfbWluX2Rlc2lnbiA9IDMwMDAwMDAsCisJLnVzZV9mb3JfYXBtID0gMSwKK307CisKK3N0YXRpYyB2b2lkIGVtX3gyNzBfYmF0dGVyeV9sb3codm9pZCkKK3sKKwlhcG1fcXVldWVfZXZlbnQoQVBNX0xPV19CQVRURVJZKTsKK30KKworc3RhdGljIHZvaWQgZW1feDI3MF9iYXR0ZXJ5X2NyaXRpY2FsKHZvaWQpCit7CisJYXBtX3F1ZXVlX2V2ZW50KEFQTV9DUklUSUNBTF9TVVNQRU5EKTsKK30KKworc3RydWN0IGRhOTAzMF9iYXR0ZXJ5X2luZm8gZW1feDI3MF9iYXR0ZXJ0eV9pbmZvID0geworCS5iYXR0ZXJ5X2luZm8gPSAmZW1feDI3MF9wc3lfaW5mbywKKworCS5jaGFyZ2VfbWlsbGlhbXAgPSAxMDAwLAorCS5jaGFyZ2VfbWlsbGl2b2x0ID0gNDIwMCwKKworCS52YmF0X2xvdyA9IDM2MDAsCisJLnZiYXRfY3JpdCA9IDM0MDAsCisJLnZiYXRfY2hhcmdlX3N0YXJ0ID0gNDEwMCwKKwkudmJhdF9jaGFyZ2Vfc3RvcCA9IDQyMDAsCisJLnZiYXRfY2hhcmdlX3Jlc3RhcnQgPSA0MDAwLAorCisJLnZjaGFyZ2VfbWluID0gMzIwMCwKKwkudmNoYXJnZV9tYXggPSA1NTAwLAorCisJLnRiYXRfbG93ID0gMTk3LAorCS50YmF0X2hpZ2ggPSA3OCwKKwkudGJhdF9yZXN0YXJ0ID0gMTAwLAorCisJLmJhdG1vbl9pbnRlcnZhbCA9IDAsCisKKwkuYmF0dGVyeV9sb3cgPSBlbV94MjcwX2JhdHRlcnlfbG93LAorCS5iYXR0ZXJ5X2NyaXRpY2FsID0gZW1feDI3MF9iYXR0ZXJ5X2NyaXRpY2FsLAorfTsKKworI2RlZmluZSBEQTkwMzBfU1VCREVWKF9uYW1lLCBfaWQsIF9wZGF0YSkJXAorCXsJCQkJCVwKKwkJLm5hbWUgPSAiZGE5MDN4LSIgI19uYW1lLAlcCisJCS5pZCA9IERBOTAzMF9JRF8jI19pZCwJCVwKKwkJLnBsYXRmb3JtX2RhdGEgPSBfcGRhdGEsCVwKKwl9CisKKyNkZWZpbmUgREE5MDMwX0xETyhudW0pCURBOTAzMF9TVUJERVYocmVndWxhdG9yLCBMRE8jI251bSwgJmxkbyMjbnVtIyNfZGF0YSkKKworc3RydWN0IGRhOTAzeF9zdWJkZXZfaW5mbyBlbV94MjcwX2RhOTAzMF9zdWJkZXZzW10gPSB7CisJREE5MDMwX0xETygzKSwKKwlEQTkwMzBfTERPKDUpLAorCURBOTAzMF9MRE8oMTApLAorCURBOTAzMF9MRE8oMTIpLAorCURBOTAzMF9MRE8oMTkpLAorCisJREE5MDMwX1NVQkRFVihsZWQsIExFRF9QQywgJmVtX3gyNzBfbGVkX2luZm8pLAorCURBOTAzMF9TVUJERVYoYmFja2xpZ2h0LCBXTEVELCAmZW1feDI3MF9sZWRfaW5mbyksCisJREE5MDMwX1NVQkRFVihiYXR0ZXJ5LCBCQVQsICZlbV94MjcwX2JhdHRlcnR5X2luZm8pLAorfTsKKworc3RhdGljIHN0cnVjdCBkYTkwM3hfcGxhdGZvcm1fZGF0YSBlbV94MjcwX2RhOTAzMF9pbmZvID0geworCS5udW1fc3ViZGV2cyA9IEFSUkFZX1NJWkUoZW1feDI3MF9kYTkwMzBfc3ViZGV2cyksCisJLnN1YmRldnMgPSBlbV94MjcwX2RhOTAzMF9zdWJkZXZzLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBlbV94MjcwX2kyY19wbWljX2luZm8gPSB7CisJSTJDX0JPQVJEX0lORk8oImRhOTAzMCIsIDB4NDkpLAorCS5pcnEgPSBJUlFfR1BJTygwKSwKKwkucGxhdGZvcm1fZGF0YSA9ICZlbV94MjcwX2RhOTAzMF9pbmZvLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfcHhhX3BsYXRmb3JtX2RhdGEgZW1feDI3MF9wd3JfaTJjX2luZm8gPSB7CisJLnVzZV9waW8gPSAxLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVtX3gyNzBfaW5pdF9kYTkwMzAodm9pZCkKK3sKKwlweGEyN3hfc2V0X2kyY19wb3dlcl9pbmZvKCZlbV94MjcwX3B3cl9pMmNfaW5mbyk7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgJmVtX3gyNzBfaTJjX3BtaWNfaW5mbywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX21vZHVsZV9pbml0KHZvaWQpCit7CisJcHJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKIAlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlbV94MjcwX3Bpbl9jb25maWcpKTsKIAorCW1tY19jZCA9IEdQSU8xM19NTUNfQ0Q7CisJbmFuZF9yYiA9IEdQSU81Nl9OQU5EX1JCOworCWRtOTAwMF9mbGFncyA9IERNOTAwMF9QTEFURl8zMkJJVE9OTFk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbV94MjcwX2V4ZWRhX2luaXQodm9pZCkKK3sKKwlwcl9pbmZvKCIlc1xuIiwgX19mdW5jX18pOworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGV4ZWRhX3Bpbl9jb25maWcpKTsKKworCW1tY19jZCA9IEdQSU8xMTRfTU1DX0NEOworCW5hbmRfcmIgPSBHUElPMjBfTkFORF9SQjsKKwlkbTkwMDBfZmxhZ3MgPSBETTkwMDBfUExBVEZfMTZCSVRPTkxZOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZW1feDI3MF9pbml0KHZvaWQpCit7CisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY29tbW9uX3Bpbl9jb25maWcpKTsKKworCWlmIChtYWNoaW5lX2lzX2VtX3gyNzAoKSkKKwkJZW1feDI3MF9tb2R1bGVfaW5pdCgpOworCWVsc2UgaWYgKG1hY2hpbmVfaXNfZXhlZGEoKSkKKwkJZW1feDI3MF9leGVkYV9pbml0KCk7CisJZWxzZQorCQlwYW5pYygiVW5zdXBwb3J0ZWQgbWFjaGluZTogJWRcbiIsIG1hY2hpbmVfYXJjaF90eXBlKTsKKworCWVtX3gyNzBfaW5pdF9kYTkwMzAoKTsKIAllbV94MjcwX2luaXRfZG05MDAwKCk7CiAJZW1feDI3MF9pbml0X3J0YygpOwogCWVtX3gyNzBfaW5pdF9uYW5kKCk7CisJZW1feDI3MF9pbml0X25vcigpOwogCWVtX3gyNzBfaW5pdF9sY2QoKTsKIAllbV94MjcwX2luaXRfbW1jKCk7CiAJZW1feDI3MF9pbml0X29oY2koKTsKIAllbV94MjcwX2luaXRfa2V5cGFkKCk7CiAJZW1feDI3MF9pbml0X2dwaW9fa2V5cygpOwogCWVtX3gyNzBfaW5pdF9hYzk3KCk7CisJZW1feDI3MF9pbml0X2NhbWVyYSgpOworCWVtX3gyNzBfaW5pdF9zcGkoKTsKIH0KIAogTUFDSElORV9TVEFSVChFTV9YMjcwLCAiQ29tcHVsYWIgRU0tWDI3MCIpCkBAIC01NTksMyArMTA1NCwxMyBAQAogCS50aW1lcgkJPSAmcHhhX3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBlbV94MjcwX2luaXQsCiBNQUNISU5FX0VORAorCitNQUNISU5FX1NUQVJUKEVYRURBLCAiQ29tcHVsYWIgZVhlZGEiKQorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEyN3hfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGVtX3gyNzBfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lc2VyaWVzLmMKaW5kZXggZGZjZTdkNS4uYzYwZGFkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZXNlcmllcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2VzZXJpZXMuYwpAQCAtMjAsOCArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZXp4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9lenguYwppbmRleCBkZjVmODIyLi45MmJhMTZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lenguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lenguYwpAQCAtMTksMTggKzE5LDE2IEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3hfa2V5cGFkLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotCiAjaW5jbHVkZSAiZGV2aWNlcy5oIgogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5jCmluZGV4IDBjY2M5MWMuLjMxMjZhMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmMKQEAgLTI2LDggKzI2LDkgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKQEAgLTEyNywzICsxMjgsMzMgQEAKIAlpb3RhYmxlX2luaXQoc3RhbmRhcmRfaW9fZGVzYywgQVJSQVlfU0laRShzdGFuZGFyZF9pb19kZXNjKSk7CiAJZ2V0X2Nsa19mcmVxdWVuY3lfa2h6KDEpOwogfQorCisvKgorICogQ29uZmlndXJlIHBpbnMgZm9yIEdQSU8gb3Igb3RoZXIgZnVuY3Rpb25zCisgKi8KK2ludCBweGFfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZ3BpbyA9IGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19OUjsKKwlpbnQgZm4gPSAoZ3Bpb19tb2RlICYgR1BJT19NRF9NQVNLX0ZOKSA+PiA4OworCWludCBnYWZyOworCisJaWYgKGdwaW8gPiBweGFfbGFzdF9ncGlvKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlpZiAoZ3Bpb19tb2RlICYgR1BJT19ERkxUX0xPVykKKwkJR1BDUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOworCWVsc2UgaWYgKGdwaW9fbW9kZSAmIEdQSU9fREZMVF9ISUdIKQorCQlHUFNSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7CisJaWYgKGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19ESVIpCisJCUdQRFIoZ3BpbykgfD0gR1BJT19iaXQoZ3Bpbyk7CisJZWxzZQorCQlHUERSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKKwlnYWZyID0gR0FGUihncGlvKSAmIH4oMHgzIDw8ICgoKGdwaW8pICYgMHhmKSoyKSk7CisJR0FGUihncGlvKSA9IGdhZnIgfCAgKGZuICA8PCAoKChncGlvKSAmIDB4ZikqMikpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChweGFfZ3Bpb19tb2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaAppbmRleCBkYzg3NmE4Li4zNDY1MjY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oCkBAIC05LDIwICs5LDE3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi10eXBlZGVmIGludCAoKnNldF93YWtlX3QpKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLQogc3RydWN0IHN5c190aW1lcjsKIAogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgcHhhX3RpbWVyOwotZXh0ZXJuIHZvaWQgX19pbml0IHB4YV9pbml0X2lycShpbnQgaXJxX25yLCBzZXRfd2FrZV90IGZuKTsKLWV4dGVybiB2b2lkIF9faW5pdCBweGFfaW5pdF9ncGlvKGludCBncGlvX25yLCBzZXRfd2FrZV90IGZuKTsKK2V4dGVybiB2b2lkIF9faW5pdCBweGFfaW5pdF9pcnEoaW50IGlycV9uciwKKwkJCQlpbnQgKCpzZXRfd2FrZSkodW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpKTsKIGV4dGVybiB2b2lkIF9faW5pdCBweGEyNXhfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgcHhhMjd4X2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19pbml0IHB4YTN4eF9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBweGFfbWFwX2lvKHZvaWQpOwogCiBleHRlcm4gdW5zaWduZWQgaW50IGdldF9jbGtfZnJlcXVlbmN5X2toeihpbnQgaW5mbyk7Ci1leHRlcm4gaW50IHB4YV9sYXN0X2dwaW87CiAKICNkZWZpbmUgU0VUX0JBTksoX19ucixfX3N0YXJ0LF9fc2l6ZSkgXAogCW1pLT5iYW5rW19fbnJdLnN0YXJ0ID0gKF9fc3RhcnQpLCBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9ncGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZWMxZTQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Bpby5jCisrKyAvZGV2L251bGwKQEAgLTEsNDUzICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1weGEvZ3Bpby5jCi0gKgotICogIEdlbmVyaWMgUFhBIEdQSU8gaGFuZGxpbmcKLSAqCi0gKiAgQXV0aG9yOglOaWNvbGFzIFBpdHJlCi0gKiAgQ3JlYXRlZDoJSnVuIDE1LCAyMDAxCi0gKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+Ci0KLSNpbmNsdWRlICJnZW5lcmljLmgiCi0KLSNkZWZpbmUgR1BJTzBfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMDAwKSkKLSNkZWZpbmUgR1BJTzFfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMDA0KSkKLSNkZWZpbmUgR1BJTzJfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMDA4KSkKLSNkZWZpbmUgR1BJTzNfQkFTRQkoKHZvaWQgX19pb21lbSAqKWlvX3AydigweDQwRTAwMTAwKSkKLQotI2RlZmluZSBHUExSX09GRlNFVAkweDAwCi0jZGVmaW5lIEdQRFJfT0ZGU0VUCTB4MEMKLSNkZWZpbmUgR1BTUl9PRkZTRVQJMHgxOAotI2RlZmluZSBHUENSX09GRlNFVAkweDI0Ci0jZGVmaW5lIEdSRVJfT0ZGU0VUCTB4MzAKLSNkZWZpbmUgR0ZFUl9PRkZTRVQJMHgzQwotI2RlZmluZSBHRURSX09GRlNFVAkweDQ4Ci0KLXN0cnVjdCBweGFfZ3Bpb19jaGlwIHsKLQlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7Ci0Jdm9pZCBfX2lvbWVtICAgICAqcmVnYmFzZTsKLX07Ci0KLWludCBweGFfbGFzdF9ncGlvOwotCi0jaWZkZWYgQ09ORklHX0NQVV9QWEEyNngKLS8qIEdQSU84Ni84Ny84OC84OSBvbiBQWEEyNnggaGF2ZSB0aGVpciBkaXJlY3Rpb24gYml0cyBpbiBHUERSMiBpbnZlcnRlZCwKLSAqIGFzIHdlbGwgYXMgdGhlaXIgQWx0ZXJuYXRlIEZ1bmN0aW9uIHZhbHVlIGJlaW5nICcxJyBmb3IgR1BJTyBpbiBHQUZSeC4KLSAqLwotc3RhdGljIGludCBfX2dwaW9faXNfaW52ZXJ0ZWQodW5zaWduZWQgZ3BpbykKLXsKLQlyZXR1cm4gY3B1X2lzX3B4YTI1eCgpICYmIGdwaW8gPiA4NTsKLX0KLSNlbHNlCi0jZGVmaW5lIF9fZ3Bpb19pc19pbnZlcnRlZChncGlvKQkoMCkKLSNlbmRpZgotCi0vKgotICogQ29uZmlndXJlIHBpbnMgZm9yIEdQSU8gb3Igb3RoZXIgZnVuY3Rpb25zCi0gKi8KLWludCBweGFfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgZ3BpbyA9IGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19OUjsKLQlpbnQgZm4gPSAoZ3Bpb19tb2RlICYgR1BJT19NRF9NQVNLX0ZOKSA+PiA4OwotCWludCBnYWZyOwotCi0JaWYgKGdwaW8gPiBweGFfbGFzdF9ncGlvKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlpZiAoZ3Bpb19tb2RlICYgR1BJT19ERkxUX0xPVykKLQkJR1BDUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOwotCWVsc2UgaWYgKGdwaW9fbW9kZSAmIEdQSU9fREZMVF9ISUdIKQotCQlHUFNSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7Ci0JaWYgKGdwaW9fbW9kZSAmIEdQSU9fTURfTUFTS19ESVIpCi0JCUdQRFIoZ3BpbykgfD0gR1BJT19iaXQoZ3Bpbyk7Ci0JZWxzZQotCQlHUERSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKLQlnYWZyID0gR0FGUihncGlvKSAmIH4oMHgzIDw8ICgoKGdwaW8pICYgMHhmKSoyKSk7Ci0JR0FGUihncGlvKSA9IGdhZnIgfCAgKGZuICA8PCAoKChncGlvKSAmIDB4ZikqMikpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChweGFfZ3Bpb19tb2RlKTsKLQotc3RhdGljIGludCBweGFfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXVuc2lnbmVkIGxvbmcgICAgICAgIGZsYWdzOwotCXUzMiAgICAgICAgICAgICAgICAgIG1hc2sgPSAxIDw8IG9mZnNldDsKLQl1MzIgICAgICAgICAgICAgICAgICB2YWx1ZTsKLQlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqcHhhOwotCXZvaWQgX19pb21lbSAgICAgICAgICpncGRyOwotCi0JcHhhID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBweGFfZ3Bpb19jaGlwLCBjaGlwKTsKLQlncGRyID0gcHhhLT5yZWdiYXNlICsgR1BEUl9PRkZTRVQ7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXZhbHVlID0gX19yYXdfcmVhZGwoZ3Bkcik7Ci0JaWYgKF9fZ3Bpb19pc19pbnZlcnRlZChjaGlwLT5iYXNlICsgb2Zmc2V0KSkKLQkJdmFsdWUgfD0gbWFzazsKLQllbHNlCi0JCXZhbHVlICY9IH5tYXNrOwotCV9fcmF3X3dyaXRlbCh2YWx1ZSwgZ3Bkcik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHhhX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nICAgICAgICBmbGFnczsKLQl1MzIgICAgICAgICAgICAgICAgICBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0JdTMyICAgICAgICAgICAgICAgICAgdG1wOwotCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpweGE7Ci0Jdm9pZCBfX2lvbWVtICAgICAgICAgKmdwZHI7Ci0KLQlweGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHB4YV9ncGlvX2NoaXAsIGNoaXApOwotCV9fcmF3X3dyaXRlbChtYXNrLAotCQkJcHhhLT5yZWdiYXNlICsgKHZhbHVlID8gR1BTUl9PRkZTRVQgOiBHUENSX09GRlNFVCkpOwotCWdwZHIgPSBweGEtPnJlZ2Jhc2UgKyBHUERSX09GRlNFVDsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdG1wID0gX19yYXdfcmVhZGwoZ3Bkcik7Ci0JaWYgKF9fZ3Bpb19pc19pbnZlcnRlZChjaGlwLT5iYXNlICsgb2Zmc2V0KSkKLQkJdG1wICY9IH5tYXNrOwotCWVsc2UKLQkJdG1wIHw9IG1hc2s7Ci0JX19yYXdfd3JpdGVsKHRtcCwgZ3Bkcik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gR1BJTyBsZXZlbAotICovCi1zdGF0aWMgaW50IHB4YV9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0JdTMyICAgICAgICAgICAgICAgICAgbWFzayA9IDEgPDwgb2Zmc2V0OwotCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpweGE7Ci0KLQlweGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IHB4YV9ncGlvX2NoaXAsIGNoaXApOwotCXJldHVybiBfX3Jhd19yZWFkbChweGEtPnJlZ2Jhc2UgKyBHUExSX09GRlNFVCkgJiBtYXNrOwotfQotCi0vKgotICogU2V0IG91dHB1dCBHUElPIGxldmVsCi0gKi8KLXN0YXRpYyB2b2lkIHB4YV9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQl1MzIgICAgICAgICAgICAgICAgICBtYXNrID0gMSA8PCBvZmZzZXQ7Ci0Jc3RydWN0IHB4YV9ncGlvX2NoaXAgKnB4YTsKLQotCXB4YSA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcHhhX2dwaW9fY2hpcCwgY2hpcCk7Ci0KLQlpZiAodmFsdWUpCi0JCV9fcmF3X3dyaXRlbChtYXNrLCBweGEtPnJlZ2Jhc2UgKyBHUFNSX09GRlNFVCk7Ci0JZWxzZQotCQlfX3Jhd193cml0ZWwobWFzaywgcHhhLT5yZWdiYXNlICsgR1BDUl9PRkZTRVQpOwotfQotCi0jZGVmaW5lIEdQSU9fQ0hJUChfbikJCQkJCQkJXAotCVtfbl0gPSB7CQkJCQkJCVwKLQkJLnJlZ2Jhc2UgPSBHUElPIyNfbiMjX0JBU0UsCQkJCVwKLQkJLmNoaXAgPSB7CQkJCQkJXAotCQkJLmxhYmVsCQkgID0gImdwaW8tIiAjX24sCQlcCi0JCQkuZGlyZWN0aW9uX2lucHV0ICA9IHB4YV9ncGlvX2RpcmVjdGlvbl9pbnB1dCwJXAotCQkJLmRpcmVjdGlvbl9vdXRwdXQgPSBweGFfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0LAlcCi0JCQkuZ2V0CQkgID0gcHhhX2dwaW9fZ2V0LAkJXAotCQkJLnNldAkJICA9IHB4YV9ncGlvX3NldCwJCVwKLQkJCS5iYXNlCQkgID0gKF9uKSAqIDMyLAkJCVwKLQkJCS5uZ3BpbwkJICA9IDMyLAkJCQlcCi0JCX0sCQkJCQkJCVwKLQl9Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhX2dwaW9fY2hpcCBweGFfZ3Bpb19jaGlwW10gPSB7Ci0JR1BJT19DSElQKDApLAotCUdQSU9fQ0hJUCgxKSwKLQlHUElPX0NISVAoMiksCi0jaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEzeHgpCi0JR1BJT19DSElQKDMpLAotI2VuZGlmCi19OwotCi0vKgotICogUFhBIEdQSU8gZWRnZSBkZXRlY3Rpb24gZm9yIElSUXM6Ci0gKiBJUlFzIGFyZSBnZW5lcmF0ZWQgb24gRmFsbGluZy1FZGdlLCBSaXNpbmctRWRnZSwgb3IgYm90aC4KLSAqIFVzZSB0aGlzIGluc3RlYWQgb2YgZGlyZWN0bHkgc2V0dGluZyBHUkVSL0dGRVIuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgR1BJT19JUlFfcmlzaW5nX2VkZ2VbNF07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBHUElPX0lSUV9mYWxsaW5nX2VkZ2VbNF07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBHUElPX0lSUV9tYXNrWzRdOwotCi0vKgotICogT24gUFhBMjV4IGFuZCBQWEEyN3gsIEdBRlJ4IGFuZCBHUERSeCB0b2dldGhlciBkZWNpZGUgdGhlIGFsdGVybmF0ZQotICogZnVuY3Rpb24gb2YgYSBHUElPLCBhbmQgR1BEUnggY2Fubm90IGJlIGFsdGVyZWQgb25jZSBjb25maWd1cmVkLiBJdAotICogaXMgYXR0cmlidXRlZCBhcyAib2NjdXBpZWQiIGhlcmUgKEkga25vdyB0aGlzIHRlcm1pbm9sb2d5IGlzbid0Ci0gKiBhY2N1cmF0ZSwgeW91IGFyZSB3ZWxjb21lIHRvIHByb3Bvc2UgYSBiZXR0ZXIgb25lIDotKQotICovCi1zdGF0aWMgaW50IF9fZ3Bpb19pc19vY2N1cGllZCh1bnNpZ25lZCBncGlvKQotewotCWlmIChjcHVfaXNfcHhhMjd4KCkgfHwgY3B1X2lzX3B4YTI1eCgpKSB7Ci0JCWludCBhZiA9IChHQUZSKGdwaW8pID4+ICgoZ3BpbyAmIDB4ZikgKiAyKSkgJiAweDM7Ci0JCWludCBkaXIgPSBHUERSKGdwaW8pICYgR1BJT19iaXQoZ3Bpbyk7Ci0KLQkJaWYgKF9fZ3Bpb19pc19pbnZlcnRlZChncGlvKSkKLQkJCXJldHVybiBhZiAhPSAxIHx8IGRpciA9PSAwOwotCQllbHNlCi0JCQlyZXR1cm4gYWYgIT0gMCB8fCBkaXIgIT0gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBweGFfZ3Bpb19pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQlpbnQgZ3BpbywgaWR4OwotCi0JZ3BpbyA9IElSUV9UT19HUElPKGlycSk7Ci0JaWR4ID0gZ3BpbyA+PiA1OwotCi0JaWYgKHR5cGUgPT0gSVJRX1RZUEVfUFJPQkUpIHsKLQkJLyogRG9uJ3QgbWVzcyB3aXRoIGVuYWJsZWQgR1BJT3MgdXNpbmcgcHJlY29uZmlndXJlZCBlZGdlcyBvcgotCQkgKiBHUElPcyBzZXQgdG8gYWx0ZXJuYXRlIGZ1bmN0aW9uIG9yIHRvIG91dHB1dCBkdXJpbmcgcHJvYmUKLQkJICovCi0JCWlmICgoR1BJT19JUlFfcmlzaW5nX2VkZ2VbaWR4XSAmIEdQSU9fYml0KGdwaW8pKSB8fAotCQkgICAgKEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVtpZHhdICYgR1BJT19iaXQoZ3BpbykpKQotCQkJcmV0dXJuIDA7Ci0KLQkJaWYgKF9fZ3Bpb19pc19vY2N1cGllZChncGlvKSkKLQkJCXJldHVybiAwOwotCi0JCXR5cGUgPSBJUlFfVFlQRV9FREdFX1JJU0lORyB8IElSUV9UWVBFX0VER0VfRkFMTElORzsKLQl9Ci0KLQlpZiAoX19ncGlvX2lzX2ludmVydGVkKGdwaW8pKQotCQlHUERSKGdwaW8pIHw9IEdQSU9fYml0KGdwaW8pOwotCWVsc2UKLQkJR1BEUihncGlvKSAmPSB+R1BJT19iaXQoZ3Bpbyk7Ci0KLQlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKQotCQlfX3NldF9iaXQoZ3BpbywgR1BJT19JUlFfcmlzaW5nX2VkZ2UpOwotCWVsc2UKLQkJX19jbGVhcl9iaXQoZ3BpbywgR1BJT19JUlFfcmlzaW5nX2VkZ2UpOwotCi0JaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCi0JCV9fc2V0X2JpdChncGlvLCBHUElPX0lSUV9mYWxsaW5nX2VkZ2UpOwotCWVsc2UKLQkJX19jbGVhcl9iaXQoZ3BpbywgR1BJT19JUlFfZmFsbGluZ19lZGdlKTsKLQotCUdSRVIoZ3BpbykgPSBHUElPX0lSUV9yaXNpbmdfZWRnZVtpZHhdICYgR1BJT19JUlFfbWFza1tpZHhdOwotCUdGRVIoZ3BpbykgPSBHUElPX0lSUV9mYWxsaW5nX2VkZ2VbaWR4XSAmIEdQSU9fSVJRX21hc2tbaWR4XTsKLQotCXByX2RlYnVnKCIlczogSVJRJWQgKEdQSU8lZCkgLSBlZGdlJXMlc1xuIiwgX19mdW5jX18sIGlycSwgZ3BpbywKLQkJKCh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpICA/ICIgcmlzaW5nIiAgOiAiIiksCi0JCSgodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykgPyAiIGZhbGxpbmciIDogIiIpKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEdQSU8gSVJRcyBtdXN0IGJlIGFja25vd2xlZGdlZC4gIFRoaXMgaXMgZm9yIEdQSU8gMCBhbmQgMS4KLSAqLwotCi1zdGF0aWMgdm9pZCBweGFfYWNrX2xvd19ncGlvKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JR0VEUjAgPSAoMSA8PCAoaXJxIC0gSVJRX0dQSU8wKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB4YV9tYXNrX2xvd19ncGlvKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JSUNNUiAmPSB+KDEgPDwgKGlycSAtIFBYQV9JUlEoMCkpKTsKLX0KLQotc3RhdGljIHZvaWQgcHhhX3VubWFza19sb3dfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQotewotCUlDTVIgfD0gMSA8PCAoaXJxIC0gUFhBX0lSUSgwKSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcHhhX2xvd19ncGlvX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIkdQSU8tbCIsCi0JLmFjawkJPSBweGFfYWNrX2xvd19ncGlvLAotCS5tYXNrCQk9IHB4YV9tYXNrX2xvd19ncGlvLAotCS51bm1hc2sJCT0gcHhhX3VubWFza19sb3dfZ3BpbywKLQkuc2V0X3R5cGUJPSBweGFfZ3Bpb19pcnFfdHlwZSwKLX07Ci0KLS8qCi0gKiBEZW11eCBoYW5kbGVyIGZvciBHUElPPj0yIGVkZ2UgZGV0ZWN0IGludGVycnVwdHMKLSAqLwotCi0jZGVmaW5lIEdFRFJfQklUUwkoc2l6ZW9mKGdlZHIpICogQklUU19QRVJfQllURSkKLQotc3RhdGljIHZvaWQgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JaW50IGxvb3AsIGJpdCwgbjsKLQl1bnNpZ25lZCBsb25nIGdlZHJbNF07Ci0KLQlkbyB7Ci0JCWdlZHJbMF0gPSBHRURSMCAmIEdQSU9fSVJRX21hc2tbMF0gJiB+MzsKLQkJZ2VkclsxXSA9IEdFRFIxICYgR1BJT19JUlFfbWFza1sxXTsKLQkJZ2VkclsyXSA9IEdFRFIyICYgR1BJT19JUlFfbWFza1syXTsKLQkJZ2VkclszXSA9IEdFRFIzICYgR1BJT19JUlFfbWFza1szXTsKLQotCQlHRURSMCA9IGdlZHJbMF07IEdFRFIxID0gZ2VkclsxXTsKLQkJR0VEUjIgPSBnZWRyWzJdOyBHRURSMyA9IGdlZHJbM107Ci0KLQkJbG9vcCA9IDA7Ci0JCWJpdCA9IGZpbmRfZmlyc3RfYml0KGdlZHIsIEdFRFJfQklUUyk7Ci0JCXdoaWxlIChiaXQgPCBHRURSX0JJVFMpIHsKLQkJCWxvb3AgPSAxOwotCi0JCQluID0gUFhBX0dQSU9fSVJRX0JBU0UgKyBiaXQ7Ci0JCQlnZW5lcmljX2hhbmRsZV9pcnEobik7Ci0KLQkJCWJpdCA9IGZpbmRfbmV4dF9iaXQoZ2VkciwgR0VEUl9CSVRTLCBiaXQgKyAxKTsKLQkJfQotCX0gd2hpbGUgKGxvb3ApOwotfQotCi1zdGF0aWMgdm9pZCBweGFfYWNrX211eGVkX2dwaW8odW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgZ3BpbyA9IGlycSAtIElSUV9HUElPKDIpICsgMjsKLQlHRURSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHB4YV9tYXNrX211eGVkX2dwaW8odW5zaWduZWQgaW50IGlycSkKLXsKLQlpbnQgZ3BpbyA9IGlycSAtIElSUV9HUElPKDIpICsgMjsKLQlfX2NsZWFyX2JpdChncGlvLCBHUElPX0lSUV9tYXNrKTsKLQlHUkVSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKLQlHRkVSKGdwaW8pICY9IH5HUElPX2JpdChncGlvKTsKLX0KLQotc3RhdGljIHZvaWQgcHhhX3VubWFza19tdXhlZF9ncGlvKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaW50IGdwaW8gPSBpcnEgLSBJUlFfR1BJTygyKSArIDI7Ci0JaW50IGlkeCA9IGdwaW8gPj4gNTsKLQlfX3NldF9iaXQoZ3BpbywgR1BJT19JUlFfbWFzayk7Ci0JR1JFUihncGlvKSA9IEdQSU9fSVJRX3Jpc2luZ19lZGdlW2lkeF0gJiBHUElPX0lSUV9tYXNrW2lkeF07Ci0JR0ZFUihncGlvKSA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVtpZHhdICYgR1BJT19JUlFfbWFza1tpZHhdOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHB4YV9tdXhlZF9ncGlvX2NoaXAgPSB7Ci0JLm5hbWUJCT0gIkdQSU8iLAotCS5hY2sJCT0gcHhhX2Fja19tdXhlZF9ncGlvLAotCS5tYXNrCQk9IHB4YV9tYXNrX211eGVkX2dwaW8sCi0JLnVubWFzawkJPSBweGFfdW5tYXNrX211eGVkX2dwaW8sCi0JLnNldF90eXBlCT0gcHhhX2dwaW9faXJxX3R5cGUsCi19OwotCi12b2lkIF9faW5pdCBweGFfaW5pdF9ncGlvKGludCBncGlvX25yLCBzZXRfd2FrZV90IGZuKQotewotCWludCBpcnEsIGksIGdwaW87Ci0KLQlweGFfbGFzdF9ncGlvID0gZ3Bpb19uciAtIDE7Ci0KLQkvKiBjbGVhciBhbGwgR1BJTyBlZGdlIGRldGVjdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZ3Bpb19ucjsgaSArPSAzMikgewotCQlHRkVSKGkpID0gMDsKLQkJR1JFUihpKSA9IDA7Ci0JCUdFRFIoaSkgPSBHRURSKGkpOwotCX0KLQotCS8qIEdQSU8gMCBhbmQgMSBtdXN0IGhhdmUgdGhlaXIgbWFzayBiaXQgYWx3YXlzIHNldCAqLwotCUdQSU9fSVJRX21hc2tbMF0gPSAzOwotCi0JZm9yIChpcnEgPSBJUlFfR1BJTzA7IGlycSA8PSBJUlFfR1BJTzE7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZweGFfbG93X2dwaW9fY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7Ci0JfQotCi0JZm9yIChpcnEgPSBJUlFfR1BJTygyKTsgaXJxIDwgSVJRX0dQSU8oZ3Bpb19ucik7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZweGFfbXV4ZWRfZ3Bpb19jaGlwKTsKLQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKLQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKLQl9Ci0KLQkvKiBJbnN0YWxsIGhhbmRsZXIgZm9yIEdQSU8+PTIgZWRnZSBkZXRlY3QgaW50ZXJydXB0cyAqLwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPXzJfeCwgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcik7Ci0KLQlweGFfbG93X2dwaW9fY2hpcC5zZXRfd2FrZSA9IGZuOwotCXB4YV9tdXhlZF9ncGlvX2NoaXAuc2V0X3dha2UgPSBmbjsKLQotCS8qIGFkZCBhIEdQSU8gY2hpcCBmb3IgZWFjaCByZWdpc3RlciBiYW5rLgotCSAqIHRoZSBsYXN0IFBYQTI1eCByZWdpc3RlciBvbmx5IGNvbnRhaW5zIDIxIEdQSU9zCi0JICovCi0JZm9yIChncGlvID0gMCwgaSA9IDA7IGdwaW8gPCBncGlvX25yOyBncGlvICs9IDMyLCBpKyspIHsKLQkJaWYgKGdwaW8gKyAzMiA+IGdwaW9fbnIpCi0JCQlweGFfZ3Bpb19jaGlwW2ldLmNoaXAubmdwaW8gPSBncGlvX25yIC0gZ3BpbzsKLQkJZ3Bpb2NoaXBfYWRkKCZweGFfZ3Bpb19jaGlwW2ldLmNoaXApOwotCX0KLX0KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9ncGxyWzRdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZ3Bkcls0XTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2dyZXJbNF07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9nZmVyWzRdOwotCi1zdGF0aWMgaW50IHB4YV9ncGlvX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCWludCBpLCBncGlvOwotCi0JZm9yIChncGlvID0gMCwgaSA9IDA7IGdwaW8gPCBweGFfbGFzdF9ncGlvOyBncGlvICs9IDMyLCBpKyspIHsKLQkJc2F2ZWRfZ3BscltpXSA9IEdQTFIoZ3Bpbyk7Ci0JCXNhdmVkX2dwZHJbaV0gPSBHUERSKGdwaW8pOwotCQlzYXZlZF9ncmVyW2ldID0gR1JFUihncGlvKTsKLQkJc2F2ZWRfZ2ZlcltpXSA9IEdGRVIoZ3Bpbyk7Ci0KLQkJLyogQ2xlYXIgR1BJTyB0cmFuc2l0aW9uIGRldGVjdCBiaXRzICovCi0JCUdFRFIoZ3BpbykgPSBHRURSKGdwaW8pOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBweGFfZ3Bpb19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlpbnQgaSwgZ3BpbzsKLQotCWZvciAoZ3BpbyA9IDAsIGkgPSAwOyBncGlvIDwgcHhhX2xhc3RfZ3BpbzsgZ3BpbyArPSAzMiwgaSsrKSB7Ci0JCS8qIHJlc3RvcmUgbGV2ZWwgd2l0aCBzZXQvY2xlYXIgKi8KLQkJR1BTUihncGlvKSA9IHNhdmVkX2dwbHJbaV07Ci0JCUdQQ1IoZ3BpbykgPSB+c2F2ZWRfZ3BscltpXTsKLQotCQlHUkVSKGdwaW8pID0gc2F2ZWRfZ3JlcltpXTsKLQkJR0ZFUihncGlvKSA9IHNhdmVkX2dmZXJbaV07Ci0JCUdQRFIoZ3BpbykgPSBzYXZlZF9ncGRyW2ldOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi0jZGVmaW5lIHB4YV9ncGlvX3N1c3BlbmQJTlVMTAotI2RlZmluZSBweGFfZ3Bpb19yZXN1bWUJCU5VTEwKLSNlbmRpZgotCi1zdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YV9ncGlvX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJncGlvIiwKLQkuc3VzcGVuZAk9IHB4YV9ncGlvX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBweGFfZ3Bpb19yZXN1bWUsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBweGFfZ3Bpb19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmcHhhX2dwaW9fc3lzY2xhc3MpOwotfQotCi1jb3JlX2luaXRjYWxsKHB4YV9ncGlvX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZ3Vtc3RpeC5jCmluZGV4IGUyOTZjZTEuLmNhOTkxMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2d1bXN0aXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9ndW1zdGl4LmMKQEAgLTM4LDE0ICszOCwxMiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KICNpbmNsdWRlIDxtYWNoL2d1bXN0aXguaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjV4Lmg+Ci0KICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7CkBAIC0xOTEsNiArMTg5LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgYW0zMDBfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQgY2Fycmllcl9ib2FyZF9pbml0KHZvaWQpCiB7CiAJLyoKQEAgLTE5OCw2ICsyMDEsNyBAQAogCSAqIHRoZXkgY2Fubm90IGJlIGRldGVjdGVkIHByb2dyYW1hdGljYWxseQogCSAqLwogCWFtMjAwX2luaXQoKTsKKwlhbTMwMF9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBndW1zdGl4X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9oNTAwMC5jCmluZGV4IGRhNmU0NDIuLmYzZDIyMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2g1MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaDUwMDAuYwpAQCAtMjQsMTQgKzI0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKwogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2g1MDAwLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgorCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCiAvKgpAQCAtMTUzLDYgKzE1NCwxMyBAQAogCUdQSU8yM19TU1AxX1NDTEssCiAJR1BJTzI1X1NTUDFfVFhELAogCUdQSU8yNl9TU1AxX1JYRCwKKworCS8qIEkyUyAqLworCUdQSU8yOF9JMlNfQklUQ0xLX09VVCwKKwlHUElPMjlfSTJTX1NEQVRBX0lOLAorCUdQSU8zMF9JMlNfU0RBVEFfT1VULAorCUdQSU8zMV9JMlNfU1lOQywKKwlHUElPMzJfSTJTX1NZU0NMSywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9oaW1hbGF5YS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaGltYWxheWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWE5OWZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaGltYWxheWEuYwpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2hpbWFsYXlhLmMKKyAqCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgdGhlIEhUQyBIaW1hbGF5YQorICoKKyAqIEJhc2VkIG9uIDIuNi4yMS1oaDIwJ3MgaGltYWxheWEuYyBhbmQgaGltYWxheWFfbGNkLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggWmJ5bmVrIE1pY2hsIDxaYnluZWsuTWljaGxAc2V6bmFtLmN6PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8dmlkZW8vdzEwMGZiLmg+CisKKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIaW1hbGF5YSBMQ0QgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCB3MTAwX2dlbl9yZWdzIGhpbWFsYXlhX2xjZF9yZWdzID0geworCS5sY2RfZm9ybWF0ID0gICAgICAgIDB4MDAwMDAwMDMsCisJLmxjZGRfY250bDEgPSAgICAgICAgMHgwMDAwMDAwMCwKKwkubGNkZF9jbnRsMiA9ICAgICAgICAweDAwMDNmZmZmLAorCS5nZW5sY2RfY250bDEgPSAgICAgIDB4MDBmZmYwMDMsCisJLmdlbmxjZF9jbnRsMiA9ICAgICAgMHgwMDAwMDAwMywKKwkuZ2VubGNkX2NudGwzID0gICAgICAweDAwMDEwMmFhLAorfTsKKworc3RhdGljIHN0cnVjdCB3MTAwX21vZGUgaGltYWxheWE0X2xjZF9tb2RlID0geworCS54cmVzIAkJPSAyNDAsCisJLnlyZXMgCQk9IDMyMCwKKwkubGVmdF9tYXJnaW4gCT0gMCwKKwkucmlnaHRfbWFyZ2luIAk9IDMxLAorCS51cHBlcl9tYXJnaW4gCT0gMTUsCisJLmxvd2VyX21hcmdpbiAJPSAwLAorCS5jcnRjX3NzCT0gMHg4MDE1MDAxNCwKKwkuY3J0Y19scwk9IDB4YTBmYjAwZjcsCisJLmNydGNfZ3MJPSAweGMwMDgwMDA3LAorCS5jcnRjX3Zwb3NfZ3MJPSAweDAwMDgwMDA3LAorCS5jcnRjX3Jldgk9IDB4MDAwMDAwMGEsCisJLmNydGNfZGNsawk9IDB4ODE3MDAwMzAsCisJLmNydGNfZ2Nsawk9IDB4ODAxNTAxMGYsCisJLmNydGNfZ29lCT0gMHgwMDAwMDAwMCwKKwkucGxsX2ZyZXEgCT0gODAsCisJLnBpeGNsa19kaXZpZGVyID0gMTUsCisJLnBpeGNsa19kaXZpZGVyX3JvdGF0ZWQgPSAxNSwKKwkucGl4Y2xrX3NyYyAgICAgPSBDTEtfU1JDX1BMTCwKKwkuc3lzY2xrX2RpdmlkZXIgPSAwLAorCS5zeXNjbGtfc3JjICAgICA9IENMS19TUkNfUExMLAorfTsKKworc3RhdGljIHN0cnVjdCB3MTAwX21vZGUgaGltYWxheWE2X2xjZF9tb2RlID0geworCS54cmVzIAkJPSAyNDAsCisJLnlyZXMgCQk9IDMyMCwKKwkubGVmdF9tYXJnaW4gCT0gOSwKKwkucmlnaHRfbWFyZ2luIAk9IDgsCisJLnVwcGVyX21hcmdpbiAJPSA1LAorCS5sb3dlcl9tYXJnaW4gCT0gNCwKKwkuY3J0Y19zcwk9IDB4ODAxNTAwMTQsCisJLmNydGNfbHMJPSAweGEwZmIwMGY3LAorCS5jcnRjX2dzCT0gMHhjMDA4MDAwNywKKwkuY3J0Y192cG9zX2dzCT0gMHgwMDA4MDAwNywKKwkuY3J0Y19yZXYJPSAweDAwMDAwMDBhLAorCS5jcnRjX2RjbGsJPSAweGExNzAwMDMwLAorCS5jcnRjX2djbGsJPSAweDgwMTUwMTBmLAorCS5jcnRjX2dvZQk9IDB4MDAwMDAwMDAsCisJLnBsbF9mcmVxIAk9IDk1LAorCS5waXhjbGtfZGl2aWRlciA9IDB4YiwKKwkucGl4Y2xrX2RpdmlkZXJfcm90YXRlZCA9IDQsCisJLnBpeGNsa19zcmMgICAgID0gQ0xLX1NSQ19QTEwsCisJLnN5c2Nsa19kaXZpZGVyID0gMSwKKwkuc3lzY2xrX3NyYyAgICAgPSBDTEtfU1JDX1BMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdzEwMF9ncGlvX3JlZ3MgaGltYWxheWFfdzEwMF9ncGlvX2luZm8gPSB7CisJLmluaXRfZGF0YTEgPSAweGZmZmYwMDAwLAkvKiBHUElPX0RBVEEgICovCisJLmdwaW9fZGlyMSAgPSAweDAwMDAwMDAwLAkvKiBHUElPX0NOVEwxICovCisJLmdwaW9fb2UxICAgPSAweDAwM2MwMDAwLAkvKiBHUElPX0NOVEwyICovCisJLmluaXRfZGF0YTIgPSAweDAwMDAwMDAwLAkvKiBHUElPX0RBVEEyICovCisJLmdwaW9fZGlyMiAgPSAweDAwMDAwMDAwLAkvKiBHUElPX0NOVEwzICovCisJLmdwaW9fb2UyICAgPSAweDAwMDAwMDAwLAkvKiBHUElPX0NOVEw0ICovCit9OworCitzdGF0aWMgc3RydWN0IHcxMDBmYl9tYWNoX2luZm8gaGltYWxheWFfZmJfaW5mbyA9IHsKKwkubnVtX21vZGVzICA9IDEsCisJLnJlZ3MgICAgICAgPSAmaGltYWxheWFfbGNkX3JlZ3MsCisJLmdwaW8gICAgICAgPSAmaGltYWxheWFfdzEwMF9ncGlvX2luZm8sCisJLnh0YWxfZnJlcSA9IDE2MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBoaW1hbGF5YV9mYl9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4MDgwMDAwMDAsCisJCS5lbmQJPSAweDA4ZmZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaGltYWxheWFfZmJfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJ3MTAwZmIiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5kZXYgICAgICAgICAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJmhpbWFsYXlhX2ZiX2luZm8sCisJfSwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKGhpbWFsYXlhX2ZiX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gaGltYWxheWFfZmJfcmVzb3VyY2VzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZoaW1hbGF5YV9mYl9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgaGltYWxheWFfbGNkX2luaXQodm9pZCkKK3sKKwlpbnQgaGltYWxheWFfYm9hcmRpZDsKKworCWhpbWFsYXlhX2JvYXJkaWQgPSAweDQ7IC8qIGhhcmRjb2RlZCAoZGV0ZWN0aW9uIG5lZWRzIEFTSUMzIGZ1bmN0aW9ucykgKi8KKwlwcmludGsoS0VSTl9JTkZPICJoaW1hbGF5YSBMQ0QgRHJpdmVyIGluaXQuIGJvYXJkaWQ9JWRcbiIsCisJCWhpbWFsYXlhX2JvYXJkaWQpOworCisJc3dpdGNoIChoaW1hbGF5YV9ib2FyZGlkKSB7CisJY2FzZSAweDQ6CisJCWhpbWFsYXlhX2ZiX2luZm8ubW9kZWxpc3QgPSAmaGltYWxheWE0X2xjZF9tb2RlOworCWJyZWFrOworCWNhc2UgMHg2OgorCQloaW1hbGF5YV9mYl9pbmZvLm1vZGVsaXN0ID0gJmhpbWFsYXlhNl9sY2RfbW9kZTsKKwlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICJoaW1hbGF5YSBsY2RfaW5pdDogdW5rbm93biBib2FyZGlkPSVkLiBVc2luZyAweDRcbiIsCisJCQloaW1hbGF5YV9ib2FyZGlkKTsKKwkJaGltYWxheWFfZmJfaW5mby5tb2RlbGlzdCA9ICZoaW1hbGF5YTRfbGNkX21vZGU7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgaGltYWxheWFfaW5pdCh2b2lkKQoreworCWhpbWFsYXlhX2xjZF9pbml0KCk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKKworTUFDSElORV9TVEFSVChISU1BTEFZQSwgIkhUQyBIaW1hbGF5YSIpCisJLnBoeXNfaW8gPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdCA9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyA9IDB4YTAwMDAxMDAsCisJLm1hcF9pbyA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxID0gcHhhMjV4X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgPSBoaW1hbGF5YV9pbml0LAorCS50aW1lciA9ICZweGFfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaWRwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pZHAuYwppbmRleCAwMTNiMTViLi5iNjI0M2I1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pZHAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pZHAuYwpAQCAtMzEsOCArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvaWRwLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvYml0ZmllbGQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKaW5kZXggMzY0YzVlMi4uMjEyMTMwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKQEAgLTI4LDExICsyOCw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAorI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pMmMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1zc3AuaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaAppbmRleCAyYWUzNzNmLi4zZjJhMDFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKQEAgLTEsMTkgKzEsMzEgQEAKICNpZm5kZWYgX0NPTElCUklfSF8KICNkZWZpbmUgX0NPTElCUklfSF8KKy8qCisgKiBjb21tb24gc2V0dGluZ3MgZm9yIGFsbCBtb2R1bGVzCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01NQ19QWEEpIHx8IGRlZmluZWQoQ09ORklHX01NQ19QWEFfTU9EVUxFKQorZXh0ZXJuIHZvaWQgY29saWJyaV9weGEzeHhfaW5pdF9tbWMobWZwX2NmZ190ICpwaW5zLCBpbnQgbGVuLCBpbnQgZGV0ZWN0X3Bpbik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhM3h4X2luaXRfbW1jKG1mcF9jZmdfdCAqLCBpbnQsIGludCkge30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfRkJfUFhBKSB8fCBkZWZpbmVkKENPTkZJR19GQl9QWEFfTU9EVUxFKQorZXh0ZXJuIHZvaWQgY29saWJyaV9weGEzeHhfaW5pdF9sY2QoaW50IGJsX3Bpbik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGNvbGlicmlfcHhhM3h4X2luaXRfbGNkKGludCkge30KKyNlbmRpZgogCiAvKiBwaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyAqLwotI2RlZmluZSBDT0xJQlJJX0ZMQVNIX1BIWVMJKFBYQV9DUzBfUEhZUykgIC8qIEZsYXNoIHJlZ2lvbiAqLwotI2RlZmluZSBDT0xJQlJJX0VUSF9QSFlTCShQWEFfQ1MyX1BIWVMpICAvKiBFdGhlcm5ldCBETTkwMDAgcmVnaW9uICovCiAjZGVmaW5lIENPTElCUklfU0RSQU1fQkFTRQkweGEwMDAwMDAwICAgICAgLyogU0RSQU0gcmVnaW9uICovCiAKLS8qIHZpcnR1YWwgbWVtb3J5IHJlZ2lvbnMgKi8KLSNkZWZpbmUgQ09MSUJSSV9ESVNLX1ZJUlQJMHhGMDAwMDAwMAkvKiBEaXNrIE9uIENoaXAgcmVnaW9uICovCisvKiBkZWZpbml0aW9ucyBmb3IgQ29saWJyaSBQWEEyNzAgKi8KIAotLyogc2l6ZSBvZiBmbGFzaCAqLwotI2RlZmluZSBDT0xJQlJJX0ZMQVNIX1NJWkUJMHgwMjAwMDAwMAkvKiBGbGFzaCBzaXplIDMyIE1CICovCi0KLS8qIEV0aGVybmV0IENvbnRyb2xsZXIgRGF2aWNvbSBETTkwMDAgKi8KLSNkZWZpbmUgR1BJT19ETTkwMDAJCTExNAotI2RlZmluZSBDT0xJQlJJX0VUSF9JUlEJSVJRX0dQSU8oR1BJT19ETTkwMDApCisjZGVmaW5lIENPTElCUklfUFhBMjcwX0ZMQVNIX1BIWVMJKFBYQV9DUzBfUEhZUykgIC8qIEZsYXNoIHJlZ2lvbiAqLworI2RlZmluZSBDT0xJQlJJX1BYQTI3MF9FVEhfUEhZUwkJKFBYQV9DUzJfUEhZUykgIC8qIEV0aGVybmV0ICovCisjZGVmaW5lIENPTElCUklfUFhBMjcwX0VUSF9JUlFfR1BJTwkxMTQKKyNkZWZpbmUgQ09MSUJSSV9QWEEyNzBfRVRIX0lSUQkJXAorCWdwaW9fdG9faXJxKG1mcF90b19ncGlvKENPTElCUklfUFhBMjcwX0VUSF9JUlFfR1BJTykpCiAKICNlbmRpZiAvKiBfQ09MSUJSSV9IXyAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY3NiNzI2LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY3NiNzI2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ3YWIxYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jc2I3MjYuaApAQCAtMCwwICsxLDI2IEBACisvKgorICogIFN1cHBvcnQgZm9yIENvZ2VudCBDU0I3MjYKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA4IERtaXRyeSBCYXJ5c2hrb3YKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2lmbmRlZiBDU0I3MjZfSAorI2RlZmluZSBDU0I3MjZfSAorCisjZGVmaW5lIENTQjcyNl9HUElPX0lSUV9MQU4JNTIKKyNkZWZpbmUgQ1NCNzI2X0dQSU9fSVJRX1NNNTAxCTUzCisjZGVmaW5lIENTQjcyNl9HUElPX01NQ19ERVRFQ1QJMTAwCisjZGVmaW5lIENTQjcyNl9HUElPX01NQ19STwkxMDEKKworI2RlZmluZSBDU0I3MjZfRkxBU0hfU0laRQkoNjQgKiAxMDI0ICogMTAyNCkKKyNkZWZpbmUgQ1NCNzI2X0ZMQVNIX3VNT04JKDggKiAxMDI0ICogMTAyNCkKKworI2RlZmluZSBDU0I3MjZfSVJRX0xBTgkJZ3Bpb190b19pcnEoQ1NCNzI2X0dQSU9fSVJRX0xBTikKKyNkZWZpbmUgQ1NCNzI2X0lSUV9TTTUwMQlncGlvX3RvX2lycShDU0I3MjZfR1BJT19JUlFfU001MDEpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZG1hLmgKaW5kZXggNzgwNDYzNy4uNWJkNTU4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2RtYS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9kbWEuaApAQCAtMTIsMzUgKzEyLDEwIEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAogCi0vKgotICogRGVzY3JpcHRvciBzdHJ1Y3R1cmUgZm9yIFBYQSdzIERNQSBlbmdpbmUKLSAqIE5vdGU6IHRoaXMgc3RydWN0dXJlIG11c3QgYWx3YXlzIGJlIGFsaWduZWQgdG8gYSAxNi1ieXRlIGJvdW5kYXJ5LgotICovCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi10eXBlZGVmIHN0cnVjdCBweGFfZG1hX2Rlc2MgewotCXZvbGF0aWxlIHUzMiBkZGFkcjsJLyogUG9pbnRzIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IgKyBmbGFncyAqLwotCXZvbGF0aWxlIHUzMiBkc2FkcjsJLyogRFNBRFIgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyICovCi0Jdm9sYXRpbGUgdTMyIGR0YWRyOwkvKiBEVEFEUiB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNmZXIgKi8KLQl2b2xhdGlsZSB1MzIgZGNtZDsJLyogRENNRCB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNmZXIgKi8KLX0gcHhhX2RtYV9kZXNjOworLyogRE1BIENvbnRyb2xsZXIgUmVnaXN0ZXJzIERlZmluaXRpb25zICovCisjZGVmaW5lIERNQUNfUkVHU19WSVJUCWlvX3AydigweDQwMDAwMDAwKQogCi10eXBlZGVmIGVudW0gewotCURNQV9QUklPX0hJR0ggPSAwLAotCURNQV9QUklPX01FRElVTSA9IDEsCi0JRE1BX1BSSU9fTE9XID0gMgotfSBweGFfZG1hX3ByaW87Ci0KLS8qCi0gKiBETUEgcmVnaXN0cmF0aW9uCi0gKi8KLQotaW50IF9faW5pdCBweGFfaW5pdF9kbWEoaW50IG51bV9jaCk7Ci0KLWludCBweGFfcmVxdWVzdF9kbWEgKGNoYXIgKm5hbWUsCi0JCQkgcHhhX2RtYV9wcmlvIHByaW8sCi0JCQkgdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiksCi0JCQkgdm9pZCAqZGF0YSk7Ci0KLXZvaWQgcHhhX2ZyZWVfZG1hIChpbnQgZG1hX2NoKTsKLQorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAjZW5kaWYgLyogX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZXNlcmllcy1ncGlvLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZXNlcmllcy1ncGlvLmgKaW5kZXggZWZiZDJhYS4uZjNlNTUwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2VzZXJpZXMtZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9lc2VyaWVzLWdwaW8uaApAQCAtNDUsNiArNDUsMjEgQEAKIC8qIGU3eHggSXJEQSBwb3dlciBjb250cm9sICovCiAjZGVmaW5lIEdQSU9fRTdYWF9JUl9PRkYgICAgICAgICAzOAogCisvKiBlNzQwIGF1ZGlvIGNvbnRyb2wgR1BJT3MgKi8KKyNkZWZpbmUgR1BJT19FNzQwX1dNOTcwNV9uQVZERDIgIDE2CisjZGVmaW5lIEdQSU9fRTc0MF9NSUNfT04gICAgICAgICA0MAorI2RlZmluZSBHUElPX0U3NDBfQU1QX09OICAgICAgICAgNDEKKworLyogZTc1MCBhdWRpbyBjb250cm9sIEdQSU9zICovCisjZGVmaW5lIEdQSU9fRTc1MF9IUF9BTVBfT0ZGICAgICAgNAorI2RlZmluZSBHUElPX0U3NTBfU1BLX0FNUF9PRkYgICAgIDcKKyNkZWZpbmUgR1BJT19FNzUwX0hQX0RFVEVDVCAgICAgIDM3CisKKy8qIGU4MDAgYXVkaW8gY29udHJvbCBHUElPcyAqLworI2RlZmluZSBHUElPX0U4MDBfSFBfREVURUNUICAgICAgODEKKyNkZWZpbmUgR1BJT19FODAwX0hQX0FNUF9PRkYgICAgIDgyCisjZGVmaW5lIEdQSU9fRTgwMF9TUEtfQU1QX09OICAgICA4MworCiAvKiBBU0lDIHJlbGF0ZWQgR1BJT3MgKi8KICNkZWZpbmUgR1BJT19FU0VSSUVTX1RNSU9fSVJRICAgICAgICA1CiAjZGVmaW5lIEdQSU9fRVNFUklFU19UTUlPX1BDTFIgICAgICAxOQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ncGlvLmgKaW5kZXggMmM1MzhkOC4uYjAyNGE4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yNCw0MiArMjQsMTE4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfUFhBX0dQSU9fSAogI2RlZmluZSBfX0FTTV9BUkNIX1BYQV9HUElPX0gKIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgogCisjZGVmaW5lIEdQSU9fUkVHU19WSVJUCWlvX3AydigweDQwRTAwMDAwKQogCi0vKiBOT1RFOiBzb21lIFBYQXMgaGF2ZSBmZXdlciBvbi1jaGlwIEdQSU9zIChsaWtlIFBYQTI1NSwgd2l0aCA4NSkuCi0gKiBUaG9zZSBjYXNlcyBjdXJyZW50bHkgY2F1c2UgaG9sZXMgaW4gdGhlIEdQSU8gbnVtYmVyIHNwYWNlLgotICovCisjZGVmaW5lIEJBTktfT0ZGKG4pCSgoKG4pIDwgMykgPyAobikgPDwgMiA6IDB4MTAwICsgKCgobikgLSAzKSA8PCAyKSkKKyNkZWZpbmUgR1BJT19SRUcoeCkJKCoodm9sYXRpbGUgdTMyICopKEdQSU9fUkVHU19WSVJUICsgKHgpKSkKKworLyogR1BJTyBQaW4gTGV2ZWwgUmVnaXN0ZXJzICovCisjZGVmaW5lIEdQTFIwCQlHUElPX1JFRyhCQU5LX09GRigwKSArIDB4MDApCisjZGVmaW5lIEdQTFIxCQlHUElPX1JFRyhCQU5LX09GRigxKSArIDB4MDApCisjZGVmaW5lIEdQTFIyCQlHUElPX1JFRyhCQU5LX09GRigyKSArIDB4MDApCisjZGVmaW5lIEdQTFIzCQlHUElPX1JFRyhCQU5LX09GRigzKSArIDB4MDApCisKKy8qIEdQSU8gUGluIERpcmVjdGlvbiBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1BEUjAJCUdQSU9fUkVHKEJBTktfT0ZGKDApICsgMHgwYykKKyNkZWZpbmUgR1BEUjEJCUdQSU9fUkVHKEJBTktfT0ZGKDEpICsgMHgwYykKKyNkZWZpbmUgR1BEUjIJCUdQSU9fUkVHKEJBTktfT0ZGKDIpICsgMHgwYykKKyNkZWZpbmUgR1BEUjMJCUdQSU9fUkVHKEJBTktfT0ZGKDMpICsgMHgwYykKKworLyogR1BJTyBQaW4gT3V0cHV0IFNldCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1BTUjAJCUdQSU9fUkVHKEJBTktfT0ZGKDApICsgMHgxOCkKKyNkZWZpbmUgR1BTUjEJCUdQSU9fUkVHKEJBTktfT0ZGKDEpICsgMHgxOCkKKyNkZWZpbmUgR1BTUjIJCUdQSU9fUkVHKEJBTktfT0ZGKDIpICsgMHgxOCkKKyNkZWZpbmUgR1BTUjMJCUdQSU9fUkVHKEJBTktfT0ZGKDMpICsgMHgxOCkKKworLyogR1BJTyBQaW4gT3V0cHV0IENsZWFyIFJlZ2lzdGVycyAqLworI2RlZmluZSBHUENSMAkJR1BJT19SRUcoQkFOS19PRkYoMCkgKyAweDI0KQorI2RlZmluZSBHUENSMQkJR1BJT19SRUcoQkFOS19PRkYoMSkgKyAweDI0KQorI2RlZmluZSBHUENSMgkJR1BJT19SRUcoQkFOS19PRkYoMikgKyAweDI0KQorI2RlZmluZSBHUENSMwkJR1BJT19SRUcoQkFOS19PRkYoMykgKyAweDI0KQorCisvKiBHUElPIFJpc2luZyBFZGdlIERldGVjdCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1JFUjAJCUdQSU9fUkVHKEJBTktfT0ZGKDApICsgMHgzMCkKKyNkZWZpbmUgR1JFUjEJCUdQSU9fUkVHKEJBTktfT0ZGKDEpICsgMHgzMCkKKyNkZWZpbmUgR1JFUjIJCUdQSU9fUkVHKEJBTktfT0ZGKDIpICsgMHgzMCkKKyNkZWZpbmUgR1JFUjMJCUdQSU9fUkVHKEJBTktfT0ZGKDMpICsgMHgzMCkKKworLyogR1BJTyBGYWxsaW5nIEVkZ2UgRGV0ZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBHRkVSMAkJR1BJT19SRUcoQkFOS19PRkYoMCkgKyAweDNjKQorI2RlZmluZSBHRkVSMQkJR1BJT19SRUcoQkFOS19PRkYoMSkgKyAweDNjKQorI2RlZmluZSBHRkVSMgkJR1BJT19SRUcoQkFOS19PRkYoMikgKyAweDNjKQorI2RlZmluZSBHRkVSMwkJR1BJT19SRUcoQkFOS19PRkYoMykgKyAweDNjKQorCisvKiBHUElPIEVkZ2UgRGV0ZWN0IFN0YXR1cyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgR0VEUjAJCUdQSU9fUkVHKEJBTktfT0ZGKDApICsgMHg0OCkKKyNkZWZpbmUgR0VEUjEJCUdQSU9fUkVHKEJBTktfT0ZGKDEpICsgMHg0OCkKKyNkZWZpbmUgR0VEUjIJCUdQSU9fUkVHKEJBTktfT0ZGKDIpICsgMHg0OCkKKyNkZWZpbmUgR0VEUjMJCUdQSU9fUkVHKEJBTktfT0ZGKDMpICsgMHg0OCkKKworLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVycyAqLworI2RlZmluZSBHQUZSMF9MCQlHUElPX1JFRygweDAwNTQpCisjZGVmaW5lIEdBRlIwX1UJCUdQSU9fUkVHKDB4MDA1OCkKKyNkZWZpbmUgR0FGUjFfTAkJR1BJT19SRUcoMHgwMDVDKQorI2RlZmluZSBHQUZSMV9VCQlHUElPX1JFRygweDAwNjApCisjZGVmaW5lIEdBRlIyX0wJCUdQSU9fUkVHKDB4MDA2NCkKKyNkZWZpbmUgR0FGUjJfVQkJR1BJT19SRUcoMHgwMDY4KQorI2RlZmluZSBHQUZSM19MCQlHUElPX1JFRygweDAwNkMpCisjZGVmaW5lIEdBRlIzX1UJCUdQSU9fUkVHKDB4MDA3MCkKKworLyogTW9yZSBoYW5keSBtYWNyb3MuICBUaGUgYXJndW1lbnQgaXMgYSBsaXRlcmFsIEdQSU8gbnVtYmVyLiAqLworCisjZGVmaW5lIEdQSU9fYml0KHgpCSgxIDw8ICgoeCkgJiAweDFmKSkKKworI2RlZmluZSBHUExSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDAwKQorI2RlZmluZSBHUERSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDBjKQorI2RlZmluZSBHUFNSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDE4KQorI2RlZmluZSBHUENSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDI0KQorI2RlZmluZSBHUkVSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDMwKQorI2RlZmluZSBHRkVSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDNjKQorI2RlZmluZSBHRURSKHgpCQlHUElPX1JFRyhCQU5LX09GRigoeCkgPj4gNSkgKyAweDQ4KQorI2RlZmluZSBHQUZSKHgpCQlHUElPX1JFRygweDU0ICsgKCgoeCkgJiAweDcwKSA+PiAyKSkKKworCiAjZGVmaW5lIE5SX0JVSUxUSU5fR1BJTyAxMjgKIAotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKLXsKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZ3BpbykgJiYgKGdwaW8gPCBOUl9CVUlMVElOX0dQSU8pKQotCQlyZXR1cm4gR1BMUihncGlvKSAmIEdQSU9fYml0KGdwaW8pOwotCWVsc2UKLQkJcmV0dXJuIF9fZ3Bpb19nZXRfdmFsdWUoZ3Bpbyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3NldF92YWx1ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCi17Ci0JaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGdwaW8pICYmIChncGlvIDwgTlJfQlVJTFRJTl9HUElPKSkgewotCQlpZiAodmFsdWUpCi0JCQlHUFNSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7Ci0JCWVsc2UKLQkJCUdQQ1IoZ3BpbykgPSBHUElPX2JpdChncGlvKTsKLQl9IGVsc2UgewotCQlfX2dwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKLQl9Ci19Ci0KLSNkZWZpbmUgZ3Bpb19jYW5zbGVlcCBfX2dwaW9fY2Fuc2xlZXAKLQorI2RlZmluZSBncGlvX3RvX2JhbmsoZ3BpbykJKChncGlvKSA+PiA1KQogI2RlZmluZSBncGlvX3RvX2lycShncGlvKQlJUlFfR1BJTyhncGlvKQogI2RlZmluZSBpcnFfdG9fZ3BpbyhpcnEpCUlSUV9UT19HUElPKGlycSkKIAorI2lmZGVmIENPTkZJR19DUFVfUFhBMjZ4CisvKiBHUElPODYvODcvODgvODkgb24gUFhBMjZ4IGhhdmUgdGhlaXIgZGlyZWN0aW9uIGJpdHMgaW4gR1BEUjIgaW52ZXJ0ZWQsCisgKiBhcyB3ZWxsIGFzIHRoZWlyIEFsdGVybmF0ZSBGdW5jdGlvbiB2YWx1ZSBiZWluZyAnMScgZm9yIEdQSU8gaW4gR0FGUnguCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fZ3Bpb19pc19pbnZlcnRlZCh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiBjcHVfaXNfcHhhMjV4KCkgJiYgZ3BpbyA+IDg1OworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IF9fZ3Bpb19pc19pbnZlcnRlZCh1bnNpZ25lZCBncGlvKSB7IHJldHVybiAwOyB9CisjZW5kaWYKIAorLyoKKyAqIE9uIFBYQTI1eCBhbmQgUFhBMjd4LCBHQUZSeCBhbmQgR1BEUnggdG9nZXRoZXIgZGVjaWRlIHRoZSBhbHRlcm5hdGUKKyAqIGZ1bmN0aW9uIG9mIGEgR1BJTywgYW5kIEdQRFJ4IGNhbm5vdCBiZSBhbHRlcmVkIG9uY2UgY29uZmlndXJlZC4gSXQKKyAqIGlzIGF0dHJpYnV0ZWQgYXMgIm9jY3VwaWVkIiBoZXJlIChJIGtub3cgdGhpcyB0ZXJtaW5vbG9neSBpc24ndAorICogYWNjdXJhdGUsIHlvdSBhcmUgd2VsY29tZSB0byBwcm9wb3NlIGEgYmV0dGVyIG9uZSA6LSkKKyAqLworc3RhdGljIGlubGluZSBpbnQgX19ncGlvX2lzX29jY3VwaWVkKHVuc2lnbmVkIGdwaW8pCit7CisJaWYgKGNwdV9pc19weGEyN3goKSB8fCBjcHVfaXNfcHhhMjV4KCkpIHsKKwkJaW50IGFmID0gKEdBRlIoZ3BpbykgPj4gKChncGlvICYgMHhmKSAqIDIpKSAmIDB4MzsKKwkJaW50IGRpciA9IEdQRFIoZ3BpbykgJiBHUElPX2JpdChncGlvKTsKKworCQlpZiAoX19ncGlvX2lzX2ludmVydGVkKGdwaW8pKQorCQkJcmV0dXJuIGFmICE9IDEgfHwgZGlyID09IDA7CisJCWVsc2UKKwkJCXJldHVybiBhZiAhPSAwIHx8IGRpciAhPSAwOworCX0gZWxzZQorCQlyZXR1cm4gR1BEUihncGlvKSAmIEdQSU9fYml0KGdwaW8pOworfQorCisjaW5jbHVkZSA8cGxhdC9ncGlvLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ndW1zdGl4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvZ3Vtc3RpeC5oCmluZGV4IDA5OWY1NGEuLjA2YWJkNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9ndW1zdGl4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2d1bXN0aXguaApAQCAtOTcsNCArOTcsNSBAQAogCiAvKiBmb3IgZXhwYW5zaW9uIGJvYXJkcyB0aGF0IGNhbid0IGJlIHByb2dyYW1hdGljYWxseSBkZXRlY3RlZCAqLwogZXh0ZXJuIGludCBhbTIwMF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBhbTMwMF9pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbHViYm9jay5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2x1YmJvY2suaAppbmRleCA0Y2IyNDE1Li43NTFiNzQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbHViYm9jay5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9sdWJib2NrLmgKQEAgLTI1LDcgKzI1LDYgQEAKIAogLyogRlBHQSByZWdpc3RlciB2aXJ0dWFsIGFkZHJlc3NlcyAqLwogI2RlZmluZSBMVUJfV0hPQU1JCQlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDAwMCkKLSNkZWZpbmUgTFVCX0hFWExFRAkJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgwMTApCiAjZGVmaW5lIExVQl9ESVNDX0JMTktfTEVECV9fTFVCX1JFRyhMVUJCT0NLX0ZQR0FfUEhZUyArIDB4MDQwKQogI2RlZmluZSBMVUJfQ09ORl9TV0lUQ0hFUwlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDA1MCkKICNkZWZpbmUgTFVCX1VTRVJfU1dJVENIRVMJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgwNjApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWFnaWNpYW4uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tYWdpY2lhbi5oCmluZGV4IDM4ZDY4ZDkuLjgyYTM5OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tYWdpY2lhbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tYWdpY2lhbi5oCkBAIC02OSw3ICs2OSw3IEBACiAjZGVmaW5lIElSUV9NQUdJQ0lBTl9TRAkJKElSUV9CT0FSRF9TVEFSVCArIDApCiAjZGVmaW5lIElSUV9NQUdJQ0lBTl9FUAkJKElSUV9CT0FSRF9TVEFSVCArIDEpCiAjZGVmaW5lIElSUV9NQUdJQ0lBTl9CVAkJKElSUV9CT0FSRF9TVEFSVCArIDIpCi0jZGVmaW5lIElSUV9NQUdJQ0lBTl9BQwkJKElSUV9CT0FSRF9TVEFSVCArIDMpCisjZGVmaW5lIElSUV9NQUdJQ0lBTl9WQlVTCShJUlFfQk9BUkRfU1RBUlQgKyAzKQogCiAvKgogICogQ1BMRCBFR1BJT3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjV4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI1eC5oCmluZGV4IGE3Mjg2OWIuLmIxM2RjMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjV4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyNXguaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRlBfUFhBMjVYX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRlBfUFhBMjVYX0gKIAotI2luY2x1ZGUgPG1hY2gvbWZwLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMnh4Lmg+CiAKIC8qIEdQSU8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjd4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI3eC5oCmluZGV4IGRhNGY4NWEuLjY1NDNjMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjd4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyN3guaApAQCAtOCw3ICs4LDYgQEAKICAqIHNwZWNpZmljIGNvbnRyb2xsZXIsIGFuZCB0aGlzIHNob3VsZCB3b3JrIGluIG1vc3QgY2FzZXMuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2gvbWZwLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMnh4Lmg+CiAKIC8qIE5vdGU6IEdQSU8zL0dQSU80IHdpbGwgYmUgZHJpdmVuIGJ5IFBvd2VyIEkyQyB3aGVuIFBDRlIvUEkyQ19FTgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyeHguaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMnh4LmgKaW5kZXggM2U5MjExNS4uNjU4YjI4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyeHguaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTJ4eC5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01GUF9QWEEyWFhfSAogI2RlZmluZSBfX0FTTV9BUkNIX01GUF9QWEEyWFhfSAogCi0jaW5jbHVkZSA8bWFjaC9tZnAuaD4KKyNpbmNsdWRlIDxwbGF0L21mcC5oPgogCiAvKgogICogdGhlIGZvbGxvd2luZyBNRlBfeHh4IGJpdCBkZWZpbml0aW9ucyBpbiBtZnAuaCBhcmUgcmUtdXNlZCBmb3IgcHhhMnh4OgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzMDAuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMzAwLmgKaW5kZXggOTI4ZmJlZi4uYWU4NDQxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzMDAuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTMwMC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX1BYQTMwMF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX1BYQTMwMF9ICiAKLSNpbmNsdWRlIDxtYWNoL21mcC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTN4eC5oPgogCiAvKiBHUElPICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTMyMC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzMjAuaAppbmRleCA4MGEwZGE5Li4wNzg5N2U2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTMyMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMzIwLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRlBfUFhBMzIwX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRlBfUFhBMzIwX0gKIAotI2luY2x1ZGUgPG1hY2gvbWZwLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhM3h4Lmg+CiAKIC8qIEdQSU8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhM3h4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTN4eC5oCmluZGV4IDFmNmIzNWMuLmQzNzUxOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhM3h4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEzeHguaApAQCAtMSw2OCArMSw5IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX1BYQTNYWF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX1BYQTNYWF9ICiAKKyNpbmNsdWRlIDxwbGF0L21mcC5oPgorCiAjZGVmaW5lIE1GUFJfQkFTRQkoMHg0MGUxMDAwMCkKLSNkZWZpbmUgTUZQUl9TSVpFCShQQUdFX1NJWkUpCi0KLS8qIE1GUFIgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCi0jZGVmaW5lIE1GUFJfUFVMTF9TRUwJCSgweDEgPDwgMTUpCi0jZGVmaW5lIE1GUFJfUFVMTFVQX0VOCQkoMHgxIDw8IDE0KQotI2RlZmluZSBNRlBSX1BVTExET1dOX0VOCSgweDEgPDwgMTMpCi0jZGVmaW5lIE1GUFJfU0xFRVBfU0VMCQkoMHgxIDw8IDkpCi0jZGVmaW5lIE1GUFJfU0xFRVBfT0VfTgkJKDB4MSA8PCA3KQotI2RlZmluZSBNRlBSX0VER0VfQ0xFQVIJCSgweDEgPDwgNikKLSNkZWZpbmUgTUZQUl9FREdFX0ZBTExfRU4JKDB4MSA8PCA1KQotI2RlZmluZSBNRlBSX0VER0VfUklTRV9FTgkoMHgxIDw8IDQpCi0KLSNkZWZpbmUgTUZQUl9TTEVFUF9EQVRBKHgpCSgoeCkgPDwgOCkKLSNkZWZpbmUgTUZQUl9EUklWRSh4KQkJKCgoeCkgJiAweDcpIDw8IDEwKQotI2RlZmluZSBNRlBSX0FGX1NFTCh4KQkJKCgoeCkgJiAweDcpIDw8IDApCi0KLSNkZWZpbmUgTUZQUl9FREdFX05PTkUJCSgwKQotI2RlZmluZSBNRlBSX0VER0VfUklTRQkJKE1GUFJfRURHRV9SSVNFX0VOKQotI2RlZmluZSBNRlBSX0VER0VfRkFMTAkJKE1GUFJfRURHRV9GQUxMX0VOKQotI2RlZmluZSBNRlBSX0VER0VfQk9USAkJKE1GUFJfRURHRV9SSVNFIHwgTUZQUl9FREdFX0ZBTEwpCi0KLS8qCi0gKiBUYWJsZSB0aGF0IGRldGVybWluZXMgdGhlIGxvdyBwb3dlciBtb2RlcyBvdXRwdXRzLCB3aXRoIGFjdHVhbCBzZXR0aW5ncwotICogdXNlZCBpbiBwYXJlbnRoZXNlcyBmb3IgZG9uJ3QtY2FyZSB2YWx1ZXMuIEV4Y2VwdCBmb3IgdGhlIGZsb2F0IG91dHB1dCwKLSAqIHRoZSBjb25maWd1cmVkIGRyaXZlbiBhbmQgcHVsbGVkIGxldmVscyBtYXRjaCwgc28gaWYgdGhlcmUgaXMgYSBuZWVkIGZvcgotICogbm9uLUxQTSBwdWxsZWQgb3V0cHV0LCB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGNvdWxkIHByb2JhYmx5IGJlIHVzZWQuCi0gKgotICogT3V0cHV0IHZhbHVlICBzbGVlcF9vZV9uICBzbGVlcF9kYXRhICBwdWxsdXBfZW4gIHB1bGxkb3duX2VuICBwdWxsX3NlbAotICogICAgICAgICAgICAgICAgIChiaXQgNykgICAgKGJpdCA4KSAgICAoYml0IDE0KSAgICAgKGJpdCAxMykgICAoYml0IDE1KQotICoKLSAqIElucHV0ICAgICAgICAgICAgMCAgICAgICAgICBYKDApICAgICAgICBYKDApICAgICAgICBYKDApICAgICAgIDAKLSAqIERyaXZlIDAgICAgICAgICAgMCAgICAgICAgICAwICAgICAgICAgICAwICAgICAgICAgICBYKDEpICAgICAgIDAKLSAqIERyaXZlIDEgICAgICAgICAgMCAgICAgICAgICAxICAgICAgICAgICBYKDEpICAgICAgICAwCSAgMAotICogUHVsbCBoaSAoMSkgICAgICAxICAgICAgICAgIFgoMSkgICAgICAgIDEgICAgICAgICAgIDAJICAwCi0gKiBQdWxsIGxvICgwKSAgICAgIDEgICAgICAgICAgWCgwKSAgICAgICAgMCAgICAgICAgICAgMQkgIDAKLSAqIFogKGZsb2F0KSAgICAgICAgMSAgICAgICAgICBYKDApICAgICAgICAwICAgICAgICAgICAwCSAgMAotICovCi0jZGVmaW5lIE1GUFJfTFBNX0lOUFVUCQkoMCkKLSNkZWZpbmUgTUZQUl9MUE1fRFJJVkVfTE9XCShNRlBSX1NMRUVQX0RBVEEoMCkgfCBNRlBSX1BVTExET1dOX0VOKQotI2RlZmluZSBNRlBSX0xQTV9EUklWRV9ISUdIICAgIAkoTUZQUl9TTEVFUF9EQVRBKDEpIHwgTUZQUl9QVUxMVVBfRU4pCi0jZGVmaW5lIE1GUFJfTFBNX1BVTExfTE9XICAgICAgCShNRlBSX0xQTV9EUklWRV9MT1cgIHwgTUZQUl9TTEVFUF9PRV9OKQotI2RlZmluZSBNRlBSX0xQTV9QVUxMX0hJR0ggICAgIAkoTUZQUl9MUE1fRFJJVkVfSElHSCB8IE1GUFJfU0xFRVBfT0VfTikKLSNkZWZpbmUgTUZQUl9MUE1fRkxPQVQgICAgICAgICAJKE1GUFJfU0xFRVBfT0VfTikKLSNkZWZpbmUgTUZQUl9MUE1fTUFTSwkJKDB4ZTA4MCkKLQotLyoKLSAqIFRoZSBwdWxsdXAgYW5kIHB1bGxkb3duIHN0YXRlIG9mIHRoZSBNRlAgcGluIGF0IHJ1biBtb2RlIGlzIGJ5IGRlZmF1bHQKLSAqIGRldGVybWluZWQgYnkgdGhlIHNlbGVjdGVkIGFsdGVybmF0ZSBmdW5jdGlvbi4gSW4gY2FzZSB0aGF0IHNvbWUgYnVnZ3kKLSAqIGRldmljZXMgbmVlZCB0byBvdmVycmlkZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IsICB0aGUgZGVmaW5pdGlvbnMgYmVsb3cKLSAqIGluZGljYXRlcyB0aGUgc2V0dGluZyBvZiBjb3JyZXNwb25kaW5nIE1GUFIgYml0cwotICoKLSAqIERlZmluaXRpb24gICAgICAgcHVsbF9zZWwgIHB1bGx1cF9lbiAgcHVsbGRvd25fZW4KLSAqIE1GUFJfUFVMTF9OT05FICAgICAgIDAgICAgICAgICAwICAgICAgICAwCi0gKiBNRlBSX1BVTExfTE9XICAgICAgICAxICAgICAgICAgMCAgICAgICAgMQotICogTUZQUl9QVUxMX0hJR0ggICAgICAgMSAgICAgICAgIDEgICAgICAgIDAKLSAqIE1GUFJfUFVMTF9CT1RIICAgICAgIDEgICAgICAgICAxICAgICAgICAxCi0gKi8KLSNkZWZpbmUgTUZQUl9QVUxMX05PTkUJCSgwKQotI2RlZmluZSBNRlBSX1BVTExfTE9XCQkoTUZQUl9QVUxMX1NFTCB8IE1GUFJfUFVMTERPV05fRU4pCi0jZGVmaW5lIE1GUFJfUFVMTF9CT1RICQkoTUZQUl9QVUxMX0xPVyB8IE1GUFJfUFVMTFVQX0VOKQotI2RlZmluZSBNRlBSX1BVTExfSElHSAkJKE1GUFJfUFVMTF9TRUwgfCBNRlBSX1BVTExVUF9FTikKIAogLyogUFhBM3h4IGNvbW1vbiBNRlAgY29uZmlndXJhdGlvbnMgLSBwcm9jZXNzb3Igc3BlY2lmaWMgb25lcyBkZWZpbmVkCiAgKiBpbiBtZnAtcHhhMzAwLmggYW5kIG1mcC1weGEzMjAuaApAQCAtMTk3LDU2ICsxMzgsMjEgQEAKICNkZWZpbmUgR1BJTzVfMl9HUElPCQlNRlBfQ0ZHKEdQSU81XzIsIEFGMCkKICNkZWZpbmUgR1BJTzZfMl9HUElPCQlNRlBfQ0ZHKEdQSU82XzIsIEFGMCkKIAotLyoKLSAqIGVhY2ggTUZQIHBpbiB3aWxsIGhhdmUgYSBNRlBSIHJlZ2lzdGVyLCBzaW5jZSB0aGUgb2Zmc2V0IG9mIHRoZQotICogcmVnaXN0ZXIgdmFyaWVzIGJldHdlZW4gcHJvY2Vzc29ycywgdGhlIHByb2Nlc3NvciBzcGVjaWZpYyBjb2RlCi0gKiBzaG91bGQgaW5pdGlhbGl6ZSB0aGUgcGluIG9mZnNldHMgYnkgcHhhM3h4X21mcF9pbml0X2FkZHIoKQotICoKLSAqIHB4YTN4eF9tZnBfaW5pdF9hZGRyIC0gYWNjZXB0cyBhIHRhYmxlIG9mICJweGEzeHhfbWZwX2FkZHJfbWFwIgotICogc3RydWN0dXJlLCB3aGljaCByZXByZXNlbnRzIGEgcmFuZ2Ugb2YgTUZQIHBpbnMgZnJvbSAic3RhcnQiIHRvCi0gKiAiZW5kIiwgd2l0aCB0aGUgb2Zmc2V0IGJlZ2luaW5nIGF0ICJvZmZzZXQiLCB0byBkZWZpbmUgYSBzaW5nbGUKLSAqIHBpbiwgbGV0ICJlbmQiID0gLTEKLSAqCi0gKiB1c2UKLSAqCi0gKiBNRlBfQUREUl9YKCkgdG8gZGVmaW5lIGEgcmFuZ2Ugb2YgcGlucwotICogTUZQX0FERFIoKSAgIHRvIGRlZmluZSBhIHNpbmdsZSBwaW4KLSAqIE1GUF9BRERSX0VORCB0byBzaWduYWwgdGhlIGVuZCBvZiBwaW4gb2Zmc2V0IGRlZmluaXRpb25zCisvKiBOT1RFOiB1c2FnZSBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIG5vdCByZWNvbW1lbmRlZCwKKyAqIHVzZSBweGEzeHhfbWZwX2NvbmZpZygpIGluc3RlYWQuCiAgKi8KLXN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwIHsKLQl1bnNpZ25lZCBpbnQJc3RhcnQ7Ci0JdW5zaWduZWQgaW50CWVuZDsKLQl1bnNpZ25lZCBsb25nCW9mZnNldDsKLX07CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHhhM3h4X21mcF9yZWFkKGludCBtZnApCit7CisJcmV0dXJuIG1mcF9yZWFkKG1mcCk7Cit9CiAKLSNkZWZpbmUgTUZQX0FERFJfWChzdGFydCwgZW5kLCBvZmZzZXQpIFwKLQl7IE1GUF9QSU5fIyNzdGFydCwgTUZQX1BJTl8jI2VuZCwgb2Zmc2V0IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBweGEzeHhfbWZwX3dyaXRlKGludCBtZnAsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCW1mcF93cml0ZShtZnAsIHZhbCk7Cit9CiAKLSNkZWZpbmUgTUZQX0FERFIocGluLCBvZmZzZXQpIFwKLQl7IE1GUF9QSU5fIyNwaW4sIC0xLCBvZmZzZXQgfQotCi0jZGVmaW5lIE1GUF9BRERSX0VORAl7IE1GUF9QSU5fSU5WQUxJRCwgMCB9Ci0KLS8qCi0gKiBweGEzeHhfbWZwX3JlYWQoKS9weGEzeHhfbWZwX3dyaXRlKCkgLSBmb3IgZGlyZWN0IHJlYWQvd3JpdGUgYWNjZXNzCi0gKiB0byB0aGUgTUZQUiByZWdpc3RlcgotICovCi11bnNpZ25lZCBsb25nIHB4YTN4eF9tZnBfcmVhZChpbnQgbWZwKTsKLXZvaWQgcHhhM3h4X21mcF93cml0ZShpbnQgbWZwLCB1bnNpZ25lZCBsb25nIG1mcHJfdmFsKTsKLQotLyoKLSAqIHB4YTN4eF9tZnBfY29uZmlnIC0gY29uZmlndXJlIHRoZSBNRlBSIHJlZ2lzdGVycwotICoKLSAqIHVzZWQgYnkgYm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gY29kZQotICovCi12b2lkIHB4YTN4eF9tZnBfY29uZmlnKHVuc2lnbmVkIGxvbmcgKm1mcF9jZmdzLCBpbnQgbnVtKTsKLQotLyoKLSAqIHB4YTN4eF9tZnBfaW5pdF9hZGRyKCkgLSBpbml0aWFsaXplIHRoZSBtYXBwaW5nIGJldHdlZW4gbWZwIHBpbgotICogaW5kZXggYW5kIE1GUFIgcmVnaXN0ZXIgb2Zmc2V0Ci0gKgotICogdXNlZCBieSBwcm9jZXNzb3Igc3BlY2lmaWMgY29kZQotICovCi12b2lkIF9faW5pdCBweGEzeHhfbWZwX2luaXRfYWRkcihzdHJ1Y3QgcHhhM3h4X21mcF9hZGRyX21hcCAqKTsKLXZvaWQgX19pbml0IHB4YTN4eF9pbml0X21mcCh2b2lkKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBweGEzeHhfbWZwX2NvbmZpZyh1bnNpZ25lZCBsb25nICptZnBfY2ZnLCBpbnQgbnVtKQoreworCW1mcF9jb25maWcobWZwX2NmZywgbnVtKTsKK30KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01GUF9QWEEzWFhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGE5MzAuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhOTMwLmgKaW5kZXggZmE3M2Y1Ni4uMGQxMTlkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGE5MzAuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTkzMC5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUZQX1BYQTl4eF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUZQX1BYQTl4eF9ICiAKLSNpbmNsdWRlIDxtYWNoL21mcC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTN4eC5oPgogCiAvKiBHUElPICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbXRkLXhpcC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL210ZC14aXAuaAppbmRleCBjZmNhODE1Li4yOTczODdlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbXRkLXhpcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tdGQteGlwLmgKQEAgLTE1LDggKzE1LDggQEAKICNpZm5kZWYgX19BUkNIX1BYQV9NVERfWElQX0hfXwogI2RlZmluZSBfX0FSQ0hfUFhBX01URF9YSVBfSF9fCiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1vc3QuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtaW50Yy5oPgogCiAjZGVmaW5lIHhpcF9pcnFwZW5kaW5nKCkJKElDSVAgJiBJQ01SKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbWxkLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbWxkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MyOTVhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wYWxtbGQuaApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIEdQSU9zIGFuZCBpbnRlcnJ1cHRzIGZvciBQYWxtIExpZmVEcml2ZSBIYW5kaGVsZCBDb21wdXRlcgorICoKKyAqIEF1dGhvcnM6CUFsZXggT3Nib3JuZSA8YXRvQG1lc2h5Lm9yZz4KKyAqCQlNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfUEFMTUxEX0hfCisjZGVmaW5lIF9JTkNMVURFX1BBTE1MRF9IXworCisvKiogSEVSRSBBUkUgR1BJT3MgKiovCisKKy8qIEdQSU9zICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0dQSU9fUkVTRVQJMQorI2RlZmluZSBHUElPX05SX1BBTE1MRF9QT1dFUl9ERVRFQ1QJNAorI2RlZmluZSBHUElPX05SX1BBTE1MRF9IT1RTWU5DX0JVVFRPTl9OCTEwCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1BPV0VSX1NXSVRDSAkxMgorI2RlZmluZSBHUElPX05SX1BBTE1MRF9FQVJQSE9ORV9ERVRFQ1QgCTEzCisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX0xPQ0tfU1dJVENICTE1CisKKy8qIFNEL01NQyAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTgkxNAorI2RlZmluZSBHUElPX05SX1BBTE1MRF9TRF9QT1dFUgkJMTE0CisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZCTExNgorCisvKiBUT1VDSFNDUkVFTiAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9XTTk3MTJfSVJRCTI3CisKKy8qIElSREEgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRQkxMDgKKworLyogTENEL0JBQ0tMSUdIVCAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9CTF9QT1dFUgkJMTkKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfTENEX1BPV0VSCTk2CisKKy8qIExDRCBCT1JERVIgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfQk9SREVSX1NXSVRDSAkyMQorI2RlZmluZSBHUElPX05SX1BBTE1MRF9CT1JERVJfU0VMRUNUCTIyCisKKy8qIEJMVUVUT09USCAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9CVF9QT1dFUgkJMTcKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfQlRfUkVTRVQJCTgzCisKKy8qIFBDTUNJQSAoV2lGaSkgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfUENNQ0lBX1JFQURZCTM4CisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1BDTUNJQV9QT1dFUgkzNgorI2RlZmluZSBHUElPX05SX1BBTE1MRF9QQ01DSUFfUkVTRVQJODEKKworLyogTEVEcyAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9MRURfR1JFRU4JNTIKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfTEVEX0FNQkVSCTk0CisKKy8qIElERSAqLworI2RlZmluZSBHUElPX05SX1BBTE1MRF9JREVfSVJRCQk5NQorI2RlZmluZSBHUElPX05SX1BBTE1MRF9JREVfUkVTRVQJOTgKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfSURFX1BXRU4JCTExNQorCisvKiBVU0IgKi8KKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfVVNCX0RFVEVDVF9OCTMKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfVVNCX1JFQURZCTg2CisjZGVmaW5lIEdQSU9fTlJfUEFMTUxEX1VTQl9SRVNFVAk4OAorI2RlZmluZSBHUElPX05SX1BBTE1MRF9VU0JfSU5UCQkxMDYKKyNkZWZpbmUgR1BJT19OUl9QQUxNTERfVVNCX1BPV0VSCTExOAorLyogMjAsIDUzIGFuZCA4NiBhcmUgdXNiIHJlbGF0ZWQgdG9vICovCisKKy8qIElOVEVSUlVQVFMgKi8KKyNkZWZpbmUgSVJRX0dQSU9fUEFMTUxEX0dQSU9fUkVTRVQJSVJRX0dQSU8oR1BJT19OUl9QQUxNTERfR1BJT19SRVNFVCkKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTUxEX1NEX0RFVEVDVF9OCUlSUV9HUElPKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKQorI2RlZmluZSBJUlFfR1BJT19QQUxNTERfV005NzEyX0lSUQlJUlFfR1BJTyhHUElPX05SX1BBTE1MRF9XTTk3MTJfSVJRKQorI2RlZmluZSBJUlFfR1BJT19QQUxNTERfSURFX0lSUQkJSVJRX0dQSU8oR1BJT19OUl9QQUxNTERfSURFX0lSUSkKKworCisvKiogSEVSRSBBUkUgSU5JVCBWQUxVRVMgKiovCisKKy8qIElPIG1hcHBpbmdzICovCisjZGVmaW5lIFBBTE1MRF9VU0JfUEhZUwkJUFhBX0NTMl9QSFlTCisjZGVmaW5lIFBBTE1MRF9VU0JfVklSVAkJMHhmMDAwMDAwMAorI2RlZmluZSBQQUxNTERfVVNCX1NJWkUJCTB4MDAxMDAwMDAKKworI2RlZmluZSBQQUxNTERfSURFX1BIWVMJCTB4MjAwMDAwMDAKKyNkZWZpbmUgUEFMTUxEX0lERV9WSVJUCQkweGYxMDAwMDAwCisjZGVmaW5lIFBBTE1MRF9JREVfU0laRQkJMHgwMDEwMDAwMAorCisjZGVmaW5lIFBBTE1MRF9QSFlTX0lPX1NUQVJUCTB4NDAwMDAwMDAKKworLyogQkFUVEVSWSAqLworI2RlZmluZSBQQUxNTERfQkFUX01BWF9WT0xUQUdFCQk0MDAwCS8qIDQuMDBWIG1heGltdW0gdm9sdGFnZSAqLworI2RlZmluZSBQQUxNTERfQkFUX01JTl9WT0xUQUdFCQkzNTUwCS8qIDMuNTVWIGNyaXRpY2FsIHZvbHRhZ2UgKi8KKyNkZWZpbmUgUEFMTUxEX0JBVF9NQVhfQ1VSUkVOVAkJMAkvKiB1bmtub2tuICovCisjZGVmaW5lIFBBTE1MRF9CQVRfTUlOX0NVUlJFTlQJCTAJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNTERfQkFUX01BWF9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNTERfQkFUX01JTl9DSEFSR0UJCTEJLyogdW5rbm93biAqLworI2RlZmluZSBQQUxNTERfTUFYX0xJRkVfTUlOUwkJMjQwCS8qIG9uLWxpZmUgaW4gbWludXRlcyAqLworCisjZGVmaW5lIFBBTE1MRF9CQVRfTUVBU1VSRV9ERUxBWQkoSFogKiAxKQorCisvKiBCQUNLTElHSFQgKi8KKyNkZWZpbmUgUEFMTUxEX01BWF9JTlRFTlNJVFkJCTB4RkUKKyNkZWZpbmUgUEFMTUxEX0RFRkFVTFRfSU5URU5TSVRZCTB4N0UKKyNkZWZpbmUgUEFMTUxEX0xJTUlUX01BU0sJCTB4N0YKKyNkZWZpbmUgUEFMTUxEX1BSRVNDQUxFUgkJMHgzRgorI2RlZmluZSBQQUxNTERfUEVSSU9EX05TCQkzNTAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10NS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BhbG10NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZGIyODgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGFsbXQ1LmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIEdQSU9zIGFuZCBpbnRlcnJ1cHRzIGZvciBQYWxtIFR1bmdzdGVufFQ1IEhhbmRoZWxkIENvbXB1dGVyCisgKgorICogQXV0aG9yczoJQWxlcyBTbnVwYXJlayA8c251cGFyZWtAYXRsYXMuY3o+CisgKgkJTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KKyAqCQlKdXN0aW4gS2VuZHJpY2sgPHR3aWxpZ2h0c2VudHJ5QGdtYWlsLmNvbT4KKyAqCQlSaWNoYXJkVDUgPHJpY2hhcmRfdDVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfUEFMTVQ1X0hfCisjZGVmaW5lIF9JTkNMVURFX1BBTE1UNV9IXworCisvKiogSEVSRSBBUkUgR1BJT3MgKiovCisKKy8qIEdQSU9zICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0dQSU9fUkVTRVQJCTEKKworI2RlZmluZSBHUElPX05SX1BBTE1UNV9QT1dFUl9ERVRFQ1QJCTkwCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0hPVFNZTkNfQlVUVE9OX04JCTEwCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0VBUlBIT05FX0RFVEVDVAkJMTA3CisKKy8qIFNEL01NQyAqLworI2RlZmluZSBHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTgkJMTQKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIJCQkxMTQKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkJCTExNQorCisvKiBUT1VDSFNDUkVFTiAqLworI2RlZmluZSBHUElPX05SX1BBTE1UNV9XTTk3MTJfSVJRCQkyNworCisvKiBJUkRBIC0gZGlzYWJsZSBHUElPIGNvbm5lY3RlZCB0byBTRCBwaW4gb2YgdHJhbmNlaXZlciAoVEZCUzQ3MTA/KSA/ICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUJCTQwCisKKy8qIFVTQiAqLworI2RlZmluZSBHUElPX05SX1BBTE1UNV9VU0JfREVURUNUX04JCTE1CisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X1VTQl9QT1dFUgkJOTUKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfVVNCX1BVTExVUAkJOTMKKworLyogTENEL0JBQ0tMSUdIVCAqLworI2RlZmluZSBHUElPX05SX1BBTE1UNV9CTF9QT1dFUgkJCTg0CisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0xDRF9QT1dFUgkJOTYKKworLyogQkxVRVRPT1RIICovCisjZGVmaW5lIEdQSU9fTlJfUEFMTVQ1X0JUX1BPV0VSCQkJMTcKKyNkZWZpbmUgR1BJT19OUl9QQUxNVDVfQlRfUkVTRVQJCQk4MworCisvKiBJTlRFUlJVUFRTICovCisjZGVmaW5lIElSUV9HUElPX1BBTE1UNV9TRF9ERVRFQ1RfTglJUlFfR1BJTyhHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTikKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVQ1X1dNOTcxMl9JUlEJSVJRX0dQSU8oR1BJT19OUl9QQUxNVDVfV005NzEyX0lSUSkKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVQ1X1VTQl9ERVRFQ1QJSVJRX0dQSU8oR1BJT19OUl9QQUxNVDVfVVNCX0RFVEVDVCkKKyNkZWZpbmUgSVJRX0dQSU9fUEFMTVQ1X0dQSU9fUkVTRVQJSVJRX0dQSU8oR1BJT19OUl9QQUxNVDVfR1BJT19SRVNFVCkKKworLyoqIEhFUkUgQVJFIElOSVQgVkFMVUVTICoqLworCisvKiBWYXJpb3VzIGFkZHJlc3NlcyAgKi8KKyNkZWZpbmUgUEFMTVQ1X1BIWVNfUkFNX1NUQVJUCTB4YTAwMDAwMDAKKyNkZWZpbmUgUEFMTVQ1X1BIWVNfSU9fU1RBUlQJMHg0MDAwMDAwMAorCisvKiBUT1VDSFNDUkVFTiAqLworI2RlZmluZSBBQzk3X0xJTktfRlJBTUUJCTIxCisKKy8qIEJBVFRFUlkgKi8KKyNkZWZpbmUgUEFMTVQ1X0JBVF9NQVhfVk9MVEFHRQkJNDAwMAkvKiA0LjAwdiBjdXJyZW50IHZvbHRhZ2UgKi8KKyNkZWZpbmUgUEFMTVQ1X0JBVF9NSU5fVk9MVEFHRQkJMzU1MAkvKiAzLjU1diBjcml0aWNhbCB2b2x0YWdlICovCisjZGVmaW5lIFBBTE1UNV9CQVRfTUFYX0NVUlJFTlQJCTAJLyogdW5rbm9rbiAqLworI2RlZmluZSBQQUxNVDVfQkFUX01JTl9DVVJSRU5UCQkwCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVQ1X0JBVF9NQVhfQ0hBUkdFCQkxCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVQ1X0JBVF9NSU5fQ0hBUkdFCQkxCS8qIHVua25vd24gKi8KKyNkZWZpbmUgUEFMTVQ1X01BWF9MSUZFX01JTlMJCTM2MCAgICAvKiBvbi1saWZlIGluIG1pbnV0ZXMgKi8KKworI2RlZmluZSBQQUxNVDVfQkFUX01FQVNVUkVfREVMQVkJKEhaICogMSkKKworLyogQkFDS0xJR0hUICovCisjZGVmaW5lIFBBTE1UNV9NQVhfSU5URU5TSVRZCQkweEZFCisjZGVmaW5lIFBBTE1UNV9ERUZBVUxUX0lOVEVOU0lUWQkweDdFCisjZGVmaW5lIFBBTE1UNV9MSU1JVF9NQVNLCQkweDdGCisjZGVmaW5lIFBBTE1UNV9QUkVTQ0FMRVIJCTB4M0YKKyNkZWZpbmUgUEFMTVQ1X1BFUklPRF9OUwkJMzUwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wbS5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BtLmgKaW5kZXggODMzNDI0Ni4uYTZlZWVmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BtLmgKQEAgLTI3LDMgKzI3LDEzIEBACiBleHRlcm4gdm9pZCBweGFfY3B1X3Jlc3VtZSh2b2lkKTsKIAogZXh0ZXJuIGludCBweGFfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKKworLyogTk9URTogdGhpcyBpcyBmb3IgUE0gZGVidWdnaW5nIG9uIEx1YmJvY2ssICBpdCdzIHJlYWxseSBhIGJpZworICogdWdseSwgYnV0IGxldCdzIGtlZXAgdGhlIGNyYXAgbWluaW11bSBoZXJlLCBpbnN0ZWFkIG9mIGRpcmVjdAorICogYWNjZXNzaW5nIHRoZSBMVUJCT0NLIENQTEQgcmVnaXN0ZXJzIGluIGFyY2gvYXJtL21hY2gtcHhhL3BtLmMKKyAqLworI2lmZGVmIENPTkZJR19BUkNIX0xVQkJPQ0sKK2V4dGVybiB2b2lkIGx1YmJvY2tfc2V0X2hleGxlZCh1aW50MzJfdCB2YWx1ZSk7CisjZWxzZQorI2RlZmluZSBsdWJib2NrX3NldF9oZXhsZWQoeCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YS1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhLXJlZ3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFkNjE1YS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhLXJlZ3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEtcmVncy5oCi0gKgotICogIEF1dGhvcjoJTmljb2xhcyBQaXRyZQotICogIENyZWF0ZWQ6CUp1biAxNSwgMjAwMQotICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fUFhBX1JFR1NfSAotI2RlZmluZSBfX1BYQV9SRUdTX0gKLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotLyoKLSAqIFBYQSBDaGlwIHNlbGVjdHMKLSAqLwotCi0jZGVmaW5lIFBYQV9DUzBfUEhZUwkweDAwMDAwMDAwCi0jZGVmaW5lIFBYQV9DUzFfUEhZUwkweDA0MDAwMDAwCi0jZGVmaW5lIFBYQV9DUzJfUEhZUwkweDA4MDAwMDAwCi0jZGVmaW5lIFBYQV9DUzNfUEhZUwkweDBDMDAwMDAwCi0jZGVmaW5lIFBYQV9DUzRfUEhZUwkweDEwMDAwMDAwCi0jZGVmaW5lIFBYQV9DUzVfUEhZUwkweDE0MDAwMDAwCi0KLQotLyoKLSAqIFBlcnNvbmFsIENvbXB1dGVyIE1lbW9yeSBDYXJkIEludGVybmF0aW9uYWwgQXNzb2NpYXRpb24gKFBDTUNJQSkgc29ja2V0cwotICovCi0KLSNkZWZpbmUgUENNQ0lBUHJ0U3AJMHgwNDAwMDAwMAkvKiBQQ01DSUEgUGFydGl0aW9uIFNwYWNlIFtieXRlXSAgICovCi0jZGVmaW5lIFBDTUNJQVNwCSg0KlBDTUNJQVBydFNwKQkvKiBQQ01DSUEgU3BhY2UgW2J5dGVdICAgICAgICAgICAgICovCi0jZGVmaW5lIFBDTUNJQUlPU3AJUENNQ0lBUHJ0U3AJLyogUENNQ0lBIEkvTyBTcGFjZSBbYnl0ZV0gICAgICAgICAqLwotI2RlZmluZSBQQ01DSUFBdHRyU3AJUENNQ0lBUHJ0U3AJLyogUENNQ0lBIEF0dHJpYnV0ZSBTcGFjZSBbYnl0ZV0gICAqLwotI2RlZmluZSBQQ01DSUFNZW1TcAlQQ01DSUFQcnRTcAkvKiBQQ01DSUEgTWVtb3J5IFNwYWNlIFtieXRlXSAgICAgICovCi0KLSNkZWZpbmUgUENNQ0lBMFNwCVBDTUNJQVNwCS8qIFBDTUNJQSAwIFNwYWNlIFtieXRlXSAgICAgICAgICAgKi8KLSNkZWZpbmUgUENNQ0lBMElPU3AJUENNQ0lBSU9TcAkvKiBQQ01DSUEgMCBJL08gU3BhY2UgW2J5dGVdICAgICAgICovCi0jZGVmaW5lIFBDTUNJQTBBdHRyU3AJUENNQ0lBQXR0clNwCS8qIFBDTUNJQSAwIEF0dHJpYnV0ZSBTcGFjZSBbYnl0ZV0gKi8KLSNkZWZpbmUgUENNQ0lBME1lbVNwCVBDTUNJQU1lbVNwCS8qIFBDTUNJQSAwIE1lbW9yeSBTcGFjZSBbYnl0ZV0gICAgKi8KLQotI2RlZmluZSBQQ01DSUExU3AJUENNQ0lBU3AJLyogUENNQ0lBIDEgU3BhY2UgW2J5dGVdICAgICAgICAgICAqLwotI2RlZmluZSBQQ01DSUExSU9TcAlQQ01DSUFJT1NwCS8qIFBDTUNJQSAxIEkvTyBTcGFjZSBbYnl0ZV0gICAgICAgKi8KLSNkZWZpbmUgUENNQ0lBMUF0dHJTcAlQQ01DSUFBdHRyU3AJLyogUENNQ0lBIDEgQXR0cmlidXRlIFNwYWNlIFtieXRlXSAqLwotI2RlZmluZSBQQ01DSUExTWVtU3AJUENNQ0lBTWVtU3AJLyogUENNQ0lBIDEgTWVtb3J5IFNwYWNlIFtieXRlXSAgICAqLwotCi0jZGVmaW5lIF9QQ01DSUEoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBbMC4uMV0gICAgICAgICAgICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoMHgyMDAwMDAwMCArIChOYikqUENNQ0lBU3ApCi0jZGVmaW5lIF9QQ01DSUFJTyhOYikJX1BDTUNJQSAoTmIpCS8qIFBDTUNJQSBJL08gWzAuLjFdICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDTUNJQUF0dHIoTmIpCSAgICAgICAgCS8qIFBDTUNJQSBBdHRyaWJ1dGUgWzAuLjFdICAgICAgICAgKi8gXAotICAgICAgICAgICAgICAgIAkoX1BDTUNJQSAoTmIpICsgMipQQ01DSUFQcnRTcCkKLSNkZWZpbmUgX1BDTUNJQU1lbShOYikJICAgICAgICAJLyogUENNQ0lBIE1lbW9yeSBbMC4uMV0gICAgICAgICAgICAqLyBcCi0gICAgICAgICAgICAgICAgCShfUENNQ0lBIChOYikgKyAzKlBDTUNJQVBydFNwKQotCi0jZGVmaW5lIF9QQ01DSUEwCV9QQ01DSUEgKDApCS8qIFBDTUNJQSAwICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDTUNJQTBJTwlfUENNQ0lBSU8gKDApCS8qIFBDTUNJQSAwIEkvTyAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX1BDTUNJQTBBdHRyCV9QQ01DSUFBdHRyICgwKQkvKiBQQ01DSUEgMCBBdHRyaWJ1dGUgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQ01DSUEwTWVtCV9QQ01DSUFNZW0gKDApCS8qIFBDTUNJQSAwIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KLQotI2RlZmluZSBfUENNQ0lBMQlfUENNQ0lBICgxKQkvKiBQQ01DSUEgMSAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQ01DSUExSU8JX1BDTUNJQUlPICgxKQkvKiBQQ01DSUEgMSBJL08gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9QQ01DSUExQXR0cglfUENNQ0lBQXR0ciAoMSkJLyogUENNQ0lBIDEgQXR0cmlidXRlICAgICAgICAgICAgICAqLwotI2RlZmluZSBfUENNQ0lBMU1lbQlfUENNQ0lBTWVtICgxKQkvKiBQQ01DSUEgMSBNZW1vcnkgICAgICAgICAgICAgICAgICovCi0KLQotCi0vKgotICogRE1BIENvbnRyb2xsZXIKLSAqLwotI2RlZmluZSBEQ1NSKHgpCQlfX1JFRzIoMHg0MDAwMDAwMCwgKHgpIDw8IDIpCi0KLSNkZWZpbmUgRENTUl9SVU4JKDEgPDwgMzEpCS8qIFJ1biBCaXQgKHJlYWQgLyB3cml0ZSkgKi8KLSNkZWZpbmUgRENTUl9OT0RFU0MJKDEgPDwgMzApCS8qIE5vLURlc2NyaXB0b3IgRmV0Y2ggKHJlYWQgLyB3cml0ZSkgKi8KLSNkZWZpbmUgRENTUl9TVE9QSVJRRU4JKDEgPDwgMjkpCS8qIFN0b3AgSW50ZXJydXB0IEVuYWJsZSAocmVhZCAvIHdyaXRlKSAqLwotI2RlZmluZSBEQ1NSX1JFUVBFTkQJKDEgPDwgOCkJLyogUmVxdWVzdCBQZW5kaW5nIChyZWFkLW9ubHkpICovCi0jZGVmaW5lIERDU1JfU1RPUFNUQVRFCSgxIDw8IDMpCS8qIFN0b3AgU3RhdGUgKHJlYWQtb25seSkgKi8KLSNkZWZpbmUgRENTUl9FTkRJTlRSCSgxIDw8IDIpCS8qIEVuZCBJbnRlcnJ1cHQgKHJlYWQgLyB3cml0ZSkgKi8KLSNkZWZpbmUgRENTUl9TVEFSVElOVFIJKDEgPDwgMSkJLyogU3RhcnQgSW50ZXJydXB0IChyZWFkIC8gd3JpdGUpICovCi0jZGVmaW5lIERDU1JfQlVTRVJSCSgxIDw8IDApCS8qIEJ1cyBFcnJvciBJbnRlcnJ1cHQgKHJlYWQgLyB3cml0ZSkgKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1BYQTI3eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBM3h4KQotI2RlZmluZSBEQ1NSX0VPUklSUUVOCSgxIDw8IDI4KSAgICAgICAvKiBFbmQgb2YgUmVjZWl2ZSBJbnRlcnJ1cHQgRW5hYmxlIChSL1cpICovCi0jZGVmaW5lIERDU1JfRU9SSk1QRU4JKDEgPDwgMjcpICAgICAgIC8qIEp1bXAgdG8gbmV4dCBkZXNjcmlwdG9yIG9uIEVPUiAqLwotI2RlZmluZSBEQ1NSX0VPUlNUT1BFTgkoMSA8PCAyNikgICAgICAgLyogU1RPUCBvbiBhbiBFT1IgKi8KLSNkZWZpbmUgRENTUl9TRVRDTVBTVAkoMSA8PCAyNSkgICAgICAgLyogU2V0IERlc2NyaXB0b3IgQ29tcGFyZSBTdGF0dXMgKi8KLSNkZWZpbmUgRENTUl9DTFJDTVBTVAkoMSA8PCAyNCkgICAgICAgLyogQ2xlYXIgRGVzY3JpcHRvciBDb21wYXJlIFN0YXR1cyAqLwotI2RlZmluZSBEQ1NSX0NNUFNUCSgxIDw8IDEwKSAgICAgICAvKiBUaGUgRGVzY3JpcHRvciBDb21wYXJlIFN0YXR1cyAqLwotI2RlZmluZSBEQ1NSX0VPUklOVFIJKDEgPDwgOSkgICAgICAgIC8qIFRoZSBlbmQgb2YgUmVjZWl2ZSAqLwotI2VuZGlmCi0KLSNkZWZpbmUgREFMR04JCV9fUkVHKDB4NDAwMDAwYTApICAvKiBETUEgQWxpZ25tZW50IFJlZ2lzdGVyICovCi0jZGVmaW5lIERJTlQJCV9fUkVHKDB4NDAwMDAwZjApICAvKiBETUEgSW50ZXJydXB0IFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgRFJDTVIobikJKCooKChuKSA8IDY0KSA/IFwKLQkJCSZfX1JFRzIoMHg0MDAwMDEwMCwgKChuKSAmIDB4M2YpIDw8IDIpIDogXAotCQkJJl9fUkVHMigweDQwMDAxMTAwLCAoKG4pICYgMHgzZikgPDwgMikpKQotCi0jZGVmaW5lIERSQ01SX01BUFZMRAkoMSA8PCA3KQkvKiBNYXAgVmFsaWQgKHJlYWQgLyB3cml0ZSkgKi8KLSNkZWZpbmUgRFJDTVJfQ0hMTlVNCTB4MWYJCS8qIG1hc2sgZm9yIENoYW5uZWwgTnVtYmVyIChyZWFkIC8gd3JpdGUpICovCi0KLSNkZWZpbmUgRERBRFIoeCkJX19SRUcyKDB4NDAwMDAyMDAsICh4KSA8PCA0KQotI2RlZmluZSBEU0FEUih4KQlfX1JFRzIoMHg0MDAwMDIwNCwgKHgpIDw8IDQpCi0jZGVmaW5lIERUQURSKHgpCV9fUkVHMigweDQwMDAwMjA4LCAoeCkgPDwgNCkKLSNkZWZpbmUgRENNRCh4KQkJX19SRUcyKDB4NDAwMDAyMGMsICh4KSA8PCA0KQotCi0jZGVmaW5lIEREQURSX0RFU0NBRERSCTB4ZmZmZmZmZjAJLyogQWRkcmVzcyBvZiBuZXh0IGRlc2NyaXB0b3IgKG1hc2spICovCi0jZGVmaW5lIEREQURSX1NUT1AJKDEgPDwgMCkJLyogU3RvcCAocmVhZCAvIHdyaXRlKSAqLwotCi0jZGVmaW5lIERDTURfSU5DU1JDQUREUgkoMSA8PCAzMSkJLyogU291cmNlIEFkZHJlc3MgSW5jcmVtZW50IFNldHRpbmcuICovCi0jZGVmaW5lIERDTURfSU5DVFJHQUREUgkoMSA8PCAzMCkJLyogVGFyZ2V0IEFkZHJlc3MgSW5jcmVtZW50IFNldHRpbmcuICovCi0jZGVmaW5lIERDTURfRkxPV1NSQwkoMSA8PCAyOSkJLyogRmxvdyBDb250cm9sIGJ5IHRoZSBzb3VyY2UuICovCi0jZGVmaW5lIERDTURfRkxPV1RSRwkoMSA8PCAyOCkJLyogRmxvdyBDb250cm9sIGJ5IHRoZSB0YXJnZXQuICovCi0jZGVmaW5lIERDTURfU1RBUlRJUlFFTgkoMSA8PCAyMikJLyogU3RhcnQgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBEQ01EX0VORElSUUVOCSgxIDw8IDIxKQkvKiBFbmQgSW50ZXJydXB0IEVuYWJsZSAqLwotI2RlZmluZSBEQ01EX0VORElBTgkoMSA8PCAxOCkJLyogRGV2aWNlIEVuZGlhbi1uZXNzLiAqLwotI2RlZmluZSBEQ01EX0JVUlNUOAkoMSA8PCAxNikJLyogOCBieXRlIGJ1cnN0ICovCi0jZGVmaW5lIERDTURfQlVSU1QxNgkoMiA8PCAxNikJLyogMTYgYnl0ZSBidXJzdCAqLwotI2RlZmluZSBEQ01EX0JVUlNUMzIJKDMgPDwgMTYpCS8qIDMyIGJ5dGUgYnVyc3QgKi8KLSNkZWZpbmUgRENNRF9XSURUSDEJKDEgPDwgMTQpCS8qIDEgYnl0ZSB3aWR0aCAqLwotI2RlZmluZSBEQ01EX1dJRFRIMgkoMiA8PCAxNCkJLyogMiBieXRlIHdpZHRoIChIYWxmV29yZCkgKi8KLSNkZWZpbmUgRENNRF9XSURUSDQJKDMgPDwgMTQpCS8qIDQgYnl0ZSB3aWR0aCAoV29yZCkgKi8KLSNkZWZpbmUgRENNRF9MRU5HVEgJMHgwMWZmZgkJLyogbGVuZ3RoIG1hc2sgKG1heCA9IDhLIC0gMSkgKi8KLQotLyoKLSAqIFJlYWwgVGltZSBDbG9jawotICovCi0KLSNkZWZpbmUgUkNOUgkJX19SRUcoMHg0MDkwMDAwMCkgIC8qIFJUQyBDb3VudCBSZWdpc3RlciAqLwotI2RlZmluZSBSVEFSCQlfX1JFRygweDQwOTAwMDA0KSAgLyogUlRDIEFsYXJtIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJUU1IJCV9fUkVHKDB4NDA5MDAwMDgpICAvKiBSVEMgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFJUVFIJCV9fUkVHKDB4NDA5MDAwMEMpICAvKiBSVEMgVGltZXIgVHJpbSBSZWdpc3RlciAqLwotI2RlZmluZSBQSUFSCQlfX1JFRygweDQwOTAwMDM4KSAgLyogUGVyaW9kaWMgSW50ZXJydXB0IEFsYXJtIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgUlRTUl9QSUNFCSgxIDw8IDE1KQkvKiBQZXJpb2RpYyBpbnRlcnJ1cHQgY291bnQgZW5hYmxlICovCi0jZGVmaW5lIFJUU1JfUElBTEUJKDEgPDwgMTQpCS8qIFBlcmlvZGljIGludGVycnVwdCBBbGFybSBlbmFibGUgKi8KLSNkZWZpbmUgUlRTUl9IWkUJKDEgPDwgMykJLyogSFogaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBSVFNSX0FMRQkoMSA8PCAyKQkvKiBSVEMgYWxhcm0gaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBSVFNSX0haCQkoMSA8PCAxKQkvKiBIWiByaXNpbmctZWRnZSBkZXRlY3RlZCAqLwotI2RlZmluZSBSVFNSX0FMCQkoMSA8PCAwKQkvKiBSVEMgYWxhcm0gZGV0ZWN0ZWQgKi8KLQotCi0vKgotICogT1MgVGltZXIgJiBNYXRjaCBSZWdpc3RlcnMKLSAqLwotCi0jZGVmaW5lIE9TTVIwCQlfX1JFRygweDQwQTAwMDAwKSAgLyogKi8KLSNkZWZpbmUgT1NNUjEJCV9fUkVHKDB4NDBBMDAwMDQpICAvKiAqLwotI2RlZmluZSBPU01SMgkJX19SRUcoMHg0MEEwMDAwOCkgIC8qICovCi0jZGVmaW5lIE9TTVIzCQlfX1JFRygweDQwQTAwMDBDKSAgLyogKi8KLSNkZWZpbmUgT1NNUjQJCV9fUkVHKDB4NDBBMDAwODApICAvKiAqLwotI2RlZmluZSBPU0NSCQlfX1JFRygweDQwQTAwMDEwKSAgLyogT1MgVGltZXIgQ291bnRlciBSZWdpc3RlciAqLwotI2RlZmluZSBPU0NSNAkJX19SRUcoMHg0MEEwMDA0MCkgIC8qIE9TIFRpbWVyIENvdW50ZXIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgT01DUjQJCV9fUkVHKDB4NDBBMDAwQzApICAvKiAqLwotI2RlZmluZSBPU1NSCQlfX1JFRygweDQwQTAwMDE0KSAgLyogT1MgVGltZXIgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE9XRVIJCV9fUkVHKDB4NDBBMDAwMTgpICAvKiBPUyBUaW1lciBXYXRjaGRvZyBFbmFibGUgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgT0lFUgkJX19SRUcoMHg0MEEwMDAxQykgIC8qIE9TIFRpbWVyIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KLQotI2RlZmluZSBPU1NSX00zCQkoMSA8PCAzKQkvKiBNYXRjaCBzdGF0dXMgY2hhbm5lbCAzICovCi0jZGVmaW5lIE9TU1JfTTIJCSgxIDw8IDIpCS8qIE1hdGNoIHN0YXR1cyBjaGFubmVsIDIgKi8KLSNkZWZpbmUgT1NTUl9NMQkJKDEgPDwgMSkJLyogTWF0Y2ggc3RhdHVzIGNoYW5uZWwgMSAqLwotI2RlZmluZSBPU1NSX00wCQkoMSA8PCAwKQkvKiBNYXRjaCBzdGF0dXMgY2hhbm5lbCAwICovCi0KLSNkZWZpbmUgT1dFUl9XTUUJKDEgPDwgMCkJLyogV2F0Y2hkb2cgTWF0Y2ggRW5hYmxlICovCi0KLSNkZWZpbmUgT0lFUl9FMwkJKDEgPDwgMykJLyogSW50ZXJydXB0IGVuYWJsZSBjaGFubmVsIDMgKi8KLSNkZWZpbmUgT0lFUl9FMgkJKDEgPDwgMikJLyogSW50ZXJydXB0IGVuYWJsZSBjaGFubmVsIDIgKi8KLSNkZWZpbmUgT0lFUl9FMQkJKDEgPDwgMSkJLyogSW50ZXJydXB0IGVuYWJsZSBjaGFubmVsIDEgKi8KLSNkZWZpbmUgT0lFUl9FMAkJKDEgPDwgMCkJLyogSW50ZXJydXB0IGVuYWJsZSBjaGFubmVsIDAgKi8KLQotCi0vKgotICogSW50ZXJydXB0IENvbnRyb2xsZXIKLSAqLwotCi0jZGVmaW5lIElDSVAJCV9fUkVHKDB4NDBEMDAwMDApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJUlEgUGVuZGluZyBSZWdpc3RlciAqLwotI2RlZmluZSBJQ01SCQlfX1JFRygweDQwRDAwMDA0KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTWFzayBSZWdpc3RlciAqLwotI2RlZmluZSBJQ0xSCQlfX1JFRygweDQwRDAwMDA4KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTGV2ZWwgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgSUNGUAkJX19SRUcoMHg0MEQwMDAwQykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lIElDUFIJCV9fUkVHKDB4NDBEMDAwMTApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyICovCi0jZGVmaW5lIElDQ1IJCV9fUkVHKDB4NDBEMDAwMTQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBDb250cm9sIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgSUNJUDIJCV9fUkVHKDB4NDBEMDAwOUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBJUlEgUGVuZGluZyBSZWdpc3RlciAyICovCi0jZGVmaW5lIElDTVIyCQlfX1JFRygweDQwRDAwMEEwKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTWFzayBSZWdpc3RlciAyICovCi0jZGVmaW5lIElDTFIyCQlfX1JFRygweDQwRDAwMEE0KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgTGV2ZWwgUmVnaXN0ZXIgMiAqLwotI2RlZmluZSBJQ0ZQMgkJX19SRUcoMHg0MEQwMDBBOCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIEZJUSBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KLSNkZWZpbmUgSUNQUjIJCV9fUkVHKDB4NDBEMDAwQUMpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KLQotLyoKLSAqIEdlbmVyYWwgUHVycG9zZSBJL08KLSAqLwotCi0jZGVmaW5lIEdQTFIwCQlfX1JFRygweDQwRTAwMDAwKSAgLyogR1BJTyBQaW4tTGV2ZWwgUmVnaXN0ZXIgR1BJTzwzMTowPiAqLwotI2RlZmluZSBHUExSMQkJX19SRUcoMHg0MEUwMDAwNCkgIC8qIEdQSU8gUGluLUxldmVsIFJlZ2lzdGVyIEdQSU88NjM6MzI+ICovCi0jZGVmaW5lIEdQTFIyCQlfX1JFRygweDQwRTAwMDA4KSAgLyogR1BJTyBQaW4tTGV2ZWwgUmVnaXN0ZXIgR1BJTzw4MDo2ND4gKi8KLQotI2RlZmluZSBHUERSMAkJX19SRUcoMHg0MEUwMDAwQykgIC8qIEdQSU8gUGluIERpcmVjdGlvbiBSZWdpc3RlciBHUElPPDMxOjA+ICovCi0jZGVmaW5lIEdQRFIxCQlfX1JFRygweDQwRTAwMDEwKSAgLyogR1BJTyBQaW4gRGlyZWN0aW9uIFJlZ2lzdGVyIEdQSU88NjM6MzI+ICovCi0jZGVmaW5lIEdQRFIyCQlfX1JFRygweDQwRTAwMDE0KSAgLyogR1BJTyBQaW4gRGlyZWN0aW9uIFJlZ2lzdGVyIEdQSU88ODA6NjQ+ICovCi0KLSNkZWZpbmUgR1BTUjAJCV9fUkVHKDB4NDBFMDAwMTgpICAvKiBHUElPIFBpbiBPdXRwdXQgU2V0IFJlZ2lzdGVyIEdQSU88MzE6MD4gKi8KLSNkZWZpbmUgR1BTUjEJCV9fUkVHKDB4NDBFMDAwMUMpICAvKiBHUElPIFBpbiBPdXRwdXQgU2V0IFJlZ2lzdGVyIEdQSU88NjM6MzI+ICovCi0jZGVmaW5lIEdQU1IyCQlfX1JFRygweDQwRTAwMDIwKSAgLyogR1BJTyBQaW4gT3V0cHV0IFNldCBSZWdpc3RlciBHUElPPDgwOjY0PiAqLwotCi0jZGVmaW5lIEdQQ1IwCQlfX1JFRygweDQwRTAwMDI0KSAgLyogR1BJTyBQaW4gT3V0cHV0IENsZWFyIFJlZ2lzdGVyIEdQSU88MzE6MD4gKi8KLSNkZWZpbmUgR1BDUjEJCV9fUkVHKDB4NDBFMDAwMjgpICAvKiBHUElPIFBpbiBPdXRwdXQgQ2xlYXIgUmVnaXN0ZXIgR1BJTyA8NjM6MzI+ICovCi0jZGVmaW5lIEdQQ1IyCQlfX1JFRygweDQwRTAwMDJDKSAgLyogR1BJTyBQaW4gT3V0cHV0IENsZWFyIFJlZ2lzdGVyIEdQSU8gPDgwOjY0PiAqLwotCi0jZGVmaW5lIEdSRVIwCQlfX1JFRygweDQwRTAwMDMwKSAgLyogR1BJTyBSaXNpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzwzMTowPiAqLwotI2RlZmluZSBHUkVSMQkJX19SRUcoMHg0MEUwMDAzNCkgIC8qIEdQSU8gUmlzaW5nLUVkZ2UgRGV0ZWN0IFJlZ2lzdGVyIEdQSU88NjM6MzI+ICovCi0jZGVmaW5lIEdSRVIyCQlfX1JFRygweDQwRTAwMDM4KSAgLyogR1BJTyBSaXNpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzw4MDo2ND4gKi8KLQotI2RlZmluZSBHRkVSMAkJX19SRUcoMHg0MEUwMDAzQykgIC8qIEdQSU8gRmFsbGluZy1FZGdlIERldGVjdCBSZWdpc3RlciBHUElPPDMxOjA+ICovCi0jZGVmaW5lIEdGRVIxCQlfX1JFRygweDQwRTAwMDQwKSAgLyogR1BJTyBGYWxsaW5nLUVkZ2UgRGV0ZWN0IFJlZ2lzdGVyIEdQSU88NjM6MzI+ICovCi0jZGVmaW5lIEdGRVIyCQlfX1JFRygweDQwRTAwMDQ0KSAgLyogR1BJTyBGYWxsaW5nLUVkZ2UgRGV0ZWN0IFJlZ2lzdGVyIEdQSU88ODA6NjQ+ICovCi0KLSNkZWZpbmUgR0VEUjAJCV9fUkVHKDB4NDBFMDAwNDgpICAvKiBHUElPIEVkZ2UgRGV0ZWN0IFN0YXR1cyBSZWdpc3RlciBHUElPPDMxOjA+ICovCi0jZGVmaW5lIEdFRFIxCQlfX1JFRygweDQwRTAwMDRDKSAgLyogR1BJTyBFZGdlIERldGVjdCBTdGF0dXMgUmVnaXN0ZXIgR1BJTzw2MzozMj4gKi8KLSNkZWZpbmUgR0VEUjIJCV9fUkVHKDB4NDBFMDAwNTApICAvKiBHUElPIEVkZ2UgRGV0ZWN0IFN0YXR1cyBSZWdpc3RlciBHUElPPDgwOjY0PiAqLwotCi0jZGVmaW5lIEdBRlIwX0wJCV9fUkVHKDB4NDBFMDAwNTQpICAvKiBHUElPIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgR1BJTzwxNTowPiAqLwotI2RlZmluZSBHQUZSMF9VCQlfX1JFRygweDQwRTAwMDU4KSAgLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIEdQSU88MzE6MTY+ICovCi0jZGVmaW5lIEdBRlIxX0wJCV9fUkVHKDB4NDBFMDAwNUMpICAvKiBHUElPIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgR1BJTzw0NzozMj4gKi8KLSNkZWZpbmUgR0FGUjFfVQkJX19SRUcoMHg0MEUwMDA2MCkgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDYzOjQ4PiAqLwotI2RlZmluZSBHQUZSMl9MCQlfX1JFRygweDQwRTAwMDY0KSAgLyogR1BJTyBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIEdQSU88Nzk6NjQ+ICovCi0jZGVmaW5lIEdBRlIyX1UJCV9fUkVHKDB4NDBFMDAwNjgpICAvKiBHUElPIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgR1BJTzw5NS04MD4gKi8KLSNkZWZpbmUgR0FGUjNfTAkJX19SRUcoMHg0MEUwMDA2QykgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDExMTo5Nj4gKi8KLSNkZWZpbmUgR0FGUjNfVQkJX19SRUcoMHg0MEUwMDA3MCkgIC8qIEdQSU8gQWx0ZXJuYXRlIEZ1bmN0aW9uIFNlbGVjdCBSZWdpc3RlciBHUElPPDEyNzoxMTI+ICovCi0KLSNkZWZpbmUgR1BMUjMJCV9fUkVHKDB4NDBFMDAxMDApICAvKiBHUElPIFBpbi1MZXZlbCBSZWdpc3RlciBHUElPPDEyNzo5Nj4gKi8KLSNkZWZpbmUgR1BEUjMJCV9fUkVHKDB4NDBFMDAxMEMpICAvKiBHUElPIFBpbiBEaXJlY3Rpb24gUmVnaXN0ZXIgR1BJTzwxMjc6OTY+ICovCi0jZGVmaW5lIEdQU1IzCQlfX1JFRygweDQwRTAwMTE4KSAgLyogR1BJTyBQaW4gT3V0cHV0IFNldCBSZWdpc3RlciBHUElPPDEyNzo5Nj4gKi8KLSNkZWZpbmUgR1BDUjMJCV9fUkVHKDB4NDBFMDAxMjQpICAvKiBHUElPIFBpbiBPdXRwdXQgQ2xlYXIgUmVnaXN0ZXIgR1BJTzwxMjc6OTY+ICovCi0jZGVmaW5lIEdSRVIzCQlfX1JFRygweDQwRTAwMTMwKSAgLyogR1BJTyBSaXNpbmctRWRnZSBEZXRlY3QgUmVnaXN0ZXIgR1BJTzwxMjc6OTY+ICovCi0jZGVmaW5lIEdGRVIzCQlfX1JFRygweDQwRTAwMTNDKSAgLyogR1BJTyBGYWxsaW5nLUVkZ2UgRGV0ZWN0IFJlZ2lzdGVyIEdQSU88MTI3Ojk2PiAqLwotI2RlZmluZSBHRURSMwkJX19SRUcoMHg0MEUwMDE0OCkgIC8qIEdQSU8gRWRnZSBEZXRlY3QgU3RhdHVzIFJlZ2lzdGVyIEdQSU88MTI3Ojk2PiAqLwotCi0vKiBNb3JlIGhhbmR5IG1hY3Jvcy4gIFRoZSBhcmd1bWVudCBpcyBhIGxpdGVyYWwgR1BJTyBudW1iZXIuICovCi0KLSNkZWZpbmUgR1BJT19iaXQoeCkJKDEgPDwgKCh4KSAmIDB4MWYpKQotCi0jZGVmaW5lIF9HUExSKHgpCV9fUkVHMigweDQwRTAwMDAwLCAoKHgpICYgMHg2MCkgPj4gMykKLSNkZWZpbmUgX0dQRFIoeCkJX19SRUcyKDB4NDBFMDAwMEMsICgoeCkgJiAweDYwKSA+PiAzKQotI2RlZmluZSBfR1BTUih4KQlfX1JFRzIoMHg0MEUwMDAxOCwgKCh4KSAmIDB4NjApID4+IDMpCi0jZGVmaW5lIF9HUENSKHgpCV9fUkVHMigweDQwRTAwMDI0LCAoKHgpICYgMHg2MCkgPj4gMykKLSNkZWZpbmUgX0dSRVIoeCkJX19SRUcyKDB4NDBFMDAwMzAsICgoeCkgJiAweDYwKSA+PiAzKQotI2RlZmluZSBfR0ZFUih4KQlfX1JFRzIoMHg0MEUwMDAzQywgKCh4KSAmIDB4NjApID4+IDMpCi0jZGVmaW5lIF9HRURSKHgpCV9fUkVHMigweDQwRTAwMDQ4LCAoKHgpICYgMHg2MCkgPj4gMykKLSNkZWZpbmUgX0dBRlIoeCkJX19SRUcyKDB4NDBFMDAwNTQsICgoeCkgJiAweDcwKSA+PiAyKQotCi0jZGVmaW5lIEdQTFIoeCkgCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dQTFIoeCkgOiAmR1BMUjMpKQotI2RlZmluZSBHUERSKHgpCQkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HUERSKHgpIDogJkdQRFIzKSkKLSNkZWZpbmUgR1BTUih4KQkJKCooKCgoeCkgJiAweDdmKSA8IDk2KSA/ICZfR1BTUih4KSA6ICZHUFNSMykpCi0jZGVmaW5lIEdQQ1IoeCkJCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dQQ1IoeCkgOiAmR1BDUjMpKQotI2RlZmluZSBHUkVSKHgpCQkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HUkVSKHgpIDogJkdSRVIzKSkKLSNkZWZpbmUgR0ZFUih4KQkJKCooKCgoeCkgJiAweDdmKSA8IDk2KSA/ICZfR0ZFUih4KSA6ICZHRkVSMykpCi0jZGVmaW5lIEdFRFIoeCkJCSgqKCgoKHgpICYgMHg3ZikgPCA5NikgPyAmX0dFRFIoeCkgOiAmR0VEUjMpKQotI2RlZmluZSBHQUZSKHgpCQkoKigoKCh4KSAmIDB4N2YpIDwgOTYpID8gJl9HQUZSKHgpIDogXAotCQkJICgoKCh4KSAmIDB4N2YpIDwgMTEyKSA/ICZHQUZSM19MIDogJkdBRlIzX1UpKSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjV4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4YzNiYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyNXguaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19NQUNIX1BYQTI1eF9ICisjZGVmaW5lIF9fTUFDSF9QWEEyNXhfSAorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKworI2VuZGlmIC8qIF9fTUFDSF9QWEEyNXhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI3eC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTI3eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NzZlMTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMjd4LmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfX01BQ0hfUFhBMjd4X0gKKyNkZWZpbmUgX19NQUNIX1BYQTI3eF9ICisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgorCisjZGVmaW5lIEFSQl9DTlRSTAlfX1JFRygweDQ4MDAwMDQ4KSAgLyogQXJiaXRlciBDb250cm9sIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgQVJCX0RNQV9TTFZfUEFSSwkoMTw8MzEpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIERNQSBzbGF2ZSB3aGVuIGlkbGUgKi8KKyNkZWZpbmUgQVJCX0NJX1BBUksJCSgxPDwzMCkJICAgLyogQmUgcGFya2VkIHdpdGggQ2FtZXJhIEludGVyZmFjZSB3aGVuIGlkbGUgKi8KKyNkZWZpbmUgQVJCX0VYX01FTV9QQVJLIAkoMTw8MjkpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIGV4dGVybmFsIE1FTUMgd2hlbiBpZGxlICovCisjZGVmaW5lIEFSQl9JTlRfTUVNX1BBUksJKDE8PDI4KQkgICAvKiBCZSBwYXJrZWQgd2l0aCBpbnRlcm5hbCBNRU1DIHdoZW4gaWRsZSAqLworI2RlZmluZSBBUkJfVVNCX1BBUksJCSgxPDwyNykJICAgLyogQmUgcGFya2VkIHdpdGggVVNCIHdoZW4gaWRsZSAqLworI2RlZmluZSBBUkJfTENEX1BBUksJCSgxPDwyNikJICAgLyogQmUgcGFya2VkIHdpdGggTENEIHdoZW4gaWRsZSAqLworI2RlZmluZSBBUkJfRE1BX1BBUksJCSgxPDwyNSkJICAgLyogQmUgcGFya2VkIHdpdGggRE1BIHdoZW4gaWRsZSAqLworI2RlZmluZSBBUkJfQ09SRV9QQVJLCQkoMTw8MjQpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIGNvcmUgd2hlbiBpZGxlICovCisjZGVmaW5lIEFSQl9MT0NLX0ZMQUcJCSgxPDwyMykJICAgLyogT25seSBMb2NraW5nIG1hc3RlcnMgZ2FpbiBhY2Nlc3MgdG8gdGhlIGJ1cyAqLworI2VuZGlmIC8qIF9fTUFDSF9QWEEyN3hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1ncGlvLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LWdwaW8uaAppbmRleCBkODMzOTNlLi4xMjA5YzQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LWdwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMnh4LWdwaW8uaApAQCAtMyw2ICszLDggQEAKIAogI3dhcm5pbmcgUGxlYXNlIHVzZSBtZnAtcHhhMls1N114LmggaW5zdGVhZCBvZiBweGEyeHgtZ3Bpby5oCiAKKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKwogLyogR1BJTyBhbHRlcm5hdGUgZnVuY3Rpb24gYXNzaWdubWVudHMgKi8KIAogI2RlZmluZSBHUElPMV9SU1QJCTEJLyogcmVzZXQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEyeHgtcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmgKaW5kZXggNzcxMDJkNi4uNGZjZGRkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTJ4eC1yZWdzLmgKQEAgLTE0LDYgKzE0LDE5IEBACiAjaWZuZGVmIF9fUFhBMlhYX1JFR1NfSAogI2RlZmluZSBfX1BYQTJYWF9SRUdTX0gKIAorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworLyoKKyAqIFBYQSBDaGlwIHNlbGVjdHMKKyAqLworCisjZGVmaW5lIFBYQV9DUzBfUEhZUwkweDAwMDAwMDAwCisjZGVmaW5lIFBYQV9DUzFfUEhZUwkweDA0MDAwMDAwCisjZGVmaW5lIFBYQV9DUzJfUEhZUwkweDA4MDAwMDAwCisjZGVmaW5lIFBYQV9DUzNfUEhZUwkweDBDMDAwMDAwCisjZGVmaW5lIFBYQV9DUzRfUEhZUwkweDEwMDAwMDAwCisjZGVmaW5lIFBYQV9DUzVfUEhZUwkweDE0MDAwMDAwCisKIC8qCiAgKiBNZW1vcnkgY29udHJvbGxlcgogICovCkBAIC02OSwyNCArODIsNiBAQAogI2RlZmluZSBNRFJFRlJfSzBSVU4JKDEgPDwgMTMpCS8qIFNEQ0xLMCBSdW4gQ29udHJvbC9TdGF0dXMgKi8KICNkZWZpbmUgTURSRUZSX0UwUElOCSgxIDw8IDEyKQkvKiBTRENLRTAgTGV2ZWwgQ29udHJvbC9TdGF0dXMgKi8KIAotCi0jaWZkZWYgQ09ORklHX1BYQTI3eAotCi0jZGVmaW5lIEFSQl9DTlRSTAlfX1JFRygweDQ4MDAwMDQ4KSAgLyogQXJiaXRlciBDb250cm9sIFJlZ2lzdGVyICovCi0KLSNkZWZpbmUgQVJCX0RNQV9TTFZfUEFSSwkoMTw8MzEpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIERNQSBzbGF2ZSB3aGVuIGlkbGUgKi8KLSNkZWZpbmUgQVJCX0NJX1BBUksJCSgxPDwzMCkJICAgLyogQmUgcGFya2VkIHdpdGggQ2FtZXJhIEludGVyZmFjZSB3aGVuIGlkbGUgKi8KLSNkZWZpbmUgQVJCX0VYX01FTV9QQVJLIAkoMTw8MjkpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIGV4dGVybmFsIE1FTUMgd2hlbiBpZGxlICovCi0jZGVmaW5lIEFSQl9JTlRfTUVNX1BBUksJKDE8PDI4KQkgICAvKiBCZSBwYXJrZWQgd2l0aCBpbnRlcm5hbCBNRU1DIHdoZW4gaWRsZSAqLwotI2RlZmluZSBBUkJfVVNCX1BBUksJCSgxPDwyNykJICAgLyogQmUgcGFya2VkIHdpdGggVVNCIHdoZW4gaWRsZSAqLwotI2RlZmluZSBBUkJfTENEX1BBUksJCSgxPDwyNikJICAgLyogQmUgcGFya2VkIHdpdGggTENEIHdoZW4gaWRsZSAqLwotI2RlZmluZSBBUkJfRE1BX1BBUksJCSgxPDwyNSkJICAgLyogQmUgcGFya2VkIHdpdGggRE1BIHdoZW4gaWRsZSAqLwotI2RlZmluZSBBUkJfQ09SRV9QQVJLCQkoMTw8MjQpCSAgIC8qIEJlIHBhcmtlZCB3aXRoIGNvcmUgd2hlbiBpZGxlICovCi0jZGVmaW5lIEFSQl9MT0NLX0ZMQUcJCSgxPDwyMykJICAgLyogT25seSBMb2NraW5nIG1hc3RlcnMgZ2FpbiBhY2Nlc3MgdG8gdGhlIGJ1cyAqLwotCi0jZW5kaWYKLQotCiAvKgogICogUG93ZXIgTWFuYWdlcgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMzAwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMzAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzMzA3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9weGEzMDAuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19NQUNIX1BYQTMwMF9ICisjZGVmaW5lIF9fTUFDSF9QWEEzMDBfSAorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1weGEzMDAuaD4KKworI2VuZGlmIC8qIF9fTUFDSF9QWEEzMDBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTMyMC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTMyMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYjc4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhMzIwLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9fTUFDSF9QWEEzMjBfSAorI2RlZmluZSBfX01BQ0hfUFhBMzIwX0gKKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMzIwLmg+CisKKyNlbmRpZiAvKiBfX01BQ0hfUFhBMzIwX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTN4eC1yZWdzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaAppbmRleCBiY2YzZmIyLi43ZDFhMDU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhM3h4LXJlZ3MuaApAQCAtMTMsNiArMTMsMTcgQEAKICNpZm5kZWYgX19BU01fQVJDSF9QWEEzWFhfUkVHU19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfUFhBM1hYX1JFR1NfSAogCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisvKgorICogU3RhdGljIENoaXAgU2VsZWN0cworICovCisKKyNkZWZpbmUgUFhBMzAwX0NTMF9QSFlTCQkoMHgwMDAwMDAwMCkJLyogUFhBMzAwL1BYQTMxMCBfb25seV8gKi8KKyNkZWZpbmUgUFhBMzAwX0NTMV9QSFlTCQkoMHgzMDAwMDAwMCkJLyogUFhBMzAwL1BYQTMxMCBfb25seV8gKi8KKyNkZWZpbmUgUFhBM3h4X0NTMl9QSFlTCQkoMHgxMDAwMDAwMCkKKyNkZWZpbmUgUFhBM3h4X0NTM19QSFlTCQkoMHgxNDAwMDAwMCkKKwogLyoKICAqIE9zY2lsbGF0b3IgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoT1NDQykKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTkzMC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3B4YTkzMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NWY3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcHhhOTMwLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9fTUFDSF9QWEE5MzBfSAorI2RlZmluZSBfX01BQ0hfUFhBOTMwX0gKKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTMwLmg+CisKKyNlbmRpZiAvKiBfX01BQ0hfUFhBOTMwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLWludGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDIzZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3MtaW50Yy5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9SRUdTX0lOVENfSAorI2RlZmluZSBfX0FTTV9NQUNIX1JFR1NfSU5UQ19ICisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKy8qCisgKiBJbnRlcnJ1cHQgQ29udHJvbGxlcgorICovCisKKyNkZWZpbmUgSUNJUAkJX19SRUcoMHg0MEQwMDAwMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIElSUSBQZW5kaW5nIFJlZ2lzdGVyICovCisjZGVmaW5lIElDTVIJCV9fUkVHKDB4NDBEMDAwMDQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIElDTFIJCV9fUkVHKDB4NDBEMDAwMDgpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBMZXZlbCBSZWdpc3RlciAqLworI2RlZmluZSBJQ0ZQCQlfX1JFRygweDQwRDAwMDBDKSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgRklRIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNQUgkJX19SRUcoMHg0MEQwMDAxMCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSUNDUgkJX19SRUcoMHg0MEQwMDAxNCkgIC8qIEludGVycnVwdCBDb250cm9sbGVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBJQ0lQMgkJX19SRUcoMHg0MEQwMDA5QykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIElSUSBQZW5kaW5nIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgSUNNUjIJCV9fUkVHKDB4NDBEMDAwQTApICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBNYXNrIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgSUNMUjIJCV9fUkVHKDB4NDBEMDAwQTQpICAvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBMZXZlbCBSZWdpc3RlciAyICovCisjZGVmaW5lIElDRlAyCQlfX1JFRygweDQwRDAwMEE4KSAgLyogSW50ZXJydXB0IENvbnRyb2xsZXIgRklRIFBlbmRpbmcgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBJQ1BSMgkJX19SRUcoMHg0MEQwMDBBQykgIC8qIEludGVycnVwdCBDb250cm9sbGVyIFBlbmRpbmcgUmVnaXN0ZXIgMiAqLworCisjZW5kaWYgLyogX19BU01fTUFDSF9SRUdTX0lOVENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtb3N0LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1vc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2U1Zjg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtb3N0LmgKQEAgLTAsMCArMSwzNCBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX1JFR1NfT1NUX0gKKyNkZWZpbmUgX19BU01fTUFDSF9SRUdTX09TVF9ICisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKy8qCisgKiBPUyBUaW1lciAmIE1hdGNoIFJlZ2lzdGVycworICovCisKKyNkZWZpbmUgT1NNUjAJCV9fUkVHKDB4NDBBMDAwMDApICAvKiAqLworI2RlZmluZSBPU01SMQkJX19SRUcoMHg0MEEwMDAwNCkgIC8qICovCisjZGVmaW5lIE9TTVIyCQlfX1JFRygweDQwQTAwMDA4KSAgLyogKi8KKyNkZWZpbmUgT1NNUjMJCV9fUkVHKDB4NDBBMDAwMEMpICAvKiAqLworI2RlZmluZSBPU01SNAkJX19SRUcoMHg0MEEwMDA4MCkgIC8qICovCisjZGVmaW5lIE9TQ1IJCV9fUkVHKDB4NDBBMDAwMTApICAvKiBPUyBUaW1lciBDb3VudGVyIFJlZ2lzdGVyICovCisjZGVmaW5lIE9TQ1I0CQlfX1JFRygweDQwQTAwMDQwKSAgLyogT1MgVGltZXIgQ291bnRlciBSZWdpc3RlciAqLworI2RlZmluZSBPTUNSNAkJX19SRUcoMHg0MEEwMDBDMCkgIC8qICovCisjZGVmaW5lIE9TU1IJCV9fUkVHKDB4NDBBMDAwMTQpICAvKiBPUyBUaW1lciBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1dFUgkJX19SRUcoMHg0MEEwMDAxOCkgIC8qIE9TIFRpbWVyIFdhdGNoZG9nIEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBPSUVSCQlfX1JFRygweDQwQTAwMDFDKSAgLyogT1MgVGltZXIgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworCisjZGVmaW5lIE9TU1JfTTMJCSgxIDw8IDMpCS8qIE1hdGNoIHN0YXR1cyBjaGFubmVsIDMgKi8KKyNkZWZpbmUgT1NTUl9NMgkJKDEgPDwgMikJLyogTWF0Y2ggc3RhdHVzIGNoYW5uZWwgMiAqLworI2RlZmluZSBPU1NSX00xCQkoMSA8PCAxKQkvKiBNYXRjaCBzdGF0dXMgY2hhbm5lbCAxICovCisjZGVmaW5lIE9TU1JfTTAJCSgxIDw8IDApCS8qIE1hdGNoIHN0YXR1cyBjaGFubmVsIDAgKi8KKworI2RlZmluZSBPV0VSX1dNRQkoMSA8PCAwKQkvKiBXYXRjaGRvZyBNYXRjaCBFbmFibGUgKi8KKworI2RlZmluZSBPSUVSX0UzCQkoMSA8PCAzKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMyAqLworI2RlZmluZSBPSUVSX0UyCQkoMSA8PCAyKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMiAqLworI2RlZmluZSBPSUVSX0UxCQkoMSA8PCAxKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMSAqLworI2RlZmluZSBPSUVSX0UwCQkoMSA8PCAwKQkvKiBJbnRlcnJ1cHQgZW5hYmxlIGNoYW5uZWwgMCAqLworCisjZW5kaWYgLyogX19BU01fTUFDSF9SRUdTX09TVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1ydGMuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9yZWdzLXJ0Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZTRhNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1ydGMuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9fQVNNX01BQ0hfUkVHU19SVENfSAorI2RlZmluZSBfX0FTTV9NQUNIX1JFR1NfUlRDX0gKKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKworLyoKKyAqIFJlYWwgVGltZSBDbG9jaworICovCisKKyNkZWZpbmUgUkNOUgkJX19SRUcoMHg0MDkwMDAwMCkgIC8qIFJUQyBDb3VudCBSZWdpc3RlciAqLworI2RlZmluZSBSVEFSCQlfX1JFRygweDQwOTAwMDA0KSAgLyogUlRDIEFsYXJtIFJlZ2lzdGVyICovCisjZGVmaW5lIFJUU1IJCV9fUkVHKDB4NDA5MDAwMDgpICAvKiBSVEMgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFJUVFIJCV9fUkVHKDB4NDA5MDAwMEMpICAvKiBSVEMgVGltZXIgVHJpbSBSZWdpc3RlciAqLworI2RlZmluZSBQSUFSCQlfX1JFRygweDQwOTAwMDM4KSAgLyogUGVyaW9kaWMgSW50ZXJydXB0IEFsYXJtIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUlRTUl9QSUNFCSgxIDw8IDE1KQkvKiBQZXJpb2RpYyBpbnRlcnJ1cHQgY291bnQgZW5hYmxlICovCisjZGVmaW5lIFJUU1JfUElBTEUJKDEgPDwgMTQpCS8qIFBlcmlvZGljIGludGVycnVwdCBBbGFybSBlbmFibGUgKi8KKyNkZWZpbmUgUlRTUl9IWkUJKDEgPDwgMykJLyogSFogaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVFNSX0FMRQkoMSA8PCAyKQkvKiBSVEMgYWxhcm0gaW50ZXJydXB0IGVuYWJsZSAqLworI2RlZmluZSBSVFNSX0haCQkoMSA8PCAxKQkvKiBIWiByaXNpbmctZWRnZSBkZXRlY3RlZCAqLworI2RlZmluZSBSVFNSX0FMCQkoMSA8PCAwKQkvKiBSVEMgYWxhcm0gZGV0ZWN0ZWQgKi8KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfUkVHU19SVENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3JlZ3Mtc3NwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1zc3AuaAppbmRleCBjZjMxOTg2Li42YTJlZDM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1zc3AuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcmVncy1zc3AuaApAQCAtMzcsNyArMzcsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1eCkKICNkZWZpbmUgU1NDUjBfU0NSCSgweDAwMDBmZjAwKQkvKiBTZXJpYWwgQ2xvY2sgUmF0ZSAobWFzaykgKi8KICNkZWZpbmUgU1NDUjBfU2VyQ2xrRGl2KHgpICgoKCh4KSAtIDIpLzIpIDw8IDgpIC8qIERpdmlzb3IgWzIuLjUxMl0gKi8KLQogI2VsaWYgZGVmaW5lZChDT05GSUdfUFhBMjd4KSB8fCBkZWZpbmVkKENPTkZJR19QWEEzeHgpCiAjZGVmaW5lIFNTQ1IwX1NDUgkoMHgwMDBmZmYwMCkJLyogU2VyaWFsIENsb2NrIFJhdGUgKG1hc2spICovCiAjZGVmaW5lIFNTQ1IwX1NlckNsa0Rpdih4KSAoKCh4KSAtIDEpIDw8IDgpIC8qIERpdmlzb3IgWzEuLjQwOTZdICovCkBAIC01MCw3ICs0OSw3IEBACiAjZGVmaW5lIFNTQ1IwX1RVTQkoMSA8PCAyMykJLyogVHJhbnNtaXQgRklGTyB1bmRlcnJ1biBpbnRlcnJ1cHQgbWFzayAqLwogI2RlZmluZSBTU0NSMF9GUkRDCSgweDA3MDAwMDAwKQkvKiBGcmFtZSByYXRlIGRpdmlkZXIgY29udHJvbCAobWFzaykgKi8KICNkZWZpbmUgU1NDUjBfU2xvdHNQZXJGcm0oeCkgKCgoeCkgLSAxKSA8PCAyNCkJLyogVGltZSBzbG90cyBwZXIgZnJhbWUgWzEuLjhdICovCi0jZGVmaW5lIFNTQ1IwX0FEQwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCisjZGVmaW5lIFNTQ1IwX0FDUwkoMSA8PCAzMCkJLyogQXVkaW8gY2xvY2sgc2VsZWN0ICovCiAjZGVmaW5lIFNTQ1IwX01PRAkoMSA8PCAzMSkJLyogTW9kZSAobm9ybWFsIG9yIG5ldHdvcmspICovCiAjZW5kaWYKIApAQCAtMTA5LDYgKzEwOCwxMSBAQAogI2RlZmluZSBTU1NSX1RJTlQJCSgxIDw8IDE5KQkvKiBSZWNlaXZlciBUaW1lLW91dCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgU1NTUl9QSU5UCQkoMSA8PCAxOCkJLyogUGVyaXBoZXJhbCBUcmFpbGluZyBCeXRlIEludGVycnVwdCAqLwogCisjaWYgZGVmaW5lZChDT05GSUdfUFhBM3h4KQorI2RlZmluZSBTU1BTUF9FRE1ZU1RPUCh4KQkoKHgpIDw8IDI4KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RvcCAqLworI2RlZmluZSBTU1BTUF9FRE1ZU1RSVCh4KQkoKHgpIDw8IDI2KSAgICAgLyogRXh0ZW5kZWQgRHVtbXkgU3RhcnQgKi8KKyNlbmRpZgorCiAjZGVmaW5lIFNTUFNQX0ZTUlQJCSgxIDw8IDI1KQkvKiBGcmFtZSBTeW5jIFJlbGF0aXZlIFRpbWluZyAqLwogI2RlZmluZSBTU1BTUF9ETVlTVE9QKHgpCSgoeCkgPDwgMjMpCS8qIER1bW15IFN0b3AgKi8KICNkZWZpbmUgU1NQU1BfU0ZSTVdEVEgoeCkJKCh4KSA8PCAxNikJLyogU2VyaWFsIEZyYW1lIFdpZHRoICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggMGYzODFlNi4uZDFmY2U4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgogI2luY2x1ZGUgImhhcmR3YXJlLmgiCiAjaW5jbHVkZSAicHhhMnh4LXJlZ3MuaCIKLSNpbmNsdWRlICJweGEtcmVncy5oIgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CkBAIC0yMSw0ICsyMCw0IEBACiB9CiAKIAotdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSk7Cit2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggZjRiMDI5Yy4uNTcwNmNlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0zNSw3ICszNSw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2RlY29tcF9zZXR1cCh2b2lkKQogewotCWlmIChtYWNoaW5lX2lzX2xpdHRsZXRvbigpIHx8IG1hY2hpbmVfaXNfaW50ZWxtb3RlMigpKQorCWlmIChtYWNoaW5lX2lzX2xpdHRsZXRvbigpIHx8IG1hY2hpbmVfaXNfaW50ZWxtb3RlMigpCisJCQl8fCBtYWNoaW5lX2lzX2NzYjcyNigpKQogCQlVQVJUID0gU1RVQVJUOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCmluZGV4IGZhNjljM2EuLmY2ZTAzMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCkBAIC0yMCw3ICsyMCw4IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWludGMuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIApAQCAtNTEsNiArNTIsNzIgQEAKIAkudW5tYXNrCQk9IHB4YV91bm1hc2tfaXJxLAogfTsKIAorLyoKKyAqIEdQSU8gSVJRcyBmb3IgR1BJTyAwIGFuZCAxCisgKi8KK3N0YXRpYyBpbnQgcHhhX3NldF9sb3dfZ3Bpb190eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCWludCBncGlvID0gaXJxIC0gSVJRX0dQSU8wOworCisJaWYgKF9fZ3Bpb19pc19vY2N1cGllZChncGlvKSkgeworCQlwcl9lcnIoIiVzIGZhaWxlZDogR1BJTyBpcyBjb25maWd1cmVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCisJCUdSRVIwIHw9IEdQSU9fYml0KGdwaW8pOworCWVsc2UKKwkJR1JFUjAgJj0gfkdQSU9fYml0KGdwaW8pOworCisJaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCisJCUdGRVIwIHw9IEdQSU9fYml0KGdwaW8pOworCWVsc2UKKwkJR0ZFUjAgJj0gfkdQSU9fYml0KGdwaW8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV9hY2tfbG93X2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlHRURSMCA9ICgxIDw8IChpcnEgLSBJUlFfR1BJTzApKTsKK30KKworc3RhdGljIHZvaWQgcHhhX21hc2tfbG93X2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlJQ01SICY9IH4oMSA8PCAoaXJxIC0gUFhBX0lSUSgwKSkpOworfQorCitzdGF0aWMgdm9pZCBweGFfdW5tYXNrX2xvd19ncGlvKHVuc2lnbmVkIGludCBpcnEpCit7CisJSUNNUiB8PSAxIDw8IChpcnEgLSBQWEFfSVJRKDApKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweGFfbG93X2dwaW9fY2hpcCA9IHsKKwkubmFtZQkJPSAiR1BJTy1sIiwKKwkuYWNrCQk9IHB4YV9hY2tfbG93X2dwaW8sCisJLm1hc2sJCT0gcHhhX21hc2tfbG93X2dwaW8sCisJLnVubWFzawkJPSBweGFfdW5tYXNrX2xvd19ncGlvLAorCS5zZXRfdHlwZQk9IHB4YV9zZXRfbG93X2dwaW9fdHlwZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBweGFfaW5pdF9sb3dfZ3Bpb19pcnEoc2V0X3dha2VfdCBmbikKK3sKKwlpbnQgaXJxOworCisJLyogY2xlYXIgZWRnZSBkZXRlY3Rpb24gb24gR1BJTyAwIGFuZCAxICovCisJR0ZFUjAgJj0gfjB4MzsKKwlHUkVSMCAmPSB+MHgzOworCUdFRFIwID0gMHgzOworCisJZm9yIChpcnEgPSBJUlFfR1BJTzA7IGlycSA8PSBJUlFfR1BJTzE7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZweGFfbG93X2dwaW9fY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlweGFfbG93X2dwaW9fY2hpcC5zZXRfd2FrZSA9IGZuOworfQorCiB2b2lkIF9faW5pdCBweGFfaW5pdF9pcnEoaW50IGlycV9uciwgc2V0X3dha2VfdCBmbikKIHsKIAlpbnQgaXJxOwpAQCAtNzIsNiArMTM5LDcgQEAKIAl9CiAKIAlweGFfaW50ZXJuYWxfaXJxX2NoaXAuc2V0X3dha2UgPSBmbjsKKwlweGFfaW5pdF9sb3dfZ3Bpb19pcnEoZm4pOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWlkcC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1pZHAuYwppbmRleCAxOGIyMGQ0Li44YjljMTcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWlkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtaWRwLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxhc20vbGVkcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvaWRwLmg+CiAKICNpbmNsdWRlICJsZWRzLmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLWx1YmJvY2suYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbHViYm9jay5jCmluZGV4IDFhMjU4MDIuLmUyNmQ1ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbHViYm9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbHViYm9jay5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvbHViYm9jay5oPgogCiAjaW5jbHVkZSAibGVkcy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xlZHMtbWFpbnN0b25lLmMKaW5kZXggOTVlMDZiOC4uZGI0YWY1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbGVkcy1tYWluc3RvbmUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9sZWRzLW1haW5zdG9uZS5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL21haW5zdG9uZS5oPgogCiAjaW5jbHVkZSAibGVkcy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbGl0dGxldG9uLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwppbmRleCAzMWRhN2YzLi5lMTNmNmE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9saXR0bGV0b24uYwpAQCAtMzksOCArMzksNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTMwMC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMzAwLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvc3NwLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9scGQyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jCmluZGV4IGRlM2Y2N2QuLmQ2NDM5NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jCkBAIC0zOCw5ICszOCw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2xwZDI3MC5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKaW5kZXggYmZmNzA0My4uZjA0YzgzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwpAQCAtNDEsMTUgKzQxLDE1IEBACiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2ExMTExLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvbHViYm9jay5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9wbS5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCkBAIC0xMTMsOCArMTEzLDE0IEBACiAJR1BJTzFfR1BJTyB8IFdBS0VVUF9PTl9FREdFX1JJU0UsCiB9OwogCisjZGVmaW5lIExVQl9IRVhMRUQJCV9fTFVCX1JFRyhMVUJCT0NLX0ZQR0FfUEhZUyArIDB4MDEwKQogI2RlZmluZSBMVUJfTUlTQ19XUgkJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgwODApCiAKK3ZvaWQgbHViYm9ja19zZXRfaGV4bGVkKHVpbnQzMl90IHZhbHVlKQoreworCUxVQl9IRVhMRUQgPSB2YWx1ZTsKK30KKwogdm9pZCBsdWJib2NrX3NldF9taXNjX3dyKHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgc2V0KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwppbmRleCAyMWI4MjFlLi5kNDZiMzY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKQEAgLTI1LDE0ICsyNSwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9ncGlvX3ZidXMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9tYWdpY2lhbi5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KQEAgLTY2LDYgKzY2LDExIEBACiAJR1BJTzMxX0kyU19TWU5DLAogCUdQSU8xMTNfSTJTX1NZU0NMSywKIAorCS8qIFNTUCAxICovCisJR1BJTzIzX1NTUDFfU0NMSywKKwlHUElPMjRfU1NQMV9TRlJNLAorCUdQSU8yNV9TU1AxX1RYRCwKKwogCS8qIFNTUCAyICovCiAJR1BJTzE5X1NTUDJfU0NMSywKIAlHUElPMTRfU1NQMl9TRlJNLApAQCAtMTQ4LDIyICsxNTMsMzEgQEAKICAqIEdQSU8gS2V5cwogICovCiAKKyNkZWZpbmUgSU5JVF9LRVkoX2NvZGUsIF9ncGlvLCBfZGVzYykJXAorCXsJCQkJXAorCQkuY29kZSAgID0gS0VZXyMjX2NvZGUsCVwKKwkJLmdwaW8gICA9IF9ncGlvLAlcCisJCS5kZXNjICAgPSBfZGVzYywJXAorCQkudHlwZSAgID0gRVZfS0VZLAlcCisJCS53YWtldXAgPSAxLAkJXAorCX0KKwogc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIG1hZ2ljaWFuX2J1dHRvbl90YWJsZVtdID0gewotCXtLRVlfUE9XRVIsICAgICAgR1BJTzBfTUFHSUNJQU5fS0VZX1BPV0VSLCAgICAgIDAsICJQb3dlciBidXR0b24ifSwKLQl7S0VZX0VTQywgICAgICAgIEdQSU8zN19NQUdJQ0lBTl9LRVlfSEFOR1VQLCAgICAwLCAiSGFuZ3VwIGJ1dHRvbiJ9LAotCXtLRVlfRjEwLCAgICAgICAgR1BJTzM4X01BR0lDSUFOX0tFWV9DT05UQUNUUywgIDAsICJDb250YWN0cyBidXR0b24ifSwKLQl7S0VZX0NBTEVOREFSLCAgIEdQSU85MF9NQUdJQ0lBTl9LRVlfQ0FMRU5EQVIsICAwLCAiQ2FsZW5kYXIgYnV0dG9uIn0sCi0Je0tFWV9DQU1FUkEsICAgICBHUElPOTFfTUFHSUNJQU5fS0VZX0NBTUVSQSwgICAgMCwgIkNhbWVyYSBidXR0b24ifSwKLQl7S0VZX1VQLCAgICAgICAgIEdQSU85M19NQUdJQ0lBTl9LRVlfVVAsICAgICAgICAwLCAiVXAgYnV0dG9uIn0sCi0Je0tFWV9ET1dOLCAgICAgICBHUElPOTRfTUFHSUNJQU5fS0VZX0RPV04sICAgICAgMCwgIkRvd24gYnV0dG9uIn0sCi0Je0tFWV9MRUZULCAgICAgICBHUElPOTVfTUFHSUNJQU5fS0VZX0xFRlQsICAgICAgMCwgIkxlZnQgYnV0dG9uIn0sCi0Je0tFWV9SSUdIVCwgICAgICBHUElPOTZfTUFHSUNJQU5fS0VZX1JJR0hULCAgICAgMCwgIlJpZ2h0IGJ1dHRvbiJ9LAotCXtLRVlfS1BFTlRFUiwgICAgR1BJTzk3X01BR0lDSUFOX0tFWV9FTlRFUiwgICAgIDAsICJBY3Rpb24gYnV0dG9uIn0sCi0Je0tFWV9SRUNPUkQsICAgICBHUElPOThfTUFHSUNJQU5fS0VZX1JFQ09SRCwgICAgMCwgIlJlY29yZCBidXR0b24ifSwKLQl7S0VZX1ZPTFVNRVVQLCAgIEdQSU8xMDBfTUFHSUNJQU5fS0VZX1ZPTF9VUCwgICAwLCAiVm9sdW1lIHVwIn0sCi0Je0tFWV9WT0xVTUVET1dOLCBHUElPMTAxX01BR0lDSUFOX0tFWV9WT0xfRE9XTiwgMCwgIlZvbHVtZSBkb3duIn0sCi0Je0tFWV9QSE9ORSwgICAgICBHUElPMTAyX01BR0lDSUFOX0tFWV9QSE9ORSwgICAgMCwgIlBob25lIGJ1dHRvbiJ9LAotCXtLRVlfUExBWSwgICAgICAgR1BJTzk5X01BR0lDSUFOX0hFQURQSE9ORV9JTiwgIDAsICJIZWFkc2V0IGJ1dHRvbiJ9LAorCUlOSVRfS0VZKFBPV0VSLCAgICAgIEdQSU8wX01BR0lDSUFOX0tFWV9QT1dFUiwgICAgICAiUG93ZXIgYnV0dG9uIiksCisJSU5JVF9LRVkoRVNDLCAgICAgICAgR1BJTzM3X01BR0lDSUFOX0tFWV9IQU5HVVAsICAgICJIYW5ndXAgYnV0dG9uIiksCisJSU5JVF9LRVkoRjEwLCAgICAgICAgR1BJTzM4X01BR0lDSUFOX0tFWV9DT05UQUNUUywgICJDb250YWN0cyBidXR0b24iKSwKKwlJTklUX0tFWShDQUxFTkRBUiwgICBHUElPOTBfTUFHSUNJQU5fS0VZX0NBTEVOREFSLCAgIkNhbGVuZGFyIGJ1dHRvbiIpLAorCUlOSVRfS0VZKENBTUVSQSwgICAgIEdQSU85MV9NQUdJQ0lBTl9LRVlfQ0FNRVJBLCAgICAiQ2FtZXJhIGJ1dHRvbiIpLAorCUlOSVRfS0VZKFVQLCAgICAgICAgIEdQSU85M19NQUdJQ0lBTl9LRVlfVVAsICAgICAgICAiVXAgYnV0dG9uIiksCisJSU5JVF9LRVkoRE9XTiwgICAgICAgR1BJTzk0X01BR0lDSUFOX0tFWV9ET1dOLCAgICAgICJEb3duIGJ1dHRvbiIpLAorCUlOSVRfS0VZKExFRlQsICAgICAgIEdQSU85NV9NQUdJQ0lBTl9LRVlfTEVGVCwgICAgICAiTGVmdCBidXR0b24iKSwKKwlJTklUX0tFWShSSUdIVCwgICAgICBHUElPOTZfTUFHSUNJQU5fS0VZX1JJR0hULCAgICAgIlJpZ2h0IGJ1dHRvbiIpLAorCUlOSVRfS0VZKEtQRU5URVIsICAgIEdQSU85N19NQUdJQ0lBTl9LRVlfRU5URVIsICAgICAiQWN0aW9uIGJ1dHRvbiIpLAorCUlOSVRfS0VZKFJFQ09SRCwgICAgIEdQSU85OF9NQUdJQ0lBTl9LRVlfUkVDT1JELCAgICAiUmVjb3JkIGJ1dHRvbiIpLAorCUlOSVRfS0VZKFZPTFVNRVVQLCAgIEdQSU8xMDBfTUFHSUNJQU5fS0VZX1ZPTF9VUCwgICAiVm9sdW1lIHVwIiksCisJSU5JVF9LRVkoVk9MVU1FRE9XTiwgR1BJTzEwMV9NQUdJQ0lBTl9LRVlfVk9MX0RPV04sICJWb2x1bWUgZG93biIpLAorCUlOSVRfS0VZKFBIT05FLCAgICAgIEdQSU8xMDJfTUFHSUNJQU5fS0VZX1BIT05FLCAgICAiUGhvbmUgYnV0dG9uIiksCisJSU5JVF9LRVkoUExBWSwgICAgICAgR1BJTzk5X01BR0lDSUFOX0hFQURQSE9ORV9JTiwgICJIZWFkc2V0IGJ1dHRvbiIpLAogfTsKIAogc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBncGlvX2tleXNfZGF0YSA9IHsKQEAgLTE4OSw3ICsyMDMsNyBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBlZ3Bpb19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydCA9IFBYQV9DUzNfUEhZUywKLQkJLmVuZCAgID0gUFhBX0NTM19QSFlTICsgMHgyMCwKKwkJLmVuZCAgID0gUFhBX0NTM19QSFlTICsgMHgyMCAtIDEsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtNDIwLDcgKzQzNCw3IEBACiAJfSwKIAl7CiAJCS5uYW1lID0gIm1hZ2ljaWFuOjpwaG9uZV9ibCIsCi0JCS5kZWZhdWx0X3RyaWdnZXIgPSAibm9uZSIsCisJCS5kZWZhdWx0X3RyaWdnZXIgPSAiYmFja2xpZ2h0IiwKIAkJLmdwaW8gPSBHUElPMTAzX01BR0lDSUFOX0xFRF9LUCwKIAl9LAogfTsKQEAgLTQ2OCw4ICs0ODIsNiBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYXNpYzM7Ci0KIHN0YXRpYyBzdHJ1Y3QgcGFzaWMzX2xlZHNfbWFjaGluZm8gcGFzaWMzX2xlZHNfaW5mbyA9IHsKIAkubnVtX2xlZHMgICA9IEFSUkFZX1NJWkUocGFzaWMzX2xlZHMpLAogCS5wb3dlcl9ncGlvID0gRUdQSU9fTUFHSUNJQU5fTEVEX1BPV0VSLApAQCAtNTExLDYgKzUyMywzMSBAQAogfTsKIAogLyoKKyAqIFVTQiAiVHJhbnNjZWl2ZXIiCisgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBncGlvX3ZidXNfcmVzb3VyY2UgPSB7CisJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJLnN0YXJ0ID0gSVJRX01BR0lDSUFOX1ZCVVMsCisJLmVuZCAgID0gSVJRX01BR0lDSUFOX1ZCVVMsCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fdmJ1c19tYWNoX2luZm8gZ3Bpb192YnVzX2luZm8gPSB7CisJLmdwaW9fcHVsbHVwID0gR1BJTzI3X01BR0lDSUFOX1VTQkNfUFVFTiwKKwkuZ3Bpb192YnVzICAgPSBFR1BJT19NQUdJQ0lBTl9DQUJMRV9TVEFURV9VU0IsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBncGlvX3ZidXMgPSB7CisJLm5hbWUgICAgICAgICAgPSAiZ3Bpby12YnVzIiwKKwkuaWQgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzID0gMSwKKwkucmVzb3VyY2UgICAgICA9ICZncGlvX3ZidXNfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZ3Bpb192YnVzX2luZm8sCisJfSwKK307CisKKy8qCiAgKiBFeHRlcm5hbCBwb3dlcgogICovCiAKQEAgLTU4NiwxNSArNjIzLDE3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHBvd2VyX3N1cHBseV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5uYW1lICA9ICJhYyIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSBJUlFfTUFHSUNJQU5fQUMsCi0JCS5lbmQgICA9IElSUV9NQUdJQ0lBTl9BQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSB8CisJCSAgICAgICAgIElPUkVTT1VSQ0VfSVJRX0xPV0VER0UsCisJCS5zdGFydCA9IElSUV9NQUdJQ0lBTl9WQlVTLAorCQkuZW5kICAgPSBJUlFfTUFHSUNJQU5fVkJVUywKIAl9LAogCVsxXSA9IHsKIAkJLm5hbWUgID0gInVzYiIsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCQkuc3RhcnQgPSBJUlFfTUFHSUNJQU5fQUMsCi0JCS5lbmQgICA9IElSUV9NQUdJQ0lBTl9BQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSB8CisJCSAgICAgICAgIElPUkVTT1VSQ0VfSVJRX0xPV0VER0UsCisJCS5zdGFydCA9IElSUV9NQUdJQ0lBTl9WQlVTLAorCQkuZW5kICAgPSBJUlFfTUFHSUNJQU5fVkJVUywKIAl9LAogfTsKIApAQCAtNjg4LDExICs3MjcsOSBAQAogCWdwaW9fc2V0X3ZhbHVlKEVHUElPX01BR0lDSUFOX0ZMQVNIX1ZQUCwgdnBwKTsKIH0KIAotI2RlZmluZSBQWEFfQ1NfU0laRQkJMHgwNDAwMDAwMAotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHN0cmF0YWZsYXNoX3Jlc291cmNlID0gewogCS5zdGFydCA9IFBYQV9DUzBfUEhZUywKLQkuZW5kICAgPSBQWEFfQ1MwX1BIWVMgKyBQWEFfQ1NfU0laRSAtIDEsCisJLmVuZCAgID0gUFhBX0NTMF9QSFlTICsgU1pfNjRNIC0gMSwKIAkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIH07CiAKQEAgLTcyMCw2ICs3NTcsNyBAQAogCSZlZ3BpbywKIAkmYmFja2xpZ2h0LAogCSZwYXNpYzMsCisJJmdwaW9fdmJ1cywKIAkmcG93ZXJfc3VwcGx5LAogCSZzdHJhdGFmbGFzaCwKIAkmbGVkc19ncGlvLApAQCAtNzQzLDYgKzc4MSw3IEBACiAJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPODNfTUFHSUNJQU5fbklSX0VOLCAxKTsKIAkJcHhhX3NldF9maWNwX2luZm8oJm1hZ2ljaWFuX2ZpY3BfaW5mbyk7CiAJfQorCXB4YTI3eF9zZXRfaTJjX3Bvd2VyX2luZm8oTlVMTCk7CiAJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKIAlweGFfc2V0X21jaV9pbmZvKCZtYWdpY2lhbl9tY2lfaW5mbyk7CiAJcHhhX3NldF9vaGNpX2luZm8oJm1hZ2ljaWFuX29oY2lfaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCmluZGV4IDVmMjI0OTYuLmE2Yzg0MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCkBAIC00MSw5ICs0MSw4IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL21haW5zdG9uZS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKaW5kZXggMzM2MjZkZS4uN2ZmYjkxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYwpAQCAtMTgsMTUgKzE4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMnh4Lmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKLSNkZWZpbmUgZ3Bpb190b19iYW5rKGdwaW8pCSgoZ3BpbykgPj4gNSkKLQogI2RlZmluZSBQR1NSKHgpCQlfX1JFRzIoMHg0MEYwMDAyMCwgKHgpIDw8IDIpCiAjZGVmaW5lIF9fR0FGUih1LCB4KQlfX1JFRzIoKHUpID8gMHg0MEUwMDA1OCA6IDB4NDBFMDAwNTQsICh4KSA8PCAzKQogI2RlZmluZSBHQUZSX0woeCkJX19HQUZSKDAsIHgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhM3h4LmMKaW5kZXggZWIxOTdhNi4uN2EyNzBlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEzeHguYwpAQCAtMjAsMTgzICsyMCw5IEBACiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAuaD4KICNpbmNsdWRlIDxtYWNoL21mcC1weGEzeHguaD4KICNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CiAKLS8qIG1mcF9zcGluX2xvY2sgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCBNRlAgcmVnaXN0ZXIgY29uZmlndXJhdGlvbgotICogKG1vc3QgbGlrZWx5IGEgcmVhZC1tb2RpZnktd3JpdGUgb3BlcmF0aW9uKSBpcyBhdG9taWMsIGFuZCB0aGF0Ci0gKiBtZnBfdGFibGVbXSBpcyBjb25zaXN0ZW50Ci0gKi8KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWZwX3NwaW5fbG9jayk7Ci0KLXN0YXRpYyB2b2lkIF9faW9tZW0gKm1mcHJfbW1pb19iYXNlID0gKHZvaWQgX19pb21lbSAqKSZfX1JFRyhNRlBSX0JBU0UpOwotCi1zdHJ1Y3QgcHhhM3h4X21mcF9waW4gewotCXVuc2lnbmVkIGxvbmcJY29uZmlnOwkJLyogLTEgZm9yIG5vdCBjb25maWd1cmVkICovCi0JdW5zaWduZWQgbG9uZwltZnByX29mZjsJLyogTUZQUnh4IFJlZ2lzdGVyIG9mZnNldCAqLwotCXVuc2lnbmVkIGxvbmcJbWZwcl9ydW47CS8qIFJ1bi1Nb2RlIFJlZ2lzdGVyIFZhbHVlICovCi0JdW5zaWduZWQgbG9uZwltZnByX2xwbTsJLyogTG93IFBvd2VyIE1vZGUgUmVnaXN0ZXIgVmFsdWUgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHhhM3h4X21mcF9waW4gbWZwX3RhYmxlW01GUF9QSU5fTUFYXTsKLQotLyogbWFwcGluZyBvZiBNRlBfTFBNXyogZGVmaW5pdGlvbnMgdG8gTUZQUl9MUE1fKiByZWdpc3RlciBiaXRzICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtZnByX2xwbVtdID0gewotCU1GUFJfTFBNX0lOUFVULAotCU1GUFJfTFBNX0RSSVZFX0xPVywKLQlNRlBSX0xQTV9EUklWRV9ISUdILAotCU1GUFJfTFBNX1BVTExfTE9XLAotCU1GUFJfTFBNX1BVTExfSElHSCwKLQlNRlBSX0xQTV9GTE9BVCwKLX07Ci0KLS8qIG1hcHBpbmcgb2YgTUZQX1BVTExfKiBkZWZpbml0aW9ucyB0byBNRlBSX1BVTExfKiByZWdpc3RlciBiaXRzICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtZnByX3B1bGxbXSA9IHsKLQlNRlBSX1BVTExfTk9ORSwKLQlNRlBSX1BVTExfTE9XLAotCU1GUFJfUFVMTF9ISUdILAotCU1GUFJfUFVMTF9CT1RILAotfTsKLQotLyogbWFwcGluZyBvZiBNRlBfTFBNX0VER0VfKiBkZWZpbml0aW9ucyB0byBNRlBSX0VER0VfKiByZWdpc3RlciBiaXRzICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBtZnByX2VkZ2VbXSA9IHsKLQlNRlBSX0VER0VfTk9ORSwKLQlNRlBSX0VER0VfUklTRSwKLQlNRlBSX0VER0VfRkFMTCwKLQlNRlBSX0VER0VfQk9USCwKLX07Ci0KLSNkZWZpbmUgbWZwcl9yZWFkbChvZmYpCQkJXAotCV9fcmF3X3JlYWRsKG1mcHJfbW1pb19iYXNlICsgKG9mZikpCi0KLSNkZWZpbmUgbWZwcl93cml0ZWwob2ZmLCB2YWwpCQlcCi0JX19yYXdfd3JpdGVsKHZhbCwgbWZwcl9tbWlvX2Jhc2UgKyAob2ZmKSkKLQotI2RlZmluZSBtZnBfY29uZmlndXJlZChwKQkoKHApLT5jb25maWcgIT0gLTEpCi0KLS8qCi0gKiBwZXJmb3JtIGEgcmVhZC1iYWNrIG9mIGFueSBNRlBSIHJlZ2lzdGVyIHRvIG1ha2Ugc3VyZSB0aGUKLSAqIHByZXZpb3VzIHdyaXRpbmdzIGFyZSBmaW5pc2hlZAotICovCi0jZGVmaW5lIG1mcHJfc3luYygpCSh2b2lkKV9fcmF3X3JlYWRsKG1mcHJfbW1pb19iYXNlICsgMCkKLQotc3RhdGljIGlubGluZSB2b2lkIF9fbWZwX2NvbmZpZ19ydW4oc3RydWN0IHB4YTN4eF9tZnBfcGluICpwKQotewotCWlmIChtZnBfY29uZmlndXJlZChwKSkKLQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIHAtPm1mcHJfcnVuKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9fbWZwX2NvbmZpZ19scG0oc3RydWN0IHB4YTN4eF9tZnBfcGluICpwKQotewotCWlmIChtZnBfY29uZmlndXJlZChwKSkgewotCQl1bnNpZ25lZCBsb25nIG1mcHJfY2xyID0gKHAtPm1mcHJfcnVuICYgfk1GUFJfRURHRV9CT1RIKSB8IE1GUFJfRURHRV9DTEVBUjsKLQkJaWYgKG1mcHJfY2xyICE9IHAtPm1mcHJfcnVuKQotCQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIG1mcHJfY2xyKTsKLQkJaWYgKHAtPm1mcHJfbHBtICE9IG1mcHJfY2xyKQotCQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIHAtPm1mcHJfbHBtKTsKLQl9Ci19Ci0KLXZvaWQgcHhhM3h4X21mcF9jb25maWcodW5zaWduZWQgbG9uZyAqbWZwX2NmZ3MsIGludCBudW0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyssIG1mcF9jZmdzKyspIHsKLQkJdW5zaWduZWQgbG9uZyB0bXAsIGMgPSAqbWZwX2NmZ3M7Ci0JCXN0cnVjdCBweGEzeHhfbWZwX3BpbiAqcDsKLQkJaW50IHBpbiwgYWYsIGRydiwgbHBtLCBlZGdlLCBwdWxsOwotCi0JCXBpbiA9IE1GUF9QSU4oYyk7Ci0JCUJVR19PTihwaW4gPj0gTUZQX1BJTl9NQVgpOwotCQlwID0gJm1mcF90YWJsZVtwaW5dOwotCi0JCWFmICA9IE1GUF9BRihjKTsKLQkJZHJ2ID0gTUZQX0RTKGMpOwotCQlscG0gPSBNRlBfTFBNX1NUQVRFKGMpOwotCQllZGdlID0gTUZQX0xQTV9FREdFKGMpOwotCQlwdWxsID0gTUZQX1BVTEwoYyk7Ci0KLQkJLyogcnVuLW1vZGUgcHVsbCBzZXR0aW5ncyB3aWxsIGNvbmZsaWN0IHdpdGggTUZQUiBiaXRzIG9mCi0JCSAqIGxvdyBwb3dlciBtb2RlIHN0YXRlLCAgY2FsY3VsYXRlIG1mcHJfcnVuIGFuZCBtZnByX2xwbQotCQkgKiBpbmRpdmlkdWFsbHkgaWYgcHVsbCAhPSBNRlBfUFVMTF9OT05FCi0JCSAqLwotCQl0bXAgPSBNRlBSX0FGX1NFTChhZikgfCBNRlBSX0RSSVZFKGRydik7Ci0KLQkJaWYgKGxpa2VseShwdWxsID09IE1GUF9QVUxMX05PTkUpKSB7Ci0JCQlwLT5tZnByX3J1biA9IHRtcCB8IG1mcHJfbHBtW2xwbV0gfCBtZnByX2VkZ2VbZWRnZV07Ci0JCQlwLT5tZnByX2xwbSA9IHAtPm1mcHJfcnVuOwotCQl9IGVsc2UgewotCQkJcC0+bWZwcl9scG0gPSB0bXAgfCBtZnByX2xwbVtscG1dIHwgbWZwcl9lZGdlW2VkZ2VdOwotCQkJcC0+bWZwcl9ydW4gPSB0bXAgfCBtZnByX3B1bGxbcHVsbF07Ci0JCX0KLQotCQlwLT5jb25maWcgPSBjOyBfX21mcF9jb25maWdfcnVuKHApOwotCX0KLQotCW1mcHJfc3luYygpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKLX0KLQotdW5zaWduZWQgbG9uZyBweGEzeHhfbWZwX3JlYWQoaW50IG1mcCkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbCwgZmxhZ3M7Ci0KLQlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci0JdmFsID0gbWZwcl9yZWFkbChtZnBfdGFibGVbbWZwXS5tZnByX29mZik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotdm9pZCBweGEzeHhfbWZwX3dyaXRlKGludCBtZnAsIHVuc2lnbmVkIGxvbmcgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci0JbWZwcl93cml0ZWwobWZwX3RhYmxlW21mcF0ubWZwcl9vZmYsIHZhbCk7Ci0JbWZwcl9zeW5jKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwotfQotCi12b2lkIF9faW5pdCBweGEzeHhfbWZwX2luaXRfYWRkcihzdHJ1Y3QgcHhhM3h4X21mcF9hZGRyX21hcCAqbWFwKQotewotCXN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwICpwOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBmbGFnczsKLQlpbnQgaTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Ci0KLQlmb3IgKHAgPSBtYXA7IHAtPnN0YXJ0ICE9IE1GUF9QSU5fSU5WQUxJRDsgcCsrKSB7Ci0JCW9mZnNldCA9IHAtPm9mZnNldDsKLQkJaSA9IHAtPnN0YXJ0OwotCi0JCWRvIHsKLQkJCW1mcF90YWJsZVtpXS5tZnByX29mZiA9IG9mZnNldDsKLQkJCW1mcF90YWJsZVtpXS5tZnByX3J1biA9IDA7Ci0JCQltZnBfdGFibGVbaV0ubWZwcl9scG0gPSAwOwotCQkJb2Zmc2V0ICs9IDQ7IGkrKzsKLQkJfSB3aGlsZSAoKGkgPD0gcC0+ZW5kKSAmJiAocC0+ZW5kICE9IC0xKSk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwotfQotCi12b2lkIF9faW5pdCBweGEzeHhfaW5pdF9tZnAodm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1mcF90YWJsZSk7IGkrKykKLQkJbWZwX3RhYmxlW2ldLmNvbmZpZyA9IC0xOwotfQotCiAjaWZkZWYgQ09ORklHX1BNCiAvKgogICogQ29uZmlndXJlIHRoZSBNRlBzIGFwcHJvcHJpYXRlbHkgZm9yIHN1c3BlbmQvcmVzdW1lLgpAQCAtMjA3LDIzICszMywxMyBAQAogICovCiBzdGF0aWMgaW50IHB4YTN4eF9tZnBfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZCwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCWludCBwaW47Ci0KLQlmb3IgKHBpbiA9IDA7IHBpbiA8IEFSUkFZX1NJWkUobWZwX3RhYmxlKTsgcGluKyspIHsKLQkJc3RydWN0IHB4YTN4eF9tZnBfcGluICpwID0gJm1mcF90YWJsZVtwaW5dOwotCQlfX21mcF9jb25maWdfbHBtKHApOwotCX0KKwltZnBfY29uZmlnX2xwbSgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHB4YTN4eF9tZnBfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkKQogewotCWludCBwaW47Ci0KLQlmb3IgKHBpbiA9IDA7IHBpbiA8IEFSUkFZX1NJWkUobWZwX3RhYmxlKTsgcGluKyspIHsKLQkJc3RydWN0IHB4YTN4eF9tZnBfcGluICpwID0gJm1mcF90YWJsZVtwaW5dOwotCQlfX21mcF9jb25maWdfcnVuKHApOwotCX0KKwltZnBfY29uZmlnX3J1bigpOwogCiAJLyogY2xlYXIgUkRIIGJpdCB3aGVuIE1GUCBzZXR0aW5ncyBhcmUgcmVzdG9yZWQKIAkgKgpAQCAtMjMxLDcgKzQ3LDYgQEAKIAkgKiBwcmVzZXJ2ZSB0aGVtIGhlcmUgaW4gY2FzZSB0aGV5IHdpbGwgYmUgcmVmZXJlbmNlZCBsYXRlcgogCSAqLwogCUFTQ1IgJj0gfihBU0NSX1JESCB8IEFTQ1JfRDFTIHwgQVNDUl9EMlMgfCBBU0NSX0QzUyk7Ci0KIAlyZXR1cm4gMDsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKaW5kZXggMmI0MjdlMC4uOTdjOTNhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwpAQCAtMzYsMTMgKzM2LDE1IEBACiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CiAjaW5jbHVkZSA8bGludXgvd205N3h4X2JhdHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9ncGlvX3ZidXMuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtcnRjLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3hfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL21tYy5oPgogI2luY2x1ZGUgPG1hY2gvdWRjLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3gtdWRjLmg+CkBAIC00MTEsMjEgKzQxMyw2IEBACiAvKgogICogVVNCIFVEQwogICovCi1zdGF0aWMgdm9pZCB1ZGNfcG93ZXJfY29tbWFuZChpbnQgY21kKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBQWEEyWFhfVURDX0NNRF9ESVNDT05ORUNUOgotCQlncGlvX3NldF92YWx1ZShHUElPMjJfVVNCX0VOQUJMRSwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgUFhBMlhYX1VEQ19DTURfQ09OTkVDVDoKLQkJZ3Bpb19zZXRfdmFsdWUoR1BJTzIyX1VTQl9FTkFCTEUsIDEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICJ1ZGNfY29udHJvbDogdW5rbm93biBjb21tYW5kICgweCV4KSFcbiIsIGNtZCk7Ci0JCWJyZWFrOwotCX0KLX0KLQogc3RhdGljIGludCBpc191c2JfY29ubmVjdGVkKHZvaWQpCiB7CiAJcmV0dXJuICFncGlvX2dldF92YWx1ZShHUElPMTNfblVTQl9ERVRFQ1QpOwpAQCAtNDMzLDI0ICs0MjAsMTUgQEAKIAogc3RhdGljIHN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbyBtaW9hNzAxX3VkY19pbmZvID0gewogCS51ZGNfaXNfY29ubmVjdGVkID0gaXNfdXNiX2Nvbm5lY3RlZCwKLQkudWRjX2NvbW1hbmQJICA9IHVkY19wb3dlcl9jb21tYW5kLAorCS5ncGlvX3B1bGx1cAkgID0gR1BJTzIyX1VTQl9FTkFCTEUsCiB9OwogCi1zdHJ1Y3QgZ3Bpb19yZXNzIHVkY19ncGlvc1tdID0gewotCU1JT19HUElPX09VVChHUElPMjJfVVNCX0VOQUJMRSwgMCwgIlVTQiBWYnVzIGVuYWJsZSIpCitzdHJ1Y3QgZ3Bpb192YnVzX21hY2hfaW5mbyBncGlvX3ZidXNfZGF0YSA9IHsKKwkuZ3Bpb192YnVzID0gR1BJTzEzX25VU0JfREVURUNULAorCS5ncGlvX3ZidXNfaW52ZXJ0ZWQgPSAxLAorCS5ncGlvX3B1bGx1cCA9IC0xLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgdWRjX2luaXQodm9pZCkKLXsKLQlweGFfc2V0X3VkY19pbmZvKCZtaW9hNzAxX3VkY19pbmZvKTsKLQlyZXR1cm4gbWlvX2dwaW9fcmVxdWVzdChBUlJBWV9BTkRfU0laRSh1ZGNfZ3Bpb3MpKTsKLX0KLQotc3RhdGljIHZvaWQgdWRjX2V4aXQodm9pZCkKLXsKLQltaW9fZ3Bpb19mcmVlKEFSUkFZX0FORF9TSVpFKHVkY19ncGlvcykpOwotfQotCiAvKgogICogU0RJTy9NTUMgQ2FyZCBjb250cm9sbGVyCiAgKi8KQEAgLTc4OSw2ICs3NjcsNyBAQAogTUlPX1BBUkVOVF9ERVYobWlvX3dtOTcxM19jb2RlYywgICJ3bTk3MTMtY29kZWMiLCAgICZweGEyeHhfYWM5Ny5kZXYsIE5VTEwpCiBNSU9fU0lNUExFX0RFVihtaW9hNzAxX3NvdW5kLAkgICJtaW9hNzAxLXdtOTcxMyIsIE5VTEwpCiBNSU9fU0lNUExFX0RFVihtaW9hNzAxX2JvYXJkLAkgICJtaW9hNzAxLWJvYXJkIiwgIE5VTEwpCitNSU9fU0lNUExFX0RFVihncGlvX3ZidXMsCSAgImdwaW8tdmJ1cyIsICAgICAgJmdwaW9fdmJ1c19kYXRhKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtaW9hNzAxX2dwaW9fa2V5cywKQEAgLTgwMCw3ICs3NzksOCBAQAogCSZtaW9hNzAxX3NvdW5kLAogCSZwb3dlcl9kZXYsCiAJJnN0cmF0YWZsYXNoLAotCSZtaW9hNzAxX2JvYXJkCisJJmdwaW9fdmJ1cywKKwkmbWlvYTcwMV9ib2FyZCwKIH07CiAKIHN0YXRpYyB2b2lkIG1pb2E3MDFfbWFjaGluZV9leGl0KHZvaWQpOwpAQCAtODA4LDEzICs3ODgsMTMgQEAKIHN0YXRpYyB2b2lkIG1pb2E3MDFfcG93ZXJvZmYodm9pZCkKIHsKIAltaW9hNzAxX21hY2hpbmVfZXhpdCgpOwotCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ3MnKTsKKwlhcm1fbWFjaGluZV9yZXN0YXJ0KCdzJywgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIG1pb2E3MDFfcmVzdGFydChjaGFyIGMpCitzdGF0aWMgdm9pZCBtaW9hNzAxX3Jlc3RhcnQoY2hhciBjLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJbWlvYTcwMV9tYWNoaW5lX2V4aXQoKTsKLQlhcm1fbWFjaGluZV9yZXN0YXJ0KCdzJyk7CisJYXJtX21hY2hpbmVfcmVzdGFydCgncycsIGNtZCk7CiB9CiAKIHN0cnVjdCBncGlvX3Jlc3MgZ2xvYmFsX2dwaW9zW10gPSB7CkBAIC04MzcsNyArODE3LDcgQEAKIAlweGFfc2V0X21jaV9pbmZvKCZtaW9hNzAxX21jaV9pbmZvKTsKIAlweGFfc2V0X2tleXBhZF9pbmZvKCZtaW9hNzAxX2tleXBhZF9pbmZvKTsKIAl3bTk3eHhfYmF0X3NldF9wZGF0YSgmbWlvYTcwMV9iYXR0ZXJ5X2RhdGEpOwotCXVkY19pbml0KCk7CisJcHhhX3NldF91ZGNfaW5mbygmbWlvYTcwMV91ZGNfaW5mbyk7CiAJcG1fcG93ZXJfb2ZmID0gbWlvYTcwMV9wb3dlcm9mZjsKIAlhcm1fcG1fcmVzdGFydCA9IG1pb2E3MDFfcmVzdGFydDsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKQEAgLTg1MCw3ICs4MzAsNiBAQAogCiBzdGF0aWMgdm9pZCBtaW9hNzAxX21hY2hpbmVfZXhpdCh2b2lkKQogewotCXVkY19leGl0KCk7CiAJYm9vdHN0cmFwX2V4aXQoKTsKIAlnc21fZXhpdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbXA5MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21wOTAwLmMKaW5kZXggOGE3MzgxNC4uYTY1NzEzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbXA5MDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tcDkwMC5jCkBAIC0xOSwxMCArMTksMTAgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9pc3AxMTZ4Lmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyNXguaD4KICNpbmNsdWRlICJnZW5lcmljLmgiCiAKIHN0YXRpYyB2b2lkIGlzcDExNnhfcGZtX2RlbGF5KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGRlbGF5KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTg3NDc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKQEAgLTAsMCArMSw1NjUgQEAKKy8qCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgUGFsbSBMaWZlRHJpdmUKKyAqCisgKiBBdXRob3I6ICAgICBNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIHdvcmsgb2Y6CisgKgkJQWxleCBPc2Jvcm5lIDxhdG9AbWVzaHkub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogKGZpbmQgbW9yZSBpbmZvIGF0IHd3dy5oYWNrbmRldi5jb20pCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvcGRhX3Bvd2VyLmg+CisjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC93bTk3eHhfYmF0dC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgorI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3BhbG1sZC5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjd4X2tleXBhZC5oPgorI2luY2x1ZGUgPG1hY2gvcGFsbWFzb2MuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBpbiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFsbWxkX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIE1NQyAqLworCUdQSU8zMl9NTUNfQ0xLLAorCUdQSU85Ml9NTUNfREFUXzAsCisJR1BJTzEwOV9NTUNfREFUXzEsCisJR1BJTzExMF9NTUNfREFUXzIsCisJR1BJTzExMV9NTUNfREFUXzMsCisJR1BJTzExMl9NTUNfQ01ELAorCUdQSU8xNF9HUElPLAkvKiBTRCBkZXRlY3QgKi8KKwlHUElPMTE0X0dQSU8sCS8qIFNEIHBvd2VyICovCisJR1BJTzExNl9HUElPLAkvKiBTRCByL28gc3dpdGNoICovCisKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCisKKwkvKiBJckRBICovCisJR1BJTzEwOF9HUElPLAkvKiBpciBkaXNhYmxlICovCisJR1BJTzQ2X0ZJQ1BfUlhELAorCUdQSU80N19GSUNQX1RYRCwKKworCS8qIE1BVFJJWCBLRVlQQUQgKi8KKwlHUElPMTAwX0tQX01LSU5fMCwKKwlHUElPMTAxX0tQX01LSU5fMSwKKwlHUElPMTAyX0tQX01LSU5fMiwKKwlHUElPOTdfS1BfTUtJTl8zLAorCUdQSU8xMDNfS1BfTUtPVVRfMCwKKwlHUElPMTA0X0tQX01LT1VUXzEsCisJR1BJTzEwNV9LUF9NS09VVF8yLAorCisJLyogTENEICovCisJR1BJTzU4X0xDRF9MRERfMCwKKwlHUElPNTlfTENEX0xERF8xLAorCUdQSU82MF9MQ0RfTEREXzIsCisJR1BJTzYxX0xDRF9MRERfMywKKwlHUElPNjJfTENEX0xERF80LAorCUdQSU82M19MQ0RfTEREXzUsCisJR1BJTzY0X0xDRF9MRERfNiwKKwlHUElPNjVfTENEX0xERF83LAorCUdQSU82Nl9MQ0RfTEREXzgsCisJR1BJTzY3X0xDRF9MRERfOSwKKwlHUElPNjhfTENEX0xERF8xMCwKKwlHUElPNjlfTENEX0xERF8xMSwKKwlHUElPNzBfTENEX0xERF8xMiwKKwlHUElPNzFfTENEX0xERF8xMywKKwlHUElPNzJfTENEX0xERF8xNCwKKwlHUElPNzNfTENEX0xERF8xNSwKKwlHUElPNzRfTENEX0ZDTEssCisJR1BJTzc1X0xDRF9MQ0xLLAorCUdQSU83Nl9MQ0RfUENMSywKKwlHUElPNzdfTENEX0JJQVMsCisKKwkvKiBQV00gKi8KKwlHUElPMTZfUFdNMF9PVVQsCisKKwkvKiBHUElPIEtFWVMgKi8KKwlHUElPMTBfR1BJTywJLyogaG90c3luYyBidXR0b24gKi8KKwlHUElPMTJfR1BJTywJLyogcG93ZXIgc3dpdGNoICovCisJR1BJTzE1X0dQSU8sCS8qIGxvY2sgc3dpdGNoICovCisKKwkvKiBMRURzICovCisJR1BJTzUyX0dQSU8sCS8qIGdyZWVuIGxlZCAqLworCUdQSU85NF9HUElPLAkvKiBvcmFuZ2UgbGVkICovCisKKwkvKiBQQ01DSUEgKi8KKwlHUElPNDhfblBPRSwKKwlHUElPNDlfblBXRSwKKwlHUElPNTBfblBJT1IsCisJR1BJTzUxX25QSU9XLAorCUdQSU84NV9uUENFXzEsCisJR1BJTzU0X25QQ0VfMiwKKwlHUElPNzlfUFNLVFNFTCwKKwlHUElPNTVfblBSRUcsCisJR1BJTzU2X25QV0FJVCwKKwlHUElPNTdfbklPSVMxNiwKKwlHUElPMzZfR1BJTywJLyogd2lmaSBwb3dlciAqLworCUdQSU8zOF9HUElPLAkvKiB3aWZpIHJlYWR5ICovCisJR1BJTzgxX0dQSU8sCS8qIHdpZmkgcmVzZXQgKi8KKworCS8qIEhERCAqLworCUdQSU85NV9HUElPLAkvKiBIREQgaXJxICovCisJR1BJTzExNV9HUElPLAkvKiBIREQgcG93ZXIgKi8KKworCS8qIE1JU0MgKi8KKwlHUElPMTNfR1BJTywJLyogZWFycGhvbmUgZGV0ZWN0ICovCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTRC9NTUMgY2FyZCBjb250cm9sbGVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwYWxtbGRfbWNpX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IHBhbG1sZF9kZXRlY3RfaW50LAorCQkJCXZvaWQgKmRhdGEpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBTZXR1cCBhbiBpbnRlcnJ1cHQgZm9yIGRldGVjdGluZyBjYXJkIGluc2VydC9yZW1vdmUgZXZlbnRzICovCisJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OLCAiU0QgSVJRIik7CisJaWYgKGVycikKKwkJZ290byBlcnI7CisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pOworCWlmIChlcnIpCisJCWdvdG8gZXJyMjsKKwllcnIgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTiksCisJCQlwYWxtbGRfZGV0ZWN0X2ludCwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSB8CisJCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkcsCisJCQkiU0QvTU1DIGNhcmQgZGV0ZWN0IiwgZGF0YSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVxdWVzdCBTRC9NTUMgY2FyZCBkZXRlY3QgSVJRXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJZ290byBlcnIyOworCX0KKworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9TRF9QT1dFUiwgIlNEX1BPV0VSIik7CisJaWYgKGVycikKKwkJZ290byBlcnIzOworCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1MRF9TRF9QT1dFUiwgMCk7CisJaWYgKGVycikKKwkJZ290byBlcnI0OworCisJZXJyID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1NEX1JFQURPTkxZLCAiU0RfUkVBRE9OTFkiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjQ7CisJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkpOworCWlmIChlcnIpCisJCWdvdG8gZXJyNTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogaXJxIHJlZ2lzdGVyZWRcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworCitlcnI1OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9SRUFET05MWSk7CitlcnI0OgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9QT1dFUik7CitlcnIzOgorCWZyZWVfaXJxKGdwaW9fdG9faXJxKEdQSU9fTlJfUEFMTUxEX1NEX0RFVEVDVF9OKSwgZGF0YSk7CitlcnIyOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9ERVRFQ1RfTik7CitlcnI6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcGFsbWxkX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkpOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9TRF9QT1dFUik7CisJZnJlZV9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pLCBkYXRhKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfU0RfREVURUNUX04pOworfQorCitzdGF0aWMgdm9pZCBwYWxtbGRfbWNpX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHZkZCkKK3sKKwlzdHJ1Y3QgcHhhbWNpX3BsYXRmb3JtX2RhdGEgKnBfZCA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1MRF9TRF9QT1dFUiwgcF9kLT5vY3JfbWFzayAmICgxIDw8IHZkZCkpOworfQorCitzdGF0aWMgaW50IHBhbG1sZF9tY2lfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoR1BJT19OUl9QQUxNTERfU0RfUkVBRE9OTFkpOworfQorCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIHBhbG1sZF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkub2NyX21hc2sJPSBNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkuc2V0cG93ZXIJPSBwYWxtbGRfbWNpX3Bvd2VyLAorCS5nZXRfcm8JCT0gcGFsbWxkX21jaV9nZXRfcm8sCisJLmluaXQgCQk9IHBhbG1sZF9tY2lfaW5pdCwKKwkuZXhpdAkJPSBwYWxtbGRfbWNpX2V4aXQsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBHUElPIGtleWJvYXJkCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGludCBwYWxtbGRfbWF0cml4X2tleXNbXSA9IHsKKwlLRVkoMCwgMSwgS0VZX0YyKSwKKwlLRVkoMCwgMiwgS0VZX1VQKSwKKworCUtFWSgxLCAwLCBLRVlfRjMpLAorCUtFWSgxLCAxLCBLRVlfRjQpLAorCUtFWSgxLCAyLCBLRVlfUklHSFQpLAorCisJS0VZKDIsIDAsIEtFWV9GMSksCisJS0VZKDIsIDEsIEtFWV9GNSksCisJS0VZKDIsIDIsIEtFWV9ET1dOKSwKKworCUtFWSgzLCAwLCBLRVlfRjYpLAorCUtFWSgzLCAxLCBLRVlfRU5URVIpLAorCUtFWSgzLCAyLCBLRVlfTEVGVCksCit9OworCitzdGF0aWMgc3RydWN0IHB4YTI3eF9rZXlwYWRfcGxhdGZvcm1fZGF0YSBwYWxtbGRfa2V5cGFkX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hdHJpeF9rZXlfcm93cwk9IDQsCisJLm1hdHJpeF9rZXlfY29scwk9IDMsCisJLm1hdHJpeF9rZXlfbWFwCQk9IHBhbG1sZF9tYXRyaXhfa2V5cywKKwkubWF0cml4X2tleV9tYXBfc2l6ZQk9IEFSUkFZX1NJWkUocGFsbWxkX21hdHJpeF9rZXlzKSwKKworCS5kZWJvdW5jZV9pbnRlcnZhbAk9IDMwLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBrZXlzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIHBhbG1sZF9weGFfYnV0dG9uc1tdID0geworCXtLRVlfRjgsIEdQSU9fTlJfUEFMTUxEX0hPVFNZTkNfQlVUVE9OX04sIDEsICJIb3RTeW5jIEJ1dHRvbiIgfSwKKwl7S0VZX0Y5LCBHUElPX05SX1BBTE1MRF9MT0NLX1NXSVRDSCwgMCwgIkxvY2sgU3dpdGNoIiB9LAorCXtLRVlfUE9XRVIsIEdQSU9fTlJfUEFMTUxEX1BPV0VSX1NXSVRDSCwgMCwgIlBvd2VyIFN3aXRjaCIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEgcGFsbWxkX3B4YV9rZXlzX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBwYWxtbGRfcHhhX2J1dHRvbnMsCisJLm5idXR0b25zCT0gQVJSQVlfU0laRShwYWxtbGRfcHhhX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbWxkX3B4YV9rZXlzID0geworCS5uYW1lCT0gImdwaW8ta2V5cyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGFsbWxkX3B4YV9rZXlzX2RhdGEsCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJhY2tsaWdodAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcGFsbWxkX2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX0JMX1BPV0VSLCAiQkwgUE9XRVIiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNTERfQkxfUE9XRVIsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNTERfTENEX1BPV0VSLCAiTENEIFBPV0VSIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1MRF9MQ0RfUE9XRVIsIDApOworCWlmIChyZXQpCisJCWdvdG8gZXJyMzsKKworCXJldHVybiAwOworZXJyMzoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfTENEX1BPV0VSKTsKK2VycjI6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX0JMX1BPV0VSKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBhbG1sZF9iYWNrbGlnaHRfbm90aWZ5KGludCBicmlnaHRuZXNzKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX0JMX1BPV0VSLCBicmlnaHRuZXNzKTsKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1MRF9MQ0RfUE9XRVIsIGJyaWdodG5lc3MpOworCXJldHVybiBicmlnaHRuZXNzOworfQorCitzdGF0aWMgdm9pZCBwYWxtbGRfYmFja2xpZ2h0X2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9CTF9QT1dFUik7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTUxEX0xDRF9QT1dFUik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHBhbG1sZF9iYWNrbGlnaHRfZGF0YSA9IHsKKwkucHdtX2lkCQk9IDAsCisJLm1heF9icmlnaHRuZXNzCT0gUEFMTUxEX01BWF9JTlRFTlNJVFksCisJLmRmdF9icmlnaHRuZXNzCT0gUEFMTUxEX01BWF9JTlRFTlNJVFksCisJLnB3bV9wZXJpb2RfbnMJPSBQQUxNTERfUEVSSU9EX05TLAorCS5pbml0CQk9IHBhbG1sZF9iYWNrbGlnaHRfaW5pdCwKKwkubm90aWZ5CQk9IHBhbG1sZF9iYWNrbGlnaHRfbm90aWZ5LAorCS5leGl0CQk9IHBhbG1sZF9iYWNrbGlnaHRfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG1sZF9iYWNrbGlnaHQgPSB7CisJLm5hbWUJPSAicHdtLWJhY2tsaWdodCIsCisJLmRldgk9IHsKKwkJLnBhcmVudAkJPSAmcHhhMjd4X2RldmljZV9wd20wLmRldiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbWxkX2JhY2tsaWdodF9kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJckRBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBwYWxtbGRfaXJkYV9zdGFydHVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgZXJyOworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFLCAiSVIgRElTQUJMRSIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFLCAxKTsKKwlpZiAoZXJyKQorCQlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfSVJfRElTQUJMRSk7CitlcnI6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcGFsbWxkX2lyZGFfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9JUl9ESVNBQkxFKTsKK30KKworc3RhdGljIHZvaWQgcGFsbWxkX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBtb2RlKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX0lSX0RJU0FCTEUsIG1vZGUgJiBJUl9PRkYpOworCXB4YTJ4eF90cmFuc2NlaXZlcl9tb2RlKGRldiwgbW9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmljcF9wbGF0Zm9ybV9kYXRhIHBhbG1sZF9maWNwX3BsYXRmb3JtX2RhdGEgPSB7CisJLnN0YXJ0dXAJCT0gcGFsbWxkX2lyZGFfc3RhcnR1cCwKKwkuc2h1dGRvd24JCT0gcGFsbWxkX2lyZGFfc2h1dGRvd24sCisJLnRyYW5zY2VpdmVyX2NhcAk9IElSX1NJUk1PREUgfCBJUl9GSVJNT0RFIHwgSVJfT0ZGLAorCS50cmFuc2NlaXZlcl9tb2RlCT0gcGFsbWxkX2lyZGFfdHJhbnNjZWl2ZXJfbW9kZSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExFRHMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW10gPSB7Cit7CisJLm5hbWUJCQk9ICJwYWxtbGQ6Z3JlZW46bGVkIiwKKwkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCS5ncGlvCQkJPSBHUElPX05SX1BBTE1MRF9MRURfR1JFRU4sCit9LCB7CisJLm5hbWUJCQk9ICJwYWxtbGQ6YW1iZXI6bGVkIiwKKwkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCS5ncGlvCQkJPSBHUElPX05SX1BBTE1MRF9MRURfQU1CRVIsCit9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGdwaW9fbGVkX2luZm8gPSB7CisJLmxlZHMJCT0gZ3Bpb19sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoZ3Bpb19sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG1sZF9sZWRzID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ3Bpb19sZWRfaW5mbywKKwl9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBQb3dlciBzdXBwbHkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHBvd2VyX3N1cHBseV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1BPV0VSX0RFVEVDVCwgIkNBQkxFX1NUQVRFX0FDIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIxOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTUxEX1BPV0VSX0RFVEVDVCk7CisJaWYgKHJldCkKKwkJZ290byBlcnIyOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTUxEX1VTQl9ERVRFQ1RfTiwgIkNBQkxFX1NUQVRFX1VTQiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX05SX1BBTE1MRF9VU0JfREVURUNUX04pOworCWlmIChyZXQpCisJCWdvdG8gZXJyMzsKKworCXJldHVybiAwOworCitlcnIzOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1MRF9VU0JfREVURUNUX04pOworZXJyMjoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfUE9XRVJfREVURUNUKTsKK2VycjE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYWxtbGRfaXNfYWNfb25saW5lKHZvaWQpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX1BPV0VSX0RFVEVDVCk7Cit9CisKK3N0YXRpYyBpbnQgcGFsbWxkX2lzX3VzYl9vbmxpbmUodm9pZCkKK3sKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTUxEX1VTQl9ERVRFQ1RfTik7Cit9CisKK3N0YXRpYyB2b2lkIHBvd2VyX3N1cHBseV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfVVNCX0RFVEVDVF9OKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNTERfUE9XRVJfREVURUNUKTsKK30KKworc3RhdGljIGNoYXIgKnBhbG1sZF9zdXBwbGljYW50c1tdID0geworCSJtYWluLWJhdHRlcnkiLAorfTsKKworc3RhdGljIHN0cnVjdCBwZGFfcG93ZXJfcGRhdGEgcG93ZXJfc3VwcGx5X2luZm8gPSB7CisJLmluaXQgICAgICAgICAgICA9IHBvd2VyX3N1cHBseV9pbml0LAorCS5pc19hY19vbmxpbmUgICAgPSBwYWxtbGRfaXNfYWNfb25saW5lLAorCS5pc191c2Jfb25saW5lICAgPSBwYWxtbGRfaXNfdXNiX29ubGluZSwKKwkuZXhpdCAgICAgICAgICAgID0gcG93ZXJfc3VwcGx5X2V4aXQsCisJLnN1cHBsaWVkX3RvICAgICA9IHBhbG1sZF9zdXBwbGljYW50cywKKwkubnVtX3N1cHBsaWNhbnRzID0gQVJSQVlfU0laRShwYWxtbGRfc3VwcGxpY2FudHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcG93ZXJfc3VwcGx5ID0geworCS5uYW1lID0gInBkYS1wb3dlciIsCisJLmlkICAgPSAtMSwKKwkuZGV2ICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcG93ZXJfc3VwcGx5X2luZm8sCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdNOTd4eCBiYXR0ZXJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvIHdtOTd4eF9iYXR0X3BkYXRhID0geworCS5iYXR0X2F1eAk9IFdNOTdYWF9BVVhfSUQzLAorCS50ZW1wX2F1eAk9IFdNOTdYWF9BVVhfSUQyLAorCS5jaGFyZ2VfZ3Bpbwk9IC0xLAorCS5tYXhfdm9sdGFnZQk9IFBBTE1MRF9CQVRfTUFYX1ZPTFRBR0UsCisJLm1pbl92b2x0YWdlCT0gUEFMTUxEX0JBVF9NSU5fVk9MVEFHRSwKKwkuYmF0dF9tdWx0CT0gMTAwMCwKKwkuYmF0dF9kaXYJPSA0MTQsCisJLnRlbXBfbXVsdAk9IDEsCisJLnRlbXBfZGl2CT0gMSwKKwkuYmF0dF90ZWNoCT0gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElQTywKKwkuYmF0dF9uYW1lCT0gIm1haW4tYmF0dCIsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhU29DIGF1ZGlvCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBwYWxtMjd4X2Fzb2NfaW5mbyBwYWxtMjd4X2Fzb2NfcGRhdGEgPSB7CisJLmphY2tfZ3Bpbwk9IEdQSU9fTlJfUEFMTUxEX0VBUlBIT05FX0RFVEVDVCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZyYW1lYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gcGFsbWxkX2xjZF9tb2Rlc1tdID0geworeworCS5waXhjbG9jawk9IDU3NjkyLAorCS54cmVzCQk9IDMyMCwKKwkueXJlcwkJPSA0ODAsCisJLmJwcAkJPSAxNiwKKworCS5sZWZ0X21hcmdpbgk9IDMyLAorCS5yaWdodF9tYXJnaW4JPSAxLAorCS51cHBlcl9tYXJnaW4JPSA3LAorCS5sb3dlcl9tYXJnaW4JPSAxLAorCisJLmhzeW5jX2xlbgk9IDQsCisJLnZzeW5jX2xlbgk9IDEsCit9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gcGFsbWxkX2xjZF9zY3JlZW4gPSB7CisJLm1vZGVzCQk9IHBhbG1sZF9sY2RfbW9kZXMsCisJLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUocGFsbWxkX2xjZF9tb2RlcyksCisJLmxjZF9jb25uCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY2hpbmUgaW5pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKKwkmcGFsbWxkX3B4YV9rZXlzLAorI2VuZGlmCisJJnBhbG1sZF9iYWNrbGlnaHQsCisJJnBhbG1sZF9sZWRzLAorCSZwb3dlcl9zdXBwbHksCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHBhbG1sZF9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKK3sKKwkudmlydHVhbAk9IFBBTE1MRF9JREVfVklSVCwKKwkucGZuCQk9IF9fcGh5c190b19wZm4oUEFMTUxEX0lERV9QSFlTKSwKKwkubGVuZ3RoCQk9IFBBTE1MRF9JREVfU0laRSwKKwkudHlwZQkJPSBNVF9ERVZJQ0UKK30sCit7CisJLnZpcnR1YWwJPSBQQUxNTERfVVNCX1ZJUlQsCisJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFBBTE1MRF9VU0JfUEhZUyksCisJLmxlbmd0aAkJPSBQQUxNTERfVVNCX1NJWkUsCisJLnR5cGUJCT0gTVRfREVWSUNFCit9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHBhbG1sZF9tYXBfaW8odm9pZCkKK3sKKwlweGFfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KHBhbG1sZF9pb19kZXNjLCBBUlJBWV9TSVpFKHBhbG1sZF9pb19kZXNjKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWxtbGRfaW5pdCh2b2lkKQoreworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHBhbG1sZF9waW5fY29uZmlnKSk7CisKKwlzZXRfcHhhX2ZiX2luZm8oJnBhbG1sZF9sY2Rfc2NyZWVuKTsKKwlweGFfc2V0X21jaV9pbmZvKCZwYWxtbGRfbWNpX3BsYXRmb3JtX2RhdGEpOworCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOworCXB4YV9zZXRfZmljcF9pbmZvKCZwYWxtbGRfZmljcF9wbGF0Zm9ybV9kYXRhKTsKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZwYWxtbGRfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOworCXdtOTd4eF9iYXRfc2V0X3BkYXRhKCZ3bTk3eHhfYmF0dF9wZGF0YSk7CisJcGFsbTI3eF9hc29jX3NldF9wZGF0YSgmcGFsbTI3eF9hc29jX3BkYXRhKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKFBBTE1MRCwgIlBhbG0gTGlmZURyaXZlIikKKwkucGh5c19pbwk9IFBBTE1MRF9QSFlTX0lPX1NUQVJULAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLm1hcF9pbwkJPSBwYWxtbGRfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gcGFsbWxkX2luaXQKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MjFjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdDUuYwpAQCAtMCwwICsxLDQ5NiBAQAorLyoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBQYWxtIFR1bmdzdGVufFQ1CisgKgorICogQXV0aG9yOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIHdvcmsgb2Y6CisgKgkJQWxlcyBTbnVwYXJlayA8c251cGFyZWtAYXRsYXMuY3o+CisgKgkJSnVzdGluIEtlbmRyaWNrIDx0d2lsaWdodHNlbnRyeUBnbWFpbC5jb20+CisgKgkJUmljaGFyZFQ1IDxyaWNoYXJkX3Q1QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIChmaW5kIG1vcmUgaW5mbyBhdCB3d3cuaGFja25kZXYuY29tKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3BkYV9wb3dlci5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvd205N3h4X2JhdHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9wYWxtdDUuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KKyNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KKyNpbmNsdWRlIDxtYWNoL3VkYy5oPgorI2luY2x1ZGUgPG1hY2gvcGFsbWFzb2MuaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBpbiBjb25maWd1cmF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGFsbXQ1X3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIE1NQyAqLworCUdQSU8zMl9NTUNfQ0xLLAorCUdQSU85Ml9NTUNfREFUXzAsCisJR1BJTzEwOV9NTUNfREFUXzEsCisJR1BJTzExMF9NTUNfREFUXzIsCisJR1BJTzExMV9NTUNfREFUXzMsCisJR1BJTzExMl9NTUNfQ01ELAorCUdQSU8xNF9HUElPLAkvKiBTRCBkZXRlY3QgKi8KKwlHUElPMTE0X0dQSU8sCS8qIFNEIHBvd2VyICovCisJR1BJTzExNV9HUElPLAkvKiBTRCByL28gc3dpdGNoICovCisKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCisKKwkvKiBJckRBICovCisJR1BJTzQwX0dQSU8sCS8qIGlyIGRpc2FibGUgKi8KKwlHUElPNDZfRklDUF9SWEQsCisJR1BJTzQ3X0ZJQ1BfVFhELAorCisJLyogVVNCICovCisJR1BJTzE1X0dQSU8sCS8qIHVzYiBkZXRlY3QgKi8KKwlHUElPOTVfR1BJTywJLyogdXNiIHBvd2VyICovCisKKwkvKiBNQVRSSVggS0VZUEFEICovCisJR1BJTzEwMF9LUF9NS0lOXzAsCisJR1BJTzEwMV9LUF9NS0lOXzEsCisJR1BJTzEwMl9LUF9NS0lOXzIsCisJR1BJTzk3X0tQX01LSU5fMywKKwlHUElPMTAzX0tQX01LT1VUXzAsCisJR1BJTzEwNF9LUF9NS09VVF8xLAorCUdQSU8xMDVfS1BfTUtPVVRfMiwKKworCS8qIExDRCAqLworCUdQSU81OF9MQ0RfTEREXzAsCisJR1BJTzU5X0xDRF9MRERfMSwKKwlHUElPNjBfTENEX0xERF8yLAorCUdQSU82MV9MQ0RfTEREXzMsCisJR1BJTzYyX0xDRF9MRERfNCwKKwlHUElPNjNfTENEX0xERF81LAorCUdQSU82NF9MQ0RfTEREXzYsCisJR1BJTzY1X0xDRF9MRERfNywKKwlHUElPNjZfTENEX0xERF84LAorCUdQSU82N19MQ0RfTEREXzksCisJR1BJTzY4X0xDRF9MRERfMTAsCisJR1BJTzY5X0xDRF9MRERfMTEsCisJR1BJTzcwX0xDRF9MRERfMTIsCisJR1BJTzcxX0xDRF9MRERfMTMsCisJR1BJTzcyX0xDRF9MRERfMTQsCisJR1BJTzczX0xDRF9MRERfMTUsCisJR1BJTzc0X0xDRF9GQ0xLLAorCUdQSU83NV9MQ0RfTENMSywKKwlHUElPNzZfTENEX1BDTEssCisJR1BJTzc3X0xDRF9CSUFTLAorCisJLyogUFdNICovCisJR1BJTzE2X1BXTTBfT1VULAorCisJLyogTUlTQyAqLworCUdQSU8xMF9HUElPLAkvKiBob3RzeW5jIGJ1dHRvbiAqLworCUdQSU85MF9HUElPLAkvKiBwb3dlciBkZXRlY3QgKi8KKwlHUElPMTA3X0dQSU8sCS8qIGVhcnBob25lIGRldGVjdCAqLworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU0QvTU1DIGNhcmQgY29udHJvbGxlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcGFsbXQ1X21jaV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBwYWxtdDVfZGV0ZWN0X2ludCwKKwkJCQl2b2lkICpkYXRhKQoreworCWludCBlcnIgPSAwOworCisJLyogU2V0dXAgYW4gaW50ZXJydXB0IGZvciBkZXRlY3RpbmcgY2FyZCBpbnNlcnQvcmVtb3ZlIGV2ZW50cyAqLworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiwgIlNEIElSUSIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyOworCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjI7CisJZXJyID0gcmVxdWVzdF9pcnEoZ3Bpb190b19pcnEoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pLAorCQkJcGFsbXQ1X2RldGVjdF9pbnQsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfAorCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJIlNEL01NQyBjYXJkIGRldGVjdCIsIGRhdGEpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlcXVlc3QgU0QvTU1DIGNhcmQgZGV0ZWN0IElSUVxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCWdvdG8gZXJyMjsKKwl9CisKKwllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIsICJTRF9QT1dFUiIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyMzsKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyNDsKKworCWVyciA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9TRF9SRUFET05MWSwgIlNEX1JFQURPTkxZIik7CisJaWYgKGVycikKKwkJZ290byBlcnI0OworCWVyciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjU7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycSByZWdpc3RlcmVkXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKKworZXJyNToKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUkVBRE9OTFkpOworZXJyNDoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIpOworZXJyMzoKKwlmcmVlX2lycShncGlvX3RvX2lycShHUElPX05SX1BBTE1UNV9TRF9ERVRFQ1RfTiksIGRhdGEpOworZXJyMjoKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfREVURUNUX04pOworZXJyOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10NV9tY2lfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZKTsKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIpOworCWZyZWVfaXJxKElSUV9HUElPX1BBTE1UNV9TRF9ERVRFQ1RfTiwgZGF0YSk7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1NEX0RFVEVDVF9OKTsKK30KKworc3RhdGljIHZvaWQgcGFsbXQ1X21jaV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB2ZGQpCit7CisJc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhICpwX2QgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVDVfU0RfUE9XRVIsIHBfZC0+b2NyX21hc2sgJiAoMSA8PCB2ZGQpKTsKK30KKworc3RhdGljIGludCBwYWxtdDVfbWNpX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKEdQSU9fTlJfUEFMTVQ1X1NEX1JFQURPTkxZKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSBwYWxtdDVfbWNpX3BsYXRmb3JtX2RhdGEgPSB7CisJLm9jcl9tYXNrCT0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQsCisJLnNldHBvd2VyCT0gcGFsbXQ1X21jaV9wb3dlciwKKwkuZ2V0X3JvCQk9IHBhbG10NV9tY2lfZ2V0X3JvLAorCS5pbml0IAkJPSBwYWxtdDVfbWNpX2luaXQsCisJLmV4aXQJCT0gcGFsbXQ1X21jaV9leGl0LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR1BJTyBrZXlib2FyZAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGFsbXQ1X21hdHJpeF9rZXlzW10gPSB7CisJS0VZKDAsIDAsIEtFWV9QT1dFUiksCisJS0VZKDAsIDEsIEtFWV9GMSksCisJS0VZKDAsIDIsIEtFWV9FTlRFUiksCisKKwlLRVkoMSwgMCwgS0VZX0YyKSwKKwlLRVkoMSwgMSwgS0VZX0YzKSwKKwlLRVkoMSwgMiwgS0VZX0Y0KSwKKworCUtFWSgyLCAwLCBLRVlfVVApLAorCUtFWSgyLCAyLCBLRVlfRE9XTiksCisKKwlLRVkoMywgMCwgS0VZX1JJR0hUKSwKKwlLRVkoMywgMiwgS0VZX0xFRlQpLAorfTsKKworc3RhdGljIHN0cnVjdCBweGEyN3hfa2V5cGFkX3BsYXRmb3JtX2RhdGEgcGFsbXQ1X2tleXBhZF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXRyaXhfa2V5X3Jvd3MJPSA0LAorCS5tYXRyaXhfa2V5X2NvbHMJPSAzLAorCS5tYXRyaXhfa2V5X21hcAkJPSBwYWxtdDVfbWF0cml4X2tleXMsCisJLm1hdHJpeF9rZXlfbWFwX3NpemUJPSBBUlJBWV9TSVpFKHBhbG10NV9tYXRyaXhfa2V5cyksCisKKwkuZGVib3VuY2VfaW50ZXJ2YWwJPSAzMCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8ga2V5cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBwYWxtdDVfcHhhX2J1dHRvbnNbXSA9IHsKKwl7S0VZX0Y4LCBHUElPX05SX1BBTE1UNV9IT1RTWU5DX0JVVFRPTl9OLCAxLCAiSG90U3luYyBCdXR0b24iIH0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIHBhbG10NV9weGFfa2V5c19kYXRhID0geworCS5idXR0b25zCT0gcGFsbXQ1X3B4YV9idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUocGFsbXQ1X3B4YV9idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG10NV9weGFfa2V5cyA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBhbG10NV9weGFfa2V5c19kYXRhLAorCX0sCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCYWNrbGlnaHQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHBhbG10NV9iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX05SX1BBTE1UNV9CTF9QT1dFUiwgIkJMIFBPV0VSIik7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTlJfUEFMTVQ1X0JMX1BPV0VSLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fTlJfUEFMTVQ1X0xDRF9QT1dFUiwgIkxDRCBQT1dFUiIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyMjsKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfTENEX1BPV0VSLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjM7CisKKwlyZXR1cm4gMDsKK2VycjM6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X0xDRF9QT1dFUik7CitlcnIyOgorCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9CTF9QT1dFUik7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwYWxtdDVfYmFja2xpZ2h0X25vdGlmeShpbnQgYnJpZ2h0bmVzcykKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UNV9CTF9QT1dFUiwgYnJpZ2h0bmVzcyk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19OUl9QQUxNVDVfTENEX1BPV0VSLCBicmlnaHRuZXNzKTsKKwlyZXR1cm4gYnJpZ2h0bmVzczsKK30KKworc3RhdGljIHZvaWQgcGFsbXQ1X2JhY2tsaWdodF9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfQkxfUE9XRVIpOworCWdwaW9fZnJlZShHUElPX05SX1BBTE1UNV9MQ0RfUE9XRVIpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3B3bV9iYWNrbGlnaHRfZGF0YSBwYWxtdDVfYmFja2xpZ2h0X2RhdGEgPSB7CisJLnB3bV9pZAkJPSAwLAorCS5tYXhfYnJpZ2h0bmVzcwk9IFBBTE1UNV9NQVhfSU5URU5TSVRZLAorCS5kZnRfYnJpZ2h0bmVzcwk9IFBBTE1UNV9NQVhfSU5URU5TSVRZLAorCS5wd21fcGVyaW9kX25zCT0gUEFMTVQ1X1BFUklPRF9OUywKKwkuaW5pdAkJPSBwYWxtdDVfYmFja2xpZ2h0X2luaXQsCisJLm5vdGlmeQkJPSBwYWxtdDVfYmFja2xpZ2h0X25vdGlmeSwKKwkuZXhpdAkJPSBwYWxtdDVfYmFja2xpZ2h0X2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYWxtdDVfYmFja2xpZ2h0ID0geworCS5uYW1lCT0gInB3bS1iYWNrbGlnaHQiLAorCS5kZXYJPSB7CisJCS5wYXJlbnQJCT0gJnB4YTI3eF9kZXZpY2VfcHdtMC5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG10NV9iYWNrbGlnaHRfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogSXJEQQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcGFsbXQ1X2lyZGFfc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKwllcnIgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSwgIklSIERJU0FCTEUiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSwgMSk7CisJaWYgKGVycikKKwkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X0lSX0RJU0FCTEUpOworZXJyOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10NV9pcmRhX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX2ZyZWUoR1BJT19OUl9QQUxNVDVfSVJfRElTQUJMRSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhbG10NV9pcmRhX3RyYW5zY2VpdmVyX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbW9kZSkKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX05SX1BBTE1UNV9JUl9ESVNBQkxFLCBtb2RlICYgSVJfT0ZGKTsKKwlweGEyeHhfdHJhbnNjZWl2ZXJfbW9kZShkZXYsIG1vZGUpOworfQorCitzdGF0aWMgc3RydWN0IHB4YWZpY3BfcGxhdGZvcm1fZGF0YSBwYWxtdDVfZmljcF9wbGF0Zm9ybV9kYXRhID0geworCS5zdGFydHVwCQk9IHBhbG10NV9pcmRhX3N0YXJ0dXAsCisJLnNodXRkb3duCQk9IHBhbG10NV9pcmRhX3NodXRkb3duLAorCS50cmFuc2NlaXZlcl9jYXAJPSBJUl9TSVJNT0RFIHwgSVJfRklSTU9ERSB8IElSX09GRiwKKwkudHJhbnNjZWl2ZXJfbW9kZQk9IHBhbG10NV9pcmRhX3RyYW5zY2VpdmVyX21vZGUsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBVREMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IHB4YTJ4eF91ZGNfbWFjaF9pbmZvIHBhbG10NV91ZGNfaW5mbyBfX2luaXRkYXRhID0geworCS5ncGlvX3ZidXMJCT0gR1BJT19OUl9QQUxNVDVfVVNCX0RFVEVDVF9OLAorCS5ncGlvX3ZidXNfaW52ZXJ0ZWQJPSAxLAorCS5ncGlvX3B1bGx1cAkJPSBHUElPX05SX1BBTE1UNV9VU0JfUE9XRVIsCisJLmdwaW9fcHVsbHVwX2ludmVydGVkCT0gMCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBvd2VyIHN1cHBseQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgcG93ZXJfc3VwcGx5X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfUE9XRVJfREVURUNULCAiQ0FCTEVfU1RBVEVfQUMiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19OUl9QQUxNVDVfUE9XRVJfREVURUNUKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwlyZXR1cm4gMDsKK2VycjI6CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1BPV0VSX0RFVEVDVCk7CitlcnIxOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFsbXQ1X2lzX2FjX29ubGluZSh2b2lkKQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShHUElPX05SX1BBTE1UNV9QT1dFUl9ERVRFQ1QpOworfQorCitzdGF0aWMgdm9pZCBwb3dlcl9zdXBwbHlfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1BPV0VSX0RFVEVDVCk7Cit9CisKK3N0YXRpYyBjaGFyICpwYWxtdDVfc3VwcGxpY2FudHNbXSA9IHsKKwkibWFpbi1iYXR0ZXJ5IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGRhX3Bvd2VyX3BkYXRhIHBvd2VyX3N1cHBseV9pbmZvID0geworCS5pbml0ICAgICAgICAgICAgPSBwb3dlcl9zdXBwbHlfaW5pdCwKKwkuaXNfYWNfb25saW5lICAgID0gcGFsbXQ1X2lzX2FjX29ubGluZSwKKwkuZXhpdCAgICAgICAgICAgID0gcG93ZXJfc3VwcGx5X2V4aXQsCisJLnN1cHBsaWVkX3RvICAgICA9IHBhbG10NV9zdXBwbGljYW50cywKKwkubnVtX3N1cHBsaWNhbnRzID0gQVJSQVlfU0laRShwYWxtdDVfc3VwcGxpY2FudHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcG93ZXJfc3VwcGx5ID0geworCS5uYW1lID0gInBkYS1wb3dlciIsCisJLmlkICAgPSAtMSwKKwkuZGV2ICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcG93ZXJfc3VwcGx5X2luZm8sCisJfSwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFdNOTd4eCBiYXR0ZXJ5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCB3bTk3eHhfYmF0dF9pbmZvIHdtOTd4eF9iYXR0X3BkYXRhID0geworCS5iYXR0X2F1eAk9IFdNOTdYWF9BVVhfSUQzLAorCS50ZW1wX2F1eAk9IFdNOTdYWF9BVVhfSUQyLAorCS5jaGFyZ2VfZ3Bpbwk9IC0xLAorCS5tYXhfdm9sdGFnZQk9IFBBTE1UNV9CQVRfTUFYX1ZPTFRBR0UsCisJLm1pbl92b2x0YWdlCT0gUEFMTVQ1X0JBVF9NSU5fVk9MVEFHRSwKKwkuYmF0dF9tdWx0CT0gMTAwMCwKKwkuYmF0dF9kaXYJPSA0MTQsCisJLnRlbXBfbXVsdAk9IDEsCisJLnRlbXBfZGl2CT0gMSwKKwkuYmF0dF90ZWNoCT0gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElQTywKKwkuYmF0dF9uYW1lCT0gIm1haW4tYmF0dCIsCit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhU29DIGF1ZGlvCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBwYWxtMjd4X2Fzb2NfaW5mbyBwYWxtMjd4X2Fzb2NfcGRhdGEgPSB7CisJLmphY2tfZ3Bpbwk9IEdQSU9fTlJfUEFMTVQ1X0VBUlBIT05FX0RFVEVDVCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEZyYW1lYnVmZmVyCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBweGFmYl9tb2RlX2luZm8gcGFsbXQ1X2xjZF9tb2Rlc1tdID0geworeworCS5waXhjbG9jawk9IDU3NjkyLAorCS54cmVzCQk9IDMyMCwKKwkueXJlcwkJPSA0ODAsCisJLmJwcAkJPSAxNiwKKworCS5sZWZ0X21hcmdpbgk9IDMyLAorCS5yaWdodF9tYXJnaW4JPSAxLAorCS51cHBlcl9tYXJnaW4JPSA3LAorCS5sb3dlcl9tYXJnaW4JPSAxLAorCisJLmhzeW5jX2xlbgk9IDQsCisJLnZzeW5jX2xlbgk9IDEsCit9LAorfTsKKworc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gcGFsbXQ1X2xjZF9zY3JlZW4gPSB7CisJLm1vZGVzCQk9IHBhbG10NV9sY2RfbW9kZXMsCisJLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUocGFsbXQ1X2xjZF9tb2RlcyksCisJLmxjZF9jb25uCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1hY2hpbmUgaW5pdAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPKSB8fCBkZWZpbmVkKENPTkZJR19LRVlCT0FSRF9HUElPX01PRFVMRSkKKwkmcGFsbXQ1X3B4YV9rZXlzLAorI2VuZGlmCisJJnBhbG10NV9iYWNrbGlnaHQsCisJJnBvd2VyX3N1cHBseSwKK307CisKKy8qIHNldHVwIHVkYyBHUElPcyBpbml0aWFsIHN0YXRlICovCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXQ1X3VkY19pbml0KHZvaWQpCit7CisJaWYgKCFncGlvX3JlcXVlc3QoR1BJT19OUl9QQUxNVDVfVVNCX1BPV0VSLCAiVURDIFZidXMiKSkgeworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19OUl9QQUxNVDVfVVNCX1BPV0VSLCAxKTsKKwkJZ3Bpb19mcmVlKEdQSU9fTlJfUEFMTVQ1X1VTQl9QT1dFUik7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcGFsbXQ1X2luaXQodm9pZCkKK3sKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShwYWxtdDVfcGluX2NvbmZpZykpOworCisJc2V0X3B4YV9mYl9pbmZvKCZwYWxtdDVfbGNkX3NjcmVlbik7CisJcHhhX3NldF9tY2lfaW5mbygmcGFsbXQ1X21jaV9wbGF0Zm9ybV9kYXRhKTsKKwlwYWxtdDVfdWRjX2luaXQoKTsKKwlweGFfc2V0X3VkY19pbmZvKCZwYWxtdDVfdWRjX2luZm8pOworCXB4YV9zZXRfYWM5N19pbmZvKE5VTEwpOworCXB4YV9zZXRfZmljcF9pbmZvKCZwYWxtdDVfZmljcF9wbGF0Zm9ybV9kYXRhKTsKKwlweGFfc2V0X2tleXBhZF9pbmZvKCZwYWxtdDVfa2V5cGFkX3BsYXRmb3JtX2RhdGEpOworCXdtOTd4eF9iYXRfc2V0X3BkYXRhKCZ3bTk3eHhfYmF0dF9wZGF0YSk7CisJcGFsbTI3eF9hc29jX3NldF9wZGF0YSgmcGFsbTI3eF9hc29jX3BkYXRhKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChQQUxNVDUsICJQYWxtIFR1bmdzdGVufFQ1IikKKwkucGh5c19pbwk9IFBBTE1UNV9QSFlTX0lPX1NUQVJULAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4YTAwMDAxMDAsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycQk9IHB4YTI3eF9pbml0X2lycSwKKwkudGltZXIJCT0gJnB4YV90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gcGFsbXQ1X2luaXQKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCmluZGV4IGE5ZDk0ZjUuLmI0OTBjMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jCkBAIC0zMiwxMiArMzIsMTEgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KICNpbmNsdWRlIDxtYWNoL3BhbG10eC5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCmluZGV4IDJmNzMwZGEuLmI4OGViNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKQEAgLTMzLDEzICszMywxMSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAorI2luY2x1ZGUgPG1hY2gvcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvcGFsbXo3Mi5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CiAjaW5jbHVkZSA8bWFjaC9pcmRhLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyN3hfa2V5cGFkLmg+CiAjaW5jbHVkZSA8bWFjaC91ZGMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTAyNy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMKaW5kZXggMzYxMzVhMC4uNmFiZmEyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtMDI3LmMKQEAgLTI5LDEwICsyOSw3IEBACiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI3eC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvcGNtMDI3Lmg+CiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCmluZGV4IDM0ODQxYzcuLmY0NjY5OGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKQEAgLTMxLDEzICszMSwxMiBAQAogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CiAjaW5jbHVkZSA8bWFjaC9jYW1lcmEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxtYWNoL3BjbTk5MF9iYXNlYm9hcmQuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CiAKICNpbmNsdWRlICJkZXZpY2VzLmgiCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKaW5kZXggMTY0ZWIwYi4uODg0YjE3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wbS5jCkBAIC0xNCwxNSArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPG1hY2gvcG0uaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9sdWJib2NrLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiBzdHJ1Y3QgcHhhX2NwdV9wbV9mbnMgKnB4YV9jcHVfcG1fZm5zOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgKnNsZWVwX3NhdmU7CkBAIC01Nyw5ICs1MCw5IEBACiAKIAkJLyogaWYgaW52YWxpZCwgZGlzcGxheSBtZXNzYWdlIGFuZCB3YWl0IGZvciBhIGhhcmR3YXJlIHJlc2V0ICovCiAJCWlmIChjaGVja3N1bSAhPSBzbGVlcF9zYXZlX2NoZWNrc3VtKSB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfTFVCQk9DSwotCQkJTFVCX0hFWExFRCA9IDB4YmFkYmFkYzU7Ci0jZW5kaWYKKworCQkJbHViYm9ja19zZXRfaGV4bGVkKDB4YmFkYmFkYzUpOworCiAJCQl3aGlsZSAoMSkKIAkJCQlweGFfY3B1X3BtX2Zucy0+ZW50ZXIoc3RhdGUpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCmluZGV4IGY5MDkzYmUuLjAzNmJiZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Bvb2RsZS5jCkBAIC0zNiw5ICszNiw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9tbWMuaD4KICNpbmNsdWRlIDxtYWNoL3VkYy5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CkBAIC01MDMsMTIgKzUwMSwxMiBAQAogCiBzdGF0aWMgdm9pZCBwb29kbGVfcG93ZXJvZmYodm9pZCkKIHsKLQlhcm1fbWFjaGluZV9yZXN0YXJ0KCdoJyk7CisJYXJtX21hY2hpbmVfcmVzdGFydCgnaCcsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZCBwb29kbGVfcmVzdGFydChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBwb29kbGVfcmVzdGFydChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKLQlhcm1fbWFjaGluZV9yZXN0YXJ0KCdoJyk7CisJYXJtX21hY2hpbmVfcmVzdGFydCgnaCcsIGNtZCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwb29kbGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHdtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wd20uYwppbmRleCAzY2E3ZmZjNi4uZmNkZDM3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHdtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHdtLmMKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9wd20uaD4KIAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KIAogLyogUFdNIHJlZ2lzdGVycyBhbmQgYml0cyBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBQV01DUgkJKDB4MDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCmluZGV4IDZjNTc1MjIuLjc3YzI2OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCkBAIC0yNSw5ICsyNSw4IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL3BtLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KQEAgLTMxMCwxNCArMzA5LDE0IEBACiB2b2lkIF9faW5pdCBweGEyNXhfaW5pdF9pcnEodm9pZCkKIHsKIAlweGFfaW5pdF9pcnEoMzIsIHB4YTI1eF9zZXRfd2FrZSk7Ci0JcHhhX2luaXRfZ3Bpbyg4NSwgcHhhMjV4X3NldF93YWtlKTsKKwlweGFfaW5pdF9ncGlvKElSUV9HUElPXzJfeCwgMiwgODQsIHB4YTI1eF9zZXRfd2FrZSk7CiB9CiAKICNpZmRlZiBDT05GSUdfQ1BVX1BYQTI2eAogdm9pZCBfX2luaXQgcHhhMjZ4X2luaXRfaXJxKHZvaWQpCiB7CiAJcHhhX2luaXRfaXJxKDMyLCBweGEyNXhfc2V0X3dha2UpOwotCXB4YV9pbml0X2dwaW8oOTAsIHB4YTI1eF9zZXRfd2FrZSk7CisJcHhhX2luaXRfZ3BpbyhJUlFfR1BJT18yX3gsIDIsIDg5LCBweGEyNXhfc2V0X3dha2UpOwogfQogI2VuZGlmCiAKQEAgLTM1NSw3ICszNTQsNyBAQAogCiAJCWNsa3NfcmVnaXN0ZXIocHhhMjV4X2Nsa3JlZ3MsIEFSUkFZX1NJWkUocHhhMjV4X2Nsa3JlZ3MpKTsKIAotCQlpZiAoKHJldCA9IHB4YV9pbml0X2RtYSgxNikpKQorCQlpZiAoKHJldCA9IHB4YV9pbml0X2RtYShJUlFfRE1BLCAxNikpKQogCQkJcmV0dXJuIHJldDsKIAogCQlweGEyNXhfaW5pdF9wbSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwppbmRleCA0MTFiZWM1Li5hNDI1ZWM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMjEsOSArMjEsOCBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL29oY2kuaD4KICNpbmNsdWRlIDxtYWNoL3BtLmg+CkBAIC0zMzIsNyArMzMxLDcgQEAKIHZvaWQgX19pbml0IHB4YTI3eF9pbml0X2lycSh2b2lkKQogewogCXB4YV9pbml0X2lycSgzNCwgcHhhMjd4X3NldF93YWtlKTsKLQlweGFfaW5pdF9ncGlvKDEyMSwgcHhhMjd4X3NldF93YWtlKTsKKwlweGFfaW5pdF9ncGlvKElSUV9HUElPXzJfeCwgMiwgMTIwLCBweGEyN3hfc2V0X3dha2UpOwogfQogCiAvKgpAQCAtMzgxLDcgKzM4MCw3IEBACiAKIAkJY2xrc19yZWdpc3RlcihweGEyN3hfY2xrcmVncywgQVJSQVlfU0laRShweGEyN3hfY2xrcmVncykpOwogCi0JCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKDMyKSkpCisJCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKElSUV9ETUEsIDMyKSkpCiAJCQlyZXR1cm4gcmV0OwogCiAJCXB4YTI3eF9pbml0X3BtKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTJ4eC5jCmluZGV4IDczZDA0ZDguLjJmMzM5NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTJ4eC5jCkBAIC0xNiw3ICsxNiw2IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTJ4eC5oPgogI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTI1eC5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMwMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKaW5kZXggODNmYjYwOS4uNGJhNmQyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMzAwLmMKQEAgLTE3LDE1ICsxNywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEzMDAuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTMwMC5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKICNpbmNsdWRlICJjbG9jay5oIgogCi1zdGF0aWMgc3RydWN0IHB4YTN4eF9tZnBfYWRkcl9tYXAgcHhhMzAwX21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1mcF9hZGRyX21hcCBweGEzMDBfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKIAogCU1GUF9BRERSX1goR1BJTzAsICAgR1BJTzIsICAgMHgwMGI0KSwKIAlNRlBfQUREUl9YKEdQSU8zLCAgIEdQSU8yNiwgIDB4MDI3YyksCkBAIC03NCw3ICs3Miw3IEBACiB9OwogCiAvKiBvdmVycmlkZSBweGEzMDAgTUZQIHJlZ2lzdGVyIGFkZHJlc3NlcyAqLwotc3RhdGljIHN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwIHB4YTMxMF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBtZnBfYWRkcl9tYXAgcHhhMzEwX21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CiAJTUZQX0FERFJfWChHUElPMzAsICBHUElPOTgsICAgMHgwNDE4KSwKIAlNRlBfQUREUl9YKEdQSU83XzIsIEdQSU8xMl8yLCAweDA1MkMpLAogCkBAIC0xMDAsMTMgKzk4LDEzIEBACiBzdGF0aWMgaW50IF9faW5pdCBweGEzMDBfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaXNfcHhhMzAwKCkgfHwgY3B1X2lzX3B4YTMxMCgpKSB7Ci0JCXB4YTN4eF9pbml0X21mcCgpOwotCQlweGEzeHhfbWZwX2luaXRfYWRkcihweGEzMDBfbWZwX2FkZHJfbWFwKTsKKwkJbWZwX2luaXRfYmFzZShpb19wMnYoTUZQUl9CQVNFKSk7CisJCW1mcF9pbml0X2FkZHIocHhhMzAwX21mcF9hZGRyX21hcCk7CiAJCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUoY29tbW9uX2Nsa3JlZ3MpKTsKIAl9CiAKIAlpZiAoY3B1X2lzX3B4YTMxMCgpKSB7Ci0JCXB4YTN4eF9tZnBfaW5pdF9hZGRyKHB4YTMxMF9tZnBfYWRkcl9tYXApOworCQltZnBfaW5pdF9hZGRyKHB4YTMxMF9tZnBfYWRkcl9tYXApOwogCQljbGtzX3JlZ2lzdGVyKEFSUkFZX0FORF9TSVpFKHB4YTMxMF9jbGtyZWdzKSk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzMjAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCmluZGV4IDM2ZjA2NjEuLjhiM2Q5N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTMyMC5jCkBAIC0xNywxNiArMTcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC5oPgotI2luY2x1ZGUgPG1hY2gvcHhhM3h4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEzMjAuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTMyMC5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogI2luY2x1ZGUgImRldmljZXMuaCIKICNpbmNsdWRlICJjbG9jay5oIgogCi1zdGF0aWMgc3RydWN0IHB4YTN4eF9tZnBfYWRkcl9tYXAgcHhhMzIwX21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1mcF9hZGRyX21hcCBweGEzMjBfbWZwX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKIAogCU1GUF9BRERSX1goR1BJTzAsICBHUElPNCwgICAweDAxMjQpLAogCU1GUF9BRERSX1goR1BJTzUsICBHUElPOSwgICAweDAyOEMpLApAQCAtODksOCArODYsOCBAQAogc3RhdGljIGludCBfX2luaXQgcHhhMzIwX2luaXQodm9pZCkKIHsKIAlpZiAoY3B1X2lzX3B4YTMyMCgpKSB7Ci0JCXB4YTN4eF9pbml0X21mcCgpOwotCQlweGEzeHhfbWZwX2luaXRfYWRkcihweGEzMjBfbWZwX2FkZHJfbWFwKTsKKwkJbWZwX2luaXRfYmFzZShpb19wMnYoTUZQUl9CQVNFKSk7CisJCW1mcF9pbml0X2FkZHIocHhhMzIwX21mcF9hZGRyX21hcCk7CiAJCWNsa3NfcmVnaXN0ZXIoQVJSQVlfQU5EX1NJWkUocHhhMzIwX2Nsa3JlZ3MpKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKaW5kZXggNDkwODkzOC4uYjAyZDQ1NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgogI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgpAQCAtNTM4LDcgKzUzOSw3IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oIm1jciBwMTUsIDAsICUwLCBjMTUsIGMxLCAwXG4iOiA6InIiKHZhbHVlKSk7CiAKIAlweGFfaW5pdF9pcnEoNTYsIHB4YTN4eF9zZXRfd2FrZSk7Ci0JcHhhX2luaXRfZ3BpbygxMjgsIE5VTEwpOworCXB4YV9pbml0X2dwaW8oSVJRX0dQSU9fMl94LCAyLCAxMjcsIE5VTEwpOwogfQogCiAvKgpAQCAtNTk0LDcgKzU5NSw3IEBACiAKIAkJY2xrc19yZWdpc3RlcihweGEzeHhfY2xrcmVncywgQVJSQVlfU0laRShweGEzeHhfY2xrcmVncykpOwogCi0JCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKDMyKSkpCisJCWlmICgocmV0ID0gcHhhX2luaXRfZG1hKElSUV9ETUEsIDMyKSkpCiAJCQlyZXR1cm4gcmV0OwogCiAJCXB4YTN4eF9pbml0X3BtKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGE5MzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCmluZGV4IDEzZTZiZmQuLjcxMTMxNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTkzMC5jCkBAIC0xNiwxMCArMTYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTMwLmg+CisjaW5jbHVkZSA8bWFjaC9weGE5MzAuaD4KIAotc3RhdGljIHN0cnVjdCBweGEzeHhfbWZwX2FkZHJfbWFwIHB4YTkzMF9tZnBfYWRkcl9tYXBbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBtZnBfYWRkcl9tYXAgcHhhOTMwX21mcF9hZGRyX21hcFtdIF9faW5pdGRhdGEgPSB7CiAKIAlNRlBfQUREUihHUElPMCwgMHgwMmUwKSwKIAlNRlBfQUREUihHUElPMSwgMHgwMmRjKSwKQEAgLTE4MCw4ICsxNzksOCBAQAogc3RhdGljIGludCBfX2luaXQgcHhhOTMwX2luaXQodm9pZCkKIHsKIAlpZiAoY3B1X2lzX3B4YTkzMCgpKSB7Ci0JCXB4YTN4eF9pbml0X21mcCgpOwotCQlweGEzeHhfbWZwX2luaXRfYWRkcihweGE5MzBfbWZwX2FkZHJfbWFwKTsKKwkJbWZwX2luaXRfYmFzZShpb19wMnYoTUZQUl9CQVNFKSk7CisJCW1mcF9pbml0X2FkZHIocHhhOTMwX21mcF9hZGRyX21hcCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9yZXNldC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcmVzZXQuYwppbmRleCAwMGIyZGMyLi5kZjI5ZDQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9yZXNldC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Jlc2V0LmMKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1vc3QuaD4KICNpbmNsdWRlIDxtYWNoL3Jlc2V0Lmg+CiAKIHVuc2lnbmVkIGludCByZXNldF9zdGF0dXM7CkBAIC04MSw3ICs4MSw3IEBACiAJT1NNUjMgPSBPU0NSICsgMzY4NjQwOwkvKiAuLi4gaW4gMTAwIG1zICovCiB9CiAKLXZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJY2xlYXJfcmVzZXRfc3RhdHVzKFJFU0VUX1NUQVRVU19BTEwpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zYWFyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zYWFyLmMKaW5kZXggNWQwMmE3My4uZmY4MjM5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2Fhci5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NhYXIuYwpAQCAtMjUsMTEgKzI1LDkgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTMwLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTkzMC5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KIAogI2luY2x1ZGUgImRldmljZXMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYwppbmRleCBmMDg0NWMxLi4xNmI0ZWM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9wbS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9zaGFycHNsLmg+CiAjaW5jbHVkZSAic2hhcnBzbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKaW5kZXggYTYyYzgzNy4uMmVkOTVmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAKICNkZWZpbmUgTURSRUZSX0tESVYJMHgyMDBhNDAwMAkvLyBhbGwgYmFua3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCmluZGV4IDZkNDQ3YzkuLjhjNjFkZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwpAQCAtNDQsOSArNDQsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCi0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyN3guaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTI3eC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMjd4LXVkYy5oPgogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgpAQCAtMTA1LDYgKzEwMywxMiBAQAogCUdQSU81N19uSU9JUzE2LAogCUdQSU8xMDRfUFNLVFNFTCwKIAorCS8qIEkyUyAqLworCUdQSU8yOF9JMlNfQklUQ0xLX09VVCwKKwlHUElPMjlfSTJTX1NEQVRBX0lOLAorCUdQSU8zMF9JMlNfU0RBVEFfT1VULAorCUdQSU8zMV9JMlNfU1lOQywKKwogCS8qIE1NQyAqLwogCUdQSU8zMl9NTUNfQ0xLLAogCUdQSU8xMTJfTU1DX0NNRCwKQEAgLTcwMywxMCArNzA3LDEwIEBACiAKIHN0YXRpYyB2b2lkIHNwaXR6X3Bvd2Vyb2ZmKHZvaWQpCiB7Ci0JYXJtX21hY2hpbmVfcmVzdGFydCgnZycpOworCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2cnLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgc3BpdHpfcmVzdGFydChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBzcGl0el9yZXN0YXJ0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCS8qIEJvb3Rsb2FkZXIgbWFnaWMgZm9yIGEgcmVib290ICovCiAJaWYoKE1TQzAgJiAweGZmZmYwMDAwKSA9PSAweDdmZjAwMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHpfcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6X3BtLmMKaW5kZXggMDcyZTc3Yy4uMmU0NDkwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHpfcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zcGl0el9wbS5jCkBAIC0yNCw3ICsyNCw2IEBACiAKICNpbmNsdWRlIDxtYWNoL3NoYXJwc2wuaD4KICNpbmNsdWRlIDxtYWNoL3NwaXR6Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CiAjaW5jbHVkZSAic2hhcnBzbC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwppbmRleCA2ZjQyMDA0Li45NjVlMzhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9zc3AuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNzcC5oPgogCiAjZGVmaW5lIFRJTUVPVVQgMTAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zdGFuZGJ5LlMgYi9hcmNoL2FybS9tYWNoLXB4YS9zdGFuZGJ5LlMKaW5kZXggZjM4MjFjZi4uMjlmNWY1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc3RhbmRieS5TCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3N0YW5kYnkuUwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogCiAJCS50ZXh0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90YXZvcmV2Yi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdGF2b3JldmIuYwppbmRleCA1OGVmMDhhLi5iNzUzNTNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90YXZvcmV2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rhdm9yZXZiLmMKQEAgLTIyLDkgKzIyLDggQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTN4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhOTMwLmg+CisKKyNpbmNsdWRlIDxtYWNoL3B4YTkzMC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTI3eF9rZXlwYWQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCmluZGV4IDk1NjU2YTcuLjhlYjM4MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKQEAgLTIyLDggKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtb3N0Lmg+CiAKIC8qCiAgKiBUaGlzIGlzIFBYQSdzIHNjaGVkX2Nsb2NrIGltcGxlbWVudGF0aW9uLiBUaGlzIGhhcyBhIHJlc29sdXRpb24KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCAzZmUxMzdmLi42ZThhZGU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0zNiw4ICszNiw4IEBACiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9yZXNldC5oPgogI2luY2x1ZGUgPG1hY2gvaXJkYS5oPgogI2luY2x1ZGUgPG1hY2gvaTJjLmg+CkBAIC04NzYsMTAgKzg3NiwxMCBAQAogCiBzdGF0aWMgdm9pZCB0b3NhX3Bvd2Vyb2ZmKHZvaWQpCiB7Ci0JYXJtX21hY2hpbmVfcmVzdGFydCgnZycpOworCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2cnLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgdG9zYV9yZXN0YXJ0KGNoYXIgbW9kZSkKK3N0YXRpYyB2b2lkIHRvc2FfcmVzdGFydChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkvKiBCb290bG9hZGVyIG1hZ2ljIGZvciBhIHJlYm9vdCAqLwogCWlmKChNU0MwICYgMHhmZmZmMDAwMCkgPT0gMHg3ZmYwMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCmluZGV4IGE3MmUzYWQuLmY3OWM5Y2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwpAQCAtMzksMTAgKzM5LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMjd4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGEyN3guaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eF9zcGkuaD4KICNpbmNsdWRlIDxtYWNoL3RyaXplcHM0Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKaW5kZXggNGIzMTIwZC4uMGU2NTM0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCkBAIC00MiwxMiArNDIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9iaXRmaWVsZC5oPgorI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KLSNpbmNsdWRlIDxtYWNoL21mcC1weGEyNXguaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvdmlwZXIuaD4KIApAQCAtOTU2LDcgKzk1Myw3IEBACiAJfSwKIAl7CiAJCS52aXJ0dWFsID0gVklQRVJfUEMxMDRJT19CQVNFLAotCQkucGZuICAgICA9IF9fcGh5c190b19wZm4oX1BDTUNJQTFJTyksCisJCS5wZm4gICAgID0gX19waHlzX3RvX3BmbigweDMwMDAwMDAwKSwKIAkJLmxlbmd0aCAgPSAweDAwODAwMDAwLAogCQkudHlwZSAgICA9IE1UX0RFVklDRSwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYwppbmRleCA0NjUzODg4Li5jMWY3MzIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMDAuYwpAQCAtMTgsOSArMTgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvcGNhOTUzeC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9tZnAtcHhhMzAwLmg+CisjaW5jbHVkZSA8bWFjaC9weGEzMDAuaD4KICNpbmNsdWRlIDxtYWNoL2kyYy5oPgogI2luY2x1ZGUgPG1hY2gvenlsb25pdGUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvenlsb25pdGVfcHhhMzIwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwppbmRleCAyOGU0ZTYyLi40ZTFjNDg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS96eWxvbml0ZV9weGEzMjAuYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLSNpbmNsdWRlIDxtYWNoL21mcC1weGEzMjAuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTMyMC5oPgogI2luY2x1ZGUgPG1hY2gvenlsb25pdGUuaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwppbmRleCBhZDkxMTg1Li5iNmVjMTA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCkBAIC0zNSw2ICszNSw3IEBACiAJYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9QQjExTVBDb3JlIHBsYXRmb3JtIgogCXNlbGVjdCBDUFVfVjYKIAlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgTVBDb3JlIFBsYXRmb3JtIEJhc2Vib2FyZC4KIAkgIFBCMTFNUENvcmUgaXMgYSBwbGF0Zm9ybSB3aXRoIGFuIG9uLWJvYXJkIEFSTTExTVBDb3JlIGFuZCBoYXMKQEAgLTUxLDYgKzUyLDcgQEAKIAlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCLUE4IHBsYXRmb3JtIgogCXNlbGVjdCBDUFVfVjcKIAlzZWxlY3QgQVJNX0dJQworCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgQ29ydGV4LUE4IFBsYXRmb3JtIEJhc2Vib2FyZC4KIAkgIFBCLUE4IGlzIGEgcGxhdGZvcm0gd2l0aCBhbiBvbi1ib2FyZCBDb3J0ZXgtQTggYW5kIGhhcyBzdXBwb3J0IGZvcgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwppbmRleCBiZDJhYTRmLi5kNjc2NjY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NtYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KIAogI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xNTAsNiArMTUxLDQ0IEBACiAJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfZXRoX2RldmljZSk7CiB9CiAKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfdXNiX2RldmljZSA9IHsKKwkubmFtZQkJCT0gImlzcDE3NjAiLAorCS5udW1fcmVzb3VyY2VzCQk9IDIsCit9OworCitpbnQgcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXJlYWx2aWV3X3VzYl9kZXZpY2UucmVzb3VyY2UgPSByZXM7CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfdXNiX2RldmljZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGF0YV9wbGF0Zm9ybV9pbmZvIHBhdGFfcGxhdGZvcm1fZGF0YSA9IHsKKwkuaW9wb3J0X3NoaWZ0CQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBhdGFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gUkVBTFZJRVdfQ0ZfQkFTRSwKKwkJLmVuZAkJPSBSRUFMVklFV19DRl9CQVNFICsgMHhmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJCT0gUkVBTFZJRVdfQ0ZfQkFTRSArIDB4MTAwLAorCQkuZW5kCQk9IFJFQUxWSUVXX0NGX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19jZl9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJwYXRhX3BsYXRmb3JtIiwKKwkuaWQJCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUocGF0YV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBwYXRhX3Jlc291cmNlcywKKwkuZGV2CQkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhdGFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19pMmNfcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CQk9IFJFQUxWSUVXX0kyQ19CQVNFLAogCS5lbmQJCT0gUkVBTFZJRVdfSTJDX0JBU0UgKyBTWl80SyAtIDEsCkBAIC0xNTgsMTEgKzE5NywyNSBAQAogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X2kyY19kZXZpY2UgPSB7CiAJLm5hbWUJCT0gInZlcnNhdGlsZS1pMmMiLAotCS5pZAkJPSAtMSwKKwkuaWQJCT0gMCwKIAkubnVtX3Jlc291cmNlcwk9IDEsCiAJLnJlc291cmNlCT0gJnJlYWx2aWV3X2kyY19yZXNvdXJjZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcmVhbHZpZXdfaTJjX2JvYXJkX2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJydGMtZHMxMzA3IiwgMHhkMCA+PiAxKSwKKwkJLnR5cGUgPSAiZHMxMzM4IiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcmVhbHZpZXdfaTJjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgcmVhbHZpZXdfaTJjX2JvYXJkX2luZm8sCisJCQkJICAgICAgIEFSUkFZX1NJWkUocmVhbHZpZXdfaTJjX2JvYXJkX2luZm8pKTsKK30KK2FyY2hfaW5pdGNhbGwocmVhbHZpZXdfaTJjX2luaXQpOworCiAjZGVmaW5lIFJFQUxWSUVXX1NZU01DSQkoX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIFJFQUxWSUVXX1NZU19NQ0lfT0ZGU0VUKQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHJlYWx2aWV3X21tY19zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9jb3JlLmggYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaAppbmRleCA0NDI2OWIxLi4yMWMwODYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2NvcmUuaApAQCAtNDUsNiArNDUsNyBAQAogfQogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19mbGFzaF9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19jZl9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSByZWFsdmlld19pMmNfZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSByZWFsdmlld19tbWMwX3BsYXRfZGF0YTsKIGV4dGVybiBzdHJ1Y3QgbW1jX3BsYXRmb3JtX2RhdGEgcmVhbHZpZXdfbW1jMV9wbGF0X2RhdGE7CkBAIC02Miw1ICs2Myw2IEBACiBleHRlcm4gdm9pZCByZWFsdmlld190aW1lcl9pbml0KHVuc2lnbmVkIGludCB0aW1lcl9pcnEpOwogZXh0ZXJuIGludCByZWFsdmlld19mbGFzaF9yZWdpc3RlcihzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyIG51bSk7CiBleHRlcm4gaW50IHJlYWx2aWV3X2V0aF9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CitleHRlcm4gaW50IHJlYWx2aWV3X3VzYl9yZWdpc3RlcihzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGJhOC5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYm9hcmQtcGJhOC5oCmluZGV4IGM4YmVkOGYuLjMwN2Y5N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JvYXJkLXBiYTguaAorKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9ib2FyZC1wYmE4LmgKQEAgLTQ1LDggKzQ1LDYgQEAKICNkZWZpbmUgUkVBTFZJRVdfUEJBOF9ETUNfQkFTRQkJCTB4MTAwRTAwMDAJLyogRE1DIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgUkVBTFZJRVdfUEJBOF9TTUNfQkFTRQkJCTB4MTAwRTEwMDAJLyogU01DIGNvbmZpZ3VyYXRpb24gKi8KICNkZWZpbmUgUkVBTFZJRVdfUEJBOF9DQU5fQkFTRQkJCTB4MTAwRTIwMDAJLyogQ0FOIGJ1cyAqLwotI2RlZmluZSBSRUFMVklFV19QQkE4X0NGX0JBU0UJCQkweDE4MDAwMDAwCS8qIENvbXBhY3QgZmxhc2ggKi8KLSNkZWZpbmUgUkVBTFZJRVdfUEJBOF9DRl9NRU1fQkFTRQkJMHgxODAwMzAwMAkvKiBTTUMgZm9yIENvbXBhY3QgZmxhc2ggKi8KICNkZWZpbmUgUkVBTFZJRVdfUEJBOF9HSUNfQ1BVX0JBU0UJCTB4MUUwMDAwMDAJLyogR2VuZXJpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBDUFUgaW50ZXJmYWNlICovCiAjZGVmaW5lIFJFQUxWSUVXX1BCQThfRkxBU0gwX0JBU0UJCTB4NDAwMDAwMDAKICNkZWZpbmUgUkVBTFZJRVdfUEJBOF9GTEFTSDBfU0laRQkJU1pfNjRNCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvcGxhdGZvcm0uaAppbmRleCA3OTNhM2EzLi5jOGY1MDgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9wbGF0Zm9ybS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3BsYXRmb3JtLmgKQEAgLTIwNCw2ICsyMDQsMTIgQEAKICNkZWZpbmUgUkVBTFZJRVdfTFRfQkFTRSAgICAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBMb2dpYyBUaWxlIGV4cGFuc2lvbiAqLwogCiAvKgorICogQ29tcGFjdEZsYXNoCisgKi8KKyNkZWZpbmUgUkVBTFZJRVdfQ0ZfQkFTRQkJMHgxODAwMDAwMAkvKiBDb21wYWN0Rmxhc2ggKi8KKyNkZWZpbmUgUkVBTFZJRVdfQ0ZfTUVNX0JBU0UJCTB4MTgwMDMwMDAJLyogU01DIGZvciBDb21wYWN0Rmxhc2ggKi8KKworLyoKICAqIERpc2sgb24gQ2hpcAogICovCiAjZGVmaW5lIFJFQUxWSUVXX0RPQ19CQVNFICAgICAgICAgICAgIDB4MkMwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggYTJmNjFjNy4uMWExNWE0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAl2b2lkIF9faW9tZW0gKmhkcl9jdHJsID0gX19pb19hZGRyZXNzKFJFQUxWSUVXX1NZU19CQVNFKSArIFJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQ7CiAJdW5zaWduZWQgaW50IHZhbDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfZWIuYwppbmRleCBiZWQzOWVkLi5jMjBmYmVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X2ViLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19lYi5jCkBAIC0yNjQsNiArMjY0LDE5IEBACiAJcmV0dXJuIHJlYWx2aWV3X2V0aF9yZWdpc3RlcihuYW1lLCByZWFsdmlld19lYl9ldGhfcmVzb3VyY2VzKTsKIH0KIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19lYl9pc3AxNzYxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CQk9IFJFQUxWSUVXX0VCX1VTQl9CQVNFLAorCQkuZW5kCQk9IFJFQUxWSUVXX0VCX1VTQl9CQVNFICsgU1pfMTI4SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CQk9IElSUV9FQl9VU0IsCisJCS5lbmQJCT0gSVJRX0VCX1VTQiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7CiAJaWYgKGNvcmVfdGlsZV9lYjExbXAoKSB8fCBjb3JlX3RpbGVfYTltcCgpKSB7CkBAIC0zMjMsNiArMzM2LDggQEAKIAkvKiBwbGF0Zm9ybSBkZXZpY2VzICovCiAJcmVhbHZpZXdfZWJfZXRoX3Jlc291cmNlc1sxXS5zdGFydAk9IElSUV9FQjExTVBfRVRIOwogCXJlYWx2aWV3X2ViX2V0aF9yZXNvdXJjZXNbMV0uZW5kCT0gSVJRX0VCMTFNUF9FVEg7CisJcmVhbHZpZXdfZWJfaXNwMTc2MV9yZXNvdXJjZXNbMV0uc3RhcnQJPSBJUlFfRUIxMU1QX1VTQjsKKwlyZWFsdmlld19lYl9pc3AxNzYxX3Jlc291cmNlc1sxXS5lbmQJPSBJUlFfRUIxMU1QX1VTQjsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHJlYWx2aWV3X2ViX3RpbWVyX2luaXQodm9pZCkKQEAgLTM2Niw2ICszODEsNyBAQAogCXJlYWx2aWV3X2ZsYXNoX3JlZ2lzdGVyKCZyZWFsdmlld19lYl9mbGFzaF9yZXNvdXJjZSwgMSk7CiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19pMmNfZGV2aWNlKTsKIAlldGhfZGV2aWNlX3JlZ2lzdGVyKCk7CisJcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHJlYWx2aWV3X2ViX2lzcDE3NjFfcmVzb3VyY2VzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFtYmFfZGV2cyk7IGkrKykgewogCQlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmQgPSBhbWJhX2RldnNbaV07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExNzYuYwppbmRleCA4ZjA2ODNjLi5hNjRiODRhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTE3Ni5jCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMTc2LmMKQEAgLTIyMiw2ICsyMjIsMTkgQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSByZWFsdmlld19wYjExNzZfaXNwMTc2MV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAkJPSBSRUFMVklFV19QQjExNzZfVVNCX0JBU0UsCisJCS5lbmQJCT0gUkVBTFZJRVdfUEIxMTc2X1VTQl9CQVNFICsgU1pfMTI4SyAtIDEsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CQk9IElSUV9QQjExNzZfVVNCLAorCQkuZW5kCQk9IElSUV9QQjExNzZfVVNCLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCkKIHsKIAkvKiBBUk0xMTc2IERldkNoaXAgR0lDLCBwcmltYXJ5ICovCkBAIC0yNjAsNiArMjczLDggQEAKIAogCXJlYWx2aWV3X2ZsYXNoX3JlZ2lzdGVyKCZyZWFsdmlld19wYjExNzZfZmxhc2hfcmVzb3VyY2UsIDEpOwogCXJlYWx2aWV3X2V0aF9yZWdpc3RlcihOVUxMLCByZWFsdmlld19wYjExNzZfc21zYzkxMXhfcmVzb3VyY2VzKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2kyY19kZXZpY2UpOworCXJlYWx2aWV3X3VzYl9yZWdpc3RlcihyZWFsdmlld19wYjExNzZfaXNwMTc2MV9yZXNvdXJjZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYW1iYV9kZXZzKTsgaSsrKSB7CiAJCXN0cnVjdCBhbWJhX2RldmljZSAqZCA9IGFtYmFfZGV2c1tpXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiMTFtcC5jCmluZGV4IDNlYmRiMmQuLmVhMWU2MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvcmVhbHZpZXdfcGIxMW1wLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYjExbXAuYwpAQCAtMjMwLDMxICsyMzAsMTkgQEAKIAl9LAogfTsKIAotc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X3BiMTFtcF9jZl9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVhbHZpZXdfcGIxMW1wX2lzcDE3NjFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJCT0gUkVBTFZJRVdfUEIxMU1QX0NGX0JBU0UsCi0JCS5lbmQJCT0gUkVBTFZJRVdfUEIxMU1QX0NGX0JBU0UgKyBTWl80SyAtIDEsCisJCS5zdGFydAkJPSBSRUFMVklFV19QQjExTVBfVVNCX0JBU0UsCisJCS5lbmQJCT0gUkVBTFZJRVdfUEIxMU1QX1VTQl9CQVNFICsgU1pfMTI4SyAtIDEsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CQk9IFJFQUxWSUVXX1BCMTFNUF9DRl9NRU1fQkFTRSwKLQkJLmVuZAkJPSBSRUFMVklFV19QQjExTVBfQ0ZfTUVNX0JBU0UgKyBTWl80SyAtIDEsCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsyXSA9IHsKLQkJLnN0YXJ0CQk9IC0xLAkJLyogRklYTUU6IEZpbmQgY29ycmVjdCBpcnEgKi8KLQkJLmVuZAkJPSAtMSwKKwkJLnN0YXJ0CQk9IElSUV9UQzExTVBfVVNCLAorCQkuZW5kCQk9IElSUV9UQzExTVBfVVNCLAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmVhbHZpZXdfcGIxMW1wX2NmX2RldmljZSA9IHsKLQkubmFtZQkJPSAiY29tcGFjdGZsYXNoIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocmVhbHZpZXdfcGIxMW1wX2NmX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gcmVhbHZpZXdfcGIxMW1wX2NmX3Jlc291cmNlcywKLX07Ci0KIHN0YXRpYyB2b2lkIF9faW5pdCBnaWNfaW5pdF9pcnEodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgcGxkY3RybDsKQEAgLTMwOCw3ICsyOTYsOCBAQAogCQkJCUFSUkFZX1NJWkUocmVhbHZpZXdfcGIxMW1wX2ZsYXNoX3Jlc291cmNlKSk7CiAJcmVhbHZpZXdfZXRoX3JlZ2lzdGVyKE5VTEwsIHJlYWx2aWV3X3BiMTFtcF9zbXNjOTExeF9yZXNvdXJjZXMpOwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfaTJjX2RldmljZSk7Ci0JcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyZWFsdmlld19wYjExbXBfY2ZfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2NmX2RldmljZSk7CisJcmVhbHZpZXdfdXNiX3JlZ2lzdGVyKHJlYWx2aWV3X3BiMTFtcF9pc3AxNzYxX3Jlc291cmNlcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9yZWFsdmlld19wYmE4LmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYwppbmRleCAzNGM5NDQzLi5kNmFjMWViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3JlYWx2aWV3X3BiYTguYwpAQCAtMjIxLDMxICsyMjEsMTkgQEAKIAl9LAogfTsKIAotc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X3BiYThfY2ZfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJlYWx2aWV3X3BiYThfaXNwMTc2MV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydAkJPSBSRUFMVklFV19QQkE4X0NGX0JBU0UsCi0JCS5lbmQJCT0gUkVBTFZJRVdfUEJBOF9DRl9CQVNFICsgU1pfNEsgLSAxLAorCQkuc3RhcnQJCT0gUkVBTFZJRVdfUEJBOF9VU0JfQkFTRSwKKwkJLmVuZAkJPSBSRUFMVklFV19QQkE4X1VTQl9CQVNFICsgU1pfMTI4SyAtIDEsCiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CQk9IFJFQUxWSUVXX1BCQThfQ0ZfTUVNX0JBU0UsCi0JCS5lbmQJCT0gUkVBTFZJRVdfUEJBOF9DRl9NRU1fQkFTRSArIFNaXzRLIC0gMSwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJCT0gLTEsCQkvKiBGSVhNRTogRmluZCBjb3JyZWN0IGlycSAqLwotCQkuZW5kCQk9IC0xLAorCQkuc3RhcnQJCT0gSVJRX1BCQThfVVNCLAorCQkuZW5kCQk9IElSUV9QQkE4X1VTQiwKIAkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJlYWx2aWV3X3BiYThfY2ZfZGV2aWNlID0gewotCS5uYW1lCQk9ICJjb21wYWN0Zmxhc2giLAotCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShyZWFsdmlld19wYmE4X2NmX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gcmVhbHZpZXdfcGJhOF9jZl9yZXNvdXJjZXMsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2ljX2luaXRfaXJxKHZvaWQpCiB7CiAJLyogQVJNIFBCLUE4IG9uLWJvYXJkIEdJQyAqLwpAQCAtMjc2LDcgKzI2NCw4IEBACiAJCQkJQVJSQVlfU0laRShyZWFsdmlld19wYmE4X2ZsYXNoX3Jlc291cmNlKSk7CiAJcmVhbHZpZXdfZXRoX3JlZ2lzdGVyKE5VTEwsIHJlYWx2aWV3X3BiYThfc21zYzkxMXhfcmVzb3VyY2VzKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJlYWx2aWV3X2kyY19kZXZpY2UpOwotCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfcGJhOF9jZl9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcmVhbHZpZXdfY2ZfZGV2aWNlKTsKKwlyZWFsdmlld191c2JfcmVnaXN0ZXIocmVhbHZpZXdfcGJhOF9pc3AxNzYxX3Jlc291cmNlcyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKIAkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ycGMvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXJwYy9kbWEuYwppbmRleCA3OTU4YTMwLi5jNDdkOTc0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJwYy9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXJwYy9kbWEuYwpAQCAtMjYsNiArMjYsMTYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9kbWEuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgogCitzdHJ1Y3QgaW9tZF9kbWEgeworCXN0cnVjdCBkbWFfc3RydWN0CWRtYTsKKwl1bnNpZ25lZCBpbnQJCXN0YXRlOworCXVuc2lnbmVkIGxvbmcJCWJhc2U7CQkvKiBDb250cm9sbGVyIGJhc2UgYWRkcmVzcyAqLworCWludAkJCWlycTsJCS8qIENvbnRyb2xsZXIgSVJRICovCisJc3RydWN0IHNjYXR0ZXJsaXN0CWN1cl9zZzsJCS8qIEN1cnJlbnQgY29udHJvbGxlciBidWZmZXIgKi8KKwlkbWFfYWRkcl90CQlkbWFfYWRkcjsKKwl1bnNpZ25lZCBpbnQJCWRtYV9sZW47Cit9OworCiAjaWYgMAogdHlwZWRlZiBlbnVtIHsKIAlkbWFfc2l6ZV84CT0gMSwKQEAgLTQ0LDE1ICs1NCwxNSBAQAogI2RlZmluZSBDUgkoSU9NRF9JTzBDUiAtIElPTURfSU8wQ1VSQSkKICNkZWZpbmUgU1QJKElPTURfSU8wU1QgLSBJT01EX0lPMENVUkEpCiAKLXN0YXRpYyB2b2lkIGlvbWRfZ2V0X25leHRfc2coc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIGlvbWRfZ2V0X25leHRfc2coc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgc3RydWN0IGlvbWRfZG1hICppZG1hKQogewogCXVuc2lnbmVkIGxvbmcgZW5kLCBvZmZzZXQsIGZsYWdzID0gMDsKIAotCWlmIChkbWEtPnNnKSB7Ci0JCXNnLT5kbWFfYWRkcmVzcyA9IGRtYS0+c2ctPmRtYV9hZGRyZXNzOworCWlmIChpZG1hLT5kbWEuc2cpIHsKKwkJc2ctPmRtYV9hZGRyZXNzID0gaWRtYS0+ZG1hX2FkZHI7CiAJCW9mZnNldCA9IHNnLT5kbWFfYWRkcmVzcyAmIH5QQUdFX01BU0s7CiAKLQkJZW5kID0gb2Zmc2V0ICsgZG1hLT5zZy0+bGVuZ3RoOworCQllbmQgPSBvZmZzZXQgKyBpZG1hLT5kbWFfbGVuOwogCiAJCWlmIChlbmQgPiBQQUdFX1NJWkUpCiAJCQllbmQgPSBQQUdFX1NJWkU7CkBAIC02MiwxNSArNzIsMTcgQEAKIAogCQlzZy0+bGVuZ3RoID0gZW5kIC0gVFJBTlNGRVJfU0laRTsKIAotCQlkbWEtPnNnLT5sZW5ndGggLT0gZW5kIC0gb2Zmc2V0OwotCQlkbWEtPnNnLT5kbWFfYWRkcmVzcyArPSBlbmQgLSBvZmZzZXQ7CisJCWlkbWEtPmRtYV9sZW4gLT0gZW5kIC0gb2Zmc2V0OworCQlpZG1hLT5kbWFfYWRkciArPSBlbmQgLSBvZmZzZXQ7CiAKLQkJaWYgKGRtYS0+c2ctPmxlbmd0aCA9PSAwKSB7Ci0JCQlpZiAoZG1hLT5zZ2NvdW50ID4gMSkgewotCQkJCWRtYS0+c2crKzsKLQkJCQlkbWEtPnNnY291bnQtLTsKKwkJaWYgKGlkbWEtPmRtYV9sZW4gPT0gMCkgeworCQkJaWYgKGlkbWEtPmRtYS5zZ2NvdW50ID4gMSkgeworCQkJCWlkbWEtPmRtYS5zZyA9IHNnX25leHQoaWRtYS0+ZG1hLnNnKTsKKwkJCQlpZG1hLT5kbWFfYWRkciA9IGlkbWEtPmRtYS5zZy0+ZG1hX2FkZHJlc3M7CisJCQkJaWRtYS0+ZG1hX2xlbiA9IGlkbWEtPmRtYS5zZy0+bGVuZ3RoOworCQkJCWlkbWEtPmRtYS5zZ2NvdW50LS07CiAJCQl9IGVsc2UgewotCQkJCWRtYS0+c2cgPSBOVUxMOworCQkJCWlkbWEtPmRtYS5zZyA9IE5VTEw7CiAJCQkJZmxhZ3MgfD0gRE1BX0VORF9TOwogCQkJfQogCQl9CkBAIC04NSw4ICs5Nyw4IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpb21kX2RtYV9oYW5kbGUoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCWRtYV90ICpkbWEgPSAoZG1hX3QgKilkZXZfaWQ7Ci0JdW5zaWduZWQgbG9uZyBiYXNlID0gZG1hLT5kbWFfYmFzZTsKKwlzdHJ1Y3QgaW9tZF9kbWEgKmlkbWEgPSBkZXZfaWQ7CisJdW5zaWduZWQgbG9uZyBiYXNlID0gaWRtYS0+YmFzZTsKIAogCWRvIHsKIAkJdW5zaWduZWQgaW50IHN0YXR1czsKQEAgLTk1LDkzICsxMDcsOTkgQEAKIAkJaWYgKCEoc3RhdHVzICYgRE1BX1NUX0lOVCkpCiAJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLQkJaWYgKChkbWEtPnN0YXRlIF4gc3RhdHVzKSAmIERNQV9TVF9BQikKLQkJCWlvbWRfZ2V0X25leHRfc2coJmRtYS0+Y3VyX3NnLCBkbWEpOworCQlpZiAoKGlkbWEtPnN0YXRlIF4gc3RhdHVzKSAmIERNQV9TVF9BQikKKwkJCWlvbWRfZ2V0X25leHRfc2coJmlkbWEtPmN1cl9zZywgaWRtYSk7CiAKIAkJc3dpdGNoIChzdGF0dXMgJiAoRE1BX1NUX09GTCB8IERNQV9TVF9BQikpIHsKIAkJY2FzZSBETUFfU1RfT0ZMOgkJCS8qIE9JQSAqLwogCQljYXNlIERNQV9TVF9BQjoJCQkJLyogLklCICovCi0JCQlpb21kX3dyaXRlbChkbWEtPmN1cl9zZy5kbWFfYWRkcmVzcywgYmFzZSArIENVUkEpOwotCQkJaW9tZF93cml0ZWwoZG1hLT5jdXJfc2cubGVuZ3RoLCBiYXNlICsgRU5EQSk7Ci0JCQlkbWEtPnN0YXRlID0gRE1BX1NUX0FCOworCQkJaW9tZF93cml0ZWwoaWRtYS0+Y3VyX3NnLmRtYV9hZGRyZXNzLCBiYXNlICsgQ1VSQSk7CisJCQlpb21kX3dyaXRlbChpZG1hLT5jdXJfc2cubGVuZ3RoLCBiYXNlICsgRU5EQSk7CisJCQlpZG1hLT5zdGF0ZSA9IERNQV9TVF9BQjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgRE1BX1NUX09GTCB8IERNQV9TVF9BQjoJCS8qIE9JQiAqLwogCQljYXNlIDA6CQkJCQkvKiAuSUEgKi8KLQkJCWlvbWRfd3JpdGVsKGRtYS0+Y3VyX3NnLmRtYV9hZGRyZXNzLCBiYXNlICsgQ1VSQik7Ci0JCQlpb21kX3dyaXRlbChkbWEtPmN1cl9zZy5sZW5ndGgsIGJhc2UgKyBFTkRCKTsKLQkJCWRtYS0+c3RhdGUgPSAwOworCQkJaW9tZF93cml0ZWwoaWRtYS0+Y3VyX3NnLmRtYV9hZGRyZXNzLCBiYXNlICsgQ1VSQik7CisJCQlpb21kX3dyaXRlbChpZG1hLT5jdXJfc2cubGVuZ3RoLCBiYXNlICsgRU5EQik7CisJCQlpZG1hLT5zdGF0ZSA9IDA7CiAJCQlicmVhazsKIAkJfQogCiAJCWlmIChzdGF0dXMgJiBETUFfU1RfT0ZMICYmCi0JCSAgICBkbWEtPmN1cl9zZy5sZW5ndGggPT0gKERNQV9FTkRfU3xETUFfRU5EX0wpKQorCQkgICAgaWRtYS0+Y3VyX3NnLmxlbmd0aCA9PSAoRE1BX0VORF9TfERNQV9FTkRfTCkpCiAJCQlicmVhazsKIAl9IHdoaWxlICgxKTsKIAotCWRtYS0+c3RhdGUgPSB+RE1BX1NUX0FCOworCWlkbWEtPnN0YXRlID0gfkRNQV9TVF9BQjsKIAlkaXNhYmxlX2lycShpcnEpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IGlvbWRfcmVxdWVzdF9kbWEoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RhdGljIGludCBpb21kX3JlcXVlc3RfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewotCXJldHVybiByZXF1ZXN0X2lycShkbWEtPmRtYV9pcnEsIGlvbWRfZG1hX2hhbmRsZSwKLQkJCSAgIElSUUZfRElTQUJMRUQsIGRtYS0+ZGV2aWNlX2lkLCBkbWEpOworCXN0cnVjdCBpb21kX2RtYSAqaWRtYSA9IGNvbnRhaW5lcl9vZihkbWEsIHN0cnVjdCBpb21kX2RtYSwgZG1hKTsKKworCXJldHVybiByZXF1ZXN0X2lycShpZG1hLT5pcnEsIGlvbWRfZG1hX2hhbmRsZSwKKwkJCSAgIElSUUZfRElTQUJMRUQsIGlkbWEtPmRtYS5kZXZpY2VfaWQsIGlkbWEpOwogfQogCi1zdGF0aWMgdm9pZCBpb21kX2ZyZWVfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIGlvbWRfZnJlZV9kbWEodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7Ci0JZnJlZV9pcnEoZG1hLT5kbWFfaXJxLCBkbWEpOworCXN0cnVjdCBpb21kX2RtYSAqaWRtYSA9IGNvbnRhaW5lcl9vZihkbWEsIHN0cnVjdCBpb21kX2RtYSwgZG1hKTsKKworCWZyZWVfaXJxKGlkbWEtPmlycSwgaWRtYSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlvbWRfZW5hYmxlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBpb21kX2VuYWJsZV9kbWEodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7Ci0JdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IGRtYS0+ZG1hX2Jhc2U7CisJc3RydWN0IGlvbWRfZG1hICppZG1hID0gY29udGFpbmVyX29mKGRtYSwgc3RydWN0IGlvbWRfZG1hLCBkbWEpOworCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBpZG1hLT5iYXNlOwogCXVuc2lnbmVkIGludCBjdHJsID0gVFJBTlNGRVJfU0laRSB8IERNQV9DUl9FOwogCi0JaWYgKGRtYS0+aW52YWxpZCkgewotCQlkbWEtPmludmFsaWQgPSAwOworCWlmIChpZG1hLT5kbWEuaW52YWxpZCkgeworCQlpZG1hLT5kbWEuaW52YWxpZCA9IDA7CiAKIAkJLyoKIAkJICogQ29wZSB3aXRoIElTQS1zdHlsZSBkcml2ZXJzIHdoaWNoIGV4cGVjdCBjYWNoZQogCQkgKiBjb2hlcmVuY2UuCiAJCSAqLwotCQlpZiAoIWRtYS0+c2cpIHsKLQkJCWRtYS0+c2cgPSAmZG1hLT5idWY7Ci0JCQlkbWEtPnNnY291bnQgPSAxOwotCQkJZG1hLT5idWYubGVuZ3RoID0gZG1hLT5jb3VudDsKLQkJCWRtYS0+YnVmLmRtYV9hZGRyZXNzID0gZG1hX21hcF9zaW5nbGUoTlVMTCwKLQkJCQlkbWEtPmFkZHIsIGRtYS0+Y291bnQsCi0JCQkJZG1hLT5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEID8KKwkJaWYgKCFpZG1hLT5kbWEuc2cpIHsKKwkJCWlkbWEtPmRtYS5zZyA9ICZpZG1hLT5kbWEuYnVmOworCQkJaWRtYS0+ZG1hLnNnY291bnQgPSAxOworCQkJaWRtYS0+ZG1hLmJ1Zi5sZW5ndGggPSBpZG1hLT5kbWEuY291bnQ7CisJCQlpZG1hLT5kbWEuYnVmLmRtYV9hZGRyZXNzID0gZG1hX21hcF9zaW5nbGUoTlVMTCwKKwkJCQlpZG1hLT5kbWEuYWRkciwgaWRtYS0+ZG1hLmNvdW50LAorCQkJCWlkbWEtPmRtYS5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEID8KIAkJCQlETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKIAkJfQogCiAJCWlvbWRfd3JpdGViKERNQV9DUl9DLCBkbWFfYmFzZSArIENSKTsKLQkJZG1hLT5zdGF0ZSA9IERNQV9TVF9BQjsKKwkJaWRtYS0+c3RhdGUgPSBETUFfU1RfQUI7CiAJfQotCQkKLQlpZiAoZG1hLT5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEKQorCisJaWYgKGlkbWEtPmRtYS5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEKQogCQljdHJsIHw9IERNQV9DUl9EOwogCiAJaW9tZF93cml0ZWIoY3RybCwgZG1hX2Jhc2UgKyBDUik7Ci0JZW5hYmxlX2lycShkbWEtPmRtYV9pcnEpOworCWVuYWJsZV9pcnEoaWRtYS0+aXJxKTsKIH0KIAotc3RhdGljIHZvaWQgaW9tZF9kaXNhYmxlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBpb21kX2Rpc2FibGVfZG1hKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hKQogewotCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBkbWEtPmRtYV9iYXNlOworCXN0cnVjdCBpb21kX2RtYSAqaWRtYSA9IGNvbnRhaW5lcl9vZihkbWEsIHN0cnVjdCBpb21kX2RtYSwgZG1hKTsKKwl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gaWRtYS0+YmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWlmIChkbWEtPnN0YXRlICE9IH5ETUFfU1RfQUIpCi0JCWRpc2FibGVfaXJxKGRtYS0+ZG1hX2lycSk7CisJaWYgKGlkbWEtPnN0YXRlICE9IH5ETUFfU1RfQUIpCisJCWRpc2FibGVfaXJxKGlkbWEtPmlycSk7CiAJaW9tZF93cml0ZWIoMCwgZG1hX2Jhc2UgKyBDUik7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IGlvbWRfc2V0X2RtYV9zcGVlZChkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEsIGludCBjeWNsZSkKK3N0YXRpYyBpbnQgaW9tZF9zZXRfZG1hX3NwZWVkKHVuc2lnbmVkIGludCBjaGFuLCBkbWFfdCAqZG1hLCBpbnQgY3ljbGUpCiB7CiAJaW50IHRjciwgc3BlZWQ7CiAKQEAgLTE5Nyw3ICsyMTUsNyBAQAogCXRjciA9IGlvbWRfcmVhZGIoSU9NRF9ETUFUQ1IpOwogCXNwZWVkICY9IDM7CiAKLQlzd2l0Y2ggKGNoYW5uZWwpIHsKKwlzd2l0Y2ggKGNoYW4pIHsKIAljYXNlIERNQV8wOgogCQl0Y3IgPSAodGNyICYgfjB4MDMpIHwgc3BlZWQ7CiAJCWJyZWFrOwpAQCAtMjM2LDE2ICsyNTQsMjIgQEAKIAkubmFtZQk9ICJmbG9wcHlkbWEiCiB9OwogCi1zdGF0aWMgdm9pZCBmbG9wcHlfZW5hYmxlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdHJ1Y3QgZmxvcHB5X2RtYSB7CisJc3RydWN0IGRtYV9zdHJ1Y3QJZG1hOworCXVuc2lnbmVkIGludAkJZmlxOworfTsKKworc3RhdGljIHZvaWQgZmxvcHB5X2VuYWJsZV9kbWEodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7CisJc3RydWN0IGZsb3BweV9kbWEgKmZkbWEgPSBjb250YWluZXJfb2YoZG1hLCBzdHJ1Y3QgZmxvcHB5X2RtYSwgZG1hKTsKIAl2b2lkICpmaXFoYW5kbGVyX3N0YXJ0OwogCXVuc2lnbmVkIGludCBmaXFoYW5kbGVyX2xlbmd0aDsKIAlzdHJ1Y3QgcHRfcmVncyByZWdzOwogCi0JaWYgKGRtYS0+c2cpCisJaWYgKGZkbWEtPmRtYS5zZykKIAkJQlVHKCk7CiAKLQlpZiAoZG1hLT5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEKSB7CisJaWYgKGZkbWEtPmRtYS5kbWFfbW9kZSA9PSBETUFfTU9ERV9SRUFEKSB7CiAJCWV4dGVybiB1bnNpZ25lZCBjaGFyIGZsb3BweV9maXFpbl9zdGFydCwgZmxvcHB5X2ZpcWluX2VuZDsKIAkJZmlxaGFuZGxlcl9zdGFydCA9ICZmbG9wcHlfZmlxaW5fc3RhcnQ7CiAJCWZpcWhhbmRsZXJfbGVuZ3RoID0gJmZsb3BweV9maXFpbl9lbmQgLSAmZmxvcHB5X2ZpcWluX3N0YXJ0OwpAQCAtMjU1LDggKzI3OSw4IEBACiAJCWZpcWhhbmRsZXJfbGVuZ3RoID0gJmZsb3BweV9maXFvdXRfZW5kIC0gJmZsb3BweV9maXFvdXRfc3RhcnQ7CiAJfQogCi0JcmVncy5BUk1fcjkgID0gZG1hLT5jb3VudDsKLQlyZWdzLkFSTV9yMTAgPSAodW5zaWduZWQgbG9uZylkbWEtPmFkZHI7CisJcmVncy5BUk1fcjkgID0gZmRtYS0+ZG1hLmNvdW50OworCXJlZ3MuQVJNX3IxMCA9ICh1bnNpZ25lZCBsb25nKWZkbWEtPmRtYS5hZGRyOwogCXJlZ3MuQVJNX2ZwICA9ICh1bnNpZ25lZCBsb25nKUZMT1BQWURNQV9CQVNFOwogCiAJaWYgKGNsYWltX2ZpcSgmZmgpKSB7CkBAIC0yNjYsMTYgKzI5MCwxNyBAQAogCiAJc2V0X2ZpcV9oYW5kbGVyKGZpcWhhbmRsZXJfc3RhcnQsIGZpcWhhbmRsZXJfbGVuZ3RoKTsKIAlzZXRfZmlxX3JlZ3MoJnJlZ3MpOwotCWVuYWJsZV9maXEoZG1hLT5kbWFfaXJxKTsKKwllbmFibGVfZmlxKGZkbWEtPmZpcSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsb3BweV9kaXNhYmxlX2RtYShkbWFjaF90IGNoYW5uZWwsIGRtYV90ICpkbWEpCitzdGF0aWMgdm9pZCBmbG9wcHlfZGlzYWJsZV9kbWEodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7Ci0JZGlzYWJsZV9maXEoZG1hLT5kbWFfaXJxKTsKKwlzdHJ1Y3QgZmxvcHB5X2RtYSAqZmRtYSA9IGNvbnRhaW5lcl9vZihkbWEsIHN0cnVjdCBmbG9wcHlfZG1hLCBkbWEpOworCWRpc2FibGVfZmlxKGZkbWEtPmZpcSk7CiAJcmVsZWFzZV9maXEoJmZoKTsKIH0KIAotc3RhdGljIGludCBmbG9wcHlfZ2V0X3Jlc2lkdWUoZG1hY2hfdCBjaGFubmVsLCBkbWFfdCAqZG1hKQorc3RhdGljIGludCBmbG9wcHlfZ2V0X3Jlc2lkdWUodW5zaWduZWQgaW50IGNoYW4sIGRtYV90ICpkbWEpCiB7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKIAlnZXRfZmlxX3JlZ3MoJnJlZ3MpOwpAQCAtMjkyLDcgKzMxNyw3IEBACiAvKgogICogVGhpcyBpcyB2aXJ0dWFsIERNQSAtIHdlIGRvbid0IG5lZWQgYW55dGhpbmcgaGVyZS4KICAqLwotc3RhdGljIHZvaWQgc291bmRfZW5hYmxlX2Rpc2FibGVfZG1hKGRtYWNoX3QgY2hhbm5lbCwgZG1hX3QgKmRtYSkKK3N0YXRpYyB2b2lkIHNvdW5kX2VuYWJsZV9kaXNhYmxlX2RtYSh1bnNpZ25lZCBpbnQgY2hhbiwgZG1hX3QgKmRtYSkKIHsKIH0KIApAQCAtMzAyLDggKzMyNywyNCBAQAogCS5kaXNhYmxlCT0gc291bmRfZW5hYmxlX2Rpc2FibGVfZG1hLAogfTsKIAotdm9pZCBfX2luaXQgYXJjaF9kbWFfaW5pdChkbWFfdCAqZG1hKQorc3RhdGljIHN0cnVjdCBpb21kX2RtYSBpb21kX2RtYVs2XTsKKworc3RhdGljIHN0cnVjdCBmbG9wcHlfZG1hIGZsb3BweV9kbWEgPSB7CisJLmRtYQkJPSB7CisJCS5kX29wcwk9ICZmbG9wcHlfZG1hX29wcywKKwl9LAorCS5maXEJCT0gRklRX0ZMT1BQWURBVEEsCit9OworCitzdGF0aWMgZG1hX3Qgc291bmRfZG1hID0geworCS5kX29wcwkJPSAmc291bmRfZG1hX29wcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHJwY19kbWFfaW5pdCh2b2lkKQogeworCXVuc2lnbmVkIGludCBpOworCWludCByZXQ7CisKIAlpb21kX3dyaXRlYigwLCBJT01EX0lPMENSKTsKIAlpb21kX3dyaXRlYigwLCBJT01EX0lPMUNSKTsKIAlpb21kX3dyaXRlYigwLCBJT01EX0lPMkNSKTsKQEAgLTMxMSwzMSArMzUyLDM5IEBACiAKIAlpb21kX3dyaXRlYigweGEwLCBJT01EX0RNQVRDUik7CiAKLQlkbWFbRE1BXzBdLmRtYV9iYXNlCQk9IElPTURfSU8wQ1VSQTsKLQlkbWFbRE1BXzBdLmRtYV9pcnEJCT0gSVJRX0RNQTA7Ci0JZG1hW0RNQV8wXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOwotCWRtYVtETUFfMV0uZG1hX2Jhc2UJCT0gSU9NRF9JTzFDVVJBOwotCWRtYVtETUFfMV0uZG1hX2lycQkJPSBJUlFfRE1BMTsKLQlkbWFbRE1BXzFdLmRfb3BzCQk9ICZpb21kX2RtYV9vcHM7Ci0JZG1hW0RNQV8yXS5kbWFfYmFzZQkJPSBJT01EX0lPMkNVUkE7Ci0JZG1hW0RNQV8yXS5kbWFfaXJxCQk9IElSUV9ETUEyOwotCWRtYVtETUFfMl0uZF9vcHMJCT0gJmlvbWRfZG1hX29wczsKLQlkbWFbRE1BXzNdLmRtYV9iYXNlCQk9IElPTURfSU8zQ1VSQTsKLQlkbWFbRE1BXzNdLmRtYV9pcnEJCT0gSVJRX0RNQTM7Ci0JZG1hW0RNQV8zXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOwotCWRtYVtETUFfUzBdLmRtYV9iYXNlCQk9IElPTURfU0QwQ1VSQTsKLQlkbWFbRE1BX1MwXS5kbWFfaXJxCQk9IElSUV9ETUFTMDsKLQlkbWFbRE1BX1MwXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOwotCWRtYVtETUFfUzFdLmRtYV9iYXNlCQk9IElPTURfU0QxQ1VSQTsKLQlkbWFbRE1BX1MxXS5kbWFfaXJxCQk9IElSUV9ETUFTMTsKLQlkbWFbRE1BX1MxXS5kX29wcwkJPSAmaW9tZF9kbWFfb3BzOwotCWRtYVtETUFfVklSVFVBTF9GTE9QUFldLmRtYV9pcnEJPSBGSVFfRkxPUFBZREFUQTsKLQlkbWFbRE1BX1ZJUlRVQUxfRkxPUFBZXS5kX29wcwk9ICZmbG9wcHlfZG1hX29wczsKLQlkbWFbRE1BX1ZJUlRVQUxfU09VTkRdLmRfb3BzCT0gJnNvdW5kX2RtYV9vcHM7Ci0KIAkvKgogCSAqIFNldHVwIERNQSBjaGFubmVscyAyLDMgdG8gYmUgZm9yIHBvZHVsZXMKIAkgKiBhbmQgY2hhbm5lbHMgMCwxIGZvciBpbnRlcm5hbCBkZXZpY2VzCiAJICovCiAJaW9tZF93cml0ZWIoRE1BX0VYVF9JTzN8RE1BX0VYVF9JTzIsIElPTURfRE1BRVhUKTsKKworCWlvbWRfZG1hW0RNQV8wXS5iYXNlCT0gSU9NRF9JTzBDVVJBOworCWlvbWRfZG1hW0RNQV8wXS5pcnEJPSBJUlFfRE1BMDsKKwlpb21kX2RtYVtETUFfMV0uYmFzZQk9IElPTURfSU8xQ1VSQTsKKwlpb21kX2RtYVtETUFfMV0uaXJxCT0gSVJRX0RNQTE7CisJaW9tZF9kbWFbRE1BXzJdLmJhc2UJPSBJT01EX0lPMkNVUkE7CisJaW9tZF9kbWFbRE1BXzJdLmlycQk9IElSUV9ETUEyOworCWlvbWRfZG1hW0RNQV8zXS5iYXNlCT0gSU9NRF9JTzNDVVJBOworCWlvbWRfZG1hW0RNQV8zXS5pcnEJPSBJUlFfRE1BMzsKKwlpb21kX2RtYVtETUFfUzBdLmJhc2UJPSBJT01EX1NEMENVUkE7CisJaW9tZF9kbWFbRE1BX1MwXS5pcnEJPSBJUlFfRE1BUzA7CisJaW9tZF9kbWFbRE1BX1MxXS5iYXNlCT0gSU9NRF9TRDFDVVJBOworCWlvbWRfZG1hW0RNQV9TMV0uaXJxCT0gSVJRX0RNQVMxOworCisJZm9yIChpID0gRE1BXzA7IGkgPD0gRE1BX1MxOyBpKyspIHsKKwkJaW9tZF9kbWFbaV0uZG1hLmRfb3BzID0gJmlvbWRfZG1hX29wczsKKworCQlyZXQgPSBpc2FfZG1hX2FkZChpLCAmaW9tZF9kbWFbaV0uZG1hKTsKKwkJaWYgKHJldCkKKwkJCXByaW50aygiSU9NRERNQSV1OiB1bmFibGUgdG8gcmVnaXN0ZXI6ICVkXG4iLCBpLCByZXQpOworCX0KKworCXJldCA9IGlzYV9kbWFfYWRkKERNQV9WSVJUVUFMX0ZMT1BQWSwgJmZsb3BweV9kbWEuZG1hKTsKKwlpZiAocmV0KQorCQlwcmludGsoIklPTURGTE9QUFk6IHVuYWJsZSB0byByZWdpc3RlcjogJWRcbiIsIHJldCk7CisJcmV0ID0gaXNhX2RtYV9hZGQoRE1BX1ZJUlRVQUxfU09VTkQsICZzb3VuZF9kbWEpOworCWlmIChyZXQpCisJCXByaW50aygiSU9NRFNPVU5EOiB1bmFibGUgdG8gcmVnaXN0ZXI6ICVkXG4iLCByZXQpOworCXJldHVybiAwOwogfQorY29yZV9pbml0Y2FsbChycGNfZG1hX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaCBiL2FyY2gvYXJtL21hY2gtcnBjL2luY2x1ZGUvbWFjaC9pc2EtZG1hLmgKaW5kZXggYmFkNzIwNS4uNjdiZmM2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLXJwYy9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCkBAIC0yMyw1ICsyMyw3IEBACiAKICNkZWZpbmUgRE1BX0ZMT1BQWQkJRE1BX1ZJUlRVQUxfRkxPUFBZCiAKKyNkZWZpbmUgSU9NRF9ETUFfQk9VTkRBUlkJKFBBR0VfU0laRSAtIDEpCisKICNlbmRpZiAvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGJkNzI2OGJhLi40NWM3YjkzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJwYy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1ycGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0xNiw3ICsxNiw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJaW9tZF93cml0ZWIoMCwgSU9NRF9ST01DUjApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKaW5kZXggNTUyYjRjNy4uNDQwYzAxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiBzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0MTBfZG1hX21hcHBpbmdzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8tbnJzLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8tbnJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UxZWM2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby1ucnMuaApAQCAtMCwwICsxLDIzIEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8tbnJzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0MTAgLSBHUElPIGJhbmsgbnVtYmVyaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDMjQxMF9HUElPTk8oYmFuayxvZmZzZXQpICgoYmFuaykgKyAob2Zmc2V0KSkKKworI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0EgICAoMzIqMCkKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktCICAgKDMyKjEpCisjZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LQyAgICgzMioyKQorI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0QgICAoMzIqMykKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktFICAgKDMyKjQpCisjZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LRiAgICgzMio1KQorI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0cgICAoMzIqNikKKyNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktIICAgKDMyKjcpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDAwNDc2YTUuLjUxYTg4Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0yMywzICsyMyw2IEBACiAjZGVmaW5lIEFSQ0hfTlJfR1BJT1MJKDI1NiArIENPTkZJR19TM0MyNFhYX0dQSU9fRVhUUkEpCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLW5ycy5oPgorCisjZGVmaW5lIFMzQ19HUElPX0VORAkoUzNDMjQxMF9HUElPX0JBTktIICsgMzIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDQ5ZWZjZTguLjJhMjM4NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC04MCw3ICs4MCw3IEBACiAjZGVmaW5lIElSUV9FSU5UMjIgICAgIFMzQzI0MTBfSVJRKDUwKQogI2RlZmluZSBJUlFfRUlOVDIzICAgICBTM0MyNDEwX0lSUSg1MSkKIAotCisjZGVmaW5lIElSUV9FSU5UX0JJVCh4KQkoKHgpIC0gSVJRX0VJTlQ0ICsgNCkKICNkZWZpbmUgSVJRX0VJTlQoeCkgICAgKCgoeCkgPj0gNCkgPyAoSVJRX0VJTlQ0ICsgKHgpIC0gNCkgOiAoSVJRX0VJTlQwICsgKHgpKSkKIAogI2RlZmluZSBJUlFfTENEX0ZJRk8gICBTM0MyNDEwX0lSUSg1MikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oCmluZGV4IDMyMTA3NzYuLjM1YTAzZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaApAQCAtMTQsMTYgKzE0LDcgQEAKICNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0dQSU9fSAogI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfR1BJT19ICiAKLSNkZWZpbmUgUzNDMjQxMF9HUElPTk8oYmFuayxvZmZzZXQpICgoYmFuaykgKyAob2Zmc2V0KSkKLQotI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0EgICAoMzIqMCkKLSNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktCICAgKDMyKjEpCi0jZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LQyAgICgzMioyKQotI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0QgICAoMzIqMykKLSNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktFICAgKDMyKjQpCi0jZGVmaW5lIFMzQzI0MTBfR1BJT19CQU5LRiAgICgzMio1KQotI2RlZmluZSBTM0MyNDEwX0dQSU9fQkFOS0cgICAoMzIqNikKLSNkZWZpbmUgUzNDMjQxMF9HUElPX0JBTktIICAgKDMyKjcpCisjaW5jbHVkZSA8bWFjaC9ncGlvLW5ycy5oPgogCiAjaWZkZWYgQ09ORklHX0NQVV9TM0MyNDAwCiAjZGVmaW5lIFMzQzI0WFhfR1BJT19CQVNFKHgpICBTM0MyNDAwX0dQSU9fQkFTRSh4KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0tcmVzZXQuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3lzdGVtLXJlc2V0LmgKaW5kZXggNzYxM2QwYS4uYjg2ODdmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0tcmVzZXQuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3N5c3RlbS1yZXNldC5oCkBAIC0yMiw3ICsyMiw3IEBACiBleHRlcm4gdm9pZCAoKnMzYzI0eHhfcmVzZXRfaG9vaykodm9pZCk7CiAKIHN0YXRpYyB2b2lkCi1hcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK2FyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJc3RydWN0IGNsayAqd2R0Y2xrOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkOTFkMTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91c2ItY29udHJvbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC91c2ItY29udHJvbC5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQzI0MTAgLSB1c2IgcG9ydCBpbmZvcm1hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9IICJhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3VzYi1jb250cm9sLmgiCi0KLSNkZWZpbmUgUzNDX0hDREZMR19VU0VECSgxKQotCi1zdHJ1Y3QgczNjMjQxMF9oY2RfcG9ydCB7Ci0JdW5zaWduZWQgY2hhcglmbGFnczsKLQl1bnNpZ25lZCBjaGFyCXBvd2VyOwotCXVuc2lnbmVkIGNoYXIJb2Nfc3RhdHVzOwotCXVuc2lnbmVkIGNoYXIJb2NfY2hhbmdlZDsKLX07Ci0KLXN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvIHsKLQlzdHJ1Y3QgdXNiX2hjZAkJKmhjZDsKLQlzdHJ1Y3QgczNjMjQxMF9oY2RfcG9ydAlwb3J0WzJdOwotCi0Jdm9pZAkJKCpwb3dlcl9jb250cm9sKShpbnQgcG9ydCwgaW50IHRvKTsKLQl2b2lkCQkoKmVuYWJsZV9vYykoc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKiwgaW50IG9uKTsKLQl2b2lkCQkoKnJlcG9ydF9vYykoc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKiwgaW50IHBvcnRzKTsKLX07Ci0KLXN0YXRpYyB2b2lkIGlubGluZSBzM2MyNDEwX3VzYl9yZXBvcnRfb2Moc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gKmluZm8sIGludCBwb3J0cykKLXsKLQlpZiAoaW5mby0+cmVwb3J0X29jICE9IE5VTEwpIHsKLQkJKGluZm8tPnJlcG9ydF9vYykoaW5mbywgcG9ydHMpOwotCX0KLX0KLQotI2VuZGlmIC8qX19BU01fQVJDSF9VU0JDT05UUk9MX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCmluZGV4IDgyMWExNjYuLjdhN2M0ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAjaWZkZWYgQ09ORklHX1BNX0gxOTQwCiAJbWVtY3B5KHBoeXNfdG9fdmlydChIMTk0MF9TVVNQRU5EX1JFU1VNRUFUKSwgaDE5NDBfcG1fcmV0dXJuLCAxMDI0KTsKICNlbmRpZgotCXMzYzI0MTBfcG1faW5pdCgpOworCXMzY19wbV9pbml0KCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBoMTk0MF9pbml0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcXQyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYwppbmRleCA5Njc4YTUzLi45ZjFiYTliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYwpAQCAtMzU1LDcgKzM1NSw3IEBACiAJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQQjUsIFMzQzI0MTBfR1BJT19PVVRQVVQpOwogCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocXQyNDEwX2RldmljZXMsIEFSUkFZX1NJWkUocXQyNDEwX2RldmljZXMpKTsKLQlzM2MyNDEwX3BtX2luaXQoKTsKKwlzM2NfcG1faW5pdCgpOwogfQogCiBNQUNISU5FX1NUQVJUKFFUMjQxMCwgIlFUMjQxMCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCmluZGV4IGE2OTcwZjYuLjg3ZmM0ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCkBAIC0zNywyMSArMzcsMTQgQEAKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAotI2lmZGVmIENPTkZJR19TM0MyNDEwX1BNX0RFQlVHCi1leHRlcm4gdm9pZCBwbV9kYmcoY29uc3QgY2hhciAqZm10LCAuLi4pOwotI2RlZmluZSBEQkcoZm10Li4uKSBwbV9kYmcoZm10KQotI2Vsc2UKLSNkZWZpbmUgREJHKGZtdC4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm10KQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fcHJlcGFyZSh2b2lkKQogewogCS8qIGVuc3VyZSBhdCBsZWFzdCBHU1RBVFVTMyBoYXMgdGhlIHJlc3VtZSBhZGRyZXNzICovCiAKLQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKHMzYzI0MTBfY3B1X3Jlc3VtZSksIFMzQzI0MTBfR1NUQVRVUzMpOworCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoczNjX2NwdV9yZXN1bWUpLCBTM0MyNDEwX0dTVEFUVVMzKTsKIAotCURCRygiR1NUQVRVUzMgMHglMDh4XG4iLCBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVMzKSk7Ci0JREJHKCJHU1RBVFVTNCAweCUwOHhcbiIsIF9fcmF3X3JlYWRsKFMzQzI0MTBfR1NUQVRVUzQpKTsKKwlTM0NfUE1EQkcoIkdTVEFUVVMzIDB4JTA4eFxuIiwgX19yYXdfcmVhZGwoUzNDMjQxMF9HU1RBVFVTMykpOworCVMzQ19QTURCRygiR1NUQVRVUzQgMHglMDh4XG4iLCBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVM0KSk7CiAKIAlpZiAobWFjaGluZV9pc19oMTk0MCgpKSB7CiAJCXZvaWQgKmJhc2UgPSBwaHlzX3RvX3ZpcnQoSDE5NDBfU1VTUEVORF9DSEVDSyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwppbmRleCA2MDc4ZjA5Li44MzMxZThkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKQEAgLTI5LDEzICsyOSwxNCBAQAogCiAjaW5jbHVkZSA8bWFjaC9iYXN0LW1hcC5oPgogI2luY2x1ZGUgPG1hY2gvYmFzdC1pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKyNpbmNsdWRlIDxwbGF0L3VzYi1jb250cm9sLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisKICNpbmNsdWRlICJ1c2Itc2ltdGVjLmgiCiAKIC8qIGNvbnRyb2wgcG93ZXIgYW5kIG1vbml0b3Igb3Zlci1jdXJyZW50IGV2ZW50cyBvbiB2YXJpb3VzIFNpbXRlYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCmluZGV4IDkxOTg1NmMuLjllMzQ3ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zZGkuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KIAogI2RlZmluZSBNQVAoeCkgeyAoeCl8IERNQV9DSF9WQUxJRCwgKHgpfCBETUFfQ0hfVkFMSUQsICh4KXwgRE1BX0NIX1ZBTElELCAoeCl8IERNQV9DSF9WQUxJRCB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMKaW5kZXggZWNkZGJiYi4uNzJjMjY2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYwpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJICogY29ycmVjdCBhZGRyZXNzIHRvIHJlc3VtZSBmcm9tLiAqLwogCiAJX19yYXdfd3JpdGVsKDB4MkJFRCwgUzNDMjQxMl9JTkZPUk0wKTsKLQlfX3Jhd193cml0ZWwodmlydF90b19waHlzKHMzYzI0MTBfY3B1X3Jlc3VtZSksIFMzQzI0MTJfSU5GT1JNMSk7CisJX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhzM2NfY3B1X3Jlc3VtZSksIFMzQzI0MTJfSU5GT1JNMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYzMCw3ICs2MzAsNyBAQAogCiAJLyogaW5pdGlhbGlzZSB0aGUgcG93ZXIgbWFuYWdlbWVudCBub3cgd2UndmUgc2V0dXAgZXZlcnl0aGluZy4gKi8KIAotCXMzYzI0MTBfcG1faW5pdCgpOworCXMzY19wbV9pbml0KCk7CiAKIAlzM2NfZGV2aWNlX25hbmQuZGV2LnBsYXRmb3JtX2RhdGEgPSAmaml2ZV9uYW5kX2luZm87CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3BtLmMKaW5kZXggMjE3ZTllNC4uYzljZmU0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3BtLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAogc3RhdGljIGludCBzM2MyNDEyX3BtX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXMzYzI0MTBfcG1fZG9fc2F2ZShzM2MyNDEyX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0MTJfc2xlZXApKTsKKwlzM2NfcG1fZG9fc2F2ZShzM2MyNDEyX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0MTJfc2xlZXApKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTgsNyArOTgsNyBAQAogCXRtcCB8PSAgUzNDMjQxMl9QV1JDRkdfU1RBTkRCWVdGSV9JRExFOwogCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzI0MTJfUFdSQ0ZHKTsKIAotCXMzYzI0MTBfcG1fZG9fcmVzdG9yZShzM2MyNDEyX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0MTJfc2xlZXApKTsKKwlzM2NfcG1fZG9fcmVzdG9yZShzM2MyNDEyX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0MTJfc2xlZXApKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCmluZGV4IDViNWVlMGIuLjY5YjZjZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtbWVtLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWxjZC5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zZGkuaD4KLSNpbmNsdWRlIDxhc20vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLWlpcy5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1zcGkuaD4KIAogc3RhdGljIHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgX19pbml0ZGF0YSBzM2MyNDQwX2RtYV9tYXBwaW5nc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtcngzNzE1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYwppbmRleCAxMmQzNzhmLi5iYzhkOGQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1yeDM3MTUuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAjaWZkZWYgQ09ORklHX1BNX0gxOTQwCiAJbWVtY3B5KHBoeXNfdG9fdmlydChIMTk0MF9TVVNQRU5EX1JFU1VNRUFUKSwgaDE5NDBfcG1fcmV0dXJuLCAxMDI0KTsKICNlbmRpZgotCXMzYzI0MTBfcG1faW5pdCgpOworCXMzY19wbV9pbml0KCk7CiAKIAlzM2MyNHh4X2ZiX3NldF9wbGF0ZGF0YSgmcngzNzE1X2ZiX2luZm8pOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHJ4MzcxNV9kZXZpY2VzLCBBUlJBWV9TSVpFKHJ4MzcxNV9kZXZpY2VzKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKaW5kZXggMmE1OGE0ZC4uODQzMGU1OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtbGNkLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNkaS5oPgotI2luY2x1ZGUgPGFzbS9wbGF0LXMzYzI0eHgvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtaWlzLmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNwaS5oPgogCiAjZGVmaW5lIE1BUCh4KSB7IFwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggYWU4YzBlMy4uODNjZTJhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNGEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTcwLDYgKzcwLDggQEAKICNkZWZpbmUgSVJRX0VJTlQxNwlTM0MyNDEwX0lSUSg0OSkKICNkZWZpbmUgSVJRX0VJTlQxOAlTM0MyNDEwX0lSUSg1MCkKIAorI2RlZmluZSBJUlFfRUlOVF9CSVQoeCkgKCh4KSAtIElSUV9FSU5UMDApCisKIC8qIFNVQiBJUlFTICovCiAjZGVmaW5lIElSUV9TM0NVQVJUX1JYMAkJUzNDMjQxMF9JUlEoNTEpCS8qIDY3ICovCiAjZGVmaW5lIElSUV9TM0NVQVJUX1RYMAkJUzNDMjQxMF9JUlEoNTIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCBjZmYyN2Q4Li5iYWYxYzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTUyLDYgKzUyLDkgQEAKICNkZWZpbmUgUzNDNjRYWF9QQV9WSUMwCQkoMHg3MTIwMDAwMCkKICNkZWZpbmUgUzNDNjRYWF9QQV9WSUMxCQkoMHg3MTMwMDAwMCkKIAorI2RlZmluZSBTM0M2NFhYX1BBX01PREVNCSgweDc0MTA4MDAwKQorI2RlZmluZSBTM0M2NFhYX1ZBX01PREVNCVMzQ19BRERSKDB4MDA2MDAwMDApCisKIC8qIHBsYWNlIFZJQ3MgY2xvc2UgdG9nZXRoZXIgKi8KICNkZWZpbmUgUzNDX1ZBX1ZJQzAJCShTM0NfVkFfSVJRICsgMHgwMCkKICNkZWZpbmUgUzNDX1ZBX1ZJQzEJCShTM0NfVkFfSVJRICsgMHgxMDAwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDY1MmJiYzQwLi4wOTBjZmQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAkvKiBub3RoaW5nIGhlcmUgeWV0ICovCiB9CiAKLXN0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAkvKiBub3RoaW5nIGhlcmUgeWV0ICovCiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvS2NvbmZpZwppbmRleCBmOTlkOTAxLi44MWZmZmY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL0tjb25maWcKQEAgLTcxLDE5ICs3MSw5IEBACiAJICA8aHR0cDovL3d3dy5oYW5kaGVsZHMub3JnL0NvbXBhcS9pbmRleC5odG1sI2lQQVFfSDM2MDA+CiAJICA8aHR0cDovL3d3dy5jb21wYXEuY29tL3Byb2R1Y3RzL2hhbmRoZWxkcy9wb2NrZXRwYy8+CiAKLWNvbmZpZyBTQTExMDBfSDM4MDAKLQlib29sICJDb21wYXEgaVBBUSBIMzgwMCIKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gcnVuIHRoaXMga2VybmVsIG9uIHRoZSBDb21wYXEgaVBBUSBIMzgwMAotCSAgc2VyaWVzIGhhbmRoZWxkIGNvbXB1dGVyLiAgSW5mb3JtYXRpb24gYWJvdXQgdGhpcyBtYWNoaW5lIGFuZCB0aGUKLQkgIExpbnV4IHBvcnQgdG8gdGhpcyBtYWNoaW5lIGNhbiBiZSBmb3VuZCBhdDoKLQotCSAgPGh0dHA6Ly93d3cuaGFuZGhlbGRzLm9yZy9Db21wYXEvaW5kZXguaHRtbCNpUEFRX0gzODAwPgotCSAgPGh0dHA6Ly93d3cuY29tcGFxLmNvbS9wcm9kdWN0cy9oYW5kaGVsZHMvcG9ja2V0cGMvPgotCiBjb25maWcgU0ExMTAwX0gzWFhYCiAJYm9vbAotCWRlcGVuZHMgb24gU0ExMTAwX0gzMTAwIHx8IFNBMTEwMF9IMzYwMCB8fCBTQTExMDBfSDM4MDAKKwlkZXBlbmRzIG9uIFNBMTEwMF9IMzEwMCB8fCBTQTExMDBfSDM2MDAKIAlkZWZhdWx0IHkKIAogY29uZmlnIFNBMTEwMF9CQURHRTQKQEAgLTE1NywxNSArMTQ3LDYgQEAKIAkgIFRoaXMgaXNuJ3QgZm9yIGF1ZGlvIHN1cHBvcnQsIGJ1dCBmb3IgYXR0YWNoZWQgc2Vuc29ycyBhbmQKIAkgIG90aGVyIGRldmljZXMsIGVnIGZvciBCYWRnZVBBRCA0IHNlbnNvciBzdXBwb3J0LgogCi1jb25maWcgSDM2MDBfU0xFRVZFCi0JdHJpc3RhdGUgIkNvbXBhcSBpUEFRIEhhbmRoZWxkIHNsZWV2ZSBzdXBwb3J0IgotCWRlcGVuZHMgb24gU0ExMTAwX0gzMTAwIHx8IFNBMTEwMF9IMzYwMAotCWhlbHAKLQkgIENob29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgc3VwcG9ydCBmb3IgZXh0ZW5zaW9uIHBhY2tzIChzbGVldmVzKQotCSAgZm9yIHRoZSBDb21wYXEgaVBBUSBIM1hYWCBzZXJpZXMgb2YgaGFuZGhlbGQgY29tcHV0ZXJzLiAgVGhpcyBvcHRpb24KLQkgIGlzIHJlcXVpcmVkIGZvciB0aGUgQ0YsIFBDTUNJQSwgQmx1ZXRvb3RoIGFuZCBHU00vR1BSUyBleHRlbnNpb24KLQkgIHBhY2tzLgotCiBlbmRtZW51CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCmluZGV4IDIwNTJlYjguLmJiZjJlYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTE0NSw3ICsxNDYsOCBAQAogCS5yZW1vdmUJPSBjb2xsaWVfdWFydF9yZW1vdmUsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBjb2xsaWVfdWFydF9pbml0KHZvaWQpIHsKK3N0YXRpYyBpbnQgX19pbml0IGNvbGxpZV91YXJ0X2luaXQodm9pZCkKK3sKIAlyZXR1cm4gbG9jb21vX2RyaXZlcl9yZWdpc3RlcigmY29sbGllX3VhcnRfZHJpdmVyKTsKIH0KIGRldmljZV9pbml0Y2FsbChjb2xsaWVfdWFydF9pbml0KTsKQEAgLTE5NSwxOCArMTk3LDM0IEBACiAJfQogfTsKIAorc3RhdGljIGludCBjb2xsaWVfZmxhc2hfaW5pdCh2b2lkKQoreworCWludCByYyA9IGdwaW9fcmVxdWVzdChDT0xMSUVfR1BJT19WUEVOLCAiZmxhc2ggVnBwIGVuYWJsZSIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmMgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoQ09MTElFX0dQSU9fVlBFTiwgMSk7CisJaWYgKHJjKQorCQlncGlvX2ZyZWUoQ09MTElFX0dQSU9fVlBFTik7CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyB2b2lkIGNvbGxpZV9zZXRfdnBwKGludCB2cHApCiB7Ci0Jd3JpdGVfc2Nvb3BfcmVnKCZjb2xsaWVzY29vcF9kZXZpY2UuZGV2LCBTQ09PUF9HUENSLCByZWFkX3Njb29wX3JlZygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BDUikgfCBDT0xMSUVfU0NQX1ZQRU4pOwotCWlmICh2cHApCi0JCXdyaXRlX3Njb29wX3JlZygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BXUiwgcmVhZF9zY29vcF9yZWcoJmNvbGxpZXNjb29wX2RldmljZS5kZXYsIFNDT09QX0dQV1IpIHwgQ09MTElFX1NDUF9WUEVOKTsKLQllbHNlCi0JCXdyaXRlX3Njb29wX3JlZygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgU0NPT1BfR1BXUiwgcmVhZF9zY29vcF9yZWcoJmNvbGxpZXNjb29wX2RldmljZS5kZXYsIFNDT09QX0dQV1IpICYgfkNPTExJRV9TQ1BfVlBFTik7CisJZ3Bpb19zZXRfdmFsdWUoQ09MTElFX0dQSU9fVlBFTiwgdnBwKTsKK30KKworc3RhdGljIHZvaWQgY29sbGllX2ZsYXNoX2V4aXQodm9pZCkKK3sKKwlncGlvX2ZyZWUoQ09MTElFX0dQSU9fVlBFTik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBjb2xsaWVfZmxhc2hfZGF0YSA9IHsKIAkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKKwkuaW5pdAkJPSBjb2xsaWVfZmxhc2hfaW5pdCwKIAkuc2V0X3ZwcAk9IGNvbGxpZV9zZXRfdnBwLAorCS5leGl0CQk9IGNvbGxpZV9mbGFzaF9leGl0LAogCS5wYXJ0cwkJPSBjb2xsaWVfcGFydGl0aW9ucywKIAkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGNvbGxpZV9wYXJ0aXRpb25zKSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWVfcG0uYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZV9wbS5jCmluZGV4IGIzOTMwN2YuLjQ0NGYyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZV9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZV9wbS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KQEAgLTU4LDYgKzU5LDkgQEAKIAkJcmV0dXJuOwogCX0KIAorCWdwaW9fcmVxdWVzdChDT0xMSUVfR1BJT19DSEFSR0VfT04sICJjaGFyZ2Ugb24iKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQ09MTElFX0dQSU9fQ0hBUkdFX09OLCAxKTsKKwogCXVjYjF4MDBfaW9fc2V0X2Rpcih1Y2IsIDAsIENPTExJRV9UQzM1MTQzX0dQSU9fTUJBVF9PTiB8IENPTExJRV9UQzM1MTQzX0dQSU9fVE1QX09OIHwKIAkJCSAgICAgICAgICAgQ09MTElFX1RDMzUxNDNfR1BJT19CQkFUX09OKTsKIAlyZXR1cm47CkBAIC03MywxNyArNzcsMTEgQEAKIAogc3RhdGljIHZvaWQgY29sbGllX2NoYXJnZShpbnQgb24pCiB7Ci0JZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY29sbGllc2Nvb3BfZGV2aWNlOwotCiAJLyogWmF1cnVzIHNlZW1zIHRvIGNvbnRhaW4gTFRDMTczMTsgaXQgc2hvdWxkIGtub3cgd2hlbiB0bwogCSAqIHN0b3AgY2hhcmdpbmcgaXRzZWxmLCBzbyBzZXR0aW5nIGNoYXJnZSBvbiBzaG91bGQgYmUKIAkgKiByZWxhdGl2ZWx5IGhhcm1sZXNzIChhcyBsb25nIGFzIGl0IGlzIG5vdCBkb25lIHRvbyBvZnRlbikuCiAJICovCi0JaWYgKG9uKSB7Ci0JCXNldF9zY29vcF9ncGlvKCZjb2xsaWVzY29vcF9kZXZpY2UuZGV2LCBDT0xMSUVfU0NQX0NIQVJHRV9PTik7Ci0JfSBlbHNlIHsKLQkJcmVzZXRfc2Nvb3BfZ3BpbygmY29sbGllc2Nvb3BfZGV2aWNlLmRldiwgQ09MTElFX1NDUF9DSEFSR0VfT04pOwotCX0KKwlncGlvX3NldF92YWx1ZShDT0xMSUVfR1BJT19DSEFSR0VfT04sIG9uKTsKIH0KIAogc3RhdGljIHZvaWQgY29sbGllX2Rpc2NoYXJnZShpbnQgb24pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzYwMC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaDM2MDAuYwppbmRleCBhZjI1YTc4Li4wZWIyZjE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzYwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzNjAwLmMKQEAgLTQyLDE5ICs0MiwxMiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL3NlcmlhbF9zYTExMDAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaDM2MDAuaD4KLQotI2lmIGRlZmluZWQgKENPTkZJR19TQTExMDBfSDM2MDApIHx8IGRlZmluZWQgKENPTkZJR19TQTExMDBfSDMxMDApCiAjaW5jbHVkZSA8bWFjaC9oMzYwMF9ncGlvLmg+Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TQTExMDBfSDM4MDAKLSNpbmNsdWRlIDxtYWNoL2gzNjAwX2FzaWMuaD4KLSNlbmRpZgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCi1zdHJ1Y3QgaXBhcV9tb2RlbF9vcHMgaXBhcV9tb2RlbF9vcHM7Ci1FWFBPUlRfU1lNQk9MKGlwYXFfbW9kZWxfb3BzKTsKK3ZvaWQgKCphc3NpZ25faDM2MDBfZWdwaW8pKGVudW0gaXBhcV9lZ3Bpb190eXBlIHgsIGludCBsZXZlbCk7CitFWFBPUlRfU1lNQk9MKGFzc2lnbl9oMzYwMF9lZ3Bpbyk7CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBoM3h4eF9wYXJ0aXRpb25zW10gPSB7CiAJewpAQCAtNjMsNDEgKzU2LDkgQEAKIAkJLm9mZnNldAkJPSAwLAogCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsICAvKiBmb3JjZSByZWFkLW9ubHkgKi8KIAl9LCB7Ci0jaWZkZWYgQ09ORklHX01URF8yUEFSVFNfSVBBUQotCQkubmFtZQkJPSAiSDNYWFggcm9vdCBqZmZzMiIsCisJCS5uYW1lCQk9ICJIM1hYWCByb290ZnMiLAogCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAogCQkub2Zmc2V0CQk9IDB4MDAwNDAwMDAsCi0jZWxzZQotCQkubmFtZQkJPSAiSDNYWFgga2VybmVsIiwKLQkJLnNpemUJCT0gMHgwMDA4MDAwMCwKLQkJLm9mZnNldAkJPSAweDAwMDQwMDAwLAotCX0sIHsKLQkJLm5hbWUJCT0gIkgzWFhYIHBhcmFtcyIsCi0JCS5zaXplCQk9IDB4MDAwNDAwMDAsCi0JCS5vZmZzZXQJCT0gMHgwMDBDMDAwMCwKLQl9LCB7Ci0jaWZkZWYgQ09ORklHX0pGRlMyX0ZTCi0JCS5uYW1lCQk9ICJIM1hYWCByb290IGpmZnMyIiwKLQkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKLQkJLm9mZnNldAkJPSAweDAwMTAwMDAwLAotI2Vsc2UKLQkJLm5hbWUJCT0gIkgzWFhYIGluaXRyZCIsCi0JCS5zaXplCQk9IDB4MDAxMDAwMDAsCi0JCS5vZmZzZXQJCT0gMHgwMDEwMDAwMCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJIM1hYWCByb290IGNyYW1mcyIsCi0JCS5zaXplCQk9IDB4MDAzMDAwMDAsCi0JCS5vZmZzZXQJCT0gMHgwMDIwMDAwMCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJIM1hYWCB1c3IgY3JhbWZzIiwKLQkJLnNpemUJCT0gMHgwMDgwMDAwMCwKLQkJLm9mZnNldAkJPSAweDAwNTAwMDAwLAotCX0sIHsKLQkJLm5hbWUJCT0gIkgzWFhYIHVzciBsb2NhbCIsCi0JCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCi0JCS5vZmZzZXQJCT0gMHgwMGQwMDAwMCwKLSNlbmRpZgotI2VuZGlmCiAJfQogfTsKIApAQCAtMTMxLDExICs5Miw3IEBACiAKIHN0YXRpYyB2b2lkIGgzNjAwX2lyZGFfc2V0X3NwZWVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHNwZWVkKQogewotCWlmIChzcGVlZCA8IDQwMDAwMDApIHsKLQkJY2xyX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fSVJfRlNFTCk7Ci0JfSBlbHNlIHsKLQkJc2V0X2gzNjAwX2VncGlvKElQQVFfRUdQSU9fSVJfRlNFTCk7Ci0JfQorCWFzc2lnbl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX0lSX0ZTRUwsICEoc3BlZWQgPCA0MDAwMDAwKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJkYV9wbGF0Zm9ybV9kYXRhIGgzNjAwX2lyZGFfZGF0YSA9IHsKQEAgLTI2NiwxMiArMjIzLDYgQEAKIAlzYTExMDBmYl9sY2RfcG93ZXIgPSBoM3h4eF9sY2RfcG93ZXI7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgZG9fYmxhbmsoaW50IHNldHApCi17Ci0JaWYgKGlwYXFfbW9kZWxfb3BzLmJsYW5rX2NhbGxiYWNrKQotCQlpcGFxX21vZGVsX29wcy5ibGFua19jYWxsYmFjaygxLXNldHApOwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKiBIMzEwMCAqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaWZkZWYgQ09ORklHX1NBMTEwMF9IMzEwMApAQCAtMjg5LDcgKzI0MCw2IEBACiAJY2FzZSBJUEFRX0VHUElPX0xDRF9QT1dFUjoKIAkJZWdwaW8gfD0gRUdQSU9fSDM2MDBfTENEX09OOwogCQlncGlvICB8PSBHUElPX0gzMTAwX0xDRF8zVl9PTjsKLQkJZG9fYmxhbmsoc2V0cCk7CiAJCWJyZWFrOwogCWNhc2UgSVBBUV9FR1BJT19MQ0RfRU5BQkxFOgogCQlicmVhazsKQEAgLTM0MywyNSArMjkzLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGgzMTAwX3JlYWRfZWdwaW8odm9pZCkKLXsKLQlyZXR1cm4gaDMxMDBfZWdwaW87Ci19Ci0KLXN0YXRpYyBpbnQgaDMxMDBfcG1fY2FsbGJhY2soaW50IHJlcSkKLXsKLQlpZiAoaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4KQotCQlyZXR1cm4gaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2tfYXV4KHJlcSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXBhcV9tb2RlbF9vcHMgaDMxMDBfbW9kZWxfb3BzIF9faW5pdGRhdGEgPSB7Ci0JLmdlbmVyaWNfbmFtZQk9ICIzMTAwIiwKLQkuY29udHJvbAk9IGgzMTAwX2NvbnRyb2xfZWdwaW8sCi0JLnJlYWQJCT0gaDMxMDBfcmVhZF9lZ3BpbywKLQkucG1fY2FsbGJhY2sJPSBoMzEwMF9wbV9jYWxsYmFjawotfTsKLQogI2RlZmluZSBIMzEwMF9ESVJFQ1RfRUdQSU8gKEdQSU9fSDMxMDBfQlRfT04JICBcCiAJCQkgIHwgR1BJT19IMzEwMF9HUElPMwkgIFwKIAkJCSAgfCBHUElPX0gzMTAwX1FNVVRFCSAgXApAQCAtMzg3LDcgKzMxOCw3IEBACiAJR0FGUiAmPSB+SDMxMDBfRElSRUNUX0VHUElPOwogCiAJSDMxMDBfRUdQSU8gPSBoMzEwMF9lZ3BpbzsKLQlpcGFxX21vZGVsX29wcyA9IGgzMTAwX21vZGVsX29wczsKKwlhc3NpZ25faDM2MDBfZWdwaW8gPSBoMzEwMF9jb250cm9sX2VncGlvOwogfQogCiBNQUNISU5FX1NUQVJUKEgzMTAwLCAiQ29tcGFxIGlQQVEgSDMxMDAiKQpAQCAtNDIwLDcgKzM1MSw2IEBACiAJCQkgRUdQSU9fSDM2MDBfTENEX1BDSSB8CiAJCQkgRUdQSU9fSDM2MDBfTENEXzVWX09OIHwKIAkJCSBFR1BJT19IMzYwMF9MVkREX09OOwotCQlkb19ibGFuayhzZXRwKTsKIAkJYnJlYWs7CiAJY2FzZSBJUEFRX0VHUElPX0xDRF9FTkFCTEU6CiAJCWJyZWFrOwpAQCAtNDcxLDI1ICs0MDEsNiBAQAogCX0KIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaDM2MDBfcmVhZF9lZ3Bpbyh2b2lkKQotewotCXJldHVybiBoMzYwMF9lZ3BpbzsKLX0KLQotc3RhdGljIGludCBoMzYwMF9wbV9jYWxsYmFjayhpbnQgcmVxKQotewotCWlmIChpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgpCi0JCXJldHVybiBpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgocmVxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcGFxX21vZGVsX29wcyBoMzYwMF9tb2RlbF9vcHMgX19pbml0ZGF0YSA9IHsKLQkuZ2VuZXJpY19uYW1lCT0gIjM2MDAiLAotCS5jb250cm9sCT0gaDM2MDBfY29udHJvbF9lZ3BpbywKLQkucmVhZAkJPSBoMzYwMF9yZWFkX2VncGlvLAotCS5wbV9jYWxsYmFjawk9IGgzNjAwX3BtX2NhbGxiYWNrCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgaDM2MDBfbWFwX2lvKHZvaWQpCiB7CiAJaDN4eHhfbWFwX2lvKCk7CkBAIC01MDQsNyArNDE1LDcgQEAKIAkgICAgICAgR1BJT19MREQxMSB8IEdQSU9fTEREMTAgfCBHUElPX0xERDkgIHwgR1BJT19MREQ4OwogCiAJSDM2MDBfRUdQSU8gPSBoMzYwMF9lZ3BpbzsJICAgLyogTWFpbnRhaW5zIGFjcm9zcyBzbGVlcD8gKi8KLQlpcGFxX21vZGVsX29wcyA9IGgzNjAwX21vZGVsX29wczsKKwlhc3NpZ25faDM2MDBfZWdwaW8gPSBoMzYwMF9jb250cm9sX2VncGlvOwogfQogCiBNQUNISU5FX1NUQVJUKEgzNjAwLCAiQ29tcGFxIGlQQVEgSDM2MDAiKQpAQCAtNTE5LDM4OCArNDMwLDMgQEAKIAogI2VuZGlmIC8qIENPTkZJR19TQTExMDBfSDM2MDAgKi8KIAotI2lmZGVmIENPTkZJR19TQTExMDBfSDM4MDAKLQotI2RlZmluZSBTRVRfQVNJQzEoeCkgXAotICAgZG8ge2lmIChzZXRwKSB7IEgzODAwX0FTSUMxX0dQSU9fT1VUIHw9ICh4KTsgfSBlbHNlIHsgSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfih4KTsgfX0gd2hpbGUoMCkKLQotI2RlZmluZSBTRVRfQVNJQzIoeCkgXAotICAgZG8ge2lmIChzZXRwKSB7IEgzODAwX0FTSUMyX0dQSU9QSU9EIHw9ICh4KTsgfSBlbHNlIHsgSDM4MDBfQVNJQzJfR1BJT1BJT0QgJj0gfih4KTsgfX0gd2hpbGUoMCkKLQotI2RlZmluZSBDTEVBUl9BU0lDMSh4KSBcCi0gICBkbyB7aWYgKHNldHApIHsgSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfih4KTsgfSBlbHNlIHsgSDM4MDBfQVNJQzFfR1BJT19PVVQgfD0gKHgpOyB9fSB3aGlsZSgwKQotCi0jZGVmaW5lIENMRUFSX0FTSUMyKHgpIFwKLSAgIGRvIHtpZiAoc2V0cCkgeyBIMzgwMF9BU0lDMl9HUElPUElPRCAmPSB+KHgpOyB9IGVsc2UgeyBIMzgwMF9BU0lDMl9HUElPUElPRCB8PSAoeCk7IH19IHdoaWxlKDApCi0KLQotLyoKLSAgT24gc2NyZWVuIGVuYWJsZSwgd2UgZ2V0Ci0KLSAgICAgaDM4MDBfdmlkZW9fcG93ZXJfb24oMSkKLSAgICAgTENEIGNvbnRyb2xsZXIgc3RhcnRzCi0gICAgIGgzODAwX3ZpZGVvX2xjZF9lbmFibGUoMSkKLQotICBPbiBzY3JlZW4gZGlzYWJsZSwgd2UgZ2V0Ci0KLSAgICAgaDM4MDBfdmlkZW9fbGNkX2VuYWJsZSgwKQotICAgICBMQ0QgY29udHJvbGxlciBzdG9wcwotICAgICBoMzgwMF92aWRlb19wb3dlcl9vbigwKQotKi8KLQotCi1zdGF0aWMgdm9pZCBoMzgwMF92aWRlb19wb3dlcl9vbihpbnQgc2V0cCkKLXsKLQlpZiAoc2V0cCkgewotCQlIMzgwMF9BU0lDMV9HUElPX09VVCB8PSBHUElPMV9MQ0RfT047Ci0JCW1zbGVlcCgzMCk7Ci0JCUgzODAwX0FTSUMxX0dQSU9fT1VUIHw9IEdQSU8xX1ZHTF9PTjsKLQkJbXNsZWVwKDUpOwotCQlIMzgwMF9BU0lDMV9HUElPX09VVCB8PSBHUElPMV9WR0hfT047Ci0JCW1zbGVlcCg1MCk7Ci0JCUgzODAwX0FTSUMxX0dQSU9fT1VUIHw9IEdQSU8xX0xDRF81Vl9PTjsKLQkJbXNsZWVwKDUpOwotCX0gZWxzZSB7Ci0JCW1zbGVlcCg1KTsKLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfkdQSU8xX0xDRF81Vl9PTjsKLQkJbXNsZWVwKDUwKTsKLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfkdQSU8xX1ZHTF9PTjsKLQkJbXNsZWVwKDUpOwotCQlIMzgwMF9BU0lDMV9HUElPX09VVCAmPSB+R1BJTzFfVkdIX09OOwotCQltc2xlZXAoMTAwKTsKLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgJj0gfkdQSU8xX0xDRF9PTjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGgzODAwX3ZpZGVvX2xjZF9lbmFibGUoaW50IHNldHApCi17Ci0JaWYgKHNldHApIHsKLQkJbXNsZWVwKDE3KTsJLy8gV2FpdCBvbmUgZnJvbSBiZWZvcmUgdHVybmluZyBvbgotCQlIMzgwMF9BU0lDMV9HUElPX09VVCB8PSBHUElPMV9MQ0RfUENJOwotCX0gZWxzZSB7Ci0JCUgzODAwX0FTSUMxX0dQSU9fT1VUICY9IH5HUElPMV9MQ0RfUENJOwotCQltc2xlZXAoMzApOwkvLyBXYWl0IGJlZm9yZSB0dXJuaW5nIG9mZgotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCBoMzgwMF9jb250cm9sX2VncGlvKGVudW0gaXBhcV9lZ3Bpb190eXBlIHgsIGludCBzZXRwKQotewotCXN3aXRjaCAoeCkgewotCWNhc2UgSVBBUV9FR1BJT19MQ0RfUE9XRVI6Ci0JCWgzODAwX3ZpZGVvX3Bvd2VyX29uKHNldHApOwotCQlicmVhazsKLQljYXNlIElQQVFfRUdQSU9fTENEX0VOQUJMRToKLQkJaDM4MDBfdmlkZW9fbGNkX2VuYWJsZShzZXRwKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUEFRX0VHUElPX0NPREVDX05SRVNFVDoKLQljYXNlIElQQVFfRUdQSU9fQVVESU9fT046Ci0JY2FzZSBJUEFRX0VHUElPX1FNVVRFOgotCQlwcmludGsoIiVzOiBlcnJvciAtIHNob3VsZCBub3QgYmUgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWJyZWFrOwotCWNhc2UgSVBBUV9FR1BJT19PUFRfTlZSQU1fT046Ci0JCVNFVF9BU0lDMihHUElPMl9PUFRfT05fTlZSQU0pOwotCQlicmVhazsKLQljYXNlIElQQVFfRUdQSU9fT1BUX09OOgotCQlTRVRfQVNJQzIoR1BJTzJfT1BUX09OKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUEFRX0VHUElPX0NBUkRfUkVTRVQ6Ci0JCVNFVF9BU0lDMihHUElPMl9PUFRfUENNX1JFU0VUKTsKLQkJYnJlYWs7Ci0JY2FzZSBJUEFRX0VHUElPX09QVF9SRVNFVDoKLQkJU0VUX0FTSUMyKEdQSU8yX09QVF9SRVNFVCk7Ci0JCWJyZWFrOwotCWNhc2UgSVBBUV9FR1BJT19JUl9PTjoKLQkJQ0xFQVJfQVNJQzEoR1BJTzFfSVJfT05fTik7Ci0JCWJyZWFrOwotCWNhc2UgSVBBUV9FR1BJT19JUl9GU0VMOgotCQlicmVhazsKLQljYXNlIElQQVFfRUdQSU9fUlMyMzJfT046Ci0JCVNFVF9BU0lDMShHUElPMV9SUzIzMl9PTik7Ci0JCWJyZWFrOwotCWNhc2UgSVBBUV9FR1BJT19WUFBfT046Ci0JCUgzODAwX0FTSUMyX0ZsYXNoV1BfVlBQX09OID0gc2V0cDsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBoMzgwMF9yZWFkX2VncGlvKHZvaWQpCi17Ci0JcmV0dXJuIEgzODAwX0FTSUMxX0dQSU9fT1VUIHwgKEgzODAwX0FTSUMyX0dQSU9QSU9EIDw8IDE2KTsKLX0KLQotLyogV2UgbmVlZCB0byBmaXggQVNJQzIgR1BJTyBvdmVyIHN1c3BlbmQvcmVzdW1lLiAgQXQgdGhlIG1vbWVudCwKLSAgIGl0IGRvZXNuJ3QgYXBwZWFyIHRoYXQgQVNJQzEgR1BJTyBoYXMgdGhlIHNhbWUgcHJvYmxlbSAqLwotCi1zdGF0aWMgaW50IGgzODAwX3BtX2NhbGxiYWNrKGludCByZXEpCi17Ci0Jc3RhdGljIHUxNiBhc2ljMV9kYXRhOwotCXN0YXRpYyB1MTYgYXNpYzJfZGF0YTsKLQlpbnQgcmVzdWx0ID0gMDsKLQotCXByaW50aygiJXMgJWRcbiIsIF9fZnVuY19fLCByZXEpOwotCi0Jc3dpdGNoIChyZXEpIHsKLQljYXNlIFBNX1JFU1VNRToKLQkJTVNDMiA9IChNU0MyICYgMHgwMDAwZmZmZikgfCAweEU0NTEwMDAwOyAgLyogU2V0IE1TQzIgY29ycmVjdGx5ICovCi0KLQkJSDM4MDBfQVNJQzJfR1BJT1BJT0QgPSBhc2ljMl9kYXRhOwotCQlIMzgwMF9BU0lDMl9HUElPRElSID0gR1BJTzJfUEVOX0lSUQotCQkJfCBHUElPMl9TRF9ERVRFQ1QKLQkJCXwgR1BJTzJfRUFSX0lOX04KLQkJCXwgR1BJTzJfVVNCX0RFVEVDVF9OCi0JCQl8IEdQSU8yX1NEX0NPTl9TTFQ7Ci0KLQkJSDM4MDBfQVNJQzFfR1BJT19PVVQgPSBhc2ljMV9kYXRhOwotCi0JCWlmIChpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgpCi0JCQlyZXN1bHQgPSBpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXgocmVxKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBNX1NVU1BFTkQ6Ci0JCWlmIChpcGFxX21vZGVsX29wcy5wbV9jYWxsYmFja19hdXggJiYKLQkJICAgICAoKHJlc3VsdCA9IGlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrX2F1eChyZXEpKSAhPSAwKSkKLQkJCXJldHVybiByZXN1bHQ7Ci0KLQkJYXNpYzFfZGF0YSA9IEgzODAwX0FTSUMxX0dQSU9fT1VUOwotCQlhc2ljMl9kYXRhID0gSDM4MDBfQVNJQzJfR1BJT1BJT0Q7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50aygiJXM6IHVucmVjb2duaXplZCBQTSBjYWxsYmFja1xuIiwgX19mdW5jX18pOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcGFxX21vZGVsX29wcyBoMzgwMF9tb2RlbF9vcHMgX19pbml0ZGF0YSA9IHsKLQkuZ2VuZXJpY19uYW1lCT0gIjM4MDAiLAotCS5jb250cm9sCT0gaDM4MDBfY29udHJvbF9lZ3BpbywKLQkucmVhZAkJPSBoMzgwMF9yZWFkX2VncGlvLAotCS5wbV9jYWxsYmFjawk9IGgzODAwX3BtX2NhbGxiYWNrCi19OwotCi0jZGVmaW5lIE1BWF9BU0lDX0lTUl9MT09QUyAgICAyMAotCi0vKiBUaGUgb3JkZXIgb2YgdGhlc2UgaXMgaW1wb3J0YW50IC0gc2VlICNpbmNsdWRlIDxtYWNoL2lycXMuaD4gKi8KLXN0YXRpYyB1MzIga3Bpb19pcnFfbWFza1tdID0gewotCUtQSU9fS0VZX0FMTCwKLQlLUElPX1NQSV9JTlQsCi0JS1BJT19PV01fSU5ULAotCUtQSU9fQURDX0lOVCwKLQlLUElPX1VBUlRfMF9JTlQsCi0JS1BJT19VQVJUXzFfSU5ULAotCUtQSU9fVElNRVJfMF9JTlQsCi0JS1BJT19USU1FUl8xX0lOVCwKLQlLUElPX1RJTUVSXzJfSU5UCi19OwotCi1zdGF0aWMgdTMyIGdwaW9faXJxX21hc2tbXSA9IHsKLQlHUElPMl9QRU5fSVJRLAotCUdQSU8yX1NEX0RFVEVDVCwKLQlHUElPMl9FQVJfSU5fTiwKLQlHUElPMl9VU0JfREVURUNUX04sCi0JR1BJTzJfU0RfQ09OX1NMVCwKLX07Ci0KLXN0YXRpYyB2b2lkIGgzODAwX0lSUV9kZW11eCh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JaW50IGk7Ci0KLQlpZiAoMCkgcHJpbnRrKCIlczogaW50ZXJydXB0IHJlY2VpdmVkXG4iLCBfX2Z1bmNfXyk7Ci0KLQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfQVNJQ19JU1JfTE9PUFMgJiYgKEdQTFIgJiBHUElPX0gzODAwX0FTSUMpOyBpKyspIHsKLQkJdTMyIGlycTsKLQkJaW50IGo7Ci0KLQkJLyogS1BJTyAqLwotCQlpcnEgPSBIMzgwMF9BU0lDMl9LUElJTlRGTEFHOwotCQlpZiAoMCkgcHJpbnRrKCIlcyBLUElPIDB4JTA4WFxuIiwgX19mdW5jX18sIGlycSk7Ci0JCWZvciAoaiA9IDA7IGogPCBIMzgwMF9LUElPX0lSUV9DT1VOVDsgaisrKQotCQkJaWYgKGlycSAmIGtwaW9faXJxX21hc2tbal0pCi0JCQkJaGFuZGxlX2VkZ2VfaXJxKEgzODAwX0tQSU9fSVJRX0NPVU5UICsgaiwgaXJxX2Rlc2MgKyBIMzgwMF9LUElPX0lSUV9DT1VOVCArIGopOwotCi0JCS8qIEdQSU8yICovCi0JCWlycSA9IEgzODAwX0FTSUMyX0dQSUlOVEZMQUc7Ci0JCWlmICgwKSBwcmludGsoIiVzIEdQSU8gMHglMDhYXG4iLCBfX2Z1bmNfXywgaXJxKTsKLQkJZm9yIChqID0gMDsgaiA8IEgzODAwX0dQSU9fSVJRX0NPVU5UOyBqKyspCi0JCQlpZiAoaXJxICYgZ3Bpb19pcnFfbWFza1tqXSkKLQkJCQloYW5kbGVfZWRnZV9pcnEoSDM4MDBfR1BJT19JUlFfQ09VTlQgKyBqLCBpcnFfZGVzYyArIEgzODAwX0dQSU9fSVJRX0NPVU5UICsgaik7Ci0JfQotCi0JaWYgKGkgPj0gTUFYX0FTSUNfSVNSX0xPT1BTKQotCQlwcmludGsoIiVzOiBpbnRlcnJ1cHQgcHJvY2Vzc2luZyBvdmVycnVuXG4iLCBfX2Z1bmNfXyk7Ci0KLQkvKiBGb3IgbGV2ZWwtYmFzZWQgaW50ZXJydXB0cyAqLwotCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwotCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGgzODAwX2lycSA9IHsKLQkubmFtZQkJPSAiaDM4MDBfYXNpYyIsCi0JLmhhbmRsZXIJPSBoMzgwMF9JUlFfZGVtdXgsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAotfTsKLQotdTMyIGtwaW9faW50X3NoYWRvdyA9IDA7Ci0KLQotLyogbWFza19hY2sgPC0gSVJRIGlzIGZpcnN0IHNlcnZpY2VkLgotICAgICAgIG1hc2sgPC0gSVJRIGlzIGRpc2FibGVkLgotICAgICB1bm1hc2sgPC0gSVJRIGlzIGVuYWJsZWQKLQotICAgICBUaGUgSU5UQ0xSIHJlZ2lzdGVycyBhcmUgcG9vcmx5IGRvY3VtZW50ZWQuICBJIGJlbGlldmUgdGhhdCB3cml0aW5nCi0gICAgIGEgIjEiIHRvIHRoZSByZWdpc3RlciBjbGVhcnMgdGhlIHNwZWNpZmljIGludGVycnVwdCwgYnV0IHRoZSBkb2N1bWVudGF0aW9uCi0gICAgIGluZGljYXRlcyB3cml0aW5nIGEgIjAiIGNsZWFycyB0aGUgaW50ZXJydXB0LiAgSW4gYW55IGNhc2UsIHRoZXkgc2hvdWxkbid0Ci0gICAgIGJlIHJlYWQgKHRoYXQncyB0aGUgSU5URkxBRyByZWdpc3RlcikKLSAqLwotCi1zdGF0aWMgdm9pZCBoMzgwMF9tYXNrX2Fja19rcGlvX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXUzMiBtYXNrID0ga3Bpb19pcnFfbWFza1tpcnEgLSBIMzgwMF9LUElPX0lSUV9TVEFSVF07Ci0Ja3Bpb19pbnRfc2hhZG93ICY9IH5tYXNrOwotCUgzODAwX0FTSUMyX0tQSUlOVFNUQVQgPSBrcGlvX2ludF9zaGFkb3c7Ci0JSDM4MDBfQVNJQzJfS1BJSU5UQ0xSICA9IG1hc2s7Ci19Ci0KLXN0YXRpYyB2b2lkIGgzODAwX21hc2tfa3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgbWFzayA9IGtwaW9faXJxX21hc2tbaXJxIC0gSDM4MDBfS1BJT19JUlFfU1RBUlRdOwotCWtwaW9faW50X3NoYWRvdyAmPSB+bWFzazsKLQlIMzgwMF9BU0lDMl9LUElJTlRTVEFUID0ga3Bpb19pbnRfc2hhZG93OwotfQotCi1zdGF0aWMgdm9pZCBoMzgwMF91bm1hc2tfa3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgbWFzayA9IGtwaW9faXJxX21hc2tbaXJxIC0gSDM4MDBfS1BJT19JUlFfU1RBUlRdOwotCWtwaW9faW50X3NoYWRvdyB8PSBtYXNrOwotCUgzODAwX0FTSUMyX0tQSUlOVFNUQVQgPSBrcGlvX2ludF9zaGFkb3c7Ci19Ci0KLXN0YXRpYyB2b2lkIGgzODAwX21hc2tfYWNrX2dwaW9faXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdTMyIG1hc2sgPSBncGlvX2lycV9tYXNrW2lycSAtIEgzODAwX0dQSU9fSVJRX1NUQVJUXTsKLQlIMzgwMF9BU0lDMl9HUElJTlRTVEFUICY9IH5tYXNrOwotCUgzODAwX0FTSUMyX0dQSUlOVENMUgk9IG1hc2s7Ci19Ci0KLXN0YXRpYyB2b2lkIGgzODAwX21hc2tfZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgbWFzayA9IGdwaW9faXJxX21hc2tbaXJxIC0gSDM4MDBfR1BJT19JUlFfU1RBUlRdOwotCUgzODAwX0FTSUMyX0dQSUlOVFNUQVQgJj0gfm1hc2s7Ci0JfQotCi1zdGF0aWMgdm9pZCBoMzgwMF91bm1hc2tfZ3Bpb19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgbWFzayA9IGdwaW9faXJxX21hc2tbaXJxIC0gSDM4MDBfR1BJT19JUlFfU1RBUlRdOwotCUgzODAwX0FTSUMyX0dQSUlOVFNUQVQgfD0gbWFzazsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGgzODAwX2luaXRfaXJxKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQkvKiBJbml0aWFsaXplIHN0YW5kYXJkIElSUXMgKi8KLQlzYTExMDBfaW5pdF9pcnEoKTsKLQotCS8qIERpc2FibGUgYWxsIElSUXMgYW5kIHNldCB1cCBjbG9jayAqLwotCUgzODAwX0FTSUMyX0tQSUlOVFNUQVQJICAgPSAgMDsgICAgIC8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KLQlIMzgwMF9BU0lDMl9HUElJTlRTVEFUCSAgID0gIDA7Ci0KLQlIMzgwMF9BU0lDMl9LUElJTlRDTFIJICAgPSAgMDsgICAgIC8qIENsZWFyIGFsbCBLUElPIGludGVycnVwdHMgKi8KLQlIMzgwMF9BU0lDMl9HUElJTlRDTFIJICAgPSAgMDsgICAgIC8qIENsZWFyIGFsbCBHUElPIGludGVycnVwdHMgKi8KLQotLy8JSDM4MDBfQVNJQzJfS1BJSU5UQ0xSCSAgID0gIDB4ZmZmZjsJICAvKiBDbGVhciBhbGwgS1BJTyBpbnRlcnJ1cHRzICovCi0vLwlIMzgwMF9BU0lDMl9HUElJTlRDTFIJICAgPSAgMHhmZmZmOwkgIC8qIENsZWFyIGFsbCBHUElPIGludGVycnVwdHMgKi8KLQotCUgzODAwX0FTSUMyX0NMT0NLX0VuYWJsZSAgICAgICB8PSBBU0lDMl9DTE9DS19FWDA7ICAgLyogMzIga0haIGNyeXN0YWwgb24gKi8KLQlIMzgwMF9BU0lDMl9JTlRSX0Nsb2NrUHJlc2NhbGUgfD0gQVNJQzJfSU5UQ1BTX1NFVDsKLQlIMzgwMF9BU0lDMl9JTlRSX0Nsb2NrUHJlc2NhbGUJPSBBU0lDMl9JTlRDUFNfQ1BTKDB4MGUpIHwgQVNJQzJfSU5UQ1BTX1NFVDsKLQlIMzgwMF9BU0lDMl9JTlRSX1RpbWVyU2V0CT0gMTsKLQotI2lmIDAKLQlmb3IgKGkgPSAwOyBpIDwgSDM4MDBfS1BJT19JUlFfQ09VTlQ7IGkrKykgewotCQlpbnQgaXJxID0gaSArIEgzODAwX0tQSU9fSVJRX1NUQVJUOwotCQlpcnFfZGVzY1tpcnFdLnZhbGlkICAgID0gMTsKLQkJaXJxX2Rlc2NbaXJxXS5wcm9iZV9vayA9IDE7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZoMzgwMF9rcGlvX2lycWNoaXApOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBIMzgwMF9HUElPX0lSUV9DT1VOVDsgaSsrKSB7Ci0JCWludCBpcnEgPSBpICsgSDM4MDBfR1BJT19JUlFfU1RBUlQ7Ci0JCWlycV9kZXNjW2lycV0udmFsaWQgICAgPSAxOwotCQlpcnFfZGVzY1tpcnFdLnByb2JlX29rID0gMTsKLQkJc2V0X2lycV9jaGlwKGlycSwgJmgzODAwX2dwaW9faXJxY2hpcCk7Ci0JfQotI2VuZGlmCi0Jc2V0X2lycV90eXBlKElSUV9HUElPX0gzODAwX0FTSUMsIElSUV9UWVBFX0VER0VfUklTSU5HKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfR1BJT19IMzgwMF9BU0lDLCBoMzgwMF9JUlFfZGVtdXgpOwotfQotCi0KLSNkZWZpbmUgQVNJQzFfT1VUUFVUUwkgMHg3ZmZmICAgLyogRmlyc3QgMTUgYml0cyBhcmUgdXNlZCAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgaDM4MDBfbWFwX2lvKHZvaWQpCi17Ci0JaDN4eHhfbWFwX2lvKCk7Ci0KLQkvKiBBZGQgd2FrZXVwIG9uIEFDIHBsdWcvdW5wbHVnICovCi0JUFdFUiAgfD0gUFdFUl9HUElPMTI7Ci0KLQkvKiBJbml0aWFsaXplIGgzODAwLXNwZWNpZmljIHZhbHVlcyBoZXJlICovCi0JR1BDUiA9IDB4MGZmZmZmZmY7CSAvKiBBbGwgb3V0cHV0cyBhcmUgc2V0IGxvdyBieSBkZWZhdWx0ICovCi0JR0FGUiA9CUdQSU9fSDM4MDBfQ0xLX09VVCB8Ci0JCUdQSU9fTEREMTUgfCBHUElPX0xERDE0IHwgR1BJT19MREQxMyB8IEdQSU9fTEREMTIgfAotCQlHUElPX0xERDExIHwgR1BJT19MREQxMCB8IEdQSU9fTEREOSAgfCBHUElPX0xERDg7Ci0JR1BEUiA9CUdQSU9fSDM4MDBfQ0xLX09VVCB8Ci0JCUdQSU9fSDM2MDBfQ09NX1JUUyAgfCBHUElPX0gzNjAwX0wzX0NMT0NLIHwKLQkJR1BJT19IMzYwMF9MM19NT0RFICB8IEdQSU9fSDM2MDBfTDNfREFUQSAgfAotCQlHUElPX0xERDE1IHwgR1BJT19MREQxNCB8IEdQSU9fTEREMTMgfCBHUElPX0xERDEyIHwKLQkJR1BJT19MREQxMSB8IEdQSU9fTEREMTAgfCBHUElPX0xERDkgIHwgR1BJT19MREQ4OwotCVRVQ1IgPQlUVUNSXzNfNjg2NE1IejsgICAvKiBTZWVtcyB0byBiZSB1c2VkIG9ubHkgZm9yIHRoZSBCbHVldG9vdGggVUFSVCAqLwotCi0JLyogRml4IHRoZSBtZW1vcnkgYnVzICovCi0JTVNDMiA9IChNU0MyICYgMHgwMDAwZmZmZikgfCAweEU0NTEwMDAwOwotCi0JLyogU2V0IHVwIEFTSUMgIzEgKi8KLQlIMzgwMF9BU0lDMV9HUElPX0RJUgkJPSBBU0lDMV9PVVRQVVRTOwkgICAgLyogQWxsIG91dHB1dHMgKi8KLQlIMzgwMF9BU0lDMV9HUElPX01BU0sJCT0gQVNJQzFfT1VUUFVUUzsJICAgIC8qIE5vIGludGVycnVwdHMgKi8KLQlIMzgwMF9BU0lDMV9HUElPX1NMRUVQX01BU0sJPSBBU0lDMV9PVVRQVVRTOwotCUgzODAwX0FTSUMxX0dQSU9fU0xFRVBfRElSCT0gQVNJQzFfT1VUUFVUUzsKLQlIMzgwMF9BU0lDMV9HUElPX1NMRUVQX09VVAk9IEdQSU8xX0VBUl9PTl9OOwotCUgzODAwX0FTSUMxX0dQSU9fQkFUVF9GQVVMVF9ESVIgPSBBU0lDMV9PVVRQVVRTOwotCUgzODAwX0FTSUMxX0dQSU9fQkFUVF9GQVVMVF9PVVQgPSBHUElPMV9FQVJfT05fTjsKLQotCUgzODAwX0FTSUMxX0dQSU9fT1VUID0gR1BJTzFfSVJfT05fTgotCQkJCSAgICAgIHwgR1BJTzFfUlMyMzJfT04KLQkJCQkgICAgICB8IEdQSU8xX0VBUl9PTl9OOwotCi0JLyogU2V0IHVwIEFTSUMgIzIgKi8KLQlIMzgwMF9BU0lDMl9HUElPUElPRAk9IEdQSU8yX0lOX1kxX04gfCBHUElPMl9JTl9YMV9OOwotCUgzODAwX0FTSUMyX0dQT0JGU1RBVAk9IEdQSU8yX0lOX1kxX04gfCBHUElPMl9JTl9YMV9OOwotCi0JSDM4MDBfQVNJQzJfR1BJT0RJUgk9IEdQSU8yX1BFTl9JUlEKLQkJCQkgICAgICB8IEdQSU8yX1NEX0RFVEVDVAotCQkJCSAgICAgIHwgR1BJTzJfRUFSX0lOX04KLQkJCQkgICAgICB8IEdQSU8yX1VTQl9ERVRFQ1RfTgotCQkJCSAgICAgIHwgR1BJTzJfU0RfQ09OX1NMVDsKLQotCS8qIFRPRE8gOiBTZXQgc2xlZXAgc3RhdGVzICYgYmF0dGVyeSBmYXVsdCBzdGF0ZXMgKi8KLQotCS8qIENsZWFyIFZQUCBFbmFibGUgKi8KLQlIMzgwMF9BU0lDMl9GbGFzaFdQX1ZQUF9PTiA9IDA7Ci0JaXBhcV9tb2RlbF9vcHMgPSBoMzgwMF9tb2RlbF9vcHM7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoSDM4MDAsICJDb21wYXEgaVBBUSBIMzgwMCIpCi0JLnBoeXNfaW8JPSAweDgwMDAwMDAwLAotCS5pb19wZ19vZmZzdAk9ICgoMHhmODAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IDB4YzAwMDAxMDAsCi0JLm1hcF9pbwkJPSBoMzgwMF9tYXBfaW8sCi0JLmluaXRfaXJxCT0gaDM4MDBfaW5pdF9pcnEsCi0JLnRpbWVyCQk9ICZzYTExMDBfdGltZXIsCi0JLmluaXRfbWFjaGluZQk9IGgzeHh4X21hY2hfaW5pdCwKLU1BQ0hJTkVfRU5ECi0KLSNlbmRpZiAvKiBDT05GSUdfU0ExMTAwX0gzODAwICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvY29sbGllLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvY29sbGllLmgKaW5kZXggNjllOTYyNC4uOWVmYjU2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2NvbGxpZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9jb2xsaWUuaApAQCAtMTQsMjEgKzE0LDIxIEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfQ09MTElFX0gKIAogCi0jZGVmaW5lIENPTExJRV9TQ1BfQ0hBUkdFX09OCVNDT09QX0dQQ1JfUEExMQorI2RlZmluZSBDT0xMSUVfU0NPT1BfR1BJT19CQVNFCShHUElPX01BWCArIDEpCisjZGVmaW5lIENPTExJRV9HUElPX0NIQVJHRV9PTgkoQ09MTElFX1NDT09QX0dQSU9fQkFTRSArIDApCiAjZGVmaW5lIENPTExJRV9TQ1BfRElBR19CT09UMQlTQ09PUF9HUENSX1BBMTIKICNkZWZpbmUgQ09MTElFX1NDUF9ESUFHX0JPT1QyCVNDT09QX0dQQ1JfUEExMwogI2RlZmluZSBDT0xMSUVfU0NQX01VVEVfTAlTQ09PUF9HUENSX1BBMTQKICNkZWZpbmUgQ09MTElFX1NDUF9NVVRFX1IJU0NPT1BfR1BDUl9QQTE1CiAjZGVmaW5lIENPTExJRV9TQ1BfNVZPTgkJU0NPT1BfR1BDUl9QQTE2CiAjZGVmaW5lIENPTExJRV9TQ1BfQU1QX09OCVNDT09QX0dQQ1JfUEExNwotI2RlZmluZSBDT0xMSUVfU0NQX1ZQRU4JCVNDT09QX0dQQ1JfUEExOAorI2RlZmluZSBDT0xMSUVfR1BJT19WUEVOCShDT0xMSUVfU0NPT1BfR1BJT19CQVNFICsgNykKICNkZWZpbmUgQ09MTElFX1NDUF9MQl9WT0xfQ0hHCVNDT09QX0dQQ1JfUEExOQogCi0jZGVmaW5lIENPTExJRV9TQ09PUF9JT19ESVIJKCBDT0xMSUVfU0NQX0NIQVJHRV9PTiB8IENPTExJRV9TQ1BfTVVURV9MIHwgQ09MTElFX1NDUF9NVVRFX1IgfCBcCi0JCQkJQ09MTElFX1NDUF81Vk9OIHwgQ09MTElFX1NDUF9BTVBfT04gfCBDT0xMSUVfU0NQX1ZQRU4gfCBcCisjZGVmaW5lIENPTExJRV9TQ09PUF9JT19ESVIJKCBDT0xMSUVfU0NQX01VVEVfTCB8IENPTExJRV9TQ1BfTVVURV9SIHwgXAorCQkJCUNPTExJRV9TQ1BfNVZPTiB8IENPTExJRV9TQ1BfQU1QX09OIHwgXAogCQkJCUNPTExJRV9TQ1BfTEJfVk9MX0NIRyApCi0jZGVmaW5lIENPTExJRV9TQ09PUF9JT19PVVQJKCBDT0xMSUVfU0NQX01VVEVfTCB8IENPTExJRV9TQ1BfTVVURV9SIHwgQ09MTElFX1NDUF9WUEVOIHwgXAotCQkJCUNPTExJRV9TQ1BfQ0hBUkdFX09OICkKKyNkZWZpbmUgQ09MTElFX1NDT09QX0lPX09VVAkoIENPTExJRV9TQ1BfTVVURV9MIHwgQ09MTElFX1NDUF9NVVRFX1IgKQogCiAvKiBHUElPcyBmb3Igd2hpY2ggdGhlIGdlbmVyaWMgZGVmaW5pdGlvbiBkb2Vzbid0IHNheSBtdWNoICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oMzYwMC5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwLmgKaW5kZXggOWNjNDdmZC4uMjgyN2ZhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNkZWZpbmUgUE1fUkVTVU1FCSgoX19mb3JjZSBwbV9yZXF1ZXN0X3QpIDIpCS8qIGVudGVyIEQwICovCiAKIC8qIGdlbmVyYWxpemVkIHN1cHBvcnQgZm9yIEgzeHh4IHNlcmllcyBDb21wYXEgUG9ja2V0IFBDJ3MgKi8KLSNkZWZpbmUgbWFjaGluZV9pc19oM3h4eCgpIChtYWNoaW5lX2lzX2gzMTAwKCkgfHwgbWFjaGluZV9pc19oMzYwMCgpIHx8IG1hY2hpbmVfaXNfaDM4MDAoKSkKKyNkZWZpbmUgbWFjaGluZV9pc19oM3h4eCgpIChtYWNoaW5lX2lzX2gzMTAwKCkgfHwgbWFjaGluZV9pc19oMzYwMCgpKQogCiAvKiBQaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyBjb3JyZXNwb25kaW5nIHRvIGNoaXAgc2VsZWN0cyAqLwogI2RlZmluZSBIMzYwMF9FR1BJT19QSFlTCShTQTExMDBfQ1M1X1BIWVMgKyAweDAxMDAwMDAwKQpAQCAtOTMsNzYgKzkzLDcgQEAKIAlJUEFRX0VHUElPX0xDRF9FTkFCTEUsCSAgLyogRW5hYmxlL2Rpc2FibGUgTENEIGNvbnRyb2xsZXIgKi8KIH07CiAKLXN0cnVjdCBpcGFxX21vZGVsX29wcyB7Ci0JY29uc3QgY2hhciAgICAgKmdlbmVyaWNfbmFtZTsKLQl2b2lkCSAgICAgICgqY29udHJvbCkoZW51bSBpcGFxX2VncGlvX3R5cGUsIGludCk7Ci0JdW5zaWduZWQgbG9uZyAoKnJlYWQpKHZvaWQpOwotCXZvaWQJICAgICAgKCpibGFua19jYWxsYmFjaykoaW50IGJsYW5rKTsKLQlpbnQJICAgICAgKCpwbV9jYWxsYmFjaykoaW50IHJlcSk7CSAgICAvKiBQcmltYXJ5IG1vZGVsIGNhbGxiYWNrICovCi0JaW50CSAgICAgICgqcG1fY2FsbGJhY2tfYXV4KShpbnQgcmVxKTsgIC8qIFNlY29uZGFyeSBjYWxsYmFjayAodXNlZCBieSBIQUwgbW9kdWxlcykgKi8KLX07Ci0KLWV4dGVybiBzdHJ1Y3QgaXBhcV9tb2RlbF9vcHMgaXBhcV9tb2RlbF9vcHM7Ci0KLXN0YXRpYyBfX2lubGluZV9fIGNvbnN0IGNoYXIgKiBoMzYwMF9nZW5lcmljX25hbWUodm9pZCkKLXsKLQlyZXR1cm4gaXBhcV9tb2RlbF9vcHMuZ2VuZXJpY19uYW1lOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGFzc2lnbl9oMzYwMF9lZ3BpbyhlbnVtIGlwYXFfZWdwaW9fdHlwZSB4LCBpbnQgbGV2ZWwpCi17Ci0JaWYgKGlwYXFfbW9kZWxfb3BzLmNvbnRyb2wpCi0JCWlwYXFfbW9kZWxfb3BzLmNvbnRyb2woeCxsZXZlbCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xyX2gzNjAwX2VncGlvKGVudW0gaXBhcV9lZ3Bpb190eXBlIHgpCi17Ci0JaWYgKGlwYXFfbW9kZWxfb3BzLmNvbnRyb2wpCi0JCWlwYXFfbW9kZWxfb3BzLmNvbnRyb2woeCwwKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfaDM2MDBfZWdwaW8oZW51bSBpcGFxX2VncGlvX3R5cGUgeCkKLXsKLQlpZiAoaXBhcV9tb2RlbF9vcHMuY29udHJvbCkKLQkJaXBhcV9tb2RlbF9vcHMuY29udHJvbCh4LDEpOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25lZCBsb25nIHJlYWRfaDM2MDBfZWdwaW8odm9pZCkKLXsKLQlpZiAoaXBhcV9tb2RlbF9vcHMucmVhZCkKLQkJcmV0dXJuIGlwYXFfbW9kZWxfb3BzLnJlYWQoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50ICBoMzYwMF9yZWdpc3Rlcl9ibGFua19jYWxsYmFjayh2b2lkICgqZikoaW50KSkKLXsKLQlpcGFxX21vZGVsX29wcy5ibGFua19jYWxsYmFjayA9IGY7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgaDM2MDBfdW5yZWdpc3Rlcl9ibGFua19jYWxsYmFjayh2b2lkICgqZikoaW50KSkKLXsKLQlpcGFxX21vZGVsX29wcy5ibGFua19jYWxsYmFjayA9IE5VTEw7Ci19Ci0KLQotc3RhdGljIF9faW5saW5lX18gaW50ICBoMzYwMF9yZWdpc3Rlcl9wbV9jYWxsYmFjayhpbnQgKCpmKShpbnQpKQotewotCWlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrX2F1eCA9IGY7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgaDM2MDBfdW5yZWdpc3Rlcl9wbV9jYWxsYmFjayhpbnQgKCpmKShpbnQpKQotewotCWlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrX2F1eCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBoMzYwMF9wb3dlcl9tYW5hZ2VtZW50KGludCByZXEpCi17Ci0JaWYgKGlwYXFfbW9kZWxfb3BzLnBtX2NhbGxiYWNrKQotCQlyZXR1cm4gaXBhcV9tb2RlbF9vcHMucG1fY2FsbGJhY2socmVxKTsKLQlyZXR1cm4gMDsKLX0KK2V4dGVybiB2b2lkICgqYXNzaWduX2gzNjAwX2VncGlvKShlbnVtIGlwYXFfZWdwaW9fdHlwZSB4LCBpbnQgbGV2ZWwpOwogCiAjZW5kaWYgLyogQVNTRU1CTFkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwX2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9oMzYwMF9ncGlvLmgKaW5kZXggNjJiMGI3OC4uYTM2Y2E3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2gzNjAwX2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaDM2MDBfZ3Bpby5oCkBAIC00OCwyMiArNDgsMTEgQEAKICNkZWZpbmUgR1BJT19IMzYwMF9PUFRfTE9DSwkJR1BJT19HUElPICgyMikKICNkZWZpbmUgR1BJT19IMzYwMF9PUFRfREVUCQlHUElPX0dQSU8gKDI3KQogCi0vKiBIMzgwMCBzcGVjaWZpYyBwaW5zICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQUNfSU4gICAgICAgICAgICAgICAgR1BJT19HUElPICgxMikKLSNkZWZpbmUgR1BJT19IMzgwMF9DT01fRFNSICAgICAgICAgICAgICBHUElPX0dQSU8gKDEzKQotI2RlZmluZSBHUElPX0gzODAwX01NQ19JTlQgICAgICAgICAgICAgIEdQSU9fR1BJTyAoMTgpCi0jZGVmaW5lIEdQSU9fSDM4MDBfTk9QVF9JTkQgICAgICAgICAgICAgR1BJT19HUElPICgyMCkgICAvKiBBbG1vc3QgZXhhY3RseSB0aGUgc2FtZSBhcyBHUElPX0gzNjAwX09QVF9ERVQgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9PUFRfQkFUX0ZBVUxUICAgICAgICBHUElPX0dQSU8gKDIyKQotI2RlZmluZSBHUElPX0gzODAwX0NMS19PVVQgICAgICAgICAgICAgIEdQSU9fR1BJTyAoMjcpCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIElSUV9HUElPX0gzNjAwX0FDVElPTl9CVVRUT04gICAgSVJRX0dQSU8xOAogI2RlZmluZSBJUlFfR1BJT19IMzYwMF9PUFRfREVUCQlJUlFfR1BJTzI3CiAKLSNkZWZpbmUgSVJRX0dQSU9fSDM4MDBfTU1DX0lOVCAgICAgICAgICBJUlFfR1BJTzE4Ci0jZGVmaW5lIElSUV9HUElPX0gzODAwX05PUFRfSU5EICAgICAgICAgSVJRX0dQSU8yMCAvKiBhbG1vc3Qgc2FtZSBhcyBPUFRfREVUICovCi0KIC8qIEgzMTAwIC8gMzYwMCBFR1BJTyBwaW5zICovCiAjZGVmaW5lIEVHUElPX0gzNjAwX1ZQUF9PTgkJKDEgPDwgMCkKICNkZWZpbmUgRUdQSU9fSDM2MDBfQ0FSRF9SRVNFVAkJKDEgPDwgMSkgICAvKiByZXNldCB0aGUgYXR0YWNoZWQgcGNtY2lhL2NvbXBhY3RmbGFzaCBjYXJkLiAgYWN0aXZlIGhpZ2guICovCkBAIC04NCw0NTcgKzczLDUgQEAKICNkZWZpbmUgRUdQSU9fSDM2MDBfTENEXzVWX09OCQkoMSA8PCAxNCkgIC8qIGVuYWJsZSA1ViB0byBMQ0QuIGFjdGl2ZSBoaWdoLiAqLwogI2RlZmluZSBFR1BJT19IMzYwMF9MVkREX09OCQkoMSA8PCAxNSkgIC8qIGVuYWJsZSA5ViBhbmQgLTYuNVYgdG8gTENELiAqLwogCi0vKioqKioqKioqKioqKioqKioqKioqIEgzODAwLCBBU0lDICMyICoqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9CYXNlICAgICAgICAgICAgKEgzNjAwX0VHUElPX1ZJUlQpCi0jZGVmaW5lIEgzODAwX0FTSUMyX09GRlNFVChzLHgseSkgICAgXAotICAgICgqKCh2b2xhdGlsZSBzICopIChfSDM4MDBfQVNJQzJfQmFzZSArIF9IMzgwMF9BU0lDMl8gIyMgeCAjIyBfQmFzZSArIF9IMzgwMF9BU0lDMl8gIyMgeCAjIyBfICMjIHkpKSkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfTk9GRlNFVChzLHgsbix5KSBcCi0gICAgKCooKHZvbGF0aWxlIHMgKikgKF9IMzgwMF9BU0lDMl9CYXNlICsgX0gzODAwX0FTSUMyXyAjIyB4ICMjIF8gIyMgbiAjIyBfQmFzZSArIF9IMzgwMF9BU0lDMl8gIyMgeCAjIyBfICMjIHkpKSkKLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19CYXNlICAgICAgICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fRGlyZWN0aW9uICAgICAgICAgICAgMHgwMDAwICAgIC8qIFIvVywgMTYgYml0cyAxOmlucHV0LCAwOm91dHB1dCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRUeXBlICAgICAgICAweDAwMDQgICAgLyogUi9XLCAxMiBiaXRzIDE6ZWRnZSwgMDpsZXZlbCAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRFZGdlVHlwZSAgICAweDAwMDggICAgLyogUi9XLCAxMiBiaXRzIDE6cmlzaW5nLCAwOmZhbGxpbmcgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0TGV2ZWxUeXBlICAgMHgwMDBDICAgIC8qIFIvVywgMTIgYml0cyAxOmhpZ2gsIDA6bG93ICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRDbGVhciAgICAgICAweDAwMTAgICAgLyogVywgICAxMiBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdEZsYWcgICAgICAgIDB4MDAxMCAgICAvKiBSLCAgIDEyIGJpdHMgLSByZWFkcyBpbnQgc3RhdHVzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0RhdGEgICAgICAgICAgICAgICAgIDB4MDAxNCAgICAvKiBSL1csIDE2IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0dQSU9fQmF0dEZhdWx0T3V0ICAgICAgICAgMHgwMDE4ICAgIC8qIFIvVywgMTYgYml0IC0gc2V0cyBsZXZlbCBvbiBiYXR0IGZhdWx0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0ludGVycnVwdEVuYWJsZSAgICAgIDB4MDAxYyAgICAvKiBSL1csIDEyIGJpdHMgMTplbmFibGUgaW50ZXJydXB0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9HUElPX0FsdGVybmF0ZSAgICAgICAgICAgIDB4MDAzYyAgICAvKiBSL1csIDEyKzEgYml0cyAtIHNldCBhbHRlcm5hdGUgZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19EaXJlY3Rpb24gICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIERpcmVjdGlvbiApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0VHlwZSAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRUeXBlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRFZGdlVHlwZSAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIEludGVycnVwdEVkZ2VUeXBlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRMZXZlbFR5cGUgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIEludGVycnVwdExldmVsVHlwZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0Q2xlYXIgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRDbGVhciApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fSW50ZXJydXB0RmxhZyAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBJbnRlcnJ1cHRGbGFnICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19EYXRhICAgICAgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIERhdGEgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9HUElPX0JhdHRGYXVsdE91dCAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgR1BJTywgQmF0dEZhdWx0T3V0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfR1BJT19JbnRlcnJ1cHRFbmFibGUgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEdQSU8sIEludGVycnVwdEVuYWJsZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0dQSU9fQWx0ZXJuYXRlICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBHUElPLCBBbHRlcm5hdGUgKQotCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfSU5fWTFfTiAgICAgICAgICAoMSA8PCAwKSAgIC8qIE91dHB1dDogVG91Y2hzY3JlZW4gWTEgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9JTl9YMCAgICAgICAgICAgICgxIDw8IDEpICAgLyogT3V0cHV0OiBUb3VjaHNjcmVlbiBYMCAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMyX0lOX1kwICAgICAgICAgICAgKDEgPDwgMikgICAvKiBPdXRwdXQ6IFRvdWNoc2NyZWVuIFkwICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfSU5fWDFfTiAgICAgICAgICAoMSA8PCAzKSAgIC8qIE91dHB1dDogVG91Y2hzY3JlZW4gWDEgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9CVF9SU1QgICAgICAgICAgICgxIDw8IDQpICAgLyogT3V0cHV0OiBCbHVldG9vdGggcmVzZXQgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9QRU5fSVJRICAgICAgICAgICgxIDw8IDUpICAgLyogSW5wdXQgOiBQZW4gZG93biAgICAgICAgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9TRF9ERVRFQ1QgICAgICAgICgxIDw8IDYpICAgLyogSW5wdXQgOiBTRCBkZXRlY3QgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9FQVJfSU5fTiAgICAgICAgICgxIDw8IDcpICAgLyogSW5wdXQgOiBBdWRpbyBqYWNrIHBsdWcgaW5zZXJ0ZWQgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9PUFRfUENNX1JFU0VUICAgICgxIDw8IDgpICAgLyogT3V0cHV0OiAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMyX09QVF9SRVNFVCAgICAgICAgKDEgPDwgOSkgICAvKiBPdXRwdXQ6ICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzJfVVNCX0RFVEVDVF9OICAgICAoMSA8PCAxMCkgIC8qIElucHV0IDogKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMl9TRF9DT05fU0xUICAgICAgICgxIDw8IDExKSAgLyogSW5wdXQgOiAqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0Jhc2UgICAgICAgICAgICAgICAgIDB4MDIwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19EaXJlY3Rpb24gICAgICAgICAgICAweDAwMDAgICAgLyogUi9XLCAxMiBiaXRzIDE6aW5wdXQsIDA6b3V0cHV0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdFR5cGUgICAgICAgIDB4MDAwNCAgICAvKiBSL1csIDEyIGJpdHMgMTplZGdlLCAwOmxldmVsICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdEVkZ2VUeXBlICAgIDB4MDAwOCAgICAvKiBSL1csIDEyIGJpdHMgMTpyaXNpbmcsIDA6ZmFsbGluZyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRMZXZlbFR5cGUgICAweDAwMEMgICAgLyogUi9XLCAxMiBiaXRzIDE6aGlnaCwgMDpsb3cgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdENsZWFyICAgICAgIDB4MDAxMCAgICAvKiBXLCAgIDIwIGJpdHMgLSA4IHNwZWNpYWwgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0RmxhZyAgICAgICAgMHgwMDEwICAgIC8qIFIsICAgMjAgYml0cyAtIDggc3BlY2lhbCAtIHJlYWRzIGludCBzdGF0dXMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fRGF0YSAgICAgICAgICAgICAgICAgMHgwMDE0ICAgIC8qIFIvVywgMTYgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19CYXR0RmF1bHRPdXQgICAgICAgICAweDAwMTggICAgLyogUi9XLCAxNiBiaXQgLSBzZXRzIGxldmVsIG9uIGJhdHQgZmF1bHQgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0tQSU9fSW50ZXJydXB0RW5hYmxlICAgICAgMHgwMDFjICAgIC8qIFIvVywgMjAgYml0cyAtIDggc3BlY2lhbCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfS1BJT19BbHRlcm5hdGUgICAgICAgICAgICAweDAwM2MgICAgLyogUi9XLCA2IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0RpcmVjdGlvbiAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgS1BJTywgRGlyZWN0aW9uICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRUeXBlICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIEludGVycnVwdFR5cGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdEVkZ2VUeXBlICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgS1BJTywgSW50ZXJydXB0RWRnZVR5cGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdExldmVsVHlwZSBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgS1BJTywgSW50ZXJydXB0TGV2ZWxUeXBlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRDbGVhciAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MzIsIEtQSU8sIEludGVycnVwdENsZWFyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19JbnRlcnJ1cHRGbGFnICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MzIsIEtQSU8sIEludGVycnVwdEZsYWcgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0RhdGEgICAgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgS1BJTywgRGF0YSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fQmF0dEZhdWx0T3V0ICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTE2LCBLUElPLCBCYXR0RmF1bHRPdXQgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX0ludGVycnVwdEVuYWJsZSAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUzMiwgS1BJTywgSW50ZXJydXB0RW5hYmxlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19BbHRlcm5hdGUgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1MTYsIEtQSU8sIEFsdGVybmF0ZSApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19TUElfSU5UICAgICAgICAoIDEgPDwgMTYgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX09XTV9JTlQgICAgICAgICggMSA8PCAxNyApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fQURDX0lOVCAgICAgICAgKCAxIDw8IDE4ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19VQVJUXzBfSU5UICAgICAoIDEgPDwgMTkgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX1VBUlRfMV9JTlQgICAgICggMSA8PCAyMCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0tQSU9fVElNRVJfMF9JTlQgICAgKCAxIDw8IDIxICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfS1BJT19USU1FUl8xX0lOVCAgICAoIDEgPDwgMjIgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9LUElPX1RJTUVSXzJfSU5UICAgICggMSA8PCAyMyApCi0KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9SRUNPUkRfQlROX04gICAgICgxIDw8IDApICAgLyogUmVjb3JkIGJ1dHRvbiAqLwotI2RlZmluZSBLUElPX0gzODAwX0FTSUMyX0tFWV81VzFfTiAgICAgICAgKDEgPDwgMSkgICAvKiBLZXlwYWQgKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfNVcyX04gICAgICAgICgxIDw8IDIpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfNVczX04gICAgICAgICgxIDw8IDMpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfNVc0X04gICAgICAgICgxIDw8IDQpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfNVc1X04gICAgICAgICgxIDw8IDUpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfTEVGVF9OICAgICAgICgxIDw8IDYpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfUklHSFRfTiAgICAgICgxIDw8IDcpICAgLyogKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfQVAxX04gICAgICAgICgxIDw8IDgpICAgLyogT2xkICJDYWxlbmRhciIgKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfQVAyX04gICAgICAgICgxIDw8IDkpICAgLyogT2xkICJTY2hlZHVsZSIgKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfQVAzX04gICAgICAgICgxIDw8IDEwKSAgLyogT2xkICJRIiAgICAgICAgKi8KLSNkZWZpbmUgS1BJT19IMzgwMF9BU0lDMl9LRVlfQVA0X04gICAgICAgICgxIDw8IDExKSAgLyogT2xkICJVbmRvIiAgICAgKi8KLQotLyogQWx0ZXJuYXRlIEtQSU8gZnVuY3Rpb25zIChzZXQgYnkgZGVmYXVsdCkgKi8KLSNkZWZpbmUgS1BJT19BTFRfSDM4MDBfQVNJQzJfS0VZXzVXMV9OICAgICAgICAoMSA8PCAxKSAgIC8qIEFjdGlvbiBrZXkgKi8KLSNkZWZpbmUgS1BJT19BTFRfSDM4MDBfQVNJQzJfS0VZXzVXMl9OICAgICAgICAoMSA8PCAyKSAgIC8qIEoxIG9mIGtleXBhZCBpbnB1dCAqLwotI2RlZmluZSBLUElPX0FMVF9IMzgwMF9BU0lDMl9LRVlfNVczX04gICAgICAgICgxIDw8IDMpICAgLyogSjIgb2Yga2V5cGFkIGlucHV0ICovCi0jZGVmaW5lIEtQSU9fQUxUX0gzODAwX0FTSUMyX0tFWV81VzRfTiAgICAgICAgKDEgPDwgNCkgICAvKiBKMyBvZiBrZXlwYWQgaW5wdXQgKi8KLSNkZWZpbmUgS1BJT19BTFRfSDM4MDBfQVNJQzJfS0VZXzVXNV9OICAgICAgICAoMSA8PCA1KSAgIC8qIEo0IG9mIGtleXBhZCBpbnB1dCAqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9TUElfQmFzZSAgICAgICAgICAgICAgICAgIDB4MDQwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfU1BJX0NvbnRyb2wgICAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfU1BJX0RhdGEgICAgICAgICAgICAgICAgICAweDAwMDQgICAgLyogUi9XIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfU1BJX0NoaXBTZWxlY3REaXNhYmxlZCAgICAweDAwMDggICAgLyogVyAgIDggYml0cyAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMyX1NQSV9Db250cm9sICAgICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIFNQSSwgQ29udHJvbCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1NQSV9EYXRhICAgICAgICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIFNQSSwgRGF0YSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1NQSV9DaGlwU2VsZWN0RGlzYWJsZWQgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIFNQSSwgQ2hpcFNlbGVjdERpc2FibGVkICkKLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfUFdNXzBfQmFzZSAgICAgICAgICAgICAgICAweDA2MDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX1BXTV8xX0Jhc2UgICAgICAgICAgICAgICAgMHgwNzAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9QV01fVGltZUJhc2UgICAgICAgICAgICAgIDB4MDAwMCAgICAvKiBSL1cgNiBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9QV01fUGVyaW9kVGltZSAgICAgICAgICAgIDB4MDAwNCAgICAvKiBSL1cgMTIgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfUFdNX0R1dHlUaW1lICAgICAgICAgICAgICAweDAwMDggICAgLyogUi9XIDEyIGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fMF9UaW1lQmFzZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFBXTSwgMCwgVGltZUJhc2UgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fMF9QZXJpb2RUaW1lICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIFBXTSwgMCwgUGVyaW9kVGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1BXTV8wX0R1dHlUaW1lICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgUFdNLCAwLCBEdXR5VGltZSApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNXzFfVGltZUJhc2UgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBQV00sIDEsIFRpbWVCYXNlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNXzFfUGVyaW9kVGltZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggdTE2LCBQV00sIDEsIFBlcmlvZFRpbWUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9QV01fMV9EdXR5VGltZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIFBXTSwgMSwgRHV0eVRpbWUgKQotCi0jZGVmaW5lIEgzODAwX0FTSUMyX1BXTV9USU1FQkFTRV9NQVNLICAgICAgICAgICAgIDB4ZiAgICAvKiBMb3cgNCBiaXRzIHNldHMgdGltZSBiYXNlLCBtYXggPSA4ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX1BXTV9USU1FQkFTRV9FTkFCTEUgICAgKCAxIDw8IDQgKSAgICAvKiBFbmFibGUgY2xvY2sgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfUFdNX1RJTUVCQVNFX0NMRUFSICAgICAoIDEgPDwgNSApICAgIC8qIENsZWFyIHRoZSBQV00gKi8KLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfTEVEXzBfQmFzZSAgICAgICAgICAgICAgICAweDA4MDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX0xFRF8xX0Jhc2UgICAgICAgICAgICAgICAgMHgwODgwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9MRURfMl9CYXNlICAgICAgICAgICAgICAgIDB4MDkwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfTEVEX1RpbWVCYXNlICAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XICA3IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0xFRF9QZXJpb2RUaW1lICAgICAgICAgICAgMHgwMDA0ICAgIC8qIFIvVyAxMiBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9MRURfRHV0eVRpbWUgICAgICAgICAgICAgIDB4MDAwOCAgICAvKiBSL1cgMTIgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfTEVEX0F1dG9TdG9wQ291bnQgICAgICAgICAweDAwMGMgICAgLyogUi9XIDE2IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMF9UaW1lQmFzZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIExFRCwgMCwgVGltZUJhc2UgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMF9QZXJpb2RUaW1lICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMCwgUGVyaW9kVGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8wX0R1dHlUaW1lICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAwLCBEdXR5VGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8wX0F1dG9TdG9wQ2xvY2sgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAwLCBBdXRvU3RvcENsb2NrICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMV9UaW1lQmFzZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIExFRCwgMSwgVGltZUJhc2UgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMV9QZXJpb2RUaW1lICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMSwgUGVyaW9kVGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8xX0R1dHlUaW1lICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAxLCBEdXR5VGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8xX0F1dG9TdG9wQ2xvY2sgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAxLCBBdXRvU3RvcENsb2NrICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMl9UaW1lQmFzZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIExFRCwgMiwgVGltZUJhc2UgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfMl9QZXJpb2RUaW1lICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCB1MTYsIExFRCwgMiwgUGVyaW9kVGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8yX0R1dHlUaW1lICAgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAyLCBEdXR5VGltZSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0xFRF8yX0F1dG9TdG9wQ2xvY2sgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoIHUxNiwgTEVELCAyLCBBdXRvU3RvcENsb2NrICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfVElNRUJBU0VfTUFTSyAgICAgICAgICAgIDB4MGYgICAgLyogTG93IDQgYml0cyBzZXRzIHRpbWUgYmFzZSwgbWF4ID0gMTMgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEX1RJTUVCQVNFX0JMSU5LICAgICAoIDEgPDwgNCApICAgIC8qIEVuYWJsZSBibGlua2luZyAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9MRURfVElNRUJBU0VfQVVUT1NUT1AgICggMSA8PCA1ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfTEVEX1RJTUVCQVNFX0FMV0FZUyAgICAoIDEgPDwgNiApICAgIC8qIEVuYWJsZSBibGluayBhbHdheXMgKi8KLQotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF8wX0Jhc2UgICAgICAgICAgICAgICAweDBBMDAKLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfMV9CYXNlICAgICAgICAgICAgICAgMHgwQzAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX1JlY2VpdmUgICAgICAgICAgICAgIDB4MDAwMCAgICAvKiBSICAgIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9UcmFuc21pdCAgICAgICAgICAgICAweDAwMDAgICAgLyogICBXICA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfSW50RW5hYmxlICAgICAgICAgICAgMHgwMDA0ICAgIC8qIFIvVyAgOCBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX0ludFZlcmlmeSAgICAgICAgICAgIDB4MDAwOCAgICAvKiBSL1cgIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9GSUZPQ29udHJvbCAgICAgICAgICAweDAwMGMgICAgLyogUi9XICA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfTGluZUNvbnRyb2wgICAgICAgICAgMHgwMDEwICAgIC8qIFIvVyAgOCBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX01vZGVtU3RhdHVzICAgICAgICAgIDB4MDAxNCAgICAvKiBSL1cgIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9MaW5lU3RhdHVzICAgICAgICAgICAweDAwMTggICAgLyogUi9XICA4IGJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX1VBUlRfU2NyYXRjaFBhZCAgICAgICAgICAgMHgwMDFjICAgIC8qIFIvVyAgOCBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9VQVJUX0Rpdmlzb3JMYXRjaEwgICAgICAgIDB4MDAyMCAgICAvKiBSL1cgIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfVUFSVF9EaXZpc29yTGF0Y2hIICAgICAgICAweDAwMjQgICAgLyogUi9XICA4IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfUmVjZWl2ZSAgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIFJlY2VpdmUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfVHJhbnNtaXQgICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIFRyYW5zbWl0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX0ludEVuYWJsZSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBJbnRFbmFibGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfSW50VmVyaWZ5ICAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIEludFZlcmlmeSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9GSUZPQ29udHJvbCAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgRklGT0NvbnRyb2wgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzBfTGluZUNvbnRyb2wgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDAsIExpbmVDb250cm9sICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8wX01vZGVtU3RhdHVzICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAwLCBNb2RlbVN0YXR1cyApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9MaW5lU3RhdHVzICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgTGluZVN0YXR1cyApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9TY3JhdGNoUGFkICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgU2NyYXRjaFBhZCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9EaXZpc29yTGF0Y2hMICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgRGl2aXNvckxhdGNoTCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMF9EaXZpc29yTGF0Y2hIICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMCwgRGl2aXNvckxhdGNoSCApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX1JlY2VpdmUgICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBSZWNlaXZlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX1RyYW5zbWl0ICAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBUcmFuc21pdCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9JbnRFbmFibGUgICAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgSW50RW5hYmxlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0ludFZlcmlmeSAgICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBJbnRWZXJpZnkgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfRklGT0NvbnRyb2wgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIEZJRk9Db250cm9sICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfVUFSVF8xX0xpbmVDb250cm9sICAgICAgSDM4MDBfQVNJQzJfTk9GRlNFVCggIHU4LCBVQVJULCAxLCBMaW5lQ29udHJvbCApCi0jZGVmaW5lIEgzODAwX0FTSUMyX1VBUlRfMV9Nb2RlbVN0YXR1cyAgICAgIEgzODAwX0FTSUMyX05PRkZTRVQoICB1OCwgVUFSVCwgMSwgTW9kZW1TdGF0dXMgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfTGluZVN0YXR1cyAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIExpbmVTdGF0dXMgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfU2NyYXRjaFBhZCAgICAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIFNjcmF0Y2hQYWQgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfRGl2aXNvckxhdGNoTCAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIERpdmlzb3JMYXRjaEwgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9VQVJUXzFfRGl2aXNvckxhdGNoSCAgICBIMzgwMF9BU0lDMl9OT0ZGU0VUKCAgdTgsIFVBUlQsIDEsIERpdmlzb3JMYXRjaEggKQotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9USU1FUl9CYXNlICAgICAgICAgICAgICAgIDB4MEUwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfVElNRVJfQ29tbWFuZCAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XICA4IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9USU1FUl9Db21tYW5kICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBUaW1lciwgQ29tbWFuZCApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfR0FUXzAgICAgICAgICAgICAoIDEgPDwgMCApICAgIC8qIEdhdGUgZW5hYmxlLCBjb3VudGVyIDAgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfR0FUXzEgICAgICAgICAgICAoIDEgPDwgMSApICAgIC8qIEdhdGUgZW5hYmxlLCBjb3VudGVyIDEgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfR0FUXzIgICAgICAgICAgICAoIDEgPDwgMiApICAgIC8qIEdhdGUgZW5hYmxlLCBjb3VudGVyIDIgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfQ0xLXzAgICAgICAgICAgICAoIDEgPDwgMyApICAgIC8qIENsb2NrIGVuYWJsZSwgY291bnRlciAwICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX1RJTUVSX0NMS18xICAgICAgICAgICAgKCAxIDw8IDQgKSAgICAvKiBDbG9jayBlbmFibGUsIGNvdW50ZXIgMSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9USU1FUl9DTEtfMiAgICAgICAgICAgICggMSA8PCA1ICkgICAgLyogQ2xvY2sgZW5hYmxlLCBjb3VudGVyIDIgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfVElNRVJfTU9ERV8wICAgICAgICAgICAoIDEgPDwgNiApICAgIC8qIE1vZGUgMCBlbmFibGUsIGNvdW50ZXIgMCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9USU1FUl9NT0RFXzEgICAgICAgICAgICggMSA8PCA3ICkgICAgLyogTW9kZSAwIGVuYWJsZSwgY291bnRlciAxICovCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0NMT0NLX0Jhc2UgICAgICAgICAgICAgICAgMHgxMDAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9DTE9DS19FbmFibGUgICAgICAgICAgICAgIDB4MDAwMCAgICAvKiBSL1cgIDE4IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9DTE9DS19FbmFibGUgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUzMiwgQ0xPQ0ssIEVuYWJsZSApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfQVVESU9fMSAgICAgICAgICAgICAgMHgwMDAxICAgIC8qIEVuYWJsZSA0LjEgTUh6IGNsb2NrIGZvciA4S2h6IGFuZCA0a2h6IHNhbXBsZSByYXRlICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0NMT0NLX0FVRElPXzIgICAgICAgICAgICAgIDB4MDAwMiAgICAvKiBFbmFibGUgMTIuMyBNSHogY2xvY2sgZm9yIDQ4S2h6IGFuZCAzMmtoeiBzYW1wbGUgcmF0ZSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9DTE9DS19BVURJT18zICAgICAgICAgICAgICAweDAwMDQgICAgLyogRW5hYmxlIDUuNiBNSHogY2xvY2sgZm9yIDExIGtIWiBzYW1wbGUgcmF0ZSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9DTE9DS19BVURJT180ICAgICAgICAgICAgICAweDAwMDggICAgLyogRW5hYmxlIDExLjI4OSBNSHogY2xvY2sgZm9yIDQ0IGFuZCAyMiBrSHogc2FtcGxlIHJhdGUgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfQURDICAgICAgICAgICAgICAoIDEgPDwgNCApICAgIC8qIDEuMDI0IE1IeiBjbG9jayB0byBBREMgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU1BJICAgICAgICAgICAgICAoIDEgPDwgNSApICAgIC8qIDQuMDk2IE1IeiBjbG9jayB0byBTUEkgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfT1dNICAgICAgICAgICAgICAoIDEgPDwgNiApICAgIC8qIDQuMDk2IE1IeiBjbG9jayB0byBPV00gKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfUFdNICAgICAgICAgICAgICAoIDEgPDwgNyApICAgIC8qIDIuMDQ4IE1IeiBjbG9jayB0byBQV00gKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfVUFSVF8xICAgICAgICAgICAoIDEgPDwgOCApICAgIC8qIDI0LjU3NiBNSHogY2xvY2sgdG8gVUFSVDEgKHR1cm4gb2ZmIGJpdCAxNikgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfVUFSVF8wICAgICAgICAgICAoIDEgPDwgOSApICAgIC8qIDI0LjU3NiBNSHogY2xvY2sgdG8gVUFSVDAgKHR1cm4gb2ZmIGJpdCAxNykgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0RfMSAgICAgICAgICAgICAoIDEgPDwgMTAgKSAgIC8qIDE2LjkzNCBNSHogdG8gU0QgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0RfMiAgICAgICAgICAgICAoIDIgPDwgMTAgKSAgIC8qIDI0LjU3NiBNSHogdG8gU0QgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0RfMyAgICAgICAgICAgICAoIDMgPDwgMTAgKSAgIC8qIDMzLjg2OSBNSHogdG8gU0QgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0RfNCAgICAgICAgICAgICAoIDQgPDwgMTAgKSAgIC8qIDQ5LjE1MiBNSHogdG8gU0QgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfRVgwICAgICAgICAgICAgICAoIDEgPDwgMTMgKSAgIC8qIEVuYWJsZSAzMi43Njgga0h6IGNyeXN0YWwgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfRVgxICAgICAgICAgICAgICAoIDEgPDwgMTQgKSAgIC8qIEVuYWJsZSAyNC41NzYgTUh6IGNyeXN0YWwgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfRVgyICAgICAgICAgICAgICAoIDEgPDwgMTUgKSAgIC8qIEVuYWJsZSAzMy44NjkgTUh6IGNyeXN0YWwgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfQ0xPQ0tfU0xPV19VQVJUXzEgICAgICAoIDEgPDwgMTYgKSAgIC8qIEVuYWJsZSAzLjY4NiBNSHogdG8gVUFSVDEgKHR1cm4gb2ZmIGJpdCA4KSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9DTE9DS19TTE9XX1VBUlRfMCAgICAgICggMSA8PCAxNyApICAgLyogRW5hYmxlIDMuNjg2IE1IeiB0byBVQVJUMCAodHVybiBvZmYgYml0IDkpICovCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0FEQ19CYXNlICAgICAgICAgICAgICAgICAgMHgxMjAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9BRENfTXVsdGlwbGV4ZXIgICAgICAgICAgIDB4MDAwMCAgICAvKiBSL1cgNCBiaXRzIC0gbG93IDMgYml0cyBzZXQgY2hhbm5lbCAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfQURDX0NvbnRyb2xTdGF0dXMgICAgICAgICAweDAwMDQgICAgLyogUi9XIDggYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfQURDX0RhdGEgICAgICAgICAgICAgICAgICAweDAwMDggICAgLyogUiAgIDEwIGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9BRENfTXVsdGlwbGV4ZXIgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCAgdTgsIEFEQywgTXVsdGlwbGV4ZXIgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9BRENfQ29udHJvbFN0YXR1cyAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCAgdTgsIEFEQywgQ29udHJvbFN0YXR1cyApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0FEQ19EYXRhICAgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHUxNiwgQURDLCBEYXRhICkKLQotI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfTVVYX0NIQU5ORUxfTUFTSyAgICAgICAgIDB4MDcgICAgLyogTG93IDMgYml0cyBzZXRzIGNoYW5uZWwuICBtYXggPSA0ICovCi0jZGVmaW5lIEgzNjAwX0FTSUMyX0FEQ19NVVhfQ0xLRU4gICAgICAgICAgKCAxIDw8IDMgKSAgICAvKiBFbmFibGUgY2xvY2sgKi8KLQotI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfQ1NSX0FEUFNfTUFTSyAgICAgICAgICAgIDB4MGYgICAgLyogTG93IDQgYml0cyBzZXRzIHByZXNjYWxlLCBtYXggPSA4ICovCi0jZGVmaW5lIEgzNjAwX0FTSUMyX0FEQ19DU1JfRlJFRV9SVU4gICAgICAgKCAxIDw8IDQgKQotI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfQ1NSX0lOVF9FTkFCTEUgICAgICggMSA8PCA1ICkKLSNkZWZpbmUgSDM2MDBfQVNJQzJfQURDX0NTUl9TVEFSVCAgICAgICAgICAoIDEgPDwgNiApICAgIC8qIFNldCB0byBzdGFydCBjb252ZXJzaW9uLiAgR29lcyB0byAwIHdoZW4gZG9uZSAqLwotI2RlZmluZSBIMzYwMF9BU0lDMl9BRENfQ1NSX0VOQUJMRSAgICAgICAgICggMSA8PCA3ICkgICAgLyogMTpwb3dlciB1cCBBREMsIDA6cG93ZXIgZG93biAqLwotCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0lOVFJfQmFzZSAgICAgICAgICAgICAgICAgMHgxNjAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9JTlRSX01hc2tBbmRGbGFnICAgICAgICAgIDB4MDAwMCAgICAvKiBSLyhXKSA4Yml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfSU5UUl9DbG9ja1ByZXNjYWxlICAgICAgICAweDAwMDQgICAgLyogUi8oVykgNWJpdHMgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX0lOVFJfVGltZXJTZXQgICAgICAgICAgICAgMHgwMDA4ICAgIC8qIFIvKFcpIDhiaXRzICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9NYXNrQW5kRmxhZyAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIElOVFIsIE1hc2tBbmRGbGFnICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9DbG9ja1ByZXNjYWxlICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIElOVFIsIENsb2NrUHJlc2NhbGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX1RpbWVyU2V0ICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1OCwgSU5UUiwgVGltZXJTZXQgKQotCi0jZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfR0xPQkFMX01BU0sgICAgICAgKCAxIDw8IDAgKSAgICAvKiBHbG9iYWwgaW50ZXJydXB0IG1hc2sgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9QT1dFUl9PTl9SRVNFVCAgICAoIDEgPDwgMSApICAgIC8qIDAxOiBQb3dlciBvbiByZXNldCAoYml0cyAxICYgMiApICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfRVhURVJOQUxfUkVTRVQgICAgKCAyIDw8IDEgKSAgICAvKiAxMDogRXh0ZXJuYWwgcmVzZXQgKGJpdHMgMSAmIDIgKSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX01BU0tfVUFSVF8wICAgICAgICggMSA8PCA0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9NQVNLX1VBUlRfMSAgICAgICAoIDEgPDwgNSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX0lOVFJfTUFTS19USU1FUiAgICAgICAgKCAxIDw8IDYgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX01BU0tfT1dNICAgICAgICAgICggMSA8PCA3ICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMl9JTlRSX0NMT0NLX1BSRVNDQUxFICAgICAgICAgIDB4MGYgICAgLyogNCBiaXRzLCBtYXggMTQgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfSU5UUl9TRVQgICAgICAgICAgICAgICAoIDEgPDwgNCApICAgIC8qIFRpbWUgYmFzZSBlbmFibGUgKi8KLQotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9PV01fQmFzZSAgICAgICAgICAgICAgICAgIDB4MTgwMAotI2RlZmluZSBfSDM4MDBfQVNJQzJfT1dNX0NvbW1hbmQgICAgICAgICAgICAgICAweDAwMDAgICAgLyogUi9XIDQgYml0cyBjb21tYW5kIHJlZ2lzdGVyICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9PV01fRGF0YSAgICAgICAgICAgICAgICAgIDB4MDAwNCAgICAvKiBSL1cgOCBiaXRzLCB0cmFuc21pdCAvIHJlY2VpdmUgYnVmZmVyICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9PV01fSW50ZXJydXB0ICAgICAgICAgICAgIDB4MDAwOCAgICAvKiBSL1cgQ29tbWFuZCByZWdpc3RlciAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzJfT1dNX0ludGVycnVwdEVuYWJsZSAgICAgICAweDAwMGMgICAgLyogUi9XIENvbW1hbmQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMyX09XTV9DbG9ja0Rpdmlzb3IgICAgICAgICAgMHgwMDEwICAgIC8qIFIvVyA1IGJpdHMgb2YgZGl2aXNvciBhbmQgcHJlLXNjYWxlICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0NvbW1hbmQgICAgICAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBPV00sIENvbW1hbmQgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fRGF0YSAgICAgICAgICAgICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIE9XTSwgRGF0YSApCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JbnRlcnJ1cHQgICAgICAgICAgSDM4MDBfQVNJQzJfT0ZGU0VUKCB1OCwgT1dNLCBJbnRlcnJ1cHQgKQotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSW50ZXJydXB0RW5hYmxlICAgIEgzODAwX0FTSUMyX09GRlNFVCggdTgsIE9XTSwgSW50ZXJydXB0RW5hYmxlICkKLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0Nsb2NrRGl2aXNvciAgICAgICBIMzgwMF9BU0lDMl9PRkZTRVQoIHU4LCBPV00sIENsb2NrRGl2aXNvciApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0NNRF9PTkVfV0lSRV9SRVNFVCAoIDEgPDwgMCApICAgIC8qIFNldCB0byBmb3JjZSByZXNldCBvbiAxLXdpcmUgYnVzICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9DTURfU1JBICAgICAgICAgICAgKCAxIDw8IDEgKSAgICAvKiBTZXQgdG8gc3dpdGNoIHRvIFNlYXJjaCBST00gYWNjZWxlcmF0b3IgbW9kZSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fQ01EX0RRX09VVFBVVCAgICAgICggMSA8PCAyICkgICAgLyogV3JpdGUgb25seSAtIGZvcmNlcyBidXMgbG93ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9DTURfRFFfSU5QVVQgICAgICAgKCAxIDw8IDMgKSAgICAvKiBSZWFkIG9ubHkgLSByZWZsZWN0cyBzdGF0ZSBvZiBidXMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5UX1BEICAgICAgICAgICAgICggMSA8PCAwICkgICAgLyogUHJlc2VuY2UgZGV0ZWN0ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRfUERSICAgICAgICAgICAgKCAxIDw8IDEgKSAgICAvKiBQcmVzZW5jZSBkZXRlY3QgcmVzdWx0ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRfVEJFICAgICAgICAgICAgKCAxIDw8IDIgKSAgICAvKiBUcmFuc21pdCBidWZmZXIgZW1wdHkgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVF9URU1UICAgICAgICAgICAoIDEgPDwgMyApICAgIC8qIFRyYW5zbWl0IHNoaWZ0IHJlZ2lzdGVyIGVtcHR5ICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRfUkJGICAgICAgICAgICAgKCAxIDw8IDQgKSAgICAvKiBSZWNlaXZlIGJ1ZmZlciBmdWxsICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVEVOX0VQRCAgICAgICAgICAoIDEgPDwgMCApICAgIC8qIEVuYWJsZSByZWNlaXZlIGJ1ZmZlciBmdWxsIGludGVycnVwdCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5URU5fSUFTICAgICAgICAgICggMSA8PCAxICkgICAgLyogRW5hYmxlIHRyYW5zbWl0IHNoaWZ0IHJlZ2lzdGVyIGVtcHR5IGludGVycnVwdCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMl9PV01fSU5URU5fRVRCRSAgICAgICAgICggMSA8PCAyICkgICAgLyogRW5hYmxlIHRyYW5zbWl0IGJ1ZmZlciBlbXB0eSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzJfT1dNX0lOVEVOX0VUTVQgICAgICAgICAoIDEgPDwgMyApICAgIC8qIElOVFIgYWN0aXZlIHN0YXRlICovCi0jZGVmaW5lIEgzODAwX0FTSUMyX09XTV9JTlRFTl9FUkJGICAgICAgICAgKCAxIDw8IDQgKSAgICAvKiBFbmFibGUgcHJlc2VuY2UgZGV0ZWN0IGludGVycnVwdCAqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMl9GbGFzaEN0bF9CYXNlICAgICAgICAgICAgIDB4MUEwMAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEgzODAwLCBBU0lDICMxCi0gKiBUaGlzIEFTSUMgaXMgYWNjZXNlZCB0aHJvdWdoIEFTSUMgIzIsIGFuZAotICogbWFwcGVkIGludG8gdGhlIDFjMDAgLSAxZjAwIHJlZ2lvbgotICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzFfT0ZGU0VUKHMseCx5KSAgIFwKLSAgICAgKCooKHZvbGF0aWxlIHMgKikgKF9IMzgwMF9BU0lDMl9CYXNlICsgX0gzODAwX0FTSUMxXyAjIyB4ICMjIF9CYXNlICsgKF9IMzgwMF9BU0lDMV8gIyMgeCAjIyBfICMjIHkgPDwgMSkpKSkKLQotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0Jhc2UgICAgICAgICAgICAgMHgxYzAwCi0KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19TdGFydFN0b3BDbG9jayAgICAgMHgwMCAgICAvKiBSL1cgOGJpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX1N0YXR1cyAgICAgICAgICAgICAweDAyICAgIC8qIFIgICBTZWUgYmVsb3csIGRlZmF1bHQgMHgwMDQwICAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfQ2xvY2tSYXRlICAgICAgICAgIDB4MDQgICAgLyogUi9XIDhiaXQsIGxvdyAzIGJpdHMgYXJlIGNsb2NrIGRpdmlzb3IgICAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19TUElSZWdpc3RlciAgICAgICAgMHgwOCAgICAvKiBSL1cgOGJpdCwgc2VlIGJlbG93ICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0NtZERhdGFDb250ICAgICAgICAweDBhICAgIC8qIFIvVyA4Yml0LCB3cml0ZSB0byBzdGFydCBNTUMgYWRhcHRlciAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfUmVzcG9uc2VUaW1lb3V0ICAgIDB4MGMgICAgLyogUi9XIDhiaXQsIGNsb2NrcyBiZWZvcmUgcmVzcG9uc2UgdGltZW91dCAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX01NQ19SZWFkVGltZW91dCAgICAgICAgMHgwZSAgICAvKiBSL1cgMTZiaXQsIGNsb2NrcyBiZWZvcmUgcmVjZWl2ZWQgZGF0YSB0aW1lb3V0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfQmxvY2tMZW5ndGggICAgICAgIDB4MTAgICAgLyogUi9XIDEwYml0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfTnVtT2ZCbG9ja3MgICAgICAgIDB4MTIgICAgLyogUi9XIDE2Yml0LCBpbiBibG9jayBtb2RlLCBudW1iZXIgb2YgYmxvY2tzICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0ludGVycnVwdE1hc2sgICAgICAweDFhICAgIC8qIFIvVyA4Yml0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfQ29tbWFuZE51bWJlciAgICAgIDB4MWMgICAgLyogUi9XIDYgYml0cyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0FyZ3VtZW50SCAgICAgICAgICAweDFlICAgIC8qIFIvVyAxNiBiaXRzICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0FyZ3VtZW50TCAgICAgICAgICAweDIwICAgIC8qIFIvVyAxNiBiaXRzICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9NTUNfUmVzRmlmbyAgICAgICAgICAgIDB4MjIgICAgLyogUiAgIDggeCAxNiBiaXRzIC0gY29udGFpbnMgcmVzcG9uc2UgRklGTyAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfTU1DX0J1ZmZlclBhcnRGdWxsICAgICAweDI4ICAgIC8qIFIvVyA4IGJpdHMgKi8KLQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU3RhcnRTdG9wQ2xvY2sgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgU3RhcnRTdG9wQ2xvY2sgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU3RhdHVzICAgICAgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgU3RhdHVzICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0Nsb2NrUmF0ZSAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggIHU4LCBNTUMsIENsb2NrUmF0ZSApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TUElSZWdpc3RlciAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBTUElSZWdpc3RlciApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DbWREYXRhQ29udCAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBDbWREYXRhQ29udCApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19SZXNwb25zZVRpbWVvdXQgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBSZXNwb25zZVRpbWVvdXQgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfUmVhZFRpbWVvdXQgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgUmVhZFRpbWVvdXQgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQmxvY2tMZW5ndGggICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgQmxvY2tMZW5ndGggKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfTnVtT2ZCbG9ja3MgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgTnVtT2ZCbG9ja3MgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfSW50ZXJydXB0TWFzayAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCAgdTgsIE1NQywgSW50ZXJydXB0TWFzayApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19Db21tYW5kTnVtYmVyICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBDb21tYW5kTnVtYmVyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0FyZ3VtZW50SCAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBNTUMsIEFyZ3VtZW50SCApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19Bcmd1bWVudEwgICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgTU1DLCBBcmd1bWVudEwgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfUmVzRmlmbyAgICAgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIE1NQywgUmVzRmlmbyApCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19CdWZmZXJQYXJ0RnVsbCAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgTU1DLCBCdWZmZXJQYXJ0RnVsbCApCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUT1BfQ0xPQ0sgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkgICAvKiBXcml0ZSB0byAiU3RhcnRTdG9wQ2xvY2siIHJlZ2lzdGVyICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFSVF9DTE9DSyAgICAgICAgICAgICAgICAgICgxIDw8IDEpCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19SRUFEX1RJTUVPVVQgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19SRVNQT05TRV9USU1FT1VUICAgICAgKDEgPDwgMSkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19DUkNfV1JJVEVfRVJST1IgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19DUkNfUkVBRF9FUlJPUiAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19TUElfUkVBRF9FUlJPUiAgICAgICAgKDEgPDwgNCkgIC8qIFNQSSBkYXRhIHRva2VuIGVycm9yIHJlY2VpdmVkICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfQ1JDX1JFU1BPTlNFX0VSUk9SICAgICgxIDw8IDUpCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfRklGT19FTVBUWSAgICAgICAgICAgICgxIDw8IDYpCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfRklGT19GVUxMICAgICAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfQ0xPQ0tfRU5BQkxFICAgICAgICAgICgxIDw8IDgpICAvKiBNdWx0aU1lZGlhQ2FyZCBjbG9jayBzdG9wcGVkICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19TVEFUVVNfREFUQV9UUkFOU0ZFUl9ET05FICAgICgxIDw8IDExKSAvKiBXcml0ZSBvcGVyYXRpb24sIGluZGljYXRlcyB0cmFuc2ZlciBmaW5pc2hlZCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfU1RBVFVTX0VORF9QUk9HUkFNICAgICAgICAgICAoMSA8PCAxMikgLyogRW5kIHdyaXRlIGFuZCByZWFkIG9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NUQVRVU19FTkRfQ09NTUFORF9SRVNQT05TRSAgKDEgPDwgMTMpIC8qIEVuZCBjb21tYW5kIHJlc3BvbnNlICovCi0KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NQSV9SRUdfU1BJX0VOQUJMRSAgICAgICAgICAgKDEgPDwgMCkgIC8qIEVuYWJsZXMgU1BJIG1vZGUgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NQSV9SRUdfQ1JDX09OICAgICAgICAgICAgICAgKDEgPDwgMSkgIC8qIDE6dHVybiBvbiBDUkMgICAgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NQSV9SRUdfU1BJX0NTX0VOQUJMRSAgICAgICAgKDEgPDwgMikgIC8qIDE6dHVybiBvbiBTUEkgQ1MgKi8KLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX1NQSV9SRUdfQ1NfQUREUkVTU19NQVNLICAgICAgMHgzOCAgICAgIC8qIEJpdHMgMyw0LDUgYXJlIHRoZSBTUEkgQ1MgcmVsYXRpdmUgYWRkcmVzcyAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DTURfREFUQV9DT05UX0ZPUk1BVF9OT19SRVNQT05TRSAgMHgwMAotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9GT1JNQVRfUjEgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0NNRF9EQVRBX0NPTlRfRk9STUFUX1IyICAgICAgICAgICAweDAyCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DTURfREFUQV9DT05UX0ZPUk1BVF9SMyAgICAgICAgICAgMHgwMwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9EQVRBX0VOQUJMRSAgICAgICAgICgxIDw8IDIpICAvKiBUaGlzIGNvbW1hbmQgY29udGFpbnMgYSBkYXRhIHRyYW5zZmVyICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DTURfREFUQV9DT05UX1dSSVRFICAgICAgICAgICAgICAgKDEgPDwgMykgIC8qIFRoaXMgZGF0YSB0cmFuc2ZlciBpcyBhIHdyaXRlICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19DTURfREFUQV9DT05UX1NUUkVBTV9NT0RFICAgICAgICAgKDEgPDwgNCkgIC8qIFRoaXMgZGF0YSB0cmFuc2ZlciBpcyBpbiBzdHJlYW0gbW9kZSAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9CVVNZX0JJVCAgICAgICAgICAgICgxIDw8IDUpICAvKiBCdXN5IHNpZ25hbCBleHBlY3RlZCBhZnRlciBjdXJyZW50IGNtZCAqLwotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQ01EX0RBVEFfQ09OVF9JTklUSUFMSVpFICAgICAgICAgICgxIDw8IDYpICAvKiBFbmFibGVzIHRoZSA4MCBiaXRzIGZvciBpbml0aWFsaXppbmcgY2FyZCAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19JTlRfTUFTS19EQVRBX1RSQU5TRkVSX0RPTkUgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfTU1DX0lOVF9NQVNLX1BST0dSQU1fRE9ORSAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfSU5UX01BU0tfRU5EX0NPTU1BTkRfUkVTUE9OU0UgICAgICgxIDw8IDIpCi0jZGVmaW5lIEgzODAwX0FTSUMxX01NQ19JTlRfTUFTS19CVUZGRVJfUkVBRFkgICAgICAgICAgICAgKDEgPDwgMykKLQotI2RlZmluZSBIMzgwMF9BU0lDMV9NTUNfQlVGRkVSX1BBUlRfRlVMTCAgICAgICAgICAgICAgICAgICgxIDw8IDApCi0KLS8qKioqKioqKiogR1BJTyAqKioqKioqKioqLwotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0Jhc2UgICAgICAgIDB4MWUwMAotCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX01hc2sgICAgICAgICAgMHgzMCAgICAvKiBSL1cgMDpkb24ndCBtYXNrLCAxOm1hc2sgaW50ZXJydXB0ICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0RpcmVjdGlvbiAgICAgMHgzMiAgICAvKiBSL1cgMDppbnB1dCwgMTpvdXRwdXQgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX091dCAgICAgICAgICAgMHgzNCAgICAvKiBSL1cgMDpvdXRwdXQgbG93LCAxOm91dHB1dCBoaWdoICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX1RyaWdnZXJUeXBlICAgMHgzNiAgICAvKiBSL1cgMDpsZXZlbCwgMTplZGdlICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0VkZ2VUcmlnZ2VyICAgMHgzOCAgICAvKiBSL1cgMDpmYWxsaW5nLCAxOnJpc2luZyAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0xldmVsVHJpZ2dlciAgMHgzQSAgICAvKiBSL1cgMDpsb3csIDE6aGlnaCBsZXZlbCBkZXRlY3QgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0xldmVsU3RhdHVzICAgMHgzQyAgICAvKiBSL1cgMDpub25lLCAxOmRldGVjdCAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0VkZ2VTdGF0dXMgICAgMHgzRSAgICAvKiBSL1cgMDpub25lLCAxOmRldGVjdCAgICAgICAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX1N0YXRlICAgICAgICAgMHg0MCAgICAvKiBSICAgU2VlIG1hc2tzIGJlbG93ICAoZGVmYXVsdCAwKSAgICAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX1Jlc2V0ICAgICAgICAgMHg0MiAgICAvKiBSL1cgU2VlIG1hc2tzIGJlbG93ICAoZGVmYXVsdCAweDA0KSAgICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX1NsZWVwTWFzayAgICAgMHg0NCAgICAvKiBSL1cgMDpkb24ndCBtYXNrLCAxOm1hc2sgdHJpZ2dlciBpbiBzbGVlcCBtb2RlICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19TbGVlcERpciAgICAgIDB4NDYgICAgLyogUi9XIGRpcmVjdGlvbiAwOmlucHV0LCAxOm91dHB1dCBpbiBzbGVlcCBtb2RlICAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX1NsZWVwT3V0ICAgICAgMHg0OCAgICAvKiBSL1cgbGV2ZWwgMDpsb3csIDE6aGlnaCBpbiBzbGVlcCBtb2RlICAgICAgICAgICAqLwotI2RlZmluZSBfSDM4MDBfQVNJQzFfR1BJT19TdGF0dXMgICAgICAgIDB4NEEgICAgLyogUiAgIFBpbiBzdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgX0gzODAwX0FTSUMxX0dQSU9fQmF0dEZhdWx0RGlyICAweDRDICAgIC8qIFIvVyBkaXJlY3Rpb24gMDppbnB1dCwgMTpvdXRwdXQgaW4gYmF0dF9mYXVsdCAgICovCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9HUElPX0JhdHRGYXVsdE91dCAgMHg0RSAgICAvKiBSL1cgbGV2ZWwgMDpsb3csIDE6aGlnaCBpbiBiYXR0X2ZhdWx0ICAgICAgICAgICAqLwotCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fTWFzayAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBNYXNrICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19EaXJlY3Rpb24gICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIERpcmVjdGlvbiApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fT3V0ICAgICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBPdXQgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1RyaWdnZXJUeXBlICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgVHJpZ2dlclR5cGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX0VkZ2VUcmlnZ2VyICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgRWRnZVRyaWdnZXIgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX0xldmVsVHJpZ2dlciBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgTGV2ZWxUcmlnZ2VyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19MZXZlbFN0YXR1cyAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIExldmVsU3RhdHVzICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19FZGdlU3RhdHVzICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIEVkZ2VTdGF0dXMgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1N0YXRlICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgR1BJTywgU3RhdGUgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1Jlc2V0ICAgICAgICBIMzgwMF9BU0lDMV9PRkZTRVQoICB1OCwgR1BJTywgUmVzZXQgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NsZWVwTWFzayAgICBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgU2xlZXBNYXNrICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TbGVlcERpciAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIFNsZWVwRGlyICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TbGVlcE91dCAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIFNsZWVwT3V0ICkKLSNkZWZpbmUgSDM4MDBfQVNJQzFfR1BJT19TdGF0dXMgICAgICAgSDM4MDBfQVNJQzFfT0ZGU0VUKCB1MTYsIEdQSU8sIFN0YXR1cyApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fQmF0dEZhdWx0RGlyIEgzODAwX0FTSUMxX09GRlNFVCggdTE2LCBHUElPLCBCYXR0RmF1bHREaXIgKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX0JhdHRGYXVsdE91dCBIMzgwMF9BU0lDMV9PRkZTRVQoIHUxNiwgR1BJTywgQmF0dEZhdWx0T3V0ICkKLQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX01BU0sgICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX0RJUkVDVElPTiAgICAgICAoMSA8PCAxKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX09VVCAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX1RSSUdHRVJfVFlQRSAgICAoMSA8PCAzKQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX0VER0VfVFJJR0dFUiAgICAoMSA8PCA0KQotI2RlZmluZSBIMzgwMF9BU0lDMV9HUElPX1NUQVRFX0xFVkVMX1RSSUdHRVIgICAoMSA8PCA1KQotCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fUkVTRVRfU09GVFdBUkUgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fUkVTRVRfQVVUT19TTEVFUCAgICAgICgxIDw8IDEpCi0jZGVmaW5lIEgzODAwX0FTSUMxX0dQSU9fUkVTRVRfRklSU1RfUFdSX09OICAgICgxIDw8IDIpCi0KLS8qIFRoZXNlIGFyZSBhbGwgb3V0cHV0cyAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0lSX09OX04gICAgICAgICAgKDEgPDwgMCkgICAvKiBBcHBseSBwb3dlciB0byB0aGUgSVIgTW9kdWxlICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfU0RfUFdSX09OICAgICAgICAoMSA8PCAxKSAgIC8qIFNlY3VyZSBEaWdpdGFsIHBvd2VyIG9uICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfUlMyMzJfT04gICAgICAgICAoMSA8PCAyKSAgIC8qIFR1cm4gb24gcG93ZXIgdG8gdGhlIFJTMjMyIGNoaXAgPyAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX1BVTFNFX0dFTiAgICAgICAgKDEgPDwgMykgICAvKiBHb2VzIHRvIHNwZWFrZXIgLyBlYXJwaG9uZSAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0NIX1RJTUVSICAgICAgICAgKDEgPDwgNCkgICAvKiAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0xDRF81Vl9PTiAgICAgICAgKDEgPDwgNSkgICAvKiBFbmFibGVzIExDRF81ViAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0xDRF9PTiAgICAgICAgICAgKDEgPDwgNikgICAvKiBFbmFibGVzIExDRF8zViAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0xDRF9QQ0kgICAgICAgICAgKDEgPDwgNykgICAvKiBDb25uZWN0cyB0byBQRFdOIG9uIExDRCBjb250cm9sbGVyICovCi0jZGVmaW5lIEdQSU9fSDM4MDBfQVNJQzFfVkdIX09OICAgICAgICAgICAoMSA8PCA4KSAgIC8qIERyaXZlcyBWR0ggb24gdGhlIExDRCAoKzk/PykgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9WR0xfT04gICAgICAgICAgICgxIDw8IDkpICAgLyogRHJpdmVycyBWR0wgb24gdGhlIExDRCAoLTY/PykgKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9GTF9QV1JfT04gICAgICAgICgxIDw8IDEwKSAgLyogRnJvbnRsaWdodCBwb3dlciBvbiAqLwotI2RlZmluZSBHUElPX0gzODAwX0FTSUMxX0JUX1BXUl9PTiAgICAgICAgKDEgPDwgMTEpICAvKiBCbHVldG9vdGggcG93ZXIgb24gKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9TUEtfT04gICAgICAgICAgICgxIDw8IDEyKSAgLyogKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9FQVJfT05fTiAgICAgICAgICgxIDw8IDEzKSAgLyogKi8KLSNkZWZpbmUgR1BJT19IMzgwMF9BU0lDMV9BVURfUFdSX09OICAgICAgICgxIDw8IDE0KSAgLyogKi8KLQotLyogV3JpdGUgZW5hYmxlIGZvciB0aGUgZmxhc2ggKi8KLQotI2RlZmluZSBfSDM4MDBfQVNJQzFfRmxhc2hXUF9CYXNlICAgICAgICAgMHgxRjAwCi0jZGVmaW5lIF9IMzgwMF9BU0lDMV9GbGFzaFdQX1ZQUF9PTiAgICAgICAgIDB4MDAgICAgLyogUiAgIDE6IHdyaXRlLCAwOiBwcm90ZWN0ICovCi0jZGVmaW5lIEgzODAwX0FTSUMxX0ZsYXNoV1BfVlBQX09OICAgICAgIEgzODAwX0FTSUMxX09GRlNFVCggdTgsIEZsYXNoV1AsIFZQUF9PTiApCiAKICNlbmRpZiAvKiBfSU5DTFVERV9IMzYwMF9HUElPX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCAwY2IzNjYwLi5hZTgxZjgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTE1Myw4ICsxNTMsNiBAQAogICovCiAjaWZkZWYgQ09ORklHX1NBMTExMQogI2RlZmluZSBOUl9JUlFTCQkJKElSUV9TMV9CVkQxX1NUU0NIRyArIDEpCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TQTExMDBfSDM4MDApCi0jZGVmaW5lIE5SX0lSUVMJCQkoSVJRX0JPQVJEX0VORCkKICNlbGlmIGRlZmluZWQoQ09ORklHX1NIQVJQX0xPQ09NTykKICNkZWZpbmUgTlJfSVJRUwkJCShJUlFfTE9DT01PX1NQSV9URU5EICsgMSkKICNlbHNlCkBAIC0xNzUsMjMgKzE3MywzIEBACiAjZGVmaW5lIElSUV9MT0NPTU9fTFRfQkFTRQkoSVJRX0JPQVJEX1NUQVJUICsgMikKICNkZWZpbmUgSVJRX0xPQ09NT19TUElfQkFTRQkoSVJRX0JPQVJEX1NUQVJUICsgMykKIAotLyogSDM4MDAtc3BlY2lmaWMgSVJRcyAoQ09ORklHX1NBMTEwMF9IMzgwMCkgKi8KLSNkZWZpbmUgSDM4MDBfS1BJT19JUlFfU1RBUlQgICAgKElSUV9CT0FSRF9TVEFSVCkKLSNkZWZpbmUgSVJRX0gzODAwX0tFWSAgICAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDApCi0jZGVmaW5lIElSUV9IMzgwMF9TUEkgICAgICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyAxKQotI2RlZmluZSBJUlFfSDM4MDBfT1dNICAgICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgMikKLSNkZWZpbmUgSVJRX0gzODAwX0FEQyAgICAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDMpCi0jZGVmaW5lIElSUV9IMzgwMF9VQVJUXzAgICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyA0KQotI2RlZmluZSBJUlFfSDM4MDBfVUFSVF8xICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgNSkKLSNkZWZpbmUgSVJRX0gzODAwX1RJTUVSXzAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArIDYpCi0jZGVmaW5lIElSUV9IMzgwMF9USU1FUl8xICAgICAgIChJUlFfQk9BUkRfU1RBUlQgKyA3KQotI2RlZmluZSBJUlFfSDM4MDBfVElNRVJfMiAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgOCkKLSNkZWZpbmUgSDM4MDBfS1BJT19JUlFfQ09VTlQgICAgOQotCi0jZGVmaW5lIEgzODAwX0dQSU9fSVJRX1NUQVJUICAgIChJUlFfQk9BUkRfU1RBUlQgKyA5KQotI2RlZmluZSBJUlFfSDM4MDBfUEVOICAgICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgOSkKLSNkZWZpbmUgSVJRX0gzODAwX1NEX0RFVEVDVCAgICAgKElSUV9CT0FSRF9TVEFSVCArIDEwKQotI2RlZmluZSBJUlFfSDM4MDBfRUFSX0lOICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgMTEpCi0jZGVmaW5lIElSUV9IMzgwMF9VU0JfREVURUNUICAgIChJUlFfQk9BUkRfU1RBUlQgKyAxMikKLSNkZWZpbmUgSVJRX0gzODAwX1NEX0NPTl9TTFQgICAgKElSUV9CT0FSRF9TVEFSVCArIDEzKQotI2RlZmluZSBIMzgwMF9HUElPX0lSUV9DT1VOVCAgICA1CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggNjM3NTVjYS4uOTQyYjE1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMTAsNyArMTAsNyBAQAogCWNwdV9kb19pZGxlKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQogewogCWlmIChtb2RlID09ICdzJykgewogCQkvKiBKdW1wIGludG8gUk9NIGF0IGFkZHJlc3MgMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMC5jCmluZGV4IDgxODQ4YWEuLmZkNzc2YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjAuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwLmMKQEAgLTIyNiwxMiArMjI2LDIyIEBACiAJLmlkICAgICAgICAgICAgID0gLTEsCiB9OwogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBqb3JuYWRhX2tiZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImpvcm5hZGE3MjBfa2JkIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBqb3JuYWRhX3RzX2RldmljZSA9IHsKKwkubmFtZQkJPSAiam9ybmFkYV90cyIsCisJLmlkCQk9IC0xLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZzYTExMTFfZGV2aWNlLAotI2lmZGVmIENPTkZJR19TQTExMDBfSk9STkFEQTcyMF9TU1AKIAkmam9ybmFkYV9zc3BfZGV2aWNlLAotI2VuZGlmCiAJJnMxZDEzeHh4ZmJfZGV2aWNlLAorCSZqb3JuYWRhX2tiZF9kZXZpY2UsCisJJmpvcm5hZGFfdHNfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgam9ybmFkYTcyMF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvY29yZS5jCmluZGV4IGEyM2ZkM2QuLjM1OGQ4NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvY29yZS5jCkBAIC0xNiwxMiArMTYsMjggQEAKICNpbmNsdWRlIDxhc20vbGVkcy5oPgogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KIAorI2RlZmluZSBJT19CQVNFICAgICAgICAgICAgICAgICAweGUwMDAwMDAwCisjZGVmaW5lIElPX1NJWkUgICAgICAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgSU9fU1RBUlQgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBST01DQVJEX1NJWkUgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFJPTUNBUkRfU1RBUlQgICAgICAgICAgIDB4MTAwMDAwMDAKKwordm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworICAgICAgICBzaG9ydCB0ZW1wOworICAgICAgICBsb2NhbF9pcnFfZGlzYWJsZSgpOworICAgICAgICAvKiBSZXNldCB0aGUgTWFjaGluZSB2aWEgcGNbM10gb2YgdGhlIHNlcXVvaWEgY2hpcHNldCAqLworICAgICAgICBvdXR3KDB4MDksMHgyNCk7CisgICAgICAgIHRlbXA9aW53KDB4MjYpOworICAgICAgICB0ZW1wID0gdGVtcCB8ICgxPDwzKSB8ICgxPDwxMCk7CisgICAgICAgIG91dHcoMHgwOSwweDI0KTsKKyAgICAgICAgb3V0dyh0ZW1wLDB4MjYpOworfQorCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewogCQkuaW9iYXNlCQk9IDB4M2Y4LApAQCAtNTAsMTQgKzY2LDM4IEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcnRjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHg3MCwKKwkJLmVuZAk9IDB4NzMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9JU0FfUlRDX0FMQVJNLAorCQkuZW5kCT0gSVJRX0lTQV9SVENfQUxBUk0sCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJ0Y19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInJ0Y19jbW9zIiwKKwkuaWQJCT0gLTEsCisJLnJlc291cmNlCT0gcnRjX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUocnRjX3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBzaGFya19pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAogCWlmIChtYWNoaW5lX2lzX3NoYXJrKCkpCisJeworCSAgICAgICAgcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZydGNfZGV2aWNlKTsKKwkJaWYgKHJldCkgcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgUlRDIGRldmljZTogJWRcbiIsIHJldCk7CiAJCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7Ci0KLQlyZXR1cm4gcmV0OworCQlpZiAocmV0KSBwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBTZXJpYWwgZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIGFyY2hfaW5pdGNhbGwoc2hhcmtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9kbWEuYwppbmRleCA2Nzc0YjhkLi4xMGI1YjhiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvZG1hLmMKQEAgLTEzLDkgKzEzLDExIEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2RtYS5oPgogCi12b2lkIF9faW5pdCBhcmNoX2RtYV9pbml0KGRtYV90ICpkbWEpCitzdGF0aWMgaW50IF9faW5pdCBzaGFya19kbWFfaW5pdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19JU0FfRE1BCi0JaXNhX2luaXRfZG1hKGRtYSk7CisJaXNhX2luaXRfZG1hKCk7CiAjZW5kaWYKKwlyZXR1cm4gMDsKIH0KK2NvcmVfaW5pdGNhbGwoc2hhcmtfZG1hX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggMDgzNmNiNy4uZjk3YTc2MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0yNyw1ICsyNywzIEBACiAJCWJuZQkxMDAxYgogCQkuZW5kbQogCi0JCS5tYWNybwl3YWl0dWFydCxyZCxyeAotCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvZnJhbWVidWZmZXIuaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2ZyYW1lYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhNWJmNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2ZyYW1lYnVmZmVyLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2ZyYW1lYnVmZmVyLmgKKyAqCisgKiBieSBBbGV4YW5kZXIgU2NodWx6CisgKgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9GUkFNRUJVRkZFUl9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRlJBTUVCVUZGRVJfSAorCisvKiBkZWZpbmVzIGZvciB0aGUgRnJhbWVidWZmZXIgKi8KKyNkZWZpbmUgRkJfU1RBUlQJCTB4MDYwMDAwMDAKKyNkZWZpbmUgRkJfU0laRQkJCTB4MDEwMDAwMDAKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDAxYmY3NjAuLjk0ZDg0YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMTAsMzUgKzEwLDggQEAKICNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKgotICogTWFwcGluZyBhcmVhcwotICovCi0jZGVmaW5lIElPX0JBU0UJCQkweGUwMDAwMDAwCi0KLSNlbHNlCi0KLSNkZWZpbmUgSU9fQkFTRQkJCTAKLQotI2VuZGlmCi0KLSNkZWZpbmUgSU9fU0laRQkJCTB4MDgwMDAwMDAKLSNkZWZpbmUgSU9fU1RBUlQJCTB4NDAwMDAwMDAKLSNkZWZpbmUgUk9NQ0FSRF9TSVpFCQkweDA4MDAwMDAwCi0jZGVmaW5lIFJPTUNBUkRfU1RBUlQJCTB4MTAwMDAwMDAKLQotCi0vKiBkZWZpbmVzIGZvciB0aGUgRnJhbWVidWZmZXIgKi8KLSNkZWZpbmUgRkJfU1RBUlQJCTB4MDYwMDAwMDAKLSNkZWZpbmUgRkJfU0laRQkJCTB4MDEwMDAwMDAKLQogI2RlZmluZSBVTkNBQ0hFQUJMRV9BRERSICAgICAgICAweGRmMDEwMDAwCiAKLSNkZWZpbmUgU0VRVU9JQV9MRURfR1JFRU4gICAgICAgKDE8PDYpCi0jZGVmaW5lIFNFUVVPSUFfTEVEX0FNQkVSICAgICAgICgxPDw1KQotI2RlZmluZSBTRVFVT0lBX0xFRF9CQUNLICAgICAgICAoMTw8NykKLQogI2RlZmluZSBwY2liaW9zX2Fzc2lnbl9hbGxfYnVzc2VzKCkgICAgIDEKIAogI2RlZmluZSBQQ0lCSU9TX01JTl9JTyAgICAgICAgICAweDYwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGM1Y2VlODIuLjljY2JjZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaW8uaApAQCAtMTEsMTAgKzExLDEwIEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKICNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAogCi0jZGVmaW5lIFBDSU9fQkFTRQkweGUwMDAwMDAwCi0jZGVmaW5lIElPX1NQQUNFX0xJTUlUCTB4ZmZmZmZmZmYKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgogCi0jZGVmaW5lIF9faW8oYSkJCSgodm9pZCBfX2lvbWVtICopKFBDSU9fQkFTRSArIChhKSkpCi0jZGVmaW5lIF9fbWVtX3BjaShhZGRyKQkoYWRkcikKKyNkZWZpbmUgX19pbyhhKSAgICAgICAgICAgICAgICAgKCh2b2lkIF9faW9tZW0gKikoMHhlMDAwMDAwMCArIChhKSkpCisKKyNkZWZpbmUgX19tZW1fcGNpKGFkZHIpIChhZGRyKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCAwNTg2YWNkLi5jOGU4YTRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC03LDcgKzcsNyBAQAogI2RlZmluZSBOUl9JUlFTCQkJMTYKIAogI2RlZmluZSBJUlFfSVNBX0tFWUJPQVJECSAxCi0jZGVmaW5lIFJUQ19JUlEJCQkgOAorI2RlZmluZSBJUlFfSVNBX1JUQ19BTEFSTQkgOAogI2RlZmluZSBJODA0Ml9LQkRfSVJRCQkgMQogI2RlZmluZSBJODA0Ml9BVVhfSVJRCQkxMgogI2RlZmluZSBJUlFfSEFSRERJU0sgICAgICAgICAgICAxNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaXNhLWRtYS5oIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvaXNhLWRtYS5oCmluZGV4IDg2NDI5OGYuLjk2YzQzYjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL2lzYS1kbWEuaAorKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9pc2EtZG1hLmgKQEAgLTYsMTAgKzYsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKIAotLyogVXNlIG9ubHkgdGhlIGxvd2VzdCA0TUIsIG5vdGhpbmcgZWxzZSB3b3Jrcy4KLSAqIFRoZSByZXN0IGlzIG5vdCBETUFhYmxlLiBTZWUgZGV2IC8gIC5wcm9wZXJ0aWVzCi0gKiBpbiBPcGVuRmlybXdhcmUuCi0gKi8KICNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMUwk4CiAjZGVmaW5lIERNQV9JU0FfQ0FTQ0FERSAgICAgICAgIDQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBjNWFiMDM4Li4zMDUzZTViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMjMsNiArMjMsNyBAQAogewogICBpZiAobm9kZSAhPSAwKSByZXR1cm47CiAgIC8qIE9ubHkgdGhlIGZpcnN0IDQgTUIgKD0xMDI0IFBhZ2VzKSBhcmUgdXNhYmxlIGZvciBETUEgKi8KKyAgLyogU2VlIGRldiAvIC0+IC5wcm9wZXJ0aWVzIGluIE9wZW5GaXJtd2FyZS4gKi8KICAgem9uZV9zaXplWzFdID0gem9uZV9zaXplWzBdIC0gMTAyNDsKICAgem9uZV9zaXplWzBdID0gMTAyNDsKICAgemhvbGVfc2l6ZVsxXSA9IHpob2xlX3NpemVbMF07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGU0NWJkNzMuLjIxYzM3M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC02LDIwICs2LDggQEAKICNpZm5kZWYgX19BU01fQVJDSF9TWVNURU1fSAogI2RlZmluZSBfX0FTTV9BUkNIX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi1zdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKLXsKLQlzaG9ydCB0ZW1wOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JLyogUmVzZXQgdGhlIE1hY2hpbmUgdmlhIHBjWzNdIG9mIHRoZSBzZXF1b2lhIGNoaXBzZXQgKi8KLQlvdXR3KDB4MDksMHgyNCk7Ci0JdGVtcD1pbncoMHgyNik7Ci0JdGVtcCA9IHRlbXAgfCAoMTw8MykgfCAoMTw8MTApOwotCW91dHcoMHgwOSwweDI0KTsKLQlvdXR3KHRlbXAsMHgyNik7Ci0KLX0KKy8qIEZvdW5kIGluIGFyY2gvbWFjaC1zaGFyay9jb3JlLmMgKi8KK2V4dGVybiB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLXNoYXJrL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggMzcyNWUxNi4uMjJjY2FiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaGFyay9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMTEsNyArMTEsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0YyhpbnQgYykKIHsKLQlpbnQgdDsKKwl2b2xhdGlsZSBpbnQgdDsKIAogCVNFUklBTF9CQVNFWzBdID0gYzsKIAl0PTB4MTAwMDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNoYXJrL2xlZHMuYyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvbGVkcy5jCmluZGV4IDhiZDhkNmIuLmM5ZTMyZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvbGVkcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2hhcmsvbGVkcy5jCkBAIC0yMiwxMiArMjIsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9sZWRzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjZGVmaW5lIExFRF9TVEFURV9FTkFCTEVECTEKICNkZWZpbmUgTEVEX1NUQVRFX0NMQUlNRUQJMgorCisjZGVmaW5lIFNFUVVPSUFfTEVEX0dSRUVOICAgICAgICgxPDw2KQorI2RlZmluZSBTRVFVT0lBX0xFRF9BTUJFUiAgICAgICAoMTw8NSkKKyNkZWZpbmUgU0VRVU9JQV9MRURfQkFDSyAgICAgICAgKDE8PDcpCisKIHN0YXRpYyBjaGFyIGxlZF9zdGF0ZTsKIHN0YXRpYyBzaG9ydCBod19sZWRfc3RhdGU7CiBzdGF0aWMgc2hvcnQgc2F2ZWRfc3RhdGU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKaW5kZXggMWM0MzQ5NC4uNTY1Nzc2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpAQCAtMzM1LDExICszMzUsMjUgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdmVyc2F0aWxlX2kyY19kZXZpY2UgPSB7CiAJLm5hbWUJCQk9ICJ2ZXJzYXRpbGUtaTJjIiwKLQkuaWQJCQk9IC0xLAorCS5pZAkJCT0gMCwKIAkubnVtX3Jlc291cmNlcwkJPSAxLAogCS5yZXNvdXJjZQkJPSAmdmVyc2F0aWxlX2kyY19yZXNvdXJjZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gdmVyc2F0aWxlX2kyY19ib2FyZF9pbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicnRjLWRzMTMwNyIsIDB4ZDAgPj4gMSksCisJCS50eXBlID0gImRzMTMzOCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZlcnNhdGlsZV9pMmNfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCB2ZXJzYXRpbGVfaTJjX2JvYXJkX2luZm8sCisJCQkJICAgICAgIEFSUkFZX1NJWkUodmVyc2F0aWxlX2kyY19ib2FyZF9pbmZvKSk7Cit9CithcmNoX2luaXRjYWxsKHZlcnNhdGlsZV9pMmNfaW5pdCk7CisKICNkZWZpbmUgVkVSU0FUSUxFX1NZU01DSQkoX19pb19hZGRyZXNzKFZFUlNBVElMRV9TWVNfQkFTRSkgKyBWRVJTQVRJTEVfU1lTX01DSV9PRkZTRVQpCiAKIHVuc2lnbmVkIGludCBtbWNfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAppbmRleCBjNTllNjEwLi44ZmZjMTJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0zNCw3ICszNCw3IEBACiAJY3B1X2RvX2lkbGUoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJdTMyIHZhbDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5oCmluZGV4IDQwZmY0MDguLmRlMjlkZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuaAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmgKQEAgLTQzLDM1ICs0MywxNiBAQAogZXh0ZXJuIHZvaWQgdzkwcDkxMF9pbml0X3VhcnRzKHN0cnVjdCB3OTB4OTAwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKIGV4dGVybiB2b2lkIHc5MHA5MTBfaW5pdF9jbG9ja3MoaW50IHh0YWwpOwogZXh0ZXJuIHZvaWQgdzkwcDkxMF9tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHA5MTBfc2VyaWFsX2RldmljZTsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHc5MHg5MDBfdGltZXI7CiAKLSNkZWZpbmUgVzkwWDkwMF9SRVMobmFtZSkJCQkJXAotc3RydWN0IHJlc291cmNlIHc5MHg5MDBfIyNuYW1lIyNfcmVzb3VyY2VbXSA9IHsJCVwKLQlbMF0gPSB7CQkJCQkJXAotCQkuc3RhcnQgPSBuYW1lIyNfUEEsCQkJXAotCQkuZW5kICAgPSBuYW1lIyNfUEEgKyAweDBmZiwJCVwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCQlcCi0JfSwJCQkJCQlcCi0JWzFdID0gewkJCQkJCVwKLQkJLnN0YXJ0ID0gSVJRXyMjbmFtZSwJCQlcCi0JCS5lbmQgICA9IElSUV8jI25hbWUsCQkJXAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwJCVwKLQl9CQkJCQkJXAotfQotCi0jZGVmaW5lIFc5MFg5MDBfREVWSUNFKGRldm5hbWUsIHJlZ25hbWUsIGRldmlkLCBwbGF0ZGV2bmFtZSkJCVwKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdzkweDkwMF8jI2Rldm5hbWUgPSB7CQkJCVwKLQkubmFtZQkJPSBwbGF0ZGV2bmFtZSwJCQkJCVwKLQkuaWQJCT0gZGV2aWQsCQkJCQlcCi0JLm51bV9yZXNvdXJjZXMgCT0gQVJSQVlfU0laRSh3OTB4OTAwXyMjcmVnbmFtZSMjX3Jlc291cmNlKSwJXAotCS5yZXNvdXJjZSAJPSB3OTB4OTAwXyMjcmVnbmFtZSMjX3Jlc291cmNlLAkJCVwKLX0KLQotI2RlZmluZSBXOTBYOTAwX1VBUlRDRkcocG9ydCwgZmxhZywgdWMsIHVsYywgdWZjKQlcCi17CQkJCQkJCVwKLQkJLmh3cG9ydAk9IHBvcnQsCQkJCVwKLQkJLmZsYWdzCT0gZmxhZywJCQkJXAotCQkudWNvbgk9IHVjLAkJCQlcCi0JCS51bGNvbgk9IHVsYywJCQkJXAotCQkudWZjb24JPSB1ZmMsCQkJCVwKKyNkZWZpbmUgVzkwWDkwMF84MjUwUE9SVChuYW1lKQkJCQkJXAorewkJCQkJCQkJXAorCS5tZW1iYXNlCT0gbmFtZSMjX0JBLAkJCQlcCisJLm1hcGJhc2UJPSBuYW1lIyNfUEEsCQkJCVwKKwkuaXJxCQk9IElSUV8jI25hbWUsCQkJCVwKKwkudWFydGNsawk9IDExMzEzNjAwLAkJCQlcCisJLnJlZ3NoaWZ0CT0gMiwJCQkJCVwKKwkuaW90eXBlCQk9IFVQSU9fTUVNLAkJCQlcCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCwJXAogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKaW5kZXggOTM3NTNmOS4uOTQwNjQwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0yMSw3ICsyMSw3IEBACiB7CiB9CiAKLXN0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQorc3RhdGljIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAljcHVfcmVzZXQoMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC13OTBwOTEwZXZiLmMgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC13OTBwOTEwZXZiLmMKaW5kZXggOWViYzkzZi4uNzI2ZmY2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL21hY2gtdzkwcDkxMGV2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLXc5MHA5MTBldmIuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0zMiwyOCArMzMsNjcgQEAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgogCiAjaW5jbHVkZSAiY3B1LmgiCisvKnc5MHA5MTAgZXZiIG5vcmZsYXNoIGRyaXZlciBkYXRhICovCiAKLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdzkwcDkxMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworI2RlZmluZSBXOTBQOTEwX0ZMQVNIX0JBU0UJMHhBMDAwMDAwMAorI2RlZmluZSBXOTBQOTEwX0ZMQVNIX1NJWkUJMHg0MDAwMDAKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHc5MHA5MTBfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJPQkiTk9SIFBhcnRpdGlvbiAxIGZvciBrZXJuZWwgKDk2MEspIiwKKwkJLnNpemUJPQkweEYwMDAwLAorCQkub2Zmc2V0CT0JMHgxMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPQkiTk9SIFBhcnRpdGlvbiAyIGZvciBpbWFnZSAoMU0pIiwKKwkJLnNpemUJPQkweDEwMDAwMCwKKwkJLm9mZnNldAk9CTB4MTAwMDAwLAorCX0sCisJeworCQkubmFtZQk9CSJOT1IgUGFydGl0aW9uIDMgZm9yIHVzZXIgKDJNKSIsCisJCS5zaXplCT0JMHgyMDAwMDAsCisJCS5vZmZzZXQJPQkweDAwMjAwMDAwLAorCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdzkweDkwMF91YXJ0Y2ZnIHc5MHA5MTBfdWFydGNmZ3NbXSA9IHsKLQlXOTBYOTAwX1VBUlRDRkcoMCwgMCwgMCwgMCwgMCksCi0JVzkwWDkwMF9VQVJUQ0ZHKDEsIDAsIDAsIDAsIDApLAotCVc5MFg5MDBfVUFSVENGRygyLCAwLCAwLCAwLCAwKSwKLQlXOTBYOTAwX1VBUlRDRkcoMywgMCwgMCwgMCwgMCksCi0JVzkwWDkwMF9VQVJUQ0ZHKDQsIDAsIDAsIDAsIDApLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgdzkwcDkxMF9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPQkyLAorCS5wYXJ0cwkJPQl3OTBwOTEwX2ZsYXNoX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0JQVJSQVlfU0laRSh3OTBwOTEwX2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB3OTBwOTEwX2ZsYXNoX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0JVzkwUDkxMF9GTEFTSF9CQVNFLAorCQkuZW5kCT0JVzkwUDkxMF9GTEFTSF9CQVNFICsgVzkwUDkxMF9GTEFTSF9TSVpFIC0gMSwKKwkJLmZsYWdzCT0JSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdzkwcDkxMF9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0JInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPQkwLAorCS5kZXYJCT0geworCQkJCS5wbGF0Zm9ybV9kYXRhID0gJnc5MHA5MTBfZmxhc2hfZGF0YSwKKwkJCX0sCisJLnJlc291cmNlCT0JdzkwcDkxMF9mbGFzaF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPQlBUlJBWV9TSVpFKHc5MHA5MTBfZmxhc2hfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgdzkwcDkxMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewogfTsKIAogLypIZXJlIHNob3VsZCBiZSB5b3VyIGV2YiByZXNvdXJzZSxzdWNoIGFzIExDRCovCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp3OTBwOTEwZXZiX2RldltdIF9faW5pdGRhdGEgPSB7CisJJnc5MHA5MTBfc2VyaWFsX2RldmljZSwKKwkmdzkwcDkxMF9mbGFzaF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdzkwcDkxMGV2Yl9tYXBfaW8odm9pZCkKIHsKIAl3OTBwOTEwX21hcF9pbyh3OTBwOTEwX2lvZGVzYywgQVJSQVlfU0laRSh3OTBwOTEwX2lvZGVzYykpOwogCXc5MHA5MTBfaW5pdF9jbG9ja3MoMCk7Ci0JdzkwcDkxMF9pbml0X3VhcnRzKHc5MHA5MTBfdWFydGNmZ3MsIEFSUkFZX1NJWkUodzkwcDkxMF91YXJ0Y2ZncykpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgdzkwcDkxMGV2Yl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdzkwcDkxMC5jIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL3c5MHA5MTAuYwppbmRleCBhYTc4M2JjLi4yYmNiYWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvdzkwcDkxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC93OTBwOTEwLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtMzYsMTIgKzM3LDYgQEAKIAogI2luY2x1ZGUgImNwdS5oIgogCi0vKlc5MFA5MTAgaGFzIGZpdmUgdWFydHMqLwotCi0jZGVmaW5lIE1BWF9VQVJUX0NPVU5UIDUKLXN0YXRpYyBpbnQgdWFydF9jb3VudDsKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1YXJ0X2RldnNbTUFYX1VBUlRfQ09VTlQtMV07Ci0KIC8qIEluaXRpYWwgSU8gbWFwcGluZ3MgKi8KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB3OTBwOTEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CkBAIC01Myw0OCArNDgsMTkgQEAKIAkvKklPREVTQ19FTlQoTENEKSwqLwogfTsKIAotLypJbml0IHRoZSBkZXYgcmVzb3VyY2UqLworLyogSW5pdGlhbCBzZXJpYWwgcGxhdGZvcm0gZGF0YSAqLwogCi1zdGF0aWMgVzkwWDkwMF9SRVMoVUFSVDApOwotc3RhdGljIFc5MFg5MDBfUkVTKFVBUlQxKTsKLXN0YXRpYyBXOTBYOTAwX1JFUyhVQVJUMik7Ci1zdGF0aWMgVzkwWDkwMF9SRVMoVUFSVDMpOwotc3RhdGljIFc5MFg5MDBfUkVTKFVBUlQ0KTsKLXN0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MCwgVUFSVDAsIDAsICJ3OTB4OTAwLXVhcnQiKTsKLXN0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MSwgVUFSVDEsIDEsICJ3OTB4OTAwLXVhcnQiKTsKLXN0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MiwgVUFSVDIsIDIsICJ3OTB4OTAwLXVhcnQiKTsKLXN0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0MywgVUFSVDMsIDMsICJ3OTB4OTAwLXVhcnQiKTsKLXN0YXRpYyBXOTBYOTAwX0RFVklDRSh1YXJ0NCwgVUFSVDQsIDQsICJ3OTB4OTAwLXVhcnQiKTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVhcnRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnc5MHg5MDBfdWFydDAsCi0JJnc5MHg5MDBfdWFydDEsCi0JJnc5MHg5MDBfdWFydDIsCi0JJnc5MHg5MDBfdWFydDMsCi0JJnc5MHg5MDBfdWFydDQKK3N0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCB3OTBwOTEwX3VhcnRfZGF0YVtdID0geworCVc5MFg5MDBfODI1MFBPUlQoVUFSVDApLAogfTsKIAotLypJbml0IFc5MFA5MTAgdWFydCBkZXZpY2UqLwotCi12b2lkIF9faW5pdCB3OTBwOTEwX2luaXRfdWFydHMoc3RydWN0IHc5MHg5MDBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGRldjsKLQlpbnQgdWFydCwgdWFydGRldjsKLQotCS8qQnkgbWluKCkgdG8ganVkZ2UgY291bnQgb2YgdWFydCBiZSB1c2VkIGluZGVlZCovCi0KLQl1YXJ0ZGV2ID0gQVJSQVlfU0laRSh1YXJ0X2RldmljZXMpOwotCW5vID0gbWluKHVhcnRkZXYsIG5vKTsKLQotCWZvciAodWFydCA9IDA7IHVhcnQgPCBubzsgdWFydCsrLCBjZmcrKykgewotCQlpZiAoY2ZnLT5od3BvcnQgIT0gdWFydCkKLQkJCXByaW50ayhLRVJOX0VSUiAidzkweDkwMF91YXJ0Y2ZnWyVkXSBlcnJvclxuIiwgdWFydCk7Ci0JCXBsYXRkZXYgPSB1YXJ0X2RldmljZXNbY2ZnLT5od3BvcnRdOwotCQl1YXJ0X2RldnNbdWFydF0gPSBwbGF0ZGV2OwotCQlwbGF0ZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGNmZzsKLQl9Ci0JdWFydF9jb3VudCA9IHVhcnQ7Ci19CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHc5MHA5MTBfc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJCT0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorCS5kZXYJCQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSB3OTBwOTEwX3VhcnRfZGF0YSwKKwl9LAorfTsKIAogLypJbml0IFc5MFA5MTAgZXZiIGlvKi8KIApAQCAtMTIyLDEzICs4OCw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHc5MHg5MDBfYXJjaF9pbml0KHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHc5MHA5MTBfaW5pdF9jcHUoKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXModWFydF9kZXZzLCB1YXJ0X2NvdW50KTsKLQorCXJldHVybiB3OTBwOTEwX2luaXRfY3B1KCk7CiB9CiBhcmNoX2luaXRjYWxsKHc5MHg5MDBfYXJjaF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGQ0OTBmMzcuLjIwOTc5NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMTg2LDYgKzE4NiwyNCBAQAogCSAgU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEFSTTkyNlQgcHJvY2Vzc29yLgogCSAgT3RoZXJ3aXNlLCBzYXkgTi4KIAorIyBGQTUyNgorY29uZmlnIENQVV9GQTUyNgorCWJvb2wKKwlzZWxlY3QgQ1BVXzMydjQKKwlzZWxlY3QgQ1BVX0FCUlRfRVY0CisJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NQMTVfTU1VCisJc2VsZWN0IENQVV9DQUNIRV9GQQorCXNlbGVjdCBDUFVfQ09QWV9GQSBpZiBNTVUKKwlzZWxlY3QgQ1BVX1RMQl9GQSBpZiBNTVUKKwloZWxwCisJICBUaGUgRkE1MjYgaXMgYSB2ZXJzaW9uIG9mIHRoZSBBUk12NCBjb21wYXRpYmxlIHByb2Nlc3NvciB3aXRoCisJICBCcmFuY2ggVGFyZ2V0IEJ1ZmZlciwgVW5pZmllZCBUTEIgYW5kIGNhY2hlIGxpbmUgc2l6ZSAxNi4KKworCSAgU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEZBNTI2IHByb2Nlc3Nvci4KKwkgIE90aGVyd2lzZSwgc2F5IE4uCisKICMgQVJNOTQwVAogY29uZmlnIENQVV9BUk05NDBUCiAJYm9vbCAiU3VwcG9ydCBBUk05NDBUIHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SCkBAIC0zNDAsNiArMzU4LDE3IEBACiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAJc2VsZWN0IElPXzM2CiAKKyMgTWFydmVsbCBQSjEgKE1vaGF3aykKK2NvbmZpZyBDUFVfTU9IQVdLCisJYm9vbAorCXNlbGVjdCBDUFVfMzJ2NQorCXNlbGVjdCBDUFVfQUJSVF9FVjVUCisJc2VsZWN0IENQVV9QQUJSVF9OT0lGQVIKKwlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NQMTVfTU1VCisJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCisJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VCisKICMgRmVyb2Nlb24KIGNvbmZpZyBDUFVfRkVST0NFT04KIAlib29sCkBAIC00ODQsNiArNTEzLDkgQEAKIGNvbmZpZyBDUFVfQ0FDSEVfVklQVAogCWJvb2wKIAorY29uZmlnIENQVV9DQUNIRV9GQQorCWJvb2wKKwogaWYgTU1VCiAjIFRoZSBjb3B5LXBhZ2UgbW9kZWwKIGNvbmZpZyBDUFVfQ09QWV9WMwpAQCAtNDk4LDYgKzUzMCw5IEBACiBjb25maWcgQ1BVX0NPUFlfRkVST0NFT04KIAlib29sCiAKK2NvbmZpZyBDUFVfQ09QWV9GQQorCWJvb2wKKwogY29uZmlnIENQVV9DT1BZX1Y2CiAJYm9vbAogCkBAIC01MjgsNiArNTYzLDEzIEBACiAJaGVscAogCSAgRmVyb2Nlb24gVExCICh2NHdiaSB3aXRoIG5vbi1vdXRlci1jYWNoYWJsZSBwYWdlIHRhYmxlIHdhbGtzKS4KIAorY29uZmlnIENQVV9UTEJfRkEKKwlib29sCisJaGVscAorCSAgRmFyYWRheSBBUk0gRkE1MjYgYXJjaGl0ZWN0dXJlLCB1bmlmaWVkIFRMQiB3aXRoIHdyaXRlYmFjayBjYWNoZQorCSAgYW5kIGludmFsaWRhdGUgaW5zdHJ1Y3Rpb24gY2FjaGUgZW50cnkuIEJyYW5jaCB0YXJnZXQgYnVmZmVyIGlzCisJICBhbHNvIHN1cHBvcnRlZC4KKwogY29uZmlnIENQVV9UTEJfVjYKIAlib29sCiAKQEAgLTU2OSw3ICs2MTEsNyBAQAogCiBjb25maWcgQVJNX1RIVU1CCiAJYm9vbCAiU3VwcG9ydCBUaHVtYiB1c2VyIGJpbmFyaWVzIgotCWRlcGVuZHMgb24gQ1BVX0FSTTcyMFQgfHwgQ1BVX0FSTTc0MFQgfHwgQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTk0MFQgfHwgQ1BVX0FSTTk0NkUgfHwgQ1BVX0FSTTEwMjAgfHwgQ1BVX0FSTTEwMjBFIHx8IENQVV9BUk0xMDIyIHx8IENQVV9BUk0xMDI2IHx8IENQVV9YU0NBTEUgfHwgQ1BVX1hTQzMgfHwgQ1BVX1Y2IHx8IENQVV9WNyB8fCBDUFVfRkVST0NFT04KKwlkZXBlbmRzIG9uIENQVV9BUk03MjBUIHx8IENQVV9BUk03NDBUIHx8IENQVV9BUk05MjBUIHx8IENQVV9BUk05MjJUIHx8IENQVV9BUk05MjVUIHx8IENQVV9BUk05MjZUIHx8IENQVV9BUk05NDBUIHx8IENQVV9BUk05NDZFIHx8IENQVV9BUk0xMDIwIHx8IENQVV9BUk0xMDIwRSB8fCBDUFVfQVJNMTAyMiB8fCBDUFVfQVJNMTAyNiB8fCBDUFVfWFNDQUxFIHx8IENQVV9YU0MzIHx8IENQVV9NT0hBV0sgfHwgQ1BVX1Y2IHx8IENQVV9WNyB8fCBDUFVfRkVST0NFT04KIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBpbmNsdWRlIGtlcm5lbCBzdXBwb3J0IGZvciBydW5uaW5nIHVzZXIgc3BhY2UKQEAgLTYzOCw3ICs2ODAsNyBAQAogCiBjb25maWcgQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIAlib29sICJGb3JjZSB3cml0ZSB0aHJvdWdoIEQtY2FjaGUiCi0JZGVwZW5kcyBvbiAoQ1BVX0FSTTc0MFQgfHwgQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTk0MFQgfHwgQ1BVX0FSTTk0NkUgfHwgQ1BVX0FSTTEwMjApICYmICFDUFVfRENBQ0hFX0RJU0FCTEUKKwlkZXBlbmRzIG9uIChDUFVfQVJNNzQwVCB8fCBDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTIyVCB8fCBDUFVfQVJNOTI1VCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfQVJNOTQwVCB8fCBDUFVfQVJNOTQ2RSB8fCBDUFVfQVJNMTAyMCB8fCBDUFVfRkE1MjYpICYmICFDUFVfRENBQ0hFX0RJU0FCTEUKIAlkZWZhdWx0IHkgaWYgQ1BVX0FSTTkyNVQKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHVzZSB0aGUgZGF0YSBjYWNoZSBpbiB3cml0ZXRocm91Z2ggbW9kZS4gVW5sZXNzIHlvdQpAQCAtNjUzLDcgKzY5NSw3IEBACiAKIGNvbmZpZyBDUFVfQlBSRURJQ1RfRElTQUJMRQogCWJvb2wgIkRpc2FibGUgYnJhbmNoIHByZWRpY3Rpb24iCi0JZGVwZW5kcyBvbiBDUFVfQVJNMTAyMCB8fCBDUFVfVjYgfHwgQ1BVX1hTQzMgfHwgQ1BVX1Y3CisJZGVwZW5kcyBvbiBDUFVfQVJNMTAyMCB8fCBDUFVfVjYgfHwgQ1BVX01PSEFXSyB8fCBDUFVfWFNDMyB8fCBDUFVfVjcgfHwgQ1BVX0ZBNTI2CiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBkaXNhYmxlIGJyYW5jaCBwcmVkaWN0aW9uLiAgSWYgdW5zdXJlLCBzYXkgTi4KIApAQCAtNzA0LDcgKzc0Niw4IEBACiAKIGNvbmZpZyBDQUNIRV9MMlgwCiAJYm9vbCAiRW5hYmxlIHRoZSBMMngwIG91dGVyIGNhY2hlIGNvbnRyb2xsZXIiCi0JZGVwZW5kcyBvbiBSRUFMVklFV19FQl9BUk0xMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMU1QIHx8IE1BQ0hfUkVBTFZJRVdfUEIxMTc2IHx8IFJFQUxWSUVXX0VCX0E5TVAKKwlkZXBlbmRzIG9uIFJFQUxWSUVXX0VCX0FSTTExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExTVAgfHwgTUFDSF9SRUFMVklFV19QQjExNzYgfHwgXAorCQkgICBSRUFMVklFV19FQl9BOU1QIHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMzEKIAlkZWZhdWx0IHkKIAlzZWxlY3QgT1VURVJfQ0FDSEUKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9NYWtlZmlsZSBiL2FyY2gvYXJtL21tL01ha2VmaWxlCmluZGV4IDQ4MGY3OGEuLjYzZTNmNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21tL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBACiAKIG9iai0kKENPTkZJR19BTElHTk1FTlRfVFJBUCkJKz0gYWxpZ25tZW50Lm8KIG9iai0kKENPTkZJR19ESVNDT05USUdNRU0pCSs9IGRpc2NvbnRpZy5vCitvYmotJChDT05GSUdfSElHSE1FTSkJCSs9IGhpZ2htZW0ubwogCiBvYmotJChDT05GSUdfQ1BVX0FCUlRfTk9NTVUpCSs9IGFib3J0LW5vbW11Lm8KIG9iai0kKENPTkZJR19DUFVfQUJSVF9FVjQpCSs9IGFib3J0LWV2NC5vCkBAIC0zMiw2ICszMyw3IEBACiBvYmotJChDT05GSUdfQ1BVX0NBQ0hFX1Y0V0IpCSs9IGNhY2hlLXY0d2Iubwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WNikJKz0gY2FjaGUtdjYubwogb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9WNykJKz0gY2FjaGUtdjcubworb2JqLSQoQ09ORklHX0NQVV9DQUNIRV9GQSkJKz0gY2FjaGUtZmEubwogCiBvYmotJChDT05GSUdfQ1BVX0NPUFlfVjMpCSs9IGNvcHlwYWdlLXYzLm8KIG9iai0kKENPTkZJR19DUFVfQ09QWV9WNFdUKQkrPSBjb3B5cGFnZS12NHd0Lm8KQEAgLTQxLDYgKzQzLDcgQEAKIG9iai0kKENPTkZJR19DUFVfU0ExMTAwKQkrPSBjb3B5cGFnZS12NG1jLm8KIG9iai0kKENPTkZJR19DUFVfWFNDQUxFKQkrPSBjb3B5cGFnZS14c2NhbGUubwogb2JqLSQoQ09ORklHX0NQVV9YU0MzKQkJKz0gY29weXBhZ2UteHNjMy5vCitvYmotJChDT05GSUdfQ1BVX0NPUFlfRkEpCSs9IGNvcHlwYWdlLWZhLm8KIAogb2JqLSQoQ09ORklHX0NQVV9UTEJfVjMpCSs9IHRsYi12My5vCiBvYmotJChDT05GSUdfQ1BVX1RMQl9WNFdUKQkrPSB0bGItdjQubwpAQCAtNDksNiArNTIsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9UTEJfRkVST0NFT04pCSs9IHRsYi12NHdiaS5vCSMgcmV1c2UgdjR3YmkgVExCIGZ1bmN0aW9ucwogb2JqLSQoQ09ORklHX0NQVV9UTEJfVjYpCSs9IHRsYi12Ni5vCiBvYmotJChDT05GSUdfQ1BVX1RMQl9WNykJKz0gdGxiLXY3Lm8KK29iai0kKENPTkZJR19DUFVfVExCX0ZBKQkrPSB0bGItZmEubwogCiBvYmotJChDT05GSUdfQ1BVX0FSTTYxMCkJKz0gcHJvYy1hcm02Xzcubwogb2JqLSQoQ09ORklHX0NQVV9BUk03MTApCSs9IHByb2MtYXJtNl83Lm8KQEAgLTYyLDYgKzY2LDcgQEAKIG9iai0kKENPTkZJR19DUFVfQVJNOTI2VCkJKz0gcHJvYy1hcm05MjYubwogb2JqLSQoQ09ORklHX0NQVV9BUk05NDBUKQkrPSBwcm9jLWFybTk0MC5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTk0NkUpCSs9IHByb2MtYXJtOTQ2Lm8KK29iai0kKENPTkZJR19DUFVfRkE1MjYpCQkrPSBwcm9jLWZhNTI2Lm8KIG9iai0kKENPTkZJR19DUFVfQVJNMTAyMCkJKz0gcHJvYy1hcm0xMDIwLm8KIG9iai0kKENPTkZJR19DUFVfQVJNMTAyMEUpCSs9IHByb2MtYXJtMTAyMGUubwogb2JqLSQoQ09ORklHX0NQVV9BUk0xMDIyKQkrPSBwcm9jLWFybTEwMjIubwpAQCAtNzAsNiArNzUsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9TQTExMDApCSs9IHByb2Mtc2ExMTAwLm8KIG9iai0kKENPTkZJR19DUFVfWFNDQUxFKQkrPSBwcm9jLXhzY2FsZS5vCiBvYmotJChDT05GSUdfQ1BVX1hTQzMpCQkrPSBwcm9jLXhzYzMubworb2JqLSQoQ09ORklHX0NQVV9NT0hBV0spCSs9IHByb2MtbW9oYXdrLm8KIG9iai0kKENPTkZJR19DUFVfRkVST0NFT04pCSs9IHByb2MtZmVyb2Nlb24ubwogb2JqLSQoQ09ORklHX0NQVV9WNikJCSs9IHByb2MtdjYubwogb2JqLSQoQ09ORklHX0NQVV9WNykJCSs9IHByb2MtdjcubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtZmEuUyBiL2FyY2gvYXJtL21tL2NhY2hlLWZhLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzYThmNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2NhY2hlLWZhLlMKQEAgLTAsMCArMSwyMjAgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vY2FjaGUtZmEuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgRmFyYWRheSBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIEJhc2VkIG9uIGNhY2hlLXY0d2IuUzoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMiBSdXNzZWxsIGtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBQcm9jZXNzb3JzOiBGQTUyMCBGQTUyNiBGQTYyNgkKKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgorCisvKgorICogVGhlIHNpemUgb2Ygb25lIGRhdGEgY2FjaGUgbGluZS4KKyAqLworI2RlZmluZSBDQUNIRV9ETElORVNJWkUJMTYKKworLyoKKyAqIFRoZSB0b3RhbCBzaXplIG9mIHRoZSBkYXRhIGNhY2hlLgorICovCisjaWZkZWYgQ09ORklHX0FSQ0hfR0VNSU5JCisjZGVmaW5lIENBQ0hFX0RTSVpFCTgxOTIKKyNlbHNlCisjZGVmaW5lIENBQ0hFX0RTSVpFCTE2Mzg0IAorI2VuZGlmIAorCisvKiBGSVhNRTogcHV0IG9wdGltYWwgdmFsdWUgaGVyZS4gQ3VycmVudCBvbmUgaXMganVzdCBlc3RpbWF0aW9uICovCisjZGVmaW5lIENBQ0hFX0RMSU1JVAkoQ0FDSEVfRFNJWkUgKiAyKQorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9hbGwoKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIGFsbCBjYWNoZSBlbnRyaWVzIGluIGEgcGFydGljdWxhciBhZGRyZXNzCisgKglzcGFjZS4KKyAqLworRU5UUlkoZmFfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisJLyogRkFMTFRIUk9VR0ggKi8KKy8qCisgKglmbHVzaF9rZXJuX2NhY2hlX2FsbCgpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIGVudGlyZSBjYWNoZS4KKyAqLworRU5UUlkoZmFfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisJbW92CWlwLCAjMAorCW1vdglyMiwgI1ZNX0VYRUMKK19fZmx1c2hfd2hvbGVfY2FjaGU6CisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTQsIDAJCUAgY2xlYW4vaW52YWxpZGF0ZSBEIGNhY2hlCisJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDYJCUAgaW52YWxpZGF0ZSBCVEIKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgNAkJQCBwcmVmZXRjaCBmbHVzaAorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCwgZmxhZ3MpCisgKgorICoJSW52YWxpZGF0ZSBhIHJhbmdlIG9mIGNhY2hlIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZAorICoJYWRkcmVzcyBzcGFjZS4KKyAqCisgKgktIHN0YXJ0IC0gc3RhcnQgYWRkcmVzcyAoaW5jbHVzaXZlLCBwYWdlIGFsaWduZWQpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUsIHBhZ2UgYWxpZ25lZCkKKyAqCS0gZmxhZ3MJLSB2bWFfYXJlYV9zdHJ1Y3QgZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KK0VOVFJZKGZhX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAorCXN1YglyMywgcjEsIHIwCQkJQCBjYWxjdWxhdGUgdG90YWwgc2l6ZQorCWNtcAlyMywgI0NBQ0hFX0RMSU1JVAkJQCB0b3RhbCBzaXplID49IGxpbWl0PworCWJocwlfX2ZsdXNoX3dob2xlX2NhY2hlCQlAIGZsdXNoIHdob2xlIEQgY2FjaGUKKworMToJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgbGluZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDYJCUAgaW52YWxpZGF0ZSBCVEIKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRhdGEgd3JpdGUgYmFycmllcgorCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgNAkJQCBwcmVmZXRjaCBmbHVzaAorCW1vdglwYywgbHIKKworLyoKKyAqCWNvaGVyZW50X2tlcm5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0ICAtIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShmYV9jb2hlcmVudF9rZXJuX3JhbmdlKQorCS8qIGZhbGwgdGhyb3VnaCAqLworCisvKgorICoJY29oZXJlbnRfdXNlcl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJcmVnaW9uIGRlc2NyaWJlZCBieSBzdGFydC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGZhX2NvaGVyZW50X3VzZXJfcmFuZ2UpCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQgZW50cnkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDYJCUAgaW52YWxpZGF0ZSBCVEIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA0CQlAIHByZWZldGNoIGZsdXNoCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZShrYWRkcikKKyAqCisgKglFbnN1cmUgdGhhdCB0aGUgZGF0YSBoZWxkIGluIHRoZSBwYWdlIGthZGRyIGlzIHdyaXR0ZW4gYmFjaworICoJdG8gdGhlIHBhZ2UgaW4gcXVlc3Rpb24uCisgKgorICoJLSBrYWRkciAgIC0ga2VybmVsIGFkZHJlc3MgKGd1YXJhbnRlZWQgdG8gYmUgcGFnZSBhbGlnbmVkKQorICovCitFTlRSWShmYV9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorCWFkZAlyMSwgcjAsICNQQUdFX1NaCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBsaW5lCisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfaW52X3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJSW52YWxpZGF0ZSAoZGlzY2FyZCkgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKglNYXkgbm90IHdyaXRlIGJhY2sgYW55IGVudHJpZXMuICBJZiAnc3RhcnQnIG9yICdlbmQnCisgKglhcmUgbm90IGNhY2hlIGxpbmUgYWxpZ25lZCwgdGhvc2UgbGluZXMgbXVzdCBiZSB3cml0dGVuCisgKgliYWNrLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGZhX2RtYV9pbnZfcmFuZ2UpCisJdHN0CXIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBlbnRyeQorCXRzdAlyMSwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwliaWMJcjEsIHIxLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorCW1jcm5lCXAxNSwgMCwgcjEsIGM3LCBjMTQsIDEJCUAgY2xlYW4gJiBpbnZhbGlkYXRlIEQgZW50cnkKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gKHdyaXRlIGJhY2spIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAkgLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGZhX2RtYV9jbGVhbl9yYW5nZSkKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXIwLCAjMAkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsZW5kKQorICoJLSBzdGFydCAgIC0gdmlydHVhbCBzdGFydCBhZGRyZXNzIG9mIHJlZ2lvbgorICoJLSBlbmQgICAgIC0gdmlydHVhbCBlbmQgYWRkcmVzcyBvZiByZWdpb24KKyAqLworRU5UUlkoZmFfZG1hX2ZsdXNoX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiAmIGludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXIwLCAjMAkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcGMsIGxyCisKKwlfX0lOSVREQVRBCisKKwkudHlwZQlmYV9jYWNoZV9mbnMsICNvYmplY3QKK0VOVFJZKGZhX2NhY2hlX2ZucykKKwkubG9uZwlmYV9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCS5sb25nCWZhX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJZmFfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQorCS5sb25nCWZhX2NvaGVyZW50X2tlcm5fcmFuZ2UKKwkubG9uZwlmYV9jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJZmFfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCWZhX2RtYV9pbnZfcmFuZ2UKKwkubG9uZwlmYV9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlmYV9kbWFfZmx1c2hfcmFuZ2UKKwkuc2l6ZQlmYV9jYWNoZV9mbnMsIC4gLSBmYV9jYWNoZV9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NhY2hlLWZlcm9jZW9uLWwyLmMgYi9hcmNoL2FybS9tbS9jYWNoZS1mZXJvY2Vvbi1sMi5jCmluZGV4IDgwY2QyMDcuLmQ2ZGQ4MzggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLWZlcm9jZW9uLWwyLmMKKysrIGIvYXJjaC9hcm0vbW0vY2FjaGUtZmVyb2Nlb24tbDIuYwpAQCAtMTQsOCArMTQsMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8cGxhdC9jYWNoZS1mZXJvY2Vvbi1sMi5oPgotCisjaW5jbHVkZSAibW0uaCIKIAogLyoKICAqIExvdy1sZXZlbCBjYWNoZSBtYWludGVuYW5jZSBvcGVyYXRpb25zLgpAQCAtMzQsMTQgKzM4LDM2IEBACiAgKiBUaGUgcmFuZ2Ugb3BlcmF0aW9ucyByZXF1aXJlIHR3byBzdWNjZXNzaXZlIGNwMTUgd3JpdGVzLCBpbgogICogYmV0d2VlbiB3aGljaCB3ZSBkb24ndCB3YW50IHRvIGJlIHByZWVtcHRlZC4KICAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbDJfc3RhcnRfdmEodW5zaWduZWQgbG9uZyBwYWRkcikKK3sKKyNpZmRlZiBDT05GSUdfSElHSE1FTQorCS8qCisJICogTGV0J3MgZG8gb3VyIG93biBmaXhtYXAgc3R1ZmYgaW4gYSBtaW5pbWFsIHdheSBoZXJlLgorCSAqIEJlY2F1c2UgcmFuZ2Ugb3BzIGNhbid0IGJlIGRvbmUgb24gcGh5c2ljYWwgYWRkcmVzc2VzLAorCSAqIHdlIHNpbXBseSBpbnN0YWxsIGEgdmlydHVhbCBtYXBwaW5nIGZvciBpdCBvbmx5IGZvciB0aGUKKwkgKiBUTEIgbG9va3VwIHRvIG9jY3VyLCBoZW5jZSBubyBuZWVkIHRvIGZsdXNoIHRoZSB1bnRvdWNoZWQKKwkgKiBtZW1vcnkgbWFwcGluZy4gIFRoaXMgaXMgcHJvdGVjdGVkIHdpdGggdGhlIGRpc2FibGluZyBvZgorCSAqIGludGVycnVwdHMgYnkgdGhlIGNhbGxlci4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGlkeCA9IEtNX0wyX0NBQ0hFICsgS01fVFlQRV9OUiAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBsb25nIHZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7CisJc2V0X3B0ZV9leHQoVE9QX1BURSh2YWRkciksIHBmbl9wdGUocGFkZHIgPj4gUEFHRV9TSElGVCwgUEFHRV9LRVJORUwpLCAwKTsKKwlsb2NhbF9mbHVzaF90bGJfa2VybmVsX3BhZ2UodmFkZHIpOworCXJldHVybiB2YWRkciArIChwYWRkciAmIH5QQUdFX01BU0spOworI2Vsc2UKKwlyZXR1cm4gX19waHlzX3RvX3ZpcnQocGFkZHIpOworI2VuZGlmCit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBsMl9jbGVhbl9wYSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJX19hc21fXygibWNyIHAxNSwgMSwgJTAsIGMxNSwgYzksIDMiIDogOiAiciIgKGFkZHIpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGwyX2NsZWFuX212YV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBsMl9jbGVhbl9wYV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdmFfc3RhcnQsIHZhX2VuZCwgZmxhZ3M7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSAnc3RhcnQnIGFuZCAnZW5kJyByZWZlcmVuY2UgdGhlIHNhbWUgcGFnZSwgYXMKQEAgLTUxLDE3ICs3NywxNCBAQAogCUJVR19PTigoc3RhcnQgXiBlbmQpID4+IFBBR0VfU0hJRlQpOwogCiAJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl2YV9zdGFydCA9IGwyX3N0YXJ0X3ZhKHN0YXJ0KTsKKwl2YV9lbmQgPSB2YV9zdGFydCArIChlbmQgLSBzdGFydCk7CiAJX19hc21fXygibWNyIHAxNSwgMSwgJTAsIGMxNSwgYzksIDRcblx0IgogCQkibWNyIHAxNSwgMSwgJTEsIGMxNSwgYzksIDUiCi0JCTogOiAiciIgKHN0YXJ0KSwgInIiIChlbmQpKTsKKwkJOiA6ICJyIiAodmFfc3RhcnQpLCAiciIgKHZhX2VuZCkpOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMl9jbGVhbl9wYV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlsMl9jbGVhbl9tdmFfcmFuZ2UoX19waHlzX3RvX3ZpcnQoc3RhcnQpLCBfX3BoeXNfdG9fdmlydChlbmQpKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGwyX2NsZWFuX2ludl9wYSh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJX19hc21fXygibWNyIHAxNSwgMSwgJTAsIGMxNSwgYzEwLCAzIiA6IDogInIiIChhZGRyKSk7CkBAIC03Miw5ICs5NSw5IEBACiAJX19hc21fXygibWNyIHAxNSwgMSwgJTAsIGMxNSwgYzExLCAzIiA6IDogInIiIChhZGRyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMl9pbnZfbXZhX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQorc3RhdGljIGlubGluZSB2b2lkIGwyX2ludl9wYV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdmFfc3RhcnQsIHZhX2VuZCwgZmxhZ3M7CiAKIAkvKgogCSAqIE1ha2Ugc3VyZSAnc3RhcnQnIGFuZCAnZW5kJyByZWZlcmVuY2UgdGhlIHNhbWUgcGFnZSwgYXMKQEAgLTg0LDE3ICsxMDcsMTQgQEAKIAlCVUdfT04oKHN0YXJ0IF4gZW5kKSA+PiBQQUdFX1NISUZUKTsKIAogCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJdmFfc3RhcnQgPSBsMl9zdGFydF92YShzdGFydCk7CisJdmFfZW5kID0gdmFfc3RhcnQgKyAoZW5kIC0gc3RhcnQpOwogCV9fYXNtX18oIm1jciBwMTUsIDEsICUwLCBjMTUsIGMxMSwgNFxuXHQiCiAJCSJtY3IgcDE1LCAxLCAlMSwgYzE1LCBjMTEsIDUiCi0JCTogOiAiciIgKHN0YXJ0KSwgInIiIChlbmQpKTsKKwkJOiA6ICJyIiAodmFfc3RhcnQpLCAiciIgKHZhX2VuZCkpOwogCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBsMl9pbnZfcGFfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JbDJfaW52X212YV9yYW5nZShfX3BoeXNfdG9fdmlydChzdGFydCksIF9fcGh5c190b192aXJ0KGVuZCkpOwotfQotCiAKIC8qCiAgKiBMaW51eCBwcmltaXRpdmVzLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUteHNjM2wyLmMgYi9hcmNoL2FybS9tbS9jYWNoZS14c2MzbDIuYwppbmRleCA0NjRkZTg5Li41ZDE4MGNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9jYWNoZS14c2MzbDIuYworKysgYi9hcmNoL2FybS9tbS9jYWNoZS14c2MzbDIuYwpAQCAtMTcsMTIgKzE3LDE0IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2ttYXBfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlICJtbS5oIgogCiAjZGVmaW5lIENSX0wyCSgxIDw8IDI2KQogCkBAIC00NywyMSArNDksMTEgQEAKIAlfX2FzbV9fKCJtY3IgcDE1LCAxLCAlMCwgYzcsIGMxMSwgMSIgOiA6ICJyIiAoYWRkcikpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgeHNjM19sMl9jbGVhbl9wYSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JeHNjM19sMl9jbGVhbl9tdmEoX19waHlzX3RvX3ZpcnQoYWRkcikpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgeHNjM19sMl9pbnZfbXZhKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlfX2FzbV9fKCJtY3IgcDE1LCAxLCAlMCwgYzcsIGM3LCAxIiA6IDogInIiIChhZGRyKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB4c2MzX2wyX2ludl9wYSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JeHNjM19sMl9pbnZfbXZhKF9fcGh5c190b192aXJ0KGFkZHIpKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHhzYzNfbDJfaW52X2FsbCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbDJjdHlwZSwgc2V0X3dheTsKQEAgLTc5LDUwICs3MSwxMDMgQEAKIAlkc2IoKTsKIH0KIAorI2lmZGVmIENPTkZJR19ISUdITUVNCisjZGVmaW5lIGwyX21hcF9zYXZlX2ZsYWdzKHgpCQlyYXdfbG9jYWxfc2F2ZV9mbGFncyh4KQorI2RlZmluZSBsMl9tYXBfcmVzdG9yZV9mbGFncyh4KQkJcmF3X2xvY2FsX2lycV9yZXN0b3JlKHgpCisjZWxzZQorI2RlZmluZSBsMl9tYXBfc2F2ZV9mbGFncyh4KQkJKCh4KSA9IDApCisjZGVmaW5lIGwyX21hcF9yZXN0b3JlX2ZsYWdzKHgpCQkoKHZvaWQpKHgpKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsMl9tYXBfdmEodW5zaWduZWQgbG9uZyBwYSwgdW5zaWduZWQgbG9uZyBwcmV2X3ZhLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwl1bnNpZ25lZCBsb25nIHZhID0gcHJldl92YSAmIFBBR0VfTUFTSzsKKwl1bnNpZ25lZCBsb25nIHBhX29mZnNldCA9IHBhIDw8ICgzMiAtIFBBR0VfU0hJRlQpOworCWlmICh1bmxpa2VseShwYV9vZmZzZXQgPCAocHJldl92YSA8PCAoMzIgLSBQQUdFX1NISUZUKSkpKSB7CisJCS8qCisJCSAqIFN3aXRjaGluZyB0byBhIG5ldyBwYWdlLiAgQmVjYXVzZSBjYWNoZSBvcHMgYXJlCisJCSAqIHVzaW5nIHZpcnR1YWwgYWRkcmVzc2VzIG9ubHksIHdlIG11c3QgcHV0IGEgbWFwcGluZworCQkgKiBpbiBwbGFjZSBmb3IgaXQuICBXZSBhbHNvIGVuYWJsZSBpbnRlcnJ1cHRzIGZvciBhCisJCSAqIHNob3J0IHdoaWxlIGFuZCBkaXNhYmxlIHRoZW0gYWdhaW4gdG8gcHJvdGVjdCB0aGlzCisJCSAqIG1hcHBpbmcuCisJCSAqLworCQl1bnNpZ25lZCBsb25nIGlkeDsKKwkJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJaWR4ID0gS01fTDJfQ0FDSEUgKyBLTV9UWVBFX05SICogc21wX3Byb2Nlc3Nvcl9pZCgpOworCQl2YSA9IF9fZml4X3RvX3ZpcnQoRklYX0tNQVBfQkVHSU4gKyBpZHgpOworCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MgfCBQU1JfSV9CSVQpOworCQlzZXRfcHRlX2V4dChUT1BfUFRFKHZhKSwgcGZuX3B0ZShwYSA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTCksIDApOworCQlsb2NhbF9mbHVzaF90bGJfa2VybmVsX3BhZ2UodmEpOworCX0KKwlyZXR1cm4gdmEgKyAocGFfb2Zmc2V0ID4+ICgzMiAtIFBBR0VfU0hJRlQpKTsKKyNlbHNlCisJcmV0dXJuIF9fcGh5c190b192aXJ0KHBhKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCB4c2MzX2wyX2ludl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBmbGFnczsKKwogCWlmIChzdGFydCA9PSAwICYmIGVuZCA9PSAtMXVsKSB7CiAJCXhzYzNfbDJfaW52X2FsbCgpOwogCQlyZXR1cm47CiAJfQogCisJdmFkZHIgPSAtMTsgIC8qIHRvIGZvcmNlIHRoZSBmaXJzdCBtYXBwaW5nICovCisJbDJfbWFwX3NhdmVfZmxhZ3MoZmxhZ3MpOworCiAJLyoKIAkgKiBDbGVhbiBhbmQgaW52YWxpZGF0ZSBwYXJ0aWFsIGZpcnN0IGNhY2hlIGxpbmUuCiAJICovCiAJaWYgKHN0YXJ0ICYgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSB7Ci0JCXhzYzNfbDJfY2xlYW5fcGEoc3RhcnQgJiB+KENBQ0hFX0xJTkVfU0laRSAtIDEpKTsKLQkJeHNjM19sMl9pbnZfcGEoc3RhcnQgJiB+KENBQ0hFX0xJTkVfU0laRSAtIDEpKTsKKwkJdmFkZHIgPSBsMl9tYXBfdmEoc3RhcnQgJiB+KENBQ0hFX0xJTkVfU0laRSAtIDEpLCB2YWRkciwgZmxhZ3MpOworCQl4c2MzX2wyX2NsZWFuX212YSh2YWRkcik7CisJCXhzYzNfbDJfaW52X212YSh2YWRkcik7CiAJCXN0YXJ0ID0gKHN0YXJ0IHwgKENBQ0hFX0xJTkVfU0laRSAtIDEpKSArIDE7CiAJfQogCiAJLyoKLQkgKiBDbGVhbiBhbmQgaW52YWxpZGF0ZSBwYXJ0aWFsIGxhc3QgY2FjaGUgbGluZS4KLQkgKi8KLQlpZiAoc3RhcnQgPCBlbmQgJiYgKGVuZCAmIChDQUNIRV9MSU5FX1NJWkUgLSAxKSkpIHsKLQkJeHNjM19sMl9jbGVhbl9wYShlbmQgJiB+KENBQ0hFX0xJTkVfU0laRSAtIDEpKTsKLQkJeHNjM19sMl9pbnZfcGEoZW5kICYgfihDQUNIRV9MSU5FX1NJWkUgLSAxKSk7Ci0JCWVuZCAmPSB+KENBQ0hFX0xJTkVfU0laRSAtIDEpOwotCX0KLQotCS8qCiAJICogSW52YWxpZGF0ZSBhbGwgZnVsbCBjYWNoZSBsaW5lcyBiZXR3ZWVuICdzdGFydCcgYW5kICdlbmQnLgogCSAqLwotCXdoaWxlIChzdGFydCA8IGVuZCkgewotCQl4c2MzX2wyX2ludl9wYShzdGFydCk7CisJd2hpbGUgKHN0YXJ0IDwgKGVuZCAmIH4oQ0FDSEVfTElORV9TSVpFIC0gMSkpKSB7CisJCXZhZGRyID0gbDJfbWFwX3ZhKHN0YXJ0LCB2YWRkciwgZmxhZ3MpOworCQl4c2MzX2wyX2ludl9tdmEodmFkZHIpOwogCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CiAJfQogCisJLyoKKwkgKiBDbGVhbiBhbmQgaW52YWxpZGF0ZSBwYXJ0aWFsIGxhc3QgY2FjaGUgbGluZS4KKwkgKi8KKwlpZiAoc3RhcnQgPCBlbmQpIHsKKwkJdmFkZHIgPSBsMl9tYXBfdmEoc3RhcnQsIHZhZGRyLCBmbGFncyk7CisJCXhzYzNfbDJfY2xlYW5fbXZhKHZhZGRyKTsKKwkJeHNjM19sMl9pbnZfbXZhKHZhZGRyKTsKKwl9CisKKwlsMl9tYXBfcmVzdG9yZV9mbGFncyhmbGFncyk7CisKIAlkc2IoKTsKIH0KIAogc3RhdGljIHZvaWQgeHNjM19sMl9jbGVhbl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKKwl1bnNpZ25lZCBsb25nIHZhZGRyLCBmbGFnczsKKworCXZhZGRyID0gLTE7ICAvKiB0byBmb3JjZSB0aGUgZmlyc3QgbWFwcGluZyAqLworCWwyX21hcF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwogCXN0YXJ0ICY9IH4oQ0FDSEVfTElORV9TSVpFIC0gMSk7CiAJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0JCXhzYzNfbDJfY2xlYW5fcGEoc3RhcnQpOworCQl2YWRkciA9IGwyX21hcF92YShzdGFydCwgdmFkZHIsIGZsYWdzKTsKKwkJeHNjM19sMl9jbGVhbl9tdmEodmFkZHIpOwogCQlzdGFydCArPSBDQUNIRV9MSU5FX1NJWkU7CiAJfQogCisJbDJfbWFwX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOworCiAJZHNiKCk7CiB9CiAKQEAgLTE0OCwxOCArMTkzLDI2IEBACiAKIHN0YXRpYyB2b2lkIHhzYzNfbDJfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CisJdW5zaWduZWQgbG9uZyB2YWRkciwgZmxhZ3M7CisKIAlpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gLTF1bCkgewogCQl4c2MzX2wyX2ZsdXNoX2FsbCgpOwogCQlyZXR1cm47CiAJfQogCisJdmFkZHIgPSAtMTsgIC8qIHRvIGZvcmNlIHRoZSBmaXJzdCBtYXBwaW5nICovCisJbDJfbWFwX3NhdmVfZmxhZ3MoZmxhZ3MpOworCiAJc3RhcnQgJj0gfihDQUNIRV9MSU5FX1NJWkUgLSAxKTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLQkJeHNjM19sMl9jbGVhbl9wYShzdGFydCk7Ci0JCXhzYzNfbDJfaW52X3BhKHN0YXJ0KTsKKwkJdmFkZHIgPSBsMl9tYXBfdmEoc3RhcnQsIHZhZGRyLCBmbGFncyk7CisJCXhzYzNfbDJfY2xlYW5fbXZhKHZhZGRyKTsKKwkJeHNjM19sMl9pbnZfbXZhKHZhZGRyKTsKIAkJc3RhcnQgKz0gQ0FDSEVfTElORV9TSVpFOwogCX0KIAorCWwyX21hcF9yZXN0b3JlX2ZsYWdzKGZsYWdzKTsKKwogCWRzYigpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS1mYS5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmE2MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtZmEuYwpAQCAtMCwwICsxLDg2IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL2xpYi9jb3B5cGFnZS1mYS5TCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNSBGYXJhZGF5IENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogQmFzZWQgb24gY29weXBhZ2UtdjR3Yi5TOgorICogIENvcHlyaWdodCAoQykgMTk5NS0xOTk5IFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorCisvKgorICogRmFyYWRheSBvcHRpbWlzZWQgY29weV91c2VyX3BhZ2UKKyAqLworc3RhdGljIHZvaWQgX19uYWtlZAorZmFfY29weV91c2VyX3BhZ2Uodm9pZCAqa3RvLCBjb25zdCB2b2lkICprZnJvbSkKK3sKKwlhc20oIlwKKwlzdG1mZAlzcCEsIHtyNCwgbHJ9CQkJQCAyXG5cCisJbW92CXIyLCAlMAkJCQlAIDFcblwKKzE6CWxkbWlhCXIxISwge3IzLCByNCwgaXAsIGxyfQkJQCA0XG5cCisJc3RtaWEJcjAsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIDEgICBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGxpbmVcblwKKwlhZGQJcjAsIHIwLCAjMTYJCQlAIDFcblwKKwlsZG1pYQlyMSEsIHtyMywgcjQsIGlwLCBscn0JCUAgNFxuXAorCXN0bWlhCXIwLCB7cjMsIHI0LCBpcCwgbHJ9CQlAIDRcblwKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCAxICAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lXG5cCisJYWRkCXIwLCByMCwgIzE2CQkJQCAxXG5cCisJc3VicwlyMiwgcjIsICMxCQkJQCAxXG5cCisJYm5lCTFiCQkJCUAgMVxuXAorCW1jcglwMTUsIDAsIHIyLCBjNywgYzEwLCA0CQlAIDEgICBkcmFpbiBXQlxuXAorCWxkbWZkCXNwISwge3I0LCBwY30JCQlAIDMiCisJOgorCTogIkkiIChQQUdFX1NJWkUgLyAzMikpOworfQorCit2b2lkIGZhX2NvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tLAorCXVuc2lnbmVkIGxvbmcgdmFkZHIpCit7CisJdm9pZCAqa3RvLCAqa2Zyb207CisKKwlrdG8gPSBrbWFwX2F0b21pYyh0bywgS01fVVNFUjApOworCWtmcm9tID0ga21hcF9hdG9taWMoZnJvbSwgS01fVVNFUjEpOworCWZhX2NvcHlfdXNlcl9wYWdlKGt0bywga2Zyb20pOworCWt1bm1hcF9hdG9taWMoa2Zyb20sIEtNX1VTRVIxKTsKKwlrdW5tYXBfYXRvbWljKGt0bywgS01fVVNFUjApOworfQorCisvKgorICogRmFyYWRheSBvcHRpbWlzZWQgY2xlYXJfdXNlcl9wYWdlCisgKgorICogU2FtZSBzdG9yeSBhcyBhYm92ZS4KKyAqLwordm9pZCBmYV9jbGVhcl91c2VyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKQoreworCXZvaWQgKnB0ciwgKmthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWFzbSB2b2xhdGlsZSgiXAorCW1vdglyMSwgJTIJCQkJQCAxXG5cCisJbW92CXIyLCAjMAkJCQlAIDFcblwKKwltb3YJcjMsICMwCQkJCUAgMVxuXAorCW1vdglpcCwgIzAJCQkJQCAxXG5cCisJbW92CWxyLCAjMAkJCQlAIDFcblwKKzE6CXN0bWlhCSUwLCB7cjIsIHIzLCBpcCwgbHJ9CQlAIDRcblwKKwltY3IJcDE1LCAwLCAlMCwgYzcsIGMxNCwgMQkJQCAxICAgY2xlYW4gYW5kIGludmFsaWRhdGUgRCBsaW5lXG5cCisJYWRkCSUwLCAlMCwgIzE2CQkJQCAxXG5cCisJc3RtaWEJJTAsIHtyMiwgcjMsIGlwLCBscn0JCUAgNFxuXAorCW1jcglwMTUsIDAsICUwLCBjNywgYzE0LCAxCQlAIDEgICBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGxpbmVcblwKKwlhZGQJJTAsICUwLCAjMTYJCQlAIDFcblwKKwlzdWJzCXIxLCByMSwgIzEJCQlAIDFcblwKKwlibmUJMWIJCQkJQCAxXG5cCisJbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgMSAgIGRyYWluIFdCIgorCTogIj1yIiAocHRyKQorCTogIjAiIChrYWRkciksICJJIiAoUEFHRV9TSVpFIC8gMzIpCisJOiAicjEiLCAicjIiLCAicjMiLCAiaXAiLCAibHIiKTsKKwlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7Cit9CisKK3N0cnVjdCBjcHVfdXNlcl9mbnMgZmFfdXNlcl9mbnMgX19pbml0ZGF0YSA9IHsKKwkuY3B1X2NsZWFyX3VzZXJfaGlnaHBhZ2UgPSBmYV9jbGVhcl91c2VyX2hpZ2hwYWdlLAorCS5jcHVfY29weV91c2VyX2hpZ2hwYWdlCT0gZmFfY29weV91c2VyX2hpZ2hwYWdlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMgYi9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCmluZGV4IGYxZWY1NjEuLjUxMGMxNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKKysrIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL2hpZ2htZW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgpAQCAtNTE3LDYgKzUxOCw3NCBAQAogfQogRVhQT1JUX1NZTUJPTChkbWFfY2FjaGVfbWFpbnQpOwogCitzdGF0aWMgdm9pZCBkbWFfY2FjaGVfbWFpbnRfY29udGlndW91cyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCXZvaWQgKnZhZGRyOworCXVuc2lnbmVkIGxvbmcgcGFkZHI7CisJdm9pZCAoKmlubmVyX29wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisJdm9pZCAoKm91dGVyX29wKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKworCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CQkvKiBpbnZhbGlkYXRlIG9ubHkgKi8KKwkJaW5uZXJfb3AgPSBkbWFjX2ludl9yYW5nZTsKKwkJb3V0ZXJfb3AgPSBvdXRlcl9pbnZfcmFuZ2U7CisJCWJyZWFrOworCWNhc2UgRE1BX1RPX0RFVklDRToJCS8qIHdyaXRlYmFjayBvbmx5ICovCisJCWlubmVyX29wID0gZG1hY19jbGVhbl9yYW5nZTsKKwkJb3V0ZXJfb3AgPSBvdXRlcl9jbGVhbl9yYW5nZTsKKwkJYnJlYWs7CisJY2FzZSBETUFfQklESVJFQ1RJT05BTDoJCS8qIHdyaXRlYmFjayBhbmQgaW52YWxpZGF0ZSAqLworCQlpbm5lcl9vcCA9IGRtYWNfZmx1c2hfcmFuZ2U7CisJCW91dGVyX29wID0gb3V0ZXJfZmx1c2hfcmFuZ2U7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpIHsKKwkJdmFkZHIgPSBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQ7CisJCWlubmVyX29wKHZhZGRyLCB2YWRkciArIHNpemUpOworCX0gZWxzZSB7CisJCXZhZGRyID0ga21hcF9oaWdoX2dldChwYWdlKTsKKwkJaWYgKHZhZGRyKSB7CisJCQl2YWRkciArPSBvZmZzZXQ7CisJCQlpbm5lcl9vcCh2YWRkciwgdmFkZHIgKyBzaXplKTsKKwkJCWt1bm1hcF9oaWdoKHBhZ2UpOworCQl9CisJfQorCisJcGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CisJb3V0ZXJfb3AocGFkZHIsIHBhZGRyICsgc2l6ZSk7Cit9CisKK3ZvaWQgZG1hX2NhY2hlX21haW50X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJICBzaXplX3Qgc2l6ZSwgaW50IGRpcikKK3sKKwkvKgorCSAqIEEgc2luZ2xlIHNnIGVudHJ5IG1heSByZWZlciB0byBtdWx0aXBsZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMKKwkgKiBwYWdlcy4gIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHByb2Nlc3MgaGlnaG1lbSBwYWdlcyBpbmRpdmlkdWFsbHkuCisJICogSWYgaGlnaG1lbSBpcyBub3QgY29uZmlndXJlZCB0aGVuIHRoZSBidWxrIG9mIHRoaXMgbG9vcCBnZXRzCisJICogb3B0aW1pemVkIG91dC4KKwkgKi8KKwlzaXplX3QgbGVmdCA9IHNpemU7CisJZG8geworCQlzaXplX3QgbGVuID0gbGVmdDsKKwkJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpICYmIGxlbiArIG9mZnNldCA+IFBBR0VfU0laRSkgeworCQkJaWYgKG9mZnNldCA+PSBQQUdFX1NJWkUpIHsKKwkJCQlwYWdlICs9IG9mZnNldCAvIFBBR0VfU0laRTsKKwkJCQlvZmZzZXQgJT0gUEFHRV9TSVpFOworCQkJfQorCQkJbGVuID0gUEFHRV9TSVpFIC0gb2Zmc2V0OworCQl9CisJCWRtYV9jYWNoZV9tYWludF9jb250aWd1b3VzKHBhZ2UsIG9mZnNldCwgbGVuLCBkaXIpOworCQlvZmZzZXQgPSAwOworCQlwYWdlKys7CisJCWxlZnQgLT0gbGVuOworCX0gd2hpbGUgKGxlZnQpOworfQorRVhQT1JUX1NZTUJPTChkbWFfY2FjaGVfbWFpbnRfcGFnZSk7CisKIC8qKgogICogZG1hX21hcF9zZyAtIG1hcCBhIHNldCBvZiBTRyBidWZmZXJzIGZvciBzdHJlYW1pbmcgbW9kZSBETUEKICAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlciwgb3IgTlVMTCBmb3IgSVNBIGFuZCBFSVNBLWxpa2UgZGV2aWNlcwpAQCAtNjE0LDcgKzY4Myw4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAoIWFyY2hfaXNfY29oZXJlbnQoKSkKLQkJCWRtYV9jYWNoZV9tYWludChzZ192aXJ0KHMpLCBzLT5sZW5ndGgsIGRpcik7CisJCQlkbWFfY2FjaGVfbWFpbnRfcGFnZShzZ19wYWdlKHMpLCBzLT5vZmZzZXQsCisJCQkJCSAgICAgcy0+bGVuZ3RoLCBkaXIpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woZG1hX3N5bmNfc2dfZm9yX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mbHVzaC5jIGIvYXJjaC9hcm0vbW0vZmx1c2guYwppbmRleCAwZmE5YmYzLi40ZTI4MzQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mbHVzaC5jCisrKyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwogCiAjaWZuZGVmIENPTkZJR19TTVAKLQlpZiAobWFwcGluZyAmJiAhbWFwcGluZ19tYXBwZWQobWFwcGluZykpCisJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSAmJiBtYXBwaW5nICYmICFtYXBwaW5nX21hcHBlZChtYXBwaW5nKSkKIAkJc2V0X2JpdChQR19kY2FjaGVfZGlydHksICZwYWdlLT5mbGFncyk7CiAJZWxzZQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9oaWdobWVtLmMgYi9hcmNoL2FybS9tbS9oaWdobWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM0OTU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2hpZ2htZW0uYwpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIGFyY2gvYXJtL21tL2hpZ2htZW0uYyAtLSBBUk0gaGlnaG1lbSBzdXBwb3J0CisgKgorICogQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiBDcmVhdGVkOglzZXB0ZW1iZXIgOCwgMjAwOAorICogQ29weXJpZ2h0OglNYXJ2ZWxsIFNlbWljb25kdWN0b3JzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSAibW0uaCIKKwordm9pZCAqa21hcChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwltaWdodF9zbGVlcCgpOworCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCisJCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CisJcmV0dXJuIGttYXBfaGlnaChwYWdlKTsKK30KK0VYUE9SVF9TWU1CT0woa21hcCk7CisKK3ZvaWQga3VubWFwKHN0cnVjdCBwYWdlICpwYWdlKQoreworCUJVR19PTihpbl9pbnRlcnJ1cHQoKSk7CisJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKKwkJcmV0dXJuOworCWt1bm1hcF9oaWdoKHBhZ2UpOworfQorRVhQT1JUX1NZTUJPTChrdW5tYXApOworCit2b2lkICprbWFwX2F0b21pYyhzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwl1bnNpZ25lZCBsb25nIHZhZGRyOworCisJcGFnZWZhdWx0X2Rpc2FibGUoKTsKKwlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQorCQlyZXR1cm4gcGFnZV9hZGRyZXNzKHBhZ2UpOworCisJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorCS8qCisJICogV2l0aCBkZWJ1Z2dpbmcgZW5hYmxlZCwga3VubWFwX2F0b21pYyBmb3JjZXMgdGhhdCBlbnRyeSB0byAwLgorCSAqIE1ha2Ugc3VyZSBpdCB3YXMgaW5kZWVkIHByb3Blcmx5IHVubWFwcGVkLgorCSAqLworCUJVR19PTighcHRlX25vbmUoKihUT1BfUFRFKHZhZGRyKSkpKTsKKyNlbmRpZgorCXNldF9wdGVfZXh0KFRPUF9QVEUodmFkZHIpLCBta19wdGUocGFnZSwga21hcF9wcm90KSwgMCk7CisJLyoKKwkgKiBXaGVuIGRlYnVnZ2luZyBpcyBvZmYsIGt1bm1hcF9hdG9taWMgbGVhdmVzIHRoZSBwcmV2aW91cyBtYXBwaW5nCisJICogaW4gcGxhY2UsIHNvIHRoaXMgVExCIGZsdXNoIGVuc3VyZXMgdGhlIFRMQiBpcyB1cGRhdGVkIHdpdGggdGhlCisJICogbmV3IG1hcHBpbmcuCisJICovCisJbG9jYWxfZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHZhZGRyKTsKKworCXJldHVybiAodm9pZCAqKXZhZGRyOworfQorRVhQT1JUX1NZTUJPTChrbWFwX2F0b21pYyk7CisKK3ZvaWQga3VubWFwX2F0b21pYyh2b2lkICprdmFkZHIsIGVudW0ga21fdHlwZSB0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSAodW5zaWduZWQgbG9uZykga3ZhZGRyICYgUEFHRV9NQVNLOworCXVuc2lnbmVkIGludCBpZHggPSB0eXBlICsgS01fVFlQRV9OUiAqIHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmIChrdmFkZHIgPj0gKHZvaWQgKilGSVhBRERSX1NUQVJUKSB7CisJCV9fY3B1Y19mbHVzaF9kY2FjaGVfcGFnZSgodm9pZCAqKXZhZGRyKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorCQlCVUdfT04odmFkZHIgIT0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCkpOworCQlzZXRfcHRlX2V4dChUT1BfUFRFKHZhZGRyKSwgX19wdGUoMCksIDApOworCQlsb2NhbF9mbHVzaF90bGJfa2VybmVsX3BhZ2UodmFkZHIpOworI2Vsc2UKKwkJKHZvaWQpIGlkeDsgIC8qIHRvIGtpbGwgYSB3YXJuaW5nICovCisjZW5kaWYKKwl9CisJcGFnZWZhdWx0X2VuYWJsZSgpOworfQorRVhQT1JUX1NZTUJPTChrdW5tYXBfYXRvbWljKTsKKwordm9pZCAqa21hcF9hdG9taWNfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaWR4OworCXVuc2lnbmVkIGxvbmcgdmFkZHI7CisKKwlwYWdlZmF1bHRfZGlzYWJsZSgpOworCisJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQorCUJVR19PTighcHRlX25vbmUoKihUT1BfUFRFKHZhZGRyKSkpKTsKKyNlbmRpZgorCXNldF9wdGVfZXh0KFRPUF9QVEUodmFkZHIpLCBwZm5fcHRlKHBmbiwga21hcF9wcm90KSwgMCk7CisJbG9jYWxfZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHZhZGRyKTsKKworCXJldHVybiAodm9pZCAqKXZhZGRyOworfQorCitzdHJ1Y3QgcGFnZSAqa21hcF9hdG9taWNfdG9fcGFnZShjb25zdCB2b2lkICpwdHIpCit7CisJdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nKXB0cjsKKwlwdGVfdCAqcHRlOworCisJaWYgKHZhZGRyIDwgRklYQUREUl9TVEFSVCkKKwkJcmV0dXJuIHZpcnRfdG9fcGFnZShwdHIpOworCisJcHRlID0gVE9QX1BURSh2YWRkcik7CisJcmV0dXJuIHB0ZV9wYWdlKCpwdGUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDgwZmQzYjYuLjgyNzc4MDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0cmQuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgpAQCAtNDg1LDcgKzQ4Niw3IEBACiAJaW50IGksIG5vZGU7CiAKICNpZm5kZWYgQ09ORklHX0RJU0NPTlRJR01FTQotCW1heF9tYXBuciAgID0gdmlydF90b19wYWdlKGhpZ2hfbWVtb3J5KSAtIG1lbV9tYXA7CisJbWF4X21hcG5yICAgPSBwZm5fdG9fcGFnZShtYXhfcGZuICsgUEhZU19QRk5fT0ZGU0VUKSAtIG1lbV9tYXA7CiAjZW5kaWYKIAogCS8qIHRoaXMgd2lsbCBwdXQgYWxsIHVudXNlZCBsb3cgbWVtb3J5IG9udG8gdGhlIGZyZWVsaXN0cyAqLwpAQCAtNTA0LDYgKzUwNSwxOSBAQAogCQkJCSAgICBfX3BoeXNfdG9fcGZuKF9fcGEoc3dhcHBlcl9wZ19kaXIpKSwgTlVMTCk7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ISUdITUVNCisJLyogc2V0IGhpZ2htZW0gcGFnZSBmcmVlICovCisJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgeworCQlmb3JfZWFjaF9ub2RlYmFuayAoaSwgJm1lbWluZm8sIG5vZGUpIHsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBiYW5rX3Bmbl9zdGFydCgmbWVtaW5mby5iYW5rW2ldKTsKKwkJCXVuc2lnbmVkIGxvbmcgZW5kID0gYmFua19wZm5fZW5kKCZtZW1pbmZvLmJhbmtbaV0pOworCQkJaWYgKHN0YXJ0ID49IG1heF9sb3dfcGZuICsgUEhZU19QRk5fT0ZGU0VUKQorCQkJCXRvdGFsaGlnaF9wYWdlcyArPSBmcmVlX2FyZWEoc3RhcnQsIGVuZCwgTlVMTCk7CisJCX0KKwl9CisJdG90YWxyYW1fcGFnZXMgKz0gdG90YWxoaWdoX3BhZ2VzOworI2VuZGlmCisKIAkvKgogCSAqIFNpbmNlIG91ciBtZW1vcnkgbWF5IG5vdCBiZSBjb250aWd1b3VzLCBjYWxjdWxhdGUgdGhlCiAJICogcmVhbCBudW1iZXIgb2YgcGFnZXMgd2UgaGF2ZSBpbiB0aGlzIHN5c3RlbQpAQCAtNTIxLDkgKzUzNSwxMCBAQAogCWluaXRzaXplID0gX19pbml0X2VuZCAtIF9faW5pdF9iZWdpbjsKIAogCXByaW50ayhLRVJOX05PVElDRSAiTWVtb3J5OiAlbHVLQiBhdmFpbGFibGUgKCVkSyBjb2RlLCAiCi0JCSIlZEsgZGF0YSwgJWRLIGluaXQpXG4iLAorCQkiJWRLIGRhdGEsICVkSyBpbml0LCAlbHVLIGhpZ2htZW0pXG4iLAogCQkodW5zaWduZWQgbG9uZykgbnJfZnJlZV9wYWdlcygpIDw8IChQQUdFX1NISUZULTEwKSwKLQkJY29kZXNpemUgPj4gMTAsIGRhdGFzaXplID4+IDEwLCBpbml0c2l6ZSA+PiAxMCk7CisJCWNvZGVzaXplID4+IDEwLCBkYXRhc2l6ZSA+PiAxMCwgaW5pdHNpemUgPj4gMTAsCisJCSh1bnNpZ25lZCBsb25nKSAodG90YWxoaWdoX3BhZ2VzIDw8IChQQUdFX1NISUZULTEwKSkpOwogCiAJaWYgKFBBR0VfU0laRSA+PSAxNjM4NCAmJiBudW1fcGh5c3BhZ2VzIDw9IDEyOCkgewogCQlleHRlcm4gaW50IHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tLmggYi9hcmNoL2FybS9tbS9tbS5oCmluZGV4IDk1YmJlMTEuLmM0ZjZmMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tLmgKKysrIGIvYXJjaC9hcm0vbW0vbW0uaApAQCAtMSw3ICsxLDYgQEAKLS8qIHRoZSB1cHBlci1tb3N0IHBhZ2UgdGFibGUgcG9pbnRlciAqLwotCiAjaWZkZWYgQ09ORklHX01NVQogCisvKiB0aGUgdXBwZXItbW9zdCBwYWdlIHRhYmxlIHBvaW50ZXIgKi8KIGV4dGVybiBwbWRfdCAqdG9wX3BtZDsKIAogI2RlZmluZSBUT1BfUFRFKHgpCXB0ZV9vZmZzZXRfa2VybmVsKHRvcF9wbWQsIHgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9tbXUuYyBiL2FyY2gvYXJtL21tL21tdS5jCmluZGV4IDVhODllNTcuLmI0MzhmYzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL21tdS5jCisrKyBiL2FyY2gvYXJtL21tL21tdS5jCkBAIC0xOCw5ICsxOCwxMSBAQAogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgorI2luY2x1ZGUgPGFzbS9oaWdobWVtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0yNDMsNiArMjQ1LDEwIEBACiAJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNULAogCQkuZG9tYWluICAgID0gRE9NQUlOX0tFUk5FTCwKIAl9LAorCVtNVF9NRU1PUllfTk9OQ0FDSEVEXSA9IHsKKwkJLnByb3Rfc2VjdCA9IFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9BUF9XUklURSwKKwkJLmRvbWFpbiAgICA9IERPTUFJTl9LRVJORUwsCisJfSwKIH07CiAKIGNvbnN0IHN0cnVjdCBtZW1fdHlwZSAqZ2V0X21lbV90eXBlKHVuc2lnbmVkIGludCB0eXBlKQpAQCAtNDA2LDkgKzQxMiwyOCBAQAogCQlrZXJuX3BncHJvdCB8PSBMX1BURV9TSEFSRUQ7CiAJCXZlY3NfcGdwcm90IHw9IExfUFRFX1NIQVJFRDsKIAkJbWVtX3R5cGVzW01UX01FTU9SWV0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX1M7CisJCW1lbV90eXBlc1tNVF9NRU1PUllfTk9OQ0FDSEVEXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfUzsKICNlbmRpZgogCX0KIAorCS8qCisJICogTm9uLWNhY2hlYWJsZSBOb3JtYWwgLSBpbnRlbmRlZCBmb3IgbWVtb3J5IGFyZWFzIHRoYXQgbXVzdAorCSAqIG5vdCBjYXVzZSBkaXJ0eSBjYWNoZSBsaW5lIHdyaXRlYmFja3Mgd2hlbiB1c2VkCisJICovCisJaWYgKGNwdV9hcmNoID49IENQVV9BUkNIX0FSTXY2KSB7CisJCWlmIChjcHVfYXJjaCA+PSBDUFVfQVJDSF9BUk12NyAmJiAoY3IgJiBDUl9UUkUpKSB7CisJCQkvKiBOb24tY2FjaGVhYmxlIE5vcm1hbCBpcyBYQ0IgPSAwMDEgKi8KKwkJCW1lbV90eXBlc1tNVF9NRU1PUllfTk9OQ0FDSEVEXS5wcm90X3NlY3QgfD0KKwkJCQlQTURfU0VDVF9CVUZGRVJFRDsKKwkJfSBlbHNlIHsKKwkJCS8qIEZvciBib3RoIEFSTXY2IGFuZCBub24tVEVYLXJlbWFwcGluZyBBUk12NyAqLworCQkJbWVtX3R5cGVzW01UX01FTU9SWV9OT05DQUNIRURdLnByb3Rfc2VjdCB8PQorCQkJCVBNRF9TRUNUX1RFWCgxKTsKKwkJfQorCX0gZWxzZSB7CisJCW1lbV90eXBlc1tNVF9NRU1PUllfTk9OQ0FDSEVEXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfQlVGRkVSQUJMRTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIHYgPSBwZ3Byb3RfdmFsKHByb3RlY3Rpb25fbWFwW2ldKTsKIAkJcHJvdGVjdGlvbl9tYXBbaV0gPSBfX3BncHJvdCh2IHwgdXNlcl9wZ3Byb3QpOwpAQCAtNjc3LDYgKzcwMiwxMCBAQAogCQkJaWYgKG1lbWluZm8ubnJfYmFua3MgPj0gTlJfQkFOS1MpIHsKIAkJCQlwcmludGsoS0VSTl9DUklUICJOUl9CQU5LUyB0b28gbG93LCAiCiAJCQkJCQkgImlnbm9yaW5nIGhpZ2ggbWVtb3J5XG4iKTsKKwkJCX0gZWxzZSBpZiAoY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpKSB7CisJCQkJcHJpbnRrKEtFUk5fQ1JJVCAiSElHSE1FTSBpcyBub3QgeWV0IHN1cHBvcnRlZCAiCisJCQkJCQkgIndpdGggVklQVCBhbGlhc2luZyBjYWNoZSwgIgorCQkJCQkJICJpZ25vcmluZyBoaWdoIG1lbW9yeVxuIik7CiAJCQl9IGVsc2UgewogCQkJCW1lbW1vdmUoYmFuayArIDEsIGJhbmssCiAJCQkJCShtZW1pbmZvLm5yX2JhbmtzIC0gaSkgKiBzaXplb2YoKmJhbmspKTsKQEAgLTg5NSw2ICs5MjQsMTcgQEAKIAlmbHVzaF9jYWNoZV9hbGwoKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGttYXBfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19ISUdITUVNCisJcG1kX3QgKnBtZCA9IHBtZF9vZmZfayhQS01BUF9CQVNFKTsKKwlwdGVfdCAqcHRlID0gYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoMiAqIFBUUlNfUEVSX1BURSAqIHNpemVvZihwdGVfdCkpOworCUJVR19PTighcG1kX25vbmUoKnBtZCkgfHwgIXB0ZSk7CisJX19wbWRfcG9wdWxhdGUocG1kLCBfX3BhKHB0ZSkgfCBfUEFHRV9LRVJORUxfVEFCTEUpOworCXBrbWFwX3BhZ2VfdGFibGUgPSBwdGUgKyBQVFJTX1BFUl9QVEU7CisjZW5kaWYKK30KKwogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMsIGluaXRpYWxpc2VzIHRoZSB6b25lIG1lbW9yeQogICogbWFwcywgYW5kIHNldHMgdXAgdGhlIHplcm8gcGFnZSwgYmFkIHBhZ2UgYW5kIGJhZCBwYWdlIHRhYmxlcy4KQEAgLTkwOCw2ICs5NDgsNyBAQAogCXByZXBhcmVfcGFnZV90YWJsZSgpOwogCWJvb3RtZW1faW5pdCgpOwogCWRldmljZW1hcHNfaW5pdChtZGVzYyk7CisJa21hcF9pbml0KCk7CiAKIAl0b3BfcG1kID0gcG1kX29mZl9rKDB4ZmZmZjAwMDApOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiOGE5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUwpAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlM6IE1NVSBmdW5jdGlvbnMgZm9yIEZBNTI2CisgKgorICogIFdyaXR0ZW4gYnkgOiBMdWtlIExlZQorICogIENvcHlyaWdodCAoQykgMjAwNSBGYXJhZGF5IENvcnAuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGF1bGl1cyBaYWxlY2thcyA8cGF1bGl1cy56YWxlY2thc0B0ZWx0b25pa2EubHQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKgorICogVGhlc2UgYXJlIHRoZSBsb3cgbGV2ZWwgYXNzZW1ibGVyIGZvciBwZXJmb3JtaW5nIGNhY2hlIGFuZCBUTEIKKyAqIGZ1bmN0aW9ucyBvbiB0aGUgZmE1MjYuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vaHdjYXAuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1od2RlZi5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaW5jbHVkZSAicHJvYy1tYWNyb3MuUyIKKworI2RlZmluZSBDQUNIRV9ETElORVNJWkUJMTYKKworCS50ZXh0CisvKgorICogY3B1X2ZhNTI2X3Byb2NfaW5pdCgpCisgKi8KK0VOVFJZKGNwdV9mYTUyNl9wcm9jX2luaXQpCisJbW92CXBjLCBscgorCisvKgorICogY3B1X2ZhNTI2X3Byb2NfZmluKCkKKyAqLworRU5UUlkoY3B1X2ZhNTI2X3Byb2NfZmluKQorCXN0bWZkCXNwISwge2xyfQorCW1vdglpcCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCisJbXNyCWNwc3JfYywgaXAKKwlibAlmYV9mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlyMCwgcjAsICMweDEwMDAJCQlAIC4uLmkuLi4uLi4uLi4uLi4KKwliaWMJcjAsIHIwLCAjMHgwMDBlCQkJQCAuLi4uLi4uLi4uLi53Y2EuCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBkaXNhYmxlIGNhY2hlcworCW5vcAorCW5vcAorCWxkbWZkCXNwISwge3BjfQorCisvKgorICogY3B1X2ZhNTI2X3Jlc2V0KGxvYykKKyAqCisgKiBQZXJmb3JtIGEgc29mdCByZXNldCBvZiB0aGUgc3lzdGVtLiAgUHV0IHRoZSBDUFUgaW50byB0aGUKKyAqIHNhbWUgc3RhdGUgYXMgaXQgd291bGQgYmUgaWYgaXQgaGFkIGJlZW4gcmVzZXQsIGFuZCBicmFuY2gKKyAqIHRvIHdoYXQgd291bGQgYmUgdGhlIHJlc2V0IHZlY3Rvci4KKyAqCisgKiBsb2M6IGxvY2F0aW9uIHRvIGp1bXAgdG8gZm9yIHNvZnQgcmVzZXQKKyAqLworCS5hbGlnbgk0CitFTlRSWShjcHVfZmE1MjZfcmVzZXQpCisvKiBUT0RPOiBVc2UgQ1A4IGlmIHBvc3NpYmxlLi4uICovCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJLEQgY2FjaGVzCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKyNpZmRlZiBDT05GSUdfTU1VCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKyNlbmRpZgorCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCWJpYwlpcCwgaXAsICMweDAwMGYJCQlAIC4uLi4uLi4uLi4uLndjYW0KKwliaWMJaXAsIGlwLCAjMHgxMTAwCQkJQCAuLi5pLi4ucy4uLi4uLi4uCisJYmljCWlwLCBpcCwgIzB4MDgwMAkJCUAgQlRCIG9mZgorCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCW5vcAorCW5vcAorCW1vdglwYywgcjAKKworLyoKKyAqIGNwdV9mYTUyNl9kb19pZGxlKCkKKyAqLworCS5hbGlnbgk0CitFTlRSWShjcHVfZmE1MjZfZG9faWRsZSkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CQlAIFdhaXQgZm9yIGludGVycnVwdAorCW1vdglwYywgbHIKKworCitFTlRSWShjcHVfZmE1MjZfZGNhY2hlX2NsZWFuX2FyZWEpCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVfRExJTkVTSVpFCisJYmhpCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUGFnZVRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKgorICogY3B1X2ZhNTI2X3N3aXRjaF9tbShwZ2QpCisgKgorICogU2V0IHRoZSB0cmFuc2xhdGlvbiBiYXNlIHBvaW50ZXIgdG8gYmUgYXMgZGVzY3JpYmVkIGJ5IHBnZC4KKyAqCisgKiBwZ2Q6IG5ldyBwYWdlIHRhYmxlcworICovCisJLmFsaWduCTQKK0VOVFJZKGNwdV9mYTUyNl9zd2l0Y2hfbW0pCisjaWZkZWYgQ09ORklHX01NVQorCW1vdglpcCwgIzAKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAwCQlAIGludmFsaWRhdGUgRCBjYWNoZQorI2Vsc2UKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxNCwgMAkJQCBjbGVhbiBhbmQgaW52YWxpZGF0ZSB3aG9sZSBEIGNhY2hlCisjZW5kaWYKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDYJCUAgaW52YWxpZGF0ZSBCVEIgc2luY2UgbW0gY2hhbmdlZAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CQlAIGRhdGEgd3JpdGUgYmFycmllcgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDQJCUAgcHJlZmV0Y2ggZmx1c2gKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIFVUTEIKKyNlbmRpZgorCW1vdglwYywgbHIKKworLyoKKyAqIGNwdV9mYTUyNl9zZXRfcHRlX2V4dChwdGVwLCBwdGUsIGV4dCkKKyAqCisgKiBTZXQgYSBQVEUgYW5kIGZsdXNoIGl0IG91dAorICovCisJLmFsaWduCTQKK0VOVFJZKGNwdV9mYTUyNl9zZXRfcHRlX2V4dCkKKyNpZmRlZiBDT05GSUdfTU1VCisJYXJtdjNfc2V0X3B0ZV9leHQKKwltb3YJcjAsIHIwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorI2VuZGlmCisJbW92CXBjLCBscgorCisJX19JTklUCisKKwkudHlwZQlfX2ZhNTI2X3NldHVwLCAjZnVuY3Rpb24KK19fZmE1MjZfc2V0dXA6CisJLyogT24gcmV0dXJuIG9mIHRoaXMgcm91dGluZSwgcjAgbXVzdCBjYXJyeSBjb3JyZWN0IGZsYWdzIGZvciBDRkcgcmVnaXN0ZXIgKi8KKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMgb24gdjQKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiB3cml0ZSBidWZmZXIgb24gdjQKKyNpZmRlZiBDT05GSUdfTU1VCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNwkJQCBpbnZhbGlkYXRlIEksRCBUTEJzIG9uIHY0CisjZW5kaWYKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA1CQlAIGludmFsaWRhdGUgSVNjcmF0Y2hwYWQgUkFNCisKKwltb3YJcjAsICMxCisJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMSwgMAkJQCB0dXJuLW9uIEVDUgorCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDYJCUAgaW52YWxpZGF0ZSBCVEIgQWxsCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAkJQCBwcmVmZXRjaCBmbHVzaAorCisJbW92CXIwLCAjMHgxZgkJCUAgRG9tYWlucyAwLCAxID0gbWFuYWdlciwgMiA9IGNsaWVudAorCW1jcglwMTUsIDAsIHIwLCBjMywgYzAJCUAgbG9hZCBkb21haW4gYWNjZXNzIHJlZ2lzdGVyCisKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyIHY0CisJbGRyCXI1LCBmYTUyNl9jcjFfY2xlYXIKKwliaWMJcjAsIHIwLCByNQorCWxkcglyNSwgZmE1MjZfY3IxX3NldAorCW9ycglyMCwgcjAsIHI1CisJbW92CXBjLCBscgorCS5zaXplCV9fZmE1MjZfc2V0dXAsIC4gLSBfX2ZhNTI2X3NldHVwCisKKwkvKgorCSAqIC5SVkkgWkZSUyBCTERQIFdDQU0KKwkgKiAuLjExIDEwMDEgLjExMSAxMTAxCisJICoKKwkgKi8KKwkudHlwZQlmYTUyNl9jcjFfY2xlYXIsICNvYmplY3QKKwkudHlwZQlmYTUyNl9jcjFfc2V0LCAjb2JqZWN0CitmYTUyNl9jcjFfY2xlYXI6CisJLndvcmQJMHgzZjNmCitmYTUyNl9jcjFfc2V0OgorCS53b3JkCTB4Mzk3RAorCisJX19JTklUREFUQQorCisvKgorICogUHVycG9zZSA6IEZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgdG8gYWNjZXNzIGFib3ZlIGZ1bmN0aW9ucyAtIGFsbCBjYWxscworICoJICAgICBjb21lIHRocm91Z2ggdGhlc2UKKyAqLworCS50eXBlCWZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK2ZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnM6CisJLndvcmQJdjRfZWFybHlfYWJvcnQKKwkud29yZAlwYWJvcnRfbm9pZmFyCisJLndvcmQJY3B1X2ZhNTI2X3Byb2NfaW5pdAorCS53b3JkCWNwdV9mYTUyNl9wcm9jX2ZpbgorCS53b3JkCWNwdV9mYTUyNl9yZXNldAorCS53b3JkICAgY3B1X2ZhNTI2X2RvX2lkbGUKKwkud29yZAljcHVfZmE1MjZfZGNhY2hlX2NsZWFuX2FyZWEKKwkud29yZAljcHVfZmE1MjZfc3dpdGNoX21tCisJLndvcmQJY3B1X2ZhNTI2X3NldF9wdGVfZXh0CisJLnNpemUJZmE1MjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGZhNTI2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKworCS5zZWN0aW9uICIucm9kYXRhIgorCisJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdAorY3B1X2FyY2hfbmFtZToKKwkuYXNjaXoJImFybXY0IgorCS5zaXplCWNwdV9hcmNoX25hbWUsIC4gLSBjcHVfYXJjaF9uYW1lCisKKwkudHlwZQljcHVfZWxmX25hbWUsICNvYmplY3QKK2NwdV9lbGZfbmFtZToKKwkuYXNjaXoJInY0IgorCS5zaXplCWNwdV9lbGZfbmFtZSwgLiAtIGNwdV9lbGZfbmFtZQorCisJLnR5cGUJY3B1X2ZhNTI2X25hbWUsICNvYmplY3QKK2NwdV9mYTUyNl9uYW1lOgorCS5hc2NpegkiRkE1MjYiCisJLnNpemUJY3B1X2ZhNTI2X25hbWUsIC4gLSBjcHVfZmE1MjZfbmFtZQorCisJLmFsaWduCisKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCisKKwkudHlwZQlfX2ZhNTI2X3Byb2NfaW5mbywjb2JqZWN0CitfX2ZhNTI2X3Byb2NfaW5mbzoKKwkubG9uZwkweDY2MDE1MjYxCisJLmxvbmcJMHhmZjAxZmZmMQorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXAorCQlQTURfQklUNCB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9CSVQ0IHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCWIJX19mYTUyNl9zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9IQUxGCisJLmxvbmcJY3B1X2ZhNTI2X25hbWUKKwkubG9uZwlmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJZmFfdGxiX2ZucworCS5sb25nCWZhX3VzZXJfZm5zCisJLmxvbmcJZmFfY2FjaGVfZm5zCisJLnNpemUJX19mYTUyNl9wcm9jX2luZm8sIC4gLSBfX2ZhNTI2X3Byb2NfaW5mbwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwZjUwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKQEAgLTAsMCArMSw0MTYgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUzogTU1VIGZ1bmN0aW9ucyBmb3IgTWFydmVsbCBQSjEgY29yZQorICoKKyAqICBQSjEgKGNvZGVuYW1lIE1vaGF3aykgaXMgYSBoeWJyaWQgb2YgdGhlIHhzY2FsZTMgYW5kIE1hcnZlbGwncyBvd24gY29yZS4KKyAqCisgKiAgSGVhdmlseSBiYXNlZCBvbiBwcm9jLWFybTkyNi5TIGFuZCBwcm9jLXhzYzMuUworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2h3Y2FwLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgInByb2MtbWFjcm9zLlMiCisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHNpemUgb2YgYW4gYXJlYSB3aGljaCB3aWxsIGJlIGZsdXNoZWQuICBJZiB0aGUKKyAqIGFyZWEgaXMgbGFyZ2VyIHRoYW4gdGhpcywgdGhlbiB3ZSBmbHVzaCB0aGUgd2hvbGUgY2FjaGUuCisgKi8KKyNkZWZpbmUgQ0FDSEVfRExJTUlUCTMyNzY4CisKKy8qCisgKiBUaGUgY2FjaGUgbGluZSBzaXplIG9mIHRoZSBMMSBEIGNhY2hlLgorICovCisjZGVmaW5lIENBQ0hFX0RMSU5FU0laRQkzMgorCisvKgorICogY3B1X21vaGF3a19wcm9jX2luaXQoKQorICovCitFTlRSWShjcHVfbW9oYXdrX3Byb2NfaW5pdCkKKwltb3YJcGMsIGxyCisKKy8qCisgKiBjcHVfbW9oYXdrX3Byb2NfZmluKCkKKyAqLworRU5UUlkoY3B1X21vaGF3a19wcm9jX2ZpbikKKwlzdG1mZAlzcCEsIHtscn0KKwltb3YJaXAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQorCW1zcgljcHNyX2MsIGlwCisJYmwJbW9oYXdrX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJYmljCXIwLCByMCwgIzB4MTgwMAkJCUAgLi4uaXouLi4uLi4uLi4uLgorCWJpYwlyMCwgcjAsICMweDAwMDYJCQlAIC4uLi4uLi4uLi4uLi5jYS4KKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCisJbGRtZmQJc3AhLCB7cGN9CisKKy8qCisgKiBjcHVfbW9oYXdrX3Jlc2V0KGxvYykKKyAqCisgKiBQZXJmb3JtIGEgc29mdCByZXNldCBvZiB0aGUgc3lzdGVtLiAgUHV0IHRoZSBDUFUgaW50byB0aGUKKyAqIHNhbWUgc3RhdGUgYXMgaXQgd291bGQgYmUgaWYgaXQgaGFkIGJlZW4gcmVzZXQsIGFuZCBicmFuY2gKKyAqIHRvIHdoYXQgd291bGQgYmUgdGhlIHJlc2V0IHZlY3Rvci4KKyAqCisgKiBsb2M6IGxvY2F0aW9uIHRvIGp1bXAgdG8gZm9yIHNvZnQgcmVzZXQKKyAqCisgKiAoc2FtZSBhcyBhcm05MjYpCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X21vaGF3a19yZXNldCkKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEksRCBjYWNoZXMKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1jcglwMTUsIDAsIGlwLCBjOCwgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbXJjCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJYmljCWlwLCBpcCwgIzB4MDAwNwkJCUAgLi4uLi4uLi4uLi4uLmNhbQorCWJpYwlpcCwgaXAsICMweDExMDAJCQlAIC4uLmkuLi5zLi4uLi4uLi4KKwltY3IJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwltb3YJcGMsIHIwCisKKy8qCisgKiBjcHVfbW9oYXdrX2RvX2lkbGUoKQorICoKKyAqIENhbGxlZCB3aXRoIElSUXMgZGlzYWJsZWQKKyAqLworCS5hbGlnbgk1CitFTlRSWShjcHVfbW9oYXdrX2RvX2lkbGUpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJCUAgd2FpdCBmb3IgaW50ZXJydXB0CisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9hbGwoKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIGFsbCBjYWNoZSBlbnRyaWVzIGluIGEgcGFydGljdWxhcgorICoJYWRkcmVzcyBzcGFjZS4KKyAqLworRU5UUlkobW9oYXdrX2ZsdXNoX3VzZXJfY2FjaGVfYWxsKQorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKglmbHVzaF9rZXJuX2NhY2hlX2FsbCgpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIGVudGlyZSBjYWNoZS4KKyAqLworRU5UUlkobW9oYXdrX2ZsdXNoX2tlcm5fY2FjaGVfYWxsKQorCW1vdglyMiwgI1ZNX0VYRUMKKwltb3YJaXAsICMwCitfX2ZsdXNoX3dob2xlX2NhY2hlOgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzE0LCAwCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBhbGwgRCBjYWNoZQorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgMAkJQCBkcmFpbiB3cml0ZSBidWZmZXIKKwltb3YJcGMsIGxyCisKKy8qCisgKglmbHVzaF91c2VyX2NhY2hlX3JhbmdlKHN0YXJ0LCBlbmQsIGZsYWdzKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgY2FjaGUgZW50cmllcyBpbiB0aGUKKyAqCXNwZWNpZmllZCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQJLSBzdGFydCBhZGRyZXNzIChpbmNsdXNpdmUpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpCisgKgktIGZsYWdzCS0gdm1fZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKgorICogKHNhbWUgYXMgYXJtOTI2KQorICovCitFTlRSWShtb2hhd2tfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZSkKKwltb3YJaXAsICMwCisJc3ViCXIzLCByMSwgcjAJCQlAIGNhbGN1bGF0ZSB0b3RhbCBzaXplCisJY21wCXIzLCAjQ0FDSEVfRExJTUlUCisJYmd0CV9fZmx1c2hfd2hvbGVfY2FjaGUKKzE6CXRzdAlyMiwgI1ZNX0VYRUMKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGVudHJ5CisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGVudHJ5CisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKgljb2hlcmVudF9rZXJuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJRW5zdXJlIGNvaGVyZW5jeSBiZXR3ZWVuIHRoZSBJY2FjaGUgYW5kIHRoZSBEY2FjaGUgaW4gdGhlCisgKglyZWdpb24gZGVzY3JpYmVkIGJ5IHN0YXJ0LCBlbmQuICBJZiB5b3UgaGF2ZSBub24tc25vb3BpbmcKKyAqCUhhcnZhcmQgY2FjaGVzLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkobW9oYXdrX2NvaGVyZW50X2tlcm5fcmFuZ2UpCisJLyogRkFMTFRIUk9VR0ggKi8KKworLyoKKyAqCWNvaGVyZW50X3VzZXJfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQsIGVuZC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICoKKyAqIChzYW1lIGFzIGFybTkyNikKKyAqLworRU5UUlkobW9oYXdrX2NvaGVyZW50X3VzZXJfcmFuZ2UpCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKgorICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKKyAqCXRoZSBJIGNhY2hlCisgKgorICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqLworRU5UUlkobW9oYXdrX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCisJYWRkCXIxLCByMCwgI1BBR0VfU1oKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfaW52X3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJSW52YWxpZGF0ZSAoZGlzY2FyZCkgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKglNYXkgbm90IHdyaXRlIGJhY2sgYW55IGVudHJpZXMuICBJZiAnc3RhcnQnIG9yICdlbmQnCisgKglhcmUgbm90IGNhY2hlIGxpbmUgYWxpZ25lZCwgdGhvc2UgbGluZXMgbXVzdCBiZSB3cml0dGVuCisgKgliYWNrLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICoKKyAqIChzYW1lIGFzIHY0d2IpCisgKi8KK0VOVFJZKG1vaGF3a19kbWFfaW52X3JhbmdlKQorCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwl0c3QJcjEsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMSwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJCUAgaW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9jbGVhbl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUNsZWFuIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICoKKyAqIChzYW1lIGFzIHY0d2IpCisgKi8KK0VOVFJZKG1vaGF3a19kbWFfY2xlYW5fcmFuZ2UpCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2ZsdXNoX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKG1vaGF3a19kbWFfZmx1c2hfcmFuZ2UpCisJYmljCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKzE6CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworRU5UUlkobW9oYXdrX2NhY2hlX2ZucykKKwkubG9uZwltb2hhd2tfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwkubG9uZwltb2hhd2tfZmx1c2hfdXNlcl9jYWNoZV9hbGwKKwkubG9uZwltb2hhd2tfZmx1c2hfdXNlcl9jYWNoZV9yYW5nZQorCS5sb25nCW1vaGF3a19jb2hlcmVudF9rZXJuX3JhbmdlCisJLmxvbmcJbW9oYXdrX2NvaGVyZW50X3VzZXJfcmFuZ2UKKwkubG9uZwltb2hhd2tfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZQorCS5sb25nCW1vaGF3a19kbWFfaW52X3JhbmdlCisJLmxvbmcJbW9oYXdrX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCW1vaGF3a19kbWFfZmx1c2hfcmFuZ2UKKworRU5UUlkoY3B1X21vaGF3a19kY2FjaGVfY2xlYW5fYXJlYSkKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJc3VicwlyMSwgcjEsICNDQUNIRV9ETElORVNJWkUKKwliaGkJMWIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqIGNwdV9tb2hhd2tfc3dpdGNoX21tKHBnZCkKKyAqCisgKiBTZXQgdGhlIHRyYW5zbGF0aW9uIGJhc2UgcG9pbnRlciB0byBiZSBhcyBkZXNjcmliZWQgYnkgcGdkLgorICoKKyAqIHBnZDogbmV3IHBhZ2UgdGFibGVzCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X21vaGF3a19zd2l0Y2hfbW0pCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzE0LCAwCQlAIGNsZWFuICYgaW52YWxpZGF0ZSBhbGwgRCBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwlvcnIJcjAsIHIwLCAjMHgxOAkJCUAgY2FjaGUgdGhlIHBhZ2UgdGFibGUgaW4gTDIKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIGxvYWQgcGFnZSB0YWJsZSBwb2ludGVyCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKKwltb3YJcGMsIGxyCisKKy8qCisgKiBjcHVfbW9oYXdrX3NldF9wdGVfZXh0KHB0ZXAsIHB0ZSwgZXh0KQorICoKKyAqIFNldCBhIFBURSBhbmQgZmx1c2ggaXQgb3V0CisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X21vaGF3a19zZXRfcHRlX2V4dCkKKwlhcm12M19zZXRfcHRlX2V4dAorCW1vdglyMCwgcjAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKwlfX0lOSVQKKworCS50eXBlCV9fbW9oYXdrX3NldHVwLCAjZnVuY3Rpb24KK19fbW9oYXdrX3NldHVwOgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM3CQlAIGludmFsaWRhdGUgSSxEIGNhY2hlcworCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcJCUAgaW52YWxpZGF0ZSBJLEQgVExCcworCW9ycglyNCwgcjQsICMweDE4CQkJQCBjYWNoZSB0aGUgcGFnZSB0YWJsZSBpbiBMMgorCW1jcglwMTUsIDAsIHI0LCBjMiwgYzAsIDAJCUAgbG9hZCBwYWdlIHRhYmxlIHBvaW50ZXIKKworCW1vdglyMCwgIzAJCQkJQCBkb24ndCBhbGxvdyBDUCBhY2Nlc3MKKwltY3IJcDE1LCAwLCByMCwgYzE1LCBjMSwgMAkJQCB3cml0ZSBDUCBhY2Nlc3MgcmVnaXN0ZXIKKworCWFkcglyNSwgbW9oYXdrX2NydmFsCisJbGRtaWEJcjUsIHtyNSwgcjZ9CisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlcgorCWJpYwlyMCwgcjAsIHI1CisJb3JyCXIwLCByMCwgcjYKKwltb3YJcGMsIGxyCisKKwkuc2l6ZQlfX21vaGF3a19zZXR1cCwgLiAtIF9fbW9oYXdrX3NldHVwCisKKwkvKgorCSAqICBSCisJICogLlJWSSBaRlJTIEJMRFAgV0NBTQorCSAqIC4wMTEgMTAwMSAuLjAwIDAxMDEKKwkgKgorCSAqLworCS50eXBlCW1vaGF3a19jcnZhbCwgI29iamVjdAorbW9oYXdrX2NydmFsOgorCWNydmFsCWNsZWFyPTB4MDAwMDdmM2YsIG1tdXNldD0weDAwMDAzOTA1LCB1Y3NldD0weDAwMDAxMTM0CisKKwlfX0lOSVREQVRBCisKKy8qCisgKiBQdXJwb3NlIDogRnVuY3Rpb24gcG9pbnRlcnMgdXNlZCB0byBhY2Nlc3MgYWJvdmUgZnVuY3Rpb25zIC0gYWxsIGNhbGxzCisgKgkgICAgIGNvbWUgdGhyb3VnaCB0aGVzZQorICovCisJLnR5cGUJbW9oYXdrX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK21vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zOgorCS53b3JkCXY1dF9lYXJseV9hYm9ydAorCS53b3JkCXBhYm9ydF9ub2lmYXIKKwkud29yZAljcHVfbW9oYXdrX3Byb2NfaW5pdAorCS53b3JkCWNwdV9tb2hhd2tfcHJvY19maW4KKwkud29yZAljcHVfbW9oYXdrX3Jlc2V0CisJLndvcmQJY3B1X21vaGF3a19kb19pZGxlCisJLndvcmQJY3B1X21vaGF3a19kY2FjaGVfY2xlYW5fYXJlYQorCS53b3JkCWNwdV9tb2hhd2tfc3dpdGNoX21tCisJLndvcmQJY3B1X21vaGF3a19zZXRfcHRlX2V4dAorCS5zaXplCW1vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gbW9oYXdrX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKworCS5zZWN0aW9uICIucm9kYXRhIgorCisJLnR5cGUJY3B1X2FyY2hfbmFtZSwgI29iamVjdAorY3B1X2FyY2hfbmFtZToKKwkuYXNjaXoJImFybXY1dGUiCisJLnNpemUJY3B1X2FyY2hfbmFtZSwgLiAtIGNwdV9hcmNoX25hbWUKKworCS50eXBlCWNwdV9lbGZfbmFtZSwgI29iamVjdAorY3B1X2VsZl9uYW1lOgorCS5hc2NpegkidjUiCisJLnNpemUJY3B1X2VsZl9uYW1lLCAuIC0gY3B1X2VsZl9uYW1lCisKKwkudHlwZQljcHVfbW9oYXdrX25hbWUsICNvYmplY3QKK2NwdV9tb2hhd2tfbmFtZToKKwkuYXNjaXoJIk1hcnZlbGwgODhTVjMzMXgiCisJLnNpemUJY3B1X21vaGF3a19uYW1lLCAuIC0gY3B1X21vaGF3a19uYW1lCisKKwkuYWxpZ24KKworCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKKworCS50eXBlCV9fODhzdjMzMXhfcHJvY19pbmZvLCNvYmplY3QKK19fODhzdjMzMXhfcHJvY19pbmZvOgorCS5sb25nCTB4NTYxNTgwMDAJCQlAIE1hcnZlbGwgODhTVjMzMXggKE1PSEFXSykKKwkubG9uZwkweGZmZmZmMDAwCisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCisJCVBNRF9CSVQ0IHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKKwkJUE1EX0JJVDQgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJYglfX21vaGF3a19zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfRURTUAorCS5sb25nCWNwdV9tb2hhd2tfbmFtZQorCS5sb25nCW1vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXY0d2JfdXNlcl9mbnMKKwkubG9uZwltb2hhd2tfY2FjaGVfZm5zCisJLnNpemUJX184OHN2MzMxeF9wcm9jX2luZm8sIC4gLSBfXzg4c3YzMzF4X3Byb2NfaW5mbwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vdGxiLWZhLlMgYi9hcmNoL2FybS9tbS90bGItZmEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Njk0ZjFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vdGxiLWZhLlMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS90bGItZmEuUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgRmFyYWRheSBDb3JwLgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoKKyAqIEJhc2VkIG9uIHRsYi12NHdiaS5TOgorICogIENvcHlyaWdodCAoQykgMTk5Ny0yMDAyIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIEFSTSBhcmNoaXRlY3R1cmUgdmVyc2lvbiA0LCBGYXJhZGF5IHZhcmlhdGlvbi4KKyAqICBUaGlzIGFzc3VtZSBhbiB1bmlmaWVkIFRMQnMsIHdpdGggYSB3cml0ZSBidWZmZXIsIGFuZCBicmFuY2ggdGFyZ2V0IGJ1ZmZlciAoQlRCKQorICoKKyAqICBQcm9jZXNzb3JzOiBGQTUyMCBGQTUyNiBGQTYyNgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlICJwcm9jLW1hY3Jvcy5TIgorCisKKy8qCisgKglmbHVzaF91c2VyX3RsYl9yYW5nZShzdGFydCwgZW5kLCBtbSkKKyAqCisgKglJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgVExCIGVudHJpZXMgaW4gdGhlIHNwZWNpZmllZCBhZGRyZXNzIHNwYWNlLgorICoKKyAqCS0gc3RhcnQgLSByYW5nZSBzdGFydCBhZGRyZXNzCisgKgktIGVuZCAgIC0gcmFuZ2UgZW5kIGFkZHJlc3MKKyAqCS0gbW0gICAgLSBtbV9zdHJ1Y3QgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KKwkuYWxpZ24JNAorRU5UUlkoZmFfZmx1c2hfdXNlcl90bGJfcmFuZ2UpCisJdm1hX3ZtX21tIGlwLCByMgorCWFjdF9tbQlyMwkJCQlAIGdldCBjdXJyZW50LT5hY3RpdmVfbW0KKwllb3JzCXIzLCBpcCwgcjMJCQlAID09IG1tID8KKwltb3ZuZQlwYywgbHIJCQkJQCBubywgd2UgZG9udCBkbyBhbnl0aGluZworCW1vdglyMywgIzAKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCWJpYwlyMCwgcjAsICMweDBmZgorCWJpYwlyMCwgcjAsICMweGYwMAorMToJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMQkJQCBpbnZhbGlkYXRlIFVUTEIgZW50cnkKKwlhZGQJcjAsIHIwLCAjUEFHRV9TWgorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMywgYzcsIGM1LCA2CQlAIGludmFsaWRhdGUgQlRCCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbW92CXBjLCBscgorCisKK0VOVFJZKGZhX2ZsdXNoX2tlcm5fdGxiX3JhbmdlKQorCW1vdglyMywgIzAKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCWJpYwlyMCwgcjAsICMweDBmZgorCWJpYwlyMCwgcjAsICMweGYwMAorMToJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMQkJQCBpbnZhbGlkYXRlIFVUTEIgZW50cnkKKwlhZGQJcjAsIHIwLCAjUEFHRV9TWgorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwltY3IJcDE1LCAwLCByMywgYzcsIGM1LCA2CQlAIGludmFsaWRhdGUgQlRCCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTAsIDQJCUAgZGF0YSB3cml0ZSBiYXJyaWVyCisJbWNyCXAxNSwgMCwgcjMsIGM3LCBjNSwgNAkJQCBwcmVmZXRjaCBmbHVzaAorCW1vdglwYywgbHIKKworCV9fSU5JVERBVEEKKworCS50eXBlCWZhX3RsYl9mbnMsICNvYmplY3QKK0VOVFJZKGZhX3RsYl9mbnMpCisJLmxvbmcJZmFfZmx1c2hfdXNlcl90bGJfcmFuZ2UKKwkubG9uZwlmYV9mbHVzaF9rZXJuX3RsYl9yYW5nZQorCS5sb25nCWZhX3RsYl9mbGFncworCS5zaXplCWZhX3RsYl9mbnMsIC4gLSBmYV90bGJfZm5zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9vcHJvZmlsZS9iYWNrdHJhY2UuYyBiL2FyY2gvYXJtL29wcm9maWxlL2JhY2t0cmFjZS5jCmluZGV4IGNlZmMyMWMuLmQ4MDVhNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL29wcm9maWxlL2JhY2t0cmFjZS5jCisrKyBiL2FyY2gvYXJtL29wcm9maWxlL2JhY2t0cmFjZS5jCkBAIC0xOCwxNSArMTgsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0KLSNpbmNsdWRlICIuLi9rZXJuZWwvc3RhY2t0cmFjZS5oIgorI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAKIHN0YXRpYyBpbnQgcmVwb3J0X3RyYWNlKHN0cnVjdCBzdGFja2ZyYW1lICpmcmFtZSwgdm9pZCAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgKmRlcHRoID0gZDsKIAogCWlmICgqZGVwdGgpIHsKLQkJb3Byb2ZpbGVfYWRkX3RyYWNlKGZyYW1lLT5scik7CisJCW9wcm9maWxlX2FkZF90cmFjZShmcmFtZS0+cGMpOwogCQkoKmRlcHRoKS0tOwogCX0KIApAQCAtNzAsOSArNjksMTIgQEAKIAlzdHJ1Y3QgZnJhbWVfdGFpbCAqdGFpbCA9ICgoc3RydWN0IGZyYW1lX3RhaWwgKikgcmVncy0+QVJNX2ZwKSAtIDE7CiAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkgewotCQl1bnNpZ25lZCBsb25nIGJhc2UgPSAoKHVuc2lnbmVkIGxvbmcpcmVncykgJiB+KFRIUkVBRF9TSVpFIC0gMSk7Ci0JCXdhbGtfc3RhY2tmcmFtZShyZWdzLT5BUk1fZnAsIGJhc2UsIGJhc2UgKyBUSFJFQURfU0laRSwKLQkJCQlyZXBvcnRfdHJhY2UsICZkZXB0aCk7CisJCXN0cnVjdCBzdGFja2ZyYW1lIGZyYW1lOworCQlmcmFtZS5mcCA9IHJlZ3MtPkFSTV9mcDsKKwkJZnJhbWUuc3AgPSByZWdzLT5BUk1fc3A7CisJCWZyYW1lLmxyID0gcmVncy0+QVJNX2xyOworCQlmcmFtZS5wYyA9IHJlZ3MtPkFSTV9wYzsKKwkJd2Fsa19zdGFja2ZyYW1lKCZmcmFtZSwgcmVwb3J0X3RyYWNlLCAmZGVwdGgpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZwppbmRleCA5Y2MyYjE2Li4xN2QwZTk5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKQEAgLTMsNyArMyw3IEBACiBtZW51ICJGcmVlc2NhbGUgTVhDIEltcGxlbWVudGF0aW9ucyIKIAogY2hvaWNlCi0JcHJvbXB0ICJNWEMvaU1YIEJhc2UgVHlwZSIKKwlwcm9tcHQgIkZyZWVzY2FsZSBDUFUgZmFtaWx5OiIKIAlkZWZhdWx0IEFSQ0hfTVgzCiAKIGNvbmZpZyBBUkNIX01YMQpAQCAtMTUsMTIgKzE1LDE0IEBACiBjb25maWcgQVJDSF9NWDIKIAlib29sICJNWDItYmFzZWQiCiAJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IENPTU1PTl9DTEtERVYKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgRnJlZXNjYWxlIGkuTVgyIGZhbWlseQogCiBjb25maWcgQVJDSF9NWDMKIAlib29sICJNWDMtYmFzZWQiCiAJc2VsZWN0IENQVV9WNgorCXNlbGVjdCBDT01NT05fQ0xLREVWCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEZyZWVzY2FsZSBpLk1YMyBmYW1pbHkKIApAQCAtNDMsNCArNDUsMTAgQEAKIAkgIHJlcXVpcmVtZW50cyBmb3IgdGltaW5nLgogCSAgU2F5IE4gaGVyZSwgdW5sZXNzIHlvdSBoYXZlIGEgc3BlY2lhbGl6ZWQgcmVxdWlyZW1lbnQuCiAKK2NvbmZpZyBNWENfUFdNCisJdHJpc3RhdGUgIkVuYWJsZSBQV00gZHJpdmVyIgorCWRlcGVuZHMgb24gQVJDSF9NWEMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIGkuTVggUFdNIGNvbnRyb2xsZXIocykuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCmluZGV4IGRiNzRhOTIuLjA1NTQwNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlCkBAIC0zLDcgKzMsOCBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBpcnEubyBjbG9jay5vIGdwaW8ubyB0aW1lLm8gZGV2aWNlcy5vCitvYmoteSA6PSBpcnEubyBjbG9jay5vIGdwaW8ubyB0aW1lLm8gZGV2aWNlcy5vIGNwdS5vIHN5c3RlbS5vCiAKIG9iai0kKENPTkZJR19BUkNIX01YMSkgKz0gaW9tdXgtbXgxLW14Mi5vIGRtYS1teDEtbXgyLm8KIG9iai0kKENPTkZJR19BUkNIX01YMikgKz0gaW9tdXgtbXgxLW14Mi5vIGRtYS1teDEtbXgyLm8KK29iai0kKENPTkZJR19NWENfUFdNKSAgKz0gcHdtLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9jbG9jay5jCmluZGV4IDBhMzhmMGIuLjkyZTEzNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvY2xvY2suYwpAQCAtNDgsNiArNDgsMTEgQEAKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCisgKiBBbGwgdGhlIGNvZGUgaW5zaWRlICNpZm5kZWYgQ09ORklHX0NPTU1PTl9DTEtERVYgY2FuIGJlIHJlbW92ZWQgb25jZSBhbGwKKyAqIE1YQyBhcmNoaXRlY3R1cmVzIGhhdmUgc3dpdGNoZWQgdG8gdXNpbmcgY2xrZGV2LgorICovCisjaWZuZGVmIENPTkZJR19DT01NT05fQ0xLREVWCisvKgogICogUmV0cmlldmUgYSBjbG9jayBieSBuYW1lLgogICoKICAqIE5vdGUgdGhhdCB3ZSBmaXJzdCB0cnkgdG8gdXNlIGRldmljZSBpZCBvbiB0aGUgYnVzCkBAIC0xMTAsNiArMTE1LDcgQEAKIAlyZXR1cm4gY2xrOwogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKQEAgLTE4Nyw2ICsxOTMsNyBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwogCisjaWZuZGVmIENPTkZJR19DT01NT05fQ0xLREVWCiAvKiBEZWNyZW1lbnQgdGhlIGNsb2NrJ3MgbW9kdWxlIHJlZmVyZW5jZSBjb3VudCAqLwogdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKIHsKQEAgLTE5NCw2ICsyMDEsNyBAQAogCQltb2R1bGVfcHV0KGNsay0+b3duZXIpOwogfQogRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKKyNlbmRpZgogCiAvKiBSb3VuZCB0aGUgcmVxdWVzdGVkIGNsb2NrIHJhdGUgdG8gdGhlIG5lYXJlc3Qgc3VwcG9ydGVkCiAgKiByYXRlIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSByZXF1ZXN0ZWQgcmF0ZS4KQEAgLTI1Nyw2ICsyNjUsNyBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3BhcmVudCk7CiAKKyNpZm5kZWYgQ09ORklHX0NPTU1PTl9DTEtERVYKIC8qCiAgKiBBZGQgYSBuZXcgY2xvY2sgdG8gdGhlIGNsb2NrIHRyZWUuCiAgKi8KQEAgLTMyNyw0ICszMzYsNDkgQEAKIH0KIAogbGF0ZV9pbml0Y2FsbChteGNfc2V0dXBfcHJvY19lbnRyeSk7CisjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KICNlbmRpZgorCisvKgorICogR2V0IHRoZSByZXN1bHRpbmcgY2xvY2sgcmF0ZSBmcm9tIGEgUExMIHJlZ2lzdGVyIHZhbHVlIGFuZCB0aGUgaW5wdXQKKyAqIGZyZXF1ZW5jeS4gUExMcyB3aXRoIHRoaXMgcmVnaXN0ZXIgbGF5b3V0IGNhbiBhdCBsZWFzdCBiZSBmb3VuZCBvbgorICogTVgxLCBNWDIxLCBNWDI3IGFuZCBNWDMxCisgKgorICogICAgICAgICAgICAgICAgICBtZmkgKyBtZm4gLyAobWZkICsgMSkKKyAqICBmID0gMiAqIGZfcmVmICogLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAgICAgcGQgKyAxCisgKi8KK3Vuc2lnbmVkIGxvbmcgbXhjX2RlY29kZV9wbGwodW5zaWduZWQgaW50IHJlZ192YWwsIHUzMiBmcmVxKQoreworCWxvbmcgbG9uZyBsbDsKKwlpbnQgbWZuX2FiczsKKwl1bnNpZ25lZCBpbnQgbWZpLCBtZm4sIG1mZCwgcGQ7CisKKwltZmkgPSAocmVnX3ZhbCA+PiAxMCkgJiAweGY7CisJbWZuID0gcmVnX3ZhbCAmIDB4M2ZmOworCW1mZCA9IChyZWdfdmFsID4+IDE2KSAmIDB4M2ZmOworCXBkID0gIChyZWdfdmFsID4+IDI2KSAmIDB4ZjsKKworCW1maSA9IG1maSA8PSA1ID8gNSA6IG1maTsKKworCW1mbl9hYnMgPSBtZm47CisKKyNpZiAhZGVmaW5lZCBDT05GSUdfQVJDSF9NWDEgJiYgIWRlZmluZWQgQ09ORklHX0FSQ0hfTVgyMQorCWlmIChtZm4gPj0gMHgyMDApIHsKKwkJbWZuIHw9IDB4RkZGRkZFMDA7CisJCW1mbl9hYnMgPSAtbWZuOworCX0KKyNlbmRpZgorCisJZnJlcSAqPSAyOworCWZyZXEgLz0gcGQgKyAxOworCisJbGwgPSAodW5zaWduZWQgbG9uZyBsb25nKWZyZXEgKiBtZm5fYWJzOworCisJZG9fZGl2KGxsLCBtZmQgKyAxKTsKKwlpZiAobWZuIDwgMCkKKwkJbGwgPSAtbGw7CisJbGwgPSAoZnJlcSAqIG1maSkgKyBsbDsKKworCXJldHVybiBsbDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2ZTBkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2NwdS5jCkBAIC0wLDAgKzEsMTEgQEAKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCit1bnNpZ25lZCBpbnQgX19teGNfY3B1X3R5cGU7CitFWFBPUlRfU1lNQk9MKF9fbXhjX2NwdV90eXBlKTsKKwordm9pZCBteGNfc2V0X2NwdV90eXBlKHVuc2lnbmVkIGludCB0eXBlKQoreworCV9fbXhjX2NwdV90eXBlID0gdHlwZTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZGV2aWNlcy5jCmluZGV4IGM2Njc0ODIuLjU2ZjJmYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2RldmljZXMuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kZXZpY2VzLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KIAogaW50IF9faW5pdCBteGNfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgKmRhdGEpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9kbWEtbXgxLW14Mi5jIGIvYXJjaC9hcm0vcGxhdC1teGMvZG1hLW14MS1teDIuYwppbmRleCAyOTA1ZWM3Li5lMzY0YTVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9kbWEtbXgxLW14Mi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RtYS1teDEtbXgyLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXZvaWQgKCplcnJfaGFuZGxlcikgKGludCwgdm9pZCAqLCBpbnQgZXJyY29kZSk7CiAJdm9pZCAoKnByb2dfaGFuZGxlcikgKGludCwgdm9pZCAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKik7CiAJdm9pZCAqZGF0YTsKLQl1bnNpZ25lZCBpbnQgIGRtYV9tb2RlOworCXVuc2lnbmVkIGludCBkbWFfbW9kZTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXVuc2lnbmVkIGludCByZXNieXRlczsKIAlpbnQgZG1hX251bTsKQEAgLTgwMiw3ICs4MDIsNyBAQAogCWludCByZXQgPSAwOwogCWludCBpOwogCi0JZG1hX2NsayA9IGNsa19nZXQoTlVMTCwgImRtYV9jbGsiKTsKKwlkbWFfY2xrID0gY2xrX2dldChOVUxMLCAiZG1hIik7CiAJY2xrX2VuYWJsZShkbWFfY2xrKTsKIAogCS8qIHJlc2V0IERNQSBtb2R1bGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwppbmRleCBjY2JkOTRhLi5jNjQ4M2JhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCkBAIC0yMDAsOCArMjAwLDggQEAKIHN0YXRpYyBpbnQgbXhjX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAogCQkJCSAgICAgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7Ci0JX3NldF9ncGlvX2RpcmVjdGlvbihjaGlwLCBvZmZzZXQsIDEpOwogCW14Y19ncGlvX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKwlfc2V0X2dwaW9fZGlyZWN0aW9uKGNoaXAsIG9mZnNldCwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgyN2Fkcy5oCmluZGV4IDhmMzRhMDUuLjFjYWM5ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDI3YWRzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MjdhZHMuaApAQCAtNDgsNyArNDgsOCBAQAogICogQmFzZSBhZGRyZXNzIG9mIFBCQyBjb250cm9sbGVyLCBDUzQKICAqLwogI2RlZmluZSBQQkNfQkFTRV9BRERSRVNTICAgICAgICAweEVCMDAwMDAwCi0jZGVmaW5lIFBCQ19SRUdfQUREUihvZmZzZXQpICAgIChQQkNfQkFTRV9BRERSRVNTICsgKG9mZnNldCkpCisjZGVmaW5lIFBCQ19SRUdfQUREUihvZmZzZXQpICAgICh2b2lkIF9fZm9yY2UgX19pb21lbSAqKSBcCisJCShQQkNfQkFTRV9BRERSRVNTICsgKG9mZnNldCkpCiAKIC8qCiAgKiBQQkMgSW50ZXJ1cHQgbmFtZSBkZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxYWRzLmgKaW5kZXggNDUxZDUxMC4uMzE4YzcyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWFkcy5oCkBAIC0xMSw2ICsxMSw4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFBRFNfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFBRFNfSF9fCiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKIC8qIEJhc2UgYWRkcmVzcyBvZiBQQkMgY29udHJvbGxlciAqLwogI2RlZmluZSBQQkNfQkFTRV9BRERSRVNTICAgICAgICBJT19BRERSRVNTKENTNF9CQVNFX0FERFIpCiAvKiBPZmZzZXRzIGZvciB0aGUgUEJDIENvbnRyb2xsZXIgcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFtb2JvYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhZWYxYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVmFsZW50aW4gTG9uZ2NoYW1wLCBFUEZMIE1vYm90cyBncm91cAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMU1PQk9BUkRfSF9fCisjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX01YMzFNT0JPQVJEX0hfXworCisvKiBtYW5kYXRvcnkgZm9yIENPTkZJR19MTF9ERUJVRyAqLworCisjZGVmaW5lIE1YQ19MTF9VQVJUX1BBRERSCVVBUlQxX0JBU0VfQUREUgorI2RlZmluZSBNWENfTExfVUFSVF9WQUREUgkoQUlQSV9CQVNFX0FERFJfVklSVCArIDB4MEEwMDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2VudW0gbXgzMW1vYm9hcmRfYm9hcmRzIHsKKwlNWDMxTk9CT0FSRAk9IDAsCisJTVgzMURFVkJPQVJECT0gMSwKKwlNWDMxTUFSWEJPVAk9IDIsCit9OworCisvKgorICogVGhpcyBDUFUgbW9kdWxlIG5lZWRzIGEgYmFzZWJvYXJkIHRvIHdvcmsuIEFmdGVyIGJhc2ljIGluaXRpYWxpemluZworICogaXRzIG93biBkZXZpY2VzLCBpdCBjYWxscyBiYXNlYm9hcmQncyBpbml0IGZ1bmN0aW9uLgorICovCisKK2V4dGVybiB2b2lkIG14MzFtb2JvYXJkX2RldmJvYXJkX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBteDMxbW9ib2FyZF9tYXJ4Ym90X2luaXQodm9pZCk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01fQVJDSF9NWENfQk9BUkRfTVgzMU1PQk9BUkRfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtcW9uZy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXFvbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmY3NjJkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLXFvbmcuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgSWx5YSBZYW5vaywgRW1jcmFmdCBTeXN0ZW1zIEx0ZCwgPHlhbm9rQGVtY3JhZnQuY29tPgorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfQk9BUkRfUU9OR19IX18KKyNkZWZpbmUgX19BU01fQVJDSF9NWENfQk9BUkRfUU9OR19IX18KKworLyogbWFuZGF0b3J5IGZvciBDT05GSUdfTExfREVCVUcgKi8KKworI2RlZmluZSBNWENfTExfVUFSVF9QQUREUglVQVJUMV9CQVNFX0FERFIKKyNkZWZpbmUgTVhDX0xMX1VBUlRfVkFERFIJQUlQUzFfSU9fQUREUkVTUyhVQVJUMV9CQVNFX0FERFIpCisKKy8qIE5PUiBGTEFTSCAqLworI2RlZmluZSBRT05HX05PUl9TSVpFCQkoMTI4KjEwMjQqMTAyNCkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX0JPQVJEX1FPTkdfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRiMzdhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMCwwICsxLDcgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9DTEtERVZfSAorI2RlZmluZSBfX0FTTV9NQUNIX0NMS0RFVl9ICisKKyNkZWZpbmUgX19jbGtfZ2V0KGNsaykgKHsgMTsgfSkKKyNkZWZpbmUgX19jbGtfcHV0KGNsaykgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKaW5kZXggZDIxZjc4ZS4uNDNhODJkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKQEAgLTI2LDkgKzI2LDEzIEBACiBzdHJ1Y3QgbW9kdWxlOwogCiBzdHJ1Y3QgY2xrIHsKKyNpZm5kZWYgQ09ORklHX0NPTU1PTl9DTEtERVYKKwkvKiBBcyBzb29uIGFzIGkuTVgxIGFuZCBpLk1YMzEgc3dpdGNoZWQgdG8gY2xrZGV2LCB0aGlzCisJICogYmxvY2sgY2FuIGdvIGF3YXkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJY29uc3QgY2hhciAqbmFtZTsKKyNlbmRpZgogCWludCBpZDsKIAkvKiBTb3VyY2UgY2xvY2sgdGhpcyBjbGsgZGVwZW5kcyBvbiAqLwogCXN0cnVjdCBjbGsgKnBhcmVudDsKQEAgLTYzLDUgKzY3LDcgQEAKIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKIAordW5zaWduZWQgbG9uZyBteGNfZGVjb2RlX3BsbCh1bnNpZ25lZCBpbnQgcGxsLCB1MzIgZl9yZWYpOworCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19BU01fQVJDSF9NWENfQ0xPQ0tfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmgKaW5kZXggNjM1MDI4Ny4uYjJmOWI3MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaApAQCAtMTIsMTIgKzEyLDE4IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX0NPTU1PTl9IX18KIAogc3RydWN0IHBsYXRmb3JtX2RldmljZTsKK3N0cnVjdCBjbGs7CiAKIGV4dGVybiB2b2lkIG14Y19tYXBfaW8odm9pZCk7CiBleHRlcm4gdm9pZCBteGNfaW5pdF9pcnEodm9pZCk7Ci1leHRlcm4gdm9pZCBteGNfdGltZXJfaW5pdChjb25zdCBjaGFyICpjbGtfdGltZXIpOwotZXh0ZXJuIGludCBteGNfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKK2V4dGVybiB2b2lkIG14Y190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2Nsayk7CitleHRlcm4gaW50IG14MV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOworZXh0ZXJuIGludCBteDIxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgbHJlZiwgdW5zaWduZWQgbG9uZyBmcmVmKTsKK2V4dGVybiBpbnQgbXgyN19jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOworZXh0ZXJuIGludCBteDMxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZik7CitleHRlcm4gaW50IG14MzVfY2xvY2tzX2luaXQodm9pZCk7CiBleHRlcm4gaW50IG14Y19yZWdpc3Rlcl9ncGlvcyh2b2lkKTsKIGV4dGVybiBpbnQgbXhjX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB2b2lkICpkYXRhKTsKK2V4dGVybiB2b2lkIG14Y19zZXRfY3B1X3R5cGUodW5zaWduZWQgaW50IHR5cGUpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggNjAyNzY4Yi4uNGY3NzMxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTMxLDYgKzMxLDkgQEAKICNpZmRlZiBDT05GSUdfTUFDSF9NWDMxXzNEUwogI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMXBkay5oPgogI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQ0hfUU9ORworI2luY2x1ZGUgPG1hY2gvYm9hcmQtcW9uZy5oPgorI2VuZGlmCiAJCS5tYWNybwlhZGRydWFydCxyeAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IGE2MTJkOGIuLjQyZTRlZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0yMywxMCArMjMsMTYgQEAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIAogI2lmZGVmIENPTkZJR19BUkNIX01YMwotIyBpbmNsdWRlIDxtYWNoL214MzEuaD4KKyNpbmNsdWRlIDxtYWNoL214M3guaD4KKyNpbmNsdWRlIDxtYWNoL214MzEuaD4KKyNpbmNsdWRlIDxtYWNoL214MzUuaD4KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVgyCisjIGluY2x1ZGUgPG1hY2gvbXgyeC5oPgorIyBpZmRlZiBDT05GSUdfTUFDSF9NWDIxCisjICBpbmNsdWRlIDxtYWNoL214MjEuaD4KKyMgZW5kaWYKICMgaWZkZWYgQ09ORklHX01BQ0hfTVgyNwogIyAgaW5jbHVkZSA8bWFjaC9teDI3Lmg+CiAjIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW14ZmIuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pbXhmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MmE3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW14ZmIuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBtYWNoaW5lIHdoaWNoIHdlIGFyZSBydW5uaW5nIG9uLgorICovCisKKyNkZWZpbmUgUENSX1RGVAkJKDEgPDwgMzEpCisjZGVmaW5lIFBDUl9DT0xPUgkoMSA8PCAzMCkKKyNkZWZpbmUgUENSX1BCU0laXzEJKDAgPDwgMjgpCisjZGVmaW5lIFBDUl9QQlNJWl8yCSgxIDw8IDI4KQorI2RlZmluZSBQQ1JfUEJTSVpfNAkoMiA8PCAyOCkKKyNkZWZpbmUgUENSX1BCU0laXzgJKDMgPDwgMjgpCisjZGVmaW5lIFBDUl9CUElYXzEJKDAgPDwgMjUpCisjZGVmaW5lIFBDUl9CUElYXzIJKDEgPDwgMjUpCisjZGVmaW5lIFBDUl9CUElYXzQJKDIgPDwgMjUpCisjZGVmaW5lIFBDUl9CUElYXzgJKDMgPDwgMjUpCisjZGVmaW5lIFBDUl9CUElYXzEyCSg0IDw8IDI1KQorI2RlZmluZSBQQ1JfQlBJWF8xNgkoNCA8PCAyNSkKKyNkZWZpbmUgUENSX1BJWFBPTAkoMSA8PCAyNCkKKyNkZWZpbmUgUENSX0ZMTVBPTAkoMSA8PCAyMykKKyNkZWZpbmUgUENSX0xQUE9MCSgxIDw8IDIyKQorI2RlZmluZSBQQ1JfQ0xLUE9MCSgxIDw8IDIxKQorI2RlZmluZSBQQ1JfT0VQT0wJKDEgPDwgMjApCisjZGVmaW5lIFBDUl9TQ0xLSURMRQkoMSA8PCAxOSkKKyNkZWZpbmUgUENSX0VORF9TRUwJKDEgPDwgMTgpCisjZGVmaW5lIFBDUl9FTkRfQllURV9TV0FQICgxIDw8IDE3KQorI2RlZmluZSBQQ1JfUkVWX1ZTCSgxIDw8IDE2KQorI2RlZmluZSBQQ1JfQUNEX1NFTAkoMSA8PCAxNSkKKyNkZWZpbmUgUENSX0FDRCh4KQkoKCh4KSAmIDB4N2YpIDw8IDgpCisjZGVmaW5lIFBDUl9TQ0xLX1NFTAkoMSA8PCA3KQorI2RlZmluZSBQQ1JfU0hBUlAJKDEgPDwgNikKKyNkZWZpbmUgUENSX1BDRCh4KQkoKHgpICYgMHgzZikKKworI2RlZmluZSBQV01SX0NMUyh4KQkoKCh4KSAmIDB4MWZmKSA8PCAxNikKKyNkZWZpbmUgUFdNUl9MRE1TSwkoMSA8PCAxNSkKKyNkZWZpbmUgUFdNUl9TQ1IxCSgxIDw8IDEwKQorI2RlZmluZSBQV01SX1NDUjAJKDEgPDwgOSkKKyNkZWZpbmUgUFdNUl9DQ19FTgkoMSA8PCA4KQorI2RlZmluZSBQV01SX1BXKHgpCSgoeCkgJiAweGZmKQorCisjZGVmaW5lIExTQ1IxX1BTX1JJU0VfREVMQVkoeCkgICAgKCgoeCkgJiAweDdmKSA8PCAyNikKKyNkZWZpbmUgTFNDUjFfQ0xTX1JJU0VfREVMQVkoeCkgICAoKCh4KSAmIDB4M2YpIDw8IDE2KQorI2RlZmluZSBMU0NSMV9SRVZfVE9HR0xFX0RFTEFZKHgpICgoKHgpICYgMHhmKSA8PCA4KQorI2RlZmluZSBMU0NSMV9HUkFZMih4KSAgICAgICAgICAgICgoKHgpICYgMHhmKSA8PCA0KQorI2RlZmluZSBMU0NSMV9HUkFZMSh4KSAgICAgICAgICAgICgoKHgpICYgMHhmKSkKKworI2RlZmluZSBETUFDUl9CVVJTVAkoMSA8PCAzMSkKKyNkZWZpbmUgRE1BQ1JfSE0oeCkJKCgoeCkgJiAweGYpIDw8IDE2KQorI2RlZmluZSBETUFDUl9UTSh4KQkoKHgpICYgMHhmKQorCitzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgeworCXVfbG9uZwkJcGl4Y2xvY2s7CisKKwl1X3Nob3J0CQl4cmVzOworCXVfc2hvcnQJCXlyZXM7CisKKwl1X2ludAkJbm9uc3RkOworCXVfY2hhcgkJYnBwOworCXVfY2hhcgkJaHN5bmNfbGVuOworCXVfY2hhcgkJbGVmdF9tYXJnaW47CisJdV9jaGFyCQlyaWdodF9tYXJnaW47CisKKwl1X2NoYXIJCXZzeW5jX2xlbjsKKwl1X2NoYXIJCXVwcGVyX21hcmdpbjsKKwl1X2NoYXIJCWxvd2VyX21hcmdpbjsKKwl1X2NoYXIJCXN5bmM7CisKKwl1X2ludAkJY21hcF9ncmV5c2NhbGU6MSwKKwkJCWNtYXBfaW52ZXJzZToxLAorCQkJY21hcF9zdGF0aWM6MSwKKwkJCXVudXNlZDoyOTsKKworCXVfaW50CQlwY3I7CisJdV9pbnQJCXB3bXI7CisJdV9pbnQJCWxzY3IxOworCXVfaW50CQlkbWFjcjsKKworCXVfY2hhciAqIGZpeGVkX3NjcmVlbl9jcHU7CisJZG1hX2FkZHJfdCBmaXhlZF9zY3JlZW5fZG1hOworCisJaW50ICgqaW5pdCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSopOworCWludCAoKmV4aXQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqKTsKKworCXZvaWQgKCpsY2RfcG93ZXIpKGludCk7CisJdm9pZCAoKmJhY2tsaWdodF9wb3dlcikoaW50KTsKK307CisKK3ZvaWQgc2V0X2lteF9mYl9pbmZvKHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDEtbXgyLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgxLW14Mi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWEzODNiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDEtbXgyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9NWENfR1BJT19NWDFfTVgyX0gKLSNkZWZpbmUgX01YQ19HUElPX01YMV9NWDJfSAotCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotLyoKLSAqICBHUElPIE1vZHVsZSBhbmQgSS9PIE11bHRpcGxleGVyCi0gKiAgeCA9IDAuLjMgZm9yIHJlZ19BLCByZWdfQiwgcmVnX0MsIHJlZ19ECi0gKi8KLSNkZWZpbmUgVkFfR1BJT19CQVNFCUlPX0FERFJFU1MoR1BJT19CQVNFX0FERFIpCi0jZGVmaW5lIE1YQ19ERElSKHgpICAgICgweDAwICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX09DUjEoeCkgICAgKDB4MDQgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfT0NSMih4KSAgICAoMHgwOCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19JQ09ORkExKHgpICgweDBjICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0lDT05GQTIoeCkgKDB4MTAgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfSUNPTkZCMSh4KSAoMHgxNCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19JQ09ORkIyKHgpICgweDE4ICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0RSKHgpICAgICAgKDB4MWMgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfR0lVUyh4KSAgICAoMHgyMCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19TU1IoeCkgICAgICgweDI0ICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0lDUjEoeCkgICAgKDB4MjggKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfSUNSMih4KSAgICAoMHgyYyArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19JTVIoeCkgICAgICgweDMwICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0lTUih4KSAgICAgKDB4MzQgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfR1BSKHgpICAgICAoMHgzOCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19TV1IoeCkgICAgICgweDNjICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX1BVRU4oeCkgICAgKDB4NDAgKyAoKHgpIDw8IDgpKQotCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgxCi0jIGRlZmluZSBHUElPX1BPUlRfTUFYICAzCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDIKLSMgZGVmaW5lIEdQSU9fUE9SVF9NQVggIDUKLSNlbmRpZgotCi0jaWZuZGVmIEdQSU9fUE9SVF9NQVgKLSMgZXJyb3IgIkdQSU8gY29uZmlnIHBvcnQgY291bnQgdW5rbm93biEiCi0jZW5kaWYKLQotI2RlZmluZSBHUElPX1BJTl9NQVNLIDB4MWYKLQotI2RlZmluZSBHUElPX1BPUlRfU0hJRlQgNQotI2RlZmluZSBHUElPX1BPUlRfTUFTSyAoMHg3IDw8IEdQSU9fUE9SVF9TSElGVCkKLQotI2RlZmluZSBHUElPX1BPUlRBICgwIDw8IEdQSU9fUE9SVF9TSElGVCkKLSNkZWZpbmUgR1BJT19QT1JUQiAoMSA8PCBHUElPX1BPUlRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fUE9SVEMgKDIgPDwgR1BJT19QT1JUX1NISUZUKQotI2RlZmluZSBHUElPX1BPUlREICgzIDw8IEdQSU9fUE9SVF9TSElGVCkKLSNkZWZpbmUgR1BJT19QT1JURSAoNCA8PCBHUElPX1BPUlRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fUE9SVEYgKDUgPDwgR1BJT19QT1JUX1NISUZUKQotCi0jZGVmaW5lIEdQSU9fT1VUICAgKDEgPDwgOCkKLSNkZWZpbmUgR1BJT19JTiAgICAoMCA8PCA4KQotI2RlZmluZSBHUElPX1BVRU4gICgxIDw8IDkpCi0KLSNkZWZpbmUgR1BJT19QRiAgICAoMSA8PCAxMCkKLSNkZWZpbmUgR1BJT19BRiAgICAoMSA8PCAxMSkKLQotI2RlZmluZSBHUElPX09DUl9TSElGVCAxMgotI2RlZmluZSBHUElPX09DUl9NQVNLICgzIDw8IEdQSU9fT0NSX1NISUZUKQotI2RlZmluZSBHUElPX0FJTiAgICgwIDw8IEdQSU9fT0NSX1NISUZUKQotI2RlZmluZSBHUElPX0JJTiAgICgxIDw8IEdQSU9fT0NSX1NISUZUKQotI2RlZmluZSBHUElPX0NJTiAgICgyIDw8IEdQSU9fT0NSX1NISUZUKQotI2RlZmluZSBHUElPX0dQSU8gICgzIDw8IEdQSU9fT0NSX1NISUZUKQotCi0jZGVmaW5lIEdQSU9fQU9VVF9TSElGVCAxNAotI2RlZmluZSBHUElPX0FPVVRfTUFTSyAoMyA8PCBHUElPX0FPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQU9VVCAgICAgKDAgPDwgR1BJT19BT1VUX1NISUZUKQotI2RlZmluZSBHUElPX0FPVVRfSVNSICgxIDw8IEdQSU9fQU9VVF9TSElGVCkKLSNkZWZpbmUgR1BJT19BT1VUXzAgICAoMiA8PCBHUElPX0FPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQU9VVF8xICAgKDMgPDwgR1BJT19BT1VUX1NISUZUKQotCi0jZGVmaW5lIEdQSU9fQk9VVF9TSElGVCAxNgotI2RlZmluZSBHUElPX0JPVVRfTUFTSyAoMyA8PCBHUElPX0JPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQk9VVCAgICAgICgwIDw8IEdQSU9fQk9VVF9TSElGVCkKLSNkZWZpbmUgR1BJT19CT1VUX0lTUiAgKDEgPDwgR1BJT19CT1VUX1NISUZUKQotI2RlZmluZSBHUElPX0JPVVRfMCAgICAoMiA8PCBHUElPX0JPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQk9VVF8xICAgICgzIDw8IEdQSU9fQk9VVF9TSElGVCkKLQotZXh0ZXJuIHZvaWQgbXhjX2dwaW9fbW9kZShpbnQgZ3Bpb19tb2RlKTsKLWV4dGVybiBpbnQgbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhjb25zdCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKLQkJCQkJY29uc3QgY2hhciAqbGFiZWwpOwotZXh0ZXJuIHZvaWQgbXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKGNvbnN0IGludCAqcGluX2xpc3QsIGludCBjb3VudCk7Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qIGFzc2lnbmVtZW50cyBmb3IgR1BJTyBhbHRlcm5hdGUvcHJpbWFyeSBmdW5jdGlvbnMgKi8KLQotLyogRklYTUU6IFRoaXMgbGlzdCBpcyBub3QgY29tcGxldGVkLiBUaGUgY29ycmVjdCBkaXJlY3Rpb25zIGFyZQotICogbWlzc2luZyBvbiBzb21lIChtYW55KSBwaW5zCi0gKi8KLSNpZmRlZiBDT05GSUdfQVJDSF9NWDEKLSNkZWZpbmUgUEEwX0FJTl9TUEkyX0NMSyAgICAgKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IDApCi0jZGVmaW5lIFBBMF9BRl9FVE1UUkFDRVNZTkMgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDApCi0jZGVmaW5lIFBBMV9BT1VUX1NQSTJfUlhEICAgIChHUElPX1BPUlRBIHwgR1BJT19JTiB8IDEpCi0jZGVmaW5lIFBBMV9QRl9USU4gICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEpCi0jZGVmaW5lIFBBMl9QRl9QV00wICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMikKLSNkZWZpbmUgUEEzX1BGX0NTSV9NQ0xLICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMykKLSNkZWZpbmUgUEE0X1BGX0NTSV9EMCAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNCkKLSNkZWZpbmUgUEE1X1BGX0NTSV9EMSAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNSkKLSNkZWZpbmUgUEE2X1BGX0NTSV9EMiAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNikKLSNkZWZpbmUgUEE3X1BGX0NTSV9EMyAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNykKLSNkZWZpbmUgUEE4X1BGX0NTSV9ENCAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgOCkKLSNkZWZpbmUgUEE5X1BGX0NTSV9ENSAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgOSkKLSNkZWZpbmUgUEExMF9QRl9DU0lfRDYgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTApCi0jZGVmaW5lIFBBMTFfUEZfQ1NJX0Q3ICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDExKQotI2RlZmluZSBQQTEyX1BGX0NTSV9WU1lOQyAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMikKLSNkZWZpbmUgUEExM19QRl9DU0lfSFNZTkMgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTMpCi0jZGVmaW5lIFBBMTRfUEZfQ1NJX1BJWENMSyAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDE0KQotI2RlZmluZSBQQTE1X1BGX0kyQ19TREEgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE1KQotI2RlZmluZSBQQTE2X1BGX0kyQ19TQ0wgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE2KQotI2RlZmluZSBQQTE3X0FGX0VUTVRSQUNFUEtUNCAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxNykKLSNkZWZpbmUgUEExN19BSU5fU1BJMl9TUyAgICAgKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IDE3KQotI2RlZmluZSBQQTE4X0FGX0VUTVRSQUNFUEtUNSAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxOCkKLSNkZWZpbmUgUEExOV9BRl9FVE1UUkFDRVBLVDYgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTkpCi0jZGVmaW5lIFBBMjBfQUZfRVRNVFJBQ0VQS1Q3IChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDIwKQotI2RlZmluZSBQQTIxX1BGX0EwICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyMSkKLSNkZWZpbmUgUEEyMl9QRl9DUzQgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjIpCi0jZGVmaW5lIFBBMjNfUEZfQ1M1ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDIzKQotI2RlZmluZSBQQTI0X1BGX0ExNiAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNCkKLSNkZWZpbmUgUEEyNF9BRl9FVE1UUkFDRVBLVDAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjQpCi0jZGVmaW5lIFBBMjVfUEZfQTE3ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI1KQotI2RlZmluZSBQQTI1X0FGX0VUTVRSQUNFUEtUMSAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyNSkKLSNkZWZpbmUgUEEyNl9QRl9BMTggICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjYpCi0jZGVmaW5lIFBBMjZfQUZfRVRNVFJBQ0VQS1QyIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI2KQotI2RlZmluZSBQQTI3X1BGX0ExOSAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNykKLSNkZWZpbmUgUEEyN19BRl9FVE1UUkFDRVBLVDMgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjcpCi0jZGVmaW5lIFBBMjhfUEZfQTIwICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI4KQotI2RlZmluZSBQQTI4X0FGX0VUTVBJUEVTVEFUMCAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyOCkKLSNkZWZpbmUgUEEyOV9QRl9BMjEgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjkpCi0jZGVmaW5lIFBBMjlfQUZfRVRNUElQRVNUQVQxIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI5KQotI2RlZmluZSBQQTMwX1BGX0EyMiAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzMCkKLSNkZWZpbmUgUEEzMF9BRl9FVE1QSVBFU1RBVDIgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzApCi0jZGVmaW5lIFBBMzFfUEZfQTIzICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDMxKQotI2RlZmluZSBQQTMxX0FGX0VUTVRSQUNFQ0xLICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAzMSkKLSNkZWZpbmUgUEI4X1BGX1NEX0RBVDAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOIHwgOCkKLSNkZWZpbmUgUEI4X0FGX01TX1BJTyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgOCkKLSNkZWZpbmUgUEI5X1BGX1NEX0RBVDEgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19QVUVOICB8IDkpCi0jZGVmaW5lIFBCOV9BRl9NU19QSTEgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDkpCi0jZGVmaW5lIFBCMTBfUEZfU0RfREFUMiAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiAgfCAxMCkKLSNkZWZpbmUgUEIxMF9BRl9NU19TQ0xLSSAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTApCi0jZGVmaW5lIFBCMTFfUEZfU0RfREFUMyAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDExKQotI2RlZmluZSBQQjExX0FGX01TX1NESU8gICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxMSkKLSNkZWZpbmUgUEIxMl9QRl9TRF9DTEsgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMTIpCi0jZGVmaW5lIFBCMTJfQUZfTVNfU0NMSzAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEyKQotI2RlZmluZSBQQjEzX1BGX1NEX0NNRCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX1BVRU4gfCAxMykKLSNkZWZpbmUgUEIxM19BRl9NU19CUyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTMpCi0jZGVmaW5lIFBCMTRfQUZfU1NJX1JYRlMgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE0KQotI2RlZmluZSBQQjE1X0FGX1NTSV9SWENMSyAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxNSkKLSNkZWZpbmUgUEIxNl9BRl9TU0lfUlhEQVQgICAgKEdQSU9fUE9SVEIgfCBHUElPX0lOIHwgR1BJT19BRiB8IDE2KQotI2RlZmluZSBQQjE3X0FGX1NTSV9UWERBVCAgICAoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDE3KQotI2RlZmluZSBQQjE4X0FGX1NTSV9UWEZTICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxOCkKLSNkZWZpbmUgUEIxOV9BRl9TU0lfVFhDTEsgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTkpCi0jZGVmaW5lIFBCMjBfUEZfVVNCRF9BRkUgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIwKQotI2RlZmluZSBQQjIxX1BGX1VTQkRfT0UgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMSkKLSNkZWZpbmUgUEIyMl9QRlVTQkRfUkNWICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjIpCi0jZGVmaW5lIFBCMjNfUEZfVVNCRF9TVVNQTkQgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIzKQotI2RlZmluZSBQQjI0X1BGX1VTQkRfVlAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNCkKLSNkZWZpbmUgUEIyNV9QRl9VU0JEX1ZNICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjUpCi0jZGVmaW5lIFBCMjZfUEZfVVNCRF9WUE8gICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI2KQotI2RlZmluZSBQQjI3X1BGX1VTQkRfVk1PICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNykKLSNkZWZpbmUgUEIyOF9QRl9VQVJUMl9DVFMgICAgKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyOCkKLSNkZWZpbmUgUEIyOV9QRl9VQVJUMl9SVFMgICAgKEdQSU9fUE9SVEIgfCBHUElPX0lOIHwgR1BJT19QRiB8IDI5KQotI2RlZmluZSBQQjMwX1BGX1VBUlQyX1RYRCAgICAoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDMwKQotI2RlZmluZSBQQjMxX1BGX1VBUlQyX1JYRCAgICAoR1BJT19QT1JUQiB8IEdQSU9fSU4gfCBHUElPX1BGIHwgMzEpCi0jZGVmaW5lIFBDM19QRl9TU0lfUlhGUyAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDMpCi0jZGVmaW5lIFBDNF9QRl9TU0lfUlhDTEsgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDQpCi0jZGVmaW5lIFBDNV9QRl9TU0lfUlhEQVQgICAgIChHUElPX1BPUlRDIHwgR1BJT19JTiB8IEdQSU9fUEYgfCA1KQotI2RlZmluZSBQQzZfUEZfU1NJX1RYREFUICAgICAoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDYpCi0jZGVmaW5lIFBDN19QRl9TU0lfVFhGUyAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDcpCi0jZGVmaW5lIFBDOF9QRl9TU0lfVFhDTEsgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDgpCi0jZGVmaW5lIFBDOV9QRl9VQVJUMV9DVFMgICAgIChHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgOSkKLSNkZWZpbmUgUEMxMF9QRl9VQVJUMV9SVFMgICAgKEdQSU9fUE9SVEMgfCBHUElPX0lOIHwgR1BJT19QRiB8IDEwKQotI2RlZmluZSBQQzExX1BGX1VBUlQxX1RYRCAgICAoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDExKQotI2RlZmluZSBQQzEyX1BGX1VBUlQxX1JYRCAgICAoR1BJT19QT1JUQyB8IEdQSU9fSU4gfCBHUElPX1BGIHwgMTIpCi0jZGVmaW5lIFBDMTNfUEZfU1BJMV9TUElfUkRZIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDEzKQotI2RlZmluZSBQQzE0X1BGX1NQSTFfU0NMSyAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNCkKLSNkZWZpbmUgUEMxNV9QRl9TUEkxX1NTICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTUpCi0jZGVmaW5lIFBDMTZfUEZfU1BJMV9NSVNPICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE2KQotI2RlZmluZSBQQzE3X1BGX1NQSTFfTU9TSSAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNykKLSNkZWZpbmUgUEMyNF9CSU5fVUFSVDNfUkkgICAgKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fQklOIHwgMjQpCi0jZGVmaW5lIFBDMjVfQklOX1VBUlQzX0RTUiAgIChHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX0JJTiB8IDI1KQotI2RlZmluZSBQQzI2X0FPVVRfVUFSVDNfRFRSICAoR1BJT19QT1JUQyB8IEdQSU9fSU4gfCAyNikKLSNkZWZpbmUgUEMyN19CSU5fVUFSVDNfRENEICAgKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fQklOIHwgMjcpCi0jZGVmaW5lIFBDMjhfQklOX1VBUlQzX0NUUyAgIChHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX0JJTiB8IDI4KQotI2RlZmluZSBQQzI5X0FPVVRfVUFSVDNfUlRTICAoR1BJT19QT1JUQyB8IEdQSU9fSU4gfCAyOSkKLSNkZWZpbmUgUEMzMF9CSU5fVUFSVDNfVFggICAgKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IDMwKQotI2RlZmluZSBQQzMxX0FPVVRfVUFSVDNfUlggICAoR1BJT19QT1JUQyB8IEdQSU9fSU4gfCAzMSkKLSNkZWZpbmUgUEQ2X1BGX0xTQ0xLICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA2KQotI2RlZmluZSBQRDdfUEZfUkVWICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA3KQotI2RlZmluZSBQRDdfQUZfVUFSVDJfRFRSICAgICAoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FGIHwgNykKLSNkZWZpbmUgUEQ3X0FJTl9TUEkyX1NDTEsgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IDcpCi0jZGVmaW5lIFBEOF9QRl9DTFMgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDgpCi0jZGVmaW5lIFBEOF9BRl9VQVJUMl9EQ0QgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgOCkKLSNkZWZpbmUgUEQ4X0FJTl9TUEkyX1NTICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IDgpCi0jZGVmaW5lIFBEOV9QRl9QUyAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDkpCi0jZGVmaW5lIFBEOV9BRl9VQVJUMl9SSSAgICAgIChHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgOSkKLSNkZWZpbmUgUEQ5X0FPVVRfU1BJMl9SWEQgICAgKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgOSkKLSNkZWZpbmUgUEQxMF9QRl9TUExfU1BSICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMCkKLSNkZWZpbmUgUEQxMF9BRl9VQVJUMl9EU1IgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAxMCkKLSNkZWZpbmUgUEQxMF9BSU5fU1BJMl9UWEQgICAgKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IDEwKQotI2RlZmluZSBQRDExX1BGX0NPTlRSQVNUICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDExKQotI2RlZmluZSBQRDEyX1BGX0FDRF9PRSAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEyKQotI2RlZmluZSBQRDEzX1BGX0xQX0hTWU5DICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEzKQotI2RlZmluZSBQRDE0X1BGX0ZMTV9WU1lOQyAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE0KQotI2RlZmluZSBQRDE1X1BGX0xEMCAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE1KQotI2RlZmluZSBQRDE2X1BGX0xEMSAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE2KQotI2RlZmluZSBQRDE3X1BGX0xEMiAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE3KQotI2RlZmluZSBQRDE4X1BGX0xEMyAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE4KQotI2RlZmluZSBQRDE5X1BGX0xENCAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE5KQotI2RlZmluZSBQRDIwX1BGX0xENSAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIwKQotI2RlZmluZSBQRDIxX1BGX0xENiAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIxKQotI2RlZmluZSBQRDIyX1BGX0xENyAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIyKQotI2RlZmluZSBQRDIzX1BGX0xEOCAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIzKQotI2RlZmluZSBQRDI0X1BGX0xEOSAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI0KQotI2RlZmluZSBQRDI1X1BGX0xEMTAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI1KQotI2RlZmluZSBQRDI2X1BGX0xEMTEgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI2KQotI2RlZmluZSBQRDI3X1BGX0xEMTIgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI3KQotI2RlZmluZSBQRDI4X1BGX0xEMTMgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI4KQotI2RlZmluZSBQRDI5X1BGX0xEMTQgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI5KQotI2RlZmluZSBQRDMwX1BGX0xEMTUgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDMwKQotI2RlZmluZSBQRDMxX1BGX1RNUjJPVVQgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAzMSkKLSNkZWZpbmUgUEQzMV9CSU5fU1BJMl9UWEQgICAgKEdQSU9fUE9SVEQgfCBHUElPX0JJTiB8IDMxKQotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9NWDIKLSNkZWZpbmUgUEEwX1BGX1VTQkgyX0NMSwkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAwKQotI2RlZmluZSBQQTFfUEZfVVNCSDJfRElSCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEpCi0jZGVmaW5lIFBBMl9QRl9VU0JIMl9EQVRBNwkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyKQotI2RlZmluZSBQQTNfUEZfVVNCSDJfTlhUCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDMpCi0jZGVmaW5lIFBBNF9QRl9VU0JIMl9TVFAJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNCkKLSNkZWZpbmUgUEE1X1BGX0xTQ0xLCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDUpCi0jZGVmaW5lIFBBNl9QRl9MRDAJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgNikKLSNkZWZpbmUgUEE3X1BGX0xEMQkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA3KQotI2RlZmluZSBQQThfUEZfTEQyCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDgpCi0jZGVmaW5lIFBBOV9QRl9MRDMJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgOSkKLSNkZWZpbmUgUEExMF9QRl9MRDQJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTApCi0jZGVmaW5lIFBBMTFfUEZfTEQ1CQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDExKQotI2RlZmluZSBQQTEyX1BGX0xENgkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMikKLSNkZWZpbmUgUEExM19QRl9MRDcJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTMpCi0jZGVmaW5lIFBBMTRfUEZfTEQ4CQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE0KQotI2RlZmluZSBQQTE1X1BGX0xEOQkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNSkKLSNkZWZpbmUgUEExNl9QRl9MRDEwCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE2KQotI2RlZmluZSBQQTE3X1BGX0xEMTEJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTcpCi0jZGVmaW5lIFBBMThfUEZfTEQxMgkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxOCkKLSNkZWZpbmUgUEExOV9QRl9MRDEzCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE5KQotI2RlZmluZSBQQTIwX1BGX0xEMTQJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjApCi0jZGVmaW5lIFBBMjFfUEZfTEQxNQkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMSkKLSNkZWZpbmUgUEEyMl9QRl9MRDE2CQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIyKQotI2RlZmluZSBQQTIzX1BGX0xEMTcJCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjMpCi0jZGVmaW5lIFBBMjRfUEZfUkVWCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI0KQotI2RlZmluZSBQQTI1X1BGX0NMUwkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNSkKLSNkZWZpbmUgUEEyNl9QRl9QUwkJKEdQSU9fUE9SVEEgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyNikKLSNkZWZpbmUgUEEyN19QRl9TUExfU1BSCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI3KQotI2RlZmluZSBQQTI4X1BGX0hTWU5DCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI4KQotI2RlZmluZSBQQTI5X1BGX1ZTWU5DCQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDI5KQotI2RlZmluZSBQQTMwX1BGX0NPTlRSQVNUCShHUElPX1BPUlRBIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMzApCi0jZGVmaW5lIFBBMzFfUEZfT0VfQUNECQkoR1BJT19QT1JUQSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDMxKQotI2RlZmluZSBQQjRfUEZfU0QyX0QwCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAgNCkKLSNkZWZpbmUgUEI1X1BGX1NEMl9EMQkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgIDUpCi0jZGVmaW5lIFBCNl9QRl9TRDJfRDIJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8ICA2KQotI2RlZmluZSBQQjdfUEZfU0QyX0QzCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAgNykKLSNkZWZpbmUgUEI4X1BGX1NEMl9DTUQJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8ICA4KQotI2RlZmluZSBQQjlfUEZfU0QyX0NMSwkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgIDkpCi0jZGVmaW5lIFBCMTBfUEZfQ1NJX0QwCQkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEwKQotI2RlZmluZSBQQjEwX0FGX1VBUlQ2X1RYRAkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDEwKQotI2RlZmluZSBQQjExX1BGX0NTSV9EMQkJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMSkKLSNkZWZpbmUgUEIxMV9BRl9VQVJUNl9SWEQJKEdQSU9fUE9SVEIgfCBHUElPX0lOICB8IEdQSU9fQUYgfCAxMSkKLSNkZWZpbmUgUEIxMl9QRl9DU0lfRDIJCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTIpCi0jZGVmaW5lIFBCMTJfQUZfVUFSVDZfQ1RTCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMTIpCi0jZGVmaW5lIFBCMTNfUEZfQ1NJX0QzCQkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDEzKQotI2RlZmluZSBQQjEzX0FGX1VBUlQ2X1JUUwkoR1BJT19QT1JUQiB8IEdQSU9fSU4gIHwgR1BJT19BRiB8IDEzKQotI2RlZmluZSBQQjE0X1BGX0NTSV9ENAkJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNCkKLSNkZWZpbmUgUEIxNV9QRl9DU0lfTUNMSwkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE1KQotI2RlZmluZSBQQjE2X1BGX0NTSV9QSVhDTEsJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxNikKLSNkZWZpbmUgUEIxN19QRl9DU0lfRDUJCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTcpCi0jZGVmaW5lIFBCMThfUEZfQ1NJX0Q2CQkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE4KQotI2RlZmluZSBQQjE4X0FGX1VBUlQ1X1RYRAkoR1BJT19QT1JUQiB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDE4KQotI2RlZmluZSBQQjE5X1BGX0NTSV9ENwkJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxOSkKLSNkZWZpbmUgUEIxOV9BRl9VQVJUNV9SWEQJKEdQSU9fUE9SVEIgfCBHUElPX0lOICB8IEdQSU9fQUYgfCAxOSkKLSNkZWZpbmUgUEIyMF9QRl9DU0lfVlNZTkMJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMCkKLSNkZWZpbmUgUEIyMF9BRl9VQVJUNV9DVFMJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAyMCkKLSNkZWZpbmUgUEIyMV9QRl9DU0lfSFNZTkMJKEdQSU9fUE9SVEIgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAyMSkKLSNkZWZpbmUgUEIyMV9BRl9VQVJUNV9SVFMJKEdQSU9fUE9SVEIgfCBHUElPX0lOICB8IEdQSU9fQUYgfCAyMSkKLSNkZWZpbmUgUEIyMl9QRl9VU0JIMV9TVVNQCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIyKQotI2RlZmluZSBQQjIzX1BGX1VTQl9QV1IJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIzKQotI2RlZmluZSBQQjI0X1BGX1VTQl9PQ19CCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI0KQotI2RlZmluZSBQQjI1X1BGX1VTQkgxX1JDVgkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNSkKLSNkZWZpbmUgUEIyNl9QRl9VU0JIMV9GUwkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNikKLSNkZWZpbmUgUEIyN19QRl9VU0JIMV9PRV9CCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI3KQotI2RlZmluZSBQQjI4X1BGX1VTQkgxX1RYRE0JKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjgpCi0jZGVmaW5lIFBCMjlfUEZfVVNCSDFfVFhEUAkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyOSkKLSNkZWZpbmUgUEIzMF9QRl9VU0JIMV9SWERNCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDMwKQotI2RlZmluZSBQQjMxX1BGX1VTQkgxX1JYRFAJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMzEpCi0jZGVmaW5lIFBCMjZfQUZfVUFSVDRfUlRTCShHUElPX1BPUlRCIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMjYpCi0jZGVmaW5lIFBCMjhfQUZfVUFSVDRfVFhECShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMjgpCi0jZGVmaW5lIFBCMjlfQUZfVUFSVDRfQ1RTCShHUElPX1BPUlRCIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMjkpCi0jZGVmaW5lIFBCMzFfQUZfVUFSVDRfUlhECShHUElPX1BPUlRCIHwgR1BJT19JTiAgfCBHUElPX0FGIHwgMzEpCi0jZGVmaW5lIFBDNV9QRl9JMkMyX1NEQQkJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCA1KQotI2RlZmluZSBQQzZfUEZfSTJDMl9TQ0wJCShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgNikKLSNkZWZpbmUgUEM3X1BGX1VTQk9UR19EQVRBNQkoR1BJT19QT1JUQyB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDcpCi0jZGVmaW5lIFBDOF9QRl9VU0JPVEdfREFUQTYJKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCA4KQotI2RlZmluZSBQQzlfUEZfVVNCT1RHX0RBVEEwCShHUElPX1BPUlRDIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgOSkKLSNkZWZpbmUgUEMxMF9QRl9VU0JPVEdfREFUQTIJKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMCkKLSNkZWZpbmUgUEMxMV9QRl9VU0JPVEdfREFUQTEJKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMSkKLSNkZWZpbmUgUEMxMl9QRl9VU0JPVEdfREFUQTQJKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMikKLSNkZWZpbmUgUEMxM19QRl9VU0JPVEdfREFUQTMJKEdQSU9fUE9SVEMgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxMykKLSNkZWZpbmUgUEMxNl9QRl9TU0k0X0ZTCQkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDE2KQotI2RlZmluZSBQQzE3X1BGX1NTSTRfUlhECShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMTcpCi0jZGVmaW5lIFBDMThfUEZfU1NJNF9UWEQJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAxOCkKLSNkZWZpbmUgUEMxOV9QRl9TU0k0X0NMSwkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDE5KQotI2RlZmluZSBQQzIwX1BGX1NTSTFfRlMJCShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMjApCi0jZGVmaW5lIFBDMjFfUEZfU1NJMV9SWEQJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAyMSkKLSNkZWZpbmUgUEMyMl9QRl9TU0kxX1RYRAkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDIyKQotI2RlZmluZSBQQzIzX1BGX1NTSTFfQ0xLCShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMjMpCi0jZGVmaW5lIFBDMjRfUEZfU1NJMl9GUwkJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAyNCkKLSNkZWZpbmUgUEMyNV9QRl9TU0kyX1JYRAkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDI1KQotI2RlZmluZSBQQzI2X1BGX1NTSTJfVFhECShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMjYpCi0jZGVmaW5lIFBDMjdfUEZfU1NJMl9DTEsJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAyNykKLSNkZWZpbmUgUEMyOF9QRl9TU0kzX0ZTCQkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDI4KQotI2RlZmluZSBQQzI5X1BGX1NTSTNfUlhECShHUElPX1BPUlRDIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMjkpCi0jZGVmaW5lIFBDMzBfUEZfU1NJM19UWEQJKEdQSU9fUE9SVEMgfCBHUElPX0lOICB8IEdQSU9fUEYgfCAzMCkKLSNkZWZpbmUgUEMzMV9QRl9TU0kzX0NMSwkoR1BJT19QT1JUQyB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDMxKQotI2RlZmluZSBQRDBfQUlOX0ZFQ19UWEQwCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FJTiB8IDApCi0jZGVmaW5lIFBEMV9BSU5fRkVDX1RYRDEJKEdQSU9fUE9SVEQgfCBHUElPX09VVCB8IEdQSU9fQUlOIHwgMSkKLSNkZWZpbmUgUEQyX0FJTl9GRUNfVFhEMgkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BSU4gfCAyKQotI2RlZmluZSBQRDNfQUlOX0ZFQ19UWEQzCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FJTiB8IDMpCi0jZGVmaW5lIFBENF9BT1VUX0ZFQ19SWF9FUgkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FPVVQgfCA0KQotI2RlZmluZSBQRDVfQU9VVF9GRUNfUlhEMQkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FPVVQgfCA1KQotI2RlZmluZSBQRDZfQU9VVF9GRUNfUlhEMgkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FPVVQgfCA2KQotI2RlZmluZSBQRDdfQU9VVF9GRUNfUlhEMwkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FPVVQgfCA3KQotI2RlZmluZSBQRDhfQUZfRkVDX01ESU8JCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQUYgfCA4KQotI2RlZmluZSBQRDlfQUlOX0ZFQ19NREMJCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX0FJTiB8IDkpCi0jZGVmaW5lIFBEMTBfQU9VVF9GRUNfQ1JTCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDEwKQotI2RlZmluZSBQRDExX0FPVVRfRkVDX1RYX0NMSwkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FPVVQgfCAxMSkKLSNkZWZpbmUgUEQxMl9BT1VUX0ZFQ19SWEQwCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDEyKQotI2RlZmluZSBQRDEzX0FPVVRfRkVDX1JYX0RWCShHUElPX1BPUlREIHwgR1BJT19JTiB8IEdQSU9fQU9VVCB8IDEzKQotI2RlZmluZSBQRDE0X0FPVVRfRkVDX0NMUgkoR1BJT19QT1JURCB8IEdQSU9fSU4gfCBHUElPX0FPVVQgfCAxNCkKLSNkZWZpbmUgUEQxNV9BT1VUX0ZFQ19DT0wJKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19BT1VUIHwgMTUpCi0jZGVmaW5lIFBEMTZfQUlOX0ZFQ19UWF9FUgkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19BSU4gfCAxNikKLSNkZWZpbmUgUEQxN19QRl9JMkNfREFUQQkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE3KQotI2RlZmluZSBQRDE4X1BGX0kyQ19DTEsJCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTgpCi0jZGVmaW5lIFBEMTlfQUZfVVNCSDJfREFUQTQJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTkpCi0jZGVmaW5lIFBEMjBfQUZfVVNCSDJfREFUQTMJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjApCi0jZGVmaW5lIFBEMjFfQUZfVVNCSDJfREFUQTYJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjEpCi0jZGVmaW5lIFBEMjJfQUZfVVNCSDJfREFUQTAJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjIpCi0jZGVmaW5lIFBEMjNfQUZfVVNCSDJfREFUQTIJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjMpCi0jZGVmaW5lIFBEMjRfQUZfVVNCSDJfREFUQTEJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjQpCi0jZGVmaW5lIFBEMjVfUEZfQ1NQSTFfUkRZCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGICB8IDI1KQotI2RlZmluZSBQRDI2X1BGX0NTUEkxX1NTMgkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiAgfCAyNikKLSNkZWZpbmUgUEQyNl9BRl9VU0JIMl9EQVRBNSAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjYpCi0jZGVmaW5lIFBEMjdfUEZfQ1NQSTFfU1MxCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGICB8IDI3KQotI2RlZmluZSBQRDI4X1BGX0NTUEkxX1NTMAkoR1BJT19QT1JURCB8IEdQSU9fT1VUIHwgR1BJT19QRiAgfCAyOCkKLSNkZWZpbmUgUEQyOV9QRl9DU1BJMV9TQ0xLCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGICB8IDI5KQotI2RlZmluZSBQRDMwX1BGX0NTUEkxX01JU08JKEdQSU9fUE9SVEQgfCBHUElPX0lOIHwgR1BJT19QRiAgfCAzMCkKLSNkZWZpbmUgUEQzMV9QRl9DU1BJMV9NT1NJCShHUElPX1BPUlREIHwgR1BJT19PVVQgfCBHUElPX1BGICB8IDMxKQotI2RlZmluZSBQRjIzX0FJTl9GRUNfVFhfRU4JKEdQSU9fUE9SVEYgfCBHUElPX09VVCB8IEdQSU9fQUlOIHwgMjMpCi0jZGVmaW5lIFBFMF9QRl9VU0JPVEdfTlhUCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMCkKLSNkZWZpbmUgUEUxX1BGX1VTQk9UR19TVFAJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAxKQotI2RlZmluZSBQRTJfUEZfVVNCT1RHX0RJUgkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDIpCi0jZGVmaW5lIFBFM19QRl9VQVJUMl9DVFMJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fUEYgfCAzKQotI2RlZmluZSBQRTRfUEZfVUFSVDJfUlRTCShHUElPX1BPUlRFIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgNCkKLSNkZWZpbmUgUEU2X1BGX1VBUlQyX1RYRAkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDYpCi0jZGVmaW5lIFBFN19QRl9VQVJUMl9SWEQJKEdQSU9fUE9SVEUgfCBHUElPX0lOICB8IEdQSU9fUEYgfCA3KQotI2RlZmluZSBQRThfUEZfVUFSVDNfVFhECShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgOCkKLSNkZWZpbmUgUEU5X1BGX1VBUlQzX1JYRAkoR1BJT19QT1JURSB8IEdQSU9fSU4gIHwgR1BJT19QRiB8IDkpCi0jZGVmaW5lIFBFMTBfUEZfVUFSVDNfQ1RTCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTApCi0jZGVmaW5lIFBFMTFfUEZfVUFSVDNfUlRTCShHUElPX1BPUlRFIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBFMTJfUEZfVUFSVDFfVFhECShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTIpCi0jZGVmaW5lIFBFMTNfUEZfVUFSVDFfUlhECShHUElPX1BPUlRFIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMTMpCi0jZGVmaW5lIFBFMTRfUEZfVUFSVDFfQ1RTCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMTQpCi0jZGVmaW5lIFBFMTVfUEZfVUFSVDFfUlRTCShHUElPX1BPUlRFIHwgR1BJT19JTiAgfCBHUElPX1BGIHwgMTUpCi0jZGVmaW5lIFBFMTZfQUZfUlRDSwkJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAxNikKLSNkZWZpbmUgUEUxNl9QRl9SVENLCQkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19QRiB8IDE2KQotI2RlZmluZSBQRTE4X1BGX1NESEMxX0QwCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IDE4KQotI2RlZmluZSBQRTE4X0FGX0NTUEkzX01JU08JKEdQSU9fUE9SVEUgfCBHUElPX0lOICB8IEdQSU9fQUYgfCAxOCkKLSNkZWZpbmUgUEUxOV9QRl9TREhDMV9EMQkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAxOSkKLSNkZWZpbmUgUEUyMF9QRl9TREhDMV9EMgkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMCkKLSNkZWZpbmUgUEUyMV9QRl9TREhDMV9EMwkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMSkKLSNkZWZpbmUgUEUyMV9BRl9DU1BJM19TUwkoR1BJT19QT1JURSB8IEdQSU9fT1VUIHwgR1BJT19BRiB8IDIxKQotI2RlZmluZSBQRTIyX1BGX1NESEMxX0NNRAkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMikKLSNkZWZpbmUgUEUyMl9BRl9DU1BJM19NT1NJCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX0FGIHwgMjIpCi0jZGVmaW5lIFBFMjJfUEZfU0RIQzFfQ0xLCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIzKQotI2RlZmluZSBQRTIzX0FGX0NTUEkzX1NDTEsJKEdQSU9fUE9SVEUgfCBHUElPX09VVCB8IEdQSU9fQUYgfCAyMykKLSNkZWZpbmUgUEUyNF9QRl9VU0JPVEdfQ0xLCShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjQpCi0jZGVmaW5lIFBFMjVfUEZfVVNCT1RHX0RBVEE3CShHUElPX1BPUlRFIHwgR1BJT19PVVQgfCBHUElPX1BGIHwgMjUpCi0jZW5kaWYKLQotLyogZGVjb2RlIGlycSBudW1iZXIgdG8gdXNlIHdpdGggSU1SKHgpLCBJU1IoeCkgYW5kIGZyaWVuZHMgKi8KLSNkZWZpbmUgSVJRX1RPX1JFRyhpcnEpICgoaXJxIC0gTVhDX0lOVEVSTkFMX0lSUVMpID4+IDUpCi0KLSNkZWZpbmUgSVJRX0dQSU9BKHgpICAoTVhDX0dQSU9fSVJRX1NUQVJUICsgeCkKLSNkZWZpbmUgSVJRX0dQSU9CKHgpICAoSVJRX0dQSU9BKDMyKSArIHgpCi0jZGVmaW5lIElSUV9HUElPQyh4KSAgKElSUV9HUElPQigzMikgKyB4KQotI2RlZmluZSBJUlFfR1BJT0QoeCkgIChJUlFfR1BJT0MoMzIpICsgeCkKLSNkZWZpbmUgSVJRX0dQSU9FKHgpICAoSVJRX0dQSU9EKDMyKSArIHgpCi0KLSNlbmRpZiAvKiBfTVhDX0dQSU9fTVgxX01YMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyMzMwNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDEuaApAQCAtMCwwICsxLDE2NiBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorKgorKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKgorKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgX01YQ19JT01VWF9NWDFfSAorI2RlZmluZSBfTVhDX0lPTVVYX01YMV9ICisKKyNpZm5kZWYgR1BJT19QT1JUQQorI2Vycm9yIFBsZWFzZSBpbmNsdWRlIG1hY2gvaW9tdXguaAorI2VuZGlmCisKKy8qIEZJWE1FOiBUaGlzIGxpc3QgaXMgbm90IGNvbXBsZXRlZC4gVGhlIGNvcnJlY3QgZGlyZWN0aW9ucyBhcmUKKyogbWlzc2luZyBvbiBzb21lIChtYW55KSBwaW5zCisqLworCisKKy8qIFByaW1hcnkgR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEEwX0FJTl9TUEkyX0NMSyAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMCkKKyNkZWZpbmUgUEEwX0FGX0VUTVRSQUNFU1lOQyAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMCkKKyNkZWZpbmUgUEExX0FPVVRfU1BJMl9SWEQgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMSkKKyNkZWZpbmUgUEExX1BGX1RJTiAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMSkKKyNkZWZpbmUgUEEyX1BGX1BXTTAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyKQorI2RlZmluZSBQQTNfUEZfQ1NJX01DTEsgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzKQorI2RlZmluZSBQQTRfUEZfQ1NJX0QwICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA0KQorI2RlZmluZSBQQTVfUEZfQ1NJX0QxICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA1KQorI2RlZmluZSBQQTZfUEZfQ1NJX0QyICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA2KQorI2RlZmluZSBQQTdfUEZfQ1NJX0QzICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA3KQorI2RlZmluZSBQQThfUEZfQ1NJX0Q0ICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA4KQorI2RlZmluZSBQQTlfUEZfQ1NJX0Q1ICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA5KQorI2RlZmluZSBQQTEwX1BGX0NTSV9ENiAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMCkKKyNkZWZpbmUgUEExMV9QRl9DU0lfRDcgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTEpCisjZGVmaW5lIFBBMTJfUEZfQ1NJX1ZTWU5DICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEyKQorI2RlZmluZSBQQTEzX1BGX0NTSV9IU1lOQyAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMykKKyNkZWZpbmUgUEExNF9QRl9DU0lfUElYQ0xLICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTQpCisjZGVmaW5lIFBBMTVfUEZfSTJDX1NEQSAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBBMTZfUEZfSTJDX1NDTCAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBBMTdfQUZfRVRNVFJBQ0VQS1Q0ICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE3KQorI2RlZmluZSBQQTE3X0FJTl9TUEkyX1NTICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgUEExOF9BRl9FVE1UUkFDRVBLVDUgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTgpCisjZGVmaW5lIFBBMTlfQUZfRVRNVFJBQ0VQS1Q2ICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE5KQorI2RlZmluZSBQQTIwX0FGX0VUTVRSQUNFUEtUNyAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyMCkKKyNkZWZpbmUgUEEyMV9QRl9BMCAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjEpCisjZGVmaW5lIFBBMjJfUEZfQ1M0ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDIyKQorI2RlZmluZSBQQTIzX1BGX0NTNSAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyMykKKyNkZWZpbmUgUEEyNF9QRl9BMTYgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjQpCisjZGVmaW5lIFBBMjRfQUZfRVRNVFJBQ0VQS1QwICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI0KQorI2RlZmluZSBQQTI1X1BGX0ExNyAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNSkKKyNkZWZpbmUgUEEyNV9BRl9FVE1UUkFDRVBLVDEgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjUpCisjZGVmaW5lIFBBMjZfUEZfQTE4ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI2KQorI2RlZmluZSBQQTI2X0FGX0VUTVRSQUNFUEtUMiAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyNikKKyNkZWZpbmUgUEEyN19QRl9BMTkgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjcpCisjZGVmaW5lIFBBMjdfQUZfRVRNVFJBQ0VQS1QzICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI3KQorI2RlZmluZSBQQTI4X1BGX0EyMCAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyOCkKKyNkZWZpbmUgUEEyOF9BRl9FVE1QSVBFU1RBVDAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjgpCisjZGVmaW5lIFBBMjlfUEZfQTIxICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI5KQorI2RlZmluZSBQQTI5X0FGX0VUTVBJUEVTVEFUMSAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyOSkKKyNkZWZpbmUgUEEzMF9QRl9BMjIgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMzApCisjZGVmaW5lIFBBMzBfQUZfRVRNUElQRVNUQVQyICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDMwKQorI2RlZmluZSBQQTMxX1BGX0EyMyAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzMSkKKyNkZWZpbmUgUEEzMV9BRl9FVE1UUkFDRUNMSyAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzEpCisjZGVmaW5lIFBCOF9QRl9TRF9EQVQwICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDgpCisjZGVmaW5lIFBCOF9BRl9NU19QSU8gICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDgpCisjZGVmaW5lIFBCOV9QRl9TRF9EQVQxICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDkpCisjZGVmaW5lIFBCOV9BRl9NU19QSTEgICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDkpCisjZGVmaW5lIFBCMTBfUEZfU0RfREFUMiAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDEwKQorI2RlZmluZSBQQjEwX0FGX01TX1NDTEtJICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxMCkKKyNkZWZpbmUgUEIxMV9QRl9TRF9EQVQzICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMTEpCisjZGVmaW5lIFBCMTFfQUZfTVNfU0RJTyAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDExKQorI2RlZmluZSBQQjEyX1BGX1NEX0NMSyAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAxMikKKyNkZWZpbmUgUEIxMl9BRl9NU19TQ0xLMCAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTIpCisjZGVmaW5lIFBCMTNfUEZfU0RfQ01EICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDEzKQorI2RlZmluZSBQQjEzX0FGX01TX0JTICAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxMykKKyNkZWZpbmUgUEIxNF9BRl9TU0lfUlhGUyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTQpCisjZGVmaW5lIFBCMTVfQUZfU1NJX1JYQ0xLICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE1KQorI2RlZmluZSBQQjE2X0FGX1NTSV9SWERBVCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMTYpCisjZGVmaW5lIFBCMTdfQUZfU1NJX1RYREFUICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMTcpCisjZGVmaW5lIFBCMThfQUZfU1NJX1RYRlMgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE4KQorI2RlZmluZSBQQjE5X0FGX1NTSV9UWENMSyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxOSkKKyNkZWZpbmUgUEIyMF9QRl9VU0JEX0FGRSAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjApCisjZGVmaW5lIFBCMjFfUEZfVVNCRF9PRSAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIxKQorI2RlZmluZSBQQjIyX1BGX1VTQkRfUkNWICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMikKKyNkZWZpbmUgUEIyM19QRl9VU0JEX1NVU1BORCAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjMpCisjZGVmaW5lIFBCMjRfUEZfVVNCRF9WUCAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI0KQorI2RlZmluZSBQQjI1X1BGX1VTQkRfVk0gICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNSkKKyNkZWZpbmUgUEIyNl9QRl9VU0JEX1ZQTyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjYpCisjZGVmaW5lIFBCMjdfUEZfVVNCRF9WTU8gICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI3KQorI2RlZmluZSBQQjI4X1BGX1VBUlQyX0NUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI4KQorI2RlZmluZSBQQjI5X1BGX1VBUlQyX1JUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjkpCisjZGVmaW5lIFBCMzBfUEZfVUFSVDJfVFhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMzApCisjZGVmaW5lIFBCMzFfUEZfVUFSVDJfUlhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAzMSkKKyNkZWZpbmUgUEMzX1BGX1NTSV9SWEZTICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMykKKyNkZWZpbmUgUEM0X1BGX1NTSV9SWENMSyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgNCkKKyNkZWZpbmUgUEM1X1BGX1NTSV9SWERBVCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDUpCisjZGVmaW5lIFBDNl9QRl9TU0lfVFhEQVQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEM3X1BGX1NTSV9UWEZTICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEM4X1BGX1NTSV9UWENMSyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgOCkKKyNkZWZpbmUgUEM5X1BGX1VBUlQxX0NUUyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQQzEwX1BGX1VBUlQxX1JUUyAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTApCisjZGVmaW5lIFBDMTFfUEZfVUFSVDFfVFhEICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIFBDMTJfUEZfVUFSVDFfUlhEICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxMikKKyNkZWZpbmUgUEMxM19QRl9TUEkxX1NQSV9SRFkgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTMpCisjZGVmaW5lIFBDMTRfUEZfU1BJMV9TQ0xLICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE0KQorI2RlZmluZSBQQzE1X1BGX1NQSTFfU1MgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNSkKKyNkZWZpbmUgUEMxNl9QRl9TUEkxX01JU08gICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTYpCisjZGVmaW5lIFBDMTdfUEZfU1BJMV9NT1NJICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE3KQorI2RlZmluZSBQQzI0X0JJTl9VQVJUM19SSSAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCAyNCkKKyNkZWZpbmUgUEMyNV9CSU5fVUFSVDNfRFNSICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMjUpCisjZGVmaW5lIFBDMjZfQU9VVF9VQVJUM19EVFIgICAgIChHUElPX1BPUlRDIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDI2KQorI2RlZmluZSBQQzI3X0JJTl9VQVJUM19EQ0QgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCAyNykKKyNkZWZpbmUgUEMyOF9CSU5fVUFSVDNfQ1RTICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMjgpCisjZGVmaW5lIFBDMjlfQU9VVF9VQVJUM19SVFMgICAgIChHUElPX1BPUlRDIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDI5KQorI2RlZmluZSBQQzMwX0JJTl9VQVJUM19UWCAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgMzApCisjZGVmaW5lIFBDMzFfQU9VVF9VQVJUM19SWCAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDMxKQorI2RlZmluZSBQRDZfUEZfTFNDTEsgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBEN19QRl9SRVYgICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBEN19BRl9VQVJUMl9EVFIgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IEdQSU9fSU4gfCA3KQorI2RlZmluZSBQRDdfQUlOX1NQSTJfU0NMSyAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgNykKKyNkZWZpbmUgUEQ4X1BGX0NMUyAgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOCkKKyNkZWZpbmUgUEQ4X0FGX1VBUlQyX0RDRCAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQRDhfQUlOX1NQSTJfU1MgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgOCkKKyNkZWZpbmUgUEQ5X1BGX1BTICAgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOSkKKyNkZWZpbmUgUEQ5X0FGX1VBUlQyX1JJICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQRDlfQU9VVF9TUEkyX1JYRCAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA5KQorI2RlZmluZSBQRDEwX1BGX1NQTF9TUFIgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQRDEwX0FGX1VBUlQyX0RTUiAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQRDEwX0FJTl9TUEkyX1RYRCAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMCkKKyNkZWZpbmUgUEQxMV9QRl9DT05UUkFTVCAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMSkKKyNkZWZpbmUgUEQxMl9QRl9BQ0RfT0UgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMikKKyNkZWZpbmUgUEQxM19QRl9MUF9IU1lOQyAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMykKKyNkZWZpbmUgUEQxNF9QRl9GTE1fVlNZTkMgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEQxNV9QRl9MRDAgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgUEQxNl9QRl9MRDEgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEQxN19QRl9MRDIgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgUEQxOF9QRl9MRDMgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOCkKKyNkZWZpbmUgUEQxOV9QRl9MRDQgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOSkKKyNkZWZpbmUgUEQyMF9QRl9MRDUgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMCkKKyNkZWZpbmUgUEQyMV9QRl9MRDYgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMSkKKyNkZWZpbmUgUEQyMl9QRl9MRDcgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMikKKyNkZWZpbmUgUEQyM19QRl9MRDggICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMykKKyNkZWZpbmUgUEQyNF9QRl9MRDkgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNCkKKyNkZWZpbmUgUEQyNV9QRl9MRDEwICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNSkKKyNkZWZpbmUgUEQyNl9QRl9MRDExICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNikKKyNkZWZpbmUgUEQyN19QRl9MRDEyICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNykKKyNkZWZpbmUgUEQyOF9QRl9MRDEzICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOCkKKyNkZWZpbmUgUEQyOV9QRl9MRDE0ICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOSkKKyNkZWZpbmUgUEQzMF9QRl9MRDE1ICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzMCkKKyNkZWZpbmUgUEQzMV9QRl9UTVIyT1VUICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMzEpCisjZGVmaW5lIFBEMzFfQklOX1NQSTJfVFhEICAgICAgIChHUElPX1BPUlREIHwgR1BJT19CSU4gfCAzMSkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDIxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYWFhOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyMS5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgSG9sZ2VyIFNjaHVyaWcgPGhzNDIzM0BtYWlsLm1uLXNvbHV0aW9ucy5kZT4KKyoKKyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorKiBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIF9NWENfSU9NVVhfTVgyMV9ICisjZGVmaW5lIF9NWENfSU9NVVhfTVgyMV9ICisKKyNpZm5kZWYgR1BJT19QT1JUQQorI2Vycm9yIFBsZWFzZSBpbmNsdWRlIG1hY2gvaW9tdXguaAorI2VuZGlmCisKKworLyogUHJpbWFyeSBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQjIyX1BGX1VTQkgxX0JZUCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMikKKyNkZWZpbmUgUEIyNV9QRl9VU0JIMV9PTiAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjUpCisjZGVmaW5lIFBDNV9QRl9VU0JPVEdfU0RBICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDUpCisjZGVmaW5lIFBDNl9QRl9VU0JPVEdfU0NMICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDYpCisjZGVmaW5lIFBDN19QRl9VU0JPVEdfT04gICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBDOF9QRl9VU0JPVEdfRlMgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBDOV9QRl9VU0JPVEdfT0UgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDkpCisjZGVmaW5lIFBDMTBfUEZfVVNCT1RHX1RYRE0gICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDEwKQorI2RlZmluZSBQQzExX1BGX1VTQk9UR19UWERQICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxMSkKKyNkZWZpbmUgUEMxMl9QRl9VU0JPVEdfUlhETSAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTIpCisjZGVmaW5lIFBDMTNfUEZfVVNCT1RHX1JYRFAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDEzKQorI2RlZmluZSBQQzE2X1BGX1NBUF9GUyAgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNikKKyNkZWZpbmUgUEMxN19QRl9TQVBfUlhEICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTcpCisjZGVmaW5lIFBDMThfUEZfU0FQX1RYRCAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE4KQorI2RlZmluZSBQQzE5X1BGX1NBUF9DTEsgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxOSkKKyNkZWZpbmUgUEUwX1BGX1RFU1RfV0IyICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMCkKKyNkZWZpbmUgUEUxX1BGX1RFU1RfV0IxICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMSkKKyNkZWZpbmUgUEUyX1BGX1RFU1RfV0IwICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMikKKyNkZWZpbmUgUEYxX1BGX05GQ0UgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMSkKKyNkZWZpbmUgUEYzX1BGX05GQ0xFICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMykKKyNkZWZpbmUgUEY3X1BGX05GSU8wICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEY4X1BGX05GSU8xICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgOCkKKyNkZWZpbmUgUEY5X1BGX05GSU8yICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgOSkKKyNkZWZpbmUgUEYxMF9QRl9ORklPMyAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTApCisjZGVmaW5lIFBGMTFfUEZfTkZJTzQgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDExKQorI2RlZmluZSBQRjEyX1BGX05GSU81ICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMikKKyNkZWZpbmUgUEYxM19QRl9ORklPNiAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTMpCisjZGVmaW5lIFBGMTRfUEZfTkZJTzcgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE0KQorI2RlZmluZSBQRjE2X1BGX1JFUyAgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxNikKKworLyogQWx0ZXJuYXRlIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBBNV9BRl9CTUlfQ0xLX0NTICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDUpCisjZGVmaW5lIFBBNl9BRl9CTUlfRDAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDYpCisjZGVmaW5lIFBBN19BRl9CTUlfRDEgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDcpCisjZGVmaW5lIFBBOF9BRl9CTUlfRDIgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDgpCisjZGVmaW5lIFBBOV9BRl9CTUlfRDMgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDkpCisjZGVmaW5lIFBBMTBfQUZfQk1JX0Q0ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDEwKQorI2RlZmluZSBQQTExX0FGX0JNSV9ENSAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxMSkKKyNkZWZpbmUgUEExMl9BRl9CTUlfRDYgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTIpCisjZGVmaW5lIFBBMTNfQUZfQk1JX0Q3ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDEzKQorI2RlZmluZSBQQTE0X0FGX0JNSV9EOCAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxNCkKKyNkZWZpbmUgUEExNV9BRl9CTUlfRDkgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTUpCisjZGVmaW5lIFBBMTZfQUZfQk1JX0QxMCAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE2KQorI2RlZmluZSBQQTE3X0FGX0JNSV9EMTEgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxNykKKyNkZWZpbmUgUEExOF9BRl9CTUlfRDEyICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTgpCisjZGVmaW5lIFBBMTlfQUZfQk1JX0QxMyAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE5KQorI2RlZmluZSBQQTIwX0FGX0JNSV9EMTQgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyMCkKKyNkZWZpbmUgUEEyMV9BRl9CTUlfRDE1ICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjEpCisjZGVmaW5lIFBBMjJfQUZfQk1JX1JFQURfUkVRICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDIyKQorI2RlZmluZSBQQTIzX0FGX0JNSV9XUklURSAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyMykKKyNkZWZpbmUgUEEyOV9BRl9CTUlfUlhfRlVMTCAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjkpCisjZGVmaW5lIFBBMzBfQUZfQk1JX1JFQUQgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDMwKQorCisvKiBBSU4gR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEMxNF9BSU5fU1lTX0NMSyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBEMjFfQUlOX1VTQkgyX0ZTICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIxKQorI2RlZmluZSBQRDIyX0FJTl9VU0JIMl9PRSAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyMikKKyNkZWZpbmUgUEQyM19BSU5fVVNCSDJfVFhETSAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjMpCisjZGVmaW5lIFBEMjRfQUlOX1VTQkgyX1RYRFAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI0KQorI2RlZmluZSBQRThfQUlOX0lSX1RYRCAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQRjBfQUlOX1BDX1JTVCAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAwKQorI2RlZmluZSBQRjFfQUlOX1BDX0NFMSAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxKQorI2RlZmluZSBQRjJfQUlOX1BDX0NFMiAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyKQorI2RlZmluZSBQRjNfQUlOX1BDX1BPRSAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAzKQorI2RlZmluZSBQRjRfQUlOX1BDX09FICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA0KQorI2RlZmluZSBQRjVfQUlOX1BDX1JXICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA1KQorCisvKiBCSU4gR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEMxNF9CSU5fU1lTX0NMSyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBEMjdfQklOX0VYVF9ETUFfR1JBTlQgIChHUElPX1BPUlREIHwgR1BJT19CSU4gfCBHUElPX09VVCB8IDI3KQorCisvKiBDSU4gR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEIyNl9DSU5fVVNCSDFfUlhEQVQgICAgKEdQSU9fUE9SVEIgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMjYpCisKKy8qIEFPVVQgR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEEyOV9BT1VUX0JNSV9XQUlUICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjkpCisjZGVmaW5lIFBEMTlfQU9VVF9VU0JIMl9SWERNICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDE5KQorI2RlZmluZSBQRDIwX0FPVVRfVVNCSDJfUlhEUCAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyMCkKKyNkZWZpbmUgUEQyNV9BT1VUX0VYVF9ETUFSRVEgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjUpCisjZGVmaW5lIFBEMjZfQU9VVF9VU0JPVEdfUlhEQVQgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDI2KQorI2RlZmluZSBQRTlfQU9VVF9JUl9SWEQgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA5KQorI2RlZmluZSBQRjZfQU9VVF9QQ19CVkQyICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA2KQorI2RlZmluZSBQRjdfQU9VVF9QQ19CVkQxICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA3KQorI2RlZmluZSBQRjhfQU9VVF9QQ19WUzIgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA4KQorI2RlZmluZSBQRjlfQU9VVF9QQ19WUzEgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA5KQorI2RlZmluZSBQRjEwX0FPVVRfUENfV1AgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMCkKKyNkZWZpbmUgUEYxMV9BT1VUX1BDX1JFQURZICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTEpCisjZGVmaW5lIFBGMTJfQU9VVF9QQ19XQUlUICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEyKQorI2RlZmluZSBQRjEzX0FPVVRfUENfQ0QyICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMykKKyNkZWZpbmUgUEYxNF9BT1VUX1BDX0NEMSAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTQpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWMxNThiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjcuaApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgSG9sZ2VyIFNjaHVyaWcgPGhzNDIzM0BtYWlsLm1uLXNvbHV0aW9ucy5kZT4KKyoKKyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorKiBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIF9NWENfSU9NVVhfTVgyN19ICisjZGVmaW5lIF9NWENfSU9NVVhfTVgyN19ICisKKyNpZm5kZWYgR1BJT19QT1JUQQorI2Vycm9yIFBsZWFzZSBpbmNsdWRlIG1hY2gvaW9tdXguaAorI2VuZGlmCisKKworLyogUHJpbWFyeSBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQTBfUEZfVVNCSDJfQ0xLICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAwKQorI2RlZmluZSBQQTFfUEZfVVNCSDJfRElSICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxKQorI2RlZmluZSBQQTJfUEZfVVNCSDJfREFUQTcgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyKQorI2RlZmluZSBQQTNfUEZfVVNCSDJfTlhUICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzKQorI2RlZmluZSBQQTRfUEZfVVNCSDJfU1RQICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA0KQorI2RlZmluZSBQQjIyX1BGX1VTQkgxX1NVU1AgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMikKKyNkZWZpbmUgUEIyNV9QRl9VU0JIMV9SQ1YgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjUpCisjZGVmaW5lIFBDNV9QRl9JMkMyX1NEQSAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCA1KQorI2RlZmluZSBQQzZfUEZfSTJDMl9TQ0wgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgNikKKyNkZWZpbmUgUEM3X1BGX1VTQk9UR19EQVRBNSAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA3KQorI2RlZmluZSBQQzhfUEZfVVNCT1RHX0RBVEE2ICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBDOV9QRl9VU0JPVEdfREFUQTAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgUEMxMF9QRl9VU0JPVEdfREFUQTIgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMCkKKyNkZWZpbmUgUEMxMV9QRl9VU0JPVEdfREFUQTEgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMSkKKyNkZWZpbmUgUEMxMl9QRl9VU0JPVEdfREFUQTQgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMikKKyNkZWZpbmUgUEMxM19QRl9VU0JPVEdfREFUQTMgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMykKKyNkZWZpbmUgUEMxNl9QRl9TU0k0X0ZTICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDE2KQorI2RlZmluZSBQQzE3X1BGX1NTSTRfUlhEICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTcpCisjZGVmaW5lIFBDMThfUEZfU1NJNF9UWEQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxOCkKKyNkZWZpbmUgUEMxOV9QRl9TU0k0X0NMSyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDE5KQorI2RlZmluZSBQQzI1X0FGX0dQVDVfVElOICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAyNSkKKyNkZWZpbmUgUEMyN19BRl9HUFQ0X1RJTiAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMjcpCisjZGVmaW5lIFBEMF9QRl9TRDNfQ01EICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDApCisjZGVmaW5lIFBEMV9QRl9TRDNfQ0xLICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDEpCisjZGVmaW5lIFBEMl9QRl9BVEFfREFUQTAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDIpCisjZGVmaW5lIFBEM19QRl9BVEFfREFUQTEgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDMpCisjZGVmaW5lIFBENF9QRl9BVEFfREFUQTIgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDQpCisjZGVmaW5lIFBENV9QRl9BVEFfREFUQTMgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDUpCisjZGVmaW5lIFBENl9QRl9BVEFfREFUQTQgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDYpCisjZGVmaW5lIFBEN19QRl9BVEFfREFUQTUgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBEOF9QRl9BVEFfREFUQTYgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBEOV9QRl9BVEFfREFUQTcgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDkpCisjZGVmaW5lIFBEMTBfUEZfQVRBX0RBVEE4ICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDEwKQorI2RlZmluZSBQRDExX1BGX0FUQV9EQVRBOSAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxMSkKKyNkZWZpbmUgUEQxMl9QRl9BVEFfREFUQTEwICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTIpCisjZGVmaW5lIFBEMTNfUEZfQVRBX0RBVEExMSAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDEzKQorI2RlZmluZSBQRDE0X1BGX0FUQV9EQVRBMTIgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxNCkKKyNkZWZpbmUgUEQxNV9QRl9BVEFfREFUQTEzICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTUpCisjZGVmaW5lIFBEMTZfUEZfQVRBX0RBVEExNCAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDE2KQorI2RlZmluZSBQRTBfUEZfVVNCT1RHX05YVCAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDApCisjZGVmaW5lIFBFMV9QRl9VU0JPVEdfU1RQICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMSkKKyNkZWZpbmUgUEUyX1BGX1VTQk9UR19ESVIgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyKQorI2RlZmluZSBQRTI0X1BGX1VTQk9UR19DTEsgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI0KQorI2RlZmluZSBQRTI1X1BGX1VTQk9UR19EQVRBNyAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI1KQorI2RlZmluZSBQRjFfUEZfTkZDTEUgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxKQorI2RlZmluZSBQRjNfUEZfTkZDRSAgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAzKQorI2RlZmluZSBQRjdfUEZfUENfUE9FICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA3KQorI2RlZmluZSBQRjhfUEZfUENfUlcgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA4KQorI2RlZmluZSBQRjlfUEZfUENfSU9JUzE2ICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA5KQorI2RlZmluZSBQRjEwX1BGX1BDX1JTVCAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMCkKKyNkZWZpbmUgUEYxMV9QRl9QQ19CVkQyICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTEpCisjZGVmaW5lIFBGMTJfUEZfUENfQlZEMSAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEyKQorI2RlZmluZSBQRjEzX1BGX1BDX1ZTMiAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMykKKyNkZWZpbmUgUEYxNF9QRl9QQ19WUzEgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTQpCisjZGVmaW5lIFBGMTZfUEZfUENfUFdST04gICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE2KQorI2RlZmluZSBQRjE3X1BGX1BDX1JFQURZICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxNykKKyNkZWZpbmUgUEYxOF9QRl9QQ19XQUlUICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTgpCisjZGVmaW5lIFBGMTlfUEZfUENfQ0QyICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE5KQorI2RlZmluZSBQRjIwX1BGX1BDX0NEMSAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAyMCkKKyNkZWZpbmUgUEYyM19QRl9BVEFfREFUQTE1ICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMjMpCisKKy8qIEFsdGVybmF0ZSBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQjRfQUZfTVNIQ19EQVRBMCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDQpCisjZGVmaW5lIFBCNV9BRl9NU0hDX0RBVEExICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgNSkKKyNkZWZpbmUgUEI2X0FGX01TSENfREFUQTIgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA2KQorI2RlZmluZSBQQjdfQUZfTVNIQ19EQVRBNCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDcpCisjZGVmaW5lIFBCOF9BRl9NU0hDX0JTICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEI5X0FGX01TSENfU0NMSyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQQjEwX0FGX1VBUlQ2X1RYRCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQQjExX0FGX1VBUlQ2X1JYRCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMTEpCisjZGVmaW5lIFBCMTJfQUZfVUFSVDZfQ1RTICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBCMTNfQUZfVUFSVDZfUlRTICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fSU4gfCAxMykKKyNkZWZpbmUgUEIxOF9BRl9VQVJUNV9UWEQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAxOCkKKyNkZWZpbmUgUEIxOV9BRl9VQVJUNV9SWEQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDE5KQorI2RlZmluZSBQQjIwX0FGX1VBUlQ1X0NUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDIwKQorI2RlZmluZSBQQjIxX0FGX1VBUlQ1X1JUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMjEpCisjZGVmaW5lIFBDOF9BRl9GRUNfTURJTyAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IEdQSU9fSU4gfCA4KQorI2RlZmluZSBQQzI0X0FGX0dQVDVfVE9VVCAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAyNCkKKyNkZWZpbmUgUEMyNl9BRl9HUFQ0X1RPVVQgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMjYpCisjZGVmaW5lIFBEMV9BRl9FVE1UUkFDRV9QS1QxNSAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDEpCisjZGVmaW5lIFBENl9BRl9FVE1UUkFDRV9QS1QxNCAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDYpCisjZGVmaW5lIFBEN19BRl9FVE1UUkFDRV9QS1QxMyAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDcpCisjZGVmaW5lIFBEOV9BRl9FVE1UUkFDRV9QS1QxMiAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDkpCisjZGVmaW5lIFBEMl9BRl9TRDNfRDAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDIpCisjZGVmaW5lIFBEM19BRl9TRDNfRDEgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDMpCisjZGVmaW5lIFBENF9BRl9TRDNfRDIgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDQpCisjZGVmaW5lIFBENV9BRl9TRDNfRDMgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDUpCisjZGVmaW5lIFBEOF9BRl9GRUNfTURJTyAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IEdQSU9fSU4gfCA4KQorI2RlZmluZSBQRDEwX0FGX0VUTVRSQUNFX1BLVDExICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxMCkKKyNkZWZpbmUgUEQxMV9BRl9FVE1UUkFDRV9QS1QxMCAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTEpCisjZGVmaW5lIFBEMTJfQUZfRVRNVFJBQ0VfUEtUOSAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDEyKQorI2RlZmluZSBQRDEzX0FGX0VUTVRSQUNFX1BLVDggICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxMykKKyNkZWZpbmUgUEQxNF9BRl9FVE1UUkFDRV9QS1Q3ICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTQpCisjZGVmaW5lIFBEMTVfQUZfRVRNVFJBQ0VfUEtUNiAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDE1KQorI2RlZmluZSBQRDE2X0FGX0VUTVRSQUNFX1BLVDUgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxNikKKyNkZWZpbmUgUEYxX0FGX0VUTVRSQUNFX1BLVDAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMSkKKyNkZWZpbmUgUEYzX0FGX0VUTVRSQUNFX1BLVDIgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMykKKyNkZWZpbmUgUEY1X0FGX0VUTVBJUEVTVEFUMTEgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgNSkKKyNkZWZpbmUgUEY3X0FGX0FUQV9CVUZGRVJfRU4gICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgNykKKyNkZWZpbmUgUEY4X0FGX0FUQV9JT1JEWSAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgOCkKKyNkZWZpbmUgUEY5X0FGX0FUQV9JTlRSUSAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgOSkKKyNkZWZpbmUgUEYxMF9BRl9BVEFfUkVTRVQgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTApCisjZGVmaW5lIFBGMTFfQUZfQVRBX0RNQUNLICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDExKQorI2RlZmluZSBQRjEyX0FGX0FUQV9ETUFSRVEgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxMikKKyNkZWZpbmUgUEYxM19BRl9BVEFfREEwICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTMpCisjZGVmaW5lIFBGMTRfQUZfQVRBX0RBMSAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDE0KQorI2RlZmluZSBQRjE1X0FGX0VUTVRSQUNFX1NZTkMgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxNSkKKyNkZWZpbmUgUEYxNl9BRl9BVEFfREEyICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTYpCisjZGVmaW5lIFBGMTdfQUZfQVRBX0NTMCAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDE3KQorI2RlZmluZSBQRjE4X0FGX0FUQV9DUzEgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxOCkKKyNkZWZpbmUgUEYxOV9BRl9BVEFfRElPVyAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTkpCisjZGVmaW5lIFBGMjBfQUZfQVRBX0RJT1IgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDIwKQorI2RlZmluZSBQRjIyX0FGX0VUTVRSQUNFX0NMSyAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAyMikKKyNkZWZpbmUgUEYyM19BRl9FVE1UUkFDRV9QS1Q0ICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMjMpCisKKy8qIEFJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQzE0X0FJTl9TU0kxX01DTEsgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEMxNV9BSU5fR1BUNl9UT1VUICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBEMF9BSU5fRkVDX1RYRDAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDApCisjZGVmaW5lIFBEMV9BSU5fRkVDX1RYRDEgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDEpCisjZGVmaW5lIFBEMl9BSU5fRkVDX1RYRDIgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIpCisjZGVmaW5lIFBEM19BSU5fRkVDX1RYRDMgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDMpCisjZGVmaW5lIFBEOV9BSU5fRkVDX01EQyAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBEMTZfQUlOX0ZFQ19UWF9FUiAgICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE2KQorI2RlZmluZSBQRDI3X0FJTl9FWFRfRE1BX0dSQU5UICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNykKKyNkZWZpbmUgUEYyM19BSU5fRkVDX1RYX0VOICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjMpCisKKy8qIEJJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQzE0X0JJTl9TU0kyX01DTEsgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCAxNCkKKworLyogQ0lOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBEMl9DSU5fU0xDREMxX0RBVDAgICAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDIpCisjZGVmaW5lIFBEM19DSU5fU0xDREMxX0RBVDEgICAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDMpCisjZGVmaW5lIFBENF9DSU5fU0xDREMxX0RBVDIgICAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDQpCisjZGVmaW5lIFBENV9DSU5fU0xDREMxX0RBVDMgICAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDUpCisjZGVmaW5lIFBENl9DSU5fU0xDREMxX0RBVDQgICAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBEN19DSU5fU0xDREMxX0RBVDUgICAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDcpCisjZGVmaW5lIFBEOF9DSU5fU0xDREMxX0RBVDYgICAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBEOV9DSU5fU0xDREMxX0RBVDcgICAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBEMTBfQ0lOX1NMQ0RDMV9EQVQ4ICAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQRDExX0NJTl9TTENEQzFfREFUOSAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxMSkKKyNkZWZpbmUgUEQxMl9DSU5fU0xDREMxX0RBVDEwICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBEMTNfQ0lOX1NMQ0RDMV9EQVQxMSAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDEzKQorI2RlZmluZSBQRDE0X0NJTl9TTENEQzFfREFUMTIgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEQxNV9DSU5fU0xDREMxX0RBVDEzICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBEMTZfQ0lOX1NMQ0RDMV9EQVQxNCAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE2KQorI2RlZmluZSBQRDIzX0NJTl9TTENEQzFfREFUMTUgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAyMykKKyNkZWZpbmUgUEYyN19DSU5fRVhUX0RNQV9HUkFOVCAgKEdQSU9fUE9SVEYgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMjcpCisvKiBMQ0RDX1RFU1R4IG9uIFBCeHggb21pdHRlZCwgYmVjYXVzZSBpdCdzIG5vdCBjbGVhciB3aGF0IHRoZXkgZG8gKi8KKworLyogQU9VVCBHUElPIHBpbiBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBQQzE0X0FPVVRfR1BUNl9USU4gICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxNCkKKyNkZWZpbmUgUEQ0X0FPVVRfRkVDX1JYX0VSICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgNCkKKyNkZWZpbmUgUEQ1X0FPVVRfRkVDX1JYRDEgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgNSkKKyNkZWZpbmUgUEQ2X0FPVVRfRkVDX1JYRDIgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgNikKKyNkZWZpbmUgUEQ3X0FPVVRfRkVDX1JYRDMgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgNykKKyNkZWZpbmUgUEQxMF9BT1VUX0ZFQ19DUlMgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTApCisjZGVmaW5lIFBEMTFfQU9VVF9GRUNfVFhfQ0xLICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDExKQorI2RlZmluZSBQRDEyX0FPVVRfRkVDX1JYRDAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMikKKyNkZWZpbmUgUEQxM19BT1VUX0ZFQ19SWF9EViAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTMpCisjZGVmaW5lIFBEMTRfQU9VVF9GRUNfUlhfQ0xLICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDE0KQorI2RlZmluZSBQRDE1X0FPVVRfRkVDX0NPTCAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxNSkKKworI2RlZmluZSBQQzE3X0JPVVRfUENfSU9JUzE2ICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQk9VVCB8IEdQSU9fSU4gfCAxNykKKyNkZWZpbmUgUEMxOF9CT1VUX1BDX0JWRDIgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMTgpCisjZGVmaW5lIFBDMTlfQk9VVF9QQ19CVkQxICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CT1VUIHwgR1BJT19JTiB8IDE5KQorI2RlZmluZSBQQzI4X0JPVVRfUENfQlZEMiAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQk9VVCB8IEdQSU9fSU4gfCAyOCkKKyNkZWZpbmUgUEMyOV9CT1VUX1BDX1ZTMSAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMjkpCisjZGVmaW5lIFBDMzBfQk9VVF9QQ19SRUFEWSAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CT1VUIHwgR1BJT19JTiB8IDMwKQorI2RlZmluZSBQQzMxX0JPVVRfUENfV0FJVCAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQk9VVCB8IEdQSU9fSU4gfCAzMSkKKworCisjZW5kaWYgLyogX01YQ19HUElPX01YMV9NWDJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MnguaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDJ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1YWU2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDJ4LmgKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IEhvbGdlciBTY2h1cmlnIDxoczQyMzNAbWFpbC5tbi1zb2x1dGlvbnMuZGU+CisqCisqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqCisqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyogTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBfTVhDX0lPTVVYX01YMnhfSAorI2RlZmluZSBfTVhDX0lPTVVYX01YMnhfSAorCisjaWZuZGVmIEdQSU9fUE9SVEEKKyNlcnJvciBQbGVhc2UgaW5jbHVkZSBtYWNoL2lvbXV4LmgKKyNlbmRpZgorCisKKy8qIFByaW1hcnkgR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEE1X1BGX0xTQ0xLICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA1KQorI2RlZmluZSBQQTZfUEZfTEQwICAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBBN19QRl9MRDEgICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgUEE4X1BGX0xEMiAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQQTlfUEZfTEQzICAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBBMTBfUEZfTEQ0ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBBMTFfUEZfTEQ1ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIFBBMTJfUEZfTEQ2ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBBMTNfUEZfTEQ3ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTMpCisjZGVmaW5lIFBBMTRfUEZfTEQ4ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBBMTVfUEZfTEQ5ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBBMTZfUEZfTEQxMCAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBBMTdfUEZfTEQxMSAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTcpCisjZGVmaW5lIFBBMThfUEZfTEQxMiAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTgpCisjZGVmaW5lIFBBMTlfUEZfTEQxMyAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTkpCisjZGVmaW5lIFBBMjBfUEZfTEQxNCAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjApCisjZGVmaW5lIFBBMjFfUEZfTEQxNSAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBBMjJfUEZfTEQxNiAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjIpCisjZGVmaW5lIFBBMjNfUEZfTEQxNyAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjMpCisjZGVmaW5lIFBBMjRfUEZfUkVWICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjQpCisjZGVmaW5lIFBBMjVfUEZfQ0xTICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjUpCisjZGVmaW5lIFBBMjZfUEZfUFMgICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjYpCisjZGVmaW5lIFBBMjdfUEZfU1BMX1NQUiAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjcpCisjZGVmaW5lIFBBMjhfUEZfSFNZTkMgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjgpCisjZGVmaW5lIFBBMjlfUEZfVlNZTkMgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjkpCisjZGVmaW5lIFBBMzBfUEZfQ09OVFJBU1QgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMzApCisjZGVmaW5lIFBBMzFfUEZfT0VfQUNEICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMzEpCisjZGVmaW5lIFBCNF9QRl9TRDJfRDAgICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDQpCisjZGVmaW5lIFBCNV9QRl9TRDJfRDEgICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDUpCisjZGVmaW5lIFBCNl9QRl9TRDJfRDIgICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDYpCisjZGVmaW5lIFBCN19QRl9TRDJfRDMgICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBCOF9QRl9TRDJfQ01EICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBCOV9QRl9TRDJfQ0xLICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDkpCisjZGVmaW5lIFBCMTBfUEZfQ1NJX0QwICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBCMTFfUEZfQ1NJX0QxICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIFBCMTJfUEZfQ1NJX0QyICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBCMTNfUEZfQ1NJX0QzICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTMpCisjZGVmaW5lIFBCMTRfUEZfQ1NJX0Q0ICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBCMTVfUEZfQ1NJX01DTEsgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBCMTZfUEZfQ1NJX1BJWENMSyAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBCMTdfUEZfQ1NJX0Q1ICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTcpCisjZGVmaW5lIFBCMThfUEZfQ1NJX0Q2ICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTgpCisjZGVmaW5lIFBCMTlfUEZfQ1NJX0Q3ICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTkpCisjZGVmaW5lIFBCMjBfUEZfQ1NJX1ZTWU5DICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjApCisjZGVmaW5lIFBCMjFfUEZfQ1NJX0hTWU5DICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBCMjNfUEZfVVNCX1BXUiAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIzKQorI2RlZmluZSBQQjI0X1BGX1VTQl9PQyAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNCkKKyNkZWZpbmUgUEIyNl9QRl9VU0JIMV9GUyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjYpCisjZGVmaW5lIFBCMjdfUEZfVVNCSDFfT0UgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI3KQorI2RlZmluZSBQQjI4X1BGX1VTQkgxX1RYRE0gICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyOCkKKyNkZWZpbmUgUEIyOV9QRl9VU0JIMV9UWERQICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjkpCisjZGVmaW5lIFBCMzBfUEZfVVNCSDFfUlhETSAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDMwKQorI2RlZmluZSBQQjMxX1BGX1VTQkgxX1JYRFAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAzMSkKKyNkZWZpbmUgUEMxNF9QRl9UT1VUICAgICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTQpCisjZGVmaW5lIFBDMTVfUEZfVElOICAgICAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE1KQorI2RlZmluZSBQQzIwX1BGX1NTSTFfRlMgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjApCisjZGVmaW5lIFBDMjFfUEZfU1NJMV9SWEQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyMSkKKyNkZWZpbmUgUEMyMl9QRl9TU0kxX1RYRCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDIyKQorI2RlZmluZSBQQzIzX1BGX1NTSTFfQ0xLICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjMpCisjZGVmaW5lIFBDMjRfUEZfU1NJMl9GUyAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyNCkKKyNkZWZpbmUgUEMyNV9QRl9TU0kyX1JYRCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDI1KQorI2RlZmluZSBQQzI2X1BGX1NTSTJfVFhEICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjYpCisjZGVmaW5lIFBDMjdfUEZfU1NJMl9DTEsgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyNykKKyNkZWZpbmUgUEMyOF9QRl9TU0kzX0ZTICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDI4KQorI2RlZmluZSBQQzI5X1BGX1NTSTNfUlhEICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjkpCisjZGVmaW5lIFBDMzBfUEZfU1NJM19UWEQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAzMCkKKyNkZWZpbmUgUEMzMV9QRl9TU0kzX0NMSyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDMxKQorI2RlZmluZSBQRDE3X1BGX0kyQ19EQVRBICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQRDE4X1BGX0kyQ19DTEsgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE4KQorI2RlZmluZSBQRDE5X1BGX0NTUEkyX1NTMiAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxOSkKKyNkZWZpbmUgUEQyMF9QRl9DU1BJMl9TUzEgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMjApCisjZGVmaW5lIFBEMjFfUEZfQ1NQSTJfU1MwICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDIxKQorI2RlZmluZSBQRDIyX1BGX0NTUEkyX1NDTEsgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAyMikKKyNkZWZpbmUgUEQyM19QRl9DU1BJMl9NSVNPICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMjMpCisjZGVmaW5lIFBEMjRfUEZfQ1NQSTJfTU9TSSAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDI0KQorI2RlZmluZSBQRDI1X1BGX0NTUEkxX1JEWSAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI1KQorI2RlZmluZSBQRDI2X1BGX0NTUEkxX1NTMiAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI2KQorI2RlZmluZSBQRDI3X1BGX0NTUEkxX1NTMSAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI3KQorI2RlZmluZSBQRDI4X1BGX0NTUEkxX1NTMCAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI4KQorI2RlZmluZSBQRDI5X1BGX0NTUEkxX1NDTEsgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI5KQorI2RlZmluZSBQRDMwX1BGX0NTUEkxX01JU08gICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMzApCisjZGVmaW5lIFBEMzFfUEZfQ1NQSTFfTU9TSSAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMzEpCisjZGVmaW5lIFBFM19QRl9VQVJUMl9DVFMgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMykKKyNkZWZpbmUgUEU0X1BGX1VBUlQyX1JUUyAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19JTiB8IDQpCisjZGVmaW5lIFBFNV9QRl9QV01PICAgICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDUpCisjZGVmaW5lIFBFNl9QRl9VQVJUMl9UWEQgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEU3X1BGX1VBUlQyX1JYRCAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19JTiB8IDcpCisjZGVmaW5lIFBFOF9QRl9VQVJUM19UWEQgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEU5X1BGX1VBUlQzX1JYRCAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19JTiB8IDkpCisjZGVmaW5lIFBFMTBfUEZfVUFSVDNfQ1RTICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBFMTFfUEZfVUFSVDNfUlRTICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxMSkKKyNkZWZpbmUgUEUxMl9QRl9VQVJUMV9UWEQgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMikKKyNkZWZpbmUgUEUxM19QRl9VQVJUMV9SWEQgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19JTiB8IDEzKQorI2RlZmluZSBQRTE0X1BGX1VBUlQxX0NUUyAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQRTE1X1BGX1VBUlQxX1JUUyAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTUpCisjZGVmaW5lIFBFMTZfUEZfUlRDSyAgICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBFMTdfUEZfUkVTRVRfT1VUICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDE3KQorI2RlZmluZSBQRTE4X1BGX1NEMV9EMCAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAxOCkKKyNkZWZpbmUgUEUxOV9QRl9TRDFfRDEgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMTkpCisjZGVmaW5lIFBFMjBfUEZfU0QxX0QyICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIwKQorI2RlZmluZSBQRTIxX1BGX1NEMV9EMyAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMSkKKyNkZWZpbmUgUEUyMl9QRl9TRDFfQ01EICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjIpCisjZGVmaW5lIFBFMjNfUEZfU0QxX0NMSyAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIzKQorI2RlZmluZSBQRjBfUEZfTlJGQiAgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAwKQorI2RlZmluZSBQRjJfUEZfTkZXUCAgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAyKQorI2RlZmluZSBQRjRfUEZfTkZBTEUgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA0KQorI2RlZmluZSBQRjVfUEZfTkZSRSAgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA1KQorI2RlZmluZSBQRjZfUEZfTkZXRSAgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA2KQorI2RlZmluZSBQRjE1X1BGX0NMS08gICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxNSkKKyNkZWZpbmUgUEYyMV9QRl9DUzQgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMjEpCisjZGVmaW5lIFBGMjJfUEZfQ1M1ICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDIyKQorCisvKiBBbHRlcm5hdGUgR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEIyNl9BRl9VQVJUNF9SVFMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDI2KQorI2RlZmluZSBQQjI4X0FGX1VBUlQ0X1RYRCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDI4KQorI2RlZmluZSBQQjI5X0FGX1VBUlQ0X0NUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDI5KQorI2RlZmluZSBQQjMxX0FGX1VBUlQ0X1JYRCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMzEpCisjZGVmaW5lIFBDMjhfQUZfU0xDREMyX0QwICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI4KQorI2RlZmluZSBQQzI5X0FGX1NMQ0RDMl9SUyAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAyOSkKKyNkZWZpbmUgUEMzMF9BRl9TTENEQzJfQ1MgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMzApCisjZGVmaW5lIFBDMzFfQUZfU0xDREMyX0NMSyAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDMxKQorI2RlZmluZSBQRDE5X0FGX1VTQkgyX0RBVEE0ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxOSkKKyNkZWZpbmUgUEQyMF9BRl9VU0JIMl9EQVRBMyAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjApCisjZGVmaW5lIFBEMjFfQUZfVVNCSDJfREFUQTYgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDIxKQorI2RlZmluZSBQRDIyX0FGX1VTQkgyX0RBVEEwICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMikKKyNkZWZpbmUgUEQyM19BRl9VU0JIMl9EQVRBMiAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjMpCisjZGVmaW5lIFBEMjRfQUZfVVNCSDJfREFUQTEgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDI0KQorI2RlZmluZSBQRDI2X0FGX1VTQkgyX0RBVEE1ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyNikKKyNkZWZpbmUgUEUwX0FGX0tQX0NPTDYgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgMCkKKyNkZWZpbmUgUEUxX0FGX0tQX1JPVzYgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgMSkKKyNkZWZpbmUgUEUyX0FGX0tQX1JPVzcgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgMikKKyNkZWZpbmUgUEUzX0FGX0tQX0NPTDcgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgMykKKyNkZWZpbmUgUEU0X0FGX0tQX1JPVzcgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgNCkKKyNkZWZpbmUgUEU2X0FGX0tQX0NPTDYgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgNikKKyNkZWZpbmUgUEU3X0FGX0tQX1JPVzYgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgNykKKyNkZWZpbmUgUEUxNl9BRl9PV0lSRSAgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgMTYpCisjZGVmaW5lIFBFMThfQUZfQ1NQSTNfTUlTTyAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IEdQSU9fSU4gfCAxOCkKKyNkZWZpbmUgUEUyMV9BRl9DU1BJM19TUyAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAyMSkKKyNkZWZpbmUgUEUyMl9BRl9DU1BJM19NT1NJICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAyMikKKyNkZWZpbmUgUEUyM19BRl9DU1BJM19TQ0xLICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAyMykKKworLyogQUlOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBBNl9BSU5fU0xDREMxX0RBVDAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBBN19BSU5fU0xDREMxX0RBVDEgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDcpCisjZGVmaW5lIFBBOF9BSU5fU0xDREMxX0RBVDIgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBBMF9BSU5fU0xDREMxX0RBVDMgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDApCisjZGVmaW5lIFBBMTFfQUlOX1NMQ0RDMV9EQVQ1ICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDExKQorI2RlZmluZSBQQTEzX0FJTl9TTENEQzFfREFUNyAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMykKKyNkZWZpbmUgUEExNV9BSU5fU0xDREMxX0RBVDkgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBBMTdfQUlOX1NMQ0RDMV9EQVQxMSAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQQTE5X0FJTl9TTENEQzFfREFUMTMgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxOSkKKyNkZWZpbmUgUEEyMV9BSU5fU0xDREMxX0RBVDE1ICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBBMjJfQUlOX0VYVF9ETUFHUkFOVCAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIyKQorI2RlZmluZSBQQTI0X0FJTl9TTENEQzFfRDAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNCkKKyNkZWZpbmUgUEEyNV9BSU5fU0xDREMxX1JTICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjUpCisjZGVmaW5lIFBBMjZfQUlOX1NMQ0RDMV9DUyAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI2KQorI2RlZmluZSBQQTI3X0FJTl9TTENEQzFfQ0xLICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNykKKyNkZWZpbmUgUEI2X0FJTl9TTENEQzFfRDAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEI3X0FJTl9TTENEQzFfUlMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgUEI4X0FJTl9TTENEQzFfQ1MgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEI5X0FJTl9TTENEQzFfQ0xLICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgUEIyNV9BSU5fU0xDREMxX0RBVDAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjUpCisjZGVmaW5lIFBCMjZfQUlOX1NMQ0RDMV9EQVQxICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI2KQorI2RlZmluZSBQQjI3X0FJTl9TTENEQzFfREFUMiAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNykKKyNkZWZpbmUgUEIyOF9BSU5fU0xDREMxX0RBVDMgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjgpCisjZGVmaW5lIFBCMjlfQUlOX1NMQ0RDMV9EQVQ0ICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI5KQorI2RlZmluZSBQQjMwX0FJTl9TTENEQzFfREFUNSAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAzMCkKKyNkZWZpbmUgUEIzMV9BSU5fU0xDREMxX0RBVDYgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMzEpCisjZGVmaW5lIFBDNV9BSU5fU0xDREMxX0RBVDcgICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDUpCisjZGVmaW5lIFBDNl9BSU5fU0xDREMxX0RBVDggICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBDN19BSU5fU0xDREMxX0RBVDkgICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDcpCisjZGVmaW5lIFBDOF9BSU5fU0xDREMxX0RBVDEwICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBDOV9BSU5fU0xDREMxX0RBVDExICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBDMTBfQUlOX1NMQ0RDMV9EQVQxMiAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQQzExX0FJTl9TTENEQzFfREFUMTMgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMSkKKyNkZWZpbmUgUEMxMl9BSU5fU0xDREMxX0RBVDE0ICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBDMTNfQUlOX1NMQ0RDMV9EQVQxNSAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDEzKQorI2RlZmluZSBQRTVfQUlOX1BDX1NQS09VVCAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA1KQorCisvKiBCSU4gR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEU1X0JJTl9UT1VUMiAgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgNSkKKworLyogQ0lOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIFBBMTRfQ0lOX1NMQ0RDMV9EQVQwICAgIChHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQQTE1X0NJTl9TTENEQzFfREFUMSAgICAoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgUEExNl9DSU5fU0xDREMxX0RBVDIgICAgKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBBMTdfQ0lOX1NMQ0RDMV9EQVQzICAgIChHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQQTE4X0NJTl9TTENEQzFfREFUNCAgICAoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxOCkKKyNkZWZpbmUgUEExOV9DSU5fU0xDREMxX0RBVDUgICAgKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTkpCisjZGVmaW5lIFBBMjBfQ0lOX1NMQ0RDMV9EQVQ2ICAgIChHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDIwKQorI2RlZmluZSBQQTIxX0NJTl9TTENEQzFfREFUNyAgICAoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAyMSkKKyNkZWZpbmUgUEIzMF9DSU5fVUFSVDRfQ1RTICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMzApCisjZGVmaW5lIFBFNV9DSU5fVE9VVDMgICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDUpCisKKy8qIEFPVVQgR1BJTyBwaW4gZnVuY3Rpb25zICovCisKKyNkZWZpbmUgUEIyOV9BT1VUX1VBUlQ0X1JYRCAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjkpCisjZGVmaW5lIFBCMzFfQU9VVF9VQVJUNF9SVFMgICAgIChHUElPX1BPUlRCIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDMxKQorI2RlZmluZSBQQzhfQU9VVF9VU0JPVEdfVFhSX0lOVCAoR1BJT19QT1JUQyB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA4KQorI2RlZmluZSBQQzE1X0FPVVRfV0tHRCAgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxNSkKKyNkZWZpbmUgUEYyMV9BT1VUX0RUQUNLICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjEpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzLmgKaW5kZXggYzkxOThjMC4uYWI4MzhjZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzLmgKQEAgLTkyLDcgKzkyLDcgQEAKIAlNVVhfRVhURE1BUkVRMl9NQlhfU0VMCQk9IDEgPDwgMTUsCiAJTVVYX1RBTVBFUl9ERVRFQ1RfRU4JCT0gMSA8PCAxNiwKIAlNVVhfUEdQX1VTQl80V0lSRQkJPSAxIDw8IDE3LAotCU1VWF9QR0JfVVNCX0NPTU1PTgkJPSAxIDw8IDE4LAorCU1VWF9QR1BfVVNCX0NPTU1PTgkJPSAxIDw8IDE4LAogCU1VWF9TREhDX01FTVNUSUNLMQkJPSAxIDw8IDE5LAogCU1VWF9TREhDX01FTVNUSUNLMgkJPSAxIDw8IDIwLAogCU1VWF9QR1BfU1BMTF9CWVAJCT0gMSA8PCAyMSwKQEAgLTEwOSwyMSArMTA5LDQ0IEBACiB9OwogCiAvKgotICogVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSBnZW5lcmFsIHB1cnBvc2UgZnVuY3Rpb24gZm9yIGEgcGFydGljdWxhcgotICogc2lnbmFsLgorICogc2V0dXBzIGEgc2luZ2xlIHBpbjoKKyAqIAktIHJlc2VydmVzIHRoZSBwaW4gc28gdGhhdCBpdCBpcyBub3QgY2xhaW1lZCBieSBhbm90aGVyIGRyaXZlcgorICogCS0gc2V0dXBzIHRoZSBpb211eCBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24KKyAqIAktIGlmIHRoZSBwaW4gaXMgY29uZmlndXJlZCBhcyBhIEdQSU8sIHdlIGNsYWltIGl0IHRocm91ZyBrZXJuZWwgZ3Bpb2xpYgogICovCi12b2lkIGlvbXV4X2NvbmZpZ19ncHIoZW51bSBpb211eF9ncF9mdW5jICwgYm9vbCk7CitpbnQgbXhjX2lvbXV4X3NldHVwX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluLCBjb25zdCBjaGFyICpsYWJlbCk7CisvKgorICogc2V0dXBzIG11dGxpcGxlIHBpbnMKKyAqIGNvbnZlbmllbnQgd2F5IHRvIGNhbGwgdGhlIGFib3ZlIGZ1bmN0aW9uIHdpdGggdGFibGVzCisgKi8KK2ludCBteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKKwkJY29uc3QgY2hhciAqbGFiZWwpOwogCiAvKgotICogc2V0IHRoZSBtb2RlIGZvciBhIElPTVVYIHBpbi4KKyAqIHJlbGVhc2VzIGEgc2luZ2xlIHBpbjoKKyAqIAktIG1ha2UgaXQgYXZhaWxhYmxlIGZvciBhIGZ1dHVyZSB1c2UgYnkgYW5vdGhlciBkcml2ZXIKKyAqIAktIGZyZWVzIHRoZSBHUElPIGlmIHRoZSBwaW4gd2FzIGNvbmZpZ3VyZWQgYXMgR1BJTworICogCS0gRE9FUyBOT1QgcmVjb25maWd1cmUgdGhlIElPTVVYIGluIGl0cyByZXNldCBzdGF0ZQogICovCi1pbnQgbXhjX2lvbXV4X21vZGUodW5zaWduZWQgaW50KTsKK3ZvaWQgbXhjX2lvbXV4X3JlbGVhc2VfcGluKGNvbnN0IHVuc2lnbmVkIGludCBwaW4pOworLyoKKyAqIHJlbGVhc2VzIG11bHRpcGxlIHBpbnMKKyAqIGNvbnZlbnZpZW50IHdheSB0byBjYWxsIHRoZSBhYm92ZSBmdW5jdGlvbiB3aXRoIHRhYmxlcworICovCit2b2lkIG14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnModW5zaWduZWQgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KTsKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcy9kaXNhYmxlcyB0aGUgZ2VuZXJhbCBwdXJwb3NlIGZ1bmN0aW9uIGZvciBhIHBhcnRpY3VsYXIKICAqIHNpZ25hbC4KICAqLwotdm9pZCBteGNfaW9tdXhfc2V0X2dwcihlbnVtIGlvbXV4X2dwX2Z1bmMsIGJvb2wpOwordm9pZCBteGNfaW9tdXhfc2V0X2dwcihlbnVtIGlvbXV4X2dwX2Z1bmMsIGJvb2wgZW4pOworCisvKgorICogVGhpcyBmdW5jdGlvbiBvbmx5IGNvbmZpZ3VyZXMgdGhlIGlvbXV4IGhhcmR3YXJlLgorICogSXQgaXMgY2FsbGVkIGJ5IHRoZSBzZXR1cCBmdW5jdGlvbnMgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGFueW1vcmUuCisgKiBJdCBpcyBoZXJlIHZpc2libGUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKyAqLworaW50IG14Y19pb211eF9tb2RlKHVuc2lnbmVkIGludCBwaW5fbW9kZSk7CiAKICNkZWZpbmUgSU9NVVhfUEFETlVNX01BU0sJMHgxZmYKICNkZWZpbmUgSU9NVVhfR1BJT05VTV9TSElGVAk5CkBAIC0xNDQsNiArMTY3LDExIEBACiAJTVhDX0dQSU9fSVJRX1NUQVJUKQogCiAvKgorICogVGhlIG51bWJlciBvZiBncGlvIGRldmljZXMgYW1vbmcgdGhlIHBhZHMKKyAqLworI2RlZmluZSBHUElPX1BPUlRfTUFYIDMKKworLyoKICAqIFRoaXMgZW51bWVyYXRpb24gaXMgY29uc3RydWN0ZWQgYmFzZWQgb24gdGhlIFNlY3Rpb24KICAqICJzd19wYWRfY3RsICYgc3dfbXV4X2N0bCBkZXRhaWxzIiBvZiB0aGUgTVgzMSBJQyBTcGVjLiBFYWNoIGVudW1lcmF0ZWQKICAqIHZhbHVlIGlzIGNvbnN0cnVjdGVkIGJhc2VkIG9uIHRoZSBydWxlcyBkZXNjcmliZWQgYWJvdmUuCkBAIC00ODAsNiArNTA4LDkgQEAKIAlNWDMxX1BJTl9DQVBUVVJFCT0gSU9NVVhfUElOKCA3LCAgIDMyNyksCiB9OwogCisjZGVmaW5lIFBJTl9NQVggMzI3CisjZGVmaW5lIE5CX1BPUlRTIDEyIC8qIE5CX1BJTlMvMzIsIHdlIGNob3NlIDMyIHBpbnMgcGVyICJQT1JUIiAqLworCiAvKgogICogQ29udmVuaWVuY2UgdmFsdWVzIGZvciB1c2Ugd2l0aCBteGNfaW9tdXhfbW9kZSgpCiAgKgpAQCAtNTA3LDcgKzUzOCw5IEBACiAjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NTMV9fU1MxCQlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkxX1NTMSwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NTMl9fU1MyCQlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkxX1NTMiwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkyX01PU0lfX01PU0kJSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9NT1NJLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fQ1NQSTJfTU9TSV9fU0NMCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfTU9TSSwgSU9NVVhfQ09ORklHX0FMVDEpCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkyX01JU09fX01JU08JSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9NSVNPLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fQ1NQSTJfTUlTT19fU0RBCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfTUlTTywgSU9NVVhfQ09ORklHX0FMVDEpCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkyX1NDTEtfX1NDTEsJSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9TQ0xLLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fQ1NQSTJfU1BJX1JEWV9fU1BJX1JEWQlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkyX1NQSV9SRFksIElPTVVYX0NPTkZJR19GVU5DKQogI2RlZmluZSBNWDMxX1BJTl9DU1BJMl9TUzBfX1NTMAkJSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9TUzAsIElPTVVYX0NPTkZJR19GVU5DKQpAQCAtNTI1LDYgKzU1OCwzMyBAQAogI2RlZmluZSBNWDMxX1BJTl9TRDFfREFUQTBfX1NEMV9EQVRBMAlJT01VWF9NT0RFKE1YMzFfUElOX1NEMV9EQVRBMCwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX1NEMV9DTEtfX1NEMV9DTEsJSU9NVVhfTU9ERShNWDMxX1BJTl9TRDFfQ0xLLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fU0QxX0NNRF9fU0QxX0NNRAlJT01VWF9NT0RFKE1YMzFfUElOX1NEMV9DTUQsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDBfX0xEMAkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDFfX0xEMQkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDEsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDJfX0xEMgkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDIsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDNfX0xEMwkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDMsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDRfX0xENAkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDQsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDVfX0xENQkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDUsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDZfX0xENgkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDYsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDdfX0xENwkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDcsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDhfX0xEOAkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDgsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDlfX0xEOQkJSU9NVVhfTU9ERShNWDMxX1BJTl9MRDksIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDEwX19MRDEwCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDExX19MRDExCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTEsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDEyX19MRDEyCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTIsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDEzX19MRDEzCQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTMsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDE0X19MRDE0CQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTQsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDE1X19MRDE1CQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTUsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDE2X19MRDE2CQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTYsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9MRDE3X19MRDE3CQlJT01VWF9NT0RFKE1YMzFfUElOX0xEMTcsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9WU1lOQzNfX1ZTWU5DMwkJSU9NVVhfTU9ERShNWDMxX1BJTl9WU1lOQzMsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9IU1lOQ19fSFNZTkMJCUlPTVVYX01PREUoTVgzMV9QSU5fSFNZTkMsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9GUFNISUZUX19GUFNISUZUCUlPTVVYX01PREUoTVgzMV9QSU5fRlBTSElGVCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0RSRFkwX19EUkRZMAkJSU9NVVhfTU9ERShNWDMxX1BJTl9EUkRZMCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0QzX1JFVl9fRDNfUkVWCQlJT01VWF9NT0RFKE1YMzFfUElOX0QzX1JFViwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0NPTlRSQVNUX19DT05UUkFTVAlJT01VWF9NT0RFKE1YMzFfUElOX0NPTlRSQVNULCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fRDNfU1BMX19EM19TUEwJCUlPTVVYX01PREUoTVgzMV9QSU5fRDNfU1BMLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fRDNfQ0xTX19EM19DTFMJCUlPTVVYX01PREUoTVgzMV9QSU5fRDNfQ0xTLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fTENTMF9fR1BJMDNfMjMJCUlPTVVYX01PREUoTVgzMV9QSU5fTENTMCwgSU9NVVhfQ09ORklHX0dQSU8pCiAKIC8qWFhYOiBUaGUgU1MwLCBTUzEsIFNTMiwgU1MzIGxpbmVzIG9mIHNwaTMgYXJlIG11bHRpcGxleGVkIGJ5IGNzcGkyX3NzMCwgY3NwaTJfc3MxLCBjc3BpMV9zczAKICAqIGNzcGkxX3NzMSovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MWY4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgSG9sZ2VyIFNjaHVyaWcgPGhzNDIzM0BtYWlsLm1uLXNvbHV0aW9ucy5kZT4KKyoKKyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyoKKyogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorKiBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIF9NWENfSU9NVVhfSAorI2RlZmluZSBfTVhDX0lPTVVYX0gKKworLyoKKyogIEdQSU8gTW9kdWxlIGFuZCBJL08gTXVsdGlwbGV4ZXIKKyogIHggPSAwLi4zIGZvciByZWdfQSwgcmVnX0IsIHJlZ19DLCByZWdfRAorKi8KKyNkZWZpbmUgVkFfR1BJT19CQVNFCUlPX0FERFJFU1MoR1BJT19CQVNFX0FERFIpCisjZGVmaW5lIE1YQ19ERElSKHgpICAgICgweDAwICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX09DUjEoeCkgICAgKDB4MDQgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfT0NSMih4KSAgICAoMHgwOCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19JQ09ORkExKHgpICgweDBjICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lDT05GQTIoeCkgKDB4MTAgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfSUNPTkZCMSh4KSAoMHgxNCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19JQ09ORkIyKHgpICgweDE4ICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0RSKHgpICAgICAgKDB4MWMgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfR0lVUyh4KSAgICAoMHgyMCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19TU1IoeCkgICAgICgweDI0ICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lDUjEoeCkgICAgKDB4MjggKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfSUNSMih4KSAgICAoMHgyYyArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19JTVIoeCkgICAgICgweDMwICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lTUih4KSAgICAgKDB4MzQgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfR1BSKHgpICAgICAoMHgzOCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19TV1IoeCkgICAgICgweDNjICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX1BVRU4oeCkgICAgKDB4NDAgKyAoKHgpIDw8IDgpKQorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCisjIGRlZmluZSBHUElPX1BPUlRfTUFYICAzCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDIKKyMgZGVmaW5lIEdQSU9fUE9SVF9NQVggIDUKKyNlbmRpZgorCisjaWZuZGVmIEdQSU9fUE9SVF9NQVgKKyMgZXJyb3IgIkdQSU8gY29uZmlnIHBvcnQgY291bnQgdW5rbm93biEiCisjZW5kaWYKKworI2RlZmluZSBHUElPX1BJTl9NQVNLIDB4MWYKKworI2RlZmluZSBHUElPX1BPUlRfU0hJRlQgNQorI2RlZmluZSBHUElPX1BPUlRfTUFTSyAoMHg3IDw8IEdQSU9fUE9SVF9TSElGVCkKKworI2RlZmluZSBHUElPX1BPUlRBICgwIDw8IEdQSU9fUE9SVF9TSElGVCkKKyNkZWZpbmUgR1BJT19QT1JUQiAoMSA8PCBHUElPX1BPUlRfU0hJRlQpCisjZGVmaW5lIEdQSU9fUE9SVEMgKDIgPDwgR1BJT19QT1JUX1NISUZUKQorI2RlZmluZSBHUElPX1BPUlREICgzIDw8IEdQSU9fUE9SVF9TSElGVCkKKyNkZWZpbmUgR1BJT19QT1JURSAoNCA8PCBHUElPX1BPUlRfU0hJRlQpCisjZGVmaW5lIEdQSU9fUE9SVEYgKDUgPDwgR1BJT19QT1JUX1NISUZUKQorCisjZGVmaW5lIEdQSU9fT1VUICAgKDEgPDwgOCkKKyNkZWZpbmUgR1BJT19JTiAgICAoMCA8PCA4KQorI2RlZmluZSBHUElPX1BVRU4gICgxIDw8IDkpCisKKyNkZWZpbmUgR1BJT19QRiAgICAoMSA8PCAxMCkKKyNkZWZpbmUgR1BJT19BRiAgICAoMSA8PCAxMSkKKworI2RlZmluZSBHUElPX09DUl9TSElGVCAxMgorI2RlZmluZSBHUElPX09DUl9NQVNLICgzIDw8IEdQSU9fT0NSX1NISUZUKQorI2RlZmluZSBHUElPX0FJTiAgICgwIDw8IEdQSU9fT0NSX1NISUZUKQorI2RlZmluZSBHUElPX0JJTiAgICgxIDw8IEdQSU9fT0NSX1NISUZUKQorI2RlZmluZSBHUElPX0NJTiAgICgyIDw8IEdQSU9fT0NSX1NISUZUKQorI2RlZmluZSBHUElPX0dQSU8gICgzIDw8IEdQSU9fT0NSX1NISUZUKQorCisjZGVmaW5lIEdQSU9fQU9VVF9TSElGVCAxNAorI2RlZmluZSBHUElPX0FPVVRfTUFTSyAoMyA8PCBHUElPX0FPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQU9VVCAgICAgKDAgPDwgR1BJT19BT1VUX1NISUZUKQorI2RlZmluZSBHUElPX0FPVVRfSVNSICgxIDw8IEdQSU9fQU9VVF9TSElGVCkKKyNkZWZpbmUgR1BJT19BT1VUXzAgICAoMiA8PCBHUElPX0FPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQU9VVF8xICAgKDMgPDwgR1BJT19BT1VUX1NISUZUKQorCisjZGVmaW5lIEdQSU9fQk9VVF9TSElGVCAxNgorI2RlZmluZSBHUElPX0JPVVRfTUFTSyAoMyA8PCBHUElPX0JPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQk9VVCAgICAgICgwIDw8IEdQSU9fQk9VVF9TSElGVCkKKyNkZWZpbmUgR1BJT19CT1VUX0lTUiAgKDEgPDwgR1BJT19CT1VUX1NISUZUKQorI2RlZmluZSBHUElPX0JPVVRfMCAgICAoMiA8PCBHUElPX0JPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQk9VVF8xICAgICgzIDw8IEdQSU9fQk9VVF9TSElGVCkKKworCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCisjaW5jbHVkZSA8bWFjaC9pb211eC1teDEuaD4KKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX01YMgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyeC5oPgorI2lmZGVmIENPTkZJR19NQUNIX01YMjEKKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjEuaD4KKyNlbmRpZgorI2lmZGVmIENPTkZJR19NQUNIX01YMjcKKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KKyNlbmRpZgorI2VuZGlmCisKKworLyogZGVjb2RlIGlycSBudW1iZXIgdG8gdXNlIHdpdGggSU1SKHgpLCBJU1IoeCkgYW5kIGZyaWVuZHMgKi8KKyNkZWZpbmUgSVJRX1RPX1JFRyhpcnEpICgoaXJxIC0gTVhDX0lOVEVSTkFMX0lSUVMpID4+IDUpCisKKyNkZWZpbmUgSVJRX0dQSU9BKHgpICAoTVhDX0dQSU9fSVJRX1NUQVJUICsgeCkKKyNkZWZpbmUgSVJRX0dQSU9CKHgpICAoSVJRX0dQSU9BKDMyKSArIHgpCisjZGVmaW5lIElSUV9HUElPQyh4KSAgKElSUV9HUElPQigzMikgKyB4KQorI2RlZmluZSBJUlFfR1BJT0QoeCkgIChJUlFfR1BJT0MoMzIpICsgeCkKKyNkZWZpbmUgSVJRX0dQSU9FKHgpICAoSVJRX0dQSU9EKDMyKSArIHgpCisKKworZXh0ZXJuIHZvaWQgbXhjX2dwaW9fbW9kZShpbnQgZ3Bpb19tb2RlKTsKK2V4dGVybiBpbnQgbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhjb25zdCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKKwljb25zdCBjaGFyICpsYWJlbCk7CitleHRlcm4gdm9pZCBteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMoY29uc3QgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKaW5kZXggMGI4MDgzOS4uZTA3ODNlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMTQsNyArMTQsMTIgQEAKICNpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMQogI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHgwODAwMDAwMCkKICNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgyCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyMQorI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHhDMDAwMDAwMCkKKyNlbmRpZgorI2lmZGVmIENPTkZJR19NQUNIX01YMjcKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4QTAwMDAwMDApCisjZW5kaWYKICNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgzCiAjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDgwMDAwMDAwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyMS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGM0Y2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqIENvcHlyaWdodCAyMDA5IEhvbGdlciBTY2h1cmlnLCBoczQyMzNAbWFpbC5tbi1zb2x1dGlvbnMuZGUKKyAqCisgKiBUaGlzIGNvbnRhaW5zIGkuTVgyMS1zcGVjaWZpYyBoYXJkd2FyZSBkZWZpbml0aW9ucy4gRm9yIHRob3NlCisgKiBoYXJkd2FyZSBwaWVjZXMgdGhhdCBhcmUgY29tbW9uIGJldHdlZW4gaS5NWDIxIGFuZCBpLk1YMjcsIGhhdmUgYQorICogbG9vayBhdCBteDJ4LmguCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgyMV9IX18KKyNkZWZpbmUgX19BU01fQVJDSF9NWENfTVgyMV9IX18KKworI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18KKyNlcnJvciAiRG8gbm90IGluY2x1ZGUgZGlyZWN0bHkuIgorI2VuZGlmCisKKworLyogTWVtb3J5IHJlZ2lvbnMgYW5kIENTICovCisjZGVmaW5lIFNEUkFNX0JBU0VfQUREUiAgICAgICAgIDB4QzAwMDAwMDAKKyNkZWZpbmUgQ1NEMV9CQVNFX0FERFIgICAgICAgICAgMHhDNDAwMDAwMAorCisjZGVmaW5lIENTMF9CQVNFX0FERFIgICAgICAgICAgIDB4QzgwMDAwMDAKKyNkZWZpbmUgQ1MxX0JBU0VfQUREUiAgICAgICAgICAgMHhDQzAwMDAwMAorI2RlZmluZSBDUzJfQkFTRV9BRERSICAgICAgICAgICAweEQwMDAwMDAwCisjZGVmaW5lIENTM19CQVNFX0FERFIgICAgICAgICAgIDB4RDEwMDAwMDAKKyNkZWZpbmUgQ1M0X0JBU0VfQUREUiAgICAgICAgICAgMHhEMjAwMDAwMAorI2RlZmluZSBDUzVfQkFTRV9BRERSICAgICAgICAgICAweEREMDAwMDAwCisjZGVmaW5lIFBDTUNJQV9NRU1fQkFTRV9BRERSICAgIDB4RDQwMDAwMDAKKworLyogTkFORCwgU0RSQU0sIFdFSU0gZXRjIGNvbnRyb2xsZXJzICovCisjZGVmaW5lIFhfTUVNQ19CQVNFX0FERFIgICAgICAgIDB4REYwMDAwMDAKKyNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUl9WSVJUICAgMHhGNDIwMDAwMAorI2RlZmluZSBYX01FTUNfU0laRSAgICAgICAgICAgICBTWl8yNTZLCisKKyNkZWZpbmUgU0RSQU1DX0JBU0VfQUREUiAgICAgICAgKFhfTUVNQ19CQVNFX0FERFIgKyAweDAwMDApCisjZGVmaW5lIEVJTV9CQVNFX0FERFIgICAgICAgICAgIChYX01FTUNfQkFTRV9BRERSICsgMHgxMDAwKQorI2RlZmluZSBQQ01DSUFfQ1RMX0JBU0VfQUREUiAgICAoWF9NRU1DX0JBU0VfQUREUiArIDB4MjAwMCkKKyNkZWZpbmUgTkZDX0JBU0VfQUREUiAgICAgICAgICAgKFhfTUVNQ19CQVNFX0FERFIgKyAweDMwMDApCisKKyNkZWZpbmUgSVJBTV9CQVNFX0FERFIgICAgICAgICAgMHhGRkZGRTgwMAkvKiBpbnRlcm5hbCByYW0gKi8KKworLyogdGhpcyBDUFUgc3VwcG9ydHMgdXAgdG8gMTkyIEdQSU9zIChkb24ndCBmb3JnZXQgdGhlIGJhc2Vib2FyZCEpICovCisjZGVmaW5lIEFSQ0hfTlJfR1BJT1MJCSg2KjMyICsgMTYpCisKKy8qIGZpeGVkIGludGVycnVwdCBudW1iZXJzICovCisjZGVmaW5lIE1YQ19JTlRfVVNCQ1RSTCAgICAgICAgIDU4CisjZGVmaW5lIE1YQ19JTlRfVVNCQ1RSTCAgICAgICAgIDU4CisjZGVmaW5lIE1YQ19JTlRfVVNCTU5QICAgICAgICAgIDU3CisjZGVmaW5lIE1YQ19JTlRfVVNCRlVOQyAgICAgICAgIDU2CisjZGVmaW5lIE1YQ19JTlRfVVNCSE9TVCAgICAgICAgIDU1CisjZGVmaW5lIE1YQ19JTlRfVVNCRE1BICAgICAgICAgIDU0CisjZGVmaW5lIE1YQ19JTlRfVVNCV0tVUCAgICAgICAgIDUzCisjZGVmaW5lIE1YQ19JTlRfRU1NQURFQyAgICAgICAgIDUwCisjZGVmaW5lIE1YQ19JTlRfRU1NQUVOQyAgICAgICAgIDQ5CisjZGVmaW5lIE1YQ19JTlRfQk1JICAgICAgICAgICAgIDMwCisjZGVmaW5lIE1YQ19JTlRfRklSSSAgICAgICAgICAgIDkKKworLyogZml4ZWQgRE1BIHJlcXVlc3QgbnVtYmVycyAqLworI2RlZmluZSBETUFfUkVRX0JNSV9SWCAgICAgICAgICAyOQorI2RlZmluZSBETUFfUkVRX0JNSV9UWCAgICAgICAgICAyOAorI2RlZmluZSBETUFfUkVRX0ZJUklfUlggICAgICAgICA0CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19NWDIxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmgKaW5kZXggMDMxM2JlNy4uNmU5M2YyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oCkBAIC0yLDYgKzIsMTAgQEAKICAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCiAgKgorICogVGhpcyBjb250YWlucyBpLk1YMjctc3BlY2lmaWMgaGFyZHdhcmUgZGVmaW5pdGlvbnMuIEZvciB0aG9zZQorICogaGFyZHdhcmUgcGllY2VzIHRoYXQgYXJlIGNvbW1vbiBiZXR3ZWVuIGkuTVgyMSBhbmQgaS5NWDI3LCBoYXZlIGEKKyAqIGxvb2sgYXQgbXgyeC5oLgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgpAQCAtMjcsMzUgKzMxLDYgQEAKIC8qIElSQU0gKi8KICNkZWZpbmUgSVJBTV9CQVNFX0FERFIgICAgICAgICAgMHhGRkZGNEMwMAkvKiBpbnRlcm5hbCByYW0gKi8KIAotLyogUmVnaXN0ZXIgb2ZmZXN0cyAqLwotI2RlZmluZSBBSVBJX0JBU0VfQUREUiAgICAgICAgICAweDEwMDAwMDAwCi0jZGVmaW5lIEFJUElfQkFTRV9BRERSX1ZJUlQgICAgIDB4RjQwMDAwMDAKLSNkZWZpbmUgQUlQSV9TSVpFICAgICAgICAgICAgICAgU1pfMU0KLQotI2RlZmluZSBETUFfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDAxMDAwKQotI2RlZmluZSBXRE9HX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDAyMDAwKQotI2RlZmluZSBHUFQxX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDAzMDAwKQotI2RlZmluZSBHUFQyX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA0MDAwKQotI2RlZmluZSBHUFQzX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA1MDAwKQotI2RlZmluZSBQV01fQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA2MDAwKQotI2RlZmluZSBSVENfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA3MDAwKQotI2RlZmluZSBLUFBfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA4MDAwKQotI2RlZmluZSBPV0lSRV9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDA5MDAwKQotI2RlZmluZSBVQVJUMV9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBBMDAwKQotI2RlZmluZSBVQVJUMl9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBCMDAwKQotI2RlZmluZSBVQVJUM19CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBDMDAwKQotI2RlZmluZSBVQVJUNF9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBEMDAwKQotI2RlZmluZSBDU1BJMV9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBFMDAwKQotI2RlZmluZSBDU1BJMl9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDBGMDAwKQotI2RlZmluZSBTU0kxX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDEwMDAwKQotI2RlZmluZSBTU0kyX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDExMDAwKQotI2RlZmluZSBJMkNfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDEyMDAwKQotI2RlZmluZSBTREhDMV9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDEzMDAwKQotI2RlZmluZSBTREhDMl9CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDE0MDAwKQotI2RlZmluZSBHUElPX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDE1MDAwKQotI2RlZmluZSBBVURNVVhfQkFTRV9BRERSICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDE2MDAwKQotCi0jZGVmaW5lIENTUEkzX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTcwMDApCiAjZGVmaW5lIE1TSENfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTgwMDApCiAjZGVmaW5lIEdQVDVfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTkwMDApCiAjZGVmaW5lIEdQVDRfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MUEwMDApCkBAIC02NCw0MSArMzksMzMgQEAKICNkZWZpbmUgSTJDMl9CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxRDAwMCkKICNkZWZpbmUgU0RIQzNfQkFTRV9BRERSICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxRTAwMCkKICNkZWZpbmUgR1BUNl9CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgxRjAwMCkKLQotI2RlZmluZSBMQ0RDX0JBU0VfQUREUiAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDIxMDAwKQotI2RlZmluZSBTTENEQ19CQVNFX0FERFIgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDIyMDAwKQogI2RlZmluZSBWUFVfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDIzMDAwKQotI2RlZmluZSBVU0JPVEdfQkFTRV9BRERSICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDI0MDAwKQotLyogZm9yIG14MjcqLwogI2RlZmluZSBPVEdfQkFTRV9BRERSICAgICAgICAgICBVU0JPVEdfQkFTRV9BRERSCiAjZGVmaW5lIFNBSEFSQV9CQVNFX0FERFIgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjUwMDApCi0jZGVmaW5lIEVNTUFfUFBfQkFTRV9BRERSICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjYwMDApCi0jZGVmaW5lIEVNTUFfUFJQX0JBU0VfQUREUiAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjY0MDApCi0jZGVmaW5lIENDTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjcwMDApCi0jZGVmaW5lIFNZU0NUUkxfQkFTRV9BRERSICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4Mjc4MDApCiAjZGVmaW5lIElJTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjgwMDApCi0KICNkZWZpbmUgUlRJQ19CQVNFX0FERFIgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyQTAwMCkKICNkZWZpbmUgRkVDX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyQjAwMCkKICNkZWZpbmUgU0NDX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgyQzAwMCkKICNkZWZpbmUgRVRCX0JBU0VfQUREUiAgICAgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgzQjAwMCkKICNkZWZpbmUgRVRCX1JBTV9CQVNFX0FERFIgICAgICAgKEFJUElfQkFTRV9BRERSICsgMHgzQzAwMCkKIAotI2RlZmluZSBKQU1fQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDNFMDAwKQotI2RlZmluZSBNQVhfQkFTRV9BRERSICAgICAgICAgICAoQUlQSV9CQVNFX0FERFIgKyAweDNGMDAwKQotCi0vKiBST01QIGFuZCBBVklDICovCisvKiBST00gcGF0Y2ggKi8KICNkZWZpbmUgUk9NUF9CQVNFX0FERFIgICAgICAgICAgMHgxMDA0MTAwMAogCi0jZGVmaW5lIEFWSUNfQkFTRV9BRERSICAgICAgICAgIDB4MTAwNDAwMDAKLQotI2RlZmluZSBTQUhCMV9CQVNFX0FERFIgICAgICAgICAweDgwMDAwMDAwCi0jZGVmaW5lIFNBSEIxX0JBU0VfQUREUl9WSVJUICAgIDB4RjQxMDAwMDAKLSNkZWZpbmUgU0FIQjFfU0laRSAgICAgICAgICAgICAgU1pfMU0KLQotI2RlZmluZSBDU0lfQkFTRV9BRERSICAgICAgICAgICAoU0FIQjFfQkFTRV9BRERSICsgMHgwMDAwKQogI2RlZmluZSBBVEFfQkFTRV9BRERSICAgICAgICAgICAoU0FIQjFfQkFTRV9BRERSICsgMHgxMDAwKQogCisvKiBNZW1vcnkgcmVnaW9ucyBhbmQgQ1MgKi8KKyNkZWZpbmUgU0RSQU1fQkFTRV9BRERSICAgICAgICAgMHhBMDAwMDAwMAorI2RlZmluZSBDU0QxX0JBU0VfQUREUiAgICAgICAgICAweEIwMDAwMDAwCisKKyNkZWZpbmUgQ1MwX0JBU0VfQUREUiAgICAgICAgICAgMHhDMDAwMDAwMAorI2RlZmluZSBDUzFfQkFTRV9BRERSICAgICAgICAgICAweEM4MDAwMDAwCisjZGVmaW5lIENTMl9CQVNFX0FERFIgICAgICAgICAgIDB4RDAwMDAwMDAKKyNkZWZpbmUgQ1MzX0JBU0VfQUREUiAgICAgICAgICAgMHhEMjAwMDAwMAorI2RlZmluZSBDUzRfQkFTRV9BRERSICAgICAgICAgICAweEQ0MDAwMDAwCisjZGVmaW5lIENTNV9CQVNFX0FERFIgICAgICAgICAgIDB4RDYwMDAwMDAKKyNkZWZpbmUgUENNQ0lBX01FTV9CQVNFX0FERFIgICAgMHhEQzAwMDAwMAorCiAvKiBOQU5ELCBTRFJBTSwgV0VJTSwgTTNJRiwgRU1JIGNvbnRyb2xsZXJzICovCiAjZGVmaW5lIFhfTUVNQ19CQVNFX0FERFIgICAgICAgIDB4RDgwMDAwMDAKICNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUl9WSVJUICAgMHhGNDIwMDAwMApAQCAtMTEwLDU2ICs3Nyw5IEBACiAjZGVmaW5lIE0zSUZfQkFTRV9BRERSICAgICAgICAgIChYX01FTUNfQkFTRV9BRERSICsgMHgzMDAwKQogI2RlZmluZSBQQ01DSUFfQ1RMX0JBU0VfQUREUiAgICAoWF9NRU1DX0JBU0VfQUREUiArIDB4NDAwMCkKIAotLyogTWVtb3J5IHJlZ2lvbnMgYW5kIENTICovCi0jZGVmaW5lIFNEUkFNX0JBU0VfQUREUgkJMHhBMDAwMDAwMAotI2RlZmluZSBDU0QxX0JBU0VfQUREUgkJMHhCMDAwMDAwMAotCi0jZGVmaW5lIENTMF9CQVNFX0FERFIgICAgICAgICAgIDB4QzAwMDAwMDAKLSNkZWZpbmUgQ1MxX0JBU0VfQUREUiAgICAgICAgICAgMHhDODAwMDAwMAotI2RlZmluZSBDUzJfQkFTRV9BRERSICAgICAgICAgICAweEQwMDAwMDAwCi0jZGVmaW5lIENTM19CQVNFX0FERFIgICAgICAgICAgIDB4RDIwMDAwMDAKLSNkZWZpbmUgQ1M0X0JBU0VfQUREUiAgICAgICAgICAgMHhENDAwMDAwMAotI2RlZmluZSBDUzVfQkFTRV9BRERSICAgICAgICAgICAweEQ2MDAwMDAwCi0jZGVmaW5lIFBDTUNJQV9NRU1fQkFTRV9BRERSICAgIDB4REMwMDAwMDAKLQotLyoKLSAqIFRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgcGh5c2ljYWwgdG8gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmcgZm9yIGFsbCB0aGUKLSAqIHBlcmlwaGVyYWwgbW9kdWxlcy4gSXQgaXMgdXNlZCBieSBwYXNzaW5nIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzIHgKLSAqIGFuZCByZXR1cm5pbmcgdGhlIHZpcnR1YWwgYWRkcmVzcy4gSWYgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgbm90IG1hcHBlZCwKLSAqIGl0IHJldHVybnMgMHhERUFEQkVFRgotICovCi0jZGVmaW5lIElPX0FERFJFU1MoeCkgICBcCi0JKHZvaWQgX19pb21lbSAqKSBcCi0JKCgoeCA+PSBBSVBJX0JBU0VfQUREUikgJiYgKHggPCAoQUlQSV9CQVNFX0FERFIgKyBBSVBJX1NJWkUpKSkgPyBcCi0JCUFJUElfSU9fQUREUkVTUyh4KSA6IFwKLQkoKHggPj0gU0FIQjFfQkFTRV9BRERSKSAmJiAoeCA8IChTQUhCMV9CQVNFX0FERFIgKyBTQUhCMV9TSVpFKSkpID8gXAotCQlTQUhCMV9JT19BRERSRVNTKHgpIDogXAotCSgoeCA+PSBYX01FTUNfQkFTRV9BRERSKSAmJiAoeCA8IChYX01FTUNfQkFTRV9BRERSICsgWF9NRU1DX1NJWkUpKSkgPyBcCi0JCVhfTUVNQ19JT19BRERSRVNTKHgpIDogMHhERUFEQkVFRikKLQotLyogZGVmaW5lIHRoZSBhZGRyZXNzIG1hcHBpbmcgbWFjcm9zOiBpbiBwaHlzaWNhbCBhZGRyZXNzIG9yZGVyICovCi0jZGVmaW5lIEFJUElfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gQUlQSV9CQVNFX0FERFIpICsgQUlQSV9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBBVklDX0lPX0FERFJFU1MoeCkJQUlQSV9JT19BRERSRVNTKHgpCi0KLSNkZWZpbmUgU0FIQjFfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gU0FIQjFfQkFTRV9BRERSKSArIFNBSEIxX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIENTNF9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBDUzRfQkFTRV9BRERSKSArIENTNF9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBYX01FTUNfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgUENNQ0lBX0lPX0FERFJFU1MoeCkgXAotCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCi0KLS8qIGZpeGVkIGludGVycnB1dCBudW1iZXJzICovCisvKiBmaXhlZCBpbnRlcnJ1cHQgbnVtYmVycyAqLwogI2RlZmluZSBNWENfSU5UX0NDTQkJNjMKICNkZWZpbmUgTVhDX0lOVF9JSU0JCTYyCi0jZGVmaW5lIE1YQ19JTlRfTENEQwkJNjEKLSNkZWZpbmUgTVhDX0lOVF9TTENEQwkJNjAKICNkZWZpbmUgTVhDX0lOVF9TQUhBUkEJCTU5CiAjZGVmaW5lIE1YQ19JTlRfU0NDX1NDTQkJNTgKICNkZWZpbmUgTVhDX0lOVF9TQ0NfU01OCQk1NwpAQCAtMTY3LDU0ICs4NywxMiBAQAogI2RlZmluZSBNWENfSU5UX1VTQjIJCTU1CiAjZGVmaW5lIE1YQ19JTlRfVVNCMQkJNTQKICNkZWZpbmUgTVhDX0lOVF9WUFUJCTUzCi0jZGVmaW5lIE1YQ19JTlRfRU1NQVBQCQk1MgotI2RlZmluZSBNWENfSU5UX0VNTUFQUlAJCTUxCiAjZGVmaW5lIE1YQ19JTlRfRkVDCQk1MAogI2RlZmluZSBNWENfSU5UX1VBUlQ1CQk0OQogI2RlZmluZSBNWENfSU5UX1VBUlQ2CQk0OAotI2RlZmluZSBNWENfSU5UX0RNQUNIMTUJCTQ3Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gxNAkJNDYKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDEzCQk0NQotI2RlZmluZSBNWENfSU5UX0RNQUNIMTIJCTQ0Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gxMQkJNDMKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDEwCQk0MgotI2RlZmluZSBNWENfSU5UX0RNQUNIOQkJNDEKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDgJCTQwCi0jZGVmaW5lIE1YQ19JTlRfRE1BQ0g3CQkzOQotI2RlZmluZSBNWENfSU5UX0RNQUNINgkJMzgKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDUJCTM3Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0g0CQkzNgotI2RlZmluZSBNWENfSU5UX0RNQUNIMwkJMzUKLSNkZWZpbmUgTVhDX0lOVF9ETUFDSDIJCTM0Ci0jZGVmaW5lIE1YQ19JTlRfRE1BQ0gxCQkzMwotI2RlZmluZSBNWENfSU5UX0RNQUNIMAkJMzIKLSNkZWZpbmUgTVhDX0lOVF9DU0kJCTMxCiAjZGVmaW5lIE1YQ19JTlRfQVRBCQkzMAotI2RlZmluZSBNWENfSU5UX05BTkRGQwkJMjkKLSNkZWZpbmUgTVhDX0lOVF9QQ01DSUEJCTI4Ci0jZGVmaW5lIE1YQ19JTlRfV0RPRwkJMjcKLSNkZWZpbmUgTVhDX0lOVF9HUFQxCQkyNgotI2RlZmluZSBNWENfSU5UX0dQVDIJCTI1Ci0jZGVmaW5lIE1YQ19JTlRfR1BUMwkJMjQKLSNkZWZpbmUgTVhDX0lOVF9HUFQJCUlOVF9HUFQxCi0jZGVmaW5lIE1YQ19JTlRfUFdNCQkyMwotI2RlZmluZSBNWENfSU5UX1JUQwkJMjIKLSNkZWZpbmUgTVhDX0lOVF9LUFAJCTIxCi0jZGVmaW5lIE1YQ19JTlRfVUFSVDEJCTIwCi0jZGVmaW5lIE1YQ19JTlRfVUFSVDIJCTE5Ci0jZGVmaW5lIE1YQ19JTlRfVUFSVDMJCTE4Ci0jZGVmaW5lIE1YQ19JTlRfVUFSVDQJCTE3Ci0jZGVmaW5lIE1YQ19JTlRfQ1NQSTEJCTE2Ci0jZGVmaW5lIE1YQ19JTlRfQ1NQSTIJCTE1Ci0jZGVmaW5lIE1YQ19JTlRfU1NJMQkJMTQKLSNkZWZpbmUgTVhDX0lOVF9TU0kyCQkxMwotI2RlZmluZSBNWENfSU5UX0kyQwkJMTIKLSNkZWZpbmUgTVhDX0lOVF9TREhDMQkJMTEKLSNkZWZpbmUgTVhDX0lOVF9TREhDMgkJMTAKICNkZWZpbmUgTVhDX0lOVF9TREhDMwkJOQotI2RlZmluZSBNWENfSU5UX0dQSU8JCTgKICNkZWZpbmUgTVhDX0lOVF9TREhDCQk3Ci0jZGVmaW5lIE1YQ19JTlRfQ1NQSTMJCTYKICNkZWZpbmUgTVhDX0lOVF9SVElDCQk1CiAjZGVmaW5lIE1YQ19JTlRfR1BUNAkJNAogI2RlZmluZSBNWENfSU5UX0dQVDUJCTMKQEAgLTIyOCwzNiArMTA2LDkgQEAKICNkZWZpbmUgRE1BX1JFUV9VQVJUNl9UWCAgICAgICAgMzQKICNkZWZpbmUgRE1BX1JFUV9VQVJUNV9SWCAgICAgICAgMzMKICNkZWZpbmUgRE1BX1JFUV9VQVJUNV9UWCAgICAgICAgMzIKLSNkZWZpbmUgRE1BX1JFUV9DU0lfUlggICAgICAgICAgMzEKLSNkZWZpbmUgRE1BX1JFUV9DU0lfU1RBVCAgICAgICAgMzAKICNkZWZpbmUgRE1BX1JFUV9BVEFfUkNWICAgICAgICAgMjkKICNkZWZpbmUgRE1BX1JFUV9BVEFfVFggICAgICAgICAgMjgKLSNkZWZpbmUgRE1BX1JFUV9VQVJUMV9UWCAgICAgICAgMjcKLSNkZWZpbmUgRE1BX1JFUV9VQVJUMV9SWCAgICAgICAgMjYKLSNkZWZpbmUgRE1BX1JFUV9VQVJUMl9UWCAgICAgICAgMjUKLSNkZWZpbmUgRE1BX1JFUV9VQVJUMl9SWCAgICAgICAgMjQKLSNkZWZpbmUgRE1BX1JFUV9VQVJUM19UWCAgICAgICAgMjMKLSNkZWZpbmUgRE1BX1JFUV9VQVJUM19SWCAgICAgICAgMjIKLSNkZWZpbmUgRE1BX1JFUV9VQVJUNF9UWCAgICAgICAgMjEKLSNkZWZpbmUgRE1BX1JFUV9VQVJUNF9SWCAgICAgICAgMjAKLSNkZWZpbmUgRE1BX1JFUV9DU1BJMV9UWCAgICAgICAgMTkKLSNkZWZpbmUgRE1BX1JFUV9DU1BJMV9SWCAgICAgICAgMTgKLSNkZWZpbmUgRE1BX1JFUV9DU1BJMl9UWCAgICAgICAgMTcKLSNkZWZpbmUgRE1BX1JFUV9DU1BJMl9SWCAgICAgICAgMTYKLSNkZWZpbmUgRE1BX1JFUV9TU0kxX1RYMSAgICAgICAgMTUKLSNkZWZpbmUgRE1BX1JFUV9TU0kxX1JYMSAgICAgICAgMTQKLSNkZWZpbmUgRE1BX1JFUV9TU0kxX1RYMCAgICAgICAgMTMKLSNkZWZpbmUgRE1BX1JFUV9TU0kxX1JYMCAgICAgICAgMTIKLSNkZWZpbmUgRE1BX1JFUV9TU0kyX1RYMSAgICAgICAgMTEKLSNkZWZpbmUgRE1BX1JFUV9TU0kyX1JYMSAgICAgICAgMTAKLSNkZWZpbmUgRE1BX1JFUV9TU0kyX1RYMCAgICAgICAgOQotI2RlZmluZSBETUFfUkVRX1NTSTJfUlgwICAgICAgICA4Ci0jZGVmaW5lIERNQV9SRVFfU0RIQzEgICAgICAgICAgIDcKLSNkZWZpbmUgRE1BX1JFUV9TREhDMiAgICAgICAgICAgNgogI2RlZmluZSBETUFfUkVRX01TSEMgICAgICAgICAgICA0Ci0jZGVmaW5lIERNQV9SRVFfRVhUICAgICAgICAgICAgIDMKLSNkZWZpbmUgRE1BX1JFUV9DU1BJM19UWCAgICAgICAgMgotI2RlZmluZSBETUFfUkVRX0NTUEkzX1JYICAgICAgICAxCiAKIC8qIHNpbGljb24gcmV2aXNpb25zIHNwZWNpZmljIHRvIGkuTVgyNyAqLwogI2RlZmluZSBDSElQX1JFVl8xXzAJCTB4MDAKQEAgLTI2NywyNSArMTE4LDggQEAKIGV4dGVybiBpbnQgbXgyN19yZXZpc2lvbih2b2lkKTsKICNlbmRpZgogCi0vKiBncGlvIGFuZCBncGlvIGJhc2VkIGludGVycnVwdCBoYW5kbGluZyAqLwotI2RlZmluZSBHUElPX0RSCQkgCTB4MUMKLSNkZWZpbmUgR1BJT19HRElSCSAJMHgwMAotI2RlZmluZSBHUElPX1BTUgkgCTB4MjQKLSNkZWZpbmUgR1BJT19JQ1IxCSAJMHgyOAotI2RlZmluZSBHUElPX0lDUjIJIAkweDJDCi0jZGVmaW5lIEdQSU9fSU1SCSAJMHgzMAotI2RlZmluZSBHUElPX0lTUgkgCTB4MzQKLSNkZWZpbmUgR1BJT19JTlRfTE9XX0xFVgkweDMKLSNkZWZpbmUgR1BJT19JTlRfSElHSF9MRVYJMHgyCi0jZGVmaW5lIEdQSU9fSU5UX1JJU0VfRURHRSAJMHgwCi0jZGVmaW5lIEdQSU9fSU5UX0ZBTExfRURHRQkweDEKLSNkZWZpbmUgR1BJT19JTlRfTk9ORQkJMHg0Ci0KIC8qIE1hbmRhdG9yeSBkZWZpbmVzIHVzZWQgZ2xvYmFsbHkgKi8KIAotLyogdGhpcyBpcyBhbiBpLk1YMjcgQ1BVICovCi0jZGVmaW5lIGNwdV9pc19teDI3KCkJCSgxKQotCiAvKiB0aGlzIENQVSBzdXBwb3J0cyB1cCB0byAxOTIgR1BJT3MgKGRvbid0IGZvcmdldCB0aGUgYmFzZWJvYXJkISkgKi8KICNkZWZpbmUgQVJDSF9OUl9HUElPUwkJKDE5MiArIDE2KQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyeC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzQwZDNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MnguaApAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4IEp1ZXJnZW4gQmVpc2VydCwga2VybmVsQHBlbmd1dHJvbml4LmRlCisgKgorICogVGhpcyBjb250YWlucyBoYXJkd2FyZSBkZWZpbml0aW9ucyB0aGF0IGFyZSBjb21tb24gYmV0d2VlbiBpLk1YMjEgYW5kCisgKiBpLk1YMjcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgyeF9IX18KKyNkZWZpbmUgX19BU01fQVJDSF9NWENfTVgyeF9IX18KKworI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19IQVJEV0FSRV9IX18KKyNlcnJvciAiRG8gbm90IGluY2x1ZGUgZGlyZWN0bHkuIgorI2VuZGlmCisKKy8qIFRoZSBmb2xsb3dpbmcgYWRkcmVzc2VzIGFyZSBjb21tb24gYmV0d2VlbiBpLk1YMjEgYW5kIGkuTVgyNyAqLworCisvKiBSZWdpc3RlciBvZmZlc3RzICovCisjZGVmaW5lIEFJUElfQkFTRV9BRERSICAgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgQUlQSV9CQVNFX0FERFJfVklSVCAgICAgMHhGNDAwMDAwMAorI2RlZmluZSBBSVBJX1NJWkUgICAgICAgICAgICAgICBTWl8xTQorCisjZGVmaW5lIERNQV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDEwMDApCisjZGVmaW5lIFdET0dfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDIwMDApCisjZGVmaW5lIEdQVDFfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDMwMDApCisjZGVmaW5lIEdQVDJfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDQwMDApCisjZGVmaW5lIEdQVDNfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDUwMDApCisjZGVmaW5lIFBXTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDYwMDApCisjZGVmaW5lIFJUQ19CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDcwMDApCisjZGVmaW5lIEtQUF9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDgwMDApCisjZGVmaW5lIE9XSVJFX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MDkwMDApCisjZGVmaW5lIFVBUlQxX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEEwMDApCisjZGVmaW5lIFVBUlQyX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEIwMDApCisjZGVmaW5lIFVBUlQzX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEMwMDApCisjZGVmaW5lIFVBUlQ0X0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEQwMDApCisjZGVmaW5lIENTUEkxX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEUwMDApCisjZGVmaW5lIENTUEkyX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MEYwMDApCisjZGVmaW5lIFNTSTFfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTAwMDApCisjZGVmaW5lIFNTSTJfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTEwMDApCisjZGVmaW5lIEkyQ19CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTIwMDApCisjZGVmaW5lIFNESEMxX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTMwMDApCisjZGVmaW5lIFNESEMyX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTQwMDApCisjZGVmaW5lIEdQSU9fQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTUwMDApCisjZGVmaW5lIEFVRE1VWF9CQVNFX0FERFIgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTYwMDApCisjZGVmaW5lIENTUEkzX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MTcwMDApCisjZGVmaW5lIExDRENfQkFTRV9BRERSICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjEwMDApCisjZGVmaW5lIFNMQ0RDX0JBU0VfQUREUiAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjIwMDApCisjZGVmaW5lIFVTQk9UR19CQVNFX0FERFIgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjQwMDApCisjZGVmaW5lIEVNTUFfUFBfQkFTRV9BRERSICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjYwMDApCisjZGVmaW5lIEVNTUFfUFJQX0JBU0VfQUREUiAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjY0MDApCisjZGVmaW5lIENDTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4MjcwMDApCisjZGVmaW5lIFNZU0NUUkxfQkFTRV9BRERSICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4Mjc4MDApCisjZGVmaW5lIEpBTV9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4M0UwMDApCisjZGVmaW5lIE1BWF9CQVNFX0FERFIgICAgICAgICAgIChBSVBJX0JBU0VfQUREUiArIDB4M0YwMDApCisKKyNkZWZpbmUgQVZJQ19CQVNFX0FERFIgICAgICAgICAgMHgxMDA0MDAwMAorCisjZGVmaW5lIFNBSEIxX0JBU0VfQUREUiAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgU0FIQjFfQkFTRV9BRERSX1ZJUlQgICAgMHhGNDEwMDAwMAorI2RlZmluZSBTQUhCMV9TSVpFICAgICAgICAgICAgICBTWl8xTQorCisjZGVmaW5lIENTSV9CQVNFX0FERFIgICAgICAgICAgIChTQUhCMV9CQVNFX0FERFIgKyAweDAwMDApCisKKy8qCisgKiBUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBoeXNpY2FsIHRvIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGZvciBhbGwgdGhlCisgKiBwZXJpcGhlcmFsIG1vZHVsZXMuIEl0IGlzIHVzZWQgYnkgcGFzc2luZyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhcyB4CisgKiBhbmQgcmV0dXJuaW5nIHRoZSB2aXJ0dWFsIGFkZHJlc3MuIElmIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzIG5vdCBtYXBwZWQsCisgKiBpdCByZXR1cm5zIDB4REVBREJFRUYKKyAqLworI2RlZmluZSBJT19BRERSRVNTKHgpICAgXAorCSh2b2lkIF9fZm9yY2UgX19pb21lbSAqKSBcCisJKCgoeCA+PSBBSVBJX0JBU0VfQUREUikgJiYgKHggPCAoQUlQSV9CQVNFX0FERFIgKyBBSVBJX1NJWkUpKSkgPyBcCisJCUFJUElfSU9fQUREUkVTUyh4KSA6IFwKKwkoKHggPj0gU0FIQjFfQkFTRV9BRERSKSAmJiAoeCA8IChTQUhCMV9CQVNFX0FERFIgKyBTQUhCMV9TSVpFKSkpID8gXAorCQlTQUhCMV9JT19BRERSRVNTKHgpIDogXAorCSgoeCA+PSBYX01FTUNfQkFTRV9BRERSKSAmJiAoeCA8IChYX01FTUNfQkFTRV9BRERSICsgWF9NRU1DX1NJWkUpKSkgPyBcCisJCVhfTUVNQ19JT19BRERSRVNTKHgpIDogMHhERUFEQkVFRikKKworLyogZGVmaW5lIHRoZSBhZGRyZXNzIG1hcHBpbmcgbWFjcm9zOiBpbiBwaHlzaWNhbCBhZGRyZXNzIG9yZGVyICovCisjZGVmaW5lIEFJUElfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gQUlQSV9CQVNFX0FERFIpICsgQUlQSV9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBBVklDX0lPX0FERFJFU1MoeCkJQUlQSV9JT19BRERSRVNTKHgpCisKKyNkZWZpbmUgU0FIQjFfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gU0FIQjFfQkFTRV9BRERSKSArIFNBSEIxX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIENTNF9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBDUzRfQkFTRV9BRERSKSArIENTNF9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBYX01FTUNfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgUENNQ0lBX0lPX0FERFJFU1MoeCkgXAorCSgoKHgpIC0gWF9NRU1DX0JBU0VfQUREUikgKyBYX01FTUNfQkFTRV9BRERSX1ZJUlQpCisKKy8qIGZpeGVkIGludGVycnVwdCBudW1iZXJzICovCisjZGVmaW5lIE1YQ19JTlRfTENEQwkJNjEKKyNkZWZpbmUgTVhDX0lOVF9TTENEQwkJNjAKKyNkZWZpbmUgTVhDX0lOVF9FTU1BUFAJCTUyCisjZGVmaW5lIE1YQ19JTlRfRU1NQVBSUAkJNTEKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDE1CQk0NworI2RlZmluZSBNWENfSU5UX0RNQUNIMTQJCTQ2CisjZGVmaW5lIE1YQ19JTlRfRE1BQ0gxMwkJNDUKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDEyCQk0NAorI2RlZmluZSBNWENfSU5UX0RNQUNIMTEJCTQzCisjZGVmaW5lIE1YQ19JTlRfRE1BQ0gxMAkJNDIKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDkJCTQxCisjZGVmaW5lIE1YQ19JTlRfRE1BQ0g4CQk0MAorI2RlZmluZSBNWENfSU5UX0RNQUNINwkJMzkKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDYJCTM4CisjZGVmaW5lIE1YQ19JTlRfRE1BQ0g1CQkzNworI2RlZmluZSBNWENfSU5UX0RNQUNINAkJMzYKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDMJCTM1CisjZGVmaW5lIE1YQ19JTlRfRE1BQ0gyCQkzNAorI2RlZmluZSBNWENfSU5UX0RNQUNIMQkJMzMKKyNkZWZpbmUgTVhDX0lOVF9ETUFDSDAJCTMyCisjZGVmaW5lIE1YQ19JTlRfQ1NJCQkzMQorI2RlZmluZSBNWENfSU5UX05BTkRGQwkJMjkKKyNkZWZpbmUgTVhDX0lOVF9QQ01DSUEJCTI4CisjZGVmaW5lIE1YQ19JTlRfV0RPRwkJMjcKKyNkZWZpbmUgTVhDX0lOVF9HUFQxCQkyNgorI2RlZmluZSBNWENfSU5UX0dQVDIJCTI1CisjZGVmaW5lIE1YQ19JTlRfR1BUMwkJMjQKKyNkZWZpbmUgTVhDX0lOVF9HUFQJCUlOVF9HUFQxCisjZGVmaW5lIE1YQ19JTlRfUFdNCQkyMworI2RlZmluZSBNWENfSU5UX1JUQwkJMjIKKyNkZWZpbmUgTVhDX0lOVF9LUFAJCTIxCisjZGVmaW5lIE1YQ19JTlRfVUFSVDEJCTIwCisjZGVmaW5lIE1YQ19JTlRfVUFSVDIJCTE5CisjZGVmaW5lIE1YQ19JTlRfVUFSVDMJCTE4CisjZGVmaW5lIE1YQ19JTlRfVUFSVDQJCTE3CisjZGVmaW5lIE1YQ19JTlRfQ1NQSTEJCTE2CisjZGVmaW5lIE1YQ19JTlRfQ1NQSTIJCTE1CisjZGVmaW5lIE1YQ19JTlRfU1NJMQkJMTQKKyNkZWZpbmUgTVhDX0lOVF9TU0kyCQkxMworI2RlZmluZSBNWENfSU5UX0kyQwkJMTIKKyNkZWZpbmUgTVhDX0lOVF9TREhDMQkJMTEKKyNkZWZpbmUgTVhDX0lOVF9TREhDMgkJMTAKKyNkZWZpbmUgTVhDX0lOVF9HUElPCQk4CisjZGVmaW5lIE1YQ19JTlRfQ1NQSTMJCTYKKworLyogZ3BpbyBhbmQgZ3BpbyBiYXNlZCBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KKyNkZWZpbmUgR1BJT19EUgkJIAkweDFDCisjZGVmaW5lIEdQSU9fR0RJUgkgCTB4MDAKKyNkZWZpbmUgR1BJT19QU1IJIAkweDI0CisjZGVmaW5lIEdQSU9fSUNSMQkgCTB4MjgKKyNkZWZpbmUgR1BJT19JQ1IyCSAJMHgyQworI2RlZmluZSBHUElPX0lNUgkgCTB4MzAKKyNkZWZpbmUgR1BJT19JU1IJIAkweDM0CisjZGVmaW5lIEdQSU9fSU5UX0xPV19MRVYJMHgzCisjZGVmaW5lIEdQSU9fSU5UX0hJR0hfTEVWCTB4MgorI2RlZmluZSBHUElPX0lOVF9SSVNFX0VER0UgCTB4MAorI2RlZmluZSBHUElPX0lOVF9GQUxMX0VER0UJMHgxCisjZGVmaW5lIEdQSU9fSU5UX05PTkUJCTB4NAorCisvKiBmaXhlZCBETUEgcmVxdWVzdCBudW1iZXJzICovCisjZGVmaW5lIERNQV9SRVFfQ1NJX1JYICAgICAgICAgIDMxCisjZGVmaW5lIERNQV9SRVFfQ1NJX1NUQVQgICAgICAgIDMwCisjZGVmaW5lIERNQV9SRVFfVUFSVDFfVFggICAgICAgIDI3CisjZGVmaW5lIERNQV9SRVFfVUFSVDFfUlggICAgICAgIDI2CisjZGVmaW5lIERNQV9SRVFfVUFSVDJfVFggICAgICAgIDI1CisjZGVmaW5lIERNQV9SRVFfVUFSVDJfUlggICAgICAgIDI0CisjZGVmaW5lIERNQV9SRVFfVUFSVDNfVFggICAgICAgIDIzCisjZGVmaW5lIERNQV9SRVFfVUFSVDNfUlggICAgICAgIDIyCisjZGVmaW5lIERNQV9SRVFfVUFSVDRfVFggICAgICAgIDIxCisjZGVmaW5lIERNQV9SRVFfVUFSVDRfUlggICAgICAgIDIwCisjZGVmaW5lIERNQV9SRVFfQ1NQSTFfVFggICAgICAgIDE5CisjZGVmaW5lIERNQV9SRVFfQ1NQSTFfUlggICAgICAgIDE4CisjZGVmaW5lIERNQV9SRVFfQ1NQSTJfVFggICAgICAgIDE3CisjZGVmaW5lIERNQV9SRVFfQ1NQSTJfUlggICAgICAgIDE2CisjZGVmaW5lIERNQV9SRVFfU1NJMV9UWDEgICAgICAgIDE1CisjZGVmaW5lIERNQV9SRVFfU1NJMV9SWDEgICAgICAgIDE0CisjZGVmaW5lIERNQV9SRVFfU1NJMV9UWDAgICAgICAgIDEzCisjZGVmaW5lIERNQV9SRVFfU1NJMV9SWDAgICAgICAgIDEyCisjZGVmaW5lIERNQV9SRVFfU1NJMl9UWDEgICAgICAgIDExCisjZGVmaW5lIERNQV9SRVFfU1NJMl9SWDEgICAgICAgIDEwCisjZGVmaW5lIERNQV9SRVFfU1NJMl9UWDAgICAgICAgIDkKKyNkZWZpbmUgRE1BX1JFUV9TU0kyX1JYMCAgICAgICAgOAorI2RlZmluZSBETUFfUkVRX1NESEMxICAgICAgICAgICA3CisjZGVmaW5lIERNQV9SRVFfU0RIQzIgICAgICAgICAgIDYKKyNkZWZpbmUgRE1BX1JFUV9FWFQgICAgICAgICAgICAgMworI2RlZmluZSBETUFfUkVRX0NTUEkzX1RYICAgICAgICAyCisjZGVmaW5lIERNQV9SRVFfQ1NQSTNfUlggICAgICAgIDEKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX01YMnhfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzEuaAppbmRleCBkZTAyNjY1Li4wYjA2OTQxYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzEuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCkBAIC0xLDM2MCArMSw0NSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqLwotCi0vKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX01YMzFfSF9fCi0jZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX01YMzFfSF9fCi0KLSNpZm5kZWYgX19BU01fQVJDSF9NWENfSEFSRFdBUkVfSF9fCi0jZXJyb3IgIkRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5LiIKLSNlbmRpZgotCi0vKgotICogTVgzMSBtZW1vcnkgbWFwOgotICoKLSAqIFZpcnQJCVBoeXMJCVNpemUJV2hhdAotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBGODAwMDAwMAkxRkZDMDAwMAkxNksJSVJBTQotICogRjkwMDAwMDAJMzAwMDAwMDAJMjU2TQlMMkNDCi0gKiBGQzAwMDAwMAk0M0YwMDAwMAkxTQlBSVBTIDEKLSAqIEZDMTAwMDAwCTUwMDAwMDAwCTFNCVNQQkEKLSAqIEZDMjAwMDAwCTUzRjAwMDAwCTFNCUFJUFMgMgotICogRkM1MDAwMDAJNjAwMDAwMDAJMTI4TQlST01QQVRDSAotICogRkM0MDAwMDAJNjgwMDAwMDAJMTI4TQlBVklDCi0gKiAgICAgICAgIAk3MDAwMDAwMAkyNTZNCUlQVSAoTUFYIE0yKQotICogICAgICAgICAJODAwMDAwMDAJMjU2TQlDU0QwIFNEUkFNL0REUgotICogICAgICAgICAJOTAwMDAwMDAJMjU2TQlDU0QxIFNEUkFNL0REUgotICogICAgICAgICAJQTAwMDAwMDAJMTI4TQlDUzAgRmxhc2gKLSAqICAgICAgICAgCUE4MDAwMDAwCTEyOE0JQ1MxIEZsYXNoCi0gKiAgICAgICAgIAlCMDAwMDAwMAkzMk0JQ1MyCi0gKiAgICAgICAgIAlCMjAwMDAwMAkzMk0JQ1MzCi0gKiBGNDAwMDAwMAlCNDAwMDAwMAkzMk0JQ1M0Ci0gKiAgICAgICAgIAlCNjAwMDAwMAkzMk0JQ1M1Ci0gKiBGQzMyMDAwMAlCODAwMDAwMAk2NEsJTkFORCwgU0RSQU0sIFdFSU0sIE0zSUYsIEVNSSBjb250cm9sbGVycwotICogICAgICAgICAJQzAwMDAwMDAJNjRNCVBDTUNJQS9DRgotICovCi0KLSNkZWZpbmUgQ1MwX0JBU0VfQUREUgkJMHhBMDAwMDAwMAotI2RlZmluZSBDUzFfQkFTRV9BRERSCQkweEE4MDAwMDAwCi0jZGVmaW5lIENTMl9CQVNFX0FERFIJCTB4QjAwMDAwMDAKLSNkZWZpbmUgQ1MzX0JBU0VfQUREUgkJMHhCMjAwMDAwMAotCi0jZGVmaW5lIENTNF9CQVNFX0FERFIJCTB4QjQwMDAwMDAKLSNkZWZpbmUgQ1M0X0JBU0VfQUREUl9WSVJUCTB4RjQwMDAwMDAKLSNkZWZpbmUgQ1M0X1NJWkUJCVNaXzMyTQotCi0jZGVmaW5lIENTNV9CQVNFX0FERFIJCTB4QjYwMDAwMDAKLSNkZWZpbmUgUENNQ0lBX01FTV9CQVNFX0FERFIJMHhCQzAwMDAwMAotCi0vKgogICogSVJBTQogICovCi0jZGVmaW5lIElSQU1fQkFTRV9BRERSCQkweDFGRkMwMDAwCS8qIGludGVybmFsIHJhbSAqLwotI2RlZmluZSBJUkFNX0JBU0VfQUREUl9WSVJUCTB4RjgwMDAwMDAKLSNkZWZpbmUgSVJBTV9TSVpFCQlTWl8xNksKKyNkZWZpbmUgTVgzMV9JUkFNX0JBU0VfQUREUgkJMHgxRkZDMDAwMAkvKiBpbnRlcm5hbCByYW0gKi8KKyNkZWZpbmUgTVgzMV9JUkFNX1NJWkUJCQlTWl8xNksKIAotLyoKLSAqIEwyQ0MKLSAqLwotI2RlZmluZSBMMkNDX0JBU0VfQUREUgkJMHgzMDAwMDAwMAotI2RlZmluZSBMMkNDX0JBU0VfQUREUl9WSVJUCTB4RjkwMDAwMDAKLSNkZWZpbmUgTDJDQ19TSVpFCQlTWl8xTQotCi0vKgotICogQUlQUyAxCi0gKi8KLSNkZWZpbmUgQUlQUzFfQkFTRV9BRERSCQkweDQzRjAwMDAwCi0jZGVmaW5lIEFJUFMxX0JBU0VfQUREUl9WSVJUCTB4RkMwMDAwMDAKLSNkZWZpbmUgQUlQUzFfU0laRQkJU1pfMU0KLQotI2RlZmluZSBNQVhfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAwNDAwMCkKLSNkZWZpbmUgRVZUTU9OX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAwODAwMCkKLSNkZWZpbmUgQ0xLQ1RMX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAwQzAwMCkKLSNkZWZpbmUgRVRCX1NMT1Q0X0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAxMDAwMCkKLSNkZWZpbmUgRVRCX1NMT1Q1X0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAxNDAwMCkKLSNkZWZpbmUgRUNUX0NUSU9fQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDE4MDAwKQotI2RlZmluZSBJMkNfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4MDAwMCkKLSNkZWZpbmUgSTJDM19CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDg0MDAwKQogI2RlZmluZSBPVEdfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4ODAwMCkKICNkZWZpbmUgQVRBX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOEMwMDApCi0jZGVmaW5lIFVBUlQxX0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOTAwMDApCi0jZGVmaW5lIFVBUlQyX0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwOTQwMDApCi0jZGVmaW5lIEkyQzJfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5ODAwMCkKLSNkZWZpbmUgT1dJUkVfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5QzAwMCkKLSNkZWZpbmUgU1NJMV9CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEEwMDAwKQotI2RlZmluZSBDU1BJMV9CQVNFX0FERFIgCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEE0MDAwKQotI2RlZmluZSBLUFBfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBBODAwMCkKLSNkZWZpbmUgSU9NVVhDX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBBQzAwMCkKICNkZWZpbmUgVUFSVDRfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBCMDAwMCkKICNkZWZpbmUgVUFSVDVfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBCNDAwMCkKLSNkZWZpbmUgRUNUX0lQMV9CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQjgwMDApCi0jZGVmaW5lIEVDVF9JUDJfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEJDMDAwKQotCi0vKgotICogU1BCQSBnbG9iYWwgbW9kdWxlIGVuYWJsZWQgIzAKLSAqLwotI2RlZmluZSBTUEJBMF9CQVNFX0FERFIgCTB4NTAwMDAwMDAKLSNkZWZpbmUgU1BCQTBfQkFTRV9BRERSX1ZJUlQJMHhGQzEwMDAwMAotI2RlZmluZSBTUEJBMF9TSVpFCQlTWl8xTQogCiAjZGVmaW5lIE1NQ19TREhDMV9CQVNFX0FERFIJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMDQwMDApCiAjZGVmaW5lIE1NQ19TREhDMl9CQVNFX0FERFIJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMDgwMDApCi0jZGVmaW5lIFVBUlQzX0JBU0VfQUREUiAJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMEMwMDApCi0jZGVmaW5lIENTUEkyX0JBU0VfQUREUiAJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMTAwMDApCi0jZGVmaW5lIFNTSTJfQkFTRV9BRERSCQkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAxNDAwMCkKICNkZWZpbmUgU0lNMV9CQVNFX0FERFIJCShTUEJBMF9CQVNFX0FERFIgKyAweDAwMDE4MDAwKQogI2RlZmluZSBJSU1fQkFTRV9BRERSCQkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAxQzAwMCkKLSNkZWZpbmUgQVRBX0RNQV9CQVNFX0FERFIJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMjAwMDApCi0jZGVmaW5lIE1TSEMxX0JBU0VfQUREUgkJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMjQwMDApCi0jZGVmaW5lIE1TSEMyX0JBU0VfQUREUgkJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwMjQwMDApCi0jZGVmaW5lIFNQQkFfQ1RSTF9CQVNFX0FERFIJKFNQQkEwX0JBU0VfQUREUiArIDB4MDAwM0MwMDApCiAKLS8qCi0gKiBBSVBTIDIKLSAqLwotI2RlZmluZSBBSVBTMl9CQVNFX0FERFIJCTB4NTNGMDAwMDAKLSNkZWZpbmUgQUlQUzJfQkFTRV9BRERSX1ZJUlQJMHhGQzIwMDAwMAotI2RlZmluZSBBSVBTMl9TSVpFCQlTWl8xTQotI2RlZmluZSBDQ01fQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDA4MDAwMCkKICNkZWZpbmUgQ1NQSTNfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDA4NDAwMCkKICNkZWZpbmUgRklSSV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMDhDMDAwKQotI2RlZmluZSBHUFQxX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwOTAwMDApCi0jZGVmaW5lIEVQSVQxX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwOTQwMDApCi0jZGVmaW5lIEVQSVQyX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwOTgwMDApCi0jZGVmaW5lIEdQSU8zX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQTQwMDApCi0jZGVmaW5lIFNDQ19CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEFDMDAwKQogI2RlZmluZSBTQ01fQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBBRTAwMCkKICNkZWZpbmUgU01OX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQUYwMDApCi0jZGVmaW5lIFJOR0FfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBCMDAwMCkKLSNkZWZpbmUgSVBVX0NUUkxfQkFTRV9BRERSCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEMwMDAwKQotI2RlZmluZSBBVURNVVhfQkFTRV9BRERSCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEM0MDAwKQogI2RlZmluZSBNUEVHNF9FTkNfQkFTRV9BRERSCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEM4MDAwKQotI2RlZmluZSBHUElPMV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMENDMDAwKQotI2RlZmluZSBHUElPMl9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEQwMDAwKQotI2RlZmluZSBTRE1BX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRDQwMDApCi0jZGVmaW5lIFJUQ19CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEQ4MDAwKQotI2RlZmluZSBXRE9HX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwREMwMDApCi0jZGVmaW5lIFBXTV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEUwMDAwKQotI2RlZmluZSBSVElDX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwRUMwMDApCiAKLS8qCi0gKiBST01QIGFuZCBBVklDCi0gKi8KLSNkZWZpbmUgUk9NUF9CQVNFX0FERFIJCTB4NjAwMDAwMDAKLSNkZWZpbmUgUk9NUF9CQVNFX0FERFJfVklSVAkweEZDNTAwMDAwCi0jZGVmaW5lIFJPTVBfU0laRQkJU1pfMU0KKyNkZWZpbmUgTVgzMV9ORkNfQkFTRV9BRERSCShYX01FTUNfQkFTRV9BRERSICsgMHgwMDAwKQogCi0jZGVmaW5lIEFWSUNfQkFTRV9BRERSCQkweDY4MDAwMDAwCi0jZGVmaW5lIEFWSUNfQkFTRV9BRERSX1ZJUlQJMHhGQzQwMDAwMAotI2RlZmluZSBBVklDX1NJWkUJCVNaXzFNCi0KLS8qCi0gKiBOQU5ELCBTRFJBTSwgV0VJTSwgTTNJRiwgRU1JIGNvbnRyb2xsZXJzCi0gKi8KLSNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUgkweEI4MDAwMDAwCi0jZGVmaW5lIFhfTUVNQ19CQVNFX0FERFJfVklSVAkweEZDMzIwMDAwCi0jZGVmaW5lIFhfTUVNQ19TSVpFCQlTWl82NEsKLQotI2RlZmluZSBORkNfQkFTRV9BRERSCQkoWF9NRU1DX0JBU0VfQUREUiArIDB4MDAwMCkKLSNkZWZpbmUgRVNEQ1RMX0JBU0VfQUREUgkoWF9NRU1DX0JBU0VfQUREUiArIDB4MTAwMCkKLSNkZWZpbmUgV0VJTV9CQVNFX0FERFIJCShYX01FTUNfQkFTRV9BRERSICsgMHgyMDAwKQotI2RlZmluZSBNM0lGX0JBU0VfQUREUgkJKFhfTUVNQ19CQVNFX0FERFIgKyAweDMwMDApCi0jZGVmaW5lIEVNSV9DVExfQkFTRV9BRERSCShYX01FTUNfQkFTRV9BRERSICsgMHg0MDAwKQotI2RlZmluZSBQQ01DSUFfQ1RMX0JBU0VfQUREUglFTUlfQ1RMX0JBU0VfQUREUgotCi0vKgotICogTWVtb3J5IHJlZ2lvbnMgYW5kIENTCi0gKi8KLSNkZWZpbmUgSVBVX01FTV9CQVNFX0FERFIJMHg3MDAwMDAwMAotI2RlZmluZSBDU0QwX0JBU0VfQUREUgkJMHg4MDAwMDAwMAotI2RlZmluZSBDU0QxX0JBU0VfQUREUgkJMHg5MDAwMDAwMAotI2RlZmluZSBDUzBfQkFTRV9BRERSCQkweEEwMDAwMDAwCi0jZGVmaW5lIENTMV9CQVNFX0FERFIJCTB4QTgwMDAwMDAKLSNkZWZpbmUgQ1MyX0JBU0VfQUREUgkJMHhCMDAwMDAwMAotI2RlZmluZSBDUzNfQkFTRV9BRERSCQkweEIyMDAwMDAwCi0KLSNkZWZpbmUgQ1M0X0JBU0VfQUREUgkJMHhCNDAwMDAwMAotI2RlZmluZSBDUzRfQkFTRV9BRERSX1ZJUlQJMHhGNDAwMDAwMAotI2RlZmluZSBDUzRfU0laRQkJU1pfMzJNCi0KLSNkZWZpbmUgQ1M1X0JBU0VfQUREUgkJMHhCNjAwMDAwMAotI2RlZmluZSBQQ01DSUFfTUVNX0JBU0VfQUREUgkweEJDMDAwMDAwCi0KLS8qIQotICogVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBwaHlzaWNhbCB0byB2aXJ0dWFsIGFkZHJlc3MgbWFwcGluZyBmb3IgYWxsIHRoZQotICogcGVyaXBoZXJhbCBtb2R1bGVzLiBJdCBpcyB1c2VkIGJ5IHBhc3NpbmcgaW4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXMgeAotICogYW5kIHJldHVybmluZyB0aGUgdmlydHVhbCBhZGRyZXNzLiBJZiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBpcyBub3QgbWFwcGVkLAotICogaXQgcmV0dXJucyAweERFQURCRUVGCi0gKi8KLSNkZWZpbmUgSU9fQUREUkVTUyh4KSAgIFwKLQkodm9pZCBfX2lvbWVtICopIFwKLQkoKCh4ID49IElSQU1fQkFTRV9BRERSKSAmJiAoeCA8IChJUkFNX0JBU0VfQUREUiArIElSQU1fU0laRSkpKSA/IElSQU1fSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IEwyQ0NfQkFTRV9BRERSKSAmJiAoeCA8IChMMkNDX0JBU0VfQUREUiArIEwyQ0NfU0laRSkpKSA/IEwyQ0NfSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IEFJUFMxX0JBU0VfQUREUikgJiYgKHggPCAoQUlQUzFfQkFTRV9BRERSICsgQUlQUzFfU0laRSkpKSA/IEFJUFMxX0lPX0FERFJFU1MoeCk6XAotCSgoeCA+PSBTUEJBMF9CQVNFX0FERFIpICYmICh4IDwgKFNQQkEwX0JBU0VfQUREUiArIFNQQkEwX1NJWkUpKSkgPyBTUEJBMF9JT19BRERSRVNTKHgpOlwKLQkoKHggPj0gQUlQUzJfQkFTRV9BRERSKSAmJiAoeCA8IChBSVBTMl9CQVNFX0FERFIgKyBBSVBTMl9TSVpFKSkpID8gQUlQUzJfSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IFJPTVBfQkFTRV9BRERSKSAmJiAoeCA8IChST01QX0JBU0VfQUREUiArIFJPTVBfU0laRSkpKSA/IFJPTVBfSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IEFWSUNfQkFTRV9BRERSKSAmJiAoeCA8IChBVklDX0JBU0VfQUREUiArIEFWSUNfU0laRSkpKSA/IEFWSUNfSU9fQUREUkVTUyh4KTpcCi0JKCh4ID49IENTNF9CQVNFX0FERFIpICYmICh4IDwgKENTNF9CQVNFX0FERFIgKyBDUzRfU0laRSkpKSA/IENTNF9JT19BRERSRVNTKHgpOlwKLQkoKHggPj0gWF9NRU1DX0JBU0VfQUREUikgJiYgKHggPCAoWF9NRU1DX0JBU0VfQUREUiArIFhfTUVNQ19TSVpFKSkpID8gWF9NRU1DX0lPX0FERFJFU1MoeCk6XAotCTB4REVBREJFRUYpCi0KLS8qCi0gKiBkZWZpbmUgdGhlIGFkZHJlc3MgbWFwcGluZyBtYWNyb3M6IGluIHBoeXNpY2FsIGFkZHJlc3Mgb3JkZXIKLSAqLwotCi0jZGVmaW5lIElSQU1fSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gSVJBTV9CQVNFX0FERFIpICsgSVJBTV9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBMMkNDX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIEwyQ0NfQkFTRV9BRERSKSArIEwyQ0NfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgQUlQUzFfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gQUlQUzFfQkFTRV9BRERSKSArIEFJUFMxX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIFNQQkEwX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIFNQQkEwX0JBU0VfQUREUikgKyBTUEJBMF9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBBSVBTMl9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBBSVBTMl9CQVNFX0FERFIpICsgQUlQUzJfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgUk9NUF9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBST01QX0JBU0VfQUREUikgKyBST01QX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIEFWSUNfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gQVZJQ19CQVNFX0FERFIpICsgQVZJQ19CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBDUzRfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gQ1M0X0JBU0VfQUREUikgKyBDUzRfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgWF9NRU1DX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIFhfTUVNQ19CQVNFX0FERFIpICsgWF9NRU1DX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIFBDTUNJQV9JT19BRERSRVNTKHgpIFwKLQkoKCh4KSAtIFhfTUVNQ19CQVNFX0FERFIpICsgWF9NRU1DX0JBU0VfQUREUl9WSVJUKQotCi0vKgotICogSW50ZXJydXB0IG51bWJlcnMKLSAqLwotI2RlZmluZSBNWENfSU5UX1BFTl9BRFM3ODQzCTAKLSNkZWZpbmUgTVhDX0lOVF9SRVNWMQkJMQotI2RlZmluZSBNWENfSU5UX0NTODkwMEEJCTIKLSNkZWZpbmUgTVhDX0lOVF9JMkMzCQkzCi0jZGVmaW5lIE1YQ19JTlRfSTJDMgkJNAogI2RlZmluZSBNWENfSU5UX01QRUc0X0VOQ09ERVIJNQotI2RlZmluZSBNWENfSU5UX1JUSUMJCTYKICNkZWZpbmUgTVhDX0lOVF9GSVJJCQk3Ci0jZGVmaW5lIE1YQ19JTlRfTU1DX1NESEMyCTgKKyNkZWZpbmUgTVgzMV9JTlRfTU1DX1NESEMyCTgKICNkZWZpbmUgTVhDX0lOVF9NTUNfU0RIQzEJOQotI2RlZmluZSBNWENfSU5UX0kyQwkJMTAKLSNkZWZpbmUgTVhDX0lOVF9TU0kyCQkxMQotI2RlZmluZSBNWENfSU5UX1NTSTEJCTEyCi0jZGVmaW5lIE1YQ19JTlRfQ1NQSTIJCTEzCi0jZGVmaW5lIE1YQ19JTlRfQ1NQSTEJCTE0Ci0jZGVmaW5lIE1YQ19JTlRfQVRBCQkxNQorI2RlZmluZSBNWDMxX0lOVF9TU0kyCQkxMQorI2RlZmluZSBNWDMxX0lOVF9TU0kxCQkxMgogI2RlZmluZSBNWENfSU5UX01CWAkJMTYKICNkZWZpbmUgTVhDX0lOVF9DU1BJMwkJMTcKLSNkZWZpbmUgTVhDX0lOVF9VQVJUMwkJMTgKLSNkZWZpbmUgTVhDX0lOVF9JSU0JCTE5CiAjZGVmaW5lIE1YQ19JTlRfU0lNMgkJMjAKICNkZWZpbmUgTVhDX0lOVF9TSU0xCQkyMQotI2RlZmluZSBNWENfSU5UX1JOR0EJCTIyCi0jZGVmaW5lIE1YQ19JTlRfRVZUTU9OCQkyMwotI2RlZmluZSBNWENfSU5UX0tQUAkJMjQKLSNkZWZpbmUgTVhDX0lOVF9SVEMJCTI1Ci0jZGVmaW5lIE1YQ19JTlRfUFdNCQkyNgotI2RlZmluZSBNWENfSU5UX0VQSVQyCQkyNwotI2RlZmluZSBNWENfSU5UX0VQSVQxCQkyOAotI2RlZmluZSBNWENfSU5UX0dQVAkJMjkKLSNkZWZpbmUgTVhDX0lOVF9SRVNWMzAJCTMwCi0jZGVmaW5lIE1YQ19JTlRfUkVTVjMxCQkzMQotI2RlZmluZSBNWENfSU5UX1VBUlQyCQkzMgotI2RlZmluZSBNWENfSU5UX05BTkRGQwkJMzMKLSNkZWZpbmUgTVhDX0lOVF9TRE1BCQkzNAorI2RlZmluZSBNWENfSU5UX0NDTV9EVkZTCTMxCiAjZGVmaW5lIE1YQ19JTlRfVVNCMQkJMzUKICNkZWZpbmUgTVhDX0lOVF9VU0IyCQkzNgogI2RlZmluZSBNWENfSU5UX1VTQjMJCTM3CiAjZGVmaW5lIE1YQ19JTlRfVVNCNAkJMzgKLSNkZWZpbmUgTVhDX0lOVF9NU0hDMQkJMzkKICNkZWZpbmUgTVhDX0lOVF9NU0hDMgkJNDAKLSNkZWZpbmUgTVhDX0lOVF9JUFVfRVJSCQk0MQotI2RlZmluZSBNWENfSU5UX0lQVV9TWU4JCTQyCi0jZGVmaW5lIE1YQ19JTlRfUkVTVjQzCQk0MwotI2RlZmluZSBNWENfSU5UX1JFU1Y0NAkJNDQKLSNkZWZpbmUgTVhDX0lOVF9VQVJUMQkJNDUKICNkZWZpbmUgTVhDX0lOVF9VQVJUNAkJNDYKICNkZWZpbmUgTVhDX0lOVF9VQVJUNQkJNDcKLSNkZWZpbmUgTVhDX0lOVF9FQ1QJCTQ4Ci0jZGVmaW5lIE1YQ19JTlRfU0NDX1NDTQkJNDkKLSNkZWZpbmUgTVhDX0lOVF9TQ0NfU01OCQk1MAotI2RlZmluZSBNWENfSU5UX0dQSU8yCQk1MQotI2RlZmluZSBNWENfSU5UX0dQSU8xCQk1MgogI2RlZmluZSBNWENfSU5UX0NDTQkJNTMKICNkZWZpbmUgTVhDX0lOVF9QQ01DSUEJCTU0Ci0jZGVmaW5lIE1YQ19JTlRfV0RPRwkJNTUKLSNkZWZpbmUgTVhDX0lOVF9HUElPMwkJNTYKLSNkZWZpbmUgTVhDX0lOVF9SRVNWNTcJCTU3Ci0jZGVmaW5lIE1YQ19JTlRfRVhUX1BPV0VSCTU4Ci0jZGVmaW5lIE1YQ19JTlRfRVhUX1RFTVBFUgk1OQotI2RlZmluZSBNWENfSU5UX0VYVF9TRU5TT1I2MAk2MAotI2RlZmluZSBNWENfSU5UX0VYVF9TRU5TT1I2MQk2MQotI2RlZmluZSBNWENfSU5UX0VYVF9XRE9HCTYyCi0jZGVmaW5lIE1YQ19JTlRfRVhUX1RWCQk2MwogCi0jZGVmaW5lIFBST0RfU0lHTkFUVVJFCQkweDEJLyogRm9yIE1YMzEgKi8KLQotLyogc2lsaWNvbiByZXZpc2lvbnMgc3BlY2lmaWMgdG8gaS5NWDMxICovCi0jZGVmaW5lIENISVBfUkVWXzFfMAkJMHgxMAotI2RlZmluZSBDSElQX1JFVl8xXzEJCTB4MTEKLSNkZWZpbmUgQ0hJUF9SRVZfMV8yCQkweDEyCi0jZGVmaW5lIENISVBfUkVWXzFfMwkJMHgxMwotI2RlZmluZSBDSElQX1JFVl8yXzAJCTB4MjAKLSNkZWZpbmUgQ0hJUF9SRVZfMl8xCQkweDIxCi0jZGVmaW5lIENISVBfUkVWXzJfMgkJMHgyMgotI2RlZmluZSBDSElQX1JFVl8yXzMJCTB4MjMKLSNkZWZpbmUgQ0hJUF9SRVZfM18wCQkweDMwCi0jZGVmaW5lIENISVBfUkVWXzNfMQkJMHgzMQotI2RlZmluZSBDSElQX1JFVl8zXzIJCTB4MzIKLQotI2RlZmluZSBTWVNURU1fUkVWX01JTgkJQ0hJUF9SRVZfMV8wCi0jZGVmaW5lIFNZU1RFTV9SRVZfTlVNCQkzCi0KLS8qIGdwaW8gYW5kIGdwaW8gYmFzZWQgaW50ZXJydXB0IGhhbmRsaW5nICovCi0jZGVmaW5lIEdQSU9fRFIJCSAJMHgwMAotI2RlZmluZSBHUElPX0dESVIJIAkweDA0Ci0jZGVmaW5lIEdQSU9fUFNSCSAJMHgwOAotI2RlZmluZSBHUElPX0lDUjEJIAkweDBDCi0jZGVmaW5lIEdQSU9fSUNSMgkgCTB4MTAKLSNkZWZpbmUgR1BJT19JTVIJIAkweDE0Ci0jZGVmaW5lIEdQSU9fSVNSCSAJMHgxOAotI2RlZmluZSBHUElPX0lOVF9MT1dfTEVWCTB4MAotI2RlZmluZSBHUElPX0lOVF9ISUdIX0xFVgkweDEKLSNkZWZpbmUgR1BJT19JTlRfUklTRV9FREdFCTB4MgotI2RlZmluZSBHUElPX0lOVF9GQUxMX0VER0UJMHgzCi0jZGVmaW5lIEdQSU9fSU5UX05PTkUJCTB4NAotCi0vKiBNYW5kYXRvcnkgZGVmaW5lcyB1c2VkIGdsb2JhbGx5ICovCi0KLS8qIHRoaXMgQ1BVIHN1cHBvcnRzIHVwIHRvIDk2IEdQSU9zICovCi0jZGVmaW5lIEFSQ0hfTlJfR1BJT1MJCTk2Ci0KLSNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmICFkZWZpbmVkKF9fTVhDX0JPT1RfVU5DT01QUkVTUykKLQotLyogdGhpcyBpcyBhIGkuTVgzMSBDUFUgKi8KLSNkZWZpbmUgY3B1X2lzX214MzEoKQkJKDEpCi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgc3lzdGVtX3JldjsKLQotc3RhdGljIGlubGluZSBpbnQgbXgzMV9yZXZpc2lvbih2b2lkKQotewotCXJldHVybiBzeXN0ZW1fcmV2OwotfQotI2VuZGlmCi0KLSNlbmRpZiAvKiAgX19BU01fQVJDSF9NWENfTVgzMV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDM1LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NjVmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBJUkFNCisgKi8KKyNkZWZpbmUgTVgzNV9JUkFNX0JBU0VfQUREUgkJMHgxMDAwMDAwMAkvKiBpbnRlcm5hbCByYW0gKi8KKyNkZWZpbmUgTVgzNV9JUkFNX1NJWkUJCVNaXzEyOEsKKworI2RlZmluZSBNWENfRkVDX0JBU0VfQUREUgkweDUwMDM4MDAwCisjZGVmaW5lIE1YMzVfTkZDX0JBU0VfQUREUgkweEJCMDAwMDAwCisKKy8qCisgKiBJbnRlcnJ1cHQgbnVtYmVycworICovCisjZGVmaW5lIE1YQ19JTlRfT1dJUkUJCTIKKyNkZWZpbmUgTVgzNV9JTlRfTU1DX1NESEMxCTcKKyNkZWZpbmUgTVhDX0lOVF9NTUNfU0RIQzIJOAorI2RlZmluZSBNWENfSU5UX01NQ19TREhDMwk5CisjZGVmaW5lIE1YMzVfSU5UX1NTSTEJCTExCisjZGVmaW5lIE1YMzVfSU5UX1NTSTIJCTEyCisjZGVmaW5lIE1YQ19JTlRfR1BVMkQJCTE2CisjZGVmaW5lIE1YQ19JTlRfQVNSQwkJMTcKKyNkZWZpbmUgTVhDX0lOVF9VU0JIUwkJMzUKKyNkZWZpbmUgTVhDX0lOVF9VU0JPVEcJCTM3CisjZGVmaW5lIE1YQ19JTlRfRVNBSQkJNDAKKyNkZWZpbmUgTVhDX0lOVF9DQU4xCQk0MworI2RlZmluZSBNWENfSU5UX0NBTjIJCTQ0CisjZGVmaW5lIE1YQ19JTlRfTUxCCQk0NgorI2RlZmluZSBNWENfSU5UX1NQRElGCQk0NworI2RlZmluZSBNWENfSU5UX0ZFQwkJNTcKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M2ZiLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzZmIuaAppbmRleCBlMzkxYTc2Li5hYzI0YzVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzZmIuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzZmIuaApAQCAtMTQsMjUgKzE0LDI1IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KIAogLyogUHJvcHJpZXRhcnkgRkJfU1lOQ18gZmxhZ3MgKi8KLSNkZWZpbmUgRkJfU1lOQ19PRV9BQ1RfSElHSCAgICAweDgwMDAwMDAwCi0jZGVmaW5lIEZCX1NZTkNfQ0xLX0lOVkVSVCAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBGQl9TWU5DX0RBVEFfSU5WRVJUICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgRkJfU1lOQ19DTEtfSURMRV9FTiAgICAweDEwMDAwMDAwCi0jZGVmaW5lIEZCX1NZTkNfU0hBUlBfTU9ERSAgICAgMHgwODAwMDAwMAotI2RlZmluZSBGQl9TWU5DX1NXQVBfUkdCICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgRkJfU1lOQ19DTEtfU0VMX0VOICAgICAweDAyMDAwMDAwCisjZGVmaW5lIEZCX1NZTkNfT0VfQUNUX0hJR0gJMHg4MDAwMDAwMAorI2RlZmluZSBGQl9TWU5DX0NMS19JTlZFUlQJMHg0MDAwMDAwMAorI2RlZmluZSBGQl9TWU5DX0RBVEFfSU5WRVJUCTB4MjAwMDAwMDAKKyNkZWZpbmUgRkJfU1lOQ19DTEtfSURMRV9FTgkweDEwMDAwMDAwCisjZGVmaW5lIEZCX1NZTkNfU0hBUlBfTU9ERQkweDA4MDAwMDAwCisjZGVmaW5lIEZCX1NZTkNfU1dBUF9SR0IJMHgwNDAwMDAwMAorI2RlZmluZSBGQl9TWU5DX0NMS19TRUxfRU4JMHgwMjAwMDAwMAogCiAvKioKICAqIHN0cnVjdCBteDNmYl9wbGF0Zm9ybV9kYXRhIC0gbXgzZmIgcGxhdGZvcm0gZGF0YQogICoKLSAqIEBkbWFfZGV2OiAgIHBvaW50ZXIgdG8gdGhlIGRtYS1kZXZpY2UsIHVzZWQgZm9yIGRtYS1zbGF2ZSBjb25uZWN0aW9uCi0gKiBAbW9kZTogICAgICBwb2ludGVyIHRvIGEgcGxhdGZvcm0tcHJvdmlkZWQgcGVyIG14Y19yZWdpc3Rlcl9mYigpIHZpZGVvbW9kZQorICogQGRtYV9kZXY6CXBvaW50ZXIgdG8gdGhlIGRtYS1kZXZpY2UsIHVzZWQgZm9yIGRtYS1zbGF2ZSBjb25uZWN0aW9uCisgKiBAbW9kZToJcG9pbnRlciB0byBhIHBsYXRmb3JtLXByb3ZpZGVkIHBlciBteGNfcmVnaXN0ZXJfZmIoKSB2aWRlb21vZGUKICAqLwogc3RydWN0IG14M2ZiX3BsYXRmb3JtX2RhdGEgewotICAgICAgIHN0cnVjdCBkZXZpY2UgICAgICAgICAgICAgICAgICAgKmRtYV9kZXY7Ci0gICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAqbmFtZTsKLSAgICAgICBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICAgICAgICptb2RlOwotICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX21vZGVzOworCXN0cnVjdCBkZXZpY2UJCQkqZG1hX2RldjsKKwljb25zdCBjaGFyCQkJKm5hbWU7CisJY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZQkqbW9kZTsKKwlpbnQJCQkJbnVtX21vZGVzOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzeC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODc4YzYwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M3guaApAQCAtMCwwICsxLDI5MCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX01YMzFfSF9fCisjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX01YMzFfSF9fCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWENfSEFSRFdBUkVfSF9fCisjZXJyb3IgIkRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5LiIKKyNlbmRpZgorCisvKgorICogTVgzMSBtZW1vcnkgbWFwOgorICoKKyAqIFZpcnQJCVBoeXMJCVNpemUJV2hhdAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGQzAwMDAwMAk0M0YwMDAwMAkxTQlBSVBTIDEKKyAqIEZDMTAwMDAwCTUwMDAwMDAwCTFNCVNQQkEKKyAqIEZDMjAwMDAwCTUzRjAwMDAwCTFNCUFJUFMgMgorICogRkM1MDAwMDAJNjAwMDAwMDAJMTI4TQlST01QQVRDSAorICogRkM0MDAwMDAJNjgwMDAwMDAJMTI4TQlBVklDCisgKiAgICAgICAgIAk3MDAwMDAwMAkyNTZNCUlQVSAoTUFYIE0yKQorICogICAgICAgICAJODAwMDAwMDAJMjU2TQlDU0QwIFNEUkFNL0REUgorICogICAgICAgICAJOTAwMDAwMDAJMjU2TQlDU0QxIFNEUkFNL0REUgorICogICAgICAgICAJQTAwMDAwMDAJMTI4TQlDUzAgRmxhc2gKKyAqICAgICAgICAgCUE4MDAwMDAwCTEyOE0JQ1MxIEZsYXNoCisgKiAgICAgICAgIAlCMDAwMDAwMAkzMk0JQ1MyCisgKiAgICAgICAgIAlCMjAwMDAwMAkzMk0JQ1MzCisgKiBGNDAwMDAwMAlCNDAwMDAwMAkzMk0JQ1M0CisgKiAgICAgICAgIAlCNjAwMDAwMAkzMk0JQ1M1CisgKiBGQzMyMDAwMAlCODAwMDAwMAk2NEsJTkFORCwgU0RSQU0sIFdFSU0sIE0zSUYsIEVNSSBjb250cm9sbGVycworICogICAgICAgICAJQzAwMDAwMDAJNjRNCVBDTUNJQS9DRgorICovCisKKyNkZWZpbmUgQ1MwX0JBU0VfQUREUgkJMHhBMDAwMDAwMAorI2RlZmluZSBDUzFfQkFTRV9BRERSCQkweEE4MDAwMDAwCisjZGVmaW5lIENTMl9CQVNFX0FERFIJCTB4QjAwMDAwMDAKKyNkZWZpbmUgQ1MzX0JBU0VfQUREUgkJMHhCMjAwMDAwMAorCisjZGVmaW5lIENTNF9CQVNFX0FERFIJCTB4QjQwMDAwMDAKKyNkZWZpbmUgQ1M0X0JBU0VfQUREUl9WSVJUCTB4RjQwMDAwMDAKKyNkZWZpbmUgQ1M0X1NJWkUJCVNaXzMyTQorCisjZGVmaW5lIENTNV9CQVNFX0FERFIJCTB4QjYwMDAwMDAKKyNkZWZpbmUgUENNQ0lBX01FTV9CQVNFX0FERFIJMHhCQzAwMDAwMAorCisvKgorICogTDJDQworICovCisjZGVmaW5lIEwyQ0NfQkFTRV9BRERSCQkweDMwMDAwMDAwCisjZGVmaW5lIEwyQ0NfU0laRQkJU1pfMU0KKworLyoKKyAqIEFJUFMgMQorICovCisjZGVmaW5lIEFJUFMxX0JBU0VfQUREUgkJMHg0M0YwMDAwMAorI2RlZmluZSBBSVBTMV9CQVNFX0FERFJfVklSVAkweEZDMDAwMDAwCisjZGVmaW5lIEFJUFMxX1NJWkUJCVNaXzFNCisKKyNkZWZpbmUgTUFYX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwMDQwMDApCisjZGVmaW5lIEVWVE1PTl9CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwMDgwMDApCisjZGVmaW5lIENMS0NUTF9CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwMEMwMDApCisjZGVmaW5lIEVUQl9TTE9UNF9CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwMTAwMDApCisjZGVmaW5lIEVUQl9TTE9UNV9CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwMTQwMDApCisjZGVmaW5lIEVDVF9DVElPX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDAxODAwMCkKKyNkZWZpbmUgSTJDX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwODAwMDApCisjZGVmaW5lIEkyQzNfQkFTRV9BRERSCQkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA4NDAwMCkKKyNkZWZpbmUgVUFSVDFfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5MDAwMCkKKyNkZWZpbmUgVUFSVDJfQkFTRV9BRERSIAkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5NDAwMCkKKyNkZWZpbmUgSTJDMl9CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDk4MDAwKQorI2RlZmluZSBPV0lSRV9CQVNFX0FERFIgCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMDlDMDAwKQorI2RlZmluZSBTU0kxX0JBU0VfQUREUgkJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQTAwMDApCisjZGVmaW5lIENTUEkxX0JBU0VfQUREUiAJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQTQwMDApCisjZGVmaW5lIEtQUF9CQVNFX0FERFIJCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEE4MDAwKQorI2RlZmluZSBJT01VWENfQkFTRV9BRERSCShBSVBTMV9CQVNFX0FERFIgKyAweDAwMEFDMDAwKQorI2RlZmluZSBFQ1RfSVAxX0JBU0VfQUREUgkoQUlQUzFfQkFTRV9BRERSICsgMHgwMDBCODAwMCkKKyNkZWZpbmUgRUNUX0lQMl9CQVNFX0FERFIJKEFJUFMxX0JBU0VfQUREUiArIDB4MDAwQkMwMDApCisKKy8qCisgKiBTUEJBIGdsb2JhbCBtb2R1bGUgZW5hYmxlZCAjMAorICovCisjZGVmaW5lIFNQQkEwX0JBU0VfQUREUiAJMHg1MDAwMDAwMAorI2RlZmluZSBTUEJBMF9CQVNFX0FERFJfVklSVAkweEZDMTAwMDAwCisjZGVmaW5lIFNQQkEwX1NJWkUJCVNaXzFNCisKKyNkZWZpbmUgVUFSVDNfQkFTRV9BRERSIAkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAwQzAwMCkKKyNkZWZpbmUgQ1NQSTJfQkFTRV9BRERSIAkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAxMDAwMCkKKyNkZWZpbmUgU1NJMl9CQVNFX0FERFIJCShTUEJBMF9CQVNFX0FERFIgKyAweDAwMDE0MDAwKQorI2RlZmluZSBBVEFfRE1BX0JBU0VfQUREUgkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAyMDAwMCkKKyNkZWZpbmUgTVNIQzFfQkFTRV9BRERSCQkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAyNDAwMCkKKyNkZWZpbmUgU1BCQV9DVFJMX0JBU0VfQUREUgkoU1BCQTBfQkFTRV9BRERSICsgMHgwMDAzQzAwMCkKKworLyoKKyAqIEFJUFMgMgorICovCisjZGVmaW5lIEFJUFMyX0JBU0VfQUREUgkJMHg1M0YwMDAwMAorI2RlZmluZSBBSVBTMl9CQVNFX0FERFJfVklSVAkweEZDMjAwMDAwCisjZGVmaW5lIEFJUFMyX1NJWkUJCVNaXzFNCisjZGVmaW5lIENDTV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMDgwMDAwKQorI2RlZmluZSBHUFQxX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwOTAwMDApCisjZGVmaW5lIEVQSVQxX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwOTQwMDApCisjZGVmaW5lIEVQSVQyX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwOTgwMDApCisjZGVmaW5lIEdQSU8zX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQTQwMDApCisjZGVmaW5lIFNDQ19CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEFDMDAwKQorI2RlZmluZSBSTkdBX0JBU0VfQUREUgkJKEFJUFMyX0JBU0VfQUREUiArIDB4MDAwQjAwMDApCisjZGVmaW5lIElQVV9DVFJMX0JBU0VfQUREUgkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBDMDAwMCkKKyNkZWZpbmUgQVVETVVYX0JBU0VfQUREUgkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBDNDAwMCkKKyNkZWZpbmUgR1BJTzFfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBDQzAwMCkKKyNkZWZpbmUgR1BJTzJfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBEMDAwMCkKKyNkZWZpbmUgU0RNQV9CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEQ0MDAwKQorI2RlZmluZSBSVENfQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBEODAwMCkKKyNkZWZpbmUgV0RPR19CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMERDMDAwKQorI2RlZmluZSBQV01fQkFTRV9BRERSCQkoQUlQUzJfQkFTRV9BRERSICsgMHgwMDBFMDAwMCkKKyNkZWZpbmUgUlRJQ19CQVNFX0FERFIJCShBSVBTMl9CQVNFX0FERFIgKyAweDAwMEVDMDAwKQorCisvKgorICogUk9NUCBhbmQgQVZJQworICovCisjZGVmaW5lIFJPTVBfQkFTRV9BRERSCQkweDYwMDAwMDAwCisjZGVmaW5lIFJPTVBfQkFTRV9BRERSX1ZJUlQJMHhGQzUwMDAwMAorI2RlZmluZSBST01QX1NJWkUJCVNaXzFNCisKKyNkZWZpbmUgQVZJQ19CQVNFX0FERFIJCTB4NjgwMDAwMDAKKyNkZWZpbmUgQVZJQ19CQVNFX0FERFJfVklSVAkweEZDNDAwMDAwCisjZGVmaW5lIEFWSUNfU0laRQkJU1pfMU0KKworLyoKKyAqIE5BTkQsIFNEUkFNLCBXRUlNLCBNM0lGLCBFTUkgY29udHJvbGxlcnMKKyAqLworI2RlZmluZSBYX01FTUNfQkFTRV9BRERSCTB4QjgwMDAwMDAKKyNkZWZpbmUgWF9NRU1DX0JBU0VfQUREUl9WSVJUCTB4RkMzMjAwMDAKKyNkZWZpbmUgWF9NRU1DX1NJWkUJCVNaXzY0SworCisjZGVmaW5lIEVTRENUTF9CQVNFX0FERFIJKFhfTUVNQ19CQVNFX0FERFIgKyAweDEwMDApCisjZGVmaW5lIFdFSU1fQkFTRV9BRERSCQkoWF9NRU1DX0JBU0VfQUREUiArIDB4MjAwMCkKKyNkZWZpbmUgTTNJRl9CQVNFX0FERFIJCShYX01FTUNfQkFTRV9BRERSICsgMHgzMDAwKQorI2RlZmluZSBFTUlfQ1RMX0JBU0VfQUREUgkoWF9NRU1DX0JBU0VfQUREUiArIDB4NDAwMCkKKyNkZWZpbmUgUENNQ0lBX0NUTF9CQVNFX0FERFIJRU1JX0NUTF9CQVNFX0FERFIKKworLyoKKyAqIE1lbW9yeSByZWdpb25zIGFuZCBDUworICovCisjZGVmaW5lIElQVV9NRU1fQkFTRV9BRERSCTB4NzAwMDAwMDAKKyNkZWZpbmUgQ1NEMF9CQVNFX0FERFIJCTB4ODAwMDAwMDAKKyNkZWZpbmUgQ1NEMV9CQVNFX0FERFIJCTB4OTAwMDAwMDAKKworLyohCisgKiBUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBoeXNpY2FsIHRvIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGZvciBhbGwgdGhlCisgKiBwZXJpcGhlcmFsIG1vZHVsZXMuIEl0IGlzIHVzZWQgYnkgcGFzc2luZyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhcyB4CisgKiBhbmQgcmV0dXJuaW5nIHRoZSB2aXJ0dWFsIGFkZHJlc3MuIElmIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzIG5vdCBtYXBwZWQsCisgKiBpdCByZXR1cm5zIDB4REVBREJFRUYKKyAqLworI2RlZmluZSBJT19BRERSRVNTKHgpICAgXAorCSh2b2lkIF9fZm9yY2UgX19pb21lbSAqKSBcCisJKCgoeCA+PSBBSVBTMV9CQVNFX0FERFIpICYmICh4IDwgKEFJUFMxX0JBU0VfQUREUiArIEFJUFMxX1NJWkUpKSkgPyBBSVBTMV9JT19BRERSRVNTKHgpOlwKKwkoKHggPj0gU1BCQTBfQkFTRV9BRERSKSAmJiAoeCA8IChTUEJBMF9CQVNFX0FERFIgKyBTUEJBMF9TSVpFKSkpID8gU1BCQTBfSU9fQUREUkVTUyh4KTpcCisJKCh4ID49IEFJUFMyX0JBU0VfQUREUikgJiYgKHggPCAoQUlQUzJfQkFTRV9BRERSICsgQUlQUzJfU0laRSkpKSA/IEFJUFMyX0lPX0FERFJFU1MoeCk6XAorCSgoeCA+PSBST01QX0JBU0VfQUREUikgJiYgKHggPCAoUk9NUF9CQVNFX0FERFIgKyBST01QX1NJWkUpKSkgPyBST01QX0lPX0FERFJFU1MoeCk6XAorCSgoeCA+PSBBVklDX0JBU0VfQUREUikgJiYgKHggPCAoQVZJQ19CQVNFX0FERFIgKyBBVklDX1NJWkUpKSkgPyBBVklDX0lPX0FERFJFU1MoeCk6XAorCSgoeCA+PSBDUzRfQkFTRV9BRERSKSAmJiAoeCA8IChDUzRfQkFTRV9BRERSICsgQ1M0X1NJWkUpKSkgPyBDUzRfSU9fQUREUkVTUyh4KTpcCisJKCh4ID49IFhfTUVNQ19CQVNFX0FERFIpICYmICh4IDwgKFhfTUVNQ19CQVNFX0FERFIgKyBYX01FTUNfU0laRSkpKSA/IFhfTUVNQ19JT19BRERSRVNTKHgpOlwKKwkweERFQURCRUVGKQorCisvKgorICogZGVmaW5lIHRoZSBhZGRyZXNzIG1hcHBpbmcgbWFjcm9zOiBpbiBwaHlzaWNhbCBhZGRyZXNzIG9yZGVyCisgKi8KKyNkZWZpbmUgTDJDQ19JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBMMkNDX0JBU0VfQUREUikgKyBMMkNDX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIEFJUFMxX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIEFJUFMxX0JBU0VfQUREUikgKyBBSVBTMV9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBTUEJBMF9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBTUEJBMF9CQVNFX0FERFIpICsgU1BCQTBfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgQUlQUzJfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gQUlQUzJfQkFTRV9BRERSKSArIEFJUFMyX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIFJPTVBfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gUk9NUF9CQVNFX0FERFIpICsgUk9NUF9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBBVklDX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIEFWSUNfQkFTRV9BRERSKSArIEFWSUNfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgQ1M0X0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIENTNF9CQVNFX0FERFIpICsgQ1M0X0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIFhfTUVNQ19JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBYX01FTUNfQkFTRV9BRERSKSArIFhfTUVNQ19CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBQQ01DSUFfSU9fQUREUkVTUyh4KSBcCisJKCgoeCkgLSBYX01FTUNfQkFTRV9BRERSKSArIFhfTUVNQ19CQVNFX0FERFJfVklSVCkKKworLyoKKyAqIEludGVycnVwdCBudW1iZXJzCisgKi8KKyNkZWZpbmUgTVhDX0lOVF9JMkMzCQkzCisjZGVmaW5lIE1YQ19JTlRfSTJDMgkJNAorI2RlZmluZSBNWENfSU5UX1JUSUMJCTYKKyNkZWZpbmUgTVhDX0lOVF9JMkMJCTEwCisjZGVmaW5lIE1YQ19JTlRfQ1NQSTIJCTEzCisjZGVmaW5lIE1YQ19JTlRfQ1NQSTEJCTE0CisjZGVmaW5lIE1YQ19JTlRfQVRBCQkxNQorI2RlZmluZSBNWENfSU5UX1VBUlQzCQkxOAorI2RlZmluZSBNWENfSU5UX0lJTQkJMTkKKyNkZWZpbmUgTVhDX0lOVF9STkdBCQkyMgorI2RlZmluZSBNWENfSU5UX0VWVE1PTgkJMjMKKyNkZWZpbmUgTVhDX0lOVF9LUFAJCTI0CisjZGVmaW5lIE1YQ19JTlRfUlRDCQkyNQorI2RlZmluZSBNWENfSU5UX1BXTQkJMjYKKyNkZWZpbmUgTVhDX0lOVF9FUElUMgkJMjcKKyNkZWZpbmUgTVhDX0lOVF9FUElUMQkJMjgKKyNkZWZpbmUgTVhDX0lOVF9HUFQJCTI5CisjZGVmaW5lIE1YQ19JTlRfUE9XRVJfRkFJTAkzMAorI2RlZmluZSBNWENfSU5UX1VBUlQyCQkzMgorI2RlZmluZSBNWENfSU5UX05BTkRGQwkJMzMKKyNkZWZpbmUgTVhDX0lOVF9TRE1BCQkzNAorI2RlZmluZSBNWENfSU5UX01TSEMxCQkzOQorI2RlZmluZSBNWENfSU5UX0lQVV9FUlIJCTQxCisjZGVmaW5lIE1YQ19JTlRfSVBVX1NZTgkJNDIKKyNkZWZpbmUgTVhDX0lOVF9VQVJUMQkJNDUKKyNkZWZpbmUgTVhDX0lOVF9FQ1QJCTQ4CisjZGVmaW5lIE1YQ19JTlRfU0NDX1NDTQkJNDkKKyNkZWZpbmUgTVhDX0lOVF9TQ0NfU01OCQk1MAorI2RlZmluZSBNWENfSU5UX0dQSU8yCQk1MQorI2RlZmluZSBNWENfSU5UX0dQSU8xCQk1MgorI2RlZmluZSBNWENfSU5UX1dET0cJCTU1CisjZGVmaW5lIE1YQ19JTlRfR1BJTzMJCTU2CisjZGVmaW5lIE1YQ19JTlRfRVhUX1BPV0VSCTU4CisjZGVmaW5lIE1YQ19JTlRfRVhUX1RFTVBFUgk1OQorI2RlZmluZSBNWENfSU5UX0VYVF9TRU5TT1I2MAk2MAorI2RlZmluZSBNWENfSU5UX0VYVF9TRU5TT1I2MQk2MQorI2RlZmluZSBNWENfSU5UX0VYVF9XRE9HCTYyCisjZGVmaW5lIE1YQ19JTlRfRVhUX1RWCQk2MworCisjZGVmaW5lIFBST0RfU0lHTkFUVVJFCQkweDEJLyogRm9yIE1YMzEgKi8KKworLyogc2lsaWNvbiByZXZpc2lvbnMgc3BlY2lmaWMgdG8gaS5NWDMxICovCisjZGVmaW5lIENISVBfUkVWXzFfMAkJMHgxMAorI2RlZmluZSBDSElQX1JFVl8xXzEJCTB4MTEKKyNkZWZpbmUgQ0hJUF9SRVZfMV8yCQkweDEyCisjZGVmaW5lIENISVBfUkVWXzFfMwkJMHgxMworI2RlZmluZSBDSElQX1JFVl8yXzAJCTB4MjAKKyNkZWZpbmUgQ0hJUF9SRVZfMl8xCQkweDIxCisjZGVmaW5lIENISVBfUkVWXzJfMgkJMHgyMgorI2RlZmluZSBDSElQX1JFVl8yXzMJCTB4MjMKKyNkZWZpbmUgQ0hJUF9SRVZfM18wCQkweDMwCisjZGVmaW5lIENISVBfUkVWXzNfMQkJMHgzMQorI2RlZmluZSBDSElQX1JFVl8zXzIJCTB4MzIKKworI2RlZmluZSBTWVNURU1fUkVWX01JTgkJQ0hJUF9SRVZfMV8wCisjZGVmaW5lIFNZU1RFTV9SRVZfTlVNCQkzCisKKy8qIGdwaW8gYW5kIGdwaW8gYmFzZWQgaW50ZXJydXB0IGhhbmRsaW5nICovCisjZGVmaW5lIEdQSU9fRFIJCSAJMHgwMAorI2RlZmluZSBHUElPX0dESVIJIAkweDA0CisjZGVmaW5lIEdQSU9fUFNSCSAJMHgwOAorI2RlZmluZSBHUElPX0lDUjEJIAkweDBDCisjZGVmaW5lIEdQSU9fSUNSMgkgCTB4MTAKKyNkZWZpbmUgR1BJT19JTVIJIAkweDE0CisjZGVmaW5lIEdQSU9fSVNSCSAJMHgxOAorI2RlZmluZSBHUElPX0lOVF9MT1dfTEVWCTB4MAorI2RlZmluZSBHUElPX0lOVF9ISUdIX0xFVgkweDEKKyNkZWZpbmUgR1BJT19JTlRfUklTRV9FREdFCTB4MgorI2RlZmluZSBHUElPX0lOVF9GQUxMX0VER0UJMHgzCisjZGVmaW5lIEdQSU9fSU5UX05PTkUJCTB4NAorCisvKiBNYW5kYXRvcnkgZGVmaW5lcyB1c2VkIGdsb2JhbGx5ICovCisKKy8qIHRoaXMgQ1BVIHN1cHBvcnRzIHVwIHRvIDk2IEdQSU9zICovCisjZGVmaW5lIEFSQ0hfTlJfR1BJT1MJCTk2CisKKyNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pICYmICFkZWZpbmVkKF9fTVhDX0JPT1RfVU5DT01QUkVTUykKKworZXh0ZXJuIHVuc2lnbmVkIGludCBzeXN0ZW1fcmV2OworCitzdGF0aWMgaW5saW5lIGludCBteDMxX3JldmlzaW9uKHZvaWQpCit7CisJcmV0dXJuIHN5c3RlbV9yZXY7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qICBfX0FTTV9BUkNIX01YQ19NWDMxX0hfXyAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmgKaW5kZXggZjZjYWFiMC4uNWZhMmEwNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Yy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGMuaApAQCAtMjQsMTMgKzI0LDc0IEBACiAjZXJyb3IgIkRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5LiIKICNlbmRpZgogCi0vKiBjbGVhbiB1cCBhbGwgdGhpbmdzIHRoYXQgYXJlIG5vdCB1c2VkICovCi0jaWZuZGVmIENPTkZJR19BUkNIX01YMwotIyBkZWZpbmUgY3B1X2lzX214MzEoKSAoMCkKKyNkZWZpbmUgTVhDX0NQVV9NWDEJCTEKKyNkZWZpbmUgTVhDX0NQVV9NWDIxCQkyMQorI2RlZmluZSBNWENfQ1BVX01YMjcJCTI3CisjZGVmaW5lIE1YQ19DUFVfTVgzMQkJMzEKKyNkZWZpbmUgTVhDX0NQVV9NWDM1CQkzNQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGludCBfX214Y19jcHVfdHlwZTsKICNlbmRpZgogCi0jaWZuZGVmIENPTkZJR19NQUNIX01YMjcKLSMgZGVmaW5lIGNwdV9pc19teDI3KCkgKDApCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCisjIGlmZGVmIG14Y19jcHVfdHlwZQorIyAgdW5kZWYgbXhjX2NwdV90eXBlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIF9fbXhjX2NwdV90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBteGNfY3B1X3R5cGUgTVhDX0NQVV9NWDEKKyMgZW5kaWYKKyMgZGVmaW5lIGNwdV9pc19teDEoKQkJKG14Y19jcHVfdHlwZSA9PSBNWENfQ1BVX01YMSkKKyNlbHNlCisjIGRlZmluZSBjcHVfaXNfbXgxKCkJCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDIxCisjIGlmZGVmIG14Y19jcHVfdHlwZQorIyAgdW5kZWYgbXhjX2NwdV90eXBlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIF9fbXhjX2NwdV90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBteGNfY3B1X3R5cGUgTVhDX0NQVV9NWDIxCisjIGVuZGlmCisjIGRlZmluZSBjcHVfaXNfbXgyMSgpCQkobXhjX2NwdV90eXBlID09IE1YQ19DUFVfTVgyMSkKKyNlbHNlCisjIGRlZmluZSBjcHVfaXNfbXgyMSgpCQkoMCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworIyBpZmRlZiBteGNfY3B1X3R5cGUKKyMgIHVuZGVmIG14Y19jcHVfdHlwZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIE1YQ19DUFVfTVgyNworIyBlbmRpZgorIyBkZWZpbmUgY3B1X2lzX214MjcoKQkJKG14Y19jcHVfdHlwZSA9PSBNWENfQ1BVX01YMjcpCisjZWxzZQorIyBkZWZpbmUgY3B1X2lzX214MjcoKQkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX01YMzEKKyMgaWZkZWYgbXhjX2NwdV90eXBlCisjICB1bmRlZiBteGNfY3B1X3R5cGUKKyMgIGRlZmluZSBteGNfY3B1X3R5cGUgX19teGNfY3B1X3R5cGUKKyMgZWxzZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBNWENfQ1BVX01YMzEKKyMgZW5kaWYKKyMgZGVmaW5lIGNwdV9pc19teDMxKCkJCShteGNfY3B1X3R5cGUgPT0gTVhDX0NQVV9NWDMxKQorI2Vsc2UKKyMgZGVmaW5lIGNwdV9pc19teDMxKCkJCSgwKQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDM1CisjIGlmZGVmIG14Y19jcHVfdHlwZQorIyAgdW5kZWYgbXhjX2NwdV90eXBlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIF9fbXhjX2NwdV90eXBlCisjIGVsc2UKKyMgIGRlZmluZSBteGNfY3B1X3R5cGUgTVhDX0NQVV9NWDM1CisjIGVuZGlmCisjIGRlZmluZSBjcHVfaXNfbXgzNSgpCQkobXhjX2NwdV90eXBlID09IE1YQ19DUFVfTVgzNSkKKyNlbHNlCisjIGRlZmluZSBjcHVfaXNfbXgzNSgpCQkoMCkKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9NWDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTVgyKQpAQCAtMzksNCArMTAwLDcgQEAKICNkZWZpbmUgQ1NDUl9BKG4pIChJT19BRERSRVNTKFdFSU1fQkFTRV9BRERSKSArIG4gKiAweDEwICsgMHg4KQogI2VuZGlmCiAKKyNkZWZpbmUgY3B1X2lzX214MygpCShjcHVfaXNfbXgzMSgpIHx8IGNwdV9pc19teDM1KCkpCisjZGVmaW5lIGNwdV9pc19teDIoKQkoY3B1X2lzX214MjEoKSB8fCBjcHVfaXNfbXgyNygpKQorCiAjZW5kaWYgLyogIF9fQVNNX0FSQ0hfTVhDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IGJiZmMzNzQuLmU1NjI0MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTI2LDkgKzI2LDYgQEAKIAljcHVfZG9faWRsZSgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCi17Ci0JY3B1X3Jlc2V0KDApOwotfQordm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKTsKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX1NZU1RFTV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LW14MS1teDIuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LW14MS1teDIuYwppbmRleCBkZjZmMTgzLi5hMzcxNjNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pb211eC1teDEtbXgyLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtbXgxLW14Mi5jCkBAIC0zMiw3ICszMiw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC1teDEtbXgyLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC5oPgogCiB2b2lkIG14Y19ncGlvX21vZGUoaW50IGdwaW9fbW9kZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3B3bS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvcHdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJmZmJjNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL3B3bS5jCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogc2ltcGxlIGRyaXZlciBmb3IgUFdNIChQdWxzZSBXaWR0aCBNb2R1bGF0b3IpIGNvbnRyb2xsZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIERlcml2ZWQgZnJvbSBweGEgUFdNIGRyaXZlciBieSBlcmljIG1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wd20uaD4KKworI2lmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgxIHx8IGRlZmluZWQgQ09ORklHX0FSQ0hfTVgyMQorI2RlZmluZSBQV01fVkVSXzEKKworI2RlZmluZSBQV01DUgkweDAwCS8qIFBXTSBDb250cm9sIFJlZ2lzdGVyCQkqLworI2RlZmluZSBQV01TUgkweDA0CS8qIFBXTSBTYW1wbGUgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBXTVBSCTB4MDgJLyogUFdNIFBlcmlvZCBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgUFdNQ05SCTB4MEMJLyogUFdNIENvdW50ZXIgUmVnaXN0ZXIJCSovCisKKyNkZWZpbmUgUFdNQ1JfSENUUgkJKDEgPDwgMTgpCQkvKiBIYWxmd29yZCBGSUZPIERhdGEgU3dhcHBpbmcJKi8KKyNkZWZpbmUgUFdNQ1JfQkNUUgkJKDEgPDwgMTcpCQkvKiBCeXRlIEZJRk8gRGF0YSBTd2FwcGluZwkqLworI2RlZmluZSBQV01DUl9TV1IJCSgxIDw8IDE2KQkJLyogU29mdHdhcmUgUmVzZXQJCSovCisjZGVmaW5lIFBXTUNSX0NMS1NSQ19QRVJDTEsJKDAgPDwgMTUpCQkvKiBQRVJDTEsgQ2xvY2sgU291cmNlCQkqLworI2RlZmluZSBQV01DUl9DTEtTUkNfQ0xLMzIJKDEgPDwgMTUpCQkvKiAzMktIeiBDbG9jayBTb3VyY2UJCSovCisjZGVmaW5lIFBXTUNSX1BSRVNDQUxFUih4KQkoKCh4IC0gMSkgJiAweDdGKSA8PCA4KQkvKiBQUkVTQ0FMRVIJCQkqLworI2RlZmluZSBQV01DUl9JUlEJCSgxIDw8IDcpCQkvKiBJbnRlcnJ1cHQgUmVxdWVzdAkJKi8KKyNkZWZpbmUgUFdNQ1JfSVJRRU4JCSgxIDw8IDYpCQkvKiBJbnRlcnJ1cHQgUmVxdWVzdCBFbmFibGUJKi8KKyNkZWZpbmUgUFdNQ1JfRklGT0FWCQkoMSA8PCA1KQkJLyogRklGTyBBdmFpbGFibGUJCSovCisjZGVmaW5lIFBXTUNSX0VOCQkoMSA8PCA0KQkJLyogRW5hYmxlcy9EaXNhYmxlcyB0aGUgUFdNCSovCisjZGVmaW5lIFBXTUNSX1JFUEVBVCh4KQkJKCgoeCkgJiAweDAzKSA8PCAyKQkvKiBTYW1wbGUgUmVwZWF0cwkJKi8KKyNkZWZpbmUgUFdNQ1JfRElWKHgpCQkoKCh4KSAmIDB4MDMpIDw8IDApCS8qIENsb2NrIGRpdmlkZXIgMi80LzgvMTYJKi8KKworI2RlZmluZSBNQVhfRElWCQkJKDEyOCAqIDE2KQorI2VuZGlmCisKKyNpZiBkZWZpbmVkIENPTkZJR19NQUNIX01YMjcgfHwgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMxCisjZGVmaW5lIFBXTV9WRVJfMgorCisjZGVmaW5lIFBXTUNSCTB4MDAJLyogUFdNIENvbnRyb2wgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBXTVNSCTB4MDQJLyogUFdNIFN0YXR1cyBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgUFdNSVIJMHgwOAkvKiBQV00gSW50ZXJydXB0IFJlZ2lzdGVyCSovCisjZGVmaW5lIFBXTVNBUgkweDBDCS8qIFBXTSBTYW1wbGUgUmVnaXN0ZXIJCSovCisjZGVmaW5lIFBXTVBSCTB4MTAJLyogUFdNIFBlcmlvZCBSZWdpc3RlcgkJKi8KKyNkZWZpbmUgUFdNQ05SCTB4MTQJLyogUFdNIENvdW50ZXIgUmVnaXN0ZXIJCSovCisKKyNkZWZpbmUgUFdNQ1JfRU4JCSgxIDw8IDApCQkvKiBFbmFibGVzL0Rpc2FibGVzIHRoZSBQV00JKi8KKyNkZWZpbmUgUFdNQ1JfUkVQRUFUKHgpCQkoKCh4KSAmIDB4MDMpIDw8IDEpCS8qIFNhbXBsZSBSZXBlYXRzCQkqLworI2RlZmluZSBQV01DUl9TV1IJCSgxIDw8IDMpCQkvKiBTb2Z0d2FyZSBSZXNldAkJKi8KKyNkZWZpbmUgUFdNQ1JfUFJFU0NBTEVSKHgpCSgoKHggLSAxKSAmIDB4RkZGKSA8PCA0KS8qIFBSRVNDQUxFUgkJCSovCisjZGVmaW5lIFBXTUNSX0NMS1NSQyh4KQkJKCgoeCkgJiAweDMpIDw8IDE2KQorI2RlZmluZSBQV01DUl9DTEtTUkNfT0ZGCSgwIDw8IDE2KQorI2RlZmluZSBQV01DUl9DTEtTUkNfSVBHCSgxIDw8IDE2KQorI2RlZmluZSBQV01DUl9DTEtTUkNfSVBHX0hJR0gJKDIgPDwgMTYpCisjZGVmaW5lIFBXTUNSX0NMS1NSQ19DTEszMgkoMyA8PCAxNikKKyNkZWZpbmUgUFdNQ1JfUE9VVEMKKyNkZWZpbmUgUFdNQ1JfSENUUgkJKDEgPDwgMjApCQkvKiBIYWxmd29yZCBGSUZPIERhdGEgU3dhcHBpbmcJKi8KKyNkZWZpbmUgUFdNQ1JfQkNUUgkJKDEgPDwgMjEpCQkvKiBCeXRlIEZJRk8gRGF0YSBTd2FwcGluZwkqLworI2RlZmluZSBQV01DUl9EQkdFTgkJKDEgPDwgMjIpCQkvKiBEZWJ1ZyBNb2RlCQkJKi8KKyNkZWZpbmUgUFdNQ1JfV0FJVEVOCQkoMSA8PCAyMykJCS8qIFdhaXQgTW9kZQkJCSovCisjZGVmaW5lIFBXTUNSX0RPWkVOCQkoMSA8PCAyNCkJCS8qIERvemUgTW9kZQkJCSovCisjZGVmaW5lIFBXTUNSX1NUT1BFTgkJKDEgPDwgMjUpCQkvKiBTdG9wIE1vZGUJCQkqLworI2RlZmluZSBQV01DUl9GV00oeCkJCSgoKHgpICYgMHgzKSA8PCAyNikJLyogRklGTyBXYXRlciBNYXJrCQkqLworCisjZGVmaW5lIE1BWF9ESVYgNDA5NgorI2VuZGlmCisKKyNkZWZpbmUgUFdNU19TQU1QTEUoeCkJCSgoeCkgJiAweEZGRkYpCQkvKiBDb250YWlucyBhIHR3by1zYW1wbGUgd29yZAkqLworI2RlZmluZSBQV01QX1BFUklPRCh4KQkJKCh4KSAmIDB4RkZGRikJCS8qIFJlcHJlc2VudHMgdGhlIFBXTSdzIHBlcmlvZAkqLworI2RlZmluZSBQV01DX0NPVU5URVIoeCkJCSgoeCkgJiAweEZGRkYpCQkvKiBSZXByZXNlbnRzIHRoZSBjdXJyZW50IGNvdW50IHZhbHVlCSovCisKK3N0cnVjdCBwd21fZGV2aWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW5vZGU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCWNvbnN0IGNoYXIJKmxhYmVsOworCXN0cnVjdCBjbGsJKmNsazsKKworCWludAkJY2xrX2VuYWJsZWQ7CisJdm9pZCBfX2lvbWVtCSptbWlvX2Jhc2U7CisKKwl1bnNpZ25lZCBpbnQJdXNlX2NvdW50OworCXVuc2lnbmVkIGludAlwd21faWQ7Cit9OworCitpbnQgcHdtX2NvbmZpZyhzdHJ1Y3QgcHdtX2RldmljZSAqcHdtLCBpbnQgZHV0eV9ucywgaW50IHBlcmlvZF9ucykKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYzsKKwl1bnNpZ25lZCBsb25nIHBlcmlvZF9jeWNsZXMsIGR1dHlfY3ljbGVzLCBwcmVzY2FsZTsKKworCWlmIChwd20gPT0gTlVMTCB8fCBwZXJpb2RfbnMgPT0gMCB8fCBkdXR5X25zID4gcGVyaW9kX25zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWMgPSBjbGtfZ2V0X3JhdGUocHdtLT5jbGspOworCWMgPSBjICogcGVyaW9kX25zOworCWRvX2RpdihjLCAxMDAwMDAwMDAwKTsKKwlwZXJpb2RfY3ljbGVzID0gYzsKKworCXByZXNjYWxlID0gcGVyaW9kX2N5Y2xlcyAvIDB4MTAwMDAgKyAxOworCisJcGVyaW9kX2N5Y2xlcyAvPSBwcmVzY2FsZTsKKwljID0gKHVuc2lnbmVkIGxvbmcgbG9uZylwZXJpb2RfY3ljbGVzICogZHV0eV9uczsKKwlkb19kaXYoYywgcGVyaW9kX25zKTsKKwlkdXR5X2N5Y2xlcyA9IGM7CisKKyNpZmRlZiBQV01fVkVSXzIKKwl3cml0ZWwoZHV0eV9jeWNsZXMsIHB3bS0+bW1pb19iYXNlICsgUFdNU0FSKTsKKwl3cml0ZWwocGVyaW9kX2N5Y2xlcywgcHdtLT5tbWlvX2Jhc2UgKyBQV01QUik7CisJd3JpdGVsKFBXTUNSX1BSRVNDQUxFUihwcmVzY2FsZSAtIDEpIHwgUFdNQ1JfQ0xLU1JDX0lQR19ISUdIIHwgUFdNQ1JfRU4sCisJCQlwd20tPm1taW9fYmFzZSArIFBXTUNSKTsKKyNlbGlmIGRlZmluZWQgUFdNX1ZFUl8xCisjZXJyb3IgUFdNIG5vdCB5ZXQgd29ya2luZyBvbiBNWDEgLyBNWDIxCisjZW5kaWYKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChwd21fY29uZmlnKTsKKworaW50IHB3bV9lbmFibGUoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKCFwd20tPmNsa19lbmFibGVkKSB7CisJCXJjID0gY2xrX2VuYWJsZShwd20tPmNsayk7CisJCWlmICghcmMpCisJCQlwd20tPmNsa19lbmFibGVkID0gMTsKKwl9CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTChwd21fZW5hYmxlKTsKKwordm9pZCBwd21fZGlzYWJsZShzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQoreworCWlmIChwd20tPmNsa19lbmFibGVkKSB7CisJCWNsa19kaXNhYmxlKHB3bS0+Y2xrKTsKKwkJcHdtLT5jbGtfZW5hYmxlZCA9IDA7CisJfQorfQorRVhQT1JUX1NZTUJPTChwd21fZGlzYWJsZSk7CisKK3N0YXRpYyBERUZJTkVfTVVURVgocHdtX2xvY2spOworc3RhdGljIExJU1RfSEVBRChwd21fbGlzdCk7CisKK3N0cnVjdCBwd21fZGV2aWNlICpwd21fcmVxdWVzdChpbnQgcHdtX2lkLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwlzdHJ1Y3QgcHdtX2RldmljZSAqcHdtOworCWludCBmb3VuZCA9IDA7CisKKwltdXRleF9sb2NrKCZwd21fbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB3bSwgJnB3bV9saXN0LCBub2RlKSB7CisJCWlmIChwd20tPnB3bV9pZCA9PSBwd21faWQpIHsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZvdW5kKSB7CisJCWlmIChwd20tPnVzZV9jb3VudCA9PSAwKSB7CisJCQlwd20tPnVzZV9jb3VudCsrOworCQkJcHdtLT5sYWJlbCA9IGxhYmVsOworCQl9IGVsc2UKKwkJCXB3bSA9IEVSUl9QVFIoLUVCVVNZKTsKKwl9IGVsc2UKKwkJcHdtID0gRVJSX1BUUigtRU5PRU5UKTsKKworCW11dGV4X3VubG9jaygmcHdtX2xvY2spOworCXJldHVybiBwd207Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9yZXF1ZXN0KTsKKwordm9pZCBwd21fZnJlZShzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQoreworCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKKworCWlmIChwd20tPnVzZV9jb3VudCkgeworCQlwd20tPnVzZV9jb3VudC0tOworCQlwd20tPmxhYmVsID0gTlVMTDsKKwl9IGVsc2UKKwkJcHJfd2FybmluZygiUFdNIGRldmljZSBhbHJlYWR5IGZyZWVkXG4iKTsKKworCW11dGV4X3VubG9jaygmcHdtX2xvY2spOworfQorRVhQT1JUX1NZTUJPTChwd21fZnJlZSk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG14Y19wd21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcHdtX2RldmljZSAqcHdtOworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlpbnQgcmV0ID0gMDsKKworCXB3bSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwd21fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHB3bSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwd20tPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInB3bSIpOworCisJaWYgKElTX0VSUihwd20tPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihwd20tPmNsayk7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJcHdtLT5jbGtfZW5hYmxlZCA9IDA7CisKKwlwd20tPnVzZV9jb3VudCA9IDA7CisJcHdtLT5wd21faWQgPSBwZGV2LT5pZDsKKwlwd20tPnBkZXYgPSBwZGV2OworCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2UgZGVmaW5lZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfY2xrOworCX0KKworCXIgPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0ICsgMSwgcGRldi0+bmFtZSk7CisJaWYgKHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2ZyZWVfY2xrOworCX0KKworCXB3bS0+bW1pb19iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKKwlpZiAocHdtLT5tbWlvX2Jhc2UgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCgpIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZwd20tPm5vZGUsICZwd21fbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwd20pOworCXJldHVybiAwOworCitlcnJfZnJlZV9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworZXJyX2ZyZWVfY2xrOgorCWNsa19wdXQocHdtLT5jbGspOworZXJyX2ZyZWU6CisJa2ZyZWUocHdtKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBteGNfcHdtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwd21fZGV2aWNlICpwd207CisJc3RydWN0IHJlc291cmNlICpyOworCisJcHdtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaWYgKHB3bSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKKwlsaXN0X2RlbCgmcHdtLT5ub2RlKTsKKwltdXRleF91bmxvY2soJnB3bV9sb2NrKTsKKworCWlvdW5tYXAocHdtLT5tbWlvX2Jhc2UpOworCisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOworCisJY2xrX3B1dChwd20tPmNsayk7CisKKwlrZnJlZShwd20pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteGNfcHdtX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibXhjX3B3bSIsCisJfSwKKwkucHJvYmUJCT0gbXhjX3B3bV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG14Y19wd21fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG14Y19wd21faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm14Y19wd21fZHJpdmVyKTsKK30KK2FyY2hfaW5pdGNhbGwobXhjX3B3bV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG14Y19wd21fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZteGNfcHdtX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChteGNfcHdtX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKCJTYXNjaGEgSGF1ZXIgPHMuaGF1ZXJAcGVuZ3V0cm9uaXguZGU+Iik7CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3N5c3RlbS5jIGIvYXJjaC9hcm0vcGxhdC1teGMvc3lzdGVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzljMzc1NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL3N5c3RlbS5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICogQ29weXJpZ2h0IDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKKyAqIENvcHlyaWdodCAyMDA5IElseWEgWWFub2ssIEVtY3JhZnQgU3lzdGVtcyBMdGQsIHlhbm9rQGVtY3JhZnQuY29tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCisjZGVmaW5lIFdET0dfV0NSX1JFRwkJSU9fQUREUkVTUyhXRFRfQkFTRV9BRERSKQorI2RlZmluZSBXRE9HX1dDUl9FTkFCTEUJCSgxIDw8IDApCisjZWxzZQorI2RlZmluZSBXRE9HX1dDUl9SRUcJCUlPX0FERFJFU1MoV0RPR19CQVNFX0FERFIpCisjZGVmaW5lIFdET0dfV0NSX0VOQUJMRQkJKDEgPDwgMikKKyNlbmRpZgorCisvKgorICogUmVzZXQgdGhlIHN5c3RlbS4gSXQgaXMgY2FsbGVkIGJ5IG1hY2hpbmVfcmVzdGFydCgpLgorICovCit2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCit7CisJaWYgKCFjcHVfaXNfbXgxKCkpIHsKKwkJc3RydWN0IGNsayAqY2xrOworCisJCWNsayA9IGNsa19nZXRfc3lzKCJpbXgtd2R0LjAiLCBOVUxMKTsKKwkJaWYgKCFJU19FUlIoY2xrKSkKKwkJCWNsa19lbmFibGUoY2xrKTsKKwl9CisKKwkvKiBBc3NlcnQgU1JTIHNpZ25hbCAqLworCV9fcmF3X3dyaXRldyhXRE9HX1dDUl9FTkFCTEUsIFdET0dfV0NSX1JFRyk7CisKKwkvKiB3YWl0IGZvciByZXNldCB0byBhc3NlcnQuLi4gKi8KKwltZGVsYXkoNTAwKTsKKworCXByaW50ayhLRVJOX0VSUiAiV2F0Y2hkb2cgcmVzZXQgZmFpbGVkIHRvIGFzc2VydCByZXNldFxuIik7CisKKwkvKiBkZWxheSB0byBhbGxvdyB0aGUgc2VyaWFsIHBvcnQgdG8gc2hvdyB0aGUgbWVzc2FnZSAqLworCW1kZWxheSg1MCk7CisKKwkvKiB3ZSdsbCB0YWtlIGEganVtcCB0aHJvdWdoIHplcm8gYXMgYSBwb29yIHNlY29uZCAqLworCWNwdV9yZXNldCgwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL3RpbWUuYwppbmRleCA3NThhMTI5Li5lZjFiM2NkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvdGltZS5jCkBAIC0zNCw5ICszNCw2IEBACiBzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjbG9ja2V2ZW50X214YzsKIHN0YXRpYyBlbnVtIGNsb2NrX2V2ZW50X21vZGUgY2xvY2tldmVudF9tb2RlID0gQ0xPQ0tfRVZUX01PREVfVU5VU0VEOwogCi0vKiBjbG9jayBzb3VyY2UgZm9yIHRoZSB0aW1lciAqLwotc3RhdGljIHN0cnVjdCBjbGsgKnRpbWVyX2NsazsKLQogLyogY2xvY2sgc291cmNlICovCiAKIHN0YXRpYyBjeWNsZV90IG14Y19nZXRfY3ljbGVzKHZvaWQpCkBAIC01MywxMyArNTAsMTEgQEAKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBteGNfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbXhjX2Nsb2Nrc291cmNlX2luaXQoc3RydWN0IGNsayAqdGltZXJfY2xrKQogewotCXVuc2lnbmVkIGludCBjbG9jazsKKwl1bnNpZ25lZCBpbnQgYyA9IGNsa19nZXRfcmF0ZSh0aW1lcl9jbGspOwogCi0JY2xvY2sgPSBjbGtfZ2V0X3JhdGUodGltZXJfY2xrKTsKLQotCWNsb2Nrc291cmNlX214Yy5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChjbG9jaywKKwljbG9ja3NvdXJjZV9teGMubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoYywKIAkJCQkJY2xvY2tzb3VyY2VfbXhjLnNoaWZ0KTsKIAljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfbXhjKTsKIApAQCAtMTc3LDEzICsxNzIsMTEgQEAKIAkucmF0aW5nCQk9IDIwMCwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG14Y19jbG9ja2V2ZW50X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IG14Y19jbG9ja2V2ZW50X2luaXQoc3RydWN0IGNsayAqdGltZXJfY2xrKQogewotCXVuc2lnbmVkIGludCBjbG9jazsKKwl1bnNpZ25lZCBpbnQgYyA9IGNsa19nZXRfcmF0ZSh0aW1lcl9jbGspOwogCi0JY2xvY2sgPSBjbGtfZ2V0X3JhdGUodGltZXJfY2xrKTsKLQotCWNsb2NrZXZlbnRfbXhjLm11bHQgPSBkaXZfc2MoY2xvY2ssIE5TRUNfUEVSX1NFQywKKwljbG9ja2V2ZW50X214Yy5tdWx0ID0gZGl2X3NjKGMsIE5TRUNfUEVSX1NFQywKIAkJCQkJY2xvY2tldmVudF9teGMuc2hpZnQpOwogCWNsb2NrZXZlbnRfbXhjLm1heF9kZWx0YV9ucyA9CiAJCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmUsICZjbG9ja2V2ZW50X214Yyk7CkBAIC0xOTcsMTQgKzE5MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19pbml0IG14Y190aW1lcl9pbml0KGNvbnN0IGNoYXIgKmNsa190aW1lcikKK3ZvaWQgX19pbml0IG14Y190aW1lcl9pbml0KHN0cnVjdCBjbGsgKnRpbWVyX2NsaykKIHsKLQl0aW1lcl9jbGsgPSBjbGtfZ2V0KE5VTEwsIGNsa190aW1lcik7Ci0JaWYgKCF0aW1lcl9jbGspIHsKLQkJcHJpbnRrKEtFUk5fRVJSIkNhbm5vdCBkZXRlcm1pbmUgdGltZXIgY2xvY2suIEdpdmluZyB1cC5cbiIpOwotCQlyZXR1cm47Ci0JfQotCiAJY2xrX2VuYWJsZSh0aW1lcl9jbGspOwogCiAJLyoKQEAgLTIxOSwxMCArMjA2LDkgQEAKIAkJICAgICBUSU1FUl9CQVNFICsgTVhDX1RDVEwpOwogCiAJLyogaW5pdCBhbmQgcmVnaXN0ZXIgdGhlIHRpbWVyIHRvIHRoZSBmcmFtZXdvcmsgKi8KLQlteGNfY2xvY2tzb3VyY2VfaW5pdCgpOwotCW14Y19jbG9ja2V2ZW50X2luaXQoKTsKKwlteGNfY2xvY2tzb3VyY2VfaW5pdCh0aW1lcl9jbGspOworCW14Y19jbG9ja2V2ZW50X2luaXQodGltZXJfY2xrKTsKIAogCS8qIE1ha2UgaXJxcyBoYXBwZW4gKi8KIAlzZXR1cF9pcnEoVElNRVJfSU5URVJSVVBULCAmbXhjX3RpbWVyX2lycSk7CiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggNDZkM2IwYi4uOWRkNjhmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTExLDE0ICsxMSwxNyBAQAogCiBjb25maWcgQVJDSF9PTUFQMQogCWJvb2wgIlRJIE9NQVAxIgorCXNlbGVjdCBDT01NT05fQ0xLREVWCiAKIGNvbmZpZyBBUkNIX09NQVAyCiAJYm9vbCAiVEkgT01BUDIiCiAJc2VsZWN0IENQVV9WNgorCXNlbGVjdCBDT01NT05fQ0xLREVWCiAKIGNvbmZpZyBBUkNIX09NQVAzCiAJYm9vbCAiVEkgT01BUDMiCiAJc2VsZWN0IENQVV9WNworCXNlbGVjdCBDT01NT05fQ0xLREVWCiAKIGVuZGNob2ljZQogCkBAIC0xMDQsNiArMTA3LDE0IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBPTUFQIE11bHRpY2hhbm5lbAogCSAgQnVmZmVyZWQgU2VyaWFsIFBvcnQuCiAKK2NvbmZpZyBPTUFQX01CT1hfRldLCisJdHJpc3RhdGUgIk1haWxib3ggZnJhbWV3b3JrIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBPTUFQIE1haWxib3ggZnJhbWV3b3JrIHN1cHBvcnQgZm9yCisJICBEU1AsIElWQTEuMCBhbmQgSVZBMiBpbiBPTUFQMS8yLzMuCisKIGNob2ljZQogICAgICAgICBwcm9tcHQgIlN5c3RlbSB0aW1lciIKIAlkZWZhdWx0IE9NQVBfTVBVX1RJTUVSCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCmluZGV4IGJlNmFhYjkuLjJlMDYxNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCkBAIC0zNiw0NCArMzYsNiBAQAogICogU3RhbmRhcmQgY2xvY2sgZnVuY3Rpb25zIGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9jbGsuaAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyoKLSAqIFJldHVybnMgYSBjbG9jay4gTm90ZSB0aGF0IHdlIGZpcnN0IHRyeSB0byB1c2UgZGV2aWNlIGlkIG9uIHRoZSBidXMKLSAqIGFuZCBjbG9jayBuYW1lLiBJZiB0aGlzIGZhaWxzLCB3ZSB0cnkgdG8gdXNlIGNsb2NrIG5hbWUgb25seS4KLSAqLwotc3RydWN0IGNsayAqIGNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKLXsKLQlzdHJ1Y3QgY2xrICpwLCAqY2xrID0gRVJSX1BUUigtRU5PRU5UKTsKLQlpbnQgaWRubzsKLQotCWlmIChkZXYgPT0gTlVMTCB8fCBkZXYtPmJ1cyAhPSAmcGxhdGZvcm1fYnVzX3R5cGUpCi0JCWlkbm8gPSAtMTsKLQllbHNlCi0JCWlkbm8gPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KS0+aWQ7Ci0KLQltdXRleF9sb2NrKCZjbG9ja3NfbXV0ZXgpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7Ci0JCWlmIChwLT5pZCA9PSBpZG5vICYmCi0JCSAgICBzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7Ci0JCQljbGsgPSBwOwotCQkJZ290byBmb3VuZDsKLQkJfQotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgewotCQlpZiAoc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgewotCQkJY2xrID0gcDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi1mb3VuZDoKLQltdXRleF91bmxvY2soJmNsb2Nrc19tdXRleCk7Ci0KLQlyZXR1cm4gY2xrOwotfQotRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKLQogaW50IGNsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTQsMjIgKzc2LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOwogCi1pbnQgY2xrX2dldF91c2Vjb3VudChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKLQkJcmV0dXJuIDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JcmV0ID0gY2xrLT51c2Vjb3VudDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXRfdXNlY291bnQpOwotCiB1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE0NiwxMyArOTIsNiBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwogCi12b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQotewotCWlmIChjbGsgJiYgIUlTX0VSUihjbGspKQotCQltb2R1bGVfcHV0KGNsay0+b3duZXIpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfcHV0KTsKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBPcHRpb25hbCBjbG9jayBmdW5jdGlvbnMgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L2Nsay5oCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTg1LDYgKzEyNCwxMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKIAlpZiAoYXJjaF9jbG9jay0+Y2xrX3NldF9yYXRlKQogCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfc2V0X3JhdGUoY2xrLCByYXRlKTsKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKGNsay0+cmVjYWxjKQorCQkJY2xrLT5yYXRlID0gY2xrLT5yZWNhbGMoY2xrKTsKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjAwLDggKzE0NCwxNiBAQAogCQlyZXR1cm4gcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCWlmIChhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudCkKLQkJcmV0ID0gIGFyY2hfY2xvY2stPmNsa19zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKKwlpZiAoY2xrLT51c2Vjb3VudCA9PSAwKSB7CisJCWlmIChhcmNoX2Nsb2NrLT5jbGtfc2V0X3BhcmVudCkKKwkJCXJldCA9IGFyY2hfY2xvY2stPmNsa19zZXRfcGFyZW50KGNsaywgcGFyZW50KTsKKwkJaWYgKHJldCA9PSAwKSB7CisJCQlpZiAoY2xrLT5yZWNhbGMpCisJCQkJY2xrLT5yYXRlID0gY2xrLT5yZWNhbGMoY2xrKTsKKwkJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisJCX0KKwl9IGVsc2UKKwkJcmV0ID0gLUVCVVNZOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTIxMCwxOCArMTYyLDcgQEAKIAogc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGNsayAqIHJldCA9IE5VTEw7Ci0KLQlpZiAoY2xrID09IE5VTEwgfHwgSVNfRVJSKGNsaykpCi0JCXJldHVybiByZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JaWYgKGFyY2hfY2xvY2stPmNsa19nZXRfcGFyZW50KQotCQlyZXQgPSBhcmNoX2Nsb2NrLT5jbGtfZ2V0X3BhcmVudChjbGspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gY2xrLT5wYXJlbnQ7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXRfcGFyZW50KTsKIApAQCAtMjUwLDE0ICsxOTEsMjAgQEAKIF9fc2V0dXAoIm1wdXJhdGU9Iiwgb21hcF9jbGtfc2V0dXApOwogCiAvKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhbHdheXMgaGF2ZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2sgKi8KLXZvaWQgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit1bnNpZ25lZCBsb25nIGZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKLQkJcmV0dXJuOworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZTsKK30KIAotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlOwotCWlmICh1bmxpa2VseShjbGstPmZsYWdzICYgUkFURV9QUk9QQUdBVEVTKSkKLQkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKK3ZvaWQgY2xrX3JlcGFyZW50KHN0cnVjdCBjbGsgKmNoaWxkLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJbGlzdF9kZWxfaW5pdCgmY2hpbGQtPnNpYmxpbmcpOworCWlmIChwYXJlbnQpCisJCWxpc3RfYWRkKCZjaGlsZC0+c2libGluZywgJnBhcmVudC0+Y2hpbGRyZW4pOworCWNoaWxkLT5wYXJlbnQgPSBwYXJlbnQ7CisKKwkvKiBub3cgZG8gdGhlIGRlYnVnZnMgcmVuYW1pbmcgdG8gcmVhdHRhY2ggdGhlIGNoaWxkCisJICAgdG8gdGhlIHByb3BlciBwYXJlbnQgKi8KIH0KIAogLyogUHJvcGFnYXRlIHJhdGUgdG8gY2hpbGRyZW4gKi8KQEAgLTI2NSwxNyArMjEyLDE1IEBACiB7CiAJc3RydWN0IGNsayAqY2xrcDsKIAotCWlmICh0Y2xrID09IE5VTEwgfHwgSVNfRVJSKHRjbGspKQotCQlyZXR1cm47Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKGxpa2VseShjbGtwLT5wYXJlbnQgIT0gdGNsaykpCi0JCQljb250aW51ZTsKLQkJaWYgKGxpa2VseSgodTMyKWNsa3AtPnJlY2FsYykpCi0JCQljbGtwLT5yZWNhbGMoY2xrcCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmdGNsay0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKKwkJaWYgKGNsa3AtPnJlY2FsYykKKwkJCWNsa3AtPnJhdGUgPSBjbGtwLT5yZWNhbGMoY2xrcCk7CisJCXByb3BhZ2F0ZV9yYXRlKGNsa3ApOwogCX0KIH0KIAorc3RhdGljIExJU1RfSEVBRChyb290X2Nsa3MpOworCiAvKioKICAqIHJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzIC0gcmVjYWxjdWxhdGUgYW5kIHByb3BhZ2F0ZSBhbGwgcm9vdCBjbG9ja3MKICAqCkBAIC0yODcsMTggKzIzMiwzNSBAQAogewogCXN0cnVjdCBjbGsgKmNsa3A7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKHVubGlrZWx5KCFjbGtwLT5wYXJlbnQpICYmIGxpa2VseSgodTMyKWNsa3AtPnJlY2FsYykpCi0JCQljbGtwLT5yZWNhbGMoY2xrcCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGtwLCAmcm9vdF9jbGtzLCBzaWJsaW5nKSB7CisJCWlmIChjbGtwLT5yZWNhbGMpCisJCQljbGtwLT5yYXRlID0gY2xrcC0+cmVjYWxjKGNsa3ApOworCQlwcm9wYWdhdGVfcmF0ZShjbGtwKTsKIAl9CiB9CiAKK3ZvaWQgY2xrX2luaXRfb25lKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlJTklUX0xJU1RfSEVBRCgmY2xrLT5jaGlsZHJlbik7Cit9CisKIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQogewogCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKgorCSAqIHRyYXAgb3V0IGFscmVhZHkgcmVnaXN0ZXJlZCBjbG9ja3MKKwkgKi8KKwlpZiAoY2xrLT5ub2RlLm5leHQgfHwgY2xrLT5ub2RlLnByZXYpCisJCXJldHVybiAwOworCiAJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKwlpZiAoY2xrLT5wYXJlbnQpCisJCWxpc3RfYWRkKCZjbGstPnNpYmxpbmcsICZjbGstPnBhcmVudC0+Y2hpbGRyZW4pOworCWVsc2UKKwkJbGlzdF9hZGQoJmNsay0+c2libGluZywgJnJvb3RfY2xrcyk7CisKIAlsaXN0X2FkZCgmY2xrLT5ub2RlLCAmY2xvY2tzKTsKIAlpZiAoY2xrLT5pbml0KQogCQljbGstPmluaXQoY2xrKTsKQEAgLTMxNCwzOSArMjc2LDEyIEBACiAJCXJldHVybjsKIAogCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CisJbGlzdF9kZWwoJmNsay0+c2libGluZyk7CiAJbGlzdF9kZWwoJmNsay0+bm9kZSk7CiAJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTChjbGtfdW5yZWdpc3Rlcik7CiAKLXZvaWQgY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChjbGsgPT0gTlVMTCB8fCBJU19FUlIoY2xrKSkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotCWlmIChhcmNoX2Nsb2NrLT5jbGtfZGVueV9pZGxlKQotCQlhcmNoX2Nsb2NrLT5jbGtfZGVueV9pZGxlKGNsayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGNsa19kZW55X2lkbGUpOwotCi12b2lkIGNsa19hbGxvd19pZGxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGNsayA9PSBOVUxMIHx8IElTX0VSUihjbGspKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7Ci0JaWYgKGFyY2hfY2xvY2stPmNsa19hbGxvd19pZGxlKQotCQlhcmNoX2Nsb2NrLT5jbGtfYWxsb3dfaWRsZShjbGspOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChjbGtfYWxsb3dfaWRsZSk7Ci0KIHZvaWQgY2xrX2VuYWJsZV9pbml0X2Nsb2Nrcyh2b2lkKQogewogCXN0cnVjdCBjbGsgKmNsa3A7CkBAIC0zNTgsNiArMjkzLDIzIEBACiB9CiBFWFBPUlRfU1lNQk9MKGNsa19lbmFibGVfaW5pdF9jbG9ja3MpOwogCisvKgorICogTG93IGxldmVsIGhlbHBlcnMKKyAqLworc3RhdGljIGludCBjbGtsbF9lbmFibGVfbnVsbChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsa2xsX2Rpc2FibGVfbnVsbChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX251bGwgPSB7CisJLmVuYWJsZQkJPSBjbGtsbF9lbmFibGVfbnVsbCwKKwkuZGlzYWJsZQk9IGNsa2xsX2Rpc2FibGVfbnVsbCwKK307CisKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIHZvaWQgY2xrX2luaXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSkKIHsKQEAgLTM4Myw4ICszMzUsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjaywgJmNsb2Nrcywgbm9kZSkgewotCQlpZiAoY2stPnVzZWNvdW50ID4gMCB8fCAoY2stPmZsYWdzICYgQUxXQVlTX0VOQUJMRUQpIHx8Ci0JCQljay0+ZW5hYmxlX3JlZyA9PSAwKQorCQlpZiAoY2stPm9wcyA9PSAmY2xrb3BzX251bGwpCisJCQljb250aW51ZTsKKworCQlpZiAoY2stPnVzZWNvdW50ID4gMCB8fCBjay0+ZW5hYmxlX3JlZyA9PSAwKQogCQkJY29udGludWU7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCmluZGV4IDY4MjVmYmIuLmQxNzk3MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IF9fb21hcDJfc2V0X2dsb2JhbHModm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc190YXAob21hcDJfZ2xvYmFscyk7Ci0Jb21hcDJfc2V0X2dsb2JhbHNfbWVtb3J5KG9tYXAyX2dsb2JhbHMpOworCW9tYXAyX3NldF9nbG9iYWxzX3NkcmMob21hcDJfZ2xvYmFscyk7CiAJb21hcDJfc2V0X2dsb2JhbHNfY29udHJvbChvbWFwMl9nbG9iYWxzKTsKIAlvbWFwMl9zZXRfZ2xvYmFsc19wcmNtKG9tYXAyX2dsb2JhbHMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NwdS1vbWFwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYwppbmRleCBiMjY5MDI0Li44NDNlOGFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY3B1LW9tYXAuYwpAQCAtMjMsMTAgKzIzLDEzIEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjZGVmaW5lIFZFUllfSElfUkFURQk5MDAwMDAwMDAKIAorc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqZnJlcV90YWJsZTsKKwogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAjZGVmaW5lIE1QVV9DTEsJCSJtcHUiCiAjZWxzZQpAQCAtMzksNiArNDIsOSBAQAogCiBpbnQgb21hcF92ZXJpZnlfc3BlZWQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CisJaWYgKGZyZXFfdGFibGUpCisJCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCBmcmVxX3RhYmxlKTsKKwogCWlmIChwb2xpY3ktPmNwdSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTcwLDEyICs3NiwyNiBAQAogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCWludCByZXQgPSAwOwogCisJLyogRW5zdXJlIGRlc2lyZWQgcmF0ZSBpcyB3aXRoaW4gYWxsb3dlZCByYW5nZS4gIFNvbWUgZ292ZW5vcnMKKwkgKiAob25kZW1hbmQpIHdpbGwganVzdCBwYXNzIHRhcmdldF9mcmVxPTAgdG8gZ2V0IHRoZSBtaW5pbXVtLiAqLworCWlmICh0YXJnZXRfZnJlcSA8IHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSkKKwkJdGFyZ2V0X2ZyZXEgPSBwb2xpY3ktPmNwdWluZm8ubWluX2ZyZXE7CisJaWYgKHRhcmdldF9mcmVxID4gcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKQorCQl0YXJnZXRfZnJlcSA9IHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcTsKKwogCWZyZXFzLm9sZCA9IG9tYXBfZ2V0c3BlZWQoMCk7CiAJZnJlcXMubmV3ID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgdGFyZ2V0X2ZyZXEgKiAxMDAwKSAvIDEwMDA7CiAJZnJlcXMuY3B1ID0gMDsKIAorCWlmIChmcmVxcy5vbGQgPT0gZnJlcXMubmV3KQorCQlyZXR1cm4gcmV0OworCiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKLQlyZXQgPSBjbGtfc2V0X3JhdGUobXB1X2NsaywgdGFyZ2V0X2ZyZXEgKiAxMDAwKTsKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiY3B1ZnJlcS1vbWFwOiB0cmFuc2l0aW9uOiAldSAtLT4gJXVcbiIsCisJICAgICAgIGZyZXFzLm9sZCwgZnJlcXMubmV3KTsKKyNlbmRpZgorCXJldCA9IGNsa19zZXRfcmF0ZShtcHVfY2xrLCBmcmVxcy5uZXcgKiAxMDAwKTsKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKIAogCXJldHVybiByZXQ7CkBAIC04MywxNiArMTAzLDMxIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CisJaW50IHJlc3VsdCA9IDA7CisKIAltcHVfY2xrID0gY2xrX2dldChOVUxMLCBNUFVfQ0xLKTsKIAlpZiAoSVNfRVJSKG1wdV9jbGspKQogCQlyZXR1cm4gUFRSX0VSUihtcHVfY2xrKTsKIAogCWlmIChwb2xpY3ktPmNwdSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKKwogCXBvbGljeS0+Y3VyID0gcG9saWN5LT5taW4gPSBwb2xpY3ktPm1heCA9IG9tYXBfZ2V0c3BlZWQoMCk7Ci0JcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgMCkgLyAxMDAwOwotCXBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSA9IGNsa19yb3VuZF9yYXRlKG1wdV9jbGssIFZFUllfSElfUkFURSkgLyAxMDAwOwotCXBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSBDUFVGUkVRX0VURVJOQUw7CisKKwljbGtfaW5pdF9jcHVmcmVxX3RhYmxlKCZmcmVxX3RhYmxlKTsKKwlpZiAoZnJlcV90YWJsZSkgeworCQlyZXN1bHQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgZnJlcV90YWJsZSk7CisJCWlmICghcmVzdWx0KQorCQkJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoZnJlcV90YWJsZSwKKwkJCQkJCQlwb2xpY3ktPmNwdSk7CisJfSBlbHNlIHsKKwkJcG9saWN5LT5jcHVpbmZvLm1pbl9mcmVxID0gY2xrX3JvdW5kX3JhdGUobXB1X2NsaywgMCkgLyAxMDAwOworCQlwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEgPSBjbGtfcm91bmRfcmF0ZShtcHVfY2xrLAorCQkJCQkJCVZFUllfSElfUkFURSkgLyAxMDAwOworCX0KKworCS8qIEZJWE1FOiB3aGF0J3MgdGhlIGFjdHVhbCB0cmFuc2l0aW9uIHRpbWU/ICovCisJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwICogMTAwMCAqIDEwMDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMyw2ICsxMzgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKm9tYXBfY3B1ZnJlcV9hdHRyW10gPSB7CisJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAorCU5VTEwsCit9OworCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIG9tYXBfZHJpdmVyID0gewogCS5mbGFncwkJPSBDUFVGUkVRX1NUSUNLWSwKIAkudmVyaWZ5CQk9IG9tYXBfdmVyaWZ5X3NwZWVkLApAQCAtMTExLDYgKzE1MSw3IEBACiAJLmluaXQJCT0gb21hcF9jcHVfaW5pdCwKIAkuZXhpdAkJPSBvbWFwX2NwdV9leGl0LAogCS5uYW1lCQk9ICJvbWFwIiwKKwkuYXR0cgkJPSBvbWFwX2NwdWZyZXFfYXR0ciwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfY3B1ZnJlcV9pbml0KHZvaWQpCkBAIC0xMTksMyArMTYwLDExIEBACiB9CiAKIGFyY2hfaW5pdGNhbGwob21hcF9jcHVmcmVxX2luaXQpOworCisvKgorICogaWYgZXZlciB3ZSB3YW50IHRvIHJlbW92ZSB0aGlzLCB1cG9uIGNsZWFudXAgY2FsbDoKKyAqCisgKiBjcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCkKKyAqIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3B1dF9hdHRyKCkKKyAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwppbmRleCAyMDhkYmIxLi44N2ZiN2ZmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKQEAgLTIyOCw2ICsyMjgsOSBAQAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CiAJaWYgKHJldCkKIAkJZ290byBmYWlsOworCisJLyogcmV0dXJuIGRldmljZSBoYW5kbGUgdG8gYm9hcmQgc2V0dXAgY29kZSAqLworCWRhdGEtPmRldiA9ICZwZGV2LT5kZXY7CiAJcmV0dXJuIDA7CiAKIGZhaWw6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggNDdlYzc3YS4uMjFjYzAxNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtMTIzLDYgKzEyMyw3IEBACiAKIHN0YXRpYyBpbnQgZG1hX2xjaF9jb3VudDsKIHN0YXRpYyBpbnQgZG1hX2NoYW5fY291bnQ7CitzdGF0aWMgaW50IG9tYXBfZG1hX3Jlc2VydmVfY2hhbm5lbHM7CiAKIHN0YXRpYyBzcGlubG9ja190IGRtYV9jaGFuX2xvY2s7CiBzdGF0aWMgc3RydWN0IG9tYXBfZG1hX2xjaCAqZG1hX2NoYW47CkBAIC03MzcsNyArNzM4LDcgQEAKIAkJICogaWQuCiAJCSAqLwogCQlkbWFfd3JpdGUoZGV2X2lkIHwgKDEgPDwgMTApLCBDQ1IoZnJlZV9jaCkpOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA3MzAoKSB8fCBjcHVfaXNfb21hcDE1eHgoKSkgeworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA3eHgoKSB8fCBjcHVfaXNfb21hcDE1eHgoKSkgewogCQlkbWFfd3JpdGUoZGV2X2lkLCBDQ1IoZnJlZV9jaCkpOwogCX0KIApAQCAtMTkwMCw3ICsxOTAxLDcgQEAKIC8qIFNUQVRVUyByZWdpc3RlciBjb3VudCBpcyBmcm9tIDEtMzIgd2hpbGUgb3VyIGlzIDAtMzEgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBvbWFwMl9kbWFfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXUzMiB2YWw7CisJdTMyIHZhbCwgZW5hYmxlX3JlZzsKIAlpbnQgaTsKIAogCXZhbCA9IGRtYV9yZWFkKElSUVNUQVRVU19MMCk7CkBAIC0xOTA5LDYgKzE5MTAsOCBAQAogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU3B1cmlvdXMgRE1BIElSUVxuIik7CiAJCXJldHVybiBJUlFfSEFORExFRDsKIAl9CisJZW5hYmxlX3JlZyA9IGRtYV9yZWFkKElSUUVOQUJMRV9MMCk7CisJdmFsICY9IGVuYWJsZV9yZWc7IC8qIERpc3BhdGNoIG9ubHkgcmVsZXZhbnQgaW50ZXJydXB0cyAqLwogCWZvciAoaSA9IDA7IGkgPCBkbWFfbGNoX2NvdW50ICYmIHZhbCAhPSAwOyBpKyspIHsKIAkJaWYgKHZhbCAmIDEpCiAJCQlvbWFwMl9kbWFfaGFuZGxlX2NoKGkpOwpAQCAtMjMyMSw2ICsyMzI0LDEwIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSAmJiBvbWFwX2RtYV9yZXNlcnZlX2NoYW5uZWxzCisJCQkmJiAob21hcF9kbWFfcmVzZXJ2ZV9jaGFubmVscyA8PSBkbWFfbGNoX2NvdW50KSkKKwkJZG1hX2xjaF9jb3VudCA9IG9tYXBfZG1hX3Jlc2VydmVfY2hhbm5lbHM7CisKIAlkbWFfY2hhbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX2RtYV9sY2gpICogZG1hX2xjaF9jb3VudCwKIAkJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIWRtYV9jaGFuKQpAQCAtMjMzOSw3ICsyMzQ2LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BIHN1cHBvcnQgZm9yIE9NQVAxNXh4IGluaXRpYWxpemVkXG4iKTsKIAkJZG1hX2NoYW5fY291bnQgPSA5OwogCQllbmFibGVfMTUxMF9tb2RlID0gMTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9pc19vbWFwNzMwKCkpIHsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9pc19vbWFwN3h4KCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBETUEgaGFyZHdhcmUgdmVyc2lvbiAlZFxuIiwKIAkJICAgICAgIGRtYV9yZWFkKEhXX0lEKSk7CiAJCXByaW50ayhLRVJOX0lORk8gIkRNQSBjYXBhYmlsaXRpZXM6ICUwOHg6JTA4eDolMDR4OiUwNHg6JTA0eFxuIiwKQEAgLTIzNzEsNyArMjM3OCw3IEBACiAJCXU4IHJldmlzaW9uID0gZG1hX3JlYWQoUkVWSVNJT04pICYgMHhmZjsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBETUEgaGFyZHdhcmUgcmV2aXNpb24gJWQuJWRcbiIsCiAJCSAgICAgICByZXZpc2lvbiA+PiA0LCByZXZpc2lvbiAmIDB4Zik7Ci0JCWRtYV9jaGFuX2NvdW50ID0gT01BUF9ETUE0X0xPR0lDQUxfRE1BX0NIX0NPVU5UOworCQlkbWFfY2hhbl9jb3VudCA9IGRtYV9sY2hfY291bnQ7CiAJfSBlbHNlIHsKIAkJZG1hX2NoYW5fY291bnQgPSAwOwogCQlyZXR1cm4gMDsKQEAgLTI0MzcsNCArMjQ0NCwxNyBAQAogCiBhcmNoX2luaXRjYWxsKG9tYXBfaW5pdF9kbWEpOwogCisvKgorICogUmVzZXJ2ZSB0aGUgb21hcCBTRE1BIGNoYW5uZWxzIHVzaW5nIGNtZGxpbmUgYm9vdGFyZworICogIm9tYXBfZG1hX3Jlc2VydmVfY2g9Ii4gVGhlIHZhbGlkIHJhbmdlIGlzIDEgdG8gMzIKKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcF9kbWFfY21kbGluZV9yZXNlcnZlX2NoKGNoYXIgKnN0cikKK3sKKwlpZiAoZ2V0X29wdGlvbigmc3RyLCAmb21hcF9kbWFfcmVzZXJ2ZV9jaGFubmVscykgIT0gMSkKKwkJb21hcF9kbWFfcmVzZXJ2ZV9jaGFubmVscyA9IDA7CisJcmV0dXJuIDE7Cit9CisKK19fc2V0dXAoIm9tYXBfZG1hX3Jlc2VydmVfY2g9Iiwgb21hcF9kbWFfY21kbGluZV9yZXNlcnZlX2NoKTsKKwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwppbmRleCBlNGYwY2UwLi5iZmQ0NzU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvZG10aW1lci5oPgogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgpAQCAtMzYyLDYgKzM2Myw3IEBACiAKIAlyZXR1cm4gdGltZXI7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3JlcXVlc3QpOwogCiBzdHJ1Y3Qgb21hcF9kbV90aW1lciAqb21hcF9kbV90aW1lcl9yZXF1ZXN0X3NwZWNpZmljKGludCBpZCkKIHsKQEAgLTM4NSw2ICszODcsNyBAQAogCiAJcmV0dXJuIHRpbWVyOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9yZXF1ZXN0X3NwZWNpZmljKTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX2ZyZWUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogewpAQCAtMzk1LDYgKzM5OCw3IEBACiAJV0FSTl9PTighdGltZXItPnJlc2VydmVkKTsKIAl0aW1lci0+cmVzZXJ2ZWQgPSAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9mcmVlKTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX2VuYWJsZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7CkBAIC00MDYsNiArNDEwLDcgQEAKIAogCXRpbWVyLT5lbmFibGVkID0gMTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfZW5hYmxlKTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX2Rpc2FibGUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogewpAQCAtNDE3LDExICs0MjIsMTMgQEAKIAogCXRpbWVyLT5lbmFibGVkID0gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfZGlzYWJsZSk7CiAKIGludCBvbWFwX2RtX3RpbWVyX2dldF9pcnEoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogewogCXJldHVybiB0aW1lci0+aXJxOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9nZXRfaXJxKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpCiAKQEAgLTQ1Miw2ICs0NTksNyBAQAogCiAJcmV0dXJuIGlucHV0bWFzazsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfbW9kaWZ5X2lkbGVjdF9tYXNrKTsKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZCAoQ09ORklHX0FSQ0hfT01BUDMpCiAKQEAgLTQ1OSw2ICs0NjcsNyBAQAogewogCXJldHVybiB0aW1lci0+ZmNsazsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfZ2V0X2ZjbGspOwogCiBfX3UzMiBvbWFwX2RtX3RpbWVyX21vZGlmeV9pZGxlY3RfbWFzayhfX3UzMiBpbnB1dG1hc2spCiB7CkBAIC00NjYsNiArNDc1LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2spOwogCiAjZW5kaWYKIApAQCAtNDczLDYgKzQ4Myw3IEBACiB7CiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfVFJJR0dFUl9SRUcsIDApOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl90cmlnZ2VyKTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX3N0YXJ0KHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKIHsKQEAgLTQ4NCw2ICs0OTUsNyBAQAogCQlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9zdGFydCk7CiAKIHZvaWQgb21hcF9kbV90aW1lcl9zdG9wKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKIHsKQEAgLTQ5NSw2ICs1MDcsNyBAQAogCQlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9zdG9wKTsKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAKQEAgLTUwNyw2ICs1MjAsNyBAQAogCWwgfD0gc291cmNlIDw8IG47CiAJb21hcF93cml0ZWwobCwgTU9EX0NPTkZfQ1RSTF8xKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZSk7CiAKICNlbHNlCiAKQEAgLTUyMyw2ICs1MzcsNyBAQAogCSAqIGNhdXNlIGFuIGFib3J0LiAqLwogCV9fZGVsYXkoMTUwMDAwKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZSk7CiAKICNlbmRpZgogCkBAIC01NDEsNiArNTU2LDcgQEAKIAogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX1RSSUdHRVJfUkVHLCAwKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfc2V0X2xvYWQpOwogCiAvKiBPcHRpbWl6ZWQgc2V0X2xvYWQgd2hpY2ggcmVtb3ZlcyBjb3N0bHkgc3BpbiB3YWl0IGluIHRpbWVyX3N0YXJ0ICovCiB2b2lkIG9tYXBfZG1fdGltZXJfc2V0X2xvYWRfc3RhcnQoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgYXV0b3JlbG9hZCwKQEAgLTU2MCw2ICs1NzYsNyBAQAogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NPVU5URVJfUkVHLCBsb2FkKTsKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DVFJMX1JFRywgbCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3NldF9sb2FkX3N0YXJ0KTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX3NldF9tYXRjaChzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIGludCBlbmFibGUsCiAJCQkgICAgIHVuc2lnbmVkIGludCBtYXRjaCkKQEAgLTU3NCw2ICs1OTEsNyBAQAogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9NQVRDSF9SRUcsIG1hdGNoKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfc2V0X21hdGNoKTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX3NldF9wd20oc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgZGVmX29uLAogCQkJICAgaW50IHRvZ2dsZSwgaW50IHRyaWdnZXIpCkBAIC01OTAsNiArNjA4LDcgQEAKIAlsIHw9IHRyaWdnZXIgPDwgMTA7CiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ1RSTF9SRUcsIGwpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9zZXRfcHdtKTsKIAogdm9pZCBvbWFwX2RtX3RpbWVyX3NldF9wcmVzY2FsZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCBpbnQgcHJlc2NhbGVyKQogewpAQCAtNjAzLDYgKzYyMiw3IEBACiAJfQogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfc2V0X3ByZXNjYWxlcik7CiAKIHZvaWQgb21hcF9kbV90aW1lcl9zZXRfaW50X2VuYWJsZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsCiAJCQkJICB1bnNpZ25lZCBpbnQgdmFsdWUpCkBAIC02MTAsNiArNjMwLDcgQEAKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9JTlRfRU5fUkVHLCB2YWx1ZSk7CiAJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfV0FLRVVQX0VOX1JFRywgdmFsdWUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob21hcF9kbV90aW1lcl9zZXRfaW50X2VuYWJsZSk7CiAKIHVuc2lnbmVkIGludCBvbWFwX2RtX3RpbWVyX3JlYWRfc3RhdHVzKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKIHsKQEAgLTYxOSwxMSArNjQwLDEzIEBACiAKIAlyZXR1cm4gbDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfZG1fdGltZXJfcmVhZF9zdGF0dXMpOwogCiB2b2lkIG9tYXBfZG1fdGltZXJfd3JpdGVfc3RhdHVzKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IHZhbHVlKQogewogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX1NUQVRfUkVHLCB2YWx1ZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3dyaXRlX3N0YXR1cyk7CiAKIHVuc2lnbmVkIGludCBvbWFwX2RtX3RpbWVyX3JlYWRfY291bnRlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7CkBAIC02MzMsMTEgKzY1NiwxMyBAQAogCiAJcmV0dXJuIGw7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3JlYWRfY291bnRlcik7CiAKIHZvaWQgb21hcF9kbV90aW1lcl93cml0ZV9jb3VudGVyKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lciwgdW5zaWduZWQgaW50IHZhbHVlKQogewogCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NPVU5URVJfUkVHLCB2YWx1ZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX3dyaXRlX2NvdW50ZXIpOwogCiBpbnQgb21hcF9kbV90aW1lcnNfYWN0aXZlKHZvaWQpCiB7CkBAIC02NTgsNiArNjgzLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyc19hY3RpdmUpOwogCiBpbnQgX19pbml0IG9tYXBfZG1fdGltZXJfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggZjg1NmE5MC4uZDNmYTQxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC04MSw2ICs4MSwyMiBAQAogI2RlZmluZSBPTUFQNzMwX0dQSU9fSU5UX1NUQVRVUwkJMHgxNAogCiAvKgorICogT01BUDg1MCBzcGVjaWZpYyBHUElPIHJlZ2lzdGVycworICovCisjZGVmaW5lIE9NQVA4NTBfR1BJTzFfQkFTRQkJSU9fQUREUkVTUygweGZmZmJjMDAwKQorI2RlZmluZSBPTUFQODUwX0dQSU8yX0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiYzgwMCkKKyNkZWZpbmUgT01BUDg1MF9HUElPM19CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmQwMDApCisjZGVmaW5lIE9NQVA4NTBfR1BJTzRfQkFTRQkJSU9fQUREUkVTUygweGZmZmJkODAwKQorI2RlZmluZSBPTUFQODUwX0dQSU81X0JBU0UJCUlPX0FERFJFU1MoMHhmZmZiZTAwMCkKKyNkZWZpbmUgT01BUDg1MF9HUElPNl9CQVNFCQlJT19BRERSRVNTKDB4ZmZmYmU4MDApCisjZGVmaW5lIE9NQVA4NTBfR1BJT19EQVRBX0lOUFVUCQkweDAwCisjZGVmaW5lIE9NQVA4NTBfR1BJT19EQVRBX09VVFBVVAkweDA0CisjZGVmaW5lIE9NQVA4NTBfR1BJT19ESVJfQ09OVFJPTAkweDA4CisjZGVmaW5lIE9NQVA4NTBfR1BJT19JTlRfQ09OVFJPTAkweDBjCisjZGVmaW5lIE9NQVA4NTBfR1BJT19JTlRfTUFTSwkJMHgxMAorI2RlZmluZSBPTUFQODUwX0dQSU9fSU5UX1NUQVRVUwkJMHgxNAorCisvKgogICogb21hcDI0eHggc3BlY2lmaWMgR1BJTyByZWdpc3RlcnMKICAqLwogI2RlZmluZSBPTUFQMjQyWF9HUElPMV9CQVNFCQlJT19BRERSRVNTKDB4NDgwMTgwMDApCkBAIC0xNTksNyArMTc1LDggQEAKICNkZWZpbmUgTUVUSE9EX0dQSU9fMTUxMAkxCiAjZGVmaW5lIE1FVEhPRF9HUElPXzE2MTAJMgogI2RlZmluZSBNRVRIT0RfR1BJT183MzAJCTMKLSNkZWZpbmUgTUVUSE9EX0dQSU9fMjRYWAk0CisjZGVmaW5lIE1FVEhPRF9HUElPXzg1MAkJNAorI2RlZmluZSBNRVRIT0RfR1BJT18yNFhYCTUKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCiBzdGF0aWMgc3RydWN0IGdwaW9fYmFuayBncGlvX2JhbmtfMTYxMFs1XSA9IHsKQEAgLTE5MCw2ICsyMDcsMTkgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua184NTBbN10gPSB7CisJeyBPTUFQX01QVUlPX0JBU0UsICAgICBJTlRfODUwX01QVUlPLAkgICAgSUhfTVBVSU9fQkFTRSwJTUVUSE9EX01QVUlPIH0sCisJeyBPTUFQODUwX0dQSU8xX0JBU0UsICBJTlRfODUwX0dQSU9fQkFOSzEsICBJSF9HUElPX0JBU0UsCU1FVEhPRF9HUElPXzg1MCB9LAorCXsgT01BUDg1MF9HUElPMl9CQVNFLCAgSU5UXzg1MF9HUElPX0JBTksyLCAgSUhfR1BJT19CQVNFICsgMzIsCU1FVEhPRF9HUElPXzg1MCB9LAorCXsgT01BUDg1MF9HUElPM19CQVNFLCAgSU5UXzg1MF9HUElPX0JBTkszLCAgSUhfR1BJT19CQVNFICsgNjQsCU1FVEhPRF9HUElPXzg1MCB9LAorCXsgT01BUDg1MF9HUElPNF9CQVNFLCAgSU5UXzg1MF9HUElPX0JBTks0LCAgSUhfR1BJT19CQVNFICsgOTYsCU1FVEhPRF9HUElPXzg1MCB9LAorCXsgT01BUDg1MF9HUElPNV9CQVNFLCAgSU5UXzg1MF9HUElPX0JBTks1LCAgSUhfR1BJT19CQVNFICsgMTI4LCBNRVRIT0RfR1BJT184NTAgfSwKKwl7IE9NQVA4NTBfR1BJTzZfQkFTRSwgIElOVF84NTBfR1BJT19CQU5LNiwgIElIX0dQSU9fQkFTRSArIDE2MCwgTUVUSE9EX0dQSU9fODUwIH0sCit9OworI2VuZGlmCisKKwogI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCiAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua18yNDJ4WzRdID0gewpAQCAtMjM2LDcgKzI2Niw3IEBACiAJCQlyZXR1cm4gJmdwaW9fYmFua1swXTsKIAkJcmV0dXJuICZncGlvX2JhbmtbMSArIChncGlvID4+IDQpXTsKIAl9Ci0JaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKKwlpZiAoY3B1X2lzX29tYXA3eHgoKSkgewogCQlpZiAoT01BUF9HUElPX0lTX01QVUlPKGdwaW8pKQogCQkJcmV0dXJuICZncGlvX2JhbmtbMF07CiAJCXJldHVybiAmZ3Bpb19iYW5rWzEgKyAoZ3BpbyA+PiA1KV07CkBAIC0yNTEsNyArMjgxLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZ2V0X2dwaW9faW5kZXgoaW50IGdwaW8pCiB7Ci0JaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJaWYgKGNwdV9pc19vbWFwN3h4KCkpCiAJCXJldHVybiBncGlvICYgMHgxZjsKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCiAJCXJldHVybiBncGlvICYgMHgxZjsKQEAgLTI3Myw3ICszMDMsNyBAQAogCQlyZXR1cm4gMDsKIAlpZiAoKGNwdV9pc19vbWFwMTZ4eCgpKSAmJiBncGlvIDwgNjQpCiAJCXJldHVybiAwOwotCWlmIChjcHVfaXNfb21hcDczMCgpICYmIGdwaW8gPCAxOTIpCisJaWYgKGNwdV9pc19vbWFwN3h4KCkgJiYgZ3BpbyA8IDE5MikKIAkJcmV0dXJuIDA7CiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpICYmIGdwaW8gPCAxMjgpCiAJCXJldHVybiAwOwpAQCAtMzE4LDYgKzM0OCwxMSBAQAogCQlyZWcgKz0gT01BUDczMF9HUElPX0RJUl9DT05UUk9MOwogCQlicmVhazsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwljYXNlIE1FVEhPRF9HUElPXzg1MDoKKwkJcmVnICs9IE9NQVA4NTBfR1BJT19ESVJfQ09OVFJPTDsKKwkJYnJlYWs7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fT0U7CkBAIC0zODAsNiArNDE1LDE2IEBACiAJCQlsICY9IH4oMSA8PCBncGlvKTsKIAkJYnJlYWs7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQODUwCisJY2FzZSBNRVRIT0RfR1BJT184NTA6CisJCXJlZyArPSBPTUFQODUwX0dQSU9fREFUQV9PVVRQVVQ7CisJCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCQlpZiAoZW5hYmxlKQorCQkJbCB8PSAxIDw8IGdwaW87CisJCWVsc2UKKwkJCWwgJj0gfigxIDw8IGdwaW8pOworCQlicmVhazsKKyNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlpZiAoZW5hYmxlKQpAQCAtNDI2LDYgKzQ3MSwxMSBAQAogCQlyZWcgKz0gT01BUDczMF9HUElPX0RBVEFfSU5QVVQ7CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCWNhc2UgTUVUSE9EX0dQSU9fODUwOgorCQlyZWcgKz0gT01BUDg1MF9HUElPX0RBVEFfSU5QVVQ7CisJCWJyZWFrOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCXJlZyArPSBPTUFQMjRYWF9HUElPX0RBVEFJTjsKQEAgLTU5OCw2ICs2NDgsMTggQEAKIAkJCWdvdG8gYmFkOwogCQlicmVhazsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwljYXNlIE1FVEhPRF9HUElPXzg1MDoKKwkJcmVnICs9IE9NQVA4NTBfR1BJT19JTlRfQ09OVFJPTDsKKwkJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJCWlmICh0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCisJCQlsIHw9IDEgPDwgZ3BpbzsKKwkJZWxzZSBpZiAodHJpZ2dlciAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJCWwgJj0gfigxIDw8IGdwaW8pOworCQllbHNlCisJCQlnb3RvIGJhZDsKKwkJYnJlYWs7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJc2V0XzI0eHhfZ3Bpb190cmlnZ2VyaW5nKGJhbmssIGdwaW8sIHRyaWdnZXIpOwpAQCAtNjc4LDYgKzc0MCwxMSBAQAogCQlyZWcgKz0gT01BUDczMF9HUElPX0lOVF9TVEFUVVM7CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCWNhc2UgTUVUSE9EX0dQSU9fODUwOgorCQlyZWcgKz0gT01BUDg1MF9HUElPX0lOVF9TVEFUVVM7CisJCWJyZWFrOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCXJlZyArPSBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzE7CkBAIC03MzYsNiArODAzLDEzIEBACiAJCWludiA9IDE7CiAJCWJyZWFrOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCWNhc2UgTUVUSE9EX0dQSU9fODUwOgorCQlyZWcgKz0gT01BUDg1MF9HUElPX0lOVF9NQVNLOworCQltYXNrID0gMHhmZmZmZmZmZjsKKwkJaW52ID0gMTsKKwkJYnJlYWs7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fSVJRRU5BQkxFMTsKQEAgLTc5OSw2ICs4NzMsMTYgQEAKIAkJCWwgfD0gZ3Bpb19tYXNrOwogCQlicmVhazsKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVA4NTAKKwljYXNlIE1FVEhPRF9HUElPXzg1MDoKKwkJcmVnICs9IE9NQVA4NTBfR1BJT19JTlRfTUFTSzsKKwkJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJCWlmIChlbmFibGUpCisJCQlsICY9IH4oZ3Bpb19tYXNrKTsKKwkJZWxzZQorCQkJbCB8PSBncGlvX21hc2s7CisJCWJyZWFrOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCWlmIChlbmFibGUpCkBAIC05ODMsNiArMTA2NywxMCBAQAogCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fNzMwKQogCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVA3MzBfR1BJT19JTlRfU1RBVFVTOwogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fODUwKQorCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVA4NTBfR1BJT19JTlRfU1RBVFVTOworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzI0WFgpCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxOwpAQCAtMTM3Miw2ICsxNDYwLDEzIEBACiAJCWdwaW9fYmFuayA9IGdwaW9fYmFua183MzA7CiAJfQogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorCWlmIChjcHVfaXNfb21hcDg1MCgpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk9NQVA4NTAgR1BJTyBoYXJkd2FyZVxuIik7CisJCWdwaW9fYmFua19jb3VudCA9IDc7CisJCWdwaW9fYmFuayA9IGdwaW9fYmFua184NTA7CisJfQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAogCWlmIChjcHVfaXNfb21hcDI0MngoKSkgewpAQCAtMTQyMCw3ICsxNTE1LDcgQEAKIAkJCV9fcmF3X3dyaXRldygweGZmZmYsIGJhbmstPmJhc2UgKyBPTUFQMTYxMF9HUElPX0lSUVNUQVRVUzEpOwogCQkJX19yYXdfd3JpdGV3KDB4MDAxNCwgYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fU1lTQ09ORklHKTsKIAkJfQotCQlpZiAoY3B1X2lzX29tYXA3MzAoKSAmJiBiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fNzMwKSB7CisJCWlmIChjcHVfaXNfb21hcDd4eCgpICYmIGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT183MzApIHsKIAkJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYW5rLT5iYXNlICsgT01BUDczMF9HUElPX0lOVF9NQVNLKTsKIAkJCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCBiYW5rLT5iYXNlICsgT01BUDczMF9HUElPX0lOVF9TVEFUVVMpOwogCkBAIC0xNzQzLDYgKzE4MzgsOSBAQAogCWNhc2UgTUVUSE9EX0dQSU9fNzMwOgogCQlyZWcgKz0gT01BUDczMF9HUElPX0RJUl9DT05UUk9MOwogCQlicmVhazsKKwljYXNlIE1FVEhPRF9HUElPXzg1MDoKKwkJcmVnICs9IE9NQVA4NTBfR1BJT19ESVJfQ09OVFJPTDsKKwkJYnJlYWs7CiAJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQlyZWcgKz0gT01BUDI0WFhfR1BJT19PRTsKIAkJYnJlYWs7CkBAIC0xNzYyLDcgKzE4NjAsOCBAQAogCiAJCWlmIChiYW5rX2lzX21wdWlvKGJhbmspKQogCQkJZ3BpbyA9IE9NQVBfTVBVSU8oMCk7Ci0JCWVsc2UgaWYgKGNwdV9jbGFzc19pc19vbWFwMigpIHx8IGNwdV9pc19vbWFwNzMwKCkpCisJCWVsc2UgaWYgKGNwdV9jbGFzc19pc19vbWFwMigpIHx8IGNwdV9pc19vbWFwNzMwKCkgfHwKKwkJCQljcHVfaXNfb21hcDg1MCgpKQogCQkJYmFua3dpZHRoID0gMzI7CiAKIAkJZm9yIChqID0gMDsgaiA8IGJhbmt3aWR0aDsgaisrLCBncGlvKyssIG1hc2sgPDw9IDEpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYwppbmRleCA0Njc1MzFlLi5hMzAzMDcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jCkBAIC05OCw2ICs5OCw4IEBACiBzdGF0aWMgY29uc3QgaW50IG9tYXAzNHh4X3BpbnNbXVsyXSA9IHt9OwogI2VuZGlmCiAKKyNkZWZpbmUgT01BUF9JMkNfQ01ETElORV9TRVRVUAkoQklUKDMxKSkKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaTJjX211eF9waW5zKGludCBidXMpCiB7CiAJaW50IHNjbCwgc2RhOwpAQCAtMTE5LDE0ICsxMjEsOSBAQAogCW9tYXBfY2ZnX3JlZyhzY2wpOwogfQogCi1pbnQgX19pbml0IG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKLQkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLAotCQkJICB1bnNpZ25lZCBsZW4pCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2kyY19ucl9wb3J0cyh2b2lkKQogewotCWludCBwb3J0cywgZXJyOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0JcmVzb3VyY2Vfc2l6ZV90IGJhc2UsIGlycTsKKwlpbnQgcG9ydHMgPSAwOwogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKQogCQlwb3J0cyA9IDE7CkBAIC0xMzUsMTcgKzEzMiwxNiBAQAogCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQogCQlwb3J0cyA9IDM7CiAKLQlCVUdfT04oYnVzX2lkIDwgMSB8fCBidXNfaWQgPiBwb3J0cyk7CisJcmV0dXJuIHBvcnRzOworfQogCi0JaWYgKGluZm8pIHsKLQkJZXJyID0gaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oYnVzX2lkLCBpbmZvLCBsZW4pOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQl9CitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2kyY19hZGRfYnVzKGludCBidXNfaWQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlyZXNvdXJjZV9zaXplX3QgYmFzZSwgaXJxOwogCiAJcGRldiA9ICZvbWFwX2kyY19kZXZpY2VzW2J1c19pZCAtIDFdOwotCSoodTMyICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBjbGtyYXRlOwotCiAJaWYgKGJ1c19pZCA9PSAxKSB7CiAJCXJlcyA9IHBkZXYtPnJlc291cmNlOwogCQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKQEAgLTE2MywzICsxNTksODEgQEAKIAlvbWFwX2kyY19tdXhfcGlucyhidXNfaWQgLSAxKTsKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOwogfQorCisvKioKKyAqIG9tYXBfaTJjX2J1c19zZXR1cCAtIFByb2Nlc3MgY29tbWFuZCBsaW5lIG9wdGlvbnMgZm9yIHRoZSBJMkMgYnVzIHNwZWVkCisgKiBAc3RyOiBTdHJpbmcgb2Ygb3B0aW9ucworICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgSTJDIGJ1cyBzcGVlZCBmb3IgZ2l2ZW4gSTJDCisgKiBidXMgd2l0aCBhIGNvbW1hbmQgbGluZSBvcHRpb24uCisgKgorICogRm9ybWF0OiBpMmNfYnVzPWJ1c19pZCxjbGtyYXRlIChpbiBrSHopCisgKgorICogUmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2kyY19idXNfc2V0dXAoY2hhciAqc3RyKQoreworCWludCBwb3J0czsKKwlpbnQgaW50c1szXTsKKworCXBvcnRzID0gb21hcF9pMmNfbnJfcG9ydHMoKTsKKwlnZXRfb3B0aW9ucyhzdHIsIDMsIGludHMpOworCWlmIChpbnRzWzBdIDwgMiB8fCBpbnRzWzFdIDwgMSB8fCBpbnRzWzFdID4gcG9ydHMpCisJCXJldHVybiAwOworCWkyY19yYXRlW2ludHNbMV0gLSAxXSA9IGludHNbMl07CisJaTJjX3JhdGVbaW50c1sxXSAtIDFdIHw9IE9NQVBfSTJDX0NNRExJTkVfU0VUVVA7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImkyY19idXM9Iiwgb21hcF9pMmNfYnVzX3NldHVwKTsKKworLyoKKyAqIFJlZ2lzdGVyIGJ1c3NlcyBkZWZpbmVkIGluIGNvbW1hbmQgbGluZSBidXQgdGhhdCBhcmUgbm90IHJlZ2lzdGVyZWQgd2l0aAorICogb21hcF9yZWdpc3Rlcl9pMmNfYnVzIGZyb20gYm9hcmQgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgb21hcF9yZWdpc3Rlcl9pMmNfYnVzX2NtZGxpbmUodm9pZCkKK3sKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGkyY19yYXRlKTsgaSsrKQorCQlpZiAoaTJjX3JhdGVbaV0gJiBPTUFQX0kyQ19DTURMSU5FX1NFVFVQKSB7CisJCQlpMmNfcmF0ZVtpXSAmPSB+T01BUF9JMkNfQ01ETElORV9TRVRVUDsKKwkJCWVyciA9IG9tYXBfaTJjX2FkZF9idXMoaSArIDEpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKKwkJfQorCitvdXQ6CisJcmV0dXJuIGVycjsKK30KK3N1YnN5c19pbml0Y2FsbChvbWFwX3JlZ2lzdGVyX2kyY19idXNfY21kbGluZSk7CisKKy8qKgorICogb21hcF9yZWdpc3Rlcl9pMmNfYnVzIC0gcmVnaXN0ZXIgSTJDIGJ1cyB3aXRoIGRldmljZSBkZXNjcmlwdG9ycworICogQGJ1c19pZDogYnVzIGlkIGNvdW50aW5nIGZyb20gbnVtYmVyIDEKKyAqIEBjbGtyYXRlOiBjbG9jayByYXRlIG9mIHRoZSBidXMgaW4ga0h6CisgKiBAaW5mbzogcG9pbnRlciBpbnRvIEkyQyBkZXZpY2UgZGVzY3JpcHRvciB0YWJsZSBvciBOVUxMCisgKiBAbGVuOiBudW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gdGhlIHRhYmxlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYW4gZXJyb3IgY29kZS4KKyAqLworaW50IF9faW5pdCBvbWFwX3JlZ2lzdGVyX2kyY19idXMoaW50IGJ1c19pZCwgdTMyIGNsa3JhdGUsCisJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKKwkJCSAgdW5zaWduZWQgbGVuKQoreworCWludCBlcnI7CisKKwlCVUdfT04oYnVzX2lkIDwgMSB8fCBidXNfaWQgPiBvbWFwX2kyY19ucl9wb3J0cygpKTsKKworCWlmIChpbmZvKSB7CisJCWVyciA9IGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKGJ1c19pZCwgaW5mbywgbGVuKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKCFpMmNfcmF0ZVtidXNfaWQgLSAxXSkKKwkJaTJjX3JhdGVbYnVzX2lkIC0gMV0gPSBjbGtyYXRlOworCWkyY19yYXRlW2J1c19pZCAtIDFdICY9IH5PTUFQX0kyQ19DTURMSU5FX1NFVFVQOworCisJcmV0dXJuIG9tYXBfaTJjX2FkZF9idXMoYnVzX2lkKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtMjQzMHNkcC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC0yNDMwc2RwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZDQ0OWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC0yNDMwc2RwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC0yNDMwc2RwLmgKLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDI0MzAgU0RQIGJvYXJkLgotICoKLSAqIEJhc2VkIG9uIGJvYXJkLWg0LmggYnkgRGlyayBCZWhtZSA8ZGlyay5iZWhtZUBkZS5ib3NjaC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCi0gKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfMjQzMFNEUF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF8yNDMwU0RQX0gKLQotLyogUGxhY2Vob2xkZXIgZm9yIDI0MzBTRFAgc3BlY2lmaWMgZGVmaW5lcyAqLwotI2RlZmluZSBPTUFQMjRYWF9FVEhSX1NUQVJUCQkweDA4MDAwMzAwCi0jZGVmaW5lIE9NQVAyNFhYX0VUSFJfR1BJT19JUlEJCTE0OQotI2RlZmluZSBTRFAyNDMwX0NTMF9CQVNFCQkweDA0MDAwMDAwCi0KLS8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLWV4dGVybiB2b2lkIHNkcDI0MzBfZmxhc2hfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHNkcDI0MzBfdXNiX2luaXQodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVBfMjQzMFNEUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWFwb2xsb24uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtYXBvbGxvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWJkNWU4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtYXBvbGxvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtYXBvbGxvbi5oCi0gKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFNhbXN1bmcgT01BUDI0WFggQXBvbGxvbiBib2FyZC4KLSAqCi0gKiBJbml0aWFsIGNyZWF0aW9uIGJ5IEt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCi0gKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfQVBPTExPTl9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9BUE9MTE9OX0gKLQotI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0KLWV4dGVybiB2b2lkIGFwb2xsb25fbW1jX2luaXQodm9pZCk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGFwb2xsb25fcGx1cyh2b2lkKQotewotCS8qIFRoZSBhcG9sbG9uIHBsdXMgaGFzIElEQ09ERSByZXZpc2lvbiA1ICovCi0JcmV0dXJuIG9tYXBfcmV2KCkgJiAweGMwOwotfQotCi0vKiBQbGFjZWhvbGRlciBmb3IgQVBPTExPTiBzcGVjaWZpYyBkZWZpbmVzICovCi0jZGVmaW5lIEFQT0xMT05fRVRIUl9HUElPX0lSUQkJNzQKLQotI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVBfQVBPTExPTl9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtZnNhbXBsZS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1mc2FtcGxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiM2M1YWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1mc2FtcGxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1mc2FtcGxlLmgKLSAqCi0gKiBCb2FyZC1zcGVjaWZpYyBnb29kaWVzIGZvciBUSSBGLVNhbXBsZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgR29vZ2xlLCBJbmMuCi0gKiBBdXRob3I6IEJyaWFuIFN3ZXRsYW5kIDxzd2V0bGFuZEBnb29nbGUuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfRlNBTVBMRV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9GU0FNUExFX0gKLQotLyogZnNhbXBsZSBpcyBwcmV0dHkgY2xvc2UgdG8gcDItc2FtcGxlICovCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1wZXJzZXVzMi5oPgotCi0jZGVmaW5lIGZzYW1wbGVfY3BsZF9yZWFkKHJlZykgX19yYXdfcmVhZGIocmVnKQotI2RlZmluZSBmc2FtcGxlX2NwbGRfd3JpdGUodmFsLCByZWcpIF9fcmF3X3dyaXRlYih2YWwsIHJlZykKLQotI2RlZmluZSBGU0FNUExFX0NQTERfQkFTRSAgICAweEU4MTAwMDAwCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9TSVpFICAgIFNaXzRLCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9TVEFSVCAgIDB4MDUwODAwMDAKLQotI2RlZmluZSBGU0FNUExFX0NQTERfUkVHX0EgICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDAwKQotI2RlZmluZSBGU0FNUExFX0NQTERfU1dJVENIICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDAyKQotI2RlZmluZSBGU0FNUExFX0NQTERfVUFSVCAgICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDAyKQotI2RlZmluZSBGU0FNUExFX0NQTERfUkVHX0IgICAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDA0KQotI2RlZmluZSBGU0FNUExFX0NQTERfVkVSU0lPTiAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDA2KQotI2RlZmluZSBGU0FNUExFX0NQTERfU0VUX0NMUiAoRlNBTVBMRV9DUExEX0JBU0UgKyAweDA2KQotCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQlRfUkVTRVQgICAgICAgICAwCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfTENEX1JFU0VUICAgICAgICAxCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQ0FNX1BXRE4gICAgICAgICAyCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQ0hBUkdFUl9FTkFCTEUgICAzCi0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfU0RfTU1DX0VOICAgICAgICA0Ci0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfYUdQU19QV1JFTiAgICAgICA1Ci0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfQkFDS0xJR0hUICAgICAgICA2Ci0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfYUdQU19FTl9SRVNFVCAgICA3Ci0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfYUdQU19TTEVFUHhfTiAgICA4Ci0jZGVmaW5lIEZTQU1QTEVfQ1BMRF9CSVRfT1RHX1JFU0VUICAgICAgICA5Ci0KLSNkZWZpbmUgZnNhbXBsZV9jcGxkX3NldChiaXQpIFwKLSAgICBmc2FtcGxlX2NwbGRfd3JpdGUoKCgoYml0KSAmIDE1KSA8PCA0KSB8IDB4MGYsIEZTQU1QTEVfQ1BMRF9TRVRfQ0xSKQotCi0jZGVmaW5lIGZzYW1wbGVfY3BsZF9jbGVhcihiaXQpIFwKLSAgICBmc2FtcGxlX2NwbGRfd3JpdGUoMHhmMCB8ICgoYml0KSAmIDE1KSwgRlNBTVBMRV9DUExEX1NFVF9DTFIpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oMi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTUzMWM4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWgyLmgKLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDE2MTAgSDIgYm9hcmQuCi0gKgotICogQ2xlYW51cCBmb3IgTGludXgtMi42IGJ5IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0gyX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0gyX0gKLQotLyogQXQgT01BUDE2MTAgSW5ub3ZhdG9yIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCi0jZGVmaW5lIE9NQVAxNjEwX0VUSFJfU1RBUlQJCTB4MDQwMDAzMDAKLQotI2RlZmluZSBIMl9UUFNfR1BJT19CQVNFCQkoT01BUF9NQVhfR1BJT19MSU5FUyArIDE2IC8qIE1QVUlPICovKQotIwlkZWZpbmUgSDJfVFBTX0dQSU9fTU1DX1BXUl9FTgkoSDJfVFBTX0dQSU9fQkFTRSArIDMpCi0KLWV4dGVybiB2b2lkIGgyX21tY19pbml0KHZvaWQpOwotCi0jZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9IMl9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg4ODMyNi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWgzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1oMy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIFJpZGdlUnVuLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KLSAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9IM19ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9IM19ICi0KLS8qIEluIE9NQVAxNzEwIEgzIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCi0jZGVmaW5lIE9NQVAxNzEwX0VUSFJfU1RBUlQJCTB4MDQwMDAzMDAKLQotI2RlZmluZSBIM19UUFNfR1BJT19CQVNFCQkoT01BUF9NQVhfR1BJT19MSU5FUyArIDE2IC8qIE1QVUlPICovKQotIwlkZWZpbmUgSDNfVFBTX0dQSU9fTU1DX1BXUl9FTgkoSDNfVFBTX0dQSU9fQkFTRSArIDQpCi0KLWV4dGVybiB2b2lkIGgzX21tY19pbml0KHZvaWQpOwotCi0jZW5kaWYgLyogIF9fQVNNX0FSQ0hfT01BUF9IM19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjM2ZhMGYwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaDQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWg0LmgKLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDI0MjAgSDQgYm9hcmQuCi0gKgotICogSW5pdGlhbCBjcmVhdGlvbiBieSBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KLSAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9INF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9INF9ICi0KLS8qIE1NQyBQcm90b3R5cGVzICovCi1leHRlcm4gdm9pZCBoNF9tbWNfaW5pdCh2b2lkKTsKLQotLyogUGxhY2Vob2xkZXIgZm9yIEg0IHNwZWNpZmljIGRlZmluZXMgKi8KLSNkZWZpbmUgT01BUDI0WFhfRVRIUl9HUElPX0lSUQkJOTIKLSNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQX0g0X0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1pbm5vdmF0b3IuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtaW5ub3ZhdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTNlNzkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1pbm5vdmF0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWlubm92YXRvci5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIFJpZGdlUnVuLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCi0gKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0lOTk9WQVRPUl9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9JTk5PVkFUT1JfSAotCi0jaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfT01BUDE1WFgpCi0KLSNpZm5kZWYgT01BUF9TRFJBTV9ERVZJQ0UKLSNkZWZpbmUgT01BUF9TRFJBTV9ERVZJQ0UJCQlEMjU2TV8xWDE2XzRCCi0jZW5kaWYKLQotI2RlZmluZSBPTUFQMTUxMFAxX0lNSUZfUFJJX1ZBTFVFCQkweDAwCi0jZGVmaW5lIE9NQVAxNTEwUDFfRU1JRlNfUFJJX1ZBTFVFCQkweDAwCi0jZGVmaW5lIE9NQVAxNTEwUDFfRU1JRkZfUFJJX1ZBTFVFCQkweDAwCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi12b2lkIGZwZ2Ffd3JpdGUodW5zaWduZWQgY2hhciB2YWwsIGludCByZWcpOwotdW5zaWduZWQgY2hhciBmcGdhX3JlYWQoaW50IHJlZyk7Ci0jZW5kaWYKLQotI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAxNVhYICovCi0KLSNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9PTUFQMTZYWCkKLQotLyogQXQgT01BUDE2MTAgSW5ub3ZhdG9yIHRoZSBFdGhlcm5ldCBpcyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gQ1MxICovCi0jZGVmaW5lIElOTk9WQVRPUjE2MTBfRVRIUl9TVEFSVAkweDA0MDAwMzAwCi0KLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMTYxMCAqLwotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUF9JTk5PVkFUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtbGRwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyMzM5OTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1sZHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLWxkcC5oCi0gKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVAzIExEUC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGV4YXMgSW5zdHJ1bWVudHMgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0xEUF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9MRFBfSAotCi1leHRlcm4gdm9pZCB0d2w0MDMwX2JjaV9iYXR0ZXJ5X2luaXQodm9pZCk7Ci0KLSNkZWZpbmUgVFdMNDAzMF9JUlFOVU0JCUlOVF8zNFhYX1NZU19OSVJRCi0jZGVmaW5lIExEUF9TTUM5MTFYX0NTICAgICAgICAgMQotI2RlZmluZSBMRFBfU01DOTExWF9HUElPICAgICAgIDE1MgotI2RlZmluZSBERUJVR19CQVNFICAgICAgICAgICAgIDB4MDgwMDAwMDAKLSNkZWZpbmUgT01BUDM0WFhfRVRIUl9TVEFSVCAgICBERUJVR19CQVNFCi0jZW5kaWYgLyogX19BU01fQVJDSF9PTUFQX0xEUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW5va2lhLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW5va2lhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhYmJlMDAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1ub2tpYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqICBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW5va2lhLmgKLSAqCi0gKiAgSW5mb3JtYXRpb24gc3RydWN0dXJlcyBmb3IgTm9raWEtc3BlY2lmaWMgYm9hcmQgY29uZmlnIGRhdGEKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1CU5va2lhIENvcnBvcmF0aW9uCi0gKi8KLQotI2lmbmRlZiBfT01BUF9CT0FSRF9OT0tJQV9ICi0jZGVmaW5lIF9PTUFQX0JPQVJEX05PS0lBX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNkZWZpbmUgT01BUF9UQUdfTk9LSUFfQlQJMHg0ZTAxCi0jZGVmaW5lIE9NQVBfVEFHX1dMQU5fQ1gzMTEwWAkweDRlMDIKLSNkZWZpbmUgT01BUF9UQUdfQ0JVUwkJMHg0ZTAzCi0jZGVmaW5lIE9NQVBfVEFHX0VNX0FTSUNfQkI1CTB4NGUwNAotCi0KLSNkZWZpbmUgQlRfQ0hJUF9DU1IJCTEKLSNkZWZpbmUgQlRfQ0hJUF9USQkJMgotCi0jZGVmaW5lIEJUX1NZU0NMS18xMgkJMQotI2RlZmluZSBCVF9TWVNDTEtfMzhfNAkJMgotCi1zdHJ1Y3Qgb21hcF9ibHVldG9vdGhfY29uZmlnIHsKLQl1OCAgICBjaGlwX3R5cGU7Ci0JdTggICAgYnRfd2FrZXVwX2dwaW87Ci0JdTggICAgaG9zdF93YWtldXBfZ3BpbzsKLQl1OCAgICByZXNldF9ncGlvOwotCXU4ICAgIGJ0X3VhcnQ7Ci0JdTggICAgYmRfYWRkcls2XTsKLQl1OCAgICBidF9zeXNjbGs7Ci19OwotCi1zdHJ1Y3Qgb21hcF93bGFuX2N4MzExMHhfY29uZmlnIHsKLQl1OCAgY2hpcF90eXBlOwotCXMxNiBwb3dlcl9ncGlvOwotCXMxNiBpcnFfZ3BpbzsKLQlzMTYgc3BpX2NzX2dwaW87Ci19OwotCi1zdHJ1Y3Qgb21hcF9jYnVzX2NvbmZpZyB7Ci0JczE2IGNsa19ncGlvOwotCXMxNiBkYXRfZ3BpbzsKLQlzMTYgc2VsX2dwaW87Ci19OwotCi1zdHJ1Y3Qgb21hcF9lbV9hc2ljX2JiNV9jb25maWcgewotCXMxNiByZXR1X2lycV9ncGlvOwotCXMxNiB0YWh2b19pcnFfZ3BpbzsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vbWFwM2JlYWdsZS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vbWFwM2JlYWdsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDgwZDUyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb21hcDNiZWFnbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9tYXAzYmVhZ2xlLmgKLSAqCi0gKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDMgQkVBR0xFLgotICoKLSAqIEluaXRpYWwgY3JlYXRpb24gYnkgU3llZCBNb2hhbW1lZCBLaGFzaW0gPGtoYXNpbUB0aS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAotICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOCi0gKiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAzX0JFQUdMRV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUDNfQkVBR0xFX0gKLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUDNfQkVBR0xFX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vc2suaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb3NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NTBjYjEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vc2suaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLW9zay5oCi0gKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIFRJIE9NQVA1OTEyIE9TSyBib2FyZC4KLSAqCi0gKiBXcml0dGVuIGJ5IERpcmsgQmVobWUgPGRpcmsuYmVobWVAZGUuYm9zY2guY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQX09TS19ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9PU0tfSAotCi0vKiBBdCBPTUFQNTkxMiBPU0sgdGhlIEV0aGVybmV0IGlzIGRpcmVjdGx5IGNvbm5lY3RlZCB0byBDUzEgKi8KLSNkZWZpbmUgT01BUF9PU0tfRVRIUl9TVEFSVAkJMHgwNDgwMDMwMAotCi0vKiBUUFM2NTAxMCBoYXMgZm91ciBHUElPcy4gIG5QRyBhbmQgTEVEMiBjYW4gYmUgdHJlYXRlZCBsaWtlIEdQSU9zIHdpdGgKLSAqIGFsdGVybmF0ZSBwaW4gY29uZmlndXJhdGlvbnMgZm9yIGhhcmR3YXJlLWNvbnRyb2xsZWQgYmxpbmtpbmcuCi0gKi8KLSNkZWZpbmUgT1NLX1RQU19HUElPX0JBU0UJCShPTUFQX01BWF9HUElPX0xJTkVTICsgMTYgLyogTVBVSU8gKi8pCi0jCWRlZmluZSBPU0tfVFBTX0dQSU9fVVNCX1BXUl9FTgkoT1NLX1RQU19HUElPX0JBU0UgKyAwKQotIwlkZWZpbmUgT1NLX1RQU19HUElPX0xFRF9EMwkoT1NLX1RQU19HUElPX0JBU0UgKyAxKQotIwlkZWZpbmUgT1NLX1RQU19HUElPX0xBTl9SRVNFVAkoT1NLX1RQU19HUElPX0JBU0UgKyAyKQotIwlkZWZpbmUgT1NLX1RQU19HUElPX0RTUF9QV1JfRU4JKE9TS19UUFNfR1BJT19CQVNFICsgMykKLSMJZGVmaW5lIE9TS19UUFNfR1BJT19MRURfRDkJKE9TS19UUFNfR1BJT19CQVNFICsgNCkKLSMJZGVmaW5lIE9TS19UUFNfR1BJT19MRURfRDIJKE9TS19UUFNfR1BJT19CQVNFICsgNSkKLQotI2VuZGlmIC8qICBfX0FTTV9BUkNIX09NQVBfT1NLX0ggKi8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vdmVyby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1vdmVyby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWNhZTY2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtb3Zlcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiBib2FyZC1vdmVyby5oIChHdW1zdGl4IE92ZXJvKQotICoKLSAqIEluaXRpYWwgY29kZTogU3RldmUgU2Frb21hbiA8c3RldmVAc2Frb21hbi5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9PVkVST19ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT1ZFUk9fSAotCi0jZGVmaW5lIE9WRVJPX0dQSU9fQlRfWEdBVEUJMTUKLSNkZWZpbmUgT1ZFUk9fR1BJT19XMldfTlJFU0VUCTE2Ci0jZGVmaW5lIE9WRVJPX0dQSU9fQlRfTlJFU0VUCTE2NAotI2RlZmluZSBPVkVST19HUElPX1VTQkhfQ1BFTgkxNjgKLSNkZWZpbmUgT1ZFUk9fR1BJT19VU0JIX05SRVNFVAkxODMKLQotI2VuZGlmIC8qIF9fX19BU01fQVJDSF9PVkVST19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXRlLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG10ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTA2Y2RlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtdGUuaAotICoKLSAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciB0aGUgUGFsbSBUdW5nc3RlbiBFIGRldmljZS4KLSAqCi0gKiBNYWludGFpbnRlcnMgOglodHRwOi8vcGFsbXRlbGludXguc2YubmV0Ci0gKgkJCXBhbG10ZWxpbnV4LWRldmVsb3BwZXJzQGxpc3RzLnNmLm5ldAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX09NQVBfQk9BUkRfUEFMTVRFX0gKLSNkZWZpbmUgX19PTUFQX0JPQVJEX1BBTE1URV9ICi0KLSNkZWZpbmUgUEFMTVRFX1VTQkRFVEVDVF9HUElPCTAKLSNkZWZpbmUgUEFMTVRFX1VTQl9PUl9EQ19HUElPCTEKLSNkZWZpbmUgUEFMTVRFX1RTQ19HUElPCQk0Ci0jZGVmaW5lIFBBTE1URV9QSU5UREFWX0dQSU8JNgotI2RlZmluZSBQQUxNVEVfTU1DX1dQX0dQSU8JOAotI2RlZmluZSBQQUxNVEVfTU1DX1BPV0VSX0dQSU8JOQotI2RlZmluZSBQQUxNVEVfSERRX0dQSU8JCTExCi0jZGVmaW5lIFBBTE1URV9IRUFEUEhPTkVTX0dQSU8JMTQKLSNkZWZpbmUgUEFMTVRFX1NQRUFLRVJfR1BJTwkxNQotI2RlZmluZSBQQUxNVEVfRENfR1BJTwkJT01BUF9NUFVJTygyKQotI2RlZmluZSBQQUxNVEVfTU1DX1NXSVRDSF9HUElPCU9NQVBfTVBVSU8oNCkKLSNkZWZpbmUgUEFMTVRFX01NQzFfR1BJTwlPTUFQX01QVUlPKDYpCi0jZGVmaW5lIFBBTE1URV9NTUMyX0dQSU8JT01BUF9NUFVJTyg3KQotI2RlZmluZSBQQUxNVEVfTU1DM19HUElPCU9NQVBfTVBVSU8oMTEpCi0KLSNlbmRpZgkvKiBfX09NQVBfQk9BUkRfUEFMTVRFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXR0LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG10dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzlmMzgyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXR0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC1wYWxtdGUuaAotICoKLSAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciB0aGUgUGFsbSBUdW5nc3RlbnxUIGRldmljZS4KLSAqCi0gKiBNYWludGFpbnRlcnMgOglNYXJlayBWYXN1dCA8bWFyZWsudmFzdXRAZ21haWwuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfX09NQVBfQk9BUkRfUEFMTVRUX0gKLSNkZWZpbmUgX19PTUFQX0JPQVJEX1BBTE1UVF9ICi0KLSNkZWZpbmUgUEFMTVRUX1VTQkRFVEVDVF9HUElPCTAKLSNkZWZpbmUgUEFMTVRUX0NBQkxFX0dQSU8JMQotI2RlZmluZSBQQUxNVFRfTEVEX0dQSU8JCTMKLSNkZWZpbmUgUEFMTVRUX1BFTklSUV9HUElPCTYKLSNkZWZpbmUgUEFMTVRUX01NQ19XUF9HUElPCTgKLSNkZWZpbmUgUEFMTVRUX0hEUV9HUElPCQkxMQotCi0jZW5kaWYJLyogX19PTUFQX0JPQVJEX1BBTE1UVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBhbG16NzEuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXo3MS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWQ3ZDU3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXo3MS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGFsbXo3MS5oCi0gKgotICogSGFyZHdhcmUgZGVmaW5pdGlvbnMgZm9yIHRoZSBQYWxtIFppcmU3MSBkZXZpY2UuCi0gKgotICogTWFpbnRhaW50ZXJzIDoJTWFyZWsgVmFzdXQgPG1hcmVrLnZhc3V0QGdtYWlsLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX19PTUFQX0JPQVJEX1BBTE1aNzFfSAotI2RlZmluZSBfX09NQVBfQk9BUkRfUEFMTVo3MV9ICi0KLSNkZWZpbmUgUEFMTVo3MV9VU0JERVRFQ1RfR1BJTwkwCi0jZGVmaW5lIFBBTE1aNzFfUEVOSVJRX0dQSU8JNgotI2RlZmluZSBQQUxNWjcxX01NQ19XUF9HUElPCTgKLSNkZWZpbmUgUEFMTVo3MV9IRFFfR1BJTyAJMTEKLQotI2RlZmluZSBQQUxNWjcxX0hPVFNZTkNfR1BJTwlPTUFQX01QVUlPKDEpCi0jZGVmaW5lIFBBTE1aNzFfQ0FCTEVfR1BJTwlPTUFQX01QVUlPKDIpCi0jZGVmaW5lIFBBTE1aNzFfU0xJREVSX0dQSU8JT01BUF9NUFVJTygzKQotI2RlZmluZSBQQUxNWjcxX01NQ19JTl9HUElPCU9NQVBfTVBVSU8oNCkKLQotI2VuZGlmCS8qIF9fT01BUF9CT0FSRF9QQUxNWjcxX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGVyc2V1czIuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGVyc2V1czIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA2YzNkNy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXBlcnNldXMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtcGVyc2V1czIuaAotICoKLSAqICBDb3B5cmlnaHQgMjAwMyBieSBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKLSAqICAgIE9NQVA3MzAgLyBQZXJzZXVzMiBzdXBwb3J0IGJ5IEplYW4gUGloZXQKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgUmlkZ2VSdW4sIEluYy4gKGh0dHA6Ly93d3cucmlkZ2VydW4uY29tKQotICogQXV0aG9yOiBSaWRnZVJ1biwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9QRVJTRVVTMl9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9QRVJTRVVTMl9ICi0KLSNpbmNsdWRlIDxtYWNoL2ZwZ2EuaD4KLQotI2lmbmRlZiBPTUFQX1NEUkFNX0RFVklDRQotI2RlZmluZSBPTUFQX1NEUkFNX0RFVklDRQkJRDI1Nk1fMVgxNl80QgotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC12b2ljZWJsdWUuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQtdm9pY2VibHVlLmgKaW5kZXggZWQ2ZDM0Ni4uMjc5MTZiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC12b2ljZWJsdWUuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLXZvaWNlYmx1ZS5oCkBAIC0xNCw3ICsxNCw2IEBACiBleHRlcm4gdm9pZCB2b2ljZWJsdWVfd2R0X2VuYWJsZSh2b2lkKTsKIGV4dGVybiB2b2lkIHZvaWNlYmx1ZV93ZHRfZGlzYWJsZSh2b2lkKTsKIGV4dGVybiB2b2lkIHZvaWNlYmx1ZV93ZHRfcGluZyh2b2lkKTsKLWV4dGVybiB2b2lkIHZvaWNlYmx1ZV9yZXNldCh2b2lkKTsKIAogI2VuZGlmIC8qICBfX0FTTV9BUkNIX1ZPSUNFQkxVRV9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvYm9hcmQuaAppbmRleCA5NDY2NzcyLi41MGVhNzlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2JvYXJkLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ib2FyZC5oCkBAIC0xNyw3ICsxNyw2IEBACiAvKiBEaWZmZXJlbnQgcGVyaXBoZXJhbCBpZHMgKi8KICNkZWZpbmUgT01BUF9UQUdfQ0xPQ0sJCTB4NGYwMQogI2RlZmluZSBPTUFQX1RBR19TRVJJQUxfQ09OU09MRSAweDRmMDMKLSNkZWZpbmUgT01BUF9UQUdfVVNCCQkweDRmMDQKICNkZWZpbmUgT01BUF9UQUdfTENECQkweDRmMDUKICNkZWZpbmUgT01BUF9UQUdfR1BJT19TV0lUQ0gJMHg0ZjA2CiAjZGVmaW5lIE9NQVBfVEFHX1VBUlQJCTB4NGYwNwpAQCAtMTMzLDkgKzEzMiw2IEBACiAJY2hhciB2ZXJzaW9uWzEyXTsKIH07CiAKLQotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbm9raWEuaD4KLQogc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2VudHJ5IHsKIAl1MTYgdGFnOwogCXUxNiBsZW47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzBjNDlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMCwwICsxLDEzIEBACisjaWZuZGVmIF9fTUFDSF9DTEtERVZfSAorI2RlZmluZSBfX01BQ0hfQ0xLREVWX0gKKworc3RhdGljIGlubGluZSBpbnQgX19jbGtfZ2V0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jbG9jay5oCmluZGV4IDcxOTI5ODUuLjA3M2EyYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKQEAgLTE3LDExICsxNywxNiBAQAogc3RydWN0IGNsazsKIHN0cnVjdCBjbG9ja2RvbWFpbjsKIAorc3RydWN0IGNsa29wcyB7CisJaW50CQkJKCplbmFibGUpKHN0cnVjdCBjbGsgKik7CisJdm9pZAkJCSgqZGlzYWJsZSkoc3RydWN0IGNsayAqKTsKK307CisKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCiBzdHJ1Y3QgY2xrc2VsX3JhdGUgewotCXU4CQkJZGl2OwogCXUzMgkJCXZhbDsKKwl1OAkJCWRpdjsKIAl1OAkJCWZsYWdzOwogfTsKIApAQCAtMzQsMjQgKzM5LDI4IEBACiAJdm9pZCBfX2lvbWVtCQkqbXVsdF9kaXYxX3JlZzsKIAl1MzIJCQltdWx0X21hc2s7CiAJdTMyCQkJZGl2MV9tYXNrOwotCXUxNgkJCWxhc3Rfcm91bmRlZF9tOwotCXU4CQkJbGFzdF9yb3VuZGVkX247Ci0JdW5zaWduZWQgbG9uZwkJbGFzdF9yb3VuZGVkX3JhdGU7Ci0JdW5zaWduZWQgaW50CQlyYXRlX3RvbGVyYW5jZTsKLQl1MTYJCQltYXhfbXVsdGlwbGllcjsKLQl1OAkJCW1heF9kaXZpZGVyOwotCXUzMgkJCW1heF90b2xlcmFuY2U7Ci0jICBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQotCXU4CQkJbW9kZXM7CisJc3RydWN0IGNsawkJKmNsa19ieXBhc3M7CisJc3RydWN0IGNsawkJKmNsa19yZWY7CiAJdm9pZCBfX2lvbWVtCQkqY29udHJvbF9yZWc7CiAJdTMyCQkJZW5hYmxlX21hc2s7CisJdW5zaWduZWQgaW50CQlyYXRlX3RvbGVyYW5jZTsKKwl1bnNpZ25lZCBsb25nCQlsYXN0X3JvdW5kZWRfcmF0ZTsKKwl1MTYJCQlsYXN0X3JvdW5kZWRfbTsKKwl1OAkJCWxhc3Rfcm91bmRlZF9uOworCXU4CQkJbWluX2RpdmlkZXI7CisJdTgJCQltYXhfZGl2aWRlcjsKKwl1MzIJCQltYXhfdG9sZXJhbmNlOworCXUxNgkJCW1heF9tdWx0aXBsaWVyOworIyAgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKwl1OAkJCW1vZGVzOworCXZvaWQgX19pb21lbQkJKmF1dG9pZGxlX3JlZzsKKwl2b2lkIF9faW9tZW0JCSppZGxlc3RfcmVnOworCXUzMgkJCWF1dG9pZGxlX21hc2s7CisJdTMyCQkJZnJlcXNlbF9tYXNrOworCXUzMgkJCWlkbGVzdF9tYXNrOwogCXU4CQkJYXV0b19yZWNhbF9iaXQ7CiAJdTgJCQlyZWNhbF9lbl9iaXQ7CiAJdTgJCQlyZWNhbF9zdF9iaXQ7Ci0Jdm9pZCBfX2lvbWVtCQkqYXV0b2lkbGVfcmVnOwotCXUzMgkJCWF1dG9pZGxlX21hc2s7Ci0Jdm9pZCBfX2lvbWVtCQkqaWRsZXN0X3JlZzsKLQl1OAkJCWlkbGVzdF9iaXQ7CiAjICBlbmRpZgogfTsKIApAQCAtNTksMjEgKzY4LDIxIEBACiAKIHN0cnVjdCBjbGsgewogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKLQlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CisJY29uc3Qgc3RydWN0IGNsa29wcwkqb3BzOwogCWNvbnN0IGNoYXIJCSpuYW1lOwogCWludAkJCWlkOwogCXN0cnVjdCBjbGsJCSpwYXJlbnQ7CisJc3RydWN0IGxpc3RfaGVhZAljaGlsZHJlbjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNpYmxpbmc7CS8qIG5vZGUgZm9yIGNoaWxkcmVuICovCiAJdW5zaWduZWQgbG9uZwkJcmF0ZTsKIAlfX3UzMgkJCWZsYWdzOwogCXZvaWQgX19pb21lbQkJKmVuYWJsZV9yZWc7Ci0JX191OAkJCWVuYWJsZV9iaXQ7Ci0JX19zOAkJCXVzZWNvdW50OwotCXZvaWQJCQkoKnJlY2FsYykoc3RydWN0IGNsayAqKTsKKwl1bnNpZ25lZCBsb25nCQkoKnJlY2FsYykoc3RydWN0IGNsayAqKTsKIAlpbnQJCQkoKnNldF9yYXRlKShzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcpOwogCWxvbmcJCQkoKnJvdW5kX3JhdGUpKHN0cnVjdCBjbGsgKiwgdW5zaWduZWQgbG9uZyk7CiAJdm9pZAkJCSgqaW5pdCkoc3RydWN0IGNsayAqKTsKLQlpbnQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKLQl2b2lkCQkJKCpkaXNhYmxlKShzdHJ1Y3QgY2xrICopOworCV9fdTgJCQllbmFibGVfYml0OworCV9fczgJCQl1c2Vjb3VudDsKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCXU4CQkJZml4ZWRfZGl2OwogCXZvaWQgX19pb21lbQkJKmNsa3NlbF9yZWc7CkBAIC05OSw3ICsxMDgsNiBAQAogCWxvbmcJCSgqY2xrX3JvdW5kX3JhdGUpKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIAlpbnQJCSgqY2xrX3NldF9yYXRlKShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiAJaW50CQkoKmNsa19zZXRfcGFyZW50KShzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCk7Ci0Jc3RydWN0IGNsayAqCSgqY2xrX2dldF9wYXJlbnQpKHN0cnVjdCBjbGsgKmNsayk7CiAJdm9pZAkJKCpjbGtfYWxsb3dfaWRsZSkoc3RydWN0IGNsayAqY2xrKTsKIAl2b2lkCQkoKmNsa19kZW55X2lkbGUpKHN0cnVjdCBjbGsgKmNsayk7CiAJdm9pZAkJKCpjbGtfZGlzYWJsZV91bnVzZWQpKHN0cnVjdCBjbGsgKmNsayk7CkBAIC0xMTAsNDIgKzExOCwzMyBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IG1wdXJhdGU7CiAKLWV4dGVybiBpbnQgY2xrX2luaXQoc3RydWN0IGNsa19mdW5jdGlvbnMgKiBjdXN0b21fY2xvY2tzKTsKK2V4dGVybiBpbnQgY2xrX2luaXQoc3RydWN0IGNsa19mdW5jdGlvbnMgKmN1c3RvbV9jbG9ja3MpOworZXh0ZXJuIHZvaWQgY2xrX2luaXRfb25lKHN0cnVjdCBjbGsgKmNsayk7CiBleHRlcm4gaW50IGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjbGspOworZXh0ZXJuIHZvaWQgY2xrX3JlcGFyZW50KHN0cnVjdCBjbGsgKmNoaWxkLCBzdHJ1Y3QgY2xrICpwYXJlbnQpOwogZXh0ZXJuIHZvaWQgY2xrX3VucmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKIGV4dGVybiB2b2lkIHByb3BhZ2F0ZV9yYXRlKHN0cnVjdCBjbGsgKmNsayk7CiBleHRlcm4gdm9pZCByZWNhbGN1bGF0ZV9yb290X2Nsb2Nrcyh2b2lkKTsKLWV4dGVybiB2b2lkIGZvbGxvd3BhcmVudF9yZWNhbGMoc3RydWN0IGNsayAqIGNsayk7Ci1leHRlcm4gdm9pZCBjbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspOwotZXh0ZXJuIHZvaWQgY2xrX2RlbnlfaWRsZShzdHJ1Y3QgY2xrICpjbGspOwotZXh0ZXJuIGludCBjbGtfZ2V0X3VzZWNvdW50KHN0cnVjdCBjbGsgKmNsayk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBmb2xsb3dwYXJlbnRfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiBleHRlcm4gdm9pZCBjbGtfZW5hYmxlX2luaXRfY2xvY2tzKHZvaWQpOworI2lmZGVmIENPTkZJR19DUFVfRlJFUQorZXh0ZXJuIHZvaWQgY2xrX2luaXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSk7CisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX251bGw7CiAKIC8qIENsb2NrIGZsYWdzICovCi0jZGVmaW5lIFJBVEVfQ0tDVEwJCSgxIDw8IDApCS8qIE1haW4gZml4ZWQgcmF0aW8gY2xvY2tzICovCisvKiBiaXQgMCBpcyBmcmVlICovCiAjZGVmaW5lIFJBVEVfRklYRUQJCSgxIDw8IDEpCS8qIEZpeGVkIGNsb2NrIHJhdGUgKi8KLSNkZWZpbmUgUkFURV9QUk9QQUdBVEVTCQkoMSA8PCAyKQkvKiBQcm9ncmFtIGNoaWxkcmVuIHRvbyAqLwotI2RlZmluZSBWSVJUVUFMX0NMT0NLCQkoMSA8PCAzKQkvKiBDb21wb3NpdGUgY2xvY2sgZnJvbSB0YWJsZSAqLwotI2RlZmluZSBBTFdBWVNfRU5BQkxFRAkJKDEgPDwgNCkJLyogQ2xvY2sgY2Fubm90IGJlIGRpc2FibGVkICovCisvKiBiaXRzIDItNCBhcmUgZnJlZSAqLwogI2RlZmluZSBFTkFCTEVfUkVHXzMyQklUCSgxIDw8IDUpCS8qIFVzZSAzMi1iaXQgYWNjZXNzICovCi0jZGVmaW5lIFZJUlRVQUxfSU9fQUREUkVTUwkoMSA8PCA2KQkvKiBDbG9jayBpbiB2aXJ0dWFsIGFkZHJlc3MgKi8KICNkZWZpbmUgQ0xPQ0tfSURMRV9DT05UUk9MCSgxIDw8IDcpCiAjZGVmaW5lIENMT0NLX05PX0lETEVfUEFSRU5UCSgxIDw8IDgpCiAjZGVmaW5lIERFTEFZRURfQVBQCQkoMSA8PCA5KQkvKiBEZWxheSBhcHBsaWNhdGlvbiBvZiBjbG9jayAqLwogI2RlZmluZSBDT05GSUdfUEFSVElDSVBBTlQJKDEgPDwgMTApCS8qIEZ1bmRhbWVudGFsIGNsb2NrICovCiAjZGVmaW5lIEVOQUJMRV9PTl9JTklUCQkoMSA8PCAxMSkJLyogRW5hYmxlIHVwb24gZnJhbWV3b3JrIGluaXQgKi8KICNkZWZpbmUgSU5WRVJUX0VOQUJMRSAgICAgICAgICAgKDEgPDwgMTIpICAgICAgIC8qIDAgZW5hYmxlcywgMSBkaXNhYmxlcyAqLwotLyogYml0cyAxMy0yMCBhcmUgY3VycmVudGx5IGZyZWUgKi8KLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDMxMAkoMSA8PCAyMSkKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDczMAkoMSA8PCAyMikKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDE1MTAJKDEgPDwgMjMpCi0jZGVmaW5lIENMT0NLX0lOX09NQVAxNlhYCSgxIDw8IDI0KQotI2RlZmluZSBDTE9DS19JTl9PTUFQMjQyWAkoMSA8PCAyNSkKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDI0M1gJKDEgPDwgMjYpCi0jZGVmaW5lIENMT0NLX0lOX09NQVAzNDNYCSgxIDw8IDI3KQkvKiBjbG9ja3MgY29tbW9uIHRvIGFsbCAzNDNYICovCi0jZGVmaW5lIFBBUkVOVF9DT05UUk9MU19DTE9DSwkoMSA8PCAyOCkKLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDM0MzBFUzEJKDEgPDwgMjkpCS8qIDM0MzBFUzEgY2xvY2tzIG9ubHkgKi8KLSNkZWZpbmUgQ0xPQ0tfSU5fT01BUDM0MzBFUzIJKDEgPDwgMzApCS8qIDM0MzBFUzIgY2xvY2tzIG9ubHkgKi8KKy8qIGJpdHMgMTMtMzEgYXJlIGN1cnJlbnRseSBmcmVlICovCiAKIC8qIENsa3NlbF9yYXRlIGZsYWdzICovCiAjZGVmaW5lIERFRkFVTFRfUkFURQkJKDEgPDwgMCkKQEAgLTE1Nyw5ICsxNTYsNCBAQAogI2RlZmluZSBSQVRFX0lOXzI0WFgJCShSQVRFX0lOXzI0MlggfCBSQVRFX0lOXzI0M1gpCiAKIAotLyogQ01fQ0xLU0VMMl9QTEwuQ09SRV9DTEtfU1JDIG9wdGlvbnMgKDI0WFgpICovCi0jZGVmaW5lIENPUkVfQ0xLX1NSQ18zMksJCTAKLSNkZWZpbmUgQ09SRV9DTEtfU1JDX0RQTEwJCTEKLSNkZWZpbmUgQ09SRV9DTEtfU1JDX0RQTExfWDIJCTIKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrZG9tYWluLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrZG9tYWluLmgKaW5kZXggMWY1MWYwMS4uYjlkMGRkMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2tkb21haW4uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrZG9tYWluLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9ja2RvbWFpbi5oCisgKiBhcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2Nsb2NrZG9tYWluLmgKICAqCiAgKiBPTUFQMi8zIGNsb2NrZG9tYWluIGZyYW1ld29yayBmdW5jdGlvbnMKICAqCkBAIC00OCwxMSArNDgsMTMgQEAKICAqLwogc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgewogCi0JLyogTmFtZSBvZiB0aGUgcG93ZXJkb21haW4gdG8gYWRkIGEgd2tkZXAvc2xlZXBkZXAgb24gKi8KLQljb25zdCBjaGFyICpwd3JkbV9uYW1lOworCXVuaW9uIHsKKwkJLyogTmFtZSBvZiB0aGUgcG93ZXJkb21haW4gdG8gYWRkIGEgd2tkZXAvc2xlZXBkZXAgb24gKi8KKwkJY29uc3QgY2hhciAqbmFtZTsKIAotCS8qIFBvd2VyZG9tYWluIHBvaW50ZXIgKGxvb2tlZCB1cCBhdCBjbGtkbV9pbml0KCkgdGltZSkgKi8KLQlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOworCQkvKiBQb3dlcmRvbWFpbiBwb2ludGVyIChsb29rZWQgdXAgYXQgY2xrZG1faW5pdCgpIHRpbWUpICovCisJCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHRyOworCX0gcHdyZG07CiAKIAkvKiBPTUFQIGNoaXAgdHlwZXMgdGhhdCB0aGlzIGNsb2NrZG9tYWluIGRlcCBpcyB2YWxpZCBvbiAqLwogCWNvbnN0IHN0cnVjdCBvbWFwX2NoaXBfaWQgb21hcF9jaGlwOwpAQCAtNjQsOCArNjYsMTMgQEAKIAkvKiBDbG9ja2RvbWFpbiBuYW1lICovCiAJY29uc3QgY2hhciAqbmFtZTsKIAotCS8qIFBvd2VyZG9tYWluIGVuY2xvc2luZyB0aGlzIGNsb2NrZG9tYWluICovCi0JY29uc3QgY2hhciAqcHdyZG1fbmFtZTsKKwl1bmlvbiB7CisJCS8qIFBvd2VyZG9tYWluIGVuY2xvc2luZyB0aGlzIGNsb2NrZG9tYWluICovCisJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJLyogUG93ZXJkb21haW4gcG9pbnRlciBhc3NpZ25lZCBhdCBjbGtkbV9yZWdpc3RlcigpICovCisJCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHRyOworCX0gcHdyZG07CiAKIAkvKiBDTEtUUkNUUkwvQVVUT1NUQVRFIGZpZWxkIG1hc2sgaW4gQ01fQ0xLU1RDVFJMIHJlZyAqLwogCWNvbnN0IHUxNiBjbGt0cmN0cmxfbWFzazsKQEAgLTc5LDkgKzg2LDYgQEAKIAkvKiBVc2Vjb3VudCB0cmFja2luZyAqLwogCWF0b21pY190IHVzZWNvdW50OwogCi0JLyogUG93ZXJkb21haW4gcG9pbnRlciBhc3NpZ25lZCBhdCBjbGtkbV9yZWdpc3RlcigpICovCi0Jc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTsKLQogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29tbW9uLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCmluZGV4IGU3NDZlYzcuLjBlY2YzNmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jb21tb24uaApAQCAtNjUsNyArNjUsNyBAQAogCiAvKiBUaGVzZSBnZXQgY2FsbGVkIGZyb20gb21hcDJfc2V0X2dsb2JhbHNfeHh4eCgpLCBkbyBub3QgY2FsbCB0aGVzZSAqLwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc190YXAoc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKLXZvaWQgb21hcDJfc2V0X2dsb2JhbHNfbWVtb3J5KHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7Cit2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3NkcmMoc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKIHZvaWQgb21hcDJfc2V0X2dsb2JhbHNfY29udHJvbChzdHJ1Y3Qgb21hcF9nbG9iYWxzICopOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc19wcmNtKHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IGE4ZTExNzguLjk4YjE0NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtNTYsNiArNTYsMTQgQEAKICMgIGRlZmluZSBPTUFQX05BTUUgb21hcDczMAogIyBlbmRpZgogI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorIyBpZmRlZiBPTUFQX05BTUUKKyMgIHVuZGVmICBNVUxUSV9PTUFQMQorIyAgZGVmaW5lIE1VTFRJX09NQVAxCisjIGVsc2UKKyMgIGRlZmluZSBPTUFQX05BTUUgb21hcDg1MAorIyBlbmRpZgorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKICMgaWZkZWYgT01BUF9OQU1FCiAjICB1bmRlZiAgTVVMVElfT01BUDEKQEAgLTEwNSw3ICsxMTMsNyBAQAogLyoKICAqIE1hY3JvcyB0byBncm91cCBPTUFQIGludG8gY3B1IGNsYXNzZXMuCiAgKiBUaGVzZSBjYW4gYmUgdXNlZCBpbiBtb3N0IHBsYWNlcy4KLSAqIGNwdV9pc19vbWFwN3h4KCk6CVRydWUgZm9yIE9NQVA3MzAKKyAqIGNwdV9pc19vbWFwN3h4KCk6CVRydWUgZm9yIE9NQVA3MzAsIE9NQVA4NTAKICAqIGNwdV9pc19vbWFwMTV4eCgpOglUcnVlIGZvciBPTUFQMTUxMCwgT01BUDU5MTAgYW5kIE9NQVAzMTAKICAqIGNwdV9pc19vbWFwMTZ4eCgpOglUcnVlIGZvciBPTUFQMTYxMCwgT01BUDU5MTIgYW5kIE9NQVAxNzEwCiAgKiBjcHVfaXNfb21hcDI0eHgoKToJVHJ1ZSBmb3IgT01BUDI0MjAsIE9NQVAyNDIyLCBPTUFQMjQyMywgT01BUDI0MzAKQEAgLTE1Myw2ICsxNjEsMTAgQEAKICMgIHVuZGVmICBjcHVfaXNfb21hcDd4eAogIyAgZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkJCWlzX29tYXA3eHgoKQogIyBlbmRpZgorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisjICB1bmRlZiAgY3B1X2lzX29tYXA3eHgKKyMgIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQlpc19vbWFwN3h4KCkKKyMgZW5kaWYKICMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTVYWCkKICMgIHVuZGVmICBjcHVfaXNfb21hcDE1eHgKICMgIGRlZmluZSBjcHVfaXNfb21hcDE1eHgoKQkJaXNfb21hcDE1eHgoKQpAQCAtMTY2LDYgKzE3OCwxMCBAQAogIyAgdW5kZWYgIGNwdV9pc19vbWFwN3h4CiAjICBkZWZpbmUgY3B1X2lzX29tYXA3eHgoKQkJMQogIyBlbmRpZgorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisjICB1bmRlZiAgY3B1X2lzX29tYXA3eHgKKyMgIGRlZmluZSBjcHVfaXNfb21hcDd4eCgpCQkxCisjIGVuZGlmCiAjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpCiAjICB1bmRlZiAgY3B1X2lzX29tYXAxNXh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkJCTEKQEAgLTIxOSw2ICsyMzUsNyBAQAogICogVGhlc2UgYXJlIG9ubHkgcmFyZWx5IG5lZWRlZC4KICAqIGNwdV9pc19vbWFwMzMwKCk6CVRydWUgZm9yIE9NQVAzMzAKICAqIGNwdV9pc19vbWFwNzMwKCk6CVRydWUgZm9yIE9NQVA3MzAKKyAqIGNwdV9pc19vbWFwODUwKCk6CVRydWUgZm9yIE9NQVA4NTAKICAqIGNwdV9pc19vbWFwMTUxMCgpOglUcnVlIGZvciBPTUFQMTUxMAogICogY3B1X2lzX29tYXAxNjEwKCk6CVRydWUgZm9yIE9NQVAxNjEwCiAgKiBjcHVfaXNfb21hcDE2MTEoKToJVHJ1ZSBmb3IgT01BUDE2MTEKQEAgLTI0MSw2ICsyNTgsNyBAQAogCiBJU19PTUFQX1RZUEUoMzEwLCAweDAzMTApCiBJU19PTUFQX1RZUEUoNzMwLCAweDA3MzApCitJU19PTUFQX1RZUEUoODUwLCAweDA4NTApCiBJU19PTUFQX1RZUEUoMTUxMCwgMHgxNTEwKQogSVNfT01BUF9UWVBFKDE2MTAsIDB4MTYxMCkKIElTX09NQVBfVFlQRSgxNjExLCAweDE2MTEpCkBAIC0yNTUsNiArMjczLDcgQEAKIAogI2RlZmluZSBjcHVfaXNfb21hcDMxMCgpCQkwCiAjZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE1MTAoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDE2MTAoKQkJMAogI2RlZmluZSBjcHVfaXNfb21hcDU5MTIoKQkJMApAQCAtMjcyLDEyICsyOTEsMjIgQEAKICMgIHVuZGVmICBjcHVfaXNfb21hcDczMAogIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCWlzX29tYXA3MzAoKQogIyBlbmRpZgorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisjICB1bmRlZiAgY3B1X2lzX29tYXA4NTAKKyMgIGRlZmluZSBjcHVfaXNfb21hcDg1MCgpCQlpc19vbWFwODUwKCkKKyMgZW5kaWYKICNlbHNlCiAjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDczMCkKICMgIHVuZGVmICBjcHVfaXNfb21hcDczMAogIyAgZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkJCTEKICMgZW5kaWYKICNlbmRpZgorI2Vsc2UKKyMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQODUwKQorIyAgdW5kZWYgIGNwdV9pc19vbWFwODUwCisjICBkZWZpbmUgY3B1X2lzX29tYXA4NTAoKQkJMQorIyBlbmRpZgorI2VuZGlmCiAKIC8qCiAgKiBXaGV0aGVyIHdlIGhhdmUgTVVMVElfT01BUDEgb3Igbm90LCB3ZSBzdGlsbCBuZWVkIHRvIGRpc3Rpbmd1aXNoCkBAIC0zMjAsNyArMzQ5LDcgQEAKICNlbmRpZgogCiAvKiBNYWNyb3MgdG8gZGV0ZWN0IGlmIHdlIGhhdmUgT01BUDEgb3IgT01BUDIgKi8KLSNkZWZpbmUgY3B1X2NsYXNzX2lzX29tYXAxKCkJKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNXh4KCkgfHwgXAorI2RlZmluZSBjcHVfY2xhc3NfaXNfb21hcDEoKQkoY3B1X2lzX29tYXA3eHgoKSB8fCBjcHVfaXNfb21hcDE1eHgoKSB8fCBcCiAJCQkJY3B1X2lzX29tYXAxNnh4KCkpCiAjZGVmaW5lIGNwdV9jbGFzc19pc19vbWFwMigpCShjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkKIApAQCAtMzU1LDEzICszODQsMjcgQEAKICAqIHVzZSBvbWFwX2NoaXBfaXMoKS4KICAqCiAgKi8KLSNkZWZpbmUgQ0hJUF9JU19PTUFQMjQyMCAgICAgICAoMSA8PCAwKQotI2RlZmluZSBDSElQX0lTX09NQVAyNDMwICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIENISVBfSVNfT01BUDM0MzAgICAgICAgKDEgPDwgMikKLSNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMEVTMSAgICAoMSA8PCAzKQotI2RlZmluZSBDSElQX0lTX09NQVAzNDMwRVMyICAgICgxIDw8IDQpCisjZGVmaW5lIENISVBfSVNfT01BUDI0MjAJCSgxIDw8IDApCisjZGVmaW5lIENISVBfSVNfT01BUDI0MzAJCSgxIDw8IDEpCisjZGVmaW5lIENISVBfSVNfT01BUDM0MzAJCSgxIDw8IDIpCisjZGVmaW5lIENISVBfSVNfT01BUDM0MzBFUzEJCSgxIDw8IDMpCisjZGVmaW5lIENISVBfSVNfT01BUDM0MzBFUzIJCSgxIDw8IDQpCisjZGVmaW5lIENISVBfSVNfT01BUDM0MzBFUzNfMAkJKDEgPDwgNSkKKyNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMEVTM18xCQkoMSA8PCA2KQogCi0jZGVmaW5lIENISVBfSVNfT01BUDI0WFggICAgICAgKENISVBfSVNfT01BUDI0MjAgfCBDSElQX0lTX09NQVAyNDMwKQorI2RlZmluZSBDSElQX0lTX09NQVAyNFhYCQkoQ0hJUF9JU19PTUFQMjQyMCB8IENISVBfSVNfT01BUDI0MzApCisKKy8qCisgKiAiR0UiIGhlcmUgcmVwcmVzZW50cyAiZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIiBpbiB0ZXJtcyBvZiBFUworICogbGV2ZWxzLiAgU28gQ0hJUF9HRV9PTUFQMzQzMEVTMiBpcyBpbnRlbmRlZCB0byBtYXRjaCBhbGwgT01BUDM0MzAKKyAqIGNoaXBzIGF0IEVTMiBhbmQgYmV5b25kLCBidXQgbm90LCBmb3IgZXhhbXBsZSwgYW55IE9NQVAgbGluZXMgYWZ0ZXIKKyAqIE9NQVAzLgorICovCisjZGVmaW5lIENISVBfR0VfT01BUDM0MzBFUzIJCShDSElQX0lTX09NQVAzNDMwRVMyIHwgXAorCQkJCQkgQ0hJUF9JU19PTUFQMzQzMEVTM18wIHwgXAorCQkJCQkgQ0hJUF9JU19PTUFQMzQzMEVTM18xKQorI2RlZmluZSBDSElQX0dFX09NQVAzNDMwRVMzXzEJCShDSElQX0lTX09NQVAzNDMwRVMzXzEpCisKIAogaW50IG9tYXBfY2hpcF9pcyhzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9jaSk7CiBpbnQgb21hcF90eXBlKHZvaWQpOwpAQCAtMzc4LDUgKzQyMSwzIEBACiB2b2lkIG9tYXAyX2NoZWNrX3JldmlzaW9uKHZvaWQpOwogCiAjZW5kaWYgICAgLyogZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgKi8KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCmluZGV4IDhkOWRmZTMuLjJiMjJhODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0zMSw3ICszMSw4IEBACiAKICNkZWZpbmUgT01BUF9NUFVJT19CQVNFCQkJMHhmZmZiNTAwMAogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorI2lmIChkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkpCisKICNkZWZpbmUgT01BUF9NUFVJT19JTlBVVF9MQVRDSAkJMHgwMAogI2RlZmluZSBPTUFQX01QVUlPX09VVFBVVAkJMHgwMgogI2RlZmluZSBPTUFQX01QVUlPX0lPX0NOVEwJCTB4MDQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvZ3BtYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKaW5kZXggNDViNjc4NC4uOTIxYjE2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9ncG1jLmgKQEAgLTEwMyw2ICsxMDMsNiBAQAogZXh0ZXJuIHZvaWQgZ3BtY19jc19mcmVlKGludCBjcyk7CiBleHRlcm4gaW50IGdwbWNfY3Nfc2V0X3Jlc2VydmVkKGludCBjcywgaW50IHJlc2VydmVkKTsKIGV4dGVybiBpbnQgZ3BtY19jc19yZXNlcnZlZChpbnQgY3MpOwotZXh0ZXJuIHZvaWQgZ3BtY19pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IGdwbWNfaW5pdCh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggNjU4OWRkYi4uM2RjNDIzZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMjg2LDc4ICsyODYsNCBAQAogI2luY2x1ZGUgIm9tYXAyNHh4LmgiCiAjaW5jbHVkZSAib21hcDM0eHguaCIKIAotI2lmbmRlZiBfX0FTU0VNQkxFUl9fCi0KLS8qCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIEJvYXJkIHNwZWNpZmljIGRlZmluZXMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX0lOTk9WQVRPUgotI2luY2x1ZGUgImJvYXJkLWlubm92YXRvci5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQX0gyCi0jaW5jbHVkZSAiYm9hcmQtaDIuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QRVJTRVVTMgotI2luY2x1ZGUgImJvYXJkLXBlcnNldXMyLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfRlNBTVBMRQotI2luY2x1ZGUgImJvYXJkLWZzYW1wbGUuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9IMwotI2luY2x1ZGUgImJvYXJkLWgzLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfSDQKLSNpbmNsdWRlICJib2FyZC1oNC5oIgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9PTUFQXzI0MzBTRFAKLSNpbmNsdWRlICJib2FyZC0yNDMwc2RwLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVAzX0JFQUdMRQotI2luY2x1ZGUgImJvYXJkLW9tYXAzYmVhZ2xlLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfTERQCi0jaW5jbHVkZSAiYm9hcmQtbGRwLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfQVBPTExPTgotI2luY2x1ZGUgImJvYXJkLWFwb2xsb24uaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9PU0sKLSNpbmNsdWRlICJib2FyZC1vc2suaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfVk9JQ0VCTFVFCi0jaW5jbHVkZSAiYm9hcmQtdm9pY2VibHVlLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfUEFMTVRFCi0jaW5jbHVkZSAiYm9hcmQtcGFsbXRlLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX09NQVBfUEFMTVo3MQotI2luY2x1ZGUgImJvYXJkLXBhbG16NzEuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QQUxNVFQKLSNpbmNsdWRlICJib2FyZC1wYWxtdHQuaCIKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01BQ0hfU1gxCi0jaW5jbHVkZSAiYm9hcmQtc3gxLmgiCi0jZW5kaWYKLQotI2VuZGlmIC8qICFfX0FTU0VNQkxFUl9fICovCi0KICNlbmRpZgkvKiBfX0FTTV9BUkNIX09NQVBfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9pby5oCmluZGV4IGQ5MmJmNzkuLjA2MTBkN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTE4NSwxMSArMTg1LDEzIEBACiAjZGVmaW5lIG9tYXBfd3JpdGV3KHYsYSkJX19yYXdfd3JpdGV3KHYsIElPX0FERFJFU1MoYSkpCiAjZGVmaW5lIG9tYXBfd3JpdGVsKHYsYSkJX19yYXdfd3JpdGVsKHYsIElPX0FERFJFU1MoYSkpCiAKK3N0cnVjdCBvbWFwX3NkcmNfcGFyYW1zOworCiBleHRlcm4gdm9pZCBvbWFwMV9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDFfaW5pdF9jb21tb25faHcodm9pZCk7CiAKIGV4dGVybiB2b2lkIG9tYXAyX21hcF9jb21tb25faW8odm9pZCk7Ci1leHRlcm4gdm9pZCBvbWFwMl9pbml0X2NvbW1vbl9odyh2b2lkKTsKK2V4dGVybiB2b2lkIG9tYXAyX2luaXRfY29tbW9uX2h3KHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzcCk7CiAKICNkZWZpbmUgX19hcmNoX2lvcmVtYXAocCxzLHQpCW9tYXBfaW9yZW1hcChwLHMsdCkKICNkZWZpbmUgX19hcmNoX2lvdW5tYXAodikJb21hcF9pb3VubWFwKHYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IGJlZDUyNzQuLjdmNTdlZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0xMDUsNiArMTA1LDI5IEBACiAjZGVmaW5lIElOVF83MzBfU1BHSU9fV1IJMjkKIAogLyoKKyAqIE9NQVAtODUwIHNwZWNpZmljIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAxCisgKi8KKyNkZWZpbmUgSU5UXzg1MF9JSDJfRklRCQkwCisjZGVmaW5lIElOVF84NTBfSUgyX0lSUQkJMQorI2RlZmluZSBJTlRfODUwX1VTQl9OT05fSVNPCTIKKyNkZWZpbmUgSU5UXzg1MF9VU0JfSVNPCQkzCisjZGVmaW5lIElOVF84NTBfSUNSCQk0CisjZGVmaW5lIElOVF84NTBfRUFDCQk1CisjZGVmaW5lIElOVF84NTBfR1BJT19CQU5LMQk2CisjZGVmaW5lIElOVF84NTBfR1BJT19CQU5LMgk3CisjZGVmaW5lIElOVF84NTBfR1BJT19CQU5LMwk4CisjZGVmaW5lIElOVF84NTBfTWNCU1AyVFgJMTAKKyNkZWZpbmUgSU5UXzg1MF9NY0JTUDJSWAkxMQorI2RlZmluZSBJTlRfODUwX01jQlNQMlJYX09WRgkxMgorI2RlZmluZSBJTlRfODUwX0xDRF9MSU5FCTE0CisjZGVmaW5lIElOVF84NTBfR1NNX1BST1RFQ1QJMTUKKyNkZWZpbmUgSU5UXzg1MF9USU1FUjMJCTE2CisjZGVmaW5lIElOVF84NTBfR1BJT19CQU5LNQkxNworI2RlZmluZSBJTlRfODUwX0dQSU9fQkFOSzYJMTgKKyNkZWZpbmUgSU5UXzg1MF9TUEdJT19XUgkyOQorCisKKy8qCiAgKiBJUlEgbnVtYmVycyBmb3IgaW50ZXJydXB0IGhhbmRsZXIgMgogICoKICAqIE5PVEU6IFNlZSBhbHNvIHRoZSBPTUFQLTE1MTAgYW5kIDE2MTAgc3BlY2lmaWMgSVJRIG51bWJlcnMgYmVsb3cKQEAgLTIzNyw2ICsyNjAsNjQgQEAKICNkZWZpbmUgSU5UXzczMF9ETUFfQ0gxNQkoNjIgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9OQU5ECQkoNjMgKyBJSDJfQkFTRSkKIAorLyoKKyAqIE9NQVAtODUwIHNwZWNpZmljIElSUSBudW1iZXJzIGZvciBpbnRlcnJ1cHQgaGFuZGxlciAyCisgKi8KKyNkZWZpbmUgSU5UXzg1MF9IV19FUlJPUlMJKDAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9ORklRX1BXUl9GQUlMCSgxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfQ0ZDRAkJKDIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9DRklSRVEJCSgzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfSTJDCQkoNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1BDQwkJKDUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9NUFVfRVhUX05JUlEJKDYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9TUElfMTAwS18xCSg3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfU1lSRU5fU1BJCSg4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfVkxZTlEJCSg5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfR1BJT19CQU5LNAkoMTAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9NY0JTUDFUWAkoMTEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9NY0JTUDFSWAkoMTIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9NY0JTUDFSWF9PRgkoMTMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9VQVJUX01PREVNX0lSREFfMiAoMTQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9VQVJUX01PREVNXzEJKDE1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTUNTSQkJKDE2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfdVdpcmVUWAkJKDE3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfdVdpcmVSWAkJKDE4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfU01DX0NECQkoMTkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9TTUNfSVJFUQkoMjAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9IRFFfMVdJUkUJKDIxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfVElNRVIzMksJKDIyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTU1DX1NESU8JKDIzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfVVBMRAkJKDI0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfVVNCX0hIQ18xCSgyNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1VTQl9ISENfMgkoMjggKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9VU0JfR0VOSQkoMjkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9VU0JfT1RHCQkoMzAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9DQU1FUkFfSUYJKDMxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfUk5HCQkoMzIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9EVUFMX01PREVfVElNRVIgKDMzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfREJCX1JGX0VOCSgzNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX01QVUlPX0tFWVBBRAkoMzUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9TSEExX01ENQkoMzYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9TUElfMTAwS18yCSgzNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX1JOR19JRExFCSgzOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX01QVUlPCQkoMzkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzg1MF9MTFBDX0xDRF9DVFJMX0NBTl9CRV9PRkYJKDQwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTExQQ19PRV9GQUxMSU5HICg0MSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX0xMUENfT0VfUklTSU5HCSg0MiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfODUwX0xMUENfVlNZTkMJKDQzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfV0FLRV9VUF9SRVEJKDQ2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NINgkJKDUzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NINwkJKDU0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIOAkJKDU1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIOQkJKDU2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTAJKDU3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTEJKDU4ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTIJKDU5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTMJKDYwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTQJKDYxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfRE1BX0NIMTUJKDYyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF84NTBfTkFORAkJKDYzICsgSUgyX0JBU0UpCisKICNkZWZpbmUgSU5UXzI0WFhfU1lTX05JUlEJNwogI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTAJMTIKICNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlExCTEzCkBAIC0zNDEsNyArNDIyLDcgQEAKIAogI2RlZmluZQlJTlRfMzRYWF9CRU5DSF9NUFVfRU1VTAkzCiAKLS8qIE1heC4gMTI4IGxldmVsIDIgSVJRcyAoT01BUDE2MTApLCAxOTIgR1BJT3MgKE9NQVA3MzApIGFuZAorLyogTWF4LiAxMjggbGV2ZWwgMiBJUlFzIChPTUFQMTYxMCksIDE5MiBHUElPcyAoT01BUDczMC84NTApIGFuZAogICogMTYgTVBVSU8gbGluZXMgKi8KICNkZWZpbmUgT01BUF9NQVhfR1BJT19MSU5FUwkxOTIKICNkZWZpbmUgSUhfR1BJT19CQVNFCQkoMTI4ICsgSUgyX0JBU0UpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21haWxib3guaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWFpbGJveC5oCmluZGV4IDdjYmVkOTMuLmI3YTY5OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWFpbGJveC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWFpbGJveC5oCkBAIC0zMyw2ICszMyw5IEBACiAJdm9pZAkJKCpkaXNhYmxlX2lycSkoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X2lycV90IGlycSk7CiAJdm9pZAkJKCphY2tfaXJxKShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKTsKIAlpbnQJCSgqaXNfaXJxKShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKTsKKwkvKiBjdHggKi8KKwl2b2lkCQkoKnNhdmVfY3R4KShzdHJ1Y3Qgb21hcF9tYm94ICptYm94KTsKKwl2b2lkCQkoKnJlc3RvcmVfY3R4KShzdHJ1Y3Qgb21hcF9tYm94ICptYm94KTsKIH07CiAKIHN0cnVjdCBvbWFwX21ib3hfcXVldWUgewpAQCAtNTMsNyArNTYsNyBAQAogCiAJbWJveF9tc2dfdAkJc2VxX3NuZCwgc2VxX3JjdjsKIAotCXN0cnVjdCBkZXZpY2UJCWRldjsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwogCiAJc3RydWN0IG9tYXBfbWJveAkqbmV4dDsKIAl2b2lkCQkJKnByaXY7CkBAIC02Nyw3ICs3MCwyNyBAQAogc3RydWN0IG9tYXBfbWJveCAqb21hcF9tYm94X2dldChjb25zdCBjaGFyICopOwogdm9pZCBvbWFwX21ib3hfcHV0KHN0cnVjdCBvbWFwX21ib3ggKik7CiAKLWludCBvbWFwX21ib3hfcmVnaXN0ZXIoc3RydWN0IG9tYXBfbWJveCAqKTsKK2ludCBvbWFwX21ib3hfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3Qgb21hcF9tYm94ICopOwogaW50IG9tYXBfbWJveF91bnJlZ2lzdGVyKHN0cnVjdCBvbWFwX21ib3ggKik7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX21ib3hfc2F2ZV9jdHgoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlpZiAoIW1ib3gtPm9wcy0+c2F2ZV9jdHgpIHsKKwkJZGV2X2VycihtYm94LT5kZXYsICIlczpcdG5vIHNhdmVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCW1ib3gtPm9wcy0+c2F2ZV9jdHgobWJveCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX21ib3hfcmVzdG9yZV9jdHgoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlpZiAoIW1ib3gtPm9wcy0+cmVzdG9yZV9jdHgpIHsKKwkJZGV2X2VycihtYm94LT5kZXYsICIlczpcdG5vIHJlc3RvcmVcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCW1ib3gtPm9wcy0+cmVzdG9yZV9jdHgobWJveCk7Cit9CisKICNlbmRpZiAvKiBNQUlMQk9YX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWNic3AuaAppbmRleCAxMTNjMjQ2Li5iYjE1NGVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21jYnNwLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tY2JzcC5oCkBAIC0zNDQsOCArMzQ0LDYgQEAKIAl1OCBkbWFfcnhfc3luYywgZG1hX3R4X3N5bmM7CiAJdTE2IHJ4X2lycSwgdHhfaXJxOwogCXN0cnVjdCBvbWFwX21jYnNwX29wcyAqb3BzOwotCWNoYXIgY29uc3QgKipjbGtfbmFtZXM7Ci0JaW50IG51bV9jbGtzOwogfTsKIAogc3RydWN0IG9tYXBfbWNic3AgewpAQCAtMzc3LDggKzM3NSw4IEBACiAJLyogUHJvdGVjdCB0aGUgZmllbGQgLmZyZWUsIHdoaWxlIGNoZWNraW5nIGlmIHRoZSBtY2JzcCBpcyBpbiB1c2UgKi8KIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0Jc3RydWN0IGNsayAqKmNsa3M7Ci0JaW50IG51bV9jbGtzOworCXN0cnVjdCBjbGsgKmljbGs7CisJc3RydWN0IGNsayAqZmNsazsKIH07CiBleHRlcm4gc3RydWN0IG9tYXBfbWNic3AgKiptY2JzcF9wdHI7CiBleHRlcm4gaW50IG9tYXBfbWNic3BfY291bnQ7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAppbmRleCBkNmI1Y2E2Li45OWVkNTY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTYxLDkgKzYxLDExIEBACiAjZGVmaW5lIGxidXNfdG9fdmlydCh4KQkJKCh4KSAtIE9NQVAxNTEwX0xCX09GRlNFVCArIFBBR0VfT0ZGU0VUKQogI2RlZmluZSBpc19sYnVzX2RldmljZShkZXYpCShjcHVfaXNfb21hcDE1eHgoKSAmJiBkZXYgJiYgKHN0cm5jbXAoZGV2X25hbWUoZGV2KSwgIm9oY2kiLCA0KSA9PSAwKSkKIAotI2RlZmluZSBfX2FyY2hfcGFnZV90b19kbWEoZGV2LCBwYWdlKQkoe2lzX2xidXNfZGV2aWNlKGRldikgPyBcCi0JCQkJCShkbWFfYWRkcl90KXZpcnRfdG9fbGJ1cyhwYWdlX2FkZHJlc3MocGFnZSkpIDogXAotCQkJCQkoZG1hX2FkZHJfdClfX3ZpcnRfdG9fcGh5cyhwYWdlX2FkZHJlc3MocGFnZSkpO30pCisjZGVmaW5lIF9fYXJjaF9wYWdlX3RvX2RtYShkZXYsIHBhZ2UpCVwKKwkoeyBkbWFfYWRkcl90IF9fZG1hID0gcGFnZV90b19waHlzKHBhZ2UpOyBcCisJICAgaWYgKGlzX2xidXNfZGV2aWNlKGRldikpIFwKKwkJX19kbWEgPSBfX2RtYSAtIFBIWVNfT0ZGU0VUICsgT01BUDE1MTBfTEJfT0ZGU0VUOyBcCisJICAgX19kbWE7IH0pCiAKICNkZWZpbmUgX19hcmNoX2RtYV90b192aXJ0KGRldiwgYWRkcikJKHsgKHZvaWQgKikgKGlzX2xidXNfZGV2aWNlKGRldikgPyBcCiAJCQkJCQlsYnVzX3RvX3ZpcnQoYWRkcikgOiBcCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21tYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tbWMuaAppbmRleCA3M2E5ZTE1Li40NDM1YmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL21tYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbW1jLmgKQEAgLTM3LDYgKzM3LDggQEAKICNkZWZpbmUgT01BUF9NTUNfTUFYX1NMT1RTCTIKIAogc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgeworCS8qIGJhY2stbGluayB0byBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKIAkvKiBudW1iZXIgb2Ygc2xvdHMgcGVyIGNvbnRyb2xsZXIgKi8KIAl1bnNpZ25lZCBucl9zbG90czoyOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvbXV4LmgKaW5kZXggZjQzNjJiOC4uODVhNjIxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL211eC5oCkBAIC02MSw2ICs2MSwxNiBAQAogCQkJCQkucHVsbF9iaXQgPSBiaXQsIFwKIAkJCQkJLnB1bGxfdmFsID0gc3RhdHVzLAogCisjZGVmaW5lIE1VWF9SRUdfODUwKHJlZywgbW9kZV9vZmZzZXQsIG1vZGUpIC5tdXhfcmVnX25hbWUgPSAiT01BUDg1MF9JT19DT05GXyIjcmVnLCBcCisJCQkJCS5tdXhfcmVnID0gT01BUDg1MF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCBcCisJCQkJCS5tYXNrID0gbW9kZSwKKworI2RlZmluZSBQVUxMX1JFR184NTAocmVnLCBiaXQsIHN0YXR1cykJLnB1bGxfbmFtZSA9ICJPTUFQODUwX0lPX0NPTkZfIiNyZWcsIFwKKwkJCQkJLnB1bGxfcmVnID0gT01BUDg1MF9JT19DT05GXyMjcmVnLCBcCisJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAorCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCisKICNlbHNlCiAKICNkZWZpbmUgTVVYX1JFRyhyZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKSAubXV4X3JlZyA9IEZVTkNfTVVYX0NUUkxfIyNyZWcsIFwKQEAgLTgzLDYgKzkzLDE1IEBACiAJCQkJCS5wdWxsX2JpdCA9IGJpdCwgXAogCQkJCQkucHVsbF92YWwgPSBzdGF0dXMsCiAKKyNkZWZpbmUgTVVYX1JFR184NTAocmVnLCBtb2RlX29mZnNldCwgbW9kZSkgXAorCQkJCQkubXV4X3JlZyA9IE9NQVA4NTBfSU9fQ09ORl8jI3JlZywgXAorCQkJCQkubWFza19vZmZzZXQgPSBtb2RlX29mZnNldCwgXAorCQkJCQkubWFzayA9IG1vZGUsCisKKyNkZWZpbmUgUFVMTF9SRUdfODUwKHJlZywgYml0LCBzdGF0dXMpCS5wdWxsX3JlZyA9IE9NQVA4NTBfSU9fQ09ORl8jI3JlZywgXAorCQkJCQkucHVsbF9iaXQgPSBiaXQsIFwKKwkJCQkJLnB1bGxfdmFsID0gc3RhdHVzLAorCiAjZW5kaWYgLyogQ09ORklHX09NQVBfTVVYX0RFQlVHICovCiAKICNkZWZpbmUgTVVYX0NGRyhkZXNjLCBtdXhfcmVnLCBtb2RlX29mZnNldCwgbW9kZSwJXApAQCAtOTgsNyArMTE3LDcgQEAKIAogCiAvKgotICogT01BUDczMCBoYXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgY29uZmlnIGZvciB0aGUgcGluIG11eC4KKyAqIE9NQVA3MzAvODUwIGhhcyBhIHNsaWdodGx5IGRpZmZlcmVudCBjb25maWcgZm9yIHRoZSBwaW4gbXV4LgogICogLSBjb25maWcgcmVncyBhcmUgdGhlIE9NQVA3MzBfSU9fQ09ORl94IHJlZ3MgKHNlZSBvbWFwNzMwLmgpIHJlZ3MgYW5kCiAgKiAgIG5vdCB0aGUgRlVOQ19NVVhfQ1RSTF94IHJlZ3MgZnJvbSBoYXJkd2FyZS5oCiAgKiAtIGZvciBwdWxsLXVwL2Rvd24sIG9ubHkgaGFzIG9uZSBlbmFibGUgYml0IHdoaWNoIGlzIGlzIGluIHRoZSBzYW1lIHJlZ2lzdGVyCkBAIC0xMTQsNiArMTMzLDE3IEBACiAJUFVfUERfUkVHKE5BLCAwKQkJXAogfSwKIAorI2RlZmluZSBNVVhfQ0ZHXzg1MChkZXNjLCBtdXhfcmVnLCBtb2RlX29mZnNldCwgbW9kZSwJXAorCQkgICBwdWxsX2JpdCwgcHVsbF9zdGF0dXMsIGRlYnVnX3N0YXR1cylcCit7CQkJCQkJCVwKKwkubmFtZSA9CSBkZXNjLAkJCQkJXAorCS5kZWJ1ZyA9IGRlYnVnX3N0YXR1cywJCQkJXAorCU1VWF9SRUdfODUwKG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlKQkJXAorCVBVTExfUkVHXzg1MChtdXhfcmVnLCBwdWxsX2JpdCwgcHVsbF9zdGF0dXMpCVwKKwlQVV9QRF9SRUcoTkEsIDApCQlcCit9LAorCisKICNkZWZpbmUgTVVYX0NGR18yNFhYKGRlc2MsIHJlZ19vZmZzZXQsIG1vZGUsCQkJXAogCQkJCXB1bGxfZW4sIHB1bGxfbW9kZSwgZGJnKQlcCiB7CQkJCQkJCQlcCkBAIC0yMjEsNiArMjUxLDI2IEBACiAJVzE3XzczMF9VU0JfVkJVU0ksCiB9OwogCitlbnVtIG9tYXA4NTBfaW5kZXggeworCS8qIE9NQVAgODUwIGtleWJvYXJkICovCisJRTJfODUwX0tCUjAsCisJSjdfODUwX0tCUjEsCisJRTFfODUwX0tCUjIsCisJRjNfODUwX0tCUjMsCisJRDJfODUwX0tCUjQsCisJQzJfODUwX0tCQzAsCisJRDNfODUwX0tCQzEsCisJRTRfODUwX0tCQzIsCisJRjRfODUwX0tCQzMsCisJRTNfODUwX0tCQzQsCisKKwkvKiBVU0IgKi8KKwlBQTE3Xzg1MF9VU0JfRE0sCisJVzE2Xzg1MF9VU0JfUFVfRU4sCisJVzE3Xzg1MF9VU0JfVkJVU0ksCit9OworCisKIGVudW0gb21hcDF4eHhfaW5kZXggewogCS8qIFVBUlQxIChCVF9VQVJUX0dBVElORykqLwogCVVBUlQxX1RYID0gMCwKQEAgLTc4OCw3ICs4MzgsMjAgQEAKIAkgKiAgLSAiX0RPV04iIHN1ZmZpeCAoR1BJTzNfRE9XTikgd2l0aCBpbnRlcm5hbCBwdWxsZG93bgogCSAqICAtICJfT1VUIiBzdWZmaXggKEdQSU8zX09VVCkgZm9yIG91dHB1dC1vbmx5IHBpbnMgKHVubGlrZSAyNHh4KQogCSAqLworCUFGMjZfMzRYWF9HUElPMCwKKwlBRjIyXzM0WFhfR1BJTzksCiAJQUg4XzM0WFhfR1BJTzI5LAorCVU4XzM0WFhfR1BJTzU0X09VVCwKKwlVOF8zNFhYX0dQSU81NF9ET1dOLAorCUw4XzM0WFhfR1BJTzYzLAorCUcyNV8zNFhYX0dQSU84Nl9PVVQsCisJQUc0XzM0WFhfR1BJTzEzNF9PVVQsCisJQUU0XzM0WFhfR1BJTzEzNl9PVVQsCisJQUY2XzM0WFhfR1BJTzE0MF9VUCwKKwlBRTZfMzRYWF9HUElPMTQxLAorCUFGNV8zNFhYX0dQSU8xNDIsCisJQUU1XzM0WFhfR1BJTzE0MywKKwlIMTlfMzRYWF9HUElPMTY0X09VVCwKIAlKMjVfMzRYWF9HUElPMTcwLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMzR4eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwMzR4eC5oCmluZGV4IDhlMDQ3OWYuLmFiNjQwMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDM0eHguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXAzNHh4LmgKQEAgLTQ5LDExICs0OSwzOSBAQAogI2RlZmluZSBPTUFQMzQzWF9DVFJMX0JBU0UJT01BUDM0M1hfU0NNX0JBU0UKIAogI2RlZmluZSBPTUFQMzRYWF9JQ19CQVNFCTB4NDgyMDAwMDAKKworI2RlZmluZSBPTUFQMzQzMF9JU1BfQkFTRQkJKEw0XzM0WFhfQkFTRSArIDB4QkMwMDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9DQlVGRl9CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDAxMDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9DQ1AyX0JBU0UJCShPTUFQMzQzMF9JU1BfQkFTRSArIDB4MDQwMCkKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0NDRENfQkFTRQkJKE9NQVAzNDMwX0lTUF9CQVNFICsgMHgwNjAwKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfSElTVF9CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDBBMDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9IM0FfQkFTRQkJKE9NQVAzNDMwX0lTUF9CQVNFICsgMHgwQzAwKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfUFJFVl9CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDBFMDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9SRVNaX0JBU0UJCShPTUFQMzQzMF9JU1BfQkFTRSArIDB4MTAwMCkKKyNkZWZpbmUgT01BUDM0MzBfSVNQX1NCTF9CQVNFCQkoT01BUDM0MzBfSVNQX0JBU0UgKyAweDEyMDApCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9NTVVfQkFTRQkJKE9NQVAzNDMwX0lTUF9CQVNFICsgMHgxNDAwKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfQ1NJMkFfQkFTRQkJKE9NQVAzNDMwX0lTUF9CQVNFICsgMHgxODAwKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfQ1NJMlBIWV9CQVNFCShPTUFQMzQzMF9JU1BfQkFTRSArIDB4MTk3MCkKKworI2RlZmluZSBPTUFQMzQzMF9JU1BfRU5ECQkoT01BUDM0MzBfSVNQX0JBU0UgICAgICAgICArIDB4MDZGKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfQ0JVRkZfRU5ECQkoT01BUDM0MzBfSVNQX0NCVUZGX0JBU0UgICArIDB4MDc3KQorI2RlZmluZSBPTUFQMzQzMF9JU1BfQ0NQMl9FTkQJCShPTUFQMzQzMF9JU1BfQ0NQMl9CQVNFICAgICsgMHgxRUYpCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9DQ0RDX0VORAkJKE9NQVAzNDMwX0lTUF9DQ0RDX0JBU0UgICAgKyAweDBBNykKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0hJU1RfRU5ECQkoT01BUDM0MzBfSVNQX0hJU1RfQkFTRSAgICArIDB4MDQ3KQorI2RlZmluZSBPTUFQMzQzMF9JU1BfSDNBX0VORAkJKE9NQVAzNDMwX0lTUF9IM0FfQkFTRSAgICAgKyAweDA1RikKKyNkZWZpbmUgT01BUDM0MzBfSVNQX1BSRVZfRU5ECQkoT01BUDM0MzBfSVNQX1BSRVZfQkFTRSAgICArIDB4MDlGKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfUkVTWl9FTkQJCShPTUFQMzQzMF9JU1BfUkVTWl9CQVNFICAgICsgMHgwQUIpCisjZGVmaW5lIE9NQVAzNDMwX0lTUF9TQkxfRU5ECQkoT01BUDM0MzBfSVNQX1NCTF9CQVNFICAgICArIDB4MEZCKQorI2RlZmluZSBPTUFQMzQzMF9JU1BfTU1VX0VORAkJKE9NQVAzNDMwX0lTUF9NTVVfQkFTRSAgICAgKyAweDA2RikKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0NTSTJBX0VORAkJKE9NQVAzNDMwX0lTUF9DU0kyQV9CQVNFICAgKyAweDE2RikKKyNkZWZpbmUgT01BUDM0MzBfSVNQX0NTSTJQSFlfRU5ECShPTUFQMzQzMF9JU1BfQ1NJMlBIWV9CQVNFICsgMHgwMDcpCisKICNkZWZpbmUgT01BUDM0WFhfSVZBX0lOVENfQkFTRQkweDQwMDAwMDAwCiAjZGVmaW5lIE9NQVAzNFhYX0hTVVNCX09UR19CQVNFCShMNF8zNFhYX0JBU0UgKyAweEFCMDAwKQogI2RlZmluZSBPTUFQMzRYWF9IU1VTQl9IT1NUX0JBU0UJKEw0XzM0WFhfQkFTRSArIDB4NjQwMDApCiAjZGVmaW5lIE9NQVAzNFhYX1VTQlRMTF9CQVNFCShMNF8zNFhYX0JBU0UgKyAweDYyMDAwKQogCisjZGVmaW5lIE9NQVAzNFhYX01BSUxCT1hfQkFTRQkJKEw0XzM0WFhfQkFTRSArIDB4OTQwMDApCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXA4NTAuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvb21hcDg1MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzM2Y2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL29tYXA4NTAuaApAQCAtMCwwICsxLDEwMiBAQAorLyogYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9vbWFwODUwLmgKKyAqCisgKiBIYXJkd2FyZSBkZWZpbml0aW9ucyBmb3IgVEkgT01BUDg1MCBwcm9jZXNzb3IuCisgKgorICogRGVyaXZlZCBmcm9tIG9tYXA3MzAuaCBieSBaZWJlZGlhaCBDLiBNY0NsdXJlIDx6bWNAbHVyaWFuLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KKyAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQODUwX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQODUwX0gKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEJhc2UgYWRkcmVzc2VzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogU3ludGF4OiBYWF9CQVNFID0gVmlydHVhbCBiYXNlIGFkZHJlc3MsIFhYX1NUQVJUID0gUGh5c2ljYWwgYmFzZSBhZGRyZXNzICovCisKKyNkZWZpbmUgT01BUDg1MF9EU1BfQkFTRQkweEUwMDAwMDAwCisjZGVmaW5lIE9NQVA4NTBfRFNQX1NJWkUJMHg1MDAwMAorI2RlZmluZSBPTUFQODUwX0RTUF9TVEFSVAkweEUwMDAwMDAwCisKKyNkZWZpbmUgT01BUDg1MF9EU1BSRUdfQkFTRQkweEUxMDAwMDAwCisjZGVmaW5lIE9NQVA4NTBfRFNQUkVHX1NJWkUJU1pfMTI4SworI2RlZmluZSBPTUFQODUwX0RTUFJFR19TVEFSVAkweEUxMDAwMDAwCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBPTUFQODUwIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUDg1MF9DT05GSUdfQkFTRQkweGZmZmUxMDAwCisjZGVmaW5lIE9NQVA4NTBfSU9fQ09ORl8wCTB4ZmZmZTEwNzAKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzEJMHhmZmZlMTA3NAorI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfMgkweGZmZmUxMDc4CisjZGVmaW5lIE9NQVA4NTBfSU9fQ09ORl8zCTB4ZmZmZTEwN2MKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzQJMHhmZmZlMTA4MAorI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfNQkweGZmZmUxMDg0CisjZGVmaW5lIE9NQVA4NTBfSU9fQ09ORl82CTB4ZmZmZTEwODgKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzcJMHhmZmZlMTA4YworI2RlZmluZSBPTUFQODUwX0lPX0NPTkZfOAkweGZmZmUxMDkwCisjZGVmaW5lIE9NQVA4NTBfSU9fQ09ORl85CTB4ZmZmZTEwOTQKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzEwCTB4ZmZmZTEwOTgKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzExCTB4ZmZmZTEwOWMKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzEyCTB4ZmZmZTEwYTAKKyNkZWZpbmUgT01BUDg1MF9JT19DT05GXzEzCTB4ZmZmZTEwYTQKKworI2RlZmluZSBPTUFQODUwX01PREVfMQkJMHhmZmZlMTAxMAorI2RlZmluZSBPTUFQODUwX01PREVfMgkJMHhmZmZlMTAxNAorCisvKiBDU01JIHNwZWNpYWxzOiBpbiB0ZXJtcyBvZiBiYXNlICsgb2Zmc2V0ICovCisjZGVmaW5lIE9NQVA4NTBfTU9ERTJfT0ZGU0VUCTB4MTQKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9NQVA4NTAgdHJhZmZpYyBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUDg1MF9GTEFTSF9DRkdfMAkweGZmZmVjYzEwCisjZGVmaW5lIE9NQVA4NTBfRkxBU0hfQUNGR18wCTB4ZmZmZWNjNTAKKyNkZWZpbmUgT01BUDg1MF9GTEFTSF9DRkdfMQkweGZmZmVjYzE0CisjZGVmaW5lIE9NQVA4NTBfRkxBU0hfQUNGR18xCTB4ZmZmZWNjNTQKKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE9NQVA4NTAgRFNQIGNvbnRyb2wgcmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNkZWZpbmUgT01BUDg1MF9JQ1JfQkFTRQkweGZmZmJiODAwCisjZGVmaW5lIE9NQVA4NTBfRFNQX01fQ1RMCTB4ZmZmYmI4MDQKKyNkZWZpbmUgT01BUDg1MF9EU1BfTU1VX0JBU0UJMHhmZmZlZDIwMAorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT01BUDg1MCBQQ0NfVVBMRCBjb25maWd1cmF0aW9uIHJlZ2lzdGVycworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIE9NQVA4NTBfUENDX1VQTERfQ1RSTF9CQVNFCSgweGZmZmUwOTAwKQorI2RlZmluZSBPTUFQODUwX1BDQ19VUExEX0NUUkwJCShPTUFQODUwX1BDQ19VUExEX0NUUkxfQkFTRSArIDB4MDApCisKKyNlbmRpZiAvKiAgX19BU01fQVJDSF9PTUFQODUwX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wbS5oCmluZGV4IDM3ZTJmMGYuLmNlNmVlNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG0uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3BtLmgKQEAgLTExOCwxOCArMTE4LDYgQEAKIGV4dGVybiB2b2lkIHByZXZlbnRfaWRsZV9zbGVlcCh2b2lkKTsKIGV4dGVybiB2b2lkIGFsbG93X2lkbGVfc2xlZXAodm9pZCk7CiAKLS8qKgotICogY2xrX2RlbnlfaWRsZSAtIFByZXZlbnRzIHRoZSBjbG9jayBmcm9tIGJlaW5nIGlkbGVkIGR1cmluZyBNUFUgaWRsZQotICogQGNsazogY2xvY2sgc2lnbmFsIGhhbmRsZQotICovCi12b2lkIGNsa19kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKTsKLQotLyoqCi0gKiBjbGtfYWxsb3dfaWRsZSAtIENvdW50ZXJzIHByZXZpb3VzIGNsa19kZW55X2lkbGUKLSAqIEBjbGs6IGNsb2NrIHNpZ25hbCBoYW5kbGUKLSAqLwotdm9pZCBjbGtfYWxsb3dfaWRsZShzdHJ1Y3QgY2xrICpjbGspOwotCiBleHRlcm4gdm9pZCBvbWFwX3BtX2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwX3BtX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwNzMwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3Bvd2VyZG9tYWluLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3Bvd2VyZG9tYWluLmgKaW5kZXggMjgwNmE5Yy4uNjljOWU2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wb3dlcmRvbWFpbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvcG93ZXJkb21haW4uaApAQCAtNTAsOSArNTAsOSBAQAogCiAvKgogICogTWF4aW11bSBudW1iZXIgb2YgY2xvY2tkb21haW5zIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhIHBvd2VyZG9tYWluLgotICogQ09SRSBwb3dlcmRvbWFpbiBpcyBwcm9iYWJseSB0aGUgd29yc3QgY2FzZS4KKyAqIENPUkUgcG93ZXJkb21haW4gb24gT01BUDMgaXMgdGhlIHdvcnN0IGNhc2UKICAqLwotI2RlZmluZSBQV1JETV9NQVhfQ0xLRE1TCTMKKyNkZWZpbmUgUFdSRE1fTUFYX0NMS0RNUwk0CiAKIC8qIFhYWCBBIGNvbXBsZXRlbHkgYXJiaXRyYXJ5IG51bWJlci4gV2hhdCBpcyByZWFzb25hYmxlIGhlcmU/ICovCiAjZGVmaW5lIFBXUkRNX1RSQU5TSVRJT05fQkFJTE9VVCAxMDAwMDAKQEAgLTE0NSw2ICsxNDUsNyBAQAogCiBpbnQgcHdyZG1fc2V0X25leHRfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggcHdyc3QpOwogaW50IHB3cmRtX3JlYWRfbmV4dF9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKK2ludCBwd3JkbV9yZWFkX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwogaW50IHB3cmRtX3JlYWRfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKIGludCBwd3JkbV9jbGVhcl9hbGxfcHJldl9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9wcmNtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3ByY20uaAppbmRleCA1NmViYTBmLi4yNGFjM2M3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3ByY20uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3ByY20uaApAQCAtMjAsMTAgKzIwLDExIEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCiAKLSNpZm5kZWYgX19BU01fQVJNX0FSQ0hfRFBNX1BSQ01fSAotI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9EUE1fUFJDTV9ICisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX09NQVBfUFJDTV9ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX09NQVBfUFJDTV9ICiAKIHUzMiBvbWFwX3ByY21fZ2V0X3Jlc2V0X3NvdXJjZXModm9pZCk7Cit2b2lkIG9tYXBfcHJjbV9hcmNoX3Jlc2V0KGNoYXIgbW9kZSk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3NkcmMuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCmluZGV4IGE5OGM2YzMuLmFkYzczNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc2RyYy5oCkBAIC00LDEwICs0LDEyIEBACiAvKgogICogT01BUDIvMyBTRFJDL1NNUyByZWdpc3RlciBkZWZpbml0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTm9raWEgQ29ycG9yYXRpb24KICAqCi0gKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKKyAqIFRvbnkgTGluZGdyZW4KKyAqIFBhdWwgV2FsbXNsZXkKKyAqIFJpY2hhcmQgV29vZHJ1ZmYKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTY0LDE0ICs2Niw2MiBAQAogICogU01TIHJlZ2lzdGVyIGFjY2VzcwogICovCiAKLQotI2RlZmluZSBPTUFQMjQyWF9TTVNfUkVHQUREUihyZWcpCUlPX0FERFJFU1MoT01BUDI0MjBfU01TX0JBU0UgKyByZWcpCi0jZGVmaW5lIE9NQVAyNDNYX1NNU19SRUdBRERSKHJlZykJSU9fQUREUkVTUyhPTUFQMjQzWF9TTVNfQkFTRSArIHJlZykKLSNkZWZpbmUgT01BUDM0M1hfU01TX1JFR0FERFIocmVnKQlJT19BRERSRVNTKE9NQVAzNDNYX1NNU19CQVNFICsgcmVnKQorI2RlZmluZSBPTUFQMjQyWF9TTVNfUkVHQUREUihyZWcpCQkJCQlcCisJCQkodm9pZCBfX2lvbWVtICopSU9fQUREUkVTUyhPTUFQMjQyMF9TTVNfQkFTRSArIHJlZykKKyNkZWZpbmUgT01BUDI0M1hfU01TX1JFR0FERFIocmVnKQkJCQkJXAorCQkJKHZvaWQgX19pb21lbSAqKUlPX0FERFJFU1MoT01BUDI0M1hfU01TX0JBU0UgKyByZWcpCisjZGVmaW5lIE9NQVAzNDNYX1NNU19SRUdBRERSKHJlZykJCQkJCVwKKwkJCSh2b2lkIF9faW9tZW0gKilJT19BRERSRVNTKE9NQVAzNDNYX1NNU19CQVNFICsgcmVnKQogCiAvKiBTTVMgcmVnaXN0ZXIgb2Zmc2V0cyAtIHJlYWQvd3JpdGUgd2l0aCBzbXNfe3JlYWQsd3JpdGV9X3JlZygpICovCiAKICNkZWZpbmUgU01TX1NZU0NPTkZJRwkJMHgwMTAKIC8qIFJFVklTSVQ6IGZpbGwgaW4gb3RoZXIgU01TIHJlZ2lzdGVycyBoZXJlICovCiAKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisKKy8qKgorICogc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgLSBTRFJDIHBhcmFtZXRlcnMgZm9yIGEgZ2l2ZW4gU0RSQyBjbG9jayByYXRlCisgKiBAcmF0ZTogU0RSQyBjbG9jayByYXRlIChpbiBIeikKKyAqIEBhY3RpbV9jdHJsYTogVmFsdWUgdG8gcHJvZ3JhbSB0byBTRFJDX0FDVElNX0NUUkxBIGZvciB0aGlzIHJhdGUKKyAqIEBhY3RpbV9jdHJsYjogVmFsdWUgdG8gcHJvZ3JhbSB0byBTRFJDX0FDVElNX0NUUkxCIGZvciB0aGlzIHJhdGUKKyAqIEByZnJfY3RybDogVmFsdWUgdG8gcHJvZ3JhbSB0byBTRFJDX1JGUl9DVFJMIGZvciB0aGlzIHJhdGUKKyAqIEBtcjogVmFsdWUgdG8gcHJvZ3JhbSB0byBTRFJDX01SIGZvciB0aGlzIHJhdGUKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhIHByZS1jb21wdXRlZCBzZXQgb2YgcmVnaXN0ZXIgdmFsdWVzIGZvciB0aGUKKyAqIFNEUkMgZm9yIGEgZ2l2ZW4gU0RSQyBjbG9jayByYXRlIGFuZCBTRFJBTSBjaGlwLiAgVGhlc2UgYXJlCisgKiBpbnRlbmRlZCB0byBiZSBwcmUtY29tcHV0ZWQgYW5kIHNwZWNpZmllZCBpbiBhbiBhcnJheSBpbiB0aGUgYm9hcmQtKi5jCisgKiBmaWxlcy4gIFRoZSBzdHJ1Y3R1cmUgaXMga2V5ZWQgb2ZmIHRoZSAncmF0ZScgZmllbGQuCisgKi8KK3N0cnVjdCBvbWFwX3NkcmNfcGFyYW1zIHsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJdTMyIGFjdGltX2N0cmxhOworCXUzMiBhY3RpbV9jdHJsYjsKKwl1MzIgcmZyX2N0cmw7CisJdTMyIG1yOworfTsKKwordm9pZCBfX2luaXQgb21hcDJfc2RyY19pbml0KHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzcCk7CitzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqb21hcDJfc2RyY19nZXRfcGFyYW1zKHVuc2lnbmVkIGxvbmcgcik7CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCitzdHJ1Y3QgbWVtb3J5X3RpbWluZ3MgeworCXUzMiBtX3R5cGU7CQkvKiBkZHIgPSAxLCBzZHIgPSAwICovCisJdTMyIGRsbF9tb2RlOwkJLyogdXNlIGxvY2sgbW9kZSA9IDEsIHVubG9jayBtb2RlID0gMCAqLworCXUzMiBzbG93X2RsbF9jdHJsOwkvKiB1bmxvY2sgbW9kZSwgZGxsIHZhbHVlIGZvciBzbG93IHNwZWVkICovCisJdTMyIGZhc3RfZGxsX2N0cmw7CS8qIHVubG9jayBtb2RlLCBkbGwgdmFsdWUgZm9yIGZhc3Qgc3BlZWQgKi8KKwl1MzIgYmFzZV9jczsJCS8qIGJhc2UgY2hpcCBzZWxlY3QgdG8gdXNlIGZvciBjYWxjdWxhdGlvbnMgKi8KK307CisKK2V4dGVybiB2b2lkIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXModTMyIGZvcmNlX2xvY2tfdG9fdW5sb2NrX21vZGUpOworCit1MzIgb21hcDJ4eHhfc2RyY19kbGxfaXNfdW5sb2NrZWQodm9pZCk7Cit1MzIgb21hcDJ4eHhfc2RyY19yZXByb2dyYW0odTMyIGxldmVsLCB1MzIgZm9yY2UpOworCisjZW5kaWYgIC8qIENPTkZJR19BUkNIX09NQVAyICovCisKKyNlbmRpZiAgLyogX19BU1NFTUJMRVJfXyAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmluZGV4IDA2OTIzZjIuLjEwNjBlMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtOSwxMiArOSwxNCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCisjaW5jbHVkZSA8bWFjaC9wcmNtLmg+CisKICNpZm5kZWYgQ09ORklHX01BQ0hfVk9JQ0VCTFVFCiAjZGVmaW5lIHZvaWNlYmx1ZV9yZXNldCgpCQlkbyB7fSB3aGlsZSAoMCkKKyNlbHNlCitleHRlcm4gdm9pZCB2b2ljZWJsdWVfcmVzZXQodm9pZCk7CiAjZW5kaWYKIAotZXh0ZXJuIHZvaWQgb21hcF9wcmNtX2FyY2hfcmVzZXQoY2hhciBtb2RlKTsKLQogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaWRsZSh2b2lkKQogewogCWNwdV9kb19pZGxlKCk7CkBAIC0zOCw3ICs0MCw3IEBACiAJCW9tYXBfd3JpdGV3KDEsIEFSTV9SU1RDVDEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKIHsKIAlpZiAoIWNwdV9jbGFzc19pc19vbWFwMigpKQogCQlvbWFwMV9hcmNoX3Jlc2V0KG1vZGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC91c2IuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvdXNiLmgKaW5kZXggYTU2YTYxMC4uNjlmMGNlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvbWFjaC91c2IuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9tYWNoL3VzYi5oCkBAIC0yNyw4ICsyNywxOCBAQAogI2RlZmluZSBVRENfQkFTRQkJCU9NQVAyX1VEQ19CQVNFCiAjZGVmaW5lIE9NQVBfT0hDSV9CQVNFCQkJT01BUDJfT0hDSV9CQVNFCiAKKyNpZmRlZiBDT05GSUdfVVNCX01VU0JfU09DCitleHRlcm4gdm9pZCB1c2JfbXVzYl9pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfbXVzYl9pbml0KHZvaWQpCit7Cit9CiAjZW5kaWYKIAorI2VuZGlmCisKK3ZvaWQgb21hcF91c2JfaW5pdChzdHJ1Y3Qgb21hcF91c2JfY29uZmlnICpwZGF0YSk7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYwppbmRleCBiNTJjZTA1Li4wYWJmYmFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMKQEAgLTEsMTAgKzEsOSBAQAogLyoKICAqIE9NQVAgbWFpbGJveCBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiBDb250YWN0OiBUb3NoaWhpcm8gS29iYXlhc2hpIDx0b3NoaWhpcm8ua29iYXlhc2hpQG5va2lhLmNvbT4KLSAqCQlSZXN0cnVjdHVyZWQgYnkgSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPgorICogQ29udGFjdDogSGlyb3NoaSBET1lVIDxIaXJvc2hpLkRPWVVAbm9raWEuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yMiwyMSArMjEsOTggQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KKwogI2luY2x1ZGUgPG1hY2gvbWFpbGJveC5oPgotI2luY2x1ZGUgIm1haWxib3guaCIKKworc3RhdGljIGludCBlbmFibGVfc2VxX2JpdDsKK21vZHVsZV9wYXJhbShlbmFibGVfc2VxX2JpdCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV9zZXFfYml0LCAiRW5hYmxlIHNlcXVlbmNlIGJpdCBjaGVja2luZy4iKTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX21ib3ggKm1ib3hlczsKIHN0YXRpYyBERUZJTkVfUldMT0NLKG1ib3hlc19sb2NrKTsKIAorLyoKKyAqIE1haWxib3ggc2VxdWVuY2UgYml0IEFQSQorICovCisKKy8qIHNlcV9yY3Ygc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggYW55IHZhbHVlIG90aGVyIHRoYW4KKyAqIDAgYW5kIDEgPDwgMzEsIHRvIGFsbG93IGVpdGhlciB2YWx1ZSBmb3IgdGhlIGZpcnN0CisgKiBtZXNzYWdlLiAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYm94X3NlcV9pbml0KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJaWYgKCFlbmFibGVfc2VxX2JpdCkKKwkJcmV0dXJuOworCisJLyogYW55IHZhbHVlIG90aGVyIHRoYW4gMCBhbmQgMSA8PCAzMSAqLworCW1ib3gtPnNlcV9yY3YgPSAweGZmZmZmZmZmOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbWJveF9zZXFfdG9nZ2xlKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgKiBtc2cpCit7CisJaWYgKCFlbmFibGVfc2VxX2JpdCkKKwkJcmV0dXJuOworCisJLyogYWRkIHNlcV9zbmQgdG8gbXNnICovCisJKm1zZyA9ICgqbXNnICYgMHg3ZmZmZmZmZikgfCBtYm94LT5zZXFfc25kOworCS8qIGZsaXAgc2VxX3NuZCAqLworCW1ib3gtPnNlcV9zbmQgXj0gMSA8PCAzMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWJveF9zZXFfdGVzdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZykKK3sKKwltYm94X21zZ190IHNlcTsKKworCWlmICghZW5hYmxlX3NlcV9iaXQpCisJCXJldHVybiAwOworCisJc2VxID0gbXNnICYgKDEgPDwgMzEpOworCWlmIChzZXEgPT0gbWJveC0+c2VxX3JjdikKKwkJcmV0dXJuIC0xOworCW1ib3gtPnNlcV9yY3YgPSBzZXE7CisJcmV0dXJuIDA7Cit9CisKKy8qIE1haWxib3ggRklGTyBoYW5kbGUgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIG1ib3hfbXNnX3QgbWJveF9maWZvX3JlYWQoc3RydWN0IG9tYXBfbWJveCAqbWJveCkKK3sKKwlyZXR1cm4gbWJveC0+b3BzLT5maWZvX3JlYWQobWJveCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgbWJveF9maWZvX3dyaXRlKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG1ib3hfbXNnX3QgbXNnKQoreworCW1ib3gtPm9wcy0+Zmlmb193cml0ZShtYm94LCBtc2cpOworfQorc3RhdGljIGlubGluZSBpbnQgbWJveF9maWZvX2VtcHR5KHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJcmV0dXJuIG1ib3gtPm9wcy0+Zmlmb19lbXB0eShtYm94KTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IG1ib3hfZmlmb19mdWxsKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCit7CisJcmV0dXJuIG1ib3gtPm9wcy0+Zmlmb19mdWxsKG1ib3gpOworfQorCisvKiBNYWlsYm94IElSUSBoYW5kbGUgZnVuY3Rpb25zICovCitzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX21ib3hfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpCit7CisJbWJveC0+b3BzLT5lbmFibGVfaXJxKG1ib3gsIGlycSk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV9tYm94X2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKQoreworCW1ib3gtPm9wcy0+ZGlzYWJsZV9pcnEobWJveCwgaXJxKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY2tfbWJveF9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X2lycV90IGlycSkKK3sKKwlpZiAobWJveC0+b3BzLT5hY2tfaXJxKQorCQltYm94LT5vcHMtPmFja19pcnEobWJveCwgaXJxKTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGlzX21ib3hfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpCit7CisJcmV0dXJuIG1ib3gtPm9wcy0+aXNfaXJxKG1ib3gsIGlycSk7Cit9CisKIC8qIE1haWxib3ggU2VxdWVuY2UgQml0IGZ1bmN0aW9uICovCiB2b2lkIG9tYXBfbWJveF9pbml0X3NlcShzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQogewpAQCAtMTM2LDcgKzIxMiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChtYm94LT5yeHEtPmNhbGxiYWNrID09IE5VTEwpIHsKLQkJc3lzZnNfbm90aWZ5KCZtYm94LT5kZXYua29iaiwgTlVMTCwgIm1ib3giKTsKKwkJc3lzZnNfbm90aWZ5KCZtYm94LT5kZXYtPmtvYmosIE5VTEwsICJtYm94Iik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIwNCw3ICsyODAsNyBAQAogCS8qIG5vIG1vcmUgbWVzc2FnZXMgaW4gdGhlIGZpZm8uIGNsZWFyIElSUSBzb3VyY2UuICovCiAJYWNrX21ib3hfaXJxKG1ib3gsIElSUV9SWCk7CiAJZW5hYmxlX21ib3hfaXJxKG1ib3gsIElSUV9SWCk7Ci0Jbm9tZW06Citub21lbToKIAlzY2hlZHVsZV93b3JrKCZtYm94LT5yeHEtPndvcmspOwogfQogCkBAIC0yODYsNyArMzYyLDcgQEAKIHN0YXRpYyBDTEFTU19BVFRSKG1ib3gsIFNfSVJVR08sIG1ib3hfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3Mgb21hcF9tYm94X2NsYXNzID0gewotCS5uYW1lID0gIm9tYXBfbWJveCIsCisJLm5hbWUgPSAib21hcC1tYWlsYm94IiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94X3F1ZXVlICptYm94X3F1ZXVlX2FsbG9jKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsCkBAIC0zMzMsMjEgKzQwOSw2IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCW1ib3gtPmRldi5jbGFzcyA9ICZvbWFwX21ib3hfY2xhc3M7Ci0JZGV2X3NldF9uYW1lKCZtYm94LT5kZXYsICIlcyIsIG1ib3gtPm5hbWUpOwotCWRldl9zZXRfZHJ2ZGF0YSgmbWJveC0+ZGV2LCBtYm94KTsKLQotCXJldCA9IGRldmljZV9yZWdpc3RlcigmbWJveC0+ZGV2KTsKLQlpZiAodW5saWtlbHkocmV0KSkKLQkJZ290byBmYWlsX2RldmljZV9yZWc7Ci0KLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1ib3gtPmRldiwgJmRldl9hdHRyX21ib3gpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJImRldmljZV9jcmVhdGVfZmlsZSBmYWlsZWQ6ICVkXG4iLCByZXQpOwotCQlnb3RvIGZhaWxfY3JlYXRlX21ib3g7Ci0JfQotCiAJcmV0ID0gcmVxdWVzdF9pcnEobWJveC0+aXJxLCBtYm94X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKIAkJCQltYm94LT5uYW1lLCBtYm94KTsKIAlpZiAodW5saWtlbHkocmV0KSkgewpAQCAtMzc3LDEwICs0MzgsNiBAQAogIGZhaWxfYWxsb2NfdHhxOgogCWZyZWVfaXJxKG1ib3gtPmlycSwgbWJveCk7CiAgZmFpbF9yZXF1ZXN0X2lycToKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1ib3gtPmRldiwgJmRldl9hdHRyX21ib3gpOwotIGZhaWxfY3JlYXRlX21ib3g6Ci0JZGV2aWNlX3VucmVnaXN0ZXIoJm1ib3gtPmRldik7Ci0gZmFpbF9kZXZpY2VfcmVnOgogCWlmICh1bmxpa2VseShtYm94LT5vcHMtPnNodXRkb3duKSkKIAkJbWJveC0+b3BzLT5zaHV0ZG93bihtYm94KTsKIApAQCAtMzkzLDggKzQ1MCw2IEBACiAJbWJveF9xdWV1ZV9mcmVlKG1ib3gtPnJ4cSk7CiAKIAlmcmVlX2lycShtYm94LT5pcnEsIG1ib3gpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmbWJveC0+ZGV2LCAmZGV2X2F0dHJfbWJveCk7Ci0JY2xhc3NfdW5yZWdpc3Rlcigmb21hcF9tYm94X2NsYXNzKTsKIAogCWlmICh1bmxpa2VseShtYm94LT5vcHMtPnNodXRkb3duKSkKIAkJbWJveC0+b3BzLT5zaHV0ZG93bihtYm94KTsKQEAgLTQ0MCw3ICs0OTUsNyBAQAogfQogRVhQT1JUX1NZTUJPTChvbWFwX21ib3hfcHV0KTsKIAotaW50IG9tYXBfbWJveF9yZWdpc3RlcihzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQoraW50IG9tYXBfbWJveF9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IG9tYXBfbWJveCAqKnRtcDsKQEAgLTQ1MCwxNCArNTA1LDMxIEBACiAJaWYgKG1ib3gtPm5leHQpCiAJCXJldHVybiAtRUJVU1k7CiAKKwltYm94LT5kZXYgPSBkZXZpY2VfY3JlYXRlKCZvbWFwX21ib3hfY2xhc3MsCisJCQkJICBwYXJlbnQsIDAsIG1ib3gsICIlcyIsIG1ib3gtPm5hbWUpOworCWlmIChJU19FUlIobWJveC0+ZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIobWJveC0+ZGV2KTsKKworCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShtYm94LT5kZXYsICZkZXZfYXR0cl9tYm94KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9zeXNmczsKKwogCXdyaXRlX2xvY2soJm1ib3hlc19sb2NrKTsKIAl0bXAgPSBmaW5kX21ib3hlcyhtYm94LT5uYW1lKTsKLQlpZiAoKnRtcCkKKwlpZiAoKnRtcCkgewogCQlyZXQgPSAtRUJVU1k7Ci0JZWxzZQotCQkqdG1wID0gbWJveDsKKwkJd3JpdGVfdW5sb2NrKCZtYm94ZXNfbG9jayk7CisJCWdvdG8gZXJyX2ZpbmQ7CisJfQorCSp0bXAgPSBtYm94OwogCXdyaXRlX3VubG9jaygmbWJveGVzX2xvY2spOwogCisJcmV0dXJuIDA7CisKK2Vycl9maW5kOgorCWRldmljZV9yZW1vdmVfZmlsZShtYm94LT5kZXYsICZkZXZfYXR0cl9tYm94KTsKK2Vycl9zeXNmczoKKwlkZXZpY2VfdW5yZWdpc3RlcihtYm94LT5kZXYpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWJveF9yZWdpc3Rlcik7CkBAIC00NzMsNiArNTQ1LDggQEAKIAkJCSp0bXAgPSBtYm94LT5uZXh0OwogCQkJbWJveC0+bmV4dCA9IE5VTEw7CiAJCQl3cml0ZV91bmxvY2soJm1ib3hlc19sb2NrKTsKKwkJCWRldmljZV9yZW1vdmVfZmlsZShtYm94LT5kZXYsICZkZXZfYXR0cl9tYm94KTsKKwkJCWRldmljZV91bnJlZ2lzdGVyKG1ib3gtPmRldik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQl0bXAgPSAmKCp0bXApLT5uZXh0OwpAQCAtNTAxLDQgKzU3NSw2IEBACiBzdWJzeXNfaW5pdGNhbGwob21hcF9tYm94X2NsYXNzX2luaXQpOwogbW9kdWxlX2V4aXQob21hcF9tYm94X2NsYXNzX2V4aXQpOwogCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIm9tYXAgbWFpbGJveDogaW50ZXJydXB0IGRyaXZlbiBtZXNzYWdpbmciKTsKK01PRFVMRV9BVVRIT1IoIlRvc2hpaGlybyBLb2JheWFzaGkgYW5kIEhpcm9zaGkgRE9ZVSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YzY3NDAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogTWFpbGJveCBpbnRlcm5hbCBmdW5jdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTm9raWEgQ29ycG9yYXRpb24KLSAqIFdyaXR0ZW4gYnk6IEhpcm9zaGkgRE9ZVSA8SGlyb3NoaS5ET1lVQG5va2lhLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotCi0jaWZuZGVmIF9fQVJDSF9BUk1fUExBVF9NQUlMQk9YX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9QTEFUX01BSUxCT1hfSAotCi0vKgotICogTWFpbGJveCBzZXF1ZW5jZSBiaXQgQVBJCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKQotIyAgZGVmaW5lIE1CT1hfVVNFX1NFUV9CSVQKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCi0jICBkZWZpbmUgTUJPWF9VU0VfU0VRX0JJVAotI2VuZGlmCi0KLSNpZmRlZiBNQk9YX1VTRV9TRVFfQklUCi0vKiBzZXFfcmN2IHNob3VsZCBiZSBpbml0aWFsaXplZCB3aXRoIGFueSB2YWx1ZSBvdGhlciB0aGFuCi0gKiAwIGFuZCAxIDw8IDMxLCB0byBhbGxvdyBlaXRoZXIgdmFsdWUgZm9yIHRoZSBmaXJzdAotICogbWVzc2FnZS4gICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbWJveF9zZXFfaW5pdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQotewotCS8qIGFueSB2YWx1ZSBvdGhlciB0aGFuIDAgYW5kIDEgPDwgMzEgKi8KLQltYm94LT5zZXFfcmN2ID0gMHhmZmZmZmZmZjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG1ib3hfc2VxX3RvZ2dsZShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190ICogbXNnKQotewotCS8qIGFkZCBzZXFfc25kIHRvIG1zZyAqLwotCSptc2cgPSAoKm1zZyAmIDB4N2ZmZmZmZmYpIHwgbWJveC0+c2VxX3NuZDsKLQkvKiBmbGlwIHNlcV9zbmQgKi8KLQltYm94LT5zZXFfc25kIF49IDEgPDwgMzE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG1ib3hfc2VxX3Rlc3Qoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgbWJveF9tc2dfdCBtc2cpCi17Ci0JbWJveF9tc2dfdCBzZXEgPSBtc2cgJiAoMSA8PCAzMSk7Ci0JaWYgKHNlcSA9PSBtYm94LT5zZXFfcmN2KQotCQlyZXR1cm4gLTE7Ci0JbWJveC0+c2VxX3JjdiA9IHNlcTsKLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgbWJveF9zZXFfaW5pdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQotewotfQotc3RhdGljIGlubGluZSB2b2lkIG1ib3hfc2VxX3RvZ2dsZShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190ICogbXNnKQotewotfQotc3RhdGljIGlubGluZSBpbnQgbWJveF9zZXFfdGVzdChzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZykKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0vKiBNYWlsYm94IEZJRk8gaGFuZGxlIGZ1bmN0aW9ucyAqLwotc3RhdGljIGlubGluZSBtYm94X21zZ190IG1ib3hfZmlmb19yZWFkKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gpCi17Ci0JcmV0dXJuIG1ib3gtPm9wcy0+Zmlmb19yZWFkKG1ib3gpOwotfQotc3RhdGljIGlubGluZSB2b2lkIG1ib3hfZmlmb193cml0ZShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBtYm94X21zZ190IG1zZykKLXsKLQltYm94LT5vcHMtPmZpZm9fd3JpdGUobWJveCwgbXNnKTsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IG1ib3hfZmlmb19lbXB0eShzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQotewotCXJldHVybiBtYm94LT5vcHMtPmZpZm9fZW1wdHkobWJveCk7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBtYm94X2ZpZm9fZnVsbChzdHJ1Y3Qgb21hcF9tYm94ICptYm94KQotewotCXJldHVybiBtYm94LT5vcHMtPmZpZm9fZnVsbChtYm94KTsKLX0KLQotLyogTWFpbGJveCBJUlEgaGFuZGxlIGZ1bmN0aW9ucyAqLwotc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9tYm94X2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKQotewotCW1ib3gtPm9wcy0+ZW5hYmxlX2lycShtYm94LCBpcnEpOwotfQotc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfbWJveF9pcnEoc3RydWN0IG9tYXBfbWJveCAqbWJveCwgb21hcF9tYm94X2lycV90IGlycSkKLXsKLQltYm94LT5vcHMtPmRpc2FibGVfaXJxKG1ib3gsIGlycSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWNrX21ib3hfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsIG9tYXBfbWJveF9pcnFfdCBpcnEpCi17Ci0JaWYgKG1ib3gtPm9wcy0+YWNrX2lycSkKLQkJbWJveC0+b3BzLT5hY2tfaXJxKG1ib3gsIGlycSk7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBpc19tYm94X2lycShzdHJ1Y3Qgb21hcF9tYm94ICptYm94LCBvbWFwX21ib3hfaXJxX3QgaXJxKQotewotCXJldHVybiBtYm94LT5vcHMtPmlzX2lycShtYm94LCBpcnEpOwotfQotCi0jZW5kaWYJCQkJLyogX19BUkNIX0FSTV9QTEFUX01BSUxCT1hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCBlNTg0MmUzLi4yOGIwYTgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtMjE0LDcgKzIxNCw2IEBACiBpbnQgb21hcF9tY2JzcF9yZXF1ZXN0KHVuc2lnbmVkIGludCBpZCkKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7Ci0JaW50IGk7CiAJaW50IGVycjsKIAogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKQEAgLTIyMywyMyArMjIyLDIzIEBACiAJfQogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAotCWlmIChtY2JzcC0+cGRhdGEgJiYgbWNic3AtPnBkYXRhLT5vcHMgJiYgbWNic3AtPnBkYXRhLT5vcHMtPnJlcXVlc3QpCi0JCW1jYnNwLT5wZGF0YS0+b3BzLT5yZXF1ZXN0KGlkKTsKLQotCWZvciAoaSA9IDA7IGkgPCBtY2JzcC0+bnVtX2Nsa3M7IGkrKykKLQkJY2xrX2VuYWJsZShtY2JzcC0+Y2xrc1tpXSk7Ci0KIAlzcGluX2xvY2soJm1jYnNwLT5sb2NrKTsKIAlpZiAoIW1jYnNwLT5mcmVlKSB7CiAJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgaXMgY3VycmVudGx5IGluIHVzZVxuIiwKIAkJCW1jYnNwLT5pZCk7CiAJCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAltY2JzcC0+ZnJlZSA9IDA7CiAJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKIAorCWlmIChtY2JzcC0+cGRhdGEgJiYgbWNic3AtPnBkYXRhLT5vcHMgJiYgbWNic3AtPnBkYXRhLT5vcHMtPnJlcXVlc3QpCisJCW1jYnNwLT5wZGF0YS0+b3BzLT5yZXF1ZXN0KGlkKTsKKworCWNsa19lbmFibGUobWNic3AtPmljbGspOworCWNsa19lbmFibGUobWNic3AtPmZjbGspOworCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCB0cmFuc21pdHRlciwgcmVjZWl2ZXIgYW5kIHNhbXBsZS1yYXRlIGdlbmVyYXRvciBhcmUKIAkgKiBub3QgcnVubmluZyBiZWZvcmUgYWN0aXZhdGluZyBJUlFzLgpAQCAtMjc4LDcgKzI3Nyw2IEBACiB2b2lkIG9tYXBfbWNic3BfZnJlZSh1bnNpZ25lZCBpbnQgaWQpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwotCWludCBpOwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwpAQCAtMjg5LDggKzI4NywxNCBAQAogCWlmIChtY2JzcC0+cGRhdGEgJiYgbWNic3AtPnBkYXRhLT5vcHMgJiYgbWNic3AtPnBkYXRhLT5vcHMtPmZyZWUpCiAJCW1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKGlkKTsKIAotCWZvciAoaSA9IG1jYnNwLT5udW1fY2xrcyAtIDE7IGkgPj0gMDsgaS0tKQotCQljbGtfZGlzYWJsZShtY2JzcC0+Y2xrc1tpXSk7CisJY2xrX2Rpc2FibGUobWNic3AtPmZjbGspOworCWNsa19kaXNhYmxlKG1jYnNwLT5pY2xrKTsKKworCWlmIChtY2JzcC0+aW9fdHlwZSA9PSBPTUFQX01DQlNQX0lSUV9JTykgeworCQkvKiBGcmVlIElSUXMgKi8KKwkJZnJlZV9pcnEobWNic3AtPnJ4X2lycSwgKHZvaWQgKiltY2JzcCk7CisJCWZyZWVfaXJxKG1jYnNwLT50eF9pcnEsICh2b2lkICopbWNic3ApOworCX0KIAogCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOwogCWlmIChtY2JzcC0+ZnJlZSkgewpAQCAtMzAyLDEyICszMDYsNiBAQAogCiAJbWNic3AtPmZyZWUgPSAxOwogCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7Ci0KLQlpZiAobWNic3AtPmlvX3R5cGUgPT0gT01BUF9NQ0JTUF9JUlFfSU8pIHsKLQkJLyogRnJlZSBJUlFzICovCi0JCWZyZWVfaXJxKG1jYnNwLT5yeF9pcnEsICh2b2lkICopbWNic3ApOwotCQlmcmVlX2lycShtY2JzcC0+dHhfaXJxLCAodm9pZCAqKW1jYnNwKTsKLQl9CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3BfZnJlZSk7CiAKQEAgLTg3Niw3ICs4NzQsNiBAQAogCXN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwogCWludCBpZCA9IHBkZXYtPmlkIC0gMTsKLQlpbnQgaTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICghcGRhdGEpIHsKQEAgLTg5OSw3ICs4OTYsNiBAQAogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXQ7CiAJfQotCW1jYnNwX3B0cltpZF0gPSBtY2JzcDsKIAogCXNwaW5fbG9ja19pbml0KCZtY2JzcC0+bG9jayk7CiAJbWNic3AtPmlkID0gaWQgKyAxOwpAQCAtOTIxLDM5ICs5MTcsMzIgQEAKIAltY2JzcC0+ZG1hX3J4X3N5bmMgPSBwZGF0YS0+ZG1hX3J4X3N5bmM7CiAJbWNic3AtPmRtYV90eF9zeW5jID0gcGRhdGEtPmRtYV90eF9zeW5jOwogCi0JaWYgKHBkYXRhLT5udW1fY2xrcykgewotCQltY2JzcC0+bnVtX2Nsa3MgPSBwZGF0YS0+bnVtX2Nsa3M7Ci0JCW1jYnNwLT5jbGtzID0ga3phbGxvYyhtY2JzcC0+bnVtX2Nsa3MgKiBzaXplb2Yoc3RydWN0IGNsayAqKSwKLQkJCQkJR0ZQX0tFUk5FTCk7Ci0JCWlmICghbWNic3AtPmNsa3MpIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQkJZm9yIChpID0gMDsgaSA8IG1jYnNwLT5udW1fY2xrczsgaSsrKSB7Ci0JCQltY2JzcC0+Y2xrc1tpXSA9IGNsa19nZXQoJnBkZXYtPmRldiwgcGRhdGEtPmNsa19uYW1lc1tpXSk7Ci0JCQlpZiAoSVNfRVJSKG1jYnNwLT5jbGtzW2ldKSkgewotCQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkJIkludmFsaWQgJXMgY29uZmlndXJhdGlvbiBmb3IgTWNCU1AlZC5cbiIsCi0JCQkJCXBkYXRhLT5jbGtfbmFtZXNbaV0sIG1jYnNwLT5pZCk7Ci0JCQkJcmV0ID0gUFRSX0VSUihtY2JzcC0+Y2xrc1tpXSk7Ci0JCQkJZ290byBlcnJfY2xrOwotCQkJfQotCQl9CisJbWNic3AtPmljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKKwlpZiAoSVNfRVJSKG1jYnNwLT5pY2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKG1jYnNwLT5pY2xrKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBpY2s6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9pY2xrOworCX0KIAorCW1jYnNwLT5mY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUihtY2JzcC0+ZmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihtY2JzcC0+ZmNsayk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgZmNrOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZmNsazsKIAl9CiAKIAltY2JzcC0+cGRhdGEgPSBwZGF0YTsKIAltY2JzcC0+ZGV2ID0gJnBkZXYtPmRldjsKKwltY2JzcF9wdHJbaWRdID0gbWNic3A7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWNic3ApOwogCXJldHVybiAwOwogCi1lcnJfY2xrOgotCXdoaWxlIChpLS0pCi0JCWNsa19wdXQobWNic3AtPmNsa3NbaV0pOwotCWtmcmVlKG1jYnNwLT5jbGtzKTsKK2Vycl9mY2xrOgorCWNsa19wdXQobWNic3AtPmljbGspOworZXJyX2ljbGs6CiAJaW91bm1hcChtY2JzcC0+aW9fYmFzZSk7CiBlcnJfaW9yZW1hcDoKLQltY2JzcC0+ZnJlZSA9IDA7CisJa2ZyZWUobWNic3ApOwogZXhpdDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtOTYxLDcgKzk1MCw2IEBACiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBvbWFwX21jYnNwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJaWYgKG1jYnNwKSB7CkBAIC05NzAsMTggKzk1OCwxNSBAQAogCQkJCW1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKQogCQkJbWNic3AtPnBkYXRhLT5vcHMtPmZyZWUobWNic3AtPmlkKTsKIAotCQlmb3IgKGkgPSBtY2JzcC0+bnVtX2Nsa3MgLSAxOyBpID49IDA7IGktLSkgewotCQkJY2xrX2Rpc2FibGUobWNic3AtPmNsa3NbaV0pOwotCQkJY2xrX3B1dChtY2JzcC0+Y2xrc1tpXSk7Ci0JCX0KKwkJY2xrX2Rpc2FibGUobWNic3AtPmZjbGspOworCQljbGtfZGlzYWJsZShtY2JzcC0+aWNsayk7CisJCWNsa19wdXQobWNic3AtPmZjbGspOworCQljbGtfcHV0KG1jYnNwLT5pY2xrKTsKIAogCQlpb3VubWFwKG1jYnNwLT5pb19iYXNlKTsKIAotCQlpZiAobWNic3AtPm51bV9jbGtzKSB7Ci0JCQlrZnJlZShtY2JzcC0+Y2xrcyk7Ci0JCQltY2JzcC0+Y2xrcyA9IE5VTEw7Ci0JCQltY2JzcC0+bnVtX2Nsa3MgPSAwOwotCQl9CisJCW1jYnNwLT5mY2xrID0gTlVMTDsKKwkJbWNic3AtPmljbGsgPSBOVUxMOwogCQltY2JzcC0+ZnJlZSA9IDA7CiAJCW1jYnNwLT5kZXYgPSBOVUxMOwogCX0KQEAgLTEwMDIsNCArOTg3LDMgQEAKIAkvKiBSZWdpc3RlciB0aGUgTWNCU1AgZHJpdmVyICovCiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9tY2JzcF9kcml2ZXIpOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwppbmRleCBiZTdiY2FmLi5mYTUyOTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCQlvbWFwX3NyYW1fYmFzZSA9IE9NQVAxX1NSQU1fVkE7CiAJCW9tYXBfc3JhbV9zdGFydCA9IE9NQVAxX1NSQU1fUEE7CiAKLQkJaWYgKGNwdV9pc19vbWFwNzMwKCkpCisJCWlmIChjcHVfaXNfb21hcDd4eCgpKQogCQkJb21hcF9zcmFtX3NpemUgPSAweDMyMDAwOwkvKiAyMDBLICovCiAJCWVsc2UgaWYgKGNwdV9pc19vbWFwMTV4eCgpKQogCQkJb21hcF9zcmFtX3NpemUgPSAweDMwMDAwOwkvKiAxOTJLICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKaW5kZXggZTI3OGRlNi4uNTA5ZjJlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwpAQCAtNzI5LDMwICs3MjksMTMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHN0cnVjdCBvbWFwX3VzYl9jb25maWcgcGxhdGZvcm1fZGF0YTsKLQotc3RhdGljIGludCBfX2luaXQKLW9tYXBfdXNiX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IG9tYXBfdXNiX2luaXQoc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqcGRhdGEpCiB7Ci0JY29uc3Qgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnOwotCi0JY29uZmlnID0gb21hcF9nZXRfY29uZmlnKE9NQVBfVEFHX1VTQiwgc3RydWN0IG9tYXBfdXNiX2NvbmZpZyk7Ci0JaWYgKGNvbmZpZyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVVNCOiBObyBib2FyZC1zcGVjaWZpYyAiCi0JCQkJInBsYXRmb3JtIGNvbmZpZyBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlwbGF0Zm9ybV9kYXRhID0gKmNvbmZpZzsKLQogCWlmIChjcHVfaXNfb21hcDczMCgpIHx8IGNwdV9pc19vbWFwMTZ4eCgpIHx8IGNwdV9pc19vbWFwMjR4eCgpKQotCQlvbWFwX290Z19pbml0KCZwbGF0Zm9ybV9kYXRhKTsKKwkJb21hcF9vdGdfaW5pdChwZGF0YSk7CiAJZWxzZSBpZiAoY3B1X2lzX29tYXAxNXh4KCkpCi0JCW9tYXBfMTUxMF91c2JfaW5pdCgmcGxhdGZvcm1fZGF0YSk7Ci0JZWxzZSB7CisJCW9tYXBfMTUxMF91c2JfaW5pdChwZGF0YSk7CisJZWxzZQogCQlwcmludGsoS0VSTl9FUlIgIlVTQjogTm8gaW5pdCBmb3IgeW91ciBjaGlwIHlldFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXR1cm4gMDsKIH0KIAotc3Vic3lzX2luaXRjYWxsKG9tYXBfdXNiX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYwppbmRleCAwZDEyYzIxLi4zMmViOWUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2dwaW8uYwpAQCAtMTksNyArMTksOCBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CiBzdGF0aWMgY29uc3QgY2hhciAqZ3Bpb19sYWJlbFtHUElPX01BWF07ICAvKiBub24gbnVsbCBmb3IgYWxsb2NhdGVkIEdQSU9zICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBncGlvX3ZhbGlkW0JJVFNfVE9fTE9OR1MoR1BJT19NQVgpXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdwaW9fdmFsaWRfaW5wdXRbQklUU19UT19MT05HUyhHUElPX01BWCldOworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3Bpb192YWxpZF9vdXRwdXRbQklUU19UT19MT05HUyhHUElPX01BWCldOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfZGlyZWN0aW9uKHVuc2lnbmVkIHBpbiwgaW50IGlucHV0KQogewpAQCAtNTMsNyArNTQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7CisJaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkX2lucHV0KSkgewogCQlwcl9kZWJ1ZygiJXM6IGludmFsaWQgR1BJTyAlZFxuIiwgX19mdW5jX18sIHBpbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTgzLDcgKzg0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB1OwogCi0JaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkKSkgeworCWlmIChwaW4gPj0gR1BJT19NQVggfHwgIXRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZF9vdXRwdXQpKSB7CiAJCXByX2RlYnVnKCIlczogaW52YWxpZCBHUElPICVkXG4iLCBfX2Z1bmNfXywgcGluKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTYxLDcgKzE2Miw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCi0JaWYgKHBpbiA+PSBHUElPX01BWCB8fCAhdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkKSkgeworCWlmIChwaW4gPj0gR1BJT19NQVggfHwKKwkgICAgISh0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWRfaW5wdXQpIHx8CisJICAgICAgdGVzdF9iaXQocGluLCBncGlvX3ZhbGlkX291dHB1dCkpKSB7CiAJCXByX2RlYnVnKCIlczogaW52YWxpZCBHUElPICVkXG4iLCBfX2Z1bmNfXywgcGluKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTgzLDcgKzE4Niw5IEBACiAKIHZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIHBpbikKIHsKLQlpZiAocGluID49IEdQSU9fTUFYIHx8ICF0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWQpKSB7CisJaWYgKHBpbiA+PSBHUElPX01BWCB8fAorCSAgICAhKHRlc3RfYml0KHBpbiwgZ3Bpb192YWxpZF9pbnB1dCkgfHwKKwkgICAgICB0ZXN0X2JpdChwaW4sIGdwaW9fdmFsaWRfb3V0cHV0KSkpIHsKIAkJcHJfZGVidWcoIiVzOiBpbnZhbGlkIEdQSU8gJWRcbiIsIF9fZnVuY19fLCBwaW4pOwogCQlyZXR1cm47CiAJfQpAQCAtMjA4LDEyICsyMTMsMTggQEAKIAlfX3NldF9kaXJlY3Rpb24ocGluLCAwKTsKIH0KIAotdm9pZCBfX2luaXQgb3Jpb25fZ3Bpb19zZXRfdmFsaWQodW5zaWduZWQgcGluLCBpbnQgdmFsaWQpCit2b2lkIF9faW5pdCBvcmlvbl9ncGlvX3NldF92YWxpZCh1bnNpZ25lZCBwaW4sIGludCBtb2RlKQogewotCWlmICh2YWxpZCkKLQkJX19zZXRfYml0KHBpbiwgZ3Bpb192YWxpZCk7CisJaWYgKG1vZGUgPT0gMSkKKwkJbW9kZSA9IEdQSU9fSU5QVVRfT0sgfCBHUElPX09VVFBVVF9PSzsKKwlpZiAobW9kZSAmIEdQSU9fSU5QVVRfT0spCisJCV9fc2V0X2JpdChwaW4sIGdwaW9fdmFsaWRfaW5wdXQpOwogCWVsc2UKLQkJX19jbGVhcl9iaXQocGluLCBncGlvX3ZhbGlkKTsKKwkJX19jbGVhcl9iaXQocGluLCBncGlvX3ZhbGlkX2lucHV0KTsKKwlpZiAobW9kZSAmIEdQSU9fT1VUUFVUX09LKQorCQlfX3NldF9iaXQocGluLCBncGlvX3ZhbGlkX291dHB1dCk7CisJZWxzZQorCQlfX2NsZWFyX2JpdChwaW4sIGdwaW9fdmFsaWRfb3V0cHV0KTsKIH0KIAogdm9pZCBvcmlvbl9ncGlvX3NldF9ibGluayh1bnNpZ25lZCBwaW4sIGludCBibGluaykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L2dwaW8uaCBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L2dwaW8uaAppbmRleCBlYzc0M2U4Li4zM2Y2YzZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9ncGlvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvZ3Bpby5oCkBAIC0yNSw5ICsyNSwxMyBAQAogICogT3Jpb24tc3BlY2lmaWMgR1BJTyBBUEkgZXh0ZW5zaW9ucy4KICAqLwogdm9pZCBvcmlvbl9ncGlvX3NldF91bnVzZWQodW5zaWduZWQgcGluKTsKLXZvaWQgb3Jpb25fZ3Bpb19zZXRfdmFsaWQodW5zaWduZWQgcGluLCBpbnQgdmFsaWQpOwogdm9pZCBvcmlvbl9ncGlvX3NldF9ibGluayh1bnNpZ25lZCBwaW4sIGludCBibGluayk7CiAKKyNkZWZpbmUgR1BJT19CSURJX09LCQkoMSA8PCAwKQorI2RlZmluZSBHUElPX0lOUFVUX09LCQkoMSA8PCAxKQorI2RlZmluZSBHUElPX09VVFBVVF9PSwkJKDEgPDwgMikKK3ZvaWQgb3Jpb25fZ3Bpb19zZXRfdmFsaWQodW5zaWduZWQgcGluLCBpbnQgbW9kZSk7CisKIC8qCiAgKiBHUElPIGludGVycnVwdCBoYW5kbGluZy4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvbXZzZGlvLmggYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9tdnNkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGNhODg2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvbXZzZGlvLmgKQEAgLTAsMCArMSwyMSBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L212c2Rpby5oCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX01BQ0hfTVZTRElPX0gKKyNkZWZpbmUgX19NQUNIX01WU0RJT19ICisKKyNpbmNsdWRlIDxsaW51eC9tYnVzLmg+CisKK3N0cnVjdCBtdnNkaW9fcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IG1idXNfZHJhbV90YXJnZXRfaW5mbyAqZHJhbTsKKwl1bnNpZ25lZCBpbnQgY2xvY2s7CisJaW50IGdwaW9fY2FyZF9kZXRlY3Q7CisJaW50IGdwaW9fd3JpdGVfcHJvdGVjdDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vcmlvbi9pbmNsdWRlL3BsYXQvb3Jpb241eF93ZHQuaCBiL2FyY2gvYXJtL3BsYXQtb3Jpb24vaW5jbHVkZS9wbGF0L29yaW9uNXhfd2R0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M5Y2Y2YTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbjV4X3dkdC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LW9yaW9uL2luY2x1ZGUvcGxhdC9vcmlvbjV4X3dkdC5oCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fUExBVF9PUklPTjVYX1dEVF9ICisjZGVmaW5lIF9fUExBVF9PUklPTjVYX1dEVF9ICisKK3N0cnVjdCBvcmlvbjV4X3dkdF9wbGF0Zm9ybV9kYXRhIHsKKwl1MzIJdGNsazsJCS8qIG5vIDxsaW51eC9jbGsuaD4gc3VwcG9ydCB5ZXQgKi8KK307CisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXB4YS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNThlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9LY29uZmlnCkBAIC0wLDAgKzEsMyBAQAoraWYgUExBVF9QWEEKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1weGEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGYyYzRjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorIworIyBNYWtlZmlsZSBmb3IgY29kZSBjb21tb24gYWNyb3NzIGRpZmZlcmVudCBQWEEgcHJvY2Vzc29yIGZhbWlsaWVzCisjCisKK29iai15CTo9IGRtYS5vCisKK29iai0kKENPTkZJR19HRU5FUklDX0dQSU8pCSs9IGdwaW8ubworb2JqLSQoQ09ORklHX1BYQTN4eCkJCSs9IG1mcC5vCitvYmotJChDT05GSUdfQVJDSF9NTVApCQkrPSBtZnAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXB4YS9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGFlZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvZG1hLmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vcGxhdC1weGEvZG1hLmMKKyAqCisgKiAgUFhBIERNQSByZWdpc3RyYXRpb24gYW5kIElSUSBkaXNwYXRjaGluZworICoKKyAqICBBdXRob3I6CU5pY29sYXMgUGl0cmUKKyAqICBDcmVhdGVkOglOb3YgMTUsIDIwMDEKKyAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKworc3RydWN0IGRtYV9jaGFubmVsIHsKKwljaGFyICpuYW1lOworCXB4YV9kbWFfcHJpbyBwcmlvOworCXZvaWQgKCppcnFfaGFuZGxlcikoaW50LCB2b2lkICopOworCXZvaWQgKmRhdGE7Cit9OworCitzdGF0aWMgc3RydWN0IGRtYV9jaGFubmVsICpkbWFfY2hhbm5lbHM7CitzdGF0aWMgaW50IG51bV9kbWFfY2hhbm5lbHM7CisKK2ludCBweGFfcmVxdWVzdF9kbWEgKGNoYXIgKm5hbWUsIHB4YV9kbWFfcHJpbyBwcmlvLAorCQkJdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiksCisJCQl2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIGZvdW5kID0gMDsKKworCS8qIGJhc2ljIHNhbml0eSBjaGVja3MgKi8KKwlpZiAoIW5hbWUgfHwgIWlycV9oYW5kbGVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRvIHsKKwkJLyogdHJ5IGdyYWJiaW5nIGEgRE1BIGNoYW5uZWwgd2l0aCB0aGUgcmVxdWVzdGVkIHByaW9yaXR5ICovCisJCWZvciAoaSA9IDA7IGkgPCBudW1fZG1hX2NoYW5uZWxzOyBpKyspIHsKKwkJCWlmICgoZG1hX2NoYW5uZWxzW2ldLnByaW8gPT0gcHJpbykgJiYKKwkJCSAgICAhZG1hX2NoYW5uZWxzW2ldLm5hbWUpIHsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJLyogaWYgcmVxdWVzdGVkIHByaW8gZ3JvdXAgaXMgZnVsbCwgdHJ5IGEgaGllciBwcmlvcml0eSAqLworCX0gd2hpbGUgKCFmb3VuZCAmJiBwcmlvLS0pOworCisJaWYgKGZvdW5kKSB7CisJCURDU1IoaSkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7CisJCWRtYV9jaGFubmVsc1tpXS5uYW1lID0gbmFtZTsKKwkJZG1hX2NoYW5uZWxzW2ldLmlycV9oYW5kbGVyID0gaXJxX2hhbmRsZXI7CisJCWRtYV9jaGFubmVsc1tpXS5kYXRhID0gZGF0YTsKKwl9IGVsc2UgeworCQlwcmludGsgKEtFUk5fV0FSTklORyAiTm8gbW9yZSBhdmFpbGFibGUgRE1BIGNoYW5uZWxzIGZvciAlc1xuIiwgbmFtZSk7CisJCWkgPSAtRU5PREVWOworCX0KKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gaTsKK30KKwordm9pZCBweGFfZnJlZV9kbWEgKGludCBkbWFfY2gpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghZG1hX2NoYW5uZWxzW2RtYV9jaF0ubmFtZSkgeworCQlwcmludGsgKEtFUk5fQ1JJVAorCQkJIiVzOiB0cnlpbmcgdG8gZnJlZSBjaGFubmVsICVkIHdoaWNoIGlzIGFscmVhZHkgZnJlZWRcbiIsCisJCQlfX2Z1bmNfXywgZG1hX2NoKTsKKwkJcmV0dXJuOworCX0KKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlEQ1NSKGRtYV9jaCkgPSBEQ1NSX1NUQVJUSU5UUnxEQ1NSX0VORElOVFJ8RENTUl9CVVNFUlI7CisJZG1hX2NoYW5uZWxzW2RtYV9jaF0ubmFtZSA9IE5VTEw7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlpbnQgaSwgZGludCA9IERJTlQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2RtYV9jaGFubmVsczsgaSsrKSB7CisJCWlmIChkaW50ICYgKDEgPDwgaSkpIHsKKwkJCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9ICZkbWFfY2hhbm5lbHNbaV07CisJCQlpZiAoY2hhbm5lbC0+bmFtZSAmJiBjaGFubmVsLT5pcnFfaGFuZGxlcikgeworCQkJCWNoYW5uZWwtPmlycV9oYW5kbGVyKGksIGNoYW5uZWwtPmRhdGEpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElSUSBmb3IgYW4gdW5yZWdpc3RlcmVkIERNQSBjaGFubmVsOgorCQkJCSAqIGxldCdzIGNsZWFyIHRoZSBpbnRlcnJ1cHRzIGFuZCBkaXNhYmxlIGl0LgorCQkJCSAqLworCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJzcHVyaW91cyBJUlEgZm9yIERNQSBjaGFubmVsICVkXG4iLCBpKTsKKwkJCQlEQ1NSKGkpID0gRENTUl9TVEFSVElOVFJ8RENTUl9FTkRJTlRSfERDU1JfQlVTRVJSOworCQkJfQorCQl9CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworaW50IF9faW5pdCBweGFfaW5pdF9kbWEoaW50IGlycSwgaW50IG51bV9jaCkKK3sKKwlpbnQgaSwgcmV0OworCisJZG1hX2NoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRtYV9jaGFubmVsKSAqIG51bV9jaCwgR0ZQX0tFUk5FTCk7CisJaWYgKGRtYV9jaGFubmVscyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIGRtYSBjaGFubmVsIHByaW9yaXRpZXMgb24gcHhhMnh4IHByb2Nlc3NvcnM6CisJICogY2ggMCAtIDMsICAxNiAtIDE5ICA8LS0+ICgwKSBETUFfUFJJT19ISUdICisJICogY2ggNCAtIDcsICAyMCAtIDIzICA8LS0+ICgxKSBETUFfUFJJT19NRURJVU0KKwkgKiBjaCA4IC0gMTUsIDI0IC0gMzEgIDwtLT4gKDIpIERNQV9QUklPX0xPVworCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fY2g7IGkrKykgeworCQlEQ1NSKGkpID0gMDsKKwkJZG1hX2NoYW5uZWxzW2ldLnByaW8gPSBtaW4oKGkgJiAweGYpID4+IDIsIERNQV9QUklPX0xPVyk7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBkbWFfaXJxX2hhbmRsZXIsIElSUUZfRElTQUJMRUQsICJETUEiLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayAoS0VSTl9DUklUICJXb3chICBDYW4ndCByZWdpc3RlciBJUlEgZm9yIERNQVxuIik7CisJCWtmcmVlKGRtYV9jaGFubmVscyk7CisJCXJldHVybiByZXQ7CisJfQorCisJbnVtX2RtYV9jaGFubmVscyA9IG51bV9jaDsKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTChweGFfcmVxdWVzdF9kbWEpOworRVhQT1JUX1NZTUJPTChweGFfZnJlZV9kbWEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1weGEvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmODE5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9ncGlvLmMKQEAgLTAsMCArMSwzMzcgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vcGxhdC1weGEvZ3Bpby5jCisgKgorICogIEdlbmVyaWMgUFhBIEdQSU8gaGFuZGxpbmcKKyAqCisgKiAgQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiAgQ3JlYXRlZDoJSnVuIDE1LCAyMDAxCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisKKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKworaW50IHB4YV9sYXN0X2dwaW87CisKK3N0cnVjdCBweGFfZ3Bpb19jaGlwIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CisJdm9pZCBfX2lvbWVtCSpyZWdiYXNlOworCWNoYXIgbGFiZWxbMTBdOworCisJdW5zaWduZWQgbG9uZwlpcnFfbWFzazsKKwl1bnNpZ25lZCBsb25nCWlycV9lZGdlX3Jpc2U7CisJdW5zaWduZWQgbG9uZwlpcnFfZWRnZV9mYWxsOworCisjaWZkZWYgQ09ORklHX1BNCisJdW5zaWduZWQgbG9uZwlzYXZlZF9ncGxyOworCXVuc2lnbmVkIGxvbmcJc2F2ZWRfZ3BkcjsKKwl1bnNpZ25lZCBsb25nCXNhdmVkX2dyZXI7CisJdW5zaWduZWQgbG9uZwlzYXZlZF9nZmVyOworI2VuZGlmCit9OworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbG9jayk7CitzdGF0aWMgc3RydWN0IHB4YV9ncGlvX2NoaXAgKnB4YV9ncGlvX2NoaXBzOworCisjZGVmaW5lIGZvcl9lYWNoX2dwaW9fY2hpcChpLCBjKQkJCVwKKwlmb3IgKGkgPSAwLCBjID0gJnB4YV9ncGlvX2NoaXBzWzBdOyBpIDw9IHB4YV9sYXN0X2dwaW87IGkgKz0gMzIsIGMrKykKKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKmdwaW9fY2hpcF9iYXNlKHN0cnVjdCBncGlvX2NoaXAgKmMpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjLCBzdHJ1Y3QgcHhhX2dwaW9fY2hpcCwgY2hpcCktPnJlZ2Jhc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHB4YV9ncGlvX2NoaXAgKmdwaW9fdG9fY2hpcCh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiAmcHhhX2dwaW9fY2hpcHNbZ3Bpb190b19iYW5rKGdwaW8pXTsKK30KKworc3RhdGljIGludCBweGFfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGdwaW9fY2hpcF9iYXNlKGNoaXApOworCXVpbnQzMl90IHZhbHVlLCBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKKworCXZhbHVlID0gX19yYXdfcmVhZGwoYmFzZSArIEdQRFJfT0ZGU0VUKTsKKwlpZiAoX19ncGlvX2lzX2ludmVydGVkKGNoaXAtPmJhc2UgKyBvZmZzZXQpKQorCQl2YWx1ZSB8PSBtYXNrOworCWVsc2UKKwkJdmFsdWUgJj0gfm1hc2s7CisJX19yYXdfd3JpdGVsKHZhbHVlLCBiYXNlICsgR1BEUl9PRkZTRVQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gZ3Bpb19jaGlwX2Jhc2UoY2hpcCk7CisJdWludDMyX3QgdG1wLCBtYXNrID0gMSA8PCBvZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCV9fcmF3X3dyaXRlbChtYXNrLCBiYXNlICsgKHZhbHVlID8gR1BTUl9PRkZTRVQgOiBHUENSX09GRlNFVCkpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCisJdG1wID0gX19yYXdfcmVhZGwoYmFzZSArIEdQRFJfT0ZGU0VUKTsKKwlpZiAoX19ncGlvX2lzX2ludmVydGVkKGNoaXAtPmJhc2UgKyBvZmZzZXQpKQorCQl0bXAgJj0gfm1hc2s7CisJZWxzZQorCQl0bXAgfD0gbWFzazsKKwlfX3Jhd193cml0ZWwodG1wLCBiYXNlICsgR1BEUl9PRkZTRVQpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwoZ3Bpb19jaGlwX2Jhc2UoY2hpcCkgKyBHUExSX09GRlNFVCkgJiAoMSA8PCBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBweGFfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJX19yYXdfd3JpdGVsKDEgPDwgb2Zmc2V0LCBncGlvX2NoaXBfYmFzZShjaGlwKSArCisJCQkJKHZhbHVlID8gR1BTUl9PRkZTRVQgOiBHUENSX09GRlNFVCkpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBweGFfaW5pdF9ncGlvX2NoaXAoaW50IGdwaW9fZW5kKQoreworCWludCBpLCBncGlvLCBuYmFua3MgPSBncGlvX3RvX2JhbmsoZ3Bpb19lbmQpICsgMTsKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqY2hpcHM7CisKKwkvKiB0aGlzIGlzIGVhcmx5LCB3ZSBoYXZlIHRvIHVzZSBib290bWVtIGFsbG9jYXRvciwgYW5kIHdlIHJlYWxseQorCSAqIHdhbnQgdGhpcyB0byBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgZm9yIGRpZmZlcmVudCAnZ3Bpb19lbmQnCisJICovCisJY2hpcHMgPSBhbGxvY19ib290bWVtX2xvdyhuYmFua3MgKiBzaXplb2Yoc3RydWN0IHB4YV9ncGlvX2NoaXApKTsKKwlpZiAoY2hpcHMgPT0gTlVMTCkgeworCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgR1BJTyBjaGlwc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3IgKGkgPSAwLCBncGlvID0gMDsgaSA8IG5iYW5rczsgaSsrLCBncGlvICs9IDMyKSB7CisJCXN0cnVjdCBncGlvX2NoaXAgKmMgPSAmY2hpcHNbaV0uY2hpcDsKKworCQlzcHJpbnRmKGNoaXBzW2ldLmxhYmVsLCAiZ3Bpby0lZCIsIGkpOworCQljaGlwc1tpXS5yZWdiYXNlID0gKHZvaWQgX19pb21lbSAqKUdQSU9fQkFOSyhpKTsKKworCQljLT5iYXNlICA9IGdwaW87CisJCWMtPmxhYmVsID0gY2hpcHNbaV0ubGFiZWw7CisKKwkJYy0+ZGlyZWN0aW9uX2lucHV0ICA9IHB4YV9ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwkJYy0+ZGlyZWN0aW9uX291dHB1dCA9IHB4YV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CisJCWMtPmdldCA9IHB4YV9ncGlvX2dldDsKKwkJYy0+c2V0ID0gcHhhX2dwaW9fc2V0OworCisJCS8qIG51bWJlciBvZiBHUElPcyBvbiBsYXN0IGJhbmsgbWF5IGJlIGxlc3MgdGhhbiAzMiAqLworCQljLT5uZ3BpbyA9IChncGlvICsgMzEgPiBncGlvX2VuZCkgPyAoZ3Bpb19lbmQgLSBncGlvICsgMSkgOiAzMjsKKwkJZ3Bpb2NoaXBfYWRkKGMpOworCX0KKwlweGFfZ3Bpb19jaGlwcyA9IGNoaXBzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB4YV9ncGlvX2lycV90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpjOworCWludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1bnNpZ25lZCBsb25nIGdwZHIsIG1hc2sgPSBHUElPX2JpdChncGlvKTsKKworCWMgPSBncGlvX3RvX2NoaXAoZ3Bpbyk7CisKKwlpZiAodHlwZSA9PSBJUlFfVFlQRV9QUk9CRSkgeworCQkvKiBEb24ndCBtZXNzIHdpdGggZW5hYmxlZCBHUElPcyB1c2luZyBwcmVjb25maWd1cmVkIGVkZ2VzIG9yCisJCSAqIEdQSU9zIHNldCB0byBhbHRlcm5hdGUgZnVuY3Rpb24gb3IgdG8gb3V0cHV0IGR1cmluZyBwcm9iZQorCQkgKi8KKwkJaWYgKChjLT5pcnFfZWRnZV9yaXNlIHwgYy0+aXJxX2VkZ2VfZmFsbCkgJiBHUElPX2JpdChncGlvKSkKKwkJCXJldHVybiAwOworCisJCWlmIChfX2dwaW9faXNfb2NjdXBpZWQoZ3BpbykpCisJCQlyZXR1cm4gMDsKKworCQl0eXBlID0gSVJRX1RZUEVfRURHRV9SSVNJTkcgfCBJUlFfVFlQRV9FREdFX0ZBTExJTkc7CisJfQorCisJZ3BkciA9IF9fcmF3X3JlYWRsKGMtPnJlZ2Jhc2UgKyBHUERSX09GRlNFVCk7CisKKwlpZiAoX19ncGlvX2lzX2ludmVydGVkKGdwaW8pKQorCQlfX3Jhd193cml0ZWwoZ3BkciB8IG1hc2ssICBjLT5yZWdiYXNlICsgR1BEUl9PRkZTRVQpOworCWVsc2UKKwkJX19yYXdfd3JpdGVsKGdwZHIgJiB+bWFzaywgYy0+cmVnYmFzZSArIEdQRFJfT0ZGU0VUKTsKKworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCisJCWMtPmlycV9lZGdlX3Jpc2UgfD0gbWFzazsKKwllbHNlCisJCWMtPmlycV9lZGdlX3Jpc2UgJj0gfm1hc2s7CisKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJYy0+aXJxX2VkZ2VfZmFsbCB8PSBtYXNrOworCWVsc2UKKwkJYy0+aXJxX2VkZ2VfZmFsbCAmPSB+bWFzazsKKworCV9fcmF3X3dyaXRlbChjLT5pcnFfZWRnZV9yaXNlICYgYy0+aXJxX21hc2ssIGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCk7CisJX19yYXdfd3JpdGVsKGMtPmlycV9lZGdlX2ZhbGwgJiBjLT5pcnFfbWFzaywgYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKTsKKworCXByX2RlYnVnKCIlczogSVJRJWQgKEdQSU8lZCkgLSBlZGdlJXMlc1xuIiwgX19mdW5jX18sIGlycSwgZ3BpbywKKwkJKCh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpICA/ICIgcmlzaW5nIiAgOiAiIiksCisJCSgodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykgPyAiIGZhbGxpbmciIDogIiIpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IHB4YV9ncGlvX2NoaXAgKmM7CisJaW50IGxvb3AsIGdwaW8sIGdwaW9fYmFzZSwgbjsKKwl1bnNpZ25lZCBsb25nIGdlZHI7CisKKwlkbyB7CisJCWxvb3AgPSAwOworCQlmb3JfZWFjaF9ncGlvX2NoaXAoZ3BpbywgYykgeworCQkJZ3Bpb19iYXNlID0gYy0+Y2hpcC5iYXNlOworCisJCQlnZWRyID0gX19yYXdfcmVhZGwoYy0+cmVnYmFzZSArIEdFRFJfT0ZGU0VUKTsKKwkJCWdlZHIgPSBnZWRyICYgYy0+aXJxX21hc2s7CisJCQlfX3Jhd193cml0ZWwoZ2VkciwgYy0+cmVnYmFzZSArIEdFRFJfT0ZGU0VUKTsKKworCQkJbiA9IGZpbmRfZmlyc3RfYml0KCZnZWRyLCBCSVRTX1BFUl9MT05HKTsKKwkJCXdoaWxlIChuIDwgQklUU19QRVJfTE9ORykgeworCQkJCWxvb3AgPSAxOworCisJCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9fdG9faXJxKGdwaW9fYmFzZSArIG4pKTsKKwkJCQluID0gZmluZF9uZXh0X2JpdCgmZ2VkciwgQklUU19QRVJfTE9ORywgbiArIDEpOworCQkJfQorCQl9CisJfSB3aGlsZSAobG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV9hY2tfbXV4ZWRfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYyA9IGdwaW9fdG9fY2hpcChncGlvKTsKKworCV9fcmF3X3dyaXRlbChHUElPX2JpdChncGlvKSwgYy0+cmVnYmFzZSArIEdFRFJfT0ZGU0VUKTsKK30KKworc3RhdGljIHZvaWQgcHhhX21hc2tfbXV4ZWRfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYyA9IGdwaW9fdG9fY2hpcChncGlvKTsKKwl1aW50MzJfdCBncmVyLCBnZmVyOworCisJYy0+aXJxX21hc2sgJj0gfkdQSU9fYml0KGdwaW8pOworCisJZ3JlciA9IF9fcmF3X3JlYWRsKGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCkgJiB+R1BJT19iaXQoZ3Bpbyk7CisJZ2ZlciA9IF9fcmF3X3JlYWRsKGMtPnJlZ2Jhc2UgKyBHRkVSX09GRlNFVCkgJiB+R1BJT19iaXQoZ3Bpbyk7CisJX19yYXdfd3JpdGVsKGdyZXIsIGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCk7CisJX19yYXdfd3JpdGVsKGdmZXIsIGMtPnJlZ2Jhc2UgKyBHRkVSX09GRlNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIHB4YV91bm1hc2tfbXV4ZWRfZ3Bpbyh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYyA9IGdwaW9fdG9fY2hpcChncGlvKTsKKworCWMtPmlycV9tYXNrIHw9IEdQSU9fYml0KGdwaW8pOworCV9fcmF3X3dyaXRlbChjLT5pcnFfZWRnZV9yaXNlICYgYy0+aXJxX21hc2ssIGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCk7CisJX19yYXdfd3JpdGVsKGMtPmlycV9lZGdlX2ZhbGwgJiBjLT5pcnFfbWFzaywgYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweGFfbXV4ZWRfZ3Bpb19jaGlwID0geworCS5uYW1lCQk9ICJHUElPIiwKKwkuYWNrCQk9IHB4YV9hY2tfbXV4ZWRfZ3BpbywKKwkubWFzawkJPSBweGFfbWFza19tdXhlZF9ncGlvLAorCS51bm1hc2sJCT0gcHhhX3VubWFza19tdXhlZF9ncGlvLAorCS5zZXRfdHlwZQk9IHB4YV9ncGlvX2lycV90eXBlLAorfTsKKwordm9pZCBfX2luaXQgcHhhX2luaXRfZ3BpbyhpbnQgbXV4X2lycSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBzZXRfd2FrZV90IGZuKQoreworCXN0cnVjdCBweGFfZ3Bpb19jaGlwICpjOworCWludCBncGlvLCBpcnE7CisKKwlweGFfbGFzdF9ncGlvID0gZW5kOworCisJLyogSW5pdGlhbGl6ZSBHUElPIGNoaXBzICovCisJcHhhX2luaXRfZ3Bpb19jaGlwKGVuZCk7CisKKwkvKiBjbGVhciBhbGwgR1BJTyBlZGdlIGRldGVjdHMgKi8KKwlmb3JfZWFjaF9ncGlvX2NoaXAoZ3BpbywgYykgeworCQlfX3Jhd193cml0ZWwoMCwgYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKTsKKwkJX19yYXdfd3JpdGVsKDAsIGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCk7CisJCV9fcmF3X3dyaXRlbCh+MCxjLT5yZWdiYXNlICsgR0VEUl9PRkZTRVQpOworCX0KKworCWZvciAoaXJxICA9IGdwaW9fdG9faXJxKHN0YXJ0KTsgaXJxIDw9IGdwaW9fdG9faXJxKGVuZCk7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZweGFfbXV4ZWRfZ3Bpb19jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwl9CisKKwkvKiBJbnN0YWxsIGhhbmRsZXIgZm9yIEdQSU8+PTIgZWRnZSBkZXRlY3QgaW50ZXJydXB0cyAqLworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKG11eF9pcnEsIHB4YV9ncGlvX2RlbXV4X2hhbmRsZXIpOworCXB4YV9tdXhlZF9ncGlvX2NoaXAuc2V0X3dha2UgPSBmbjsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBweGFfZ3Bpb19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYzsKKwlpbnQgZ3BpbzsKKworCWZvcl9lYWNoX2dwaW9fY2hpcChncGlvLCBjKSB7CisJCWMtPnNhdmVkX2dwbHIgPSBfX3Jhd19yZWFkbChjLT5yZWdiYXNlICsgR1BMUl9PRkZTRVQpOworCQljLT5zYXZlZF9ncGRyID0gX19yYXdfcmVhZGwoYy0+cmVnYmFzZSArIEdQRFJfT0ZGU0VUKTsKKwkJYy0+c2F2ZWRfZ3JlciA9IF9fcmF3X3JlYWRsKGMtPnJlZ2Jhc2UgKyBHUkVSX09GRlNFVCk7CisJCWMtPnNhdmVkX2dmZXIgPSBfX3Jhd19yZWFkbChjLT5yZWdiYXNlICsgR0ZFUl9PRkZTRVQpOworCisJCS8qIENsZWFyIEdQSU8gdHJhbnNpdGlvbiBkZXRlY3QgYml0cyAqLworCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYy0+cmVnYmFzZSArIEdFRFJfT0ZGU0VUKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHhhX2dwaW9fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHB4YV9ncGlvX2NoaXAgKmM7CisJaW50IGdwaW87CisKKwlmb3JfZWFjaF9ncGlvX2NoaXAoZ3BpbywgYykgeworCQkvKiByZXN0b3JlIGxldmVsIHdpdGggc2V0L2NsZWFyICovCisJCV9fcmF3X3dyaXRlbCggYy0+c2F2ZWRfZ3BsciwgYy0+cmVnYmFzZSArIEdQU1JfT0ZGU0VUKTsKKwkJX19yYXdfd3JpdGVsKH5jLT5zYXZlZF9ncGxyLCBjLT5yZWdiYXNlICsgR1BDUl9PRkZTRVQpOworCisJCV9fcmF3X3dyaXRlbChjLT5zYXZlZF9ncmVyLCBjLT5yZWdiYXNlICsgR1JFUl9PRkZTRVQpOworCQlfX3Jhd193cml0ZWwoYy0+c2F2ZWRfZ2ZlciwgYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKTsKKwkJX19yYXdfd3JpdGVsKGMtPnNhdmVkX2dwZHIsIGMtPnJlZ2Jhc2UgKyBHUERSX09GRlNFVCk7CisJfQorCXJldHVybiAwOworfQorI2Vsc2UKKyNkZWZpbmUgcHhhX2dwaW9fc3VzcGVuZAlOVUxMCisjZGVmaW5lIHB4YV9ncGlvX3Jlc3VtZQkJTlVMTAorI2VuZGlmCisKK3N0cnVjdCBzeXNkZXZfY2xhc3MgcHhhX2dwaW9fc3lzY2xhc3MgPSB7CisJLm5hbWUJCT0gImdwaW8iLAorCS5zdXNwZW5kCT0gcHhhX2dwaW9fc3VzcGVuZCwKKwkucmVzdW1lCQk9IHB4YV9ncGlvX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHB4YV9ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGFfZ3Bpb19zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwocHhhX2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvZG1hLmggYi9hcmNoL2FybS9wbGF0LXB4YS9pbmNsdWRlL3BsYXQvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdiOTFkYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9kbWEuaApAQCAtMCwwICsxLDg1IEBACisjaWZuZGVmIF9fUExBVF9ETUFfSAorI2RlZmluZSBfX1BMQVRfRE1BX0gKKworI2RlZmluZSBETUFDX1JFRyh4KQkoKigodm9sYXRpbGUgdTMyICopKERNQUNfUkVHU19WSVJUICsgKHgpKSkpCisKKyNkZWZpbmUgRENTUihuKQkJRE1BQ19SRUcoKG4pIDw8IDIpCisjZGVmaW5lIERBTEdOCQlETUFDX1JFRygweDAwYTApICAvKiBETUEgQWxpZ25tZW50IFJlZ2lzdGVyICovCisjZGVmaW5lIERJTlQJCURNQUNfUkVHKDB4MDBmMCkgIC8qIERNQSBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRERBRFIobikJRE1BQ19SRUcoMHgwMjAwICsgKChuKSA8PCA0KSkKKyNkZWZpbmUgRFNBRFIobikJRE1BQ19SRUcoMHgwMjA0ICsgKChuKSA8PCA0KSkKKyNkZWZpbmUgRFRBRFIobikJRE1BQ19SRUcoMHgwMjA4ICsgKChuKSA8PCA0KSkKKyNkZWZpbmUgRENNRChuKQkJRE1BQ19SRUcoMHgwMjBjICsgKChuKSA8PCA0KSkKKyNkZWZpbmUgRFJDTVIobikJRE1BQ19SRUcoKCgobikgPCA2NCkgPyAweDAxMDAgOiAweDExMDApICsgXAorCQkJCSAoKChuKSAmIDB4M2YpIDw8IDIpKQorCisjZGVmaW5lIERDU1JfUlVOCSgxIDw8IDMxKQkvKiBSdW4gQml0IChyZWFkIC8gd3JpdGUpICovCisjZGVmaW5lIERDU1JfTk9ERVNDCSgxIDw8IDMwKQkvKiBOby1EZXNjcmlwdG9yIEZldGNoIChyZWFkIC8gd3JpdGUpICovCisjZGVmaW5lIERDU1JfU1RPUElSUUVOCSgxIDw8IDI5KQkvKiBTdG9wIEludGVycnVwdCBFbmFibGUgKHJlYWQgLyB3cml0ZSkgKi8KKyNkZWZpbmUgRENTUl9SRVFQRU5ECSgxIDw8IDgpCS8qIFJlcXVlc3QgUGVuZGluZyAocmVhZC1vbmx5KSAqLworI2RlZmluZSBEQ1NSX1NUT1BTVEFURQkoMSA8PCAzKQkvKiBTdG9wIFN0YXRlIChyZWFkLW9ubHkpICovCisjZGVmaW5lIERDU1JfRU5ESU5UUgkoMSA8PCAyKQkvKiBFbmQgSW50ZXJydXB0IChyZWFkIC8gd3JpdGUpICovCisjZGVmaW5lIERDU1JfU1RBUlRJTlRSCSgxIDw8IDEpCS8qIFN0YXJ0IEludGVycnVwdCAocmVhZCAvIHdyaXRlKSAqLworI2RlZmluZSBEQ1NSX0JVU0VSUgkoMSA8PCAwKQkvKiBCdXMgRXJyb3IgSW50ZXJydXB0IChyZWFkIC8gd3JpdGUpICovCisKKyNkZWZpbmUgRENTUl9FT1JJUlFFTgkoMSA8PCAyOCkgICAgICAgLyogRW5kIG9mIFJlY2VpdmUgSW50ZXJydXB0IEVuYWJsZSAoUi9XKSAqLworI2RlZmluZSBEQ1NSX0VPUkpNUEVOCSgxIDw8IDI3KSAgICAgICAvKiBKdW1wIHRvIG5leHQgZGVzY3JpcHRvciBvbiBFT1IgKi8KKyNkZWZpbmUgRENTUl9FT1JTVE9QRU4JKDEgPDwgMjYpICAgICAgIC8qIFNUT1Agb24gYW4gRU9SICovCisjZGVmaW5lIERDU1JfU0VUQ01QU1QJKDEgPDwgMjUpICAgICAgIC8qIFNldCBEZXNjcmlwdG9yIENvbXBhcmUgU3RhdHVzICovCisjZGVmaW5lIERDU1JfQ0xSQ01QU1QJKDEgPDwgMjQpICAgICAgIC8qIENsZWFyIERlc2NyaXB0b3IgQ29tcGFyZSBTdGF0dXMgKi8KKyNkZWZpbmUgRENTUl9DTVBTVAkoMSA8PCAxMCkgICAgICAgLyogVGhlIERlc2NyaXB0b3IgQ29tcGFyZSBTdGF0dXMgKi8KKyNkZWZpbmUgRENTUl9FT1JJTlRSCSgxIDw8IDkpICAgICAgICAvKiBUaGUgZW5kIG9mIFJlY2VpdmUgKi8KKworI2RlZmluZSBEUkNNUl9NQVBWTEQJKDEgPDwgNykJLyogTWFwIFZhbGlkIChyZWFkIC8gd3JpdGUpICovCisjZGVmaW5lIERSQ01SX0NITE5VTQkweDFmCQkvKiBtYXNrIGZvciBDaGFubmVsIE51bWJlciAocmVhZCAvIHdyaXRlKSAqLworCisjZGVmaW5lIEREQURSX0RFU0NBRERSCTB4ZmZmZmZmZjAJLyogQWRkcmVzcyBvZiBuZXh0IGRlc2NyaXB0b3IgKG1hc2spICovCisjZGVmaW5lIEREQURSX1NUT1AJKDEgPDwgMCkJLyogU3RvcCAocmVhZCAvIHdyaXRlKSAqLworCisjZGVmaW5lIERDTURfSU5DU1JDQUREUgkoMSA8PCAzMSkJLyogU291cmNlIEFkZHJlc3MgSW5jcmVtZW50IFNldHRpbmcuICovCisjZGVmaW5lIERDTURfSU5DVFJHQUREUgkoMSA8PCAzMCkJLyogVGFyZ2V0IEFkZHJlc3MgSW5jcmVtZW50IFNldHRpbmcuICovCisjZGVmaW5lIERDTURfRkxPV1NSQwkoMSA8PCAyOSkJLyogRmxvdyBDb250cm9sIGJ5IHRoZSBzb3VyY2UuICovCisjZGVmaW5lIERDTURfRkxPV1RSRwkoMSA8PCAyOCkJLyogRmxvdyBDb250cm9sIGJ5IHRoZSB0YXJnZXQuICovCisjZGVmaW5lIERDTURfU1RBUlRJUlFFTgkoMSA8PCAyMikJLyogU3RhcnQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBEQ01EX0VORElSUUVOCSgxIDw8IDIxKQkvKiBFbmQgSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBEQ01EX0VORElBTgkoMSA8PCAxOCkJLyogRGV2aWNlIEVuZGlhbi1uZXNzLiAqLworI2RlZmluZSBEQ01EX0JVUlNUOAkoMSA8PCAxNikJLyogOCBieXRlIGJ1cnN0ICovCisjZGVmaW5lIERDTURfQlVSU1QxNgkoMiA8PCAxNikJLyogMTYgYnl0ZSBidXJzdCAqLworI2RlZmluZSBEQ01EX0JVUlNUMzIJKDMgPDwgMTYpCS8qIDMyIGJ5dGUgYnVyc3QgKi8KKyNkZWZpbmUgRENNRF9XSURUSDEJKDEgPDwgMTQpCS8qIDEgYnl0ZSB3aWR0aCAqLworI2RlZmluZSBEQ01EX1dJRFRIMgkoMiA8PCAxNCkJLyogMiBieXRlIHdpZHRoIChIYWxmV29yZCkgKi8KKyNkZWZpbmUgRENNRF9XSURUSDQJKDMgPDwgMTQpCS8qIDQgYnl0ZSB3aWR0aCAoV29yZCkgKi8KKyNkZWZpbmUgRENNRF9MRU5HVEgJMHgwMWZmZgkJLyogbGVuZ3RoIG1hc2sgKG1heCA9IDhLIC0gMSkgKi8KKworLyoKKyAqIERlc2NyaXB0b3Igc3RydWN0dXJlIGZvciBQWEEncyBETUEgZW5naW5lCisgKiBOb3RlOiB0aGlzIHN0cnVjdHVyZSBtdXN0IGFsd2F5cyBiZSBhbGlnbmVkIHRvIGEgMTYtYnl0ZSBib3VuZGFyeS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBweGFfZG1hX2Rlc2MgeworCXZvbGF0aWxlIHUzMiBkZGFkcjsJLyogUG9pbnRzIHRvIHRoZSBuZXh0IGRlc2NyaXB0b3IgKyBmbGFncyAqLworCXZvbGF0aWxlIHUzMiBkc2FkcjsJLyogRFNBRFIgdmFsdWUgZm9yIHRoZSBjdXJyZW50IHRyYW5zZmVyICovCisJdm9sYXRpbGUgdTMyIGR0YWRyOwkvKiBEVEFEUiB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNmZXIgKi8KKwl2b2xhdGlsZSB1MzIgZGNtZDsJLyogRENNRCB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgdHJhbnNmZXIgKi8KK30gcHhhX2RtYV9kZXNjOworCit0eXBlZGVmIGVudW0geworCURNQV9QUklPX0hJR0ggPSAwLAorCURNQV9QUklPX01FRElVTSA9IDEsCisJRE1BX1BSSU9fTE9XID0gMgorfSBweGFfZG1hX3ByaW87CisKKy8qCisgKiBETUEgcmVnaXN0cmF0aW9uCisgKi8KKworaW50IF9faW5pdCBweGFfaW5pdF9kbWEoaW50IGlycSwgaW50IG51bV9jaCk7CisKK2ludCBweGFfcmVxdWVzdF9kbWEgKGNoYXIgKm5hbWUsCisJCQkgcHhhX2RtYV9wcmlvIHByaW8sCisJCQkgdm9pZCAoKmlycV9oYW5kbGVyKShpbnQsIHZvaWQgKiksCisJCQkgdm9pZCAqZGF0YSk7CisKK3ZvaWQgcHhhX2ZyZWVfZG1hIChpbnQgZG1hX2NoKTsKKworI2VuZGlmIC8qIF9fUExBVF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L2dwaW8uaCBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQyNDhjYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9ncGlvLmgKQEAgLTAsMCArMSw2MiBAQAorI2lmbmRlZiBfX1BMQVRfR1BJT19ICisjZGVmaW5lIF9fUExBVF9HUElPX0gKKworLyoKKyAqIFdlIGhhbmRsZSB0aGUgR1BJT3MgYnkgYmFua3MsIGVhY2ggYmFuayBjb3ZlcnMgdXAgdG8gMzIgR1BJT3Mgd2l0aAorICogb25lIHNldCBvZiByZWdpc3RlcnMuIFRoZSByZWdpc3RlciBvZmZzZXRzIGFyZSBvcmdhbml6ZWQgYmVsb3c6CisgKgorICogICAgICAgICAgIEdQTFIgICAgR1BEUiAgICBHUFNSICAgIEdQQ1IgICAgR1JFUiAgICBHRkVSICAgIEdFRFIKKyAqIEJBTksgMCAtIDB4MDAwMCAgMHgwMDBDICAweDAwMTggIDB4MDAyNCAgMHgwMDMwICAweDAwM0MgIDB4MDA0OAorICogQkFOSyAxIC0gMHgwMDA0ICAweDAwMTAgIDB4MDAxQyAgMHgwMDI4ICAweDAwMzQgIDB4MDA0MCAgMHgwMDRDCisgKiBCQU5LIDIgLSAweDAwMDggIDB4MDAxNCAgMHgwMDIwICAweDAwMkMgIDB4MDAzOCAgMHgwMDQ0ICAweDAwNTAKKyAqCisgKiBCQU5LIDMgLSAweDAxMDAgIDB4MDEwQyAgMHgwMTE4ICAweDAxMjQgIDB4MDEzMCAgMHgwMTNDICAweDAxNDgKKyAqIEJBTksgNCAtIDB4MDEwNCAgMHgwMTEwICAweDAxMUMgIDB4MDEyOCAgMHgwMTM0ICAweDAxNDAgIDB4MDE0QworICogQkFOSyA1IC0gMHgwMTA4ICAweDAxMTQgIDB4MDEyMCAgMHgwMTJDICAweDAxMzggIDB4MDE0NCAgMHgwMTUwCisgKgorICogTk9URToKKyAqICAgQkFOSyAzIGlzIG9ubHkgYXZhaWxhYmxlIG9uIFBYQTI3eCBhbmQgbGF0ZXIgcHJvY2Vzc29ycy4KKyAqICAgQkFOSyA0IGFuZCA1IGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBQWEE5MzUKKyAqLworCisjZGVmaW5lIEdQSU9fQkFOSyhuKQkoR1BJT19SRUdTX1ZJUlQgKyBCQU5LX09GRihuKSkKKworI2RlZmluZSBHUExSX09GRlNFVAkweDAwCisjZGVmaW5lIEdQRFJfT0ZGU0VUCTB4MEMKKyNkZWZpbmUgR1BTUl9PRkZTRVQJMHgxOAorI2RlZmluZSBHUENSX09GRlNFVAkweDI0CisjZGVmaW5lIEdSRVJfT0ZGU0VUCTB4MzAKKyNkZWZpbmUgR0ZFUl9PRkZTRVQJMHgzQworI2RlZmluZSBHRURSX09GRlNFVAkweDQ4CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCit7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGdwaW8pICYmIChncGlvIDwgTlJfQlVJTFRJTl9HUElPKSkKKwkJcmV0dXJuIEdQTFIoZ3BpbykgJiBHUElPX2JpdChncGlvKTsKKwllbHNlCisJCXJldHVybiBfX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChncGlvKSAmJiAoZ3BpbyA8IE5SX0JVSUxUSU5fR1BJTykpIHsKKwkJaWYgKHZhbHVlKQorCQkJR1BTUihncGlvKSA9IEdQSU9fYml0KGdwaW8pOworCQllbHNlCisJCQlHUENSKGdwaW8pID0gR1BJT19iaXQoZ3Bpbyk7CisJfSBlbHNlCisJCV9fZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworfQorCisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJCV9fZ3Bpb19jYW5zbGVlcAorCisvKiBOT1RFOiBzb21lIFBYQXMgaGF2ZSBmZXdlciBvbi1jaGlwIEdQSU9zIChsaWtlIFBYQTI1NSwgd2l0aCA4NSkuCisgKiBUaG9zZSBjYXNlcyBjdXJyZW50bHkgY2F1c2UgaG9sZXMgaW4gdGhlIEdQSU8gbnVtYmVyIHNwYWNlLCB0aGUKKyAqIGFjdHVhbCBudW1iZXIgb2YgdGhlIGxhc3QgR1BJTyBpcyByZWNvcmRlZCBieSAncHhhX2xhc3RfZ3BpbycuCisgKi8KK2V4dGVybiBpbnQgcHhhX2xhc3RfZ3BpbzsKKwordHlwZWRlZiBpbnQgKCpzZXRfd2FrZV90KSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pOworCitleHRlcm4gdm9pZCBweGFfaW5pdF9ncGlvKGludCBtdXhfaXJxLCBpbnQgc3RhcnQsIGludCBlbmQsIHNldF93YWtlX3QgZm4pOworI2VuZGlmIC8qIF9fUExBVF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaCBiL2FyY2gvYXJtL3BsYXQtcHhhL2luY2x1ZGUvcGxhdC9tZnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDAxOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogYXJjaC9hcm0vcGxhdC1weGEvaW5jbHVkZS9wbGF0L21mcC5oCisgKgorICogICBDb21tb24gTXVsdGktRnVuY3Rpb24gUGluIERlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogMjAwNy04LTIxOiBlcmljIG1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4KKyAqICAgICAgICAgICAgaW5pdGlhbCB2ZXJzaW9uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfTUZQX0gKKyNkZWZpbmUgX19BU01fUExBVF9NRlBfSAorCisjZGVmaW5lIG1mcF90b19ncGlvKG0pCSgobSkgJSAxMjgpCisKKy8qIGxpc3Qgb2YgYWxsIHRoZSBjb25maWd1cmFibGUgTUZQIHBpbnMgKi8KK2VudW0geworCU1GUF9QSU5fSU5WQUxJRCA9IC0xLAorCisJTUZQX1BJTl9HUElPMCA9IDAsCisJTUZQX1BJTl9HUElPMSwKKwlNRlBfUElOX0dQSU8yLAorCU1GUF9QSU5fR1BJTzMsCisJTUZQX1BJTl9HUElPNCwKKwlNRlBfUElOX0dQSU81LAorCU1GUF9QSU5fR1BJTzYsCisJTUZQX1BJTl9HUElPNywKKwlNRlBfUElOX0dQSU84LAorCU1GUF9QSU5fR1BJTzksCisJTUZQX1BJTl9HUElPMTAsCisJTUZQX1BJTl9HUElPMTEsCisJTUZQX1BJTl9HUElPMTIsCisJTUZQX1BJTl9HUElPMTMsCisJTUZQX1BJTl9HUElPMTQsCisJTUZQX1BJTl9HUElPMTUsCisJTUZQX1BJTl9HUElPMTYsCisJTUZQX1BJTl9HUElPMTcsCisJTUZQX1BJTl9HUElPMTgsCisJTUZQX1BJTl9HUElPMTksCisJTUZQX1BJTl9HUElPMjAsCisJTUZQX1BJTl9HUElPMjEsCisJTUZQX1BJTl9HUElPMjIsCisJTUZQX1BJTl9HUElPMjMsCisJTUZQX1BJTl9HUElPMjQsCisJTUZQX1BJTl9HUElPMjUsCisJTUZQX1BJTl9HUElPMjYsCisJTUZQX1BJTl9HUElPMjcsCisJTUZQX1BJTl9HUElPMjgsCisJTUZQX1BJTl9HUElPMjksCisJTUZQX1BJTl9HUElPMzAsCisJTUZQX1BJTl9HUElPMzEsCisJTUZQX1BJTl9HUElPMzIsCisJTUZQX1BJTl9HUElPMzMsCisJTUZQX1BJTl9HUElPMzQsCisJTUZQX1BJTl9HUElPMzUsCisJTUZQX1BJTl9HUElPMzYsCisJTUZQX1BJTl9HUElPMzcsCisJTUZQX1BJTl9HUElPMzgsCisJTUZQX1BJTl9HUElPMzksCisJTUZQX1BJTl9HUElPNDAsCisJTUZQX1BJTl9HUElPNDEsCisJTUZQX1BJTl9HUElPNDIsCisJTUZQX1BJTl9HUElPNDMsCisJTUZQX1BJTl9HUElPNDQsCisJTUZQX1BJTl9HUElPNDUsCisJTUZQX1BJTl9HUElPNDYsCisJTUZQX1BJTl9HUElPNDcsCisJTUZQX1BJTl9HUElPNDgsCisJTUZQX1BJTl9HUElPNDksCisJTUZQX1BJTl9HUElPNTAsCisJTUZQX1BJTl9HUElPNTEsCisJTUZQX1BJTl9HUElPNTIsCisJTUZQX1BJTl9HUElPNTMsCisJTUZQX1BJTl9HUElPNTQsCisJTUZQX1BJTl9HUElPNTUsCisJTUZQX1BJTl9HUElPNTYsCisJTUZQX1BJTl9HUElPNTcsCisJTUZQX1BJTl9HUElPNTgsCisJTUZQX1BJTl9HUElPNTksCisJTUZQX1BJTl9HUElPNjAsCisJTUZQX1BJTl9HUElPNjEsCisJTUZQX1BJTl9HUElPNjIsCisJTUZQX1BJTl9HUElPNjMsCisJTUZQX1BJTl9HUElPNjQsCisJTUZQX1BJTl9HUElPNjUsCisJTUZQX1BJTl9HUElPNjYsCisJTUZQX1BJTl9HUElPNjcsCisJTUZQX1BJTl9HUElPNjgsCisJTUZQX1BJTl9HUElPNjksCisJTUZQX1BJTl9HUElPNzAsCisJTUZQX1BJTl9HUElPNzEsCisJTUZQX1BJTl9HUElPNzIsCisJTUZQX1BJTl9HUElPNzMsCisJTUZQX1BJTl9HUElPNzQsCisJTUZQX1BJTl9HUElPNzUsCisJTUZQX1BJTl9HUElPNzYsCisJTUZQX1BJTl9HUElPNzcsCisJTUZQX1BJTl9HUElPNzgsCisJTUZQX1BJTl9HUElPNzksCisJTUZQX1BJTl9HUElPODAsCisJTUZQX1BJTl9HUElPODEsCisJTUZQX1BJTl9HUElPODIsCisJTUZQX1BJTl9HUElPODMsCisJTUZQX1BJTl9HUElPODQsCisJTUZQX1BJTl9HUElPODUsCisJTUZQX1BJTl9HUElPODYsCisJTUZQX1BJTl9HUElPODcsCisJTUZQX1BJTl9HUElPODgsCisJTUZQX1BJTl9HUElPODksCisJTUZQX1BJTl9HUElPOTAsCisJTUZQX1BJTl9HUElPOTEsCisJTUZQX1BJTl9HUElPOTIsCisJTUZQX1BJTl9HUElPOTMsCisJTUZQX1BJTl9HUElPOTQsCisJTUZQX1BJTl9HUElPOTUsCisJTUZQX1BJTl9HUElPOTYsCisJTUZQX1BJTl9HUElPOTcsCisJTUZQX1BJTl9HUElPOTgsCisJTUZQX1BJTl9HUElPOTksCisJTUZQX1BJTl9HUElPMTAwLAorCU1GUF9QSU5fR1BJTzEwMSwKKwlNRlBfUElOX0dQSU8xMDIsCisJTUZQX1BJTl9HUElPMTAzLAorCU1GUF9QSU5fR1BJTzEwNCwKKwlNRlBfUElOX0dQSU8xMDUsCisJTUZQX1BJTl9HUElPMTA2LAorCU1GUF9QSU5fR1BJTzEwNywKKwlNRlBfUElOX0dQSU8xMDgsCisJTUZQX1BJTl9HUElPMTA5LAorCU1GUF9QSU5fR1BJTzExMCwKKwlNRlBfUElOX0dQSU8xMTEsCisJTUZQX1BJTl9HUElPMTEyLAorCU1GUF9QSU5fR1BJTzExMywKKwlNRlBfUElOX0dQSU8xMTQsCisJTUZQX1BJTl9HUElPMTE1LAorCU1GUF9QSU5fR1BJTzExNiwKKwlNRlBfUElOX0dQSU8xMTcsCisJTUZQX1BJTl9HUElPMTE4LAorCU1GUF9QSU5fR1BJTzExOSwKKwlNRlBfUElOX0dQSU8xMjAsCisJTUZQX1BJTl9HUElPMTIxLAorCU1GUF9QSU5fR1BJTzEyMiwKKwlNRlBfUElOX0dQSU8xMjMsCisJTUZQX1BJTl9HUElPMTI0LAorCU1GUF9QSU5fR1BJTzEyNSwKKwlNRlBfUElOX0dQSU8xMjYsCisJTUZQX1BJTl9HUElPMTI3LAorCU1GUF9QSU5fR1BJTzBfMiwKKwlNRlBfUElOX0dQSU8xXzIsCisJTUZQX1BJTl9HUElPMl8yLAorCU1GUF9QSU5fR1BJTzNfMiwKKwlNRlBfUElOX0dQSU80XzIsCisJTUZQX1BJTl9HUElPNV8yLAorCU1GUF9QSU5fR1BJTzZfMiwKKwlNRlBfUElOX0dQSU83XzIsCisJTUZQX1BJTl9HUElPOF8yLAorCU1GUF9QSU5fR1BJTzlfMiwKKwlNRlBfUElOX0dQSU8xMF8yLAorCU1GUF9QSU5fR1BJTzExXzIsCisJTUZQX1BJTl9HUElPMTJfMiwKKwlNRlBfUElOX0dQSU8xM18yLAorCU1GUF9QSU5fR1BJTzE0XzIsCisJTUZQX1BJTl9HUElPMTVfMiwKKwlNRlBfUElOX0dQSU8xNl8yLAorCU1GUF9QSU5fR1BJTzE3XzIsCisKKwlNRlBfUElOX1VMUElfU1RQLAorCU1GUF9QSU5fVUxQSV9OWFQsCisJTUZQX1BJTl9VTFBJX0RJUiwKKworCU1GUF9QSU5fblhDVlJFTiwKKwlNRlBfUElOX0RGX0NMRV9uT0UsCisJTUZQX1BJTl9ERl9uQURWMV9BTEUsCisJTUZQX1BJTl9ERl9TQ0xLX0UsCisJTUZQX1BJTl9ERl9TQ0xLX1MsCisJTUZQX1BJTl9uQkUwLAorCU1GUF9QSU5fbkJFMSwKKwlNRlBfUElOX0RGX25BRFYyX0FMRSwKKwlNRlBfUElOX0RGX0lOVF9SbkIsCisJTUZQX1BJTl9ERl9uQ1MwLAorCU1GUF9QSU5fREZfbkNTMSwKKwlNRlBfUElOX25MVUEsCisJTUZQX1BJTl9uTExBLAorCU1GUF9QSU5fREZfbldFLAorCU1GUF9QSU5fREZfQUxFX25XRSwKKwlNRlBfUElOX0RGX25SRV9uT0UsCisJTUZQX1BJTl9ERl9BRERSMCwKKwlNRlBfUElOX0RGX0FERFIxLAorCU1GUF9QSU5fREZfQUREUjIsCisJTUZQX1BJTl9ERl9BRERSMywKKwlNRlBfUElOX0RGX0lPMCwKKwlNRlBfUElOX0RGX0lPMSwKKwlNRlBfUElOX0RGX0lPMiwKKwlNRlBfUElOX0RGX0lPMywKKwlNRlBfUElOX0RGX0lPNCwKKwlNRlBfUElOX0RGX0lPNSwKKwlNRlBfUElOX0RGX0lPNiwKKwlNRlBfUElOX0RGX0lPNywKKwlNRlBfUElOX0RGX0lPOCwKKwlNRlBfUElOX0RGX0lPOSwKKwlNRlBfUElOX0RGX0lPMTAsCisJTUZQX1BJTl9ERl9JTzExLAorCU1GUF9QSU5fREZfSU8xMiwKKwlNRlBfUElOX0RGX0lPMTMsCisJTUZQX1BJTl9ERl9JTzE0LAorCU1GUF9QSU5fREZfSU8xNSwKKwlNRlBfUElOX0RGX25DUzBfU01fbkNTMiwKKwlNRlBfUElOX0RGX25DUzFfU01fbkNTMywKKwlNRlBfUElOX1NNX25DUzAsCisJTUZQX1BJTl9TTV9uQ1MxLAorCU1GUF9QSU5fREZfV0VuLAorCU1GUF9QSU5fREZfUkVuLAorCU1GUF9QSU5fREZfQ0xFX1NNX09FbiwKKwlNRlBfUElOX0RGX0FMRV9TTV9XRW4sCisJTUZQX1BJTl9ERl9SRFkwLAorCU1GUF9QSU5fREZfUkRZMSwKKworCU1GUF9QSU5fU01fU0NMSywKKwlNRlBfUElOX1NNX0JFMCwKKwlNRlBfUElOX1NNX0JFMSwKKwlNRlBfUElOX1NNX0FEViwKKwlNRlBfUElOX1NNX0FEVk1VWCwKKwlNRlBfUElOX1NNX1JEWSwKKworCU1GUF9QSU5fTU1DMV9EQVQ3LAorCU1GUF9QSU5fTU1DMV9EQVQ2LAorCU1GUF9QSU5fTU1DMV9EQVQ1LAorCU1GUF9QSU5fTU1DMV9EQVQ0LAorCU1GUF9QSU5fTU1DMV9EQVQzLAorCU1GUF9QSU5fTU1DMV9EQVQyLAorCU1GUF9QSU5fTU1DMV9EQVQxLAorCU1GUF9QSU5fTU1DMV9EQVQwLAorCU1GUF9QSU5fTU1DMV9DTUQsCisJTUZQX1BJTl9NTUMxX0NMSywKKwlNRlBfUElOX01NQzFfQ0QsCisJTUZQX1BJTl9NTUMxX1dQLAorCisJLyogYWRkaXRpb25hbCBwaW5zIG9uIFBYQTkzMCAqLworCU1GUF9QSU5fR1NJTV9VSU8sCisJTUZQX1BJTl9HU0lNX1VDTEssCisJTUZQX1BJTl9HU0lNX1VERVQsCisJTUZQX1BJTl9HU0lNX25VUlNULAorCU1GUF9QSU5fUE1JQ19JTlQsCisJTUZQX1BJTl9SRFksCisKKwlNRlBfUElOX01BWCwKK307CisKKy8qCisgKiBhIHBvc3NpYmxlIE1GUCBjb25maWd1cmF0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IGEgMzItYml0IGludGVnZXIKKyAqCisgKiBiaXQgIDAuLiA5IC0gTUZQIFBpbiBOdW1iZXIgKDEwMjQgUGlucyBNYXhpbXVtKQorICogYml0IDEwLi4xMiAtIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3Rpb24KKyAqIGJpdCAxMy4uMTUgLSBEcml2ZSBTdHJlbmd0aAorICogYml0IDE2Li4xOCAtIExvdyBQb3dlciBNb2RlIFN0YXRlCisgKiBiaXQgMTkuLjIwIC0gTG93IFBvd2VyIE1vZGUgRWRnZSBEZXRlY3Rpb24KKyAqIGJpdCAyMS4uMjIgLSBSdW4gTW9kZSBQdWxsIFN0YXRlCisgKgorICogdG8gZmFjaWxpdGF0ZSB0aGUgZGVmaW5pdGlvbiwgdGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHByb3ZpZGVkCisgKgorICogTUZQX0NGR19ERUZBVUxUIC0gZGVmYXVsdCBNRlAgY29uZmlndXJhdGlvbiB2YWx1ZSwgd2l0aAorICogCQkgIGFsdGVybmF0ZSBmdW5jdGlvbiA9IDAsCisgKiAJCSAgZHJpdmUgc3RyZW5ndGggPSBmYXN0IDNtQSAoTUZQX0RTMDNYKQorICogCQkgIGxvdyBwb3dlciBtb2RlID0gZGVmYXVsdAorICogCQkgIGVkZ2UgZGV0ZWN0aW9uID0gbm9uZQorICoKKyAqIE1GUF9DRkcJLSBkZWZhdWx0IE1GUFIgdmFsdWUgd2l0aCBhbHRlcm5hdGUgZnVuY3Rpb24KKyAqIE1GUF9DRkdfRFJWCS0gZGVmYXVsdCBNRlBSIHZhbHVlIHdpdGggYWx0ZXJuYXRlIGZ1bmN0aW9uIGFuZAorICogCQkgIHBpbiBkcml2ZSBzdHJlbmd0aAorICogTUZQX0NGR19MUE0JLSBkZWZhdWx0IE1GUFIgdmFsdWUgd2l0aCBhbHRlcm5hdGUgZnVuY3Rpb24gYW5kCisgKiAJCSAgbG93IHBvd2VyIG1vZGUKKyAqIE1GUF9DRkdfWAktIGRlZmF1bHQgTUZQUiB2YWx1ZSB3aXRoIGFsdGVybmF0ZSBmdW5jdGlvbiwKKyAqIAkJICBwaW4gZHJpdmUgc3RyZW5ndGggYW5kIGxvdyBwb3dlciBtb2RlCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1mcF9jZmdfdDsKKworI2RlZmluZSBNRlBfUElOKHgpCQkoKHgpICYgMHgzZmYpCisKKyNkZWZpbmUgTUZQX0FGMAkJCSgweDAgPDwgMTApCisjZGVmaW5lIE1GUF9BRjEJCQkoMHgxIDw8IDEwKQorI2RlZmluZSBNRlBfQUYyCQkJKDB4MiA8PCAxMCkKKyNkZWZpbmUgTUZQX0FGMwkJCSgweDMgPDwgMTApCisjZGVmaW5lIE1GUF9BRjQJCQkoMHg0IDw8IDEwKQorI2RlZmluZSBNRlBfQUY1CQkJKDB4NSA8PCAxMCkKKyNkZWZpbmUgTUZQX0FGNgkJCSgweDYgPDwgMTApCisjZGVmaW5lIE1GUF9BRjcJCQkoMHg3IDw8IDEwKQorI2RlZmluZSBNRlBfQUZfTUFTSwkJKDB4NyA8PCAxMCkKKyNkZWZpbmUgTUZQX0FGKHgpCQkoKCh4KSA+PiAxMCkgJiAweDcpCisKKyNkZWZpbmUgTUZQX0RTMDFYCQkoMHgwIDw8IDEzKQorI2RlZmluZSBNRlBfRFMwMlgJCSgweDEgPDwgMTMpCisjZGVmaW5lIE1GUF9EUzAzWAkJKDB4MiA8PCAxMykKKyNkZWZpbmUgTUZQX0RTMDRYCQkoMHgzIDw8IDEzKQorI2RlZmluZSBNRlBfRFMwNlgJCSgweDQgPDwgMTMpCisjZGVmaW5lIE1GUF9EUzA4WAkJKDB4NSA8PCAxMykKKyNkZWZpbmUgTUZQX0RTMTBYCQkoMHg2IDw8IDEzKQorI2RlZmluZSBNRlBfRFMxM1gJCSgweDcgPDwgMTMpCisjZGVmaW5lIE1GUF9EU19NQVNLCQkoMHg3IDw8IDEzKQorI2RlZmluZSBNRlBfRFMoeCkJCSgoKHgpID4+IDEzKSAmIDB4NykKKworI2RlZmluZSBNRlBfTFBNX0RFRkFVTFQJCSgweDAgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fRFJJVkVfTE9XCSgweDEgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fRFJJVkVfSElHSAkoMHgyIDw8IDE2KQorI2RlZmluZSBNRlBfTFBNX1BVTExfTE9XCSgweDMgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fUFVMTF9ISUdICSgweDQgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fRkxPQVQJCSgweDUgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fSU5QVVQJCSgweDYgPDwgMTYpCisjZGVmaW5lIE1GUF9MUE1fU1RBVEVfTUFTSwkoMHg3IDw8IDE2KQorI2RlZmluZSBNRlBfTFBNX1NUQVRFKHgpCSgoKHgpID4+IDE2KSAmIDB4NykKKworI2RlZmluZSBNRlBfTFBNX0VER0VfTk9ORQkoMHgwIDw8IDE5KQorI2RlZmluZSBNRlBfTFBNX0VER0VfUklTRQkoMHgxIDw8IDE5KQorI2RlZmluZSBNRlBfTFBNX0VER0VfRkFMTAkoMHgyIDw8IDE5KQorI2RlZmluZSBNRlBfTFBNX0VER0VfQk9USAkoMHgzIDw8IDE5KQorI2RlZmluZSBNRlBfTFBNX0VER0VfTUFTSwkoMHgzIDw8IDE5KQorI2RlZmluZSBNRlBfTFBNX0VER0UoeCkJCSgoKHgpID4+IDE5KSAmIDB4MykKKworI2RlZmluZSBNRlBfUFVMTF9OT05FCQkoMHgwIDw8IDIxKQorI2RlZmluZSBNRlBfUFVMTF9MT1cJCSgweDEgPDwgMjEpCisjZGVmaW5lIE1GUF9QVUxMX0hJR0gJCSgweDIgPDwgMjEpCisjZGVmaW5lIE1GUF9QVUxMX0JPVEgJCSgweDMgPDwgMjEpCisjZGVmaW5lIE1GUF9QVUxMX01BU0sJCSgweDMgPDwgMjEpCisjZGVmaW5lIE1GUF9QVUxMKHgpCQkoKCh4KSA+PiAyMSkgJiAweDMpCisKKyNkZWZpbmUgTUZQX0NGR19ERUZBVUxUCQkoTUZQX0FGMCB8IE1GUF9EUzAzWCB8IE1GUF9MUE1fREVGQVVMVCB8XAorCQkJCSBNRlBfTFBNX0VER0VfTk9ORSB8IE1GUF9QVUxMX05PTkUpCisKKyNkZWZpbmUgTUZQX0NGRyhwaW4sIGFmKQkJXAorCSgoTUZQX0NGR19ERUZBVUxUICYgfk1GUF9BRl9NQVNLKSB8XAorCSAoTUZQX1BJTihNRlBfUElOXyMjcGluKSB8IE1GUF8jI2FmKSkKKworI2RlZmluZSBNRlBfQ0ZHX0RSVihwaW4sIGFmLCBkcnYpCVwKKwkoKE1GUF9DRkdfREVGQVVMVCAmIH4oTUZQX0FGX01BU0sgfCBNRlBfRFNfTUFTSykpIHxcCisJIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfIyNkcnYpKQorCisjZGVmaW5lIE1GUF9DRkdfTFBNKHBpbiwgYWYsIGxwbSkJXAorCSgoTUZQX0NGR19ERUZBVUxUICYgfihNRlBfQUZfTUFTSyB8IE1GUF9MUE1fU1RBVEVfTUFTSykpIHxcCisJIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfTFBNXyMjbHBtKSkKKworI2RlZmluZSBNRlBfQ0ZHX1gocGluLCBhZiwgZHJ2LCBscG0pCVwKKwkoKE1GUF9DRkdfREVGQVVMVCAmIH4oTUZQX0FGX01BU0sgfCBNRlBfRFNfTUFTSyB8IE1GUF9MUE1fU1RBVEVfTUFTSykpIHxcCisJIChNRlBfUElOKE1GUF9QSU5fIyNwaW4pIHwgTUZQXyMjYWYgfCBNRlBfIyNkcnYgfCBNRlBfTFBNXyMjbHBtKSkKKworI2lmIGRlZmluZWQoQ09ORklHX1BYQTN4eCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NTVApCisvKgorICogZWFjaCBNRlAgcGluIHdpbGwgaGF2ZSBhIE1GUFIgcmVnaXN0ZXIsIHNpbmNlIHRoZSBvZmZzZXQgb2YgdGhlCisgKiByZWdpc3RlciB2YXJpZXMgYmV0d2VlbiBwcm9jZXNzb3JzLCB0aGUgcHJvY2Vzc29yIHNwZWNpZmljIGNvZGUKKyAqIHNob3VsZCBpbml0aWFsaXplIHRoZSBwaW4gb2Zmc2V0cyBieSBtZnBfaW5pdCgpCisgKgorICogbWZwX2luaXRfYmFzZSgpIC0gYWNjZXB0cyBhIHZpcnR1YWwgYmFzZSBmb3IgYWxsIE1GUFIgcmVnaXN0ZXJzIGFuZAorICogaW5pdGlhbGl6ZSB0aGUgTUZQIHRhYmxlIHRvIGEgZGVmYXVsdCBzdGF0ZQorICoKKyAqIG1mcF9pbml0X2FkZHIoKSAtIGFjY2VwdHMgYSB0YWJsZSBvZiAibWZwX2FkZHJfbWFwIiBzdHJ1Y3R1cmUsIHdoaWNoCisgKiByZXByZXNlbnRzIGEgcmFuZ2Ugb2YgTUZQIHBpbnMgZnJvbSAic3RhcnQiIHRvICJlbmQiLCB3aXRoIHRoZSBvZmZzZXQKKyAqIGJlZ2luaW5nIGF0ICJvZmZzZXQiLCB0byBkZWZpbmUgYSBzaW5nbGUgcGluLCBsZXQgImVuZCIgPSAtMS4KKyAqCisgKiB1c2UKKyAqCisgKiBNRlBfQUREUl9YKCkgdG8gZGVmaW5lIGEgcmFuZ2Ugb2YgcGlucworICogTUZQX0FERFIoKSAgIHRvIGRlZmluZSBhIHNpbmdsZSBwaW4KKyAqIE1GUF9BRERSX0VORCB0byBzaWduYWwgdGhlIGVuZCBvZiBwaW4gb2Zmc2V0IGRlZmluaXRpb25zCisgKi8KK3N0cnVjdCBtZnBfYWRkcl9tYXAgeworCXVuc2lnbmVkIGludAlzdGFydDsKKwl1bnNpZ25lZCBpbnQJZW5kOworCXVuc2lnbmVkIGxvbmcJb2Zmc2V0OworfTsKKworI2RlZmluZSBNRlBfQUREUl9YKHN0YXJ0LCBlbmQsIG9mZnNldCkgXAorCXsgTUZQX1BJTl8jI3N0YXJ0LCBNRlBfUElOXyMjZW5kLCBvZmZzZXQgfQorCisjZGVmaW5lIE1GUF9BRERSKHBpbiwgb2Zmc2V0KSBcCisJeyBNRlBfUElOXyMjcGluLCAtMSwgb2Zmc2V0IH0KKworI2RlZmluZSBNRlBfQUREUl9FTkQJeyBNRlBfUElOX0lOVkFMSUQsIDAgfQorCit2b2lkIF9faW5pdCBtZnBfaW5pdF9iYXNlKHVuc2lnbmVkIGxvbmcgbWZwcl9iYXNlKTsKK3ZvaWQgX19pbml0IG1mcF9pbml0X2FkZHIoc3RydWN0IG1mcF9hZGRyX21hcCAqbWFwKTsKKworLyoKKyAqIG1mcF97cmVhZCwgd3JpdGV9KCkJLSBmb3IgZGlyZWN0IHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoZSBNRlBSIHJlZ2lzdGVyCisgKiBtZnBfY29uZmlnKCkJCS0gZm9yIGNvbmZpZ3VyaW5nIGEgZ3JvdXAgb2YgTUZQUiByZWdpc3RlcnMKKyAqIG1mcF9jb25maWdfbHBtKCkJLSBjb25maWd1cmluZyBhbGwgbG93IHBvd2VyIE1GUFIgcmVnaXN0ZXJzIGZvciBzdXNwZW5kCisgKiBtZnBfY29uZmlnX3J1bigpCS0gY29uZmlndXJpbmcgYWxsIHJ1biB0aW1lICBNRlBSIHJlZ2lzdGVycyBhZnRlciByZXN1bWUKKyAqLwordW5zaWduZWQgbG9uZyBtZnBfcmVhZChpbnQgbWZwKTsKK3ZvaWQgbWZwX3dyaXRlKGludCBtZnAsIHVuc2lnbmVkIGxvbmcgbWZwcl92YWwpOwordm9pZCBtZnBfY29uZmlnKHVuc2lnbmVkIGxvbmcgKm1mcF9jZmdzLCBpbnQgbnVtKTsKK3ZvaWQgbWZwX2NvbmZpZ19ydW4odm9pZCk7Cit2b2lkIG1mcF9jb25maWdfbHBtKHZvaWQpOworI2VuZGlmIC8qIENPTkZJR19QWEEzeHggfHwgQ09ORklHX0FSQ0hfTU1QICovCisKKyNlbmRpZiAvKiBfX0FTTV9QTEFUX01GUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MTZjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYwpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCisgKgorICogICBNdWx0aS1GdW5jdGlvbiBQaW4gU3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBNYXJ2ZWxsIEludGVybmF0aW9uIEx0ZC4KKyAqCisgKiAyMDA3LTA4LTIxOiBlcmljIG1pYW8gPGVyaWMubWlhb0BtYXJ2ZWxsLmNvbT4KKyAqICAgICAgICAgICAgIGluaXRpYWwgdmVyc2lvbgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisjaW5jbHVkZSA8cGxhdC9tZnAuaD4KKworI2RlZmluZSBNRlBSX1NJWkUJKFBBR0VfU0laRSkKKworLyogTUZQUiByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTUZQUl9QVUxMX1NFTAkJKDB4MSA8PCAxNSkKKyNkZWZpbmUgTUZQUl9QVUxMVVBfRU4JCSgweDEgPDwgMTQpCisjZGVmaW5lIE1GUFJfUFVMTERPV05fRU4JKDB4MSA8PCAxMykKKyNkZWZpbmUgTUZQUl9TTEVFUF9TRUwJCSgweDEgPDwgOSkKKyNkZWZpbmUgTUZQUl9TTEVFUF9PRV9OCQkoMHgxIDw8IDcpCisjZGVmaW5lIE1GUFJfRURHRV9DTEVBUgkJKDB4MSA8PCA2KQorI2RlZmluZSBNRlBSX0VER0VfRkFMTF9FTgkoMHgxIDw8IDUpCisjZGVmaW5lIE1GUFJfRURHRV9SSVNFX0VOCSgweDEgPDwgNCkKKworI2RlZmluZSBNRlBSX1NMRUVQX0RBVEEoeCkJKCh4KSA8PCA4KQorI2RlZmluZSBNRlBSX0RSSVZFKHgpCQkoKCh4KSAmIDB4NykgPDwgMTApCisjZGVmaW5lIE1GUFJfQUZfU0VMKHgpCQkoKCh4KSAmIDB4NykgPDwgMCkKKworI2RlZmluZSBNRlBSX0VER0VfTk9ORQkJKDApCisjZGVmaW5lIE1GUFJfRURHRV9SSVNFCQkoTUZQUl9FREdFX1JJU0VfRU4pCisjZGVmaW5lIE1GUFJfRURHRV9GQUxMCQkoTUZQUl9FREdFX0ZBTExfRU4pCisjZGVmaW5lIE1GUFJfRURHRV9CT1RICQkoTUZQUl9FREdFX1JJU0UgfCBNRlBSX0VER0VfRkFMTCkKKworLyoKKyAqIFRhYmxlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgbG93IHBvd2VyIG1vZGVzIG91dHB1dHMsIHdpdGggYWN0dWFsIHNldHRpbmdzCisgKiB1c2VkIGluIHBhcmVudGhlc2VzIGZvciBkb24ndC1jYXJlIHZhbHVlcy4gRXhjZXB0IGZvciB0aGUgZmxvYXQgb3V0cHV0LAorICogdGhlIGNvbmZpZ3VyZWQgZHJpdmVuIGFuZCBwdWxsZWQgbGV2ZWxzIG1hdGNoLCBzbyBpZiB0aGVyZSBpcyBhIG5lZWQgZm9yCisgKiBub24tTFBNIHB1bGxlZCBvdXRwdXQsIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gY291bGQgcHJvYmFibHkgYmUgdXNlZC4KKyAqCisgKiBPdXRwdXQgdmFsdWUgIHNsZWVwX29lX24gIHNsZWVwX2RhdGEgIHB1bGx1cF9lbiAgcHVsbGRvd25fZW4gIHB1bGxfc2VsCisgKiAgICAgICAgICAgICAgICAgKGJpdCA3KSAgICAoYml0IDgpICAgIChiaXQgMTQpICAgICAoYml0IDEzKSAgIChiaXQgMTUpCisgKgorICogSW5wdXQgICAgICAgICAgICAwICAgICAgICAgIFgoMCkgICAgICAgIFgoMCkgICAgICAgIFgoMCkgICAgICAgMAorICogRHJpdmUgMCAgICAgICAgICAwICAgICAgICAgIDAgICAgICAgICAgIDAgICAgICAgICAgIFgoMSkgICAgICAgMAorICogRHJpdmUgMSAgICAgICAgICAwICAgICAgICAgIDEgICAgICAgICAgIFgoMSkgICAgICAgIDAJICAwCisgKiBQdWxsIGhpICgxKSAgICAgIDEgICAgICAgICAgWCgxKSAgICAgICAgMSAgICAgICAgICAgMAkgIDAKKyAqIFB1bGwgbG8gKDApICAgICAgMSAgICAgICAgICBYKDApICAgICAgICAwICAgICAgICAgICAxCSAgMAorICogWiAoZmxvYXQpICAgICAgICAxICAgICAgICAgIFgoMCkgICAgICAgIDAgICAgICAgICAgIDAJICAwCisgKi8KKyNkZWZpbmUgTUZQUl9MUE1fSU5QVVQJCSgwKQorI2RlZmluZSBNRlBSX0xQTV9EUklWRV9MT1cJKE1GUFJfU0xFRVBfREFUQSgwKSB8IE1GUFJfUFVMTERPV05fRU4pCisjZGVmaW5lIE1GUFJfTFBNX0RSSVZFX0hJR0ggICAgCShNRlBSX1NMRUVQX0RBVEEoMSkgfCBNRlBSX1BVTExVUF9FTikKKyNkZWZpbmUgTUZQUl9MUE1fUFVMTF9MT1cgICAgICAJKE1GUFJfTFBNX0RSSVZFX0xPVyAgfCBNRlBSX1NMRUVQX09FX04pCisjZGVmaW5lIE1GUFJfTFBNX1BVTExfSElHSCAgICAgCShNRlBSX0xQTV9EUklWRV9ISUdIIHwgTUZQUl9TTEVFUF9PRV9OKQorI2RlZmluZSBNRlBSX0xQTV9GTE9BVCAgICAgICAgIAkoTUZQUl9TTEVFUF9PRV9OKQorI2RlZmluZSBNRlBSX0xQTV9NQVNLCQkoMHhlMDgwKQorCisvKgorICogVGhlIHB1bGx1cCBhbmQgcHVsbGRvd24gc3RhdGUgb2YgdGhlIE1GUCBwaW4gYXQgcnVuIG1vZGUgaXMgYnkgZGVmYXVsdAorICogZGV0ZXJtaW5lZCBieSB0aGUgc2VsZWN0ZWQgYWx0ZXJuYXRlIGZ1bmN0aW9uLiBJbiBjYXNlIHRoYXQgc29tZSBidWdneQorICogZGV2aWNlcyBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciwgIHRoZSBkZWZpbml0aW9ucyBiZWxvdworICogaW5kaWNhdGVzIHRoZSBzZXR0aW5nIG9mIGNvcnJlc3BvbmRpbmcgTUZQUiBiaXRzCisgKgorICogRGVmaW5pdGlvbiAgICAgICBwdWxsX3NlbCAgcHVsbHVwX2VuICBwdWxsZG93bl9lbgorICogTUZQUl9QVUxMX05PTkUgICAgICAgMCAgICAgICAgIDAgICAgICAgIDAKKyAqIE1GUFJfUFVMTF9MT1cgICAgICAgIDEgICAgICAgICAwICAgICAgICAxCisgKiBNRlBSX1BVTExfSElHSCAgICAgICAxICAgICAgICAgMSAgICAgICAgMAorICogTUZQUl9QVUxMX0JPVEggICAgICAgMSAgICAgICAgIDEgICAgICAgIDEKKyAqLworI2RlZmluZSBNRlBSX1BVTExfTk9ORQkJKDApCisjZGVmaW5lIE1GUFJfUFVMTF9MT1cJCShNRlBSX1BVTExfU0VMIHwgTUZQUl9QVUxMRE9XTl9FTikKKyNkZWZpbmUgTUZQUl9QVUxMX0JPVEgJCShNRlBSX1BVTExfTE9XIHwgTUZQUl9QVUxMVVBfRU4pCisjZGVmaW5lIE1GUFJfUFVMTF9ISUdICQkoTUZQUl9QVUxMX1NFTCB8IE1GUFJfUFVMTFVQX0VOKQorCisvKiBtZnBfc3Bpbl9sb2NrIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgTUZQIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24KKyAqIChtb3N0IGxpa2VseSBhIHJlYWQtbW9kaWZ5LXdyaXRlIG9wZXJhdGlvbikgaXMgYXRvbWljLCBhbmQgdGhhdAorICogbWZwX3RhYmxlW10gaXMgY29uc2lzdGVudAorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mcF9zcGluX2xvY2spOworCitzdGF0aWMgdm9pZCBfX2lvbWVtICptZnByX21taW9fYmFzZTsKKworc3RydWN0IG1mcF9waW4geworCXVuc2lnbmVkIGxvbmcJY29uZmlnOwkJLyogLTEgZm9yIG5vdCBjb25maWd1cmVkICovCisJdW5zaWduZWQgbG9uZwltZnByX29mZjsJLyogTUZQUnh4IFJlZ2lzdGVyIG9mZnNldCAqLworCXVuc2lnbmVkIGxvbmcJbWZwcl9ydW47CS8qIFJ1bi1Nb2RlIFJlZ2lzdGVyIFZhbHVlICovCisJdW5zaWduZWQgbG9uZwltZnByX2xwbTsJLyogTG93IFBvd2VyIE1vZGUgUmVnaXN0ZXIgVmFsdWUgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZwX3BpbiBtZnBfdGFibGVbTUZQX1BJTl9NQVhdOworCisvKiBtYXBwaW5nIG9mIE1GUF9MUE1fKiBkZWZpbml0aW9ucyB0byBNRlBSX0xQTV8qIHJlZ2lzdGVyIGJpdHMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG1mcHJfbHBtW10gPSB7CisJTUZQUl9MUE1fSU5QVVQsCisJTUZQUl9MUE1fRFJJVkVfTE9XLAorCU1GUFJfTFBNX0RSSVZFX0hJR0gsCisJTUZQUl9MUE1fUFVMTF9MT1csCisJTUZQUl9MUE1fUFVMTF9ISUdILAorCU1GUFJfTFBNX0ZMT0FULAorfTsKKworLyogbWFwcGluZyBvZiBNRlBfUFVMTF8qIGRlZmluaXRpb25zIHRvIE1GUFJfUFVMTF8qIHJlZ2lzdGVyIGJpdHMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG1mcHJfcHVsbFtdID0geworCU1GUFJfUFVMTF9OT05FLAorCU1GUFJfUFVMTF9MT1csCisJTUZQUl9QVUxMX0hJR0gsCisJTUZQUl9QVUxMX0JPVEgsCit9OworCisvKiBtYXBwaW5nIG9mIE1GUF9MUE1fRURHRV8qIGRlZmluaXRpb25zIHRvIE1GUFJfRURHRV8qIHJlZ2lzdGVyIGJpdHMgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG1mcHJfZWRnZVtdID0geworCU1GUFJfRURHRV9OT05FLAorCU1GUFJfRURHRV9SSVNFLAorCU1GUFJfRURHRV9GQUxMLAorCU1GUFJfRURHRV9CT1RILAorfTsKKworI2RlZmluZSBtZnByX3JlYWRsKG9mZikJCQlcCisJX19yYXdfcmVhZGwobWZwcl9tbWlvX2Jhc2UgKyAob2ZmKSkKKworI2RlZmluZSBtZnByX3dyaXRlbChvZmYsIHZhbCkJCVwKKwlfX3Jhd193cml0ZWwodmFsLCBtZnByX21taW9fYmFzZSArIChvZmYpKQorCisjZGVmaW5lIG1mcF9jb25maWd1cmVkKHApCSgocCktPmNvbmZpZyAhPSAtMSkKKworLyoKKyAqIHBlcmZvcm0gYSByZWFkLWJhY2sgb2YgYW55IE1GUFIgcmVnaXN0ZXIgdG8gbWFrZSBzdXJlIHRoZQorICogcHJldmlvdXMgd3JpdGluZ3MgYXJlIGZpbmlzaGVkCisgKi8KKyNkZWZpbmUgbWZwcl9zeW5jKCkJKHZvaWQpX19yYXdfcmVhZGwobWZwcl9tbWlvX2Jhc2UgKyAwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19tZnBfY29uZmlnX3J1bihzdHJ1Y3QgbWZwX3BpbiAqcCkKK3sKKwlpZiAobWZwX2NvbmZpZ3VyZWQocCkpCisJCW1mcHJfd3JpdGVsKHAtPm1mcHJfb2ZmLCBwLT5tZnByX3J1bik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX21mcF9jb25maWdfbHBtKHN0cnVjdCBtZnBfcGluICpwKQoreworCWlmIChtZnBfY29uZmlndXJlZChwKSkgeworCQl1bnNpZ25lZCBsb25nIG1mcHJfY2xyID0gKHAtPm1mcHJfcnVuICYgfk1GUFJfRURHRV9CT1RIKSB8IE1GUFJfRURHRV9DTEVBUjsKKwkJaWYgKG1mcHJfY2xyICE9IHAtPm1mcHJfcnVuKQorCQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIG1mcHJfY2xyKTsKKwkJaWYgKHAtPm1mcHJfbHBtICE9IG1mcHJfY2xyKQorCQkJbWZwcl93cml0ZWwocC0+bWZwcl9vZmYsIHAtPm1mcHJfbHBtKTsKKwl9Cit9CisKK3ZvaWQgbWZwX2NvbmZpZyh1bnNpZ25lZCBsb25nICptZnBfY2ZncywgaW50IG51bSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgbWZwX2NmZ3MrKykgeworCQl1bnNpZ25lZCBsb25nIHRtcCwgYyA9ICptZnBfY2ZnczsKKwkJc3RydWN0IG1mcF9waW4gKnA7CisJCWludCBwaW4sIGFmLCBkcnYsIGxwbSwgZWRnZSwgcHVsbDsKKworCQlwaW4gPSBNRlBfUElOKGMpOworCQlCVUdfT04ocGluID49IE1GUF9QSU5fTUFYKTsKKwkJcCA9ICZtZnBfdGFibGVbcGluXTsKKworCQlhZiAgPSBNRlBfQUYoYyk7CisJCWRydiA9IE1GUF9EUyhjKTsKKwkJbHBtID0gTUZQX0xQTV9TVEFURShjKTsKKwkJZWRnZSA9IE1GUF9MUE1fRURHRShjKTsKKwkJcHVsbCA9IE1GUF9QVUxMKGMpOworCisJCS8qIHJ1bi1tb2RlIHB1bGwgc2V0dGluZ3Mgd2lsbCBjb25mbGljdCB3aXRoIE1GUFIgYml0cyBvZgorCQkgKiBsb3cgcG93ZXIgbW9kZSBzdGF0ZSwgIGNhbGN1bGF0ZSBtZnByX3J1biBhbmQgbWZwcl9scG0KKwkJICogaW5kaXZpZHVhbGx5IGlmIHB1bGwgIT0gTUZQX1BVTExfTk9ORQorCQkgKi8KKwkJdG1wID0gTUZQUl9BRl9TRUwoYWYpIHwgTUZQUl9EUklWRShkcnYpOworCisJCWlmIChsaWtlbHkocHVsbCA9PSBNRlBfUFVMTF9OT05FKSkgeworCQkJcC0+bWZwcl9ydW4gPSB0bXAgfCBtZnByX2xwbVtscG1dIHwgbWZwcl9lZGdlW2VkZ2VdOworCQkJcC0+bWZwcl9scG0gPSBwLT5tZnByX3J1bjsKKwkJfSBlbHNlIHsKKwkJCXAtPm1mcHJfbHBtID0gdG1wIHwgbWZwcl9scG1bbHBtXSB8IG1mcHJfZWRnZVtlZGdlXTsKKwkJCXAtPm1mcHJfcnVuID0gdG1wIHwgbWZwcl9wdWxsW3B1bGxdOworCQl9CisKKwkJcC0+Y29uZmlnID0gYzsgX19tZnBfY29uZmlnX3J1bihwKTsKKwl9CisKKwltZnByX3N5bmMoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgbWZwX3JlYWQoaW50IG1mcCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbCwgZmxhZ3M7CisKKwlCVUdfT04obWZwID49IE1GUF9QSU5fTUFYKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7CisJdmFsID0gbWZwcl9yZWFkbChtZnBfdGFibGVbbWZwXS5tZnByX29mZik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHZhbDsKK30KKwordm9pZCBtZnBfd3JpdGUoaW50IG1mcCwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUJVR19PTihtZnAgPj0gTUZQX1BJTl9NQVgpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKKwltZnByX3dyaXRlbChtZnBfdGFibGVbbWZwXS5tZnByX29mZiwgdmFsKTsKKwltZnByX3N5bmMoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZnBfc3Bpbl9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgX19pbml0IG1mcF9pbml0X2Jhc2UodW5zaWduZWQgbG9uZyBtZnByX2Jhc2UpCit7CisJaW50IGk7CisKKwkvKiBpbml0aWFsaXplIHRoZSB0YWJsZSB3aXRoIGRlZmF1bHQgLSB1bmNvbmZpZ3VyZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZnBfdGFibGUpOyBpKyspCisJCW1mcF90YWJsZVtpXS5jb25maWcgPSAtMTsKKworCW1mcHJfbW1pb19iYXNlID0gKHZvaWQgX19pb21lbSAqKW1mcHJfYmFzZTsKK30KKwordm9pZCBfX2luaXQgbWZwX2luaXRfYWRkcihzdHJ1Y3QgbWZwX2FkZHJfbWFwICptYXApCit7CisJc3RydWN0IG1mcF9hZGRyX21hcCAqcDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgZmxhZ3M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOworCisJZm9yIChwID0gbWFwOyBwLT5zdGFydCAhPSBNRlBfUElOX0lOVkFMSUQ7IHArKykgeworCQlvZmZzZXQgPSBwLT5vZmZzZXQ7CisJCWkgPSBwLT5zdGFydDsKKworCQlkbyB7CisJCQltZnBfdGFibGVbaV0ubWZwcl9vZmYgPSBvZmZzZXQ7CisJCQltZnBfdGFibGVbaV0ubWZwcl9ydW4gPSAwOworCQkJbWZwX3RhYmxlW2ldLm1mcHJfbHBtID0gMDsKKwkJCW9mZnNldCArPSA0OyBpKys7CisJCX0gd2hpbGUgKChpIDw9IHAtPmVuZCkgJiYgKHAtPmVuZCAhPSAtMSkpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1mcF9zcGluX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBtZnBfY29uZmlnX2xwbSh2b2lkKQoreworCXN0cnVjdCBtZnBfcGluICpwID0gJm1mcF90YWJsZVswXTsKKwlpbnQgcGluOworCisJZm9yIChwaW4gPSAwOyBwaW4gPCBBUlJBWV9TSVpFKG1mcF90YWJsZSk7IHBpbisrLCBwKyspCisJCV9fbWZwX2NvbmZpZ19scG0ocCk7Cit9CisKK3ZvaWQgbWZwX2NvbmZpZ19ydW4odm9pZCkKK3sKKwlzdHJ1Y3QgbWZwX3BpbiAqcCA9ICZtZnBfdGFibGVbMF07CisJaW50IHBpbjsKKworCWZvciAocGluID0gMDsgcGluIDwgQVJSQVlfU0laRShtZnBfdGFibGUpOyBwaW4rKywgcCsrKQorCQlfX21mcF9jb25maWdfcnVuKHApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQppbmRleCAzOTE5NWY5Li44ZDc4MTVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9NYWtlZmlsZQpAQCAtMTgsNiArMTgsMTEgQEAKIG9iai15CQkJCSs9IGdwaW8ubwogb2JqLXkJCQkJKz0gZ3Bpby1jb25maWcubwogCisjIFBNIHN1cHBvcnQKKworb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubworb2JqLSQoQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0spCSs9IHBtLWNoZWNrLm8KKwogIyBkZXZpY2VzCiAKIG9iai0kKENPTkZJR19TM0NfREVWX0hTTU1DKQkrPSBkZXYtaHNtbWMubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9hdWRpby5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2F1ZGlvLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvYXVkaW8uaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2F1ZGlvLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9wbS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3BtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3OTc3NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9wbS5oCkBAIC0wLDAgKzEsMTc0IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3BtLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJV3JpdHRlbiBieSBCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBzM2NfcG1faW5pdAorICoKKyAqIGNhbGxlZCBmcm9tIGJvYXJkIGF0IGluaXRpYWxpc2F0aW9uIHRpbWUgdG8gc2V0dXAgdGhlIHBvd2VyCisgKiBtYW5hZ2VtZW50CisqLworCisjaWZkZWYgQ09ORklHX1BNCisKK2V4dGVybiBfX2luaXQgaW50IHMzY19wbV9pbml0KHZvaWQpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBzM2NfcG1faW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBJUlEgbWFzayBvdmVyIHNsZWVwICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9pbnRtYXNrOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludG1hc2s7CisKKy8qIElSUSBtYXNrcyBmb3IgSVJRcyBhbGxvd2VkIHRvIGdvIHRvIHNsZWVwIChzZWUgaXJxLmMpICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9pbnRhbGxvdzsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2VpbnRhbGxvdzsKKworLyogcGVyLWNwdSBzbGVlcCBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIHZvaWQgKCpwbV9jcHVfcHJlcCkodm9pZCk7CitleHRlcm4gdm9pZCAoKnBtX2NwdV9zbGVlcCkodm9pZCk7CisKKy8qIEZsYWdzIGZvciBQTSBDb250cm9sICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19wbV9mbGFnczsKKworLyogZnJvbSBzbGVlcC5TICovCisKK2V4dGVybiBpbnQgIHMzY19jcHVfc2F2ZSh1bnNpZ25lZCBsb25nICpzYXZlYmxrKTsKK2V4dGVybiB2b2lkIHMzY19jcHVfcmVzdW1lKHZvaWQpOworCitleHRlcm4gdm9pZCBzM2MyNDEwX2NwdV9zdXNwZW5kKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2Nfc2xlZXBfc2F2ZV9waHlzOworCisvKiBzbGVlcCBzYXZlIGluZm8gKi8KKworLyoqCisgKiBzdHJ1Y3Qgc2xlZXBfc2F2ZSAtIHNhdmUgaW5mb3JtYXRpb24gZm9yIHNoYXJlZCBwZXJpcGhlcmFscy4KKyAqIEByZWc6IFBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIHRvIHNhdmUuCisgKiBAdmFsOiBIb2xkZXIgZm9yIHRoZSB2YWx1ZSBzYXZlZCBmcm9tIHJlZy4KKyAqCisgKiBUaGlzIGRlc2NyaWJlcyBhIGxpc3Qgb2YgcmVnaXN0ZXJzIHdoaWNoIGlzIHVzZWQgYnkgdGhlIHBtIGNvcmUgYW5kCisgKiBvdGhlciBzdWJzeXN0ZW0gdG8gc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlciB2YWx1ZXMgb3ZlciBzdXNwZW5kLgorICovCitzdHJ1Y3Qgc2xlZXBfc2F2ZSB7CisJdm9pZCBfX2lvbWVtCSpyZWc7CisJdW5zaWduZWQgbG9uZwl2YWw7Cit9OworCisjZGVmaW5lIFNBVkVfSVRFTSh4KSBcCisJeyAucmVnID0gKHgpIH0KKworLyoqCisgKiBzdHJ1Y3QgcG1fdWFydF9zYXZlIC0gc2F2ZSBibG9jayBmb3IgY29yZSBVQVJUCisgKiBAdWxjb246IFNhdmUgdmFsdWUgZm9yIFMzQzI0MTBfVUxDT04KKyAqIEB1Y29uOiBTYXZlIHZhbHVlIGZvciBTM0MyNDEwX1VDT04KKyAqIEB1ZmNvbjogU2F2ZSB2YWx1ZSBmb3IgUzNDMjQxMF9VRkNPTgorICogQHVtY29uOiBTYXZlIHZhbHVlIGZvciBTM0MyNDEwX1VNQ09OCisgKiBAdWJyZGl2OiBTYXZlIHZhbHVlIGZvciBTM0MyNDEwX1VCUkRJVgorICoKKyAqIFNhdmUgYmxvY2sgZm9yIFVBUlQgcmVnaXN0ZXJzIHRvIGJlIGhlbGQgb3ZlciBzbGVlcCBhbmQgcmVzdG9yZWQgaWYgdGhleQorICogYXJlIG5lZWRlZCAoc2F5IGJ5IGRlYnVnKS4KKyovCitzdHJ1Y3QgcG1fdWFydF9zYXZlIHsKKwl1MzIJdWxjb247CisJdTMyCXVjb247CisJdTMyCXVmY29uOworCXUzMgl1bWNvbjsKKwl1MzIJdWJyZGl2OworfTsKKworLyogaGVscGVyIGZ1bmN0aW9ucyB0byBzYXZlL3Jlc3RvcmUgbGlzdHMgb2YgcmVnaXN0ZXJzLiAqLworCitleHRlcm4gdm9pZCBzM2NfcG1fZG9fc2F2ZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpOworZXh0ZXJuIHZvaWQgczNjX3BtX2RvX3Jlc3RvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHMzY19wbV9kb19yZXN0b3JlX2NvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KTsKKworI2lmZGVmIENPTkZJR19QTQorZXh0ZXJuIGludCBzM2NfaXJxZXh0X3dha2UodW5zaWduZWQgaW50IGlycW5vLCB1bnNpZ25lZCBpbnQgc3RhdGUpOworZXh0ZXJuIGludCBzM2MyNHh4X2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gaW50IHMzYzI0eHhfaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KTsKKyNlbHNlCisjZGVmaW5lIHMzY19pcnFleHRfd2FrZSBOVUxMCisjZGVmaW5lIHMzYzI0eHhfaXJxX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzM2MyNHh4X2lycV9yZXN1bWUgIE5VTEwKKyNlbmRpZgorCisvKiBQTSBkZWJ1ZyBmdW5jdGlvbnMgKi8KKworI2lmZGVmIENPTkZJR19TM0MyNDEwX1BNX0RFQlVHCisvKioKKyAqIHMzY19wbV9kYmcoKSAtIGxvdyBsZXZlbCBkZWJ1ZyBmdW5jdGlvbiBmb3IgdXNlIGluIHN1c3BlbmQvcmVzdW1lLgorICogQG1zZzogVGhlIG1lc3NhZ2UgdG8gcHJpbnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIG1haW5seSB0byBkZWJ1ZyB0aGUgcmVzdW1lIHByb2Nlc3MgYmVmb3JlIHRoZSBzeXN0ZW0KKyAqIGNhbiByZWx5IG9uIHByaW50ay9jb25zb2xlIG91dHB1dC4gSXQgdXNlcyB0aGUgbG93LWxldmVsIGRlYnVnZ2luZyBvdXRwdXQKKyAqIHJvdXRpbmUgcHJpbnRhc2NpaSgpIHRvIGRvIGl0cyB3b3JrLgorICovCitleHRlcm4gdm9pZCBzM2NfcG1fZGJnKGNvbnN0IGNoYXIgKm1zZywgLi4uKTsKKworI2RlZmluZSBTM0NfUE1EQkcoZm10Li4uKSBzM2NfcG1fZGJnKGZtdCkKKyNlbHNlCisjZGVmaW5lIFMzQ19QTURCRyhmbXQuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZtdCkKKyNlbmRpZgorCisvKiBzdXNwZW5kIG1lbW9yeSBjaGVja2luZyAqLworCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0sKK2V4dGVybiB2b2lkIHMzY19wbV9jaGVja19wcmVwYXJlKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjX3BtX2NoZWNrX3Jlc3RvcmUodm9pZCk7CitleHRlcm4gdm9pZCBzM2NfcG1fY2hlY2tfY2xlYW51cCh2b2lkKTsKK2V4dGVybiB2b2lkIHMzY19wbV9jaGVja19zdG9yZSh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIHMzY19wbV9jaGVja19wcmVwYXJlKCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHMzY19wbV9jaGVja19yZXN0b3JlKCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHMzY19wbV9jaGVja19jbGVhbnVwKCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHMzY19wbV9jaGVja19zdG9yZSgpICAgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKKworLyoqCisgKiBzM2NfcG1fY29uZmlndXJlX2V4dGludCgpIC0gZW5zdXJlIHBpbnMgYXJlIGNvcnJlY3RseSBzZXQgZm9yIElSUQorICoKKyAqIFNldHVwIGFsbCB0aGUgbmVjZXNzYXJ5IEdQSU8gcGlucyBmb3Igd2FraW5nIHRoZSBzeXN0ZW0gb24gZXh0ZXJuYWwKKyAqIGludGVycnVwdC4KKyAqLworZXh0ZXJuIHZvaWQgczNjX3BtX2NvbmZpZ3VyZV9leHRpbnQodm9pZCk7CisKKy8qKgorICogczNjX3BtX3Jlc3RvcmVfZ3Bpb3MoKSAtIHJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBncGlvcyBhZnRlciBzbGVlcC4KKyAqCisgKiBSZXN0b3JlIHRoZSBzdGF0ZSBvZiB0aGUgR1BJTyBwaW5zIGFmdGVyIHNsZWVwLCB3aGljaCBtYXkgaW52b2x2ZSBlbnN1cmluZworICogdGhhdCB3ZSBkbyBub3QgZ2xpdGNoIHRoZSBzdGF0ZSBvZiB0aGUgcGlucyBmcm9tIHRoYXQgdGhlIGJvb3Rsb2FkZXIncworICogcmVzdW1lIGNvZGUgaGFzIGRvbmUuCisqLworZXh0ZXJuIHZvaWQgczNjX3BtX3Jlc3RvcmVfZ3Bpb3Modm9pZCk7CisKKy8qKgorICogczNjX3BtX3NhdmVfZ3Bpb3MoKSAtIHNhdmUgdGhlIHN0YXRlIG9mIHRoZSBHUElPcyBmb3IgcmVzdG9yaW5nIGFmdGVyIHNsZWVwLgorICoKKyAqIFNhdmUgdGhlIEdQSU8gc3RhdGVzIGZvciByZXNvdHJhdGlvbiBvbiByZXN1bWUuIFNlZSBzM2NfcG1fcmVzdG9yZV9ncGlvcygpLgorICovCitleHRlcm4gdm9pZCBzM2NfcG1fc2F2ZV9ncGlvcyh2b2lkKTsKKworLyoqCisgKiBzM2NfcG1fY2JfZmx1c2hjYWNoZSAtIGNhbGxiYWNrIGZvciBhc3NlbWJseSBjb2RlCisgKgorICogQ2FsbGJhY2sgdG8gaXNzdWUgZmx1c2hfY2FjaGVfYWxsKCkgYXMgdGhpcyBjYWxsIGlzCisgKiBub3QgYSBkaXJlY3RseSBjYWxsYWJsZSBvYmplY3QuCisgKi8KK2V4dGVybiB2b2lkIHMzY19wbV9jYl9mbHVzaGNhY2hlKHZvaWQpOworCitleHRlcm4gdm9pZCBzM2NfcG1fc2F2ZV9jb3JlKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjX3BtX3Jlc3RvcmVfY29yZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXMzYzI0MTItaWlzLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zM2MyNDEyLWlpcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmYWQ3NTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zM2MyNDEyLWlpcy5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1zM2MyNDEyLWlpcy5oCisgKgorICogQ29weXJpZ2h0IDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzIDxsaW51eEBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogUzNDMjQxMiBJSVMgcmVnaXN0ZXIgZGVmaW5pdGlvbgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfUzNDMjQxMl9JSVNfSAorI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfUzNDMjQxMl9JSVNfSAorCisjZGVmaW5lIFMzQzI0MTJfSUlTQ09OCQkJKDB4MDApCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9ECQkJKDB4MDQpCisjZGVmaW5lIFMzQzI0MTJfSUlTRklDCQkJKDB4MDgpCisjZGVmaW5lIFMzQzI0MTJfSUlTUFNSCQkJKDB4MEMpCisjZGVmaW5lIFMzQzI0MTJfSUlTVFhECQkJKDB4MTApCisjZGVmaW5lIFMzQzI0MTJfSUlTUlhECQkJKDB4MTQpCisKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT05fTFJJTkRFWAkJKDEgPDwgMTEpCisjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1RYRklGT19FTVBUWQkoMSA8PCAxMCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT05fUlhGSUZPX0VNUFRZCSgxIDw8IDkpCisjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1RYRklGT19GVUxMCSgxIDw8IDgpCisjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1JYRklGT19GVUxMCSgxIDw8IDcpCisjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1RYRE1BX1BBVVNFCSgxIDw8IDYpCisjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1JYRE1BX1BBVVNFCSgxIDw8IDUpCisjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1RYQ0hfUEFVU0UJKDEgPDwgNCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT05fUlhDSF9QQVVTRQkoMSA8PCAzKQorI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9UWERNQV9BQ1RJVkUJKDEgPDwgMikKKyNkZWZpbmUgUzNDMjQxMl9JSVNDT05fUlhETUFfQUNUSVZFCSgxIDw8IDEpCisjZGVmaW5lIFMzQzI0MTJfSUlTQ09OX0lJU19BQ1RJVkUJKDEgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX0lJU01PRF9JTVNfUENMSwkJKDAgPDwgMTApCisjZGVmaW5lIFMzQzY0WFhfSUlTTU9EX0lNU19TWVNNVVgJKDEgPDwgMTApCisKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0lOVEVSTkFMCSgwIDw8IDEwKQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9NQVNURVJfRVhURVJOQUwJKDEgPDwgMTApCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NMQVZFCQkoMiA8PCAxMCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0sJKDMgPDwgMTApCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZCSgwIDw8IDgpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZCSgxIDw8IDgpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWAkoMiA8PCA4KQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0sJKDMgPDwgOCkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTFJfTExPVwkJKDAgPDwgNykKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTFJfUkxPVwkJKDEgPDwgNykKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX0lJUwkJKDAgPDwgNSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX01TQgkJKDEgPDwgNSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX0xTQgkJKDIgPDwgNSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX01BU0sJCSgzIDw8IDUpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1JDTEtfMjU2RlMJKDAgPDwgMykKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfUkNMS181MTJGUwkoMSA8PCAzKQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9SQ0xLXzM4NEZTCSgyIDw8IDMpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1JDTEtfNzY4RlMJKDMgPDwgMykKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfUkNMS19NQVNLIAkoMyA8PCAzKQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9CQ0xLXzMyRlMJKDAgPDwgMSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfQkNMS180OEZTCSgxIDw8IDEpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EX0JDTEtfMTZGUwkoMiA8PCAxKQorI2RlZmluZSBTM0MyNDEyX0lJU01PRF9CQ0xLXzI0RlMJKDMgPDwgMSkKKyNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfQkNMS19NQVNLCSgzIDw8IDEpCisjZGVmaW5lIFMzQzI0MTJfSUlTTU9EXzhCSVQJCSgxIDw8IDApCisKKyNkZWZpbmUgUzNDMjQxMl9JSVNQU1JfUFNSRU4JCSgxIDw8IDE1KQorCisjZGVmaW5lIFMzQzI0MTJfSUlTRklDX1RYRkxVU0gJCSgxIDw8IDE1KQorI2RlZmluZSBTM0MyNDEyX0lJU0ZJQ19SWEZMVVNICQkoMSA8PCA3KQorI2RlZmluZSBTM0MyNDEyX0lJU0ZJQ19UWENPVU5UKHgpCSgoKHgpID4+ICA4KSAmIDB4ZikKKyNkZWZpbmUgUzNDMjQxMl9JSVNGSUNfUlhDT1VOVCh4KQkoKCh4KSA+PiAgMCkgJiAweGYpCisKKworCisjZW5kaWYgLyogX19BU01fQVJDSF9SRUdTX1MzQzI0MTJfSUlTX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKaW5kZXggNjA2MWRlOC4uZGM2NmE0NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCkBAIC05MCw3ICs5MCwxMCBAQAogewogfQogCi0jZGVmaW5lIF9fcmF3X3dyaXRlbChkLGFkKSBkbyB7ICooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShhZCkpID0gKGQpOyB9IHdoaWxlKDApCisjZGVmaW5lIF9fcmF3X3dyaXRlbChkLCBhZCkJCQlcCisJZG8gewkJCQkJCQlcCisJCSooKHZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICopKGFkKSkgPSAoZCk7IFwKKwl9IHdoaWxlICgwKQogCiAvKiBDT05GSUdfUzNDX0JPT1RfV0FUQ0hET0cKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMmM4N2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaApAQCAtMCwwICsxLDQxIEBACisvKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgLSBVU0IgaG9zdCBwb3J0IGluZm9ybWF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9VU0JDT05UUk9MX0gKKyNkZWZpbmUgX19BU01fQVJDSF9VU0JDT05UUk9MX0gKKworI2RlZmluZSBTM0NfSENERkxHX1VTRUQJKDEpCisKK3N0cnVjdCBzM2MyNDEwX2hjZF9wb3J0IHsKKwl1bnNpZ25lZCBjaGFyCWZsYWdzOworCXVuc2lnbmVkIGNoYXIJcG93ZXI7CisJdW5zaWduZWQgY2hhcglvY19zdGF0dXM7CisJdW5zaWduZWQgY2hhcglvY19jaGFuZ2VkOworfTsKKworc3RydWN0IHMzYzI0MTBfaGNkX2luZm8geworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCXN0cnVjdCBzM2MyNDEwX2hjZF9wb3J0CXBvcnRbMl07CisKKwl2b2lkCQkoKnBvd2VyX2NvbnRyb2wpKGludCBwb3J0LCBpbnQgdG8pOworCXZvaWQJCSgqZW5hYmxlX29jKShzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqLCBpbnQgb24pOworCXZvaWQJCSgqcmVwb3J0X29jKShzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqLCBpbnQgcG9ydHMpOworfTsKKworc3RhdGljIHZvaWQgaW5saW5lIHMzYzI0MTBfdXNiX3JlcG9ydF9vYyhzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqaW5mbywgaW50IHBvcnRzKQoreworCWlmIChpbmZvLT5yZXBvcnRfb2MgIT0gTlVMTCkgeworCQkoaW5mby0+cmVwb3J0X29jKShpbmZvLCBwb3J0cyk7CisJfQorfQorCisjZW5kaWYgLypfX0FTTV9BUkNIX1VTQkNPTlRST0xfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvcG0tY2hlY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjL3BtLWNoZWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmMjU1NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjL3BtLWNoZWNrLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL3BtLWNoZWNrLmMKKyAqICBvcmlnaW5hbGx5IGluIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LDIwMDYsMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgUG93ZXIgTWFuZ2FtZW50IC0gc3VzcGVuZC9yZXN1bWUgbWVtb3J5IGNvcnJ1cHRpdW9uIGNoZWNrLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8cGxhdC9wbS5oPgorCisjaWYgQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFIDwgMQorI2Vycm9yIENPTkZJR19TM0MyNDEwX1BNX0NIRUNLX0NIVU5LU0laRSBtdXN0IGJlIGEgcG9zaXRpdmUgbm9uLXplcm8gdmFsdWUKKyNlbmRpZgorCisvKiBzdXNwZW5kIGNoZWNraW5nIGNvZGUuLi4KKyAqCisgKiB0aGlzIG5leHQgYXJlYSBkb2VzIGEgc2V0IG9mIGNyYyBjaGVja3Mgb3ZlciBhbGwgdGhlIGluc3RhbGxlZAorICogbWVtb3J5LCBzbyB0aGUgc3lzdGVtIGNhbiB2ZXJpZnkgaWYgdGhlIHJlc3VtZSB3YXMgb2suCisgKgorICogQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFIGRlZmluZXMgdGhlIGJsb2NrLXNpemUgZm9yIHRoZSBDUkMsCisgKiBpbmNyZWFzaW5nIGl0IHdpbGwgbWVhbiB0aGF0IHRoZSBhcmVhIGNvcnJ1cHRlZCB3aWxsIGJlIGxlc3MgZWFzeSB0byBzcG90LAorICogYW5kIHJlZHVjaW5nIHRoZSBzaXplIHdpbGwgY2F1c2UgdGhlIENSQyBzYXZlIGFyZWEgdG8gZ3JvdworKi8KKworI2RlZmluZSBDSEVDS19DSFVOS1NJWkUgKENPTkZJR19TM0MyNDEwX1BNX0NIRUNLX0NIVU5LU0laRSAqIDEwMjQpCisKK3N0YXRpYyB1MzIgY3JjX3NpemU7CS8qIHNpemUgbmVlZGVkIGZvciB0aGUgY3JjIGJsb2NrICovCitzdGF0aWMgdTMyICpjcmNzOwkvKiBhbGxvY2F0ZWQgb3ZlciBzdXNwZW5kL3Jlc3VtZSAqLworCit0eXBlZGVmIHUzMiAqKHJ1bl9mbl90KShzdHJ1Y3QgcmVzb3VyY2UgKnB0ciwgdTMyICphcmcpOworCisvKiBzM2NfcG1fcnVuX3JlcworICoKKyAqIGdvIHRocm91Z2ggdGhlIGdpdmVuIHJlc291cmNlIGxpc3QsIGFuZCBsb29rIGZvciBzeXN0ZW0gcmFtCisqLworCitzdGF0aWMgdm9pZCBzM2NfcG1fcnVuX3JlcyhzdHJ1Y3QgcmVzb3VyY2UgKnB0ciwgcnVuX2ZuX3QgZm4sIHUzMiAqYXJnKQoreworCXdoaWxlIChwdHIgIT0gTlVMTCkgeworCQlpZiAocHRyLT5jaGlsZCAhPSBOVUxMKQorCQkJczNjX3BtX3J1bl9yZXMocHRyLT5jaGlsZCwgZm4sIGFyZyk7CisKKwkJaWYgKChwdHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICYmCisJCSAgICBzdHJjbXAocHRyLT5uYW1lLCAiU3lzdGVtIFJBTSIpID09IDApIHsKKwkJCVMzQ19QTURCRygiRm91bmQgc3lzdGVtIFJBTSBhdCAlMDhseC4uJTA4bHhcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZylwdHItPnN0YXJ0LAorCQkJCSAgKHVuc2lnbmVkIGxvbmcpcHRyLT5lbmQpOworCQkJYXJnID0gKGZuKShwdHIsIGFyZyk7CisJCX0KKworCQlwdHIgPSBwdHItPnNpYmxpbmc7CisJfQorfQorCitzdGF0aWMgdm9pZCBzM2NfcG1fcnVuX3N5c3JhbShydW5fZm5fdCBmbiwgdTMyICphcmcpCit7CisJczNjX3BtX3J1bl9yZXMoJmlvbWVtX3Jlc291cmNlLCBmbiwgYXJnKTsKK30KKworc3RhdGljIHUzMiAqczNjX3BtX2NvdW50cmFtKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKK3sKKwl1MzIgc2l6ZSA9ICh1MzIpKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkrMTsKKworCXNpemUgKz0gQ0hFQ0tfQ0hVTktTSVpFLTE7CisJc2l6ZSAvPSBDSEVDS19DSFVOS1NJWkU7CisKKwlTM0NfUE1EQkcoIkFyZWEgJTA4bHguLiUwOGx4LCAlZCBibG9ja3NcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcpcmVzLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcpcmVzLT5lbmQsIHNpemUpOworCisJKnZhbCArPSBzaXplICogc2l6ZW9mKHUzMik7CisJcmV0dXJuIHZhbDsKK30KKworLyogczNjX3BtX3ByZXBhcmVfY2hlY2sKKyAqCisgKiBwcmVwYXJlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIGNyZWF0aW5nIHRoZSBDUkNzLiBUaGlzCisgKiBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBmaW5hbCBzYXZlLCBhcyBpdCB3aWxsIHJlcXVpcmUgbWVtb3J5CisgKiBhbGxvY2F0aW5nLCBhbmQgdGh1cyB0b3VjaGluZyBiaXRzIG9mIHRoZSBrZXJuZWwgd2UgZG8gbm90CisgKiBrbm93IGFib3V0LgorKi8KKwordm9pZCBzM2NfcG1fY2hlY2tfcHJlcGFyZSh2b2lkKQoreworCWNyY19zaXplID0gMDsKKworCXMzY19wbV9ydW5fc3lzcmFtKHMzY19wbV9jb3VudHJhbSwgJmNyY19zaXplKTsKKworCVMzQ19QTURCRygiczNjX3BtX3ByZXBhcmVfY2hlY2s6ICV1IGNoZWNrcyBuZWVkZWRcbiIsIGNyY19zaXplKTsKKworCWNyY3MgPSBrbWFsbG9jKGNyY19zaXplKzQsIEdGUF9LRVJORUwpOworCWlmIChjcmNzID09IE5VTEwpCisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGFsbG9jYXRlZCBDUkMgc2F2ZSBhcmVhXG4iKTsKK30KKworc3RhdGljIHUzMiAqczNjX3BtX21ha2VjaGVjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBsZWZ0OworCisJZm9yIChhZGRyID0gcmVzLT5zdGFydDsgYWRkciA8IHJlcy0+ZW5kOworCSAgICAgYWRkciArPSBDSEVDS19DSFVOS1NJWkUpIHsKKwkJbGVmdCA9IHJlcy0+ZW5kIC0gYWRkcjsKKworCQlpZiAobGVmdCA+IENIRUNLX0NIVU5LU0laRSkKKwkJCWxlZnQgPSBDSEVDS19DSFVOS1NJWkU7CisKKwkJKnZhbCA9IGNyYzMyX2xlKH4wLCBwaHlzX3RvX3ZpcnQoYWRkciksIGxlZnQpOworCQl2YWwrKzsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorCisvKiBzM2NfcG1fY2hlY2tfc3RvcmUKKyAqCisgKiBjb21wdXRlIHRoZSBDUkMgdmFsdWVzIGZvciB0aGUgbWVtb3J5IGJsb2NrcyBiZWZvcmUgdGhlIGZpbmFsCisgKiBzbGVlcC4KKyovCisKK3ZvaWQgczNjX3BtX2NoZWNrX3N0b3JlKHZvaWQpCit7CisJaWYgKGNyY3MgIT0gTlVMTCkKKwkJczNjX3BtX3J1bl9zeXNyYW0oczNjX3BtX21ha2VjaGVjaywgY3Jjcyk7Cit9CisKKy8qIGluX3JlZ2lvbgorICoKKyAqIHJldHVybiBUUlVFIGlmIHRoZSBhcmVhIGRlZmluZWQgYnkgcHRyLi5wdHIrc2l6ZSBjb250YWlucyB0aGUKKyAqIHdoYXQuLndoYXQrd2hhdHN6CisqLworCitzdGF0aWMgaW5saW5lIGludCBpbl9yZWdpb24odm9pZCAqcHRyLCBpbnQgc2l6ZSwgdm9pZCAqd2hhdCwgc2l6ZV90IHdoYXRzeikKK3sKKwlpZiAoKHdoYXQrd2hhdHN6KSA8IHB0cikKKwkJcmV0dXJuIDA7CisKKwlpZiAod2hhdCA+IChwdHIrc2l6ZSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogczNjX3BtX3J1bmNoZWNrKCkgLSBoZWxwZXIgdG8gY2hlY2sgYSByZXNvdXJjZSBvbiByZXN0b3JlLgorICogQHJlczogVGhlIHJlc291cmNlIHRvIGNoZWNrCisgKiBAdmFrOiBQb2ludGVyIHRvIGxpc3Qgb2YgQ1JDMzIgdmFsdWVzIHRvIGNoZWNrLgorICoKKyAqIENhbGxlZCBmcm9tIHRoZSBzM2NfcG1fY2hlY2tfcmVzdG9yZSgpIHZpYSBzM2NfcG1fcnVuX3N5c3JhbSgpLCB0aGlzCisgKiBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBtZW1vcnkgcmVzb3VyY2UgY2hlY2tpbmcgaXQgYWdhaW5zdCB0aGUgc3RvcmVkCisgKiBDUkMgdG8gZW5zdXJlIHRoYXQgbWVtb3J5IGlzIHJlc3RvcmVkLiBUaGUgZnVuY3Rpb24gdHJpZXMgdG8gc2tpcCBhcworICogbWFueSBvZiB0aGUgYXJlYXMgdXNlZCBkdXJpbmcgdGhlIHN1c3BlbmQgcHJvY2Vzcy4KKyAqLworc3RhdGljIHUzMiAqczNjX3BtX3J1bmNoZWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKK3sKKwl2b2lkICpzYXZlX2F0ID0gcGh5c190b192aXJ0KHMzY19zbGVlcF9zYXZlX3BoeXMpOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGxlZnQ7CisJdm9pZCAqc3RrcGFnZTsKKwl2b2lkICpwdHI7CisJdTMyIGNhbGM7CisKKwlzdGtwYWdlID0gKHZvaWQgKikoKHUzMikmY2FsYyAmIH5QQUdFX01BU0spOworCisJZm9yIChhZGRyID0gcmVzLT5zdGFydDsgYWRkciA8IHJlcy0+ZW5kOworCSAgICAgYWRkciArPSBDSEVDS19DSFVOS1NJWkUpIHsKKwkJbGVmdCA9IHJlcy0+ZW5kIC0gYWRkcjsKKworCQlpZiAobGVmdCA+IENIRUNLX0NIVU5LU0laRSkKKwkJCWxlZnQgPSBDSEVDS19DSFVOS1NJWkU7CisKKwkJcHRyID0gcGh5c190b192aXJ0KGFkZHIpOworCisJCWlmIChpbl9yZWdpb24ocHRyLCBsZWZ0LCBzdGtwYWdlLCA0MDk2KSkgeworCQkJUzNDX1BNREJHKCJza2lwcGluZyAlMDhseCwgaGFzIHN0YWNrIGluXG4iLCBhZGRyKTsKKwkJCWdvdG8gc2tpcF9jaGVjazsKKwkJfQorCisJCWlmIChpbl9yZWdpb24ocHRyLCBsZWZ0LCBjcmNzLCBjcmNfc2l6ZSkpIHsKKwkJCVMzQ19QTURCRygic2tpcHBpbmcgJTA4bHgsIGhhcyBjcmMgYmxvY2sgaW5cbiIsIGFkZHIpOworCQkJZ290byBza2lwX2NoZWNrOworCQl9CisKKwkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIHNhdmVfYXQsIDMyKjQgKSkgeworCQkJUzNDX1BNREJHKCJza2lwcGluZyAlMDhseCwgaGFzIHNhdmUgYmxvY2sgaW5cbiIsIGFkZHIpOworCQkJZ290byBza2lwX2NoZWNrOworCQl9CisKKwkJLyogY2FsY3VsYXRlIGFuZCBjaGVjayB0aGUgY2hlY2tzdW0gKi8KKworCQljYWxjID0gY3JjMzJfbGUofjAsIHB0ciwgbGVmdCk7CisJCWlmIChjYWxjICE9ICp2YWwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiUmVzdG9yZSBDUkMgZXJyb3IgYXQgIgorCQkJICAgICAgICIlMDhseCAoJTA4eCB2cyAlMDh4KVxuIiwgYWRkciwgY2FsYywgKnZhbCk7CisKKwkJCVMzQ19QTURCRygiUmVzdG9yZSBDUkMgZXJyb3IgYXQgJTA4bHggKCUwOHggdnMgJTA4eClcbiIsCisJCQkgICAgYWRkciwgY2FsYywgKnZhbCk7CisJCX0KKworCXNraXBfY2hlY2s6CisJCXZhbCsrOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qKgorICogczNjX3BtX2NoZWNrX3Jlc3RvcmUoKSAtIG1lbW9yeSBjaGVjayBjYWxsZWQgb24gcmVzdW1lCisgKgorICogY2hlY2sgdGhlIENSQ3MgYWZ0ZXIgdGhlIHJlc3RvcmUgZXZlbnQgYW5kIGZyZWUgdGhlIG1lbW9yeSB1c2VkCisgKiB0byBob2xkIHRoZW0KKyovCit2b2lkIHMzY19wbV9jaGVja19yZXN0b3JlKHZvaWQpCit7CisJaWYgKGNyY3MgIT0gTlVMTCkKKwkJczNjX3BtX3J1bl9zeXNyYW0oczNjX3BtX3J1bmNoZWNrLCBjcmNzKTsKK30KKworLyoqCisgKiBzM2NfcG1fY2hlY2tfY2xlYW51cCgpIC0gZnJlZSBtZW1vcnkgcmVzb3VyY2VzCisgKgorICogRnJlZSB0aGUgcmVzb3VyY2VzIHRoYXQgd2hlcmUgYWxsb2NhdGVkIGJ5IHRoZSBzdXNwZW5kCisgKiBtZW1vcnkgY2hlY2sgY29kZS4gV2UgZG8gdGhpcyBzZXBhcmF0ZWx5IGZyb20gdGhlCisgKiBzM2NfcG1fY2hlY2tfcmVzdG9yZSgpIGZ1bmN0aW9uIGFzIHdlIGNhbm5vdCBjYWxsIGFueQorICogZnVuY3Rpb25zIHRoYXQgbWlnaHQgc2xlZXAgZHVyaW5nIHRoYXQgcmVzdW1lLgorICovCit2b2lkIHMzY19wbV9jaGVja19jbGVhbnVwKHZvaWQpCit7CisJa2ZyZWUoY3Jjcyk7CisJY3JjcyA9IE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL3BtLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MTE4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYy9wbS5jCkBAIC0wLDAgKzEsMzYzIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYy9wbS5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA0LDIwMDYsMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDIGNvbW1vbiBwb3dlciBtYW5hZ2VtZW50IChzdXNwZW5kIHRvIHJhbSkgc3VwcG9ydC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9wbS1jb3JlLmg+CisKKy8qIGZvciBleHRlcm5hbCB1c2UgKi8KKwordW5zaWduZWQgbG9uZyBzM2NfcG1fZmxhZ3M7CisKKy8qIERlYnVnIGNvZGU6CisgKgorICogVGhpcyBjb2RlIHN1cHBvcnRzIGRlYnVnIG91dHB1dCB0byB0aGUgbG93IGxldmVsIFVBUlRzIGZvciB1c2Ugb24KKyAqIHJlc3VtZSBiZWZvcmUgdGhlIGNvbnNvbGUgbGF5ZXIgaXMgYXZhaWxhYmxlLgorKi8KKworI2lmZGVmIENPTkZJR19TM0MyNDEwX1BNX0RFQlVHCitleHRlcm4gdm9pZCBwcmludGFzY2lpKGNvbnN0IGNoYXIgKik7CisKK3ZvaWQgczNjX3BtX2RiZyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IHZhOworCWNoYXIgYnVmZlsyNTZdOworCisJdmFfc3RhcnQodmEsIGZtdCk7CisJdnNwcmludGYoYnVmZiwgZm10LCB2YSk7CisJdmFfZW5kKHZhKTsKKworCXByaW50YXNjaWkoYnVmZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fZGVidWdfaW5pdCh2b2lkKQoreworCS8qIHJlc3RhcnQgdWFydCBjbG9ja3Mgc28gd2UgY2FuIHVzZSB0aGVtIHRvIG91dHB1dCAqLworCXMzY19wbV9kZWJ1Z19pbml0X3VhcnQoKTsKK30KKworI2Vsc2UKKyNkZWZpbmUgczNjX3BtX2RlYnVnX2luaXQoKSBkbyB7IH0gd2hpbGUoMCkKKworI2VuZGlmIC8qIENPTkZJR19TM0MyNDEwX1BNX0RFQlVHICovCisKKy8qIFNhdmUgdGhlIFVBUlQgY29uZmlndXJhdGlvbnMgaWYgd2UgYXJlIGNvbmZpZ3VyZWQgZm9yIGRlYnVnLiAqLworCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKKworc3RydWN0IHBtX3VhcnRfc2F2ZSB1YXJ0X3NhdmVbQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTXTsKKworc3RhdGljIHZvaWQgczNjX3BtX3NhdmVfdWFydCh1bnNpZ25lZCBpbnQgdWFydCwgc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBTM0NfVkFfVUFSVHgodWFydCk7CisKKwlzYXZlLT51bGNvbiA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0MyNDEwX1VMQ09OKTsKKwlzYXZlLT51Y29uID0gX19yYXdfcmVhZGwocmVncyArIFMzQzI0MTBfVUNPTik7CisJc2F2ZS0+dWZjb24gPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDMjQxMF9VRkNPTik7CisJc2F2ZS0+dW1jb24gPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDMjQxMF9VTUNPTik7CisJc2F2ZS0+dWJyZGl2ID0gX19yYXdfcmVhZGwocmVncyArIFMzQzI0MTBfVUJSRElWKTsKK30KKworc3RhdGljIHZvaWQgczNjX3BtX3NhdmVfdWFydHModm9pZCkKK3sKKwlzdHJ1Y3QgcG1fdWFydF9zYXZlICpzYXZlID0gdWFydF9zYXZlOworCXVuc2lnbmVkIGludCB1YXJ0OworCisJZm9yICh1YXJ0ID0gMDsgdWFydCA8IENPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUUzsgdWFydCsrLCBzYXZlKyspCisJCXMzY19wbV9zYXZlX3VhcnQodWFydCwgc2F2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19wbV9yZXN0b3JlX3VhcnQodW5zaWduZWQgaW50IHVhcnQsIHN0cnVjdCBwbV91YXJ0X3NhdmUgKnNhdmUpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gUzNDX1ZBX1VBUlR4KHVhcnQpOworCisJX19yYXdfd3JpdGVsKHNhdmUtPnVsY29uLCByZWdzICsgUzNDMjQxMF9VTENPTik7CisJX19yYXdfd3JpdGVsKHNhdmUtPnVjb24sICByZWdzICsgUzNDMjQxMF9VQ09OKTsKKwlfX3Jhd193cml0ZWwoc2F2ZS0+dWZjb24sIHJlZ3MgKyBTM0MyNDEwX1VGQ09OKTsKKwlfX3Jhd193cml0ZWwoc2F2ZS0+dW1jb24sIHJlZ3MgKyBTM0MyNDEwX1VNQ09OKTsKKwlfX3Jhd193cml0ZWwoc2F2ZS0+dWJyZGl2LCByZWdzICsgUzNDMjQxMF9VQlJESVYpOworfQorCitzdGF0aWMgdm9pZCBzM2NfcG1fcmVzdG9yZV91YXJ0cyh2b2lkKQoreworCXN0cnVjdCBwbV91YXJ0X3NhdmUgKnNhdmUgPSB1YXJ0X3NhdmU7CisJdW5zaWduZWQgaW50IHVhcnQ7CisKKwlmb3IgKHVhcnQgPSAwOyB1YXJ0IDwgQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTOyB1YXJ0KyssIHNhdmUrKykKKwkJczNjX3BtX3Jlc3RvcmVfdWFydCh1YXJ0LCBzYXZlKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBzM2NfcG1fc2F2ZV91YXJ0cyh2b2lkKSB7IH0KK3N0YXRpYyB2b2lkIHMzY19wbV9yZXN0b3JlX3VhcnRzKHZvaWQpIHsgfQorI2VuZGlmCisKKy8qIFRoZSBJUlEgZXh0LWludCBjb2RlIGdvZXMgaGVyZSwgaXQgaXMgdG9vIHNtYWxsIHRvIGN1cnJlbnRseSBib3RoZXIKKyAqIHdpdGggaXRzIG93biBmaWxlLiAqLworCit1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludG1hc2sJPSAweGZmZmZmZmZmTDsKK3Vuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludG1hc2sJPSAweGZmZmZmZmZmTDsKKworaW50IHMzY19pcnFleHRfd2FrZSh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGJpdCA9IDFMIDw8IElSUV9FSU5UX0JJVChpcnFubyk7CisKKwlpZiAoIShzM2NfaXJxd2FrZV9laW50YWxsb3cgJiBiaXQpKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXByaW50ayhLRVJOX0lORk8gIndha2UgJXMgZm9yIGlycSAlZFxuIiwKKwkgICAgICAgc3RhdGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBpcnFubyk7CisKKwlpZiAoIXN0YXRlKQorCQlzM2NfaXJxd2FrZV9laW50bWFzayB8PSBiaXQ7CisJZWxzZQorCQlzM2NfaXJxd2FrZV9laW50bWFzayAmPSB+Yml0OworCisJcmV0dXJuIDA7Cit9CisKKy8qIGhlbHBlciBmdW5jdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlciBzdGF0ZSAqLworCisvKioKKyAqIHMzY19wbV9kb19zYXZlKCkgLSBzYXZlIGEgc2V0IG9mIHJlZ2lzdGVycyBmb3IgcmVzdG9yYXRpb24gb24gcmVzdW1lLgorICogQHB0cjogUG9pbnRlciB0byBhbiBhcnJheSBvZiByZWdpc3RlcnMuCisgKiBAY291bnQ6IFNpemUgb2YgdGhlIHB0ciBhcnJheS4KKyAqCisgKiBSdW4gdGhyb3VnaCB0aGUgbGlzdCBvZiByZWdpc3RlcnMgZ2l2ZW4sIHNhdmluZyB0aGVpciBjb250ZW50cyBpbiB0aGUKKyAqIGFycmF5IGZvciBsYXRlciByZXN0b3JhdGlvbiB3aGVuIHdlIHdha2V1cC4KKyAqLwordm9pZCBzM2NfcG1fZG9fc2F2ZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpCit7CisJZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSwgcHRyKyspIHsKKwkJcHRyLT52YWwgPSBfX3Jhd19yZWFkbChwdHItPnJlZyk7CisJCVMzQ19QTURCRygic2F2ZWQgJXAgdmFsdWUgJTA4bHhcbiIsIHB0ci0+cmVnLCBwdHItPnZhbCk7CisJfQorfQorCisvKioKKyAqIHMzY19wbV9kb19yZXN0b3JlKCkgLSByZXN0b3JlIHJlZ2lzdGVyIHZhbHVlcyBmcm9tIHRoZSBzYXZlIGxpc3QuCisgKiBAcHRyOiBQb2ludGVyIHRvIGFuIGFycmF5IG9mIHJlZ2lzdGVycy4KKyAqIEBjb3VudDogU2l6ZSBvZiB0aGUgcHRyIGFycmF5LgorICoKKyAqIFJlc3RvcmUgdGhlIHJlZ2lzdGVyIHZhbHVlcyBzYXZlZCBmcm9tIHMzY19wbV9kb19zYXZlKCkuCisgKgorICogTm90ZSwgd2UgZG8gbm90IHVzZSBTM0NfUE1EQkcoKSBpbiBoZXJlLCBhcyB0aGUgc3lzdGVtIG1heSBub3QgaGF2ZQorICogcmVzdG9yZSB0aGUgVUFSVHMgc3RhdGUgeWV0CisqLworCit2b2lkIHMzY19wbV9kb19yZXN0b3JlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKK3sKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykgeworCQlwcmludGsoS0VSTl9ERUJVRyAicmVzdG9yZSAlcCAocmVzdG9yZSAlMDhseCwgd2FzICUwOHgpXG4iLAorCQkgICAgICAgcHRyLT5yZWcsIHB0ci0+dmFsLCBfX3Jhd19yZWFkbChwdHItPnJlZykpOworCisJCV9fcmF3X3dyaXRlbChwdHItPnZhbCwgcHRyLT5yZWcpOworCX0KK30KKworLyoqCisgKiBzM2NfcG1fZG9fcmVzdG9yZV9jb3JlKCkgLSBlYXJseSByZXN0b3JlIHJlZ2lzdGVyIHZhbHVlcyBmcm9tIHNhdmUgbGlzdC4KKyAqCisgKiBUaGlzIGlzIHNpbWlsYXIgdG8gczNjX3BtX2RvX3Jlc3RvcmUoKSBleGNlcHQgd2UgdHJ5IGFuZCBtaW5pbWlzZSB0aGUKKyAqIHNpZGUgZWZmZWN0cyBvZiB0aGUgZnVuY3Rpb24gaW4gY2FzZSByZWdpc3RlcnMgdGhhdCBoYXJkd2FyZSBtaWdodCBuZWVkCisgKiB0byB3b3JrIGhhcyBiZWVuIHJlc3RvcmVkLgorICoKKyAqIFdBUk5JTkc6IERvIG5vdCBwdXQgYW55IGRlYnVnIGluIGhlcmUgdGhhdCBtYXkgZWZmZWN0IG1lbW9yeSBvciB1c2UKKyAqIHBlcmlwaGVyYWxzLCBhcyB0aGluZ3MgbWF5IGJlIGNoYW5naW5nIQorKi8KKwordm9pZCBzM2NfcG1fZG9fcmVzdG9yZV9jb3JlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKK3sKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykKKwkJX19yYXdfd3JpdGVsKHB0ci0+dmFsLCBwdHItPnJlZyk7Cit9CisKKy8qIHMzYzI0MTBfcG1fc2hvd19yZXN1bWVfaXJxcworICoKKyAqIHByaW50IGFueSBJUlFzIGFzc2VydGVkIGF0IHJlc3VtZSB0aW1lIChpZSwgd2Ugd29rZSBmcm9tKQorKi8KK3N0YXRpYyB2b2lkIHMzY19wbV9zaG93X3Jlc3VtZV9pcnFzKGludCBzdGFydCwgdW5zaWduZWQgbG9uZyB3aGljaCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBtYXNrKQoreworCWludCBpOworCisJd2hpY2ggJj0gfm1hc2s7CisKKwlmb3IgKGkgPSAwOyBpIDw9IDMxOyBpKyspIHsKKwkJaWYgKHdoaWNoICYgKDFMPDxpKSkgeworCQkJUzNDX1BNREJHKCJJUlEgJWQgYXNzZXJ0ZWQgYXQgcmVzdW1lXG4iLCBzdGFydCtpKTsKKwkJfQorCX0KK30KKworCit2b2lkICgqcG1fY3B1X3ByZXApKHZvaWQpOwordm9pZCAoKnBtX2NwdV9zbGVlcCkodm9pZCk7CisKKyNkZWZpbmUgYW55X2FsbG93ZWQobWFzaywgYWxsb3cpICgoKG1hc2spICYgKGFsbG93KSkgIT0gKGFsbG93KSkKKworLyogczNjX3BtX2VudGVyCisgKgorICogY2VudHJhbCBjb250cm9sIGZvciBzbGVlcC9yZXN1bWUgcHJvY2VzcworKi8KKworc3RhdGljIGludCBzM2NfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlZ3Nfc2F2ZVsxNl07CisKKwkvKiBlbnN1cmUgdGhlIGRlYnVnIGlzIGluaXRpYWxpc2VkIChpZiBlbmFibGVkKSAqLworCisJczNjX3BtX2RlYnVnX2luaXQoKTsKKworCVMzQ19QTURCRygiJXMoJWQpXG4iLCBfX2Z1bmNfXywgc3RhdGUpOworCisJaWYgKHBtX2NwdV9wcmVwID09IE5VTEwgfHwgcG1fY3B1X3NsZWVwID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3I6IG5vIGNwdSBzbGVlcCBmdW5jdGlvblxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBpZiB3ZSBoYXZlIGFueXRoaW5nIHRvIHdha2UtdXAgd2l0aC4uLiBiYWQgdGhpbmdzIHNlZW0KKwkgKiB0byBoYXBwZW4gaWYgeW91IHN1c3BlbmQgd2l0aCBubyB3YWtldXAgKHN5c3RlbSB3aWxsIG9mdGVuCisJICogcmVxdWlyZSBhIGZ1bGwgcG93ZXItY3ljbGUpCisJKi8KKworCWlmICghYW55X2FsbG93ZWQoczNjX2lycXdha2VfaW50bWFzaywgczNjX2lycXdha2VfaW50YWxsb3cpICYmCisJICAgICFhbnlfYWxsb3dlZChzM2NfaXJxd2FrZV9laW50bWFzaywgczNjX2lycXdha2VfZWludGFsbG93KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBObyB3YWtlLXVwIHNvdXJjZXMhXG4iLCBfX2Z1bmNfXyk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEFib3J0aW5nIHNsZWVwXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHN0b3JlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciByZWNvdmVyeSBibG9jayAqLworCisJczNjX3NsZWVwX3NhdmVfcGh5cyA9IHZpcnRfdG9fcGh5cyhyZWdzX3NhdmUpOworCisJUzNDX1BNREJHKCJzM2Nfc2xlZXBfc2F2ZV9waHlzPTB4JTA4bHhcbiIsIHMzY19zbGVlcF9zYXZlX3BoeXMpOworCisJLyogc2F2ZSBhbGwgbmVjZXNzYXJ5IGNvcmUgcmVnaXN0ZXJzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBkcml2ZXJzICovCisKKwlzM2NfcG1fc2F2ZV9ncGlvcygpOworCXMzY19wbV9zYXZlX3VhcnRzKCk7CisJczNjX3BtX3NhdmVfY29yZSgpOworCisJLyogc2V0IHRoZSBpcnEgY29uZmlndXJhdGlvbiBmb3Igd2FrZSAqLworCisJczNjX3BtX2NvbmZpZ3VyZV9leHRpbnQoKTsKKworCVMzQ19QTURCRygic2xlZXA6IGlycSB3YWtldXAgbWFza3M6ICUwOGx4LCUwOGx4XG4iLAorCSAgICBzM2NfaXJxd2FrZV9pbnRtYXNrLCBzM2NfaXJxd2FrZV9laW50bWFzayk7CisKKwlzM2NfcG1fYXJjaF9wcmVwYXJlX2lycXMoKTsKKworCS8qIGNhbGwgY3B1IHNwZWNpZmljIHByZXBhcmF0aW9uICovCisKKwlwbV9jcHVfcHJlcCgpOworCisJLyogZmx1c2ggY2FjaGUgYmFjayB0byByYW0gKi8KKworCWZsdXNoX2NhY2hlX2FsbCgpOworCisJczNjX3BtX2NoZWNrX3N0b3JlKCk7CisKKwkvKiBzZW5kIHRoZSBjcHUgdG8gc2xlZXAuLi4gKi8KKworCXMzY19wbV9hcmNoX3N0b3BfY2xvY2tzKCk7CisKKwkvKiBzM2NfY3B1X3NhdmUgd2lsbCBhbHNvIGFjdCBhcyBvdXIgcmV0dXJuIHBvaW50IGZyb20gd2hlbgorCSAqIHdlIHJlc3VtZSBhcyBpdCBzYXZlcyBpdHMgb3duIHJlZ2lzdGVyIHN0YXRlIGFuZCByZXN0b3JlcyBpdAorCSAqIGR1cmluZyB0aGUgcmVzdW1lLiAgKi8KKworCXMzY19jcHVfc2F2ZShyZWdzX3NhdmUpOworCisJLyogcmVzdG9yZSB0aGUgY3B1IHN0YXRlIHVzaW5nIHRoZSBrZXJuZWwncyBjcHUgaW5pdCBjb2RlLiAqLworCisJY3B1X2luaXQoKTsKKworCS8qIHJlc3RvcmUgdGhlIHN5c3RlbSBzdGF0ZSAqLworCisJczNjX3BtX3Jlc3RvcmVfY29yZSgpOworCXMzY19wbV9yZXN0b3JlX3VhcnRzKCk7CisJczNjX3BtX3Jlc3RvcmVfZ3Bpb3MoKTsKKworCXMzY19wbV9kZWJ1Z19pbml0KCk7CisKKwkvKiBjaGVjayB3aGF0IGlycSAoaWYgYW55KSByZXN0b3JlZCB0aGUgc3lzdGVtICovCisKKwlzM2NfcG1fYXJjaF9zaG93X3Jlc3VtZV9pcnFzKCk7CisKKwlTM0NfUE1EQkcoIiVzOiBwb3N0IHNsZWVwLCBwcmVwYXJpbmcgdG8gcmV0dXJuXG4iLCBfX2Z1bmNfXyk7CisKKwlzM2NfcG1fY2hlY2tfcmVzdG9yZSgpOworCisJLyogb2ssIGxldCdzIHJldHVybiBmcm9tIHNsZWVwICovCisKKwlTM0NfUE1EQkcoIlMzQyBQTSBSZXN1bWUgKHBvc3QtcmVzdG9yZSlcbiIpOworCXJldHVybiAwOworfQorCisvKiBjYWxsYmFjayBmcm9tIGFzc2VtYmx5IGNvZGUgKi8KK3ZvaWQgczNjX3BtX2NiX2ZsdXNoY2FjaGUodm9pZCkKK3sKKwlmbHVzaF9jYWNoZV9hbGwoKTsKK30KKworc3RhdGljIGludCBzM2NfcG1fcHJlcGFyZSh2b2lkKQoreworCS8qIHByZXBhcmUgY2hlY2sgYXJlYSBpZiBjb25maWd1cmVkICovCisKKwlzM2NfcG1fY2hlY2tfcHJlcGFyZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzM2NfcG1fZmluaXNoKHZvaWQpCit7CisJczNjX3BtX2NoZWNrX2NsZWFudXAoKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBzM2NfcG1fb3BzID0geworCS5lbnRlcgkJPSBzM2NfcG1fZW50ZXIsCisJLnByZXBhcmUJPSBzM2NfcG1fcHJlcGFyZSwKKwkuZmluaXNoCQk9IHMzY19wbV9maW5pc2gsCisJLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCit9OworCisvKiBzM2NfcG1faW5pdAorICoKKyAqIEF0dGFjaCB0aGUgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZAorICogZnJvbSB0aGUgYm9hcmQgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gaWYgdGhlIGJvYXJkIHN1cHBvcnRzCisgKiBpdC4KKyovCisKK2ludCBfX2luaXQgczNjX3BtX2luaXQodm9pZCkKK3sKKwlwcmludGsoIlMzQyBQb3dlciBNYW5hZ2VtZW50LCBDb3B5cmlnaHQgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOworCisJc3VzcGVuZF9zZXRfb3BzKCZzM2NfcG1fb3BzKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZQppbmRleCAxZTA3NjdiLi42MzZjYjEyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZQpAQCAtMjcsNiArMjcsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDRYKQkrPSBzM2MyNDR4LWNsb2NrLm8KIG9iai0kKENPTkZJR19QTV9TSU1URUMpCQkrPSBwbS1zaW10ZWMubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubworb2JqLSQoQ09ORklHX1BNKQkJKz0gaXJxLXBtLm8KIG9iai0kKENPTkZJR19QTSkJCSs9IHNsZWVwLm8KIG9iai0kKENPTkZJR19IQVZFX1BXTSkJCSs9IHB3bS5vCiBvYmotJChDT05GSUdfUzNDMjQxMF9DTE9DSykJKz0gczNjMjQxMC1jbG9jay5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY29tbW9uLXNtZGsuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5jCmluZGV4IDNkNDgzNzAuLjFhODM0N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jb21tb24tc21kay5jCkBAIC0yMDEsNSArMjAxLDUgQEAKIAogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGtfZGV2cywgQVJSQVlfU0laRShzbWRrX2RldnMpKTsKIAotCXMzYzI0MTBfcG1faW5pdCgpOworCXMzY19wbV9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKaW5kZXggNTQyMDYyZi4uMTkzMmI3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAgKiB3aXRoIHRoZSBjYWNoZXMgZW5hYmxlZC4gSXQgc2VlbXMgYXQgbGVhc3QgdGhlIFMzQzI0NDAgaGFzIGEgcHJvYmxlbQogICogcmVzZXR0aW5nIGlmIHRoZXJlIGlzIGJ1cyBhY3Rpdml0eSBpbnRlcnJ1cHRlZCBieSB0aGUgcmVzZXQuCiAgKi8KLXN0YXRpYyB2b2lkIHMzYzI0eHhfcG1fcmVzdGFydChjaGFyIG1vZGUpCitzdGF0aWMgdm9pZCBzM2MyNHh4X3BtX3Jlc3RhcnQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCiB7CiAJaWYgKG1vZGUgIT0gJ3MnKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xOTEsMTIgKzE5MSwxMiBAQAogCQlfX2NwdWNfZmx1c2hfa2Vybl9hbGwoKTsKIAkJX19jcHVjX2ZsdXNoX3VzZXJfYWxsKCk7CiAKLQkJYXJjaF9yZXNldChtb2RlKTsKKwkJYXJjaF9yZXNldChtb2RlLCBjbWQpOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogCiAJLyogZmFsbGJhY2ssIG9yIHVuaGFuZGxlZCAqLwotCWFybV9tYWNoaW5lX3Jlc3RhcnQobW9kZSk7CisJYXJtX21hY2hpbmVfcmVzdGFydChtb2RlLCBjbWQpOwogfQogCiB2b2lkIF9faW5pdCBzM2MyNHh4X2luaXRfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9pcnEuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvaXJxLmgKaW5kZXggNDU3NDZhOS4uNjllMWJlOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9pcnEuaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2lycS5oCkBAIC0xMCw2ICsxMCwxMiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqLwogCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KKwogI2RlZmluZSBpcnFkYmYoeC4uLikKICNkZWZpbmUgaXJxZGJmMih4Li4uKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21hcC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tYXAuaAppbmRleCBmZWY4ZWE4Li5lZWQ4Zjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21hcC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvbWFwLmgKQEAgLTMxLDYgKzMxLDggQEAKICNkZWZpbmUgUzNDMjRYWF9TWl9VQVJUCSAgIFNaXzFNCiAjZGVmaW5lIFMzQ19VQVJUX09GRlNFVAkgICAoMHg0MDAwKQogCisjZGVmaW5lIFMzQ19WQV9VQVJUeCh1YXJ0KSAoUzNDX1ZBX1VBUlQgKyAoKHVhcnQgKiBTM0NfVUFSVF9PRkZTRVQpKSkKKwogLyogVGltZXJzICovCiAjZGVmaW5lIFMzQzI0WFhfVkFfVElNRVIgICBTM0NfVkFfVElNRVIKICNkZWZpbmUgUzNDMjQxMF9QQV9USU1FUiAgICgweDUxMDAwMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbS1jb3JlLmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3BtLWNvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzU4ODIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbS1jb3JlLmgKQEAgLTAsMCArMSw1OSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbGwuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDMjR4eCAtIFBNIGNvcmUgc3VwcG9ydCBmb3IgYXJjaC9hcm0vcGxhdC1zM2MvcG0uYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9kZWJ1Z19pbml0X3VhcnQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLQ09OKTsKKworCS8qIHJlLXN0YXJ0IHVhcnQgY2xvY2tzICovCisJdG1wIHw9IFMzQzI0MTBfQ0xLQ09OX1VBUlQwOworCXRtcCB8PSBTM0MyNDEwX0NMS0NPTl9VQVJUMTsKKwl0bXAgfD0gUzNDMjQxMF9DTEtDT05fVUFSVDI7CisKKwlfX3Jhd193cml0ZWwodG1wLCBTM0MyNDEwX0NMS0NPTik7CisJdWRlbGF5KDEwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9hcmNoX3ByZXBhcmVfaXJxcyh2b2lkKQoreworCV9fcmF3X3dyaXRlbChzM2NfaXJxd2FrZV9pbnRtYXNrLCBTM0MyNDEwX0lOVE1TSyk7CisJX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBTM0MyNDEwX0VJTlRNQVNLKTsKKworCS8qIGFjayBhbnkgb3V0c3RhbmRpbmcgZXh0ZXJuYWwgaW50ZXJydXB0cyBiZWZvcmUgd2UgZ28gdG8gc2xlZXAgKi8KKworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwgUzNDMjQxMF9FSU5UUEVORCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UUE5EKSwgUzNDMjQxMF9JTlRQTkQpOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksIFMzQzI0MTBfU1JDUE5EKTsKKworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2FyY2hfc3RvcF9jbG9ja3Modm9pZCkKK3sKKwlfX3Jhd193cml0ZWwoMHgwMCwgUzNDMjQxMF9DTEtDT04pOyAgLyogdHVybiBvZmYgY2xvY2tzIG92ZXIgc2xlZXAgKi8KK30KKworc3RhdGljIHZvaWQgczNjX3BtX3Nob3dfcmVzdW1lX2lycXMoaW50IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHdoaWNoLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIG1hc2spOworCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2FyY2hfc2hvd19yZXN1bWVfaXJxcyh2b2lkKQoreworCVMzQ19QTURCRygicG9zdCBzbGVlcDogSVJRcyAweCUwOHgsIDB4JTA4eFxuIiwKKwkJICBfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksCisJCSAgX19yYXdfcmVhZGwoUzNDMjQxMF9FSU5UUEVORCkpOworCisJczNjX3BtX3Nob3dfcmVzdW1lX2lycXMoSVJRX0VJTlQwLCBfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksCisJCQkJczNjX2lycXdha2VfaW50bWFzayk7CisKKwlzM2NfcG1fc2hvd19yZXN1bWVfaXJxcyhJUlFfRUlOVDQtNCwgX19yYXdfcmVhZGwoUzNDMjQxMF9FSU5UUEVORCksCisJCQkJczNjX2lycXdha2VfZWludG1hc2spOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzYyMzY2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcG0uaAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcG0uaAotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCVdyaXR0ZW4gYnkgQmVuIERvb2tzLCA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotLyogczNjMjQxMF9wbV9pbml0Ci0gKgotICogY2FsbGVkIGZyb20gYm9hcmQgYXQgaW5pdGlhbGlzYXRpb24gdGltZSB0byBzZXR1cCB0aGUgcG93ZXIKLSAqIG1hbmFnZW1lbnQKLSovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotZXh0ZXJuIF9faW5pdCBpbnQgczNjMjQxMF9wbV9pbml0KHZvaWQpOwotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIGludCBzM2MyNDEwX3BtX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0vKiBjb25maWd1cmF0aW9uIGZvciB0aGUgSVJRIG1hc2sgb3ZlciBzbGVlcCAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50bWFzazsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2VpbnRtYXNrOwotCi0vKiBJUlEgbWFza3MgZm9yIElSUXMgYWxsb3dlZCB0byBnbyB0byBzbGVlcCAoc2VlIGlycS5jKSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50YWxsb3c7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50YWxsb3c7Ci0KLS8qIHBlci1jcHUgc2xlZXAgZnVuY3Rpb25zICovCi0KLWV4dGVybiB2b2lkICgqcG1fY3B1X3ByZXApKHZvaWQpOwotZXh0ZXJuIHZvaWQgKCpwbV9jcHVfc2xlZXApKHZvaWQpOwotCi0vKiBGbGFncyBmb3IgUE0gQ29udHJvbCAqLwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfcG1fZmxhZ3M7Ci0KLS8qIGZyb20gc2xlZXAuUyAqLwotCi1leHRlcm4gaW50ICBzM2MyNDEwX2NwdV9zYXZlKHVuc2lnbmVkIGxvbmcgKnNhdmVibGspOwotZXh0ZXJuIHZvaWQgczNjMjQxMF9jcHVfc3VzcGVuZCh2b2lkKTsKLWV4dGVybiB2b2lkIHMzYzI0MTBfY3B1X3Jlc3VtZSh2b2lkKTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjMjQxMF9zbGVlcF9zYXZlX3BoeXM7Ci0KLS8qIHNsZWVwIHNhdmUgaW5mbyAqLwotCi1zdHJ1Y3Qgc2xlZXBfc2F2ZSB7Ci0Jdm9pZCBfX2lvbWVtCSpyZWc7Ci0JdW5zaWduZWQgbG9uZwl2YWw7Ci19OwotCi0jZGVmaW5lIFNBVkVfSVRFTSh4KSBcCi0JeyAucmVnID0gKHgpIH0KLQotZXh0ZXJuIHZvaWQgczNjMjQxMF9wbV9kb19zYXZlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCk7Ci1leHRlcm4gdm9pZCBzM2MyNDEwX3BtX2RvX3Jlc3RvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KTsKLQotI2lmZGVmIENPTkZJR19QTQotZXh0ZXJuIGludCBzM2MyNHh4X2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1leHRlcm4gaW50IHMzYzI0eHhfaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KTsKLSNlbHNlCi0jZGVmaW5lIHMzYzI0eHhfaXJxX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzM2MyNHh4X2lycV9yZXN1bWUgIE5VTEwKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLWlpcy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9yZWdzLWlpcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtaWlzLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcmVncy1paXMuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS1wbS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS1wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3YWNmMWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLXBtLmMKQEAgLTAsMCArMSw5NSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS1vbS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzI0WFggLSBJUlEgUE0gY29kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgorI2luY2x1ZGUgPHBsYXQvaXJxLmg+CisKKy8qIHN0YXRlIGZvciBJUlFzIG92ZXIgc2xlZXAgKi8KKworLyogZGVmYXVsdCBpcyB0byBhbGxvdyBmb3IgRUlOVDAuLkVJTlQxNSwgYW5kIElSUV9SVEMgYXMgd2FrZXVwIHNvdXJjZXMKKyAqCisgKiBzZXQgYml0IHRvIDEgaW4gYWxsb3cgYml0ZmllbGQgdG8gZW5hYmxlIHRoZSB3YWtldXAgc2V0dGluZ3Mgb24gaXQKKyovCisKK3Vuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50YWxsb3cJPSAxTCA8PCAoSVJRX1JUQyAtIElSUV9FSU5UMCkgfCAweGZMOwordW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50YWxsb3cJPSAweDAwMDBmZmYwTDsKKworaW50IHMzY19pcnFfd2FrZSh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGlycWJpdCA9IDEgPDwgKGlycW5vIC0gSVJRX0VJTlQwKTsKKworCWlmICghKHMzY19pcnF3YWtlX2ludGFsbG93ICYgaXJxYml0KSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJ3YWtlICVzIGZvciBpcnEgJWRcbiIsCisJICAgICAgIHN0YXRlID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwgaXJxbm8pOworCisJaWYgKCFzdGF0ZSkKKwkJczNjX2lycXdha2VfaW50bWFzayB8PSBpcnFiaXQ7CisJZWxzZQorCQlzM2NfaXJxd2FrZV9pbnRtYXNrICY9IH5pcnFiaXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGlycV9zYXZlW10gPSB7CisJU0FWRV9JVEVNKFMzQzI0MTBfSU5UTVNLKSwKKwlTQVZFX0lURU0oUzNDMjQxMF9JTlRTVUJNU0spLAorfTsKKworLyogdGhlIGV4dGludCB2YWx1ZXMgbW92ZSBiZXR3ZWVuIHRoZSBzM2MyNDEwL3MzYzI0NDAgYW5kIHRoZSBzM2MyNDEyCisgKiBzbyB3ZSB1c2UgYW4gYXJyYXkgdG8gaG9sZCB0aGVtLCBhbmQgdG8gY2FsY3VsYXRlIHRoZSBhZGRyZXNzIG9mCisgKiB0aGUgcmVnaXN0ZXIgYXQgcnVuLXRpbWUKKyovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVfZXh0aW50WzNdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZV9laW50Zmx0WzRdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZV9laW50bWFzazsKKworaW50IHMzYzI0eHhfaXJxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2F2ZV9leHRpbnQpOyBpKyspCisJCXNhdmVfZXh0aW50W2ldID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FWFRJTlQwICsgKGkqNCkpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2F2ZV9laW50Zmx0KTsgaSsrKQorCQlzYXZlX2VpbnRmbHRbaV0gPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTkZMVDAgKyAoaSo0KSk7CisKKwlzM2NfcG1fZG9fc2F2ZShpcnFfc2F2ZSwgQVJSQVlfU0laRShpcnFfc2F2ZSkpOworCXNhdmVfZWludG1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRNQVNLKTsKKworCXJldHVybiAwOworfQorCitpbnQgczNjMjR4eF9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2V4dGludCk7IGkrKykKKwkJX19yYXdfd3JpdGVsKHNhdmVfZXh0aW50W2ldLCBTM0MyNFhYX0VYVElOVDAgKyAoaSo0KSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2VpbnRmbHQpOyBpKyspCisJCV9fcmF3X3dyaXRlbChzYXZlX2VpbnRmbHRbaV0sIFMzQzI0WFhfRUlORkxUMCArIChpKjQpKTsKKworCXMzY19wbV9kb19yZXN0b3JlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7CisJX19yYXdfd3JpdGVsKHNhdmVfZWludG1hc2ssIFMzQzI0WFhfRUlOVE1BU0spOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLmMKaW5kZXggMDE5MmVjZC4uOTU4NzM3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEuYwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMywyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzIAogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xNiwzOCArMTYsNiBAQAogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICogQ2hhbmdlbG9nOgotICoKLSAqICAgMjItSnVsLTIwMDQgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqICAgICAgICAgICAgICAgIEZpeGVkIGNvbXBpbGUgd2FybmluZ3MKLSAqCi0gKiAgIDIyLUp1bC0yMDA0ICBSb2MgV3UgPGNvb2xvbmV5QHlhaG9vLmNvbS5jbj4KLSAqICAgICAgICAgICAgICAgIEZpeGVkIHMzY19leHRpcnFfdHlwZQotICoKLSAqICAgMjEtSnVsLTIwMDQgIEFybmF1ZCBQYXRhcmQgKFJ0cCkgPGFybmF1ZC5wYXRhcmRAcnRwLW5ldC5vcmc+Ci0gKiAgICAgICAgICAgICAgICBBZGRpdGlvbiBvZiBBREMvVEMgZGVtdXgKLSAqCi0gKiAgIDA0LU9jdC0yMDA0ICBLbGF1cyBGZXRzY2hlciA8ay5mZXRzY2hlckBmZXRyb24uZGU+Ci0gKgkJICBGaXggZm9yIHNldF9pcnFfdHlwZSgpIG9uIGxvdyBFSU5UIG51bWJlcnMKLSAqCi0gKiAgIDA1LU9jdC0yMDA0ICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgkJICBUaWR5IHVwIEtGJ3MgcGF0Y2ggYW5kIHNvcnQgb3V0IG5ldyByZWxlYXNlCi0gKgotICogICAwNS1PY3QtMjAwNCAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJCSAgQWRkIHN1cHBvcnQgZm9yIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbHMKLSAqCi0gKiAgIDA0LU5vdi0yMDA0ICBCZW4gRG9va3MKLSAqCQkgIEZpeCBzdGFuZGFyZCBJUlEgd2FrZSBmb3IgRUlOVDAuLjQgYW5kIFJUQwotICoKLSAqICAgMjItRmViLTIwMDUgIEJlbiBEb29rcwotICoJCSAgRml4ZWQgZWRnZS10cmlnZ2VyaW5nIG9uIEFEQyBJUlEKLSAqCi0gKiAgIDI4LUp1bi0yMDA1ICBCZW4gRG9va3MKLSAqCQkgIE1hcmsgSVJRX0xDRCB2YWxpZAotICoKLSAqICAgMjUtSnVsLTIwMDUgIEJlbiBEb29rcwotICoJCSAgU3BsaXQgdGhlIFMzQzI0NDAgSVJRIGNvZGUgdG8gc2VwYXJhdGUgZmlsZQogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTU1LDgxICsyMywxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlIDxwbGF0L3JlZ3MtaXJxdHlwZS5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgogCiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L3BtLmg+CiAjaW5jbHVkZSA8cGxhdC9pcnEuaD4KIAotLyogd2FrZXVwIGlycSBjb250cm9sICovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotLyogc3RhdGUgZm9yIElSUXMgb3ZlciBzbGVlcCAqLwotCi0vKiBkZWZhdWx0IGlzIHRvIGFsbG93IGZvciBFSU5UMC4uRUlOVDE1LCBhbmQgSVJRX1JUQyBhcyB3YWtldXAgc291cmNlcwotICoKLSAqIHNldCBiaXQgdG8gMSBpbiBhbGxvdyBiaXRmaWVsZCB0byBlbmFibGUgdGhlIHdha2V1cCBzZXR0aW5ncyBvbiBpdAotKi8KLQotdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9pbnRhbGxvdwk9IDFMIDw8IChJUlFfUlRDIC0gSVJRX0VJTlQwKSB8IDB4Zkw7Ci11bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludG1hc2sJPSAweGZmZmZmZmZmTDsKLXVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludGFsbG93CT0gMHgwMDAwZmZmMEw7Ci11bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2VpbnRtYXNrCT0gMHhmZmZmZmZmZkw7Ci0KLWludAotczNjX2lycV93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQotewotCXVuc2lnbmVkIGxvbmcgaXJxYml0ID0gMSA8PCAoaXJxbm8gLSBJUlFfRUlOVDApOwotCi0JaWYgKCEoczNjX2lycXdha2VfaW50YWxsb3cgJiBpcnFiaXQpKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCXByaW50ayhLRVJOX0lORk8gIndha2UgJXMgZm9yIGlycSAlZFxuIiwKLQkgICAgICAgc3RhdGUgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiLCBpcnFubyk7Ci0KLQlpZiAoIXN0YXRlKQotCQlzM2NfaXJxd2FrZV9pbnRtYXNrIHw9IGlycWJpdDsKLQllbHNlCi0JCXMzY19pcnF3YWtlX2ludG1hc2sgJj0gfmlycWJpdDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1zM2NfaXJxZXh0X3dha2UodW5zaWduZWQgaW50IGlycW5vLCB1bnNpZ25lZCBpbnQgc3RhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBiaXQgPSAxTCA8PCAoaXJxbm8gLSBFWFRJTlRfT0ZGKTsKLQotCWlmICghKHMzY19pcnF3YWtlX2VpbnRhbGxvdyAmIGJpdCkpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAid2FrZSAlcyBmb3IgaXJxICVkXG4iLAotCSAgICAgICBzdGF0ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsIGlycW5vKTsKLQotCWlmICghc3RhdGUpCi0JCXMzY19pcnF3YWtlX2VpbnRtYXNrIHw9IGJpdDsKLQllbHNlCi0JCXMzY19pcnF3YWtlX2VpbnRtYXNrICY9IH5iaXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgczNjX2lycWV4dF93YWtlIE5VTEwKLSNkZWZpbmUgczNjX2lycV93YWtlIE5VTEwKLSNlbmRpZgotCi0KIHN0YXRpYyB2b2lkCiBzM2NfaXJxX21hc2sodW5zaWduZWQgaW50IGlycW5vKQogewpAQCAtNTkwLDU5ICs0OTMsNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgaXJxX3NhdmVbXSA9IHsKLQlTQVZFX0lURU0oUzNDMjQxMF9JTlRNU0spLAotCVNBVkVfSVRFTShTM0MyNDEwX0lOVFNVQk1TSyksCi19OwotCi0vKiB0aGUgZXh0aW50IHZhbHVlcyBtb3ZlIGJldHdlZW4gdGhlIHMzYzI0MTAvczNjMjQ0MCBhbmQgdGhlIHMzYzI0MTIKLSAqIHNvIHdlIHVzZSBhbiBhcnJheSB0byBob2xkIHRoZW0sIGFuZCB0byBjYWxjdWxhdGUgdGhlIGFkZHJlc3Mgb2YKLSAqIHRoZSByZWdpc3RlciBhdCBydW4tdGltZQotKi8KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZV9leHRpbnRbM107Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2VpbnRmbHRbNF07Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2VpbnRtYXNrOwotCi1pbnQgczNjMjR4eF9pcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2V4dGludCk7IGkrKykKLQkJc2F2ZV9leHRpbnRbaV0gPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VYVElOVDAgKyAoaSo0KSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2VpbnRmbHQpOyBpKyspCi0JCXNhdmVfZWludGZsdFtpXSA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRUlORkxUMCArIChpKjQpKTsKLQotCXMzYzI0MTBfcG1fZG9fc2F2ZShpcnFfc2F2ZSwgQVJSQVlfU0laRShpcnFfc2F2ZSkpOwotCXNhdmVfZWludG1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRNQVNLKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgczNjMjR4eF9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2V4dGludCk7IGkrKykKLQkJX19yYXdfd3JpdGVsKHNhdmVfZXh0aW50W2ldLCBTM0MyNFhYX0VYVElOVDAgKyAoaSo0KSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYXZlX2VpbnRmbHQpOyBpKyspCi0JCV9fcmF3X3dyaXRlbChzYXZlX2VpbnRmbHRbaV0sIFMzQzI0WFhfRUlORkxUMCArIChpKjQpKTsKLQotCXMzYzI0MTBfcG1fZG9fcmVzdG9yZShpcnFfc2F2ZSwgQVJSQVlfU0laRShpcnFfc2F2ZSkpOwotCV9fcmF3X3dyaXRlbChzYXZlX2VpbnRtYXNrLCBTM0MyNFhYX0VJTlRNQVNLKTsKLQotCXJldHVybiAwOwotfQotCi0jZWxzZQotI2RlZmluZSBzM2MyNHh4X2lycV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgczNjMjR4eF9pcnFfcmVzdW1lICBOVUxMCi0jZW5kaWYKLQogLyogczNjMjR4eF9pbml0X2lycQogICoKICAqIEluaXRpYWxpc2UgUzNDMjQxMCBJUlEgc3lzdGVtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0tc2ltdGVjLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0tc2ltdGVjLmMKaW5kZXggMjFkZmE3NC4uZGEwZDMyMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLXNpbXRlYy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS1zaW10ZWMuYwpAQCAtNjEsNyArNjEsNyBAQAogCiAJX19yYXdfd3JpdGVsKGdzdGF0dXM0LCBTM0MyNDEwX0dTVEFUVVM0KTsKIAotCXJldHVybiBzM2MyNDEwX3BtX2luaXQoKTsKKwlyZXR1cm4gczNjX3BtX2luaXQoKTsKIH0KIAogYXJjaF9pbml0Y2FsbChwbV9zaW10ZWNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0uYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCmluZGV4IDM0ZWYxOGUuLjA2MmEyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCkBAIC0zMSwxNCArMzEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KICNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KQEAgLTQ5LDEwICs0NCw2IEBACiAKICNpbmNsdWRlIDxwbGF0L3BtLmg+CiAKLS8qIGZvciBleHRlcm5hbCB1c2UgKi8KLQotdW5zaWduZWQgbG9uZyBzM2NfcG1fZmxhZ3M7Ci0KICNkZWZpbmUgUEZYICJzM2MyNHh4LXBtOiAiCiAKIHN0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBjb3JlX3NhdmVbXSA9IHsKQEAgLTEyMCwzMjggKzExMSwxNCBAQAogCVNBVkVfSVRFTShTM0MyNDEwX0RDTEtDT04pLAogfTsKIAotI2lmZGVmIENPTkZJR19TM0MyNDEwX1BNX0RFQlVHCiAKLSNkZWZpbmUgU0FWRV9VQVJUKHZhKSBcCi0JU0FWRV9JVEVNKCh2YSkgKyBTM0MyNDEwX1VMQ09OKSwgXAotCVNBVkVfSVRFTSgodmEpICsgUzNDMjQxMF9VQ09OKSwgXAotCVNBVkVfSVRFTSgodmEpICsgUzNDMjQxMF9VRkNPTiksIFwKLQlTQVZFX0lURU0oKHZhKSArIFMzQzI0MTBfVU1DT04pLCBcCi0JU0FWRV9JVEVNKCh2YSkgKyBTM0MyNDEwX1VCUkRJVikKLQotc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIHVhcnRfc2F2ZVtdID0gewotCVNBVkVfVUFSVChTM0MyNFhYX1ZBX1VBUlQwKSwKLQlTQVZFX1VBUlQoUzNDMjRYWF9WQV9VQVJUMSksCi0jaWZuZGVmIENPTkZJR19DUFVfUzNDMjQwMAotCVNBVkVfVUFSVChTM0MyNFhYX1ZBX1VBUlQyKSwKLSNlbmRpZgotfTsKLQotLyogZGVidWcKLSAqCi0gKiB3ZSBzZW5kIHRoZSBkZWJ1ZyB0byBwcmludGFzY2lpKCkgdG8gYWxsb3cgaXQgdG8gYmUgc2VlbiBpZiB0aGUKLSAqIHN5c3RlbSBuZXZlciB3YWtlcyB1cCBmcm9tIHRoZSBzbGVlcAotKi8KLQotZXh0ZXJuIHZvaWQgcHJpbnRhc2NpaShjb25zdCBjaGFyICopOwotCi12b2lkIHBtX2RiZyhjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQl2YV9saXN0IHZhOwotCWNoYXIgYnVmZlsyNTZdOwotCi0JdmFfc3RhcnQodmEsIGZtdCk7Ci0JdnNwcmludGYoYnVmZiwgZm10LCB2YSk7Ci0JdmFfZW5kKHZhKTsKLQotCXByaW50YXNjaWkoYnVmZik7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fZGVidWdfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdG1wID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtDT04pOwotCi0JLyogcmUtc3RhcnQgdWFydCBjbG9ja3MgKi8KLQl0bXAgfD0gUzNDMjQxMF9DTEtDT05fVUFSVDA7Ci0JdG1wIHw9IFMzQzI0MTBfQ0xLQ09OX1VBUlQxOwotCXRtcCB8PSBTM0MyNDEwX0NMS0NPTl9VQVJUMjsKLQotCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzI0MTBfQ0xLQ09OKTsKLQl1ZGVsYXkoMTApOwotfQotCi0jZGVmaW5lIERCRyhmbXQuLi4pIHBtX2RiZyhmbXQpCi0jZWxzZQotI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoS0VSTl9ERUJVRyBmbXQpCi0KLSNkZWZpbmUgczNjMjQxMF9wbV9kZWJ1Z19pbml0KCkgZG8geyB9IHdoaWxlKDApCi0KLXN0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSB1YXJ0X3NhdmVbXSA9IHt9OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TM0MyNDEwX1BNX0NIRUNLKSAmJiBDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgIT0gMAotCi0vKiBzdXNwZW5kIGNoZWNraW5nIGNvZGUuLi4KLSAqCi0gKiB0aGlzIG5leHQgYXJlYSBkb2VzIGEgc2V0IG9mIGNyYyBjaGVja3Mgb3ZlciBhbGwgdGhlIGluc3RhbGxlZAotICogbWVtb3J5LCBzbyB0aGUgc3lzdGVtIGNhbiB2ZXJpZnkgaWYgdGhlIHJlc3VtZSB3YXMgb2suCi0gKgotICogQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0tfQ0hVTktTSVpFIGRlZmluZXMgdGhlIGJsb2NrLXNpemUgZm9yIHRoZSBDUkMsCi0gKiBpbmNyZWFzaW5nIGl0IHdpbGwgbWVhbiB0aGF0IHRoZSBhcmVhIGNvcnJ1cHRlZCB3aWxsIGJlIGxlc3MgZWFzeSB0byBzcG90LAotICogYW5kIHJlZHVjaW5nIHRoZSBzaXplIHdpbGwgY2F1c2UgdGhlIENSQyBzYXZlIGFyZWEgdG8gZ3JvdwotKi8KLQotI2RlZmluZSBDSEVDS19DSFVOS1NJWkUgKENPTkZJR19TM0MyNDEwX1BNX0NIRUNLX0NIVU5LU0laRSAqIDEwMjQpCi0KLXN0YXRpYyB1MzIgY3JjX3NpemU7CS8qIHNpemUgbmVlZGVkIGZvciB0aGUgY3JjIGJsb2NrICovCi1zdGF0aWMgdTMyICpjcmNzOwkvKiBhbGxvY2F0ZWQgb3ZlciBzdXNwZW5kL3Jlc3VtZSAqLwotCi10eXBlZGVmIHUzMiAqKHJ1bl9mbl90KShzdHJ1Y3QgcmVzb3VyY2UgKnB0ciwgdTMyICphcmcpOwotCi0vKiBzM2MyNDEwX3BtX3J1bl9yZXMKLSAqCi0gKiBnbyB0aG9ydWdoIHRoZSBnaXZlbiByZXNvdXJjZSBsaXN0LCBhbmQgbG9vayBmb3Igc3lzdGVtIHJhbQotKi8KLQotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9ydW5fcmVzKHN0cnVjdCByZXNvdXJjZSAqcHRyLCBydW5fZm5fdCBmbiwgdTMyICphcmcpCi17Ci0Jd2hpbGUgKHB0ciAhPSBOVUxMKSB7Ci0JCWlmIChwdHItPmNoaWxkICE9IE5VTEwpCi0JCQlzM2MyNDEwX3BtX3J1bl9yZXMocHRyLT5jaGlsZCwgZm4sIGFyZyk7Ci0KLQkJaWYgKChwdHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICYmCi0JCSAgICBzdHJjbXAocHRyLT5uYW1lLCAiU3lzdGVtIFJBTSIpID09IDApIHsKLQkJCURCRygiRm91bmQgc3lzdGVtIFJBTSBhdCAlMDhseC4uJTA4bHhcbiIsCi0JCQkgICAgcHRyLT5zdGFydCwgcHRyLT5lbmQpOwotCQkJYXJnID0gKGZuKShwdHIsIGFyZyk7Ci0JCX0KLQotCQlwdHIgPSBwdHItPnNpYmxpbmc7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX3J1bl9zeXNyYW0ocnVuX2ZuX3QgZm4sIHUzMiAqYXJnKQotewotCXMzYzI0MTBfcG1fcnVuX3JlcygmaW9tZW1fcmVzb3VyY2UsIGZuLCBhcmcpOwotfQotCi1zdGF0aWMgdTMyICpzM2MyNDEwX3BtX2NvdW50cmFtKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKLXsKLQl1MzIgc2l6ZSA9ICh1MzIpKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkrMTsKLQotCXNpemUgKz0gQ0hFQ0tfQ0hVTktTSVpFLTE7Ci0Jc2l6ZSAvPSBDSEVDS19DSFVOS1NJWkU7Ci0KLQlEQkcoIkFyZWEgJTA4bHguLiUwOGx4LCAlZCBibG9ja3NcbiIsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kLCBzaXplKTsKLQotCSp2YWwgKz0gc2l6ZSAqIHNpemVvZih1MzIpOwotCXJldHVybiB2YWw7Ci19Ci0KLS8qIHMzYzI0MTBfcG1fcHJlcGFyZV9jaGVjawotICoKLSAqIHByZXBhcmUgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgY3JlYXRpbmcgdGhlIENSQ3MuIFRoaXMKLSAqIG11c3QgYmUgZG9uZSBiZWZvcmUgdGhlIGZpbmFsIHNhdmUsIGFzIGl0IHdpbGwgcmVxdWlyZSBtZW1vcnkKLSAqIGFsbG9jYXRpbmcsIGFuZCB0aHVzIHRvdWNoaW5nIGJpdHMgb2YgdGhlIGtlcm5lbCB3ZSBkbyBub3QKLSAqIGtub3cgYWJvdXQuCi0qLwotCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUodm9pZCkKLXsKLQljcmNfc2l6ZSA9IDA7Ci0KLQlzM2MyNDEwX3BtX3J1bl9zeXNyYW0oczNjMjQxMF9wbV9jb3VudHJhbSwgJmNyY19zaXplKTsKLQotCURCRygiczNjMjQxMF9wbV9wcmVwYXJlX2NoZWNrOiAldSBjaGVja3MgbmVlZGVkXG4iLCBjcmNfc2l6ZSk7Ci0KLQljcmNzID0ga21hbGxvYyhjcmNfc2l6ZSs0LCBHRlBfS0VSTkVMKTsKLQlpZiAoY3JjcyA9PSBOVUxMKQotCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBhbGxvY2F0ZWQgQ1JDIHNhdmUgYXJlYVxuIik7Ci19Ci0KLXN0YXRpYyB1MzIgKnMzYzI0MTBfcG1fbWFrZWNoZWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIsIGxlZnQ7Ci0KLQlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7Ci0JICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgewotCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOwotCi0JCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQotCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKLQotCQkqdmFsID0gY3JjMzJfbGUofjAsIHBoeXNfdG9fdmlydChhZGRyKSwgbGVmdCk7Ci0JCXZhbCsrOwotCX0KLQotCXJldHVybiB2YWw7Ci19Ci0KLS8qIHMzYzI0MTBfcG1fY2hlY2tfc3RvcmUKLSAqCi0gKiBjb21wdXRlIHRoZSBDUkMgdmFsdWVzIGZvciB0aGUgbWVtb3J5IGJsb2NrcyBiZWZvcmUgdGhlIGZpbmFsCi0gKiBzbGVlcC4KLSovCi0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fY2hlY2tfc3RvcmUodm9pZCkKLXsKLQlpZiAoY3JjcyAhPSBOVUxMKQotCQlzM2MyNDEwX3BtX3J1bl9zeXNyYW0oczNjMjQxMF9wbV9tYWtlY2hlY2ssIGNyY3MpOwotfQotCi0vKiBpbl9yZWdpb24KLSAqCi0gKiByZXR1cm4gVFJVRSBpZiB0aGUgYXJlYSBkZWZpbmVkIGJ5IHB0ci4ucHRyK3NpemUgY29udGF0aW5zIHRoZQotICogd2hhdC4ud2hhdCt3aGF0c3oKLSovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGluX3JlZ2lvbih2b2lkICpwdHIsIGludCBzaXplLCB2b2lkICp3aGF0LCBzaXplX3Qgd2hhdHN6KQotewotCWlmICgod2hhdCt3aGF0c3opIDwgcHRyKQotCQlyZXR1cm4gMDsKLQotCWlmICh3aGF0ID4gKHB0citzaXplKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHUzMiAqczNjMjQxMF9wbV9ydW5jaGVjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCi17Ci0Jdm9pZCAqc2F2ZV9hdCA9IHBoeXNfdG9fdmlydChzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cyk7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGxvbmcgbGVmdDsKLQl2b2lkICpwdHI7Ci0JdTMyIGNhbGM7Ci0KLQlmb3IgKGFkZHIgPSByZXMtPnN0YXJ0OyBhZGRyIDwgcmVzLT5lbmQ7Ci0JICAgICBhZGRyICs9IENIRUNLX0NIVU5LU0laRSkgewotCQlsZWZ0ID0gcmVzLT5lbmQgLSBhZGRyOwotCi0JCWlmIChsZWZ0ID4gQ0hFQ0tfQ0hVTktTSVpFKQotCQkJbGVmdCA9IENIRUNLX0NIVU5LU0laRTsKLQotCQlwdHIgPSBwaHlzX3RvX3ZpcnQoYWRkcik7Ci0KLQkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIGNyY3MsIGNyY19zaXplKSkgewotCQkJREJHKCJza2lwcGluZyAlMDhseCwgaGFzIGNyYyBibG9jayBpblxuIiwgYWRkcik7Ci0JCQlnb3RvIHNraXBfY2hlY2s7Ci0JCX0KLQotCQlpZiAoaW5fcmVnaW9uKHB0ciwgbGVmdCwgc2F2ZV9hdCwgMzIqNCApKSB7Ci0JCQlEQkcoInNraXBwaW5nICUwOGx4LCBoYXMgc2F2ZSBibG9jayBpblxuIiwgYWRkcik7Ci0JCQlnb3RvIHNraXBfY2hlY2s7Ci0JCX0KLQotCQkvKiBjYWxjdWxhdGUgYW5kIGNoZWNrIHRoZSBjaGVja3N1bSAqLwotCi0JCWNhbGMgPSBjcmMzMl9sZSh+MCwgcHRyLCBsZWZ0KTsKLQkJaWYgKGNhbGMgIT0gKnZhbCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUmVzdG9yZSBDUkMgZXJyb3IgYXQgIgotCQkJICAgICAgICIlMDhseCAoJTA4eCB2cyAlMDh4KVxuIiwgYWRkciwgY2FsYywgKnZhbCk7Ci0KLQkJCURCRygiUmVzdG9yZSBDUkMgZXJyb3IgYXQgJTA4bHggKCUwOHggdnMgJTA4eClcbiIsCi0JCQkgICAgYWRkciwgY2FsYywgKnZhbCk7Ci0JCX0KLQotCXNraXBfY2hlY2s6Ci0JCXZhbCsrOwotCX0KLQotCXJldHVybiB2YWw7Ci19Ci0KLS8qIHMzYzI0MTBfcG1fY2hlY2tfcmVzdG9yZQotICoKLSAqIGNoZWNrIHRoZSBDUkNzIGFmdGVyIHRoZSByZXN0b3JlIGV2ZW50IGFuZCBmcmVlIHRoZSBtZW1vcnkgdXNlZAotICogdG8gaG9sZCB0aGVtCi0qLwotCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2NoZWNrX3Jlc3RvcmUodm9pZCkKLXsKLQlpZiAoY3JjcyAhPSBOVUxMKSB7Ci0JCXMzYzI0MTBfcG1fcnVuX3N5c3JhbShzM2MyNDEwX3BtX3J1bmNoZWNrLCBjcmNzKTsKLQkJa2ZyZWUoY3Jjcyk7Ci0JCWNyY3MgPSBOVUxMOwotCX0KLX0KLQotI2Vsc2UKLQotI2RlZmluZSBzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUoKSBkbyB7IH0gd2hpbGUoMCkKLSNkZWZpbmUgczNjMjQxMF9wbV9jaGVja19yZXN0b3JlKCkgZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIHMzYzI0MTBfcG1fY2hlY2tfc3RvcmUoKSAgIGRvIHsgfSB3aGlsZSgwKQotI2VuZGlmCi0KLS8qIGhlbHBlciBmdW5jdGlvbnMgdG8gc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlciBzdGF0ZSAqLwotCi12b2lkIHMzYzI0MTBfcG1fZG9fc2F2ZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpCi17Ci0JZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSwgcHRyKyspIHsKLQkJcHRyLT52YWwgPSBfX3Jhd19yZWFkbChwdHItPnJlZyk7Ci0JCURCRygic2F2ZWQgJXAgdmFsdWUgJTA4bHhcbiIsIHB0ci0+cmVnLCBwdHItPnZhbCk7Ci0JfQotfQotCi0vKiBzM2MyNDEwX3BtX2RvX3Jlc3RvcmUKLSAqCi0gKiByZXN0b3JlIHRoZSBzeXN0ZW0gZnJvbSB0aGUgZ2l2ZW4gbGlzdCBvZiBzYXZlZCByZWdpc3RlcnMKLSAqCi0gKiBOb3RlLCB3ZSBkbyBub3QgdXNlIERCRygpIGluIGhlcmUsIGFzIHRoZSBzeXN0ZW0gbWF5IG5vdCBoYXZlCi0gKiByZXN0b3JlIHRoZSBVQVJUcyBzdGF0ZSB5ZXQKLSovCi0KLXZvaWQgczNjMjQxMF9wbV9kb19yZXN0b3JlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKLXsKLQlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykgewotCQlwcmludGsoS0VSTl9ERUJVRyAicmVzdG9yZSAlcCAocmVzdG9yZSAlMDhseCwgd2FzICUwOHgpXG4iLAotCQkgICAgICAgcHRyLT5yZWcsIHB0ci0+dmFsLCBfX3Jhd19yZWFkbChwdHItPnJlZykpOwotCi0JCV9fcmF3X3dyaXRlbChwdHItPnZhbCwgcHRyLT5yZWcpOwotCX0KLX0KLQotLyogczNjMjQxMF9wbV9kb19yZXN0b3JlX2NvcmUKLSAqCi0gKiBzaW1pbGFyIHRvIHMzYzI0MTBfcG1fZG9fcmVzdG9yZV9jb3JlCi0gKgotICogV0FSTklORzogRG8gbm90IHB1dCBhbnkgZGVidWcgaW4gaGVyZSB0aGF0IG1heSBlZmZlY3QgbWVtb3J5IG9yIHVzZQotICogcGVyaXBoZXJhbHMsIGFzIHRoaW5ncyBtYXkgYmUgY2hhbmdpbmchCi0qLwotCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3BtX2RvX3Jlc3RvcmVfY29yZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpCi17Ci0JZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSwgcHRyKyspIHsKLQkJX19yYXdfd3JpdGVsKHB0ci0+dmFsLCBwdHItPnJlZyk7Ci0JfQotfQotCi0vKiBzM2MyNDEwX3BtX3Nob3dfcmVzdW1lX2lycXMKLSAqCi0gKiBwcmludCBhbnkgSVJRcyBhc3NlcnRlZCBhdCByZXN1bWUgdGltZSAoaWUsIHdlIHdva2UgZnJvbSkKLSovCi0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fc2hvd19yZXN1bWVfaXJxcyhpbnQgc3RhcnQsIHVuc2lnbmVkIGxvbmcgd2hpY2gsCi0JCQkJCXVuc2lnbmVkIGxvbmcgbWFzaykKLXsKLQlpbnQgaTsKLQotCXdoaWNoICY9IH5tYXNrOwotCi0JZm9yIChpID0gMDsgaSA8PSAzMTsgaSsrKSB7Ci0JCWlmICgod2hpY2gpICYgKDFMPDxpKSkgewotCQkJREJHKCJJUlEgJWQgYXNzZXJ0ZWQgYXQgcmVzdW1lXG4iLCBzdGFydCtpKTsKLQkJfQotCX0KLX0KLQotLyogczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluCisvKiBzM2NfcG1fY2hlY2tfcmVzdW1lX3BpbgogICoKICAqIGNoZWNrIHRvIHNlZSBpZiB0aGUgcGluIGlzIGNvbmZpZ3VyZWQgY29ycmVjdGx5IGZvciBzbGVlcCBtb2RlLCBhbmQKICAqIG1ha2UgYW55IG5lY2Vzc2FyeSBhZGp1c3RtZW50cyBpZiBpdCBpcyBub3QKICovCiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fY2hlY2tfcmVzdW1lX3Bpbih1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgaXJxb2ZmcykKK3N0YXRpYyB2b2lkIHMzY19wbV9jaGVja19yZXN1bWVfcGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBpcnFvZmZzKQogewogCXVuc2lnbmVkIGxvbmcgaXJxc3RhdGU7CiAJdW5zaWduZWQgbG9uZyBwaW5zdGF0ZTsKQEAgLTQ1NiwyMSArMTMzLDIxIEBACiAKIAlpZiAoIWlycXN0YXRlKSB7CiAJCWlmIChwaW5zdGF0ZSA9PSBTM0MyNDEwX0dQSU9fSVJRKQotCQkJREJHKCJMZWF2aW5nIElSUSAlZCAocGluICVkKSBlbmFibGVkXG4iLCBpcnEsIHBpbik7CisJCQlTM0NfUE1EQkcoIkxlYXZpbmcgSVJRICVkIChwaW4gJWQpIGVuYWJsZWRcbiIsIGlycSwgcGluKTsKIAl9IGVsc2UgewogCQlpZiAocGluc3RhdGUgPT0gUzNDMjQxMF9HUElPX0lSUSkgewotCQkJREJHKCJEaXNhYmxpbmcgSVJRICVkIChwaW4gJWQpXG4iLCBpcnEsIHBpbik7CisJCQlTM0NfUE1EQkcoIkRpc2FibGluZyBJUlEgJWQgKHBpbiAlZClcbiIsIGlycSwgcGluKTsKIAkJCXMzYzI0MTBfZ3Bpb19jZmdwaW4ocGluLCBTM0MyNDEwX0dQSU9fSU5QVVQpOwogCQl9CiAJfQogfQogCi0vKiBzM2MyNDEwX3BtX2NvbmZpZ3VyZV9leHRpbnQKKy8qIHMzY19wbV9jb25maWd1cmVfZXh0aW50CiAgKgogICogY29uZmlndXJlIGFsbCBleHRlcm5hbCBpbnRlcnJ1cHQgcGlucwogKi8KIAotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9jb25maWd1cmVfZXh0aW50KHZvaWQpCit2b2lkIHMzY19wbV9jb25maWd1cmVfZXh0aW50KHZvaWQpCiB7CiAJaW50IHBpbjsKIApAQCAtNDgwLDExICsxNTcsMTEgQEAKIAkqLwogCiAJZm9yIChwaW4gPSBTM0MyNDEwX0dQRjA7IHBpbiA8PSBTM0MyNDEwX0dQRjc7IHBpbisrKSB7Ci0JCXMzYzI0MTBfcG1fY2hlY2tfcmVzdW1lX3BpbihwaW4sIHBpbiAtIFMzQzI0MTBfR1BGMCk7CisJCXMzY19wbV9jaGVja19yZXN1bWVfcGluKHBpbiwgcGluIC0gUzNDMjQxMF9HUEYwKTsKIAl9CiAKIAlmb3IgKHBpbiA9IFMzQzI0MTBfR1BHMDsgcGluIDw9IFMzQzI0MTBfR1BHNzsgcGluKyspIHsKLQkJczNjMjQxMF9wbV9jaGVja19yZXN1bWVfcGluKHBpbiwgKHBpbiAtIFMzQzI0MTBfR1BHMCkrOCk7CisJCXMzY19wbV9jaGVja19yZXN1bWVfcGluKHBpbiwgKHBpbiAtIFMzQzI0MTBfR1BHMCkrOCk7CiAJfQogfQogCkBAIC00OTQsMTIgKzE3MSwxMiBAQAogI2RlZmluZSBPRkZTX0RBVAkoUzNDMjQxMF9HUEFEQVQgLSBTM0MyNDEwX0dQQUNPTikKICNkZWZpbmUgT0ZGU19VUAkJKFMzQzI0MTBfR1BCVVAgIC0gUzNDMjQxMF9HUEJDT04pCiAKLS8qIHMzYzI0MTBfcG1fc2F2ZV9ncGlvcygpCisvKiBzM2NfcG1fc2F2ZV9ncGlvcygpCiAgKgogICogU2F2ZSB0aGUgc3RhdGUgb2YgdGhlIEdQSU9zCiAgKi8KIAotc3RhdGljIHZvaWQgczNjMjQxMF9wbV9zYXZlX2dwaW9zKHZvaWQpCit2b2lkIHMzY19wbV9zYXZlX2dwaW9zKHZvaWQpCiB7CiAJc3RydWN0IGdwaW9fc2xlZXAgKmdwcyA9IGdwaW9fc2F2ZTsKIAl1bnNpZ25lZCBpbnQgZ3BpbzsKQEAgLTUzOCw3ICsyMTUsMTAgQEAKIAlyZXR1cm4gY29uID09IDE7CiB9CiAKLS8qIHMzYzI0MTBfcG1fcmVzdG9yZV9ncGlvKCkKKy8qKgorICogczNjMjQxMF9wbV9yZXN0b3JlX2dwaW8oKSAtIHJlc3RvcmUgdGhlIGdpdmVuIEdQSU8gYmFuaworICogQGluZGV4OiBUaGUgbnVtYmVyIG9mIHRoZSBHUElPIGJhbmsgYmVpbmcgcmVzdW1lZC4KKyAqIEBncHM6IFRoZSBzbGVlcCBjb25mZ2l1cmF0aW9uIGZvciB0aGUgYmFuay4KICAqCiAgKiBSZXN0b3JlIG9uZSBvZiB0aGUgR1BJTyBiYW5rcyB0aGF0IHdhcyBzYXZlZCBkdXJpbmcgc3VzcGVuZC4gVGhpcyBpcwogICogbm90IGFzIHNpbXBsZSBhcyBvbmNlIHRob3VnaHQsIGR1ZSB0byB0aGUgcG9zc2liaWxpdHkgb2YgZ2xpdGNoZXMKQEAgLTY0Niw4ICszMjYsOCBAQAogCQlfX3Jhd193cml0ZWwoZ3BzLT5ncHVwLCBiYXNlICsgT0ZGU19VUCk7CiAJfQogCi0JREJHKCJHUElPWyVkXSBDT04gJTA4bHggPT4gJTA4bHgsIERBVCAlMDhseCA9PiAlMDhseFxuIiwKLQkgICAgaW5kZXgsIG9sZF9ncGNvbiwgZ3BzX2dwY29uLCBvbGRfZ3BkYXQsIGdwc19ncGRhdCk7CisJUzNDX1BNREJHKCJHUElPWyVkXSBDT04gJTA4bHggPT4gJTA4bHgsIERBVCAlMDhseCA9PiAlMDhseFxuIiwKKwkJICBpbmRleCwgb2xkX2dwY29uLCBncHNfZ3Bjb24sIG9sZF9ncGRhdCwgZ3BzX2dwZGF0KTsKIH0KIAogCkBAIC02NTYsNyArMzM2LDcgQEAKICAqIFJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBHUElPcwogICovCiAKLXN0YXRpYyB2b2lkIHMzYzI0MTBfcG1fcmVzdG9yZV9ncGlvcyh2b2lkKQordm9pZCBzM2NfcG1fcmVzdG9yZV9ncGlvcyh2b2lkKQogewogCXN0cnVjdCBncGlvX3NsZWVwICpncHMgPSBncGlvX3NhdmU7CiAJaW50IGdwaW87CkBAIC02NjYsMTUwICszNDYsMTUgQEAKIAl9CiB9CiAKLXZvaWQgKCpwbV9jcHVfcHJlcCkodm9pZCk7Ci12b2lkICgqcG1fY3B1X3NsZWVwKSh2b2lkKTsKLQotI2RlZmluZSBhbnlfYWxsb3dlZChtYXNrLCBhbGxvdykgKCgobWFzaykgJiAoYWxsb3cpKSAhPSAoYWxsb3cpKQotCi0vKiBzM2MyNDEwX3BtX2VudGVyCi0gKgotICogY2VudHJhbCBjb250cm9sIGZvciBzbGVlcC9yZXN1bWUgcHJvY2VzcwotKi8KLQotc3RhdGljIGludCBzM2MyNDEwX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3ZvaWQgczNjX3BtX3Jlc3RvcmVfY29yZSh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgcmVnc19zYXZlWzE2XTsKLQotCS8qIGVuc3VyZSB0aGUgZGVidWcgaXMgaW5pdGlhbGlzZWQgKGlmIGVuYWJsZWQpICovCi0KLQlzM2MyNDEwX3BtX2RlYnVnX2luaXQoKTsKLQotCURCRygiczNjMjQxMF9wbV9lbnRlciglZClcbiIsIHN0YXRlKTsKLQotCWlmIChwbV9jcHVfcHJlcCA9PSBOVUxMIHx8IHBtX2NwdV9zbGVlcCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImVycm9yOiBubyBjcHUgc2xlZXAgZnVuY3Rpb25zIHNldFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGNoZWNrIGlmIHdlIGhhdmUgYW55dGhpbmcgdG8gd2FrZS11cCB3aXRoLi4uIGJhZCB0aGluZ3Mgc2VlbQotCSAqIHRvIGhhcHBlbiBpZiB5b3Ugc3VzcGVuZCB3aXRoIG5vIHdha2V1cCAoc3lzdGVtIHdpbGwgb2Z0ZW4KLQkgKiByZXF1aXJlIGEgZnVsbCBwb3dlci1jeWNsZSkKLQkqLwotCi0JaWYgKCFhbnlfYWxsb3dlZChzM2NfaXJxd2FrZV9pbnRtYXNrLCBzM2NfaXJxd2FrZV9pbnRhbGxvdykgJiYKLQkgICAgIWFueV9hbGxvd2VkKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBzM2NfaXJxd2FrZV9laW50YWxsb3cpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIHNvdXJjZXMgZW5hYmxlZCBmb3Igd2FrZS11cCFcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJBYm9ydGluZyBzbGVlcFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIHByZXBhcmUgY2hlY2sgYXJlYSBpZiBjb25maWd1cmVkICovCi0KLQlzM2MyNDEwX3BtX2NoZWNrX3ByZXBhcmUoKTsKLQotCS8qIHN0b3JlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciByZWNvdmVyeSBibG9jayAqLwotCi0JczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMgPSB2aXJ0X3RvX3BoeXMocmVnc19zYXZlKTsKLQotCURCRygiczNjMjQxMF9zbGVlcF9zYXZlX3BoeXM9MHglMDhseFxuIiwgczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMpOwotCi0JLyogc2F2ZSBhbGwgbmVjZXNzYXJ5IGNvcmUgcmVnaXN0ZXJzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBkcml2ZXJzICovCi0KLQlzM2MyNDEwX3BtX3NhdmVfZ3Bpb3MoKTsKLQlzM2MyNDEwX3BtX2RvX3NhdmUobWlzY19zYXZlLCBBUlJBWV9TSVpFKG1pc2Nfc2F2ZSkpOwotCXMzYzI0MTBfcG1fZG9fc2F2ZShjb3JlX3NhdmUsIEFSUkFZX1NJWkUoY29yZV9zYXZlKSk7Ci0JczNjMjQxMF9wbV9kb19zYXZlKHVhcnRfc2F2ZSwgQVJSQVlfU0laRSh1YXJ0X3NhdmUpKTsKLQotCS8qIHNldCB0aGUgaXJxIGNvbmZpZ3VyYXRpb24gZm9yIHdha2UgKi8KLQotCXMzYzI0MTBfcG1fY29uZmlndXJlX2V4dGludCgpOwotCi0JREJHKCJzbGVlcDogaXJxIHdha2V1cCBtYXNrczogJTA4bHgsJTA4bHhcbiIsCi0JICAgIHMzY19pcnF3YWtlX2ludG1hc2ssIHMzY19pcnF3YWtlX2VpbnRtYXNrKTsKLQotCV9fcmF3X3dyaXRlbChzM2NfaXJxd2FrZV9pbnRtYXNrLCBTM0MyNDEwX0lOVE1TSyk7Ci0JX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBTM0MyNDEwX0VJTlRNQVNLKTsKLQotCS8qIGFjayBhbnkgb3V0c3RhbmRpbmcgZXh0ZXJuYWwgaW50ZXJydXB0cyBiZWZvcmUgd2UgZ28gdG8gc2xlZXAgKi8KLQotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwgUzNDMjQxMF9FSU5UUEVORCk7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UUE5EKSwgUzNDMjQxMF9JTlRQTkQpOwotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksIFMzQzI0MTBfU1JDUE5EKTsKLQotCS8qIGNhbGwgY3B1IHNwZWNpZmljIHByZXBhcmF0aW9uICovCi0KLQlwbV9jcHVfcHJlcCgpOwotCi0JLyogZmx1c2ggY2FjaGUgYmFjayB0byByYW0gKi8KLQotCWZsdXNoX2NhY2hlX2FsbCgpOwotCi0JczNjMjQxMF9wbV9jaGVja19zdG9yZSgpOwotCi0JLyogc2VuZCB0aGUgY3B1IHRvIHNsZWVwLi4uICovCi0KLQlfX3Jhd193cml0ZWwoMHgwMCwgUzNDMjQxMF9DTEtDT04pOyAgLyogdHVybiBvZmYgY2xvY2tzIG92ZXIgc2xlZXAgKi8KLQotCS8qIHMzYzI0MTBfY3B1X3NhdmUgd2lsbCBhbHNvIGFjdCBhcyBvdXIgcmV0dXJuIHBvaW50IGZyb20gd2hlbgotCSAqIHdlIHJlc3VtZSBhcyBpdCBzYXZlcyBpdHMgb3duIHJlZ2lzdGVyIHN0YXRlLCBzbyB1c2UgdGhlIHJldHVybgotCSAqIGNvZGUgdG8gZGlmZmVyZW50aWF0ZSByZXR1cm4gZnJvbSBzYXZlIGFuZCByZXR1cm4gZnJvbSBzbGVlcCAqLwotCi0JaWYgKHMzYzI0MTBfY3B1X3NhdmUocmVnc19zYXZlKSA9PSAwKSB7Ci0JCWZsdXNoX2NhY2hlX2FsbCgpOwotCQlwbV9jcHVfc2xlZXAoKTsKLQl9Ci0KLQkvKiByZXN0b3JlIHRoZSBjcHUgc3RhdGUgKi8KLQotCWNwdV9pbml0KCk7Ci0KLQkvKiByZXN0b3JlIHRoZSBzeXN0ZW0gc3RhdGUgKi8KLQotCXMzYzI0MTBfcG1fZG9fcmVzdG9yZV9jb3JlKGNvcmVfc2F2ZSwgQVJSQVlfU0laRShjb3JlX3NhdmUpKTsKLQlzM2MyNDEwX3BtX2RvX3Jlc3RvcmUobWlzY19zYXZlLCBBUlJBWV9TSVpFKG1pc2Nfc2F2ZSkpOwotCXMzYzI0MTBfcG1fZG9fcmVzdG9yZSh1YXJ0X3NhdmUsIEFSUkFZX1NJWkUodWFydF9zYXZlKSk7Ci0JczNjMjQxMF9wbV9yZXN0b3JlX2dwaW9zKCk7Ci0KLQlzM2MyNDEwX3BtX2RlYnVnX2luaXQoKTsKLQotCS8qIGNoZWNrIHdoYXQgaXJxIChpZiBhbnkpIHJlc3RvcmVkIHRoZSBzeXN0ZW0gKi8KLQotCURCRygicG9zdCBzbGVlcDogSVJRcyAweCUwOHgsIDB4JTA4eFxuIiwKLQkgICAgX19yYXdfcmVhZGwoUzNDMjQxMF9TUkNQTkQpLAotCSAgICBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSk7Ci0KLQlzM2MyNDEwX3BtX3Nob3dfcmVzdW1lX2lycXMoSVJRX0VJTlQwLCBfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksCi0JCQkJICAgIHMzY19pcnF3YWtlX2ludG1hc2spOwotCi0JczNjMjQxMF9wbV9zaG93X3Jlc3VtZV9pcnFzKElSUV9FSU5UNC00LCBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwKLQkJCQkgICAgczNjX2lycXdha2VfZWludG1hc2spOwotCi0JREJHKCJwb3N0IHNsZWVwLCBwcmVwYXJpbmcgdG8gcmV0dXJuXG4iKTsKLQotCXMzYzI0MTBfcG1fY2hlY2tfcmVzdG9yZSgpOwotCi0JLyogb2ssIGxldCdzIHJldHVybiBmcm9tIHNsZWVwICovCi0KLQlEQkcoIlMzQzI0MTAgUE0gUmVzdW1lIChwb3N0LXJlc3RvcmUpXG4iKTsKLQlyZXR1cm4gMDsKKwlzM2NfcG1fZG9fcmVzdG9yZV9jb3JlKGNvcmVfc2F2ZSwgQVJSQVlfU0laRShjb3JlX3NhdmUpKTsKKwlzM2NfcG1fZG9fcmVzdG9yZShtaXNjX3NhdmUsIEFSUkFZX1NJWkUobWlzY19zYXZlKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgczNjMjQxMF9wbV9vcHMgPSB7Ci0JLmVudGVyCQk9IHMzYzI0MTBfcG1fZW50ZXIsCi0JLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCi19OwotCi0vKiBzM2MyNDEwX3BtX2luaXQKLSAqCi0gKiBBdHRhY2ggdGhlIHBvd2VyIG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQKLSAqIGZyb20gdGhlIGJvYXJkIHNwZWNpZmljIGluaXRpYWxpc2F0aW9uIGlmIHRoZSBib2FyZCBzdXBwb3J0cwotICogaXQuCi0qLwotCi1pbnQgX19pbml0IHMzYzI0MTBfcG1faW5pdCh2b2lkKQordm9pZCBzM2NfcG1fc2F2ZV9jb3JlKHZvaWQpCiB7Ci0JcHJpbnRrKCJTM0MyNDEwIFBvd2VyIE1hbmFnZW1lbnQsIChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7Ci0KLQlzdXNwZW5kX3NldF9vcHMoJnMzYzI0MTBfcG1fb3BzKTsKLQlyZXR1cm4gMDsKKwlzM2NfcG1fZG9fc2F2ZShtaXNjX3NhdmUsIEFSUkFZX1NJWkUobWlzY19zYXZlKSk7CisJczNjX3BtX2RvX3NhdmUoY29yZV9zYXZlLCBBUlJBWV9TSVpFKGNvcmVfc2F2ZSkpOwogfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYwppbmRleCBjMWRlNmJiLi4xMzY0MzE3ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCkBAIC0xNDUsMTMgKzE0NSwxMyBAQAogCiBzdGF0aWMgaW50IHMzYzI0NHhfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JczNjMjQxMF9wbV9kb19zYXZlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOworCXMzY19wbV9kb19zYXZlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHMzYzI0NHhfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCiB7Ci0JczNjMjQxMF9wbV9kb19yZXN0b3JlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOworCXMzY19wbV9kb19yZXN0b3JlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zbGVlcC5TCmluZGV4IDc2NTk0YjIuLmU3M2UzYjZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUwpAQCAtNDEsMjUgKzQxLDEzIEBACiAKIAkudGV4dAogCi0JLyogczNjMjQxMF9jcHVfc2F2ZQotCSAqCi0JICogc2F2ZSBlbm91Z2ggb2YgdGhlIENQVSBzdGF0ZSB0byBhbGxvdyB1cyB0byByZS1zdGFydAotCSAqIHBtLmMgY29kZS4gYXMgd2Ugc3RvcmUgaXRlbXMgbGlrZSB0aGUgc3AvbHIsIHdlIHdpbGwKLQkgKiBlbmQgdXAgcmV0dXJuaW5nIGZyb20gdGhpcyBmdW5jdGlvbiB3aGVuIHRoZSBjcHUgcmVzdW1lcwotCSAqIHNvIHRoZSByZXR1cm4gdmFsdWUgaXMgc2V0IHRvIG1hcmsgdGhpcy4KLQkgKgotCSAqIFRoaXMgYXJhbmdlbWVudCBtZWFucyB3ZSBhdm9pZCBoYXZpbmcgdG8gZmx1c2ggdGhlIGNhY2hlCi0JICogZnJvbSB0aGlzIGNvZGUuCisJLyogczNjX2NwdV9zYXZlCiAJICoKIAkgKiBlbnRyeToKLQkgKglyMCA9IHBvaW50ZXIgdG8gc2F2ZSBibG9jawotCSAqCi0JICogZXhpdDoKLQkgKglyMCA9IDAgPT4gd2Ugc3RvcmVkIGV2ZXJ5dGhpbmcKLQkgKgkgICAgIDEgPT4gcmVzdW1lZCBmcm9tIHNsZWVwCisJICoJcjAgPSBzYXZlIGFkZHJlc3MgKHZpcnR1YWwgYWRkciBvZiBzM2Nfc2xlZXBfc2F2ZV9waHlzKQogCSovCiAKLUVOVFJZKHMzYzI0MTBfY3B1X3NhdmUpCitFTlRSWShzM2NfY3B1X3NhdmUpCiAJc3RtZmQJc3AhLCB7IHI0IC0gcjEyLCBsciB9CiAKIAlAQCBzdG9yZSBjby1wcm9jZXNzb3IgcmVnaXN0ZXJzCkBAIC03MSwyMCArNTksMjUgQEAKIAogCXN0bWlhCXIwLCB7IHI0IC0gcjEzIH0KIAotCW1vdglyMCwgIzAKLQlsZG1mZAlzcCwgeyByNCAtIHIxMiwgcGMgfQorCUBAIHdyaXRlIG91ciBzdGF0ZSBiYWNrIHRvIFJBTQorCWJsCXMzY19wbV9jYl9mbHVzaGNhY2hlCiAKKwlAQCBqdW1wIHRvIGZpbmFsIGNvZGUgdG8gc2VuZCBzeXN0ZW0gdG8gc2xlZXAKKwlsZHIJcjAsID1wbV9jcHVfc2xlZXAKKwlAQGxkcglwYywgWyByMCBdCisJbGRyCXIwLCBbIHIwIF0KKwltb3YJcGMsIHIwCisJCiAJQEAgcmV0dXJuIHRvIHRoZSBjYWxsZXIsIGFmdGVyIGhhdmluZyB0aGUgTU1VCiAJQEAgdHVybmVkIG9uLCB0aGlzIHJlc3RvcmVzIHRoZSBsYXN0IGJpdHMgZnJvbSB0aGUKIAlAQCBzdGFjawogcmVzdW1lX3dpdGhfbW11OgotCW1vdglyMCwgIzEKIAlsZG1mZAlzcCEsIHsgcjQgLSByMTIsIHBjIH0KIAogCS5sdG9yZwogCiAJQEAgdGhlIG5leHQgYml0cyBzaXQgaW4gdGhlIC5kYXRhIHNlZ21lbnQsIGV2ZW4gdGhvdWdoIHRoZXkKLQlAQCBoYXBwZW4gdG8gYmUgY29kZS4uLiB0aGUgczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMgbmVlZHMgdG8gYmUKKwlAQCBoYXBwZW4gdG8gYmUgY29kZS4uLiB0aGUgczNjX3NsZWVwX3NhdmVfcGh5cyBuZWVkcyB0byBiZQogCUBAIGFjY2Vzc2VkIGJ5IHRoZSByZXN1bWUgY29kZSBiZWZvcmUgaXQgY2FuIHJlc3RvcmUgdGhlIE1NVS4KIAlAQCBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhcmlhYmxlIGhhcyB0byBiZSBjbG9zZSBlbm91Z2ggZm9yIHRoZQogCUBAIGNvZGUgdG8gcmVhZCBpdC4uLiBzaW5jZSB0aGUgLnRleHQgc2VnbWVudCBuZWVkcyB0byBiZSBSTywKQEAgLTkyLDE5ICs4NSwxOSBAQAogCiAJLmRhdGEKIAotCS5nbG9iYWwJczNjMjQxMF9zbGVlcF9zYXZlX3BoeXMKLXMzYzI0MTBfc2xlZXBfc2F2ZV9waHlzOgorCS5nbG9iYWwJczNjX3NsZWVwX3NhdmVfcGh5cworczNjX3NsZWVwX3NhdmVfcGh5czoKIAkud29yZAkwCiAKIAogCS8qIHNsZWVwIG1hZ2ljLCB0byBhbGxvdyB0aGUgYm9vdGxvYWRlciB0byBjaGVjayBmb3IgYW4gdmFsaWQKIAkgKiBpbWFnZSB0byByZXN1bWUgdG8uIE11c3QgYmUgdGhlIGZpcnN0IHdvcmQgYmVmb3JlIHRoZQotCSAqIHMzYzI0MTBfY3B1X3Jlc3VtZSBlbnRyeS4KKwkgKiBzM2NfY3B1X3Jlc3VtZSBlbnRyeS4KIAkqLwogCiAJLndvcmQJMHgyYmVkZjAwZAogCi0JLyogczNjMjQxMF9jcHVfcmVzdW1lCisJLyogczNjX2NwdV9yZXN1bWUKIAkgKgogCSAqIHJlc3VtZSBjb2RlIGVudHJ5IGZvciBib290bG9hZGVyIHRvIGNhbGwKIAkgKgpAQCAtMTEzLDcgKzEwNiw3IEBACiAJICogbXVzdCBub3Qgd3JpdGUgdG8gdGhlIGNvZGUgc2VnbWVudCAoY29kZSBpcyByZWFkLW9ubHkpCiAJKi8KIAotRU5UUlkoczNjMjQxMF9jcHVfcmVzdW1lKQorRU5UUlkoczNjX2NwdV9yZXN1bWUpCiAJbW92CXIwLCAjUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgU1ZDX01PREUKIAltc3IJY3Bzcl9jLCByMAogCkBAIC0xNDUsNyArMTM4LDcgQEAKIAltY3IJcDE1LCAwLCByMSwgYzgsIGM3LCAwCQlAQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKIAltY3IJcDE1LCAwLCByMSwgYzcsIGM3LCAwCQlAQCBpbnZhbGlkYXRlIEkgJiBEIGNhY2hlcwogCi0JbGRyCXIwLCBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cwlAIGFkZHJlc3Mgb2YgcmVzdG9yZSBibG9jaworCWxkcglyMCwgczNjX3NsZWVwX3NhdmVfcGh5cwkJQCBhZGRyZXNzIG9mIHJlc3RvcmUgYmxvY2sKIAlsZG1pYQlyMCwgeyByNCAtIHIxMyB9CiAKIAltY3IJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAkJQCBQSUQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jcHUuYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jcHUuYwppbmRleCBmYmRlMTgzLi45MWY0OWEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvY3B1LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2NwdS5jCkBAIC05Niw2ICs5NiwxMSBAQAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDNjRYWF9QQV9HUElPKSwKIAkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0M2NFhYX1ZBX01PREVNLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDNjRYWF9QQV9NT0RFTSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8tbWVtcG9ydC5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8tbWVtcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMzQyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtZ3Bpby1tZW1wb3J0LmgKQEAgLTAsMCArMSwyNSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8tbWVtcG9ydC5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCAtIEdQSU8gbWVtb3J5IHBvcnQgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfUzNDNjRYWF9SRUdTX0dQSU9fTUVNUE9SVF9ICisjZGVmaW5lIF9fQVNNX1BMQVRfUzNDNjRYWF9SRUdTX0dQSU9fTUVNUE9SVF9IIF9fRklMRV9fCisKKyNkZWZpbmUgUzNDNjRYWF9NRU0wQ09OU1RPUAlTM0M2NFhYX0dQSU9SRUcoMHgxQjApCisjZGVmaW5lIFMzQzY0WFhfTUVNMUNPTlNUT1AJUzNDNjRYWF9HUElPUkVHKDB4MUI0KQorCisjZGVmaW5lIFMzQzY0WFhfTUVNMENPTlNMUDAJUzNDNjRYWF9HUElPUkVHKDB4MUMwKQorI2RlZmluZSBTM0M2NFhYX01FTTBDT05TTFAxCVMzQzY0WFhfR1BJT1JFRygweDFDNCkKKyNkZWZpbmUgUzNDNjRYWF9NRU0xQ09OU0xQCVMzQzY0WFhfR1BJT1JFRygweDFDOCkKKworI2RlZmluZSBTM0M2NFhYX01FTTBEUlZDT04JUzNDNjRYWF9HUElPUkVHKDB4MUQwKQorI2RlZmluZSBTM0M2NFhYX01FTTFEUlZDT04JUzNDNjRYWF9HUElPUkVHKDB4MUQ0KQorCisjZW5kaWYgLyogX19BU01fUExBVF9TM0M2NFhYX1JFR1NfR1BJT19NRU1QT1JUX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8uaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1ncGlvLmgKaW5kZXggNzViODczZC4uODFmN2Y2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8uaAorKysgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtZ3Bpby5oCkBAIC0xMywyMyArMTMsMTc1IEBACiAKIC8qIEJhc2UgYWRkcmVzc2VzIGZvciBlYWNoIG9mIHRoZSBiYW5rcyAqLwogCi0jZGVmaW5lIFMzQzY0WFhfR1BBX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDAwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEJfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMDIwKQotI2RlZmluZSBTM0M2NFhYX0dQQ19CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAwNDApCi0jZGVmaW5lIFMzQzY0WFhfR1BEX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDA2MCkKLSNkZWZpbmUgUzNDNjRYWF9HUEVfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMDgwKQotI2RlZmluZSBTM0M2NFhYX0dQRl9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAwQTApCi0jZGVmaW5lIFMzQzY0WFhfR1BHX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDBDMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEhfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMEUwKQotI2RlZmluZSBTM0M2NFhYX0dQSV9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAxMDApCi0jZGVmaW5lIFMzQzY0WFhfR1BKX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDEyMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEtfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwODAwKQotI2RlZmluZSBTM0M2NFhYX0dQTF9CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDA4MTApCi0jZGVmaW5lIFMzQzY0WFhfR1BNX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDgyMCkKLSNkZWZpbmUgUzNDNjRYWF9HUE5fQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwODMwKQotI2RlZmluZSBTM0M2NFhYX0dQT19CQVNFCShTM0M2NFhYX1ZBX0dQSU8gKyAweDAxNDApCi0jZGVmaW5lIFMzQzY0WFhfR1BQX0JBU0UJKFMzQzY0WFhfVkFfR1BJTyArIDB4MDE2MCkKLSNkZWZpbmUgUzNDNjRYWF9HUFFfQkFTRQkoUzNDNjRYWF9WQV9HUElPICsgMHgwMTgwKQorI2RlZmluZSBTM0M2NFhYX0dQSU9SRUcocmVnKQkoUzNDNjRYWF9WQV9HUElPICsgKHJlZykpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEFfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMDAwKQorI2RlZmluZSBTM0M2NFhYX0dQQl9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAwMjApCisjZGVmaW5lIFMzQzY0WFhfR1BDX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDA0MCkKKyNkZWZpbmUgUzNDNjRYWF9HUERfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMDYwKQorI2RlZmluZSBTM0M2NFhYX0dQRV9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAwODApCisjZGVmaW5lIFMzQzY0WFhfR1BGX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDBBMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEdfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMEMwKQorI2RlZmluZSBTM0M2NFhYX0dQSF9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAwRTApCisjZGVmaW5lIFMzQzY0WFhfR1BJX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDEwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEpfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMTIwKQorI2RlZmluZSBTM0M2NFhYX0dQS19CQVNFCVMzQzY0WFhfR1BJT1JFRygweDA4MDApCisjZGVmaW5lIFMzQzY0WFhfR1BMX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDgxMCkKKyNkZWZpbmUgUzNDNjRYWF9HUE1fQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwODIwKQorI2RlZmluZSBTM0M2NFhYX0dQTl9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDA4MzApCisjZGVmaW5lIFMzQzY0WFhfR1BPX0JBU0UJUzNDNjRYWF9HUElPUkVHKDB4MDE0MCkKKyNkZWZpbmUgUzNDNjRYWF9HUFBfQkFTRQlTM0M2NFhYX0dQSU9SRUcoMHgwMTYwKQorI2RlZmluZSBTM0M2NFhYX0dQUV9CQVNFCVMzQzY0WFhfR1BJT1JFRygweDAxODApCisKKy8qIFNQQ09OICovCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTgkJUzNDNjRYWF9HUElPUkVHKDB4MUEwKQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0NBTV9NQVNLCQkoMHgzIDw8IDMwKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9DQU1fU0hJRlQJCSgzMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fQ0FNXzJtQQkJKDB4MCA8PCAzMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fQ0FNXzRtQQkJKDB4MSA8PCAzMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fQ0FNXzdtQQkJKDB4MiA8PCAzMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fQ0FNXzltQQkJKDB4MyA8PCAzMCkKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU1NQSV9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU1NQSV9TSElGVAkoMjgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTU1BJXzJtQQkJKDB4MCA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fSFNTUElfNG1BCQkoMHgxIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU1NQSV83bUEJCSgweDIgPDwgMjgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTU1BJXzltQQkJKDB4MyA8PCAyOCkKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU01NQ19NQVNLCQkoMHgzIDw8IDI2KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU01NQ19TSElGVAkoMjYpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTTU1DXzJtQQkJKDB4MCA8PCAyNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fSFNNTUNfNG1BCQkoMHgxIDw8IDI2KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9IU01NQ183bUEJCSgweDIgPDwgMjYpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0hTTU1DXzltQQkJKDB4MyA8PCAyNikKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9MQ0RfTUFTSwkJKDB4MyA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTENEX1NISUZUCQkoMjQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0xDRF8ybUEJCSgweDAgPDwgMjQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0xDRF80bUEJCSgweDEgPDwgMjQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0xDRF83bUEJCSgweDIgPDwgMjQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX0xDRF85bUEJCSgweDMgPDwgMjQpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTU9ERU1fTUFTSwkJKDB4MyA8PCAyMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTU9ERU1fU0hJRlQJKDIyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9NT0RFTV8ybUEJCSgweDAgPDwgMjIpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX01PREVNXzRtQQkJKDB4MSA8PCAyMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fTU9ERU1fN21BCQkoMHgyIDw8IDIyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9NT0RFTV85bUEJCSgweDMgPDwgMjIpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9uUlNUT1VUX09FTgkJKDEgPDwgMjEpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9EUlZDT05fU1BJQ0xLMV9NQVNLCSgweDMgPDwgMTgpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fRFJWQ09OX1NQSUNMSzFfU0hJRlQJKDE4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9TUElDTEsxXzJtQQkoMHgwIDw8IDE4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9TUElDTEsxXzRtQQkoMHgxIDw8IDE4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9TUElDTEsxXzdtQQkoMHgyIDw8IDE4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0RSVkNPTl9TUElDTEsxXzltQQkoMHgzIDw8IDE4KQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EUVNfUFVEX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EUVNfUFVEX1NISUZUCSgxNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RRU19QVURfRElTQUJMRUQJKDB4MCA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RRU19QVURfRE9XTgkJKDB4MSA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RRU19QVURfVVAJCSgweDIgPDwgMTYpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RfUFVEMV9NQVNLCQkoMHgzIDw8IDE0KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRF9QVUQxX1NISUZUCQkoMTQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EX1BVRDFfRElTQUJMRUQJKDB4MCA8PCAxNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RfUFVEMV9ET1dOCQkoMHgxIDw8IDE0KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRF9QVUQxX1VQCQkoMHgyIDw8IDE0KQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EX1BVRDBfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RfUFVEMF9TSElGVAkJKDEyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTFfRF9QVUQwX0RJU0FCTEVECSgweDAgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fTUVNMV9EX1BVRDBfRE9XTgkJKDB4MSA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9NRU0xX0RfUFVEMF9VUAkJKDB4MiA8PCAxMikKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTBfRF9QVURfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTBfRF9QVURfU0hJRlQJCSg4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTBfRF9QVURfRElTQUJMRUQJKDB4MCA8PCA4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTBfRF9QVURfRE9XTgkJKDB4MSA8PCA4KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX01FTTBfRF9QVURfVVAJCSgweDIgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OX1VTQkhfRE1QRAkJCSgxIDw8IDcpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fVVNCSF9EUFBECQkJKDEgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9VU0JIX1BVU1cyCQkoMSA8PCA1KQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX1VTQkhfUFVTVzEJCSgxIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05fVVNCSF9TVVNQTkQJCSgxIDw8IDMpCisKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9MQ0RfU0VMX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9MQ0RfU0VMX1NISUZUCQkoMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9MQ0RfU0VMX0hPU1QJCSgweDAgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTl9MQ0RfU0VMX1JHQgkJKDB4MSA8PCAwKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OX0xDRF9TRUxfNjA2XzY1NgkJKDB4MiA8PCAwKQorCisKKy8qIEV4dGVybmFsIGludGVycnVwdCByZWdpc3RlcnMgKi8KKworI2RlZmluZSBTM0M2NFhYX0VJTlQxMkNPTglTM0M2NFhYX0dQSU9SRUcoMHgyMDApCisjZGVmaW5lIFMzQzY0WFhfRUlOVDM0Q09OCVMzQzY0WFhfR1BJT1JFRygweDIwNCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UNTZDT04JUzNDNjRYWF9HUElPUkVHKDB4MjA4KQorI2RlZmluZSBTM0M2NFhYX0VJTlQ3OENPTglTM0M2NFhYX0dQSU9SRUcoMHgyMEMpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDlDT04JUzNDNjRYWF9HUElPUkVHKDB4MjEwKQorCisjZGVmaW5lIFMzQzY0WFhfRUlOVDEyRkxUQ09OCVMzQzY0WFhfR1BJT1JFRygweDIyMCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMzRGTFRDT04JUzNDNjRYWF9HUElPUkVHKDB4MjI0KQorI2RlZmluZSBTM0M2NFhYX0VJTlQ1NkZMVENPTglTM0M2NFhYX0dQSU9SRUcoMHgyMjgpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDc4RkxUQ09OCVMzQzY0WFhfR1BJT1JFRygweDIyQykKKyNkZWZpbmUgUzNDNjRYWF9FSU5UOUZMVENPTglTM0M2NFhYX0dQSU9SRUcoMHgyMzApCisKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMTJNQVNLCVMzQzY0WFhfR1BJT1JFRygweDI0MCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMzRNQVNLCVMzQzY0WFhfR1BJT1JFRygweDI0NCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UNTZNQVNLCVMzQzY0WFhfR1BJT1JFRygweDI0OCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UNzhNQVNLCVMzQzY0WFhfR1BJT1JFRygweDI0QykKKyNkZWZpbmUgUzNDNjRYWF9FSU5UOU1BU0sJUzNDNjRYWF9HUElPUkVHKDB4MjUwKQorCisjZGVmaW5lIFMzQzY0WFhfRUlOVDEyUEVORAlTM0M2NFhYX0dQSU9SRUcoMHgyNjApCisjZGVmaW5lIFMzQzY0WFhfRUlOVDM0UEVORAlTM0M2NFhYX0dQSU9SRUcoMHgyNjQpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDU2UEVORAlTM0M2NFhYX0dQSU9SRUcoMHgyNjgpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDc4UEVORAlTM0M2NFhYX0dQSU9SRUcoMHgyNkMpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDlQRU5ECVMzQzY0WFhfR1BJT1JFRygweDI3MCkKKworI2RlZmluZSBTM0M2NFhYX1BSSU9SSVRZCVMzQzY0WFhfR1BJT1JFRygweDI4MCkKKyNkZWZpbmUgUzNDNjRYWF9QUklPUklUWV9BUkIoeCkJKDEgPDwgKHgpKQorCisjZGVmaW5lIFMzQzY0WFhfU0VSVklDRQkJUzNDNjRYWF9HUElPUkVHKDB4Mjg0KQorI2RlZmluZSBTM0M2NFhYX1NFUlZJQ0VQRU5ECVMzQzY0WFhfR1BJT1JFRygweDI4OCkKKworI2RlZmluZSBTM0M2NFhYX0VJTlQwQ09OMAlTM0M2NFhYX0dQSU9SRUcoMHg5MDApCisjZGVmaW5lIFMzQzY0WFhfRUlOVDBDT04xCVMzQzY0WFhfR1BJT1JFRygweDkwNCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMEZMVENPTjAJUzNDNjRYWF9HUElPUkVHKDB4OTEwKQorI2RlZmluZSBTM0M2NFhYX0VJTlQwRkxUQ09OMQlTM0M2NFhYX0dQSU9SRUcoMHg5MTQpCisjZGVmaW5lIFMzQzY0WFhfRUlOVDBGTFRDT04yCVMzQzY0WFhfR1BJT1JFRygweDkxOCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMEZMVENPTjMJUzNDNjRYWF9HUElPUkVHKDB4OTFDKQorCisjZGVmaW5lIFMzQzY0WFhfRUlOVDBNQVNLCVMzQzY0WFhfR1BJT1JFRygweDkyMCkKKyNkZWZpbmUgUzNDNjRYWF9FSU5UMFBFTkQJUzNDNjRYWF9HUElPUkVHKDB4OTI0KQorCisvKiBHUElPIHNsZWVwIGNvbmZpZ3VyYXRpb24gKi8KKworI2RlZmluZSBTM0M2NFhYX1NQQ09OU0xQCVMzQzY0WFhfR1BJT1JFRygweDg4MCkKKworI2RlZmluZSBTM0M2NFhYX1NQQ09OU0xQX1RET19QVUxMRE9XTgkoMSA8PCAxNCkKKyNkZWZpbmUgUzNDNjRYWF9TUENPTlNMUF9DS0UxSU5JVAkoMSA8PCA1KQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfUlNUT1VUX01BU0sJKDB4MyA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9TUENPTlNMUF9SU1RPVVRfT1VUMAkoMHgwIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX1NQQ09OU0xQX1JTVE9VVF9PVVQxCSgweDEgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfUlNUT1VUX0hJWgkoMHgyIDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfS1BDT0xfTUFTSwkoMHgzIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfS1BDT0xfT1VUMAkoMHgwIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfS1BDT0xfT1VUMQkoMHgxIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfU1BDT05TTFBfS1BDT0xfSU5QCSgweDIgPDwgMCkKKworCisjZGVmaW5lIFMzQzY0WFhfU0xQRU4JCVMzQzY0WFhfR1BJT1JFRygweDkzMCkKKworI2RlZmluZSBTM0M2NFhYX1NMUEVOX1VTRV94U0xQCQkoMSA8PCAwKQorI2RlZmluZSBTM0M2NFhYX1NMUEVOX0NGR19CWVNMUEVOCSgxIDw8IDEpCiAKICNlbmRpZiAvKiBfX0FTTV9QTEFUX1MzQzY0WFhfUkVHU19HUElPX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLW1vZGVtLmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtbW9kZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWY3NzU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLW1vZGVtLmgKQEAgLTAsMCArMSwzMSBAQAorLyogYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLW1vZGVtLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0M2NFhYIC0gbW9kZW0gYmxvY2sgcmVnaXN0ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19QTEFUX1MzQzY0WFhfUkVHU19NT0RFTV9ICisjZGVmaW5lIF9fUExBVF9TM0M2NFhYX1JFR1NfTU9ERU1fSCBfX0ZJTEVfXworCisjZGVmaW5lIFMzQzY0WFhfTU9ERU1SRUcoeCkJKFMzQzY0WFhfVkFfTU9ERU0gKyAoeCkpCisKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTV9JTlQyQVAJCQlTM0M2NFhYX01PREVNUkVHKDB4MCkKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTV9JTlQyTU9ERU0JCQlTM0M2NFhYX01PREVNUkVHKDB4NCkKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTV9NSUZDT04JCQlTM0M2NFhYX01PREVNUkVHKDB4OCkKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTV9NSUZQQ09OCQkJUzNDNjRYWF9NT0RFTVJFRygweEMpCisjZGVmaW5lIFMzQzY0WFhfTU9ERU1fSU5UQ0xSCQkJUzNDNjRYWF9NT0RFTVJFRygweDEwKQorI2RlZmluZSBTM0M2NFhYX01PREVNX0RNQV9UWEFERFIJCVMzQzY0WFhfTU9ERU1SRUcoMHgxNCkKKyNkZWZpbmUgUzNDNjRYWF9NT0RFTV9ETUFfUlhBRERSCQlTM0M2NFhYX01PREVNUkVHKDB4MTgpCisKKyNkZWZpbmUgTUlGUENPTl9JTlQyTV9MRVZFTAkJCSgxIDw8IDQpCisjZGVmaW5lIE1JRlBDT05fTENEX0JZUEFTUwkJCSgxIDw8IDMpCisKKyNlbmRpZiAvKiBfX1BMQVRfUzNDNjRYWF9SRUdTX01PREVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXMuaAppbmRleCBkOGVkODI5Li42OWI3OGQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3Mtc3lzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXN5cy5oCkBAIC0xNyw2ICsxNywxMCBAQAogCiAjZGVmaW5lIFMzQ19TWVNSRUcoeCkJCShTM0NfVkFfU1lTICsgKHgpKQogCisjZGVmaW5lIFMzQzY0WFhfQUhCX0NPTjAJUzNDX1NZU1JFRygweDEwMCkKKyNkZWZpbmUgUzNDNjRYWF9BSEJfQ09OMQlTM0NfU1lTUkVHKDB4MTA0KQorI2RlZmluZSBTM0M2NFhYX0FIQl9DT04yCVMzQ19TWVNSRUcoMHgxMDgpCisKICNkZWZpbmUgUzNDNjRYWF9PVEhFUlMJCVMzQ19TWVNSRUcoMHg5MDApCiAKICNkZWZpbmUgUzNDNjRYWF9PVEhFUlNfVVNCTUFTSwkoMSA8PCAxNikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXNjb24tcG93ZXIuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXNjb24tcG93ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzBkOTZhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXN5c2Nvbi1wb3dlci5oCkBAIC0wLDAgKzEsMTE2IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3Mtc3lzY29uLXBvd2VyLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0M2NFhYIC0gc3lzY29uIHBvd2VyIGFuZCBzbGVlcCBjb250cm9sIHJlZ2lzdGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fUExBVF9TM0M2NFhYX1JFR1NfU1lTQ09OX1BPV0VSX0gKKyNkZWZpbmUgX19QTEFUX1MzQzY0WFhfUkVHU19TWVNDT05fUE9XRVJfSCBfX0ZJTEVfXworCisjZGVmaW5lIFMzQzY0WFhfUFdSX0NGRwkJCQlTM0NfU1lTUkVHKDB4ODA0KQorCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX09TQ19PVEdfRElTQUJMRQkJKDEgPDwgMTcpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX01NQzJfRElTQUJMRQkJKDEgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX01NQzFfRElTQUJMRQkJKDEgPDwgMTUpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX01NQzBfRElTQUJMRQkJKDEgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0hTSV9ESVNBQkxFCQkoMSA8PCAxMykKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfVFNfRElTQUJMRQkJKDEgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX1JUQ19USUNLX0RJU0FCTEUJCSgxIDw8IDExKQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19SVENfQUxBUk1fRElTQUJMRQkoMSA8PCAxMCkKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfTVNNX0RJU0FCTEUJCSgxIDw8IDkpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0tFWV9ESVNBQkxFCQkoMSA8PCA4KQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19CQVRGX0RJU0FCTEUJCSgxIDw8IDcpCisKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX1dGSV9NQVNLCQkoMHgzIDw8IDUpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0NGR19XRklfU0hJRlQJCSg1KQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19DRkdfV0ZJX0lHTk9SRQkJKDB4MCA8PCA1KQorI2RlZmluZSBTM0M2NFhYX1BXUkNGR19DRkdfV0ZJX0lETEUJCSgweDEgPDwgNSkKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX1dGSV9TVE9QCQkoMHgyIDw8IDUpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0NGR19XRklfU0xFRVAJCSgweDMgPDwgNSkKKworI2RlZmluZSBTM0M2NFhYX1BXUkNGR19DRkdfQkFURkxUX01BU0sJCSgweDMgPDwgMykKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX0JBVEZMVF9TSElGVAkJKDMpCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0NGR19CQVRGTFRfSUdOT1JFCSgweDAgPDwgMykKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX0JBVEZMVF9JUlEJCSgweDEgPDwgMykKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfQ0ZHX0JBVEZMVF9TTEVFUAkJKDB4MyA8PCAzKQorCisjZGVmaW5lIFMzQzY0WFhfUFdSQ0ZHX0NGR19CQVRfV0FLRQkJKDEgPDwgMikKKyNkZWZpbmUgUzNDNjRYWF9QV1JDRkdfT1NDMjdfRU4JCQkoMSA8PCAwKQorCisjZGVmaW5lIFMzQzY0WFhfRUlOVF9NQVNLCQkJUzNDX1NZU1JFRygweDgwOCkKKworI2RlZmluZSBTM0M2NFhYX05PUk1BTF9DRkcJCQlTM0NfU1lTUkVHKDB4ODEwKQorCisjZGVmaW5lIFMzQzY0WFhfTk9STUFMQ0ZHX0lST01fT04JCSgxIDw8IDMwKQorI2RlZmluZSBTM0M2NFhYX05PUk1BTENGR19ET01BSU5fRVRNX09OCQkoMSA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9OT1JNQUxDRkdfRE9NQUlOX1NfT04JCSgxIDw8IDE1KQorI2RlZmluZSBTM0M2NFhYX05PUk1BTENGR19ET01BSU5fRl9PTgkJKDEgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfTk9STUFMQ0ZHX0RPTUFJTl9QX09OCQkoMSA8PCAxMykKKyNkZWZpbmUgUzNDNjRYWF9OT1JNQUxDRkdfRE9NQUlOX0lfT04JCSgxIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX05PUk1BTENGR19ET01BSU5fR19PTgkJKDEgPDwgMTApCisjZGVmaW5lIFMzQzY0WFhfTk9STUFMQ0ZHX0RPTUFJTl9WX09OCQkoMSA8PCA5KQorCisjZGVmaW5lIFMzQzY0WFhfU1RPUF9DRkcJCQlTM0NfU1lTUkVHKDB4ODE0KQorCisjZGVmaW5lIFMzQzY0WFhfU1RPUENGR19NRU1PUllfQVJNX09OCQkoMSA8PCAyOSkKKyNkZWZpbmUgUzNDNjRYWF9TVE9QQ0ZHX1RPUF9NRU1PUllfT04JCSgxIDw8IDIwKQorI2RlZmluZSBTM0M2NFhYX1NUT1BDRkdfQVJNX0xPR0lDX09OCQkoMSA8PCAxNykKKyNkZWZpbmUgUzNDNjRYWF9TVE9QQ0ZHX1RPUF9MT0dJQ19PTgkJKDEgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9TVE9QQ0ZHX09TQ19FTgkJCSgxIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9TTEVFUF9DRkcJCQlTM0NfU1lTUkVHKDB4ODE4KQorCisjZGVmaW5lIFMzQzY0WFhfU0xFRVBDRkdfT1NDX0VOCQkJKDEgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX1NUT1BfTUVNX0NGRwkJCVMzQ19TWVNSRUcoMHg4MWMpCisKKyNkZWZpbmUgUzNDNjRYWF9TVE9QTUVNQ0ZHX01PREVNSUZfUkVUQUlOCSgxIDw8IDYpCisjZGVmaW5lIFMzQzY0WFhfU1RPUE1FTUNGR19IT1NUSUZfUkVUQUlOCSgxIDw8IDUpCisjZGVmaW5lIFMzQzY0WFhfU1RPUE1FTUNGR19PVEdfUkVUQUlOCQkoMSA8PCA0KQorI2RlZmluZSBTM0M2NFhYX1NUT1BNRU1DRkdfSFNNQ0NfUkVUQUlOCQkoMSA8PCAzKQorI2RlZmluZSBTM0M2NFhYX1NUT1BNRU1DRkdfSVJPTV9SRVRBSU4JCSgxIDw8IDIpCisjZGVmaW5lIFMzQzY0WFhfU1RPUE1FTUNGR19JUkRBX1JFVEFJTgkJKDEgPDwgMSkKKyNkZWZpbmUgUzNDNjRYWF9TVE9QTUVNQ0ZHX05GQ09OX1JFVEFJTgkJKDEgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX09TQ19TVEFCTEUJCQlTM0NfU1lTUkVHKDB4ODI0KQorI2RlZmluZSBTM0M2NFhYX1BXUl9TVEFCTEUJCQlTM0NfU1lTUkVHKDB4ODI4KQorCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQX1NUQVQJCQlTM0NfU1lTUkVHKDB4OTA4KQorCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9NTUMyCQkJKDEgPDwgMTEpCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9NTUMxCQkJKDEgPDwgMTApCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9NTUMwCQkJKDEgPDwgOSkKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBTVEFUX0hTSQkJCSgxIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9CQVRGTFQJCSgxIDw8IDYpCisjZGVmaW5lIFMzQzY0WFhfV0FLRVVQU1RBVF9NU00JCQkoMSA8PCA1KQorI2RlZmluZSBTM0M2NFhYX1dBS0VVUFNUQVRfS0VZCQkJKDEgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBTVEFUX1RTCQkJKDEgPDwgMykKKyNkZWZpbmUgUzNDNjRYWF9XQUtFVVBTVEFUX1JUQ19USUNLCQkoMSA8PCAyKQorI2RlZmluZSBTM0M2NFhYX1dBS0VVUFNUQVRfUlRDX0FMQVJNCQkoMSA8PCAxKQorI2RlZmluZSBTM0M2NFhYX1dBS0VVUFNUQVRfRUlOVAkJCSgxIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9CTEtfUFdSX1NUQVQJCQlTM0NfU1lTUkVHKDB4OTBjKQorCisjZGVmaW5lIFMzQzY0WFhfQkxLUFdSU1RBVF9HCQkJKDEgPDwgNykKKyNkZWZpbmUgUzNDNjRYWF9CTEtQV1JTVEFUX0VUTQkJCSgxIDw8IDYpCisjZGVmaW5lIFMzQzY0WFhfQkxLUFdSU1RBVF9TCQkJKDEgPDwgNSkKKyNkZWZpbmUgUzNDNjRYWF9CTEtQV1JTVEFUX0YJCQkoMSA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0JMS1BXUlNUQVRfUAkJCSgxIDw8IDMpCisjZGVmaW5lIFMzQzY0WFhfQkxLUFdSU1RBVF9JCQkJKDEgPDwgMikKKyNkZWZpbmUgUzNDNjRYWF9CTEtQV1JTVEFUX1YJCQkoMSA8PCAxKQorI2RlZmluZSBTM0M2NFhYX0JMS1BXUlNUQVRfVE9QCQkJKDEgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX0lORk9STTAJCQkJUzNDX1NZU1JFRygweEEwMCkKKyNkZWZpbmUgUzNDNjRYWF9JTkZPUk0xCQkJCVMzQ19TWVNSRUcoMHhBMDQpCisjZGVmaW5lIFMzQzY0WFhfSU5GT1JNMgkJCQlTM0NfU1lTUkVHKDB4QTA4KQorI2RlZmluZSBTM0M2NFhYX0lORk9STTMJCQkJUzNDX1NZU1JFRygweEEwQykKKworI2VuZGlmIC8qIF9fUExBVF9TM0M2NFhYX1JFR1NfU1lTQ09OX1BPV0VSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEtZWludC5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKaW5kZXggY2Y1MjQ4Mi4uNDdlNTE1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKQEAgLTI3LDIwICsyNyw2IEBACiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCi0vKiBHUElPIGlzIDB4N0YwMDh4eHgsICovCi0jZGVmaW5lIFMzQzY0WFhfR1BJT1JFRyh4KQkoUzNDNjRYWF9WQV9HUElPICsgKHgpKQotCi0jZGVmaW5lIFMzQzY0WFhfRUlOVDBDT04wCVMzQzY0WFhfR1BJT1JFRygweDkwMCkKLSNkZWZpbmUgUzNDNjRYWF9FSU5UMENPTjEJUzNDNjRYWF9HUElPUkVHKDB4OTA0KQotI2RlZmluZSBTM0M2NFhYX0VJTlQwRkxUQ09OMAlTM0M2NFhYX0dQSU9SRUcoMHg5MTApCi0jZGVmaW5lIFMzQzY0WFhfRUlOVDBGTFRDT04xCVMzQzY0WFhfR1BJT1JFRygweDkxNCkKLSNkZWZpbmUgUzNDNjRYWF9FSU5UMEZMVENPTjIJUzNDNjRYWF9HUElPUkVHKDB4OTE4KQotI2RlZmluZSBTM0M2NFhYX0VJTlQwRkxUQ09OMwlTM0M2NFhYX0dQSU9SRUcoMHg5MUMpCi0KLSNkZWZpbmUgUzNDNjRYWF9FSU5UME1BU0sJUzNDNjRYWF9HUElPUkVHKDB4OTIwKQotI2RlZmluZSBTM0M2NFhYX0VJTlQwUEVORAlTM0M2NFhYX0dQSU9SRUcoMHg5MjQpCi0KLQogI2RlZmluZSBlaW50X29mZnNldChpcnEpCSgoaXJxKSAtIElSUV9FSU5UKDApKQogI2RlZmluZSBlaW50X2lycV90b19iaXQoaXJxKQkoMSA8PCBlaW50X29mZnNldChpcnEpKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCBiNDIxMWQ4Li45NDVlMGQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBUaHUgTWFyIDEyIDE4OjAxOjQ1IDIwMDkKKyMgTGFzdCB1cGRhdGU6IE1vbiBNYXIgMjMgMjA6MDk6MDEgMjAwOQogIwogIyBtYWNoaW5lX2lzX3h4eAlDT05GSUdfeHh4eAkJTUFDSF9UWVBFX3h4eAkJbnVtYmVyCiAjCkBAIC0yMTI0LDMgKzIxMjQsMTEgQEAKIGZtendlYm1vZHVsCQlNQUNIX0ZNWldFQk1PRFVMCUZNWldFQk1PRFVMCQkyMTM0CiByZDc4eDAwX21hc2EJCU1BQ0hfUkQ3OFgwMF9NQVNBCVJENzhYMDBfTUFTQQkJMjEzNQogc21hbGxvZ2dlcgkJTUFDSF9TTUFMTE9HR0VSCQlTTUFMTE9HR0VSCQkyMTM2CitjY3c5cDkyMTUJCU1BQ0hfQ0NXOVA5MjE1CQlDQ1c5UDkyMTUJCTIxMzcKK2RtMzU1X2xlb3BhcmQJCU1BQ0hfRE0zNTVfTEVPUEFSRAlETTM1NV9MRU9QQVJECQkyMTM4Cit0czIxOQkJCU1BQ0hfVFMyMTkJCVRTMjE5CQkJMjEzOQordG55X2E5MjYzCQlNQUNIX1ROWV9BOTI2MwkJVE5ZX0E5MjYzCQkyMTQwCithcG9sbG8JCQlNQUNIX0FQT0xMTwkJQVBPTExPCQkJMjE0MQorYXQ5MWNhcDlzdGsJCU1BQ0hfQVQ5MUNBUDlTVEsJQVQ5MUNBUDlTVEsJCTIxNDIKK3NwYzMwMAkJCU1BQ0hfU1BDMzAwCQlTUEMzMDAJCQkyMTQzCitla28JCQlNQUNIX0VLTwkJRUtPCQkJMjE0NApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcC5oIGIvYXJjaC9hcm0vdmZwL3ZmcC5oCmluZGV4IDhkZTg2ZTQuLmM4Yzk4ZGQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwLmgKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcC5oCkBAIC0zNzcsNiArMzc3LDQgQEAKIAl1MzIgZmxhZ3M7CiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19QTSkKIGV4dGVybiB2b2lkIHZmcF9zYXZlX3N0YXRlKHZvaWQgKmxvY2F0aW9uLCB1MzIgZnBleGMpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwaHcuUyBiL2FyY2gvYXJtL3ZmcC92ZnBody5TCmluZGV4IGM5MmEwOGIuLmE1YTRlNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnBody5TCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBody5TCkBAIC0xNzIsNyArMTcyLDYgQEAKIAkJCQkJQCByZXRyeSB0aGUgZmF1bHRlZCBpbnN0cnVjdGlvbgogRU5EUFJPQyh2ZnBfc3VwcG9ydF9lbnRyeSkKIAotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfUE0pCiBFTlRSWSh2ZnBfc2F2ZV9zdGF0ZSkKIAlAIFNhdmUgdGhlIGN1cnJlbnQgVkZQIHN0YXRlCiAJQCByMCAtIHNhdmUgbG9jYXRpb24KQEAgLTE5MCw3ICsxODksNiBAQAogCXN0bWlhCXIwLCB7cjEsIHIyLCByMywgcjEyfQlAIHNhdmUgRlBFWEMsIEZQU0NSLCBGUElOU1QsIEZQSU5TVDIKIAltb3YJcGMsIGxyCiBFTkRQUk9DKHZmcF9zYXZlX3N0YXRlKQotI2VuZGlmCiAKIGxhc3RfVkZQX2NvbnRleHRfYWRkcmVzczoKIAkud29yZAlsYXN0X1ZGUF9jb250ZXh0CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggOWY0NzZhMS4uNzU0NTdiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtMzc3LDYgKzM3Nyw1NSBAQAogc3RhdGljIGlubGluZSB2b2lkIHZmcF9wbV9pbml0KHZvaWQpIHsgfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCisvKgorICogU3luY2hyb25pc2UgdGhlIGhhcmR3YXJlIFZGUCBzdGF0ZSBvZiBhIHRocmVhZCBvdGhlciB0aGFuIGN1cnJlbnQgd2l0aCB0aGUKKyAqIHNhdmVkIG9uZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSBwdHJhY2UgbWVjaGFuaXNtLgorICovCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCB2ZnBfc3luY19zdGF0ZShzdHJ1Y3QgdGhyZWFkX2luZm8gKnRocmVhZCkKK3sKKwkvKgorCSAqIE9uIFNNUCBzeXN0ZW1zLCB0aGUgVkZQIHN0YXRlIGlzIGF1dG9tYXRpY2FsbHkgc2F2ZWQgYXQgZXZlcnkKKwkgKiBjb250ZXh0IHN3aXRjaC4gV2UgbWFyayB0aGUgdGhyZWFkIFZGUCBzdGF0ZSBhcyBiZWxvbmdpbmcgdG8gYQorCSAqIG5vbi1leGlzdGVudCBDUFUgc28gdGhhdCB0aGUgc2F2ZWQgb25lIHdpbGwgYmUgcmVsb2FkZWQgd2hlbgorCSAqIG5lZWRlZC4KKwkgKi8KKwl0aHJlYWQtPnZmcHN0YXRlLmhhcmQuY3B1ID0gTlJfQ1BVUzsKK30KKyNlbHNlCit2b2lkIHZmcF9zeW5jX3N0YXRlKHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkKQoreworCXVuc2lnbmVkIGludCBjcHUgPSBnZXRfY3B1KCk7CisJdTMyIGZwZXhjID0gZm1yeChGUEVYQyk7CisKKwkvKgorCSAqIElmIFZGUCBpcyBlbmFibGVkLCB0aGUgcHJldmlvdXMgc3RhdGUgd2FzIGFscmVhZHkgc2F2ZWQgYW5kCisJICogbGFzdF9WRlBfY29udGV4dCB1cGRhdGVkLgorCSAqLworCWlmIChmcGV4YyAmIEZQRVhDX0VOKQorCQlnb3RvIG91dDsKKworCWlmICghbGFzdF9WRlBfY29udGV4dFtjcHVdKQorCQlnb3RvIG91dDsKKworCS8qCisJICogU2F2ZSB0aGUgbGFzdCBWRlAgc3RhdGUgb24gdGhpcyBDUFUuCisJICovCisJZm14cihGUEVYQywgZnBleGMgfCBGUEVYQ19FTik7CisJdmZwX3NhdmVfc3RhdGUobGFzdF9WRlBfY29udGV4dFtjcHVdLCBmcGV4Yyk7CisJZm14cihGUEVYQywgZnBleGMpOworCisJLyoKKwkgKiBTZXQgdGhlIGNvbnRleHQgdG8gTlVMTCB0byBmb3JjZSBhIHJlbG9hZCB0aGUgbmV4dCB0aW1lIHRoZSB0aHJlYWQKKwkgKiB1c2VzIHRoZSBWRlAuCisJICovCisJbGFzdF9WRlBfY29udGV4dFtjcHVdID0gTlVMTDsKKworb3V0OgorCXB1dF9jcHUoKTsKK30KKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAKIC8qCkBAIC00MjcsNiArNDc2LDE4IEBACiAJCSAqIGluIHBsYWNlOyByZXBvcnQgVkZQIHN1cHBvcnQgdG8gdXNlcnNwYWNlLgogCQkgKi8KIAkJZWxmX2h3Y2FwIHw9IEhXQ0FQX1ZGUDsKKyNpZmRlZiBDT05GSUdfVkZQdjMKKwkJaWYgKFZGUF9hcmNoID49IDMpIHsKKwkJCWVsZl9od2NhcCB8PSBIV0NBUF9WRlB2MzsKKworCQkJLyoKKwkJCSAqIENoZWNrIGZvciBWRlB2MyBEMTYuIENQVXMgaW4gdGhpcyBjb25maWd1cmF0aW9uCisJCQkgKiBvbmx5IGhhdmUgMTYgeCA2NGJpdCByZWdpc3RlcnMuCisJCQkgKi8KKwkJCWlmICgoKGZtcngoTVZGUjApICYgTVZGUjBfQV9TSU1EX01BU0spKSA9PSAxKQorCQkJCWVsZl9od2NhcCB8PSBIV0NBUF9WRlB2M0QxNjsKKwkJfQorI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FT04KIAkJLyoKIAkJICogQ2hlY2sgZm9yIHRoZSBwcmVzZW5jZSBvZiB0aGUgQWR2YW5jZWQgU0lNRApkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC9mbGFzaC5jIGIvYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC9mbGFzaC5jCmluZGV4IGE5OGM2ZGQuLjU1OWJiY2IwIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2JvYXJkcy9oYW1tZXJoZWFkL2ZsYXNoLmMKKysrIGIvYXJjaC9hdnIzMi9ib2FyZHMvaGFtbWVyaGVhZC9mbGFzaC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvaXNwMTE2eC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPG1hY2gvcG9ydG11eC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggMzU4NjNmMi4uMDRjODYwNiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX19BU01fQVZSMzJfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggYTE0YWE1Yi4uMTRjYzczNyAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTQsNyArNCw3IEBACiAjaWZuZGVmIF9fQVNNX0FWUjMyX1NXQUJfSAogI2RlZmluZSBfX0FTTV9BVlIzMl9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCmluZGV4IGVkMDkyMzkuLjI0NWIyZWUyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtMjMwLDEwICsyMzAsMTAgQEAKIAlhc20gdm9sYXRpbGUoCQkJCQkJCVwKIAkJIjE6CWxkLiIgc3VmZml4ICIJJTEsICUzCQkJXG4iCVwKIAkJIjI6CQkJCQkJXG4iCVwKLQkJIgkuc2VjdGlvbiAuZml4dXAsIFwiYXhcIgkJCVxuIglcCisJCSIJLnN1YnNlY3Rpb24gMQkJCQlcbiIJXAogCQkiMzoJbW92CSUwLCAlNAkJCQlcbiIJXAogCQkiCXJqbXAJMmIJCQkJXG4iCVwKLQkJIgkucHJldmlvdXMJCQkJXG4iCVwKKwkJIgkuc3Vic2VjdGlvbiAwCQkJCVxuIglcCiAJCSIJLnNlY3Rpb24gX19leF90YWJsZSwgXCJhXCIJCVxuIglcCiAJCSIJLmxvbmcJMWIsIDNiCQkJCVxuIglcCiAJCSIJLnByZXZpb3VzCQkJCVxuIglcCkBAIC0yOTUsMTAgKzI5NSwxMCBAQAogCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAogCQkiMToJc3QuIiBzdWZmaXggIgklMSwgJTMJCQlcbiIJXAogCQkiMjoJCQkJCQlcbiIJXAotCQkiCS5zZWN0aW9uIC5maXh1cCwgXCJheFwiCQkJXG4iCVwKKwkJIgkuc3Vic2VjdGlvbiAxCQkJCVxuIglcCiAJCSIzOgltb3YJJTAsICU0CQkJCVxuIglcCiAJCSIJcmptcAkyYgkJCQlcbiIJXAotCQkiCS5wcmV2aW91cwkJCQlcbiIJXAorCQkiCS5zdWJzZWN0aW9uIDAJCQkJXG4iCVwKIAkJIgkuc2VjdGlvbiBfX2V4X3RhYmxlLCBcImFcIgkJXG4iCVwKIAkJIgkubG9uZwkxYiwgM2IJCQkJXG4iCVwKIAkJIgkucHJldmlvdXMJCQkJXG4iCVwKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL2VudHJ5LWF2cjMyYi5TIGIvYXJjaC9hdnIzMi9rZXJuZWwvZW50cnktYXZyMzJiLlMKaW5kZXggMzNkNDkzNy4uMDA5YTgwMSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvZW50cnktYXZyMzJiLlMKKysrIGIvYXJjaC9hdnIzMi9rZXJuZWwvZW50cnktYXZyMzJiLlMKQEAgLTE1MCwxMCArMTUwLDEwIEBACiAJdGxibWlzc19yZXN0b3JlCiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fcGFnZV9mYXVsdAorCWNhbGwJZG9fcGFnZV9mYXVsdAogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIAkuYWxpZ24JMgpAQCAtMjUwLDcgKzI1MCw3IEBACiAKIAkuZ2xvYmFsIHJldF9mcm9tX2ZvcmsKIHJldF9mcm9tX2Zvcms6Ci0JcmNhbGwgICBzY2hlZHVsZV90YWlsCisJY2FsbCAgIHNjaGVkdWxlX3RhaWwKIAogCS8qIGNoZWNrIGZvciBzeXNjYWxsIHRyYWNpbmcgKi8KIAlnZXRfdGhyZWFkX2luZm8gcjAKQEAgLTI2MSw3ICsyNjEsNyBAQAogCiBzeXNjYWxsX3RyYWNlX2VudGVyOgogCXB1c2htCXI4LXIxMgotCXJjYWxsCXN5c2NhbGxfdHJhY2UKKwljYWxsCXN5c2NhbGxfdHJhY2UKIAlwb3BtCXI4LXIxMgogCXJqbXAJc3lzY2FsbF90cmFjZV9jb250CiAKQEAgLTI2OSwxNCArMjY5LDE0IEBACiAJYmxkCXIxLCBUSUZfU1lTQ0FMTF9UUkFDRQogCWJyY2MJMWYKIAl1bm1hc2tfaW50ZXJydXB0cwotCXJjYWxsCXN5c2NhbGxfdHJhY2UKKwljYWxsCXN5c2NhbGxfdHJhY2UKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAogMToJYmxkCXIxLCBUSUZfTkVFRF9SRVNDSEVECiAJYnJjYwkyZgogCXVubWFza19pbnRlcnJ1cHRzCi0JcmNhbGwJc2NoZWR1bGUKKwljYWxsCXNjaGVkdWxlCiAJbWFza19pbnRlcnJ1cHRzCiAJbGQudwlyMSwgcjBbVElfZmxhZ3NdCiAJcmptcAkxYgpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJdW5tYXNrX2ludGVycnVwdHMKIAltb3YJcjEyLCBzcAogCW1vdglyMTEsIHIwCi0JcmNhbGwJZG9fbm90aWZ5X3Jlc3VtZQorCWNhbGwJZG9fbm90aWZ5X3Jlc3VtZQogCW1hc2tfaW50ZXJydXB0cwogCWxkLncJcjEsIHIwW1RJX2ZsYWdzXQogCXJqbXAJMWIKQEAgLTM5NCw3ICszOTQsNyBAQAogCiAJbWZzcglyMTIsIFNZU1JFR19FQ1IKIAltb3YJcjExLCBzcAotCXJjYWxsCWRvX2NyaXRpY2FsX2V4Y2VwdGlvbgorCWNhbGwJZG9fY3JpdGljYWxfZXhjZXB0aW9uCiAKIAkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuLi4gKi8KIGJhZF9yZXR1cm46CkBAIC00MDcsMTggKzQwNywxOCBAQAogZG9fYnVzX2Vycm9yX3dyaXRlOgogCXN1YglzcCwgNAogCXN0bXRzCS0tc3AsIHIwLWxyCi0JcmNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKKwljYWxsCXNhdmVfZnVsbF9jb250ZXh0X2V4CiAJbW92CXIxMSwgMQogCXJqbXAJMWYKIAogZG9fYnVzX2Vycm9yX3JlYWQ6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltb3YJcjExLCAwCiAxOgltZnNyCXIxMiwgU1lTUkVHX0JFQVIKIAltb3YJcjEwLCBzcAotCXJjYWxsCWRvX2J1c19lcnJvcgorCWNhbGwJZG9fYnVzX2Vycm9yCiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogCS5hbGlnbgkxCkBAIC00MzMsNyArNDMzLDcgQEAKIDE6CXB1c2htCXI4LCByOQkvKiBQQyBhbmQgU1IgKi8KIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fbm1pCisJY2FsbAlkb19ubWkKIAlwb3BtCXI4LXI5CiAJbXRzcglTWVNSRUdfUkFSX05NSSwgcjgKIAl0c3QJcjAsIHIwCkBAIC00NTcsMjkgKzQ1NywyOSBAQAogaGFuZGxlX2FkZHJlc3NfZmF1bHQ6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fYWRkcmVzc19leGNlcHRpb24KKwljYWxsCWRvX2FkZHJlc3NfZXhjZXB0aW9uCiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogaGFuZGxlX3Byb3RlY3Rpb25fZmF1bHQ6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9fcGFnZV9mYXVsdAorCWNhbGwJZG9fcGFnZV9mYXVsdAogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIAkuYWxpZ24JMQogZG9faWxsZWdhbF9vcGNvZGVfbGw6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAltZnNyCXIxMiwgU1lTUkVHX0VDUgogCW1vdglyMTEsIHNwCi0JcmNhbGwJZG9faWxsZWdhbF9vcGNvZGUKKwljYWxsCWRvX2lsbGVnYWxfb3Bjb2RlCiAJcmptcAlyZXRfZnJvbV9leGNlcHRpb24KIAogZG9fZHRsYl9tb2RpZmllZDoKQEAgLTUxMywxMSArNTEzLDExIEBACiBkb19mcGVfbGw6CiAJc3ViCXNwLCA0CiAJc3RtdHMJLS1zcCwgcjAtbHIKLQlyY2FsbAlzYXZlX2Z1bGxfY29udGV4dF9leAorCWNhbGwJc2F2ZV9mdWxsX2NvbnRleHRfZXgKIAl1bm1hc2tfaW50ZXJydXB0cwogCW1vdglyMTIsIDI2CiAJbW92CXIxMSwgc3AKLQlyY2FsbAlkb19mcGUKKwljYWxsCWRvX2ZwZQogCXJqbXAJcmV0X2Zyb21fZXhjZXB0aW9uCiAKIHJldF9mcm9tX2V4Y2VwdGlvbjoKQEAgLTU1Myw3ICs1NTMsNyBAQAogCWxkZHNwCXI0LCBzcFtSRUdfU1JdCiAJYmxkCXI0LCBTWVNSRUdfR01fT0ZGU0VUCiAJYnJjcwkxZgotCXJjYWxsCXByZWVtcHRfc2NoZWR1bGVfaXJxCisJY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQogMToKICNlbmRpZgogCkBAIC01ODIsNyArNTgyLDcgQEAKIAlibGQJcjEsIFRJRl9ORUVEX1JFU0NIRUQKIAlicmNjCTFmCiAJdW5tYXNrX2ludGVycnVwdHMKLQlyY2FsbAlzY2hlZHVsZQorCWNhbGwJc2NoZWR1bGUKIAltYXNrX2ludGVycnVwdHMKIAlsZC53CXIxLCByMFtUSV9mbGFnc10KIAlyam1wCWZhdWx0X2V4aXRfd29yawpAQCAtNTkzLDcgKzU5Myw3IEBACiAJdW5tYXNrX2ludGVycnVwdHMKIAltb3YJcjEyLCBzcAogCW1vdglyMTEsIHIwCi0JcmNhbGwJZG9fbm90aWZ5X3Jlc3VtZQorCWNhbGwJZG9fbm90aWZ5X3Jlc3VtZQogCW1hc2tfaW50ZXJydXB0cwogCWxkLncJcjEsIHIwW1RJX2ZsYWdzXQogCXJqbXAJZmF1bHRfZXhpdF93b3JrCkBAIC02MTYsMTAgKzYxNiwxMCBAQAogCiAuTGRlYnVnX2ZpeHVwX2NvbnQ6CiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCi0JcmNhbGwJdHJhY2VfaGFyZGlycXNfb2ZmCisJY2FsbAl0cmFjZV9oYXJkaXJxc19vZmYKICNlbmRpZgogCW1vdglyMTIsIHNwCi0JcmNhbGwJZG9fZGVidWcKKwljYWxsCWRvX2RlYnVnCiAJbW92CXNwLCByMTIKIAogCWxkZHNwCXIyLCBzcFtSRUdfU1JdCkBAIC02NDMsNyArNjQzLDcgQEAKIAltdHNyCVNZU1JFR19SU1JfREJHLCByMTEKIAltdHNyCVNZU1JFR19SQVJfREJHLCByMTAKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlyY2FsbAl0cmFjZV9oYXJkaXJxc19vbgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb24KIDE6CiAjZW5kaWYKIAlsZG10cwlzcCsrLCByMC1scgpAQCAtNjc2LDcgKzY3Niw3IEBACiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAJYmxkCXIxMSwgU1lTUkVHX0dNX09GRlNFVAogCWJyY2MJMWYKLQlyY2FsbAl0cmFjZV9oYXJkaXJxc19vbgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb24KIDE6CiAjZW5kaWYKIAltZnNyCXIyLCBTWVNSRUdfU1IKQEAgLTc0Nyw3ICs3NDcsNyBAQAogCW1vdglyMTEsIHNwCiAJbW92CXIxMiwgXGxldmVsCiAKLQlyY2FsbAlkb19JUlEKKwljYWxsCWRvX0lSUQogCiAJbGRkc3AJcjQsIHNwW1JFR19TUl0KIAliZmV4dHUJcjQsIHI0LCBTWVNSRUdfTTBfT0ZGU0VULCAzCkBAIC03NjcsNyArNzY3LDcgQEAKIAogMToKICNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKLQlyY2FsbAl0cmFjZV9oYXJkaXJxc19vbgorCWNhbGwJdHJhY2VfaGFyZGlycXNfb24KICNlbmRpZgogCXBvcG0JcjgtcjkKIAltdHNyCXJhcl9pbnRcbGV2ZWwsIHI4CkBAIC04MDcsNyArODA3LDcgQEAKIAlsZGRzcAlyNCwgc3BbUkVHX1NSXQogCWJsZAlyNCwgU1lTUkVHX0dNX09GRlNFVAogCWJyY3MJMWIKLQlyY2FsbAlwcmVlbXB0X3NjaGVkdWxlX2lycQorCWNhbGwJcHJlZW1wdF9zY2hlZHVsZV9pcnEKICNlbmRpZgogCXJqbXAJMWIKIAkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvaXJxLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYwppbmRleCBhOGU3NjdkLi45ZjU3MjIyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9pcnEuYwpAQCAtNTgsNyArNTgsNyBAQAogCiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoY3B1KS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgY3B1KSk7CiAJCXNlcV9wcmludGYocCwgIiAlOHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lID8gOiAiLSIpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TIGIvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TCmluZGV4IDY3MzE3OGUuLmY3MjQ0Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGwtc3R1YnMuUworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsLXN0dWJzLlMKQEAgLTYxLDcgKzYxLDcgQEAKIF9fc3lzX21tYXAyOgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX21tYXAyCisJY2FsbAlzeXNfbW1hcDIKIAlzdWIJc3AsIC00CiAJcG9wbQlwYwogCkBAIC03MCw3ICs3MCw3IEBACiBfX3N5c19zZW5kdG86CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfc2VuZHRvCisJY2FsbAlzeXNfc2VuZHRvCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtNzksNyArNzksNyBAQAogX19zeXNfcmVjdmZyb206CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfcmVjdmZyb20KKwljYWxsCXN5c19yZWN2ZnJvbQogCXN1YglzcCwgLTQKIAlwb3BtCXBjCiAKQEAgLTg4LDcgKzg4LDcgQEAKIF9fc3lzX3BzZWxlY3Q2OgogCXB1c2htCWxyCiAJc3QudwktLXNwLCBBUkc2Ci0JcmNhbGwJc3lzX3BzZWxlY3Q2CisJY2FsbAlzeXNfcHNlbGVjdDYKIAlzdWIJc3AsIC00CiAJcG9wbQlwYwogCkBAIC05Nyw3ICs5Nyw3IEBACiBfX3N5c19zcGxpY2U6CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfc3BsaWNlCisJY2FsbAlzeXNfc3BsaWNlCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtMTA2LDcgKzEwNiw3IEBACiBfX3N5c19lcG9sbF9wd2FpdDoKIAlwdXNobQlscgogCXN0LncJLS1zcCwgQVJHNgotCXJjYWxsCXN5c19lcG9sbF9wd2FpdAorCWNhbGwJc3lzX2Vwb2xsX3B3YWl0CiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKIApAQCAtMTE1LDYgKzExNSw2IEBACiBfX3N5c19zeW5jX2ZpbGVfcmFuZ2U6CiAJcHVzaG0JbHIKIAlzdC53CS0tc3AsIEFSRzYKLQlyY2FsbAlzeXNfc3luY19maWxlX3JhbmdlCisJY2FsbAlzeXNfc3luY19maWxlX3JhbmdlCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbGliL3N0cm5sZW5fdXNlci5TIGIvYXJjaC9hdnIzMi9saWIvc3Rybmxlbl91c2VyLlMKaW5kZXggNjVjZTExYS4uZTQ2ZjQ3MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbGliL3N0cm5sZW5fdXNlci5TCisrKyBiL2FyY2gvYXZyMzIvbGliL3N0cm5sZW5fdXNlci5TCkBAIC00OCw3ICs0OCw3IEBACiAJbGRkcGMJbHIsIF90YXNrX3NpemUKIAlzdWIJcjExLCBsciwgcjEyCiAJbW92CXI5LCByMTEKLQlyY2FsbAlfX3N0cm5sZW5fdXNlcgorCWNhbGwJX19zdHJubGVuX3VzZXIKIAljcC53CXIxMiwgcjkKIAlicmd0CTFmCiAJcG9wbQlwYwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggMmNhNzAyZS4uZmFjN2ZlOSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01Myw0ICs1Myw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYJCQkJLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCA2OWEwNTFiLi42NDAzYWQyIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0JMQUNLRklOX1NXQUJfSAogI2RlZmluZSBfQkxBQ0tGSU5fU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL2lycWNoaXAuYwppbmRleCA3ZmQxMjY1Li5iZDA1MmE2IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9pcnFjaGlwLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvaXJxY2hpcC5jCkBAIC04Myw3ICs4Myw3IEBACiAJCQlnb3RvIHNraXA7CiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAJCXNlcV9wcmludGYocCwgIiAlOHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CiAJCWZvciAoYWN0aW9uID0gYWN0aW9uLT5uZXh0OyBhY3Rpb247IGFjdGlvbiA9IGFjdGlvbi0+bmV4dCkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA5ZGYwY2E4Li5kNWNmNzQwIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01Niw2ICs1Niw5IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCmluZGV4IDJkZmFjOGMuLjdmNjQyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYwpAQCAtNjYsNyArNjYsNyBAQAogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXMoaSkpOwogI2Vsc2UKIAkJZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoaikuaXJxc1tpXSk7CisJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2lycXNfY3B1KGksIGopKTsKICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPnR5cGVuYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaXJxLmMgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLmMKaW5kZXggNzNhYmFlNy4uYWYzZTgyNCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2lycS5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYwpAQCAtNzQsNyArNzQsNyBAQAogCQlpZiAoYWN0aW9uKSB7CiAJCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwogCQkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KQotCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGNwdSkuaXJxc1tpXSk7CisJCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBjcHUpKTsKIAkJCXNlcV9wcmludGYocCwgIiAlMTBzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSA/IDogIi0iKTsKIAkJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwogCQkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBkYTI1MjBkLi42MDI1MThhNyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBjMTA4ZjM5Li4zOWFiYmY1IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0g4MzAwX1NXQUJfSAogI2RlZmluZSBfSDgzMDBfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCiAjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYwppbmRleCBlZjRmMDA0Li43NGY4ZGQ3IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9pcnEuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQogewotCWludCBpID0gKihsb2ZmX3QgKikgdiwgajsKKwlpbnQgaSA9ICoobG9mZl90ICopIHY7CiAJc3RydWN0IGlycWFjdGlvbiAqIGFjdGlvbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJaWYgKCFhY3Rpb24pCiAJCQlnb3RvIHVubG9jazsKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLGkpOwotCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiLSUtOHMiLCBpcnFfZGVzY1tpXS5uYW1lKTsKIAkJc2VxX3ByaW50ZihwLCAiICAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMgYi9hcmNoL2lhNjQvaWEzMi9pYTMyX2VudHJ5LlMKaW5kZXggYTQ2ZjgzOS4uYWY5NDA1YyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2lhMzIvaWEzMl9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9pYTMyL2lhMzJfZW50cnkuUwpAQCAtMjQwLDcgKzI0MCw3IEBACiAJZGF0YTggc3lzX25pX3N5c2NhbGwKIAlkYXRhOCBzeXNfdW1hc2sJCSAgLyogNjAgKi8KIAlkYXRhOCBzeXNfY2hyb290Ci0JZGF0YTggc3lzX3VzdGF0CisJZGF0YTggY29tcGF0X3N5c191c3RhdAogCWRhdGE4IHN5c19kdXAyCiAJZGF0YTggc3lzX2dldHBwaWQKIAlkYXRhOCBzeXNfZ2V0cGdycAkgIC8qIDY1ICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnB1LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZnB1LmgKaW5kZXggMzg1OTU1OC4uMGMyNjE1NyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ZwdS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9mcHUuaApAQCAtNiw4ICs2LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KIC8qIGZsb2F0aW5nIHBvaW50IHN0YXR1cyByZWdpc3RlcjogKi8KICNkZWZpbmUgRlBTUl9UUkFQX1ZECSgxIDw8IDApCS8qIGludmFsaWQgb3AgdHJhcCBkaXNhYmxlZCAqLwogI2RlZmluZSBGUFNSX1RSQVBfREQJKDEgPDwgMSkJLyogZGVub3JtYWwgdHJhcCBkaXNhYmxlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2djY19pbnRyaW4uaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9nY2NfaW50cmluLmgKaW5kZXggMGY1YjU1OS4uYzJjNWZkOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2djY19pbnRyaW4uaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZ2NjX2ludHJpbi5oCkBAIC02LDYgKzYsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAyLDIwMDMgU3VyZXNoIFNpZGRoYSA8c3VyZXNoLmIuc2lkZGhhQGludGVsLmNvbT4KICAqLwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAvKiBkZWZpbmUgdGhpcyBtYWNybyB0byBnZXQgc29tZSBhc20gc3RtdHMgaW5jbHVkZWQgaW4gJ2MnIGZpbGVzICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2ludHJpbnNpY3MuaAppbmRleCBhM2U0NGE1Li5jNDc4MzBlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vaW50cmluc2ljcy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pbnRyaW5zaWNzLmgKQEAgLTEwLDYgKzEwLDcgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAvKiBpbmNsdWRlIGNvbXBpbGVyIHNwZWNpZmljIGludHJpbnNpY3MgKi8KICNpbmNsdWRlIDxhc20vaWE2NHJlZ3MuaD4KICNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggYmZhODZiNi4uMThhN2U0OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9rdm0uaApAQCAtMjEsOCArMjEsNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKIC8qIFNlbGVjdCB4ODYgc3BlY2lmaWMgZmVhdHVyZXMgaW4gPGxpbnV4L2t2bS5oPiAqLwpAQCAtMTY2LDcgKzE2NSw0MCBAQAogCXVuc2lnbmVkIGxvbmcgIHZjcHVpZFs1XTsKIAl1bnNpZ25lZCBsb25nICB2cHNyOwogCXVuc2lnbmVkIGxvbmcgIHZwcjsKLQl1bnNpZ25lZCBsb25nICB2Y3JbMTI4XTsKKwl1bmlvbiB7CisJCXVuc2lnbmVkIGxvbmcgIHZjclsxMjhdOworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgbG9uZyBkY3I7CisJCQl1bnNpZ25lZCBsb25nIGl0bTsKKwkJCXVuc2lnbmVkIGxvbmcgaXZhOworCQkJdW5zaWduZWQgbG9uZyByc3YxWzVdOworCQkJdW5zaWduZWQgbG9uZyBwdGE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjJbN107CisJCQl1bnNpZ25lZCBsb25nIGlwc3I7CisJCQl1bnNpZ25lZCBsb25nIGlzcjsKKwkJCXVuc2lnbmVkIGxvbmcgcnN2MzsKKwkJCXVuc2lnbmVkIGxvbmcgaWlwOworCQkJdW5zaWduZWQgbG9uZyBpZmE7CisJCQl1bnNpZ25lZCBsb25nIGl0aXI7CisJCQl1bnNpZ25lZCBsb25nIGlpcGE7CisJCQl1bnNpZ25lZCBsb25nIGlmczsKKwkJCXVuc2lnbmVkIGxvbmcgaWltOworCQkJdW5zaWduZWQgbG9uZyBpaGE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjRbMzhdOworCQkJdW5zaWduZWQgbG9uZyBsaWQ7CisJCQl1bnNpZ25lZCBsb25nIGl2cjsKKwkJCXVuc2lnbmVkIGxvbmcgdHByOworCQkJdW5zaWduZWQgbG9uZyBlb2k7CisJCQl1bnNpZ25lZCBsb25nIGlycls0XTsKKwkJCXVuc2lnbmVkIGxvbmcgaXR2OworCQkJdW5zaWduZWQgbG9uZyBwbXY7CisJCQl1bnNpZ25lZCBsb25nIGNtY3Y7CisJCQl1bnNpZ25lZCBsb25nIHJzdjVbNV07CisJCQl1bnNpZ25lZCBsb25nIGxycjA7CisJCQl1bnNpZ25lZCBsb25nIGxycjE7CisJCQl1bnNpZ25lZCBsb25nIHJzdjZbNDZdOworCQl9OworCX07CiB9OwogCiBzdHJ1Y3Qga3ZtX3JlZ3MgewpAQCAtMjE0LDQgKzI0NiwxOCBAQAogc3RydWN0IGt2bV9mcHUgewogfTsKIAorI2RlZmluZSBLVk1fSUE2NF9WQ1BVX1NUQUNLX1NISUZUCTE2CisjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfU1RBQ0tfU0laRQkoMVVMIDw8IEtWTV9JQTY0X1ZDUFVfU1RBQ0tfU0hJRlQpCisKK3N0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrIHsKKwl1bnNpZ25lZCBjaGFyIHN0YWNrW0tWTV9JQTY0X1ZDUFVfU1RBQ0tfU0laRV07Cit9OworCitzdHJ1Y3Qga3ZtX2RlYnVnX2V4aXRfYXJjaCB7Cit9OworCisvKiBmb3IgS1ZNX1NFVF9HVUVTVF9ERUJVRyAqLworc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIHsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAzNDg2NjM2Li40NTQyNjUxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMTEyLDcgKzExMiwxMSBAQAogI2RlZmluZSBWQ1BVX1NUUlVDVF9TSElGVAkxNgogI2RlZmluZSBWQ1BVX1NUUlVDVF9TSVpFCShfX0lBNjRfVUxfQ09OU1QoMSkgPDwgVkNQVV9TVFJVQ1RfU0hJRlQpCiAKLSNkZWZpbmUgS1ZNX1NUS19PRkZTRVQJCVZDUFVfU1RSVUNUX1NJWkUKKy8qCisgKiBUaGlzIG11c3QgbWF0Y2ggS1ZNX0lBNjRfVkNQVV9TVEFDS197U0hJRlQsU0laRX0gYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2t2bS5oCisgKi8KKyNkZWZpbmUgS1ZNX1NUS19TSElGVAkJMTYKKyNkZWZpbmUgS1ZNX1NUS19PRkZTRVQJCShfX0lBNjRfVUxfQ09OU1QoMSk8PCBLVk1fU1RLX1NISUZUKQogCiAjZGVmaW5lIEtWTV9WTV9TVFJVQ1RfU0hJRlQJMTkKICNkZWZpbmUgS1ZNX1ZNX1NUUlVDVF9TSVpFCShfX0lBNjRfVUxfQ09OU1QoMSkgPDwgS1ZNX1ZNX1NUUlVDVF9TSElGVCkKQEAgLTE1MywxMCArMTU3LDEwIEBACiAJc3RydWN0IGt2bV92Y3B1X2RhdGEgdmNwdV9kYXRhW0tWTV9NQVhfVkNQVVNdOwogfTsKIAotI2RlZmluZSBWQ1BVX0JBU0UobikJS1ZNX1ZNX0RBVEFfQkFTRSArIFwKLQkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIHZjcHVfZGF0YVtuXSkKLSNkZWZpbmUgVk1fQkFTRQkJS1ZNX1ZNX0RBVEFfQkFTRSArIFwKLQkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIGt2bV92bV9zdHJ1Y3QpCisjZGVmaW5lIFZDUFVfQkFTRShuKQkoS1ZNX1ZNX0RBVEFfQkFTRSArIFwKKwkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIHZjcHVfZGF0YVtuXSkpCisjZGVmaW5lIEtWTV9WTV9CQVNFCShLVk1fVk1fREFUQV9CQVNFICsgXAorCQkJCW9mZnNldG9mKHN0cnVjdCBrdm1fdm1fZGF0YSwga3ZtX3ZtX3N0cnVjdCkpCiAjZGVmaW5lIEtWTV9NRU1fRElSVFlfTE9HX0JBU0UJS1ZNX1ZNX0RBVEFfQkFTRSArIFwKIAkJCQlvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZtX2RhdGEsIGt2bV9tZW1fZGlydHlfbG9nKQogCkBAIC0yMzUsOCArMjM5LDYgQEAKIAogc3RydWN0IGt2bTsKIHN0cnVjdCBrdm1fdmNwdTsKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWd7Ci19OwogCiBzdHJ1Y3Qga3ZtX21taW9fcmVxIHsKIAl1aW50NjRfdCBhZGRyOyAgICAgICAgICAvKiAgcGh5c2ljYWwgYWRkcmVzcwkJKi8KQEAgLTQ2Miw2ICs0NjQsOCBAQAogCXVuc2lnbmVkIGxvbmcJbWV0YXBoeXNpY2FsX3JyNDsKIAl1bnNpZ25lZCBsb25nCXZtbV9pbml0X3JyOwogCisJaW50CQlvbmxpbmVfdmNwdXM7CisKIAlzdHJ1Y3Qga3ZtX2lvYXBpYyAqdmlvYXBpYzsKIAlzdHJ1Y3Qga3ZtX3ZtX3N0YXQgc3RhdDsKIAlzdHJ1Y3Qga3ZtX3NhbF9kYXRhIHJkdl9zYWxfZGF0YTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tc2lkZWYuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tc2lkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTJjMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21zaWRlZi5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX0lBNjRfTVNJX0RFRl9ICisjZGVmaW5lIF9JQTY0X01TSV9ERUZfSAorCisvKgorICogU2hpZnRzIGZvciBBUElDLWJhc2VkIGRhdGEKKyAqLworCisjZGVmaW5lICAgICBNU0lfREFUQV9WRUNUT1JfU0hJRlQJMAorI2RlZmluZQkgICAgTVNJX0RBVEFfVkVDVE9SKHYpCQkoKCh1OCl2KSA8PCBNU0lfREFUQV9WRUNUT1JfU0hJRlQpCisjZGVmaW5lICAgICBNU0lfREFUQV9WRUNUT1JfTUFTSwkweGZmZmZmZjAwCisKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX01PREVfU0hJRlQJOAorI2RlZmluZSAgICAgTVNJX0RBVEFfREVMSVZFUllfRklYRUQJKDAgPDwgTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCkKKyNkZWZpbmUgICAgIE1TSV9EQVRBX0RFTElWRVJZX0xPV1BSSQkoMSA8PCBNU0lfREFUQV9ERUxJVkVSWV9NT0RFX1NISUZUKQorCisjZGVmaW5lICAgICBNU0lfREFUQV9MRVZFTF9TSElGVAkxNAorI2RlZmluZSAgICAgTVNJX0RBVEFfTEVWRUxfREVBU1NFUlQJKDAgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCisjZGVmaW5lICAgICBNU0lfREFUQV9MRVZFTF9BU1NFUlQJKDEgPDwgTVNJX0RBVEFfTEVWRUxfU0hJRlQpCisKKyNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQJMTUKKyNkZWZpbmUgICAgIE1TSV9EQVRBX1RSSUdHRVJfRURHRQkoMCA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQorI2RlZmluZSAgICAgTVNJX0RBVEFfVFJJR0dFUl9MRVZFTAkoMSA8PCBNU0lfREFUQV9UUklHR0VSX1NISUZUKQorCisvKgorICogU2hpZnQvbWFzayBmaWVsZHMgZm9yIEFQSUMtYmFzZWQgYnVzIGFkZHJlc3MKKyAqLworCisjZGVmaW5lICAgICBNU0lfQUREUl9ERVNUX0lEX1NISUZUCTQKKyNkZWZpbmUgICAgIE1TSV9BRERSX0hFQURFUgkJMHhmZWUwMDAwMAorCisjZGVmaW5lICAgICBNU0lfQUREUl9ERVNUX0lEX01BU0sJMHhmZmYwMDAwZgorI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9JRF9DUFUoY3B1KQkoKGNwdSkgPDwgTVNJX0FERFJfREVTVF9JRF9TSElGVCkKKworI2RlZmluZSAgICAgTVNJX0FERFJfREVTVF9NT0RFX1NISUZUCTIKKyNkZWZpbmUgICAgIE1TSV9BRERSX0RFU1RfTU9ERV9QSFlTCSgwIDw8IE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVCkKKyNkZWZpbmUJICAgIE1TSV9BRERSX0RFU1RfTU9ERV9MT0dJQwkoMSA8PCBNU0lfQUREUl9ERVNUX01PREVfU0hJRlQpCisKKyNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUCTMKKyNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0NQVQkoMCA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKKyNkZWZpbmUgICAgIE1TSV9BRERSX1JFRElSRUNUSU9OX0xPV1BSSQkoMSA8PCBNU0lfQUREUl9SRURJUkVDVElPTl9TSElGVCkKKworI2VuZGlmLyogX0lBNjRfTVNJX0RFRl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggZDVlZjBhYS4uNzQ1NDIxMiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjMsNCArNjMsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fSUE2NF9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggNmFhNThiNi4uYzg5YThjYiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC02LDcgKzYsNyBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPiwgSGV3bGV0dC1QYWNrYXJkIENvLgogICovCiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxLmMKaW5kZXggYTU4ZjY0Yy4uNGY1OTY2MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lycS5jCkBAIC04MCw3ICs4MCw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopIHsKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAJCX0KICNlbmRpZgogCQlzZXFfcHJpbnRmKHAsICIgJTE0cyIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9tc2lfaWE2NC5jCmluZGV4IDg5MDMzOTMuLjM2OGVlNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbXNpX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21zaV9pYTY0LmMKQEAgLTcsNDQgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21zaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXIuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+Ci0KLS8qCi0gKiBTaGlmdHMgZm9yIEFQSUMtYmFzZWQgZGF0YQotICovCi0KLSNkZWZpbmUgTVNJX0RBVEFfVkVDVE9SX1NISUZUCQkwCi0jZGVmaW5lCSAgICBNU0lfREFUQV9WRUNUT1IodikJCSgoKHU4KXYpIDw8IE1TSV9EQVRBX1ZFQ1RPUl9TSElGVCkKLSNkZWZpbmUgTVNJX0RBVEFfVkVDVE9SX01BU0sJCTB4ZmZmZmZmMDAKLQotI2RlZmluZSBNU0lfREFUQV9ERUxJVkVSWV9TSElGVAkJOAotI2RlZmluZSAgICAgTVNJX0RBVEFfREVMSVZFUllfRklYRUQJKDAgPDwgTVNJX0RBVEFfREVMSVZFUllfU0hJRlQpCi0jZGVmaW5lICAgICBNU0lfREFUQV9ERUxJVkVSWV9MT1dQUkkJKDEgPDwgTVNJX0RBVEFfREVMSVZFUllfU0hJRlQpCi0KLSNkZWZpbmUgTVNJX0RBVEFfTEVWRUxfU0hJRlQJCTE0Ci0jZGVmaW5lICAgICBNU0lfREFUQV9MRVZFTF9ERUFTU0VSVAkoMCA8PCBNU0lfREFUQV9MRVZFTF9TSElGVCkKLSNkZWZpbmUgICAgIE1TSV9EQVRBX0xFVkVMX0FTU0VSVAkoMSA8PCBNU0lfREFUQV9MRVZFTF9TSElGVCkKLQotI2RlZmluZSBNU0lfREFUQV9UUklHR0VSX1NISUZUCQkxNQotI2RlZmluZSAgICAgTVNJX0RBVEFfVFJJR0dFUl9FREdFCSgwIDw8IE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQpCi0jZGVmaW5lICAgICBNU0lfREFUQV9UUklHR0VSX0xFVkVMCSgxIDw8IE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQpCi0KLS8qCi0gKiBTaGlmdC9tYXNrIGZpZWxkcyBmb3IgQVBJQy1iYXNlZCBidXMgYWRkcmVzcwotICovCi0KLSNkZWZpbmUgTVNJX1RBUkdFVF9DUFVfU0hJRlQJCTQKLSNkZWZpbmUgTVNJX0FERFJfSEVBREVSCQkJMHhmZWUwMDAwMAotCi0jZGVmaW5lIE1TSV9BRERSX0RFU1RJRF9NQVNLCQkweGZmZjAwMDBmCi0jZGVmaW5lICAgICBNU0lfQUREUl9ERVNUSURfQ1BVKGNwdSkJKChjcHUpIDw8IE1TSV9UQVJHRVRfQ1BVX1NISUZUKQotCi0jZGVmaW5lIE1TSV9BRERSX0RFU1RNT0RFX1NISUZUCQkyCi0jZGVmaW5lICAgICBNU0lfQUREUl9ERVNUTU9ERV9QSFlTCSgwIDw8IE1TSV9BRERSX0RFU1RNT0RFX1NISUZUKQotI2RlZmluZQkgICAgTVNJX0FERFJfREVTVE1PREVfTE9HSUMJKDEgPDwgTVNJX0FERFJfREVTVE1PREVfU0hJRlQpCi0KLSNkZWZpbmUgTVNJX0FERFJfUkVESVJFQ1RJT05fU0hJRlQJMwotI2RlZmluZSAgICAgTVNJX0FERFJfUkVESVJFQ1RJT05fQ1BVCSgwIDw8IE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUKQotI2RlZmluZSAgICAgTVNJX0FERFJfUkVESVJFQ1RJT05fTE9XUFJJCSgxIDw8IE1TSV9BRERSX1JFRElSRUNUSU9OX1NISUZUKQorI2luY2x1ZGUgPGFzbS9tc2lkZWYuaD4KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcAlpYTY0X21zaV9jaGlwOwogCkBAIC02NSw4ICsyOCw4IEBACiAJcmVhZF9tc2lfbXNnKGlycSwgJm1zZyk7CiAKIAlhZGRyID0gbXNnLmFkZHJlc3NfbG87Ci0JYWRkciAmPSBNU0lfQUREUl9ERVNUSURfTUFTSzsKLQlhZGRyIHw9IE1TSV9BRERSX0RFU1RJRF9DUFUoY3B1X3BoeXNpY2FsX2lkKGNwdSkpOworCWFkZHIgJj0gTVNJX0FERFJfREVTVF9JRF9NQVNLOworCWFkZHIgfD0gTVNJX0FERFJfREVTVF9JRF9DUFUoY3B1X3BoeXNpY2FsX2lkKGNwdSkpOwogCW1zZy5hZGRyZXNzX2xvID0gYWRkcjsKIAogCWRhdGEgPSBtc2cuZGF0YTsKQEAgLTk4LDkgKzYxLDkgQEAKIAltc2cuYWRkcmVzc19oaSA9IDA7CiAJbXNnLmFkZHJlc3NfbG8gPQogCQlNU0lfQUREUl9IRUFERVIgfAotCQlNU0lfQUREUl9ERVNUTU9ERV9QSFlTIHwKKwkJTVNJX0FERFJfREVTVF9NT0RFX1BIWVMgfAogCQlNU0lfQUREUl9SRURJUkVDVElPTl9DUFUgfAotCQlNU0lfQUREUl9ERVNUSURfQ1BVKGRlc3RfcGh5c19pZCk7CisJCU1TSV9BRERSX0RFU1RfSURfQ1BVKGRlc3RfcGh5c19pZCk7CiAKIAltc2cuZGF0YSA9CiAJCU1TSV9EQVRBX1RSSUdHRVJfRURHRSB8CkBAIC0xODMsOCArMTQ2LDggQEAKIAogCW1zZy5kYXRhICY9IH5NU0lfREFUQV9WRUNUT1JfTUFTSzsKIAltc2cuZGF0YSB8PSBNU0lfREFUQV9WRUNUT1IoY2ZnLT52ZWN0b3IpOwotCW1zZy5hZGRyZXNzX2xvICY9IH5NU0lfQUREUl9ERVNUSURfTUFTSzsKLQltc2cuYWRkcmVzc19sbyB8PSBNU0lfQUREUl9ERVNUSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKKwltc2cuYWRkcmVzc19sbyAmPSB+TVNJX0FERFJfREVTVF9JRF9NQVNLOworCW1zZy5hZGRyZXNzX2xvIHw9IE1TSV9BRERSX0RFU1RfSURfQ1BVKGNwdV9waHlzaWNhbF9pZChjcHUpKTsKIAogCWRtYXJfbXNpX3dyaXRlKGlycSwgJm1zZyk7CiAJaXJxX2Rlc2NbaXJxXS5hZmZpbml0eSA9ICptYXNrOwpAQCAtMjE1LDkgKzE3OCw5IEBACiAJbXNnLT5hZGRyZXNzX2hpID0gMDsKIAltc2ctPmFkZHJlc3NfbG8gPQogCQlNU0lfQUREUl9IRUFERVIgfAotCQlNU0lfQUREUl9ERVNUTU9ERV9QSFlTIHwKKwkJTVNJX0FERFJfREVTVF9NT0RFX1BIWVMgfAogCQlNU0lfQUREUl9SRURJUkVDVElPTl9DUFUgfAotCQlNU0lfQUREUl9ERVNUSURfQ1BVKGRlc3QpOworCQlNU0lfQUREUl9ERVNUX0lEX0NQVShkZXN0KTsKIAogCW1zZy0+ZGF0YSA9CiAJCU1TSV9EQVRBX1RSSUdHRVJfRURHRSB8CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IDBlNDk5NzUuLjVjMGY0MDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC0yMTk2LDcgKzIxOTYsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBmbWZzX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwZm1mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9kZWxldGUgPSBwZm1mc19kZWxldGVfZGVudHJ5LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9LY29uZmlnIGIvYXJjaC9pYTY0L2t2bS9LY29uZmlnCmluZGV4IGY4MzNhMGIuLjBhMmQ2YjggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vS2NvbmZpZworKysgYi9hcmNoL2lhNjQva3ZtL0tjb25maWcKQEAgLTQsNiArNCwxMCBAQAogY29uZmlnIEhBVkVfS1ZNCiAJYm9vbAogCitjb25maWcgSEFWRV9LVk1fSVJRQ0hJUAorICAgICAgIGJvb2wKKyAgICAgICBkZWZhdWx0IHkKKwogbWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTgogCWJvb2wgIlZpcnR1YWxpemF0aW9uIgogCWRlcGVuZHMgb24gSEFWRV9LVk0gfHwgSUE2NApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9pcnEuaCBiL2FyY2gvaWE2NC9rdm0vaXJxLmgKaW5kZXggYzY3ODZlOC4uYzA3ODVhNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9pcnEuaAorKysgYi9hcmNoL2lhNjQva3ZtL2lycS5oCkBAIC0yMyw2ICsyMyw4IEBACiAjaWZuZGVmIF9fSVJRX0gKICNkZWZpbmUgX19JUlFfSAogCisjaW5jbHVkZSAibGFwaWMuaCIKKwogc3RhdGljIGlubGluZSBpbnQgaXJxY2hpcF9pbl9rZXJuZWwoc3RydWN0IGt2bSAqa3ZtKQogewogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jIGIvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCmluZGV4IDI4Zjk4MjAuLjA3NmIwMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYworKysgYi9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCXN3aXRjaCAoZXh0KSB7CiAJY2FzZSBLVk1fQ0FQX0lSUUNISVA6CiAJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgotCisJY2FzZSBLVk1fQ0FQX0lSUV9JTkpFQ1RfU1RBVFVTOgogCQlyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ0FQX0NPQUxFU0NFRF9NTUlPOgpAQCAtMzE0LDcgKzMxNCw3IEBACiAJdW5pb24gaWE2NF9saWQgbGlkOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBrdm0tPmFyY2gub25saW5lX3ZjcHVzOyBpKyspIHsKIAkJaWYgKGt2bS0+dmNwdXNbaV0pIHsKIAkJCWxpZC52YWwgPSBWQ1BVX0xJRChrdm0tPnZjcHVzW2ldKTsKIAkJCWlmIChsaWQuaWQgPT0gaWQgJiYgbGlkLmVpZCA9PSBlaWQpCkBAIC0zODgsNyArMzg4LDcgQEAKIAogCWNhbGxfZGF0YS5wdGNfZ19kYXRhID0gcC0+dS5wdGNfZ19kYXRhOwogCi0JZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBrdm0tPmFyY2gub25saW5lX3ZjcHVzOyBpKyspIHsKIAkJaWYgKCFrdm0tPnZjcHVzW2ldIHx8IGt2bS0+dmNwdXNbaV0tPmFyY2gubXBfc3RhdGUgPT0KIAkJCQkJCUtWTV9NUF9TVEFURV9VTklOSVRJQUxJWkVEIHx8CiAJCQkJCXZjcHUgPT0ga3ZtLT52Y3B1c1tpXSkKQEAgLTc4OCw2ICs3ODgsOCBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAlrdm1faW5pdF92bShrdm0pOwogCisJa3ZtLT5hcmNoLm9ubGluZV92Y3B1cyA9IDA7CisKIAlyZXR1cm4ga3ZtOwogCiB9CkBAIC05MTksNyArOTIxLDEzIEBACiAJCXIgPSBrdm1faW9hcGljX2luaXQoa3ZtKTsKIAkJaWYgKHIpCiAJCQlnb3RvIG91dDsKKwkJciA9IGt2bV9zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKGt2bSk7CisJCWlmIChyKSB7CisJCQlrZnJlZShrdm0tPmFyY2gudmlvYXBpYyk7CisJCQlnb3RvIG91dDsKKwkJfQogCQlicmVhazsKKwljYXNlIEtWTV9JUlFfTElORV9TVEFUVVM6CiAJY2FzZSBLVk1fSVJRX0xJTkU6IHsKIAkJc3RydWN0IGt2bV9pcnFfbGV2ZWwgaXJxX2V2ZW50OwogCkBAIC05MjcsMTAgKzkzNSwxNyBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmlycV9ldmVudCwgYXJncCwgc2l6ZW9mIGlycV9ldmVudCkpCiAJCQlnb3RvIG91dDsKIAkJaWYgKGlycWNoaXBfaW5fa2VybmVsKGt2bSkpIHsKKwkJCV9fczMyIHN0YXR1czsKIAkJCW11dGV4X2xvY2soJmt2bS0+bG9jayk7Ci0JCQlrdm1fc2V0X2lycShrdm0sIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwKKwkJCXN0YXR1cyA9IGt2bV9zZXRfaXJxKGt2bSwgS1ZNX1VTRVJTUEFDRV9JUlFfU09VUkNFX0lELAogCQkJCSAgICBpcnFfZXZlbnQuaXJxLCBpcnFfZXZlbnQubGV2ZWwpOwogCQkJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCQkJaWYgKGlvY3RsID09IEtWTV9JUlFfTElORV9TVEFUVVMpIHsKKwkJCQlpcnFfZXZlbnQuc3RhdHVzID0gc3RhdHVzOworCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlycV9ldmVudCwKKwkJCQkJCQlzaXplb2YgaXJxX2V2ZW50KSkKKwkJCQkJZ290byBvdXQ7CisJCQl9CiAJCQlyID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTExNDksNyArMTE2NCw3IEBACiAKIAkJLypJbml0aWFsaXplIGl0YyBvZmZzZXQgZm9yIHZjcHVzKi8KIAkJaXRjX29mZnNldCA9IDBVTCAtIGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9JVEMpOwotCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX01BWF9WQ1BVUzsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBrdm0tPmFyY2gub25saW5lX3ZjcHVzOyBpKyspIHsKIAkJCXYgPSAoc3RydWN0IGt2bV92Y3B1ICopKChjaGFyICopdmNwdSArCiAJCQkJCXNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHVfZGF0YSkgKiBpKTsKIAkJCXYtPmFyY2guaXRjX29mZnNldCA9IGl0Y19vZmZzZXQ7CkBAIC0xMjgzLDYgKzEyOTgsOCBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJa3ZtLT5hcmNoLm9ubGluZV92Y3B1cysrOworCiAJcmV0dXJuIHZjcHU7CiBmYWlsOgogCXJldHVybiBFUlJfUFRSKHIpOwpAQCAtMTMwMyw4ICsxMzIwLDggQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZGVidWdfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQlzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0ICpkYmcpCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xNDIxLDYgKzE0MzgsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3N0YWNrKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgIHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrICpzdGFjaykKK3sKKwltZW1jcHkoc3RhY2ssIHZjcHUsIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpOworCXJldHVybiAwOworfQorCitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3RhY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCSAgc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgKnN0YWNrKQoreworCW1lbWNweSh2Y3B1ICsgMSwgJnN0YWNrLT5zdGFja1swXSArIHNpemVvZihzdHJ1Y3Qga3ZtX3ZjcHUpLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spIC0gc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdSkpOworCisJdmNwdS0+YXJjaC5leGl0X2RhdGEgPSAoKHN0cnVjdCBrdm1fdmNwdSAqKXN0YWNrKS0+YXJjaC5leGl0X2RhdGE7CisJcmV0dXJuIDA7Cit9CisKIHZvaWQga3ZtX2FyY2hfdmNwdV91bmluaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCkBAIC0xNDMwLDkgKzE0NjQsNzggQEAKIAogCiBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCi0JCXVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCisJCQkgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2sgKnN0YWNrID0gTlVMTDsKKwlsb25nIHI7CisKKwlzd2l0Y2ggKGlvY3RsKSB7CisJY2FzZSBLVk1fSUE2NF9WQ1BVX0dFVF9TVEFDSzogeworCQlzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayBfX3VzZXIgKnVzZXJfc3RhY2s7CisJICAgICAgICB2b2lkIF9fdXNlciAqZmlyc3RfcCA9IGFyZ3A7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdXNlcl9zdGFjaywgZmlyc3RfcCwgc2l6ZW9mKHZvaWQgKikpKQorCQkJZ290byBvdXQ7CisKKwkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1c2VyX3N0YWNrLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjaykpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJLVk1fSUE2NF9WQ1BVX0dFVF9TVEFDSzogIgorCQkJICAgICAgICJJbGxlZ2FsIHVzZXIgZGVzdGluYXRpb24gYWRkcmVzcyBmb3Igc3RhY2tcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RhY2sgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2lhNjRfdmNwdV9zdGFjayksIEdGUF9LRVJORUwpOworCQlpZiAoIXN0YWNrKSB7CisJCQlyID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJciA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3N0YWNrKHZjcHUsIHN0YWNrKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKworCQlpZiAoY29weV90b191c2VyKHVzZXJfc3RhY2ssIHN0YWNrLAorCQkJCSBzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spKSkKKwkJCWdvdG8gb3V0OworCisJCWJyZWFrOworCX0KKwljYXNlIEtWTV9JQTY0X1ZDUFVfU0VUX1NUQUNLOiB7CisJCXN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrIF9fdXNlciAqdXNlcl9zdGFjazsKKwkgICAgICAgIHZvaWQgX191c2VyICpmaXJzdF9wID0gYXJncDsKKworCQlyID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyX3N0YWNrLCBmaXJzdF9wLCBzaXplb2Yodm9pZCAqKSkpCisJCQlnb3RvIG91dDsKKworCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdXNlcl9zdGFjaywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiS1ZNX0lBNjRfVkNQVV9TRVRfU1RBQ0s6ICIKKwkJCSAgICAgICAiSWxsZWdhbCB1c2VyIGFkZHJlc3MgZm9yIHN0YWNrXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXN0YWNrID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9pYTY0X3ZjcHVfc3RhY2spLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzdGFjaykgeworCQkJciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoY29weV9mcm9tX3VzZXIoc3RhY2ssIHVzZXJfc3RhY2ssCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBrdm1faWE2NF92Y3B1X3N0YWNrKSkpCisJCQlnb3RvIG91dDsKKworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3RhY2sodmNwdSwgc3RhY2spOworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQlyID0gLUVJTlZBTDsKKwl9CisKK291dDoKKwlrZnJlZShzdGFjayk7CisJcmV0dXJuIHI7CiB9CiAKIGludCBrdm1fYXJjaF9zZXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCkBAIC0xNDcyLDcgKzE1NzUsNyBAQAogfQogCiBsb25nIGt2bV9hcmNoX2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKKwkJCXVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xNzM3LDcgKzE4NDAsNyBAQAogCXN0cnVjdCBrdm1fdmNwdSAqbHZjcHUgPSBrdm0tPnZjcHVzWzBdOwogCWludCBpOwogCi0JZm9yIChpID0gMTsgaSA8IEtWTV9NQVhfVkNQVVM7IGkrKykgeworCWZvciAoaSA9IDE7IGkgPCBrdm0tPmFyY2gub25saW5lX3ZjcHVzOyBpKyspIHsKIAkJaWYgKCFrdm0tPnZjcHVzW2ldKQogCQkJY29udGludWU7CiAJCWlmIChsdmNwdS0+YXJjaC54dHAgPiBrdm0tPnZjcHVzW2ldLT5hcmNoLnh0cCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0va3ZtX2Z3LmMgYi9hcmNoL2lhNjQva3ZtL2t2bV9mdy5jCmluZGV4IGNiNzYwMGIuLmE4YWU1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0va3ZtX2Z3LmMKKysrIGIvYXJjaC9pYTY0L2t2bS9rdm1fZncuYwpAQCAtMjI3LDYgKzIyNywxOCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9yZWdpc3Rlcl9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKworCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcmVzdWx0ID0gezAsIDAsIDAsIDB9OworCWxvbmcgaW4wLCBpbjEsIGluMiwgaW4zOworCisJa3ZtX2dldF9wYWxfY2FsbF9kYXRhKHZjcHUsICZpbjAsICZpbjEsICZpbjIsICZpbjMpOworCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9yZWdpc3Rlcl9pbmZvKGluMSwgJnJlc3VsdC52MSwgJnJlc3VsdC52Mik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfY2FjaGVfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAKQEAgLTI2OCw4ICsyODAsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF92bV9pbmZvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIGluMCwgaW4xLCBpbjIsIGluMzsKIAotCUlOSVRfUEFMX1NUQVRVU19VTklNUExFTUVOVEVEKHJlc3VsdCk7CisJa3ZtX2dldF9wYWxfY2FsbF9kYXRhKHZjcHUsICZpbjAsICZpbjEsICZpbjIsICZpbjMpOworCisJcmVzdWx0LnN0YXR1cyA9IGlhNjRfcGFsX3ZtX2luZm8oaW4xLCBpbjIsCisJCQkocGFsX3RjX2luZm9fdV90ICopJnJlc3VsdC52MSwgJnJlc3VsdC52Mik7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMjkyLDYgKzMwOCwxMDggQEAKIAl2Y3B1LT5hcmNoLnRpbWVyX2ZpcmVkID0gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX3BlcmZfbW9uX2luZm8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWxvbmcgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgaW4wLCBpbjEsIGluMiwgaW4zLCByOTsKKwl1bnNpZ25lZCBsb25nIHBtX2J1ZmZlclsxNl07CisKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJc3RhdHVzID0gaWE2NF9wYWxfcGVyZl9tb25faW5mbyhwbV9idWZmZXIsCisJCQkJKHBhbF9wZXJmX21vbl9pbmZvX3VfdCAqKSAmcjkpOworCWlmIChzdGF0dXMgIT0gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyJQQUxfUEVSRl9NT05fSU5GTyBmYWlscyByZXQ9JWxkXG4iLCBzdGF0dXMpOworCX0gZWxzZSB7CisJCWlmIChpbjEpCisJCQltZW1jcHkoKHZvaWQgKilpbjEsIHBtX2J1ZmZlciwgc2l6ZW9mKHBtX2J1ZmZlcikpOworCQllbHNlIHsKKwkJCXN0YXR1cyA9IFBBTF9TVEFUVVNfRUlOVkFMOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyJJbnZhbGlkIHBhcmFtZXRlcnMgIgorCQkJCQkJImZvciBQQUwgY2FsbDoweCVseCFcbiIsIGluMCk7CisJCX0KKwl9CisJcmV0dXJuIChzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsKXtzdGF0dXMsIHI5LCAwLCAwfTsKK30KKworc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX2hhbHRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgbG9uZyBpbjAsIGluMSwgaW4yLCBpbjM7CisJbG9uZyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyByZXMgPSAxMDAwVUwgfCAoMTAwMFVMIDw8IDE2KSB8ICgxMFVMIDw8IDMyKQorCQkJCQl8ICgxVUwgPDwgNjEpIHwgKDFVTCA8PCA2MCk7CisKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisJaWYgKGluMSkgeworCQltZW1jcHkoKHZvaWQgKilpbjEsICZyZXMsIHNpemVvZihyZXMpKTsKKwkJc3RhdHVzID0gMDsKKwl9IGVsc2V7CisJCXN0YXR1cyA9IFBBTF9TVEFUVVNfRUlOVkFMOworCQlwcmludGsoS0VSTl9XQVJOSU5HIkludmFsaWQgcGFyYW1ldGVycyAiCisJCQkJCSJmb3IgUEFMIGNhbGw6MHglbHghXG4iLCBpbjApOworCX0KKworCXJldHVybiAoc3RydWN0IGlhNjRfcGFsX3JldHZhbCl7c3RhdHVzLCAwLCAwLCAwfTsKK30KKworc3RhdGljIHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgcGFsX21lbV9hdHRyaWIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXVuc2lnbmVkIGxvbmcgcjk7CisJbG9uZyBzdGF0dXM7CisKKwlzdGF0dXMgPSBpYTY0X3BhbF9tZW1fYXR0cmliKCZyOSk7CisKKwlyZXR1cm4gKHN0cnVjdCBpYTY0X3BhbF9yZXR2YWwpe3N0YXR1cywgcjksIDAsIDB9OworfQorCitzdGF0aWMgdm9pZCByZW1vdGVfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkodm9pZCAqdikKK3sKKwlzNjQgdHJhbnNfdHlwZSA9IChzNjQpdjsKKwlpYTY0X3BhbF9wcmVmZXRjaF92aXNpYmlsaXR5KHRyYW5zX3R5cGUpOworfQorCitzdGF0aWMgc3RydWN0IGlhNjRfcGFsX3JldHZhbCBwYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCByZXN1bHQgPSB7MCwgMCwgMCwgMH07CisJdW5zaWduZWQgbG9uZyBpbjAsIGluMSwgaW4yLCBpbjM7CisJa3ZtX2dldF9wYWxfY2FsbF9kYXRhKHZjcHUsICZpbjAsICZpbjEsICZpbjIsICZpbjMpOworCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF9wcmVmZXRjaF92aXNpYmlsaXR5KGluMSk7CisJaWYgKHJlc3VsdC5zdGF0dXMgPT0gMCkgeworCQkvKiBNdXN0IGJlIHBlcmZvcm1lZCBvbiBhbGwgcmVtb3RlIHByb2Nlc3NvcnMKKwkJaW4gdGhlIGNvaGVyZW5jZSBkb21haW4uICovCisJCXNtcF9jYWxsX2Z1bmN0aW9uKHJlbW90ZV9wYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eSwKKwkJCQkJKHZvaWQgKilpbjEsIDEpOworCQkvKiBVbm5lY2Vzc2FyeSBvbiByZW1vdGUgcHJvY2Vzc29yIGZvciBvdGhlciB2Y3B1cyEqLworCQlyZXN1bHQuc3RhdHVzID0gMTsKKwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgcmVtb3RlX3BhbF9tY19kcmFpbih2b2lkICp2KQoreworCWlhNjRfcGFsX21jX2RyYWluKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWE2NF9wYWxfcmV0dmFsIHBhbF9nZXRfYnJhbmRfaW5mbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCByZXN1bHQgPSB7MCwgMCwgMCwgMH07CisJdW5zaWduZWQgbG9uZyBpbjAsIGluMSwgaW4yLCBpbjM7CisKKwlrdm1fZ2V0X3BhbF9jYWxsX2RhdGEodmNwdSwgJmluMCwgJmluMSwgJmluMiwgJmluMyk7CisKKwlpZiAoaW4xID09IDAgJiYgaW4yKSB7CisJCWNoYXIgYnJhbmRfaW5mb1sxMjhdOworCQlyZXN1bHQuc3RhdHVzID0gaWE2NF9wYWxfZ2V0X2JyYW5kX2luZm8oYnJhbmRfaW5mbyk7CisJCWlmIChyZXN1bHQuc3RhdHVzID09IFBBTF9TVEFUVVNfU1VDQ0VTUykKKwkJCW1lbWNweSgodm9pZCAqKWluMiwgYnJhbmRfaW5mbywgMTI4KTsKKwl9IGVsc2UgeworCQlyZXN1bHQuc3RhdHVzID0gUEFMX1NUQVRVU19SRVFVSVJFU19NRU1PUlk7CisJCXByaW50ayhLRVJOX1dBUk5JTkciSW52YWxpZCBwYXJhbWV0ZXJzIGZvciAiCisJCQkJCSJQQUwgY2FsbDoweCVseCFcbiIsIGluMCk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKwogaW50IGt2bV9wYWxfZW11bChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pCiB7CiAKQEAgLTMwMCwxNCArNDE4LDIyIEBACiAJaW50IHJldCA9IDE7CiAKIAlncjI4ID0ga3ZtX2dldF9wYWxfY2FsbF9pbmRleCh2Y3B1KTsKLQkvKnByaW50aygicGFsX2NhbGwgaW5kZXg6JWx4XG4iLGdyMjgpOyovCiAJc3dpdGNoIChncjI4KSB7CiAJY2FzZSBQQUxfQ0FDSEVfRkxVU0g6CiAJCXJlc3VsdCA9IHBhbF9jYWNoZV9mbHVzaCh2Y3B1KTsKIAkJYnJlYWs7CisJY2FzZSBQQUxfTUVNX0FUVFJJQjoKKwkJcmVzdWx0ID0gcGFsX21lbV9hdHRyaWIodmNwdSk7CisJCWJyZWFrOwogCWNhc2UgUEFMX0NBQ0hFX1NVTU1BUlk6CiAJCXJlc3VsdCA9IHBhbF9jYWNoZV9zdW1tYXJ5KHZjcHUpOwogCQlicmVhazsKKwljYXNlIFBBTF9QRVJGX01PTl9JTkZPOgorCQlyZXN1bHQgPSBwYWxfcGVyZl9tb25faW5mbyh2Y3B1KTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfSEFMVF9JTkZPOgorCQlyZXN1bHQgPSBwYWxfaGFsdF9pbmZvKHZjcHUpOworCQlicmVhazsKIAljYXNlIFBBTF9IQUxUX0xJR0hUOgogCXsKIAkJSU5JVF9QQUxfU1RBVFVTX1NVQ0NFU1MocmVzdWx0KTsKQEAgLTMxNyw2ICs0NDMsMTYgQEAKIAl9CiAJCWJyZWFrOwogCisJY2FzZSBQQUxfUFJFRkVUQ0hfVklTSUJJTElUWToKKwkJcmVzdWx0ID0gcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkodmNwdSk7CisJCWJyZWFrOworCWNhc2UgUEFMX01DX0RSQUlOOgorCQlyZXN1bHQuc3RhdHVzID0gaWE2NF9wYWxfbWNfZHJhaW4oKTsKKwkJLyogRklYTUU6IEFsbCB2Y3B1cyBsaWtlbHkgY2FsbCBQQUxfTUNfRFJBSU4uCisJCSAgIFRoYXQgY2F1c2VzIHRoZSBjb25nZXN0aW9uLiAqLworCQlzbXBfY2FsbF9mdW5jdGlvbihyZW1vdGVfcGFsX21jX2RyYWluLCBOVUxMLCAxKTsKKwkJYnJlYWs7CisKIAljYXNlIFBBTF9GUkVRX1JBVElPUzoKIAkJcmVzdWx0ID0gcGFsX2ZyZXFfcmF0aW9zKHZjcHUpOwogCQlicmVhazsKQEAgLTM0Niw2ICs0ODIsOSBAQAogCQlJTklUX1BBTF9TVEFUVVNfU1VDQ0VTUyhyZXN1bHQpOwogCQlyZXN1bHQudjEgPSAoMUwgPDwgMzIpIHwgMUw7CiAJCWJyZWFrOworCWNhc2UgUEFMX1JFR0lTVEVSX0lORk86CisJCXJlc3VsdCA9IHBhbF9yZWdpc3Rlcl9pbmZvKHZjcHUpOworCQlicmVhazsKIAljYXNlIFBBTF9WTV9QQUdFX1NJWkU6CiAJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF92bV9wYWdlX3NpemUoJnJlc3VsdC52MCwKIAkJCQkJCQkmcmVzdWx0LnYxKTsKQEAgLTM2NSwxMiArNTA0LDE4IEBACiAJCXJlc3VsdC5zdGF0dXMgPSBpYTY0X3BhbF92ZXJzaW9uKAogCQkJCShwYWxfdmVyc2lvbl91X3QgKikmcmVzdWx0LnYwLAogCQkJCShwYWxfdmVyc2lvbl91X3QgKikmcmVzdWx0LnYxKTsKLQogCQlicmVhazsKIAljYXNlIFBBTF9GSVhFRF9BRERSOgogCQlyZXN1bHQuc3RhdHVzID0gUEFMX1NUQVRVU19TVUNDRVNTOwogCQlyZXN1bHQudjAgPSB2Y3B1LT52Y3B1X2lkOwogCQlicmVhazsKKwljYXNlIFBBTF9CUkFORF9JTkZPOgorCQlyZXN1bHQgPSBwYWxfZ2V0X2JyYW5kX2luZm8odmNwdSk7CisJCWJyZWFrOworCWNhc2UgUEFMX0dFVF9QU1RBVEU6CisJY2FzZSBQQUxfQ0FDSEVfU0hBUkVEX0lORk86CisJCUlOSVRfUEFMX1NUQVRVU19VTklNUExFTUVOVEVEKHJlc3VsdCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUlOSVRfUEFMX1NUQVRVU19VTklNUExFTUVOVEVEKHJlc3VsdCk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcia3ZtOiBVbnN1cHBvcnRlZCBwYWwgY2FsbCwiCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL3Byb2Nlc3MuYyBiL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jCmluZGV4IDIzMGVhZTQuLmIxZGM4MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jCisrKyBiL2FyY2gvaWE2NC9rdm0vcHJvY2Vzcy5jCkBAIC0xNjcsNyArMTY3LDYgQEAKIAlyZXR1cm4gKHJyMS52YWwpOwogfQogCi0KIC8qCiAgKiBTZXQgdklGQSAmIHZJVElSICYgdklIQSwgd2hlbiB2UFNSLmljID0xCiAgKiBQYXJhbWV0ZXI6CkBAIC0yMjIsOCArMjIxLDYgQEAKIAlpbmplY3RfZ3Vlc3RfaW50ZXJydXB0aW9uKHZjcHUsIElBNjRfSU5TVF9UTEJfVkVDVE9SKTsKIH0KIAotCi0KIC8qCiAgKiBEYXRhIE5lc3RlZCBUTEIgRmF1bHQKICAqICBAIERhdGEgTmVzdGVkIFRMQiBWZWN0b3IKQEAgLTI0NSw3ICsyNDIsNiBAQAogCWluamVjdF9ndWVzdF9pbnRlcnJ1cHRpb24odmNwdSwgSUE2NF9BTFRfREFUQV9UTEJfVkVDVE9SKTsKIH0KIAotCiAvKgogICogRGF0YSBUTEIgRmF1bHQKICAqICBAIERhdGEgVExCIHZlY3RvcgpAQCAtMjY1LDggKzI2MSw2IEBACiAJLyogSWYgdlBTUi5pYywgSUZBLCBJVElSLCBJSEEqLwogCXNldF9pZmFfaXRpcl9paGEodmNwdSwgdmFkciwgMSwgMSwgMSk7CiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCBJQTY0X1ZIUFRfVFJBTlNfVkVDVE9SKTsKLQotCiB9CiAKIC8qCkBAIC0yNzksNyArMjczLDYgQEAKIAlfdmhwdF9mYXVsdCh2Y3B1LCB2YWRyKTsKIH0KIAotCiAvKgogICogVkhQVCBEYXRhIEZhdWx0CiAgKiAgQCBWSFBUIFRyYW5zbGF0aW9uIHZlY3RvcgpAQCAtMjkwLDggKzI4Myw2IEBACiAJX3ZocHRfZmF1bHQodmNwdSwgdmFkcik7CiB9CiAKLQotCiAvKgogICogRGVhbCB3aXRoOgogICogIEdlbmVyYWwgRXhjZXB0aW9uIHZlY3RvcgpAQCAtMzAxLDcgKzI5Miw2IEBACiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCBJQTY0X0dFTkVYX1ZFQ1RPUik7CiB9CiAKLQogLyoKICAqIElsbGVnYWwgT3BlcmF0aW9uIEZhdWx0CiAgKiAgQCBHZW5lcmFsIEV4Y2VwdGlvbiBWZWN0b3IKQEAgLTQxOSwxOSArNDA5LDE2IEBACiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCBJQTY0X1BBR0VfTk9UX1BSRVNFTlRfVkVDVE9SKTsKIH0KIAotCiB2b2lkIGRhdGFfcGFnZV9ub3RfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWRyKQogewogCV9fcGFnZV9ub3RfcHJlc2VudCh2Y3B1LCB2YWRyKTsKIH0KIAotCiB2b2lkIGluc3RfcGFnZV9ub3RfcHJlc2VudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YWRyKQogewogCV9fcGFnZV9ub3RfcHJlc2VudCh2Y3B1LCB2YWRyKTsKIH0KIAotCiAvKiBEZWFsIHdpdGgKICAqICBEYXRhIGFjY2VzcyByaWdodHMgdmVjdG9yCiAgKi8KQEAgLTU2MywyMiArNTUwLDY0IEBACiAJaW5qZWN0X2d1ZXN0X2ludGVycnVwdGlvbih2Y3B1LCB2ZWN0b3IpOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBrdm1fdHJhbnNfcGFsX2NhbGxfYXJncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgdGhhc2hfZGF0YSAqZGF0YTsKKwl1bnNpZ25lZCBsb25nIGdwYSwgcG9mZjsKKworCWlmICghaXNfcGh5c2ljYWxfbW9kZSh2Y3B1KSkgeworCQkvKiBEZXBlbmRzIG9uIGNhbGxlciB0byBwcm92aWRlIHRoZSBEVFIgb3IgRFRDIG1hcHBpbmcuKi8KKwkJZGF0YSA9IHZ0bGJfbG9va3VwKHZjcHUsIGFyZywgRF9UTEIpOworCQlpZiAoZGF0YSkKKwkJCWdwYSA9IGRhdGEtPnBhZ2VfZmxhZ3MgJiBfUEFHRV9QUE5fTUFTSzsKKwkJZWxzZSB7CisJCQlkYXRhID0gdmhwdF9sb29rdXAoYXJnKTsKKwkJCWlmICghZGF0YSkKKwkJCQlyZXR1cm4gMDsKKwkJCWdwYSA9IGRhdGEtPmdwYWRkciAmIF9QQUdFX1BQTl9NQVNLOworCQl9CisKKwkJcG9mZiA9IGFyZyAmIChQU0laRShkYXRhLT5wcykgLSAxKTsKKwkJYXJnID0gUEFHRUFMSUdOKGdwYSwgZGF0YS0+cHMpIHwgcG9mZjsKKwl9CisJYXJnID0ga3ZtX2dwYV90b19tcGEoYXJnIDw8IDEgPj4gMSk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpX192YShhcmcpOworfQorCiBzdGF0aWMgdm9pZCBzZXRfcGFsX2NhbGxfZGF0YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGV4aXRfY3RsX2RhdGEgKnAgPSAmdmNwdS0+YXJjaC5leGl0X2RhdGE7CisJdW5zaWduZWQgbG9uZyBncjI4ID0gdmNwdV9nZXRfZ3IodmNwdSwgMjgpOworCXVuc2lnbmVkIGxvbmcgZ3IyOSA9IHZjcHVfZ2V0X2dyKHZjcHUsIDI5KTsKKwl1bnNpZ25lZCBsb25nIGdyMzAgPSB2Y3B1X2dldF9ncih2Y3B1LCAzMCk7CiAKIAkvKkZJWE1FOkZvciBzdGF0aWMgYW5kIHN0YWNrZWQgY29udmVudGlvbiwgZmlybXdhcmUKIAkgKiBoYXMgcHV0IHRoZSBwYXJhbWV0ZXJzIGluIGdyMjgtZ3IzMSBiZWZvcmUKIAkgKiBicmVhayB0byB2bW0gICEhKi8KIAotCXAtPnUucGFsX2RhdGEuZ3IyOCA9IHZjcHVfZ2V0X2dyKHZjcHUsIDI4KTsKLQlwLT51LnBhbF9kYXRhLmdyMjkgPSB2Y3B1X2dldF9ncih2Y3B1LCAyOSk7Ci0JcC0+dS5wYWxfZGF0YS5ncjMwID0gdmNwdV9nZXRfZ3IodmNwdSwgMzApOworCXN3aXRjaCAoZ3IyOCkgeworCWNhc2UgUEFMX1BFUkZfTU9OX0lORk86CisJY2FzZSBQQUxfSEFMVF9JTkZPOgorCQlwLT51LnBhbF9kYXRhLmdyMjkgPSAga3ZtX3RyYW5zX3BhbF9jYWxsX2FyZ3ModmNwdSwgZ3IyOSk7CisJCXAtPnUucGFsX2RhdGEuZ3IzMCA9IHZjcHVfZ2V0X2dyKHZjcHUsIDMwKTsKKwkJYnJlYWs7CisJY2FzZSBQQUxfQlJBTkRfSU5GTzoKKwkJcC0+dS5wYWxfZGF0YS5ncjI5ID0gZ3IyOTs7CisJCXAtPnUucGFsX2RhdGEuZ3IzMCA9IGt2bV90cmFuc19wYWxfY2FsbF9hcmdzKHZjcHUsIGdyMzApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwLT51LnBhbF9kYXRhLmdyMjkgPSBncjI5OzsKKwkJcC0+dS5wYWxfZGF0YS5ncjMwID0gdmNwdV9nZXRfZ3IodmNwdSwgMzApOworCX0KKwlwLT51LnBhbF9kYXRhLmdyMjggPSBncjI4OwogCXAtPnUucGFsX2RhdGEuZ3IzMSA9IHZjcHVfZ2V0X2dyKHZjcHUsIDMxKTsKKwogCXAtPmV4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fUEFMX0NBTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9wYWxfY2FsbF9yZXN1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHZvaWQgZ2V0X3BhbF9jYWxsX3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGV4aXRfY3RsX2RhdGEgKnAgPSAmdmNwdS0+YXJjaC5leGl0X2RhdGE7CiAKQEAgLTYwNiw3ICs2MzUsNyBAQAogCXAtPmV4aXRfcmVhc29uID0gRVhJVF9SRUFTT05fU0FMX0NBTEw7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zYWxfY2FsbF9yZXN1bHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIHZvaWQgZ2V0X3NhbF9jYWxsX3Jlc3VsdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJc3RydWN0IGV4aXRfY3RsX2RhdGEgKnAgPSAmdmNwdS0+YXJjaC5leGl0X2RhdGE7CiAKQEAgLTYyOSwxMyArNjU4LDEzIEBACiAJCWlmIChpaW0gPT0gRE9NTl9QQUxfUkVRVUVTVCkgewogCQkJc2V0X3BhbF9jYWxsX2RhdGEodik7CiAJCQl2bW1fdHJhbnNpdGlvbih2KTsKLQkJCXNldF9wYWxfY2FsbF9yZXN1bHQodik7CisJCQlnZXRfcGFsX2NhbGxfcmVzdWx0KHYpOwogCQkJdmNwdV9pbmNyZW1lbnRfaWlwKHYpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UgaWYgKGlpbSA9PSBET01OX1NBTF9SRVFVRVNUKSB7CiAJCQlzZXRfc2FsX2NhbGxfZGF0YSh2KTsKIAkJCXZtbV90cmFuc2l0aW9uKHYpOwotCQkJc2V0X3NhbF9jYWxsX3Jlc3VsdCh2KTsKKwkJCWdldF9zYWxfY2FsbF9yZXN1bHQodik7CiAJCQl2Y3B1X2luY3JlbWVudF9paXAodik7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTcwMyw3ICs3MzIsNiBAQAogCX0KIH0KIAotCiB2b2lkIGxlYXZlX2h5cGVydmlzb3JfdGFpbCh2b2lkKQogewogCXN0cnVjdCBrdm1fdmNwdSAqdiA9IGN1cnJlbnRfdmNwdTsKQEAgLTczNyw3ICs3NjUsNiBAQAogCX0KIH0KIAotCiBzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2xkcyhzdHJ1Y3Qga3ZtX3B0X3JlZ3MgKnJlZ3MpCiB7CiAJcmVncy0+Y3JfaXBzciB8PSBJQTY0X1BTUl9FRDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdmNwdS5jIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmMKaW5kZXggZWNkNTI2Yi4uZDRkMjgwNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92Y3B1LmMKKysrIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmMKQEAgLTExMiw3ICsxMTIsNiBAQAogCXJldHVybjsKIH0KIAotCiB2b2lkIHN3aXRjaF90b192aXJ0dWFsX3JpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBwc3I7CkBAIC0xNjYsOCArMTY1LDYgQEAKIAlyZXR1cm47CiB9CiAKLQotCiAvKgogICogSW4gcGh5c2ljYWwgbW9kZSwgaW5zZXJ0IHRjL3RyIGZvciByZWdpb24gMCBhbmQgNCB1c2VzCiAgKiBSSURbMF0gYW5kIFJJRFs0XSB3aGljaCBpcyBmb3IgcGh5c2ljYWwgbW9kZSBlbXVsYXRpb24uCkBAIC0yNjksNyArMjY2LDYgQEAKIAlyZXR1cm4gcm90YXRlX3JlZyg5NiwgcnJiX2ZyLCAocmVnbnVtIC0gSUE2NF9GSVJTVF9ST1RBVElOR19GUikpOwogfQogCi0KIC8qCiAgKiBUaGUgaW52ZXJzZSBvZiB0aGUgYWJvdmU6IGdpdmVuIGJzcHN0b3JlIGFuZCB0aGUgbnVtYmVyIG9mCiAgKiByZWdpc3RlcnMsIGNhbGN1bGF0ZSBhci5ic3AuCkBAIC04MTEsMTIgKzgwNywxNSBAQAogc3RhdGljIHZvaWQgdmNwdV9zZXRfaXRjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhbCkKIHsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKnY7CisJc3RydWN0IGt2bSAqa3ZtOwogCWludCBpOwogCWxvbmcgaXRjX29mZnNldCA9IHZhbCAtIGlhNjRfZ2V0cmVnKF9JQTY0X1JFR19BUl9JVEMpOwogCXVuc2lnbmVkIGxvbmcgdml0diA9IFZDUFUodmNwdSwgaXR2KTsKIAorCWt2bSA9IChzdHJ1Y3Qga3ZtICopS1ZNX1ZNX0JBU0U7CisKIAlpZiAodmNwdS0+dmNwdV9pZCA9PSAwKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBLVk1fTUFYX1ZDUFVTOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGt2bS0+YXJjaC5vbmxpbmVfdmNwdXM7IGkrKykgewogCQkJdiA9IChzdHJ1Y3Qga3ZtX3ZjcHUgKikoKGNoYXIgKil2Y3B1ICsKIAkJCQkJc2l6ZW9mKHN0cnVjdCBrdm1fdmNwdV9kYXRhKSAqIGkpOwogCQkJVk1YKHYsIGl0Y19vZmZzZXQpID0gaXRjX29mZnNldDsKQEAgLTEwMzksOCArMTAzOCw2IEBACiAJcmV0dXJuIGtleTsKIH0KIAotCi0KIHZvaWQga3ZtX3RoYXNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyB0aGFzaCwgdmFkcjsKQEAgLTEwNTAsNyArMTA0Nyw2IEBACiAJdmNwdV9zZXRfZ3IodmNwdSwgaW5zdC5NNDYucjEsIHRoYXNoLCAwKTsKIH0KIAotCiB2b2lkIGt2bV90dGFnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyB0YWcsIHZhZHI7CkBAIC0xMTMxLDcgKzExMjcsNiBAQAogCXJldHVybiBJQTY0X05PX0ZBVUxUOwogfQogCi0KIGludCBrdm1fdHBhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgSU5TVDY0IGluc3QpCiB7CiAJdW5zaWduZWQgbG9uZyByMSwgcjM7CkBAIC0xMTU0LDcgKzExNDksNiBAQAogCXZjcHVfc2V0X2dyKHZjcHUsIGluc3QuTTQ2LnIxLCByMSwgMCk7CiB9CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSW5zZXJ0L1B1cmdlIHRyYW5zbGF0aW9uIHJlZ2lzdGVyL2NhY2hlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTM4NSw3ICsxMzc5LDYgQEAKIAl2Y3B1X3NldF9pdGModmNwdSwgcjIpOwogfQogCi0KIHZvaWQga3ZtX21vdl9mcm9tX2FyX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgcjE7CkBAIC0xMzkzLDggKzEzODYsOSBAQAogCXIxID0gdmNwdV9nZXRfaXRjKHZjcHUpOwogCXZjcHVfc2V0X2dyKHZjcHUsIGluc3QuTTMxLnIxLCByMSwgMCk7CiB9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBzdHJ1Y3Qga3ZtX3ZjcHUqcHJvdGVjdGlvbiBrZXkgcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzCisgIHN0cnVjdCBrdm1fdmNwdSBwcm90ZWN0aW9uIGtleSByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogdW5zaWduZWQgbG9uZyB2Y3B1X2dldF9wa3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJlZykKQEAgLTE0MDcsMjAgKzE0MDEsNiBAQAogCWlhNjRfc2V0X3BrcihyZWcsIHZhbCk7CiB9CiAKLQotdW5zaWduZWQgbG9uZyB2Y3B1X2dldF9pdGlyX29uX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBpZmEpCi17Ci0JdW5pb24gaWE2NF9yciByciwgcnIxOwotCi0JcnIudmFsID0gdmNwdV9nZXRfcnIodmNwdSwgaWZhKTsKLQlycjEudmFsID0gMDsKLQlycjEucHMgPSByci5wczsKLQlycjEucmlkID0gcnIucmlkOwotCXJldHVybiAocnIxLnZhbCk7Ci19Ci0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1vdmVzIHRvIHByaXZpbGVnZWQgcmVnaXN0ZXJzCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNDY0LDggKzE0NDQsNiBAQAogCXJldHVybiAoSUE2NF9OT19GQVVMVCk7CiB9CiAKLQotCiB2b2lkIGt2bV9tb3ZfdG9fcnIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHIzLCByMjsKQEAgLTE1MTAsOCArMTQ4OCw2IEBACiAJdmNwdV9zZXRfcGtyKHZjcHUsIHIzLCByMik7CiB9CiAKLQotCiB2b2lkIGt2bV9tb3ZfZnJvbV9ycihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIElOU1Q2NCBpbnN0KQogewogCXVuc2lnbmVkIGxvbmcgcjMsIHIxOwpAQCAtMTU1Nyw3ICsxNTMzLDYgQEAKIAl2Y3B1X3NldF9ncih2Y3B1LCBpbnN0Lk00My5yMSwgcjEsIDApOwogfQogCi0KIHVuc2lnbmVkIGxvbmcgdmNwdV9nZXRfY3B1aWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIHJlZykKIHsKIAkvKiBGSVhNRTogVGhpcyBjb3VsZCBnZXQgY2FsbGVkIGFzIGEgcmVzdWx0IG9mIGEgcnN2ZC1yZWcgZmF1bHQgKi8KQEAgLTE2MDksNyArMTU4NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogdW5zaWduZWQgbG9uZyBrdm1fbW92X2Zyb21fY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBJTlNUNjQgaW5zdCkKIHsKIAl1bnNpZ25lZCBsb25nIHRndCA9IGluc3QuTTMzLnIxOwpAQCAtMTYzMyw4ICsxNjA3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCi0KIHZvaWQgdmNwdV9zZXRfcHNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAKQEAgLTE3NzYsOSArMTc0OCw2IEBACiAJfQogfQogCi0KLQotCiB2b2lkIHZjcHVfcmZpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGlmcywgcHNyOwpAQCAtMTc5Niw3ICsxNzY1LDYgQEAKIAlyZWdzLT5jcl9paXAgPSBWQ1BVKHZjcHUsIGlpcCk7CiB9CiAKLQogLyoKICAgIFZQU1IgY2FuJ3Qga2VlcCB0cmFjayBvZiBiZWxvdyBiaXRzIG9mIGd1ZXN0IFBTUgogICAgVGhpcyBmdW5jdGlvbiBnZXRzIGd1ZXN0IFBTUgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2t2bS92Y3B1LmggYi9hcmNoL2lhNjQva3ZtL3ZjcHUuaAppbmRleCBiMmYxMmE1Li4wNDJhZjkyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL3ZjcHUuaAorKysgYi9hcmNoL2lhNjQva3ZtL3ZjcHUuaApAQCAtNzAzLDcgKzcwMyw3IEBACiBleHRlcm4gdm9pZCB0aGFzaF9wdXJnZV9lbnRyaWVzKHN0cnVjdCBrdm1fdmNwdSAqdiwgdTY0IHZhLCB1NjQgcHMpOwogZXh0ZXJuIHZvaWQgdGhhc2hfcHVyZ2VfZW50cmllc19yZW1vdGUoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgdmEsIHU2NCBwcyk7CiBleHRlcm4gdTY0IHRyYW5zbGF0ZV9waHlfcHRlKHU2NCAqcHRlLCB1NjQgaXRpciwgdTY0IHZhKTsKLWV4dGVybiBpbnQgdGhhc2hfcHVyZ2VfYW5kX2luc2VydChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIHU2NCBwdGUsCitleHRlcm4gdm9pZCB0aGFzaF9wdXJnZV9hbmRfaW5zZXJ0KHN0cnVjdCBrdm1fdmNwdSAqdiwgdTY0IHB0ZSwKIAkJdTY0IGl0aXIsIHU2NCBpZmEsIGludCB0eXBlKTsKIGV4dGVybiB2b2lkIHRoYXNoX3B1cmdlX2FsbChzdHJ1Y3Qga3ZtX3ZjcHUgKnYpOwogZXh0ZXJuIHN0cnVjdCB0aGFzaF9kYXRhICp2dGxiX2xvb2t1cChzdHJ1Y3Qga3ZtX3ZjcHUgKnYsCkBAIC03MzgsNyArNzM4LDcgQEAKIHZvaWQgdGhhc2hfaW5pdChzdHJ1Y3QgdGhhc2hfY2IgKmhjYiwgdTY0IHN6KTsKIAogdm9pZCBwYW5pY192bShzdHJ1Y3Qga3ZtX3ZjcHUgKnYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLQordTY0IGt2bV9ncGFfdG9fbXBhKHU2NCBncGEpOwogZXh0ZXJuIHU2NCBpYTY0X2NhbGxfdnNhKHU2NCBwcm9jLCB1NjQgYXJnMSwgdTY0IGFyZzIsIHU2NCBhcmczLAogCQl1NjQgYXJnNCwgdTY0IGFyZzUsIHU2NCBhcmc2LCB1NjQgYXJnNyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdnRsYi5jIGIvYXJjaC9pYTY0L2t2bS92dGxiLmMKaW5kZXggNmI2MzA3YS4uMzgyMzJiMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS92dGxiLmMKKysrIGIvYXJjaC9pYTY0L2t2bS92dGxiLmMKQEAgLTE2NCwxMSArMTY0LDExIEBACiAJdW5zaWduZWQgbG9uZyBwcywgZ3BhZGRyOwogCiAJcHMgPSBpdGlyX3BzKGl0aXIpOwotCi0JZ3BhZGRyID0gKChncHRlICYgX1BBR0VfUFBOX01BU0spID4+IHBzIDw8IHBzKSB8Ci0JCShpZmEgJiAoKDFVTCA8PCBwcykgLSAxKSk7Ci0KIAlyci52YWwgPSBpYTY0X2dldF9ycihpZmEpOworCisJIGdwYWRkciA9ICgoZ3B0ZSAmIF9QQUdFX1BQTl9NQVNLKSA+PiBwcyA8PCBwcykgfAorCQkJCQkoaWZhICYgKCgxVUwgPDwgcHMpIC0gMSkpOworCiAJaGVhZCA9IChzdHJ1Y3QgdGhhc2hfZGF0YSAqKWlhNjRfdGhhc2goaWZhKTsKIAloZWFkLT5ldGFnID0gSU5WQUxJRF9USV9UQUc7CiAJaWE2NF9tZigpOwpAQCAtNDEyLDE2ICs0MTIsMTQgQEAKIAogLyoKICAqIFB1cmdlIG92ZXJsYXAgVENzIGFuZCB0aGVuIGluc2VydCB0aGUgbmV3IGVudHJ5IHRvIGVtdWxhdGUgaXRjIG9wcy4KLSAqICAgIE5vdGVzOiBPbmx5IFRDIGVudHJ5IGNhbiBwdXJnZSBhbmQgaW5zZXJ0LgotICogICAgMSBpbmRpY2F0ZXMgdGhpcyBpcyBNTUlPCisgKiBOb3RlczogT25seSBUQyBlbnRyeSBjYW4gcHVyZ2UgYW5kIGluc2VydC4KICAqLwotaW50IHRoYXNoX3B1cmdlX2FuZF9pbnNlcnQoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgcHRlLCB1NjQgaXRpciwKK3ZvaWQgIHRoYXNoX3B1cmdlX2FuZF9pbnNlcnQoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgcHRlLCB1NjQgaXRpciwKIAkJCQkJCXU2NCBpZmEsIGludCB0eXBlKQogewogCXU2NCBwczsKIAl1NjQgcGh5X3B0ZSwgaW9fbWFzaywgaW5kZXg7CiAJdW5pb24gaWE2NF9yciB2cnIsIG1ycjsKLQlpbnQgcmV0ID0gMDsKIAogCXBzID0gaXRpcl9wcyhpdGlyKTsKIAl2cnIudmFsID0gdmNwdV9nZXRfcnIodiwgaWZhKTsKQEAgLTQ0MSwyNSArNDM5LDE5IEBACiAJCXBoeV9wdGUgJj0gfl9QQUdFX01BX01BU0s7CiAJfQogCi0JaWYgKHB0ZSAmIFZUTEJfUFRFX0lPKQotCQlyZXQgPSAxOwotCiAJdnRsYl9wdXJnZSh2LCBpZmEsIHBzKTsKIAl2aHB0X3B1cmdlKHYsIGlmYSwgcHMpOwogCi0JaWYgKHBzID09IG1yci5wcykgewotCQlpZiAoIShwdGUmVlRMQl9QVEVfSU8pKSB7Ci0JCQl2aHB0X2luc2VydChwaHlfcHRlLCBpdGlyLCBpZmEsIHB0ZSk7Ci0JCX0gZWxzZSB7Ci0JCQl2dGxiX2luc2VydCh2LCBwdGUsIGl0aXIsIGlmYSk7Ci0JCQl2Y3B1X3F1aWNrX3JlZ2lvbl9zZXQoVk1YKHYsIHRjX3JlZ2lvbnMpLCBpZmEpOwotCQl9Ci0JfSBlbHNlIGlmIChwcyA+IG1yci5wcykgeworCWlmICgocHMgIT0gbXJyLnBzKSB8fCAocHRlICYgVlRMQl9QVEVfSU8pKSB7CiAJCXZ0bGJfaW5zZXJ0KHYsIHB0ZSwgaXRpciwgaWZhKTsKIAkJdmNwdV9xdWlja19yZWdpb25fc2V0KFZNWCh2LCB0Y19yZWdpb25zKSwgaWZhKTsKLQkJaWYgKCEocHRlJlZUTEJfUFRFX0lPKSkKLQkJCXZocHRfaW5zZXJ0KHBoeV9wdGUsIGl0aXIsIGlmYSwgcHRlKTsKLQl9IGVsc2UgeworCX0KKwlpZiAocHRlICYgVlRMQl9QVEVfSU8pCisJCXJldHVybjsKKworCWlmIChwcyA+PSBtcnIucHMpCisJCXZocHRfaW5zZXJ0KHBoeV9wdGUsIGl0aXIsIGlmYSwgcHRlKTsKKwllbHNlIHsKIAkJdTY0IHBzcjsKIAkJcGh5X3B0ZSAgJj0gflBBR0VfRkxBR1NfUlZfTUFTSzsKIAkJcHNyID0gaWE2NF9jbGVhcl9pYygpOwpAQCAtNDY5LDcgKzQ2MSw2IEBACiAJaWYgKCEocHRlJlZUTEJfUFRFX0lPKSkKIAkJbWFya19wYWdlc19kaXJ0eSh2LCBwdGUsIHBzKTsKIAotCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC01MDksNyArNTAwLDYgQEAKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CiB9CiAKLQogLyoKICAqIExvb2t1cCB0aGUgaGFzaCB0YWJsZSBhbmQgaXRzIGNvbGxpc2lvbiBjaGFpbiB0byBmaW5kIGFuIGVudHJ5CiAgKiBjb3ZlcmluZyB0aGlzIGFkZHJlc3MgcmlkOnZhIG9yIHRoZSBlbnRyeS4KQEAgLTUxNyw3ICs1MDcsNiBAQAogICogSU5QVVQ6CiAgKiAgaW46IFRMQiBmb3JtYXQgZm9yIGJvdGggVkhQVCAmIFRMQi4KICAqLwotCiBzdHJ1Y3QgdGhhc2hfZGF0YSAqdnRsYl9sb29rdXAoc3RydWN0IGt2bV92Y3B1ICp2LCB1NjQgdmEsIGludCBpc19kYXRhKQogewogCXN0cnVjdCB0aGFzaF9kYXRhICAqY2NoOwpAQCAtNTQ3LDcgKzUzNiw2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLQogLyoKICAqIEluaXRpYWxpemUgaW50ZXJuYWwgY29udHJvbCBkYXRhIGJlZm9yZSBzZXJ2aWNlLgogICovCkBAIC01NzMsNiArNTYxLDEwIEBACiB1NjQga3ZtX2dldF9tcHRfZW50cnkodTY0IGdwZm4pCiB7CiAJdTY0ICpiYXNlID0gKHU2NCAqKSBLVk1fUDJNX0JBU0U7CisKKwlpZiAoZ3BmbiA+PSAoS1ZNX1AyTV9TSVpFID4+IDMpKQorCQlwYW5pY192bShjdXJyZW50X3ZjcHUsICJJbnZhbGlkIGdwZm4gPSVseFxuIiwgZ3Bmbik7CisKIAlyZXR1cm4gKihiYXNlICsgZ3Bmbik7CiB9CiAKQEAgLTU4OSw3ICs1ODEsNiBAQAogCXJldHVybiAocHRlID4+IFBBR0VfU0hJRlQgPDwgUEFHRV9TSElGVCkgfCAoZ3BhICYgflBBR0VfTUFTSyk7CiB9CiAKLQogLyoKICAqIEZldGNoIGd1ZXN0IGJ1bmRsZSBjb2RlLgogICogSU5QVVQ6CkBAIC02MzEsNyArNjIyLDYgQEAKIAlyZXR1cm4gSUE2NF9OT19GQVVMVDsKIH0KIAotCiB2b2lkIGt2bV9pbml0X3ZocHQoc3RydWN0IGt2bV92Y3B1ICp2KQogewogCXYtPmFyY2gudmhwdC5udW0gPSBWSFBUX05VTV9FTlRSSUVTOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKaW5kZXggMmFlYWU0Ni4uOGRmZDMxZSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lycS5jCkBAIC00OSw3ICs0OSw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9NYWtlZmlsZSBiL2FyY2gvbTY4ay9NYWtlZmlsZQppbmRleCA4MTMzZGJjLi41NzBkODVjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvTWFrZWZpbGUKKysrIGIvYXJjaC9tNjhrL01ha2VmaWxlCkBAIC0xMTcsMyArMTE3LDYgQEAKIAogYXJjaGNsZWFuOgogCXJtIC1mIHZtbGludXguZ3ogdm1saW51eC5iejIKKworaW5zdGFsbDoKKwlzaCAkKHNyY3RyZWUpL2FyY2gvbTY4ay9pbnN0YWxsLnNoICQoS0VSTkVMUkVMRUFTRSkgdm1saW51eC5neiBTeXN0ZW0ubWFwICIkKElOU1RBTExfUEFUSCkiCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaXJxX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaXJxX21tLmgKaW5kZXggMjI2YmZjMC4uMGNhYjQyYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lycV9tbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pcnFfbW0uaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KIAogLyoKQEAgLTgwLDcgKzgxLDcgQEAKICAqIGludGVycnVwdCBzb3VyY2UgKGlmIGl0IHN1cHBvcnRzIGNoYWluaW5nKS4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgaXJxX25vZGUgewotCWludAkJKCpoYW5kbGVyKShpbnQsIHZvaWQgKik7CisJaXJxcmV0dXJuX3QJKCpoYW5kbGVyKShpbnQsIHZvaWQgKik7CiAJdm9pZAkJKmRldl9pZDsKIAlzdHJ1Y3QgaXJxX25vZGUgKm5leHQ7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaAppbmRleCAwNTMwOWY3Li41MGRiMzU5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCkBAIC0zNCw2ICszNCw3IEBACiAJY2hhciBzY2NfdHlwZTsKIAljaGFyIGV0aGVyX3R5cGU7CiAJY2hhciBudWJ1c190eXBlOworCWNoYXIgZmxvcHB5X3R5cGU7CiB9OwogCiAjZGVmaW5lIE1BQ19BREJfTk9ORQkJMApAQCAtNzEsNiArNzIsMTIgQEAKICNkZWZpbmUgTUFDX05PX05VQlVTCQkwCiAjZGVmaW5lIE1BQ19OVUJVUwkJMQogCisjZGVmaW5lIE1BQ19GTE9QUFlfSVdNCQkwCisjZGVmaW5lIE1BQ19GTE9QUFlfU1dJTV9BRERSMQkxCisjZGVmaW5lIE1BQ19GTE9QUFlfU1dJTV9BRERSMgkyCisjZGVmaW5lIE1BQ19GTE9QUFlfU1dJTV9JT1AJMworI2RlZmluZSBNQUNfRkxPUFBZX0FWCQk0CisKIC8qCiAgKglHZXN0YWx0IG51bWJlcnMKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFyYW0uaAppbmRleCA0MGQxMTEyLi44NWM0MWI3IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFyYW0uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFyYW0uaApAQCAtMSw1ICsxLDI2IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJwYXJhbV9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJwYXJhbV9tbS5oIgorI2lmbmRlZiBfTTY4S19QQVJBTV9ICisjZGVmaW5lIF9NNjhLX1BBUkFNX0gKKworI2lmZGVmIF9fS0VSTkVMX18KKyMgZGVmaW5lIEhaCQlDT05GSUdfSFoJLyogSW50ZXJuYWwga2VybmVsIHRpbWVyIGZyZXF1ZW5jeSAqLworIyBkZWZpbmUgVVNFUl9IWgkxMDAJCS8qIC4uIHNvbWUgdXNlciBpbnRlcmZhY2VzIGFyZSBpbiAidGlja3MiICovCisjIGRlZmluZSBDTE9DS1NfUEVSX1NFQwkoVVNFUl9IWikJLyogbGlrZSB0aW1lcygpICovCiAjZW5kaWYKKworI2lmbmRlZiBIWgorI2RlZmluZSBIWiAxMDAKKyNlbmRpZgorCisjaWZkZWYgX191Q2xpbnV4X18KKyNkZWZpbmUgRVhFQ19QQUdFU0laRQk0MDk2CisjZWxzZQorI2RlZmluZSBFWEVDX1BBR0VTSVpFCTgxOTIKKyNlbmRpZgorCisjaWZuZGVmIE5PR1JPVVAKKyNkZWZpbmUgTk9HUk9VUAkJKC0xKQorI2VuZGlmCisKKyNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLworCisjZW5kaWYgLyogX002OEtfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFyYW1fbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2YTI3OC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGFyYW1fbW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSNpZm5kZWYgX002OEtfUEFSQU1fSAotI2RlZmluZSBfTTY4S19QQVJBTV9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jIGRlZmluZSBIWgkJQ09ORklHX0haCS8qIEludGVybmFsIGtlcm5lbCB0aW1lciBmcmVxdWVuY3kgKi8KLSMgZGVmaW5lIFVTRVJfSFoJMTAwCQkvKiAuLiBzb21lIHVzZXIgaW50ZXJmYWNlcyBhcmUgaW4gInRpY2tzIiAqLwotIyBkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGxpa2UgdGltZXMoKSAqLwotI2VuZGlmCi0KLSNpZm5kZWYgSFoKLSNkZWZpbmUgSFogMTAwCi0jZW5kaWYKLQotI2RlZmluZSBFWEVDX1BBR0VTSVpFCTgxOTIKLQotI2lmbmRlZiBOT0dST1VQCi0jZGVmaW5lIE5PR1JPVVAJCSgtMSkKLSNlbmRpZgotCi0jZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KLQotI2VuZGlmIC8qIF9NNjhLX1BBUkFNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wYXJhbV9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNDQzOTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BhcmFtX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jaWZuZGVmIF9NNjhLTk9NTVVfUEFSQU1fSAotI2RlZmluZSBfTTY4S05PTU1VX1BBUkFNX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgSFogQ09ORklHX0haCi0jZGVmaW5lCVVTRVJfSFoJCUhaCi0jZGVmaW5lCUNMT0NLU19QRVJfU0VDCShVU0VSX0haKQotI2VuZGlmCi0KLSNpZm5kZWYgSFoKLSNkZWZpbmUgSFoJMTAwCi0jZW5kaWYKLQotI2RlZmluZSBFWEVDX1BBR0VTSVpFCTQwOTYKLQotI2lmbmRlZiBOT0dST1VQCi0jZGVmaW5lIE5PR1JPVVAJCSgtMSkKLSNlbmRpZgotCi0jZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KLQotI2VuZGlmIC8qIF9NNjhLTk9NTVVfUEFSQU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGU4M2NkMmYuLjhjOTE5NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTEsNSArMSw4NyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAicHRyYWNlX25vLmgiCisjaWZuZGVmIF9NNjhLX1BUUkFDRV9ICisjZGVmaW5lIF9NNjhLX1BUUkFDRV9ICisKKyNkZWZpbmUgUFRfRDEJICAgMAorI2RlZmluZSBQVF9EMgkgICAxCisjZGVmaW5lIFBUX0QzCSAgIDIKKyNkZWZpbmUgUFRfRDQJICAgMworI2RlZmluZSBQVF9ENQkgICA0CisjZGVmaW5lIFBUX0Q2CSAgIDUKKyNkZWZpbmUgUFRfRDcJICAgNgorI2RlZmluZSBQVF9BMAkgICA3CisjZGVmaW5lIFBUX0ExCSAgIDgKKyNkZWZpbmUgUFRfQTIJICAgOQorI2RlZmluZSBQVF9BMwkgICAxMAorI2RlZmluZSBQVF9BNAkgICAxMQorI2RlZmluZSBQVF9BNQkgICAxMgorI2RlZmluZSBQVF9BNgkgICAxMworI2RlZmluZSBQVF9EMAkgICAxNAorI2RlZmluZSBQVF9VU1AJICAgMTUKKyNkZWZpbmUgUFRfT1JJR19EMCAxNgorI2RlZmluZSBQVF9TUgkgICAxNworI2RlZmluZSBQVF9QQwkgICAxOAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKiB0aGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQorICAgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuICovCisKK3N0cnVjdCBwdF9yZWdzIHsKKyAgbG9uZyAgICAgZDE7CisgIGxvbmcgICAgIGQyOworICBsb25nICAgICBkMzsKKyAgbG9uZyAgICAgZDQ7CisgIGxvbmcgICAgIGQ1OworICBsb25nICAgICBhMDsKKyAgbG9uZyAgICAgYTE7CisgIGxvbmcgICAgIGEyOworICBsb25nICAgICBkMDsKKyAgbG9uZyAgICAgb3JpZ19kMDsKKyAgbG9uZyAgICAgc3RrYWRqOworI2lmZGVmIENPTkZJR19DT0xERklSRQorICB1bnNpZ25lZCBmb3JtYXQgOiAgNDsgLyogZnJhbWUgZm9ybWF0IHNwZWNpZmllciAqLworICB1bnNpZ25lZCB2ZWN0b3IgOiAxMjsgLyogdmVjdG9yIG9mZnNldCAqLworICB1bnNpZ25lZCBzaG9ydCBzcjsKKyAgdW5zaWduZWQgbG9uZyAgcGM7CiAjZWxzZQotI2luY2x1ZGUgInB0cmFjZV9tbS5oIgorICB1bnNpZ25lZCBzaG9ydCBzcjsKKyAgdW5zaWduZWQgbG9uZyAgcGM7CisgIHVuc2lnbmVkIGZvcm1hdCA6ICA0OyAvKiBmcmFtZSBmb3JtYXQgc3BlY2lmaWVyICovCisgIHVuc2lnbmVkIHZlY3RvciA6IDEyOyAvKiB2ZWN0b3Igb2Zmc2V0ICovCiAjZW5kaWYKK307CisKKy8qCisgKiBUaGlzIGlzIHRoZSBleHRlbmRlZCBzdGFjayB1c2VkIGJ5IHNpZ25hbCBoYW5kbGVycyBhbmQgdGhlIGNvbnRleHQKKyAqIHN3aXRjaGVyOiBpdCdzIHB1c2hlZCBhZnRlciB0aGUgbm9ybWFsICJzdHJ1Y3QgcHRfcmVncyIuCisgKi8KK3N0cnVjdCBzd2l0Y2hfc3RhY2sgeworCXVuc2lnbmVkIGxvbmcgIGQ2OworCXVuc2lnbmVkIGxvbmcgIGQ3OworCXVuc2lnbmVkIGxvbmcgIGEzOworCXVuc2lnbmVkIGxvbmcgIGE0OworCXVuc2lnbmVkIGxvbmcgIGE1OworCXVuc2lnbmVkIGxvbmcgIGE2OworCXVuc2lnbmVkIGxvbmcgIHJldHBjOworfTsKKworLyogQXJiaXRyYXJpbHkgY2hvb3NlIHRoZSBzYW1lIHB0cmFjZSBudW1iZXJzIGFzIHVzZWQgYnkgdGhlIFNwYXJjIGNvZGUuICovCisjZGVmaW5lIFBUUkFDRV9HRVRSRUdTICAgICAgICAgICAgMTIKKyNkZWZpbmUgUFRSQUNFX1NFVFJFR1MgICAgICAgICAgICAxMworI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTICAgICAgICAgIDE0CisjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MgICAgICAgICAgMTUKKworI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBQU19TCisjZGVmaW5lIFBTX1MgICgweDIwMDApCisjZGVmaW5lIFBTX00gICgweDEwMDApCisjZW5kaWYKKworI2RlZmluZSB1c2VyX21vZGUocmVncykgKCEoKHJlZ3MpLT5zciAmIFBTX1MpKQorI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPnBjKQorI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKK2V4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgLyogX002OEtfUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2VfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2VfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdlNzYzZC4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1BUUkFDRV9ICi0jZGVmaW5lIF9NNjhLX1BUUkFDRV9ICi0KLSNkZWZpbmUgUFRfRDEJICAgMAotI2RlZmluZSBQVF9EMgkgICAxCi0jZGVmaW5lIFBUX0QzCSAgIDIKLSNkZWZpbmUgUFRfRDQJICAgMwotI2RlZmluZSBQVF9ENQkgICA0Ci0jZGVmaW5lIFBUX0Q2CSAgIDUKLSNkZWZpbmUgUFRfRDcJICAgNgotI2RlZmluZSBQVF9BMAkgICA3Ci0jZGVmaW5lIFBUX0ExCSAgIDgKLSNkZWZpbmUgUFRfQTIJICAgOQotI2RlZmluZSBQVF9BMwkgICAxMAotI2RlZmluZSBQVF9BNAkgICAxMQotI2RlZmluZSBQVF9BNQkgICAxMgotI2RlZmluZSBQVF9BNgkgICAxMwotI2RlZmluZSBQVF9EMAkgICAxNAotI2RlZmluZSBQVF9VU1AJICAgMTUKLSNkZWZpbmUgUFRfT1JJR19EMCAxNgotI2RlZmluZSBQVF9TUgkgICAxNwotI2RlZmluZSBQVF9QQwkgICAxOAotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKiB0aGlzIHN0cnVjdCBkZWZpbmVzIHRoZSB3YXkgdGhlIHJlZ2lzdGVycyBhcmUgc3RvcmVkIG9uIHRoZQotICAgc3RhY2sgZHVyaW5nIGEgc3lzdGVtIGNhbGwuICovCi0KLXN0cnVjdCBwdF9yZWdzIHsKLSAgbG9uZyAgICAgZDE7Ci0gIGxvbmcgICAgIGQyOwotICBsb25nICAgICBkMzsKLSAgbG9uZyAgICAgZDQ7Ci0gIGxvbmcgICAgIGQ1OwotICBsb25nICAgICBhMDsKLSAgbG9uZyAgICAgYTE7Ci0gIGxvbmcgICAgIGEyOwotICBsb25nICAgICBkMDsKLSAgbG9uZyAgICAgb3JpZ19kMDsKLSAgbG9uZyAgICAgc3RrYWRqOwotICB1bnNpZ25lZCBzaG9ydCBzcjsKLSAgdW5zaWduZWQgbG9uZyAgcGM7Ci0gIHVuc2lnbmVkIGZvcm1hdCA6ICA0OyAvKiBmcmFtZSBmb3JtYXQgc3BlY2lmaWVyICovCi0gIHVuc2lnbmVkIHZlY3RvciA6IDEyOyAvKiB2ZWN0b3Igb2Zmc2V0ICovCi19OwotCi0vKgotICogVGhpcyBpcyB0aGUgZXh0ZW5kZWQgc3RhY2sgdXNlZCBieSBzaWduYWwgaGFuZGxlcnMgYW5kIHRoZSBjb250ZXh0Ci0gKiBzd2l0Y2hlcjogaXQncyBwdXNoZWQgYWZ0ZXIgdGhlIG5vcm1hbCAic3RydWN0IHB0X3JlZ3MiLgotICovCi1zdHJ1Y3Qgc3dpdGNoX3N0YWNrIHsKLQl1bnNpZ25lZCBsb25nICBkNjsKLQl1bnNpZ25lZCBsb25nICBkNzsKLQl1bnNpZ25lZCBsb25nICBhMzsKLQl1bnNpZ25lZCBsb25nICBhNDsKLQl1bnNpZ25lZCBsb25nICBhNTsKLQl1bnNpZ25lZCBsb25nICBhNjsKLQl1bnNpZ25lZCBsb25nICByZXRwYzsKLX07Ci0KLS8qIEFyYml0cmFyaWx5IGNob29zZSB0aGUgc2FtZSBwdHJhY2UgbnVtYmVycyBhcyB1c2VkIGJ5IHRoZSBTcGFyYyBjb2RlLiAqLwotI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBUUkFDRV9TRVRSRUdTICAgICAgICAgICAgMTMKLSNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAgICAgICAgICAxNAotI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTICAgICAgICAgIDE1Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpZm5kZWYgUFNfUwotI2RlZmluZSBQU19TICAoMHgyMDAwKQotI2RlZmluZSBQU19NICAoMHgxMDAwKQotI2VuZGlmCi0KLSNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICghKChyZWdzKS0+c3IgJiBQU19TKSkKLSNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5wYykKLSNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCi1leHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7Ci0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qIF9NNjhLX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjOTE5NGIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZV9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19QVFJBQ0VfSAotI2RlZmluZSBfTTY4S19QVFJBQ0VfSAotCi0jZGVmaW5lIFBUX0QxCSAgIDAKLSNkZWZpbmUgUFRfRDIJICAgMQotI2RlZmluZSBQVF9EMwkgICAyCi0jZGVmaW5lIFBUX0Q0CSAgIDMKLSNkZWZpbmUgUFRfRDUJICAgNAotI2RlZmluZSBQVF9ENgkgICA1Ci0jZGVmaW5lIFBUX0Q3CSAgIDYKLSNkZWZpbmUgUFRfQTAJICAgNwotI2RlZmluZSBQVF9BMQkgICA4Ci0jZGVmaW5lIFBUX0EyCSAgIDkKLSNkZWZpbmUgUFRfQTMJICAgMTAKLSNkZWZpbmUgUFRfQTQJICAgMTEKLSNkZWZpbmUgUFRfQTUJICAgMTIKLSNkZWZpbmUgUFRfQTYJICAgMTMKLSNkZWZpbmUgUFRfRDAJICAgMTQKLSNkZWZpbmUgUFRfVVNQCSAgIDE1Ci0jZGVmaW5lIFBUX09SSUdfRDAgMTYKLSNkZWZpbmUgUFRfU1IJICAgMTcKLSNkZWZpbmUgUFRfUEMJICAgMTgKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogdGhpcyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbiB0aGUKLSAgIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsLiAqLwotCi1zdHJ1Y3QgcHRfcmVncyB7Ci0gIGxvbmcgICAgIGQxOwotICBsb25nICAgICBkMjsKLSAgbG9uZyAgICAgZDM7Ci0gIGxvbmcgICAgIGQ0OwotICBsb25nICAgICBkNTsKLSAgbG9uZyAgICAgYTA7Ci0gIGxvbmcgICAgIGExOwotICBsb25nICAgICBhMjsKLSAgbG9uZyAgICAgZDA7Ci0gIGxvbmcgICAgIG9yaWdfZDA7Ci0gIGxvbmcgICAgIHN0a2FkajsKLSNpZmRlZiBDT05GSUdfQ09MREZJUkUKLSAgdW5zaWduZWQgZm9ybWF0IDogIDQ7IC8qIGZyYW1lIGZvcm1hdCBzcGVjaWZpZXIgKi8KLSAgdW5zaWduZWQgdmVjdG9yIDogMTI7IC8qIHZlY3RvciBvZmZzZXQgKi8KLSAgdW5zaWduZWQgc2hvcnQgc3I7Ci0gIHVuc2lnbmVkIGxvbmcgIHBjOwotI2Vsc2UKLSAgdW5zaWduZWQgc2hvcnQgc3I7Ci0gIHVuc2lnbmVkIGxvbmcgIHBjOwotICB1bnNpZ25lZCBmb3JtYXQgOiAgNDsgLyogZnJhbWUgZm9ybWF0IHNwZWNpZmllciAqLwotICB1bnNpZ25lZCB2ZWN0b3IgOiAxMjsgLyogdmVjdG9yIG9mZnNldCAqLwotI2VuZGlmCi19OwotCi0vKgotICogVGhpcyBpcyB0aGUgZXh0ZW5kZWQgc3RhY2sgdXNlZCBieSBzaWduYWwgaGFuZGxlcnMgYW5kIHRoZSBjb250ZXh0Ci0gKiBzd2l0Y2hlcjogaXQncyBwdXNoZWQgYWZ0ZXIgdGhlIG5vcm1hbCAic3RydWN0IHB0X3JlZ3MiLgotICovCi1zdHJ1Y3Qgc3dpdGNoX3N0YWNrIHsKLQl1bnNpZ25lZCBsb25nICBkNjsKLQl1bnNpZ25lZCBsb25nICBkNzsKLQl1bnNpZ25lZCBsb25nICBhMzsKLQl1bnNpZ25lZCBsb25nICBhNDsKLQl1bnNpZ25lZCBsb25nICBhNTsKLQl1bnNpZ25lZCBsb25nICBhNjsKLQl1bnNpZ25lZCBsb25nICByZXRwYzsKLX07Ci0KLS8qIEFyYml0cmFyaWx5IGNob29zZSB0aGUgc2FtZSBwdHJhY2UgbnVtYmVycyBhcyB1c2VkIGJ5IHRoZSBTcGFyYyBjb2RlLiAqLwotI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAgICAgICAgICAgIDEyCi0jZGVmaW5lIFBUUkFDRV9TRVRSRUdTICAgICAgICAgICAgMTMKLSNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAgICAgICAgICAxNAotI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTICAgICAgICAgIDE1Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpZm5kZWYgUFNfUwotI2RlZmluZSBQU19TICAoMHgyMDAwKQotI2RlZmluZSBQU19NICAoMHgxMDAwKQotI2VuZGlmCi0KLSNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICghKChyZWdzKS0+c3IgJiBQU19TKSkKLSNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5wYykKLSNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCi1leHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7Ci0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotI2VuZGlmIC8qIF9NNjhLX1BUUkFDRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDg0MmY4NmYuLjRkZmIzOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0xLDUgKzEsMzc2IEBACi0jaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJzZXR1cF9uby5oIgorLyoKKyoqIGFzbS9zZXR1cC5oIC0tIERlZmluaXRpb24gb2YgdGhlIExpbnV4L202OGsgc2V0dXAgaW5mb3JtYXRpb24KKyoqCisqKiBDb3B5cmlnaHQgMTk5MiBieSBHcmVnIEhhcnAKKyoqCisqKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworKiogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyoqIGZvciBtb3JlIGRldGFpbHMuCisqKgorKiogQ3JlYXRlZCAwOS8yOS85MiBieSBHcmVnIEhhcnAKKyoqCisqKiA1LzIvOTQgUm9tYW4gSG9kZWs6CisqKiAgIEFkZGVkIGJpX2F0YXJpIHBhcnQgb2YgdGhlIG1hY2hpbmUgZGVwZW5kZW50IHVuaW9uIGJpX3VuOyBmb3Igbm93IGl0CisqKiAgIGNvbnRhaW5zIGp1c3QgYSBtb2RlbCBmaWVsZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIFRUIGFuZCBGYWxjb24uCisqKiAyNi83Lzk2IFJvbWFuIFppcHBlbDoKKyoqICAgUmVuYW1lZCB0byBzZXR1cC5oOyBhZGRlZCBzb21lIHVzZWZ1bCBtYWNyb3MgdG8gYWxsb3cgZ2NjIHNvbWUKKyoqICAgb3B0aW1pemF0aW9ucyBpZiBwb3NzaWJsZS4KKyoqIDUvMTAvOTYgR2VlcnQgVXl0dGVyaG9ldmVuOgorKiogICBSZWRlc2lnbiBvZiB0aGUgYm9vdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmU7IG1vdmVkIGJvb3QgaW5mb3JtYXRpb24KKyoqICAgc3RydWN0dXJlIHRvIGJvb3RpbmZvLmgKKyovCisKKyNpZm5kZWYgX002OEtfU0VUVVBfSAorI2RlZmluZSBfTTY4S19TRVRVUF9ICisKKworCisgICAgLyoKKyAgICAgKiAgTGludXgvbTY4ayBBcmNoaXRlY3R1cmVzCisgICAgICovCisKKyNkZWZpbmUgTUFDSF9BTUlHQSAgICAxCisjZGVmaW5lIE1BQ0hfQVRBUkkgICAgMgorI2RlZmluZSBNQUNIX01BQyAgICAgIDMKKyNkZWZpbmUgTUFDSF9BUE9MTE8gICA0CisjZGVmaW5lIE1BQ0hfU1VOMyAgICAgNQorI2RlZmluZSBNQUNIX01WTUUxNDcgIDYKKyNkZWZpbmUgTUFDSF9NVk1FMTZ4ICA3CisjZGVmaW5lIE1BQ0hfQlZNRTYwMDAgOAorI2RlZmluZSBNQUNIX0hQMzAwICAgIDkKKyNkZWZpbmUgTUFDSF9RNDAgICAgIDEwCisjZGVmaW5lIE1BQ0hfU1VOM1ggICAxMQorCisjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIDI1NgorCisjaWZkZWYgX19LRVJORUxfXworCisjZGVmaW5lIENMX1NJWkUgQ09NTUFORF9MSU5FX1NJWkUKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK2V4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfbWFjaHR5cGU7CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWYgIWRlZmluZWQoQ09ORklHX0FNSUdBKQorIyAgZGVmaW5lIE1BQ0hfSVNfQU1JR0EgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BVEFSSSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIFwKKwl8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfQU1JR0EgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9BTUlHQSkKICNlbHNlCi0jaW5jbHVkZSAic2V0dXBfbW0uaCIKKyMgIGRlZmluZSBNQUNIX0FNSUdBX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX0FNSUdBICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9BTUlHQSkKICNlbmRpZgorCisjaWYgIWRlZmluZWQoQ09ORklHX0FUQVJJKQorIyAgZGVmaW5lIE1BQ0hfSVNfQVRBUkkgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIFwKKwl8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfQVRBUkkgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9BVEFSSSkKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9BVEFSSV9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19BVEFSSSAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfQVRBUkkpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NQUMpCisjICBkZWZpbmUgTUFDSF9JU19NQUMgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgXAorCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQorIyAgZGVmaW5lIE1BQ0hfSVNfTUFDIChtNjhrX21hY2h0eXBlID09IE1BQ0hfTUFDKQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX01BQ19PTkxZCisjICBkZWZpbmUgTUFDSF9JU19NQUMgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX01BQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfU1VOMykKKyNkZWZpbmUgTUFDSF9JU19TVU4zICgxKQorI2RlZmluZSBNQUNIX1NVTjNfT05MWSAoMSkKKyNkZWZpbmUgTUFDSF9UWVBFIChNQUNIX1NVTjMpCisjZWxzZQorI2RlZmluZSBNQUNIX0lTX1NVTjMgKDApCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfQVBPTExPKQorIyAgZGVmaW5lIE1BQ0hfSVNfQVBPTExPICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX0FQT0xMTyAobTY4a19tYWNodHlwZSA9PSBNQUNIX0FQT0xMTykKKyNlbHNlCisjICBkZWZpbmUgTUFDSF9BUE9MTE9fT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfQVBPTExPICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9BUE9MTE8pCisjZW5kaWYKKworI2lmICFkZWZpbmVkIChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX01WTUUxNDcgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KQorIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE0NyAobTY4a19tYWNodHlwZSA9PSBNQUNIX01WTUUxNDcpCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfTVZNRTE0N19PTkxZCisjICBkZWZpbmUgTUFDSF9JU19NVk1FMTQ3ICgxKQorIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9NVk1FMTQ3KQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX01WTUUxNngpCisjICBkZWZpbmUgTUFDSF9JU19NVk1FMTZ4ICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX01WTUUxNnggKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9NVk1FMTZ4KQorI2Vsc2UKKyMgIGRlZmluZSBNQUNIX01WTUUxNnhfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE2eCAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfTVZNRTE2eCkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgKENPTkZJR19CVk1FNjAwMCkKKyMgIGRlZmluZSBNQUNIX0lTX0JWTUU2MDAwICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKKwl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX0JWTUU2MDAwIChtNjhrX21hY2h0eXBlID09IE1BQ0hfQlZNRTYwMDApCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfQlZNRTYwMDBfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfQlZNRTYwMDAgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0JWTUU2MDAwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX0hQMzAwKQorIyAgZGVmaW5lIE1BQ0hfSVNfSFAzMDAgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgXAorCXx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApIFwKKwl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX0hQMzAwIChtNjhrX21hY2h0eXBlID09IE1BQ0hfSFAzMDApCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfSFAzMDBfT05MWQorIyAgZGVmaW5lIE1BQ0hfSVNfSFAzMDAgKDEpCisjICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0hQMzAwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX1E0MCkKKyMgIGRlZmluZSBNQUNIX0lTX1E0MCAoMCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCisJfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApIHx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSAgICAgICAgICAgICAgICBcCisJfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCisjICBkZWZpbmUgTUFDSF9JU19RNDAgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9RNDApCisjZWxzZQorIyAgZGVmaW5lIE1BQ0hfUTQwX09OTFkKKyMgIGRlZmluZSBNQUNIX0lTX1E0MCAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfUTQwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZCAoQ09ORklHX1NVTjNYKQorIyAgZGVmaW5lIE1BQ0hfSVNfU1VOM1ggKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAorCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSB8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgICAgICAgICAgICAgICAgXAorCXx8IGRlZmluZWQoQ09ORklHX1E0MCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKKyMgIGRlZmluZSBNQUNIX0lTX1NVTjNYIChtNjhrX21hY2h0eXBlID09IE1BQ0hfU1VOM1gpCisjZWxzZQorIyAgZGVmaW5lIENPTkZJR19TVU4zWF9PTkxZCisjICBkZWZpbmUgTUFDSF9JU19TVU4zWCAoMSkKKyMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfU1VOM1gpCisjZW5kaWYKKworI2lmbmRlZiBNQUNIX1RZUEUKKyMgIGRlZmluZSBNQUNIX1RZUEUgKG02OGtfbWFjaHR5cGUpCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKworCisgICAgLyoKKyAgICAgKiAgQ1BVLCBGUFUgYW5kIE1NVSB0eXBlcworICAgICAqCisgICAgICogIE5vdGU6IHdlIG1heSByZWx5IG9uIHRoZSBmb2xsb3dpbmcgZXF1YWxpdGllczoKKyAgICAgKgorICAgICAqICAgICAgQ1BVXzY4MDIwID09IE1NVV82ODg1MQorICAgICAqICAgICAgQ1BVXzY4MDMwID09IE1NVV82ODAzMAorICAgICAqICAgICAgQ1BVXzY4MDQwID09IEZQVV82ODA0MCA9PSBNTVVfNjgwNDAKKyAgICAgKiAgICAgIENQVV82ODA2MCA9PSBGUFVfNjgwNjAgPT0gTU1VXzY4MDYwCisgICAgICovCisKKyNkZWZpbmUgQ1BVQl82ODAyMCAgICAgMAorI2RlZmluZSBDUFVCXzY4MDMwICAgICAxCisjZGVmaW5lIENQVUJfNjgwNDAgICAgIDIKKyNkZWZpbmUgQ1BVQl82ODA2MCAgICAgMworCisjZGVmaW5lIENQVV82ODAyMCAgICAgICgxPDxDUFVCXzY4MDIwKQorI2RlZmluZSBDUFVfNjgwMzAgICAgICAoMTw8Q1BVQl82ODAzMCkKKyNkZWZpbmUgQ1BVXzY4MDQwICAgICAgKDE8PENQVUJfNjgwNDApCisjZGVmaW5lIENQVV82ODA2MCAgICAgICgxPDxDUFVCXzY4MDYwKQorCisjZGVmaW5lIEZQVUJfNjg4ODEgICAgIDAKKyNkZWZpbmUgRlBVQl82ODg4MiAgICAgMQorI2RlZmluZSBGUFVCXzY4MDQwICAgICAyICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBGUFUgKi8KKyNkZWZpbmUgRlBVQl82ODA2MCAgICAgMyAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgRlBVICovCisjZGVmaW5lIEZQVUJfU1VORlBBICAgIDQgICAgICAgICAgICAgICAgICAgICAgIC8qIFN1bi0zIEZQQSAqLworCisjZGVmaW5lIEZQVV82ODg4MSAgICAgICgxPDxGUFVCXzY4ODgxKQorI2RlZmluZSBGUFVfNjg4ODIgICAgICAoMTw8RlBVQl82ODg4MikKKyNkZWZpbmUgRlBVXzY4MDQwICAgICAgKDE8PEZQVUJfNjgwNDApCisjZGVmaW5lIEZQVV82ODA2MCAgICAgICgxPDxGUFVCXzY4MDYwKQorI2RlZmluZSBGUFVfU1VORlBBICAgICAoMTw8RlBVQl9TVU5GUEEpCisKKyNkZWZpbmUgTU1VQl82ODg1MSAgICAgMAorI2RlZmluZSBNTVVCXzY4MDMwICAgICAxICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBNTVUgKi8KKyNkZWZpbmUgTU1VQl82ODA0MCAgICAgMiAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgTU1VICovCisjZGVmaW5lIE1NVUJfNjgwNjAgICAgIDMgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIE1NVSAqLworI2RlZmluZSBNTVVCX0FQT0xMTyAgICA0ICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXN0b20gQXBvbGxvICovCisjZGVmaW5lIE1NVUJfU1VOMyAgICAgIDUgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1c3RvbSBTdW4tMyAqLworCisjZGVmaW5lIE1NVV82ODg1MSAgICAgICgxPDxNTVVCXzY4ODUxKQorI2RlZmluZSBNTVVfNjgwMzAgICAgICAoMTw8TU1VQl82ODAzMCkKKyNkZWZpbmUgTU1VXzY4MDQwICAgICAgKDE8PE1NVUJfNjgwNDApCisjZGVmaW5lIE1NVV82ODA2MCAgICAgICgxPDxNTVVCXzY4MDYwKQorI2RlZmluZSBNTVVfU1VOMyAgICAgICAoMTw8TU1VQl9TVU4zKQorI2RlZmluZSBNTVVfQVBPTExPICAgICAoMTw8TU1VQl9BUE9MTE8pCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX2NwdXR5cGU7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX2ZwdXR5cGU7CitleHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX21tdXR5cGU7CisjaWZkZWYgQ09ORklHX1ZNRQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdm1lX2JyZHR5cGU7CisjZW5kaWYKKworICAgIC8qCisgICAgICogIG02OGtfaXMwNDBvcjA2MCBpcyAhPSAwIGZvciBhICcwNDAgb3IgaGlnaGVyOworICAgICAqICB1c2VkIG51bWJlcnMgYXJlIDQgZm9yIDY4MDQwIGFuZCA2IGZvciA2ODA2MC4KKyAgICAgKi8KKworZXh0ZXJuIGludCBtNjhrX2lzMDQwb3IwNjA7CisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLworCisjaWYgIWRlZmluZWQoQ09ORklHX002ODAyMCkKKyMgIGRlZmluZSBDUFVfSVNfMDIwICgwKQorIyAgZGVmaW5lIE1NVV9JU184NTEgKDApCisjICBkZWZpbmUgTU1VX0lTX1NVTjMgKDApCisjZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMzApIHx8IGRlZmluZWQoQ09ORklHX002ODA0MCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQorIyAgZGVmaW5lIENQVV9JU18wMjAgKG02OGtfY3B1dHlwZSAmIENQVV82ODAyMCkKKyMgIGRlZmluZSBNTVVfSVNfODUxIChtNjhrX21tdXR5cGUgJiBNTVVfNjg4NTEpCisjICBkZWZpbmUgTU1VX0lTX1NVTjMgKDApCS8qIFN1bjMgbm90IHN1cHBvcnRlZCB3aXRoIG90aGVyIENQVSBlbmFibGVkICovCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwMjBfT05MWQorIyAgZGVmaW5lIENQVV9JU18wMjAgKDEpCisjaWZkZWYgTUFDSF9TVU4zX09OTFkKKyMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMSkKKyMgIGRlZmluZSBNTVVfSVNfODUxICgwKQorI2Vsc2UKKyMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMCkKKyMgIGRlZmluZSBNTVVfSVNfODUxICgxKQorI2VuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NNjgwMzApCisjICBkZWZpbmUgQ1BVX0lTXzAzMCAoMCkKKyMgIGRlZmluZSBNTVVfSVNfMDMwICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNDApIHx8IGRlZmluZWQoQ09ORklHX002ODA2MCkKKyMgIGRlZmluZSBDUFVfSVNfMDMwIChtNjhrX2NwdXR5cGUgJiBDUFVfNjgwMzApCisjICBkZWZpbmUgTU1VX0lTXzAzMCAobTY4a19tbXV0eXBlICYgTU1VXzY4MDMwKQorI2Vsc2UKKyMgIGRlZmluZSBDUFVfTTY4MDMwX09OTFkKKyMgIGRlZmluZSBDUFVfSVNfMDMwICgxKQorIyAgZGVmaW5lIE1NVV9JU18wMzAgKDEpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NNjgwNDApCisjICBkZWZpbmUgQ1BVX0lTXzA0MCAoMCkKKyMgIGRlZmluZSBNTVVfSVNfMDQwICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApIHx8IGRlZmluZWQoQ09ORklHX002ODA2MCkKKyMgIGRlZmluZSBDUFVfSVNfMDQwIChtNjhrX2NwdXR5cGUgJiBDUFVfNjgwNDApCisjICBkZWZpbmUgTU1VX0lTXzA0MCAobTY4a19tbXV0eXBlICYgTU1VXzY4MDQwKQorI2Vsc2UKKyMgIGRlZmluZSBDUFVfTTY4MDQwX09OTFkKKyMgIGRlZmluZSBDUFVfSVNfMDQwICgxKQorIyAgZGVmaW5lIE1NVV9JU18wNDAgKDEpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NNjgwNjApCisjICBkZWZpbmUgQ1BVX0lTXzA2MCAoMCkKKyMgIGRlZmluZSBNTVVfSVNfMDYwICgwKQorI2VsaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApIHx8IGRlZmluZWQoQ09ORklHX002ODA0MCkKKyMgIGRlZmluZSBDUFVfSVNfMDYwIChtNjhrX2NwdXR5cGUgJiBDUFVfNjgwNjApCisjICBkZWZpbmUgTU1VX0lTXzA2MCAobTY4a19tbXV0eXBlICYgTU1VXzY4MDYwKQorI2Vsc2UKKyMgIGRlZmluZSBDUFVfTTY4MDYwX09OTFkKKyMgIGRlZmluZSBDUFVfSVNfMDYwICgxKQorIyAgZGVmaW5lIE1NVV9JU18wNjAgKDEpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NNjgwMjApICYmICFkZWZpbmVkKENPTkZJR19NNjgwMzApCisjICBkZWZpbmUgQ1BVX0lTXzAyMF9PUl8wMzAgKDApCisjZWxzZQorIyAgZGVmaW5lIENQVV9NNjgwMjBfT1JfTTY4MDMwCisjICBpZiBkZWZpbmVkKENPTkZJR19NNjgwNDApIHx8IGRlZmluZWQoQ09ORklHX002ODA2MCkKKyMgICAgZGVmaW5lIENQVV9JU18wMjBfT1JfMDMwICghbTY4a19pczA0MG9yMDYwKQorIyAgZWxzZQorIyAgICBkZWZpbmUgQ1BVX002ODAyMF9PUl9NNjgwMzBfT05MWQorIyAgICBkZWZpbmUgQ1BVX0lTXzAyMF9PUl8wMzAgKDEpCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDQwKSAmJiAhZGVmaW5lZChDT05GSUdfTTY4MDYwKQorIyAgZGVmaW5lIENQVV9JU18wNDBfT1JfMDYwICgwKQorI2Vsc2UKKyMgIGRlZmluZSBDUFVfTTY4MDQwX09SX002ODA2MAorIyAgaWYgZGVmaW5lZChDT05GSUdfTTY4MDIwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwMzApCisjICAgIGRlZmluZSBDUFVfSVNfMDQwX09SXzA2MCAobTY4a19pczA0MG9yMDYwKQorIyAgZWxzZQorIyAgICBkZWZpbmUgQ1BVX002ODA0MF9PUl9NNjgwNjBfT05MWQorIyAgICBkZWZpbmUgQ1BVX0lTXzA0MF9PUl8wNjAgKDEpCisjICBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgQ1BVX1RZUEUgKG02OGtfY3B1dHlwZSkKKworI2lmZGVmIENPTkZJR19NNjhLRlBVX0VNVQorIyAgaWZkZWYgQ09ORklHX002OEtGUFVfRU1VX09OTFkKKyMgICAgZGVmaW5lIEZQVV9JU19FTVUgKDEpCisjICBlbHNlCisjICAgIGRlZmluZSBGUFVfSVNfRU1VICghbTY4a19mcHV0eXBlKQorIyAgZW5kaWYKKyNlbHNlCisjICBkZWZpbmUgRlBVX0lTX0VNVSAoMCkKKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqICBNaXNjZWxsYW5lb3VzCisgICAgICovCisKKyNkZWZpbmUgTlVNX01FTUlORk8JNAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RydWN0IG1lbV9pbmZvIHsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mIG1lbW9yeSBjaHVuayAqLworCXVuc2lnbmVkIGxvbmcgc2l6ZTsJCS8qIGxlbmd0aCBvZiBtZW1vcnkgY2h1bmsgKGluIGJ5dGVzKSAqLworfTsKKworZXh0ZXJuIGludCBtNjhrX251bV9tZW1vcnk7CQkvKiAjIG9mIG1lbW9yeSBibG9ja3MgZm91bmQgKGFuZCB1c2VkKSAqLworZXh0ZXJuIGludCBtNjhrX3JlYWxudW1fbWVtb3J5OwkJLyogcmVhbCAjIG9mIG1lbW9yeSBibG9ja3MgZm91bmQgKi8KK2V4dGVybiBzdHJ1Y3QgbWVtX2luZm8gbTY4a19tZW1vcnlbTlVNX01FTUlORk9dOy8qIG1lbW9yeSBkZXNjcmlwdGlvbiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTTY4S19TRVRVUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2V0dXBfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZXR1cF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZGZiMzk1Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZXR1cF9tbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzc2ICswLDAgQEAKLS8qCi0qKiBhc20vc2V0dXAuaCAtLSBEZWZpbml0aW9uIG9mIHRoZSBMaW51eC9tNjhrIHNldHVwIGluZm9ybWF0aW9uCi0qKgotKiogQ29weXJpZ2h0IDE5OTIgYnkgR3JlZyBIYXJwCi0qKgotKiogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSoqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0qKiBmb3IgbW9yZSBkZXRhaWxzLgotKioKLSoqIENyZWF0ZWQgMDkvMjkvOTIgYnkgR3JlZyBIYXJwCi0qKgotKiogNS8yLzk0IFJvbWFuIEhvZGVrOgotKiogICBBZGRlZCBiaV9hdGFyaSBwYXJ0IG9mIHRoZSBtYWNoaW5lIGRlcGVuZGVudCB1bmlvbiBiaV91bjsgZm9yIG5vdyBpdAotKiogICBjb250YWlucyBqdXN0IGEgbW9kZWwgZmllbGQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBUVCBhbmQgRmFsY29uLgotKiogMjYvNy85NiBSb21hbiBaaXBwZWw6Ci0qKiAgIFJlbmFtZWQgdG8gc2V0dXAuaDsgYWRkZWQgc29tZSB1c2VmdWwgbWFjcm9zIHRvIGFsbG93IGdjYyBzb21lCi0qKiAgIG9wdGltaXphdGlvbnMgaWYgcG9zc2libGUuCi0qKiA1LzEwLzk2IEdlZXJ0IFV5dHRlcmhvZXZlbjoKLSoqICAgUmVkZXNpZ24gb2YgdGhlIGJvb3QgaW5mb3JtYXRpb24gc3RydWN0dXJlOyBtb3ZlZCBib290IGluZm9ybWF0aW9uCi0qKiAgIHN0cnVjdHVyZSB0byBib290aW5mby5oCi0qLwotCi0jaWZuZGVmIF9NNjhLX1NFVFVQX0gKLSNkZWZpbmUgX002OEtfU0VUVVBfSAotCi0KLQotICAgIC8qCi0gICAgICogIExpbnV4L202OGsgQXJjaGl0ZWN0dXJlcwotICAgICAqLwotCi0jZGVmaW5lIE1BQ0hfQU1JR0EgICAgMQotI2RlZmluZSBNQUNIX0FUQVJJICAgIDIKLSNkZWZpbmUgTUFDSF9NQUMgICAgICAzCi0jZGVmaW5lIE1BQ0hfQVBPTExPICAgNAotI2RlZmluZSBNQUNIX1NVTjMgICAgIDUKLSNkZWZpbmUgTUFDSF9NVk1FMTQ3ICA2Ci0jZGVmaW5lIE1BQ0hfTVZNRTE2eCAgNwotI2RlZmluZSBNQUNIX0JWTUU2MDAwIDgKLSNkZWZpbmUgTUFDSF9IUDMwMCAgICA5Ci0jZGVmaW5lIE1BQ0hfUTQwICAgICAxMAotI2RlZmluZSBNQUNIX1NVTjNYICAgMTEKLQotI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAyNTYKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2RlZmluZSBDTF9TSVpFIENPTU1BTkRfTElORV9TSVpFCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdW5zaWduZWQgbG9uZyBtNjhrX21hY2h0eXBlOwotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KLQotI2lmICFkZWZpbmVkKENPTkZJR19BTUlHQSkKLSMgIGRlZmluZSBNQUNIX0lTX0FNSUdBICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVRBUkkpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKLSMgIGRlZmluZSBNQUNIX0lTX0FNSUdBIChtNjhrX21hY2h0eXBlID09IE1BQ0hfQU1JR0EpCi0jZWxzZQotIyAgZGVmaW5lIE1BQ0hfQU1JR0FfT05MWQotIyAgZGVmaW5lIE1BQ0hfSVNfQU1JR0EgKDEpCi0jICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0FNSUdBKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfQVRBUkkpCi0jICBkZWZpbmUgTUFDSF9JU19BVEFSSSAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgXAotCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19IUDMwMCkgfHwgZGVmaW5lZChDT05GSUdfUTQwKSAgICAgICAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCi0jICBkZWZpbmUgTUFDSF9JU19BVEFSSSAobTY4a19tYWNodHlwZSA9PSBNQUNIX0FUQVJJKQotI2Vsc2UKLSMgIGRlZmluZSBNQUNIX0FUQVJJX09OTFkKLSMgIGRlZmluZSBNQUNIX0lTX0FUQVJJICgxKQotIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9BVEFSSSkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQ09ORklHX01BQykKLSMgIGRlZmluZSBNQUNIX0lTX01BQyAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNDcpCi0jICBkZWZpbmUgTUFDSF9JU19NQUMgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9NQUMpCi0jZWxzZQotIyAgZGVmaW5lIE1BQ0hfTUFDX09OTFkKLSMgIGRlZmluZSBNQUNIX0lTX01BQyAoMSkKLSMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfTUFDKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TVU4zKQotI2RlZmluZSBNQUNIX0lTX1NVTjMgKDEpCi0jZGVmaW5lIE1BQ0hfU1VOM19PTkxZICgxKQotI2RlZmluZSBNQUNIX1RZUEUgKE1BQ0hfU1VOMykKLSNlbHNlCi0jZGVmaW5lIE1BQ0hfSVNfU1VOMyAoMCkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQgKENPTkZJR19BUE9MTE8pCi0jICBkZWZpbmUgTUFDSF9JU19BUE9MTE8gKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAotCXx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpIHx8IGRlZmluZWQoQ09ORklHX0JWTUU2MDAwKSAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQotIyAgZGVmaW5lIE1BQ0hfSVNfQVBPTExPIChtNjhrX21hY2h0eXBlID09IE1BQ0hfQVBPTExPKQotI2Vsc2UKLSMgIGRlZmluZSBNQUNIX0FQT0xMT19PTkxZCi0jICBkZWZpbmUgTUFDSF9JU19BUE9MTE8gKDEpCi0jICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX0FQT0xMTykKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQgKENPTkZJR19NVk1FMTQ3KQotIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE0NyAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfSFAzMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgICAgICAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfU1VOM1gpIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpCi0jICBkZWZpbmUgTUFDSF9JU19NVk1FMTQ3IChtNjhrX21hY2h0eXBlID09IE1BQ0hfTVZNRTE0NykKLSNlbHNlCi0jICBkZWZpbmUgTUFDSF9NVk1FMTQ3X09OTFkKLSMgIGRlZmluZSBNQUNIX0lTX01WTUUxNDcgKDEpCi0jICBkZWZpbmUgTUFDSF9UWVBFIChNQUNIX01WTUUxNDcpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIChDT05GSUdfTVZNRTE2eCkKLSMgIGRlZmluZSBNQUNIX0lTX01WTUUxNnggKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAotCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQotIyAgZGVmaW5lIE1BQ0hfSVNfTVZNRTE2eCAobTY4a19tYWNodHlwZSA9PSBNQUNIX01WTUUxNngpCi0jZWxzZQotIyAgZGVmaW5lIE1BQ0hfTVZNRTE2eF9PTkxZCi0jICBkZWZpbmUgTUFDSF9JU19NVk1FMTZ4ICgxKQotIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9NVk1FMTZ4KQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZCAoQ09ORklHX0JWTUU2MDAwKQotIyAgZGVmaW5lIE1BQ0hfSVNfQlZNRTYwMDAgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BTUlHQSkgfHwgZGVmaW5lZChDT05GSUdfTUFDKSB8fCBkZWZpbmVkKENPTkZJR19BVEFSSSkgXAotCXx8IGRlZmluZWQoQ09ORklHX0FQT0xMTykgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE2eCkgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSB8fCBkZWZpbmVkKENPTkZJR19RNDApICAgICAgICAgICAgICAgICAgICAgXAotCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQotIyAgZGVmaW5lIE1BQ0hfSVNfQlZNRTYwMDAgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9CVk1FNjAwMCkKLSNlbHNlCi0jICBkZWZpbmUgTUFDSF9CVk1FNjAwMF9PTkxZCi0jICBkZWZpbmUgTUFDSF9JU19CVk1FNjAwMCAoMSkKLSMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfQlZNRTYwMDApCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIChDT05GSUdfSFAzMDApCi0jICBkZWZpbmUgTUFDSF9JU19IUDMwMCAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSBcCi0JfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApIHx8IGRlZmluZWQoQ09ORklHX1E0MCkgXAotCXx8IGRlZmluZWQoQ09ORklHX1NVTjNYKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQotIyAgZGVmaW5lIE1BQ0hfSVNfSFAzMDAgKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9IUDMwMCkKLSNlbHNlCi0jICBkZWZpbmUgTUFDSF9IUDMwMF9PTkxZCi0jICBkZWZpbmUgTUFDSF9JU19IUDMwMCAoMSkKLSMgIGRlZmluZSBNQUNIX1RZUEUgKE1BQ0hfSFAzMDApCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIChDT05GSUdfUTQwKQotIyAgZGVmaW5lIE1BQ0hfSVNfUTQwICgwKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQU1JR0EpIHx8IGRlZmluZWQoQ09ORklHX01BQykgfHwgZGVmaW5lZChDT05GSUdfQVRBUkkpIFwKLQl8fCBkZWZpbmVkKENPTkZJR19BUE9MTE8pIHx8IGRlZmluZWQoQ09ORklHX01WTUUxNngpICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19CVk1FNjAwMCkgfHwgZGVmaW5lZChDT05GSUdfSFAzMDApICAgICAgICAgICAgICAgIFwKLQl8fCBkZWZpbmVkKENPTkZJR19TVU4zWCkgfHwgZGVmaW5lZChDT05GSUdfTVZNRTE0NykKLSMgIGRlZmluZSBNQUNIX0lTX1E0MCAobTY4a19tYWNodHlwZSA9PSBNQUNIX1E0MCkKLSNlbHNlCi0jICBkZWZpbmUgTUFDSF9RNDBfT05MWQotIyAgZGVmaW5lIE1BQ0hfSVNfUTQwICgxKQotIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9RNDApCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkIChDT05GSUdfU1VOM1gpCi0jICBkZWZpbmUgTUFDSF9JU19TVU4zWCAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FNSUdBKSB8fCBkZWZpbmVkKENPTkZJR19NQUMpIHx8IGRlZmluZWQoQ09ORklHX0FUQVJJKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfQVBPTExPKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTZ4KSAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfQlZNRTYwMDApIHx8IGRlZmluZWQoQ09ORklHX0hQMzAwKSAgICAgICAgICAgICAgICBcCi0JfHwgZGVmaW5lZChDT05GSUdfUTQwKSB8fCBkZWZpbmVkKENPTkZJR19NVk1FMTQ3KQotIyAgZGVmaW5lIE1BQ0hfSVNfU1VOM1ggKG02OGtfbWFjaHR5cGUgPT0gTUFDSF9TVU4zWCkKLSNlbHNlCi0jICBkZWZpbmUgQ09ORklHX1NVTjNYX09OTFkKLSMgIGRlZmluZSBNQUNIX0lTX1NVTjNYICgxKQotIyAgZGVmaW5lIE1BQ0hfVFlQRSAoTUFDSF9TVU4zWCkKLSNlbmRpZgotCi0jaWZuZGVmIE1BQ0hfVFlQRQotIyAgZGVmaW5lIE1BQ0hfVFlQRSAobTY4a19tYWNodHlwZSkKLSNlbmRpZgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0KLSAgICAvKgotICAgICAqICBDUFUsIEZQVSBhbmQgTU1VIHR5cGVzCi0gICAgICoKLSAgICAgKiAgTm90ZTogd2UgbWF5IHJlbHkgb24gdGhlIGZvbGxvd2luZyBlcXVhbGl0aWVzOgotICAgICAqCi0gICAgICogICAgICBDUFVfNjgwMjAgPT0gTU1VXzY4ODUxCi0gICAgICogICAgICBDUFVfNjgwMzAgPT0gTU1VXzY4MDMwCi0gICAgICogICAgICBDUFVfNjgwNDAgPT0gRlBVXzY4MDQwID09IE1NVV82ODA0MAotICAgICAqICAgICAgQ1BVXzY4MDYwID09IEZQVV82ODA2MCA9PSBNTVVfNjgwNjAKLSAgICAgKi8KLQotI2RlZmluZSBDUFVCXzY4MDIwICAgICAwCi0jZGVmaW5lIENQVUJfNjgwMzAgICAgIDEKLSNkZWZpbmUgQ1BVQl82ODA0MCAgICAgMgotI2RlZmluZSBDUFVCXzY4MDYwICAgICAzCi0KLSNkZWZpbmUgQ1BVXzY4MDIwICAgICAgKDE8PENQVUJfNjgwMjApCi0jZGVmaW5lIENQVV82ODAzMCAgICAgICgxPDxDUFVCXzY4MDMwKQotI2RlZmluZSBDUFVfNjgwNDAgICAgICAoMTw8Q1BVQl82ODA0MCkKLSNkZWZpbmUgQ1BVXzY4MDYwICAgICAgKDE8PENQVUJfNjgwNjApCi0KLSNkZWZpbmUgRlBVQl82ODg4MSAgICAgMAotI2RlZmluZSBGUFVCXzY4ODgyICAgICAxCi0jZGVmaW5lIEZQVUJfNjgwNDAgICAgIDIgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIEZQVSAqLwotI2RlZmluZSBGUFVCXzY4MDYwICAgICAzICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBGUFUgKi8KLSNkZWZpbmUgRlBVQl9TVU5GUEEgICAgNCAgICAgICAgICAgICAgICAgICAgICAgLyogU3VuLTMgRlBBICovCi0KLSNkZWZpbmUgRlBVXzY4ODgxICAgICAgKDE8PEZQVUJfNjg4ODEpCi0jZGVmaW5lIEZQVV82ODg4MiAgICAgICgxPDxGUFVCXzY4ODgyKQotI2RlZmluZSBGUFVfNjgwNDAgICAgICAoMTw8RlBVQl82ODA0MCkKLSNkZWZpbmUgRlBVXzY4MDYwICAgICAgKDE8PEZQVUJfNjgwNjApCi0jZGVmaW5lIEZQVV9TVU5GUEEgICAgICgxPDxGUFVCX1NVTkZQQSkKLQotI2RlZmluZSBNTVVCXzY4ODUxICAgICAwCi0jZGVmaW5lIE1NVUJfNjgwMzAgICAgIDEgICAgICAgICAgICAgICAgICAgICAgIC8qIEludGVybmFsIE1NVSAqLwotI2RlZmluZSBNTVVCXzY4MDQwICAgICAyICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcm5hbCBNTVUgKi8KLSNkZWZpbmUgTU1VQl82ODA2MCAgICAgMyAgICAgICAgICAgICAgICAgICAgICAgLyogSW50ZXJuYWwgTU1VICovCi0jZGVmaW5lIE1NVUJfQVBPTExPICAgIDQgICAgICAgICAgICAgICAgICAgICAgIC8qIEN1c3RvbSBBcG9sbG8gKi8KLSNkZWZpbmUgTU1VQl9TVU4zICAgICAgNSAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VzdG9tIFN1bi0zICovCi0KLSNkZWZpbmUgTU1VXzY4ODUxICAgICAgKDE8PE1NVUJfNjg4NTEpCi0jZGVmaW5lIE1NVV82ODAzMCAgICAgICgxPDxNTVVCXzY4MDMwKQotI2RlZmluZSBNTVVfNjgwNDAgICAgICAoMTw8TU1VQl82ODA0MCkKLSNkZWZpbmUgTU1VXzY4MDYwICAgICAgKDE8PE1NVUJfNjgwNjApCi0jZGVmaW5lIE1NVV9TVU4zICAgICAgICgxPDxNTVVCX1NVTjMpCi0jZGVmaW5lIE1NVV9BUE9MTE8gICAgICgxPDxNTVVCX0FQT0xMTykKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfY3B1dHlwZTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfZnB1dHlwZTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIG02OGtfbW11dHlwZTsKLSNpZmRlZiBDT05GSUdfVk1FCi1leHRlcm4gdW5zaWduZWQgbG9uZyB2bWVfYnJkdHlwZTsKLSNlbmRpZgotCi0gICAgLyoKLSAgICAgKiAgbTY4a19pczA0MG9yMDYwIGlzICE9IDAgZm9yIGEgJzA0MCBvciBoaWdoZXI7Ci0gICAgICogIHVzZWQgbnVtYmVycyBhcmUgNCBmb3IgNjgwNDAgYW5kIDYgZm9yIDY4MDYwLgotICAgICAqLwotCi1leHRlcm4gaW50IG02OGtfaXMwNDBvcjA2MDsKLSNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfTTY4MDIwKQotIyAgZGVmaW5lIENQVV9JU18wMjAgKDApCi0jICBkZWZpbmUgTU1VX0lTXzg1MSAoMCkKLSMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMCkKLSNlbGlmIGRlZmluZWQoQ09ORklHX002ODAzMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDQwKSB8fCBkZWZpbmVkKENPTkZJR19NNjgwNjApCi0jICBkZWZpbmUgQ1BVX0lTXzAyMCAobTY4a19jcHV0eXBlICYgQ1BVXzY4MDIwKQotIyAgZGVmaW5lIE1NVV9JU184NTEgKG02OGtfbW11dHlwZSAmIE1NVV82ODg1MSkKLSMgIGRlZmluZSBNTVVfSVNfU1VOMyAoMCkJLyogU3VuMyBub3Qgc3VwcG9ydGVkIHdpdGggb3RoZXIgQ1BVIGVuYWJsZWQgKi8KLSNlbHNlCi0jICBkZWZpbmUgQ1BVX002ODAyMF9PTkxZCi0jICBkZWZpbmUgQ1BVX0lTXzAyMCAoMSkKLSNpZmRlZiBNQUNIX1NVTjNfT05MWQotIyAgZGVmaW5lIE1NVV9JU19TVU4zICgxKQotIyAgZGVmaW5lIE1NVV9JU184NTEgKDApCi0jZWxzZQotIyAgZGVmaW5lIE1NVV9JU19TVU4zICgwKQotIyAgZGVmaW5lIE1NVV9JU184NTEgKDEpCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQ09ORklHX002ODAzMCkKLSMgIGRlZmluZSBDUFVfSVNfMDMwICgwKQotIyAgZGVmaW5lIE1NVV9JU18wMzAgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODA0MCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQotIyAgZGVmaW5lIENQVV9JU18wMzAgKG02OGtfY3B1dHlwZSAmIENQVV82ODAzMCkKLSMgIGRlZmluZSBNTVVfSVNfMDMwIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwMzApCi0jZWxzZQotIyAgZGVmaW5lIENQVV9NNjgwMzBfT05MWQotIyAgZGVmaW5lIENQVV9JU18wMzAgKDEpCi0jICBkZWZpbmUgTU1VX0lTXzAzMCAoMSkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQ09ORklHX002ODA0MCkKLSMgIGRlZmluZSBDUFVfSVNfMDQwICgwKQotIyAgZGVmaW5lIE1NVV9JU18wNDAgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQotIyAgZGVmaW5lIENQVV9JU18wNDAgKG02OGtfY3B1dHlwZSAmIENQVV82ODA0MCkKLSMgIGRlZmluZSBNTVVfSVNfMDQwIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwNDApCi0jZWxzZQotIyAgZGVmaW5lIENQVV9NNjgwNDBfT05MWQotIyAgZGVmaW5lIENQVV9JU18wNDAgKDEpCi0jICBkZWZpbmUgTU1VX0lTXzA0MCAoMSkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQ09ORklHX002ODA2MCkKLSMgIGRlZmluZSBDUFVfSVNfMDYwICgwKQotIyAgZGVmaW5lIE1NVV9JU18wNjAgKDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDQwKQotIyAgZGVmaW5lIENQVV9JU18wNjAgKG02OGtfY3B1dHlwZSAmIENQVV82ODA2MCkKLSMgIGRlZmluZSBNTVVfSVNfMDYwIChtNjhrX21tdXR5cGUgJiBNTVVfNjgwNjApCi0jZWxzZQotIyAgZGVmaW5lIENQVV9NNjgwNjBfT05MWQotIyAgZGVmaW5lIENQVV9JU18wNjAgKDEpCi0jICBkZWZpbmUgTU1VX0lTXzA2MCAoMSkKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoQ09ORklHX002ODAyMCkgJiYgIWRlZmluZWQoQ09ORklHX002ODAzMCkKLSMgIGRlZmluZSBDUFVfSVNfMDIwX09SXzAzMCAoMCkKLSNlbHNlCi0jICBkZWZpbmUgQ1BVX002ODAyMF9PUl9NNjgwMzAKLSMgIGlmIGRlZmluZWQoQ09ORklHX002ODA0MCkgfHwgZGVmaW5lZChDT05GSUdfTTY4MDYwKQotIyAgICBkZWZpbmUgQ1BVX0lTXzAyMF9PUl8wMzAgKCFtNjhrX2lzMDQwb3IwNjApCi0jICBlbHNlCi0jICAgIGRlZmluZSBDUFVfTTY4MDIwX09SX002ODAzMF9PTkxZCi0jICAgIGRlZmluZSBDUFVfSVNfMDIwX09SXzAzMCAoMSkKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENPTkZJR19NNjgwNDApICYmICFkZWZpbmVkKENPTkZJR19NNjgwNjApCi0jICBkZWZpbmUgQ1BVX0lTXzA0MF9PUl8wNjAgKDApCi0jZWxzZQotIyAgZGVmaW5lIENQVV9NNjgwNDBfT1JfTTY4MDYwCi0jICBpZiBkZWZpbmVkKENPTkZJR19NNjgwMjApIHx8IGRlZmluZWQoQ09ORklHX002ODAzMCkKLSMgICAgZGVmaW5lIENQVV9JU18wNDBfT1JfMDYwIChtNjhrX2lzMDQwb3IwNjApCi0jICBlbHNlCi0jICAgIGRlZmluZSBDUFVfTTY4MDQwX09SX002ODA2MF9PTkxZCi0jICAgIGRlZmluZSBDUFVfSVNfMDQwX09SXzA2MCAoMSkKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBDUFVfVFlQRSAobTY4a19jcHV0eXBlKQotCi0jaWZkZWYgQ09ORklHX002OEtGUFVfRU1VCi0jICBpZmRlZiBDT05GSUdfTTY4S0ZQVV9FTVVfT05MWQotIyAgICBkZWZpbmUgRlBVX0lTX0VNVSAoMSkKLSMgIGVsc2UKLSMgICAgZGVmaW5lIEZQVV9JU19FTVUgKCFtNjhrX2ZwdXR5cGUpCi0jICBlbmRpZgotI2Vsc2UKLSMgIGRlZmluZSBGUFVfSVNfRU1VICgwKQotI2VuZGlmCi0KLQotICAgIC8qCi0gICAgICogIE1pc2NlbGxhbmVvdXMKLSAgICAgKi8KLQotI2RlZmluZSBOVU1fTUVNSU5GTwk0Ci0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1zdHJ1Y3QgbWVtX2luZm8gewotCXVuc2lnbmVkIGxvbmcgYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgbWVtb3J5IGNodW5rICovCi0JdW5zaWduZWQgbG9uZyBzaXplOwkJLyogbGVuZ3RoIG9mIG1lbW9yeSBjaHVuayAoaW4gYnl0ZXMpICovCi19OwotCi1leHRlcm4gaW50IG02OGtfbnVtX21lbW9yeTsJCS8qICMgb2YgbWVtb3J5IGJsb2NrcyBmb3VuZCAoYW5kIHVzZWQpICovCi1leHRlcm4gaW50IG02OGtfcmVhbG51bV9tZW1vcnk7CQkvKiByZWFsICMgb2YgbWVtb3J5IGJsb2NrcyBmb3VuZCAqLwotZXh0ZXJuIHN0cnVjdCBtZW1faW5mbyBtNjhrX21lbW9yeVtOVU1fTUVNSU5GT107LyogbWVtb3J5IGRlc2NyaXB0aW9uICovCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9NNjhLX1NFVFVQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zZXR1cF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NldHVwX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1ZDI4NmMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NldHVwX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL3NldHVwX21tLmg+Ci0KLS8qIFdlIGhhdmUgYSBiaWdnZXIgY29tbWFuZCBsaW5lIGJ1ZmZlci4gKi8KLSN1bmRlZiBDT01NQU5EX0xJTkVfU0laRQotCi0jZW5kaWYgIC8qICBfX0tFUk5FTF9fICAqLwotCi0jZGVmaW5lIENPTU1BTkRfTElORV9TSVpFCTUxMgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKaW5kZXggYmZmNmQ0MC4uNTIzZGIyYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCkBAIC0xLDUgKzEsMjQgQEAKKyNpZm5kZWYgX0FTTV9NNjhrX1NJR0NPTlRFWFRfSAorI2RlZmluZSBfQVNNX002OGtfU0lHQ09OVEVYVF9ICisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nICBzY19tYXNrOwkJLyogb2xkIHNpZ21hc2sgKi8KKwl1bnNpZ25lZCBsb25nICBzY191c3A7CQkvKiBvbGQgdXNlciBzdGFjayBwb2ludGVyICovCisJdW5zaWduZWQgbG9uZyAgc2NfZDA7CisJdW5zaWduZWQgbG9uZyAgc2NfZDE7CisJdW5zaWduZWQgbG9uZyAgc2NfYTA7CisJdW5zaWduZWQgbG9uZyAgc2NfYTE7CiAjaWZkZWYgX191Q2xpbnV4X18KLSNpbmNsdWRlICJzaWdjb250ZXh0X25vLmgiCi0jZWxzZQotI2luY2x1ZGUgInNpZ2NvbnRleHRfbW0uaCIKKwl1bnNpZ25lZCBsb25nICBzY19hNTsKKyNlbmRpZgorCXVuc2lnbmVkIHNob3J0IHNjX3NyOworCXVuc2lnbmVkIGxvbmcgIHNjX3BjOworCXVuc2lnbmVkIHNob3J0IHNjX2Zvcm1hdHZlYzsKKyNpZm5kZWYgX191Q2xpbnV4X18KKwl1bnNpZ25lZCBsb25nICBzY19mcHJlZ3NbMiozXTsgIC8qIHJvb20gZm9yIHR3byBmcCByZWdpc3RlcnMgKi8KKwl1bnNpZ25lZCBsb25nICBzY19mcGNudGxbM107CisJdW5zaWduZWQgY2hhciAgc2NfZnBzdGF0ZVsyMTZdOworI2VuZGlmCit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0X21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dF9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGZiZTM0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdjb250ZXh0X21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0jaWZuZGVmIF9BU01fTTY4a19TSUdDT05URVhUX0gKLSNkZWZpbmUgX0FTTV9NNjhrX1NJR0NPTlRFWFRfSAotCi1zdHJ1Y3Qgc2lnY29udGV4dCB7Ci0JdW5zaWduZWQgbG9uZyAgc2NfbWFzazsJCS8qIG9sZCBzaWdtYXNrICovCi0JdW5zaWduZWQgbG9uZyAgc2NfdXNwOwkJLyogb2xkIHVzZXIgc3RhY2sgcG9pbnRlciAqLwotCXVuc2lnbmVkIGxvbmcgIHNjX2QwOwotCXVuc2lnbmVkIGxvbmcgIHNjX2QxOwotCXVuc2lnbmVkIGxvbmcgIHNjX2EwOwotCXVuc2lnbmVkIGxvbmcgIHNjX2ExOwotCXVuc2lnbmVkIHNob3J0IHNjX3NyOwotCXVuc2lnbmVkIGxvbmcgIHNjX3BjOwotCXVuc2lnbmVkIHNob3J0IHNjX2Zvcm1hdHZlYzsKLQl1bnNpZ25lZCBsb25nICBzY19mcHJlZ3NbMiozXTsgIC8qIHJvb20gZm9yIHR3byBmcCByZWdpc3RlcnMgKi8KLQl1bnNpZ25lZCBsb25nICBzY19mcGNudGxbM107Ci0JdW5zaWduZWQgY2hhciAgc2NfZnBzdGF0ZVsyMTZdOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dF9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHRfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZjMjkzZi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnY29udGV4dF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotI2lmbmRlZiBfQVNNX002OEtOT01NVV9TSUdDT05URVhUX0gKLSNkZWZpbmUgX0FTTV9NNjhLTk9NTVVfU0lHQ09OVEVYVF9ICi0KLXN0cnVjdCBzaWdjb250ZXh0IHsKLQl1bnNpZ25lZCBsb25nICBzY19tYXNrOyAJLyogb2xkIHNpZ21hc2sgKi8KLQl1bnNpZ25lZCBsb25nICBzY191c3A7CQkvKiBvbGQgdXNlciBzdGFjayBwb2ludGVyICovCi0JdW5zaWduZWQgbG9uZyAgc2NfZDA7Ci0JdW5zaWduZWQgbG9uZyAgc2NfZDE7Ci0JdW5zaWduZWQgbG9uZyAgc2NfYTA7Ci0JdW5zaWduZWQgbG9uZyAgc2NfYTE7Ci0JdW5zaWduZWQgbG9uZyAgc2NfYTU7Ci0JdW5zaWduZWQgc2hvcnQgc2Nfc3I7Ci0JdW5zaWduZWQgbG9uZyAgc2NfcGM7Ci0JdW5zaWduZWQgc2hvcnQgc2NfZm9ybWF0dmVjOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ2luZm8uaAppbmRleCA2MTIxOWQ3Li5jYTdkZGU4IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mby5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvLmgKQEAgLTEsNSArMSw5NyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAic2lnaW5mb19uby5oIgorI2lmbmRlZiBfTTY4S19TSUdJTkZPX0gKKyNkZWZpbmUgX002OEtfU0lHSU5GT19ICisKKyNpZm5kZWYgX191Q2xpbnV4X18KKyNkZWZpbmUgSEFWRV9BUkNIX1NJR0lORk9fVAorI2RlZmluZSBIQVZFX0FSQ0hfQ09QWV9TSUdJTkZPCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KKworI2lmbmRlZiBfX3VDbGludXhfXworCit0eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsKKwlpbnQgc2lfc2lnbm87CisJaW50IHNpX2Vycm5vOworCWludCBzaV9jb2RlOworCisJdW5pb24geworCQlpbnQgX3BhZFtTSV9QQURfU0laRV07CisKKwkJLyoga2lsbCgpICovCisJCXN0cnVjdCB7CisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisJCQlfX2tlcm5lbF91aWQzMl90IF91aWQzMjsgLyogc2VuZGVyJ3MgdWlkICovCisJCX0gX2tpbGw7CisKKwkJLyogUE9TSVguMWIgdGltZXJzICovCisJCXN0cnVjdCB7CisJCQl0aW1lcl90IF90aWQ7CQkvKiB0aW1lciBpZCAqLworCQkJaW50IF9vdmVycnVuOwkJLyogb3ZlcnJ1biBjb3VudCAqLworCQkJY2hhciBfcGFkW3NpemVvZiggX19BUkNIX1NJX1VJRF9UKSAtIHNpemVvZihpbnQpXTsKKwkJCXNpZ3ZhbF90IF9zaWd2YWw7CS8qIHNhbWUgYXMgYmVsb3cgKi8KKwkJCWludCBfc3lzX3ByaXZhdGU7ICAgICAgIC8qIG5vdCB0byBiZSBwYXNzZWQgdG8gdXNlciAqLworCQl9IF90aW1lcjsKKworCQkvKiBQT1NJWC4xYiBzaWduYWxzICovCisJCXN0cnVjdCB7CisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisJCQlzaWd2YWxfdCBfc2lndmFsOworCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLworCQl9IF9ydDsKKworCQkvKiBTSUdDSExEICovCisJCXN0cnVjdCB7CisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLworCQkJX19rZXJuZWxfdWlkX3QgX3VpZDsJLyogYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KKwkJCWludCBfc3RhdHVzOwkJLyogZXhpdCBjb2RlICovCisJCQljbG9ja190IF91dGltZTsKKwkJCWNsb2NrX3QgX3N0aW1lOworCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLworCQl9IF9zaWdjaGxkOworCisJCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KKwkJc3RydWN0IHsKKwkJCXZvaWQgKl9hZGRyOyAvKiBmYXVsdGluZyBpbnNuL21lbW9yeSByZWYuICovCisJCX0gX3NpZ2ZhdWx0OworCisJCS8qIFNJR1BPTEwgKi8KKwkJc3RydWN0IHsKKwkJCWludCBfYmFuZDsJLyogUE9MTF9JTiwgUE9MTF9PVVQsIFBPTExfTVNHICovCisJCQlpbnQgX2ZkOworCQl9IF9zaWdwb2xsOworCX0gX3NpZmllbGRzOworfSBzaWdpbmZvX3Q7CisKKyNkZWZpbmUgVUlEMTZfU0lHSU5GT19DT01QQVRfTkVFREVECisKKy8qCisgKiBIb3cgdGhlc2UgZmllbGRzIGFyZSB0byBiZSBhY2Nlc3NlZC4KKyAqLworI3VuZGVmIHNpX3VpZAorI2lmZGVmIF9fS0VSTkVMX18KKyNkZWZpbmUgc2lfdWlkCQlfc2lmaWVsZHMuX2tpbGwuX3VpZDMyCisjZGVmaW5lIHNpX3VpZDE2CV9zaWZpZWxkcy5fa2lsbC5fdWlkCiAjZWxzZQotI2luY2x1ZGUgInNpZ2luZm9fbW0uaCIKKyNkZWZpbmUgc2lfdWlkCQlfc2lmaWVsZHMuX2tpbGwuX3VpZAorI2VuZGlmCisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlfc2lnaW5mbyhzdHJ1Y3Qgc2lnaW5mbyAqdG8sIHN0cnVjdCBzaWdpbmZvICpmcm9tKQoreworCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkKKwkJbWVtY3B5KHRvLCBmcm9tLCBzaXplb2YoKnRvKSk7CisJZWxzZQorCQkvKiBfc2lnY2hsZCBpcyBjdXJyZW50bHkgdGhlIGxhcmdlc3Qga25vdyB1bmlvbiBtZW1iZXIgKi8KKwkJbWVtY3B5KHRvLCBmcm9tLCAzKnNpemVvZihpbnQpICsgc2l6ZW9mKGZyb20tPl9zaWZpZWxkcy5fc2lnY2hsZCkpOworfQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICFfX3VDbGludXhfXyAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mb19tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWE4ZDZkLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1NJR0lORk9fSAotI2RlZmluZSBfTTY4S19TSUdJTkZPX0gKLQotI2RlZmluZSBIQVZFX0FSQ0hfU0lHSU5GT19UCi0jZGVmaW5lIEhBVkVfQVJDSF9DT1BZX1NJR0lORk8KLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KLQotdHlwZWRlZiBzdHJ1Y3Qgc2lnaW5mbyB7Ci0JaW50IHNpX3NpZ25vOwotCWludCBzaV9lcnJubzsKLQlpbnQgc2lfY29kZTsKLQotCXVuaW9uIHsKLQkJaW50IF9wYWRbU0lfUEFEX1NJWkVdOwotCi0JCS8qIGtpbGwoKSAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCi0JCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotCQkJX19rZXJuZWxfdWlkMzJfdCBfdWlkMzI7IC8qIHNlbmRlcidzIHVpZCAqLwotCQl9IF9raWxsOwotCi0JCS8qIFBPU0lYLjFiIHRpbWVycyAqLwotCQlzdHJ1Y3QgewotCQkJdGltZXJfdCBfdGlkOwkJLyogdGltZXIgaWQgKi8KLQkJCWludCBfb3ZlcnJ1bjsJCS8qIG92ZXJydW4gY291bnQgKi8KLQkJCWNoYXIgX3BhZFtzaXplb2YoIF9fQVJDSF9TSV9VSURfVCkgLSBzaXplb2YoaW50KV07Ci0JCQlzaWd2YWxfdCBfc2lndmFsOwkvKiBzYW1lIGFzIGJlbG93ICovCi0JCQlpbnQgX3N5c19wcml2YXRlOyAgICAgICAvKiBub3QgdG8gYmUgcGFzc2VkIHRvIHVzZXIgKi8KLQkJfSBfdGltZXI7Ci0KLQkJLyogUE9TSVguMWIgc2lnbmFscyAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCi0JCQlfX2tlcm5lbF91aWRfdCBfdWlkOwkvKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLwotCQkJc2lndmFsX3QgX3NpZ3ZhbDsKLQkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KLQkJfSBfcnQ7Ci0KLQkJLyogU0lHQ0hMRCAqLwotCQlzdHJ1Y3QgewotCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogd2hpY2ggY2hpbGQgKi8KLQkJCV9fa2VybmVsX3VpZF90IF91aWQ7CS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0JCQlpbnQgX3N0YXR1czsJCS8qIGV4aXQgY29kZSAqLwotCQkJY2xvY2tfdCBfdXRpbWU7Ci0JCQljbG9ja190IF9zdGltZTsKLQkJCV9fa2VybmVsX3VpZDMyX3QgX3VpZDMyOyAvKiBzZW5kZXIncyB1aWQgKi8KLQkJfSBfc2lnY2hsZDsKLQotCQkvKiBTSUdJTEwsIFNJR0ZQRSwgU0lHU0VHViwgU0lHQlVTICovCi0JCXN0cnVjdCB7Ci0JCQl2b2lkICpfYWRkcjsgLyogZmF1bHRpbmcgaW5zbi9tZW1vcnkgcmVmLiAqLwotCQl9IF9zaWdmYXVsdDsKLQotCQkvKiBTSUdQT0xMICovCi0JCXN0cnVjdCB7Ci0JCQlpbnQgX2JhbmQ7CS8qIFBPTExfSU4sIFBPTExfT1VULCBQT0xMX01TRyAqLwotCQkJaW50IF9mZDsKLQkJfSBfc2lncG9sbDsKLQl9IF9zaWZpZWxkczsKLX0gc2lnaW5mb190OwotCi0jZGVmaW5lIFVJRDE2X1NJR0lORk9fQ09NUEFUX05FRURFRAotCi0vKgotICogSG93IHRoZXNlIGZpZWxkcyBhcmUgdG8gYmUgYWNjZXNzZWQuCi0gKi8KLSN1bmRlZiBzaV91aWQKLSNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIHNpX3VpZAkJX3NpZmllbGRzLl9raWxsLl91aWQzMgotI2RlZmluZSBzaV91aWQxNglfc2lmaWVsZHMuX2tpbGwuX3VpZAotI2Vsc2UKLSNkZWZpbmUgc2lfdWlkCQlfc2lmaWVsZHMuX2tpbGwuX3VpZAotI2VuZGlmCi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQotc3RhdGljIGlubGluZSB2b2lkIGNvcHlfc2lnaW5mbyhzdHJ1Y3Qgc2lnaW5mbyAqdG8sIHN0cnVjdCBzaWdpbmZvICpmcm9tKQotewotCWlmIChmcm9tLT5zaV9jb2RlIDwgMCkKLQkJbWVtY3B5KHRvLCBmcm9tLCBzaXplb2YoKnRvKSk7Ci0JZWxzZQotCQkvKiBfc2lnY2hsZCBpcyBjdXJyZW50bHkgdGhlIGxhcmdlc3Qga25vdyB1bmlvbiBtZW1iZXIgKi8KLQkJbWVtY3B5KHRvLCBmcm9tLCAzKnNpemVvZihpbnQpICsgc2l6ZW9mKGZyb20tPl9zaWZpZWxkcy5fc2lnY2hsZCkpOwotfQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnaW5mb19uby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMThlNWY0Li4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWdpbmZvX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9TSUdJTkZPX0gKLSNkZWZpbmUgX002OEtOT01NVV9TSUdJTkZPX0gKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnbmFsLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnbmFsLmgKaW5kZXggM2MxOTk4OC4uMDg3ODhmZCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ25hbC5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWduYWwuaApAQCAtMSw1ICsxLDIxMyBAQAotI2lmZGVmIF9fdUNsaW51eF9fCi0jaW5jbHVkZSAic2lnbmFsX25vLmgiCisjaWZuZGVmIF9NNjhLX1NJR05BTF9ICisjZGVmaW5lIF9NNjhLX1NJR05BTF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLworc3RydWN0IHNpZ2luZm87CisKKyNpZmRlZiBfX0tFUk5FTF9fCisvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQorICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KKworI2RlZmluZSBfTlNJRwkJNjQKKyNkZWZpbmUgX05TSUdfQlBXCTMyCisjZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKK30gc2lnc2V0X3Q7CisKICNlbHNlCi0jaW5jbHVkZSAic2lnbmFsX21tLmgiCi0jZW5kaWYKKy8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLworCisjZGVmaW5lIE5TSUcJCTMyCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2lnc2V0X3Q7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNkZWZpbmUgU0lHSFVQCQkgMQorI2RlZmluZSBTSUdJTlQJCSAyCisjZGVmaW5lIFNJR1FVSVQJCSAzCisjZGVmaW5lIFNJR0lMTAkJIDQKKyNkZWZpbmUgU0lHVFJBUAkJIDUKKyNkZWZpbmUgU0lHQUJSVAkJIDYKKyNkZWZpbmUgU0lHSU9UCQkgNgorI2RlZmluZSBTSUdCVVMJCSA3CisjZGVmaW5lIFNJR0ZQRQkJIDgKKyNkZWZpbmUgU0lHS0lMTAkJIDkKKyNkZWZpbmUgU0lHVVNSMQkJMTAKKyNkZWZpbmUgU0lHU0VHVgkJMTEKKyNkZWZpbmUgU0lHVVNSMgkJMTIKKyNkZWZpbmUgU0lHUElQRQkJMTMKKyNkZWZpbmUgU0lHQUxSTQkJMTQKKyNkZWZpbmUgU0lHVEVSTQkJMTUKKyNkZWZpbmUgU0lHU1RLRkxUCTE2CisjZGVmaW5lIFNJR0NITEQJCTE3CisjZGVmaW5lIFNJR0NPTlQJCTE4CisjZGVmaW5lIFNJR1NUT1AJCTE5CisjZGVmaW5lIFNJR1RTVFAJCTIwCisjZGVmaW5lIFNJR1RUSU4JCTIxCisjZGVmaW5lIFNJR1RUT1UJCTIyCisjZGVmaW5lIFNJR1VSRwkJMjMKKyNkZWZpbmUgU0lHWENQVQkJMjQKKyNkZWZpbmUgU0lHWEZTWgkJMjUKKyNkZWZpbmUgU0lHVlRBTFJNCTI2CisjZGVmaW5lIFNJR1BST0YJCTI3CisjZGVmaW5lIFNJR1dJTkNICTI4CisjZGVmaW5lIFNJR0lPCQkyOQorI2RlZmluZSBTSUdQT0xMCQlTSUdJTworLyoKKyNkZWZpbmUgU0lHTE9TVAkJMjkKKyovCisjZGVmaW5lIFNJR1BXUgkJMzAKKyNkZWZpbmUgU0lHU1lTCQkzMQorI2RlZmluZQlTSUdVTlVTRUQJMzEKKworLyogVGhlc2Ugc2hvdWxkIG5vdCBiZSBjb25zaWRlcmVkIGNvbnN0YW50cyBmcm9tIHVzZXJsYW5kLiAgKi8KKyNkZWZpbmUgU0lHUlRNSU4JMzIKKyNkZWZpbmUgU0lHUlRNQVgJX05TSUcKKworLyoKKyAqIFNBX0ZMQUdTIHZhbHVlczoKKyAqCisgKiBTQV9PTlNUQUNLIGluZGljYXRlcyB0aGF0IGEgcmVnaXN0ZXJlZCBzdGFja190IHdpbGwgYmUgdXNlZC4KKyAqIFNBX1JFU1RBUlQgZmxhZyB0byBnZXQgcmVzdGFydGluZyBzaWduYWxzICh3aGljaCB3ZXJlIHRoZSBkZWZhdWx0IGxvbmcgYWdvKQorICogU0FfTk9DTERTVE9QIGZsYWcgdG8gdHVybiBvZmYgU0lHQ0hMRCB3aGVuIGNoaWxkcmVuIHN0b3AuCisgKiBTQV9SRVNFVEhBTkQgY2xlYXJzIHRoZSBoYW5kbGVyIHdoZW4gdGhlIHNpZ25hbCBpcyBkZWxpdmVyZWQuCisgKiBTQV9OT0NMRFdBSVQgZmxhZyBvbiBTSUdDSExEIHRvIGluaGliaXQgem9tYmllcy4KKyAqIFNBX05PREVGRVIgcHJldmVudHMgdGhlIGN1cnJlbnQgc2lnbmFsIGZyb20gYmVpbmcgbWFza2VkIGluIHRoZSBoYW5kbGVyLgorICoKKyAqIFNBX09ORVNIT1QgYW5kIFNBX05PTUFTSyBhcmUgdGhlIGhpc3RvcmljYWwgTGludXggbmFtZXMgZm9yIHRoZSBTaW5nbGUKKyAqIFVuaXggbmFtZXMgUkVTRVRIQU5EIGFuZCBOT0RFRkVSIHJlc3BlY3RpdmVseS4KKyAqLworI2RlZmluZSBTQV9OT0NMRFNUT1AJMHgwMDAwMDAwMQorI2RlZmluZSBTQV9OT0NMRFdBSVQJMHgwMDAwMDAwMgorI2RlZmluZSBTQV9TSUdJTkZPCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0FfT05TVEFDSwkweDA4MDAwMDAwCisjZGVmaW5lIFNBX1JFU1RBUlQJMHgxMDAwMDAwMAorI2RlZmluZSBTQV9OT0RFRkVSCTB4NDAwMDAwMDAKKyNkZWZpbmUgU0FfUkVTRVRIQU5ECTB4ODAwMDAwMDAKKworI2RlZmluZSBTQV9OT01BU0sJU0FfTk9ERUZFUgorI2RlZmluZSBTQV9PTkVTSE9UCVNBX1JFU0VUSEFORAorCisvKgorICogc2lnYWx0c3RhY2sgY29udHJvbHMKKyAqLworI2RlZmluZSBTU19PTlNUQUNLCTEKKyNkZWZpbmUgU1NfRElTQUJMRQkyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1oJMjA0OAorI2RlZmluZSBTSUdTVEtTWgk4MTkyCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KKworI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBvbGRfc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCW9sZF9zaWdzZXRfdCBzYV9tYXNrOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7Cit9OworCitzdHJ1Y3Qgc2lnYWN0aW9uIHsKKwlfX3NpZ2hhbmRsZXJfdCBzYV9oYW5kbGVyOworCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CisJX19zaWdyZXN0b3JlX3Qgc2FfcmVzdG9yZXI7CisJc2lnc2V0X3Qgc2FfbWFzazsJCS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLworfTsKKworc3RydWN0IGtfc2lnYWN0aW9uIHsKKwlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOworfTsKKyNlbHNlCisvKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KKworc3RydWN0IHNpZ2FjdGlvbiB7CisJdW5pb24geworCSAgX19zaWdoYW5kbGVyX3QgX3NhX2hhbmRsZXI7CisJICB2b2lkICgqX3NhX3NpZ2FjdGlvbikoaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCB2b2lkICopOworCX0gX3U7CisJc2lnc2V0X3Qgc2FfbWFzazsKKwl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOworCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7Cit9OworCisjZGVmaW5lIHNhX2hhbmRsZXIJX3UuX3NhX2hhbmRsZXIKKyNkZWZpbmUgc2Ffc2lnYWN0aW9uCV91Ll9zYV9zaWdhY3Rpb24KKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwordHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgeworCXZvaWQgX191c2VyICpzc19zcDsKKwlpbnQgc3NfZmxhZ3M7CisJc2l6ZV90IHNzX3NpemU7Cit9IHN0YWNrX3Q7CisKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKworI2lmbmRlZiBfX3VDbGludXhfXworI2RlZmluZSBfX0hBVkVfQVJDSF9TSUdfQklUT1BTCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaWdhZGRzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCit7CisJYXNtICgiYmZzZXQgJTB7JTEsIzF9IgorCQk6ICIrb2QiICgqc2V0KQorCQk6ICJpZCIgKChfc2lnIC0gMSkgXiAzMSkKKwkJOiAiY2MiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNpZ2RlbHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKK3sKKwlhc20gKCJiZmNsciAlMHslMSwjMX0iCisJCTogIitvZCIgKCpzZXQpCisJCTogImlkIiAoKF9zaWcgLSAxKSBeIDMxKQorCQk6ICJjYyIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2NvbnN0X3NpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQoreworCXVuc2lnbmVkIGxvbmcgc2lnID0gX3NpZyAtIDE7CisJcmV0dXJuIDEgJiAoc2V0LT5zaWdbc2lnIC8gX05TSUdfQlBXXSA+PiAoc2lnICUgX05TSUdfQlBXKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZ2VuX3NpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQoreworCWludCByZXQ7CisJYXNtICgiYmZleHR1ICUxeyUyLCMxfSwlMCIKKwkJOiAiPWQiIChyZXQpCisJCTogIm9kIiAoKnNldCksICJpZCIgKChfc2lnLTEpIF4gMzEpCisJCTogImNjIik7CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBzaWdpc21lbWJlcihzZXQsc2lnKQkJCVwKKwkoX19idWlsdGluX2NvbnN0YW50X3Aoc2lnKSA/CQlcCisJIF9fY29uc3Rfc2lnaXNtZW1iZXIoc2V0LHNpZykgOgkJXAorCSBfX2dlbl9zaWdpc21lbWJlcihzZXQsc2lnKSkKKworc3RhdGljIGlubGluZSBpbnQgc2lnZmluZGlud29yZCh1bnNpZ25lZCBsb25nIHdvcmQpCit7CisJYXNtICgiYmZmZm8gJTF7IzAsIzB9LCUwIgorCQk6ICI9ZCIgKHdvcmQpCisJCTogImQiICh3b3JkICYgLXdvcmQpCisJCTogImNjIik7CisJcmV0dXJuIHdvcmQgXiAzMTsKK30KKworc3RydWN0IHB0X3JlZ3M7CitleHRlcm4gdm9pZCBwdHJhY2Vfc2lnbmFsX2RlbGl2ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKmNvb2tpZSk7CisKKyNlbHNlCisKKyN1bmRlZiBfX0hBVkVfQVJDSF9TSUdfQklUT1BTCisjZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fdUNsaW51eF9fICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCisjZW5kaWYgLyogX002OEtfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWduYWxfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zaWduYWxfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2RiOGE4MS4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnbmFsX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotI2lmbmRlZiBfTTY4S19TSUdOQUxfSAotI2RlZmluZSBfTTY4S19TSUdOQUxfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotLyogQXZvaWQgdG9vIG1hbnkgaGVhZGVyIG9yZGVyaW5nIHByb2JsZW1zLiAgKi8KLXN0cnVjdCBzaWdpbmZvOwotCi0jaWZkZWYgX19LRVJORUxfXwotLyogTW9zdCB0aGluZ3Mgc2hvdWxkIGJlIGNsZWFuIGVub3VnaCB0byByZWRlZmluZSB0aGlzIGF0IHdpbGwsIGlmIGNhcmUKLSAgIGlzIHRha2VuIHRvIG1ha2UgbGliYyBtYXRjaC4gICovCi0KLSNkZWZpbmUgX05TSUcJCTY0Ci0jZGVmaW5lIF9OU0lHX0JQVwkzMgotI2RlZmluZSBfTlNJR19XT1JEUwkoX05TSUcgLyBfTlNJR19CUFcpCi0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBvbGRfc2lnc2V0X3Q7CQkvKiBhdCBsZWFzdCAzMiBiaXRzICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIHNpZ1tfTlNJR19XT1JEU107Ci19IHNpZ3NldF90OwotCi0jZWxzZQotLyogSGVyZSB3ZSBtdXN0IGNhdGVyIHRvIGxpYmNzIHRoYXQgcG9rZSBhYm91dCBpbiBrZXJuZWwgaGVhZGVycy4gICovCi0KLSNkZWZpbmUgTlNJRwkJMzIKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBzaWdzZXRfdDsKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2RlZmluZSBTSUdIVVAJCSAxCi0jZGVmaW5lIFNJR0lOVAkJIDIKLSNkZWZpbmUgU0lHUVVJVAkJIDMKLSNkZWZpbmUgU0lHSUxMCQkgNAotI2RlZmluZSBTSUdUUkFQCQkgNQotI2RlZmluZSBTSUdBQlJUCQkgNgotI2RlZmluZSBTSUdJT1QJCSA2Ci0jZGVmaW5lIFNJR0JVUwkJIDcKLSNkZWZpbmUgU0lHRlBFCQkgOAotI2RlZmluZSBTSUdLSUxMCQkgOQotI2RlZmluZSBTSUdVU1IxCQkxMAotI2RlZmluZSBTSUdTRUdWCQkxMQotI2RlZmluZSBTSUdVU1IyCQkxMgotI2RlZmluZSBTSUdQSVBFCQkxMwotI2RlZmluZSBTSUdBTFJNCQkxNAotI2RlZmluZSBTSUdURVJNCQkxNQotI2RlZmluZSBTSUdTVEtGTFQJMTYKLSNkZWZpbmUgU0lHQ0hMRAkJMTcKLSNkZWZpbmUgU0lHQ09OVAkJMTgKLSNkZWZpbmUgU0lHU1RPUAkJMTkKLSNkZWZpbmUgU0lHVFNUUAkJMjAKLSNkZWZpbmUgU0lHVFRJTgkJMjEKLSNkZWZpbmUgU0lHVFRPVQkJMjIKLSNkZWZpbmUgU0lHVVJHCQkyMwotI2RlZmluZSBTSUdYQ1BVCQkyNAotI2RlZmluZSBTSUdYRlNaCQkyNQotI2RlZmluZSBTSUdWVEFMUk0JMjYKLSNkZWZpbmUgU0lHUFJPRgkJMjcKLSNkZWZpbmUgU0lHV0lOQ0gJMjgKLSNkZWZpbmUgU0lHSU8JCTI5Ci0jZGVmaW5lIFNJR1BPTEwJCVNJR0lPCi0vKgotI2RlZmluZSBTSUdMT1NUCQkyOQotKi8KLSNkZWZpbmUgU0lHUFdSCQkzMAotI2RlZmluZSBTSUdTWVMJCTMxCi0jZGVmaW5lCVNJR1VOVVNFRAkzMQotCi0vKiBUaGVzZSBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgY29uc3RhbnRzIGZyb20gdXNlcmxhbmQuICAqLwotI2RlZmluZSBTSUdSVE1JTgkzMgotI2RlZmluZSBTSUdSVE1BWAlfTlNJRwotCi0vKgotICogU0FfRkxBR1MgdmFsdWVzOgotICoKLSAqIFNBX09OU1RBQ0sgaW5kaWNhdGVzIHRoYXQgYSByZWdpc3RlcmVkIHN0YWNrX3Qgd2lsbCBiZSB1c2VkLgotICogU0FfUkVTVEFSVCBmbGFnIHRvIGdldCByZXN0YXJ0aW5nIHNpZ25hbHMgKHdoaWNoIHdlcmUgdGhlIGRlZmF1bHQgbG9uZyBhZ28pCi0gKiBTQV9OT0NMRFNUT1AgZmxhZyB0byB0dXJuIG9mZiBTSUdDSExEIHdoZW4gY2hpbGRyZW4gc3RvcC4KLSAqIFNBX1JFU0VUSEFORCBjbGVhcnMgdGhlIGhhbmRsZXIgd2hlbiB0aGUgc2lnbmFsIGlzIGRlbGl2ZXJlZC4KLSAqIFNBX05PQ0xEV0FJVCBmbGFnIG9uIFNJR0NITEQgdG8gaW5oaWJpdCB6b21iaWVzLgotICogU0FfTk9ERUZFUiBwcmV2ZW50cyB0aGUgY3VycmVudCBzaWduYWwgZnJvbSBiZWluZyBtYXNrZWQgaW4gdGhlIGhhbmRsZXIuCi0gKgotICogU0FfT05FU0hPVCBhbmQgU0FfTk9NQVNLIGFyZSB0aGUgaGlzdG9yaWNhbCBMaW51eCBuYW1lcyBmb3IgdGhlIFNpbmdsZQotICogVW5peCBuYW1lcyBSRVNFVEhBTkQgYW5kIE5PREVGRVIgcmVzcGVjdGl2ZWx5LgotICovCi0jZGVmaW5lIFNBX05PQ0xEU1RPUAkweDAwMDAwMDAxCi0jZGVmaW5lIFNBX05PQ0xEV0FJVAkweDAwMDAwMDAyCi0jZGVmaW5lIFNBX1NJR0lORk8JMHgwMDAwMDAwNAotI2RlZmluZSBTQV9PTlNUQUNLCTB4MDgwMDAwMDAKLSNkZWZpbmUgU0FfUkVTVEFSVAkweDEwMDAwMDAwCi0jZGVmaW5lIFNBX05PREVGRVIJMHg0MDAwMDAwMAotI2RlZmluZSBTQV9SRVNFVEhBTkQJMHg4MDAwMDAwMAotCi0jZGVmaW5lIFNBX05PTUFTSwlTQV9OT0RFRkVSCi0jZGVmaW5lIFNBX09ORVNIT1QJU0FfUkVTRVRIQU5ECi0KLS8qCi0gKiBzaWdhbHRzdGFjayBjb250cm9scwotICovCi0jZGVmaW5lIFNTX09OU1RBQ0sJMQotI2RlZmluZSBTU19ESVNBQkxFCTIKLQotI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4Ci0jZGVmaW5lIFNJR1NUS1NaCTgxOTIKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgotCi0jaWZkZWYgX19LRVJORUxfXwotc3RydWN0IG9sZF9zaWdhY3Rpb24gewotCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7Ci0Jb2xkX3NpZ3NldF90IHNhX21hc2s7Ci0JdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQlfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKLX07Ci0KLXN0cnVjdCBzaWdhY3Rpb24gewotCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7Ci0JdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQlfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKLQlzaWdzZXRfdCBzYV9tYXNrOwkJLyogbWFzayBsYXN0IGZvciBleHRlbnNpYmlsaXR5ICovCi19OwotCi1zdHJ1Y3Qga19zaWdhY3Rpb24gewotCXN0cnVjdCBzaWdhY3Rpb24gc2E7Ci19OwotI2Vsc2UKLS8qIEhlcmUgd2UgbXVzdCBjYXRlciB0byBsaWJjcyB0aGF0IHBva2UgYWJvdXQgaW4ga2VybmVsIGhlYWRlcnMuICAqLwotCi1zdHJ1Y3Qgc2lnYWN0aW9uIHsKLQl1bmlvbiB7Ci0JICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKLQkgIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7Ci0JfSBfdTsKLQlzaWdzZXRfdCBzYV9tYXNrOwotCXVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Ci0Jdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKLX07Ci0KLSNkZWZpbmUgc2FfaGFuZGxlcglfdS5fc2FfaGFuZGxlcgotI2RlZmluZSBzYV9zaWdhY3Rpb24JX3UuX3NhX3NpZ2FjdGlvbgotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi10eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7Ci0Jdm9pZCBfX3VzZXIgKnNzX3NwOwotCWludCBzc19mbGFnczsKLQlzaXplX3Qgc3Nfc2l6ZTsKLX0gc3RhY2tfdDsKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxhc20vc2lnY29udGV4dC5oPgotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1NJR19CSVRPUFMKLQotc3RhdGljIGlubGluZSB2b2lkIHNpZ2FkZHNldChzaWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKLXsKLQlhc20gKCJiZnNldCAlMHslMSwjMX0iCi0JCTogIitvZCIgKCpzZXQpCi0JCTogImlkIiAoKF9zaWcgLSAxKSBeIDMxKQotCQk6ICJjYyIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2lnZGVsc2V0KHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQotewotCWFzbSAoImJmY2xyICUweyUxLCMxfSIKLQkJOiAiK29kIiAoKnNldCkKLQkJOiAiaWQiICgoX3NpZyAtIDEpIF4gMzEpCi0JCTogImNjIik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9fY29uc3Rfc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCi17Ci0JdW5zaWduZWQgbG9uZyBzaWcgPSBfc2lnIC0gMTsKLQlyZXR1cm4gMSAmIChzZXQtPnNpZ1tzaWcgLyBfTlNJR19CUFddID4+IChzaWcgJSBfTlNJR19CUFcpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgX19nZW5fc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCi17Ci0JaW50IHJldDsKLQlhc20gKCJiZmV4dHUgJTF7JTIsIzF9LCUwIgotCQk6ICI9ZCIgKHJldCkKLQkJOiAib2QiICgqc2V0KSwgImlkIiAoKF9zaWctMSkgXiAzMSkKLQkJOiAiY2MiKTsKLQlyZXR1cm4gcmV0OwotfQotCi0jZGVmaW5lIHNpZ2lzbWVtYmVyKHNldCxzaWcpCQkJXAotCShfX2J1aWx0aW5fY29uc3RhbnRfcChzaWcpID8JCVwKLQkgX19jb25zdF9zaWdpc21lbWJlcihzZXQsc2lnKSA6CQlcCi0JIF9fZ2VuX3NpZ2lzbWVtYmVyKHNldCxzaWcpKQotCi1zdGF0aWMgaW5saW5lIGludCBzaWdmaW5kaW53b3JkKHVuc2lnbmVkIGxvbmcgd29yZCkKLXsKLQlhc20gKCJiZmZmbyAlMXsjMCwjMH0sJTAiCi0JCTogIj1kIiAod29yZCkKLQkJOiAiZCIgKHdvcmQgJiAtd29yZCkKLQkJOiAiY2MiKTsKLQlyZXR1cm4gd29yZCBeIDMxOwotfQotCi1zdHJ1Y3QgcHRfcmVnczsKLWV4dGVybiB2b2lkIHB0cmFjZV9zaWduYWxfZGVsaXZlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqY29va2llKTsKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9NNjhLX1NJR05BTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnbmFsX25vLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc2lnbmFsX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxNmMwOGIuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NpZ25hbF9uby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9TSUdOQUxfSAotI2RlZmluZSBfTTY4S05PTU1VX1NJR05BTF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0vKiBBdm9pZCB0b28gbWFueSBoZWFkZXIgb3JkZXJpbmcgcHJvYmxlbXMuICAqLwotc3RydWN0IHNpZ2luZm87Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0vKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQotICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KLQotI2RlZmluZSBfTlNJRwkJNjQKLSNkZWZpbmUgX05TSUdfQlBXCTMyCi0jZGVmaW5lIF9OU0lHX1dPUkRTCShfTlNJRyAvIF9OU0lHX0JQVykKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIG9sZF9zaWdzZXRfdDsJCS8qIGF0IGxlYXN0IDMyIGJpdHMgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKLX0gc2lnc2V0X3Q7Ci0KLSNlbHNlCi0vKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KLQotI2RlZmluZSBOU0lHCQkzMgotdHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OwotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCi0jZGVmaW5lIFNJR0hVUAkJIDEKLSNkZWZpbmUgU0lHSU5UCQkgMgotI2RlZmluZSBTSUdRVUlUCQkgMwotI2RlZmluZSBTSUdJTEwJCSA0Ci0jZGVmaW5lIFNJR1RSQVAJCSA1Ci0jZGVmaW5lIFNJR0FCUlQJCSA2Ci0jZGVmaW5lIFNJR0lPVAkJIDYKLSNkZWZpbmUgU0lHQlVTCQkgNwotI2RlZmluZSBTSUdGUEUJCSA4Ci0jZGVmaW5lIFNJR0tJTEwJCSA5Ci0jZGVmaW5lIFNJR1VTUjEJCTEwCi0jZGVmaW5lIFNJR1NFR1YJCTExCi0jZGVmaW5lIFNJR1VTUjIJCTEyCi0jZGVmaW5lIFNJR1BJUEUJCTEzCi0jZGVmaW5lIFNJR0FMUk0JCTE0Ci0jZGVmaW5lIFNJR1RFUk0JCTE1Ci0jZGVmaW5lIFNJR1NUS0ZMVAkxNgotI2RlZmluZSBTSUdDSExECQkxNwotI2RlZmluZSBTSUdDT05UCQkxOAotI2RlZmluZSBTSUdTVE9QCQkxOQotI2RlZmluZSBTSUdUU1RQCQkyMAotI2RlZmluZSBTSUdUVElOCQkyMQotI2RlZmluZSBTSUdUVE9VCQkyMgotI2RlZmluZSBTSUdVUkcJCTIzCi0jZGVmaW5lIFNJR1hDUFUJCTI0Ci0jZGVmaW5lIFNJR1hGU1oJCTI1Ci0jZGVmaW5lIFNJR1ZUQUxSTQkyNgotI2RlZmluZSBTSUdQUk9GCQkyNwotI2RlZmluZSBTSUdXSU5DSAkyOAotI2RlZmluZSBTSUdJTwkJMjkKLSNkZWZpbmUgU0lHUE9MTAkJU0lHSU8KLS8qCi0jZGVmaW5lIFNJR0xPU1QJCTI5Ci0qLwotI2RlZmluZSBTSUdQV1IJCTMwCi0jZGVmaW5lIFNJR1NZUwkJMzEKLSNkZWZpbmUJU0lHVU5VU0VECTMxCi0KLS8qIFRoZXNlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBjb25zdGFudHMgZnJvbSB1c2VybGFuZC4gICovCi0jZGVmaW5lIFNJR1JUTUlOCTMyCi0jZGVmaW5lIFNJR1JUTUFYCV9OU0lHCi0KLS8qCi0gKiBTQV9GTEFHUyB2YWx1ZXM6Ci0gKgotICogU0FfT05TVEFDSyBpbmRpY2F0ZXMgdGhhdCBhIHJlZ2lzdGVyZWQgc3RhY2tfdCB3aWxsIGJlIHVzZWQuCi0gKiBTQV9SRVNUQVJUIGZsYWcgdG8gZ2V0IHJlc3RhcnRpbmcgc2lnbmFscyAod2hpY2ggd2VyZSB0aGUgZGVmYXVsdCBsb25nIGFnbykKLSAqIFNBX05PQ0xEU1RPUCBmbGFnIHRvIHR1cm4gb2ZmIFNJR0NITEQgd2hlbiBjaGlsZHJlbiBzdG9wLgotICogU0FfUkVTRVRIQU5EIGNsZWFycyB0aGUgaGFuZGxlciB3aGVuIHRoZSBzaWduYWwgaXMgZGVsaXZlcmVkLgotICogU0FfTk9DTERXQUlUIGZsYWcgb24gU0lHQ0hMRCB0byBpbmhpYml0IHpvbWJpZXMuCi0gKiBTQV9OT0RFRkVSIHByZXZlbnRzIHRoZSBjdXJyZW50IHNpZ25hbCBmcm9tIGJlaW5nIG1hc2tlZCBpbiB0aGUgaGFuZGxlci4KLSAqCi0gKiBTQV9PTkVTSE9UIGFuZCBTQV9OT01BU0sgYXJlIHRoZSBoaXN0b3JpY2FsIExpbnV4IG5hbWVzIGZvciB0aGUgU2luZ2xlCi0gKiBVbml4IG5hbWVzIFJFU0VUSEFORCBhbmQgTk9ERUZFUiByZXNwZWN0aXZlbHkuCi0gKi8KLSNkZWZpbmUgU0FfTk9DTERTVE9QCTB4MDAwMDAwMDEKLSNkZWZpbmUgU0FfTk9DTERXQUlUCTB4MDAwMDAwMDIKLSNkZWZpbmUgU0FfU0lHSU5GTwkweDAwMDAwMDA0Ci0jZGVmaW5lIFNBX09OU1RBQ0sJMHgwODAwMDAwMAotI2RlZmluZSBTQV9SRVNUQVJUCTB4MTAwMDAwMDAKLSNkZWZpbmUgU0FfTk9ERUZFUgkweDQwMDAwMDAwCi0jZGVmaW5lIFNBX1JFU0VUSEFORAkweDgwMDAwMDAwCi0KLSNkZWZpbmUgU0FfTk9NQVNLCVNBX05PREVGRVIKLSNkZWZpbmUgU0FfT05FU0hPVAlTQV9SRVNFVEhBTkQKLQotLyogCi0gKiBzaWdhbHRzdGFjayBjb250cm9scwotICovCi0jZGVmaW5lIFNTX09OU1RBQ0sJMQotI2RlZmluZSBTU19ESVNBQkxFCTIKLQotI2RlZmluZSBNSU5TSUdTVEtTWgkyMDQ4Ci0jZGVmaW5lIFNJR1NUS1NaCTgxOTIKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgotCi0jaWZkZWYgX19LRVJORUxfXwotc3RydWN0IG9sZF9zaWdhY3Rpb24gewotCV9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7Ci0Jb2xkX3NpZ3NldF90IHNhX21hc2s7Ci0JdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLQl2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOwotfTsKLQotc3RydWN0IHNpZ2FjdGlvbiB7Ci0JX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKLQl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwotCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7Ci0Jc2lnc2V0X3Qgc2FfbWFzazsJCS8qIG1hc2sgbGFzdCBmb3IgZXh0ZW5zaWJpbGl0eSAqLwotfTsKLQotc3RydWN0IGtfc2lnYWN0aW9uIHsKLQlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwotfTsKLSNlbHNlCi0vKiBIZXJlIHdlIG11c3QgY2F0ZXIgdG8gbGliY3MgdGhhdCBwb2tlIGFib3V0IGluIGtlcm5lbCBoZWFkZXJzLiAgKi8KLQotc3RydWN0IHNpZ2FjdGlvbiB7Ci0JdW5pb24gewotCSAgX19zaWdoYW5kbGVyX3QgX3NhX2hhbmRsZXI7Ci0JICB2b2lkICgqX3NhX3NpZ2FjdGlvbikoaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCB2b2lkICopOwotCX0gX3U7Ci0Jc2lnc2V0X3Qgc2FfbWFzazsKLQl1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwotCXZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7Ci19OwotCi0jZGVmaW5lIHNhX2hhbmRsZXIJX3UuX3NhX2hhbmRsZXIKLSNkZWZpbmUgc2Ffc2lnYWN0aW9uCV91Ll9zYV9zaWdhY3Rpb24KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sgewotCXZvaWQgKnNzX3NwOwotCWludCBzc19mbGFnczsKLQlzaXplX3Qgc3Nfc2l6ZTsKLX0gc3RhY2tfdDsKLQotI2lmZGVmIF9fS0VSTkVMX18KLQotI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+Ci0jdW5kZWYgX19IQVZFX0FSQ0hfU0lHX0JJVE9QUwotCi0jZGVmaW5lIHB0cmFjZV9zaWduYWxfZGVsaXZlcihyZWdzLCBjb29raWUpIGRvIHsgfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQotI2VuZGlmIC8qIF9NNjhLTk9NTVVfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCBkYmM2NGU5Li5jYTg3ZjkzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX0FTTV9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggN2Q3ZGRlMS4uOWUzMDU0ZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWIuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xLDUgKzEsMjcgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInN3YWJfbm8uaCIKLSNlbHNlCi0jaW5jbHVkZSAic3dhYl9tbS5oIgorI2lmbmRlZiBfTTY4S19TV0FCX0gKKyNkZWZpbmUgX002OEtfU1dBQl9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KKworI2lmIGRlZmluZWQgKF9fbWNmaXNhYXBsdXNfXykgfHwgZGVmaW5lZCAoX19tY2Zpc2FjX18pCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19hcmNoX3N3YWIzMihfX3UzMiB2YWwpCit7CisJX19hc21fXygiYnl0ZXJldiAlMCIgOiAiPWQiICh2YWwpIDogIjAiICh2YWwpKTsKKwlyZXR1cm4gdmFsOworfQorCisjZGVmaW5lIF9fYXJjaF9zd2FiMzIgX19hcmNoX3N3YWIzMgorI2VsaWYgIWRlZmluZWQoX191Q2xpbnV4X18pCisKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UzMiBfX2FyY2hfc3dhYjMyKF9fdTMyIHZhbCkKK3sKKwlfX2FzbV9fKCJyb2x3ICM4LCUwOyBzd2FwICUwOyByb2x3ICM4LCUwIiA6ICI9ZCIgKHZhbCkgOiAiMCIgKHZhbCkpOworCXJldHVybiB2YWw7Cit9CisjZGVmaW5lIF9fYXJjaF9zd2FiMzIgX19hcmNoX3N3YWIzMgogI2VuZGlmCisKKyNlbmRpZiAvKiBfTTY4S19TV0FCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc3dhYl9tbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjIxZTMwLi4wMDAwMDAwCi0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jaWZuZGVmIF9NNjhLX1NXQUJfSAotI2RlZmluZSBfTTY4S19TV0FCX0gKLQotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0KLSNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19hcmNoX3N3YWIzMihfX3UzMiB2YWwpCi17Ci0JX19hc21fXygicm9sdyAjOCwlMDsgc3dhcCAlMDsgcm9sdyAjOCwlMCIgOiAiPWQiICh2YWwpIDogIjAiICh2YWwpKTsKLQlyZXR1cm4gdmFsOwotfQotI2RlZmluZSBfX2FyY2hfc3dhYjMyIF9fYXJjaF9zd2FiMzIKLQotI2VuZGlmIC8qIF9NNjhLX1NXQUJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWJfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zd2FiX25vLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ODIyNTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N3YWJfbm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSNpZm5kZWYgX002OEtOT01NVV9TV0FCX0gKLSNkZWZpbmUgX002OEtOT01NVV9TV0FCX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pIHx8IGRlZmluZWQoX19LRVJORUxfXykKLSMgIGRlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9fbWNmaXNhYXBsdXNfXykgfHwgZGVmaW5lZCAoX19tY2Zpc2FjX18pCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19hcmNoX3N3YWIzMihfX3UzMiB2YWwpCi17Ci0JYXNtKAotCQkJImJ5dGVyZXYgJTAiCi0JCQk6ICI9ZCIgKHZhbCkKLQkJCTogIjAiICh2YWwpCi0JICAgKTsKLQlyZXR1cm4gdmFsOwotfQotCi0jZGVmaW5lIF9fYXJjaF9zd2FiMzIgX19hcmNoX3N3YWIzMgotI2VuZGlmCi0KLSNlbmRpZiAvKiBfTTY4S05PTU1VX1NXQUJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGRmMWQ5ZDQuLjNjMTkwMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTEsNSArMSwzNzIgQEAKLSNpZmRlZiBfX3VDbGludXhfXwotI2luY2x1ZGUgInVuaXN0ZF9uby5oIgotI2Vsc2UKLSNpbmNsdWRlICJ1bmlzdGRfbW0uaCIKLSNlbmRpZgorI2lmbmRlZiBfQVNNX002OEtfVU5JU1REX0hfCisjZGVmaW5lIF9BU01fTTY4S19VTklTVERfSF8KKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3lzdGVtIGNhbGwgbnVtYmVycy4KKyAqLworCisjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsCSAgMAorI2RlZmluZSBfX05SX2V4aXQJCSAgMQorI2RlZmluZSBfX05SX2ZvcmsJCSAgMgorI2RlZmluZSBfX05SX3JlYWQJCSAgMworI2RlZmluZSBfX05SX3dyaXRlCQkgIDQKKyNkZWZpbmUgX19OUl9vcGVuCQkgIDUKKyNkZWZpbmUgX19OUl9jbG9zZQkJICA2CisjZGVmaW5lIF9fTlJfd2FpdHBpZAkJICA3CisjZGVmaW5lIF9fTlJfY3JlYXQJCSAgOAorI2RlZmluZSBfX05SX2xpbmsJCSAgOQorI2RlZmluZSBfX05SX3VubGluawkJIDEwCisjZGVmaW5lIF9fTlJfZXhlY3ZlCQkgMTEKKyNkZWZpbmUgX19OUl9jaGRpcgkJIDEyCisjZGVmaW5lIF9fTlJfdGltZQkJIDEzCisjZGVmaW5lIF9fTlJfbWtub2QJCSAxNAorI2RlZmluZSBfX05SX2NobW9kCQkgMTUKKyNkZWZpbmUgX19OUl9jaG93bgkJIDE2CisjZGVmaW5lIF9fTlJfYnJlYWsJCSAxNworI2RlZmluZSBfX05SX29sZHN0YXQJCSAxOAorI2RlZmluZSBfX05SX2xzZWVrCQkgMTkKKyNkZWZpbmUgX19OUl9nZXRwaWQJCSAyMAorI2RlZmluZSBfX05SX21vdW50CQkgMjEKKyNkZWZpbmUgX19OUl91bW91bnQJCSAyMgorI2RlZmluZSBfX05SX3NldHVpZAkJIDIzCisjZGVmaW5lIF9fTlJfZ2V0dWlkCQkgMjQKKyNkZWZpbmUgX19OUl9zdGltZQkJIDI1CisjZGVmaW5lIF9fTlJfcHRyYWNlCQkgMjYKKyNkZWZpbmUgX19OUl9hbGFybQkJIDI3CisjZGVmaW5lIF9fTlJfb2xkZnN0YXQJCSAyOAorI2RlZmluZSBfX05SX3BhdXNlCQkgMjkKKyNkZWZpbmUgX19OUl91dGltZQkJIDMwCisjZGVmaW5lIF9fTlJfc3R0eQkJIDMxCisjZGVmaW5lIF9fTlJfZ3R0eQkJIDMyCisjZGVmaW5lIF9fTlJfYWNjZXNzCQkgMzMKKyNkZWZpbmUgX19OUl9uaWNlCQkgMzQKKyNkZWZpbmUgX19OUl9mdGltZQkJIDM1CisjZGVmaW5lIF9fTlJfc3luYwkJIDM2CisjZGVmaW5lIF9fTlJfa2lsbAkJIDM3CisjZGVmaW5lIF9fTlJfcmVuYW1lCQkgMzgKKyNkZWZpbmUgX19OUl9ta2RpcgkJIDM5CisjZGVmaW5lIF9fTlJfcm1kaXIJCSA0MAorI2RlZmluZSBfX05SX2R1cAkJIDQxCisjZGVmaW5lIF9fTlJfcGlwZQkJIDQyCisjZGVmaW5lIF9fTlJfdGltZXMJCSA0MworI2RlZmluZSBfX05SX3Byb2YJCSA0NAorI2RlZmluZSBfX05SX2JyawkJIDQ1CisjZGVmaW5lIF9fTlJfc2V0Z2lkCQkgNDYKKyNkZWZpbmUgX19OUl9nZXRnaWQJCSA0NworI2RlZmluZSBfX05SX3NpZ25hbAkJIDQ4CisjZGVmaW5lIF9fTlJfZ2V0ZXVpZAkJIDQ5CisjZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJIDUwCisjZGVmaW5lIF9fTlJfYWNjdAkJIDUxCisjZGVmaW5lIF9fTlJfdW1vdW50MgkJIDUyCisjZGVmaW5lIF9fTlJfbG9jawkJIDUzCisjZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAorI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKKyNkZWZpbmUgX19OUl9tcHgJCSA1NgorI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NworI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4CisjZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUJIDU5CisjZGVmaW5lIF9fTlJfdW1hc2sJCSA2MAorI2RlZmluZSBfX05SX2Nocm9vdAkJIDYxCisjZGVmaW5lIF9fTlJfdXN0YXQJCSA2MgorI2RlZmluZSBfX05SX2R1cDIJCSA2MworI2RlZmluZSBfX05SX2dldHBwaWQJCSA2NAorI2RlZmluZSBfX05SX2dldHBncnAJCSA2NQorI2RlZmluZSBfX05SX3NldHNpZAkJIDY2CisjZGVmaW5lIF9fTlJfc2lnYWN0aW9uCQkgNjcKKyNkZWZpbmUgX19OUl9zZ2V0bWFzawkJIDY4CisjZGVmaW5lIF9fTlJfc3NldG1hc2sJCSA2OQorI2RlZmluZSBfX05SX3NldHJldWlkCQkgNzAKKyNkZWZpbmUgX19OUl9zZXRyZWdpZAkJIDcxCisjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZAkJIDcyCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZwkJIDczCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJIDc0CisjZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkgNzUKKyNkZWZpbmUgX19OUl9nZXRybGltaXQJCSA3NgorI2RlZmluZSBfX05SX2dldHJ1c2FnZQkJIDc3CisjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5CSA3OAorI2RlZmluZSBfX05SX3NldHRpbWVvZmRheQkgNzkKKyNkZWZpbmUgX19OUl9nZXRncm91cHMJCSA4MAorI2RlZmluZSBfX05SX3NldGdyb3VwcwkJIDgxCisjZGVmaW5lIF9fTlJfc2VsZWN0CQkgODIKKyNkZWZpbmUgX19OUl9zeW1saW5rCQkgODMKKyNkZWZpbmUgX19OUl9vbGRsc3RhdAkJIDg0CisjZGVmaW5lIF9fTlJfcmVhZGxpbmsJCSA4NQorI2RlZmluZSBfX05SX3VzZWxpYgkJIDg2CisjZGVmaW5lIF9fTlJfc3dhcG9uCQkgODcKKyNkZWZpbmUgX19OUl9yZWJvb3QJCSA4OAorI2RlZmluZSBfX05SX3JlYWRkaXIJCSA4OQorI2RlZmluZSBfX05SX21tYXAJCSA5MAorI2RlZmluZSBfX05SX211bm1hcAkJIDkxCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGUJCSA5MgorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZQkJIDkzCisjZGVmaW5lIF9fTlJfZmNobW9kCQkgOTQKKyNkZWZpbmUgX19OUl9mY2hvd24JCSA5NQorI2RlZmluZSBfX05SX2dldHByaW9yaXR5CSA5NgorI2RlZmluZSBfX05SX3NldHByaW9yaXR5CSA5NworI2RlZmluZSBfX05SX3Byb2ZpbAkJIDk4CisjZGVmaW5lIF9fTlJfc3RhdGZzCQkgOTkKKyNkZWZpbmUgX19OUl9mc3RhdGZzCQkxMDAKKyNkZWZpbmUgX19OUl9pb3Blcm0JCTEwMQorI2RlZmluZSBfX05SX3NvY2tldGNhbGwJCTEwMgorI2RlZmluZSBfX05SX3N5c2xvZwkJMTAzCisjZGVmaW5lIF9fTlJfc2V0aXRpbWVyCQkxMDQKKyNkZWZpbmUgX19OUl9nZXRpdGltZXIJCTEwNQorI2RlZmluZSBfX05SX3N0YXQJCTEwNgorI2RlZmluZSBfX05SX2xzdGF0CQkxMDcKKyNkZWZpbmUgX19OUl9mc3RhdAkJMTA4CisjZGVmaW5lIF9fTlJfb2xkdW5hbWUJCTEwOQorI2RlZmluZSBfX05SX2lvcGwJCS8qIDExMCAqLyBub3Qgc3VwcG9ydGVkCisjZGVmaW5lIF9fTlJfdmhhbmd1cAkJMTExCisjZGVmaW5lIF9fTlJfaWRsZQkJLyogMTEyICovIE9ic29sZXRlCisjZGVmaW5lIF9fTlJfdm04NgkJLyogMTEzICovIG5vdCBzdXBwb3J0ZWQKKyNkZWZpbmUgX19OUl93YWl0NAkJMTE0CisjZGVmaW5lIF9fTlJfc3dhcG9mZgkJMTE1CisjZGVmaW5lIF9fTlJfc3lzaW5mbwkJMTE2CisjZGVmaW5lIF9fTlJfaXBjCQkxMTcKKyNkZWZpbmUgX19OUl9mc3luYwkJMTE4CisjZGVmaW5lIF9fTlJfc2lncmV0dXJuCQkxMTkKKyNkZWZpbmUgX19OUl9jbG9uZQkJMTIwCisjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZQkxMjEKKyNkZWZpbmUgX19OUl91bmFtZQkJMTIyCisjZGVmaW5lIF9fTlJfY2FjaGVmbHVzaAkJMTIzCisjZGVmaW5lIF9fTlJfYWRqdGltZXgJCTEyNAorI2RlZmluZSBfX05SX21wcm90ZWN0CQkxMjUKKyNkZWZpbmUgX19OUl9zaWdwcm9jbWFzawkxMjYKKyNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlCTEyNworI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCTEyOAorI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJMTI5CisjZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zCTEzMAorI2RlZmluZSBfX05SX3F1b3RhY3RsCQkxMzEKKyNkZWZpbmUgX19OUl9nZXRwZ2lkCQkxMzIKKyNkZWZpbmUgX19OUl9mY2hkaXIJCTEzMworI2RlZmluZSBfX05SX2JkZmx1c2gJCTEzNAorI2RlZmluZSBfX05SX3N5c2ZzCQkxMzUKKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkxMzYKKyNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkxMzcgLyogU3lzY2FsbCBmb3IgQW5kcmV3IEZpbGUgU3lzdGVtICovCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQJCTEzOAorI2RlZmluZSBfX05SX3NldGZzZ2lkCQkxMzkKKyNkZWZpbmUgX19OUl9fbGxzZWVrCQkxNDAKKyNkZWZpbmUgX19OUl9nZXRkZW50cwkJMTQxCisjZGVmaW5lIF9fTlJfX25ld3NlbGVjdAkJMTQyCisjZGVmaW5lIF9fTlJfZmxvY2sJCTE0MworI2RlZmluZSBfX05SX21zeW5jCQkxNDQKKyNkZWZpbmUgX19OUl9yZWFkdgkJMTQ1CisjZGVmaW5lIF9fTlJfd3JpdGV2CQkxNDYKKyNkZWZpbmUgX19OUl9nZXRzaWQJCTE0NworI2RlZmluZSBfX05SX2ZkYXRhc3luYwkJMTQ4CisjZGVmaW5lIF9fTlJfX3N5c2N0bAkJMTQ5CisjZGVmaW5lIF9fTlJfbWxvY2sJCTE1MAorI2RlZmluZSBfX05SX211bmxvY2sJCTE1MQorI2RlZmluZSBfX05SX21sb2NrYWxsCQkxNTIKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsCQkxNTMKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbQkJMTU0CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0JCTE1NQorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJMTU2CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCQkxNTcKKyNkZWZpbmUgX19OUl9zY2hlZF95aWVsZAkJMTU4CisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkxNTkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCTE2MAorI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAkxNjEKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAJCTE2MgorI2RlZmluZSBfX05SX21yZW1hcAkJMTYzCisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkxNjQKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCTE2NQorI2RlZmluZSBfX05SX2dldHBhZ2VzaXplCTE2NgorI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxNjcKKyNkZWZpbmUgX19OUl9wb2xsCQkxNjgKKyNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsCQkxNjkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQJCTE3MAorI2RlZmluZSBfX05SX2dldHJlc2dpZAkJMTcxCisjZGVmaW5lIF9fTlJfcHJjdGwJCTE3MgorI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybgkxNzMKKyNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24JMTc0CisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sJMTc1CisjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZwkxNzYKKyNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQJMTc3CisjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvCTE3OAorI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQJMTc5CisjZGVmaW5lIF9fTlJfcHJlYWQ2NAkJMTgwCisjZGVmaW5lIF9fTlJfcHdyaXRlNjQJCTE4MQorI2RlZmluZSBfX05SX2xjaG93bgkJMTgyCisjZGVmaW5lIF9fTlJfZ2V0Y3dkCQkxODMKKyNkZWZpbmUgX19OUl9jYXBnZXQJCTE4NAorI2RlZmluZSBfX05SX2NhcHNldAkJMTg1CisjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sJMTg2CisjZGVmaW5lIF9fTlJfc2VuZGZpbGUJCTE4NworI2RlZmluZSBfX05SX2dldHBtc2cJCTE4OAkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KKyNkZWZpbmUgX19OUl9wdXRwbXNnCQkxODkJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCisjZGVmaW5lIF9fTlJfdmZvcmsJCTE5MAorI2RlZmluZSBfX05SX3VnZXRybGltaXQJCTE5MQorI2RlZmluZSBfX05SX21tYXAyCQkxOTIKKyNkZWZpbmUgX19OUl90cnVuY2F0ZTY0CQkxOTMKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkxOTQKKyNkZWZpbmUgX19OUl9zdGF0NjQJCTE5NQorI2RlZmluZSBfX05SX2xzdGF0NjQJCTE5NgorI2RlZmluZSBfX05SX2ZzdGF0NjQJCTE5NworI2RlZmluZSBfX05SX2Nob3duMzIJCTE5OAorI2RlZmluZSBfX05SX2dldHVpZDMyCQkxOTkKKyNkZWZpbmUgX19OUl9nZXRnaWQzMgkJMjAwCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZDMyCQkyMDEKKyNkZWZpbmUgX19OUl9nZXRlZ2lkMzIJCTIwMgorI2RlZmluZSBfX05SX3NldHJldWlkMzIJCTIwMworI2RlZmluZSBfX05SX3NldHJlZ2lkMzIJCTIwNAorI2RlZmluZSBfX05SX2dldGdyb3VwczMyCTIwNQorI2RlZmluZSBfX05SX3NldGdyb3VwczMyCTIwNgorI2RlZmluZSBfX05SX2ZjaG93bjMyCQkyMDcKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMgkyMDgKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMgkyMDkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMgkyMTAKKyNkZWZpbmUgX19OUl9nZXRyZXNnaWQzMgkyMTEKKyNkZWZpbmUgX19OUl9sY2hvd24zMgkJMjEyCisjZGVmaW5lIF9fTlJfc2V0dWlkMzIJCTIxMworI2RlZmluZSBfX05SX3NldGdpZDMyCQkyMTQKKyNkZWZpbmUgX19OUl9zZXRmc3VpZDMyCQkyMTUKKyNkZWZpbmUgX19OUl9zZXRmc2dpZDMyCQkyMTYKKyNkZWZpbmUgX19OUl9waXZvdF9yb290CQkyMTcKKyNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyMjAKKyNkZWZpbmUgX19OUl9nZXR0aWQJCTIyMQorI2RlZmluZSBfX05SX3RraWxsCQkyMjIKKyNkZWZpbmUgX19OUl9zZXR4YXR0cgkJMjIzCisjZGVmaW5lIF9fTlJfbHNldHhhdHRyCQkyMjQKKyNkZWZpbmUgX19OUl9mc2V0eGF0dHIJCTIyNQorI2RlZmluZSBfX05SX2dldHhhdHRyCQkyMjYKKyNkZWZpbmUgX19OUl9sZ2V0eGF0dHIJCTIyNworI2RlZmluZSBfX05SX2ZnZXR4YXR0cgkJMjI4CisjZGVmaW5lIF9fTlJfbGlzdHhhdHRyCQkyMjkKKyNkZWZpbmUgX19OUl9sbGlzdHhhdHRyCQkyMzAKKyNkZWZpbmUgX19OUl9mbGlzdHhhdHRyCQkyMzEKKyNkZWZpbmUgX19OUl9yZW1vdmV4YXR0cgkyMzIKKyNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIJMjMzCisjZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyCTIzNAorI2RlZmluZSBfX05SX2Z1dGV4CQkyMzUKKyNkZWZpbmUgX19OUl9zZW5kZmlsZTY0CQkyMzYKKyNkZWZpbmUgX19OUl9taW5jb3JlCQkyMzcKKyNkZWZpbmUgX19OUl9tYWR2aXNlCQkyMzgKKyNkZWZpbmUgX19OUl9mY250bDY0CQkyMzkKKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCTI0MAorI2RlZmluZSBfX05SX2lvX3NldHVwCQkyNDEKKyNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyNDIKKyNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjQzCisjZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkyNDQKKyNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI0NQorI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJMjQ2CisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJMjQ3CisjZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUJMjQ4CisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlCTI0OQorI2RlZmluZSBfX05SX2Vwb2xsX2N0bAkJMjUwCisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJMjUxCisjZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcwkyNTIKKyNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MJMjUzCisjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCTI1NAorI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJMjU1CisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkyNTYKKyNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuCTI1NworI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZQkyNTgKKyNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lCTI1OQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUJMjYwCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzCTI2MQorI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcAkyNjIKKyNkZWZpbmUgX19OUl9zdGF0ZnM2NAkJMjYzCisjZGVmaW5lIF9fTlJfZnN0YXRmczY0CQkyNjQKKyNkZWZpbmUgX19OUl90Z2tpbGwJCTI2NQorI2RlZmluZSBfX05SX3V0aW1lcwkJMjY2CisjZGVmaW5lIF9fTlJfZmFkdmlzZTY0XzY0CTI2NworI2RlZmluZSBfX05SX21iaW5kCQkyNjgKKyNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5CTI2OQorI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kJMjcwCisjZGVmaW5lIF9fTlJfbXFfb3BlbgkJMjcxCisjZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkyNzIKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJMjczCisjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCTI3NAorI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc1CisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzYKKyNkZWZpbmUgX19OUl93YWl0aWQJCTI3NworI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCTI3OAorI2RlZmluZSBfX05SX2FkZF9rZXkJCTI3OQorI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4MAorI2RlZmluZSBfX05SX2tleWN0bAkJMjgxCisjZGVmaW5lIF9fTlJfaW9wcmlvX3NldAkJMjgyCisjZGVmaW5lIF9fTlJfaW9wcmlvX2dldAkJMjgzCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0CTI4NAorI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoCTI4NQorI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2gJMjg2CisjZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcwkyODcKKyNkZWZpbmUgX19OUl9vcGVuYXQJCTI4OAorI2RlZmluZSBfX05SX21rZGlyYXQJCTI4OQorI2RlZmluZSBfX05SX21rbm9kYXQJCTI5MAorI2RlZmluZSBfX05SX2ZjaG93bmF0CQkyOTEKKyNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCTI5MgorI2RlZmluZSBfX05SX2ZzdGF0YXQ2NAkJMjkzCisjZGVmaW5lIF9fTlJfdW5saW5rYXQJCTI5NAorI2RlZmluZSBfX05SX3JlbmFtZWF0CQkyOTUKKyNkZWZpbmUgX19OUl9saW5rYXQJCTI5NgorI2RlZmluZSBfX05SX3N5bWxpbmthdAkJMjk3CisjZGVmaW5lIF9fTlJfcmVhZGxpbmthdAkJMjk4CisjZGVmaW5lIF9fTlJfZmNobW9kYXQJCTI5OQorI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJMzAwCisjZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTMwMQorI2RlZmluZSBfX05SX3Bwb2xsCQkzMDIKKyNkZWZpbmUgX19OUl91bnNoYXJlCQkzMDMKKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzA0CisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMwNQorI2RlZmluZSBfX05SX3NwbGljZQkJMzA2CisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCTMwNworI2RlZmluZSBfX05SX3RlZQkJMzA4CisjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCTMwOQorI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCTMxMAorI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTMxMQorI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTMxMgorI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTMxMworI2RlZmluZSBfX05SX2dldGNwdQkJMzE0CisjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJMzE1CisjZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkzMTYKKyNkZWZpbmUgX19OUl9zaWduYWxmZAkJMzE3CisjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJMzE4CisjZGVmaW5lIF9fTlJfZXZlbnRmZAkJMzE5CisjZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkzMjAKKyNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJMzIxCisjZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCTMyMgorI2RlZmluZSBfX05SX3NpZ25hbGZkNAkJMzIzCisjZGVmaW5lIF9fTlJfZXZlbnRmZDIJCTMyNAorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEJMzI1CisjZGVmaW5lIF9fTlJfZHVwMwkJMzI2CisjZGVmaW5lIF9fTlJfcGlwZTIJCTMyNworI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJMzI4CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKyNkZWZpbmUgTlJfc3lzY2FsbHMJCTMyOQorCisjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCisjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCisjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KKworLyoKKyAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKKyAqCisgKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAorICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCisgKi8KKyNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qIF9BU01fTTY4S19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGRfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGRfbW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MxOTAyNy4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkX21tLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNzIgKzAsMCBAQAotI2lmbmRlZiBfQVNNX002OEtfVU5JU1REX0hfCi0jZGVmaW5lIF9BU01fTTY4S19VTklTVERfSF8KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3lzdGVtIGNhbGwgbnVtYmVycy4KLSAqLwotCi0jZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsCSAgMAotI2RlZmluZSBfX05SX2V4aXQJCSAgMQotI2RlZmluZSBfX05SX2ZvcmsJCSAgMgotI2RlZmluZSBfX05SX3JlYWQJCSAgMwotI2RlZmluZSBfX05SX3dyaXRlCQkgIDQKLSNkZWZpbmUgX19OUl9vcGVuCQkgIDUKLSNkZWZpbmUgX19OUl9jbG9zZQkJICA2Ci0jZGVmaW5lIF9fTlJfd2FpdHBpZAkJICA3Ci0jZGVmaW5lIF9fTlJfY3JlYXQJCSAgOAotI2RlZmluZSBfX05SX2xpbmsJCSAgOQotI2RlZmluZSBfX05SX3VubGluawkJIDEwCi0jZGVmaW5lIF9fTlJfZXhlY3ZlCQkgMTEKLSNkZWZpbmUgX19OUl9jaGRpcgkJIDEyCi0jZGVmaW5lIF9fTlJfdGltZQkJIDEzCi0jZGVmaW5lIF9fTlJfbWtub2QJCSAxNAotI2RlZmluZSBfX05SX2NobW9kCQkgMTUKLSNkZWZpbmUgX19OUl9jaG93bgkJIDE2Ci0jZGVmaW5lIF9fTlJfYnJlYWsJCSAxNwotI2RlZmluZSBfX05SX29sZHN0YXQJCSAxOAotI2RlZmluZSBfX05SX2xzZWVrCQkgMTkKLSNkZWZpbmUgX19OUl9nZXRwaWQJCSAyMAotI2RlZmluZSBfX05SX21vdW50CQkgMjEKLSNkZWZpbmUgX19OUl91bW91bnQJCSAyMgotI2RlZmluZSBfX05SX3NldHVpZAkJIDIzCi0jZGVmaW5lIF9fTlJfZ2V0dWlkCQkgMjQKLSNkZWZpbmUgX19OUl9zdGltZQkJIDI1Ci0jZGVmaW5lIF9fTlJfcHRyYWNlCQkgMjYKLSNkZWZpbmUgX19OUl9hbGFybQkJIDI3Ci0jZGVmaW5lIF9fTlJfb2xkZnN0YXQJCSAyOAotI2RlZmluZSBfX05SX3BhdXNlCQkgMjkKLSNkZWZpbmUgX19OUl91dGltZQkJIDMwCi0jZGVmaW5lIF9fTlJfc3R0eQkJIDMxCi0jZGVmaW5lIF9fTlJfZ3R0eQkJIDMyCi0jZGVmaW5lIF9fTlJfYWNjZXNzCQkgMzMKLSNkZWZpbmUgX19OUl9uaWNlCQkgMzQKLSNkZWZpbmUgX19OUl9mdGltZQkJIDM1Ci0jZGVmaW5lIF9fTlJfc3luYwkJIDM2Ci0jZGVmaW5lIF9fTlJfa2lsbAkJIDM3Ci0jZGVmaW5lIF9fTlJfcmVuYW1lCQkgMzgKLSNkZWZpbmUgX19OUl9ta2RpcgkJIDM5Ci0jZGVmaW5lIF9fTlJfcm1kaXIJCSA0MAotI2RlZmluZSBfX05SX2R1cAkJIDQxCi0jZGVmaW5lIF9fTlJfcGlwZQkJIDQyCi0jZGVmaW5lIF9fTlJfdGltZXMJCSA0MwotI2RlZmluZSBfX05SX3Byb2YJCSA0NAotI2RlZmluZSBfX05SX2JyawkJIDQ1Ci0jZGVmaW5lIF9fTlJfc2V0Z2lkCQkgNDYKLSNkZWZpbmUgX19OUl9nZXRnaWQJCSA0NwotI2RlZmluZSBfX05SX3NpZ25hbAkJIDQ4Ci0jZGVmaW5lIF9fTlJfZ2V0ZXVpZAkJIDQ5Ci0jZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJIDUwCi0jZGVmaW5lIF9fTlJfYWNjdAkJIDUxCi0jZGVmaW5lIF9fTlJfdW1vdW50MgkJIDUyCi0jZGVmaW5lIF9fTlJfbG9jawkJIDUzCi0jZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAotI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKLSNkZWZpbmUgX19OUl9tcHgJCSA1NgotI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NwotI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4Ci0jZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUJIDU5Ci0jZGVmaW5lIF9fTlJfdW1hc2sJCSA2MAotI2RlZmluZSBfX05SX2Nocm9vdAkJIDYxCi0jZGVmaW5lIF9fTlJfdXN0YXQJCSA2MgotI2RlZmluZSBfX05SX2R1cDIJCSA2MwotI2RlZmluZSBfX05SX2dldHBwaWQJCSA2NAotI2RlZmluZSBfX05SX2dldHBncnAJCSA2NQotI2RlZmluZSBfX05SX3NldHNpZAkJIDY2Ci0jZGVmaW5lIF9fTlJfc2lnYWN0aW9uCQkgNjcKLSNkZWZpbmUgX19OUl9zZ2V0bWFzawkJIDY4Ci0jZGVmaW5lIF9fTlJfc3NldG1hc2sJCSA2OQotI2RlZmluZSBfX05SX3NldHJldWlkCQkgNzAKLSNkZWZpbmUgX19OUl9zZXRyZWdpZAkJIDcxCi0jZGVmaW5lIF9fTlJfc2lnc3VzcGVuZAkJIDcyCi0jZGVmaW5lIF9fTlJfc2lncGVuZGluZwkJIDczCi0jZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJIDc0Ci0jZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkgNzUKLSNkZWZpbmUgX19OUl9nZXRybGltaXQJCSA3NgotI2RlZmluZSBfX05SX2dldHJ1c2FnZQkJIDc3Ci0jZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5CSA3OAotI2RlZmluZSBfX05SX3NldHRpbWVvZmRheQkgNzkKLSNkZWZpbmUgX19OUl9nZXRncm91cHMJCSA4MAotI2RlZmluZSBfX05SX3NldGdyb3VwcwkJIDgxCi0jZGVmaW5lIF9fTlJfc2VsZWN0CQkgODIKLSNkZWZpbmUgX19OUl9zeW1saW5rCQkgODMKLSNkZWZpbmUgX19OUl9vbGRsc3RhdAkJIDg0Ci0jZGVmaW5lIF9fTlJfcmVhZGxpbmsJCSA4NQotI2RlZmluZSBfX05SX3VzZWxpYgkJIDg2Ci0jZGVmaW5lIF9fTlJfc3dhcG9uCQkgODcKLSNkZWZpbmUgX19OUl9yZWJvb3QJCSA4OAotI2RlZmluZSBfX05SX3JlYWRkaXIJCSA4OQotI2RlZmluZSBfX05SX21tYXAJCSA5MAotI2RlZmluZSBfX05SX211bm1hcAkJIDkxCi0jZGVmaW5lIF9fTlJfdHJ1bmNhdGUJCSA5MgotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZQkJIDkzCi0jZGVmaW5lIF9fTlJfZmNobW9kCQkgOTQKLSNkZWZpbmUgX19OUl9mY2hvd24JCSA5NQotI2RlZmluZSBfX05SX2dldHByaW9yaXR5CSA5NgotI2RlZmluZSBfX05SX3NldHByaW9yaXR5CSA5NwotI2RlZmluZSBfX05SX3Byb2ZpbAkJIDk4Ci0jZGVmaW5lIF9fTlJfc3RhdGZzCQkgOTkKLSNkZWZpbmUgX19OUl9mc3RhdGZzCQkxMDAKLSNkZWZpbmUgX19OUl9pb3Blcm0JCTEwMQotI2RlZmluZSBfX05SX3NvY2tldGNhbGwJCTEwMgotI2RlZmluZSBfX05SX3N5c2xvZwkJMTAzCi0jZGVmaW5lIF9fTlJfc2V0aXRpbWVyCQkxMDQKLSNkZWZpbmUgX19OUl9nZXRpdGltZXIJCTEwNQotI2RlZmluZSBfX05SX3N0YXQJCTEwNgotI2RlZmluZSBfX05SX2xzdGF0CQkxMDcKLSNkZWZpbmUgX19OUl9mc3RhdAkJMTA4Ci0jZGVmaW5lIF9fTlJfb2xkdW5hbWUJCTEwOQotI2RlZmluZSBfX05SX2lvcGwJCS8qIDExMCAqLyBub3Qgc3VwcG9ydGVkCi0jZGVmaW5lIF9fTlJfdmhhbmd1cAkJMTExCi0jZGVmaW5lIF9fTlJfaWRsZQkJLyogMTEyICovIE9ic29sZXRlCi0jZGVmaW5lIF9fTlJfdm04NgkJLyogMTEzICovIG5vdCBzdXBwb3J0ZWQKLSNkZWZpbmUgX19OUl93YWl0NAkJMTE0Ci0jZGVmaW5lIF9fTlJfc3dhcG9mZgkJMTE1Ci0jZGVmaW5lIF9fTlJfc3lzaW5mbwkJMTE2Ci0jZGVmaW5lIF9fTlJfaXBjCQkxMTcKLSNkZWZpbmUgX19OUl9mc3luYwkJMTE4Ci0jZGVmaW5lIF9fTlJfc2lncmV0dXJuCQkxMTkKLSNkZWZpbmUgX19OUl9jbG9uZQkJMTIwCi0jZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZQkxMjEKLSNkZWZpbmUgX19OUl91bmFtZQkJMTIyCi0jZGVmaW5lIF9fTlJfY2FjaGVmbHVzaAkJMTIzCi0jZGVmaW5lIF9fTlJfYWRqdGltZXgJCTEyNAotI2RlZmluZSBfX05SX21wcm90ZWN0CQkxMjUKLSNkZWZpbmUgX19OUl9zaWdwcm9jbWFzawkxMjYKLSNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlCTEyNwotI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCTEyOAotI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJMTI5Ci0jZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zCTEzMAotI2RlZmluZSBfX05SX3F1b3RhY3RsCQkxMzEKLSNkZWZpbmUgX19OUl9nZXRwZ2lkCQkxMzIKLSNkZWZpbmUgX19OUl9mY2hkaXIJCTEzMwotI2RlZmluZSBfX05SX2JkZmx1c2gJCTEzNAotI2RlZmluZSBfX05SX3N5c2ZzCQkxMzUKLSNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkxMzYKLSNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkxMzcgLyogU3lzY2FsbCBmb3IgQW5kcmV3IEZpbGUgU3lzdGVtICovCi0jZGVmaW5lIF9fTlJfc2V0ZnN1aWQJCTEzOAotI2RlZmluZSBfX05SX3NldGZzZ2lkCQkxMzkKLSNkZWZpbmUgX19OUl9fbGxzZWVrCQkxNDAKLSNkZWZpbmUgX19OUl9nZXRkZW50cwkJMTQxCi0jZGVmaW5lIF9fTlJfX25ld3NlbGVjdAkJMTQyCi0jZGVmaW5lIF9fTlJfZmxvY2sJCTE0MwotI2RlZmluZSBfX05SX21zeW5jCQkxNDQKLSNkZWZpbmUgX19OUl9yZWFkdgkJMTQ1Ci0jZGVmaW5lIF9fTlJfd3JpdGV2CQkxNDYKLSNkZWZpbmUgX19OUl9nZXRzaWQJCTE0NwotI2RlZmluZSBfX05SX2ZkYXRhc3luYwkJMTQ4Ci0jZGVmaW5lIF9fTlJfX3N5c2N0bAkJMTQ5Ci0jZGVmaW5lIF9fTlJfbWxvY2sJCTE1MAotI2RlZmluZSBfX05SX211bmxvY2sJCTE1MQotI2RlZmluZSBfX05SX21sb2NrYWxsCQkxNTIKLSNkZWZpbmUgX19OUl9tdW5sb2NrYWxsCQkxNTMKLSNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbQkJMTU0Ci0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0JCTE1NQotI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJMTU2Ci0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCQkxNTcKLSNkZWZpbmUgX19OUl9zY2hlZF95aWVsZAkJMTU4Ci0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkxNTkKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCTE2MAotI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAkxNjEKLSNkZWZpbmUgX19OUl9uYW5vc2xlZXAJCTE2MgotI2RlZmluZSBfX05SX21yZW1hcAkJMTYzCi0jZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkxNjQKLSNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCTE2NQotI2RlZmluZSBfX05SX2dldHBhZ2VzaXplCTE2NgotI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxNjcKLSNkZWZpbmUgX19OUl9wb2xsCQkxNjgKLSNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsCQkxNjkKLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQJCTE3MAotI2RlZmluZSBfX05SX2dldHJlc2dpZAkJMTcxCi0jZGVmaW5lIF9fTlJfcHJjdGwJCTE3MgotI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybgkxNzMKLSNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24JMTc0Ci0jZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sJMTc1Ci0jZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZwkxNzYKLSNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQJMTc3Ci0jZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvCTE3OAotI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQJMTc5Ci0jZGVmaW5lIF9fTlJfcHJlYWQ2NAkJMTgwCi0jZGVmaW5lIF9fTlJfcHdyaXRlNjQJCTE4MQotI2RlZmluZSBfX05SX2xjaG93bgkJMTgyCi0jZGVmaW5lIF9fTlJfZ2V0Y3dkCQkxODMKLSNkZWZpbmUgX19OUl9jYXBnZXQJCTE4NAotI2RlZmluZSBfX05SX2NhcHNldAkJMTg1Ci0jZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sJMTg2Ci0jZGVmaW5lIF9fTlJfc2VuZGZpbGUJCTE4NwotI2RlZmluZSBfX05SX2dldHBtc2cJCTE4OAkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KLSNkZWZpbmUgX19OUl9wdXRwbXNnCQkxODkJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCi0jZGVmaW5lIF9fTlJfdmZvcmsJCTE5MAotI2RlZmluZSBfX05SX3VnZXRybGltaXQJCTE5MQotI2RlZmluZSBfX05SX21tYXAyCQkxOTIKLSNkZWZpbmUgX19OUl90cnVuY2F0ZTY0CQkxOTMKLSNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkxOTQKLSNkZWZpbmUgX19OUl9zdGF0NjQJCTE5NQotI2RlZmluZSBfX05SX2xzdGF0NjQJCTE5NgotI2RlZmluZSBfX05SX2ZzdGF0NjQJCTE5NwotI2RlZmluZSBfX05SX2Nob3duMzIJCTE5OAotI2RlZmluZSBfX05SX2dldHVpZDMyCQkxOTkKLSNkZWZpbmUgX19OUl9nZXRnaWQzMgkJMjAwCi0jZGVmaW5lIF9fTlJfZ2V0ZXVpZDMyCQkyMDEKLSNkZWZpbmUgX19OUl9nZXRlZ2lkMzIJCTIwMgotI2RlZmluZSBfX05SX3NldHJldWlkMzIJCTIwMwotI2RlZmluZSBfX05SX3NldHJlZ2lkMzIJCTIwNAotI2RlZmluZSBfX05SX2dldGdyb3VwczMyCTIwNQotI2RlZmluZSBfX05SX3NldGdyb3VwczMyCTIwNgotI2RlZmluZSBfX05SX2ZjaG93bjMyCQkyMDcKLSNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMgkyMDgKLSNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMgkyMDkKLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMgkyMTAKLSNkZWZpbmUgX19OUl9nZXRyZXNnaWQzMgkyMTEKLSNkZWZpbmUgX19OUl9sY2hvd24zMgkJMjEyCi0jZGVmaW5lIF9fTlJfc2V0dWlkMzIJCTIxMwotI2RlZmluZSBfX05SX3NldGdpZDMyCQkyMTQKLSNkZWZpbmUgX19OUl9zZXRmc3VpZDMyCQkyMTUKLSNkZWZpbmUgX19OUl9zZXRmc2dpZDMyCQkyMTYKLSNkZWZpbmUgX19OUl9waXZvdF9yb290CQkyMTcKLSNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyMjAKLSNkZWZpbmUgX19OUl9nZXR0aWQJCTIyMQotI2RlZmluZSBfX05SX3RraWxsCQkyMjIKLSNkZWZpbmUgX19OUl9zZXR4YXR0cgkJMjIzCi0jZGVmaW5lIF9fTlJfbHNldHhhdHRyCQkyMjQKLSNkZWZpbmUgX19OUl9mc2V0eGF0dHIJCTIyNQotI2RlZmluZSBfX05SX2dldHhhdHRyCQkyMjYKLSNkZWZpbmUgX19OUl9sZ2V0eGF0dHIJCTIyNwotI2RlZmluZSBfX05SX2ZnZXR4YXR0cgkJMjI4Ci0jZGVmaW5lIF9fTlJfbGlzdHhhdHRyCQkyMjkKLSNkZWZpbmUgX19OUl9sbGlzdHhhdHRyCQkyMzAKLSNkZWZpbmUgX19OUl9mbGlzdHhhdHRyCQkyMzEKLSNkZWZpbmUgX19OUl9yZW1vdmV4YXR0cgkyMzIKLSNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIJMjMzCi0jZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyCTIzNAotI2RlZmluZSBfX05SX2Z1dGV4CQkyMzUKLSNkZWZpbmUgX19OUl9zZW5kZmlsZTY0CQkyMzYKLSNkZWZpbmUgX19OUl9taW5jb3JlCQkyMzcKLSNkZWZpbmUgX19OUl9tYWR2aXNlCQkyMzgKLSNkZWZpbmUgX19OUl9mY250bDY0CQkyMzkKLSNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCTI0MAotI2RlZmluZSBfX05SX2lvX3NldHVwCQkyNDEKLSNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyNDIKLSNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjQzCi0jZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkyNDQKLSNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI0NQotI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJMjQ2Ci0jZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJMjQ3Ci0jZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUJMjQ4Ci0jZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlCTI0OQotI2RlZmluZSBfX05SX2Vwb2xsX2N0bAkJMjUwCi0jZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJMjUxCi0jZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcwkyNTIKLSNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MJMjUzCi0jZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCTI1NAotI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJMjU1Ci0jZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkyNTYKLSNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuCTI1NwotI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZQkyNTgKLSNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lCTI1OQotI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUJMjYwCi0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzCTI2MQotI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcAkyNjIKLSNkZWZpbmUgX19OUl9zdGF0ZnM2NAkJMjYzCi0jZGVmaW5lIF9fTlJfZnN0YXRmczY0CQkyNjQKLSNkZWZpbmUgX19OUl90Z2tpbGwJCTI2NQotI2RlZmluZSBfX05SX3V0aW1lcwkJMjY2Ci0jZGVmaW5lIF9fTlJfZmFkdmlzZTY0XzY0CTI2NwotI2RlZmluZSBfX05SX21iaW5kCQkyNjgKLSNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5CTI2OQotI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kJMjcwCi0jZGVmaW5lIF9fTlJfbXFfb3BlbgkJMjcxCi0jZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkyNzIKLSNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJMjczCi0jZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCTI3NAotI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc1Ci0jZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzYKLSNkZWZpbmUgX19OUl93YWl0aWQJCTI3NwotI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCTI3OAotI2RlZmluZSBfX05SX2FkZF9rZXkJCTI3OQotI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4MAotI2RlZmluZSBfX05SX2tleWN0bAkJMjgxCi0jZGVmaW5lIF9fTlJfaW9wcmlvX3NldAkJMjgyCi0jZGVmaW5lIF9fTlJfaW9wcmlvX2dldAkJMjgzCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0CTI4NAotI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoCTI4NQotI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2gJMjg2Ci0jZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcwkyODcKLSNkZWZpbmUgX19OUl9vcGVuYXQJCTI4OAotI2RlZmluZSBfX05SX21rZGlyYXQJCTI4OQotI2RlZmluZSBfX05SX21rbm9kYXQJCTI5MAotI2RlZmluZSBfX05SX2ZjaG93bmF0CQkyOTEKLSNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCTI5MgotI2RlZmluZSBfX05SX2ZzdGF0YXQ2NAkJMjkzCi0jZGVmaW5lIF9fTlJfdW5saW5rYXQJCTI5NAotI2RlZmluZSBfX05SX3JlbmFtZWF0CQkyOTUKLSNkZWZpbmUgX19OUl9saW5rYXQJCTI5NgotI2RlZmluZSBfX05SX3N5bWxpbmthdAkJMjk3Ci0jZGVmaW5lIF9fTlJfcmVhZGxpbmthdAkJMjk4Ci0jZGVmaW5lIF9fTlJfZmNobW9kYXQJCTI5OQotI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJMzAwCi0jZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTMwMQotI2RlZmluZSBfX05SX3Bwb2xsCQkzMDIKLSNkZWZpbmUgX19OUl91bnNoYXJlCQkzMDMKLSNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzA0Ci0jZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMwNQotI2RlZmluZSBfX05SX3NwbGljZQkJMzA2Ci0jZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCTMwNwotI2RlZmluZSBfX05SX3RlZQkJMzA4Ci0jZGVmaW5lIF9fTlJfdm1zcGxpY2UJCTMwOQotI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCTMxMAotI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTMxMQotI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTMxMgotI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTMxMwotI2RlZmluZSBfX05SX2dldGNwdQkJMzE0Ci0jZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJMzE1Ci0jZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkzMTYKLSNkZWZpbmUgX19OUl9zaWduYWxmZAkJMzE3Ci0jZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJMzE4Ci0jZGVmaW5lIF9fTlJfZXZlbnRmZAkJMzE5Ci0jZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkzMjAKLSNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJMzIxCi0jZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCTMyMgotI2RlZmluZSBfX05SX3NpZ25hbGZkNAkJMzIzCi0jZGVmaW5lIF9fTlJfZXZlbnRmZDIJCTMyNAotI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEJMzI1Ci0jZGVmaW5lIF9fTlJfZHVwMwkJMzI2Ci0jZGVmaW5lIF9fTlJfcGlwZTIJCTMyNwotI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJMzI4Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNkZWZpbmUgTlJfc3lzY2FsbHMJCTMyOQotCi0jZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCi0jZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCi0jZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLQotLyoKLSAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKLSAqCi0gKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAotICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCi0gKi8KLSNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fTTY4S19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGRfbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGRfbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAzNGEyZi4uMDAwMDAwMAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkX25vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNzIgKzAsMCBAQAotI2lmbmRlZiBfQVNNX002OEtfVU5JU1REX0hfCi0jZGVmaW5lIF9BU01fTTY4S19VTklTVERfSF8KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgc3lzdGVtIGNhbGwgbnVtYmVycy4KLSAqLwotCi0jZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsICAgICAgMAotI2RlZmluZSBfX05SX2V4aXQJCSAgMQotI2RlZmluZSBfX05SX2ZvcmsJCSAgMgotI2RlZmluZSBfX05SX3JlYWQJCSAgMwotI2RlZmluZSBfX05SX3dyaXRlCQkgIDQKLSNkZWZpbmUgX19OUl9vcGVuCQkgIDUKLSNkZWZpbmUgX19OUl9jbG9zZQkJICA2Ci0jZGVmaW5lIF9fTlJfd2FpdHBpZAkJICA3Ci0jZGVmaW5lIF9fTlJfY3JlYXQJCSAgOAotI2RlZmluZSBfX05SX2xpbmsJCSAgOQotI2RlZmluZSBfX05SX3VubGluawkJIDEwCi0jZGVmaW5lIF9fTlJfZXhlY3ZlCQkgMTEKLSNkZWZpbmUgX19OUl9jaGRpcgkJIDEyCi0jZGVmaW5lIF9fTlJfdGltZQkJIDEzCi0jZGVmaW5lIF9fTlJfbWtub2QJCSAxNAotI2RlZmluZSBfX05SX2NobW9kCQkgMTUKLSNkZWZpbmUgX19OUl9jaG93bgkJIDE2Ci0jZGVmaW5lIF9fTlJfYnJlYWsJCSAxNwotI2RlZmluZSBfX05SX29sZHN0YXQJCSAxOAotI2RlZmluZSBfX05SX2xzZWVrCQkgMTkKLSNkZWZpbmUgX19OUl9nZXRwaWQJCSAyMAotI2RlZmluZSBfX05SX21vdW50CQkgMjEKLSNkZWZpbmUgX19OUl91bW91bnQJCSAyMgotI2RlZmluZSBfX05SX3NldHVpZAkJIDIzCi0jZGVmaW5lIF9fTlJfZ2V0dWlkCQkgMjQKLSNkZWZpbmUgX19OUl9zdGltZQkJIDI1Ci0jZGVmaW5lIF9fTlJfcHRyYWNlCQkgMjYKLSNkZWZpbmUgX19OUl9hbGFybQkJIDI3Ci0jZGVmaW5lIF9fTlJfb2xkZnN0YXQJCSAyOAotI2RlZmluZSBfX05SX3BhdXNlCQkgMjkKLSNkZWZpbmUgX19OUl91dGltZQkJIDMwCi0jZGVmaW5lIF9fTlJfc3R0eQkJIDMxCi0jZGVmaW5lIF9fTlJfZ3R0eQkJIDMyCi0jZGVmaW5lIF9fTlJfYWNjZXNzCQkgMzMKLSNkZWZpbmUgX19OUl9uaWNlCQkgMzQKLSNkZWZpbmUgX19OUl9mdGltZQkJIDM1Ci0jZGVmaW5lIF9fTlJfc3luYwkJIDM2Ci0jZGVmaW5lIF9fTlJfa2lsbAkJIDM3Ci0jZGVmaW5lIF9fTlJfcmVuYW1lCQkgMzgKLSNkZWZpbmUgX19OUl9ta2RpcgkJIDM5Ci0jZGVmaW5lIF9fTlJfcm1kaXIJCSA0MAotI2RlZmluZSBfX05SX2R1cAkJIDQxCi0jZGVmaW5lIF9fTlJfcGlwZQkJIDQyCi0jZGVmaW5lIF9fTlJfdGltZXMJCSA0MwotI2RlZmluZSBfX05SX3Byb2YJCSA0NAotI2RlZmluZSBfX05SX2JyawkJIDQ1Ci0jZGVmaW5lIF9fTlJfc2V0Z2lkCQkgNDYKLSNkZWZpbmUgX19OUl9nZXRnaWQJCSA0NwotI2RlZmluZSBfX05SX3NpZ25hbAkJIDQ4Ci0jZGVmaW5lIF9fTlJfZ2V0ZXVpZAkJIDQ5Ci0jZGVmaW5lIF9fTlJfZ2V0ZWdpZAkJIDUwCi0jZGVmaW5lIF9fTlJfYWNjdAkJIDUxCi0jZGVmaW5lIF9fTlJfdW1vdW50MgkJIDUyCi0jZGVmaW5lIF9fTlJfbG9jawkJIDUzCi0jZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAotI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKLSNkZWZpbmUgX19OUl9tcHgJCSA1NgotI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NwotI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4Ci0jZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUJIDU5Ci0jZGVmaW5lIF9fTlJfdW1hc2sJCSA2MAotI2RlZmluZSBfX05SX2Nocm9vdAkJIDYxCi0jZGVmaW5lIF9fTlJfdXN0YXQJCSA2MgotI2RlZmluZSBfX05SX2R1cDIJCSA2MwotI2RlZmluZSBfX05SX2dldHBwaWQJCSA2NAotI2RlZmluZSBfX05SX2dldHBncnAJCSA2NQotI2RlZmluZSBfX05SX3NldHNpZAkJIDY2Ci0jZGVmaW5lIF9fTlJfc2lnYWN0aW9uCQkgNjcKLSNkZWZpbmUgX19OUl9zZ2V0bWFzawkJIDY4Ci0jZGVmaW5lIF9fTlJfc3NldG1hc2sJCSA2OQotI2RlZmluZSBfX05SX3NldHJldWlkCQkgNzAKLSNkZWZpbmUgX19OUl9zZXRyZWdpZAkJIDcxCi0jZGVmaW5lIF9fTlJfc2lnc3VzcGVuZAkJIDcyCi0jZGVmaW5lIF9fTlJfc2lncGVuZGluZwkJIDczCi0jZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUJIDc0Ci0jZGVmaW5lIF9fTlJfc2V0cmxpbWl0CQkgNzUKLSNkZWZpbmUgX19OUl9nZXRybGltaXQJCSA3NgotI2RlZmluZSBfX05SX2dldHJ1c2FnZQkJIDc3Ci0jZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5CSA3OAotI2RlZmluZSBfX05SX3NldHRpbWVvZmRheQkgNzkKLSNkZWZpbmUgX19OUl9nZXRncm91cHMJCSA4MAotI2RlZmluZSBfX05SX3NldGdyb3VwcwkJIDgxCi0jZGVmaW5lIF9fTlJfc2VsZWN0CQkgODIKLSNkZWZpbmUgX19OUl9zeW1saW5rCQkgODMKLSNkZWZpbmUgX19OUl9vbGRsc3RhdAkJIDg0Ci0jZGVmaW5lIF9fTlJfcmVhZGxpbmsJCSA4NQotI2RlZmluZSBfX05SX3VzZWxpYgkJIDg2Ci0jZGVmaW5lIF9fTlJfc3dhcG9uCQkgODcKLSNkZWZpbmUgX19OUl9yZWJvb3QJCSA4OAotI2RlZmluZSBfX05SX3JlYWRkaXIJCSA4OQotI2RlZmluZSBfX05SX21tYXAJCSA5MAotI2RlZmluZSBfX05SX211bm1hcAkJIDkxCi0jZGVmaW5lIF9fTlJfdHJ1bmNhdGUJCSA5MgotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZQkJIDkzCi0jZGVmaW5lIF9fTlJfZmNobW9kCQkgOTQKLSNkZWZpbmUgX19OUl9mY2hvd24JCSA5NQotI2RlZmluZSBfX05SX2dldHByaW9yaXR5CSA5NgotI2RlZmluZSBfX05SX3NldHByaW9yaXR5CSA5NwotI2RlZmluZSBfX05SX3Byb2ZpbAkJIDk4Ci0jZGVmaW5lIF9fTlJfc3RhdGZzCQkgOTkKLSNkZWZpbmUgX19OUl9mc3RhdGZzCQkxMDAKLSNkZWZpbmUgX19OUl9pb3Blcm0JCTEwMQotI2RlZmluZSBfX05SX3NvY2tldGNhbGwJCTEwMgotI2RlZmluZSBfX05SX3N5c2xvZwkJMTAzCi0jZGVmaW5lIF9fTlJfc2V0aXRpbWVyCQkxMDQKLSNkZWZpbmUgX19OUl9nZXRpdGltZXIJCTEwNQotI2RlZmluZSBfX05SX3N0YXQJCTEwNgotI2RlZmluZSBfX05SX2xzdGF0CQkxMDcKLSNkZWZpbmUgX19OUl9mc3RhdAkJMTA4Ci0jZGVmaW5lIF9fTlJfb2xkdW5hbWUJCTEwOQotI2RlZmluZSBfX05SX2lvcGwJCS8qIDExMCAqLyBub3Qgc3VwcG9ydGVkCi0jZGVmaW5lIF9fTlJfdmhhbmd1cAkJMTExCi0jZGVmaW5lIF9fTlJfaWRsZQkJLyogMTEyICovIE9ic29sZXRlCi0jZGVmaW5lIF9fTlJfdm04NgkJLyogMTEzICovIG5vdCBzdXBwb3J0ZWQKLSNkZWZpbmUgX19OUl93YWl0NAkJMTE0Ci0jZGVmaW5lIF9fTlJfc3dhcG9mZgkJMTE1Ci0jZGVmaW5lIF9fTlJfc3lzaW5mbwkJMTE2Ci0jZGVmaW5lIF9fTlJfaXBjCQkxMTcKLSNkZWZpbmUgX19OUl9mc3luYwkJMTE4Ci0jZGVmaW5lIF9fTlJfc2lncmV0dXJuCQkxMTkKLSNkZWZpbmUgX19OUl9jbG9uZQkJMTIwCi0jZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZQkxMjEKLSNkZWZpbmUgX19OUl91bmFtZQkJMTIyCi0jZGVmaW5lIF9fTlJfY2FjaGVmbHVzaAkJMTIzCi0jZGVmaW5lIF9fTlJfYWRqdGltZXgJCTEyNAotI2RlZmluZSBfX05SX21wcm90ZWN0CQkxMjUKLSNkZWZpbmUgX19OUl9zaWdwcm9jbWFzawkxMjYKLSNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlCTEyNwotI2RlZmluZSBfX05SX2luaXRfbW9kdWxlCTEyOAotI2RlZmluZSBfX05SX2RlbGV0ZV9tb2R1bGUJMTI5Ci0jZGVmaW5lIF9fTlJfZ2V0X2tlcm5lbF9zeW1zCTEzMAotI2RlZmluZSBfX05SX3F1b3RhY3RsCQkxMzEKLSNkZWZpbmUgX19OUl9nZXRwZ2lkCQkxMzIKLSNkZWZpbmUgX19OUl9mY2hkaXIJCTEzMwotI2RlZmluZSBfX05SX2JkZmx1c2gJCTEzNAotI2RlZmluZSBfX05SX3N5c2ZzCQkxMzUKLSNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkxMzYKLSNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkxMzcgLyogU3lzY2FsbCBmb3IgQW5kcmV3IEZpbGUgU3lzdGVtICovCi0jZGVmaW5lIF9fTlJfc2V0ZnN1aWQJCTEzOAotI2RlZmluZSBfX05SX3NldGZzZ2lkCQkxMzkKLSNkZWZpbmUgX19OUl9fbGxzZWVrCQkxNDAKLSNkZWZpbmUgX19OUl9nZXRkZW50cwkJMTQxCi0jZGVmaW5lIF9fTlJfX25ld3NlbGVjdAkJMTQyCi0jZGVmaW5lIF9fTlJfZmxvY2sJCTE0MwotI2RlZmluZSBfX05SX21zeW5jCQkxNDQKLSNkZWZpbmUgX19OUl9yZWFkdgkJMTQ1Ci0jZGVmaW5lIF9fTlJfd3JpdGV2CQkxNDYKLSNkZWZpbmUgX19OUl9nZXRzaWQJCTE0NwotI2RlZmluZSBfX05SX2ZkYXRhc3luYwkJMTQ4Ci0jZGVmaW5lIF9fTlJfX3N5c2N0bAkJMTQ5Ci0jZGVmaW5lIF9fTlJfbWxvY2sJCTE1MAotI2RlZmluZSBfX05SX211bmxvY2sJCTE1MQotI2RlZmluZSBfX05SX21sb2NrYWxsCQkxNTIKLSNkZWZpbmUgX19OUl9tdW5sb2NrYWxsCQkxNTMKLSNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbQkJMTU0Ci0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0JCTE1NQotI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlcgkJMTU2Ci0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCQkxNTcKLSNkZWZpbmUgX19OUl9zY2hlZF95aWVsZAkJMTU4Ci0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAkxNTkKLSNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCTE2MAotI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAkxNjEKLSNkZWZpbmUgX19OUl9uYW5vc2xlZXAJCTE2MgotI2RlZmluZSBfX05SX21yZW1hcAkJMTYzCi0jZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkxNjQKLSNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCTE2NQotI2RlZmluZSBfX05SX2dldHBhZ2VzaXplCTE2NgotI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxNjcKLSNkZWZpbmUgX19OUl9wb2xsCQkxNjgKLSNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsCQkxNjkKLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQJCTE3MAotI2RlZmluZSBfX05SX2dldHJlc2dpZAkJMTcxCi0jZGVmaW5lIF9fTlJfcHJjdGwJCTE3MgotI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybgkxNzMKLSNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24JMTc0Ci0jZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sJMTc1Ci0jZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZwkxNzYKLSNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQJMTc3Ci0jZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvCTE3OAotI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQJMTc5Ci0jZGVmaW5lIF9fTlJfcHJlYWQ2NAkJMTgwCi0jZGVmaW5lIF9fTlJfcHdyaXRlNjQJCTE4MQotI2RlZmluZSBfX05SX2xjaG93bgkJMTgyCi0jZGVmaW5lIF9fTlJfZ2V0Y3dkCQkxODMKLSNkZWZpbmUgX19OUl9jYXBnZXQJCTE4NAotI2RlZmluZSBfX05SX2NhcHNldAkJMTg1Ci0jZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sJMTg2Ci0jZGVmaW5lIF9fTlJfc2VuZGZpbGUJCTE4NwotI2RlZmluZSBfX05SX2dldHBtc2cJCTE4OAkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KLSNkZWZpbmUgX19OUl9wdXRwbXNnCQkxODkJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCi0jZGVmaW5lIF9fTlJfdmZvcmsJCTE5MAotI2RlZmluZSBfX05SX3VnZXRybGltaXQJCTE5MQotI2RlZmluZSBfX05SX21tYXAyCQkxOTIKLSNkZWZpbmUgX19OUl90cnVuY2F0ZTY0CQkxOTMKLSNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkxOTQKLSNkZWZpbmUgX19OUl9zdGF0NjQJCTE5NQotI2RlZmluZSBfX05SX2xzdGF0NjQJCTE5NgotI2RlZmluZSBfX05SX2ZzdGF0NjQJCTE5NwotI2RlZmluZSBfX05SX2Nob3duMzIJCTE5OAotI2RlZmluZSBfX05SX2dldHVpZDMyCQkxOTkKLSNkZWZpbmUgX19OUl9nZXRnaWQzMgkJMjAwCi0jZGVmaW5lIF9fTlJfZ2V0ZXVpZDMyCQkyMDEKLSNkZWZpbmUgX19OUl9nZXRlZ2lkMzIJCTIwMgotI2RlZmluZSBfX05SX3NldHJldWlkMzIJCTIwMwotI2RlZmluZSBfX05SX3NldHJlZ2lkMzIJCTIwNAotI2RlZmluZSBfX05SX2dldGdyb3VwczMyCTIwNQotI2RlZmluZSBfX05SX3NldGdyb3VwczMyCTIwNgotI2RlZmluZSBfX05SX2ZjaG93bjMyCQkyMDcKLSNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMgkyMDgKLSNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMgkyMDkKLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMgkyMTAKLSNkZWZpbmUgX19OUl9nZXRyZXNnaWQzMgkyMTEKLSNkZWZpbmUgX19OUl9sY2hvd24zMgkJMjEyCi0jZGVmaW5lIF9fTlJfc2V0dWlkMzIJCTIxMwotI2RlZmluZSBfX05SX3NldGdpZDMyCQkyMTQKLSNkZWZpbmUgX19OUl9zZXRmc3VpZDMyCQkyMTUKLSNkZWZpbmUgX19OUl9zZXRmc2dpZDMyCQkyMTYKLSNkZWZpbmUgX19OUl9waXZvdF9yb290CQkyMTcKLSNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyMjAKLSNkZWZpbmUgX19OUl9nZXR0aWQJCTIyMQotI2RlZmluZSBfX05SX3RraWxsCQkyMjIKLSNkZWZpbmUgX19OUl9zZXR4YXR0cgkJMjIzCi0jZGVmaW5lIF9fTlJfbHNldHhhdHRyCQkyMjQKLSNkZWZpbmUgX19OUl9mc2V0eGF0dHIJCTIyNQotI2RlZmluZSBfX05SX2dldHhhdHRyCQkyMjYKLSNkZWZpbmUgX19OUl9sZ2V0eGF0dHIJCTIyNwotI2RlZmluZSBfX05SX2ZnZXR4YXR0cgkJMjI4Ci0jZGVmaW5lIF9fTlJfbGlzdHhhdHRyCQkyMjkKLSNkZWZpbmUgX19OUl9sbGlzdHhhdHRyCQkyMzAKLSNkZWZpbmUgX19OUl9mbGlzdHhhdHRyCQkyMzEKLSNkZWZpbmUgX19OUl9yZW1vdmV4YXR0cgkyMzIKLSNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIJMjMzCi0jZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyCTIzNAotI2RlZmluZSBfX05SX2Z1dGV4CQkyMzUKLSNkZWZpbmUgX19OUl9zZW5kZmlsZTY0CQkyMzYKLSNkZWZpbmUgX19OUl9taW5jb3JlCQkyMzcKLSNkZWZpbmUgX19OUl9tYWR2aXNlCQkyMzgKLSNkZWZpbmUgX19OUl9mY250bDY0CQkyMzkKLSNkZWZpbmUgX19OUl9yZWFkYWhlYWQJCTI0MAotI2RlZmluZSBfX05SX2lvX3NldHVwCQkyNDEKLSNkZWZpbmUgX19OUl9pb19kZXN0cm95CQkyNDIKLSNkZWZpbmUgX19OUl9pb19nZXRldmVudHMJMjQzCi0jZGVmaW5lIF9fTlJfaW9fc3VibWl0CQkyNDQKLSNkZWZpbmUgX19OUl9pb19jYW5jZWwJCTI0NQotI2RlZmluZSBfX05SX2ZhZHZpc2U2NAkJMjQ2Ci0jZGVmaW5lIF9fTlJfZXhpdF9ncm91cAkJMjQ3Ci0jZGVmaW5lIF9fTlJfbG9va3VwX2Rjb29raWUJMjQ4Ci0jZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlCTI0OQotI2RlZmluZSBfX05SX2Vwb2xsX2N0bAkJMjUwCi0jZGVmaW5lIF9fTlJfZXBvbGxfd2FpdAkJMjUxCi0jZGVmaW5lIF9fTlJfcmVtYXBfZmlsZV9wYWdlcwkyNTIKLSNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MJMjUzCi0jZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCTI1NAotI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJMjU1Ci0jZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkyNTYKLSNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuCTI1NwotI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZQkyNTgKLSNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lCTI1OQotI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUJMjYwCi0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzCTI2MQotI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcAkyNjIKLSNkZWZpbmUgX19OUl9zdGF0ZnM2NAkJMjYzCi0jZGVmaW5lIF9fTlJfZnN0YXRmczY0CQkyNjQKLSNkZWZpbmUgX19OUl90Z2tpbGwJCTI2NQotI2RlZmluZSBfX05SX3V0aW1lcwkJMjY2Ci0jZGVmaW5lIF9fTlJfZmFkdmlzZTY0XzY0CTI2NwotI2RlZmluZSBfX05SX21iaW5kCQkyNjgKLSNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5CTI2OQotI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kJMjcwCi0jZGVmaW5lIF9fTlJfbXFfb3BlbgkJMjcxCi0jZGVmaW5lIF9fTlJfbXFfdW5saW5rCQkyNzIKLSNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQJMjczCi0jZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlCTI3NAotI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc1Ci0jZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzYKLSNkZWZpbmUgX19OUl93YWl0aWQJCTI3NwotI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCTI3OAotI2RlZmluZSBfX05SX2FkZF9rZXkJCTI3OQotI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4MAotI2RlZmluZSBfX05SX2tleWN0bAkJMjgxCi0jZGVmaW5lIF9fTlJfaW9wcmlvX3NldAkJMjgyCi0jZGVmaW5lIF9fTlJfaW9wcmlvX2dldAkJMjgzCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0CTI4NAotI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoCTI4NQotI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2gJMjg2Ci0jZGVmaW5lIF9fTlJfbWlncmF0ZV9wYWdlcwkyODcKLSNkZWZpbmUgX19OUl9vcGVuYXQJCTI4OAotI2RlZmluZSBfX05SX21rZGlyYXQJCTI4OQotI2RlZmluZSBfX05SX21rbm9kYXQJCTI5MAotI2RlZmluZSBfX05SX2ZjaG93bmF0CQkyOTEKLSNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCTI5MgotI2RlZmluZSBfX05SX2ZzdGF0YXQ2NAkJMjkzCi0jZGVmaW5lIF9fTlJfdW5saW5rYXQJCTI5NAotI2RlZmluZSBfX05SX3JlbmFtZWF0CQkyOTUKLSNkZWZpbmUgX19OUl9saW5rYXQJCTI5NgotI2RlZmluZSBfX05SX3N5bWxpbmthdAkJMjk3Ci0jZGVmaW5lIF9fTlJfcmVhZGxpbmthdAkJMjk4Ci0jZGVmaW5lIF9fTlJfZmNobW9kYXQJCTI5OQotI2RlZmluZSBfX05SX2ZhY2Nlc3NhdAkJMzAwCi0jZGVmaW5lIF9fTlJfcHNlbGVjdDYJCTMwMQotI2RlZmluZSBfX05SX3Bwb2xsCQkzMDIKLSNkZWZpbmUgX19OUl91bnNoYXJlCQkzMDMKLSNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzA0Ci0jZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMwNQotI2RlZmluZSBfX05SX3NwbGljZQkJMzA2Ci0jZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCTMwNwotI2RlZmluZSBfX05SX3RlZQkJMzA4Ci0jZGVmaW5lIF9fTlJfdm1zcGxpY2UJCTMwOQotI2RlZmluZSBfX05SX21vdmVfcGFnZXMJCTMxMAotI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5CTMxMQotI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5CTMxMgotI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTMxMwotI2RlZmluZSBfX05SX2dldGNwdQkJMzE0Ci0jZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJMzE1Ci0jZGVmaW5lIF9fTlJfdXRpbWVuc2F0CQkzMTYKLSNkZWZpbmUgX19OUl9zaWduYWxmZAkJMzE3Ci0jZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUJMzE4Ci0jZGVmaW5lIF9fTlJfZXZlbnRmZAkJMzE5Ci0jZGVmaW5lIF9fTlJfZmFsbG9jYXRlCQkzMjAKLSNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUJMzIxCi0jZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lCTMyMgotI2RlZmluZSBfX05SX3NpZ25hbGZkNAkJMzIzCi0jZGVmaW5lIF9fTlJfZXZlbnRmZDIJCTMyNAotI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEJMzI1Ci0jZGVmaW5lIF9fTlJfZHVwMwkJMzI2Ci0jZGVmaW5lIF9fTlJfcGlwZTIJCTMyNwotI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEJMzI4Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KLSNkZWZpbmUgTlJfc3lzY2FsbHMJCTMyOQotCi0jZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCi0jZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCi0jZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVElNRQotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1dBSVRQSUQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0ZBRFZJU0U2NAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUUEdSUAotI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKLSNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCi0jZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLQotLyoKLSAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKLSAqCi0gKiBXaGF0IHdlIHdhbnQgaXMgX19hdHRyaWJ1dGVfXygod2VhayxhbGlhcygic3lzX25pX3N5c2NhbGwiKSkpLAotICogYnV0IGl0IGRvZXNuJ3Qgd29yayBvbiBhbGwgdG9vbGNoYWlucywgc28gd2UganVzdCBkbyBpdCBieSBoYW5kCi0gKi8KLSNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fTTY4S19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbnN0YWxsLnNoIGIvYXJjaC9tNjhrL2luc3RhbGwuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM2YmFlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbTY4ay9pbnN0YWxsLnNoCkBAIC0wLDAgKzEsNTIgQEAKKyMhL2Jpbi9zaAorIworIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisjIGZvciBtb3JlIGRldGFpbHMuCisjCisjIENvcHlyaWdodCAoQykgMTk5NSBieSBMaW51cyBUb3J2YWxkcworIworIyBBZGFwdGVkIGZyb20gY29kZSBpbiBhcmNoL2kzODYvYm9vdC9NYWtlZmlsZSBieSBILiBQZXRlciBBbnZpbgorIworIyAibWFrZSBpbnN0YWxsIiBzY3JpcHQgZm9yIG02OGsgYXJjaGl0ZWN0dXJlCisjCisjIEFyZ3VtZW50czoKKyMgICAkMSAtIGtlcm5lbCB2ZXJzaW9uCisjICAgJDIgLSBrZXJuZWwgaW1hZ2UgZmlsZQorIyAgICQzIC0ga2VybmVsIG1hcCBmaWxlCisjICAgJDQgLSBkZWZhdWx0IGluc3RhbGwgcGF0aCAoYmxhbmsgaWYgcm9vdCBkaXJlY3RvcnkpCisjCisKK3ZlcmlmeSAoKSB7CisJaWYgWyAhIC1mICIkMSIgXTsgdGhlbgorCQllY2hvICIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMT4mMgorCQllY2hvICIgKioqIE1pc3NpbmcgZmlsZTogJDEiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMT4mMgorCQllY2hvICcgKioqIFlvdSBuZWVkIHRvIHJ1biAibWFrZSIgYmVmb3JlICJtYWtlIGluc3RhbGwiLicgMT4mMgorCQllY2hvICIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMT4mMgorCQlleGl0IDEKKwlmaQorfQorCisjIE1ha2Ugc3VyZSB0aGUgZmlsZXMgYWN0dWFsbHkgZXhpc3QKK3ZlcmlmeSAiJDIiCit2ZXJpZnkgIiQzIgorCisjIFVzZXIgbWF5IGhhdmUgYSBjdXN0b20gaW5zdGFsbCBzY3JpcHQKKworaWYgWyAteCB+L2Jpbi8ke0NST1NTX0NPTVBJTEV9aW5zdGFsbGtlcm5lbCBdOyB0aGVuIGV4ZWMgfi9iaW4vJHtDUk9TU19DT01QSUxFfWluc3RhbGxrZXJuZWwgIiRAIjsgZmkKK2lmIFsgLXggL3NiaW4vJHtDUk9TU19DT01QSUxFfWluc3RhbGxrZXJuZWwgXTsgdGhlbiBleGVjIC9zYmluLyR7Q1JPU1NfQ09NUElMRX1pbnN0YWxsa2VybmVsICIkQCI7IGZpCisKKyMgRGVmYXVsdCBpbnN0YWxsIC0gc2FtZSBhcyBtYWtlIHpsaWxvCisKK2lmIFsgLWYgJDQvdm1saW51eiBdOyB0aGVuCisJbXYgJDQvdm1saW51eiAkNC92bWxpbnV6Lm9sZAorZmkKKworaWYgWyAtZiAkNC9TeXN0ZW0ubWFwIF07IHRoZW4KKwltdiAkNC9TeXN0ZW0ubWFwICQ0L1N5c3RlbS5vbGQKK2ZpCisKK2NhdCAkMiA+ICQ0L3ZtbGludXoKK2NwICQzICQ0L1N5c3RlbS5tYXAKKworc3luYwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9jb25maWcuYyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKaW5kZXggOThiNmJjZi4uYmUwMTc5OCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9jb25maWcuYworKysgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCkBAIC0yMiw2ICsyMiw3IEBACiAvKiBrZXliICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Z0X2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2RlZmluZSBCT09USU5GT19DT01QQVRfMV8wCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CkBAIC00Myw2ICs0NCwxMCBAQAogI2luY2x1ZGUgPGFzbS9tYWNfb3NzLmg+CiAjaW5jbHVkZSA8YXNtL21hY19wc2MuaD4KIAorLyogcGxhdGZvcm0gZGV2aWNlIGluZm8gKi8KKworI2RlZmluZSBTV0lNX0lPX1NJWkUgMHgyMDAwCS8qIFNXSU0gSU8gcmVzb3VyY2Ugc2l6ZSAqLworCiAvKiBNYWMgYm9vdGluZm8gc3RydWN0ICovCiAKIHN0cnVjdCBtYWNfYm9vdGVyX2RhdGEgbWFjX2JpX2RhdGE7CkBAIC0yMjQsNyArMjI5LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfSVdNCiAJfSwKIAogCS8qCkBAIC0yMzksNyArMjQ1LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfSVdNCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJWCwKIAkJLm5hbWUJCT0gIklJeCIsCkBAIC0yNDcsNyArMjU0LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSUNYLAogCQkubmFtZQkJPSAiSUljeCIsCkBAIC0yNTUsNyArMjYzLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9TRTMwLAogCQkubmFtZQkJPSAiU0UvMzAiLApAQCAtMjYzLDcgKzI3Miw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCiAJLyoKQEAgLTI4MCw3ICsyOTAsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlGWCwKIAkJLm5hbWUJCT0gIklJZngiLApAQCAtMjg4LDcgKzI5OSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JT1AsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0lJU0ksCiAJCS5uYW1lCQk9ICJJSXNpIiwKQEAgLTI5Niw3ICszMDgsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfSUlWSSwKIAkJLm5hbWUJCT0gIklJdmkiLApAQCAtMzA0LDcgKzMxNyw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9JSVZYLAogCQkubmFtZQkJPSAiSUl2eCIsCkBAIC0zMTIsNyArMzI2LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC0zMjYsNyArMzQxLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX0NDTCwKIAkJLm5hbWUJCT0gIkNvbG9yIENsYXNzaWMiLApAQCAtMzM0LDcgKzM1MCw5IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVN9LAorCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCisJfSwKIAogCS8qCiAJICoJU29tZSBNYWMgTEMgbWFjaGluZXMuIEJhc2ljYWxseSB0aGUgc2FtZSBhcyB0aGUgSUljaSwgQURCIGxpa2UgSUlzaQpAQCAtMzQ3LDcgKzM2NSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9MQ0lJLAogCQkubmFtZQkJPSAiTEMgSUkiLApAQCAtMzU1LDcgKzM3NCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9MQ0lJSSwKIAkJLm5hbWUJCT0gIkxDIElJSSIsCkBAIC0zNjMsNyArMzgzLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwKIAogCS8qCkBAIC0zODMsNyArNDA0LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MDVfQUNDLAogCQkubmFtZQkJPSAiUXVhZHJhIDYwNSIsCkBAIC0zOTEsNyArNDEzLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E2MTAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgNjEwIiwKQEAgLTQwMCw3ICs0MjMsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTYzMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2MzAiLApAQCAtNDEwLDcgKzQzNCw4IEBACiAJCS5pZGVfdHlwZQk9IE1BQ19JREVfUVVBRFJBLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTY1MCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA2NTAiLApAQCAtNDE5LDcgKzQ0NCw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sCiAJLyoJVGhlIFE3MDAgZG9lcyBoYXZlIGEgTlMgU29uaWMgKi8KIAl7CkBAIC00MzAsNyArNDU2LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTIsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9RODAwLAogCQkubmFtZQkJPSAiUXVhZHJhIDgwMCIsCkBAIC00MzksNyArNDY2LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E4NDAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgODQwQVYiLApAQCAtNDQ4LDcgKzQ3Niw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEzLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1BTQywKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfTUFDRSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfQVYKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUTkwMCwKIAkJLm5hbWUJCT0gIlF1YWRyYSA5MDAiLApAQCAtNDU3LDcgKzQ4Niw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEyLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lPUCwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fSU9QCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1E5NTAsCiAJCS5uYW1lCQk9ICJRdWFkcmEgOTUwIiwKQEAgLTQ2Niw3ICs0OTYsOCBAQAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfUVVBRFJBMiwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JT1AsCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0lPUAogCX0sCiAKIAkvKgpAQCAtNDgwLDcgKzUxMSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNDc1LAogCQkubmFtZQkJPSAgIlBlcmZvcm1hIDQ3NSIsCkBAIC00ODgsNyArNTIwLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDQ3NUYsCiAJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNDc1IiwKQEAgLTQ5Niw3ICs1MjksOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QNTIwLAogCQkubmFtZQkJPSAgIlBlcmZvcm1hIDUyMCIsCkBAIC01MDQsNyArNTM4LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A1NTAsCiAJCS5uYW1lCQk9ICAiUGVyZm9ybWEgNTUwIiwKQEAgLTUxMiw3ICs1NDcsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LAogCS8qIFRoZXNlIGhhdmUgdGhlIGNvbW0gc2xvdCwgYW5kIHRoZXJlZm9yZSB0aGUgcG9zc2liaWxpdHkgb2YgU09OSUMgZXRoZXJuZXQgKi8KIAl7CkBAIC01MjMsNyArNTU5LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQSwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLmV0aGVyX3R5cGUJPSBNQUNfRVRIRVJfU09OSUMsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjEKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUDU4OCwKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDU4OCIsCkBAIC01MzMsNyArNTcwLDggQEAKIAkJLmlkZV90eXBlCT0gTUFDX0lERV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5ldGhlcl90eXBlCT0gTUFDX0VUSEVSX1NPTklDLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIxCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1RWLAogCQkubmFtZQkJPSAiVFYiLApAQCAtNTQxLDcgKzU3OSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1A2MDAsCiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA2MDAiLApAQCAtNTQ5LDcgKzU4OCw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAKIAkvKgpAQCAtNTY1LDcgKzYwNSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9DNjUwLAogCQkubmFtZQkJPSAiQ2VudHJpcyA2NTAiLApAQCAtNTc0LDcgKzYxNSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9RVUFEUkEsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMQogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9DNjYwLAogCQkubmFtZQkJPSAiQ2VudHJpcyA2NjBBViIsCkBAIC01ODMsNyArNjI1LDggQEAKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX1FVQURSQTMsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUFNDLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9NQUNFLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9BVgogCX0sCiAKIAkvKgpAQCAtNTk5LDcgKzY0Miw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE0NSwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNDUiLApAQCAtNjA3LDcgKzY1MSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE1MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNTAiLApAQCAtNjE2LDcgKzY2MSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5pZGVfdHlwZQk9IE1BQ19JREVfUEIsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTYwLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2MCIsCkBAIC02MjQsNyArNjcwLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTY1LAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE2NSIsCkBAIC02MzIsNyArNjc5LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9RVUFEUkEsCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMTY1QywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxNjVjIiwKQEAgLTY0MCw3ICs2ODgsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxNzAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTcwIiwKQEAgLTY0OCw3ICs2OTcsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxODAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgMTgwIiwKQEAgLTY1Niw3ICs3MDYsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX1FVQURSQSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIxODBDLAogCQkubmFtZQkJPSAiUG93ZXJCb29rIDE4MGMiLApAQCAtNjY0LDcgKzcxNSw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfUVVBRFJBLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjE5MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayAxOTAiLApAQCAtNjczLDcgKzcyNSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5pZGVfdHlwZQk9IE1BQ19JREVfQkFCT09OLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjUyMCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayA1MjAiLApAQCAtNjgyLDcgKzczNSw4IEBACiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAogCQkuZXRoZXJfdHlwZQk9IE1BQ19FVEhFUl9TT05JQywKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAKIAkvKgpAQCAtNzAyLDcgKzc1Niw4IEBACiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUljaSwKIAkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19RVUFEUkEsCi0JCS5udWJ1c190eXBlCT0gTUFDX05VQlVTCisJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAorCQkuZmxvcHB5X3R5cGUgICAgPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIKIAl9LCB7CiAJCS5pZGVudAkJPSBNQUNfTU9ERUxfUEIyMzAsCiAJCS5uYW1lCQk9ICJQb3dlckJvb2sgRHVvIDIzMCIsCkBAIC03MTAsNyArNzY1LDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI1MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjUwIiwKQEAgLTcxOCw3ICs3NzQsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjcwQywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjcwYyIsCkBAIC03MjYsNyArNzgzLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sIHsKIAkJLmlkZW50CQk9IE1BQ19NT0RFTF9QQjI4MCwKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjgwIiwKQEAgLTczNCw3ICs3OTIsOCBAQAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJY2ksCiAJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfUVVBRFJBLAotCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUworCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKKwkJLmZsb3BweV90eXBlICAgID0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyCiAJfSwgewogCQkuaWRlbnQJCT0gTUFDX01PREVMX1BCMjgwQywKIAkJLm5hbWUJCT0gIlBvd2VyQm9vayBEdW8gMjgwYyIsCkBAIC03NDIsNyArODAxLDggQEAKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSWNpLAogCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX1FVQURSQSwKLQkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMKKwkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCisJCS5mbG9wcHlfdHlwZSAgICA9IE1BQ19GTE9QUFlfU1dJTV9BRERSMgogCX0sCiAKIAkvKgpAQCAtODE1LDMgKzg3NSw0MiBAQAogCXN0cmNweShzdHIsICJNYWNpbnRvc2ggIik7CiAJc3RyY2F0KHN0ciwgbWFjaW50b3NoX2NvbmZpZy0+bmFtZSk7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3dpbV9yZXNvdXJjZXNbMV07CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN3aW1fZGV2aWNlID0geworCS5uYW1lCQk9ICJzd2ltIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHN3aW1fcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzd2ltX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptYWNfcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnN3aW1fZGV2aWNlCit9OworCitpbnQgX19pbml0IG1hY19wbGF0Zm9ybV9pbml0KHZvaWQpCit7CisJdTggKnN3aW1fYmFzZTsKKworCXN3aXRjaCAobWFjaW50b3NoX2NvbmZpZy0+ZmxvcHB5X3R5cGUpIHsKKwljYXNlIE1BQ19GTE9QUFlfU1dJTV9BRERSMToKKwkJc3dpbV9iYXNlID0gKHU4ICopKFZJQTFfQkFTRSArIDB4MUUwMDApOworCQlicmVhazsKKwljYXNlIE1BQ19GTE9QUFlfU1dJTV9BRERSMjoKKwkJc3dpbV9iYXNlID0gKHU4ICopKFZJQTFfQkFTRSArIDB4MTYwMDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlzd2ltX3Jlc291cmNlc1swXS5uYW1lID0gInN3aW0tcmVncyI7CisJc3dpbV9yZXNvdXJjZXNbMF0uc3RhcnQgPSAocmVzb3VyY2Vfc2l6ZV90KXN3aW1fYmFzZTsKKwlzd2ltX3Jlc291cmNlc1swXS5lbmQgPSAocmVzb3VyY2Vfc2l6ZV90KShzd2ltX2Jhc2UgKyBTV0lNX0lPX1NJWkUpOworCXN3aW1fcmVzb3VyY2VzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMobWFjX3BsYXRmb3JtX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUobWFjX3BsYXRmb3JtX2RldmljZXMpKTsKK30KKworYXJjaF9pbml0Y2FsbChtYWNfcGxhdGZvcm1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbWFjL3ZpYS5jIGIvYXJjaC9tNjhrL21hYy92aWEuYwppbmRleCA3ZDk3YmE1Li4xMWJjZTNjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbWFjL3ZpYS5jCisrKyBiL2FyY2gvbTY4ay9tYWMvdmlhLmMKQEAgLTY0NSwzICs2NDUsMTIgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CisKK3ZvaWQgdmlhMV9zZXRfaGVhZChpbnQgaGVhZCkKK3sKKwlpZiAoaGVhZCA9PSAwKQorCQl2aWExW3ZCdWZBXSAmPSB+VklBMUFfdkhlYWRTZWw7CisJZWxzZQorCQl2aWExW3ZCdWZBXSB8PSBWSUExQV92SGVhZFNlbDsKK30KK0VYUE9SVF9TWU1CT0wodmlhMV9zZXRfaGVhZCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjB4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIweC9jb25maWcuYwppbmRleCAwNmQ4ODdjLi44NTVmYzZhIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjB4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyMHgvY29uZmlnLmMKQEAgLTQ5LDggKzQ5LDM5IEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUyMHhfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyMHhfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHgzMDAwMCwKKwkJLmVuZAkJPSBNQ0ZfTUJBUiArIDB4MzAwMDAgKyAweDdmZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAzNiwKKwkJLmVuZAkJPSA2NCArIDM2LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDQwLAorCQkuZW5kCQk9IDY0ICsgNDAsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgNDIsCisJCS5lbmQJCT0gNjQgKyA0MiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTIweF9mZWMgPSB7CisJLm5hbWUJCQk9ICJmZWMiLAorCS5pZAkJCT0gMCwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKG01MjB4X2ZlY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBtNTIweF9mZWNfcmVzb3VyY2VzLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm01MjB4X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtNTIweF91YXJ0LAorCSZtNTIweF9mZWMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTAzLDYgKzEzNCwzMCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgdm9pZCBfX2luaXQgbTUyMHhfZmVjX2luaXQodm9pZCkKK3sKKwl1MzIgaW1yOworCXU4IHY7CisKKwkvKiBVbm1hc2sgRkVDIGludGVycnVwdHMgYXQgQ29sZEZpcmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwl3cml0ZWIoMHg0LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMzYpOworCXdyaXRlYigweDQsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lDUjAgKyA0MCk7CisJd3JpdGViKDB4NCwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSUNSMCArIDQyKTsKKworCWltciA9IHJlYWRsKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkgpOworCWltciAmPSB+MHgwMDAxRkZGMDsKKwl3cml0ZWwoaW1yLCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKTsKKworCS8qIFNldCBtdWx0aS1mdW5jdGlvbiBwaW5zIHRvIGV0aGVybmV0IG1vZGUgKi8KKwl2ID0gcmVhZGIoTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUMpOworCXdyaXRlYih2IHwgMHhmMCwgTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUMpOworCisJdiA9IHJlYWRiKE1DRl9JUFNCQVIgKyBNQ0ZfR1BJT19QQVJfRkVDSTJDKTsKKwl3cml0ZWIodiB8IDB4MGYsIE1DRl9JUFNCQVIgKyBNQ0ZfR1BJT19QQVJfRkVDSTJDKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogLyoKICAqICBQcm9ncmFtIHRoZSB2ZWN0b3IgdG8gYmUgYW4gYXV0by12ZWN0b3JlZC4KICAqLwpAQCAtMTE4LDYgKzE3Myw3IEBACiB7CiAJbWFjaF9yZXNldCA9IGNvbGRmaXJlX3Jlc2V0OwogCW01MjB4X3VhcnRzX2luaXQoKTsKKwltNTIweF9mZWNfaW5pdCgpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIzeC9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyM3gvY29uZmlnLmMKaW5kZXggMTNmMDI2MS4uNzQxMzNmMiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTIzeC9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjN4L2NvbmZpZy5jCkBAIC01MCw4ICs1MCwzOSBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01MjN4X3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01MjN4X2ZlY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBNQ0ZfTUJBUiArIDB4MTAwMCwKKwkJLmVuZAkJPSBNQ0ZfTUJBUiArIDB4MTAwMCArIDB4N2ZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDIzLAorCQkuZW5kCQk9IDY0ICsgMjMsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjcsCisJCS5lbmQJCT0gNjQgKyAyNywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyOSwKKwkJLmVuZAkJPSA2NCArIDI5LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01MjN4X2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUyM3hfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01MjN4X2ZlY19yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyM3hfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01MjN4X3VhcnQsCisJJm01MjN4X2ZlYywKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04Myw2ICsxMTQsMjUgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG01MjN4X2ZlY19pbml0KHZvaWQpCit7CisJdTMyIGltcjsKKworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCXdyaXRlYigweDI4LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjMpOworCXdyaXRlYigweDI3LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjcpOworCXdyaXRlYigweDI2LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjkpOworCisJaW1yID0gcmVhZGwoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisJaW1yICY9IH4weGY7CisJd3JpdGVsKGltciwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisJaW1yID0gcmVhZGwoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1STCk7CisJaW1yICY9IH4weGZmODAwMDAxOworCXdyaXRlbChpbXIsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkwpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiB2b2lkIG1jZl9kaXNhYmxlYWxsKHZvaWQpCiB7CiAJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCkpID0gMHhmZmZmZmZmZjsKQEAgLTEwMyw2ICsxNTMsNyBAQAogCW1jZl9kaXNhYmxlYWxsKCk7CiAJbWFjaF9yZXNldCA9IGNvbGRmaXJlX3Jlc2V0OwogCW01MjN4X3VhcnRzX2luaXQoKTsKKwltNTIzeF9mZWNfaW5pdCgpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3Mi9jb25maWcuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNzIvY29uZmlnLmMKaW5kZXggMjMwYmFlNi4uZTA0OTI0NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3Mi9jb25maWcuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjcyL2NvbmZpZy5jCkBAIC01NSw4ICs1NSwzOSBAQAogCS5kZXYucGxhdGZvcm1fZGF0YQk9IG01MjcyX3VhcnRfcGxhdGZvcm0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG01MjcyX2ZlY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBNQ0ZfTUJBUiArIDB4ODQwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHg4NDAgKyAweDFjZiwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gODYsCisJCS5lbmQJCT0gODYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDg3LAorCQkuZW5kCQk9IDg3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA4OCwKKwkJLmVuZAkJPSA4OCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtNTI3Ml9mZWMgPSB7CisJLm5hbWUJCQk9ICJmZWMiLAorCS5pZAkJCT0gMCwKKwkubnVtX3Jlc291cmNlcwkJPSBBUlJBWV9TSVpFKG01MjcyX2ZlY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQkJPSBtNTI3Ml9mZWNfcmVzb3VyY2VzLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm01MjcyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtNTI3Ml91YXJ0LAorCSZtNTI3Ml9mZWMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtOTEsNiArMTIyLDIyIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTI3Ml9mZWNfaW5pdCh2b2lkKQoreworCXUzMiBpbXI7CisKKwkvKiBVbm1hc2sgRkVDIGludGVycnVwdHMgYXQgQ29sZEZpcmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwlpbXIgPSByZWFkbChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IzKTsKKwlpbXIgPSAoaW1yICYgfjB4MDAwMDBmZmYpIHwgMHgwMDAwMGRkZDsKKwl3cml0ZWwoaW1yLCBNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IzKTsKKworCWltciA9IHJlYWRsKE1DRl9NQkFSICsgTUNGU0lNX0lDUjEpOworCWltciA9IChpbXIgJiB+MHgwZjAwMDAwMCkgfCAweDBkMDAwMDAwOworCXdyaXRlbChpbXIsIE1DRl9NQkFSICsgTUNGU0lNX0lDUjEpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiB2b2lkIG1jZl9kaXNhYmxlYWxsKHZvaWQpCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZwkqaWNycDsKQEAgLTE1NSw2ICsyMDIsNyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9CU1Aodm9pZCkKIHsKIAltNTI3Ml91YXJ0c19pbml0KCk7CisJbTUyNzJfZmVjX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtNTI3Ml9kZXZpY2VzLCBBUlJBWV9TSVpFKG01MjcyX2RldmljZXMpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyN3gvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjd4L2NvbmZpZy5jCmluZGV4IDczY2QxYWUuLjQ5MzQzZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyN3gvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI3eC9jb25maWcuYwpAQCAtNTAsOCArNTAsNzMgQEAKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSBtNTI3eF91YXJ0X3BsYXRmb3JtLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTI3eF9mZWMwX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHgxMDAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgxMDAwICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjMsCisJCS5lbmQJCT0gNjQgKyAyMywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyNywKKwkJLmVuZAkJPSA2NCArIDI3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI5LAorCQkuZW5kCQk9IDY0ICsgMjksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTI3eF9mZWMxX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHgxODAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgxODAwICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDEyOCArIDIzLAorCQkuZW5kCQk9IDEyOCArIDIzLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSAxMjggKyAyNywKKwkJLmVuZAkJPSAxMjggKyAyNywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gMTI4ICsgMjksCisJCS5lbmQJCT0gMTI4ICsgMjksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUyN3hfZmVjW10gPSB7CisJeworCQkubmFtZQkJPSAiZmVjIiwKKwkJLmlkCQk9IDAsCisJCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtNTI3eF9mZWMwX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZQk9IG01Mjd4X2ZlYzBfcmVzb3VyY2VzLAorCX0sCisJeworCQkubmFtZQkJPSAiZmVjIiwKKwkJLmlkCQk9IDEsCisJCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShtNTI3eF9mZWMxX3Jlc291cmNlcyksCisJCS5yZXNvdXJjZQk9IG01Mjd4X2ZlYzFfcmVzb3VyY2VzLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbTUyN3hfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJm01Mjd4X3VhcnQsCisJJm01Mjd4X2ZlY1swXSwKKyNpZmRlZiBDT05GSUdfRkVDMgorCSZtNTI3eF9mZWNbMV0sCisjZW5kaWYKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC05Nyw2ICsxNjIsNTEgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgX19pbml0IG01Mjd4X2ZlY19pcnFfaW5pdChpbnQgbnIpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCXUzMiBpbXI7CisKKwliYXNlID0gTUNGX0lQU0JBUiArIChuciA/IE1DRklDTV9JTlRDMSA6IE1DRklDTV9JTlRDMCk7CisKKwl3cml0ZWIoMHgyOCwgYmFzZSArIE1DRklOVENfSUNSMCArIDIzKTsKKwl3cml0ZWIoMHgyNywgYmFzZSArIE1DRklOVENfSUNSMCArIDI3KTsKKwl3cml0ZWIoMHgyNiwgYmFzZSArIE1DRklOVENfSUNSMCArIDI5KTsKKworCWltciA9IHJlYWRsKGJhc2UgKyBNQ0ZJTlRDX0lNUkgpOworCWltciAmPSB+MHhmOworCXdyaXRlbChpbXIsIGJhc2UgKyBNQ0ZJTlRDX0lNUkgpOworCWltciA9IHJlYWRsKGJhc2UgKyBNQ0ZJTlRDX0lNUkwpOworCWltciAmPSB+MHhmZjgwMDAwMTsKKwl3cml0ZWwoaW1yLCBiYXNlICsgTUNGSU5UQ19JTVJMKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG01Mjd4X2ZlY19pbml0KHZvaWQpCit7CisJdTE2IHBhcjsKKwl1OCB2OworCisJbTUyN3hfZmVjX2lycV9pbml0KDApOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSBmb3IgZmVjMCAqLworCXBhciA9IHJlYWR3KE1DRl9JUFNCQVIgKyAweDEwMDA4Mik7CisJd3JpdGV3KHBhciB8IDB4ZjAwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwODIpOworCXYgPSByZWFkYihNQ0ZfSVBTQkFSICsgMHgxMDAwNzgpOworCXdyaXRlYih2IHwgMHhjMCwgTUNGX0lQU0JBUiArIDB4MTAwMDc4KTsKKworI2lmZGVmIENPTkZJR19GRUMyCisJbTUyN3hfZmVjX2lycV9pbml0KDEpOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSBmb3IgZmVjMSAqLworCXBhciA9IHJlYWR3KE1DRl9JUFNCQVIgKyAweDEwMDA4Mik7CisJd3JpdGV3KHBhciB8IDB4YTAsIE1DRl9JUFNCQVIgKyAweDEwMDA4Mik7CisJdiA9IHJlYWRiKE1DRl9JUFNCQVIgKyAweDEwMDA3OSk7CisJd3JpdGViKHYgfCAweGMwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwNzkpOworI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHZvaWQgbWNmX2Rpc2FibGVhbGwodm9pZCkKIHsKIAkqKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JTVJIKSkgPSAweGZmZmZmZmZmOwpAQCAtMTE2LDEzICsyMjYsMTQgQEAKIHsKIAltY2ZfZGlzYWJsZWFsbCgpOwogCW1hY2hfcmVzZXQgPSBjb2xkZmlyZV9yZXNldDsKKwltNTI3eF91YXJ0c19pbml0KCk7CisJbTUyN3hfZmVjX2luaXQoKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9CU1Aodm9pZCkKIHsKLQltNTI3eF91YXJ0c19pbml0KCk7CiAJcGxhdGZvcm1fYWRkX2RldmljZXMobTUyN3hfZGV2aWNlcywgQVJSQVlfU0laRShtNTI3eF9kZXZpY2VzKSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI4eC9jb25maWcuYwppbmRleCA0NGJhZWIyLi5iZWU1MjZmIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81Mjh4L2NvbmZpZy5jCisrKyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyOHgvY29uZmlnLmMKQEAgLTU3LDggKzU3LDQwIEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhCT0gbTUyOHhfdWFydF9wbGF0Zm9ybSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbTUyOHhfZmVjX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1DRl9NQkFSICsgMHgxMDAwLAorCQkuZW5kCQk9IE1DRl9NQkFSICsgMHgxMDAwICsgMHg3ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgMjMsCisJCS5lbmQJCT0gNjQgKyAyMywKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyAyNywKKwkJLmVuZAkJPSA2NCArIDI3LAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDI5LAorCQkuZW5kCQk9IDY0ICsgMjksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTUyOHhfZmVjID0geworCS5uYW1lCQkJPSAiZmVjIiwKKwkuaWQJCQk9IDAsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShtNTI4eF9mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJCT0gbTUyOHhfZmVjX3Jlc291cmNlcywKK307CisKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm01Mjh4X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtNTI4eF91YXJ0LAorCSZtNTI4eF9mZWMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtOTksNiArMTMxLDMxIEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyB2b2lkIF9faW5pdCBtNTI4eF9mZWNfaW5pdCh2b2lkKQoreworCXUzMiBpbXI7CisJdTE2IHYxNjsKKworCS8qIFVubWFzayBGRUMgaW50ZXJydXB0cyBhdCBDb2xkRmlyZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCXdyaXRlYigweDI4LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjMpOworCXdyaXRlYigweDI3LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjcpOworCXdyaXRlYigweDI2LCBNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsgTUNGSU5UQ19JQ1IwICsgMjkpOworCisJaW1yID0gcmVhZGwoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisJaW1yICY9IH4weGY7CisJd3JpdGVsKGltciwgTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCk7CisJaW1yID0gcmVhZGwoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1STCk7CisJaW1yICY9IH4weGZmODAwMDAxOworCXdyaXRlbChpbXIsIE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKyBNQ0ZJTlRDX0lNUkwpOworCisJLyogU2V0IG11bHRpLWZ1bmN0aW9uIHBpbnMgdG8gZXRoZXJuZXQgbW9kZSBmb3IgZmVjMCAqLworCXYxNiA9IHJlYWR3KE1DRl9JUFNCQVIgKyAweDEwMDA1Nik7CisJd3JpdGV3KHYxNiB8IDB4ZjAwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwNTYpOworCXdyaXRlYigweGMwLCBNQ0ZfSVBTQkFSICsgMHgxMDAwNTgpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiB2b2lkIG1jZl9kaXNhYmxlYWxsKHZvaWQpCiB7CiAJKigodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX0lQU0JBUiArIE1DRklDTV9JTlRDMCArIE1DRklOVENfSU1SSCkpID0gMHhmZmZmZmZmZjsKQEAgLTE1OCw2ICsyMTUsNyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9CU1Aodm9pZCkKIHsKIAltNTI4eF91YXJ0c19pbml0KCk7CisJbTUyOHhfZmVjX2luaXQoKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhtNTI4eF9kZXZpY2VzLCBBUlJBWV9TSVpFKG01Mjh4X2RldmljZXMpKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMngvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzJ4L2NvbmZpZy5jCmluZGV4IGEzNDc2MjMuLjU5MWYyZjggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMngvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMyeC9jb25maWcuYwpAQCAtNjEsOCArNjEsMzggQEAKIAkuZGV2LnBsYXRmb3JtX2RhdGEJPSBtNTMyeF91YXJ0X3BsYXRmb3JtLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNTMyeF9mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gMHhmYzAzMDAwMCwKKwkJLmVuZAkJPSAweGZjMDMwN2ZmLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAkJPSA2NCArIDM2LAorCQkuZW5kCQk9IDY0ICsgMzYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLnN0YXJ0CQk9IDY0ICsgNDAsCisJCS5lbmQJCT0gNjQgKyA0MCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkuc3RhcnQJCT0gNjQgKyA0MiwKKwkJLmVuZAkJPSA2NCArIDQyLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG01MzJ4X2ZlYyA9IHsKKwkubmFtZQkJCT0gImZlYyIsCisJLmlkCQkJPSAwLAorCS5udW1fcmVzb3VyY2VzCQk9IEFSUkFZX1NJWkUobTUzMnhfZmVjX3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IG01MzJ4X2ZlY19yZXNvdXJjZXMsCit9Owogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm01MzJ4X2RldmljZXNbXSBfX2luaXRkYXRhID0gewogCSZtNTMyeF91YXJ0LAorCSZtNTMyeF9mZWMsCiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtOTMsNiArMTIzLDI0IEBACiAJZm9yIChsaW5lID0gMDsgKGxpbmUgPCBucmxpbmVzKTsgbGluZSsrKQogCQltNTMyeF91YXJ0X2luaXRfbGluZShsaW5lLCBtNTMyeF91YXJ0X3BsYXRmb3JtW2xpbmVdLmlycSk7CiB9CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBfX2luaXQgbTUzMnhfZmVjX2luaXQodm9pZCkKK3sKKwkvKiBVbm1hc2sgRkVDIGludGVycnVwdHMgYXQgQ29sZEZpcmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwlNQ0ZfSU5UQzBfSUNSMzYgPSAweDI7CisJTUNGX0lOVEMwX0lDUjQwID0gMHgyOworCU1DRl9JTlRDMF9JQ1I0MiA9IDB4MjsKKworCU1DRl9JTlRDMF9JTVJIICY9IH4oTUNGX0lOVENfSU1SSF9JTlRfTUFTSzM2IHwKKwkJTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQwIHwgTUNGX0lOVENfSU1SSF9JTlRfTUFTSzQyKTsKKworCS8qIFNldCBtdWx0aS1mdW5jdGlvbiBwaW5zIHRvIGV0aGVybmV0IG1vZGUgZm9yIGZlYzAgKi8KKwlNQ0ZfR1BJT19QQVJfRkVDSTJDIHw9IChNQ0ZfR1BJT19QQVJfRkVDSTJDX1BBUl9NRENfRU1EQyB8CisJCU1DRl9HUElPX1BBUl9GRUNJMkNfUEFSX01ESU9fRU1ESU8pOworCU1DRl9HUElPX1BBUl9GRUMgPSAoTUNGX0dQSU9fUEFSX0ZFQ19QQVJfRkVDXzdXX0ZFQyB8CisJCU1DRl9HUElPX1BBUl9GRUNfUEFSX0ZFQ19NSUlfRkVDKTsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMTUwLDYgKzE5OCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBpbml0X0JTUCh2b2lkKQogewogCW01MzJ4X3VhcnRzX2luaXQoKTsKKwltNTMyeF9mZWNfaW5pdCgpOwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKG01MzJ4X2RldmljZXMsIEFSUkFZX1NJWkUobTUzMnhfZGV2aWNlcykpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lvZGV2LmMgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYwppbmRleCBhMWUzNTI2Li5kZmJmZDdlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYworKysgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaW9kZXYuYwpAQCAtMzMsOCArMzMsOCBAQAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzb3VyY2UgKmlvZGV2X2dldF9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKLXN0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBkZXZpY2UgKik7Ci1zdGF0aWMgaW50IF9fZXhpdCBpb2Rldl9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyBpbnQgX19pbml0IGlvZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CitzdGF0aWMgaW50IF9fZXhpdCBpb2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKIHN0YXRpYyBpbnQgaW9kZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiBzdGF0aWMgaW50IGlvZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIHNzaXplX3QgaW9kZXZfcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QgcywgbG9mZl90ICopOwpAQCAtNjUsMTMgKzY1LDEzIEBACiAJLmZvcHMJCT0gJmZvcHMKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBpb2Rldl9kcml2ZXIgPQotewotCS5uYW1lCQk9IChjaGFyICopIGlvZGV2X25hbWUsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW9kZXZfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IGlvZGV2X25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSBpb2Rldl9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKGlvZGV2X3JlbW92ZSkKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGlvZGV2X3JlbW92ZSksCiB9OwogCiAKQEAgLTg5LDExICs4OSwxMCBAQAogCiAKIC8qIE5vIGhvdHBsdWdnaW5nIG9uIHRoZSBwbGF0Zm9ybSBidXMgLSB1c2UgX19pbml0ICovCi1zdGF0aWMgaW50IF9faW5pdCBpb2Rldl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBpb2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGNvbnN0IHBkdiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWNvbnN0IHN0cnVjdCByZXNvdXJjZSAqIGNvbnN0IHJpID0KLQkJaW9kZXZfZ2V0X3Jlc291cmNlKHBkdiwgSU9ERVZfUkVTT1VSQ0VfSVJRLCBJT1JFU09VUkNFX0lSUSk7CisJCWlvZGV2X2dldF9yZXNvdXJjZShkZXYsIElPREVWX1JFU09VUkNFX0lSUSwgSU9SRVNPVVJDRV9JUlEpOwogCiAJaWYgKHVubGlrZWx5KCFyaSkpCiAJCXJldHVybiAtRU5YSU87CkBAIC0xMDQsNyArMTAzLDcgQEAKIAogCiAKLXN0YXRpYyBpbnQgX19leGl0IGlvZGV2X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBpb2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXJldHVybiBtaXNjX2RlcmVnaXN0ZXIoJm1pc2NkZXYpOwogfQpAQCAtMTYwLDE0ICsxNTksMTQgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW9kZXZfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZpb2Rldl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmlvZGV2X2RyaXZlcik7CiB9CiAKIAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaW9kZXZfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmaW9kZXZfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaW9kZXZfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaW9kZXZfaW5pdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaAppbmRleCAwNDE3NTE2Li41MjZmMzI3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaApAQCAtMTM5MSwxMSArMTM5MSwxMSBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQJCQkJCVwKIHNldF9jMF8jI25hbWUodW5zaWduZWQgaW50IHNldCkJCQkJCVwKIHsJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgcmVzOwkJCQkJXAorCXVuc2lnbmVkIGludCByZXMsIG5ldzsJCQkJCVwKIAkJCQkJCQkJXAogCXJlcyA9IHJlYWRfYzBfIyNuYW1lKCk7CQkJCQlcCi0JcmVzIHw9IHNldDsJCQkJCQlcCi0Jd3JpdGVfYzBfIyNuYW1lKHJlcyk7CQkJCQlcCisJbmV3ID0gcmVzIHwgc2V0OwkJCQkJXAorCXdyaXRlX2MwXyMjbmFtZShuZXcpOwkJCQkJXAogCQkJCQkJCQlcCiAJcmV0dXJuIHJlczsJCQkJCQlcCiB9CQkJCQkJCQlcCkBAIC0xNDAzLDI0ICsxNDAzLDI0IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAkJCQkJXAogY2xlYXJfYzBfIyNuYW1lKHVuc2lnbmVkIGludCBjbGVhcikJCQkJXAogewkJCQkJCQkJXAotCXVuc2lnbmVkIGludCByZXM7CQkJCQlcCisJdW5zaWduZWQgaW50IHJlcywgbmV3OwkJCQkJXAogCQkJCQkJCQlcCiAJcmVzID0gcmVhZF9jMF8jI25hbWUoKTsJCQkJCVwKLQlyZXMgJj0gfmNsZWFyOwkJCQkJCVwKLQl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwluZXcgPSByZXMgJiB+Y2xlYXI7CQkJCQlcCisJd3JpdGVfYzBfIyNuYW1lKG5ldyk7CQkJCQlcCiAJCQkJCQkJCVwKIAlyZXR1cm4gcmVzOwkJCQkJCVwKIH0JCQkJCQkJCVwKIAkJCQkJCQkJXAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQJCQkJCVwKLWNoYW5nZV9jMF8jI25hbWUodW5zaWduZWQgaW50IGNoYW5nZSwgdW5zaWduZWQgaW50IG5ldykJCVwKK2NoYW5nZV9jMF8jI25hbWUodW5zaWduZWQgaW50IGNoYW5nZSwgdW5zaWduZWQgaW50IHZhbCkJCVwKIHsJCQkJCQkJCVwKLQl1bnNpZ25lZCBpbnQgcmVzOwkJCQkJXAorCXVuc2lnbmVkIGludCByZXMsIG5ldzsJCQkJCVwKIAkJCQkJCQkJXAogCXJlcyA9IHJlYWRfYzBfIyNuYW1lKCk7CQkJCQlcCi0JcmVzICY9IH5jaGFuZ2U7CQkJCQkJXAotCXJlcyB8PSAobmV3ICYgY2hhbmdlKTsJCQkJCVwKLQl3cml0ZV9jMF8jI25hbWUocmVzKTsJCQkJCVwKKwluZXcgPSByZXMgJiB+Y2hhbmdlOwkJCQkJXAorCW5ldyB8PSAodmFsICYgY2hhbmdlKTsJCQkJCVwKKwl3cml0ZV9jMF8jI25hbWUobmV3KTsJCQkJCVwKIAkJCQkJCQkJXAogCXJldHVybiByZXM7CQkJCQkJXAogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zaWdjb250ZXh0LmgKaW5kZXggOWNlMDYwNy4uOWU4OWNmOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oCkBAIC05LDYgKzksNyBAQAogI2lmbmRlZiBfQVNNX1NJR0NPTlRFWFRfSAogI2RlZmluZSBfQVNNX1NJR0NPTlRFWFRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGZhY2MyZDcuLjJhYmNhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc29ja2V0LmgKQEAgLTc1LDYgKzc1LDkgQEAKIAogI2RlZmluZSBTT19NQVJLCQkJMzYKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTM3CisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKICNpZmRlZiBfX0tFUk5FTF9fCiAKIC8qKiBzb2NrX3R5cGUgLSBTb2NrZXQgdHlwZXMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3dhYi5oCmluZGV4IDg4ZjFmN2QuLjk5OTkzYzAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgX0FTTV9TV0FCX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMgYi9hcmNoL21pcHMva2VybmVsL2lycS5jCmluZGV4IDRiNDAwN2IuLjdiODQ1YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnEuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwppbmRleCAxYTg2Zjg0Li4yYTQ3MjcxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYworKysgYi9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYwpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvaXBjLmg+CkBAIC0zNTYsNDAgKzM1NSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogdXN0YXQgY29tcGF0aWJpbGl0eSAqLwotc3RydWN0IHVzdGF0MzIgewotCWNvbXBhdF9kYWRkcl90CWZfdGZyZWU7Ci0JY29tcGF0X2lub190CWZfdGlub2RlOwotCWNoYXIJCWZfZm5hbWVbNl07Ci0JY2hhcgkJZl9mcGFja1s2XTsKLX07Ci0KLWV4dGVybiBhc21saW5rYWdlIGxvbmcgc3lzX3VzdGF0KGRldl90IGRldiwgc3RydWN0IHVzdGF0IF9fdXNlciAqIHVidWYpOwotCi1TWVNDQUxMX0RFRklORTIoMzJfdXN0YXQsIGRldl90LCBkZXYsIHN0cnVjdCB1c3RhdDMyIF9fdXNlciAqLCB1YnVmMzIpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgdXN0YXQgdG1wOwotCXN0cnVjdCB1c3RhdDMyIHRtcDMyOwotCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMoKTsKLQotCXNldF9mcyhLRVJORUxfRFMpOwotCWVyciA9IHN5c191c3RhdChkZXYsIChzdHJ1Y3QgdXN0YXQgX191c2VyICopJnRtcCk7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0KLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCW1lbXNldCgmdG1wMzIsIDAsIHNpemVvZihzdHJ1Y3QgdXN0YXQzMikpOwotCXRtcDMyLmZfdGZyZWUgPSB0bXAuZl90ZnJlZTsKLQl0bXAzMi5mX3Rpbm9kZSA9IHRtcC5mX3Rpbm9kZTsKLQotCWVyciA9IGNvcHlfdG9fdXNlcih1YnVmMzIsICZ0bXAzMiwgc2l6ZW9mKHN0cnVjdCB1c3RhdDMyKSkgPyAtRUZBVUxUIDogMDsKLQotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIFNZU0NBTExfREVGSU5FNCgzMl9zZW5kZmlsZSwgbG9uZywgb3V0X2ZkLCBsb25nLCBpbl9mZCwKIAljb21wYXRfb2ZmX3QgX191c2VyICosIG9mZnNldCwgczMyLCBjb3VudCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwppbmRleCA3NDM4ZTkyLi5mNjFkNmIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCkBAIC0yNTMsNyArMjUzLDcgQEAKIAlQVFIJY29tcGF0X3N5c191dGltZQkJLyogNjEzMCAqLwogCVBUUglzeXNfbWtub2QKIAlQVFIJc3lzXzMyX3BlcnNvbmFsaXR5Ci0JUFRSCXN5c18zMl91c3RhdAorCVBUUgljb21wYXRfc3lzX3VzdGF0CiAJUFRSCWNvbXBhdF9zeXNfc3RhdGZzCiAJUFRSCWNvbXBhdF9zeXNfZnN0YXRmcwkJLyogNjEzNSAqLwogCVBUUglzeXNfc3lzZnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwppbmRleCBiMGZlZjRmLi42MDk5N2YxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCkBAIC0yNjUsNyArMjY1LDcgQEAKIAlQVFIJc3lzX29sZHVuYW1lCiAJUFRSCXN5c191bWFzawkJCS8qIDQwNjAgKi8KIAlQVFIJc3lzX2Nocm9vdAotCVBUUglzeXNfMzJfdXN0YXQKKwlQVFIJY29tcGF0X3N5c191c3RhdAogCVBUUglzeXNfZHVwMgogCVBUUglzeXNfZ2V0cHBpZAogCVBUUglzeXNfZ2V0cGdycAkJCS8qIDQwNjUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwppbmRleCBiMmQ3MDQxLi4yOWZhZGFjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCkBAIC0xNTIwLDcgKzE1MjAsOSBAQAogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAogCWlmIChjcHVfaGFzX3ZlaWMgfHwgY3B1X2hhc192aW50KSB7CisJCXVuc2lnbmVkIGxvbmcgc3IgPSBzZXRfYzBfc3RhdHVzKFNUMF9CRVYpOwogCQl3cml0ZV9jMF9lYmFzZShlYmFzZSk7CisJCXdyaXRlX2MwX3N0YXR1cyhzcik7CiAJCS8qIFNldHRpbmcgdmVjdG9yIHNwYWNpbmcgZW5hYmxlcyBFSS9WSSBtb2RlICAqLwogCQljaGFuZ2VfYzBfaW50Y3RsKDB4M2UwLCBWRUNUT1JTUEFDSU5HKTsKIAl9CkBAIC0xNjAyLDggKzE2MDQsNiBAQAogI2lmZGVmIENPTkZJR182NEJJVAogCXVuc2lnbmVkIGxvbmcgdW5jYWNoZWRfZWJhc2UgPSBUT19VTkNBQyhlYmFzZSk7CiAjZW5kaWYKLQlpZiAoY3B1X2hhc19taXBzX3IyKQotCQl1bmNhY2hlZF9lYmFzZSArPSAocmVhZF9jMF9lYmFzZSgpICYgMHgzZmZmZjAwMCk7CiAKIAlpZiAoIWFkZHIpCiAJCXBhbmljKHBhbmljX251bGxfY2Vycik7CkBAIC0xNjM1LDkgKzE2MzUsMTEgQEAKIAkJcmV0dXJuOwkvKiBBbHJlYWR5IGRvbmUgKi8KICNlbmRpZgogCi0JaWYgKGNwdV9oYXNfdmVpYyB8fCBjcHVfaGFzX3ZpbnQpCi0JCWViYXNlID0gKHVuc2lnbmVkIGxvbmcpIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKDB4MjAwICsgVkVDVE9SU1BBQ0lORyo2NCk7Ci0JZWxzZSB7CisJaWYgKGNwdV9oYXNfdmVpYyB8fCBjcHVfaGFzX3ZpbnQpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gMHgyMDAgKyBWRUNUT1JTUEFDSU5HKjY0OworCQllYmFzZSA9ICh1bnNpZ25lZCBsb25nKQorCQkJX19hbGxvY19ib290bWVtKHNpemUsIDEgPDwgZmxzKHNpemUpLCAwKTsKKwl9IGVsc2UgewogCQllYmFzZSA9IENBQ19CQVNFOwogCQlpZiAoY3B1X2hhc19taXBzX3IyKQogCQkJZWJhc2UgKz0gKHJlYWRfYzBfZWJhc2UoKSAmIDB4M2ZmZmYwMDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2MtcjRrLmMgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwppbmRleCBjNDNmNGIyLi44NzFlODI4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwpAQCAtNzgwLDcgKzc4MCw3IEBACiAJCWMtPmRjYWNoZS53YXlzID0gMjsKIAkJYy0+ZGNhY2hlLndheWJpdCA9IDA7CiAKLQkJYy0+b3B0aW9ucyB8PSBNSVBTX0NQVV9DQUNIRV9DREVYX1A7CisJCWMtPm9wdGlvbnMgfD0gTUlQU19DUFVfQ0FDSEVfQ0RFWF9QIHwgTUlQU19DUFVfUFJFRkVUQ0g7CiAJCWJyZWFrOwogCiAJY2FzZSBDUFVfVFg0OVhYOgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2RtYS1kZWZhdWx0LmMgYi9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYwppbmRleCA1NDZlNjk3Li5iZWQ1NmYxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZG1hLWRlZmF1bHQuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiAJaWYgKCFwbGF0X2RldmljZV9pc19jb2hlcmVudChkZXYpICYmIGRpcmVjdGlvbiAhPSBETUFfVE9fREVWSUNFKSB7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAotCQlhZGRyID0gcGxhdF9kbWFfYWRkcl90b19waHlzKGRtYV9hZGRyZXNzKTsKKwkJYWRkciA9IGRtYV9hZGRyX3RvX3ZpcnQoZG1hX2FkZHJlc3MpOwogCQlkbWFfY2FjaGVfd2JhY2tfaW52KGFkZHIsIHNpemUpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9pcnEuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvaXJxLmMKaW5kZXggNTZjNjRjYy4uNTBmZGI1YyAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL21uMTAzMDAva2VybmVsL2lycS5jCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkJaWYgKGFjdGlvbikgewogCQkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKIAkJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkKLQkJCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShjcHUpLmlycXNbaV0pOworCQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgY3B1KSk7CiAJCQlzZXFfcHJpbnRmKHAsICIgJTE0cy4ldSIsIGlycV9kZXNjW2ldLmNoaXAtPm5hbWUsCiAJCQkJICAgKEd4SUNSKGkpICYgR3hJQ1JfTEVWRUwpID4+CiAJCQkJICAgR3hJQ1JfTEVWRUxfU0hJRlQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGRjLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaAppbmRleCBjNTg0YjAwLi40MzBmMWFlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZGMuaApAQCAtMzM2LDEwICszMzYsMTEgQEAKICNkZWZpbmUgTlVNX1BEQ19SRVNVTFQJMzIKIAogI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKLSNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCisjaWZkZWYgX19LRVJORUxfXworCiBleHRlcm4gaW50IHBkY190eXBlOwogCiAvKiBWYWx1ZXMgZm9yIHBkY190eXBlICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGZiYTQwMmMuLjg4NTQ3MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw2ICs1NCw5IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTB4NDAxZgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMHg0MDIwCisjZGVmaW5lIFNDTV9USU1FU1RBTVBJTkcJU09fVElNRVNUQU1QSU5HCisKIC8qIE9fTk9OQkxPQ0sgY2xhc2hlcyB3aXRoIHRoZSBiaXRzIHVzZWQgZm9yIHNvY2tldCB0eXBlcy4gIFRoZXJlZm9yZSB3ZQogICogaGF2ZSB0byBkZWZpbmUgU09DS19OT05CTE9DSyB0byBhIGRpZmZlcmVudCB2YWx1ZSBoZXJlLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zd2FiLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zd2FiLmgKaW5kZXggM2ZmMTZjNS4uZTc4NDAzYiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX1BBUklTQ19TV0FCX0gKICNkZWZpbmUgX1BBUklTQ19TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogI2RlZmluZSBfX1NXQUJfNjRfVEhSVV8zMl9fCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvaXJxLmMKaW5kZXggMjllNzBlMS4uYWRmZDYxNyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9pcnEuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJCXNlcV9wcmludGYocCwgIiUzZDogIiwgaSk7CiAjaWZkZWYgQ09ORklHX1NNUAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2Vsc2UKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggMzAzZDJiNi4uMDNiOWEwMSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCkBAIC0xMzAsNyArMTMwLDcgQEAKIAlFTlRSWV9PVVJTKG5ld3VuYW1lKQogCUVOVFJZX1NBTUUodW1hc2spCQkvKiA2MCAqLwogCUVOVFJZX1NBTUUoY2hyb290KQotCUVOVFJZX1NBTUUodXN0YXQpCisJRU5UUllfQ09NUCh1c3RhdCkKIAlFTlRSWV9TQU1FKGR1cDIpCiAJRU5UUllfU0FNRShnZXRwcGlkKQogCUVOVFJZX1NBTUUoZ2V0cGdycCkJCS8qIDY1ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cwppbmRleCA4YjViYTgyLi40NDQ3ZGVmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKQEAgLTEyNyw2ICsxMjcsMTMgQEAKIAkJCWRjci1yZWcgPSA8MHgwMTAgMHgwMDI+OwogCQl9OwogCisJCUNSWVBUTzogY3J5cHRvQDE4MDAwMCB7CisJCQljb21wYXRpYmxlID0gImFtY2MscHBjNDYwZXgtY3J5cHRvIiwgImFtY2MscHBjNHh4LWNyeXB0byI7CisJCQlyZWcgPSA8NCAweDAwMTgwMDAwIDB4ODA0MDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHg0PjsKKwkJfTsKKwogCQlNQUwwOiBtY21hbCB7CiAJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBleCIsICJpYm0sbWNtYWwyIjsKIAkJCWRjci1yZWcgPSA8MHgxODAgMHgwNjI+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tpbGF1ZWEuZHRzCmluZGV4IDI4MDQ0NDQuLjVlNmIwOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9raWxhdWVhLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva2lsYXVlYS5kdHMKQEAgLTk3LDYgKzk3LDEzIEBACiAJCQkJICAgICAgMHg2IDB4ND47CS8qIEVDQyBTRUMgRXJyb3IgKi8gCiAJCX07CiAKKwkJQ1JZUFRPOiBjcnlwdG9AZWY3MDAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWNjLHBwYzQwNWV4LWNyeXB0byIsICJhbWNjLHBwYzR4eC1jcnlwdG8iOworCQkJcmVnID0gPDB4ZWY3MDAwMDAgMHg4MDQwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCWludGVycnVwdHMgPSA8MHgxNyAweDI+OworCQl9OworCiAJCU1BTDA6IG1jbWFsIHsKIAkJCWNvbXBhdGlibGUgPSAiaWJtLG1jbWFsLTQwNWV4IiwgImlibSxtY21hbDIiOwogCQkJZGNyLXJlZyA9IDwweDE4MCAweDA2Mj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vdHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib290eC5oCmluZGV4IDU3YjgyZTMuLjYwYTNjOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib290eC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib290eC5oCkBAIC05LDcgKzksNyBAQAogI2lmbmRlZiBfX0FTTV9CT09UWF9IX18KICNkZWZpbmUgX19BU01fQk9PVFhfSF9fCiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWZkZWYgbWFjaW50b3NoCiAjaW5jbHVkZSA8VHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBjZDQ2ZjAyLi5iNTYwMGNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgPGFzbS9zdHJpbmcuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2F1eHZlYy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bS5oCmluZGV4IGY5OTNlNDEuLmJiMmRlNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm0uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTIwLDcgKzIwLDcgQEAKICNpZm5kZWYgX19MSU5VWF9LVk1fUE9XRVJQQ19ICiAjZGVmaW5lIF9fTElOVVhfS1ZNX1BPV0VSUENfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IGt2bV9yZWdzIHsKIAlfX3U2NCBwYzsKQEAgLTUyLDQgKzUyLDExIEBACiAJX191NjQgZnByWzMyXTsKIH07CiAKK3N0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIHsKK307CisKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggeworfTsKKwogI2VuZGlmIC8qIF9fTElOVVhfS1ZNX1BPV0VSUENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fNDR4LmgKaW5kZXggZjQ5MDMxYi4uZDIyZDM5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV80NHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oCkBAIC0yOCw2ICsyOCwxMyBAQAogICogbmVlZCB0byBmaW5kIHNvbWUgd2F5IG9mIGFkdmVydGlzaW5nIGl0LiAqLwogI2RlZmluZSBLVk00NHhfR1VFU1RfVExCX1NJWkUgNjQKIAorc3RydWN0IGt2bXBwY180NHhfdGxiZSB7CisJdTMyIHRpZDsgLyogT25seSB0aGUgbG93IDggYml0cyBhcmUgdXNlZC4gKi8KKwl1MzIgd29yZDA7CisJdTMyIHdvcmQxOworCXUzMiB3b3JkMjsKK307CisKIHN0cnVjdCBrdm1wcGNfNDR4X3NoYWRvd19yZWYgewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXUxNiBndGxiX2luZGV4OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKaW5kZXggMjE5Nzc2NC4uNTZiZmFlNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCkBAIC00Miw3ICs0MiwxMiBAQAogI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfRFRMQl9NSVNTIDEzCiAjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9JVExCX01JU1MgMTQKICNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX0RFQlVHIDE1Ci0jZGVmaW5lIEJPT0tFX01BWF9JTlRFUlJVUFQgMTUKKworLyogRTUwMCAqLworI2RlZmluZSBCT09LRV9JTlRFUlJVUFRfU1BFX1VOQVZBSUwgMzIKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1NQRV9GUF9EQVRBIDMzCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TUEVfRlBfUk9VTkQgMzQKKyNkZWZpbmUgQk9PS0VfSU5URVJSVVBUX1BFUkZPUk1BTkNFX01PTklUT1IgMzUKIAogI2RlZmluZSBSRVNVTUVfRkxBR19OViAgICAgICAgICAoMTw8MCkgIC8qIFJlbG9hZCBndWVzdCBub252b2xhdGlsZSBzdGF0ZT8gKi8KICNkZWZpbmUgUkVTVU1FX0ZMQUdfSE9TVCAgICAgICAgKDE8PDEpICAvKiBSZXN1bWUgaG9zdD8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9lNTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0OTdjZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFl1IExpdSwgPHl1LmxpdUBmcmVlc2NhbGUuY29tPgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtXzQ0eC5oLAorICogYnkgSG9sbGlzIEJsYW5jaGFyZCA8aG9sbGlzYkB1cy5pYm0uY29tPi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9LVk1fRTUwMF9IX18KKyNkZWZpbmUgX19BU01fS1ZNX0U1MDBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorCisjZGVmaW5lIEJPT0tFX0lOVEVSUlVQVF9TSVpFIDM2CisKKyNkZWZpbmUgRTUwMF9QSURfTlVNICAgMworI2RlZmluZSBFNTAwX1RMQl9OVU0gICAyCisKK3N0cnVjdCB0bGJleworCXUzMiBtYXMxOworCXUzMiBtYXMyOworCXUzMiBtYXMzOworCXUzMiBtYXM3OworfTsKKworc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgeworCS8qIFVubW9kaWZpZWQgY29weSBvZiB0aGUgZ3Vlc3QncyBUTEIuICovCisJc3RydWN0IHRsYmUgKmd1ZXN0X3RsYltFNTAwX1RMQl9OVU1dOworCS8qIFRMQiB0aGF0J3MgYWN0dWFsbHkgdXNlZCB3aGVuIHRoZSBndWVzdCBpcyBydW5uaW5nLiAqLworCXN0cnVjdCB0bGJlICpzaGFkb3dfdGxiW0U1MDBfVExCX05VTV07CisJLyogUGFnZXMgd2hpY2ggYXJlIHJlZmVyZW5jZWQgaW4gdGhlIHNoYWRvdyBUTEIuICovCisJc3RydWN0IHBhZ2UgKipzaGFkb3dfcGFnZXNbRTUwMF9UTEJfTlVNXTsKKworCXVuc2lnbmVkIGludCBndWVzdF90bGJfc2l6ZVtFNTAwX1RMQl9OVU1dOworCXVuc2lnbmVkIGludCBzaGFkb3dfdGxiX3NpemVbRTUwMF9UTEJfTlVNXTsKKwl1bnNpZ25lZCBpbnQgZ3Vlc3RfdGxiX252W0U1MDBfVExCX05VTV07CisKKwl1MzIgaG9zdF9waWRbRTUwMF9QSURfTlVNXTsKKwl1MzIgcGlkW0U1MDBfUElEX05VTV07CisKKwl1MzIgbWFzMDsKKwl1MzIgbWFzMTsKKwl1MzIgbWFzMjsKKwl1MzIgbWFzMzsKKwl1MzIgbWFzNDsKKwl1MzIgbWFzNTsKKwl1MzIgbWFzNjsKKwl1MzIgbWFzNzsKKwl1MzIgbDFjc3IxOworCXUzMiBoaWQwOworCXUzMiBoaWQxOworCisJc3RydWN0IGt2bV92Y3B1IHZjcHU7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwICp0b19lNTAwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHZjcHUsIHN0cnVjdCBrdm1wcGNfdmNwdV9lNTAwLCB2Y3B1KTsKK30KKworI2VuZGlmIC8qIF9fQVNNX0tWTV9FNTAwX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBjMWU0MzZmLi5kZmRmMTNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNjQsMTMgKzY0LDYgQEAKIAl1MzIgaGFsdF93YWtldXA7CiB9OwogCi1zdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlIHsKLQl1MzIgdGlkOyAvKiBPbmx5IHRoZSBsb3cgOCBiaXRzIGFyZSB1c2VkLiAqLwotCXUzMiB3b3JkMDsKLQl1MzIgd29yZDE7Ci0JdTMyIHdvcmQyOwotfTsKLQogZW51bSBrdm1fZXhpdF90eXBlcyB7CiAJTU1JT19FWElUUywKIAlEQ1JfRVhJVFMsCkBAIC0xMTgsMTEgKzExMSw2IEBACiBzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCB7CiAJdTMyIGhvc3Rfc3RhY2s7CiAJdTMyIGhvc3RfcGlkOwotCXUzMiBob3N0X2RiY3IwOwotCXUzMiBob3N0X2RiY3IxOwotCXUzMiBob3N0X2RiY3IyOwotCXUzMiBob3N0X2lhY1s0XTsKLQl1MzIgaG9zdF9tc3I7CiAKIAl1NjQgZnByWzMyXTsKIAl1bG9uZyBncHJbMzJdOwpAQCAtMTU3LDcgKzE0NSw3IEBACiAJdTMyIHRidTsKIAl1MzIgdGNyOwogCXUzMiB0c3I7Ci0JdTMyIGl2b3JbMTZdOworCXUzMiBpdm9yWzY0XTsKIAl1bG9uZyBpdnByOwogCXUzMiBwaXI7CiAKQEAgLTE3MCw2ICsxNTgsNyBAQAogCXUzMiBjY3IxOwogCXUzMiBkYmNyMDsKIAl1MzIgZGJjcjE7CisJdTMyIGRic3I7CiAKICNpZmRlZiBDT05GSUdfS1ZNX0VYSVRfVElNSU5HCiAJc3RydWN0IGt2bXBwY19leGl0X3RpbWluZyB0aW1pbmdfZXhpdDsKQEAgLTIwMCwxMCArMTg5LDQgQEAKIAl1bnNpZ25lZCBsb25nIHBlbmRpbmdfZXhjZXB0aW9uczsKIH07CiAKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgewotCWludCBlbmFibGVkOwotCXVuc2lnbmVkIGxvbmcgYnBbNF07Ci0JaW50IHNpbmdsZXN0ZXA7Ci19OwotCiAjZW5kaWYgLyogX19QT1dFUlBDX0tWTV9IT1NUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKaW5kZXggMzZkMmE1MC4uMmM2ZWUzNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaApAQCAtNTIsMTMgKzUyLDE5IEBACiBleHRlcm4gaW50IGt2bXBwY19lbXVsYXRlX21taW8oc3RydWN0IGt2bV9ydW4gKnJ1biwgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGV4dGVybiB2b2lkIGt2bXBwY19lbXVsYXRlX2RlYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCisvKiBDb3JlLXNwZWNpZmljIGhvb2tzICovCisKIGV4dGVybiB2b2lkIGt2bXBwY19tbXVfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGd2YWRkciwgZ3BhX3QgZ3BhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0IGFzaWQsIHUzMiBmbGFncywgdTMyIG1heF9ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBndGxiX2lkeCk7CiBleHRlcm4gdm9pZCBrdm1wcGNfbW11X3ByaXZfc3dpdGNoKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHVzZXJtb2RlKTsKIGV4dGVybiB2b2lkIGt2bXBwY19tbXVfc3dpdGNoX3BpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBwaWQpOwotCi0vKiBDb3JlLXNwZWNpZmljIGhvb2tzICovCitleHRlcm4gdm9pZCBrdm1wcGNfbW11X2Rlc3Ryb3koc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2V4dGVybiBpbnQga3ZtcHBjX21tdV9kdGxiX2luZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZWFkZHIpOworZXh0ZXJuIGludCBrdm1wcGNfbW11X2l0bGJfaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBlYWRkcik7CitleHRlcm4gZ3BhX3Qga3ZtcHBjX21tdV94bGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGludCBndGxiX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ZhX3QgZWFkZHIpOworZXh0ZXJuIHZvaWQga3ZtcHBjX21tdV9kdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2V4dGVybiB2b2lkIGt2bXBwY19tbXVfaXRsYl9taXNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIGV4dGVybiBzdHJ1Y3Qga3ZtX3ZjcHUgKmt2bXBwY19jb3JlX3ZjcHVfY3JlYXRlKHN0cnVjdCBrdm0gKmt2bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpZCk7CkBAIC03MSw5ICs3Nyw2IEBACiBleHRlcm4gdm9pZCBrdm1wcGNfY29yZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KTsKIGV4dGVybiB2b2lkIGt2bXBwY19jb3JlX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKLWV4dGVybiB2b2lkIGt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwotZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQogZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfZGVsaXZlcl9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBleHRlcm4gaW50IGt2bXBwY19jb3JlX3BlbmRpbmdfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBleHRlcm4gdm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaAppbmRleCAzZjk0MWMwLi40Mjg1YjY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWZzbC1ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmgKQEAgLTc1LDYgKzc1LDggQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAorZXh0ZXJuIHVuc2lnbmVkIGludCB0bGJjYW1faW5kZXg7CisKIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQJaWQ7CiAJdW5zaWduZWQgaW50CWFjdGl2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKaW5kZXggM2YxMjFmZS4uZTcyMzNhOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BzM2ZiLmgKQEAgLTE5LDYgKzE5LDcgQEAKICNpZm5kZWYgX0FTTV9QT1dFUlBDX1BTM0ZCX0hfCiAjZGVmaW5lIF9BU01fUE9XRVJQQ19QUzNGQl9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogCiAvKiBpb2N0bCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NvY2tldC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGY1YTRlMTY4Li4xZTVjZmFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC02MSw0ICs2MSw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYJLyogX0FTTV9QT1dFUlBDX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3B1X2luZm8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oCmluZGV4IDM1NDVlZmIuLjEyODZjODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zcHVfaW5mby5oCkBAIC0yMyw5ICsyMywxMCBAQAogI2lmbmRlZiBfU1BVX0lORk9fSAogI2RlZmluZSBfU1BVX0lORk9fSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxhc20vc3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNlbHNlCiBzdHJ1Y3QgbWZjX2NxX3NyIHsKIAlfX3U2NCBtZmNfY3FfZGF0YTBfUlc7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3dhYi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBlZjgyNGFlLi5jNTgxZTNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3dhYi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zd2FiLmgKQEAgLTgsNyArOCw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpZmRlZiBfX0dOVUNfXwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCmluZGV4IDcyMzUzZjYuLmZlMTY2NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKQEAgLTY1LDcgKzY1LDcgQEAKIFNZU1goc3lzX25pX3N5c2NhbGwsc3lzX29sZHVuYW1lLCBzeXNfb2xkdW5hbWUpCiBDT01QQVRfU1lTX1NQVSh1bWFzaykKIFNZU0NBTExfU1BVKGNocm9vdCkKLVNZU0NBTEwodXN0YXQpCitDT01QQVRfU1lTKHVzdGF0KQogU1lTQ0FMTF9TUFUoZHVwMikKIFNZU0NBTExfU1BVKGdldHBwaWQpCiBTWVNDQUxMX1NQVShnZXRwZ3JwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDE5ZWU0OTEuLjQyZmU0ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTQ5LDcgKzQ5LDcgQEAKICNpbmNsdWRlIDxhc20vaXNlcmllcy9hbHBhY2EuaD4KICNlbmRpZgogI2lmZGVmIENPTkZJR19LVk0KLSNpbmNsdWRlIDxhc20va3ZtXzQ0eC5oPgorI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0JPT0tFKSB8fCBkZWZpbmVkKENPTkZJR180MHgpCkBAIC0zNjEsOCArMzYxLDYgQEAKIAlERUZJTkUoUFRFX1NJWkUsIHNpemVvZihwdGVfdCkpOwogCiAjaWZkZWYgQ09ORklHX0tWTQotCURFRklORShUTEJFX0JZVEVTLCBzaXplb2Yoc3RydWN0IGt2bXBwY180NHhfdGxiZSkpOwotCiAJREVGSU5FKFZDUFVfSE9TVF9TVEFDSywgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmhvc3Rfc3RhY2spKTsKIAlERUZJTkUoVkNQVV9IT1NUX1BJRCwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmhvc3RfcGlkKSk7CiAJREVGSU5FKFZDUFVfR1BSUywgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmdwcikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwppbmRleCA3ZGIyZTQyLi5kNzk0YTYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwpAQCAtNTEzLDYgKzUxMyw5IEBACiAJcmx3aW1pCXIzLHIzLDMyLTEsMzEsMzEJLyogX1BBR0VfVVNFUiAtPiBQUCBsc2IgKi8KIAlvcmkJcjEscjEsMHhlMDQJCS8qIGNsZWFyIG91dCByZXNlcnZlZCBiaXRzICovCiAJYW5kYwlyMSxyMyxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCitCRUdJTl9GVFJfU0VDVElPTgorCXJsd2lubQlyMSxyMSwwLH5fUEFHRV9DT0hFUkVOVAkvKiBjbGVhciBNIChjb2hlcmVuY2Ugbm90IHJlcXVpcmVkKSAqLworRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfTkVFRF9DT0hFUkVOVCkKIAltdHNwcglTUFJOX1JQQSxyMQogCW1mc3ByCXIzLFNQUk5fSU1JU1MKIAl0bGJsaQlyMwpAQCAtNTg3LDYgKzU5MCw5IEBACiAJcmx3aW1pCXIzLHIzLDMyLTEsMzEsMzEJLyogX1BBR0VfVVNFUiAtPiBQUCBsc2IgKi8KIAlvcmkJcjEscjEsMHhlMDQJCS8qIGNsZWFyIG91dCByZXNlcnZlZCBiaXRzICovCiAJYW5kYwlyMSxyMyxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCitCRUdJTl9GVFJfU0VDVElPTgorCXJsd2lubQlyMSxyMSwwLH5fUEFHRV9DT0hFUkVOVAkvKiBjbGVhciBNIChjb2hlcmVuY2Ugbm90IHJlcXVpcmVkKSAqLworRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfTkVFRF9DT0hFUkVOVCkKIAltdHNwcglTUFJOX1JQQSxyMQogCW1mc3ByCXIzLFNQUk5fRE1JU1MKIAl0bGJsZAlyMwpAQCAtNjU1LDYgKzY2MSw5IEBACiAJcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KIAlsaQlyMSwweGUwNQkJLyogY2xlYXIgb3V0IHJlc2VydmVkIGJpdHMgJiBQUCBsc2IgKi8KIAlhbmRjCXIxLHIzLHIxCQkvKiBQUCA9IHVzZXI/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+YXJjaC5ncHJbcnNdLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwppbmRleCA1ZjgxMjU2Li45MDU3MzM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwpAQCAtMjE2LDQ2ICsyMTYsMjMgQEAKIAogdm9pZCBrdm1fYXJjaF92Y3B1X3VuaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0Ja3ZtcHBjX2NvcmVfZGVzdHJveV9tbXUodmNwdSk7CisJa3ZtcHBjX21tdV9kZXN0cm95KHZjcHUpOwogfQogCiB2b2lkIGt2bV9hcmNoX3ZjcHVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBjcHUpCiB7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCi0JCWt2bXBwY19jb3JlX2xvYWRfZ3Vlc3RfZGVidWdzdGF0ZSh2Y3B1KTsKLQogCWt2bXBwY19jb3JlX3ZjcHVfbG9hZCh2Y3B1LCBjcHUpOwogfQogCiB2b2lkIGt2bV9hcmNoX3ZjcHVfcHV0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkKLQkJa3ZtcHBjX2NvcmVfbG9hZF9ob3N0X2RlYnVnc3RhdGUodmNwdSk7Ci0KLQkvKiBEb24ndCBsZWF2ZSBndWVzdCBUTEIgZW50cmllcyByZXNpZGVudCB3aGVuIGJlaW5nIGRlLXNjaGVkdWxlZC4gKi8KLQkvKiBYWFggSXQgd291bGQgYmUgbmljZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gaGVhdnl3ZWlnaHQgZXhpdCBhbmQKLQkgKiBzY2hlZF9vdXQgaGVyZSwgc2luY2Ugd2UgY291bGQgYXZvaWQgdGhlIFRMQiBmbHVzaCBmb3IgaGVhdnl3ZWlnaHQKLQkgKiBleGl0cy4gKi8KLQlfdGxiaWxfYWxsKCk7CiAJa3ZtcHBjX2NvcmVfdmNwdV9wdXQodmNwdSk7CiB9CiAKLWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK2ludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKQogewotCWludCBpOwotCi0JdmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCA9IGRiZy0+ZW5hYmxlZDsKLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkgewotCQlmb3IgKGk9MDsgaSA8IEFSUkFZX1NJWkUodmNwdS0+Z3Vlc3RfZGVidWcuYnApOyBpKyspIHsKLQkJCWlmIChkYmctPmJyZWFrcG9pbnRzW2ldLmVuYWJsZWQpCi0JCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSBkYmctPmJyZWFrcG9pbnRzW2ldLmFkZHJlc3M7Ci0JCQllbHNlCi0JCQkJdmNwdS0+Z3Vlc3RfZGVidWcuYnBbaV0gPSAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bXBwY19jb21wbGV0ZV9kY3JfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKaW5kZXggMjhjMDRkYS4uODgyZTQ3MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwpAQCAtMjM3LDggKzIzNyw2IEBACiAKIHN0YXRpYyB2b2lkIGhhbmRsZV9paWNfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKLQljb25zdCB1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCiAJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKIAogCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9SRVBMQVkgfCBJUlFfV0FJVElORyk7CkBAIC0yNTQsNyArMjUyLDcgQEAKIAkJZ290byBvdXRfZW9pOwogCX0KIAotCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOworCWtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnEsIGRlc2MpOwogCiAJLyogTWFyayB0aGUgSVJRIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4qLwogCWRlc2MtPnN0YXR1cyB8PSBJUlFfSU5QUk9HUkVTUzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zY2hlZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKaW5kZXggNmEwYWQxOS4uZjA4NTM2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NjaGVkLmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogCQlsaXN0X2FkZF90YWlsKCZjdHgtPnJxLCAmc3B1X3ByaW8tPnJ1bnFbY3R4LT5wcmlvXSk7CiAJCXNldF9iaXQoY3R4LT5wcmlvLCBzcHVfcHJpby0+Yml0bWFwKTsKIAkJaWYgKCFzcHVfcHJpby0+bnJfd2FpdGluZysrKQotCQkJX19tb2RfdGltZXIoJnNwdXNjaGVkX3RpbWVyLCBqaWZmaWVzICsgU1BVU0NIRURfVElDSyk7CisJCQltb2RfdGltZXIoJnNwdXNjaGVkX3RpbWVyLCBqaWZmaWVzICsgU1BVU0NIRURfVElDSyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9zeXN0ZW0tYnVzLmMKaW5kZXggNTgzMTFhOC4uYTcwNWZmZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvc3lzdGVtLWJ1cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3N5c3RlbS1idXMuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RyaXZlciAqZHJ2OwogCiAJQlVHX09OKCFkZXYpOwotCXByX2RlYnVnKCIgLT4gJXM6JWQ6ICVzXG4iLCBfX2Z1bmNfXywgX19MSU5FX18sIF9kZXYtPmJ1c19pZCk7CisJZGV2X2RiZyhfZGV2LCAiJXM6JWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAKIAlkcnYgPSBwczNfc3lzdGVtX2J1c19kZXZfdG9fc3lzdGVtX2J1c19kcnYoZGV2KTsKIAlCVUdfT04oIWRydik7CkBAIC0zOTgsNyArMzk4LDcgQEAKIAlzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZHJpdmVyICpkcnY7CiAKIAlCVUdfT04oIWRldik7Ci0JcHJfZGVidWcoIiAtPiAlczolZDogJXNcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgX2Rldi0+YnVzX2lkKTsKKwlkZXZfZGJnKF9kZXYsICIlczolZFxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKIAogCWRydiA9IHBzM19zeXN0ZW1fYnVzX2Rldl90b19zeXN0ZW1fYnVzX2RydihkZXYpOwogCUJVR19PTighZHJ2KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggNmIwYTM1My4uMmE4YWY1ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTM0MywxMyArMzQzLDYgQEAKIAogY29tbWVudCAiSS9PIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uIgogCi1jb25maWcgTUFDSENIS19XQVJOSU5HCi0JYm9vbCAiUHJvY2VzcyB3YXJuaW5nIG1hY2hpbmUgY2hlY2tzIgotCWhlbHAKLQkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0aGUgbWFjaGluZSBjaGVjayBoYW5kbGVyIG9uIElCTSBTLzM5MCBvcgotCSAgelNlcmllcyB0byBwcm9jZXNzIHdhcm5pbmcgbWFjaGluZSBjaGVja3MgKGUuZy4gb24gcG93ZXIgZmFpbHVyZXMpLgotCSAgSWYgdW5zdXJlLCBzYXkgIlkiLgotCiBjb25maWcgUURJTwogCXRyaXN0YXRlICJRRElPIHN1cHBvcnQiCiAJLS0taGVscC0tLQpAQCAtNTIxLDcgKzUxNCw3IEBACiAKIGNvbmZpZyBBUFBMREFUQV9ORVRfU1VNCiAJdHJpc3RhdGUgIk1vbml0b3Igb3ZlcmFsbCBuZXR3b3JrIHN0YXRpc3RpY3MiCi0JZGVwZW5kcyBvbiBBUFBMREFUQV9CQVNFCisJZGVwZW5kcyBvbiBBUFBMREFUQV9CQVNFICYmIE5FVAogCWhlbHAKIAkgIFRoaXMgcHJvdmlkZXMgbmV0d29yayByZWxhdGVkIGRhdGEgdG8gdGhlIExpbnV4IC0gVk0gTW9uaXRvciBTdHJlYW0sCiAJICBjdXJyZW50bHkgdGhlcmUgaXMgb25seSBhIHRvdGFsIHN1bSBvZiBuZXR3b3JrIEkvTyBzdGF0aXN0aWNzLCBubwpAQCAtNTUyLDcgKzU0NSw3IEBACiAJICBidXQgaXMgaW5kZXBlbmRlbnQgb2YgaGFyZHdhcmUvbWljcm9jb2RlIHN1cHBvcnQuCiAKIGNvbmZpZyBaRkNQRFVNUAotCXRyaXN0YXRlICJ6ZmNwZHVtcCBzdXBwb3J0IgorCWJvb2wgInpmY3BkdW1wIHN1cHBvcnQiCiAJc2VsZWN0IFNNUAogCWRlZmF1bHQgbgogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vcHJuZy5jIGIvYXJjaC9zMzkwL2NyeXB0by9wcm5nLmMKaW5kZXggZWNhNzI0ZC4uYjQ5YzAwYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9wcm5nLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9wcm5nLmMKQEAgLTIwMSw4ICsyMDEsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHBybmdfZXhpdCh2b2lkKQogewogCS8qIHdpcGUgbWUgKi8KLQltZW1zZXQocC0+YnVmLCAwLCBwcm5nX2NodW5rX3NpemUpOwotCWtmcmVlKHAtPmJ1Zik7CisJa3pmcmVlKHAtPmJ1Zik7CiAJa2ZyZWUocCk7CiAKIAltaXNjX2RlcmVnaXN0ZXIoJnBybmdfZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhLmggYi9hcmNoL3MzOTAvY3J5cHRvL3NoYS5oCmluZGV4IDFjZWFmYTUuLmY0ZTlkYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhLmgKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEuaApAQCAtMjksNyArMjksOSBAQAogCWludCBmdW5jOwkJLyogS0lNRCBmdW5jdGlvbiB0byB1c2UgKi8KIH07CiAKLXZvaWQgczM5MF9zaGFfdXBkYXRlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKLXZvaWQgczM5MF9zaGFfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCk7CitzdHJ1Y3Qgc2hhc2hfZGVzYzsKKworaW50IHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pOworaW50IHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYwppbmRleCBiM2NiNWE4Li5lODViYTM0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKQEAgLTIzLDE3ICsyMywxNyBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgogCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogI2luY2x1ZGUgInNoYS5oIgogCi1zdGF0aWMgdm9pZCBzaGExX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3N0YXRpYyBpbnQgc2hhMV9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAogCXNjdHgtPnN0YXRlWzBdID0gU0hBMV9IMDsKIAlzY3R4LT5zdGF0ZVsxXSA9IFNIQTFfSDE7CkBAIC00MiwzNCArNDIsMzYgQEAKIAlzY3R4LT5zdGF0ZVs0XSA9IFNIQTFfSDQ7CiAJc2N0eC0+Y291bnQgPSAwOwogCXNjdHgtPmZ1bmMgPSBLSU1EX1NIQV8xOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTEiLAotCS5jcmFfZHJpdmVyX25hbWU9CSJzaGExLXMzOTAiLAotCS5jcmFfcHJpb3JpdHkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAotCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfRElHRVNULAotCS5jcmFfYmxvY2tzaXplCT0JU0hBMV9CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKLQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKGFsZy5jcmFfbGlzdCksCi0JLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKLQkuZGlhX2RpZ2VzdHNpemUJPQlTSEExX0RJR0VTVF9TSVpFLAotCS5kaWFfaW5pdAk9CXNoYTFfaW5pdCwKLQkuZGlhX3VwZGF0ZQk9CXMzOTBfc2hhX3VwZGF0ZSwKLQkuZGlhX2ZpbmFsCT0JczM5MF9zaGFfZmluYWwgfSB9CitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBhbGcgPSB7CisJLmRpZ2VzdHNpemUJPQlTSEExX0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTFfaW5pdCwKKwkudXBkYXRlCQk9CXMzOTBfc2hhX3VwZGF0ZSwKKwkuZmluYWwJCT0JczM5MF9zaGFfZmluYWwsCisJLmRlc2NzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCS5iYXNlCQk9CXsKKwkJLmNyYV9uYW1lCT0JInNoYTEiLAorCQkuY3JhX2RyaXZlcl9uYW1lPQkic2hhMS1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBMV9CTE9DS19TSVpFLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoYTFfczM5MF9pbml0KHZvaWQpCiB7CiAJaWYgKCFjcnlwdF9zMzkwX2Z1bmNfYXZhaWxhYmxlKEtJTURfU0hBXzEpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZyk7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNoYTFfczM5MF9maW5pKHZvaWQpCiB7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZhbGcpOwogfQogCiBtb2R1bGVfaW5pdChzaGExX3MzOTBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKaW5kZXggMTljMDNmYi4uZjlmZWZjNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhMjU2X3MzOTAuYwpAQCAtMTYsMTcgKzE2LDE3IEBACiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CiAKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCiAjaW5jbHVkZSAic2hhLmgiCiAKLXN0YXRpYyB2b2lkIHNoYTI1Nl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTI1Nl9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX3NoYV9jdHggKnNjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAogCXNjdHgtPnN0YXRlWzBdID0gU0hBMjU2X0gwOwogCXNjdHgtPnN0YXRlWzFdID0gU0hBMjU2X0gxOwpAQCAtMzgsMjIgKzM4LDI0IEBACiAJc2N0eC0+c3RhdGVbN10gPSBTSEEyNTZfSDc7CiAJc2N0eC0+Y291bnQgPSAwOwogCXNjdHgtPmZ1bmMgPSBLSU1EX1NIQV8yNTY7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFsZyA9IHsKLQkuY3JhX25hbWUJPQkic2hhMjU2IiwKLQkuY3JhX2RyaXZlcl9uYW1lID0JInNoYTI1Ni1zMzkwIiwKLQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKLQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTI1Nl9CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKLQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKGFsZy5jcmFfbGlzdCksCi0JLmNyYV91CQk9CXsgLmRpZ2VzdCA9IHsKLQkuZGlhX2RpZ2VzdHNpemUJPQlTSEEyNTZfRElHRVNUX1NJWkUsCi0JLmRpYV9pbml0CT0Jc2hhMjU2X2luaXQsCi0JLmRpYV91cGRhdGUJPQlzMzkwX3NoYV91cGRhdGUsCi0JLmRpYV9maW5hbAk9CXMzOTBfc2hhX2ZpbmFsIH0gfQorc3RhdGljIHN0cnVjdCBzaGFzaF9hbGcgYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBMjU2X0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTI1Nl9pbml0LAorCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAorCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJPQkic2hhMjU2IiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTI1Ni1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBMjU2X0JMT0NLX1NJWkUsCisJCS5jcmFfbW9kdWxlCT0JVEhJU19NT0RVTEUsCisJfQogfTsKIAogc3RhdGljIGludCBzaGEyNTZfczM5MF9pbml0KHZvaWQpCkBAIC02MSwxMiArNjMsMTIgQEAKIAlpZiAoIWNyeXB0X3MzOTBfZnVuY19hdmFpbGFibGUoS0lNRF9TSEFfMjU2KSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZyk7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9zaGFzaCgmYWxnKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNoYTI1Nl9zMzkwX2Zpbmkodm9pZCkKIHsKLQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJmFsZyk7CiB9CiAKIG1vZHVsZV9pbml0KHNoYTI1Nl9zMzkwX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGE1MTJfczM5MC5jCmluZGV4IDIzYzc4NjEuLjgzMTkyYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhNTEyX3MzOTAuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTUxMl9zMzkwLmMKQEAgLTEyLDE2ICsxMiwxNiBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAKICNpbmNsdWRlICJzaGEuaCIKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCiAKLXN0YXRpYyB2b2lkIHNoYTUxMl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IHNoYTUxMl9pbml0KHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjKQogewotCXN0cnVjdCBzMzkwX3NoYV9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gc2hhc2hfZGVzY19jdHgoZGVzYyk7CiAKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMF0gPSAweDZhMDllNjY3ZjNiY2M5MDhVTEw7CiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzJdID0gMHhiYjY3YWU4NTg0Y2FhNzNiVUxMOwpAQCAtMzMsMjkgKzMzLDMxIEBACiAJKihfX3U2NCAqKSZjdHgtPnN0YXRlWzE0XSA9IDB4NWJlMGNkMTkxMzdlMjE3OVVMTDsKIAljdHgtPmNvdW50ID0gMDsKIAljdHgtPmZ1bmMgPSBLSU1EX1NIQV81MTI7CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHNoYTUxMl9hbGcgPSB7Ci0JLmNyYV9uYW1lCT0JInNoYTUxMiIsCi0JLmNyYV9kcml2ZXJfbmFtZSA9CSJzaGE1MTItczM5MCIsCi0JLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCi0JLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCi0JLmNyYV9ibG9ja3NpemUJPQlTSEE1MTJfQkxPQ0tfU0laRSwKLQkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCi0JLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKLQkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChzaGE1MTJfYWxnLmNyYV9saXN0KSwKLQkuY3JhX3UJCT0JeyAuZGlnZXN0ID0gewotCS5kaWFfZGlnZXN0c2l6ZQk9CVNIQTUxMl9ESUdFU1RfU0laRSwKLQkuZGlhX2luaXQJPQlzaGE1MTJfaW5pdCwKLQkuZGlhX3VwZGF0ZQk9CXMzOTBfc2hhX3VwZGF0ZSwKLQkuZGlhX2ZpbmFsCT0JczM5MF9zaGFfZmluYWwgfSB9CitzdGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGE1MTJfYWxnID0geworCS5kaWdlc3RzaXplCT0JU0hBNTEyX0RJR0VTVF9TSVpFLAorCS5pbml0CQk9CXNoYTUxMl9pbml0LAorCS51cGRhdGUJCT0JczM5MF9zaGFfdXBkYXRlLAorCS5maW5hbAkJPQlzMzkwX3NoYV9maW5hbCwKKwkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IHMzOTBfc2hhX2N0eCksCisJLmJhc2UJCT0JeworCQkuY3JhX25hbWUJPQkic2hhNTEyIiwKKwkJLmNyYV9kcml2ZXJfbmFtZT0JInNoYTUxMi1zMzkwIiwKKwkJLmNyYV9wcmlvcml0eQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfU0hBU0gsCisJCS5jcmFfYmxvY2tzaXplCT0JU0hBNTEyX0JMT0NLX1NJWkUsCisJCS5jcmFfbW9kdWxlCT0JVEhJU19NT0RVTEUsCisJfQogfTsKIAogTU9EVUxFX0FMSUFTKCJzaGE1MTIiKTsKIAotc3RhdGljIHZvaWQgc2hhMzg0X2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3N0YXRpYyBpbnQgc2hhMzg0X2luaXQoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MpCiB7Ci0Jc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKIAogCSooX191NjQgKikmY3R4LT5zdGF0ZVswXSA9IDB4Y2JiYjlkNWRjMTA1OWVkOFVMTDsKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMl0gPSAweDYyOWEyOTJhMzY3Y2Q1MDdVTEw7CkBAIC02NywyMiArNjksMjUgQEAKIAkqKF9fdTY0ICopJmN0eC0+c3RhdGVbMTRdID0gMHg0N2I1NDgxZGJlZmE0ZmE0VUxMOwogCWN0eC0+Y291bnQgPSAwOwogCWN0eC0+ZnVuYyA9IEtJTURfU0hBXzUxMjsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgc2hhMzg0X2FsZyA9IHsKLQkuY3JhX25hbWUJPQkic2hhMzg0IiwKLQkuY3JhX2RyaXZlcl9uYW1lID0JInNoYTM4NC1zMzkwIiwKLQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKLQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKLQkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTM4NF9CTE9DS19TSVpFLAotCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKLQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAotCS5jcmFfbGlzdAk9CUxJU1RfSEVBRF9JTklUKHNoYTM4NF9hbGcuY3JhX2xpc3QpLAotCS5jcmFfdQkJPQl7IC5kaWdlc3QgPSB7Ci0JLmRpYV9kaWdlc3RzaXplCT0JU0hBMzg0X0RJR0VTVF9TSVpFLAotCS5kaWFfaW5pdAk9CXNoYTM4NF9pbml0LAotCS5kaWFfdXBkYXRlCT0JczM5MF9zaGFfdXBkYXRlLAotCS5kaWFfZmluYWwJPQlzMzkwX3NoYV9maW5hbCB9IH0KK3N0YXRpYyBzdHJ1Y3Qgc2hhc2hfYWxnIHNoYTM4NF9hbGcgPSB7CisJLmRpZ2VzdHNpemUJPQlTSEEzODRfRElHRVNUX1NJWkUsCisJLmluaXQJCT0Jc2hhMzg0X2luaXQsCisJLnVwZGF0ZQkJPQlzMzkwX3NoYV91cGRhdGUsCisJLmZpbmFsCQk9CXMzOTBfc2hhX2ZpbmFsLAorCS5kZXNjc2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGFfY3R4KSwKKwkuYmFzZQkJPQl7CisJCS5jcmFfbmFtZQk9CSJzaGEzODQiLAorCQkuY3JhX2RyaXZlcl9uYW1lPQkic2hhMzg0LXMzOTAiLAorCQkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKKwkJLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9TSEFTSCwKKwkJLmNyYV9ibG9ja3NpemUJPQlTSEEzODRfQkxPQ0tfU0laRSwKKwkJLmNyYV9jdHhzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzMzkwX3NoYV9jdHgpLAorCQkuY3JhX21vZHVsZQk9CVRISVNfTU9EVUxFLAorCX0KIH07CiAKIE1PRFVMRV9BTElBUygic2hhMzg0Iik7CkBAIC05MywxOCArOTgsMTggQEAKIAogCWlmICghY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLSU1EX1NIQV81MTIpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZzaGE1MTJfYWxnKSkgPCAwKQorCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX3NoYXNoKCZzaGE1MTJfYWxnKSkgPCAwKQogCQlnb3RvIG91dDsKLQlpZiAoKHJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJnNoYTM4NF9hbGcpKSA8IDApCi0JCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhNTEyX2FsZyk7CisJaWYgKChyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfc2hhc2goJnNoYTM4NF9hbGcpKSA8IDApCisJCWNyeXB0b191bnJlZ2lzdGVyX3NoYXNoKCZzaGE1MTJfYWxnKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmluaSh2b2lkKQogewotCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhNTEyX2FsZyk7Ci0JY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZzaGEzODRfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFzaCgmc2hhNTEyX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfc2hhc2goJnNoYTM4NF9hbGcpOwogfQogCiBtb2R1bGVfaW5pdChpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGFfY29tbW9uLmMKaW5kZXggOWQ2ZWI4Yy4uNzkwM2VjNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9zaGFfY29tbW9uLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGFfY29tbW9uLmMKQEAgLTEzLDE0ICsxMywxNCBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KICNpbmNsdWRlICJzaGEuaCIKICNpbmNsdWRlICJjcnlwdF9zMzkwLmgiCiAKLXZvaWQgczM5MF9zaGFfdXBkYXRlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQoraW50IHMzOTBfc2hhX3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0Jc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fc2hhc2hfYmxvY2tzaXplKGRlc2MtPnRmbSk7CiAJdW5zaWduZWQgaW50IGluZGV4OwogCWludCByZXQ7CiAKQEAgLTUxLDEzICs1MSwxNSBAQAogc3RvcmU6CiAJaWYgKGxlbikKIAkJbWVtY3B5KGN0eC0+YnVmICsgaW5kZXggLCBkYXRhLCBsZW4pOworCisJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzMzkwX3NoYV91cGRhdGUpOwogCi12b2lkIHMzOTBfc2hhX2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpCitpbnQgczM5MF9zaGFfZmluYWwoc3RydWN0IHNoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpCiB7Ci0Jc3RydWN0IHMzOTBfc2hhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKTsKKwlzdHJ1Y3QgczM5MF9zaGFfY3R4ICpjdHggPSBzaGFzaF9kZXNjX2N0eChkZXNjKTsKKwl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fc2hhc2hfYmxvY2tzaXplKGRlc2MtPnRmbSk7CiAJdTY0IGJpdHM7CiAJdW5zaWduZWQgaW50IGluZGV4LCBlbmQsIHBsZW47CiAJaW50IHJldDsKQEAgLTg3LDkgKzg5LDExIEBACiAJQlVHX09OKHJldCAhPSBlbmQpOwogCiAJLyogY29weSBkaWdlc3QgdG8gb3V0ICovCi0JbWVtY3B5KG91dCwgY3R4LT5zdGF0ZSwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShjcnlwdG9faGFzaF9jYXN0KHRmbSkpKTsKKwltZW1jcHkob3V0LCBjdHgtPnN0YXRlLCBjcnlwdG9fc2hhc2hfZGlnZXN0c2l6ZShkZXNjLT50Zm0pKTsKIAkvKiB3aXBlIGNvbnRleHQgKi8KIAltZW1zZXQoY3R4LCAwLCBzaXplb2YgKmN0eCk7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHMzOTBfc2hhX2ZpbmFsKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2JpdG9wcy5oCmluZGV4IDhlOTI0M2EuLmIzMDYwNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9iaXRvcHMuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYml0b3BzLmgKQEAgLTU3LDcgKzU3LDcgQEAKICAqIHdpdGggb3BlcmF0aW9uIG9mIHRoZSBmb3JtICJzZXRfYml0KGJpdG5yLCBmbGFncykiLgogICovCiAKLS8qIGJpdG1hcCB0YWJsZXMgZnJvbSBhcmNoL1MzOTAva2VybmVsL2JpdG1hcC5TICovCisvKiBiaXRtYXAgdGFibGVzIGZyb20gYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYyAqLwogZXh0ZXJuIGNvbnN0IGNoYXIgX29pX2JpdG1hcFtdOwogZXh0ZXJuIGNvbnN0IGNoYXIgX25pX2JpdG1hcFtdOwogZXh0ZXJuIGNvbnN0IGNoYXIgX3piX2ZpbmRtYXBbXTsKQEAgLTUyNSwxNiArNTI1LDE2IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19mZnpfd29yZCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHdvcmQpCiB7CiAjaWZkZWYgX19zMzkweF9fCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYpKSB7CisJaWYgKCh3b3JkICYgMHhmZmZmZmZmZikgPT0gMHhmZmZmZmZmZikgewogCQl3b3JkID4+PSAzMjsKIAkJbnIgKz0gMzI7CiAJfQogI2VuZGlmCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZikgPT0gMHhmZmZmKSkgeworCWlmICgod29yZCAmIDB4ZmZmZikgPT0gMHhmZmZmKSB7CiAJCXdvcmQgPj49IDE2OwogCQluciArPSAxNjsKIAl9Ci0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmYpID09IDB4ZmYpKSB7CisJaWYgKCh3b3JkICYgMHhmZikgPT0gMHhmZikgewogCQl3b3JkID4+PSA4OwogCQluciArPSA4OwogCX0KQEAgLTU0OSwxNiArNTQ5LDE2IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19mZnNfd29yZCh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nIHdvcmQpCiB7CiAjaWZkZWYgX19zMzkweF9fCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZmZmZmYpID09IDApKSB7CisJaWYgKCh3b3JkICYgMHhmZmZmZmZmZikgPT0gMCkgewogCQl3b3JkID4+PSAzMjsKIAkJbnIgKz0gMzI7CiAJfQogI2VuZGlmCi0JaWYgKGxpa2VseSgod29yZCAmIDB4ZmZmZikgPT0gMCkpIHsKKwlpZiAoKHdvcmQgJiAweGZmZmYpID09IDApIHsKIAkJd29yZCA+Pj0gMTY7CiAJCW5yICs9IDE2OwogCX0KLQlpZiAobGlrZWx5KCh3b3JkICYgMHhmZikgPT0gMCkpIHsKKwlpZiAoKHdvcmQgJiAweGZmKSA9PSAwKSB7CiAJCXdvcmQgPj49IDg7CiAJCW5yICs9IDg7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Nydy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODVhNmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3J3LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqICAgRGF0YSBkZWZpbml0aW9ucyBmb3IgY2hhbm5lbCByZXBvcnQgcHJvY2Vzc2luZworICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgPGFkbHVuZ0BkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAorICovCisKKyNpZm5kZWYgX0FTTV9TMzkwX0NSV19ICisjZGVmaW5lIF9BU01fUzM5MF9DUldfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoKKyAqIENoYW5uZWwgUmVwb3J0IFdvcmQKKyAqLworc3RydWN0IGNydyB7CisJX191MzIgcmVzMSA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KKwlfX3UzMiBzbGN0IDogIDE7ICAgLyogc29saWNpdGVkICovCisJX191MzIgb2ZsdyA6ICAxOyAgIC8qIG92ZXJmbG93ICovCisJX191MzIgY2huICA6ICAxOyAgIC8qIGNoYWluZWQgKi8KKwlfX3UzMiByc2MgIDogIDQ7ICAgLyogcmVwb3J0aW5nIHNvdXJjZSBjb2RlICovCisJX191MzIgYW5jICA6ICAxOyAgIC8qIGFuY2lsbGFyeSByZXBvcnQgKi8KKwlfX3UzMiByZXMyIDogIDE7ICAgLyogcmVzZXJ2ZWQgemVybyAqLworCV9fdTMyIGVyYyAgOiAgNjsgICAvKiBlcnJvci1yZWNvdmVyeSBjb2RlICovCisJX191MzIgcnNpZCA6IDE2OyAgIC8qIHJlcG9ydGluZy1zb3VyY2UgSUQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCit0eXBlZGVmIHZvaWQgKCpjcndfaGFuZGxlcl90KShzdHJ1Y3QgY3J3ICosIHN0cnVjdCBjcncgKiwgaW50KTsKKworZXh0ZXJuIGludCBjcndfcmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjLCBjcndfaGFuZGxlcl90IGhhbmRsZXIpOworZXh0ZXJuIHZvaWQgY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjKTsKK2V4dGVybiB2b2lkIGNyd19oYW5kbGVfY2hhbm5lbF9yZXBvcnQodm9pZCk7CisKKyNkZWZpbmUgTlJfUlNDUyAxNgorCisjZGVmaW5lIENSV19SU0NfTU9OSVRPUiAgMHgyICAvKiBtb25pdG9yaW5nIGZhY2lsaXR5ICovCisjZGVmaW5lIENSV19SU0NfU0NICSAweDMgIC8qIHN1YmNoYW5uZWwgKi8KKyNkZWZpbmUgQ1JXX1JTQ19DUEFUSAkgMHg0ICAvKiBjaGFubmVsIHBhdGggKi8KKyNkZWZpbmUgQ1JXX1JTQ19DT05GSUcJIDB4OSAgLyogY29uZmlndXJhdGlvbi1hbGVydCBmYWNpbGl0eSAqLworI2RlZmluZSBDUldfUlNDX0NTUwkgMHhCICAvKiBjaGFubmVsIHN1YnN5c3RlbSAqLworCisjZGVmaW5lIENSV19FUkNfRVZFTlQJIDB4MDAgLyogZXZlbnQgaW5mb3JtYXRpb24gcGVuZGluZyAqLworI2RlZmluZSBDUldfRVJDX0FWQUlMCSAweDAxIC8qIGF2YWlsYWJsZSAqLworI2RlZmluZSBDUldfRVJDX0lOSVQJIDB4MDIgLyogaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19URVJST1IJIDB4MDMgLyogdGVtcG9yYXJ5IGVycm9yICovCisjZGVmaW5lIENSV19FUkNfSVBBUk0JIDB4MDQgLyogaW5zdGFsbGVkIHBhcm0gaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19URVJNCSAweDA1IC8qIHRlcm1pbmFsICovCisjZGVmaW5lIENSV19FUkNfUEVSUk4JIDB4MDYgLyogcGVybS4gZXJyb3IsIGZhYy4gbm90IGluaXQgKi8KKyNkZWZpbmUgQ1JXX0VSQ19QRVJSSQkgMHgwNyAvKiBwZXJtLiBlcnJvciwgZmFjaWxpdHkgaW5pdCAqLworI2RlZmluZSBDUldfRVJDX1BNT0QJIDB4MDggLyogaW5zdGFsbGVkIHBhcmFtZXRlcnMgbW9kaWZpZWQgKi8KKworc3RhdGljIGlubGluZSBpbnQgc3Rjcncoc3RydWN0IGNydyAqcGNydykKK3sKKwlpbnQgY2NvZGU7CisKKwlhc20gdm9sYXRpbGUoCisJCSIJc3RjcncJMCglMilcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjhcbiIKKwkJOiAiPWQiIChjY29kZSksICI9bSIgKCpwY3J3KQorCQk6ICJhIiAocGNydykKKwkJOiAiY2MiICk7CisJcmV0dXJuIGNjb2RlOworfQorCisjZW5kaWYgLyogX0FTTV9TMzkwX0NSV19IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Rhc2QuaAppbmRleCBlMmRiNmYxLi4yMThiY2U4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGFzZC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kYXNkLmgKQEAgLTE2MiwxNSArMTYyLDE1IEBACiAgICAgICAgIHVuc2lnbmVkIGludCBkYXNkX2lvX25yX3JlcVszMl07IC8qIGhpc3RvZ3JhbSBvZiAjIG9mIHJlcXVlc3RzIGluIGNoYW5xICovCiB9IGRhc2RfcHJvZmlsZV9pbmZvX3Q7CiAKLS8qIAorLyoKICAqIHN0cnVjdCBmb3JtYXRfZGF0YV90CiAgKiByZXByZXNlbnRzIGFsbCBkYXRhIG5lY2Vzc2FyeSB0byBmb3JtYXQgYSBkYXNkCiAgKi8KIHR5cGVkZWYgc3RydWN0IGZvcm1hdF9kYXRhX3QgewotCWludCBzdGFydF91bml0OyAvKiBmcm9tIHRyYWNrICovCi0JaW50IHN0b3BfdW5pdDsgIC8qIHRvIHRyYWNrICovCi0JaW50IGJsa3NpemU7ICAgIC8qIHNlY3RvcnNpemUgKi8KLSAgICAgICAgaW50IGludGVuc2l0eTsgIAorCXVuc2lnbmVkIGludCBzdGFydF91bml0OyAvKiBmcm9tIHRyYWNrICovCisJdW5zaWduZWQgaW50IHN0b3BfdW5pdDsgIC8qIHRvIHRyYWNrICovCisJdW5zaWduZWQgaW50IGJsa3NpemU7CSAvKiBzZWN0b3JzaXplICovCisJdW5zaWduZWQgaW50IGludGVuc2l0eTsKIH0gZm9ybWF0X2RhdGFfdDsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9pZGFscy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgKaW5kZXggZTgyYzEwZS4uYWFlMjc2ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lkYWxzLmgKQEAgLTQ0LDI0ICs0NCwxOCBAQAogLyoKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGlkYWwgd29yZHMgbmVlZGVkIGZvciBhbiBhZGRyZXNzL2xlbmd0aCBwYWlyLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAotaWRhbF9ucl93b3Jkcyh2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlkYWxfbnJfd29yZHModm9pZCAqdmFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7Ci0jaWZkZWYgX19zMzkweF9fCi0JaWYgKGlkYWxfaXNfbmVlZGVkKHZhZGRyLCBsZW5ndGgpKQotCQlyZXR1cm4gKChfX3BhKHZhZGRyKSAmIChJREFfQkxPQ0tfU0laRS0xKSkgKyBsZW5ndGggKyAKLQkJCShJREFfQkxPQ0tfU0laRS0xKSkgPj4gSURBX1NJWkVfTE9HOwotI2VuZGlmCi0JcmV0dXJuIDA7CisJcmV0dXJuICgoX19wYSh2YWRkcikgJiAoSURBX0JMT0NLX1NJWkUtMSkpICsgbGVuZ3RoICsKKwkJKElEQV9CTE9DS19TSVpFLTEpKSA+PiBJREFfU0laRV9MT0c7CiB9CiAKIC8qCiAgKiBDcmVhdGUgdGhlIGxpc3Qgb2YgaWRhbCB3b3JkcyBmb3IgYW4gYWRkcmVzcy9sZW5ndGggcGFpci4KICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nICoKLWlkYWxfY3JlYXRlX3dvcmRzKHVuc2lnbmVkIGxvbmcgKmlkYXdzLCB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyAqaWRhbF9jcmVhdGVfd29yZHModW5zaWduZWQgbG9uZyAqaWRhd3MsCisJCQkJCSAgICAgICB2b2lkICp2YWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCkKIHsKLSNpZmRlZiBfX3MzOTB4X18KIAl1bnNpZ25lZCBsb25nIHBhZGRyOwogCXVuc2lnbmVkIGludCBjaWRhdzsKIApAQCAtNzQsNyArNjgsNiBAQAogCQlwYWRkciArPSBJREFfQkxPQ0tfU0laRTsKIAkJKmlkYXdzKysgPSBwYWRkcjsKIAl9Ci0jZW5kaWYKIAlyZXR1cm4gaWRhd3M7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm0uaAppbmRleCBlMWY1NDY1Li4wYjJmODI5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20va3ZtLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bS5oCkBAIC00Miw0ICs0MiwxMSBAQAogCV9fdTY0IGZwcnNbMTZdOwogfTsKIAorc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggeworfTsKKworLyogZm9yIEtWTV9TRVRfR1VFU1RfREVCVUcgKi8KK3N0cnVjdCBrdm1fZ3Vlc3RfZGVidWdfYXJjaCB7Cit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggM2M1NWU0MS4uYzZlNjc0ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTIxLDkgKzIxLDYgQEAKIC8qIG1lbW9yeSBzbG90cyB0aGF0IGRvZXMgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlICovCiAjZGVmaW5lIEtWTV9QUklWQVRFX01FTV9TTE9UUyA0CiAKLXN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgewotfTsKLQogc3RydWN0IHNjYV9lbnRyeSB7CiAJYXRvbWljX3Qgc2NuOwogCV9fdTY0CXJlc2VydmVkOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9sb3djb3JlLmgKaW5kZXggZjM3MjBkZS4uYjM0OWYxYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2xvd2NvcmUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbG93Y29yZS5oCkBAIC0xMSwxMjkgKzExLDExOCBAQAogI2lmbmRlZiBfQVNNX1MzOTBfTE9XQ09SRV9ICiAjZGVmaW5lIF9BU01fUzM5MF9MT1dDT1JFX0gKIAotI2lmbmRlZiBfX3MzOTB4X18KLSNkZWZpbmUgX19MQ19FWFRfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAxOAotI2RlZmluZSBfX0xDX1NWQ19PTERfUFNXICAgICAgICAgICAgICAgIDB4MDIwCi0jZGVmaW5lIF9fTENfUEdNX09MRF9QU1cgICAgICAgICAgICAgICAgMHgwMjgKLSNkZWZpbmUgX19MQ19NQ0tfT0xEX1BTVyAgICAgICAgICAgICAgICAweDAzMAotI2RlZmluZSBfX0xDX0lPX09MRF9QU1cgICAgICAgICAgICAgICAgIDB4MDM4Ci0jZGVmaW5lIF9fTENfRVhUX05FV19QU1cgICAgICAgICAgICAgICAgMHgwNTgKLSNkZWZpbmUgX19MQ19TVkNfTkVXX1BTVyAgICAgICAgICAgICAgICAweDA2MAotI2RlZmluZSBfX0xDX1BHTV9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDY4Ci0jZGVmaW5lIF9fTENfTUNLX05FV19QU1cgICAgICAgICAgICAgICAgMHgwNzAKLSNkZWZpbmUgX19MQ19JT19ORVdfUFNXICAgICAgICAgICAgICAgICAweDA3OAotI2Vsc2UgLyogIV9fczM5MHhfXyAqLwotI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXICAgICAgICAgICAgICAgIDB4MDEzMAotI2RlZmluZSBfX0xDX1NWQ19PTERfUFNXICAgICAgICAgICAgICAgIDB4MDE0MAotI2RlZmluZSBfX0xDX1BHTV9PTERfUFNXICAgICAgICAgICAgICAgIDB4MDE1MAotI2RlZmluZSBfX0xDX01DS19PTERfUFNXICAgICAgICAgICAgICAgIDB4MDE2MAotI2RlZmluZSBfX0xDX0lPX09MRF9QU1cgICAgICAgICAgICAgICAgIDB4MDE3MAotI2RlZmluZSBfX0xDX0VYVF9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFiMAotI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFjMAotI2RlZmluZSBfX0xDX1BHTV9ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFkMAotI2RlZmluZSBfX0xDX01DS19ORVdfUFNXICAgICAgICAgICAgICAgIDB4MDFlMAotI2RlZmluZSBfX0xDX0lPX05FV19QU1cgICAgICAgICAgICAgICAgIDB4MDFmMAotI2VuZGlmIC8qICFfX3MzOTB4X18gKi8KKyNkZWZpbmUgX19MQ19JUExfUEFSTUJMT0NLX1BUUgkJMHgwMDE0CisjZGVmaW5lIF9fTENfRVhUX1BBUkFNUwkJCTB4MDA4MAorI2RlZmluZSBfX0xDX0NQVV9BRERSRVNTCQkweDAwODQKKyNkZWZpbmUgX19MQ19FWFRfSU5UX0NPREUJCTB4MDA4NgogCi0jZGVmaW5lIF9fTENfSVBMX1BBUk1CTE9DS19QVFIJCTB4MDE0Ci0jZGVmaW5lIF9fTENfRVhUX1BBUkFNUyAgICAgICAgICAgICAgICAgMHgwODAKLSNkZWZpbmUgX19MQ19DUFVfQUREUkVTUyAgICAgICAgICAgICAgICAweDA4NAotI2RlZmluZSBfX0xDX0VYVF9JTlRfQ09ERSAgICAgICAgICAgICAgIDB4MDg2CisjZGVmaW5lIF9fTENfU1ZDX0lMQwkJCTB4MDA4OAorI2RlZmluZSBfX0xDX1NWQ19JTlRfQ09ERQkJMHgwMDhhCisjZGVmaW5lIF9fTENfUEdNX0lMQwkJCTB4MDA4YworI2RlZmluZSBfX0xDX1BHTV9JTlRfQ09ERQkJMHgwMDhlCiAKLSNkZWZpbmUgX19MQ19TVkNfSUxDICAgICAgICAgICAgICAgICAgICAweDA4OAotI2RlZmluZSBfX0xDX1NWQ19JTlRfQ09ERSAgICAgICAgICAgICAgIDB4MDhBCi0jZGVmaW5lIF9fTENfUEdNX0lMQyAgICAgICAgICAgICAgICAgICAgMHgwOEMKLSNkZWZpbmUgX19MQ19QR01fSU5UX0NPREUgICAgICAgICAgICAgICAweDA4RQorI2RlZmluZSBfX0xDX1BFUl9BVE1JRAkJCTB4MDA5NgorI2RlZmluZSBfX0xDX1BFUl9BRERSRVNTCQkweDAwOTgKKyNkZWZpbmUgX19MQ19QRVJfQUNDRVNTX0lECQkweDAwYTEKKyNkZWZpbmUgX19MQ19BUl9NT0RFX0lECQkJMHgwMGEzCiAKLSNkZWZpbmUgX19MQ19QRVJfQVRNSUQJCQkweDA5NgotI2RlZmluZSBfX0xDX1BFUl9BRERSRVNTCQkweDA5OAotI2RlZmluZSBfX0xDX1BFUl9BQ0NFU1NfSUQJCTB4MEExCi0jZGVmaW5lIF9fTENfQVJfTU9ERV9JRAkJCTB4MEEzCisjZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9JRAkJMHgwMGI4CisjZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9OUgkJMHgwMGJhCisjZGVmaW5lIF9fTENfSU9fSU5UX1BBUk0JCTB4MDBiYworI2RlZmluZSBfX0xDX0lPX0lOVF9XT1JECQkweDAwYzAKKyNkZWZpbmUgX19MQ19NQ0NLX0NPREUJCQkweDAwZTgKIAotI2RlZmluZSBfX0xDX1NVQkNIQU5ORUxfSUQgICAgICAgICAgICAgIDB4MEI4Ci0jZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9OUiAgICAgICAgICAgICAgMHgwQkEKLSNkZWZpbmUgX19MQ19JT19JTlRfUEFSTSAgICAgICAgICAgICAgICAweDBCQwotI2RlZmluZSBfX0xDX0lPX0lOVF9XT1JEICAgICAgICAgICAgICAgIDB4MEMwCi0jZGVmaW5lIF9fTENfTUNDS19DT0RFICAgICAgICAgICAgICAgICAgMHgwRTgKLQotI2RlZmluZSBfX0xDX0xBU1RfQlJFQUsgCQkweDExMAotCi0jZGVmaW5lIF9fTENfUkVUVVJOX1BTVyAgICAgICAgICAgICAgICAgMHgyMDAKLQotI2RlZmluZSBfX0xDX1NBVkVfQVJFQSAgICAgICAgICAgICAgICAgIDB4QzAwCisjZGVmaW5lIF9fTENfRFVNUF9SRUlQTAkJCTB4MGUwMAogCiAjaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBfX0xDX0lSQgkJCTB4MjA4Ci0jZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgyNDgKLSNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgyNTAKLSNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgyNTgKLSNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgyNjAKLSNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MjY4Ci0jZGVmaW5lIF9fTENfU1RFQUxfVElNRVIJCTB4MjcwCi0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4Mjc4Ci0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MjgwCi0jZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXICAgICAgICAgICAgMHgyODgKLSNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sgICAgICAgICAgICAgICAweEM0MAotI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweEM0NAotI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLICAgICAgICAgICAgICAgIDB4QzQ4Ci0jZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4QzRDCi0jZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHhDNTAKLSNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSyAgICAgICAgICAgICAgICAweEM1NAotI2RlZmluZSBfX0xDX0NQVUlEICAgICAgICAgICAgICAgICAgICAgIDB4QzYwCi0jZGVmaW5lIF9fTENfQ1BVQUREUiAgICAgICAgICAgICAgICAgICAgMHhDNjgKLSNkZWZpbmUgX19MQ19JUExERVYgICAgICAgICAgICAgICAgICAgICAweEM3QwotI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweEM5MAotI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4Qzk4CisjZGVmaW5lIF9fTENfRVhUX09MRF9QU1cJCTB4MDAxOAorI2RlZmluZSBfX0xDX1NWQ19PTERfUFNXCQkweDAwMjAKKyNkZWZpbmUgX19MQ19QR01fT0xEX1BTVwkJMHgwMDI4CisjZGVmaW5lIF9fTENfTUNLX09MRF9QU1cJCTB4MDAzMAorI2RlZmluZSBfX0xDX0lPX09MRF9QU1cJCQkweDAwMzgKKyNkZWZpbmUgX19MQ19FWFRfTkVXX1BTVwkJMHgwMDU4CisjZGVmaW5lIF9fTENfU1ZDX05FV19QU1cJCTB4MDA2MAorI2RlZmluZSBfX0xDX1BHTV9ORVdfUFNXCQkweDAwNjgKKyNkZWZpbmUgX19MQ19NQ0tfTkVXX1BTVwkJMHgwMDcwCisjZGVmaW5lIF9fTENfSU9fTkVXX1BTVwkJCTB4MDA3OAorI2RlZmluZSBfX0xDX1NBVkVfQVJFQQkJCTB4MDIwMAorI2RlZmluZSBfX0xDX1JFVFVSTl9QU1cJCQkweDAyNDAKKyNkZWZpbmUgX19MQ19SRVRVUk5fTUNDS19QU1cJCTB4MDI0OAorI2RlZmluZSBfX0xDX1NZTkNfRU5URVJfVElNRVIJCTB4MDI1MAorI2RlZmluZSBfX0xDX0FTWU5DX0VOVEVSX1RJTUVSCQkweDAyNTgKKyNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgwMjYwCisjZGVmaW5lIF9fTENfVVNFUl9USU1FUgkJCTB4MDI2OAorI2RlZmluZSBfX0xDX1NZU1RFTV9USU1FUgkJMHgwMjcwCisjZGVmaW5lIF9fTENfU1RFQUxfVElNRVIJCTB4MDI3OAorI2RlZmluZSBfX0xDX0xBU1RfVVBEQVRFX1RJTUVSCQkweDAyODAKKyNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9DTE9DSwkJMHgwMjg4CisjZGVmaW5lIF9fTENfQ1VSUkVOVAkJCTB4MDI5MAorI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweDAyOTQKKyNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sJCTB4MDI5OAorI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLCQkweDAyOWMKKyNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSwkJMHgwMmEwCisjZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4MDJhNAorI2RlZmluZSBfX0xDX1VTRVJfQVNDRQkJCTB4MDJhOAorI2RlZmluZSBfX0xDX1VTRVJfRVhFQ19BU0NFCQkweDAyYWMKKyNkZWZpbmUgX19MQ19DUFVJRAkJCTB4MDJiMAorI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4MDJjOAorI2RlZmluZSBfX0xDX0lSQgkJCTB4MDMwMAorI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNCQkweDAwODAKKyNkZWZpbmUgX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBCTB4MDBkOAorI2RlZmluZSBfX0xDX0NMT0NLX0NPTVBfU0FWRV9BUkVBCTB4MDBlMAorI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MDEwMAorI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MDEwOAorI2RlZmluZSBfX0xDX0FSRUdTX1NBVkVfQVJFQQkJMHgwMTIwCisjZGVmaW5lIF9fTENfRlBSRUdTX1NBVkVfQVJFQQkJMHgwMTYwCisjZGVmaW5lIF9fTENfR1BSRUdTX1NBVkVfQVJFQQkJMHgwMTgwCisjZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBCQkweDAxYzAKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotI2RlZmluZSBfX0xDX0lSQgkJCTB4MjEwCi0jZGVmaW5lIF9fTENfU1lOQ19FTlRFUl9USU1FUgkJMHgyNTAKLSNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgyNTgKLSNkZWZpbmUgX19MQ19FWElUX1RJTUVSCQkJMHgyNjAKLSNkZWZpbmUgX19MQ19VU0VSX1RJTUVSCQkJMHgyNjgKLSNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MjcwCi0jZGVmaW5lIF9fTENfU1RFQUxfVElNRVIJCTB4Mjc4Ci0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfVElNRVIJCTB4MjgwCi0jZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4Mjg4Ci0jZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXICAgICAgICAgICAgMHgyOTAKLSNkZWZpbmUgX19MQ19LRVJORUxfU1RBQ0sgICAgICAgICAgICAgICAweEQ0MAotI2RlZmluZSBfX0xDX1RIUkVBRF9JTkZPCQkweEQ0OAotI2RlZmluZSBfX0xDX0FTWU5DX1NUQUNLICAgICAgICAgICAgICAgIDB4RDUwCi0jZGVmaW5lIF9fTENfS0VSTkVMX0FTQ0UJCTB4RDU4Ci0jZGVmaW5lIF9fTENfVVNFUl9BU0NFCQkJMHhENjAKLSNkZWZpbmUgX19MQ19QQU5JQ19TVEFDSyAgICAgICAgICAgICAgICAweEQ2OAotI2RlZmluZSBfX0xDX0NQVUlECQkJMHhEODAKLSNkZWZpbmUgX19MQ19DUFVBRERSCQkJMHhEODgKLSNkZWZpbmUgX19MQ19JUExERVYgICAgICAgICAgICAgICAgICAgICAweERCOAotI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweEREOAotI2RlZmluZSBfX0xDX0lOVF9DTE9DSwkJCTB4REU4Ci0jZGVmaW5lIF9fTENfVkRTT19QRVJfQ1BVCQkweEUzOAotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCi0jZGVmaW5lIF9fTENfUEFTVEUJCQkweEU0MAotCi0jZGVmaW5lIF9fTENfUEFOSUNfTUFHSUMJCTB4RTAwCi0jaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNICAgICAgICAgICAgIDB4MDgwCi0jZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQSAgICAgICAgMHgwRDgKLSNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDBFMAotI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MTAwCi0jZGVmaW5lIF9fTENfUFJFRklYX1NBVkVfQVJFQQkJMHgxMDgKLSNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDEyMAotI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MTYwCi0jZGVmaW5lIF9fTENfR1BSRUdTX1NBVkVfQVJFQSAgICAgICAgICAgMHgxODAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDFDMAotI2Vsc2UgLyogX19zMzkweF9fICovCi0jZGVmaW5lIF9fTENfUEZBVUxUX0lOVFBBUk0gICAgICAgICAgICAgMHgxMUI4CisjZGVmaW5lIF9fTENfTEFTVF9CUkVBSwkJCTB4MDExMAorI2RlZmluZSBfX0xDX0VYVF9PTERfUFNXCQkweDAxMzAKKyNkZWZpbmUgX19MQ19TVkNfT0xEX1BTVwkJMHgwMTQwCisjZGVmaW5lIF9fTENfUEdNX09MRF9QU1cJCTB4MDE1MAorI2RlZmluZSBfX0xDX01DS19PTERfUFNXCQkweDAxNjAKKyNkZWZpbmUgX19MQ19JT19PTERfUFNXCQkJMHgwMTcwCisjZGVmaW5lIF9fTENfRVhUX05FV19QU1cJCTB4MDFiMAorI2RlZmluZSBfX0xDX1NWQ19ORVdfUFNXCQkweDAxYzAKKyNkZWZpbmUgX19MQ19QR01fTkVXX1BTVwkJMHgwMWQwCisjZGVmaW5lIF9fTENfTUNLX05FV19QU1cJCTB4MDFlMAorI2RlZmluZSBfX0xDX0lPX05FV19QU1cJCQkweDAxZjAKKyNkZWZpbmUgX19MQ19TQVZFX0FSRUEJCQkweDAyMDAKKyNkZWZpbmUgX19MQ19SRVRVUk5fUFNXCQkJMHgwMjgwCisjZGVmaW5lIF9fTENfUkVUVVJOX01DQ0tfUFNXCQkweDAyOTAKKyNkZWZpbmUgX19MQ19TWU5DX0VOVEVSX1RJTUVSCQkweDAyYTAKKyNkZWZpbmUgX19MQ19BU1lOQ19FTlRFUl9USU1FUgkJMHgwMmE4CisjZGVmaW5lIF9fTENfRVhJVF9USU1FUgkJCTB4MDJiMAorI2RlZmluZSBfX0xDX1VTRVJfVElNRVIJCQkweDAyYjgKKyNkZWZpbmUgX19MQ19TWVNURU1fVElNRVIJCTB4MDJjMAorI2RlZmluZSBfX0xDX1NURUFMX1RJTUVSCQkweDAyYzgKKyNkZWZpbmUgX19MQ19MQVNUX1VQREFURV9USU1FUgkJMHgwMmQwCisjZGVmaW5lIF9fTENfTEFTVF9VUERBVEVfQ0xPQ0sJCTB4MDJkOAorI2RlZmluZSBfX0xDX0NVUlJFTlQJCQkweDAyZTAKKyNkZWZpbmUgX19MQ19USFJFQURfSU5GTwkJMHgwMmU4CisjZGVmaW5lIF9fTENfS0VSTkVMX1NUQUNLCQkweDAyZjAKKyNkZWZpbmUgX19MQ19BU1lOQ19TVEFDSwkJMHgwMmY4CisjZGVmaW5lIF9fTENfUEFOSUNfU1RBQ0sJCTB4MDMwMAorI2RlZmluZSBfX0xDX0tFUk5FTF9BU0NFCQkweDAzMDgKKyNkZWZpbmUgX19MQ19VU0VSX0FTQ0UJCQkweDAzMTAKKyNkZWZpbmUgX19MQ19VU0VSX0VYRUNfQVNDRQkJMHgwMzE4CisjZGVmaW5lIF9fTENfQ1BVSUQJCQkweDAzMjAKKyNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweDAzNDAKKyNkZWZpbmUgX19MQ19WRFNPX1BFUl9DUFUJCTB4MDM1MAorI2RlZmluZSBfX0xDX0lSQgkJCTB4MDM4MAorI2RlZmluZSBfX0xDX1BBU1RFCQkJMHgwM2MwCisjZGVmaW5lIF9fTENfUEZBVUxUX0lOVFBBUk0JCTB4MTFiOAogI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MTIwMAotI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEgICAgICAgICAgIDB4MTI4MAorI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEJCTB4MTI4MAogI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MTMwMAogI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MTMxOAotI2RlZmluZSBfX0xDX0ZQX0NSRUdfU0FWRV9BUkVBCQkweDEzMUMKKyNkZWZpbmUgX19MQ19GUF9DUkVHX1NBVkVfQVJFQQkJMHgxMzFjCiAjZGVmaW5lIF9fTENfVE9EUkVHX1NBVkVfQVJFQQkJMHgxMzI0Ci0jZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQSAgICAgICAgMHgxMzI4CisjZGVmaW5lIF9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQQkweDEzMjgKICNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDEzMzEKLSNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDEzNDAKLSNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDEzODAKKyNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEJCTB4MTM0MAorI2RlZmluZSBfX0xDX0NSRUdTX1NBVkVfQVJFQQkJMHgxMzgwCiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCkBAIC0xOTgsMjIyICsxODcsMjQwIEBACiBzdHJ1Y3QgX2xvd2NvcmUKIHsKICNpZm5kZWYgX19zMzkweF9fCi0gICAgICAgIC8qIHByZWZpeCBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwotCXBzd190ICAgICAgICByZXN0YXJ0X3BzdzsgICAgICAgICAgICAgIC8qIDB4MDAwICovCi0JX191MzIgICAgICAgIGNjdzJbNF07ICAgICAgICAgICAgICAgICAgLyogMHgwMDggKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfb2xkX3BzdzsgICAgICAgICAvKiAweDAxOCAqLwotCXBzd190ICAgICAgICBzdmNfb2xkX3BzdzsgICAgICAgICAgICAgIC8qIDB4MDIwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fb2xkX3BzdzsgICAgICAgICAgLyogMHgwMjggKi8KLQlwc3dfdCAgICAgICAgbWNja19vbGRfcHN3OyAgICAgICAgICAgICAvKiAweDAzMCAqLwotCXBzd190ICAgICAgICBpb19vbGRfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MDM4ICovCi0JX191OCAgICAgICAgIHBhZDFbMHg1OC0weDQwXTsgICAgICAgICAgLyogMHgwNDAgKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfbmV3X3BzdzsgICAgICAgICAvKiAweDA1OCAqLwotCXBzd190ICAgICAgICBzdmNfbmV3X3BzdzsgICAgICAgICAgICAgIC8qIDB4MDYwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fbmV3X3BzdzsgICAgICAgICAgLyogMHgwNjggKi8KLQlwc3dfdCAgICAgICAgbWNja19uZXdfcHN3OyAgICAgICAgICAgICAvKiAweDA3MCAqLwotCXBzd190ICAgICAgICBpb19uZXdfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MDc4ICovCi0JX191MzIgICAgICAgIGV4dF9wYXJhbXM7ICAgICAgICAgICAgICAgLyogMHgwODAgKi8KLQlfX3UxNiAgICAgICAgY3B1X2FkZHI7ICAgICAgICAgICAgICAgICAvKiAweDA4NCAqLwotCV9fdTE2ICAgICAgICBleHRfaW50X2NvZGU7ICAgICAgICAgICAgIC8qIDB4MDg2ICovCi0gICAgICAgIF9fdTE2ICAgICAgICBzdmNfaWxjOyAgICAgICAgICAgICAgICAgIC8qIDB4MDg4ICovCi0gICAgICAgIF9fdTE2ICAgICAgICBzdmNfY29kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDhhICovCi0gICAgICAgIF9fdTE2ICAgICAgICBwZ21faWxjOyAgICAgICAgICAgICAgICAgIC8qIDB4MDhjICovCi0gICAgICAgIF9fdTE2ICAgICAgICBwZ21fY29kZTsgICAgICAgICAgICAgICAgIC8qIDB4MDhlICovCi0JX191MzIgICAgICAgIHRyYW5zX2V4Y19jb2RlOyAgICAgICAgICAgLyogMHgwOTAgKi8KLQlfX3UxNiAgICAgICAgbW9uX2NsYXNzX251bTsgICAgICAgICAgICAvKiAweDA5NCAqLwotCV9fdTE2ICAgICAgICBwZXJfcGVyY19hdG1pZDsgICAgICAgICAgIC8qIDB4MDk2ICovCi0JX191MzIgICAgICAgIHBlcl9hZGRyZXNzOyAgICAgICAgICAgICAgLyogMHgwOTggKi8KLQlfX3UzMiAgICAgICAgbW9uaXRvcl9jb2RlOyAgICAgICAgICAgICAvKiAweDA5YyAqLwotCV9fdTggICAgICAgICBleGNfYWNjZXNzX2lkOyAgICAgICAgICAgIC8qIDB4MGEwICovCi0JX191OCAgICAgICAgIHBlcl9hY2Nlc3NfaWQ7ICAgICAgICAgICAgLyogMHgwYTEgKi8KLQlfX3U4ICAgICAgICAgcGFkMlsweEI4LTB4QTJdOyAgICAgICAgICAvKiAweDBhMiAqLwotCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX2lkOyAgICAgICAgICAgIC8qIDB4MGI4ICovCi0JX191MTYgICAgICAgIHN1YmNoYW5uZWxfbnI7ICAgICAgICAgICAgLyogMHgwYmEgKi8KLQlfX3UzMiAgICAgICAgaW9faW50X3Bhcm07ICAgICAgICAgICAgICAvKiAweDBiYyAqLwotCV9fdTMyICAgICAgICBpb19pbnRfd29yZDsgICAgICAgICAgICAgIC8qIDB4MGMwICovCi0JX191OAkgICAgIHBhZDNbMHhjOC0weGM0XTsJICAgICAgIC8qIDB4MGM0ICovCi0JX191MzIJICAgICBzdGZsX2ZhY19saXN0OwkgICAgICAgLyogMHgwYzggKi8KLQlfX3U4CSAgICAgcGFkNFsweGQ0LTB4Y2NdOwkgICAgICAgLyogMHgwY2MgKi8KLQlfX3UzMiAgICAgICAgZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHI7ICAvKiAweDBkNCAqLwotCV9fdTMyICAgICAgICBjcHVfdGltZXJfc2F2ZV9hcmVhWzJdOyAgIC8qIDB4MGQ4ICovCi0JX191MzIgICAgICAgIGNsb2NrX2NvbXBfc2F2ZV9hcmVhWzJdOyAgLyogMHgwZTAgKi8KLQlfX3UzMiAgICAgICAgbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsgLyogMHgwZTggKi8KLQlfX3U4CSAgICAgcGFkNVsweGY0LTB4ZjBdOwkgICAgICAgLyogMHgwZjAgKi8KLQlfX3UzMiAgICAgICAgZXh0ZXJuYWxfZGFtYWdlX2NvZGU7ICAgICAvKiAweDBmNCAqLwotCV9fdTMyICAgICAgICBmYWlsaW5nX3N0b3JhZ2VfYWRkcmVzczsgIC8qIDB4MGY4ICovCi0JX191OAkgICAgIHBhZDZbMHgxMDAtMHhmY107CSAgICAgICAvKiAweDBmYyAqLwotCV9fdTMyICAgICAgICBzdF9zdGF0dXNfZml4ZWRfbG9nb3V0WzRdOy8qIDB4MTAwICovCi0JX191OAkgICAgIHBhZDdbMHgxMjAtMHgxMTBdOyAgICAgICAgLyogMHgxMTAgKi8KLQlfX3UzMiAgICAgICAgYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsvKiAweDEyMCAqLwotCV9fdTMyICAgICAgICBmbG9hdGluZ19wdF9zYXZlX2FyZWFbOF07IC8qIDB4MTYwICovCi0JX191MzIgICAgICAgIGdwcmVnc19zYXZlX2FyZWFbMTZdOyAgICAgLyogMHgxODAgKi8KLQlfX3UzMiAgICAgICAgY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgICAvKiAweDFjMCAqLwkKKwkvKiAweDAwMDAgLSAweDAxZmY6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJcHN3X3QJcmVzdGFydF9wc3c7CQkJLyogMHgwMDAwICovCisJX191MzIJY2N3Mls0XTsJCQkvKiAweDAwMDggKi8KKwlwc3dfdAlleHRlcm5hbF9vbGRfcHN3OwkJLyogMHgwMDE4ICovCisJcHN3X3QJc3ZjX29sZF9wc3c7CQkJLyogMHgwMDIwICovCisJcHN3X3QJcHJvZ3JhbV9vbGRfcHN3OwkJLyogMHgwMDI4ICovCisJcHN3X3QJbWNja19vbGRfcHN3OwkJCS8qIDB4MDAzMCAqLworCXBzd190CWlvX29sZF9wc3c7CQkJLyogMHgwMDM4ICovCisJX191OAlwYWRfMHgwMDQwWzB4MDA1OC0weDAwNDBdOwkvKiAweDAwNDAgKi8KKwlwc3dfdAlleHRlcm5hbF9uZXdfcHN3OwkJLyogMHgwMDU4ICovCisJcHN3X3QJc3ZjX25ld19wc3c7CQkJLyogMHgwMDYwICovCisJcHN3X3QJcHJvZ3JhbV9uZXdfcHN3OwkJLyogMHgwMDY4ICovCisJcHN3X3QJbWNja19uZXdfcHN3OwkJCS8qIDB4MDA3MCAqLworCXBzd190CWlvX25ld19wc3c7CQkJLyogMHgwMDc4ICovCisJX191MzIJZXh0X3BhcmFtczsJCQkvKiAweDAwODAgKi8KKwlfX3UxNgljcHVfYWRkcjsJCQkvKiAweDAwODQgKi8KKwlfX3UxNglleHRfaW50X2NvZGU7CQkJLyogMHgwMDg2ICovCisJX191MTYJc3ZjX2lsYzsJCQkvKiAweDAwODggKi8KKwlfX3UxNglzdmNfY29kZTsJCQkvKiAweDAwOGEgKi8KKwlfX3UxNglwZ21faWxjOwkJCS8qIDB4MDA4YyAqLworCV9fdTE2CXBnbV9jb2RlOwkJCS8qIDB4MDA4ZSAqLworCV9fdTMyCXRyYW5zX2V4Y19jb2RlOwkJCS8qIDB4MDA5MCAqLworCV9fdTE2CW1vbl9jbGFzc19udW07CQkJLyogMHgwMDk0ICovCisJX191MTYJcGVyX3BlcmNfYXRtaWQ7CQkJLyogMHgwMDk2ICovCisJX191MzIJcGVyX2FkZHJlc3M7CQkJLyogMHgwMDk4ICovCisJX191MzIJbW9uaXRvcl9jb2RlOwkJCS8qIDB4MDA5YyAqLworCV9fdTgJZXhjX2FjY2Vzc19pZDsJCQkvKiAweDAwYTAgKi8KKwlfX3U4CXBlcl9hY2Nlc3NfaWQ7CQkJLyogMHgwMGExICovCisJX191OAlwYWRfMHgwMGEyWzB4MDBiOC0weDAwYTJdOwkvKiAweDAwYTIgKi8KKwlfX3UxNglzdWJjaGFubmVsX2lkOwkJCS8qIDB4MDBiOCAqLworCV9fdTE2CXN1YmNoYW5uZWxfbnI7CQkJLyogMHgwMGJhICovCisJX191MzIJaW9faW50X3Bhcm07CQkJLyogMHgwMGJjICovCisJX191MzIJaW9faW50X3dvcmQ7CQkJLyogMHgwMGMwICovCisJX191OAlwYWRfMHgwMGM0WzB4MDBjOC0weDAwYzRdOwkvKiAweDAwYzQgKi8KKwlfX3UzMglzdGZsX2ZhY19saXN0OwkJCS8qIDB4MDBjOCAqLworCV9fdTgJcGFkXzB4MDBjY1sweDAwZDQtMHgwMGNjXTsJLyogMHgwMGNjICovCisJX191MzIJZXh0ZW5kZWRfc2F2ZV9hcmVhX2FkZHI7CS8qIDB4MDBkNCAqLworCV9fdTMyCWNwdV90aW1lcl9zYXZlX2FyZWFbMl07CQkvKiAweDAwZDggKi8KKwlfX3UzMgljbG9ja19jb21wX3NhdmVfYXJlYVsyXTsJLyogMHgwMGUwICovCisJX191MzIJbWNja19pbnRlcnJ1cHRpb25fY29kZVsyXTsJLyogMHgwMGU4ICovCisJX191OAlwYWRfMHgwMGYwWzB4MDBmNC0weDAwZjBdOwkvKiAweDAwZjAgKi8KKwlfX3UzMglleHRlcm5hbF9kYW1hZ2VfY29kZTsJCS8qIDB4MDBmNCAqLworCV9fdTMyCWZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOwkvKiAweDAwZjggKi8KKwlfX3U4CXBhZF8weDAwZmNbMHgwMTAwLTB4MDBmY107CS8qIDB4MDBmYyAqLworCV9fdTMyCXN0X3N0YXR1c19maXhlZF9sb2dvdXRbNF07CS8qIDB4MDEwMCAqLworCV9fdTgJcGFkXzB4MDExMFsweDAxMjAtMHgwMTEwXTsJLyogMHgwMTEwICovCiAKLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9wc3c7ICAgICAgICAgICAgICAgLyogMHgyMDAgKi8KLQlfX3U4CSAgICAgaXJiWzY0XTsJCSAgICAgICAvKiAweDIwOCAqLwotCV9fdTY0ICAgICAgICBzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgIC8qIDB4MjQ4ICovCi0JX191NjQgICAgICAgIGFzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgLyogMHgyNTAgKi8KLQlfX3U2NCAgICAgICAgZXhpdF90aW1lcjsgICAgICAgICAgICAgICAvKiAweDI1OCAqLwotCV9fdTY0CSAgICAgdXNlcl90aW1lcjsJICAgICAgIC8qIDB4MjYwICovCi0JX191NjQJICAgICBzeXN0ZW1fdGltZXI7CSAgICAgICAvKiAweDI2OCAqLwotCV9fdTY0CSAgICAgc3RlYWxfdGltZXI7CSAgICAgICAvKiAweDI3MCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfdGltZXI7ICAgICAgICAvKiAweDI3OCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfY2xvY2s7ICAgICAgICAvKiAweDI4MCAqLwotICAgICAgICBwc3dfdCAgICAgICAgcmV0dXJuX21jY2tfcHN3OyAgICAgICAgICAvKiAweDI4OCAqLwotCV9fdTggICAgICAgICBwYWQ4WzB4YzAwLTB4MjkwXTsgICAgICAgIC8qIDB4MjkwICovCisJLyogQ1BVIHJlZ2lzdGVyIHNhdmUgYXJlYTogZGVmaW5lZCBieSBhcmNoaXRlY3R1cmUgKi8KKwlfX3UzMglhY2Nlc3NfcmVnc19zYXZlX2FyZWFbMTZdOwkvKiAweDAxMjAgKi8KKwlfX3UzMglmbG9hdGluZ19wdF9zYXZlX2FyZWFbOF07CS8qIDB4MDE2MCAqLworCV9fdTMyCWdwcmVnc19zYXZlX2FyZWFbMTZdOwkJLyogMHgwMTgwICovCisJX191MzIJY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MDFjMCAqLwogCi0gICAgICAgIC8qIFN5c3RlbSBpbmZvIGFyZWEgKi8KLQlfX3UzMiAgICAgICAgc2F2ZV9hcmVhWzE2XTsgICAgICAgICAgICAvKiAweGMwMCAqLwotCV9fdTMyICAgICAgICBrZXJuZWxfc3RhY2s7ICAgICAgICAgICAgIC8qIDB4YzQwICovCi0JX191MzIgICAgICAgIHRocmVhZF9pbmZvOyAgICAgICAgICAgICAgLyogMHhjNDQgKi8KLQlfX3UzMiAgICAgICAgYXN5bmNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGM0OCAqLwotCV9fdTMyICAgICAgICBrZXJuZWxfYXNjZTsgICAgICAgICAgICAgIC8qIDB4YzRjICovCi0JX191MzIgICAgICAgIHVzZXJfYXNjZTsgICAgICAgICAgICAgICAgLyogMHhjNTAgKi8KLQlfX3UzMiAgICAgICAgcGFuaWNfc3RhY2s7ICAgICAgICAgICAgICAvKiAweGM1NCAqLwotCV9fdTMyCSAgICAgdXNlcl9leGVjX2FzY2U7CSAgICAgICAvKiAweGM1OCAqLwotCV9fdTgJICAgICBwYWQxMFsweGM2MC0weGM1Y107ICAgICAgIC8qIDB4YzVjICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBzdGFydCAqLwotCXN0cnVjdCAgICAgICBjcHVpbmZvX1MzOTAgY3B1X2RhdGE7ICAgIC8qIDB4YzYwICovCi0JX191MzIgICAgICAgIGlwbF9kZXZpY2U7ICAgICAgICAgICAgICAgLyogMHhjN2MgKi8KLQkvKiBlbnRyeS5TIHNlbnNpdGl2ZSBhcmVhIGVuZCAqLworCS8qIFJldHVybiBwc3dzLiAqLworCV9fdTMyCXNhdmVfYXJlYVsxNl07CQkJLyogMHgwMjAwICovCisJcHN3X3QJcmV0dXJuX3BzdzsJCQkvKiAweDAyNDAgKi8KKwlwc3dfdAlyZXR1cm5fbWNja19wc3c7CQkvKiAweDAyNDggKi8KIAotICAgICAgICAvKiBTTVAgaW5mbyBhcmVhOiBkZWZpbmVkIGJ5IERKQiAqLwotCV9fdTY0CSAgICAgY2xvY2tfY29tcGFyYXRvcjsJICAgICAgIC8qIDB4YzgwICovCi0JX191MzIgICAgICAgIGV4dF9jYWxsX2Zhc3Q7ICAgICAgICAgICAgLyogMHhjODggKi8KLQlfX3UzMiAgICAgICAgcGVyY3B1X29mZnNldDsgICAgICAgICAgICAvKiAweGM4YyAqLwotCV9fdTMyICAgICAgICBjdXJyZW50X3Rhc2s7CSAgICAgICAvKiAweGM5MCAqLwotCV9fdTMyICAgICAgICBzb2Z0aXJxX3BlbmRpbmc7CSAgICAgICAvKiAweGM5NCAqLwotCV9fdTY0ICAgICAgICBpbnRfY2xvY2s7ICAgICAgICAgICAgICAgIC8qIDB4Yzk4ICovCi0gICAgICAgIF9fdTggICAgICAgICBwYWQxMVsweGUwMC0weGNhMF07ICAgICAgIC8qIDB4Y2EwICovCisJLyogQ1BVIHRpbWUgYWNjb3VudGluZyB2YWx1ZXMgKi8KKwlfX3U2NAlzeW5jX2VudGVyX3RpbWVyOwkJLyogMHgwMjUwICovCisJX191NjQJYXN5bmNfZW50ZXJfdGltZXI7CQkvKiAweDAyNTggKi8KKwlfX3U2NAlleGl0X3RpbWVyOwkJCS8qIDB4MDI2MCAqLworCV9fdTY0CXVzZXJfdGltZXI7CQkJLyogMHgwMjY4ICovCisJX191NjQJc3lzdGVtX3RpbWVyOwkJCS8qIDB4MDI3MCAqLworCV9fdTY0CXN0ZWFsX3RpbWVyOwkJCS8qIDB4MDI3OCAqLworCV9fdTY0CWxhc3RfdXBkYXRlX3RpbWVyOwkJLyogMHgwMjgwICovCisJX191NjQJbGFzdF91cGRhdGVfY2xvY2s7CQkvKiAweDAyODggKi8KIAotICAgICAgICAvKiAweGUwMCBpcyB1c2VkIGFzIGluZGljYXRvciBmb3IgZHVtcCB0b29scyAqLwotICAgICAgICAvKiB3aGV0aGVyIHRoZSBrZXJuZWwgZGllZCB3aXRoIHBhbmljKCkgb3Igbm90ICovCi0gICAgICAgIF9fdTMyICAgICAgICBwYW5pY19tYWdpYzsgICAgICAgICAgICAgIC8qIDB4ZTAwICovCisJLyogQ3VycmVudCBwcm9jZXNzLiAqLworCV9fdTMyCWN1cnJlbnRfdGFzazsJCQkvKiAweDAyOTAgKi8KKwlfX3UzMgl0aHJlYWRfaW5mbzsJCQkvKiAweDAyOTQgKi8KKwlfX3UzMglrZXJuZWxfc3RhY2s7CQkJLyogMHgwMjk4ICovCiAKLSAgICAgICAgLyogQWxpZ24gdG8gdGhlIHRvcCAxayBvZiBwcmVmaXggYXJlYSAqLwotCV9fdTggICAgICAgICBwYWQxMlsweDEwMDAtMHhlMDRdOyAgICAgIC8qIDB4ZTA0ICovCisJLyogSW50ZXJydXB0IGFuZCBwYW5pYyBzdGFjay4gKi8KKwlfX3UzMglhc3luY19zdGFjazsJCQkvKiAweDAyOWMgKi8KKwlfX3UzMglwYW5pY19zdGFjazsJCQkvKiAweDAyYTAgKi8KKworCS8qIEFkZHJlc3Mgc3BhY2UgcG9pbnRlci4gKi8KKwlfX3UzMglrZXJuZWxfYXNjZTsJCQkvKiAweDAyYTQgKi8KKwlfX3UzMgl1c2VyX2FzY2U7CQkJLyogMHgwMmE4ICovCisJX191MzIJdXNlcl9leGVjX2FzY2U7CQkJLyogMHgwMmFjICovCisKKwkvKiBTTVAgaW5mbyBhcmVhICovCisJY3B1aWRfdAljcHVfaWQ7CQkJCS8qIDB4MDJiMCAqLworCV9fdTMyCWNwdV9ucjsJCQkJLyogMHgwMmI4ICovCisJX191MzIJc29mdGlycV9wZW5kaW5nOwkJLyogMHgwMmJjICovCisJX191MzIJcGVyY3B1X29mZnNldDsJCQkvKiAweDAyYzAgKi8KKwlfX3UzMglleHRfY2FsbF9mYXN0OwkJCS8qIDB4MDJjNCAqLworCV9fdTY0CWludF9jbG9jazsJCQkvKiAweDAyYzggKi8KKwlfX3U2NAljbG9ja19jb21wYXJhdG9yOwkJLyogMHgwMmQwICovCisJX191OAlwYWRfMHgwMmQ4WzB4MDMwMC0weDAyZDhdOwkvKiAweDAyZDggKi8KKworCS8qIEludGVycnVwdCByZXNwb25zZSBibG9jayAqLworCV9fdTgJaXJiWzY0XTsJCQkvKiAweDAzMDAgKi8KKworCV9fdTgJcGFkXzB4MDQwMFsweDBlMDAtMHgwNDAwXTsJLyogMHgwNDAwICovCisKKwkvKgorCSAqIDB4ZTAwIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZSBJUEwgUGFyYW1ldGVyIEluZm9ybWF0aW9uCisJICogYmxvY2suIER1bXAgdG9vbHMgbmVlZCBJUElCIGZvciBJUEwgYWZ0ZXIgZHVtcC4KKwkgKiBOb3RlOiBkbyBub3QgY2hhbmdlIHRoZSBwb3NpdGlvbiBvZiBhbnkgZmllbGRzIGluIDB4MGUwMC0weDBmMDAKKwkgKi8KKwlfX3UzMglpcGliOwkJCQkvKiAweDBlMDAgKi8KKwlfX3UzMglpcGliX2NoZWNrc3VtOwkJCS8qIDB4MGUwNCAqLworCisJLyogQWxpZ24gdG8gdGhlIHRvcCAxayBvZiBwcmVmaXggYXJlYSAqLworCV9fdTgJcGFkXzB4MGUwOFsweDEwMDAtMHgwZTA4XTsJLyogMHgwZTA4ICovCiAjZWxzZSAvKiAhX19zMzkweF9fICovCi0gICAgICAgIC8qIHByZWZpeCBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLwotCV9fdTMyICAgICAgICBjY3cxWzJdOyAgICAgICAgICAgICAgICAgIC8qIDB4MDAwICovCi0JX191MzIgICAgICAgIGNjdzJbNF07ICAgICAgICAgICAgICAgICAgLyogMHgwMDggKi8KLQlfX3U4ICAgICAgICAgcGFkMVsweDgwLTB4MThdOyAgICAgICAgICAvKiAweDAxOCAqLwotCV9fdTMyICAgICAgICBleHRfcGFyYW1zOyAgICAgICAgICAgICAgIC8qIDB4MDgwICovCi0JX191MTYgICAgICAgIGNwdV9hZGRyOyAgICAgICAgICAgICAgICAgLyogMHgwODQgKi8KLQlfX3UxNiAgICAgICAgZXh0X2ludF9jb2RlOyAgICAgICAgICAgICAvKiAweDA4NiAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4OCAqLwotICAgICAgICBfX3UxNiAgICAgICAgc3ZjX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4YSAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2lsYzsgICAgICAgICAgICAgICAgICAvKiAweDA4YyAqLwotICAgICAgICBfX3UxNiAgICAgICAgcGdtX2NvZGU7ICAgICAgICAgICAgICAgICAvKiAweDA4ZSAqLwotCV9fdTMyICAgICAgICBkYXRhX2V4Y19jb2RlOyAgICAgICAgICAgIC8qIDB4MDkwICovCi0JX191MTYgICAgICAgIG1vbl9jbGFzc19udW07ICAgICAgICAgICAgLyogMHgwOTQgKi8KLQlfX3UxNiAgICAgICAgcGVyX3BlcmNfYXRtaWQ7ICAgICAgICAgICAvKiAweDA5NiAqLwotCWFkZHJfdCAgICAgICBwZXJfYWRkcmVzczsgICAgICAgICAgICAgIC8qIDB4MDk4ICovCi0JX191OCAgICAgICAgIGV4Y19hY2Nlc3NfaWQ7ICAgICAgICAgICAgLyogMHgwYTAgKi8KLQlfX3U4ICAgICAgICAgcGVyX2FjY2Vzc19pZDsgICAgICAgICAgICAvKiAweDBhMSAqLwotCV9fdTggICAgICAgICBvcF9hY2Nlc3NfaWQ7ICAgICAgICAgICAgIC8qIDB4MGEyICovCi0JX191OCAgICAgICAgIGFyX2FjY2Vzc19pZDsgICAgICAgICAgICAgLyogMHgwYTMgKi8KLQlfX3U4ICAgICAgICAgcGFkMlsweEE4LTB4QTRdOyAgICAgICAgICAvKiAweDBhNCAqLwotCWFkZHJfdCAgICAgICB0cmFuc19leGNfY29kZTsgICAgICAgICAgIC8qIDB4MEEwICovCi0JYWRkcl90ICAgICAgIG1vbml0b3JfY29kZTsgICAgICAgICAgICAgLyogMHgwOWMgKi8KLQlfX3UxNiAgICAgICAgc3ViY2hhbm5lbF9pZDsgICAgICAgICAgICAvKiAweDBiOCAqLwotCV9fdTE2ICAgICAgICBzdWJjaGFubmVsX25yOyAgICAgICAgICAgIC8qIDB4MGJhICovCi0JX191MzIgICAgICAgIGlvX2ludF9wYXJtOyAgICAgICAgICAgICAgLyogMHgwYmMgKi8KLQlfX3UzMiAgICAgICAgaW9faW50X3dvcmQ7ICAgICAgICAgICAgICAvKiAweDBjMCAqLwotCV9fdTggICAgICAgICBwYWQzWzB4YzgtMHhjNF07ICAgICAgICAgIC8qIDB4MGM0ICovCi0JX191MzIgICAgICAgIHN0ZmxfZmFjX2xpc3Q7ICAgICAgICAgICAgLyogMHgwYzggKi8KLQlfX3U4ICAgICAgICAgcGFkNFsweGU4LTB4Y2NdOyAgICAgICAgICAvKiAweDBjYyAqLwotCV9fdTMyICAgICAgICBtY2NrX2ludGVycnVwdGlvbl9jb2RlWzJdOyAvKiAweDBlOCAqLwotCV9fdTggICAgICAgICBwYWQ1WzB4ZjQtMHhmMF07ICAgICAgICAgIC8qIDB4MGYwICovCi0JX191MzIgICAgICAgIGV4dGVybmFsX2RhbWFnZV9jb2RlOyAgICAgLyogMHgwZjQgKi8KLQlhZGRyX3QgICAgICAgZmFpbGluZ19zdG9yYWdlX2FkZHJlc3M7ICAvKiAweDBmOCAqLwotCV9fdTggICAgICAgICBwYWQ2WzB4MTIwLTB4MTAwXTsgICAgICAgIC8qIDB4MTAwICovCi0JcHN3X3QgICAgICAgIHJlc3RhcnRfb2xkX3BzdzsgICAgICAgICAgLyogMHgxMjAgKi8KLQlwc3dfdCAgICAgICAgZXh0ZXJuYWxfb2xkX3BzdzsgICAgICAgICAvKiAweDEzMCAqLwotCXBzd190ICAgICAgICBzdmNfb2xkX3BzdzsgICAgICAgICAgICAgIC8qIDB4MTQwICovCi0JcHN3X3QgICAgICAgIHByb2dyYW1fb2xkX3BzdzsgICAgICAgICAgLyogMHgxNTAgKi8KLQlwc3dfdCAgICAgICAgbWNja19vbGRfcHN3OyAgICAgICAgICAgICAvKiAweDE2MCAqLwotCXBzd190ICAgICAgICBpb19vbGRfcHN3OyAgICAgICAgICAgICAgIC8qIDB4MTcwICovCi0JX191OCAgICAgICAgIHBhZDdbMHgxYTAtMHgxODBdOyAgICAgICAgLyogMHgxODAgKi8KLQlwc3dfdCAgICAgICAgcmVzdGFydF9wc3c7ICAgICAgICAgICAgICAvKiAweDFhMCAqLwotCXBzd190ICAgICAgICBleHRlcm5hbF9uZXdfcHN3OyAgICAgICAgIC8qIDB4MWIwICovCi0JcHN3X3QgICAgICAgIHN2Y19uZXdfcHN3OyAgICAgICAgICAgICAgLyogMHgxYzAgKi8KLQlwc3dfdCAgICAgICAgcHJvZ3JhbV9uZXdfcHN3OyAgICAgICAgICAvKiAweDFkMCAqLwotCXBzd190ICAgICAgICBtY2NrX25ld19wc3c7ICAgICAgICAgICAgIC8qIDB4MWUwICovCi0JcHN3X3QgICAgICAgIGlvX25ld19wc3c7ICAgICAgICAgICAgICAgLyogMHgxZjAgKi8KLSAgICAgICAgcHN3X3QgICAgICAgIHJldHVybl9wc3c7ICAgICAgICAgICAgICAgLyogMHgyMDAgKi8KLQlfX3U4CSAgICAgaXJiWzY0XTsJCSAgICAgICAvKiAweDIxMCAqLwotCV9fdTY0ICAgICAgICBzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgIC8qIDB4MjUwICovCi0JX191NjQgICAgICAgIGFzeW5jX2VudGVyX3RpbWVyOyAgICAgICAgLyogMHgyNTggKi8KLQlfX3U2NCAgICAgICAgZXhpdF90aW1lcjsgICAgICAgICAgICAgICAvKiAweDI2MCAqLwotCV9fdTY0CSAgICAgdXNlcl90aW1lcjsJICAgICAgIC8qIDB4MjY4ICovCi0JX191NjQJICAgICBzeXN0ZW1fdGltZXI7CSAgICAgICAvKiAweDI3MCAqLwotCV9fdTY0CSAgICAgc3RlYWxfdGltZXI7CSAgICAgICAvKiAweDI3OCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfdGltZXI7ICAgICAgICAvKiAweDI4MCAqLwotCV9fdTY0CSAgICAgbGFzdF91cGRhdGVfY2xvY2s7ICAgICAgICAvKiAweDI4OCAqLwotICAgICAgICBwc3dfdCAgICAgICAgcmV0dXJuX21jY2tfcHN3OyAgICAgICAgICAvKiAweDI5MCAqLwotICAgICAgICBfX3U4ICAgICAgICAgcGFkOFsweGMwMC0weDJhMF07ICAgICAgICAvKiAweDJhMCAqLwotICAgICAgICAvKiBTeXN0ZW0gaW5mbyBhcmVhICovCi0JX191NjQgICAgICAgIHNhdmVfYXJlYVsxNl07ICAgICAgICAgICAgLyogMHhjMDAgKi8KLSAgICAgICAgX191OCAgICAgICAgIHBhZDlbMHhkNDAtMHhjODBdOyAgICAgICAgLyogMHhjODAgKi8KLSAJX191NjQgICAgICAgIGtlcm5lbF9zdGFjazsgICAgICAgICAgICAgLyogMHhkNDAgKi8KLQlfX3U2NCAgICAgICAgdGhyZWFkX2luZm87ICAgICAgICAgICAgICAvKiAweGQ0OCAqLwotCV9fdTY0ICAgICAgICBhc3luY19zdGFjazsgICAgICAgICAgICAgIC8qIDB4ZDUwICovCi0JX191NjQgICAgICAgIGtlcm5lbF9hc2NlOyAgICAgICAgICAgICAgLyogMHhkNTggKi8KLQlfX3U2NCAgICAgICAgdXNlcl9hc2NlOyAgICAgICAgICAgICAgICAvKiAweGQ2MCAqLwotCV9fdTY0ICAgICAgICBwYW5pY19zdGFjazsgICAgICAgICAgICAgIC8qIDB4ZDY4ICovCi0JX191NjQJICAgICB1c2VyX2V4ZWNfYXNjZTsJICAgICAgIC8qIDB4ZDcwICovCi0JX191OAkgICAgIHBhZDEwWzB4ZDgwLTB4ZDc4XTsgICAgICAgLyogMHhkNzggKi8KLQkvKiBlbnRyeS5TIHNlbnNpdGl2ZSBhcmVhIHN0YXJ0ICovCi0Jc3RydWN0ICAgICAgIGNwdWluZm9fUzM5MCBjcHVfZGF0YTsgICAgLyogMHhkODAgKi8KLQlfX3UzMiAgICAgICAgaXBsX2RldmljZTsgICAgICAgICAgICAgICAvKiAweGRiOCAqLwotCV9fdTMyICAgICAgICBwYWQxMTsgICAgICAgICAgICAgICAgICAgIC8qIDB4ZGJjICovCi0JLyogZW50cnkuUyBzZW5zaXRpdmUgYXJlYSBlbmQgKi8KKwkvKiAweDAwMDAgLSAweDAxZmY6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJX191MzIJY2N3MVsyXTsJCQkvKiAweDAwMDAgKi8KKwlfX3UzMgljY3cyWzRdOwkJCS8qIDB4MDAwOCAqLworCV9fdTgJcGFkXzB4MDAxOFsweDAwODAtMHgwMDE4XTsJLyogMHgwMDE4ICovCisJX191MzIJZXh0X3BhcmFtczsJCQkvKiAweDAwODAgKi8KKwlfX3UxNgljcHVfYWRkcjsJCQkvKiAweDAwODQgKi8KKwlfX3UxNglleHRfaW50X2NvZGU7CQkJLyogMHgwMDg2ICovCisJX191MTYJc3ZjX2lsYzsJCQkvKiAweDAwODggKi8KKwlfX3UxNglzdmNfY29kZTsJCQkvKiAweDAwOGEgKi8KKwlfX3UxNglwZ21faWxjOwkJCS8qIDB4MDA4YyAqLworCV9fdTE2CXBnbV9jb2RlOwkJCS8qIDB4MDA4ZSAqLworCV9fdTMyCWRhdGFfZXhjX2NvZGU7CQkJLyogMHgwMDkwICovCisJX191MTYJbW9uX2NsYXNzX251bTsJCQkvKiAweDAwOTQgKi8KKwlfX3UxNglwZXJfcGVyY19hdG1pZDsJCQkvKiAweDAwOTYgKi8KKwlhZGRyX3QJcGVyX2FkZHJlc3M7CQkJLyogMHgwMDk4ICovCisJX191OAlleGNfYWNjZXNzX2lkOwkJCS8qIDB4MDBhMCAqLworCV9fdTgJcGVyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTEgKi8KKwlfX3U4CW9wX2FjY2Vzc19pZDsJCQkvKiAweDAwYTIgKi8KKwlfX3U4CWFyX2FjY2Vzc19pZDsJCQkvKiAweDAwYTMgKi8KKwlfX3U4CXBhZF8weDAwYTRbMHgwMGE4LTB4MDBhNF07CS8qIDB4MDBhNCAqLworCWFkZHJfdAl0cmFuc19leGNfY29kZTsJCQkvKiAweDAwYTggKi8KKwlhZGRyX3QJbW9uaXRvcl9jb2RlOwkJCS8qIDB4MDBiMCAqLworCV9fdTE2CXN1YmNoYW5uZWxfaWQ7CQkJLyogMHgwMGI4ICovCisJX191MTYJc3ViY2hhbm5lbF9ucjsJCQkvKiAweDAwYmEgKi8KKwlfX3UzMglpb19pbnRfcGFybTsJCQkvKiAweDAwYmMgKi8KKwlfX3UzMglpb19pbnRfd29yZDsJCQkvKiAweDAwYzAgKi8KKwlfX3U4CXBhZF8weDAwYzRbMHgwMGM4LTB4MDBjNF07CS8qIDB4MDBjNCAqLworCV9fdTMyCXN0ZmxfZmFjX2xpc3Q7CQkJLyogMHgwMGM4ICovCisJX191OAlwYWRfMHgwMGNjWzB4MDBlOC0weDAwY2NdOwkvKiAweDAwY2MgKi8KKwlfX3UzMgltY2NrX2ludGVycnVwdGlvbl9jb2RlWzJdOwkvKiAweDAwZTggKi8KKwlfX3U4CXBhZF8weDAwZjBbMHgwMGY0LTB4MDBmMF07CS8qIDB4MDBmMCAqLworCV9fdTMyCWV4dGVybmFsX2RhbWFnZV9jb2RlOwkJLyogMHgwMGY0ICovCisJYWRkcl90CWZhaWxpbmdfc3RvcmFnZV9hZGRyZXNzOwkvKiAweDAwZjggKi8KKwlfX3U4CXBhZF8weDAxMDBbMHgwMTIwLTB4MDEwMF07CS8qIDB4MDEwMCAqLworCXBzd190CXJlc3RhcnRfb2xkX3BzdzsJCS8qIDB4MDEyMCAqLworCXBzd190CWV4dGVybmFsX29sZF9wc3c7CQkvKiAweDAxMzAgKi8KKwlwc3dfdAlzdmNfb2xkX3BzdzsJCQkvKiAweDAxNDAgKi8KKwlwc3dfdAlwcm9ncmFtX29sZF9wc3c7CQkvKiAweDAxNTAgKi8KKwlwc3dfdAltY2NrX29sZF9wc3c7CQkJLyogMHgwMTYwICovCisJcHN3X3QJaW9fb2xkX3BzdzsJCQkvKiAweDAxNzAgKi8KKwlfX3U4CXBhZF8weDAxODBbMHgwMWEwLTB4MDE4MF07CS8qIDB4MDE4MCAqLworCXBzd190CXJlc3RhcnRfcHN3OwkJCS8qIDB4MDFhMCAqLworCXBzd190CWV4dGVybmFsX25ld19wc3c7CQkvKiAweDAxYjAgKi8KKwlwc3dfdAlzdmNfbmV3X3BzdzsJCQkvKiAweDAxYzAgKi8KKwlwc3dfdAlwcm9ncmFtX25ld19wc3c7CQkvKiAweDAxZDAgKi8KKwlwc3dfdAltY2NrX25ld19wc3c7CQkJLyogMHgwMWUwICovCisJcHN3X3QJaW9fbmV3X3BzdzsJCQkvKiAweDAxZjAgKi8KIAotICAgICAgICAvKiBTTVAgaW5mbyBhcmVhOiBkZWZpbmVkIGJ5IERKQiAqLwotCV9fdTY0CSAgICAgY2xvY2tfY29tcGFyYXRvcjsJICAgICAgIC8qIDB4ZGMwICovCi0JX191NjQgICAgICAgIGV4dF9jYWxsX2Zhc3Q7ICAgICAgICAgICAgLyogMHhkYzggKi8KLQlfX3U2NCAgICAgICAgcGVyY3B1X29mZnNldDsgICAgICAgICAgICAvKiAweGRkMCAqLwotCV9fdTY0ICAgICAgICBjdXJyZW50X3Rhc2s7CSAgICAgICAvKiAweGRkOCAqLwotCV9fdTMyCSAgICAgc29mdGlycV9wZW5kaW5nOwkgICAgICAgLyogMHhkZTAgKi8KLQlfX3UzMgkgICAgIHBhZF8weDBkZTQ7CSAgICAgICAvKiAweGRlNCAqLwotCV9fdTY0ICAgICAgICBpbnRfY2xvY2s7ICAgICAgICAgICAgICAgIC8qIDB4ZGU4ICovCi0gICAgICAgIF9fdTggICAgICAgICBwYWQxMlsweGUwMC0weGRmMF07ICAgICAgIC8qIDB4ZGYwICovCisJLyogRW50cnkvZXhpdCBzYXZlIGFyZWEgJiByZXR1cm4gcHN3cy4gKi8KKwlfX3U2NAlzYXZlX2FyZWFbMTZdOwkJCS8qIDB4MDIwMCAqLworCXBzd190CXJldHVybl9wc3c7CQkJLyogMHgwMjgwICovCisJcHN3X3QJcmV0dXJuX21jY2tfcHN3OwkJLyogMHgwMjkwICovCiAKLSAgICAgICAgLyogMHhlMDAgaXMgdXNlZCBhcyBpbmRpY2F0b3IgZm9yIGR1bXAgdG9vbHMgKi8KLSAgICAgICAgLyogd2hldGhlciB0aGUga2VybmVsIGRpZWQgd2l0aCBwYW5pYygpIG9yIG5vdCAqLwotICAgICAgICBfX3UzMiAgICAgICAgcGFuaWNfbWFnaWM7ICAgICAgICAgICAgICAvKiAweGUwMCAqLworCS8qIENQVSBhY2NvdW50aW5nIGFuZCB0aW1pbmcgdmFsdWVzLiAqLworCV9fdTY0CXN5bmNfZW50ZXJfdGltZXI7CQkvKiAweDAyYTAgKi8KKwlfX3U2NAlhc3luY19lbnRlcl90aW1lcjsJCS8qIDB4MDJhOCAqLworCV9fdTY0CWV4aXRfdGltZXI7CQkJLyogMHgwMmIwICovCisJX191NjQJdXNlcl90aW1lcjsJCQkvKiAweDAyYjggKi8KKwlfX3U2NAlzeXN0ZW1fdGltZXI7CQkJLyogMHgwMmMwICovCisJX191NjQJc3RlYWxfdGltZXI7CQkJLyogMHgwMmM4ICovCisJX191NjQJbGFzdF91cGRhdGVfdGltZXI7CQkvKiAweDAyZDAgKi8KKwlfX3U2NAlsYXN0X3VwZGF0ZV9jbG9jazsJCS8qIDB4MDJkOCAqLworCisJLyogQ3VycmVudCBwcm9jZXNzLiAqLworCV9fdTY0CWN1cnJlbnRfdGFzazsJCQkvKiAweDAyZTAgKi8KKwlfX3U2NAl0aHJlYWRfaW5mbzsJCQkvKiAweDAyZTggKi8KKwlfX3U2NAlrZXJuZWxfc3RhY2s7CQkJLyogMHgwMmYwICovCisKKwkvKiBJbnRlcnJ1cHQgYW5kIHBhbmljIHN0YWNrLiAqLworCV9fdTY0CWFzeW5jX3N0YWNrOwkJCS8qIDB4MDJmOCAqLworCV9fdTY0CXBhbmljX3N0YWNrOwkJCS8qIDB4MDMwMCAqLworCisJLyogQWRkcmVzcyBzcGFjZSBwb2ludGVyLiAqLworCV9fdTY0CWtlcm5lbF9hc2NlOwkJCS8qIDB4MDMwOCAqLworCV9fdTY0CXVzZXJfYXNjZTsJCQkvKiAweDAzMTAgKi8KKwlfX3U2NAl1c2VyX2V4ZWNfYXNjZTsJCQkvKiAweDAzMTggKi8KKworCS8qIFNNUCBpbmZvIGFyZWEgKi8KKwljcHVpZF90CWNwdV9pZDsJCQkJLyogMHgwMzIwICovCisJX191MzIJY3B1X25yOwkJCQkvKiAweDAzMjggKi8KKwlfX3UzMglzb2Z0aXJxX3BlbmRpbmc7CQkvKiAweDAzMmMgKi8KKwlfX3U2NAlwZXJjcHVfb2Zmc2V0OwkJCS8qIDB4MDMzMCAqLworCV9fdTY0CWV4dF9jYWxsX2Zhc3Q7CQkJLyogMHgwMzM4ICovCisJX191NjQJaW50X2Nsb2NrOwkJCS8qIDB4MDM0MCAqLworCV9fdTY0CWNsb2NrX2NvbXBhcmF0b3I7CQkvKiAweDAzNDggKi8KKwlfX3U2NAl2ZHNvX3Blcl9jcHVfZGF0YTsJCS8qIDB4MDM1MCAqLworCV9fdTgJcGFkXzB4MDM1OFsweDAzODAtMHgwMzU4XTsJLyogMHgwMzU4ICovCisKKwkvKiBJbnRlcnJ1cHQgcmVzcG9uc2UgYmxvY2suICovCisJX191OAlpcmJbNjRdOwkJCS8qIDB4MDM4MCAqLwogCiAJLyogUGVyIGNwdSBwcmltYXJ5IHNwYWNlIGFjY2VzcyBsaXN0ICovCi0JX191OAkgICAgIHBhZF8weGUwNFsweGUzOC0weGUwNF07ICAgLyogMHhlMDQgKi8KLQlfX3U2NAkgICAgIHZkc29fcGVyX2NwdV9kYXRhOwkgICAgICAgLyogMHhlMzggKi8KLQlfX3UzMgkgICAgIHBhc3RlWzE2XTsJCSAgICAgICAvKiAweGU0MCAqLworCV9fdTMyCXBhc3RlWzE2XTsJCQkvKiAweDAzYzAgKi8KIAotCV9fdTgJICAgICBwYWQxM1sweDExYjgtMHhlODBdOyAgICAgIC8qIDB4ZTgwICovCisJX191OAlwYWRfMHgwNDAwWzB4MGUwMC0weDA0MDBdOwkvKiAweDA0MDAgKi8KIAotCS8qIDY0IGJpdCBleHRwYXJhbSB1c2VkIGZvciBwZmF1bHQsIGRpYWcgMjUwIGV0YyAgKi8KLQlfX3U2NCAgICAgICAgZXh0X3BhcmFtczI7ICAgICAgICAgICAgICAgLyogMHgxMUI4ICovCisJLyoKKwkgKiAweGUwMCBjb250YWlucyB0aGUgYWRkcmVzcyBvZiB0aGUgSVBMIFBhcmFtZXRlciBJbmZvcm1hdGlvbgorCSAqIGJsb2NrLiBEdW1wIHRvb2xzIG5lZWQgSVBJQiBmb3IgSVBMIGFmdGVyIGR1bXAuCisJICogTm90ZTogZG8gbm90IGNoYW5nZSB0aGUgcG9zaXRpb24gb2YgYW55IGZpZWxkcyBpbiAweDBlMDAtMHgwZjAwCisJICovCisJX191NjQJaXBpYjsJCQkJLyogMHgwZTAwICovCisJX191MzIJaXBpYl9jaGVja3N1bTsJCQkvKiAweDBlMDggKi8KKwlfX3U4CXBhZF8weDBlMGNbMHgxMWI4LTB4MGUwY107CS8qIDB4MGUwYyAqLwogCi0JX191OCAgICAgICAgIHBhZDE0WzB4MTIwMC0weDExQzBdOyAgICAgIC8qIDB4MTFDMCAqLworCS8qIDY0IGJpdCBleHRwYXJhbSB1c2VkIGZvciBwZmF1bHQvZGlhZyAyNTA6IGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlICovCisJX191NjQJZXh0X3BhcmFtczI7CQkJLyogMHgxMUI4ICovCisJX191OAlwYWRfMHgxMWMwWzB4MTIwMC0weDExQzBdOwkvKiAweDExQzAgKi8KIAotICAgICAgICAvKiBTeXN0ZW0gaW5mbyBhcmVhICovIAotCi0JX191NjQgICAgICAgIGZsb2F0aW5nX3B0X3NhdmVfYXJlYVsxNl07IC8qIDB4MTIwMCAqLwotCV9fdTY0ICAgICAgICBncHJlZ3Nfc2F2ZV9hcmVhWzE2XTsgICAgICAvKiAweDEyODAgKi8KLQlfX3UzMiAgICAgICAgc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsgLyogMHgxMzAwICovCi0JX191OCAgICAgICAgIHBhZDE1WzB4MTMxOC0weDEzMTBdOyAgICAgIC8qIDB4MTMxMCAqLwotCV9fdTMyICAgICAgICBwcmVmaXhyZWdfc2F2ZV9hcmVhOyAgICAgICAvKiAweDEzMTggKi8KLQlfX3UzMiAgICAgICAgZnB0X2NyZWdfc2F2ZV9hcmVhOyAgICAgICAgLyogMHgxMzFjICovCi0JX191OCAgICAgICAgIHBhZDE2WzB4MTMyNC0weDEzMjBdOyAgICAgIC8qIDB4MTMyMCAqLwotCV9fdTMyICAgICAgICB0b2RfcHJvZ3JlZ19zYXZlX2FyZWE7ICAgICAvKiAweDEzMjQgKi8KLQlfX3UzMiAgICAgICAgY3B1X3RpbWVyX3NhdmVfYXJlYVsyXTsgICAgLyogMHgxMzI4ICovCi0JX191MzIgICAgICAgIGNsb2NrX2NvbXBfc2F2ZV9hcmVhWzJdOyAgIC8qIDB4MTMzMCAqLwotCV9fdTggICAgICAgICBwYWQxN1sweDEzNDAtMHgxMzM4XTsgICAgICAvKiAweDEzMzggKi8KLQlfX3UzMiAgICAgICAgYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsgLyogMHgxMzQwICovIAotCV9fdTY0ICAgICAgICBjcmVnc19zYXZlX2FyZWFbMTZdOyAgICAgICAvKiAweDEzODAgKi8KKwkvKiBDUFUgcmVnaXN0ZXIgc2F2ZSBhcmVhOiBkZWZpbmVkIGJ5IGFyY2hpdGVjdHVyZSAqLworCV9fdTY0CWZsb2F0aW5nX3B0X3NhdmVfYXJlYVsxNl07CS8qIDB4MTIwMCAqLworCV9fdTY0CWdwcmVnc19zYXZlX2FyZWFbMTZdOwkJLyogMHgxMjgwICovCisJX191MzIJc3Rfc3RhdHVzX2ZpeGVkX2xvZ291dFs0XTsJLyogMHgxMzAwICovCisJX191OAlwYWRfMHgxMzEwWzB4MTMxOC0weDEzMTBdOwkvKiAweDEzMTAgKi8KKwlfX3UzMglwcmVmaXhyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzE4ICovCisJX191MzIJZnB0X2NyZWdfc2F2ZV9hcmVhOwkJLyogMHgxMzFjICovCisJX191OAlwYWRfMHgxMzIwWzB4MTMyNC0weDEzMjBdOwkvKiAweDEzMjAgKi8KKwlfX3UzMgl0b2RfcHJvZ3JlZ19zYXZlX2FyZWE7CQkvKiAweDEzMjQgKi8KKwlfX3UzMgljcHVfdGltZXJfc2F2ZV9hcmVhWzJdOwkJLyogMHgxMzI4ICovCisJX191MzIJY2xvY2tfY29tcF9zYXZlX2FyZWFbMl07CS8qIDB4MTMzMCAqLworCV9fdTgJcGFkXzB4MTMzOFsweDEzNDAtMHgxMzM4XTsJLyogMHgxMzM4ICovCisJX191MzIJYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJLyogMHgxMzQwICovCisJX191NjQJY3JlZ3Nfc2F2ZV9hcmVhWzE2XTsJCS8qIDB4MTM4MCAqLwogCiAJLyogYWxpZ24gdG8gdGhlIHRvcCBvZiB0aGUgcHJlZml4IGFyZWEgKi8KLQotCV9fdTggICAgICAgICBwYWQxOFsweDIwMDAtMHgxNDAwXTsgICAgICAvKiAweDE0MDAgKi8KKwlfX3U4CXBhZF8weDE0MDBbMHgyMDAwLTB4MTQwMF07CS8qIDB4MTQwMCAqLwogI2VuZGlmIC8qICFfX3MzOTB4X18gKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7IC8qIEVuZCBzdHJ1Y3R1cmUqLwogCkBAIC00MzMsOCArNDQwLDYgQEAKIAlyZXR1cm4gYWRkcmVzczsKIH0KIAotI2RlZmluZSBfX1BBTklDX01BR0lDICAgICAgICAgICAweERFQURDMERFCi0KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggMjhlYzg3MC4uZmM3ZWRkNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTc0LDcgKzc0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2l0Y2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqcHJldiwgc3RydWN0IG1tX3N0cnVjdCAqbmV4dCwKIAkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG5leHQtPmNwdV92bV9tYXNrKTsKKwljcHVtYXNrX3NldF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtbV9jcHVtYXNrKG5leHQpKTsKIAl1cGRhdGVfbW0obmV4dCwgdHNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL25taS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL25taS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YjYwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbm1pLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqICAgTWFjaGluZSBjaGVjayBoYW5kbGVyIGRlZmluaXRpb25zCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgPGFkbHVuZ0BkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAorICovCisKKyNpZm5kZWYgX0FTTV9TMzkwX05NSV9ICisjZGVmaW5lIF9BU01fUzM5MF9OTUlfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IG1jaSB7CisJX191MzIgc2QgOiAgMTsgLyogMDAgc3lzdGVtIGRhbWFnZSAqLworCV9fdTMyIHBkIDogIDE7IC8qIDAxIGluc3RydWN0aW9uLXByb2Nlc3NpbmcgZGFtYWdlICovCisJX191MzIgc3IgOiAgMTsgLyogMDIgc3lzdGVtIHJlY292ZXJ5ICovCisJX191MzIJIDogIDE7IC8qIDAzICovCisJX191MzIgY2QgOiAgMTsgLyogMDQgdGltaW5nLWZhY2lsaXR5IGRhbWFnZSAqLworCV9fdTMyIGVkIDogIDE7IC8qIDA1IGV4dGVybmFsIGRhbWFnZSAqLworCV9fdTMyCSA6ICAxOyAvKiAwNiAqLworCV9fdTMyIGRnIDogIDE7IC8qIDA3IGRlZ3JhZGF0aW9uICovCisJX191MzIgdyAgOiAgMTsgLyogMDggd2FybmluZyBwZW5kaW5nICovCisJX191MzIgY3AgOiAgMTsgLyogMDkgY2hhbm5lbC1yZXBvcnQgcGVuZGluZyAqLworCV9fdTMyIHNwIDogIDE7IC8qIDEwIHNlcnZpY2UtcHJvY2Vzc29yIGRhbWFnZSAqLworCV9fdTMyIGNrIDogIDE7IC8qIDExIGNoYW5uZWwtc3Vic3lzdGVtIGRhbWFnZSAqLworCV9fdTMyCSA6ICAyOyAvKiAxMi0xMyAqLworCV9fdTMyIGIgIDogIDE7IC8qIDE0IGJhY2tlZCB1cCAqLworCV9fdTMyCSA6ICAxOyAvKiAxNSAqLworCV9fdTMyIHNlIDogIDE7IC8qIDE2IHN0b3JhZ2UgZXJyb3IgdW5jb3JyZWN0ZWQgKi8KKwlfX3UzMiBzYyA6ICAxOyAvKiAxNyBzdG9yYWdlIGVycm9yIGNvcnJlY3RlZCAqLworCV9fdTMyIGtlIDogIDE7IC8qIDE4IHN0b3JhZ2Uta2V5IGVycm9yIHVuY29ycmVjdGVkICovCisJX191MzIgZHMgOiAgMTsgLyogMTkgc3RvcmFnZSBkZWdyYWRhdGlvbiAqLworCV9fdTMyIHdwIDogIDE7IC8qIDIwIHBzdyBtd3AgdmFsaWRpdHkgKi8KKwlfX3UzMiBtcyA6ICAxOyAvKiAyMSBwc3cgbWFzayBhbmQga2V5IHZhbGlkaXR5ICovCisJX191MzIgcG0gOiAgMTsgLyogMjIgcHN3IHByb2dyYW0gbWFzayBhbmQgY2MgdmFsaWRpdHkgKi8KKwlfX3UzMiBpYSA6ICAxOyAvKiAyMyBwc3cgaW5zdHJ1Y3Rpb24gYWRkcmVzcyB2YWxpZGl0eSAqLworCV9fdTMyIGZhIDogIDE7IC8qIDI0IGZhaWxpbmcgc3RvcmFnZSBhZGRyZXNzIHZhbGlkaXR5ICovCisJX191MzIJIDogIDE7IC8qIDI1ICovCisJX191MzIgZWMgOiAgMTsgLyogMjYgZXh0ZXJuYWwgZGFtYWdlIGNvZGUgdmFsaWRpdHkgKi8KKwlfX3UzMiBmcCA6ICAxOyAvKiAyNyBmbG9hdGluZyBwb2ludCByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGdyIDogIDE7IC8qIDI4IGdlbmVyYWwgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBjciA6ICAxOyAvKiAyOSBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIJIDogIDE7IC8qIDMwICovCisJX191MzIgc3QgOiAgMTsgLyogMzEgc3RvcmFnZSBsb2dpY2FsIHZhbGlkaXR5ICovCisJX191MzIgaWUgOiAgMTsgLyogMzIgaW5kaXJlY3Qgc3RvcmFnZSBlcnJvciAqLworCV9fdTMyIGFyIDogIDE7IC8qIDMzIGFjY2VzcyByZWdpc3RlciB2YWxpZGl0eSAqLworCV9fdTMyIGRhIDogIDE7IC8qIDM0IGRlbGF5ZWQgYWNjZXNzIGV4Y2VwdGlvbiAqLworCV9fdTMyCSA6ICA3OyAvKiAzNS00MSAqLworCV9fdTMyIHByIDogIDE7IC8qIDQyIHRvZCBwcm9ncmFtbWFibGUgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KKwlfX3UzMiBmYyA6ICAxOyAvKiA0MyBmcCBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCisJX191MzIgYXAgOiAgMTsgLyogNDQgYW5jaWxsYXJ5IHJlcG9ydCAqLworCV9fdTMyCSA6ICAxOyAvKiA0NSAqLworCV9fdTMyIGN0IDogIDE7IC8qIDQ2IGNwdSB0aW1lciB2YWxpZGl0eSAqLworCV9fdTMyIGNjIDogIDE7IC8qIDQ3IGNsb2NrIGNvbXBhcmF0b3IgdmFsaWRpdHkgKi8KKwlfX3UzMgkgOiAxNjsgLyogNDctNjMgKi8KK307CisKK3N0cnVjdCBwdF9yZWdzOworCitleHRlcm4gdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOworZXh0ZXJuIHZvaWQgczM5MF9kb19tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2VuZGlmIC8qIF9BU01fUzM5MF9OTUlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGRiNDUyM2YuLjYxODYyYjMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTQyLDIyICs0Miw4IEBACiAJYXNtIHZvbGF0aWxlKCJzdGlkcCAwKCUxKSIgOiAiPW0iICgqcHRyKSA6ICJhIiAocHRyKSk7CiB9CiAKLXN0cnVjdCBjcHVpbmZvX1MzOTAKLXsKLSAgICAgICAgY3B1aWRfdCAgY3B1X2lkOwotICAgICAgICBfX3UxNiAgICBjcHVfYWRkcjsKLSAgICAgICAgX191MTYgICAgY3B1X25yOwotICAgICAgICB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyAqcGdkX3F1aWNrOwotI2lmZGVmIF9fczM5MHhfXwotICAgICAgICB1bnNpZ25lZCBsb25nICpwbWRfcXVpY2s7Ci0jZW5kaWYgLyogX19zMzkweF9fICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgKnB0ZV9xdWljazsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6OwotfTsKLQogZXh0ZXJuIHZvaWQgczM5MF9hZGp1c3RfamlmZmllcyh2b2lkKTsKLWV4dGVybiB2b2lkIHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX1MzOTAgKik7CitleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyh2b2lkKTsKIGV4dGVybiBpbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqKTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCA4OTIwMDI1Li5mMWIwNTE2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xNzIsNiArMTcyLDggQEAKICNkZWZpbmUgTlVNX0NSUwkJMTYKICNkZWZpbmUgTlVNX0FDUlMJMTYKIAorI2RlZmluZSBOVU1fQ1JfV09SRFMJMworCiAjZGVmaW5lIEZQUl9TSVpFCTgKICNkZWZpbmUgRlBDX1NJWkUJNAogI2RlZmluZSBGUENfUEFEX1NJWkUJNCAvKiBnY2MgaW5zaXN0cyBvbiBhbGlnbmluZyB0aGUgZnByZWdzICovCkBAIC0zMzQsNyArMzM2LDcgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLQl1bnNpZ25lZCBsb25nIGNyWzNdOworCXVuc2lnbmVkIGxvbmcgY3JbTlVNX0NSX1dPUkRTXTsKIH0gcGVyX2NyX3dvcmRzOwogCiAjZGVmaW5lIFBFUl9FTV9NQVNLIDB4RTgwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKaW5kZXggMjdmYzE3NC4uNDAyZDZkYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCkBAIC0zMTQsNiArMzE0LDcgQEAKIAkJCSAgICBpbnQsIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIHFkaW8gZXJyb3JzIHJlcG9ydGVkIHRvIHRoZSB1cHBlci1sYXllciBwcm9ncmFtICovCisjZGVmaW5lIFFESU9fRVJST1JfU0lHQV9UQVJHRVQJCQkweDAyCiAjZGVmaW5lIFFESU9fRVJST1JfU0lHQV9BQ0NFU1NfRVhDRVBUSU9OCTB4MTAKICNkZWZpbmUgUURJT19FUlJPUl9TSUdBX0JVU1kJCQkweDIwCiAjZGVmaW5lIFFESU9fRVJST1JfQUNUSVZBVEVfQ0hFQ0tfQ09ORElUSU9OCTB4NDAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCAwMjRiOTFlLi4yMDA5MTU4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC01MCwxMiArNTAsNyBAQAogIAogI2RlZmluZSBQUk9DX0NIQU5HRV9QRU5BTFRZCTIwCQkvKiBTY2hlZHVsZSBwZW5hbHR5ICovCiAKLSNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQkoUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9ucikKLQotc3RhdGljIGlubGluZSBfX3UxNiBoYXJkX3NtcF9wcm9jZXNzb3JfaWQodm9pZCkKLXsKLQlyZXR1cm4gc3RhcCgpOwotfQorI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShTMzkwX2xvd2NvcmUuY3B1X25yKQogCiAvKgogICogcmV0dXJucyAxIGlmIGNwdSBpcyBpbiBzdG9wcGVkL2NoZWNrIHN0b3BwZWQgc3RhdGUgb3Igbm90IG9wZXJhdGlvbmFsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggYzc4NmFiNi4uMDIzMzBjNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NvY2tldC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjIsNCArNjIsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zdHJpbmcuaAppbmRleCBkMDc0NjczLi5jZDAyNDFkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3RyaW5nLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N0cmluZy5oCkBAIC0xMDAsNiArMTAwLDcgQEAKIAogc3RhdGljIGlubGluZSBjaGFyICpzdHJjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpCiB7CisjaWYgX19HTlVDX18gPCA0CiAJcmVnaXN0ZXIgaW50IHIwIGFzbSgiMCIpID0gMDsKIAljaGFyICpyZXQgPSBkc3Q7CiAKQEAgLTEwOSwxMCArMTEwLDE0IEBACiAJCTogIismYSIgKGRzdCksICIrJmEiIChzcmMpIDogImQiIChyMCkKIAkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIHJldDsKKyNlbHNlCisJcmV0dXJuIF9fYnVpbHRpbl9zdHJjcHkoZHN0LCBzcmMpOworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcjAgYXNtKCIwIikgPSAwOwogCWNvbnN0IGNoYXIgKnRtcCA9IHM7CiAKQEAgLTEyMSw2ICsxMjYsOSBAQAogCQkiCWpvCTBiIgogCQk6ICIrZCIgKHIwKSwgIithIiAodG1wKSA6ICA6ICJjYyIpOwogCXJldHVybiByMCAtICh1bnNpZ25lZCBsb25nKSBzOworI2Vsc2UKKwlyZXR1cm4gX19idWlsdGluX3N0cmxlbihzKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKiBzLCBzaXplX3QgbikKQEAgLTEzNSw3ICsxNDMsMTMgQEAKIAkJOiAiK2EiIChlbmQpLCAiK2EiICh0bXApIDogImQiIChyMCkgIDogImNjIik7CiAJcmV0dXJuIGVuZCAtIHM7CiB9Ci0KKyNlbHNlIC8qIElOX0FSQ0hfU1RSSU5HX0MgKi8KK3ZvaWQgKm1lbWNocihjb25zdCB2b2lkICogcywgaW50IGMsIHNpemVfdCBuKTsKK3ZvaWQgKm1lbXNjYW4odm9pZCAqcywgaW50IGMsIHNpemVfdCBuKTsKK2NoYXIgKnN0cmNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYyk7CitjaGFyICpzdHJjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpOworc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKTsKK3NpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKiBzLCBzaXplX3Qgbik7CiAjZW5kaWYgLyogIUlOX0FSQ0hfU1RSSU5HX0MgKi8KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCmluZGV4IGFkOTMyMTIuLjlkNzAwNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaApAQCAtMTAwLDYgKzEwMCw3IEBACiAJCWNoYXIgcmVzZXJ2ZWRfMVsyNF07CiAKIAl9IHZtWzhdOworCWNoYXIgcmVzZXJ2ZWRfNTQ0WzM1NTJdOwogfTsKIAogc3RhdGljIGlubGluZSBpbnQgc3RzaSh2b2lkICpzeXNpbmZvLCBpbnQgZmMsIGludCBzZWwxLCBpbnQgc2VsMikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGJmbHVzaC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggZDYwMzk0Yi4uMzA0Y2ZmYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKQEAgLTUxLDcgKzUxLDcgQEAKIAkgKiBJZiB0aGUgcHJvY2VzcyBvbmx5IHJhbiBvbiB0aGUgbG9jYWwgY3B1LCBkbyBhIGxvY2FsIGZsdXNoLgogCSAqLwogCWxvY2FsX2NwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWlmIChjcHVzX2VxdWFsKG1tLT5jcHVfdm1fbWFzaywgbG9jYWxfY3B1bWFzaykpCisJaWYgKGNwdW1hc2tfZXF1YWwobW1fY3B1bWFzayhtbSksICZsb2NhbF9jcHVtYXNrKSkKIAkJX190bGJfZmx1c2hfbG9jYWwoKTsKIAllbHNlCiAJCV9fdGxiX2ZsdXNoX2dsb2JhbCgpOwpAQCAtNzMsNyArNzMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX190bGJfZmx1c2hfbW0oc3RydWN0IG1tX3N0cnVjdCAqIG1tKQogewotCWlmICh1bmxpa2VseShjcHVzX2VtcHR5KG1tLT5jcHVfdm1fbWFzaykpKQorCWlmICh1bmxpa2VseShjcHVtYXNrX2VtcHR5KG1tX2NwdW1hc2sobW0pKSkpCiAJCXJldHVybjsKIAkvKgogCSAqIElmIHRoZSBtYWNoaW5lIGhhcyBJRFRFIHdlIHByZWZlciB0byBkbyBhIHBlciBtbSBmbHVzaApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCBjOTc5YzNiLi41ZTBhZDYxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaApAQCAtNSw3ICs1LDYgQEAKIAogI2RlZmluZSBtY19jYXBhYmxlKCkJKDEpCiAKLWNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KTsKIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfY29yZWdyb3VwX21hc2sodW5zaWduZWQgaW50IGNwdSk7CiAKIGV4dGVybiBjcHVtYXNrX3QgY3B1X2NvcmVfbWFwW05SX0NQVVNdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Z0b2MuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS92dG9jLmgKaW5kZXggM2E1MjY3ZC4uODQwNmEyYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Z0b2MuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdnRvYy5oCkBAIC0zOSw3ICszOSw3IEBACiAJX191MTYgZGF5OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbAorc3RydWN0IHZ0b2Nfdm9sdW1lX2xhYmVsX2NkbAogewogCWNoYXIgdm9sa2V5WzRdOwkJLyogdm9sdW1lIGtleSA9IHZvbHVtZSBsYWJlbCAqLwogCWNoYXIgdm9sbGJsWzRdOwkJLyogdm9sdW1lIGxhYmVsICovCkBAIC01Niw2ICs1NiwxNCBAQAogCWNoYXIgcmVzM1syOV07CQkvKiByZXNlcnZlZCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCB2dG9jX3ZvbHVtZV9sYWJlbF9sZGwgeworCWNoYXIgdm9sbGJsWzRdOwkJLyogdm9sdW1lIGxhYmVsICovCisJY2hhciB2b2xpZFs2XTsJCS8qIHZvbHVtZSBpZGVudGlmaWVyICovCisJY2hhciByZXMzWzY5XTsJCS8qIHJlc2VydmVkICovCisJY2hhciBsZGxfdmVyc2lvbjsJLyogdmVyc2lvbiBudW1iZXIsIHZhbGlkIGZvciBsZGwgZm9ybWF0ICovCisJX191NjQgZm9ybWF0dGVkX2Jsb2NrczsgLyogdmFsaWQgd2hlbiBsZGxfdmVyc2lvbiA+PSBmMiAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgdnRvY19leHRlbnQKIHsKIAlfX3U4IHR5cGVpbmQ7CQkJLyogZXh0ZW50IHR5cGUgaW5kaWNhdG9yICovCkBAIC0xNDAsNyArMTQ4LDExIEBACiAJY2hhciByZXMyWzEwXTsJCS8qIHJlc2VydmVkICovCiAJX191OCBEUzRFRkxWTDsJCS8qIGV4dGVuZGVkIGZyZWUtc3BhY2UgbWFuYWdlbWVudCBsZXZlbCAqLwogCXN0cnVjdCB2dG9jX2NjaGhiIERTNEVGUFRSOyAvKiBwb2ludGVyIHRvIGV4dGVuZGVkIGZyZWUtc3BhY2UgaW5mbyAqLwotCWNoYXIgcmVzM1s5XTsJCS8qIHJlc2VydmVkICovCisJY2hhciByZXMzOwkJLyogcmVzZXJ2ZWQgKi8KKwlfX3UzMiBEUzREQ1lMOwkJLyogbnVtYmVyIG9mIGxvZ2ljYWwgY3lscyAqLworCWNoYXIgcmVzNFsyXTsJCS8qIHJlc2VydmVkICovCisJX191OCBEUzRERVZGMjsJCS8qIGRldmljZSBmbGFncyAqLworCWNoYXIgcmVzNTsJCS8qIHJlc2VydmVkICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHZ0b2NfZHM1ZXh0CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQppbmRleCAzZWRjNmM2Li4yMjhlMzEwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKQEAgLTE3LDEwICsxNywxMiBAQAogIwogQ0ZMQUdTX3B0cmFjZS5vCQkrPSAtRFVUU19NQUNISU5FPSciJChVVFNfTUFDSElORSkiJwogCitDRkxBR1Nfc3lzaW5mby5vICs9IC1JaW5jbHVkZS9tYXRoLWVtdSAtSWFyY2gvczM5MC9tYXRoLWVtdSAtdworCiBvYmoteQk6PSAgYml0bWFwLm8gdHJhcHMubyB0aW1lLm8gcHJvY2Vzcy5vIGJhc2UubyBlYXJseS5vIHNldHVwLm8gXAogCSAgICBwcm9jZXNzb3IubyBzeXNfczM5MC5vIHB0cmFjZS5vIHNpZ25hbC5vIGNwY21kLm8gZWJjZGljLm8gXAogCSAgICBzMzkwX2V4dC5vIGRlYnVnLm8gaXJxLm8gaXBsLm8gZGlzLm8gZGlhZy5vIG1lbV9kZXRlY3QubyBcCi0JICAgIHZkc28ubyB2dGltZS5vCisJICAgIHZkc28ubyB2dGltZS5vIHN5c2luZm8ubyBubWkubwogCiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxlbnRyeTY0Lm8sZW50cnkubykKIG9iai15CSs9ICQoaWYgJChDT05GSUdfNjRCSVQpLHJlaXBsNjQubyxyZWlwbC5vKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuUyBiL2FyY2gvczM5MC9rZXJuZWwvYml0bWFwLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmYjQxZjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuUworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuUwotICogICAgQml0bWFwcyBmb3Igc2V0X2JpdCwgY2xlYXJfYml0LCB0ZXN0X2FuZF9zZXRfYml0LCAuLi4KLSAqICAgIFNlZSBpbmNsdWRlL2FzbS1zMzkwL3tiaXRvcHMuaHxwb3NpeF90eXBlcy5ofSBmb3IgZGV0YWlscwotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCi0gKi8KLQotICAgICAgICAgLmdsb2JsIF9vaV9iaXRtYXAKLV9vaV9iaXRtYXA6Ci0gICAgICAgICAuYnl0ZSAgMHgwMSwweDAyLDB4MDQsMHgwOCwweDEwLDB4MjAsMHg0MCwweDgwCi0KLSAgICAgICAgIC5nbG9ibCBfbmlfYml0bWFwCi1fbmlfYml0bWFwOgotICAgICAgICAgLmJ5dGUgIDB4RkUsMHhGRCwweEZCLDB4RjcsMHhFRiwweERGLDB4QkYsMHg3RgotCi0gICAgICAgICAuZ2xvYmwgX3piX2ZpbmRtYXAKLV96Yl9maW5kbWFwOgotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCAKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw2Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNwotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNAotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0Ci0gICAgICAgICAuYnl0ZSAgMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNQotICAgICAgICAgLmJ5dGUgIDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQKLSAgICAgICAgIC5ieXRlICAwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw4Ci0KLSAgICAgICAgIC5nbG9ibCBfc2JfZmluZG1hcAotX3NiX2ZpbmRtYXA6Ci0gICAgICAgICAuYnl0ZSAgOCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA3LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNiwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotICAgICAgICAgLmJ5dGUgIDQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAKLSAgICAgICAgIC5ieXRlICA1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwCi0gICAgICAgICAuYnl0ZSAgNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMAotCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2JpdG1hcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWU0NzU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9iaXRtYXAuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogICAgQml0bWFwcyBmb3Igc2V0X2JpdCwgY2xlYXJfYml0LCB0ZXN0X2FuZF9zZXRfYml0LCAuLi4KKyAqICAgIFNlZSBpbmNsdWRlL2FzbS97Yml0b3BzLmh8cG9zaXhfdHlwZXMuaH0gZm9yIGRldGFpbHMKKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTksMjAwOQorICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworY29uc3QgY2hhciBfb2lfYml0bWFwW10gPSB7IDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAgfTsKK0VYUE9SVF9TWU1CT0woX29pX2JpdG1hcCk7CisKK2NvbnN0IGNoYXIgX25pX2JpdG1hcFtdID0geyAweGZlLCAweGZkLCAweGZiLCAweGY3LCAweGVmLCAweGRmLCAweGJmLCAweDdmIH07CitFWFBPUlRfU1lNQk9MKF9uaV9iaXRtYXApOworCitjb25zdCBjaGFyIF96Yl9maW5kbWFwW10gPSB7CisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNiwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDUsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw3LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNSwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw0LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDYsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsNCwKKwkwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCw1LAorCTAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLDQsCisJMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsOCB9OworRVhQT1JUX1NZTUJPTChfemJfZmluZG1hcCk7CisKK2NvbnN0IGNoYXIgX3NiX2ZpbmRtYXBbXSA9IHsKKwk4LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTYsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk1LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNywwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTUsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNCwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk2LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwLAorCTQsMCwxLDAsMiwwLDEsMCwzLDAsMSwwLDIsMCwxLDAsCisJNSwwLDEsMCwyLDAsMSwwLDMsMCwxLDAsMiwwLDEsMCwKKwk0LDAsMSwwLDIsMCwxLDAsMywwLDEsMCwyLDAsMSwwIH07CitFWFBPUlRfU1lNQk9MKF9zYl9maW5kbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3B0cmFjZS5oIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfcHRyYWNlLmgKaW5kZXggYTJiZTNhOS4uMTIzZGQ2NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfcHRyYWNlLmgKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfcHRyYWNlLmgKQEAgLTEsMTAgKzEsMTEgQEAKICNpZm5kZWYgX1BUUkFDRTMyX0gKICNkZWZpbmUgX1BUUkFDRTMyX0gKIAorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4gICAgLyogbmVlZGVkIGZvciBOVU1fQ1JfV09SRFMgKi8KICNpbmNsdWRlICJjb21wYXRfbGludXguaCIgIC8qIG5lZWRlZCBmb3IgcHN3X2NvbXBhdF90ICovCiAKIHR5cGVkZWYgc3RydWN0IHsKLQlfX3UzMiBjclszXTsKKwlfX3UzMiBjcltOVU1fQ1JfV09SRFNdOwogfSBwZXJfY3Jfd29yZHMzMjsKIAogdHlwZWRlZiBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCmluZGV4IDYyYzcwNmUuLjg3Y2Y1YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKQEAgLTI1Miw3ICsyNTIsNyBAQAogc3lzMzJfdXN0YXRfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyBkZXZfdAogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCB1c3RhdCAqCi0JamcJc3lzX3VzdGF0CisJamcJY29tcGF0X3N5c191c3RhdAogCiAJLmdsb2JsCXN5czMyX2R1cDJfd3JhcHBlcgogc3lzMzJfZHVwMl93cmFwcGVyOgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCmluZGV4IGJhMDNmYzAuLmJlOGJjZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogc3RhdGljIGludAogZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgaSA9IDAsIHJjID0gMDsKKwlpbnQgaSwgcmMgPSAwOwogCWZpbGVfcHJpdmF0ZV9pbmZvX3QgKnBfaW5mbzsKIAlkZWJ1Z19pbmZvX3QgKmRlYnVnX2luZm8sICpkZWJ1Z19pbmZvX3NuYXBzaG90OwogCkBAIC02NDIsOCArNjQyLDcgQEAKIAlwX2luZm8gPSBrbWFsbG9jKHNpemVvZihmaWxlX3ByaXZhdGVfaW5mb190KSwKIAkJCQkJCUdGUF9LRVJORUwpOwogCWlmKCFwX2luZm8pewotCQlpZihkZWJ1Z19pbmZvX3NuYXBzaG90KQotCQkJZGVidWdfaW5mb19mcmVlKGRlYnVnX2luZm9fc25hcHNob3QpOworCQlkZWJ1Z19pbmZvX2ZyZWUoZGVidWdfaW5mb19zbmFwc2hvdCk7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNjk4LDggKzY5Nyw3IEBACiAJaWYgKCh1aWQgIT0gMCkgfHwgKGdpZCAhPSAwKSkKIAkJcHJfd2FybmluZygiUm9vdCBiZWNvbWVzIHRoZSBvd25lciBvZiBhbGwgczM5MGRiZiBmaWxlcyAiCiAJCQkgICAiaW4gc3lzZnNcbiIpOwotCWlmICghaW5pdGlhbGl6ZWQpCi0JCUJVRygpOworCUJVR19PTighaW5pdGlhbGl6ZWQpOwogCW11dGV4X2xvY2soJmRlYnVnX211dGV4KTsKIAogICAgICAgICAvKiBjcmVhdGUgbmV3IGRlYnVnX2luZm8gKi8KQEAgLTExNTYsNyArMTE1NCw2IEBACiAJZWxzZSB7CiAJCWRlYnVnZnNfcmVtb3ZlKGlkLT5kZWJ1Z2ZzX2VudHJpZXNbaV0pOwogCQlpZC0+dmlld3NbaV0gPSBOVUxMOwotCQlyYyA9IDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkLT5sb2NrLCBmbGFncyk7CiBvdXQ6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKaW5kZXggMmEyY2EyNi4uNGQyMjFjOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lYXJseS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYwpAQCAtNiw2ICs2LDcgQEAKICAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0yMCw2ICsyMSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9zeXNpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2NwY21kLmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KICNpbmNsdWRlICJlbnRyeS5oIgpAQCAtMTczLDE5ICsxNzUsMjEgQEAKIAkJcGFnZV9zZXRfc3RvcmFnZV9rZXkoaW5pdF9wZm4gPDwgUEFHRV9TSElGVCwgUEFHRV9ERUZBVUxUX0tFWSk7CiB9CiAKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBzeXNpbmZvXzNfMl8yIHZtbXMgX19hbGlnbmVkKFBBR0VfU0laRSk7CisKIHN0YXRpYyBub2lubGluZSBfX2luaXQgdm9pZCBkZXRlY3RfbWFjaGluZV90eXBlKHZvaWQpCiB7Ci0Jc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbyA9ICZTMzkwX2xvd2NvcmUuY3B1X2RhdGE7CisJLyogTm8gVk0gaW5mb3JtYXRpb24/IExvb2tzIGxpa2UgTFBBUiAqLworCWlmIChzdHNpKCZ2bW1zLCAzLCAyLCAyKSA9PSAtRU5PU1lTKQorCQlyZXR1cm47CisJaWYgKCF2bW1zLmNvdW50KQorCQlyZXR1cm47CiAKLQlnZXRfY3B1X2lkKCZTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2lkKTsKLQotCS8qIFJ1bm5pbmcgdW5kZXIgei9WTSA/ICovCi0JaWYgKGNwdWluZm8tPmNwdV9pZC52ZXJzaW9uID09IDB4ZmYpCi0JCW1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX1ZNOwotCi0JLyogUnVubmluZyB1bmRlciBLVk0gPyAqLwotCWlmIChjcHVpbmZvLT5jcHVfaWQudmVyc2lvbiA9PSAweGZlKQorCS8qIFJ1bm5pbmcgdW5kZXIgS1ZNPyBJZiBub3Qgd2UgYXNzdW1lIHovVk0gKi8KKwlpZiAoIW1lbWNtcCh2bW1zLnZtWzBdLmNwaSwgIlx4ZDJceGU1XHhkNCIsIDMpKQogCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19LVk07CisJZWxzZQorCQltYWNoaW5lX2ZsYWdzIHw9IE1BQ0hJTkVfRkxBR19WTTsKIH0KIAogc3RhdGljIF9faW5pdCB2b2lkIGVhcmx5X3BnbV9jaGVja19oYW5kbGVyKHZvaWQpCkBAIC0zNDgsNyArMzUyLDYgQEAKIAogCS8qIGNvcHkgYXJjaCBjb21tYW5kIGxpbmUgKi8KIAlzdHJsY3B5KGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkUsIEFSQ0hfQ09NTUFORF9MSU5FX1NJWkUpOwotCWJvb3RfY29tbWFuZF9saW5lW0FSQ0hfQ09NTUFORF9MSU5FX1NJWkUgLSAxXSA9IDA7CiAKIAkvKiBhcHBlbmQgSVBMIFBBUk0gZGF0YSB0byB0aGUgYm9vdCBjb21tYW5kIGxpbmUgKi8KIAlpZiAoTUFDSElORV9JU19WTSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwppbmRleCBlYzdlMzVmLi4xMDQ2YzJjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwpAQCAtNDY5LDYgKzQ2OSw4IEBACiAJLm9yZwkweDEwMDAwCiBzdGFydHVwOmJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQogLkxQRzA6CisJeGMJMHgyMDAoMjU2KSwweDIwMAkjIHBhcnRpYWxseSBjbGVhciBsb3djb3JlCisJeGMJMHgzMDAoMjU2KSwweDMwMAogCiAjaWZuZGVmIENPTkZJR19NQVJDSF9HNQogCSMgY2hlY2sgcHJvY2Vzc29yIHZlcnNpb24gYWdhaW5zdCBNQVJDSF97RzUsWjkwMCxaOTkwLFo5XzEwOSxaMTB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUwppbmRleCBkYjQ3NmQxLi4yY2VkODQ2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKQEAgLTIwLDcgKzIwLDYgQEAKIAlsY3RsCSVjMCwlYzE1LC5MY3RsLS5MUEcxKCVyMTMpICMgbG9hZCBjb250cm9sIHJlZ2lzdGVycwogCWwJJXIxMiwuTHBhcm1hZGRyLS5MUEcxKCVyMTMpICMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYXJlYQogCQkJCQkjIG1vdmUgSVBMIGRldmljZSB0byBsb3djb3JlCi0JbXZjCV9fTENfSVBMREVWKDQpLElQTF9ERVZJQ0UtUEFSTUFSRUEoJXIxMikKICMKICMgU2V0dXAgc3RhY2sKICMKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCmluZGV4IGY5ZjcwYWEuLjY1NjY3YjIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwpAQCAtODYsNyArODYsNiBAQAogCWxjdGxnCSVjMCwlYzE1LC5MY3RsLS5MUEcxKCVyMTMpCSMgbG9hZCBjb250cm9sIHJlZ2lzdGVycwogCWxnCSVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKQkjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKIAkJCQkJIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQotCW12YwlfX0xDX0lQTERFVig0KSxJUExfREVWSUNFKzQtUEFSTUFSRUEoJXIxMikKIAlsZ2hpCSVyMCxfX0xDX1BBU1RFCiAJc3RnCSVyMCxfX0xDX1ZEU09fUEVSX0NQVQogIwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKaW5kZXggMmRjZjU5MGYuLjZmMzcxMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vcmVzZXQuaD4KICNpbmNsdWRlIDxhc20vc2NscC5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgogCiAjZGVmaW5lIElQTF9QQVJNX0JMT0NLX1ZFUlNJT04gMAogCkBAIC01NiwxMyArNTYsMTQgQEAKIH07CiAKIC8qCi0gKiBGaXZlIHNodXRkb3duIGFjdGlvbiB0eXBlcyBhcmUgc3VwcG9ydGVkOgorICogVGhlIGZvbGxvd2luZyBzaHV0ZG93biBhY3Rpb24gdHlwZXMgYXJlIHN1cHBvcnRlZDoKICAqLwogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05fSVBMX1NUUgkJImlwbCIKICNkZWZpbmUgU0hVVERPV05fQUNUSU9OX1JFSVBMX1NUUgkicmVpcGwiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9EVU1QX1NUUgkiZHVtcCIKICNkZWZpbmUgU0hVVERPV05fQUNUSU9OX1ZNQ01EX1NUUgkidm1jbWQiCiAjZGVmaW5lIFNIVVRET1dOX0FDVElPTl9TVE9QX1NUUgkic3RvcCIKKyNkZWZpbmUgU0hVVERPV05fQUNUSU9OX0RVTVBfUkVJUExfU1RSCSJkdW1wX3JlaXBsIgogCiBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uIHsKIAljaGFyICpuYW1lOwpAQCAtMTQ2LDYgKzE0Nyw3IEBACiBzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKnJlaXBsX2Jsb2NrX2ZjcDsKIHN0YXRpYyBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqcmVpcGxfYmxvY2tfY2N3Owogc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19uc3M7CitzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKnJlaXBsX2Jsb2NrX2FjdHVhbDsKIAogc3RhdGljIGludCBkdW1wX2NhcGFiaWxpdGllcyA9IERVTVBfVFlQRV9OT05FOwogc3RhdGljIGVudW0gZHVtcF90eXBlIGR1bXBfdHlwZSA9IERVTVBfVFlQRV9OT05FOwpAQCAtODM1LDYgKzgzNyw3IEBACiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfQ0NXX1ZNOwogCQllbHNlCiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfQ0NXX0NJTzsKKwkJcmVpcGxfYmxvY2tfYWN0dWFsID0gcmVpcGxfYmxvY2tfY2N3OwogCQlicmVhazsKIAljYXNlIElQTF9UWVBFX0ZDUDoKIAkJaWYgKGRpYWczMDhfc2V0X3dvcmtzKQpAQCAtODQzLDYgKzg0Niw3IEBACiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfRkNQX1JPX1ZNOwogCQllbHNlCiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfRkNQX1JPX0RJQUc7CisJCXJlaXBsX2Jsb2NrX2FjdHVhbCA9IHJlaXBsX2Jsb2NrX2ZjcDsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9GQ1BfRFVNUDoKIAkJcmVpcGxfbWV0aG9kID0gUkVJUExfTUVUSE9EX0ZDUF9EVU1QOwpAQCAtODUyLDYgKzg1Niw3IEBACiAJCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfTlNTX0RJQUc7CiAJCWVsc2UKIAkJCXJlaXBsX21ldGhvZCA9IFJFSVBMX01FVEhPRF9OU1M7CisJCXJlaXBsX2Jsb2NrX2FjdHVhbCA9IHJlaXBsX2Jsb2NrX25zczsKIAkJYnJlYWs7CiAJY2FzZSBJUExfVFlQRV9VTktOT1dOOgogCQlyZWlwbF9tZXRob2QgPSBSRUlQTF9NRVRIT0RfREVGQVVMVDsKQEAgLTk2MCw3ICs5NjUsNiBAQAogCQlkaWFnMzA4KERJQUczMDhfSVBMLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBSRUlQTF9NRVRIT0RfRkNQX0RVTVA6Ci0JZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CkBAIC0xMDY5LDEwICsxMDczLDEyIEBACiB7CiAJaW50IHJjOwogCi0JaWYgKCghZGlhZzMwOF9zZXRfd29ya3MpICYmIChpcGxfaW5mby50eXBlICE9IElQTF9UWVBFX0ZDUCkpCi0JCXJldHVybiAwOwotCWlmICgoIWRpYWczMDhfc2V0X3dvcmtzKSAmJiAoaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9GQ1ApKQotCQltYWtlX2F0dHJzX3JvKHJlaXBsX2ZjcF9hdHRycyk7CisJaWYgKCFkaWFnMzA4X3NldF93b3JrcykgeworCQlpZiAoaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9GQ1ApCisJCQltYWtlX2F0dHJzX3JvKHJlaXBsX2ZjcF9hdHRycyk7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KIAogCXJlaXBsX2Jsb2NrX2ZjcCA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIXJlaXBsX2Jsb2NrX2ZjcCkKQEAgLTEyNTMsNyArMTI1OSw2IEBACiAJCWRpYWczMDgoRElBRzMwOF9EVU1QLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBEVU1QX01FVEhPRF9OT05FOgotCWRlZmF1bHQ6CiAJCXJldHVybjsKIAl9CiAJcHJpbnRrKEtFUk5fRU1FUkcgIkR1bXAgZmFpbGVkIVxuIik7CkBAIC0xMzMyLDYgKzEzMzcsNDkgQEAKIAkuaW5pdAk9IGR1bXBfaW5pdCwKIH07CiAKK3N0YXRpYyB2b2lkIGR1bXBfcmVpcGxfcnVuKHN0cnVjdCBzaHV0ZG93bl90cmlnZ2VyICp0cmlnZ2VyKQoreworCXByZWVtcHRfZGlzYWJsZSgpOworCS8qCisJICogQnlwYXNzIGR5bmFtaWMgYWRkcmVzcyB0cmFuc2xhdGlvbiAoREFUKSB3aGVuIHN0b3JpbmcgSVBMIHBhcmFtZXRlcgorCSAqIGluZm9ybWF0aW9uIGJsb2NrIGFkZHJlc3MgYW5kIGNoZWNrc3VtIGludG8gdGhlIHByZWZpeCBhcmVhCisJICogKGNvcnJlc3BvbmRpbmcgdG8gYWJzb2x1dGUgYWRkcmVzc2VzIDAtODE5MSkuCisJICogV2hlbiBlbmhhbmNlZCBEQVQgYXBwbGllcyBhbmQgdGhlIFNURSBmb3JtYXQgY29udHJvbCBpbiBvbmUsCisJICogdGhlIGFic29sdXRlIGFkZHJlc3MgaXMgZm9ybWVkIHdpdGhvdXQgcHJlZml4aW5nLiBJbiB0aGlzIGNhc2UgYQorCSAqIG5vcm1hbCBzdG9yZSAoc3RnL3N0KSBpbnRvIHRoZSBwcmVmaXggYXJlYSB3b3VsZCBubyBtb3JlIG1hdGNoIHRvCisJICogYWJzb2x1dGUgYWRkcmVzc2VzIDAtODE5MS4KKwkgKi8KKyNpZmRlZiBDT05GSUdfNjRCSVQKKwlhc20gdm9sYXRpbGUoInN0dXJnICUwLCUxIgorCQk6OiAiYSIgKCh1bnNpZ25lZCBsb25nKSByZWlwbF9ibG9ja19hY3R1YWwpLAorCQkiYSIgKCZsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5pcGliKSk7CisjZWxzZQorCWFzbSB2b2xhdGlsZSgic3R1cmEgJTAsJTEiCisJCTo6ICJhIiAoKHVuc2lnbmVkIGxvbmcpIHJlaXBsX2Jsb2NrX2FjdHVhbCksCisJCSJhIiAoJmxvd2NvcmVfcHRyW3NtcF9wcm9jZXNzb3JfaWQoKV0tPmlwaWIpKTsKKyNlbmRpZgorCWFzbSB2b2xhdGlsZSgic3R1cmEgJTAsJTEiCisJCTo6ICJhIiAoY3N1bV9wYXJ0aWFsKHJlaXBsX2Jsb2NrX2FjdHVhbCwKKwkJCQkgICAgIHJlaXBsX2Jsb2NrX2FjdHVhbC0+aGRyLmxlbiwgMCkpLAorCQkiYSIgKCZsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5pcGliX2NoZWNrc3VtKSk7CisJcHJlZW1wdF9lbmFibGUoKTsKKwlkdW1wX3J1bih0cmlnZ2VyKTsKK30KKworc3RhdGljIGludCBfX2luaXQgZHVtcF9yZWlwbF9pbml0KHZvaWQpCit7CisJaWYgKCFkaWFnMzA4X3NldF93b3JrcykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uIF9fcmVmZGF0YSBkdW1wX3JlaXBsX2FjdGlvbiA9IHsKKwkubmFtZQk9IFNIVVRET1dOX0FDVElPTl9EVU1QX1JFSVBMX1NUUiwKKwkuZm4JPSBkdW1wX3JlaXBsX3J1biwKKwkuaW5pdAk9IGR1bXBfcmVpcGxfaW5pdCwKK307CisKIC8qCiAgKiB2bWNtZCBzaHV0ZG93biBhY3Rpb246IFRyaWdnZXIgdm0gY29tbWFuZCBvbiBzaHV0ZG93bi4KICAqLwpAQCAtMTQyMSw3ICsxNDY5LDggQEAKIC8qIGFjdGlvbiBsaXN0ICovCiAKIHN0YXRpYyBzdHJ1Y3Qgc2h1dGRvd25fYWN0aW9uICpzaHV0ZG93bl9hY3Rpb25zX2xpc3RbXSA9IHsKLQkmaXBsX2FjdGlvbiwgJnJlaXBsX2FjdGlvbiwgJmR1bXBfYWN0aW9uLCAmdm1jbWRfYWN0aW9uLCAmc3RvcF9hY3Rpb259OworCSZpcGxfYWN0aW9uLCAmcmVpcGxfYWN0aW9uLCAmZHVtcF9yZWlwbF9hY3Rpb24sICZkdW1wX2FjdGlvbiwKKwkmdm1jbWRfYWN0aW9uLCAmc3RvcF9hY3Rpb259OwogI2RlZmluZSBTSFVURE9XTl9BQ1RJT05TX0NPVU5UIChzaXplb2Yoc2h1dGRvd25fYWN0aW9uc19saXN0KSAvIHNpemVvZih2b2lkICopKQogCiAvKgpAQCAtMTQzNCwxMSArMTQ4MywxMSBAQAogCQkgICAgICAgc2l6ZV90IGxlbikKIHsKIAlpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBTSFVURE9XTl9BQ1RJT05TX0NPVU5UOyBpKyspIHsKIAkJaWYgKCFzaHV0ZG93bl9hY3Rpb25zX2xpc3RbaV0pCiAJCQljb250aW51ZTsKLQkJaWYgKHN0cm5jbXAoYnVmLCBzaHV0ZG93bl9hY3Rpb25zX2xpc3RbaV0tPm5hbWUsCi0JCQkgICAgc3RybGVuKHNodXRkb3duX2FjdGlvbnNfbGlzdFtpXS0+bmFtZSkpID09IDApIHsKKwkJaWYgKHN5c2ZzX3N0cmVxKGJ1Ziwgc2h1dGRvd25fYWN0aW9uc19saXN0W2ldLT5uYW1lKSkgewogCQkJdHJpZ2dlci0+YWN0aW9uID0gc2h1dGRvd25fYWN0aW9uc19saXN0W2ldOwogCQkJcmV0dXJuIGxlbjsKIAkJfQpAQCAtMTY3Miw3ICsxNzIxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBvbl9wYW5pY19uYiA9IHsKIAkubm90aWZpZXJfY2FsbCA9IG9uX3BhbmljX25vdGlmeSwKLQkucHJpb3JpdHkgPSAwLAorCS5wcmlvcml0eSA9IElOVF9NSU4sCiB9OwogCiB2b2lkIF9faW5pdCBzZXR1cF9pcGwodm9pZCkKQEAgLTE2OTYsNyArMTc0NSw2IEBACiAJCQlzaXplb2YoaXBsX2luZm8uZGF0YS5uc3MubmFtZSkpOwogCQlicmVhazsKIAljYXNlIElQTF9UWVBFX1VOS05PV046Ci0JZGVmYXVsdDoKIAkJLyogV2UgaGF2ZSBubyBpbmZvIHRvIGNvcHkgKi8KIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMKaW5kZXggNTliNGU3OS4uZWVkNGEwMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jCkBAIC0zMTAsMTUgKzMxMCwyMCBAQAogCQkJaW5mby0+cGx0X2luaXRpYWxpemVkID0gMTsKIAkJfQogCQlpZiAocl90eXBlID09IFJfMzkwX1BMVE9GRjE2IHx8Ci0JCSAgICByX3R5cGUgPT0gUl8zOTBfUExUT0ZGMzIKLQkJICAgIHx8IHJfdHlwZSA9PSBSXzM5MF9QTFRPRkY2NAotCQkJKQorCQkgICAgcl90eXBlID09IFJfMzkwX1BMVE9GRjMyIHx8CisJCSAgICByX3R5cGUgPT0gUl8zOTBfUExUT0ZGNjQpCiAJCQl2YWwgPSBtZS0+YXJjaC5wbHRfb2Zmc2V0IC0gbWUtPmFyY2guZ290X29mZnNldCArCiAJCQkJaW5mby0+cGx0X29mZnNldCArIHJlbGEtPnJfYWRkZW5kOwotCQllbHNlCi0JCQl2YWwgPSAgKEVsZl9BZGRyKSBtZS0+bW9kdWxlX2NvcmUgKwotCQkJCW1lLT5hcmNoLnBsdF9vZmZzZXQgKyBpbmZvLT5wbHRfb2Zmc2V0ICsgCi0JCQkJcmVsYS0+cl9hZGRlbmQgLSBsb2M7CisJCWVsc2UgeworCQkJaWYgKCEoKHJfdHlwZSA9PSBSXzM5MF9QTFQxNkRCTCAmJgorCQkJICAgICAgIHZhbCAtIGxvYyArIDB4ZmZmZlVMIDwgMHgxZmZmZmVVTCkgfHwKKwkJCSAgICAgIChyX3R5cGUgPT0gUl8zOTBfUExUMzJEQkwgJiYKKwkJCSAgICAgICB2YWwgLSBsb2MgKyAweGZmZmZmZmZmVUxMIDwgMHgxZmZmZmZmZmVVTEwpKSkKKwkJCQl2YWwgPSAoRWxmX0FkZHIpIG1lLT5tb2R1bGVfY29yZSArCisJCQkJCW1lLT5hcmNoLnBsdF9vZmZzZXQgKworCQkJCQlpbmZvLT5wbHRfb2Zmc2V0OworCQkJdmFsICs9IHJlbGEtPnJfYWRkZW5kIC0gbG9jOworCQl9CiAJCWlmIChyX3R5cGUgPT0gUl8zOTBfUExUMTZEQkwpCiAJCQkqKHVuc2lnbmVkIHNob3J0ICopIGxvYyA9IHZhbCA+PiAxOwogCQllbHNlIGlmIChyX3R5cGUgPT0gUl8zOTBfUExUT0ZGMTYpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL25taS5jIGIvYXJjaC9zMzkwL2tlcm5lbC9ubWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmZkYzQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9ubWkuYwpAQCAtMCwwICsxLDM3NiBAQAorLyoKKyAqICAgTWFjaGluZSBjaGVjayBoYW5kbGVyCisgKgorICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAwLDIwMDkKKyAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgPGFkbHVuZ0BkZS5pYm0uY29tPiwKKyAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqCQkgQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPiwKKyAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+LAorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL2V0ci5oPgorI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5jbHVkZSA8YXNtL2Nydy5oPgorCitzdHJ1Y3QgbWNja19zdHJ1Y3QgeworCWludCBraWxsX3Rhc2s7CisJaW50IGNoYW5uZWxfcmVwb3J0OworCWludCB3YXJuaW5nOworCXVuc2lnbmVkIGxvbmcgbG9uZyBtY2NrX2NvZGU7Cit9OworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG1jY2tfc3RydWN0LCBjcHVfbWNjayk7CisKK3N0YXRpYyBOT1JFVF9UWVBFIHZvaWQgczM5MF9oYW5kbGVfZGFtYWdlKGNoYXIgKm1zZykKK3sKKwlzbXBfc2VuZF9zdG9wKCk7CisJZGlzYWJsZWRfd2FpdCgodW5zaWduZWQgbG9uZykgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKwl3aGlsZSAoMSk7Cit9CisKKy8qCisgKiBNYWluIG1hY2hpbmUgY2hlY2sgaGFuZGxlciBmdW5jdGlvbi4gV2lsbCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQKKyAqIG9yIGRpc2FibGVkIGFuZCBtYWNoaW5lIGNoZWNrcyBlbmFibGVkIG9yIGRpc2FibGVkLgorICovCit2b2lkIHMzOTBfaGFuZGxlX21jY2sodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBtY2NrX3N0cnVjdCBtY2NrOworCisJLyoKKwkgKiBEaXNhYmxlIG1hY2hpbmUgY2hlY2tzIGFuZCBnZXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWNjdW11bGF0ZWQKKwkgKiBtYWNoaW5lIGNoZWNrcy4gQWZ0ZXJ3YXJkcyBkZWxldGUgdGhlIG9sZCBzdGF0ZSBhbmQgZW5hYmxlIG1hY2hpbmUKKwkgKiBjaGVja3MgYWdhaW4uCisJICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWxvY2FsX21jY2tfZGlzYWJsZSgpOworCW1jY2sgPSBfX2dldF9jcHVfdmFyKGNwdV9tY2NrKTsKKwltZW1zZXQoJl9fZ2V0X2NwdV92YXIoY3B1X21jY2spLCAwLCBzaXplb2Yoc3RydWN0IG1jY2tfc3RydWN0KSk7CisJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7CisJbG9jYWxfbWNja19lbmFibGUoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlpZiAobWNjay5jaGFubmVsX3JlcG9ydCkKKwkJY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCgpOworCS8qCisJICogQSB3YXJuaW5nIG1heSByZW1haW4gZm9yIGEgcHJvbG9uZ2VkIHBlcmlvZCBvbiB0aGUgYmFyZSBpcm9uLgorCSAqIChhY3R1YWxseSB1bnRpbCB0aGUgbWFjaGluZSBpcyBwb3dlcmVkIG9mZiwgb3IgdGhlIHByb2JsZW0gaXMgZ29uZSkKKwkgKiBTbyB3ZSBqdXN0IHN0b3AgbGlzdGVuaW5nIGZvciB0aGUgV0FSTklORyBNQ0ggYW5kIGF2b2lkIGNvbnRpbnVvdXNseQorCSAqIGJlaW5nIGludGVycnVwdGVkLiAgT25lIGNhdmVhdCBpcyBob3dldmVyLCB0aGF0IHdlIG11c3QgZG8gdGhpcyBwZXIKKwkgKiBwcm9jZXNzb3IgYW5kIGNhbm5vdCB1c2UgdGhlIHNtcCB2ZXJzaW9uIG9mIGN0bF9jbGVhcl9iaXQoKS4KKwkgKiBPbiBWTSB3ZSBvbmx5IGdldCBvbmUgaW50ZXJydXB0IHBlciB2aXJ0YWxseSBwcmVzZW50ZWQgbWFjaGluZWNoZWNrLgorCSAqIFRob3VnaCBvbmUgc3VmZmljZXMsIHdlIG1heSBnZXQgb25lIGludGVycnVwdCBwZXIgKHZpcnR1YWwpIGNwdS4KKwkgKi8KKwlpZiAobWNjay53YXJuaW5nKSB7CS8qIFdBUk5JTkcgcGVuZGluZyA/ICovCisJCXN0YXRpYyBpbnQgbWNoY2hrX3duZ19wb3N0ZWQgPSAwOworCisJCS8qIFVzZSBzaW5nbGUgY3B1IGNsZWFyLCBhcyB3ZSBjYW5ub3QgaGFuZGxlIHNtcCBoZXJlLiAqLworCQlfX2N0bF9jbGVhcl9iaXQoMTQsIDI0KTsJLyogRGlzYWJsZSBXQVJOSU5HIE1DSCAqLworCQlpZiAoeGNoZygmbWNoY2hrX3duZ19wb3N0ZWQsIDEpID09IDApCisJCQlraWxsX2NhZF9waWQoU0lHUFdSLCAxKTsKKwl9CisJaWYgKG1jY2sua2lsbF90YXNrKSB7CisJCWxvY2FsX2lycV9lbmFibGUoKTsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIm1jY2s6IFRlcm1pbmF0aW5nIHRhc2sgYmVjYXVzZSBvZiBtYWNoaW5lICIKKwkJICAgICAgICJtYWxmdW5jdGlvbiAoY29kZSAweCUwMTZsbHgpLlxuIiwgbWNjay5tY2NrX2NvZGUpOworCQlwcmludGsoS0VSTl9FTUVSRyAibWNjazogdGFzazogJXMsIHBpZDogJWQuXG4iLAorCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKKwkJZG9fZXhpdChTSUdTRUdWKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzMzkwX2hhbmRsZV9tY2NrKTsKKworLyoKKyAqIHJldHVybnMgMCBpZiBhbGwgcmVnaXN0ZXJzIGNvdWxkIGJlIHZhbGlkYXRlZAorICogcmV0dXJucyAxIG90aGVyd2lzZQorICovCitzdGF0aWMgaW50IG5vdHJhY2UgczM5MF9yZXZhbGlkYXRlX3JlZ2lzdGVycyhzdHJ1Y3QgbWNpICptY2kpCit7CisJaW50IGtpbGxfdGFzazsKKwl1NjQgdG1wY2xvY2s7CisJdTY0IHplcm87CisJdm9pZCAqZnB0X3NhdmVfYXJlYSwgKmZwdF9jcmVnX3NhdmVfYXJlYTsKKworCWtpbGxfdGFzayA9IDA7CisJemVybyA9IDA7CisKKwlpZiAoIW1jaS0+Z3IpIHsKKwkJLyoKKwkJICogR2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBjb3VsZG4ndCBiZSByZXN0b3JlZCBhbmQgaGF2ZQorCQkgKiB1bmtub3duIGNvbnRlbnRzLiBQcm9jZXNzIG5lZWRzIHRvIGJlIHRlcm1pbmF0ZWQuCisJCSAqLworCQlraWxsX3Rhc2sgPSAxOworCX0KKwlpZiAoIW1jaS0+ZnApIHsKKwkJLyoKKwkJICogRmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGNhbid0IGJlIHJlc3RvcmVkIGFuZAorCQkgKiB0aGVyZWZvcmUgdGhlIHByb2Nlc3MgbmVlZHMgdG8gYmUgdGVybWluYXRlZC4KKwkJICovCisJCWtpbGxfdGFzayA9IDE7CisJfQorI2lmbmRlZiBDT05GSUdfNjRCSVQKKwlhc20gdm9sYXRpbGUoCisJCSIJbGQJMCwwKCUwKVxuIgorCQkiCWxkCTIsOCglMClcbiIKKwkJIglsZAk0LDE2KCUwKVxuIgorCQkiCWxkCTYsMjQoJTApIgorCQk6IDogImEiICgmUzM5MF9sb3djb3JlLmZsb2F0aW5nX3B0X3NhdmVfYXJlYSkpOworI2VuZGlmCisKKwlpZiAoTUFDSElORV9IQVNfSUVFRSkgeworI2lmZGVmIENPTkZJR182NEJJVAorCQlmcHRfc2F2ZV9hcmVhID0gJlMzOTBfbG93Y29yZS5mbG9hdGluZ19wdF9zYXZlX2FyZWE7CisJCWZwdF9jcmVnX3NhdmVfYXJlYSA9ICZTMzkwX2xvd2NvcmUuZnB0X2NyZWdfc2F2ZV9hcmVhOworI2Vsc2UKKwkJZnB0X3NhdmVfYXJlYSA9ICh2b2lkICopIFMzOTBfbG93Y29yZS5leHRlbmRlZF9zYXZlX2FyZWFfYWRkcjsKKwkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gZnB0X3NhdmVfYXJlYSArIDEyODsKKyNlbmRpZgorCQlpZiAoIW1jaS0+ZmMpIHsKKwkJCS8qCisJCQkgKiBGbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyIGNhbid0IGJlIHJlc3RvcmVkLgorCQkJICogVGFzayB3aWxsIGJlIHRlcm1pbmF0ZWQuCisJCQkgKi8KKwkJCWFzbSB2b2xhdGlsZSgibGZwYyAwKCUwKSIgOiA6ICJhIiAoJnplcm8pLCAibSIgKHplcm8pKTsKKwkJCWtpbGxfdGFzayA9IDE7CisKKwkJfSBlbHNlCisJCQlhc20gdm9sYXRpbGUoImxmcGMgMCglMCkiIDogOiAiYSIgKGZwdF9jcmVnX3NhdmVfYXJlYSkpOworCisJCWFzbSB2b2xhdGlsZSgKKwkJCSIJbGQJMCwwKCUwKVxuIgorCQkJIglsZAkxLDgoJTApXG4iCisJCQkiCWxkCTIsMTYoJTApXG4iCisJCQkiCWxkCTMsMjQoJTApXG4iCisJCQkiCWxkCTQsMzIoJTApXG4iCisJCQkiCWxkCTUsNDAoJTApXG4iCisJCQkiCWxkCTYsNDgoJTApXG4iCisJCQkiCWxkCTcsNTYoJTApXG4iCisJCQkiCWxkCTgsNjQoJTApXG4iCisJCQkiCWxkCTksNzIoJTApXG4iCisJCQkiCWxkCTEwLDgwKCUwKVxuIgorCQkJIglsZAkxMSw4OCglMClcbiIKKwkJCSIJbGQJMTIsOTYoJTApXG4iCisJCQkiCWxkCTEzLDEwNCglMClcbiIKKwkJCSIJbGQJMTQsMTEyKCUwKVxuIgorCQkJIglsZAkxNSwxMjAoJTApXG4iCisJCQk6IDogImEiIChmcHRfc2F2ZV9hcmVhKSk7CisJfQorCS8qIFJldmFsaWRhdGUgYWNjZXNzIHJlZ2lzdGVycyAqLworCWFzbSB2b2xhdGlsZSgKKwkJIglsYW0JMCwxNSwwKCUwKSIKKwkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5hY2Nlc3NfcmVnc19zYXZlX2FyZWEpKTsKKwlpZiAoIW1jaS0+YXIpIHsKKwkJLyoKKwkJICogQWNjZXNzIHJlZ2lzdGVycyBoYXZlIHVua25vd24gY29udGVudHMuCisJCSAqIFRlcm1pbmF0aW5nIHRhc2suCisJCSAqLworCQlraWxsX3Rhc2sgPSAxOworCX0KKwkvKiBSZXZhbGlkYXRlIGNvbnRyb2wgcmVnaXN0ZXJzICovCisJaWYgKCFtY2ktPmNyKSB7CisJCS8qCisJCSAqIENvbnRyb2wgcmVnaXN0ZXJzIGhhdmUgdW5rbm93biBjb250ZW50cy4KKwkJICogQ2FuJ3QgcmVjb3ZlciBhbmQgdGhlcmVmb3JlIHN0b3BwaW5nIG1hY2hpbmUuCisJCSAqLworCQlzMzkwX2hhbmRsZV9kYW1hZ2UoImludmFsaWQgY29udHJvbCByZWdpc3RlcnMuIik7CisJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwkJYXNtIHZvbGF0aWxlKAorCQkJIglsY3RsZwkwLDE1LDAoJTApIgorCQkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5jcmVnc19zYXZlX2FyZWEpKTsKKyNlbHNlCisJCWFzbSB2b2xhdGlsZSgKKwkJCSIJbGN0bAkwLDE1LDAoJTApIgorCQkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5jcmVnc19zYXZlX2FyZWEpKTsKKyNlbmRpZgorCX0KKwkvKgorCSAqIFdlIGRvbid0IGV2ZW4gdHJ5IHRvIHJldmFsaWRhdGUgdGhlIFRPRCByZWdpc3Rlciwgc2luY2Ugd2Ugc2ltcGx5CisJICogY2FuJ3Qgd3JpdGUgc29tZXRoaW5nIHNlbnNpYmxlIGludG8gdGhhdCByZWdpc3Rlci4KKwkgKi8KKyNpZmRlZiBDT05GSUdfNjRCSVQKKwkvKgorCSAqIFNlZSBpZiB3ZSBjYW4gcmV2YWxpZGF0ZSB0aGUgVE9EIHByb2dyYW1tYWJsZSByZWdpc3RlciB3aXRoIGl0cworCSAqIG9sZCBjb250ZW50cyAoc2hvdWxkIGJlIHplcm8pIG90aGVyd2lzZSBzZXQgaXQgdG8gemVyby4KKwkgKi8KKwlpZiAoIW1jaS0+cHIpCisJCWFzbSB2b2xhdGlsZSgKKwkJCSIJc3IJMCwwXG4iCisJCQkiCXNja3BmIgorCQkJOiA6IDogIjAiLCAiY2MiKTsKKwllbHNlCisJCWFzbSB2b2xhdGlsZSgKKwkJCSIJbAkwLDAoJTApXG4iCisJCQkiCXNja3BmIgorCQkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS50b2RfcHJvZ3JlZ19zYXZlX2FyZWEpCisJCQk6ICIwIiwgImNjIik7CisjZW5kaWYKKwkvKiBSZXZhbGlkYXRlIGNsb2NrIGNvbXBhcmF0b3IgcmVnaXN0ZXIgKi8KKwlhc20gdm9sYXRpbGUoCisJCSIJc3RjawkwKCUxKVxuIgorCQkiCXNja2MJMCglMSkiCisJCTogIj1tIiAodG1wY2xvY2spIDogImEiICgmKHRtcGNsb2NrKSkgOiAiY2MiLCAibWVtb3J5Iik7CisKKwkvKiBDaGVjayBpZiBvbGQgUFNXIGlzIHZhbGlkICovCisJaWYgKCFtY2ktPndwKQorCQkvKgorCQkgKiBDYW4ndCB0ZWxsIGlmIHdlIGNvbWUgZnJvbSB1c2VyIG9yIGtlcm5lbCBtb2RlCisJCSAqIC0+IHN0b3BwaW5nIG1hY2hpbmUuCisJCSAqLworCQlzMzkwX2hhbmRsZV9kYW1hZ2UoIm9sZCBwc3cgaW52YWxpZC4iKTsKKworCWlmICghbWNpLT5tcyB8fCAhbWNpLT5wbSB8fCAhbWNpLT5pYSkKKwkJa2lsbF90YXNrID0gMTsKKworCXJldHVybiBraWxsX3Rhc2s7Cit9CisKKyNkZWZpbmUgTUFYX0lQRF9DT1VOVAkyOQorI2RlZmluZSBNQVhfSVBEX1RJTUUJKDUgKiA2MCAqIFVTRUNfUEVSX1NFQykgLyogNSBtaW51dGVzICovCisKKyNkZWZpbmUgRURfU1RQX0lTTEFORAk2CS8qIEV4dGVybmFsIGRhbWFnZSBTVFAgaXNsYW5kIGNoZWNrICovCisjZGVmaW5lIEVEX1NUUF9TWU5DCTcJLyogRXh0ZXJuYWwgZGFtYWdlIFNUUCBzeW5jIGNoZWNrICovCisjZGVmaW5lIEVEX0VUUl9TWU5DCTEyCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3luYyBjaGVjayAqLworI2RlZmluZSBFRF9FVFJfU1dJVENICTEzCS8qIEV4dGVybmFsIGRhbWFnZSBFVFIgc3dpdGNoIHRvIGxvY2FsICovCisKKy8qCisgKiBtYWNoaW5lIGNoZWNrIGhhbmRsZXIuCisgKi8KK3ZvaWQgbm90cmFjZSBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RhdGljIGludCBpcGRfY291bnQ7CisJc3RhdGljIERFRklORV9TUElOTE9DSyhpcGRfbG9jayk7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0X2lwZDsKKwlzdHJ1Y3QgbWNja19zdHJ1Y3QgKm1jY2s7CisJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKKwlzdHJ1Y3QgbWNpICptY2k7CisJaW50IHVtb2RlOworCisJbG9ja2RlcF9vZmYoKTsKKwlzMzkwX2lkbGVfY2hlY2soKTsKKworCW1jaSA9IChzdHJ1Y3QgbWNpICopICZTMzkwX2xvd2NvcmUubWNja19pbnRlcnJ1cHRpb25fY29kZTsKKwltY2NrID0gJl9fZ2V0X2NwdV92YXIoY3B1X21jY2spOworCXVtb2RlID0gdXNlcl9tb2RlKHJlZ3MpOworCisJaWYgKG1jaS0+c2QpIHsKKwkJLyogU3lzdGVtIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCisJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3lzdGVtIGRhbWFnZSBtYWNoaW5lIGNoZWNrLiIpOworCX0KKwlpZiAobWNpLT5wZCkgeworCQlpZiAobWNpLT5iKSB7CisJCQkvKiBQcm9jZXNzaW5nIGJhY2t1cCAtPiB2ZXJpZnkgaWYgd2UgY2FuIHN1cnZpdmUgdGhpcyAqLworCQkJdTY0IHpfbWNpYywgb19tY2ljLCB0X21jaWM7CisjaWZkZWYgQ09ORklHXzY0QklUCisJCQl6X21jaWMgPSAoMVVMTDw8NjMgfCAxVUxMPDw1OSB8IDFVTEw8PDI5KTsKKwkJCW9fbWNpYyA9ICgxVUxMPDw0MyB8IDFVTEw8PDQyIHwgMVVMTDw8NDEgfCAxVUxMPDw0MCB8CisJCQkJICAxVUxMPDwzNiB8IDFVTEw8PDM1IHwgMVVMTDw8MzQgfCAxVUxMPDwzMiB8CisJCQkJICAxVUxMPDwzMCB8IDFVTEw8PDIxIHwgMVVMTDw8MjAgfCAxVUxMPDwxNyB8CisJCQkJICAxVUxMPDwxNik7CisjZWxzZQorCQkJel9tY2ljID0gKDFVTEw8PDYzIHwgMVVMTDw8NTkgfCAxVUxMPDw1NyB8IDFVTEw8PDUwIHwKKwkJCQkgIDFVTEw8PDI5KTsKKwkJCW9fbWNpYyA9ICgxVUxMPDw0MyB8IDFVTEw8PDQyIHwgMVVMTDw8NDEgfCAxVUxMPDw0MCB8CisJCQkJICAxVUxMPDwzNiB8IDFVTEw8PDM1IHwgMVVMTDw8MzQgfCAxVUxMPDwzMiB8CisJCQkJICAxVUxMPDwzMCB8IDFVTEw8PDIwIHwgMVVMTDw8MTcgfCAxVUxMPDwxNik7CisjZW5kaWYKKwkJCXRfbWNpYyA9ICoodTY0ICopbWNpOworCisJCQlpZiAoKCh0X21jaWMgJiB6X21jaWMpICE9IDApIHx8CisJCQkgICAgKCh0X21jaWMgJiBvX21jaWMpICE9IG9fbWNpYykpIHsKKwkJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInByb2Nlc3NpbmcgYmFja3VwIG1hY2hpbmUgIgorCQkJCQkJICAgImNoZWNrIHdpdGggZGFtYWdlLiIpOworCQkJfQorCisJCQkvKgorCQkJICogTnVsbGlmeWluZyBleGlnZW50IGNvbmRpdGlvbiwgdGhlcmVmb3JlIHdlIG1pZ2h0CisJCQkgKiByZXRyeSB0aGlzIGluc3RydWN0aW9uLgorCQkJICovCisJCQlzcGluX2xvY2soJmlwZF9sb2NrKTsKKwkJCXRtcCA9IGdldF9jbG9jaygpOworCQkJaWYgKCgodG1wIC0gbGFzdF9pcGQpID4+IDEyKSA8IE1BWF9JUERfVElNRSkKKwkJCQlpcGRfY291bnQrKzsKKwkJCWVsc2UKKwkJCQlpcGRfY291bnQgPSAxOworCQkJbGFzdF9pcGQgPSB0bXA7CisJCQlpZiAoaXBkX2NvdW50ID09IE1BWF9JUERfQ09VTlQpCisJCQkJczM5MF9oYW5kbGVfZGFtYWdlKCJ0b28gbWFueSBpcGQgcmV0cmllcy4iKTsKKwkJCXNwaW5fdW5sb2NrKCZpcGRfbG9jayk7CisJCX0gZWxzZSB7CisJCQkvKiBQcm9jZXNzaW5nIGRhbWFnZSAtPiBzdG9wcGluZyBtYWNoaW5lICovCisJCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIGluc3RydWN0aW9uIHByb2Nlc3NpbmcgIgorCQkJCQkgICAiZGFtYWdlIG1hY2hpbmUgY2hlY2suIik7CisJCX0KKwl9CisJaWYgKHMzOTBfcmV2YWxpZGF0ZV9yZWdpc3RlcnMobWNpKSkgeworCQlpZiAodW1vZGUpIHsKKwkJCS8qCisJCQkgKiBDb3VsZG4ndCByZXN0b3JlIGFsbCByZWdpc3RlciBjb250ZW50cyB3aGlsZSBpbgorCQkJICogdXNlciBtb2RlIC0+IG1hcmsgdGFzayBmb3IgdGVybWluYXRpb24uCisJCQkgKi8KKwkJCW1jY2stPmtpbGxfdGFzayA9IDE7CisJCQltY2NrLT5tY2NrX2NvZGUgPSAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSBtY2k7CisJCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQ291bGRuJ3QgcmVzdG9yZSBhbGwgcmVnaXN0ZXIgY29udGVudHMgd2hpbGUgaW4KKwkJCSAqIGtlcm5lbCBtb2RlIC0+IHN0b3BwaW5nIG1hY2hpbmUuCisJCQkgKi8KKwkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidW5hYmxlIHRvIHJldmFsaWRhdGUgcmVnaXN0ZXJzLiIpOworCQl9CisJfQorCWlmIChtY2ktPmNkKSB7CisJCS8qIFRpbWluZyBmYWNpbGl0eSBkYW1hZ2UgKi8KKwkJczM5MF9oYW5kbGVfZGFtYWdlKCJUT0QgY2xvY2sgZGFtYWdlZCIpOworCX0KKwlpZiAobWNpLT5lZCAmJiBtY2ktPmVjKSB7CisJCS8qIEV4dGVybmFsIGRhbWFnZSAqLworCQlpZiAoUzM5MF9sb3djb3JlLmV4dGVybmFsX2RhbWFnZV9jb2RlICYgKDFVIDw8IEVEX0VUUl9TWU5DKSkKKwkJCWV0cl9zeW5jX2NoZWNrKCk7CisJCWlmIChTMzkwX2xvd2NvcmUuZXh0ZXJuYWxfZGFtYWdlX2NvZGUgJiAoMVUgPDwgRURfRVRSX1NXSVRDSCkpCisJCQlldHJfc3dpdGNoX3RvX2xvY2FsKCk7CisJCWlmIChTMzkwX2xvd2NvcmUuZXh0ZXJuYWxfZGFtYWdlX2NvZGUgJiAoMVUgPDwgRURfU1RQX1NZTkMpKQorCQkJc3RwX3N5bmNfY2hlY2soKTsKKwkJaWYgKFMzOTBfbG93Y29yZS5leHRlcm5hbF9kYW1hZ2VfY29kZSAmICgxVSA8PCBFRF9TVFBfSVNMQU5EKSkKKwkJCXN0cF9pc2xhbmRfY2hlY2soKTsKKwl9CisJaWYgKG1jaS0+c2UpCisJCS8qIFN0b3JhZ2UgZXJyb3IgdW5jb3JyZWN0ZWQgKi8KKwkJczM5MF9oYW5kbGVfZGFtYWdlKCJyZWNlaXZlZCBzdG9yYWdlIGVycm9yIHVuY29ycmVjdGVkICIKKwkJCQkgICAibWFjaGluZSBjaGVjay4iKTsKKwlpZiAobWNpLT5rZSkKKwkJLyogU3RvcmFnZSBrZXktZXJyb3IgdW5jb3JyZWN0ZWQgKi8KKwkJczM5MF9oYW5kbGVfZGFtYWdlKCJyZWNlaXZlZCBzdG9yYWdlIGtleS1lcnJvciB1bmNvcnJlY3RlZCAiCisJCQkJICAgIm1hY2hpbmUgY2hlY2suIik7CisJaWYgKG1jaS0+ZHMgJiYgbWNpLT5mYSkKKwkJLyogU3RvcmFnZSBkZWdyYWRhdGlvbiAqLworCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIHN0b3JhZ2UgZGVncmFkYXRpb24gbWFjaGluZSAiCisJCQkJICAgImNoZWNrLiIpOworCWlmIChtY2ktPmNwKSB7CisJCS8qIENoYW5uZWwgcmVwb3J0IHdvcmQgcGVuZGluZyAqLworCQltY2NrLT5jaGFubmVsX3JlcG9ydCA9IDE7CisJCXNldF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKKwl9CisJaWYgKG1jaS0+dykgeworCQkvKiBXYXJuaW5nIHBlbmRpbmcgKi8KKwkJbWNjay0+d2FybmluZyA9IDE7CisJCXNldF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKKwl9CisJbG9ja2RlcF9vbigpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtYWNoaW5lX2NoZWNrX2luaXQodm9pZCkKK3sKKwljdGxfc2V0X2JpdCgxNCwgMjUpOwkvKiBlbmFibGUgZXh0ZXJuYWwgZGFtYWdlIE1DSCAqLworCWN0bF9zZXRfYml0KDE0LCAyNyk7CS8qIGVuYWJsZSBzeXN0ZW0gcmVjb3ZlcnkgTUNIICovCisJY3RsX3NldF9iaXQoMTQsIDI0KTsJLyogZW5hYmxlIHdhcm5pbmcgTUNIICovCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKG1hY2hpbmVfY2hlY2tfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDVjZDM4YTkuLmI0OGU5NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xLDE4ICsxLDEwIEBACiAvKgotICogIGFyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jCisgKiBUaGlzIGZpbGUgaGFuZGxlcyB0aGUgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBwYXJ0cyBvZiBwcm9jZXNzIGhhbmRsaW5nLgogICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OSBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCi0gKiAgICAgICAgICAgICAgIEhhcnRtdXQgUGVubmVyIChocEBkZS5pYm0uY29tKSwKLSAqICAgICAgICAgICAgICAgRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKSwKLSAqCi0gKiAgRGVyaXZlZCBmcm9tICJhcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYyIKLSAqICAgIENvcHlyaWdodCAoQykgMTk5NSwgTGludXMgVG9ydmFsZHMKLSAqLwotCi0vKgotICogVGhpcyBmaWxlIGhhbmRsZXMgdGhlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgcGFydHMgb2YgcHJvY2VzcyBoYW5kbGluZy4uCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDE5OTksMjAwOQorICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICoJCSBIYXJ0bXV0IFBlbm5lciA8aHBAZGUuaWJtLmNvbT4sCisgKgkJIERlbmlzIEpvc2VwaCBCYXJyb3csCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CkBAIC00Nyw2ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAjaW5jbHVkZSAiZW50cnkuaCIKIAogYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCkgYXNtICgicmV0X2Zyb21fZm9yayIpOwpAQCAtNzYsNyArNjksNiBAQAogCXJldHVybiBzZi0+Z3Byc1s4XTsKIH0KIAotZXh0ZXJuIHZvaWQgczM5MF9oYW5kbGVfbWNjayh2b2lkKTsKIC8qCiAgKiBUaGUgaWRsZSBsb29wIG9uIGEgUzM5MC4uLgogICovCkBAIC0xNDksNiArMTQxLDcgQEAKIAlyZXR1cm4gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsCiAJCSAgICAgICAwLCAmcmVncywgMCwgTlVMTCwgTlVMTCk7CiB9CitFWFBPUlRfU1lNQk9MKGtlcm5lbF90aHJlYWQpOwogCiAvKgogICogRnJlZSBjdXJyZW50IHRocmVhZCBkYXRhIHN0cnVjdHVyZXMgZXRjLi4KQEAgLTE2OCwzNCArMTYxLDM1IEBACiB9CiAKIGludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgbmV3X3N0YWNrcCwKLQl1bnNpZ25lZCBsb25nIHVudXNlZCwKLSAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICogcCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQorCQl1bnNpZ25lZCBsb25nIHVudXNlZCwKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLSAgICAgICAgc3RydWN0IGZha2VfZnJhbWUKLSAgICAgICAgICB7Ci0JICAgIHN0cnVjdCBzdGFja19mcmFtZSBzZjsKLSAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzIGNoaWxkcmVnczsKLSAgICAgICAgICB9ICpmcmFtZTsKKwlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpOworCXN0cnVjdCBmYWtlX2ZyYW1lCisJeworCQlzdHJ1Y3Qgc3RhY2tfZnJhbWUgc2Y7CisJCXN0cnVjdCBwdF9yZWdzIGNoaWxkcmVnczsKKwl9ICpmcmFtZTsKIAotICAgICAgICBmcmFtZSA9IGNvbnRhaW5lcl9vZih0YXNrX3B0X3JlZ3MocCksIHN0cnVjdCBmYWtlX2ZyYW1lLCBjaGlsZHJlZ3MpOwotICAgICAgICBwLT50aHJlYWQua3NwID0gKHVuc2lnbmVkIGxvbmcpIGZyYW1lOworCWZyYW1lID0gY29udGFpbmVyX29mKHRhc2tfcHRfcmVncyhwKSwgc3RydWN0IGZha2VfZnJhbWUsIGNoaWxkcmVncyk7CisJcC0+dGhyZWFkLmtzcCA9ICh1bnNpZ25lZCBsb25nKSBmcmFtZTsKIAkvKiBTdG9yZSBhY2Nlc3MgcmVnaXN0ZXJzIHRvIGtlcm5lbCBzdGFjayBvZiBuZXcgcHJvY2Vzcy4gKi8KLSAgICAgICAgZnJhbWUtPmNoaWxkcmVncyA9ICpyZWdzOworCWZyYW1lLT5jaGlsZHJlZ3MgPSAqcmVnczsKIAlmcmFtZS0+Y2hpbGRyZWdzLmdwcnNbMl0gPSAwOwkvKiBjaGlsZCByZXR1cm5zIDAgb24gZm9yay4gKi8KLSAgICAgICAgZnJhbWUtPmNoaWxkcmVncy5ncHJzWzE1XSA9IG5ld19zdGFja3A7Ci0gICAgICAgIGZyYW1lLT5zZi5iYWNrX2NoYWluID0gMDsKKwlmcmFtZS0+Y2hpbGRyZWdzLmdwcnNbMTVdID0gbmV3X3N0YWNrcDsKKwlmcmFtZS0+c2YuYmFja19jaGFpbiA9IDA7CiAKLSAgICAgICAgLyogbmV3IHJldHVybiBwb2ludCBpcyByZXRfZnJvbV9mb3JrICovCi0gICAgICAgIGZyYW1lLT5zZi5ncHJzWzhdID0gKHVuc2lnbmVkIGxvbmcpIHJldF9mcm9tX2Zvcms7CisJLyogbmV3IHJldHVybiBwb2ludCBpcyByZXRfZnJvbV9mb3JrICovCisJZnJhbWUtPnNmLmdwcnNbOF0gPSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fZm9yazsKIAotICAgICAgICAvKiBmYWtlIHJldHVybiBzdGFjayBmb3IgcmVzdW1lKCksIGRvbid0IGdvIGJhY2sgdG8gc2NoZWR1bGUgKi8KLSAgICAgICAgZnJhbWUtPnNmLmdwcnNbOV0gPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CisJLyogZmFrZSByZXR1cm4gc3RhY2sgZm9yIHJlc3VtZSgpLCBkb24ndCBnbyBiYWNrIHRvIHNjaGVkdWxlICovCisJZnJhbWUtPnNmLmdwcnNbOV0gPSAodW5zaWduZWQgbG9uZykgZnJhbWU7CiAKIAkvKiBTYXZlIGFjY2VzcyByZWdpc3RlcnMgdG8gbmV3IHRocmVhZCBzdHJ1Y3R1cmUuICovCiAJc2F2ZV9hY2Nlc3NfcmVncygmcC0+dGhyZWFkLmFjcnNbMF0pOwogCiAjaWZuZGVmIENPTkZJR182NEJJVAotICAgICAgICAvKgorCS8qCiAJICogc2F2ZSBmcHJzIHRvIGN1cnJlbnQtPnRocmVhZC5mcF9yZWdzIHRvIG1lcmdlIHRoZW0gd2l0aAogCSAqIHRoZSBlbXVsYXRlZCByZWdpc3RlcnMgYW5kIHRoZW4gY29weSB0aGUgcmVzdWx0IHRvIHRoZSBjaGlsZC4KIAkgKi8KQEAgLTIyMCwxMCArMjE0LDEzIEBACiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAJLyogc3RhcnQgbmV3IHByb2Nlc3Mgd2l0aCBhcjQgcG9pbnRpbmcgdG8gdGhlIGNvcnJlY3QgYWRkcmVzcyBzcGFjZSAqLwogCXAtPnRocmVhZC5tbV9zZWdtZW50ID0gZ2V0X2ZzKCk7Ci0gICAgICAgIC8qIERvbid0IGNvcHkgZGVidWcgcmVnaXN0ZXJzICovCi0gICAgICAgIG1lbXNldCgmcC0+dGhyZWFkLnBlcl9pbmZvLDAsc2l6ZW9mKHAtPnRocmVhZC5wZXJfaW5mbykpOwotCi0gICAgICAgIHJldHVybiAwOworCS8qIERvbid0IGNvcHkgZGVidWcgcmVnaXN0ZXJzICovCisJbWVtc2V0KCZwLT50aHJlYWQucGVyX2luZm8sIDAsIHNpemVvZihwLT50aHJlYWQucGVyX2luZm8pKTsKKwkvKiBJbml0aWFsaXplIHBlciB0aHJlYWQgdXNlciBhbmQgc3lzdGVtIHRpbWVyIHZhbHVlcyAqLworCXRpID0gdGFza190aHJlYWRfaW5mbyhwKTsKKwl0aS0+dXNlcl90aW1lciA9IDA7CisJdGktPnN5c3RlbV90aW1lciA9IDA7CisJcmV0dXJuIDA7CiB9CiAKIFNZU0NBTExfREVGSU5FMChmb3JrKQpAQCAtMzExLDcgKzMwOCw3IEBACiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICogcmVncywgczM5MF9mcF9yZWdzICpmcHJlZ3MpCiB7CiAjaWZuZGVmIENPTkZJR182NEJJVAotICAgICAgICAvKgorCS8qCiAJICogc2F2ZSBmcHJzIHRvIGN1cnJlbnQtPnRocmVhZC5mcF9yZWdzIHRvIG1lcmdlIHRoZW0gd2l0aAogCSAqIHRoZSBlbXVsYXRlZCByZWdpc3RlcnMgYW5kIHRoZW4gY29weSB0aGUgcmVzdWx0IHRvIHRoZSBkdW1wLgogCSAqLwpAQCAtMzIyLDYgKzMxOSw3IEBACiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAJcmV0dXJuIDE7CiB9CitFWFBPUlRfU1lNQk9MKGR1bXBfZnB1KTsKIAogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtMzQ2LDQgKzM0NCwzIEBACiAJfQogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwppbmRleCA4MmMxODcyLi44MDJjOGFiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKQEAgLTE4LDEwICsxOCwxMSBAQAogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAKLXZvaWQgX19jcHVpbml0IHByaW50X2NwdV9pbmZvKHN0cnVjdCBjcHVpbmZvX1MzOTAgKmNwdWluZm8pCit2b2lkIF9fY3B1aW5pdCBwcmludF9jcHVfaW5mbyh2b2lkKQogewogCXByX2luZm8oIlByb2Nlc3NvciAlZCBzdGFydGVkLCBhZGRyZXNzICVkLCBpZGVudGlmaWNhdGlvbiAlMDZYXG4iLAotCQljcHVpbmZvLT5jcHVfbnIsIGNwdWluZm8tPmNwdV9hZGRyLCBjcHVpbmZvLT5jcHVfaWQuaWRlbnQpOworCQlTMzkwX2xvd2NvcmUuY3B1X25yLCBTMzkwX2xvd2NvcmUuY3B1X2FkZHIsCisJCVMzOTBfbG93Y29yZS5jcHVfaWQuaWRlbnQpOwogfQogCiAvKgpAQCAtMzAsNDggKzMxLDQ2IEBACiAKIHN0YXRpYyBpbnQgc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlzdGF0aWMgY29uc3QgY2hhciAqaHdjYXBfc3RyWzhdID0geworCXN0YXRpYyBjb25zdCBjaGFyICpod2NhcF9zdHJbOV0gPSB7CiAJCSJlc2FuMyIsICJ6YXJjaCIsICJzdGZsZSIsICJtc2EiLCAibGRpc3AiLCAiZWltbSIsICJkZnAiLAotCQkiZWRhdCIKKwkJImVkYXQiLCAiZXRmM2VoIgogCX07Ci0gICAgICAgc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbzsKLSAgICAgICB1bnNpZ25lZCBsb25nIG4gPSAodW5zaWduZWQgbG9uZykgdiAtIDE7Ci0gICAgICAgaW50IGk7CisJc3RydWN0IF9sb3djb3JlICpsYzsKKwl1bnNpZ25lZCBsb25nIG4gPSAodW5zaWduZWQgbG9uZykgdiAtIDE7CisJaW50IGk7CiAKLSAgICAgICBzMzkwX2FkanVzdF9qaWZmaWVzKCk7Ci0gICAgICAgcHJlZW1wdF9kaXNhYmxlKCk7Ci0gICAgICAgaWYgKCFuKSB7Ci0JICAgICAgIHNlcV9wcmludGYobSwgInZlbmRvcl9pZCAgICAgICA6IElCTS9TMzkwXG4iCi0JCQkgICIjIHByb2Nlc3NvcnMgICAgOiAlaVxuIgotCQkJICAiYm9nb21pcHMgcGVyIGNwdTogJWx1LiUwMmx1XG4iLAotCQkJICBudW1fb25saW5lX2NwdXMoKSwgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAotCQkJICAobG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSklMTAwKTsKLQkgICAgICAgc2VxX3B1dHMobSwgImZlYXR1cmVzXHQ6ICIpOwotCSAgICAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQkgICAgICAgaWYgKGh3Y2FwX3N0cltpXSAmJiAoZWxmX2h3Y2FwICYgKDFVTCA8PCBpKSkpCi0JCQkgICAgICAgc2VxX3ByaW50ZihtLCAiJXMgIiwgaHdjYXBfc3RyW2ldKTsKLQkgICAgICAgc2VxX3B1dHMobSwgIlxuIik7Ci0gICAgICAgfQorCXMzOTBfYWRqdXN0X2ppZmZpZXMoKTsKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpZiAoIW4pIHsKKwkJc2VxX3ByaW50ZihtLCAidmVuZG9yX2lkICAgICAgIDogSUJNL1MzOTBcbiIKKwkJCSAgICIjIHByb2Nlc3NvcnMgICAgOiAlaVxuIgorCQkJICAgImJvZ29taXBzIHBlciBjcHU6ICVsdS4lMDJsdVxuIiwKKwkJCSAgIG51bV9vbmxpbmVfY3B1cygpLCBsb29wc19wZXJfamlmZnkvKDUwMDAwMC9IWiksCisJCQkgICAobG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSklMTAwKTsKKwkJc2VxX3B1dHMobSwgImZlYXR1cmVzXHQ6ICIpOworCQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQorCQkJaWYgKGh3Y2FwX3N0cltpXSAmJiAoZWxmX2h3Y2FwICYgKDFVTCA8PCBpKSkpCisJCQkJc2VxX3ByaW50ZihtLCAiJXMgIiwgaHdjYXBfc3RyW2ldKTsKKwkJc2VxX3B1dHMobSwgIlxuIik7CisJfQogCi0gICAgICAgaWYgKGNwdV9vbmxpbmUobikpIHsKKwlpZiAoY3B1X29ubGluZShuKSkgewogI2lmZGVmIENPTkZJR19TTVAKLQkgICAgICAgaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSA9PSBuKQotCQkgICAgICAgY3B1aW5mbyA9ICZTMzkwX2xvd2NvcmUuY3B1X2RhdGE7Ci0JICAgICAgIGVsc2UKLQkJICAgICAgIGNwdWluZm8gPSAmbG93Y29yZV9wdHJbbl0tPmNwdV9kYXRhOworCQlsYyA9IChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gbikgPworCQkJJlMzOTBfbG93Y29yZSA6IGxvd2NvcmVfcHRyW25dOwogI2Vsc2UKLQkgICAgICAgY3B1aW5mbyA9ICZTMzkwX2xvd2NvcmUuY3B1X2RhdGE7CisJCWxjID0gJlMzOTBfbG93Y29yZTsKICNlbmRpZgotCSAgICAgICBzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3IgJWxpOiAiCi0JCQkgICJ2ZXJzaW9uID0gJTAyWCwgICIKLQkJCSAgImlkZW50aWZpY2F0aW9uID0gJTA2WCwgICIKLQkJCSAgIm1hY2hpbmUgPSAlMDRYXG4iLAotCQkJICBuLCBjcHVpbmZvLT5jcHVfaWQudmVyc2lvbiwKLQkJCSAgY3B1aW5mby0+Y3B1X2lkLmlkZW50LAotCQkJICBjcHVpbmZvLT5jcHVfaWQubWFjaGluZSk7Ci0gICAgICAgfQotICAgICAgIHByZWVtcHRfZW5hYmxlKCk7Ci0gICAgICAgcmV0dXJuIDA7CisJCXNlcV9wcmludGYobSwgInByb2Nlc3NvciAlbGk6ICIKKwkJCSAgICJ2ZXJzaW9uID0gJTAyWCwgICIKKwkJCSAgICJpZGVudGlmaWNhdGlvbiA9ICUwNlgsICAiCisJCQkgICAibWFjaGluZSA9ICUwNFhcbiIsCisJCQkgICBuLCBsYy0+Y3B1X2lkLnZlcnNpb24sCisJCQkgICBsYy0+Y3B1X2lkLmlkZW50LAorCQkJICAgbGMtPmNwdV9pZC5tYWNoaW5lKTsKKwl9CisJcHJlZW1wdF9lbmFibGUoKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKaW5kZXggYzQxOTMwNC4uNzc0MTQ3OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbDY0LlMKQEAgLTEsMTAgKzEsNyBAQAogLyoKLSAqICBhcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yKHMpOiBIb2xnZXIgU21vbGluc2tpIChIb2xnZXIuU21vbGluc2tpQGRlLmlibS5jb20pCi0JCSBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAgMjAwMCwyMDA5CisgKiAgICBBdXRob3Iocyk6IEhvbGdlciBTbW9saW5za2kgPEhvbGdlci5TbW9saW5za2lAZGUuaWJtLmNvbT4sCisgKgkJIERlbmlzIEpvc2VwaCBCYXJyb3csCiAgKi8KIAogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CkBAIC0zMCw3ICsyNyw3IEBACiAJCW12YwlfX0xDX1BSRUZJWF9TQVZFX0FSRUEtMHgxMDAwKDQsJXIxKSwwKCVyMTApCiAJCXN0ZnBjCV9fTENfRlBfQ1JFR19TQVZFX0FSRUEtMHgxMDAwKCVyMSkKIAkJc3Rja2MJLkxjbGtjbXAtLkxwZzAoJXIxMykKLQkJbXZjCV9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEtMHgxMDAwKDgsJXIxKSwuTGNsa2NtcC0uTHBnMCglcjEzKQorCQltdmMJX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQS0weDEwMDAoNywlcjEpLC5MY2xrY21wLS5McGcwKCVyMTMpCiAJCXN0cHQJX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBLTB4MTAwMCglcjEpCiAJCXN0ZwklcjEzLCBfX0xDX1BTV19TQVZFX0FSRUEtMHgxMDAwKzgoJXIxKQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYyBiL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jCmluZGV4IDQ2YjkwY2IuLjY1NmZjYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvczM5MF9rc3ltcy5jCkBAIC0xLDQ5ICsxLDUgQEAKLS8qCi0gKiAgYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMKLSAqCi0gKiAgUzM5MCB2ZXJzaW9uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9oaWdodWlkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGFzbS9jaGVja3N1bS5oPgotI2luY2x1ZGUgPGFzbS9jcGNtZC5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgotI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKLSNpbmNsdWRlIDxuZXQvYXJwLmg+Ci0jZW5kaWYKLQotLyoKLSAqIG1lbW9yeSBtYW5hZ2VtZW50Ci0gKi8KLUVYUE9SVF9TWU1CT0woX29pX2JpdG1hcCk7Ci1FWFBPUlRfU1lNQk9MKF9uaV9iaXRtYXApOwotRVhQT1JUX1NZTUJPTChfemJfZmluZG1hcCk7Ci1FWFBPUlRfU1lNQk9MKF9zYl9maW5kbWFwKTsKLQotLyoKLSAqIGJpbmZtdF9lbGYgbG9hZGVyIAotICovCi1leHRlcm4gaW50IGR1bXBfZnB1IChzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHMzOTBfZnBfcmVncyAqZnByZWdzKTsKLUVYUE9SVF9TWU1CT0woZHVtcF9mcHUpOwotRVhQT1JUX1NZTUJPTChlbXB0eV96ZXJvX3BhZ2UpOwotCi0vKgotICogbWlzYy4KLSAqLwotRVhQT1JUX1NZTUJPTChtYWNoaW5lX2ZsYWdzKTsKLUVYUE9SVF9TWU1CT0woX191ZGVsYXkpOwotRVhQT1JUX1NZTUJPTChrZXJuZWxfdGhyZWFkKTsKLUVYUE9SVF9TWU1CT0woY3N1bV9mb2xkKTsKLUVYUE9SVF9TWU1CT0woY29uc29sZV9tb2RlKTsKLUVYUE9SVF9TWU1CT0woY29uc29sZV9kZXZubyk7Ci1FWFBPUlRfU1lNQk9MKGNvbnNvbGVfaXJxKTsKIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKIEVYUE9SVF9TWU1CT0woX21jb3VudCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggYzVjZmI2MS4uMDYyMDFiOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtNzQsOSArNzQsMTcgQEAKICAqIE1hY2hpbmUgc2V0dXAuLgogICovCiB1bnNpZ25lZCBpbnQgY29uc29sZV9tb2RlID0gMDsKK0VYUE9SVF9TWU1CT0woY29uc29sZV9tb2RlKTsKKwogdW5zaWduZWQgaW50IGNvbnNvbGVfZGV2bm8gPSAtMTsKK0VYUE9SVF9TWU1CT0woY29uc29sZV9kZXZubyk7CisKIHVuc2lnbmVkIGludCBjb25zb2xlX2lycSA9IC0xOworRVhQT1JUX1NZTUJPTChjb25zb2xlX2lycSk7CisKIHVuc2lnbmVkIGxvbmcgbWFjaGluZV9mbGFnczsKK0VYUE9SVF9TWU1CT0wobWFjaGluZV9mbGFncyk7CisKIHVuc2lnbmVkIGxvbmcgZWxmX2h3Y2FwID0gMDsKIGNoYXIgZWxmX3BsYXRmb3JtW0VMRl9QTEFURk9STV9TSVpFXTsKIApAQCAtODYsNiArOTQsMTAgQEAKIGludCBfX2luaXRkYXRhIG1lbW9yeV9lbmRfc2V0OwogdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG1lbW9yeV9lbmQ7CiAKKy8qIEFuIGFycmF5IHdpdGggYSBwb2ludGVyIHRvIHRoZSBsb3djb3JlIG9mIGV2ZXJ5IENQVS4gKi8KK3N0cnVjdCBfbG93Y29yZSAqbG93Y29yZV9wdHJbTlJfQ1BVU107CitFWFBPUlRfU1lNQk9MKGxvd2NvcmVfcHRyKTsKKwogLyoKICAqIFRoaXMgaXMgc2V0IHVwIGJ5IHRoZSBzZXR1cC1yb3V0aW5lIGF0IGJvb3QtdGltZQogICogZm9yIFMzOTAgbmVlZCB0byBmaW5kIG91dCwgd2hhdCB3ZSBoYXZlIHRvIHNldHVwCkBAIC0xMDksMTMgKzEyMSwxMCBAQAogICovCiB2b2lkIF9fY3B1aW5pdCBjcHVfaW5pdCh2b2lkKQogewotICAgICAgICBpbnQgYWRkciA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCiAgICAgICAgIC8qCiAgICAgICAgICAqIFN0b3JlIHByb2Nlc3NvciBpZCBpbiBsb3djb3JlICh1c2VkIGUuZy4gaW4gdGltZXJfaW50ZXJydXB0KQogICAgICAgICAgKi8KLQlnZXRfY3B1X2lkKCZTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2lkKTsKLSAgICAgICAgUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9hZGRyID0gYWRkcjsKKwlnZXRfY3B1X2lkKCZTMzkwX2xvd2NvcmUuY3B1X2lkKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBGb3JjZSBGUFUgaW5pdGlhbGl6YXRpb246CkBAIC0xMjUsOCArMTM0LDcgQEAKIAogCWF0b21pY19pbmMoJmluaXRfbW0ubW1fY291bnQpOwogCWN1cnJlbnQtPmFjdGl2ZV9tbSA9ICZpbml0X21tOwotICAgICAgICBpZiAoY3VycmVudC0+bW0pCi0gICAgICAgICAgICAgICAgQlVHKCk7CisJQlVHX09OKGN1cnJlbnQtPm1tKTsKICAgICAgICAgZW50ZXJfbGF6eV90bGIoJmluaXRfbW0sIGN1cnJlbnQpOwogfQogCkBAIC0yMTcsNyArMjI1LDcgQEAKIAl9CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19aRkNQRFVNUCkgfHwgZGVmaW5lZChDT05GSUdfWkZDUERVTVBfTU9EVUxFKQorI2lmZGVmIENPTkZJR19aRkNQRFVNUAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX3pmY3BkdW1wKHVuc2lnbmVkIGludCBjb25zb2xlX2Rldm5vKQogewogCXN0YXRpYyBjaGFyIHN0cls0MV07CkBAIC0yODksMTEgKzI5Nyw3IEBACiBlYXJseV9wYXJhbSgibWVtIiwgZWFybHlfcGFyc2VfbWVtKTsKIAogI2lmZGVmIENPTkZJR19TMzkwX1NXSVRDSF9BTU9ERQotI2lmZGVmIENPTkZJR19QR1NURQotdW5zaWduZWQgaW50IHN3aXRjaF9hbW9kZSA9IDE7Ci0jZWxzZQogdW5zaWduZWQgaW50IHN3aXRjaF9hbW9kZSA9IDA7Ci0jZW5kaWYKIEVYUE9SVF9TWU1CT0xfR1BMKHN3aXRjaF9hbW9kZSk7CiAKIHN0YXRpYyBpbnQgc2V0X2Ftb2RlX2FuZF91YWNjZXNzKHVuc2lnbmVkIGxvbmcgdXNlcl9hbW9kZSwKQEAgLTQxNCw3ICs0MTgsNiBAQAogCQlQU1dfQUREUl9BTU9ERSB8ICh1bnNpZ25lZCBsb25nKSBtY2NrX2ludF9oYW5kbGVyOwogCWxjLT5pb19uZXdfcHN3Lm1hc2sgPSBwc3dfa2VybmVsX2JpdHM7CiAJbGMtPmlvX25ld19wc3cuYWRkciA9IFBTV19BRERSX0FNT0RFIHwgKHVuc2lnbmVkIGxvbmcpIGlvX2ludF9oYW5kbGVyOwotCWxjLT5pcGxfZGV2aWNlID0gUzM5MF9sb3djb3JlLmlwbF9kZXZpY2U7CiAJbGMtPmNsb2NrX2NvbXBhcmF0b3IgPSAtMVVMTDsKIAlsYy0+a2VybmVsX3N0YWNrID0gKCh1bnNpZ25lZCBsb25nKSAmaW5pdF90aHJlYWRfdW5pb24pICsgVEhSRUFEX1NJWkU7CiAJbGMtPmFzeW5jX3N0YWNrID0gKHVuc2lnbmVkIGxvbmcpCkBAIC00MzQsNiArNDM3LDcgQEAKIAlsYy0+dmRzb19wZXJfY3B1X2RhdGEgPSAodW5zaWduZWQgbG9uZykgJmxjLT5wYXN0ZVswXTsKICNlbmRpZgogCXNldF9wcmVmaXgoKHUzMikodW5zaWduZWQgbG9uZykgbGMpOworCWxvd2NvcmVfcHRyWzBdID0gbGM7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdApAQCAtNTEwLDcgKzUxNCw3IEBACiAJdW5zaWduZWQgbG9uZyBtYXhfbWVtOwogCWludCBpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfWkZDUERVTVApIHx8IGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QX01PRFVMRSkKKyNpZmRlZiBDT05GSUdfWkZDUERVTVAKIAlpZiAoaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9GQ1BfRFVNUCkgewogCQltZW1vcnlfZW5kID0gWkZDUERVTVBfSFNBX1NJWkU7CiAJCW1lbW9yeV9lbmRfc2V0ID0gMTsKQEAgLTY3Nyw3ICs2ODEsNiBAQAogc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2h3Y2Fwcyh2b2lkKQogewogCXN0YXRpYyBjb25zdCBpbnQgc3RmbF9iaXRzWzZdID0geyAwLCAyLCA3LCAxNywgMTksIDIxIH07Ci0Jc3RydWN0IGNwdWluZm9fUzM5MCAqY3B1aW5mbyA9ICZTMzkwX2xvd2NvcmUuY3B1X2RhdGE7CiAJdW5zaWduZWQgbG9uZyBsb25nIGZhY2lsaXR5X2xpc3RfZXh0ZW5kZWQ7CiAJdW5zaWduZWQgaW50IGZhY2lsaXR5X2xpc3Q7CiAJaW50IGk7CkBAIC02OTMsMTUgKzY5NiwyMiBAQAogCSAqICAgQml0IDE3OiB0aGUgbWVzc2FnZS1zZWN1cml0eSBhc3Npc3QgaXMgaW5zdGFsbGVkCiAJICogICBCaXQgMTk6IHRoZSBsb25nLWRpc3BsYWNlbWVudCBmYWNpbGl0eSBpcyBpbnN0YWxsZWQKIAkgKiAgIEJpdCAyMTogdGhlIGV4dGVuZGVkLWltbWVkaWF0ZSBmYWNpbGl0eSBpcyBpbnN0YWxsZWQKKwkgKiAgIEJpdCAyMjogZXh0ZW5kZWQtdHJhbnNsYXRpb24gZmFjaWxpdHkgMyBpcyBpbnN0YWxsZWQKKwkgKiAgIEJpdCAzMDogZXh0ZW5kZWQtdHJhbnNsYXRpb24gZmFjaWxpdHkgMyBlbmhhbmNlbWVudCBmYWNpbGl0eQogCSAqIFRoZXNlIGdldCB0cmFuc2xhdGVkIHRvOgogCSAqICAgSFdDQVBfUzM5MF9FU0FOMyBiaXQgMCwgSFdDQVBfUzM5MF9aQVJDSCBiaXQgMSwKIAkgKiAgIEhXQ0FQX1MzOTBfU1RGTEUgYml0IDIsIEhXQ0FQX1MzOTBfTVNBIGJpdCAzLAotCSAqICAgSFdDQVBfUzM5MF9MRElTUCBiaXQgNCwgYW5kIEhXQ0FQX1MzOTBfRUlNTSBiaXQgNS4KKwkgKiAgIEhXQ0FQX1MzOTBfTERJU1AgYml0IDQsIEhXQ0FQX1MzOTBfRUlNTSBiaXQgNSBhbmQKKwkgKiAgIEhXQ0FQX1MzOTBfRVRGM0VIIGJpdCA4ICgyMiAmJiAzMCkuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJaWYgKGZhY2lsaXR5X2xpc3QgJiAoMVVMIDw8ICgzMSAtIHN0ZmxfYml0c1tpXSkpKQogCQkJZWxmX2h3Y2FwIHw9IDFVTCA8PCBpOwogCisJaWYgKChmYWNpbGl0eV9saXN0ICYgKDFVTCA8PCAoMzEgLSAyMikpKQorCSAgICAmJiAoZmFjaWxpdHlfbGlzdCAmICgxVUwgPDwgKDMxIC0gMzApKSkpCisJCWVsZl9od2NhcCB8PSAxVUwgPDwgODsKKwogCS8qCiAJICogQ2hlY2sgZm9yIGFkZGl0aW9uYWwgZmFjaWxpdGllcyB3aXRoIHN0b3JlLWZhY2lsaXR5LWxpc3QtZXh0ZW5kZWQuCiAJICogc3RmbGUgc3RvcmVzIGRvdWJsZXdvcmRzICg4IGJ5dGUpIHdpdGggYml0IDFVTEw8PDYzIGFzIGJpdCAwCkBAIC03MTAsMjAgKzcyMCwyMiBAQAogCSAqIEhvdyBtYW55IGZhY2lsaXR5IHdvcmRzIGFyZSBzdG9yZWQgZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mCiAJICogZG91Ymxld29yZHMgcGFzc2VkIHRvIHRoZSBpbnN0cnVjdGlvbi4gVGhlIGFkZGl0aW9uYWwgZmFjaWxpdGVzCiAJICogYXJlOgotCSAqICAgQml0IDQzOiBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGZhY2lsaXR5IGlzIGluc3RhbGxlZAorCSAqICAgQml0IDQyOiBkZWNpbWFsIGZsb2F0aW5nIHBvaW50IGZhY2lsaXR5IGlzIGluc3RhbGxlZAorCSAqICAgQml0IDQ0OiBwZXJmb3JtIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbiBmYWNpbGl0eSBpcyBpbnN0YWxsZWQKIAkgKiB0cmFuc2xhdGVkIHRvOgotCSAqICAgSFdDQVBfUzM5MF9ERlAgYml0IDYuCisJICogICBIV0NBUF9TMzkwX0RGUCBiaXQgNiAoNDIgJiYgNDQpLgogCSAqLwogCWlmICgoZWxmX2h3Y2FwICYgKDFVTCA8PCAyKSkgJiYKIAkgICAgX19zdGZsZSgmZmFjaWxpdHlfbGlzdF9leHRlbmRlZCwgMSkgPiAwKSB7Ci0JCWlmIChmYWNpbGl0eV9saXN0X2V4dGVuZGVkICYgKDFVTEwgPDwgKDY0IC0gNDMpKSkKKwkJaWYgKChmYWNpbGl0eV9saXN0X2V4dGVuZGVkICYgKDFVTEwgPDwgKDYzIC0gNDIpKSkKKwkJICAgICYmIChmYWNpbGl0eV9saXN0X2V4dGVuZGVkICYgKDFVTEwgPDwgKDYzIC0gNDQpKSkpCiAJCQllbGZfaHdjYXAgfD0gMVVMIDw8IDY7CiAJfQogCiAJaWYgKE1BQ0hJTkVfSEFTX0hQQUdFKQogCQllbGZfaHdjYXAgfD0gMVVMIDw8IDc7CiAKLQlzd2l0Y2ggKGNwdWluZm8tPmNwdV9pZC5tYWNoaW5lKSB7CisJc3dpdGNoIChTMzkwX2xvd2NvcmUuY3B1X2lkLm1hY2hpbmUpIHsKIAljYXNlIDB4OTY3MjoKICNpZiAhZGVmaW5lZChDT05GSUdfNjRCSVQpCiAJZGVmYXVsdDoJLyogVXNlICJnNSIgYXMgZGVmYXVsdCBmb3IgMzEgYml0IGtlcm5lbHMuICovCkBAIC04MTYsNyArODI4LDcgQEAKIAlzZXR1cF9sb3djb3JlKCk7CiAKICAgICAgICAgY3B1X2luaXQoKTsKLSAgICAgICAgX19jcHVfbG9naWNhbF9tYXBbMF0gPSBTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2FkZHI7CisJX19jcHVfbG9naWNhbF9tYXBbMF0gPSBzdGFwKCk7CiAJczM5MF9pbml0X2NwdV90b3BvbG9neSgpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IDJkMzM3Y2IuLjAwNmVkNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgpAQCAtNTAsMTIgKzUxLDYgQEAKICNpbmNsdWRlIDxhc20vdmRzby5oPgogI2luY2x1ZGUgImVudHJ5LmgiCiAKLS8qCi0gKiBBbiBhcnJheSB3aXRoIGEgcG9pbnRlciB0aGUgbG93Y29yZSBvZiBldmVyeSBDUFUuCi0gKi8KLXN0cnVjdCBfbG93Y29yZSAqbG93Y29yZV9wdHJbTlJfQ1BVU107Ci1FWFBPUlRfU1lNQk9MKGxvd2NvcmVfcHRyKTsKLQogc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudF9zZXRbTlJfQ1BVU107CiAKIHN0YXRpYyB1OCBzbXBfY3B1X3R5cGU7CkBAIC04MSw5ICs3Niw3IEBACiAKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzL21hY2hpbmUgY2hlY2tzICovCiAJX19sb2FkX3Bzd19tYXNrKHBzd19rZXJuZWxfYml0cyAmIH5QU1dfTUFTS19NQ0hFQ0spOwotCi0JLyogd3JpdGUgbWFnaWMgbnVtYmVyIHRvIHplcm8gcGFnZSAoYWJzb2x1dGUgMCkgKi8KLQlsb3djb3JlX3B0cltzbXBfcHJvY2Vzc29yX2lkKCldLT5wYW5pY19tYWdpYyA9IF9fUEFOSUNfTUFHSUM7CisJdHJhY2VfaGFyZGlycXNfb2ZmKCk7CiAKIAkvKiBzdG9wIGFsbCBwcm9jZXNzb3JzICovCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKQEAgLTIzMyw3ICsyMjYsNyBAQAogICovCiAjZGVmaW5lIENQVV9JTklUX05PCTEKIAotI2lmIGRlZmluZWQoQ09ORklHX1pGQ1BEVU1QKSB8fCBkZWZpbmVkKENPTkZJR19aRkNQRFVNUF9NT0RVTEUpCisjaWZkZWYgQ09ORklHX1pGQ1BEVU1QCiAKIC8qCiAgKiB6ZmNwZHVtcF9wcmVmaXhfYXJyYXkgaG9sZHMgcHJlZml4IHJlZ2lzdGVycyBmb3IgdGhlIGZvbGxvd2luZyBzY2VuYXJpbzoKQEAgLTI3NCw3ICsyNjcsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgc21wX2dldF9zYXZlX2FyZWEodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IHBoeV9jcHUpIHsgfQogCi0jZW5kaWYgLyogQ09ORklHX1pGQ1BEVU1QIHx8IENPTkZJR19aRkNQRFVNUF9NT0RVTEUgKi8KKyNlbmRpZiAvKiBDT05GSUdfWkZDUERVTVAgKi8KIAogc3RhdGljIGludCBjcHVfc3RvcHBlZChpbnQgY3B1KQogewpAQCAtMzA0LDggKzI5Nyw4IEBACiB7CiAJaW50IGNwdV9pZCwgbG9naWNhbF9jcHU7CiAKLQlsb2dpY2FsX2NwdSA9IGZpcnN0X2NwdShhdmFpbCk7Ci0JaWYgKGxvZ2ljYWxfY3B1ID09IE5SX0NQVVMpCisJbG9naWNhbF9jcHUgPSBjcHVtYXNrX2ZpcnN0KCZhdmFpbCk7CisJaWYgKGxvZ2ljYWxfY3B1ID49IG5yX2NwdV9pZHMpCiAJCXJldHVybiAwOwogCWZvciAoY3B1X2lkID0gMDsgY3B1X2lkIDw9IDY1NTM1OyBjcHVfaWQrKykgewogCQlpZiAoY3B1X2tub3duKGNwdV9pZCkpCkBAIC0zMTYsOCArMzA5LDggQEAKIAkJCWNvbnRpbnVlOwogCQljcHVfc2V0KGxvZ2ljYWxfY3B1LCBjcHVfcHJlc2VudF9tYXApOwogCQlzbXBfY3B1X3N0YXRlW2xvZ2ljYWxfY3B1XSA9IENQVV9TVEFURV9DT05GSUdVUkVEOwotCQlsb2dpY2FsX2NwdSA9IG5leHRfY3B1KGxvZ2ljYWxfY3B1LCBhdmFpbCk7Ci0JCWlmIChsb2dpY2FsX2NwdSA9PSBOUl9DUFVTKQorCQlsb2dpY2FsX2NwdSA9IGNwdW1hc2tfbmV4dChsb2dpY2FsX2NwdSwgJmF2YWlsKTsKKwkJaWYgKGxvZ2ljYWxfY3B1ID49IG5yX2NwdV9pZHMpCiAJCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CkBAIC0zMjksOCArMzIyLDggQEAKIAlpbnQgY3B1X2lkLCBsb2dpY2FsX2NwdSwgY3B1OwogCWludCByYzsKIAotCWxvZ2ljYWxfY3B1ID0gZmlyc3RfY3B1KGF2YWlsKTsKLQlpZiAobG9naWNhbF9jcHUgPT0gTlJfQ1BVUykKKwlsb2dpY2FsX2NwdSA9IGNwdW1hc2tfZmlyc3QoJmF2YWlsKTsKKwlpZiAobG9naWNhbF9jcHUgPj0gbnJfY3B1X2lkcykKIAkJcmV0dXJuIDA7CiAJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKQpAQCAtMzUxLDggKzM0NCw4IEBACiAJCQlzbXBfY3B1X3N0YXRlW2xvZ2ljYWxfY3B1XSA9IENQVV9TVEFURV9TVEFOREJZOwogCQllbHNlCiAJCQlzbXBfY3B1X3N0YXRlW2xvZ2ljYWxfY3B1XSA9IENQVV9TVEFURV9DT05GSUdVUkVEOwotCQlsb2dpY2FsX2NwdSA9IG5leHRfY3B1KGxvZ2ljYWxfY3B1LCBhdmFpbCk7Ci0JCWlmIChsb2dpY2FsX2NwdSA9PSBOUl9DUFVTKQorCQlsb2dpY2FsX2NwdSA9IGNwdW1hc2tfbmV4dChsb2dpY2FsX2NwdSwgJmF2YWlsKTsKKwkJaWYgKGxvZ2ljYWxfY3B1ID49IG5yX2NwdV9pZHMpCiAJCQlicmVhazsKIAl9CiBvdXQ6CkBAIC0zNzksNyArMzcyLDcgQEAKIAogCWNfY3B1cyA9IDE7CiAJc19jcHVzID0gMDsKLQlib290X2NwdV9hZGRyID0gUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9hZGRyOworCWJvb3RfY3B1X2FkZHIgPSBfX2NwdV9sb2dpY2FsX21hcFswXTsKIAlpbmZvID0ga21hbGxvYyhzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWluZm8pCiAJCXBhbmljKCJzbXBfZGV0ZWN0X2NwdXMgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CkBAIC00NTMsNyArNDQ2LDcgQEAKIAkvKiBTd2l0Y2ggb24gaW50ZXJydXB0cyAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAkvKiBQcmludCBpbmZvIGFib3V0IHRoaXMgcHJvY2Vzc29yICovCi0JcHJpbnRfY3B1X2luZm8oJlMzOTBfbG93Y29yZS5jcHVfZGF0YSk7CisJcHJpbnRfY3B1X2luZm8oKTsKIAkvKiBjcHVfaWRsZSB3aWxsIGNhbGwgc2NoZWR1bGUgZm9yIHVzICovCiAJY3B1X2lkbGUoKTsKIAlyZXR1cm4gMDsKQEAgLTUxNSw3ICs1MDgsNiBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBzdGF0aWMgdm9pZCBzbXBfZnJlZV9sb3djb3JlKGludCBjcHUpCiB7CiAJc3RydWN0IF9sb3djb3JlICpsb3djb3JlOwpAQCAtNTM0LDcgKzUyNiw2IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgbG93Y29yZSwgbGNfb3JkZXIpOwogCWxvd2NvcmVfcHRyW2NwdV0gPSBOVUxMOwogfQotI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCiAvKiBVcHBpbmcgYW5kIGRvd25pbmcgb2YgQ1BVcyAqLwogaW50IF9fY3B1aW5pdCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1KQpAQCAtNTQzLDE2ICs1MzQsMjMgQEAKIAlzdHJ1Y3QgX2xvd2NvcmUgKmNwdV9sb3djb3JlOwogCXN0cnVjdCBzdGFja19mcmFtZSAqc2Y7CiAJc2lncF9jY29kZSBjY29kZTsKKwl1MzIgbG93Y29yZTsKIAogCWlmIChzbXBfY3B1X3N0YXRlW2NwdV0gIT0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQpCiAJCXJldHVybiAtRUlPOwogCWlmIChzbXBfYWxsb2NfbG93Y29yZShjcHUpKQogCQlyZXR1cm4gLUVOT01FTTsKKwlkbyB7CisJCWNjb2RlID0gc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3BfaW5pdGlhbF9jcHVfcmVzZXQpOworCQlpZiAoY2NvZGUgPT0gc2lncF9idXN5KQorCQkJdWRlbGF5KDEwKTsKKwkJaWYgKGNjb2RlID09IHNpZ3Bfbm90X29wZXJhdGlvbmFsKQorCQkJZ290byBlcnJfb3V0OworCX0gd2hpbGUgKGNjb2RlID09IHNpZ3BfYnVzeSk7CiAKLQljY29kZSA9IHNpZ25hbF9wcm9jZXNzb3JfcCgoX191MzIpKHVuc2lnbmVkIGxvbmcpKGxvd2NvcmVfcHRyW2NwdV0pLAotCQkJCSAgIGNwdSwgc2lncF9zZXRfcHJlZml4KTsKLQlpZiAoY2NvZGUpCi0JCXJldHVybiAtRUlPOworCWxvd2NvcmUgPSAodTMyKSh1bnNpZ25lZCBsb25nKWxvd2NvcmVfcHRyW2NwdV07CisJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3JfcChsb3djb3JlLCBjcHUsIHNpZ3Bfc2V0X3ByZWZpeCkgPT0gc2lncF9idXN5KQorCQl1ZGVsYXkoMTApOwogCiAJaWRsZSA9IGN1cnJlbnRfc2V0W2NwdV07CiAJY3B1X2xvd2NvcmUgPSBsb3djb3JlX3B0cltjcHVdOwpAQCAtNTcxLDkgKzU2OSw4IEBACiAJCTogOiAiYSIgKCZjcHVfbG93Y29yZS0+YWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhKSA6ICJtZW1vcnkiKTsKIAljcHVfbG93Y29yZS0+cGVyY3B1X29mZnNldCA9IF9fcGVyX2NwdV9vZmZzZXRbY3B1XTsKIAljcHVfbG93Y29yZS0+Y3VycmVudF90YXNrID0gKHVuc2lnbmVkIGxvbmcpIGlkbGU7Ci0JY3B1X2xvd2NvcmUtPmNwdV9kYXRhLmNwdV9uciA9IGNwdTsKKwljcHVfbG93Y29yZS0+Y3B1X25yID0gY3B1OwogCWNwdV9sb3djb3JlLT5rZXJuZWxfYXNjZSA9IFMzOTBfbG93Y29yZS5rZXJuZWxfYXNjZTsKLQljcHVfbG93Y29yZS0+aXBsX2RldmljZSA9IFMzOTBfbG93Y29yZS5pcGxfZGV2aWNlOwogCWVpZWlvKCk7CiAKIAl3aGlsZSAoc2lnbmFsX3Byb2Nlc3NvcihjcHUsIHNpZ3BfcmVzdGFydCkgPT0gc2lncF9idXN5KQpAQCAtNTgyLDYgKzU3OSwxMCBAQAogCXdoaWxlICghY3B1X29ubGluZShjcHUpKQogCQljcHVfcmVsYXgoKTsKIAlyZXR1cm4gMDsKKworZXJyX291dDoKKwlzbXBfZnJlZV9sb3djb3JlKGNwdSk7CisJcmV0dXJuIC1FSU87CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX3Bvc3NpYmxlX2NwdXMoY2hhciAqcykKQEAgLTU4OSw5ICs1OTAsOCBAQAogCWludCBwY3B1cywgY3B1OwogCiAJcGNwdXMgPSBzaW1wbGVfc3RydG91bChzLCBOVUxMLCAwKTsKLQljcHVfcG9zc2libGVfbWFwID0gY3B1bWFza19vZl9jcHUoMCk7Ci0JZm9yIChjcHUgPSAxOyBjcHUgPCBwY3B1cyAmJiBjcHUgPCBOUl9DUFVTOyBjcHUrKykKLQkJY3B1X3NldChjcHUsIGNwdV9wb3NzaWJsZV9tYXApOworCWZvciAoY3B1ID0gMDsgY3B1IDwgcGNwdXMgJiYgY3B1IDwgbnJfY3B1X2lkczsgY3B1KyspCisJCXNldF9jcHVfcG9zc2libGUoY3B1LCB0cnVlKTsKIAlyZXR1cm4gMDsKIH0KIGVhcmx5X3BhcmFtKCJwb3NzaWJsZV9jcHVzIiwgc2V0dXBfcG9zc2libGVfY3B1cyk7CkBAIC02NjMsNyArNjYzLDcgQEAKIAkvKiByZXF1ZXN0IHRoZSAweDEyMDEgZW1lcmdlbmN5IHNpZ25hbCBleHRlcm5hbCBpbnRlcnJ1cHQgKi8KIAlpZiAocmVnaXN0ZXJfZXh0ZXJuYWxfaW50ZXJydXB0KDB4MTIwMSwgZG9fZXh0X2NhbGxfaW50ZXJydXB0KSAhPSAwKQogCQlwYW5pYygiQ291bGRuJ3QgcmVxdWVzdCBleHRlcm5hbCBpbnRlcnJ1cHQgMHgxMjAxIik7Ci0JcHJpbnRfY3B1X2luZm8oJlMzOTBfbG93Y29yZS5jcHVfZGF0YSk7CisJcHJpbnRfY3B1X2luZm8oKTsKIAogCS8qIFJlYWxsb2NhdGUgY3VycmVudCBsb3djb3JlLCBidXQga2VlcCBpdHMgY29udGVudHMuICovCiAJbGNfb3JkZXIgPSBzaXplb2YobG9uZykgPT0gOCA/IDEgOiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMgYi9hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWU3NWUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNpbmZvLmMKQEAgLTAsMCArMSw0MjggQEAKKy8qCisgKiAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAxLCAyMDA5CisgKiAgQXV0aG9yKHMpOiBVbHJpY2ggV2VpZ2FuZCA8VWxyaWNoLldlaWdhbmRAZGUuaWJtLmNvbT4sCisgKgkgICAgICAgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPiwKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vZWJjZGljLmg+CisjaW5jbHVkZSA8YXNtL3N5c2luZm8uaD4KKyNpbmNsdWRlIDxhc20vY3BjbWQuaD4KKworLyogU2lnaCwgbWF0aC1lbXUuIERvbid0IGFzay4gKi8KKyNpbmNsdWRlIDxhc20vc2ZwLXV0aWwuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zb2Z0LWZwLmg+CisjaW5jbHVkZSA8bWF0aC1lbXUvc2luZ2xlLmg+CisKK3N0YXRpYyBpbmxpbmUgaW50IHN0c2lfMCh2b2lkKQoreworCWludCByYyA9IHN0c2koTlVMTCwgMCwgMCwgMCk7CisJcmV0dXJuIHJjID09IC1FTk9TWVMgPyByYyA6ICgoKHVuc2lnbmVkIGludCkgcmMpID4+IDI4KTsKK30KKworc3RhdGljIGludCBzdHNpXzFfMV8xKHN0cnVjdCBzeXNpbmZvXzFfMV8xICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQoreworCWlmIChzdHNpKGluZm8sIDEsIDEsIDEpID09IC1FTk9TWVMpCisJCXJldHVybiBsZW47CisKKwlFQkNBU0MoaW5mby0+bWFudWZhY3R1cmVyLCBzaXplb2YoaW5mby0+bWFudWZhY3R1cmVyKSk7CisJRUJDQVNDKGluZm8tPnR5cGUsIHNpemVvZihpbmZvLT50eXBlKSk7CisJRUJDQVNDKGluZm8tPm1vZGVsLCBzaXplb2YoaW5mby0+bW9kZWwpKTsKKwlFQkNBU0MoaW5mby0+c2VxdWVuY2UsIHNpemVvZihpbmZvLT5zZXF1ZW5jZSkpOworCUVCQ0FTQyhpbmZvLT5wbGFudCwgc2l6ZW9mKGluZm8tPnBsYW50KSk7CisJRUJDQVNDKGluZm8tPm1vZGVsX2NhcGFjaXR5LCBzaXplb2YoaW5mby0+bW9kZWxfY2FwYWNpdHkpKTsKKwlFQkNBU0MoaW5mby0+bW9kZWxfcGVybV9jYXAsIHNpemVvZihpbmZvLT5tb2RlbF9wZXJtX2NhcCkpOworCUVCQ0FTQyhpbmZvLT5tb2RlbF90ZW1wX2NhcCwgc2l6ZW9mKGluZm8tPm1vZGVsX3RlbXBfY2FwKSk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk1hbnVmYWN0dXJlcjogICAgICAgICAlLTE2LjE2c1xuIiwKKwkJICAgICAgIGluZm8tPm1hbnVmYWN0dXJlcik7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlR5cGU6ICAgICAgICAgICAgICAgICAlLTQuNHNcbiIsCisJCSAgICAgICBpbmZvLT50eXBlKTsKKwlpZiAoaW5mby0+bW9kZWxbMF0gIT0gJ1wwJykKKwkJLyoKKwkJICogU2lnaDogdGhlIG1vZGVsIGZpZWxkIGhhcyBiZWVuIHJlbmFtZWQgd2l0aCBTeXN0ZW0gejkKKwkJICogdG8gbW9kZWxfY2FwYWNpdHkgYW5kIGEgbmV3IG1vZGVsIGZpZWxkIGhhcyBiZWVuIGFkZGVkCisJCSAqIGFmdGVyIHRoZSBwbGFudCBmaWVsZC4gVG8gYXZvaWQgY29uZnVzaW5nIG9sZGVyIHByb2dyYW1zCisJCSAqIHRoZSAiTW9kZWw6IiBwcmludHMgIm1vZGVsX2NhcGFjaXR5IG1vZGVsIiBvciBqdXN0CisJCSAqICJtb2RlbF9jYXBhY2l0eSIgaWYgdGhlIG1vZGVsIHN0cmluZyBpcyBlbXB0eSAuCisJCSAqLworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLAorCQkJICAgICAgICJNb2RlbDogICAgICAgICAgICAgICAgJS0xNi4xNnMgJS0xNi4xNnNcbiIsCisJCQkgICAgICAgaW5mby0+bW9kZWxfY2FwYWNpdHksIGluZm8tPm1vZGVsKTsKKwllbHNlCisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJNb2RlbDogICAgICAgICAgICAgICAgJS0xNi4xNnNcbiIsCisJCQkgICAgICAgaW5mby0+bW9kZWxfY2FwYWNpdHkpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZXF1ZW5jZSBDb2RlOiAgICAgICAgJS0xNi4xNnNcbiIsCisJCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50OiAgICAgICAgICAgICAgICAlLTQuNHNcbiIsCisJCSAgICAgICBpbmZvLT5wbGFudCk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk1vZGVsIENhcGFjaXR5OiAgICAgICAlLTE2LjE2cyAlMDh1XG4iLAorCQkgICAgICAgaW5mby0+bW9kZWxfY2FwYWNpdHksICoodTMyICopIGluZm8tPm1vZGVsX2NhcF9yYXRpbmcpOworCWlmIChpbmZvLT5tb2RlbF9wZXJtX2NhcFswXSAhPSAnXDAnKQorCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLAorCQkJICAgICAgICJNb2RlbCBQZXJtLiBDYXBhY2l0eTogJS0xNi4xNnMgJTA4dVxuIiwKKwkJCSAgICAgICBpbmZvLT5tb2RlbF9wZXJtX2NhcCwKKwkJCSAgICAgICAqKHUzMiAqKSBpbmZvLT5tb2RlbF9wZXJtX2NhcF9yYXRpbmcpOworCWlmIChpbmZvLT5tb2RlbF90ZW1wX2NhcFswXSAhPSAnXDAnKQorCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLAorCQkJICAgICAgICJNb2RlbCBUZW1wLiBDYXBhY2l0eTogJS0xNi4xNnMgJTA4dVxuIiwKKwkJCSAgICAgICBpbmZvLT5tb2RlbF90ZW1wX2NhcCwKKwkJCSAgICAgICAqKHUzMiAqKSBpbmZvLT5tb2RlbF90ZW1wX2NhcF9yYXRpbmcpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQgc3RzaV8xXzJfMihzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3lzaW5mb18xXzJfMl9leHRlbnNpb24gKmV4dDsKKwlpbnQgaTsKKworCWlmIChzdHNpKGluZm8sIDEsIDIsIDIpID09IC1FTk9TWVMpCisJCXJldHVybiBsZW47CisJZXh0ID0gKHN0cnVjdCBzeXNpbmZvXzFfMl8yX2V4dGVuc2lvbiAqKQorCQkoKHVuc2lnbmVkIGxvbmcpIGluZm8gKyBpbmZvLT5hY2Nfb2Zmc2V0KTsKKworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDUFVzIFRvdGFsOiAgICAgICAgICAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5jcHVzX3RvdGFsKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ1BVcyBDb25maWd1cmVkOiAgICAgICVkXG4iLAorCQkgICAgICAgaW5mby0+Y3B1c19jb25maWd1cmVkKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ1BVcyBTdGFuZGJ5OiAgICAgICAgICVkXG4iLAorCQkgICAgICAgaW5mby0+Y3B1c19zdGFuZGJ5KTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ1BVcyBSZXNlcnZlZDogICAgICAgICVkXG4iLAorCQkgICAgICAgaW5mby0+Y3B1c19yZXNlcnZlZCk7CisKKwlpZiAoaW5mby0+Zm9ybWF0ID09IDEpIHsKKwkJLyoKKwkJICogU2lnaCAyLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gdGhlIGFsdGVybmF0ZQorCQkgKiBjYXBhYmlsaXR5IGZpZWxkIGlzIGEgMzIgYml0IGZsb2F0aW5nIHBvaW50IG51bWJlcgorCQkgKiBpZiB0aGUgaGlnaGVyIG9yZGVyIDggYml0cyBhcmUgbm90IHplcm8uIFByaW50aW5nCisJCSAqIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGluIHRoZSBrZXJuZWwgaXMgYSBuby1ubywKKwkJICogYWx3YXlzIHByaW50IHRoZSBudW1iZXIgYXMgMzIgYml0IHVuc2lnbmVkIGludGVnZXIuCisJCSAqIFRoZSB1c2VyLXNwYWNlIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIHN0cmFuZ2UKKwkJICogZW5jb2Rpbmcgb2YgdGhlIGFsdGVybmF0ZSBjcHUgY2FwYWJpbGl0eS4KKwkJICovCisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDYXBhYmlsaXR5OiAgICAgICAgICAgJXUgJXVcbiIsCisJCQkgICAgICAgaW5mby0+Y2FwYWJpbGl0eSwgZXh0LT5hbHRfY2FwYWJpbGl0eSk7CisJCWZvciAoaSA9IDI7IGkgPD0gaW5mby0+Y3B1c190b3RhbDsgaSsrKQorCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKKwkJCQkgICAgICAgIkFkanVzdG1lbnQgJTAyZC13YXk6ICAgICV1ICV1XG4iLAorCQkJCSAgICAgICBpLCBpbmZvLT5hZGp1c3RtZW50W2ktMl0sCisJCQkJICAgICAgIGV4dC0+YWx0X2FkanVzdG1lbnRbaS0yXSk7CisKKwl9IGVsc2UgeworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ2FwYWJpbGl0eTogICAgICAgICAgICV1XG4iLAorCQkJICAgICAgIGluZm8tPmNhcGFiaWxpdHkpOworCQlmb3IgKGkgPSAyOyBpIDw9IGluZm8tPmNwdXNfdG90YWw7IGkrKykKKwkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sCisJCQkJICAgICAgICJBZGp1c3RtZW50ICUwMmQtd2F5OiAgICAldVxuIiwKKwkJCQkgICAgICAgaSwgaW5mby0+YWRqdXN0bWVudFtpLTJdKTsKKwl9CisKKwlpZiAoaW5mby0+c2Vjb25kYXJ5X2NhcGFiaWxpdHkgIT0gMCkKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNlY29uZGFyeSBDYXBhYmlsaXR5OiAlZFxuIiwKKwkJCSAgICAgICBpbmZvLT5zZWNvbmRhcnlfY2FwYWJpbGl0eSk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBzdHNpXzJfMl8yKHN0cnVjdCBzeXNpbmZvXzJfMl8yICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQoreworCWlmIChzdHNpKGluZm8sIDIsIDIsIDIpID09IC1FTk9TWVMpCisJCXJldHVybiBsZW47CisKKwlFQkNBU0MoaW5mby0+bmFtZSwgc2l6ZW9mKGluZm8tPm5hbWUpKTsKKworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIE51bWJlcjogICAgICAgICAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5scGFyX251bWJlcik7CisKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBDaGFyYWN0ZXJpc3RpY3M6ICIpOworCWlmIChpbmZvLT5jaGFyYWN0ZXJpc3RpY3MgJiBMUEFSX0NIQVJfREVESUNBVEVEKQorCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiRGVkaWNhdGVkICIpOworCWlmIChpbmZvLT5jaGFyYWN0ZXJpc3RpY3MgJiBMUEFSX0NIQVJfU0hBUkVEKQorCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2hhcmVkICIpOworCWlmIChpbmZvLT5jaGFyYWN0ZXJpc3RpY3MgJiBMUEFSX0NIQVJfTElNSVRFRCkKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxpbWl0ZWQgIik7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CisKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBOYW1lOiAgICAgICAgICAgICUtOC44c1xuIiwKKwkJICAgICAgIGluZm8tPm5hbWUpOworCisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQWRqdXN0bWVudDogICAgICAlZFxuIiwKKwkJICAgICAgIGluZm8tPmNhZik7CisKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBDUFVzIFRvdGFsOiAgICAgICVkXG4iLAorCQkgICAgICAgaW5mby0+Y3B1c190b3RhbCk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ1BVcyBDb25maWd1cmVkOiAlZFxuIiwKKwkJICAgICAgIGluZm8tPmNwdXNfY29uZmlndXJlZCk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ1BVcyBTdGFuZGJ5OiAgICAlZFxuIiwKKwkJICAgICAgIGluZm8tPmNwdXNfc3RhbmRieSk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ1BVcyBSZXNlcnZlZDogICAlZFxuIiwKKwkJICAgICAgIGluZm8tPmNwdXNfcmVzZXJ2ZWQpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgRGVkaWNhdGVkOiAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5jcHVzX2RlZGljYXRlZCk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ1BVcyBTaGFyZWQ6ICAgICAlZFxuIiwKKwkJICAgICAgIGluZm8tPmNwdXNfc2hhcmVkKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IHN0c2lfM18yXzIoc3RydWN0IHN5c2luZm9fM18yXzIgKmluZm8sIGNoYXIgKnBhZ2UsIGludCBsZW4pCit7CisJaW50IGk7CisKKwlpZiAoc3RzaShpbmZvLCAzLCAyLCAyKSA9PSAtRU5PU1lTKQorCQlyZXR1cm4gbGVuOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5jb3VudDsgaSsrKSB7CisJCUVCQ0FTQyhpbmZvLT52bVtpXS5uYW1lLCBzaXplb2YoaW5mby0+dm1baV0ubmFtZSkpOworCQlFQkNBU0MoaW5mby0+dm1baV0uY3BpLCBzaXplb2YoaW5mby0+dm1baV0uY3BpKSk7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIE5hbWU6ICAgICAgICAgICAgJS04LjhzXG4iLAorCQkJICAgICAgIGksIGluZm8tPnZtW2ldLm5hbWUpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIENvbnRyb2wgUHJvZ3JhbTogJS0xNi4xNnNcbiIsCisJCQkgICAgICAgaSwgaW5mby0+dm1baV0uY3BpKTsKKworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIEFkanVzdG1lbnQ6ICAgICAgJWRcbiIsCisJCQkgICAgICAgaSwgaW5mby0+dm1baV0uY2FmKTsKKworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIENQVXMgVG90YWw6ICAgICAgJWRcbiIsCisJCQkgICAgICAgaSwgaW5mby0+dm1baV0uY3B1c190b3RhbCk7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJWTSUwMmQgQ1BVcyBDb25maWd1cmVkOiAlZFxuIiwKKwkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5jcHVzX2NvbmZpZ3VyZWQpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIENQVXMgU3RhbmRieTogICAgJWRcbiIsCisJCQkgICAgICAgaSwgaW5mby0+dm1baV0uY3B1c19zdGFuZGJ5KTsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBDUFVzIFJlc2VydmVkOiAgICVkXG4iLAorCQkJICAgICAgIGksIGluZm8tPnZtW2ldLmNwdXNfcmVzZXJ2ZWQpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IHByb2NfcmVhZF9zeXNpbmZvKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwKKwkJCSAgICAgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCisJCQkgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgaW5mbyA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpbnQgbGV2ZWwsIGxlbjsKKworCWlmICghaW5mbykKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSAwOworCWxldmVsID0gc3RzaV8wKCk7CisJaWYgKGxldmVsID49IDEpCisJCWxlbiA9IHN0c2lfMV8xXzEoKHN0cnVjdCBzeXNpbmZvXzFfMV8xICopIGluZm8sIHBhZ2UsIGxlbik7CisKKwlpZiAobGV2ZWwgPj0gMSkKKwkJbGVuID0gc3RzaV8xXzJfMigoc3RydWN0IHN5c2luZm9fMV8yXzIgKikgaW5mbywgcGFnZSwgbGVuKTsKKworCWlmIChsZXZlbCA+PSAyKQorCQlsZW4gPSBzdHNpXzJfMl8yKChzdHJ1Y3Qgc3lzaW5mb18yXzJfMiAqKSBpbmZvLCBwYWdlLCBsZW4pOworCisJaWYgKGxldmVsID49IDMpCisJCWxlbiA9IHN0c2lfM18yXzIoKHN0cnVjdCBzeXNpbmZvXzNfMl8yICopIGluZm8sIHBhZ2UsIGxlbik7CisKKwlmcmVlX3BhZ2UoaW5mbyk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIF9faW5pdCBpbnQgY3JlYXRlX3Byb2Nfc3lzaW5mbyh2b2lkKQoreworCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoInN5c2luZm8iLCAwNDQ0LCBOVUxMLAorCQkJICAgICAgIHByb2NfcmVhZF9zeXNpbmZvLCBOVUxMKTsKKwlyZXR1cm4gMDsKK30KK2RldmljZV9pbml0Y2FsbChjcmVhdGVfcHJvY19zeXNpbmZvKTsKKworLyoKKyAqIFNlcnZpY2UgbGV2ZWxzIGludGVyZmFjZS4KKyAqLworCitzdGF0aWMgREVDTEFSRV9SV1NFTShzZXJ2aWNlX2xldmVsX3NlbSk7CitzdGF0aWMgTElTVF9IRUFEKHNlcnZpY2VfbGV2ZWxfbGlzdCk7CisKK2ludCByZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKHN0cnVjdCBzZXJ2aWNlX2xldmVsICpzbHIpCit7CisJc3RydWN0IHNlcnZpY2VfbGV2ZWwgKnB0cjsKKworCWRvd25fd3JpdGUoJnNlcnZpY2VfbGV2ZWxfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnNlcnZpY2VfbGV2ZWxfbGlzdCwgbGlzdCkKKwkJaWYgKHB0ciA9PSBzbHIpIHsKKwkJCXVwX3dyaXRlKCZzZXJ2aWNlX2xldmVsX3NlbSk7CisJCQlyZXR1cm4gLUVFWElTVDsKKwkJfQorCWxpc3RfYWRkX3RhaWwoJnNsci0+bGlzdCwgJnNlcnZpY2VfbGV2ZWxfbGlzdCk7CisJdXBfd3JpdGUoJnNlcnZpY2VfbGV2ZWxfc2VtKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocmVnaXN0ZXJfc2VydmljZV9sZXZlbCk7CisKK2ludCB1bnJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoc3RydWN0IHNlcnZpY2VfbGV2ZWwgKnNscikKK3sKKwlzdHJ1Y3Qgc2VydmljZV9sZXZlbCAqcHRyLCAqbmV4dDsKKwlpbnQgcmMgPSAtRU5PRU5UOworCisJZG93bl93cml0ZSgmc2VydmljZV9sZXZlbF9zZW0pOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdHIsIG5leHQsICZzZXJ2aWNlX2xldmVsX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ciAhPSBzbHIpCisJCQljb250aW51ZTsKKwkJbGlzdF9kZWwoJnB0ci0+bGlzdCk7CisJCXJjID0gMDsKKwkJYnJlYWs7CisJfQorCXVwX3dyaXRlKCZzZXJ2aWNlX2xldmVsX3NlbSk7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwpOworCitzdGF0aWMgdm9pZCAqc2VydmljZV9sZXZlbF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQoreworCWRvd25fcmVhZCgmc2VydmljZV9sZXZlbF9zZW0pOworCXJldHVybiBzZXFfbGlzdF9zdGFydCgmc2VydmljZV9sZXZlbF9saXN0LCAqcG9zKTsKK30KKworc3RhdGljIHZvaWQgKnNlcnZpY2VfbGV2ZWxfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnAsIGxvZmZfdCAqcG9zKQoreworCXJldHVybiBzZXFfbGlzdF9uZXh0KHAsICZzZXJ2aWNlX2xldmVsX2xpc3QsIHBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZpY2VfbGV2ZWxfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCit7CisJdXBfcmVhZCgmc2VydmljZV9sZXZlbF9zZW0pOworfQorCitzdGF0aWMgaW50IHNlcnZpY2VfbGV2ZWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCit7CisJc3RydWN0IHNlcnZpY2VfbGV2ZWwgKnNscjsKKworCXNsciA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNlcnZpY2VfbGV2ZWwsIGxpc3QpOworCXNsci0+c2VxX3ByaW50KG0sIHNscik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VydmljZV9sZXZlbF9zZXFfb3BzID0geworCS5zdGFydAkJPSBzZXJ2aWNlX2xldmVsX3N0YXJ0LAorCS5uZXh0CQk9IHNlcnZpY2VfbGV2ZWxfbmV4dCwKKwkuc3RvcAkJPSBzZXJ2aWNlX2xldmVsX3N0b3AsCisJLnNob3cJCT0gc2VydmljZV9sZXZlbF9zaG93Cit9OworCitzdGF0aWMgaW50IHNlcnZpY2VfbGV2ZWxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNlcnZpY2VfbGV2ZWxfc2VxX29wcyk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlcnZpY2VfbGV2ZWxfb3BzID0geworCS5vcGVuCQk9IHNlcnZpY2VfbGV2ZWxfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrIAk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlCit9OworCitzdGF0aWMgdm9pZCBzZXJ2aWNlX2xldmVsX3ZtX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKKwkJCQkgICBzdHJ1Y3Qgc2VydmljZV9sZXZlbCAqc2xyKQoreworCWNoYXIgKnF1ZXJ5X2J1ZmZlciwgKnN0cjsKKworCXF1ZXJ5X2J1ZmZlciA9IGttYWxsb2MoMTAyNCwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCWlmICghcXVlcnlfYnVmZmVyKQorCQlyZXR1cm47CisJY3BjbWQoIlFVRVJZIENQTEVWRUwiLCBxdWVyeV9idWZmZXIsIDEwMjQsIE5VTEwpOworCXN0ciA9IHN0cmNocihxdWVyeV9idWZmZXIsICdcbicpOworCWlmIChzdHIpCisJCSpzdHIgPSAwOworCXNlcV9wcmludGYobSwgIlZNOiAlc1xuIiwgcXVlcnlfYnVmZmVyKTsKKwlrZnJlZShxdWVyeV9idWZmZXIpOworfQorCitzdGF0aWMgc3RydWN0IHNlcnZpY2VfbGV2ZWwgc2VydmljZV9sZXZlbF92bSA9IHsKKwkuc2VxX3ByaW50ID0gc2VydmljZV9sZXZlbF92bV9wcmludAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgY3JlYXRlX3Byb2Nfc2VydmljZV9sZXZlbCh2b2lkKQoreworCXByb2NfY3JlYXRlKCJzZXJ2aWNlX2xldmVscyIsIDAsIE5VTEwsICZzZXJ2aWNlX2xldmVsX29wcyk7CisJaWYgKE1BQ0hJTkVfSVNfVk0pCisJCXJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoJnNlcnZpY2VfbGV2ZWxfdm0pOworCXJldHVybiAwOworfQorc3Vic3lzX2luaXRjYWxsKGNyZWF0ZV9wcm9jX3NlcnZpY2VfbGV2ZWwpOworCisvKgorICogQm9nb21pcHMgY2FsY3VsYXRpb24gYmFzZWQgb24gY3B1IGNhcGFiaWxpdHkuCisgKi8KK2ludCBnZXRfY3B1X2NhcGFiaWxpdHkodW5zaWduZWQgaW50ICpjYXBhYmlsaXR5KQoreworCXN0cnVjdCBzeXNpbmZvXzFfMl8yICppbmZvOworCWludCByYzsKKworCWluZm8gPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyYyA9IHN0c2koaW5mbywgMSwgMiwgMik7CisJaWYgKHJjID09IC1FTk9TWVMpCisJCWdvdG8gb3V0OworCXJjID0gMDsKKwkqY2FwYWJpbGl0eSA9IGluZm8tPmNhcGFiaWxpdHk7CitvdXQ6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpbmZvKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDUFUgY2FwYWJpbGl0eSBtaWdodCBoYXZlIGNoYW5nZWQuIFRoZXJlZm9yZSByZWNhbGN1bGF0ZSBsb29wc19wZXJfamlmZnkuCisgKi8KK3ZvaWQgczM5MF9hZGp1c3RfamlmZmllcyh2b2lkKQoreworCXN0cnVjdCBzeXNpbmZvXzFfMl8yICppbmZvOworCWNvbnN0IHVuc2lnbmVkIGludCBmbWlsID0gMHg0YjE4OTY4MDsJLyogMWU3IGFzIDMyLWJpdCBmbG9hdC4gKi8KKwlGUF9ERUNMX1MoU0EpOyBGUF9ERUNMX1MoU0IpOyBGUF9ERUNMX1MoU1IpOworCUZQX0RFQ0xfRVg7CisJdW5zaWduZWQgaW50IGNhcGFiaWxpdHk7CisKKwlpbmZvID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuOworCisJaWYgKHN0c2koaW5mbywgMSwgMiwgMikgIT0gLUVOT1NZUykgeworCQkvKgorCQkgKiBNYWpvciBzaWdoLiBUaGUgY3B1IGNhcGFiaWxpdHkgZW5jb2RpbmcgaXMgInNwZWNpYWwiLgorCQkgKiBJZiB0aGUgZmlyc3QgOSBiaXRzIG9mIGluZm8tPmNhcGFiaWxpdHkgYXJlIDAgdGhlbiBpdAorCQkgKiBpcyBhIDMyIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIC4uIDJeMjMuCisJCSAqIElmIHRoZSBmaXJzdCA5IGJpdHMgYXJlICE9IDAgdGhlbiBpdCBpcyBhIDMyIGJpdCBmbG9hdC4KKwkJICogSW4gYWRkaXRpb24gYSBsb3dlciB2YWx1ZSBpbmRpY2F0ZXMgYSBwcm9wb3J0aW9uYWxseQorCQkgKiBoaWdoZXIgY3B1IGNhcGFjaXR5LiBCb2dvbWlwcyBhcmUgdGhlIG90aGVyIHdheSByb3VuZC4KKwkJICogVG8gZ2V0IHRvIGEgaGFsZndheSBzdWl0YWJsZSBudW1iZXIgd2UgZGl2aWRlIDFlNworCQkgKiBieSB0aGUgY3B1IGNhcGFiaWxpdHkgbnVtYmVyLiBZZXMsIHRoYXQgbWVhbnMgYSBmbG9hdGluZworCQkgKiBwb2ludCBkaXZpc2lvbiAuLiBtYXRoLWVtdSBoZXJlIHdlIGNvbWUgOi0pCisJCSAqLworCQlGUF9VTlBBQ0tfU1AoU0EsICZmbWlsKTsKKwkJaWYgKChpbmZvLT5jYXBhYmlsaXR5ID4+IDIzKSA9PSAwKQorCQkJRlBfRlJPTV9JTlRfUyhTQiwgaW5mby0+Y2FwYWJpbGl0eSwgMzIsIGludCk7CisJCWVsc2UKKwkJCUZQX1VOUEFDS19TUChTQiwgJmluZm8tPmNhcGFiaWxpdHkpOworCQlGUF9ESVZfUyhTUiwgU0EsIFNCKTsKKwkJRlBfVE9fSU5UX1MoY2FwYWJpbGl0eSwgU1IsIDMyLCAwKTsKKwl9IGVsc2UKKwkJLyoKKwkJICogUmVhbGx5IG9sZCBtYWNoaW5lIHdpdGhvdXQgc3RzaSBibG9jayBmb3IgYmFzaWMKKwkJICogY3B1IGluZm9ybWF0aW9uLiBSZXBvcnQgNDIuMCBib2dvbWlwcy4KKwkJICovCisJCWNhcGFiaWxpdHkgPSA0MjsKKwlsb29wc19wZXJfamlmZnkgPSBjYXBhYmlsaXR5ICogKDUwMDAwMC9IWik7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBpbmZvKTsKK30KKworLyoKKyAqIGNhbGlicmF0ZSB0aGUgZGVsYXkgbG9vcAorICovCit2b2lkIF9fY3B1aW5pdCBjYWxpYnJhdGVfZGVsYXkodm9pZCkKK3sKKwlzMzkwX2FkanVzdF9qaWZmaWVzKCk7CisJLyogUHJpbnQgdGhlIGdvb2Qgb2xkIEJvZ29taXBzIGxpbmUgLi4gKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiQ2FsaWJyYXRpbmcgZGVsYXkgbG9vcCAoc2tpcHBlZCkuLi4gIgorCSAgICAgICAiJWx1LiUwMmx1IEJvZ29NSVBTIHByZXNldFxuIiwgbG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAorCSAgICAgICAobG9vcHNfcGVyX2ppZmZ5Lyg1MDAwL0haKSkgJSAxMDApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwppbmRleCBmYzQ2OGNhLi5mNzJkNDEwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RpbWUuYwpAQCAtMzMxLDYgKzMzMSw3IEBACiB9CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShhdG9taWNfdCwgY2xvY2tfc3luY193b3JkKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY2xvY2tfc3luY19tdXRleCk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjbG9ja19zeW5jX2ZsYWdzOwogCiAjZGVmaW5lIENMT0NLX1NZTkNfSEFTX0VUUgkwCkBAIC0zOTQsNiArMzk1LDIwIEBACiAJYXRvbWljX3NldF9tYXNrKDB4ODAwMDAwMDAsIHN3X3B0cik7CiB9CiAKKy8qCisgKiBGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgY2xvY2sgaXMgaW4gc3luYy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc3luY19jbG9jayh2b2lkKQoreworCWF0b21pY190ICpzd19wdHI7CisJaW50IHJjOworCisJc3dfcHRyID0gJmdldF9jcHVfdmFyKGNsb2NrX3N5bmNfd29yZCk7CisJcmMgPSAoYXRvbWljX3JlYWQoc3dfcHRyKSAmIDB4ODAwMDAwMDBVKSAhPSAwOworCXB1dF9jcHVfdmFyKGNsb2NrX3N5bmNfc3luYyk7CisJcmV0dXJuIHJjOworfQorCiAvKiBTaW5nbGUgdGhyZWFkZWQgd29ya3F1ZXVlIHVzZWQgZm9yIGV0ciBhbmQgc3RwIHN5bmMgZXZlbnRzICovCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnRpbWVfc3luY193cTsKIApAQCAtNDg1LDYgKzUwMCw4IEBACiAJaWYgKGV0cl9zZXRyKCZldHJfZWFjcikgPT0gMCkgewogCQlldHJfdG9sZWMgPSBnZXRfY2xvY2soKTsKIAkJc2V0X2JpdChDTE9DS19TWU5DX0hBU19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKKwkJaWYgKGV0cl9wb3J0MF9vbmxpbmUgJiYgZXRyX3BvcnQxX29ubGluZSkKKwkJCXNldF9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAl9IGVsc2UgaWYgKGV0cl9wb3J0MF9vbmxpbmUgfHwgZXRyX3BvcnQxX29ubGluZSkgewogCQlwcl93YXJuaW5nKCJUaGUgcmVhbCBvciB2aXJ0dWFsIGhhcmR3YXJlIHN5c3RlbSBkb2VzICIKIAkJCSAgICJub3QgcHJvdmlkZSBhbiBFVFIgaW50ZXJmYWNlXG4iKTsKQEAgLTUzMyw4ICs1NTAsNyBAQAogewogCWlmICghZXRyX2VhY3Iuc2wpCiAJCXJldHVybjsKLQlpZiAodGVzdF9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKSkKLQkJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOworCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKIAlzZXRfYml0KEVUUl9FVkVOVF9TV0lUQ0hfTE9DQUwsICZldHJfZXZlbnRzKTsKIAlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJmV0cl93b3JrKTsKIH0KQEAgLTU0OSw4ICs1NjUsNyBAQAogewogCWlmICghZXRyX2VhY3IuZXMpCiAJCXJldHVybjsKLQlpZiAodGVzdF9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKSkKLQkJZGlzYWJsZV9zeW5jX2Nsb2NrKE5VTEwpOworCWRpc2FibGVfc3luY19jbG9jayhOVUxMKTsKIAlzZXRfYml0KEVUUl9FVkVOVF9TWU5DX0NIRUNLLCAmZXRyX2V2ZW50cyk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZldHJfd29yayk7CiB9CkBAIC05MTQsNyArOTI5LDcgQEAKIAkgKiBEbyBub3QgdHJ5IHRvIGdldCB0aGUgYWx0ZXJuYXRlIHBvcnQgYWliIGlmIHRoZSBjbG9jawogCSAqIGlzIG5vdCBpbiBzeW5jIHlldC4KIAkgKi8KLQlpZiAoIXRlc3RfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncykgJiYgIWVhY3IuZXMpCisJaWYgKCFjaGVja19zeW5jX2Nsb2NrKCkpCiAJCXJldHVybiBlYWNyOwogCiAJLyoKQEAgLTk5Nyw3ICsxMDEyLDYgQEAKIAkJb25fZWFjaF9jcHUoZGlzYWJsZV9zeW5jX2Nsb2NrLCBOVUxMLCAxKTsKIAkJZGVsX3RpbWVyX3N5bmMoJmV0cl90aW1lcik7CiAJCWV0cl91cGRhdGVfZWFjcihlYWNyKTsKLQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKQEAgLTEwNzEsMTggKzEwODUsMTMgQEAKIAkJLyogQm90aCBwb3J0cyBub3QgdXNhYmxlLiAqLwogCQllYWNyLmVzID0gZWFjci5zbCA9IDA7CiAJCXN5bmNfcG9ydCA9IC0xOwotCQljbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAl9CiAKLQlpZiAoIXRlc3RfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncykpCi0JCWVhY3IuZXMgPSAwOwotCiAJLyoKIAkgKiBJZiB0aGUgY2xvY2sgaXMgaW4gc3luYyBqdXN0IHVwZGF0ZSB0aGUgZWFjciBhbmQgcmV0dXJuLgogCSAqIElmIHRoZXJlIGlzIG5vIHZhbGlkIHN5bmMgcG9ydCB3YWl0IGZvciBhIHBvcnQgdXBkYXRlLgogCSAqLwotCWlmICh0ZXN0X2JpdChDTE9DS19TWU5DX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpIHx8Ci0JICAgIGVhY3IuZXMgfHwgc3luY19wb3J0IDwgMCkgeworCWlmIChjaGVja19zeW5jX2Nsb2NrKCkgfHwgc3luY19wb3J0IDwgMCkgewogCQlldHJfdXBkYXRlX2VhY3IoZWFjcik7CiAJCWV0cl9zZXRfdG9sZWNfdGltZW91dChub3cpOwogCQlnb3RvIG91dF91bmxvY2s7CkBAIC0xMTAzLDEzICsxMTEyLDExIEBACiAJICogYW5kIHNldCB1cCBhIHRpbWVyIHRvIHRyeSBhZ2FpbiBhZnRlciAwLjUgc2Vjb25kcwogCSAqLwogCWV0cl91cGRhdGVfZWFjcihlYWNyKTsKLQlzZXRfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJaWYgKG5vdyA8IGV0cl90b2xlYyArICgxNjAwMDAwIDw8IDEyKSB8fAogCSAgICBldHJfc3luY19jbG9ja19zdG9wKCZhaWIsIHN5bmNfcG9ydCkgIT0gMCkgewogCQkvKiBTeW5jIGZhaWxlZC4gVHJ5IGFnYWluIGluIDEvMiBzZWNvbmQuICovCiAJCWVhY3IuZXMgPSAwOwogCQlldHJfdXBkYXRlX2VhY3IoZWFjcik7Ci0JCWNsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOwogCQlldHJfc2V0X3N5bmNfdGltZW91dCgpOwogCX0gZWxzZQogCQlldHJfc2V0X3RvbGVjX3RpbWVvdXQobm93KTsKQEAgLTExOTEsMTkgKzExOTgsMzAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCF0ZXN0X2JpdChDTE9DS19TWU5DX0hBU19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOworCW11dGV4X2xvY2soJmNsb2NrX3N5bmNfbXV0ZXgpOwogCWlmIChkZXYgPT0gJmV0cl9wb3J0MF9kZXYpIHsKIAkJaWYgKGV0cl9wb3J0MF9vbmxpbmUgPT0gdmFsdWUpCi0JCQlyZXR1cm4gY291bnQ7CS8qIE5vdGhpbmcgdG8gZG8uICovCisJCQlnb3RvIG91dDsJLyogTm90aGluZyB0byBkby4gKi8KIAkJZXRyX3BvcnQwX29ubGluZSA9IHZhbHVlOworCQlpZiAoZXRyX3BvcnQwX29ubGluZSAmJiBldHJfcG9ydDFfb25saW5lKQorCQkJc2V0X2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpOworCQllbHNlCisJCQljbGVhcl9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAkJc2V0X2JpdChFVFJfRVZFTlRfUE9SVDBfQ0hBTkdFLCAmZXRyX2V2ZW50cyk7CiAJCXF1ZXVlX3dvcmsodGltZV9zeW5jX3dxLCAmZXRyX3dvcmspOwogCX0gZWxzZSB7CiAJCWlmIChldHJfcG9ydDFfb25saW5lID09IHZhbHVlKQotCQkJcmV0dXJuIGNvdW50OwkvKiBOb3RoaW5nIHRvIGRvLiAqLworCQkJZ290byBvdXQ7CS8qIE5vdGhpbmcgdG8gZG8uICovCiAJCWV0cl9wb3J0MV9vbmxpbmUgPSB2YWx1ZTsKKwkJaWYgKGV0cl9wb3J0MF9vbmxpbmUgJiYgZXRyX3BvcnQxX29ubGluZSkKKwkJCXNldF9iaXQoQ0xPQ0tfU1lOQ19FVFIsICZjbG9ja19zeW5jX2ZsYWdzKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KENMT0NLX1NZTkNfRVRSLCAmY2xvY2tfc3luY19mbGFncyk7CiAJCXNldF9iaXQoRVRSX0VWRU5UX1BPUlQxX0NIQU5HRSwgJmV0cl9ldmVudHMpOwogCQlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJmV0cl93b3JrKTsKIAl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjbG9ja19zeW5jX211dGV4KTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTE0NzEsOCArMTQ4OSw2IEBACiAgKi8KIHZvaWQgc3RwX3N5bmNfY2hlY2sodm9pZCkKIHsKLQlpZiAoIXRlc3RfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncykpCi0JCXJldHVybjsKIAlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZzdHBfd29yayk7CiB9CkBAIC0xNDg1LDggKzE1MDEsNiBAQAogICovCiB2b2lkIHN0cF9pc2xhbmRfY2hlY2sodm9pZCkKIHsKLQlpZiAoIXRlc3RfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncykpCi0JCXJldHVybjsKIAlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJcXVldWVfd29yayh0aW1lX3N5bmNfd3EsICZzdHBfd29yayk7CiB9CkBAIC0xNTEzLDEwICsxNTI3LDYgQEAKIAogCWVuYWJsZV9zeW5jX2Nsb2NrKCk7CiAKLQlzZXRfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncyk7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDTE9DS19TWU5DX0VUUiwgJmNsb2NrX3N5bmNfZmxhZ3MpKQotCQlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJmV0cl93b3JrKTsKLQogCXJjID0gMDsKIAlpZiAoc3RwX2luZm8udG9kb2ZmWzBdIHx8IHN0cF9pbmZvLnRvZG9mZlsxXSB8fAogCSAgICBzdHBfaW5mby50b2RvZmZbMl0gfHwgc3RwX2luZm8udG9kb2ZmWzNdIHx8CkBAIC0xNTM1LDkgKzE1NDUsNiBAQAogCWlmIChyYykgewogCQlkaXNhYmxlX3N5bmNfY2xvY2soTlVMTCk7CiAJCXN0cF9zeW5jLT5pbl9zeW5jID0gLUVBR0FJTjsKLQkJY2xlYXJfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncyk7Ci0JCWlmIChldHJfcG9ydDBfb25saW5lIHx8IGV0cl9wb3J0MV9vbmxpbmUpCi0JCQlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJmV0cl93b3JrKTsKIAl9IGVsc2UKIAkJc3RwX3N5bmMtPmluX3N5bmMgPSAxOwogCXhjaGcoJmZpcnN0LCAwKTsKQEAgLTE1NjksNiArMTU3NiwxMCBAQAogCWlmIChyYyB8fCBzdHBfaW5mby5jID09IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCS8qIFNraXAgc3luY2hyb25pemF0aW9uIGlmIHRoZSBjbG9jayBpcyBhbHJlYWR5IGluIHN5bmMuICovCisJaWYgKGNoZWNrX3N5bmNfY2xvY2soKSkKKwkJZ290byBvdXRfdW5sb2NrOworCiAJbWVtc2V0KCZzdHBfc3luYywgMCwgc2l6ZW9mKHN0cF9zeW5jKSk7CiAJZ2V0X29ubGluZV9jcHVzKCk7CiAJYXRvbWljX3NldCgmc3RwX3N5bmMuY3B1cywgbnVtX29ubGluZV9jcHVzKCkgLSAxKTsKQEAgLTE2ODQsOCArMTY5NSwxNCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoIXRlc3RfYml0KENMT0NLX1NZTkNfSEFTX1NUUCwgJmNsb2NrX3N5bmNfZmxhZ3MpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJbXV0ZXhfbG9jaygmY2xvY2tfc3luY19tdXRleCk7CiAJc3RwX29ubGluZSA9IHZhbHVlOworCWlmIChzdHBfb25saW5lKQorCQlzZXRfYml0KENMT0NLX1NZTkNfU1RQLCAmY2xvY2tfc3luY19mbGFncyk7CisJZWxzZQorCQljbGVhcl9iaXQoQ0xPQ0tfU1lOQ19TVFAsICZjbG9ja19zeW5jX2ZsYWdzKTsKIAlxdWV1ZV93b3JrKHRpbWVfc3luY193cSwgJnN0cF93b3JrKTsKKwltdXRleF91bmxvY2soJmNsb2NrX3N5bmNfbXV0ZXgpOwogCXJldHVybiBjb3VudDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jIGIvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCmluZGV4IGNjMzYyYzkuLjNjNzJjOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmMKQEAgLTc0LDcgKzc0LDcgQEAKIAogY3B1bWFza190IGNwdV9jb3JlX21hcFtOUl9DUFVTXTsKIAotY3B1bWFza190IGNwdV9jb3JlZ3JvdXBfbWFwKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgY3B1bWFza190IGNwdV9jb3JlZ3JvdXBfbWFwKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJc3RydWN0IGNvcmVfaW5mbyAqY29yZSA9ICZjb3JlX2luZm87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCA0NTg0ZDgxLi5jMmU0MmNjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC02MSw5ICs2MSwxMSBAQAogI2RlZmluZSBzdGFja19wb2ludGVyICh7IHZvaWQgKipzcDsgYXNtKCJsYSAlMCwwKDE1KSIgOiAiPSZkIiAoc3ApKTsgc3A7IH0pCiAKICNpZm5kZWYgQ09ORklHXzY0QklUCisjZGVmaW5lIExPTkcgIiUwOGx4ICIKICNkZWZpbmUgRk9VUkxPTkcgIiUwOGx4ICUwOGx4ICUwOGx4ICUwOGx4XG4iCiBzdGF0aWMgaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDEyOwogI2Vsc2UgLyogQ09ORklHXzY0QklUICovCisjZGVmaW5lIExPTkcgIiUwMTZseCAiCiAjZGVmaW5lIEZPVVJMT05HICIlMDE2bHggJTAxNmx4ICUwMTZseCAlMDE2bHhcbiIKIHN0YXRpYyBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gMjA7CiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCkBAIC0xNTUsNyArMTU3LDcgQEAKIAkJCWJyZWFrOwogCQlpZiAoaSAmJiAoKGkgKiBzaXplb2YgKGxvbmcpICUgMzIpID09IDApKQogCQkJcHJpbnRrKCJcbiAgICAgICAiKTsKLQkJcHJpbnRrKCIlcCAiLCAodm9pZCAqKSpzdGFjaysrKTsKKwkJcHJpbnRrKExPTkcsICpzdGFjaysrKTsKIAl9CiAJcHJpbnRrKCJcbiIpOwogCXNob3dfdHJhY2UodGFzaywgc3ApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC92ZHNvLmMgYi9hcmNoL3MzOTAva2VybmVsL3Zkc28uYwppbmRleCA2OTBlMTc4Li44OWIyZTdmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Zkc28uYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Zkc28uYwpAQCAtMTQ0LDcgKzE0NCw2IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIHZvaWQgdmRzb19mcmVlX3Blcl9jcHUoaW50IGNwdSwgc3RydWN0IF9sb3djb3JlICpsb3djb3JlKQogewogCXVuc2lnbmVkIGxvbmcgc2VnbWVudF90YWJsZSwgcGFnZV90YWJsZSwgcGFnZV9mcmFtZTsKQEAgLTE2Myw3ICsxNjIsNiBAQAogCWZyZWVfcGFnZShwYWdlX3RhYmxlKTsKIAlmcmVlX3BhZ2VzKHNlZ21lbnRfdGFibGUsIFNFR01FTlRfT1JERVIpOwogfQotI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCiBzdGF0aWMgdm9pZCBfX3Zkc29faW5pdF9jcjUodm9pZCAqZHVtbXkpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL3MzOTAva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggZDc5NmQwNS4uN2EyMDYzZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMTA4LDYgKzEwOCw4IEBACiAJCUVYSVRfVEVYVAogCX0KIAorCS8qIGVhcmx5LmMgdXNlcyBzdHNpLCB3aGljaCByZXF1aXJlcyBwYWdlIGFsaWduZWQgZGF0YS4gKi8KKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkuaW5pdC5kYXRhIDogewogCQlJTklUX0RBVEEKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL0tjb25maWcgYi9hcmNoL3MzOTAva3ZtL0tjb25maWcKaW5kZXggZTA1MWNhZC4uM2UyNjBiNyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9rdm0vS2NvbmZpZwpAQCAtNCw2ICs0LDkgQEAKIGNvbmZpZyBIQVZFX0tWTQogICAgICAgIGJvb2wKIAorY29uZmlnIEhBVkVfS1ZNX0lSUUNISVAKKyAgICAgICBib29sCisKIG1lbnVjb25maWcgVklSVFVBTElaQVRJT04KIAlib29sICJWaXJ0dWFsaXphdGlvbiIKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMgYi9hcmNoL3MzOTAva3ZtL2ludGVyY2VwdC5jCmluZGV4IDYxMjM2MTAuLjlkMTk4MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vaW50ZXJjZXB0LmMKKysrIGIvYXJjaC9zMzkwL2t2bS9pbnRlcmNlcHQuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiBzdGF0aWMgaW50ZXJjZXB0X2hhbmRsZXJfdCBpbnN0cnVjdGlvbl9oYW5kbGVyc1syNTZdID0gewogCVsweDgzXSA9IGt2bV9zMzkwX2hhbmRsZV9kaWFnLAogCVsweGFlXSA9IGt2bV9zMzkwX2hhbmRsZV9zaWdwLAotCVsweGIyXSA9IGt2bV9zMzkwX2hhbmRsZV9wcml2LAorCVsweGIyXSA9IGt2bV9zMzkwX2hhbmRsZV9iMiwKIAlbMHhiN10gPSBoYW5kbGVfbGN0bCwKIAlbMHhlYl0gPSBoYW5kbGVfbGN0bGcsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYyBiL2FyY2gvczM5MC9rdm0vaW50ZXJydXB0LmMKaW5kZXggZjRmZTI4YS4uMDE4OTM1NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9pbnRlcnJ1cHQuYworKysgYi9hcmNoL3MzOTAva3ZtL2ludGVycnVwdC5jCkBAIC01NTUsOSArNTU1LDE0IEBACiAJCVZDUFVfRVZFTlQodmNwdSwgMywgImluamVjdDogcHJvZ3JhbSBjaGVjayAlZCAoZnJvbSB1c2VyKSIsCiAJCQkgICBzMzkwaW50LT5wYXJtKTsKIAkJYnJlYWs7CisJY2FzZSBLVk1fUzM5MF9TSUdQX1NFVF9QUkVGSVg6CisJCWludGktPnByZWZpeC5hZGRyZXNzID0gczM5MGludC0+cGFybTsKKwkJaW50aS0+dHlwZSA9IHMzOTBpbnQtPnR5cGU7CisJCVZDUFVfRVZFTlQodmNwdSwgMywgImluamVjdDogc2V0IHByZWZpeCB0byAleCAoZnJvbSB1c2VyKSIsCisJCQkgICBzMzkwaW50LT5wYXJtKTsKKwkJYnJlYWs7CiAJY2FzZSBLVk1fUzM5MF9TSUdQX1NUT1A6CiAJY2FzZSBLVk1fUzM5MF9SRVNUQVJUOgotCWNhc2UgS1ZNX1MzOTBfU0lHUF9TRVRfUFJFRklYOgogCWNhc2UgS1ZNX1MzOTBfSU5UX0VNRVJHRU5DWToKIAkJVkNQVV9FVkVOVCh2Y3B1LCAzLCAiaW5qZWN0OiB0eXBlICV4IiwgczM5MGludC0+dHlwZSk7CiAJCWludGktPnR5cGUgPSBzMzkwaW50LT50eXBlOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCmluZGV4IDBkMzM4OTMuLmY0ZDU2ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYworKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLQorI2luY2x1ZGUgPGFzbS9ubWkuaD4KICNpbmNsdWRlICJrdm0tczM5MC5oIgogI2luY2x1ZGUgImdhY2Nlc3MuaCIKIApAQCAtMjg2LDcgKzI4Niw3IEBACiAJc2V0dXBfdGltZXIoJnZjcHUtPmFyY2guY2tjX3RpbWVyLCBrdm1fczM5MF9pZGxlX3dha2V1cCwKIAkJICh1bnNpZ25lZCBsb25nKSB2Y3B1KTsKIAlnZXRfY3B1X2lkKCZ2Y3B1LT5hcmNoLmNwdV9pZCk7Ci0JdmNwdS0+YXJjaC5jcHVfaWQudmVyc2lvbiA9IDB4ZmU7CisJdmNwdS0+YXJjaC5jcHVfaWQudmVyc2lvbiA9IDB4ZmY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQyMiw4ICs0MjIsOCBAQAogCXJldHVybiAtRUlOVkFMOyAvKiBub3QgaW1wbGVtZW50ZWQgeWV0ICovCiB9CiAKLWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICAgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKQoraW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKQogewogCXJldHVybiAtRUlOVkFMOyAvKiBub3QgaW1wbGVtZW50ZWQgeWV0ICovCiB9CkBAIC00NDAsOCArNDQwLDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsgLyogbm90IGltcGxlbWVudGVkIHlldCAqLwogfQogCi1leHRlcm4gdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOwotCiBzdGF0aWMgdm9pZCBfX3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAltZW1jcHkoJnZjcHUtPmFyY2guc2llX2Jsb2NrLT5nZzE0LCAmdmNwdS0+YXJjaC5ndWVzdF9ncHJzWzE0XSwgMTYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCmluZGV4IDM4OTNjZjEuLjAwYmJlNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAorKysgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKQEAgLTUwLDcgKzUwLDcgQEAKIGludCBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgY29kZSk7CiAKIC8qIGltcGxlbWVudGVkIGluIHByaXYuYyAqLwotaW50IGt2bV9zMzkwX2hhbmRsZV9wcml2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitpbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIC8qIGltcGxlbWVudGVkIGluIHNpZ3AuYyAqLwogaW50IGt2bV9zMzkwX2hhbmRsZV9zaWdwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL3ByaXYuYyBiL2FyY2gvczM5MC9rdm0vcHJpdi5jCmluZGV4IDM2MDVkZjQ1Li40Yjg4ODM0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3ByaXYuYworKysgYi9hcmNoL3MzOTAva3ZtL3ByaXYuYwpAQCAtMzA0LDEyICszMDQsMjQgQEAKIAlbMHhiMV0gPSBoYW5kbGVfc3RmbCwKIH07CiAKLWludCBrdm1fczM5MF9oYW5kbGVfcHJpdihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitpbnQga3ZtX3MzOTBfaGFuZGxlX2IyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpbnRlcmNlcHRfaGFuZGxlcl90IGhhbmRsZXI7CiAKKwkvKgorCSAqIGEgbG90IG9mIEIyIGluc3RydWN0aW9ucyBhcmUgcHJpdmlsZWRnZWQuIFdlIGZpcnN0IGNoZWNrIGZvcgorCSAqIHRoZSBwcml2aWxlZGdlcyBvbmVzLCB0aGF0IHdlIGNhbiBoYW5kbGUgaW4gdGhlIGtlcm5lbC4gSWYgdGhlCisJICoga2VybmVsIGNhbiBoYW5kbGUgdGhpcyBpbnN0cnVjdGlvbiwgd2UgY2hlY2sgZm9yIHRoZSBwcm9ibGVtCisJICogc3RhdGUgYml0IGFuZCAoYSkgaGFuZGxlIHRoZSBpbnN0cnVjdGlvbiBvciAoYikgc2VuZCBhIGNvZGUgMgorCSAqIHByb2dyYW0gY2hlY2suCisJICogQW55dGhpbmcgZWxzZSBnb2VzIHRvIHVzZXJzcGFjZS4qLwogCWhhbmRsZXIgPSBwcml2X2hhbmRsZXJzW3ZjcHUtPmFyY2guc2llX2Jsb2NrLT5pcGEgJiAweDAwZmZdOwotCWlmIChoYW5kbGVyKQotCQlyZXR1cm4gaGFuZGxlcih2Y3B1KTsKKwlpZiAoaGFuZGxlcikgeworCQlpZiAodmNwdS0+YXJjaC5zaWVfYmxvY2stPmdwc3cubWFzayAmIFBTV19NQVNLX1BTVEFURSkKKwkJCXJldHVybiBrdm1fczM5MF9pbmplY3RfcHJvZ3JhbV9pbnQodmNwdSwKKwkJCQkJCSAgIFBHTV9QUklWSUxFR0VEX09QRVJBVElPTik7CisJCWVsc2UKKwkJCXJldHVybiBoYW5kbGVyKHZjcHUpOworCX0KIAlyZXR1cm4gLUVOT1RTVVBQOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9zaWdwLmMgYi9hcmNoL3MzOTAva3ZtL3NpZ3AuYwppbmRleCAyYTAxYjllLi5mMjdkYmVkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL3NpZ3AuYworKysgYi9hcmNoL3MzOTAva3ZtL3NpZ3AuYwpAQCAtMTUzLDggKzE1Myw2IEBACiAKIAlzd2l0Y2ggKHBhcmFtZXRlciAmIDB4ZmYpIHsKIAljYXNlIDA6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImt2bTogcmVxdWVzdCB0byBzd2l0Y2ggdG8gRVNBLzM5MCBtb2RlIgotCQkJCQkJCSIgbm90IHN1cHBvcnRlZCIpOwogCQlyYyA9IDM7IC8qIG5vdCBvcGVyYXRpb25hbCAqLwogCQlicmVhazsKIAljYXNlIDE6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL2RlbGF5LmMgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKaW5kZXggNmNjYjlmYS4uM2Y1ZjY4MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi9kZWxheS5jCisrKyBiL2FyY2gvczM5MC9saWIvZGVsYXkuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCkBAIC05Miw2ICs5Myw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CitFWFBPUlRfU1lNQk9MKF9fdWRlbGF5KTsKIAogLyoKICAqIFNpbXBsZSB1ZGVsYXkgdmFyaWFudC4gVG8gYmUgdXNlZCBvbiBzdGFydHVwIGFuZCByZWJvb3QKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvc3RyaW5nLmMgYi9hcmNoL3MzOTAvbGliL3N0cmluZy5jCmluZGV4IGFlNWNmNWQuLjQxNDNiN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvc3RyaW5nLmMKKysrIGIvYXJjaC9zMzkwL2xpYi9zdHJpbmcuYwpAQCAtNDQsNyArNDQsMTEgQEAKICAqLwogc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKQogeworI2lmIF9fR05VQ19fIDwgNAogCXJldHVybiBfX3N0cmVuZChzKSAtIHM7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RybGVuKHMpOworI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7CiAKQEAgLTcwLDYgKzc0LDcgQEAKICAqLwogY2hhciAqc3RyY3B5KGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYykKIHsKKyNpZiBfX0dOVUNfXyA8IDQKIAlyZWdpc3RlciBpbnQgcjAgYXNtKCIwIikgPSAwOwogCWNoYXIgKnJldCA9IGRlc3Q7CiAKQEAgLTc4LDYgKzgzLDkgQEAKIAkJICAgICAgOiAiKyZhIiAoZGVzdCksICIrJmEiIChzcmMpIDogImQiIChyMCkKIAkJICAgICAgOiAiY2MiLCAibWVtb3J5IiApOwogCXJldHVybiByZXQ7CisjZWxzZQorCXJldHVybiBfX2J1aWx0aW5fc3RyY3B5KGRlc3QsIHNyYyk7CisjZW5kaWYKIH0KIEVYUE9SVF9TWU1CT0woc3RyY3B5KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA0ZDUzNzIwLi44MzNlODM2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYworKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtMjAwLDI5ICsyMDAsNiBAQAogCWRvX25vX2NvbnRleHQocmVncywgZXJyb3JfY29kZSwgMCk7CiB9CiAKLS8qCi0gKiBXZSByYW4gb3V0IG9mIG1lbW9yeSwgb3Igc29tZSBvdGhlciB0aGluZyBoYXBwZW5lZCB0byB1cyB0aGF0IG1hZGUKLSAqIHVzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHBhZ2UgZmF1bHQgZ3JhY2VmdWxseS4KLSAqLwotc3RhdGljIGludCBkb19vdXRfb2ZfbWVtb3J5KHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07Ci0KLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmIChpc19nbG9iYWxfaW5pdCh0c2spKSB7Ci0JCXlpZWxkKCk7Ci0JCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXByaW50aygiVk06IGtpbGxpbmcgcHJvY2VzcyAlc1xuIiwgdHNrLT5jb21tKTsKLQlpZiAocmVncy0+cHN3Lm1hc2sgJiBQU1dfTUFTS19QU1RBVEUpCi0JCWRvX2dyb3VwX2V4aXQoU0lHS0lMTCk7Ci0JZG9fbm9fY29udGV4dChyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgZG9fc2lnYnVzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKQEAgLTM2Nyw3ICszNDQsNiBAQAogCQkJZ290byBiYWRfYXJlYTsKIAl9CiAKLXN1cnZpdmU6CiAJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQogCQlhZGRyZXNzICY9IEhQQUdFX01BU0s7CiAJLyoKQEAgLTM3OCw4ICszNTQsOCBAQAogCWZhdWx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGFkZHJlc3MsIHdyaXRlKTsKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKSB7Ci0JCQlpZiAoZG9fb3V0X29mX21lbW9yeShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKSkKLQkJCQlnb3RvIHN1cnZpdmU7CisJCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQkJcGFnZWZhdWx0X291dF9vZl9tZW1vcnkoKTsKIAkJCXJldHVybjsKIAkJfSBlbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykgewogCQkJZG9fc2lnYnVzKHJlZ3MsIGVycm9yX2NvZGUsIGFkZHJlc3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggZjAyNThjYS4uYzYzNGRmYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC00MCw3ICs0MCw5IEBACiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOwogCiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFBBR0VfU0laRSkpKTsKKwogY2hhciAgZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRV0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oUEFHRV9TSVpFKSkpOworRVhQT1JUX1NZTUJPTChlbXB0eV96ZXJvX3BhZ2UpOwogCiAvKgogICogcGFnaW5nX2luaXQoKSBzZXRzIHVwIHRoZSBwYWdlIHRhYmxlcwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL3BndGFibGUuYyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKaW5kZXggNmI2ZGRjNC4uYmU2YzFjZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BndGFibGUuYworKysgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCkBAIC0yNTgsNiArMjU4LDEwIEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqb2xkX21tOwogCisJLyogRG8gd2UgaGF2ZSBzd2l0Y2hlZCBhbW9kZT8gSWYgbm8sIHdlIGNhbm5vdCBkbyBzaWUgKi8KKwlpZiAoIXN3aXRjaF9hbW9kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBEbyB3ZSBoYXZlIHBnc3Rlcz8gaWYgeWVzLCB3ZSBhcmUgZG9uZSAqLwogCWlmICh0c2stPm1tLT5jb250ZXh0Lmhhc19wZ3N0ZSkKIAkJcmV0dXJuIDA7CkBAIC0yOTIsNyArMjk2LDcgQEAKIAl0c2stPm1tID0gdHNrLT5hY3RpdmVfbW0gPSBtbTsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAl1cGRhdGVfbW0obW0sIHRzayk7Ci0JY3B1X3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG1tLT5jcHVfdm1fbWFzayk7CisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhtbSkpOwogCXByZWVtcHRfZW5hYmxlKCk7CiAJdGFza191bmxvY2sodHNrKTsKIAltbXB1dChvbGRfbW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IGViYWJlNTEuLjhkNTBkNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTEwNyw2ICsxMDcsOSBAQAogY29uZmlnIFNZU19TVVBQT1JUU19QQ0kKIAlib29sCiAKK2NvbmZpZyBTWVNfU1VQUE9SVFNfQ01UCisJYm9vbAorCiBjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUCiAJZGVmX2Jvb2wgeQogCkBAIC0xNzYsNiArMTc5LDEwIEBACiBjb25maWcgQ1BVX1NIWDMKIAlib29sCiAKK2NvbmZpZyBBUkNIX1NITU9CSUxFCisJYm9vbAorCXNlbGVjdCBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKKwogY2hvaWNlCiAJcHJvbXB0ICJQcm9jZXNzb3Igc3ViLXR5cGUgc2VsZWN0aW9uIgogCkBAIC0xODgsNiArMTk1LDcgQEAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDc2MTkKIAlib29sICJTdXBwb3J0IFNINzYxOSBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDIKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiAjIFNILTJBIFByb2Nlc3NvciBTdXBwb3J0CiAKQEAgLTIwMCwxNSArMjA4LDE4IEBACiAJYm9vbCAiU3VwcG9ydCBTSDcyMDMgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0gyQQogCXNlbGVjdCBDUFVfSEFTX0ZQVQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDcyMDYKIAlib29sICJTdXBwb3J0IFNINzIwNiBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDJBCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzI2MwogCWJvb2wgIlN1cHBvcnQgU0g3MjYzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NIMkEKIAlzZWxlY3QgQ1BVX0hBU19GUFUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiBjb25maWcgQ1BVX1NVQlRZUEVfTVhHCiAJYm9vbCAiU3VwcG9ydCBNWC1HIHByb2Nlc3NvciIKQEAgLTMyMyw3ICszMzQsOSBAQAogCWJvb2wgIlN1cHBvcnQgU0g3NzIzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEEKIAlzZWxlY3QgQ1BVX1NIWDIKKwlzZWxlY3QgQVJDSF9TSE1PQklMRQogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCWhlbHAKIAkgIFNlbGVjdCBTSDc3MjMgaWYgeW91IGhhdmUgYW4gU0gtTW9iaWxlUjIgQ1BVLgogCkBAIC0zNDgsNiArMzYxLDE0IEBACiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQogCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3Nzg2CisJYm9vbCAiU3VwcG9ydCBTSDc3ODYgcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0g0QQorCXNlbGVjdCBDUFVfU0hYMworCXNlbGVjdCBDUFVfSEFTX1BURUFFWAorCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX05VTUEKKwogY29uZmlnIENQVV9TVUJUWVBFX1NIWDMKIAlib29sICJTdXBwb3J0IFNILVgzIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEEKQEAgLTM2MiwyMCArMzgzLDI2IEBACiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3MzQzCiAJYm9vbCAiU3VwcG9ydCBTSDczNDMgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0QUxfRFNQCisJc2VsZWN0IEFSQ0hfU0hNT0JJTEUKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0NNVAogCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzIyCiAJYm9vbCAiU3VwcG9ydCBTSDc3MjIgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0QUxfRFNQCiAJc2VsZWN0IENQVV9TSFgyCisJc2VsZWN0IEFSQ0hfU0hNT0JJTEUKIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAJc2VsZWN0IFNZU19TVVBQT1JUU19OVU1BCisJc2VsZWN0IFNZU19TVVBQT1JUU19DTVQKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzM2NgogCWJvb2wgIlN1cHBvcnQgU0g3MzY2IHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEFMX0RTUAogCXNlbGVjdCBDUFVfU0hYMgorCXNlbGVjdCBBUkNIX1NITU9CSUxFCiAJc2VsZWN0IEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQ01UCiAKICMgU0gtNSBQcm9jZXNzb3IgU3VwcG9ydAogCkBAIC0zOTgsMjUgKzQyNSwzNCBAQAogbWVudSAiVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24iCiAKIGNvbmZpZyBTSF9UTVUKLQlkZWZfYm9vbCB5Ci0JcHJvbXB0ICJUTVUgdGltZXIgc3VwcG9ydCIKKwlib29sICJUTVUgdGltZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENQVV9TSDMgfHwgQ1BVX1NINAorCWRlZmF1bHQgeQogCXNlbGVjdCBHRU5FUklDX1RJTUUKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSBUTVUgYXMgdGhlIHN5c3RlbSB0aW1lci4KIAogY29uZmlnIFNIX0NNVAotCWRlZl9ib29sIHkKLQlwcm9tcHQgIkNNVCB0aW1lciBzdXBwb3J0IgotCWRlcGVuZHMgb24gQ1BVX1NIMiAmJiAhQ1BVX1NVQlRZUEVfTVhHCisJYm9vbCAiQ01UIHRpbWVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTWVNfU1VQUE9SVFNfQ01UICYmIENQVV9TSDIKKwlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIHVzZSBvZiB0aGUgQ01UIGFzIHRoZSBzeXN0ZW0gdGltZXIuCiAKKyMKKyMgU3VwcG9ydCBmb3IgdGhlIG5ldy1zdHlsZSBDTVQgZHJpdmVyLiBUaGlzIHdpbGwgcmVwbGFjZSBTSF9DTVQKKyMgb25jZSBpdHMgb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBtZXJnZWQuCisjCitjb25maWcgU0hfVElNRVJfQ01UCisJYm9vbCAiQ01UIGNsb2NrZXZlbnRzIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNZU19TVVBQT1JUU19DTVQgJiYgIVNIX0NNVAorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisKIGNvbmZpZyBTSF9NVFUyCi0JZGVmX2Jvb2wgbgotCXByb21wdCAiTVRVMiB0aW1lciBzdXBwb3J0IgorCWJvb2wgIk1UVTIgdGltZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIENQVV9TSDJBCisJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIE1UVTIgYXMgdGhlIHN5c3RlbSB0aW1lci4KIApAQCAtNDI2LDcgKzQ2Miw4IEBACiAJCQlDUFVfU1VCVFlQRV9TSDc3NjMKIAlkZWZhdWx0ICI4NiIgaWYgQ1BVX1NVQlRZUEVfU0g3NjE5CiAJZGVmYXVsdCAiMTQwIiBpZiBDUFVfU1VCVFlQRV9TSDcyMDYKLQlkZWZhdWx0ICIxNDIiIGlmIENQVV9TVUJUWVBFX1NINzIwMworCWRlZmF1bHQgIjE0MiIgaWYgQ1BVX1NVQlRZUEVfU0g3MjAzICYmIFNIX0NNVAorCWRlZmF1bHQgIjE1MyIgaWYgQ1BVX1NVQlRZUEVfU0g3MjAzICYmIFNIX01UVTIKIAlkZWZhdWx0ICIyMzgiIGlmIENQVV9TVUJUWVBFX01YRwogCWRlZmF1bHQgIjE2IgogCkBAIC00MzgsNyArNDc1LDggQEAKIAlkZWZhdWx0ICIzMzMzMzMzMyIgaWYgQ1BVX1NVQlRZUEVfU0g3NzcwIHx8IENQVV9TVUJUWVBFX1NINzcyMyB8fCBcCiAJCQkgICAgICBDUFVfU1VCVFlQRV9TSDc3NjAgfHwgQ1BVX1NVQlRZUEVfU0g3NzA1IHx8IFwKIAkJCSAgICAgIENQVV9TVUJUWVBFX1NINzIwMyB8fCBDUFVfU1VCVFlQRV9TSDcyMDYgfHwgXAotCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjYzIHx8IENQVV9TVUJUWVBFX01YRworCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3MjYzIHx8IENQVV9TVUJUWVBFX01YRyAgICB8fCBcCisJCQkgICAgICBDUFVfU1VCVFlQRV9TSDc3ODYKIAlkZWZhdWx0ICI2MDAwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g3NzUxIHx8IENQVV9TVUJUWVBFX1NINzc1MVIKIAlkZWZhdWx0ICI2NjAwMDAwMCIgaWYgQ1BVX1NVQlRZUEVfU0g0XzIwMgogCWRlZmF1bHQgIjUwMDAwMDAwIgpAQCAtNTIxLDYgKzU1OSwxMyBAQAogCiAJICBGb3IgbW9yZSBkZXRhaWxzIHNlZSBEb2N1bWVudGF0aW9uL2tkdW1wL2tkdW1wLnR4dAogCitjb25maWcgS0VYRUNfSlVNUAorCWJvb2wgImtleGVjIGp1bXAgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBTVVBFUkgzMiAmJiBLRVhFQyAmJiBISUJFUk5BVElPTiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBKdW1wIGJldHdlZW4gb3JpZ2luYWwga2VybmVsIGFuZCBrZXhlY2VkIGtlcm5lbCBhbmQgaW52b2tlCisJICBjb2RlIHZpYSBLRVhFQworCiBjb25maWcgU0VDQ09NUAogCWJvb2wgIkVuYWJsZSBzZWNjb21wIHRvIHNhZmVseSBjb21wdXRlIHVudHJ1c3RlZCBieXRlY29kZSIKIAlkZXBlbmRzIG9uIFBST0NfRlMKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZy5jcHUgYi9hcmNoL3NoL0tjb25maWcuY3B1CmluZGV4IDBlMjdmZTMuLmM3ZDcwNDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZy5jcHUKKysrIGIvYXJjaC9zaC9LY29uZmlnLmNwdQpAQCAtMTA0LDYgKzEwNCw5IEBACiBjb25maWcgQ1BVX0hBU19QVEVBCiAJYm9vbAogCitjb25maWcgQ1BVX0hBU19QVEVBRVgKKwlib29sCisKIGNvbmZpZyBDUFVfSEFTX0RTUAogCWJvb2wKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9NYWtlZmlsZSBiL2FyY2gvc2gvTWFrZWZpbGUKaW5kZXggNDA2N2IwZC4uYmVjZTFmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL01ha2VmaWxlCkBAIC04MCw2ICs4MCw3IEBACiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU1VQRVJIMzIpCQkJOj0gekltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfU0g3Nzg1TENSKQkJOj0gdUltYWdlCiBkZWZhdWx0aW1hZ2UtJChDT05GSUdfU0hfUlNLKQkJCTo9IHVJbWFnZQorZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIX1VSUVVFTEwpCQk6PSB1SW1hZ2UKIGRlZmF1bHRpbWFnZS0kKENPTkZJR19TSF83MjA2X1NPTFVUSU9OX0VOR0lORSkJOj0gdm1saW51eAogZGVmYXVsdGltYWdlLSQoQ09ORklHX1NIXzc2MTlfU09MVVRJT05fRU5HSU5FKQk6PSB2bWxpbnV4CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcgYi9hcmNoL3NoL2JvYXJkcy9LY29uZmlnCmluZGV4IDg2MTkxNDcuLmRjYzFhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL0tjb25maWcKKysrIGIvYXJjaC9zaC9ib2FyZHMvS2NvbmZpZwpAQCAtMTU1LDE3ICsxNTUsMjIgQEAKIAogY29uZmlnIFNIX1NINzc4NUxDUl8yOUJJVF9QSFlTTUFQUwogCWJvb2wgIlNINzc4NUxDUiAyOWJpdCBwaHlzbWFwcyIKLQlkZXBlbmRzIG9uIFNIX1NINzc4NUxDUgorCWRlcGVuZHMgb24gU0hfU0g3Nzg1TENSICYmIDI5QklUCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBib2FyZCBoYXMgMiBwaHlzaWNhbCBtZW1vcnkgbWFwcy4gSXQgY2FuIGJlIGNoYW5nZWQgd2l0aAogCSAgRElQIHN3aXRjaChTMi01KS4gSWYgeW91IHNldCB0aGUgRElQIHN3aXRjaCBmb3IgUzItNSA9IE9OLAogCSAgeW91IGNhbiBhY2Nlc3MgYWxsIG9uLWJvYXJkIGRldmljZSBpbiAyOWJpdCBhZGRyZXNzIG1vZGUuCiAKK2NvbmZpZyBTSF9VUlFVRUxMCisJYm9vbCAiVXJxdWVsbCIKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc4NgorCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCiBjb25maWcgU0hfTUlHT1IKIAlib29sICJNaWdvLVIiCiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MjIKLQlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscAogCSAgU2VsZWN0IE1pZ28tUiBpZiBjb25maWd1cmluZyBmb3IgdGhlIFNINzcyMiBNaWdvLVIgcGxhdGZvcm0KICAgICAgICAgICBieSBSZW5lc2FzIFN5c3RlbSBTb2x1dGlvbnMgQXNpYSBQdGUuIEx0ZC4KQEAgLTE3Myw3ICsxNzgsNyBAQAogY29uZmlnIFNIX0FQMzI1UlhBCiAJYm9vbCAiQVAtMzI1UlhBIgogCWRlcGVuZHMgb24gQ1BVX1NVQlRZUEVfU0g3NzIzCi0Jc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgogCWhlbHAKIAkgIFJlbmVzYXMgIkFQLTMyNVJYQSIgc3VwcG9ydC4KIAkgIENvbXBhdGlibGUgd2l0aCBBTEdPIFNZU1RFTSBDTy4sTFRELiAiQVAtMzIwQSIKQEAgLTE4NSw2ICsxOTAsMTMgQEAKIAkgIFNlbGVjdCBTSDc3NjNSRFAgaWYgY29uZmlndXJpbmcgZm9yIGEgUmVuZXNhcyBTSDc3NjMKIAkgIGV2YWx1YXRpb24gYm9hcmQuCiAKK2NvbmZpZyBTSF9FU1BUCisJYm9vbCAiRVNQVCIKKwlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzc2MworCWhlbHAKKwkgIFNlbGVjdCBFU1BUIGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgU0g3NzYzCisJICB3aXRoIGdpZ2FiaXQgZXRoZXIgZXZhbHVhdGlvbiBib2FyZC4KKwogY29uZmlnIFNIX0VET1NLNzcwNQogCWJvb2wgIkVET1NLNzcwNSIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcwNQpAQCAtMjQwLDcgKzI1Miw3IEBACiBjb25maWcgU0hfTUFHSUNfUEFORUxfUjIKIAlib29sICJNYWdpYyBQYW5lbCBSMiIKIAlkZXBlbmRzIG9uIENQVV9TVUJUWVBFX1NINzcyMAotCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCiAJICBTZWxlY3QgTWFnaWMgUGFuZWwgUjIgaWYgY29uZmlndXJpbmcgZm9yIE1hZ2ljIFBhbmVsIFIyLgogCkBAIC0yNDksNiArMjYxLDEzIEBACiAJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDVfMTAxIHx8IENQVV9TVUJUWVBFX1NINV8xMDMKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1BDSQogCitjb25maWcgU0hfUE9MQVJJUworCWJvb2wgIlNNU0MgUG9sYXJpcyIKKwlzZWxlY3QgQ1BVX0hBU19JUFJfSVJRCisJZGVwZW5kcyBvbiBDUFVfU1VCVFlQRV9TSDc3MDkKKwloZWxwCisJICBTZWxlY3QgaWYgY29uZmlndXJpbmcgZm9yIGFuIFNNU0MgUG9sYXJpcyBkZXZlbG9wbWVudCBib2FyZAorCiBlbmRtZW51CiAKIHNvdXJjZSAiYXJjaC9zaC9ib2FyZHMvbWFjaC1yMmQvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKaW5kZXggMjY5YWUyYi4uN2JhYTIxMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib2FyZHMvTWFrZWZpbGUKQEAgLTQsNSArNCw4IEBACiBvYmotJChDT05GSUdfU0hfQVAzMjVSWEEpCSs9IGJvYXJkLWFwMzI1cnhhLm8KIG9iai0kKENPTkZJR19TSF9NQUdJQ19QQU5FTF9SMikJKz0gYm9hcmQtbWFnaWNwYW5lbHIyLm8KIG9iai0kKENPTkZJR19TSF9TSDc3ODVMQ1IpCSs9IGJvYXJkLXNoNzc4NWxjci5vCitvYmotJChDT05GSUdfU0hfVVJRVUVMTCkJKz0gYm9hcmQtdXJxdWVsbC5vCiBvYmotJChDT05GSUdfU0hfU0hNSU4pCQkrPSBib2FyZC1zaG1pbi5vCiBvYmotJChDT05GSUdfU0hfRURPU0s3NzYwKQkrPSBib2FyZC1lZG9zazc3NjAubworb2JqLSQoQ09ORklHX1NIX0VTUFQpCQkrPSBib2FyZC1lc3B0Lm8KK29iai0kKENPTkZJR19TSF9QT0xBUklTKQkrPSBib2FyZC1wb2xhcmlzLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCmluZGV4IDE1YjZkNDUuLmE2NGUzODggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwpAQCAtMTY2LDYgKzE2NiwxNiBAQAogCWN0cmxfb3V0dygweDEwMCwgRlBHQV9CS0xSRUcpOwogfQogCitzdGF0aWMgdm9pZCBhcDMyMF93dmdhX3Bvd2VyX29mZih2b2lkICpib2FyZF9kYXRhKQoreworCS8qIGJhY2tsaWdodCAqLworCWN0cmxfb3V0dygwLCBGUEdBX0JLTFJFRyk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVFMzLCAxKTsKKworCS8qIEFTRCBBUC0zMjAvMzI1IExDRCBPRkYgKi8KKwljdHJsX291dHcoMCwgRlBHQV9MQ0RSRUcpOworfQorCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkY19pbmZvID0gewogCS5jbG9ja19zb3VyY2UgPSBMQ0RDX0NMS19FWFRFUk5BTCwKIAkuY2hbMF0gPSB7CkBAIC0xOTEsNiArMjAxLDcgQEAKIAkJfSwKIAkJLmJvYXJkX2NmZyA9IHsKIAkJCS5kaXNwbGF5X29uID0gYXAzMjBfd3ZnYV9wb3dlcl9vbiwKKwkJCS5kaXNwbGF5X29mZiA9IGFwMzIwX3d2Z2FfcG93ZXJfb2ZmLAogCQl9LAogCX0KIH07CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1lc3B0LmMgYi9hcmNoL3NoL2JvYXJkcy9ib2FyZC1lc3B0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjZTVlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWVzcHQuYwpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIERhdGEgVGVjaG5vbG9neSBJbmMuIEVTUFQtR0lHQSBib2FyZCBzdXBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBOb2J1aGlybyBJd2FtYXRzdSA8aXdhbWF0c3Uubm9idWhpcm9AcmVuZXNhcy5jb20+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+cmVnc1sxNV0pCiAKICNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSF9QUk9DRVNTT1JfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMTI5MTJhYi4uODFjNjU2OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xMjIsMTQgKzEyMiwxMiBAQAogI2lmZGVmIENPTkZJR19TSF9EU1AKICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spIFwKIAkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSBcCi0JCSAtIHNpemVvZihzdHJ1Y3QgcHRfZHNwcmVncykgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKwkJIC0gc2l6ZW9mKHN0cnVjdCBwdF9kc3ByZWdzKSkgLSAxKQogI2RlZmluZSB0YXNrX3B0X2RzcHJlZ3ModGFzaykgXAotCSgoc3RydWN0IHB0X2RzcHJlZ3MgKikgKHRhc2tfc3RhY2tfcGFnZSh0YXNrKSArIFRIUkVBRF9TSVpFIFwKLQkJIC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSAtIDEpCisJKChzdHJ1Y3QgcHRfZHNwcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUpIC0gMSkKICNlbHNlCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSBcCi0JKChzdHJ1Y3QgcHRfcmVncyAqKSAodGFza19zdGFja19wYWdlKHRhc2spICsgVEhSRUFEX1NJWkUgXAotCQkgLSBzaXplb2YodW5zaWduZWQgbG9uZykpIC0gMSkKKwkoKHN0cnVjdCBwdF9yZWdzICopICh0YXNrX3N0YWNrX3BhZ2UodGFzaykgKyBUSFJFQURfU0laRSkgLSAxKQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCmluZGV4IDhmOGY0YWQuLjAxYTQwNzZhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgogCitleHRlcm4gdm9pZCBfX25vc2F2ZV9iZWdpbiwgX19ub3NhdmVfZW5kOwogZXh0ZXJuIGxvbmcgX19tYWNodmVjX3N0YXJ0LCBfX21hY2h2ZWNfZW5kOwogZXh0ZXJuIGNoYXIgX191bmNhY2hlZF9zdGFydCwgX191bmNhY2hlZF9lbmQ7CiBleHRlcm4gY2hhciBfZWJzc1tdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zb2NrZXQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc29ja2V0LmgKaW5kZXggNmQ0YmY2NS4uMzQ1NjUzYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NvY2tldC5oCkBAIC01NCw0ICs1NCw3IEBACiAKICNkZWZpbmUgU09fTUFSSwkJCTM2CiAKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HCQkzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAjZW5kaWYgLyogX19BU01fU0hfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3VzcGVuZC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zdXNwZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiOTk1MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3VzcGVuZC5oCkBAIC0wLDAgKzEsMjIgQEAKKyNpZm5kZWYgX0FTTV9TSF9TVVNQRU5EX0gKKyNkZWZpbmUgX0FTTV9TSF9TVVNQRU5EX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KK3N0YXRpYyBpbmxpbmUgaW50IGFyY2hfcHJlcGFyZV9zdXNwZW5kKHZvaWQpIHsgcmV0dXJuIDA7IH0KKworI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworc3RydWN0IHN3c3VzcF9hcmNoX3JlZ3MgeworCXN0cnVjdCBwdF9yZWdzIHVzZXJfcmVnczsKKwl1bnNpZ25lZCBsb25nIGJhbmsxX3JlZ3NbOF07Cit9OworI2VuZGlmCisKKy8qIGZsYWdzIHBhc3NlZCB0byBhc3NlbWJseSBzdXNwZW5kIGNvZGUgKi8KKyNkZWZpbmUgU1VTUF9TSF9TTEVFUAkJKDEgPDwgMCkgLyogUmVndWxhciBzbGVlcCBtb2RlICovCisjZGVmaW5lIFNVU1BfU0hfU1RBTkRCWQkJKDEgPDwgMSkgLyogU0gtTW9iaWxlIFNvZnR3YXJlIHN0YW5kYnkgbW9kZSAqLworI2RlZmluZSBTVVNQX1NIX1JTVEFOREJZCSgxIDw8IDIpIC8qIFNILU1vYmlsZSBSLXN0YW5kYnkgbW9kZSAqLworI2RlZmluZSBTVVNQX1NIX1VTVEFOREJZCSgxIDw8IDMpIC8qIFNILU1vYmlsZSBVLXN0YW5kYnkgbW9kZSAqLworI2RlZmluZSBTVVNQX1NIX1NGCQkoMSA8PCA0KSAvKiBFbmFibGUgc2VsZi1yZWZyZXNoICovCisKKyNlbmRpZiAvKiBfQVNNX1NIX1NVU1BFTkRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS90aW1lci5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aW1lci5oCmluZGV4IGE3Y2EzYTEuLjRjM2I2NmUzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RpbWVyLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90aW1lci5oCkBAIC05LDcgKzksNiBAQAogCWludCAoKmluaXQpKHZvaWQpOwogCWludCAoKnN0YXJ0KSh2b2lkKTsKIAlpbnQgKCpzdG9wKSh2b2lkKTsKLQljeWNsZV90ICgqcmVhZCkodm9pZCk7CiAjaWZuZGVmIENPTkZJR19HRU5FUklDX1RJTUUKIAl1bnNpZ25lZCBsb25nICgqZ2V0X29mZnNldCkodm9pZCk7CiAjZW5kaWYKQEAgLTM5LDYgKzM4LDcgQEAKIAogLyogYXJjaC9zaC9rZXJuZWwvdGltZS5jICovCiB2b2lkIGhhbmRsZV90aW1lcl90aWNrKHZvaWQpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2hfaHB0X2ZyZXF1ZW5jeTsKKworZXh0ZXJuIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9zaDsKIAogI2VuZGlmIC8qIF9fQVNNX1NIX1RJTUVSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IDg4ZmYxYWUuLjljMTZmNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90bGIuaApAQCAtNiwyMiArNiwxMDYgQEAKICNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KIAotI2RlZmluZSB0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKSBcCi0JZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCkKLQotI2RlZmluZSB0bGJfZW5kX3ZtYSh0bGIsIHZtYSkJXAotCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKQotCi0jZGVmaW5lIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGUsIGFkZHJlc3MpCWRvIHsgfSB3aGlsZSAoMCkKKyNpZmRlZiBDT05GSUdfTU1VCisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogLyoKLSAqIEZsdXNoIHdob2xlIFRMQnMgZm9yIE1NCisgKiBUTEIgaGFuZGxpbmcuICBUaGlzIGFsbG93cyB1cyB0byByZW1vdmUgcGFnZXMgZnJvbSB0aGUgcGFnZQorICogdGFibGVzLCBhbmQgZWZmaWNpZW50bHkgaGFuZGxlIHRoZSBUTEIgaXNzdWVzLgogICovCi0jZGVmaW5lIHRsYl9mbHVzaCh0bGIpCQkJCWZsdXNoX3RsYl9tbSgodGxiKS0+bW0pCitzdHJ1Y3QgbW11X2dhdGhlciB7CisJc3RydWN0IG1tX3N0cnVjdAkqbW07CisJdW5zaWduZWQgaW50CQlmdWxsbW07CisJdW5zaWduZWQgbG9uZwkJc3RhcnQsIGVuZDsKK307CiAKLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CitERUNMQVJFX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfdGxiX2dhdGhlcihzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQoreworCXRsYi0+c3RhcnQgPSBUQVNLX1NJWkU7CisJdGxiLT5lbmQgPSAwOworCisJaWYgKHRsYi0+ZnVsbG1tKSB7CisJCXRsYi0+c3RhcnQgPSAwOworCQl0bGItPmVuZCA9IFRBU0tfU0laRTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1tdV9nYXRoZXIgKgordGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBmdWxsX21tX2ZsdXNoKQoreworCXN0cnVjdCBtbXVfZ2F0aGVyICp0bGIgPSAmZ2V0X2NwdV92YXIobW11X2dhdGhlcnMpOworCisJdGxiLT5tbSA9IG1tOworCXRsYi0+ZnVsbG1tID0gZnVsbF9tbV9mbHVzaDsKKworCWluaXRfdGxiX2dhdGhlcih0bGIpOworCisJcmV0dXJuIHRsYjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit0bGJfZmluaXNoX21tdShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpZiAodGxiLT5mdWxsbW0pCisJCWZsdXNoX3RsYl9tbSh0bGItPm1tKTsKKworCS8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLworCWNoZWNrX3BndF9jYWNoZSgpOworCisJcHV0X2NwdV92YXIobW11X2dhdGhlcnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9yZW1vdmVfdGxiX2VudHJ5KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJaWYgKHRsYi0+c3RhcnQgPiBhZGRyZXNzKQorCQl0bGItPnN0YXJ0ID0gYWRkcmVzczsKKwlpZiAodGxiLT5lbmQgPCBhZGRyZXNzICsgUEFHRV9TSVpFKQorCQl0bGItPmVuZCA9IGFkZHJlc3MgKyBQQUdFX1NJWkU7Cit9CisKKy8qCisgKiBJbiB0aGUgY2FzZSBvZiB0bGIgdm1hIGhhbmRsaW5nLCB3ZSBjYW4gb3B0aW1pc2UgdGhlc2UgYXdheSBpbiB0aGUKKyAqIGNhc2Ugd2hlcmUgd2UncmUgZG9pbmcgYSBmdWxsIE1NIGZsdXNoLiAgV2hlbiB3ZSdyZSBkb2luZyBhIG11bm1hcCwKKyAqIHRoZSB2bWFzIGFyZSBhZGp1c3RlZCB0byBvbmx5IGNvdmVyIHRoZSByZWdpb24gdG8gYmUgdG9ybiBkb3duLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3RsYl9zdGFydF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaWYgKCF0bGItPmZ1bGxtbSkKKwkJZmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGxiX2VuZF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJaWYgKCF0bGItPmZ1bGxtbSAmJiB0bGItPmVuZCkgeworCQlmbHVzaF90bGJfcmFuZ2Uodm1hLCB0bGItPnN0YXJ0LCB0bGItPmVuZCk7CisJCWluaXRfdGxiX2dhdGhlcih0bGIpOworCX0KK30KKworI2RlZmluZSB0bGJfcmVtb3ZlX3BhZ2UodGxiLHBhZ2UpCWZyZWVfcGFnZV9hbmRfc3dhcF9jYWNoZShwYWdlKQorI2RlZmluZSBwdGVfZnJlZV90bGIodGxiLCBwdGVwKQkJcHRlX2ZyZWUoKHRsYiktPm1tLCBwdGVwKQorI2RlZmluZSBwbWRfZnJlZV90bGIodGxiLCBwbWRwKQkJcG1kX2ZyZWUoKHRsYiktPm1tLCBwbWRwKQorI2RlZmluZSBwdWRfZnJlZV90bGIodGxiLCBwdWRwKQkJcHVkX2ZyZWUoKHRsYiktPm1tLCBwdWRwKQorCisjZGVmaW5lIHRsYl9taWdyYXRlX2ZpbmlzaChtbSkJCWRvIHsgfSB3aGlsZSAoMCkKKworI2Vsc2UgLyogQ09ORklHX01NVSAqLworCisjZGVmaW5lIHRsYl9zdGFydF92bWEodGxiLCB2bWEpCQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX2VuZF92bWEodGxiLCB2bWEpCQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX190bGJfcmVtb3ZlX3RsYl9lbnRyeSh0bGIsIHB0ZSwgYWRkcmVzcykJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0bGJfZmx1c2godGxiKQkJCQkJZG8geyB9IHdoaWxlICgwKQorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CiAKKyNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19BU01fU0hfVExCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaAppbmRleCA2ODEzYzMyLi4wZWExNWYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCkBAIC0xLDIyICsxLDE3IEBACiAjaWZuZGVmIF9fQVNNX0NQVV9TSDNfRE1BX0gKICNkZWZpbmUgX19BU01fQ1BVX1NIM19ETUFfSAogCi0KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpCi0jZGVmaW5lIFNIX0RNQUNfQkFTRQkweGE0MDEwMDIwCi0jZWxzZQotI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhhNDAwMDAyMAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMikKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweGE0MDEwMDIwCisjZWxzZSAvKiBTSDc3MDUvMDYvMDcvMDkgKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweGE0MDAwMDIwCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQogI2RlZmluZSBETVRFMF9JUlEJNDgKLSNkZWZpbmUgRE1URTFfSVJRCTQ5Ci0jZGVmaW5lIERNVEUyX0lSUQk1MAotI2RlZmluZSBETVRFM19JUlEJNTEKICNkZWZpbmUgRE1URTRfSVJRCTc2Ci0jZGVmaW5lIERNVEU1X0lSUQk3NwotI2VuZGlmCiAKIC8qIERlZmluaXRpb25zIGZvciB0aGUgU3VwZXJIIERNQUMgKi8KICNkZWZpbmUgVE1fQlVSU1QJMHgwMDAwMDAyMApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWQ1MTc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmgKQEAgLTAsMCArMSw5NCBAQAorI2lmbmRlZiBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSAorI2RlZmluZSBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSAorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKSB8fCBcCisJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKSB8fCBcCisJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzMwKQorI2RlZmluZSBETVRFMF9JUlEJNDgKKyNkZWZpbmUgRE1URTRfSVJRCTc2CisjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZFMDA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGRTAwOTAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBcCisJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzY0KQorI2RlZmluZSBETVRFMF9JUlEJMzQKKyNkZWZpbmUgRE1URTRfSVJRCTQ0CisjZGVmaW5lIERNQUUwX0lSUQkzOAorI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkY2MDgwMjAKKyNkZWZpbmUgU0hfRE1BUlNfQkFTRQkweEZGNjA5MDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCisjZGVmaW5lIERNVEUwX0lSUQk0OAkvKiBETUFDMEEqLworI2RlZmluZSBETVRFNF9JUlEJNDAJLyogRE1BQzBCICovCisjZGVmaW5lIERNVEU2X0lSUQk0MgorI2RlZmluZSBETVRFOF9JUlEJNzYJLyogRE1BQzFBICovCisjZGVmaW5lIERNVEU5X0lSUQk3NworI2RlZmluZSBETVRFMTBfSVJRCTcyCS8qIERNQUMxQiAqLworI2RlZmluZSBETVRFMTFfSVJRCTczCisjZGVmaW5lIERNQUUwX0lSUQk3OAkvKiBETUEgRXJyb3IgSVJRKi8KKyNkZWZpbmUgRE1BRTFfSVJRCTc0CS8qIERNQSBFcnJvciBJUlEqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkUwMDgwMjAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZEQzA4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGREMwOTAwMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQorI2RlZmluZSBETVRFMF9JUlEJMzQKKyNkZWZpbmUgRE1URTRfSVJRCTQ0CisjZGVmaW5lIERNVEU2X0lSUQk0NgorI2RlZmluZSBETVRFOF9JUlEJOTIKKyNkZWZpbmUgRE1URTlfSVJRCTkzCisjZGVmaW5lIERNVEUxMF9JUlEJOTQKKyNkZWZpbmUgRE1URTExX0lSUQk5NQorI2RlZmluZSBETUFFMF9JUlEJMzgJLyogRE1BIEVycm9yIElSUSAqLworI2RlZmluZSBTSF9ETUFDX0JBU0UwCTB4RkM4MDgwMjAKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMQkweEZDODE4MDIwCisjZGVmaW5lIFNIX0RNQVJTX0JBU0UJMHhGQzgwOTAwMAorI2Vsc2UgLyogU0g3Nzg1ICovCisjZGVmaW5lIERNVEUwX0lSUQkzMworI2RlZmluZSBETVRFNF9JUlEJMzcKKyNkZWZpbmUgRE1URTZfSVJRCTUyCisjZGVmaW5lIERNVEU4X0lSUQk1NAorI2RlZmluZSBETVRFOV9JUlEJNTUKKyNkZWZpbmUgRE1URTEwX0lSUQk1NgorI2RlZmluZSBETVRFMTFfSVJRCTU3CisjZGVmaW5lIERNQUUwX0lSUQkzOQkvKiBETUEgRXJyb3IgSVJRMCAqLworI2RlZmluZSBETUFFMV9JUlEJNTgJLyogRE1BIEVycm9yIElSUTEgKi8KKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZDODA4MDIwCisjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGQ0MwODAyMAorI2RlZmluZSBTSF9ETUFSU19CQVNFCTB4RkM4MDkwMDAKKyNlbmRpZgorCisjZGVmaW5lIFJFUV9IRQkweDAwMDAwMEMwCisjZGVmaW5lIFJFUV9ICTB4MDAwMDAwODAKKyNkZWZpbmUgUkVRX0xFCTB4MDAwMDAwNDAKKyNkZWZpbmUgVE1fQlVSU1QgMHgwMDAwMDIwCisjZGVmaW5lIFRTXzgJMHgwMDAwMDAwMAorI2RlZmluZSBUU18xNgkweDAwMDAwMDA4CisjZGVmaW5lIFRTXzMyCTB4MDAwMDAwMTAKKyNkZWZpbmUgVFNfMTZCTEsJMHgwMDAwMDAxOAorI2RlZmluZSBUU18zMkJMSwkweDAwMTAwMDAwCisKKy8qCisgKiBUaGUgU3VwZXJIIERNQUMgc3VwcG9ydHMgYSBudW1iZXIgb2YgdHJhbnNtaXQgc2l6ZXMsIHdlIGxpc3QgdGhlbSBoZXJlLAorICogd2l0aCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcyBhcyB0aGV5IGFwcGVhciBpbiB0aGUgQ0hDUiByZWdpc3RlcnMuCisgKgorICogRGVmYXVsdHMgdG8gYSA2NC1iaXQgdHJhbnNmZXIgc2l6ZS4KKyAqLworZW51bSB7CisJWE1JVF9TWl84QklULAorCVhNSVRfU1pfMTZCSVQsCisJWE1JVF9TWl8zMkJJVCwKKwlYTUlUX1NaXzEyOEJJVCwKKwlYTUlUX1NaXzI1NkJJVCwKK307CisKKy8qCisgKiBUaGUgRE1BIGNvdW50IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2Zlci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdIF9fbWF5YmVfdW51c2VkID0geworCVtYTUlUX1NaXzhCSVRdCQk9IDAsCisJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCisJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCisJW1hNSVRfU1pfMTI4QklUXQk9IDQsCisJW1hNSVRfU1pfMjU2QklUXQk9IDUsCit9OworCisjZW5kaWYgLyogX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g3NzgwLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNzc4MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWI0MjZhLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtc2g3NzgwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICi0jZGVmaW5lIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9ICi0KLSNkZWZpbmUgUkVRX0hFCTB4MDAwMDAwQzAKLSNkZWZpbmUgUkVRX0gJMHgwMDAwMDA4MAotI2RlZmluZSBSRVFfTEUJMHgwMDAwMDA0MAotI2RlZmluZSBUTV9CVVJTVCAweDAwMDAwMjAKLSNkZWZpbmUgVFNfOAkweDAwMDAwMDAwCi0jZGVmaW5lIFRTXzE2CTB4MDAwMDAwMDgKLSNkZWZpbmUgVFNfMzIJMHgwMDAwMDAxMAotI2RlZmluZSBUU18xNkJMSwkweDAwMDAwMDE4Ci0jZGVmaW5lIFRTXzMyQkxLCTB4MDAxMDAwMDAKLQotLyoKLSAqIFRoZSBTdXBlckggRE1BQyBzdXBwb3J0cyBhIG51bWJlciBvZiB0cmFuc21pdCBzaXplcywgd2UgbGlzdCB0aGVtIGhlcmUsCi0gKiB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBDSENSIHJlZ2lzdGVycy4KLSAqCi0gKiBEZWZhdWx0cyB0byBhIDY0LWJpdCB0cmFuc2ZlciBzaXplLgotICovCi1lbnVtIHsKLQlYTUlUX1NaXzhCSVQsCi0JWE1JVF9TWl8xNkJJVCwKLQlYTUlUX1NaXzMyQklULAotCVhNSVRfU1pfMTI4QklULAotCVhNSVRfU1pfMjU2QklULAotfTsKLQotLyoKLSAqIFRoZSBETUEgY291bnQgaXMgZGVmaW5lZCBhcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gX19tYXliZV91bnVzZWQgPSB7Ci0JW1hNSVRfU1pfOEJJVF0JCT0gMCwKLQlbWE1JVF9TWl8xNkJJVF0JCT0gMSwKLQlbWE1JVF9TWl8zMkJJVF0JCT0gMiwKLQlbWE1JVF9TWl8xMjhCSVRdCT0gNCwKLQlbWE1JVF9TWl8yNTZCSVRdCT0gNSwKLX07Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9DUFVfU0g0X0RNQV9TSDc3ODBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCmluZGV4IDIzNWI3Y2QuLmJjYjMwMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKQEAgLTEsMzEgKzEsMjkgQEAKICNpZm5kZWYgX19BU01fQ1BVX1NINF9ETUFfSAogI2RlZmluZSBfX0FTTV9DUFVfU0g0X0RNQV9ICiAKLSNkZWZpbmUgRE1BT1JfSU5JVAkoIDB4ODAwMCB8IERNQU9SX0RNRSApCi0KIC8qIFNINzc1MS83NzYwLzc3ODAgRE1BIElSUSBzb3VyY2VzICovCi0jZGVmaW5lIERNVEUwX0lSUQkzNAotI2RlZmluZSBETVRFMV9JUlEJMzUKLSNkZWZpbmUgRE1URTJfSVJRCTM2Ci0jZGVmaW5lIERNVEUzX0lSUQkzNwotI2RlZmluZSBETVRFNF9JUlEJNDQKLSNkZWZpbmUgRE1URTVfSVJRCTQ1Ci0jZGVmaW5lIERNVEU2X0lSUQk0NgotI2RlZmluZSBETVRFN19JUlEJNDcKLSNkZWZpbmUgRE1BRV9JUlEJMzgKIAogI2lmZGVmIENPTkZJR19DUFVfU0g0QQotI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhmYzgwODAyMAogCisjZGVmaW5lIERNQU9SX0lOSVQJKERNQU9SX0RNRSkKICNkZWZpbmUgQ0hDUl9UU19NQVNLCTB4MTgKICNkZWZpbmUgQ0hDUl9UU19TSElGVAkzCiAKLSNpbmNsdWRlIDxjcHUvZG1hLXNoNzc4MC5oPgotI2Vsc2UKLSNkZWZpbmUgU0hfRE1BQ19CQVNFCTB4ZmZhMDAwMDAKKyNpbmNsdWRlIDxjcHUvZG1hLXNoNGEuaD4KKyNlbHNlIC8qIENPTkZJR19DUFVfU0g0QSAqLworLyoKKyAqIFNINzc1MC9TSDc3NTEvU0g3NzYwCisgKi8KKyNkZWZpbmUgRE1URTBfSVJRCTM0CisjZGVmaW5lIERNVEU0X0lSUQk0NAorI2RlZmluZSBETVRFNl9JUlEJNDYKKyNkZWZpbmUgRE1BRTBfSVJRCTM4CiAKKyNkZWZpbmUgRE1BT1JfSU5JVAkoMHg4MDAwfERNQU9SX0RNRSkKKyNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweGZmYTAwMDAwCisjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhmZmEwMDA3MAogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLwotI2RlZmluZSBUTV9CVVJTVAkweDAwMDAwODAKKyNkZWZpbmUgVE1fQlVSU1QJMHgwMDAwMDA4MAogI2RlZmluZSBUU184CQkweDAwMDAwMDEwCiAjZGVmaW5lIFRTXzE2CQkweDAwMDAwMDIwCiAjZGVmaW5lIFRTXzMyCQkweDAwMDAwMDMwCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZnJlcS5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2ZyZXEuaAppbmRleCBjMjNhZjgxLi43NDlkMWM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZnJlcS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9mcmVxLmgKQEAgLTI5LDYgKzI5LDEwIEBACiAjZGVmaW5lIEZSUUNSMAkJCTB4ZmZjODAwMDAKICNkZWZpbmUgRlJRQ1IxCQkJMHhmZmM4MDAwNAogI2RlZmluZSBGUlFNUjEJCQkweGZmYzgwMDE0CisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCisjZGVmaW5lIEZSUUNSMAkJCTB4ZmZjNDAwMDAKKyNkZWZpbmUgRlJRQ1IxCQkJMHhmZmM0MDAwNAorI2RlZmluZSBGUlFNUjEJCQkweGZmYzQwMDE0CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSFgzKQogI2RlZmluZSBGUlFDUgkJCTB4ZmZjMDAwMTQKICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvbW11X2NvbnRleHQuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oCmluZGV4IDllYThlYjIuLjNjZTdlZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9tbXVfY29udGV4dC5oCkBAIC0xNCwyOCArMTQsMzUgQEAKICNkZWZpbmUgTU1VX1BURUwJMHhGRjAwMDAwNAkvKiBQYWdlIHRhYmxlIGVudHJ5IHJlZ2lzdGVyIExPVyAqLwogI2RlZmluZSBNTVVfVFRCCQkweEZGMDAwMDA4CS8qIFRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgcmVnaXN0ZXIgKi8KICNkZWZpbmUgTU1VX1RFQQkJMHhGRjAwMDAwQwkvKiBUTEIgRXhjZXB0aW9uIEFkZHJlc3MgKi8KLSNkZWZpbmUgTU1VX1BURUEJMHhGRjAwMDAzNAkvKiBQYWdlIHRhYmxlIGVudHJ5IGFzc2lzdGFuY2UgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTU1VX1BURUEJMHhGRjAwMDAzNAkvKiBQVEUgYXNzaXN0YW5jZSByZWdpc3RlciAqLworI2RlZmluZSBNTVVfUFRFQUVYCTB4RkYwMDAwN0MJLyogUFRFIEFTSUQgZXh0ZW5zaW9uIHJlZ2lzdGVyICovCiAKICNkZWZpbmUgTU1VQ1IJCTB4RkYwMDAwMTAJLyogTU1VIENvbnRyb2wgUmVnaXN0ZXIgKi8KIAotI2RlZmluZSBNTVVfSVRMQl9BRERSRVNTX0FSUkFZCTB4RjIwMDAwMDAKICNkZWZpbmUgTU1VX1VUTEJfQUREUkVTU19BUlJBWQkweEY2MDAwMDAwCisjZGVmaW5lIE1NVV9VVExCX0FERFJFU1NfQVJSQVkyCTB4RjY4MDAwMDAKICNkZWZpbmUgTU1VX1BBR0VfQVNTT0NfQklUCTB4ODAKIAogI2RlZmluZSBNTVVDUl9USQkJKDE8PDIpCiAKLSNpZmRlZiBDT05GSUdfWDJUTEIKLSNkZWZpbmUgTU1VQ1JfTUUJCSgxIDw8IDcpCi0jZWxzZQotI2RlZmluZSBNTVVDUl9NRQkJKDApCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHXzMyQklUKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TVDQwKQogI2RlZmluZSBNTVVDUl9TRQkJKDEgPDwgNCkKICNlbHNlCiAjZGVmaW5lIE1NVUNSX1NFCQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0NQVV9IQVNfUFRFQUVYCisjZGVmaW5lIE1NVUNSX0FFWAkJKDEgPDwgNikKKyNlbHNlCisjZGVmaW5lIE1NVUNSX0FFWAkJKDApCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YMlRMQgorI2RlZmluZSBNTVVDUl9NRQkJKDEgPDwgNykKKyNlbHNlCisjZGVmaW5lIE1NVUNSX01FCQkoMCkKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX1NIX1NUT1JFX1FVRVVFUwogI2RlZmluZSBNTVVDUl9TUU1ECQkoMSA8PCA5KQogI2Vsc2UKQEAgLTQzLDE3ICs1MCw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBNTVVfTlRMQl9FTlRSSUVTCTY0Ci0jZGVmaW5lIE1NVV9DT05UUk9MX0lOSVQJKDB4MDV8TU1VQ1JfU1FNRHxNTVVDUl9NRXxNTVVDUl9TRSkKLQotI2RlZmluZSBNTVVfSVRMQl9EQVRBX0FSUkFZCTB4RjMwMDAwMDAKLSNkZWZpbmUgTU1VX1VUTEJfREFUQV9BUlJBWQkweEY3MDAwMDAwCi0KLSNkZWZpbmUgTU1VX1VUTEJfRU5UUklFUwkgICA2NAotI2RlZmluZSBNTVVfVV9FTlRSWV9TSElGVAkgICAgOAotI2RlZmluZSBNTVVfVVRMQl9WQUxJRAkJMHgxMDAKLSNkZWZpbmUgTU1VX0lUTEJfRU5UUklFUwkgICAgNAotI2RlZmluZSBNTVVfSV9FTlRSWV9TSElGVAkgICAgOAotI2RlZmluZSBNTVVfSVRMQl9WQUxJRAkJMHgxMDAKKyNkZWZpbmUgTU1VX0NPTlRST0xfSU5JVAkoMHgwNXxNTVVDUl9TUU1EfE1NVUNSX01FfE1NVUNSX1NFfE1NVUNSX0FFWCkKIAogI2RlZmluZSBUUkEJMHhmZjAwMDAyMAogI2RlZmluZSBFWFBFVlQJMHhmZjAwMDAyNApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4Ni5oIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L3NoNzc4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Njg4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvc2g3Nzg2LmgKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBTSDc3ODYgUGlubXV4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqICBCYXNlZCBvbiBzaDc3ODUuaAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19DUFVfU0g3Nzg2X0hfXworI2RlZmluZSBfX0NQVV9TSDc3ODZfSF9fCisKK2VudW0geworCS8qIFBBICovCisJR1BJT19QQTcsIEdQSU9fUEE2LCBHUElPX1BBNSwgR1BJT19QQTQsCisJR1BJT19QQTMsIEdQSU9fUEEyLCBHUElPX1BBMSwgR1BJT19QQTAsCisKKwkvKiBQQiAqLworCUdQSU9fUEI3LCBHUElPX1BCNiwgR1BJT19QQjUsIEdQSU9fUEI0LAorCUdQSU9fUEIzLCBHUElPX1BCMiwgR1BJT19QQjEsIEdQSU9fUEIwLAorCisJLyogUEMgKi8KKwlHUElPX1BDNywgR1BJT19QQzYsIEdQSU9fUEM1LCBHUElPX1BDNCwKKwlHUElPX1BDMywgR1BJT19QQzIsIEdQSU9fUEMxLCBHUElPX1BDMCwKKworCS8qIFBEICovCisJR1BJT19QRDcsIEdQSU9fUEQ2LCBHUElPX1BENSwgR1BJT19QRDQsCisJR1BJT19QRDMsIEdQSU9fUEQyLCBHUElPX1BEMSwgR1BJT19QRDAsCisKKwkvKiBQRSAqLworCUdQSU9fUEU1LCBHUElPX1BFNCwgR1BJT19QRTMsIEdQSU9fUEUyLAorCUdQSU9fUEUxLCBHUElPX1BFMCwKKworCS8qIFBGICovCisJR1BJT19QRjcsIEdQSU9fUEY2LCBHUElPX1BGNSwgR1BJT19QRjQsCisJR1BJT19QRjMsIEdQSU9fUEYyLCBHUElPX1BGMSwgR1BJT19QRjAsCisKKwkvKiBQRyAqLworCUdQSU9fUEc3LCBHUElPX1BHNiwgR1BJT19QRzUsIEdQSU9fUEc0LAorCUdQSU9fUEczLCBHUElPX1BHMiwgR1BJT19QRzEsIEdQSU9fUEcwLAorCisJLyogUEggKi8KKwlHUElPX1BINywgR1BJT19QSDYsIEdQSU9fUEg1LCBHUElPX1BINCwKKwlHUElPX1BIMywgR1BJT19QSDIsIEdQSU9fUEgxLCBHUElPX1BIMCwKKworCS8qIFBKICovCisJR1BJT19QSjcsIEdQSU9fUEo2LCBHUElPX1BKNSwgR1BJT19QSjQsCisJR1BJT19QSjMsIEdQSU9fUEoyLCBHUElPX1BKMSwgR1BJT19QSjAsCisKKwlHUElPX0ZOX0NERSwKKwlHUElPX0ZOX0VUSF9NQUdJQywKKwlHUElPX0ZOX0RJU1AsCisJR1BJT19GTl9FVEhfTElOSywKKwlHUElPX0ZOX0RSNSwKKwlHUElPX0ZOX0VUSF9UWF9FUiwKKwlHUElPX0ZOX0RSNCwKKwlHUElPX0ZOX0VUSF9UWF9FTiwKKwlHUElPX0ZOX0RSMywKKwlHUElPX0ZOX0VUSF9UWEQzLAorCUdQSU9fRk5fRFIyLAorCUdQSU9fRk5fRVRIX1RYRDIsCisJR1BJT19GTl9EUjEsCisJR1BJT19GTl9FVEhfVFhEMSwKKwlHUElPX0ZOX0RSMCwKKwlHUElPX0ZOX0VUSF9UWEQwLAorCUdQSU9fRk5fVlNZTkMsCisJR1BJT19GTl9IU1BJX0NMSywKKwlHUElPX0ZOX09EREYsCisJR1BJT19GTl9IU1BJX0NTLAorCUdQSU9fRk5fREc1LAorCUdQSU9fRk5fRVRIX01ESU8sCisJR1BJT19GTl9ERzQsCisJR1BJT19GTl9FVEhfUlhfQ0xLLAorCUdQSU9fRk5fREczLAorCUdQSU9fRk5fRVRIX01EQywKKwlHUElPX0ZOX0RHMiwKKwlHUElPX0ZOX0VUSF9DT0wsCisJR1BJT19GTl9ERzEsCisJR1BJT19GTl9FVEhfVFhfQ0xLLAorCUdQSU9fRk5fREcwLAorCUdQSU9fRk5fRVRIX0NSUywKKwlHUElPX0ZOX0RDTEtJTiwKKwlHUElPX0ZOX0hTUElfUlgsCisJR1BJT19GTl9IU1lOQywKKwlHUElPX0ZOX0hTUElfVFgsCisJR1BJT19GTl9EQjUsCisJR1BJT19GTl9FVEhfUlhEMywKKwlHUElPX0ZOX0RCNCwKKwlHUElPX0ZOX0VUSF9SWEQyLAorCUdQSU9fRk5fREIzLAorCUdQSU9fRk5fRVRIX1JYRDEsCisJR1BJT19GTl9EQjIsCisJR1BJT19GTl9FVEhfUlhEMCwKKwlHUElPX0ZOX0RCMSwKKwlHUElPX0ZOX0VUSF9SWF9EViwKKwlHUElPX0ZOX0RCMCwKKwlHUElPX0ZOX0VUSF9SWF9FUiwKKwlHUElPX0ZOX0RDTEtPVVQsCisJR1BJT19GTl9TQ0lGMV9TTEssCisJR1BJT19GTl9TQ0lGMV9SWEQsCisJR1BJT19GTl9TQ0lGMV9UWEQsCisJR1BJT19GTl9EQUNLMSwKKwlHUElPX0ZOX0JBQ0ssCisJR1BJT19GTl9GQUxFLAorCUdQSU9fRk5fREFDSzAsCisJR1BJT19GTl9GQ0xFLAorCUdQSU9fRk5fRFJFUTEsCisJR1BJT19GTl9CUkVRLAorCUdQSU9fRk5fVVNCX09WQzEsCisJR1BJT19GTl9EUkVRMCwKKwlHUElPX0ZOX1VTQl9PVkMwLAorCUdQSU9fRk5fVVNCX1BFTkMxLAorCUdQSU9fRk5fVVNCX1BFTkMwLAorCUdQSU9fRk5fSEFDMV9TRE9VVCwKKwlHUElPX0ZOX1NTSTFfU0RBVEEsCisJR1BJT19GTl9TRElGMUNNRCwKKwlHUElPX0ZOX0hBQzFfU0RJTiwKKwlHUElPX0ZOX1NTSTFfU0NLLAorCUdQSU9fRk5fU0RJRjFDRCwKKwlHUElPX0ZOX0hBQzFfU1lOQywKKwlHUElPX0ZOX1NTSTFfV1MsCisJR1BJT19GTl9TRElGMVdQLAorCUdQSU9fRk5fSEFDMV9CSVRDTEssCisJR1BJT19GTl9TU0kxX0NMSywKKwlHUElPX0ZOX1NESUYxQ0xLLAorCUdQSU9fRk5fSEFDMF9TRE9VVCwKKwlHUElPX0ZOX1NTSTBfU0RBVEEsCisJR1BJT19GTl9TRElGMUQzLAorCUdQSU9fRk5fSEFDMF9TRElOLAorCUdQSU9fRk5fU1NJMF9TQ0ssCisJR1BJT19GTl9TRElGMUQyLAorCUdQSU9fRk5fSEFDMF9TWU5DLAorCUdQSU9fRk5fU1NJMF9XUywKKwlHUElPX0ZOX1NESUYxRDEsCisJR1BJT19GTl9IQUMwX0JJVENMSywKKwlHUElPX0ZOX1NTSTBfQ0xLLAorCUdQSU9fRk5fU0RJRjFEMCwKKwlHUElPX0ZOX1NDSUYzX1NDSywKKwlHUElPX0ZOX1NTSTJfU0RBVEEsCisJR1BJT19GTl9TQ0lGM19SWEQsCisJR1BJT19GTl9UQ0xLLAorCUdQSU9fRk5fU1NJMl9TQ0ssCisJR1BJT19GTl9TQ0lGM19UWEQsCisJR1BJT19GTl9IQUNfUkVTLAorCUdQSU9fRk5fU1NJMl9XUywKKwlHUElPX0ZOX0RBQ0szLAorCUdQSU9fRk5fU0RJRjBDTUQsCisJR1BJT19GTl9EQUNLMiwKKwlHUElPX0ZOX1NESUYwQ0QsCisJR1BJT19GTl9EUkVRMywKKwlHUElPX0ZOX1NESUYwV1AsCisJR1BJT19GTl9TQ0lGMF9DVFMsCisJR1BJT19GTl9EUkVRMiwKKwlHUElPX0ZOX1NESUYwQ0xLLAorCUdQSU9fRk5fU0NJRjBfUlRTLAorCUdQSU9fRk5fSVJMNywKKwlHUElPX0ZOX1NESUYwRDMsCisJR1BJT19GTl9TQ0lGMF9TQ0ssCisJR1BJT19GTl9JUkw2LAorCUdQSU9fRk5fU0RJRjBEMiwKKwlHUElPX0ZOX1NDSUYwX1JYRCwKKwlHUElPX0ZOX0lSTDUsCisJR1BJT19GTl9TRElGMEQxLAorCUdQSU9fRk5fU0NJRjBfVFhELAorCUdQSU9fRk5fSVJMNCwKKwlHUElPX0ZOX1NESUYwRDAsCisJR1BJT19GTl9TQ0lGNV9TQ0ssCisJR1BJT19GTl9GUkIsCisJR1BJT19GTl9TQ0lGNV9SWEQsCisJR1BJT19GTl9JT0lTMTYsCisJR1BJT19GTl9TQ0lGNV9UWEQsCisJR1BJT19GTl9DRTJCLAorCUdQSU9fRk5fRFJBSzMsCisJR1BJT19GTl9DRTJBLAorCUdQSU9fRk5fU0NJRjRfU0NLLAorCUdQSU9fRk5fRFJBSzIsCisJR1BJT19GTl9TU0kzX1dTLAorCUdQSU9fRk5fU0NJRjRfUlhELAorCUdQSU9fRk5fRFJBSzEsCisJR1BJT19GTl9TU0kzX1NEQVRBLAorCUdQSU9fRk5fRlNUQVRVUywKKwlHUElPX0ZOX1NDSUY0X1RYRCwKKwlHUElPX0ZOX0RSQUswLAorCUdQSU9fRk5fU1NJM19TQ0ssCisJR1BJT19GTl9GU0UsCit9OworCisjZW5kaWYgLyogX19DUFVfU0g3Nzg2X0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvdXJxdWVsbC5oIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtY29tbW9uL21hY2gvdXJxdWVsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YjNlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvbWFjaC1jb21tb24vbWFjaC91cnF1ZWxsLmgKQEAgLTAsMCArMSw2OCBAQAorI2lmbmRlZiBfX01BQ0hfVVJRVUVMTF9ICisjZGVmaW5lIF9fTUFDSF9VUlFVRUxMX0gKKworLyoKKyAqIC0tLS0tLSAweDAwMDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTMCB8IChTVzEsU1c0NykgICAgRUVQUk9NLCBTUkFNLCBOT1IgRkxBU0gKKyAqIC0tLS0tKyAweDA0MDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTMSB8IChTVzQ3KSAgICAgICAgU1JBTSwgU1JBTS1MQU4tUENNQ0lBLCBOT1IgRkxBU0gKKyAqIC0tLS0tKyAweDA4MDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTMiB8ICAgICAgICAgICAgICAgRERSMworICogIENTMyB8CisgKiAtLS0tLSsgMHgxMDAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzQgfCAgICAgICAgICAgICAgIFBDSWUKKyAqIC0tLS0tKyAweDE0MDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTNSB8IChTVzQ3KSAgICAgICAgTFJBTS9VUkFNLCBTUkFNLUxBTi1QQ01DSUEKKyAqIC0tLS0tKyAweDE4MDAwMDAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENTNiB8ICAgICAgICAgICAgICAgQVRBLCBOQU5EIEZMQVNICisgKiAtLS0tLSsgMHgxYzAwMDAwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBDUzcgfCAgICAgICAgICAgICAgIFNINzc4NiByZWdpc3RlcgorICogLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2RlZmluZSBOT1JfRkxBU0hfQUREUgkweDAwMDAwMDAwCisjZGVmaW5lIE5PUl9GTEFTSF9TSVpFCTB4MDQwMDAwMDAKKworI2RlZmluZSBDUzFfQkFTRQkweDA1MDAwMDAwCisjZGVmaW5lIENTNV9CQVNFCTB4MTUwMDAwMDAKKyNkZWZpbmUgRlBHQV9CQVNFCUNTMV9CQVNFCisKKyNkZWZpbmUgQk9BUkRSRUcob2ZzKQkoRlBHQV9CQVNFICsgb2ZzIyNfT0ZTKQorI2RlZmluZSBVQk9BUkRSRUcob2ZzKQkoMHhhMDAwMDAwMCArIEZQR0FfQkFTRSArIG9mcyMjX09GUykKKworI2RlZmluZSBTUlNUUl9PRlMJMHgwMDAwIC8qIFN5c3RlbSByZXNldCByZWdpc3RlciAqLworI2RlZmluZSBCRE1SX09GUwkweDAwMTAgLyogQm9hcmQgb3BlcmF0aW5nIG1vZGUgcmVzaXN0ZXIgKi8KKyNkZWZpbmUgSVJMMFNSX09GUwkweDAwMjAgLyogSVJMMCBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMME1TS1JfT0ZTCTB4MDAzMCAvKiBJUkwwIE1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMMVNSX09GUwkweDAwNDAgLyogSVJMMSBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMMU1TS1JfT0ZTCTB4MDA1MCAvKiBJUkwxIE1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMMlNSX09GUwkweDAwNjAgLyogSVJMMiBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMMk1TS1JfT0ZTCTB4MDA3MCAvKiBJUkwyIE1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMM1NSX09GUwkweDAwODAgLyogSVJMMyBTdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgSVJMM01TS1JfT0ZTCTB4MDA5MCAvKiBJUkwzIE1hc2sgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU09GVElOVFJfT0ZTCTB4MDEyMCAvKiBTb2Z0d2VhciBJbnRlcnJ1cHQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0xFRFJfT0ZTCTB4MDEzMCAvKiBMRUQgY29udHJvbCByZXNpc3RlciAqLworI2RlZmluZSBNQVBTQ0lGU1dSX09GUwkweDAxNDAgLyogTWFwL1NDSUYgU3dpdGNoIHJlZ2lzdGVyICovCisjZGVmaW5lIEZQVkVSUl9PRlMJMHgwMTUwIC8qIEZQR0EgVmVyc2lvbiByZWdpc3RlciAqLworI2RlZmluZSBGUERBVEVSX09GUwkweDAxNjAgLyogRlBHQSBEYXRlIHJlZ2lzdGVyICovCisjZGVmaW5lIEZQWUVBUlJfT0ZTCTB4MDE3MCAvKiBGUEdBIFllYXIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVENMS0NSX09GUwkweDAxODAgLyogVENMSyBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIERJUFNXTVJfT0ZTCTB4MTAwMCAvKiBESVBTVyBtb25pdG9yIHJlZ2lzdGVyICovCisjZGVmaW5lIEZQT0RSX09GUwkweDEwMTAgLyogT3V0cHV0IHBvcnQgZGF0YSByZWdpc3RlciAqLworI2RlZmluZSBBVEFDTlJfT0ZTCTB4MTAyMCAvKiBBVEEtQ04gQ29udHJvbC9zdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlBJTkRSX09GUwkweDEwMzAgLyogSW5wdXQgcG9ydCBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lIE1EU1dNUl9PRlMJMHgxMDQwIC8qIE1PREUgU1cgbW9uaXRvciByZWdpc3RlciAqLworI2RlZmluZSBERFIzQlVQQ1JfT0ZTCTB4MTA1MCAvKiBERFIzIEJhY2t1cCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFNTSUNPREVDQ1JfT0ZTCTB4MTA2MCAvKiBTU0ktQ09ERUMgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBQQ0lFU0xPVFNSX09GUwkweDEwNzAgLyogUENJZXhwcmVzcyBTbG90IHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBFVEhFUlBPUlRTUl9PRlMJMHgxMDgwIC8qIEV0aGVyUGh5IFBvcnQgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIExBVENIQ1JfT0ZTCTB4MzAwMCAvKiBMYXRjaCBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIExBVENVQVJfT0ZTCTB4MzAxMCAvKiBMYXRjaCB1cHBlciBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIExBVENMQVJfT0ZTCTB4MzAxMiAvKiBMYXRjaCBsb3dlciBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIExBVENMVURSX09GUwkweDMwMjQgLyogTGF0Y2ggRDMxLTE2IHJlZ2lzdGVyICovCisjZGVmaW5lIExBVENMTERSX09GUwkweDMwMjYgLyogTGF0Y2ggRDE1LTAgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBDSEFSTEVEX09GUwkweDIwMDAgLyogQ2hhcmFjdGVyIExFRCAqLworCisjZW5kaWYgIC8qIF9fTUFDSF9VUlFVRUxMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGVfMzIgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgppbmRleCAyZTFiODZlLi44MmEzYTE1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgorKysgYi9hcmNoL3NoL2tlcm5lbC9NYWtlZmlsZV8zMgpAQCAtMzAsNSArMzAsNiBAQAogb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gZ3Bpby5vCiBvYmotJChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCSs9IGZ0cmFjZS5vCiBvYmotJChDT05GSUdfRFVNUF9DT0RFKQkJKz0gZGlzYXNzZW1ibGUubworb2JqLSQoQ09ORklHX0hJQkVSTkFUSU9OKQkrPSBzd3N1c3AubwogCiBFWFRSQV9DRkxBR1MgKz0gLVdlcnJvcgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvYXNtLW9mZnNldHMuYyBiL2FyY2gvc2gva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNTdjZjBlMC4uOTlhY2ViMjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2FzbS1vZmZzZXRzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMTIsOCArMTIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgva2J1aWxkLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KIAogaW50IG1haW4odm9pZCkKIHsKQEAgLTI1LDUgKzI3LDExIEBACiAJREVGSU5FKFRJX1BSRV9DT1VOVCwJb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBwcmVlbXB0X2NvdW50KSk7CiAJREVGSU5FKFRJX1JFU1RBUlRfQkxPQ0ssb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCByZXN0YXJ0X2Jsb2NrKSk7CiAKKyNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KKwlERUZJTkUoUEJFX0FERFJFU1MsIG9mZnNldG9mKHN0cnVjdCBwYmUsIGFkZHJlc3MpKTsKKwlERUZJTkUoUEJFX09SSUdfQUREUkVTUywgb2Zmc2V0b2Yoc3RydWN0IHBiZSwgb3JpZ19hZGRyZXNzKSk7CisJREVGSU5FKFBCRV9ORVhULCBvZmZzZXRvZihzdHJ1Y3QgcGJlLCBuZXh0KSk7CisJREVGSU5FKFNXU1VTUF9BUkNIX1JFR1NfU0laRSwgc2l6ZW9mKHN0cnVjdCBzd3N1c3BfYXJjaF9yZWdzKSk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCBmNDcxZDI0Li4yNjAwNjQxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC0xMSw2ICsxMSw3IEBACiAjIFNwZWNpYWwgY2FzZXMgZm9yIGZhbWlseSBhbmNlc3RyeS4KIAogb2JqLSQoQ09ORklHX0NQVV9TSDRBKQkJKz0gc2g0YS8KK29iai0kKENPTkZJR19BUkNIX1NITU9CSUxFKQkrPSBzaG1vYmlsZS8KIAogIyBDb21tb24gaW50ZXJmYWNlcy4KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYwppbmRleCA3YjE3MTM3Li4xZGM4OTY0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYwpAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTIzOSw2ICsyNDEsMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNsa19yZWNhbGNfcmF0ZSk7CiAKK2ludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgY2xrICpvbGQ7CisKKwlpZiAoIXBhcmVudCB8fCAhY2xrKQorCQlyZXR1cm4gcmV0OworCisJb2xkID0gY2xrLT5wYXJlbnQ7CisJaWYgKGxpa2VseShjbGstPm9wcyAmJiBjbGstPm9wcy0+c2V0X3BhcmVudCkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2NrX2xvY2ssIGZsYWdzKTsKKwkJcmV0ID0gY2xrLT5vcHMtPnNldF9wYXJlbnQoY2xrLCBwYXJlbnQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja19sb2NrLCBmbGFncyk7CisJCWNsay0+cGFyZW50ID0gKHJldCA/IG9sZCA6IHBhcmVudCk7CisJfQorCisJaWYgKHVubGlrZWx5KGNsay0+ZmxhZ3MgJiBDTEtfUkFURV9QUk9QQUdBVEVTKSkKKwkJcHJvcGFnYXRlX3JhdGUoY2xrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2xrX3NldF9wYXJlbnQpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cGFyZW50OworfQorRVhQT1JUX1NZTUJPTF9HUEwoY2xrX2dldF9wYXJlbnQpOworCiBsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQogewogCWlmIChsaWtlbHkoY2xrLT5vcHMgJiYgY2xrLT5vcHMtPnJvdW5kX3JhdGUpKSB7CkBAIC0zMjksNiArMzYwLDcwIEBACiAJcmV0dXJuIHAgLSBidWY7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgY2xrc19zeXNkZXZfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RhdGljIHBtX21lc3NhZ2VfdCBwcmV2X3N0YXRlOworCXN0cnVjdCBjbGsgKmNsa3A7CisKKwlzd2l0Y2ggKHN0YXRlLmV2ZW50KSB7CisJY2FzZSBQTV9FVkVOVF9PTjoKKwkJLyogUmVzdW1laW5nIGZyb20gaGliZXJuYXRpb24gKi8KKwkJaWYgKHByZXZfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfRlJFRVpFKSB7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa3AsICZjbG9ja19saXN0LCBub2RlKQorCQkJCWlmIChsaWtlbHkoY2xrcC0+b3BzKSkgeworCQkJCQl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtwLT5yYXRlOworCisJCQkJCWlmIChsaWtlbHkoY2xrcC0+b3BzLT5zZXRfcGFyZW50KSkKKwkJCQkJCWNsa3AtPm9wcy0+c2V0X3BhcmVudChjbGtwLAorCQkJCQkJCWNsa3AtPnBhcmVudCk7CisJCQkJCWlmIChsaWtlbHkoY2xrcC0+b3BzLT5zZXRfcmF0ZSkpCisJCQkJCQljbGtwLT5vcHMtPnNldF9yYXRlKGNsa3AsCisJCQkJCQkJcmF0ZSwgTk9fQ0hBTkdFKTsKKwkJCQkJZWxzZSBpZiAobGlrZWx5KGNsa3AtPm9wcy0+cmVjYWxjKSkKKwkJCQkJCWNsa3AtPm9wcy0+cmVjYWxjKGNsa3ApOworCQkJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQTV9FVkVOVF9GUkVFWkU6CisJCWJyZWFrOworCWNhc2UgUE1fRVZFTlRfU1VTUEVORDoKKwkJYnJlYWs7CisJfQorCisJcHJldl9zdGF0ZSA9IHN0YXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNsa3Nfc3lzZGV2X3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXJldHVybiBjbGtzX3N5c2Rldl9zdXNwZW5kKGRldiwgUE1TR19PTik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGNsa3Nfc3lzZGV2X2NsYXNzID0geworCS5uYW1lID0gImNsa3MiLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIGNsa3Nfc3lzZGV2X2RyaXZlciA9IHsKKwkuc3VzcGVuZCA9IGNsa3Nfc3lzZGV2X3N1c3BlbmQsCisJLnJlc3VtZSA9IGNsa3Nfc3lzZGV2X3Jlc3VtZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBjbGtzX3N5c2Rldl9kZXYgPSB7CisJLmNscyA9ICZjbGtzX3N5c2Rldl9jbGFzcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNsa19zeXNkZXZfaW5pdCh2b2lkKQoreworCXN5c2Rldl9jbGFzc19yZWdpc3RlcigmY2xrc19zeXNkZXZfY2xhc3MpOworCXN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmNsa3Nfc3lzZGV2X2NsYXNzLCAmY2xrc19zeXNkZXZfZHJpdmVyKTsKKwlzeXNkZXZfcmVnaXN0ZXIoJmNsa3Nfc3lzZGV2X2Rldik7CisKKwlyZXR1cm4gMDsKK30KK3N1YnN5c19pbml0Y2FsbChjbGtfc3lzZGV2X2luaXQpOworI2VuZGlmCisKIGludCBfX2luaXQgY2xrX2luaXQodm9pZCkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyL3NldHVwLXNoNzYxOS5jCmluZGV4IDU2ZTU4NzguLjBlMzJkOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDIvc2V0dXAtc2g3NjE5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMi9zZXR1cC1zaDc2MTkuYwpAQCAtMiw2ICsyLDcgQEAKICAqIFNINzYxOSBTZXR1cAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFlvc2hpbm9yaSBTYXRvCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE4LDE1ICsxOSwxMCBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKIAlXRFQsIEVETUFDLCBDTVQwLCBDTVQxLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEksCi0JU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJLAorCVNDSUYwLCBTQ0lGMSwgU0NJRjIsCiAJSElGX0hJRkksIEhJRl9ISUZCSSwKIAlETUFDMCwgRE1BQzEsIERNQUMyLCBETUFDMywKIAlTSU9GLAotCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVNDSUYwLCBTQ0lGMSwgU0NJRjIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTM2LDI0ICszMiwxOCBAQAogCUlOVENfSVJRKElSUTYsIDgyKSwgSU5UQ19JUlEoSVJRNywgODMpLAogCUlOVENfSVJRKFdEVCwgODQpLCBJTlRDX0lSUShFRE1BQywgODUpLAogCUlOVENfSVJRKENNVDAsIDg2KSwgSU5UQ19JUlEoQ01UMSwgODcpLAotCUlOVENfSVJRKFNDSUYwX0VSSSwgODgpLCBJTlRDX0lSUShTQ0lGMF9SWEksIDg5KSwKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDkwKSwgSU5UQ19JUlEoU0NJRjBfVFhJLCA5MSksCi0JSU5UQ19JUlEoU0NJRjFfRVJJLCA5MiksIElOVENfSVJRKFNDSUYxX1JYSSwgOTMpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgOTQpLCBJTlRDX0lSUShTQ0lGMV9UWEksIDk1KSwKLQlJTlRDX0lSUShTQ0lGMl9FUkksIDk2KSwgSU5UQ19JUlEoU0NJRjJfUlhJLCA5NyksCi0JSU5UQ19JUlEoU0NJRjJfQlJJLCA5OCksIElOVENfSVJRKFNDSUYyX1RYSSwgOTkpLAorCUlOVENfSVJRKFNDSUYwLCA4OCksIElOVENfSVJRKFNDSUYwLCA4OSksCisJSU5UQ19JUlEoU0NJRjAsIDkwKSwgSU5UQ19JUlEoU0NJRjAsIDkxKSwKKwlJTlRDX0lSUShTQ0lGMSwgOTIpLCBJTlRDX0lSUShTQ0lGMSwgOTMpLAorCUlOVENfSVJRKFNDSUYxLCA5NCksIElOVENfSVJRKFNDSUYxLCA5NSksCisJSU5UQ19JUlEoU0NJRjIsIDk2KSwgSU5UQ19JUlEoU0NJRjIsIDk3KSwKKwlJTlRDX0lSUShTQ0lGMiwgOTgpLCBJTlRDX0lSUShTQ0lGMiwgOTkpLAogCUlOVENfSVJRKEhJRl9ISUZJLCAxMDApLCBJTlRDX0lSUShISUZfSElGQkksIDEwMSksCiAJSU5UQ19JUlEoRE1BQzAsIDEwNCksIElOVENfSVJRKERNQUMxLCAxMDUpLAogCUlOVENfSVJRKERNQUMyLCAxMDYpLCBJTlRDX0lSUShETUFDMywgMTA3KSwKIAlJTlRDX0lSUShTSU9GLCAxMDgpLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSksCi19OwotCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhmODE0MDAwNiwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzIH0gfSwKIAl7IDB4ZjgxNDAwMDgsIDAsIDE2LCA0LCAvKiBJUFJCICovIHsgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCkBAIC02NCw3ICs1NCw3IEBACiAJeyAweGY4MDgwMDA4LCAwLCAxNiwgNCwgLyogSVBSRyAqLyB7IFNJT0YgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzYxOSIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc2MTkiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CkBAIC03MiwxNyArNjIsMTcgQEAKIAkJLm1hcGJhc2UJPSAweGY4NDAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgODgsIDg5LCA5MSwgOTB9LAorCQkuaXJxcwkJPSB7IDg4LCA4OCwgODgsIDg4IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4Zjg0MTAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyA5MiwgOTMsIDk1LCA5NH0sCisJCS5pcnFzCQk9IHsgOTIsIDkyLCA5MiwgOTIgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmODQyMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDk2LCA5NywgOTksIDk4fSwKKwkJLmlycXMJCT0geyA5NiwgOTYsIDk2LCA5NiB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1teGcuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCmluZGV4IGU2MTFkNzkuLjg0NDI5MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLW14Zy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFJlbmVzYXMgTVgtRyAoUjhBMDMwMjJCRykgU2V0dXAKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTIwLDIzICsyMCwxNSBAQAogCUlSUTgsIElSUTksIElSUTEwLCBJUlExMSwgSVJRMTIsIElSUTEzLCBJUlExNCwgSVJRMTUsCiAKIAlQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcsCi0KIAlTSU5UOCwgU0lOVDcsIFNJTlQ2LCBTSU5UNSwgU0lOVDQsIFNJTlQzLCBTSU5UMiwgU0lOVDEsCiAKLQlTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJLAorCVNDSUYwLCBTQ0lGMSwKIAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAotCU1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcsCisJTVRVMl9HUk9VUDEsIE1UVTJfR1JPVVAyLCBNVFUyX0dST1VQMywgTVRVMl9HUk9VUDQsIE1UVTJfR1JPVVA1CisJTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlQSU5ULCBTQ0lGMCwgU0NJRjEsCi0JTVRVMl9HUk9VUDEsIE1UVTJfR1JPVVAyLCBNVFUyX0dST1VQMywgTVRVMl9HUk9VUDQsIE1UVTJfR1JPVVA1CisJUElOVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtNTksNDcgKzUxLDM2IEBACiAJSU5UQ19JUlEoU0lOVDQsIDk4KSwgSU5UQ19JUlEoU0lOVDMsIDk5KSwKIAlJTlRDX0lSUShTSU5UMiwgMTAwKSwgSU5UQ19JUlEoU0lOVDEsIDEwMSksCiAKLQlJTlRDX0lSUShTQ0lGMF9SWEksIDIyMCksIElOVENfSVJRKFNDSUYwX1RYSSwgMjIxKSwKLQlJTlRDX0lSUShTQ0lGMF9CUkksIDIyMiksIElOVENfSVJRKFNDSUYwX0VSSSwgMjIzKSwKLQlJTlRDX0lSUShTQ0lGMV9SWEksIDIyNCksIElOVENfSVJRKFNDSUYxX1RYSSwgMjI1KSwKLQlJTlRDX0lSUShTQ0lGMV9CUkksIDIyNiksIElOVENfSVJRKFNDSUYxX0VSSSwgMjI3KSwKKwlJTlRDX0lSUShTQ0lGMCwgMjIwKSwgSU5UQ19JUlEoU0NJRjAsIDIyMSksCisJSU5UQ19JUlEoU0NJRjAsIDIyMiksIElOVENfSVJRKFNDSUYwLCAyMjMpLAorCUlOVENfSVJRKFNDSUYxLCAyMjQpLCBJTlRDX0lSUShTQ0lGMSwgMjI1KSwKKwlJTlRDX0lSUShTQ0lGMSwgMjI2KSwgSU5UQ19JUlEoU0NJRjEsIDIyNyksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTBBLCAyMjgpLCBJTlRDX0lSUShNVFUyX1RHSTBCLCAyMjkpLAotCUlOVENfSVJRKE1UVTJfVEdJMEMsIDIzMCksIElOVENfSVJRKE1UVTJfVEdJMEQsIDIzMSksCi0JSU5UQ19JUlEoTVRVMl9UQ0kwViwgMjMyKSwgSU5UQ19JUlEoTVRVMl9UR0kwRSwgMjMzKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMSwgMjI4KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIyOSksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDEsIDIzMCksIElOVENfSVJRKE1UVTJfR1JPVVAxLCAyMzEpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAxLCAyMzIpLCBJTlRDX0lSUShNVFUyX0dST1VQMSwgMjMzKSwKIAotCUlOVENfSVJRKE1UVTJfVEdJMEYsIDIzNCksIElOVENfSVJRKE1UVTJfVEdJMUEsIDIzNSksCi0JSU5UQ19JUlEoTVRVMl9UR0kxQiwgMjM2KSwgSU5UQ19JUlEoTVRVMl9UQ0kxViwgMjM3KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFVLCAyMzgpLCBJTlRDX0lSUShNVFUyX1RHSTJBLCAyMzkpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzQpLCBJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM1KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMiwgMjM2KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzNyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDIsIDIzOCksIElOVENfSVJRKE1UVTJfR1JPVVAyLCAyMzkpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kyQiwgMjQwKSwgSU5UQ19JUlEoTVRVMl9UQ0kyViwgMjQxKSwKLQlJTlRDX0lSUShNVFUyX1RDSTJVLCAyNDIpLCBJTlRDX0lSUShNVFUyX1RHSTNBLCAyNDMpLAorCUlOVENfSVJRKE1UVTJfR1JPVVAzLCAyNDApLCBJTlRDX0lSUShNVFUyX0dST1VQMywgMjQxKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQMywgMjQyKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDMsIDI0MyksCiAKIAlJTlRDX0lSUShNVFUyX1RHSTNCLCAyNDQpLAogCUlOVENfSVJRKE1UVTJfVEdJM0MsIDI0NSksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTNELCAyNDYpLCBJTlRDX0lSUShNVFUyX1RDSTNWLCAyNDcpLAotCUlOVENfSVJRKE1UVTJfVEdJNEEsIDI0OCksIElOVENfSVJRKE1UVTJfVEdJNEIsIDI0OSksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QywgMjUwKSwgSU5UQ19JUlEoTVRVMl9UR0k0RCwgMjUxKSwKKwlJTlRDX0lSUShNVFUyX0dST1VQNCwgMjQ2KSwgSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI0NyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDQsIDI0OCksIElOVENfSVJRKE1UVTJfR1JPVVA0LCAyNDkpLAorCUlOVENfSVJRKE1UVTJfR1JPVVA0LCAyNTApLCBJTlRDX0lSUShNVFUyX0dST1VQNCwgMjUxKSwKIAotCUlOVENfSVJRKE1UVTJfVENJNFYsIDI1MiksIElOVENfSVJRKE1UVTJfVEdJNVUsIDI1MyksCi0JSU5UQ19JUlEoTVRVMl9UR0k1ViwgMjU0KSwgSU5UQ19JUlEoTVRVMl9UR0k1VywgMjU1KSwKKwlJTlRDX0lSUShNVFUyX0dST1VQNSwgMjUyKSwgSU5UQ19JUlEoTVRVMl9HUk9VUDUsIDI1MyksCisJSU5UQ19JUlEoTVRVMl9HUk9VUDUsIDI1NCksIElOVENfSVJRKE1UVTJfR1JPVVA1LCAyNTUpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChQSU5ULCBQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywKIAkJICAgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDEsIE1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JCSAgIE1UVTJfVENJMFYsIE1UVTJfVEdJMEUpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDIsIE1UVTJfVEdJMEYsIE1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsCi0JCSAgIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsIE1UVTJfVEdJMkEpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDMsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JCSAgIE1UVTJfVEdJM0EpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDQsIE1UVTJfVEdJM0QsIE1UVTJfVENJM1YsIE1UVTJfVEdJNEEsCi0JCSAgIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVMl9HUk9VUDUsIE1UVTJfVENJNFYsIE1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfQlJJLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfVFhJKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMzcsNyArMTE4LDcgQEAKIAkJLm1hcGJhc2UJPSAweGZmODA0MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMjMsIDIyMCwgMjIxLCAyMjIgfSwKKwkJLmlycXMJCT0geyAyMjAsIDIyMCwgMjIwLCAyMjAgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjAxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYwppbmRleCAwNjMxZTQyLi4wMGY0MmY5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDEuYwpAQCAtMiw2ICsyLDcgQEAKICAqICBTSDcyMDEgc2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4ICBQZXRlciBHcmlmZmluIHBncmlmZmluQG1wYy1kYXRhLmNvLnVrCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE4LDU3ICsxOSwzMiBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNywKIAlQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcsCisKIAlBRENfQURJLAotCU1UVTJfVEdJMEEsIE1UVTJfVEdJMEIsIE1UVTJfVEdJMEMsIE1UVTJfVEdJMEQsCi0JTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiwKLQlNVFUyX1RHSTFBLCBNVFUyX1RHSTFCLCBNVFUyX1RDSTFWLCBNVFUyX1RDSTFVLAotCU1UVTJfVEdJMkEsIE1UVTJfVEdJMkIsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUsCi0JTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCwgTVRVMl9UQ0kzViwKLQlNVFUyX1RHSTRBLCBNVFUyX1RHSTRCLCBNVFUyX1RHSTRDLCBNVFUyX1RHSTRELCBNVFUyX1RDSTRWLAotCU1UVTJfVEdJNVUsIE1UVTJfVEdJNVYsIE1UVTJfVEdJNVcsCi0JUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCwKLQlXRFQsCi0JSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksIElJQzMwX1RFSSwKLQlJSUMzMV9TVFBJLCBJSUMzMV9OQUtJLCBJSUMzMV9SWEksIElJQzMxX1RYSSwgSUlDMzFfVEVJLAotCUlJQzMyX1NUUEksIElJQzMyX05BS0ksIElJQzMyX1JYSSwgSUlDMzJfVFhJLCBJSUMzMl9URUksCisKKwlNVFUyMF9BQkNELCBNVFUyMF9WRUYsIE1UVTIxX0FCLCBNVFUyMV9WVSwgTVRVMjJfQUIsIE1UVTIyX1ZVLAorCU1UVTIzX0FCQ0QsIE1UVTI0X0FCQ0QsIE1UVTI1X1VWVywgTVRVMl9UQ0kzViwgTVRVMl9UQ0k0ViwKKworCVJUQywgV0RULAorCisJSUlDMzAsIElJQzMxLCBJSUMzMiwKIAogCURNQUMwX0RNSU5UMCwgRE1BQzFfRE1JTlQxLAogCURNQUMyX0RNSU5UMiwgRE1BQzNfRE1JTlQzLAogCi0JU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJLAotCVNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSwKLQlTQ0lGMl9CUkksIFNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9UWEksCi0JU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJLAotCVNDSUY0X0JSSSwgU0NJRjRfRVJJLCBTQ0lGNF9SWEksIFNDSUY0X1RYSSwKLQlTQ0lGNV9CUkksIFNDSUY1X0VSSSwgU0NJRjVfUlhJLCBTQ0lGNV9UWEksCi0JU0NJRjZfQlJJLCBTQ0lGNl9FUkksIFNDSUY2X1JYSSwgU0NJRjZfVFhJLAotCVNDSUY3X0JSSSwgU0NJRjdfRVJJLCBTQ0lGN19SWEksIFNDSUY3X1RYSSwKKwlTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LCBTQ0lGNiwgU0NJRjcsCiAKIAlETUFDMF9ETUlOVEEsIERNQUM0X0RNSU5UNCwgRE1BQzVfRE1JTlQ1LCBETUFDNl9ETUlOVDYsCiAJRE1BQzdfRE1JTlQ3LAogCi0JUkNBTjBfRVJTLCBSQ0FOMF9PVlIsCi0JUkNBTjBfU0xFLAotCVJDQU4wX1JNMCwgUkNBTjBfUk0xLAotCi0JUkNBTjFfRVJTLCBSQ0FOMV9PVlIsCi0JUkNBTjFfU0xFLAotCVJDQU4xX1JNMCwgUkNBTjFfUk0xLAorCVJDQU4wLCBSQ0FOMSwKIAogCVNTSTBfU1NJSSwgU1NJMV9TU0lJLAogCi0JVE1SMF9DTUlBMCwgVE1SMF9DTUlCMCwgVE1SMF9PVkkwLAotCVRNUjFfQ01JQTEsIFRNUjFfQ01JQjEsIFRNUjFfT1ZJMSwKKwlUTVIwLCBUTVIxLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCi0JSVJRLCBQSU5ULCBBREMsCi0JTVRVMjBfQUJDRCwgTVRVMjBfVkVGLCBNVFUyMV9BQiwgTVRVMjFfVlUsIE1UVTIyX0FCLCBNVFUyMl9WVSwKLQlNVFUyM19BQkNELCBNVFUyNF9BQkNELCBNVFUyNV9VVlcsCi0JUlRDLCBJSUMzMCwgSUlDMzEsIElJQzMyLAotCVNDSUYwLCBTQ0lGMSwgU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUsIFNDSUY2LCBTQ0lGNywKLQlSQ0FOMCwgUkNBTjEsIFRNUjAsIFRNUjEKLQorCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTc2LDYgKzUyLDcgQEAKIAlJTlRDX0lSUShJUlEyLCA2NiksIElOVENfSVJRKElSUTMsIDY3KSwKIAlJTlRDX0lSUShJUlE0LCA2OCksIElOVENfSVJRKElSUTUsIDY5KSwKIAlJTlRDX0lSUShJUlE2LCA3MCksIElOVENfSVJRKElSUTcsIDcxKSwKKwogCUlOVENfSVJRKFBJTlQwLCA4MCksIElOVENfSVJRKFBJTlQxLCA4MSksCiAJSU5UQ19JUlEoUElOVDIsIDgyKSwgSU5UQ19JUlEoUElOVDMsIDgzKSwKIAlJTlRDX0lSUShQSU5UNCwgODQpLCBJTlRDX0lSUShQSU5UNSwgODUpLApAQCAtODMsMTIzICs2MCw5MiBAQAogCiAJSU5UQ19JUlEoQURDX0FESSwgOTIpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kwQSwgMTA4KSwgSU5UQ19JUlEoTVRVMl9UR0kwQiwgMTA5KSwKLQlJTlRDX0lSUShNVFUyX1RHSTBDLCAxMTApLCBJTlRDX0lSUShNVFUyX1RHSTBELCAxMTEpLAotCUlOVENfSVJRKE1UVTJfVENJMFYsIDExMiksCi0JSU5UQ19JUlEoTVRVMl9UR0kwRSwgMTEzKSwgSU5UQ19JUlEoTVRVMl9UR0kwRiwgMTE0KSwKKwlJTlRDX0lSUShNVFUyMF9BQkNELCAxMDgpLCBJTlRDX0lSUShNVFUyMF9BQkNELCAxMDkpLAorCUlOVENfSVJRKE1UVTIwX0FCQ0QsIDExMCksIElOVENfSVJRKE1UVTIwX0FCQ0QsIDExMSksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTFBLCAxMTYpLCBJTlRDX0lSUShNVFUyX1RHSTFCLCAxMTcpLAotCUlOVENfSVJRKE1UVTJfVENJMVYsIDEyMCksIElOVENfSVJRKE1UVTJfVENJMVUsIDEyMSksCisJSU5UQ19JUlEoTVRVMjBfVkVGLCAxMTIpLCBJTlRDX0lSUShNVFUyMF9WRUYsIDExMyksCisJSU5UQ19JUlEoTVRVMjBfVkVGLCAxMTQpLAogCi0JSU5UQ19JUlEoTVRVMl9UR0kyQSwgMTI0KSwgSU5UQ19JUlEoTVRVMl9UR0kyQiwgMTI1KSwKLQlJTlRDX0lSUShNVFUyX1RDSTJWLCAxMjgpLCBJTlRDX0lSUShNVFUyX1RDSTJVLCAxMjkpLAorCUlOVENfSVJRKE1UVTIxX0FCLCAxMTYpLCBJTlRDX0lSUShNVFUyMV9BQiwgMTE3KSwKKwlJTlRDX0lSUShNVFUyMV9WVSwgMTIwKSwgSU5UQ19JUlEoTVRVMjFfVlUsIDEyMSksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTNBLCAxMzIpLCBJTlRDX0lSUShNVFUyX1RHSTNCLCAxMzMpLAotCUlOVENfSVJRKE1UVTJfVEdJM0MsIDEzNCksIElOVENfSVJRKE1UVTJfVEdJM0QsIDEzNSksCisJSU5UQ19JUlEoTVRVMjJfQUIsIDEyNCksIElOVENfSVJRKE1UVTIyX0FCLCAxMjUpLAorCUlOVENfSVJRKE1UVTIyX1ZVLCAxMjgpLCBJTlRDX0lSUShNVFUyMl9WVSwgMTI5KSwKKworCUlOVENfSVJRKE1UVTIzX0FCQ0QsIDEzMiksIElOVENfSVJRKE1UVTIzX0FCQ0QsIDEzMyksCisJSU5UQ19JUlEoTVRVMjNfQUJDRCwgMTM0KSwgSU5UQ19JUlEoTVRVMjNfQUJDRCwgMTM1KSwKKwogCUlOVENfSVJRKE1UVTJfVENJM1YsIDEzNiksCiAKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAxNDApLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAxNDEpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDE0MiksIElOVENfSVJRKE1UVTJfVEdJNEQsIDE0MyksCisJSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQwKSwgSU5UQ19JUlEoTVRVMjRfQUJDRCwgMTQxKSwKKwlJTlRDX0lSUShNVFUyNF9BQkNELCAxNDIpLCBJTlRDX0lSUShNVFUyNF9BQkNELCAxNDMpLAorCiAJSU5UQ19JUlEoTVRVMl9UQ0k0ViwgMTQ0KSwKIAotCUlOVENfSVJRKE1UVTJfVEdJNVUsIDE0OCksIElOVENfSVJRKE1UVTJfVEdJNVYsIDE0OSksCi0JSU5UQ19JUlEoTVRVMl9UR0k1VywgMTUwKSwKKwlJTlRDX0lSUShNVFUyNV9VVlcsIDE0OCksIElOVENfSVJRKE1UVTI1X1VWVywgMTQ5KSwKKwlJTlRDX0lSUShNVFUyNV9VVlcsIDE1MCksCiAKLQlJTlRDX0lSUShSVENfQVJNLCAxNTIpLCBJTlRDX0lSUShSVENfUFJELCAxNTMpLAotCUlOVENfSVJRKFJUQ19DVVAsIDE1NCksIElOVENfSVJRKFdEVCwgMTU2KSwKKwlJTlRDX0lSUShSVEMsIDE1MiksIElOVENfSVJRKFJUQywgMTUzKSwKKwlJTlRDX0lSUShSVEMsIDE1NCksCiAKLQlJTlRDX0lSUShJSUMzMF9TVFBJLCAxNTcpLCBJTlRDX0lSUShJSUMzMF9OQUtJLCAxNTgpLAotCUlOVENfSVJRKElJQzMwX1JYSSwgMTU5KSwgSU5UQ19JUlEoSUlDMzBfVFhJLCAxNjApLAotCUlOVENfSVJRKElJQzMwX1RFSSwgMTYxKSwKKwlJTlRDX0lSUShXRFQsIDE1NiksCiAKLQlJTlRDX0lSUShJSUMzMV9TVFBJLCAxNjQpLCBJTlRDX0lSUShJSUMzMV9OQUtJLCAxNjUpLAotCUlOVENfSVJRKElJQzMxX1JYSSwgMTY2KSwgSU5UQ19JUlEoSUlDMzFfVFhJLCAxNjcpLAotCUlOVENfSVJRKElJQzMxX1RFSSwgMTY4KSwKKwlJTlRDX0lSUShJSUMzMCwgMTU3KSwgSU5UQ19JUlEoSUlDMzAsIDE1OCksCisJSU5UQ19JUlEoSUlDMzAsIDE1OSksIElOVENfSVJRKElJQzMwLCAxNjApLAorCUlOVENfSVJRKElJQzMwLCAxNjEpLAogCi0JSU5UQ19JUlEoSUlDMzJfU1RQSSwgMTcwKSwgSU5UQ19JUlEoSUlDMzJfTkFLSSwgMTcxKSwKLQlJTlRDX0lSUShJSUMzMl9SWEksIDE3MiksIElOVENfSVJRKElJQzMyX1RYSSwgMTczKSwKLQlJTlRDX0lSUShJSUMzMl9URUksIDE3NCksCisJSU5UQ19JUlEoSUlDMzEsIDE2NCksIElOVENfSVJRKElJQzMxLCAxNjUpLAorCUlOVENfSVJRKElJQzMxLCAxNjYpLCBJTlRDX0lSUShJSUMzMSwgMTY3KSwKKwlJTlRDX0lSUShJSUMzMSwgMTY4KSwKKworCUlOVENfSVJRKElJQzMyLCAxNzApLCBJTlRDX0lSUShJSUMzMiwgMTcxKSwKKwlJTlRDX0lSUShJSUMzMiwgMTcyKSwgSU5UQ19JUlEoSUlDMzIsIDE3MyksCisJSU5UQ19JUlEoSUlDMzIsIDE3NCksCiAKIAlJTlRDX0lSUShETUFDMF9ETUlOVDAsIDE3NiksIElOVENfSVJRKERNQUMxX0RNSU5UMSwgMTc3KSwKIAlJTlRDX0lSUShETUFDMl9ETUlOVDIsIDE3OCksIElOVENfSVJRKERNQUMzX0RNSU5UMywgMTc5KSwKIAotCUlOVENfSVJRKFNDSUYwX0JSSSwgMTgwKSwgSU5UQ19JUlEoU0NJRjBfRVJJLCAxODEpLAotCUlOVENfSVJRKFNDSUYwX1JYSSwgMTgyKSwgSU5UQ19JUlEoU0NJRjBfVFhJLCAxODMpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgMTg0KSwgSU5UQ19JUlEoU0NJRjFfRVJJLCAxODUpLAotCUlOVENfSVJRKFNDSUYxX1JYSSwgMTg2KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCAxODcpLAotCUlOVENfSVJRKFNDSUYyX0JSSSwgMTg4KSwgSU5UQ19JUlEoU0NJRjJfRVJJLCAxODkpLAotCUlOVENfSVJRKFNDSUYyX1JYSSwgMTkwKSwgSU5UQ19JUlEoU0NJRjJfVFhJLCAxOTEpLAotCUlOVENfSVJRKFNDSUYzX0JSSSwgMTkyKSwgSU5UQ19JUlEoU0NJRjNfRVJJLCAxOTMpLAotCUlOVENfSVJRKFNDSUYzX1JYSSwgMTk0KSwgSU5UQ19JUlEoU0NJRjNfVFhJLCAxOTUpLAotCUlOVENfSVJRKFNDSUY0X0JSSSwgMTk2KSwgSU5UQ19JUlEoU0NJRjRfRVJJLCAxOTcpLAotCUlOVENfSVJRKFNDSUY0X1JYSSwgMTk4KSwgSU5UQ19JUlEoU0NJRjRfVFhJLCAxOTkpLAotCUlOVENfSVJRKFNDSUY1X0JSSSwgMjAwKSwgSU5UQ19JUlEoU0NJRjVfRVJJLCAyMDEpLAotCUlOVENfSVJRKFNDSUY1X1JYSSwgMjAyKSwgSU5UQ19JUlEoU0NJRjVfVFhJLCAyMDMpLAotCUlOVENfSVJRKFNDSUY2X0JSSSwgMjA0KSwgSU5UQ19JUlEoU0NJRjZfRVJJLCAyMDUpLAotCUlOVENfSVJRKFNDSUY2X1JYSSwgMjA2KSwgSU5UQ19JUlEoU0NJRjZfVFhJLCAyMDcpLAotCUlOVENfSVJRKFNDSUY3X0JSSSwgMjA4KSwgSU5UQ19JUlEoU0NJRjdfRVJJLCAyMDkpLAotCUlOVENfSVJRKFNDSUY3X1JYSSwgMjEwKSwgSU5UQ19JUlEoU0NJRjdfVFhJLCAyMTEpLAorCUlOVENfSVJRKFNDSUYwLCAxODApLCBJTlRDX0lSUShTQ0lGMCwgMTgxKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTgyKSwgSU5UQ19JUlEoU0NJRjAsIDE4MyksCisJSU5UQ19JUlEoU0NJRjEsIDE4NCksIElOVENfSVJRKFNDSUYxLCAxODUpLAorCUlOVENfSVJRKFNDSUYxLCAxODYpLCBJTlRDX0lSUShTQ0lGMSwgMTg3KSwKKwlJTlRDX0lSUShTQ0lGMiwgMTg4KSwgSU5UQ19JUlEoU0NJRjIsIDE4OSksCisJSU5UQ19JUlEoU0NJRjIsIDE5MCksIElOVENfSVJRKFNDSUYyLCAxOTEpLAorCUlOVENfSVJRKFNDSUYzLCAxOTIpLCBJTlRDX0lSUShTQ0lGMywgMTkzKSwKKwlJTlRDX0lSUShTQ0lGMywgMTk0KSwgSU5UQ19JUlEoU0NJRjMsIDE5NSksCisJSU5UQ19JUlEoU0NJRjQsIDE5NiksIElOVENfSVJRKFNDSUY0LCAxOTcpLAorCUlOVENfSVJRKFNDSUY0LCAxOTgpLCBJTlRDX0lSUShTQ0lGNCwgMTk5KSwKKwlJTlRDX0lSUShTQ0lGNSwgMjAwKSwgSU5UQ19JUlEoU0NJRjUsIDIwMSksCisJSU5UQ19JUlEoU0NJRjUsIDIwMiksIElOVENfSVJRKFNDSUY1LCAyMDMpLAorCUlOVENfSVJRKFNDSUY2LCAyMDQpLCBJTlRDX0lSUShTQ0lGNiwgMjA1KSwKKwlJTlRDX0lSUShTQ0lGNiwgMjA2KSwgSU5UQ19JUlEoU0NJRjYsIDIwNyksCisJSU5UQ19JUlEoU0NJRjcsIDIwOCksIElOVENfSVJRKFNDSUY3LCAyMDkpLAorCUlOVENfSVJRKFNDSUY3LCAyMTApLCBJTlRDX0lSUShTQ0lGNywgMjExKSwKIAogCUlOVENfSVJRKERNQUMwX0RNSU5UQSwgMjEyKSwgSU5UQ19JUlEoRE1BQzRfRE1JTlQ0LCAyMTYpLAogCUlOVENfSVJRKERNQUM1X0RNSU5UNSwgMjE3KSwgSU5UQ19JUlEoRE1BQzZfRE1JTlQ2LCAyMTgpLAogCUlOVENfSVJRKERNQUM3X0RNSU5UNywgMjE5KSwKIAotCUlOVENfSVJRKFJDQU4wX0VSUywgMjI4KSwgSU5UQ19JUlEoUkNBTjBfT1ZSLCAyMjkpLAotCUlOVENfSVJRKFJDQU4wX1NMRSwgMjMwKSwKLQlJTlRDX0lSUShSQ0FOMF9STTAsIDIzMSksIElOVENfSVJRKFJDQU4wX1JNMSwgMjMyKSwKKwlJTlRDX0lSUShSQ0FOMCwgMjI4KSwgSU5UQ19JUlEoUkNBTjAsIDIyOSksCisJSU5UQ19JUlEoUkNBTjAsIDIzMCksCisJSU5UQ19JUlEoUkNBTjAsIDIzMSksIElOVENfSVJRKFJDQU4wLCAyMzIpLAogCi0JSU5UQ19JUlEoUkNBTjFfRVJTLCAyMzQpLCBJTlRDX0lSUShSQ0FOMV9PVlIsIDIzNSksCi0JSU5UQ19JUlEoUkNBTjFfU0xFLCAyMzYpLAotCUlOVENfSVJRKFJDQU4xX1JNMCwgMjM3KSwgSU5UQ19JUlEoUkNBTjFfUk0xLCAyMzgpLAorCUlOVENfSVJRKFJDQU4xLCAyMzQpLCBJTlRDX0lSUShSQ0FOMSwgMjM1KSwKKwlJTlRDX0lSUShSQ0FOMSwgMjM2KSwKKwlJTlRDX0lSUShSQ0FOMSwgMjM3KSwgSU5UQ19JUlEoUkNBTjEsIDIzOCksCiAKIAlJTlRDX0lSUShTU0kwX1NTSUksIDI0NCksIElOVENfSVJRKFNTSTFfU1NJSSwgMjQ1KSwKIAotCUlOVENfSVJRKFRNUjBfQ01JQTAsIDI0NiksIElOVENfSVJRKFRNUjBfQ01JQjAsIDI0NyksCi0JSU5UQ19JUlEoVE1SMF9PVkkwLCAyNDgpLAorCUlOVENfSVJRKFRNUjAsIDI0NiksIElOVENfSVJRKFRNUjAsIDI0NyksCisJSU5UQ19JUlEoVE1SMCwgMjQ4KSwKIAotCUlOVENfSVJRKFRNUjFfQ01JQTEsIDI1MiksIElOVENfSVJRKFRNUjFfQ01JQjEsIDI1MyksCi0JSU5UQ19JUlEoVE1SMV9PVkkxLCAyNTQpLAotCisJSU5UQ19JUlEoVE1SMSwgMjUyKSwgSU5UQ19JUlEoVE1SMSwgMjUzKSwKKwlJTlRDX0lSUShUTVIxLCAyNTQpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChQSU5ULCBQSU5UMCwgUElOVDEsIFBJTlQyLCBQSU5UMywKIAkJICAgUElOVDQsIFBJTlQ1LCBQSU5UNiwgUElOVDcpLAotCUlOVENfR1JPVVAoTVRVMjBfQUJDRCwgTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCksCi0JSU5UQ19HUk9VUChNVFUyMF9WRUYsIE1UVTJfVENJMFYsIE1UVTJfVEdJMEUsIE1UVTJfVEdJMEYpLAotCi0JSU5UQ19HUk9VUChNVFUyMV9BQiwgTVRVMl9UR0kxQSwgTVRVMl9UR0kxQiksCi0JSU5UQ19HUk9VUChNVFUyMV9WVSwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSksCi0JSU5UQ19HUk9VUChNVFUyMl9BQiwgTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiksCi0JSU5UQ19HUk9VUChNVFUyMl9WVSwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSksCi0JSU5UQ19HUk9VUChNVFUyM19BQkNELCBNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNEKSwKLQlJTlRDX0dST1VQKE1UVTI0X0FCQ0QsIE1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVMjVfVVZXLCBNVFUyX1RHSTVVLCBNVFUyX1RHSTVWLCBNVFUyX1RHSTVXKSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FSTSwgUlRDX1BSRCwgUlRDX0NVUCApLAotCi0JSU5UQ19HUk9VUChJSUMzMCwgSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksCi0JCSAgIElJQzMwX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMSwgSUlDMzFfU1RQSSwgSUlDMzFfTkFLSSwgSUlDMzFfUlhJLCBJSUMzMV9UWEksCi0JCSAgIElJQzMxX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMiwgSUlDMzJfU1RQSSwgSUlDMzJfTkFLSSwgSUlDMzJfUlhJLCBJSUMzMl9UWEksCi0JCSAgIElJQzMyX1RFSSksCi0KLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9CUkksIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0JSSSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYzLCBTQ0lGM19CUkksIFNDSUYzX0VSSSwgU0NJRjNfUlhJLCBTQ0lGM19UWEkpLAotCUlOVENfR1JPVVAoU0NJRjQsIFNDSUY0X0JSSSwgU0NJRjRfRVJJLCBTQ0lGNF9SWEksIFNDSUY0X1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGNSwgU0NJRjVfQlJJLCBTQ0lGNV9FUkksIFNDSUY1X1JYSSwgU0NJRjVfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUY2LCBTQ0lGNl9CUkksIFNDSUY2X0VSSSwgU0NJRjZfUlhJLCBTQ0lGNl9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjcsIFNDSUY3X0JSSSwgU0NJRjdfRVJJLCBTQ0lGN19SWEksIFNDSUY3X1RYSSksCi0KLQlJTlRDX0dST1VQKFJDQU4wLCBSQ0FOMF9FUlMsIFJDQU4wX09WUiwgUkNBTjBfUk0wLCBSQ0FOMF9STTEsCi0JCSAgIFJDQU4wX1NMRSksCi0JSU5UQ19HUk9VUChSQ0FOMSwgUkNBTjFfRVJTLCBSQ0FOMV9PVlIsIFJDQU4xX1JNMCwgUkNBTjFfUk0xLAotCQkgICBSQ0FOMV9TTEUpLAotCi0JSU5UQ19HUk9VUChUTVIwLCBUTVIwX0NNSUEwLCBUTVIwX0NNSUIwLCBUTVIwX09WSTApLAotCUlOVENfR1JPVVAoVE1SMSwgVE1SMV9DTUlBMSwgVE1SMV9DTUlCMSwgVE1SMV9PVkkxKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0yMTIsNyArMTU4LDcgQEAKIAogCXsgMHhmZmZlOTgwNiwgMCwgMTYsIDQsIC8qIElQUjA5ICovIHsgUlRDLCBXRFQsIElJQzMwLCAwIH0gfSwKIAl7IDB4ZmZmZTk4MDgsIDAsIDE2LCA0LCAvKiBJUFIxMCAqLyB7IElJQzMxLCBJSUMzMiwgRE1BQzBfRE1JTlQwLCBETUFDMV9ETUlOVDEgfSB9LAotCXsgMHhmZmZlOTgwYSwgMCwgMTYsIDQsIC8qIElQUjExICovIHsgRE1BQzJfRE1JTlQyLCBETUFDM19ETUlOVDMsIFNDSUYwICwgU0NJRjEgfSB9LAorCXsgMHhmZmZlOTgwYSwgMCwgMTYsIDQsIC8qIElQUjExICovIHsgRE1BQzJfRE1JTlQyLCBETUFDM19ETUlOVDMsIFNDSUYwLCBTQ0lGMSB9IH0sCiAJeyAweGZmZmU5ODBjLCAwLCAxNiwgNCwgLyogSVBSMTIgKi8geyBTQ0lGMiwgU0NJRjMsIFNDSUY0LCBTQ0lGNSB9IH0sCiAJeyAweGZmZmU5ODBlLCAwLCAxNiwgNCwgLyogSVBSMTMgKi8geyBTQ0lGNiwgU0NJRjcsIERNQUMwX0RNSU5UQSwgRE1BQzRfRE1JTlQ0ICB9IH0sCiAJeyAweGZmZmU5ODEwLCAwLCAxNiwgNCwgLyogSVBSMTQgKi8geyBETUFDNV9ETUlOVDUsIERNQUM2X0RNSU5UNiwgRE1BQzdfRE1JTlQ3LCAwIH0gfSwKQEAgLTIzNCw0MiArMTgwLDQyIEBACiAJCS5tYXBiYXNlCT0gMHhmZmZlODAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTgxLCAxODIsIDE4MywgMTgwfQorCQkuaXJxcwkJPSB7IDE4MCwgMTgwLCAxODAsIDE4MCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTg4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE4NSwgMTg2LCAxODcsIDE4NH0KKwkJLmlycXMJCT0geyAxODQsIDE4NCwgMTg0LCAxODQgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAxODksIDE4NiwgMTg3LCAxODh9CisJCS5pcnFzCQk9IHsgMTg4LCAxODgsIDE4OCwgMTg4IH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMTkzLCAxOTQsIDE5NSwgMTkyfQorCQkuaXJxcwkJPSB7IDE5MiwgMTkyLCAxOTIsIDE5MiB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZWEwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDE5NiwgMTk4LCAxOTksIDE5Nn0KKwkJLmlycXMJCT0geyAxOTYsIDE5NiwgMTk2LCAxOTYgfQogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmVhODAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyAyMDEsIDIwMiwgMjAzLCAyMDB9CisJCS5pcnFzCQk9IHsgMjAwLCAyMDAsIDIwMCwgMjAwIH0KIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlYjAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgMjA1LCAyMDYsIDIwNywgMjA0fQorCQkuaXJxcwkJPSB7IDIwNCwgMjA0LCAyMDQsIDIwNCB9CiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZWI4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDIwOSwgMjEwLCAyMTEsIDIwOH0KKwkJLmlycXMJCT0geyAyMDgsIDIwOCwgMjA4LCAyMDggfQogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC0yOTAsMTcgKzIzNiw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMTUzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDE1NCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbM10gPSB7Ci0JCS8qIEFsYXJtIElSUSAqLworCQkvKiBTaGFyZWQgUGVyaW9kL0NhcnJ5L0FsYXJtIElSUSAqLwogCQkuc3RhcnQJPSAxNTIsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDMuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCmluZGV4IGU5OGRjNDQuLjgyMGRmYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDJhL3NldHVwLXNoNzIwMy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFNINzIwMyBhbmQgU0g3MjYzIFNldHVwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNyAtIDIwMDkgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTgsNTAgKzE4LDI3IEBACiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAogCVBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLCBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNywKLQlETUFDMF9ERUksIERNQUMwX0hFSSwgRE1BQzFfREVJLCBETUFDMV9IRUksCi0JRE1BQzJfREVJLCBETUFDMl9IRUksIERNQUMzX0RFSSwgRE1BQzNfSEVJLAotCURNQUM0X0RFSSwgRE1BQzRfSEVJLCBETUFDNV9ERUksIERNQUM1X0hFSSwKLQlETUFDNl9ERUksIERNQUM2X0hFSSwgRE1BQzdfREVJLCBETUFDN19IRUksCisJRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAogCVVTQiwgTENEQywgQ01UMCwgQ01UMSwgQlNDLCBXRFQsCi0JTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCwKLQlNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGLAotCU1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsCi0JTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSwKLQlNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLAotCU1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQsIE1UVTJfVENJNFYsCisKKwlNVFUwX0FCQ0QsIE1UVTBfVkVGLCBNVFUxX0FCLCBNVFUxX1ZVLCBNVFUyX0FCLCBNVFUyX1ZVLAorCU1UVTNfQUJDRCwgTVRVNF9BQkNELCBNVFUyX1RDSTNWLCBNVFUyX1RDSTRWLAorCiAJQURDX0FESSwKLQlJSUMzMF9TVFBJLCBJSUMzMF9OQUtJLCBJSUMzMF9SWEksIElJQzMwX1RYSSwgSUlDMzBfVEVJLAotCUlJQzMxX1NUUEksIElJQzMxX05BS0ksIElJQzMxX1JYSSwgSUlDMzFfVFhJLCBJSUMzMV9URUksCi0JSUlDMzJfU1RQSSwgSUlDMzJfTkFLSSwgSUlDMzJfUlhJLCBJSUMzMl9UWEksIElJQzMyX1RFSSwKLQlJSUMzM19TVFBJLCBJSUMzM19OQUtJLCBJSUMzM19SWEksIElJQzMzX1RYSSwgSUlDMzNfVEVJLAotCVNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSwKLQlTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEksCi0JU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJLAotCVNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSwKLQlTU1UwX1NTRVJJLCBTU1UwX1NTUlhJLCBTU1UwX1NTVFhJLAotCVNTVTFfU1NFUkksIFNTVTFfU1NSWEksIFNTVTFfU1NUWEksCisKKwlJSUMzMCwgSUlDMzEsIElJQzMyLCBJSUMzMywKKwlTQ0lGMCwgU0NJRjEsIFNDSUYyLCBTQ0lGMywKKworCVNTVTAsIFNTVTEsCisKIAlTU0kwX1NTSUksIFNTSTFfU1NJSSwgU1NJMl9TU0lJLCBTU0kzX1NTSUksCiAKIAkvKiBST00tREVDLCBTREhJLCBTUkMsIGFuZCBJRUIgYXJlIFNINzI2MyBzcGVjaWZpYyAqLwotCVJPTURFQ19JU1ksIFJPTURFQ19JRVJSLCBST01ERUNfSUFSRywgUk9NREVDX0lTRUMsIFJPTURFQ19JQlVGLAotCVJPTURFQ19JUkVBRFksCi0KLQlGTENUTF9GTFNURUksIEZMQ1RMX0ZMVEVOREksIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTFRSRVExSSwKLQotCVNESEkzLCBTREhJMCwgU0RISTEsCi0KLQlSVENfQVJNLCBSVENfUFJELCBSVENfQ1VQLAotCVJDQU4wX0VSUywgUkNBTjBfT1ZSLCBSQ0FOMF9STTAsIFJDQU4wX1JNMSwgUkNBTjBfU0xFLAotCVJDQU4xX0VSUywgUkNBTjFfT1ZSLCBSQ0FOMV9STTAsIFJDQU4xX1JNMSwgUkNBTjFfU0xFLAotCi0JU1JDX09WRiwgU1JDX09ERkksIFNSQ19JREVJLCBJRUJJLAorCVJPTURFQywgRkxDVEwsIFNESEksIFJUQywgUkNBTjAsIFJDQU4xLAorCVNSQywgSUVCSSwKIAogCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlQSU5ULCBETUFDMCwgRE1BQzEsIERNQUMyLCBETUFDMywgRE1BQzQsIERNQUM1LCBETUFDNiwgRE1BQzcsCi0JTVRVMF9BQkNELCBNVFUwX1ZFRiwgTVRVMV9BQiwgTVRVMV9WVSwgTVRVMl9BQiwgTVRVMl9WVSwKLQlNVFUzX0FCQ0QsIE1UVTRfQUJDRCwKLQlJSUMzMCwgSUlDMzEsIElJQzMyLCBJSUMzMywgU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCi0JU1NVMCwgU1NVMSwgUk9NREVDLCBTREhJLCBGTENUTCwgUlRDLCBSQ0FOMCwgUkNBTjEsIFNSQworCVBJTlQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKQEAgLTczLDc5ICs1MCw4MCBAQAogCUlOVENfSVJRKFBJTlQyLCA4MiksIElOVENfSVJRKFBJTlQzLCA4MyksCiAJSU5UQ19JUlEoUElOVDQsIDg0KSwgSU5UQ19JUlEoUElOVDUsIDg1KSwKIAlJTlRDX0lSUShQSU5UNiwgODYpLCBJTlRDX0lSUShQSU5UNywgODcpLAotCUlOVENfSVJRKERNQUMwX0RFSSwgMTA4KSwgSU5UQ19JUlEoRE1BQzBfSEVJLCAxMDkpLAotCUlOVENfSVJRKERNQUMxX0RFSSwgMTEyKSwgSU5UQ19JUlEoRE1BQzFfSEVJLCAxMTMpLAotCUlOVENfSVJRKERNQUMyX0RFSSwgMTE2KSwgSU5UQ19JUlEoRE1BQzJfSEVJLCAxMTcpLAotCUlOVENfSVJRKERNQUMzX0RFSSwgMTIwKSwgSU5UQ19JUlEoRE1BQzNfSEVJLCAxMjEpLAotCUlOVENfSVJRKERNQUM0X0RFSSwgMTI0KSwgSU5UQ19JUlEoRE1BQzRfSEVJLCAxMjUpLAotCUlOVENfSVJRKERNQUM1X0RFSSwgMTI4KSwgSU5UQ19JUlEoRE1BQzVfSEVJLCAxMjkpLAotCUlOVENfSVJRKERNQUM2X0RFSSwgMTMyKSwgSU5UQ19JUlEoRE1BQzZfSEVJLCAxMzMpLAotCUlOVENfSVJRKERNQUM3X0RFSSwgMTM2KSwgSU5UQ19JUlEoRE1BQzdfSEVJLCAxMzcpLAorCUlOVENfSVJRKERNQUMwLCAxMDgpLCBJTlRDX0lSUShETUFDMCwgMTA5KSwKKwlJTlRDX0lSUShETUFDMSwgMTEyKSwgSU5UQ19JUlEoRE1BQzEsIDExMyksCisJSU5UQ19JUlEoRE1BQzIsIDExNiksIElOVENfSVJRKERNQUMyLCAxMTcpLAorCUlOVENfSVJRKERNQUMzLCAxMjApLCBJTlRDX0lSUShETUFDMywgMTIxKSwKKwlJTlRDX0lSUShETUFDNCwgMTI0KSwgSU5UQ19JUlEoRE1BQzQsIDEyNSksCisJSU5UQ19JUlEoRE1BQzUsIDEyOCksIElOVENfSVJRKERNQUM1LCAxMjkpLAorCUlOVENfSVJRKERNQUM2LCAxMzIpLCBJTlRDX0lSUShETUFDNiwgMTMzKSwKKwlJTlRDX0lSUShETUFDNywgMTM2KSwgSU5UQ19JUlEoRE1BQzcsIDEzNyksCiAJSU5UQ19JUlEoVVNCLCAxNDApLCBJTlRDX0lSUShMQ0RDLCAxNDEpLAogCUlOVENfSVJRKENNVDAsIDE0MiksIElOVENfSVJRKENNVDEsIDE0MyksCiAJSU5UQ19JUlEoQlNDLCAxNDQpLCBJTlRDX0lSUShXRFQsIDE0NSksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQSwgMTQ2KSwgSU5UQ19JUlEoTVRVMl9UR0kwQiwgMTQ3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTBDLCAxNDgpLCBJTlRDX0lSUShNVFUyX1RHSTBELCAxNDkpLAotCUlOVENfSVJRKE1UVTJfVENJMFYsIDE1MCksCi0JSU5UQ19JUlEoTVRVMl9UR0kwRSwgMTUxKSwgSU5UQ19JUlEoTVRVMl9UR0kwRiwgMTUyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTFBLCAxNTMpLCBJTlRDX0lSUShNVFUyX1RHSTFCLCAxNTQpLAotCUlOVENfSVJRKE1UVTJfVENJMVYsIDE1NSksIElOVENfSVJRKE1UVTJfVENJMVUsIDE1NiksCi0JSU5UQ19JUlEoTVRVMl9UR0kyQSwgMTU3KSwgSU5UQ19JUlEoTVRVMl9UR0kyQiwgMTU4KSwKLQlJTlRDX0lSUShNVFUyX1RDSTJWLCAxNTkpLCBJTlRDX0lSUShNVFUyX1RDSTJVLCAxNjApLAotCUlOVENfSVJRKE1UVTJfVEdJM0EsIDE2MSksIElOVENfSVJRKE1UVTJfVEdJM0IsIDE2MiksCi0JSU5UQ19JUlEoTVRVMl9UR0kzQywgMTYzKSwgSU5UQ19JUlEoTVRVMl9UR0kzRCwgMTY0KSwKKwlJTlRDX0lSUShNVFUwX0FCQ0QsIDE0NiksIElOVENfSVJRKE1UVTBfQUJDRCwgMTQ3KSwKKwlJTlRDX0lSUShNVFUwX0FCQ0QsIDE0OCksIElOVENfSVJRKE1UVTBfQUJDRCwgMTQ5KSwKKwlJTlRDX0lSUShNVFUwX1ZFRiwgMTUwKSwKKwlJTlRDX0lSUShNVFUwX1ZFRiwgMTUxKSwgSU5UQ19JUlEoTVRVMF9WRUYsIDE1MiksCisJSU5UQ19JUlEoTVRVMV9BQiwgMTUzKSwgSU5UQ19JUlEoTVRVMV9BQiwgMTU0KSwKKwlJTlRDX0lSUShNVFUxX1ZVLCAxNTUpLCBJTlRDX0lSUShNVFUxX1ZVLCAxNTYpLAorCUlOVENfSVJRKE1UVTJfQUIsIDE1NyksIElOVENfSVJRKE1UVTJfQUIsIDE1OCksCisJSU5UQ19JUlEoTVRVMl9WVSwgMTU5KSwgSU5UQ19JUlEoTVRVMl9WVSwgMTYwKSwKKwlJTlRDX0lSUShNVFUzX0FCQ0QsIDE2MSksIElOVENfSVJRKE1UVTNfQUJDRCwgMTYyKSwKKwlJTlRDX0lSUShNVFUzX0FCQ0QsIDE2MyksIElOVENfSVJRKE1UVTNfQUJDRCwgMTY0KSwKIAlJTlRDX0lSUShNVFUyX1RDSTNWLCAxNjUpLAotCUlOVENfSVJRKE1UVTJfVEdJNEEsIDE2NiksIElOVENfSVJRKE1UVTJfVEdJNEIsIDE2NyksCi0JSU5UQ19JUlEoTVRVMl9UR0k0QywgMTY4KSwgSU5UQ19JUlEoTVRVMl9UR0k0RCwgMTY5KSwKKwlJTlRDX0lSUShNVFU0X0FCQ0QsIDE2NiksIElOVENfSVJRKE1UVTRfQUJDRCwgMTY3KSwKKwlJTlRDX0lSUShNVFU0X0FCQ0QsIDE2OCksIElOVENfSVJRKE1UVTRfQUJDRCwgMTY5KSwKIAlJTlRDX0lSUShNVFUyX1RDSTRWLCAxNzApLAogCUlOVENfSVJRKEFEQ19BREksIDE3MSksCi0JSU5UQ19JUlEoSUlDMzBfU1RQSSwgMTcyKSwgSU5UQ19JUlEoSUlDMzBfTkFLSSwgMTczKSwKLQlJTlRDX0lSUShJSUMzMF9SWEksIDE3NCksIElOVENfSVJRKElJQzMwX1RYSSwgMTc1KSwKLQlJTlRDX0lSUShJSUMzMF9URUksIDE3NiksCi0JSU5UQ19JUlEoSUlDMzFfU1RQSSwgMTc3KSwgSU5UQ19JUlEoSUlDMzFfTkFLSSwgMTc4KSwKLQlJTlRDX0lSUShJSUMzMV9SWEksIDE3OSksIElOVENfSVJRKElJQzMxX1RYSSwgMTgwKSwKLQlJTlRDX0lSUShJSUMzMV9URUksIDE4MSksCi0JSU5UQ19JUlEoSUlDMzJfU1RQSSwgMTgyKSwgSU5UQ19JUlEoSUlDMzJfTkFLSSwgMTgzKSwKLQlJTlRDX0lSUShJSUMzMl9SWEksIDE4NCksIElOVENfSVJRKElJQzMyX1RYSSwgMTg1KSwKLQlJTlRDX0lSUShJSUMzMl9URUksIDE4NiksCi0JSU5UQ19JUlEoSUlDMzNfU1RQSSwgMTg3KSwgSU5UQ19JUlEoSUlDMzNfTkFLSSwgMTg4KSwKLQlJTlRDX0lSUShJSUMzM19SWEksIDE4OSksIElOVENfSVJRKElJQzMzX1RYSSwgMTkwKSwKLQlJTlRDX0lSUShJSUMzM19URUksIDE5MSksCi0JSU5UQ19JUlEoU0NJRjBfQlJJLCAxOTIpLCBJTlRDX0lSUShTQ0lGMF9FUkksIDE5MyksCi0JSU5UQ19JUlEoU0NJRjBfUlhJLCAxOTQpLCBJTlRDX0lSUShTQ0lGMF9UWEksIDE5NSksCi0JSU5UQ19JUlEoU0NJRjFfQlJJLCAxOTYpLCBJTlRDX0lSUShTQ0lGMV9FUkksIDE5NyksCi0JSU5UQ19JUlEoU0NJRjFfUlhJLCAxOTgpLCBJTlRDX0lSUShTQ0lGMV9UWEksIDE5OSksCi0JSU5UQ19JUlEoU0NJRjJfQlJJLCAyMDApLCBJTlRDX0lSUShTQ0lGMl9FUkksIDIwMSksCi0JSU5UQ19JUlEoU0NJRjJfUlhJLCAyMDIpLCBJTlRDX0lSUShTQ0lGMl9UWEksIDIwMyksCi0JSU5UQ19JUlEoU0NJRjNfQlJJLCAyMDQpLCBJTlRDX0lSUShTQ0lGM19FUkksIDIwNSksCi0JSU5UQ19JUlEoU0NJRjNfUlhJLCAyMDYpLCBJTlRDX0lSUShTQ0lGM19UWEksIDIwNyksCi0JSU5UQ19JUlEoU1NVMF9TU0VSSSwgMjA4KSwgSU5UQ19JUlEoU1NVMF9TU1JYSSwgMjA5KSwKLQlJTlRDX0lSUShTU1UwX1NTVFhJLCAyMTApLAotCUlOVENfSVJRKFNTVTFfU1NFUkksIDIxMSksIElOVENfSVJRKFNTVTFfU1NSWEksIDIxMiksCi0JSU5UQ19JUlEoU1NVMV9TU1RYSSwgMjEzKSwKKwlJTlRDX0lSUShJSUMzMCwgMTcyKSwgSU5UQ19JUlEoSUlDMzAsIDE3MyksCisJSU5UQ19JUlEoSUlDMzAsIDE3NCksIElOVENfSVJRKElJQzMwLCAxNzUpLAorCUlOVENfSVJRKElJQzMwLCAxNzYpLAorCUlOVENfSVJRKElJQzMxLCAxNzcpLCBJTlRDX0lSUShJSUMzMSwgMTc4KSwKKwlJTlRDX0lSUShJSUMzMSwgMTc5KSwgSU5UQ19JUlEoSUlDMzEsIDE4MCksCisJSU5UQ19JUlEoSUlDMzEsIDE4MSksCisJSU5UQ19JUlEoSUlDMzIsIDE4MiksIElOVENfSVJRKElJQzMyLCAxODMpLAorCUlOVENfSVJRKElJQzMyLCAxODQpLCBJTlRDX0lSUShJSUMzMiwgMTg1KSwKKwlJTlRDX0lSUShJSUMzMiwgMTg2KSwKKwlJTlRDX0lSUShJSUMzMywgMTg3KSwgSU5UQ19JUlEoSUlDMzMsIDE4OCksCisJSU5UQ19JUlEoSUlDMzMsIDE4OSksIElOVENfSVJRKElJQzMzLCAxOTApLAorCUlOVENfSVJRKElJQzMzLCAxOTEpLAorCUlOVENfSVJRKFNDSUYwLCAxOTIpLCBJTlRDX0lSUShTQ0lGMCwgMTkzKSwKKwlJTlRDX0lSUShTQ0lGMCwgMTk0KSwgSU5UQ19JUlEoU0NJRjAsIDE5NSksCisJSU5UQ19JUlEoU0NJRjEsIDE5NiksIElOVENfSVJRKFNDSUYxLCAxOTcpLAorCUlOVENfSVJRKFNDSUYxLCAxOTgpLCBJTlRDX0lSUShTQ0lGMSwgMTk5KSwKKwlJTlRDX0lSUShTQ0lGMiwgMjAwKSwgSU5UQ19JUlEoU0NJRjIsIDIwMSksCisJSU5UQ19JUlEoU0NJRjIsIDIwMiksIElOVENfSVJRKFNDSUYyLCAyMDMpLAorCUlOVENfSVJRKFNDSUYzLCAyMDQpLCBJTlRDX0lSUShTQ0lGMywgMjA1KSwKKwlJTlRDX0lSUShTQ0lGMywgMjA2KSwgSU5UQ19JUlEoU0NJRjMsIDIwNyksCisJSU5UQ19JUlEoU1NVMCwgMjA4KSwgSU5UQ19JUlEoU1NVMCwgMjA5KSwKKwlJTlRDX0lSUShTU1UwLCAyMTApLAorCUlOVENfSVJRKFNTVTEsIDIxMSksIElOVENfSVJRKFNTVTEsIDIxMiksCisJSU5UQ19JUlEoU1NVMSwgMjEzKSwKIAlJTlRDX0lSUShTU0kwX1NTSUksIDIxNCksIElOVENfSVJRKFNTSTFfU1NJSSwgMjE1KSwKIAlJTlRDX0lSUShTU0kyX1NTSUksIDIxNiksIElOVENfSVJRKFNTSTNfU1NJSSwgMjE3KSwKLQlJTlRDX0lSUShGTENUTF9GTFNURUksIDIyNCksIElOVENfSVJRKEZMQ1RMX0ZMVEVOREksIDIyNSksCi0JSU5UQ19JUlEoRkxDVExfRkxUUkVRMEksIDIyNiksIElOVENfSVJRKEZMQ1RMX0ZMVFJFUTFJLCAyMjcpLAotCUlOVENfSVJRKFJUQ19BUk0sIDIzMSksIElOVENfSVJRKFJUQ19QUkQsIDIzMiksCi0JSU5UQ19JUlEoUlRDX0NVUCwgMjMzKSwKLQlJTlRDX0lSUShSQ0FOMF9FUlMsIDIzNCksIElOVENfSVJRKFJDQU4wX09WUiwgMjM1KSwKLQlJTlRDX0lSUShSQ0FOMF9STTAsIDIzNiksIElOVENfSVJRKFJDQU4wX1JNMSwgMjM3KSwKLQlJTlRDX0lSUShSQ0FOMF9TTEUsIDIzOCksCi0JSU5UQ19JUlEoUkNBTjFfRVJTLCAyMzkpLCBJTlRDX0lSUShSQ0FOMV9PVlIsIDI0MCksCi0JSU5UQ19JUlEoUkNBTjFfUk0wLCAyNDEpLCBJTlRDX0lSUShSQ0FOMV9STTEsIDI0MiksCi0JSU5UQ19JUlEoUkNBTjFfU0xFLCAyNDMpLAorCUlOVENfSVJRKEZMQ1RMLCAyMjQpLCBJTlRDX0lSUShGTENUTCwgMjI1KSwKKwlJTlRDX0lSUShGTENUTCwgMjI2KSwgSU5UQ19JUlEoRkxDVEwsIDIyNyksCisJSU5UQ19JUlEoUlRDLCAyMzEpLCBJTlRDX0lSUShSVEMsIDIzMiksCisJSU5UQ19JUlEoUlRDLCAyMzMpLAorCUlOVENfSVJRKFJDQU4wLCAyMzQpLCBJTlRDX0lSUShSQ0FOMCwgMjM1KSwKKwlJTlRDX0lSUShSQ0FOMCwgMjM2KSwgSU5UQ19JUlEoUkNBTjAsIDIzNyksCisJSU5UQ19JUlEoUkNBTjAsIDIzOCksCisJSU5UQ19JUlEoUkNBTjEsIDIzOSksIElOVENfSVJRKFJDQU4xLCAyNDApLAorCUlOVENfSVJRKFJDQU4xLCAyNDEpLCBJTlRDX0lSUShSQ0FOMSwgMjQyKSwKKwlJTlRDX0lSUShSQ0FOMSwgMjQzKSwKIAogCS8qIFNINzI2My1zcGVjaWZpYyB0cmFzaCAqLwogI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDcyNjMKLQlJTlRDX0lSUShST01ERUNfSVNZLCAyMTgpLCBJTlRDX0lSUShST01ERUNfSUVSUiwgMjE5KSwKLQlJTlRDX0lSUShST01ERUNfSUFSRywgMjIwKSwgSU5UQ19JUlEoUk9NREVDX0lTRUMsIDIyMSksCi0JSU5UQ19JUlEoUk9NREVDX0lCVUYsIDIyMiksIElOVENfSVJRKFJPTURFQ19JUkVBRFksIDIyMyksCisJSU5UQ19JUlEoUk9NREVDLCAyMTgpLCBJTlRDX0lSUShST01ERUMsIDIxOSksCisJSU5UQ19JUlEoUk9NREVDLCAyMjApLCBJTlRDX0lSUShST01ERUMsIDIyMSksCisJSU5UQ19JUlEoUk9NREVDLCAyMjIpLCBJTlRDX0lSUShST01ERUMsIDIyMyksCiAKLQlJTlRDX0lSUShTREhJMywgMjI4KSwgSU5UQ19JUlEoU0RISTAsIDIyOSksIElOVENfSVJRKFNESEkxLCAyMzApLAorCUlOVENfSVJRKFNESEksIDIyOCksIElOVENfSVJRKFNESEksIDIyOSksCisJSU5UQ19JUlEoU0RISSwgMjMwKSwKIAotCUlOVENfSVJRKFNSQ19PVkYsIDI0NCksIElOVENfSVJRKFNSQ19PREZJLCAyNDUpLAotCUlOVENfSVJRKFNSQ19JREVJLCAyNDYpLAorCUlOVENfSVJRKFNSQywgMjQ0KSwgSU5UQ19JUlEoU1JDLCAyNDUpLAorCUlOVENfSVJRKFNSQywgMjQ2KSwKIAogCUlOVENfSVJRKElFQkksIDI0NyksCiAjZW5kaWYKQEAgLTE1NCw1MCArMTMyLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewogCUlOVENfR1JPVVAoUElOVCwgUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsCiAJCSAgIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3KSwKLQlJTlRDX0dST1VQKERNQUMwLCBETUFDMF9ERUksIERNQUMwX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQzFfREVJLCBETUFDMV9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzIsIERNQUMyX0RFSSwgRE1BQzJfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMzLCBETUFDM19ERUksIERNQUMzX0hFSSksCi0JSU5UQ19HUk9VUChETUFDNCwgRE1BQzRfREVJLCBETUFDNF9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzUsIERNQUM1X0RFSSwgRE1BQzVfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM2LCBETUFDNl9ERUksIERNQUM2X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNywgRE1BQzdfREVJLCBETUFDN19IRUkpLAotCUlOVENfR1JPVVAoTVRVMF9BQkNELCBNVFUyX1RHSTBBLCBNVFUyX1RHSTBCLCBNVFUyX1RHSTBDLCBNVFUyX1RHSTBEKSwKLQlJTlRDX0dST1VQKE1UVTBfVkVGLCBNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGKSwKLQlJTlRDX0dST1VQKE1UVTFfQUIsIE1UVTJfVEdJMUEsIE1UVTJfVEdJMUIpLAotCUlOVENfR1JPVVAoTVRVMV9WVSwgTVRVMl9UQ0kxViwgTVRVMl9UQ0kxVSksCi0JSU5UQ19HUk9VUChNVFUyX0FCLCBNVFUyX1RHSTJBLCBNVFUyX1RHSTJCKSwKLQlJTlRDX0dST1VQKE1UVTJfVlUsIE1UVTJfVENJMlYsIE1UVTJfVENJMlUpLAotCUlOVENfR1JPVVAoTVRVM19BQkNELCBNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNEKSwKLQlJTlRDX0dST1VQKE1UVTRfQUJDRCwgTVRVMl9UR0k0QSwgTVRVMl9UR0k0QiwgTVRVMl9UR0k0QywgTVRVMl9UR0k0RCksCi0JSU5UQ19HUk9VUChJSUMzMCwgSUlDMzBfU1RQSSwgSUlDMzBfTkFLSSwgSUlDMzBfUlhJLCBJSUMzMF9UWEksCi0JCSAgIElJQzMwX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMSwgSUlDMzFfU1RQSSwgSUlDMzFfTkFLSSwgSUlDMzFfUlhJLCBJSUMzMV9UWEksCi0JCSAgIElJQzMxX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMiwgSUlDMzJfU1RQSSwgSUlDMzJfTkFLSSwgSUlDMzJfUlhJLCBJSUMzMl9UWEksCi0JCSAgIElJQzMyX1RFSSksCi0JSU5UQ19HUk9VUChJSUMzMywgSUlDMzNfU1RQSSwgSUlDMzNfTkFLSSwgSUlDMzNfUlhJLCBJSUMzM19UWEksCi0JCSAgIElJQzMzX1RFSSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMywgU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJKSwKLQlJTlRDX0dST1VQKFNTVTAsIFNTVTBfU1NFUkksIFNTVTBfU1NSWEksIFNTVTBfU1NUWEkpLAotCUlOVENfR1JPVVAoU1NVMSwgU1NVMV9TU0VSSSwgU1NVMV9TU1JYSSwgU1NVMV9TU1RYSSksCi0JSU5UQ19HUk9VUChGTENUTCwgRkxDVExfRkxTVEVJLCBGTENUTF9GTFRFTkRJLCBGTENUTF9GTFRSRVEwSSwKLQkJICAgRkxDVExfRkxUUkVRMUkpLAotCUlOVENfR1JPVVAoUlRDLCBSVENfQVJNLCBSVENfUFJELCBSVENfQ1VQKSwKLQlJTlRDX0dST1VQKFJDQU4wLCBSQ0FOMF9FUlMsIFJDQU4wX09WUiwgUkNBTjBfUk0wLCBSQ0FOMF9STTEsCi0JCSAgIFJDQU4wX1NMRSksCi0JSU5UQ19HUk9VUChSQ0FOMSwgUkNBTjFfRVJTLCBSQ0FOMV9PVlIsIFJDQU4xX1JNMCwgUkNBTjFfUk0xLAotCQkgICBSQ0FOMV9TTEUpLAotCi0jaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzI2MwotCUlOVENfR1JPVVAoUk9NREVDLCBST01ERUNfSVNZLCBST01ERUNfSUVSUiwgUk9NREVDX0lBUkcsCi0JCSAgIFJPTURFQ19JU0VDLCBST01ERUNfSUJVRiwgUk9NREVDX0lSRUFEWSksCi0JSU5UQ19HUk9VUChTREhJLCBTREhJMywgU0RISTAsIFNESEkxKSwKLQlJTlRDX0dST1VQKFNSQywgU1JDX09WRiwgU1JDX09ERkksIFNSQ19JREVJKSwKLSNlbmRpZgogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKQEAgLTI0MiwyMiArMTc2LDIyIEBACiAJCS5tYXBiYXNlCT0gMHhmZmZlODAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDE5MywgMTk0LCAxOTUsIDE5MiB9LAorCQkuaXJxcwkJPSAgeyAxOTIsIDE5MiwgMTkyLCAxOTIgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlODgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDE5NywgMTk4LCAxOTksIDE5NiB9LAorCQkuaXJxcwkJPSAgeyAxOTYsIDE5NiwgMTk2LCAxOTYgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDIwMSwgMjAyLCAyMDMsIDIwMCB9LAorCQkuaXJxcwkJPSAgeyAyMDAsIDIwMCwgMjAwLCAyMDAgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlOTgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDIwNSwgMjA2LCAyMDcsIDIwNCB9LAorCQkuaXJxcwkJPSAgeyAyMDQsIDIwNCwgMjA0LCAyMDQgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtMjc4LDE3ICsyMTIsNyBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIzMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS8qIENhcnJ5IElSUSAqLwotCQkuc3RhcnQJPSAyMzMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjMxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMmEvc2V0dXAtc2g3MjA2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYwppbmRleCBlNmQ0ZWM0Li5jNDZhODM1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gyYS9zZXR1cC1zaDcyMDYuYwpAQCAtMiw2ICsyLDcgQEAKICAqIFNINzIwNiBTZXR1cAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFlvc2hpbm9yaSBTYXRvCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKQEAgLTE5LDM0ICsyMCwyMyBAQAogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCiAJUElOVDAsIFBJTlQxLCBQSU5UMiwgUElOVDMsIFBJTlQ0LCBQSU5UNSwgUElOVDYsIFBJTlQ3LAogCUFEQ19BREkwLCBBRENfQURJMSwKLQlETUFDMF9ERUksIERNQUMwX0hFSSwgRE1BQzFfREVJLCBETUFDMV9IRUksCi0JRE1BQzJfREVJLCBETUFDMl9IRUksIERNQUMzX0RFSSwgRE1BQzNfSEVJLAotCURNQUM0X0RFSSwgRE1BQzRfSEVJLCBETUFDNV9ERUksIERNQUM1X0hFSSwKLQlETUFDNl9ERUksIERNQUM2X0hFSSwgRE1BQzdfREVJLCBETUFDN19IRUksCi0JQ01UMCwgQ01UMSwgQlNDLCBXRFQsCi0JTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCwKLQlNVFUyX1RDSTBWLCBNVFUyX1RHSTBFLCBNVFUyX1RHSTBGLAotCU1UVTJfVEdJMUEsIE1UVTJfVEdJMUIsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUsCi0JTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiwgTVRVMl9UQ0kyViwgTVRVMl9UQ0kyVSwKLQlNVFUyX1RHSTNBLCBNVFUyX1RHSTNCLCBNVFUyX1RHSTNDLCBNVFUyX1RHSTNELCBNVFUyX1RDSTNWLAotCU1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQsIE1UVTJfVENJNFYsCi0JTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VywKLQlQT0UyX09FSTEsIFBPRTJfT0VJMiwKLQlNVFUyU19UR0kzQSwgTVRVMlNfVEdJM0IsIE1UVTJTX1RHSTNDLCBNVFUyU19UR0kzRCwgTVRVMlNfVENJM1YsCi0JTVRVMlNfVEdJNEEsIE1UVTJTX1RHSTRCLCBNVFUyU19UR0k0QywgTVRVMlNfVEdJNEQsIE1UVTJTX1RDSTRWLAotCU1UVTJTX1RHSTVVLCBNVFUyU19UR0k1ViwgTVRVMlNfVEdJNVcsCi0JUE9FMl9PRUkzLAotCUlJQzNfU1RQSSwgSUlDM19OQUtJLCBJSUMzX1JYSSwgSUlDM19UWEksIElJQzNfVEVJLAotCVNDSUYwX0JSSSwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSwKLQlTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEksCi0JU0NJRjJfQlJJLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfVFhJLAotCVNDSUYzX0JSSSwgU0NJRjNfRVJJLCBTQ0lGM19SWEksIFNDSUYzX1RYSSwKIAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlQSU5ULCBETUFDMCwgRE1BQzEsIERNQUMyLCBETUFDMywgRE1BQzQsIERNQUM1LCBETUFDNiwgRE1BQzcsCisJRE1BQzAsIERNQUMxLCBETUFDMiwgRE1BQzMsIERNQUM0LCBETUFDNSwgRE1BQzYsIERNQUM3LAorCiAJTVRVMF9BQkNELCBNVFUwX1ZFRiwgTVRVMV9BQiwgTVRVMV9WVSwgTVRVMl9BQiwgTVRVMl9WVSwKIAlNVFUzX0FCQ0QsIE1UVTRfQUJDRCwgTVRVNSwgUE9FMl8xMiwgTVRVM1NfQUJDRCwgTVRVNFNfQUJDRCwgTVRVNVMsCi0JSUlDMywgU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCisJSUlDMywKKworCUNNVDAsIENNVDEsIEJTQywgV0RULAorCisJTVRVMl9UQ0kzViwgTVRVMl9UQ0k0ViwgTVRVMlNfVENJM1YsIE1UVTJTX1RDSTRWLAorCisJUE9FMl9PRUkzLAorCisJU0NJRjAsIFNDSUYxLCBTQ0lGMiwgU0NJRjMsCisKKwkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCisJUElOVCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewpAQCAtNTksODYgKzQ5LDU4IEBACiAJSU5UQ19JUlEoUElOVDQsIDg0KSwgSU5UQ19JUlEoUElOVDUsIDg1KSwKIAlJTlRDX0lSUShQSU5UNiwgODYpLCBJTlRDX0lSUShQSU5UNywgODcpLAogCUlOVENfSVJRKEFEQ19BREkwLCA5MiksIElOVENfSVJRKEFEQ19BREkxLCA5NiksCi0JSU5UQ19JUlEoRE1BQzBfREVJLCAxMDgpLCBJTlRDX0lSUShETUFDMF9IRUksIDEwOSksCi0JSU5UQ19JUlEoRE1BQzFfREVJLCAxMTIpLCBJTlRDX0lSUShETUFDMV9IRUksIDExMyksCi0JSU5UQ19JUlEoRE1BQzJfREVJLCAxMTYpLCBJTlRDX0lSUShETUFDMl9IRUksIDExNyksCi0JSU5UQ19JUlEoRE1BQzNfREVJLCAxMjApLCBJTlRDX0lSUShETUFDM19IRUksIDEyMSksCi0JSU5UQ19JUlEoRE1BQzRfREVJLCAxMjQpLCBJTlRDX0lSUShETUFDNF9IRUksIDEyNSksCi0JSU5UQ19JUlEoRE1BQzVfREVJLCAxMjgpLCBJTlRDX0lSUShETUFDNV9IRUksIDEyOSksCi0JSU5UQ19JUlEoRE1BQzZfREVJLCAxMzIpLCBJTlRDX0lSUShETUFDNl9IRUksIDEzMyksCi0JSU5UQ19JUlEoRE1BQzdfREVJLCAxMzYpLCBJTlRDX0lSUShETUFDN19IRUksIDEzNyksCisJSU5UQ19JUlEoRE1BQzAsIDEwOCksIElOVENfSVJRKERNQUMwLCAxMDkpLAorCUlOVENfSVJRKERNQUMxLCAxMTIpLCBJTlRDX0lSUShETUFDMSwgMTEzKSwKKwlJTlRDX0lSUShETUFDMiwgMTE2KSwgSU5UQ19JUlEoRE1BQzIsIDExNyksCisJSU5UQ19JUlEoRE1BQzMsIDEyMCksIElOVENfSVJRKERNQUMzLCAxMjEpLAorCUlOVENfSVJRKERNQUM0LCAxMjQpLCBJTlRDX0lSUShETUFDNCwgMTI1KSwKKwlJTlRDX0lSUShETUFDNSwgMTI4KSwgSU5UQ19JUlEoRE1BQzUsIDEyOSksCisJSU5UQ19JUlEoRE1BQzYsIDEzMiksIElOVENfSVJRKERNQUM2LCAxMzMpLAorCUlOVENfSVJRKERNQUM3LCAxMzYpLCBJTlRDX0lSUShETUFDNywgMTM3KSwKIAlJTlRDX0lSUShDTVQwLCAxNDApLCBJTlRDX0lSUShDTVQxLCAxNDQpLAogCUlOVENfSVJRKEJTQywgMTQ4KSwgSU5UQ19JUlEoV0RULCAxNTIpLAotCUlOVENfSVJRKE1UVTJfVEdJMEEsIDE1NiksIElOVENfSVJRKE1UVTJfVEdJMEIsIDE1NyksCi0JSU5UQ19JUlEoTVRVMl9UR0kwQywgMTU4KSwgSU5UQ19JUlEoTVRVMl9UR0kwRCwgMTU5KSwKLQlJTlRDX0lSUShNVFUyX1RDSTBWLCAxNjApLAotCUlOVENfSVJRKE1UVTJfVEdJMEUsIDE2MSksIElOVENfSVJRKE1UVTJfVEdJMEYsIDE2MiksCi0JSU5UQ19JUlEoTVRVMl9UR0kxQSwgMTY0KSwgSU5UQ19JUlEoTVRVMl9UR0kxQiwgMTY1KSwKLQlJTlRDX0lSUShNVFUyX1RDSTFWLCAxNjgpLCBJTlRDX0lSUShNVFUyX1RDSTFVLCAxNjkpLAotCUlOVENfSVJRKE1UVTJfVEdJMkEsIDE3MiksIElOVENfSVJRKE1UVTJfVEdJMkIsIDE3MyksCi0JSU5UQ19JUlEoTVRVMl9UQ0kyViwgMTc2KSwgSU5UQ19JUlEoTVRVMl9UQ0kyVSwgMTc3KSwKLQlJTlRDX0lSUShNVFUyX1RHSTNBLCAxODApLCBJTlRDX0lSUShNVFUyX1RHSTNCLCAxODEpLAotCUlOVENfSVJRKE1UVTJfVEdJM0MsIDE4MiksIElOVENfSVJRKE1UVTJfVEdJM0QsIDE4MyksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNTYpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE1NyksCisJSU5UQ19JUlEoTVRVMF9BQkNELCAxNTgpLCBJTlRDX0lSUShNVFUwX0FCQ0QsIDE1OSksCisJSU5UQ19JUlEoTVRVMF9WRUYsIDE2MCksIElOVENfSVJRKE1UVTBfVkVGLCAxNjEpLAorCUlOVENfSVJRKE1UVTBfVkVGLCAxNjIpLAorCUlOVENfSVJRKE1UVTFfQUIsIDE2NCksIElOVENfSVJRKE1UVTFfQUIsIDE2NSksCisJSU5UQ19JUlEoTVRVMV9WVSwgMTY4KSwgSU5UQ19JUlEoTVRVMV9WVSwgMTY5KSwKKwlJTlRDX0lSUShNVFUyX0FCLCAxNzIpLCBJTlRDX0lSUShNVFUyX0FCLCAxNzMpLAorCUlOVENfSVJRKE1UVTJfVlUsIDE3NiksIElOVENfSVJRKE1UVTJfVlUsIDE3NyksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxODApLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE4MSksCisJSU5UQ19JUlEoTVRVM19BQkNELCAxODIpLCBJTlRDX0lSUShNVFUzX0FCQ0QsIDE4MyksCiAJSU5UQ19JUlEoTVRVMl9UQ0kzViwgMTg0KSwKLQlJTlRDX0lSUShNVFUyX1RHSTRBLCAxODgpLCBJTlRDX0lSUShNVFUyX1RHSTRCLCAxODkpLAotCUlOVENfSVJRKE1UVTJfVEdJNEMsIDE5MCksIElOVENfSVJRKE1UVTJfVEdJNEQsIDE5MSksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxODgpLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE4OSksCisJSU5UQ19JUlEoTVRVNF9BQkNELCAxOTApLCBJTlRDX0lSUShNVFU0X0FCQ0QsIDE5MSksCiAJSU5UQ19JUlEoTVRVMl9UQ0k0ViwgMTkyKSwKLQlJTlRDX0lSUShNVFUyX1RHSTVVLCAxOTYpLCBJTlRDX0lSUShNVFUyX1RHSTVWLCAxOTcpLAotCUlOVENfSVJRKE1UVTJfVEdJNVcsIDE5OCksCi0JSU5UQ19JUlEoUE9FMl9PRUkxLCAyMDApLCBJTlRDX0lSUShQT0UyX09FSTIsIDIwMSksCi0JSU5UQ19JUlEoTVRVMlNfVEdJM0EsIDIwNCksIElOVENfSVJRKE1UVTJTX1RHSTNCLCAyMDUpLAotCUlOVENfSVJRKE1UVTJTX1RHSTNDLCAyMDYpLCBJTlRDX0lSUShNVFUyU19UR0kzRCwgMjA3KSwKKwlJTlRDX0lSUShNVFU1LCAxOTYpLCBJTlRDX0lSUShNVFU1LCAxOTcpLAorCUlOVENfSVJRKE1UVTUsIDE5OCksCisJSU5UQ19JUlEoUE9FMl8xMiwgMjAwKSwgSU5UQ19JUlEoUE9FMl8xMiwgMjAxKSwKKwlJTlRDX0lSUShNVFUzU19BQkNELCAyMDQpLCBJTlRDX0lSUShNVFUzU19BQkNELCAyMDUpLAorCUlOVENfSVJRKE1UVTNTX0FCQ0QsIDIwNiksIElOVENfSVJRKE1UVTNTX0FCQ0QsIDIwNyksCiAJSU5UQ19JUlEoTVRVMlNfVENJM1YsIDIwOCksCi0JSU5UQ19JUlEoTVRVMlNfVEdJNEEsIDIxMiksIElOVENfSVJRKE1UVTJTX1RHSTRCLCAyMTMpLAotCUlOVENfSVJRKE1UVTJTX1RHSTRDLCAyMTQpLCBJTlRDX0lSUShNVFUyU19UR0k0RCwgMjE1KSwKKwlJTlRDX0lSUShNVFU0U19BQkNELCAyMTIpLCBJTlRDX0lSUShNVFU0U19BQkNELCAyMTMpLAorCUlOVENfSVJRKE1UVTRTX0FCQ0QsIDIxNCksIElOVENfSVJRKE1UVTRTX0FCQ0QsIDIxNSksCiAJSU5UQ19JUlEoTVRVMlNfVENJNFYsIDIxNiksCi0JSU5UQ19JUlEoTVRVMlNfVEdJNVUsIDIyMCksIElOVENfSVJRKE1UVTJTX1RHSTVWLCAyMjEpLAotCUlOVENfSVJRKE1UVTJTX1RHSTVXLCAyMjIpLAorCUlOVENfSVJRKE1UVTVTLCAyMjApLCBJTlRDX0lSUShNVFU1UywgMjIxKSwKKwlJTlRDX0lSUShNVFU1UywgMjIyKSwKIAlJTlRDX0lSUShQT0UyX09FSTMsIDIyNCksCi0JSU5UQ19JUlEoSUlDM19TVFBJLCAyMjgpLCBJTlRDX0lSUShJSUMzX05BS0ksIDIyOSksCi0JSU5UQ19JUlEoSUlDM19SWEksIDIzMCksIElOVENfSVJRKElJQzNfVFhJLCAyMzEpLAotCUlOVENfSVJRKElJQzNfVEVJLCAyMzIpLAotCUlOVENfSVJRKFNDSUYwX0JSSSwgMjQwKSwgSU5UQ19JUlEoU0NJRjBfRVJJLCAyNDEpLAotCUlOVENfSVJRKFNDSUYwX1JYSSwgMjQyKSwgSU5UQ19JUlEoU0NJRjBfVFhJLCAyNDMpLAotCUlOVENfSVJRKFNDSUYxX0JSSSwgMjQ0KSwgSU5UQ19JUlEoU0NJRjFfRVJJLCAyNDUpLAotCUlOVENfSVJRKFNDSUYxX1JYSSwgMjQ2KSwgSU5UQ19JUlEoU0NJRjFfVFhJLCAyNDcpLAotCUlOVENfSVJRKFNDSUYyX0JSSSwgMjQ4KSwgSU5UQ19JUlEoU0NJRjJfRVJJLCAyNDkpLAotCUlOVENfSVJRKFNDSUYyX1JYSSwgMjUwKSwgSU5UQ19JUlEoU0NJRjJfVFhJLCAyNTEpLAotCUlOVENfSVJRKFNDSUYzX0JSSSwgMjUyKSwgSU5UQ19JUlEoU0NJRjNfRVJJLCAyNTMpLAotCUlOVENfSVJRKFNDSUYzX1JYSSwgMjU0KSwgSU5UQ19JUlEoU0NJRjNfVFhJLCAyNTUpLAorCUlOVENfSVJRKElJQzMsIDIyOCksIElOVENfSVJRKElJQzMsIDIyOSksCisJSU5UQ19JUlEoSUlDMywgMjMwKSwgSU5UQ19JUlEoSUlDMywgMjMxKSwKKwlJTlRDX0lSUShJSUMzLCAyMzIpLAorCUlOVENfSVJRKFNDSUYwLCAyNDApLCBJTlRDX0lSUShTQ0lGMCwgMjQxKSwKKwlJTlRDX0lSUShTQ0lGMCwgMjQyKSwgSU5UQ19JUlEoU0NJRjAsIDI0MyksCisJSU5UQ19JUlEoU0NJRjEsIDI0NCksIElOVENfSVJRKFNDSUYxLCAyNDUpLAorCUlOVENfSVJRKFNDSUYxLCAyNDYpLCBJTlRDX0lSUShTQ0lGMSwgMjQ3KSwKKwlJTlRDX0lSUShTQ0lGMiwgMjQ4KSwgSU5UQ19JUlEoU0NJRjIsIDI0OSksCisJSU5UQ19JUlEoU0NJRjIsIDI1MCksIElOVENfSVJRKFNDSUYyLCAyNTEpLAorCUlOVENfSVJRKFNDSUYzLCAyNTIpLCBJTlRDX0lSUShTQ0lGMywgMjUzKSwKKwlJTlRDX0lSUShTQ0lGMywgMjU0KSwgSU5UQ19JUlEoU0NJRjMsIDI1NSksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFBJTlQsIFBJTlQwLCBQSU5UMSwgUElOVDIsIFBJTlQzLAogCQkgICBQSU5UNCwgUElOVDUsIFBJTlQ2LCBQSU5UNyksCi0JSU5UQ19HUk9VUChETUFDMCwgRE1BQzBfREVJLCBETUFDMF9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RFSSwgRE1BQzFfSEVJKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDMl9ERUksIERNQUMyX0hFSSksCi0JSU5UQ19HUk9VUChETUFDMywgRE1BQzNfREVJLCBETUFDM19IRUkpLAotCUlOVENfR1JPVVAoRE1BQzQsIERNQUM0X0RFSSwgRE1BQzRfSEVJKSwKLQlJTlRDX0dST1VQKERNQUM1LCBETUFDNV9ERUksIERNQUM1X0hFSSksCi0JSU5UQ19HUk9VUChETUFDNiwgRE1BQzZfREVJLCBETUFDNl9IRUkpLAotCUlOVENfR1JPVVAoRE1BQzcsIERNQUM3X0RFSSwgRE1BQzdfSEVJKSwKLQlJTlRDX0dST1VQKE1UVTBfQUJDRCwgTVRVMl9UR0kwQSwgTVRVMl9UR0kwQiwgTVRVMl9UR0kwQywgTVRVMl9UR0kwRCksCi0JSU5UQ19HUk9VUChNVFUwX1ZFRiwgTVRVMl9UQ0kwViwgTVRVMl9UR0kwRSwgTVRVMl9UR0kwRiksCi0JSU5UQ19HUk9VUChNVFUxX0FCLCBNVFUyX1RHSTFBLCBNVFUyX1RHSTFCKSwKLQlJTlRDX0dST1VQKE1UVTFfVlUsIE1UVTJfVENJMVYsIE1UVTJfVENJMVUpLAotCUlOVENfR1JPVVAoTVRVMl9BQiwgTVRVMl9UR0kyQSwgTVRVMl9UR0kyQiksCi0JSU5UQ19HUk9VUChNVFUyX1ZVLCBNVFUyX1RDSTJWLCBNVFUyX1RDSTJVKSwKLQlJTlRDX0dST1VQKE1UVTNfQUJDRCwgTVRVMl9UR0kzQSwgTVRVMl9UR0kzQiwgTVRVMl9UR0kzQywgTVRVMl9UR0kzRCksCi0JSU5UQ19HUk9VUChNVFU0X0FCQ0QsIE1UVTJfVEdJNEEsIE1UVTJfVEdJNEIsIE1UVTJfVEdJNEMsIE1UVTJfVEdJNEQpLAotCUlOVENfR1JPVVAoTVRVNSwgTVRVMl9UR0k1VSwgTVRVMl9UR0k1ViwgTVRVMl9UR0k1VyksCi0JSU5UQ19HUk9VUChQT0UyXzEyLCBQT0UyX09FSTEsIFBPRTJfT0VJMiksCi0JSU5UQ19HUk9VUChNVFUzU19BQkNELCBNVFUyU19UR0kzQSwgTVRVMlNfVEdJM0IsCi0JCSAgIE1UVTJTX1RHSTNDLCBNVFUyU19UR0kzRCksCi0JSU5UQ19HUk9VUChNVFU0U19BQkNELCBNVFUyU19UR0k0QSwgTVRVMlNfVEdJNEIsCi0JCSAgIE1UVTJTX1RHSTRDLCBNVFUyU19UR0k0RCksCi0JSU5UQ19HUk9VUChNVFU1UywgTVRVMlNfVEdJNVUsIE1UVTJTX1RHSTVWLCBNVFUyU19UR0k1VyksCi0JSU5UQ19HUk9VUChJSUMzLCBJSUMzX1NUUEksIElJQzNfTkFLSSwgSUlDM19SWEksIElJQzNfVFhJLCBJSUMzX1RFSSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfQlJJLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9CUkksIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoU0NJRjIsIFNDSUYyX0JSSSwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMywgU0NJRjNfQlJJLCBTQ0lGM19FUkksIFNDSUYzX1JYSSwgU0NJRjNfVFhJKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xNzQsMjIgKzEzNiwyMiBAQAogCQkubWFwYmFzZQk9IDB4ZmZmZTgwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyNDEsIDI0MiwgMjQzLCAyNDAgfSwKKwkJLmlycXMJCT0geyAyNDAsIDI0MCwgMjQwLCAyNDAgfSwKIAl9LCB7CiAJCS5tYXBiYXNlCT0gMHhmZmZlODgwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9ICB7IDI0NSwgMjQ2LCAyNDcsIDI0NCB9LAorCQkuaXJxcwkJPSB7IDI0NCwgMjQ0LCAyNDQsIDI0NCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZmU5MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gIHsgMjQ5LCAyNTAsIDI1MSwgMjQ4IH0sCisJCS5pcnFzCQk9IHsgMjQ4LCAyNDgsIDI0OCwgMjQ4IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZmZTk4MDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSAgeyAyNTMsIDI1NCwgMjU1LCAyNTIgfSwKKwkJLmlycXMJCT0geyAyNTIsIDI1MiwgMjUyLCAyNTIgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKaW5kZXggZTA3YzY5ZS4uZWNhYjI3NCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCkBAIC00LDYgKzQsOCBAQAogCiBvYmoteQk6PSBleC5vIHByb2JlLm8gZW50cnkubyBzZXR1cC1zaDMubwogCitvYmotJChDT05GSUdfSElCRVJOQVRJT04pCQkrPSBzd3N1c3AubworCiAjIENQVSBzdWJ0eXBlIHNldHVwCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQkrPSBzZXR1cC1zaDc3MDUubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikJKz0gc2V0dXAtc2g3NzB4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZW50cnkuUwppbmRleCBiNDEwNmQwLi41NWRhMGZmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2VudHJ5LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9lbnRyeS5TCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogI2luY2x1ZGUgPGNwdS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAKICEgTk9URToKICEgR05VIGFzIChhcyBvZiAyLjkuMSkgY2hhbmdlcyBiZi9zIGludG8gYnQvcyBhbmQgYnJhLCB3aGVuIHRoZSBhZGRyZXNzCkBAIC0xODcsNDQgKzE4OCwzNSBAQAogI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCiAJLyogVW53aW5kIHRoZSBzdGFjayBhbmQgam1wIHRvIHRoZSBkZWJ1ZyBlbnRyeSAqLwogRU5UUlkoc2hfYmlvc19oYW5kbGVyKQotCW1vdi5sCUByMTUrLCByMAotCW1vdi5sCUByMTUrLCByMQotCW1vdi5sCUByMTUrLCByMgotCW1vdi5sCUByMTUrLCByMwotCW1vdi5sCUByMTUrLCByNAotCW1vdi5sCUByMTUrLCByNQotCW1vdi5sCUByMTUrLCByNgotCW1vdi5sCUByMTUrLCByNwotCXN0YwlzciwgcjgKLQltb3YubAkxZiwgcjkJCQkhIEJMID0xLCBSQj0xLCBJTUFTSz0weDBGCi0Jb3IJcjksIHI4Ci0JbGRjCXI4LCBzcgkJCSEgaGVyZSwgY2hhbmdlIHRoZSByZWdpc3RlciBiYW5rCi0JbW92LmwJQHIxNSssIHI4Ci0JbW92LmwJQHIxNSssIHI5Ci0JbW92LmwJQHIxNSssIHIxMAotCW1vdi5sCUByMTUrLCByMTEKLQltb3YubAlAcjE1KywgcjEyCi0JbW92LmwJQHIxNSssIHIxMwotCW1vdi5sCUByMTUrLCByMTQKLQltb3YubAlAcjE1KywgazAKLQlsZGMubAlAcjE1Kywgc3BjCi0JbGRzLmwJQHIxNSssIHByCi0JbW92LmwJQHIxNSssIGsxCi0JbGRjLmwJQHIxNSssIGdicgotCWxkcy5sCUByMTUrLCBtYWNoCi0JbGRzLmwJQHIxNSssIG1hY2wKLQltb3YJazAsIHIxNQorCW1vdi5sCTFmLCByOAorCWJzcglyZXN0b3JlX3JlZ3MKKwkgbm9wCisKKwlsZHMJazIsIHByCQkJISByZXN0b3JlIHByCisJbW92CWs0LCByMTUKIAkhCiAJbW92LmwJMmYsIGswCiAJbW92LmwJQGswLCBrMAogCWptcAlAazAKLQkgbGRjCWsxLCBzc3IKKwkgbGRjCWszLCBzc3IKIAkuYWxpZ24JMgogMToJLmxvbmcJMHgzMDAwMDBmMAogMjoJLmxvbmcJZ2RiX3Zicl92ZWN0b3IKICNlbmRpZiAvKiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyAqLwogCi1yZXN0b3JlX2FsbDoKKyEgcmVzdG9yZV9yZWdzKCkKKyEgLSByZXN0b3JlIHIwLCByMSwgcjIsIHIzLCByNCwgcjUsIHI2LCByNyBmcm9tIHRoZSBzdGFjaworISAtIHN3aXRjaCBiYW5rCishIC0gcmVzdG9yZSByOCwgcjksIHIxMCwgcjExLCByMTIsIHIxMywgcjE0LCByMTUgZnJvbSB0aGUgc3RhY2sKKyEgLSByZXN0b3JlIHNwYywgcHIqLCBzc3IsIGdiciwgbWFjaCwgbWFjbCwgc2tpcCBkZWZhdWx0IHRyYQorISBrMiByZXR1cm5zIG9yaWdpbmFsIHByCishIGszIHJldHVybnMgb3JpZ2luYWwgc3IKKyEgazQgcmV0dXJucyBvcmlnaW5hbCBzdGFjayBwb2ludGVyCishIHI4IHBhc3NlcyBTUiBiaXRtYXNrLCBvdmVyd3JpdHRlbiB3aXRoIHJlc3RvcmVkIGRhdGEgb24gcmV0dXJuCishIHI5IHRyYXNoZWQKKyEgQkw9MCBvbiBlbnRyeSwgb24gZXhpdCBCTD0xIChkZXBlbmRpbmcgb24gcjgpLgorCitFTlRSWShyZXN0b3JlX3JlZ3MpCiAJbW92LmwJQHIxNSssIHIwCiAJbW92LmwJQHIxNSssIHIxCiAJbW92LmwJQHIxNSssIHIyCkBAIC0yMzQsMTAgKzIyNiw5IEBACiAJbW92LmwJQHIxNSssIHI2CiAJbW92LmwJQHIxNSssIHI3CiAJIQotCXN0YwlzciwgcjgKLQltb3YubAk3ZiwgcjkKLQlvcglyOSwgcjgJCQkhIEJMID0xLCBSQj0xCi0JbGRjCXI4LCBzcgkJCSEgaGVyZSwgY2hhbmdlIHRoZSByZWdpc3RlciBiYW5rCisJc3RjCXNyLCByOQorCW9yCXI4LCByOQorCWxkYwlyOSwgc3IKIAkhCiAJbW92LmwJQHIxNSssIHI4CiAJbW92LmwJQHIxNSssIHI5CkBAIC0yNDgsMTIgKzIzOSwyMCBAQAogCW1vdi5sCUByMTUrLCByMTQKIAltb3YubAlAcjE1KywgazQJCSEgb3JpZ2luYWwgc3RhY2sgcG9pbnRlcgogCWxkYy5sCUByMTUrLCBzcGMKLQlsZHMubAlAcjE1KywgcHIKKwltb3YubAlAcjE1KywgazIJCSEgb3JpZ2luYWwgUFIKIAltb3YubAlAcjE1KywgazMJCSEgb3JpZ2luYWwgU1IKIAlsZGMubAlAcjE1KywgZ2JyCiAJbGRzLmwJQHIxNSssIG1hY2gKIAlsZHMubAlAcjE1KywgbWFjbAotCWFkZAkjNCwgcjE1CQkJISBTa2lwIHN5c2NhbGwgbnVtYmVyCisJcnRzCisJIGFkZAkjNCwgcjE1CQkJISBTa2lwIHN5c2NhbGwgbnVtYmVyCisKK3Jlc3RvcmVfYWxsOgorCW1vdi5sCTdmLCByOAorCWJzcglyZXN0b3JlX3JlZ3MKKwkgbm9wCisKKwlsZHMJazIsIHByCQkJISByZXN0b3JlIHByCiAJIQogI2lmZGVmIENPTkZJR19TSF9EU1AKIAltb3YubAlAcjE1KywgazAJCSEgRFNQIG1vZGUgbWFya2VyCkBAIC0yOTQsNyArMjkzLDcgQEAKIAltb3YJIzB4ZjAsIGsxCiAJZXh0dS5iCWsxLCBrMQogCW5vdAlrMSwgazEKLQlhbmQJazEsIGsyCQkJISBNYXNrIG9yaWduYWwgU1IgdmFsdWUKKwlhbmQJazEsIGsyCQkJISBNYXNrIG9yaWdpbmFsIFNSIHZhbHVlCiAJIQogCW1vdglrMywgazAJCQkhIENhbGN1bGF0ZSBJTUFTSy1iaXRzCiAJc2hscjIJazAKQEAgLTMxMyw3ICszMTIsNiBAQAogCW1vdgkjMCwgazEKIAltb3YuYglrMSwgQGswCiAjZW5kaWYKLQltb3YubAlAcjE1KywgazIJCSEgcmVzdG9yZSBFWFBFVlQKIAltb3YJazQsIHIxNQogCXJ0ZQogCSBub3AKQEAgLTMzNiw4MSArMzM0LDU1IEBACiBFTlRSWSh2YnJfYmFzZSkKIAkubG9uZwkwCiAhCishIDB4MTAwOiBHZW5lcmFsIGV4Y2VwdGlvbiB2ZWN0b3IKKyEKIAkuYmFsaWduIAkyNTYsMCwyNTYKIGdlbmVyYWxfZXhjZXB0aW9uOgotCW1vdi5sCTFmLCBrMgotCW1vdi5sCTJmLCBrMwotI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSFgzCi0JbW92LmwJQGsyLCBrMgorI2lmbmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMworCWJyYQloYW5kbGVfZXhjZXB0aW9uCisJIHN0cwlwciwgazMJCSEgc2F2ZSBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMworI2Vsc2UKKwltb3YubAkxZiwgazQKKwltb3YubAlAazQsIGs0CiAKIAkhIElzIEVYUEVWVCBsYXJnZXIgdGhhbiAweDgwMD8KIAltb3YJIzB4OCwgazAKIAlzaGxsOAlrMAotCWNtcC9ocwlrMCwgazIKKwljbXAvaHMJazAsIGs0CiAJYmYJMGYKIAogCSEgdGhlbiBhZGQgMHg1ODAgKGsyIGlzIDB4ZDgwIG9yIDB4ZGEwKQogCW1vdgkjMHg1OCwgazAKIAlzaGxsMglrMAogCXNobGwyCWswCi0JYWRkCWswLCBrMgorCWFkZAlrMCwgazQKIDA6Ci0JYnJhCWhhbmRsZV9leGNlcHRpb24KKwkhIFNldHVwIHN0YWNrIGFuZCBzYXZlIERTUCBjb250ZXh0IChrMCBjb250YWlucyBvcmlnaW5hbCByMTUgb24gcmV0dXJuKQorCWJzcglwcmVwYXJlX3N0YWNrX3NhdmVfZHNwCiAJIG5vcAotI2Vsc2UKLQlicmEJaGFuZGxlX2V4Y2VwdGlvbgotCSBtb3YubAlAazIsIGsyCisKKwkhIFNhdmUgcmVnaXN0ZXJzIC8gU3dpdGNoIHRvIGJhbmsgMAorCW1vdgkJazQsIGsyCQkhIGtlZXAgdmVjdG9yIGluIGsyCisJbW92LmwJMWYsIGs0CQkhIFNSIGJpdHMgdG8gY2xlYXIgaW4gazQKKwlic3IJc2F2ZV9yZWdzCSEgbmVlZHMgb3JpZ2luYWwgcHIgdmFsdWUgaW4gazMKKwkgbm9wCisKKwlicmEJaGFuZGxlX2V4Y2VwdGlvbl9zcGVjaWFsCisJIG5vcAorCisJLmFsaWduCTIKKzE6CS5sb25nCUVYUEVWVAogI2VuZGlmCi0JLmFsaWduCTIKLTE6CS5sb25nCUVYUEVWVAotMjoJLmxvbmcJcmV0X2Zyb21fZXhjZXB0aW9uCi0hCi0hCiAKLQkuYmFsaWduIAkxMDI0LDAsMTAyNAotdGxiX21pc3M6Ci0JbW92LmwJMWYsIGsyCi0JbW92LmwJNGYsIGszCi0JYnJhCWhhbmRsZV9leGNlcHRpb24KLQkgbW92LmwJQGsyLCBrMgotIQotCS5iYWxpZ24gCTUxMiwwLDUxMgotaW50ZXJydXB0OgotCW1vdi5sCTNmLCBrMwotI2lmIGRlZmluZWQoQ09ORklHX0tHREIpCi0JbW92LmwJMmYsIGsyCi0JISBEZWJvdW5jZSAoZmlsdGVyIG5lc3RlZCBOTUkpCi0JbW92LmwJQGsyLCBrMAotCW1vdi5sCTVmLCBrMQotCWNtcC9lcQlrMSwgazAKLQliZgkwZgotCW1vdi5sCTZmLCBrMQotCXRhcy5iCUBrMQotCWJ0CTBmCi0JcnRlCi0JIG5vcAotCS5hbGlnbgkyCi0yOgkubG9uZwlJTlRFVlQKLTU6CS5sb25nCU5NSV9WRUMKLTY6CS5sb25nCWluX25taQotMDoKLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19LR0RCKSAqLwotCWJyYQloYW5kbGVfZXhjZXB0aW9uCi0JIG1vdgkjLTEsIGsyCQkhIGludGVycnVwdCBleGNlcHRpb24gbWFya2VyCishIHByZXBhcmVfc3RhY2tfc2F2ZV9kc3AoKQorISAtIHJvbGwgYmFjayBnUkIKKyEgLSBzd2l0Y2ggdG8ga2VybmVsIHN0YWNrCishIC0gc2F2ZSBEU1AKKyEgazAgcmV0dXJucyBvcmlnaW5hbCBzcCAoYWZ0ZXIgcm9sbCBiYWNrKQorISBrMSB0cmFzaGVkCishIGsyIHRyYXNoZWQKIAotCS5hbGlnbgkyCi0xOgkubG9uZwlFWFBFVlQKLTM6CS5sb25nCXJldF9mcm9tX2lycQotNDoJLmxvbmcJcmV0X2Zyb21fZXhjZXB0aW9uCi0KLSEKLSEKLQkuYWxpZ24JMgotRU5UUlkoaGFuZGxlX2V4Y2VwdGlvbikKLQkhIFVzaW5nIGswLCBrMSBmb3Igc2NyYXRjaCByZWdpc3RlcnMgKHIwX2JhbmsxLCByMV9iYW5rKSwKLQkhIHNhdmUgYWxsIHJlZ2lzdGVycyBvbnRvIHN0YWNrLgotCSEKLQorcHJlcGFyZV9zdGFja19zYXZlX2RzcDoKICNpZmRlZiBDT05GSUdfR1VTQQogCSEgQ2hlY2sgZm9yIHJvbGwgYmFjayBnUkIgKFVzZXIgYW5kIEtlcm5lbCkKIAltb3YJcjE1LCBrMApAQCAtNDMwLDcgKzQwMiw3IEBACiAyOgltb3YJazEsIHIxNQkJISBTUCA9IHIxCiAxOgogI2VuZGlmCi0KKwkhIFN3aXRjaCB0byBrZXJuZWwgc3RhY2sgaWYgbmVlZGVkCiAJc3RjCXNzciwgazAJCSEgSXMgaXQgZnJvbSBrZXJuZWwgc3BhY2U/CiAJc2hsbAlrMAkJISBDaGVjayBNRCBiaXQgKGJpdDMwKSBieSBzaGlmdGluZyBpdCBpbnRvLi4uCiAJc2hsbAlrMAkJISAgICAgICAuLi50aGUgVCBiaXQKQEAgLTQ0MywxOCArNDE1LDE3IEBACiAJYWRkCWN1cnJlbnQsIGsxCiAJbW92CWsxLCByMTUJCSEgY2hhbmdlIHRvIGtlcm5lbCBzdGFjawogCSEKLTE6CW1vdi5sCTJmLCBrMQotCSEKKzE6CiAjaWZkZWYgQ09ORklHX1NIX0RTUAotCW1vdi5sCXIyLCBALXIxNQkJISBTYXZlIHIyLCB3ZSBuZWVkIGFub3RoZXIgcmVnCi0Jc3RjCXNyLCBrNAotCW1vdi5sCTFmLCByMgotCXRzdAlyMiwgazQJCQkhIENoZWNrIGlmIGluIERTUCBtb2RlCi0JbW92LmwJQHIxNSssIHIyCQkhIFJlc3RvcmUgcjIgbm93CisJISBTYXZlIERTUCBjb250ZXh0IGlmIG5lZWRlZAorCXN0YwlzciwgazEKKwltb3YJIzB4MTAsIGsyCisJc2hsbDggICBrMgkJCSEgRFNQPTEgKDB4MDAwMDEwMDApCisJdHN0CWsyLCBrMQkJCSEgQ2hlY2sgaWYgaW4gRFNQIG1vZGUgKHBhc3NlZCBpbiBrMikKIAlidC9zCXNraXBfc2F2ZQotCSBtb3YJIzAsIGs0CQkJISBTZXQgbWFya2VyIGZvciBubyBzdGFjayBmcmFtZQorCSBtb3YJIzAsIGsxCQkJISBTZXQgbWFya2VyIGZvciBubyBzdGFjayBmcmFtZQogCi0JbW92CXIyLCBrNAkJCSEgQmFja3VwIHIyIChpbiBrNCkgZm9yIGxhdGVyCisJbW92CWsyLCBrMQkJCSEgU2F2ZSBoYXMtZnJhbWUgbWFya2VyCiAKIAkhIFNhdmUgRFNQIHJlZ2lzdGVycyBvbiBzdGFjawogCXN0Yy5sCW1vZCwgQC1yMTUKQEAgLTQ3MywzNSArNDQ0LDc0IEBACiAJISBhcyB3ZSdyZSBub3QgYXQgYWxsIGludGVyZXN0ZWQgaW4gc3VwcG9ydGluZyBhbmNpZW50IHRvb2xjaGFpbnMgYXQKIAkhIHRoaXMgcG9pbnQuIC0tIFBGTS4KIAotCW1vdglyMTUsIHIyCisJbW92CXIxNSwgazIKIAkud29yZAkweGY2NTMJCQkhIG1vdnMubAlhMSwgQC1yMgogCS53b3JkCTB4ZjZmMwkJCSEgbW92cy5sCWEwZywgQC1yMgogCS53b3JkCTB4ZjZkMwkJCSEgbW92cy5sCWExZywgQC1yMgogCS53b3JkCTB4ZjZjMwkJCSEgbW92cy5sCW0wLCBALXIyCiAJLndvcmQJMHhmNmUzCQkJISBtb3ZzLmwJbTEsIEAtcjIKLQltb3YJcjIsIHIxNQorCW1vdglrMiwgcjE1CiAKLQltb3YJazQsIHIyCQkJISBSZXN0b3JlIHIyCi0JbW92LmwJMWYsIGs0CQkJISBGb3JjZSBEU1Agc3RhY2sgZnJhbWUKIHNraXBfc2F2ZToKLQltb3YubAlrNCwgQC1yMTUJCSEgUHVzaCBEU1AgbW9kZSBtYXJrZXIgb250byBzdGFjaworCW1vdi5sCWsxLCBALXIxNQkJISBQdXNoIERTUCBtb2RlIG1hcmtlciBvbnRvIHN0YWNrCiAjZW5kaWYKLQkhIFNhdmUgdGhlIHVzZXIgcmVnaXN0ZXJzIG9uIHRoZSBzdGFjay4KLQltb3YubAlrMiwgQC1yMTUJISBFWFBFVlQKKwlydHMKKwkgbm9wCishCishIDB4NDAwOiBJbnN0cnVjdGlvbiBhbmQgRGF0YSBUTEIgbWlzcyBleGNlcHRpb24gdmVjdG9yCishCisJLmJhbGlnbiAJMTAyNCwwLDEwMjQKK3RsYl9taXNzOgorCXN0cwlwciwgazMJCSEgc2F2ZSBvcmlnaW5hbCBwciB2YWx1ZSBpbiBrMwogCi0JbW92CSMtMSwgazQKLQltb3YubAlrNCwgQC1yMTUJISBzZXQgVFJBIChkZWZhdWx0OiAtMSkKLQkhCitoYW5kbGVfZXhjZXB0aW9uOgorCW1vdmEJZXhjZXB0aW9uX2RhdGEsIGswCisKKwkhIFNldHVwIHN0YWNrIGFuZCBzYXZlIERTUCBjb250ZXh0IChrMCBjb250YWlucyBvcmlnaW5hbCByMTUgb24gcmV0dXJuKQorCWJzcglwcmVwYXJlX3N0YWNrX3NhdmVfZHNwCisJIFBSRUYoazApCisKKwkhIFNhdmUgcmVnaXN0ZXJzIC8gU3dpdGNoIHRvIGJhbmsgMAorCW1vdi5sCTVmLCBrMgkJISB2ZWN0b3IgcmVnaXN0ZXIgYWRkcmVzcworCW1vdi5sCTFmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJYnNyCXNhdmVfcmVncwkhIG5lZWRzIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJIG1vdi5sCUBrMiwgazIJCSEgcmVhZCBvdXQgdmVjdG9yIGFuZCBrZWVwIGluIGsyCisKK2hhbmRsZV9leGNlcHRpb25fc3BlY2lhbDoKKwkhIFNldHVwIHJldHVybiBhZGRyZXNzIGFuZCBqdW1wIHRvIGV4Y2VwdGlvbiBoYW5kbGVyCisJbW92LmwJN2YsIHI5CQkhIGZldGNoIHJldHVybiBhZGRyZXNzCisJc3RjCXIyX2JhbmssIHIwCSEgazIgKHZlY3RvcikKKwltb3YubAk2ZiwgcjEwCisJc2hscjIJcjAKKwlzaGxyCXIwCisJbW92LmwJQChyMCwgcjEwKSwgcjEwCisJam1wCUByMTAKKwkgbGRzCXI5LCBwcgkJISBwdXQgcmV0dXJuIGFkZHJlc3MgaW4gcHIKKworCS5hbGlnbglMMV9DQUNIRV9TSElGVAorCishIHNhdmVfcmVncygpCishIC0gc2F2ZSBkZWZhdWx0IHRyYSwgbWFjbCwgbWFjaCwgZ2JyLCBzc3IsIHByKiBhbmQgc3BjIG9uIHRoZSBzdGFjaworISAtIHNhdmUgcjE1KiwgcjE0LCByMTMsIHIxMiwgcjExLCByMTAsIHI5LCByOCBvbiB0aGUgc3RhY2sKKyEgLSBzd2l0Y2ggYmFuaworISAtIHNhdmUgcjcsIHI2LCByNSwgcjQsIHIzLCByMiwgcjEsIHIwIG9uIHRoZSBzdGFjaworISBrMCBjb250YWlucyBvcmlnaW5hbCBzdGFjayBwb2ludGVyKgorISBrMSB0cmFzaGVkCishIGszIHBhc3NlcyBvcmlnaW5hbCBwcioKKyEgazQgcGFzc2VzIFNSIGJpdG1hc2sKKyEgQkw9MSBvbiBlbnRyeSwgb24gZXhpdCBCTD0wLgorCitFTlRSWShzYXZlX3JlZ3MpCisJbW92CSMtMSwgcjEKKwltb3YubAlrMSwgQC1yMTUJISBzZXQgVFJBIChkZWZhdWx0OiAtMSkKIAlzdHMubAltYWNsLCBALXIxNQogCXN0cy5sCW1hY2gsIEAtcjE1CiAJc3RjLmwJZ2JyLCBALXIxNQogCXN0Yy5sCXNzciwgQC1yMTUKLQlzdHMubAlwciwgQC1yMTUKKwltb3YubAlrMywgQC1yMTUJISBvcmlnaW5hbCBwciBpbiBrMwogCXN0Yy5sCXNwYywgQC1yMTUKLQkhCi0JbGRzCWszLCBwcgkJISBTZXQgdGhlIHJldHVybiBhZGRyZXNzIHRvIHByCi0JIQotCW1vdi5sCWswLCBALXIxNQkhIHNhdmUgb3JpZ25hbCBzdGFjaworCisJbW92LmwJazAsIEAtcjE1CSEgb3JpZ2luYWwgc3RhY2sgcG9pbnRlciBpbiBrMAogCW1vdi5sCXIxNCwgQC1yMTUKIAltb3YubAlyMTMsIEAtcjE1CiAJbW92LmwJcjEyLCBALXIxNQpAQCAtNTA5LDEzICs1MTksMjMgQEAKIAltb3YubAlyMTAsIEAtcjE1CiAJbW92LmwJcjksIEAtcjE1CiAJbW92LmwJcjgsIEAtcjE1Ci0JIQotCXN0YwlzciwgcjgJCSEgQmFjayB0byBub3JtYWwgcmVnaXN0ZXIgYmFuaywgYW5kCi0Jb3IJazEsIHI4CQkhIEJsb2NrIGFsbCBpbnRlcnJ1cHRzCi0JbW92LmwJM2YsIGsxCi0JYW5kCWsxLCByOAkJISAuLi4KLQlsZGMJcjgsIHNyCQkhIC4uLmNoYW5nZWQgaGVyZS4KLQkhCisKKwltb3YubAkwZiwgazMJCSEgU1IgYml0cyB0byBzZXQgaW4gazMKKworCSEgZmFsbC10aHJvdWdoCisKKyEgc2F2ZV9sb3dfcmVncygpCishIC0gbW9kaWZ5IFNSIGZvciBiYW5rIHN3aXRjaAorISAtIHNhdmUgcjcsIHI2LCByNSwgcjQsIHIzLCByMiwgcjEsIHIwIG9uIHRoZSBzdGFjaworISBrMyBwYXNzZXMgYml0cyB0byBzZXQgaW4gU1IKKyEgazQgcGFzc2VzIGJpdHMgdG8gY2xlYXIgaW4gU1IKKworRU5UUlkoc2F2ZV9sb3dfcmVncykKKwlzdGMJc3IsIHI4CisJb3IJazMsIHI4CisJYW5kCWs0LCByOAorCWxkYwlyOCwgc3IKKwogCW1vdi5sCXI3LCBALXIxNQogCW1vdi5sCXI2LCBALXIxNQogCW1vdi5sCXI1LCBALXIxNQpAQCAtNTIzLDUyICs1NDMsNjMgQEAKIAltb3YubAlyMywgQC1yMTUKIAltb3YubAlyMiwgQC1yMTUKIAltb3YubAlyMSwgQC1yMTUKLQltb3YubAlyMCwgQC1yMTUKLQotCS8qCi0JICogVGhpcyBnZXRzIGEgYml0IHRyaWNreS4uIGluIHRoZSBJTlRFVlQgY2FzZSB3ZSBkb24ndCB3YW50IHRvIHVzZQotCSAqIHRoZSBWQlIgb2Zmc2V0IGFzIGEgZGVzdGluYXRpb24gaW4gdGhlIGp1bXAgY2FsbCB0YWJsZSwgc2luY2UgYWxsCi0JICogb2YgdGhlIGRlc3RpbmF0aW9ucyBhcmUgdGhlIHNhbWUuIEluIHRoaXMgY2FzZSwgKGludGVycnVwdCkgc2V0cwotCSAqIGEgbWFya2VyIGluIHIyIChub3cgcjJfYmFuayBzaW5jZSBTUi5SQiBjaGFuZ2VkKSwgd2hpY2ggd2UgY2hlY2sKLQkgKiB0byBkZXRlcm1pbmUgdGhlIGV4Y2VwdGlvbiB0eXBlLiBGb3IgYWxsIG90aGVyIGV4Y2VwdGlvbnMsIHdlCi0JICogZm9yY2libHkgcmVhZCBFWFBFVlQgZnJvbSBtZW1vcnkgYW5kIGZpeCB1cCB0aGUganVtcCBhZGRyZXNzLCBpbgotCSAqIHRoZSBpbnRlcnJ1cHQgZXhjZXB0aW9uIGNhc2Ugd2UganVtcCB0byBkb19JUlEoKSBhbmQgZGVmZXIgdGhlCi0JICogSU5URVZUIHJlYWQgdW50aWwgdGhlcmUuIEFzIGEgYm9udXMsIHdlIGNhbiBhbHNvIGNsZWFuIHVwIHRoZSBTUi5SQgotCSAqIGNoZWNrcyB0aGF0IGRvX0lSUSgpIHdhcyBkb2luZy4uCi0JICovCi0Jc3RjCXIyX2JhbmssIHI4Ci0JY21wL3B6CXI4Ci0JYmYJaW50ZXJydXB0X2V4Y2VwdGlvbgotCXNobHIyCXI4Ci0Jc2hscglyOAotCW1vdi5sCTRmLCByOQotCWFkZAlyOCwgcjkKLQltb3YubAlAcjksIHI5Ci0Jam1wCUByOQotCSBub3AKIAlydHMKKwkgbW92LmwJcjAsIEAtcjE1CisKKyEKKyEgMHg2MDA6IEludGVycnVwdCAvIE5NSSB2ZWN0b3IKKyEKKwkuYmFsaWduIAk1MTIsMCw1MTIKK0VOVFJZKGhhbmRsZV9pbnRlcnJ1cHQpCisjaWYgZGVmaW5lZChDT05GSUdfS0dEQikKKwltb3YubAkyZiwgazIKKwkhIERlYm91bmNlIChmaWx0ZXIgbmVzdGVkIE5NSSkKKwltb3YubAlAazIsIGswCisJbW92LmwJOWYsIGsxCisJY21wL2VxCWsxLCBrMAorCWJmCTExZgorCW1vdi5sCTEwZiwgazEKKwl0YXMuYglAazEKKwlidAkxMWYKKwlydGUKIAkgbm9wCi0KIAkuYWxpZ24JMgotMToJLmxvbmcJMHgwMDAwMTAwMAkhIERTUD0xCi0yOgkubG9uZwkweDAwMDA4MGYwCSEgRkQ9MSwgSU1BU0s9MTUKLTM6CS5sb25nCTB4Y2ZmZmZmZmYJISBSQj0wLCBCTD0wCi00OgkubG9uZwlleGNlcHRpb25faGFuZGxpbmdfdGFibGUKKzk6CS5sb25nCU5NSV9WRUMKKzEwOgkubG9uZwlpbl9ubWkKKzExOgorI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0tHREIpICovCisJc3RzCXByLCBrMwkJISBzYXZlIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJbW92YQlleGNlcHRpb25fZGF0YSwgazAKIAotaW50ZXJydXB0X2V4Y2VwdGlvbjoKLQltb3YubAkxZiwgcjkKKwkhIFNldHVwIHN0YWNrIGFuZCBzYXZlIERTUCBjb250ZXh0IChrMCBjb250YWlucyBvcmlnaW5hbCByMTUgb24gcmV0dXJuKQorCWJzcglwcmVwYXJlX3N0YWNrX3NhdmVfZHNwCisJIFBSRUYoazApCisKKwkhIFNhdmUgcmVnaXN0ZXJzIC8gU3dpdGNoIHRvIGJhbmsgMAorCW1vdi5sCTFmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJYnNyCXNhdmVfcmVncwkhIG5lZWRzIG9yaWdpbmFsIHByIHZhbHVlIGluIGszCisJIG1vdgkjLTEsIGsyCQkhIGRlZmF1bHQgdmVjdG9yIGtlcHQgaW4gazIKKworCSEgU2V0dXAgcmV0dXJuIGFkZHJlc3MgYW5kIGp1bXAgdG8gZG9fSVJRCisJbW92LmwJNGYsIHI5CQkhIGZldGNoIHJldHVybiBhZGRyZXNzCisJbGRzCXI5LCBwcgkJISBwdXQgcmV0dXJuIGFkZHJlc3MgaW4gcHIKIAltb3YubAkyZiwgcjQKLQltb3YubAlAcjQsIHI0CisJbW92LmwJM2YsIHI5CisJbW92LmwJQHI0LCByNAkJISBwYXNzIElOVEVWVCB2ZWN0b3IgYXMgYXJnMAogCWptcAlAcjkKLQkgbW92CXIxNSwgcjUKLQlydHMKLQkgbm9wCisJIG1vdglyMTUsIHI1CQkhIHBhc3Mgc2F2ZWQgcmVnaXN0ZXJzIGFzIGFyZzEKIAotCS5hbGlnbiAyCi0xOgkubG9uZwlkb19JUlEKLTI6CS5sb25nCUlOVEVWVAotCi0JLmFsaWduCTIKIEVOVFJZKGV4Y2VwdGlvbl9ub25lKQogCXJ0cwogCSBub3AKKworCS5hbGlnbglMMV9DQUNIRV9TSElGVAorZXhjZXB0aW9uX2RhdGE6CiswOgkubG9uZwkweDAwMDA4MGYwCSEgRkQ9MSwgSU1BU0s9MTUKKzE6CS5sb25nCTB4Y2ZmZmZmZmYJISBSQj0wLCBCTD0wCisyOgkubG9uZwlJTlRFVlQKKzM6CS5sb25nCWRvX0lSUQorNDoJLmxvbmcJcmV0X2Zyb21faXJxCis1OgkubG9uZwlFWFBFVlQKKzY6CS5sb25nCWV4Y2VwdGlvbl9oYW5kbGluZ190YWJsZQorNzoJLmxvbmcJcmV0X2Zyb21fZXhjZXB0aW9uCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYwppbmRleCA2NDY4YWU4Li42M2I2N2JhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwNS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0g3NzA1IFNldHVwCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDkgIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE5vYnVoaXJvIEl3YW1hdHN1CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDUxICsyMSwzNiBAQAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwKIAlQSU5UMDcsIFBJTlQ4MTUsCi0JRE1BQ19ERUkwLCBETUFDX0RFSTEsIERNQUNfREVJMiwgRE1BQ19ERUkzLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9UWEksCi0JU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSwKLQlBRENfQURJLAotCVVTQl9VU0kwLCBVU0JfVVNJMSwKLQlUUFUwLCBUUFUxLCBUUFUyLCBUUFUzLAotCVRNVTAsIFRNVTEsIFRNVTJfVFVOSSwgVE1VMl9USUNQSSwKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwKLQlSRUZfUkNNSSwKIAotCS8qIGludGVycnVwdCBncm91cHMgKi8KLQlSVEMsIFRNVTIsIERNQUMsIFVTQiwgU0NJRjIsIFNDSUYwLAorCURNQUMsIFNDSUYwLCBTQ0lGMiwgQURDX0FESSwgVVNCLAorCisJVFBVMCwgVFBVMSwgVFBVMiwgVFBVMywKKwlUTVUwLCBUTVUxLCBUTVUyLAorCisJUlRDLCBXRFQsIFJFRl9SQ01JLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CiAJLyogSVJRMC0+NSBhcmUgaGFuZGxlZCBpbiBzZXR1cC1zaDMuYyAqLwogCUlOVENfVkVDVChQSU5UMDcsIDB4NzAwKSwgSU5UQ19WRUNUKFBJTlQ4MTUsIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ERUkwLCAweDgwMCksIElOVENfVkVDVChETUFDX0RFSTEsIDB4ODIwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ERUkyLCAweDg0MCksIElOVENfVkVDVChETUFDX0RFSTMsIDB4ODYwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDg4MCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4OGEwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDhlMCksCi0JSU5UQ19WRUNUKFNDSUYyX0VSSSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjJfUlhJLCAweDkyMCksCi0JSU5UQ19WRUNUKFNDSUYyX1RYSSwgMHg5NjApLAorCUlOVENfVkVDVChETUFDLCAweDgwMCksIElOVENfVkVDVChETUFDLCAweDgyMCksCisJSU5UQ19WRUNUKERNQUMsIDB4ODQwKSwgSU5UQ19WRUNUKERNQUMsIDB4ODYwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDhhMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDhlMCksCisJSU5UQ19WRUNUKFNDSUYyLCAweDkwMCksIElOVENfVkVDVChTQ0lGMiwgMHg5MjApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5NjApLAogCUlOVENfVkVDVChBRENfQURJLCAweDk4MCksCi0JSU5UQ19WRUNUKFVTQl9VU0kwLCAweGEyMCksIElOVENfVkVDVChVU0JfVVNJMSwgMHhhNDApLAorCUlOVENfVkVDVChVU0IsIDB4YTIwKSwgSU5UQ19WRUNUKFVTQiwgMHhhNDApLAogCUlOVENfVkVDVChUUFUwLCAweGMwMCksIElOVENfVkVDVChUUFUxLCAweGMyMCksCiAJSU5UQ19WRUNUKFRQVTIsIDB4YzgwKSwgSU5UQ19WRUNUKFRQVTMsIDB4Y2EwKSwKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLAotCUlOVENfVkVDVChUTVUyX1RVTkksIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NDYwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCisJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTIsIDB4NDYwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAogCUlOVENfVkVDVChSRUZfUkNNSSwgMHg1ODApLAogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoVE1VMiwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKERNQUMsIERNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMyksCi0JSU5UQ19HUk9VUChVU0IsIFVTQl9VU0kwLCBVU0JfVVNJMSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX1RYSSksCi19OwotCiBzdGF0aWMgc3RydWN0IGludGNfcHJpb19yZWcgcHJpb19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewogCXsgMHhmZmZmZmVlMiwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBUTVUwLCBUTVUxLCBUTVUyLCBSVEMgfSB9LAogCXsgMHhmZmZmZmVlNCwgMCwgMTYsIDQsIC8qIElQUkIgKi8geyBXRFQsIFJFRl9SQ01JLCAwLCAwIH0gfSwKQEAgLTc4LDcgKzYzLDcgQEAKIAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcwNSIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MDUiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CkBAIC04NiwxMiArNzEsMTIgQEAKIAkJLm1hcGJhc2UJPSAweGE0NDEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1NiwgNTcsIDU5IH0sCisJCS5pcnFzCQk9IHsgNTYsIDU2LCA1NiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGE0NDAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1MiwgNTMsIDU1IH0sCisJCS5pcnFzCQk9IHsgNTIsIDUyLCA1MiB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC0xMTUsMTQgKzEwMCw2IEBACiAJCS5zdGFydCAgPSAyMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKLQlbMl0gPQl7Ci0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9CXsKLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF9ydGNfcGxhdGZvcm1faW5mbyBydGNfaW5mbyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcweC5jCmluZGV4IDkzYzU1ZTIuLmE3NGY5NjAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzB4LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MHguYwpAQCAtMiw2ICsyLDcgQEAKICAqIFNIMyBTZXR1cCBjb2RlIGZvciBTSDc3MDYsIFNINzcwNywgU0g3NzA4LCBTSDc3MDkKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBNYWdudXMgRGFtbQorICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqIEJhc2VkIG9uIHNldHVwLXNoNzcwOS5jCiAgKgpAQCAtMjQsNDYgKzI1LDM3IEBACiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LAogCVBJTlQwNywgUElOVDgxNSwKLQlETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMsCi0JU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJLAotCVNDSUYyX0VSSSwgU0NJRjJfUlhJLCBTQ0lGMl9CUkksIFNDSUYyX1RYSSwKLQlTQ0lfRVJJLCBTQ0lfUlhJLCBTQ0lfVFhJLCBTQ0lfVEVJLAotCUFEQ19BREksCisJRE1BQywgU0NJRjAsIFNDSUYyLCBTQ0ksIEFEQ19BREksCiAJTENEQywgUENDMCwgUENDMSwKLQlUTVUwLCBUTVUxLCBUTVUyX1RVTkksIFRNVTJfVElDUEksCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JUkVGX1JDTUksIFJFRl9ST1ZJLAotCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVJUQywgUkVGLCBUTVUyLCBETUFDLCBTQ0ksIFNDSUYyLCBTQ0lGMCwKKwlUTVUwLCBUTVUxLCBUTVUyLAorCVJUQywgV0RULCBSRUYsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX1ZFQ1QoVE1VMCwgMHg0MDApLCBJTlRDX1ZFQ1QoVE1VMSwgMHg0MjApLAotCUlOVENfVkVDVChUTVUyX1RVTkksIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NDYwKSwKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCi0JSU5UQ19WRUNUKFNDSV9FUkksIDB4NGUwKSwgSU5UQ19WRUNUKFNDSV9SWEksIDB4NTAwKSwKLQlJTlRDX1ZFQ1QoU0NJX1RYSSwgMHg1MjApLCBJTlRDX1ZFQ1QoU0NJX1RFSSwgMHg1NDApLAorCUlOVENfVkVDVChUTVUyLCAweDQ0MCksIElOVENfVkVDVChUTVUyLCAweDQ2MCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAorCUlOVENfVkVDVChTQ0ksIDB4NGUwKSwgSU5UQ19WRUNUKFNDSSwgMHg1MDApLAorCUlOVENfVkVDVChTQ0ksIDB4NTIwKSwgSU5UQ19WRUNUKFNDSSwgMHg1NDApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwKLQlJTlRDX1ZFQ1QoUkVGX1JDTUksIDB4NTgwKSwKLQlJTlRDX1ZFQ1QoUkVGX1JPVkksIDB4NWEwKSwKKwlJTlRDX1ZFQ1QoUkVGLCAweDU4MCksCisJSU5UQ19WRUNUKFJFRiwgMHg1YTApLAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKIAkvKiBJUlEwLT41IGFyZSBoYW5kbGVkIGluIHNldHVwLXNoMy5jICovCi0JSU5UQ19WRUNUKERNQUNfREVJMCwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkxLCAweDgyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMiwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkzLCAweDg2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4ODAwKSwgSU5UQ19WRUNUKERNQUMsIDB4ODIwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQywgMHg4NjApLAogCUlOVENfVkVDVChBRENfQURJLCAweDk4MCksCi0JSU5UQ19WRUNUKFNDSUYyX0VSSSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjJfUlhJLCAweDkyMCksCi0JSU5UQ19WRUNUKFNDSUYyX0JSSSwgMHg5NDApLCBJTlRDX1ZFQ1QoU0NJRjJfVFhJLCAweDk2MCksCisJSU5UQ19WRUNUKFNDSUYyLCAweDkwMCksIElOVENfVkVDVChTQ0lGMiwgMHg5MjApLAorCUlOVENfVkVDVChTQ0lGMiwgMHg5NDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4OTYwKSwKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKIAlJTlRDX1ZFQ1QoUElOVDA3LCAweDcwMCksIElOVENfVkVDVChQSU5UODE1LCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDhhMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDhlMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDg4MCksIElOVENfVkVDVChTQ0lGMCwgMHg4YTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4OGUwKSwKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykKIAlJTlRDX1ZFQ1QoTENEQywgMHg5YTApLApAQCAtNzEsMTYgKzYzLDYgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoVE1VMiwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJKSwKLQlJTlRDX0dST1VQKFJFRiwgUkVGX1JDTUksIFJFRl9ST1ZJKSwKLQlJTlRDX0dST1VQKERNQUMsIERNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMyksCi0JSU5UQ19HUk9VUChTQ0ksIFNDSV9FUkksIFNDSV9SWEksIFNDSV9UWEksIFNDSV9URUkpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMiwgU0NJRjJfRVJJLCBTQ0lGMl9SWEksIFNDSUYyX0JSSSwgU0NJRjJfVFhJKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAweGZmZmZmZWUyLCAwLCAxNiwgNCwgLyogSVBSQSAqLyB7IFRNVTAsIFRNVTEsIFRNVTIsIFJUQyB9IH0sCiAJeyAweGZmZmZmZWU0LCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IFdEVCwgUkVGLCBTQ0ksIDAgfSB9LApAQCAtMTAxLDcgKzgzLDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcweCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MHgiLCB2ZWN0b3JzLCBOVUxMLAogCQkJIE5VTEwsIHByaW9fcmVnaXN0ZXJzLCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CkBAIC0xMTEsMTQgKzkzLDYgQEAKIAkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPQl7Ci0JCS5zdGFydCAgPSAyMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPQl7Ci0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9CXsKIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKIAl9LApAQCAtMTM2LDcgKzExMCw3IEBACiAJCS5tYXBiYXNlCT0gMHhmZmZmZmU4MCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSSwKLQkJLmlycXMJCT0geyAyMywgMjQsIDI1LCAwIH0sCisJCS5pcnFzCQk9IHsgMjMsIDIzLCAyMywgMCB9LAogCX0sCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCkBAIC0xNDUsNyArMTE5LDcgQEAKIAkJLm1hcGJhc2UJPSAweGE0MDAwMTUwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA1NiwgNTcsIDU5LCA1OCB9LAorCQkuaXJxcwkJPSB7IDU2LCA1NiwgNTYsIDU2IH0sCiAJfSwKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXApAQCAtMTU0LDcgKzEyOCw3IEBACiAJCS5tYXBiYXNlCT0gMHhhNDAwMDE0MCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX0lSREEsCi0JCS5pcnFzCQk9IHsgNTIsIDUzLCA1NSwgNTQgfSwKKwkJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAogCX0sCiAjZW5kaWYKIAl7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYwppbmRleCA3N2VlZTQ4Li4zMzUwOThiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcxMC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogU0gzIFNldHVwIGNvZGUgZm9yIFNINzcxMCwgU0g3NzEyCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwNiAtIDIwMDkgIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgIE5vYnVoaXJvIEl3YW1hdHN1CiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDU5ICsyMCw0MCBAQAogCiAJLyogaW50ZXJydXB0IHNvdXJjZXMgKi8KIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LAotCURNQUNfREVJMCwgRE1BQ19ERUkxLCBETUFDX0RFSTIsIERNQUNfREVJMywKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCURNQUNfREVJNCwgRE1BQ19ERUk1LAotCUlQU0VDLAorCURNQUMxLCBTQ0lGMCwgU0NJRjEsIERNQUMyLCBJUFNFQywKIAlFRE1BQzAsIEVETUFDMSwgRURNQUMyLAotCVNJT0YwX0VSSSwgU0lPRjBfVFhJLCBTSU9GMF9SWEksIFNJT0YwX0NDSSwKLQlTSU9GMV9FUkksIFNJT0YxX1RYSSwgU0lPRjFfUlhJLCBTSU9GMV9DQ0ksCi0JVE1VMCwgVE1VMSwgVE1VMiwKLQlSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJLAotCVdEVCwKLQlSRUYsCisJU0lPRjAsIFNJT0YxLAogCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVJUQywgRE1BQzEsIFNDSUYwLCBTQ0lGMSwgRE1BQzIsIFNJT0YwLCBTSU9GMSwKKwlUTVUwLCBUTVUxLCBUTVUyLAorCVJUQywgV0RULCBSRUYsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAkvKiBJUlEwLT41IGFyZSBoYW5kbGVkIGluIHNldHVwLXNoMy5jICovCi0JSU5UQ19WRUNUKERNQUNfREVJMCwgMHg4MDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkxLCAweDgyMCksCi0JSU5UQ19WRUNUKERNQUNfREVJMiwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQ19ERUkzLCAweDg2MCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg4ODApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDhhMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg4YzApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDhlMCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweDkyMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHg5NDApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweDk2MCksCi0JSU5UQ19WRUNUKERNQUNfREVJNCwgMHhiODApLCBJTlRDX1ZFQ1QoRE1BQ19ERUk1LCAweGJhMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDgwMCksIElOVENfVkVDVChETUFDMSwgMHg4MjApLAorCUlOVENfVkVDVChETUFDMSwgMHg4NDApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4ODYwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4ODgwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDhhMCksCisJSU5UQ19WRUNUKFNDSUYwLCAweDhjMCksIElOVENfVkVDVChTQ0lGMCwgMHg4ZTApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg5MDApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4OTQwKSwgSU5UQ19WRUNUKFNDSUYxLCAweDk2MCksCisJSU5UQ19WRUNUKERNQUMyLCAweGI4MCksIElOVENfVkVDVChETUFDMiwgMHhiYTApLAogI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAKIAlJTlRDX1ZFQ1QoSVBTRUMsIDB4YmUwKSwKICNlbmRpZgogCUlOVENfVkVDVChFRE1BQzAsIDB4YzAwKSwgSU5UQ19WRUNUKEVETUFDMSwgMHhjMjApLAogCUlOVENfVkVDVChFRE1BQzIsIDB4YzQwKSwKLQlJTlRDX1ZFQ1QoU0lPRjBfRVJJLCAweGUwMCksIElOVENfVkVDVChTSU9GMF9UWEksIDB4ZTIwKSwKLQlJTlRDX1ZFQ1QoU0lPRjBfUlhJLCAweGU0MCksIElOVENfVkVDVChTSU9GMF9DQ0ksIDB4ZTYwKSwKLQlJTlRDX1ZFQ1QoU0lPRjFfRVJJLCAweGU4MCksIElOVENfVkVDVChTSU9GMV9UWEksIDB4ZWEwKSwKLQlJTlRDX1ZFQ1QoU0lPRjFfUlhJLCAweGVjMCksIElOVENfVkVDVChTSU9GMV9DQ0ksIDB4ZWUwKSwKKwlJTlRDX1ZFQ1QoU0lPRjAsIDB4ZTAwKSwgSU5UQ19WRUNUKFNJT0YwLCAweGUyMCksCisJSU5UQ19WRUNUKFNJT0YwLCAweGU0MCksIElOVENfVkVDVChTSU9GMCwgMHhlNjApLAorCUlOVENfVkVDVChTSU9GMSwgMHhlODApLCBJTlRDX1ZFQ1QoU0lPRjEsIDB4ZWEwKSwKKwlJTlRDX1ZFQ1QoU0lPRjEsIDB4ZWMwKSwgSU5UQ19WRUNUKFNJT0YxLCAweGVlMCksCiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKIAlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLAotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLAogCUlOVENfVkVDVChSRUYsIDB4NTgwKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNbXSBfX2luaXRkYXRhID0gewotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKERNQUMxLCBETUFDX0RFSTAsIERNQUNfREVJMSwgRE1BQ19ERUkyLCBETUFDX0RFSTMpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChTQ0lGMSwgU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJKSwKLQlJTlRDX0dST1VQKERNQUMyLCBETUFDX0RFSTQsIERNQUNfREVJNSksCi0JSU5UQ19HUk9VUChTSU9GMCwgU0lPRjBfRVJJLCBTSU9GMF9UWEksIFNJT0YwX1JYSSwgU0lPRjBfQ0NJKSwKLQlJTlRDX0dST1VQKFNJT0YxLCBTSU9GMV9FUkksIFNJT0YxX1RYSSwgU0lPRjFfUlhJLCBTSU9GMV9DQ0kpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4ZmZmZmZlZTIsIDAsIDE2LCA0LCAvKiBJUFJBICovIHsgVE1VMCwgVE1VMSwgVE1VMiwgUlRDIH0gfSwKIAl7IDB4ZmZmZmZlZTQsIDAsIDE2LCA0LCAvKiBJUFJCICovIHsgV0RULCBSRUYsIDAsIDAgfSB9LApAQCAtODUsNyArNjYsNyBAQAogCXsgMHhhNDA4MDAwNiwgMCwgMTYsIDQsIC8qIElQUkkgKi8geyAwLCAwLCBTSU9GMSB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzEwIiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcxMCIsIHZlY3RvcnMsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKQEAgLTk4LDE0ICs3OSw2IEBACiAJCS5zdGFydCAgPSAyMCwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKLQlbMl0gPQl7Ci0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9CXsKLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0lSUSwKLQl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzaF9ydGNfcGxhdGZvcm1faW5mbyBydGNfaW5mbyA9IHsKQEAgLTEyNywxMiArMTAwLDEyIEBACiAJCS5tYXBiYXNlCT0gMHhhNDQwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNTIsIDUzLCA1NSwgNTQgfSwKKwkJLmlycXMJCT0geyA1MiwgNTIsIDUyLCA1MiB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGE0NDEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMgICAgICAgICAgID0geyA1NiwgNTcsIDU5LCA1OCB9LAorCQkuaXJxcyAgICAgICAgICAgPSB7IDU2LCA1NiwgNTYsIDU2IH0sCiAJfSwgewogCiAJCS5mbGFncyA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MjAuYwppbmRleCBmODA3YTIxLi4wMDM4NzRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcyMC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzIwLmMKQEAgLTIsNiArMiw3IEBACiAgKiBTSDc3MjAgU2V0dXAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3ICBNYXJrdXMgQnJ1bm5lciwgTWFyayBKb25hcworICogIENvcHlyaWdodCAoQykgMjAwOSAgUGF1bCBNdW5kdAogICoKICAqICBCYXNlZCBvbiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jOgogICoKQEAgLTI2LDE3ICsyNyw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCkBAIC0xNTAsNjIgKzE0MSw0OSBAQAogCVVOVVNFRCA9IDAsCiAKIAkvKiBpbnRlcnJ1cHQgc291cmNlcyAqLwotCVRNVTAsIFRNVTEsIFRNVTIsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULCBSRUZfUkNNSSwgU0lNX0VSSSwgU0lNX1JYSSwgU0lNX1RYSSwgU0lNX1RFTkQsCisJVE1VMCwgVE1VMSwgVE1VMiwgUlRDLAorCVdEVCwgUkVGX1JDTUksIFNJTSwKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLAogCVVTQkZfU1BELCBUTVVfU1VOSSwgSVJRNSwgSVJRNCwKLQlETUFDMV9ERUkwLCBETUFDMV9ERUkxLCBETUFDMV9ERUkyLCBETUFDMV9ERUkzLCBMQ0RDLCBTU0wsCi0JQURDLCBETUFDMl9ERUk0LCBETUFDMl9ERUk1LCBVU0JGSTAsIFVTQkZJMSwgQ01ULAorCURNQUMxLCBMQ0RDLCBTU0wsCisJQURDLCBETUFDMiwgVVNCRkksIENNVCwKIAlTQ0lGMCwgU0NJRjEsCi0JUElOVDA3LCBQSU5UODE1LCBUUFUwLCBUUFUxLCBUUFUyLCBUUFUzLCBJSUMsCi0JU0lPRjAsIFNJT0YxLCBNTUNJMCwgTU1DSTEsIE1NQ0kyLCBNTUNJMywgUENDLAorCVBJTlQwNywgUElOVDgxNSwgVFBVLCBJSUMsCisJU0lPRjAsIFNJT0YxLCBNTUMsIFBDQywKIAlVU0JISSwgQUZFSUYsCiAJSF9VREksCi0JLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCVRNVSwgUlRDLCBTSU0sIERNQUMxLCBVU0JGSSwgRE1BQzIsIFVTQiwgVFBVLCBNTUMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKIAkvKiBJUlEwLT41IGFyZSBoYW5kbGVkIGluIHNldHVwLXNoMy5jICovCiAJSU5UQ19WRUNUKFRNVTAsIDB4NDAwKSwgICAgICAgSU5UQ19WRUNUKFRNVTEsIDB4NDIwKSwKLQlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLCAgICAgICBJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLAotCUlOVENfVkVDVChSVENfUFJJLCAweDRhMCksICAgIElOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCi0JSU5UQ19WRUNUKFNJTV9FUkksIDB4NGUwKSwgICAgSU5UQ19WRUNUKFNJTV9SWEksIDB4NTAwKSwKLQlJTlRDX1ZFQ1QoU0lNX1RYSSwgMHg1MjApLCAgICBJTlRDX1ZFQ1QoU0lNX1RFTkQsIDB4NTQwKSwKKwlJTlRDX1ZFQ1QoVE1VMiwgMHg0NDApLCAgICAgICBJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksCisJSU5UQ19WRUNUKFJUQywgMHg0YTApLAkgICAgICBJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCisJSU5UQ19WRUNUKFNJTSwgMHg0ZTApLAkgICAgICBJTlRDX1ZFQ1QoU0lNLCAweDUwMCksCisJSU5UQ19WRUNUKFNJTSwgMHg1MjApLAkgICAgICBJTlRDX1ZFQ1QoU0lNLCAweDU0MCksCiAJSU5UQ19WRUNUKFdEVCwgMHg1NjApLCAgICAgICAgSU5UQ19WRUNUKFJFRl9SQ01JLCAweDU4MCksCiAJLyogSF9VREkgY2Fubm90IGJlIG1hc2tlZCAqLyAgSU5UQ19WRUNUKFRNVV9TVU5JLCAweDZjMCksCi0JSU5UQ19WRUNUKFVTQkZfU1BELCAweDZlMCksICAgSU5UQ19WRUNUKERNQUMxX0RFSTAsIDB4ODAwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfREVJMSwgMHg4MjApLCBJTlRDX1ZFQ1QoRE1BQzFfREVJMiwgMHg4NDApLAotCUlOVENfVkVDVChETUFDMV9ERUkzLCAweDg2MCksIElOVENfVkVDVChMQ0RDLCAweDkwMCksCisJSU5UQ19WRUNUKFVTQkZfU1BELCAweDZlMCksICAgSU5UQ19WRUNUKERNQUMxLCAweDgwMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDgyMCksICAgICAgSU5UQ19WRUNUKERNQUMxLCAweDg0MCksCisJSU5UQ19WRUNUKERNQUMxLCAweDg2MCksICAgICAgSU5UQ19WRUNUKExDREMsIDB4OTAwKSwKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApCiAJSU5UQ19WRUNUKFNTTCwgMHg5ODApLAogI2VuZGlmCi0JSU5UQ19WRUNUKFVTQkZJMCwgMHhhMjApLCAgICAgSU5UQ19WRUNUKFVTQkZJMSwgMHhhNDApLAorCUlOVENfVkVDVChVU0JGSSwgMHhhMjApLCAgICAgIElOVENfVkVDVChVU0JGSSwgMHhhNDApLAogCUlOVENfVkVDVChVU0JISSwgMHhhNjApLAotCUlOVENfVkVDVChETUFDMl9ERUk0LCAweGI4MCksIElOVENfVkVDVChETUFDMl9ERUk1LCAweGJhMCksCisJSU5UQ19WRUNUKERNQUMyLCAweGI4MCksICAgICAgSU5UQ19WRUNUKERNQUMyLCAweGJhMCksCiAJSU5UQ19WRUNUKEFEQywgMHhiZTApLCAgICAgICAgSU5UQ19WRUNUKFNDSUYwLCAweGMwMCksCiAJSU5UQ19WRUNUKFNDSUYxLCAweGMyMCksICAgICAgSU5UQ19WRUNUKFBJTlQwNywgMHhjODApLAogCUlOVENfVkVDVChQSU5UODE1LCAweGNhMCksICAgIElOVENfVkVDVChTSU9GMCwgMHhkMDApLAotCUlOVENfVkVDVChTSU9GMSwgMHhkMjApLCAgICAgIElOVENfVkVDVChUUFUwLCAweGQ4MCksCi0JSU5UQ19WRUNUKFRQVTEsIDB4ZGEwKSwgICAgICAgSU5UQ19WRUNUKFRQVTIsIDB4ZGMwKSwKLQlJTlRDX1ZFQ1QoVFBVMywgMHhkZTApLCAgICAgICBJTlRDX1ZFQ1QoSUlDLCAweGUwMCksCi0JSU5UQ19WRUNUKE1NQ0kwLCAweGU4MCksICAgICAgSU5UQ19WRUNUKE1NQ0kxLCAweGVhMCksCi0JSU5UQ19WRUNUKE1NQ0kyLCAweGVjMCksICAgICAgSU5UQ19WRUNUKE1NQ0kzLCAweGVlMCksCisJSU5UQ19WRUNUKFNJT0YxLCAweGQyMCksICAgICAgSU5UQ19WRUNUKFRQVSwgMHhkODApLAorCUlOVENfVkVDVChUUFUsIDB4ZGEwKSwgICAgICAgIElOVENfVkVDVChUUFUsIDB4ZGMwKSwKKwlJTlRDX1ZFQ1QoVFBVLCAweGRlMCksICAgICAgICBJTlRDX1ZFQ1QoSUlDLCAweGUwMCksCisJSU5UQ19WRUNUKE1NQywgMHhlODApLCAgICAgICAgSU5UQ19WRUNUKE1NQywgMHhlYTApLAorCUlOVENfVkVDVChNTUMsIDB4ZWMwKSwgICAgICAgIElOVENfVkVDVChNTUMsIDB4ZWUwKSwKIAlJTlRDX1ZFQ1QoQ01ULCAweGYwMCksICAgICAgICBJTlRDX1ZFQ1QoUENDLCAweGY2MCksCiAJSU5UQ19WRUNUKEFGRUlGLCAweGZlMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFRNVSwgVE1VMCwgVE1VMSwgVE1VMiksCi0JSU5UQ19HUk9VUChSVEMsIFJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUkpLAotCUlOVENfR1JPVVAoU0lNLCBTSU1fRVJJLCBTSU1fUlhJLCBTSU1fVFhJLCBTSU1fVEVORCksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQzFfREVJMCwgRE1BQzFfREVJMSwgRE1BQzFfREVJMiwgRE1BQzFfREVJMyksCi0JSU5UQ19HUk9VUChVU0JGSSwgVVNCRkkwLCBVU0JGSTEpLAotCUlOVENfR1JPVVAoRE1BQzIsIERNQUMyX0RFSTQsIERNQUMyX0RFSTUpLAotCUlOVENfR1JPVVAoVFBVLCBUUFUwLCBUUFUxLCBUUFUyLCBUUFUzKSwKLQlJTlRDX0dST1VQKE1NQywgTU1DSTAsIE1NQ0kxLCBNTUNJMiwgTU1DSTMpLAotfTsKLQogc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKIAl7IDB4QTQxNEZFRTJVTCwgMCwgMTYsIDQsIC8qIElQUkEgKi8geyBUTVUwLCBUTVUxLCBUTVUyLCBSVEMgfSB9LAogCXsgMHhBNDE0RkVFNFVMLCAwLCAxNiwgNCwgLyogSVBSQiAqLyB7IFdEVCwgUkVGX1JDTUksIFNJTSwgMCB9IH0sCkBAIC0yMTksNyArMTk3LDcgQEAKIAl7IDB4QTQwODAwMDhVTCwgMCwgMTYsIDQsIC8qIElQUkogKi8geyAwLCBVU0JISSwgMCwgQUZFSUYgfSB9LAogfTsKIAotc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzcyMCIsIHZlY3RvcnMsIGdyb3VwcywKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3MjAiLCB2ZWN0b3JzLCBOVUxMLAogCQlOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAKIHZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3N3c3VzcC5TIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zd3N1c3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE0NTQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zd3N1c3AuUwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDMvc3dzdXNwLlMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgazAJcjAKKyNkZWZpbmUgazEJcjEKKyNkZWZpbmUgazIJcjIKKyNkZWZpbmUgazMJcjMKKyNkZWZpbmUgazQJcjQKKworISBzd3N1c3BfYXJjaF9yZXN1bWUoKQorISAtIGNvcHkgcmVzdG9yZV9wYmxpc3QgcGFnZXMKKyEgLSByZXN0b3JlIHJlZ2lzdGVycyBmcm9tIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorCitFTlRSWShzd3N1c3BfYXJjaF9yZXN1bWUpCisJbW92LmwJMWYsIHIxNQorCW1vdi5sCTJmLCByNAorCW1vdi5sCUByNCwgcjQKKworc3dzdXNwX2NvcHlfbG9vcDoKKwltb3YJcjQsIHIwCisJY21wL2VxCSMwLCByMAorCWJ0CXN3c3VzcF9yZXN0b3JlX3JlZ3MKKworCW1vdi5sCUAoUEJFX0FERFJFU1MsIHI0KSwgcjIKKwltb3YubAlAKFBCRV9PUklHX0FERFJFU1MsIHI0KSwgcjUKKworCW1vdgkjKFBBR0VfU0laRSA+PiAxMCksIHIzCisJc2hsbDgJcjMKKwlzaGxyMglyMyAvKiBQQUdFX1NJWkUgLyAxNiAqLworc3dzdXNwX2NvcHlfcGFnZToKKwlkdAlyMworCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzAgKi8KKwltb3YubAlyMSxAcjUKKwlhZGQJIzQscjUKKwltb3YubAlAcjIrLHIxCSAgLyogIDE2bis0ICovCisJbW92LmwJcjEsQHI1CisJYWRkCSM0LHI1CisJbW92LmwJQHIyKyxyMSAgIC8qICAxNm4rOCAqLworCW1vdi5sCXIxLEByNQorCWFkZAkjNCxyNQorCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzEyICovCisJbW92LmwJcjEsQHI1CisJYmYvcwlzd3N1c3BfY29weV9wYWdlCisJIGFkZAkjNCxyNQorCisJYnJhCXN3c3VzcF9jb3B5X2xvb3AKKwkgbW92LmwJQChQQkVfTkVYVCwgcjQpLCByNAorCitzd3N1c3BfcmVzdG9yZV9yZWdzOgorCSEgQkw9MDogUjctPlIwIGlzIGJhbmswCisJbW92LmwJM2YsIHI4CisJbW92LmwJNGYsIHI1CisJanNyCUByNQorCSBub3AKKworCSEgQkw9MTogUjctPlIwIGlzIGJhbmsxCisJbGRzCWsyLCBwcgorCWxkYwlrMywgc3NyCisKKwltb3YubAlAcjE1KywgcjAKKwltb3YubAlAcjE1KywgcjEKKwltb3YubAlAcjE1KywgcjIKKwltb3YubAlAcjE1KywgcjMKKwltb3YubAlAcjE1KywgcjQKKwltb3YubAlAcjE1KywgcjUKKwltb3YubAlAcjE1KywgcjYKKwltb3YubAlAcjE1KywgcjcKKworCXJ0ZQorCSBub3AKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCisJLmFsaWduCTIKKzE6CS5sb25nCXN3c3VzcF9hcmNoX3JlZ3NfY3B1MAorMjoJLmxvbmcJcmVzdG9yZV9wYmxpc3QKKzM6CS5sb25nCTB4MjAwMDAwMDAgISBSQj0xCis0OgkubG9uZwlyZXN0b3JlX3JlZ3MKKworISBzd3N1c3BfYXJjaF9zdXNwZW5kKCkKKyEgLSBwcmVwYXJlIHBjIGZvciByZXN1bWUsIHJldHVybiBmcm9tIGZ1bmN0aW9uIHdpdGhvdXQgc3dzdXNwX3NhdmUgb24gcmVzdW1lCishIC0gc2F2ZSByZWdpc3RlcnMgaW4gc3dzdXNwX2FyY2hfcmVnc19jcHUwCishIC0gY2FsbCBzd3N1c3Bfc2F2ZSB3cml0ZSBzdXNwZW5kIGltYWdlCisKK0VOVFJZKHN3c3VzcF9hcmNoX3N1c3BlbmQpCisJc3RzCXByLCByMAkJISBzYXZlIHByIGluIHIwCisJbW92CXIxNSwgcjIJCSEgc2F2ZSBzcCBpbiByMgorCW1vdglyOCwgcjUJCSEgc2F2ZSByOCBpbiByNQorCXN0YwlzciwgcjEKKwlsZGMJcjEsIHNzcgkJISBzYXZlIHNyIGluIHNzcgorCW1vdi5sCTFmLCByMQorCWxkYwlyMSwgc3BjCQkhIHNldHVwIHBjIHZhbHVlIGZvciByZXN1bWluZworCW1vdi5sCTVmLCByMTUJCSEgdXNlIHN3c3VzcF9hcmNoX3JlZ3NfY3B1MCBhcyBzdGFjaworCW1vdi5sCTZmLCByMworCWFkZAlyMywgcjE1CQkhIHNhdmUgZnJvbSB0b3Agb2Ygc3RydWN0dXJlCisKKwkhIEJMPTA6IFI3LT5SMCBpcyBiYW5rMAorCW1vdi5sCTJmLCByMwkJISBnZXQgbmV3IFNSIHZhbHVlIGZvciBiYW5rMQorCW1vdgkjMCwgcjQKKwltb3YubAk3ZiwgcjEKKwlqc3IJQHIxCQkhIHN3aXRjaCB0byBiYW5rMSBhbmQgc2F2ZSBiYW5rMSByNy0+cjAKKwkgbm90CXI0LCByNAorCisJISBCTD0xOiBSNy0+UjAgaXMgYmFuazEKKwlzdGMJcjJfYmFuaywgazAJISBmZXRjaCBvbGQgc3AgZnJvbSByMl9iYW5rMAorCW1vdi5sCTNmLCBrNAkJISBTUiBiaXRzIHRvIGNsZWFyIGluIGs0CisJbW92LmwJOGYsIGsxCisJanNyCUBrMQkJISBzd2l0Y2ggdG8gYmFuazAgYW5kIHNhdmUgYWxsIHJlZ3MKKwkgc3RjCXIwX2JhbmssIGszCSEgZmV0Y2ggb2xkIHByIGZyb20gcjBfYmFuazAKKworCSEgQkw9MDogUjctPlIwIGlzIGJhbmswCisJbW92CXIyLCByMTUJCSEgcmVzdG9yZSBvbGQgc3AKKwltb3YJcjUsIHI4CQkhIHJlc3RvcmUgb2xkIHI4CisJc3RjCXNzciwgcjEKKwlsZGMJcjEsIHNyCQkhIHJlc3RvcmUgb2xkIHNyCisJbGRzCXIwLCBwcgkJISByZXN0b3JlIG9sZCBwcgorCW1vdi5sCTRmLCByMAorCWptcAlAcjAKKwkgbm9wCisKK3N3c3VzcF9jYWxsX3NhdmU6CisJbW92CXIyLCByMTUJCSEgcmVzdG9yZSBvbGQgc3AKKwltb3YJcjUsIHI4CQkhIHJlc3RvcmUgb2xkIHI4CisJbGRzCXIwLCBwcgkJISByZXN0b3JlIG9sZCBwcgorCXJ0cworCSBtb3YJIzAsIHIwCisKKwkuYWxpZ24JMgorMToJLmxvbmcJc3dzdXNwX2NhbGxfc2F2ZQorMjoJLmxvbmcJMHgyMDAwMDAwMCAhIFJCPTEKKzM6CS5sb25nCTB4ZGZmZmZmZmYgISBSQj0wCis0OgkubG9uZwlzd3N1c3Bfc2F2ZQorNToJLmxvbmcJc3dzdXNwX2FyY2hfcmVnc19jcHUwCis2OgkubG9uZwlTV1NVU1BfQVJDSF9SRUdTX1NJWkUKKzc6CS5sb25nCXNhdmVfbG93X3JlZ3MKKzg6CS5sb25nCXNhdmVfcmVncwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUKaW5kZXggZDYwODU1Ny4uMjAzYjE4MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogb2JqLXkJOj0gcHJvYmUubyBjb21tb24ubwogY29tbW9uLXkJKz0gJChhZGRwcmVmaXggLi4vc2gzLywgZW50cnkubyBleC5vKQogCitvYmotJChDT05GSUdfSElCRVJOQVRJT04pCQkrPSAkKGFkZHByZWZpeCAuLi9zaDMvLCBzd3N1c3AubykKIG9iai0kKENPTkZJR19TSF9GUFUpCQkJKz0gZnB1Lm8gc29mdGZsb2F0Lm8KIG9iai0kKENPTkZJR19TSF9TVE9SRV9RVUVVRVMpCQkrPSBzcS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYwppbmRleCAyZTQyNTcyLi4zZDNhM2M0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCkBAIC0xMjksNiArMTI5LDEzIEBACiAJCWJvb3RfY3B1X2RhdGEuZmxhZ3MgfD0gQ1BVX0hBU19GUFUgfCBDUFVfSEFTX1BFUkZfQ09VTlRFUiB8CiAJCQkJCSAgQ1BVX0hBU19MTFNDOwogCQlicmVhazsKKwljYXNlIDB4NDAwNDoKKwkJYm9vdF9jcHVfZGF0YS50eXBlID0gQ1BVX1NINzc4NjsKKwkJYm9vdF9jcHVfZGF0YS5pY2FjaGUud2F5cyA9IDQ7CisJCWJvb3RfY3B1X2RhdGEuZGNhY2hlLndheXMgPSA0OworCQlib290X2NwdV9kYXRhLmZsYWdzIHw9IENQVV9IQVNfRlBVIHwgQ1BVX0hBU19QRVJGX0NPVU5URVIgfAorCQkJQ1BVX0hBU19MTFNDIHwgQ1BVX0hBU19QVEVBRVg7CisJCWJyZWFrOwogCWNhc2UgMHgzMDA4OgogCQlib290X2NwdV9kYXRhLmljYWNoZS53YXlzID0gNDsKIAkJYm9vdF9jcHVfZGF0YS5kY2FjaGUud2F5cyA9IDQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYwppbmRleCBlYzg4NDAzLi5hMWM4MGQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTIxLDE3ICsyMSw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCkBAIC01MCwxMyArNDAsMTMgQEAKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJLAotCQkuaXJxcwkJPSB7IDIzLCAyNCwgMjUsIDAgfSwKKwkJLmlycXMJCT0geyAyMywgMjMsIDIzLCAwIH0sCiAJfSwgewogI2VuZGlmCiAJCS5tYXBiYXNlCT0gMHhmZmU4MDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC04Nyw0MyArNzcsMjcgQEAKIAogCS8qIGludGVycnVwdCBzb3VyY2VzICovCiAJSVJMMCwgSVJMMSwgSVJMMiwgSVJMMywgLyogb25seSBJUkxNIG1vZGUgc3VwcG9ydGVkICovCi0JSFVESSwgR1BJT0ksCi0JRE1BQ19ETVRFMCwgRE1BQ19ETVRFMSwgRE1BQ19ETVRFMiwgRE1BQ19ETVRFMywKLQlETUFDX0RNVEU0LCBETUFDX0RNVEU1LCBETUFDX0RNVEU2LCBETUFDX0RNVEU3LAotCURNQUNfRE1BRSwKKwlIVURJLCBHUElPSSwgRE1BQywKIAlQQ0lDMF9QQ0lTRVJSLCBQQ0lDMV9QQ0lFUlIsIFBDSUMxX1BDSVBXRFdOLCBQQ0lDMV9QQ0lQV09OLAogCVBDSUMxX1BDSURNQTAsIFBDSUMxX1BDSURNQTEsIFBDSUMxX1BDSURNQTIsIFBDSUMxX1BDSURNQTMsCi0JVE1VMywgVE1VNCwgVE1VMCwgVE1VMSwgVE1VMl9UVU5JLCBUTVUyX1RJQ1BJLAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JU0NJMV9FUkksIFNDSTFfUlhJLCBTQ0kxX1RYSSwgU0NJMV9URUksCi0JU0NJRl9FUkksIFNDSUZfUlhJLCBTQ0lGX0JSSSwgU0NJRl9UWEksCi0JV0RULAotCVJFRl9SQ01JLCBSRUZfUk9WSSwKKwlUTVUzLCBUTVU0LCBUTVUwLCBUTVUxLCBUTVUyLCBSVEMsIFNDSTEsIFNDSUYsIFdEVCwgUkVGLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwotCURNQUMsIFBDSUMxLCBUTVUyLCBSVEMsIFNDSTEsIFNDSUYsIFJFRiwKKwlQQ0lDMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0gewogCUlOVENfVkVDVChIVURJLCAweDYwMCksIElOVENfVkVDVChHUElPSSwgMHg2MjApLAogCUlOVENfVkVDVChUTVUwLCAweDQwMCksIElOVENfVkVDVChUTVUxLCAweDQyMCksCi0JSU5UQ19WRUNUKFRNVTJfVFVOSSwgMHg0NDApLCBJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg0NjApLAotCUlOVENfVkVDVChSVENfQVRJLCAweDQ4MCksIElOVENfVkVDVChSVENfUFJJLCAweDRhMCksCi0JSU5UQ19WRUNUKFJUQ19DVUksIDB4NGMwKSwKLQlJTlRDX1ZFQ1QoU0NJMV9FUkksIDB4NGUwKSwgSU5UQ19WRUNUKFNDSTFfUlhJLCAweDUwMCksCi0JSU5UQ19WRUNUKFNDSTFfVFhJLCAweDUyMCksIElOVENfVkVDVChTQ0kxX1RFSSwgMHg1NDApLAotCUlOVENfVkVDVChTQ0lGX0VSSSwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRl9SWEksIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoU0NJRl9CUkksIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUZfVFhJLCAweDc2MCksCisJSU5UQ19WRUNUKFRNVTIsIDB4NDQwKSwgSU5UQ19WRUNUKFRNVTIsIDB4NDYwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDQ4MCksIElOVENfVkVDVChSVEMsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoUlRDLCAweDRjMCksCisJSU5UQ19WRUNUKFNDSTEsIDB4NGUwKSwgSU5UQ19WRUNUKFNDSTEsIDB4NTAwKSwKKwlJTlRDX1ZFQ1QoU0NJMSwgMHg1MjApLCBJTlRDX1ZFQ1QoU0NJMSwgMHg1NDApLAorCUlOVENfVkVDVChTQ0lGLCAweDcwMCksIElOVENfVkVDVChTQ0lGLCAweDcyMCksCisJSU5UQ19WRUNUKFNDSUYsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYsIDB4NzYwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksCi0JSU5UQ19WRUNUKFJFRl9SQ01JLCAweDU4MCksIElOVENfVkVDVChSRUZfUk9WSSwgMHg1YTApLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChUTVUyLCBUTVUyX1RVTkksIFRNVTJfVElDUEkpLAotCUlOVENfR1JPVVAoUlRDLCBSVENfQVRJLCBSVENfUFJJLCBSVENfQ1VJKSwKLQlJTlRDX0dST1VQKFNDSTEsIFNDSTFfRVJJLCBTQ0kxX1JYSSwgU0NJMV9UWEksIFNDSTFfVEVJKSwKLQlJTlRDX0dST1VQKFNDSUYsIFNDSUZfRVJJLCBTQ0lGX1JYSSwgU0NJRl9CUkksIFNDSUZfVFhJKSwKLQlJTlRDX0dST1VQKFJFRiwgUkVGX1JDTUksIFJFRl9ST1ZJKSwKKwlJTlRDX1ZFQ1QoUkVGLCAweDU4MCksIElOVENfVkVDVChSRUYsIDB4NWEwKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBwcmlvX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMzYsNyArMTEwLDcgQEAKIAkJCQkJCSBQQ0lDMSwgUENJQzBfUENJU0VSUiB9IH0sCiB9OwogCi1zdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjLCAic2g3NzUwIiwgdmVjdG9ycywgZ3JvdXBzLAorc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzYywgInNoNzc1MCIsIHZlY3RvcnMsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogCiAvKiBTSDc3NTAsIFNINzc1MFMsIFNINzc1MSBhbmQgU0g3MDkxIGFsbCBoYXZlIDQtY2hhbm5lbCBETUEgY29udHJvbGxlcnMgKi8KQEAgLTE0NSwzOSArMTE5LDI4IEBACiAJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxKSB8fCBcCiAJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxKQogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19kbWE0W10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMSwgMHg2NjApLAotCUlOVENfVkVDVChETUFDX0RNVEUyLCAweDY4MCksIElOVENfVkVDVChETUFDX0RNVEUzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUNfRE1BRSwgMHg2YzApLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc19kbWE0W10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKERNQUMsIERNQUNfRE1URTAsIERNQUNfRE1URTEsIERNQUNfRE1URTIsCi0JCSAgIERNQUNfRE1URTMsIERNQUNfRE1BRSksCisJSU5UQ19WRUNUKERNQUMsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMsIDB4NjYwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQywgMHg2YTApLAorCUlOVENfVkVDVChETUFDLCAweDZjMCksCiB9OwogCiBzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0MoaW50Y19kZXNjX2RtYTQsICJzaDc3NTBfZG1hNCIsCi0JCQkgdmVjdG9yc19kbWE0LCBncm91cHNfZG1hNCwKKwkJCSB2ZWN0b3JzX2RtYTQsIE5VTEwsCiAJCQkgTlVMTCwgcHJpb19yZWdpc3RlcnMsIE5VTEwpOwogI2VuZGlmCiAKIC8qIFNINzc1MFIgYW5kIFNINzc1MVIgYm90aCBoYXZlIDgtY2hhbm5lbCBETUEgY29udHJvbGxlcnMgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSKQogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19kbWE4W10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFMSwgMHg2NjApLAotCUlOVENfVkVDVChETUFDX0RNVEUyLCAweDY4MCksIElOVENfVkVDVChETUFDX0RNVEUzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUNfRE1URTQsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUNfRE1URTUsIDB4N2EwKSwKLQlJTlRDX1ZFQ1QoRE1BQ19ETVRFNiwgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQ19ETVRFNywgMHg3ZTApLAotCUlOVENfVkVDVChETUFDX0RNQUUsIDB4NmMwKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW50Y19ncm91cCBncm91cHNfZG1hOFtdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19HUk9VUChETUFDLCBETUFDX0RNVEUwLCBETUFDX0RNVEUxLCBETUFDX0RNVEUyLAotCQkgICBETUFDX0RNVEUzLCBETUFDX0RNVEU0LCBETUFDX0RNVEU1LAotCQkgICBETUFDX0RNVEU2LCBETUFDX0RNVEU3LCBETUFDX0RNQUUpLAorCUlOVENfVkVDVChETUFDLCAweDY0MCksIElOVENfVkVDVChETUFDLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg3ODApLCBJTlRDX1ZFQ1QoRE1BQywgMHg3YTApLAorCUlOVENfVkVDVChETUFDLCAweDdjMCksIElOVENfVkVDVChETUFDLCAweDdlMCksCisJSU5UQ19WRUNUKERNQUMsIDB4NmMwKSwKIH07CiAKIHN0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2NfZG1hOCwgInNoNzc1MF9kbWE4IiwKLQkJCSB2ZWN0b3JzX2RtYTgsIGdyb3Vwc19kbWE4LAorCQkJIHZlY3RvcnNfZG1hOCwgTlVMTCwKIAkJCSBOVUxMLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQppbmRleCA4ZTM0NGVjLi4xYTkyMzYxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9NYWtlZmlsZQpAQCAtNyw2ICs3LDcgQEAKIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzApCSs9IHNldHVwLXNoNzc3MC5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQkrPSBzZXR1cC1zaDc3ODAubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJKz0gc2V0dXAtc2g3Nzg1Lm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCSs9IHNldHVwLXNoNzc4Ni5vCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKQkrPSBzZXR1cC1zaDczNDMubwogb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikJKz0gc2V0dXAtc2g3NzIyLm8KIG9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCSs9IHNldHVwLXNoNzcyMy5vCkBAIC0yMSw2ICsyMiw3IEBACiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzApCTo9IGNsb2NrLXNoNzc3MC5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCTo9IGNsb2NrLXNoNzc4MC5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCTo9IGNsb2NrLXNoNzc4NS5vCitjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCTo9IGNsb2NrLXNoNzc4Ni5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpCTo9IGNsb2NrLXNoNzcyMi5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpCTo9IGNsb2NrLXNoNzcyMi5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCTo9IGNsb2NrLXNoNzcyMi5vCkBAIC0zMSw2ICszMyw3IEBACiBwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIyKQk6PSBwaW5tdXgtc2g3NzIyLm8KIHBpbm11eC0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpCTo9IHBpbm11eC1zaDc3MjMubwogcGlubXV4LSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkJOj0gcGlubXV4LXNoNzc4NS5vCitwaW5tdXgtJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQk6PSBwaW5tdXgtc2g3Nzg2Lm8KIAogb2JqLXkJCQkrPSAkKGNsb2NrLXkpCiBvYmotJChDT05GSUdfU01QKQkrPSAkKHNtcC15KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODRhOWMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvY2xvY2stc2g3Nzg2LmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9jbG9jay1zaDc3ODYuYworICoKKyAqIFNINzc4NiBzdXBwb3J0IGZvciB0aGUgY2xvY2sgZnJhbWV3b3JrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICogS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uIFNINzc4NQorICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9mcmVxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbnQgaWZjX2Rpdmlzb3JzW10gPSB7IDEsIDIsIDQsIDEgfTsKK3N0YXRpYyBpbnQgc2ZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDQsIDEgfTsKK3N0YXRpYyBpbnQgYmZjX2Rpdmlzb3JzW10gPSB7IDEsIDEsIDEsIDEsIDEsIDEyLCAxNiwgMSwKKwkJCSAgICAgMjQsIDMyLCAxLCAxLCAxLCAxLCAxLCAxIH07CitzdGF0aWMgaW50IG1mY19kaXZpc29yc1tdID0geyAxLCAxLCA0LCAxIH07CitzdGF0aWMgaW50IHBmY19kaXZpc29yc1tdID0geyAxLCAxLCAxLCAxLCAxLCAxLCAxNiwgMSwKKwkJCSAgICAgIDI0LCAzMiwgMSwgNDgsIDEsIDEsIDEsIDEgfTsKKworc3RhdGljIHZvaWQgbWFzdGVyX2Nsa19pbml0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbGstPnJhdGUgKj0gcGZjX2Rpdmlzb3JzW2N0cmxfaW5sKEZSUU1SMSkgJiAweDAwMGZdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X21hc3Rlcl9jbGtfb3BzID0geworCS5pbml0CQk9IG1hc3Rlcl9jbGtfaW5pdCwKK307CisKK3N0YXRpYyB2b2lkIG1vZHVsZV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKGN0cmxfaW5sKEZSUU1SMSkgJiAweDAwMGYpOworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gcGZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3ODZfbW9kdWxlX2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBtb2R1bGVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyB2b2lkIGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDE2KSAmIDB4MDAwZik7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBiZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9idXNfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IGJ1c19jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgY3B1X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMjgpICYgMHgwMDAzKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGlmY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X2NwdV9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gY3B1X2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19vcHMgKnNoNzc4Nl9jbGtfb3BzW10gPSB7CisJJnNoNzc4Nl9tYXN0ZXJfY2xrX29wcywKKwkmc2g3Nzg2X21vZHVsZV9jbGtfb3BzLAorCSZzaDc3ODZfYnVzX2Nsa19vcHMsCisJJnNoNzc4Nl9jcHVfY2xrX29wcywKK307CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9jbGtfb3BzKHN0cnVjdCBjbGtfb3BzICoqb3BzLCBpbnQgaWR4KQoreworCWlmIChpZHggPCBBUlJBWV9TSVpFKHNoNzc4Nl9jbGtfb3BzKSkKKwkJKm9wcyA9IHNoNzc4Nl9jbGtfb3BzW2lkeF07Cit9CisKK3N0YXRpYyB2b2lkIHNoeXdheV9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgaWR4ID0gKChjdHJsX2lubChGUlFNUjEpID4+IDIwKSAmIDB4MDAwMyk7CisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBzZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzc4Nl9zaHl3YXlfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IHNoeXdheV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2g3Nzg2X3NoeXdheV9jbGsgPSB7CisJLm5hbWUJCT0gInNoeXdheV9jbGsiLAorCS5mbGFncwkJPSBDTEtfQUxXQVlTX0VOQUJMRUQsCisJLm9wcwkJPSAmc2g3Nzg2X3NoeXdheV9jbGtfb3BzLAorfTsKKworc3RhdGljIHZvaWQgZGRyX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBpZHggPSAoKGN0cmxfaW5sKEZSUU1SMSkgPj4gMTIpICYgMHgwMDAzKTsKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIG1mY19kaXZpc29yc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3Nzg2X2Rkcl9jbGtfb3BzID0geworCS5yZWNhbGMJCT0gZGRyX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzaDc3ODZfZGRyX2NsayA9IHsKKwkubmFtZQkJPSAiZGRyX2NsayIsCisJLmZsYWdzCQk9IENMS19BTFdBWVNfRU5BQkxFRCwKKwkub3BzCQk9ICZzaDc3ODZfZGRyX2Nsa19vcHMsCit9OworCisvKgorICogQWRkaXRpb25hbCBTSDc3ODYtc3BlY2lmaWMgb24tY2hpcCBjbG9ja3MgdGhhdCBhcmVuJ3QgYWxyZWFkeSBwYXJ0IG9mIHRoZQorICogY2xvY2sgZnJhbWV3b3JrCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrICpzaDc3ODZfb25jaGlwX2Nsb2Nrc1tdID0geworCSZzaDc3ODZfc2h5d2F5X2NsaywKKwkmc2g3Nzg2X2Rkcl9jbGssCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaDc3ODZfY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KE5VTEwsICJtYXN0ZXJfY2xrIik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaDc3ODZfb25jaGlwX2Nsb2Nrcyk7IGkrKykgeworCQlzdHJ1Y3QgY2xrICpjbGtwID0gc2g3Nzg2X29uY2hpcF9jbG9ja3NbaV07CisKKwkJY2xrcC0+cGFyZW50ID0gY2xrOworCQljbGtfcmVnaXN0ZXIoY2xrcCk7CisJCWNsa19lbmFibGUoY2xrcCk7CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBoYXZlIHRoZSByZXN0IG9mIHRoZSBjbG9ja3MgcmVnaXN0ZXJlZCwgd2UgbmVlZCB0bworCSAqIGZvcmNlIHRoZSBwYXJlbnQgY2xvY2sgdG8gcHJvcGFnYXRlIHNvIHRoYXQgdGhlc2UgY2xvY2tzIHdpbGwKKwkgKiBhdXRvbWF0aWNhbGx5IGZpZ3VyZSBvdXQgdGhlaXIgcmF0ZS4gV2UgY2hlYXQgYnkgaGFuZGluZyB0aGUKKwkgKiBwYXJlbnQgY2xvY2sgaXRzIGN1cnJlbnQgcmF0ZSBhbmQgZm9yY2luZyBjaGlsZCBwcm9wYWdhdGlvbi4KKwkgKi8KKwljbGtfc2V0X3JhdGUoY2xrLCBjbGtfZ2V0X3JhdGUoY2xrKSk7CisKKwljbGtfcHV0KGNsayk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoc2g3Nzg2X2Nsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3Bpbm11eC1zaDc3ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzNiMzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvcGlubXV4LXNoNzc4Ni5jCkBAIC0wLDAgKzEsOTUwIEBACisvKgorICogU0g3Nzg2IFBpbm11eAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiAgQmFzZWQgb24gU0g3Nzg1IHBpbm11eAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8Y3B1L3NoNzc4Ni5oPgorCitlbnVtIHsKKwlQSU5NVVhfUkVTRVJWRUQgPSAwLAorCisJUElOTVVYX0RBVEFfQkVHSU4sCisJUEE3X0RBVEEsIFBBNl9EQVRBLCBQQTVfREFUQSwgUEE0X0RBVEEsCisJUEEzX0RBVEEsIFBBMl9EQVRBLCBQQTFfREFUQSwgUEEwX0RBVEEsCisJUEI3X0RBVEEsIFBCNl9EQVRBLCBQQjVfREFUQSwgUEI0X0RBVEEsCisJUEIzX0RBVEEsIFBCMl9EQVRBLCBQQjFfREFUQSwgUEIwX0RBVEEsCisJUEM3X0RBVEEsIFBDNl9EQVRBLCBQQzVfREFUQSwgUEM0X0RBVEEsCisJUEMzX0RBVEEsIFBDMl9EQVRBLCBQQzFfREFUQSwgUEMwX0RBVEEsCisJUEQ3X0RBVEEsIFBENl9EQVRBLCBQRDVfREFUQSwgUEQ0X0RBVEEsCisJUEQzX0RBVEEsIFBEMl9EQVRBLCBQRDFfREFUQSwgUEQwX0RBVEEsCisJUEU3X0RBVEEsIFBFNl9EQVRBLAorCVBGN19EQVRBLCBQRjZfREFUQSwgUEY1X0RBVEEsIFBGNF9EQVRBLAorCVBGM19EQVRBLCBQRjJfREFUQSwgUEYxX0RBVEEsIFBGMF9EQVRBLAorCVBHN19EQVRBLCBQRzZfREFUQSwgUEc1X0RBVEEsCisJUEg3X0RBVEEsIFBINl9EQVRBLCBQSDVfREFUQSwgUEg0X0RBVEEsCisJUEgzX0RBVEEsIFBIMl9EQVRBLCBQSDFfREFUQSwgUEgwX0RBVEEsCisJUEo3X0RBVEEsIFBKNl9EQVRBLCBQSjVfREFUQSwgUEo0X0RBVEEsCisJUEozX0RBVEEsIFBKMl9EQVRBLCBQSjFfREFUQSwKKwlQSU5NVVhfREFUQV9FTkQsCisKKwlQSU5NVVhfSU5QVVRfQkVHSU4sCisJUEE3X0lOLCBQQTZfSU4sIFBBNV9JTiwgUEE0X0lOLAorCVBBM19JTiwgUEEyX0lOLCBQQTFfSU4sIFBBMF9JTiwKKwlQQjdfSU4sIFBCNl9JTiwgUEI1X0lOLCBQQjRfSU4sCisJUEIzX0lOLCBQQjJfSU4sIFBCMV9JTiwgUEIwX0lOLAorCVBDN19JTiwgUEM2X0lOLCBQQzVfSU4sIFBDNF9JTiwKKwlQQzNfSU4sIFBDMl9JTiwgUEMxX0lOLCBQQzBfSU4sCisJUEQ3X0lOLCBQRDZfSU4sIFBENV9JTiwgUEQ0X0lOLAorCVBEM19JTiwgUEQyX0lOLCBQRDFfSU4sIFBEMF9JTiwKKwlQRTdfSU4sIFBFNl9JTiwKKwlQRjdfSU4sIFBGNl9JTiwgUEY1X0lOLCBQRjRfSU4sCisJUEYzX0lOLCBQRjJfSU4sIFBGMV9JTiwgUEYwX0lOLAorCVBHN19JTiwgUEc2X0lOLCBQRzVfSU4sCisJUEg3X0lOLCBQSDZfSU4sIFBINV9JTiwgUEg0X0lOLAorCVBIM19JTiwgUEgyX0lOLCBQSDFfSU4sIFBIMF9JTiwKKwlQSjdfSU4sIFBKNl9JTiwgUEo1X0lOLCBQSjRfSU4sCisJUEozX0lOLCBQSjJfSU4sIFBKMV9JTiwKKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQQTdfSU5fUFUsIFBBNl9JTl9QVSwgUEE1X0lOX1BVLCBQQTRfSU5fUFUsCisJUEEzX0lOX1BVLCBQQTJfSU5fUFUsIFBBMV9JTl9QVSwgUEEwX0lOX1BVLAorCVBCN19JTl9QVSwgUEI2X0lOX1BVLCBQQjVfSU5fUFUsIFBCNF9JTl9QVSwKKwlQQjNfSU5fUFUsIFBCMl9JTl9QVSwgUEIxX0lOX1BVLCBQQjBfSU5fUFUsCisJUEM3X0lOX1BVLCBQQzZfSU5fUFUsIFBDNV9JTl9QVSwgUEM0X0lOX1BVLAorCVBDM19JTl9QVSwgUEMyX0lOX1BVLCBQQzFfSU5fUFUsIFBDMF9JTl9QVSwKKwlQRDdfSU5fUFUsIFBENl9JTl9QVSwgUEQ1X0lOX1BVLCBQRDRfSU5fUFUsCisJUEQzX0lOX1BVLCBQRDJfSU5fUFUsIFBEMV9JTl9QVSwgUEQwX0lOX1BVLAorCVBFN19JTl9QVSwgUEU2X0lOX1BVLAorCVBGN19JTl9QVSwgUEY2X0lOX1BVLCBQRjVfSU5fUFUsIFBGNF9JTl9QVSwKKwlQRjNfSU5fUFUsIFBGMl9JTl9QVSwgUEYxX0lOX1BVLCBQRjBfSU5fUFUsCisJUEc3X0lOX1BVLCBQRzZfSU5fUFUsIFBHNV9JTl9QVSwKKwlQSDdfSU5fUFUsIFBINl9JTl9QVSwgUEg1X0lOX1BVLCBQSDRfSU5fUFUsCisJUEgzX0lOX1BVLCBQSDJfSU5fUFUsIFBIMV9JTl9QVSwgUEgwX0lOX1BVLAorCVBKN19JTl9QVSwgUEo2X0lOX1BVLCBQSjVfSU5fUFUsIFBKNF9JTl9QVSwKKwlQSjNfSU5fUFUsIFBKMl9JTl9QVSwgUEoxX0lOX1BVLAorCVBJTk1VWF9JTlBVVF9QVUxMVVBfRU5ELAorCisJUElOTVVYX09VVFBVVF9CRUdJTiwKKwlQQTdfT1VULCBQQTZfT1VULCBQQTVfT1VULCBQQTRfT1VULAorCVBBM19PVVQsIFBBMl9PVVQsIFBBMV9PVVQsIFBBMF9PVVQsCisJUEI3X09VVCwgUEI2X09VVCwgUEI1X09VVCwgUEI0X09VVCwKKwlQQjNfT1VULCBQQjJfT1VULCBQQjFfT1VULCBQQjBfT1VULAorCVBDN19PVVQsIFBDNl9PVVQsIFBDNV9PVVQsIFBDNF9PVVQsCisJUEMzX09VVCwgUEMyX09VVCwgUEMxX09VVCwgUEMwX09VVCwKKwlQRDdfT1VULCBQRDZfT1VULCBQRDVfT1VULCBQRDRfT1VULAorCVBEM19PVVQsIFBEMl9PVVQsIFBEMV9PVVQsIFBEMF9PVVQsCisJUEU3X09VVCwgUEU2X09VVCwKKwlQRjdfT1VULCBQRjZfT1VULCBQRjVfT1VULCBQRjRfT1VULAorCVBGM19PVVQsIFBGMl9PVVQsIFBGMV9PVVQsIFBGMF9PVVQsCisJUEc3X09VVCwgUEc2X09VVCwgUEc1X09VVCwKKwlQSDdfT1VULCBQSDZfT1VULCBQSDVfT1VULCBQSDRfT1VULAorCVBIM19PVVQsIFBIMl9PVVQsIFBIMV9PVVQsIFBIMF9PVVQsCisJUEo3X09VVCwgUEo2X09VVCwgUEo1X09VVCwgUEo0X09VVCwKKwlQSjNfT1VULCBQSjJfT1VULCBQSjFfT1VULAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBBN19GTiwgUEE2X0ZOLCBQQTVfRk4sIFBBNF9GTiwKKwlQQTNfRk4sIFBBMl9GTiwgUEExX0ZOLCBQQTBfRk4sCisJUEI3X0ZOLCBQQjZfRk4sIFBCNV9GTiwgUEI0X0ZOLAorCVBCM19GTiwgUEIyX0ZOLCBQQjFfRk4sIFBCMF9GTiwKKwlQQzdfRk4sIFBDNl9GTiwgUEM1X0ZOLCBQQzRfRk4sCisJUEMzX0ZOLCBQQzJfRk4sIFBDMV9GTiwgUEMwX0ZOLAorCVBEN19GTiwgUEQ2X0ZOLCBQRDVfRk4sIFBENF9GTiwKKwlQRDNfRk4sIFBEMl9GTiwgUEQxX0ZOLCBQRDBfRk4sCisJUEU3X0ZOLCBQRTZfRk4sCisJUEY3X0ZOLCBQRjZfRk4sIFBGNV9GTiwgUEY0X0ZOLAorCVBGM19GTiwgUEYyX0ZOLCBQRjFfRk4sIFBGMF9GTiwKKwlQRzdfRk4sIFBHNl9GTiwgUEc1X0ZOLAorCVBIN19GTiwgUEg2X0ZOLCBQSDVfRk4sIFBINF9GTiwKKwlQSDNfRk4sIFBIMl9GTiwgUEgxX0ZOLCBQSDBfRk4sCisJUEo3X0ZOLCBQSjZfRk4sIFBKNV9GTiwgUEo0X0ZOLAorCVBKM19GTiwgUEoyX0ZOLCBQSjFfRk4sCisJUDFNU0VMMTRfMCwgUDFNU0VMMTRfMSwKKwlQMU1TRUwxM18wLCBQMU1TRUwxM18xLAorCVAxTVNFTDEyXzAsIFAxTVNFTDEyXzEsCisJUDFNU0VMMTFfMCwgUDFNU0VMMTFfMSwKKwlQMU1TRUwxMF8wLCBQMU1TRUwxMF8xLAorCVAxTVNFTDlfMCwgUDFNU0VMOV8xLAorCVAxTVNFTDhfMCwgUDFNU0VMOF8xLAorCVAxTVNFTDdfMCwgUDFNU0VMN18xLAorCVAxTVNFTDZfMCwgUDFNU0VMNl8xLAorCVAxTVNFTDVfMCwgUDFNU0VMNV8xLAorCVAxTVNFTDRfMCwgUDFNU0VMNF8xLAorCVAxTVNFTDNfMCwgUDFNU0VMM18xLAorCVAxTVNFTDJfMCwgUDFNU0VMMl8xLAorCVAxTVNFTDFfMCwgUDFNU0VMMV8xLAorCVAxTVNFTDBfMCwgUDFNU0VMMF8xLAorCisJUDJNU0VMMTVfMCwgUDJNU0VMMTVfMSwKKwlQMk1TRUwxNF8wLCBQMk1TRUwxNF8xLAorCVAyTVNFTDEzXzAsIFAyTVNFTDEzXzEsCisJUDJNU0VMMTJfMCwgUDJNU0VMMTJfMSwKKwlQMk1TRUwxMV8wLCBQMk1TRUwxMV8xLAorCVAyTVNFTDEwXzAsIFAyTVNFTDEwXzEsCisJUDJNU0VMOV8wLCBQMk1TRUw5XzEsCisJUDJNU0VMOF8wLCBQMk1TRUw4XzEsCisJUDJNU0VMN18wLCBQMk1TRUw3XzEsCisJUDJNU0VMNl8wLCBQMk1TRUw2XzEsCisJUDJNU0VMNV8wLCBQMk1TRUw1XzEsCisJUDJNU0VMNF8wLCBQMk1TRUw0XzEsCisJUDJNU0VMM18wLCBQMk1TRUwzXzEsCisJUDJNU0VMMl8wLCBQMk1TRUwyXzEsCisJUDJNU0VMMV8wLCBQMk1TRUwxXzEsCisJUDJNU0VMMF8wLCBQMk1TRUwwXzEsCisJUElOTVVYX0ZVTkNUSU9OX0VORCwKKworCVBJTk1VWF9NQVJLX0JFR0lOLAorCUNERV9NQVJLLAorCUVUSF9NQUdJQ19NQVJLLAorCURJU1BfTUFSSywKKwlFVEhfTElOS19NQVJLLAorCURSNV9NQVJLLAorCUVUSF9UWF9FUl9NQVJLLAorCURSNF9NQVJLLAorCUVUSF9UWF9FTl9NQVJLLAorCURSM19NQVJLLAorCUVUSF9UWEQzX01BUkssCisJRFIyX01BUkssCisJRVRIX1RYRDJfTUFSSywKKwlEUjFfTUFSSywKKwlFVEhfVFhEMV9NQVJLLAorCURSMF9NQVJLLAorCUVUSF9UWEQwX01BUkssCisKKwlWU1lOQ19NQVJLLAorCUhTUElfQ0xLX01BUkssCisJT0RERl9NQVJLLAorCUhTUElfQ1NfTUFSSywKKwlERzVfTUFSSywKKwlFVEhfTURJT19NQVJLLAorCURHNF9NQVJLLAorCUVUSF9SWF9DTEtfTUFSSywKKwlERzNfTUFSSywKKwlFVEhfTURDX01BUkssCisJREcyX01BUkssCisJRVRIX0NPTF9NQVJLLAorCURHMV9NQVJLLAorCUVUSF9UWF9DTEtfTUFSSywKKwlERzBfTUFSSywKKwlFVEhfQ1JTX01BUkssCisKKwlEQ0xLSU5fTUFSSywKKwlIU1BJX1JYX01BUkssCisJSFNZTkNfTUFSSywKKwlIU1BJX1RYX01BUkssCisJREI1X01BUkssCisJRVRIX1JYRDNfTUFSSywKKwlEQjRfTUFSSywKKwlFVEhfUlhEMl9NQVJLLAorCURCM19NQVJLLAorCUVUSF9SWEQxX01BUkssCisJREIyX01BUkssCisJRVRIX1JYRDBfTUFSSywKKwlEQjFfTUFSSywKKwlFVEhfUlhfRFZfTUFSSywKKwlEQjBfTUFSSywKKwlFVEhfUlhfRVJfTUFSSywKKworCURDTEtPVVRfTUFSSywKKwlTQ0lGMV9TTEtfTUFSSywKKwlTQ0lGMV9SWERfTUFSSywKKwlTQ0lGMV9UWERfTUFSSywKKwlEQUNLMV9NQVJLLAorCUJBQ0tfTUFSSywKKwlGQUxFX01BUkssCisJREFDSzBfTUFSSywKKwlGQ0xFX01BUkssCisJRFJFUTFfTUFSSywKKwlCUkVRX01BUkssCisJVVNCX09WQzFfTUFSSywKKwlEUkVRMF9NQVJLLAorCVVTQl9PVkMwX01BUkssCisKKwlVU0JfUEVOQzFfTUFSSywKKwlVU0JfUEVOQzBfTUFSSywKKworCUhBQzFfU0RPVVRfTUFSSywKKwlTU0kxX1NEQVRBX01BUkssCisJU0RJRjFDTURfTUFSSywKKwlIQUMxX1NESU5fTUFSSywKKwlTU0kxX1NDS19NQVJLLAorCVNESUYxQ0RfTUFSSywKKwlIQUMxX1NZTkNfTUFSSywKKwlTU0kxX1dTX01BUkssCisJU0RJRjFXUF9NQVJLLAorCUhBQzFfQklUQ0xLX01BUkssCisJU1NJMV9DTEtfTUFSSywKKwlTRElGMUNMS19NQVJLLAorCUhBQzBfU0RPVVRfTUFSSywKKwlTU0kwX1NEQVRBX01BUkssCisJU0RJRjFEM19NQVJLLAorCUhBQzBfU0RJTl9NQVJLLAorCVNTSTBfU0NLX01BUkssCisJU0RJRjFEMl9NQVJLLAorCUhBQzBfU1lOQ19NQVJLLAorCVNTSTBfV1NfTUFSSywKKwlTRElGMUQxX01BUkssCisJSEFDMF9CSVRDTEtfTUFSSywKKwlTU0kwX0NMS19NQVJLLAorCVNESUYxRDBfTUFSSywKKworCVNDSUYzX1NDS19NQVJLLAorCVNTSTJfU0RBVEFfTUFSSywKKwlTQ0lGM19SWERfTUFSSywKKwlUQ0xLX01BUkssCisJU1NJMl9TQ0tfTUFSSywKKwlTQ0lGM19UWERfTUFSSywKKwlIQUNfUkVTX01BUkssCisJU1NJMl9XU19NQVJLLAorCisJREFDSzNfTUFSSywKKwlTRElGMENNRF9NQVJLLAorCURBQ0syX01BUkssCisJU0RJRjBDRF9NQVJLLAorCURSRVEzX01BUkssCisJU0RJRjBXUF9NQVJLLAorCVNDSUYwX0NUU19NQVJLLAorCURSRVEyX01BUkssCisJU0RJRjBDTEtfTUFSSywKKwlTQ0lGMF9SVFNfTUFSSywKKwlJUkw3X01BUkssCisJU0RJRjBEM19NQVJLLAorCVNDSUYwX1NDS19NQVJLLAorCUlSTDZfTUFSSywKKwlTRElGMEQyX01BUkssCisJU0NJRjBfUlhEX01BUkssCisJSVJMNV9NQVJLLAorCVNESUYwRDFfTUFSSywKKwlTQ0lGMF9UWERfTUFSSywKKwlJUkw0X01BUkssCisJU0RJRjBEMF9NQVJLLAorCisJU0NJRjVfU0NLX01BUkssCisJRlJCX01BUkssCisJU0NJRjVfUlhEX01BUkssCisJSU9JUzE2X01BUkssCisJU0NJRjVfVFhEX01BUkssCisJQ0UyQl9NQVJLLAorCURSQUszX01BUkssCisJQ0UyQV9NQVJLLAorCVNDSUY0X1NDS19NQVJLLAorCURSQUsyX01BUkssCisJU1NJM19XU19NQVJLLAorCVNDSUY0X1JYRF9NQVJLLAorCURSQUsxX01BUkssCisJU1NJM19TREFUQV9NQVJLLAorCUZTVEFUVVNfTUFSSywKKwlTQ0lGNF9UWERfTUFSSywKKwlEUkFLMF9NQVJLLAorCVNTSTNfU0NLX01BUkssCisJRlNFX01BUkssCisJUElOTVVYX01BUktfRU5ELAorfTsKKworc3RhdGljIHBpbm11eF9lbnVtX3QgcGlubXV4X2RhdGFbXSA9IHsKKworCS8qIFBBIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQQTdfREFUQSwgUEE3X0lOLCBQQTdfT1VULCBQQTdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBNl9EQVRBLCBQQTZfSU4sIFBBNl9PVVQsIFBBNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEE1X0RBVEEsIFBBNV9JTiwgUEE1X09VVCwgUEE1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTRfREFUQSwgUEE0X0lOLCBQQTRfT1VULCBQQTRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBM19EQVRBLCBQQTNfSU4sIFBBM19PVVQsIFBBM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEEyX0RBVEEsIFBBMl9JTiwgUEEyX09VVCwgUEEyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQTFfREFUQSwgUEExX0lOLCBQQTFfT1VULCBQQTFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBBMF9EQVRBLCBQQTBfSU4sIFBBMF9PVVQsIFBBMF9JTl9QVSksCisKKwkvKiBQQiBHUElPICovCisJUElOTVVYX0RBVEEoUEI3X0RBVEEsIFBCN19JTiwgUEI3X09VVCwgUEI3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjZfREFUQSwgUEI2X0lOLCBQQjZfT1VULCBQQjZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCNV9EQVRBLCBQQjVfSU4sIFBCNV9PVVQsIFBCNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEI0X0RBVEEsIFBCNF9JTiwgUEI0X09VVCwgUEI0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjNfREFUQSwgUEIzX0lOLCBQQjNfT1VULCBQQjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBCMl9EQVRBLCBQQjJfSU4sIFBCMl9PVVQsIFBCMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEIxX0RBVEEsIFBCMV9JTiwgUEIxX09VVCwgUEIxX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQjBfREFUQSwgUEIwX0lOLCBQQjBfT1VULCBQQjBfSU5fUFUpLAorCisJLyogUEMgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBDN19EQVRBLCBQQzdfSU4sIFBDN19PVVQsIFBDN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEM2X0RBVEEsIFBDNl9JTiwgUEM2X09VVCwgUEM2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzVfREFUQSwgUEM1X0lOLCBQQzVfT1VULCBQQzVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDNF9EQVRBLCBQQzRfSU4sIFBDNF9PVVQsIFBDNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEMzX0RBVEEsIFBDM19JTiwgUEMzX09VVCwgUEMzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQQzJfREFUQSwgUEMyX0lOLCBQQzJfT1VULCBQQzJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBDMV9EQVRBLCBQQzFfSU4sIFBDMV9PVVQsIFBDMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEMwX0RBVEEsIFBDMF9JTiwgUEMwX09VVCwgUEMwX0lOX1BVKSwKKworCS8qIFBEIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQRDdfREFUQSwgUEQ3X0lOLCBQRDdfT1VULCBQRDdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBENl9EQVRBLCBQRDZfSU4sIFBENl9PVVQsIFBENl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEQ1X0RBVEEsIFBENV9JTiwgUEQ1X09VVCwgUEQ1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDRfREFUQSwgUEQ0X0lOLCBQRDRfT1VULCBQRDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBEM19EQVRBLCBQRDNfSU4sIFBEM19PVVQsIFBEM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEQyX0RBVEEsIFBEMl9JTiwgUEQyX09VVCwgUEQyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRDFfREFUQSwgUEQxX0lOLCBQRDFfT1VULCBQRDFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBEMF9EQVRBLCBQRDBfSU4sIFBEMF9PVVQsIFBEMF9JTl9QVSksCisKKwkvKiBQRSBHUElPICovCisJUElOTVVYX0RBVEEoUEU3X0RBVEEsIFBFN19JTiwgUEU3X09VVCwgUEU3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRTZfREFUQSwgUEU2X0lOLCBQRTZfT1VULCBQRTZfSU5fUFUpLAorCisJLyogUEYgR1BJTyAqLworCVBJTk1VWF9EQVRBKFBGN19EQVRBLCBQRjdfSU4sIFBGN19PVVQsIFBGN19JTl9QVSksCisJUElOTVVYX0RBVEEoUEY2X0RBVEEsIFBGNl9JTiwgUEY2X09VVCwgUEY2X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjVfREFUQSwgUEY1X0lOLCBQRjVfT1VULCBQRjVfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGNF9EQVRBLCBQRjRfSU4sIFBGNF9PVVQsIFBGNF9JTl9QVSksCisJUElOTVVYX0RBVEEoUEYzX0RBVEEsIFBGM19JTiwgUEYzX09VVCwgUEYzX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQRjJfREFUQSwgUEYyX0lOLCBQRjJfT1VULCBQRjJfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBGMV9EQVRBLCBQRjFfSU4sIFBGMV9PVVQsIFBGMV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEYwX0RBVEEsIFBGMF9JTiwgUEYwX09VVCwgUEYwX0lOX1BVKSwKKworCS8qIFBHIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQRzdfREFUQSwgUEc3X0lOLCBQRzdfT1VULCBQRzdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBHNl9EQVRBLCBQRzZfSU4sIFBHNl9PVVQsIFBHNl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEc1X0RBVEEsIFBHNV9JTiwgUEc1X09VVCwgUEc1X0lOX1BVKSwKKworCS8qIFBIIEdQSU8gKi8KKwlQSU5NVVhfREFUQShQSDdfREFUQSwgUEg3X0lOLCBQSDdfT1VULCBQSDdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBINl9EQVRBLCBQSDZfSU4sIFBINl9PVVQsIFBINl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEg1X0RBVEEsIFBINV9JTiwgUEg1X09VVCwgUEg1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDRfREFUQSwgUEg0X0lOLCBQSDRfT1VULCBQSDRfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBIM19EQVRBLCBQSDNfSU4sIFBIM19PVVQsIFBIM19JTl9QVSksCisJUElOTVVYX0RBVEEoUEgyX0RBVEEsIFBIMl9JTiwgUEgyX09VVCwgUEgyX0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSDFfREFUQSwgUEgxX0lOLCBQSDFfT1VULCBQSDFfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBIMF9EQVRBLCBQSDBfSU4sIFBIMF9PVVQsIFBIMF9JTl9QVSksCisKKwkvKiBQSiBHUElPICovCisJUElOTVVYX0RBVEEoUEo3X0RBVEEsIFBKN19JTiwgUEo3X09VVCwgUEo3X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjZfREFUQSwgUEo2X0lOLCBQSjZfT1VULCBQSjZfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKNV9EQVRBLCBQSjVfSU4sIFBKNV9PVVQsIFBKNV9JTl9QVSksCisJUElOTVVYX0RBVEEoUEo0X0RBVEEsIFBKNF9JTiwgUEo0X09VVCwgUEo0X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQSjNfREFUQSwgUEozX0lOLCBQSjNfT1VULCBQSjNfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBKMl9EQVRBLCBQSjJfSU4sIFBKMl9PVVQsIFBKMl9JTl9QVSksCisJUElOTVVYX0RBVEEoUEoxX0RBVEEsIFBKMV9JTiwgUEoxX09VVCwgUEoxX0lOX1BVKSwKKworCS8qIFBBIEZOICovCisJUElOTVVYX01BUktfQkVHSU4sCisJUElOTVVYX0RBVEEoQ0RFX01BUkssCQlQMU1TRUwyXzAsIFBBN19GTiksCisJUElOTVVYX0RBVEEoRElTUF9NQVJLLAkJUDFNU0VMMl8wLCBQQTZfRk4pLAorCVBJTk1VWF9EQVRBKERSNV9NQVJLLAkJUDFNU0VMMl8wLCBQQTVfRk4pLAorCVBJTk1VWF9EQVRBKERSNF9NQVJLLAkJUDFNU0VMMl8wLCBQQTRfRk4pLAorCVBJTk1VWF9EQVRBKERSM19NQVJLLAkJUDFNU0VMMl8wLCBQQTNfRk4pLAorCVBJTk1VWF9EQVRBKERSMl9NQVJLLAkJUDFNU0VMMl8wLCBQQTJfRk4pLAorCVBJTk1VWF9EQVRBKERSMV9NQVJLLAkJUDFNU0VMMl8wLCBQQTFfRk4pLAorCVBJTk1VWF9EQVRBKERSMF9NQVJLLAkJUDFNU0VMMl8wLCBQQTBfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9NQUdJQ19NQVJLLAlQMU1TRUwyXzEsIFBBN19GTiksCisJUElOTVVYX0RBVEEoRVRIX0xJTktfTUFSSywJUDFNU0VMMl8xLCBQQTZfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWF9FUl9NQVJLLAlQMU1TRUwyXzEsIFBBNV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYX0VOX01BUkssCVAxTVNFTDJfMSwgUEE0X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhEM19NQVJLLAlQMU1TRUwyXzEsIFBBM19GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYRDJfTUFSSywJUDFNU0VMMl8xLCBQQTJfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9UWEQxX01BUkssCVAxTVNFTDJfMSwgUEExX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfVFhEMF9NQVJLLAlQMU1TRUwyXzEsIFBBMF9GTiksCisKKwkvKiBQQiBGTiAqLworCVBJTk1VWF9EQVRBKFZTWU5DX01BUkssCQlQMU1TRUwzXzAsIFBCN19GTiksCisJUElOTVVYX0RBVEEoT0RERl9NQVJLLAkJUDFNU0VMM18wLCBQQjZfRk4pLAorCVBJTk1VWF9EQVRBKERHNV9NQVJLLAkJUDFNU0VMMl8wLCBQQjVfRk4pLAorCVBJTk1VWF9EQVRBKERHNF9NQVJLLAkJUDFNU0VMMl8wLCBQQjRfRk4pLAorCVBJTk1VWF9EQVRBKERHM19NQVJLLAkJUDFNU0VMMl8wLCBQQjNfRk4pLAorCVBJTk1VWF9EQVRBKERHMl9NQVJLLAkJUDFNU0VMMl8wLCBQQjJfRk4pLAorCVBJTk1VWF9EQVRBKERHMV9NQVJLLAkJUDFNU0VMMl8wLCBQQjFfRk4pLAorCVBJTk1VWF9EQVRBKERHMF9NQVJLLAkJUDFNU0VMMl8wLCBQQjBfRk4pLAorCVBJTk1VWF9EQVRBKEhTUElfQ0xLX01BUkssCVAxTVNFTDNfMSwgUEI3X0ZOKSwKKwlQSU5NVVhfREFUQShIU1BJX0NTX01BUkssCVAxTVNFTDNfMSwgUEI2X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfTURJT19NQVJLLAlQMU1TRUwyXzEsIFBCNV9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYX0NMS19NQVJLLAlQMU1TRUwyXzEsIFBCNF9GTiksCisJUElOTVVYX0RBVEEoRVRIX01EQ19NQVJLLAlQMU1TRUwyXzEsIFBCM19GTiksCisJUElOTVVYX0RBVEEoRVRIX0NPTF9NQVJLLAlQMU1TRUwyXzEsIFBCMl9GTiksCisJUElOTVVYX0RBVEEoRVRIX1RYX0NMS19NQVJLLAlQMU1TRUwyXzEsIFBCMV9GTiksCisJUElOTVVYX0RBVEEoRVRIX0NSU19NQVJLLAlQMU1TRUwyXzEsIFBCMF9GTiksCisKKwkvKiBQQyBGTiAqLworCVBJTk1VWF9EQVRBKERDTEtJTl9NQVJLLAlQMU1TRUwzXzAsIFBDN19GTiksCisJUElOTVVYX0RBVEEoSFNZTkNfTUFSSywJCVAxTVNFTDNfMCwgUEM2X0ZOKSwKKwlQSU5NVVhfREFUQShEQjVfTUFSSywJCVAxTVNFTDJfMCwgUEM1X0ZOKSwKKwlQSU5NVVhfREFUQShEQjRfTUFSSywJCVAxTVNFTDJfMCwgUEM0X0ZOKSwKKwlQSU5NVVhfREFUQShEQjNfTUFSSywJCVAxTVNFTDJfMCwgUEMzX0ZOKSwKKwlQSU5NVVhfREFUQShEQjJfTUFSSywJCVAxTVNFTDJfMCwgUEMyX0ZOKSwKKwlQSU5NVVhfREFUQShEQjFfTUFSSywJCVAxTVNFTDJfMCwgUEMxX0ZOKSwKKwlQSU5NVVhfREFUQShEQjBfTUFSSywJCVAxTVNFTDJfMCwgUEMwX0ZOKSwKKworCVBJTk1VWF9EQVRBKEhTUElfUlhfTUFSSywJUDFNU0VMM18xLCBQQzdfRk4pLAorCVBJTk1VWF9EQVRBKEhTUElfVFhfTUFSSywJUDFNU0VMM18xLCBQQzZfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWEQzX01BUkssCVAxTVNFTDJfMSwgUEM1X0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhEMl9NQVJLLAlQMU1TRUwyXzEsIFBDNF9GTiksCisJUElOTVVYX0RBVEEoRVRIX1JYRDFfTUFSSywJUDFNU0VMMl8xLCBQQzNfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWEQwX01BUkssCVAxTVNFTDJfMSwgUEMyX0ZOKSwKKwlQSU5NVVhfREFUQShFVEhfUlhfRFZfTUFSSywJUDFNU0VMMl8xLCBQQzFfRk4pLAorCVBJTk1VWF9EQVRBKEVUSF9SWF9FUl9NQVJLLAlQMU1TRUwyXzEsIFBDMF9GTiksCisKKwkvKiBQRCBGTiAqLworCVBJTk1VWF9EQVRBKERDTEtPVVRfTUFSSywJUEQ3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9TTEtfTUFSSywJUEQ2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9SWERfTUFSSywJUEQ1X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMV9UWERfTUFSSywJUEQ0X0ZOKSwKKwlQSU5NVVhfREFUQShEQUNLMV9NQVJLLAkJUDFNU0VMMTNfMSwgUDFNU0VMMTJfMCwgUEQzX0ZOKSwKKwlQSU5NVVhfREFUQShCQUNLX01BUkssCQlQMU1TRUwxM18wLCBQMU1TRUwxMl8xLCBQRDNfRk4pLAorCVBJTk1VWF9EQVRBKEZBTEVfTUFSSywJCVAxTVNFTDEzXzAsIFAxTVNFTDEyXzAsIFBEM19GTiksCisJUElOTVVYX0RBVEEoREFDSzBfTUFSSywJCVAxTVNFTDE0XzEsIFBEMl9GTiksCisJUElOTVVYX0RBVEEoRkNMRV9NQVJLLAkJUDFNU0VMMTRfMCwgUEQyX0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRMV9NQVJLLAkJUDFNU0VMMTBfMCwgUDFNU0VMOV8xLCBQRDFfRk4pLAorCVBJTk1VWF9EQVRBKEJSRVFfTUFSSywJCVAxTVNFTDEwXzEsIFAxTVNFTDlfMCwgUEQxX0ZOKSwKKwlQSU5NVVhfREFUQShVU0JfT1ZDMV9NQVJLLAlQMU1TRUwxMF8wLCBQMU1TRUw5XzAsIFBEMV9GTiksCisJUElOTVVYX0RBVEEoRFJFUTBfTUFSSywJCVAxTVNFTDExXzEsIFBEMF9GTiksCisJUElOTVVYX0RBVEEoVVNCX09WQzBfTUFSSywJUDFNU0VMMTFfMCwgUEQwX0ZOKSwKKworCS8qIFBFIEZOICovCisJUElOTVVYX0RBVEEoVVNCX1BFTkMxX01BUkssCVBFN19GTiksCisJUElOTVVYX0RBVEEoVVNCX1BFTkMwX01BUkssCVBFNl9GTiksCisKKwkvKiBQRiBGTiAqLworCVBJTk1VWF9EQVRBKEhBQzFfU0RPVVRfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY3X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMxX1NESU5fTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY2X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMxX1NZTkNfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMCwgUEY1X0ZOKSwKKwlQSU5NVVhfREFUQShIQUMxX0JJVENMS19NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8wLCBQRjRfRk4pLAorCVBJTk1VWF9EQVRBKEhBQzBfU0RPVVRfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYzX0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX1NESU5fTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYyX0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX1NZTkNfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMCwgUEYxX0ZOKSwKKwlQSU5NVVhfREFUQShIQUMwX0JJVENMS19NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8wLCBQRjBfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTFfU0RBVEFfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY3X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX1NDS19NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8xLCBQRjZfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTFfV1NfTUFSSywJUDJNU0VMMTVfMCwgUDJNU0VMMTRfMSwgUEY1X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kxX0NMS19NQVJLLAlQMk1TRUwxNV8wLCBQMk1TRUwxNF8xLCBQRjRfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTBfU0RBVEFfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYzX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX1NDS19NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8xLCBQRjJfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTBfV1NfTUFSSywJUDJNU0VMMTNfMCwgUDJNU0VMMTJfMSwgUEYxX0ZOKSwKKwlQSU5NVVhfREFUQShTU0kwX0NMS19NQVJLLAlQMk1TRUwxM18wLCBQMk1TRUwxMl8xLCBQRjBfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxQ01EX01BUkssCVAyTVNFTDE1XzEsIFAyTVNFTDE0XzAsIFBGN19GTiksCisJUElOTVVYX0RBVEEoU0RJRjFDRF9NQVJLLAlQMk1TRUwxNV8xLCBQMk1TRUwxNF8wLCBQRjZfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxV1BfTUFSSywJUDJNU0VMMTVfMSwgUDJNU0VMMTRfMCwgUEY1X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUNMS19NQVJLLAlQMk1TRUwxNV8xLCBQMk1TRUwxNF8wLCBQRjRfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxRDNfTUFSSywJUDJNU0VMMTNfMSwgUDJNU0VMMTJfMCwgUEYzX0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMUQyX01BUkssCVAyTVNFTDEzXzEsIFAyTVNFTDEyXzAsIFBGMl9GTiksCisJUElOTVVYX0RBVEEoU0RJRjFEMV9NQVJLLAlQMk1TRUwxM18xLCBQMk1TRUwxMl8wLCBQRjFfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYxRDBfTUFSSywJUDJNU0VMMTNfMSwgUDJNU0VMMTJfMCwgUEYwX0ZOKSwKKworCS8qIFBHIEZOICovCisJUElOTVVYX0RBVEEoU0NJRjNfU0NLX01BUkssCVAxTVNFTDhfMCwgUEc3X0ZOKSwKKwlQSU5NVVhfREFUQShTU0kyX1NEQVRBX01BUkssCVAxTVNFTDhfMSwgUEc3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGM19SWERfTUFSSywJUDFNU0VMN18wLCBQMU1TRUw2XzAsIFBHNl9GTiksCisJUElOTVVYX0RBVEEoU1NJMl9TQ0tfTUFSSywJUDFNU0VMN18xLCBQMU1TRUw2XzAsIFBHNl9GTiksCisJUElOTVVYX0RBVEEoVENMS19NQVJLLAkJUDFNU0VMN18wLCBQMU1TRUw2XzEsIFBHNl9GTiksCisJUElOTVVYX0RBVEEoU0NJRjNfVFhEX01BUkssCVAxTVNFTDVfMCwgUDFNU0VMNF8wLCBQRzVfRk4pLAorCVBJTk1VWF9EQVRBKFNTSTJfV1NfTUFSSywJUDFNU0VMNV8xLCBQMU1TRUw0XzAsIFBHNV9GTiksCisJUElOTVVYX0RBVEEoSEFDX1JFU19NQVJLLAlQMU1TRUw1XzAsIFAxTVNFTDRfMSwgUEc1X0ZOKSwKKworCS8qIFBIIEZOICovCisJUElOTVVYX0RBVEEoREFDSzNfTUFSSywJCVAyTVNFTDRfMCwgUEg3X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMENNRF9NQVJLLAlQMk1TRUw0XzEsIFBIN19GTiksCisJUElOTVVYX0RBVEEoREFDSzJfTUFSSywJCVAyTVNFTDRfMCwgUEg2X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMENEX01BUkssCVAyTVNFTDRfMSwgUEg2X0ZOKSwKKwlQSU5NVVhfREFUQShEUkVRM19NQVJLLAkJUDJNU0VMNF8wLCBQSDVfRk4pLAorCVBJTk1VWF9EQVRBKFNESUYwV1BfTUFSSywJUDJNU0VMNF8xLCBQSDVfRk4pLAorCVBJTk1VWF9EQVRBKERSRVEyX01BUkssCQlQMk1TRUwzXzAsIFAyTVNFTDJfMSwgUEg0X0ZOKSwKKwlQSU5NVVhfREFUQShTRElGMENMS19NQVJLLAlQMk1TRUwzXzEsIFAyTVNFTDJfMCwgUEg0X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9DVFNfTUFSSywJUDJNU0VMM18wLCBQMk1TRUwyXzAsIFBINF9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEM19NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgzX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SVFNfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIM19GTiksCisJUElOTVVYX0RBVEEoSVJMN19NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIM19GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEMl9NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9TQ0tfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIMl9GTiksCisJUElOTVVYX0RBVEEoSVJMNl9NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIMl9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEMV9NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgxX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9SWERfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIMV9GTiksCisJUElOTVVYX0RBVEEoSVJMNV9NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIMV9GTiksCisJUElOTVVYX0RBVEEoU0RJRjBEMF9NQVJLLAlQMk1TRUwxXzEsIFAyTVNFTDBfMCwgUEgwX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGMF9UWERfTUFSSywJUDJNU0VMMV8wLCBQMk1TRUwwXzAsIFBIMF9GTiksCisJUElOTVVYX0RBVEEoSVJMNF9NQVJLLAkJUDJNU0VMMV8wLCBQMk1TRUwwXzEsIFBIMF9GTiksCisKKwkvKiBQSiBGTiAqLworCVBJTk1VWF9EQVRBKFNDSUY1X1NDS19NQVJLLAlQMk1TRUwxMV8xLCBQSjdfRk4pLAorCVBJTk1VWF9EQVRBKEZSQl9NQVJLLAkJUDJNU0VMMTFfMCwgUEo3X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9SWERfTUFSSywJUDJNU0VMMTBfMCwgUEo2X0ZOKSwKKwlQSU5NVVhfREFUQShJT0lTMTZfTUFSSywJUDJNU0VMMTBfMSwgUEo2X0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNV9UWERfTUFSSywJUDJNU0VMMTBfMCwgUEo1X0ZOKSwKKwlQSU5NVVhfREFUQShDRTJCX01BUkssCQlQMk1TRUwxMF8xLCBQSjVfRk4pLAorCVBJTk1VWF9EQVRBKERSQUszX01BUkssCQlQMk1TRUw3XzAsIFBKNF9GTiksCisJUElOTVVYX0RBVEEoQ0UyQV9NQVJLLAkJUDJNU0VMN18xLCBQSjRfRk4pLAorCVBJTk1VWF9EQVRBKFNDSUY0X1NDS19NQVJLLAlQMk1TRUw5XzAsIFAyTVNFTDhfMCwgUEozX0ZOKSwKKwlQSU5NVVhfREFUQShEUkFLMl9NQVJLLAkJUDJNU0VMOV8wLCBQMk1TRUw4XzEsIFBKM19GTiksCisJUElOTVVYX0RBVEEoU1NJM19XU19NQVJLLAlQMk1TRUw5XzEsIFAyTVNFTDhfMCwgUEozX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9SWERfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzAsIFBKMl9GTiksCisJUElOTVVYX0RBVEEoRFJBSzFfTUFSSywJCVAyTVNFTDZfMCwgUDJNU0VMNV8xLCBQSjJfRk4pLAorCVBJTk1VWF9EQVRBKEZTVEFUVVNfTUFSSywJUDJNU0VMNl8wLCBQMk1TRUw1XzAsIFBKMl9GTiksCisJUElOTVVYX0RBVEEoU1NJM19TREFUQV9NQVJLLAlQMk1TRUw2XzEsIFAyTVNFTDVfMSwgUEoyX0ZOKSwKKwlQSU5NVVhfREFUQShTQ0lGNF9UWERfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzAsIFBKMV9GTiksCisJUElOTVVYX0RBVEEoRFJBSzBfTUFSSywJCVAyTVNFTDZfMCwgUDJNU0VMNV8xLCBQSjFfRk4pLAorCVBJTk1VWF9EQVRBKEZTRV9NQVJLLAkJUDJNU0VMNl8wLCBQMk1TRUw1XzAsIFBKMV9GTiksCisJUElOTVVYX0RBVEEoU1NJM19TQ0tfTUFSSywJUDJNU0VMNl8xLCBQMk1TRUw1XzEsIFBKMV9GTiksCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9ncGlvIHBpbm11eF9ncGlvc1tdID0geworCS8qIFBBICovCisJUElOTVVYX0dQSU8oR1BJT19QQTcsIFBBN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBNiwgUEE2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEE1LCBQQTVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTQsIFBBNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMywgUEEzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEEyLCBQQTJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQTEsIFBBMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BBMCwgUEEwX0RBVEEpLAorCisJLyogUEIgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BCNywgUEI3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEI2LCBQQjZfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjUsIFBCNV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCNCwgUEI0X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIzLCBQQjNfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQjIsIFBCMl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BCMSwgUEIxX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEIwLCBQQjBfREFUQSksCisKKwkvKiBQQyAqLworCVBJTk1VWF9HUElPKEdQSU9fUEM3LCBQQzdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzYsIFBDNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDNSwgUEM1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEM0LCBQQzRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzMsIFBDM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BDMiwgUEMyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEMxLCBQQzFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QQzAsIFBDMF9EQVRBKSwKKworCS8qIFBEICovCisJUElOTVVYX0dQSU8oR1BJT19QRDcsIFBEN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BENiwgUEQ2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQ1LCBQRDVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDQsIFBENF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMywgUEQzX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEQyLCBQRDJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRDEsIFBEMV9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BEMCwgUEQwX0RBVEEpLAorCisJLyogUEUgKi8KKwlQSU5NVVhfR1BJTyhHUElPX1BFNSwgUEU3X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEU0LCBQRTZfREFUQSksCisKKwkvKiBQRiAqLworCVBJTk1VWF9HUElPKEdQSU9fUEY3LCBQRjdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjYsIFBGNl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGNSwgUEY1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEY0LCBQRjRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjMsIFBGM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BGMiwgUEYyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEYxLCBQRjFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QRjAsIFBGMF9EQVRBKSwKKworCS8qIFBHICovCisJUElOTVVYX0dQSU8oR1BJT19QRzcsIFBHN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BHNiwgUEc2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEc1LCBQRzVfREFUQSksCisKKwkvKiBQSCAqLworCVBJTk1VWF9HUElPKEdQSU9fUEg3LCBQSDdfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDYsIFBINl9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BINSwgUEg1X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEg0LCBQSDRfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDMsIFBIM19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BIMiwgUEgyX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEgxLCBQSDFfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSDAsIFBIMF9EQVRBKSwKKworCS8qIFBKICovCisJUElOTVVYX0dQSU8oR1BJT19QSjcsIFBKN19EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKNiwgUEo2X0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEo1LCBQSjVfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjQsIFBKNF9EQVRBKSwKKwlQSU5NVVhfR1BJTyhHUElPX1BKMywgUEozX0RBVEEpLAorCVBJTk1VWF9HUElPKEdQSU9fUEoyLCBQSjJfREFUQSksCisJUElOTVVYX0dQSU8oR1BJT19QSjEsIFBKMV9EQVRBKSwKKworCS8qIEZOICovCisJUElOTVVYX0dQSU8oR1BJT19GTl9DREUsCQlDREVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfTUFHSUMsCQlFVEhfTUFHSUNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ESVNQLAkJRElTUF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9MSU5LLAkJRVRIX0xJTktfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjUsCQlEUjVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhfRVIsCQlFVEhfVFhfRVJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjQsCQlEUjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhfRU4sCQlFVEhfVFhfRU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjMsCQlEUjNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhEMywJCUVUSF9UWEQzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFIyLAkJRFIyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1RYRDIsCQlFVEhfVFhEMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSMSwJCURSMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWEQxLAkJRVRIX1RYRDFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUjAsCQlEUjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfVFhEMCwJCUVUSF9UWEQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVlNZTkMsCQlWU1lOQ19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTUElfQ0xLLAkJSFNQSV9DTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9PRERGLAkJT0RERl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTUElfQ1MsCQlIU1BJX0NTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREc1LAkJREc1X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX01ESU8sCQlFVEhfTURJT19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHNCwJCURHNF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWF9DTEssCQlFVEhfUlhfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREczLAkJREczX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX01EQywJCUVUSF9NRENfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9ERzIsCQlERzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfQ09MLAkJRVRIX0NPTF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RHMSwJCURHMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9UWF9DTEssCQlFVEhfVFhfQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREcwLAkJREcwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX0NSUywJCUVUSF9DUlNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQ0xLSU4sCQlEQ0xLSU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX1JYLAkJSFNQSV9SWF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0hTWU5DLAkJSFNZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IU1BJX1RYLAkJSFNQSV9UWF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCNSwJCURCNV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWEQzLAkJRVRIX1JYRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjQsCQlEQjRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhEMiwJCUVUSF9SWEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREIzLAkJREIzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRVRIX1JYRDEsCQlFVEhfUlhEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RCMiwJCURCMl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0VUSF9SWEQwLAkJRVRIX1JYRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjEsCQlEQjFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhfRFYsCQlFVEhfUlhfRFZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQjAsCQlEQjBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9FVEhfUlhfRVIsCQlFVEhfUlhfRVJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQ0xLT1VULAkJRENMS09VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1NMSywJCVNDSUYxX1NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1JYRCwJCVNDSUYxX1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYxX1RYRCwJCVNDSUYxX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RBQ0sxLAkJREFDSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9CQUNLLAkJQkFDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZBTEUsCQlGQUxFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzAsCQlEQUNLMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZDTEUsCQlGQ0xFX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJFUTEsCQlEUkVRMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0JSRVEsCQlCUkVRX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX09WQzEsCQlVU0JfT1ZDMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSRVEwLAkJRFJFUTBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9VU0JfT1ZDMCwJCVVTQl9PVkMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX1BFTkMxLAkJVVNCX1BFTkMxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fVVNCX1BFTkMwLAkJVVNCX1BFTkMwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9TRE9VVCwJCUhBQzFfU0RPVVRfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kxX1NEQVRBLAkJU1NJMV9TREFUQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxQ01ELAkJU0RJRjFDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMxX1NESU4sCQlIQUMxX1NESU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kxX1NDSywJCVNTSTFfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFDRCwJCVNESUYxQ0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMxX1NZTkMsCQlIQUMxX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kxX1dTLAkJU1NJMV9XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxV1AsCQlTRElGMVdQX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMV9CSVRDTEssCUhBQzFfQklUQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMV9DTEssCQlTU0kxX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxQ0xLLAkJU0RJRjFDTEtfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMwX1NET1VULAkJSEFDMF9TRE9VVF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTBfU0RBVEEsCQlTU0kwX1NEQVRBX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFEMywJCVNESUYxRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMwX1NESU4sCQlIQUMwX1NESU5fTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kwX1NDSywJCVNTSTBfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjFEMiwJCVNESUYxRDJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUMwX1NZTkMsCQlIQUMwX1NZTkNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kwX1dTLAkJU1NJMF9XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDEsCQlTRElGMUQxX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSEFDMF9CSVRDTEssCUhBQzBfQklUQ0xLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMF9DTEssCQlTU0kwX0NMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYxRDAsCQlTRElGMUQwX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjNfU0NLLAkJU0NJRjNfU0NLX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU1NJMl9TREFUQSwJCVNTSTJfU0RBVEFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19SWEQsCQlTQ0lGM19SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9UQ0xLLAkJVENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTJfU0NLLAkJU1NJMl9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGM19UWEQsCQlTQ0lGM19UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9IQUNfUkVTLAkJSEFDX1JFU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTJfV1MsCQlTU0kyX1dTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fREFDSzMsCQlEQUNLM19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwQ01ELAkJU0RJRjBDTURfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EQUNLMiwJCURBQ0syX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBDRCwJCVNESUYwQ0RfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMywJCURSRVEzX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBXUCwJCVNESUYwV1BfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9DVFMsCQlTQ0lGMF9DVFNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9EUkVRMiwJCURSRVEyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBDTEssCQlTRElGMENMS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1JUUywJCVNDSUYwX1JUU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSTDcsCQlJUkw3X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBEMywJCVNESUYwRDNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGMF9TQ0ssCQlTQ0lGMF9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JUkw2LAkJSVJMNl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NESUYwRDIsCQlTRElGMEQyX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjBfUlhELAkJU0NJRjBfUlhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fSVJMNSwJCUlSTDVfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TRElGMEQxLAkJU0RJRjBEMV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUYwX1RYRCwJCVNDSUYwX1RYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0lSTDQsCQlJUkw0X01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0RJRjBEMCwJCVNESUYwRDBfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9TQ0ssCQlTQ0lGNV9TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GUkIsCQlGUkJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9SWEQsCQlTQ0lGNV9SWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9JT0lTMTYsCQlJT0lTMTZfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TQ0lGNV9UWEQsCQlTQ0lGNV9UWERfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DRTJCLAkJQ0UyQl9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUszLAkJRFJBSzNfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9DRTJBLAkJQ0UyQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1NDSywJCVNDSUY0X1NDS19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUsyLAkJRFJBSzJfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kzX1dTLAkJU1NJM19XU19NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NDSUY0X1JYRCwJCVNDSUY0X1JYRF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0RSQUsxLAkJRFJBSzFfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9TU0kzX1NEQVRBLAkJU1NJM19TREFUQV9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX0ZTVEFUVVMsCQlGU1RBVFVTX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fU0NJRjRfVFhELAkJU0NJRjRfVFhEX01BUkspLAorCVBJTk1VWF9HUElPKEdQSU9fRk5fRFJBSzAsCQlEUkFLMF9NQVJLKSwKKwlQSU5NVVhfR1BJTyhHUElPX0ZOX1NTSTNfU0NLLAkJU1NJM19TQ0tfTUFSSyksCisJUElOTVVYX0dQSU8oR1BJT19GTl9GU0UsCQlGU0VfTUFSSyksCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9jZmdfcmVnIHBpbm11eF9jb25maWdfcmVnc1tdID0geworCXsgUElOTVVYX0NGR19SRUcoIlBBQ1IiLCAweGZmY2MwMDAwLCAxNiwgMikgeworCQlQQTdfRk4sIFBBN19PVVQsIFBBN19JTiwgUEE3X0lOX1BVLAorCQlQQTZfRk4sIFBBNl9PVVQsIFBBNl9JTiwgUEE2X0lOX1BVLAorCQlQQTVfRk4sIFBBNV9PVVQsIFBBNV9JTiwgUEE1X0lOX1BVLAorCQlQQTRfRk4sIFBBNF9PVVQsIFBBNF9JTiwgUEE0X0lOX1BVLAorCQlQQTNfRk4sIFBBM19PVVQsIFBBM19JTiwgUEEzX0lOX1BVLAorCQlQQTJfRk4sIFBBMl9PVVQsIFBBMl9JTiwgUEEyX0lOX1BVLAorCQlQQTFfRk4sIFBBMV9PVVQsIFBBMV9JTiwgUEExX0lOX1BVLAorCQlQQTBfRk4sIFBBMF9PVVQsIFBBMF9JTiwgUEEwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBCQ1IiLCAweGZmY2MwMDAyLCAxNiwgMikgeworCQlQQjdfRk4sIFBCN19PVVQsIFBCN19JTiwgUEI3X0lOX1BVLAorCQlQQjZfRk4sIFBCNl9PVVQsIFBCNl9JTiwgUEI2X0lOX1BVLAorCQlQQjVfRk4sIFBCNV9PVVQsIFBCNV9JTiwgUEI1X0lOX1BVLAorCQlQQjRfRk4sIFBCNF9PVVQsIFBCNF9JTiwgUEI0X0lOX1BVLAorCQlQQjNfRk4sIFBCM19PVVQsIFBCM19JTiwgUEIzX0lOX1BVLAorCQlQQjJfRk4sIFBCMl9PVVQsIFBCMl9JTiwgUEIyX0lOX1BVLAorCQlQQjFfRk4sIFBCMV9PVVQsIFBCMV9JTiwgUEIxX0lOX1BVLAorCQlQQjBfRk4sIFBCMF9PVVQsIFBCMF9JTiwgUEIwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBDQ1IiLCAweGZmY2MwMDA0LCAxNiwgMikgeworCQlQQzdfRk4sIFBDN19PVVQsIFBDN19JTiwgUEM3X0lOX1BVLAorCQlQQzZfRk4sIFBDNl9PVVQsIFBDNl9JTiwgUEM2X0lOX1BVLAorCQlQQzVfRk4sIFBDNV9PVVQsIFBDNV9JTiwgUEM1X0lOX1BVLAorCQlQQzRfRk4sIFBDNF9PVVQsIFBDNF9JTiwgUEM0X0lOX1BVLAorCQlQQzNfRk4sIFBDM19PVVQsIFBDM19JTiwgUEMzX0lOX1BVLAorCQlQQzJfRk4sIFBDMl9PVVQsIFBDMl9JTiwgUEMyX0lOX1BVLAorCQlQQzFfRk4sIFBDMV9PVVQsIFBDMV9JTiwgUEMxX0lOX1BVLAorCQlQQzBfRk4sIFBDMF9PVVQsIFBDMF9JTiwgUEMwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBEQ1IiLCAweGZmY2MwMDA2LCAxNiwgMikgeworCQlQRDdfRk4sIFBEN19PVVQsIFBEN19JTiwgUEQ3X0lOX1BVLAorCQlQRDZfRk4sIFBENl9PVVQsIFBENl9JTiwgUEQ2X0lOX1BVLAorCQlQRDVfRk4sIFBENV9PVVQsIFBENV9JTiwgUEQ1X0lOX1BVLAorCQlQRDRfRk4sIFBENF9PVVQsIFBENF9JTiwgUEQ0X0lOX1BVLAorCQlQRDNfRk4sIFBEM19PVVQsIFBEM19JTiwgUEQzX0lOX1BVLAorCQlQRDJfRk4sIFBEMl9PVVQsIFBEMl9JTiwgUEQyX0lOX1BVLAorCQlQRDFfRk4sIFBEMV9PVVQsIFBEMV9JTiwgUEQxX0lOX1BVLAorCQlQRDBfRk4sIFBEMF9PVVQsIFBEMF9JTiwgUEQwX0lOX1BVIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlBFQ1IiLCAweGZmY2MwMDA4LCAxNiwgMikgeworCQlQRTdfRk4sIFBFN19PVVQsIFBFN19JTiwgUEU3X0lOX1BVLAorCQlQRTZfRk4sIFBFNl9PVVQsIFBFNl9JTiwgUEU2X0lOX1BVLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQRkNSIiwgMHhmZmNjMDAwYSwgMTYsIDIpIHsKKwkJUEY3X0ZOLCBQRjdfT1VULCBQRjdfSU4sIFBGN19JTl9QVSwKKwkJUEY2X0ZOLCBQRjZfT1VULCBQRjZfSU4sIFBGNl9JTl9QVSwKKwkJUEY1X0ZOLCBQRjVfT1VULCBQRjVfSU4sIFBGNV9JTl9QVSwKKwkJUEY0X0ZOLCBQRjRfT1VULCBQRjRfSU4sIFBGNF9JTl9QVSwKKwkJUEYzX0ZOLCBQRjNfT1VULCBQRjNfSU4sIFBGM19JTl9QVSwKKwkJUEYyX0ZOLCBQRjJfT1VULCBQRjJfSU4sIFBGMl9JTl9QVSwKKwkJUEYxX0ZOLCBQRjFfT1VULCBQRjFfSU4sIFBGMV9JTl9QVSwKKwkJUEYwX0ZOLCBQRjBfT1VULCBQRjBfSU4sIFBGMF9JTl9QVSB9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQR0NSIiwgMHhmZmNjMDAwYywgMTYsIDIpIHsKKwkJUEc3X0ZOLCBQRzdfT1VULCBQRzdfSU4sIFBHN19JTl9QVSwKKwkJUEc2X0ZOLCBQRzZfT1VULCBQRzZfSU4sIFBHNl9JTl9QVSwKKwkJUEc1X0ZOLCBQRzVfT1VULCBQRzVfSU4sIFBHNV9JTl9QVSwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEhDUiIsIDB4ZmZjYzAwMGUsIDE2LCAyKSB7CisJCVBIN19GTiwgUEg3X09VVCwgUEg3X0lOLCBQSDdfSU5fUFUsCisJCVBINl9GTiwgUEg2X09VVCwgUEg2X0lOLCBQSDZfSU5fUFUsCisJCVBINV9GTiwgUEg1X09VVCwgUEg1X0lOLCBQSDVfSU5fUFUsCisJCVBINF9GTiwgUEg0X09VVCwgUEg0X0lOLCBQSDRfSU5fUFUsCisJCVBIM19GTiwgUEgzX09VVCwgUEgzX0lOLCBQSDNfSU5fUFUsCisJCVBIMl9GTiwgUEgyX09VVCwgUEgyX0lOLCBQSDJfSU5fUFUsCisJCVBIMV9GTiwgUEgxX09VVCwgUEgxX0lOLCBQSDFfSU5fUFUsCisJCVBIMF9GTiwgUEgwX09VVCwgUEgwX0lOLCBQSDBfSU5fUFUgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUEpDUiIsIDB4ZmZjYzAwMTAsIDE2LCAyKSB7CisJCVBKN19GTiwgUEo3X09VVCwgUEo3X0lOLCBQSjdfSU5fUFUsCisJCVBKNl9GTiwgUEo2X09VVCwgUEo2X0lOLCBQSjZfSU5fUFUsCisJCVBKNV9GTiwgUEo1X09VVCwgUEo1X0lOLCBQSjVfSU5fUFUsCisJCVBKNF9GTiwgUEo0X09VVCwgUEo0X0lOLCBQSjRfSU5fUFUsCisJCVBKM19GTiwgUEozX09VVCwgUEozX0lOLCBQSjNfSU5fUFUsCisJCVBKMl9GTiwgUEoyX09VVCwgUEoyX0lOLCBQSjJfSU5fUFUsCisJCVBKMV9GTiwgUEoxX09VVCwgUEoxX0lOLCBQSjFfSU5fUFUsCisJCTAsIDAsIDAsIDAsIH0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIlAxTVNFTFIiLCAweGZmY2MwMDgwLCAxNiwgMSkgeworCQkwLCAwLAorCQlQMU1TRUwxNF8wLCBQMU1TRUwxNF8xLAorCQlQMU1TRUwxM18wLCBQMU1TRUwxM18xLAorCQlQMU1TRUwxMl8wLCBQMU1TRUwxMl8xLAorCQlQMU1TRUwxMV8wLCBQMU1TRUwxMV8xLAorCQlQMU1TRUwxMF8wLCBQMU1TRUwxMF8xLAorCQlQMU1TRUw5XzAsICBQMU1TRUw5XzEsCisJCVAxTVNFTDhfMCwgIFAxTVNFTDhfMSwKKwkJUDFNU0VMN18wLCAgUDFNU0VMN18xLAorCQlQMU1TRUw2XzAsICBQMU1TRUw2XzEsCisJCVAxTVNFTDVfMCwgIFAxTVNFTDVfMSwKKwkJUDFNU0VMNF8wLCAgUDFNU0VMNF8xLAorCQlQMU1TRUwzXzAsICBQMU1TRUwzXzEsCisJCVAxTVNFTDJfMCwgIFAxTVNFTDJfMSwKKwkJUDFNU0VMMV8wLCAgUDFNU0VMMV8xLAorCQlQMU1TRUwwXzAsICBQMU1TRUwwXzEgfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiUDJNU0VMUiIsIDB4ZmZjYzAwODIsIDE2LCAxKSB7CisJCVAyTVNFTDE1XzAsIFAyTVNFTDE1XzEsCisJCVAyTVNFTDE0XzAsIFAyTVNFTDE0XzEsCisJCVAyTVNFTDEzXzAsIFAyTVNFTDEzXzEsCisJCVAyTVNFTDEyXzAsIFAyTVNFTDEyXzEsCisJCVAyTVNFTDExXzAsIFAyTVNFTDExXzEsCisJCVAyTVNFTDEwXzAsIFAyTVNFTDEwXzEsCisJCVAyTVNFTDlfMCwgIFAyTVNFTDlfMSwKKwkJUDJNU0VMOF8wLCAgUDJNU0VMOF8xLAorCQlQMk1TRUw3XzAsICBQMk1TRUw3XzEsCisJCVAyTVNFTDZfMCwgIFAyTVNFTDZfMSwKKwkJUDJNU0VMNV8wLCAgUDJNU0VMNV8xLAorCQlQMk1TRUw0XzAsICBQMk1TRUw0XzEsCisJCVAyTVNFTDNfMCwgIFAyTVNFTDNfMSwKKwkJUDJNU0VMMl8wLCAgUDJNU0VMMl8xLAorCQlQMk1TRUwxXzAsICBQMk1TRUwxXzEsCisJCVAyTVNFTDBfMCwgIFAyTVNFTDBfMSB9CisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0geworCXsgUElOTVVYX0RBVEFfUkVHKCJQQURSIiwgMHhmZmNjMDAyMCwgOCkgeworCQlQQTdfREFUQSwgUEE2X0RBVEEsIFBBNV9EQVRBLCBQQTRfREFUQSwKKwkJUEEzX0RBVEEsIFBBMl9EQVRBLCBQQTFfREFUQSwgUEEwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBCRFIiLCAweGZmY2MwMDIyLCA4KSB7CisJCVBCN19EQVRBLCBQQjZfREFUQSwgUEI1X0RBVEEsIFBCNF9EQVRBLAorCQlQQjNfREFUQSwgUEIyX0RBVEEsIFBCMV9EQVRBLCBQQjBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUENEUiIsIDB4ZmZjYzAwMjQsIDgpIHsKKwkJUEM3X0RBVEEsIFBDNl9EQVRBLCBQQzVfREFUQSwgUEM0X0RBVEEsCisJCVBDM19EQVRBLCBQQzJfREFUQSwgUEMxX0RBVEEsIFBDMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQRERSIiwgMHhmZmNjMDAyNiwgOCkgeworCQlQRDdfREFUQSwgUEQ2X0RBVEEsIFBENV9EQVRBLCBQRDRfREFUQSwKKwkJUEQzX0RBVEEsIFBEMl9EQVRBLCBQRDFfREFUQSwgUEQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBFRFIiLCAweGZmY2MwMDI4LCA4KSB7CisJCVBFN19EQVRBLCBQRTZfREFUQSwKKwkJMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUEZEUiIsIDB4ZmZjYzAwMmEsIDgpIHsKKwkJUEY3X0RBVEEsIFBGNl9EQVRBLCBQRjVfREFUQSwgUEY0X0RBVEEsCisJCVBGM19EQVRBLCBQRjJfREFUQSwgUEYxX0RBVEEsIFBGMF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQR0RSIiwgMHhmZmNjMDAyYywgOCkgeworCQlQRzdfREFUQSwgUEc2X0RBVEEsIFBHNV9EQVRBLCAwLAorCQkwLCAwLCAwLCAwIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQSERSIiwgMHhmZmNjMDAyZSwgOCkgeworCQlQSDdfREFUQSwgUEg2X0RBVEEsIFBINV9EQVRBLCBQSDRfREFUQSwKKwkJUEgzX0RBVEEsIFBIMl9EQVRBLCBQSDFfREFUQSwgUEgwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBKRFIiLCAweGZmY2MwMDMwLCA4KSB7CisJCVBKN19EQVRBLCBQSjZfREFUQSwgUEo1X0RBVEEsIFBKNF9EQVRBLAorCQlQSjNfREFUQSwgUEoyX0RBVEEsIFBKMV9EQVRBLCAwIH0KKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gc2g3Nzg2X3Bpbm11eF9pbmZvID0geworCS5uYW1lID0gInNoNzc4Nl9wZmMiLAorCS5yZXNlcnZlZF9pZCA9IFBJTk1VWF9SRVNFUlZFRCwKKwkuZGF0YSA9IHsgUElOTVVYX0RBVEFfQkVHSU4sIFBJTk1VWF9EQVRBX0VORCB9LAorCS5pbnB1dCA9IHsgUElOTVVYX0lOUFVUX0JFR0lOLCBQSU5NVVhfSU5QVVRfRU5EIH0sCisJLmlucHV0X3B1ID0geyBQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCB9LAorCS5vdXRwdXQgPSB7IFBJTk1VWF9PVVRQVVRfQkVHSU4sIFBJTk1VWF9PVVRQVVRfRU5EIH0sCisJLm1hcmsgPSB7IFBJTk1VWF9NQVJLX0JFR0lOLCBQSU5NVVhfTUFSS19FTkQgfSwKKwkuZnVuY3Rpb24gPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLmZpcnN0X2dwaW8gPSBHUElPX1BBNywKKwkubGFzdF9ncGlvID0gR1BJT19GTl9GU0UsCisKKwkuZ3Bpb3MgPSBwaW5tdXhfZ3Bpb3MsCisJLmNmZ19yZWdzID0gcGlubXV4X2NvbmZpZ19yZWdzLAorCS5kYXRhX3JlZ3MgPSBwaW5tdXhfZGF0YV9yZWdzLAorCisJLmdwaW9fZGF0YSA9IHBpbm11eF9kYXRhLAorCS5ncGlvX2RhdGFfc2l6ZSA9IEFSUkFZX1NJWkUocGlubXV4X2RhdGEpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcGxhdF9waW5tdXhfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcmVnaXN0ZXJfcGlubXV4KCZzaDc3ODZfcGlubXV4X2luZm8pOworfQorCithcmNoX2luaXRjYWxsKHBsYXRfcGlubXV4X3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM0My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKaW5kZXggNGZmNGRjNi4uYzE1NDkzOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3MzQzLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CiAjaW5jbHVkZSA8bGludXgvdWlvX2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2NtdC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlpYzBfcmVzb3VyY2VzW10gPSB7CkBAIC0xNDAsNiArMTQxLDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGpwdV9yZXNvdXJjZXMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9jbXRfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIkNNVCIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKKwkudGltZXJfYml0ID0gNSwKKwkuY2xrID0gImNtdDAiLAorCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKKwkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDTVQiLAorCQkuc3RhcnQJPSAweDA0NGEwMDYwLAorCQkuZW5kCT0gMHgwNDRhMDA2YiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDEwNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2NtdCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjbXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXRfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLApAQCAtMTc1LDYgKzIwOCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzQzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZjbXRfZGV2aWNlLAogCSZpaWMwX2RldmljZSwKIAkmaWljMV9kZXZpY2UsCiAJJnNjaV9kZXZpY2UsCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDczNjYuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jCmluZGV4IDgzOWFlOTcuLjkzZWNmOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzM2Ni5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpaWNfcmVzb3VyY2VzW10gPSB7CkBAIC0xNDcsNiArMTQ4LDM4IEBACiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHZldTFfcmVzb3VyY2VzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X2NvbmZpZyBjbXRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZSA9ICJDTVQiLAorCS5jaGFubmVsX29mZnNldCA9IDB4NjAsCisJLnRpbWVyX2JpdCA9IDUsCisJLmNsayA9ICJjbXQwIiwKKwkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDIwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UIiwKKwkJLnN0YXJ0CT0gMHgwNDRhMDA2MCwKKwkJLmVuZAk9IDB4MDQ0YTAwNmIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAxMDQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210X3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210X3Jlc291cmNlcyksCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7CiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKQEAgLTE2Nyw2ICsyMDAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzM2Nl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY210X2RldmljZSwKIAkmaWljX2RldmljZSwKIAkmc2NpX2RldmljZSwKIAkmdXNiX2hvc3RfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwppbmRleCA1MTQ2YWZjLi4wZTVkMjA0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjIuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAKQEAgLTE3Niw2ICsxNzcsMzggQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoanB1X3Jlc291cmNlcyksCiB9OwogCitzdGF0aWMgc3RydWN0IHNoX2NtdF9jb25maWcgY210X3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiQ01UIiwKKwkuY2hhbm5lbF9vZmZzZXQgPSAweDYwLAorCS50aW1lcl9iaXQgPSA1LAorCS5jbGsgPSAiY210MCIsCisJLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAorCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAyMDAsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkNNVCIsCisJCS5zdGFydAk9IDB4MDQ0YTAwNjAsCisJCS5lbmQJPSAweDA0NGEwMDZiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gMTA0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfY210IiwKKwkuaWQJCT0gMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjbXRfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNtdF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdF9yZXNvdXJjZXMpLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CiAJewogCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCkBAIC0yMDksNiArMjQyLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3MjJfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmNtdF9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCiAJJnVzYmZfZGV2aWNlLAogCSZpaWNfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIzLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwppbmRleCA4NDk3NzBkLi41MzM4ZGFjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjMuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9jbXQuaD4KICNpbmNsdWRlIDxhc20vY2xvY2suaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAKQEAgLTEwMCw2ICsxMDEsMzggQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodmV1MV9yZXNvdXJjZXMpLAogfTsKIAorc3RhdGljIHN0cnVjdCBzaF9jbXRfY29uZmlnIGNtdF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIkNNVCIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHg2MCwKKwkudGltZXJfYml0ID0gNSwKKwkuY2xrID0gImNtdDAiLAorCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKKwkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMjAwLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXRfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDTVQiLAorCQkuc3RhcnQJPSAweDA0NGEwMDYwLAorCQkuZW5kCT0gMHgwNDRhMDA2YiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDEwNCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2NtdCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210X3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjbXRfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXRfcmVzb3VyY2VzKSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0gewogCXsKIAkJLm1hcGJhc2UgICAgICAgID0gMHhmZmUwMDAwMCwKQEAgLTIyMSw2ICsyNTQsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcyM19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmY210X2RldmljZSwKIAkmc2NpX2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmaWljX2RldmljZSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc2My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKaW5kZXggM2M1YjYyOS4uYmRmMGY2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzYzLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNiAgUGF1bCBNdW5kdAogICogIENvcHlyaWdodCAoQykgMjAwNyAgWW9zaGloaXJvIFNoaW1vZGEKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggIE5vYnVoaXJvIEl3YW1hdHN1CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBOb2J1aGlybyBJd2FtYXRzdQogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0yMiwxOCArMjIsOCBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAogCX0sCiAJWzFdID0gewotCQkvKiBQZXJpb2QgSVJRICovCi0JCS5zdGFydAk9IDIxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVsyXSA9IHsKLQkJLyogQ2FycnkgSVJRICovCi0JCS5zdGFydAk9IDIyLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotCVszXSA9IHsKLQkJLyogQWxhcm0gSVJRICovCi0JCS5zdGFydAk9IDIwLAorCQkvKiBTaGFyZWQgUGVyaW9kL0NhcnJ5L0FsYXJtIElSUSAqLworCQkuc3RhcnQgID0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNTAsMTcgKzQwLDE3IEBACiAJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwkJLmlycXMJCT0geyA0MCwgNDAsIDQwLCA0MCB9LAogCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZTA4MDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA3NiwgNzcsIDc5LCA3OCB9LAorCQkuaXJxcwkJPSB7IDc2LCA3NiwgNzYsIDc2IH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZlMTAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDEwNCwgMTA1LCAxMDcsIDEwNiB9LAorCQkuaXJxcwkJPSB7IDEwNCwgMTA0LCAxMDQsIDEwNCB9LAogCX0sIHsKIAkJLmZsYWdzID0gMCwKIAl9CkBAIC0xNDgsOTMgKzEzOCw2NSBAQAogCUlSTF9ISExMLCBJUkxfSEhMSCwgSVJMX0hISEwsCiAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAotCVJUQ19BVEksIFJUQ19QUkksIFJUQ19DVUksCi0JV0RULCBUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAotCUhVREksIExDREMsCi0JRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwgRE1BQzBfRE1JTlQzLCBETUFDMF9ETUFFLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwKLQlJSUMwLCBJSUMxLAotCUNNVCwKLQlHRUlOVDAsIEdFSU5UMSwgR0VJTlQyLAotCUhBQywKLQlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELAotCVBDSUVSUiwgUENJUFdEMywgUENJUFdEMiwgUENJUFdEMSwgUENJUFdEMCwKLQlTVElGMCwgU1RJRjEsCi0JU0NJRjFfRVJJLCBTQ0lGMV9SWEksIFNDSUYxX0JSSSwgU0NJRjFfVFhJLAotCVNJT0YwLCBTSU9GMSwgU0lPRjIsCi0JVVNCSCwgVVNCRkkwLCBVU0JGSTEsCi0JVFBVLCBQQ0MsCi0JTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSwKLQlTSU1fRVJJLCBTSU1fUlhJLCBTSU1fVFhJLCBTSU1fVEVORCwKKwlSVEMsIFdEVCwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKKwlIVURJLCBMQ0RDLCBETUFDLCBTQ0lGMCwgSUlDMCwgSUlDMSwgQ01ULCBHRVRIRVIsIEhBQywKKwlQQ0lTRVJSLCBQQ0lJTlRBLCBQQ0lJTlRCLCBQQ0lJTlRDLCBQQ0lJTlRELCBQQ0lDNSwKKwlTVElGMCwgU1RJRjEsIFNDSUYxLCBTSU9GMCwgU0lPRjEsIFNJT0YyLAorCVVTQkgsIFVTQkYsIFRQVSwgUENDLCBNTUNJRiwgU0lNLAogCVRNVTMsIFRNVTQsIFRNVTUsIEFEQywgU1NJMCwgU1NJMSwgU1NJMiwgU1NJMywKLQlTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEksCi0JR1BJT19DSDAsIEdQSU9fQ0gxLCBHUElPX0NIMiwgR1BJT19DSDMsCisJU0NJRjIsIEdQSU8sCiAKIAkvKiBpbnRlcnJ1cHQgZ3JvdXBzICovCiAKLQlUTVUwMTIsIFRNVTM0NSwgUlRDLCBETUFDLCBTQ0lGMCwgR0VUSEVSLCBQQ0lDNSwKLQlTQ0lGMSwgVVNCRiwgTU1DSUYsIFNJTSwgU0NJRjIsIEdQSU8sCisJVE1VMDEyLCBUTVUzNDUsCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX1ZFQ1QoUlRDX0FUSSwgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDX1BSSSwgMHg0YTApLAotCUlOVENfVkVDVChSVENfQ1VJLCAweDRjMCksCisJSU5UQ19WRUNUKFJUQywgMHg0ODApLCBJTlRDX1ZFQ1QoUlRDLCAweDRhMCksCisJSU5UQ19WRUNUKFJUQywgMHg0YzApLAogCUlOVENfVkVDVChXRFQsIDB4NTYwKSwgSU5UQ19WRUNUKFRNVTAsIDB4NTgwKSwKIAlJTlRDX1ZFQ1QoVE1VMSwgMHg1YTApLCBJTlRDX1ZFQ1QoVE1VMiwgMHg1YzApLAogCUlOVENfVkVDVChUTVUyX1RJQ1BJLCAweDVlMCksIElOVENfVkVDVChIVURJLCAweDYwMCksCiAJSU5UQ19WRUNUKExDREMsIDB4NjIwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQwLCAweDY0MCksIElOVENfVkVDVChETUFDMF9ETUlOVDEsIDB4NjYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQyLCAweDY4MCksIElOVENfVkVDVChETUFDMF9ETUlOVDMsIDB4NmEwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1BRSwgMHg2YzApLAotCUlOVENfVkVDVChTQ0lGMF9FUkksIDB4NzAwKSwgSU5UQ19WRUNUKFNDSUYwX1JYSSwgMHg3MjApLAotCUlOVENfVkVDVChTQ0lGMF9CUkksIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwX1RYSSwgMHg3NjApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDQsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UNSwgMHg3YTApLAorCUlOVENfVkVDVChETUFDLCAweDY0MCksIElOVENfVkVDVChETUFDLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NjgwKSwgSU5UQ19WRUNUKERNQUMsIDB4NmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQywgMHg2YzApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDc2MCksCisJSU5UQ19WRUNUKERNQUMsIDB4NzgwKSwgSU5UQ19WRUNUKERNQUMsIDB4N2EwKSwKIAlJTlRDX1ZFQ1QoSUlDMCwgMHg4QTApLCBJTlRDX1ZFQ1QoSUlDMSwgMHg4QzApLAotCUlOVENfVkVDVChDTVQsIDB4OTAwKSwgSU5UQ19WRUNUKEdFSU5UMCwgMHg5MjApLAotCUlOVENfVkVDVChHRUlOVDEsIDB4OTQwKSwgSU5UQ19WRUNUKEdFSU5UMiwgMHg5NjApLAorCUlOVENfVkVDVChDTVQsIDB4OTAwKSwgSU5UQ19WRUNUKEdFVEhFUiwgMHg5MjApLAorCUlOVENfVkVDVChHRVRIRVIsIDB4OTQwKSwgSU5UQ19WRUNUKEdFVEhFUiwgMHg5NjApLAogCUlOVENfVkVDVChIQUMsIDB4OTgwKSwKIAlJTlRDX1ZFQ1QoUENJU0VSUiwgMHhhMDApLCBJTlRDX1ZFQ1QoUENJSU5UQSwgMHhhMjApLAogCUlOVENfVkVDVChQQ0lJTlRCLCAweGE0MCksIElOVENfVkVDVChQQ0lJTlRDLCAweGE2MCksCi0JSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUVSUiwgMHhhYTApLAotCUlOVENfVkVDVChQQ0lQV0QzLCAweGFjMCksIElOVENfVkVDVChQQ0lQV0QyLCAweGFlMCksCi0JSU5UQ19WRUNUKFBDSVBXRDEsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSVBXRDAsIDB4YjIwKSwKKwlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWEwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFlMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGIwMCksIElOVENfVkVDVChQQ0lDNSwgMHhiMjApLAogCUlOVENfVkVDVChTVElGMCwgMHhiNDApLCBJTlRDX1ZFQ1QoU1RJRjEsIDB4YjYwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfRVJJLCAweGI4MCksIElOVENfVkVDVChTQ0lGMV9SWEksIDB4YmEwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfQlJJLCAweGJjMCksIElOVENfVkVDVChTQ0lGMV9UWEksIDB4YmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4YjgwKSwgSU5UQ19WRUNUKFNDSUYxLCAweGJhMCksCisJSU5UQ19WRUNUKFNDSUYxLCAweGJjMCksIElOVENfVkVDVChTQ0lGMSwgMHhiZTApLAogCUlOVENfVkVDVChTSU9GMCwgMHhjMDApLCBJTlRDX1ZFQ1QoU0lPRjEsIDB4YzIwKSwKLQlJTlRDX1ZFQ1QoVVNCSCwgMHhjNjApLCBJTlRDX1ZFQ1QoVVNCRkkwLCAweGM4MCksCi0JSU5UQ19WRUNUKFVTQkZJMSwgMHhjYTApLAorCUlOVENfVkVDVChVU0JILCAweGM2MCksIElOVENfVkVDVChVU0JGLCAweGM4MCksCisJSU5UQ19WRUNUKFVTQkYsIDB4Y2EwKSwKIAlJTlRDX1ZFQ1QoVFBVLCAweGNjMCksIElOVENfVkVDVChQQ0MsIDB4Y2UwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRlNUQVQsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGX1RSQU4sIDB4ZDIwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRVJSLCAweGQ0MCksIElOVENfVkVDVChNTUNJRl9GUkRZLCAweGQ2MCksCi0JSU5UQ19WRUNUKFNJTV9FUkksIDB4ZDgwKSwgSU5UQ19WRUNUKFNJTV9SWEksIDB4ZGEwKSwKLQlJTlRDX1ZFQ1QoU0lNX1RYSSwgMHhkYzApLCBJTlRDX1ZFQ1QoU0lNX1RFTkQsIDB4ZGUwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQyMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQ0MCksIElOVENfVkVDVChNTUNJRiwgMHhkNjApLAorCUlOVENfVkVDVChTSU0sIDB4ZDgwKSwgSU5UQ19WRUNUKFNJTSwgMHhkYTApLAorCUlOVENfVkVDVChTSU0sIDB4ZGMwKSwgSU5UQ19WRUNUKFNJTSwgMHhkZTApLAogCUlOVENfVkVDVChUTVUzLCAweGUwMCksIElOVENfVkVDVChUTVU0LCAweGUyMCksCiAJSU5UQ19WRUNUKFRNVTUsIDB4ZTQwKSwgSU5UQ19WRUNUKEFEQywgMHhlNjApLAogCUlOVENfVkVDVChTU0kwLCAweGU4MCksIElOVENfVkVDVChTU0kxLCAweGVhMCksCiAJSU5UQ19WRUNUKFNTSTIsIDB4ZWMwKSwgSU5UQ19WRUNUKFNTSTMsIDB4ZWUwKSwKLQlJTlRDX1ZFQ1QoU0NJRjJfRVJJLCAweGYwMCksIElOVENfVkVDVChTQ0lGMl9SWEksIDB4ZjIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjJfQlJJLCAweGY0MCksIElOVENfVkVDVChTQ0lGMl9UWEksIDB4ZjYwKSwKLQlJTlRDX1ZFQ1QoR1BJT19DSDAsIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU9fQ0gxLCAweGZhMCksCi0JSU5UQ19WRUNUKEdQSU9fQ0gyLCAweGZjMCksIElOVENfVkVDVChHUElPX0NIMywgMHhmZTApLAorCUlOVENfVkVDVChTQ0lGMiwgMHhmMDApLCBJTlRDX1ZFQ1QoU0NJRjIsIDB4ZjIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4ZjQwKSwgSU5UQ19WRUNUKFNDSUYyLCAweGY2MCksCisJSU5UQ19WRUNUKEdQSU8sIDB4ZjgwKSwgSU5UQ19WRUNUKEdQSU8sIDB4ZmEwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmZTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGdyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CiAJSU5UQ19HUk9VUChUTVUwMTIsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEkpLAogCUlOVENfR1JPVVAoVE1VMzQ1LCBUTVUzLCBUTVU0LCBUTVU1KSwKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCi0JSU5UQ19HUk9VUChETUFDLCBETUFDMF9ETUlOVDAsIERNQUMwX0RNSU5UMSwgRE1BQzBfRE1JTlQyLAotCQkgICBETUFDMF9ETUlOVDMsIERNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMF9ETUFFKSwKLQlJTlRDX0dST1VQKFNDSUYwLCBTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEkpLAotCUlOVENfR1JPVVAoR0VUSEVSLCBHRUlOVDAsIEdFSU5UMSwgR0VJTlQyKSwKLQlJTlRDX0dST1VQKFBDSUM1LCBQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDApLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChVU0JGLCBVU0JGSTAsIFVTQkZJMSksCi0JSU5UQ19HUk9VUChNTUNJRiwgTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSksCi0JSU5UQ19HUk9VUChTSU0sIFNJTV9FUkksIFNJTV9SWEksIFNJTV9UWEksIFNJTV9URU5EKSwKLQlJTlRDX0dST1VQKFNDSUYyLCBTQ0lGMl9FUkksIFNDSUYyX1JYSSwgU0NJRjJfQlJJLCBTQ0lGMl9UWEkpLAotCUlOVENfR1JPVVAoR1BJTywgR1BJT19DSDAsIEdQSU9fQ0gxLCBHUElPX0NIMiwgR1BJT19DSDMpLAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKaW5kZXggZmI4MjAwYy4uNmY3MjI3YyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMKQEAgLTIwLDE3ICsyMCw3IEBACiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCiAJfSwKIAlbMV0gPSB7Ci0JCS8qIFBlcmlvZCBJUlEgKi8KLQkJLnN0YXJ0CT0gMjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkvKiBDYXJyeSBJUlEgKi8KLQkJLnN0YXJ0CT0gMjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzNdID0gewotCQkvKiBBbGFybSBJUlEgKi8KKwkJLyogU2hhcmVkIFBlcmlvZC9DYXJyeS9BbGFybSBJUlEgKi8KIAkJLnN0YXJ0CT0gMjAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCkBAIC00OCwxMiArMzgsMTIgQEAKIAkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCQkuaXJxcwkJPSB7IDQwLCA0MCwgNDAsIDQwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZlMTAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDc2LCA3NywgNzksIDc4IH0sCisJCS5pcnFzCQk9IHsgNzYsIDc2LCA3NiwgNzYgfSwKIAl9LCB7CiAJCS5mbGFncyA9IDAsCiAJfQpAQCAtOTAsODIgKzgwLDU1IEBACiAJSVJMX0hITEwsIElSTF9ISExILCBJUkxfSEhITCwKIAogCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCi0JUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSwKLQlXRFQsCi0JVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSwKLQlIVURJLAotCURNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsIERNQUMwX0RNSU5UMywgRE1BQzBfRE1BRSwKLQlTQ0lGMF9FUkksIFNDSUYwX1JYSSwgU0NJRjBfQlJJLCBTQ0lGMF9UWEksCi0JRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsIERNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LAotCUNNVCwgSEFDLAotCVBDSVNFUlIsIFBDSUlOVEEsIFBDSUlOVEIsIFBDSUlOVEMsIFBDSUlOVEQsCi0JUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwLAotCVNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSwKLQlTSU9GLCBIU1BJLAotCU1NQ0lGX0ZTVEFULCBNTUNJRl9UUkFOLCBNTUNJRl9FUlIsIE1NQ0lGX0ZSRFksCi0JRE1BQzFfRE1JTlQ4LCBETUFDMV9ETUlOVDksIERNQUMxX0RNSU5UMTAsIERNQUMxX0RNSU5UMTEsCi0JVE1VMywgVE1VNCwgVE1VNSwKLQlTU0ksCi0JRkxDVExfRkxTVEUsIEZMQ1RMX0ZMRU5ELCBGTENUTF9GTFRSUTAsIEZMQ1RMX0ZMVFJRMSwKLQlHUElPSTAsIEdQSU9JMSwgR1BJT0kyLCBHUElPSTMsCisJUlRDLCBXRFQsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCisJSFVESSwgRE1BQzAsIFNDSUYwLCBETUFDMSwgQ01ULCBIQUMsCisJUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwgUENJQzUsCisJU0NJRjEsIFNJT0YsIEhTUEksIE1NQ0lGLCBUTVUzLCBUTVU0LCBUTVU1LCBTU0ksIEZMQ1RMLAlHUElPLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwogCi0JUlRDLCBUTVUwMTIsIERNQUMwLCBTQ0lGMCwgRE1BQzQ1LCBETUFDMSwKLQlQQ0lDNSwgU0NJRjEsIE1NQ0lGLCBUTVUzNDUsIEZMQ1RMLCBHUElPLAorCVRNVTAxMiwJVE1VMzQ1LAogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7Ci0JSU5UQ19WRUNUKFJUQ19BVEksIDB4NDgwKSwgSU5UQ19WRUNUKFJUQ19QUkksIDB4NGEwKSwKLQlJTlRDX1ZFQ1QoUlRDX0NVSSwgMHg0YzApLAorCUlOVENfVkVDVChSVEMsIDB4NDgwKSwgSU5UQ19WRUNUKFJUQywgMHg0YTApLAorCUlOVENfVkVDVChSVEMsIDB4NGMwKSwKIAlJTlRDX1ZFQ1QoV0RULCAweDU2MCksCiAJSU5UQ19WRUNUKFRNVTAsIDB4NTgwKSwgSU5UQ19WRUNUKFRNVTEsIDB4NWEwKSwKIAlJTlRDX1ZFQ1QoVE1VMiwgMHg1YzApLCBJTlRDX1ZFQ1QoVE1VMl9USUNQSSwgMHg1ZTApLAogCUlOVENfVkVDVChIVURJLCAweDYwMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMCwgMHg2NDApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQxLCAweDY2MCksCi0JSU5UQ19WRUNUKERNQUMwX0RNSU5UMiwgMHg2ODApLCBJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQzLCAweDZhMCksCi0JSU5UQ19WRUNUKERNQUMwX0RNQUUsIDB4NmMwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfRVJJLCAweDcwMCksIElOVENfVkVDVChTQ0lGMF9SWEksIDB4NzIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjBfQlJJLCAweDc0MCksIElOVENfVkVDVChTQ0lGMF9UWEksIDB4NzYwKSwKLQlJTlRDX1ZFQ1QoRE1BQzBfRE1JTlQ0LCAweDc4MCksIElOVENfVkVDVChETUFDMF9ETUlOVDUsIDB4N2EwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ2LCAweDdjMCksIElOVENfVkVDVChETUFDMV9ETUlOVDcsIDB4N2UwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NjQwKSwgSU5UQ19WRUNUKERNQUMwLCAweDY2MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDY4MCksIElOVENfVkVDVChETUFDMCwgMHg2YTApLAorCUlOVENfVkVDVChETUFDMCwgMHg2YzApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDc2MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDc4MCksIElOVENfVkVDVChETUFDMCwgMHg3YTApLAorCUlOVENfVkVDVChETUFDMSwgMHg3YzApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4N2UwKSwKIAlJTlRDX1ZFQ1QoQ01ULCAweDkwMCksIElOVENfVkVDVChIQUMsIDB4OTgwKSwKIAlJTlRDX1ZFQ1QoUENJU0VSUiwgMHhhMDApLCBJTlRDX1ZFQ1QoUENJSU5UQSwgMHhhMjApLAogCUlOVENfVkVDVChQQ0lJTlRCLCAweGE0MCksIElOVENfVkVDVChQQ0lJTlRDLCAweGE2MCksCi0JSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUVSUiwgMHhhYTApLAotCUlOVENfVkVDVChQQ0lQV0QzLCAweGFjMCksIElOVENfVkVDVChQQ0lQV0QyLCAweGFlMCksCi0JSU5UQ19WRUNUKFBDSVBXRDEsIDB4YjAwKSwgSU5UQ19WRUNUKFBDSVBXRDAsIDB4YjIwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfRVJJLCAweGI4MCksIElOVENfVkVDVChTQ0lGMV9SWEksIDB4YmEwKSwKLQlJTlRDX1ZFQ1QoU0NJRjFfQlJJLCAweGJjMCksIElOVENfVkVDVChTQ0lGMV9UWEksIDB4YmUwKSwKKwlJTlRDX1ZFQ1QoUENJSU5URCwgMHhhODApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YWEwKSwKKwlJTlRDX1ZFQ1QoUENJQzUsIDB4YWMwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFlMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGIwMCksIElOVENfVkVDVChQQ0lDNSwgMHhiMjApLAorCUlOVENfVkVDVChTQ0lGMSwgMHhiODApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4YmEwKSwKKwlJTlRDX1ZFQ1QoU0NJRjEsIDB4YmMwKSwgSU5UQ19WRUNUKFNDSUYxLCAweGJlMCksCiAJSU5UQ19WRUNUKFNJT0YsIDB4YzAwKSwgSU5UQ19WRUNUKEhTUEksIDB4YzgwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRlNUQVQsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGX1RSQU4sIDB4ZDIwKSwKLQlJTlRDX1ZFQ1QoTU1DSUZfRVJSLCAweGQ0MCksIElOVENfVkVDVChNTUNJRl9GUkRZLCAweGQ2MCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UOCwgMHhkODApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ5LCAweGRhMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UMTAsIDB4ZGMwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UMTEsIDB4ZGUwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQyMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQ0MCksIElOVENfVkVDVChNTUNJRiwgMHhkNjApLAorCUlOVENfVkVDVChETUFDMSwgMHhkODApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4ZGEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ZGMwKSwgSU5UQ19WRUNUKERNQUMxLCAweGRlMCksCiAJSU5UQ19WRUNUKFRNVTMsIDB4ZTAwKSwgSU5UQ19WRUNUKFRNVTQsIDB4ZTIwKSwKIAlJTlRDX1ZFQ1QoVE1VNSwgMHhlNDApLAogCUlOVENfVkVDVChTU0ksIDB4ZTgwKSwKLQlJTlRDX1ZFQ1QoRkxDVExfRkxTVEUsIDB4ZjAwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMRU5ELCAweGYyMCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVExfRkxUUlExLCAweGY2MCksCi0JSU5UQ19WRUNUKEdQSU9JMCwgMHhmODApLCBJTlRDX1ZFQ1QoR1BJT0kxLCAweGZhMCksCi0JSU5UQ19WRUNUKEdQSU9JMiwgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJT0kzLCAweGZlMCksCisJSU5UQ19WRUNUKEZMQ1RMLCAweGYwMCksIElOVENfVkVDVChGTENUTCwgMHhmMjApLAorCUlOVENfVkVDVChGTENUTCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjYwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmODApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmYTApLAorCUlOVENfVkVDVChHUElPLCAweGZjMCksIElOVENfVkVDVChHUElPLCAweGZlMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKLQlJTlRDX0dST1VQKFJUQywgUlRDX0FUSSwgUlRDX1BSSSwgUlRDX0NVSSksCiAJSU5UQ19HUk9VUChUTVUwMTIsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEkpLAotCUlOVENfR1JPVVAoRE1BQzAsIERNQUMwX0RNSU5UMCwgRE1BQzBfRE1JTlQxLCBETUFDMF9ETUlOVDIsCi0JCSAgIERNQUMwX0RNSU5UMywgRE1BQzBfRE1JTlQ0LCBETUFDMF9ETUlOVDUsIERNQUMwX0RNQUUpLAotCUlOVENfR1JPVVAoU0NJRjAsIFNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSksCi0JSU5UQ19HUk9VUChETUFDMSwgRE1BQzFfRE1JTlQ2LCBETUFDMV9ETUlOVDcsIERNQUMxX0RNSU5UOCwKLQkJICAgRE1BQzFfRE1JTlQ5LCBETUFDMV9ETUlOVDEwLCBETUFDMV9ETUlOVDExKSwKLQlJTlRDX0dST1VQKFBDSUM1LCBQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDApLAotCUlOVENfR1JPVVAoU0NJRjEsIFNDSUYxX0VSSSwgU0NJRjFfUlhJLCBTQ0lGMV9CUkksIFNDSUYxX1RYSSksCi0JSU5UQ19HUk9VUChNTUNJRiwgTU1DSUZfRlNUQVQsIE1NQ0lGX1RSQU4sIE1NQ0lGX0VSUiwgTU1DSUZfRlJEWSksCiAJSU5UQ19HUk9VUChUTVUzNDUsIFRNVTMsIFRNVTQsIFRNVTUpLAotCUlOVENfR1JPVVAoRkxDVEwsIEZMQ1RMX0ZMU1RFLCBGTENUTF9GTEVORCwKLQkJICAgRkxDVExfRkxUUlEwLCBGTENUTF9GTFRSUTEpLAotCUlOVENfR1JPVVAoR1BJTywgR1BJT0kwLCBHUElPSTEsIEdQSU9JMiwgR1BJT0kzKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBtYXNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCmluZGV4IDMwYmFhNjMuLmQ4MDgwMmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCkBAIC0yMCwxOCArMjAsMTMgQEAKIAkJLm1hcGJhc2UJPSAweGZmZWEwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCQkuaXJxcwkJPSB7IDQwLCA0MCwgNDAsIDQwIH0sCiAJfSwgewogCQkubWFwYmFzZQk9IDB4ZmZlYjAwMDAsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSB7IDQ0LCA0NSwgNDcsIDQ2IH0sCi0JfSwKLQotCS8qCi0JICogVGhlIHJlc3Qgb2YgdGhlc2UgYWxsIGhhdmUgbXVsdGlwbGV4ZWQgSVJRcwotCSAqLwotCXsKKwkJLmlycXMJCT0geyA0NCwgNDQsIDQ0LCA0NCB9LAorCX0sIHsKIAkJLm1hcGJhc2UJPSAweGZmZWMwMDAwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS50eXBlCQk9IFBPUlRfU0NJRiwKQEAgLTkxLDMzICs4NiwxOSBAQAogCUlSTDRfSEhMTCwgSVJMNF9ISExILCBJUkw0X0hISEwsCiAKIAlJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3LAotCVdEVCwKLQlUTVUwLCBUTVUxLCBUTVUyLCBUTVUyX1RJQ1BJLAotCUhVREksCi0JRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwgRE1BQzBfRE1JTlQzLAotCURNQUMwX0RNSU5UNCwgRE1BQzBfRE1JTlQ1LCBETUFDMF9ETUFFLAotCVNDSUYwX0VSSSwgU0NJRjBfUlhJLCBTQ0lGMF9CUkksIFNDSUYwX1RYSSwKLQlTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEksCi0JRE1BQzFfRE1JTlQ2LCBETUFDMV9ETUlOVDcsIERNQUMxX0RNSU5UOCwgRE1BQzFfRE1JTlQ5LAotCURNQUMxX0RNSU5UMTAsIERNQUMxX0RNSU5UMTEsIERNQUMxX0RNQUUsCi0JSFNQSSwKKwlXRFQsIFRNVTAsIFRNVTEsIFRNVTIsIFRNVTJfVElDUEksCisJSFVESSwgRE1BQzAsIFNDSUYwLCBTQ0lGMSwgRE1BQzEsIEhTUEksCiAJU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUsCi0JUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwKLQlQQ0lFUlIsIFBDSVBXRDMsIFBDSVBXRDIsIFBDSVBXRDEsIFBDSVBXRDAsCi0JU0lPRiwKLQlNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZLAotCURVLAotCUdEVEFfR0FDTEksIEdEVEFfR0FNQ0ksIEdEVEFfR0FFUkksCisJUENJU0VSUiwgUENJSU5UQSwgUENJSU5UQiwgUENJSU5UQywgUENJSU5URCwgUENJQzUsCisJU0lPRiwgTU1DSUYsIERVLCBHRFRBLAogCVRNVTMsIFRNVTQsIFRNVTUsCiAJU1NJMCwgU1NJMSwKIAlIQUMwLCBIQUMxLAotCUZMQ1RMX0ZMU1RFLCBGTENUTF9GTEVORCwgRkxDVExfRkxUUlEwLCBGTENUTF9GTFRSUTEsCi0JR1BJT0kwLCBHUElPSTEsIEdQSU9JMiwgR1BJT0kzLAorCUZMQ1RMLCBHUElPLAogCiAJLyogaW50ZXJydXB0IGdyb3VwcyAqLwogCi0JVE1VMDEyLCBETUFDMCwgU0NJRjAsIFNDSUYxLCBETUFDMSwKLQlQQ0lDNSwgTU1DSUYsIEdEVEEsIFRNVTM0NSwgRkxDVEwsIEdQSU8KKwlUTVUwMTIsCVRNVTM0NQogfTsKIAogc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc1tdIF9faW5pdGRhdGEgPSB7CkBAIC0xMjUsNTcgKzEwNiw0NSBAQAogCUlOVENfVkVDVChUTVUwLCAweDU4MCksIElOVENfVkVDVChUTVUxLCAweDVhMCksCiAJSU5UQ19WRUNUKFRNVTIsIDB4NWMwKSwgSU5UQ19WRUNUKFRNVTJfVElDUEksIDB4NWUwKSwKIAlJTlRDX1ZFQ1QoSFVESSwgMHg2MDApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDAsIDB4NjIwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMSwgMHg2NDApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDIsIDB4NjYwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UMywgMHg2ODApLAotCUlOVENfVkVDVChETUFDMF9ETUlOVDQsIDB4NmEwKSwgSU5UQ19WRUNUKERNQUMwX0RNSU5UNSwgMHg2YzApLAotCUlOVENfVkVDVChETUFDMF9ETUFFLCAweDZlMCksCi0JSU5UQ19WRUNUKFNDSUYwX0VSSSwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjBfUlhJLCAweDcyMCksCi0JSU5UQ19WRUNUKFNDSUYwX0JSSSwgMHg3NDApLCBJTlRDX1ZFQ1QoU0NJRjBfVFhJLCAweDc2MCksCi0JSU5UQ19WRUNUKFNDSUYxX0VSSSwgMHg3ODApLCBJTlRDX1ZFQ1QoU0NJRjFfUlhJLCAweDdhMCksCi0JSU5UQ19WRUNUKFNDSUYxX0JSSSwgMHg3YzApLCBJTlRDX1ZFQ1QoU0NJRjFfVFhJLCAweDdlMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UNiwgMHg4ODApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ3LCAweDhhMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UOCwgMHg4YzApLCBJTlRDX1ZFQ1QoRE1BQzFfRE1JTlQ5LCAweDhlMCksCi0JSU5UQ19WRUNUKERNQUMxX0RNSU5UMTAsIDB4OTAwKSwgSU5UQ19WRUNUKERNQUMxX0RNSU5UMTEsIDB4OTIwKSwKLQlJTlRDX1ZFQ1QoRE1BQzFfRE1BRSwgMHg5NDApLAorCUlOVENfVkVDVChETUFDMCwgMHg2MjApLCBJTlRDX1ZFQ1QoRE1BQzAsIDB4NjQwKSwKKwlJTlRDX1ZFQ1QoRE1BQzAsIDB4NjYwKSwgSU5UQ19WRUNUKERNQUMwLCAweDY4MCksCisJSU5UQ19WRUNUKERNQUMwLCAweDZhMCksIElOVENfVkVDVChETUFDMCwgMHg2YzApLAorCUlOVENfVkVDVChETUFDMCwgMHg2ZTApLAorCUlOVENfVkVDVChTQ0lGMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjAsIDB4NzIwKSwKKwlJTlRDX1ZFQ1QoU0NJRjAsIDB4NzQwKSwgSU5UQ19WRUNUKFNDSUYwLCAweDc2MCksCisJSU5UQ19WRUNUKFNDSUYxLCAweDc4MCksIElOVENfVkVDVChTQ0lGMSwgMHg3YTApLAorCUlOVENfVkVDVChTQ0lGMSwgMHg3YzApLCBJTlRDX1ZFQ1QoU0NJRjEsIDB4N2UwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4ODgwKSwgSU5UQ19WRUNUKERNQUMxLCAweDhhMCksCisJSU5UQ19WRUNUKERNQUMxLCAweDhjMCksIElOVENfVkVDVChETUFDMSwgMHg4ZTApLAorCUlOVENfVkVDVChETUFDMSwgMHg5MDApLCBJTlRDX1ZFQ1QoRE1BQzEsIDB4OTIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzEsIDB4OTQwKSwKIAlJTlRDX1ZFQ1QoSFNQSSwgMHg5NjApLAogCUlOVENfVkVDVChTQ0lGMiwgMHg5ODApLCBJTlRDX1ZFQ1QoU0NJRjMsIDB4OWEwKSwKIAlJTlRDX1ZFQ1QoU0NJRjQsIDB4OWMwKSwgSU5UQ19WRUNUKFNDSUY1LCAweDllMCksCiAJSU5UQ19WRUNUKFBDSVNFUlIsIDB4YTAwKSwgSU5UQ19WRUNUKFBDSUlOVEEsIDB4YTIwKSwKIAlJTlRDX1ZFQ1QoUENJSU5UQiwgMHhhNDApLCBJTlRDX1ZFQ1QoUENJSU5UQywgMHhhNjApLAotCUlOVENfVkVDVChQQ0lJTlRELCAweGE4MCksIElOVENfVkVDVChQQ0lFUlIsIDB4YWEwKSwKLQlJTlRDX1ZFQ1QoUENJUFdEMywgMHhhYzApLCBJTlRDX1ZFQ1QoUENJUFdEMiwgMHhhZTApLAotCUlOVENfVkVDVChQQ0lQV0QxLCAweGIwMCksIElOVENfVkVDVChQQ0lQV0QwLCAweGIyMCksCisJSU5UQ19WRUNUKFBDSUlOVEQsIDB4YTgwKSwgSU5UQ19WRUNUKFBDSUM1LCAweGFhMCksCisJSU5UQ19WRUNUKFBDSUM1LCAweGFjMCksIElOVENfVkVDVChQQ0lDNSwgMHhhZTApLAorCUlOVENfVkVDVChQQ0lDNSwgMHhiMDApLCBJTlRDX1ZFQ1QoUENJQzUsIDB4YjIwKSwKIAlJTlRDX1ZFQ1QoU0lPRiwgMHhjMDApLAotCUlOVENfVkVDVChNTUNJRl9GU1RBVCwgMHhkMDApLCBJTlRDX1ZFQ1QoTU1DSUZfVFJBTiwgMHhkMjApLAotCUlOVENfVkVDVChNTUNJRl9FUlIsIDB4ZDQwKSwgSU5UQ19WRUNUKE1NQ0lGX0ZSRFksIDB4ZDYwKSwKKwlJTlRDX1ZFQ1QoTU1DSUYsIDB4ZDAwKSwgSU5UQ19WRUNUKE1NQ0lGLCAweGQyMCksCisJSU5UQ19WRUNUKE1NQ0lGLCAweGQ0MCksIElOVENfVkVDVChNTUNJRiwgMHhkNjApLAogCUlOVENfVkVDVChEVSwgMHhkODApLAotCUlOVENfVkVDVChHRFRBX0dBQ0xJLCAweGRhMCksIElOVENfVkVDVChHRFRBX0dBTUNJLCAweGRjMCksCi0JSU5UQ19WRUNUKEdEVEFfR0FFUkksIDB4ZGUwKSwKKwlJTlRDX1ZFQ1QoR0RUQSwgMHhkYTApLCBJTlRDX1ZFQ1QoR0RUQSwgMHhkYzApLAorCUlOVENfVkVDVChHRFRBLCAweGRlMCksCiAJSU5UQ19WRUNUKFRNVTMsIDB4ZTAwKSwgSU5UQ19WRUNUKFRNVTQsIDB4ZTIwKSwKIAlJTlRDX1ZFQ1QoVE1VNSwgMHhlNDApLAogCUlOVENfVkVDVChTU0kwLCAweGU4MCksIElOVENfVkVDVChTU0kxLCAweGVhMCksCiAJSU5UQ19WRUNUKEhBQzAsIDB4ZWMwKSwgSU5UQ19WRUNUKEhBQzEsIDB4ZWUwKSwKLQlJTlRDX1ZFQ1QoRkxDVExfRkxTVEUsIDB4ZjAwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMRU5ELCAweGYyMCksCi0JSU5UQ19WRUNUKEZMQ1RMX0ZMVFJRMCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVExfRkxUUlExLCAweGY2MCksCi0JSU5UQ19WRUNUKEdQSU9JMCwgMHhmODApLCBJTlRDX1ZFQ1QoR1BJT0kxLCAweGZhMCksCi0JSU5UQ19WRUNUKEdQSU9JMiwgMHhmYzApLCBJTlRDX1ZFQ1QoR1BJT0kzLCAweGZlMCksCisJSU5UQ19WRUNUKEZMQ1RMLCAweGYwMCksIElOVENfVkVDVChGTENUTCwgMHhmMjApLAorCUlOVENfVkVDVChGTENUTCwgMHhmNDApLCBJTlRDX1ZFQ1QoRkxDVEwsIDB4ZjYwKSwKKwlJTlRDX1ZFQ1QoR1BJTywgMHhmODApLCBJTlRDX1ZFQ1QoR1BJTywgMHhmYTApLAorCUlOVENfVkVDVChHUElPLCAweGZjMCksIElOVENfVkVDVChHUElPLCAweGZlMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKIAlJTlRDX0dST1VQKFRNVTAxMiwgVE1VMCwgVE1VMSwgVE1VMiwgVE1VMl9USUNQSSksCi0JSU5UQ19HUk9VUChETUFDMCwgRE1BQzBfRE1JTlQwLCBETUFDMF9ETUlOVDEsIERNQUMwX0RNSU5UMiwKLQkJICAgRE1BQzBfRE1JTlQzLCBETUFDMF9ETUlOVDQsIERNQUMwX0RNSU5UNSwgRE1BQzBfRE1BRSksCi0JSU5UQ19HUk9VUChTQ0lGMCwgU0NJRjBfRVJJLCBTQ0lGMF9SWEksIFNDSUYwX0JSSSwgU0NJRjBfVFhJKSwKLQlJTlRDX0dST1VQKFNDSUYxLCBTQ0lGMV9FUkksIFNDSUYxX1JYSSwgU0NJRjFfQlJJLCBTQ0lGMV9UWEkpLAotCUlOVENfR1JPVVAoRE1BQzEsIERNQUMxX0RNSU5UNiwgRE1BQzFfRE1JTlQ3LCBETUFDMV9ETUlOVDgsCi0JCSAgIERNQUMxX0RNSU5UOSwgRE1BQzFfRE1JTlQxMCwgRE1BQzFfRE1JTlQxMSwgRE1BQzFfRE1BRSksCi0JSU5UQ19HUk9VUChQQ0lDNSwgUENJRVJSLCBQQ0lQV0QzLCBQQ0lQV0QyLCBQQ0lQV0QxLCBQQ0lQV0QwKSwKLQlJTlRDX0dST1VQKE1NQ0lGLCBNTUNJRl9GU1RBVCwgTU1DSUZfVFJBTiwgTU1DSUZfRVJSLCBNTUNJRl9GUkRZKSwKLQlJTlRDX0dST1VQKEdEVEEsIEdEVEFfR0FDTEksIEdEVEFfR0FNQ0ksIEdEVEFfR0FFUkkpLAogCUlOVENfR1JPVVAoVE1VMzQ1LCBUTVUzLCBUTVU0LCBUTVU1KSwKLQlJTlRDX0dST1VQKEZMQ1RMLCBGTENUTF9GTFNURSwgRkxDVExfRkxFTkQsCi0JCSAgIEZMQ1RMX0ZMVFJRMCwgRkxDVExfRkxUUlExKSwKLQlJTlRDX0dST1VQKEdQSU8sIEdQSU9JMCwgR1BJT0kxLCBHUElPSTIsIEdQSU9JMyksCiB9OwogCiBzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTQ3ZTFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3Nzg2LmMKQEAgLTAsMCArMSw0OTAgQEAKKy8qCisgKiBTSDc3ODYgU2V0dXAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+CisgKgorICogQmFzZWQgb24gU0g3Nzg1IFNldHVwCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNyAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vbW16b25lLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSAweGZmZWEwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCX0sCisJLyoKKwkgKiBUaGUgcmVzdCBvZiB0aGVzZSBhbGwgaGF2ZSBtdWx0aXBsZXhlZCBJUlFzCisJICovCisJeworCQkubWFwYmFzZQk9IDB4ZmZlYjAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDQ0LCA0NCwgNDQsIDQ0IH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlYzAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUwLCA1MCwgNTAsIDUwIH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlZDAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUxLCA1MSwgNTEsIDUxIH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlZTAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUyLCA1MiwgNTIsIDUyIH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlZjAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDUzLCA1MywgNTMsIDUzIH0sCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVzYl9vaGNpX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhmZmU3MDQwMCwKKwkJLmVuZAk9IDB4ZmZlNzA0ZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSA3NywKKwkJLmVuZAk9IDc3LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHU2NCB1c2Jfb2hjaV9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1c2Jfb2hjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX29oY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2ID0geworCQkuZG1hX21hc2sJCT0gJnVzYl9vaGNpX2RtYV9tYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soMzIpLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYl9vaGNpX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdXNiX29oY2lfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc4Nl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpX2RldmljZSwKKwkmdXNiX29oY2lfZGV2aWNlLAorfTsKKworCisvKgorICogUGxlYXNlIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB5b3VyIHBsYXRmb3JtIGJvYXJkCisgKiB1c2UgZXh0ZXJuYWwgY2xvY2sgZm9yIFVTQgorICogKi8KKyNkZWZpbmUgVVNCQ1RMMAkJMHhmZmU3MDg1OAorI2RlZmluZSBDTE9DS19NT0RFX01BU0sgMHhmZmZmZmY3ZgorI2RlZmluZSBFWFRfQ0xPQ0tfTU9ERSAgMHgwMDAwMDA4MAordm9pZCBfX2luaXQgc2g3Nzg2X3VzYl91c2VfZXhjbG9jayh2b2lkKQoreworCXUzMiB2YWwgPSBfX3Jhd19yZWFkbChVU0JDVEwwKSAmIENMT0NLX01PREVfTUFTSzsKKwlfX3Jhd193cml0ZWwodmFsIHwgRVhUX0NMT0NLX01PREUsIFVTQkNUTDApOworfQorCisjZGVmaW5lIFVTQklOSVRSRUcxCTB4ZmZlNzAwOTQKKyNkZWZpbmUgVVNCSU5JVFJFRzIJMHhmZmU3MDA5YworI2RlZmluZSBVU0JJTklUVkFMMQkweDAwZmYwMDQwCisjZGVmaW5lIFVTQklOSVRWQUwyCTB4MDAwMDAwMDEKKworI2RlZmluZSBVU0JQQ1RMMQkweGZmZTcwODA0CisjZGVmaW5lIFVTQlNUCQkweGZmZTcwODA4CisjZGVmaW5lIFBIWV9FTkIJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUExMX0VOQgkJMHgwMDAwMDAwMgorI2RlZmluZSBQSFlfUlNUCQkweDAwMDAwMDA0CisjZGVmaW5lIEFDVF9QTExfU1RBVFVTCTB4YzAwMDAwMDAKK3N0YXRpYyB2b2lkIF9faW5pdCBzaDc3ODZfdXNiX3NldHVwKHZvaWQpCit7CisJaW50IGkgPSAxMDAwMDAwOworCisJLyoKKwkgKiBVU0IgaW5pdGlhbCBzZXR0aW5ncworCSAqCisJICogVGhlIGZvbGxvd2luZyBzZXR0aW5ncyBhcmUgbmVjZXNzYXJ5CisJICogZm9yIHVzaW5nIHRoZSBVU0IgbW9kdWxlcy4KKwkgKgorCSAqIHNlZSAiVVNCIEluaXRhbCBTZXR0aW5ncyIgZm9yIGRldGFpbAorCSAqLworCV9fcmF3X3dyaXRlbChVU0JJTklUVkFMMSwgVVNCSU5JVFJFRzEpOworCV9fcmF3X3dyaXRlbChVU0JJTklUVkFMMiwgVVNCSU5JVFJFRzIpOworCisJLyoKKwkgKiBTZXQgdGhlIFBIWSBhbmQgUExMIGVuYWJsZSBiaXQKKwkgKi8KKwlfX3Jhd193cml0ZWwoUEhZX0VOQiB8IFBMTF9FTkIsIFVTQlBDVEwxKTsKKwl3aGlsZSAoaS0tICYmCisJICAgICAgICgoX19yYXdfcmVhZGwoVVNCU1QpICYgQUNUX1BMTF9TVEFUVVMpICE9IEFDVF9QTExfU1RBVFVTKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlpZiAoaSkgeworCQkvKiBTZXQgdGhlIFBIWSBSU1QgYml0ICovCisJCV9fcmF3X3dyaXRlbChQSFlfRU5CIHwgUExMX0VOQiB8IFBIWV9SU1QsIFVTQlBDVEwxKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic2g3Nzg2IHVzYiBzZXR1cCBkb25lXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzc4Nl9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJc2g3Nzg2X3VzYl9zZXR1cCgpOworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDc3ODZfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShzaDc3ODZfZGV2aWNlcykpOworfQorZGV2aWNlX2luaXRjYWxsKHNoNzc4Nl9kZXZpY2VzX3NldHVwKTsKKworZW51bSB7CisJVU5VU0VEID0gMCwKKworCS8qIGludGVycnVwdCBzb3VyY2VzICovCisKKwlJUkwwX0xMTEwsIElSTDBfTExMSCwgSVJMMF9MTEhMLCBJUkwwX0xMSEgsCisJSVJMMF9MSExMLCBJUkwwX0xITEgsIElSTDBfTEhITCwgSVJMMF9MSEhILAorCUlSTDBfSExMTCwgSVJMMF9ITExILCBJUkwwX0hMSEwsIElSTDBfSExISCwKKwlJUkwwX0hITEwsIElSTDBfSEhMSCwgSVJMMF9ISEhMLAorCisJSVJMNF9MTExMLCBJUkw0X0xMTEgsIElSTDRfTExITCwgSVJMNF9MTEhILAorCUlSTDRfTEhMTCwgSVJMNF9MSExILCBJUkw0X0xISEwsIElSTDRfTEhISCwKKwlJUkw0X0hMTEwsIElSTDRfSExMSCwgSVJMNF9ITEhMLCBJUkw0X0hMSEgsCisJSVJMNF9ISExMLCBJUkw0X0hITEgsIElSTDRfSEhITCwKKworCUlSUTAsIElSUTEsIElSUTIsIElSUTMsIElSUTQsIElSUTUsIElSUTYsIElSUTcsCisJV0RULAorCVRNVTBfMCwgVE1VMF8xLCBUTVUwXzIsIFRNVTBfMywKKwlUTVUxXzAsIFRNVTFfMSwgVE1VMV8yLAorCURNQUMwXzAsIERNQUMwXzEsIERNQUMwXzIsIERNQUMwXzMsIERNQUMwXzQsIERNQUMwXzUsIERNQUMwXzYsCisJSFVESTEsIEhVREkwLAorCURNQUMxXzAsIERNQUMxXzEsIERNQUMxXzIsIERNQUMxXzMsCisJSFBCXzAsIEhQQl8xLCBIUEJfMiwKKwlTQ0lGMF8wLCBTQ0lGMF8xLCBTQ0lGMF8yLCBTQ0lGMF8zLAorCVNDSUYxLAorCVRNVTIsIFRNVTMsCisJU0NJRjIsIFNDSUYzLCBTQ0lGNCwgU0NJRjUsCisJRXRoXzAsIEV0aF8xLAorCVBDSWVDMF8wLCBQQ0llQzBfMSwgUENJZUMwXzIsCisJUENJZUMxXzAsIFBDSWVDMV8xLCBQQ0llQzFfMiwKKwlVU0IsCisJSTJDMCwgSTJDMSwKKwlEVSwKKwlTU0kwLCBTU0kxLCBTU0kyLCBTU0kzLAorCVBDSWVDMl8wLCBQQ0llQzJfMSwgUENJZUMyXzIsCisJSEFDMCwgSEFDMSwKKwlGTENUTCwKKwlIU1BJLAorCUdQSU8wLCBHUElPMSwKKwlUaGVybWFsLAorCUlOVEMwLCBJTlRDMSwgSU5UQzIsIElOVEMzLCBJTlRDNCwgSU5UQzUsIElOVEM2LCBJTlRDNywKKworCS8qIGludGVycnVwdCBncm91cHMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNbXSBfX2luaXRkYXRhID0geworCUlOVENfVkVDVChXRFQsIDB4M2UwKSwKKwlJTlRDX1ZFQ1QoVE1VMF8wLCAweDQwMCksIElOVENfVkVDVChUTVUwXzEsIDB4NDIwKSwKKwlJTlRDX1ZFQ1QoVE1VMF8yLCAweDQ0MCksIElOVENfVkVDVChUTVUwXzMsIDB4NDYwKSwKKwlJTlRDX1ZFQ1QoVE1VMV8wLCAweDQ4MCksIElOVENfVkVDVChUTVUxXzEsIDB4NGEwKSwKKwlJTlRDX1ZFQ1QoVE1VMV8yLCAweDRjMCksCisJSU5UQ19WRUNUKERNQUMwXzAsIDB4NTAwKSwgSU5UQ19WRUNUKERNQUMwXzEsIDB4NTIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzBfMiwgMHg1NDApLCBJTlRDX1ZFQ1QoRE1BQzBfMywgMHg1NjApLAorCUlOVENfVkVDVChETUFDMF80LCAweDU4MCksIElOVENfVkVDVChETUFDMF81LCAweDVhMCksCisJSU5UQ19WRUNUKERNQUMwXzYsIDB4NWMwKSwKKwlJTlRDX1ZFQ1QoSFVESTEsIDB4NWUwKSwgSU5UQ19WRUNUKEhVREkwLCAweDYwMCksCisJSU5UQ19WRUNUKERNQUMxXzAsIDB4NjIwKSwgSU5UQ19WRUNUKERNQUMxXzEsIDB4NjQwKSwKKwlJTlRDX1ZFQ1QoRE1BQzFfMiwgMHg2NjApLCBJTlRDX1ZFQ1QoRE1BQzFfMywgMHg2ODApLAorCUlOVENfVkVDVChIUEJfMCwgMHg2YTApLCBJTlRDX1ZFQ1QoSFBCXzEsIDB4NmMwKSwKKwlJTlRDX1ZFQ1QoSFBCXzIsIDB4NmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRjBfMCwgMHg3MDApLCBJTlRDX1ZFQ1QoU0NJRjBfMSwgMHg3MjApLAorCUlOVENfVkVDVChTQ0lGMF8yLCAweDc0MCksIElOVENfVkVDVChTQ0lGMF8zLCAweDc2MCksCisJSU5UQ19WRUNUKFNDSUYxLCAweDc4MCksCisJSU5UQ19WRUNUKFRNVTIsIDB4N2EwKSwgSU5UQ19WRUNUKFRNVTMsIDB4N2MwKSwKKwlJTlRDX1ZFQ1QoU0NJRjIsIDB4ODQwKSwgSU5UQ19WRUNUKFNDSUYzLCAweDg2MCksCisJSU5UQ19WRUNUKFNDSUY0LCAweDg4MCksIElOVENfVkVDVChTQ0lGNSwgMHg4YTApLAorCUlOVENfVkVDVChFdGhfMCwgMHg4YzApLCBJTlRDX1ZFQ1QoRXRoXzEsIDB4OGUwKSwKKwlJTlRDX1ZFQ1QoUENJZUMwXzAsIDB4YWUwKSwgSU5UQ19WRUNUKFBDSWVDMF8xLCAweGIwMCksCisJSU5UQ19WRUNUKFBDSWVDMF8yLCAweGIyMCksCisJSU5UQ19WRUNUKFBDSWVDMV8wLCAweGI0MCksIElOVENfVkVDVChQQ0llQzFfMSwgMHhiNjApLAorCUlOVENfVkVDVChQQ0llQzFfMiwgMHhiODApLAorCUlOVENfVkVDVChVU0IsIDB4YmEwKSwKKwlJTlRDX1ZFQ1QoSTJDMCwgMHhjYzApLCBJTlRDX1ZFQ1QoSTJDMSwgMHhjZTApLAorCUlOVENfVkVDVChEVSwgMHhkMDApLAorCUlOVENfVkVDVChTU0kwLCAweGQyMCksIElOVENfVkVDVChTU0kxLCAweGQ0MCksCisJSU5UQ19WRUNUKFNTSTIsIDB4ZDYwKSwgSU5UQ19WRUNUKFNTSTMsIDB4ZDgwKSwKKwlJTlRDX1ZFQ1QoUENJZUMyXzAsIDB4ZGEwKSwgSU5UQ19WRUNUKFBDSWVDMl8xLCAweGRjMCksCisJSU5UQ19WRUNUKFBDSWVDMl8yLCAweGRlMCksCisJSU5UQ19WRUNUKEhBQzAsIDB4ZTAwKSwgSU5UQ19WRUNUKEhBQzEsIDB4ZTIwKSwKKwlJTlRDX1ZFQ1QoRkxDVEwsIDB4ZTQwKSwKKwlJTlRDX1ZFQ1QoSFNQSSwgMHhlODApLAorCUlOVENfVkVDVChHUElPMCwgMHhlYTApLCBJTlRDX1ZFQ1QoR1BJTzEsIDB4ZWMwKSwKKwlJTlRDX1ZFQ1QoVGhlcm1hbCwgMHhlZTApLAorfTsKKworLyogRklYTUU6IE1haW4gQ1BVIHN1cHBvcnQgb25seSBub3cgKi8KKyNpZiAxIC8qIE1haW4gQ1BVICovCisjZGVmaW5lIENuSU5UTVNLMAkweGZlNDEwMDMwCisjZGVmaW5lIENuSU5UTVNLMQkweGZlNDEwMDQwCisjZGVmaW5lIENuSU5UTVNLQ0xSMAkweGZlNDEwMDUwCisjZGVmaW5lIENuSU5UTVNLQ0xSMQkweGZlNDEwMDYwCisjZGVmaW5lIENuSU5UMk1TS1IwCTB4ZmU0MTBhMjAKKyNkZWZpbmUgQ25JTlQyTVNLUjEJMHhmZTQxMGEyNAorI2RlZmluZSBDbklOVDJNU0tSMgkweGZlNDEwYTI4CisjZGVmaW5lIENuSU5UMk1TS1IzCTB4ZmU0MTBhMmMKKyNkZWZpbmUgQ25JTlQyTVNLQ1IwCTB4ZmU0MTBhMzAKKyNkZWZpbmUgQ25JTlQyTVNLQ1IxCTB4ZmU0MTBhMzQKKyNkZWZpbmUgQ25JTlQyTVNLQ1IyCTB4ZmU0MTBhMzgKKyNkZWZpbmUgQ25JTlQyTVNLQ1IzCTB4ZmU0MTBhM2MKKyNlbHNlIC8qIFN1YiBDUFUgKi8KKyNkZWZpbmUgQ25JTlRNU0swCTB4ZmU0MTAwMzQKKyNkZWZpbmUgQ25JTlRNU0sxCTB4ZmU0MTAwNDQKKyNkZWZpbmUgQ25JTlRNU0tDTFIwCTB4ZmU0MTAwNTQKKyNkZWZpbmUgQ25JTlRNU0tDTFIxCTB4ZmU0MTAwNjQKKyNkZWZpbmUgQ25JTlQyTVNLUjAJMHhmZTQxMGIyMAorI2RlZmluZSBDbklOVDJNU0tSMQkweGZlNDEwYjI0CisjZGVmaW5lIENuSU5UMk1TS1IyCTB4ZmU0MTBiMjgKKyNkZWZpbmUgQ25JTlQyTVNLUjMJMHhmZTQxMGIyYworI2RlZmluZSBDbklOVDJNU0tDUjAJMHhmZTQxMGIzMAorI2RlZmluZSBDbklOVDJNU0tDUjEJMHhmZTQxMGIzNAorI2RlZmluZSBDbklOVDJNU0tDUjIJMHhmZTQxMGIzOAorI2RlZmluZSBDbklOVDJNU0tDUjMJMHhmZTQxMGIzYworI2VuZGlmCisKKyNkZWZpbmUgSU5UTVNLMgkJMHhmZTQxMDA2OAorI2RlZmluZSBJTlRNU0tDTFIyCTB4ZmU0MTAwNmMKKworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIG1hc2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IENuSU5UTVNLMCwgQ25JTlRNU0tDTFIwLCAzMiwKKwkgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCisJeyBJTlRNU0syLCBJTlRNU0tDTFIyLCAzMiwKKwkgIHsgSVJMMF9MTExMLCBJUkwwX0xMTEgsIElSTDBfTExITCwgSVJMMF9MTEhILAorCSAgICBJUkwwX0xITEwsIElSTDBfTEhMSCwgSVJMMF9MSEhMLCBJUkwwX0xISEgsCisJICAgIElSTDBfSExMTCwgSVJMMF9ITExILCBJUkwwX0hMSEwsIElSTDBfSExISCwKKwkgICAgSVJMMF9ISExMLCBJUkwwX0hITEgsIElSTDBfSEhITCwgMCwKKwkgICAgSVJMNF9MTExMLCBJUkw0X0xMTEgsIElSTDRfTExITCwgSVJMNF9MTEhILAorCSAgICBJUkw0X0xITEwsIElSTDRfTEhMSCwgSVJMNF9MSEhMLCBJUkw0X0xISEgsCisJICAgIElSTDRfSExMTCwgSVJMNF9ITExILCBJUkw0X0hMSEwsIElSTDRfSExISCwKKwkgICAgSVJMNF9ISExMLCBJUkw0X0hITEgsIElSTDRfSEhITCwgMCwgfSB9LAorCXsgQ25JTlQyTVNLUjAsIENuSU5UMk1TS0NSMCAsIDMyLAorCSAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCBXRFQgfSB9LAorCXsgQ25JTlQyTVNLUjEsIENuSU5UMk1TS0NSMSwgMzIsCisJICB7IFRNVTBfMCwgVE1VMF8xLCBUTVUwXzIsIFRNVTBfMywgVE1VMV8wLCBUTVUxXzEsIFRNVTFfMiwgMCwKKwkgICAgRE1BQzBfMCwgRE1BQzBfMSwgRE1BQzBfMiwgRE1BQzBfMywgRE1BQzBfNCwgRE1BQzBfNSwgRE1BQzBfNiwKKwkgICAgSFVESTEsIEhVREkwLAorCSAgICBETUFDMV8wLCBETUFDMV8xLCBETUFDMV8yLCBETUFDMV8zLAorCSAgICBIUEJfMCwgSFBCXzEsIEhQQl8yLAorCSAgICBTQ0lGMF8wLCBTQ0lGMF8xLCBTQ0lGMF8yLCBTQ0lGMF8zLAorCSAgICBTQ0lGMSwKKwkgICAgVE1VMiwgVE1VMywgMCwgfSB9LAorCXsgQ25JTlQyTVNLUjIsIENuSU5UMk1TS0NSMiwgMzIsCisJICB7IDAsIDAsIFNDSUYyLCBTQ0lGMywgU0NJRjQsIFNDSUY1LAorCSAgICBFdGhfMCwgRXRoXzEsCisJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJICAgIFBDSWVDMF8wLCBQQ0llQzBfMSwgUENJZUMwXzIsCisJICAgIFBDSWVDMV8wLCBQQ0llQzFfMSwgUENJZUMxXzIsCisJICAgIFVTQiwgMCwgMCB9IH0sCisJeyBDbklOVDJNU0tSMywgQ25JTlQyTVNLQ1IzLCAzMiwKKwkgIHsgMCwgMCwgMCwgMCwgMCwgMCwKKwkgICAgSTJDMCwgSTJDMSwKKwkgICAgRFUsIFNTSTAsIFNTSTEsIFNTSTIsIFNTSTMsCisJICAgIFBDSWVDMl8wLCBQQ0llQzJfMSwgUENJZUMyXzIsCisJICAgIEhBQzAsIEhBQzEsCisJICAgIEZMQ1RMLCAwLAorCSAgICBIU1BJLCBHUElPMCwgR1BJTzEsIFRoZXJtYWwsCisJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIHByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IDB4ZmU0MTAwMTAsIDAsIDMyLCA0LCAvKiBJTlRQUkkgKi8gICB7IElSUTAsIElSUTEsIElSUTIsIElSUTMsCisJCQkJCQkgSVJRNCwgSVJRNSwgSVJRNiwgSVJRNyB9IH0sCisJeyAweGZlNDEwODAwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTAgKi8geyAwLCAwLCAwLCBXRFQgfSB9LAorCXsgMHhmZTQxMDgwNCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxICovIHsgVE1VMF8wLCBUTVUwXzEsCisJCQkJCQkgVE1VMF8yLCBUTVUwXzMgfSB9LAorCXsgMHhmZTQxMDgwOCwgMCwgMzIsIDgsIC8qIElOVDJQUkkyICovIHsgVE1VMV8wLCBUTVUxXzEsCisJCQkJCQkgVE1VMV8yLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MGMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMyAqLyB7IERNQUMwXzAsIERNQUMwXzEsCisJCQkJCQkgRE1BQzBfMiwgRE1BQzBfMyB9IH0sCisJeyAweGZlNDEwODEwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTQgKi8geyBETUFDMF80LCBETUFDMF81LAorCQkJCQkJIERNQUMwXzYsIEhVREkxIH0gfSwKKwl7IDB4ZmU0MTA4MTQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJNSAqLyB7IEhVREkwLCBETUFDMV8wLAorCQkJCQkJIERNQUMxXzEsIERNQUMxXzIgfSB9LAorCXsgMHhmZTQxMDgxOCwgMCwgMzIsIDgsIC8qIElOVDJQUkk2ICovIHsgRE1BQzFfMywgSFBCXzAsCisJCQkJCQkgSFBCXzEsIEhQQl8yIH0gfSwKKwl7IDB4ZmU0MTA4MWMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJNyAqLyB7IFNDSUYwXzAsIFNDSUYwXzEsCisJCQkJCQkgU0NJRjBfMiwgU0NJRjBfMyB9IH0sCisJeyAweGZlNDEwODIwLCAwLCAzMiwgOCwgLyogSU5UMlBSSTggKi8geyBTQ0lGMSwgVE1VMiwgVE1VMywgMCB9IH0sCisJeyAweGZlNDEwODI0LCAwLCAzMiwgOCwgLyogSU5UMlBSSTkgKi8geyAwLCAwLCBTQ0lGMiwgU0NJRjMgfSB9LAorCXsgMHhmZTQxMDgyOCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxMCAqLyB7IFNDSUY0LCBTQ0lGNSwKKwkJCQkJCSAgRXRoXzAsIEV0aF8xIH0gfSwKKwl7IDB4ZmU0MTA4MmMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTEgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MzAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTIgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MzQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTMgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4MzgsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMTQgKi8geyAwLCAwLCAwLCBQQ0llQzBfMCB9IH0sCisJeyAweGZlNDEwODNjLCAwLCAzMiwgOCwgLyogSU5UMlBSSTE1ICovIHsgUENJZUMwXzEsIFBDSWVDMF8yLAorCQkJCQkJICBQQ0llQzFfMCwgUENJZUMxXzEgfSB9LAorCXsgMHhmZTQxMDg0MCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxNiAqLyB7IFBDSWVDMV8yLCBVU0IsIDAsIDAgfSB9LAorCXsgMHhmZTQxMDg0NCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxNyAqLyB7IDAsIDAsIDAsIDAgfSB9LAorCXsgMHhmZTQxMDg0OCwgMCwgMzIsIDgsIC8qIElOVDJQUkkxOCAqLyB7IDAsIDAsIEkyQzAsIEkyQzEgfSB9LAorCXsgMHhmZTQxMDg0YywgMCwgMzIsIDgsIC8qIElOVDJQUkkxOSAqLyB7IERVLCBTU0kwLCBTU0kxLCBTU0kyIH0gfSwKKwl7IDB4ZmU0MTA4NTAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjAgKi8geyBTU0kzLCBQQ0llQzJfMCwKKwkJCQkJCSAgUENJZUMyXzEsIFBDSWVDMl8yIH0gfSwKKwl7IDB4ZmU0MTA4NTQsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjEgKi8geyBIQUMwLCBIQUMxLCBGTENUTCwgMCB9IH0sCisJeyAweGZlNDEwODU4LCAwLCAzMiwgOCwgLyogSU5UMlBSSTIyICovIHsgSFNQSSwgR1BJTzAsCisJCQkJCQkgIEdQSU8xLCBUaGVybWFsIH0gfSwKKwl7IDB4ZmU0MTA4NWMsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjMgKi8geyAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZmU0MTA4NjAsIDAsIDMyLCA4LCAvKiBJTlQyUFJJMjQgKi8geyAwLCAwLCAwLCAwIH0gfSwKK307CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2MsICJzaDc3ODYiLCB2ZWN0b3JzLCBOVUxMLAorCQkJIG1hc2tfcmVnaXN0ZXJzLCBwcmlvX3JlZ2lzdGVycywgTlVMTCk7CisKKy8qIFN1cHBvcnQgZm9yIGV4dGVybmFsIGludGVycnVwdCBwaW5zIGluIElSUSBtb2RlICovCisKK3N0YXRpYyBzdHJ1Y3QgaW50Y192ZWN0IHZlY3RvcnNfaXJxMDEyM1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19WRUNUKElSUTAsIDB4MjAwKSwgSU5UQ19WRUNUKElSUTEsIDB4MjQwKSwKKwlJTlRDX1ZFQ1QoSVJRMiwgMHgyODApLCBJTlRDX1ZFQ1QoSVJRMywgMHgyYzApLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19pcnE0NTY3W10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoSVJRNCwgMHgzMDApLCBJTlRDX1ZFQ1QoSVJRNSwgMHgzNDApLAorCUlOVENfVkVDVChJUlE2LCAweDM4MCksIElOVENfVkVDVChJUlE3LCAweDNjMCksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfc2Vuc2VfcmVnIHNlbnNlX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyAweGZlNDEwMDFjLCAzMiwgMiwgLyogSUNSMSAqLyAgIHsgSVJRMCwgSVJRMSwgSVJRMiwgSVJRMywKKwkJCQkJICAgIElSUTQsIElSUTUsIElSUTYsIElSUTcgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIGFja19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhmZTQxMDAyNCwgMCwgMzIsIC8qIElOVFJFUSAqLworCSAgeyBJUlEwLCBJUlExLCBJUlEyLCBJUlEzLCBJUlE0LCBJUlE1LCBJUlE2LCBJUlE3IH0gfSwKK307CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQ19BQ0soaW50Y19kZXNjX2lycTAxMjMsICJzaDc3ODYtaXJxMDEyMyIsCisJCQkgICAgIHZlY3RvcnNfaXJxMDEyMywgTlVMTCwgbWFza19yZWdpc3RlcnMsCisJCQkgICAgIHByaW9fcmVnaXN0ZXJzLCBzZW5zZV9yZWdpc3RlcnMsIGFja19yZWdpc3RlcnMpOworCitzdGF0aWMgREVDTEFSRV9JTlRDX0RFU0NfQUNLKGludGNfZGVzY19pcnE0NTY3LCAic2g3Nzg2LWlycTQ1NjciLAorCQkJICAgICB2ZWN0b3JzX2lycTQ1NjcsIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLAorCQkJICAgICBwcmlvX3JlZ2lzdGVycywgc2Vuc2VfcmVnaXN0ZXJzLCBhY2tfcmVnaXN0ZXJzKTsKKworLyogRXh0ZXJuYWwgaW50ZXJydXB0IHBpbnMgaW4gSVJMIG1vZGUgKi8KKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgdmVjdG9yc19pcmwwMTIzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoSVJMMF9MTExMLCAweDIwMCksIElOVENfVkVDVChJUkwwX0xMTEgsIDB4MjIwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9MTEhMLCAweDI0MCksIElOVENfVkVDVChJUkwwX0xMSEgsIDB4MjYwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9MSExMLCAweDI4MCksIElOVENfVkVDVChJUkwwX0xITEgsIDB4MmEwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9MSEhMLCAweDJjMCksIElOVENfVkVDVChJUkwwX0xISEgsIDB4MmUwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ITExMLCAweDMwMCksIElOVENfVkVDVChJUkwwX0hMTEgsIDB4MzIwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ITEhMLCAweDM0MCksIElOVENfVkVDVChJUkwwX0hMSEgsIDB4MzYwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ISExMLCAweDM4MCksIElOVENfVkVDVChJUkwwX0hITEgsIDB4M2EwKSwKKwlJTlRDX1ZFQ1QoSVJMMF9ISEhMLCAweDNjMCksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCB2ZWN0b3JzX2lybDQ1NjdbXSBfX2luaXRkYXRhID0geworCUlOVENfVkVDVChJUkw0X0xMTEwsIDB4OTAwKSwgSU5UQ19WRUNUKElSTDRfTExMSCwgMHg5MjApLAorCUlOVENfVkVDVChJUkw0X0xMSEwsIDB4OTQwKSwgSU5UQ19WRUNUKElSTDRfTExISCwgMHg5NjApLAorCUlOVENfVkVDVChJUkw0X0xITEwsIDB4OTgwKSwgSU5UQ19WRUNUKElSTDRfTEhMSCwgMHg5YTApLAorCUlOVENfVkVDVChJUkw0X0xISEwsIDB4OWMwKSwgSU5UQ19WRUNUKElSTDRfTEhISCwgMHg5ZTApLAorCUlOVENfVkVDVChJUkw0X0hMTEwsIDB4YTAwKSwgSU5UQ19WRUNUKElSTDRfSExMSCwgMHhhMjApLAorCUlOVENfVkVDVChJUkw0X0hMSEwsIDB4YTQwKSwgSU5UQ19WRUNUKElSTDRfSExISCwgMHhhNjApLAorCUlOVENfVkVDVChJUkw0X0hITEwsIDB4YTgwKSwgSU5UQ19WRUNUKElSTDRfSEhMSCwgMHhhYTApLAorCUlOVENfVkVDVChJUkw0X0hISEwsIDB4YWMwKSwKK307CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQyhpbnRjX2Rlc2NfaXJsMDEyMywgInNoNzc4Ni1pcmwwMTIzIiwgdmVjdG9yc19pcmwwMTIzLAorCQkJIE5VTEwsIG1hc2tfcmVnaXN0ZXJzLCBOVUxMLCBOVUxMKTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDKGludGNfZGVzY19pcmw0NTY3LCAic2g3Nzg2LWlybDQ1NjciLCB2ZWN0b3JzX2lybDQ1NjcsCisJCQkgTlVMTCwgbWFza19yZWdpc3RlcnMsIE5VTEwsIE5VTEwpOworCisjZGVmaW5lIElOVENfSUNSMAkweGZlNDEwMDAwCisjZGVmaW5lIElOVENfSU5UTVNLMAlDbklOVE1TSzAKKyNkZWZpbmUgSU5UQ19JTlRNU0sxCUNuSU5UTVNLMQorI2RlZmluZSBJTlRDX0lOVE1TSzIJSU5UTVNLMgorI2RlZmluZSBJTlRDX0lOVE1TS0NMUjEJQ25JTlRNU0tDTFIxCisjZGVmaW5lIElOVENfSU5UTVNLQ0xSMglJTlRNU0tDTFIyCisKK3ZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwKHZvaWQpCit7CisJLyogZGlzYWJsZSBJUlEzLTAgKyBJUlE3LTQgKi8KKwljdHJsX291dGwoMHhmZjAwMDAwMCwgSU5UQ19JTlRNU0swKTsKKworCS8qIGRpc2FibGUgSVJMMy0wICsgSVJMNy00ICovCisJY3RybF9vdXRsKDB4YzAwMDAwMDAsIElOVENfSU5UTVNLMSk7CisJY3RybF9vdXRsKDB4ZmZmZWZmZmUsIElOVENfSU5UTVNLMik7CisKKwkvKiBzZWxlY3QgSVJMIG1vZGUgZm9yIElSTDMtMCArIElSTDctNCAqLworCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApICYgfjB4MDBjMDAwMDAsIElOVENfSUNSMCk7CisKKwlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzYyk7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfaXJxX3NldHVwX3BpbnMoaW50IG1vZGUpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBJUlFfTU9ERV9JUlE3NjU0OgorCQkvKiBzZWxlY3QgSVJRIG1vZGUgZm9yIElSTDctNCAqLworCQljdHJsX291dGwoY3RybF9pbmwoSU5UQ19JQ1IwKSB8IDB4MDA0MDAwMDAsIElOVENfSUNSMCk7CisJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lycTQ1NjcpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSUTMyMTA6CisJCS8qIHNlbGVjdCBJUlEgbW9kZSBmb3IgSVJMMy0wICovCisJCWN0cmxfb3V0bChjdHJsX2lubChJTlRDX0lDUjApIHwgMHgwMDgwMDAwMCwgSU5UQ19JQ1IwKTsKKwkJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjX2Rlc2NfaXJxMDEyMyk7CisJCWJyZWFrOworCWNhc2UgSVJRX01PREVfSVJMNzY1NDoKKwkJLyogZW5hYmxlIElSTDctNCBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLworCQljdHJsX291dGwoMHg0MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJY3RybF9vdXRsKDB4MDAwMGZmZmUsIElOVENfSU5UTVNLQ0xSMik7CisJCWJyZWFrOworCWNhc2UgSVJRX01PREVfSVJMMzIxMDoKKwkJLyogZW5hYmxlIElSTDAtMyBidXQgZG9uJ3QgcHJvdmlkZSBhbnkgbWFza2luZyAqLworCQljdHJsX291dGwoMHg4MDAwMDAwMCwgSU5UQ19JTlRNU0tDTFIxKTsKKwkJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CisJCWJyZWFrOworCWNhc2UgSVJRX01PREVfSVJMNzY1NF9NQVNLOgorCQkvKiBlbmFibGUgSVJMNy00IGFuZCBtYXNrIHVzaW5nIGNwdSBpbnRjIGNvbnRyb2xsZXIgKi8KKwkJY3RybF9vdXRsKDB4NDAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CisJCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y19kZXNjX2lybDQ1NjcpOworCQlicmVhazsKKwljYXNlIElSUV9NT0RFX0lSTDMyMTBfTUFTSzoKKwkJLyogZW5hYmxlIElSTDAtMyBhbmQgbWFzayB1c2luZyBjcHUgaW50YyBjb250cm9sbGVyICovCisJCWN0cmxfb3V0bCgweDgwMDAwMDAwLCBJTlRDX0lOVE1TS0NMUjEpOworCQlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNfZGVzY19pcmwwMTIzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQoreworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YmZhN2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgTGludXgvU3VwZXJIIFNILU1vYmlsZSBiYWNrZW5kcy4KKyMKKworIyBQb3dlciBNYW5hZ2VtZW50ICYgU2xlZXAgbW9kZQorb2JqLSQoQ09ORklHX1BNKQkrPSBwbS5vIHNsZWVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwNjdhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbS5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9wbS1zaF9tb2JpbGUuYworICoKKyAqIFBvd2VyIG1hbmFnZW1lbnQgc3VwcG9ydCBjb2RlIGZvciBTdXBlckggTW9iaWxlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworLyoKKyAqIFNsZWVwIG1vZGVzIGF2YWlsYWJsZSBvbiBTdXBlckggTW9iaWxlOgorICoKKyAqIFNsZWVwIG1vZGUgaXMganVzdCBwbGFpbiAic2xlZXAiIGluc3RydWN0aW9uCisgKiBTbGVlcCBTZWxmLVJlZnJlc2ggbW9kZSBpcyBhYm92ZSBwbHVzIFJBTSBwdXQgaW4gU2VsZi1SZWZyZXNoCisgKiBTdGFuZGJ5IFNlbGYtUmVmcmVzaCBtb2RlIGlzIGFib3ZlIHBsdXMgc3RvcHBlZCBjbG9ja3MKKyAqLworI2RlZmluZSBTVVNQX01PREVfU0xFRVAJCShTVVNQX1NIX1NMRUVQKQorI2RlZmluZSBTVVNQX01PREVfU0xFRVBfU0YJKFNVU1BfU0hfU0xFRVAgfCBTVVNQX1NIX1NGKQorI2RlZmluZSBTVVNQX01PREVfU1RBTkRCWV9TRgkoU1VTUF9TSF9TVEFOREJZIHwgU1VTUF9TSF9TRikKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgbW9kZXMgYXJlIG5vdCB0aGVyZSB5ZXQ6CisgKgorICogUi1zdGFuZGJ5IG1vZGUgaXMgdW5zdXBwb3J0ZWQsIGJ1dCB3aWxsIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUKKyAqIFUtc3RhbmRieSBtb2RlIGlzIGxvdyBwcmlvcml0eSBzaW5jZSBpdCBuZWVkcyBib290bG9hZGVyIGhhY2tzCisgKgorICogQWxsIG1vZGVzIHNob3VsZCBiZSB0aWVkIGluIHdpdGggY3B1aWRsZS4gQnV0IGJlZm9yZSB0aGF0IGNhbgorICogaGFwcGVuIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBlbmFibGVkIGhhcmR3YXJlIGJsb2NrcyBzbyB3ZQorICogY2FuIGF2b2lkIGVudGVyaW5nIHNsZWVwIG1vZGVzIHRoYXQgc3RvcCBjbG9ja3MgdG8gaGFyZHdhcmUKKyAqIGJsb2NrcyB0aGF0IGFyZSBpbiB1c2UgZXZlbiB0aG91Z2ggdGhlIGNwdSBjb3JlIGlzIGlkbGUuCisgKi8KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2hfbW9iaWxlX3N0YW5kYnlbXTsKK2V4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgc2hfbW9iaWxlX3N0YW5kYnlfc2l6ZTsKKworc3RhdGljIHZvaWQgc2hfbW9iaWxlX2NhbGxfc3RhbmRieSh1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJZXh0ZXJuIHZvaWQgKnZicl9iYXNlOworCXZvaWQgKm9uY2hpcF9tZW0gPSAodm9pZCAqKTB4ZTUyMDAwMDA7IC8qIElMUkFNICovCisJdm9pZCAoKnN0YW5kYnlfb25jaGlwX21lbSkodW5zaWduZWQgbG9uZykgPSBvbmNoaXBfbWVtOworCisJLyogTm90ZTogV2FrZSB1cCBmcm9tIHNsZWVwIG1heSBnZW5lcmF0ZSBleGNlcHRpb25zIQorCSAqIFNldHVwIFZCUiB0byBwb2ludCB0byBvbi1jaGlwIHJhbSBpZiBzZWxmLXJlZnJlc2ggaXMKKwkgKiBnb2luZyB0byBiZSB1c2VkLgorCSAqLworCWlmIChtb2RlICYgU1VTUF9TSF9TRikKKwkJYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHZiciIgOiA6ICJyIiAob25jaGlwX21lbSkgOiAibWVtb3J5Iik7CisKKwkvKiBDb3B5IHRoZSBhc3NlbWJseSBzbmlwcGV0IHRvIHRoZSBvdGhlcndpc2UgdW51bnNlZCBJTFJBTSAqLworCW1lbWNweShvbmNoaXBfbWVtLCBzaF9tb2JpbGVfc3RhbmRieSwgc2hfbW9iaWxlX3N0YW5kYnlfc2l6ZSk7CisJd21iKCk7CisJY3RybF9iYXJyaWVyKCk7CisKKwkvKiBMZXQgYXNzZW1ibHkgc25pcHBldCBpbiBvbi1jaGlwIG1lbW9yeSBoYW5kbGUgdGhlIHJlc3QgKi8KKwlzdGFuZGJ5X29uY2hpcF9tZW0obW9kZSk7CisKKwkvKiBQdXQgVkJSIGJhY2sgaW4gU3lzdGVtIFJBTSBhZ2FpbiAqLworCWlmIChtb2RlICYgU1VTUF9TSF9TRikKKwkJYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHZiciIgOiA6ICJyIiAoJnZicl9iYXNlKSA6ICJtZW1vcnkiKTsKK30KKworc3RhdGljIGludCBzaF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlzZXRfYmxfYml0KCk7CisJc2hfbW9iaWxlX2NhbGxfc3RhbmRieShTVVNQX01PREVfU1RBTkRCWV9TRik7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwljbGVhcl9ibF9iaXQoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBzaF9wbV9vcHMgPSB7CisJLmVudGVyICAgICAgICAgID0gc2hfcG1fZW50ZXIsCisJLnZhbGlkICAgICAgICAgID0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoX3BtX2luaXQodm9pZCkKK3sKKwlzdXNwZW5kX3NldF9vcHMoJnNoX3BtX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoc2hfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODg4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvc2xlZXAuUwpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NsZWVwLXNoX21vYmlsZS5TCisgKgorICogU2xlZXAgbW9kZSBhbmQgU3RhbmRieSBtb2RlcyBzdXBwb3J0IGZvciBTdXBlckggTW9iaWxlCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zeXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgorCisvKiBtYW5hZ2Ugc2VsZi1yZWZyZXNoIGFuZCBlbnRlciBzdGFuZGJ5IG1vZGUuCisgKiB0aGlzIGNvZGUgd2lsbCBiZSBjb3BpZWQgdG8gb24tY2hpcCBtZW1vcnkgYW5kIGV4ZWN1dGVkIGZyb20gdGhlcmUuCisgKi8KKworCS5iYWxpZ24gCTQwOTYsMCw0MDk2CitFTlRSWShzaF9tb2JpbGVfc3RhbmRieSkKKwltb3YJcjQsIHIwCisKKwl0c3QJI1NVU1BfU0hfU0YsIHIwCisJYnQJc2tpcF9zZXRfc2YKKworCS8qIFNEUkFNOiBkaXNhYmxlIHBvd2VyIGRvd24gYW5kIHB1dCBpbiBzZWxmLXJlZnJlc2ggbW9kZSAqLworCW1vdi5sCTFmLCByNAorCW1vdi5sCTJmLCByMQorCW1vdi5sCUByNCwgcjIKKwlvcglyMSwgcjIKKwltb3YubCAgIDNmLCByMworCWFuZAlyMywgcjIKKwltb3YubAlyMiwgQHI0CisKK3NraXBfc2V0X3NmOgorCXRzdAkjU1VTUF9TSF9TTEVFUCwgcjAKKwlidAl0ZXN0X3N0YW5kYnkKKworCS8qIHNldCBtb2RlIHRvICJzbGVlcCBtb2RlIiAqLworCWJyYQlkb19zbGVlcAorCSBtb3YJIzB4MDAsIHIxCisKK3Rlc3Rfc3RhbmRieToKKwl0c3QJI1NVU1BfU0hfU1RBTkRCWSwgcjAKKwlidAl0ZXN0X3JzdGFuZGJ5CisKKwkvKiBzZXQgbW9kZSB0byAic29mdHdhcmUgc3RhbmRieSBtb2RlIiAqLworCWJyYQlkb19zbGVlcAorCSBtb3YJIzB4ODAsIHIxCisKK3Rlc3RfcnN0YW5kYnk6CisJdHN0CSNTVVNQX1NIX1JTVEFOREJZLCByMAorCWJ0CXRlc3RfdXN0YW5kYnkKKworCS8qIHNldCBtb2RlIHRvICJyLXN0YW5kYnkgbW9kZSIgKi8KKwlicmEJZG9fc2xlZXAKKwkgbW92CSMweDIwLCByMQorCit0ZXN0X3VzdGFuZGJ5OgorCXRzdAkjU1VTUF9TSF9VU1RBTkRCWSwgcjAKKwlidAlkb25lX3NsZWVwCisKKwkvKiBzZXQgbW9kZSB0byAidS1zdGFuZGJ5IG1vZGUiICovCisJbW92CSMweDEwLCByMQorCisJLyogZmFsbC10aHJvdWdoICovCisKK2RvX3NsZWVwOgorCS8qIHNldHVwIGFuZCBlbnRlciBzZWxlY3RlZCBzdGFuZGJ5IG1vZGUgKi8KKwltb3YubAk1ZiwgcjQKKwltb3YubAlyMSwgQHI0CisJc2xlZXAKKworZG9uZV9zbGVlcDoKKwkvKiByZXNldCBzdGFuZGJ5IG1vZGUgdG8gc2xlZXAgbW9kZSAqLworCW1vdi5sCTVmLCByNAorCW1vdgkjMHgwMCwgcjEKKwltb3YubAlyMSwgQHI0CisKKwl0c3QJI1NVU1BfU0hfU0YsIHIwCisJYnQJc2tpcF9yZXN0b3JlX3NmCisKKwkvKiBTRFJBTTogc2V0IGF1dG8tcmVmcmVzaCBtb2RlICovCisJbW92LmwJMWYsIHI0CisJbW92LmwJQHI0LCByMgorCW1vdi5sICAgNGYsIHIzCisJYW5kCXIzLCByMgorCW1vdi5sCXIyLCBAcjQKKwltb3YubAk2ZiwgcjQKKwltb3YubAk3ZiwgcjEKKwltb3YubAk4ZiwgcjIKKwltb3YubAlAcjQsIHIzCisJbW92CSMtMSwgcjQKKwlhZGQJcjQsIHIzCisJb3IJcjIsIHIzCisJbW92LmwJcjMsIEByMQorc2tpcF9yZXN0b3JlX3NmOgorCXJ0cworCSBub3AKKworCS5iYWxpZ24gNAorMToJLmxvbmcJMHhmZTQwMDAwOCAvKiBTRENSMCAqLworMjoJLmxvbmcJMHgwMDAwMDQwMAorMzoJLmxvbmcJMHhmZmZmN2ZmZgorNDoJLmxvbmcJMHhmZmZmZmJmZgorNToJLmxvbmcJMHhhNDE1MDAyMCAvKiBTVEJDUiAqLworNjoJLmxvbmcgICAweGZlNDAwMDFjIC8qIFJUQ09SICovCis3OgkubG9uZyAgIDB4ZmU0MDAwMTggLyogUlRDTlQgKi8KKzg6CS5sb25nICAgMHhhNTVhMDAwMAorCisvKiBpbnRlcnJ1cHQgdmVjdG9yIEAgMHg2MDAgKi8KKwkuYmFsaWduIAkweDQwMCwwLDB4NDAwCisJLmxvbmcJMHhkZWFkYmVlZgorCS5iYWxpZ24gCTB4MjAwLDAsMHgyMDAKKwkvKiBzaDc3MjIgd2lsbCBlbmQgdXAgaGVyZSBpbiBzbGVlcCBtb2RlICovCisJcnRlCisJIG5vcAorc2hfbW9iaWxlX3N0YW5kYnlfZW5kOgorCitFTlRSWShzaF9tb2JpbGVfc3RhbmRieV9zaXplKQorCS5sb25nIHNoX21vYmlsZV9zdGFuZGJ5X2VuZCAtIHNoX21vYmlsZV9zdGFuZGJ5CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9ncGlvLmMgYi9hcmNoL3NoL2tlcm5lbC9ncGlvLmMKaW5kZXggZDM3MTY1My4uZDIyZTVhZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvZ3Bpby5jCisrKyBiL2FyY2gvc2gva2VybmVsL2dwaW8uYwpAQCAtMTksMjIgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gKnJlZ2lzdGVyZWRfZ3BpbzsKLQotc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb19jb250cm9sbGVyKHVuc2lnbmVkIGdwaW8pCi17Ci0JaWYgKCFyZWdpc3RlcmVkX2dwaW8pCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKGdwaW8gPCByZWdpc3RlcmVkX2dwaW8tPmZpcnN0X2dwaW8pCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKGdwaW8gPiByZWdpc3RlcmVkX2dwaW8tPmxhc3RfZ3BpbykKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gcmVnaXN0ZXJlZF9ncGlvOwotfQotCiBzdGF0aWMgaW50IGVudW1faW5fcmFuZ2UocGlubXV4X2VudW1fdCBlbnVtX2lkLCBzdHJ1Y3QgcGlubXV4X3JhbmdlICpyKQogewogCWlmIChlbnVtX2lkIDwgci0+YmVnaW4pCkBAIC00Niw5ICszMCw2NCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IHJlYWRfd3JpdGVfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKLQkJCSAgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MsCi0JCQkgIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCBkb193cml0ZSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdwaW9fcmVhZF9yYXdfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCkKK3sKKwlzd2l0Y2ggKHJlZ193aWR0aCkgeworCWNhc2UgODoKKwkJcmV0dXJuIGN0cmxfaW5iKHJlZyk7CisJY2FzZSAxNjoKKwkJcmV0dXJuIGN0cmxfaW53KHJlZyk7CisJY2FzZSAzMjoKKwkJcmV0dXJuIGN0cmxfaW5sKHJlZyk7CisJfQorCisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fd3JpdGVfcmF3X3JlZyh1bnNpZ25lZCBsb25nIHJlZywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3dpdGNoIChyZWdfd2lkdGgpIHsKKwljYXNlIDg6CisJCWN0cmxfb3V0YihkYXRhLCByZWcpOworCQlyZXR1cm47CisJY2FzZSAxNjoKKwkJY3RybF9vdXR3KGRhdGEsIHJlZyk7CisJCXJldHVybjsKKwljYXNlIDMyOgorCQljdHJsX291dGwoZGF0YSwgcmVnKTsKKwkJcmV0dXJuOworCX0KKworCUJVRygpOworfQorCitzdGF0aWMgdm9pZCBncGlvX3dyaXRlX2JpdChzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgaW5fcG9zLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgcG9zOworCisJcG9zID0gZHItPnJlZ193aWR0aCAtIChpbl9wb3MgKyAxKTsKKworI2lmZGVmIERFQlVHCisJcHJfaW5mbygid3JpdGVfYml0IGFkZHIgPSAlbHgsIHZhbHVlID0gJWxkLCBwb3MgPSAlbGQsICIKKwkJInJfd2lkdGggPSAlbGRcbiIsCisJCWRyLT5yZWcsICEhdmFsdWUsIHBvcywgZHItPnJlZ193aWR0aCk7CisjZW5kaWYKKworCWlmICh2YWx1ZSkKKwkJc2V0X2JpdChwb3MsICZkci0+cmVnX3NoYWRvdyk7CisJZWxzZQorCQljbGVhcl9iaXQocG9zLCAmZHItPnJlZ19zaGFkb3cpOworCisJZ3Bpb193cml0ZV9yYXdfcmVnKGRyLT5yZWcsIGRyLT5yZWdfd2lkdGgsIGRyLT5yZWdfc2hhZG93KTsKK30KKworc3RhdGljIGludCBncGlvX3JlYWRfcmVnKHVuc2lnbmVkIGxvbmcgcmVnLCB1bnNpZ25lZCBsb25nIHJlZ193aWR0aCwKKwkJCSB1bnNpZ25lZCBsb25nIGZpZWxkX3dpZHRoLCB1bnNpZ25lZCBsb25nIGluX3BvcykKIHsKIAl1bnNpZ25lZCBsb25nIGRhdGEsIG1hc2ssIHBvczsKIApAQCAtNTcsNTIgKzk2LDUzIEBACiAJcG9zID0gcmVnX3dpZHRoIC0gKChpbl9wb3MgKyAxKSAqIGZpZWxkX3dpZHRoKTsKIAogI2lmZGVmIERFQlVHCi0JcHJfaW5mbygiJXMsIGFkZHIgPSAlbHgsIHZhbHVlID0gJWxkLCBwb3MgPSAlbGQsICIKKwlwcl9pbmZvKCJyZWFkX3JlZzogYWRkciA9ICVseCwgcG9zID0gJWxkLCAiCiAJCSJyX3dpZHRoID0gJWxkLCBmX3dpZHRoID0gJWxkXG4iLAotCQlkb193cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsIHJlZywgdmFsdWUsIHBvcywKLQkJcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CisJCXJlZywgcG9zLCByZWdfd2lkdGgsIGZpZWxkX3dpZHRoKTsKICNlbmRpZgogCi0Jc3dpdGNoIChyZWdfd2lkdGgpIHsKLQljYXNlIDg6Ci0JCWRhdGEgPSBjdHJsX2luYihyZWcpOwotCQlicmVhazsKLQljYXNlIDE2OgotCQlkYXRhID0gY3RybF9pbncocmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSAzMjoKLQkJZGF0YSA9IGN0cmxfaW5sKHJlZyk7Ci0JCWJyZWFrOwotCX0KLQotCWlmICghZG9fd3JpdGUpCi0JCXJldHVybiAoZGF0YSA+PiBwb3MpICYgbWFzazsKLQotCWRhdGEgJj0gfihtYXNrIDw8IHBvcyk7Ci0JZGF0YSB8PSB2YWx1ZSA8PCBwb3M7Ci0KLQlzd2l0Y2ggKHJlZ193aWR0aCkgewotCWNhc2UgODoKLQkJY3RybF9vdXRiKGRhdGEsIHJlZyk7Ci0JCWJyZWFrOwotCWNhc2UgMTY6Ci0JCWN0cmxfb3V0dyhkYXRhLCByZWcpOwotCQlicmVhazsKLQljYXNlIDMyOgotCQljdHJsX291dGwoZGF0YSwgcmVnKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOworCWRhdGEgPSBncGlvX3JlYWRfcmF3X3JlZyhyZWcsIHJlZ193aWR0aCk7CisJcmV0dXJuIChkYXRhID4+IHBvcykgJiBtYXNrOwogfQogCi1zdGF0aWMgaW50IGdldF9kYXRhX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCB1bnNpZ25lZCBncGlvLAotCQkJc3RydWN0IHBpbm11eF9kYXRhX3JlZyAqKmRycCwgaW50ICpiaXRwKQorc3RhdGljIHZvaWQgZ3Bpb193cml0ZV9yZWcodW5zaWduZWQgbG9uZyByZWcsIHVuc2lnbmVkIGxvbmcgcmVnX3dpZHRoLAorCQkJICAgdW5zaWduZWQgbG9uZyBmaWVsZF93aWR0aCwgdW5zaWduZWQgbG9uZyBpbl9wb3MsCisJCQkgICB1bnNpZ25lZCBsb25nIHZhbHVlKQogewotCXBpbm11eF9lbnVtX3QgZW51bV9pZCA9IGdwaW9jLT5ncGlvc1tncGlvXS5lbnVtX2lkOworCXVuc2lnbmVkIGxvbmcgbWFzaywgcG9zOworCisJbWFzayA9ICgxIDw8IGZpZWxkX3dpZHRoKSAtIDE7CisJcG9zID0gcmVnX3dpZHRoIC0gKChpbl9wb3MgKyAxKSAqIGZpZWxkX3dpZHRoKTsKKworI2lmZGVmIERFQlVHCisJcHJfaW5mbygid3JpdGVfcmVnIGFkZHIgPSAlbHgsIHZhbHVlID0gJWxkLCBwb3MgPSAlbGQsICIKKwkJInJfd2lkdGggPSAlbGQsIGZfd2lkdGggPSAlbGRcbiIsCisJCXJlZywgdmFsdWUsIHBvcywgcmVnX3dpZHRoLCBmaWVsZF93aWR0aCk7CisjZW5kaWYKKworCW1hc2sgPSB+KG1hc2sgPDwgcG9zKTsKKwl2YWx1ZSA9IHZhbHVlIDw8IHBvczsKKworCXN3aXRjaCAocmVnX3dpZHRoKSB7CisJY2FzZSA4OgorCQljdHJsX291dGIoKGN0cmxfaW5iKHJlZykgJiBtYXNrKSB8IHZhbHVlLCByZWcpOworCQlicmVhazsKKwljYXNlIDE2OgorCQljdHJsX291dHcoKGN0cmxfaW53KHJlZykgJiBtYXNrKSB8IHZhbHVlLCByZWcpOworCQlicmVhazsKKwljYXNlIDMyOgorCQljdHJsX291dGwoKGN0cmxfaW5sKHJlZykgJiBtYXNrKSB8IHZhbHVlLCByZWcpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfZGF0YV9yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgcGlubXV4X2dwaW8gKmdwaW9wID0gJmdwaW9jLT5ncGlvc1tncGlvXTsKIAlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkYXRhX3JlZzsKIAlpbnQgaywgbjsKIAotCWlmICghZW51bV9pbl9yYW5nZShlbnVtX2lkLCAmZ3Bpb2MtPmRhdGEpKQorCWlmICghZW51bV9pbl9yYW5nZShncGlvcC0+ZW51bV9pZCwgJmdwaW9jLT5kYXRhKSkKIAkJcmV0dXJuIC0xOwogCiAJayA9IDA7CkBAIC0xMTMsMTkgKzE1Myw1OCBAQAogCQkJYnJlYWs7CiAKIAkJZm9yIChuID0gMDsgbiA8IGRhdGFfcmVnLT5yZWdfd2lkdGg7IG4rKykgewotCQkJaWYgKGRhdGFfcmVnLT5lbnVtX2lkc1tuXSA9PSBlbnVtX2lkKSB7Ci0JCQkJKmRycCA9IGRhdGFfcmVnOwotCQkJCSpiaXRwID0gbjsKKwkJCWlmIChkYXRhX3JlZy0+ZW51bV9pZHNbbl0gPT0gZ3Bpb3AtPmVudW1faWQpIHsKKwkJCQlncGlvcC0+ZmxhZ3MgJj0gflBJTk1VWF9GTEFHX0RSRUc7CisJCQkJZ3Bpb3AtPmZsYWdzIHw9IChrIDw8IFBJTk1VWF9GTEFHX0RSRUdfU0hJRlQpOworCQkJCWdwaW9wLT5mbGFncyAmPSB+UElOTVVYX0ZMQUdfREJJVDsKKwkJCQlncGlvcC0+ZmxhZ3MgfD0gKG4gPDwgUElOTVVYX0ZMQUdfREJJVF9TSElGVCk7CiAJCQkJcmV0dXJuIDA7Ci0KIAkJCX0KIAkJfQogCQlrKys7CiAJfQogCisJQlVHKCk7CisKIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyB2b2lkIHNldHVwX2RhdGFfcmVncyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jKQoreworCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmRycDsKKwlpbnQgazsKKworCWZvciAoayA9IGdwaW9jLT5maXJzdF9ncGlvOyBrIDw9IGdwaW9jLT5sYXN0X2dwaW87IGsrKykKKwkJc2V0dXBfZGF0YV9yZWcoZ3Bpb2MsIGspOworCisJayA9IDA7CisJd2hpbGUgKDEpIHsKKwkJZHJwID0gZ3Bpb2MtPmRhdGFfcmVncyArIGs7CisKKwkJaWYgKCFkcnAtPnJlZ193aWR0aCkKKwkJCWJyZWFrOworCisJCWRycC0+cmVnX3NoYWRvdyA9IGdwaW9fcmVhZF9yYXdfcmVnKGRycC0+cmVnLCBkcnAtPnJlZ193aWR0aCk7CisJCWsrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2RhdGFfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsIHVuc2lnbmVkIGdwaW8sCisJCQlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICoqZHJwLCBpbnQgKmJpdHApCit7CisJc3RydWN0IHBpbm11eF9ncGlvICpncGlvcCA9ICZncGlvYy0+Z3Bpb3NbZ3Bpb107CisJaW50IGssIG47CisKKwlpZiAoIWVudW1faW5fcmFuZ2UoZ3Bpb3AtPmVudW1faWQsICZncGlvYy0+ZGF0YSkpCisJCXJldHVybiAtMTsKKworCWsgPSAoZ3Bpb3AtPmZsYWdzICYgUElOTVVYX0ZMQUdfRFJFRykgPj4gUElOTVVYX0ZMQUdfRFJFR19TSElGVDsKKwluID0gKGdwaW9wLT5mbGFncyAmIFBJTk1VWF9GTEFHX0RCSVQpID4+IFBJTk1VWF9GTEFHX0RCSVRfU0hJRlQ7CisJKmRycCA9IGdwaW9jLT5kYXRhX3JlZ3MgKyBrOworCSpiaXRwID0gbjsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBnZXRfY29uZmlnX3JlZyhzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLCBwaW5tdXhfZW51bV90IGVudW1faWQsCiAJCQkgIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyAqKmNycCwgaW50ICppbmRleHAsCiAJCQkgIHVuc2lnbmVkIGxvbmcgKipjbnRwKQpAQCAtMTg3LDkgKzI2Niw5IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2NvbmZpZ19yZWcoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywKLQkJCSAgICBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgKmNycCwKLQkJCSAgICBpbnQgaW5kZXgpCitzdGF0aWMgdm9pZCB3cml0ZV9jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCisJCQkgICAgIHN0cnVjdCBwaW5tdXhfY2ZnX3JlZyAqY3JwLAorCQkJICAgICBpbnQgaW5kZXgpCiB7CiAJdW5zaWduZWQgbG9uZyBuY29tYiwgcG9zLCB2YWx1ZTsKIApAQCAtMTk3LDggKzI3Niw3IEBACiAJcG9zID0gaW5kZXggLyBuY29tYjsKIAl2YWx1ZSA9IGluZGV4ICUgbmNvbWI7CiAKLQlyZXR1cm4gcmVhZF93cml0ZV9yZWcoY3JwLT5yZWcsIGNycC0+cmVnX3dpZHRoLAotCQkJICAgICAgY3JwLT5maWVsZF93aWR0aCwgcG9zLCB2YWx1ZSwgMSk7CisJZ3Bpb193cml0ZV9yZWcoY3JwLT5yZWcsIGNycC0+cmVnX3dpZHRoLCBjcnAtPmZpZWxkX3dpZHRoLCBwb3MsIHZhbHVlKTsKIH0KIAogc3RhdGljIGludCBjaGVja19jb25maWdfcmVnKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCkBAIC0yMTEsOCArMjg5LDggQEAKIAlwb3MgPSBpbmRleCAvIG5jb21iOwogCXZhbHVlID0gaW5kZXggJSBuY29tYjsKIAotCWlmIChyZWFkX3dyaXRlX3JlZyhjcnAtPnJlZywgY3JwLT5yZWdfd2lkdGgsCi0JCQkgICBjcnAtPmZpZWxkX3dpZHRoLCBwb3MsIDAsIDApID09IHZhbHVlKQorCWlmIChncGlvX3JlYWRfcmVnKGNycC0+cmVnLCBjcnAtPnJlZ193aWR0aCwKKwkJCSAgY3JwLT5maWVsZF93aWR0aCwgcG9zKSA9PSB2YWx1ZSkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gLTE7CkBAIC0yMjAsOCArMjk4LDggQEAKIAogZW51bSB7IEdQSU9fQ0ZHX0RSWVJVTiwgR1BJT19DRkdfUkVRLCBHUElPX0NGR19GUkVFIH07CiAKLWludCBwaW5tdXhfY29uZmlnX2dwaW8oc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKLQkJICAgICAgIGludCBwaW5tdXhfdHlwZSwgaW50IGNmZ19tb2RlKQorc3RhdGljIGludCBwaW5tdXhfY29uZmlnX2dwaW8oc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbywKKwkJCSAgICAgIGludCBwaW5tdXhfdHlwZSwgaW50IGNmZ19tb2RlKQogewogCXN0cnVjdCBwaW5tdXhfY2ZnX3JlZyAqY3IgPSBOVUxMOwogCXBpbm11eF9lbnVtX3QgZW51bV9pZDsKQEAgLTI4Nyw4ICszNjUsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBHUElPX0NGR19SRVE6Ci0JCQlpZiAod3JpdGVfY29uZmlnX3JlZyhncGlvYywgY3IsIGluZGV4KSAhPSAwKQotCQkJCWdvdG8gb3V0X2VycjsKKwkJCXdyaXRlX2NvbmZpZ19yZWcoZ3Bpb2MsIGNyLCBpbmRleCk7CiAJCQkqY250cCA9ICpjbnRwICsgMTsKIAkJCWJyZWFrOwogCkBAIC0zMDUsOSArMzgyLDE0IEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3Bpb19sb2NrKTsKIAotaW50IF9fZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgc3RydWN0IHBpbm11eF9pbmZvICpjaGlwX3RvX3Bpbm11eChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwKQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgcGlubXV4X2luZm8sIGNoaXApOworfQorCitzdGF0aWMgaW50IHNoX2dwaW9fcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgKmR1bW15OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGksIHJldCwgcGlubXV4X3R5cGU7CkBAIC0zMTksMjkgKzQwMSwzMCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCi0JaWYgKChncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFKSAhPSBQSU5NVVhfVFlQRV9OT05FKQorCWlmICgoZ3Bpb2MtPmdwaW9zW29mZnNldF0uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFKSAhPSBQSU5NVVhfVFlQRV9OT05FKQogCQlnb3RvIGVycl91bmxvY2s7CiAKIAkvKiBzZXR1cCBwaW4gZnVuY3Rpb24gaGVyZSBpZiBubyBkYXRhIGlzIGFzc29jaWF0ZWQgd2l0aCBwaW4gKi8KIAotCWlmIChnZXRfZGF0YV9yZWcoZ3Bpb2MsIGdwaW8sICZkdW1teSwgJmkpICE9IDApCisJaWYgKGdldF9kYXRhX3JlZyhncGlvYywgb2Zmc2V0LCAmZHVtbXksICZpKSAhPSAwKQogCQlwaW5tdXhfdHlwZSA9IFBJTk1VWF9UWVBFX0ZVTkNUSU9OOwogCWVsc2UKIAkJcGlubXV4X3R5cGUgPSBQSU5NVVhfVFlQRV9HUElPOwogCiAJaWYgKHBpbm11eF90eXBlID09IFBJTk1VWF9UWVBFX0ZVTkNUSU9OKSB7Ci0JCWlmIChwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIGdwaW8sCisJCWlmIChwaW5tdXhfY29uZmlnX2dwaW8oZ3Bpb2MsIG9mZnNldCwKIAkJCQkgICAgICAgcGlubXV4X3R5cGUsCiAJCQkJICAgICAgIEdQSU9fQ0ZHX0RSWVJVTikgIT0gMCkKIAkJCWdvdG8gZXJyX3VubG9jazsKIAotCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBncGlvLAorCQlpZiAocGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBvZmZzZXQsCiAJCQkJICAgICAgIHBpbm11eF90eXBlLAogCQkJCSAgICAgICBHUElPX0NGR19SRVEpICE9IDApCiAJCQlCVUcoKTsKIAl9CiAKLQlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgPSBwaW5tdXhfdHlwZTsKKwlncGlvYy0+Z3Bpb3Nbb2Zmc2V0XS5mbGFncyAmPSB+UElOTVVYX0ZMQUdfVFlQRTsKKwlncGlvYy0+Z3Bpb3Nbb2Zmc2V0XS5mbGFncyB8PSBwaW5tdXhfdHlwZTsKIAogCXJldCA9IDA7CiAgZXJyX3VubG9jazoKQEAgLTM0OSwxMSArNDMyLDEwIEBACiAgZXJyX291dDoKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChfX2dwaW9fcmVxdWVzdCk7CiAKLXZvaWQgZ3Bpb19mcmVlKHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgdm9pZCBzaF9ncGlvX2ZyZWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7CisJc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGNoaXBfdG9fcGlubXV4KGNoaXApOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHBpbm11eF90eXBlOwogCkBAIC0zNjIsMjAgKzQ0NCwyMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwogCi0JcGlubXV4X3R5cGUgPSBncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgJiBQSU5NVVhfRkxBR19UWVBFOwotCXBpbm11eF9jb25maWdfZ3BpbyhncGlvYywgZ3BpbywgcGlubXV4X3R5cGUsIEdQSU9fQ0ZHX0ZSRUUpOwotCWdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyA9IFBJTk1VWF9UWVBFX05PTkU7CisJcGlubXV4X3R5cGUgPSBncGlvYy0+Z3Bpb3Nbb2Zmc2V0XS5mbGFncyAmIFBJTk1VWF9GTEFHX1RZUEU7CisJcGlubXV4X2NvbmZpZ19ncGlvKGdwaW9jLCBvZmZzZXQsIHBpbm11eF90eXBlLCBHUElPX0NGR19GUkVFKTsKKwlncGlvYy0+Z3Bpb3Nbb2Zmc2V0XS5mbGFncyAmPSB+UElOTVVYX0ZMQUdfVFlQRTsKKwlncGlvYy0+Z3Bpb3Nbb2Zmc2V0XS5mbGFncyB8PSBQSU5NVVhfVFlQRV9OT05FOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3Bpb19sb2NrLCBmbGFncyk7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fZnJlZSk7CiAKIHN0YXRpYyBpbnQgcGlubXV4X2RpcmVjdGlvbihzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jLAogCQkJICAgIHVuc2lnbmVkIGdwaW8sIGludCBuZXdfcGlubXV4X3R5cGUpCiB7Ci0JaW50IHJldCwgcGlubXV4X3R5cGU7CisJaW50IHBpbm11eF90eXBlOworCWludCByZXQgPSAtRUlOVkFMOwogCi0JcmV0ID0gLUVJTlZBTDsKKwlpZiAoIWdwaW9jKQorCQlnb3RvIGVycl9vdXQ7CisKIAlwaW5tdXhfdHlwZSA9IGdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyAmIFBJTk1VWF9GTEFHX1RZUEU7CiAKIAlzd2l0Y2ggKHBpbm11eF90eXBlKSB7CkBAIC00MDEsMTAyICs0ODYsOTkgQEAKIAkJCSAgICAgICBHUElPX0NGR19SRVEpICE9IDApCiAJCUJVRygpOwogCi0JZ3Bpb2MtPmdwaW9zW2dwaW9dLmZsYWdzID0gbmV3X3Bpbm11eF90eXBlOworCWdwaW9jLT5ncGlvc1tncGlvXS5mbGFncyAmPSB+UElOTVVYX0ZMQUdfVFlQRTsKKwlncGlvYy0+Z3Bpb3NbZ3Bpb10uZmxhZ3MgfD0gbmV3X3Bpbm11eF90eXBlOwogCiAJcmV0ID0gMDsKICBlcnJfb3V0OgogCXJldHVybiByZXQ7CiB9CiAKLWludCBncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQorc3RhdGljIGludCBzaF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7Ci0Jc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gY2hpcF90b19waW5tdXgoY2hpcCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCWlmICghZ3Bpb2MpCi0JCWdvdG8gZXJyX291dDsKKwlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIGdwaW8sIFBJTk1VWF9UWVBFX0lOUFVUKTsKKwlyZXQgPSBwaW5tdXhfZGlyZWN0aW9uKGdwaW9jLCBvZmZzZXQsIFBJTk1VWF9UWVBFX0lOUFVUKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncGlvX2xvY2ssIGZsYWdzKTsKLSBlcnJfb3V0OgorCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19kaXJlY3Rpb25faW5wdXQpOwogCi1zdGF0aWMgaW50IF9fZ3Bpb19nZXRfc2V0X3ZhbHVlKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCi0JCQkJdW5zaWduZWQgZ3BpbywgaW50IHZhbHVlLAotCQkJCWludCBkb193cml0ZSkKK3N0YXRpYyB2b2lkIHNoX2dwaW9fc2V0X3ZhbHVlKHN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MsCisJCQkgICAgIHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKIHsKIAlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkciA9IE5VTEw7CiAJaW50IGJpdCA9IDA7CiAKLQlpZiAoZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHIsICZiaXQpICE9IDApCisJaWYgKCFncGlvYyB8fCBnZXRfZGF0YV9yZWcoZ3Bpb2MsIGdwaW8sICZkciwgJmJpdCkgIT0gMCkKIAkJQlVHKCk7CiAJZWxzZQotCQl2YWx1ZSA9IHJlYWRfd3JpdGVfcmVnKGRyLT5yZWcsIGRyLT5yZWdfd2lkdGgsCi0JCQkJICAgICAgIDEsIGJpdCwgISF2YWx1ZSwgZG9fd3JpdGUpOwotCi0JcmV0dXJuIHZhbHVlOworCQlncGlvX3dyaXRlX2JpdChkciwgYml0LCB2YWx1ZSk7CiB9CiAKLWludCBncGlvX2RpcmVjdGlvbl9vdXRwdXQodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIGludCBzaF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCQkJCSAgICBpbnQgdmFsdWUpCiB7Ci0Jc3RydWN0IHBpbm11eF9pbmZvICpncGlvYyA9IGdwaW9fY29udHJvbGxlcihncGlvKTsKKwlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gY2hpcF90b19waW5tdXgoY2hpcCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgcmV0OwogCi0JaWYgKCFncGlvYykKLQkJZ290byBlcnJfb3V0OwotCisJc2hfZ3Bpb19zZXRfdmFsdWUoZ3Bpb2MsIG9mZnNldCwgdmFsdWUpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQlfX2dwaW9fZ2V0X3NldF92YWx1ZShncGlvYywgZ3BpbywgdmFsdWUsIDEpOwotCXJldCA9IHBpbm11eF9kaXJlY3Rpb24oZ3Bpb2MsIGdwaW8sIFBJTk1VWF9UWVBFX09VVFBVVCk7CisJcmV0ID0gcGlubXV4X2RpcmVjdGlvbihncGlvYywgb2Zmc2V0LCBQSU5NVVhfVFlQRV9PVVRQVVQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotIGVycl9vdXQ6CisKIAlyZXR1cm4gcmV0OwogfQotRVhQT1JUX1NZTUJPTChncGlvX2RpcmVjdGlvbl9vdXRwdXQpOwogCi1pbnQgZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKK3N0YXRpYyBpbnQgc2hfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IHBpbm11eF9pbmZvICpncGlvYywgdW5zaWduZWQgZ3BpbykKIHsKLQlzdHJ1Y3QgcGlubXV4X2luZm8gKmdwaW9jID0gZ3Bpb19jb250cm9sbGVyKGdwaW8pOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHZhbHVlID0gMDsKKwlzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnICpkciA9IE5VTEw7CisJaW50IGJpdCA9IDA7CiAKLQlpZiAoIWdwaW9jKQorCWlmICghZ3Bpb2MgfHwgZ2V0X2RhdGFfcmVnKGdwaW9jLCBncGlvLCAmZHIsICZiaXQpICE9IDApIHsKIAkJQlVHKCk7Ci0JZWxzZSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZncGlvX2xvY2ssIGZsYWdzKTsKLQkJdmFsdWUgPSBfX2dwaW9fZ2V0X3NldF92YWx1ZShncGlvYywgZ3BpbywgMCwgMCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gdmFsdWU7CisJcmV0dXJuIGdwaW9fcmVhZF9yZWcoZHItPnJlZywgZHItPnJlZ193aWR0aCwgMSwgYml0KTsKIH0KLUVYUE9SVF9TWU1CT0woZ3Bpb19nZXRfdmFsdWUpOwogCi12b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2hfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBwaW5tdXhfaW5mbyAqZ3Bpb2MgPSBncGlvX2NvbnRyb2xsZXIoZ3Bpbyk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghZ3Bpb2MpCi0JCUJVRygpOwotCWVsc2UgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3Bpb19sb2NrLCBmbGFncyk7Ci0JCV9fZ3Bpb19nZXRfc2V0X3ZhbHVlKGdwaW9jLCBncGlvLCB2YWx1ZSwgMSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwaW9fbG9jaywgZmxhZ3MpOwotCX0KKwlyZXR1cm4gc2hfZ3Bpb19nZXRfdmFsdWUoY2hpcF90b19waW5tdXgoY2hpcCksIG9mZnNldCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGdwaW9fc2V0X3ZhbHVlKTsKKworc3RhdGljIHZvaWQgc2hfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc2hfZ3Bpb19zZXRfdmFsdWUoY2hpcF90b19waW5tdXgoY2hpcCksIG9mZnNldCwgdmFsdWUpOworfQogCiBpbnQgcmVnaXN0ZXJfcGlubXV4KHN0cnVjdCBwaW5tdXhfaW5mbyAqcGlwKQogewotCXJlZ2lzdGVyZWRfZ3BpbyA9IHBpcDsKLQlwcl9pbmZvKCJwaW5tdXg6ICVzIGhhbmRsaW5nIGdwaW8gJWQgLT4gJWRcbiIsCisJc3RydWN0IGdwaW9fY2hpcCAqY2hpcCA9ICZwaXAtPmNoaXA7CisKKwlwcl9pbmZvKCJzaCBwaW5tdXg6ICVzIGhhbmRsaW5nIGdwaW8gJWQgLT4gJWRcbiIsCiAJCXBpcC0+bmFtZSwgcGlwLT5maXJzdF9ncGlvLCBwaXAtPmxhc3RfZ3Bpbyk7CiAKLQlyZXR1cm4gMDsKKwlzZXR1cF9kYXRhX3JlZ3MocGlwKTsKKworCWNoaXAtPnJlcXVlc3QgPSBzaF9ncGlvX3JlcXVlc3Q7CisJY2hpcC0+ZnJlZSA9IHNoX2dwaW9fZnJlZTsKKwljaGlwLT5kaXJlY3Rpb25faW5wdXQgPSBzaF9ncGlvX2RpcmVjdGlvbl9pbnB1dDsKKwljaGlwLT5nZXQgPSBzaF9ncGlvX2dldDsKKwljaGlwLT5kaXJlY3Rpb25fb3V0cHV0ID0gc2hfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0OworCWNoaXAtPnNldCA9IHNoX2dwaW9fc2V0OworCisJV0FSTl9PTihwaXAtPmZpcnN0X2dwaW8gIT0gMCk7IC8qIG5lZWRzIHRlc3RpbmcgKi8KKworCWNoaXAtPmxhYmVsID0gcGlwLT5uYW1lOworCWNoaXAtPm93bmVyID0gVEhJU19NT0RVTEU7CisJY2hpcC0+YmFzZSA9IHBpcC0+Zmlyc3RfZ3BpbzsKKwljaGlwLT5uZ3BpbyA9IChwaXAtPmxhc3RfZ3BpbyAtIHBpcC0+Zmlyc3RfZ3BpbykgKyAxOworCisJcmV0dXJuIGdwaW9jaGlwX2FkZChjaGlwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lycS5jIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKaW5kZXggNjRiNzY5MC4uM2YxMzcyZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAkJCWdvdG8gdW5sb2NrOwogCQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsaSk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+bmFtZSk7CiAJCXNlcV9wcmludGYocCwgIi0lLThzIiwgaXJxX2Rlc2NbaV0ubmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJfQogI2VuZGlmCiAKLQlpcnEgPSBpcnFfZGVtdXgoZXZ0MmlycShpcnEpKTsKKwlpcnEgPSBpcnFfZGVtdXgoaW50Y19ldnQyaXJxKGlycSkpOwogCiAjaWZkZWYgQ09ORklHX0lSUVNUQUNLUwogCWN1cmN0eCA9ICh1bmlvbiBpcnFfY3R4ICopY3VycmVudF90aHJlYWRfaW5mbygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDk0ZGY1NmIuLjdlYTI3MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTE0LDIxICsxNCwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvbnVtYS5oPgorI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAotdHlwZWRlZiBOT1JFVF9UWVBFIHZvaWQgKCpyZWxvY2F0ZV9uZXdfa2VybmVsX3QpKAotCQkJCXVuc2lnbmVkIGxvbmcgaW5kaXJlY3Rpb25fcGFnZSwKLQkJCQl1bnNpZ25lZCBsb25nIHJlYm9vdF9jb2RlX2J1ZmZlciwKLQkJCQl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MsCi0JCQkJdW5zaWduZWQgbG9uZyB2YnJfcmVnKSBBVFRSSUJfTk9SRVQ7Cit0eXBlZGVmIHZvaWQgKCpyZWxvY2F0ZV9uZXdfa2VybmVsX3QpKHVuc2lnbmVkIGxvbmcgaW5kaXJlY3Rpb25fcGFnZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHJlYm9vdF9jb2RlX2J1ZmZlciwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHJlc3MpOwogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciByZWxvY2F0ZV9uZXdfa2VybmVsW107CiBleHRlcm4gY29uc3QgdW5zaWduZWQgaW50IHJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZTsKIGV4dGVybiB2b2lkICpnZGJfdmJyX3ZlY3RvcjsKK2V4dGVybiB2b2lkICp2YnJfYmFzZTsKIAogdm9pZCBtYWNoaW5lX3NodXRkb3duKHZvaWQpCiB7CkBAIC00NSw2ICs0NiwxMiBAQAogICovCiBpbnQgbWFjaGluZV9rZXhlY19wcmVwYXJlKHN0cnVjdCBraW1hZ2UgKmltYWdlKQogeworCS8qIG9sZGVyIHZlcnNpb25zIG9mIGtleGVjLXRvb2xzIGFyZSBwYXNzaW5nCisJICogdGhlIHpJbWFnZSBlbnRyeSBwb2ludCBhcyBhIHZpcnR1YWwgYWRkcmVzcy4KKwkgKi8KKwlpZiAoaW1hZ2UtPnN0YXJ0ICE9IFBIWVNBRERSKGltYWdlLT5zdGFydCkpCisJCXJldHVybiAtRUlOVkFMOyAvKiB1cGdyYWRlIHlvdXIga2V4ZWMtdG9vbHMgKi8KKwogCXJldHVybiAwOwogfQogCkBAIC03MywxNyArODAsMzMgQEAKICAqLwogdm9pZCBtYWNoaW5lX2tleGVjKHN0cnVjdCBraW1hZ2UgKmltYWdlKQogewotCiAJdW5zaWduZWQgbG9uZyBwYWdlX2xpc3Q7CiAJdW5zaWduZWQgbG9uZyByZWJvb3RfY29kZV9idWZmZXI7Ci0JdW5zaWduZWQgbG9uZyB2YnJfcmVnOwogCXJlbG9jYXRlX25ld19rZXJuZWxfdCBybms7CisJdW5zaWduZWQgbG9uZyBlbnRyeTsKKwl1bnNpZ25lZCBsb25nICpwdHI7CisJaW50IHNhdmVfZnRyYWNlX2VuYWJsZWQ7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19TSF9TVEFOREFSRF9CSU9TKQotCXZicl9yZWcgPSAoKHVuc2lnbmVkIGxvbmcgKWdkYl92YnJfdmVjdG9yKSAtIDB4MTAwOwotI2Vsc2UKLQl2YnJfcmVnID0gMHg4MDAwMDAwMDsgIC8vIGR1bW15CisJLyoKKwkgKiBOaWNrZWQgZnJvbSB0aGUgbWlwcyB2ZXJzaW9uIG9mIG1hY2hpbmVfa2V4ZWMoKToKKwkgKiBUaGUgZ2VuZXJpYyBrZXhlYyBjb2RlIGJ1aWxkcyBhIHBhZ2UgbGlzdCB3aXRoIHBoeXNpY2FsCisJICogYWRkcmVzc2VzLiBVc2UgcGh5c190b192aXJ0KCkgdG8gY29udmVydCB0aGVtIHRvIHZpcnR1YWwuCisJICovCisJZm9yIChwdHIgPSAmaW1hZ2UtPmhlYWQ7IChlbnRyeSA9ICpwdHIpICYmICEoZW50cnkgJiBJTkRfRE9ORSk7CisJICAgICBwdHIgPSAoZW50cnkgJiBJTkRfSU5ESVJFQ1RJT04pID8KKwkgICAgICAgcGh5c190b192aXJ0KGVudHJ5ICYgUEFHRV9NQVNLKSA6IHB0ciArIDEpIHsKKwkJaWYgKCpwdHIgJiBJTkRfU09VUkNFIHx8ICpwdHIgJiBJTkRfSU5ESVJFQ1RJT04gfHwKKwkJICAgICpwdHIgJiBJTkRfREVTVElOQVRJT04pCisJCQkqcHRyID0gKHVuc2lnbmVkIGxvbmcpIHBoeXNfdG9fdmlydCgqcHRyKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAorCWlmIChpbWFnZS0+cHJlc2VydmVfY29udGV4dCkKKwkJc2F2ZV9wcm9jZXNzb3Jfc3RhdGUoKTsKICNlbmRpZgorCisJc2F2ZV9mdHJhY2VfZW5hYmxlZCA9IF9fZnRyYWNlX2VuYWJsZWRfc2F2ZSgpOworCiAJLyogSW50ZXJydXB0cyBhcmVuJ3QgYWNjZXB0YWJsZSB3aGlsZSB3ZSByZWJvb3QgKi8KIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCkBAIC05NywxMiArMTIwLDM3IEBACiAJbWVtY3B5KCh2b2lkICopcmVib290X2NvZGVfYnVmZmVyLCByZWxvY2F0ZV9uZXdfa2VybmVsLAogCQkJCQkJcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplKTsKIAotICAgICAgICBrZXhlY19pbmZvKGltYWdlKTsKKwlrZXhlY19pbmZvKGltYWdlKTsKIAlmbHVzaF9jYWNoZV9hbGwoKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpCisJYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHZiciIgOgorCQkgICAgIDogInIiICgoKHVuc2lnbmVkIGxvbmcpIGdkYl92YnJfdmVjdG9yKSAtIDB4MTAwKQorCQkgICAgIDogIm1lbW9yeSIpOworI2VuZGlmCisKIAkvKiBub3cgY2FsbCBpdCAqLwogCXJuayA9IChyZWxvY2F0ZV9uZXdfa2VybmVsX3QpIHJlYm9vdF9jb2RlX2J1ZmZlcjsKLQkoKnJuaykocGFnZV9saXN0LCByZWJvb3RfY29kZV9idWZmZXIsIFAyU0VHQUREUihpbWFnZS0+c3RhcnQpLCB2YnJfcmVnKTsKKwkoKnJuaykocGFnZV9saXN0LCByZWJvb3RfY29kZV9idWZmZXIsCisJICAgICAgICh1bnNpZ25lZCBsb25nKXBoeXNfdG9fdmlydChpbWFnZS0+c3RhcnQpKTsKKworI2lmZGVmIENPTkZJR19LRVhFQ19KVU1QCisJYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHZiciIgOiA6ICJyIiAoJnZicl9iYXNlKSA6ICJtZW1vcnkiKTsKKworCWlmIChpbWFnZS0+cHJlc2VydmVfY29udGV4dCkKKwkJcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUoKTsKKworCS8qIENvbnZlcnQgcGFnZSBsaXN0IGJhY2sgdG8gcGh5c2ljYWwgYWRkcmVzc2VzLCB3aGF0IGEgbWVzcy4gKi8KKwlmb3IgKHB0ciA9ICZpbWFnZS0+aGVhZDsgKGVudHJ5ID0gKnB0cikgJiYgIShlbnRyeSAmIElORF9ET05FKTsKKwkgICAgIHB0ciA9ICgqcHRyICYgSU5EX0lORElSRUNUSU9OKSA/CisJICAgICAgIHBoeXNfdG9fdmlydCgqcHRyICYgUEFHRV9NQVNLKSA6IHB0ciArIDEpIHsKKwkJaWYgKCpwdHIgJiBJTkRfU09VUkNFIHx8ICpwdHIgJiBJTkRfSU5ESVJFQ1RJT04gfHwKKwkJICAgICpwdHIgJiBJTkRfREVTVElOQVRJT04pCisJCQkqcHRyID0gdmlydF90b19waHlzKCpwdHIpOworCX0KKyNlbmRpZgorCisJX19mdHJhY2VfZW5hYmxlZF9yZXN0b3JlKHNhdmVfZnRyYWNlX2VuYWJsZWQpOwogfQogCiB2b2lkIGFyY2hfY3Jhc2hfc2F2ZV92bWNvcmVpbmZvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUyBiL2FyY2gvc2gva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCmluZGV4IGM2NmNiMzIuLmZjYzk5MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCisrKyBiL2FyY2gvc2gva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCkBAIC00LDYgKzQsOCBAQAogICoKICAqIExBTkRJU0svc2g0IGlzIHN1cHBvcnRlZC4gTWF5YmUsIFNIIGFyY2h0ZWN0dXJlIHdvcmtzIHdlbGwuCiAgKgorICogMjAwOS0wMy0xOCBNYWdudXMgRGFtbSAtIEFkZGVkIEtleGVjIEp1bXAgc3VwcG9ydAorICoKICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAogICogVmVyc2lvbiAyLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KICAqLwpAQCAtMTYsMjMgKzE4LDE0MSBAQAogCS8qIHI0ID0gaW5kaXJlY3Rpb25fcGFnZSAgICovCiAJLyogcjUgPSByZWJvb3RfY29kZV9idWZmZXIgKi8KIAkvKiByNiA9IHN0YXJ0X2FkZHJlc3MgICAgICAqLwotCS8qIHI3ID0gdmJyX3JlZyAgICAgICAgICAgICovCiAKLQltb3YubAkxMGYscjgJICAvKiBQQUdFX1NJWkUgKi8KLQltb3YubAkxMWYscjkgICAgLyogUDJTRUcgKi8KKwltb3YubAkxMGYsIHIwCQkvKiBQQUdFX1NJWkUgKi8KKwlhZGQJcjUsIHIwCQkvKiBzZXR1cCBuZXcgc3RhY2sgYXQgZW5kIG9mIGNvbnRyb2wgcGFnZSAqLwogCi0JLyogIHN0YWNrIHNldHRpbmcgKi8KLQlhZGQJcjgscjUKLQltb3YJcjUscjE1CisJLyogc2F2ZSByMTUtPnI4IHRvIG5ldyBzdGFjayAqLworCW1vdi5sCXIxNSwgQC1yMAorCW1vdglyMCwgcjE1CisJbW92LmwJcjE0LCBALXIxNQorCW1vdi5sCXIxMywgQC1yMTUKKwltb3YubAlyMTIsIEAtcjE1CisJbW92LmwJcjExLCBALXIxNQorCW1vdi5sCXIxMCwgQC1yMTUKKwltb3YubAlyOSwgQC1yMTUKKwltb3YubAlyOCwgQC1yMTUKIAorCS8qIHNhdmUgb3RoZXIgcmFuZG9tIHJlZ2lzdGVycyAqLworCXN0cy5sCW1hY2wsIEAtcjE1CisJc3RzLmwJbWFjaCwgQC1yMTUKKwlzdGMubAlnYnIsIEAtcjE1CisJc3RjLmwJc3NyLCBALXIxNQorCXN0Yy5sCXNyLCBALXIxNQorCXN0cy5sCXByLCBALXIxNQorCXN0Yy5sCXNwYywgQC1yMTUKKworCS8qIHN3aXRjaCB0byBiYW5rMSBhbmQgc2F2ZSByNy0+cjAgKi8KKwltb3YubAkxMmYsIHI5CisJc3RjCXNyLCByOAorCW9yCXI5LCByOAorCWxkYwlyOCwgc3IKKwltb3YubAlyNywgQC1yMTUKKwltb3YubAlyNiwgQC1yMTUKKwltb3YubAlyNSwgQC1yMTUKKwltb3YubAlyNCwgQC1yMTUKKwltb3YubAlyMywgQC1yMTUKKwltb3YubAlyMiwgQC1yMTUKKwltb3YubAlyMSwgQC1yMTUKKwltb3YubAlyMCwgQC1yMTUKKworCS8qIHN3aXRjaCB0byBiYW5rMCBhbmQgc2F2ZSByNy0+cjAgKi8KKwltb3YubAkxMmYsIHI5CisJbm90CXI5LCByOQorCXN0YwlzciwgcjgKKwlhbmQJcjksIHI4CisJbGRjCXI4LCBzcgorCW1vdi5sCXI3LCBALXIxNQorCW1vdi5sCXI2LCBALXIxNQorCW1vdi5sCXI1LCBALXIxNQorCW1vdi5sCXI0LCBALXIxNQorCW1vdi5sCXIzLCBALXIxNQorCW1vdi5sCXIyLCBALXIxNQorCW1vdi5sCXIxLCBALXIxNQorCW1vdi5sCXIwLCBALXIxNQorCisJbW92LmwJcjQsIEAtcjE1CS8qIHNhdmUgaW5kaXJlY3Rpb24gcGFnZSBhZ2FpbiAqLworCisJYnNyCXN3YXBfcGFnZXMJLyogc3dhcCBwYWdlcyBiZWZvcmUganVtcGluZyB0byBuZXcga2VybmVsICovCisJIG5vcAorCisJbW92YQkxMWYsIHIwCisJbW92LmwJcjE1LCBAcjAJLyogc2F2ZSBwb2ludGVyIHRvIHN0YWNrICovCisKKwlqc3IJQHI2CQkvKiBoYW5kIG92ZXIgY29udHJvbCB0byBuZXcga2VybmVsICovCisJIG5vcAorCisJbW92LmwJMTFmLCByMTUJLyogZ2V0IHBvaW50ZXIgdG8gc3RhY2sgKi8KKwltb3YubAlAcjE1KywgcjQJLyogcmVzdG9yZSByNCB0byBnZXQgaW5kaXJlY3Rpb24gcGFnZSAqLworCisJYnNyCXN3YXBfcGFnZXMJLyogc3dhcCBwYWdlcyBiYWNrIHRvIHByZXZpb3VzIHN0YXRlICovCisJIG5vcAorCisJLyogbWFrZSBzdXJlIGJhbmswIGlzIGFjdGl2ZSBhbmQgcmVzdG9yZSByMC0+cjcgKi8KKwltb3YubAkxMmYsIHI5CisJbm90CXI5LCByOQorCXN0YwlzciwgcjgKKwlhbmQJcjksIHI4CisJbGRjCXI4LCBzcgorCW1vdi5sCUByMTUrLCByMAorCW1vdi5sCUByMTUrLCByMQorCW1vdi5sCUByMTUrLCByMgorCW1vdi5sCUByMTUrLCByMworCW1vdi5sCUByMTUrLCByNAorCW1vdi5sCUByMTUrLCByNQorCW1vdi5sCUByMTUrLCByNgorCW1vdi5sCUByMTUrLCByNworCisJLyogc3dpdGNoIHRvIGJhbmsxIGFuZCByZXN0b3JlIHIwLT5yNyAqLworCW1vdi5sCTEyZiwgcjkKKwlzdGMJc3IsIHI4CisJb3IJcjksIHI4CisJbGRjCXI4LCBzcgorCW1vdi5sCUByMTUrLCByMAorCW1vdi5sCUByMTUrLCByMQorCW1vdi5sCUByMTUrLCByMgorCW1vdi5sCUByMTUrLCByMworCW1vdi5sCUByMTUrLCByNAorCW1vdi5sCUByMTUrLCByNQorCW1vdi5sCUByMTUrLCByNgorCW1vdi5sCUByMTUrLCByNworCisJLyogc3dpdGNoIGJhY2sgdG8gYmFuazAgKi8KKwltb3YubAkxMmYsIHI5CisJbm90CXI5LCByOQorCXN0YwlzciwgcjgKKwlhbmQJcjksIHI4CisJbGRjCXI4LCBzcgorCisJLyogcmVzdG9yZSBvdGhlciByYW5kb20gcmVnaXN0ZXJzICovCisJbGRjLmwJQHIxNSssIHNwYworCWxkcy5sCUByMTUrLCBwcgorCWxkYy5sCUByMTUrLCBzcgorCWxkYy5sCUByMTUrLCBzc3IKKwlsZGMubAlAcjE1KywgZ2JyCisJbGRzLmwJQHIxNSssIG1hY2gKKwlsZHMubAlAcjE1KywgbWFjbAorCisJLyogcmVzdG9yZSByOC0+cjE1ICovCisJbW92LmwJQHIxNSssIHI4CisJbW92LmwJQHIxNSssIHI5CisJbW92LmwJQHIxNSssIHIxMAorCW1vdi5sCUByMTUrLCByMTEKKwltb3YubAlAcjE1KywgcjEyCisJbW92LmwJQHIxNSssIHIxMworCW1vdi5sCUByMTUrLCByMTQKKwltb3YubAlAcjE1KywgcjE1CisJcnRzCisJIG5vcAorCitzd2FwX3BhZ2VzOgogCWJyYQkxZgotCW1vdglyNCxyMAkgIC8qIGNtZCA9IGluZGlyZWN0aW9uX3BhZ2UgKi8KKwkgbW92CXI0LHIwCSAgLyogY21kID0gaW5kaXJlY3Rpb25fcGFnZSAqLwogMDoKIAltb3YubAlAcjQrLHIwCSAgLyogY21kID0gKmluZCsrICovCiAKLTE6CS8qIGFkZHIgPSAoY21kIHwgUDJTRUcpICYgMHhmZmZmZmZmMCAqLworMToJLyogYWRkciA9IGNtZCAmIDB4ZmZmZmZmZjAgKi8KIAltb3YJcjAscjIKLQlvcglyOSxyMgogCW1vdgkjLTE2LHIxCiAJYW5kCXIxLHIyCiAKQEAgLTQwLDU3ICsxNjAsNzAgQEAKIAl0c3QJIzEscjAKIAlidAkyZgogCWJyYQkwYgotCW1vdglyMixyNQorCSBtb3YJcjIscjUKIAogMjoJLyogZWxzZSBpZihjbWQgJiBJTkRfSU5ESVJFQ1RJT04pIGluZCA9IGFkZHIgICovCiAJdHN0CSMyLHIwCiAJYnQJM2YKIAlicmEJMGIKLQltb3YJcjIscjQKKwkgbW92CXIyLHI0CiAKLTM6CS8qIGVsc2UgaWYoY21kICYgSU5EX0RPTkUpIGdvdG8gNiAgKi8KKzM6CS8qIGVsc2UgaWYoY21kICYgSU5EX0RPTkUpIHJldHVybiAqLwogCXRzdAkjNCxyMAogCWJ0CTRmCi0JYnJhCTZmCi0Jbm9wCisJcnRzCisJIG5vcAogCiA0OgkvKiBlbHNlIGlmKGNtZCAmIElORF9TT1VSQ0UpIG1lbWNweShkc3QsYWRkcixQQUdFX1NJWkUpICovCiAJdHN0CSM4LHIwCiAJYnQJMGIKIAotCW1vdglyOCxyMworCW1vdi5sCTEwZixyMwkgIC8qIFBBR0VfU0laRSAqLwogCXNobHIyCXIzCiAJc2hscjIJcjMKIDU6CiAJZHQJcjMKLQltb3YubAlAcjIrLHIxICAgLyogIDE2biswICovCi0JbW92LmwJcjEsQHI1Ci0JYWRkCSM0LHI1Ci0JbW92LmwJQHIyKyxyMQkgIC8qICAxNm4rNCAqLwotCW1vdi5sCXIxLEByNQotCWFkZAkjNCxyNQotCW1vdi5sCUByMisscjEgICAvKiAgMTZuKzggKi8KLQltb3YubAlyMSxAcjUKLQlhZGQJIzQscjUKLQltb3YubAlAcjIrLHIxICAgLyogIDE2bisxMiAqLwotCW1vdi5sCXIxLEByNQotCWFkZAkjNCxyNQorCisJLyogcmVndWxhciBrZXhlYyBqdXN0IG92ZXJ3cml0ZXMgdGhlIGRlc3RpbmF0aW9uIHBhZ2UKKwkgKiB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgc291cmNlIHBhZ2UuCisJICogZm9yIHRoZSBrZXhlYyBqdW1wIGNhc2Ugd2UgbmVlZCB0byBzd2FwIHRoZSBjb250ZW50cworCSAqIG9mIHRoZSBwYWdlcy4KKwkgKiB0byBrZWVwIGl0IHNpbXBsZSBzd2FwIHRoZSBjb250ZW50cyBmb3IgYm90aCBjYXNlcy4KKwkgKi8KKwltb3YubAlAKDAsIHIyKSwgcjgKKwltb3YubAlAKDAsIHI1KSwgcjEKKwltb3YubAlyOCwgQCgwLCByNSkKKwltb3YubAlyMSwgQCgwLCByMikKKworCW1vdi5sCUAoNCwgcjIpLCByOAorCW1vdi5sCUAoNCwgcjUpLCByMQorCW1vdi5sCXI4LCBAKDQsIHI1KQorCW1vdi5sCXIxLCBAKDQsIHIyKQorCisJbW92LmwJQCg4LCByMiksIHI4CisJbW92LmwJQCg4LCByNSksIHIxCisJbW92LmwJcjgsIEAoOCwgcjUpCisJbW92LmwJcjEsIEAoOCwgcjIpCisKKwltb3YubAlAKDEyLCByMiksIHI4CisJbW92LmwJQCgxMiwgcjUpLCByMQorCW1vdi5sCXI4LCBAKDEyLCByNSkKKwltb3YubAlyMSwgQCgxMiwgcjIpCisKKwlhZGQJIzE2LHI1CisJYWRkCSMxNixyMgogCWJmCTViCiAKIAlicmEJMGIKLQlub3AKLTY6Ci0jaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKLQlsZGMgICByNywgdmJyCi0jZW5kaWYKLQlqbXAgQHI2Ci0Jbm9wCisJIG5vcAogCiAJLmFsaWduIDIKIDEwOgogCS5sb25nCVBBR0VfU0laRQogMTE6Ci0JLmxvbmcJUDJTRUcKKwkubG9uZwkwCisxMjoKKwkubG9uZwkweDIwMDAwMDAwICEgUkI9MQogCiByZWxvY2F0ZV9uZXdfa2VybmVsX2VuZDoKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc2gva2VybmVsL3NldHVwLmMKaW5kZXggMzcwZDJjZi4uMjRjNjAyNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCkBAIC00MzIsNiArNDMyLDcgQEAKIAlbQ1BVX1NINzc2M10JPSAiU0g3NzYzIiwJW0NQVV9TSDc3NzBdCT0gIlNINzc3MCIsCiAJW0NQVV9TSDc3ODBdCT0gIlNINzc4MCIsCVtDUFVfU0g3NzgxXQk9ICJTSDc3ODEiLAogCVtDUFVfU0g3MzQzXQk9ICJTSDczNDMiLAlbQ1BVX1NINzc4NV0JPSAiU0g3Nzg1IiwKKwlbQ1BVX1NINzc4Nl0JPSAiU0g3Nzg2IiwKIAlbQ1BVX1NINzcyMl0JPSAiU0g3NzIyIiwJW0NQVV9TSFgzXQk9ICJTSC1YMyIsCiAJW0NQVV9TSDVfMTAxXQk9ICJTSDUtMTAxIiwJW0NQVV9TSDVfMTAzXQk9ICJTSDUtMTAzIiwKIAlbQ1BVX01YR10JPSAiTVgtRyIsCVtDUFVfU0g3NzIzXQk9ICJTSDc3MjMiLApAQCAtNDQ4LDcgKzQ0OSw3IEBACiAvKiBTeW1ib2xpYyBDUFUgZmxhZ3MsIGtlZXAgaW4gc3luYyB3aXRoIGFzbS9jcHUtZmVhdHVyZXMuaCAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmNwdV9mbGFnc1tdID0gewogCSJub25lIiwgImZwdSIsICJwMmZsdXNoIiwgIm1tdWFzc29jIiwgImRzcCIsICJwZXJmY3RyIiwKLQkicHRlYSIsICJsbHNjIiwgImwyIiwgIm9wMzIiLCBOVUxMCisJInB0ZWEiLCAibGxzYyIsICJsMiIsICJvcDMyIiwgInB0ZWFleCIsIE5VTEwKIH07CiAKIHN0YXRpYyB2b2lkIHNob3dfY3B1ZmxhZ3Moc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc2hfY3B1aW5mbyAqYykKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N3c3VzcC5jIGIvYXJjaC9zaC9rZXJuZWwvc3dzdXNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiNjRhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL3N3c3VzcC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBzd3N1c3AuYyAtIFN1cGVySCBoaWJlcm5hdGlvbiBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8YXNtL3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9mcHUuaD4KKworc3RydWN0IHN3c3VzcF9hcmNoX3JlZ3Mgc3dzdXNwX2FyY2hfcmVnc19jcHUwOworCitpbnQgcGZuX2lzX25vc2F2ZSh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwl1bnNpZ25lZCBsb25nIGJlZ2luX3BmbiA9IF9fcGEoJl9fbm9zYXZlX2JlZ2luKSA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IFBBR0VfQUxJR04oX19wYSgmX19ub3NhdmVfZW5kKSkgPj4gUEFHRV9TSElGVDsKKworCXJldHVybiAocGZuID49IGJlZ2luX3BmbikgJiYgKHBmbiA8IGVuZF9wZm4pOworfQorCit2b2lkIHNhdmVfcHJvY2Vzc29yX3N0YXRlKHZvaWQpCit7CisJaW5pdF9mcHUoY3VycmVudCk7Cit9CisKK3ZvaWQgcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUodm9pZCkKK3sKKwlsb2NhbF9mbHVzaF90bGJfYWxsKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lXzMyLmMKaW5kZXggODQ1N2Y4My4uYzM0ZTFlMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZV8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVfMzIuYwpAQCAtNDEsMTQgKzQxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIE51bGwgaGlnaCBwcmVjaXNpb24gdGltZXIgZnVuY3Rpb25zIGZvciBzeXN0ZW1zIGxhY2tpbmcgb25lLgotICovCi1zdGF0aWMgY3ljbGVfdCBudWxsX2hwdF9yZWFkKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHZvaWQgKCpydGNfc2hfZ2V0X3RpbWUpKHN0cnVjdCB0aW1lc3BlYyAqKSA9IG51bGxfcnRjX2dldF90aW1lOwogaW50ICgqcnRjX3NoX3NldF90aW1lKShjb25zdCB0aW1lX3QpID0gbnVsbF9ydGNfc2V0X3RpbWU7CiAKQEAgLTExMiw3ICsxMDQsNiBAQAogRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOwogI2VuZGlmIC8qICFDT05GSUdfR0VORVJJQ19USU1FICovCiAKLSNpZm5kZWYgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMKIC8qIGxhc3QgdGltZSB0aGUgUlRDIGNsb2NrIGdvdCB1cGRhdGVkICovCiBzdGF0aWMgbG9uZyBsYXN0X3J0Y191cGRhdGU7CiAKQEAgLTE1Niw3ICsxNDcsNiBAQAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShnZXRfaXJxX3JlZ3MoKSkpOwogI2VuZGlmCiB9Ci0jZW5kaWYgLyogIUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCiAKICNpZmRlZiBDT05GSUdfUE0KIGludCB0aW1lcl9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKQEAgLTE4OSw3ICsxNzksMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgdGltZXJfaW5pdF9zeXNmcyh2b2lkKQogewotCWludCByZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnRpbWVyX3N5c2NsYXNzKTsKKwlpbnQgcmV0OworCisJaWYgKCFzeXNfdGltZXIpCisJCXJldHVybiAwOworCisJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZ0aW1lcl9zeXNjbGFzcyk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0yMDAsNDIgKzE5NSwyMSBAQAogCiB2b2lkICgqYm9hcmRfdGltZV9pbml0KSh2b2lkKTsKIAotLyoKLSAqIFNoYW1lbGVzc2x5IGJhc2VkIG9uIHRoZSBNSVBTIGFuZCBTcGFyYzY0IHdvcmsuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3RpY2tzX3Blcl9uc2VjX3F1b3RpZW50IF9fcmVhZF9tb3N0bHk7Ci11bnNpZ25lZCBsb25nIHNoX2hwdF9mcmVxdWVuY3kgPSAwOwotCi0jZGVmaW5lIE5TRUNfUEVSX0NZQ19TSElGVAkxMAotCi1zdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3NoID0geworc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX3NoID0gewogCS5uYW1lCQk9ICJTdXBlckgiLAotCS5yYXRpbmcJCT0gMjAwLAotCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5yZWFkCQk9IG51bGxfaHB0X3JlYWQsCi0JLnNoaWZ0CQk9IDE2LAotCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpbml0X3NoX2Nsb2Nrc291cmNlKHZvaWQpCi17Ci0JaWYgKCFzaF9ocHRfZnJlcXVlbmN5IHx8IGNsb2Nrc291cmNlX3NoLnJlYWQgPT0gbnVsbF9ocHRfcmVhZCkKLQkJcmV0dXJuOwotCi0JY2xvY2tzb3VyY2Vfc2gubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoc2hfaHB0X2ZyZXF1ZW5jeSwKLQkJCQkJCSAgY2xvY2tzb3VyY2Vfc2guc2hpZnQpOwotCi0JdGltZXJfdGlja3NfcGVyX25zZWNfcXVvdGllbnQgPQotCQljbG9ja3NvdXJjZV9oejJtdWx0KHNoX2hwdF9mcmVxdWVuY3ksIE5TRUNfUEVSX0NZQ19TSElGVCk7Ci0KLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2Vfc2gpOwotfQotCiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfVElNRQogdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRpY2tzID0gY2xvY2tzb3VyY2Vfc2gucmVhZCgpOwotCXJldHVybiAodGlja3MgKiB0aW1lcl90aWNrc19wZXJfbnNlY19xdW90aWVudCkgPj4gTlNFQ19QRVJfQ1lDX1NISUZUOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjeWNsZXM7CisKKwkvKiBqaWZmaWVzIGJhc2VkIHNjaGVkX2Nsb2NrIGlmIG5vIGNsb2Nrc291cmNlIGlzIGluc3RhbGxlZCAqLworCWlmICghY2xvY2tzb3VyY2Vfc2gucmF0aW5nKQorCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZylqaWZmaWVzICogKE5TRUNfUEVSX1NFQyAvIEhaKTsKKworCWN5Y2xlcyA9IGNsb2Nrc291cmNlX3NoLnJlYWQoKTsKKwlyZXR1cm4gY3ljMm5zKCZjbG9ja3NvdXJjZV9zaCwgY3ljbGVzKTsKIH0KICNlbmRpZgogCkBAIC0yNTksMTcgKzIzMyw4IEBACiAJICogaW5pdGlhbGl6ZWQgZm9yIHVzLgogCSAqLwogCXN5c190aW1lciA9IGdldF9zeXNfdGltZXIoKTsKKwlpZiAodW5saWtlbHkoIXN5c190aW1lcikpCisJCXBhbmljKCJTeXN0ZW0gdGltZXIgbWlzc2luZy5cbiIpOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgJXMgZm9yIHN5c3RlbSB0aW1lclxuIiwgc3lzX3RpbWVyLT5uYW1lKTsKLQotCi0JaWYgKHN5c190aW1lci0+b3BzLT5yZWFkKQotCQljbG9ja3NvdXJjZV9zaC5yZWFkID0gc3lzX3RpbWVyLT5vcHMtPnJlYWQ7Ci0KLQlpbml0X3NoX2Nsb2Nrc291cmNlKCk7Ci0KLQlpZiAoc2hfaHB0X2ZyZXF1ZW5jeSkKLQkJcHJpbnRrKCJVc2luZyAlbHUuJTAzbHUgTUh6IGhpZ2ggcHJlY2lzaW9uIHRpbWVyLlxuIiwKLQkJICAgICAgICgoc2hfaHB0X2ZyZXF1ZW5jeSArIDUwMCkgLyAxMDAwKSAvIDEwMDAsCi0JCSAgICAgICAoKHNoX2hwdF9mcmVxdWVuY3kgKyA1MDApIC8gMTAwMCkgJSAxMDAwKTsKLQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci1tdHUyLmMKaW5kZXggYzNkMjM3ZS4uOWE3N2FlOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLW10dTIuYworKysgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItbXR1Mi5jCkBAIC0zNSw3ICszNSw4IEBACiAjZGVmaW5lIE1UVTJfVFNSXzEJMHhmZmZlNDM4NQogI2RlZmluZSBNVFUyX1RDTlRfMQkweGZmZmU0Mzg2CS8qIDE2LWJpdCBjb3VudGVyICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDEpCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAxKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MjAzKQogI2RlZmluZSBNVFUyX1RHUkFfMQkweGZmZmU0Mzg4CiAjZWxzZQogI2RlZmluZSBNVFUyX1RHUkFfMQkweGZmZmU0MzhhCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKaW5kZXggMGRiM2Y5NS4uMTBiNWE2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwpAQCAtMTQ2LDcgKzE0NiwxNCBAQAogCV90bXVfY2xlYXJfc3RhdHVzKFRNVTApOwogCV90bXVfc2V0X2lycShUTVUwLHRtdTBfY2xvY2tldmVudC5tb2RlICE9IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOwogCi0JZXZ0LT5ldmVudF9oYW5kbGVyKGV2dCk7CisJc3dpdGNoICh0bXUwX2Nsb2NrZXZlbnQubW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMjM3LDYgKzI0NCw3IEBACiAgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgJiYgXAogICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApICYmIFwKICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSAmJiBcCisgICAgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikgJiYgXAogICAgICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSFgzKQogCWN0cmxfb3V0YihUTVVfVE9DUl9JTklULCBUTVVfVE9DUik7CiAjZW5kaWYKQEAgLTI1NCw3ICsyNjIsMTQgQEAKIAogCV90bXVfc3RhcnQoVE1VMSk7CiAKLQlzaF9ocHRfZnJlcXVlbmN5ID0gY2xrX2dldF9yYXRlKCZ0bXUxX2Nsayk7CisJY2xvY2tzb3VyY2Vfc2gucmF0aW5nID0gMjAwOworCWNsb2Nrc291cmNlX3NoLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDMyKTsKKwljbG9ja3NvdXJjZV9zaC5yZWFkID0gdG11X3RpbWVyX3JlYWQ7CisJY2xvY2tzb3VyY2Vfc2guc2hpZnQgPSAxMDsKKwljbG9ja3NvdXJjZV9zaC5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChjbGtfZ2V0X3JhdGUoJnRtdTFfY2xrKSwKKwkJCQkJCSAgY2xvY2tzb3VyY2Vfc2guc2hpZnQpOworCWNsb2Nrc291cmNlX3NoLmZsYWdzID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVM7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3NoKTsKIAogCXRtdTBfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKGZyZXF1ZW5jeSwgTlNFQ19QRVJfU0VDLAogCQkJCSAgICAgIHRtdTBfY2xvY2tldmVudC5zaGlmdCk7CkBAIC0yNjQsNiArMjc5LDcgQEAKIAkJCWNsb2NrZXZlbnRfZGVsdGEybnMoMSwgJnRtdTBfY2xvY2tldmVudCk7CiAKIAl0bXUwX2Nsb2NrZXZlbnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisJdG11MF9jbG9ja2V2ZW50LnJhdGluZyA9IDEwMDsKIAogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmdG11MF9jbG9ja2V2ZW50KTsKIApAQCAtMjc0LDcgKzI5MCw2IEBACiAJLmluaXQJCT0gdG11X3RpbWVyX2luaXQsCiAJLnN0YXJ0CQk9IHRtdV90aW1lcl9zdGFydCwKIAkuc3RvcAkJPSB0bXVfdGltZXJfc3RvcCwKLQkucmVhZAkJPSB0bXVfdGltZXJfcmVhZCwKIH07CiAKIHN0cnVjdCBzeXNfdGltZXIgdG11X3RpbWVyID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eF8zMi5sZHMuUyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXhfMzIubGRzLlMKaW5kZXggN2I0YjgyYmQuLmQwYjJhNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3ZtbGludXhfMzIubGRzLlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdm1saW51eF8zMi5sZHMuUwpAQCAtMTUsNyArMTUsMTAgQEAKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7Ci0jaWZkZWYgQ09ORklHXzMyQklUCisjaWZkZWYgQ09ORklHX1BNQl9GSVhFRAorCS4gPSBDT05GSUdfUEFHRV9PRkZTRVQgKyAoQ09ORklHX01FTU9SWV9TVEFSVCAmIDB4MWZmZmZmZmYpICsKKwkgICAgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ7CisjZWxpZiBkZWZpbmVkKENPTkZJR18zMkJJVCkKIAkuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ7CiAjZWxzZQogCS4gPSBDT05GSUdfUEFHRV9PRkZTRVQgKyBDT05GSUdfTUVNT1JZX1NUQVJUICsgQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL0tjb25maWcgYi9hcmNoL3NoL21tL0tjb25maWcKaW5kZXggNTU1ZWM5Ny4uMTBjMjQzNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9LY29uZmlnCisrKyBiL2FyY2gvc2gvbW0vS2NvbmZpZwpAQCAtNTcsNyArNTcsNyBAQAogCWJvb2wKIAlkZWZhdWx0IHkgaWYgQ1BVX1NINQogCi1jb25maWcgUE1CCitjb25maWcgUE1CX0VOQUJMRQogCWJvb2wgIlN1cHBvcnQgMzItYml0IHBoeXNpY2FsIGFkZHJlc3NpbmcgdGhyb3VnaCBQTUIiCiAJZGVwZW5kcyBvbiBNTVUgJiYgRVhQRVJJTUVOVEFMICYmIChDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1KQogCXNlbGVjdCAzMkJJVApAQCAtNjcsNiArNjcsMzMgQEAKIAkgIDMyLWJpdHMgdGhyb3VnaCB0aGUgU0gtNEEgUE1CLiBJZiB0aGlzIGlzIG5vdCBzZXQsIGxlZ2FjeQogCSAgMjktYml0IHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSB1c2VkLgogCitjaG9pY2UKKwlwcm9tcHQgIlBNQiBoYW5kbGluZyB0eXBlIgorCWRlcGVuZHMgb24gUE1CX0VOQUJMRQorCWRlZmF1bHQgUE1CX0ZJWEVECisKK2NvbmZpZyBQTUIKKwlib29sICJQTUIiCisJZGVwZW5kcyBvbiBNTVUgJiYgRVhQRVJJTUVOVEFMICYmIChDUFVfU1VCVFlQRV9TSDc3ODAgfHwgQ1BVX1NVQlRZUEVfU0g3Nzg1KQorCXNlbGVjdCAzMkJJVAorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgZXh0ZW5kZWQgdG8KKwkgIDMyLWJpdHMgdGhyb3VnaCB0aGUgU0gtNEEgUE1CLiBJZiB0aGlzIGlzIG5vdCBzZXQsIGxlZ2FjeQorCSAgMjktYml0IHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSB1c2VkLgorCitjb25maWcgUE1CX0ZJWEVECisJYm9vbCAiZml4ZWQgUE1CIgorCWRlcGVuZHMgb24gTU1VICYmIEVYUEVSSU1FTlRBTCAmJiAoQ1BVX1NVQlRZUEVfU0g3NzgwIHx8IFwKKwkJCQkJICAgQ1BVX1NVQlRZUEVfU0g3Nzg1KQorCXNlbGVjdCAzMkJJVAorCWhlbHAKKwkgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIGZpeGVkIFBNQiBtYXBwaW5ncyBhcmUgaW5oZXJpdGVkCisJICBmcm9tIHRoZSBib290IGxvYWRlciwgYW5kIHRoZSBrZXJuZWwgZG9lcyBub3QgYXR0ZW1wdCBkeW5hbWljCisJICBtYW5hZ2VtZW50LiBUaGlzIGlzIHRoZSBjbG9zZXN0IHRvIGxlZ2FjeSAyOS1iaXQgcGh5c2ljYWwgbW9kZSwKKwkgIGFuZCBhbGxvd3Mgc3lzdGVtcyB0byBzdXBwb3J0IHVwIHRvIDUxMk1pQiBvZiBzeXN0ZW0gbWVtb3J5LgorCitlbmRjaG9pY2UKKwogY29uZmlnIFgyVExCCiAJYm9vbCAiRW5hYmxlIGV4dGVuZGVkIFRMQiBtb2RlIgogCWRlcGVuZHMgb24gKENQVV9TSFgyIHx8IENQVV9TSFgzKSAmJiBNTVUgJiYgRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL01ha2VmaWxlXzMyIGIvYXJjaC9zaC9tbS9NYWtlZmlsZV8zMgppbmRleCBjYjJmM2YyLi45ODZhMWUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL01ha2VmaWxlXzMyCisrKyBiL2FyY2gvc2gvbW0vTWFrZWZpbGVfMzIKQEAgLTI1LDggKzI1LDEwIEBACiBlbmRpZgogCiBpZmRlZiBDT05GSUdfTU1VCi1vYmotJChDT05GSUdfQ1BVX1NIMykJKz0gdGxiLXNoMy5vCi1vYmotJChDT05GSUdfQ1BVX1NINCkJKz0gdGxiLXNoNC5vCit0bGItJChDT05GSUdfQ1BVX1NIMykJCTo9IHRsYi1zaDMubwordGxiLSQoQ09ORklHX0NQVV9TSDQpCQk6PSB0bGItc2g0Lm8KK3RsYi0kKENPTkZJR19DUFVfSEFTX1BURUFFWCkJOj0gdGxiLXB0ZWFleC5vCitvYmoteQkJCQkrPSAkKHRsYi15KQogaWZuZGVmIENPTkZJR19DQUNIRV9PRkYKIG9iai0kKENPTkZJR19DUFVfU0g0KQkJKz0gcGctc2g0Lm8KIG9iai0kKENPTkZJR19TSDc3MDVfQ0FDSEVfMzJLQikJKz0gcGctc2g3NzA1Lm8KQEAgLTM1LDYgKzM3LDcgQEAKIAogb2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRSkJKz0gaHVnZXRsYnBhZ2Uubwogb2JqLSQoQ09ORklHX1BNQikJCSs9IHBtYi5vCitvYmotJChDT05GSUdfUE1CX0ZJWEVEKQkJKz0gcG1iLWZpeGVkLm8KIG9iai0kKENPTkZJR19OVU1BKQkJKz0gbnVtYS5vCiAKIEVYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2FzaWRzLWRlYnVnZnMuYyBiL2FyY2gvc2gvbW0vYXNpZHMtZGVidWdmcy5jCmluZGV4IDhlOTEyYTEuLmNkOGMzYmYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2FzaWRzLWRlYnVnZnMuYworKysgYi9hcmNoL3NoL21tL2FzaWRzLWRlYnVnZnMuYwpAQCAtMzcsMTAgKzM3LDggQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChwLT5tbSkKLQkJCXNlcV9wcmludGYoZmlsZSwgIiU1ZCA6ICUwMmx4XG4iLCBwaWQsCisJCQlzZXFfcHJpbnRmKGZpbGUsICIlNWQgOiAlMDRseFxuIiwgcGlkLAogCQkJCSAgIGNwdV9hc2lkKHNtcF9wcm9jZXNzb3JfaWQoKSwgcC0+bW0pKTsKLQkJZWxzZQotCQkJc2VxX3ByaW50ZihmaWxlLCAiJTVkIDogKG5vbmUpXG4iLCBwaWQpOwogCX0KIAogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vaW9yZW1hcF8zMi5jIGIvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKaW5kZXggMzI5NDZmYi4uNjBjYzQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKKysrIGIvYXJjaC9zaC9tbS9pb3JlbWFwXzMyLmMKQEAgLTU5LDExICs1OSwxMyBAQAogCWlmIChpc19wY2lfbWVtYWRkcihwaHlzX2FkZHIpICYmIGlzX3BjaV9tZW1hZGRyKGxhc3RfYWRkcikpCiAJCXJldHVybiAodm9pZCBfX2lvbWVtICopcGh5c19hZGRyOwogCisjaWYgIWRlZmluZWQoQ09ORklHX1BNQl9GSVhFRCkKIAkvKgogCSAqIERvbid0IGFsbG93IGFueWJvZHkgdG8gcmVtYXAgbm9ybWFsIFJBTSB0aGF0IHdlJ3JlIHVzaW5nLi4KIAkgKi8KIAlpZiAocGh5c19hZGRyIDwgdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSkKIAkJcmV0dXJuIE5VTEw7CisjZW5kaWYKIAogCS8qCiAJICogTWFwcGluZ3MgaGF2ZSB0byBiZSBwYWdlLWFsaWduZWQKQEAgLTgxLDcgKzgzLDcgQEAKIAlhcmVhLT5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJb3JpZ19hZGRyID0gYWRkciA9ICh1bnNpZ25lZCBsb25nKWFyZWEtPmFkZHI7CiAKLSNpZmRlZiBDT05GSUdfMzJCSVQKKyNpZmRlZiBDT05GSUdfUE1CCiAJLyoKIAkgKiBGaXJzdCB0cnkgdG8gcmVtYXAgdGhyb3VnaCB0aGUgUE1CIG9uY2UgYSB2YWxpZCBWTUEgaGFzIGJlZW4KIAkgKiBlc3RhYmxpc2hlZC4gU21hbGxlciBhbGxvY2F0aW9ucyAob3IgdGhlIHJlc3Qgb2YgdGhlIHNpemUKQEAgLTExOSwxMCArMTIxLDEwIEBACiAJdW5zaWduZWQgbG9uZyBzZWcgPSBQWFNFRyh2YWRkcik7CiAJc3RydWN0IHZtX3N0cnVjdCAqcDsKIAotCWlmIChzZWcgPCBQM1NFRyB8fCBzZWcgPj0gUDNfQUREUl9NQVggfHwgaXNfcGNpX21lbWFkZHIodmFkZHIpKQorCWlmIChzZWcgPCBQM1NFRyB8fCB2YWRkciA+PSBQM19BRERSX01BWCB8fCBpc19wY2lfbWVtYWRkcih2YWRkcikpCiAJCXJldHVybjsKIAotI2lmZGVmIENPTkZJR18zMkJJVAorI2lmZGVmIENPTkZJR19QTUIKIAkvKgogCSAqIFB1cmdlIGFueSBQTUIgZW50cmllcyB0aGF0IG1heSBoYXZlIGJlZW4gZXN0YWJsaXNoZWQgZm9yIHRoaXMKIAkgKiBtYXBwaW5nLCB0aGVuIHByb2NlZWQgd2l0aCBjb252ZW50aW9uYWwgVk1BIHRlYXJkb3duLgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wbWItZml4ZWQuYyBiL2FyY2gvc2gvbW0vcG1iLWZpeGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNjOGVhYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vcG1iLWZpeGVkLmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIGFyY2gvc2gvbW0vZml4ZWRfcG1iLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KKworc3RhdGljIGludCBfX3VzZXNfanVtcF90b191bmNhY2hlZCBmaXhlZF9wbWJfaW5pdCh2b2lkKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgYWRkciwgZGF0YTsKKworCWp1bXBfdG9fdW5jYWNoZWQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBQTUJfRU5UUllfTUFYOyBpKyspIHsKKwkJYWRkciA9IFBNQl9EQVRBICsgKGkgPDwgUE1CX0VfU0hJRlQpOworCQlkYXRhID0gY3RybF9pbmwoYWRkcik7CisJCWlmICghKGRhdGEgJiBQTUJfVikpCisJCQljb250aW51ZTsKKworCQlpZiAoZGF0YSAmIFBNQl9DKSB7CisjaWYgZGVmaW5lZChDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdIKQorCQkJZGF0YSB8PSBQTUJfV1Q7CisjZWxpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9XUklURUJBQ0spCisJCQlkYXRhICY9IH5QTUJfV1Q7CisjZWxzZQorCQkJZGF0YSAmPSB+KFBNQl9DIHwgUE1CX1dUKTsKKyNlbmRpZgorCQl9CisJCWN0cmxfb3V0bChkYXRhLCBhZGRyKTsKKwl9CisKKwliYWNrX3RvX2NhY2hlZCgpOworCisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGZpeGVkX3BtYl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLmMgYi9hcmNoL3NoL21tL3BtYi5jCmluZGV4IDg0MjQxNjcuLmIxYTcxNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vcG1iLmMKKysrIGIvYXJjaC9zaC9tbS9wbWIuYwpAQCAtMTUsNiArMTUsOCBAQAogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KQEAgLTQwMiwzICs0MDQsMzkgQEAKIAlyZXR1cm4gMDsKIH0KIHBvc3Rjb3JlX2luaXRjYWxsKHBtYl9kZWJ1Z2ZzX2luaXQpOworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBtYl9zeXNkZXZfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RhdGljIHBtX21lc3NhZ2VfdCBwcmV2X3N0YXRlOworCisJLyogUmVzdG9yZSB0aGUgUE1CIGFmdGVyIGEgcmVzdW1lIGZyb20gaGliZXJuYXRpb24gKi8KKwlpZiAoc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfT04gJiYKKwkgICAgcHJldl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHsKKwkJc3RydWN0IHBtYl9lbnRyeSAqcG1iZTsKKwkJc3Bpbl9sb2NrX2lycSgmcG1iX2xpc3RfbG9jayk7CisJCWZvciAocG1iZSA9IHBtYl9saXN0OyBwbWJlOyBwbWJlID0gcG1iZS0+bmV4dCkKKwkJCXNldF9wbWJfZW50cnkocG1iZSk7CisJCXNwaW5fdW5sb2NrX2lycSgmcG1iX2xpc3RfbG9jayk7CisJfQorCXByZXZfc3RhdGUgPSBzdGF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbWJfc3lzZGV2X3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXJldHVybiBwbWJfc3lzZGV2X3N1c3BlbmQoZGV2LCBQTVNHX09OKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHBtYl9zeXNkZXZfZHJpdmVyID0geworCS5zdXNwZW5kID0gcG1iX3N5c2Rldl9zdXNwZW5kLAorCS5yZXN1bWUgPSBwbWJfc3lzZGV2X3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHBtYl9zeXNkZXZfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZjcHVfc3lzZGV2X2NsYXNzLCAmcG1iX3N5c2Rldl9kcml2ZXIpOworfQorCitzdWJzeXNfaW5pdGNhbGwocG1iX3N5c2Rldl9pbml0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS90bGItcHRlYWV4LmMgYi9hcmNoL3NoL21tL3RsYi1wdGVhZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFiM2VhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9tbS90bGItcHRlYWV4LmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIGFyY2gvc2gvbW0vdGxiLXB0ZWFleC5jCisgKgorICogVExCIG9wZXJhdGlvbnMgZm9yIFNILVgzIENQVXMgZmVhdHVyaW5nIFBURSBBU0lEIEV4dGVuc2lvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKwordm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHB0ZXZhbDsKKwl1bnNpZ25lZCBsb25nIHZwbjsKKworCS8qIFB0cmFjZSBtYXkgY2FsbCB0aGlzIHJvdXRpbmUuICovCisJaWYgKHZtYSAmJiBjdXJyZW50LT5hY3RpdmVfbW0gIT0gdm1hLT52bV9tbSkKKwkJcmV0dXJuOworCisjaWZuZGVmIENPTkZJR19DQUNIRV9PRkYKKwl7CisJCXVuc2lnbmVkIGxvbmcgcGZuID0gcHRlX3BmbihwdGUpOworCisJCWlmIChwZm5fdmFsaWQocGZuKSkgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCisJCQlpZiAoIXRlc3RfYml0KFBHX21hcHBlZCwgJnBhZ2UtPmZsYWdzKSkgeworCQkJCXVuc2lnbmVkIGxvbmcgcGh5cyA9IHB0ZV92YWwocHRlKSAmIFBURV9QSFlTX01BU0s7CisJCQkJX19mbHVzaF93YmFja19yZWdpb24oKHZvaWQgKilQMVNFR0FERFIocGh5cyksCisJCQkJCQkgICAgIFBBR0VfU0laRSk7CisJCQkJX19zZXRfYml0KFBHX21hcHBlZCwgJnBhZ2UtPmZsYWdzKTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZgorCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJLyogU2V0IFBURUggcmVnaXN0ZXIgKi8KKwl2cG4gPSBhZGRyZXNzICYgTU1VX1ZQTl9NQVNLOworCV9fcmF3X3dyaXRlbCh2cG4sIE1NVV9QVEVIKTsKKworCS8qIFNldCBQVEVBRVggKi8KKwlfX3Jhd193cml0ZWwoZ2V0X2FzaWQoKSwgTU1VX1BURUFFWCk7CisKKwlwdGV2YWwgPSBwdGUucHRlX2xvdzsKKworCS8qIFNldCBQVEVBIHJlZ2lzdGVyICovCisjaWZkZWYgQ09ORklHX1gyVExCCisJLyoKKwkgKiBGb3IgdGhlIGV4dGVuZGVkIG1vZGUgVExCIHRoaXMgaXMgdHJpdmlhbCwgb25seSB0aGUgRVNaIGFuZAorCSAqIEVQUiBiaXRzIG5lZWQgdG8gYmUgd3JpdHRlbiBvdXQgdG8gUFRFQSwgd2l0aCB0aGUgcmVtYWluZGVyIG9mCisJICogdGhlIHByb3RlY3Rpb24gYml0cyAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBjb21wYXQtbW9kZSBTWgorCSAqIGFuZCBQUiBiaXRzLCB3aGljaCBhcmUgY2xlYXJlZCkgYmVpbmcgd3JpdHRlbiBvdXQgaW4gUFRFTC4KKwkgKi8KKwlfX3Jhd193cml0ZWwocHRlLnB0ZV9oaWdoLCBNTVVfUFRFQSk7CisjZW5kaWYKKworCS8qIFNldCBQVEVMIHJlZ2lzdGVyICovCisJcHRldmFsICY9IF9QQUdFX0ZMQUdTX0hBUkRXQVJFX01BU0s7IC8qIGRyb3Agc29mdHdhcmUgZmxhZ3MgKi8KKyNpZmRlZiBDT05GSUdfQ0FDSEVfV1JJVEVUSFJPVUdICisJcHRldmFsIHw9IF9QQUdFX1dUOworI2VuZGlmCisJLyogY29udmVuaWVudGx5LCB3ZSB3YW50IGFsbCB0aGUgc29mdHdhcmUgZmxhZ3MgdG8gYmUgMCBhbnl3YXkgKi8KKwlfX3Jhd193cml0ZWwocHRldmFsLCBNTVVfUFRFTCk7CisKKwkvKiBMb2FkIHRoZSBUTEIgKi8KKwlhc20gdm9sYXRpbGUoImxkdGxiIjogLyogbm8gb3V0cHV0ICovIDogLyogbm8gaW5wdXQgKi8gOiAibWVtb3J5Iik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogV2hpbGUgU0gtWDIgZXh0ZW5kZWQgVExCIG1vZGUgc3BsaXRzIG91dCB0aGUgbWVtb3J5LW1hcHBlZCBJL1VUTEIKKyAqIGRhdGEgYXJyYXlzLCBTSC1YMyBjb3JlcyB3aXRoIFBURUFFWCBzcGxpdCBvdXQgdGhlIG1lbW9yeS1tYXBwZWQKKyAqIGFkZHJlc3MgYXJyYXlzLiBJbiBjb21wYXQgbW9kZSB0aGUgc2Vjb25kIGFycmF5IGlzIGluYWNjZXNzaWJsZSwgd2hpbGUKKyAqIGluIGV4dGVuZGVkIG1vZGUsIHRoZSBsZWdhY3kgOC1iaXQgQVNJRCBmaWVsZCBpbiBhZGRyZXNzIGFycmF5IDEgaGFzCisgKiB1bmRlZmluZWQgYmVoYXZpb3VyLgorICovCit2b2lkIF9fdXNlc19qdW1wX3RvX3VuY2FjaGVkIGxvY2FsX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhc2lkLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwlqdW1wX3RvX3VuY2FjaGVkKCk7CisJX19yYXdfd3JpdGVsKHBhZ2UsIE1NVV9VVExCX0FERFJFU1NfQVJSQVkgfCBNTVVfUEFHRV9BU1NPQ19CSVQpOworCV9fcmF3X3dyaXRlbChhc2lkLCBNTVVfVVRMQl9BRERSRVNTX0FSUkFZMiB8IE1NVV9QQUdFX0FTU09DX0JJVCk7CisJYmFja190b19jYWNoZWQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvb3Byb2ZpbGUvY29tbW9uLmMgYi9hcmNoL3NoL29wcm9maWxlL2NvbW1vbi5jCmluZGV4IDFkOTdkNjQuLjFiOWQ0MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvb3Byb2ZpbGUvY29tbW9uLmMKKysrIGIvYXJjaC9zaC9vcHJvZmlsZS9jb21tb24uYwpAQCAtMTA3LDYgKzEwNyw3IEBACiAJY2FzZSBDUFVfU0g3NzgwOgogCWNhc2UgQ1BVX1NINzc4MToKIAljYXNlIENQVV9TSDc3ODU6CisJY2FzZSBDUFVfU0g3Nzg2OgogCWNhc2UgQ1BVX1NINzcyMzoKIAljYXNlIENQVV9TSFgzOgogCQlsbW9kZWwgPSAmb3BfbW9kZWxfc2g0YV9vcHM7CmRpZmYgLS1naXQgYS9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggMjg0YjdlOC4uODQ3N2I1ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwpAQCAtNTIsMyArNTIsNiBAQAogQVAzMjVSWEEJCVNIX0FQMzI1UlhBCiBTSDc3NjNSRFAJCVNIX1NINzc2M1JEUAogU0g3Nzg1TENSCQlTSF9TSDc3ODVMQ1IKK1VSUVVFTEwJCQlTSF9VUlFVRUxMCitFU1BUCQkJU0hfRVNQVAorUE9MQVJJUwkJCVNIX1BPTEFSSVMKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGlsLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BpbC5oCmluZGV4IDMyYTdlZmUuLjI2NjkzNzAzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BpbC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGlsLmgKQEAgLTI0LDYgKzI0LDcgQEAKICNkZWZpbmUgUElMX0RFVklDRV9JUlEJCTUKICNkZWZpbmUgUElMX1NNUF9DQUxMX0ZVTkNfU05HTAk2CiAjZGVmaW5lIFBJTF9ERUZFUlJFRF9QQ1JfV09SSwk3CisjZGVmaW5lIFBJTF9LR0RCX0NBUFRVUkUJOAogI2RlZmluZSBQSUxfTk9STUFMX01BWAkJMTQKICNkZWZpbmUgUElMX05NSQkJCTE1CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NvY2tldC5oCmluZGV4IGJmNTBkMGMuLjk4MmExMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc29ja2V0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTAsNiArNTAsOSBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkweDAwMjIKIAorI2RlZmluZSBTT19USU1FU1RBTVBJTkcJCTB4MDAyMworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HCVNPX1RJTUVTVEFNUElORworCiAvKiBTZWN1cml0eSBsZXZlbHMgLSBhcyBwZXIgTlJMIElQdjYgLSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyAqLwogI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTgkJMHg1MDAxCiAjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJBTlNQT1JUCTB4NTAwMgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGxiXzY0LmgKaW5kZXggZWM4MWNkZS4uZWUzOGU3MyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90bGJfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RsYl82NC5oCkBAIC01Nyw2ICs1Nyw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0bGJfZmx1c2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICptcCkKIHsKKwlpZiAoIW1wLT5mdWxsbW0pCisJCWZsdXNoX3RsYl9wZW5kaW5nKCk7CiAJaWYgKG1wLT5uZWVkX2ZsdXNoKSB7CiAJCWZyZWVfcGFnZXNfYW5kX3N3YXBfY2FjaGUobXAtPnBhZ2VzLCBtcC0+cGFnZXNfbnIpOwogCQltcC0+cGFnZXNfbnIgPSAwOwpAQCAtNzgsOCArODAsNiBAQAogCiAJaWYgKG1wLT5mdWxsbW0pCiAJCW1wLT5mdWxsbW0gPSAwOwotCWVsc2UKLQkJZmx1c2hfdGxiX3BlbmRpbmcoKTsKIAogCS8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLwogCWNoZWNrX3BndF9jYWNoZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaXJxXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYwppbmRleCAxYzM3OGQ4Li44YmEwNjRmIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pcnFfNjQuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlOXMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwva2dkYl82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwva2dkYl82NC5jCmluZGV4IGZlZmJlNmQuLmY1YTBmZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2tnZGJfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9rZ2RiXzY0LmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1NNUAotdm9pZCBzbXBfa2dkYl9jYXB0dXJlX2NsaWVudChzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgc21wX2tnZGJfY2FwdHVyZV9jbGllbnQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2NvbW1vbi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX2NvbW1vbi5jCmluZGV4IDY0ZTZlZGYuLmI3NzU2NTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9jb21tb24uYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfY29tbW9uLmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCWNvbnN0IHUzMiAqdmRtYSA9IG9mX2dldF9wcm9wZXJ0eShwYm0tPm9wLT5ub2RlLCAidmlydHVhbC1kbWEiLCBOVUxMKTsKIAogCWlmICh2ZG1hKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqcnAgPSBrbWFsbG9jKHNpemVvZigqcnApLCBHRlBfS0VSTkVMKTsKKwkJc3RydWN0IHJlc291cmNlICpycCA9IGt6YWxsb2Moc2l6ZW9mKCpycCksIEdGUF9LRVJORUwpOwogCiAJCWlmICghcnApIHsKIAkJCXByb21fcHJpbnRmKCJDYW5ub3QgYWxsb2NhdGUgSU9NTVUgcmVzb3VyY2UuXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKaW5kZXggNmNkMWE1Yi4uNzk0NTdmNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKQEAgLTEwMzEsNyArMTAzMSw3IEBACiAgKiAgICBJZiB0aGUgYWRkcmVzcyBzcGFjZSBpcyBub24tc2hhcmVkIChpZS4gbW0tPmNvdW50ID09IDEpIHdlIGF2b2lkCiAgKiAgICBjcm9zcyBjYWxscyB3aGVuIHdlIHdhbnQgdG8gZmx1c2ggdGhlIGN1cnJlbnRseSBydW5uaW5nIHByb2Nlc3MncwogICogICAgdGxiIHN0YXRlLiAgVGhpcyBpcyBkb25lIGJ5IGNsZWFyaW5nIGFsbCBjcHUgYml0cyBleGNlcHQgdGhlIGN1cnJlbnQKLSAqICAgIHByb2Nlc3NvcidzIGluIGN1cnJlbnQtPmFjdGl2ZV9tbS0+Y3B1X3ZtX21hc2sgYW5kIHBlcmZvcm1pbmcgdGhlCisgKiAgICBwcm9jZXNzb3IncyBpbiBjdXJyZW50LT5tbS0+Y3B1X3ZtX21hc2sgYW5kIHBlcmZvcm1pbmcgdGhlCiAgKiAgICBmbHVzaCBsb2NhbGx5IG9ubHkuICBUaGlzIHdpbGwgZm9yY2UgYW55IHN1YnNlcXVlbnQgY3B1cyB3aGljaCBydW4KICAqICAgIHRoaXMgdGFzayB0byBmbHVzaCB0aGUgY29udGV4dCBmcm9tIHRoZSBsb2NhbCB0bGIgaWYgdGhlIHByb2Nlc3MKICAqICAgIG1pZ3JhdGVzIHRvIGFub3RoZXIgY3B1IChhZ2FpbikuCkBAIC0xMDc0LDcgKzEwNzQsNyBAQAogCXUzMiBjdHggPSBDVFhfSFdCSVRTKG1tLT5jb250ZXh0KTsKIAlpbnQgY3B1ID0gZ2V0X2NwdSgpOwogCi0JaWYgKG1tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSAmJiBhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA9PSAxKQorCWlmIChtbSA9PSBjdXJyZW50LT5tbSAmJiBhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSA9PSAxKQogCQltbS0+Y3B1X3ZtX21hc2sgPSBjcHVtYXNrX29mX2NwdShjcHUpOwogCWVsc2UKIAkJc21wX2Nyb3NzX2NhbGxfbWFza2VkKCZ4Y2FsbF9mbHVzaF90bGJfcGVuZGluZywKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUwppbmRleCBmOTNjNDJhLi5hODAwMGIxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCkBAIC01MSw3ICs1MSw3IEBACiAvKjE1MCovCS53b3JkIHN5c19uaXNfc3lzY2FsbCwgc3lzX2lub3RpZnlfaW5pdCwgc3lzX2lub3RpZnlfYWRkX3dhdGNoLCBzeXNfcG9sbCwgc3lzX2dldGRlbnRzNjQKIAkud29yZCBjb21wYXRfc3lzX2ZjbnRsNjQsIHN5c19pbm90aWZ5X3JtX3dhdGNoLCBjb21wYXRfc3lzX3N0YXRmcywgY29tcGF0X3N5c19mc3RhdGZzLCBzeXNfb2xkdW1vdW50CiAvKjE2MCovCS53b3JkIGNvbXBhdF9zeXNfc2NoZWRfc2V0YWZmaW5pdHksIGNvbXBhdF9zeXNfc2NoZWRfZ2V0YWZmaW5pdHksIHN5czMyX2dldGRvbWFpbm5hbWUsIHN5czMyX3NldGRvbWFpbm5hbWUsIHN5c19uaXNfc3lzY2FsbAotCS53b3JkIHN5c19xdW90YWN0bCwgc3lzX3NldF90aWRfYWRkcmVzcywgY29tcGF0X3N5c19tb3VudCwgc3lzX3VzdGF0LCBzeXMzMl9zZXR4YXR0cgorCS53b3JkIHN5c19xdW90YWN0bCwgc3lzX3NldF90aWRfYWRkcmVzcywgY29tcGF0X3N5c19tb3VudCwgY29tcGF0X3N5c191c3RhdCwgc3lzMzJfc2V0eGF0dHIKIC8qMTcwKi8JLndvcmQgc3lzMzJfbHNldHhhdHRyLCBzeXMzMl9mc2V0eGF0dHIsIHN5c19nZXR4YXR0ciwgc3lzX2xnZXR4YXR0ciwgY29tcGF0X3N5c19nZXRkZW50cwogCS53b3JkIHN5c19zZXRzaWQsIHN5c19mY2hkaXIsIHN5czMyX2ZnZXR4YXR0ciwgc3lzX2xpc3R4YXR0ciwgc3lzX2xsaXN0eGF0dHIKIC8qMTgwKi8JLndvcmQgc3lzMzJfZmxpc3R4YXR0ciwgc3lzX3JlbW92ZXhhdHRyLCBzeXNfbHJlbW92ZXhhdHRyLCBjb21wYXRfc3lzX3NpZ3BlbmRpbmcsIHN5c19uaV9zeXNjYWxsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzY0LmMKaW5kZXggMmRiM2MyMi4uNGVlMmU0OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfNjQuYwpAQCAtMzYsMTAgKzM2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9vcGxpYi5oPgogI2luY2x1ZGUgPGFzbS90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9zdGFyZmlyZS5oPgpAQCAtNzI0LDEyICs3MjQsMTQgQEAKIAl1bnNpZ25lZCBsb25nIHRpY2tfbWFzayA9IHRpY2tfb3BzLT5zb2Z0aW50X21hc2s7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmcGVyX2NwdShzcGFyYzY0X2V2ZW50cywgY3B1KTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKIAljbGVhcl9zb2Z0aW50KHRpY2tfbWFzayk7CiAKIAlpcnFfZW50ZXIoKTsKIAotCWtzdGF0X3RoaXNfY3B1LmlycXNbMF0rKzsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoMCk7CisJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KDAsIGRlc2MpOwogCiAJaWYgKHVubGlrZWx5KCFldnQtPmV2ZW50X2hhbmRsZXIpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3R0YWJsZS5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHRhYmxlLlMKaW5kZXggZDliZGZiOS4uNzZkODM3ZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvdHRhYmxlLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHRhYmxlLlMKQEAgLTY0LDcgKzY0LDEyIEBACiB0bDBfaXJxNjoJQlRSQVAoMHg0NikKICNlbmRpZgogdGwwX2lycTc6CVRSQVBfSVJRKGRlZmVycmVkX3Bjcl93b3JrX2lycSwgNykKLXRsMF9pcnE4OglCVFJBUCgweDQ4KSBCVFJBUCgweDQ5KQorI2lmZGVmIENPTkZJR19LR0RCCit0bDBfaXJxODoJVFJBUF9JUlEoc21wX2tnZGJfY2FwdHVyZV9jbGllbnQsIDgpCisjZWxzZQordGwwX2lycTg6CUJUUkFQKDB4NDgpCisjZW5kaWYKK3RsMF9pcnE5OglCVFJBUCgweDQ5KQogdGwwX2lycTEwOglCVFJBUCgweDRhKSBCVFJBUCgweDRiKSBCVFJBUCgweDRjKSBCVFJBUCgweDRkKQogdGwwX2lycTE0OglUUkFQX0lSUSh0aW1lcl9pbnRlcnJ1cHQsIDE0KQogdGwwX2lycTE1OglUUkFQX05NSV9JUlEocGVyZmN0cl9pcnEsIDE1KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS91bHRyYS5TIGIvYXJjaC9zcGFyYy9tbS91bHRyYS5TCmluZGV4IDgwYzc4OGUuLmI1N2E1OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vdWx0cmEuUworKysgYi9hcmNoL3NwYXJjL21tL3VsdHJhLlMKQEAgLTY3OSwyOCArNjc5LDggQEAKICNpZmRlZiBDT05GSUdfS0dEQgogCS5nbG9ibAkJeGNhbGxfa2dkYl9jYXB0dXJlCiB4Y2FsbF9rZ2RiX2NhcHR1cmU6Ci02NjE6CXJkcHIJCSVwc3RhdGUsICVnMgotCXdycHIJCSVnMiwgUFNUQVRFX0lHIHwgUFNUQVRFX0FHLCAlcHN0YXRlCi0JLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCAiYXgiCi0JLndvcmQJCTY2MWIKLQlub3AKLQlub3AKLQkucHJldmlvdXMKLQotCXJkcHIJCSVwaWwsICVnMgotCXdycHIJCSVnMCwgUElMX05PUk1BTF9NQVgsICVwaWwKLQlzZXRoaQkJJWhpKDEwOWYpLCAlZzcKLQliYSxwdAkJJXhjYywgZXRyYXBfaXJxCi0xMDk6CSBvcgkJJWc3LCAlbG8oMTA5YiksICVnNwotI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotCWNhbGwJCXRyYWNlX2hhcmRpcnFzX29mZgotCSBub3AKLSNlbmRpZgotCWNhbGwJCXNtcF9rZ2RiX2NhcHR1cmVfY2xpZW50Ci0JIGFkZAkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKLQkvKiBIYXMgdG8gYmUgYSBub24tdjkgYnJhbmNoIGR1ZSB0byB0aGUgbGFyZ2UgZGlzdGFuY2UuICovCi0JYmEJCXJ0cmFwX3hjYWxsCi0JIGxkeAkJWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UU1RBVEVdLCAlbDEKKwl3cgkJJWcwLCAoMSA8PCBQSUxfS0dEQl9DQVBUVVJFKSwgJXNldF9zb2Z0aW50CisJcmV0cnkKICNlbmRpZgogCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwppbmRleCBmZGU1MTBiLi40MzQyMjRlIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwpAQCAtODYsNyArODYsNyBAQAogCQlkcm9wX3NrYi0+ZGV2ID0gZGV2OwogCQkvKiBSZWFkIGEgcGFja2V0IGludG8gZHJvcF9za2IgYW5kIGRvbid0IGRvIGFueXRoaW5nIHdpdGggaXQuICovCiAJCSgqbHAtPnJlYWQpKGxwLT5mZCwgZHJvcF9za2IsIGxwKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTksOCArOTksOCBAQAogCQlza2JfdHJpbShza2IsIHBrdF9sZW4pOwogCQlza2ItPnByb3RvY29sID0gKCpscC0+cHJvdG9jb2wpKHNrYik7CiAKLQkJbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCQlscC0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJbmV0aWZfcngoc2tiKTsKIAkJcmV0dXJuIHBrdF9sZW47CiAJfQpAQCAtMjI0LDggKzIyNCw4IEBACiAJbGVuID0gKCpscC0+d3JpdGUpKGxwLT5mZCwgc2tiLCBscCk7CiAKIAlpZiAobGVuID09IHNrYi0+bGVuKSB7Ci0JCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCWxwLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCkBAIC0yMzQsNyArMjM0LDcgQEAKIAl9CiAJZWxzZSBpZiAobGVuID09IDApIHsKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJbHAtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJfQogCWVsc2UgewogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwpAQCAtMjQ4LDEyICsyNDgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnVtbF9uZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVtbF9uZXRfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAmbHAtPnN0YXRzOwotfQotCiBzdGF0aWMgdm9pZCB1bWxfbmV0X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybjsKQEAgLTM3Nyw2ICszNzEsMTggQEAKIAlmcmVlX25ldGRldihuZXRkZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHVtbF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gdW1sX25ldF9vcGVuLAorCS5uZG9fc3RvcCAJCT0gdW1sX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gdW1sX25ldF9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gdW1sX25ldF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0IAk9IHVtbF9uZXRfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHVtbF9uZXRfc2V0X21hYywKKwkubmRvX2NoYW5nZV9tdHUgCT0gdW1sX25ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qCiAgKiBFbnN1cmVzIHRoYXQgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyIGlzIGNhbGxlZCBvbmx5IG9uY2UgYnkKICAqIGV0aF9jb25maWd1cmUuICBXaWxsIGJlIHNldCBpbiBhbiBpbml0Y2FsbC4KQEAgLTQ3MywxNCArNDc5LDcgQEAKIAogCXNldF9ldGhlcl9tYWMoZGV2LCBkZXZpY2UtPm1hYyk7CiAJZGV2LT5tdHUgPSB0cmFuc3BvcnQtPnVzZXItPm10dTsKLQlkZXYtPm9wZW4gPSB1bWxfbmV0X29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB1bWxfbmV0X3N0YXJ0X3htaXQ7Ci0JZGV2LT5zdG9wID0gdW1sX25ldF9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cyA9IHVtbF9uZXRfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gdW1sX25ldF9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gdW1sX25ldF90eF90aW1lb3V0OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gdW1sX25ldF9zZXRfbWFjOwotCWRldi0+Y2hhbmdlX210dSA9IHVtbF9uZXRfY2hhbmdlX210dTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdW1sX25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZ1bWxfbmV0X2V0aHRvb2xfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAoSFogPj4gMSk7CiAJZGV2LT5pcnEgPSBVTV9FVEhfSVJROwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9uZXRfa2Vybi5oIGIvYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9uZXRfa2Vybi5oCmluZGV4IGQ4NDNjNzkuLjVjMzY3ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zaGFyZWQvbmV0X2tlcm4uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL25ldF9rZXJuLmgKQEAgLTI2LDcgKzI2LDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0bDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCWludCBmZDsKIAl1bnNpZ25lZCBjaGFyIG1hY1tFVEhfQUxFTl07CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9pcnEuYyBiL2FyY2gvdW0va2VybmVsL2lycS5jCmluZGV4IDNkN2FhZDAuLjMzNmI2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL2lycS5jCisrKyBiL2FyY2gvdW0va2VybmVsL2lycS5jCkBAIC00Miw3ICs0Miw3IEBACiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxcyhpKSk7CiAjZWxzZQogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCi0JCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGtzdGF0X2NwdShqKS5pcnFzW2ldKTsKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwogI2VuZGlmCiAJCXNlcV9wcmludGYocCwgIiAlMTRzIiwgaXJxX2Rlc2NbaV0uY2hpcC0+dHlwZW5hbWUpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGJjMmZiYWQuLjNhMzMwYTQzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTE2NSw2ICsxNjUsOSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQorICAgICAgIGRlZl9ib29sIHkKKwogY29uZmlnIEdFTkVSSUNfSVJRX1BST0JFCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlIGIvYXJjaC94ODYvY3J5cHRvL01ha2VmaWxlCmluZGV4IDkwM2RlNGEuLmViZTdkZWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2NyeXB0by9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9jcnlwdG8vTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX0FFU19YODZfNjQpICs9IGFlcy14ODZfNjQubwogb2JqLSQoQ09ORklHX0NSWVBUT19UV09GSVNIX1g4Nl82NCkgKz0gdHdvZmlzaC14ODZfNjQubwogb2JqLSQoQ09ORklHX0NSWVBUT19TQUxTQTIwX1g4Nl82NCkgKz0gc2Fsc2EyMC14ODZfNjQubworb2JqLSQoQ09ORklHX0NSWVBUT19BRVNfTklfSU5URUwpICs9IGFlc25pLWludGVsLm8KIAogb2JqLSQoQ09ORklHX0NSWVBUT19DUkMzMkNfSU5URUwpICs9IGNyYzMyYy1pbnRlbC5vCiAKQEAgLTE5LDMgKzIwLDUgQEAKIGFlcy14ODZfNjQteSA6PSBhZXMteDg2XzY0LWFzbV82NC5vIGFlc19nbHVlLm8KIHR3b2Zpc2gteDg2XzY0LXkgOj0gdHdvZmlzaC14ODZfNjQtYXNtXzY0Lm8gdHdvZmlzaF9nbHVlLm8KIHNhbHNhMjAteDg2XzY0LXkgOj0gc2Fsc2EyMC14ODZfNjQtYXNtXzY0Lm8gc2Fsc2EyMF9nbHVlLm8KKworYWVzbmktaW50ZWwteSA6PSBhZXNuaS1pbnRlbF9hc20ubyBhZXNuaS1pbnRlbF9nbHVlLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXMtaTU4Ni1hc21fMzIuUyBiL2FyY2gveDg2L2NyeXB0by9hZXMtaTU4Ni1hc21fMzIuUwppbmRleCBlNDFiMTQ3Li5iOTQ5ZWMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vYWVzLWk1ODYtYXNtXzMyLlMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flcy1pNTg2LWFzbV8zMi5TCkBAIC00MSwxNCArNDEsMTQgQEAKICNkZWZpbmUgdGxlbiAxMDI0ICAgLy8gbGVuZ3RoIG9mIGVhY2ggb2YgNCAneG9yJyBhcnJheXMgKDI1NiAzMi1iaXQgd29yZHMpCiAKIC8qIG9mZnNldHMgdG8gcGFyYW1ldGVycyB3aXRoIG9uZSByZWdpc3RlciBwdXNoZWQgb250byBzdGFjayAqLwotI2RlZmluZSB0Zm0gOAorI2RlZmluZSBjdHggOAogI2RlZmluZSBvdXRfYmxrIDEyCiAjZGVmaW5lIGluX2JsayAxNgogCi0vKiBvZmZzZXRzIGluIGNyeXB0b190Zm0gc3RydWN0dXJlICovCi0jZGVmaW5lIGtsZW4gKGNyeXB0b190Zm1fY3R4X29mZnNldCArIDApCi0jZGVmaW5lIGVrZXkgKGNyeXB0b190Zm1fY3R4X29mZnNldCArIDQpCi0jZGVmaW5lIGRrZXkgKGNyeXB0b190Zm1fY3R4X29mZnNldCArIDI0NCkKKy8qIG9mZnNldHMgaW4gY3J5cHRvX2Flc19jdHggc3RydWN0dXJlICovCisjZGVmaW5lIGtsZW4gKDQ4MCkKKyNkZWZpbmUgZWtleSAoMCkKKyNkZWZpbmUgZGtleSAoMjQwKQogCiAvLyByZWdpc3RlciBtYXBwaW5nIGZvciBlbmNyeXB0IGFuZCBkZWNyeXB0IHN1YnJvdXRpbmVzCiAKQEAgLTIxNyw3ICsyMTcsNyBAQAogCWRvX2NvbCAodGFibGUsIHI1LHIwLHIxLHI0LCByMixyMyk7CQkvKiBpZHg9cjUgKi8KIAogLy8gQUVTIChSaWpuZGFlbCkgRW5jcnlwdGlvbiBTdWJyb3V0aW5lCi0vKiB2b2lkIGFlc19lbmNfYmxrKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXRfYmxrLCBjb25zdCB1OCAqaW5fYmxrKSAqLworLyogdm9pZCBhZXNfZW5jX2JsayhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dF9ibGssIGNvbnN0IHU4ICppbl9ibGspICovCiAKIC5nbG9iYWwgIGFlc19lbmNfYmxrCiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogCiBhZXNfZW5jX2JsazoKIAlwdXNoICAgICVlYnAKLQltb3YgICAgIHRmbSglZXNwKSwlZWJwCisJbW92ICAgICBjdHgoJWVzcCksJWVicAogCiAvLyBDQVVUSU9OOiB0aGUgb3JkZXIgYW5kIHRoZSB2YWx1ZXMgdXNlZCBpbiB0aGVzZSBhc3NpZ25zIAogLy8gcmVseSBvbiB0aGUgcmVnaXN0ZXIgbWFwcGluZ3MKQEAgLTI5Miw3ICsyOTIsNyBAQAogCXJldAogCiAvLyBBRVMgKFJpam5kYWVsKSBEZWNyeXB0aW9uIFN1YnJvdXRpbmUKLS8qIHZvaWQgYWVzX2RlY19ibGsoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dF9ibGssIGNvbnN0IHU4ICppbl9ibGspICovCisvKiB2b2lkIGFlc19kZWNfYmxrKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0X2JsaywgY29uc3QgdTggKmluX2JsaykgKi8KIAogLmdsb2JhbCAgYWVzX2RlY19ibGsKIApAQCAtMzAzLDcgKzMwMyw3IEBACiAKIGFlc19kZWNfYmxrOgogCXB1c2ggICAgJWVicAotCW1vdiAgICAgdGZtKCVlc3ApLCVlYnAKKwltb3YgICAgIGN0eCglZXNwKSwlZWJwCiAKIC8vIENBVVRJT046IHRoZSBvcmRlciBhbmQgdGhlIHZhbHVlcyB1c2VkIGluIHRoZXNlIGFzc2lnbnMgCiAvLyByZWx5IG9uIHRoZSByZWdpc3RlciBtYXBwaW5ncwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flcy14ODZfNjQtYXNtXzY0LlMgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzLXg4Nl82NC1hc21fNjQuUwppbmRleCBhMTIwZjUyLi41YjU3N2Q1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vYWVzLXg4Nl82NC1hc21fNjQuUworKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzLXg4Nl82NC1hc21fNjQuUwpAQCAtMTcsOCArMTcsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKLSNkZWZpbmUgQkFTRSBjcnlwdG9fdGZtX2N0eF9vZmZzZXQKLQogI2RlZmluZSBSMQklcmF4CiAjZGVmaW5lIFIxRQklZWF4CiAjZGVmaW5lIFIxWAklYXgKQEAgLTU2LDEzICs1NCwxMyBAQAogCS5hbGlnbgk4OwkJCVwKIEZVTkM6CW1vdnEJcjEscjI7CQkJXAogCW1vdnEJcjMscjQ7CQkJXAotCWxlYXEJQkFTRStLRVkrNDgrNChyOCkscjk7CVwKKwlsZWFxCUtFWSs0OChyOCkscjk7CQlcCiAJbW92cQlyMTAscjExOwkJXAogCW1vdmwJKHI3KSxyNSAjIyBFOwkJXAogCW1vdmwJNChyNykscjEgIyMgRTsJCVwKIAltb3ZsCTgocjcpLHI2ICMjIEU7CQlcCiAJbW92bAkxMihyNykscjcgIyMgRTsJCVwKLQltb3ZsCUJBU0UrMChyOCkscjEwICMjIEU7CVwKKwltb3ZsCTQ4MChyOCkscjEwICMjIEU7CVwKIAl4b3JsCS00OChyOSkscjUgIyMgRTsJXAogCXhvcmwJLTQ0KHI5KSxyMSAjIyBFOwlcCiAJeG9ybAktNDAocjkpLHI2ICMjIEU7CVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2NyeXB0by9hZXNfZ2x1ZS5jIGIvYXJjaC94ODYvY3J5cHRvL2Flc19nbHVlLmMKaW5kZXggNzFmNDU3OC4uNDlhZTlmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL2Flc19nbHVlLmMKKysrIGIvYXJjaC94ODYvY3J5cHRvL2Flc19nbHVlLmMKQEAgLTUsMTcgKzUsMjkgQEAKIAogI2luY2x1ZGUgPGNyeXB0by9hZXMuaD4KIAotYXNtbGlua2FnZSB2b2lkIGFlc19lbmNfYmxrKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQsIGNvbnN0IHU4ICppbik7Ci1hc21saW5rYWdlIHZvaWQgYWVzX2RlY19ibGsoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNfZW5jX2JsayhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwgY29uc3QgdTggKmluKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNfZGVjX2JsayhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwgY29uc3QgdTggKmluKTsKKwordm9pZCBjcnlwdG9fYWVzX2VuY3J5cHRfeDg2KHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQoreworCWFlc19lbmNfYmxrKGN0eCwgZHN0LCBzcmMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2Flc19lbmNyeXB0X3g4Nik7CisKK3ZvaWQgY3J5cHRvX2Flc19kZWNyeXB0X3g4NihzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKK3sKKwlhZXNfZGVjX2JsayhjdHgsIGRzdCwgc3JjKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hZXNfZGVjcnlwdF94ODYpOwogCiBzdGF0aWMgdm9pZCBhZXNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQogewotCWFlc19lbmNfYmxrKHRmbSwgZHN0LCBzcmMpOworCWFlc19lbmNfYmxrKGNyeXB0b190Zm1fY3R4KHRmbSksIGRzdCwgc3JjKTsKIH0KIAogc3RhdGljIHZvaWQgYWVzX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKIHsKLQlhZXNfZGVjX2Jsayh0Zm0sIGRzdCwgc3JjKTsKKwlhZXNfZGVjX2JsayhjcnlwdG9fdGZtX2N0eCh0Zm0pLCBkc3QsIHNyYyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhZXNfYWxnID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2FzbS5TIGIvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2FzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYmE5OTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9jcnlwdG8vYWVzbmktaW50ZWxfYXNtLlMKQEAgLTAsMCArMSw4OTYgQEAKKy8qCisgKiBJbXBsZW1lbnQgQUVTIGFsZ29yaXRobSBpbiBJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zLgorICoKKyAqIFRoZSB3aGl0ZSBwYXBlciBvZiBBRVMtTkkgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBkb3dubG9hZGVkIGZyb206CisgKiAgIGh0dHA6Ly9zb2Z0d2FyZWNvbW11bml0eS5pbnRlbC5jb20vaXNuL2Rvd25sb2Fkcy9pbnRlbGF2eC9BRVMtSW5zdHJ1Y3Rpb25zLVNldF9XUC5wZGYKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEludGVsIENvcnAuCisgKiAgICBBdXRob3I6IEh1YW5nIFlpbmcgPHlpbmcuaHVhbmdAaW50ZWwuY29tPgorICogICAgICAgICAgICBWaW5vZGggR29wYWwgPHZpbm9kaC5nb3BhbEBpbnRlbC5jb20+CisgKiAgICAgICAgICAgIEthaHJhbWFuIEFrZGVtaXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKKy50ZXh0CisKKyNkZWZpbmUgU1RBVEUxCSV4bW0wCisjZGVmaW5lIFNUQVRFMgkleG1tNAorI2RlZmluZSBTVEFURTMJJXhtbTUKKyNkZWZpbmUgU1RBVEU0CSV4bW02CisjZGVmaW5lIFNUQVRFCVNUQVRFMQorI2RlZmluZSBJTjEJJXhtbTEKKyNkZWZpbmUgSU4yCSV4bW03CisjZGVmaW5lIElOMwkleG1tOAorI2RlZmluZSBJTjQJJXhtbTkKKyNkZWZpbmUgSU4JSU4xCisjZGVmaW5lIEtFWQkleG1tMgorI2RlZmluZSBJVgkleG1tMworCisjZGVmaW5lIEtFWVAJJXJkaQorI2RlZmluZSBPVVRQCSVyc2kKKyNkZWZpbmUgSU5QCSVyZHgKKyNkZWZpbmUgTEVOCSVyY3gKKyNkZWZpbmUgSVZQCSVyOAorI2RlZmluZSBLTEVOCSVyOWQKKyNkZWZpbmUgVDEJJXIxMAorI2RlZmluZSBUS0VZUAlUMQorI2RlZmluZSBUMgklcjExCisKK19rZXlfZXhwYW5zaW9uXzEyODoKK19rZXlfZXhwYW5zaW9uXzI1NmE6CisJcHNodWZkICQwYjExMTExMTExLCAleG1tMSwgJXhtbTEKKwlzaHVmcHMgJDBiMDAwMTAwMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJc2h1ZnBzICQwYjEwMDAxMTAwLCAleG1tMCwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMAorCXB4b3IgJXhtbTEsICV4bW0wCisJbW92YXBzICV4bW0wLCAoJXJjeCkKKwlhZGQgJDB4MTAsICVyY3gKKwlyZXQKKworX2tleV9leHBhbnNpb25fMTkyYToKKwlwc2h1ZmQgJDBiMDEwMTAxMDEsICV4bW0xLCAleG1tMQorCXNodWZwcyAkMGIwMDAxMDAwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlzaHVmcHMgJDBiMTAwMDExMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJcHhvciAleG1tMSwgJXhtbTAKKworCW1vdmFwcyAleG1tMiwgJXhtbTUKKwltb3ZhcHMgJXhtbTIsICV4bW02CisJcHNsbGRxICQ0LCAleG1tNQorCXBzaHVmZCAkMGIxMTExMTExMSwgJXhtbTAsICV4bW0zCisJcHhvciAleG1tMywgJXhtbTIKKwlweG9yICV4bW01LCAleG1tMgorCisJbW92YXBzICV4bW0wLCAleG1tMQorCXNodWZwcyAkMGIwMTAwMDEwMCwgJXhtbTAsICV4bW02CisJbW92YXBzICV4bW02LCAoJXJjeCkKKwlzaHVmcHMgJDBiMDEwMDExMTAsICV4bW0yLCAleG1tMQorCW1vdmFwcyAleG1tMSwgMTYoJXJjeCkKKwlhZGQgJDB4MjAsICVyY3gKKwlyZXQKKworX2tleV9leHBhbnNpb25fMTkyYjoKKwlwc2h1ZmQgJDBiMDEwMTAxMDEsICV4bW0xLCAleG1tMQorCXNodWZwcyAkMGIwMDAxMDAwMCwgJXhtbTAsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTAKKwlzaHVmcHMgJDBiMTAwMDExMDAsICV4bW0wLCAleG1tNAorCXB4b3IgJXhtbTQsICV4bW0wCisJcHhvciAleG1tMSwgJXhtbTAKKworCW1vdmFwcyAleG1tMiwgJXhtbTUKKwlwc2xsZHEgJDQsICV4bW01CisJcHNodWZkICQwYjExMTExMTExLCAleG1tMCwgJXhtbTMKKwlweG9yICV4bW0zLCAleG1tMgorCXB4b3IgJXhtbTUsICV4bW0yCisKKwltb3ZhcHMgJXhtbTAsICglcmN4KQorCWFkZCAkMHgxMCwgJXJjeAorCXJldAorCitfa2V5X2V4cGFuc2lvbl8yNTZiOgorCXBzaHVmZCAkMGIxMDEwMTAxMCwgJXhtbTEsICV4bW0xCisJc2h1ZnBzICQwYjAwMDEwMDAwLCAleG1tMiwgJXhtbTQKKwlweG9yICV4bW00LCAleG1tMgorCXNodWZwcyAkMGIxMDAwMTEwMCwgJXhtbTIsICV4bW00CisJcHhvciAleG1tNCwgJXhtbTIKKwlweG9yICV4bW0xLCAleG1tMgorCW1vdmFwcyAleG1tMiwgKCVyY3gpCisJYWRkICQweDEwLCAlcmN4CisJcmV0CisKKy8qCisgKiBpbnQgYWVzbmlfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmluX2tleSwKKyAqICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuKQorICovCitFTlRSWShhZXNuaV9zZXRfa2V5KQorCW1vdnVwcyAoJXJzaSksICV4bW0wCQkjIHVzZXIga2V5IChmaXJzdCAxNiBieXRlcykKKwltb3ZhcHMgJXhtbTAsICglcmRpKQorCWxlYSAweDEwKCVyZGkpLCAlcmN4CQkjIGtleSBhZGRyCisJbW92bCAlZWR4LCA0ODAoJXJkaSkKKwlweG9yICV4bW00LCAleG1tNAkJIyB4bW00IGlzIGFzc3VtZWQgMCBpbiBfa2V5X2V4cGFuc2lvbl94CisJY21wICQyNCwgJWRsCisJamIgLkxlbmNfa2V5MTI4CisJamUgLkxlbmNfa2V5MTkyCisJbW92dXBzIDB4MTAoJXJzaSksICV4bW0yCSMgb3RoZXIgdXNlciBrZXkKKwltb3ZhcHMgJXhtbTIsICglcmN4KQorCWFkZCAkMHgxMCwgJXJjeAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEsICV4bW0yLCAleG1tMQkjIHJvdW5kIDEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDAxCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MSwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwMQorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIsICV4bW0yLCAleG1tMQkjIHJvdW5kIDIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDAyCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MiwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwMgorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDQsICV4bW0yLCAleG1tMQkjIHJvdW5kIDMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDA0CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NCwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwNAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgsICV4bW0yLCAleG1tMQkjIHJvdW5kIDQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDA4CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4OCwgJXhtbTAsICV4bW0xCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwOAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEwLCAleG1tMiwgJXhtbTEJIyByb3VuZCA1CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgxMAorCWNhbGwgX2tleV9leHBhbnNpb25fMjU2YQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEwLCAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDEwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MjAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDYKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDIwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8yNTZhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MjAsICV4bW0wLCAleG1tMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MjAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0MCwgJXhtbTIsICV4bW0xCSMgcm91bmQgNworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4NDAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzI1NmEKKwlqbXAgLkxkZWNfa2V5CisuTGVuY19rZXkxOTI6CisJbW92cSAweDEwKCVyc2kpLCAleG1tMgkJIyBvdGhlciB1c2VyIGtleQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEsICV4bW0yLCAleG1tMQkjIHJvdW5kIDEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDAxCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MiwgJXhtbTIsICV4bW0xCSMgcm91bmQgMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4Y2EsIDB4MDIKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzE5MmIKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg0LCAleG1tMiwgJXhtbTEJIyByb3VuZCAzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjYSwgMHgwNAorCWNhbGwgX2tleV9leHBhbnNpb25fMTkyYQorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgsICV4bW0yLCAleG1tMQkjIHJvdW5kIDQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDA4CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MTAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDEwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MjAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDYKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDIwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJiCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NDAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDcKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDQwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJhCisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4ODAsICV4bW0yLCAleG1tMQkjIHJvdW5kIDgKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGNhLCAweDgwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xOTJiCisJam1wIC5MZGVjX2tleQorLkxlbmNfa2V5MTI4OgorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDEsICV4bW0wLCAleG1tMQkjIHJvdW5kIDEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDAxCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgyLCAleG1tMCwgJXhtbTEJIyByb3VuZCAyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgwMgorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NCwgJXhtbTAsICV4bW0xCSMgcm91bmQgMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MDQKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDgsICV4bW0wLCAleG1tMQkjIHJvdW5kIDQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDA4CisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHgxMCwgJXhtbTAsICV4bW0xCSMgcm91bmQgNQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4MTAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDIwLCAleG1tMCwgJXhtbTEJIyByb3VuZCA2CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgyMAorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4NDAsICV4bW0wLCAleG1tMQkjIHJvdW5kIDcKKwkuYnl0ZSAweDY2LCAweDBmLCAweDNhLCAweGRmLCAweGM4LCAweDQwCisJY2FsbCBfa2V5X2V4cGFuc2lvbl8xMjgKKwkjIGFlc2tleWdlbmFzc2lzdCAkMHg4MCwgJXhtbTAsICV4bW0xCSMgcm91bmQgOAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4M2EsIDB4ZGYsIDB4YzgsIDB4ODAKKwljYWxsIF9rZXlfZXhwYW5zaW9uXzEyOAorCSMgYWVza2V5Z2VuYXNzaXN0ICQweDFiLCAleG1tMCwgJXhtbTEJIyByb3VuZCA5CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgxYgorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisJIyBhZXNrZXlnZW5hc3Npc3QgJDB4MzYsICV4bW0wLCAleG1tMQkjIHJvdW5kIDEwCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzYSwgMHhkZiwgMHhjOCwgMHgzNgorCWNhbGwgX2tleV9leHBhbnNpb25fMTI4CisuTGRlY19rZXk6CisJc3ViICQweDEwLCAlcmN4CisJbW92YXBzICglcmRpKSwgJXhtbTAKKwltb3ZhcHMgKCVyY3gpLCAleG1tMQorCW1vdmFwcyAleG1tMCwgMjQwKCVyY3gpCisJbW92YXBzICV4bW0xLCAyNDAoJXJkaSkKKwlhZGQgJDB4MTAsICVyZGkKKwlsZWEgMjQwLTE2KCVyY3gpLCAlcnNpCisuYWxpZ24gNAorLkxkZWNfa2V5X2xvb3A6CisJbW92YXBzICglcmRpKSwgJXhtbTAKKwkjIGFlc2ltYyAleG1tMCwgJXhtbTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRiLCAweGM4CisJbW92YXBzICV4bW0xLCAoJXJzaSkKKwlhZGQgJDB4MTAsICVyZGkKKwlzdWIgJDB4MTAsICVyc2kKKwljbXAgJXJjeCwgJXJkaQorCWpiIC5MZGVjX2tleV9sb29wCisJeG9yICVyYXgsICVyYXgKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQorICovCitFTlRSWShhZXNuaV9lbmMpCisJbW92bCA0ODAoS0VZUCksIEtMRU4JCSMga2V5IGxlbmd0aAorCW1vdnVwcyAoSU5QKSwgU1RBVEUJCSMgaW5wdXQKKwljYWxsIF9hZXNuaV9lbmMxCisJbW92dXBzIFNUQVRFLCAoT1VUUCkJCSMgb3V0cHV0CisJcmV0CisKKy8qCisgKiBfYWVzbmlfZW5jMToJCWludGVybmFsIEFCSQorICogaW5wdXQ6CisgKglLRVlQOgkJa2V5IHN0cnVjdCBwb2ludGVyCisgKglLTEVOOgkJcm91bmQgY291bnQKKyAqCVNUQVRFOgkJaW5pdGlhbCBzdGF0ZSAoaW5wdXQpCisgKiBvdXRwdXQ6CisgKglTVEFURToJCWZpbmlhbCBzdGF0ZSAob3V0cHV0KQorICogY2hhbmdlZDoKKyAqCUtFWQorICoJVEtFWVAgKFQxKQorICovCitfYWVzbmlfZW5jMToKKwltb3ZhcHMgKEtFWVApLCBLRVkJCSMga2V5CisJbW92IEtFWVAsIFRLRVlQCisJcHhvciBLRVksIFNUQVRFCQkjIHJvdW5kIDAKKwlhZGQgJDB4MzAsIFRLRVlQCisJY21wICQyNCwgS0xFTgorCWpiIC5MZW5jMTI4CisJbGVhIDB4MjAoVEtFWVApLCBUS0VZUAorCWplIC5MZW5jMTkyCisJYWRkICQweDIwLCBUS0VZUAorCW1vdmFwcyAtMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIC0weDUwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKy5hbGlnbiA0CisuTGVuYzE5MjoKKwltb3ZhcHMgLTB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAtMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisuYWxpZ24gNAorLkxlbmMxMjg6CisJbW92YXBzIC0weDIwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgLTB4MTAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDEwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDQwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwltb3ZhcHMgMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJbW92YXBzIDB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCW1vdmFwcyAweDcwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmNsYXN0IEtFWSwgU1RBVEUJIyBsYXN0IHJvdW5kCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZCwgMHhjMgorCXJldAorCisvKgorICogX2Flc25pX2VuYzQ6CWludGVybmFsIEFCSQorICogaW5wdXQ6CisgKglLRVlQOgkJa2V5IHN0cnVjdCBwb2ludGVyCisgKglLTEVOOgkJcm91bmQgY291bnQKKyAqCVNUQVRFMToJCWluaXRpYWwgc3RhdGUgKGlucHV0KQorICoJU1RBVEUyCisgKglTVEFURTMKKyAqCVNUQVRFNAorICogb3V0cHV0OgorICoJU1RBVEUxOgkJZmluaWFsIHN0YXRlIChvdXRwdXQpCisgKglTVEFURTIKKyAqCVNUQVRFMworICoJU1RBVEU0CisgKiBjaGFuZ2VkOgorICoJS0VZCisgKglUS0VZUCAoVDEpCisgKi8KK19hZXNuaV9lbmM0OgorCW1vdmFwcyAoS0VZUCksIEtFWQkJIyBrZXkKKwltb3YgS0VZUCwgVEtFWVAKKwlweG9yIEtFWSwgU1RBVEUxCQkjIHJvdW5kIDAKKwlweG9yIEtFWSwgU1RBVEUyCisJcHhvciBLRVksIFNUQVRFMworCXB4b3IgS0VZLCBTVEFURTQKKwlhZGQgJDB4MzAsIFRLRVlQCisJY21wICQyNCwgS0xFTgorCWpiIC5MNGVuYzEyOAorCWxlYSAweDIwKFRLRVlQKSwgVEtFWVAKKwlqZSAuTDRlbmMxOTIKKwlhZGQgJDB4MjAsIFRLRVlQCisJbW92YXBzIC0weDYwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIC0weDUwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisjLmFsaWduIDQKKy5MNGVuYzE5MjoKKwltb3ZhcHMgLTB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgLTB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKyMuYWxpZ24gNAorLkw0ZW5jMTI4OgorCW1vdmFwcyAtMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAtMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDIwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZW5jIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhjMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlMgorCSMgYWVzZW5jIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhlYQorCSMgYWVzZW5jIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkYywgMHhmMgorCW1vdmFwcyAweDUwKFRLRVlQKSwgS0VZCisJIyBhZXNlbmMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGMyCisJIyBhZXNlbmMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGUyCisJIyBhZXNlbmMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGVhCisJIyBhZXNlbmMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRjLCAweGYyCisJbW92YXBzIDB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2VuYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4YzIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZTIKKwkjIGFlc2VuYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZWEKKwkjIGFlc2VuYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGMsIDB4ZjIKKwltb3ZhcHMgMHg3MChUS0VZUCksIEtFWQorCSMgYWVzZW5jbGFzdCBLRVksIFNUQVRFMQkjIGxhc3Qgcm91bmQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRkLCAweGMyCisJIyBhZXNlbmNsYXN0IEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZCwgMHhlMgorCSMgYWVzZW5jbGFzdCBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGQsIDB4ZWEKKwkjIGFlc2VuY2xhc3QgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRkLCAweGYyCisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2RlYyAoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCisgKi8KK0VOVFJZKGFlc25pX2RlYykKKwltb3YgNDgwKEtFWVApLCBLTEVOCQkjIGtleSBsZW5ndGgKKwlhZGQgJDI0MCwgS0VZUAorCW1vdnVwcyAoSU5QKSwgU1RBVEUJCSMgaW5wdXQKKwljYWxsIF9hZXNuaV9kZWMxCisJbW92dXBzIFNUQVRFLCAoT1VUUCkJCSNvdXRwdXQKKwlyZXQKKworLyoKKyAqIF9hZXNuaV9kZWMxOgkJaW50ZXJuYWwgQUJJCisgKiBpbnB1dDoKKyAqCUtFWVA6CQlrZXkgc3RydWN0IHBvaW50ZXIKKyAqCUtMRU46CQlrZXkgbGVuZ3RoCisgKglTVEFURToJCWluaXRpYWwgc3RhdGUgKGlucHV0KQorICogb3V0cHV0OgorICoJU1RBVEU6CQlmaW5pYWwgc3RhdGUgKG91dHB1dCkKKyAqIGNoYW5nZWQ6CisgKglLRVkKKyAqCVRLRVlQIChUMSkKKyAqLworX2Flc25pX2RlYzE6CisJbW92YXBzIChLRVlQKSwgS0VZCQkjIGtleQorCW1vdiBLRVlQLCBUS0VZUAorCXB4b3IgS0VZLCBTVEFURQkJIyByb3VuZCAwCisJYWRkICQweDMwLCBUS0VZUAorCWNtcCAkMjQsIEtMRU4KKwlqYiAuTGRlYzEyOAorCWxlYSAweDIwKFRLRVlQKSwgVEtFWVAKKwlqZSAuTGRlYzE5MgorCWFkZCAkMHgyMCwgVEtFWVAKKwltb3ZhcHMgLTB4NjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAtMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisuYWxpZ24gNAorLkxkZWMxOTI6CisJbW92YXBzIC0weDQwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgLTB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorLmFsaWduIDQKKy5MZGVjMTI4OgorCW1vdmFwcyAtMHgyMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIC0weDEwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHgxMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDMwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHg0MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJbW92YXBzIDB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCW1vdmFwcyAweDYwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwltb3ZhcHMgMHg3MChUS0VZUCksIEtFWQorCSMgYWVzZGVjbGFzdCBLRVksIFNUQVRFCQkjIGxhc3Qgcm91bmQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGMyCisJcmV0CisKKy8qCisgKiBfYWVzbmlfZGVjNDoJaW50ZXJuYWwgQUJJCisgKiBpbnB1dDoKKyAqCUtFWVA6CQlrZXkgc3RydWN0IHBvaW50ZXIKKyAqCUtMRU46CQlrZXkgbGVuZ3RoCisgKglTVEFURTE6CQlpbml0aWFsIHN0YXRlIChpbnB1dCkKKyAqCVNUQVRFMgorICoJU1RBVEUzCisgKglTVEFURTQKKyAqIG91dHB1dDoKKyAqCVNUQVRFMToJCWZpbmlhbCBzdGF0ZSAob3V0cHV0KQorICoJU1RBVEUyCisgKglTVEFURTMKKyAqCVNUQVRFNAorICogY2hhbmdlZDoKKyAqCUtFWQorICoJVEtFWVAgKFQxKQorICovCitfYWVzbmlfZGVjNDoKKwltb3ZhcHMgKEtFWVApLCBLRVkJCSMga2V5CisJbW92IEtFWVAsIFRLRVlQCisJcHhvciBLRVksIFNUQVRFMQkJIyByb3VuZCAwCisJcHhvciBLRVksIFNUQVRFMgorCXB4b3IgS0VZLCBTVEFURTMKKwlweG9yIEtFWSwgU1RBVEU0CisJYWRkICQweDMwLCBUS0VZUAorCWNtcCAkMjQsIEtMRU4KKwlqYiAuTDRkZWMxMjgKKwlsZWEgMHgyMChUS0VZUCksIFRLRVlQCisJamUgLkw0ZGVjMTkyCisJYWRkICQweDIwLCBUS0VZUAorCW1vdmFwcyAtMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAtMHg1MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorLmFsaWduIDQKKy5MNGRlYzE5MjoKKwltb3ZhcHMgLTB4NDAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgLTB4MzAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKy5hbGlnbiA0CisuTDRkZWMxMjg6CisJbW92YXBzIC0weDIwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIC0weDEwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDEwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4MjAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHgzMChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDQwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWMgS0VZLCBTVEFURTEKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGMyCisJIyBhZXNkZWMgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGUyCisJIyBhZXNkZWMgS0VZLCBTVEFURTMKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGVhCisJIyBhZXNkZWMgS0VZLCBTVEFURTQKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRlLCAweGYyCisJbW92YXBzIDB4NTAoVEtFWVApLCBLRVkKKwkjIGFlc2RlYyBLRVksIFNUQVRFMQorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4YzIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMgorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZTIKKwkjIGFlc2RlYyBLRVksIFNUQVRFMworCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZWEKKwkjIGFlc2RlYyBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGUsIDB4ZjIKKwltb3ZhcHMgMHg2MChUS0VZUCksIEtFWQorCSMgYWVzZGVjIEtFWSwgU1RBVEUxCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhjMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUyCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlMgorCSMgYWVzZGVjIEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhlYQorCSMgYWVzZGVjIEtFWSwgU1RBVEU0CisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZSwgMHhmMgorCW1vdmFwcyAweDcwKFRLRVlQKSwgS0VZCisJIyBhZXNkZWNsYXN0IEtFWSwgU1RBVEUxCSMgbGFzdCByb3VuZAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGYsIDB4YzIKKwkjIGFlc2RlY2xhc3QgS0VZLCBTVEFURTIKKwkuYnl0ZSAweDY2LCAweDBmLCAweDM4LCAweGRmLCAweGUyCisJIyBhZXNkZWNsYXN0IEtFWSwgU1RBVEUzCisJLmJ5dGUgMHg2NiwgMHgwZiwgMHgzOCwgMHhkZiwgMHhlYQorCSMgYWVzZGVjbGFzdCBLRVksIFNUQVRFNAorCS5ieXRlIDB4NjYsIDB4MGYsIDB4MzgsIDB4ZGYsIDB4ZjIKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfZWNiX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmRzdCwgdTggKnNyYywKKyAqCQkgICAgICBzaXplX3QgbGVuKQorICovCitFTlRSWShhZXNuaV9lY2JfZW5jKQorCXRlc3QgTEVOLCBMRU4JCSMgY2hlY2sgbGVuZ3RoCisJanogLkxlY2JfZW5jX3JldAorCW1vdiA0ODAoS0VZUCksIEtMRU4KKwljbXAgJDE2LCBMRU4KKwlqYiAuTGVjYl9lbmNfcmV0CisJY21wICQ2NCwgTEVOCisJamIgLkxlY2JfZW5jX2xvb3AxCisuYWxpZ24gNAorLkxlY2JfZW5jX2xvb3A0OgorCW1vdnVwcyAoSU5QKSwgU1RBVEUxCisJbW92dXBzIDB4MTAoSU5QKSwgU1RBVEUyCisJbW92dXBzIDB4MjAoSU5QKSwgU1RBVEUzCisJbW92dXBzIDB4MzAoSU5QKSwgU1RBVEU0CisJY2FsbCBfYWVzbmlfZW5jNAorCW1vdnVwcyBTVEFURTEsIChPVVRQKQorCW1vdnVwcyBTVEFURTIsIDB4MTAoT1VUUCkKKwltb3Z1cHMgU1RBVEUzLCAweDIwKE9VVFApCisJbW92dXBzIFNUQVRFNCwgMHgzMChPVVRQKQorCXN1YiAkNjQsIExFTgorCWFkZCAkNjQsIElOUAorCWFkZCAkNjQsIE9VVFAKKwljbXAgJDY0LCBMRU4KKwlqZ2UgLkxlY2JfZW5jX2xvb3A0CisJY21wICQxNiwgTEVOCisJamIgLkxlY2JfZW5jX3JldAorLmFsaWduIDQKKy5MZWNiX2VuY19sb29wMToKKwltb3Z1cHMgKElOUCksIFNUQVRFMQorCWNhbGwgX2Flc25pX2VuYzEKKwltb3Z1cHMgU1RBVEUxLCAoT1VUUCkKKwlzdWIgJDE2LCBMRU4KKwlhZGQgJDE2LCBJTlAKKwlhZGQgJDE2LCBPVVRQCisJY21wICQxNiwgTEVOCisJamdlIC5MZWNiX2VuY19sb29wMQorLkxlY2JfZW5jX3JldDoKKwlyZXQKKworLyoKKyAqIHZvaWQgYWVzbmlfZWNiX2RlYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmRzdCwgdTggKnNyYywKKyAqCQkgICAgICBzaXplX3QgbGVuKTsKKyAqLworRU5UUlkoYWVzbmlfZWNiX2RlYykKKwl0ZXN0IExFTiwgTEVOCisJanogLkxlY2JfZGVjX3JldAorCW1vdiA0ODAoS0VZUCksIEtMRU4KKwlhZGQgJDI0MCwgS0VZUAorCWNtcCAkMTYsIExFTgorCWpiIC5MZWNiX2RlY19yZXQKKwljbXAgJDY0LCBMRU4KKwlqYiAuTGVjYl9kZWNfbG9vcDEKKy5hbGlnbiA0CisuTGVjYl9kZWNfbG9vcDQ6CisJbW92dXBzIChJTlApLCBTVEFURTEKKwltb3Z1cHMgMHgxMChJTlApLCBTVEFURTIKKwltb3Z1cHMgMHgyMChJTlApLCBTVEFURTMKKwltb3Z1cHMgMHgzMChJTlApLCBTVEFURTQKKwljYWxsIF9hZXNuaV9kZWM0CisJbW92dXBzIFNUQVRFMSwgKE9VVFApCisJbW92dXBzIFNUQVRFMiwgMHgxMChPVVRQKQorCW1vdnVwcyBTVEFURTMsIDB4MjAoT1VUUCkKKwltb3Z1cHMgU1RBVEU0LCAweDMwKE9VVFApCisJc3ViICQ2NCwgTEVOCisJYWRkICQ2NCwgSU5QCisJYWRkICQ2NCwgT1VUUAorCWNtcCAkNjQsIExFTgorCWpnZSAuTGVjYl9kZWNfbG9vcDQKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGVjYl9kZWNfcmV0CisuYWxpZ24gNAorLkxlY2JfZGVjX2xvb3AxOgorCW1vdnVwcyAoSU5QKSwgU1RBVEUxCisJY2FsbCBfYWVzbmlfZGVjMQorCW1vdnVwcyBTVEFURTEsIChPVVRQKQorCXN1YiAkMTYsIExFTgorCWFkZCAkMTYsIElOUAorCWFkZCAkMTYsIE9VVFAKKwljbXAgJDE2LCBMRU4KKwlqZ2UgLkxlY2JfZGVjX2xvb3AxCisuTGVjYl9kZWNfcmV0OgorCXJldAorCisvKgorICogdm9pZCBhZXNuaV9jYmNfZW5jKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCBjb25zdCB1OCAqZHN0LCB1OCAqc3JjLAorICoJCSAgICAgIHNpemVfdCBsZW4sIHU4ICppdikKKyAqLworRU5UUlkoYWVzbmlfY2JjX2VuYykKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGNiY19lbmNfcmV0CisJbW92IDQ4MChLRVlQKSwgS0xFTgorCW1vdnVwcyAoSVZQKSwgU1RBVEUJIyBsb2FkIGl2IGFzIGluaXRpYWwgc3RhdGUKKy5hbGlnbiA0CisuTGNiY19lbmNfbG9vcDoKKwltb3Z1cHMgKElOUCksIElOCSMgbG9hZCBpbnB1dAorCXB4b3IgSU4sIFNUQVRFCisJY2FsbCBfYWVzbmlfZW5jMQorCW1vdnVwcyBTVEFURSwgKE9VVFApCSMgc3RvcmUgb3V0cHV0CisJc3ViICQxNiwgTEVOCisJYWRkICQxNiwgSU5QCisJYWRkICQxNiwgT1VUUAorCWNtcCAkMTYsIExFTgorCWpnZSAuTGNiY19lbmNfbG9vcAorCW1vdnVwcyBTVEFURSwgKElWUCkKKy5MY2JjX2VuY19yZXQ6CisJcmV0CisKKy8qCisgKiB2b2lkIGFlc25pX2NiY19kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIGNvbnN0IHU4ICpkc3QsIHU4ICpzcmMsCisgKgkJICAgICAgc2l6ZV90IGxlbiwgdTggKml2KQorICovCitFTlRSWShhZXNuaV9jYmNfZGVjKQorCWNtcCAkMTYsIExFTgorCWpiIC5MY2JjX2RlY19yZXQKKwltb3YgNDgwKEtFWVApLCBLTEVOCisJYWRkICQyNDAsIEtFWVAKKwltb3Z1cHMgKElWUCksIElWCisJY21wICQ2NCwgTEVOCisJamIgLkxjYmNfZGVjX2xvb3AxCisuYWxpZ24gNAorLkxjYmNfZGVjX2xvb3A0OgorCW1vdnVwcyAoSU5QKSwgSU4xCisJbW92YXBzIElOMSwgU1RBVEUxCisJbW92dXBzIDB4MTAoSU5QKSwgSU4yCisJbW92YXBzIElOMiwgU1RBVEUyCisJbW92dXBzIDB4MjAoSU5QKSwgSU4zCisJbW92YXBzIElOMywgU1RBVEUzCisJbW92dXBzIDB4MzAoSU5QKSwgSU40CisJbW92YXBzIElONCwgU1RBVEU0CisJY2FsbCBfYWVzbmlfZGVjNAorCXB4b3IgSVYsIFNUQVRFMQorCXB4b3IgSU4xLCBTVEFURTIKKwlweG9yIElOMiwgU1RBVEUzCisJcHhvciBJTjMsIFNUQVRFNAorCW1vdmFwcyBJTjQsIElWCisJbW92dXBzIFNUQVRFMSwgKE9VVFApCisJbW92dXBzIFNUQVRFMiwgMHgxMChPVVRQKQorCW1vdnVwcyBTVEFURTMsIDB4MjAoT1VUUCkKKwltb3Z1cHMgU1RBVEU0LCAweDMwKE9VVFApCisJc3ViICQ2NCwgTEVOCisJYWRkICQ2NCwgSU5QCisJYWRkICQ2NCwgT1VUUAorCWNtcCAkNjQsIExFTgorCWpnZSAuTGNiY19kZWNfbG9vcDQKKwljbXAgJDE2LCBMRU4KKwlqYiAuTGNiY19kZWNfcmV0CisuYWxpZ24gNAorLkxjYmNfZGVjX2xvb3AxOgorCW1vdnVwcyAoSU5QKSwgSU4KKwltb3ZhcHMgSU4sIFNUQVRFCisJY2FsbCBfYWVzbmlfZGVjMQorCXB4b3IgSVYsIFNUQVRFCisJbW92dXBzIFNUQVRFLCAoT1VUUCkKKwltb3ZhcHMgSU4sIElWCisJc3ViICQxNiwgTEVOCisJYWRkICQxNiwgSU5QCisJYWRkICQxNiwgT1VUUAorCWNtcCAkMTYsIExFTgorCWpnZSAuTGNiY19kZWNfbG9vcDEKKwltb3Z1cHMgSVYsIChJVlApCisuTGNiY19kZWNfcmV0OgorCXJldApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvY3J5cHRvL2Flc25pLWludGVsX2dsdWUuYyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhZjBhZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2NyeXB0by9hZXNuaS1pbnRlbF9nbHVlLmMKQEAgLTAsMCArMSw0NjEgQEAKKy8qCisgKiBTdXBwb3J0IGZvciBJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zLiBUaGlzIGZpbGUgY29udGFpbnMgZ2x1ZQorICogY29kZSwgdGhlIHJlYWwgQUVTIGltcGxlbWVudGF0aW9uIGlzIGluIGludGVsLWFlc19hc20uUy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIEludGVsIENvcnAuCisgKiAgICBBdXRob3I6IEh1YW5nIFlpbmcgPHlpbmcuaHVhbmdAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2NyeXB0ZC5oPgorI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CisjaW5jbHVkZSA8YXNtL2Flcy5oPgorCitzdHJ1Y3QgYXN5bmNfYWVzX2N0eCB7CisJc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfdGZtOworfTsKKworI2RlZmluZSBBRVNOSV9BTElHTgkxNgorI2RlZmluZSBBRVNfQkxPQ0tfTUFTSwkofihBRVNfQkxPQ0tfU0laRS0xKSkKKworYXNtbGlua2FnZSBpbnQgYWVzbmlfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgY29uc3QgdTggKmluX2tleSwKKwkJCSAgICAgdW5zaWduZWQgaW50IGtleV9sZW4pOworYXNtbGlua2FnZSB2b2lkIGFlc25pX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgY29uc3QgdTggKmluKTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9kZWMoc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHgsIHU4ICpvdXQsCisJCQkgIGNvbnN0IHU4ICppbik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfZWNiX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IGxlbik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfZWNiX2RlYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IGxlbik7Cithc21saW5rYWdlIHZvaWQgYWVzbmlfY2JjX2VuYyhzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKm91dCwKKwkJCSAgICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IGxlbiwgdTggKml2KTsKK2FzbWxpbmthZ2Ugdm9pZCBhZXNuaV9jYmNfZGVjKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4LCB1OCAqb3V0LAorCQkJICAgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbGVuLCB1OCAqaXYpOworCitzdGF0aWMgaW5saW5lIGludCBrZXJuZWxfZnB1X3VzaW5nKHZvaWQpCit7CisJaWYgKGluX2ludGVycnVwdCgpICYmICEocmVhZF9jcjAoKSAmIFg4Nl9DUjBfVFMpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmFlc19jdHgodm9pZCAqcmF3X2N0eCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylyYXdfY3R4OworCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSBBRVNOSV9BTElHTjsKKworCWlmIChhbGlnbiA8PSBjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQoKSkKKwkJYWxpZ24gPSAxOworCXJldHVybiAoc3RydWN0IGNyeXB0b19hZXNfY3R4ICopQUxJR04oYWRkciwgYWxpZ24pOworfQorCitzdGF0aWMgaW50IGFlc19zZXRfa2V5X2NvbW1vbihzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB2b2lkICpyYXdfY3R4LAorCQkJICAgICAgY29uc3QgdTggKmluX2tleSwgdW5zaWduZWQgaW50IGtleV9sZW4pCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KHJhd19jdHgpOworCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7CisJaW50IGVycjsKKworCWlmIChrZXlfbGVuICE9IEFFU19LRVlTSVpFXzEyOCAmJiBrZXlfbGVuICE9IEFFU19LRVlTSVpFXzE5MiAmJgorCSAgICBrZXlfbGVuICE9IEFFU19LRVlTSVpFXzI1NikgeworCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpCisJCWVyciA9IGNyeXB0b19hZXNfZXhwYW5kX2tleShjdHgsIGluX2tleSwga2V5X2xlbik7CisJZWxzZSB7CisJCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwkJZXJyID0gYWVzbmlfc2V0X2tleShjdHgsIGluX2tleSwga2V5X2xlbik7CisJCWtlcm5lbF9mcHVfZW5kKCk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhZXNfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LAorCQkgICAgICAgdW5zaWduZWQgaW50IGtleV9sZW4pCit7CisJcmV0dXJuIGFlc19zZXRfa2V5X2NvbW1vbih0Zm0sIGNyeXB0b190Zm1fY3R4KHRmbSksIGluX2tleSwga2V5X2xlbik7Cit9CisKK3N0YXRpYyB2b2lkIGFlc19lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b190Zm1fY3R4KHRmbSkpOworCisJaWYgKGtlcm5lbF9mcHVfdXNpbmcoKSkKKwkJY3J5cHRvX2Flc19lbmNyeXB0X3g4NihjdHgsIGRzdCwgc3JjKTsKKwllbHNlIHsKKwkJa2VybmVsX2ZwdV9iZWdpbigpOworCQlhZXNuaV9lbmMoY3R4LCBkc3QsIHNyYyk7CisJCWtlcm5lbF9mcHVfZW5kKCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fdGZtX2N0eCh0Zm0pKTsKKworCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpCisJCWNyeXB0b19hZXNfZGVjcnlwdF94ODYoY3R4LCBkc3QsIHNyYyk7CisJZWxzZSB7CisJCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwkJYWVzbmlfZGVjKGN0eCwgZHN0LCBzcmMpOworCQlrZXJuZWxfZnB1X2VuZCgpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFlc25pX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0gImFlcyIsCisJLmNyYV9kcml2ZXJfbmFtZQk9ICJhZXMtYWVzbmkiLAorCS5jcmFfcHJpb3JpdHkJCT0gMzAwLAorCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCkrQUVTTklfQUxJR04tMSwKKwkuY3JhX2FsaWdubWFzawkJPSAwLAorCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPSBMSVNUX0hFQURfSU5JVChhZXNuaV9hbGcuY3JhX2xpc3QpLAorCS5jcmFfdQk9IHsKKwkJLmNpcGhlcgk9IHsKKwkJCS5jaWFfbWluX2tleXNpemUJPSBBRVNfTUlOX0tFWV9TSVpFLAorCQkJLmNpYV9tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkuY2lhX3NldGtleQkJPSBhZXNfc2V0X2tleSwKKwkJCS5jaWFfZW5jcnlwdAkJPSBhZXNfZW5jcnlwdCwKKwkJCS5jaWFfZGVjcnlwdAkJPSBhZXNfZGVjcnlwdAorCQl9CisJfQorfTsKKworc3RhdGljIGludCBlY2JfZW5jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKwlpbnQgZXJyOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJZXJyID0gYmxrY2lwaGVyX3dhbGtfdmlydChkZXNjLCAmd2Fsayk7CisKKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLm5ieXRlcykpIHsKKwkJYWVzbmlfZWNiX2VuYyhjdHgsIHdhbGsuZHN0LnZpcnQuYWRkciwgd2Fsay5zcmMudmlydC5hZGRyLAorCQkJICAgICAgbmJ5dGVzICYgQUVTX0JMT0NLX01BU0spOworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQllcnIgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsICZ3YWxrLCBuYnl0ZXMpOworCX0KKwlrZXJuZWxfZnB1X2VuZCgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBlY2JfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBjcnlwdG9fYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKwlpbnQgZXJyOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJZXJyID0gYmxrY2lwaGVyX3dhbGtfdmlydChkZXNjLCAmd2Fsayk7CisKKwlrZXJuZWxfZnB1X2JlZ2luKCk7CisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLm5ieXRlcykpIHsKKwkJYWVzbmlfZWNiX2RlYyhjdHgsIHdhbGsuZHN0LnZpcnQuYWRkciwgd2Fsay5zcmMudmlydC5hZGRyLAorCQkJICAgICAgbmJ5dGVzICYgQUVTX0JMT0NLX01BU0spOworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQllcnIgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsICZ3YWxrLCBuYnl0ZXMpOworCX0KKwlrZXJuZWxfZnB1X2VuZCgpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGJsa19lY2JfYWxnID0geworCS5jcmFfbmFtZQkJPSAiX19lY2ItYWVzLWFlc25pIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0gIl9fZHJpdmVyLWVjYi1hZXMtYWVzbmkiLAorCS5jcmFfcHJpb3JpdHkJCT0gMCwKKwkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX2Flc19jdHgpK0FFU05JX0FMSUdOLTEsCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkuY3JhX3R5cGUJCT0gJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPSBUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0gTElTVF9IRUFEX0lOSVQoYmxrX2VjYl9hbGcuY3JhX2xpc3QpLAorCS5jcmFfdSA9IHsKKwkJLmJsa2NpcGhlciA9IHsKKwkJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJLnNldGtleQkJPSBhZXNfc2V0X2tleSwKKwkJCS5lbmNyeXB0CT0gZWNiX2VuY3J5cHQsCisJCQkuZGVjcnlwdAk9IGVjYl9kZWNyeXB0LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IGNiY19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSkpOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCWludCBlcnI7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwllcnIgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsICZ3YWxrKTsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGsubmJ5dGVzKSkgeworCQlhZXNuaV9jYmNfZW5jKGN0eCwgd2Fsay5kc3QudmlydC5hZGRyLCB3YWxrLnNyYy52aXJ0LmFkZHIsCisJCQkgICAgICBuYnl0ZXMgJiBBRVNfQkxPQ0tfTUFTSywgd2Fsay5pdik7CisJCW5ieXRlcyAmPSBBRVNfQkxPQ0tfU0laRSAtIDE7CisJCWVyciA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgJndhbGssIG5ieXRlcyk7CisJfQorCWtlcm5lbF9mcHVfZW5kKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNiY19kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0b19hZXNfY3R4ICpjdHggPSBhZXNfY3R4KGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSkpOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCWludCBlcnI7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwllcnIgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsICZ3YWxrKTsKKworCWtlcm5lbF9mcHVfYmVnaW4oKTsKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGsubmJ5dGVzKSkgeworCQlhZXNuaV9jYmNfZGVjKGN0eCwgd2Fsay5kc3QudmlydC5hZGRyLCB3YWxrLnNyYy52aXJ0LmFkZHIsCisJCQkgICAgICBuYnl0ZXMgJiBBRVNfQkxPQ0tfTUFTSywgd2Fsay5pdik7CisJCW5ieXRlcyAmPSBBRVNfQkxPQ0tfU0laRSAtIDE7CisJCWVyciA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgJndhbGssIG5ieXRlcyk7CisJfQorCWtlcm5lbF9mcHVfZW5kKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYmxrX2NiY19hbGcgPSB7CisJLmNyYV9uYW1lCQk9ICJfX2NiYy1hZXMtYWVzbmkiLAorCS5jcmFfZHJpdmVyX25hbWUJPSAiX19kcml2ZXItY2JjLWFlcy1hZXNuaSIsCisJLmNyYV9wcmlvcml0eQkJPSAwLAorCS5jcmFfZmxhZ3MJCT0gQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPSBBRVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0gc2l6ZW9mKHN0cnVjdCBjcnlwdG9fYWVzX2N0eCkrQUVTTklfQUxJR04tMSwKKwkuY3JhX2FsaWdubWFzawkJPSAwLAorCS5jcmFfdHlwZQkJPSAmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPSBMSVNUX0hFQURfSU5JVChibGtfY2JjX2FsZy5jcmFfbGlzdCksCisJLmNyYV91ID0geworCQkuYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkuc2V0a2V5CQk9IGFlc19zZXRfa2V5LAorCQkJLmVuY3J5cHQJPSBjYmNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CT0gY2JjX2RlY3J5cHQsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBpbnQgYWJsa19zZXRfa2V5KHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtLCBjb25zdCB1OCAqa2V5LAorCQkJdW5zaWduZWQgaW50IGtleV9sZW4pCit7CisJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b19hYmxrY2lwaGVyX2N0eCh0Zm0pOworCisJcmV0dXJuIGNyeXB0b19hYmxrY2lwaGVyX3NldGtleSgmY3R4LT5jcnlwdGRfdGZtLT5iYXNlLCBrZXksIGtleV9sZW4pOworfQorCitzdGF0aWMgaW50IGFibGtfZW5jcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0gPSBjcnlwdG9fYWJsa2NpcGhlcl9yZXF0Zm0ocmVxKTsKKwlzdHJ1Y3QgYXN5bmNfYWVzX2N0eCAqY3R4ID0gY3J5cHRvX2FibGtjaXBoZXJfY3R4KHRmbSk7CisKKwlpZiAoa2VybmVsX2ZwdV91c2luZygpKSB7CisJCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmNyeXB0ZF9yZXEgPQorCQkJYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOworCQltZW1jcHkoY3J5cHRkX3JlcSwgcmVxLCBzaXplb2YoKnJlcSkpOworCQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbShjcnlwdGRfcmVxLCAmY3R4LT5jcnlwdGRfdGZtLT5iYXNlKTsKKwkJcmV0dXJuIGNyeXB0b19hYmxrY2lwaGVyX2VuY3J5cHQoY3J5cHRkX3JlcSk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2M7CisJCWRlc2MudGZtID0gY3J5cHRkX2FibGtjaXBoZXJfY2hpbGQoY3R4LT5jcnlwdGRfdGZtKTsKKwkJZGVzYy5pbmZvID0gcmVxLT5pbmZvOworCQlkZXNjLmZsYWdzID0gMDsKKwkJcmV0dXJuIGNyeXB0b19ibGtjaXBoZXJfY3J0KGRlc2MudGZtKS0+ZW5jcnlwdCgKKwkJCSZkZXNjLCByZXEtPmRzdCwgcmVxLT5zcmMsIHJlcS0+bmJ5dGVzKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWJsa19kZWNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKnRmbSA9IGNyeXB0b19hYmxrY2lwaGVyX3JlcXRmbShyZXEpOworCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgodGZtKTsKKworCWlmIChrZXJuZWxfZnB1X3VzaW5nKCkpIHsKKwkJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqY3J5cHRkX3JlcSA9CisJCQlhYmxrY2lwaGVyX3JlcXVlc3RfY3R4KHJlcSk7CisJCW1lbWNweShjcnlwdGRfcmVxLCByZXEsIHNpemVvZigqcmVxKSk7CisJCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfdGZtKGNyeXB0ZF9yZXEsICZjdHgtPmNyeXB0ZF90Zm0tPmJhc2UpOworCQlyZXR1cm4gY3J5cHRvX2FibGtjaXBoZXJfZGVjcnlwdChjcnlwdGRfcmVxKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYzsKKwkJZGVzYy50Zm0gPSBjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZChjdHgtPmNyeXB0ZF90Zm0pOworCQlkZXNjLmluZm8gPSByZXEtPmluZm87CisJCWRlc2MuZmxhZ3MgPSAwOworCQlyZXR1cm4gY3J5cHRvX2Jsa2NpcGhlcl9jcnQoZGVzYy50Zm0pLT5kZWNyeXB0KAorCQkJJmRlc2MsIHJlcS0+ZHN0LCByZXEtPnNyYywgcmVxLT5uYnl0ZXMpOworCX0KK30KKworc3RhdGljIHZvaWQgYWJsa19leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGFzeW5jX2Flc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwljcnlwdGRfZnJlZV9hYmxrY2lwaGVyKGN0eC0+Y3J5cHRkX3RmbSk7Cit9CisKK3N0YXRpYyB2b2lkIGFibGtfaW5pdF9jb21tb24oc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkJCSAgICAgc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfdGZtKQoreworCXN0cnVjdCBhc3luY19hZXNfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3R4LT5jcnlwdGRfdGZtID0gY3J5cHRkX3RmbTsKKwl0Zm0tPmNydF9hYmxrY2lwaGVyLnJlcXNpemUgPSBzaXplb2Yoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCkgKworCQljcnlwdG9fYWJsa2NpcGhlcl9yZXFzaXplKCZjcnlwdGRfdGZtLT5iYXNlKTsKK30KKworc3RhdGljIGludCBhYmxrX2VjYl9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpjcnlwdGRfdGZtOworCisJY3J5cHRkX3RmbSA9IGNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKCJfX2RyaXZlci1lY2ItYWVzLWFlc25pIiwgMCwgMCk7CisJaWYgKElTX0VSUihjcnlwdGRfdGZtKSkKKwkJcmV0dXJuIFBUUl9FUlIoY3J5cHRkX3RmbSk7CisJYWJsa19pbml0X2NvbW1vbih0Zm0sIGNyeXB0ZF90Zm0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWJsa19lY2JfYWxnID0geworCS5jcmFfbmFtZQkJPSAiZWNiKGFlcykiLAorCS5jcmFfZHJpdmVyX25hbWUJPSAiZWNiLWFlcy1hZXNuaSIsCisJLmNyYV9wcmlvcml0eQkJPSA0MDAsCisJLmNyYV9mbGFncwkJPSBDUllQVE9fQUxHX1RZUEVfQUJMS0NJUEhFUnxDUllQVE9fQUxHX0FTWU5DLAorCS5jcmFfYmxvY2tzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQkJPSBzaXplb2Yoc3RydWN0IGFzeW5jX2Flc19jdHgpLAorCS5jcmFfYWxpZ25tYXNrCQk9IDAsCisJLmNyYV90eXBlCQk9ICZjcnlwdG9fYWJsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9IFRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPSBMSVNUX0hFQURfSU5JVChhYmxrX2VjYl9hbGcuY3JhX2xpc3QpLAorCS5jcmFfaW5pdAkJPSBhYmxrX2VjYl9pbml0LAorCS5jcmFfZXhpdAkJPSBhYmxrX2V4aXQsCisJLmNyYV91ID0geworCQkuYWJsa2NpcGhlciA9IHsKKwkJCS5taW5fa2V5c2l6ZQk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJPSBBRVNfTUFYX0tFWV9TSVpFLAorCQkJLnNldGtleQkJPSBhYmxrX3NldF9rZXksCisJCQkuZW5jcnlwdAk9IGFibGtfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CT0gYWJsa19kZWNyeXB0LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IGFibGtfY2JjX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF90Zm07CisKKwljcnlwdGRfdGZtID0gY3J5cHRkX2FsbG9jX2FibGtjaXBoZXIoIl9fZHJpdmVyLWNiYy1hZXMtYWVzbmkiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKGNyeXB0ZF90Zm0pKQorCQlyZXR1cm4gUFRSX0VSUihjcnlwdGRfdGZtKTsKKwlhYmxrX2luaXRfY29tbW9uKHRmbSwgY3J5cHRkX3RmbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhYmxrX2NiY19hbGcgPSB7CisJLmNyYV9uYW1lCQk9ICJjYmMoYWVzKSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9ICJjYmMtYWVzLWFlc25pIiwKKwkuY3JhX3ByaW9yaXR5CQk9IDQwMCwKKwkuY3JhX2ZsYWdzCQk9IENSWVBUT19BTEdfVFlQRV9BQkxLQ0lQSEVSfENSWVBUT19BTEdfQVNZTkMsCisJLmNyYV9ibG9ja3NpemUJCT0gQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9IHNpemVvZihzdHJ1Y3QgYXN5bmNfYWVzX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0gMCwKKwkuY3JhX3R5cGUJCT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0gVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9IExJU1RfSEVBRF9JTklUKGFibGtfY2JjX2FsZy5jcmFfbGlzdCksCisJLmNyYV9pbml0CQk9IGFibGtfY2JjX2luaXQsCisJLmNyYV9leGl0CQk9IGFibGtfZXhpdCwKKwkuY3JhX3UgPSB7CisJCS5hYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCT0gQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkuaXZzaXplCQk9IEFFU19CTE9DS19TSVpFLAorCQkJLnNldGtleQkJPSBhYmxrX3NldF9rZXksCisJCQkuZW5jcnlwdAk9IGFibGtfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CT0gYWJsa19kZWNyeXB0LAorCQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZXNuaV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWlmICghY3B1X2hhc19hZXMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnRlbCBBRVMtTkkgaW5zdHJ1Y3Rpb25zIGFyZSBub3QgZGV0ZWN0ZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWVzbmlfYWxnKSkpCisJCWdvdG8gYWVzX2VycjsKKwlpZiAoKGVyciA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmJsa19lY2JfYWxnKSkpCisJCWdvdG8gYmxrX2VjYl9lcnI7CisJaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZibGtfY2JjX2FsZykpKQorCQlnb3RvIGJsa19jYmNfZXJyOworCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWJsa19lY2JfYWxnKSkpCisJCWdvdG8gYWJsa19lY2JfZXJyOworCWlmICgoZXJyID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWJsa19jYmNfYWxnKSkpCisJCWdvdG8gYWJsa19jYmNfZXJyOworCisJcmV0dXJuIGVycjsKKworYWJsa19jYmNfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWJsa19lY2JfYWxnKTsKK2FibGtfZWNiX2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmJsa19jYmNfYWxnKTsKK2Jsa19jYmNfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYmxrX2VjYl9hbGcpOworYmxrX2VjYl9lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhZXNuaV9hbGcpOworYWVzX2VycjoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWVzbmlfZXhpdCh2b2lkKQoreworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWJsa19jYmNfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFibGtfZWNiX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfY2JjX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZibGtfZWNiX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhZXNuaV9hbGcpOworfQorCittb2R1bGVfaW5pdChhZXNuaV9pbml0KTsKK21vZHVsZV9leGl0KGFlc25pX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlJpam5kYWVsIChBRVMpIENpcGhlciBBbGdvcml0aG0sIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMgb3B0aW1pemVkIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoImFlcyIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggNWEwZDc2ZC4uOGVmODg3NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC01NTcsNyArNTU3LDcgQEAKIAkucXVhZCBzeXMzMl9vbGR1bmFtZQogCS5xdWFkIHN5c191bWFzawkJLyogNjAgKi8KIAkucXVhZCBzeXNfY2hyb290Ci0JLnF1YWQgc3lzMzJfdXN0YXQKKwkucXVhZCBjb21wYXRfc3lzX3VzdGF0CiAJLnF1YWQgc3lzX2R1cDIKIAkucXVhZCBzeXNfZ2V0cHBpZAogCS5xdWFkIHN5c19nZXRwZ3JwCQkvKiA2NSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jIGIvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jCmluZGV4IDZjMGQ3ZjYuLmVmYWM5MmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYworKysgYi9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMKQEAgLTYzOCwyOCArNjM4LDYgQEAKIAlyZXR1cm4gZXJyID8gLUVGQVVMVCA6IDA7CiB9CiAKLWxvbmcgc3lzMzJfdXN0YXQodW5zaWduZWQgZGV2LCBzdHJ1Y3QgdXN0YXQzMiBfX3VzZXIgKnUzMnApCi17Ci0Jc3RydWN0IHVzdGF0IHU7Ci0JbW1fc2VnbWVudF90IHNlZzsKLQlpbnQgcmV0OwotCi0Jc2VnID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JcmV0ID0gc3lzX3VzdGF0KGRldiwgKHN0cnVjdCB1c3RhdCBfX3VzZXIgKikmdSk7Ci0Jc2V0X2ZzKHNlZyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHUzMnAsIHNpemVvZihzdHJ1Y3QgdXN0YXQzMikpIHx8Ci0JICAgIF9fcHV0X3VzZXIoKF9fdTMyKSB1LmZfdGZyZWUsICZ1MzJwLT5mX3RmcmVlKSB8fAotCSAgICBfX3B1dF91c2VyKChfX3UzMikgdS5mX3Rpbm9kZSwgJnUzMnAtPmZfdGZyZWUpIHx8Ci0JICAgIF9fY29weV90b191c2VyKCZ1MzJwLT5mX2ZuYW1lLCB1LmZfZm5hbWUsIHNpemVvZih1LmZfZm5hbWUpKSB8fAotCSAgICBfX2NvcHlfdG9fdXNlcigmdTMycC0+Zl9mcGFjaywgdS5mX2ZwYWNrLCBzaXplb2YodS5mX2ZwYWNrKSkpCi0JCXJldCA9IC1FRkFVTFQ7Ci0JcmV0dXJuIHJldDsKLX0KLQogYXNtbGlua2FnZSBsb25nIHN5czMyX2V4ZWN2ZShjaGFyIF9fdXNlciAqbmFtZSwgY29tcGF0X3VwdHJfdCBfX3VzZXIgKmFyZ3YsCiAJCQkgICAgIGNvbXBhdF91cHRyX3QgX191c2VyICplbnZwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Flcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA1NDVhMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Flcy5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpZm5kZWYgQVNNX1g4Nl9BRVNfSAorI2RlZmluZSBBU01fWDg2X0FFU19ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisKK3ZvaWQgY3J5cHRvX2Flc19lbmNyeXB0X3g4NihzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKmRzdCwKKwkJCSAgICBjb25zdCB1OCAqc3JjKTsKK3ZvaWQgY3J5cHRvX2Flc19kZWNyeXB0X3g4NihzdHJ1Y3QgY3J5cHRvX2Flc19jdHggKmN0eCwgdTggKmRzdCwKKwkJCSAgICBjb25zdCB1OCAqc3JjKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IDczMDFlNjAuLjBiZWJhMGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKQEAgLTIxMyw2ICsyMTMsNyBAQAogI2RlZmluZSBjcHVfaGFzX3htbQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTSkKICNkZWZpbmUgY3B1X2hhc194bW0yCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMikKICNkZWZpbmUgY3B1X2hhc194bW0zCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMykKKyNkZWZpbmUgY3B1X2hhc19hZXMJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BRVMpCiAjZGVmaW5lIGNwdV9oYXNfaHQJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9IVCkKICNkZWZpbmUgY3B1X2hhc19tcAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01QKQogI2RlZmluZSBjcHVfaGFzX254CQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTlgpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pYTMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pYTMyLmgKaW5kZXggNTBjYTQ4Ni4uMWY3ZTYyNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaWEzMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lhMzIuaApAQCAtMTI5LDEzICsxMjksNiBAQAogCX0gX3NpZmllbGRzOwogfSBjb21wYXRfc2lnaW5mb190OwogCi1zdHJ1Y3QgdXN0YXQzMiB7Ci0JX191MzIJCQlmX3RmcmVlOwotCWNvbXBhdF9pbm9fdAkJZl90aW5vZGU7Ci0JY2hhcgkJCWZfZm5hbWVbNl07Ci0JY2hhcgkJCWZfZnBhY2tbNl07Ci19OwotCiAjZGVmaW5lIElBMzJfU1RBQ0tfVE9QIElBMzJfUEFHRV9PRkZTRVQKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKaW5kZXggODg2Yzk0MC4uZGMzZjZjZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgX19LVk1fSEFWRV9ERVZJQ0VfQVNTSUdOTUVOVAogI2RlZmluZSBfX0tWTV9IQVZFX01TSQogI2RlZmluZSBfX0tWTV9IQVZFX1VTRVJfTk1JCisjZGVmaW5lIF9fS1ZNX0hBVkVfR1VFU1RfREVCVUcKIAogLyogQXJjaGl0ZWN0dXJhbCBpbnRlcnJ1cHQgbGluZSBjb3VudC4gKi8KICNkZWZpbmUgS1ZNX05SX0lOVEVSUlVQVFMgMjU2CkBAIC0yMTIsNyArMjEzLDMwIEBACiAJX19zNjQgY291bnRfbG9hZF90aW1lOwogfTsKIAorc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggeworCV9fdTMyIGV4Y2VwdGlvbjsKKwlfX3UzMiBwYWQ7CisJX191NjQgcGM7CisJX191NjQgZHI2OworCV9fdTY0IGRyNzsKK307CisKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX1VTRV9TV19CUAkJMHgwMDAxMDAwMAorI2RlZmluZSBLVk1fR1VFU1REQkdfVVNFX0hXX0JQCQkweDAwMDIwMDAwCisjZGVmaW5lIEtWTV9HVUVTVERCR19JTkpFQ1RfREIJCTB4MDAwNDAwMDAKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX0lOSkVDVF9CUAkJMHgwMDA4MDAwMAorCisvKiBmb3IgS1ZNX1NFVF9HVUVTVF9ERUJVRyAqLworc3RydWN0IGt2bV9ndWVzdF9kZWJ1Z19hcmNoIHsKKwlfX3U2NCBkZWJ1Z3JlZ1s4XTsKK307CisKIHN0cnVjdCBrdm1fcGl0X3N0YXRlIHsKIAlzdHJ1Y3Qga3ZtX3BpdF9jaGFubmVsX3N0YXRlIGNoYW5uZWxzWzNdOwogfTsKKworc3RydWN0IGt2bV9yZWluamVjdF9jb250cm9sIHsKKwlfX3U4IHBpdF9yZWluamVjdDsKKwlfX3U4IHJlc2VydmVkWzMxXTsKK307CiAjZW5kaWYgLyogX0FTTV9YODZfS1ZNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDczMDg0M2QuLmYwZmFmNTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGFzbS9wdmNsb2NrLWFiaS5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KKyNpbmNsdWRlIDxhc20vbXNyLWluZGV4Lmg+CiAKICNkZWZpbmUgS1ZNX01BWF9WQ1BVUyAxNgogI2RlZmluZSBLVk1fTUVNT1JZX1NMT1RTIDMyCkBAIC0xMzQsMTEgKzEzNSwxOCBAQAogCiAjZGVmaW5lIEtWTV9OUl9NRU1fT0JKUyA0MAogCi1zdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIHsKLQlpbnQgZW5hYmxlZDsKLQl1bnNpZ25lZCBsb25nIGJwWzRdOwotCWludCBzaW5nbGVzdGVwOwotfTsKKyNkZWZpbmUgS1ZNX05SX0RCX1JFR1MJNAorCisjZGVmaW5lIERSNl9CRAkJKDEgPDwgMTMpCisjZGVmaW5lIERSNl9CUwkJKDEgPDwgMTQpCisjZGVmaW5lIERSNl9GSVhFRF8xCTB4ZmZmZjBmZjAKKyNkZWZpbmUgRFI2X1ZPTEFUSUxFCTB4MDAwMGUwMGYKKworI2RlZmluZSBEUjdfQlBfRU5fTUFTSwkweDAwMDAwMGZmCisjZGVmaW5lIERSN19HRQkJKDEgPDwgOSkKKyNkZWZpbmUgRFI3X0dECQkoMSA8PCAxMykKKyNkZWZpbmUgRFI3X0ZJWEVEXzEJMHgwMDAwMDQwMAorI2RlZmluZSBEUjdfVk9MQVRJTEUJMHhmZmZmMjNmZgogCiAvKgogICogV2UgZG9uJ3Qgd2FudCBhbGxvY2F0aW9uIGZhaWx1cmVzIHdpdGhpbiB0aGUgbW11IGNvZGUsIHNvIHdlIHByZWFsbG9jYXRlCkBAIC0xNjIsNyArMTcwLDggQEAKICAqICAgYml0cyAwOjMgLSB0b3RhbCBndWVzdCBwYWdpbmcgbGV2ZWxzICgyLTQsIG9yIHplcm8gZm9yIHJlYWwgbW9kZSkKICAqICAgYml0cyA0OjcgLSBwYWdlIHRhYmxlIGxldmVsIGZvciB0aGlzIHNoYWRvdyAoMS00KQogICogICBiaXRzIDg6OSAtIHBhZ2UgdGFibGUgcXVhZHJhbnQgZm9yIDItbGV2ZWwgZ3Vlc3RzCi0gKiAgIGJpdCAgIDE2IC0gIm1ldGFwaHlzaWNhbCIgLSBnZm4gaXMgbm90IGEgcmVhbCBwYWdlIChodWdlIHBhZ2UvcmVhbCBtb2RlKQorICogICBiaXQgICAxNiAtIGRpcmVjdCBtYXBwaW5nIG9mIHZpcnR1YWwgdG8gcGh5c2ljYWwgbWFwcGluZyBhdCBnZm4KKyAqICAgICAgICAgICAgICB1c2VkIGZvciByZWFsIG1vZGUgYW5kIHR3by1kaW1lbnNpb25hbCBwYWdpbmcKICAqICAgYml0cyAxNzoxOSAtIGNvbW1vbiBhY2Nlc3MgcGVybWlzc2lvbnMgZm9yIGFsbCBwdGVzIGluIHRoaXMgc2hhZG93IHBhZ2UKICAqLwogdW5pb24ga3ZtX21tdV9wYWdlX3JvbGUgewpAQCAtMTcyLDkgKzE4MSwxMCBAQAogCQl1bnNpZ25lZCBsZXZlbDo0OwogCQl1bnNpZ25lZCBxdWFkcmFudDoyOwogCQl1bnNpZ25lZCBwYWRfZm9yX25pY2VfaGV4X291dHB1dDo2OwotCQl1bnNpZ25lZCBtZXRhcGh5c2ljYWw6MTsKKwkJdW5zaWduZWQgZGlyZWN0OjE7CiAJCXVuc2lnbmVkIGFjY2VzczozOwogCQl1bnNpZ25lZCBpbnZhbGlkOjE7CisJCXVuc2lnbmVkIGNyNF9wZ2U6MTsKIAl9OwogfTsKIApAQCAtMjE4LDYgKzIyOCwxOCBAQAogCWNoYXIgYnVmWzUxMl0gX19hbGlnbmVkKHNpemVvZihsb25nKSk7CiB9OwogCitzdHJ1Y3Qga3ZtX3Bpb19yZXF1ZXN0IHsKKwl1bnNpZ25lZCBsb25nIGNvdW50OworCWludCBjdXJfY291bnQ7CisJZ3ZhX3QgZ3Vlc3RfZ3ZhOworCWludCBpbjsKKwlpbnQgcG9ydDsKKwlpbnQgc2l6ZTsKKwlpbnQgc3RyaW5nOworCWludCBkb3duOworCWludCByZXA7Cit9OworCiAvKgogICogeDg2IHN1cHBvcnRzIDMgcGFnaW5nIG1vZGVzICg0LWxldmVsIDY0LWJpdCwgMy1sZXZlbCA2NC1iaXQsIGFuZCAyLWxldmVsCiAgKiAzMi1iaXQpLiAgVGhlIGt2bV9tbXUgc3RydWN0dXJlIGFic3RyYWN0cyB0aGUgZGV0YWlscyBvZiB0aGUgY3VycmVudCBtbXUKQEAgLTIzNiw2ICsyNTgsNyBAQAogCWhwYV90IHJvb3RfaHBhOwogCWludCByb290X2xldmVsOwogCWludCBzaGFkb3dfcm9vdF9sZXZlbDsKKwl1bmlvbiBrdm1fbW11X3BhZ2Vfcm9sZSBiYXNlX3JvbGU7CiAKIAl1NjQgKnBhZV9yb290OwogfTsKQEAgLTI1OCw2ICsyODEsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3IzOwogCXVuc2lnbmVkIGxvbmcgY3I0OwogCXVuc2lnbmVkIGxvbmcgY3I4OworCXUzMiBoZmxhZ3M7CiAJdTY0IHBkcHRyc1s0XTsgLyogcGFlICovCiAJdTY0IHNoYWRvd19lZmVyOwogCXU2NCBhcGljX2Jhc2U7CkBAIC0zMzgsNiArMzYyLDE1IEBACiAKIAlzdHJ1Y3QgbXRycl9zdGF0ZV90eXBlIG10cnJfc3RhdGU7CiAJdTMyIHBhdDsKKworCWludCBzd2l0Y2hfZGJfcmVnczsKKwl1bnNpZ25lZCBsb25nIGhvc3RfZGJbS1ZNX05SX0RCX1JFR1NdOworCXVuc2lnbmVkIGxvbmcgaG9zdF9kcjY7CisJdW5zaWduZWQgbG9uZyBob3N0X2RyNzsKKwl1bnNpZ25lZCBsb25nIGRiW0tWTV9OUl9EQl9SRUdTXTsKKwl1bnNpZ25lZCBsb25nIGRyNjsKKwl1bnNpZ25lZCBsb25nIGRyNzsKKwl1bnNpZ25lZCBsb25nIGVmZl9kYltLVk1fTlJfREJfUkVHU107CiB9OwogCiBzdHJ1Y3Qga3ZtX21lbV9hbGlhcyB7CkBAIC0zNzgsNiArNDExLDcgQEAKIAogCXVuc2lnbmVkIGxvbmcgaXJxX3NvdXJjZXNfYml0bWFwOwogCXVuc2lnbmVkIGxvbmcgaXJxX3N0YXRlc1tLVk1fSU9BUElDX05VTV9QSU5TXTsKKwl1NjQgdm1faW5pdF90c2M7CiB9OwogCiBzdHJ1Y3Qga3ZtX3ZtX3N0YXQgewpAQCAtNDQ2LDggKzQ4MCw3IEBACiAJdm9pZCAoKnZjcHVfcHV0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCiAJaW50ICgqc2V0X2d1ZXN0X2RlYnVnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgICAgICAgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKTsKLQl2b2lkICgqZ3Vlc3RfZGVidWdfcHJlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCQkJICAgICAgIHN0cnVjdCBrdm1fZ3Vlc3RfZGVidWcgKmRiZyk7CiAJaW50ICgqZ2V0X21zcikoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyX2luZGV4LCB1NjQgKnBkYXRhKTsKIAlpbnQgKCpzZXRfbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3JfaW5kZXgsIHU2NCBkYXRhKTsKIAl1NjQgKCpnZXRfc2VnbWVudF9iYXNlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBzZWcpOwpAQCAtNTgzLDE2ICs2MTYsMTIgQEAKIHZvaWQga3ZtX2luamVjdF9wYWdlX2ZhdWx0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjIsCiAJCQkgICB1MzIgZXJyb3JfY29kZSk7CiAKLXZvaWQga3ZtX3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKTsKK2ludCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpOwogCiB2b2lkIGt2bV9pbmplY3Rfbm1pKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKIHZvaWQgZnhfaW5pdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCi1pbnQgZW11bGF0b3JfcmVhZF9zdGQodW5zaWduZWQgbG9uZyBhZGRyLAotCQkgICAgICB2b2lkICp2YWwsCi0JCSAgICAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJICAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIGludCBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZCh1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgICAgY29uc3Qgdm9pZCAqdmFsLAogCQkJICAgIHVuc2lnbmVkIGludCBieXRlcywKQEAgLTczNyw2ICs3NjYsMTAgQEAKIAlUQVNLX1NXSVRDSF9HQVRFID0gMywKIH07CiAKKyNkZWZpbmUgSEZfR0lGX01BU0sJCSgxIDw8IDApCisjZGVmaW5lIEhGX0hJRl9NQVNLCQkoMSA8PCAxKQorI2RlZmluZSBIRl9WSU5UUl9NQVNLCQkoMSA8PCAyKQorCiAvKgogICogSGFyZHdhcmUgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9uIGluc3RydWN0aW9ucyBtYXkgZmF1bHQgaWYgYQogICogcmVib290IHR1cm5zIG9mZiB2aXJ0dWFsaXphdGlvbiB3aGlsZSBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCmluZGV4IDM1OGFjYzUuLmY0ZTUwNWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oCkBAIC0xOCwxMSArMTgsMTUgQEAKICNkZWZpbmUgX0VGRVJfTE1FCQk4ICAvKiBMb25nIG1vZGUgZW5hYmxlICovCiAjZGVmaW5lIF9FRkVSX0xNQQkJMTAgLyogTG9uZyBtb2RlIGFjdGl2ZSAocmVhZC1vbmx5KSAqLwogI2RlZmluZSBfRUZFUl9OWAkJMTEgLyogTm8gZXhlY3V0ZSBlbmFibGUgKi8KKyNkZWZpbmUgX0VGRVJfU1ZNRQkJMTIgLyogRW5hYmxlIHZpcnR1YWxpemF0aW9uICovCisjZGVmaW5lIF9FRkVSX0ZGWFNSCQkxNCAvKiBFbmFibGUgRmFzdCBGWFNBVkUvRlhSU1RPUiAqLwogCiAjZGVmaW5lIEVGRVJfU0NFCQkoMTw8X0VGRVJfU0NFKQogI2RlZmluZSBFRkVSX0xNRQkJKDE8PF9FRkVSX0xNRSkKICNkZWZpbmUgRUZFUl9MTUEJCSgxPDxfRUZFUl9MTUEpCiAjZGVmaW5lIEVGRVJfTlgJCQkoMTw8X0VGRVJfTlgpCisjZGVmaW5lIEVGRVJfU1ZNRQkJKDE8PF9FRkVSX1NWTUUpCisjZGVmaW5lIEVGRVJfRkZYU1IJCSgxPDxfRUZFUl9GRlhTUikKIAogLyogSW50ZWwgTVNScy4gU29tZSBhbHNvIGF2YWlsYWJsZSBvbiBvdGhlciBDUFVzICovCiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIwCQkweDAwMDAwMGMxCkBAIC0zNjAsNCArMzY0LDkgQEAKICNkZWZpbmUgTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMiAgICAweDAwMDAwNDhiCiAjZGVmaW5lIE1TUl9JQTMyX1ZNWF9FUFRfVlBJRF9DQVAgICAgICAgMHgwMDAwMDQ4YwogCisvKiBBTUQtViBNU1JzICovCisKKyNkZWZpbmUgTVNSX1ZNX0NSICAgICAgICAgICAgICAgICAgICAgICAweGMwMDEwMTE0CisjZGVmaW5lIE1TUl9WTV9IU0FWRV9QQSAgICAgICAgICAgICAgICAgMHhjMDAxMDExNworCiAjZW5kaWYgLyogX0FTTV9YODZfTVNSX0lOREVYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByY3RsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcmN0bC5oCmluZGV4IGE4ODk0NjQuLjNhYzUwMzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ByY3RsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJjdGwuaApAQCAtNiw4ICs2LDQgQEAKICNkZWZpbmUgQVJDSF9HRVRfRlMgMHgxMDAzCiAjZGVmaW5lIEFSQ0hfR0VUX0dTIDB4MTAwNAogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotZXh0ZXJuIGxvbmcgc3lzX2FyY2hfcHJjdGwoaW50LCB1bnNpZ25lZCBsb25nKTsKLSNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCBlYmU4NThjLi5jMjMwOGY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTEsMjcgKzEsMTIgQEAKICNpZm5kZWYgX0FTTV9YODZfU0VUVVBfSAogI2RlZmluZSBfQVNNX1g4Nl9TRVRVUF9ICiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMjA0OAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0vKiBJbnRlcnJ1cHQgY29udHJvbCBmb3IgdlNNUG93ZXJlZCB4ODZfNjQgc3lzdGVtcyAqLwotdm9pZCB2c21wX2luaXQodm9pZCk7Ci0KLQotdm9pZCBzZXR1cF9iaW9zX2NvcnJ1cHRpb25fY2hlY2sodm9pZCk7Ci0KLQotI2lmZGVmIENPTkZJR19YODZfVklTV1MKLWV4dGVybiB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKTsKLWV4dGVybiBpbnQgaXNfdmlzd3NfYm94KHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB2aXN3c19lYXJseV9kZXRlY3Qodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIGludCBpc192aXN3c19ib3godm9pZCkgeyByZXR1cm4gMDsgfQotI2VuZGlmCi0KLWV4dGVybiBpbnQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX25taShpbnQgYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCk7Ci1leHRlcm4gaW50IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9pbml0KGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKIC8qCiAgKiBBbnkgc2V0dXAgcXVpcmtzIHRvIGJlIHBlcmZvcm1lZD8KICAqLwpAQCAtNDgsMTYgKzMzLDggQEAKIAlpbnQgKCp1cGRhdGVfZ2VuYXBpYykodm9pZCk7CiB9OwogCi1leHRlcm4gc3RydWN0IHg4Nl9xdWlya3MgKng4Nl9xdWlya3M7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzYXZlZF92aWRlb19tb2RlOwotCi0jaWZuZGVmIENPTkZJR19QQVJBVklSVAotI2RlZmluZSBwYXJhdmlydF9wb3N0X2FsbG9jYXRvcl9pbml0KCkJZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAotI2lmZGVmIF9fS0VSTkVMX18KLQogI2lmZGVmIF9faTM4Nl9fCiAKICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KQEAgLTc4LDYgKzU1LDI4IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGFzbS9ib290cGFyYW0uaD4KIAorLyogSW50ZXJydXB0IGNvbnRyb2wgZm9yIHZTTVBvd2VyZWQgeDg2XzY0IHN5c3RlbXMgKi8KK3ZvaWQgdnNtcF9pbml0KHZvaWQpOworCit2b2lkIHNldHVwX2Jpb3NfY29ycnVwdGlvbl9jaGVjayh2b2lkKTsKKworI2lmZGVmIENPTkZJR19YODZfVklTV1MKK2V4dGVybiB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKTsKK2V4dGVybiBpbnQgaXNfdmlzd3NfYm94KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB2aXN3c19lYXJseV9kZXRlY3Qodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIGludCBpc192aXN3c19ib3godm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKK2V4dGVybiBpbnQgd2FrZXVwX3NlY29uZGFyeV9jcHVfdmlhX25taShpbnQgYXBpY2lkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCk7CitleHRlcm4gaW50IHdha2V1cF9zZWNvbmRhcnlfY3B1X3ZpYV9pbml0KGludCBhcGljaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfZWlwKTsKK2V4dGVybiBzdHJ1Y3QgeDg2X3F1aXJrcyAqeDg2X3F1aXJrczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX3ZpZGVvX21vZGU7CisKKyNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCisjZGVmaW5lIHBhcmF2aXJ0X3Bvc3RfYWxsb2NhdG9yX2luaXQoKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCiAjaWZuZGVmIF9TRVRVUAogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA4YWI5Y2M4Li5jYThiZjJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fWDg2X1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCmluZGV4IDFiOGFmYTcuLjgyYWRhNzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oCkBAIC0xNzQsMTAgKzE3NCw2IEBACiAjZGVmaW5lIFNWTV9DUFVJRF9GRUFUVVJFX1NISUZUIDIKICNkZWZpbmUgU1ZNX0NQVUlEX0ZVTkMgMHg4MDAwMDAwYQogCi0jZGVmaW5lIE1TUl9FRkVSX1NWTUVfTUFTSyAoMVVMTCA8PCAxMikKLSNkZWZpbmUgTVNSX1ZNX0NSICAgICAgIDB4YzAwMTAxMTQKLSNkZWZpbmUgTVNSX1ZNX0hTQVZFX1BBIDB4YzAwMTAxMTdVTEwKLQogI2RlZmluZSBTVk1fVk1fQ1JfU1ZNX0RJU0FCTEUgNAogCiAjZGVmaW5lIFNWTV9TRUxFQ1RPUl9TX1NISUZUIDQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c19pYTMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNfaWEzMi5oCmluZGV4IGZmYjA4YmUuLjcyYTZkY2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c19pYTMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzX2lhMzIuaApAQCAtNzAsOCArNzAsNiBAQAogYXNtbGlua2FnZSBsb25nIHN5czMyX29sZHVuYW1lKHN0cnVjdCBvbGRvbGRfdXRzbmFtZSBfX3VzZXIgKik7CiBsb25nIHN5czMyX3VuYW1lKHN0cnVjdCBvbGRfdXRzbmFtZSBfX3VzZXIgKik7CiAKLWxvbmcgc3lzMzJfdXN0YXQodW5zaWduZWQsIHN0cnVjdCB1c3RhdDMyIF9fdXNlciAqKTsKLQogYXNtbGlua2FnZSBsb25nIHN5czMyX2V4ZWN2ZShjaGFyIF9fdXNlciAqLCBjb21wYXRfdXB0cl90IF9fdXNlciAqLAogCQkJICAgICBjb21wYXRfdXB0cl90IF9fdXNlciAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9jbG9uZSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbHMuaAppbmRleCBjMGIwYmRhLi5lMjZkMzRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKQEAgLTc0LDYgKzc0LDcgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZXhlY3ZlKGNoYXIgX191c2VyICosIGNoYXIgX191c2VyICogX191c2VyICosCiAJCQkgICBjaGFyIF9fdXNlciAqIF9fdXNlciAqLAogCQkJICAgc3RydWN0IHB0X3JlZ3MgKik7Citsb25nIHN5c19hcmNoX3ByY3RsKGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIGtlcm5lbC9pb3BvcnQuYyAqLwogYXNtbGlua2FnZSBsb25nIHN5c19pb3BsKHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaAppbmRleCAyYmI2YTgzLi40ZjVjMjQ3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKQEAgLTExLDggKzExLDggQEAKIAogI2lmZGVmIENPTkZJR19YODZfMzIKIGV4dGVybiBpbnQgdGltZXJfYWNrOworI2VuZGlmCiBleHRlcm4gaW50IHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCk7Ci0jZW5kaWYgLyogQ09ORklHX1g4Nl8zMiAqLwogCiBleHRlcm4gaW50IG5vX3RpbWVyX2NoZWNrOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXJ0ZXh0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXJ0ZXh0LmgKaW5kZXggNTkzNjM2Mi4uZTBmOWFhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlydGV4dC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZpcnRleHQuaApAQCAtMTE4LDcgKzExOCw3IEBACiAKIAl3cm1zcmwoTVNSX1ZNX0hTQVZFX1BBLCAwKTsKIAlyZG1zcmwoTVNSX0VGRVIsIGVmZXIpOwotCXdybXNybChNU1JfRUZFUiwgZWZlciAmIH5NU1JfRUZFUl9TVk1FX01BU0spOworCXdybXNybChNU1JfRUZFUiwgZWZlciAmIH5FRkVSX1NWTUUpOwogfQogCiAvKiogTWFrZXMgc3VyZSBTVk0gaXMgZGlzYWJsZWQsIGlmIGl0IGlzIHN1cHBvcnRlZCBvbiB0aGUgQ1BVCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCmluZGV4IGQwMjM4ZTYuLjQ5OGY5NDQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCkBAIC0yNzAsOCArMjcwLDkgQEAKIAogI2RlZmluZSBJTlRSX1RZUEVfRVhUX0lOVFIgICAgICAgICAgICAgICgwIDw8IDgpIC8qIGV4dGVybmFsIGludGVycnVwdCAqLwogI2RlZmluZSBJTlRSX1RZUEVfTk1JX0lOVFIJCSgyIDw8IDgpIC8qIE5NSSAqLwotI2RlZmluZSBJTlRSX1RZUEVfRVhDRVBUSU9OICAgICAgICAgICAgICgzIDw8IDgpIC8qIHByb2Nlc3NvciBleGNlcHRpb24gKi8KKyNkZWZpbmUgSU5UUl9UWVBFX0hBUkRfRVhDRVBUSU9OCSgzIDw8IDgpIC8qIHByb2Nlc3NvciBleGNlcHRpb24gKi8KICNkZWZpbmUgSU5UUl9UWVBFX1NPRlRfSU5UUiAgICAgICAgICAgICAoNCA8PCA4KSAvKiBzb2Z0d2FyZSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSU5UUl9UWVBFX1NPRlRfRVhDRVBUSU9OCSg2IDw8IDgpIC8qIHNvZnR3YXJlIGV4Y2VwdGlvbiAqLwogCiAvKiBHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8gZmxhZ3MuICovCiAjZGVmaW5lIEdVRVNUX0lOVFJfU1RBVEVfU1RJCQkweDAwMDAwMDAxCkBAIC0zMTEsNyArMzEyLDcgQEAKICNkZWZpbmUgREVCVUdfUkVHX0FDQ0VTU19UWVBFICAgICAgICAgICAweDEwICAgIC8qIDQsIGRpcmVjdGlvbiBvZiBhY2Nlc3MgKi8KICNkZWZpbmUgVFlQRV9NT1ZfVE9fRFIgICAgICAgICAgICAgICAgICAoMCA8PCA0KQogI2RlZmluZSBUWVBFX01PVl9GUk9NX0RSICAgICAgICAgICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIERFQlVHX1JFR19BQ0NFU1NfUkVHICAgICAgICAgICAgMHhmMDAgICAvKiAxMTo4LCBnZW5lcmFsIHB1cnBvc2UgcmVnLiAqLworI2RlZmluZSBERUJVR19SRUdfQUNDRVNTX1JFRyhlcSkgICAgICAgICgoKGVxKSA+PiA4KSAmIDB4ZikgLyogMTE6OCwgZ2VuZXJhbCBwdXJwb3NlIHJlZy4gKi8KIAogCiAvKiBzZWdtZW50IEFSICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnCmluZGV4IDY1NzkyYzIuLjUyYzgzOTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnCkBAIC04NywzMCArODcsMTUgQEAKIGNvbmZpZyBYODZfUE9XRVJOT1dfSzgKIAl0cmlzdGF0ZSAiQU1EIE9wdGVyb24vQXRobG9uNjQgUG93ZXJOb3chIgogCXNlbGVjdCBDUFVfRlJFUV9UQUJMRQorCWRlcGVuZHMgb24gQUNQSSAmJiBBQ1BJX1BST0NFU1NPUgogCWhlbHAKLQkgIFRoaXMgYWRkcyB0aGUgQ1BVRnJlcSBkcml2ZXIgZm9yIG1vYmlsZSBBTUQgT3B0ZXJvbi9BdGhsb242NCBwcm9jZXNzb3JzLgorCSAgVGhpcyBhZGRzIHRoZSBDUFVGcmVxIGRyaXZlciBmb3IgSzgvSzEwIE9wdGVyb24vQXRobG9uNjQgcHJvY2Vzc29ycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcG93ZXJub3ctazguCiAKIAkgIEZvciBkZXRhaWxzLCB0YWtlIGEgbG9vayBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL2NwdS1mcmVxLz4uCiAKLQkgIElmIGluIGRvdWJ0LCBzYXkgTi4KLQotY29uZmlnIFg4Nl9QT1dFUk5PV19LOF9BQ1BJCi0JYm9vbAotCXByb21wdCAiQUNQSSBTdXBwb3J0IiBpZiBYODZfMzIKLQlkZXBlbmRzIG9uIEFDUEkgJiYgWDg2X1BPV0VSTk9XX0s4ICYmIEFDUElfUFJPQ0VTU09SCi0JZGVwZW5kcyBvbiAhKFg4Nl9QT1dFUk5PV19LOCA9IHkgJiYgQUNQSV9QUk9DRVNTT1IgPSBtKQotCWRlZmF1bHQgeQotCWhlbHAKLQkgIFRoaXMgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBLOHMgUHJvY2Vzc29yIFBlcmZvcm1hbmNlIFN0YXRlcyB2aWEgQUNQSS4KLQkgIFRoaXMgZHJpdmVyIGlzIHByb2JhYmx5IHJlcXVpcmVkIGZvciBDUFVGcmVxIHRvIHdvcmsgd2l0aCBtdWx0aS1zb2NrZXQgYW5kCi0JICBTTVAgc3lzdGVtcy4gIEl0IGlzIG5vdCByZXF1aXJlZCBvbiBhdCBsZWFzdCBzb21lIHNpbmdsZS1zb2NrZXQgeWV0Ci0JICBtdWx0aS1jb3JlIHN5c3RlbXMsIGV2ZW4gaWYgU01QIGlzIGVuYWJsZWQuCi0KLQkgIEl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZS4KLQogY29uZmlnIFg4Nl9HWF9TVVNQTU9ECiAJdHJpc3RhdGUgIkN5cml4IE1lZGlhR1gvTmF0U2VtaSBHZW9kZSBTdXNwZW5kIE1vZHVsYXRpb24iCiAJZGVwZW5kcyBvbiBYODZfMzIgJiYgUENJCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUKaW5kZXggNTYwZjc3Ni4uNTA5Mjk2ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZQpAQCAtMSw2ICsxLDExIEBACisjIExpbmsgb3JkZXIgbWF0dGVycy4gSzggaXMgcHJlZmVycmVkIHRvIEFDUEkgYmVjYXVzZSBvZiBmaXJtd2FyZSBidWdzIGluIGVhcmx5CisjIEs4IHN5c3RlbXMuIEFDUEkgaXMgcHJlZmVycmVkIHRvIGFsbCBvdGhlciBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzLgorIyBzcGVlZHN0ZXAtKiBpcyBwcmVmZXJyZWQgb3ZlciBwNC1jbG9ja21vZC4KKworb2JqLSQoQ09ORklHX1g4Nl9QT1dFUk5PV19LOCkJCSs9IHBvd2Vybm93LWs4Lm8KK29iai0kKENPTkZJR19YODZfQUNQSV9DUFVGUkVRKQkJKz0gYWNwaS1jcHVmcmVxLm8KIG9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzYpCQkrPSBwb3dlcm5vdy1rNi5vCiBvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s3KQkJKz0gcG93ZXJub3ctazcubwotb2JqLSQoQ09ORklHX1g4Nl9QT1dFUk5PV19LOCkJCSs9IHBvd2Vybm93LWs4Lm8KIG9iai0kKENPTkZJR19YODZfTE9OR0hBVUwpCQkrPSBsb25naGF1bC5vCiBvYmotJChDT05GSUdfWDg2X0VfUE9XRVJTQVZFUikJCSs9IGVfcG93ZXJzYXZlci5vCiBvYmotJChDT05GSUdfRUxBTl9DUFVGUkVRKQkJKz0gZWxhbmZyZXEubwpAQCAtMTAsNyArMTUsNiBAQAogb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfSUNIKQkJKz0gc3BlZWRzdGVwLWljaC5vCiBvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9MSUIpCQkrPSBzcGVlZHN0ZXAtbGliLm8KIG9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX1NNSSkJCSs9IHNwZWVkc3RlcC1zbWkubwotb2JqLSQoQ09ORklHX1g4Nl9BQ1BJX0NQVUZSRVEpCQkrPSBhY3BpLWNwdWZyZXEubwogb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfQ0VOVFJJTk8pCSs9IHNwZWVkc3RlcC1jZW50cmluby5vCiBvYmotJChDT05GSUdfWDg2X1A0X0NMT0NLTU9EKQkJKz0gcDQtY2xvY2ttb2Qubwogb2JqLSQoQ09ORklHX1g4Nl9DUFVGUkVRX05GT1JDRTIpCSs9IGNwdWZyZXEtbmZvcmNlMi5vCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKaW5kZXggNGIxYzMxOS4uM2JhYmUxZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhY3BpLWNwdWZyZXEuYyAtIEFDUEkgUHJvY2Vzc29yIFAtU3RhdGVzIERyaXZlciAoJFJldmlzaW9uOiAxLjQgJCkKKyAqIGFjcGktY3B1ZnJlcS5jIC0gQUNQSSBQcm9jZXNzb3IgUC1TdGF0ZXMgRHJpdmVyCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiBBbmR5IEdyb3ZlciA8YW5kcmV3Lmdyb3ZlckBpbnRlbC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIFBhdWwgRGllZmVuYmF1Z2ggPHBhdWwucy5kaWVmZW5iYXVnaEBpbnRlbC5jb20+CkBAIC0zNiwxNiArMzYsMTggQEAKICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCiAjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgImFjcGktY3B1ZnJlcSIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJhY3BpLWNwdWZyZXEiLCBtc2cpCiAKIE1PRFVMRV9BVVRIT1IoIlBhdWwgRGllZmVuYmF1Z2gsIERvbWluaWsgQnJvZG93c2tpIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFDUEkgUHJvY2Vzc29yIFAtU3RhdGVzIERyaXZlciIpOwpAQCAtOTUsNyArOTcsNyBAQAogCiAJcGVyZiA9IGRhdGEtPmFjcGlfZGF0YTsKIAotCWZvciAoaT0wOyBpPHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcGVyZi0+c3RhdGVfY291bnQ7IGkrKykgewogCQlpZiAodmFsdWUgPT0gcGVyZi0+c3RhdGVzW2ldLnN0YXR1cykKIAkJCXJldHVybiBkYXRhLT5mcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeTsKIAl9CkBAIC0xMTAsNyArMTEyLDcgQEAKIAltc3IgJj0gSU5URUxfTVNSX1JBTkdFOwogCXBlcmYgPSBkYXRhLT5hY3BpX2RhdGE7CiAKLQlmb3IgKGk9MDsgZGF0YS0+ZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7IGkrKykgeworCWZvciAoaSA9IDA7IGRhdGEtPmZyZXFfdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EOyBpKyspIHsKIAkJaWYgKG1zciA9PSBwZXJmLT5zdGF0ZXNbZGF0YS0+ZnJlcV90YWJsZVtpXS5pbmRleF0uc3RhdHVzKQogCQkJcmV0dXJuIGRhdGEtPmZyZXFfdGFibGVbaV0uZnJlcXVlbmN5OwogCX0KQEAgLTEzOCwxNSArMTQwLDEzIEBACiAJdTggYml0X3dpZHRoOwogfTsKIAotdHlwZWRlZiB1bmlvbiB7Ci0Jc3RydWN0IG1zcl9hZGRyIG1zcjsKLQlzdHJ1Y3QgaW9fYWRkciBpbzsKLX0gZHJ2X2FkZHJfdW5pb247Ci0KIHN0cnVjdCBkcnZfY21kIHsKIAl1bnNpZ25lZCBpbnQgdHlwZTsKIAljb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzazsKLQlkcnZfYWRkcl91bmlvbiBhZGRyOworCXVuaW9uIHsKKwkJc3RydWN0IG1zcl9hZGRyIG1zcjsKKwkJc3RydWN0IGlvX2FkZHIgaW87CisJfSBhZGRyOwogCXUzMiB2YWw7CiB9OwogCkBAIC0zNjksNyArMzY5LDcgQEAKIAl1bnNpZ25lZCBpbnQgY3VyX2ZyZXE7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlmb3IgKGk9MDsgaTwxMDA7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewogCQljdXJfZnJlcSA9IGV4dHJhY3RfZnJlcShnZXRfY3VyX3ZhbChtYXNrKSwgZGF0YSk7CiAJCWlmIChjdXJfZnJlcSA9PSBmcmVxKQogCQkJcmV0dXJuIDE7CkBAIC00OTQsNyArNDk0LDcgQEAKIAkJdW5zaWduZWQgbG9uZyBmcmVxOwogCQl1bnNpZ25lZCBsb25nIGZyZXFuID0gcGVyZi0+c3RhdGVzWzBdLmNvcmVfZnJlcXVlbmN5ICogMTAwMDsKIAotCQlmb3IgKGk9MDsgaTwocGVyZi0+c3RhdGVfY291bnQtMSk7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgKHBlcmYtPnN0YXRlX2NvdW50LTEpOyBpKyspIHsKIAkJCWZyZXEgPSBmcmVxbjsKIAkJCWZyZXFuID0gcGVyZi0+c3RhdGVzW2krMV0uY29yZV9mcmVxdWVuY3kgKiAxMDAwOwogCQkJaWYgKCgyICogY3B1X2toeikgPiAoZnJlcW4gKyBmcmVxKSkgewpAQCAtNjczLDcgKzY3Myw3IEBACiAKIAkvKiBkZXRlY3QgdHJhbnNpdGlvbiBsYXRlbmN5ICovCiAJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDA7Ci0JZm9yIChpPTA7IGk8cGVyZi0+c3RhdGVfY291bnQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7CiAJCWlmICgocGVyZi0+c3RhdGVzW2ldLnRyYW5zaXRpb25fbGF0ZW5jeSAqIDEwMDApID4KIAkJICAgIHBvbGljeS0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kpCiAJCQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0KQEAgLTY4Miw4ICs2ODIsOCBAQAogCiAJZGF0YS0+bWF4X2ZyZXEgPSBwZXJmLT5zdGF0ZXNbMF0uY29yZV9mcmVxdWVuY3kgKiAxMDAwOwogCS8qIHRhYmxlIGluaXQgKi8KLQlmb3IgKGk9MDsgaTxwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKSB7Ci0JCWlmIChpPjAgJiYgcGVyZi0+c3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5ID49CisJZm9yIChpID0gMDsgaSA8IHBlcmYtPnN0YXRlX2NvdW50OyBpKyspIHsKKwkJaWYgKGkgPiAwICYmIHBlcmYtPnN0YXRlc1tpXS5jb3JlX2ZyZXF1ZW5jeSA+PQogCQkgICAgZGF0YS0+ZnJlcV90YWJsZVt2YWxpZF9zdGF0ZXMtMV0uZnJlcXVlbmN5IC8gMTAwMCkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKaW5kZXggOTY1ZWE1Mi4uNzMzMDkzZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYwpAQCAtMzIsNyArMzIsNyBAQAogICogbmZvcmNlMl9jaGlwc2V0OgogICogRlNCIGlzIGNoYW5nZWQgdXNpbmcgdGhlIGNoaXBzZXQKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpuZm9yY2UyX2NoaXBzZXRfZGV2Oworc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpuZm9yY2UyX2RldjsKIAogLyogZmlkOgogICogbXVsdGlwbGllciAqIDEwCkBAIC01Niw3ICs1Niw5IEBACiBNT0RVTEVfUEFSTV9ERVNDKG1pbl9mc2IsCiAJCSJNaW5pbXVtIEZTQiB0byB1c2UsIGlmIG5vdCBkZWZpbmVkOiBjdXJyZW50IEZTQiAtIDUwIik7CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAiY3B1ZnJlcS1uZm9yY2UyIiwgbXNnKQorI2RlZmluZSBQRlggImNwdWZyZXEtbmZvcmNlMjogIgorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJImNwdWZyZXEtbmZvcmNlMiIsIG1zZykKIAogLyoqCiAgKiBuZm9yY2UyX2NhbGNfZnNiIC0gY2FsY3VsYXRlIEZTQgpAQCAtMTE4LDExICsxMjAsMTEgQEAKIAlpbnQgdGVtcDsKIAogCS8qIFNldCB0aGUgcGxsIGFkZHIuIHRvIDB4MDAgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMQURSLCAwKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKG5mb3JjZTJfZGV2LCBORk9SQ0UyX1BMTEFEUiwgMCk7CiAKIAkvKiBOb3cgd3JpdGUgdGhlIHZhbHVlIGluIGFsbCA2NCByZWdpc3RlcnMgKi8KIAlmb3IgKHRlbXAgPSAwOyB0ZW1wIDw9IDB4M2Y7IHRlbXArKykKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTFJFRywgcGxsKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExSRUcsIHBsbCk7CiAKIAlyZXR1cm47CiB9CkBAIC0xMzksOCArMTQxLDggQEAKIAl1MzIgZnNiLCB0ZW1wID0gMDsKIAogCS8qIEdldCBjaGlwc2V0IGJvb3QgRlNCIGZyb20gc3ViZGV2aWNlIDUgKEZTQiBhdCBib290LXRpbWUpICovCi0JbmZvcmNlMl9zdWI1ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9OVklESUEsCi0JCQkJCQkweDAxRUYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIE5VTEwpOworCW5mb3JjZTJfc3ViNSA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfTlZJRElBLCAweDAxRUYsCisJCQkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgTlVMTCk7CiAJaWYgKCFuZm9yY2UyX3N1YjUpCiAJCXJldHVybiAwOwogCkBAIC0xNDgsMTMgKzE1MCwxMyBAQAogCWZzYiAvPSAxMDAwMDAwOwogCiAJLyogQ2hlY2sgaWYgUExMIHJlZ2lzdGVyIGlzIGFscmVhZHkgc2V0ICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExFTkFCTEUsICh1OCAqKSZ0ZW1wKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExFTkFCTEUsICh1OCAqKSZ0ZW1wKTsKIAogCWlmIChib290ZnNiIHx8ICF0ZW1wKQogCQlyZXR1cm4gZnNiOwogCiAJLyogVXNlIFBMTCByZWdpc3RlciBGU0IgdmFsdWUgKi8KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExSRUcsICZ0ZW1wKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMUkVHLCAmdGVtcCk7CiAJZnNiID0gbmZvcmNlMl9jYWxjX2ZzYih0ZW1wKTsKIAogCXJldHVybiBmc2I7CkBAIC0xNzQsMTggKzE3NiwxOCBAQAogCWludCBwbGwgPSAwOwogCiAJaWYgKChmc2IgPiBtYXhfZnNiKSB8fCAoZnNiIDwgTkZPUkNFMl9NSU5fRlNCKSkgewotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IEZTQiAlZCBpcyBvdXQgb2YgcmFuZ2UhXG4iLCBmc2IpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJGU0IgJWQgaXMgb3V0IG9mIHJhbmdlIVxuIiwgZnNiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJdGZzYiA9IG5mb3JjZTJfZnNiX3JlYWQoMCk7CiAJaWYgKCF0ZnNiKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3B1ZnJlcTogRXJyb3Igd2hpbGUgcmVhZGluZyB0aGUgRlNCXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRXJyb3Igd2hpbGUgcmVhZGluZyB0aGUgRlNCXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogRmlyc3Qgd3JpdGU/IFRoZW4gc2V0IGFjdHVhbCB2YWx1ZSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKG5mb3JjZTJfY2hpcHNldF9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTggKikmdGVtcCk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMRU5BQkxFLCAodTggKikmdGVtcCk7CiAJaWYgKCF0ZW1wKSB7CiAJCXBsbCA9IG5mb3JjZTJfY2FsY19wbGwodGZzYik7CiAKQEAgLTE5Nyw3ICsxOTksNyBAQAogCiAJLyogRW5hYmxlIHdyaXRlIGFjY2VzcyAqLwogCXRlbXAgPSAweDAxOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShuZm9yY2UyX2NoaXBzZXRfZGV2LCBORk9SQ0UyX1BMTEVOQUJMRSwgKHU4KXRlbXApOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShuZm9yY2UyX2RldiwgTkZPUkNFMl9QTExFTkFCTEUsICh1OCl0ZW1wKTsKIAogCWRpZmYgPSB0ZnNiIC0gZnNiOwogCkBAIC0yMjIsNyArMjI0LDcgQEAKIAl9CiAKIAl0ZW1wID0gMHg0MDsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUobmZvcmNlMl9jaGlwc2V0X2RldiwgTkZPUkNFMl9QTExBRFIsICh1OCl0ZW1wKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUobmZvcmNlMl9kZXYsIE5GT1JDRTJfUExMQURSLCAodTgpdGVtcCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NCw3ICsyNDYsOCBAQAogICogbmZvcmNlMl90YXJnZXQgLSBzZXQgYSBuZXcgQ1BVRnJlcSBwb2xpY3kKICAqIEBwb2xpY3k6IG5ldyBwb2xpY3kKICAqIEB0YXJnZXRfZnJlcTogdGhlIHRhcmdldCBmcmVxdWVuY3kKLSAqIEByZWxhdGlvbjogaG93IHRoYXQgZnJlcXVlbmN5IHJlbGF0ZXMgdG8gYWNoaWV2ZWQgZnJlcXVlbmN5IChDUFVGUkVRX1JFTEFUSU9OX0wgb3IgQ1BVRlJFUV9SRUxBVElPTl9IKQorICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kKKyAqICAoQ1BVRlJFUV9SRUxBVElPTl9MIG9yIENQVUZSRVFfUkVMQVRJT05fSCkKICAqCiAgKiBTZXRzIGEgbmV3IENQVUZyZXEgcG9saWN5LgogICovCkBAIC0yNzYsNyArMjc5LDcgQEAKIAkvKiBsb2NhbF9pcnFfc2F2ZShmbGFncyk7ICovCiAKIAlpZiAobmZvcmNlMl9zZXRfZnNiKHRhcmdldF9mc2IpIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBDaGFuZ2luZyBGU0IgdG8gJWQgZmFpbGVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYICJDaGFuZ2luZyBGU0IgdG8gJWQgZmFpbGVkXG4iLAogCQkJdGFyZ2V0X2ZzYik7CiAJZWxzZQogCQlkcHJpbnRrKCJDaGFuZ2VkIEZTQiBzdWNjZXNzZnVsbHkgdG8gJWRcbiIsCkBAIC0zMjcsOCArMzMwLDggQEAKIAkvKiBGSVg6IEdldCBGSUQgZnJvbSBDUFUgKi8KIAlpZiAoIWZpZCkgewogCQlpZiAoIWNwdV9raHopIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiY3B1ZnJlcTogY3B1X2toeiBub3Qgc2V0LCBjYW4ndCBjYWxjdWxhdGUgbXVsdGlwbGllciFcbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJCSJjcHVfa2h6IG5vdCBzZXQsIGNhbid0IGNhbGN1bGF0ZSBtdWx0aXBsaWVyIVxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCkBAIC0zNDMsNyArMzQ2LDcgQEAKIAkJfQogCX0KIAotCXByaW50ayhLRVJOX0lORk8gImNwdWZyZXE6IEZTQiBjdXJyZW50bHkgYXQgJWkgTUh6LCBGSUQgJWQuJWRcbiIsIGZzYiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiRlNCIGN1cnJlbnRseSBhdCAlaSBNSHosIEZJRCAlZC4lZFxuIiwgZnNiLAogCSAgICAgICBmaWQgLyAxMCwgZmlkICUgMTApOwogCiAJLyogU2V0IG1heGltdW0gRlNCIHRvIEZTQiBhdCBib290IHRpbWUgKi8KQEAgLTM5MiwxNyArMzk1LDE4IEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZvcmNlMl9kZXRlY3RfY2hpcHNldCh2b2lkKQogewotCW5mb3JjZTJfY2hpcHNldF9kZXYgPSBwY2lfZ2V0X3N1YnN5cyhQQ0lfVkVORE9SX0lEX05WSURJQSwKKwluZm9yY2UyX2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfTlZJRElBLAogCQkJCQlQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyLAogCQkJCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBOVUxMKTsKIAotCWlmIChuZm9yY2UyX2NoaXBzZXRfZGV2ID09IE5VTEwpCisJaWYgKG5mb3JjZTJfZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiY3B1ZnJlcTogRGV0ZWN0ZWQgbkZvcmNlMiBjaGlwc2V0IHJldmlzaW9uICVYXG4iLAotCSAgICAgICBuZm9yY2UyX2NoaXBzZXRfZGV2LT5yZXZpc2lvbik7Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiY3B1ZnJlcTogRlNCIGNoYW5naW5nIGlzIG1heWJlIHVuc3RhYmxlIGFuZCBjYW4gbGVhZCB0byBjcmFzaGVzIGFuZCBkYXRhIGxvc3MuXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiRGV0ZWN0ZWQgbkZvcmNlMiBjaGlwc2V0IHJldmlzaW9uICVYXG4iLAorCSAgICAgICBuZm9yY2UyX2Rldi0+cmV2aXNpb24pOworCXByaW50ayhLRVJOX0lORk8gUEZYCisJICAgICAgICJGU0IgY2hhbmdpbmcgaXMgbWF5YmUgdW5zdGFibGUgYW5kIGNhbiBsZWFkIHRvICIKKwkgICAgICAgImNyYXNoZXMgYW5kIGRhdGEgbG9zcy5cbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MjAsNyArNDI0LDcgQEAKIAogCS8qIGRldGVjdCBjaGlwc2V0ICovCiAJaWYgKG5mb3JjZTJfZGV0ZWN0X2NoaXBzZXQoKSkgewotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IE5vIG5Gb3JjZTIgY2hpcHNldC5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiTm8gbkZvcmNlMiBjaGlwc2V0LlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jCmluZGV4IGMyZjkzMGQuLjNmODNlYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMKQEAgLTEyLDEyICsxMiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3RzYy5oPgotI2luY2x1ZGUgPGFzbS90aW1leC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogCiAjZGVmaW5lIEVQU19CUkFORF9DN00JMAogI2RlZmluZSBFUFNfQlJBTkRfQzcJMQpAQCAtMTg0LDcgKzE4NCw3IEBACiAJCWJyZWFrOwogCX0KIAotCXN3aXRjaChicmFuZCkgeworCXN3aXRjaCAoYnJhbmQpIHsKIAljYXNlIEVQU19CUkFORF9DN006CiAJCXByaW50ayhLRVJOX0NPTlQgIkM3LU1cbiIpOwogCQlicmVhazsKQEAgLTIxOCwxNyArMjE4LDIwIEBACiAJLyogUHJpbnQgdm9sdGFnZSBhbmQgbXVsdGlwbGllciAqLwogCXJkbXNyKE1TUl9JQTMyX1BFUkZfU1RBVFVTLCBsbywgaGkpOwogCWN1cnJlbnRfdm9sdGFnZSA9IGxvICYgMHhmZjsKLQlwcmludGsoS0VSTl9JTkZPICJlcHM6IEN1cnJlbnQgdm9sdGFnZSA9ICVkbVZcbiIsIGN1cnJlbnRfdm9sdGFnZSAqIDE2ICsgNzAwKTsKKwlwcmludGsoS0VSTl9JTkZPICJlcHM6IEN1cnJlbnQgdm9sdGFnZSA9ICVkbVZcbiIsCisJCQljdXJyZW50X3ZvbHRhZ2UgKiAxNiArIDcwMCk7CiAJY3VycmVudF9tdWx0aXBsaWVyID0gKGxvID4+IDgpICYgMHhmZjsKIAlwcmludGsoS0VSTl9JTkZPICJlcHM6IEN1cnJlbnQgbXVsdGlwbGllciA9ICVkXG4iLCBjdXJyZW50X211bHRpcGxpZXIpOwogCiAJLyogUHJpbnQgbGltaXRzICovCiAJbWF4X3ZvbHRhZ2UgPSBoaSAmIDB4ZmY7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBIaWdoZXN0IHZvbHRhZ2UgPSAlZG1WXG4iLCBtYXhfdm9sdGFnZSAqIDE2ICsgNzAwKTsKKwlwcmludGsoS0VSTl9JTkZPICJlcHM6IEhpZ2hlc3Qgdm9sdGFnZSA9ICVkbVZcbiIsCisJCQltYXhfdm9sdGFnZSAqIDE2ICsgNzAwKTsKIAltYXhfbXVsdGlwbGllciA9IChoaSA+PiA4KSAmIDB4ZmY7CiAJcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBIaWdoZXN0IG11bHRpcGxpZXIgPSAlZFxuIiwgbWF4X211bHRpcGxpZXIpOwogCW1pbl92b2x0YWdlID0gKGhpID4+IDE2KSAmIDB4ZmY7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiZXBzOiBMb3dlc3Qgdm9sdGFnZSA9ICVkbVZcbiIsIG1pbl92b2x0YWdlICogMTYgKyA3MDApOworCXByaW50ayhLRVJOX0lORk8gImVwczogTG93ZXN0IHZvbHRhZ2UgPSAlZG1WXG4iLAorCQkJbWluX3ZvbHRhZ2UgKiAxNiArIDcwMCk7CiAJbWluX211bHRpcGxpZXIgPSAoaGkgPj4gMjQpICYgMHhmZjsKIAlwcmludGsoS0VSTl9JTkZPICJlcHM6IExvd2VzdCBtdWx0aXBsaWVyID0gJWRcbiIsIG1pbl9tdWx0aXBsaWVyKTsKIApAQCAtMzE4LDcgKzMyMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBlcHNfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKmVwc19hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtMzU2LDcgKzM1OSw3IEBACiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmZXBzX2RyaXZlcik7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIlJhZmGzIEJpbHNraSA8cmFmYWxiaWxza2lAaW50ZXJpYS5wbD4iKTsKK01PRFVMRV9BVVRIT1IoIlJhZmFsIEJpbHNraSA8cmFmYWxiaWxza2lAaW50ZXJpYS5wbD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRW5oYW5jZWQgUG93ZXJTYXZlciBkcml2ZXIgZm9yIFZJQSBDNyBDUFUncy4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VsYW5mcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZWxhbmZyZXEuYwppbmRleCBmZTYxM2M5Li4wMDZiMjc4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZWxhbmZyZXEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZWxhbmZyZXEuYwpAQCAtMTg0LDcgKzE4NCw4IEBACiB7CiAJdW5zaWduZWQgaW50IG5ld3N0YXRlID0gMDsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmZWxhbmZyZXFfdGFibGVbMF0sIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJmVsYW5mcmVxX3RhYmxlWzBdLAorCQkJCXRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllbGFuZnJlcV9zZXRfY3B1X3N0YXRlKG5ld3N0YXRlKTsKQEAgLTMwMSw3ICszMDIsOCBAQAogbW9kdWxlX3BhcmFtKG1heF9mcmVxLCBpbnQsIDA0NDQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+LCBTdmVuIEdlZ2d1cyA8c3ZlbkBnZWdndXMubmV0PiIpOworTU9EVUxFX0FVVEhPUigiUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgIgorCQkiU3ZlbiBHZWdndXMgPHN2ZW5AZ2VnZ3VzLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiY3B1ZnJlcSBkcml2ZXIgZm9yIEFNRCdzIEVsYW4gQ1BVcyIpOwogCiBtb2R1bGVfaW5pdChlbGFuZnJlcV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9neC1zdXNwbW9kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCmluZGV4IDlkOWVhZTguLmFjMjdlYzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9neC1zdXNwbW9kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYwpAQCAtNzksOCArNzksOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1jeXJpeC5oPgotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogCiAvKiBQQ0kgY29uZmlnIHJlZ2lzdGVycywgYWxsIGF0IEYwICovCiAjZGVmaW5lIFBDSV9QTUVSMQkweDgwCS8qIHBvd2VyIG1hbmFnZW1lbnQgZW5hYmxlIHJlZ2lzdGVyIDEgKi8KQEAgLTEyMiw4ICsxMjMsOCBAQAogc3RhdGljIGludCBzdG9ja19mcmVxOwogCiAvKiBQQ0kgYnVzIGNsb2NrIC0gZGVmYXVsdHMgdG8gMzAuMDAwIGlmIGNwdV9raHogaXMgbm90IGF2YWlsYWJsZSAqLwotc3RhdGljIGludCBwY2lfYnVzY2xrID0gMDsKLW1vZHVsZV9wYXJhbSAocGNpX2J1c2NsaywgaW50LCAwNDQ0KTsKK3N0YXRpYyBpbnQgcGNpX2J1c2NsazsKK21vZHVsZV9wYXJhbShwY2lfYnVzY2xrLCBpbnQsIDA0NDQpOwogCiAvKiBtYXhpbXVtIGR1cmF0aW9uIGZvciB3aGljaCB0aGUgY3B1IG1heSBiZSBzdXNwZW5kZWQKICAqICgzMnVzICogTUFYX0RVUkFUSU9OKS4gSWYgbm8gcGFyYW1ldGVyIGlzIGdpdmVuLCB0aGlzIGRlZmF1bHRzCkBAIC0xMzIsNyArMTMzLDcgQEAKICAqIGlzIHN1c3BlbmRlZCAtLSBwcm9jZXNzaW5nIHBvd2VyIGlzIGp1c3QgMC4zOSUgb2Ygd2hhdCBpdCB1c2VkIHRvIGJlLAogICogdGhvdWdoLiA3ODEuMjUga0h6KCEpIGZvciBhIDIwMCBNSHogcHJvY2Vzc29yIC0tIHdvdy4gKi8KIHN0YXRpYyBpbnQgbWF4X2R1cmF0aW9uID0gMjU1OwotbW9kdWxlX3BhcmFtIChtYXhfZHVyYXRpb24sIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0obWF4X2R1cmF0aW9uLCBpbnQsIDA0NDQpOwogCiAvKiBGb3IgdGhlIGRlZmF1bHQgcG9saWN5LCB3ZSB3YW50IGF0IGxlYXN0IHNvbWUgcHJvY2Vzc2luZyBwb3dlcgogICogLSBsZXQncyBzYXkgNSUuIChtaW4gPSBtYXhmcmVxIC8gUE9MSUNZX01JTl9ESVYpCkBAIC0xNDAsNyArMTQxLDggQEAKICNkZWZpbmUgUE9MSUNZX01JTl9ESVYgMjAKIAogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgImd4LXN1c3Btb2QiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkiZ3gtc3VzcG1vZCIsIG1zZykKIAogLyoqCiAgKiB3ZSBjYW4gZGV0ZWN0IGEgY29yZSBtdWx0aXBpbGVyIGZyb20gZGlyMF9sc2IKQEAgLTE2NiwxMiArMTY4LDIwIEBACiAgKglMb3cgTGV2ZWwgY2hpcHNldCBpbnRlcmZhY2UJCQkJKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZ3hfY2hpcHNldF90YmxbXSBfX2luaXRkYXRhID0gewotCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0xFR0FDWSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAotCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0NZUklYLCBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9MRUdBQ1ksCisJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKKwl7IFBDSV9WRU5ET1JfSURfQ1lSSVgsIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUyMCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCB9LAorCXsgUENJX1ZFTkRPUl9JRF9DWVJJWCwgUENJX0RFVklDRV9JRF9DWVJJWF81NTEwLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJeyAwLCB9LAogfTsKIAorc3RhdGljIHZvaWQgZ3hfd3JpdGVfYnl0ZShpbnQgcmVnLCBpbnQgdmFsdWUpCit7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCByZWcsIHZhbHVlKTsKK30KKwogLyoqCiAgKiBneF9kZXRlY3RfY2hpcHNldDoKICAqCkBAIC0yMDAsNyArMjEwLDggQEAKIC8qKgogICogZ3hfZ2V0X2NwdXNwZWVkOgogICoKLSAqIEZpbmRzIG91dCBhdCB3aGljaCBlZmZpY2llbnQgZnJlcXVlbmN5IHRoZSBDeXJpeCBNZWRpYUdYL05hdFNlbWkgR2VvZGUgQ1BVIHJ1bnMuCisgKiBGaW5kcyBvdXQgYXQgd2hpY2ggZWZmaWNpZW50IGZyZXF1ZW5jeSB0aGUgQ3lyaXggTWVkaWFHWC9OYXRTZW1pCisgKiBHZW9kZSBDUFUgcnVucy4KICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBneF9nZXRfY3B1c3BlZWQodW5zaWduZWQgaW50IGNwdSkKIHsKQEAgLTIxNywxNyArMjI4LDE4IEBACiAgKgogICoqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGd4X3ZhbGlkYXRlX3NwZWVkKHVuc2lnbmVkIGludCBraHosIHU4ICpvbl9kdXJhdGlvbiwgdTggKm9mZl9kdXJhdGlvbikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ3hfdmFsaWRhdGVfc3BlZWQodW5zaWduZWQgaW50IGtoeiwgdTggKm9uX2R1cmF0aW9uLAorCQl1OCAqb2ZmX2R1cmF0aW9uKQogewogCXVuc2lnbmVkIGludCBpOwogCXU4IHRtcF9vbiwgdG1wX29mZjsKIAlpbnQgb2xkX3RtcF9mcmVxID0gc3RvY2tfZnJlcTsKIAlpbnQgdG1wX2ZyZXE7CiAKLQkqb2ZmX2R1cmF0aW9uPTE7Ci0JKm9uX2R1cmF0aW9uPTA7CisJKm9mZl9kdXJhdGlvbiA9IDE7CisJKm9uX2R1cmF0aW9uID0gMDsKIAotCWZvciAoaT1tYXhfZHVyYXRpb247IGk+MDsgaS0tKSB7CisJZm9yIChpID0gbWF4X2R1cmF0aW9uOyBpID4gMDsgaS0tKSB7CiAJCXRtcF9vZmYgPSAoKGtoeiAqIGkpIC8gc3RvY2tfZnJlcSkgJiAweGZmOwogCQl0bXBfb24gPSBpIC0gdG1wX29mZjsKIAkJdG1wX2ZyZXEgPSAoc3RvY2tfZnJlcSAqIHRtcF9vZmYpIC8gaTsKQEAgLTI1OSwyNiArMjcxLDM0IEBACiAJZnJlcXMuY3B1ID0gMDsKIAlmcmVxcy5vbGQgPSBneF9nZXRfY3B1c3BlZWQoMCk7CiAKLQluZXdfa2h6ID0gZ3hfdmFsaWRhdGVfc3BlZWQoa2h6LCAmZ3hfcGFyYW1zLT5vbl9kdXJhdGlvbiwgJmd4X3BhcmFtcy0+b2ZmX2R1cmF0aW9uKTsKKwluZXdfa2h6ID0gZ3hfdmFsaWRhdGVfc3BlZWQoa2h6LCAmZ3hfcGFyYW1zLT5vbl9kdXJhdGlvbiwKKwkJCSZneF9wYXJhbXMtPm9mZl9kdXJhdGlvbik7CiAKIAlmcmVxcy5uZXcgPSBuZXdfa2h6OwogCiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUFJFQ0hBTkdFKTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQlpZiAobmV3X2toeiAhPSBzdG9ja19mcmVxKSB7ICAvKiBpZiBuZXcga2h6ID09IDEwMCUgb2YgQ1BVIHNwZWVkLCBpdCBpcyBzcGVjaWFsIGNhc2UgKi8KKworCisJaWYgKG5ld19raHogIT0gc3RvY2tfZnJlcSkgeworCQkvKiBpZiBuZXcga2h6ID09IDEwMCUgb2YgQ1BVIHNwZWVkLCBpdCBpcyBzcGVjaWFsIGNhc2UgKi8KIAkJc3dpdGNoIChneF9wYXJhbXMtPmNzNTV4MC0+ZGV2aWNlKSB7CiAJCWNhc2UgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0xFR0FDWToKIAkJCXBtZXIxID0gZ3hfcGFyYW1zLT5wY2lfcG1lcjEgfCBJUlFfU1BEVVAgfCBWSURfU1BEVVA7CiAJCQkvKiBGSVhNRTogbmVlZCB0byB0ZXN0IG90aGVyIHZhbHVlcyAtLSBad2FuZSxNaXVyYSAqLwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfSVJRVEMsIDQpOyAvKiB0eXBpY2FsIDIgdG8gNG1zICovCi0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9WSURUQywgMTAwKTsvKiB0eXBpY2FsIDUwIHRvIDEwMG1zICovCi0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9QTUVSMSwgcG1lcjEpOworCQkJLyogdHlwaWNhbCAyIHRvIDRtcyAqLworCQkJZ3hfd3JpdGVfYnl0ZShQQ0lfSVJRVEMsIDQpOworCQkJLyogdHlwaWNhbCA1MCB0byAxMDBtcyAqLworCQkJZ3hfd3JpdGVfYnl0ZShQQ0lfVklEVEMsIDEwMCk7CisJCQlneF93cml0ZV9ieXRlKFBDSV9QTUVSMSwgcG1lcjEpOwogCi0JCQlpZiAoZ3hfcGFyYW1zLT5jczU1eDAtPnJldmlzaW9uIDwgMHgxMCkgeyAgIC8qIENTNTUzMChyZXYgMS4yLCAxLjMpICovCi0JCQkJc3VzY2ZnID0gZ3hfcGFyYW1zLT5wY2lfc3VzY2ZnIHwgU1VTTU9EOwotCQkJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDUzU1MzBBLEIuLiAqLwotCQkJCXN1c2NmZyA9IGd4X3BhcmFtcy0+cGNpX3N1c2NmZyB8IFNVU01PRCB8IFBXUlNWRTsKKwkJCWlmIChneF9wYXJhbXMtPmNzNTV4MC0+cmV2aXNpb24gPCAweDEwKSB7CisJCQkJLyogQ1M1NTMwKHJldiAxLjIsIDEuMykgKi8KKwkJCQlzdXNjZmcgPSBneF9wYXJhbXMtPnBjaV9zdXNjZmd8U1VTTU9EOworCQkJfSBlbHNlIHsKKwkJCQkvKiBDUzU1MzBBLEIuLiAqLworCQkJCXN1c2NmZyA9IGd4X3BhcmFtcy0+cGNpX3N1c2NmZ3xTVVNNT0R8UFdSU1ZFOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgUENJX0RFVklDRV9JRF9DWVJJWF81NTIwOgpAQCAtMjk0LDEzICszMTQsMTMgQEAKIAkJc3VzY2ZnID0gZ3hfcGFyYW1zLT5wY2lfc3VzY2ZnICYgfihTVVNNT0QpOwogCQlneF9wYXJhbXMtPm9mZl9kdXJhdGlvbiA9IDA7CiAJCWd4X3BhcmFtcy0+b25fZHVyYXRpb24gPSAwOwotCQlkcHJpbnRrKCJzdXNwZW5kIG1vZHVsYXRpb24gZGlzYWJsZWQ6IGNwdSBydW5zIDEwMCBwZXJjZW50IHNwZWVkLlxuIik7CisJCWRwcmludGsoInN1c3BlbmQgbW9kdWxhdGlvbiBkaXNhYmxlZDogY3B1IHJ1bnMgMTAwJSUgc3BlZWQuXG4iKTsKIAl9CiAKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9NT0RPRkYsIGd4X3BhcmFtcy0+b2ZmX2R1cmF0aW9uKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZ3hfcGFyYW1zLT5jczU1eDAsIFBDSV9NT0RPTiwgZ3hfcGFyYW1zLT5vbl9kdXJhdGlvbik7CisJZ3hfd3JpdGVfYnl0ZShQQ0lfTU9ET0ZGLCBneF9wYXJhbXMtPm9mZl9kdXJhdGlvbik7CisJZ3hfd3JpdGVfYnl0ZShQQ0lfTU9ET04sIGd4X3BhcmFtcy0+b25fZHVyYXRpb24pOwogCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGd4X3BhcmFtcy0+Y3M1NXgwLCBQQ0lfU1VTQ0ZHLCBzdXNjZmcpOworCWd4X3dyaXRlX2J5dGUoUENJX1NVU0NGRywgc3VzY2ZnKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShneF9wYXJhbXMtPmNzNTV4MCwgUENJX1NVU0NGRywgJnN1c2NmZyk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0zMzQsNyArMzU0LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwb2xpY3ktPmNwdSA9IDA7Ci0JY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIChzdG9ja19mcmVxIC8gbWF4X2R1cmF0aW9uKSwgc3RvY2tfZnJlcSk7CisJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIChzdG9ja19mcmVxIC8gbWF4X2R1cmF0aW9uKSwKKwkJCXN0b2NrX2ZyZXEpOwogCiAJLyogaXQgbmVlZHMgdG8gYmUgYXNzdXJlZCB0aGF0IGF0IGxlYXN0IG9uZSBzdXBwb3J0ZWQgZnJlcXVlbmN5IGlzCiAJICogd2l0aGluIHBvbGljeS0+bWluIGFuZCBwb2xpY3ktPm1heC4gSWYgaXQgaXMgbm90LCBwb2xpY3ktPm1heApAQCAtMzU0LDcgKzM3NSw4IEBACiAJcG9saWN5LT5tYXggPSB0bXBfZnJlcTsKIAlpZiAocG9saWN5LT5tYXggPCBwb2xpY3ktPm1pbikKIAkJcG9saWN5LT5tYXggPSBwb2xpY3ktPm1pbjsKLQljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgKHN0b2NrX2ZyZXEgLyBtYXhfZHVyYXRpb24pLCBzdG9ja19mcmVxKTsKKwljcHVmcmVxX3ZlcmlmeV93aXRoaW5fbGltaXRzKHBvbGljeSwgKHN0b2NrX2ZyZXEgLyBtYXhfZHVyYXRpb24pLAorCQkJc3RvY2tfZnJlcSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM5OCwxOCArNDIwLDE4IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogZGV0ZXJtaW5lIG1heGltdW0gZnJlcXVlbmN5ICovCi0JaWYgKHBjaV9idXNjbGspIHsKKwlpZiAocGNpX2J1c2NsaykKIAkJbWF4ZnJlcSA9IHBjaV9idXNjbGsgKiBneF9mcmVxX211bHRbZ2V0Q3g4NihDWDg2X0RJUjEpICYgMHgwZl07Ci0JfSBlbHNlIGlmIChjcHVfa2h6KSB7CisJZWxzZSBpZiAoY3B1X2toeikKIAkJbWF4ZnJlcSA9IGNwdV9raHo7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW1heGZyZXEgPSAzMDAwMCAqIGd4X2ZyZXFfbXVsdFtnZXRDeDg2KENYODZfRElSMSkgJiAweDBmXTsKLQl9CisKIAlzdG9ja19mcmVxID0gbWF4ZnJlcTsKIAljdXJmcmVxID0gZ3hfZ2V0X2NwdXNwZWVkKDApOwogCiAJZHByaW50aygiY3B1IG1heCBmcmVxdWVuY3kgaXMgJWQuXG4iLCBtYXhmcmVxKTsKLQlkcHJpbnRrKCJjcHUgY3VycmVudCBmcmVxdWVuY3kgaXMgJWRrSHouXG4iLGN1cmZyZXEpOworCWRwcmludGsoImNwdSBjdXJyZW50IGZyZXF1ZW5jeSBpcyAlZGtIei5cbiIsIGN1cmZyZXEpOwogCiAJLyogc2V0dXAgYmFzaWMgc3RydWN0IGZvciBjcHVmcmVxIEFQSSAqLwogCXBvbGljeS0+Y3B1ID0gMDsKQEAgLTQ0Nyw3ICs0NjksOCBAQAogCXN0cnVjdCBwY2lfZGV2ICpneF9wY2k7CiAKIAkvKiBUZXN0IGlmIHdlIGhhdmUgdGhlIHJpZ2h0IGhhcmR3YXJlICovCi0JaWYgKChneF9wY2kgPSBneF9kZXRlY3RfY2hpcHNldCgpKSA9PSBOVUxMKQorCWd4X3BjaSA9IGd4X2RldGVjdF9jaGlwc2V0KCk7CisJaWYgKGd4X3BjaSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGNoZWNrIHdoZXRoZXIgbW9kdWxlIHBhcmFtZXRlcnMgYXJlIHNhbmUgKi8KQEAgLTQ2OCw5ICs0OTEsMTEgQEAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJhbXMtPmNzNTV4MCwgUENJX1BNRVIxLCAmKHBhcmFtcy0+cGNpX3BtZXIxKSk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGFyYW1zLT5jczU1eDAsIFBDSV9QTUVSMiwgJihwYXJhbXMtPnBjaV9wbWVyMikpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBhcmFtcy0+Y3M1NXgwLCBQQ0lfTU9ET04sICYocGFyYW1zLT5vbl9kdXJhdGlvbikpOwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBhcmFtcy0+Y3M1NXgwLCBQQ0lfTU9ET0ZGLCAmKHBhcmFtcy0+b2ZmX2R1cmF0aW9uKSk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGFyYW1zLT5jczU1eDAsIFBDSV9NT0RPRkYsCisJCQkmKHBhcmFtcy0+b2ZmX2R1cmF0aW9uKSk7CiAKLQlpZiAoKHJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZneF9zdXNwbW9kX2RyaXZlcikpKSB7CisJcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmd4X3N1c3Btb2RfZHJpdmVyKTsKKwlpZiAocmV0KSB7CiAJCWtmcmVlKHBhcmFtcyk7CiAJCXJldHVybiByZXQ7ICAgICAgICAgICAgICAgICAgIC8qIHJlZ2lzdGVyIGVycm9yISAqLwogCX0KQEAgLTQ4NSw5ICs1MTAsOSBAQAogCWtmcmVlKGd4X3BhcmFtcyk7CiB9CiAKLU1PRFVMRV9BVVRIT1IgKCJIaXJvc2hpIE1pdXJhIDxtaXVyYUBkYS1jaGEub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiQ3B1ZnJlcSBkcml2ZXIgZm9yIEN5cml4IE1lZGlhR1ggYW5kIE5hdFNlbWkgR2VvZGUiKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJIaXJvc2hpIE1pdXJhIDxtaXVyYUBkYS1jaGEub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDcHVmcmVxIGRyaXZlciBmb3IgQ3lyaXggTWVkaWFHWCBhbmQgTmF0U2VtaSBHZW9kZSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChjcHVmcmVxX2d4X2luaXQpOwogbW9kdWxlX2V4aXQoY3B1ZnJlcV9neF9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKaW5kZXggYTRjZmY1ZC4uZjFjNTFhZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKQEAgLTMwLDEyICszMCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2FjcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KIAogI2luY2x1ZGUgImxvbmdoYXVsLmgiCkBAIC01OCw3ICs1OCw3IEBACiAjZGVmaW5lIFVTRV9OT1JUSEJSSURHRQkJKDEgPDwgMikKIAogc3RhdGljIGludCBjcHVfbW9kZWw7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG51bXNjYWxlcz0xNjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbnVtc2NhbGVzID0gMTY7CiBzdGF0aWMgdW5zaWduZWQgaW50IGZzYjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtVl9wb3MgKnZybV9tVl90YWJsZTsKQEAgLTY3LDggKzY3LDggQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaGlnaGVzdF9zcGVlZCwgbG93ZXN0X3NwZWVkOyAvKiBrSHogKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWlubXVsdCwgbWF4bXVsdDsKIHN0YXRpYyBpbnQgY2FuX3NjYWxlX3ZvbHRhZ2U7Ci1zdGF0aWMgc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwciA9IE5VTEw7Ci1zdGF0aWMgc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4Owogc3RhdGljIHUzMiBhY3BpX3JlZ3NfYWRkcjsKIHN0YXRpYyB1OCBsb25naGF1bF9mbGFnczsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbG9uZ2hhdWxfaW5kZXg7CkBAIC03OCwxMiArNzgsMTMgQEAKIHN0YXRpYyBpbnQgZGlzYWJsZV9hY3BpX2MzOwogc3RhdGljIGludCByZXZpZF9lcnJhdGE7CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAibG9uZ2hhdWwiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkibG9uZ2hhdWwiLCBtc2cpCiAKIAogLyogQ2xvY2sgcmF0aW9zIG11bHRpcGxpZWQgYnkgMTAgKi8KLXN0YXRpYyBpbnQgY2xvY2tfcmF0aW9bMzJdOwotc3RhdGljIGludCBlYmxjcl90YWJsZVszMl07CitzdGF0aWMgaW50IG11bHRzWzMyXTsKK3N0YXRpYyBpbnQgZWJsY3JbMzJdOwogc3RhdGljIGludCBsb25naGF1bF92ZXJzaW9uOwogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqbG9uZ2hhdWxfdGFibGU7CiAKQEAgLTkzLDcgKzk0LDcgQEAKIHN0YXRpYyBjaGFyICpwcmludF9zcGVlZChpbnQgc3BlZWQpCiB7CiAJaWYgKHNwZWVkIDwgMTAwMCkgewotCQlzbnByaW50ZihzcGVlZGJ1ZmZlciwgc2l6ZW9mKHNwZWVkYnVmZmVyKSwiJWRNSHoiLCBzcGVlZCk7CisJCXNucHJpbnRmKHNwZWVkYnVmZmVyLCBzaXplb2Yoc3BlZWRidWZmZXIpLCAiJWRNSHoiLCBzcGVlZCk7CiAJCXJldHVybiBzcGVlZGJ1ZmZlcjsKIAl9CiAKQEAgLTEyMiwyNyArMTIzLDI4IEBACiAKIHN0YXRpYyBpbnQgbG9uZ2hhdWxfZ2V0X2NwdV9tdWx0KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBpbnZhbHVlPTAsbG8sIGhpOworCXVuc2lnbmVkIGxvbmcgaW52YWx1ZSA9IDAsIGxvLCBoaTsKIAotCXJkbXNyIChNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbG8sIGhpKTsKLQlpbnZhbHVlID0gKGxvICYgKDE8PDIyfDE8PDIzfDE8PDI0fDE8PDI1KSkgPj4yMjsKLQlpZiAobG9uZ2hhdWxfdmVyc2lvbj09VFlQRV9MT05HSEFVTF9WMiB8fCBsb25naGF1bF92ZXJzaW9uPT1UWVBFX1BPV0VSU0FWRVIpIHsKKwlyZG1zcihNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbG8sIGhpKTsKKwlpbnZhbHVlID0gKGxvICYgKDE8PDIyfDE8PDIzfDE8PDI0fDE8PDI1KSk+PjIyOworCWlmIChsb25naGF1bF92ZXJzaW9uID09IFRZUEVfTE9OR0hBVUxfVjIgfHwKKwkgICAgbG9uZ2hhdWxfdmVyc2lvbiA9PSBUWVBFX1BPV0VSU0FWRVIpIHsKIAkJaWYgKGxvICYgKDE8PDI3KSkKLQkJCWludmFsdWUrPTE2OworCQkJaW52YWx1ZSArPSAxNjsKIAl9Ci0JcmV0dXJuIGVibGNyX3RhYmxlW2ludmFsdWVdOworCXJldHVybiBlYmxjcltpbnZhbHVlXTsKIH0KIAogLyogRm9yIHByb2Nlc3NvciB3aXRoIEJDUjIgTVNSICovCiAKLXN0YXRpYyB2b2lkIGRvX2xvbmdoYXVsMSh1bnNpZ25lZCBpbnQgY2xvY2tfcmF0aW9faW5kZXgpCitzdGF0aWMgdm9pZCBkb19sb25naGF1bDEodW5zaWduZWQgaW50IG11bHRzX2luZGV4KQogewogCXVuaW9uIG1zcl9iY3IyIGJjcjI7CiAKIAlyZG1zcmwoTVNSX1ZJQV9CQ1IyLCBiY3IyLnZhbCk7CiAJLyogRW5hYmxlIHNvZnR3YXJlIGNsb2NrIG11bHRpcGxpZXIgKi8KIAliY3IyLmJpdHMuRVNPRlRCRiA9IDE7Ci0JYmNyMi5iaXRzLkNMT0NLTVVMID0gY2xvY2tfcmF0aW9faW5kZXggJiAweGZmOworCWJjcjIuYml0cy5DTE9DS01VTCA9IG11bHRzX2luZGV4ICYgMHhmZjsKIAogCS8qIFN5bmMgdG8gdGltZXIgdGljayAqLwogCXNhZmVfaGFsdCgpOwpAQCAtMTYxLDcgKzE2Myw3IEBACiAKIC8qIEZvciBwcm9jZXNzb3Igd2l0aCBMb25naGF1bCBNU1IgKi8KIAotc3RhdGljIHZvaWQgZG9fcG93ZXJzYXZlcihpbnQgY3hfYWRkcmVzcywgdW5zaWduZWQgaW50IGNsb2NrX3JhdGlvX2luZGV4LAorc3RhdGljIHZvaWQgZG9fcG93ZXJzYXZlcihpbnQgY3hfYWRkcmVzcywgdW5zaWduZWQgaW50IG11bHRzX2luZGV4LAogCQkJICB1bnNpZ25lZCBpbnQgZGlyKQogewogCXVuaW9uIG1zcl9sb25naGF1bCBsb25naGF1bDsKQEAgLTE3MywxMSArMTc1LDExIEBACiAJCWxvbmdoYXVsLmJpdHMuUmV2aXNpb25LZXkgPSBsb25naGF1bC5iaXRzLlJldmlzaW9uSUQ7CiAJZWxzZQogCQlsb25naGF1bC5iaXRzLlJldmlzaW9uS2V5ID0gMDsKLQlsb25naGF1bC5iaXRzLlNvZnRCdXNSYXRpbyA9IGNsb2NrX3JhdGlvX2luZGV4ICYgMHhmOwotCWxvbmdoYXVsLmJpdHMuU29mdEJ1c1JhdGlvNCA9IChjbG9ja19yYXRpb19pbmRleCAmIDB4MTApID4+IDQ7CisJbG9uZ2hhdWwuYml0cy5Tb2Z0QnVzUmF0aW8gPSBtdWx0c19pbmRleCAmIDB4ZjsKKwlsb25naGF1bC5iaXRzLlNvZnRCdXNSYXRpbzQgPSAobXVsdHNfaW5kZXggJiAweDEwKSA+PiA0OwogCS8qIFNldHVwIG5ldyB2b2x0YWdlICovCiAJaWYgKGNhbl9zY2FsZV92b2x0YWdlKQotCQlsb25naGF1bC5iaXRzLlNvZnRWSUQgPSAoY2xvY2tfcmF0aW9faW5kZXggPj4gOCkgJiAweDFmOworCQlsb25naGF1bC5iaXRzLlNvZnRWSUQgPSAobXVsdHNfaW5kZXggPj4gOCkgJiAweDFmOwogCS8qIFN5bmMgdG8gdGltZXIgdGljayAqLwogCXNhZmVfaGFsdCgpOwogCS8qIFJhaXNlIHZvbHRhZ2UgaWYgbmVjZXNzYXJ5ICovCkBAIC0yNDAsMTQgKzI0MiwxNCBAQAogCiAvKioKICAqIGxvbmdoYXVsX3NldF9jcHVfZnJlcXVlbmN5KCkKLSAqIEBjbG9ja19yYXRpb19pbmRleCA6IGJpdHBhdHRlcm4gb2YgdGhlIG5ldyBtdWx0aXBsaWVyLgorICogQG11bHRzX2luZGV4IDogYml0cGF0dGVybiBvZiB0aGUgbmV3IG11bHRpcGxpZXIuCiAgKgogICogU2V0cyBhIG5ldyBjbG9jayByYXRpby4KICAqLwogCiBzdGF0aWMgdm9pZCBsb25naGF1bF9zZXRzdGF0ZSh1bnNpZ25lZCBpbnQgdGFibGVfaW5kZXgpCiB7Ci0JdW5zaWduZWQgaW50IGNsb2NrX3JhdGlvX2luZGV4OworCXVuc2lnbmVkIGludCBtdWx0c19pbmRleDsKIAlpbnQgc3BlZWQsIG11bHQ7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI1Niw5ICsyNTgsOSBAQAogCXUzMiBibV90aW1lb3V0ID0gMTAwMDsKIAl1bnNpZ25lZCBpbnQgZGlyID0gMDsKIAotCWNsb2NrX3JhdGlvX2luZGV4ID0gbG9uZ2hhdWxfdGFibGVbdGFibGVfaW5kZXhdLmluZGV4OworCW11bHRzX2luZGV4ID0gbG9uZ2hhdWxfdGFibGVbdGFibGVfaW5kZXhdLmluZGV4OwogCS8qIFNhZmV0eSBwcmVjYXV0aW9ucyAqLwotCW11bHQgPSBjbG9ja19yYXRpb1tjbG9ja19yYXRpb19pbmRleCAmIDB4MWZdOworCW11bHQgPSBtdWx0c1ttdWx0c19pbmRleCAmIDB4MWZdOwogCWlmIChtdWx0ID09IC0xKQogCQlyZXR1cm47CiAJc3BlZWQgPSBjYWxjX3NwZWVkKG11bHQpOwpAQCAtMjc0LDcgKzI3Niw3IEBACiAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCi0JZHByaW50ayAoIlNldHRpbmcgdG8gRlNCOiVkTUh6IE11bHQ6JWQuJWR4ICglcylcbiIsCisJZHByaW50aygiU2V0dGluZyB0byBGU0I6JWRNSHogTXVsdDolZC4lZHggKCVzKVxuIiwKIAkJCWZzYiwgbXVsdC8xMCwgbXVsdCUxMCwgcHJpbnRfc3BlZWQoc3BlZWQvMTAwMCkpOwogcmV0cnlfbG9vcDoKIAlwcmVlbXB0X2Rpc2FibGUoKTsKQEAgLTI4Miw4ICsyODQsOCBAQAogCiAJcGljMl9tYXNrID0gaW5iKDB4QTEpOwogCXBpYzFfbWFzayA9IGluYigweDIxKTsJLyogd29ya3Mgb24gQzMuIHNhdmUgbWFzay4gKi8KLQlvdXRiKDB4RkYsMHhBMSk7CS8qIE92ZXJraWxsICovCi0Jb3V0YigweEZFLDB4MjEpOwkvKiBUTVIwIG9ubHkgKi8KKwlvdXRiKDB4RkYsIDB4QTEpOwkvKiBPdmVya2lsbCAqLworCW91dGIoMHhGRSwgMHgyMSk7CS8qIFRNUjAgb25seSAqLwogCiAJLyogV2FpdCB3aGlsZSBQQ0kgYnVzIGlzIGJ1c3kuICovCiAJaWYgKGFjcGlfcmVnc19hZGRyICYmIChsb25naGF1bF9mbGFncyAmIFVTRV9OT1JUSEJSSURHRQpAQCAtMzEyLDcgKzMxNCw3IEBACiAJICogU29mdHdhcmUgY29udHJvbGxlZCBtdWx0aXBsaWVycyBvbmx5LgogCSAqLwogCWNhc2UgVFlQRV9MT05HSEFVTF9WMToKLQkJZG9fbG9uZ2hhdWwxKGNsb2NrX3JhdGlvX2luZGV4KTsKKwkJZG9fbG9uZ2hhdWwxKG11bHRzX2luZGV4KTsKIAkJYnJlYWs7CiAKIAkvKgpAQCAtMzI3LDkgKzMyOSw5IEBACiAJCWlmIChsb25naGF1bF9mbGFncyAmIFVTRV9BQ1BJX0MzKSB7CiAJCQkvKiBEb24ndCBhbGxvdyB3YWtldXAgKi8KIAkJCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0JVU19NQVNURVJfUkxELCAwKTsKLQkJCWRvX3Bvd2Vyc2F2ZXIoY3gtPmFkZHJlc3MsIGNsb2NrX3JhdGlvX2luZGV4LCBkaXIpOworCQkJZG9fcG93ZXJzYXZlcihjeC0+YWRkcmVzcywgbXVsdHNfaW5kZXgsIGRpcik7CiAJCX0gZWxzZSB7Ci0JCQlkb19wb3dlcnNhdmVyKDAsIGNsb2NrX3JhdGlvX2luZGV4LCBkaXIpOworCQkJZG9fcG93ZXJzYXZlcigwLCBtdWx0c19pbmRleCwgZGlyKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0zNDEsOCArMzQzLDggQEAKIAkJLyogRW5hYmxlIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gKi8KIAkJYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQVJCX0RJU0FCTEUsIDApOwogCX0KLQlvdXRiKHBpYzJfbWFzaywweEExKTsJLyogcmVzdG9yZSBtYXNrICovCi0Jb3V0YihwaWMxX21hc2ssMHgyMSk7CisJb3V0YihwaWMyX21hc2ssIDB4QTEpOwkvKiByZXN0b3JlIG1hc2sgKi8KKwlvdXRiKHBpYzFfbWFzaywgMHgyMSk7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJcHJlZW1wdF9lbmFibGUoKTsKQEAgLTM5Miw3ICszOTQsOCBAQAogCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOwogCiAJaWYgKCFibV90aW1lb3V0KQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiV2FybmluZzogVGltZW91dCB3aGlsZSB3YWl0aW5nIGZvciBpZGxlIFBDSSBidXMuXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIldhcm5pbmc6IFRpbWVvdXQgd2hpbGUgd2FpdGluZyBmb3IgIgorCQkJCSJpZGxlIFBDSSBidXMuXG4iKTsKIH0KIAogLyoKQEAgLTQ1OCwzMSArNDYxLDMyIEBACiAJCWJyZWFrOwogCX0KIAotCWRwcmludGsgKCJNaW5NdWx0OiVkLiVkeCBNYXhNdWx0OiVkLiVkeFxuIiwKKwlkcHJpbnRrKCJNaW5NdWx0OiVkLiVkeCBNYXhNdWx0OiVkLiVkeFxuIiwKIAkJIG1pbm11bHQvMTAsIG1pbm11bHQlMTAsIG1heG11bHQvMTAsIG1heG11bHQlMTApOwogCiAJaGlnaGVzdF9zcGVlZCA9IGNhbGNfc3BlZWQobWF4bXVsdCk7CiAJbG93ZXN0X3NwZWVkID0gY2FsY19zcGVlZChtaW5tdWx0KTsKLQlkcHJpbnRrICgiRlNCOiVkTUh6ICBMb3dlc3Qgc3BlZWQ6ICVzICAgSGlnaGVzdCBzcGVlZDolc1xuIiwgZnNiLAorCWRwcmludGsoIkZTQjolZE1IeiAgTG93ZXN0IHNwZWVkOiAlcyAgIEhpZ2hlc3Qgc3BlZWQ6JXNcbiIsIGZzYiwKIAkJIHByaW50X3NwZWVkKGxvd2VzdF9zcGVlZC8xMDAwKSwKIAkJIHByaW50X3NwZWVkKGhpZ2hlc3Rfc3BlZWQvMTAwMCkpOwogCiAJaWYgKGxvd2VzdF9zcGVlZCA9PSBoaWdoZXN0X3NwZWVkKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiaGlnaGVzdHNwZWVkID09IGxvd2VzdCwgYWJvcnRpbmcuXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImhpZ2hlc3RzcGVlZCA9PSBsb3dlc3QsIGFib3J0aW5nLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAobG93ZXN0X3NwZWVkID4gaGlnaGVzdF9zcGVlZCkgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIm5vbnNlbnNlISBsb3dlc3QgKCVkID4gJWQpICFcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJub25zZW5zZSEgbG93ZXN0ICglZCA+ICVkKSAhXG4iLAogCQkJbG93ZXN0X3NwZWVkLCBoaWdoZXN0X3NwZWVkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbG9uZ2hhdWxfdGFibGUgPSBrbWFsbG9jKChudW1zY2FsZXMgKyAxKSAqIHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpLCBHRlBfS0VSTkVMKTsKLQlpZighbG9uZ2hhdWxfdGFibGUpCisJbG9uZ2hhdWxfdGFibGUgPSBrbWFsbG9jKChudW1zY2FsZXMgKyAxKSAqIHNpemVvZigqbG9uZ2hhdWxfdGFibGUpLAorCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFsb25naGF1bF90YWJsZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlmb3IgKGogPSAwOyBqIDwgbnVtc2NhbGVzOyBqKyspIHsKLQkJcmF0aW8gPSBjbG9ja19yYXRpb1tqXTsKKwkJcmF0aW8gPSBtdWx0c1tqXTsKIAkJaWYgKHJhdGlvID09IC0xKQogCQkJY29udGludWU7CiAJCWlmIChyYXRpbyA+IG1heG11bHQgfHwgcmF0aW8gPCBtaW5tdWx0KQpAQCAtNTA3LDEzICs1MTEsMTAgQEAKIAkJCX0KIAkJfQogCQlpZiAobWluX2kgIT0gaikgewotCQkJdW5zaWduZWQgaW50IHRlbXA7Ci0JCQl0ZW1wID0gbG9uZ2hhdWxfdGFibGVbal0uZnJlcXVlbmN5OwotCQkJbG9uZ2hhdWxfdGFibGVbal0uZnJlcXVlbmN5ID0gbG9uZ2hhdWxfdGFibGVbbWluX2ldLmZyZXF1ZW5jeTsKLQkJCWxvbmdoYXVsX3RhYmxlW21pbl9pXS5mcmVxdWVuY3kgPSB0ZW1wOwotCQkJdGVtcCA9IGxvbmdoYXVsX3RhYmxlW2pdLmluZGV4OwotCQkJbG9uZ2hhdWxfdGFibGVbal0uaW5kZXggPSBsb25naGF1bF90YWJsZVttaW5faV0uaW5kZXg7Ci0JCQlsb25naGF1bF90YWJsZVttaW5faV0uaW5kZXggPSB0ZW1wOworCQkJc3dhcChsb25naGF1bF90YWJsZVtqXS5mcmVxdWVuY3ksCisJCQkgICAgIGxvbmdoYXVsX3RhYmxlW21pbl9pXS5mcmVxdWVuY3kpOworCQkJc3dhcChsb25naGF1bF90YWJsZVtqXS5pbmRleCwKKwkJCSAgICAgbG9uZ2hhdWxfdGFibGVbbWluX2ldLmluZGV4KTsKIAkJfQogCX0KIApAQCAtNTIxLDcgKzUyMiw3IEBACiAKIAkvKiBGaW5kIGluZGV4IHdlIGFyZSBydW5uaW5nIG9uICovCiAJZm9yIChqID0gMDsgaiA8IGs7IGorKykgewotCQlpZiAoY2xvY2tfcmF0aW9bbG9uZ2hhdWxfdGFibGVbal0uaW5kZXggJiAweDFmXSA9PSBtdWx0KSB7CisJCWlmIChtdWx0c1tsb25naGF1bF90YWJsZVtqXS5pbmRleCAmIDB4MWZdID09IG11bHQpIHsKIAkJCWxvbmdoYXVsX2luZGV4ID0gajsKIAkJCWJyZWFrOwogCQl9CkBAIC01NTksMjAgKzU2MCwyMiBAQAogCW1heHZpZCA9IHZybV9tVl90YWJsZVtsb25naGF1bC5iaXRzLk1heGltdW1WSURdOwogCiAJaWYgKG1pbnZpZC5tViA9PSAwIHx8IG1heHZpZC5tViA9PSAwIHx8IG1pbnZpZC5tViA+IG1heHZpZC5tVikgewotCQlwcmludGsgKEtFUk5fSU5GTyBQRlggIkJvZ3VzIHZhbHVlcyBNaW46JWQuJTAzZCBNYXg6JWQuJTAzZC4gIgorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQm9ndXMgdmFsdWVzIE1pbjolZC4lMDNkIE1heDolZC4lMDNkLiAiCiAJCQkJCSJWb2x0YWdlIHNjYWxpbmcgZGlzYWJsZWQuXG4iLAotCQkJCQltaW52aWQubVYvMTAwMCwgbWludmlkLm1WJTEwMDAsIG1heHZpZC5tVi8xMDAwLCBtYXh2aWQubVYlMTAwMCk7CisJCQkJCW1pbnZpZC5tVi8xMDAwLCBtaW52aWQubVYlMTAwMCwKKwkJCQkJbWF4dmlkLm1WLzEwMDAsIG1heHZpZC5tViUxMDAwKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChtaW52aWQubVYgPT0gbWF4dmlkLm1WKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiQ2xhaW1zIHRvIHN1cHBvcnQgdm9sdGFnZSBzY2FsaW5nIGJ1dCBtaW4gJiBtYXggYXJlICIKLQkJCQkiYm90aCAlZC4lMDNkLiBWb2x0YWdlIHNjYWxpbmcgZGlzYWJsZWRcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJDbGFpbXMgdG8gc3VwcG9ydCB2b2x0YWdlIHNjYWxpbmcgYnV0ICIKKwkJCQkibWluICYgbWF4IGFyZSBib3RoICVkLiUwM2QuICIKKwkJCQkiVm9sdGFnZSBzY2FsaW5nIGRpc2FibGVkXG4iLAogCQkJCW1heHZpZC5tVi8xMDAwLCBtYXh2aWQubVYlMTAwMCk7CiAJCXJldHVybjsKIAl9CiAKLQkvKiBIb3cgbWFueSB2b2x0YWdlIHN0ZXBzICovCisJLyogSG93IG1hbnkgdm9sdGFnZSBzdGVwcyovCiAJbnVtdnNjYWxlcyA9IG1heHZpZC5wb3MgLSBtaW52aWQucG9zICsgMTsKIAlwcmludGsoS0VSTl9JTkZPIFBGWAogCQkiTWF4IFZJRD0lZC4lMDNkICAiCkBAIC01ODYsNyArNTg5LDcgQEAKIAlqID0gbG9uZ2hhdWwuYml0cy5NaW5NSHpCUjsKIAlpZiAobG9uZ2hhdWwuYml0cy5NaW5NSHpCUjQpCiAJCWogKz0gMTY7Ci0JbWluX3ZpZF9zcGVlZCA9IGVibGNyX3RhYmxlW2pdOworCW1pbl92aWRfc3BlZWQgPSBlYmxjcltqXTsKIAlpZiAobWluX3ZpZF9zcGVlZCA9PSAtMSkKIAkJcmV0dXJuOwogCXN3aXRjaCAobG9uZ2hhdWwuYml0cy5NaW5NSHpGU0IpIHsKQEAgLTYxNyw3ICs2MjAsOCBAQAogCQkJcG9zID0gbWludmlkLnBvczsKIAkJbG9uZ2hhdWxfdGFibGVbal0uaW5kZXggfD0gbVZfdnJtX3RhYmxlW3Bvc10gPDwgODsKIAkJdmlkID0gdnJtX21WX3RhYmxlW21WX3ZybV90YWJsZVtwb3NdXTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImY6ICVkIGtIeiwgaW5kZXg6ICVkLCB2aWQ6ICVkIG1WXG4iLCBzcGVlZCwgaiwgdmlkLm1WKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImY6ICVkIGtIeiwgaW5kZXg6ICVkLCB2aWQ6ICVkIG1WXG4iLAorCQkJCXNwZWVkLCBqLCB2aWQubVYpOwogCQlqKys7CiAJfQogCkBAIC02NDAsNyArNjQ0LDggQEAKIAl1bnNpZ25lZCBpbnQgZGlyID0gMDsKIAl1OCB2aWQsIGN1cnJlbnRfdmlkOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIGxvbmdoYXVsX3RhYmxlLCB0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZ0YWJsZV9pbmRleCkpCisJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIGxvbmdoYXVsX3RhYmxlLCB0YXJnZXRfZnJlcSwKKwkJCQlyZWxhdGlvbiwgJnRhYmxlX2luZGV4KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEb24ndCBzZXQgc2FtZSBmcmVxdWVuY3kgYWdhaW4gKi8KQEAgLTY1Niw3ICs2NjEsOCBAQAogCQkgKiB0aGlzIGluIGhhcmR3YXJlLCBDMyBpcyBvbGQgYW5kIHdlIG5lZWQgdG8gZG8gdGhpcwogCQkgKiBpbiBzb2Z0d2FyZS4gKi8KIAkJaSA9IGxvbmdoYXVsX2luZGV4OwotCQljdXJyZW50X3ZpZCA9IChsb25naGF1bF90YWJsZVtsb25naGF1bF9pbmRleF0uaW5kZXggPj4gOCkgJiAweDFmOworCQljdXJyZW50X3ZpZCA9IChsb25naGF1bF90YWJsZVtsb25naGF1bF9pbmRleF0uaW5kZXggPj4gOCk7CisJCWN1cnJlbnRfdmlkICY9IDB4MWY7CiAJCWlmICh0YWJsZV9pbmRleCA+IGxvbmdoYXVsX2luZGV4KQogCQkJZGlyID0gMTsKIAkJd2hpbGUgKGkgIT0gdGFibGVfaW5kZXgpIHsKQEAgLTY5MSw5ICs2OTcsOSBAQAogewogCXN0cnVjdCBhY3BpX2RldmljZSAqZDsKIAotCWlmICggYWNwaV9idXNfZ2V0X2RldmljZShvYmpfaGFuZGxlLCAmZCkgKSB7CisJaWYgKGFjcGlfYnVzX2dldF9kZXZpY2Uob2JqX2hhbmRsZSwgJmQpKQogCQlyZXR1cm4gMDsKLQl9CisKIAkqcmV0dXJuX3ZhbHVlID0gYWNwaV9kcml2ZXJfZGF0YShkKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTc1MCw3ICs3NTYsNyBAQAogCS8qIEZpbmQgVlQ4MjM1IHNvdXRoYnJpZGdlICovCiAJZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyMzUsIE5VTEwpOwogCWlmIChkZXYgPT0gTlVMTCkKLQkvKiBGaW5kIFZUODIzNyBzb3V0aGJyaWRnZSAqLworCQkvKiBGaW5kIFZUODIzNyBzb3V0aGJyaWRnZSAqLwogCQlkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwKIAkJCQkgICAgIFBDSV9ERVZJQ0VfSURfVklBXzgyMzcsIE5VTEwpOwogCWlmIChkZXYgIT0gTlVMTCkgewpAQCAtNzY5LDcgKzc3NSw4IEBACiAJCWlmIChwY2lfY21kICYgMSA8PCA3KSB7CiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCAweDg4LCAmYWNwaV9yZWdzX2FkZHIpOwogCQkJYWNwaV9yZWdzX2FkZHIgJj0gMHhmZjAwOwotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFDUEkgSS9PIGF0IDB4JXhcbiIsIGFjcGlfcmVnc19hZGRyKTsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICJBQ1BJIEkvTyBhdCAweCV4XG4iLAorCQkJCQlhY3BpX3JlZ3NfYWRkcik7CiAJCX0KIAogCQlwY2lfZGV2X3B1dChkZXYpOwpAQCAtNzgxLDcgKzc4OCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBsb25naGF1bF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7Ci0JY2hhciAqY3B1bmFtZT1OVUxMOworCWNoYXIgKmNwdW5hbWUgPSBOVUxMOwogCWludCByZXQ7CiAJdTMyIGxvLCBoaTsKIApAQCAtNzkxLDggKzc5OCw4IEBACiAJCWNwdV9tb2RlbCA9IENQVV9TQU1VRUw7CiAJCWNwdW5hbWUgPSAiQzMgJ1NhbXVlbCcgW0M1QV0iOwogCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9MT05HSEFVTF9WMTsKLQkJbWVtY3B5IChjbG9ja19yYXRpbywgc2FtdWVsMV9jbG9ja19yYXRpbywgc2l6ZW9mKHNhbXVlbDFfY2xvY2tfcmF0aW8pKTsKLQkJbWVtY3B5IChlYmxjcl90YWJsZSwgc2FtdWVsMV9lYmxjciwgc2l6ZW9mKHNhbXVlbDFfZWJsY3IpKTsKKwkJbWVtY3B5KG11bHRzLCBzYW11ZWwxX211bHRzLCBzaXplb2Yoc2FtdWVsMV9tdWx0cykpOworCQltZW1jcHkoZWJsY3IsIHNhbXVlbDFfZWJsY3IsIHNpemVvZihzYW11ZWwxX2VibGNyKSk7CiAJCWJyZWFrOwogCiAJY2FzZSA3OgpAQCAtODAzLDEwICs4MTAsOCBAQAogCQkJY3B1bmFtZSA9ICJDMyAnU2FtdWVsIDInIFtDNUJdIjsKIAkJCS8qIE5vdGUsIHRoaXMgaXMgbm90IGEgdHlwbywgZWFybHkgU2FtdWVsMidzIGhhZAogCQkJICogU2FtdWVsMSByYXRpb3MuICovCi0JCQltZW1jcHkoY2xvY2tfcmF0aW8sIHNhbXVlbDFfY2xvY2tfcmF0aW8sCi0JCQkJc2l6ZW9mKHNhbXVlbDFfY2xvY2tfcmF0aW8pKTsKLQkJCW1lbWNweShlYmxjcl90YWJsZSwgc2FtdWVsMl9lYmxjciwKLQkJCQlzaXplb2Yoc2FtdWVsMl9lYmxjcikpOworCQkJbWVtY3B5KG11bHRzLCBzYW11ZWwxX211bHRzLCBzaXplb2Yoc2FtdWVsMV9tdWx0cykpOworCQkJbWVtY3B5KGVibGNyLCBzYW11ZWwyX2VibGNyLCBzaXplb2Yoc2FtdWVsMl9lYmxjcikpOwogCQkJYnJlYWs7CiAJCWNhc2UgMSAuLi4gMTU6CiAJCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9MT05HSEFVTF9WMTsKQEAgLTgxNywxMCArODIyLDggQEAKIAkJCQljcHVfbW9kZWwgPSBDUFVfRVpSQTsKIAkJCQljcHVuYW1lID0gIkMzICdFenJhJyBbQzVDXSI7CiAJCQl9Ci0JCQltZW1jcHkoY2xvY2tfcmF0aW8sIGV6cmFfY2xvY2tfcmF0aW8sCi0JCQkJc2l6ZW9mKGV6cmFfY2xvY2tfcmF0aW8pKTsKLQkJCW1lbWNweShlYmxjcl90YWJsZSwgZXpyYV9lYmxjciwKLQkJCQlzaXplb2YoZXpyYV9lYmxjcikpOworCQkJbWVtY3B5KG11bHRzLCBlenJhX211bHRzLCBzaXplb2YoZXpyYV9tdWx0cykpOworCQkJbWVtY3B5KGVibGNyLCBlenJhX2VibGNyLCBzaXplb2YoZXpyYV9lYmxjcikpOwogCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CkBAIC04MjksMTggKzgzMiwxNiBAQAogCQljcHVfbW9kZWwgPSBDUFVfRVpSQV9UOwogCQljcHVuYW1lID0gIkMzICdFenJhLVQnIFtDNU1dIjsKIAkJbG9uZ2hhdWxfdmVyc2lvbiA9IFRZUEVfUE9XRVJTQVZFUjsKLQkJbnVtc2NhbGVzPTMyOwotCQltZW1jcHkgKGNsb2NrX3JhdGlvLCBlenJhdF9jbG9ja19yYXRpbywgc2l6ZW9mKGV6cmF0X2Nsb2NrX3JhdGlvKSk7Ci0JCW1lbWNweSAoZWJsY3JfdGFibGUsIGV6cmF0X2VibGNyLCBzaXplb2YoZXpyYXRfZWJsY3IpKTsKKwkJbnVtc2NhbGVzID0gMzI7CisJCW1lbWNweShtdWx0cywgZXpyYXRfbXVsdHMsIHNpemVvZihlenJhdF9tdWx0cykpOworCQltZW1jcHkoZWJsY3IsIGV6cmF0X2VibGNyLCBzaXplb2YoZXpyYXRfZWJsY3IpKTsKIAkJYnJlYWs7CiAKIAljYXNlIDk6CiAJCWxvbmdoYXVsX3ZlcnNpb24gPSBUWVBFX1BPV0VSU0FWRVI7CiAJCW51bXNjYWxlcyA9IDMyOwotCQltZW1jcHkoY2xvY2tfcmF0aW8sCi0JCSAgICAgICBuZWhlbWlhaF9jbG9ja19yYXRpbywKLQkJICAgICAgIHNpemVvZihuZWhlbWlhaF9jbG9ja19yYXRpbykpOwotCQltZW1jcHkoZWJsY3JfdGFibGUsIG5laGVtaWFoX2VibGNyLCBzaXplb2YobmVoZW1pYWhfZWJsY3IpKTsKKwkJbWVtY3B5KG11bHRzLCBuZWhlbWlhaF9tdWx0cywgc2l6ZW9mKG5laGVtaWFoX211bHRzKSk7CisJCW1lbWNweShlYmxjciwgbmVoZW1pYWhfZWJsY3IsIHNpemVvZihuZWhlbWlhaF9lYmxjcikpOwogCQlzd2l0Y2ggKGMtPng4Nl9tYXNrKSB7CiAJCWNhc2UgMCAuLi4gMToKIAkJCWNwdV9tb2RlbCA9IENQVV9ORUhFTUlBSDsKQEAgLTg2OSwxNCArODcwLDE0IEBACiAJCQlsb25naGF1bF92ZXJzaW9uID0gVFlQRV9MT05HSEFVTF9WMTsKIAl9CiAKLQlwcmludGsgKEtFUk5fSU5GTyBQRlggIlZJQSAlcyBDUFUgZGV0ZWN0ZWQuICAiLCBjcHVuYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiVklBICVzIENQVSBkZXRlY3RlZC4gICIsIGNwdW5hbWUpOwogCXN3aXRjaCAobG9uZ2hhdWxfdmVyc2lvbikgewogCWNhc2UgVFlQRV9MT05HSEFVTF9WMToKIAljYXNlIFRZUEVfTE9OR0hBVUxfVjI6Ci0JCXByaW50ayAoIkxvbmdoYXVsIHYlZCBzdXBwb3J0ZWQuXG4iLCBsb25naGF1bF92ZXJzaW9uKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiTG9uZ2hhdWwgdiVkIHN1cHBvcnRlZC5cbiIsIGxvbmdoYXVsX3ZlcnNpb24pOwogCQlicmVhazsKIAljYXNlIFRZUEVfUE9XRVJTQVZFUjoKLQkJcHJpbnRrICgiUG93ZXJzYXZlciBzdXBwb3J0ZWQuXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiUG93ZXJzYXZlciBzdXBwb3J0ZWQuXG4iKTsKIAkJYnJlYWs7CiAJfTsKIApAQCAtOTQwLDcgKzk0MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyKiBsb25naGF1bF9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqbG9uZ2hhdWxfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTk2NiwxMyArOTY3LDE1IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKG51bV9vbmxpbmVfY3B1cygpID4gMSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJNb3JlIHRoYW4gMSBDUFUgZGV0ZWN0ZWQsIGxvbmdoYXVsIGRpc2FibGVkLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIk1vcmUgdGhhbiAxIENQVSBkZXRlY3RlZCwgIgorCQkJCSJsb25naGF1bCBkaXNhYmxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAlpZiAoY3B1X2hhc19hcGljKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkFQSUMgZGV0ZWN0ZWQuIExvbmdoYXVsIGlzIGN1cnJlbnRseSBicm9rZW4gaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkFQSUMgZGV0ZWN0ZWQuIExvbmdoYXVsIGlzIGN1cnJlbnRseSAiCisJCQkJImJyb2tlbiBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogI2VuZGlmCkBAIC05OTMsOCArOTk2LDggQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaT0wOyBpIDwgbnVtc2NhbGVzOyBpKyspIHsKLQkJaWYgKGNsb2NrX3JhdGlvW2ldID09IG1heG11bHQpIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtc2NhbGVzOyBpKyspIHsKKwkJaWYgKG11bHRzW2ldID09IG1heG11bHQpIHsKIAkJCWxvbmdoYXVsX3NldHN0YXRlKGkpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEwMDcsMTEgKzEwMTAsMTEgQEAKIC8qIEV2ZW4gaWYgQklPUyBpcyBleHBvcnRpbmcgQUNQSSBDMyBzdGF0ZSwgYW5kIGl0IGlzIHVzZWQKICAqIHdpdGggc3VjY2VzcyB3aGVuIENQVSBpcyBpZGxlLCB0aGlzIHN0YXRlIGRvZXNuJ3QKICAqIHRyaWdnZXIgZnJlcXVlbmN5IHRyYW5zaXRpb24gaW4gc29tZSBjYXNlcy4gKi8KLW1vZHVsZV9wYXJhbSAoZGlzYWJsZV9hY3BpX2MzLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKGRpc2FibGVfYWNwaV9jMywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9hY3BpX2MzLCAiRG9uJ3QgdXNlIEFDUEkgQzMgc3VwcG9ydCIpOwogLyogQ2hhbmdlIENQVSB2b2x0YWdlIHdpdGggZnJlcXVlbmN5LiBWZXJ5IHVzZWZ1bGwgdG8gc2F2ZQogICogcG93ZXIsIGJ1dCBtb3N0IFZJQSBDMyBwcm9jZXNzb3JzIGFyZW4ndCBzdXBwb3J0aW5nIGl0LiAqLwotbW9kdWxlX3BhcmFtIChzY2FsZV92b2x0YWdlLCBpbnQsIDA2NDQpOworbW9kdWxlX3BhcmFtKHNjYWxlX3ZvbHRhZ2UsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHNjYWxlX3ZvbHRhZ2UsICJTY2FsZSB2b2x0YWdlIG9mIHByb2Nlc3NvciIpOwogLyogRm9yY2UgcmV2aXNpb24ga2V5IHRvIDAgZm9yIHByb2Nlc3NvcnMgd2hpY2ggZG9lc24ndAogICogc3VwcG9ydCB2b2x0YWdlIHNjYWxpbmcsIGJ1dCBhcmUgaW50cm9kdWNpbmcgaXRzZWxmIGFzCkBAIC0xMDE5LDkgKzEwMjIsOSBAQAogbW9kdWxlX3BhcmFtKHJldmlkX2VycmF0YSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmV2aWRfZXJyYXRhLCAiSWdub3JlIENQVSBSZXZpc2lvbiBJRCIpOwogCi1NT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkxvbmdoYXVsIGRyaXZlciBmb3IgVklBIEN5cml4IHByb2Nlc3NvcnMuIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTG9uZ2hhdWwgZHJpdmVyIGZvciBWSUEgQ3lyaXggcHJvY2Vzc29ycy4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbGF0ZV9pbml0Y2FsbChsb25naGF1bF9pbml0KTsKIG1vZHVsZV9leGl0KGxvbmdoYXVsX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmggYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuaAppbmRleCA0ZmNjMzIwLi5lMjM2MGE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuaApAQCAtNDksMTQgKzQ5LDE0IEBACiAKIC8qCiAgKiBDbG9jayByYXRpbyB0YWJsZXMuIERpdi9Nb2QgYnkgMTAgdG8gZ2V0IHJhdGlvLgotICogVGhlIGVibGNyIG9uZXMgc3BlY2lmeSB0aGUgcmF0aW8gcmVhZCBmcm9tIHRoZSBDUFUuCi0gKiBUaGUgY2xvY2tfcmF0aW8gb25lcyBzcGVjaWZ5IHdoYXQgdG8gd3JpdGUgdG8gdGhlIENQVS4KKyAqIFRoZSBlYmxjciB2YWx1ZXMgc3BlY2lmeSB0aGUgcmF0aW8gcmVhZCBmcm9tIHRoZSBDUFUuCisgKiBUaGUgbXVsdHMgdmFsdWVzIHNwZWNpZnkgd2hhdCB0byB3cml0ZSB0byB0aGUgQ1BVLgogICovCiAKIC8qCiAgKiBWSUEgQzMgU2FtdWVsIDEgICYgU2FtdWVsIDIgKHN0ZXBwaW5nIDApCiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBzYW11ZWwxX2Nsb2NrX3JhdGlvWzE2XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBzYW11ZWwxX211bHRzWzE2XSA9IHsKIAktMSwgLyogMDAwMCAtPiBSRVNFUlZFRCAqLwogCTMwLCAvKiAwMDAxIC0+ICAzLjB4ICovCiAJNDAsIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTExOSw3ICsxMTksNyBAQAogLyoKICAqIFZJQSBDMyBFenJhCiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBlenJhX2Nsb2NrX3JhdGlvWzE2XSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBlenJhX211bHRzWzE2XSA9IHsKIAkxMDAsIC8qIDAwMDAgLT4gMTAuMHggKi8KIAkzMCwgIC8qIDAwMDEgLT4gIDMuMHggKi8KIAk0MCwgIC8qIDAwMTAgLT4gIDQuMHggKi8KQEAgLTE2MCw3ICsxNjAsNyBAQAogLyoKICAqIFZJQSBDMyAoRXpyYS1UKSBbQzVNXS4KICAqLwotc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhIGV6cmF0X2Nsb2NrX3JhdGlvWzMyXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgX19pbml0ZGF0YSBlenJhdF9tdWx0c1szMl0gPSB7CiAJMTAwLCAvKiAwMDAwIC0+IDEwLjB4ICovCiAJMzAsICAvKiAwMDAxIC0+ICAzLjB4ICovCiAJNDAsICAvKiAwMDEwIC0+ICA0LjB4ICovCkBAIC0yMzUsNyArMjM1LDcgQEAKIC8qCiAgKiBWSUEgQzMgTmVoZW1pYWggKi8KIAotc3RhdGljIGNvbnN0IGludCBfX2luaXRkYXRhICBuZWhlbWlhaF9jbG9ja19yYXRpb1szMl0gPSB7CitzdGF0aWMgY29uc3QgaW50IF9faW5pdGRhdGEgIG5laGVtaWFoX211bHRzWzMyXSA9IHsKIAkxMDAsIC8qIDAwMDAgLT4gMTAuMHggKi8KIAktMSwgLyogMDAwMSAtPiAxNi4weCAqLwogCTQwLCAgLyogMDAxMCAtPiAgNC4weCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMKaW5kZXggNzc3YTdmZi4uZGE1ZjcwZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCkBAIC0xMSwxMiArMTEsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogCiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vdGltZXguaD4KIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJsb25ncnVuIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJImxvbmdydW4iLCBtc2cpCiAKIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIJbG9uZ3J1bl9kcml2ZXI7CiAKQEAgLTUxLDcgKzUyLDcgQEAKIAltc3JfbG8gJj0gMHgwMDAwMDA3RjsKIAltc3JfaGkgJj0gMHgwMDAwMDA3RjsKIAotCWlmICggbG9uZ3J1bl9oaWdoX2ZyZXEgPD0gbG9uZ3J1bl9sb3dfZnJlcSApIHsKKwlpZiAobG9uZ3J1bl9oaWdoX2ZyZXEgPD0gbG9uZ3J1bl9sb3dfZnJlcSkgewogCQkvKiBBc3N1bWUgZGVnZW5lcmF0ZSBMb25ncnVuIHRhYmxlICovCiAJCXBvbGljeS0+bWluID0gcG9saWN5LT5tYXggPSBsb25ncnVuX2hpZ2hfZnJlcTsKIAl9IGVsc2UgewpAQCAtNzksNyArODAsNyBAQAogCWlmICghcG9saWN5KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICggbG9uZ3J1bl9oaWdoX2ZyZXEgPD0gbG9uZ3J1bl9sb3dfZnJlcSApIHsKKwlpZiAobG9uZ3J1bl9oaWdoX2ZyZXEgPD0gbG9uZ3J1bl9sb3dfZnJlcSkgewogCQkvKiBBc3N1bWUgZGVnZW5lcmF0ZSBMb25ncnVuIHRhYmxlICovCiAJCXBjdGdfbG8gPSBwY3RnX2hpID0gMTAwOwogCX0gZWxzZSB7CkBAIC0xNTIsNyArMTUzLDcgQEAKIAljcHVpZCgweDgwODYwMDA3LCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKIAlkcHJpbnRrKCJjcHVpZCBlYXggaXMgJXVcbiIsIGVheCk7CiAKLQlyZXR1cm4gKGVheCAqIDEwMDApOworCXJldHVybiBlYXggKiAxMDAwOwogfQogCiAvKioKQEAgLTE5Niw3ICsxOTcsOCBAQAogCQlyZG1zcihNU1JfVE1UQV9MUlRJX1ZPTFRfTUhaLCBtc3JfbG8sIG1zcl9oaSk7CiAJCSpoaWdoX2ZyZXEgPSBtc3JfbG8gKiAxMDAwOyAvKiB0byBrSHogKi8KIAotCQlkcHJpbnRrKCJsb25ncnVuIHRhYmxlIGludGVyZmFjZSB0b2xkICV1IC0gJXUga0h6XG4iLCAqbG93X2ZyZXEsICpoaWdoX2ZyZXEpOworCQlkcHJpbnRrKCJsb25ncnVuIHRhYmxlIGludGVyZmFjZSB0b2xkICV1IC0gJXUga0h6XG4iLAorCQkJCSpsb3dfZnJlcSwgKmhpZ2hfZnJlcSk7CiAKIAkJaWYgKCpsb3dfZnJlcSA+ICpoaWdoX2ZyZXEpCiAJCQkqbG93X2ZyZXEgPSAqaGlnaF9mcmVxOwpAQCAtMjE5LDcgKzIyMSw3IEBACiAJY3B1aWQoMHg4MDg2MDAwNywgJmVheCwgJmVieCwgJmVjeCwgJmVkeCk7CiAJLyogdHJ5IGRlY3JlYXNpbmcgaW4gMTAlIHN0ZXBzLCBzb21lIHByb2Nlc3NvcnMgcmVhY3Qgb25seQogCSAqIG9uIHNvbWUgYmFycmllciB2YWx1ZXMgKi8KLQlmb3IgKHRyeV9oaSA9IDgwOyB0cnlfaGkgPiAwICYmIGVjeCA+IDkwOyB0cnlfaGkgLT0xMCkgeworCWZvciAodHJ5X2hpID0gODA7IHRyeV9oaSA+IDAgJiYgZWN4ID4gOTA7IHRyeV9oaSAtPSAxMCkgewogCQkvKiBzZXQgdG8gMCB0byB0cnlfaGkgcGVyZl9wY3RnICovCiAJCW1zcl9sbyAmPSAweEZGRkZGRjgwOwogCQltc3JfaGkgJj0gMHhGRkZGRkY4MDsKQEAgLTIzNiw3ICsyMzgsNyBAQAogCiAJLyogcGVyZm9ybWFuY2VfcGN0ZyA9IChjdXJyZW50X2ZyZXEgLSBsb3dfZnJlcSkvKGhpZ2hfZnJlcSAtIGxvd19mcmVxKQogCSAqIGVxYWxzCi0JICogbG93X2ZyZXEgKiAoIDEgLSBwZXJmX3BjdGcpID0gKGN1cl9mcmVxIC0gaGlnaF9mcmVxICogcGVyZl9wY3RnKQorCSAqIGxvd19mcmVxICogKDEgLSBwZXJmX3BjdGcpID0gKGN1cl9mcmVxIC0gaGlnaF9mcmVxICogcGVyZl9wY3RnKQogCSAqCiAJICogaGlnaF9mcmVxICogcGVyZl9wY3RnIGlzIHN0b3JlZCB0ZW1wb2FyaWx5IGludG8gImVieCIuCiAJICovCkBAIC0zMTcsOSArMzE5LDEwIEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkxvbmdSdW4gZHJpdmVyIGZvciBUcmFuc21ldGEgQ3J1c29lIGFuZCBFZmZpY2VvbiBwcm9jZXNzb3JzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTG9uZ1J1biBkcml2ZXIgZm9yIFRyYW5zbWV0YSBDcnVzb2UgYW5kICIKKwkJIkVmZmljZW9uIHByb2Nlc3NvcnMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KGxvbmdydW5faW5pdCk7CiBtb2R1bGVfZXhpdChsb25ncnVuX2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYwppbmRleCAzMTc4YzNhLi40MWVkOTQ5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYwpAQCAtMjcsMTUgKzI3LDE3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CisjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CiAKICNpbmNsdWRlICJzcGVlZHN0ZXAtbGliLmgiCiAKICNkZWZpbmUgUEZYCSJwNC1jbG9ja21vZDogIgotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJwNC1jbG9ja21vZCIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJwNC1jbG9ja21vZCIsIG1zZykKIAogLyoKICAqIER1dHkgQ3ljbGUgKDNiaXRzKSwgbm90ZSBEQ19ESVNBQkxFIGlzIG5vdCBzcGVjaWZpZWQgaW4KQEAgLTU4LDcgKzYwLDggQEAKIHsKIAl1MzIgbCwgaDsKIAotCWlmICghY3B1X29ubGluZShjcHUpIHx8IChuZXdzdGF0ZSA+IERDX0RJU0FCTEUpIHx8IChuZXdzdGF0ZSA9PSBEQ19SRVNWKSkKKwlpZiAoIWNwdV9vbmxpbmUoY3B1KSB8fAorCSAgICAobmV3c3RhdGUgPiBEQ19ESVNBQkxFKSB8fCAobmV3c3RhdGUgPT0gRENfUkVTVikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmRtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCAmbCwgJmgpOwpAQCAtNjYsNyArNjksOCBAQAogCWlmIChsICYgMHgwMSkKIAkJZHByaW50aygiQ1BVIyVkIGN1cnJlbnRseSB0aGVybWFsIHRocm90dGxlZFxuIiwgY3B1KTsKIAotCWlmIChoYXNfTjQ0X08xN19lcnJhdGFbY3B1XSAmJiAobmV3c3RhdGUgPT0gRENfMjVQVCB8fCBuZXdzdGF0ZSA9PSBEQ19ERkxUKSkKKwlpZiAoaGFzX040NF9PMTdfZXJyYXRhW2NwdV0gJiYKKwkgICAgKG5ld3N0YXRlID09IERDXzI1UFQgfHwgbmV3c3RhdGUgPT0gRENfREZMVCkpCiAJCW5ld3N0YXRlID0gRENfMzhQVDsKIAogCXJkbXNyX29uX2NwdShjcHUsIE1TUl9JQTMyX1RIRVJNX0NPTlRST0wsICZsLCAmaCk7CkBAIC0xMTIsNyArMTE2LDggQEAKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAlpbnQgaTsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmcDRjbG9ja21vZF90YWJsZVswXSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV3c3RhdGUpKQorCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LCAmcDRjbG9ja21vZF90YWJsZVswXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZnJlcXMub2xkID0gY3B1ZnJlcV9wNF9nZXQocG9saWN5LT5jcHUpOwpAQCAtMTI3LDcgKzEzMiw4IEBACiAJCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CiAJfQogCi0JLyogcnVuIG9uIGVhY2ggbG9naWNhbCBDUFUsIHNlZSBzZWN0aW9uIDEzLjE1LjMgb2YgSUEzMiBJbnRlbCBBcmNoaXRlY3R1cmUgU29mdHdhcmUKKwkvKiBydW4gb24gZWFjaCBsb2dpY2FsIENQVSwKKwkgKiBzZWUgc2VjdGlvbiAxMy4xNS4zIG9mIElBMzIgSW50ZWwgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlCiAJICogRGV2ZWxvcGVyJ3MgTWFudWFsLCBWb2x1bWUgMwogCSAqLwogCWZvcl9lYWNoX2NwdShpLCBwb2xpY3ktPmNwdXMpCkBAIC0xNTMsMjggKzE1OSwzMCBAQAogewogCWlmIChjLT54ODYgPT0gMHgwNikgewogCQlpZiAoY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9FU1QpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldhcm5pbmc6IEVTVC1jYXBhYmxlIENQVSBkZXRlY3RlZC4gIgotCQkJICAgICAgICJUaGUgYWNwaS1jcHVmcmVxIG1vZHVsZSBvZmZlcnMgdm9sdGFnZSBzY2FsaW5nIgotCQkJICAgICAgICIgaW4gYWRkaXRpb24gb2YgZnJlcXVlbmN5IHNjYWxpbmcuIFlvdSBzaG91bGQgdXNlICIKLQkJCSAgICAgICAidGhhdCBpbnN0ZWFkIG9mIHA0LWNsb2NrbW9kLCBpZiBwb3NzaWJsZS5cbiIpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldhcm5pbmc6IEVTVC1jYXBhYmxlIENQVSAiCisJCQkgICAgICAgImRldGVjdGVkLiBUaGUgYWNwaS1jcHVmcmVxIG1vZHVsZSBvZmZlcnMgIgorCQkJICAgICAgICJ2b2x0YWdlIHNjYWxpbmcgaW4gYWRkaXRpb24gb2YgZnJlcXVlbmN5ICIKKwkJCSAgICAgICAic2NhbGluZy4gWW91IHNob3VsZCB1c2UgdGhhdCBpbnN0ZWFkIG9mICIKKwkJCSAgICAgICAicDQtY2xvY2ttb2QsIGlmIHBvc3NpYmxlLlxuIik7CiAJCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7CiAJCWNhc2UgMHgwRTogLyogQ29yZSAqLwogCQljYXNlIDB4MEY6IC8qIENvcmUgRHVvICovCiAJCWNhc2UgMHgxNjogLyogQ2VsZXJvbiBDb3JlICovCiAJCQlwNGNsb2NrbW9kX2RyaXZlci5mbGFncyB8PSBDUFVGUkVRX0NPTlNUX0xPT1BTOwotCQkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShTUEVFRFNURVBfUFJPQ0VTU09SX1BDT1JFKTsKKwkJCXJldHVybiBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShTUEVFRFNURVBfQ1BVX1BDT1JFKTsKIAkJY2FzZSAweDBEOiAvKiBQZW50aXVtIE0gKERvdGhhbikgKi8KIAkJCXA0Y2xvY2ttb2RfZHJpdmVyLmZsYWdzIHw9IENQVUZSRVFfQ09OU1RfTE9PUFM7CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSAweDA5OiAvKiBQZW50aXVtIE0gKEJhbmlhcykgKi8KLQkJCXJldHVybiBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koU1BFRURTVEVQX1BST0NFU1NPUl9QTSk7CisJCQlyZXR1cm4gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koU1BFRURTVEVQX0NQVV9QTSk7CiAJCX0KIAl9CiAKIAlpZiAoYy0+eDg2ICE9IDB4RikgewogCQlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfRVNUKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbmtub3duIHA0LWNsb2NrbW9kLWNhcGFibGUgQ1BVLiAiCi0JCQkJIlBsZWFzZSBzZW5kIGFuIGUtbWFpbCB0byA8Y3B1ZnJlcUB2Z2VyLmtlcm5lbC5vcmc+XG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbmtub3duIENQVS4gIgorCQkJCSJQbGVhc2Ugc2VuZCBhbiBlLW1haWwgdG8gIgorCQkJCSI8Y3B1ZnJlcUB2Z2VyLmtlcm5lbC5vcmc+XG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xODIsMTYgKzE5MCwxNiBAQAogCSAqIHRocm90dGxpbmcgaXMgYWN0aXZlIG9yIG5vdC4gKi8KIAlwNGNsb2NrbW9kX2RyaXZlci5mbGFncyB8PSBDUFVGUkVRX0NPTlNUX0xPT1BTOwogCi0JaWYgKHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKCkgPT0gU1BFRURTVEVQX1BST0NFU1NPUl9QNE0pIHsKKwlpZiAoc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKSA9PSBTUEVFRFNURVBfQ1BVX1A0TSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiV2FybmluZzogUGVudGl1bSA0LU0gZGV0ZWN0ZWQuICIKIAkJICAgICAgICJUaGUgc3BlZWRzdGVwLWljaCBvciBhY3BpIGNwdWZyZXEgbW9kdWxlcyBvZmZlciAiCiAJCSAgICAgICAidm9sdGFnZSBzY2FsaW5nIGluIGFkZGl0aW9uIG9mIGZyZXF1ZW5jeSBzY2FsaW5nLiAiCiAJCSAgICAgICAiWW91IHNob3VsZCB1c2UgZWl0aGVyIG9uZSBpbnN0ZWFkIG9mIHA0LWNsb2NrbW9kLCAiCiAJCSAgICAgICAiaWYgcG9zc2libGUuXG4iKTsKLQkJcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShTUEVFRFNURVBfUFJPQ0VTU09SX1A0TSk7CisJCXJldHVybiBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShTUEVFRFNURVBfQ1BVX1A0TSk7CiAJfQogCi0JcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShTUEVFRFNURVBfUFJPQ0VTU09SX1A0RCk7CisJcmV0dXJuIHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KFNQRUVEU1RFUF9DUFVfUDREKTsKIH0KIAogCkBAIC0yMTcsMTQgKzIyNSwyMCBAQAogCQlkcHJpbnRrKCJoYXMgZXJyYXRhIC0tIGRpc2FibGluZyBsb3cgZnJlcXVlbmNpZXNcbiIpOwogCX0KIAorCWlmIChzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpID09IFNQRUVEU1RFUF9DUFVfUDREICYmCisJICAgIGMtPng4Nl9tb2RlbCA8IDIpIHsKKwkJLyogc3dpdGNoIHRvIG1heGltdW0gZnJlcXVlbmN5IGFuZCBtZWFzdXJlIHJlc3VsdCAqLworCQljcHVmcmVxX3A0X3NldGRjKHBvbGljeS0+Y3B1LCBEQ19ESVNBQkxFKTsKKwkJcmVjYWxpYnJhdGVfY3B1X2toeigpOworCX0KIAkvKiBnZXQgbWF4IGZyZXF1ZW5jeSAqLwogCXN0b2NrX2ZyZXEgPSBjcHVmcmVxX3A0X2dldF9mcmVxdWVuY3koYyk7CiAJaWYgKCFzdG9ja19mcmVxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHRhYmxlIGluaXQgKi8KLQlmb3IgKGk9MTsgKHA0Y2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7Ci0JCWlmICgoaTwyKSAmJiAoaGFzX040NF9PMTdfZXJyYXRhW3BvbGljeS0+Y3B1XSkpCisJZm9yIChpID0gMTsgKHA0Y2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CisJCWlmICgoaSA8IDIpICYmIChoYXNfTjQ0X08xN19lcnJhdGFbcG9saWN5LT5jcHVdKSkKIAkJCXA0Y2xvY2ttb2RfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEOwogCQllbHNlCiAJCQlwNGNsb2NrbW9kX3RhYmxlW2ldLmZyZXF1ZW5jeSA9IChzdG9ja19mcmVxICogaSkvODsKQEAgLTIzMiw3ICsyNDYsMTAgQEAKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihwNGNsb2NrbW9kX3RhYmxlLCBwb2xpY3ktPmNwdSk7CiAKIAkvKiBjcHVpbmZvIGFuZCBkZWZhdWx0IHBvbGljeSB2YWx1ZXMgKi8KLQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMTAwMDAwMDsgLyogYXNzdW1lZCAqLworCisJLyogdGhlIHRyYW5zaXRpb24gbGF0ZW5jeSBpcyBzZXQgdG8gYmUgMSBoaWdoZXIgdGhhbiB0aGUgbWF4aW11bQorCSAqIHRyYW5zaXRpb24gbGF0ZW5jeSBvZiB0aGUgb25kZW1hbmQgZ292ZXJub3IgKi8KKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gMTAwMDAwMDE7CiAJcG9saWN5LT5jdXIgPSBzdG9ja19mcmVxOwogCiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LCAmcDRjbG9ja21vZF90YWJsZVswXSk7CkBAIC0yNTgsMTIgKzI3NSwxMiBAQAogCQlsID0gRENfRElTQUJMRTsKIAogCWlmIChsICE9IERDX0RJU0FCTEUpCi0JCXJldHVybiAoc3RvY2tfZnJlcSAqIGwgLyA4KTsKKwkJcmV0dXJuIHN0b2NrX2ZyZXEgKiBsIC8gODsKIAogCXJldHVybiBzdG9ja19mcmVxOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogcDRjbG9ja21vZF9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqcDRjbG9ja21vZF9hdHRyW10gPSB7CiAJJmNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzLAogCU5VTEwsCiB9OwpAQCAtMjk4LDkgKzMxNSwxMCBAQAogCiAJcmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJnA0Y2xvY2ttb2RfZHJpdmVyKTsKIAlpZiAoIXJldCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlA0L1hlb24oVE0pIENQVSBPbi1EZW1hbmQgQ2xvY2sgTW9kdWxhdGlvbiBhdmFpbGFibGVcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUDQvWGVvbihUTSkgQ1BVIE9uLURlbWFuZCBDbG9jayAiCisJCQkJIk1vZHVsYXRpb24gYXZhaWxhYmxlXG4iKTsKIAotCXJldHVybiAocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiAKQEAgLTMxMCw5ICszMjgsOSBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IgKCJad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGNvbW1maXJlc2VydmljZXMuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiY3B1ZnJlcSBkcml2ZXIgZm9yIFBlbnRpdW0oVE0pIDQvWGVvbihUTSkiKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJad2FuZSBNd2Fpa2FtYm8gPHp3YW5lQGNvbW1maXJlc2VydmljZXMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJjcHVmcmVxIGRyaXZlciBmb3IgUGVudGl1bShUTSkgNC9YZW9uKFRNKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBsYXRlX2luaXRjYWxsKGNwdWZyZXFfcDRfaW5pdCk7CiBtb2R1bGVfZXhpdChjcHVmcmVxX3A0X2V4aXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYwppbmRleCBjMWFjNTc5Li5mMTBkZWE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazYuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiAgVGhpcyBmaWxlIHdhcyBiYXNlZCB1cG9uIGNvZGUgaW4gUG93ZXJ0d2VhayBMaW51eCAoaHR0cDovL3Bvd2VydHdlYWsuc2YubmV0KQotICogIChDKSAyMDAwLTIwMDMgIERhdmUgSm9uZXMsIEFyamFuIHZhbiBkZSBWZW4sIEphbm5lIFDDpG5rw6Rsw6QsIERvbWluaWsgQnJvZG93c2tpLgorICogIChDKSAyMDAwLTIwMDMgIERhdmUgSm9uZXMsIEFyamFuIHZhbiBkZSBWZW4sIEphbm5lIFDDpG5rw6Rsw6QsCisgKiAgICAgICAgICAgICAgICAgRG9taW5payBCcm9kb3dza2kuCiAgKgogICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KICAqCkBAIC0xMywxNCArMTQsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+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+aWRlbnQpOworCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCSJZb3UgbmVlZCB0byBkb3duZ3JhZGUgdG8gM0EyMSAoMDkvMDkvMjAwMiksIG9yIHRyeSBhIG5ld2VyICIKKwkJIkJJT1MgdGhhbiAzQTcxICgwMS8yMC8yMDAzKVxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJImNwdWZyZXEgc2NhbGluZyBoYXMgYmVlbiBkaXNhYmxlZCBhcyBhIHJlc3VsdCBvZiB0aGlzLlxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU5OCw3ICs2MzEsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIGludCBfX2luaXQgcG93ZXJub3dfY3B1X2luaXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBfX2luaXQgcG93ZXJub3dfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJdW5pb24gbXNyX2ZpZHZpZHN0YXR1cyBmaWR2aWRzdGF0dXM7CiAJaW50IHJlc3VsdDsKQEAgLTYwNiw3ICs2MzksNyBAQAogCWlmIChwb2xpY3ktPmNwdSAhPSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJkbXNybCAoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKKwlyZG1zcmwoTVNSX0s3X0ZJRF9WSURfU1RBVFVTLCBmaWR2aWRzdGF0dXMudmFsKTsKIAogCXJlY2FsaWJyYXRlX2NwdV9raHooKTsKIApAQCAtNjE4LDE5ICs2NTEsMjEgQEAKIAlkcHJpbnRrKCJGU0I6ICUzZE1IelxuIiwgZnNiLzEwMDApOwogCiAJaWYgKGRtaV9jaGVja19zeXN0ZW0ocG93ZXJub3dfZG1pX3RhYmxlKSB8fCBhY3BpX2ZvcmNlKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiUFNCL1BTVCBrbm93biB0byBiZSBicm9rZW4uICBUcnlpbmcgQUNQSSBpbnN0ZWFkXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlBTQi9QU1Qga25vd24gdG8gYmUgYnJva2VuLiAgIgorCQkJCSJUcnlpbmcgQUNQSSBpbnN0ZWFkXG4iKTsKIAkJcmVzdWx0ID0gcG93ZXJub3dfYWNwaV9pbml0KCk7CiAJfSBlbHNlIHsKLQkJcmVzdWx0ID0gcG93ZXJub3dfZGVjb2RlX2Jpb3MoZmlkdmlkc3RhdHVzLmJpdHMuTUZJRCwgZmlkdmlkc3RhdHVzLmJpdHMuU1ZJRCk7CisJCXJlc3VsdCA9IHBvd2Vybm93X2RlY29kZV9iaW9zKGZpZHZpZHN0YXR1cy5iaXRzLk1GSUQsCisJCQkJZmlkdmlkc3RhdHVzLmJpdHMuU1ZJRCk7CiAJCWlmIChyZXN1bHQpIHsKLQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVHJ5aW5nIEFDUEkgcGVyZmxpYlxuIik7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiVHJ5aW5nIEFDUEkgcGVyZmxpYlxuIik7CiAJCQltYXhpbXVtX3NwZWVkID0gMDsKIAkJCW1pbmltdW1fc3BlZWQgPSAtMTsKIAkJCWxhdGVuY3kgPSAwOwogCQkJcmVzdWx0ID0gcG93ZXJub3dfYWNwaV9pbml0KCk7CiAJCQlpZiAocmVzdWx0KSB7Ci0JCQkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJBQ1BJIGFuZCBsZWdhY3kgbWV0aG9kcyBmYWlsZWRcbiIpOwotCQkJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiU2VlIGh0dHA6Ly93d3cuY29kZW1vbmtleS5vcmcudWsvcHJvamVjdHMvY3B1ZnJlcS9wb3dlcm5vdy1rNy5odG1sXG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJCQkiQUNQSSBhbmQgbGVnYWN5IG1ldGhvZHMgZmFpbGVkXG4iKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIFNHVEMgdXNlIHRoZSBidXMgY2xvY2sgYXMgdGltZXIgKi8KQEAgLTY0MiwxMCArNjc3LDExIEBACiAJaWYgKHJlc3VsdCkKIAkJcmV0dXJuIHJlc3VsdDsKIAotCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiTWluaW11bSBzcGVlZCAlZCBNSHouIE1heGltdW0gc3BlZWQgJWQgTUh6LlxuIiwKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiTWluaW11bSBzcGVlZCAlZCBNSHouIE1heGltdW0gc3BlZWQgJWQgTUh6LlxuIiwKIAkJCQltaW5pbXVtX3NwZWVkLzEwMDAsIG1heGltdW1fc3BlZWQvMTAwMCk7CiAKLQlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gY3B1ZnJlcV9zY2FsZSgyMDAwMDAwVUwsIGZzYiwgbGF0ZW5jeSk7CisJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9CisJCWNwdWZyZXFfc2NhbGUoMjAwMDAwMFVMLCBmc2IsIGxhdGVuY3kpOwogCiAJcG9saWN5LT5jdXIgPSBwb3dlcm5vd19nZXQoMCk7CiAKQEAgLTY1NCw3ICs2OTAsOCBAQAogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgcG93ZXJub3dfdGFibGUpOwogfQogCi1zdGF0aWMgaW50IHBvd2Vybm93X2NwdV9leGl0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkgeworc3RhdGljIGludCBwb3dlcm5vd19jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9wdXRfYXR0cihwb2xpY3ktPmNwdSk7CiAKICNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s3X0FDUEkKQEAgLTY2OSw3ICs3MDYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogcG93ZXJub3dfdGFibGVfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnBvd2Vybm93X3RhYmxlX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC02ODUsMTUgKzcyMiwxNSBAQAogCS5hdHRyCT0gcG93ZXJub3dfdGFibGVfYXR0ciwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHBvd2Vybm93X2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBwb3dlcm5vd19pbml0KHZvaWQpCiB7Ci0JaWYgKGNoZWNrX3Bvd2Vybm93KCk9PTApCisJaWYgKGNoZWNrX3Bvd2Vybm93KCkgPT0gMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZwb3dlcm5vd19kcml2ZXIpOwogfQogCiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBwb3dlcm5vd19leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHBvd2Vybm93X2V4aXQodm9pZCkKIHsKIAljcHVmcmVxX3VucmVnaXN0ZXJfZHJpdmVyKCZwb3dlcm5vd19kcml2ZXIpOwogfQpAQCAtNzAxLDkgKzczOCw5IEBACiBtb2R1bGVfcGFyYW0oYWNwaV9mb3JjZSwgIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFjcGlfZm9yY2UsICJGb3JjZSBBQ1BJIHRvIGJlIHVzZWQuIik7CiAKLU1PRFVMRV9BVVRIT1IgKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiUG93ZXJub3cgZHJpdmVyIGZvciBBTUQgSzcgcHJvY2Vzc29ycy4iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEYXZlIEpvbmVzIDxkYXZlakByZWRoYXQuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQb3dlcm5vdyBkcml2ZXIgZm9yIEFNRCBLNyBwcm9jZXNzb3JzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBsYXRlX2luaXRjYWxsKHBvd2Vybm93X2luaXQpOwogbW9kdWxlX2V4aXQocG93ZXJub3dfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCmluZGV4IDY0MjhhYTEuLmExNWFjOTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jCkBAIC0zMywxNiArMzMsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+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+Y3VycmZpZCk7CiAJcmV0ID0gMDsKQEAgLTExNDEsNiArMTIxOCw3IEBACiAJc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGE7CiAJY3B1bWFza190IG9sZG1hc2s7CiAJaW50IHJjOworCXN0YXRpYyBpbnQgcHJpbnRfb25jZTsKIAogCWlmICghY3B1X29ubGluZShwb2wtPmNwdSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMTE2MywzMyArMTI0MSwzMSBAQAogCQkgKiBhbiBVUCB2ZXJzaW9uLCBhbmQgaXMgZGVwcmVjYXRlZCBieSBBTUQuCiAJCSAqLwogCQlpZiAobnVtX29ubGluZV9jcHVzKCkgIT0gMSkgewotI2lmbmRlZiBDT05GSUdfQUNQSV9QUk9DRVNTT1IKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkFDUEkgUHJvY2Vzc29yIHN1cHBvcnQgaXMgcmVxdWlyZWQgIgotCQkJICAgICAgICJmb3IgU01QIHN5c3RlbXMgYnV0IGlzIGFic2VudC4gUGxlYXNlIGxvYWQgdGhlICIKLQkJCSAgICAgICAiQUNQSSBQcm9jZXNzb3IgbW9kdWxlIGJlZm9yZSBzdGFydGluZyB0aGlzICIKLQkJCSAgICAgICAiZHJpdmVyLlxuIik7Ci0jZWxzZQotCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggIllvdXIgQklPUyBkb2VzIG5vdCBwcm92aWRlIgotCQkJICAgICAgICIgQUNQSSBfUFNTIG9iamVjdHMgaW4gYSB3YXkgdGhhdCBMaW51eCAiCi0JCQkgICAgICAgInVuZGVyc3RhbmRzLiBQbGVhc2UgcmVwb3J0IHRoaXMgdG8gdGhlIExpbnV4ICIKLQkJCSAgICAgICAiQUNQSSBtYWludGFpbmVycyBhbmQgY29tcGxhaW4gdG8geW91ciBCSU9TICIKLQkJCSAgICAgICAidmVuZG9yLlxuIik7Ci0jZW5kaWYKLQkJCWtmcmVlKGRhdGEpOwotCQkJcmV0dXJuIC1FTk9ERVY7CisJCQkvKgorCQkJICogUmVwbGFjZSB0aGlzIG9uZSB3aXRoIHByaW50X29uY2UgYXMgc29vbiBhcyBzdWNoIGEKKwkJCSAqIHRoaW5nIGdldHMgaW50cm9kdWNlZAorCQkJICovCisJCQlpZiAoIXByaW50X29uY2UpIHsKKwkJCQlXQVJOX09OQ0UoMSwgS0VSTl9FUlIgRldfQlVHIFBGWCAiWW91ciBCSU9TICIKKwkJCQkJImRvZXMgbm90IHByb3ZpZGUgQUNQSSBfUFNTIG9iamVjdHMgIgorCQkJCQkiaW4gYSB3YXkgdGhhdCBMaW51eCB1bmRlcnN0YW5kcy4gIgorCQkJCQkiUGxlYXNlIHJlcG9ydCB0aGlzIHRvIHRoZSBMaW51eCBBQ1BJIgorCQkJCQkiIG1haW50YWluZXJzIGFuZCBjb21wbGFpbiB0byB5b3VyICIKKwkJCQkJIkJJT1MgdmVuZG9yLlxuIik7CisJCQkJcHJpbnRfb25jZSsrOworCQkJfQorCQkJZ290byBlcnJfb3V0OwogCQl9CiAJCWlmIChwb2wtPmNwdSAhPSAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAiTm8gQUNQSSBfUFNTIG9iamVjdHMgZm9yICIKIAkJCSAgICAgICAiQ1BVIG90aGVyIHRoYW4gQ1BVMC4gQ29tcGxhaW4gdG8geW91ciBCSU9TICIKIAkJCSAgICAgICAidmVuZG9yLlxuIik7Ci0JCQlrZnJlZShkYXRhKTsKLQkJCXJldHVybiAtRU5PREVWOworCQkJZ290byBlcnJfb3V0OwogCQl9CiAJCXJjID0gZmluZF9wc2JfdGFibGUoZGF0YSk7Ci0JCWlmIChyYykgewotCQkJa2ZyZWUoZGF0YSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQorCQlpZiAocmMpCisJCQlnb3RvIGVycl9vdXQ7CisKIAkJLyogVGFrZSBhIGNydWRlIGd1ZXNzIGhlcmUuCiAJCSAqIFRoYXQgZ3Vlc3Mgd2FzIGluIG1pY3Jvc2Vjb25kcywgc28gbXVsdGlwbHkgd2l0aCAxMDAwICovCiAJCXBvbC0+Y3B1aW5mby50cmFuc2l0aW9uX2xhdGVuY3kgPSAoCkBAIC0xMjA0LDE2ICsxMjgwLDE2IEBACiAKIAlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpICE9IHBvbC0+Y3B1KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImxpbWl0aW5nIHRvIGNwdSAldSBmYWlsZWRcbiIsIHBvbC0+Y3B1KTsKLQkJZ290byBlcnJfb3V0OworCQlnb3RvIGVycl9vdXRfdW5tYXNrOwogCX0KIAogCWlmIChwZW5kaW5nX2JpdF9zdHVjaygpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxpbmcgaW5pdCwgY2hhbmdlIHBlbmRpbmcgYml0IHNldFxuIik7Ci0JCWdvdG8gZXJyX291dDsKKwkJZ290byBlcnJfb3V0X3VubWFzazsKIAl9CiAKIAlpZiAocXVlcnlfY3VycmVudF92YWx1ZXNfd2l0aF9wZW5kaW5nX3dhaXQoZGF0YSkpCi0JCWdvdG8gZXJyX291dDsKKwkJZ290byBlcnJfb3V0X3VubWFzazsKIAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9PUFRFUk9OKQogCQlmaWR2aWRfbXNyX2luaXQoKTsKQEAgLTEyMjgsNyArMTMwNCw4IEBACiAJZGF0YS0+YXZhaWxhYmxlX2NvcmVzID0gcG9sLT5jcHVzOwogCiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkKLQkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLCBkYXRhLT5jdXJycHN0YXRlKTsKKwkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fcHN0YXRlKGRhdGEtPnBvd2Vybm93X3RhYmxlLAorCQkJCWRhdGEtPmN1cnJwc3RhdGUpOwogCWVsc2UKIAkJcG9sLT5jdXIgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGRhdGEtPmN1cnJmaWQpOwogCWRwcmludGsoInBvbGljeSBjdXJyZW50IGZyZXF1ZW5jeSAlZCBrSHpcbiIsIHBvbC0+Y3VyKTsKQEAgLTEyNDUsNyArMTMyMiw4IEBACiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoZGF0YS0+cG93ZXJub3dfdGFibGUsIHBvbC0+Y3B1KTsKIAogCWlmIChjcHVfZmFtaWx5ID09IENQVV9IV19QU1RBVEUpCi0JCWRwcmludGsoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgcHN0YXRlIDB4JXhcbiIsIGRhdGEtPmN1cnJwc3RhdGUpOworCQlkcHJpbnRrKCJjcHVfaW5pdCBkb25lLCBjdXJyZW50IHBzdGF0ZSAweCV4XG4iLAorCQkJCWRhdGEtPmN1cnJwc3RhdGUpOwogCWVsc2UKIAkJZHByaW50aygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCiAJCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKQEAgLTEyNTQsMTUgKzEzMzIsMTYgQEAKIAogCXJldHVybiAwOwogCi1lcnJfb3V0OgorZXJyX291dF91bm1hc2s6CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgJm9sZG1hc2spOwogCXBvd2Vybm93X2s4X2NwdV9leGl0X2FjcGkoZGF0YSk7CiAKK2Vycl9vdXQ6CiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IHBvd2Vybm93azhfY3B1X2V4aXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9sKQorc3RhdGljIGludCBfX2RldmV4aXQgcG93ZXJub3drOF9jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbCkKIHsKIAlzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSA9IHBlcl9jcHUocG93ZXJub3dfZGF0YSwgcG9sLT5jcHUpOwogCkBAIC0xMjc5LDcgKzEzNTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHBvd2Vybm93azhfZ2V0ICh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIHVuc2lnbmVkIGludCBwb3dlcm5vd2s4X2dldCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBwb3dlcm5vd19rOF9kYXRhICpkYXRhOwogCWNwdW1hc2tfdCBvbGRtYXNrID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOwpAQCAtMTMxNSw3ICsxMzk0LDcgQEAKIAlyZXR1cm4ga2h6OwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogcG93ZXJub3dfazhfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnBvd2Vybm93X2s4X2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0xMzYwLDcgKzE0MzksOCBAQAogCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJmNwdWZyZXFfYW1kNjRfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiUGF1bCBEZXZyaWVuZHQgPHBhdWwuZGV2cmllbmR0QGFtZC5jb20+IGFuZCBNYXJrIExhbmdzZG9yZiA8bWFyay5sYW5nc2RvcmZAYW1kLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlBhdWwgRGV2cmllbmR0IDxwYXVsLmRldnJpZW5kdEBhbWQuY29tPiBhbmQgIgorCQkiTWFyayBMYW5nc2RvcmYgPG1hcmsubGFuZ3Nkb3JmQGFtZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFNRCBBdGhsb24gNjQgYW5kIE9wdGVyb24gcHJvY2Vzc29yIGZyZXF1ZW5jeSBkcml2ZXIuIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKaW5kZXggOGVjYzc1Yi4uNmM2Njk4ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKQEAgLTQ1LDExICs0NSwxMCBAQAogCSAqIGZyZXF1ZW5jeSBpcyBpbiBrSHogKi8KIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgICpwb3dlcm5vd190YWJsZTsKIAotI2lmZGVmIENPTkZJR19YODZfUE9XRVJOT1dfSzhfQUNQSQogCS8qIHRoZSBhY3BpIHRhYmxlIG5lZWRzIHRvIGJlIGtlcHQuIGl0J3Mgb25seSBhdmFpbGFibGUgaWYgQUNQSSB3YXMKIAkgKiB1c2VkIHRvIGRldGVybWluZSB2YWxpZCBmcmVxdWVuY3kvdmlkL2ZpZCBzdGF0ZXMgKi8KIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgYWNwaV9kYXRhOwotI2VuZGlmCisKIAkvKiB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgYXNzb2NpYXRlZCBjb3JlcywgYnV0IGxldCBjcHVmcmVxCiAJICogaGFuZGxlIGhvdHBsdWcgZXZlbnRzIC0gc28ganVzdCBwb2ludCBhdCBjcHVmcmVxIHBvbC0+Y3B1cwogCSAqIHN0cnVjdHVyZSAqLwpAQCAtMjIyLDEwICsyMjEsOCBAQAogCiBzdGF0aWMgdm9pZCBwb3dlcm5vd19rOF9hY3BpX3BzdF92YWx1ZXMoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHVuc2lnbmVkIGludCBpbmRleCk7CiAKLSNpZmRlZiBDT05GSUdfWDg2X1BPV0VSTk9XX0s4X0FDUEkKIHN0YXRpYyBpbnQgZmlsbF9wb3dlcm5vd190YWJsZV9wc3RhdGUoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEsIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqcG93ZXJub3dfdGFibGUpOwogc3RhdGljIGludCBmaWxsX3Bvd2Vybm93X3RhYmxlX2ZpZHZpZChzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpwb3dlcm5vd190YWJsZSk7Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWZpbmVfc2libGluZ3MoaW50IGNwdSwgY3B1bWFza190IGNwdV9zaGFyZWRjb3JlX21hc2tbXSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc2M1MjBfZnJlcS5jCmluZGV4IDQyZGE5YmQuLjQzNWE5OTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYwpAQCAtMTksMTcgKzE5LDE5IEBACiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNkZWZpbmUgTU1DUl9CQVNFCTB4ZmZmZWYwMDAJLyogVGhlIGRlZmF1bHQgYmFzZSBhZGRyZXNzICovCiAjZGVmaW5lIE9GRlNfQ1BVQ1RMCTB4MiAgIC8qIENQVSBDb250cm9sIFJlZ2lzdGVyICovCiAKIHN0YXRpYyBfX3U4IF9faW9tZW0gKmNwdWN0bDsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsICJzYzUyMF9mcmVxIiwgbXNnKQorI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKKwkJInNjNTIwX2ZyZXEiLCBtc2cpCisjZGVmaW5lIFBGWCAic2M1MjBfZnJlcTogIgogCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHNjNTIwX2ZyZXFfdGFibGVbXSA9IHsKIAl7MHgwMSwJMTAwMDAwfSwKQEAgLTQzLDcgKzQ1LDggQEAKIAogCXN3aXRjaCAoY2xvY2tzcGVlZF9yZWcgJiAweDAzKSB7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJzYzUyMF9mcmVxOiBlcnJvcjogY3B1Y3RsIHJlZ2lzdGVyIGhhcyB1bmV4cGVjdGVkIHZhbHVlICUwMnhcbiIsIGNsb2Nrc3BlZWRfcmVnKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXJyb3I6IGNwdWN0bCByZWdpc3RlciBoYXMgdW5leHBlY3RlZCAiCisJCQkJInZhbHVlICUwMnhcbiIsIGNsb2Nrc3BlZWRfcmVnKTsKIAljYXNlIDB4MDE6CiAJCXJldHVybiAxMDAwMDA7CiAJY2FzZSAweDAyOgpAQCAtNTEsNyArNTQsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2M1MjBfZnJlcV9zZXRfY3B1X3N0YXRlICh1bnNpZ25lZCBpbnQgc3RhdGUpCitzdGF0aWMgdm9pZCBzYzUyMF9mcmVxX3NldF9jcHVfc3RhdGUodW5zaWduZWQgaW50IHN0YXRlKQogewogCiAJc3RydWN0IGNwdWZyZXFfZnJlcXMJZnJlcXM7CkBAIC03NiwxOCArNzksMTkgQEAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKIH07CiAKLXN0YXRpYyBpbnQgc2M1MjBfZnJlcV92ZXJpZnkgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBzYzUyMF9mcmVxX3ZlcmlmeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlyZXR1cm4gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdmVyaWZ5KHBvbGljeSwgJnNjNTIwX2ZyZXFfdGFibGVbMF0pOwogfQogCi1zdGF0aWMgaW50IHNjNTIwX2ZyZXFfdGFyZ2V0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgc2M1MjBfZnJlcV90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAogCQkJICAgIHVuc2lnbmVkIGludCByZWxhdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIHNjNTIwX2ZyZXFfdGFibGUsIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgc2M1MjBfZnJlcV90YWJsZSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc2M1MjBfZnJlcV9zZXRfY3B1X3N0YXRlKG5ld3N0YXRlKTsKQEAgLTExNiw3ICsxMjAsNyBAQAogCiAJcmVzdWx0ID0gY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfY3B1aW5mbyhwb2xpY3ksIHNjNTIwX2ZyZXFfdGFibGUpOwogCWlmIChyZXN1bHQpCi0JCXJldHVybiAocmVzdWx0KTsKKwkJcmV0dXJuIHJlc3VsdDsKIAogCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHNjNTIwX2ZyZXFfdGFibGUsIHBvbGljeS0+Y3B1KTsKIApAQCAtMTMxLDcgKzEzNSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIHNjNTIwX2ZyZXFfYXR0cltdID0geworc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgKnNjNTIwX2ZyZXFfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTE1NSwxMyArMTU5LDEzIEBACiAJaW50IGVycjsKIAogCS8qIFRlc3QgaWYgd2UgaGF2ZSB0aGUgcmlnaHQgaGFyZHdhcmUgKi8KLQlpZihjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EIHx8Ci0JCQkJYy0+eDg2ICE9IDQgfHwgYy0+eDg2X21vZGVsICE9IDkpIHsKKwlpZiAoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCB8fAorCSAgICBjLT54ODYgIT0gNCB8fCBjLT54ODZfbW9kZWwgIT0gOSkgewogCQlkcHJpbnRrKCJubyBFbGFuIFNDNTIwIHByb2Nlc3NvciBmb3VuZCFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJY3B1Y3RsID0gaW9yZW1hcCgodW5zaWduZWQgbG9uZykoTU1DUl9CQVNFICsgT0ZGU19DUFVDVEwpLCAxKTsKLQlpZighY3B1Y3RsKSB7CisJaWYgKCFjcHVjdGwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzYzUyMF9mcmVxOiBlcnJvcjogZmFpbGVkIHRvIHJlbWFwIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCmluZGV4IGRlZGMxZTkuLjhiYmIxMWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYwpAQCAtMzksNyArMzksNyBAQAogCiAvKiBzcGVlZHN0ZXBfcHJvY2Vzc29yCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX3Byb2Nlc3NvciA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9wcm9jZXNzb3I7CiAKIHN0YXRpYyB1MzIgcG1iYXNlOwogCkBAIC01NCw3ICs1NCw4IEBACiB9OwogCiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAic3BlZWRzdGVwLWljaCIsIG1zZykKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCisJCSJzcGVlZHN0ZXAtaWNoIiwgbXNnKQogCiAKIC8qKgpAQCAtNjIsNyArNjMsNyBAQAogICoKICAqIFJldHVybnM6IC1FTk9ERVYgaWYgbm8gcmVnaXN0ZXIgY291bGQgYmUgZm91bmQKICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfZmluZF9yZWdpc3RlciAodm9pZCkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX2ZpbmRfcmVnaXN0ZXIodm9pZCkKIHsKIAlpZiAoIXNwZWVkc3RlcF9jaGlwc2V0X2RldikKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC05MCw3ICs5MSw3IEBACiAgKgogICogICBUcmllcyB0byBjaGFuZ2UgdGhlIFNwZWVkU3RlcCBzdGF0ZS4KICAqLwotc3RhdGljIHZvaWQgc3BlZWRzdGVwX3NldF9zdGF0ZSAodW5zaWduZWQgaW50IHN0YXRlKQorc3RhdGljIHZvaWQgc3BlZWRzdGVwX3NldF9zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdGUpCiB7CiAJdTggcG0yX2JsazsKIAl1OCB2YWx1ZTsKQEAgLTEzMywxMSArMTM0LDExIEBACiAKIAlkcHJpbnRrKCJyZWFkIGF0IHBtYmFzZSAweCV4ICsgMHg1MCByZXR1cm5lZCAweCV4XG4iLCBwbWJhc2UsIHZhbHVlKTsKIAotCWlmIChzdGF0ZSA9PSAodmFsdWUgJiAweDEpKSB7Ci0JCWRwcmludGsoImNoYW5nZSB0byAldSBNSHogc3VjY2VlZGVkXG4iLCAoc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpIC8gMTAwMCkpOwotCX0gZWxzZSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgImNwdWZyZXE6IGNoYW5nZSBmYWlsZWQgLSBJL08gZXJyb3JcbiIpOwotCX0KKwlpZiAoc3RhdGUgPT0gKHZhbHVlICYgMHgxKSkKKwkJZHByaW50aygiY2hhbmdlIHRvICV1IE1IeiBzdWNjZWVkZWRcbiIsCisJCQlzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKSAvIDEwMDApOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBjaGFuZ2UgZmFpbGVkIC0gSS9PIGVycm9yXG4iKTsKIAogCXJldHVybjsKIH0KQEAgLTE0OSw3ICsxNTAsNyBAQAogICogICBUcmllcyB0byBhY3RpdmF0ZSB0aGUgU3BlZWRTdGVwIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3RlcnMuCiAgKiBSZXR1cm5zIC1FSU5WQUwgb24gYW4gdW5zdXBwb3J0ZWQgY2hpcHNldCwgYW5kIHplcm8gb24gc3VjY2Vzcy4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfYWN0aXZhdGUgKHZvaWQpCitzdGF0aWMgaW50IHNwZWVkc3RlcF9hY3RpdmF0ZSh2b2lkKQogewogCXUxNiB2YWx1ZSA9IDA7CiAKQEAgLTE3NSwyMCArMTc2LDE4IEBACiAgKiBmdW5jdGlvbnMuIFJldHVybnMgdGhlIFNQRUVEU1RFUF9DSElQU0VUXy1udW1iZXIgZm9yIHRoZSBkZXRlY3RlZAogICogY2hpcHNldCwgb3IgemVybyBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfY2hpcHNldCAodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2RldGVjdF9jaGlwc2V0KHZvaWQpCiB7CiAJc3BlZWRzdGVwX2NoaXBzZXRfZGV2ID0gcGNpX2dldF9zdWJzeXMoUENJX1ZFTkRPUl9JRF9JTlRFTCwKIAkJCSAgICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMiwKLQkJCSAgICAgIFBDSV9BTllfSUQsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAorCQkJICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKIAkJCSAgICAgIE5VTEwpOwogCWlmIChzcGVlZHN0ZXBfY2hpcHNldF9kZXYpCiAJCXJldHVybiA0OyAvKiA0LU0gKi8KIAogCXNwZWVkc3RlcF9jaGlwc2V0X2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTIsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAotCQkJICAgICAgUENJX0FOWV9JRCwKKwkJCSAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJCQkgICAgICBOVUxMKTsKIAlpZiAoc3BlZWRzdGVwX2NoaXBzZXRfZGV2KQogCQlyZXR1cm4gMzsgLyogMy1NICovCkBAIC0xOTYsOCArMTk1LDcgQEAKIAogCXNwZWVkc3RlcF9jaGlwc2V0X2RldiA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMTAsCi0JCQkgICAgICBQQ0lfQU5ZX0lELAotCQkJICAgICAgUENJX0FOWV9JRCwKKwkJCSAgICAgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJCQkgICAgICBOVUxMKTsKIAlpZiAoc3BlZWRzdGVwX2NoaXBzZXRfZGV2KSB7CiAJCS8qIHNwZWVkc3RlcC5jIGNhdXNlcyBsb2NrdXBzIG9uIERlbGwgSW5zcGlyb25zIDgwMDAgYW5kCkBAIC0yMDgsOCArMjA2LDcgQEAKIAogCQlob3N0YnJpZGdlICA9IHBjaV9nZXRfc3Vic3lzKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCQkgICAgICBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODE1X01DLAotCQkJICAgICAgUENJX0FOWV9JRCwKLQkJCSAgICAgIFBDSV9BTllfSUQsCisJCQkgICAgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAogCQkJICAgICAgTlVMTCk7CiAKIAkJaWYgKCFob3N0YnJpZGdlKQpAQCAtMjM2LDcgKzIzMyw3IEBACiAKIAljcHVzX2FsbG93ZWQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1cyk7Ci0Jc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3Nvcik7CisJc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmY3B1c19hbGxvd2VkKTsKIAlkcHJpbnRrKCJkZXRlY3RlZCAldSBrSHogYXMgY3VycmVudCBmcmVxdWVuY3lcbiIsIHNwZWVkKTsKIAlyZXR1cm4gc3BlZWQ7CkBAIC0yNTEsMTEgKzI0OCwxMiBAQAogICogc3BlZWRzdGVwX3RhcmdldCAtIHNldCBhIG5ldyBDUFVGcmVxIHBvbGljeQogICogQHBvbGljeTogbmV3IHBvbGljeQogICogQHRhcmdldF9mcmVxOiB0aGUgdGFyZ2V0IGZyZXF1ZW5jeQotICogQHJlbGF0aW9uOiBob3cgdGhhdCBmcmVxdWVuY3kgcmVsYXRlcyB0byBhY2hpZXZlZCBmcmVxdWVuY3kgKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCisgKiBAcmVsYXRpb246IGhvdyB0aGF0IGZyZXF1ZW5jeSByZWxhdGVzIHRvIGFjaGlldmVkIGZyZXF1ZW5jeQorICoJKENQVUZSRVFfUkVMQVRJT05fTCBvciBDUFVGUkVRX1JFTEFUSU9OX0gpCiAgKgogICogU2V0cyBhIG5ldyBDUFVGcmVxIHBvbGljeS4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfdGFyZ2V0IChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3RhcmdldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCSAgICAgdW5zaWduZWQgaW50IHRhcmdldF9mcmVxLAogCQkJICAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCiB7CkBAIC0yNjQsNyArMjYyLDggQEAKIAljcHVtYXNrX3QgY3B1c19hbGxvd2VkOwogCWludCBpOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0sIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZnJlcXMub2xkID0gX3NwZWVkc3RlcF9nZXQocG9saWN5LT5jcHVzKTsKQEAgLTMwOCw3ICszMDcsNyBAQAogICogTGltaXQgbXVzdCBiZSB3aXRoaW4gc3BlZWRzdGVwX2xvd19mcmVxIGFuZCBzcGVlZHN0ZXBfaGlnaF9mcmVxLCB3aXRoCiAgKiBhdCBsZWFzdCBvbmUgYm9yZGVyIGluY2x1ZGVkLgogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF92ZXJpZnkgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQorc3RhdGljIGludCBzcGVlZHN0ZXBfdmVyaWZ5KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCAmc3BlZWRzdGVwX2ZyZXFzWzBdKTsKIH0KQEAgLTM0NCw3ICszNDMsOCBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWRwcmludGsoImN1cnJlbnRseSBhdCAlcyBzcGVlZCBzZXR0aW5nIC0gJWkgTUh6XG4iLAotCQkoc3BlZWQgPT0gc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSkgPyAibG93IiA6ICJoaWdoIiwKKwkJKHNwZWVkID09IHNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3kpCisJCT8gImxvdyIgOiAiaGlnaCIsCiAJCShzcGVlZCAvIDEwMDApKTsKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwpAQCAtMzUyLDkgKzM1Miw5IEBACiAKIAlyZXN1bHQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgc3BlZWRzdGVwX2ZyZXFzKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm4gKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKLSAgICAgICAgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc3BlZWRzdGVwX2ZyZXFzLCBwb2xpY3ktPmNwdSk7CisJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIoc3BlZWRzdGVwX2ZyZXFzLCBwb2xpY3ktPmNwdSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM2Niw3ICszNjYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZyZXFfYXR0ciogc3BlZWRzdGVwX2F0dHJbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnJlcV9hdHRyICpzcGVlZHN0ZXBfYXR0cltdID0gewogCSZjcHVmcmVxX2ZyZXFfYXR0cl9zY2FsaW5nX2F2YWlsYWJsZV9mcmVxcywKIAlOVUxMLAogfTsKQEAgLTM5NiwxMyArMzk2LDE1IEBACiAJLyogZGV0ZWN0IHByb2Nlc3NvciAqLwogCXNwZWVkc3RlcF9wcm9jZXNzb3IgPSBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpOwogCWlmICghc3BlZWRzdGVwX3Byb2Nlc3NvcikgewotCQlkcHJpbnRrKCJJbnRlbChSKSBTcGVlZFN0ZXAoVE0pIGNhcGFibGUgcHJvY2Vzc29yIG5vdCBmb3VuZFxuIik7CisJCWRwcmludGsoIkludGVsKFIpIFNwZWVkU3RlcChUTSkgY2FwYWJsZSBwcm9jZXNzb3IgIgorCQkJCSJub3QgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBkZXRlY3QgY2hpcHNldCAqLwogCWlmICghc3BlZWRzdGVwX2RldGVjdF9jaGlwc2V0KCkpIHsKLQkJZHByaW50aygiSW50ZWwoUikgU3BlZWRTdGVwKFRNKSBmb3IgdGhpcyBjaGlwc2V0IG5vdCAoeWV0KSBhdmFpbGFibGUuXG4iKTsKKwkJZHByaW50aygiSW50ZWwoUikgU3BlZWRTdGVwKFRNKSBmb3IgdGhpcyBjaGlwc2V0IG5vdCAiCisJCQkJIih5ZXQpIGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTQzMSw5ICs0MzMsMTEgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SICgiRGF2ZSBKb25lcyA8ZGF2ZWpAcmVkaGF0LmNvbT4sIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIlNwZWVkc3RlcCBkcml2ZXIgZm9yIEludGVsIG1vYmlsZSBwcm9jZXNzb3JzIG9uIGNoaXBzZXRzIHdpdGggSUNILU0gc291dGhicmlkZ2VzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmUgSm9uZXMgPGRhdmVqQHJlZGhhdC5jb20+LCAiCisJCSJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNwZWVkc3RlcCBkcml2ZXIgZm9yIEludGVsIG1vYmlsZSBwcm9jZXNzb3JzIG9uIGNoaXBzZXRzICIKKwkJIndpdGggSUNILU0gc291dGhicmlkZ2VzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChzcGVlZHN0ZXBfaW5pdCk7CiBtb2R1bGVfZXhpdChzcGVlZHN0ZXBfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYwppbmRleCBjZGFjN2Q2Li4yZTNjNjg2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMKQEAgLTE2LDEyICsxNiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20vdHNjLmg+CiAjaW5jbHVkZSAic3BlZWRzdGVwLWxpYi5oIgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNwZWVkc3RlcC1saWIiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkic3BlZWRzdGVwLWxpYiIsIG1zZykKKworI2RlZmluZSBQRlggInNwZWVkc3RlcC1saWI6ICIKIAogI2lmZGVmIENPTkZJR19YODZfU1BFRURTVEVQX1JFTEFYRURfQ0FQX0NIRUNLCi1zdGF0aWMgaW50IHJlbGF4ZWRfY2hlY2sgPSAwOworc3RhdGljIGludCByZWxheGVkX2NoZWNrOwogI2Vsc2UKICNkZWZpbmUgcmVsYXhlZF9jaGVjayAwCiAjZW5kaWYKQEAgLTMwLDE0ICszNCwxNCBAQAogICogICAgICAgICAgICAgICAgICAgR0VUIFBST0NFU1NPUiBDT1JFIFNQRUVEIElOIEtIWiAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBwZW50aXVtM19nZXRfZnJlcXVlbmN5ICh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKQorc3RhdGljIHVuc2lnbmVkIGludCBwZW50aXVtM19nZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBwcm9jZXNzb3IpCiB7Ci0gICAgICAgIC8qIFNlZSB0YWJsZSAxNCBvZiBwM19kcy5wZGYgYW5kIHRhYmxlIDIyIG9mIDI5ODM0MDAzLnBkZiAqLworCS8qIFNlZSB0YWJsZSAxNCBvZiBwM19kcy5wZGYgYW5kIHRhYmxlIDIyIG9mIDI5ODM0MDAzLnBkZiAqLwogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGludCByYXRpbzsJLyogRnJlcXVlbmN5IE11bHRpcGxpZXIgKHgxMCkgKi8KIAkJdTggYml0bWFwOwkJLyogcG93ZXIgb24gY29uZmlndXJhdGlvbiBiaXRzCiAJCQkJCVsyNywgMjU6MjJdIChpbiBNU1IgMHgyYSkgKi8KLQl9IG1zcl9kZWNvZGVfbXVsdCBbXSA9IHsKKwl9IG1zcl9kZWNvZGVfbXVsdFtdID0gewogCQl7IDMwLCAweDAxIH0sCiAJCXsgMzUsIDB4MDUgfSwKIAkJeyA0MCwgMHgwMiB9LApAQCAtNTIsNyArNTYsNyBAQAogCQl7IDg1LCAweDI2IH0sCiAJCXsgOTAsIDB4MjAgfSwKIAkJeyAxMDAsIDB4MmIgfSwKLQkJeyAwLCAweGZmIH0gICAgIC8qIGVycm9yIG9yIHVua25vd24gdmFsdWUgKi8KKwkJeyAwLCAweGZmIH0JLyogZXJyb3Igb3IgdW5rbm93biB2YWx1ZSAqLwogCX07CiAKIAkvKiBQSUlJKC1NKSBGU0Igc2V0dGluZ3M6IHNlZSB0YWJsZSBiMS1iIG9mIDI0NTQ3MjA2LnBkZiAqLwpAQCAtNjAsNyArNjQsNyBAQAogCQl1bnNpZ25lZCBpbnQgdmFsdWU7CS8qIEZyb250IFNpZGUgQnVzIHNwZWVkIGluIE1IeiAqLwogCQl1OCBiaXRtYXA7CQkvKiBwb3dlciBvbiBjb25maWd1cmF0aW9uIGJpdHMgWzE4OiAxOV0KIAkJCQkJKGluIE1TUiAweDJhKSAqLwotCX0gbXNyX2RlY29kZV9mc2IgW10gPSB7CisJfSBtc3JfZGVjb2RlX2ZzYltdID0gewogCQl7ICA2NiwgMHgwIH0sCiAJCXsgMTAwLCAweDIgfSwKIAkJeyAxMzMsIDB4MSB9LApAQCAtODUsNyArODksNyBAQAogCX0KIAogCS8qIGRlY29kZSB0aGUgbXVsdGlwbGllciAqLwotCWlmIChwcm9jZXNzb3IgPT0gU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFkpIHsKKwlpZiAocHJvY2Vzc29yID09IFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZKSB7CiAJCWRwcmludGsoIndvcmthcm91bmQgZm9yIGVhcmx5IFBJSUlzXG4iKTsKIAkJbXNyX2xvICY9IDB4MDNjMDAwMDA7CiAJfSBlbHNlCkBAIC05Nyw5ICsxMDEsMTAgQEAKIAkJaisrOwogCX0KIAotCWRwcmludGsoInNwZWVkIGlzICV1XG4iLCAobXNyX2RlY29kZV9tdWx0W2pdLnJhdGlvICogbXNyX2RlY29kZV9mc2JbaV0udmFsdWUgKiAxMDApKTsKKwlkcHJpbnRrKCJzcGVlZCBpcyAldVxuIiwKKwkJKG1zcl9kZWNvZGVfbXVsdFtqXS5yYXRpbyAqIG1zcl9kZWNvZGVfZnNiW2ldLnZhbHVlICogMTAwKSk7CiAKLQlyZXR1cm4gKG1zcl9kZWNvZGVfbXVsdFtqXS5yYXRpbyAqIG1zcl9kZWNvZGVfZnNiW2ldLnZhbHVlICogMTAwKTsKKwlyZXR1cm4gbXNyX2RlY29kZV9tdWx0W2pdLnJhdGlvICogbXNyX2RlY29kZV9mc2JbaV0udmFsdWUgKiAxMDA7CiB9CiAKIApAQCAtMTEyLDIwICsxMTcsMjMgQEAKIAogCS8qIHNlZSB0YWJsZSBCLTIgb2YgMjQ1NDcyMTIucGRmICovCiAJaWYgKG1zcl9sbyAmIDB4MDAwNDAwMDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgInNwZWVkc3RlcC1saWI6IFBNIC0gaW52YWxpZCBGU0I6IDB4JXggMHgleFxuIiwgbXNyX2xvLCBtc3JfdG1wKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJQTSAtIGludmFsaWQgRlNCOiAweCV4IDB4JXhcbiIsCisJCQkJbXNyX2xvLCBtc3JfdG1wKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJbXNyX3RtcCA9IChtc3JfbG8gPj4gMjIpICYgMHgxZjsKLQlkcHJpbnRrKCJiaXRzIDIyLTI2IGFyZSAweCV4LCBzcGVlZCBpcyAldVxuIiwgbXNyX3RtcCwgKG1zcl90bXAgKiAxMDAgKiAxMDAwKSk7CisJZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsCisJCQltc3JfdG1wLCAobXNyX3RtcCAqIDEwMCAqIDEwMDApKTsKIAotCXJldHVybiAobXNyX3RtcCAqIDEwMCAqIDEwMDApOworCXJldHVybiBtc3JfdG1wICogMTAwICogMTAwMDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBwZW50aXVtX2NvcmVfZ2V0X2ZyZXF1ZW5jeSh2b2lkKQogewogCXUzMiBmc2IgPSAwOwogCXUzMiBtc3JfbG8sIG1zcl90bXA7CisJaW50IHJldDsKIAogCXJkbXNyKE1TUl9GU0JfRlJFUSwgbXNyX2xvLCBtc3JfdG1wKTsKIAkvKiBzZWUgdGFibGUgQi0yIG9mIDI1MzY2OTIwLnBkZiAqLwpAQCAtMTUzLDEyICsxNjEsMTUgQEAKIAl9CiAKIAlyZG1zcihNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbXNyX2xvLCBtc3JfdG1wKTsKLQlkcHJpbnRrKCJQQ09SRSAtIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OOiAweCV4IDB4JXhcbiIsIG1zcl9sbywgbXNyX3RtcCk7CisJZHByaW50aygiUENPUkUgLSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjogMHgleCAweCV4XG4iLAorCQkJbXNyX2xvLCBtc3JfdG1wKTsKIAogCW1zcl90bXAgPSAobXNyX2xvID4+IDIyKSAmIDB4MWY7Ci0JZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsIG1zcl90bXAsIChtc3JfdG1wICogZnNiKSk7CisJZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsCisJCQltc3JfdG1wLCAobXNyX3RtcCAqIGZzYikpOwogCi0JcmV0dXJuIChtc3JfdG1wICogZnNiKTsKKwlyZXQgPSAobXNyX3RtcCAqIGZzYik7CisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0xNjcsNiArMTc4LDE2IEBACiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmJvb3RfY3B1X2RhdGE7CiAJdTMyIG1zcl9sbywgbXNyX2hpLCBtdWx0OwogCXVuc2lnbmVkIGludCBmc2IgPSAwOworCXVuc2lnbmVkIGludCByZXQ7CisJdTggZnNiX2NvZGU7CisKKwkvKiBQZW50aXVtIDQgTW9kZWwgMCBhbmQgMSBkbyBub3QgaGF2ZSB0aGUgQ29yZSBDbG9jayBGcmVxdWVuY3kKKwkgKiB0byBTeXN0ZW0gQnVzIEZyZXF1ZW5jeSBSYXRpbyBGaWVsZCBpbiB0aGUgUHJvY2Vzc29yIEZyZXF1ZW5jeQorCSAqIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgb2YgdGhlIE1TUi4gVGhlcmVmb3JlIHRoZSBjdXJyZW50CisJICogZnJlcXVlbmN5IGNhbm5vdCBiZSBjYWxjdWxhdGVkIGFuZCBoYXMgdG8gYmUgbWVhc3VyZWQuCisJICovCisJaWYgKGMtPng4Nl9tb2RlbCA8IDIpCisJCXJldHVybiBjcHVfa2h6OwogCiAJcmRtc3IoMHgyYywgbXNyX2xvLCBtc3JfaGkpOwogCkBAIC0xNzcsNjIgKzE5OCw2MSBAQAogCSAqIHJldmlzaW9uICMxMiBpbiBUYWJsZSBCLTE6IE1TUnMgaW4gdGhlIFBlbnRpdW0gNCBhbmQKIAkgKiBJbnRlbCBYZW9uIFByb2Nlc3NvcnMsIG9uIHBhZ2UgQi00IGFuZCBCLTUuCiAJICovCi0JaWYgKGMtPng4Nl9tb2RlbCA8IDIpCisJZnNiX2NvZGUgPSAobXNyX2xvID4+IDE2KSAmIDB4NzsKKwlzd2l0Y2ggKGZzYl9jb2RlKSB7CisJY2FzZSAwOgogCQlmc2IgPSAxMDAgKiAxMDAwOwotCWVsc2UgewotCQl1OCBmc2JfY29kZSA9IChtc3JfbG8gPj4gMTYpICYgMHg3OwotCQlzd2l0Y2ggKGZzYl9jb2RlKSB7Ci0JCWNhc2UgMDoKLQkJCWZzYiA9IDEwMCAqIDEwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJZnNiID0gMTMzMzMgKiAxMDsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlmc2IgPSAyMDAgKiAxMDAwOwotCQkJYnJlYWs7Ci0JCX0KKwkJYnJlYWs7CisJY2FzZSAxOgorCQlmc2IgPSAxMzMzMyAqIDEwOworCQlicmVhazsKKwljYXNlIDI6CisJCWZzYiA9IDIwMCAqIDEwMDA7CisJCWJyZWFrOwogCX0KIAogCWlmICghZnNiKQotCQlwcmludGsoS0VSTl9ERUJVRyAic3BlZWRzdGVwLWxpYjogY291bGRuJ3QgZGV0ZWN0IEZTQiBzcGVlZC4gUGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvIDxsaW51eEBicm9kby5kZT5cbiIpOworCQlwcmludGsoS0VSTl9ERUJVRyBQRlggImNvdWxkbid0IGRldGVjdCBGU0Igc3BlZWQuICIKKwkJCQkiUGxlYXNlIHNlbmQgYW4gZS1tYWlsIHRvIDxsaW51eEBicm9kby5kZT5cbiIpOwogCiAJLyogTXVsdGlwbGllci4gKi8KIAltdWx0ID0gbXNyX2xvID4+IDI0OwogCi0JZHByaW50aygiUDQgLSBGU0IgJXUga0h6OyBNdWx0aXBsaWVyICV1OyBTcGVlZCAldSBrSHpcbiIsIGZzYiwgbXVsdCwgKGZzYiAqIG11bHQpKTsKKwlkcHJpbnRrKCJQNCAtIEZTQiAldSBrSHo7IE11bHRpcGxpZXIgJXU7IFNwZWVkICV1IGtIelxuIiwKKwkJCWZzYiwgbXVsdCwgKGZzYiAqIG11bHQpKTsKIAotCXJldHVybiAoZnNiICogbXVsdCk7CisJcmV0ID0gKGZzYiAqIG11bHQpOworCXJldHVybiByZXQ7CiB9CiAKIAotdW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKQordW5zaWduZWQgaW50IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBwcm9jZXNzb3IpCiB7CiAJc3dpdGNoIChwcm9jZXNzb3IpIHsKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUENPUkU6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BDT1JFOgogCQlyZXR1cm4gcGVudGl1bV9jb3JlX2dldF9mcmVxdWVuY3koKTsKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUE06CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BNOgogCQlyZXR1cm4gcGVudGl1bU1fZ2V0X2ZyZXF1ZW5jeSgpOwotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QNEQ6Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TToKKwljYXNlIFNQRUVEU1RFUF9DUFVfUDREOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QNE06CiAJCXJldHVybiBwZW50aXVtNF9nZXRfZnJlcXVlbmN5KCk7Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfVDoKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DOgotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFk6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfVDoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9DOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFk6CiAJCXJldHVybiBwZW50aXVtM19nZXRfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeSk7CitFWFBPUlRfU1lNQk9MX0dQTChzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeSk7CiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgICAgIERFVEVDVCBTUEVFRFNURVAtQ0FQQUJMRSBQUk9DRVNTT1IgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yICh2b2lkKQordW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yKHZvaWQpCiB7CiAJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwogCXUzMiBlYngsIG1zcl9sbywgbXNyX2hpOwpAQCAtMjYxLDcgKzI4MSw3IEBACiAJCQkgKiBzYW1wbGUgaGFzIGVieCA9IDB4MGYsIHByb2R1Y3Rpb24gaGFzIDB4MGUuCiAJCQkgKi8KIAkJCWlmICgoZWJ4ID09IDB4MGUpIHx8IChlYnggPT0gMHgwZikpCi0JCQkJcmV0dXJuIFNQRUVEU1RFUF9QUk9DRVNTT1JfUDRNOworCQkJCXJldHVybiBTUEVFRFNURVBfQ1BVX1A0TTsKIAkJCWJyZWFrOwogCQljYXNlIDc6CiAJCQkvKgpAQCAtMjcyLDcgKzI5Miw3IEBACiAJCQkgKiBzYW1wbGVzIGFyZSBvbmx5IG9mIEItc3RlcHBpbmcuLi4KIAkJCSAqLwogCQkJaWYgKGVieCA9PSAweDBlKQotCQkJCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TTsKKwkJCQlyZXR1cm4gU1BFRURTVEVQX0NQVV9QNE07CiAJCQlicmVhazsKIAkJY2FzZSA5OgogCQkJLyoKQEAgLTI4OCwxMCArMzA4LDEzIEBACiAJCQkgKiBNLVA0LU1zIG1heSBoYXZlIGVpdGhlciBlYng9MHhlIG9yIDB4ZiBbc2VlIGFib3ZlXQogCQkJICogTS1QNC81MzMgaGF2ZSBlaXRoZXIgZWJ4PTB4ZSBvciAweGYuIFsyNTMxNzYwNy5wZGZdCiAJCQkgKiBhbHNvLCBNLVA0TSBIVHMgaGF2ZSBlYng9MHg4LCB0b28KLQkJCSAqIEZvciBub3csIHRoZXkgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlIG1vZGVsX2lkIHN0cmluZworCQkJICogRm9yIG5vdywgdGhleSBhcmUgZGlzdGluZ3Vpc2hlZCBieSB0aGUgbW9kZWxfaWQKKwkJCSAqIHN0cmluZwogCQkJICovCi0JCQlpZiAoKGVieCA9PSAweDBlKSB8fCAoc3Ryc3RyKGMtPng4Nl9tb2RlbF9pZCwiTW9iaWxlIEludGVsKFIpIFBlbnRpdW0oUikgNCIpICE9IE5VTEwpKQotCQkJCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1A0TTsKKwkJCWlmICgoZWJ4ID09IDB4MGUpIHx8CisJCQkJKHN0cnN0cihjLT54ODZfbW9kZWxfaWQsCisJCQkJICAgICJNb2JpbGUgSW50ZWwoUikgUGVudGl1bShSKSA0IikgIT0gTlVMTCkpCisJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUDRNOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTMwMSw3ICszMjQsOCBAQAogCiAJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKIAljYXNlIDB4MEI6IC8qIEludGVsIFBJSUkgW1R1YWxhdGluXSAqLwotCQkvKiBjcHVpZF9lYngoMSkgaXMgMHgwNCBmb3IgZGVza3RvcCBQSUlJLCAweDA2IGZvciBtb2JpbGUgUElJSS1NICovCisJCS8qIGNwdWlkX2VieCgxKSBpcyAweDA0IGZvciBkZXNrdG9wIFBJSUksCisJCSAqIDB4MDYgZm9yIG1vYmlsZSBQSUlJLU0gKi8KIAkJZWJ4ID0gY3B1aWRfZWJ4KDB4MDAwMDAwMDEpOwogCQlkcHJpbnRrKCJlYnggaXMgJXhcbiIsIGVieCk7CiAKQEAgLTMxMywxNCArMzM3LDE1IEBACiAJCS8qIFNvIGZhciBhbGwgUElJSS1NIHByb2Nlc3NvcnMgc3VwcG9ydCBTcGVlZFN0ZXAuIFNlZQogCQkgKiBJbnRlbCdzIDI0NTQwNjQwLnBkZiBvZiBKdW5lIDIwMDMKIAkJICovCi0JCXJldHVybiBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfVDsKKwkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUElJSV9UOwogCiAJY2FzZSAweDA4OiAvKiBJbnRlbCBQSUlJIFtDb3BwZXJtaW5lXSAqLwogCiAJCS8qIGFsbCBtb2JpbGUgUElJSSBDb3BwZXJtaW5lcyBoYXZlIEZTQiAxMDAgTUh6CiAJCSAqID09PiBzb3J0IG91dCBhIGZldyBkZXNrdG9wIFBJSUlzLiAqLwogCQlyZG1zcihNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbXNyX2xvLCBtc3JfaGkpOwotCQlkcHJpbnRrKCJDb3BwZXJtaW5lOiBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiBpcyAweCV4LCAweCV4XG4iLCBtc3JfbG8sIG1zcl9oaSk7CisJCWRwcmludGsoIkNvcHBlcm1pbmU6IE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OIGlzIDB4JXgsIDB4JXhcbiIsCisJCQkJbXNyX2xvLCBtc3JfaGkpOwogCQltc3JfbG8gJj0gMHgwMGMwMDAwOwogCQlpZiAobXNyX2xvICE9IDB4MDA4MDAwMCkKIAkJCXJldHVybiAwOwpAQCAtMzMyLDEzICszNTcsMTUgQEAKIAkJICogYml0IDU2IG9yIDU3IGlzIHNldAogCQkgKi8KIAkJcmRtc3IoTVNSX0lBMzJfUExBVEZPUk1fSUQsIG1zcl9sbywgbXNyX2hpKTsKLQkJZHByaW50aygiQ29wcGVybWluZTogTVNSX0lBMzJfUExBVEZPUk0gSUQgaXMgMHgleCwgMHgleFxuIiwgbXNyX2xvLCBtc3JfaGkpOwotCQlpZiAoKG1zcl9oaSAmICgxPDwxOCkpICYmIChyZWxheGVkX2NoZWNrID8gMSA6IChtc3JfaGkgJiAoMzw8MjQpKSkpIHsKKwkJZHByaW50aygiQ29wcGVybWluZTogTVNSX0lBMzJfUExBVEZPUk0gSUQgaXMgMHgleCwgMHgleFxuIiwKKwkJCQltc3JfbG8sIG1zcl9oaSk7CisJCWlmICgobXNyX2hpICYgKDE8PDE4KSkgJiYKKwkJICAgIChyZWxheGVkX2NoZWNrID8gMSA6IChtc3JfaGkgJiAoMzw8MjQpKSkpIHsKIAkJCWlmIChjLT54ODZfbWFzayA9PSAweDAxKSB7CiAJCQkJZHByaW50aygiZWFybHkgUElJSSB2ZXJzaW9uXG4iKTsKLQkJCQlyZXR1cm4gU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFk7CisJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZOwogCQkJfSBlbHNlCi0JCQkJcmV0dXJuIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DOworCQkJCXJldHVybiBTUEVFRFNURVBfQ1BVX1BJSUlfQzsKIAkJfQogCiAJZGVmYXVsdDoKQEAgLTM2OSw3ICszOTYsNyBAQAogCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgYm90aCBzcGVlZHNcbiIpOwogCiAJLyogZ2V0IGN1cnJlbnQgc3BlZWQgKi8KLQlwcmV2X3NwZWVkID0gc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CisJcHJldl9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHByb2Nlc3Nvcik7CiAJaWYgKCFwcmV2X3NwZWVkKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMzc5LDcgKzQwNiw3IEBACiAKIAkvKiBzd2l0Y2ggdG8gbG93IHN0YXRlICovCiAJc2V0X3N0YXRlKFNQRUVEU1RFUF9MT1cpOwotCSpsb3dfc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X3Byb2Nlc3Nvcl9mcmVxdWVuY3kocHJvY2Vzc29yKTsKKwkqbG93X3NwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kocHJvY2Vzc29yKTsKIAlpZiAoISpsb3dfc3BlZWQpIHsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CkBAIC0zOTgsNyArNDI1LDcgQEAKIAlpZiAodHJhbnNpdGlvbl9sYXRlbmN5KQogCQlkb19nZXR0aW1lb2ZkYXkoJnR2Mik7CiAKLQkqaGlnaF9zcGVlZCA9IHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShwcm9jZXNzb3IpOworCSpoaWdoX3NwZWVkID0gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3kocHJvY2Vzc29yKTsKIAlpZiAoISpoaWdoX3NwZWVkKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwpAQCAtNDI2LDkgKzQ1MywxMiBAQAogCQkvKiBjaGVjayBpZiB0aGUgbGF0ZW5jeSBtZWFzdXJlbWVudCBpcyB0b28gaGlnaCBvciB0b28gbG93CiAJCSAqIGFuZCBzZXQgaXQgdG8gYSBzYWZlIHZhbHVlICg1MDB1U2VjKSBpbiB0aGF0IGNhc2UKIAkJICovCi0JCWlmICgqdHJhbnNpdGlvbl9sYXRlbmN5ID4gMTAwMDAwMDAgfHwgKnRyYW5zaXRpb25fbGF0ZW5jeSA8IDUwMDAwKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAic3BlZWRzdGVwOiBmcmVxdWVuY3kgdHJhbnNpdGlvbiBtZWFzdXJlZCBzZWVtcyBvdXQgb2YgIgotCQkJCQkicmFuZ2UgKCV1IG5TZWMpLCBmYWxsaW5nIGJhY2sgdG8gYSBzYWZlIG9uZSBvZiAldSBuU2VjLlxuIiwKKwkJaWYgKCp0cmFuc2l0aW9uX2xhdGVuY3kgPiAxMDAwMDAwMCB8fAorCQkgICAgKnRyYW5zaXRpb25fbGF0ZW5jeSA8IDUwMDAwKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiZnJlcXVlbmN5IHRyYW5zaXRpb24gIgorCQkJCQkibWVhc3VyZWQgc2VlbXMgb3V0IG9mIHJhbmdlICgldSAiCisJCQkJCSJuU2VjKSwgZmFsbGluZyBiYWNrIHRvIGEgc2FmZSBvbmUgb2YiCisJCQkJCSIldSBuU2VjLlxuIiwKIAkJCQkJKnRyYW5zaXRpb25fbGF0ZW5jeSwgNTAwMDAwKTsKIAkJCSp0cmFuc2l0aW9uX2xhdGVuY3kgPSA1MDAwMDA7CiAJCX0KQEAgLTQzNiwxNSArNDY2LDE2IEBACiAKIG91dDoKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIChyZXQpOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcGVlZHN0ZXBfZ2V0X2ZyZXFzKTsKIAogI2lmZGVmIENPTkZJR19YODZfU1BFRURTVEVQX1JFTEFYRURfQ0FQX0NIRUNLCiBtb2R1bGVfcGFyYW0ocmVsYXhlZF9jaGVjaywgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocmVsYXhlZF9jaGVjaywgIkRvbid0IGRvIGFsbCBjaGVja3MgZm9yIHNwZWVkc3RlcCBjYXBhYmlsaXR5LiIpOworTU9EVUxFX1BBUk1fREVTQyhyZWxheGVkX2NoZWNrLAorCQkiRG9uJ3QgZG8gYWxsIGNoZWNrcyBmb3Igc3BlZWRzdGVwIGNhcGFiaWxpdHkuIik7CiAjZW5kaWYKIAotTU9EVUxFX0FVVEhPUiAoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIkxpYnJhcnkgZm9yIEludGVsIFNwZWVkU3RlcCAxIG9yIDIgY3B1ZnJlcSBkcml2ZXJzLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGlicmFyeSBmb3IgSW50ZWwgU3BlZWRTdGVwIDEgb3IgMiBjcHVmcmVxIGRyaXZlcnMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaAppbmRleCBiMTFiY2M2Li4yYjZjMDRlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKQEAgLTEyLDE3ICsxMiwxNyBAQAogCiAvKiBwcm9jZXNzb3JzICovCiAKLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFkJMHgwMDAwMDAwMSAgLyogQ29wcGVybWluZSBjb3JlICovCi0jZGVmaW5lIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DCQkweDAwMDAwMDAyICAvKiBDb3BwZXJtaW5lIGNvcmUgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX1QJCTB4MDAwMDAwMDMgIC8qIFR1YWxhdGluIGNvcmUgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QNE0JCQkweDAwMDAwMDA0ICAvKiBQNC1NICAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BJSUlfQ19FQVJMWQkweDAwMDAwMDAxICAvKiBDb3BwZXJtaW5lIGNvcmUgKi8KKyNkZWZpbmUgU1BFRURTVEVQX0NQVV9QSUlJX0MJCTB4MDAwMDAwMDIgIC8qIENvcHBlcm1pbmUgY29yZSAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BJSUlfVAkJMHgwMDAwMDAwMyAgLyogVHVhbGF0aW4gY29yZSAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1A0TQkJMHgwMDAwMDAwNCAgLyogUDQtTSAgKi8KIAogLyogdGhlIGZvbGxvd2luZyBwcm9jZXNzb3JzIGFyZSBub3Qgc3BlZWRzdGVwLWNhcGFibGUgYW5kIGFyZSBub3QgYXV0by1kZXRlY3RlZAogICogaW4gc3BlZWRzdGVwX2RldGVjdF9wcm9jZXNzb3IoKS4gSG93ZXZlciwgdGhlaXIgc3BlZWQgY2FuIGJlIGRldGVjdGVkIHVzaW5nCi0gKiB0aGUgc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KCkgY2FsbC4gKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QTQkJCTB4RkZGRkZGMDMgIC8qIFBlbnRpdW0gTSAgKi8KLSNkZWZpbmUgU1BFRURTVEVQX1BST0NFU1NPUl9QNEQJCQkweEZGRkZGRjA0ICAvKiBkZXNrdG9wIFA0ICAqLwotI2RlZmluZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BDT1JFCQkweEZGRkZGRjA1ICAvKiBDb3JlICovCisgKiB0aGUgc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koKSBjYWxsLiAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BNCQkweEZGRkZGRjAzICAvKiBQZW50aXVtIE0gICovCisjZGVmaW5lIFNQRUVEU1RFUF9DUFVfUDRECQkweEZGRkZGRjA0ICAvKiBkZXNrdG9wIFA0ICAqLworI2RlZmluZSBTUEVFRFNURVBfQ1BVX1BDT1JFCQkweEZGRkZGRjA1ICAvKiBDb3JlICovCiAKIC8qIHNwZWVkc3RlcCBzdGF0ZXMgLS0gb25seSB0d28gb2YgdGhlbSAqLwogCkBAIC0zNCw3ICszNCw3IEBACiBleHRlcm4gdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yICh2b2lkKTsKIAogLyogZGV0ZWN0IHRoZSBjdXJyZW50IHNwZWVkIChpbiBraHopIG9mIHRoZSBwcm9jZXNzb3IgKi8KLWV4dGVybiB1bnNpZ25lZCBpbnQgc3BlZWRzdGVwX2dldF9wcm9jZXNzb3JfZnJlcXVlbmN5KHVuc2lnbmVkIGludCBwcm9jZXNzb3IpOworZXh0ZXJuIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgcHJvY2Vzc29yKTsKIAogCiAvKiBkZXRlY3QgdGhlIGxvdyBhbmQgaGlnaCBzcGVlZHMgb2YgdGhlIHByb2Nlc3Nvci4gVGhlIGNhbGxiYWNrCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYwppbmRleCA4YTg1YzkzLi5iZWZlYTA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vaXN0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlICJzcGVlZHN0ZXAtbGliLmgiCiAKQEAgLTMwLDEyICszMCwxMiBAQAogICogSWYgdXNlciBnaXZlcyBpdCwgdGhlc2UgYXJlIHVzZWQuCiAgKgogICovCi1zdGF0aWMgaW50IHNtaV9wb3J0ID0gMDsKLXN0YXRpYyBpbnQgc21pX2NtZCA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHNtaV9zaWcgPSAwOworc3RhdGljIGludCBzbWlfcG9ydDsKK3N0YXRpYyBpbnQgc21pX2NtZDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc21pX3NpZzsKIAogLyogaW5mbyBhYm91dCB0aGUgcHJvY2Vzc29yICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHNwZWVkc3RlcF9wcm9jZXNzb3IgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCBzcGVlZHN0ZXBfcHJvY2Vzc29yOwogCiAvKgogICogVGhlcmUgYXJlIG9ubHkgdHdvIGZyZXF1ZW5jeSBzdGF0ZXMgZm9yIGVhY2ggcHJvY2Vzc29yLiBWYWx1ZXMKQEAgLTU2LDEyICs1NiwxMyBAQAogICogb2YgRE1BIGFjdGl2aXR5IGdvaW5nIG9uPyAqLwogI2RlZmluZSBTTUlfVFJJRVMgNQogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInNwZWVkc3RlcC1zbWkiLCBtc2cpCisjZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAorCQkic3BlZWRzdGVwLXNtaSIsIG1zZykKIAogLyoqCiAgKiBzcGVlZHN0ZXBfc21pX293bmVyc2hpcAogICovCi1zdGF0aWMgaW50IHNwZWVkc3RlcF9zbWlfb3duZXJzaGlwICh2b2lkKQorc3RhdGljIGludCBzcGVlZHN0ZXBfc21pX293bmVyc2hpcCh2b2lkKQogewogCXUzMiBjb21tYW5kLCByZXN1bHQsIG1hZ2ljLCBkdW1teTsKIAl1MzIgZnVuY3Rpb24gPSBHRVRfU1BFRURTVEVQX09XTkVSOwpAQCAtNzAsMTYgKzcxLDE4IEBACiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCW1hZ2ljID0gdmlydF90b19waHlzKG1hZ2ljX2RhdGEpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIG9idGFpbiBvd25lcnNoaXAgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsIGNvbW1hbmQsIHNtaV9wb3J0KTsKKwlkcHJpbnRrKCJ0cnlpbmcgdG8gb2J0YWluIG93bmVyc2hpcCB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKKwkJCWNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkicHVzaCAlJWVicFxuIgogCQkib3V0ICUlYWwsICglJWR4KVxuIgogCQkicG9wICUlZWJwXG4iCi0JCTogIj1EIiAocmVzdWx0KSwgIj1hIiAoZHVtbXkpLCAiPWIiIChkdW1teSksICI9YyIgKGR1bW15KSwgIj1kIiAoZHVtbXkpLAotCQkJIj1TIiAoZHVtbXkpCisJCTogIj1EIiAocmVzdWx0KSwKKwkJICAiPWEiIChkdW1teSksICI9YiIgKGR1bW15KSwgIj1jIiAoZHVtbXkpLCAiPWQiIChkdW1teSksCisJCSAgIj1TIiAoZHVtbXkpCiAJCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoMCksICJkIiAoc21pX3BvcnQpLAotCQkJIkQiICgwKSwgIlMiIChtYWdpYykKKwkJICAiRCIgKDApLCAiUyIgKG1hZ2ljKQogCQk6ICJtZW1vcnkiCiAJKTsKIApAQCAtOTcsMTAgKzEwMCwxMCBAQAogICogZXZlbiBoYW5ncyBbY2YuIGJ1Z21lLm9zZGwub3JnICMgMTQyMl0gb24gZWFybGllciBzeXN0ZW1zLiBFbXBpcmljYWwgdGVzdGluZwogICogc2hvd3MgdGhhdCB0aGUgbGF0dGVyIG9jY3VycyBpZiAhKGlzdF9pbmZvLmV2ZW50ICYgMHhGRkZGKS4KICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfc21pX2dldF9mcmVxcyAodW5zaWduZWQgaW50ICpsb3csIHVuc2lnbmVkIGludCAqaGlnaCkKK3N0YXRpYyBpbnQgc3BlZWRzdGVwX3NtaV9nZXRfZnJlcXModW5zaWduZWQgaW50ICpsb3csIHVuc2lnbmVkIGludCAqaGlnaCkKIHsKIAl1MzIgY29tbWFuZCwgcmVzdWx0ID0gMCwgZWRpLCBoaWdoX21oeiwgbG93X21oeiwgZHVtbXk7Ci0JdTMyIHN0YXRlPTA7CisJdTMyIHN0YXRlID0gMDsKIAl1MzIgZnVuY3Rpb24gPSBHRVRfU1BFRURTVEVQX0ZSRVFTOwogCiAJaWYgKCEoaXN0X2luZm8uZXZlbnQgJiAweEZGRkYpKSB7CkBAIC0xMTAsMTcgKzExMywyNSBAQAogCiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBmcmVxdWVuY2llcyB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwgY29tbWFuZCwgc21pX3BvcnQpOworCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgZnJlcXVlbmNpZXMgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsCisJCQljb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKIAkJInB1c2ggJSVlYnBcbiIKIAkJIm91dCAlJWFsLCAoJSVkeClcbiIKIAkJInBvcCAlJWVicCIKLQkJOiAiPWEiIChyZXN1bHQpLCAiPWIiIChoaWdoX21oeiksICI9YyIgKGxvd19taHopLCAiPWQiIChzdGF0ZSksICI9RCIgKGVkaSksICI9UyIgKGR1bW15KQotCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKHN0YXRlKSwgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKKwkJOiAiPWEiIChyZXN1bHQpLAorCQkgICI9YiIgKGhpZ2hfbWh6KSwKKwkJICAiPWMiIChsb3dfbWh6KSwKKwkJICAiPWQiIChzdGF0ZSksICI9RCIgKGVkaSksICI9UyIgKGR1bW15KQorCQk6ICJhIiAoY29tbWFuZCksCisJCSAgImIiIChmdW5jdGlvbiksCisJCSAgImMiIChzdGF0ZSksCisJCSAgImQiIChzbWlfcG9ydCksICJTIiAoMCksICJEIiAoMCkKIAkpOwogCi0JZHByaW50aygicmVzdWx0ICV4LCBsb3dfZnJlcSAldSwgaGlnaF9mcmVxICV1XG4iLCByZXN1bHQsIGxvd19taHosIGhpZ2hfbWh6KTsKKwlkcHJpbnRrKCJyZXN1bHQgJXgsIGxvd19mcmVxICV1LCBoaWdoX2ZyZXEgJXVcbiIsCisJCQlyZXN1bHQsIGxvd19taHosIGhpZ2hfbWh6KTsKIAogCS8qIGFib3J0IGlmIHJlc3VsdHMgYXJlIG9idmlvdXNseSBpbmNvcnJlY3QuLi4gKi8KIAlpZiAoKGhpZ2hfbWh6ICsgbG93X21oeikgPCA2MDApCkBAIC0xMzcsMjYgKzE0OCwzMCBAQAogICogQHN0YXRlOiBwcm9jZXNzb3IgZnJlcXVlbmN5IHN0YXRlIChTUEVFRFNURVBfTE9XIG9yIFNQRUVEU1RFUF9ISUdIKQogICoKICAqLwotc3RhdGljIGludCBzcGVlZHN0ZXBfZ2V0X3N0YXRlICh2b2lkKQorc3RhdGljIGludCBzcGVlZHN0ZXBfZ2V0X3N0YXRlKHZvaWQpCiB7Ci0JdTMyIGZ1bmN0aW9uPUdFVF9TUEVFRFNURVBfU1RBVEU7CisJdTMyIGZ1bmN0aW9uID0gR0VUX1NQRUVEU1RFUF9TVEFURTsKIAl1MzIgcmVzdWx0LCBzdGF0ZSwgZWRpLCBjb21tYW5kLCBkdW1teTsKIAogCWNvbW1hbmQgPSAoc21pX3NpZyAmIDB4ZmZmZmZmMDApIHwgKHNtaV9jbWQgJiAweGZmKTsKIAotCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgY3VycmVudCBzZXR0aW5nIHdpdGggY29tbWFuZCAleCBhdCBwb3J0ICV4XG4iLCBjb21tYW5kLCBzbWlfcG9ydCk7CisJZHByaW50aygidHJ5aW5nIHRvIGRldGVybWluZSBjdXJyZW50IHNldHRpbmcgd2l0aCBjb21tYW5kICV4ICIKKwkJImF0IHBvcnQgJXhcbiIsIGNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAogCQkicHVzaCAlJWVicFxuIgogCQkib3V0ICUlYWwsICglJWR4KVxuIgogCQkicG9wICUlZWJwXG4iCi0JCTogIj1hIiAocmVzdWx0KSwgIj1iIiAoc3RhdGUpLCAiPUQiIChlZGkpLCAiPWMiIChkdW1teSksICI9ZCIgKGR1bW15KSwgIj1TIiAoZHVtbXkpCi0JCTogImEiIChjb21tYW5kKSwgImIiIChmdW5jdGlvbiksICJjIiAoMCksICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCisJCTogIj1hIiAocmVzdWx0KSwKKwkJICAiPWIiIChzdGF0ZSksICI9RCIgKGVkaSksCisJCSAgIj1jIiAoZHVtbXkpLCAiPWQiIChkdW1teSksICI9UyIgKGR1bW15KQorCQk6ICJhIiAoY29tbWFuZCksICJiIiAoZnVuY3Rpb24pLCAiYyIgKDApLAorCQkgICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCiAJKTsKIAogCWRwcmludGsoInN0YXRlIGlzICV4LCByZXN1bHQgaXMgJXhcbiIsIHN0YXRlLCByZXN1bHQpOwogCi0JcmV0dXJuIChzdGF0ZSAmIDEpOworCXJldHVybiBzdGF0ZSAmIDE7CiB9CiAKIApAQCAtMTY1LDExICsxODAsMTEgQEAKICAqIEBzdGF0ZTogbmV3IHByb2Nlc3NvciBmcmVxdWVuY3kgc3RhdGUgKFNQRUVEU1RFUF9MT1cgb3IgU1BFRURTVEVQX0hJR0gpCiAgKgogICovCi1zdGF0aWMgdm9pZCBzcGVlZHN0ZXBfc2V0X3N0YXRlICh1bnNpZ25lZCBpbnQgc3RhdGUpCitzdGF0aWMgdm9pZCBzcGVlZHN0ZXBfc2V0X3N0YXRlKHVuc2lnbmVkIGludCBzdGF0ZSkKIHsKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMCwgY29tbWFuZCwgbmV3X3N0YXRlLCBkdW1teTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBmdW5jdGlvbj1TRVRfU1BFRURTVEVQX1NUQVRFOworCXVuc2lnbmVkIGludCBmdW5jdGlvbiA9IFNFVF9TUEVFRFNURVBfU1RBVEU7CiAJdW5zaWduZWQgaW50IHJldHJ5ID0gMDsKIAogCWlmIChzdGF0ZSA+IDB4MSkKQEAgLTE4MCwxMSArMTk1LDE0IEBACiAKIAljb21tYW5kID0gKHNtaV9zaWcgJiAweGZmZmZmZjAwKSB8IChzbWlfY21kICYgMHhmZik7CiAKLQlkcHJpbnRrKCJ0cnlpbmcgdG8gc2V0IGZyZXF1ZW5jeSB0byBzdGF0ZSAldSB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwgc3RhdGUsIGNvbW1hbmQsIHNtaV9wb3J0KTsKKwlkcHJpbnRrKCJ0cnlpbmcgdG8gc2V0IGZyZXF1ZW5jeSB0byBzdGF0ZSAldSAiCisJCSJ3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKKwkJc3RhdGUsIGNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCWRvIHsKIAkJaWYgKHJldHJ5KSB7Ci0JCQlkcHJpbnRrKCJyZXRyeSAldSwgcHJldmlvdXMgcmVzdWx0ICV1LCB3YWl0aW5nLi4uXG4iLCByZXRyeSwgcmVzdWx0KTsKKwkJCWRwcmludGsoInJldHJ5ICV1LCBwcmV2aW91cyByZXN1bHQgJXUsIHdhaXRpbmcuLi5cbiIsCisJCQkJCXJldHJ5LCByZXN1bHQpOwogCQkJbWRlbGF5KHJldHJ5ICogNTApOwogCQl9CiAJCXJldHJ5Kys7CkBAIC0xOTIsMjAgKzIxMCwyNiBAQAogCQkJInB1c2ggJSVlYnBcbiIKIAkJCSJvdXQgJSVhbCwgKCUlZHgpXG4iCiAJCQkicG9wICUlZWJwIgotCQkJOiAiPWIiIChuZXdfc3RhdGUpLCAiPUQiIChyZXN1bHQpLCAiPWMiIChkdW1teSksICI9YSIgKGR1bW15KSwKLQkJCQkiPWQiIChkdW1teSksICI9UyIgKGR1bW15KQotCQkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiIChzdGF0ZSksICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCisJCQk6ICI9YiIgKG5ld19zdGF0ZSksICI9RCIgKHJlc3VsdCksCisJCQkgICI9YyIgKGR1bW15KSwgIj1hIiAoZHVtbXkpLAorCQkJICAiPWQiIChkdW1teSksICI9UyIgKGR1bW15KQorCQkJOiAiYSIgKGNvbW1hbmQpLCAiYiIgKGZ1bmN0aW9uKSwgImMiIChzdGF0ZSksCisJCQkgICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCiAJCQkpOwogCX0gd2hpbGUgKChuZXdfc3RhdGUgIT0gc3RhdGUpICYmIChyZXRyeSA8PSBTTUlfVFJJRVMpKTsKIAogCS8qIGVuYWJsZSBJUlFzICovCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JaWYgKG5ld19zdGF0ZSA9PSBzdGF0ZSkgewotCQlkcHJpbnRrKCJjaGFuZ2UgdG8gJXUgTUh6IHN1Y2NlZWRlZCBhZnRlciAldSB0cmllcyB3aXRoIHJlc3VsdCAldVxuIiwgKHNwZWVkc3RlcF9mcmVxc1tuZXdfc3RhdGVdLmZyZXF1ZW5jeSAvIDEwMDApLCByZXRyeSwgcmVzdWx0KTsKLQl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGNoYW5nZSB0byBzdGF0ZSAldSBmYWlsZWQgd2l0aCBuZXdfc3RhdGUgJXUgYW5kIHJlc3VsdCAldVxuIiwgc3RhdGUsIG5ld19zdGF0ZSwgcmVzdWx0KTsKLQl9CisJaWYgKG5ld19zdGF0ZSA9PSBzdGF0ZSkKKwkJZHByaW50aygiY2hhbmdlIHRvICV1IE1IeiBzdWNjZWVkZWQgYWZ0ZXIgJXUgdHJpZXMgIgorCQkJIndpdGggcmVzdWx0ICV1XG4iLAorCQkJKHNwZWVkc3RlcF9mcmVxc1tuZXdfc3RhdGVdLmZyZXF1ZW5jeSAvIDEwMDApLAorCQkJcmV0cnksIHJlc3VsdCk7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGNoYW5nZSB0byBzdGF0ZSAldSAiCisJCQkiZmFpbGVkIHdpdGggbmV3X3N0YXRlICV1IGFuZCByZXN1bHQgJXVcbiIsCisJCQlzdGF0ZSwgbmV3X3N0YXRlLCByZXN1bHQpOwogCiAJcmV0dXJuOwogfQpAQCAtMjE5LDEzICsyNDMsMTQgQEAKICAqCiAgKiBTZXRzIGEgbmV3IENQVUZyZXEgcG9saWN5L2ZyZXEuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3RhcmdldCAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCitzdGF0aWMgaW50IHNwZWVkc3RlcF90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQl1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsIHVuc2lnbmVkIGludCByZWxhdGlvbikKIHsKIAl1bnNpZ25lZCBpbnQgbmV3c3RhdGUgPSAwOwogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwogCi0JaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0sIHRhcmdldF9mcmVxLCByZWxhdGlvbiwgJm5ld3N0YXRlKSkKKwlpZiAoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfdGFyZ2V0KHBvbGljeSwgJnNwZWVkc3RlcF9mcmVxc1swXSwKKwkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sICZuZXdzdGF0ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZnJlcXMub2xkID0gc3BlZWRzdGVwX2ZyZXFzW3NwZWVkc3RlcF9nZXRfc3RhdGUoKV0uZnJlcXVlbmN5OwpAQCAtMjUwLDcgKzI3NSw3IEBACiAgKiBMaW1pdCBtdXN0IGJlIHdpdGhpbiBzcGVlZHN0ZXBfbG93X2ZyZXEgYW5kIHNwZWVkc3RlcF9oaWdoX2ZyZXEsIHdpdGgKICAqIGF0IGxlYXN0IG9uZSBib3JkZXIgaW5jbHVkZWQuCiAgKi8KLXN0YXRpYyBpbnQgc3BlZWRzdGVwX3ZlcmlmeSAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IHNwZWVkc3RlcF92ZXJpZnkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJcmV0dXJuIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksICZzcGVlZHN0ZXBfZnJlcXNbMF0pOwogfQpAQCAtMjU5LDcgKzI4NCw4IEBACiBzdGF0aWMgaW50IHNwZWVkc3RlcF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKIAlpbnQgcmVzdWx0OwotCXVuc2lnbmVkIGludCBzcGVlZCxzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgc3BlZWQsIHN0YXRlOworCXVuc2lnbmVkIGludCAqbG93LCAqaGlnaDsKIAogCS8qIGNhcGFiaWxpdHkgY2hlY2sgKi8KIAlpZiAocG9saWN5LT5jcHUgIT0gMCkKQEAgLTI3MiwxOSArMjk4LDIzIEBACiAJfQogCiAJLyogZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY3kgKi8KLQlyZXN1bHQgPSBzcGVlZHN0ZXBfc21pX2dldF9mcmVxcygmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSwKLQkJCQkmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9ISUdIXS5mcmVxdWVuY3kpOworCWxvdyA9ICZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5OworCWhpZ2ggPSAmc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9ISUdIXS5mcmVxdWVuY3k7CisKKwlyZXN1bHQgPSBzcGVlZHN0ZXBfc21pX2dldF9mcmVxcyhsb3csIGhpZ2gpOwogCWlmIChyZXN1bHQpIHsKLQkJLyogZmFsbCBiYWNrIHRvIHNwZWVkc3RlcF9saWIuYyBkZWN0aW9uIG1lY2hhbmlzbTogdHJ5IGJvdGggc3RhdGVzIG91dCAqLwotCQlkcHJpbnRrKCJjb3VsZCBub3QgZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY2llcyBieSBTTUkgY2FsbC5cbiIpOworCQkvKiBmYWxsIGJhY2sgdG8gc3BlZWRzdGVwX2xpYi5jIGRlY3Rpb24gbWVjaGFuaXNtOgorCQkgKiB0cnkgYm90aCBzdGF0ZXMgb3V0ICovCisJCWRwcmludGsoImNvdWxkIG5vdCBkZXRlY3QgbG93IGFuZCBoaWdoIGZyZXF1ZW5jaWVzICIKKwkJCQkiYnkgU01JIGNhbGwuXG4iKTsKIAkJcmVzdWx0ID0gc3BlZWRzdGVwX2dldF9mcmVxcyhzcGVlZHN0ZXBfcHJvY2Vzc29yLAotCQkJCSZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0xPV10uZnJlcXVlbmN5LAotCQkJCSZzcGVlZHN0ZXBfZnJlcXNbU1BFRURTVEVQX0hJR0hdLmZyZXF1ZW5jeSwKKwkJCQlsb3csIGhpZ2gsCiAJCQkJTlVMTCwKIAkJCQkmc3BlZWRzdGVwX3NldF9zdGF0ZSk7CiAKIAkJaWYgKHJlc3VsdCkgewotCQkJZHByaW50aygiY291bGQgbm90IGRldGVjdCB0d28gZGlmZmVyZW50IHNwZWVkcyAtLSBhYm9ydGluZy5cbiIpOworCQkJZHByaW50aygiY291bGQgbm90IGRldGVjdCB0d28gZGlmZmVyZW50IHNwZWVkcyIKKwkJCQkJIiAtLSBhYm9ydGluZy5cbiIpOwogCQkJcmV0dXJuIHJlc3VsdDsKIAkJfSBlbHNlCiAJCQlkcHJpbnRrKCJ3b3JrYXJvdW5kIHdvcmtlZC5cbiIpOwpAQCAtMjk1LDcgKzMyNSw4IEBACiAJc3BlZWQgPSBzcGVlZHN0ZXBfZnJlcXNbc3RhdGVdLmZyZXF1ZW5jeTsKIAogCWRwcmludGsoImN1cnJlbnRseSBhdCAlcyBzcGVlZCBzZXR0aW5nIC0gJWkgTUh6XG4iLAotCQkoc3BlZWQgPT0gc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSkgPyAibG93IiA6ICJoaWdoIiwKKwkJKHNwZWVkID09IHNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3kpCisJCT8gImxvdyIgOiAiaGlnaCIsCiAJCShzcGVlZCAvIDEwMDApKTsKIAogCS8qIGNwdWluZm8gYW5kIGRlZmF1bHQgcG9saWN5IHZhbHVlcyAqLwpAQCAtMzA0LDcgKzMzNSw3IEBACiAKIAlyZXN1bHQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwgc3BlZWRzdGVwX2ZyZXFzKTsKIAlpZiAocmVzdWx0KQotCQlyZXR1cm4gKHJlc3VsdCk7CisJCXJldHVybiByZXN1bHQ7CiAKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihzcGVlZHN0ZXBfZnJlcXMsIHBvbGljeS0+Y3B1KTsKIApAQCAtMzIxLDcgKzM1Miw3IEBACiB7CiAJaWYgKGNwdSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JcmV0dXJuIHNwZWVkc3RlcF9nZXRfcHJvY2Vzc29yX2ZyZXF1ZW5jeShzcGVlZHN0ZXBfcHJvY2Vzc29yKTsKKwlyZXR1cm4gc3BlZWRzdGVwX2dldF9mcmVxdWVuY3koc3BlZWRzdGVwX3Byb2Nlc3Nvcik7CiB9CiAKIApAQCAtMzM1LDcgKzM2Niw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIqIHNwZWVkc3RlcF9hdHRyW10gPSB7CitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciAqc3BlZWRzdGVwX2F0dHJbXSA9IHsKIAkmY3B1ZnJlcV9mcmVxX2F0dHJfc2NhbGluZ19hdmFpbGFibGVfZnJlcXMsCiAJTlVMTCwKIH07CkBAIC0zNjQsMjEgKzM5NSwyMyBAQAogCXNwZWVkc3RlcF9wcm9jZXNzb3IgPSBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpOwogCiAJc3dpdGNoIChzcGVlZHN0ZXBfcHJvY2Vzc29yKSB7Ci0JY2FzZSBTUEVFRFNURVBfUFJPQ0VTU09SX1BJSUlfVDoKLQljYXNlIFNQRUVEU1RFUF9QUk9DRVNTT1JfUElJSV9DOgotCWNhc2UgU1BFRURTVEVQX1BST0NFU1NPUl9QSUlJX0NfRUFSTFk6CisJY2FzZSBTUEVFRFNURVBfQ1BVX1BJSUlfVDoKKwljYXNlIFNQRUVEU1RFUF9DUFVfUElJSV9DOgorCWNhc2UgU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFk6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNwZWVkc3RlcF9wcm9jZXNzb3IgPSAwOwogCX0KIAogCWlmICghc3BlZWRzdGVwX3Byb2Nlc3NvcikgewotCQlkcHJpbnRrICgiTm8gc3VwcG9ydGVkIEludGVsIENQVSBkZXRlY3RlZC5cbiIpOworCQlkcHJpbnRrKCJObyBzdXBwb3J0ZWQgSW50ZWwgQ1BVIGRldGVjdGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRwcmludGsoInNpZ25hdHVyZToweCUuOGx4LCBjb21tYW5kOjB4JS44bHgsIGV2ZW50OjB4JS44bHgsIHBlcmZfbGV2ZWw6MHglLjhseC5cbiIsCi0JCWlzdF9pbmZvLnNpZ25hdHVyZSwgaXN0X2luZm8uY29tbWFuZCwgaXN0X2luZm8uZXZlbnQsIGlzdF9pbmZvLnBlcmZfbGV2ZWwpOworCWRwcmludGsoInNpZ25hdHVyZToweCUuOGx4LCBjb21tYW5kOjB4JS44bHgsICIKKwkJImV2ZW50OjB4JS44bHgsIHBlcmZfbGV2ZWw6MHglLjhseC5cbiIsCisJCWlzdF9pbmZvLnNpZ25hdHVyZSwgaXN0X2luZm8uY29tbWFuZCwKKwkJaXN0X2luZm8uZXZlbnQsIGlzdF9pbmZvLnBlcmZfbGV2ZWwpOwogCiAJLyogRXJyb3IgaWYgbm8gSVNULVNNSSBCSU9TIG9yIG5vIFBBUk0KIAkJIHNpZz0gJ0lTR0UnIGFrYSAnSW50ZWwgU3BlZWRzdGVwIEdhdGUgRScgKi8KQEAgLTQxNiwxNyArNDQ5LDIwIEBACiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmc3BlZWRzdGVwX2RyaXZlcik7CiB9CiAKLW1vZHVsZV9wYXJhbShzbWlfcG9ydCwgIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW0oc21pX2NtZCwgICBpbnQsIDA0NDQpOwotbW9kdWxlX3BhcmFtKHNtaV9zaWcsICB1aW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShzbWlfcG9ydCwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShzbWlfY21kLCAgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShzbWlfc2lnLCB1aW50LCAwNDQ0KTsKIAotTU9EVUxFX1BBUk1fREVTQyhzbWlfcG9ydCwgIk92ZXJyaWRlIHRoZSBCSU9TLWdpdmVuIElTVCBwb3J0IHdpdGggdGhpcyB2YWx1ZSAtLSBJbnRlbCdzIGRlZmF1bHQgc2V0dGluZyBpcyAweGIyIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHNtaV9jbWQsICJPdmVycmlkZSB0aGUgQklPUy1naXZlbiBJU1QgY29tbWFuZCB3aXRoIHRoaXMgdmFsdWUgLS0gSW50ZWwncyBkZWZhdWx0IHNldHRpbmcgaXMgMHg4MiIpOwotTU9EVUxFX1BBUk1fREVTQyhzbWlfc2lnLCAiU2V0IHRvIDEgdG8gZmFrZSB0aGUgSVNUIHNpZ25hdHVyZSB3aGVuIHVzaW5nIHRoZSBTTUkgaW50ZXJmYWNlLiIpOworTU9EVUxFX1BBUk1fREVTQyhzbWlfcG9ydCwgIk92ZXJyaWRlIHRoZSBCSU9TLWdpdmVuIElTVCBwb3J0IHdpdGggdGhpcyB2YWx1ZSAiCisJCSItLSBJbnRlbCdzIGRlZmF1bHQgc2V0dGluZyBpcyAweGIyIik7CitNT0RVTEVfUEFSTV9ERVNDKHNtaV9jbWQsICJPdmVycmlkZSB0aGUgQklPUy1naXZlbiBJU1QgY29tbWFuZCB3aXRoIHRoaXMgdmFsdWUgIgorCQkiLS0gSW50ZWwncyBkZWZhdWx0IHNldHRpbmcgaXMgMHg4MiIpOworTU9EVUxFX1BBUk1fREVTQyhzbWlfc2lnLCAiU2V0IHRvIDEgdG8gZmFrZSB0aGUgSVNUIHNpZ25hdHVyZSB3aGVuIHVzaW5nIHRoZSAiCisJCSJTTUkgaW50ZXJmYWNlLiIpOwogCi1NT0RVTEVfQVVUSE9SICgiSGlyb3NoaSBNaXVyYSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiU3BlZWRzdGVwIGRyaXZlciBmb3IgSVNUIGFwcGxldCBTTUkgaW50ZXJmYWNlLiIpOwotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkhpcm9zaGkgTWl1cmEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3BlZWRzdGVwIGRyaXZlciBmb3IgSVNUIGFwcGxldCBTTUkgaW50ZXJmYWNlLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChzcGVlZHN0ZXBfaW5pdCk7CiBtb2R1bGVfZXhpdChzcGVlZHN0ZXBfZXhpdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKaW5kZXggMjRmZjI2YS4uNWZmZjAwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKQEAgLTU2LDExICs1NywxNiBAQAogCiAJLyoKIAkgKiBjLT54ODZfcG93ZXIgaXMgODAwMF8wMDA3IGVkeC4gQml0IDggaXMgVFNDIHJ1bnMgYXQgY29uc3RhbnQgcmF0ZQotCSAqIHdpdGggUC9UIHN0YXRlcyBhbmQgZG9lcyBub3Qgc3RvcCBpbiBkZWVwIEMtc3RhdGVzCisJICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMuCisJICoKKwkgKiBJdCBpcyBhbHNvIHJlbGlhYmxlIGFjcm9zcyBjb3JlcyBhbmQgc29ja2V0cy4gKGJ1dCBub3QgYWNyb3NzCisJICogY2FiaW5ldHMgLSB3ZSB0dXJuIGl0IG9mZiBpbiB0aGF0IGNhc2UgZXhwbGljaXRseS4pCiAJICovCiAJaWYgKGMtPng4Nl9wb3dlciAmICgxIDw8IDgpKSB7CiAJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7CiAJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX05PTlNUT1BfVFNDKTsKKwkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfVFNDX1JFTElBQkxFKTsKKwkJc2NoZWRfY2xvY2tfc3RhYmxlID0gMTsKIAl9CiAKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCmluZGV4IGEwMDU0NWYuLjY0OGIzYTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwpAQCAtODAsNiArODAsNyBAQAogICovCiBzdGF0aWMgaW50IGJvb3RfaHBldF9kaXNhYmxlOwogaW50IGhwZXRfZm9yY2VfdXNlcjsKK3N0YXRpYyBpbnQgaHBldF92ZXJib3NlOwogCiBzdGF0aWMgaW50IF9faW5pdCBocGV0X3NldHVwKGNoYXIgKnN0cikKIHsKQEAgLTg4LDYgKzg5LDggQEAKIAkJCWJvb3RfaHBldF9kaXNhYmxlID0gMTsKIAkJaWYgKCFzdHJuY21wKCJmb3JjZSIsIHN0ciwgNSkpCiAJCQlocGV0X2ZvcmNlX3VzZXIgPSAxOworCQlpZiAoIXN0cm5jbXAoInZlcmJvc2UiLCBzdHIsIDcpKQorCQkJaHBldF92ZXJib3NlID0gMTsKIAl9CiAJcmV0dXJuIDE7CiB9CkBAIC0xMTksNiArMTIyLDQzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc19ocGV0X2VuYWJsZWQpOwogCitzdGF0aWMgdm9pZCBfaHBldF9wcmludF9jb25maWcoY29uc3QgY2hhciAqZnVuY3Rpb24sIGludCBsaW5lKQoreworCXUzMiBpLCB0aW1lcnMsIGwsIGg7CisJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogJXMoJWQpOlxuIiwgZnVuY3Rpb24sIGxpbmUpOworCWwgPSBocGV0X3JlYWRsKEhQRVRfSUQpOworCWggPSBocGV0X3JlYWRsKEhQRVRfUEVSSU9EKTsKKwl0aW1lcnMgPSAoKGwgJiBIUEVUX0lEX05VTUJFUikgPj4gSFBFVF9JRF9OVU1CRVJfU0hJRlQpICsgMTsKKwlwcmludGsoS0VSTl9JTkZPICJocGV0OiBJRDogMHgleCwgUEVSSU9EOiAweCV4XG4iLCBsLCBoKTsKKwlsID0gaHBldF9yZWFkbChIUEVUX0NGRyk7CisJaCA9IGhwZXRfcmVhZGwoSFBFVF9TVEFUVVMpOworCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IENGRzogMHgleCwgU1RBVFVTOiAweCV4XG4iLCBsLCBoKTsKKwlsID0gaHBldF9yZWFkbChIUEVUX0NPVU5URVIpOworCWggPSBocGV0X3JlYWRsKEhQRVRfQ09VTlRFUis0KTsKKwlwcmludGsoS0VSTl9JTkZPICJocGV0OiBDT1VOVEVSX2w6IDB4JXgsIENPVU5URVJfaDogMHgleFxuIiwgbCwgaCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGltZXJzOyBpKyspIHsKKwkJbCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DRkcoaSkpOworCQloID0gaHBldF9yZWFkbChIUEVUX1RuX0NGRyhpKSs0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogVCVkOiBDRkdfbDogMHgleCwgQ0ZHX2g6IDB4JXhcbiIsCisJCSAgICAgICBpLCBsLCBoKTsKKwkJbCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9DTVAoaSkpOworCQloID0gaHBldF9yZWFkbChIUEVUX1RuX0NNUChpKSs0KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaHBldDogVCVkOiBDTVBfbDogMHgleCwgQ01QX2g6IDB4JXhcbiIsCisJCSAgICAgICBpLCBsLCBoKTsKKwkJbCA9IGhwZXRfcmVhZGwoSFBFVF9Ubl9ST1VURShpKSk7CisJCWggPSBocGV0X3JlYWRsKEhQRVRfVG5fUk9VVEUoaSkrNCk7CisJCXByaW50ayhLRVJOX0lORk8gImhwZXQ6IFQlZCBST1VURV9sOiAweCV4LCBST1VURV9oOiAweCV4XG4iLAorCQkgICAgICAgaSwgbCwgaCk7CisJfQorfQorCisjZGVmaW5lIGhwZXRfcHJpbnRfY29uZmlnKCkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAoaHBldF92ZXJib3NlKQkJCQkJXAorCQlfaHBldF9wcmludF9jb25maWcoX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CVwKK30gd2hpbGUgKDApCisKIC8qCiAgKiBXaGVuIHRoZSBocGV0IGRyaXZlciAoL2Rldi9ocGV0KSBpcyBlbmFibGVkLCB3ZSBuZWVkIHRvIHJlc2VydmUKICAqIHRpbWVyIDAgYW5kIHRpbWVyIDEgaW4gY2FzZSBvZiBSVEMgZW11bGF0aW9uLgpAQCAtMTkxLDI3ICsyMzEsMzcgQEAKIAkucmF0aW5nCQk9IDUwLAogfTsKIAotc3RhdGljIHZvaWQgaHBldF9zdGFydF9jb3VudGVyKHZvaWQpCitzdGF0aWMgdm9pZCBocGV0X3N0b3BfY291bnRlcih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgY2ZnID0gaHBldF9yZWFkbChIUEVUX0NGRyk7Ci0KIAljZmcgJj0gfkhQRVRfQ0ZHX0VOQUJMRTsKIAlocGV0X3dyaXRlbChjZmcsIEhQRVRfQ0ZHKTsKIAlocGV0X3dyaXRlbCgwLCBIUEVUX0NPVU5URVIpOwogCWhwZXRfd3JpdGVsKDAsIEhQRVRfQ09VTlRFUiArIDQpOworfQorCitzdGF0aWMgdm9pZCBocGV0X3N0YXJ0X2NvdW50ZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNmZyA9IGhwZXRfcmVhZGwoSFBFVF9DRkcpOwogCWNmZyB8PSBIUEVUX0NGR19FTkFCTEU7CiAJaHBldF93cml0ZWwoY2ZnLCBIUEVUX0NGRyk7CiB9CiAKK3N0YXRpYyB2b2lkIGhwZXRfcmVzdGFydF9jb3VudGVyKHZvaWQpCit7CisJaHBldF9zdG9wX2NvdW50ZXIoKTsKKwlocGV0X3N0YXJ0X2NvdW50ZXIoKTsKK30KKwogc3RhdGljIHZvaWQgaHBldF9yZXN1bWVfZGV2aWNlKHZvaWQpCiB7CiAJZm9yY2VfaHBldF9yZXN1bWUoKTsKIH0KIAotc3RhdGljIHZvaWQgaHBldF9yZXN0YXJ0X2NvdW50ZXIodm9pZCkKK3N0YXRpYyB2b2lkIGhwZXRfcmVzdW1lX2NvdW50ZXIodm9pZCkKIHsKIAlocGV0X3Jlc3VtZV9kZXZpY2UoKTsKLQlocGV0X3N0YXJ0X2NvdW50ZXIoKTsKKwlocGV0X3Jlc3RhcnRfY291bnRlcigpOwogfQogCiBzdGF0aWMgdm9pZCBocGV0X2VuYWJsZV9sZWdhY3lfaW50KHZvaWQpCkBAIC0yNTksMjkgKzMwOSwyMyBAQAogc3RhdGljIHZvaWQgaHBldF9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKIAkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0LCBpbnQgdGltZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBjZmcsIGNtcCwgbm93OworCXVuc2lnbmVkIGxvbmcgY2ZnOwogCXVpbnQ2NF90IGRlbHRhOwogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJaHBldF9zdG9wX2NvdW50ZXIoKTsKIAkJZGVsdGEgPSAoKHVpbnQ2NF90KShOU0VDX1BFUl9TRUMvSFopKSAqIGV2dC0+bXVsdDsKIAkJZGVsdGEgPj49IGV2dC0+c2hpZnQ7Ci0JCW5vdyA9IGhwZXRfcmVhZGwoSFBFVF9DT1VOVEVSKTsKLQkJY21wID0gbm93ICsgKHVuc2lnbmVkIGxvbmcpIGRlbHRhOwogCQljZmcgPSBocGV0X3JlYWRsKEhQRVRfVG5fQ0ZHKHRpbWVyKSk7CiAJCS8qIE1ha2Ugc3VyZSB3ZSB1c2UgZWRnZSB0cmlnZ2VyZWQgaW50ZXJydXB0cyAqLwogCQljZmcgJj0gfkhQRVRfVE5fTEVWRUw7CiAJCWNmZyB8PSBIUEVUX1ROX0VOQUJMRSB8IEhQRVRfVE5fUEVSSU9ESUMgfAogCQkgICAgICAgSFBFVF9UTl9TRVRWQUwgfCBIUEVUX1ROXzMyQklUOwogCQlocGV0X3dyaXRlbChjZmcsIEhQRVRfVG5fQ0ZHKHRpbWVyKSk7Ci0JCS8qCi0JCSAqIFRoZSBmaXJzdCB3cml0ZSBhZnRlciB3cml0aW5nIFROX1NFVFZBTCB0byB0aGUKLQkJICogY29uZmlnIHJlZ2lzdGVyIHNldHMgdGhlIGNvdW50ZXIgdmFsdWUsIHRoZSBzZWNvbmQKLQkJICogd3JpdGUgc2V0cyB0aGUgcGVyaW9kLgotCQkgKi8KLQkJaHBldF93cml0ZWwoY21wLCBIUEVUX1RuX0NNUCh0aW1lcikpOwotCQl1ZGVsYXkoMSk7CiAJCWhwZXRfd3JpdGVsKCh1bnNpZ25lZCBsb25nKSBkZWx0YSwgSFBFVF9Ubl9DTVAodGltZXIpKTsKKwkJaHBldF9zdGFydF9jb3VudGVyKCk7CisJCWhwZXRfcHJpbnRfY29uZmlnKCk7CiAJCWJyZWFrOwogCiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgpAQCAtMzA4LDYgKzM1Miw3IEBACiAJCQlpcnFfc2V0X2FmZmluaXR5KGhkZXYtPmlycSwgY3B1bWFza19vZihoZGV2LT5jcHUpKTsKIAkJCWVuYWJsZV9pcnEoaGRldi0+aXJxKTsKIAkJfQorCQlocGV0X3ByaW50X2NvbmZpZygpOwogCQlicmVhazsKIAl9CiB9CkBAIC01MjYsNiArNTcxLDcgQEAKIAogCW51bV90aW1lcnMgPSAoKGlkICYgSFBFVF9JRF9OVU1CRVIpID4+IEhQRVRfSURfTlVNQkVSX1NISUZUKTsKIAludW1fdGltZXJzKys7IC8qIFZhbHVlIHJlYWQgb3V0IHN0YXJ0cyBmcm9tIDAgKi8KKwlocGV0X3ByaW50X2NvbmZpZygpOwogCiAJaHBldF9kZXZzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGhwZXRfZGV2KSAqIG51bV90aW1lcnMsIEdGUF9LRVJORUwpOwogCWlmICghaHBldF9kZXZzKQpAQCAtNjk1LDcgKzc0MSw3IEBACiAJLm1hc2sJCT0gSFBFVF9NQVNLLAogCS5zaGlmdAkJPSBIUEVUX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKLQkucmVzdW1lCQk9IGhwZXRfcmVzdGFydF9jb3VudGVyLAorCS5yZXN1bWUJCT0gaHBldF9yZXN1bWVfY291bnRlciwKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJLnZyZWFkCQk9IHZyZWFkX2hwZXQsCiAjZW5kaWYKQEAgLTcwNyw3ICs3NTMsNyBAQAogCWN5Y2xlX3QgdDE7CiAKIAkvKiBTdGFydCB0aGUgY291bnRlciAqLwotCWhwZXRfc3RhcnRfY291bnRlcigpOworCWhwZXRfcmVzdGFydF9jb3VudGVyKCk7CiAKIAkvKiBWZXJpZnkgd2hldGhlciBocGV0IGNvdW50ZXIgd29ya3MgKi8KIAl0MSA9IHJlYWRfaHBldCgpOwpAQCAtNzkzLDYgKzgzOSw3IEBACiAJICogaW5mb3JtYXRpb24gYW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKIAkgKi8KIAlpZCA9IGhwZXRfcmVhZGwoSFBFVF9JRCk7CisJaHBldF9wcmludF9jb25maWcoKTsKIAogI2lmZGVmIENPTkZJR19IUEVUX0VNVUxBVEVfUlRDCiAJLyoKQEAgLTg0NSw2ICs4OTIsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWhwZXRfcmVzZXJ2ZV9wbGF0Zm9ybV90aW1lcnMoaHBldF9yZWFkbChIUEVUX0lEKSk7CisJaHBldF9wcmludF9jb25maWcoKTsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCWhwZXRfY3B1aHBfbm90aWZ5KE5VTEwsIENQVV9PTkxJTkUsICh2b2lkICopKGxvbmcpY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwppbmRleCAzMDk5NDllLi42OTdkMWI3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCkBAIC0xNzIsNyArMTcyLDggQEAKIAkJCSBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOV83LAogCQkJIGljaF9mb3JjZV9lbmFibGVfaHBldCk7Ci0KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDNhMTYsCS8qIElDSDEwICovCisJCQkgaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpjYWNoZWRfZGV2OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKaW5kZXggZDVjZWJiNS4uMDhhZmExNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2MuYwpAQCAtMTcsMjAgKzE3LDIxIEBACiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2h5cGVydmlzb3IuaD4KIAotdW5zaWduZWQgaW50IGNwdV9raHo7ICAgICAgICAgICAvKiBUU0MgY2xvY2tzIC8gdXNlYywgbm90IHVzZWQgaGVyZSAqLwordW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgY3B1X2toejsJLyogVFNDIGNsb2NrcyAvIHVzZWMsIG5vdCB1c2VkIGhlcmUgKi8KIEVYUE9SVF9TWU1CT0woY3B1X2toeik7Ci11bnNpZ25lZCBpbnQgdHNjX2toejsKKwordW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgdHNjX2toejsKIEVYUE9SVF9TWU1CT0wodHNjX2toeik7CiAKIC8qCiAgKiBUU0MgY2FuIGJlIHVuc3RhYmxlIGR1ZSB0byBjcHVmcmVxIG9yIGR1ZSB0byB1bnN5bmNlZCBUU0NzCiAgKi8KLXN0YXRpYyBpbnQgdHNjX3Vuc3RhYmxlOworc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IHRzY191bnN0YWJsZTsKIAogLyogbmF0aXZlX3NjaGVkX2Nsb2NrKCkgaXMgY2FsbGVkIGJlZm9yZSB0c2NfaW5pdCgpLCBzbwogICAgd2UgbXVzdCBzdGFydCB3aXRoIHRoZSBUU0Mgc29mdCBkaXNhYmxlZCB0byBwcmV2ZW50CiAgICBlcnJvbmVvdXMgcmR0c2MgdXNhZ2Ugb24gIWNwdV9oYXNfdHNjIHByb2Nlc3NvcnMgKi8KLXN0YXRpYyBpbnQgdHNjX2Rpc2FibGVkID0gLTE7CitzdGF0aWMgaW50IF9fcmVhZF9tb3N0bHkgdHNjX2Rpc2FibGVkID0gLTE7CiAKIHN0YXRpYyBpbnQgdHNjX2Nsb2Nrc291cmNlX3JlbGlhYmxlOwogLyoKQEAgLTU0Myw4ICs1NDQsNiBAQAogCXJldHVybiB0c2NfcGl0X21pbjsKIH0KIAotI2lmZGVmIENPTkZJR19YODZfMzIKLS8qIE9ubHkgY2FsbGVkIGZyb20gdGhlIFBvd2Vybm93IEs3IGNwdSBmcmVxIGRyaXZlciAqLwogaW50IHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCkKIHsKICNpZm5kZWYgQ09ORklHX1NNUApAQCAtNTY2LDcgKzU2NSw2IEBACiAKIEVYUE9SVF9TWU1CT0wocmVjYWxpYnJhdGVfY3B1X2toeik7CiAKLSNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCiAKIC8qIEFjY2VsZXJhdG9ycyBmb3Igc2NoZWRfY2xvY2soKQogICogY29udmVydCBmcm9tIGN5Y2xlcyg2NGJpdHMpID0+IG5hbm9zZWNvbmRzICg2NGJpdHMpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZyBiL2FyY2gveDg2L2t2bS9LY29uZmlnCmluZGV4IGI4MTEyNWYuLjBhMzAzYzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9LY29uZmlnCisrKyBiL2FyY2gveDg2L2t2bS9LY29uZmlnCkBAIC00LDYgKzQsMTAgQEAKIGNvbmZpZyBIQVZFX0tWTQogICAgICAgIGJvb2wKIAorY29uZmlnIEhBVkVfS1ZNX0lSUUNISVAKKyAgICAgICBib29sCisgICAgICAgZGVmYXVsdCB5CisKIG1lbnVjb25maWcgVklSVFVBTElaQVRJT04KIAlib29sICJWaXJ0dWFsaXphdGlvbiIKIAlkZXBlbmRzIG9uIEhBVkVfS1ZNIHx8IFg4NgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwppbmRleCA3MmJkMjc1Li5jMTNiYjkyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuYwpAQCAtMjAxLDYgKzIwMSw5IEBACiAJaWYgKCFhdG9taWNfaW5jX2FuZF90ZXN0KCZwdC0+cGVuZGluZykpCiAJCXNldF9iaXQoS1ZNX1JFUV9QRU5ESU5HX1RJTUVSLCAmdmNwdTAtPnJlcXVlc3RzKTsKIAorCWlmICghcHQtPnJlaW5qZWN0KQorCQlhdG9taWNfc2V0KCZwdC0+cGVuZGluZywgMSk7CisKIAlpZiAodmNwdTAgJiYgd2FpdHF1ZXVlX2FjdGl2ZSgmdmNwdTAtPndxKSkKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ2Y3B1MC0+d3EpOwogCkBAIC01MzYsNiArNTM5LDE2IEBACiAJcGl0LT5waXRfc3RhdGUuaXJxX2FjayA9IDE7CiB9CiAKK3N0YXRpYyB2b2lkIHBpdF9tYXNrX25vdGlmZXIoc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbiwgYm9vbCBtYXNrKQoreworCXN0cnVjdCBrdm1fcGl0ICpwaXQgPSBjb250YWluZXJfb2Yoa2ltbiwgc3RydWN0IGt2bV9waXQsIG1hc2tfbm90aWZpZXIpOworCisJaWYgKCFtYXNrKSB7CisJCWF0b21pY19zZXQoJnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci5wZW5kaW5nLCAwKTsKKwkJcGl0LT5waXRfc3RhdGUuaXJxX2FjayA9IDE7CisJfQorfQorCiBzdHJ1Y3Qga3ZtX3BpdCAqa3ZtX2NyZWF0ZV9waXQoc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBrdm1fcGl0ICpwaXQ7CkBAIC01NDUsOSArNTU4LDcgQEAKIAlpZiAoIXBpdCkKIAkJcmV0dXJuIE5VTEw7CiAKLQltdXRleF9sb2NrKCZrdm0tPmxvY2spOwogCXBpdC0+aXJxX3NvdXJjZV9pZCA9IGt2bV9yZXF1ZXN0X2lycV9zb3VyY2VfaWQoa3ZtKTsKLQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJaWYgKHBpdC0+aXJxX3NvdXJjZV9pZCA8IDApIHsKIAkJa2ZyZWUocGl0KTsKIAkJcmV0dXJuIE5VTEw7CkBAIC01ODAsMTAgKzU5MSwxNCBAQAogCXBpdF9zdGF0ZS0+aXJxX2Fja19ub3RpZmllci5nc2kgPSAwOwogCXBpdF9zdGF0ZS0+aXJxX2Fja19ub3RpZmllci5pcnFfYWNrZWQgPSBrdm1fcGl0X2Fja19pcnE7CiAJa3ZtX3JlZ2lzdGVyX2lycV9hY2tfbm90aWZpZXIoa3ZtLCAmcGl0X3N0YXRlLT5pcnFfYWNrX25vdGlmaWVyKTsKKwlwaXRfc3RhdGUtPnBpdF90aW1lci5yZWluamVjdCA9IHRydWU7CiAJbXV0ZXhfdW5sb2NrKCZwaXQtPnBpdF9zdGF0ZS5sb2NrKTsKIAogCWt2bV9waXRfcmVzZXQocGl0KTsKIAorCXBpdC0+bWFza19ub3RpZmllci5mdW5jID0gcGl0X21hc2tfbm90aWZlcjsKKwlrdm1fcmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoa3ZtLCAwLCAmcGl0LT5tYXNrX25vdGlmaWVyKTsKKwogCXJldHVybiBwaXQ7CiB9CiAKQEAgLTU5Miw2ICs2MDcsOCBAQAogCXN0cnVjdCBocnRpbWVyICp0aW1lcjsKIAogCWlmIChrdm0tPmFyY2gudnBpdCkgeworCQlrdm1fdW5yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihrdm0sIDAsCisJCQkJCSAgICAgICAma3ZtLT5hcmNoLnZwaXQtPm1hc2tfbm90aWZpZXIpOwogCQltdXRleF9sb2NrKCZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLmxvY2spOwogCQl0aW1lciA9ICZrdm0tPmFyY2gudnBpdC0+cGl0X3N0YXRlLnBpdF90aW1lci50aW1lcjsKIAkJaHJ0aW1lcl9jYW5jZWwodGltZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU0LmggYi9hcmNoL3g4Ni9rdm0vaTgyNTQuaAppbmRleCA0MTc4MDIyLi42YWNiZTRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTQuaAorKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTQuaApAQCAtOSw2ICs5LDcgQEAKIAlzNjQgcGVyaW9kOyAvKiB1bml0OiBucyAqLwogCXM2NCBzY2hlZHVsZWQ7CiAJYXRvbWljX3QgcGVuZGluZzsKKwlib29sIHJlaW5qZWN0OwogfTsKIAogc3RydWN0IGt2bV9rcGl0X2NoYW5uZWxfc3RhdGUgewpAQCAtNDUsNiArNDYsNyBAQAogCXN0cnVjdCBrdm0gKmt2bTsKIAlzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUgcGl0X3N0YXRlOwogCWludCBpcnFfc291cmNlX2lkOworCXN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgbWFza19ub3RpZmllcjsKIH07CiAKICNkZWZpbmUgS1ZNX1BJVF9CQVNFX0FERFJFU1MJICAgIDB4NDAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1OS5jIGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKaW5kZXggMTc5ZGNiMC4uMWNjYjUwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU5LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU5LmMKQEAgLTMyLDExICszMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CiAKIHN0YXRpYyB2b2lkIHBpY19sb2NrKHN0cnVjdCBrdm1fcGljICpzKQorCV9fYWNxdWlyZXMoJnMtPmxvY2spCiB7CiAJc3Bpbl9sb2NrKCZzLT5sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgcGljX3VubG9jayhzdHJ1Y3Qga3ZtX3BpYyAqcykKKwlfX3JlbGVhc2VzKCZzLT5sb2NrKQogewogCXN0cnVjdCBrdm0gKmt2bSA9IHMtPmt2bTsKIAl1bnNpZ25lZCBhY2tzID0gcy0+cGVuZGluZ19hY2tzOwpAQCAtNDksNyArNTEsOCBAQAogCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKIAogCXdoaWxlIChhY2tzKSB7Ci0JCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgX19mZnMoYWNrcykpOworCQlrdm1fbm90aWZ5X2Fja2VkX2lycShrdm0sIFNFTEVDVF9QSUMoX19mZnMoYWNrcykpLAorCQkJCSAgICAgX19mZnMoYWNrcykpOwogCQlhY2tzICY9IGFja3MgLSAxOwogCX0KIApAQCAtNzYsMTIgKzc5LDEzIEBACiAvKgogICogc2V0IGlycSBsZXZlbC4gSWYgYW4gZWRnZSBpcyBkZXRlY3RlZCwgdGhlbiB0aGUgSVJSIGlzIHNldCB0byAxCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwaWNfc2V0X2lycTEoc3RydWN0IGt2bV9rcGljX3N0YXRlICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCitzdGF0aWMgaW5saW5lIGludCBwaWNfc2V0X2lycTEoc3RydWN0IGt2bV9rcGljX3N0YXRlICpzLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiB7Ci0JaW50IG1hc2s7CisJaW50IG1hc2ssIHJldCA9IDE7CiAJbWFzayA9IDEgPDwgaXJxOwogCWlmIChzLT5lbGNyICYgbWFzaykJLyogbGV2ZWwgdHJpZ2dlcmVkICovCiAJCWlmIChsZXZlbCkgeworCQkJcmV0ID0gIShzLT5pcnIgJiBtYXNrKTsKIAkJCXMtPmlyciB8PSBtYXNrOwogCQkJcy0+bGFzdF9pcnIgfD0gbWFzazsKIAkJfSBlbHNlIHsKQEAgLTkwLDExICs5NCwxNSBAQAogCQl9CiAJZWxzZQkvKiBlZGdlIHRyaWdnZXJlZCAqLwogCQlpZiAobGV2ZWwpIHsKLQkJCWlmICgocy0+bGFzdF9pcnIgJiBtYXNrKSA9PSAwKQorCQkJaWYgKChzLT5sYXN0X2lyciAmIG1hc2spID09IDApIHsKKwkJCQlyZXQgPSAhKHMtPmlyciAmIG1hc2spOwogCQkJCXMtPmlyciB8PSBtYXNrOworCQkJfQogCQkJcy0+bGFzdF9pcnIgfD0gbWFzazsKIAkJfSBlbHNlCiAJCQlzLT5sYXN0X2lyciAmPSB+bWFzazsKKworCXJldHVybiAocy0+aW1yICYgbWFzaykgPyAtMSA6IHJldDsKIH0KIAogLyoKQEAgLTE3MSwxNiArMTc5LDE5IEBACiAJcGljX3VubG9jayhzKTsKIH0KIAotdm9pZCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCitpbnQga3ZtX3BpY19zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKQogewogCXN0cnVjdCBrdm1fcGljICpzID0gb3BhcXVlOworCWludCByZXQgPSAtMTsKIAogCXBpY19sb2NrKHMpOwogCWlmIChpcnEgPj0gMCAmJiBpcnEgPCBQSUNfTlVNX1BJTlMpIHsKLQkJcGljX3NldF9pcnExKCZzLT5waWNzW2lycSA+PiAzXSwgaXJxICYgNywgbGV2ZWwpOworCQlyZXQgPSBwaWNfc2V0X2lycTEoJnMtPnBpY3NbaXJxID4+IDNdLCBpcnEgJiA3LCBsZXZlbCk7CiAJCXBpY191cGRhdGVfaXJxKHMpOwogCX0KIAlwaWNfdW5sb2NrKHMpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTIzMiw3ICsyNDMsNyBAQAogCX0KIAlwaWNfdXBkYXRlX2lycShzKTsKIAlwaWNfdW5sb2NrKHMpOwotCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGt2bSwgaXJxKTsKKwlrdm1fbm90aWZ5X2Fja2VkX2lycShrdm0sIFNFTEVDVF9QSUMoaXJxKSwgaXJxKTsKIAogCXJldHVybiBpbnRubzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pcnEuaCBiL2FyY2gveDg2L2t2bS9pcnEuaAppbmRleCA4MjU3OWVlLi45ZjU5MzE4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmgKKysrIGIvYXJjaC94ODYva3ZtL2lycS5oCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAibGFwaWMuaCIKIAogI2RlZmluZSBQSUNfTlVNX1BJTlMgMTYKKyNkZWZpbmUgU0VMRUNUX1BJQyhpcnEpIFwKKwkoKGlycSkgPCA4ID8gS1ZNX0lSUUNISVBfUElDX01BU1RFUiA6IEtWTV9JUlFDSElQX1BJQ19TTEFWRSkKIAogc3RydWN0IGt2bTsKIHN0cnVjdCBrdm1fdmNwdTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmggYi9hcmNoL3g4Ni9rdm0va3ZtX3N2bS5oCmluZGV4IDhlNWVlOTkuLmVkNjZlNGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9rdm1fc3ZtLmgKKysrIGIvYXJjaC94ODYva3ZtL2t2bV9zdm0uaApAQCAtMTgsNyArMTgsNiBAQAogfTsKIAogI2RlZmluZSBOUl9IT1NUX1NBVkVfVVNFUl9NU1JTIEFSUkFZX1NJWkUoaG9zdF9zYXZlX3VzZXJfbXNycykKLSNkZWZpbmUgTlVNX0RCX1JFR1MgNAogCiBzdHJ1Y3Qga3ZtX3ZjcHU7CiAKQEAgLTI5LDE4ICsyOCwyMyBAQAogCXN0cnVjdCBzdm1fY3B1X2RhdGEgKnN2bV9kYXRhOwogCXVpbnQ2NF90IGFzaWRfZ2VuZXJhdGlvbjsKIAotCXVuc2lnbmVkIGxvbmcgZGJfcmVnc1tOVU1fREJfUkVHU107Ci0KIAl1NjQgbmV4dF9yaXA7CiAKIAl1NjQgaG9zdF91c2VyX21zcnNbTlJfSE9TVF9TQVZFX1VTRVJfTVNSU107CiAJdTY0IGhvc3RfZ3NfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGhvc3RfY3IyOwotCXVuc2lnbmVkIGxvbmcgaG9zdF9kYl9yZWdzW05VTV9EQl9SRUdTXTsKLQl1bnNpZ25lZCBsb25nIGhvc3RfZHI2OwotCXVuc2lnbmVkIGxvbmcgaG9zdF9kcjc7CiAKIAl1MzIgKm1zcnBtOworCXN0cnVjdCB2bWNiICpoc2F2ZTsKKwl1NjQgaHNhdmVfbXNyOworCisJdTY0IG5lc3RlZF92bWNiOworCisJLyogVGhlc2UgYXJlIHRoZSBtZXJnZWQgdmVjdG9ycyAqLworCXUzMiAqbmVzdGVkX21zcnBtOworCisJLyogZ3BhIHBvaW50ZXJzIHRvIHRoZSByZWFsIHZlY3RvcnMgKi8KKwl1NjQgbmVzdGVkX3ZtY2JfbXNycG07CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuYyBiL2FyY2gveDg2L2t2bS9tbXUuYwppbmRleCAyZDQ0NzdjLi4yYTM2ZjdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmMKKysrIGIvYXJjaC94ODYva3ZtL21tdS5jCkBAIC0xNDUsMTEgKzE0NSwyMCBAQAogCXN0cnVjdCBrdm1fcm1hcF9kZXNjICptb3JlOwogfTsKIAotc3RydWN0IGt2bV9zaGFkb3dfd2FsayB7Ci0JaW50ICgqZW50cnkpKHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKndhbGssIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJICAgICB1NjQgYWRkciwgdTY0ICpzcHRlLCBpbnQgbGV2ZWwpOworc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciB7CisJdTY0IGFkZHI7CisJaHBhX3Qgc2hhZG93X2FkZHI7CisJaW50IGxldmVsOworCXU2NCAqc3B0ZXA7CisJdW5zaWduZWQgaW5kZXg7CiB9OwogCisjZGVmaW5lIGZvcl9lYWNoX3NoYWRvd19lbnRyeShfdmNwdSwgX2FkZHIsIF93YWxrZXIpICAgIFwKKwlmb3IgKHNoYWRvd193YWxrX2luaXQoJihfd2Fsa2VyKSwgX3ZjcHUsIF9hZGRyKTsJXAorCSAgICAgc2hhZG93X3dhbGtfb2theSgmKF93YWxrZXIpKTsJCQlcCisJICAgICBzaGFkb3dfd2Fsa19uZXh0KCYoX3dhbGtlcikpKQorCisKIHN0cnVjdCBrdm1fdW5zeW5jX3dhbGsgewogCWludCAoKmVudHJ5KSAoc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AsIHN0cnVjdCBrdm1fdW5zeW5jX3dhbGsgKndhbGspOwogfTsKQEAgLTM0Myw3ICszNTIsNiBAQAogCiAJQlVHX09OKCFtYy0+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+Z2xvYmFsID0gMDsKIAkJaWYgKHNwLT51bnN5bmMpIHsKQEAgLTE3NzcsMTIgKzE3OTEsOCBAQAogCQkJcGdwcmludGsoImhmbiBvbGQgJWx4IG5ldyAlbHhcbiIsCiAJCQkJIHNwdGVfdG9fcGZuKCpzaGFkb3dfcHRlKSwgcGZuKTsKIAkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc2hhZG93X3B0ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAobGFyZ2VwYWdlKQotCQkJCXdhc19ybWFwcGVkID0gaXNfbGFyZ2VfcHRlKCpzaGFkb3dfcHRlKTsKLQkJCWVsc2UKLQkJCQl3YXNfcm1hcHBlZCA9IDE7Ci0JCX0KKwkJfSBlbHNlCisJCQl3YXNfcm1hcHBlZCA9IDE7CiAJfQogCWlmIChzZXRfc3B0ZSh2Y3B1LCBzaGFkb3dfcHRlLCBwdGVfYWNjZXNzLCB1c2VyX2ZhdWx0LCB3cml0ZV9mYXVsdCwKIAkJICAgICAgZGlydHksIGxhcmdlcGFnZSwgZ2xvYmFsLCBnZm4sIHBmbiwgc3BlY3VsYXRpdmUsIHRydWUpKSB7CkBAIC0xODIwLDY3ICsxODMwLDQyIEBACiB7CiB9CiAKLXN0cnVjdCBkaXJlY3Rfc2hhZG93X3dhbGsgewotCXN0cnVjdCBrdm1fc2hhZG93X3dhbGsgd2Fsa2VyOwotCXBmbl90IHBmbjsKLQlpbnQgd3JpdGU7Ci0JaW50IGxhcmdlcGFnZTsKLQlpbnQgcHRfd3JpdGU7Ci19OwotCi1zdGF0aWMgaW50IGRpcmVjdF9tYXBfZW50cnkoc3RydWN0IGt2bV9zaGFkb3dfd2FsayAqX3dhbGssCi0JCQkgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJICAgIHU2NCBhZGRyLCB1NjQgKnNwdGVwLCBpbnQgbGV2ZWwpCi17Ci0Jc3RydWN0IGRpcmVjdF9zaGFkb3dfd2FsayAqd2FsayA9Ci0JCWNvbnRhaW5lcl9vZihfd2Fsaywgc3RydWN0IGRpcmVjdF9zaGFkb3dfd2Fsaywgd2Fsa2VyKTsKLQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKLQlnZm5fdCBwc2V1ZG9fZ2ZuOwotCWdmbl90IGdmbiA9IGFkZHIgPj4gUEFHRV9TSElGVDsKLQotCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCi0JICAgIHx8ICh3YWxrLT5sYXJnZXBhZ2UgJiYgbGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSkgewotCQltbXVfc2V0X3NwdGUodmNwdSwgc3B0ZXAsIEFDQ19BTEwsIEFDQ19BTEwsCi0JCQkgICAgIDAsIHdhbGstPndyaXRlLCAxLCAmd2Fsay0+cHRfd3JpdGUsCi0JCQkgICAgIHdhbGstPmxhcmdlcGFnZSwgMCwgZ2ZuLCB3YWxrLT5wZm4sIGZhbHNlKTsKLQkJKyt2Y3B1LT5zdGF0LnBmX2ZpeGVkOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAoKnNwdGVwID09IHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKSB7Ci0JCXBzZXVkb19nZm4gPSAoYWRkciAmIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOwotCQlzcCA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgcHNldWRvX2dmbiwgKGd2YV90KWFkZHIsIGxldmVsIC0gMSwKLQkJCQkgICAgICAxLCBBQ0NfQUxMLCBzcHRlcCk7Ci0JCWlmICghc3ApIHsKLQkJCXBncHJpbnRrKCJub25wYWdpbmdfbWFwOiBFTk9NRU1cbiIpOwotCQkJa3ZtX3JlbGVhc2VfcGZuX2NsZWFuKHdhbGstPnBmbik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCXNldF9zaGFkb3dfcHRlKHNwdGVwLAotCQkJICAgICAgIF9fcGEoc3AtPnNwdCkKLQkJCSAgICAgICB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sKLQkJCSAgICAgICB8IHNoYWRvd191c2VyX21hc2sgfCBzaGFkb3dfeF9tYXNrKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19kaXJlY3RfbWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgdiwgaW50IHdyaXRlLAogCQkJaW50IGxhcmdlcGFnZSwgZ2ZuX3QgZ2ZuLCBwZm5fdCBwZm4pCiB7Ci0JaW50IHI7Ci0Jc3RydWN0IGRpcmVjdF9zaGFkb3dfd2FsayB3YWxrZXIgPSB7Ci0JCS53YWxrZXIgPSB7IC5lbnRyeSA9IGRpcmVjdF9tYXBfZW50cnksIH0sCi0JCS5wZm4gPSBwZm4sCi0JCS5sYXJnZXBhZ2UgPSBsYXJnZXBhZ2UsCi0JCS53cml0ZSA9IHdyaXRlLAotCQkucHRfd3JpdGUgPSAwLAotCX07CisJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcDsKKwlpbnQgcHRfd3JpdGUgPSAwOworCWdmbl90IHBzZXVkb19nZm47CiAKLQlyID0gd2Fsa19zaGFkb3coJndhbGtlci53YWxrZXIsIHZjcHUsIGdmbiA8PCBQQUdFX1NISUZUKTsKLQlpZiAociA8IDApCi0JCXJldHVybiByOwotCXJldHVybiB3YWxrZXIucHRfd3JpdGU7CisJZm9yX2VhY2hfc2hhZG93X2VudHJ5KHZjcHUsICh1NjQpZ2ZuIDw8IFBBR0VfU0hJRlQsIGl0ZXJhdG9yKSB7CisJCWlmIChpdGVyYXRvci5sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCisJCSAgICB8fCAobGFyZ2VwYWdlICYmIGl0ZXJhdG9yLmxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkpIHsKKwkJCW1tdV9zZXRfc3B0ZSh2Y3B1LCBpdGVyYXRvci5zcHRlcCwgQUNDX0FMTCwgQUNDX0FMTCwKKwkJCQkgICAgIDAsIHdyaXRlLCAxLCAmcHRfd3JpdGUsCisJCQkJICAgICBsYXJnZXBhZ2UsIDAsIGdmbiwgcGZuLCBmYWxzZSk7CisJCQkrK3ZjcHUtPnN0YXQucGZfZml4ZWQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgqaXRlcmF0b3Iuc3B0ZXAgPT0gc2hhZG93X3RyYXBfbm9ucHJlc2VudF9wdGUpIHsKKwkJCXBzZXVkb19nZm4gPSAoaXRlcmF0b3IuYWRkciAmIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOworCQkJc3AgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHBzZXVkb19nZm4sIGl0ZXJhdG9yLmFkZHIsCisJCQkJCSAgICAgIGl0ZXJhdG9yLmxldmVsIC0gMSwKKwkJCQkJICAgICAgMSwgQUNDX0FMTCwgaXRlcmF0b3Iuc3B0ZXApOworCQkJaWYgKCFzcCkgeworCQkJCXBncHJpbnRrKCJub25wYWdpbmdfbWFwOiBFTk9NRU1cbiIpOworCQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCisJCQlzZXRfc2hhZG93X3B0ZShpdGVyYXRvci5zcHRlcCwKKwkJCQkgICAgICAgX19wYShzcC0+c3B0KQorCQkJCSAgICAgICB8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sKKwkJCQkgICAgICAgfCBzaGFkb3dfdXNlcl9tYXNrIHwgc2hhZG93X3hfbWFzayk7CisJCX0KKwl9CisJcmV0dXJuIHB0X3dyaXRlOwogfQogCiBzdGF0aWMgaW50IG5vbnBhZ2luZ19tYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2LCBpbnQgd3JpdGUsIGdmbl90IGdmbikKQEAgLTE5NjIsNyArMTk0Nyw3IEBACiAJaW50IGk7CiAJZ2ZuX3Qgcm9vdF9nZm47CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3A7Ci0JaW50IG1ldGFwaHlzaWNhbCA9IDA7CisJaW50IGRpcmVjdCA9IDA7CiAKIAlyb290X2dmbiA9IHZjcHUtPmFyY2guY3IzID4+IFBBR0VfU0hJRlQ7CiAKQEAgLTE5NzEsMTggKzE5NTYsMTggQEAKIAogCQlBU1NFUlQoIVZBTElEX1BBR0Uocm9vdCkpOwogCQlpZiAodGRwX2VuYWJsZWQpCi0JCQltZXRhcGh5c2ljYWwgPSAxOworCQkJZGlyZWN0ID0gMTsKIAkJc3AgPSBrdm1fbW11X2dldF9wYWdlKHZjcHUsIHJvb3RfZ2ZuLCAwLAotCQkJCSAgICAgIFBUNjRfUk9PVF9MRVZFTCwgbWV0YXBoeXNpY2FsLAorCQkJCSAgICAgIFBUNjRfUk9PVF9MRVZFTCwgZGlyZWN0LAogCQkJCSAgICAgIEFDQ19BTEwsIE5VTEwpOwogCQlyb290ID0gX19wYShzcC0+c3B0KTsKIAkJKytzcC0+cm9vdF9jb3VudDsKIAkJdmNwdS0+YXJjaC5tbXUucm9vdF9ocGEgPSByb290OwogCQlyZXR1cm47CiAJfQotCW1ldGFwaHlzaWNhbCA9ICFpc19wYWdpbmcodmNwdSk7CisJZGlyZWN0ID0gIWlzX3BhZ2luZyh2Y3B1KTsKIAlpZiAodGRwX2VuYWJsZWQpCi0JCW1ldGFwaHlzaWNhbCA9IDE7CisJCWRpcmVjdCA9IDE7CiAJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewogCQlocGFfdCByb290ID0gdmNwdS0+YXJjaC5tbXUucGFlX3Jvb3RbaV07CiAKQEAgLTE5OTYsNyArMTk4MSw3IEBACiAJCX0gZWxzZSBpZiAodmNwdS0+YXJjaC5tbXUucm9vdF9sZXZlbCA9PSAwKQogCQkJcm9vdF9nZm4gPSAwOwogCQlzcCA9IGt2bV9tbXVfZ2V0X3BhZ2UodmNwdSwgcm9vdF9nZm4sIGkgPDwgMzAsCi0JCQkJICAgICAgUFQzMl9ST09UX0xFVkVMLCBtZXRhcGh5c2ljYWwsCisJCQkJICAgICAgUFQzMl9ST09UX0xFVkVMLCBkaXJlY3QsCiAJCQkJICAgICAgQUNDX0FMTCwgTlVMTCk7CiAJCXJvb3QgPSBfX3BhKHNwLT5zcHQpOwogCQkrK3NwLT5yb290X2NvdW50OwpAQCAtMjI1MSwxNyArMjIzNiwyMyBAQAogCiBzdGF0aWMgaW50IGluaXRfa3ZtX3NvZnRtbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogeworCWludCByOworCiAJQVNTRVJUKHZjcHUpOwogCUFTU0VSVCghVkFMSURfUEFHRSh2Y3B1LT5hcmNoLm1tdS5yb290X2hwYSkpOwogCiAJaWYgKCFpc19wYWdpbmcodmNwdSkpCi0JCXJldHVybiBub25wYWdpbmdfaW5pdF9jb250ZXh0KHZjcHUpOworCQlyID0gbm9ucGFnaW5nX2luaXRfY29udGV4dCh2Y3B1KTsKIAllbHNlIGlmIChpc19sb25nX21vZGUodmNwdSkpCi0JCXJldHVybiBwYWdpbmc2NF9pbml0X2NvbnRleHQodmNwdSk7CisJCXIgPSBwYWdpbmc2NF9pbml0X2NvbnRleHQodmNwdSk7CiAJZWxzZSBpZiAoaXNfcGFlKHZjcHUpKQotCQlyZXR1cm4gcGFnaW5nMzJFX2luaXRfY29udGV4dCh2Y3B1KTsKKwkJciA9IHBhZ2luZzMyRV9pbml0X2NvbnRleHQodmNwdSk7CiAJZWxzZQotCQlyZXR1cm4gcGFnaW5nMzJfaW5pdF9jb250ZXh0KHZjcHUpOworCQlyID0gcGFnaW5nMzJfaW5pdF9jb250ZXh0KHZjcHUpOworCisJdmNwdS0+YXJjaC5tbXUuYmFzZV9yb2xlLmdsZXZlbHMgPSB2Y3B1LT5hcmNoLm1tdS5yb290X2xldmVsOworCisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgaW5pdF9rdm1fbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTI0OTIsNyArMjQ4Myw3IEBACiAJaW5kZXggPSBrdm1fcGFnZV90YWJsZV9oYXNoZm4oZ2ZuKTsKIAlidWNrZXQgPSAmdmNwdS0+a3ZtLT5hcmNoLm1tdV9wYWdlX2hhc2hbaW5kZXhdOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3AsIG5vZGUsIG4sIGJ1Y2tldCwgaGFzaF9saW5rKSB7Ci0JCWlmIChzcC0+Z2ZuICE9IGdmbiB8fCBzcC0+cm9sZS5tZXRhcGh5c2ljYWwgfHwgc3AtPnJvbGUuaW52YWxpZCkKKwkJaWYgKHNwLT5nZm4gIT0gZ2ZuIHx8IHNwLT5yb2xlLmRpcmVjdCB8fCBzcC0+cm9sZS5pbnZhbGlkKQogCQkJY29udGludWU7CiAJCXB0ZV9zaXplID0gc3AtPnJvbGUuZ2xldmVscyA9PSBQVDMyX1JPT1RfTEVWRUwgPyA0IDogODsKIAkJbWlzYWxpZ25lZCA9IChvZmZzZXQgXiAob2Zmc2V0ICsgYnl0ZXMgLSAxKSkgJiB+KHB0ZV9zaXplIC0gMSk7CkBAIC0zMTMwLDcgKzMxMjEsNyBAQAogCWdmbl90IGdmbjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc3AsICZ2Y3B1LT5rdm0tPmFyY2guYWN0aXZlX21tdV9wYWdlcywgbGluaykgewotCQlpZiAoc3AtPnJvbGUubWV0YXBoeXNpY2FsKQorCQlpZiAoc3AtPnJvbGUuZGlyZWN0KQogCQkJY29udGludWU7CiAKIAkJZ2ZuID0gdW5hbGlhc19nZm4odmNwdS0+a3ZtLCBzcC0+Z2ZuKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuaCBiL2FyY2gveDg2L2t2bS9tbXUuaAppbmRleCAyNThlNWQ1Li5lYWFiMjE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmgKKysrIGIvYXJjaC94ODYva3ZtL21tdS5oCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgaW5saW5lIGludCBpc19sb25nX21vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogI2lmZGVmIENPTkZJR19YODZfNjQKLQlyZXR1cm4gdmNwdS0+YXJjaC5zaGFkb3dfZWZlciAmIEVGRVJfTE1FOworCXJldHVybiB2Y3B1LT5hcmNoLnNoYWRvd19lZmVyICYgRUZFUl9MTUE7CiAjZWxzZQogCXJldHVybiAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IDlmZDc4YjYuLjZiZDcwMjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC0yNSw3ICsyNSw2IEBACiAjaWYgUFRUWVBFID09IDY0CiAJI2RlZmluZSBwdF9lbGVtZW50X3QgdTY0CiAJI2RlZmluZSBndWVzdF93YWxrZXIgZ3Vlc3Rfd2Fsa2VyNjQKLQkjZGVmaW5lIHNoYWRvd193YWxrZXIgc2hhZG93X3dhbGtlcjY0CiAJI2RlZmluZSBGTkFNRShuYW1lKSBwYWdpbmcjIzY0XyMjbmFtZQogCSNkZWZpbmUgUFRfQkFTRV9BRERSX01BU0sgUFQ2NF9CQVNFX0FERFJfTUFTSwogCSNkZWZpbmUgUFRfRElSX0JBU0VfQUREUl9NQVNLIFBUNjRfRElSX0JBU0VfQUREUl9NQVNLCkBAIC00Miw3ICs0MSw2IEBACiAjZWxpZiBQVFRZUEUgPT0gMzIKIAkjZGVmaW5lIHB0X2VsZW1lbnRfdCB1MzIKIAkjZGVmaW5lIGd1ZXN0X3dhbGtlciBndWVzdF93YWxrZXIzMgotCSNkZWZpbmUgc2hhZG93X3dhbGtlciBzaGFkb3dfd2Fsa2VyMzIKIAkjZGVmaW5lIEZOQU1FKG5hbWUpIHBhZ2luZyMjMzJfIyNuYW1lCiAJI2RlZmluZSBQVF9CQVNFX0FERFJfTUFTSyBQVDMyX0JBU0VfQUREUl9NQVNLCiAJI2RlZmluZSBQVF9ESVJfQkFTRV9BRERSX01BU0sgUFQzMl9ESVJfQkFTRV9BRERSX01BU0sKQEAgLTczLDE4ICs3MSw2IEBACiAJdTMyIGVycm9yX2NvZGU7CiB9OwogCi1zdHJ1Y3Qgc2hhZG93X3dhbGtlciB7Ci0Jc3RydWN0IGt2bV9zaGFkb3dfd2FsayB3YWxrZXI7Ci0Jc3RydWN0IGd1ZXN0X3dhbGtlciAqZ3Vlc3Rfd2Fsa2VyOwotCWludCB1c2VyX2ZhdWx0OwotCWludCB3cml0ZV9mYXVsdDsKLQlpbnQgbGFyZ2VwYWdlOwotCWludCAqcHR3cml0ZTsKLQlwZm5fdCBwZm47Ci0JdTY0ICpzcHRlcDsKLQlncGFfdCBwdGVfZ3BhOwotfTsKLQogc3RhdGljIGdmbl90IGdwdGVfdG9fZ2ZuKHB0X2VsZW1lbnRfdCBncHRlKQogewogCXJldHVybiAoZ3B0ZSAmIFBUX0JBU0VfQUREUl9NQVNLKSA+PiBQQUdFX1NISUZUOwpAQCAtMjgzLDkxICsyNjksNzkgQEAKIC8qCiAgKiBGZXRjaCBhIHNoYWRvdyBwdGUgZm9yIGEgc3BlY2lmaWMgbGV2ZWwgaW4gdGhlIHBhZ2luZyBoaWVyYXJjaHkuCiAgKi8KLXN0YXRpYyBpbnQgRk5BTUUoc2hhZG93X3dhbGtfZW50cnkpKHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKl9zdywKLQkJCQkgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgYWRkciwKLQkJCQkgICAgdTY0ICpzcHRlcCwgaW50IGxldmVsKQotewotCXN0cnVjdCBzaGFkb3dfd2Fsa2VyICpzdyA9Ci0JCWNvbnRhaW5lcl9vZihfc3csIHN0cnVjdCBzaGFkb3dfd2Fsa2VyLCB3YWxrZXIpOwotCXN0cnVjdCBndWVzdF93YWxrZXIgKmd3ID0gc3ctPmd1ZXN0X3dhbGtlcjsKLQl1bnNpZ25lZCBhY2Nlc3MgPSBndy0+cHRfYWNjZXNzOwotCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNoYWRvd19wYWdlOwotCXU2NCBzcHRlOwotCWludCBtZXRhcGh5c2ljYWw7Ci0JZ2ZuX3QgdGFibGVfZ2ZuOwotCWludCByOwotCXB0X2VsZW1lbnRfdCBjdXJyX3B0ZTsKLQotCWlmIChsZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMCi0JICAgIHx8IChzdy0+bGFyZ2VwYWdlICYmIGxldmVsID09IFBUX0RJUkVDVE9SWV9MRVZFTCkpIHsKLQkJbW11X3NldF9zcHRlKHZjcHUsIHNwdGVwLCBhY2Nlc3MsIGd3LT5wdGVfYWNjZXNzICYgYWNjZXNzLAotCQkJICAgICBzdy0+dXNlcl9mYXVsdCwgc3ctPndyaXRlX2ZhdWx0LAotCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9ESVJUWV9NQVNLLAotCQkJICAgICBzdy0+cHR3cml0ZSwgc3ctPmxhcmdlcGFnZSwKLQkJCSAgICAgZ3ctPnB0ZXNbZ3ctPmxldmVsLTFdICYgUFRfR0xPQkFMX01BU0ssCi0JCQkgICAgIGd3LT5nZm4sIHN3LT5wZm4sIGZhbHNlKTsKLQkJc3ctPnNwdGVwID0gc3B0ZXA7Ci0JCXJldHVybiAxOwotCX0KLQotCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSAmJiAhaXNfbGFyZ2VfcHRlKCpzcHRlcCkpCi0JCXJldHVybiAwOwotCi0JaWYgKGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSB7Ci0JCXNldF9zaGFkb3dfcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7Ci0JCWt2bV9mbHVzaF9yZW1vdGVfdGxicyh2Y3B1LT5rdm0pOwotCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNwdGVwKTsKLQl9Ci0KLQlpZiAobGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMICYmIGd3LT5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpIHsKLQkJbWV0YXBoeXNpY2FsID0gMTsKLQkJaWYgKCFpc19kaXJ0eV9wdGUoZ3ctPnB0ZXNbbGV2ZWwgLSAxXSkpCi0JCQlhY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOwotCQl0YWJsZV9nZm4gPSBncHRlX3RvX2dmbihndy0+cHRlc1tsZXZlbCAtIDFdKTsKLQl9IGVsc2UgewotCQltZXRhcGh5c2ljYWwgPSAwOwotCQl0YWJsZV9nZm4gPSBndy0+dGFibGVfZ2ZuW2xldmVsIC0gMl07Ci0JfQotCXNoYWRvd19wYWdlID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCB0YWJsZV9nZm4sIChndmFfdClhZGRyLCBsZXZlbC0xLAotCQkJCSAgICAgICBtZXRhcGh5c2ljYWwsIGFjY2Vzcywgc3B0ZXApOwotCWlmICghbWV0YXBoeXNpY2FsKSB7Ci0JCXIgPSBrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCBndy0+cHRlX2dwYVtsZXZlbCAtIDJdLAotCQkJCQkgICZjdXJyX3B0ZSwgc2l6ZW9mKGN1cnJfcHRlKSk7Ci0JCWlmIChyIHx8IGN1cnJfcHRlICE9IGd3LT5wdGVzW2xldmVsIC0gMl0pIHsKLQkJCWt2bV9tbXVfcHV0X3BhZ2Uoc2hhZG93X3BhZ2UsIHNwdGVwKTsKLQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihzdy0+cGZuKTsKLQkJCXN3LT5zcHRlcCA9IE5VTEw7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCX0KLQotCXNwdGUgPSBfX3BhKHNoYWRvd19wYWdlLT5zcHQpIHwgUFRfUFJFU0VOVF9NQVNLIHwgUFRfQUNDRVNTRURfTUFTSwotCQl8IFBUX1dSSVRBQkxFX01BU0sgfCBQVF9VU0VSX01BU0s7Ci0JKnNwdGVwID0gc3B0ZTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHU2NCAqRk5BTUUoZmV0Y2gpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgYWRkciwKLQkJCSBzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyICpndWVzdF93YWxrZXIsCisJCQkgc3RydWN0IGd1ZXN0X3dhbGtlciAqZ3csCiAJCQkgaW50IHVzZXJfZmF1bHQsIGludCB3cml0ZV9mYXVsdCwgaW50IGxhcmdlcGFnZSwKIAkJCSBpbnQgKnB0d3JpdGUsIHBmbl90IHBmbikKIHsKLQlzdHJ1Y3Qgc2hhZG93X3dhbGtlciB3YWxrZXIgPSB7Ci0JCS53YWxrZXIgPSB7IC5lbnRyeSA9IEZOQU1FKHNoYWRvd193YWxrX2VudHJ5KSwgfSwKLQkJLmd1ZXN0X3dhbGtlciA9IGd1ZXN0X3dhbGtlciwKLQkJLnVzZXJfZmF1bHQgPSB1c2VyX2ZhdWx0LAotCQkud3JpdGVfZmF1bHQgPSB3cml0ZV9mYXVsdCwKLQkJLmxhcmdlcGFnZSA9IGxhcmdlcGFnZSwKLQkJLnB0d3JpdGUgPSBwdHdyaXRlLAotCQkucGZuID0gcGZuLAotCX07CisJdW5zaWduZWQgYWNjZXNzID0gZ3ctPnB0X2FjY2VzczsKKwlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzaGFkb3dfcGFnZTsKKwl1NjQgc3B0ZSwgKnNwdGVwOworCWludCBkaXJlY3Q7CisJZ2ZuX3QgdGFibGVfZ2ZuOworCWludCByOworCWludCBsZXZlbDsKKwlwdF9lbGVtZW50X3QgY3Vycl9wdGU7CisJc3RydWN0IGt2bV9zaGFkb3dfd2Fsa19pdGVyYXRvciBpdGVyYXRvcjsKIAotCWlmICghaXNfcHJlc2VudF9wdGUoZ3Vlc3Rfd2Fsa2VyLT5wdGVzW2d1ZXN0X3dhbGtlci0+bGV2ZWwgLSAxXSkpCisJaWYgKCFpc19wcmVzZW50X3B0ZShndy0+cHRlc1tndy0+bGV2ZWwgLSAxXSkpCiAJCXJldHVybiBOVUxMOwogCi0Jd2Fsa19zaGFkb3coJndhbGtlci53YWxrZXIsIHZjcHUsIGFkZHIpOworCWZvcl9lYWNoX3NoYWRvd19lbnRyeSh2Y3B1LCBhZGRyLCBpdGVyYXRvcikgeworCQlsZXZlbCA9IGl0ZXJhdG9yLmxldmVsOworCQlzcHRlcCA9IGl0ZXJhdG9yLnNwdGVwOworCQlpZiAobGV2ZWwgPT0gUFRfUEFHRV9UQUJMRV9MRVZFTAorCQkgICAgfHwgKGxhcmdlcGFnZSAmJiBsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpKSB7CisJCQltbXVfc2V0X3NwdGUodmNwdSwgc3B0ZXAsIGFjY2VzcywKKwkJCQkgICAgIGd3LT5wdGVfYWNjZXNzICYgYWNjZXNzLAorCQkJCSAgICAgdXNlcl9mYXVsdCwgd3JpdGVfZmF1bHQsCisJCQkJICAgICBndy0+cHRlc1tndy0+bGV2ZWwtMV0gJiBQVF9ESVJUWV9NQVNLLAorCQkJCSAgICAgcHR3cml0ZSwgbGFyZ2VwYWdlLAorCQkJCSAgICAgZ3ctPnB0ZXNbZ3ctPmxldmVsLTFdICYgUFRfR0xPQkFMX01BU0ssCisJCQkJICAgICBndy0+Z2ZuLCBwZm4sIGZhbHNlKTsKKwkJCWJyZWFrOworCQl9CiAKLQlyZXR1cm4gd2Fsa2VyLnNwdGVwOworCQlpZiAoaXNfc2hhZG93X3ByZXNlbnRfcHRlKCpzcHRlcCkgJiYgIWlzX2xhcmdlX3B0ZSgqc3B0ZXApKQorCQkJY29udGludWU7CisKKwkJaWYgKGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSB7CisJCQlybWFwX3JlbW92ZSh2Y3B1LT5rdm0sIHNwdGVwKTsKKwkJCXNldF9zaGFkb3dfcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CisJCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKKwkJfQorCisJCWlmIChsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwKKwkJICAgICYmIGd3LT5sZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpIHsKKwkJCWRpcmVjdCA9IDE7CisJCQlpZiAoIWlzX2RpcnR5X3B0ZShndy0+cHRlc1tsZXZlbCAtIDFdKSkKKwkJCQlhY2Nlc3MgJj0gfkFDQ19XUklURV9NQVNLOworCQkJdGFibGVfZ2ZuID0gZ3B0ZV90b19nZm4oZ3ctPnB0ZXNbbGV2ZWwgLSAxXSk7CisJCX0gZWxzZSB7CisJCQlkaXJlY3QgPSAwOworCQkJdGFibGVfZ2ZuID0gZ3ctPnRhYmxlX2dmbltsZXZlbCAtIDJdOworCQl9CisJCXNoYWRvd19wYWdlID0ga3ZtX21tdV9nZXRfcGFnZSh2Y3B1LCB0YWJsZV9nZm4sIGFkZHIsIGxldmVsLTEsCisJCQkJCSAgICAgICBkaXJlY3QsIGFjY2Vzcywgc3B0ZXApOworCQlpZiAoIWRpcmVjdCkgeworCQkJciA9IGt2bV9yZWFkX2d1ZXN0X2F0b21pYyh2Y3B1LT5rdm0sCisJCQkJCQkgIGd3LT5wdGVfZ3BhW2xldmVsIC0gMl0sCisJCQkJCQkgICZjdXJyX3B0ZSwgc2l6ZW9mKGN1cnJfcHRlKSk7CisJCQlpZiAociB8fCBjdXJyX3B0ZSAhPSBndy0+cHRlc1tsZXZlbCAtIDJdKSB7CisJCQkJa3ZtX21tdV9wdXRfcGFnZShzaGFkb3dfcGFnZSwgc3B0ZXApOworCQkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOworCQkJCXNwdGVwID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXNwdGUgPSBfX3BhKHNoYWRvd19wYWdlLT5zcHQpCisJCQl8IFBUX1BSRVNFTlRfTUFTSyB8IFBUX0FDQ0VTU0VEX01BU0sKKwkJCXwgUFRfV1JJVEFCTEVfTUFTSyB8IFBUX1VTRVJfTUFTSzsKKwkJKnNwdGVwID0gc3B0ZTsKKwl9CisKKwlyZXR1cm4gc3B0ZXA7CiB9CiAKIC8qCkBAIC00NjUsNTQgKzQzOSw1NiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IEZOQU1FKHNoYWRvd19pbnZscGdfZW50cnkpKHN0cnVjdCBrdm1fc2hhZG93X3dhbGsgKl9zdywKLQkJCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBhZGRyLAotCQkJCSAgICAgIHU2NCAqc3B0ZXAsIGludCBsZXZlbCkKLXsKLQlzdHJ1Y3Qgc2hhZG93X3dhbGtlciAqc3cgPQotCQljb250YWluZXJfb2YoX3N3LCBzdHJ1Y3Qgc2hhZG93X3dhbGtlciwgd2Fsa2VyKTsKLQotCS8qIEZJWE1FOiBwcm9wZXJseSBoYW5kbGUgaW52bHBnIG9uIGxhcmdlIGd1ZXN0IHBhZ2VzICovCi0JaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwgfHwKLQkgICAgKChsZXZlbCA9PSBQVF9ESVJFQ1RPUllfTEVWRUwpICYmIGlzX2xhcmdlX3B0ZSgqc3B0ZXApKSkgewotCQlzdHJ1Y3Qga3ZtX21tdV9wYWdlICpzcCA9IHBhZ2VfaGVhZGVyKF9fcGEoc3B0ZXApKTsKLQotCQlzdy0+cHRlX2dwYSA9IChzcC0+Z2ZuIDw8IFBBR0VfU0hJRlQpOwotCQlzdy0+cHRlX2dwYSArPSAoc3B0ZXAgLSBzcC0+c3B0KSAqIHNpemVvZihwdF9lbGVtZW50X3QpOwotCi0JCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSkgewotCQkJcm1hcF9yZW1vdmUodmNwdS0+a3ZtLCBzcHRlcCk7Ci0JCQlpZiAoaXNfbGFyZ2VfcHRlKCpzcHRlcCkpCi0JCQkJLS12Y3B1LT5rdm0tPnN0YXQubHBhZ2VzOwotCQl9Ci0JCXNldF9zaGFkb3dfcHRlKHNwdGVwLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7Ci0JCXJldHVybiAxOwotCX0KLQlpZiAoIWlzX3NoYWRvd19wcmVzZW50X3B0ZSgqc3B0ZXApKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgRk5BTUUoaW52bHBnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSkKIHsKKwlzdHJ1Y3Qga3ZtX3NoYWRvd193YWxrX2l0ZXJhdG9yIGl0ZXJhdG9yOwogCXB0X2VsZW1lbnRfdCBncHRlOwotCXN0cnVjdCBzaGFkb3dfd2Fsa2VyIHdhbGtlciA9IHsKLQkJLndhbGtlciA9IHsgLmVudHJ5ID0gRk5BTUUoc2hhZG93X2ludmxwZ19lbnRyeSksIH0sCi0JCS5wdGVfZ3BhID0gLTEsCi0JfTsKKwlncGFfdCBwdGVfZ3BhID0gLTE7CisJaW50IGxldmVsOworCXU2NCAqc3B0ZXA7CisJaW50IG5lZWRfZmx1c2ggPSAwOwogCiAJc3Bpbl9sb2NrKCZ2Y3B1LT5rdm0tPm1tdV9sb2NrKTsKLQl3YWxrX3NoYWRvdygmd2Fsa2VyLndhbGtlciwgdmNwdSwgZ3ZhKTsKKworCWZvcl9lYWNoX3NoYWRvd19lbnRyeSh2Y3B1LCBndmEsIGl0ZXJhdG9yKSB7CisJCWxldmVsID0gaXRlcmF0b3IubGV2ZWw7CisJCXNwdGVwID0gaXRlcmF0b3Iuc3B0ZXA7CisKKwkJLyogRklYTUU6IHByb3Blcmx5IGhhbmRsZSBpbnZscGcgb24gbGFyZ2UgZ3Vlc3QgcGFnZXMgKi8KKwkJaWYgKGxldmVsID09IFBUX1BBR0VfVEFCTEVfTEVWRUwgfHwKKwkJICAgICgobGV2ZWwgPT0gUFRfRElSRUNUT1JZX0xFVkVMKSAmJiBpc19sYXJnZV9wdGUoKnNwdGVwKSkpIHsKKwkJCXN0cnVjdCBrdm1fbW11X3BhZ2UgKnNwID0gcGFnZV9oZWFkZXIoX19wYShzcHRlcCkpOworCisJCQlwdGVfZ3BhID0gKHNwLT5nZm4gPDwgUEFHRV9TSElGVCk7CisJCQlwdGVfZ3BhICs9IChzcHRlcCAtIHNwLT5zcHQpICogc2l6ZW9mKHB0X2VsZW1lbnRfdCk7CisKKwkJCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSkgeworCQkJCXJtYXBfcmVtb3ZlKHZjcHUtPmt2bSwgc3B0ZXApOworCQkJCWlmIChpc19sYXJnZV9wdGUoKnNwdGVwKSkKKwkJCQkJLS12Y3B1LT5rdm0tPnN0YXQubHBhZ2VzOworCQkJCW5lZWRfZmx1c2ggPSAxOworCQkJfQorCQkJc2V0X3NoYWRvd19wdGUoc3B0ZXAsIHNoYWRvd190cmFwX25vbnByZXNlbnRfcHRlKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKCFpc19zaGFkb3dfcHJlc2VudF9wdGUoKnNwdGVwKSkKKwkJCWJyZWFrOworCX0KKworCWlmIChuZWVkX2ZsdXNoKQorCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnModmNwdS0+a3ZtKTsKIAlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7Ci0JaWYgKHdhbGtlci5wdGVfZ3BhID09IC0xKQorCisJaWYgKHB0ZV9ncGEgPT0gLTEpCiAJCXJldHVybjsKLQlpZiAoa3ZtX3JlYWRfZ3Vlc3RfYXRvbWljKHZjcHUtPmt2bSwgd2Fsa2VyLnB0ZV9ncGEsICZncHRlLAorCWlmIChrdm1fcmVhZF9ndWVzdF9hdG9taWModmNwdS0+a3ZtLCBwdGVfZ3BhLCAmZ3B0ZSwKIAkJCQkgIHNpemVvZihwdF9lbGVtZW50X3QpKSkKIAkJcmV0dXJuOwogCWlmIChpc19wcmVzZW50X3B0ZShncHRlKSAmJiAoZ3B0ZSAmIFBUX0FDQ0VTU0VEX01BU0spKSB7CiAJCWlmIChtbXVfdG9wdXBfbWVtb3J5X2NhY2hlcyh2Y3B1KSkKIAkJCXJldHVybjsKLQkJa3ZtX21tdV9wdGVfd3JpdGUodmNwdSwgd2Fsa2VyLnB0ZV9ncGEsIChjb25zdCB1OCAqKSZncHRlLAorCQlrdm1fbW11X3B0ZV93cml0ZSh2Y3B1LCBwdGVfZ3BhLCAoY29uc3QgdTggKikmZ3B0ZSwKIAkJCQkgIHNpemVvZihwdF9lbGVtZW50X3QpLCAwKTsKIAl9CiB9CkBAIC01NDAsNyArNTE2LDcgQEAKIAlwdF9lbGVtZW50X3QgcHRbMjU2IC8gc2l6ZW9mKHB0X2VsZW1lbnRfdCldOwogCWdwYV90IHB0ZV9ncGE7CiAKLQlpZiAoc3AtPnJvbGUubWV0YXBoeXNpY2FsCisJaWYgKHNwLT5yb2xlLmRpcmVjdAogCSAgICB8fCAoUFRUWVBFID09IDMyICYmIHNwLT5yb2xlLmxldmVsID4gUFRfUEFHRV9UQUJMRV9MRVZFTCkpIHsKIAkJbm9ucGFnaW5nX3ByZWZldGNoX3BhZ2UodmNwdSwgc3ApOwogCQlyZXR1cm47CkBAIC02MTksNyArNTk1LDYgQEAKIAogI3VuZGVmIHB0X2VsZW1lbnRfdAogI3VuZGVmIGd1ZXN0X3dhbGtlcgotI3VuZGVmIHNoYWRvd193YWxrZXIKICN1bmRlZiBGTkFNRQogI3VuZGVmIFBUX0JBU0VfQUREUl9NQVNLCiAjdW5kZWYgUFRfSU5ERVgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCBhOWU3NjllLi4xODIxYzIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC0zOCw5ICszOCw2IEBACiAjZGVmaW5lIElPUE1fQUxMT0NfT1JERVIgMgogI2RlZmluZSBNU1JQTV9BTExPQ19PUkRFUiAxCiAKLSNkZWZpbmUgRFI3X0dEX01BU0sgKDEgPDwgMTMpCi0jZGVmaW5lIERSNl9CRF9NQVNLICgxIDw8IDEzKQotCiAjZGVmaW5lIFNFR19UWVBFX0xEVCAyCiAjZGVmaW5lIFNFR19UWVBFX0JVU1lfVFNTMTYgMwogCkBAIC01MCw2ICs0NywxNSBAQAogCiAjZGVmaW5lIERFQlVHQ1RMX1JFU0VSVkVEX0JJVFMgKH4oMHgzZlVMTCkpCiAKKy8qIFR1cm4gb24gdG8gZ2V0IGRlYnVnZ2luZyBvdXRwdXQqLworLyogI2RlZmluZSBORVNURURfREVCVUcgKi8KKworI2lmZGVmIE5FU1RFRF9ERUJVRworI2RlZmluZSBuc3ZtX3ByaW50ayhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0lORk8gZm10LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgbnN2bV9wcmludGsoZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSgwKQorI2VuZGlmCisKIC8qIGVuYWJsZSBOUFQgZm9yIEFNRDY0IGFuZCBYODYgd2l0aCBQQUUgKi8KICNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl9QQUUpCiBzdGF0aWMgYm9vbCBucHRfZW5hYmxlZCA9IHRydWU7CkBAIC02MCwxNCArNjYsMjkgQEAKIAogbW9kdWxlX3BhcmFtKG5wdCwgaW50LCBTX0lSVUdPKTsKIAorc3RhdGljIGludCBuZXN0ZWQgPSAwOworbW9kdWxlX3BhcmFtKG5lc3RlZCwgaW50LCBTX0lSVUdPKTsKKwogc3RhdGljIHZvaWQga3ZtX3JlcHV0X2lycShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSk7CiBzdGF0aWMgdm9pZCBzdm1fZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGJvb2wga3ZtX292ZXJyaWRlKTsKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pOworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3Ztc2F2ZShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdm9pZCAqbmVzdGVkX3ZtY2IsCisJCQkgICAgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSk7CitzdGF0aWMgaW50IG5lc3RlZF9zdm1fY2hlY2tfZXhjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB1bnNpZ25lZCBuciwKKwkJCQkgICAgICBib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSk7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZjcHVfc3ZtICp0b19zdm0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXJldHVybiBjb250YWluZXJfb2YodmNwdSwgc3RydWN0IHZjcHVfc3ZtLCB2Y3B1KTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGlzX25lc3RlZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSkKK3sKKwlyZXR1cm4gc3ZtLT5uZXN0ZWRfdm1jYjsKK30KKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgaW9wbV9iYXNlOwogCiBzdHJ1Y3Qga3ZtX2xkdHRzc19kZXNjIHsKQEAgLTE1NywzMiArMTc4LDYgQEAKIAlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlY3IyIiA6OiAiciIgKHZhbCkpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9kcjYodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGRyNjsKLQotCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyNiwgJTAiIDogIj1yIiAoZHI2KSk7Ci0JcmV0dXJuIGRyNjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2RyNih1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHI2IiA6OiAiciIgKHZhbCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9kcjcodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGRyNzsKLQotCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyNywgJTAiIDogIj1yIiAoZHI3KSk7Ci0JcmV0dXJuIGRyNzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2RyNyh1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJTAsICUlZHI3IiA6OiAiciIgKHZhbCkpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZm9yY2VfbmV3X2FzaWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXRvX3N2bSh2Y3B1KS0+YXNpZF9nZW5lcmF0aW9uLS07CkBAIC0xOTgsNyArMTkzLDcgQEAKIAlpZiAoIW5wdF9lbmFibGVkICYmICEoZWZlciAmIEVGRVJfTE1BKSkKIAkJZWZlciAmPSB+RUZFUl9MTUU7CiAKLQl0b19zdm0odmNwdSktPnZtY2ItPnNhdmUuZWZlciA9IGVmZXIgfCBNU1JfRUZFUl9TVk1FX01BU0s7CisJdG9fc3ZtKHZjcHUpLT52bWNiLT5zYXZlLmVmZXIgPSBlZmVyIHwgRUZFUl9TVk1FOwogCXZjcHUtPmFyY2guc2hhZG93X2VmZXIgPSBlZmVyOwogfQogCkBAIC0yMDcsNiArMjAyLDExIEBACiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKKwkvKiBJZiB3ZSBhcmUgd2l0aGluIGEgbmVzdGVkIFZNIHdlJ2QgYmV0dGVyICNWTUVYSVQgYW5kIGxldCB0aGUKKwkgICBndWVzdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbiAqLworCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX2V4Y2VwdGlvbihzdm0sIG5yLCBoYXNfZXJyb3JfY29kZSwgZXJyb3JfY29kZSkpCisJCXJldHVybjsKKwogCXN2bS0+dm1jYi0+Y29udHJvbC5ldmVudF9pbmogPSBucgogCQl8IFNWTV9FVlRJTkpfVkFMSUQKIAkJfCAoaGFzX2Vycm9yX2NvZGUgPyBTVk1fRVZUSU5KX1ZBTElEX0VSUiA6IDApCkBAIC0yNDIsNyArMjQyLDcgQEAKIAlrdm1fcmlwX3dyaXRlKHZjcHUsIHN2bS0+bmV4dF9yaXApOwogCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfc3RhdGUgJj0gflNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0s7CiAKLQl2Y3B1LT5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiA9IDE7CisJdmNwdS0+YXJjaC5pbnRlcnJ1cHRfd2luZG93X29wZW4gPSAoc3ZtLT52Y3B1LmFyY2guaGZsYWdzICYgSEZfR0lGX01BU0spOwogfQogCiBzdGF0aWMgaW50IGhhc19zdm0odm9pZCkKQEAgLTI1MCw3ICsyNTAsNyBAQAogCWNvbnN0IGNoYXIgKm1zZzsKIAogCWlmICghY3B1X2hhc19zdm0oJm1zZykpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaGFzX3N2bjogJXNcbiIsIG1zZyk7CisJCXByaW50ayhLRVJOX0lORk8gImhhc19zdm06ICVzXG4iLCBtc2cpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI5Miw3ICsyOTIsNyBAQAogCXN2bV9kYXRhLT50c3NfZGVzYyA9IChzdHJ1Y3Qga3ZtX2xkdHRzc19kZXNjICopKGdkdCArIEdEVF9FTlRSWV9UU1MpOwogCiAJcmRtc3JsKE1TUl9FRkVSLCBlZmVyKTsKLQl3cm1zcmwoTVNSX0VGRVIsIGVmZXIgfCBNU1JfRUZFUl9TVk1FX01BU0spOworCXdybXNybChNU1JfRUZFUiwgZWZlciB8IEVGRVJfU1ZNRSk7CiAKIAl3cm1zcmwoTVNSX1ZNX0hTQVZFX1BBLAogCSAgICAgICBwYWdlX3RvX3Bmbihzdm1fZGF0YS0+c2F2ZV9hcmVhKSA8PCBQQUdFX1NISUZUKTsKQEAgLTQxNyw2ICs0MTcsMTQgQEAKIAlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05YKSkKIAkJa3ZtX2VuYWJsZV9lZmVyX2JpdHMoRUZFUl9OWCk7CiAKKwlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0ZYU1JfT1BUKSkKKwkJa3ZtX2VuYWJsZV9lZmVyX2JpdHMoRUZFUl9GRlhTUik7CisKKwlpZiAobmVzdGVkKSB7CisJCXByaW50ayhLRVJOX0lORk8gImt2bTogTmVzdGVkIFZpcnR1YWxpemF0aW9uIGVuYWJsZWRcbiIpOworCQlrdm1fZW5hYmxlX2VmZXJfYml0cyhFRkVSX1NWTUUpOworCX0KKwogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCXIgPSBzdm1fY3B1X2luaXQoY3B1KTsKIAkJaWYgKHIpCkBAIC01NTksNyArNTY3LDcgQEAKIAlpbml0X3N5c19zZWcoJnNhdmUtPmxkdHIsIFNFR19UWVBFX0xEVCk7CiAJaW5pdF9zeXNfc2VnKCZzYXZlLT50ciwgU0VHX1RZUEVfQlVTWV9UU1MxNik7CiAKLQlzYXZlLT5lZmVyID0gTVNSX0VGRVJfU1ZNRV9NQVNLOworCXNhdmUtPmVmZXIgPSBFRkVSX1NWTUU7CiAJc2F2ZS0+ZHI2ID0gMHhmZmZmMGZmMDsKIAlzYXZlLT5kcjcgPSAweDQwMDsKIAlzYXZlLT5yZmxhZ3MgPSAyOwpAQCAtNTkxLDYgKzU5OSw5IEBACiAJCXNhdmUtPmNyNCA9IDA7CiAJfQogCWZvcmNlX25ld19hc2lkKCZzdm0tPnZjcHUpOworCisJc3ZtLT5uZXN0ZWRfdm1jYiA9IDA7CisJc3ZtLT52Y3B1LmFyY2guaGZsYWdzID0gSEZfR0lGX01BU0s7CiB9CiAKIHN0YXRpYyBpbnQgc3ZtX3ZjcHVfcmVzZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtNjE1LDYgKzYyNiw4IEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm07CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IHBhZ2UgKm1zcnBtX3BhZ2VzOworCXN0cnVjdCBwYWdlICpoc2F2ZV9wYWdlOworCXN0cnVjdCBwYWdlICpuZXN0ZWRfbXNycG1fcGFnZXM7CiAJaW50IGVycjsKIAogCXN2bSA9IGttZW1fY2FjaGVfemFsbG9jKGt2bV92Y3B1X2NhY2hlLCBHRlBfS0VSTkVMKTsKQEAgLTYzNywxNCArNjUwLDI1IEBACiAJbXNycG1fcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLCBNU1JQTV9BTExPQ19PUkRFUik7CiAJaWYgKCFtc3JwbV9wYWdlcykKIAkJZ290byB1bmluaXQ7CisKKwluZXN0ZWRfbXNycG1fcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMLCBNU1JQTV9BTExPQ19PUkRFUik7CisJaWYgKCFuZXN0ZWRfbXNycG1fcGFnZXMpCisJCWdvdG8gdW5pbml0OworCiAJc3ZtLT5tc3JwbSA9IHBhZ2VfYWRkcmVzcyhtc3JwbV9wYWdlcyk7CiAJc3ZtX3ZjcHVfaW5pdF9tc3JwbShzdm0tPm1zcnBtKTsKIAorCWhzYXZlX3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCWlmICghaHNhdmVfcGFnZSkKKwkJZ290byB1bmluaXQ7CisJc3ZtLT5oc2F2ZSA9IHBhZ2VfYWRkcmVzcyhoc2F2ZV9wYWdlKTsKKworCXN2bS0+bmVzdGVkX21zcnBtID0gcGFnZV9hZGRyZXNzKG5lc3RlZF9tc3JwbV9wYWdlcyk7CisKIAlzdm0tPnZtY2IgPSBwYWdlX2FkZHJlc3MocGFnZSk7CiAJY2xlYXJfcGFnZShzdm0tPnZtY2IpOwogCXN2bS0+dm1jYl9wYSA9IHBhZ2VfdG9fcGZuKHBhZ2UpIDw8IFBBR0VfU0hJRlQ7CiAJc3ZtLT5hc2lkX2dlbmVyYXRpb24gPSAwOwotCW1lbXNldChzdm0tPmRiX3JlZ3MsIDAsIHNpemVvZihzdm0tPmRiX3JlZ3MpKTsKIAlpbml0X3ZtY2Ioc3ZtKTsKIAogCWZ4X2luaXQoJnN2bS0+dmNwdSk7CkBAIC02NjksNiArNjkzLDggQEAKIAogCV9fZnJlZV9wYWdlKHBmbl90b19wYWdlKHN2bS0+dm1jYl9wYSA+PiBQQUdFX1NISUZUKSk7CiAJX19mcmVlX3BhZ2VzKHZpcnRfdG9fcGFnZShzdm0tPm1zcnBtKSwgTVNSUE1fQUxMT0NfT1JERVIpOworCV9fZnJlZV9wYWdlKHZpcnRfdG9fcGFnZShzdm0tPmhzYXZlKSk7CisJX19mcmVlX3BhZ2VzKHZpcnRfdG9fcGFnZShzdm0tPm5lc3RlZF9tc3JwbSksIE1TUlBNX0FMTE9DX09SREVSKTsKIAlrdm1fdmNwdV91bmluaXQodmNwdSk7CiAJa21lbV9jYWNoZV9mcmVlKGt2bV92Y3B1X2NhY2hlLCBzdm0pOwogfQpAQCAtNzE4LDYgKzc0NCwxNiBAQAogCXRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZS5yZmxhZ3MgPSByZmxhZ3M7CiB9CiAKK3N0YXRpYyB2b2lkIHN2bV9zZXRfdmludHIoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCB8PSAxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUjsKK30KKworc3RhdGljIHZvaWQgc3ZtX2NsZWFyX3ZpbnRyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgJj0gfigxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUik7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgdm1jYl9zZWcgKnN2bV9zZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKQogewogCXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZSA9ICZ0b19zdm0odmNwdSktPnZtY2ItPnNhdmU7CkBAIC03NjAsMjAgKzc5NiwzNyBAQAogCXZhci0+ZGIgPSAocy0+YXR0cmliID4+IFNWTV9TRUxFQ1RPUl9EQl9TSElGVCkgJiAxOwogCXZhci0+ZyA9IChzLT5hdHRyaWIgPj4gU1ZNX1NFTEVDVE9SX0dfU0hJRlQpICYgMTsKIAotCS8qCi0JICogU1ZNIGFsd2F5cyBzdG9yZXMgMCBmb3IgdGhlICdHJyBiaXQgaW4gdGhlIENTIHNlbGVjdG9yIGluCi0JICogdGhlIFZNQ0Igb24gYSBWTUVYSVQuIFRoaXMgaHVydHMgY3Jvc3MtdmVuZG9yIG1pZ3JhdGlvbjoKLQkgKiBJbnRlbCdzIFZNRU5UUlkgaGFzIGEgY2hlY2sgb24gdGhlICdHJyBiaXQuCi0JICovCi0JaWYgKHNlZyA9PSBWQ1BVX1NSRUdfQ1MpCisJc3dpdGNoIChzZWcpIHsKKwljYXNlIFZDUFVfU1JFR19DUzoKKwkJLyoKKwkJICogU1ZNIGFsd2F5cyBzdG9yZXMgMCBmb3IgdGhlICdHJyBiaXQgaW4gdGhlIENTIHNlbGVjdG9yIGluCisJCSAqIHRoZSBWTUNCIG9uIGEgVk1FWElULiBUaGlzIGh1cnRzIGNyb3NzLXZlbmRvciBtaWdyYXRpb246CisJCSAqIEludGVsJ3MgVk1FTlRSWSBoYXMgYSBjaGVjayBvbiB0aGUgJ0cnIGJpdC4KKwkJICovCiAJCXZhci0+ZyA9IHMtPmxpbWl0ID4gMHhmZmZmZjsKLQotCS8qCi0JICogV29yayBhcm91bmQgYSBidWcgd2hlcmUgdGhlIGJ1c3kgZmxhZyBpbiB0aGUgdHIgc2VsZWN0b3IKLQkgKiBpc24ndCBleHBvc2VkCi0JICovCi0JaWYgKHNlZyA9PSBWQ1BVX1NSRUdfVFIpCisJCWJyZWFrOworCWNhc2UgVkNQVV9TUkVHX1RSOgorCQkvKgorCQkgKiBXb3JrIGFyb3VuZCBhIGJ1ZyB3aGVyZSB0aGUgYnVzeSBmbGFnIGluIHRoZSB0ciBzZWxlY3RvcgorCQkgKiBpc24ndCBleHBvc2VkCisJCSAqLwogCQl2YXItPnR5cGUgfD0gMHgyOworCQlicmVhazsKKwljYXNlIFZDUFVfU1JFR19EUzoKKwljYXNlIFZDUFVfU1JFR19FUzoKKwljYXNlIFZDUFVfU1JFR19GUzoKKwljYXNlIFZDUFVfU1JFR19HUzoKKwkJLyoKKwkJICogVGhlIGFjY2Vzc2VkIGJpdCBtdXN0IGFsd2F5cyBiZSBzZXQgaW4gdGhlIHNlZ21lbnQKKwkJICogZGVzY3JpcHRvciBjYWNoZSwgYWx0aG91Z2ggaXQgY2FuIGJlIGNsZWFyZWQgaW4gdGhlCisJCSAqIGRlc2NyaXB0b3IsIHRoZSBjYWNoZWQgYml0IGFsd2F5cyByZW1haW5zIGF0IDEuIFNpbmNlCisJCSAqIEludGVsIGhhcyBhIGNoZWNrIG9uIHRoaXMsIHNldCBpdCBoZXJlIHRvIHN1cHBvcnQKKwkJICogY3Jvc3MtdmVuZG9yIG1pZ3JhdGlvbi4KKwkJICovCisJCWlmICghdmFyLT51bnVzYWJsZSkKKwkJCXZhci0+dHlwZSB8PSAweDE7CisJCWJyZWFrOworCX0KIAogCXZhci0+dW51c2FibGUgPSAhdmFyLT5wcmVzZW50OwogfQpAQCAtOTA1LDkgKzk1OCwzNyBAQAogCiB9CiAKLXN0YXRpYyBpbnQgc3ZtX2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKQorc3RhdGljIGludCBzdm1fZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpCiB7Ci0JcmV0dXJuIC1FT1BOT1RTVVBQOworCWludCBvbGRfZGVidWcgPSB2Y3B1LT5ndWVzdF9kZWJ1ZzsKKwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKKworCXZjcHUtPmd1ZXN0X2RlYnVnID0gZGJnLT5jb250cm9sOworCisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zICY9CisJCX4oKDEgPDwgREJfVkVDVE9SKSB8ICgxIDw8IEJQX1ZFQ1RPUikpOworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19FTkFCTEUpIHsKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYKKwkJICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKQorCQkJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9CisJCQkJMSA8PCBEQl9WRUNUT1I7CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfU1dfQlApCisJCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0KKwkJCQkxIDw8IEJQX1ZFQ1RPUjsKKwl9IGVsc2UKKwkJdmNwdS0+Z3Vlc3RfZGVidWcgPSAwOworCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkKKwkJc3ZtLT52bWNiLT5zYXZlLmRyNyA9IGRiZy0+YXJjaC5kZWJ1Z3JlZ1s3XTsKKwllbHNlCisJCXN2bS0+dm1jYi0+c2F2ZS5kcjcgPSB2Y3B1LT5hcmNoLmRyNzsKKworCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQorCQlzdm0tPnZtY2ItPnNhdmUucmZsYWdzIHw9IFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1JGOworCWVsc2UgaWYgKG9sZF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQorCQlzdm0tPnZtY2ItPnNhdmUucmZsYWdzICY9IH4oWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfUkYpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc3ZtX2dldF9pcnEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtOTQ5LDcgKzEwMzAsMjkgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3ZtX2dldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkcikKIHsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IHRvX3N2bSh2Y3B1KS0+ZGJfcmVnc1tkcl07CisJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlzd2l0Y2ggKGRyKSB7CisJY2FzZSAwIC4uLiAzOgorCQl2YWwgPSB2Y3B1LT5hcmNoLmRiW2RyXTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKQorCQkJdmFsID0gdmNwdS0+YXJjaC5kcjY7CisJCWVsc2UKKwkJCXZhbCA9IHN2bS0+dm1jYi0+c2F2ZS5kcjY7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkKKwkJCXZhbCA9IHZjcHUtPmFyY2guZHI3OworCQllbHNlCisJCQl2YWwgPSBzdm0tPnZtY2ItPnNhdmUuZHI3OworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwgPSAwOworCX0KKwogCUtWTVRSQUNFXzJEKERSX1JFQUQsIHZjcHUsICh1MzIpZHIsICh1MzIpdmFsLCBoYW5kbGVyKTsKIAlyZXR1cm4gdmFsOwogfQpAQCAtOTU5LDMzICsxMDYyLDQwIEBACiB7CiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAKLQkqZXhjZXB0aW9uID0gMDsKKwlLVk1UUkFDRV8yRChEUl9XUklURSwgdmNwdSwgKHUzMilkciwgKHUzMil2YWx1ZSwgaGFuZGxlcik7CiAKLQlpZiAoc3ZtLT52bWNiLT5zYXZlLmRyNyAmIERSN19HRF9NQVNLKSB7Ci0JCXN2bS0+dm1jYi0+c2F2ZS5kcjcgJj0gfkRSN19HRF9NQVNLOwotCQlzdm0tPnZtY2ItPnNhdmUuZHI2IHw9IERSNl9CRF9NQVNLOwotCQkqZXhjZXB0aW9uID0gREJfVkVDVE9SOwotCQlyZXR1cm47Ci0JfQorCSpleGNlcHRpb24gPSAwOwogCiAJc3dpdGNoIChkcikgewogCWNhc2UgMCAuLi4gMzoKLQkJc3ZtLT5kYl9yZWdzW2RyXSA9IHZhbHVlOworCQl2Y3B1LT5hcmNoLmRiW2RyXSA9IHZhbHVlOworCQlpZiAoISh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApKQorCQkJdmNwdS0+YXJjaC5lZmZfZGJbZHJdID0gdmFsdWU7CiAJCXJldHVybjsKIAljYXNlIDQgLi4uIDU6Ci0JCWlmICh2Y3B1LT5hcmNoLmNyNCAmIFg4Nl9DUjRfREUpIHsKKwkJaWYgKHZjcHUtPmFyY2guY3I0ICYgWDg2X0NSNF9ERSkKIAkJCSpleGNlcHRpb24gPSBVRF9WRUNUT1I7Ci0JCQlyZXR1cm47Ci0JCX0KLQljYXNlIDc6IHsKLQkJaWYgKHZhbHVlICYgfigoMVVMTCA8PCAzMikgLSAxKSkgeworCQlyZXR1cm47CisJY2FzZSA2OgorCQlpZiAodmFsdWUgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpIHsKIAkJCSpleGNlcHRpb24gPSBHUF9WRUNUT1I7CiAJCQlyZXR1cm47CiAJCX0KLQkJc3ZtLT52bWNiLT5zYXZlLmRyNyA9IHZhbHVlOworCQl2Y3B1LT5hcmNoLmRyNiA9ICh2YWx1ZSAmIERSNl9WT0xBVElMRSkgfCBEUjZfRklYRURfMTsKIAkJcmV0dXJuOwotCX0KKwljYXNlIDc6CisJCWlmICh2YWx1ZSAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgeworCQkJKmV4Y2VwdGlvbiA9IEdQX1ZFQ1RPUjsKKwkJCXJldHVybjsKKwkJfQorCQl2Y3B1LT5hcmNoLmRyNyA9ICh2YWx1ZSAmIERSN19WT0xBVElMRSkgfCBEUjdfRklYRURfMTsKKwkJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkgeworCQkJc3ZtLT52bWNiLT5zYXZlLmRyNyA9IHZjcHUtPmFyY2guZHI3OworCQkJdmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncyA9ICh2YWx1ZSAmIERSN19CUF9FTl9NQVNLKTsKKwkJfQorCQlyZXR1cm47CiAJZGVmYXVsdDoKKwkJLyogRklYTUU6IFBvc3NpYmxlIGNhc2U/ICovCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogdW5leHBlY3RlZCBkciAldVxuIiwKIAkJICAgICAgIF9fZnVuY19fLCBkcik7CiAJCSpleGNlcHRpb24gPSBVRF9WRUNUT1I7CkBAIC0xMDMxLDYgKzExNDEsMjcgQEAKIAlyZXR1cm4ga3ZtX21tdV9wYWdlX2ZhdWx0KCZzdm0tPnZjcHUsIGZhdWx0X2FkZHJlc3MsIGVycm9yX2NvZGUpOwogfQogCitzdGF0aWMgaW50IGRiX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaWYgKCEoc3ZtLT52Y3B1Lmd1ZXN0X2RlYnVnICYKKwkgICAgICAoS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkpIHsKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbigmc3ZtLT52Y3B1LCBEQl9WRUNUT1IpOworCQlyZXR1cm4gMTsKKwl9CisJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ERUJVRzsKKwlrdm1fcnVuLT5kZWJ1Zy5hcmNoLnBjID0gc3ZtLT52bWNiLT5zYXZlLmNzLmJhc2UgKyBzdm0tPnZtY2ItPnNhdmUucmlwOworCWt2bV9ydW4tPmRlYnVnLmFyY2guZXhjZXB0aW9uID0gREJfVkVDVE9SOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJwX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ERUJVRzsKKwlrdm1fcnVuLT5kZWJ1Zy5hcmNoLnBjID0gc3ZtLT52bWNiLT5zYXZlLmNzLmJhc2UgKyBzdm0tPnZtY2ItPnNhdmUucmlwOworCWt2bV9ydW4tPmRlYnVnLmFyY2guZXhjZXB0aW9uID0gQlBfVkVDVE9SOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHVkX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJaW50IGVyOwpAQCAtMTA4MCw3ICsxMjExLDcgQEAKIHN0YXRpYyBpbnQgaW9faW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAl1MzIgaW9faW5mbyA9IHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMTsgLyogYWRkcmVzcyBzaXplIGJ1Zz8gKi8KLQlpbnQgc2l6ZSwgZG93biwgaW4sIHN0cmluZywgcmVwOworCWludCBzaXplLCBpbiwgc3RyaW5nOwogCXVuc2lnbmVkIHBvcnQ7CiAKIAkrK3N2bS0+dmNwdS5zdGF0LmlvX2V4aXRzOwpAQCAtMTA5OSw4ICsxMjMwLDYgQEAKIAlpbiA9IChpb19pbmZvICYgU1ZNX0lPSU9fVFlQRV9NQVNLKSAhPSAwOwogCXBvcnQgPSBpb19pbmZvID4+IDE2OwogCXNpemUgPSAoaW9faW5mbyAmIFNWTV9JT0lPX1NJWkVfTUFTSykgPj4gU1ZNX0lPSU9fU0laRV9TSElGVDsKLQlyZXAgPSAoaW9faW5mbyAmIFNWTV9JT0lPX1JFUF9NQVNLKSAhPSAwOwotCWRvd24gPSAoc3ZtLT52bWNiLT5zYXZlLnJmbGFncyAmIFg4Nl9FRkxBR1NfREYpICE9IDA7CiAKIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOwogCXJldHVybiBrdm1fZW11bGF0ZV9waW8oJnN2bS0+dmNwdSwga3ZtX3J1biwgaW4sIHNpemUsIHBvcnQpOwpAQCAtMTEzOSw2ICsxMjY4LDU2NyBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJaWYgKCEoc3ZtLT52Y3B1LmFyY2guc2hhZG93X2VmZXIgJiBFRkVSX1NWTUUpCisJICAgIHx8ICFpc19wYWdpbmcoJnN2bS0+dmNwdSkpIHsKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbigmc3ZtLT52Y3B1LCBVRF9WRUNUT1IpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoc3ZtLT52bWNiLT5zYXZlLmNwbCkgeworCQlrdm1faW5qZWN0X2dwKCZzdm0tPnZjcHUsIDApOworCQlyZXR1cm4gMTsKKwl9CisKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX2NoZWNrX2V4Y2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdW5zaWduZWQgbnIsCisJCQkJICAgICAgYm9vbCBoYXNfZXJyb3JfY29kZSwgdTMyIGVycm9yX2NvZGUpCit7CisJaWYgKGlzX25lc3RlZChzdm0pKSB7CisJCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPSBTVk1fRVhJVF9FWENQX0JBU0UgKyBucjsKKwkJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZV9oaSA9IDA7CisJCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMSA9IGVycm9yX2NvZGU7CisJCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMiA9IHN2bS0+dmNwdS5hcmNoLmNyMjsKKwkJaWYgKG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkKHN2bSwgZmFsc2UpKSB7CisJCQluc3ZtX3ByaW50aygiVk1leGl0IC0+IEVYQ1AgMHgleFxuIiwgbnIpOworCisJCQluZXN0ZWRfc3ZtX3ZtZXhpdChzdm0pOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmVzdGVkX3N2bV9pbnRyKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQoreworCWlmIChpc19uZXN0ZWQoc3ZtKSkgeworCQlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKSkKKwkJCXJldHVybiAwOworCisJCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX0hJRl9NQVNLKSkKKwkJCXJldHVybiAwOworCisJCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPSBTVk1fRVhJVF9JTlRSOworCisJCWlmIChuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZChzdm0sIGZhbHNlKSkgeworCQkJbnN2bV9wcmludGsoIlZNZXhpdCAtPiBJTlRSXG4iKTsKKwkJCW5lc3RlZF9zdm1fdm1leGl0KHN2bSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKm5lc3RlZF9zdm1fZ2V0X3BhZ2Uoc3RydWN0IHZjcHVfc3ZtICpzdm0sIHU2NCBncGEpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcGFnZSA9IGdmbl90b19wYWdlKHN2bS0+dmNwdS5rdm0sIGdwYSA+PiBQQUdFX1NISUZUKTsKKwl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCisJaWYgKGlzX2Vycm9yX3BhZ2UocGFnZSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNvdWxkIG5vdCBmaW5kIHBhZ2UgYXQgMHglbGx4XG4iLAorCQkgICAgICAgX19mdW5jX18sIGdwYSk7CisJCWt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4ocGFnZSk7CisJCWt2bV9pbmplY3RfZ3AoJnN2bS0+dmNwdSwgMCk7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gcGFnZTsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX2RvKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLAorCQkJIHU2NCBhcmcxX2dwYSwgdTY0IGFyZzJfZ3BhLCB2b2lkICpvcGFxdWUsCisJCQkgaW50ICgqaGFuZGxlcikoc3RydWN0IHZjcHVfc3ZtICpzdm0sCisJCQkJCXZvaWQgKmFyZzEsCisJCQkJCXZvaWQgKmFyZzIsCisJCQkJCXZvaWQgKm9wYXF1ZSkpCit7CisJc3RydWN0IHBhZ2UgKmFyZzFfcGFnZTsKKwlzdHJ1Y3QgcGFnZSAqYXJnMl9wYWdlID0gTlVMTDsKKwl2b2lkICphcmcxOworCXZvaWQgKmFyZzIgPSBOVUxMOworCWludCByZXR2YWw7CisKKwlhcmcxX3BhZ2UgPSBuZXN0ZWRfc3ZtX2dldF9wYWdlKHN2bSwgYXJnMV9ncGEpOworCWlmKGFyZzFfcGFnZSA9PSBOVUxMKQorCQlyZXR1cm4gMTsKKworCWlmIChhcmcyX2dwYSkgeworCQlhcmcyX3BhZ2UgPSBuZXN0ZWRfc3ZtX2dldF9wYWdlKHN2bSwgYXJnMl9ncGEpOworCQlpZihhcmcyX3BhZ2UgPT0gTlVMTCkgeworCQkJa3ZtX3JlbGVhc2VfcGFnZV9jbGVhbihhcmcxX3BhZ2UpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlhcmcxID0ga21hcF9hdG9taWMoYXJnMV9wYWdlLCBLTV9VU0VSMCk7CisJaWYgKGFyZzJfZ3BhKQorCQlhcmcyID0ga21hcF9hdG9taWMoYXJnMl9wYWdlLCBLTV9VU0VSMSk7CisKKwlyZXR2YWwgPSBoYW5kbGVyKHN2bSwgYXJnMSwgYXJnMiwgb3BhcXVlKTsKKworCWt1bm1hcF9hdG9taWMoYXJnMSwgS01fVVNFUjApOworCWlmIChhcmcyX2dwYSkKKwkJa3VubWFwX2F0b21pYyhhcmcyLCBLTV9VU0VSMSk7CisKKwlrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KGFyZzFfcGFnZSk7CisJaWYgKGFyZzJfZ3BhKQorCQlrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KGFyZzJfcGFnZSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fZXhpdF9oYW5kbGVkX3JlYWwoc3RydWN0IHZjcHVfc3ZtICpzdm0sCisJCQkJCXZvaWQgKmFyZzEsCisJCQkJCXZvaWQgKmFyZzIsCisJCQkJCXZvaWQgKm9wYXF1ZSkKK3sKKwlzdHJ1Y3Qgdm1jYiAqbmVzdGVkX3ZtY2IgPSAoc3RydWN0IHZtY2IgKilhcmcxOworCWJvb2wga3ZtX292ZXJyaWRlcyA9ICooYm9vbCAqKW9wYXF1ZTsKKwl1MzIgZXhpdF9jb2RlID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZTsKKworCWlmIChrdm1fb3ZlcnJpZGVzKSB7CisJCXN3aXRjaCAoZXhpdF9jb2RlKSB7CisJCWNhc2UgU1ZNX0VYSVRfSU5UUjoKKwkJY2FzZSBTVk1fRVhJVF9OTUk6CisJCQlyZXR1cm4gMDsKKwkJLyogRm9yIG5vdyB3ZSBhcmUgYWx3YXlzIGhhbmRsaW5nIE5QRnMgd2hlbiB1c2luZyB0aGVtICovCisJCWNhc2UgU1ZNX0VYSVRfTlBGOgorCQkJaWYgKG5wdF9lbmFibGVkKQorCQkJCXJldHVybiAwOworCQkJYnJlYWs7CisJCS8qIFdoZW4gd2UncmUgc2hhZG93aW5nLCB0cmFwIFBGcyAqLworCQljYXNlIFNWTV9FWElUX0VYQ1BfQkFTRSArIFBGX1ZFQ1RPUjoKKwkJCWlmICghbnB0X2VuYWJsZWQpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJc3dpdGNoIChleGl0X2NvZGUpIHsKKwljYXNlIFNWTV9FWElUX1JFQURfQ1IwIC4uLiBTVk1fRVhJVF9SRUFEX0NSODogeworCQl1MzIgY3JfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX1JFQURfQ1IwKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkICYgY3JfYml0cykKKwkJCXJldHVybiAxOworCQlicmVhazsKKwl9CisJY2FzZSBTVk1fRVhJVF9XUklURV9DUjAgLi4uIFNWTV9FWElUX1dSSVRFX0NSODogeworCQl1MzIgY3JfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX1dSSVRFX0NSMCk7CisJCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGUgJiBjcl9iaXRzKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwljYXNlIFNWTV9FWElUX1JFQURfRFIwIC4uLiBTVk1fRVhJVF9SRUFEX0RSNzogeworCQl1MzIgZHJfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX1JFQURfRFIwKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkICYgZHJfYml0cykKKwkJCXJldHVybiAxOworCQlicmVhazsKKwl9CisJY2FzZSBTVk1fRVhJVF9XUklURV9EUjAgLi4uIFNWTV9FWElUX1dSSVRFX0RSNzogeworCQl1MzIgZHJfYml0cyA9IDEgPDwgKGV4aXRfY29kZSAtIFNWTV9FWElUX1dSSVRFX0RSMCk7CisJCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGUgJiBkcl9iaXRzKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwljYXNlIFNWTV9FWElUX0VYQ1BfQkFTRSAuLi4gU1ZNX0VYSVRfRVhDUF9CQVNFICsgMHgxZjogeworCQl1MzIgZXhjcF9iaXRzID0gMSA8PCAoZXhpdF9jb2RlIC0gU1ZNX0VYSVRfRVhDUF9CQVNFKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zICYgZXhjcF9iaXRzKQorCQkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwlkZWZhdWx0OiB7CisJCXU2NCBleGl0X2JpdHMgPSAxVUxMIDw8IChleGl0X2NvZGUgLSBTVk1fRVhJVF9JTlRSKTsKKwkJbnN2bV9wcmludGsoImV4aXQgY29kZTogMHgleFxuIiwgZXhpdF9jb2RlKTsKKwkJaWYgKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdCAmIGV4aXRfYml0cykKKwkJCXJldHVybiAxOworCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZF9tc3Ioc3RydWN0IHZjcHVfc3ZtICpzdm0sCisJCQkJICAgICAgIHZvaWQgKmFyZzEsIHZvaWQgKmFyZzIsCisJCQkJICAgICAgIHZvaWQgKm9wYXF1ZSkKK3sKKwlzdHJ1Y3Qgdm1jYiAqbmVzdGVkX3ZtY2IgPSAoc3RydWN0IHZtY2IgKilhcmcxOworCXU4ICptc3JwbSA9ICh1OCAqKWFyZzI7CisgICAgICAgIHUzMiB0MCwgdDE7CisJdTMyIG1zciA9IHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07CisJdTMyIHBhcmFtID0gc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW5mb18xICYgMTsKKworCWlmICghKG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdCAmICgxVUxMIDw8IElOVEVSQ0VQVF9NU1JfUFJPVCkpKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaChtc3IpIHsKKwljYXNlIDAgLi4uIDB4MWZmZjoKKwkJdDAgPSAobXNyICogMikgJSA4OworCQl0MSA9IG1zciAvIDg7CisJCWJyZWFrOworCWNhc2UgMHhjMDAwMDAwMCAuLi4gMHhjMDAwMWZmZjoKKwkJdDAgPSAoODE5MiArIG1zciAtIDB4YzAwMDAwMDApICogMjsKKwkJdDEgPSAodDAgLyA4KTsKKwkJdDAgJT0gODsKKwkJYnJlYWs7CisJY2FzZSAweGMwMDEwMDAwIC4uLiAweGMwMDExZmZmOgorCQl0MCA9ICgxNjM4NCArIG1zciAtIDB4YzAwMTAwMDApICogMjsKKwkJdDEgPSAodDAgLyA4KTsKKwkJdDAgJT0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJCWJyZWFrOworCX0KKwlpZiAobXNycG1bdDFdICYgKCgxIDw8IHBhcmFtKSA8PCB0MCkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3RydWN0IHZjcHVfc3ZtICpzdm0sIGJvb2wga3ZtX292ZXJyaWRlKQoreworCWJvb2wgayA9IGt2bV9vdmVycmlkZTsKKworCXN3aXRjaCAoc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfY29kZSkgeworCWNhc2UgU1ZNX0VYSVRfTVNSOgorCQlyZXR1cm4gbmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+bmVzdGVkX3ZtY2IsCisJCQkJICAgICBzdm0tPm5lc3RlZF92bWNiX21zcnBtLCBOVUxMLAorCQkJCSAgICAgbmVzdGVkX3N2bV9leGl0X2hhbmRsZWRfbXNyKTsKKwlkZWZhdWx0OiBicmVhazsKKwl9CisKKwlyZXR1cm4gbmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+bmVzdGVkX3ZtY2IsIDAsICZrLAorCQkJICAgICBuZXN0ZWRfc3ZtX2V4aXRfaGFuZGxlZF9yZWFsKTsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtZXhpdF9yZWFsKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICphcmcxLAorCQkJCSAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQoreworCXN0cnVjdCB2bWNiICpuZXN0ZWRfdm1jYiA9IChzdHJ1Y3Qgdm1jYiAqKWFyZzE7CisJc3RydWN0IHZtY2IgKmhzYXZlID0gc3ZtLT5oc2F2ZTsKKwl1NjQgbmVzdGVkX3NhdmVbXSA9IHsgbmVzdGVkX3ZtY2ItPnNhdmUuY3IwLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPnNhdmUuY3IzLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPnNhdmUuY3I0LAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPnNhdmUuZWZlciwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl9yZWFkLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlLAorCQkJICAgICAgbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGUsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucywKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdCwKKwkJCSAgICAgIG5lc3RlZF92bWNiLT5jb250cm9sLm1zcnBtX2Jhc2VfcGEsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pb3BtX2Jhc2VfcGEsCisJCQkgICAgICBuZXN0ZWRfdm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0IH07CisKKwkvKiBHaXZlIHRoZSBjdXJyZW50IHZtY2IgdG8gdGhlIGd1ZXN0ICovCisJbWVtY3B5KG5lc3RlZF92bWNiLCBzdm0tPnZtY2IsIHNpemVvZihzdHJ1Y3Qgdm1jYikpOworCW5lc3RlZF92bWNiLT5zYXZlLmNyMCA9IG5lc3RlZF9zYXZlWzBdOworCWlmICghbnB0X2VuYWJsZWQpCisJCW5lc3RlZF92bWNiLT5zYXZlLmNyMyA9IG5lc3RlZF9zYXZlWzFdOworCW5lc3RlZF92bWNiLT5zYXZlLmNyNCA9IG5lc3RlZF9zYXZlWzJdOworCW5lc3RlZF92bWNiLT5zYXZlLmVmZXIgPSBuZXN0ZWRfc2F2ZVszXTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCA9IG5lc3RlZF9zYXZlWzRdOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSA9IG5lc3RlZF9zYXZlWzVdOworCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl9yZWFkID0gbmVzdGVkX3NhdmVbNl07CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3dyaXRlID0gbmVzdGVkX3NhdmVbN107CisJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgPSBuZXN0ZWRfc2F2ZVs4XTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQgPSBuZXN0ZWRfc2F2ZVs5XTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhID0gbmVzdGVkX3NhdmVbMTBdOworCW5lc3RlZF92bWNiLT5jb250cm9sLmlvcG1fYmFzZV9wYSA9IG5lc3RlZF9zYXZlWzExXTsKKwluZXN0ZWRfdm1jYi0+Y29udHJvbC50c2Nfb2Zmc2V0ID0gbmVzdGVkX3NhdmVbMTJdOworCisJLyogV2UgYWx3YXlzIHNldCBWX0lOVFJfTUFTS0lORyBhbmQgcmVtZW1iZXIgdGhlIG9sZCB2YWx1ZSBpbiBoZmxhZ3MgKi8KKwlpZiAoIShzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9WSU5UUl9NQVNLKSkKKwkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCAmPSB+Vl9JTlRSX01BU0tJTkdfTUFTSzsKKworCWlmICgobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCAmIFZfSVJRX01BU0spICYmCisJICAgIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfdmVjdG9yKSkgeworCQluc3ZtX3ByaW50aygiV0FSTklORzogSVJRIDB4JXggc3RpbGwgZW5hYmxlZCBvbiAjVk1FWElUXG4iLAorCQkJCW5lc3RlZF92bWNiLT5jb250cm9sLmludF92ZWN0b3IpOworCX0KKworCS8qIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGNvbnRyb2wgZW50cmllcyAqLworCXN2bS0+dm1jYi0+Y29udHJvbCA9IGhzYXZlLT5jb250cm9sOworCisJLyogS2lsbCBhbnkgcGVuZGluZyBleGNlcHRpb25zICovCisJaWYgKHN2bS0+dmNwdS5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID09IHRydWUpCisJCW5zdm1fcHJpbnRrKCJXQVJOSU5HOiBQZW5kaW5nIEV4Y2VwdGlvblxuIik7CisJc3ZtLT52Y3B1LmFyY2guZXhjZXB0aW9uLnBlbmRpbmcgPSBmYWxzZTsKKworCS8qIFJlc3RvcmUgc2VsZWN0ZWQgc2F2ZSBlbnRyaWVzICovCisJc3ZtLT52bWNiLT5zYXZlLmVzID0gaHNhdmUtPnNhdmUuZXM7CisJc3ZtLT52bWNiLT5zYXZlLmNzID0gaHNhdmUtPnNhdmUuY3M7CisJc3ZtLT52bWNiLT5zYXZlLnNzID0gaHNhdmUtPnNhdmUuc3M7CisJc3ZtLT52bWNiLT5zYXZlLmRzID0gaHNhdmUtPnNhdmUuZHM7CisJc3ZtLT52bWNiLT5zYXZlLmdkdHIgPSBoc2F2ZS0+c2F2ZS5nZHRyOworCXN2bS0+dm1jYi0+c2F2ZS5pZHRyID0gaHNhdmUtPnNhdmUuaWR0cjsKKwlzdm0tPnZtY2ItPnNhdmUucmZsYWdzID0gaHNhdmUtPnNhdmUucmZsYWdzOworCXN2bV9zZXRfZWZlcigmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5lZmVyKTsKKwlzdm1fc2V0X2NyMCgmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5jcjAgfCBYODZfQ1IwX1BFKTsKKwlzdm1fc2V0X2NyNCgmc3ZtLT52Y3B1LCBoc2F2ZS0+c2F2ZS5jcjQpOworCWlmIChucHRfZW5hYmxlZCkgeworCQlzdm0tPnZtY2ItPnNhdmUuY3IzID0gaHNhdmUtPnNhdmUuY3IzOworCQlzdm0tPnZjcHUuYXJjaC5jcjMgPSBoc2F2ZS0+c2F2ZS5jcjM7CisJfSBlbHNlIHsKKwkJa3ZtX3NldF9jcjMoJnN2bS0+dmNwdSwgaHNhdmUtPnNhdmUuY3IzKTsKKwl9CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SQVgsIGhzYXZlLT5zYXZlLnJheCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SU1AsIGhzYXZlLT5zYXZlLnJzcCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKCZzdm0tPnZjcHUsIFZDUFVfUkVHU19SSVAsIGhzYXZlLT5zYXZlLnJpcCk7CisJc3ZtLT52bWNiLT5zYXZlLmRyNyA9IDA7CisJc3ZtLT52bWNiLT5zYXZlLmNwbCA9IDA7CisJc3ZtLT52bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm8gPSAwOworCisJc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9HSUZfTUFTSzsKKwkvKiBFeGl0IG5lc3RlZCBTVk0gbW9kZSAqLworCXN2bS0+bmVzdGVkX3ZtY2IgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWV4aXQoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJbnN2bV9wcmludGsoIlZNZXhpdFxuIik7CisJaWYgKG5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPm5lc3RlZF92bWNiLCAwLAorCQkJICBOVUxMLCBuZXN0ZWRfc3ZtX3ZtZXhpdF9yZWFsKSkKKwkJcmV0dXJuIDE7CisKKwlrdm1fbW11X3Jlc2V0X2NvbnRleHQoJnN2bS0+dmNwdSk7CisJa3ZtX21tdV9sb2FkKCZzdm0tPnZjcHUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bXJ1bl9tc3JwbShzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdm9pZCAqYXJnMSwKKwkJCQkgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3sKKwlpbnQgaTsKKwl1MzIgKm5lc3RlZF9tc3JwbSA9ICh1MzIqKWFyZzE7CisJZm9yIChpPTA7IGk8IFBBR0VfU0laRSAqICgxIDw8IE1TUlBNX0FMTE9DX09SREVSKSAvIDQ7IGkrKykKKwkJc3ZtLT5uZXN0ZWRfbXNycG1baV0gPSBzdm0tPm1zcnBtW2ldIHwgbmVzdGVkX21zcnBtW2ldOworCXN2bS0+dm1jYi0+Y29udHJvbC5tc3JwbV9iYXNlX3BhID0gX19wYShzdm0tPm5lc3RlZF9tc3JwbSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtcnVuKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICphcmcxLAorCQkJICAgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3sKKwlzdHJ1Y3Qgdm1jYiAqbmVzdGVkX3ZtY2IgPSAoc3RydWN0IHZtY2IgKilhcmcxOworCXN0cnVjdCB2bWNiICpoc2F2ZSA9IHN2bS0+aHNhdmU7CisKKwkvKiBuZXN0ZWRfdm1jYiBpcyBvdXIgaW5kaWNhdG9yIGlmIG5lc3RlZCBTVk0gaXMgYWN0aXZhdGVkICovCisJc3ZtLT5uZXN0ZWRfdm1jYiA9IHN2bS0+dm1jYi0+c2F2ZS5yYXg7CisKKwkvKiBDbGVhciBpbnRlcm5hbCBzdGF0dXMgKi8KKwlzdm0tPnZjcHUuYXJjaC5leGNlcHRpb24ucGVuZGluZyA9IGZhbHNlOworCisJLyogU2F2ZSB0aGUgb2xkIHZtY2IsIHNvIHdlIGRvbid0IG5lZWQgdG8gcGljayB3aGF0IHdlIHNhdmUsIGJ1dAorCSAgIGNhbiByZXN0b3JlIGV2ZXJ5dGhpbmcgd2hlbiBhIFZNRVhJVCBvY2N1cnMgKi8KKwltZW1jcHkoaHNhdmUsIHN2bS0+dm1jYiwgc2l6ZW9mKHN0cnVjdCB2bWNiKSk7CisJLyogV2UgbmVlZCB0byByZW1lbWJlciB0aGUgb3JpZ2luYWwgQ1IzIGluIHRoZSBTUFQgY2FzZSAqLworCWlmICghbnB0X2VuYWJsZWQpCisJCWhzYXZlLT5zYXZlLmNyMyA9IHN2bS0+dmNwdS5hcmNoLmNyMzsKKwloc2F2ZS0+c2F2ZS5jcjQgPSBzdm0tPnZjcHUuYXJjaC5jcjQ7CisJaHNhdmUtPnNhdmUucmlwID0gc3ZtLT5uZXh0X3JpcDsKKworCWlmIChzdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19JRikKKwkJc3ZtLT52Y3B1LmFyY2guaGZsYWdzIHw9IEhGX0hJRl9NQVNLOworCWVsc2UKKwkJc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9ISUZfTUFTSzsKKworCS8qIExvYWQgdGhlIG5lc3RlZCBndWVzdCBzdGF0ZSAqLworCXN2bS0+dm1jYi0+c2F2ZS5lcyA9IG5lc3RlZF92bWNiLT5zYXZlLmVzOworCXN2bS0+dm1jYi0+c2F2ZS5jcyA9IG5lc3RlZF92bWNiLT5zYXZlLmNzOworCXN2bS0+dm1jYi0+c2F2ZS5zcyA9IG5lc3RlZF92bWNiLT5zYXZlLnNzOworCXN2bS0+dm1jYi0+c2F2ZS5kcyA9IG5lc3RlZF92bWNiLT5zYXZlLmRzOworCXN2bS0+dm1jYi0+c2F2ZS5nZHRyID0gbmVzdGVkX3ZtY2ItPnNhdmUuZ2R0cjsKKwlzdm0tPnZtY2ItPnNhdmUuaWR0ciA9IG5lc3RlZF92bWNiLT5zYXZlLmlkdHI7CisJc3ZtLT52bWNiLT5zYXZlLnJmbGFncyA9IG5lc3RlZF92bWNiLT5zYXZlLnJmbGFnczsKKwlzdm1fc2V0X2VmZXIoJnN2bS0+dmNwdSwgbmVzdGVkX3ZtY2ItPnNhdmUuZWZlcik7CisJc3ZtX3NldF9jcjAoJnN2bS0+dmNwdSwgbmVzdGVkX3ZtY2ItPnNhdmUuY3IwKTsKKwlzdm1fc2V0X2NyNCgmc3ZtLT52Y3B1LCBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjQpOworCWlmIChucHRfZW5hYmxlZCkgeworCQlzdm0tPnZtY2ItPnNhdmUuY3IzID0gbmVzdGVkX3ZtY2ItPnNhdmUuY3IzOworCQlzdm0tPnZjcHUuYXJjaC5jcjMgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5jcjM7CisJfSBlbHNlIHsKKwkJa3ZtX3NldF9jcjMoJnN2bS0+dmNwdSwgbmVzdGVkX3ZtY2ItPnNhdmUuY3IzKTsKKwkJa3ZtX21tdV9yZXNldF9jb250ZXh0KCZzdm0tPnZjcHUpOworCX0KKwlzdm0tPnZtY2ItPnNhdmUuY3IyID0gbmVzdGVkX3ZtY2ItPnNhdmUuY3IyOworCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCBWQ1BVX1JFR1NfUkFYLCBuZXN0ZWRfdm1jYi0+c2F2ZS5yYXgpOworCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCBWQ1BVX1JFR1NfUlNQLCBuZXN0ZWRfdm1jYi0+c2F2ZS5yc3ApOworCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCBWQ1BVX1JFR1NfUklQLCBuZXN0ZWRfdm1jYi0+c2F2ZS5yaXApOworCS8qIEluIGNhc2Ugd2UgZG9uJ3QgZXZlbiByZWFjaCB2Y3B1X3J1biwgdGhlIGZpZWxkcyBhcmUgbm90IHVwZGF0ZWQgKi8KKwlzdm0tPnZtY2ItPnNhdmUucmF4ID0gbmVzdGVkX3ZtY2ItPnNhdmUucmF4OworCXN2bS0+dm1jYi0+c2F2ZS5yc3AgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5yc3A7CisJc3ZtLT52bWNiLT5zYXZlLnJpcCA9IG5lc3RlZF92bWNiLT5zYXZlLnJpcDsKKwlzdm0tPnZtY2ItPnNhdmUuZHI3ID0gbmVzdGVkX3ZtY2ItPnNhdmUuZHI3OworCXN2bS0+dm1jYi0+c2F2ZS5kcjYgPSBuZXN0ZWRfdm1jYi0+c2F2ZS5kcjY7CisJc3ZtLT52bWNiLT5zYXZlLmNwbCA9IG5lc3RlZF92bWNiLT5zYXZlLmNwbDsKKworCS8qIFdlIGRvbid0IHdhbnQgYSBuZXN0ZWQgZ3Vlc3QgdG8gYmUgbW9yZSBwb3dlcmZ1bCB0aGFuIHRoZSBndWVzdCwKKwkgICBzbyBhbGwgaW50ZXJjZXB0cyBhcmUgT1JlZCAqLworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCB8PQorCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZDsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3dyaXRlIHw9CisJCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQgfD0KKwkJbmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2RyX3JlYWQ7CisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9kcl93cml0ZSB8PQorCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZHJfd3JpdGU7CisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zIHw9CisJCW5lc3RlZF92bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zOworCisJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCB8PSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRlcmNlcHQ7CisKKwlzdm0tPm5lc3RlZF92bWNiX21zcnBtID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wubXNycG1fYmFzZV9wYTsKKworCWZvcmNlX25ld19hc2lkKCZzdm0tPnZjcHUpOworCXN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvID0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mbzsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbnRfaW5mb19lcnIgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5leGl0X2ludF9pbmZvX2VycjsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X2N0bCA9IG5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwgfCBWX0lOVFJfTUFTS0lOR19NQVNLOworCWlmIChuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfY3RsICYgVl9JUlFfTUFTSykgeworCQluc3ZtX3ByaW50aygiblNWTSBJbmplY3RpbmcgSW50ZXJydXB0OiAweCV4XG4iLAorCQkJCW5lc3RlZF92bWNiLT5jb250cm9sLmludF9jdGwpOworCX0KKwlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuaW50X2N0bCAmIFZfSU5UUl9NQVNLSU5HX01BU0spCisJCXN2bS0+dmNwdS5hcmNoLmhmbGFncyB8PSBIRl9WSU5UUl9NQVNLOworCWVsc2UKKwkJc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9WSU5UUl9NQVNLOworCisJbnN2bV9wcmludGsoIm5TVk0gZXhpdF9pbnRfaW5mbzogMHgleCB8IGludF9zdGF0ZTogMHgleFxuIiwKKwkJCW5lc3RlZF92bWNiLT5jb250cm9sLmV4aXRfaW50X2luZm8sCisJCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfc3RhdGUpOworCisJc3ZtLT52bWNiLT5jb250cm9sLmludF92ZWN0b3IgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfdmVjdG9yOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRfc3RhdGUgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5pbnRfc3RhdGU7CisJc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgKz0gbmVzdGVkX3ZtY2ItPmNvbnRyb2wudHNjX29mZnNldDsKKwlpZiAobmVzdGVkX3ZtY2ItPmNvbnRyb2wuZXZlbnRfaW5qICYgU1ZNX0VWVElOSl9WQUxJRCkKKwkJbnN2bV9wcmludGsoIkluamVjdGluZyBFdmVudDogMHgleFxuIiwKKwkJCQluZXN0ZWRfdm1jYi0+Y29udHJvbC5ldmVudF9pbmopOworCXN2bS0+dm1jYi0+Y29udHJvbC5ldmVudF9pbmogPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5ldmVudF9pbmo7CisJc3ZtLT52bWNiLT5jb250cm9sLmV2ZW50X2lual9lcnIgPSBuZXN0ZWRfdm1jYi0+Y29udHJvbC5ldmVudF9pbmpfZXJyOworCisJc3ZtLT52Y3B1LmFyY2guaGZsYWdzIHw9IEhGX0dJRl9NQVNLOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmVzdGVkX3N2bV92bWxvYWRzYXZlKHN0cnVjdCB2bWNiICpmcm9tX3ZtY2IsIHN0cnVjdCB2bWNiICp0b192bWNiKQoreworCXRvX3ZtY2ItPnNhdmUuZnMgPSBmcm9tX3ZtY2ItPnNhdmUuZnM7CisJdG9fdm1jYi0+c2F2ZS5ncyA9IGZyb21fdm1jYi0+c2F2ZS5nczsKKwl0b192bWNiLT5zYXZlLnRyID0gZnJvbV92bWNiLT5zYXZlLnRyOworCXRvX3ZtY2ItPnNhdmUubGR0ciA9IGZyb21fdm1jYi0+c2F2ZS5sZHRyOworCXRvX3ZtY2ItPnNhdmUua2VybmVsX2dzX2Jhc2UgPSBmcm9tX3ZtY2ItPnNhdmUua2VybmVsX2dzX2Jhc2U7CisJdG9fdm1jYi0+c2F2ZS5zdGFyID0gZnJvbV92bWNiLT5zYXZlLnN0YXI7CisJdG9fdm1jYi0+c2F2ZS5sc3RhciA9IGZyb21fdm1jYi0+c2F2ZS5sc3RhcjsKKwl0b192bWNiLT5zYXZlLmNzdGFyID0gZnJvbV92bWNiLT5zYXZlLmNzdGFyOworCXRvX3ZtY2ItPnNhdmUuc2ZtYXNrID0gZnJvbV92bWNiLT5zYXZlLnNmbWFzazsKKwl0b192bWNiLT5zYXZlLnN5c2VudGVyX2NzID0gZnJvbV92bWNiLT5zYXZlLnN5c2VudGVyX2NzOworCXRvX3ZtY2ItPnNhdmUuc3lzZW50ZXJfZXNwID0gZnJvbV92bWNiLT5zYXZlLnN5c2VudGVyX2VzcDsKKwl0b192bWNiLT5zYXZlLnN5c2VudGVyX2VpcCA9IGZyb21fdm1jYi0+c2F2ZS5zeXNlbnRlcl9laXA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuZXN0ZWRfc3ZtX3ZtbG9hZChzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgdm9pZCAqbmVzdGVkX3ZtY2IsCisJCQkgICAgIHZvaWQgKmFyZzIsIHZvaWQgKm9wYXF1ZSkKK3sKKwlyZXR1cm4gbmVzdGVkX3N2bV92bWxvYWRzYXZlKChzdHJ1Y3Qgdm1jYiAqKW5lc3RlZF92bWNiLCBzdm0tPnZtY2IpOworfQorCitzdGF0aWMgaW50IG5lc3RlZF9zdm1fdm1zYXZlKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCB2b2lkICpuZXN0ZWRfdm1jYiwKKwkJCSAgICAgdm9pZCAqYXJnMiwgdm9pZCAqb3BhcXVlKQoreworCXJldHVybiBuZXN0ZWRfc3ZtX3ZtbG9hZHNhdmUoc3ZtLT52bWNiLCAoc3RydWN0IHZtY2IgKiluZXN0ZWRfdm1jYik7Cit9CisKK3N0YXRpYyBpbnQgdm1sb2FkX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKKwkJcmV0dXJuIDE7CisKKwlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOworCisJbmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+dm1jYi0+c2F2ZS5yYXgsIDAsIE5VTEwsIG5lc3RlZF9zdm1fdm1sb2FkKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHZtc2F2ZV9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCWlmIChuZXN0ZWRfc3ZtX2NoZWNrX3Blcm1pc3Npb25zKHN2bSkpCisJCXJldHVybiAxOworCisJc3ZtLT5uZXh0X3JpcCA9IGt2bV9yaXBfcmVhZCgmc3ZtLT52Y3B1KSArIDM7CisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKworCW5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPnZtY2ItPnNhdmUucmF4LCAwLCBOVUxMLCBuZXN0ZWRfc3ZtX3Ztc2F2ZSk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB2bXJ1bl9pbnRlcmNlcHRpb24oc3RydWN0IHZjcHVfc3ZtICpzdm0sIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQoreworCW5zdm1fcHJpbnRrKCJWTXJ1blxuIik7CisJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKKwkJcmV0dXJuIDE7CisKKwlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOworCisJaWYgKG5lc3RlZF9zdm1fZG8oc3ZtLCBzdm0tPnZtY2ItPnNhdmUucmF4LCAwLAorCQkJICBOVUxMLCBuZXN0ZWRfc3ZtX3ZtcnVuKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAobmVzdGVkX3N2bV9kbyhzdm0sIHN2bS0+bmVzdGVkX3ZtY2JfbXNycG0sIDAsCisJCSAgICAgIE5VTEwsIG5lc3RlZF9zdm1fdm1ydW5fbXNycG0pKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHN0Z2lfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtLCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKK3sKKwlpZiAobmVzdGVkX3N2bV9jaGVja19wZXJtaXNzaW9ucyhzdm0pKQorCQlyZXR1cm4gMTsKKworCXN2bS0+bmV4dF9yaXAgPSBrdm1fcmlwX3JlYWQoJnN2bS0+dmNwdSkgKyAzOworCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24oJnN2bS0+dmNwdSk7CisKKwlzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgfD0gSEZfR0lGX01BU0s7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjbGdpX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCit7CisJaWYgKG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3ZtKSkKKwkJcmV0dXJuIDE7CisKKwlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMzsKKwlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKCZzdm0tPnZjcHUpOworCisJc3ZtLT52Y3B1LmFyY2guaGZsYWdzICY9IH5IRl9HSUZfTUFTSzsKKworCS8qIEFmdGVyIGEgQ0xHSSBubyBpbnRlcnJ1cHRzIHNob3VsZCBjb21lICovCisJc3ZtX2NsZWFyX3ZpbnRyKHN2bSk7CisJc3ZtLT52bWNiLT5jb250cm9sLmludF9jdGwgJj0gflZfSVJRX01BU0s7CisKKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIGludCBpbnZhbGlkX29wX2ludGVyY2VwdGlvbihzdHJ1Y3QgdmNwdV9zdm0gKnN2bSwKIAkJCQkgICBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKQEAgLTEyNTAsNiArMTk0MCwxNSBAQAogCWNhc2UgTVNSX0lBMzJfTEFTVElOVFRPSVA6CiAJCSpkYXRhID0gc3ZtLT52bWNiLT5zYXZlLmxhc3RfZXhjcF90bzsKIAkJYnJlYWs7CisJY2FzZSBNU1JfVk1fSFNBVkVfUEE6CisJCSpkYXRhID0gc3ZtLT5oc2F2ZV9tc3I7CisJCWJyZWFrOworCWNhc2UgTVNSX1ZNX0NSOgorCQkqZGF0YSA9IDA7CisJCWJyZWFrOworCWNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgorCQkqZGF0YSA9IDB4MDEwMDAwNjU7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBrdm1fZ2V0X21zcl9jb21tb24odmNwdSwgZWN4LCBkYXRhKTsKIAl9CkBAIC0xMzQ0LDYgKzIwNDMsOSBAQAogCQlwcl91bmltcGwodmNwdSwgInVuaW1wbGVtZW50ZWQgcGVyZmN0ciB3cm1zcjogMHgleCBkYXRhIDB4JWxseFxuIiwgZWN4LCBkYXRhKTsKIAogCQlicmVhazsKKwljYXNlIE1TUl9WTV9IU0FWRV9QQToKKwkJc3ZtLT5oc2F2ZV9tc3IgPSBkYXRhOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4ga3ZtX3NldF9tc3JfY29tbW9uKHZjcHUsIGVjeCwgZGF0YSk7CiAJfQpAQCAtMTM4MCw3ICsyMDgyLDcgQEAKIHsKIAlLVk1UUkFDRV8wRChQRU5EX0lOVFIsICZzdm0tPnZjcHUsIGhhbmRsZXIpOwogCi0Jc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdCAmPSB+KDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSKTsKKwlzdm1fY2xlYXJfdmludHIoc3ZtKTsKIAlzdm0tPnZtY2ItPmNvbnRyb2wuaW50X2N0bCAmPSB+Vl9JUlFfTUFTSzsKIAkvKgogCSAqIElmIHRoZSB1c2VyIHNwYWNlIHdhaXRzIHRvIGluamVjdCBpbnRlcnJ1cHRzLCBleGl0IGFzIHNvb24gYXMKQEAgLTE0MTcsNiArMjExOSw4IEBACiAJW1NWTV9FWElUX1dSSVRFX0RSM10JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XUklURV9EUjVdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfV1JJVEVfRFI3XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX0VYQ1BfQkFTRSArIERCX1ZFQ1RPUl0JPSBkYl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX0VYQ1BfQkFTRSArIEJQX1ZFQ1RPUl0JPSBicF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0VYQ1BfQkFTRSArIFVEX1ZFQ1RPUl0JPSB1ZF9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX0VYQ1BfQkFTRSArIFBGX1ZFQ1RPUl0gCT0gcGZfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9FWENQX0JBU0UgKyBOTV9WRUNUT1JdIAk9IG5tX2ludGVyY2VwdGlvbiwKQEAgLTE0MzYsMTIgKzIxNDAsMTIgQEAKIAlbU1ZNX0VYSVRfTVNSXQkJCQk9IG1zcl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1RBU0tfU1dJVENIXQkJCT0gdGFza19zd2l0Y2hfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9TSFVURE9XTl0JCQk9IHNodXRkb3duX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfVk1SVU5dCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKKwlbU1ZNX0VYSVRfVk1SVU5dCQkJPSB2bXJ1bl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1ZNTUNBTExdCQkJPSB2bW1jYWxsX2ludGVyY2VwdGlvbiwKLQlbU1ZNX0VYSVRfVk1MT0FEXQkJCT0gaW52YWxpZF9vcF9pbnRlcmNlcHRpb24sCi0JW1NWTV9FWElUX1ZNU0FWRV0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9TVEdJXQkJCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAotCVtTVk1fRVhJVF9DTEdJXQkJCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9WTUxPQURdCQkJPSB2bWxvYWRfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9WTVNBVkVdCQkJPSB2bXNhdmVfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9TVEdJXQkJCQk9IHN0Z2lfaW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9DTEdJXQkJCQk9IGNsZ2lfaW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9TS0lOSVRdCQkJPSBpbnZhbGlkX29wX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfV0JJTlZEXSAgICAgICAgICAgICAgICAgICAgICAgPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfTU9OSVRPUl0JCQk9IGludmFsaWRfb3BfaW50ZXJjZXB0aW9uLApAQCAtMTQ1Nyw2ICsyMTYxLDE3IEBACiAJS1ZNVFJBQ0VfM0QoVk1FWElULCB2Y3B1LCBleGl0X2NvZGUsICh1MzIpc3ZtLT52bWNiLT5zYXZlLnJpcCwKIAkJICAgICh1MzIpKCh1NjQpc3ZtLT52bWNiLT5zYXZlLnJpcCA+PiAzMiksIGVudHJ5ZXhpdCk7CiAKKwlpZiAoaXNfbmVzdGVkKHN2bSkpIHsKKwkJbnN2bV9wcmludGsoIm5lc3RlZCBoYW5kbGVfZXhpdDogMHgleCB8IDB4JWx4IHwgMHglbHggfCAweCVseFxuIiwKKwkJCSAgICBleGl0X2NvZGUsIHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2luZm9fMSwKKwkJCSAgICBzdm0tPnZtY2ItPmNvbnRyb2wuZXhpdF9pbmZvXzIsIHN2bS0+dm1jYi0+c2F2ZS5yaXApOworCQlpZiAobmVzdGVkX3N2bV9leGl0X2hhbmRsZWQoc3ZtLCB0cnVlKSkgeworCQkJbmVzdGVkX3N2bV92bWV4aXQoc3ZtKTsKKwkJCW5zdm1fcHJpbnRrKCItPiAjVk1FWElUXG4iKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCiAJaWYgKG5wdF9lbmFibGVkKSB7CiAJCWludCBtbXVfcmVsb2FkID0gMDsKIAkJaWYgKCh2Y3B1LT5hcmNoLmNyMCBeIHN2bS0+dm1jYi0+c2F2ZS5jcjApICYgWDg2X0NSMF9QRykgewpAQCAtMTU0NCw2ICsyMjU5LDggQEAKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAorCW5lc3RlZF9zdm1faW50cihzdm0pOworCiAJc3ZtX2luamVjdF9pcnEoc3ZtLCBpcnEpOwogfQogCkBAIC0xNTg5LDExICsyMzA2LDE3IEBACiAJaWYgKCFrdm1fY3B1X2hhc19pbnRlcnJ1cHQodmNwdSkpCiAJCWdvdG8gb3V0OwogCisJaWYgKG5lc3RlZF9zdm1faW50cihzdm0pKQorCQlnb3RvIG91dDsKKworCWlmICghKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX0dJRl9NQVNLKSkKKwkJZ290byBvdXQ7CisKIAlpZiAoISh2bWNiLT5zYXZlLnJmbGFncyAmIFg4Nl9FRkxBR1NfSUYpIHx8CiAJICAgICh2bWNiLT5jb250cm9sLmludF9zdGF0ZSAmIFNWTV9JTlRFUlJVUFRfU0hBRE9XX01BU0spIHx8CiAJICAgICh2bWNiLT5jb250cm9sLmV2ZW50X2luaiAmIFNWTV9FVlRJTkpfVkFMSUQpKSB7CiAJCS8qIHVuYWJsZSB0byBkZWxpdmVyIGlycSwgc2V0IHBlbmRpbmcgaXJxICovCi0JCXZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0IHw9ICgxVUxMIDw8IElOVEVSQ0VQVF9WSU5UUik7CisJCXN2bV9zZXRfdmludHIoc3ZtKTsKIAkJc3ZtX2luamVjdF9pcnEoc3ZtLCAweDApOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xNjE1LDcgKzIzMzgsOCBAQAogCX0KIAogCXN2bS0+dmNwdS5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiA9Ci0JCSEoY29udHJvbC0+aW50X3N0YXRlICYgU1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSyk7CisJCSEoY29udHJvbC0+aW50X3N0YXRlICYgU1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSykgJiYKKwkJIChzdm0tPnZjcHUuYXJjaC5oZmxhZ3MgJiBIRl9HSUZfTUFTSyk7CiB9CiAKIHN0YXRpYyB2b2lkIHN2bV9kb19pbmplY3RfdmVjdG9yKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQpAQCAtMTYzNyw5ICsyMzYxLDEzIEBACiAJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CiAJc3RydWN0IHZtY2JfY29udHJvbF9hcmVhICpjb250cm9sID0gJnN2bS0+dm1jYi0+Y29udHJvbDsKIAorCWlmIChuZXN0ZWRfc3ZtX2ludHIoc3ZtKSkKKwkJcmV0dXJuOworCiAJc3ZtLT52Y3B1LmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuID0KIAkJKCEoY29udHJvbC0+aW50X3N0YXRlICYgU1ZNX0lOVEVSUlVQVF9TSEFET1dfTUFTSykgJiYKLQkJIChzdm0tPnZtY2ItPnNhdmUucmZsYWdzICYgWDg2X0VGTEFHU19JRikpOworCQkgKHN2bS0+dm1jYi0+c2F2ZS5yZmxhZ3MgJiBYODZfRUZMQUdTX0lGKSAmJgorCQkgKHN2bS0+dmNwdS5hcmNoLmhmbGFncyAmIEhGX0dJRl9NQVNLKSk7CiAKIAlpZiAoc3ZtLT52Y3B1LmFyY2guaW50ZXJydXB0X3dpbmRvd19vcGVuICYmIHN2bS0+dmNwdS5hcmNoLmlycV9zdW1tYXJ5KQogCQkvKgpAQCAtMTY1Miw5ICsyMzgwLDkgQEAKIAkgKi8KIAlpZiAoIXN2bS0+dmNwdS5hcmNoLmludGVycnVwdF93aW5kb3dfb3BlbiAmJgogCSAgICAoc3ZtLT52Y3B1LmFyY2guaXJxX3N1bW1hcnkgfHwga3ZtX3J1bi0+cmVxdWVzdF9pbnRlcnJ1cHRfd2luZG93KSkKLQkJY29udHJvbC0+aW50ZXJjZXB0IHw9IDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSOwotCSBlbHNlCi0JCWNvbnRyb2wtPmludGVyY2VwdCAmPSB+KDFVTEwgPDwgSU5URVJDRVBUX1ZJTlRSKTsKKwkJc3ZtX3NldF92aW50cihzdm0pOworCWVsc2UKKwkJc3ZtX2NsZWFyX3ZpbnRyKHN2bSk7CiB9CiAKIHN0YXRpYyBpbnQgc3ZtX3NldF90c3NfYWRkcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBhZGRyKQpAQCAtMTY2MiwyMiArMjM5MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNhdmVfZGJfcmVncyh1bnNpZ25lZCBsb25nICpkYl9yZWdzKQotewotCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyMCwgJTAiIDogIj1yIihkYl9yZWdzWzBdKSk7Ci0JYXNtIHZvbGF0aWxlICgibW92ICUlZHIxLCAlMCIgOiAiPXIiKGRiX3JlZ3NbMV0pKTsKLQlhc20gdm9sYXRpbGUgKCJtb3YgJSVkcjIsICUwIiA6ICI9ciIoZGJfcmVnc1syXSkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlJWRyMywgJTAiIDogIj1yIihkYl9yZWdzWzNdKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvYWRfZGJfcmVncyh1bnNpZ25lZCBsb25nICpkYl9yZWdzKQotewotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjAiIDogOiAiciIoZGJfcmVnc1swXSkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjEiIDogOiAiciIoZGJfcmVnc1sxXSkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjIiIDogOiAiciIoZGJfcmVnc1syXSkpOwotCWFzbSB2b2xhdGlsZSAoIm1vdiAlMCwgJSVkcjMiIDogOiAiciIoZGJfcmVnc1szXSkpOwotfQotCiBzdGF0aWMgdm9pZCBzdm1fZmx1c2hfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlmb3JjZV9uZXdfYXNpZCh2Y3B1KTsKQEAgLTE3MzYsMTkgKzI0NDgsMTIgQEAKIAlnc19zZWxlY3RvciA9IGt2bV9yZWFkX2dzKCk7CiAJbGR0X3NlbGVjdG9yID0ga3ZtX3JlYWRfbGR0KCk7CiAJc3ZtLT5ob3N0X2NyMiA9IGt2bV9yZWFkX2NyMigpOwotCXN2bS0+aG9zdF9kcjYgPSByZWFkX2RyNigpOwotCXN2bS0+aG9zdF9kcjcgPSByZWFkX2RyNygpOwotCXN2bS0+dm1jYi0+c2F2ZS5jcjIgPSB2Y3B1LT5hcmNoLmNyMjsKKwlpZiAoIWlzX25lc3RlZChzdm0pKQorCQlzdm0tPnZtY2ItPnNhdmUuY3IyID0gdmNwdS0+YXJjaC5jcjI7CiAJLyogcmVxdWlyZWQgZm9yIGxpdmUgbWlncmF0aW9uIHdpdGggTlBUICovCiAJaWYgKG5wdF9lbmFibGVkKQogCQlzdm0tPnZtY2ItPnNhdmUuY3IzID0gdmNwdS0+YXJjaC5jcjM7CiAKLQlpZiAoc3ZtLT52bWNiLT5zYXZlLmRyNyAmIDB4ZmYpIHsKLQkJd3JpdGVfZHI3KDApOwotCQlzYXZlX2RiX3JlZ3Moc3ZtLT5ob3N0X2RiX3JlZ3MpOwotCQlsb2FkX2RiX3JlZ3Moc3ZtLT5kYl9yZWdzKTsKLQl9Ci0KIAljbGdpKCk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC0xODI0LDE2ICsyNTI5LDExIEBACiAjZW5kaWYKIAkJKTsKIAotCWlmICgoc3ZtLT52bWNiLT5zYXZlLmRyNyAmIDB4ZmYpKQotCQlsb2FkX2RiX3JlZ3Moc3ZtLT5ob3N0X2RiX3JlZ3MpOwotCiAJdmNwdS0+YXJjaC5jcjIgPSBzdm0tPnZtY2ItPnNhdmUuY3IyOwogCXZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSA9IHN2bS0+dm1jYi0+c2F2ZS5yYXg7CiAJdmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SU1BdID0gc3ZtLT52bWNiLT5zYXZlLnJzcDsKIAl2Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JJUF0gPSBzdm0tPnZtY2ItPnNhdmUucmlwOwogCi0Jd3JpdGVfZHI2KHN2bS0+aG9zdF9kcjYpOwotCXdyaXRlX2RyNyhzdm0tPmhvc3RfZHI3KTsKIAlrdm1fd3JpdGVfY3IyKHN2bS0+aG9zdF9jcjIpOwogCiAJa3ZtX2xvYWRfZnMoZnNfc2VsZWN0b3IpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3ZteC5jIGIvYXJjaC94ODYva3ZtL3ZteC5jCmluZGV4IDc2MTFhZjUuLmJiNDgxMzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS92bXguYworKysgYi9hcmNoL3g4Ni9rdm0vdm14LmMKQEAgLTkxLDYgKzkxLDcgQEAKIAl9IHJtb2RlOwogCWludCB2cGlkOwogCWJvb2wgZW11bGF0aW9uX3JlcXVpcmVkOworCWVudW0gZW11bGF0aW9uX3Jlc3VsdCBpbnZhbGlkX3N0YXRlX2VtdWxhdGlvbl9yZXN1bHQ7CiAKIAkvKiBTdXBwb3J0IGZvciB2bm1pLWxlc3MgQ1BVcyAqLwogCWludCBzb2Z0X3ZubWlfYmxvY2tlZDsKQEAgLTE4OSwyMSArMTkwLDIxIEBACiB7CiAJcmV0dXJuIChpbnRyX2luZm8gJiAoSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLIHwgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLIHwKIAkJCSAgICAgSU5UUl9JTkZPX1ZBTElEX01BU0spKSA9PQotCQkoSU5UUl9UWVBFX0VYQ0VQVElPTiB8IFBGX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwkJKElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTiB8IFBGX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfbm9fZGV2aWNlKHUzMiBpbnRyX2luZm8pCiB7CiAJcmV0dXJuIChpbnRyX2luZm8gJiAoSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLIHwgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLIHwKIAkJCSAgICAgSU5UUl9JTkZPX1ZBTElEX01BU0spKSA9PQotCQkoSU5UUl9UWVBFX0VYQ0VQVElPTiB8IE5NX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwkJKElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTiB8IE5NX1ZFQ1RPUiB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaXNfaW52YWxpZF9vcGNvZGUodTMyIGludHJfaW5mbykKIHsKIAlyZXR1cm4gKGludHJfaW5mbyAmIChJTlRSX0lORk9fSU5UUl9UWVBFX01BU0sgfCBJTlRSX0lORk9fVkVDVE9SX01BU0sgfAogCQkJICAgICBJTlRSX0lORk9fVkFMSURfTUFTSykpID09Ci0JCShJTlRSX1RZUEVfRVhDRVBUSU9OIHwgVURfVkVDVE9SIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOworCQkoSU5UUl9UWVBFX0hBUkRfRVhDRVBUSU9OIHwgVURfVkVDVE9SIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpc19leHRlcm5hbF9pbnRlcnJ1cHQodTMyIGludHJfaW5mbykKQEAgLTQ4MCw4ICs0ODEsMTMgQEAKIAllYiA9ICgxdSA8PCBQRl9WRUNUT1IpIHwgKDF1IDw8IFVEX1ZFQ1RPUik7CiAJaWYgKCF2Y3B1LT5mcHVfYWN0aXZlKQogCQllYiB8PSAxdSA8PCBOTV9WRUNUT1I7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpCi0JCWViIHw9IDF1IDw8IERCX1ZFQ1RPUjsKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfRU5BQkxFKSB7CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmCisJCSAgICAoS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkKKwkJCWViIHw9IDF1IDw8IERCX1ZFQ1RPUjsKKwkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9TV19CUCkKKwkJCWViIHw9IDF1IDw8IEJQX1ZFQ1RPUjsKKwl9CiAJaWYgKHZjcHUtPmFyY2gucm1vZGUuYWN0aXZlKQogCQllYiA9IH4wOwogCWlmICh2bV9uZWVkX2VwdCgpKQpAQCAtNzQ3LDI5ICs3NTMsMzMgQEAKIAkJCQlib29sIGhhc19lcnJvcl9jb2RlLCB1MzIgZXJyb3JfY29kZSkKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKKwl1MzIgaW50cl9pbmZvID0gbnIgfCBJTlRSX0lORk9fVkFMSURfTUFTSzsKIAotCWlmIChoYXNfZXJyb3JfY29kZSkKKwlpZiAoaGFzX2Vycm9yX2NvZGUpIHsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0VYQ0VQVElPTl9FUlJPUl9DT0RFLCBlcnJvcl9jb2RlKTsKKwkJaW50cl9pbmZvIHw9IElOVFJfSU5GT19ERUxJVkVSX0NPREVfTUFTSzsKKwl9CiAKIAlpZiAodmNwdS0+YXJjaC5ybW9kZS5hY3RpdmUpIHsKIAkJdm14LT5ybW9kZS5pcnEucGVuZGluZyA9IHRydWU7CiAJCXZteC0+cm1vZGUuaXJxLnZlY3RvciA9IG5yOwogCQl2bXgtPnJtb2RlLmlycS5yaXAgPSBrdm1fcmlwX3JlYWQodmNwdSk7Ci0JCWlmIChuciA9PSBCUF9WRUNUT1IpCisJCWlmIChuciA9PSBCUF9WRUNUT1IgfHwgbnIgPT0gT0ZfVkVDVE9SKQogCQkJdm14LT5ybW9kZS5pcnEucmlwKys7Ci0JCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQsCi0JCQkgICAgIG5yIHwgSU5UUl9UWVBFX1NPRlRfSU5UUgotCQkJICAgICB8IChoYXNfZXJyb3JfY29kZSA/IElOVFJfSU5GT19ERUxJVkVSX0NPREVfTUFTSyA6IDApCi0JCQkgICAgIHwgSU5UUl9JTkZPX1ZBTElEX01BU0spOworCQlpbnRyX2luZm8gfD0gSU5UUl9UWVBFX1NPRlRfSU5UUjsKKwkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOVFJfSU5GT19GSUVMRCwgaW50cl9pbmZvKTsKIAkJdm1jc193cml0ZTMyKFZNX0VOVFJZX0lOU1RSVUNUSU9OX0xFTiwgMSk7CiAJCWt2bV9yaXBfd3JpdGUodmNwdSwgdm14LT5ybW9kZS5pcnEucmlwIC0gMSk7CiAJCXJldHVybjsKIAl9CiAKLQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELAotCQkgICAgIG5yIHwgSU5UUl9UWVBFX0VYQ0VQVElPTgotCQkgICAgIHwgKGhhc19lcnJvcl9jb2RlID8gSU5UUl9JTkZPX0RFTElWRVJfQ09ERV9NQVNLIDogMCkKLQkJICAgICB8IElOVFJfSU5GT19WQUxJRF9NQVNLKTsKKwlpZiAobnIgPT0gQlBfVkVDVE9SIHx8IG5yID09IE9GX1ZFQ1RPUikgeworCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5TVFJVQ1RJT05fTEVOLCAxKTsKKwkJaW50cl9pbmZvIHw9IElOVFJfVFlQRV9TT0ZUX0VYQ0VQVElPTjsKKwl9IGVsc2UKKwkJaW50cl9pbmZvIHw9IElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTjsKKworCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9JTlRSX0lORk9fRklFTEQsIGludHJfaW5mbyk7CiB9CiAKIHN0YXRpYyBib29sIHZteF9leGNlcHRpb25faW5qZWN0ZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtODU2LDExICs4NjYsOCBAQAogICogd3JpdGVzICdndWVzdF90c2MnIGludG8gZ3Vlc3QncyB0aW1lc3RhbXAgY291bnRlciAicmVnaXN0ZXIiCiAgKiBndWVzdF90c2MgPSBob3N0X3RzYyArIHRzY19vZmZzZXQgPT0+IHRzY19vZmZzZXQgPSBndWVzdF90c2MgLSBob3N0X3RzYwogICovCi1zdGF0aWMgdm9pZCBndWVzdF93cml0ZV90c2ModTY0IGd1ZXN0X3RzYykKK3N0YXRpYyB2b2lkIGd1ZXN0X3dyaXRlX3RzYyh1NjQgZ3Vlc3RfdHNjLCB1NjQgaG9zdF90c2MpCiB7Ci0JdTY0IGhvc3RfdHNjOwotCi0JcmR0c2NsbChob3N0X3RzYyk7CiAJdm1jc193cml0ZTY0KFRTQ19PRkZTRVQsIGd1ZXN0X3RzYyAtIGhvc3RfdHNjKTsKIH0KIApAQCAtOTI1LDE0ICs5MzIsMTUgQEAKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKIAlzdHJ1Y3Qga3ZtX21zcl9lbnRyeSAqbXNyOworCXU2NCBob3N0X3RzYzsKIAlpbnQgcmV0ID0gMDsKIAogCXN3aXRjaCAobXNyX2luZGV4KSB7Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAogCWNhc2UgTVNSX0VGRVI6CiAJCXZteF9sb2FkX2hvc3Rfc3RhdGUodm14KTsKIAkJcmV0ID0ga3ZtX3NldF9tc3JfY29tbW9uKHZjcHUsIG1zcl9pbmRleCwgZGF0YSk7CiAJCWJyZWFrOworI2lmZGVmIENPTkZJR19YODZfNjQKIAljYXNlIE1TUl9GU19CQVNFOgogCQl2bWNzX3dyaXRlbChHVUVTVF9GU19CQVNFLCBkYXRhKTsKIAkJYnJlYWs7CkBAIC05NTAsNyArOTU4LDggQEAKIAkJdm1jc193cml0ZWwoR1VFU1RfU1lTRU5URVJfRVNQLCBkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfSUEzMl9USU1FX1NUQU1QX0NPVU5URVI6Ci0JCWd1ZXN0X3dyaXRlX3RzYyhkYXRhKTsKKwkJcmR0c2NsbChob3N0X3RzYyk7CisJCWd1ZXN0X3dyaXRlX3RzYyhkYXRhLCBob3N0X3RzYyk7CiAJCWJyZWFrOwogCWNhc2UgTVNSX1A2X1BFUkZDVFIwOgogCWNhc2UgTVNSX1A2X1BFUkZDVFIxOgpAQCAtOTk5LDQwICsxMDA4LDI4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNldF9ndWVzdF9kZWJ1ZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZykKK3N0YXRpYyBpbnQgc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKQogewotCXVuc2lnbmVkIGxvbmcgZHI3ID0gMHg0MDA7Ci0JaW50IG9sZF9zaW5nbGVzdGVwOworCWludCBvbGRfZGVidWcgPSB2Y3B1LT5ndWVzdF9kZWJ1ZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jb2xkX3NpbmdsZXN0ZXAgPSB2Y3B1LT5ndWVzdF9kZWJ1Zy5zaW5nbGVzdGVwOworCXZjcHUtPmd1ZXN0X2RlYnVnID0gZGJnLT5jb250cm9sOworCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VOQUJMRSkpCisJCXZjcHUtPmd1ZXN0X2RlYnVnID0gMDsKIAotCXZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQgPSBkYmctPmVuYWJsZWQ7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQpIHsKLQkJaW50IGk7CisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkKKwkJdm1jc193cml0ZWwoR1VFU1RfRFI3LCBkYmctPmFyY2guZGVidWdyZWdbN10pOworCWVsc2UKKwkJdm1jc193cml0ZWwoR1VFU1RfRFI3LCB2Y3B1LT5hcmNoLmRyNyk7CiAKLQkJZHI3IHw9IDB4MjAwOyAgLyogZXhhY3QgKi8KLQkJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkgewotCQkJaWYgKCFkYmctPmJyZWFrcG9pbnRzW2ldLmVuYWJsZWQpCi0JCQkJY29udGludWU7Ci0JCQl2Y3B1LT5ndWVzdF9kZWJ1Zy5icFtpXSA9IGRiZy0+YnJlYWtwb2ludHNbaV0uYWRkcmVzczsKLQkJCWRyNyB8PSAyIDw8IChpKjIpOyAgICAvKiBnbG9iYWwgZW5hYmxlICovCi0JCQlkcjcgfD0gMCA8PCAoaSo0KzE2KTsgLyogZXhlY3V0aW9uIGJyZWFrcG9pbnQgKi8KLQkJfQotCi0JCXZjcHUtPmd1ZXN0X2RlYnVnLnNpbmdsZXN0ZXAgPSBkYmctPnNpbmdsZXN0ZXA7Ci0JfSBlbHNlCi0JCXZjcHUtPmd1ZXN0X2RlYnVnLnNpbmdsZXN0ZXAgPSAwOwotCi0JaWYgKG9sZF9zaW5nbGVzdGVwICYmICF2Y3B1LT5ndWVzdF9kZWJ1Zy5zaW5nbGVzdGVwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJZmxhZ3MgPSB2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUyk7CisJZmxhZ3MgPSB2bWNzX3JlYWRsKEdVRVNUX1JGTEFHUyk7CisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCisJCWZsYWdzIHw9IFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1JGOworCWVsc2UgaWYgKG9sZF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19TSU5HTEVTVEVQKQogCQlmbGFncyAmPSB+KFg4Nl9FRkxBR1NfVEYgfCBYODZfRUZMQUdTX1JGKTsKLQkJdm1jc193cml0ZWwoR1VFU1RfUkZMQUdTLCBmbGFncyk7Ci0JfQorCXZtY3Nfd3JpdGVsKEdVRVNUX1JGTEFHUywgZmxhZ3MpOwogCiAJdXBkYXRlX2V4Y2VwdGlvbl9iaXRtYXAodmNwdSk7Ci0Jdm1jc193cml0ZWwoR1VFU1RfRFI3LCBkcjcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDMzLDYgKzE0MzAsMjkgQEAKIAlpbml0X3Jtb2RlKHZjcHUtPmt2bSk7CiB9CiAKK3N0YXRpYyB2b2lkIHZteF9zZXRfZWZlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBlZmVyKQoreworCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOworCXN0cnVjdCBrdm1fbXNyX2VudHJ5ICptc3IgPSBmaW5kX21zcl9lbnRyeSh2bXgsIE1TUl9FRkVSKTsKKworCXZjcHUtPmFyY2guc2hhZG93X2VmZXIgPSBlZmVyOworCWlmICghbXNyKQorCQlyZXR1cm47CisJaWYgKGVmZXIgJiBFRkVSX0xNQSkgeworCQl2bWNzX3dyaXRlMzIoVk1fRU5UUllfQ09OVFJPTFMsCisJCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKSB8CisJCQkgICAgIFZNX0VOVFJZX0lBMzJFX01PREUpOworCQltc3ItPmRhdGEgPSBlZmVyOworCX0gZWxzZSB7CisJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKKwkJCSAgICAgdm1jc19yZWFkMzIoVk1fRU5UUllfQ09OVFJPTFMpICYKKwkJCSAgICAgflZNX0VOVFJZX0lBMzJFX01PREUpOworCisJCW1zci0+ZGF0YSA9IGVmZXIgJiB+RUZFUl9MTUU7CisJfQorCXNldHVwX21zcnModm14KTsKK30KKwogI2lmZGVmIENPTkZJR19YODZfNjQKIAogc3RhdGljIHZvaWQgZW50ZXJfbG1vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMTQ0NywxMyArMTQ2Nyw4IEBACiAJCQkgICAgIChndWVzdF90cl9hciAmIH5BUl9UWVBFX01BU0spCiAJCQkgICAgIHwgQVJfVFlQRV9CVVNZXzY0X1RTUyk7CiAJfQotCiAJdmNwdS0+YXJjaC5zaGFkb3dfZWZlciB8PSBFRkVSX0xNQTsKLQotCWZpbmRfbXNyX2VudHJ5KHRvX3ZteCh2Y3B1KSwgTVNSX0VGRVIpLT5kYXRhIHw9IEVGRVJfTE1BIHwgRUZFUl9MTUU7Ci0Jdm1jc193cml0ZTMyKFZNX0VOVFJZX0NPTlRST0xTLAotCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKQotCQkgICAgIHwgVk1fRU5UUllfSUEzMkVfTU9ERSk7CisJdm14X3NldF9lZmVyKHZjcHUsIHZjcHUtPmFyY2guc2hhZG93X2VmZXIpOwogfQogCiBzdGF0aWMgdm9pZCBleGl0X2xtb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTE2MTIsMzAgKzE2MjcsNiBAQAogCXZtY3Nfd3JpdGVsKEdVRVNUX0NSNCwgaHdfY3I0KTsKIH0KIAotc3RhdGljIHZvaWQgdm14X3NldF9lZmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGVmZXIpCi17Ci0Jc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7Ci0Jc3RydWN0IGt2bV9tc3JfZW50cnkgKm1zciA9IGZpbmRfbXNyX2VudHJ5KHZteCwgTVNSX0VGRVIpOwotCi0JdmNwdS0+YXJjaC5zaGFkb3dfZWZlciA9IGVmZXI7Ci0JaWYgKCFtc3IpCi0JCXJldHVybjsKLQlpZiAoZWZlciAmIEVGRVJfTE1BKSB7Ci0JCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKLQkJCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKSB8Ci0JCQkJICAgICBWTV9FTlRSWV9JQTMyRV9NT0RFKTsKLQkJbXNyLT5kYXRhID0gZWZlcjsKLQotCX0gZWxzZSB7Ci0JCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKLQkJCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKSAmCi0JCQkJICAgICB+Vk1fRU5UUllfSUEzMkVfTU9ERSk7Ci0KLQkJbXNyLT5kYXRhID0gZWZlciAmIH5FRkVSX0xNRTsKLQl9Ci0Jc2V0dXBfbXNycyh2bXgpOwotfQotCiBzdGF0aWMgdTY0IHZteF9nZXRfc2VnbWVudF9iYXNlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNlZykKIHsKIAlzdHJ1Y3Qga3ZtX3ZteF9zZWdtZW50X2ZpZWxkICpzZiA9ICZrdm1fdm14X3NlZ21lbnRfZmllbGRzW3NlZ107CkBAIC0xNjUzLDcgKzE2NDQsNyBAQAogCXZhci0+bGltaXQgPSB2bWNzX3JlYWQzMihzZi0+bGltaXQpOwogCXZhci0+c2VsZWN0b3IgPSB2bWNzX3JlYWQxNihzZi0+c2VsZWN0b3IpOwogCWFyID0gdm1jc19yZWFkMzIoc2YtPmFyX2J5dGVzKTsKLQlpZiAoYXIgJiBBUl9VTlVTQUJMRV9NQVNLKQorCWlmICgoYXIgJiBBUl9VTlVTQUJMRV9NQVNLKSAmJiAhZW11bGF0ZV9pbnZhbGlkX2d1ZXN0X3N0YXRlKQogCQlhciA9IDA7CiAJdmFyLT50eXBlID0gYXIgJiAxNTsKIAl2YXItPnMgPSAoYXIgPj4gNCkgJiAxOwpAQCAtMTc4OCwxNCArMTc3OSwxNiBAQAogCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmY3MsIFZDUFVfU1JFR19DUyk7CiAJY3NfcnBsID0gY3Muc2VsZWN0b3IgJiBTRUxFQ1RPUl9SUExfTUFTSzsKIAorCWlmIChjcy51bnVzYWJsZSkKKwkJcmV0dXJuIGZhbHNlOwogCWlmICh+Y3MudHlwZSAmIChBUl9UWVBFX0NPREVfTUFTS3xBUl9UWVBFX0FDQ0VTU0VTX01BU0spKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKCFjcy5zKQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKCEofmNzLnR5cGUgJiAoQVJfVFlQRV9DT0RFX01BU0t8QVJfVFlQRV9XUklURUFCTEVfTUFTSykpKSB7CisJaWYgKGNzLnR5cGUgJiBBUl9UWVBFX1dSSVRFQUJMRV9NQVNLKSB7CiAJCWlmIChjcy5kcGwgPiBjc19ycGwpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIGlmIChjcy50eXBlICYgQVJfVFlQRV9DT0RFX01BU0spIHsKKwl9IGVsc2UgewogCQlpZiAoY3MuZHBsICE9IGNzX3JwbCkKIAkJCXJldHVybiBmYWxzZTsKIAl9CkBAIC0xODE0LDcgKzE4MDcsOSBAQAogCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmc3MsIFZDUFVfU1JFR19TUyk7CiAJc3NfcnBsID0gc3Muc2VsZWN0b3IgJiBTRUxFQ1RPUl9SUExfTUFTSzsKIAotCWlmICgoc3MudHlwZSAhPSAzKSB8fCAoc3MudHlwZSAhPSA3KSkKKwlpZiAoc3MudW51c2FibGUpCisJCXJldHVybiB0cnVlOworCWlmIChzcy50eXBlICE9IDMgJiYgc3MudHlwZSAhPSA3KQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKCFzcy5zKQogCQlyZXR1cm4gZmFsc2U7CkBAIC0xODM0LDYgKzE4MjksOCBAQAogCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmdmFyLCBzZWcpOwogCXJwbCA9IHZhci5zZWxlY3RvciAmIFNFTEVDVE9SX1JQTF9NQVNLOwogCisJaWYgKHZhci51bnVzYWJsZSkKKwkJcmV0dXJuIHRydWU7CiAJaWYgKCF2YXIucykKIAkJcmV0dXJuIGZhbHNlOwogCWlmICghdmFyLnByZXNlbnQpCkBAIC0xODU1LDkgKzE4NTIsMTEgQEAKIAogCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmdHIsIFZDUFVfU1JFR19UUik7CiAKKwlpZiAodHIudW51c2FibGUpCisJCXJldHVybiBmYWxzZTsKIAlpZiAodHIuc2VsZWN0b3IgJiBTRUxFQ1RPUl9USV9NQVNLKQkvKiBUSSA9IDEgKi8KIAkJcmV0dXJuIGZhbHNlOwotCWlmICgodHIudHlwZSAhPSAzKSB8fCAodHIudHlwZSAhPSAxMSkpIC8qIFRPRE86IENoZWNrIGlmIGd1ZXN0IGlzIGluIElBMzJlIG1vZGUgKi8KKwlpZiAodHIudHlwZSAhPSAzICYmIHRyLnR5cGUgIT0gMTEpIC8qIFRPRE86IENoZWNrIGlmIGd1ZXN0IGlzIGluIElBMzJlIG1vZGUgKi8KIAkJcmV0dXJuIGZhbHNlOwogCWlmICghdHIucHJlc2VudCkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTg3MSw2ICsxODcwLDggQEAKIAogCXZteF9nZXRfc2VnbWVudCh2Y3B1LCAmbGR0ciwgVkNQVV9TUkVHX0xEVFIpOwogCisJaWYgKGxkdHIudW51c2FibGUpCisJCXJldHVybiB0cnVlOwogCWlmIChsZHRyLnNlbGVjdG9yICYgU0VMRUNUT1JfVElfTUFTSykJLyogVEkgPSAxICovCiAJCXJldHVybiBmYWxzZTsKIAlpZiAobGR0ci50eXBlICE9IDIpCkBAIC0yMTEyLDcgKzIxMTMsNyBAQAogewogCXUzMiBob3N0X3N5c2VudGVyX2NzLCBtc3JfbG93LCBtc3JfaGlnaDsKIAl1MzIganVuazsKLQl1NjQgaG9zdF9wYXQ7CisJdTY0IGhvc3RfcGF0LCB0c2NfdGhpcywgdHNjX2Jhc2U7CiAJdW5zaWduZWQgbG9uZyBhOwogCXN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlIGR0OwogCWludCBpOwpAQCAtMjI0MCw2ICsyMjQxLDEyIEBACiAJdm1jc193cml0ZWwoQ1IwX0dVRVNUX0hPU1RfTUFTSywgfjBVTCk7CiAJdm1jc193cml0ZWwoQ1I0X0dVRVNUX0hPU1RfTUFTSywgS1ZNX0dVRVNUX0NSNF9NQVNLKTsKIAorCXRzY19iYXNlID0gdm14LT52Y3B1Lmt2bS0+YXJjaC52bV9pbml0X3RzYzsKKwlyZHRzY2xsKHRzY190aGlzKTsKKwlpZiAodHNjX3RoaXMgPCB2bXgtPnZjcHUua3ZtLT5hcmNoLnZtX2luaXRfdHNjKQorCQl0c2NfYmFzZSA9IHRzY190aGlzOworCisJZ3Vlc3Rfd3JpdGVfdHNjKDAsIHRzY19iYXNlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjMxOSw3ICsyMzI2LDYgQEAKIAkJa3ZtX3JpcF93cml0ZSh2Y3B1LCAwKTsKIAlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JTUCwgMCk7CiAKLQkvKiB0b2RvOiBkcjAgPSBkcjEgPSBkcjIgPSBkcjMgPSAwOyBkcjYgPSAweGZmZmYwZmYwICovCiAJdm1jc193cml0ZWwoR1VFU1RfRFI3LCAweDQwMCk7CiAKIAl2bWNzX3dyaXRlbChHVUVTVF9HRFRSX0JBU0UsIDApOwpAQCAtMjMzMiw4ICsyMzM4LDYgQEAKIAl2bWNzX3dyaXRlMzIoR1VFU1RfSU5URVJSVVBUSUJJTElUWV9JTkZPLCAwKTsKIAl2bWNzX3dyaXRlMzIoR1VFU1RfUEVORElOR19EQkdfRVhDRVBUSU9OUywgMCk7CiAKLQlndWVzdF93cml0ZV90c2MoMCk7Ci0KIAkvKiBTcGVjaWFsIHJlZ2lzdGVycyAqLwogCXZtY3Nfd3JpdGU2NChHVUVTVF9JQTMyX0RFQlVHQ1RMLCAwKTsKIApAQCAtMjQ4Niw2ICsyNDkwLDExIEBACiB7CiAJdm14X3VwZGF0ZV93aW5kb3dfc3RhdGVzKHZjcHUpOwogCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCisJCXZtY3NfY2xlYXJfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCisJCQkJR1VFU1RfSU5UUl9TVEFURV9TVEkgfAorCQkJCUdVRVNUX0lOVFJfU1RBVEVfTU9WX1NTKTsKKwogCWlmICh2Y3B1LT5hcmNoLm5taV9wZW5kaW5nICYmICF2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCkgewogCQlpZiAodmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZykgewogCQkJZW5hYmxlX25taV93aW5kb3codmNwdSk7CkBAIC0yNTM2LDI0ICsyNTQ1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQga3ZtX2d1ZXN0X2RlYnVnX3ByZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0Jc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnID0gJnZjcHUtPmd1ZXN0X2RlYnVnOwotCi0Jc2V0X2RlYnVncmVnKGRiZy0+YnBbMF0sIDApOwotCXNldF9kZWJ1Z3JlZyhkYmctPmJwWzFdLCAxKTsKLQlzZXRfZGVidWdyZWcoZGJnLT5icFsyXSwgMik7Ci0Jc2V0X2RlYnVncmVnKGRiZy0+YnBbM10sIDMpOwotCi0JaWYgKGRiZy0+c2luZ2xlc3RlcCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCWZsYWdzID0gdm1jc19yZWFkbChHVUVTVF9SRkxBR1MpOwotCQlmbGFncyB8PSBYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19SRjsKLQkJdm1jc193cml0ZWwoR1VFU1RfUkZMQUdTLCBmbGFncyk7Ci0JfQotfQotCiBzdGF0aWMgaW50IGhhbmRsZV9ybW9kZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgaW50IHZlYywgdTMyIGVycl9jb2RlKQogewpAQCAtMjU3MCw5ICsyNTYxLDE3IEBACiAJICogICAgICAgIHRoZSByZXF1aXJlZCBkZWJ1Z2dpbmcgaW5mcmFzdHJ1Y3R1cmUgcmV3b3JrLgogCSAqLwogCXN3aXRjaCAodmVjKSB7Ci0JY2FzZSBERV9WRUNUT1I6CiAJY2FzZSBEQl9WRUNUT1I6CisJCWlmICh2Y3B1LT5ndWVzdF9kZWJ1ZyAmCisJCSAgICAoS1ZNX0dVRVNUREJHX1NJTkdMRVNURVAgfCBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkKKwkJCXJldHVybiAwOworCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIHZlYyk7CisJCXJldHVybiAxOwogCWNhc2UgQlBfVkVDVE9SOgorCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX1NXX0JQKQorCQkJcmV0dXJuIDA7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgREVfVkVDVE9SOgogCWNhc2UgT0ZfVkVDVE9SOgogCWNhc2UgQlJfVkVDVE9SOgogCWNhc2UgVURfVkVDVE9SOgpAQCAtMjU4OSw4ICsyNTg4LDggQEAKIHN0YXRpYyBpbnQgaGFuZGxlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQogewogCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOwotCXUzMiBpbnRyX2luZm8sIGVycm9yX2NvZGU7Ci0JdW5zaWduZWQgbG9uZyBjcjIsIHJpcDsKKwl1MzIgaW50cl9pbmZvLCBleF9ubywgZXJyb3JfY29kZTsKKwl1bnNpZ25lZCBsb25nIGNyMiwgcmlwLCBkcjY7CiAJdTMyIHZlY3RfaW5mbzsKIAllbnVtIGVtdWxhdGlvbl9yZXN1bHQgZXI7CiAKQEAgLTI2NDksMTQgKzI2NDgsMzAgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKChpbnRyX2luZm8gJiAoSU5UUl9JTkZPX0lOVFJfVFlQRV9NQVNLIHwgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLKSkgPT0KLQkgICAgKElOVFJfVFlQRV9FWENFUFRJT04gfCAxKSkgeworCWV4X25vID0gaW50cl9pbmZvICYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOworCXN3aXRjaCAoZXhfbm8pIHsKKwljYXNlIERCX1ZFQ1RPUjoKKwkJZHI2ID0gdm1jc19yZWFkbChFWElUX1FVQUxJRklDQVRJT04pOworCQlpZiAoISh2Y3B1LT5ndWVzdF9kZWJ1ZyAmCisJCSAgICAgIChLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSkgeworCQkJdmNwdS0+YXJjaC5kcjYgPSBkcjYgfCBEUjZfRklYRURfMTsKKwkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgREJfVkVDVE9SKTsKKwkJCXJldHVybiAxOworCQl9CisJCWt2bV9ydW4tPmRlYnVnLmFyY2guZHI2ID0gZHI2IHwgRFI2X0ZJWEVEXzE7CisJCWt2bV9ydW4tPmRlYnVnLmFyY2guZHI3ID0gdm1jc19yZWFkbChHVUVTVF9EUjcpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEJQX1ZFQ1RPUjoKIAkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ERUJVRzsKLQkJcmV0dXJuIDA7CisJCWt2bV9ydW4tPmRlYnVnLmFyY2gucGMgPSB2bWNzX3JlYWRsKEdVRVNUX0NTX0JBU0UpICsgcmlwOworCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmV4Y2VwdGlvbiA9IGV4X25vOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0VYQ0VQVElPTjsKKwkJa3ZtX3J1bi0+ZXguZXhjZXB0aW9uID0gZXhfbm87CisJCWt2bV9ydW4tPmV4LmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOworCQlicmVhazsKIAl9Ci0Ja3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9FWENFUFRJT047Ci0Ja3ZtX3J1bi0+ZXguZXhjZXB0aW9uID0gaW50cl9pbmZvICYgSU5UUl9JTkZPX1ZFQ1RPUl9NQVNLOwotCWt2bV9ydW4tPmV4LmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwogCXJldHVybiAwOwogfQogCkBAIC0yNjc3LDcgKzI2OTIsNyBAQAogc3RhdGljIGludCBoYW5kbGVfaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAl1bnNpZ25lZCBsb25nIGV4aXRfcXVhbGlmaWNhdGlvbjsKLQlpbnQgc2l6ZSwgZG93biwgaW4sIHN0cmluZywgcmVwOworCWludCBzaXplLCBpbiwgc3RyaW5nOwogCXVuc2lnbmVkIHBvcnQ7CiAKIAkrK3ZjcHUtPnN0YXQuaW9fZXhpdHM7CkBAIC0yNjkzLDggKzI3MDgsNiBAQAogCiAJc2l6ZSA9IChleGl0X3F1YWxpZmljYXRpb24gJiA3KSArIDE7CiAJaW4gPSAoZXhpdF9xdWFsaWZpY2F0aW9uICYgOCkgIT0gMDsKLQlkb3duID0gKHZtY3NfcmVhZGwoR1VFU1RfUkZMQUdTKSAmIFg4Nl9FRkxBR1NfREYpICE9IDA7Ci0JcmVwID0gKGV4aXRfcXVhbGlmaWNhdGlvbiAmIDMyKSAhPSAwOwogCXBvcnQgPSBleGl0X3F1YWxpZmljYXRpb24gPj4gMTY7CiAKIAlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwpAQCAtMjc5NSwyMSArMjgwOCw0NCBAQAogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBkciwgcmVnOwogCi0JLyoKLQkgKiBGSVhNRTogdGhpcyBjb2RlIGFzc3VtZXMgdGhlIGhvc3QgaXMgZGVidWdnaW5nIHRoZSBndWVzdC4KLQkgKiAgICAgICAgbmVlZCB0byBkZWFsIHdpdGggZ3Vlc3QgZGVidWdnaW5nIGl0c2VsZiB0b28uCi0JICovCisJZHIgPSB2bWNzX3JlYWRsKEdVRVNUX0RSNyk7CisJaWYgKGRyICYgRFI3X0dEKSB7CisJCS8qCisJCSAqIEFzIHRoZSB2bS1leGl0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGUgZGVidWcgdHJhcCwgd2UKKwkJICogbmVlZCB0byBlbXVsYXRlIHRoZSBsYXR0ZXIsIGVpdGhlciBmb3IgdGhlIGhvc3Qgb3IgdGhlCisJCSAqIGd1ZXN0IGRlYnVnZ2luZyBpdHNlbGYuCisJCSAqLworCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSB7CisJCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLmRyNiA9IHZjcHUtPmFyY2guZHI2OworCQkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5kcjcgPSBkcjsKKwkJCWt2bV9ydW4tPmRlYnVnLmFyY2gucGMgPQorCQkJCXZtY3NfcmVhZGwoR1VFU1RfQ1NfQkFTRSkgKworCQkJCXZtY3NfcmVhZGwoR1VFU1RfUklQKTsKKwkJCWt2bV9ydW4tPmRlYnVnLmFyY2guZXhjZXB0aW9uID0gREJfVkVDVE9SOworCQkJa3ZtX3J1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9ERUJVRzsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJdmNwdS0+YXJjaC5kcjcgJj0gfkRSN19HRDsKKwkJCXZjcHUtPmFyY2guZHI2IHw9IERSNl9CRDsKKwkJCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgdmNwdS0+YXJjaC5kcjcpOworCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBEQl9WRUNUT1IpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKIAlleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWRsKEVYSVRfUVVBTElGSUNBVElPTik7Ci0JZHIgPSBleGl0X3F1YWxpZmljYXRpb24gJiA3OwotCXJlZyA9IChleGl0X3F1YWxpZmljYXRpb24gPj4gOCkgJiAxNTsKLQlpZiAoZXhpdF9xdWFsaWZpY2F0aW9uICYgMTYpIHsKLQkJLyogbW92IGZyb20gZHIgKi8KKwlkciA9IGV4aXRfcXVhbGlmaWNhdGlvbiAmIERFQlVHX1JFR19BQ0NFU1NfTlVNOworCXJlZyA9IERFQlVHX1JFR19BQ0NFU1NfUkVHKGV4aXRfcXVhbGlmaWNhdGlvbik7CisJaWYgKGV4aXRfcXVhbGlmaWNhdGlvbiAmIFRZUEVfTU9WX0ZST01fRFIpIHsKIAkJc3dpdGNoIChkcikgeworCQljYXNlIDAgLi4uIDM6CisJCQl2YWwgPSB2Y3B1LT5hcmNoLmRiW2RyXTsKKwkJCWJyZWFrOwogCQljYXNlIDY6Ci0JCQl2YWwgPSAweGZmZmYwZmYwOworCQkJdmFsID0gdmNwdS0+YXJjaC5kcjY7CiAJCQlicmVhazsKIAkJY2FzZSA3OgotCQkJdmFsID0gMHg0MDA7CisJCQl2YWwgPSB2Y3B1LT5hcmNoLmRyNzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJdmFsID0gMDsKQEAgLTI4MTcsNyArMjg1MywzOCBAQAogCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgcmVnLCB2YWwpOwogCQlLVk1UUkFDRV8yRChEUl9SRUFELCB2Y3B1LCAodTMyKWRyLCAodTMyKXZhbCwgaGFuZGxlcik7CiAJfSBlbHNlIHsKLQkJLyogbW92IHRvIGRyICovCisJCXZhbCA9IHZjcHUtPmFyY2gucmVnc1tyZWddOworCQlzd2l0Y2ggKGRyKSB7CisJCWNhc2UgMCAuLi4gMzoKKwkJCXZjcHUtPmFyY2guZGJbZHJdID0gdmFsOworCQkJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkKKwkJCQl2Y3B1LT5hcmNoLmVmZl9kYltkcl0gPSB2YWw7CisJCQlicmVhazsKKwkJY2FzZSA0IC4uLiA1OgorCQkJaWYgKHZjcHUtPmFyY2guY3I0ICYgWDg2X0NSNF9ERSkKKwkJCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIFVEX1ZFQ1RPUik7CisJCQlicmVhazsKKwkJY2FzZSA2OgorCQkJaWYgKHZhbCAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgeworCQkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgR1BfVkVDVE9SKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXZjcHUtPmFyY2guZHI2ID0gKHZhbCAmIERSNl9WT0xBVElMRSkgfCBEUjZfRklYRURfMTsKKwkJCWJyZWFrOworCQljYXNlIDc6CisJCQlpZiAodmFsICYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7CisJCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbih2Y3B1LCBHUF9WRUNUT1IpOworCQkJCWJyZWFrOworCQkJfQorCQkJdmNwdS0+YXJjaC5kcjcgPSAodmFsICYgRFI3X1ZPTEFUSUxFKSB8IERSN19GSVhFRF8xOworCQkJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkgeworCQkJCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgdmNwdS0+YXJjaC5kcjcpOworCQkJCXZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgPQorCQkJCQkodmFsICYgRFI3X0JQX0VOX01BU0spOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJS1ZNVFJBQ0VfMkQoRFJfV1JJVEUsIHZjcHUsICh1MzIpZHIsICh1MzIpdmFsLCBoYW5kbGVyKTsKIAl9CiAJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKIAlyZXR1cm4gMTsKQEAgLTI5NjgsMTcgKzMwMzUsMjUgQEAKIAl9CiAJdHNzX3NlbGVjdG9yID0gZXhpdF9xdWFsaWZpY2F0aW9uOwogCi0JcmV0dXJuIGt2bV90YXNrX3N3aXRjaCh2Y3B1LCB0c3Nfc2VsZWN0b3IsIHJlYXNvbik7CisJaWYgKCFrdm1fdGFza19zd2l0Y2godmNwdSwgdHNzX3NlbGVjdG9yLCByZWFzb24pKQorCQlyZXR1cm4gMDsKKworCS8qIGNsZWFyIGFsbCBsb2NhbCBicmVha3BvaW50IGVuYWJsZSBmbGFncyAqLworCXZtY3Nfd3JpdGVsKEdVRVNUX0RSNywgdm1jc19yZWFkbChHVUVTVF9EUjcpICYgfjU1KTsKKworCS8qCisJICogVE9ETzogV2hhdCBhYm91dCBkZWJ1ZyB0cmFwcyBvbiB0c3Mgc3dpdGNoPworCSAqICAgICAgIEFyZSB3ZSBzdXBwb3NlZCB0byBpbmplY3QgdGhlbSBhbmQgdXBkYXRlIGRyNj8KKwkgKi8KKworCXJldHVybiAxOwogfQogCiBzdGF0aWMgaW50IGhhbmRsZV9lcHRfdmlvbGF0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pCiB7CiAJdTY0IGV4aXRfcXVhbGlmaWNhdGlvbjsKLQllbnVtIGVtdWxhdGlvbl9yZXN1bHQgZXI7CiAJZ3BhX3QgZ3BhOwotCXVuc2lnbmVkIGxvbmcgaHZhOwogCWludCBnbGFfdmFsaWRpdHk7Ci0JaW50IHI7CiAKIAlleGl0X3F1YWxpZmljYXRpb24gPSB2bWNzX3JlYWQ2NChFWElUX1FVQUxJRklDQVRJT04pOwogCkBAIC0zMDAxLDMyICszMDc2LDcgQEAKIAl9CiAKIAlncGEgPSB2bWNzX3JlYWQ2NChHVUVTVF9QSFlTSUNBTF9BRERSRVNTKTsKLQlodmEgPSBnZm5fdG9faHZhKHZjcHUtPmt2bSwgZ3BhID4+IFBBR0VfU0hJRlQpOwotCWlmICgha3ZtX2lzX2Vycm9yX2h2YShodmEpKSB7Ci0JCXIgPSBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhICYgUEFHRV9NQVNLLCAwKTsKLQkJaWYgKHIgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkVQVDogTm90IGVub3VnaCBtZW1vcnkhXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCS8qIG11c3QgYmUgTU1JTyAqLwotCQllciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwga3ZtX3J1biwgMCwgMCwgMCk7Ci0KLQkJaWYgKGVyID09IEVNVUxBVEVfRkFJTCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgIkVQVDogRmFpbCB0byBoYW5kbGUgRVBUIHZpb2xhdGlvbiB2bWV4aXQhZXIgaXMgJWRcbiIsCi0JCQkgZXIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICJFUFQ6IEdQQTogMHglbHgsIEdWQTogMHglbHhcbiIsCi0JCQkgKGxvbmcgdW5zaWduZWQgaW50KXZtY3NfcmVhZDY0KEdVRVNUX1BIWVNJQ0FMX0FERFJFU1MpLAotCQkJIChsb25nIHVuc2lnbmVkIGludCl2bWNzX3JlYWQ2NChHVUVTVF9MSU5FQVJfQUREUkVTUykpOwotCQkJcHJpbnRrKEtFUk5fRVJSICJFUFQ6IEV4aXQgcXVhbGlmaWNhdGlvbiBpcyAweCVseFxuIiwKLQkJCQkobG9uZyB1bnNpZ25lZCBpbnQpZXhpdF9xdWFsaWZpY2F0aW9uKTsKLQkJCXJldHVybiAtRU5PVFNVUFA7Ci0JCX0gZWxzZSBpZiAoZXIgPT0gRU1VTEFURV9ET19NTUlPKQotCQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOworCXJldHVybiBrdm1fbW11X3BhZ2VfZmF1bHQodmNwdSwgZ3BhICYgUEFHRV9NQVNLLCAwKTsKIH0KIAogc3RhdGljIGludCBoYW5kbGVfbm1pX3dpbmRvdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICprdm1fcnVuKQpAQCAtMzA0Niw3ICszMDk2LDcgQEAKIAkJCQlzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAlzdHJ1Y3QgdmNwdV92bXggKnZteCA9IHRvX3ZteCh2Y3B1KTsKLQlpbnQgZXJyOworCWVudW0gZW11bGF0aW9uX3Jlc3VsdCBlcnIgPSBFTVVMQVRFX0RPTkU7CiAKIAlwcmVlbXB0X2VuYWJsZSgpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKQEAgLTMwNzEsMTAgKzMxMjEsNyBAQAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKLQkvKiBHdWVzdCBzdGF0ZSBzaG91bGQgYmUgdmFsaWQgbm93IGV4Y2VwdCBpZiB3ZSBuZWVkIHRvCi0JICogZW11bGF0ZSBhbiBNTUlPICovCi0JaWYgKGd1ZXN0X3N0YXRlX3ZhbGlkKHZjcHUpKQotCQl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDA7CisJdm14LT5pbnZhbGlkX3N0YXRlX2VtdWxhdGlvbl9yZXN1bHQgPSBlcnI7CiB9CiAKIC8qCkBAIC0zMTIzLDggKzMxNzAsMTEgQEAKIAogCS8qIElmIHdlIG5lZWQgdG8gZW11bGF0ZSBhbiBNTUlPIGZyb20gaGFuZGxlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUKIAkgKiB3ZSBqdXN0IHJldHVybiAwICovCi0JaWYgKHZteC0+ZW11bGF0aW9uX3JlcXVpcmVkICYmIGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkKLQkJcmV0dXJuIDA7CisJaWYgKHZteC0+ZW11bGF0aW9uX3JlcXVpcmVkICYmIGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSkgeworCQlpZiAoZ3Vlc3Rfc3RhdGVfdmFsaWQodmNwdSkpCisJCQl2bXgtPmVtdWxhdGlvbl9yZXF1aXJlZCA9IDA7CisJCXJldHVybiB2bXgtPmludmFsaWRfc3RhdGVfZW11bGF0aW9uX3Jlc3VsdCAhPSBFTVVMQVRFX0RPX01NSU87CisJfQogCiAJLyogQWNjZXNzIENSMyBkb24ndCBjYXVzZSBWTUV4aXQgaW4gcGFnaW5nIG1vZGUsIHNvIHdlIG5lZWQKIAkgKiB0byBzeW5jIHdpdGggZ3Vlc3QgcmVhbCBDUjMuICovCkBAIC0zMjM4LDcgKzMyODgsOCBAQAogCQkJdm14LT52Y3B1LmFyY2gubm1pX2luamVjdGVkID0gZmFsc2U7CiAJfQogCWt2bV9jbGVhcl9leGNlcHRpb25fcXVldWUoJnZteC0+dmNwdSk7Ci0JaWYgKGlkdHZfaW5mb192YWxpZCAmJiB0eXBlID09IElOVFJfVFlQRV9FWENFUFRJT04pIHsKKwlpZiAoaWR0dl9pbmZvX3ZhbGlkICYmICh0eXBlID09IElOVFJfVFlQRV9IQVJEX0VYQ0VQVElPTiB8fAorCQkJCXR5cGUgPT0gSU5UUl9UWVBFX1NPRlRfRVhDRVBUSU9OKSkgewogCQlpZiAoaWR0X3ZlY3RvcmluZ19pbmZvICYgVkVDVE9SSU5HX0lORk9fREVMSVZFUl9DT0RFX01BU0spIHsKIAkJCWVycm9yID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19FUlJPUl9DT0RFKTsKIAkJCWt2bV9xdWV1ZV9leGNlcHRpb25fZSgmdm14LT52Y3B1LCB2ZWN0b3IsIGVycm9yKTsKQEAgLTMyNTksNiArMzMxMCwxMSBAQAogCiAJdm14X3VwZGF0ZV93aW5kb3dfc3RhdGVzKHZjcHUpOwogCisJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1NJTkdMRVNURVApCisJCXZtY3NfY2xlYXJfYml0cyhHVUVTVF9JTlRFUlJVUFRJQklMSVRZX0lORk8sCisJCQkJR1VFU1RfSU5UUl9TVEFURV9TVEkgfAorCQkJCUdVRVNUX0lOVFJfU1RBVEVfTU9WX1NTKTsKKwogCWlmICh2Y3B1LT5hcmNoLm5taV9wZW5kaW5nICYmICF2Y3B1LT5hcmNoLm5taV9pbmplY3RlZCkgewogCQlpZiAodmNwdS0+YXJjaC5pbnRlcnJ1cHQucGVuZGluZykgewogCQkJZW5hYmxlX25taV93aW5kb3codmNwdSk7CkBAIC0zMzQ3LDYgKzM0MDMsOCBAQAogCSAqLwogCXZtY3Nfd3JpdGVsKEhPU1RfQ1IwLCByZWFkX2NyMCgpKTsKIAorCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmRyNiwgNik7CisKIAlhc20oCiAJCS8qIFN0b3JlIGhvc3QgcmVnaXN0ZXJzICovCiAJCSJwdXNoICUlIlIiZHg7IHB1c2ggJSUiUiJicDsiCkBAIC0zNDQxLDYgKzM0OTksOCBAQAogCXZjcHUtPmFyY2gucmVnc19hdmFpbCA9IH4oKDEgPDwgVkNQVV9SRUdTX1JJUCkgfCAoMSA8PCBWQ1BVX1JFR1NfUlNQKSk7CiAJdmNwdS0+YXJjaC5yZWdzX2RpcnR5ID0gMDsKIAorCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmRyNiwgNik7CisKIAl2bXgtPmlkdF92ZWN0b3JpbmdfaW5mbyA9IHZtY3NfcmVhZDMyKElEVF9WRUNUT1JJTkdfSU5GT19GSUVMRCk7CiAJaWYgKHZteC0+cm1vZGUuaXJxLnBlbmRpbmcpCiAJCWZpeHVwX3Jtb2RlX2lycSh2bXgpOwpAQCAtMzU5NSw3ICszNjU1LDYgQEAKIAkudmNwdV9wdXQgPSB2bXhfdmNwdV9wdXQsCiAKIAkuc2V0X2d1ZXN0X2RlYnVnID0gc2V0X2d1ZXN0X2RlYnVnLAotCS5ndWVzdF9kZWJ1Z19wcmUgPSBrdm1fZ3Vlc3RfZGVidWdfcHJlLAogCS5nZXRfbXNyID0gdm14X2dldF9tc3IsCiAJLnNldF9tc3IgPSB2bXhfc2V0X21zciwKIAkuZ2V0X3NlZ21lbnRfYmFzZSA9IHZteF9nZXRfc2VnbWVudF9iYXNlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IDc1OGI3YTEuLjhjYTEwMGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYworKysgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlbC1pb21tdS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgpAQCAtNjksNiArNzAsOCBAQAogCiBzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfZ2V0X3N1cHBvcnRlZF9jcHVpZChzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCiAJCQkJICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcyk7CitzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqa3ZtX2ZpbmRfY3B1aWRfZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQkgICAgICB1MzIgZnVuY3Rpb24sIHUzMiBpbmRleCk7CiAKIHN0cnVjdCBrdm1feDg2X29wcyAqa3ZtX3g4Nl9vcHM7CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1feDg2X29wcyk7CkBAIC0xNzMsNiArMTc2LDcgQEAKIAkJCSAgIHUzMiBlcnJvcl9jb2RlKQogewogCSsrdmNwdS0+c3RhdC5wZl9ndWVzdDsKKwogCWlmICh2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nKSB7CiAJCWlmICh2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5uciA9PSBQRl9WRUNUT1IpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJrdm06IGluamVjdF9wYWdlX2ZhdWx0OiIKQEAgLTM2MSw2ICszNjUsNyBAQAogCX0KIAlrdm1feDg2X29wcy0+c2V0X2NyNCh2Y3B1LCBjcjQpOwogCXZjcHUtPmFyY2guY3I0ID0gY3I0OworCXZjcHUtPmFyY2gubW11LmJhc2Vfcm9sZS5jcjRfcGdlID0gKGNyNCAmIFg4Nl9DUjRfUEdFKSAmJiAhdGRwX2VuYWJsZWQ7CiAJa3ZtX21tdV9zeW5jX2dsb2JhbCh2Y3B1KTsKIAlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CiB9CkBAIC00NDIsNiArNDQ3LDExIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fZ2V0X2NyOCk7CiAKK3N0YXRpYyBpbmxpbmUgdTMyIGJpdChpbnQgYml0bm8pCit7CisJcmV0dXJuIDEgPDwgKGJpdG5vICYgMzEpOworfQorCiAvKgogICogTGlzdCBvZiBtc3IgbnVtYmVycyB3aGljaCB3ZSBleHBvc2UgdG8gdXNlcnNwYWNlIHRocm91Z2ggS1ZNX0dFVF9NU1JTCiAgKiBhbmQgS1ZNX1NFVF9NU1JTLCBhbmQgS1ZNX0dFVF9NU1JfSU5ERVhfTElTVC4KQEAgLTQ1Niw3ICs0NjYsNyBAQAogCU1TUl9DU1RBUiwgTVNSX0tFUk5FTF9HU19CQVNFLCBNU1JfU1lTQ0FMTF9NQVNLLCBNU1JfTFNUQVIsCiAjZW5kaWYKIAlNU1JfSUEzMl9USU1FX1NUQU1QX0NPVU5URVIsIE1TUl9LVk1fU1lTVEVNX1RJTUUsIE1TUl9LVk1fV0FMTF9DTE9DSywKLQlNU1JfSUEzMl9QRVJGX1NUQVRVUywgTVNSX0lBMzJfQ1JfUEFUCisJTVNSX0lBMzJfUEVSRl9TVEFUVVMsIE1TUl9JQTMyX0NSX1BBVCwgTVNSX1ZNX0hTQVZFX1BBCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgbnVtX21zcnNfdG9fc2F2ZTsKQEAgLTQ4MSw2ICs0OTEsMjggQEAKIAkJcmV0dXJuOwogCX0KIAorCWlmIChlZmVyICYgRUZFUl9GRlhTUikgeworCQlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZmVhdDsKKworCQlmZWF0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwMSwgMCk7CisJCWlmICghZmVhdCB8fCAhKGZlYXQtPmVkeCAmIGJpdChYODZfRkVBVFVSRV9GWFNSX09QVCkpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAic2V0X2VmZXI6ICNHUCwgZW5hYmxlIEZGWFNSIHcvbyBDUFVJRCBjYXBhYmlsaXR5XG4iKTsKKwkJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlpZiAoZWZlciAmIEVGRVJfU1ZNRSkgeworCQlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZmVhdDsKKworCQlmZWF0ID0ga3ZtX2ZpbmRfY3B1aWRfZW50cnkodmNwdSwgMHg4MDAwMDAwMSwgMCk7CisJCWlmICghZmVhdCB8fCAhKGZlYXQtPmVjeCAmIGJpdChYODZfRkVBVFVSRV9TVk0pKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgInNldF9lZmVyOiAjR1AsIGVuYWJsZSBTVk0gdy9vIFNWTVxuIik7CisJCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJa3ZtX3g4Nl9vcHMtPnNldF9lZmVyKHZjcHUsIGVmZXIpOwogCiAJZWZlciAmPSB+RUZFUl9MTUE7CkBAIC01ODYsNiArNjE4LDggQEAKIAkJIGh2X2Nsb2NrLT50c2NfdG9fc3lzdGVtX211bCk7CiB9CiAKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBjcHVfdHNjX2toeik7CisKIHN0YXRpYyB2b2lkIGt2bV93cml0ZV9ndWVzdF90aW1lKHN0cnVjdCBrdm1fdmNwdSAqdikKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHM7CkBAIC01OTYsOSArNjMwLDkgQEAKIAlpZiAoKCF2Y3B1LT50aW1lX3BhZ2UpKQogCQlyZXR1cm47CiAKLQlpZiAodW5saWtlbHkodmNwdS0+aHZfY2xvY2tfdHNjX2toeiAhPSB0c2Nfa2h6KSkgewotCQlrdm1fc2V0X3RpbWVfc2NhbGUodHNjX2toeiwgJnZjcHUtPmh2X2Nsb2NrKTsKLQkJdmNwdS0+aHZfY2xvY2tfdHNjX2toeiA9IHRzY19raHo7CisJaWYgKHVubGlrZWx5KHZjcHUtPmh2X2Nsb2NrX3RzY19raHogIT0gX19nZXRfY3B1X3ZhcihjcHVfdHNjX2toeikpKSB7CisJCWt2bV9zZXRfdGltZV9zY2FsZShfX2dldF9jcHVfdmFyKGNwdV90c2Nfa2h6KSwgJnZjcHUtPmh2X2Nsb2NrKTsKKwkJdmNwdS0+aHZfY2xvY2tfdHNjX2toeiA9IF9fZ2V0X2NwdV92YXIoY3B1X3RzY19raHopOwogCX0KIAogCS8qIEtlZXAgaXJxIGRpc2FibGVkIHRvIHByZXZlbnQgY2hhbmdlcyB0byB0aGUgY2xvY2sgKi8KQEAgLTYyOSw2ICs2NjMsMTYgQEAKIAltYXJrX3BhZ2VfZGlydHkodi0+a3ZtLCB2Y3B1LT50aW1lID4+IFBBR0VfU0hJRlQpOwogfQogCitzdGF0aWMgaW50IGt2bV9yZXF1ZXN0X2d1ZXN0X3RpbWVfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdikKK3sKKwlzdHJ1Y3Qga3ZtX3ZjcHVfYXJjaCAqdmNwdSA9ICZ2LT5hcmNoOworCisJaWYgKCF2Y3B1LT50aW1lX3BhZ2UpCisJCXJldHVybiAwOworCXNldF9iaXQoS1ZNX1JFUV9LVk1DTE9DS19VUERBVEUsICZ2LT5yZXF1ZXN0cyk7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBib29sIG1zcl9tdHJyX3ZhbGlkKHVuc2lnbmVkIG1zcikKIHsKIAlzd2l0Y2ggKG1zcikgewpAQCAtNzIyLDYgKzc2Niw3IEBACiAJCWJyZWFrOwogCWNhc2UgTVNSX0lBMzJfVUNPREVfUkVWOgogCWNhc2UgTVNSX0lBMzJfVUNPREVfV1JJVEU6CisJY2FzZSBNU1JfVk1fSFNBVkVfUEE6CiAJCWJyZWFrOwogCWNhc2UgMHgyMDAgLi4uIDB4MmZmOgogCQlyZXR1cm4gc2V0X21zcl9tdHJyKHZjcHUsIG1zciwgZGF0YSk7CkBAIC03NTgsNyArODAzLDcgQEAKIAkJCXZjcHUtPmFyY2gudGltZV9wYWdlID0gTlVMTDsKIAkJfQogCi0JCWt2bV93cml0ZV9ndWVzdF90aW1lKHZjcHUpOworCQlrdm1fcmVxdWVzdF9ndWVzdF90aW1lX3VwZGF0ZSh2Y3B1KTsKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6CkBAIC04NDMsNiArODg4LDcgQEAKIAljYXNlIE1TUl9JQTMyX0xBU1RCUkFOQ0hUT0lQOgogCWNhc2UgTVNSX0lBMzJfTEFTVElOVEZST01JUDoKIAljYXNlIE1TUl9JQTMyX0xBU1RJTlRUT0lQOgorCWNhc2UgTVNSX1ZNX0hTQVZFX1BBOgogCQlkYXRhID0gMDsKIAkJYnJlYWs7CiAJY2FzZSBNU1JfTVRSUmNhcDoKQEAgLTk2NywxMCArMTAxMywxMyBAQAogCWNhc2UgS1ZNX0NBUF9NTVVfU0hBRE9XX0NBQ0hFX0NPTlRST0w6CiAJY2FzZSBLVk1fQ0FQX1NFVF9UU1NfQUREUjoKIAljYXNlIEtWTV9DQVBfRVhUX0NQVUlEOgorCWNhc2UgS1ZNX0NBUF9DTE9DS1NPVVJDRToKIAljYXNlIEtWTV9DQVBfUElUOgogCWNhc2UgS1ZNX0NBUF9OT1BfSU9fREVMQVk6CiAJY2FzZSBLVk1fQ0FQX01QX1NUQVRFOgogCWNhc2UgS1ZNX0NBUF9TWU5DX01NVToKKwljYXNlIEtWTV9DQVBfUkVJTkpFQ1RfQ09OVFJPTDoKKwljYXNlIEtWTV9DQVBfSVJRX0lOSkVDVF9TVEFUVVM6CiAJCXIgPSAxOwogCQlicmVhazsKIAljYXNlIEtWTV9DQVBfQ09BTEVTQ0VEX01NSU86CkBAIC05OTEsOSArMTA0MCw2IEBACiAJY2FzZSBLVk1fQ0FQX0lPTU1VOgogCQlyID0gaW9tbXVfZm91bmQoKTsKIAkJYnJlYWs7Ci0JY2FzZSBLVk1fQ0FQX0NMT0NLU09VUkNFOgotCQlyID0gYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXIgPSAwOwogCQlicmVhazsKQEAgLTEwNDQsNyArMTA5MCw3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmY3B1aWQsIGNwdWlkX2FyZywgc2l6ZW9mIGNwdWlkKSkKIAkJCWdvdG8gb3V0OwogCQlyID0ga3ZtX2Rldl9pb2N0bF9nZXRfc3VwcG9ydGVkX2NwdWlkKCZjcHVpZCwKLQkJCWNwdWlkX2FyZy0+ZW50cmllcyk7CisJCQkJCQkgICAgICBjcHVpZF9hcmctPmVudHJpZXMpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCkBAIC0xMDY0LDcgKzExMTAsNyBAQAogdm9pZCBrdm1fYXJjaF92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogewogCWt2bV94ODZfb3BzLT52Y3B1X2xvYWQodmNwdSwgY3B1KTsKLQlrdm1fd3JpdGVfZ3Vlc3RfdGltZSh2Y3B1KTsKKwlrdm1fcmVxdWVzdF9ndWVzdF90aW1lX3VwZGF0ZSh2Y3B1KTsKIH0KIAogdm9pZCBrdm1fYXJjaF92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0xMTQyLDggKzExODgsOCBAQAogfQogCiBzdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3NldF9jcHVpZDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCi0JCQkJICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcykKKwkJCQkgICAgIHN0cnVjdCBrdm1fY3B1aWQyICpjcHVpZCwKKwkJCQkgICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcykKIHsKIAlpbnQgcjsKIApAQCAtMTE2Miw4ICsxMjA4LDggQEAKIH0KIAogc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9nZXRfY3B1aWQyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICAgc3RydWN0IGt2bV9jcHVpZDIgKmNwdWlkLAotCQkJCSAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiBfX3VzZXIgKmVudHJpZXMpCiB7CiAJaW50IHI7CiAKQEAgLTExNzIsNyArMTIxOCw3IEBACiAJCWdvdG8gb3V0OwogCXIgPSAtRUZBVUxUOwogCWlmIChjb3B5X3RvX3VzZXIoZW50cmllcywgJnZjcHUtPmFyY2guY3B1aWRfZW50cmllcywKLQkJCSAgIHZjcHUtPmFyY2guY3B1aWRfbmVudCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MikpKQorCQkJIHZjcHUtPmFyY2guY3B1aWRfbmVudCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MikpKQogCQlnb3RvIG91dDsKIAlyZXR1cm4gMDsKIApAQCAtMTE4MSwxOCArMTIyNywxMyBAQAogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBiaXQoaW50IGJpdG5vKQotewotCXJldHVybiAxIDw8IChiaXRubyAmIDMxKTsKLX0KLQogc3RhdGljIHZvaWQgZG9fY3B1aWRfMV9lbnQoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIgKmVudHJ5LCB1MzIgZnVuY3Rpb24sCi0JCQkgIHUzMiBpbmRleCkKKwkJCSAgIHUzMiBpbmRleCkKIHsKIAllbnRyeS0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKIAllbnRyeS0+aW5kZXggPSBpbmRleDsKIAljcHVpZF9jb3VudChlbnRyeS0+ZnVuY3Rpb24sIGVudHJ5LT5pbmRleCwKLQkJJmVudHJ5LT5lYXgsICZlbnRyeS0+ZWJ4LCAmZW50cnktPmVjeCwgJmVudHJ5LT5lZHgpOworCQkgICAgJmVudHJ5LT5lYXgsICZlbnRyeS0+ZWJ4LCAmZW50cnktPmVjeCwgJmVudHJ5LT5lZHgpOwogCWVudHJ5LT5mbGFncyA9IDA7CiB9CiAKQEAgLTEyMjIsMTUgKzEyNjMsMTcgQEAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJCWJpdChYODZfRkVBVFVSRV9MTSkgfAogI2VuZGlmCisJCWJpdChYODZfRkVBVFVSRV9GWFNSX09QVCkgfAogCQliaXQoWDg2X0ZFQVRVUkVfTU1YRVhUKSB8CiAJCWJpdChYODZfRkVBVFVSRV8zRE5PV0VYVCkgfAogCQliaXQoWDg2X0ZFQVRVUkVfM0ROT1cpOwogCWNvbnN0IHUzMiBrdm1fc3VwcG9ydGVkX3dvcmQzX3g4Nl9mZWF0dXJlcyA9CiAJCWJpdChYODZfRkVBVFVSRV9YTU0zKSB8IGJpdChYODZfRkVBVFVSRV9DWDE2KTsKIAljb25zdCB1MzIga3ZtX3N1cHBvcnRlZF93b3JkNl94ODZfZmVhdHVyZXMgPQotCQliaXQoWDg2X0ZFQVRVUkVfTEFIRl9MTSkgfCBiaXQoWDg2X0ZFQVRVUkVfQ01QX0xFR0FDWSk7CisJCWJpdChYODZfRkVBVFVSRV9MQUhGX0xNKSB8IGJpdChYODZfRkVBVFVSRV9DTVBfTEVHQUNZKSB8CisJCWJpdChYODZfRkVBVFVSRV9TVk0pOwogCi0JLyogYWxsIGZ1bmMgMiBjcHVpZF9jb3VudCgpIHNob3VsZCBiZSBjYWxsZWQgb24gdGhlIHNhbWUgY3B1ICovCisJLyogYWxsIGNhbGxzIHRvIGNwdWlkX2NvdW50KCkgc2hvdWxkIGJlIG1hZGUgb24gdGhlIHNhbWUgY3B1ICovCiAJZ2V0X2NwdSgpOwogCWRvX2NwdWlkXzFfZW50KGVudHJ5LCBmdW5jdGlvbiwgaW5kZXgpOwogCSsrKm5lbnQ7CkBAIC0xMzA0LDcgKzEzNDcsNyBAQAogfQogCiBzdGF0aWMgaW50IGt2bV9kZXZfaW9jdGxfZ2V0X3N1cHBvcnRlZF9jcHVpZChzdHJ1Y3Qga3ZtX2NwdWlkMiAqY3B1aWQsCi0JCQkJICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcykKKwkJCQkgICAgIHN0cnVjdCBrdm1fY3B1aWRfZW50cnkyIF9fdXNlciAqZW50cmllcykKIHsKIAlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqY3B1aWRfZW50cmllczsKIAlpbnQgbGltaXQsIG5lbnQgPSAwLCByID0gLUUyQklHOwpAQCAtMTMyMSw3ICsxMzY0LDcgQEAKIAlsaW1pdCA9IGNwdWlkX2VudHJpZXNbMF0uZWF4OwogCWZvciAoZnVuYyA9IDE7IGZ1bmMgPD0gbGltaXQgJiYgbmVudCA8IGNwdWlkLT5uZW50OyArK2Z1bmMpCiAJCWRvX2NwdWlkX2VudCgmY3B1aWRfZW50cmllc1tuZW50XSwgZnVuYywgMCwKLQkJCQkmbmVudCwgY3B1aWQtPm5lbnQpOworCQkJICAgICAmbmVudCwgY3B1aWQtPm5lbnQpOwogCXIgPSAtRTJCSUc7CiAJaWYgKG5lbnQgPj0gY3B1aWQtPm5lbnQpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0xMzMwLDEwICsxMzczLDEwIEBACiAJbGltaXQgPSBjcHVpZF9lbnRyaWVzW25lbnQgLSAxXS5lYXg7CiAJZm9yIChmdW5jID0gMHg4MDAwMDAwMTsgZnVuYyA8PSBsaW1pdCAmJiBuZW50IDwgY3B1aWQtPm5lbnQ7ICsrZnVuYykKIAkJZG9fY3B1aWRfZW50KCZjcHVpZF9lbnRyaWVzW25lbnRdLCBmdW5jLCAwLAotCQkJICAgICAgICZuZW50LCBjcHVpZC0+bmVudCk7CisJCQkgICAgICZuZW50LCBjcHVpZC0+bmVudCk7CiAJciA9IC1FRkFVTFQ7CiAJaWYgKGNvcHlfdG9fdXNlcihlbnRyaWVzLCBjcHVpZF9lbnRyaWVzLAotCQkJbmVudCAqIHNpemVvZihzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MikpKQorCQkJIG5lbnQgKiBzaXplb2Yoc3RydWN0IGt2bV9jcHVpZF9lbnRyeTIpKSkKIAkJZ290byBvdXRfZnJlZTsKIAljcHVpZC0+bmVudCA9IG5lbnQ7CiAJciA9IDA7CkBAIC0xNDc3LDcgKzE1MjAsNyBAQAogCQlpZiAoY29weV9mcm9tX3VzZXIoJmNwdWlkLCBjcHVpZF9hcmcsIHNpemVvZiBjcHVpZCkpCiAJCQlnb3RvIG91dDsKIAkJciA9IGt2bV92Y3B1X2lvY3RsX3NldF9jcHVpZDIodmNwdSwgJmNwdWlkLAotCQkJCWNwdWlkX2FyZy0+ZW50cmllcyk7CisJCQkJCSAgICAgIGNwdWlkX2FyZy0+ZW50cmllcyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCWJyZWFrOwpAQCAtMTQ5MCw3ICsxNTMzLDcgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZjcHVpZCwgY3B1aWRfYXJnLCBzaXplb2YgY3B1aWQpKQogCQkJZ290byBvdXQ7CiAJCXIgPSBrdm1fdmNwdV9pb2N0bF9nZXRfY3B1aWQyKHZjcHUsICZjcHVpZCwKLQkJCQljcHVpZF9hcmctPmVudHJpZXMpOworCQkJCQkgICAgICBjcHVpZF9hcmctPmVudHJpZXMpOwogCQlpZiAocikKIAkJCWdvdG8gb3V0OwogCQlyID0gLUVGQVVMVDsKQEAgLTE3MTAsNiArMTc1MywxNSBAQAogCXJldHVybiByOwogfQogCitzdGF0aWMgaW50IGt2bV92bV9pb2N0bF9yZWluamVjdChzdHJ1Y3Qga3ZtICprdm0sCisJCQkJIHN0cnVjdCBrdm1fcmVpbmplY3RfY29udHJvbCAqY29udHJvbCkKK3sKKwlpZiAoIWt2bS0+YXJjaC52cGl0KQorCQlyZXR1cm4gLUVOWElPOworCWt2bS0+YXJjaC52cGl0LT5waXRfc3RhdGUucGl0X3RpbWVyLnJlaW5qZWN0ID0gY29udHJvbC0+cGl0X3JlaW5qZWN0OworCXJldHVybiAwOworfQorCiAvKgogICogR2V0IChhbmQgY2xlYXIpIHRoZSBkaXJ0eSBtZW1vcnkgbG9nIGZvciBhIG1lbW9yeSBzbG90LgogICovCkBAIC0xODA3LDEzICsxODU5LDI2IEBACiAJCQl9CiAJCX0gZWxzZQogCQkJZ290byBvdXQ7CisJCXIgPSBrdm1fc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhrdm0pOworCQlpZiAocikgeworCQkJa2ZyZWUoa3ZtLT5hcmNoLnZwaWMpOworCQkJa2ZyZWUoa3ZtLT5hcmNoLnZpb2FwaWMpOworCQkJZ290byBvdXQ7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBLVk1fQ1JFQVRFX1BJVDoKKwkJbXV0ZXhfbG9jaygma3ZtLT5sb2NrKTsKKwkJciA9IC1FRVhJU1Q7CisJCWlmIChrdm0tPmFyY2gudnBpdCkKKwkJCWdvdG8gY3JlYXRlX3BpdF91bmxvY2s7CiAJCXIgPSAtRU5PTUVNOwogCQlrdm0tPmFyY2gudnBpdCA9IGt2bV9jcmVhdGVfcGl0KGt2bSk7CiAJCWlmIChrdm0tPmFyY2gudnBpdCkKIAkJCXIgPSAwOworCWNyZWF0ZV9waXRfdW5sb2NrOgorCQltdXRleF91bmxvY2soJmt2bS0+bG9jayk7CiAJCWJyZWFrOworCWNhc2UgS1ZNX0lSUV9MSU5FX1NUQVRVUzoKIAljYXNlIEtWTV9JUlFfTElORTogewogCQlzdHJ1Y3Qga3ZtX2lycV9sZXZlbCBpcnFfZXZlbnQ7CiAKQEAgLTE4MjEsMTAgKzE4ODYsMTcgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpcnFfZXZlbnQsIGFyZ3AsIHNpemVvZiBpcnFfZXZlbnQpKQogCQkJZ290byBvdXQ7CiAJCWlmIChpcnFjaGlwX2luX2tlcm5lbChrdm0pKSB7CisJCQlfX3MzMiBzdGF0dXM7CiAJCQltdXRleF9sb2NrKCZrdm0tPmxvY2spOwotCQkJa3ZtX3NldF9pcnEoa3ZtLCBLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsCi0JCQkJICAgIGlycV9ldmVudC5pcnEsIGlycV9ldmVudC5sZXZlbCk7CisJCQlzdGF0dXMgPSBrdm1fc2V0X2lycShrdm0sIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRCwKKwkJCQkJaXJxX2V2ZW50LmlycSwgaXJxX2V2ZW50LmxldmVsKTsKIAkJCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKKwkJCWlmIChpb2N0bCA9PSBLVk1fSVJRX0xJTkVfU1RBVFVTKSB7CisJCQkJaXJxX2V2ZW50LnN0YXR1cyA9IHN0YXR1czsKKwkJCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpcnFfZXZlbnQsCisJCQkJCQkJc2l6ZW9mIGlycV9ldmVudCkpCisJCQkJCWdvdG8gb3V0OworCQkJfQogCQkJciA9IDA7CiAJCX0KIAkJYnJlYWs7CkBAIC0xOTA3LDYgKzE5NzksMTcgQEAKIAkJciA9IDA7CiAJCWJyZWFrOwogCX0KKwljYXNlIEtWTV9SRUlOSkVDVF9DT05UUk9MOiB7CisJCXN0cnVjdCBrdm1fcmVpbmplY3RfY29udHJvbCBjb250cm9sOworCQlyID0gIC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmY29udHJvbCwgYXJncCwgc2l6ZW9mKGNvbnRyb2wpKSkKKwkJCWdvdG8gb3V0OworCQlyID0ga3ZtX3ZtX2lvY3RsX3JlaW5qZWN0KGt2bSwgJmNvbnRyb2wpOworCQlpZiAocikKKwkJCWdvdG8gb3V0OworCQlyID0gMDsKKwkJYnJlYWs7CisJfQogCWRlZmF1bHQ6CiAJCTsKIAl9CkBAIC0xOTYwLDEwICsyMDQzLDggQEAKIAlyZXR1cm4gZGV2OwogfQogCi1pbnQgZW11bGF0b3JfcmVhZF9zdGQodW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICB2b2lkICp2YWwsCi0JCQkgICAgIHVuc2lnbmVkIGludCBieXRlcywKLQkJCSAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQorc3RhdGljIGludCBrdm1fcmVhZF9ndWVzdF92aXJ0KGd2YV90IGFkZHIsIHZvaWQgKnZhbCwgdW5zaWduZWQgaW50IGJ5dGVzLAorCQkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl2b2lkICpkYXRhID0gdmFsOwogCWludCByID0gWDg2RU1VTF9DT05USU5VRTsKQEAgLTE5NzEsMjcgKzIwNTIsNTcgQEAKIAl3aGlsZSAoYnl0ZXMpIHsKIAkJZ3BhX3QgZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyKTsKIAkJdW5zaWduZWQgb2Zmc2V0ID0gYWRkciAmIChQQUdFX1NJWkUtMSk7Ci0JCXVuc2lnbmVkIHRvY29weSA9IG1pbihieXRlcywgKHVuc2lnbmVkKVBBR0VfU0laRSAtIG9mZnNldCk7CisJCXVuc2lnbmVkIHRvcmVhZCA9IG1pbihieXRlcywgKHVuc2lnbmVkKVBBR0VfU0laRSAtIG9mZnNldCk7CiAJCWludCByZXQ7CiAKIAkJaWYgKGdwYSA9PSBVTk1BUFBFRF9HVkEpIHsKIAkJCXIgPSBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCXJldCA9IGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgZ3BhLCBkYXRhLCB0b2NvcHkpOworCQlyZXQgPSBrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIGdwYSwgZGF0YSwgdG9yZWFkKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXIgPSBYODZFTVVMX1VOSEFORExFQUJMRTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJYnl0ZXMgLT0gdG9jb3B5OwotCQlkYXRhICs9IHRvY29weTsKLQkJYWRkciArPSB0b2NvcHk7CisJCWJ5dGVzIC09IHRvcmVhZDsKKwkJZGF0YSArPSB0b3JlYWQ7CisJCWFkZHIgKz0gdG9yZWFkOwogCX0KIG91dDoKIAlyZXR1cm4gcjsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGVtdWxhdG9yX3JlYWRfc3RkKTsKKworc3RhdGljIGludCBrdm1fd3JpdGVfZ3Vlc3RfdmlydChndmFfdCBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKKwkJCQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdm9pZCAqZGF0YSA9IHZhbDsKKwlpbnQgciA9IFg4NkVNVUxfQ09OVElOVUU7CisKKwl3aGlsZSAoYnl0ZXMpIHsKKwkJZ3BhX3QgZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyKTsKKwkJdW5zaWduZWQgb2Zmc2V0ID0gYWRkciAmIChQQUdFX1NJWkUtMSk7CisJCXVuc2lnbmVkIHRvd3JpdGUgPSBtaW4oYnl0ZXMsICh1bnNpZ25lZClQQUdFX1NJWkUgLSBvZmZzZXQpOworCQlpbnQgcmV0OworCisJCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKSB7CisJCQlyID0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCQlyZXQgPSBrdm1fd3JpdGVfZ3Vlc3QodmNwdS0+a3ZtLCBncGEsIGRhdGEsIHRvd3JpdGUpOworCQlpZiAocmV0IDwgMCkgeworCQkJciA9IFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCQkJZ290byBvdXQ7CisJCX0KKworCQlieXRlcyAtPSB0b3dyaXRlOworCQlkYXRhICs9IHRvd3JpdGU7CisJCWFkZHIgKz0gdG93cml0ZTsKKwl9CitvdXQ6CisJcmV0dXJuIHI7Cit9CisKIAogc3RhdGljIGludCBlbXVsYXRvcl9yZWFkX2VtdWxhdGVkKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgIHZvaWQgKnZhbCwKQEAgLTIwMTMsOCArMjEyNCw4IEBACiAJaWYgKChncGEgJiBQQUdFX01BU0spID09IEFQSUNfREVGQVVMVF9QSFlTX0JBU0UpCiAJCWdvdG8gbW1pbzsKIAotCWlmIChlbXVsYXRvcl9yZWFkX3N0ZChhZGRyLCB2YWwsIGJ5dGVzLCB2Y3B1KQotCQkJPT0gWDg2RU1VTF9DT05USU5VRSkKKwlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydChhZGRyLCB2YWwsIGJ5dGVzLCB2Y3B1KQorCQkJCT09IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwogCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKQogCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CkBAIC0yMjE3LDcgKzIzMjgsNyBAQAogCiAJcmlwX2xpbmVhciA9IHJpcCArIGdldF9zZWdtZW50X2Jhc2UodmNwdSwgVkNQVV9TUkVHX0NTKTsKIAotCWVtdWxhdG9yX3JlYWRfc3RkKHJpcF9saW5lYXIsICh2b2lkICopb3Bjb2RlcywgNCwgdmNwdSk7CisJa3ZtX3JlYWRfZ3Vlc3RfdmlydChyaXBfbGluZWFyLCAodm9pZCAqKW9wY29kZXMsIDQsIHZjcHUpOwogCiAJcHJpbnRrKEtFUk5fRVJSICJlbXVsYXRpb24gZmFpbGVkICglcykgcmlwICVseCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCSAgICAgICBjb250ZXh0LCByaXAsIG9wY29kZXNbMF0sIG9wY29kZXNbMV0sIG9wY29kZXNbMl0sIG9wY29kZXNbM10pOwpAQCAtMjIyNSw3ICsyMzM2LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUpOwogCiBzdGF0aWMgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBlbXVsYXRlX29wcyA9IHsKLQkucmVhZF9zdGQgICAgICAgICAgICA9IGVtdWxhdG9yX3JlYWRfc3RkLAorCS5yZWFkX3N0ZCAgICAgICAgICAgID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCwKIAkucmVhZF9lbXVsYXRlZCAgICAgICA9IGVtdWxhdG9yX3JlYWRfZW11bGF0ZWQsCiAJLndyaXRlX2VtdWxhdGVkICAgICAgPSBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZCwKIAkuY21weGNoZ19lbXVsYXRlZCAgICA9IGVtdWxhdG9yX2NtcHhjaGdfZW11bGF0ZWQsCkBAIC0yMzI3LDQwICsyNDM4LDE5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChlbXVsYXRlX2luc3RydWN0aW9uKTsKIAotc3RhdGljIHZvaWQgZnJlZV9waW9fZ3Vlc3RfcGFnZXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXMpOyArK2kpCi0JCWlmICh2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlc1tpXSkgewotCQkJa3ZtX3JlbGVhc2VfcGFnZV9kaXJ0eSh2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlc1tpXSk7Ci0JCQl2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlc1tpXSA9IE5VTEw7Ci0JCX0KLX0KLQogc3RhdGljIGludCBwaW9fY29weV9kYXRhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl2b2lkICpwID0gdmNwdS0+YXJjaC5waW9fZGF0YTsKLQl2b2lkICpxOworCWd2YV90IHEgPSB2Y3B1LT5hcmNoLnBpby5ndWVzdF9ndmE7CiAJdW5zaWduZWQgYnl0ZXM7Ci0JaW50IG5yX3BhZ2VzID0gdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXNbMV0gPyAyIDogMTsKKwlpbnQgcmV0OwogCi0JcSA9IHZtYXAodmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXMsIG5yX3BhZ2VzLCBWTV9SRUFEfFZNX1dSSVRFLAotCQkgUEFHRV9LRVJORUwpOwotCWlmICghcSkgewotCQlmcmVlX3Bpb19ndWVzdF9wYWdlcyh2Y3B1KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXEgKz0gdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZV9vZmZzZXQ7CiAJYnl0ZXMgPSB2Y3B1LT5hcmNoLnBpby5zaXplICogdmNwdS0+YXJjaC5waW8uY3VyX2NvdW50OwogCWlmICh2Y3B1LT5hcmNoLnBpby5pbikKLQkJbWVtY3B5KHEsIHAsIGJ5dGVzKTsKKwkJcmV0ID0ga3ZtX3dyaXRlX2d1ZXN0X3ZpcnQocSwgcCwgYnl0ZXMsIHZjcHUpOwogCWVsc2UKLQkJbWVtY3B5KHAsIHEsIGJ5dGVzKTsKLQlxIC09IHZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2Vfb2Zmc2V0OwotCXZ1bm1hcChxKTsKLQlmcmVlX3Bpb19ndWVzdF9wYWdlcyh2Y3B1KTsKLQlyZXR1cm4gMDsKKwkJcmV0ID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydChxLCBwLCBieXRlcywgdmNwdSk7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IGNvbXBsZXRlX3BpbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0yNDcxLDcgKzI1NjEsNiBAQAogCXZjcHUtPmFyY2gucGlvLmluID0gaW47CiAJdmNwdS0+YXJjaC5waW8uc3RyaW5nID0gMDsKIAl2Y3B1LT5hcmNoLnBpby5kb3duID0gMDsKLQl2Y3B1LT5hcmNoLnBpby5ndWVzdF9wYWdlX29mZnNldCA9IDA7CiAJdmNwdS0+YXJjaC5waW8ucmVwID0gMDsKIAogCWlmICh2Y3B1LT5ydW4tPmlvLmRpcmVjdGlvbiA9PSBLVk1fRVhJVF9JT19JTikKQEAgLTI0OTksOSArMjU4OCw3IEBACiAJCSAgZ3ZhX3QgYWRkcmVzcywgaW50IHJlcCwgdW5zaWduZWQgcG9ydCkKIHsKIAl1bnNpZ25lZCBub3csIGluX3BhZ2U7Ci0JaW50IGksIHJldCA9IDA7Ci0JaW50IG5yX3BhZ2VzID0gMTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqcGlvX2RldjsKIAogCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTzsKQEAgLTI1MTMsNyArMjYwMCw2IEBACiAJdmNwdS0+YXJjaC5waW8uaW4gPSBpbjsKIAl2Y3B1LT5hcmNoLnBpby5zdHJpbmcgPSAxOwogCXZjcHUtPmFyY2gucGlvLmRvd24gPSBkb3duOwotCXZjcHUtPmFyY2gucGlvLmd1ZXN0X3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoYWRkcmVzcyk7CiAJdmNwdS0+YXJjaC5waW8ucmVwID0gcmVwOwogCiAJaWYgKHZjcHUtPnJ1bi0+aW8uZGlyZWN0aW9uID09IEtWTV9FWElUX0lPX0lOKQpAQCAtMjUzMywxNSArMjYxOSw4IEBACiAJZWxzZQogCQlpbl9wYWdlID0gb2Zmc2V0X2luX3BhZ2UoYWRkcmVzcykgKyBzaXplOwogCW5vdyA9IG1pbihjb3VudCwgKHVuc2lnbmVkIGxvbmcpaW5fcGFnZSAvIHNpemUpOwotCWlmICghbm93KSB7Ci0JCS8qCi0JCSAqIFN0cmluZyBJL08gc3RyYWRkbGVzIHBhZ2UgYm91bmRhcnkuICBQaW4gdHdvIGd1ZXN0IHBhZ2VzCi0JCSAqIHNvIHRoYXQgd2Ugc2F0aXNmeSBhdG9taWNpdHkgY29uc3RyYWludHMuICBEbyBqdXN0IG9uZQotCQkgKiB0cmFuc2FjdGlvbiB0byBhdm9pZCBjb21wbGV4aXR5LgotCQkgKi8KLQkJbnJfcGFnZXMgPSAyOworCWlmICghbm93KQogCQlub3cgPSAxOwotCX0KIAlpZiAoZG93bikgewogCQkvKgogCQkgKiBTdHJpbmcgSS9PIGluIHJldmVyc2UuICBZdWNrLiAgS2lsbCB0aGUgZ3Vlc3QsIGZpeCBsYXRlci4KQEAgLTI1NTYsMTUgKzI2MzUsNyBAQAogCWlmICh2Y3B1LT5hcmNoLnBpby5jdXJfY291bnQgPT0gdmNwdS0+YXJjaC5waW8uY291bnQpCiAJCWt2bV94ODZfb3BzLT5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyArK2kpIHsKLQkJcGFnZSA9IGd2YV90b19wYWdlKHZjcHUsIGFkZHJlc3MgKyBpICogUEFHRV9TSVpFKTsKLQkJdmNwdS0+YXJjaC5waW8uZ3Vlc3RfcGFnZXNbaV0gPSBwYWdlOwotCQlpZiAoIXBhZ2UpIHsKLQkJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7Ci0JCQlmcmVlX3Bpb19ndWVzdF9wYWdlcyh2Y3B1KTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQorCXZjcHUtPmFyY2gucGlvLmd1ZXN0X2d2YSA9IGFkZHJlc3M7CiAKIAlwaW9fZGV2ID0gdmNwdV9maW5kX3Bpb19kZXYodmNwdSwgcG9ydCwKIAkJCQkgICAgdmNwdS0+YXJjaC5waW8uY3VyX2NvdW50LApAQCAtMjU3Miw3ICsyNjQzLDExIEBACiAJaWYgKCF2Y3B1LT5hcmNoLnBpby5pbikgewogCQkvKiBzdHJpbmcgUElPIHdyaXRlICovCiAJCXJldCA9IHBpb19jb3B5X2RhdGEodmNwdSk7Ci0JCWlmIChyZXQgPj0gMCAmJiBwaW9fZGV2KSB7CisJCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpIHsKKwkJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlpZiAocmV0ID09IDAgJiYgcGlvX2RldikgewogCQkJcGlvX3N0cmluZ193cml0ZShwaW9fZGV2LCB2Y3B1KTsKIAkJCWNvbXBsZXRlX3Bpbyh2Y3B1KTsKIAkJCWlmICh2Y3B1LT5hcmNoLnBpby5jb3VudCA9PSAwKQpAQCAtMjU4Nyw5ICsyNjYyLDcyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fZW11bGF0ZV9waW9fc3RyaW5nKTsKIAorc3RhdGljIHZvaWQgYm91bmNlX29mZih2b2lkICppbmZvKQoreworCS8qIG5vdGhpbmcgKi8KK30KKworc3RhdGljIHVuc2lnbmVkIGludCAgcmVmX2ZyZXE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyB0c2Nfa2h6X3JlZjsKKworc3RhdGljIGludCBrdm1jbG9ja19jcHVmcmVxX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAorCQkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAqZnJlcSA9IGRhdGE7CisJc3RydWN0IGt2bSAqa3ZtOworCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKKwlpbnQgaSwgc2VuZF9pcGkgPSAwOworCisJaWYgKCFyZWZfZnJlcSkKKwkJcmVmX2ZyZXEgPSBmcmVxLT5vbGQ7CisKKwlpZiAodmFsID09IENQVUZSRVFfUFJFQ0hBTkdFICYmIGZyZXEtPm9sZCA+IGZyZXEtPm5ldykKKwkJcmV0dXJuIDA7CisJaWYgKHZhbCA9PSBDUFVGUkVRX1BPU1RDSEFOR0UgJiYgZnJlcS0+b2xkIDwgZnJlcS0+bmV3KQorCQlyZXR1cm4gMDsKKwlwZXJfY3B1KGNwdV90c2Nfa2h6LCBmcmVxLT5jcHUpID0gY3B1ZnJlcV9zY2FsZSh0c2Nfa2h6X3JlZiwgcmVmX2ZyZXEsIGZyZXEtPm5ldyk7CisKKwlzcGluX2xvY2soJmt2bV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGt2bSwgJnZtX2xpc3QsIHZtX2xpc3QpIHsKKwkJZm9yIChpID0gMDsgaSA8IEtWTV9NQVhfVkNQVVM7ICsraSkgeworCQkJdmNwdSA9IGt2bS0+dmNwdXNbaV07CisJCQlpZiAoIXZjcHUpCisJCQkJY29udGludWU7CisJCQlpZiAodmNwdS0+Y3B1ICE9IGZyZXEtPmNwdSkKKwkJCQljb250aW51ZTsKKwkJCWlmICgha3ZtX3JlcXVlc3RfZ3Vlc3RfdGltZV91cGRhdGUodmNwdSkpCisJCQkJY29udGludWU7CisJCQlpZiAodmNwdS0+Y3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCQlzZW5kX2lwaSsrOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZrdm1fbG9jayk7CisKKwlpZiAoZnJlcS0+b2xkIDwgZnJlcS0+bmV3ICYmIHNlbmRfaXBpKSB7CisJCS8qCisJCSAqIFdlIHVwc2NhbGUgdGhlIGZyZXF1ZW5jeS4gIE11c3QgbWFrZSB0aGUgZ3Vlc3QKKwkJICogZG9lc24ndCBzZWUgb2xkIGt2bWNsb2NrIHZhbHVlcyB3aGlsZSBydW5uaW5nIHdpdGgKKwkJICogdGhlIG5ldyBmcmVxdWVuY3ksIG90aGVyd2lzZSB3ZSByaXNrIHRoZSBndWVzdCBzZWVzCisJCSAqIHRpbWUgZ28gYmFja3dhcmRzLgorCQkgKgorCQkgKiBJbiBjYXNlIHdlIHVwZGF0ZSB0aGUgZnJlcXVlbmN5IGZvciBhbm90aGVyIGNwdQorCQkgKiAod2hpY2ggbWlnaHQgYmUgaW4gZ3Vlc3QgY29udGV4dCkgc2VuZCBhbiBpbnRlcnJ1cHQKKwkJICogdG8ga2ljayB0aGUgY3B1IG91dCBvZiBndWVzdCBjb250ZXh0LiAgTmV4dCB0aW1lCisJCSAqIGd1ZXN0IGNvbnRleHQgaXMgZW50ZXJlZCBrdm1jbG9jayB3aWxsIGJlIHVwZGF0ZWQsCisJCSAqIHNvIHRoZSBndWVzdCB3aWxsIG5vdCBzZWUgc3RhbGUgdmFsdWVzLgorCQkgKi8KKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGZyZXEtPmNwdSwgYm91bmNlX29mZiwgTlVMTCwgMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bWNsb2NrX2NwdWZyZXFfbm90aWZpZXJfYmxvY2sgPSB7CisgICAgICAgIC5ub3RpZmllcl9jYWxsICA9IGt2bWNsb2NrX2NwdWZyZXFfbm90aWZpZXIKK307CisKIGludCBrdm1fYXJjaF9pbml0KHZvaWQgKm9wYXF1ZSkKIHsKLQlpbnQgcjsKKwlpbnQgciwgY3B1OwogCXN0cnVjdCBrdm1feDg2X29wcyAqb3BzID0gKHN0cnVjdCBrdm1feDg2X29wcyAqKW9wYXF1ZTsKIAogCWlmIChrdm1feDg2X29wcykgewpAQCAtMjYyMCw2ICsyNzU4LDE1IEBACiAJa3ZtX21tdV9zZXRfYmFzZV9wdGVzKFBUX1BSRVNFTlRfTUFTSyk7CiAJa3ZtX21tdV9zZXRfbWFza19wdGVzKFBUX1VTRVJfTUFTSywgUFRfQUNDRVNTRURfTUFTSywKIAkJCVBUX0RJUlRZX01BU0ssIFBUNjRfTlhfTUFTSywgMCwgMCk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQlwZXJfY3B1KGNwdV90c2Nfa2h6LCBjcHUpID0gdHNjX2toejsKKwlpZiAoIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DT05TVEFOVF9UU0MpKSB7CisJCXRzY19raHpfcmVmID0gdHNjX2toejsKKwkJY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigma3ZtY2xvY2tfY3B1ZnJlcV9ub3RpZmllcl9ibG9jaywKKwkJCQkJICBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOworCX0KKwogCXJldHVybiAwOwogCiBvdXQ6CkBAIC0yODI3LDI1ICsyOTc0LDIwIEBACiAJaWYgKChlLT5mbGFncyAmIEtWTV9DUFVJRF9GTEFHX1NJR05JRkNBTlRfSU5ERVgpICYmIGUtPmluZGV4ICE9IGluZGV4KQogCQlyZXR1cm4gMDsKIAlpZiAoKGUtPmZsYWdzICYgS1ZNX0NQVUlEX0ZMQUdfU1RBVEVGVUxfRlVOQykgJiYKLQkJIShlLT5mbGFncyAmIEtWTV9DUFVJRF9GTEFHX1NUQVRFX1JFQURfTkVYVCkpCisJICAgICEoZS0+ZmxhZ3MgJiBLVk1fQ1BVSURfRkxBR19TVEFURV9SRUFEX05FWFQpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIH0KIAotdm9pZCBrdm1fZW11bGF0ZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqa3ZtX2ZpbmRfY3B1aWRfZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQkgICAgICB1MzIgZnVuY3Rpb24sIHUzMiBpbmRleCkKIHsKIAlpbnQgaTsKLQl1MzIgZnVuY3Rpb24sIGluZGV4OwotCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICplLCAqYmVzdDsKKwlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdCA9IE5VTEw7CiAKLQlmdW5jdGlvbiA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOwotCWluZGV4ID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JDWCk7Ci0Ja3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIDApOwotCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCAwKTsKLQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JDWCwgMCk7Ci0Ja3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SRFgsIDApOwotCWJlc3QgPSBOVUxMOwogCWZvciAoaSA9IDA7IGkgPCB2Y3B1LT5hcmNoLmNwdWlkX25lbnQ7ICsraSkgeworCQlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqZTsKKwogCQllID0gJnZjcHUtPmFyY2guY3B1aWRfZW50cmllc1tpXTsKIAkJaWYgKGlzX21hdGNoaW5nX2NwdWlkX2VudHJ5KGUsIGZ1bmN0aW9uLCBpbmRleCkpIHsKIAkJCWlmIChlLT5mbGFncyAmIEtWTV9DUFVJRF9GTEFHX1NUQVRFRlVMX0ZVTkMpCkBAIC0yODYwLDYgKzMwMDIsMjEgQEAKIAkJCWlmICghYmVzdCB8fCBlLT5mdW5jdGlvbiA+IGJlc3QtPmZ1bmN0aW9uKQogCQkJCWJlc3QgPSBlOwogCX0KKwlyZXR1cm4gYmVzdDsKK30KKwordm9pZCBrdm1fZW11bGF0ZV9jcHVpZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdTMyIGZ1bmN0aW9uLCBpbmRleDsKKwlzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqYmVzdDsKKworCWZ1bmN0aW9uID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCk7CisJaW5kZXggPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgMCk7CisJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQlgsIDApOworCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkNYLCAwKTsKKwlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgMCk7CisJYmVzdCA9IGt2bV9maW5kX2NwdWlkX2VudHJ5KHZjcHUsIGZ1bmN0aW9uLCBpbmRleCk7CiAJaWYgKGJlc3QpIHsKIAkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIGJlc3QtPmVheCk7CiAJCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkJYLCBiZXN0LT5lYngpOwpAQCAtMjk0NSw2ICszMTAyLDggQEAKIAlpZiAodmNwdS0+cmVxdWVzdHMpIHsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX01JR1JBVEVfVElNRVIsICZ2Y3B1LT5yZXF1ZXN0cykpCiAJCQlfX2t2bV9taWdyYXRlX3RpbWVycyh2Y3B1KTsKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX0tWTUNMT0NLX1VQREFURSwgJnZjcHUtPnJlcXVlc3RzKSkKKwkJCWt2bV93cml0ZV9ndWVzdF90aW1lKHZjcHUpOwogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEtWTV9SRVFfTU1VX1NZTkMsICZ2Y3B1LT5yZXF1ZXN0cykpCiAJCQlrdm1fbW11X3N5bmNfcm9vdHModmNwdSk7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoS1ZNX1JFUV9UTEJfRkxVU0gsICZ2Y3B1LT5yZXF1ZXN0cykpCkBAIC0yOTc5LDkgKzMxMzgsNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcuZW5hYmxlZCkKLQkJa3ZtX3g4Nl9vcHMtPmd1ZXN0X2RlYnVnX3ByZSh2Y3B1KTsKLQogCXZjcHUtPmd1ZXN0X21vZGUgPSAxOwogCS8qCiAJICogTWFrZSBzdXJlIHRoYXQgZ3Vlc3RfbW9kZSBhc3NpZ25tZW50IHdvbid0IGhhcHBlbiBhZnRlcgpAQCAtMzAwMiwxMCArMzE1OCwzNCBAQAogCiAJa3ZtX2d1ZXN0X2VudGVyKCk7CiAKKwlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RyNiwgNik7CisJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kcjcsIDcpOworCWlmICh1bmxpa2VseSh2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzKSkgeworCQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzBdLCAwKTsKKwkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlsxXSwgMSk7CisJCWdldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMl0sIDIpOworCQlnZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzNdLCAzKTsKKworCQlzZXRfZGVidWdyZWcoMCwgNyk7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmVmZl9kYlswXSwgMCk7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmVmZl9kYlsxXSwgMSk7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmVmZl9kYlsyXSwgMik7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmVmZl9kYlszXSwgMyk7CisJfQogCiAJS1ZNVFJBQ0VfMEQoVk1FTlRSWSwgdmNwdSwgZW50cnlleGl0KTsKIAlrdm1feDg2X29wcy0+cnVuKHZjcHUsIGt2bV9ydW4pOwogCisJaWYgKHVubGlrZWx5KHZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MpKSB7CisJCXNldF9kZWJ1Z3JlZygwLCA3KTsKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlswXSwgMCk7CisJCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZGJbMV0sIDEpOworCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RiWzJdLCAyKTsKKwkJc2V0X2RlYnVncmVnKHZjcHUtPmFyY2guaG9zdF9kYlszXSwgMyk7CisJfQorCXNldF9kZWJ1Z3JlZyh2Y3B1LT5hcmNoLmhvc3RfZHI2LCA2KTsKKwlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5ob3N0X2RyNywgNyk7CisKIAl2Y3B1LT5ndWVzdF9tb2RlID0gMDsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKQEAgLTMxOTIsNyArMzM3Miw3IEBACiAJLyoKIAkgKiBEb24ndCBsZWFrIGRlYnVnIGZsYWdzIGluIGNhc2UgdGhleSB3ZXJlIHNldCBmb3IgZ3Vlc3QgZGVidWdnaW5nCiAJICovCi0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnLmVuYWJsZWQgJiYgdmNwdS0+Z3Vlc3RfZGVidWcuc2luZ2xlc3RlcCkKKwlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUCkKIAkJcmVncy0+cmZsYWdzICY9IH4oWDg2X0VGTEFHU19URiB8IFg4Nl9FRkxBR1NfUkYpOwogCiAJdmNwdV9wdXQodmNwdSk7CkBAIC0zODExLDE1ICszOTkxLDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCQkgICAgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCAqZGJnKQoraW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X2d1ZXN0X2RlYnVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkJc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyAqZGJnKQogewotCWludCByOworCWludCBpLCByOwogCiAJdmNwdV9sb2FkKHZjcHUpOwogCisJaWYgKChkYmctPmNvbnRyb2wgJiAoS1ZNX0dVRVNUREJHX0VOQUJMRSB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSA9PQorCSAgICAoS1ZNX0dVRVNUREJHX0VOQUJMRSB8IEtWTV9HVUVTVERCR19VU0VfSFdfQlApKSB7CisJCWZvciAoaSA9IDA7IGkgPCBLVk1fTlJfREJfUkVHUzsgKytpKQorCQkJdmNwdS0+YXJjaC5lZmZfZGJbaV0gPSBkYmctPmFyY2guZGVidWdyZWdbaV07CisJCXZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgPQorCQkJKGRiZy0+YXJjaC5kZWJ1Z3JlZ1s3XSAmIERSN19CUF9FTl9NQVNLKTsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX05SX0RCX1JFR1M7IGkrKykKKwkJCXZjcHUtPmFyY2guZWZmX2RiW2ldID0gdmNwdS0+YXJjaC5kYltpXTsKKwkJdmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncyA9ICh2Y3B1LT5hcmNoLmRyNyAmIERSN19CUF9FTl9NQVNLKTsKKwl9CisKIAlyID0ga3ZtX3g4Nl9vcHMtPnNldF9ndWVzdF9kZWJ1Zyh2Y3B1LCBkYmcpOwogCisJaWYgKGRiZy0+Y29udHJvbCAmIEtWTV9HVUVTVERCR19JTkpFQ1RfREIpCisJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgREJfVkVDVE9SKTsKKwllbHNlIGlmIChkYmctPmNvbnRyb2wgJiBLVk1fR1VFU1REQkdfSU5KRUNUX0JQKQorCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIEJQX1ZFQ1RPUik7CisKIAl2Y3B1X3B1dCh2Y3B1KTsKIAogCXJldHVybiByOwpAQCAtNDAwNyw2ICs0MjA0LDExIEBACiAJdmNwdS0+YXJjaC5ubWlfcGVuZGluZyA9IGZhbHNlOwogCXZjcHUtPmFyY2gubm1pX2luamVjdGVkID0gZmFsc2U7CiAKKwl2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzID0gMDsKKwltZW1zZXQodmNwdS0+YXJjaC5kYiwgMCwgc2l6ZW9mKHZjcHUtPmFyY2guZGIpKTsKKwl2Y3B1LT5hcmNoLmRyNiA9IERSNl9GSVhFRF8xOworCXZjcHUtPmFyY2guZHI3ID0gRFI3X0ZJWEVEXzE7CisKIAlyZXR1cm4ga3ZtX3g4Nl9vcHMtPnZjcHVfcmVzZXQodmNwdSk7CiB9CiAKQEAgLTQxMDAsNiArNDMwMiw4IEBACiAJLyogUmVzZXJ2ZSBiaXQgMCBvZiBpcnFfc291cmNlc19iaXRtYXAgZm9yIHVzZXJzcGFjZSBpcnEgc291cmNlICovCiAJc2V0X2JpdChLVk1fVVNFUlNQQUNFX0lSUV9TT1VSQ0VfSUQsICZrdm0tPmFyY2guaXJxX3NvdXJjZXNfYml0bWFwKTsKIAorCXJkdHNjbGwoa3ZtLT5hcmNoLnZtX2luaXRfdHNjKTsKKwogCXJldHVybiBrdm07CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODZfZW11bGF0ZS5jIGIvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKaW5kZXggZDE3NGRiNy4uY2E5MTc0OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKKysrIGIvYXJjaC94ODYva3ZtL3g4Nl9lbXVsYXRlLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCTAsIEltcGxpY2l0T3BzIHwgU3RhY2ssIDAsIDAsCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBNb3YsIERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTW92LAogCS8qIDB4QzggLSAweENGICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCBJbXBsaWNpdE9wcyB8IFN0YWNrLCAwLCAwLCAwLCAwLAogCS8qIDB4RDAgLSAweEQ3ICovCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1wbGljaXQgfCBNb2RSTSwKIAlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbXBsaWNpdCB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbXBsaWNpdCB8IE1vZFJNLApAQCAtMTEzNiwxOCArMTEzNiwxOSBAQAogfQogCiBzdGF0aWMgaW50IGVtdWxhdGVfcG9wKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAotCQkgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzKQorCQkgICAgICAgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAqb3BzLAorCQkgICAgICAgdm9pZCAqZGVzdCwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAlpbnQgcmM7CiAKIAlyYyA9IG9wcy0+cmVhZF9lbXVsYXRlZChyZWdpc3Rlcl9hZGRyZXNzKGMsIHNzX2Jhc2UoY3R4dCksCiAJCQkJCQkgYy0+cmVnc1tWQ1BVX1JFR1NfUlNQXSksCi0JCQkJJmMtPnNyYy52YWwsIGMtPnNyYy5ieXRlcywgY3R4dC0+dmNwdSk7CisJCQkJZGVzdCwgbGVuLCBjdHh0LT52Y3B1KTsKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwogCi0JcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0sIGMtPnNyYy5ieXRlcyk7CisJcmVnaXN0ZXJfYWRkcmVzc19pbmNyZW1lbnQoYywgJmMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0sIGxlbik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMTU3LDExICsxMTU4LDkgQEAKIAlzdHJ1Y3QgZGVjb2RlX2NhY2hlICpjID0gJmN0eHQtPmRlY29kZTsKIAlpbnQgcmM7CiAKLQljLT5zcmMuYnl0ZXMgPSBjLT5kc3QuYnl0ZXM7Ci0JcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMpOworCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmYy0+ZHN0LnZhbCwgYy0+ZHN0LmJ5dGVzKTsKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwotCWMtPmRzdC52YWwgPSBjLT5zcmMudmFsOwogCXJldHVybiAwOwogfQogCkBAIC0xMjc5LDYgKzEyNzgsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBlbXVsYXRlX3JldF9mYXIoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCQkgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCit7CisJc3RydWN0IGRlY29kZV9jYWNoZSAqYyA9ICZjdHh0LT5kZWNvZGU7CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgY3M7CisKKwlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmMtPmVpcCwgYy0+b3BfYnl0ZXMpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCWlmIChjLT5vcF9ieXRlcyA9PSA0KQorCQljLT5laXAgPSAodTMyKWMtPmVpcDsKKwlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmNzLCBjLT5vcF9ieXRlcyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmMgPSBrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dC0+dmNwdSwgKHUxNiljcywgMSwgVkNQVV9TUkVHX0NTKTsKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHdyaXRlYmFjayhzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKIAkJCSAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMpCiB7CkBAIC0xNDY3LDExICsxNDg1LDkgQEAKIAkJYnJlYWs7CiAJY2FzZSAweDU4IC4uLiAweDVmOiAvKiBwb3AgcmVnICovCiAJcG9wX2luc3RydWN0aW9uOgotCQljLT5zcmMuYnl0ZXMgPSBjLT5vcF9ieXRlczsKLQkJcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMpOworCQlyYyA9IGVtdWxhdGVfcG9wKGN0eHQsIG9wcywgJmMtPmRzdC52YWwsIGMtPm9wX2J5dGVzKTsKIAkJaWYgKHJjICE9IDApCiAJCQlnb3RvIGRvbmU7Ci0JCWMtPmRzdC52YWwgPSBjLT5zcmMudmFsOwogCQlicmVhazsKIAljYXNlIDB4NjM6CQkvKiBtb3ZzeGQgKi8KIAkJaWYgKGN0eHQtPm1vZGUgIT0gWDg2RU1VTF9NT0RFX1BST1Q2NCkKQEAgLTE3MzgsNiArMTc1NCwxMSBAQAogCW1vdjoKIAkJYy0+ZHN0LnZhbCA9IGMtPnNyYy52YWw7CiAJCWJyZWFrOworCWNhc2UgMHhjYjoJCS8qIHJldCBmYXIgKi8KKwkJcmMgPSBlbXVsYXRlX3JldF9mYXIoY3R4dCwgb3BzKTsKKwkJaWYgKHJjKQorCQkJZ290byBkb25lOworCQlicmVhazsKIAljYXNlIDB4ZDAgLi4uIDB4ZDE6CS8qIEdycDIgKi8KIAkJYy0+c3JjLnZhbCA9IDE7CiAJCWVtdWxhdGVfZ3JwMihjdHh0KTsKQEAgLTE5MDgsMTEgKzE5MjksMTYgQEAKIAkJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsKIAkJCWJyZWFrOwogCQljYXNlIDM6IC8qIGxpZHQvdm1tY2FsbCAqLwotCQkJaWYgKGMtPm1vZHJtX21vZCA9PSAzICYmIGMtPm1vZHJtX3JtID09IDEpIHsKLQkJCQlyYyA9IGt2bV9maXhfaHlwZXJjYWxsKGN0eHQtPnZjcHUpOwotCQkJCWlmIChyYykKLQkJCQkJZ290byBkb25lOwotCQkJCWt2bV9lbXVsYXRlX2h5cGVyY2FsbChjdHh0LT52Y3B1KTsKKwkJCWlmIChjLT5tb2RybV9tb2QgPT0gMykgeworCQkJCXN3aXRjaCAoYy0+bW9kcm1fcm0pIHsKKwkJCQljYXNlIDE6CisJCQkJCXJjID0ga3ZtX2ZpeF9oeXBlcmNhbGwoY3R4dC0+dmNwdSk7CisJCQkJCWlmIChyYykKKwkJCQkJCWdvdG8gZG9uZTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJZ290byBjYW5ub3RfZW11bGF0ZTsKKwkJCQl9CiAJCQl9IGVsc2UgewogCQkJCXJjID0gcmVhZF9kZXNjcmlwdG9yKGN0eHQsIG9wcywgYy0+c3JjLnB0ciwKIAkJCQkJCSAgICAgJnNpemUsICZhZGRyZXNzLApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc29ja2V0LmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaAppbmRleCA2MTAwNjgyLi5kZDFhN2E0IDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaAorKysgYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zb2NrZXQuaApAQCAtNjUsNCArNjUsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmCS8qIF9YVEVOU0FfU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3N3YWIuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3N3YWIuaAppbmRleCBmNTBiNjk3Li4yMjZhMzkxIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9zd2FiLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vc3dhYi5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIF9YVEVOU0FfU1dBQl9ICiAjZGVmaW5lIF9YVEVOU0FfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCmluZGV4IDVmYmNkZTUuLmYzYjY2ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKQEAgLTk5LDcgKzk5LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKICNlbHNlCiAJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKLQkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfY3B1KGopLmlycXNbaV0pOworCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzX2NwdShpLCBqKSk7CiAjZW5kaWYKIAkJc2VxX3ByaW50ZihwLCAiICUxNHMiLCBpcnFfZGVzY1tpXS5jaGlwLT50eXBlbmFtZSk7CiAJCXNlcV9wcmludGYocCwgIiAgJXMiLCBhY3Rpb24tPm5hbWUpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggMjliY2ZhYy4uOTk2ZWQ5MCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC02MDMsMTMgKzYwMywxMCBAQAogCXEtPnF1ZXVlX2ZsYWdzCQk9IFFVRVVFX0ZMQUdfREVGQVVMVDsKIAlxLT5xdWV1ZV9sb2NrCQk9IGxvY2s7CiAKLQlibGtfcXVldWVfc2VnbWVudF9ib3VuZGFyeShxLCBCTEtfU0VHX0JPVU5EQVJZX01BU0spOwotCisJLyoKKwkgKiBUaGlzIGFsc28gc2V0cyBody9waHlzIHNlZ21lbnRzLCBib3VuZGFyeSBhbmQgc2l6ZQorCSAqLwogCWJsa19xdWV1ZV9tYWtlX3JlcXVlc3QocSwgX19tYWtlX3JlcXVlc3QpOwotCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKHEsIE1BWF9TRUdNRU5UX1NJWkUpOwotCi0JYmxrX3F1ZXVlX21heF9od19zZWdtZW50cyhxLCBNQVhfSFdfU0VHTUVOVFMpOwotCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhxLCBNQVhfUEhZU19TRUdNRU5UUyk7CiAKIAlxLT5zZ19yZXNlcnZlZF9zaXplID0gSU5UX01BWDsKIApAQCAtNzM1LDcgKzczMiw2IEBACiAJCV9fZnJlZWRfcmVxdWVzdChxLCBydyBeIDEpOwogfQogCi0jZGVmaW5lIGJsa2Rldl9mcmVlX3JxKGxpc3QpIGxpc3RfZW50cnkoKGxpc3QpLT5uZXh0LCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KQogLyoKICAqIEdldCBhIGZyZWUgcmVxdWVzdCwgcXVldWVfbG9jayBtdXN0IGJlIGhlbGQuCiAgKiBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZSwgd2l0aCBxdWV1ZV9sb2NrIGhlbGQuCkBAIC0xMDY2LDYgKzEwNjIsOSBAQAogCiAJZWx2X2NvbXBsZXRlZF9yZXF1ZXN0KHEsIHJlcSk7CiAKKwkvKiB0aGlzIGlzIGEgYmlvIGxlYWsgKi8KKwlXQVJOX09OKHJlcS0+YmlvICE9IE5VTEwpOworCiAJLyoKIAkgKiBSZXF1ZXN0IG1heSBub3QgaGF2ZSBvcmlnaW5hdGVkIGZyb20gbGxfcndfYmxrLiBpZiBub3QsCiAJICogaXQgZGlkbid0IGNvbWUgb3V0IG9mIG91ciByZXNlcnZlZCBycSBwb29scwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1lcmdlLmMgYi9ibG9jay9ibGstbWVyZ2UuYwppbmRleCA1YTI0NGYwLi5lMzljYjI0IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbWVyZ2UuYworKysgYi9ibG9jay9ibGstbWVyZ2UuYwpAQCAtNDAzLDYgKzQwMyw4IEBACiAJaWYgKGJsa19ycV9jcHVfdmFsaWQobmV4dCkpCiAJCXJlcS0+Y3B1ID0gbmV4dC0+Y3B1OwogCisJLyogb3duZXItc2hpcCBvZiBiaW8gcGFzc2VkIGZyb20gbmV4dCB0byByZXEgKi8KKwluZXh0LT5iaW8gPSBOVUxMOwogCV9fYmxrX3B1dF9yZXF1ZXN0KHEsIG5leHQpOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svYnNnLmMgYi9ibG9jay9ic2cuYwppbmRleCAwY2U4ODA2Li4yMDYwNjBlIDEwMDY0NAotLS0gYS9ibG9jay9ic2cuYworKysgYi9ibG9jay9ic2cuYwpAQCAtMjE4LDkgKzIxOCw2IEBACiAKIAlpZiAoaGRyLT5ndWFyZCAhPSAnUScpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmIChoZHItPmRvdXRfeGZlcl9sZW4gPiAocS0+bWF4X3NlY3RvcnMgPDwgOSkgfHwKLQkgICAgaGRyLT5kaW5feGZlcl9sZW4gPiAocS0+bWF4X3NlY3RvcnMgPDwgOSkpCi0JCXJldHVybiAtRUlPOwogCiAJc3dpdGNoIChoZHItPnByb3RvY29sKSB7CiAJY2FzZSBCU0dfUFJPVE9DT0xfU0NTSToKQEAgLTM1Myw2ICszNTAsOCBAQAogc3RhdGljIHZvaWQgYnNnX2FkZF9jb21tYW5kKHN0cnVjdCBic2dfZGV2aWNlICpiZCwgc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsCiAJCQkgICAgc3RydWN0IGJzZ19jb21tYW5kICpiYywgc3RydWN0IHJlcXVlc3QgKnJxKQogeworCWludCBhdF9oZWFkID0gKDAgPT0gKGJjLT5oZHIuZmxhZ3MgJiBCU0dfRkxBR19RX0FUX1RBSUwpKTsKKwogCS8qCiAJICogYWRkIGJjIGNvbW1hbmQgdG8gYnVzeSBxdWV1ZSBhbmQgc3VibWl0IHJxIGZvciBpbwogCSAqLwpAQCAtMzY4LDcgKzM2Nyw3IEBACiAJZHByaW50aygiJXM6IHF1ZXVlaW5nIHJxICVwLCBiYyAlcFxuIiwgYmQtPm5hbWUsIHJxLCBiYyk7CiAKIAlycS0+ZW5kX2lvX2RhdGEgPSBiYzsKLQlibGtfZXhlY3V0ZV9ycV9ub3dhaXQocSwgTlVMTCwgcnEsIDEsIGJzZ19ycV9lbmRfaW8pOworCWJsa19leGVjdXRlX3JxX25vd2FpdChxLCBOVUxMLCBycSwgYXRfaGVhZCwgYnNnX3JxX2VuZF9pbyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYnNnX2NvbW1hbmQgKmJzZ19uZXh0X2RvbmVfY21kKHN0cnVjdCBic2dfZGV2aWNlICpiZCkKQEAgLTkyNCw2ICs5MjMsNyBAQAogCQlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJCXN0cnVjdCBiaW8gKmJpbywgKmJpZGlfYmlvID0gTlVMTDsKIAkJc3RydWN0IHNnX2lvX3Y0IGhkcjsKKwkJaW50IGF0X2hlYWQ7CiAJCXU4IHNlbnNlW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZoZHIsIHVhcmcsIHNpemVvZihoZHIpKSkKQEAgLTkzNiw3ICs5MzYsOSBAQAogCQliaW8gPSBycS0+YmlvOwogCQlpZiAocnEtPm5leHRfcnEpCiAJCQliaWRpX2JpbyA9IHJxLT5uZXh0X3JxLT5iaW87Ci0JCWJsa19leGVjdXRlX3JxKGJkLT5xdWV1ZSwgTlVMTCwgcnEsIDApOworCisJCWF0X2hlYWQgPSAoMCA9PSAoaGRyLmZsYWdzICYgQlNHX0ZMQUdfUV9BVF9UQUlMKSk7CisJCWJsa19leGVjdXRlX3JxKGJkLT5xdWV1ZSwgTlVMTCwgcnEsIGF0X2hlYWQpOwogCQlyZXQgPSBibGtfY29tcGxldGVfc2d2NF9oZHJfcnEocnEsICZoZHIsIGJpbywgYmlkaV9iaW8pOwogCiAJCWlmIChjb3B5X3RvX3VzZXIodWFyZywgJmhkciwgc2l6ZW9mKGhkcikpKQpkaWZmIC0tZ2l0IGEvYmxvY2svc2NzaV9pb2N0bC5jIGIvYmxvY2svc2NzaV9pb2N0bC5jCmluZGV4IGVlOWM2N2QuLjYyNmVlMjcgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3Njc2lfaW9jdGwuYworKysgYi9ibG9jay9zY3NpX2lvY3RsLmMKQEAgLTIxNCwyMSArMjE0LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiB1bm1hcCBhIHJlcXVlc3QgdGhhdCB3YXMgcHJldmlvdXNseSBtYXBwZWQgdG8gdGhpcyBzZ19pb19oZHIuIGhhbmRsZXMKLSAqIGJvdGggc2cgYW5kIG5vbi1zZyBzZ19pb19oZHIuCi0gKi8KLXN0YXRpYyBpbnQgYmxrX3VubWFwX3NnaGRyX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHNnX2lvX2hkciAqaGRyKQotewotCWJsa19ycV91bm1hcF91c2VyKHJxLT5iaW8pOwotCWJsa19wdXRfcmVxdWVzdChycSk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgYmxrX2NvbXBsZXRlX3NnaGRyX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IHNnX2lvX2hkciAqaGRyLAogCQkJCSBzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JaW50IHIsIHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAKIAkvKgogCSAqIGZpbGwgaW4gYWxsIHRoZSBvdXRwdXQgbWVtYmVycwpAQCAtMjUzLDEyICsyNDIsMTAgQEAKIAkJCXJldCA9IC1FRkFVTFQ7CiAJfQogCi0JcnEtPmJpbyA9IGJpbzsKLQlyID0gYmxrX3VubWFwX3NnaGRyX3JxKHJxLCBoZHIpOwotCWlmIChyZXQpCi0JCXIgPSByZXQ7CisJYmxrX3JxX3VubWFwX3VzZXIoYmlvKTsKKwlibGtfcHV0X3JlcXVlc3QocnEpOwogCi0JcmV0dXJuIHI7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzZ19pbyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGdlbmRpc2sgKmJkX2Rpc2ssCmRpZmYgLS1naXQgYS9jcnlwdG8vS2NvbmZpZyBiL2NyeXB0by9LY29uZmlnCmluZGV4IDhkZGU0ZmMuLjc0ZDBlNjIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9LY29uZmlnCisrKyBiL2NyeXB0by9LY29uZmlnCkBAIC01Niw2ICs1Niw3IEBACiAJdHJpc3RhdGUKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSTIKIAlzZWxlY3QgQ1JZUFRPX1JORzIKKwlzZWxlY3QgQ1JZUFRPX1dPUktRVUVVRQogCiBjb25maWcgQ1JZUFRPX0hBU0gKIAl0cmlzdGF0ZQpAQCAtNzUsNiArNzYsMTAgQEAKIAl0cmlzdGF0ZQogCXNlbGVjdCBDUllQVE9fQUxHQVBJMgogCitjb25maWcgQ1JZUFRPX1BDT01QCisJdHJpc3RhdGUKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSTIKKwogY29uZmlnIENSWVBUT19NQU5BR0VSCiAJdHJpc3RhdGUgIkNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtIG1hbmFnZXIiCiAJc2VsZWN0IENSWVBUT19NQU5BR0VSMgpAQCAtODcsNiArOTIsNyBAQAogCXNlbGVjdCBDUllQVE9fQUVBRDIKIAlzZWxlY3QgQ1JZUFRPX0hBU0gyCiAJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIyCisJc2VsZWN0IENSWVBUT19QQ09NUAogCiBjb25maWcgQ1JZUFRPX0dGMTI4TVVMCiAJdHJpc3RhdGUgIkdGKDJeMTI4KSBtdWx0aXBsaWNhdGlvbiBmdW5jdGlvbnMgKEVYUEVSSU1FTlRBTCkiCkBAIC0xMDYsMTEgKzExMiwxNSBAQAogCWhlbHAKIAkgIFRoZXNlIGFyZSAnTnVsbCcgYWxnb3JpdGhtcywgdXNlZCBieSBJUHNlYywgd2hpY2ggZG8gbm90aGluZy4KIAorY29uZmlnIENSWVBUT19XT1JLUVVFVUUKKyAgICAgICB0cmlzdGF0ZQorCiBjb25maWcgQ1JZUFRPX0NSWVBURAogCXRyaXN0YXRlICJTb2Z0d2FyZSBhc3luYyBjcnlwdG8gZGFlbW9uIgogCXNlbGVjdCBDUllQVE9fQkxLQ0lQSEVSCiAJc2VsZWN0IENSWVBUT19IQVNICiAJc2VsZWN0IENSWVBUT19NQU5BR0VSCisJc2VsZWN0IENSWVBUT19XT1JLUVVFVUUKIAloZWxwCiAJICBUaGlzIGlzIGEgZ2VuZXJpYyBzb2Z0d2FyZSBhc3luY2hyb25vdXMgY3J5cHRvIGRhZW1vbiB0aGF0CiAJICBjb252ZXJ0cyBhbiBhcmJpdHJhcnkgc3luY2hyb25vdXMgc29mdHdhcmUgY3J5cHRvIGFsZ29yaXRobQpAQCAtNDcwLDYgKzQ4MCwzMSBAQAogCiAJICBTZWUgPGh0dHA6Ly9jc3JjLm5pc3QuZ292L2VuY3J5cHRpb24vYWVzLz4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKK2NvbmZpZyBDUllQVE9fQUVTX05JX0lOVEVMCisJdHJpc3RhdGUgIkFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoQUVTLU5JKSIKKwlkZXBlbmRzIG9uIChYODYgfHwgVU1MX1g4NikgJiYgNjRCSVQKKwlzZWxlY3QgQ1JZUFRPX0FFU19YODZfNjQKKwlzZWxlY3QgQ1JZUFRPX0NSWVBURAorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJaGVscAorCSAgVXNlIEludGVsIEFFUy1OSSBpbnN0cnVjdGlvbnMgZm9yIEFFUyBhbGdvcml0aG0uCisKKwkgIEFFUyBjaXBoZXIgYWxnb3JpdGhtcyAoRklQUy0xOTcpLiBBRVMgdXNlcyB0aGUgUmlqbmRhZWwKKwkgIGFsZ29yaXRobS4KKworCSAgUmlqbmRhZWwgYXBwZWFycyB0byBiZSBjb25zaXN0ZW50bHkgYSB2ZXJ5IGdvb2QgcGVyZm9ybWVyIGluCisJICBib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIGNvbXB1dGluZworCSAgZW52aXJvbm1lbnRzIHJlZ2FyZGxlc3Mgb2YgaXRzIHVzZSBpbiBmZWVkYmFjayBvciBub24tZmVlZGJhY2sKKwkgIG1vZGVzLiBJdHMga2V5IHNldHVwIHRpbWUgaXMgZXhjZWxsZW50LCBhbmQgaXRzIGtleSBhZ2lsaXR5IGlzCisJICBnb29kLiBSaWpuZGFlbCdzIHZlcnkgbG93IG1lbW9yeSByZXF1aXJlbWVudHMgbWFrZSBpdCB2ZXJ5IHdlbGwKKwkgIHN1aXRlZCBmb3IgcmVzdHJpY3RlZC1zcGFjZSBlbnZpcm9ubWVudHMsIGluIHdoaWNoIGl0IGFsc28KKwkgIGRlbW9uc3RyYXRlcyBleGNlbGxlbnQgcGVyZm9ybWFuY2UuIFJpam5kYWVsJ3Mgb3BlcmF0aW9ucyBhcmUKKwkgIGFtb25nIHRoZSBlYXNpZXN0IHRvIGRlZmVuZCBhZ2FpbnN0IHBvd2VyIGFuZCB0aW1pbmcgYXR0YWNrcy4KKworCSAgVGhlIEFFUyBzcGVjaWZpZXMgdGhyZWUga2V5IHNpemVzOiAxMjgsIDE5MiBhbmQgMjU2IGJpdHMKKworCSAgU2VlIDxodHRwOi8vY3NyYy5uaXN0Lmdvdi9lbmNyeXB0aW9uL2Flcy8+IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCiBjb25maWcgQ1JZUFRPX0FOVUJJUwogCXRyaXN0YXRlICJBbnViaXMgY2lwaGVyIGFsZ29yaXRobSIKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQpAQCAtNzE0LDYgKzc0OSwxNSBAQAogCiAJICBZb3Ugd2lsbCBtb3N0IHByb2JhYmx5IHdhbnQgdGhpcyBpZiB1c2luZyBJUFNlYy4KIAorY29uZmlnIENSWVBUT19aTElCCisJdHJpc3RhdGUgIlpsaWIgY29tcHJlc3Npb24gYWxnb3JpdGhtIgorCXNlbGVjdCBDUllQVE9fUENPTVAKKwlzZWxlY3QgWkxJQl9JTkZMQVRFCisJc2VsZWN0IFpMSUJfREVGTEFURQorCXNlbGVjdCBOTEFUVFIKKwloZWxwCisJICBUaGlzIGlzIHRoZSB6bGliIGFsZ29yaXRobS4KKwogY29uZmlnIENSWVBUT19MWk8KIAl0cmlzdGF0ZSAiTFpPIGNvbXByZXNzaW9uIGFsZ29yaXRobSIKIAlzZWxlY3QgQ1JZUFRPX0FMR0FQSQpkaWZmIC0tZ2l0IGEvY3J5cHRvL01ha2VmaWxlIGIvY3J5cHRvL01ha2VmaWxlCmluZGV4IDQ2YjA4YmYuLjY3M2Q5ZjcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9NYWtlZmlsZQorKysgYi9jcnlwdG8vTWFrZWZpbGUKQEAgLTUsNiArNSw4IEBACiBvYmotJChDT05GSUdfQ1JZUFRPKSArPSBjcnlwdG8ubwogY3J5cHRvLW9ianMgOj0gYXBpLm8gY2lwaGVyLm8gZGlnZXN0Lm8gY29tcHJlc3MubwogCitvYmotJChDT05GSUdfQ1JZUFRPX1dPUktRVUVVRSkgKz0gY3J5cHRvX3dxLm8KKwogb2JqLSQoQ09ORklHX0NSWVBUT19GSVBTKSArPSBmaXBzLm8KIAogY3J5cHRvX2FsZ2FwaS0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KQEAgLTI1LDYgKzI3LDggQEAKIGNyeXB0b19oYXNoLW9ianMgKz0gc2hhc2gubwogb2JqLSQoQ09ORklHX0NSWVBUT19IQVNIMikgKz0gY3J5cHRvX2hhc2gubwogCitvYmotJChDT05GSUdfQ1JZUFRPX1BDT01QKSArPSBwY29tcHJlc3MubworCiBjcnlwdG9tZ3Itb2JqcyA6PSBhbGdib3NzLm8gdGVzdG1nci5vCiAKIG9iai0kKENPTkZJR19DUllQVE9fTUFOQUdFUjIpICs9IGNyeXB0b21nci5vCkBAIC03MCw2ICs3NCw3IEBACiBvYmotJChDT05GSUdfQ1JZUFRPX1NFRUQpICs9IHNlZWQubwogb2JqLSQoQ09ORklHX0NSWVBUT19TQUxTQTIwKSArPSBzYWxzYTIwX2dlbmVyaWMubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERUZMQVRFKSArPSBkZWZsYXRlLm8KK29iai0kKENPTkZJR19DUllQVE9fWkxJQikgKz0gemxpYi5vCiBvYmotJChDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDKSArPSBtaWNoYWVsX21pYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0NSQzMyQykgKz0gY3JjMzJjLm8KIG9iai0kKENPTkZJR19DUllQVE9fQVVUSEVOQykgKz0gYXV0aGVuYy5vCmRpZmYgLS1naXQgYS9jcnlwdG8vYWJsa2NpcGhlci5jIGIvY3J5cHRvL2FibGtjaXBoZXIuYwppbmRleCA5NDE0MGIzLi5lMTFjZTM3IDEwMDY0NAotLS0gYS9jcnlwdG8vYWJsa2NpcGhlci5jCisrKyBiL2NyeXB0by9hYmxrY2lwaGVyLmMKQEAgLTI4Miw2ICsyODIsMjUgQEAKIAkJCQkJICBhbGctPmNyYV9hYmxrY2lwaGVyLml2c2l6ZSkpCiAJCXJldHVybiBhbGc7CiAKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCWFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlIHwgQ1JZUFRPX0FMR19URVNURUQsCisJCQkJICAgIG1hc2sgJiB+Q1JZUFRPX0FMR19URVNURUQpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIGFsZzsKKworCWlmICgoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgPT0KKwkgICAgQ1JZUFRPX0FMR19UWVBFX0dJVkNJUEhFUikgeworCQlpZiAoKGFsZy0+Y3JhX2ZsYWdzIF4gdHlwZSBeIH5tYXNrKSAmIENSWVBUT19BTEdfVEVTVEVEKSB7CisJCQljcnlwdG9fbW9kX3B1dChhbGcpOworCQkJYWxnID0gRVJSX1BUUigtRU5PRU5UKTsKKwkJfQorCQlyZXR1cm4gYWxnOworCX0KKworCUJVR19PTighKChhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSA9PQorCQkgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiA/IGFsZy0+Y3JhX2Jsa2NpcGhlci5pdnNpemUgOgorCQkJCQkgICAgIGFsZy0+Y3JhX2FibGtjaXBoZXIuaXZzaXplKSk7CisKIAlyZXR1cm4gRVJSX1BUUihjcnlwdG9fZ2l2Y2lwaGVyX2RlZmF1bHQoYWxnLCB0eXBlLCBtYXNrKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hZWFkLmMgYi9jcnlwdG8vYWVhZC5jCmluZGV4IDNhNmYzZjUuLmQ5YWE3MzMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZWFkLmMKKysrIGIvY3J5cHRvL2FlYWQuYwpAQCAtNDIyLDYgKzQyMiwyMiBAQAogCWlmICghYWxnLT5jcmFfYWVhZC5pdnNpemUpCiAJCXJldHVybiBhbGc7CiAKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCWFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlIHwgQ1JZUFRPX0FMR19URVNURUQsCisJCQkJICAgIG1hc2sgJiB+Q1JZUFRPX0FMR19URVNURUQpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIGFsZzsKKworCWlmIChhbGctPmNyYV90eXBlID09ICZjcnlwdG9fYWVhZF90eXBlKSB7CisJCWlmICgoYWxnLT5jcmFfZmxhZ3MgXiB0eXBlIF4gfm1hc2spICYgQ1JZUFRPX0FMR19URVNURUQpIHsKKwkJCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJCQlhbGcgPSBFUlJfUFRSKC1FTk9FTlQpOworCQl9CisJCXJldHVybiBhbGc7CisJfQorCisJQlVHX09OKCFhbGctPmNyYV9hZWFkLml2c2l6ZSk7CisKIAlyZXR1cm4gRVJSX1BUUihjcnlwdG9fbml2YWVhZF9kZWZhdWx0KGFsZywgdHlwZSwgbWFzaykpOwogfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnYm9zcy5jIGIvY3J5cHRvL2FsZ2Jvc3MuYwppbmRleCA0NjAxZTQyNi4uNjkwNmY5MiAxMDA2NDQKLS0tIGEvY3J5cHRvL2FsZ2Jvc3MuYworKysgYi9jcnlwdG8vYWxnYm9zcy5jCkBAIC0xMCw3ICsxMCw3IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvYWVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjA2LDggKzIwNiw3IEBACiAJdTMyIHR5cGUgPSBwYXJhbS0+dHlwZTsKIAlpbnQgZXJyID0gMDsKIAotCWlmICghKCh0eXBlIF4gQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUikgJgotCSAgICAgIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVJfTUFTSykgJiYgISh0eXBlICYgQ1JZUFRPX0FMR19HRU5JVikpCisJaWYgKHR5cGUgJiBDUllQVE9fQUxHX1RFU1RFRCkKIAkJZ290byBza2lwdGVzdDsKIAogCWVyciA9IGFsZ190ZXN0KHBhcmFtLT5kcml2ZXIsIHBhcmFtLT5hbGcsIHR5cGUsIENSWVBUT19BTEdfVEVTVEVEKTsKQEAgLTIyMyw2ICsyMjIsNyBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOwogCXN0cnVjdCBjcnlwdG9fdGVzdF9wYXJhbSAqcGFyYW07CisJdTMyIHR5cGU7CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKIAkJZ290byBlcnI7CkBAIC0yMzMsNyArMjMzLDE5IEBACiAKIAltZW1jcHkocGFyYW0tPmRyaXZlciwgYWxnLT5jcmFfZHJpdmVyX25hbWUsIHNpemVvZihwYXJhbS0+ZHJpdmVyKSk7CiAJbWVtY3B5KHBhcmFtLT5hbGcsIGFsZy0+Y3JhX25hbWUsIHNpemVvZihwYXJhbS0+YWxnKSk7Ci0JcGFyYW0tPnR5cGUgPSBhbGctPmNyYV9mbGFnczsKKwl0eXBlID0gYWxnLT5jcmFfZmxhZ3M7CisKKwkvKiBUaGlzIHBpZWNlIG9mIGNyYXAgbmVlZHMgdG8gZGlzYXBwZWFyIGludG8gcGVyLXR5cGUgdGVzdCBob29rcy4gKi8KKwlpZiAoKCEoKHR5cGUgXiBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSKSAmCisJICAgICAgIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVJfTUFTSykgJiYgISh0eXBlICYgQ1JZUFRPX0FMR19HRU5JVikgJiYKKwkgICAgICgoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgPT0KKwkgICAgICBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSID8gYWxnLT5jcmFfYmxrY2lwaGVyLml2c2l6ZSA6CisJCQkJCSAgYWxnLT5jcmFfYWJsa2NpcGhlci5pdnNpemUpKSB8fAorCSAgICAoISgodHlwZSBeIENSWVBUT19BTEdfVFlQRV9BRUFEKSAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSAmJgorCSAgICAgYWxnLT5jcmFfdHlwZSA9PSAmY3J5cHRvX25pdmFlYWRfdHlwZSAmJiBhbGctPmNyYV9hZWFkLml2c2l6ZSkpCisJCXR5cGUgfD0gQ1JZUFRPX0FMR19URVNURUQ7CisKKwlwYXJhbS0+dHlwZSA9IHR5cGU7CiAKIAl0aHJlYWQgPSBrdGhyZWFkX3J1bihjcnlwdG9tZ3JfdGVzdCwgcGFyYW0sICJjcnlwdG9tZ3JfdGVzdCIpOwogCWlmIChJU19FUlIodGhyZWFkKSkKZGlmZiAtLWdpdCBhL2NyeXB0by9hbnNpX2Nwcm5nLmMgYi9jcnlwdG8vYW5zaV9jcHJuZy5jCmluZGV4IDBmYWM4ZmYuLmQ4MGVkNGMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbnNpX2Nwcm5nLmMKKysrIGIvY3J5cHRvL2Fuc2lfY3BybmcuYwpAQCAtMTMyLDkgKzEzMiwxNSBAQAogCQkJICovCiAJCQlpZiAoIW1lbWNtcChjdHgtPnJhbmRfZGF0YSwgY3R4LT5sYXN0X3JhbmRfZGF0YSwKIAkJCQkJREVGQVVMVF9CTEtfU1opKSB7CisJCQkJaWYgKGZpcHNfZW5hYmxlZCkgeworCQkJCQlwYW5pYygiY3BybmcgJXAgRmFpbGVkIHJlcGV0aXRpb24gY2hlY2shXG4iLAorCQkJCQkJY3R4KTsKKwkJCQl9CisKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJImN0eCAlcCBGYWlsZWQgcmVwZXRpdGlvbiBjaGVjayFcbiIsCiAJCQkJCWN0eCk7CisKIAkJCQljdHgtPmZsYWdzIHw9IFBSTkdfTkVFRF9SRVNFVDsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTMzOCw3ICszNDQsMTYgQEAKIAogCXNwaW5fbG9ja19pbml0KCZjdHgtPnBybmdfbG9jayk7CiAKLQlyZXR1cm4gcmVzZXRfcHJuZ19jb250ZXh0KGN0eCwgTlVMTCwgREVGQVVMVF9QUk5HX0tTWiwgTlVMTCwgTlVMTCk7CisJaWYgKHJlc2V0X3BybmdfY29udGV4dChjdHgsIE5VTEwsIERFRkFVTFRfUFJOR19LU1osIE5VTEwsIE5VTEwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIGFmdGVyIGFsbG9jYXRpb24sIHdlIHNob3VsZCBhbHdheXMgZm9yY2UgdGhlIHVzZXIgdG8gcmVzZXQKKwkgKiBzbyB0aGV5IGRvbid0IGluYWR2ZXJ0ZW50bHkgdXNlIHRoZSBpbnNlY3VyZSBkZWZhdWx0IHZhbHVlcworCSAqIHdpdGhvdXQgc3BlY2lmeWluZyB0aGVtIGludGVudGlhbGx5CisJICovCisJY3R4LT5mbGFncyB8PSBQUk5HX05FRURfUkVTRVQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGNwcm5nX2V4aXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKZGlmZiAtLWdpdCBhL2NyeXB0by9hcGkuYyBiL2NyeXB0by9hcGkuYwppbmRleCAzOGEyYmMwLi4zMTRkYWI5IDEwMDY0NAotLS0gYS9jcnlwdG8vYXBpLmMKKysrIGIvY3J5cHRvL2FwaS5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqbGFydmFsOwogCWludCBvazsKIAotCWlmICghKG1hc2sgJiBDUllQVE9fQUxHX1RFU1RFRCkpIHsKKwlpZiAoISgodHlwZSB8IG1hc2spICYgQ1JZUFRPX0FMR19URVNURUQpKSB7CiAJCXR5cGUgfD0gQ1JZUFRPX0FMR19URVNURUQ7CiAJCW1hc2sgfD0gQ1JZUFRPX0FMR19URVNURUQ7CiAJfQpAQCAtNDY0LDggKzQ2NCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxsb2NfYmFzZSk7CiAKLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCkKK3ZvaWQgKmNyeXB0b19jcmVhdGVfdGZtKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCisJCQljb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQogewogCWNoYXIgKm1lbTsKIAlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gTlVMTDsKQEAgLTQ5OSw5ICs0OTksOSBAQAogCQljcnlwdG9fc2hvb3RfYWxnKGFsZyk7CiAJa2ZyZWUobWVtKTsKIG91dF9lcnI6Ci0JdGZtID0gRVJSX1BUUihlcnIpOworCW1lbSA9IEVSUl9QVFIoZXJyKTsKIG91dDoKLQlyZXR1cm4gdGZtOworCXJldHVybiBtZW07CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fY3JlYXRlX3RmbSk7CiAKQEAgLTUyNSwxMiArNTI1LDExIEBACiAgKgogICoJSW4gY2FzZSBvZiBlcnJvciB0aGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIHBvaW50ZXIuCiAgKi8KLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kLAotCQkJCSAgICB1MzIgdHlwZSwgdTMyIG1hc2spCit2b2lkICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCwgdTMyIHR5cGUsIHUzMiBtYXNrKQogewogCXN0cnVjdCBjcnlwdG9fYWxnICooKmxvb2t1cCkoY29uc3QgY2hhciAqbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXZvaWQgKnRmbTsKIAlpbnQgZXJyOwogCiAJdHlwZSAmPSBmcm9udGVuZC0+bWFza2NsZWFyOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jsa2NpcGhlci5jIGIvY3J5cHRvL2Jsa2NpcGhlci5jCmluZGV4IGQ3MGE0MWMuLjkwZDI2YzkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibGtjaXBoZXIuYworKysgYi9jcnlwdG8vYmxrY2lwaGVyLmMKQEAgLTUyMSw3ICs1MjEsNyBAQAogCWludCBlcnI7CiAKIAl0eXBlID0gY3J5cHRvX3NrY2lwaGVyX3R5cGUodHlwZSk7Ci0JbWFzayA9IGNyeXB0b19za2NpcGhlcl9tYXNrKG1hc2spIHwgQ1JZUFRPX0FMR19HRU5JVjsKKwltYXNrID0gY3J5cHRvX3NrY2lwaGVyX21hc2sobWFzayl8IENSWVBUT19BTEdfR0VOSVY7CiAKIAlhbGcgPSBjcnlwdG9fYWxnX21vZF9sb29rdXAobmFtZSwgdHlwZSwgbWFzayk7CiAJaWYgKElTX0VSUihhbGcpKQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2NoYWluaXYuYyBiL2NyeXB0by9jaGFpbml2LmMKaW5kZXggN2MzN2E0OS4uYmEyMDBiMCAxMDA2NDQKLS0tIGEvY3J5cHRvL2NoYWluaXYuYworKysgYi9jcnlwdG8vY2hhaW5pdi5jCkBAIC0xNSw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvc2tjaXBoZXIuaD4KICNpbmNsdWRlIDxjcnlwdG8vcm5nLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2NyeXB0b193cS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEzMyw3ICsxMzQsNyBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JcXVldWVkID0gc2NoZWR1bGVfd29yaygmY3R4LT5wb3N0cG9uZWQpOworCXF1ZXVlZCA9IHF1ZXVlX3dvcmsoa2NyeXB0b193cSwgJmN0eC0+cG9zdHBvbmVkKTsKIAlCVUdfT04oIXF1ZXVlZCk7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2NyeXB0by9jcnlwdGQuYyBiL2NyeXB0by9jcnlwdGQuYwppbmRleCBkMjllMDZiLi5kMTRiMjI2IDEwMDY0NAotLS0gYS9jcnlwdG8vY3J5cHRkLmMKKysrIGIvY3J5cHRvL2NyeXB0ZC5jCkBAIC0xMiwzMCArMTIsMzEgQEAKIAogI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KICNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvaGFzaC5oPgorI2luY2x1ZGUgPGNyeXB0by9jcnlwdGQuaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3J5cHRvX3dxLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKLSNkZWZpbmUgQ1JZUFREX01BWF9RTEVOIDEwMAorI2RlZmluZSBDUllQVERfTUFYX0NQVV9RTEVOIDEwMAogCi1zdHJ1Y3QgY3J5cHRkX3N0YXRlIHsKLQlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IG11dGV4IG11dGV4Oworc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgewogCXN0cnVjdCBjcnlwdG9fcXVldWUgcXVldWU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworfTsKKworc3RydWN0IGNyeXB0ZF9xdWV1ZSB7CisJc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgKmNwdV9xdWV1ZTsKIH07CiAKIHN0cnVjdCBjcnlwdGRfaW5zdGFuY2VfY3R4IHsKIAlzdHJ1Y3QgY3J5cHRvX3NwYXduIHNwYXduOwotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlOworCXN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlOwogfTsKIAogc3RydWN0IGNyeXB0ZF9ibGtjaXBoZXJfY3R4IHsKQEAgLTU0LDExICs1NSw4NSBAQAogCWNyeXB0b19jb21wbGV0aW9uX3QgY29tcGxldGU7CiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdGRfc3RhdGUgKmNyeXB0ZF9nZXRfc3RhdGUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3N0YXRpYyB2b2lkIGNyeXB0ZF9xdWV1ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworc3RhdGljIGludCBjcnlwdGRfaW5pdF9xdWV1ZShzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpxdWV1ZSwKKwkJCSAgICAgdW5zaWduZWQgaW50IG1heF9jcHVfcWxlbikKK3sKKwlpbnQgY3B1OworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisKKwlxdWV1ZS0+Y3B1X3F1ZXVlID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlKTsKKwlpZiAoIXF1ZXVlLT5jcHVfcXVldWUpCisJCXJldHVybiAtRU5PTUVNOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJY3B1X3F1ZXVlID0gcGVyX2NwdV9wdHIocXVldWUtPmNwdV9xdWV1ZSwgY3B1KTsKKwkJY3J5cHRvX2luaXRfcXVldWUoJmNwdV9xdWV1ZS0+cXVldWUsIG1heF9jcHVfcWxlbik7CisJCUlOSVRfV09SSygmY3B1X3F1ZXVlLT53b3JrLCBjcnlwdGRfcXVldWVfd29ya2VyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0ZF9maW5pX3F1ZXVlKHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQoreworCWludCBjcHU7CisJc3RydWN0IGNyeXB0ZF9jcHVfcXVldWUgKmNwdV9xdWV1ZTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJY3B1X3F1ZXVlID0gcGVyX2NwdV9wdHIocXVldWUtPmNwdV9xdWV1ZSwgY3B1KTsKKwkJQlVHX09OKGNwdV9xdWV1ZS0+cXVldWUucWxlbik7CisJfQorCWZyZWVfcGVyY3B1KHF1ZXVlLT5jcHVfcXVldWUpOworfQorCitzdGF0aWMgaW50IGNyeXB0ZF9lbnF1ZXVlX3JlcXVlc3Qoc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUsCisJCQkJICBzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJaW50IGNwdSwgZXJyOworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJY3B1X3F1ZXVlID0gcGVyX2NwdV9wdHIocXVldWUtPmNwdV9xdWV1ZSwgY3B1KTsKKwllcnIgPSBjcnlwdG9fZW5xdWV1ZV9yZXF1ZXN0KCZjcHVfcXVldWUtPnF1ZXVlLCByZXF1ZXN0KTsKKwlxdWV1ZV93b3JrX29uKGNwdSwga2NyeXB0b193cSwgJmNwdV9xdWV1ZS0+d29yayk7CisJcHV0X2NwdSgpOworCisJcmV0dXJuIGVycjsKK30KKworLyogQ2FsbGVkIGluIHdvcmtxdWV1ZSBjb250ZXh0LCBkbyBvbmUgcmVhbCBjcnlwdGlvbiB3b3JrICh2aWEKKyAqIHJlcS0+Y29tcGxldGUpIGFuZCByZXNjaGVkdWxlIGl0c2VsZiBpZiB0aGVyZSBhcmUgbW9yZSB3b3JrIHRvCisgKiBkby4gKi8KK3N0YXRpYyB2b2lkIGNyeXB0ZF9xdWV1ZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlICpjcHVfcXVldWU7CisJc3RydWN0IGNyeXB0b19hc3luY19yZXF1ZXN0ICpyZXEsICpiYWNrbG9nOworCisJY3B1X3F1ZXVlID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlLCB3b3JrKTsKKwkvKiBPbmx5IGhhbmRsZSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgdG8gYXZvaWQgaG9nZ2luZyBjcnlwdG8KKwkgKiB3b3JrcXVldWUuIHByZWVtcHRfZGlzYWJsZS9lbmFibGUgaXMgdXNlZCB0byBwcmV2ZW50CisJICogYmVpbmcgcHJlZW1wdGVkIGJ5IGNyeXB0ZF9lbnF1ZXVlX3JlcXVlc3QoKSAqLworCXByZWVtcHRfZGlzYWJsZSgpOworCWJhY2tsb2cgPSBjcnlwdG9fZ2V0X2JhY2tsb2coJmNwdV9xdWV1ZS0+cXVldWUpOworCXJlcSA9IGNyeXB0b19kZXF1ZXVlX3JlcXVlc3QoJmNwdV9xdWV1ZS0+cXVldWUpOworCXByZWVtcHRfZW5hYmxlKCk7CisKKwlpZiAoIXJlcSkKKwkJcmV0dXJuOworCisJaWYgKGJhY2tsb2cpCisJCWJhY2tsb2ctPmNvbXBsZXRlKGJhY2tsb2csIC1FSU5QUk9HUkVTUyk7CisJcmVxLT5jb21wbGV0ZShyZXEsIDApOworCisJaWYgKGNwdV9xdWV1ZS0+cXVldWUucWxlbikKKwkJcXVldWVfd29yayhrY3J5cHRvX3dxLCAmY3B1X3F1ZXVlLT53b3JrKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRkX3F1ZXVlICpjcnlwdGRfZ2V0X3F1ZXVlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCA9IGNyeXB0b190Zm1fYWxnX2luc3RhbmNlKHRmbSk7CiAJc3RydWN0IGNyeXB0ZF9pbnN0YW5jZV9jdHggKmljdHggPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOwotCXJldHVybiBpY3R4LT5zdGF0ZTsKKwlyZXR1cm4gaWN0eC0+cXVldWU7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRkX2Jsa2NpcGhlcl9zZXRrZXkoc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICpwYXJlbnQsCkBAIC0xMzAsMTkgKzIwNSwxMyBAQAogewogCXN0cnVjdCBjcnlwdGRfYmxrY2lwaGVyX3JlcXVlc3RfY3R4ICpyY3R4ID0gYWJsa2NpcGhlcl9yZXF1ZXN0X2N0eChyZXEpOwogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfcmVxdGZtKHJlcSk7Ci0Jc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUgPQotCQljcnlwdGRfZ2V0X3N0YXRlKGNyeXB0b19hYmxrY2lwaGVyX3RmbSh0Zm0pKTsKLQlpbnQgZXJyOworCXN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlOwogCisJcXVldWUgPSBjcnlwdGRfZ2V0X3F1ZXVlKGNyeXB0b19hYmxrY2lwaGVyX3RmbSh0Zm0pKTsKIAlyY3R4LT5jb21wbGV0ZSA9IHJlcS0+YmFzZS5jb21wbGV0ZTsKIAlyZXEtPmJhc2UuY29tcGxldGUgPSBjb21wbGV0ZTsKIAotCXNwaW5fbG9ja19iaCgmc3RhdGUtPmxvY2spOwotCWVyciA9IGFibGtjaXBoZXJfZW5xdWV1ZV9yZXF1ZXN0KCZzdGF0ZS0+cXVldWUsIHJlcSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQotCXdha2VfdXBfcHJvY2VzcyhzdGF0ZS0+dGFzayk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gY3J5cHRkX2VucXVldWVfcmVxdWVzdChxdWV1ZSwgJnJlcS0+YmFzZSk7CiB9CiAKIHN0YXRpYyBpbnQgY3J5cHRkX2Jsa2NpcGhlcl9lbmNyeXB0X2VucXVldWUoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKQpAQCAtMTc2LDIxICsyNDUsMTIgQEAKIHN0YXRpYyB2b2lkIGNyeXB0ZF9ibGtjaXBoZXJfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKIAlzdHJ1Y3QgY3J5cHRkX2Jsa2NpcGhlcl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0Jc3RydWN0IGNyeXB0ZF9zdGF0ZSAqc3RhdGUgPSBjcnlwdGRfZ2V0X3N0YXRlKHRmbSk7Ci0JaW50IGFjdGl2ZTsKLQotCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7Ci0JYWN0aXZlID0gYWJsa2NpcGhlcl90Zm1faW5fcXVldWUoJnN0YXRlLT5xdWV1ZSwKLQkJCQkJIF9fY3J5cHRvX2FibGtjaXBoZXJfY2FzdCh0Zm0pKTsKLQltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7Ci0KLQlCVUdfT04oYWN0aXZlKTsKIAogCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihjdHgtPmNoaWxkKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvY19pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAotCQkJCQkJICAgICBzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKKwkJCQkJCSAgICAgc3RydWN0IGNyeXB0ZF9xdWV1ZSAqcXVldWUpCiB7CiAJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdDsKIAlzdHJ1Y3QgY3J5cHRkX2luc3RhbmNlX2N0eCAqY3R4OwpAQCAtMjEzLDcgKzI3Myw3IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZV9pbnN0OwogCi0JY3R4LT5zdGF0ZSA9IHN0YXRlOworCWN0eC0+cXVldWUgPSBxdWV1ZTsKIAogCW1lbWNweShpbnN0LT5hbGcuY3JhX25hbWUsIGFsZy0+Y3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUpOwogCkBAIC0yMzEsNyArMjkxLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvY19ibGtjaXBoZXIoCi0Jc3RydWN0IHJ0YXR0ciAqKnRiLCBzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKKwlzdHJ1Y3QgcnRhdHRyICoqdGIsIHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKQEAgLTI0MSw3ICszMDEsNyBAQAogCWlmIChJU19FUlIoYWxnKSkKIAkJcmV0dXJuIEVSUl9DQVNUKGFsZyk7CiAKLQlpbnN0ID0gY3J5cHRkX2FsbG9jX2luc3RhbmNlKGFsZywgc3RhdGUpOworCWluc3QgPSBjcnlwdGRfYWxsb2NfaW5zdGFuY2UoYWxnLCBxdWV1ZSk7CiAJaWYgKElTX0VSUihpbnN0KSkKIAkJZ290byBvdXRfcHV0X2FsZzsKIApAQCAtMjg5LDE1ICszNDksNiBAQAogc3RhdGljIHZvaWQgY3J5cHRkX2hhc2hfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKIAlzdHJ1Y3QgY3J5cHRkX2hhc2hfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlID0gY3J5cHRkX2dldF9zdGF0ZSh0Zm0pOwotCWludCBhY3RpdmU7Ci0KLQltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCWFjdGl2ZSA9IGFoYXNoX3RmbV9pbl9xdWV1ZSgmc3RhdGUtPnF1ZXVlLAotCQkJCV9fY3J5cHRvX2FoYXNoX2Nhc3QodGZtKSk7Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCi0JQlVHX09OKGFjdGl2ZSk7CiAKIAljcnlwdG9fZnJlZV9oYXNoKGN0eC0+Y2hpbGQpOwogfQpAQCAtMzIzLDE5ICszNzQsMTMgQEAKIHsKIAlzdHJ1Y3QgY3J5cHRkX2hhc2hfcmVxdWVzdF9jdHggKnJjdHggPSBhaGFzaF9yZXF1ZXN0X2N0eChyZXEpOwogCXN0cnVjdCBjcnlwdG9fYWhhc2ggKnRmbSA9IGNyeXB0b19haGFzaF9yZXF0Zm0ocmVxKTsKLQlzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSA9Ci0JCWNyeXB0ZF9nZXRfc3RhdGUoY3J5cHRvX2FoYXNoX3RmbSh0Zm0pKTsKLQlpbnQgZXJyOworCXN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlID0KKwkJY3J5cHRkX2dldF9xdWV1ZShjcnlwdG9fYWhhc2hfdGZtKHRmbSkpOwogCiAJcmN0eC0+Y29tcGxldGUgPSByZXEtPmJhc2UuY29tcGxldGU7CiAJcmVxLT5iYXNlLmNvbXBsZXRlID0gY29tcGxldGU7CiAKLQlzcGluX2xvY2tfYmgoJnN0YXRlLT5sb2NrKTsKLQllcnIgPSBhaGFzaF9lbnF1ZXVlX3JlcXVlc3QoJnN0YXRlLT5xdWV1ZSwgcmVxKTsKLQlzcGluX3VubG9ja19iaCgmc3RhdGUtPmxvY2spOwotCi0Jd2FrZV91cF9wcm9jZXNzKHN0YXRlLT50YXNrKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBjcnlwdGRfZW5xdWV1ZV9yZXF1ZXN0KHF1ZXVlLCAmcmVxLT5iYXNlKTsKIH0KIAogc3RhdGljIHZvaWQgY3J5cHRkX2hhc2hfaW5pdChzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcV9hc3luYywgaW50IGVycikKQEAgLTQ2OCw3ICs1MTMsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqY3J5cHRkX2FsbG9jX2hhc2goCi0Jc3RydWN0IHJ0YXR0ciAqKnRiLCBzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKKwlzdHJ1Y3QgcnRhdHRyICoqdGIsIHN0cnVjdCBjcnlwdGRfcXVldWUgKnF1ZXVlKQogewogCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3Q7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKQEAgLTQ3OCw3ICs1MjMsNyBAQAogCWlmIChJU19FUlIoYWxnKSkKIAkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihhbGcpKTsKIAotCWluc3QgPSBjcnlwdGRfYWxsb2NfaW5zdGFuY2UoYWxnLCBzdGF0ZSk7CisJaW5zdCA9IGNyeXB0ZF9hbGxvY19pbnN0YW5jZShhbGcsIHF1ZXVlKTsKIAlpZiAoSVNfRVJSKGluc3QpKQogCQlnb3RvIG91dF9wdXRfYWxnOwogCkBAIC01MDIsNyArNTQ3LDcgQEAKIAlyZXR1cm4gaW5zdDsKIH0KIAotc3RhdGljIHN0cnVjdCBjcnlwdGRfc3RhdGUgc3RhdGU7CitzdGF0aWMgc3RydWN0IGNyeXB0ZF9xdWV1ZSBxdWV1ZTsKIAogc3RhdGljIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmNyeXB0ZF9hbGxvYyhzdHJ1Y3QgcnRhdHRyICoqdGIpCiB7CkBAIC01MTQsOSArNTU5LDkgQEAKIAogCXN3aXRjaCAoYWxndC0+dHlwZSAmIGFsZ3QtPm1hc2sgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgewogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUjoKLQkJcmV0dXJuIGNyeXB0ZF9hbGxvY19ibGtjaXBoZXIodGIsICZzdGF0ZSk7CisJCXJldHVybiBjcnlwdGRfYWxsb2NfYmxrY2lwaGVyKHRiLCAmcXVldWUpOwogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0RJR0VTVDoKLQkJcmV0dXJuIGNyeXB0ZF9hbGxvY19oYXNoKHRiLCAmc3RhdGUpOworCQlyZXR1cm4gY3J5cHRkX2FsbG9jX2hhc2godGIsICZxdWV1ZSk7CiAJfQogCiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CkBAIC01MzcsODIgKzU4Miw1OCBAQAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNyeXB0ZF9jcmVhdGVfdGhyZWFkKHN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlLAotCQkJCSAgICAgICBpbnQgKCpmbikodm9pZCAqZGF0YSksIGNvbnN0IGNoYXIgKm5hbWUpCitzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkJCQkJICB1MzIgdHlwZSwgdTMyIG1hc2spCiB7Ci0Jc3Bpbl9sb2NrX2luaXQoJnN0YXRlLT5sb2NrKTsKLQltdXRleF9pbml0KCZzdGF0ZS0+bXV0ZXgpOwotCWNyeXB0b19pbml0X3F1ZXVlKCZzdGF0ZS0+cXVldWUsIENSWVBURF9NQVhfUUxFTik7CisJY2hhciBjcnlwdGRfYWxnX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07CisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm07CiAKLQlzdGF0ZS0+dGFzayA9IGt0aHJlYWRfcnVuKGZuLCBzdGF0ZSwgbmFtZSk7Ci0JaWYgKElTX0VSUihzdGF0ZS0+dGFzaykpCi0JCXJldHVybiBQVFJfRVJSKHN0YXRlLT50YXNrKTsKKwlpZiAoc25wcmludGYoY3J5cHRkX2FsZ19uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLAorCQkgICAgICJjcnlwdGQoJXMpIiwgYWxnX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCXRmbSA9IGNyeXB0b19hbGxvY19hYmxrY2lwaGVyKGNyeXB0ZF9hbGdfbmFtZSwgdHlwZSwgbWFzayk7CisJaWYgKElTX0VSUih0Zm0pKQorCQlyZXR1cm4gRVJSX0NBU1QodGZtKTsKKwlpZiAoY3J5cHRvX2FibGtjaXBoZXJfdGZtKHRmbSktPl9fY3J0X2FsZy0+Y3JhX21vZHVsZSAhPSBUSElTX01PRFVMRSkgeworCQljcnlwdG9fZnJlZV9hYmxrY2lwaGVyKHRmbSk7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KIAotCXJldHVybiAwOworCXJldHVybiBfX2NyeXB0ZF9hYmxrY2lwaGVyX2Nhc3QodGZtKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGNyeXB0ZF9zdG9wX3RocmVhZChzdHJ1Y3QgY3J5cHRkX3N0YXRlICpzdGF0ZSkKK3N0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICpjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZChzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKnRmbSkKIHsKLQlCVUdfT04oc3RhdGUtPnF1ZXVlLnFsZW4pOwotCWt0aHJlYWRfc3RvcChzdGF0ZS0+dGFzayk7CisJc3RydWN0IGNyeXB0ZF9ibGtjaXBoZXJfY3R4ICpjdHggPSBjcnlwdG9fYWJsa2NpcGhlcl9jdHgoJnRmbS0+YmFzZSk7CisJcmV0dXJuIGN0eC0+Y2hpbGQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdGRfYWJsa2NpcGhlcl9jaGlsZCk7CiAKLXN0YXRpYyBpbnQgY3J5cHRkX3RocmVhZCh2b2lkICpkYXRhKQordm9pZCBjcnlwdGRfZnJlZV9hYmxrY2lwaGVyKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqdGZtKQogewotCXN0cnVjdCBjcnlwdGRfc3RhdGUgKnN0YXRlID0gZGF0YTsKLQlpbnQgc3RvcDsKLQotCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOwotCi0JZG8gewotCQlzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwgKmJhY2tsb2c7Ci0KLQkJbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCi0JCXNwaW5fbG9ja19iaCgmc3RhdGUtPmxvY2spOwotCQliYWNrbG9nID0gY3J5cHRvX2dldF9iYWNrbG9nKCZzdGF0ZS0+cXVldWUpOwotCQlyZXEgPSBjcnlwdG9fZGVxdWV1ZV9yZXF1ZXN0KCZzdGF0ZS0+cXVldWUpOwotCQlzcGluX3VubG9ja19iaCgmc3RhdGUtPmxvY2spOwotCi0JCXN0b3AgPSBrdGhyZWFkX3Nob3VsZF9zdG9wKCk7Ci0KLQkJaWYgKHN0b3AgfHwgcmVxKSB7Ci0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JCQlpZiAocmVxKSB7Ci0JCQkJaWYgKGJhY2tsb2cpCi0JCQkJCWJhY2tsb2ctPmNvbXBsZXRlKGJhY2tsb2csCi0JCQkJCQkJICAtRUlOUFJPR1JFU1MpOwotCQkJCXJlcS0+Y29tcGxldGUocmVxLCAwKTsKLQkJCX0KLQkJfQotCi0JCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKLQotCQlzY2hlZHVsZSgpOwotCX0gd2hpbGUgKCFzdG9wKTsKLQotCXJldHVybiAwOworCWNyeXB0b19mcmVlX2FibGtjaXBoZXIoJnRmbS0+YmFzZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdGRfZnJlZV9hYmxrY2lwaGVyKTsKIAogc3RhdGljIGludCBfX2luaXQgY3J5cHRkX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JZXJyID0gY3J5cHRkX2NyZWF0ZV90aHJlYWQoJnN0YXRlLCBjcnlwdGRfdGhyZWFkLCAiY3J5cHRkIik7CisJZXJyID0gY3J5cHRkX2luaXRfcXVldWUoJnF1ZXVlLCBDUllQVERfTUFYX0NQVV9RTEVOKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKCZjcnlwdGRfdG1wbCk7CiAJaWYgKGVycikKLQkJa3RocmVhZF9zdG9wKHN0YXRlLnRhc2spOworCQljcnlwdGRfZmluaV9xdWV1ZSgmcXVldWUpOwogCiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNyeXB0ZF9leGl0KHZvaWQpCiB7Ci0JY3J5cHRkX3N0b3BfdGhyZWFkKCZzdGF0ZSk7CisJY3J5cHRkX2ZpbmlfcXVldWUoJnF1ZXVlKTsKIAljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRkX3RtcGwpOwogfQogCmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRvX3dxLmMgYi9jcnlwdG8vY3J5cHRvX3dxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjZjYyNAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9jcnlwdG9fd3EuYwpAQCAtMCwwICsxLDM4IEBACisvKgorICogV29ya3F1ZXVlIGZvciBjcnlwdG8gc3Vic3lzdGVtCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEludGVsIENvcnAuCisgKiAgIEF1dGhvcjogSHVhbmcgWWluZyA8eWluZy5odWFuZ0BpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vY3J5cHRvX3dxLmg+CisKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprY3J5cHRvX3dxOworRVhQT1JUX1NZTUJPTF9HUEwoa2NyeXB0b193cSk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNyeXB0b193cV9pbml0KHZvaWQpCit7CisJa2NyeXB0b193cSA9IGNyZWF0ZV93b3JrcXVldWUoImNyeXB0byIpOworCWlmICh1bmxpa2VseSgha2NyeXB0b193cSkpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3J5cHRvX3dxX2V4aXQodm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZShrY3J5cHRvX3dxKTsKK30KKworbW9kdWxlX2luaXQoY3J5cHRvX3dxX2luaXQpOworbW9kdWxlX2V4aXQoY3J5cHRvX3dxX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIldvcmtxdWV1ZSBmb3IgY3J5cHRvIHN1YnN5c3RlbSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2dmMTI4bXVsLmMgYi9jcnlwdG8vZ2YxMjhtdWwuYwppbmRleCBlY2JlYWExLi5hOTBkMjYwIDEwMDY0NAotLS0gYS9jcnlwdG8vZ2YxMjhtdWwuYworKysgYi9jcnlwdG8vZ2YxMjhtdWwuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAwNiwgUmlrIFNuZWwgPHJzbmVsQGN1YmUuZHluZG5zLm9yZz4KICAqCiAgKiBCYXNlZCBvbiBEciBCcmlhbiBHbGFkbWFuJ3MgKEdQTCdkKSB3b3JrIHB1Ymxpc2hlZCBhdAotICogaHR0cDovL2ZwLmdsYWRtYW4ucGx1cy5jb20vY3J5cHRvZ3JhcGh5X3RlY2hub2xvZ3kvaW5kZXguaHRtCisgKiBodHRwOi8vZ2xhZG1hbi5wbHVzaG9zdC5jby51ay9vbGRzaXRlL2NyeXB0b2dyYXBoeV90ZWNobm9sb2d5L2luZGV4LnBocAogICogU2VlIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGJlbG93LgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CmRpZmYgLS1naXQgYS9jcnlwdG8vaW50ZXJuYWwuaCBiL2NyeXB0by9pbnRlcm5hbC5oCmluZGV4IDNjMTlhMjcuLmZjNzZlMWYgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbnRlcm5hbC5oCisrKyBiL2NyeXB0by9pbnRlcm5hbC5oCkBAIC0xMDksOCArMTA5LDEwIEBACiB2b2lkIGNyeXB0b19zaG9vdF9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZyk7CiBzdHJ1Y3QgY3J5cHRvX3RmbSAqX19jcnlwdG9fYWxsb2NfdGZtKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsIHUzMiB0eXBlLAogCQkJCSAgICAgIHUzMiBtYXNrKTsKLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCk7Cit2b2lkICpjcnlwdG9fY3JlYXRlX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLAorCQkJY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCk7Cit2b2lkICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGNyeXB0b190eXBlICpmcm9udGVuZCwgdTMyIHR5cGUsIHUzMiBtYXNrKTsKIAogaW50IGNyeXB0b19yZWdpc3Rlcl9pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsLAogCQkJICAgICBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KTsKZGlmZiAtLWdpdCBhL2NyeXB0by9wY29tcHJlc3MuYyBiL2NyeXB0by9wY29tcHJlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTlhNGFmCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL3Bjb21wcmVzcy5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDcnlwdG9ncmFwaGljIEFQSS4KKyAqCisgKiBQYXJ0aWFsIChkZSljb21wcmVzc2lvbiBvcGVyYXRpb25zLgorICoKKyAqIENvcHlyaWdodCAyMDA4IFNvbnkgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4KKyAqIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8Y3J5cHRvL2NvbXByZXNzLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisKK3N0YXRpYyBpbnQgY3J5cHRvX3Bjb21wX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTMyIHR5cGUsIHUzMiBtYXNrKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b19wY29tcF9leHRzaXplKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCisJCQkJCSBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQoreworCXJldHVybiBhbGctPmNyYV9jdHhzaXplOworfQorCitzdGF0aWMgaW50IGNyeXB0b19wY29tcF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJCSBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG9fcGNvbXBfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCisJX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOworc3RhdGljIHZvaWQgY3J5cHRvX3Bjb21wX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXNlcV9wcmludGYobSwgInR5cGUgICAgICAgICA6IHBjb21wXG4iKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSBjcnlwdG9fcGNvbXBfdHlwZSA9IHsKKwkuZXh0c2l6ZQk9IGNyeXB0b19wY29tcF9leHRzaXplLAorCS5pbml0CQk9IGNyeXB0b19wY29tcF9pbml0LAorCS5pbml0X3RmbQk9IGNyeXB0b19wY29tcF9pbml0X3RmbSwKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCS5zaG93CQk9IGNyeXB0b19wY29tcF9zaG93LAorI2VuZGlmCisJLm1hc2tjbGVhcgk9IH5DUllQVE9fQUxHX1RZUEVfTUFTSywKKwkubWFza3NldAk9IENSWVBUT19BTEdfVFlQRV9NQVNLLAorCS50eXBlCQk9IENSWVBUT19BTEdfVFlQRV9QQ09NUFJFU1MsCisJLnRmbXNpemUJPSBvZmZzZXRvZihzdHJ1Y3QgY3J5cHRvX3Bjb21wLCBiYXNlKSwKK307CisKK3N0cnVjdCBjcnlwdG9fcGNvbXAgKmNyeXB0b19hbGxvY19wY29tcChjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHR5cGUsCisJCQkJCXUzMiBtYXNrKQoreworCXJldHVybiBjcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCAmY3J5cHRvX3Bjb21wX3R5cGUsIHR5cGUsIG1hc2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2FsbG9jX3Bjb21wKTsKKworaW50IGNyeXB0b19yZWdpc3Rlcl9wY29tcChzdHJ1Y3QgcGNvbXBfYWxnICphbGcpCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmJhc2UgPSAmYWxnLT5iYXNlOworCisJYmFzZS0+Y3JhX3R5cGUgPSAmY3J5cHRvX3Bjb21wX3R5cGU7CisJYmFzZS0+Y3JhX2ZsYWdzICY9IH5DUllQVE9fQUxHX1RZUEVfTUFTSzsKKwliYXNlLT5jcmFfZmxhZ3MgfD0gQ1JZUFRPX0FMR19UWVBFX1BDT01QUkVTUzsKKworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfYWxnKGJhc2UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3JlZ2lzdGVyX3Bjb21wKTsKKworaW50IGNyeXB0b191bnJlZ2lzdGVyX3Bjb21wKHN0cnVjdCBwY29tcF9hbGcgKmFsZykKK3sKKwlyZXR1cm4gY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGctPmJhc2UpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3VucmVnaXN0ZXJfcGNvbXApOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBhcnRpYWwgKGRlKWNvbXByZXNzaW9uIHR5cGUiKTsKK01PRFVMRV9BVVRIT1IoIlNvbnkgQ29ycG9yYXRpb24iKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGEyNTZfZ2VuZXJpYy5jIGIvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKaW5kZXggY2FhMzU0Mi4uNjM0OWQ4MyAxMDA2NDQKLS0tIGEvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKKysrIGIvY3J5cHRvL3NoYTI1Nl9nZW5lcmljLmMKQEAgLTIsNyArMiw3IEBACiAgKiBDcnlwdG9ncmFwaGljIEFQSS4KICAqCiAgKiBTSEEtMjU2LCBhcyBzcGVjaWZpZWQgaW4KLSAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL3Nocy9zaGEyNTYtMzg0LTUxMi5wZGYKKyAqIGh0dHA6Ly9jc3JjLm5pc3QuZ292L2dyb3Vwcy9TVE0vY2F2cC9kb2N1bWVudHMvc2hzL3NoYTI1Ni0zODQtNTEyLnBkZgogICoKICAqIFNIQS0yNTYgY29kZSBieSBKZWFuLUx1YyBDb29rZSA8amxjb29rZUBjZXJ0YWlua2V5LmNvbT4uCiAgKgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYXNoLmMgYi9jcnlwdG8vc2hhc2guYwppbmRleCBkNWEyYjYxLi43YTY1OTczIDEwMDY0NAotLS0gYS9jcnlwdG8vc2hhc2guYworKysgYi9jcnlwdG8vc2hhc2guYwpAQCAtMTgsMTUgKzE4LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX3NoYXNoX3R5cGU7Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19zaGFzaCAqX19jcnlwdG9fc2hhc2hfY2FzdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQotewotCXJldHVybiBjb250YWluZXJfb2YodGZtLCBzdHJ1Y3QgY3J5cHRvX3NoYXNoLCBiYXNlKTsKLX0KLQogI2luY2x1ZGUgImludGVybmFsLmgiCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX3NoYXNoX3R5cGU7CisKIHN0YXRpYyBpbnQgc2hhc2hfc2V0a2V5X3VuYWxpZ25lZChzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCiAJCQkJICB1bnNpZ25lZCBpbnQga2V5bGVuKQogewpAQCAtMjgyLDggKzI3Nyw3IEBACiAJaWYgKCFjcnlwdG9fbW9kX2dldChjYWxnKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlzaGFzaCA9IF9fY3J5cHRvX3NoYXNoX2Nhc3QoY3J5cHRvX2NyZWF0ZV90Zm0oCi0JCWNhbGcsICZjcnlwdG9fc2hhc2hfdHlwZSkpOworCXNoYXNoID0gY3J5cHRvX2NyZWF0ZV90Zm0oY2FsZywgJmNyeXB0b19zaGFzaF90eXBlKTsKIAlpZiAoSVNfRVJSKHNoYXNoKSkgewogCQljcnlwdG9fbW9kX3B1dChjYWxnKTsKIAkJcmV0dXJuIFBUUl9FUlIoc2hhc2gpOwpAQCAtMzkxLDggKzM4NSw3IEBACiAJaWYgKCFjcnlwdG9fbW9kX2dldChjYWxnKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlzaGFzaCA9IF9fY3J5cHRvX3NoYXNoX2Nhc3QoY3J5cHRvX2NyZWF0ZV90Zm0oCi0JCWNhbGcsICZjcnlwdG9fc2hhc2hfdHlwZSkpOworCXNoYXNoID0gY3J5cHRvX2NyZWF0ZV90Zm0oY2FsZywgJmNyeXB0b19zaGFzaF90eXBlKTsKIAlpZiAoSVNfRVJSKHNoYXNoKSkgewogCQljcnlwdG9fbW9kX3B1dChjYWxnKTsKIAkJcmV0dXJuIFBUUl9FUlIoc2hhc2gpOwpAQCAtNDQyLDggKzQzNSw2IEBACiBzdGF0aWMgaW50IGNyeXB0b19zaGFzaF9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAogCQkJCSBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kKQogewotCWlmIChmcm9udGVuZC0+dHlwZSAhPSBDUllQVE9fQUxHX1RZUEVfU0hBU0gpCi0JCXJldHVybiAtRUlOVkFMOwogCXJldHVybiAwOwogfQogCkBAIC00ODIsOCArNDczLDcgQEAKIHN0cnVjdCBjcnlwdG9fc2hhc2ggKmNyeXB0b19hbGxvY19zaGFzaChjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHR5cGUsCiAJCQkJCXUzMiBtYXNrKQogewotCXJldHVybiBfX2NyeXB0b19zaGFzaF9jYXN0KAotCQljcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCAmY3J5cHRvX3NoYXNoX3R5cGUsIHR5cGUsIG1hc2spKTsKKwlyZXR1cm4gY3J5cHRvX2FsbG9jX3RmbShhbGdfbmFtZSwgJmNyeXB0b19zaGFzaF90eXBlLCB0eXBlLCBtYXNrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hbGxvY19zaGFzaCk7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by90Y3J5cHQuYyBiL2NyeXB0by90Y3J5cHQuYwppbmRleCAyOGE0NWExLi5jM2M5MTI0IDEwMDY0NAotLS0gYS9jcnlwdG8vdGNyeXB0LmMKKysrIGIvY3J5cHRvL3RjcnlwdC5jCkBAIC01Myw3ICs1Myw3IEBACiAJImNhc3Q2IiwgImFyYzQiLCAibWljaGFlbF9taWMiLCAiZGVmbGF0ZSIsICJjcmMzMmMiLCAidGVhIiwgInh0ZWEiLAogCSJraGF6YWQiLCAid3A1MTIiLCAid3AzODQiLCAid3AyNTYiLCAidG5lcHJlcyIsICJ4ZXRhIiwgICJmY3J5cHQiLAogCSJjYW1lbGxpYSIsICJzZWVkIiwgInNhbHNhMjAiLCAicm1kMTI4IiwgInJtZDE2MCIsICJybWQyNTYiLCAicm1kMzIwIiwKLQkibHpvIiwgImN0cyIsIE5VTEwKKwkibHpvIiwgImN0cyIsICJ6bGliIiwgTlVMTAogfTsKIAogc3RhdGljIGludCB0ZXN0X2NpcGhlcl9qaWZmaWVzKHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywgaW50IGVuYywKQEAgLTY2MSw2ICs2NjEsMTAgQEAKIAkJdGNyeXB0X3Rlc3QoImVjYihzZWVkKSIpOwogCQlicmVhazsKIAorCWNhc2UgNDQ6CisJCXRjcnlwdF90ZXN0KCJ6bGliIik7CisJCWJyZWFrOworCiAJY2FzZSAxMDA6CiAJCXRjcnlwdF90ZXN0KCJobWFjKG1kNSkiKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdG1nci5jIGIvY3J5cHRvL3Rlc3RtZ3IuYwppbmRleCBhNzVmMTFmLi5iNTBjM2M2IDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdG1nci5jCisrKyBiL2NyeXB0by90ZXN0bWdyLmMKQEAgLTcyLDYgKzcyLDEzIEBACiAJfSBjb21wLCBkZWNvbXA7CiB9OwogCitzdHJ1Y3QgcGNvbXBfdGVzdF9zdWl0ZSB7CisJc3RydWN0IHsKKwkJc3RydWN0IHBjb21wX3Rlc3R2ZWMgKnZlY3M7CisJCXVuc2lnbmVkIGludCBjb3VudDsKKwl9IGNvbXAsIGRlY29tcDsKK307CisKIHN0cnVjdCBoYXNoX3Rlc3Rfc3VpdGUgewogCXN0cnVjdCBoYXNoX3Rlc3R2ZWMgKnZlY3M7CiAJdW5zaWduZWQgaW50IGNvdW50OwpAQCAtODYsNiArOTMsNyBAQAogCQlzdHJ1Y3QgYWVhZF90ZXN0X3N1aXRlIGFlYWQ7CiAJCXN0cnVjdCBjaXBoZXJfdGVzdF9zdWl0ZSBjaXBoZXI7CiAJCXN0cnVjdCBjb21wX3Rlc3Rfc3VpdGUgY29tcDsKKwkJc3RydWN0IHBjb21wX3Rlc3Rfc3VpdGUgcGNvbXA7CiAJCXN0cnVjdCBoYXNoX3Rlc3Rfc3VpdGUgaGFzaDsKIAl9IHN1aXRlOwogfTsKQEAgLTg5OCw2ICs5MDYsMTU5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCB0ZXN0X3Bjb21wKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJICAgICAgc3RydWN0IHBjb21wX3Rlc3R2ZWMgKmN0ZW1wbGF0ZSwKKwkJICAgICAgc3RydWN0IHBjb21wX3Rlc3R2ZWMgKmR0ZW1wbGF0ZSwgaW50IGN0Y291bnQsCisJCSAgICAgIGludCBkdGNvdW50KQoreworCWNvbnN0IGNoYXIgKmFsZ28gPSBjcnlwdG9fdGZtX2FsZ19kcml2ZXJfbmFtZShjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXVuc2lnbmVkIGludCBpOworCWNoYXIgcmVzdWx0W0NPTVBfQlVGX1NJWkVdOworCWludCBlcnJvcjsKKworCWZvciAoaSA9IDA7IGkgPCBjdGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGNvbXBfcmVxdWVzdCByZXE7CisKKwkJZXJyb3IgPSBjcnlwdG9fY29tcHJlc3Nfc2V0dXAodGZtLCBjdGVtcGxhdGVbaV0ucGFyYW1zLAorCQkJCQkgICAgICBjdGVtcGxhdGVbaV0ucGFyYW1zaXplKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIHNldHVwIGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWVycm9yID0gY3J5cHRvX2NvbXByZXNzX2luaXQodGZtKTsKKwkJaWYgKGVycm9yKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGNvbXByZXNzaW9uIGluaXQgZmFpbGVkIG9uIHRlc3QgIgorCQkJICAgICAgICIlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKHJlc3VsdCkpOworCisJCXJlcS5uZXh0X2luID0gY3RlbXBsYXRlW2ldLmlucHV0OworCQlyZXEuYXZhaWxfaW4gPSBjdGVtcGxhdGVbaV0uaW5sZW4gLyAyOworCQlyZXEubmV4dF9vdXQgPSByZXN1bHQ7CisJCXJlcS5hdmFpbF9vdXQgPSBjdGVtcGxhdGVbaV0ub3V0bGVuIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19jb21wcmVzc191cGRhdGUodGZtLCAmcmVxKTsKKwkJaWYgKGVycm9yICYmIChlcnJvciAhPSAtRUFHQUlOIHx8IHJlcS5hdmFpbF9pbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogY29tcHJlc3Npb24gdXBkYXRlIGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCS8qIEFkZCByZW1haW5pbmcgaW5wdXQgZGF0YSAqLworCQlyZXEuYXZhaWxfaW4gKz0gKGN0ZW1wbGF0ZVtpXS5pbmxlbiArIDEpIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19jb21wcmVzc191cGRhdGUodGZtLCAmcmVxKTsKKwkJaWYgKGVycm9yICYmIChlcnJvciAhPSAtRUFHQUlOIHx8IHJlcS5hdmFpbF9pbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogY29tcHJlc3Npb24gdXBkYXRlIGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCS8qIFByb3ZpZGUgcmVtYWluaW5nIG91dHB1dCBzcGFjZSAqLworCQlyZXEuYXZhaWxfb3V0ICs9IENPTVBfQlVGX1NJWkUgLSBjdGVtcGxhdGVbaV0ub3V0bGVuIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19jb21wcmVzc19maW5hbCh0Zm0sICZyZXEpOworCQlpZiAoZXJyb3IpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogY29tcHJlc3Npb24gZmluYWwgZmFpbGVkIG9uIHRlc3QgIgorCQkJICAgICAgICIlZCBmb3IgJXM6IGVycm9yPSVkXG4iLCBpICsgMSwgYWxnbywgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJaWYgKENPTVBfQlVGX1NJWkUgLSByZXEuYXZhaWxfb3V0ICE9IGN0ZW1wbGF0ZVtpXS5vdXRsZW4pIHsKKwkJCXByX2VycigiYWxnOiBjb21wOiBDb21wcmVzc2lvbiB0ZXN0ICVkIGZhaWxlZCBmb3IgJXM6ICIKKwkJCSAgICAgICAib3V0cHV0IGxlbiA9ICVkIChleHBlY3RlZCAlZClcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIENPTVBfQlVGX1NJWkUgLSByZXEuYXZhaWxfb3V0LAorCQkJICAgICAgIGN0ZW1wbGF0ZVtpXS5vdXRsZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAobWVtY21wKHJlc3VsdCwgY3RlbXBsYXRlW2ldLm91dHB1dCwgY3RlbXBsYXRlW2ldLm91dGxlbikpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogQ29tcHJlc3Npb24gdGVzdCAlZCBmYWlsZWQgZm9yICIKKwkJCSAgICAgICAiJXNcbiIsIGkgKyAxLCBhbGdvKTsKKwkJCWhleGR1bXAocmVzdWx0LCBjdGVtcGxhdGVbaV0ub3V0bGVuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IGR0Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgY29tcF9yZXF1ZXN0IHJlcTsKKworCQllcnJvciA9IGNyeXB0b19kZWNvbXByZXNzX3NldHVwKHRmbSwgZHRlbXBsYXRlW2ldLnBhcmFtcywKKwkJCQkJCWR0ZW1wbGF0ZVtpXS5wYXJhbXNpemUpOworCQlpZiAoZXJyb3IpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogZGVjb21wcmVzc2lvbiBzZXR1cCBmYWlsZWQgb24gIgorCQkJICAgICAgICJ0ZXN0ICVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWVycm9yID0gY3J5cHRvX2RlY29tcHJlc3NfaW5pdCh0Zm0pOworCQlpZiAoZXJyb3IpIHsKKwkJCXByX2VycigiYWxnOiBwY29tcDogZGVjb21wcmVzc2lvbiBpbml0IGZhaWxlZCBvbiB0ZXN0ICIKKwkJCSAgICAgICAiJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCW1lbXNldChyZXN1bHQsIDAsIHNpemVvZihyZXN1bHQpKTsKKworCQlyZXEubmV4dF9pbiA9IGR0ZW1wbGF0ZVtpXS5pbnB1dDsKKwkJcmVxLmF2YWlsX2luID0gZHRlbXBsYXRlW2ldLmlubGVuIC8gMjsKKwkJcmVxLm5leHRfb3V0ID0gcmVzdWx0OworCQlyZXEuYXZhaWxfb3V0ID0gZHRlbXBsYXRlW2ldLm91dGxlbiAvIDI7CisKKwkJZXJyb3IgPSBjcnlwdG9fZGVjb21wcmVzc191cGRhdGUodGZtLCAmcmVxKTsKKwkJaWYgKGVycm9yICAmJiAoZXJyb3IgIT0gLUVBR0FJTiB8fCByZXEuYXZhaWxfaW4pKSB7CisJCQlwcl9lcnIoImFsZzogcGNvbXA6IGRlY29tcHJlc3Npb24gdXBkYXRlIGZhaWxlZCBvbiAiCisJCQkgICAgICAgInRlc3QgJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sCisJCQkgICAgICAgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJLyogQWRkIHJlbWFpbmluZyBpbnB1dCBkYXRhICovCisJCXJlcS5hdmFpbF9pbiArPSAoZHRlbXBsYXRlW2ldLmlubGVuICsgMSkgLyAyOworCisJCWVycm9yID0gY3J5cHRvX2RlY29tcHJlc3NfdXBkYXRlKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAgJiYgKGVycm9yICE9IC1FQUdBSU4gfHwgcmVxLmF2YWlsX2luKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBkZWNvbXByZXNzaW9uIHVwZGF0ZSBmYWlsZWQgb24gIgorCQkJICAgICAgICJ0ZXN0ICVkIGZvciAlczogZXJyb3I9JWRcbiIsIGkgKyAxLCBhbGdvLAorCQkJICAgICAgIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCS8qIFByb3ZpZGUgcmVtYWluaW5nIG91dHB1dCBzcGFjZSAqLworCQlyZXEuYXZhaWxfb3V0ICs9IENPTVBfQlVGX1NJWkUgLSBkdGVtcGxhdGVbaV0ub3V0bGVuIC8gMjsKKworCQllcnJvciA9IGNyeXB0b19kZWNvbXByZXNzX2ZpbmFsKHRmbSwgJnJlcSk7CisJCWlmIChlcnJvciAgJiYgKGVycm9yICE9IC1FQUdBSU4gfHwgcmVxLmF2YWlsX2luKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBkZWNvbXByZXNzaW9uIGZpbmFsIGZhaWxlZCBvbiAiCisJCQkgICAgICAgInRlc3QgJWQgZm9yICVzOiBlcnJvcj0lZFxuIiwgaSArIDEsIGFsZ28sCisJCQkgICAgICAgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJaWYgKENPTVBfQlVGX1NJWkUgLSByZXEuYXZhaWxfb3V0ICE9IGR0ZW1wbGF0ZVtpXS5vdXRsZW4pIHsKKwkJCXByX2VycigiYWxnOiBjb21wOiBEZWNvbXByZXNzaW9uIHRlc3QgJWQgZmFpbGVkIGZvciAiCisJCQkgICAgICAgIiVzOiBvdXRwdXQgbGVuID0gJWQgKGV4cGVjdGVkICVkKVxuIiwgaSArIDEsCisJCQkgICAgICAgYWxnbywgQ09NUF9CVUZfU0laRSAtIHJlcS5hdmFpbF9vdXQsCisJCQkgICAgICAgZHRlbXBsYXRlW2ldLm91dGxlbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChtZW1jbXAocmVzdWx0LCBkdGVtcGxhdGVbaV0ub3V0cHV0LCBkdGVtcGxhdGVbaV0ub3V0bGVuKSkgeworCQkJcHJfZXJyKCJhbGc6IHBjb21wOiBEZWNvbXByZXNzaW9uIHRlc3QgJWQgZmFpbGVkIGZvciAiCisJCQkgICAgICAgIiVzXG4iLCBpICsgMSwgYWxnbyk7CisJCQloZXhkdW1wKHJlc3VsdCwgZHRlbXBsYXRlW2ldLm91dGxlbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGFsZ190ZXN0X2FlYWQoY29uc3Qgc3RydWN0IGFsZ190ZXN0X2Rlc2MgKmRlc2MsIGNvbnN0IGNoYXIgKmRyaXZlciwKIAkJCSB1MzIgdHlwZSwgdTMyIG1hc2spCiB7CkBAIC0xMDA3LDYgKzExNjgsMjggQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGFsZ190ZXN0X3Bjb21wKGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpkcml2ZXIsCisJCQkgIHUzMiB0eXBlLCB1MzIgbWFzaykKK3sKKwlzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm07CisJaW50IGVycjsKKworCXRmbSA9IGNyeXB0b19hbGxvY19wY29tcChkcml2ZXIsIHR5cGUsIG1hc2spOworCWlmIChJU19FUlIodGZtKSkgeworCQlwcl9lcnIoImFsZzogcGNvbXA6IEZhaWxlZCB0byBsb2FkIHRyYW5zZm9ybSBmb3IgJXM6ICVsZFxuIiwKKwkJICAgICAgIGRyaXZlciwgUFRSX0VSUih0Zm0pKTsKKwkJcmV0dXJuIFBUUl9FUlIodGZtKTsKKwl9CisKKwllcnIgPSB0ZXN0X3Bjb21wKHRmbSwgZGVzYy0+c3VpdGUucGNvbXAuY29tcC52ZWNzLAorCQkJIGRlc2MtPnN1aXRlLnBjb21wLmRlY29tcC52ZWNzLAorCQkJIGRlc2MtPnN1aXRlLnBjb21wLmNvbXAuY291bnQsCisJCQkgZGVzYy0+c3VpdGUucGNvbXAuZGVjb21wLmNvdW50KTsKKworCWNyeXB0b19mcmVlX3Bjb21wKHRmbSk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBhbGdfdGVzdF9oYXNoKGNvbnN0IHN0cnVjdCBhbGdfdGVzdF9kZXNjICpkZXNjLCBjb25zdCBjaGFyICpkcml2ZXIsCiAJCQkgdTMyIHR5cGUsIHUzMiBtYXNrKQogewpAQCAtMTgzNSw2ICsyMDE4LDIxIEBACiAJCQkJfQogCQkJfQogCQl9CisJfSwgeworCQkuYWxnID0gInpsaWIiLAorCQkudGVzdCA9IGFsZ190ZXN0X3Bjb21wLAorCQkuc3VpdGUgPSB7CisJCQkucGNvbXAgPSB7CisJCQkJLmNvbXAgPSB7CisJCQkJCS52ZWNzID0gemxpYl9jb21wX3R2X3RlbXBsYXRlLAorCQkJCQkuY291bnQgPSBaTElCX0NPTVBfVEVTVF9WRUNUT1JTCisJCQkJfSwKKwkJCQkuZGVjb21wID0geworCQkJCQkudmVjcyA9IHpsaWJfZGVjb21wX3R2X3RlbXBsYXRlLAorCQkJCQkuY291bnQgPSBaTElCX0RFQ09NUF9URVNUX1ZFQ1RPUlMKKwkJCQl9CisJCQl9CisJCX0KIAl9CiB9OwogCmRpZmYgLS1naXQgYS9jcnlwdG8vdGVzdG1nci5oIGIvY3J5cHRvL3Rlc3RtZ3IuaAppbmRleCAxMzI5NTNlLi41MjZmMDBhIDEwMDY0NAotLS0gYS9jcnlwdG8vdGVzdG1nci5oCisrKyBiL2NyeXB0by90ZXN0bWdyLmgKQEAgLTE1LDYgKzE1LDExIEBACiAjaWZuZGVmIF9DUllQVE9fVEVTVE1HUl9ICiAjZGVmaW5lIF9DUllQVE9fVEVTVE1HUl9ICiAKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvemxpYi5oPgorCisjaW5jbHVkZSA8Y3J5cHRvL2NvbXByZXNzLmg+CisKICNkZWZpbmUgTUFYX0RJR0VTVF9TSVpFCQk2NAogI2RlZmluZSBNQVhfVEFQCQkJOAogCkBAIC04MzQ3LDEwICs4MzUyLDE5IEBACiAJY2hhciBvdXRwdXRbQ09NUF9CVUZfU0laRV07CiB9OwogCitzdHJ1Y3QgcGNvbXBfdGVzdHZlYyB7CisJdm9pZCAqcGFyYW1zOworCXVuc2lnbmVkIGludCBwYXJhbXNpemU7CisJaW50IGlubGVuLCBvdXRsZW47CisJY2hhciBpbnB1dFtDT01QX0JVRl9TSVpFXTsKKwljaGFyIG91dHB1dFtDT01QX0JVRl9TSVpFXTsKK307CisKIC8qCiAgKiBEZWZsYXRlIHRlc3QgdmVjdG9ycyAobnVsbC10ZXJtaW5hdGVkIHN0cmluZ3MpLgogICogUGFyYW1zOiB3aW5iaXRzPS0xMSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBNQVhfTUVNX0xFVkVMLgogICovCisKICNkZWZpbmUgREVGTEFURV9DT01QX1RFU1RfVkVDVE9SUyAyCiAjZGVmaW5lIERFRkxBVEVfREVDT01QX1RFU1RfVkVDVE9SUyAyCiAKQEAgLTg0MjYsNiArODQ0MCwxMzkgQEAKIAl9LAogfTsKIAorI2RlZmluZSBaTElCX0NPTVBfVEVTVF9WRUNUT1JTIDIKKyNkZWZpbmUgWkxJQl9ERUNPTVBfVEVTVF9WRUNUT1JTIDIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJc3RydWN0IG5sYXR0ciBubGE7CisJaW50IHZhbDsKK30gZGVmbGF0ZV9jb21wX3BhcmFtc1tdID0geworCXsKKwkJLm5sYSA9IHsKKwkJCS5ubGFfbGVuCT0gTkxBX0hEUkxFTiArIHNpemVvZihpbnQpLAorCQkJLm5sYV90eXBlCT0gWkxJQl9DT01QX0xFVkVMLAorCQl9LAorCQkudmFsCQkJPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04sCisJfSwgeworCQkubmxhID0geworCQkJLm5sYV9sZW4JPSBOTEFfSERSTEVOICsgc2l6ZW9mKGludCksCisJCQkubmxhX3R5cGUJPSBaTElCX0NPTVBfTUVUSE9ELAorCQl9LAorCQkudmFsCQkJPSBaX0RFRkxBVEVELAorCX0sIHsKKwkJLm5sYSA9IHsKKwkJCS5ubGFfbGVuCT0gTkxBX0hEUkxFTiArIHNpemVvZihpbnQpLAorCQkJLm5sYV90eXBlCT0gWkxJQl9DT01QX1dJTkRPV0JJVFMsCisJCX0sCisJCS52YWwJCQk9IC0xMSwKKwl9LCB7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfQ09NUF9NRU1MRVZFTCwKKwkJfSwKKwkJLnZhbAkJCT0gTUFYX01FTV9MRVZFTCwKKwl9LCB7CisJCS5ubGEgPSB7CisJCQkubmxhX2xlbgk9IE5MQV9IRFJMRU4gKyBzaXplb2YoaW50KSwKKwkJCS5ubGFfdHlwZQk9IFpMSUJfQ09NUF9TVFJBVEVHWSwKKwkJfSwKKwkJLnZhbAkJCT0gWl9ERUZBVUxUX1NUUkFURUdZLAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCXN0cnVjdCBubGF0dHIgbmxhOworCWludCB2YWw7Cit9IGRlZmxhdGVfZGVjb21wX3BhcmFtc1tdID0geworCXsKKwkJLm5sYSA9IHsKKwkJCS5ubGFfbGVuCT0gTkxBX0hEUkxFTiArIHNpemVvZihpbnQpLAorCQkJLm5sYV90eXBlCT0gWkxJQl9ERUNPTVBfV0lORE9XQklUUywKKwkJfSwKKwkJLnZhbAkJCT0gLTExLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNvbXBfdGVzdHZlYyB6bGliX2NvbXBfdHZfdGVtcGxhdGVbXSA9IHsKKwl7CisJCS5wYXJhbXMgPSAmZGVmbGF0ZV9jb21wX3BhcmFtcywKKwkJLnBhcmFtc2l6ZSA9IHNpemVvZihkZWZsYXRlX2NvbXBfcGFyYW1zKSwKKwkJLmlubGVuCT0gNzAsCisJCS5vdXRsZW4JPSAzOCwKKwkJLmlucHV0CT0gIkpvaW4gdXMgbm93IGFuZCBzaGFyZSB0aGUgc29mdHdhcmUgIgorCQkJIkpvaW4gdXMgbm93IGFuZCBzaGFyZSB0aGUgc29mdHdhcmUgIiwKKwkJLm91dHB1dAk9ICJceGYzXHhjYVx4Y2ZceGNjXHg1M1x4MjhceDJkXHg1NiIKKwkJCSAgIlx4YzhceGNiXHgyZlx4NTdceDQ4XHhjY1x4NGJceDUxIgorCQkJICAiXHgyOFx4Y2VceDQ4XHgyY1x4NGFceDU1XHgyOFx4YzkiCisJCQkgICJceDQ4XHg1NVx4MjhceGNlXHg0Zlx4MmJceDI5XHgwNyIKKwkJCSAgIlx4NzFceGJjXHgwOFx4MmJceDAxXHgwMCIsCisJfSwgeworCQkucGFyYW1zID0gJmRlZmxhdGVfY29tcF9wYXJhbXMsCisJCS5wYXJhbXNpemUgPSBzaXplb2YoZGVmbGF0ZV9jb21wX3BhcmFtcyksCisJCS5pbmxlbgk9IDE5MSwKKwkJLm91dGxlbgk9IDEyMiwKKwkJLmlucHV0CT0gIlRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIGEgY29tcHJlc3Npb24gbWV0aG9kIGJhc2VkIG9uIHRoZSBERUZMQVRFIgorCQkJImNvbXByZXNzaW9uIGFsZ29yaXRobS4gIFRoaXMgZG9jdW1lbnQgZGVmaW5lcyB0aGUgYXBwbGljYXRpb24gb2YgIgorCQkJInRoZSBERUZMQVRFIGFsZ29yaXRobSB0byB0aGUgSVAgUGF5bG9hZCBDb21wcmVzc2lvbiBQcm90b2NvbC4iLAorCQkub3V0cHV0CT0gIlx4NWRceDhkXHgzMVx4MGVceGMyXHgzMFx4MTBceDA0IgorCQkJICAiXHhiZlx4YjJceDJmXHhjOFx4MWZceDEwXHgwNFx4MDkiCisJCQkgICJceDg5XHhjMlx4ODVceDNmXHg3MFx4YjFceDJmXHhmOCIKKwkJCSAgIlx4MjRceGRiXHg2N1x4ZDlceDQ3XHhjMVx4ZWZceDQ5IgorCQkJICAiXHg2OFx4MTJceDUxXHhhZVx4NzZceDY3XHhkNlx4MjciCisJCQkgICJceDE5XHg4OFx4MWFceGRlXHg4NVx4YWJceDIxXHhmMiIKKwkJCSAgIlx4MDhceDVkXHgxNlx4MWVceDIwXHgwNFx4MmRceGFkIgorCQkJICAiXHhmM1x4MThceGEyXHgxNVx4ODVceDJkXHg2OVx4YzQiCisJCQkgICJceDQyXHg4M1x4MjNceGI2XHg2Y1x4ODlceDcxXHg5YiIKKwkJCSAgIlx4ZWZceGNmXHg4Ylx4OWZceGNmXHgzM1x4Y2FceDJmIgorCQkJICAiXHhlZFx4NjJceGE5XHg0Y1x4ODBceGZmXHgxM1x4YWYiCisJCQkgICJceDUyXHgzN1x4ZWRceDBlXHg1Mlx4NmJceDU5XHgwMiIKKwkJCSAgIlx4ZDlceDRlXHhlOFx4N2FceDc2XHgxZFx4MDJceDk4IgorCQkJICAiXHhmZVx4OGFceDg3XHg4M1x4YTNceDRmXHg1Nlx4OGEiCisJCQkgICJceGI4XHg5ZVx4OGVceDVjXHg1N1x4ZDNceGEwXHg3OSIKKwkJCSAgIlx4ZmFceDAyIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwY29tcF90ZXN0dmVjIHpsaWJfZGVjb21wX3R2X3RlbXBsYXRlW10gPSB7CisJeworCQkucGFyYW1zID0gJmRlZmxhdGVfZGVjb21wX3BhcmFtcywKKwkJLnBhcmFtc2l6ZSA9IHNpemVvZihkZWZsYXRlX2RlY29tcF9wYXJhbXMpLAorCQkuaW5sZW4JPSAxMjIsCisJCS5vdXRsZW4JPSAxOTEsCisJCS5pbnB1dAk9ICJceDVkXHg4ZFx4MzFceDBlXHhjMlx4MzBceDEwXHgwNCIKKwkJCSAgIlx4YmZceGIyXHgyZlx4YzhceDFmXHgxMFx4MDRceDA5IgorCQkJICAiXHg4OVx4YzJceDg1XHgzZlx4NzBceGIxXHgyZlx4ZjgiCisJCQkgICJceDI0XHhkYlx4NjdceGQ5XHg0N1x4YzFceGVmXHg0OSIKKwkJCSAgIlx4NjhceDEyXHg1MVx4YWVceDc2XHg2N1x4ZDZceDI3IgorCQkJICAiXHgxOVx4ODhceDFhXHhkZVx4ODVceGFiXHgyMVx4ZjIiCisJCQkgICJceDA4XHg1ZFx4MTZceDFlXHgyMFx4MDRceDJkXHhhZCIKKwkJCSAgIlx4ZjNceDE4XHhhMlx4MTVceDg1XHgyZFx4NjlceGM0IgorCQkJICAiXHg0Mlx4ODNceDIzXHhiNlx4NmNceDg5XHg3MVx4OWIiCisJCQkgICJceGVmXHhjZlx4OGJceDlmXHhjZlx4MzNceGNhXHgyZiIKKwkJCSAgIlx4ZWRceDYyXHhhOVx4NGNceDgwXHhmZlx4MTNceGFmIgorCQkJICAiXHg1Mlx4MzdceGVkXHgwZVx4NTJceDZiXHg1OVx4MDIiCisJCQkgICJceGQ5XHg0ZVx4ZThceDdhXHg3Nlx4MWRceDAyXHg5OCIKKwkJCSAgIlx4ZmVceDhhXHg4N1x4ODNceGEzXHg0Zlx4NTZceDhhIgorCQkJICAiXHhiOFx4OWVceDhlXHg1Y1x4NTdceGQzXHhhMFx4NzkiCisJCQkgICJceGZhXHgwMiIsCisJCS5vdXRwdXQJPSAiVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgYSBjb21wcmVzc2lvbiBtZXRob2QgYmFzZWQgb24gdGhlIERFRkxBVEUiCisJCQkiY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgVGhpcyBkb2N1bWVudCBkZWZpbmVzIHRoZSBhcHBsaWNhdGlvbiBvZiAiCisJCQkidGhlIERFRkxBVEUgYWxnb3JpdGhtIHRvIHRoZSBJUCBQYXlsb2FkIENvbXByZXNzaW9uIFByb3RvY29sLiIsCisJfSwgeworCQkucGFyYW1zID0gJmRlZmxhdGVfZGVjb21wX3BhcmFtcywKKwkJLnBhcmFtc2l6ZSA9IHNpemVvZihkZWZsYXRlX2RlY29tcF9wYXJhbXMpLAorCQkuaW5sZW4JPSAzOCwKKwkJLm91dGxlbgk9IDcwLAorCQkuaW5wdXQJPSAiXHhmM1x4Y2FceGNmXHhjY1x4NTNceDI4XHgyZFx4NTYiCisJCQkgICJceGM4XHhjYlx4MmZceDU3XHg0OFx4Y2NceDRiXHg1MSIKKwkJCSAgIlx4MjhceGNlXHg0OFx4MmNceDRhXHg1NVx4MjhceGM5IgorCQkJICAiXHg0OFx4NTVceDI4XHhjZVx4NGZceDJiXHgyOVx4MDciCisJCQkgICJceDcxXHhiY1x4MDhceDJiXHgwMVx4MDAiLAorCQkub3V0cHV0CT0gIkpvaW4gdXMgbm93IGFuZCBzaGFyZSB0aGUgc29mdHdhcmUgIgorCQkJIkpvaW4gdXMgbm93IGFuZCBzaGFyZSB0aGUgc29mdHdhcmUgIiwKKwl9LAorfTsKKwogLyoKICAqIExaTyB0ZXN0IHZlY3RvcnMgKG51bGwtdGVybWluYXRlZCBzdHJpbmdzKS4KICAqLwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3psaWIuYyBiL2NyeXB0by96bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2MDliYQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by96bGliLmMKQEAgLTAsMCArMSwzNzggQEAKKy8qCisgKiBDcnlwdG9ncmFwaGljIEFQSS4KKyAqCisgKiBabGliIGFsZ29yaXRobQorICoKKyAqIENvcHlyaWdodCAyMDA4IFNvbnkgQ29ycG9yYXRpb24KKyAqCisgKiBCYXNlZCBvbiBkZWZsYXRlLmMsIHdoaWNoIGlzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSmFtZXMgTW9ycmlzIDxqbW9ycmlzQGludGVyY29kZS5jb20uYXU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGSVhNRTogZGVmbGF0ZSB0cmFuc2Zvcm1zIHdpbGwgcmVxdWlyZSB1cCB0byBhIHRvdGFsIG9mIGFib3V0IDQzNmsgb2Yga2VybmVsCisgKiBtZW1vcnkgb24gaTM4NiAoMzkwayBmb3IgY29tcHJlc3Npb24sIHRoZSByZXN0IGZvciBkZWNvbXByZXNzaW9uKSwgYXMgdGhlCisgKiBjdXJyZW50IHpsaWIga2VybmVsIGNvZGUgdXNlcyBhIHdvcnN0IGNhc2UgcHJlLWFsbG9jYXRpb24gc3lzdGVtIGJ5IGRlZmF1bHQuCisgKiBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIHNvIHRoYXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQgaXMgcHJvcGVybHkKKyAqIHJlbGF0ZWQgdG8gdGhlIHdpbmJpdHMgYW5kIG1lbWxldmVsIHBhcmFtZXRlcnMuCisgKi8KKworI2RlZmluZSBwcl9mbXQoZm10KQkiJXM6ICIgZm10LCBfX2Z1bmNfXworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlIDxjcnlwdG8vaW50ZXJuYWwvY29tcHJlc3MuaD4KKworI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisKKworc3RydWN0IHpsaWJfY3R4IHsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyBjb21wX3N0cmVhbTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyBkZWNvbXBfc3RyZWFtOworCWludCBkZWNvbXBfd2luZG93Qml0czsKK307CisKKworc3RhdGljIHZvaWQgemxpYl9jb21wX2V4aXQoc3RydWN0IHpsaWJfY3R4ICpjdHgpCit7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZjdHgtPmNvbXBfc3RyZWFtOworCisJaWYgKHN0cmVhbS0+d29ya3NwYWNlKSB7CisJCXpsaWJfZGVmbGF0ZUVuZChzdHJlYW0pOworCQl2ZnJlZShzdHJlYW0tPndvcmtzcGFjZSk7CisJCXN0cmVhbS0+d29ya3NwYWNlID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHpsaWJfZGVjb21wX2V4aXQoc3RydWN0IHpsaWJfY3R4ICpjdHgpCit7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZjdHgtPmRlY29tcF9zdHJlYW07CisKKwlpZiAoc3RyZWFtLT53b3Jrc3BhY2UpIHsKKwkJemxpYl9pbmZsYXRlRW5kKHN0cmVhbSk7CisJCWtmcmVlKHN0cmVhbS0+d29ya3NwYWNlKTsKKwkJc3RyZWFtLT53b3Jrc3BhY2UgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCB6bGliX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgemxpYl9leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IHpsaWJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJemxpYl9jb21wX2V4aXQoY3R4KTsKKwl6bGliX2RlY29tcF9leGl0KGN0eCk7Cit9CisKKworc3RhdGljIGludCB6bGliX2NvbXByZXNzX3NldHVwKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwgdm9pZCAqcGFyYW1zLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IHpsaWJfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmY3R4LT5jb21wX3N0cmVhbTsKKwlzdHJ1Y3QgbmxhdHRyICp0YltaTElCX0NPTVBfTUFYICsgMV07CisJc2l6ZV90IHdvcmtzcGFjZXNpemU7CisJaW50IHJldDsKKworCXJldCA9IG5sYV9wYXJzZSh0YiwgWkxJQl9DT01QX01BWCwgcGFyYW1zLCBsZW4sIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl6bGliX2NvbXBfZXhpdChjdHgpOworCisJd29ya3NwYWNlc2l6ZSA9IHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKCk7CisJc3RyZWFtLT53b3Jrc3BhY2UgPSB2bWFsbG9jKHdvcmtzcGFjZXNpemUpOworCWlmICghc3RyZWFtLT53b3Jrc3BhY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KHN0cmVhbS0+d29ya3NwYWNlLCAwLCB3b3Jrc3BhY2VzaXplKTsKKwlyZXQgPSB6bGliX2RlZmxhdGVJbml0MihzdHJlYW0sCisJCQkJdGJbWkxJQl9DT01QX0xFVkVMXQorCQkJCQk/IG5sYV9nZXRfdTMyKHRiW1pMSUJfQ09NUF9MRVZFTF0pCisJCQkJCTogWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAorCQkJCXRiW1pMSUJfQ09NUF9NRVRIT0RdCisJCQkJCT8gbmxhX2dldF91MzIodGJbWkxJQl9DT01QX01FVEhPRF0pCisJCQkJCTogWl9ERUZMQVRFRCwKKwkJCQl0YltaTElCX0NPTVBfV0lORE9XQklUU10KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfV0lORE9XQklUU10pCisJCQkJCTogTUFYX1dCSVRTLAorCQkJCXRiW1pMSUJfQ09NUF9NRU1MRVZFTF0KKwkJCQkJPyBubGFfZ2V0X3UzMih0YltaTElCX0NPTVBfTUVNTEVWRUxdKQorCQkJCQk6IERFRl9NRU1fTEVWRUwsCisJCQkJdGJbWkxJQl9DT01QX1NUUkFURUdZXQorCQkJCQk/IG5sYV9nZXRfdTMyKHRiW1pMSUJfQ09NUF9TVFJBVEVHWV0pCisJCQkJCTogWl9ERUZBVUxUX1NUUkFURUdZKTsKKwlpZiAocmV0ICE9IFpfT0spIHsKKwkJdmZyZWUoc3RyZWFtLT53b3Jrc3BhY2UpOworCQlzdHJlYW0tPndvcmtzcGFjZSA9IE5VTEw7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsaWJfY29tcHJlc3NfaW5pdChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+Y29tcF9zdHJlYW07CisKKwlyZXQgPSB6bGliX2RlZmxhdGVSZXNldChzdHJlYW0pOworCWlmIChyZXQgIT0gWl9PSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2NvbXByZXNzX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmNvbXBfc3RyZWFtOworCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXVcbiIsIHJlcS0+YXZhaWxfaW4sIHJlcS0+YXZhaWxfb3V0KTsKKwlzdHJlYW0tPm5leHRfaW4gPSByZXEtPm5leHRfaW47CisJc3RyZWFtLT5hdmFpbF9pbiA9IHJlcS0+YXZhaWxfaW47CisJc3RyZWFtLT5uZXh0X291dCA9IHJlcS0+bmV4dF9vdXQ7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSByZXEtPmF2YWlsX291dDsKKworCXJldCA9IHpsaWJfZGVmbGF0ZShzdHJlYW0sIFpfTk9fRkxVU0gpOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSBaX09LOgorCQlicmVhazsKKworCWNhc2UgWl9CVUZfRVJST1I6CisJCXByX2RlYnVnKCJ6bGliX2RlZmxhdGUgY291bGQgbm90IG1ha2UgcHJvZ3Jlc3NcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKKworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJ6bGliX2RlZmxhdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldSAoY29uc3VtZWQgJXUsIHByb2R1Y2VkICV1KVxuIiwKKwkJIHN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0LAorCQkgcmVxLT5hdmFpbF9pbiAtIHN0cmVhbS0+YXZhaWxfaW4sCisJCSByZXEtPmF2YWlsX291dCAtIHN0cmVhbS0+YXZhaWxfb3V0KTsKKwlyZXEtPm5leHRfaW4gPSBzdHJlYW0tPm5leHRfaW47CisJcmVxLT5hdmFpbF9pbiA9IHN0cmVhbS0+YXZhaWxfaW47CisJcmVxLT5uZXh0X291dCA9IHN0cmVhbS0+bmV4dF9vdXQ7CisJcmVxLT5hdmFpbF9vdXQgPSBzdHJlYW0tPmF2YWlsX291dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2NvbXByZXNzX2ZpbmFsKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCSAgICAgICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgemxpYl9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eChjcnlwdG9fcGNvbXBfdGZtKHRmbSkpOworCXN0cnVjdCB6X3N0cmVhbV9zICpzdHJlYW0gPSAmZGN0eC0+Y29tcF9zdHJlYW07CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldVxuIiwgcmVxLT5hdmFpbF9pbiwgcmVxLT5hdmFpbF9vdXQpOworCXN0cmVhbS0+bmV4dF9pbiA9IHJlcS0+bmV4dF9pbjsKKwlzdHJlYW0tPmF2YWlsX2luID0gcmVxLT5hdmFpbF9pbjsKKwlzdHJlYW0tPm5leHRfb3V0ID0gcmVxLT5uZXh0X291dDsKKwlzdHJlYW0tPmF2YWlsX291dCA9IHJlcS0+YXZhaWxfb3V0OworCisJcmV0ID0gemxpYl9kZWZsYXRlKHN0cmVhbSwgWl9GSU5JU0gpOworCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCXByX2RlYnVnKCJ6bGliX2RlZmxhdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldSAoY29uc3VtZWQgJXUsIHByb2R1Y2VkICV1KVxuIiwKKwkJIHN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0LAorCQkgcmVxLT5hdmFpbF9pbiAtIHN0cmVhbS0+YXZhaWxfaW4sCisJCSByZXEtPmF2YWlsX291dCAtIHN0cmVhbS0+YXZhaWxfb3V0KTsKKwlyZXEtPm5leHRfaW4gPSBzdHJlYW0tPm5leHRfaW47CisJcmVxLT5hdmFpbF9pbiA9IHN0cmVhbS0+YXZhaWxfaW47CisJcmVxLT5uZXh0X291dCA9IHN0cmVhbS0+bmV4dF9vdXQ7CisJcmVxLT5hdmFpbF9vdXQgPSBzdHJlYW0tPmF2YWlsX291dDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHpsaWJfZGVjb21wcmVzc19zZXR1cChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sIHZvaWQgKnBhcmFtcywKKwkJCQkgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgemxpYl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZjdHgtPmRlY29tcF9zdHJlYW07CisJc3RydWN0IG5sYXR0ciAqdGJbWkxJQl9ERUNPTVBfTUFYICsgMV07CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSBubGFfcGFyc2UodGIsIFpMSUJfREVDT01QX01BWCwgcGFyYW1zLCBsZW4sIE5VTEwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl6bGliX2RlY29tcF9leGl0KGN0eCk7CisKKwljdHgtPmRlY29tcF93aW5kb3dCaXRzID0gdGJbWkxJQl9ERUNPTVBfV0lORE9XQklUU10KKwkJCQkgPyBubGFfZ2V0X3UzMih0YltaTElCX0RFQ09NUF9XSU5ET1dCSVRTXSkKKwkJCQkgOiBERUZfV0JJVFM7CisKKwlzdHJlYW0tPndvcmtzcGFjZSA9IGt6YWxsb2MoemxpYl9pbmZsYXRlX3dvcmtzcGFjZXNpemUoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdHJlYW0tPndvcmtzcGFjZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSB6bGliX2luZmxhdGVJbml0MihzdHJlYW0sIGN0eC0+ZGVjb21wX3dpbmRvd0JpdHMpOworCWlmIChyZXQgIT0gWl9PSykgeworCQlrZnJlZShzdHJlYW0tPndvcmtzcGFjZSk7CisJCXN0cmVhbS0+d29ya3NwYWNlID0gTlVMTDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemxpYl9kZWNvbXByZXNzX2luaXQoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCWludCByZXQ7CisJc3RydWN0IHpsaWJfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pKTsKKwlzdHJ1Y3Qgel9zdHJlYW1fcyAqc3RyZWFtID0gJmRjdHgtPmRlY29tcF9zdHJlYW07CisKKwlyZXQgPSB6bGliX2luZmxhdGVSZXNldChzdHJlYW0pOworCWlmIChyZXQgIT0gWl9PSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bGliX2RlY29tcHJlc3NfdXBkYXRlKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5kZWNvbXBfc3RyZWFtOworCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXVcbiIsIHJlcS0+YXZhaWxfaW4sIHJlcS0+YXZhaWxfb3V0KTsKKwlzdHJlYW0tPm5leHRfaW4gPSByZXEtPm5leHRfaW47CisJc3RyZWFtLT5hdmFpbF9pbiA9IHJlcS0+YXZhaWxfaW47CisJc3RyZWFtLT5uZXh0X291dCA9IHJlcS0+bmV4dF9vdXQ7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSByZXEtPmF2YWlsX291dDsKKworCXJldCA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfU1lOQ19GTFVTSCk7CisJc3dpdGNoIChyZXQpIHsKKwljYXNlIFpfT0s6CisJY2FzZSBaX1NUUkVBTV9FTkQ6CisJCWJyZWFrOworCisJY2FzZSBaX0JVRl9FUlJPUjoKKwkJcHJfZGVidWcoInpsaWJfaW5mbGF0ZSBjb3VsZCBub3QgbWFrZSBwcm9ncmVzc1xuIik7CisJCXJldHVybiAtRUFHQUlOOworCisJZGVmYXVsdDoKKwkJcHJfZGVidWcoInpsaWJfaW5mbGF0ZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByX2RlYnVnKCJhdmFpbF9pbiAldSwgYXZhaWxfb3V0ICV1IChjb25zdW1lZCAldSwgcHJvZHVjZWQgJXUpXG4iLAorCQkgc3RyZWFtLT5hdmFpbF9pbiwgc3RyZWFtLT5hdmFpbF9vdXQsCisJCSByZXEtPmF2YWlsX2luIC0gc3RyZWFtLT5hdmFpbF9pbiwKKwkJIHJlcS0+YXZhaWxfb3V0IC0gc3RyZWFtLT5hdmFpbF9vdXQpOworCXJlcS0+bmV4dF9pbiA9IHN0cmVhbS0+bmV4dF9pbjsKKwlyZXEtPmF2YWlsX2luID0gc3RyZWFtLT5hdmFpbF9pbjsKKwlyZXEtPm5leHRfb3V0ID0gc3RyZWFtLT5uZXh0X291dDsKKwlyZXEtPmF2YWlsX291dCA9IHN0cmVhbS0+YXZhaWxfb3V0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsaWJfZGVjb21wcmVzc19maW5hbChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB6bGliX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KGNyeXB0b19wY29tcF90Zm0odGZtKSk7CisJc3RydWN0IHpfc3RyZWFtX3MgKnN0cmVhbSA9ICZkY3R4LT5kZWNvbXBfc3RyZWFtOworCisJcHJfZGVidWcoImF2YWlsX2luICV1LCBhdmFpbF9vdXQgJXVcbiIsIHJlcS0+YXZhaWxfaW4sIHJlcS0+YXZhaWxfb3V0KTsKKwlzdHJlYW0tPm5leHRfaW4gPSByZXEtPm5leHRfaW47CisJc3RyZWFtLT5hdmFpbF9pbiA9IHJlcS0+YXZhaWxfaW47CisJc3RyZWFtLT5uZXh0X291dCA9IHJlcS0+bmV4dF9vdXQ7CisJc3RyZWFtLT5hdmFpbF9vdXQgPSByZXEtPmF2YWlsX291dDsKKworCWlmIChkY3R4LT5kZWNvbXBfd2luZG93Qml0cyA8IDApIHsKKwkJcmV0ID0gemxpYl9pbmZsYXRlKHN0cmVhbSwgWl9TWU5DX0ZMVVNIKTsKKwkJLyoKKwkJICogV29yayBhcm91bmQgYSBidWcgaW4gemxpYiwgd2hpY2ggc29tZXRpbWVzIHdhbnRzIHRvIHRhc3RlIGFuCisJCSAqIGV4dHJhIGJ5dGUgd2hlbiBiZWluZyB1c2VkIGluIHRoZSAodW5kb2N1bWVudGVkKSByYXcgZGVmbGF0ZQorCQkgKiBtb2RlLiAoRnJvbSBVU0FHSSkuCisJCSAqLworCQlpZiAocmV0ID09IFpfT0sgJiYgIXN0cmVhbS0+YXZhaWxfaW4gJiYgc3RyZWFtLT5hdmFpbF9vdXQpIHsKKwkJCWNvbnN0IHZvaWQgKnNhdmVkX25leHRfaW4gPSBzdHJlYW0tPm5leHRfaW47CisJCQl1OCB6ZXJvc3R1ZmYgPSAwOworCisJCQlzdHJlYW0tPm5leHRfaW4gPSAmemVyb3N0dWZmOworCQkJc3RyZWFtLT5hdmFpbF9pbiA9IDE7CisJCQlyZXQgPSB6bGliX2luZmxhdGUoc3RyZWFtLCBaX0ZJTklTSCk7CisJCQlzdHJlYW0tPm5leHRfaW4gPSBzYXZlZF9uZXh0X2luOworCQkJc3RyZWFtLT5hdmFpbF9pbiA9IDA7CisJCX0KKwl9IGVsc2UKKwkJcmV0ID0gemxpYl9pbmZsYXRlKHN0cmVhbSwgWl9GSU5JU0gpOworCWlmIChyZXQgIT0gWl9TVFJFQU1fRU5EKSB7CisJCXByX2RlYnVnKCJ6bGliX2luZmxhdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwcl9kZWJ1ZygiYXZhaWxfaW4gJXUsIGF2YWlsX291dCAldSAoY29uc3VtZWQgJXUsIHByb2R1Y2VkICV1KVxuIiwKKwkJIHN0cmVhbS0+YXZhaWxfaW4sIHN0cmVhbS0+YXZhaWxfb3V0LAorCQkgcmVxLT5hdmFpbF9pbiAtIHN0cmVhbS0+YXZhaWxfaW4sCisJCSByZXEtPmF2YWlsX291dCAtIHN0cmVhbS0+YXZhaWxfb3V0KTsKKwlyZXEtPm5leHRfaW4gPSBzdHJlYW0tPm5leHRfaW47CisJcmVxLT5hdmFpbF9pbiA9IHN0cmVhbS0+YXZhaWxfaW47CisJcmVxLT5uZXh0X291dCA9IHN0cmVhbS0+bmV4dF9vdXQ7CisJcmVxLT5hdmFpbF9vdXQgPSBzdHJlYW0tPmF2YWlsX291dDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHBjb21wX2FsZyB6bGliX2FsZyA9IHsKKwkuY29tcHJlc3Nfc2V0dXAJCT0gemxpYl9jb21wcmVzc19zZXR1cCwKKwkuY29tcHJlc3NfaW5pdAkJPSB6bGliX2NvbXByZXNzX2luaXQsCisJLmNvbXByZXNzX3VwZGF0ZQk9IHpsaWJfY29tcHJlc3NfdXBkYXRlLAorCS5jb21wcmVzc19maW5hbAkJPSB6bGliX2NvbXByZXNzX2ZpbmFsLAorCS5kZWNvbXByZXNzX3NldHVwCT0gemxpYl9kZWNvbXByZXNzX3NldHVwLAorCS5kZWNvbXByZXNzX2luaXQJPSB6bGliX2RlY29tcHJlc3NfaW5pdCwKKwkuZGVjb21wcmVzc191cGRhdGUJPSB6bGliX2RlY29tcHJlc3NfdXBkYXRlLAorCS5kZWNvbXByZXNzX2ZpbmFsCT0gemxpYl9kZWNvbXByZXNzX2ZpbmFsLAorCisJLmJhc2UJCQk9IHsKKwkJLmNyYV9uYW1lCT0gInpsaWIiLAorCQkuY3JhX2ZsYWdzCT0gQ1JZUFRPX0FMR19UWVBFX1BDT01QUkVTUywKKwkJLmNyYV9jdHhzaXplCT0gc2l6ZW9mKHN0cnVjdCB6bGliX2N0eCksCisJCS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisJCS5jcmFfaW5pdAk9IHpsaWJfaW5pdCwKKwkJLmNyYV9leGl0CT0gemxpYl9leGl0LAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHpsaWJfbW9kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX3Bjb21wKCZ6bGliX2FsZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB6bGliX21vZF9maW5pKHZvaWQpCit7CisJY3J5cHRvX3VucmVnaXN0ZXJfcGNvbXAoJnpsaWJfYWxnKTsKK30KKworbW9kdWxlX2luaXQoemxpYl9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdCh6bGliX21vZF9maW5pKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJabGliIENvbXByZXNzaW9uIEFsZ29yaXRobSIpOworTU9EVUxFX0FVVEhPUigiU29ueSBDb3Jwb3JhdGlvbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2RvY2suYyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKaW5kZXggMzUwOTRmMi4uN2FmN2RiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RvY2suYworKysgYi9kcml2ZXJzL2FjcGkvZG9jay5jCkBAIC05NzcsNyArOTc3LDcgQEAKIAkJc2l6ZW9mKHN0cnVjdCBkb2NrX3N0YXRpb24gKikpOwogCiAJLyogd2Ugd2FudCB0aGUgZG9jayBkZXZpY2UgdG8gc2VuZCB1ZXZlbnRzICovCi0JZG9ja19kZXZpY2UtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAwOworCWRldl9zZXRfdWV2ZW50X3N1cHByZXNzKCZkb2NrX2RldmljZS0+ZGV2LCAwKTsKIAogCWlmIChpc19kb2NrKGhhbmRsZSkpCiAJCWRvY2tfc3RhdGlvbi0+ZmxhZ3MgfD0gRE9DS19JU19ET0NLOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2V2ZW50LmMgYi9kcml2ZXJzL2FjcGkvZXZlbnQuYwppbmRleCAwYzI0YmQ0Li5hZWI3ZTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZXZlbnQuYworKysgYi9kcml2ZXJzL2FjcGkvZXZlbnQuYwpAQCAtMjM1LDExICsyMzUsNyBAQAogCQlyZXR1cm4gcmVzdWx0OwogCX0KIAotCXJlc3VsdCA9Ci0JICAgIGdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgYWNwaV9ldmVudF9tY2dycC5pZCwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJlc3VsdCkKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLAotCQkJCSAgIkZhaWxlZCB0byBzZW5kIGEgR2VuZXRsaW5rIG1lc3NhZ2UhXG4iKSk7CisJZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBhY3BpX2V2ZW50X21jZ3JwLmlkLCBHRlBfQVRPTUlDKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hbWJhL2J1cy5jIGIvZHJpdmVycy9hbWJhL2J1cy5jCmluZGV4IDAwYzQ2ZTAuLjNkNzYzZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYW1iYS9idXMuYworKysgYi9kcml2ZXJzL2FtYmEvYnVzLmMKQEAgLTIxMCw3ICsyMTAsNyBAQAogCWRldi0+ZGV2LnJlbGVhc2UgPSBhbWJhX2RldmljZV9yZWxlYXNlOwogCWRldi0+ZGV2LmJ1cyA9ICZhbWJhX2J1c3R5cGU7CiAJZGV2LT5kZXYuZG1hX21hc2sgPSAmZGV2LT5kbWFfbWFzazsKLQlkZXYtPnJlcy5uYW1lID0gZGV2LT5kZXYuYnVzX2lkOworCWRldi0+cmVzLm5hbWUgPSBkZXZfbmFtZSgmZGV2LT5kZXYpOwogCiAJaWYgKCFkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayAmJiBkZXYtPmRtYV9tYXNrKQogCQlkZXZfd2FybigmZGV2LT5kZXYsICJjb2hlcmVudCBkbWEgbWFzayBpcyB1bnNldFxuIik7CkBAIC0yOTQsNyArMjk0LDcgQEAKIAlpZiAoZC0+cGFyZW50KQogCQlyICY9IGQtPnBhcmVudCA9PSBkZXYtPnBhcmVudDsKIAlpZiAoZC0+YnVzaWQpCi0JCXIgJj0gc3RyY21wKGRldi0+YnVzX2lkLCBkLT5idXNpZCkgPT0gMDsKKwkJciAmPSBzdHJjbXAoZGV2X25hbWUoZGV2KSwgZC0+YnVzaWQpID09IDA7CiAKIAlpZiAocikgewogCQlnZXRfZGV2aWNlKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpLmMgYi9kcml2ZXJzL2F0YS9haGNpLmMKaW5kZXggNjZlMDEyYy4uNzg4YmJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2kuYwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJLyogYm9hcmRfYWhjaSAqLwogCXsKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfb3BzLAogCX0sCkBAIC00MTIsNyArNDEyLDcgQEAKIAl7CiAJCUFIQ0lfSEZMQUdTCShBSENJX0hGTEFHX05PX05DUSB8IEFIQ0lfSEZMQUdfTk9fUE1QKSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfdnQ4MjUxX29wcywKIAl9LApAQCAtNDIwLDcgKzQyMCw3IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19JR05fSVJRX0lGX0VSUiksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKIAl9LApAQCAtNDMwLDcgKzQzMCw3IEBACiAJCQkJIEFIQ0lfSEZMQUdfMzJCSVRfT05MWSB8IEFIQ0lfSEZMQUdfTk9fTVNJIHwKIAkJCQkgQUhDSV9IRkxBR19TRUNUMjU1KSwKIAkJLmZsYWdzCQk9IEFIQ0lfRkxBR19DT01NT04sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmFoY2lfc2I2MDBfb3BzLAogCX0sCkBAIC00NDAsNyArNDQwLDcgQEAKIAkJCQkgQUhDSV9IRkxBR19NVl9QQVRBIHwgQUhDSV9IRkxBR19OT19QTVApLAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX0RNQSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfSUdOX1NFUlJfSU5URVJOQUwpLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9zYjYwMF9vcHMsCiAJfSwKQEAgLTQ1Niw3ICs0NTYsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfWUVTX05DUSksCiAJCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhaGNpX29wcywKIAl9LApAQCAtNDY0LDcgKzQ2NCw3IEBACiAJewogCQlBSENJX0hGTEFHUwkoQUhDSV9IRkxBR19OT19QTVApLAogCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCiAJfSwKQEAgLTEzNDgsNyArMTM0OCw3IEBACiAJd3JpdGVsKG1lc3NhZ2VbMV0sIG1taW8gKyBocHJpdi0+ZW1fbG9jKzQpOwogCiAJLyogc2F2ZSBvZmYgbmV3IGxlZCBzdGF0ZSBmb3IgcG9ydC9zbG90ICovCi0JZW1wLT5sZWRfc3RhdGUgPSBtZXNzYWdlWzFdOworCWVtcC0+bGVkX3N0YXRlID0gc3RhdGU7CiAKIAkvKgogCSAqIHRlbGwgaGFyZHdhcmUgdG8gdHJhbnNtaXQgdGhlIG1lc3NhZ2UKQEAgLTI1NjUsNiArMjU2NSwxNSBAQAogCQkJLyogUENJIHNsb3QgbnVtYmVyIG9mIHRoZSBjb250cm9sbGVyICovCiAJCQkuZHJpdmVyX2RhdGEgPSAodm9pZCAqKTB4MUZVTCwKIAkJfSwKKwkJeworCQkJLmlkZW50ID0gIkhQIENvbXBhcSA2NzIwcyIsCisJCQkubWF0Y2hlcyA9IHsKKwkJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJIZXdsZXR0LVBhY2thcmQiKSwKKwkJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIkhQIENvbXBhcSA2NzIwcyIpLAorCQkJfSwKKwkJCS8qIFBDSSBzbG90IG51bWJlciBvZiB0aGUgY29udHJvbGxlciAqLworCQkJLmRyaXZlcl9kYXRhID0gKHZvaWQgKikweDFGVUwsCisJCX0sCiAKIAkJeyB9CS8qIHRlcm1pbmF0ZSBsaXN0ICovCiAJfTsKQEAgLTI2NDcsOCArMjY1Niw4IEBACiAJaWYgKGJvYXJkX2lkID09IGJvYXJkX2FoY2lfc2I3MDAgJiYgcGRldi0+cmV2aXNpb24gPj0gMHg0MCkKIAkJaHByaXYtPmZsYWdzICY9IH5BSENJX0hGTEFHX0lHTl9TRVJSX0lOVEVSTkFMOwogCi0JaWYgKChocHJpdi0+ZmxhZ3MgJiBBSENJX0hGTEFHX05PX01TSSkgfHwgcGNpX2VuYWJsZV9tc2kocGRldikpCi0JCXBjaV9pbnR4KHBkZXYsIDEpOworCWlmICghKGhwcml2LT5mbGFncyAmIEFIQ0lfSEZMQUdfTk9fTVNJKSkKKwkJcGNpX2VuYWJsZV9tc2kocGRldik7CiAKIAkvKiBzYXZlIGluaXRpYWwgY29uZmlnICovCiAJYWhjaV9zYXZlX2luaXRpYWxfY29uZmlnKHBkZXYsIGhwcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCmluZGV4IGRjNDhhNjMuLmVjZmQyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYwpAQCAtMTE4LDggKzExOCw4IEBACiAJdTE2IGNvbW1hbmQ7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmdlbmVyaWNfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKaW5kZXggZWY4YjMwZC4uZTVjYmU4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX3BpaXguYworKysgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCkBAIC00NDYsMzQgKzQ0NiwzNCBAQAogCVtwaWl4X3BhdGFfbXdkbWFdID0gCS8qIFBJSVgzIE1XRE1BIG9ubHkgKi8KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDYsIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCiAJCS5wb3J0X29wcwk9ICZwaWl4X3BhdGFfb3BzLAogCX0sCiAKIAlbcGlpeF9wYXRhXzMzXSA9CS8qIFBJSVg0IGF0IDMzTUh6ICovCiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiA/PyBDSEVDSyAwIHNob3VsZCBiZSBvayBidXQgc2xvdyAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUFfTUFTS180MEMsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3BhdGFfb3BzLAogCX0sCiAKIAlbaWNoX3BhdGFfMzNdID0gCS8qIElDSDAgLSBJQ0ggYXQgMzNNaHoqLwogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUywKLQkJLnBpb19tYXNrIAk9IDB4MWYsCS8qIHBpbyAwLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBDaGVjazogbWF5YmUgMHgwNyAgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwgLyogVURNQTMzICovCisJCS5waW9fbWFzayAJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCAvKiBDaGVjazogbWF5YmUgTVdETUEwIGlzIG9rICAqLworCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMJPSAmaWNoX3BhdGFfb3BzLAogCX0sCiAKIAlbaWNoX3BhdGFfNjZdID0gCS8qIElDSCBjb250cm9sbGVycyB1cCB0byA2Nk1IeiAqLwogCXsKIAkJLmZsYWdzCQk9IFBJSVhfUEFUQV9GTEFHUywKLQkJLnBpb19tYXNrIAk9IDB4MWYsCS8qIHBpbyAwLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBNV0RNQTAgaXMgYnJva2VuIG9uIGNoaXAgKi8KKwkJLnBpb19tYXNrIAk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIE1XRE1BMCBpcyBicm9rZW4gb24gY2hpcCAqLwogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMJPSAmaWNoX3BhdGFfb3BzLAogCX0sCkBAIC00ODEsMTcgKzQ4MSwxNyBAQAogCVtpY2hfcGF0YV8xMDBdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1BBVEFfRkxBR1MgfCBQSUlYX0ZMQUdfQ0hFQ0tJTlRSLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LCAvKiB1ZG1hMC01ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZpY2hfcGF0YV9vcHMsCiAJfSwKIAogCVtpY2g1X3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC00OTksOCArNDk5LDggQEAKIAlbaWNoNl9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTA4LDggKzUwOCw4IEBACiAJW2ljaDZtX3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01MTcsOCArNTE3LDggQEAKIAlbaWNoOF9zYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9TQVRBX0ZMQUdTIHwgUElJWF9GTEFHX1NJRFBSLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGlpeF9zYXRhX29wcywKIAl9LApAQCAtNTI2LDggKzUyNiw4IEBACiAJW2ljaDhfMnBvcnRfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUyB8IFBJSVhfRkxBR19TSURQUiwKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTUzNSw4ICs1MzUsOCBAQAogCVt0b2xhcGFpX3NhdGFdID0KIAl7CiAJCS5mbGFncwkJPSBQSUlYX1NBVEFfRkxBR1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3NhdGFfb3BzLAogCX0sCkBAIC01NDQsOCArNTQ0LDggQEAKIAlbaWNoOG1fYXBwbGVfc2F0YV0gPQogCXsKIAkJLmZsYWdzCQk9IFBJSVhfU0FUQV9GTEFHUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKQEAgLTU1Myw5ICs1NTMsOSBAQAogCVtwaWl4X3BhdGFfdm13XSA9CiAJewogCQkuZmxhZ3MJCT0gUElJWF9QQVRBX0ZMQUdTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA2LCAvKiBtd2RtYTEtMiA/PyBDSEVDSyAwIHNob3VsZCBiZSBvayBidXQgc2xvdyAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUFfTUFTS180MEMsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksIC8qIG13ZG1hMS0yID8/IENIRUNLIDAgc2hvdWxkIGJlIG9rIGJ1dCBzbG93ICovCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcwk9ICZwaWl4X3Ztd19vcHMsCiAJfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggMDYwYmNkNi4uZTdlYTc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC01Nyw2ICs1Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2FzeW5jLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KQEAgLTIzODksNiArMjM5MCw3IEBACiAJZGV2LT5jeWxpbmRlcnMgPSAwOwogCWRldi0+aGVhZHMgPSAwOwogCWRldi0+c2VjdG9ycyA9IDA7CisJZGV2LT5tdWx0aV9jb3VudCA9IDA7CiAKIAkvKgogCSAqIGNvbW1vbiBBVEEsIEFUQVBJIGZlYXR1cmUgdGVzdHMKQEAgLTI0MjYsOCArMjQyOCwxNSBAQAogCiAJCWRldi0+bl9zZWN0b3JzID0gYXRhX2lkX25fc2VjdG9ycyhpZCk7CiAKLQkJaWYgKGRldi0+aWRbNTldICYgMHgxMDApCi0JCQlkZXYtPm11bHRpX2NvdW50ID0gZGV2LT5pZFs1OV0gJiAweGZmOworCQkvKiBnZXQgY3VycmVudCBSL1cgTXVsdGlwbGUgY291bnQgc2V0dGluZyAqLworCQlpZiAoKGRldi0+aWRbNDddID4+IDgpID09IDB4ODAgJiYgKGRldi0+aWRbNTldICYgMHgxMDApKSB7CisJCQl1bnNpZ25lZCBpbnQgbWF4ID0gZGV2LT5pZFs0N10gJiAweGZmOworCQkJdW5zaWduZWQgaW50IGNudCA9IGRldi0+aWRbNTldICYgMHhmZjsKKwkJCS8qIG9ubHkgcmVjb2duaXplL2FsbG93IHBvd2VycyBvZiB0d28gaGVyZSAqLworCQkJaWYgKGlzX3Bvd2VyX29mXzIobWF4KSAmJiBpc19wb3dlcl9vZl8yKGNudCkpCisJCQkJaWYgKGNudCA8PSBtYXgpCisJCQkJCWRldi0+bXVsdGlfY291bnQgPSBjbnQ7CisJCX0KIAogCQlpZiAoYXRhX2lkX2hhc19sYmEoaWQpKSB7CiAJCQljb25zdCBjaGFyICpsYmFfZGVzYzsKQEAgLTY3MDksNiArNjcxOCw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhdGFfZG9fZGV2X3JlYWRfaWQpOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Njc2lfc2ltdWxhdGUpOwogCitFWFBPUlRfU1lNQk9MX0dQTChhdGFfcGlvX3F1ZXVlX3Rhc2spOwogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3Bpb19uZWVkX2lvcmR5KTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV90aW1pbmdfZmluZF9tb2RlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV90aW1pbmdfY29tcHV0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IGVhODkwOTEuLjAxODMxMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC01NDcsNyArNTQ3LDcgQEAKIAogCS8qIEZvciBuZXcgRUgsIGFsbCBxY3MgYXJlIGZpbmlzaGVkIGluIG9uZSBvZiB0aHJlZSB3YXlzIC0KIAkgKiBub3JtYWwgY29tcGxldGlvbiwgZXJyb3IgY29tcGxldGlvbiwgYW5kIFNDU0kgdGltZW91dC4KLQkgKiBCb3RoIGNtcGxldGlvbnMgY2FuIHJhY2UgYWdhaW5zdCBTQ1NJIHRpbWVvdXQuICBXaGVuIG5vcm1hbAorCSAqIEJvdGggY29tcGxldGlvbnMgY2FuIHJhY2UgYWdhaW5zdCBTQ1NJIHRpbWVvdXQuICBXaGVuIG5vcm1hbAogCSAqIGNvbXBsZXRpb24gd2lucywgdGhlIHFjIG5ldmVyIHJlYWNoZXMgRUguICBXaGVuIGVycm9yCiAJICogY29tcGxldGlvbiB3aW5zLCB0aGUgcWMgaGFzIEFUQV9RQ0ZMQUdfRkFJTEVEIHNldC4KIAkgKgpAQCAtNTYyLDcgKzU2MiwxOSBAQAogCQlpbnQgbnJfdGltZWRvdXQgPSAwOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKGFwLT5sb2NrLCBmbGFncyk7CisJCQorCQkvKiBUaGlzIG11c3Qgb2NjdXIgdW5kZXIgdGhlIGFwLT5sb2NrIGFzIHdlIGRvbid0IHdhbnQKKwkJICAgYSBwb2xsZWQgcmVjb3ZlcnkgdG8gcmFjZSB0aGUgcmVhbCBpbnRlcnJ1cHQgaGFuZGxlcgorCQkgICAKKwkJICAgVGhlIGxvc3RfaW50ZXJydXB0IGhhbmRsZXIgY2hlY2tzIGZvciBhbnkgY29tcGxldGVkIGJ1dAorCQkgICBub24tbm90aWZpZWQgY29tbWFuZCBhbmQgY29tcGxldGVzIG11Y2ggbGlrZSBhbiBJUlEgaGFuZGxlci4KKwkJICAgCisJCSAgIFdlIHRoZW4gZmFsbCBpbnRvIHRoZSBlcnJvciByZWNvdmVyeSBjb2RlIHdoaWNoIHdpbGwgdHJlYXQKKwkJICAgdGhpcyBhcyBpZiBub3JtYWwgY29tcGxldGlvbiB3b24gdGhlIHJhY2UgKi8KIAorCQlpZiAoYXAtPm9wcy0+bG9zdF9pbnRlcnJ1cHQpCisJCQlhcC0+b3BzLT5sb3N0X2ludGVycnVwdChhcCk7CisJCQkKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNjbWQsIHRtcCwgJmhvc3QtPmVoX2NtZF9xLCBlaF9lbnRyeSkgewogCQkJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKIApAQCAtNjA2LDYgKzYxOCw5IEBACiAJCWFwLT5laF90cmllcyA9IEFUQV9FSF9NQVhfVFJJRVM7CiAJfSBlbHNlCiAJCXNwaW5fdW5sb2NrX3dhaXQoYXAtPmxvY2spOworCQkKKwkvKiBJZiB3ZSB0aW1lZCByYWNlZCBub3JtYWwgY29tcGxldGlvbiBhbmQgdGhlcmUgaXMgbm90aGluZyB0bworCSAgIHJlY292ZXIgbnJfdGltZWRvdXQgPT0gMCB3aHkgZXhhY3RseSBhcmUgd2UgZG9pbmcgZXJyb3IgcmVjb3ZlcnkgPyAqLwogCiAgcmVwZWF0OgogCS8qIGludm9rZSBlcnJvciBoYW5kbGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKaW5kZXggZjkzZGMwMi4uODMzMmU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwpAQCAtNTIsNiArNTIsNyBAQAogCS5zb2Z0cmVzZXQJCT0gYXRhX3NmZl9zb2Z0cmVzZXQsCiAJLmhhcmRyZXNldAkJPSBzYXRhX3NmZl9oYXJkcmVzZXQsCiAJLnBvc3RyZXNldAkJPSBhdGFfc2ZmX3Bvc3RyZXNldCwKKwkuZHJhaW5fZmlmbwkJPSBhdGFfc2ZmX2RyYWluX2ZpZm8sCiAJLmVycm9yX2hhbmRsZXIJCT0gYXRhX3NmZl9lcnJvcl9oYW5kbGVyLAogCS5wb3N0X2ludGVybmFsX2NtZAk9IGF0YV9zZmZfcG9zdF9pbnRlcm5hbF9jbWQsCiAKQEAgLTY0LDYgKzY1LDggQEAKIAkuc2ZmX2lycV9vbgkJPSBhdGFfc2ZmX2lycV9vbiwKIAkuc2ZmX2lycV9jbGVhcgkJPSBhdGFfc2ZmX2lycV9jbGVhciwKIAorCS5sb3N0X2ludGVycnVwdAkJPSBhdGFfc2ZmX2xvc3RfaW50ZXJydXB0LAorCiAJLnBvcnRfc3RhcnQJCT0gYXRhX3NmZl9wb3J0X3N0YXJ0LAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfcG9ydF9vcHMpOwpAQCAtMTY0Niw3ICsxNjQ5LDcgQEAKICAqCVJFVFVSTlM6CiAgKglPbmUgaWYgaW50ZXJydXB0IHdhcyBoYW5kbGVkLCB6ZXJvIGlmIG5vdCAoc2hhcmVkIGlycSkuCiAgKi8KLWlubGluZSB1bnNpZ25lZCBpbnQgYXRhX3NmZl9ob3N0X2ludHIoc3RydWN0IGF0YV9wb3J0ICphcCwKK3Vuc2lnbmVkIGludCBhdGFfc2ZmX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwLAogCQkJCSAgICAgIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCiB7CiAJc3RydWN0IGF0YV9laF9pbmZvICplaGkgPSAmYXAtPmxpbmsuZWhfaW5mbzsKQEAgLTE3NzUsNiArMTc3OCw0OCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9pbnRlcnJ1cHQpOwogCiAvKioKKyAqCWF0YV9zZmZfbG9zdF9pbnRlcnJ1cHQJLQlDaGVjayBmb3IgYW4gYXBwYXJlbnQgbG9zdCBpbnRlcnJ1cHQKKyAqCUBhcDogcG9ydCB0aGF0IGFwcGVhcnMgdG8gaGF2ZSB0aW1lZCBvdXQKKyAqCisgKglDYWxsZWQgZnJvbSB0aGUgbGliYXRhIGVycm9yIGhhbmRsZXJzIHdoZW4gdGhlIGNvcmUgY29kZSBzdXNwZWN0cworICoJYW4gaW50ZXJydXB0IGhhcyBiZWVuIGxvc3QuIElmIGl0IGhhcyBjb21wbGV0ZSBhbnl0aGluZyB3ZSBjYW4gYW5kCisgKgl0aGVuIHJldHVybi4gSW50ZXJmYWNlIG11c3Qgc3VwcG9ydCBhbHRzdGF0dXMgZm9yIHRoaXMgZmFzdGVyCisgKglyZWNvdmVyeSB0byBvY2N1ci4KKyAqCisgKglMb2NraW5nOgorICoJQ2FsbGVyIGhvbGRzIGhvc3QgbG9jaworICovCisKK3ZvaWQgYXRhX3NmZl9sb3N0X2ludGVycnVwdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXU4IHN0YXR1czsKKwlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCisJLyogT25seSBvbmUgb3V0c3RhbmRpbmcgY29tbWFuZCBwZXIgU0ZGIGNoYW5uZWwgKi8KKwlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmxpbmsuYWN0aXZlX3RhZyk7CisJLyogQ2hlY2sgd2UgaGF2ZSBhIGxpdmUgb25lLi4gKi8KKwlpZiAocWMgPT0gTlVMTCB8fCAgIShxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0FDVElWRSkpCisJCXJldHVybjsKKwkvKiBXZSBjYW5ub3QgbG9zZSBhbiBpbnRlcnJ1cHQgb24gYSBwb2xsZWQgY29tbWFuZCAqLworCWlmIChxYy0+dGYuZmxhZ3MgJiBBVEFfVEZMQUdfUE9MTElORykKKwkJcmV0dXJuOworCS8qIFNlZSBpZiB0aGUgY29udHJvbGxlciB0aGlua3MgaXQgaXMgc3RpbGwgYnVzeSAtIGlmIHNvIHRoZSBjb21tYW5kCisJICAgaXNuJ3QgYSBsb3N0IElSUSBidXQgaXMgc3RpbGwgaW4gcHJvZ3Jlc3MgKi8KKwlzdGF0dXMgPSBhdGFfc2ZmX2FsdHN0YXR1cyhhcCk7CisJaWYgKHN0YXR1cyAmIEFUQV9CVVNZKQorCQlyZXR1cm47CisKKwkvKiBUaGVyZSB3YXMgYSBjb21tYW5kIHJ1bm5pbmcsIHdlIGFyZSBubyBsb25nZXIgYnVzeSBhbmQgd2UgaGF2ZQorCSAgIG5vIGludGVycnVwdC4gKi8KKwlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywgImxvc3QgaW50ZXJydXB0IChTdGF0dXMgMHgleClcbiIsCisJCQkJCQkJCXN0YXR1cyk7CisJLyogUnVuIHRoZSBob3N0IGludGVycnVwdCBsb2dpYyBhcyBpZiB0aGUgaW50ZXJydXB0IGhhZCBub3QgYmVlbgorCSAgIGxvc3QgKi8KKwlhdGFfc2ZmX2hvc3RfaW50cihhcCwgcWMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9sb3N0X2ludGVycnVwdCk7CisKKy8qKgogICoJYXRhX3NmZl9mcmVlemUgLSBGcmVlemUgU0ZGIGNvbnRyb2xsZXIgcG9ydAogICoJQGFwOiBwb3J0IHRvIGZyZWV6ZQogICoKQEAgLTIxOTksNiArMjI0NCwzOSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3NmZl9wb3N0cmVzZXQpOwogCiAvKioKKyAqCWF0YV9zZmZfZHJhaW5fZmlmbyAtIFN0b2NrIEZJRk8gZHJhaW4gbG9naWMgZm9yIFNGRiBjb250cm9sbGVycworICoJQHFjOiBjb21tYW5kCisgKgorICoJRHJhaW4gdGhlIEZJRk8gYW5kIGRldmljZSBvZiBhbnkgc3R1Y2sgZGF0YSBmb2xsb3dpbmcgYSBjb21tYW5kCisgKglmYWlsaW5nIHRvIGNvbXBsZXRlLiBJbiBzb21lIGNhc2VzIHRoaXMgaXMgbmVjY2Vzc2FyeSBiZWZvcmUgYQorICoJcmVzZXQgd2lsbCByZWNvdmVyIHRoZSBkZXZpY2UuCisgKgorICovCisKK3ZvaWQgYXRhX3NmZl9kcmFpbl9maWZvKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaW50IGNvdW50OworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CisKKwkvKiBXZSBvbmx5IG5lZWQgdG8gZmx1c2ggaW5jb21pbmcgZGF0YSB3aGVuIGEgY29tbWFuZCB3YXMgcnVubmluZyAqLworCWlmIChxYyA9PSBOVUxMIHx8IHFjLT5kbWFfZGlyID09IERNQV9UT19ERVZJQ0UpCisJCXJldHVybjsKKworCWFwID0gcWMtPmFwOworCS8qIERyYWluIHVwIHRvIDY0SyBvZiBkYXRhIGJlZm9yZSB3ZSBnaXZlIHVwIHRoaXMgcmVjb3ZlcnkgbWV0aG9kICovCisJZm9yIChjb3VudCA9IDA7IChhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKSAmIEFUQV9EUlEpCisJCQkJCQkmJiBjb3VudCA8IDMyNzY4OyBjb3VudCsrKQorCQlpb3JlYWQxNihhcC0+aW9hZGRyLmRhdGFfYWRkcik7CisKKwkvKiBDYW4gYmVjb21lIERFQlVHIGxhdGVyICovCisJaWYgKGNvdW50KQorCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fREVCVUcsCisJCQkiZHJhaW5lZCAlZCBieXRlcyB0byBjbGVhciBEUlEuXG4iLCBjb3VudCk7CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGF0YV9zZmZfZHJhaW5fZmlmbyk7CisKKy8qKgogICoJYXRhX3NmZl9lcnJvcl9oYW5kbGVyIC0gU3RvY2sgZXJyb3IgaGFuZGxlciBmb3IgQk1ETUEgY29udHJvbGxlcgogICoJQGFwOiBwb3J0IHRvIGhhbmRsZSBlcnJvciBmb3IKICAqCkBAIC0yMjM5LDcgKzIzMTcsOCBAQAogCQkgKiByZWFsbHkgYSB0aW1lb3V0IGV2ZW50LCBhZGp1c3QgZXJyb3IgbWFzayBhbmQKIAkJICogY2FuY2VsIGZyb3plbiBzdGF0ZS4KIAkJICovCi0JCWlmIChxYy0+ZXJyX21hc2sgPT0gQUNfRVJSX1RJTUVPVVQgJiYgKGhvc3Rfc3RhdCAmIEFUQV9ETUFfRVJSKSkgeworCQlpZiAocWMtPmVycl9tYXNrID09IEFDX0VSUl9USU1FT1VUCisJCQkJCQkmJiAoaG9zdF9zdGF0ICYgQVRBX0RNQV9FUlIpKSB7CiAJCQlxYy0+ZXJyX21hc2sgPSBBQ19FUlJfSE9TVF9CVVM7CiAJCQl0aGF3ID0gMTsKIAkJfQpAQCAtMjI1MCw2ICsyMzI5LDEzIEBACiAJYXRhX3NmZl9zeW5jKGFwKTsJCS8qIEZJWE1FOiBXZSBkb24ndCBuZWVkIHRoaXMgKi8KIAlhcC0+b3BzLT5zZmZfY2hlY2tfc3RhdHVzKGFwKTsKIAlhcC0+b3BzLT5zZmZfaXJxX2NsZWFyKGFwKTsKKwkvKiBXZSAqTVVTVCogZG8gRklGTyBkcmFpbmluZyBiZWZvcmUgd2UgaXNzdWUgYSByZXNldCBhcyBzZXZlcmFsCisJICogZGV2aWNlcyBoZWxwZnVsbHkgY2xlYXIgdGhlaXIgaW50ZXJuYWwgc3RhdGUgYW5kIHdpbGwgbG9jayBzb2xpZAorCSAqIGlmIHdlIHRvdWNoIHRoZSBkYXRhIHBvcnQgcG9zdCByZXNldC4gUGFzcyBxYyBpbiBjYXNlIGFueW9uZSB3YW50cworCSAqICB0byBkbyBkaWZmZXJlbnQgUElPL0RNQSByZWNvdmVyeSBvciBoYXMgcGVyIGNvbW1hbmQgZml4dXBzCisJICovCisJaWYgKGFwLT5vcHMtPmRyYWluX2ZpZm8pCisJCWFwLT5vcHMtPmRyYWluX2ZpZm8ocWMpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShhcC0+bG9jaywgZmxhZ3MpOwogCkBAIC0yOTU5LDQgKzMwNDUsMyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXRhX3BjaV9zZmZfaW5pdF9vbmUpOwogCiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEuaCBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCmluZGV4IGNlYTgwMTQuLjg5YTFlMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS5oCkBAIC03OSw4ICs3OSw2IEBACiAJCQkgICB1NjQgYmxvY2ssIHUzMiBuX2Jsb2NrLCB1bnNpZ25lZCBpbnQgdGZfZmxhZ3MsCiAJCQkgICB1bnNpZ25lZCBpbnQgdGFnKTsKIGV4dGVybiB1NjQgYXRhX3RmX3JlYWRfYmxvY2soc3RydWN0IGF0YV90YXNrZmlsZSAqdGYsIHN0cnVjdCBhdGFfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgYXRhX3Bpb19xdWV1ZV90YXNrKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHZvaWQgKmRhdGEsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWxheSk7CiBleHRlcm4gdm9pZCBhdGFfcG9ydF9mbHVzaF90YXNrKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIHVuc2lnbmVkIGF0YV9leGVjX2ludGVybmFsKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsCiAJCQkJICBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZiwgY29uc3QgdTggKmNkYiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYWNwaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKaW5kZXggOGI3N2E5OC4uZDhmMzVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKQEAgLTI0Niw5ICsyNDYsOSBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAotCQkudWRtYV9tYXNrIAk9IDB4N2YsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgCT0gQVRBX1VETUE2LAogCiAJCS5wb3J0X29wcwk9ICZwYWNwaV9vcHMsCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCmluZGV4IGViOTlkYmUuLjc1MWI3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hbGkuYwpAQCAtNDkyLDUzICs0OTIsNTMgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZhbGlfZWFybHlfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4MjAgYWRkZWQgRE1BICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fMjAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJmFsaV8yMF9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHgyMCB3aXRoIHN1cHBvcnQgbG9naWMgYWRkZWQgVURNQSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzIwX3VkbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCS8qIFVETUEzMyAqLworCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmYWxpXzIwX3BvcnRfb3BzCiAJfTsKIAkvKiBSZXZpc2lvbiAweEMyIGFkZHMgVURNQTY2ICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fYzIgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19QSU9fTEJBNDgsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzID0gJmFsaV9jMl9wb3J0X29wcwogCX07CiAJLyogUmV2aXNpb24gMHhDMyBpcyBVRE1BNjYgZm9yIG5vdyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2MzID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfUElPX0xCQTQ4LAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcyA9ICZhbGlfYzJfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4QzQgaXMgVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2M0ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTIHwgQVRBX0ZMQUdfUElPX0xCQTQ4LAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZhbGlfYzRfcG9ydF9vcHMKIAl9OwogCS8qIFJldmlzaW9uIDB4QzUgaXMgVURNQTEzMyB3aXRoIExCQTQ4IERNQSAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2M1ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZhbGlfYzVfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbWQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKaW5kZXggMTE1YjFjZC4uMzNhNzRmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbWQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCkBAIC00NTUsNzQgKzQ1NSw3NCBAQAogc3RhdGljIGludCBhbWRfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb1sxMF0gPSB7Ci0JCXsJLyogMDogQU1EIDc0MDEgKi8KKwkJewkvKiAwOiBBTUQgNzQwMSAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywJLyogTm8gU1dETUEgKi8KLQkJCS51ZG1hX21hc2sgPSAweDA3LAkvKiBVRE1BIDMzICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCQkucG9ydF9vcHMgPSAmYW1kMzNfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiAxOiBFYXJseSBBTUQ3NDA5IC0gbm8gc3dkbWEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwJLyogVURNQSA2NiAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJmFtZDY2X3BvcnRfb3BzCiAJCX0sCi0JCXsJLyogMjogQU1EIDc0MDksIG5vIHN3ZG1hIGVycmF0YSAqLworCQl7CS8qIDI6IEFNRCA3NDA5ICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCS8qIFVETUEgNjYgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZhbWQ2Nl9wb3J0X29wcwogCQl9LAogCQl7CS8qIDM6IEFNRCA3NDExICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCS8qIFVETUEgMTAwICovCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKKwkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmYW1kMTAwX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogNDogQU1EIDc0NDEgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwJLyogVURNQSAxMDAgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZhbWQxMDBfcG9ydF9vcHMKIAkJfSwKLQkJewkvKiA1OiBBTUQgODExMSovCisJCXsJLyogNTogQU1EIDgxMTEgLSBubyBzd2RtYSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAkvKiBVRE1BIDEzMywgbm8gc3dkbWEgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJCS5wb3J0X29wcyA9ICZhbWQxMzNfcG9ydF9vcHMKIAkJfSwKLQkJewkvKiA2OiBBTUQgODExMSBVRE1BIDEwMCAoU2VyZW5hZGUpICovCisJCXsJLyogNjogQU1EIDgxMTEgVURNQSAxMDAgKFNlcmVuYWRlKSAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCS8qIFVETUEgMTAwLCBubyBzd2RtYSAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmFtZDEzM19wb3J0X29wcwogCQl9LAogCQl7CS8qIDc6IE52aWRpYSBOZm9yY2UgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAotCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwJLyogVURNQSAxMDAgKi8KKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZudjEwMF9wb3J0X29wcwogCQl9LAotCQl7CS8qIDg6IE52aWRpYSBOZm9yY2UyIGFuZCBsYXRlciAqLworCQl7CS8qIDg6IE52aWRpYSBOZm9yY2UyIGFuZCBsYXRlciAtIG5vIHN3ZG1hICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCS8qIFVETUEgMTMzLCBubyBzd2RtYSAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkJLnBvcnRfb3BzID0gJm52MTMzX3BvcnRfb3BzCiAJCX0sCiAJCXsJLyogOTogQU1EIENTNTUzNiAoR2VvZGUgY29tcGFuaW9uKSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAkvKiBVRE1BIDEwMCAqLworCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmFtZDEwMF9wb3J0X29wcwogCQl9CiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYwppbmRleCA2YjMwOTJjLi5kMzMyY2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKgkJcGVyZm9ybWFuY2UgQWxlc3NhbmRybyBadW1tbyA8YWxlc3NhbmRyby56dW1tb0B0b3dlcnRlY2guaXQ+CiAgKgogICoJVE9ETwotICoJODUwIHNlcmlhbGl6YXRpb24gb25jZSB0aGUgY29yZSBzdXBwb3J0cyBpdAogICoJSW52ZXN0aWdhdGUgbm9fZHNjIG9uIDg1MFIKICAqCUNsb2NrIGRldGVjdAogICovCkBAIC0yOSw3ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUJInBhdGFfYXJ0b3AiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjQuNCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNC41IgogCiAvKgogICoJVGhlIEFSVE9QIGhhcyAzMyBNaHogYW5kICJvdmVyIGNsb2NrZWQiIHRpbWluZyB0YWJsZXMuIFVudGlsIHdlCkBAIC0yODMsNiArMjgyLDMxIEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDQgKyBhcC0+cG9ydF9ubywgdWx0cmEpOwogfQogCisvKioKKyAqCWFydG9wXzYyMTBfcWNfZGVmZXIJLQlpbXBsZW1lbnQgc2VyaWFsaXphdGlvbgorICoJQHFjOiBjb21tYW5kCisgKgorICoJSXNzdWUgY29tbWFuZHMgcGVyIGhvc3Qgb24gdGhpcyBjaGlwLgorICovCisKK3N0YXRpYyBpbnQgYXJ0b3A2MjEwX3FjX2RlZmVyKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gcWMtPmFwLT5ob3N0OworCXN0cnVjdCBhdGFfcG9ydCAqYWx0ID0gaG9zdC0+cG9ydHNbMSBeIHFjLT5hcC0+cG9ydF9ub107CisJaW50IHJjOworCisJLyogRmlyc3QgYXBwbHkgdGhlIHVzdWFsIHJ1bGVzICovCisJcmMgPSBhdGFfc3RkX3FjX2RlZmVyKHFjKTsKKwlpZiAocmMgIT0gMCkKKwkJcmV0dXJuIHJjOworCisJLyogTm93IGFwcGx5IHNlcmlhbGl6YXRpb24gcnVsZXMuIE9ubHkgYWxsb3cgYSBjb21tYW5kIGlmIHRoZQorCSAgIG90aGVyIGNoYW5uZWwgc3RhdGUgbWFjaGluZSBpcyBpZGxlICovCisJaWYgKGFsdCAmJiBhbHQtPnFjX2FjdGl2ZSkKKwkJcmV0dXJuCUFUQV9ERUZFUl9QT1JUOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhcnRvcF9zaHQgPSB7CiAJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiB9OwpAQCAtMjkzLDYgKzMxNyw3IEBACiAJLnNldF9waW9tb2RlCQk9IGFydG9wNjIxMF9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gYXJ0b3A2MjEwX3NldF9kbWFtb2RlLAogCS5wcmVyZXNldAkJPSBhcnRvcDYyMTBfcHJlX3Jlc2V0LAorCS5xY19kZWZlcgkJPSBhcnRvcDYyMTBfcWNfZGVmZXIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYXJ0b3A2MjYwX29wcyA9IHsKQEAgLTMyMywyOSArMzQ4LDI5IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjIxMCA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgCT0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMJPSAmYXJ0b3A2MjEwX29wcywKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzYyNnggPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNCwKIAkJLnBvcnRfb3BzCT0gJmFydG9wNjI2MF9vcHMsCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb182Mjh4ID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZhcnRvcDYyNjBfb3BzLAogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fNjI4eF9mYXN0ID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZhcnRvcDYyNjBfb3BzLAogCX07CkBAIC0zNjIsMTIgKzM4Nyw4IEBACiAKIAlpZiAoaWQtPmRyaXZlcl9kYXRhID09IDApIHsJLyogNjIxMCB2YXJpYW50ICovCiAJCXBwaVswXSA9ICZpbmZvXzYyMTA7Ci0JCXBwaVsxXSA9ICZhdGFfZHVtbXlfcG9ydF9pbmZvOwogCQkvKiBCSU9TIG1heSBoYXZlIGxlZnQgdXMgaW4gVURNQSwgY2xlYXIgaXQgYmVmb3JlIGxpYmF0YSBwcm9iZSAqLwogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg1NCwgMCk7Ci0JCS8qIEZvciB0aGUgbW9tZW50IChhbHNvIGxhY2tzIGRzYykgKi8KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVJUT1AgNjIxMCByZXF1aXJlcyBzZXJpYWxpemUgZnVuY3Rpb25hbGl0eSBub3QgeWV0IHN1cHBvcnRlZCBieSBsaWJhdGEuXG4iKTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2Vjb25kYXJ5IEFUQSBwb3J0cyB3aWxsIG5vdCBiZSBhY3RpdmF0ZWQuXG4iKTsKIAl9CiAJZWxzZSBpZiAoaWQtPmRyaXZlcl9kYXRhID09IDEpCS8qIDYyNjAgKi8KIAkJcHBpWzBdID0gJmluZm9fNjI2eDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXQzMi5jIGIvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKaW5kZXggYWI2MTA5NS4uNWMxMjlmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdDMyLmMKQEAgLTY3LDcgKzY3LDkgQEAKICAqCiAgKiBBbHRlciBQSU9fTUFTSyBiZWxvdyBhY2NvcmRpbmcgdG8gdGFibGUgdG8gc2V0IG1heGltYWwgUElPIG1vZGUuCiAgKi8KLSNkZWZpbmUgUElPX01BU0sgKDB4MWYpCitlbnVtIHsKKyAgUElPX01BU0sgPSBBVEFfUElPNCwKK307CiAKIC8qCiAgKiBTdHJ1Y3QgY29udGFpbmluZyBwcml2YXRlIGluZm9ybWF0aW9uIGFib3V0IGRldmljZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCmluZGV4IDUwNmFkZGUuLmJlYzBiOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYwpAQCAtMjIwLDkgKzIyMCw5IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNiwJLyogTm8gTVdETUEwIHN1cHBvcnQgKi8KLQkJLnVkbWFfbWFzayA9IDB4M0YsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTEyX09OTFksCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZhdGlpeHBfcG9ydF9vcHMKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2JpdHMgYXRpaXhwX2VuYWJsZV9iaXRzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKaW5kZXggMTA1MGZlZC4uYzRiNDdhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYwpAQCAtMTUwMiw3ICsxNTAyLDcgQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MKIAkJCQl8IEFUQV9GTEFHX01NSU8KIAkJCQl8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IDAsCiAJCS51ZG1hX21hc2sJPSAwLAogCQkucG9ydF9vcHMJPSAmYmZpbl9wYXRhX29wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0MC5jCmluZGV4IDM0YTM5NDIuLjVhY2Y5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjQwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NDAuYwpAQCAtMjExLDcgKzIxMSw3IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAogCQkucG9ydF9vcHMgPSAmY21kNjQwX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwppbmRleCAzMTY3ZDhmLi5mOThkZmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKQEAgLTI5OSw0MCArMjk5LDQwIEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGNtZF9pbmZvWzZdID0gewogCQl7CS8qIENNRCA2NDMgLSBubyBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnBvcnRfb3BzID0gJmNtZDY0eF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDYgd2l0aCBicm9rZW4gVURNQSAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NHhfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ2IHdpdGggd29ya2luZyBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NHhfcG9ydF9vcHMKIAkJfSwKIAkJewkvKiBDTUQgNjQ2IHJldiAxICAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZjbWQ2NDZyMV9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDggKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJmNtZDY0OF9wb3J0X29wcwogCQl9LAogCQl7CS8qIENNRCA2NDkgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkJLnBvcnRfb3BzID0gJmNtZDY0OF9wb3J0X29wcwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYwppbmRleCAxMTg2YmNkLi5kYjZhOTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY3RsX3BvcnRbXSA9IHsgMHgzRjYsIDB4Mzc2IH07CiAJc3RydWN0IGF0YV9wb3J0X2luZm8gcGkgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzCT0gJmNzNTUyMF9wb3J0X29wcywKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbMl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYwppbmRleCBiYmE0NTMzLi5jOTc0YjA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKQEAgLTI5OCwxNSArMjk4LDE1IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZjczU1MzBfcG9ydF9vcHMKIAl9OwogCS8qIFRoZSBkb2NraW5nIGNvbm5lY3RvciBkb2Vzbid0IGRvIFVETUEsIGFuZCBpdCBzZWVtcyBub3QgTVdETUEgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19wYWxtYXhfc2Vjb25kYXJ5ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJmNzNTUzMF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKaW5kZXggOGIyMzZhZi4uZDMzYWEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCkBAIC0xODEsOCArMTgxLDggQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmY3M1NTM1X3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jCmluZGV4IGFmZWQ5MjkuLjZkYTRjYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYwpAQCAtMjQxLDggKzI0MSw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmNzNTUzNl9wb3J0X29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jeXByZXNzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYwppbmRleCBkNTQ2NDI1Li44ZmIwNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYwpAQCAtMTI0LDggKzEyNCw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJmN5ODJjNjkzX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCAmYXRhX2R1bW15X3BvcnRfaW5mbyB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwppbmRleCBhYzYzOTJlLi4yMDg1ZTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwpAQCAtMjUxLDkgKzI1MSw5IEBACiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTEtMiAqLwotCQkudWRtYV9tYXNrIAk9IDB4MGYsIC8qIFVETUEgNjYgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcwk9ICZlZmFyX29wcywKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCmluZGV4IDY1YzI4ZTUuLmQ3ZjJkYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYwpAQCAtMzM2LDggKzMzNiw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzY2ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTQsCiAJCS5wb3J0X29wcyA9ICZocHQzNjZfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKaW5kZXggNDIxNjM5OS4uODFhYjU3MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwpAQCAtNzUzLDU1ICs3NTMsNTUgQEAKIAkvKiBIUFQzNzAgLSBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZocHQzNzBfcG9ydF9vcHMKIAl9OwogCS8qIEhQVDM3MEEgLSBVRE1BMTAwICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0MzcwYSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0MzcwYV9wb3J0X29wcwogCX07CiAJLyogSFBUMzcwIC0gVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MF8zMyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0MzcwX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzBBIC0gVURNQTEwMCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MGFfMzMgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmhwdDM3MGFfcG9ydF9vcHMKIAl9OwogCS8qIEhQVDM3MSwgMzcyIGFuZCBmcmllbmRzIC0gVURNQTEzMyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3MiA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmaHB0MzcyX3BvcnRfb3BzCiAJfTsKIAkvKiBIUFQzNzQgLSBVRE1BMTAwLCBmdW5jdGlvbiAxIHVzZXMgZGlmZmVyZW50IHByZXJlc2V0IG1ldGhvZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvX2hwdDM3NF9mbjAgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzID0gJmhwdDM3Ml9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9faHB0Mzc0X2ZuMSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMgPSAmaHB0Mzc0X2ZuMV9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4Mm4uYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCmluZGV4IGQ1YzlmZDcuLjNkNTlmZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jCkBAIC00NDEsOCArNDQxLDggQEAKIAkvKiBIUFQzNzJOIGFuZCBmcmllbmRzIC0gVURNQTEzMyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZocHQzeDJuX3BvcnRfb3BzCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jCmluZGV4IGYxOWNjNjQuLjdlMzEwMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYwpAQCAtMTg4LDExICsxODgsMTEgQEAKIAlzdGF0aWMgaW50IHByaW50ZWRfdmVyc2lvbjsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAjaWYgZGVmaW5lZChDT05GSUdfUEFUQV9IUFQzWDNfRE1BKQogCQkvKiBGdXJ0aGVyIGRlYnVnIG5lZWRlZCAqLwotCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCS51ZG1hX21hc2sgPSAweDA3LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAjZW5kaWYKIAkJLnBvcnRfb3BzID0gJmhwdDN4M19wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jIGIvZHJpdmVycy9hdGEvcGF0YV9pY3NpZGUuYwppbmRleCBjZjllOTg0Li5iNjYzYjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2ljc2lkZS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaWNzaWRlLmMKQEAgLTQ1LDggKzQ1LDYgQEAKIAkuc3RlcHBpbmcJPSA2LAogfTsKIAotI2RlZmluZSBQQVRBX0lDU0lERV9NQVhfU0cJMTI4Ci0KIHN0cnVjdCBwYXRhX2ljc2lkZV9zdGF0ZSB7CiAJdm9pZCBfX2lvbWVtICppcnFfcG9ydDsKIAl2b2lkIF9faW9tZW0gKmlvY19iYXNlOwpAQCAtNTcsNyArNTUsNiBAQAogCQl1OCBkaXNhYmxlZDsKIAkJdW5zaWduZWQgaW50IHNwZWVkW0FUQV9NQVhfREVWSUNFU107CiAJfSBwb3J0WzJdOwotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1tQQVRBX0lDU0lERV9NQVhfU0ddOwogfTsKIAogc3RydWN0IHBhdGFfaWNzaWRlX2luZm8gewpAQCAtMjIyLDkgKzIxOSw3IEBACiB7CiAJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKIAlzdHJ1Y3QgcGF0YV9pY3NpZGVfc3RhdGUgKnN0YXRlID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCAqcnNnID0gc3RhdGUtPnNnOwogCXVuc2lnbmVkIGludCB3cml0ZSA9IHFjLT50Zi5mbGFncyAmIEFUQV9URkxBR19XUklURTsKLQl1bnNpZ25lZCBpbnQgc2k7CiAKIAkvKgogCSAqIFdlIGFyZSBzaW1wbGV4OyBCVUcgaWYgd2UgdHJ5IHRvIGZpZGRsZSB3aXRoIERNQQpAQCAtMjMzLDIwICsyMjgsMTIgQEAKIAlCVUdfT04oZG1hX2NoYW5uZWxfYWN0aXZlKHN0YXRlLT5kbWEpKTsKIAogCS8qCi0JICogQ29weSBBVEFzIHNjYXR0ZXJlZCBzZyBsaXN0IGludG8gYSBjb250aWd1b3VzIGFycmF5IG9mIHNnCi0JICovCi0JZm9yX2VhY2hfc2cocWMtPnNnLCBzZywgcWMtPm5fZWxlbSwgc2kpIHsKLQkJbWVtY3B5KHJzZywgc2csIHNpemVvZigqc2cpKTsKLQkJcnNnKys7Ci0JfQotCi0JLyoKIAkgKiBSb3V0ZSB0aGUgRE1BIHNpZ25hbHMgdG8gdGhlIGNvcnJlY3QgaW50ZXJmYWNlCiAJICovCiAJd3JpdGViKHN0YXRlLT5wb3J0W2FwLT5wb3J0X25vXS5wb3J0X3NlbCwgc3RhdGUtPmlvY19iYXNlKTsKIAogCXNldF9kbWFfc3BlZWQoc3RhdGUtPmRtYSwgc3RhdGUtPnBvcnRbYXAtPnBvcnRfbm9dLnNwZWVkW3FjLT5kZXYtPmRldm5vXSk7Ci0Jc2V0X2RtYV9zZyhzdGF0ZS0+ZG1hLCBzdGF0ZS0+c2csIHJzZyAtIHN0YXRlLT5zZyk7CisJc2V0X2RtYV9zZyhzdGF0ZS0+ZG1hLCBxYy0+c2csIHFjLT5uX2VsZW0pOwogCXNldF9kbWFfbW9kZShzdGF0ZS0+ZG1hLCB3cml0ZSA/IERNQV9NT0RFX1dSSVRFIDogRE1BX01PREVfUkVBRCk7CiAKIAkvKiBpc3N1ZSByL3cgY29tbWFuZCAqLwpAQCAtMjk3LDcgKzI4NCw3IEBACiAKIAlpZiAoZWMtPmRtYSAhPSBOT19ETUEgJiYgIXJlcXVlc3RfZG1hKGVjLT5kbWEsIERSVl9OQU1FKSkgewogCQlzdGF0ZS0+ZG1hID0gZWMtPmRtYTsKLQkJaW5mby0+bXdkbWFfbWFzayA9IDB4MDc7CS8qIE1XMC4uMiAqLworCQlpbmZvLT5td2RtYV9tYXNrID0gQVRBX01XRE1BMjsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMwNiw4ICsyOTMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwYXRhX2ljc2lkZV9zaHQgPSB7CiAJQVRBX0JBU0VfU0hUKERSVl9OQU1FKSwKLQkuc2dfdGFibGVzaXplCQk9IFBBVEFfSUNTSURFX01BWF9TRywKLQkuZG1hX2JvdW5kYXJ5CQk9IH4wLCAvKiBubyBkbWEgYm91bmRhcmllcyAqLworCS5zZ190YWJsZXNpemUJCT0gU0NTSV9NQVhfU0dfQ0hBSU5fU0VHTUVOVFMsCisJLmRtYV9ib3VuZGFyeQkJPSBJT01EX0RNQV9CT1VOREFSWSwKIH07CiAKIHN0YXRpYyB2b2lkIHBhdGFfaWNzaWRlX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3NlcykKQEAgLTQ3Myw3ICs0NjAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5ucl9wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBob3N0LT5wb3J0c1tpXTsKIAotCQlhcC0+cGlvX21hc2sgPSAweDFmOworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAkJYXAtPm13ZG1hX21hc2sgPSBpbmZvLT5td2RtYV9tYXNrOwogCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAkJYXAtPm9wcyA9ICZwYXRhX2ljc2lkZV9wb3J0X29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2lzYXBucC5jCmluZGV4IDE1Y2RiOTEuLjRiY2ViODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pc2FwbnAuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FICJwYXRhX2lzYXBucCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi4yIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yLjUiCiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGlzYXBucF9zaHQgPSB7CiAJQVRBX1BJT19TSFQoRFJWX05BTUUpLApAQCAtMjgsNiArMjgsMTMgQEAKIAkuY2FibGVfZGV0ZWN0CT0gYXRhX2NhYmxlXzQwd2lyZSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBpc2FwbnBfbm9hbHRfcG9ydF9vcHMgPSB7CisJLmluaGVyaXRzCT0gJmF0YV9zZmZfcG9ydF9vcHMsCisJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCisJLyogTm8gYWx0c3RhdHVzIHNvIHdlIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBsb3N0IGludGVycnVwdCBwb2xsICovCisJLmxvc3RfaW50ZXJydXB0ID0gQVRBX09QX05VTEwsCit9OworCiAvKioKICAqCWlzYXBucF9pbml0X29uZQkJLQlhdHRhY2ggYW4gaXNhcG5wIGludGVyZmFjZQogICoJQGlkZXY6IFBuUCBkZXZpY2UKQEAgLTY1LDggKzcyLDggQEAKIAogCWFwID0gaG9zdC0+cG9ydHNbMF07CiAKLQlhcC0+b3BzID0gJmlzYXBucF9wb3J0X29wczsKLQlhcC0+cGlvX21hc2sgPSAxOworCWFwLT5vcHMgPSAmaXNhcG5wX25vYWx0X3BvcnRfb3BzOworCWFwLT5waW9fbWFzayA9IEFUQV9QSU8wOwogCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCiAJYXAtPmlvYWRkci5jbWRfYWRkciA9IGNtZF9hZGRyOwpAQCAtNzYsNiArODMsNyBAQAogCQkJCQkgICBwbnBfcG9ydF9zdGFydChpZGV2LCAxKSwgMSk7CiAJCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkcjsKIAkJYXAtPmlvYWRkci5jdGxfYWRkciA9IGN0bF9hZGRyOworCQlhcC0+b3BzID0gJmlzYXBucF9wb3J0X29wczsKIAl9CiAKIAlhdGFfc2ZmX3N0ZF9wb3J0cygmYXAtPmlvYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMTMuYwppbmRleCBjMTEzZDdjLi5mMTU2ZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxMy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjEzLmMKQEAgLTI2Miw4ICsyNjIsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTQsIC8qIEZJWE1FOiB3YW50IFVETUEgMTAwPyAqLwogCQkucG9ydF9vcHMJPSAmaXQ4MjEzX29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKaW5kZXggYjA1Yjg2YS4uMTg4YmMyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCkBAIC04NzUsMjkgKzg3NSwyOSBAQAogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fc21hcnQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9zbWFydF9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcGFzc3RocnUgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJml0ODIxeF9wYXNzdGhydV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fcmRjID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcyA9ICZpdDgyMXhfcmRjX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19yZGNfMTEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLyogTm8gVURNQSAqLwogCQkucG9ydF9vcHMgPSAmaXQ4MjF4X3JkY19wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9peHA0eHhfY2YuYwppbmRleCBiMTczYzE1Li4xOWZkZWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l4cDR4eF9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXhwNHh4X2NmLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCWFwID0gaG9zdC0+cG9ydHNbMF07CiAKIAlhcC0+b3BzCT0gJml4cDR4eF9wb3J0X29wczsKLQlhcC0+cGlvX21hc2sgPSAweDFmOyAvKiBQSU80ICovCisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19OT19BVEFQSTsKIAogCWl4cDR4eF9zZXR1cF9wb3J0KGFwLCBkYXRhLCBjczAtPnN0YXJ0LCBjczEtPnN0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKaW5kZXggMzhjZjFhYi4uM2ExNDc0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKQEAgLTEzNiw4ICsxMzYsOCBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayAJPSBBVEFfVURNQTUsCiAKIAkJLnBvcnRfb3BzCT0gJmptaWNyb25fb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKaW5kZXggZTNiYzFiNC4uM2Y4MzBmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCkBAIC0xMjksNyArMTI5LDcgQEAKIHN0YXRpYyBpbnQgd2luYm9uZDsJCS8qIFNldCB0byBwcm9iZSBXaW5ib25kIGNvbnRyb2xsZXJzLAogCQkJCQlnaXZlIEkvTyBwb3J0IGlmIG5vbiBzdGFuZGFyZCAqLwogc3RhdGljIGludCBhdXRvc3BlZWQ7CQkvKiBDaGlwIHByZXNlbnQgd2hpY2ggc25vb3BzIHNwZWVkIGNoYW5nZXMgKi8KLXN0YXRpYyBpbnQgcGlvX21hc2sgPSAweDFGOwkvKiBQSU8gcmFuZ2UgZm9yIGF1dG9zcGVlZCBkZXZpY2VzICovCitzdGF0aWMgaW50IHBpb19tYXNrID0gQVRBX1BJTzQ7CS8qIFBJTyByYW5nZSBmb3IgYXV0b3NwZWVkIGRldmljZXMgKi8KIHN0YXRpYyBpbnQgaW9yZHlfbWFzayA9IDB4RkZGRkZGRkY7CS8qIFVzZSBpb3JkeSBpZiBhdmFpbGFibGUgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21hcnZlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCmluZGV4IDc2ZTM5OWIuLjIwOTZmYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbWFydmVsbC5jCkBAIC0xMjYsOCArMTI2LDggQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwKIAogCQkucG9ydF9vcHMJPSAmbWFydmVsbF9vcHMsCkBAIC0xMzYsOCArMTM2LDggQEAKIAkJLyogU2xhdmUgcG9zc2libGUgYXMgaXRzIG1hZ2ljYWxseSBtYXBwZWQgbm90IHJlYWwgKi8KIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCiAKLQkJLnBpb19tYXNrCT0gMHgxZiwKLQkJLm13ZG1hX21hc2sJPSAweDA3LAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNiwKIAogCQkucG9ydF9vcHMJPSAmbWFydmVsbF9vcHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBjNTJ4eC5jCmluZGV4IDUwYWU2ZDEuLjY4ZDI3YmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwpAQCAtNzM3LDEwICs3MzcsMTAgQEAKIAkgKi8KIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAibXdkbWEtbW9kZSIsICZwcm9wbGVuKTsKIAlpZiAoKHByb3ApICYmIChwcm9wbGVuID49IDQpKQotCQltd2RtYV9tYXNrID0gMHg3ICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOworCQltd2RtYV9tYXNrID0gQVRBX01XRE1BMiAmICgoMSA8PCAoKnByb3AgKyAxKSkgLSAxKTsKIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAidWRtYS1tb2RlIiwgJnByb3BsZW4pOwogCWlmICgocHJvcCkgJiYgKHByb3BsZW4gPj0gNCkpCi0JCXVkbWFfbWFzayA9IDB4NyAmICgoMSA8PCAoKnByb3AgKyAxKSkgLSAxKTsKKwkJdWRtYV9tYXNrID0gQVRBX1VETUEyICYgKCgxIDw8ICgqcHJvcCArIDEpKSAtIDEpOwogCiAJYXRhX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKIAlpZiAoYXRhX2lycSA9PSBOT19JUlEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYwppbmRleCBhYTU3NmNhLi5iMjFmMDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkgICB0aGUgTVBJSVggeW91ciBib3ggZ29lcyBjYXN0b3JzIHVwICovCiAKIAlhcC0+b3BzID0gJm1waWl4X3BvcnRfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4MUY7CisJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJYXAtPmZsYWdzIHw9IEFUQV9GTEFHX1NMQVZFX1BPU1M7CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyID0gY21kX2FkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25ldGNlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCmluZGV4IDlkYzA1ZTEuLmJkYjIzNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCkBAIC01MSw4ICs1MSw4IEBACiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkvKiBBY3R1YWxseSB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aGVzZSBhcyB0aGUKIAkJICAgZmlybXdhcmUgZGVhbHMgd2l0aCBpdCAqLwotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrIAk9IEFUQV9VRE1BNSwgLyogVURNQSAxMzMgKi8KIAkJLnBvcnRfb3BzCT0gJm5ldGNlbGxfb3BzLAogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmluamEzMi5jCmluZGV4IDRkZDlhM2IuLjBmYjZiMWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX25pbmphMzIuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJaWYgKCFiYXNlKQogCQlyZXR1cm4gLUVOT01FTTsKIAlhcC0+b3BzID0gJm5pbmphMzJfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrID0gMHgxRjsKKwlhcC0+cGlvX21hc2sgPSBBVEFfUElPNDsKIAlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAogCWFwLT5pb2FkZHIuY21kX2FkZHIgPSBiYXNlICsgMHgxMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKaW5kZXggNDBkNDExYy4uY2E1M2ZhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDBGLAorCQkucGlvX21hc2sgPSBBVEFfUElPMywKIAkJLnBvcnRfb3BzID0gJm5zODc0MTBfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKaW5kZXggODliZjVmOC4uNzczYjE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDE1LmMKQEAgLTM0Niw4ICszNDYsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzCT0gJm5zODc0MTVfcGF0YV9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CkBAIC0zNTUsOCArMzU1LDggQEAKICNpZiBkZWZpbmVkKENPTkZJR19TVVBFUklPKQogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvODc1NjAgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMJPSAmbnM4NzU2MF9wYXRhX29wcywKIAl9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9vY3Rlb25fY2YuYwppbmRleCAwZmU0ZWYzLi5lZmUyYzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29jdGVvbl9jZi5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2N0ZW9uX2NmLmMKQEAgLTg3MSw3ICs4NzEsNyBAQAogCWFwLT5wcml2YXRlX2RhdGEgPSBjZl9wb3J0OwogCWNmX3BvcnQtPmFwID0gYXA7CiAJYXAtPm9wcyA9ICZvY3Rlb25fY2Zfb3BzOwotCWFwLT5waW9fbWFzayA9IDB4N2Y7IC8qIFN1cHBvcnQgUElPIDAtNiAqLworCWFwLT5waW9fbWFzayA9IEFUQV9QSU82OwogCWFwLT5mbGFncyB8PSBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fTEVHQUNZCiAJCSAgfCBBVEFfRkxBR19OT19BVEFQSSB8IEFUQV9GTEFHX1BJT19QT0xMSU5HOwogCkBAIC05MDAsNyArOTAwLDcgQEAKIAkJYXAtPmlvYWRkci5jdGxfYWRkcgk9IGNzMSArICg2IDw8IDEpICsgMTsKIAkJb2N0ZW9uX2NmX29wcy5zZmZfZGF0YV94ZmVyID0gb2N0ZW9uX2NmX2RhdGFfeGZlcjE2OwogCi0JCWFwLT5td2RtYV9tYXNrCT0gMHgxZjsgLyogU3VwcG9ydCBNV0RNQSAwLTQgKi8KKwkJYXAtPm13ZG1hX21hc2sJPSBBVEFfTVdETUE0OwogCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCQlpcnFfaGFuZGxlciA9IG9jdGVvbl9jZl9pbnRlcnJ1cHQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKaW5kZXggMmMxYTkxYy4uODRhYzUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMKQEAgLTIzOCw4ICsyMzgsOCBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzCT0gJm9sZHBpaXhfcGF0YV9vcHMsCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCmluZGV4IGU0ZmE0ZDUuLjk5ZWRkZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZvcHRpX3BvcnRfb3BzCiAJfTsKIAljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCBOVUxMIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCmluZGV4IDkzYmI2ZTkuLjg2ODg1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCkBAIC0zOTksMTUgKzM5OSwxNSBAQAogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvXzgyYzcwMCA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkucG9ydF9vcHMgPSAmb3B0aWRtYV9wb3J0X29wcwogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9fODJjNzAwX3VkbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZvcHRpcGx1c19wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mb184MmM3MDAsIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCmluZGV4IDY0YjJlMjIuLmY0ZDAwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwpAQCAtNDIsNyArNDIsNyBAQAogCiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfcGNtY2lhIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjMiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuNSIKIAogLyoKICAqCVByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgdG8gZ2x1ZSBzdHVmZiB0b2dldGhlcgpAQCAtMTI2LDYgKzEyNiwzNyBAQAogCXJldHVybiBidWZsZW47CiB9CiAKKy8qKgorICoJcGNtY2lhXzhiaXRfZHJhaW5fZmlmbyAtIFN0b2NrIEZJRk8gZHJhaW4gbG9naWMgZm9yIFNGRiBjb250cm9sbGVycworICoJQHFjOiBjb21tYW5kCisgKgorICoJRHJhaW4gdGhlIEZJRk8gYW5kIGRldmljZSBvZiBhbnkgc3R1Y2sgZGF0YSBmb2xsb3dpbmcgYSBjb21tYW5kCisgKglmYWlsaW5nIHRvIGNvbXBsZXRlLiBJbiBzb21lIGNhc2VzIHRoaXMgaXMgbmVjY2Vzc2FyeSBiZWZvcmUgYQorICoJcmVzZXQgd2lsbCByZWNvdmVyIHRoZSBkZXZpY2UuCisgKgorICovCisgCit2b2lkIHBjbWNpYV84Yml0X2RyYWluX2ZpZm8oc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlpbnQgY291bnQ7CisJc3RydWN0IGF0YV9wb3J0ICphcDsKKworCS8qIFdlIG9ubHkgbmVlZCB0byBmbHVzaCBpbmNvbWluZyBkYXRhIHdoZW4gYSBjb21tYW5kIHdhcyBydW5uaW5nICovCisJaWYgKHFjID09IE5VTEwgfHwgcWMtPmRtYV9kaXIgPT0gRE1BX1RPX0RFVklDRSkKKwkJcmV0dXJuOworCisJYXAgPSBxYy0+YXA7CisKKwkvKiBEcmFpbiB1cCB0byA2NEsgb2YgZGF0YSBiZWZvcmUgd2UgZ2l2ZSB1cCB0aGlzIHJlY292ZXJ5IG1ldGhvZCAqLworCWZvciAoY291bnQgPSAwOyAoYXAtPm9wcy0+c2ZmX2NoZWNrX3N0YXR1cyhhcCkgJiBBVEFfRFJRKQorCQkJCQkJCSYmIGNvdW50KysgPCA2NTUzNjspCisJCWlvcmVhZDgoYXAtPmlvYWRkci5kYXRhX2FkZHIpOworCisJaWYgKGNvdW50KQorCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fV0FSTklORywgImRyYWluZWQgJWQgYnl0ZXMgdG8gY2xlYXIgRFJRLlxuIiwKKwkJCQkJCQkJY291bnQpOworCit9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHBjbWNpYV9zaHQgPSB7CiAJQVRBX1BJT19TSFQoRFJWX05BTUUpLApAQCAtMTQzLDYgKzE3NCw3IEBACiAJLnNmZl9kYXRhX3hmZXIJPSBhdGFfZGF0YV94ZmVyXzhiaXQsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9tb2RlCT0gcGNtY2lhX3NldF9tb2RlXzhiaXQsCisJLmRyYWluX2ZpZm8JPSBwY21jaWFfOGJpdF9kcmFpbl9maWZvLAogfTsKIAogI2RlZmluZSBDU19DSEVDSyhmbiwgcmV0KSBcCkBAIC0yOTksNyArMzMxLDcgQEAKIAkJYXAgPSBob3N0LT5wb3J0c1twXTsKIAogCQlhcC0+b3BzID0gb3BzOwotCQlhcC0+cGlvX21hc2sgPSAxOwkJLyogSVNBIHNvIFBJTyAwIGN5Y2xlcyAqLworCQlhcC0+cGlvX21hc2sgPSBBVEFfUElPMDsJLyogSVNBIHNvIFBJTyAwIGN5Y2xlcyAqLwogCQlhcC0+ZmxhZ3MgfD0gQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAkJYXAtPmlvYWRkci5jbWRfYWRkciA9IGlvX2FkZHIgKyAweDEwICogcDsKIAkJYXAtPmlvYWRkci5hbHRzdGF0dXNfYWRkciA9IGN0bF9hZGRyICsgMHgxMCAqIHA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKaW5kZXggZTk0ZWZjYy4uY2E1Y2FkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYwpAQCAtMTUyLDE4ICsxNTIsMTggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJICAgICAgICAgICAgICAgICAgQVRBX0ZMQUdfTU1JTywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwgLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmcGRjMjAyN3hfcGF0YTEwMF9vcHMsCiAJfSwKIAkvKiBQRENfVURNQV8xMzMgKi8KIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19OT19MRUdBQ1kgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKICAgICAgICAgICAgICAgICAgICAgICAgIAkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsIC8qIHVkbWEwLTYgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkYzIwMjd4X3BhdGExMzNfb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyeHhfb2xkLmMKaW5kZXggNzk5YTZhMC4uNWZlZGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMnh4X29sZC5jCkBAIC0yOTEsMjIgKzI5MSwyMiBAQAogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvWzNdID0gewogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI0eF9wb3J0X29wcwogCQl9LAogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNCwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI2eF9wb3J0X29wcwogCQl9LAogCQl7CiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNSwKIAkJCS5wb3J0X29wcyA9ICZwZGMyMDI2eF9wb3J0X29wcwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9xZGkuYwppbmRleCBmMWIyNmY3Li40NTg3OWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcWRpLmMKQEAgLTIxMiwxMSArMjEyLDExIEBACiAKIAlpZiAodHlwZSA9PSA2NTgwKSB7CiAJCWFwLT5vcHMgPSAmcWRpNjU4MF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgxRjsKKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCX0gZWxzZSB7CiAJCWFwLT5vcHMgPSAmcWRpNjUwMF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgwNzsJLyogQWN0dWFsbHkgUElPMyAhSU9SRFkgaXMgcG9zc2libGUgKi8KKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzI7IC8qIEFjdHVhbGx5IFBJTzMgIUlPUkRZIGlzIHBvc3NpYmxlICovCiAJCWFwLT5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19OT19JT1JEWTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKaW5kZXggNjk1ZDQ0YS4uNDQwMWIzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMKQEAgLTIxNiw5ICsyMTYsOSBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWExLTIgKi8KLQkJLnVkbWFfbWFzawk9IDB4MTQsIC8qIFVETUEzMy82NiBvbmx5ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTI0X09OTFksCiAJCS5wb3J0X29wcwk9ICZyYWRpc3lzX3BhdGFfb3BzLAogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jIGIvZHJpdmVycy9hdGEvcGF0YV9yYjUzMl9jZi5jCmluZGV4IGViZmNkYTIuLjhlM2NkZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcmI1MzJfY2YuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JiNTMyX2NmLmMKQEAgLTQ4LDYzICs0OCwxMSBAQAogc3RydWN0IHJiNTMyX2NmX2luZm8gewogCXZvaWQgX19pb21lbQkqaW9iYXNlOwogCXVuc2lnbmVkIGludAlncGlvX2xpbmU7Ci0JaW50CQlmcm96ZW47CiAJdW5zaWduZWQgaW50CWlycTsKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmI1MzJfcGF0YV9maW5pc2hfaW8oc3RydWN0IGF0YV9wb3J0ICphcCkKLXsKLQlzdHJ1Y3QgYXRhX2hvc3QgKmFoID0gYXAtPmhvc3Q7Ci0Jc3RydWN0IHJiNTMyX2NmX2luZm8gKmluZm8gPSBhaC0+cHJpdmF0ZV9kYXRhOwotCi0JLyogRklYTUU6IEtlZXAgcHJldmlvdXMgZGVsYXkuIElmIHRoaXMgaXMgbWVyZWx5IGEgZmVuY2UgdGhlbgotCSAgIGF0YV9zZmZfc3luYyBtaWdodCBiZSBzdWZmaWNpZW50LiAqLwotCWF0YV9zZmZfZG1hX3BhdXNlKGFwKTsKLQluZGVsYXkoUkI1MDBfQ0ZfSU9fREVMQVkpOwotfQotCi1zdGF0aWMgdm9pZCByYjUzMl9wYXRhX2V4ZWNfY29tbWFuZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLAotCQkJCWNvbnN0IHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmKQotewotCXdyaXRlYih0Zi0+Y29tbWFuZCwgYXAtPmlvYWRkci5jb21tYW5kX2FkZHIpOwotCXJiNTMyX3BhdGFfZmluaXNoX2lvKGFwKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCByYjUzMl9wYXRhX2RhdGFfeGZlcihzdHJ1Y3QgYXRhX2RldmljZSAqYWRldiwgdW5zaWduZWQgY2hhciAqYnVmLAotCQkJCXVuc2lnbmVkIGludCBidWZsZW4sIGludCB3cml0ZV9kYXRhKQotewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhZGV2LT5saW5rLT5hcDsKLQl2b2lkIF9faW9tZW0gKmlvYWRkciA9IGFwLT5pb2FkZHIuZGF0YV9hZGRyOwotCWludCByZXRsZW4gPSBidWZsZW47Ci0KLQlpZiAod3JpdGVfZGF0YSkgewotCQlmb3IgKDsgYnVmbGVuID4gMDsgYnVmbGVuLS0sIGJ1ZisrKQotCQkJd3JpdGViKCpidWYsIGlvYWRkcik7Ci0JfSBlbHNlIHsKLQkJZm9yICg7IGJ1ZmxlbiA+IDA7IGJ1Zmxlbi0tLCBidWYrKykKLQkJCSpidWYgPSByZWFkYihpb2FkZHIpOwotCX0KLQotCXJiNTMyX3BhdGFfZmluaXNoX2lvKGFkZXYtPmxpbmstPmFwKTsKLQlyZXR1cm4gcmV0bGVuOwotfQotCi1zdGF0aWMgdm9pZCByYjUzMl9wYXRhX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCByYjUzMl9jZl9pbmZvICppbmZvID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQotCWluZm8tPmZyb3plbiA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHJiNTMyX3BhdGFfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQotewotCXN0cnVjdCByYjUzMl9jZl9pbmZvICppbmZvID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKLQotCWluZm8tPmZyb3plbiA9IDA7Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCByYjUzMl9wYXRhX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKIAlzdHJ1Y3QgYXRhX2hvc3QgKmFoID0gZGV2X2luc3RhbmNlOwpAQCAtMTEyLDggKzYwLDcgQEAKIAogCWlmIChncGlvX2dldF92YWx1ZShpbmZvLT5ncGlvX2xpbmUpKSB7CiAJCXNldF9pcnFfdHlwZShpbmZvLT5pcnEsIElSUV9UWVBFX0xFVkVMX0xPVyk7Ci0JCWlmICghaW5mby0+ZnJvemVuKQotCQkJYXRhX3NmZl9pbnRlcnJ1cHQoaW5mby0+aXJxLCBkZXZfaW5zdGFuY2UpOworCQlhdGFfc2ZmX2ludGVycnVwdChpbmZvLT5pcnEsIGRldl9pbnN0YW5jZSk7CiAJfSBlbHNlIHsKIAkJc2V0X2lycV90eXBlKGluZm8tPmlycSwgSVJRX1RZUEVfTEVWRUxfSElHSCk7CiAJfQpAQCAtMTIzLDEwICs3MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyByYjUzMl9wYXRhX3BvcnRfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKLQkuc2ZmX2V4ZWNfY29tbWFuZAk9IHJiNTMyX3BhdGFfZXhlY19jb21tYW5kLAotCS5zZmZfZGF0YV94ZmVyCQk9IHJiNTMyX3BhdGFfZGF0YV94ZmVyLAotCS5mcmVlemUJCQk9IHJiNTMyX3BhdGFfZnJlZXplLAotCS50aGF3CQkJPSByYjUzMl9wYXRhX3RoYXcsCisJLnNmZl9kYXRhX3hmZXIJCT0gYXRhX3NmZl9kYXRhX3hmZXIzMiwKIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTQ1LDcgKzg5LDcgQEAKIAlhcCA9IGFoLT5wb3J0c1swXTsKIAogCWFwLT5vcHMJCT0gJnJiNTMyX3BhdGFfcG9ydF9vcHM7Ci0JYXAtPnBpb19tYXNrCT0gMHgxZjsgLyogUElPNCAqLworCWFwLT5waW9fbWFzawk9IEFUQV9QSU80OwogCWFwLT5mbGFncwk9IEFUQV9GTEFHX05PX0xFR0FDWSB8IEFUQV9GTEFHX01NSU87CiAKIAlhcC0+aW9hZGRyLmNtZF9hZGRyCT0gaW5mby0+aW9iYXNlICsgUkI1MDBfQ0ZfUkVHX0JBU0U7CkBAIC0xNjAsNyArMTA0LDcgQEAKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQgcmI1MzJfcGF0YV9kcml2ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQl1bnNpZ25lZCBpbnQgaXJxOworCWludCBpcnE7CiAJaW50IGdwaW87CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGF0YV9ob3N0ICphaDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCmluZGV4IDQ2ZDZiYzEuLjBjNTc0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYwpAQCAtODgsNyArODgsNyBAQAogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKIAkJLnBvcnRfb3BzID0gJnJ6MTAwMF9wb3J0X29wcwogCX07CiAJY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgTlVMTCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKaW5kZXggOWE0YmRjYS4uZjQ5ODE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCkBAIC0yLDcgKzIsNiBAQAogICogTmV3IEFUQSBsYXllciBTQzEyMDAgZHJpdmVyCQlBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKICAqIFRPRE86IE1vZGUgc2VsZWN0aW9uIGZpbHRlcmluZwotICogVE9ETzogQ2FuJ3QgZW5hYmxlIHNlY29uZCBjaGFubmVsIHVudGlsIEFUQSBjb3JlIGhhcyBzZXJpYWxpemUKICAqIFRPRE86IE5lZWRzIGN1c3RvbSBETUEgY2xlYW51cCBjb2RlCiAgKgogICogQmFzZWQgdmVyeSBoZWF2aWx5IG9uCkBAIC0xNzgsNiArMTc3LDMxIEBACiAJcmV0dXJuIGF0YV9zZmZfcWNfaXNzdWUocWMpOwogfQogCisvKioKKyAqCXNjMTIwMF9xY19kZWZlcgktCWltcGxlbWVudCBzZXJpYWxpemF0aW9uCisgKglAcWM6IGNvbW1hbmQKKyAqCisgKglTZXJpYWxpemUgY29tbWFuZCBpc3N1ZSBvbiB0aGlzIGNvbnRyb2xsZXIuCisgKi8KKworc3RhdGljIGludCBzYzEyMDBfcWNfZGVmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QgPSBxYy0+YXAtPmhvc3Q7CisJc3RydWN0IGF0YV9wb3J0ICphbHQgPSBob3N0LT5wb3J0c1sxIF4gcWMtPmFwLT5wb3J0X25vXTsKKwlpbnQgcmM7CisKKwkvKiBGaXJzdCBhcHBseSB0aGUgdXN1YWwgcnVsZXMgKi8KKwlyYyA9IGF0YV9zdGRfcWNfZGVmZXIocWMpOworCWlmIChyYyAhPSAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBOb3cgYXBwbHkgc2VyaWFsaXphdGlvbiBydWxlcy4gT25seSBhbGxvdyBhIGNvbW1hbmQgaWYgdGhlCisJICAgb3RoZXIgY2hhbm5lbCBzdGF0ZSBtYWNoaW5lIGlzIGlkbGUgKi8KKwlpZiAoYWx0ICYmIGFsdC0+cWNfYWN0aXZlKQorCQlyZXR1cm4JQVRBX0RFRkVSX1BPUlQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNjMTIwMF9zaHQgPSB7CiAJQVRBX0JNRE1BX1NIVChEUlZfTkFNRSksCiAJLnNnX3RhYmxlc2l6ZQk9IExJQkFUQV9EVU1CX01BWF9QUkQsCkBAIC0xODcsNiArMjExLDcgQEAKIAkuaW5oZXJpdHMJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5xY19wcmVwIAk9IGF0YV9zZmZfZHVtYl9xY19wcmVwLAogCS5xY19pc3N1ZQk9IHNjMTIwMF9xY19pc3N1ZSwKKwkucWNfZGVmZXIJPSBzYzEyMDBfcWNfZGVmZXIsCiAJLmNhYmxlX2RldGVjdAk9IGF0YV9jYWJsZV80MHdpcmUsCiAJLnNldF9waW9tb2RlCT0gc2MxMjAwX3NldF9waW9tb2RlLAogCS5zZXRfZG1hbW9kZQk9IHNjMTIwMF9zZXRfZG1hbW9kZSwKQEAgLTIwNSwxMyArMjMwLDEzIEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKLQkJLnVkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sgPSBBVEFfVURNQTIsCiAJCS5wb3J0X29wcyA9ICZzYzEyMDBfcG9ydF9vcHMKIAl9OwogCS8qIENhbid0IGVuYWJsZSBwb3J0IDIgeWV0LCBzZWUgdG9wIGNvbW1lbnRzICovCi0JY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaVtdID0geyAmaW5mbywgJmF0YV9kdW1teV9wb3J0X2luZm8gfTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZpbmZvLCB9OwogCiAJcmV0dXJuIGF0YV9wY2lfc2ZmX2luaXRfb25lKGRldiwgcHBpLCAmc2MxMjAwX3NodCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zY2MuYwppbmRleCBkNDQ3ZjFjLi40MjU3ZDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjYy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NjLmMKQEAgLTEwMDEsOCArMTAwMSw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2NjX3BvcnRfaW5mb1tdID0gewogCXsKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDAwLAorCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLyogTm8gTVdETUEgKi8KIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnNjY19wYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zY2guYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMKaW5kZXggNmFlZWVlYi4uOTljY2ViNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2NoLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zY2guYwpAQCAtODQsOSArODQsOSBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gc2NoX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkucGlvX21hc2sJPSBBVEFfUElPNCwgICAvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsIC8qIG13ZG1hMC0yICovCi0JLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwgIC8qIHVkbWEwLTUgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkucG9ydF9vcHMJPSAmc2NoX3BhdGFfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDhkMmZkOWQuLmJlYWVkMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKQEAgLTM5OCwyNiArMzk4LDI2IEBACiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm9bNF0gPSB7CiAJCXsgLyogT1NCNCAqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCi0JCQkudWRtYV9tYXNrID0gMHgwNywKKwkJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAorCQkJLnVkbWFfbWFzayA9IEFUQV9VRE1BMiwKIAkJCS5wb3J0X29wcyA9ICZzZXJ2ZXJ3b3Jrc19vc2I0X3BvcnRfb3BzCiAJCX0sIHsgLyogT1NCNCBubyBVRE1BICovCiAJCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkJLnBpb19tYXNrID0gMHgxZiwKLQkJCS5td2RtYV9tYXNrID0gMHgwNywKLQkJCS51ZG1hX21hc2sgPSAweDAwLAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCisJCQkvKiBObyBVRE1BICovCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3Nfb3NiNF9wb3J0X29wcwogCQl9LCB7IC8qIENTQjUgKi8KIAkJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCQkucGlvX21hc2sgPSAweDFmLAotCQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkJLnBvcnRfb3BzID0gJnNlcnZlcndvcmtzX2NzYl9wb3J0X29wcwogCQl9LCB7IC8qIENTQjUgLSBsYXRlciByZXZpc2lvbnMqLwogCQkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJCS5waW9fbWFzayA9IDB4MWYsCi0JCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCQkucG9ydF9vcHMgPSAmc2VydmVyd29ya3NfY3NiX3BvcnRfb3BzCiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCmluZGV4IDllNzY0ZTUuLjRjYjY0OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwpAQCAtMjgyLDE1ICsyODIsMTUgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMgPSAmc2lsNjgwX3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19zbG93ID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZzaWw2ODBfcG9ydF9vcHMKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKaW5kZXggMjdjZWI0Mi4uNDg4ZTc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3Npcy5jCkBAIC01NTIsNTEgKzU1Miw1NyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCi0JLm13ZG1hX21hc2sJPSAweDA3LAotCS51ZG1hX21hc2sJPSAwLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkvKiBObyBVRE1BICovCiAJLnBvcnRfb3BzCT0gJnNpc19vbGRfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzMzID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS5td2RtYV9tYXNrCT0gMHgwNywKLQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAkvKiBVRE1BIDMzICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJLnBvcnRfb3BzCT0gJnNpc19vbGRfb3BzLAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzY2ID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwotCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCS8qIFVETUEgNjYgKi8KKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkvKiBObyBNV0RNQSAqLworCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCiAJLnBvcnRfb3BzCT0gJnNpc182Nl9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLworCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkucG9ydF9vcHMJPSAmc2lzXzEwMF9vcHMsCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHNpc19pbmZvMTAwX2Vhcmx5ID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TTEFWRV9QT1NTLAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS8qIE5vIE1XRE1BICovCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKLQkucGlvX21hc2sJPSAweDFmLAkvKiBwaW8wLTQgKi8KIAkucG9ydF9vcHMJPSAmc2lzXzY2X29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzMgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX29wcywKIH07CiBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzaXNfaW5mbzEzM19mb3Jfc2F0YSA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX2Zvcl9zYXRhX29wcywKIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX2luZm8xMzNfZWFybHkgPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfMTMzX2Vhcmx5X29wcywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKaW5kZXggMWIwZTdiNi4uMjlmNzMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYwpAQCAtMjgzLDEzICsyODMsMTMgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19kbWEgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnNsODJjMTA1X3BvcnRfb3BzCiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19lYXJseSA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJCS5wb3J0X29wcyA9ICZzbDgyYzEwNV9wb3J0X29wcwogCX07CiAJLyogZm9yIG5vdyB1c2Ugb25seSB0aGUgZmlyc3QgcG9ydCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwppbmRleCBlZjk1OTc1Li5mMWYxM2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3RyaWZsZXguYwpAQCAtMTkxLDggKzE5MSw4IEBACiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGluZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnRyaWZsZXhfcG9ydF9vcHMKIAl9OwogCWNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGlbXSA9IHsgJmluZm8sIE5VTEwgfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IGJhNTU2ZDMuLmIwOGU2ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtNDIyLDQ2ICs0MjIsNDYgQEAKIAkvKiBFYXJseSBWSUEgd2l0aG91dCBVRE1BIHN1cHBvcnQgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdmlhX213ZG1hX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CiAJLyogRGl0dG8gd2l0aCBJUlEgbWFza2luZyByZXF1aXJlZCAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfbXdkbWFfaW5mb19ib3JrZWQgPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wc19ub2lycSwKIAl9OwogCS8qIFZJQSBVRE1BIDMzIGRldmljZXMgKGFuZCBib3JrZWQgNjYpICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMzNfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUEyLAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBWSUEgVURNQSA2NiBkZXZpY2VzICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hNjZfaW5mbyA9IHsKIAkJLmZsYWdzID0gQVRBX0ZMQUdfU0xBVkVfUE9TUywKLQkJLnBpb19tYXNrID0gMHgxZiwKLQkJLm13ZG1hX21hc2sgPSAweDA3LAorCQkucGlvX21hc2sgPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sgPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrID0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMgPSAmdmlhX3BvcnRfb3BzCiAJfTsKIAkvKiBWSUEgVURNQSAxMDAgZGV2aWNlcyAqLwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB2aWFfdWRtYTEwMF9pbmZvID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAotCQkucGlvX21hc2sgPSAweDFmLAotCQkubXdkbWFfbWFzayA9IDB4MDcsCisJCS5waW9fbWFzayA9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzayA9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sgPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcyA9ICZ2aWFfcG9ydF9vcHMKIAl9OwogCS8qIFVETUExMzMgd2l0aCBiYWQgQVNUIChBbGwgY3VycmVudCAxMzMpICovCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZpYV91ZG1hMTMzX2luZm8gPSB7CiAJCS5mbGFncyA9IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzayA9IDB4MWYsCi0JCS5td2RtYV9tYXNrID0gMHgwNywKKwkJLnBpb19tYXNrID0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrID0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwJLyogRklYTUU6IHNob3VsZCBjaGVjayBub3J0aCBicmlkZ2UgKi8KIAkJLnBvcnRfb3BzID0gJnZpYV9wb3J0X29wcwogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3dpbmJvbmQuYyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCmluZGV4IDMxOWUxNjQuLjZkODYxOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfd2luYm9uZC5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkJYXRhX3BvcnRfZGVzYyhhcCwgImNtZCAweCVseCBjdGwgMHglbHgiLCBjbWRfcG9ydCwgY3RsX3BvcnQpOwogCiAJCWFwLT5vcHMgPSAmd2luYm9uZF9wb3J0X29wczsKLQkJYXAtPnBpb19tYXNrID0gMHgxRjsKKwkJYXAtPnBpb19tYXNrID0gQVRBX1BJTzQ7CiAJCWFwLT5mbGFncyB8PSBBVEFfRkxBR19TTEFWRV9QT1NTOwogCQlhcC0+aW9hZGRyLmNtZF9hZGRyID0gY21kX2FkZHI7CiAJCWFwLT5pb2FkZHIuYWx0c3RhdHVzX2FkZHIgPSBjdGxfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMgYi9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jCmluZGV4IGJlNTM1NDUuLjM5NTg4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMKKysrIGIvZHJpdmVycy9hdGEvcGRjX2FkbWEuYwpAQCAtMTQ4LDYgKzE0OCw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgYWRtYV9hdGFfb3BzID0gewogCS5pbmhlcml0cwkJPSAmYXRhX3NmZl9wb3J0X29wcywKIAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKKwogCS5jaGVja19hdGFwaV9kbWEJPSBhZG1hX2NoZWNrX2F0YXBpX2RtYSwKIAkucWNfcHJlcAkJPSBhZG1hX3FjX3ByZXAsCiAJLnFjX2lzc3VlCQk9IGFkbWFfcWNfaXNzdWUsCkBAIC0xNjYsNyArMTY4LDcgQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJCSAgQVRBX0ZMQUdfTk9fTEVHQUNZIHwgQVRBX0ZMQUdfTU1JTyB8CiAJCQkJICBBVEFfRkxBR19QSU9fUE9MTElORywKLQkJLnBpb19tYXNrCT0gMHgxMCwgLyogcGlvNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNF9PTkxZLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAogCQkucG9ydF9vcHMJPSAmYWRtYV9hdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jIGIvZHJpdmVycy9hdGEvc2F0YV9mc2wuYwppbmRleCA1NWJjODhjLi5jMmU5MGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMKQEAgLTEyNzksOCArMTI3OSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2F0YV9mc2xfcG9ydF9pbmZvW10gPSB7CiAJewogCSAuZmxhZ3MgPSBTQVRBX0ZTTF9IT1NUX0ZMQUdTLAotCSAucGlvX21hc2sgPSAweDFmLAkvKiBwaW8gMC00ICovCi0JIC51ZG1hX21hc2sgPSAweDdmLAkvKiB1ZG1hIDAtNiAqLworCSAucGlvX21hc2sgPSBBVEFfUElPNCwKKwkgLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkgLnBvcnRfb3BzID0gJnNhdGFfZnNsX29wcywKIAkgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMgYi9kcml2ZXJzL2F0YS9zYXRhX2luaWMxNjJ4LmMKaW5kZXggZmJiZDg3Yy4uMzA1YTRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9pbmljMTYyeC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfaW5pYzE2MnguYwpAQCAtNzQ0LDggKzc0NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBpbmljX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19QSU9fRE1BLAotCS5waW9fbWFzawkJPSAweDFmLAkvKiBwaW8wLTQgKi8KLQkubXdkbWFfbWFzawkJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCS5waW9fbWFzawkJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawkJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwkJPSAmaW5pY19wb3J0X29wcwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCA3NGIxMDgwLi5hMzc3MjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC0xLDEwICsxLDEzIEBACiAvKgogICogc2F0YV9tdi5jIC0gTWFydmVsbCBTQVRBIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgMjAwODogTWFydmVsbCBDb3Jwb3JhdGlvbiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAyMDA4LTIwMDk6IE1hcnZlbGwgQ29ycG9yYXRpb24sIGFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgMjAwNTogRU1DIENvcnBvcmF0aW9uLCBhbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IDIwMDUgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCisgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQnJldHQgUnVzcy4KKyAqIEV4dGVuc2l2ZSBvdmVyaGF1bCBhbmQgZW5oYW5jZW1lbnQgYnkgTWFyayBMb3JkIDxtbG9yZEBwb2JveC5jb20+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+bWFpbl9pcnFfbWFzazsKQEAgLTIyMjEsNyArMjgzNiw3IEBACiAKIAkvKiBmb3IgTVNJOiB1bm1hc2s7IGludGVycnVwdCBjYXVzZSBiaXRzIHdpbGwgcmV0cmlnZ2VyIG5vdyAqLwogCWlmICh1c2luZ19tc2kpCi0JCXdyaXRlbChocHJpdi0+bWFpbl9pcnFfbWFzaywgaHByaXYtPm1haW5faXJxX21hc2tfYWRkcik7CisJCW12X3dyaXRlX21haW5faXJxX21hc2soaHByaXYtPm1haW5faXJxX21hc2ssIGhwcml2KTsKIAogCXNwaW5fdW5sb2NrKCZob3N0LT5sb2NrKTsKIApAQCAtMjc3NCw2ICszMzg5LDggQEAKIAogCW12X3Jlc2V0X2NoYW5uZWwoaHByaXYsIG1taW8sIGFwLT5wb3J0X25vKTsKIAlwcC0+cHBfZmxhZ3MgJj0gfk1WX1BQX0ZMQUdfRURNQV9FTjsKKwlwcC0+cHBfZmxhZ3MgJj0KKwkgIH4oTVZfUFBfRkxBR19GQlNfRU4gfCBNVl9QUF9GTEFHX05DUV9FTiB8IE1WX1BQX0ZMQUdfRkFLRV9BVEFfQlVTWSk7CiAKIAkvKiBXb3JrYXJvdW5kIGZvciBlcnJhdGEgRkVyIFNBVEEjMTAgKHBhcnQgMikgKi8KIAlkbyB7CkBAIC0yNzkzLDYgKzM0MTAsOCBAQAogCQkJCWV4dHJhID0gSFo7IC8qIG9ubHkgZXh0ZW5kIGl0IG9uY2UsIG1heCAqLwogCQl9CiAJfSB3aGlsZSAoc3N0YXR1cyAhPSAweDAgJiYgc3N0YXR1cyAhPSAweDExMyAmJiBzc3RhdHVzICE9IDB4MTIzKTsKKwltdl9zYXZlX2NhY2hlZF9yZWdzKGFwKTsKKwltdl9lZG1hX2NmZyhhcCwgMCwgMCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMTI2LDYgKzM3NDUsOCBAQAogCSAqIFRoZSBwZXItcG9ydCBpbnRlcnJ1cHRzIGdldCBkb25lIGxhdGVyIGFzIHBvcnRzIGFyZSBzZXQgdXAuCiAJICovCiAJbXZfc2V0X21haW5faXJxX21hc2soaG9zdCwgMCwgUENJX0VSUik7CisJbXZfc2V0X2lycV9jb2FsZXNjaW5nKGhvc3QsIGlycV9jb2FsZXNjaW5nX2lvX2NvdW50LAorCQkJCSAgICBpcnFfY29hbGVzY2luZ191c2Vjcyk7CiBkb25lOgogCXJldHVybiByYzsKIH0KQEAgLTMyODcsMTIgKzM5MDgsNiBAQAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKIH07CiAKLS8qCi0gKiBtb2R1bGUgb3B0aW9ucwotICovCi1zdGF0aWMgaW50IG1zaTsJICAgICAgLyogVXNlIFBDSSBtc2k7IGVpdGhlciB6ZXJvIChvZmYsIGRlZmF1bHQpIG9yIG5vbi16ZXJvICovCi0KLQogLyogbW92ZSB0byBQQ0kgbGF5ZXIgb3IgbGliYXRhIGNvcmU/ICovCiBzdGF0aWMgaW50IHBjaV9nb182NChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKQEAgLTM0NzQsMTAgKzQwODksNSBAQAogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKIAotI2lmZGVmIENPTkZJR19QQ0kKLW1vZHVsZV9wYXJhbShtc2ksIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1zaSwgIkVuYWJsZSB1c2Ugb2YgUENJIE1TSSAoMD1vZmYsIDE9b24pIik7Ci0jZW5kaWYKLQogbW9kdWxlX2luaXQobXZfaW5pdCk7CiBtb2R1bGVfZXhpdChtdl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbnYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbnYuYwppbmRleCBmNjViNTM3Li42Y2RhMTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX252LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9udi5jCkBAIC01Nyw5ICs1Nyw5IEBACiAJTlZfTU1JT19CQVIJCQk9IDUsCiAKIAlOVl9QT1JUUwkJCT0gMiwKLQlOVl9QSU9fTUFTSwkJCT0gMHgxZiwKLQlOVl9NV0RNQV9NQVNLCQkJPSAweDA3LAotCU5WX1VETUFfTUFTSwkJCT0gMHg3ZiwKKwlOVl9QSU9fTUFTSwkJCT0gQVRBX1BJTzQsCisJTlZfTVdETUFfTUFTSwkJCT0gQVRBX01XRE1BMiwKKwlOVl9VRE1BX01BU0sJCQk9IEFUQV9VRE1BNiwKIAlOVl9QT1JUMF9TQ1JfUkVHX09GRlNFVAkJPSAweDAwLAogCU5WX1BPUlQxX1NDUl9SRUdfT0ZGU0VUCQk9IDB4NDAsCiAKQEAgLTQwOCw2ICs0MDgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbnZfY29tbW9uX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCiAJLnNjcl9yZWFkCQk9IG52X3Njcl9yZWFkLAogCS5zY3Jfd3JpdGUJCT0gbnZfc2NyX3dyaXRlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfcHJvbWlzZS5jIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKaW5kZXggYmE5YTI1Ny4uYjFmZDdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9wcm9taXNlLmMKQEAgLTE3Niw3ICsxNzYsOSBAQAogCS5jaGVja19hdGFwaV9kbWEJPSBwZGNfY2hlY2tfYXRhcGlfZG1hLAogCS5xY19wcmVwCQk9IHBkY19xY19wcmVwLAogCS5xY19pc3N1ZQkJPSBwZGNfcWNfaXNzdWUsCisKIAkuc2ZmX2lycV9jbGVhcgkJPSBwZGNfaXJxX2NsZWFyLAorCS5sb3N0X2ludGVycnVwdAkJPSBBVEFfT1BfTlVMTCwKIAogCS5wb3N0X2ludGVybmFsX2NtZAk9IHBkY19wb3N0X2ludGVybmFsX2NtZCwKIAkuZXJyb3JfaGFuZGxlcgkJPSBwZGNfZXJyb3JfaGFuZGxlciwKQEAgLTIxMyw4ICsyMTUsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHX1NBVEFfUEFUQSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19vbGRfc2F0YV9vcHMsCiAJfSwKQEAgLTIyMiw4ICsyMjQsOCBAQAogCVtib2FyZF8yMDM3eF9wYXRhXSA9CiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NMQVZFX1BPU1MsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfcGF0YV9vcHMsCiAJfSwKQEAgLTIzMiw4ICsyMzQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TQVRBIHwKIAkJCQkgIFBEQ19GTEFHXzRfUE9SVFMsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfb2xkX3NhdGFfb3BzLAogCX0sCkBAIC0yNDIsOCArMjQ0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0xBVkVfUE9TUyB8CiAJCQkJICBQRENfRkxBR180X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjX3BhdGFfb3BzLAogCX0sCkBAIC0yNTIsOCArMjU0LDggQEAKIAl7CiAJCS5mbGFncwkJPSBQRENfQ09NTU9OX0ZMQUdTIHwgQVRBX0ZMQUdfU0FUQSB8CiAJCQkJICBQRENfRkxBR19HRU5fSUkgfCBQRENfRkxBR19TQVRBX1BBVEEsCi0JCS5waW9fbWFzawk9IDB4MWYsIC8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsIC8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZwZGNfc2F0YV9vcHMsCiAJfSwKQEAgLTI2Miw4ICsyNjQsOCBAQAogCXsKIAkJLmZsYWdzCQk9IFBEQ19DT01NT05fRkxBR1MgfCBBVEFfRkxBR19TTEFWRV9QT1NTIHwKIAkJCQkgIFBEQ19GTEFHX0dFTl9JSSwKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19wYXRhX29wcywKIAl9LApAQCAtMjcyLDggKzI3NCw4IEBACiAJewogCQkuZmxhZ3MJCT0gUERDX0NPTU1PTl9GTEFHUyB8IEFUQV9GTEFHX1NBVEEgfAogCQkJCSAgUERDX0ZMQUdfR0VOX0lJIHwgUERDX0ZMQUdfNF9QT1JUUywKLQkJLnBpb19tYXNrCT0gMHgxZiwgLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnBkY19zYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jIGIvZHJpdmVycy9hdGEvc2F0YV9xc3Rvci5jCmluZGV4IGEwMDBjODYuLmMzOTM2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfcXN0b3IuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3FzdG9yLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCS5zb2Z0cmVzZXQJCT0gQVRBX09QX05VTEwsCiAJLmVycm9yX2hhbmRsZXIJCT0gcXNfZXJyb3JfaGFuZGxlciwKIAkucG9zdF9pbnRlcm5hbF9jbWQJPSBBVEFfT1BfTlVMTCwKKwkubG9zdF9pbnRlcnJ1cHQJCT0gQVRBX09QX05VTEwsCiAKIAkuc2NyX3JlYWQJCT0gcXNfc2NyX3JlYWQsCiAJLnNjcl93cml0ZQkJPSBxc19zY3Jfd3JpdGUsCkBAIC0xNjAsNyArMTYxLDcgQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8gfCBBVEFfRkxBR19QSU9fUE9MTElORywKLQkJLnBpb19tYXNrCT0gMHgxMCwgLyogcGlvNCAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNF9PTkxZLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcXNfYXRhX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsLmMKaW5kZXggZDAwOTE2MC4uZTY3Y2U4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9zaWwuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbC5jCkBAIC0yMDAsOCArMjAwLDggQEAKIAkvKiBzaWxfMzExMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX01PRDE1V1JJVEUsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LApAQCAtMjA5LDI0ICsyMDksMjQgQEAKIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19NT0QxNVdSSVRFIHwKIAkJCQkgIFNJTF9GTEFHX05PX1NBVEFfSVJRLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbF9vcHMsCiAJfSwKIAkvKiBzaWxfMzUxMiAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTF9ERkxfUE9SVF9GTEFHUyB8IFNJTF9GTEFHX1JFUlJfT05fRE1BX0FDVCwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWxfb3BzLAogCX0sCiAJLyogc2lsXzMxMTQgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUxfREZMX1BPUlRfRkxBR1MgfCBTSUxfRkxBR19SRVJSX09OX0RNQV9BQ1QsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCmluZGV4IDI1OTBjMjIuLjBkODk5MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKQEAgLTQyOSwyNSArNDI5LDI1IEBACiAJewogCQkuZmxhZ3MJCT0gU0lMMjRfQ09NTU9OX0ZMQUdTIHwgU0lMMjRfTlBPUlRTMkZMQUcoNCkgfAogCQkJCSAgU0lMMjRfRkxBR19QQ0lYX0lSUV9XT0MsCi0JCS5waW9fbWFzawk9IDB4MWYsCQkJLyogcGlvMC00ICovCi0JCS5td2RtYV9tYXNrCT0gMHgwNywJCQkvKiBtd2RtYTAtMiAqLwotCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAkJLyogdWRtYTAtNSAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCQkucG9ydF9vcHMJPSAmc2lsMjRfb3BzLAogCX0sCiAJLyogc2lsXzMxMzIgKi8KIAl7CiAJCS5mbGFncwkJPSBTSUwyNF9DT01NT05fRkxBR1MgfCBTSUwyNF9OUE9SVFMyRkxBRygyKSwKLQkJLnBpb19tYXNrCT0gMHgxZiwJCQkvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LAkJCS8qIG13ZG1hMC0yICovCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCQkvKiB1ZG1hMC01ICovCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJCS5wb3J0X29wcwk9ICZzaWwyNF9vcHMsCiAJfSwKIAkvKiBzaWxfMzEzMS9zaWxfMzUzMSAqLwogCXsKIAkJLmZsYWdzCQk9IFNJTDI0X0NPTU1PTl9GTEFHUyB8IFNJTDI0X05QT1JUUzJGTEFHKDEpLAotCQkucGlvX21hc2sJPSAweDFmLAkJCS8qIHBpbzAtNCAqLwotCQkubXdkbWFfbWFzawk9IDB4MDcsCQkJLyogbXdkbWEwLTIgKi8KLQkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwJCS8qIHVkbWEwLTUgKi8KKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAkJLnBvcnRfb3BzCT0gJnNpbDI0X29wcywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCmluZGV4IDljNDNiNGUuLjhmOTgzMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaXMuYwpAQCAtOTcsOCArOTcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gc2lzX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHg3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZzaXNfb3BzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMgYi9kcml2ZXJzL2F0YS9zYXRhX3N2dy5jCmluZGV4IDYwOWQxNDcuLjcyNTdmMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc3Z3LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zdncuYwpAQCAtMzYxLDggKzM2MSw4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19OT19BVEFQSV9ETUEsCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCkBAIC0zNzEsOCArMzcxLDggQEAKIAkJLmZsYWdzCQk9IEFUQV9GTEFHX1NBVEEgfCBBVEFfRkxBR19OT19MRUdBQ1kgfAogCQkJCSAgQVRBX0ZMQUdfTU1JTyB8IEsyX0ZMQUdfTk9fQVRBUElfRE1BIHwKIAkJCQkgIEsyX0ZMQUdfU0FUQV84X1BPUlRTLAotCQkucGlvX21hc2sJPSAweDFmLAotCQkubXdkbWFfbWFzawk9IDB4MDcsCisJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJCS5wb3J0X29wcwk9ICZrMl9zYXRhX29wcywKIAl9LApAQCAtMzgwLDggKzM4MCw4IEBACiAJewogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19NTUlPIHwgSzJfRkxBR19CQVJfUE9TXzMsCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCkBAIC0zODksOCArMzg5LDggQEAKIAl7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJmsyX3NhdGFfb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jIGIvZHJpdmVycy9hdGEvc2F0YV9zeDQuYwppbmRleCBlYzA0YjhkLi5kY2UzZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3N4NC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfc3g0LmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCQkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkJICBBVEFfRkxBR19TUlNUIHwgQVRBX0ZMQUdfTU1JTyB8CiAJCQkJICBBVEFfRkxBR19OT19BVEFQSSB8IEFUQV9GTEFHX1BJT19QT0xMSU5HLAotCQkucGlvX21hc2sJPSAweDFmLCAvKiBwaW8wLTQgKi8KLQkJLm13ZG1hX21hc2sJPSAweDA3LCAvKiBtd2RtYTAtMiAqLworCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmcGRjXzIwNjIxX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdWxpLmMKaW5kZXggMDE5NTc1Yi4uZTViZmY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV91bGkuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3VsaS5jCkBAIC04OSw3ICs4OSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdWxpX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSB8CiAJCQkgIEFUQV9GTEFHX0lHTl9TSU1QTEVYLAotCS5waW9fbWFzayAgICAgICA9IDB4MWYsCQkvKiBwaW8wLTQgKi8KKwkucGlvX21hc2sgICAgICAgPSBBVEFfUElPNCwKIAkudWRtYV9tYXNrICAgICAgPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzICAgICAgID0gJnVsaV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdmlhLmMKaW5kZXggNWM2MmRhOS4uOThlOGM1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92aWEuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZpYS5jCkBAIC0xNDYsMjQgKzE0NiwyNCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIwX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWSwKLQkucGlvX21hc2sJPSAweDFmLAotCS5td2RtYV9tYXNrCT0gMHgwNywKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMJPSAmdnQ2NDIwX3NhdGFfb3BzLAogfTsKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZ0NjQyMV9zcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAotCS5waW9fbWFzawk9IDB4MWYsCi0JLm13ZG1hX21hc2sJPSAweDA3LAorCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDY0MjFfc2F0YV9vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ2NDIxX3Bwb3J0X2luZm8gPSB7CiAJLmZsYWdzCQk9IEFUQV9GTEFHX1NMQVZFX1BPU1MgfCBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDAsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLyogTm8gTVdETUEgKi8KIAkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCS5wb3J0X29wcwk9ICZ2dDY0MjFfcGF0YV9vcHMsCiB9OwpAQCAtMTcxLDggKzE3MSw4IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X2luZm8gdnQ4MjUxX3BvcnRfaW5mbyA9IHsKIAkuZmxhZ3MJCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX1NMQVZFX1BPU1MgfAogCQkJICBBVEFfRkxBR19OT19MRUdBQ1ksCi0JLnBpb19tYXNrCT0gMHgxZiwKLQkubXdkbWFfbWFzawk9IDB4MDcsCisJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCiAJLnBvcnRfb3BzCT0gJnZ0ODI1MV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYyBiL2RyaXZlcnMvYXRhL3NhdGFfdnNjLmMKaW5kZXggYzU3Y2RmZi4uZWQ3MGJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV92c2MuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX3ZzYy5jCkBAIC0zMDgsNiArMzA4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHZzY19zYXRhX29wcyA9IHsKIAkuaW5oZXJpdHMJCT0gJmF0YV9ibWRtYV9wb3J0X29wcywKKwkvKiBUaGUgSVJRIGhhbmRsaW5nIGlzIG5vdCBxdWl0ZSBzdGFuZGFyZCBTRkYgYmVoYXZpb3VyIHNvIHdlCisJICAgY2Fubm90IHVzZSB0aGUgZGVmYXVsdCBsb3N0IGludGVycnVwdCBoYW5kbGVyICovCisJLmxvc3RfaW50ZXJydXB0CQk9IEFUQV9PUF9OVUxMLAogCS5zZmZfdGZfbG9hZAkJPSB2c2Nfc2F0YV90Zl9sb2FkLAogCS5zZmZfdGZfcmVhZAkJPSB2c2Nfc2F0YV90Zl9yZWFkLAogCS5mcmVlemUJCQk9IHZzY19mcmVlemUsCkBAIC0zNDUsOCArMzQ4LDggQEAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gcGkgPSB7CiAJCS5mbGFncwkJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKIAkJCQkgIEFUQV9GTEFHX01NSU8sCi0JCS5waW9fbWFzawk9IDB4MWYsCi0JCS5td2RtYV9tYXNrCT0gMHgwNywKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzCT0gJnZzY19zYXRhX29wcywKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCmluZGV4IDk4MDk5ZjUuLmIxMTk2NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYworKysgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKQEAgLTE2OTAsMTcgKzE2OTAsMTcgQEAKIAkJICB8ICgwICogU0FSTU9ERTBfU0hBREVOKSAvKiBXZSBkb24ndCB1c2Ugc2hhZG93IHJlZ2lzdGVycy4gKi8KIAkJICB8ICgxICogU0FSTU9ERTBfSU5UTU9ERV9SRUFEQ0xFQVIpCiAJCSAgfCAoMSAqIFNBUk1PREUwX0NXUkUpCi0JCSAgfCBJU19GUzUwKGRldik/U0FSTU9ERTBfUFJQV1RfRlM1MF81OiAKLQkJICAgICAgICAgICAgICAgICBTQVJNT0RFMF9QUlBXVF9GUzE1NV8zCisJCSAgfCAoSVNfRlM1MChkZXYpID8gU0FSTU9ERTBfUFJQV1RfRlM1MF81OgorCQkJICBTQVJNT0RFMF9QUlBXVF9GUzE1NV8zKQogCQkgIHwgKDEgKiBTQVJNT0RFMF9DQUxTVVBfMSkKLQkJICB8IElTX0ZTNTAgKGRldik/KDAKKwkJICB8IChJU19GUzUwKGRldikgPyAoMAogCQkJCSAgIHwgU0FSTU9ERTBfUlhWQ1NfMzIKIAkJCQkgICB8IFNBUk1PREUwX0FCUlZDU18zMiAKIAkJCQkgICB8IFNBUk1PREUwX1RYVkNTXzMyKToKIAkJICAgICAgICAgICAgICAgICAgKDAKIAkJCQkgICB8IFNBUk1PREUwX1JYVkNTXzFrCiAJCQkJICAgfCBTQVJNT0RFMF9BQlJWQ1NfMWsgCi0JCQkJICAgfCBTQVJNT0RFMF9UWFZDU18xaykpOworCQkJCSAgIHwgU0FSTU9ERTBfVFhWQ1NfMWspKSk7CiAKIAkvKiAxMG1zICogMTAwIGlzIDEgc2Vjb25kLiBUaGF0IHNob3VsZCBiZSBlbm91Z2gsIGFzIEFOMzo5IHNheXMgaXQgdGFrZXMKIAkgICAxbXMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pcGhhc2UuYyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCmluZGV4IGUxYzc2MTEuLjc4Yzk3MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jCisrKyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCkBAIC05NzcsOSArOTc3LDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwQnVmICs9IHNwcmludGYoIHBCdWYsICIuIiApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgc3ByaW50ZiggcEJ1ZiwgIlxuIiApOwotICAgICAgICAvLyBTUHJpbnQocHJudEJ1Zik7Ci0gICAgICAgIHByaW50ayhwcm50QnVmKTsKKyAgICAgICAgcHJpbnRrKCIlc1xuIiwgcHJudEJ1Zik7CiAgICAgICAgIGNvdW50ICs9IGNvbDsKICAgICAgICAgcEJ1ZiA9IHBybnRCdWY7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc29sb3MtYXR0cmxpc3QuYyBiL2RyaXZlcnMvYXRtL3NvbG9zLWF0dHJsaXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhMjgwOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYXRtL3NvbG9zLWF0dHJsaXN0LmMKQEAgLTAsMCArMSw3MCBAQAorU09MT1NfQVRUUl9STyhEcml2ZXJWZXJzaW9uKQorU09MT1NfQVRUUl9STyhBUElWZXJzaW9uKQorU09MT1NfQVRUUl9STyhGaXJtd2FyZVZlcnNpb24pCisvLyBTT0xPU19BVFRSX1JPKERzcFZlcnNpb24pCisvLyBTT0xPU19BVFRSX1JPKENvbW1vbkhhbmRzaGFrZSkKK1NPTE9TX0FUVFJfUk8oQ29ubmVjdGVkKQorU09MT1NfQVRUUl9STyhPcGVyYXRpb25hbE1vZGUpCitTT0xPU19BVFRSX1JPKFN0YXRlKQorU09MT1NfQVRUUl9STyhXYXRjaGRvZykKK1NPTE9TX0FUVFJfUk8oT3BlcmF0aW9uUHJvZ3Jlc3MpCitTT0xPU19BVFRSX1JPKExhc3RGYWlsZWQpCitTT0xPU19BVFRSX1JPKFR4Qml0UmF0ZSkKK1NPTE9TX0FUVFJfUk8oUnhCaXRSYXRlKQorLy8gU09MT1NfQVRUUl9STyhEZWx0QUNUQVRQZHMpCisvLyBTT0xPU19BVFRSX1JPKERlbHRBQ1RBVFB1cykKK1NPTE9TX0FUVFJfUk8oVHhBVFRORFIpCitTT0xPU19BVFRSX1JPKFJ4QVRUTkRSKQorU09MT1NfQVRUUl9STyhBbm5leFR5cGUpCitTT0xPU19BVFRSX1JPKEdlbmVyYWxGYWlsdXJlKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlRHBEbikKK1NPTE9TX0FUVFJfUk8oSW50ZXJsZWF2ZURwVXApCitTT0xPU19BVFRSX1JPKFJTQ29ycmVjdGVkRXJyb3JzRG4pCitTT0xPU19BVFRSX1JPKFJTVW5Db3JyZWN0ZWRFcnJvcnNEbikKK1NPTE9TX0FUVFJfUk8oUlNDb3JyZWN0ZWRFcnJvcnNVcCkKK1NPTE9TX0FUVFJfUk8oUlNVbkNvcnJlY3RlZEVycm9yc1VwKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlUkRuKQorU09MT1NfQVRUUl9STyhJbnRlcmxlYXZlUlVwKQorU09MT1NfQVRUUl9STyhTaG93dGltZVN0YXJ0KQorU09MT1NfQVRUUl9STyhBVFVSVmVuZG9yKQorU09MT1NfQVRUUl9STyhBVFVDQ291bnRyeSkKK1NPTE9TX0FUVFJfUk8oQVRVUkFOU0lSZXYpCitTT0xPU19BVFRSX1JPKEFUVVJBTlNJU1REKQorU09MT1NfQVRUUl9STyhBVFVDQU5TSVJldikKK1NPTE9TX0FUVFJfUk8oQVRVQ0FOU0lJZCkKK1NPTE9TX0FUVFJfUk8oQVRVQ0FOU0lTVEQpCitTT0xPU19BVFRSX1JPKERhdGFCb29zdCkKK1NPTE9TX0FUVFJfUk8oTG9jYWxJVFVDb3VudHJ5Q29kZSkKK1NPTE9TX0FUVFJfUk8oTG9jYWxTRUYpCitTT0xPU19BVFRSX1JPKExvY2FsRW5kTE9TKQorU09MT1NfQVRUUl9STyhMb2NhbFNOUk1hcmdpbikKK1NPTE9TX0FUVFJfUk8oTG9jYWxMaW5lQXR0bikKK1NPTE9TX0FUVFJfUk8oUmF3QXR0bikKK1NPTE9TX0FUVFJfUk8oTG9jYWxUeFBvd2VyKQorU09MT1NfQVRUUl9STyhSZW1vdGVUeFBvd2VyKQorU09MT1NfQVRUUl9STyhSZW1vdGVTRUYpCitTT0xPU19BVFRSX1JPKFJlbW90ZUxPUykKK1NPTE9TX0FUVFJfUk8oUmVtb3RlTGluZUF0dG4pCitTT0xPU19BVFRSX1JPKFJlbW90ZVNOUk1hcmdpbikKK1NPTE9TX0FUVFJfUk8oTGluZVVwQ291bnQpCitTT0xPU19BVFRSX1JPKFNSQUNudCkKK1NPTE9TX0FUVFJfUk8oU1JBQ250VXApCitTT0xPU19BVFRSX1JPKFByb2ZpbGVTdGF0dXMpCitTT0xPU19BVFRSX1JXKEFjdGlvbikKK1NPTE9TX0FUVFJfUlcoQWN0aXZhdGVMaW5lKQorU09MT1NfQVRUUl9STyhMaW5lU3RhdHVzKQorU09MT1NfQVRUUl9SVyhIb3N0Q29udHJvbCkKK1NPTE9TX0FUVFJfUlcoQXV0b1N0YXJ0KQorU09MT1NfQVRUUl9SVyhGYWlsc2FmZSkKK1NPTE9TX0FUVFJfUlcoU2hvd3RpbWVMZWQpCitTT0xPU19BVFRSX1JXKFJldHJhaW4pCitTT0xPU19BVFRSX1JXKERlZmF1bHRzKQorU09MT1NfQVRUUl9SVyhMaW5lTW9kZSkKK1NPTE9TX0FUVFJfUlcoUHJvZmlsZSkKK1NPTE9TX0FUVFJfUlcoRGV0ZWN0Tm9pc2UpCitTT0xPU19BVFRSX1JPKFN1cHBvcnRlZEFubmV4ZXMpCitTT0xPU19BVFRSX1JPKFN0YXR1cykKK1NPTE9TX0FUVFJfUk8oVG90YWxTdGFydCkKK1NPTE9TX0FUVFJfUk8oUmVjZW50U2hvd3RpbWVTdGFydCkKK1NPTE9TX0FUVFJfUk8oVG90YWxSeEJsb2NrcykKK1NPTE9TX0FUVFJfUk8oVG90YWxUeEJsb2NrcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKaW5kZXggODlkN2E2ZS4uYmUyMDQzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKKysrIGIvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMKQEAgLTksNiArOSw3IEBACiAgKgogICogQXV0aG9yczogTmF0aGFuIFdpbGxpYW1zIDxuYXRoYW5AdHJhdmVyc2UuY29tLmF1PgogICogICAgICAgICAgRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgorICogICAgICAgICAgVHJla2VyIENoZW4gPHRyZWtlckB4cmlvLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzYsOCArMzcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvc3dhYi5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjAuMDQiCisjZGVmaW5lIFZFUlNJT04gIjAuMDciCiAjZGVmaW5lIFBUQUcgInNvbG9zLXBjaSIKIAogI2RlZmluZSBDT05GSUdfUkFNX1NJWkUJMTI4CkBAIC00NSwxNiArNDksMzEgQEAKICNkZWZpbmUgSVJRX0VOX0FERFIJMHg3OAogI2RlZmluZSBGUEdBX1ZFUgkweDc0CiAjZGVmaW5lIElSUV9DTEVBUgkweDcwCi0jZGVmaW5lIEJVR19GTEFHCTB4NkMKKyNkZWZpbmUgV1JJVEVfRkxBU0gJMHg2QworI2RlZmluZSBQT1JUUwkJMHg2OAorI2RlZmluZSBGTEFTSF9CTE9DSwkweDY0CisjZGVmaW5lIEZMQVNIX0JVU1kJMHg2MAorI2RlZmluZSBGUEdBX01PREUJMHg1QworI2RlZmluZSBGTEFTSF9NT0RFCTB4NTgKKyNkZWZpbmUgVFhfRE1BX0FERFIocG9ydCkJKDB4NDAgKyAoNCAqIChwb3J0KSkpCisjZGVmaW5lIFJYX0RNQV9BRERSKHBvcnQpCSgweDMwICsgKDQgKiAocG9ydCkpKQogCiAjZGVmaW5lIERBVEFfUkFNX1NJWkUJMzI3NjgKICNkZWZpbmUgQlVGX1NJWkUJNDA5NgorI2RlZmluZSBGUEdBX1BBR0UJNTI4IC8qIEZQR0EgZmxhc2ggcGFnZSBzaXplKi8KKyNkZWZpbmUgU09MT1NfUEFHRQk1MTIgLyogU29sb3MgZmxhc2ggcGFnZSBzaXplKi8KKyNkZWZpbmUgRlBHQV9CTE9DSwkoRlBHQV9QQUdFICogOCkgLyogRlBHQSBmbGFzaCBibG9jayBzaXplKi8KKyNkZWZpbmUgU09MT1NfQkxPQ0sJKFNPTE9TX1BBR0UgKiA4KSAvKiBTb2xvcyBmbGFzaCBibG9jayBzaXplKi8KIAogI2RlZmluZSBSWF9CVUYoY2FyZCwgbnIpICgoY2FyZC0+YnVmZmVycykgKyAobnIpKkJVRl9TSVpFKjIpCiAjZGVmaW5lIFRYX0JVRihjYXJkLCBucikgKChjYXJkLT5idWZmZXJzKSArIChucikqQlVGX1NJWkUqMiArIEJVRl9TSVpFKQogCi1zdGF0aWMgaW50IGRlYnVnID0gMDsKKyNkZWZpbmUgUlhfRE1BX1NJWkUJMjA0OAorCitzdGF0aWMgaW50IHJlc2V0ID0gMDsKIHN0YXRpYyBpbnQgYXRtZGVidWcgPSAwOworc3RhdGljIGludCBmaXJtd2FyZV91cGdyYWRlID0gMDsKK3N0YXRpYyBpbnQgZnBnYV91cGdyYWRlID0gMDsKIAogc3RydWN0IHBrdF9oZHIgewogCV9fbGUxNiBzaXplOwpAQCAtNjMsMjMgKzgyLDQ4IEBACiAJX19sZTE2IHR5cGU7CiB9OwogCitzdHJ1Y3Qgc29sb3Nfc2tiX2NiIHsKKwlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOworCXVpbnQzMl90IGRtYV9hZGRyOworfTsKKworCisjZGVmaW5lIFNLQl9DQihza2IpCQkoKHN0cnVjdCBzb2xvc19za2JfY2IgKilza2ItPmNiKQorCiAjZGVmaW5lIFBLVF9EQVRBCTAKICNkZWZpbmUgUEtUX0NPTU1BTkQJMQogI2RlZmluZSBQS1RfUE9QRU4JMwogI2RlZmluZSBQS1RfUENMT1NFCTQKKyNkZWZpbmUgUEtUX1NUQVRVUwk1CiAKIHN0cnVjdCBzb2xvc19jYXJkIHsKIAl2b2lkIF9faW9tZW0gKmNvbmZpZ19yZWdzOwogCXZvaWQgX19pb21lbSAqYnVmZmVyczsKIAlpbnQgbnJfcG9ydHM7CisJaW50IHR4X21hc2s7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgYXRtX2RldiAqYXRtZGV2WzRdOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0bGV0OwogCXNwaW5sb2NrX3QgdHhfbG9jazsKIAlzcGlubG9ja190IHR4X3F1ZXVlX2xvY2s7CiAJc3BpbmxvY2tfdCBjbGlfcXVldWVfbG9jazsKKwlzcGlubG9ja190IHBhcmFtX3F1ZXVlX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBwYXJhbV9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlWzRdOwogCXN0cnVjdCBza19idWZmX2hlYWQgY2xpX3F1ZXVlWzRdOworCXN0cnVjdCBza19idWZmICp0eF9za2JbNF07CisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYls0XTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBwYXJhbV93cTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBmd193cTsKKwlpbnQgdXNpbmdfZG1hOworfTsKKworCitzdHJ1Y3Qgc29sb3NfcGFyYW0geworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlwaWRfdCBwaWQ7CisJaW50IHBvcnQ7CisJc3RydWN0IHNrX2J1ZmYgKnJlc3BvbnNlOwogfTsKIAogI2RlZmluZSBTT0xPU19DSEFOKGF0bWRldikgKChpbnQpKHVuc2lnbmVkIGxvbmcpKGF0bWRldiktPnBoeV9kYXRhKQpAQCAtODgsMTkgKzEzMiwyMiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2xvcyBQQ0kgZHJpdmVyIik7CiBNT0RVTEVfVkVSU0lPTihWRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgTG9vcGJhY2siKTsKK01PRFVMRV9QQVJNX0RFU0MocmVzZXQsICJSZXNldCBTb2xvcyBjaGlwcyBvbiBzdGFydHVwIik7CiBNT0RVTEVfUEFSTV9ERVNDKGF0bWRlYnVnLCAiUHJpbnQgQVRNIGRhdGEiKTsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKLW1vZHVsZV9wYXJhbShhdG1kZWJ1ZywgaW50LCAwNDQ0KTsKLQotc3RhdGljIGludCBvcGVuczsKK01PRFVMRV9QQVJNX0RFU0MoZmlybXdhcmVfdXBncmFkZSwgIkluaXRpYXRlIFNvbG9zIGZpcm13YXJlIHVwZ3JhZGUiKTsKK01PRFVMRV9QQVJNX0RFU0MoZnBnYV91cGdyYWRlLCAiSW5pdGlhdGUgRlBHQSB1cGdyYWRlIik7Cittb2R1bGVfcGFyYW0ocmVzZXQsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW0oYXRtZGVidWcsIGludCwgMDY0NCk7Cittb2R1bGVfcGFyYW0oZmlybXdhcmVfdXBncmFkZSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShmcGdhX3VwZ3JhZGUsIGludCwgMDQ0NCk7CiAKIHN0YXRpYyB2b2lkIGZwZ2FfcXVldWUoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICAgc3RydWN0IGF0bV92Y2MgKnZjYyk7Ci1zdGF0aWMgaW50IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKik7CitzdGF0aWMgdWludDMyX3QgZnBnYV90eChzdHJ1Y3Qgc29sb3NfY2FyZCAqKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBzb2xvc19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBzdHJ1Y3QgYXRtX3ZjYyogZmluZF92Y2Moc3RydWN0IGF0bV9kZXYgKmRldiwgc2hvcnQgdnBpLCBpbnQgdmNpKTsKIHN0YXRpYyBpbnQgbGlzdF92Y2NzKGludCB2Y2kpOworc3RhdGljIHZvaWQgcmVsZWFzZV92Y2NzKHN0cnVjdCBhdG1fZGV2ICpkZXYpOwogc3RhdGljIGludCBhdG1faW5pdChzdHJ1Y3Qgc29sb3NfY2FyZCAqKTsKIHN0YXRpYyB2b2lkIGF0bV9yZW1vdmUoc3RydWN0IHNvbG9zX2NhcmQgKik7CiBzdGF0aWMgaW50IHNlbmRfY29tbWFuZChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCwgaW50IGRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CkBAIC0xMTUsNiArMTYyLDI2NCBAQAogICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IHNvbG9zX3BhcmFtX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCit7CisJc3RydWN0IGF0bV9kZXYgKmF0bWRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBhdG1fZGV2LCBjbGFzc19kZXYpOworCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gYXRtZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3Qgc29sb3NfcGFyYW0gcHJtOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwlpbnQgYnVmbGVuOworCisJYnVmbGVuID0gc3RybGVuKGF0dHItPmF0dHIubmFtZSkgKyAxMDsKKworCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhlYWRlcikgKyBidWZsZW4sIEdGUF9LRVJORUwpOworCWlmICghc2tiKSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIHNvbG9zX3BhcmFtX3Nob3coKVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CisKKwlidWZsZW4gPSBzbnByaW50Zigodm9pZCAqKSZoZWFkZXJbMV0sIGJ1ZmxlbiAtIDEsCisJCQkgICJMJTA1ZFxuJXNcbiIsIGN1cnJlbnQtPnBpZCwgYXR0ci0+YXR0ci5uYW1lKTsKKwlza2JfcHV0KHNrYiwgYnVmbGVuKTsKKworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zmxlbik7CisJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9DT01NQU5EKTsKKworCXBybS5waWQgPSBjdXJyZW50LT5waWQ7CisJcHJtLnJlc3BvbnNlID0gTlVMTDsKKwlwcm0ucG9ydCA9IFNPTE9TX0NIQU4oYXRtZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfYWRkKCZwcm0ubGlzdCwgJmNhcmQtPnBhcmFtX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJZnBnYV9xdWV1ZShjYXJkLCBwcm0ucG9ydCwgc2tiLCBOVUxMKTsKKworCXdhaXRfZXZlbnRfdGltZW91dChjYXJkLT5wYXJhbV93cSwgcHJtLnJlc3BvbnNlLCA1ICogSFopOworCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisJbGlzdF9kZWwoJnBybS5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJaWYgKCFwcm0ucmVzcG9uc2UpCisJCXJldHVybiAtRUlPOworCisJYnVmbGVuID0gcHJtLnJlc3BvbnNlLT5sZW47CisJbWVtY3B5KGJ1ZiwgcHJtLnJlc3BvbnNlLT5kYXRhLCBidWZsZW4pOworCWtmcmVlX3NrYihwcm0ucmVzcG9uc2UpOworCisJcmV0dXJuIGJ1ZmxlbjsKK30KKworc3RhdGljIHNzaXplX3Qgc29sb3NfcGFyYW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGF0bV9kZXYgKmF0bWRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBhdG1fZGV2LCBjbGFzc19kZXYpOworCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gYXRtZGV2LT5kZXZfZGF0YTsKKwlzdHJ1Y3Qgc29sb3NfcGFyYW0gcHJtOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwlpbnQgYnVmbGVuOworCXNzaXplX3QgcmV0OworCisJYnVmbGVuID0gc3RybGVuKGF0dHItPmF0dHIubmFtZSkgKyAxMSArIGNvdW50OworCisJc2tiID0gYWxsb2Nfc2tiKHNpemVvZigqaGVhZGVyKSArIGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpIHsKKwkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgaW4gc29sb3NfcGFyYW1fc3RvcmUoKVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CisKKwlidWZsZW4gPSBzbnByaW50Zigodm9pZCAqKSZoZWFkZXJbMV0sIGJ1ZmxlbiAtIDEsCisJCQkgICJMJTA1ZFxuJXNcbiVzXG4iLCBjdXJyZW50LT5waWQsIGF0dHItPmF0dHIubmFtZSwgYnVmKTsKKworCXNrYl9wdXQoc2tiLCBidWZsZW4pOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zmxlbik7CisJaGVhZGVyLT52cGkgPSBjcHVfdG9fbGUxNigwKTsKKwloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9DT01NQU5EKTsKKworCXBybS5waWQgPSBjdXJyZW50LT5waWQ7CisJcHJtLnJlc3BvbnNlID0gTlVMTDsKKwlwcm0ucG9ydCA9IFNPTE9TX0NIQU4oYXRtZGV2KTsKKworCXNwaW5fbG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCWxpc3RfYWRkKCZwcm0ubGlzdCwgJmNhcmQtPnBhcmFtX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJZnBnYV9xdWV1ZShjYXJkLCBwcm0ucG9ydCwgc2tiLCBOVUxMKTsKKworCXdhaXRfZXZlbnRfdGltZW91dChjYXJkLT5wYXJhbV93cSwgcHJtLnJlc3BvbnNlLCA1ICogSFopOworCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jayk7CisJbGlzdF9kZWwoJnBybS5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCisJc2tiID0gcHJtLnJlc3BvbnNlOworCisJaWYgKCFza2IpCisJCXJldHVybiAtRUlPOworCisJYnVmbGVuID0gc2tiLT5sZW47CisKKwkvKiBTb21ldGltZXMgaXQgaGFzIGEgbmV3bGluZSwgc29tZXRpbWVzIGl0IGRvZXNuJ3QuICovCisJaWYgKHNrYi0+ZGF0YVtidWZsZW4gLSAxXSA9PSAnXG4nKQorCQlidWZsZW4tLTsKKworCWlmIChidWZsZW4gPT0gMiAmJiAhc3RybmNtcChza2ItPmRhdGEsICJPSyIsIDIpKQorCQlyZXQgPSBjb3VudDsKKwllbHNlIGlmIChidWZsZW4gPT0gNSAmJiAhc3RybmNtcChza2ItPmRhdGEsICJFUlJPUiIsIDUpKQorCQlyZXQgPSAtRUlPOworCWVsc2UgeworCQkvKiBXZSBrbm93IHdlIGhhdmUgZW5vdWdoIHNwYWNlIGFsbG9jYXRlZCBmb3IgdGhpczsgd2UgYWxsb2NhdGVkIAorCQkgICBpdCBvdXJzZWx2ZXMgKi8KKwkJc2tiLT5kYXRhW2J1Zmxlbl0gPSAwOworCQorCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJVbmV4cGVjdGVkIHBhcmFtZXRlciByZXNwb25zZTogJyVzJ1xuIiwKKwkJCSBza2ItPmRhdGEpOworCQlyZXQgPSAtRUlPOworCX0KKwlrZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjaGFyICpuZXh0X3N0cmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBpID0gMDsKKwljaGFyICp0aGlzID0gc2tiLT5kYXRhOworCQorCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbjsgaSsrKSB7CisJCWlmICh0aGlzW2ldID09ICdcbicpIHsKKwkJCXRoaXNbaV0gPSAwOworCQkJc2tiX3B1bGwoc2tiLCBpICsgMSk7CisJCQlyZXR1cm4gdGhpczsKKwkJfQorCQlpZiAoIWlzcHJpbnQodGhpc1tpXSkpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBTdGF0dXMgcGFja2V0IGhhcyBmaWVsZHMgc2VwYXJhdGVkIGJ5IFxuLCBzdGFydGluZyB3aXRoIGEgdmVyc2lvbiBudW1iZXIKKyAqIGZvciB0aGUgaW5mb3JtYXRpb24gdGhlcmVpbi4gRmllbGRzIGFyZS4uLi4KKyAqCisgKiAgICAgcGFja2V0IHZlcnNpb24KKyAqICAgICBSeEJpdFJhdGUJKHZlcnNpb24gPj0gMSkKKyAqICAgICBUeEJpdFJhdGUJKHZlcnNpb24gPj0gMSkKKyAqICAgICBTdGF0ZQkJKHZlcnNpb24gPj0gMSkKKyAqICAgICBMb2NhbFNOUk1hcmdpbgkodmVyc2lvbiA+PSAxKQorICogICAgIExvY2FsTGluZUF0dG4JKHZlcnNpb24gPj0gMSkKKyAqLyAgICAgICAKK3N0YXRpYyBpbnQgcHJvY2Vzc19zdGF0dXMoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNoYXIgKnN0ciwgKmVuZCwgKnN0YXRlX3N0ciwgKnNuciwgKmF0dG47CisJaW50IHZlciwgcmF0ZV91cCwgcmF0ZV9kb3duOworCisJaWYgKCFjYXJkLT5hdG1kZXZbcG9ydF0pCisJCXJldHVybiAtRU5PREVWOworCisJc3RyID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU87CisKKwl2ZXIgPSBzaW1wbGVfc3RydG9sKHN0ciwgTlVMTCwgMTApOworCWlmICh2ZXIgPCAxKSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlVuZXhwZWN0ZWQgc3RhdHVzIGludGVycnVwdCB2ZXJzaW9uICVkXG4iLAorCQkJIHZlcik7CisJCXJldHVybiAtRUlPOworCX0KKworCXN0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCWlmICghc3RyY21wKHN0ciwgIkVSUk9SIikpIHsKKwkJZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJTdGF0dXMgcGFja2V0IGluZGljYXRlZCBTb2xvcyBlcnJvciBvbiBwb3J0ICVkIChzdGFydGluZyB1cD8pXG4iLAorCQkJIHBvcnQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyYXRlX2Rvd24gPSBzaW1wbGVfc3RydG9sKHN0ciwgJmVuZCwgMTApOworCWlmICgqZW5kKQorCQlyZXR1cm4gLUVJTzsKKworCXN0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdHIpCisJCXJldHVybiAtRUlPOworCXJhdGVfdXAgPSBzaW1wbGVfc3RydG9sKHN0ciwgJmVuZCwgMTApOworCWlmICgqZW5kKQorCQlyZXR1cm4gLUVJTzsKKworCXN0YXRlX3N0ciA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFzdGF0ZV9zdHIpCisJCXJldHVybiAtRUlPOworCisJLyogQW55dGhpbmcgYnV0ICdTaG93dGltZScgaXMgZG93biAqLworCWlmIChzdHJjbXAoc3RhdGVfc3RyLCAiU2hvd3RpbWUiKSkgeworCQljYXJkLT5hdG1kZXZbcG9ydF0tPnNpZ25hbCA9IEFUTV9QSFlfU0lHX0xPU1Q7CisJCXJlbGVhc2VfdmNjcyhjYXJkLT5hdG1kZXZbcG9ydF0pOworCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJQb3J0ICVkOiAlc1xuIiwgcG9ydCwgc3RhdGVfc3RyKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc25yID0gbmV4dF9zdHJpbmcoc2tiKTsKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU87CisJYXR0biA9IG5leHRfc3RyaW5nKHNrYik7CisJaWYgKCFhdHRuKQorCQlyZXR1cm4gLUVJTzsKKworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlBvcnQgJWQ6ICVzIEAlZC8lZCBrYi9zJXMlcyVzJXNcbiIsCisJCSBwb3J0LCBzdGF0ZV9zdHIsIHJhdGVfZG93bi8xMDAwLCByYXRlX3VwLzEwMDAsCisJCSBzbnJbMF0/IiwgU05SICI6IiIsIHNuciwgYXR0blswXT8iLCBBdHRuICI6IiIsIGF0dG4pOworCQorCWNhcmQtPmF0bWRldltwb3J0XS0+bGlua19yYXRlID0gcmF0ZV9kb3duIC8gNDI0OworCWNhcmQtPmF0bWRldltwb3J0XS0+c2lnbmFsID0gQVRNX1BIWV9TSUdfRk9VTkQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2NvbW1hbmQoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQsIGludCBwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzb2xvc19wYXJhbSAqcHJtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGNtZHBpZDsKKwlpbnQgZm91bmQgPSAwOworCisJaWYgKHNrYi0+bGVuIDwgNykKKwkJcmV0dXJuIDA7CisKKwlpZiAoc2tiLT5kYXRhWzBdICE9ICdMJyAgICB8fCAhaXNkaWdpdChza2ItPmRhdGFbMV0pIHx8CisJICAgICFpc2RpZ2l0KHNrYi0+ZGF0YVsyXSkgfHwgIWlzZGlnaXQoc2tiLT5kYXRhWzNdKSB8fAorCSAgICAhaXNkaWdpdChza2ItPmRhdGFbNF0pIHx8ICFpc2RpZ2l0KHNrYi0+ZGF0YVs1XSkgfHwKKwkgICAgc2tiLT5kYXRhWzZdICE9ICdcbicpCisJCXJldHVybiAwOworCisJY21kcGlkID0gc2ltcGxlX3N0cnRvbCgmc2tiLT5kYXRhWzFdLCBOVUxMLCAxMCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+cGFyYW1fcXVldWVfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHJtLCAmY2FyZC0+cGFyYW1fcXVldWUsIGxpc3QpIHsKKwkJaWYgKHBybS0+cG9ydCA9PSBwb3J0ICYmIHBybS0+cGlkID09IGNtZHBpZCkgeworCQkJcHJtLT5yZXNwb25zZSA9IHNrYjsKKwkJCXNrYl9wdWxsKHNrYiwgNyk7CisJCQl3YWtlX3VwKCZjYXJkLT5wYXJhbV93cSk7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5wYXJhbV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZvdW5kOworfQorCiBzdGF0aWMgc3NpemVfdCBjb25zb2xlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICBjaGFyICpidWYpCiB7CkBAIC0xNDAsOCArNDQ1LDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CiAKLS8vCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAic2l6ZTogJWRcbiIsIHNpemUpOwotCiAJaWYgKHNpemUgPiAoQlVGX1NJWkUgLSBzaXplb2YoKmhlYWRlcikpKSB7CiAJCWRldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAiQ29tbWFuZCBpcyB0b28gYmlnLiAgRHJvcHBpbmcgcmVxdWVzdFxuIik7CiAJCXJldHVybiAwOwpAQCAtMTgwLDgyICs0ODMsMTgxIEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihjb25zb2xlLCAwNjQ0LCBjb25zb2xlX3Nob3csIGNvbnNvbGVfc3RvcmUpOwogCisKKyNkZWZpbmUgU09MT1NfQVRUUl9STyh4KSBzdGF0aWMgREVWSUNFX0FUVFIoeCwgMDQ0NCwgc29sb3NfcGFyYW1fc2hvdywgTlVMTCk7CisjZGVmaW5lIFNPTE9TX0FUVFJfUlcoeCkgc3RhdGljIERFVklDRV9BVFRSKHgsIDA2NDQsIHNvbG9zX3BhcmFtX3Nob3csIHNvbG9zX3BhcmFtX3N0b3JlKTsKKworI2luY2x1ZGUgInNvbG9zLWF0dHJsaXN0LmMiCisKKyN1bmRlZiBTT0xPU19BVFRSX1JPCisjdW5kZWYgU09MT1NfQVRUUl9SVworCisjZGVmaW5lIFNPTE9TX0FUVFJfUk8oeCkgJmRldl9hdHRyXyMjeC5hdHRyLAorI2RlZmluZSBTT0xPU19BVFRSX1JXKHgpICZkZXZfYXR0cl8jI3guYXR0ciwKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNvbG9zX2F0dHJzW10gPSB7CisjaW5jbHVkZSAic29sb3MtYXR0cmxpc3QuYyIKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzb2xvc19hdHRyX2dyb3VwID0geworCS5hdHRycyA9IHNvbG9zX2F0dHJzLAorCS5uYW1lID0gInBhcmFtZXRlcnMiLAorfTsKKworc3RhdGljIGludCBmbGFzaF91cGdyYWRlKHN0cnVjdCBzb2xvc19jYXJkICpjYXJkLCBpbnQgY2hpcCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IGNoYXIgKmZ3X25hbWU7CisJdWludDMyX3QgZGF0YTMyID0gMDsKKwlpbnQgYmxvY2tzaXplID0gMDsKKwlpbnQgbnVtYmxvY2tzID0gMDsKKwlpbnQgb2Zmc2V0OworCisJaWYgKGNoaXAgPT0gMCkgeworCQlmd19uYW1lID0gInNvbG9zLUZQR0EuYmluIjsKKwkJYmxvY2tzaXplID0gRlBHQV9CTE9DSzsKKwl9IGVsc2UgeworCQlmd19uYW1lID0gInNvbG9zLUZpcm13YXJlLmJpbiI7CisJCWJsb2Nrc2l6ZSA9IFNPTE9TX0JMT0NLOworCX0KKworCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJmNhcmQtPmRldi0+ZGV2KSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJGbGFzaCB1cGdyYWRlIHN0YXJ0aW5nXG4iKTsKKworCW51bWJsb2NrcyA9IGZ3LT5zaXplIC8gYmxvY2tzaXplOworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIkZpcm13YXJlIHNpemU6ICV6ZFxuIiwgZnctPnNpemUpOworCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIk51bWJlciBvZiBibG9ja3M6ICVkXG4iLCBudW1ibG9ja3MpOworCQorCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIkNoYW5naW5nIEZQR0EgdG8gVXBkYXRlIG1vZGVcbiIpOworCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKworCS8qIFNldCBtb2RlIHRvIENoaXAgRXJhc2UgKi8KKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJTZXQgRlBHQSBGbGFzaCBtb2RlIHRvICVzIENoaXAgRXJhc2VcbiIsCisJCSBjaGlwPyJTb2xvcyI6IkZQR0EiKTsKKwlpb3dyaXRlMzIoKGNoaXAgKiAyKSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9NT0RFKTsKKworCisJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgV1JJVEVfRkxBU0gpOworCXdhaXRfZXZlbnQoY2FyZC0+Zndfd3EsICFpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX0JVU1kpKTsKKworCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgZnctPnNpemU7IG9mZnNldCArPSBibG9ja3NpemUpIHsKKwkJaW50IGk7CisKKwkJLyogQ2xlYXIgd3JpdGUgZmxhZyAqLworCQlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisKKwkJLyogU2V0IG1vZGUgdG8gQmxvY2sgV3JpdGUgKi8KKwkJLyogZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiU2V0IEZQR0EgRmxhc2ggbW9kZSB0byBCbG9jayBXcml0ZVxuIik7ICovCisJCWlvd3JpdGUzMigoKGNoaXAgKiAyKSArIDEpLCBjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX01PREUpOworCisJCS8qIENvcHkgYmxvY2sgdG8gYnVmZmVyLCBzd2FwcGluZyBlYWNoIDE2IGJpdHMgKi8KKwkJZm9yKGkgPSAwOyBpIDwgYmxvY2tzaXplOyBpICs9IDQpIHsKKwkJCXVpbnQzMl90IHdvcmQgPSBzd2FoYjMycCgodWludDMyX3QgKikoZnctPmRhdGEgKyBvZmZzZXQgKyBpKSk7CisJCQlpb3dyaXRlMzIod29yZCwgUlhfQlVGKGNhcmQsIDMpICsgaSk7CisJCX0KKworCQkvKiBTcGVjaWZ5IGJsb2NrIG51bWJlciBhbmQgdGhlbiB0cmlnZ2VyIGZsYXNoIHdyaXRlICovCisJCWlvd3JpdGUzMihvZmZzZXQgLyBibG9ja3NpemUsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBU0hfQkxPQ0spOworCQlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisJCXdhaXRfZXZlbnQoY2FyZC0+Zndfd3EsICFpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQVNIX0JVU1kpKTsKKwl9CisKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBXUklURV9GTEFTSCk7CisJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFTSF9NT0RFKTsKKwlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJSZXR1cm5pbmcgRlBHQSB0byBEYXRhIG1vZGVcbiIpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc29sb3NfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCA9IGRldl9pZDsKIAlpbnQgaGFuZGxlZCA9IDE7CiAKLQkvL0FDSyBJUlEKIAlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfQ0xFQVIpOwotCS8vRGlzYWJsZSBJUlFzIGZyb20gRlBHQQotCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAotCS8qIElmIHdlIG9ubHkgZG8gaXQgd2hlbiB0aGUgZGV2aWNlIGlzIG9wZW4sIHdlIGxvc2UgY29uc29sZQotCSAgIG1lc3NhZ2VzICovCi0JaWYgKDEgfHwgb3BlbnMpCisJLyogSWYgd2UncmUgdXAgYW5kIHJ1bm5pbmcsIGp1c3Qga2ljayB0aGUgdGFza2xldCB0byBwcm9jZXNzIFRYL1JYICovCisJaWYgKGNhcmQtPmF0bWRldlswXSkKIAkJdGFza2xldF9zY2hlZHVsZSgmY2FyZC0+dGxldCk7CisJZWxzZQorCQl3YWtlX3VwKCZjYXJkLT5md193cSk7CiAKLQkvL0VuYWJsZSBJUlFzIGZyb20gRlBHQQotCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAogdm9pZCBzb2xvc19iaCh1bnNpZ25lZCBsb25nIGNhcmRfYXJnKQogewogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gKHZvaWQgKiljYXJkX2FyZzsKLQlpbnQgcG9ydDsKIAl1aW50MzJfdCBjYXJkX2ZsYWdzOwotCXVpbnQzMl90IHR4X21hc2s7CiAJdWludDMyX3QgcnhfZG9uZSA9IDA7CisJaW50IHBvcnQ7CiAKLQljYXJkX2ZsYWdzID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKLQotCS8qIFRoZSBUWCBiaXRzIGFyZSBzZXQgaWYgdGhlIGNoYW5uZWwgaXMgYnVzeTsgY2xlYXIgaWYgbm90LiBXZSB3YW50IHRvCi0JICAgaW52b2tlIGZwZ2FfdHgoKSB1bmxlc3MgX2FsbF8gdGhlIGJpdHMgZm9yIGFjdGl2ZSBjaGFubmVscyBhcmUgc2V0ICovCi0JdHhfbWFzayA9ICgxIDw8IGNhcmQtPm5yX3BvcnRzKSAtIDE7Ci0JaWYgKChjYXJkX2ZsYWdzICYgdHhfbWFzaykgIT0gdHhfbWFzaykKLQkJZnBnYV90eChjYXJkKTsKKwkvKgorCSAqIFNpbmNlIGZwZ2FfdHgoKSBpcyBnb2luZyB0byBuZWVkIHRvIHJlYWQgdGhlIGZsYWdzIHVuZGVyIGl0cyBsb2NrLAorCSAqIGl0IGNhbiByZXR1cm4gdGhlbSB0byB1cyBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gaGl0IFBDSSBNTUlPCisJICogYWdhaW4gZm9yIHRoZSBzYW1lIGluZm9ybWF0aW9uCisJICovCisJY2FyZF9mbGFncyA9IGZwZ2FfdHgoY2FyZCk7CiAKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgY2FyZC0+bnJfcG9ydHM7IHBvcnQrKykgewogCQlpZiAoY2FyZF9mbGFncyAmICgweDEwIDw8IHBvcnQpKSB7Ci0JCQlzdHJ1Y3QgcGt0X2hkciBoZWFkZXI7CisJCQlzdHJ1Y3QgcGt0X2hkciBfaGRyLCAqaGVhZGVyOwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAkJCXN0cnVjdCBhdG1fdmNjICp2Y2M7CiAJCQlpbnQgc2l6ZTsKIAotCQkJcnhfZG9uZSB8PSAweDEwIDw8IHBvcnQ7CisJCQlpZiAoY2FyZC0+dXNpbmdfZG1hKSB7CisJCQkJc2tiID0gY2FyZC0+cnhfc2tiW3BvcnRdOworCQkJCWNhcmQtPnJ4X3NrYltwb3J0XSA9IE5VTEw7CiAKLQkJCW1lbWNweV9mcm9taW8oJmhlYWRlciwgUlhfQlVGKGNhcmQsIHBvcnQpLCBzaXplb2YoaGVhZGVyKSk7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBSWF9ETUFfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAotCQkJc2l6ZSA9IGxlMTZfdG9fY3B1KGhlYWRlci5zaXplKTsKKwkJCQloZWFkZXIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJCQlzaXplID0gbGUxNl90b19jcHUoaGVhZGVyLT5zaXplKTsKKwkJCQlza2JfcHV0KHNrYiwgc2l6ZSArIHNpemVvZigqaGVhZGVyKSk7CisJCQkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCQkJfSBlbHNlIHsKKwkJCQloZWFkZXIgPSAmX2hkcjsKIAotCQkJc2tiID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCFza2IpIHsKLQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBmb3IgUlhcbiIpOwotCQkJCWNvbnRpbnVlOworCQkJCXJ4X2RvbmUgfD0gMHgxMCA8PCBwb3J0OworCisJCQkJbWVtY3B5X2Zyb21pbyhoZWFkZXIsIFJYX0JVRihjYXJkLCBwb3J0KSwgc2l6ZW9mKCpoZWFkZXIpKTsKKworCQkJCXNpemUgPSBsZTE2X3RvX2NwdShoZWFkZXItPnNpemUpOworCisJCQkJc2tiID0gYWxsb2Nfc2tiKHNpemUgKyAxLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAoIXNrYikgeworCQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCQkJZGV2X3dhcm4oJmNhcmQtPmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHNrX2J1ZmYgZm9yIFJYXG4iKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJbWVtY3B5X2Zyb21pbyhza2JfcHV0KHNrYiwgc2l6ZSksCisJCQkJCSAgICAgIFJYX0JVRihjYXJkLCBwb3J0KSArIHNpemVvZigqaGVhZGVyKSwKKwkJCQkJICAgICAgc2l6ZSk7CiAJCQl9Ci0KLQkJCW1lbWNweV9mcm9taW8oc2tiX3B1dChza2IsIHNpemUpLAotCQkJCSAgICAgIFJYX0JVRihjYXJkLCBwb3J0KSArIHNpemVvZihoZWFkZXIpLAotCQkJCSAgICAgIHNpemUpOwotCiAJCQlpZiAoYXRtZGVidWcpIHsKIAkJCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJSZWNlaXZlZDogZGV2aWNlICVkXG4iLCBwb3J0KTsKIAkJCQlkZXZfaW5mbygmY2FyZC0+ZGV2LT5kZXYsICJzaXplOiAlZCBWUEk6ICVkIFZDSTogJWRcbiIsCi0JCQkJCSBzaXplLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKLQkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpKTsKKwkJCQkJIHNpemUsIGxlMTZfdG9fY3B1KGhlYWRlci0+dnBpKSwKKwkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci0+dmNpKSk7CiAJCQkJcHJpbnRfYnVmZmVyKHNrYik7CiAJCQl9CiAKLQkJCXN3aXRjaCAobGUxNl90b19jcHUoaGVhZGVyLnR5cGUpKSB7CisJCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGhlYWRlci0+dHlwZSkpIHsKIAkJCWNhc2UgUEtUX0RBVEE6Ci0JCQkJdmNjID0gZmluZF92Y2MoY2FyZC0+YXRtZGV2W3BvcnRdLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKLQkJCQkJICAgICAgIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpKTsKKwkJCQl2Y2MgPSBmaW5kX3ZjYyhjYXJkLT5hdG1kZXZbcG9ydF0sIGxlMTZfdG9fY3B1KGhlYWRlci0+dnBpKSwKKwkJCQkJICAgICAgIGxlMTZfdG9fY3B1KGhlYWRlci0+dmNpKSk7CiAJCQkJaWYgKCF2Y2MpIHsKIAkJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlJlY2VpdmVkIHBhY2tldCBmb3IgdW5rbm93biBWQ0kuVlBJICVkLiVkIG9uIHBvcnQgJWRcbiIsCi0JCQkJCQkJIGxlMTZfdG9fY3B1KGhlYWRlci52Y2kpLCBsZTE2X3RvX2NwdShoZWFkZXIudnBpKSwKKwkJCQkJCQkgbGUxNl90b19jcHUoaGVhZGVyLT52Y2kpLCBsZTE2X3RvX2NwdShoZWFkZXItPnZwaSksCiAJCQkJCQkJIHBvcnQpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CkBAIC0yNjQsMTkgKzY2Niw1MCBAQAogCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSBQS1RfU1RBVFVTOgorCQkJCWlmIChwcm9jZXNzX3N0YXR1cyhjYXJkLCBwb3J0LCBza2IpICYmCisJCQkJICAgIG5ldF9yYXRlbGltaXQoKSkgeworCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJCYWQgc3RhdHVzIHBhY2tldCBvZiAlZCBieXRlcyBvbiBwb3J0ICVkOlxuIiwgc2tiLT5sZW4sIHBvcnQpOworCQkJCQlwcmludF9idWZmZXIoc2tiKTsKKwkJCQl9CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQlicmVhazsKKwogCQkJY2FzZSBQS1RfQ09NTUFORDoKIAkJCWRlZmF1bHQ6IC8qIEZJWE1FOiBOb3QgcmVhbGx5LCBzdXJlbHk/ICovCisJCQkJaWYgKHByb2Nlc3NfY29tbWFuZChjYXJkLCBwb3J0LCBza2IpKQorCQkJCQlicmVhazsKIAkJCQlzcGluX2xvY2soJmNhcmQtPmNsaV9xdWV1ZV9sb2NrKTsKIAkJCQlpZiAoc2tiX3F1ZXVlX2xlbigmY2FyZC0+Y2xpX3F1ZXVlW3BvcnRdKSA+IDEwKSB7CiAJCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJEcm9wcGluZyBjb25zb2xlIHJlc3BvbnNlIG9uIHBvcnQgJWRcbiIsCiAJCQkJCQkJIHBvcnQpOworCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCX0gZWxzZQogCQkJCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+Y2xpX3F1ZXVlW3BvcnRdLCBza2IpOwogCQkJCXNwaW5fdW5sb2NrKCZjYXJkLT5jbGlfcXVldWVfbG9jayk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwkJLyogQWxsb2NhdGUgUlggc2ticyBmb3IgYW55IHBvcnRzIHdoaWNoIG5lZWQgdGhlbSAqLworCQlpZiAoY2FyZC0+dXNpbmdfZG1hICYmIGNhcmQtPmF0bWRldltwb3J0XSAmJgorCQkgICAgIWNhcmQtPnJ4X3NrYltwb3J0XSkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihSWF9ETUFfU0laRSwgR0ZQX0FUT01JQyk7CisJCQlpZiAoc2tiKSB7CisJCQkJU0tCX0NCKHNrYiktPmRtYV9hZGRyID0KKwkJCQkJcGNpX21hcF9zaW5nbGUoY2FyZC0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCQkgICAgICAgUlhfRE1BX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJaW93cml0ZTMyKFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJICBjYXJkLT5jb25maWdfcmVncyArIFJYX0RNQV9BRERSKHBvcnQpKTsKKwkJCQljYXJkLT5yeF9za2JbcG9ydF0gPSBza2I7CisJCQl9IGVsc2UgeworCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBSWCBza2IiKTsKKworCQkJCS8qIFdlJ2xsIGhhdmUgdG8gdHJ5IGFnYWluIGxhdGVyICovCisJCQkJdGFza2xldF9zY2hlZHVsZSgmY2FyZC0+dGxldCk7CisJCQl9CisJCX0KIAl9CiAJaWYgKHJ4X2RvbmUpCiAJCWlvd3JpdGUzMihyeF9kb25lLCBjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwpAQCAtMzI2LDcgKzc1OSw3IEBACiAJCQkgICAgICAgdmNjLT52Y2kpOwogCQl9CiAJfSBlbHNlIHsKLQkJZm9yKGk9MDsgaTwzMjsgaSsrKXsKKwkJZm9yKGkgPSAwOyBpIDwgVkNDX0hUQUJMRV9TSVpFOyBpKyspewogCQkJaGVhZCA9ICZ2Y2NfaGFzaFtpXTsKIAkJCXNrX2Zvcl9lYWNoKHMsIG5vZGUsIGhlYWQpIHsKIAkJCQludW1fZm91bmQgKys7CkBAIC0zNDIsNiArNzc1LDI4IEBACiAJcmV0dXJuIG51bV9mb3VuZDsKIH0KIAorc3RhdGljIHZvaWQgcmVsZWFzZV92Y2NzKHN0cnVjdCBhdG1fZGV2ICpkZXYpCit7CisgICAgICAgIGludCBpOworCisgICAgICAgIHdyaXRlX2xvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgVkNDX0hUQUJMRV9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZ2Y2NfaGFzaFtpXTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKnRtcDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29jayAqczsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjOworCisgICAgICAgICAgICAgICAgc2tfZm9yX2VhY2hfc2FmZShzLCBub2RlLCB0bXAsIGhlYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZjYyA9IGF0bV9zayhzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2Y2MtPmRldiA9PSBkZXYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNjX3JlbGVhc2VfYXN5bmModmNjLCAtRVBJUEUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza19kZWxfbm9kZV9pbml0KHMpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3cml0ZV91bmxvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOworfQorCiAKIHN0YXRpYyBpbnQgcG9wZW4oc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKQEAgLTM0OSw2ICs4MDQsMTIgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwa3RfaGRyICpoZWFkZXI7CiAKKwlpZiAodmNjLT5xb3MuYWFsICE9IEFUTV9BQUw1KSB7CisJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIlVuc3VwcG9ydGVkIEFUTSB0eXBlICVkXG4iLAorCQkJIHZjYy0+cW9zLmFhbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXNrYiA9IGFsbG9jX3NrYihzaXplb2YoKmhlYWRlciksIEdGUF9BVE9NSUMpOwogCWlmICghc2tiICYmIG5ldF9yYXRlbGltaXQoKSkgewogCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBpbiBwb3BlbigpXG4iKTsKQEAgLTM1NiwyMiArODE3LDE3IEBACiAJfQogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CiAKLQloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmhlYWRlcikpOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9QT1BFTik7CiAKIAlmcGdhX3F1ZXVlKGNhcmQsIFNPTE9TX0NIQU4odmNjLT5kZXYpLCBza2IsIE5VTEwpOwogCi0vLwlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIk9wZW4gZm9yIHZwaSAlZCBhbmQgdmNpICVkIG9uIGludGVyZmFjZSAlZFxuIiwgdmNjLT52cGksIHZjYy0+dmNpLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSk7Ci0Jc2V0X2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOyAvLyBhY2NlcHQgdGhlIHZwaSAvIHZjaQorCXNldF9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKTsKIAlzZXRfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOwogCWxpc3RfdmNjcygwKTsKIAotCWlmICghb3BlbnMpCi0JCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKLQotCW9wZW5zKys7IC8vY291bnQgb3BlbiBQVkNzCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM4OSwxNyArODQ1LDEzIEBACiAJfQogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CiAKLQloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihzaXplb2YoKmhlYWRlcikpOworCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9QQ0xPU0UpOwogCiAJZnBnYV9xdWV1ZShjYXJkLCBTT0xPU19DSEFOKHZjYy0+ZGV2KSwgc2tiLCBOVUxMKTsKIAotLy8JZGV2X2RiZygmY2FyZC0+ZGV2LT5kZXYsICJDbG9zZSBmb3IgdnBpICVkIGFuZCB2Y2kgJWQgb24gaW50ZXJmYWNlICVkXG4iLCB2Y2MtPnZwaSwgdmNjLT52Y2ksIFNPTE9TX0NIQU4odmNjLT5kZXYpKTsKLQlpZiAoIS0tb3BlbnMpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKLQogCWNsZWFyX2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpOwogCWNsZWFyX2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKTsKIApAQCAtNDM5LDIyICs4OTEsMjYgQEAKIAkJICAgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CiAJaW50IG9sZF9sZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCSoodm9pZCAqKilza2ItPmNiID0gdmNjOworCVNLQl9DQihza2IpLT52Y2MgPSB2Y2M7CiAKLQlzcGluX2xvY2soJmNhcmQtPnR4X3F1ZXVlX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT50eF9xdWV1ZV9sb2NrLCBmbGFncyk7CiAJb2xkX2xlbiA9IHNrYl9xdWV1ZV9sZW4oJmNhcmQtPnR4X3F1ZXVlW3BvcnRdKTsKIAlza2JfcXVldWVfdGFpbCgmY2FyZC0+dHhfcXVldWVbcG9ydF0sIHNrYik7Ci0Jc3Bpbl91bmxvY2soJmNhcmQtPnR4X3F1ZXVlX2xvY2spOworCWlmICghb2xkX2xlbikKKwkJY2FyZC0+dHhfbWFzayB8PSAoMSA8PCBwb3J0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT50eF9xdWV1ZV9sb2NrLCBmbGFncyk7CiAKLQkvKiBJZiBUWCBtaWdodCBuZWVkIHRvIGJlIHN0YXJ0ZWQsIGRvIHNvICovCisJLyogVGhlb3JldGljYWxseSB3ZSBjb3VsZCBqdXN0IHNjaGVkdWxlIHRoZSB0YXNrbGV0IGhlcmUsIGJ1dAorCSAgIHRoYXQgaW50cm9kdWNlcyBsYXRlbmN5IHdlIGRvbid0IHdhbnQgLS0gaXQncyBub3RpY2VhYmxlICovCiAJaWYgKCFvbGRfbGVuKQogCQlmcGdhX3R4KGNhcmQpOwogfQogCi1zdGF0aWMgaW50IGZwZ2FfdHgoc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQpCitzdGF0aWMgdWludDMyX3QgZnBnYV90eChzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZCkKIHsKLQl1aW50MzJfdCB0eF9wZW5kaW5nOworCXVpbnQzMl90IHR4X3BlbmRpbmcsIGNhcmRfZmxhZ3M7CiAJdWludDMyX3QgdHhfc3RhcnRlZCA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwpAQCAtNDYyLDY5ICs5MTgsNzcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPnR4X2xvY2ssIGZsYWdzKTsKKwkKKwljYXJkX2ZsYWdzID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKKwkvKgorCSAqIFRoZSBxdWV1ZSBsb2NrIGlzIHJlcXVpcmVkIGZvciBfd3JpdGluZ18gdG8gdHhfbWFzaywgYnV0IHdlJ3JlCisJICogT0sgdG8gcmVhZCBpdCBoZXJlIHdpdGhvdXQgbG9ja2luZy4gVGhlIG9ubHkgcG90ZW50aWFsIHVwZGF0ZQorCSAqIHRoYXQgd2UgY291bGQgcmFjZSB3aXRoIGlzIGluIGZwZ2FfcXVldWUoKSB3aGVyZSBpdCBzZXRzIGEgYml0CisJICogZm9yIGEgbmV3IHBvcnQuLi4gYnV0IGl0J3MgZ29pbmcgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFnYWluIGlmCisJICogaXQncyBkb2luZyB0aGF0LCBhbnl3YXkuCisJICovCisJdHhfcGVuZGluZyA9IGNhcmQtPnR4X21hc2sgJiB+Y2FyZF9mbGFnczsKIAotCXR4X3BlbmRpbmcgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwotCi0JZGV2X3ZkYmcoJmNhcmQtPmRldi0+ZGV2LCAiVFggRmxhZ3MgYXJlICVYXG4iLCB0eF9wZW5kaW5nKTsKLQotCWZvciAocG9ydCA9IDA7IHBvcnQgPCBjYXJkLT5ucl9wb3J0czsgcG9ydCsrKSB7Ci0JCWlmICghKHR4X3BlbmRpbmcgJiAoMSA8PCBwb3J0KSkpIHsKKwlmb3IgKHBvcnQgPSAwOyB0eF9wZW5kaW5nOyB0eF9wZW5kaW5nID4+PSAxLCBwb3J0KyspIHsKKwkJaWYgKHR4X3BlbmRpbmcgJiAxKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqb2xkc2tiID0gY2FyZC0+dHhfc2tiW3BvcnRdOworCQkJaWYgKG9sZHNrYikKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPmRldiwgU0tCX0NCKG9sZHNrYiktPmRtYV9hZGRyLAorCQkJCQkJIG9sZHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCQkJc3Bpbl9sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAkJCXNrYiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT50eF9xdWV1ZVtwb3J0XSk7CisJCQlpZiAoIXNrYikKKwkJCQljYXJkLT50eF9tYXNrICY9IH4oMSA8PCBwb3J0KTsKIAkJCXNwaW5fdW5sb2NrKCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAotCQkJaWYgKCFza2IpCisJCQlpZiAoc2tiICYmICFjYXJkLT51c2luZ19kbWEpIHsKKwkJCQltZW1jcHlfdG9pbyhUWF9CVUYoY2FyZCwgcG9ydCksIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQkJCXR4X3N0YXJ0ZWQgfD0gMSA8PCBwb3J0OworCQkJCW9sZHNrYiA9IHNrYjsgLyogV2UncmUgZG9uZSB3aXRoIHRoaXMgc2tiIGFscmVhZHkgKi8KKwkJCX0gZWxzZSBpZiAoc2tiICYmIGNhcmQtPnVzaW5nX2RtYSkgeworCQkJCVNLQl9DQihza2IpLT5kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGNhcmQtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkJCQkgICAgICAgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCWlvd3JpdGUzMihTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCisJCQkJCSAgY2FyZC0+Y29uZmlnX3JlZ3MgKyBUWF9ETUFfQUREUihwb3J0KSk7CisJCQl9CisKKwkJCWlmICghb2xkc2tiKQogCQkJCWNvbnRpbnVlOwogCisJCQkvKiBDbGVhbiB1cCBhbmQgZnJlZSBvbGRza2Igbm93IGl0J3MgZ29uZSAqLwogCQkJaWYgKGF0bWRlYnVnKSB7CiAJCQkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiVHJhbnNtaXR0ZWQ6IHBvcnQgJWRcbiIsCiAJCQkJCSBwb3J0KTsKLQkJCQlwcmludF9idWZmZXIoc2tiKTsKKwkJCQlwcmludF9idWZmZXIob2xkc2tiKTsKIAkJCX0KLQkJCW1lbWNweV90b2lvKFRYX0JVRihjYXJkLCBwb3J0KSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKLQkJCXZjYyA9ICoodm9pZCAqKilza2ItPmNiOworCQkJdmNjID0gU0tCX0NCKG9sZHNrYiktPnZjYzsKIAogCQkJaWYgKHZjYykgewogCQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnR4KTsKLQkJCQlzb2xvc19wb3AodmNjLCBza2IpOworCQkJCXNvbG9zX3BvcCh2Y2MsIG9sZHNrYik7CiAJCQl9IGVsc2UKLQkJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQkJCWRldl9rZnJlZV9za2JfaXJxKG9sZHNrYik7CiAKLQkJCXR4X3N0YXJ0ZWQgfD0gMSA8PCBwb3J0OyAvL1NldCBUWCBmdWxsIGZsYWcKIAkJfQogCX0KKwkvKiBGb3Igbm9uLURNQSBUWCwgd3JpdGUgdGhlICdUWCBzdGFydCcgYml0IGZvciBhbGwgZm91ciBwb3J0cyBzaW11bHRhbmVvdXNseSAqLwogCWlmICh0eF9zdGFydGVkKQogCQlpb3dyaXRlMzIodHhfc3RhcnRlZCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPnR4X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gY2FyZF9mbGFnczsKIH0KIAogc3RhdGljIGludCBwc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzb2xvc19jYXJkICpjYXJkID0gdmNjLT5kZXYtPmRldl9kYXRhOwotCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKIAlzdHJ1Y3QgcGt0X2hkciAqaGVhZGVyOworCWludCBwa3RsZW47CiAKLQkvL2Rldl9kYmcoJmNhcmQtPmRldi0+ZGV2LCAicHNlbmQgY2FsbGVkLlxuIik7Ci0JLy9kZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgImRldix2cGksdmNpID0gJWQsJWQsJWRcbiIsU09MT1NfQ0hBTih2Y2MtPmRldiksdmNjLT52cGksdmNjLT52Y2kpOwotCi0JaWYgKGRlYnVnKSB7Ci0JCXNrYjIgPSBhdG1fYWxsb2NfY2hhcmdlKHZjYywgc2tiLT5sZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoc2tiMikgewotCQkJbWVtY3B5KHNrYjItPmRhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwotCQkJc2tiX3B1dChza2IyLCBza2ItPmxlbik7Ci0JCQl2Y2MtPnB1c2godmNjLCBza2IyKTsKLQkJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKLQkJfQotCQlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT50eCk7Ci0JCXNvbG9zX3BvcCh2Y2MsIHNrYik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChza2ItPmxlbiA+IChCVUZfU0laRSAtIHNpemVvZigqaGVhZGVyKSkpIHsKKwlwa3RsZW4gPSBza2ItPmxlbjsKKwlpZiAocGt0bGVuID4gKEJVRl9TSVpFIC0gc2l6ZW9mKCpoZWFkZXIpKSkgewogCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJMZW5ndGggb2YgUERVIGlzIHRvbyBsYXJnZS4gRHJvcHBpbmcgUERVLlxuIik7CiAJCXNvbG9zX3BvcCh2Y2MsIHNrYik7CiAJCXJldHVybiAwOwpAQCAtNTM5LDYgKzEwMDMsNyBAQAogCiAJCXJldCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBleHBhbmRfYnksIDAsIEdGUF9BVE9NSUMpOwogCQlpZiAocmV0KSB7CisJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJwc2tiX2V4cGFuZF9oZWFkIGZhaWxlZC5cbiIpOwogCQkJc29sb3NfcG9wKHZjYywgc2tiKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTU0Niw3ICsxMDExLDggQEAKIAogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKmhlYWRlcikpOwogCi0JaGVhZGVyLT5zaXplID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCS8qIFRoaXMgZG9lcyBfbm90XyBpbmNsdWRlIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgKi8KKwloZWFkZXItPnNpemUgPSBjcHVfdG9fbGUxNihwa3RsZW4pOwogCWhlYWRlci0+dnBpID0gY3B1X3RvX2xlMTYodmNjLT52cGkpOwogCWhlYWRlci0+dmNpID0gY3B1X3RvX2xlMTYodmNjLT52Y2kpOwogCWhlYWRlci0+dHlwZSA9IGNwdV90b19sZTE2KFBLVF9EQVRBKTsKQEAgLTU3MywyMCArMTAzOSwxOSBAQAogCiBzdGF0aWMgaW50IGZwZ2FfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCWludCBlcnIsIGk7CisJaW50IGVycjsKIAl1aW50MTZfdCBmcGdhX3ZlcjsKIAl1aW50OF90IG1ham9yX3ZlciwgbWlub3JfdmVyOwogCXVpbnQzMl90IGRhdGEzMjsKIAlzdHJ1Y3Qgc29sb3NfY2FyZCAqY2FyZDsKIAotCWlmIChkZWJ1ZykKLQkJcmV0dXJuIDA7Ci0KIAljYXJkID0ga3phbGxvYyhzaXplb2YoKmNhcmQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJY2FyZC0+ZGV2ID0gZGV2OworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNhcmQtPmZ3X3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjYXJkLT5wYXJhbV93cSk7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwogCWlmIChlcnIpIHsKQEAgLTU5NCw2ICsxMDU5LDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWVyciA9IHBjaV9zZXRfZG1hX21hc2soZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJaWYgKGVycikgeworCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IDMyLWJpdCBETUEgbWFza1xuIik7CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAic29sb3MiKTsKIAlpZiAoZXJyKSB7CiAJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IHJlZ2lvbnNcbiIpOwpAQCAtNjExLDE3ICsxMDgyLDEzIEBACiAJCWdvdG8gb3V0X3VubWFwX2NvbmZpZzsKIAl9CiAKLS8vCWZvcihpPTA7aTw2NCA7aSs9NCl7Ci0vLwkJZGF0YTMyPWlvcmVhZDMyKGNhcmQtPmJ1ZmZlcnMgKyBpKTsKLS8vCQlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIiUwOGxYXG4iLCh1bnNpZ25lZCBsb25nKWRhdGEzMik7Ci0vLwl9CisJaWYgKHJlc2V0KSB7CisJCWlvd3JpdGUzMigxLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJCWRhdGEzMiA9IGlvcmVhZDMyKGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsgCiAKLQkvL0ZpbGwgQ29uZmlnIE1lbSB3aXRoIHplcm9zCi0JZm9yKGkgPSAwOyBpIDwgMTI4OyBpICs9IDQpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIGkpOwotCi0JLy9TZXQgUlggZW1wdHkgZmxhZ3MKLQlpb3dyaXRlMzIoMHhGMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBGTEFHU19BRERSKTsKKwkJaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwkJZGF0YTMyID0gaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKwl9CiAKIAlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfVkVSKTsKIAlmcGdhX3ZlciA9IChkYXRhMzIgJiAweDAwMDBGRkZGKTsKQEAgLTYzMCw1NSArMTA5Nyw1MyBAQAogCWRldl9pbmZvKCZkZXYtPmRldiwgIlNvbG9zIEZQR0EgVmVyc2lvbiAlZC4lMDJkIHN2bi0lZFxuIiwKIAkJIG1ham9yX3ZlciwgbWlub3JfdmVyLCBmcGdhX3Zlcik7CiAKLQljYXJkLT5ucl9wb3J0cyA9IDI7IC8qIEZJWE1FOiBEZXRlY3QgZGF1Z2h0ZXJib2FyZCAqLworCWlmICgwICYmIGZwZ2FfdmVyID4gMjcpCisJCWNhcmQtPnVzaW5nX2RtYSA9IDE7CisJZWxzZSB7CisJCS8qIFNldCBSWCBlbXB0eSBmbGFnIGZvciBhbGwgcG9ydHMgKi8KKwkJaW93cml0ZTMyKDB4RjAsIGNhcmQtPmNvbmZpZ19yZWdzICsgRkxBR1NfQUREUik7CisJfQogCi0JZXJyID0gYXRtX2luaXQoY2FyZCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfdW5tYXBfYm90aDsKKwlkYXRhMzIgPSBpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIFBPUlRTKTsKKwljYXJkLT5ucl9wb3J0cyA9IChkYXRhMzIgJiAweDAwMDAwMEZGKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGNhcmQpOworCiAJdGFza2xldF9pbml0KCZjYXJkLT50bGV0LCBzb2xvc19iaCwgKHVuc2lnbmVkIGxvbmcpY2FyZCk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnR4X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT50eF9xdWV1ZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+Y2xpX3F1ZXVlX2xvY2spOwotLyoKLQkvLyBTZXQgTG9vcGJhY2sgbW9kZQotCWRhdGEzMiA9IDB4MDAwMTAwMDA7Ci0JaW93cml0ZTMyKGRhdGEzMixjYXJkLT5jb25maWdfcmVncyArIEZMQUdTX0FERFIpOwotKi8KLS8qCi0JLy8gRmlsbCBCdWZmZXJzIHdpdGggemVyb3MKLQlmb3IgKGkgPSAwOyBpIDwgQlVGX1NJWkUgKiA4OyBpICs9IDQpCi0JCWlvd3JpdGUzMigwLCBjYXJkLT5idWZmZXJzICsgaSk7Ci0qLwotLyoKLQlmb3IoaSA9IDA7IGkgPCAoQlVGX1NJWkUgKiAxKTsgaSArPSA0KQotCQlpb3dyaXRlMzIoMHgxMjM0NTY3OCwgY2FyZC0+YnVmZmVycyArIGkgKyAoMCpCVUZfU0laRSkpOwotCWZvcihpID0gMDsgaSA8IChCVUZfU0laRSAqIDEpOyBpICs9IDQpCi0JCWlvd3JpdGUzMigweGFiY2RlZjk4LCBjYXJkLT5idWZmZXJzICsgaSArICgxKkJVRl9TSVpFKSk7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnBhcmFtX3F1ZXVlX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5wYXJhbV9xdWV1ZSk7CiAKLQkvLyBSZWFkIENvbmZpZyBNZW1vcnkKLQlwcmludGsoS0VSTl9ERUJVRyAiUmVhZGluZyBDb25maWcgTUVNXG4iKTsKLQlpID0gMDsKLQlmb3IoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWRhdGEzMj1pb3JlYWQzMihjYXJkLT5idWZmZXJzICsgaSooQlVGX1NJWkUvMikpOwotCQlwcmludGsoS0VSTl9BTEVSVCAiQWRkcjogJWxYIERhdGE6ICUwOGxYXG4iLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpKGFkZHJfc3RhcnQgKyBpKihCVUZfU0laRS8yKSksCi0JCSAgICAgICAodW5zaWduZWQgbG9uZylkYXRhMzIpOwotCX0KLSovCi0JLy9kZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIlJlcXVlc3RpbmcgSVJROiAlZFxuIixkZXYtPmlycSk7Ci0JZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNvbG9zX2lycSwgSVJRRl9ESVNBQkxFRHxJUlFGX1NIQVJFRCwKKwllcnIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc29sb3NfaXJxLCBJUlFGX1NIQVJFRCwKIAkJCSAgInNvbG9zLXBjaSIsIGNhcmQpOwotCWlmIChlcnIpCisJaWYgKGVycikgewogCQlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGludGVycnVwdCBJUlE6ICVkXG4iLCBkZXYtPmlycSk7CisJCWdvdG8gb3V0X3VubWFwX2JvdGg7CisJfQogCi0JLy8gRW5hYmxlIElSUXMKIAlpb3dyaXRlMzIoMSwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAKKwlpZiAoZnBnYV91cGdyYWRlKQorCQlmbGFzaF91cGdyYWRlKGNhcmQsIDApOworCisJaWYgKGZpcm13YXJlX3VwZ3JhZGUpCisJCWZsYXNoX3VwZ3JhZGUoY2FyZCwgMSk7CisKKwllcnIgPSBhdG1faW5pdChjYXJkKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9mcmVlX2lycTsKKwogCXJldHVybiAwOwogCisgb3V0X2ZyZWVfaXJxOgorCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIElSUV9FTl9BRERSKTsKKwlmcmVlX2lycShkZXYtPmlycSwgY2FyZCk7CisJdGFza2xldF9raWxsKCZjYXJkLT50bGV0KTsKKwkKICBvdXRfdW5tYXBfYm90aDoKKwlwY2lfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAlwY2lfaW91bm1hcChkZXYsIGNhcmQtPmNvbmZpZ19yZWdzKTsKICBvdXRfdW5tYXBfY29uZmlnOgogCXBjaV9pb3VubWFwKGRldiwgY2FyZC0+YnVmZmVycyk7CkBAIC02OTMsOSArMTE1OCwxMCBAQAogewogCWludCBpOwogCi0Jb3BlbnMgPSAwOwotCiAJZm9yIChpID0gMDsgaSA8IGNhcmQtPm5yX3BvcnRzOyBpKyspIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IHBrdF9oZHIgKmhlYWRlcjsKKwogCQlza2JfcXVldWVfaGVhZF9pbml0KCZjYXJkLT50eF9xdWV1ZVtpXSk7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNhcmQtPmNsaV9xdWV1ZVtpXSk7CiAKQEAgLTcwNyw2ICsxMTczLDggQEAKIAkJfQogCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZjYXJkLT5hdG1kZXZbaV0tPmNsYXNzX2RldiwgJmRldl9hdHRyX2NvbnNvbGUpKQogCQkJZGV2X2VycigmY2FyZC0+ZGV2LT5kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgY29uc29sZSBmb3IgQVRNIGRldmljZSAlZFxuIiwgaSk7CisJCWlmIChzeXNmc19jcmVhdGVfZ3JvdXAoJmNhcmQtPmF0bWRldltpXS0+Y2xhc3NfZGV2LmtvYmosICZzb2xvc19hdHRyX2dyb3VwKSkKKwkJCWRldl9lcnIoJmNhcmQtPmRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHBhcmFtZXRlciBncm91cCBmb3IgQVRNIGRldmljZSAlZFxuIiwgaSk7CiAKIAkJZGV2X2luZm8oJmNhcmQtPmRldi0+ZGV2LCAiUmVnaXN0ZXJlZCBBVE0gZGV2aWNlICVkXG4iLCBjYXJkLT5hdG1kZXZbaV0tPm51bWJlcik7CiAKQEAgLTcxNCw2ICsxMTgyLDIyIEBACiAJCWNhcmQtPmF0bWRldltpXS0+Y2lfcmFuZ2UudmNpX2JpdHMgPSAxNjsKIAkJY2FyZC0+YXRtZGV2W2ldLT5kZXZfZGF0YSA9IGNhcmQ7CiAJCWNhcmQtPmF0bWRldltpXS0+cGh5X2RhdGEgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWk7CisJCWNhcmQtPmF0bWRldltpXS0+c2lnbmFsID0gQVRNX1BIWV9TSUdfVU5LTk9XTjsKKworCQlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKCpoZWFkZXIpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFza2IpIHsKKwkJCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIGF0bV9pbml0KClcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQloZWFkZXIgPSAodm9pZCAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhlYWRlcikpOworCisJCWhlYWRlci0+c2l6ZSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnZwaSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnZjaSA9IGNwdV90b19sZTE2KDApOworCQloZWFkZXItPnR5cGUgPSBjcHVfdG9fbGUxNihQS1RfU1RBVFVTKTsKKworCQlmcGdhX3F1ZXVlKGNhcmQsIGksIHNrYiwgTlVMTCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzI0LDggKzEyMDgsMjggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5ucl9wb3J0czsgaSsrKSB7CiAJCWlmIChjYXJkLT5hdG1kZXZbaV0pIHsKKwkJCXN0cnVjdCBza19idWZmICpza2I7CisKIAkJCWRldl9pbmZvKCZjYXJkLT5kZXYtPmRldiwgIlVucmVnaXN0ZXJpbmcgQVRNIGRldmljZSAlZFxuIiwgY2FyZC0+YXRtZGV2W2ldLT5udW1iZXIpOworCisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmNhcmQtPmF0bWRldltpXS0+Y2xhc3NfZGV2LmtvYmosICZzb2xvc19hdHRyX2dyb3VwKTsKIAkJCWF0bV9kZXZfZGVyZWdpc3RlcihjYXJkLT5hdG1kZXZbaV0pOworCisJCQlza2IgPSBjYXJkLT5yeF9za2JbaV07CisJCQlpZiAoc2tiKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBSWF9ETUFfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQl9CisJCQlza2IgPSBjYXJkLT50eF9za2JbaV07CisJCQlpZiAoc2tiKSB7CisJCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJfQorCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmY2FyZC0+dHhfcXVldWVbaV0pKSkKKwkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisgCiAJCX0KIAl9CiB9CkBAIC03MzMsMzEgKzEyMzcsMzEgQEAKIHN0YXRpYyB2b2lkIGZwZ2FfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHNvbG9zX2NhcmQgKmNhcmQgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKwkKKwkvKiBEaXNhYmxlIElSUXMgKi8KKwlpb3dyaXRlMzIoMCwgY2FyZC0+Y29uZmlnX3JlZ3MgKyBJUlFfRU5fQUREUik7CiAKLQlpZiAoZGVidWcpCi0JCXJldHVybjsKKwkvKiBSZXNldCBGUEdBICovCisJaW93cml0ZTMyKDEsIGNhcmQtPmNvbmZpZ19yZWdzICsgRlBHQV9NT0RFKTsKKwkodm9pZClpb3JlYWQzMihjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7IAogCiAJYXRtX3JlbW92ZShjYXJkKTsKIAotCWRldl92ZGJnKCZkZXYtPmRldiwgIkZyZWVpbmcgSVJRXG4iKTsKLQkvLyBEaXNhYmxlIElSUXMgZnJvbSBGUEdBCi0JaW93cml0ZTMyKDAsIGNhcmQtPmNvbmZpZ19yZWdzICsgSVJRX0VOX0FERFIpOwogCWZyZWVfaXJxKGRldi0+aXJxLCBjYXJkKTsKIAl0YXNrbGV0X2tpbGwoJmNhcmQtPnRsZXQpOwogCi0JLy8JaW93cml0ZTMyKDB4MDEscGNpcmVncyk7Ci0JZGV2X3ZkYmcoJmRldi0+ZGV2LCAiVW5tYXBwaW5nIFBDSSByZXNvdXJjZVxuIik7CisJLyogUmVsZWFzZSBkZXZpY2UgZnJvbSByZXNldCAqLworCWlvd3JpdGUzMigwLCBjYXJkLT5jb25maWdfcmVncyArIEZQR0FfTU9ERSk7CisJKHZvaWQpaW9yZWFkMzIoY2FyZC0+Y29uZmlnX3JlZ3MgKyBGUEdBX01PREUpOyAKKwogCXBjaV9pb3VubWFwKGRldiwgY2FyZC0+YnVmZmVycyk7CiAJcGNpX2lvdW5tYXAoZGV2LCBjYXJkLT5jb25maWdfcmVncyk7CiAKLQlkZXZfdmRiZygmZGV2LT5kZXYsICJSZWxlYXNpbmcgUENJIFJlZ2lvblxuIik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJa2ZyZWUoY2FyZCk7Ci0vLwlkZXZfZGJnKCZjYXJkLT5kZXYtPmRldiwgImZwZ2FfcmVtb3ZlXG4iKTsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmcGdhX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Jhc2UuaCBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKaW5kZXggOWY1MGYxYi4uZGRjOTc0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2Jhc2UuaAorKysgYi9kcml2ZXJzL2Jhc2UvYmFzZS5oCkBAIC02Myw2ICs2MywzMiBAQAogI2RlZmluZSB0b19jbGFzcyhvYmopCVwKIAljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgY2xhc3NfcHJpdmF0ZSwgY2xhc3Nfc3Vic3lzLmtvYmopCiAKKy8qKgorICogc3RydWN0IGRldmljZV9wcml2YXRlIC0gc3RydWN0dXJlIHRvIGhvbGQgdGhlIHByaXZhdGUgdG8gdGhlIGRyaXZlciBjb3JlIHBvcnRpb25zIG9mIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgorICoKKyAqIEBrbGlzdF9jaGlsZHJlbiAtIGtsaXN0IGNvbnRhaW5pbmcgYWxsIGNoaWxkcmVuIG9mIHRoaXMgZGV2aWNlCisgKiBAa25vZGVfcGFyZW50IC0gbm9kZSBpbiBzaWJsaW5nIGxpc3QKKyAqIEBrbm9kZV9kcml2ZXIgLSBub2RlIGluIGRyaXZlciBsaXN0CisgKiBAa25vZGVfYnVzIC0gbm9kZSBpbiBidXMgbGlzdAorICogQGRldmljZSAtIHBvaW50ZXIgYmFjayB0byB0aGUgc3RydWN0IGNsYXNzIHRoYXQgdGhpcyBzdHJ1Y3R1cmUgaXMKKyAqIGFzc29jaWF0ZWQgd2l0aC4KKyAqCisgKiBOb3RoaW5nIG91dHNpZGUgb2YgdGhlIGRyaXZlciBjb3JlIHNob3VsZCBldmVyIHRvdWNoIHRoZXNlIGZpZWxkcy4KKyAqLworc3RydWN0IGRldmljZV9wcml2YXRlIHsKKwlzdHJ1Y3Qga2xpc3Qga2xpc3RfY2hpbGRyZW47CisJc3RydWN0IGtsaXN0X25vZGUga25vZGVfcGFyZW50OworCXN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX2RyaXZlcjsKKwlzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9idXM7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOworfTsKKyNkZWZpbmUgdG9fZGV2aWNlX3ByaXZhdGVfcGFyZW50KG9iaikJXAorCWNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwga25vZGVfcGFyZW50KQorI2RlZmluZSB0b19kZXZpY2VfcHJpdmF0ZV9kcml2ZXIob2JqKQlcCisJY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGRldmljZV9wcml2YXRlLCBrbm9kZV9kcml2ZXIpCisjZGVmaW5lIHRvX2RldmljZV9wcml2YXRlX2J1cyhvYmopCVwKKwljb250YWluZXJfb2Yob2JqLCBzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUsIGtub2RlX2J1cykKKwogLyogaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zICovCiBleHRlcm4gaW50IGRldmljZXNfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgYnVzZXNfaW5pdCh2b2lkKTsKQEAgLTg2LDYgKzExMiwxMSBAQAogCiBleHRlcm4gdm9pZCBkcml2ZXJfZGV0YWNoKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpOwogZXh0ZXJuIGludCBkcml2ZXJfcHJvYmVfZGV2aWNlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIHN0cnVjdCBkZXZpY2UgKmRldik7CitzdGF0aWMgaW5saW5lIGludCBkcml2ZXJfbWF0Y2hfZGV2aWNlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsCisJCQkJICAgICAgc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkcnYtPmJ1cy0+bWF0Y2ggJiYgZHJ2LT5idXMtPm1hdGNoKGRldiwgZHJ2KTsKK30KIAogZXh0ZXJuIHZvaWQgc3lzZGV2X3NodXRkb3duKHZvaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYnVzLmMgYi9kcml2ZXJzL2Jhc2UvYnVzLmMKaW5kZXggODNmMzJiOC4uZGMwMzBmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2J1cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9idXMuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJaW50IGVyciA9IC1FTk9ERVY7CiAKIAlkZXYgPSBidXNfZmluZF9kZXZpY2VfYnlfbmFtZShidXMsIE5VTEwsIGJ1Zik7Ci0JaWYgKGRldiAmJiBkZXYtPmRyaXZlciA9PSBOVUxMKSB7CisJaWYgKGRldiAmJiBkZXYtPmRyaXZlciA9PSBOVUxMICYmIGRyaXZlcl9tYXRjaF9kZXZpY2UoZHJ2LCBkZXYpKSB7CiAJCWlmIChkZXYtPnBhcmVudCkJLyogTmVlZGVkIGZvciBVU0IgKi8KIAkJCWRvd24oJmRldi0+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+a2xpc3RfY2hpbGRyZW4pOworCQkJCWtsaXN0X2FkZF90YWlsKCZkZXYtPnAtPmtub2RlX3BhcmVudCwKKwkJCQkJICAgICAgICZvbGRfcGFyZW50LT5wLT5rbGlzdF9jaGlsZHJlbik7CiAJCQkJc2V0X2Rldl9ub2RlKGRldiwgZGV2X3RvX25vZGUob2xkX3BhcmVudCkpOwogCQkJfQogCQl9CkBAIC0xNTk2LDkgKzE2MTYsMjMgQEAKIAkJcHV0X2RldmljZShuZXdfcGFyZW50KTsKIAkJZ290byBvdXQ7CiAJfQorCXN3aXRjaCAoZHBtX29yZGVyKSB7CisJY2FzZSBEUE1fT1JERVJfTk9ORToKKwkJYnJlYWs7CisJY2FzZSBEUE1fT1JERVJfREVWX0FGVEVSX1BBUkVOVDoKKwkJZGV2aWNlX3BtX21vdmVfYWZ0ZXIoZGV2LCBuZXdfcGFyZW50KTsKKwkJYnJlYWs7CisJY2FzZSBEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVY6CisJCWRldmljZV9wbV9tb3ZlX2JlZm9yZShuZXdfcGFyZW50LCBkZXYpOworCQlicmVhazsKKwljYXNlIERQTV9PUkRFUl9ERVZfTEFTVDoKKwkJZGV2aWNlX3BtX21vdmVfbGFzdChkZXYpOworCQlicmVhazsKKwl9CiBvdXRfcHV0OgogCXB1dF9kZXZpY2Uob2xkX3BhcmVudCk7CiBvdXQ6CisJZGV2aWNlX3BtX3VubG9jaygpOwogCXB1dF9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGQuYyBiL2RyaXZlcnMvYmFzZS9kZC5jCmluZGV4IDEzNTIzMTIuLmYxN2MzMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZC5jCisrKyBiL2RyaXZlcnMvYmFzZS9kZC5jCkBAIC0zMCw3ICszMCw3IEBACiAKIHN0YXRpYyB2b2lkIGRyaXZlcl9ib3VuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWYgKGtsaXN0X25vZGVfYXR0YWNoZWQoJmRldi0+a25vZGVfZHJpdmVyKSkgeworCWlmIChrbGlzdF9ub2RlX2F0dGFjaGVkKCZkZXYtPnAtPmtub2RlX2RyaXZlcikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRldmljZSAlcyBhbHJlYWR5IGJvdW5kXG4iLAogCQkJX19mdW5jX18sIGtvYmplY3RfbmFtZSgmZGV2LT5rb2JqKSk7CiAJCXJldHVybjsKQEAgLTQzLDcgKzQzLDcgQEAKIAkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZGV2LT5idXMtPnAtPmJ1c19ub3RpZmllciwKIAkJCQkJICAgICBCVVNfTk9USUZZX0JPVU5EX0RSSVZFUiwgZGV2KTsKIAotCWtsaXN0X2FkZF90YWlsKCZkZXYtPmtub2RlX2RyaXZlciwgJmRldi0+ZHJpdmVyLT5wLT5rbGlzdF9kZXZpY2VzKTsKKwlrbGlzdF9hZGRfdGFpbCgmZGV2LT5wLT5rbm9kZV9kcml2ZXIsICZkZXYtPmRyaXZlci0+cC0+a2xpc3RfZGV2aWNlcyk7CiB9CiAKIHN0YXRpYyBpbnQgZHJpdmVyX3N5c2ZzX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC0xNzIsMTYgKzE3MiwxMiBAQAogLyoqCiAgKiB3YWl0X2Zvcl9kZXZpY2VfcHJvYmUKICAqIFdhaXQgZm9yIGRldmljZSBwcm9iaW5nIHRvIGJlIGNvbXBsZXRlZC4KLSAqCi0gKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIHBvbGxzIGF0IDEwMCBtc2VjIGludGVydmFscy4KICAqLwotaW50IHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKQordm9pZCB3YWl0X2Zvcl9kZXZpY2VfcHJvYmUodm9pZCkKIHsKIAkvKiB3YWl0IGZvciB0aGUga25vd24gZGV2aWNlcyB0byBjb21wbGV0ZSB0aGVpciBwcm9iaW5nICovCi0Jd2hpbGUgKGRyaXZlcl9wcm9iZV9kb25lKCkgIT0gMCkKLQkJbXNsZWVwKDEwMCk7CisJd2FpdF9ldmVudChwcm9iZV93YWl0cXVldWUsIGF0b21pY19yZWFkKCZwcm9iZV9jb3VudCkgPT0gMCk7CiAJYXN5bmNfc3luY2hyb25pemVfZnVsbCgpOwotCXJldHVybiAwOwogfQogCiAvKioKQEAgLTE4OSwxNCArMTg1LDggQEAKICAqIEBkcnY6IGRyaXZlciB0byBiaW5kIGEgZGV2aWNlIHRvCiAgKiBAZGV2OiBkZXZpY2UgdG8gdHJ5IHRvIGJpbmQgdG8gdGhlIGRyaXZlcgogICoKLSAqIEZpcnN0LCB3ZSBjYWxsIHRoZSBidXMncyBtYXRjaCBmdW5jdGlvbiwgaWYgb25lIHByZXNlbnQsIHdoaWNoIHNob3VsZAotICogY29tcGFyZSB0aGUgZGV2aWNlIElEcyB0aGUgZHJpdmVyIHN1cHBvcnRzIHdpdGggdGhlIGRldmljZSBJRHMgb2YgdGhlCi0gKiBkZXZpY2UuIE5vdGUgd2UgZG9uJ3QgZG8gdGhpcyBvdXJzZWx2ZXMgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHRoZQotICogZm9ybWF0IG9mIHRoZSBJRCBzdHJ1Y3R1cmVzLCBub3Igd2hhdCBpcyB0byBiZSBjb25zaWRlcmVkIGEgbWF0Y2ggYW5kCi0gKiB3aGF0IGlzIG5vdC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMSBpZiBhIG1hdGNoIGlzIGZvdW5kLCAtRU5PREVWIGlmIHRoZSBkZXZpY2UgaXMKLSAqIG5vdCByZWdpc3RlcmVkLCBhbmQgMCBvdGhlcndpc2UuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLUVOT0RFViBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLAorICogMSBpZiB0aGUgZGV2aWNlIGlzIGJvdW5kIHN1Y2Vzc2Z1bGx5IGFuZCAwIG90aGVyd2lzZS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggQGRldi0+c2VtIGhlbGQuICBXaGVuIGNhbGxlZCBmb3IgYQogICogVVNCIGludGVyZmFjZSwgQGRldi0+cGFyZW50LT5zZW0gbXVzdCBiZSBoZWxkIGFzIHdlbGwuCkBAIC0yMDcsMjEgKzE5NywyMiBAQAogCiAJaWYgKCFkZXZpY2VfaXNfcmVnaXN0ZXJlZChkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoZHJ2LT5idXMtPm1hdGNoICYmICFkcnYtPmJ1cy0+bWF0Y2goZGV2LCBkcnYpKQotCQlnb3RvIGRvbmU7CiAKIAlwcl9kZWJ1ZygiYnVzOiAnJXMnOiAlczogbWF0Y2hlZCBkZXZpY2UgJXMgd2l0aCBkcml2ZXIgJXNcbiIsCiAJCSBkcnYtPmJ1cy0+bmFtZSwgX19mdW5jX18sIGRldl9uYW1lKGRldiksIGRydi0+bmFtZSk7CiAKIAlyZXQgPSByZWFsbHlfcHJvYmUoZGV2LCBkcnYpOwogCi1kb25lOgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpY2VfYXR0YWNoKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKworCWlmICghZHJpdmVyX21hdGNoX2RldmljZShkcnYsIGRldikpCisJCXJldHVybiAwOworCiAJcmV0dXJuIGRyaXZlcl9wcm9iZV9kZXZpY2UoZHJ2LCBkZXYpOwogfQogCkBAIC0yNzQsNyArMjY1LDcgQEAKIAkgKiBpcyBhbiBlcnJvci4KIAkgKi8KIAotCWlmIChkcnYtPmJ1cy0+bWF0Y2ggJiYgIWRydi0+YnVzLT5tYXRjaChkZXYsIGRydikpCisJaWYgKCFkcml2ZXJfbWF0Y2hfZGV2aWNlKGRydiwgZGV2KSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZGV2LT5wYXJlbnQpCS8qIE5lZWRlZCBmb3IgVVNCICovCkBAIC0zMjcsNyArMzE4LDcgQEAKIAkJCWRydi0+cmVtb3ZlKGRldik7CiAJCWRldnJlc19yZWxlYXNlX2FsbChkZXYpOwogCQlkZXYtPmRyaXZlciA9IE5VTEw7Ci0JCWtsaXN0X3JlbW92ZSgmZGV2LT5rbm9kZV9kcml2ZXIpOworCQlrbGlzdF9yZW1vdmUoJmRldi0+cC0+a25vZGVfZHJpdmVyKTsKIAl9CiB9CiAKQEAgLTM1Nyw2ICszNDgsNyBAQAogICovCiB2b2lkIGRyaXZlcl9kZXRhY2goc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnY7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCiAJZm9yICg7OykgewpAQCAtMzY1LDggKzM1NywxMCBAQAogCQkJc3Bpbl91bmxvY2soJmRydi0+cC0+a2xpc3RfZGV2aWNlcy5rX2xvY2spOwogCQkJYnJlYWs7CiAJCX0KLQkJZGV2ID0gbGlzdF9lbnRyeShkcnYtPnAtPmtsaXN0X2RldmljZXMua19saXN0LnByZXYsCi0JCQkJc3RydWN0IGRldmljZSwga25vZGVfZHJpdmVyLm5fbm9kZSk7CisJCWRldl9wcnYgPSBsaXN0X2VudHJ5KGRydi0+cC0+a2xpc3RfZGV2aWNlcy5rX2xpc3QucHJldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfcHJpdmF0ZSwKKwkJCQkgICAgIGtub2RlX2RyaXZlci5uX25vZGUpOworCQlkZXYgPSBkZXZfcHJ2LT5kZXZpY2U7CiAJCWdldF9kZXZpY2UoZGV2KTsKIAkJc3Bpbl91bmxvY2soJmRydi0+cC0+a2xpc3RfZGV2aWNlcy5rX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMgYi9kcml2ZXJzL2Jhc2UvZHJpdmVyLmMKaW5kZXggMWUyYmRhNy4uYzUxZjExYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvYmFzZS9kcml2ZXIuYwpAQCAtMTksNyArMTksMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpuZXh0X2RldmljZShzdHJ1Y3Qga2xpc3RfaXRlciAqaSkKIHsKIAlzdHJ1Y3Qga2xpc3Rfbm9kZSAqbiA9IGtsaXN0X25leHQoaSk7Ci0JcmV0dXJuIG4gPyBjb250YWluZXJfb2Yobiwgc3RydWN0IGRldmljZSwga25vZGVfZHJpdmVyKSA6IE5VTEw7CisJc3RydWN0IGRldmljZSAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlX3ByaXZhdGUgKmRldl9wcnY7CisKKwlpZiAobikgeworCQlkZXZfcHJ2ID0gdG9fZGV2aWNlX3ByaXZhdGVfZHJpdmVyKG4pOworCQlkZXYgPSBkZXZfcHJ2LT5kZXZpY2U7CisJfQorCXJldHVybiBkZXY7CiB9CiAKIC8qKgpAQCAtNDIsNyArNDksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWtsaXN0X2l0ZXJfaW5pdF9ub2RlKCZkcnYtPnAtPmtsaXN0X2RldmljZXMsICZpLAotCQkJICAgICBzdGFydCA/ICZzdGFydC0+a25vZGVfZHJpdmVyIDogTlVMTCk7CisJCQkgICAgIHN0YXJ0ID8gJnN0YXJ0LT5wLT5rbm9kZV9kcml2ZXIgOiBOVUxMKTsKIAl3aGlsZSAoKGRldiA9IG5leHRfZGV2aWNlKCZpKSkgJiYgIWVycm9yKQogCQllcnJvciA9IGZuKGRldiwgZGF0YSk7CiAJa2xpc3RfaXRlcl9leGl0KCZpKTsKQEAgLTc2LDcgKzgzLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlrbGlzdF9pdGVyX2luaXRfbm9kZSgmZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLCAmaSwKLQkJCSAgICAgKHN0YXJ0ID8gJnN0YXJ0LT5rbm9kZV9kcml2ZXIgOiBOVUxMKSk7CisJCQkgICAgIChzdGFydCA/ICZzdGFydC0+cC0+a25vZGVfZHJpdmVyIDogTlVMTCkpOwogCXdoaWxlICgoZGV2ID0gbmV4dF9kZXZpY2UoJmkpKSkKIAkJaWYgKG1hdGNoKGRldiwgZGF0YSkgJiYgZ2V0X2RldmljZShkZXYpKQogCQkJYnJlYWs7CkBAIC0yMTYsNiArMjIzLDggQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpvdGhlcjsKIAorCUJVR19PTighZHJ2LT5idXMtPnApOworCiAJaWYgKChkcnYtPmJ1cy0+cHJvYmUgJiYgZHJ2LT5wcm9iZSkgfHwKIAkgICAgKGRydi0+YnVzLT5yZW1vdmUgJiYgZHJ2LT5yZW1vdmUpIHx8CiAJICAgIChkcnYtPmJ1cy0+c2h1dGRvd24gJiYgZHJ2LT5zaHV0ZG93bikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jCmluZGV4IDQ0Njk5ZDkuLmQzYTU5YzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtMzE5LDcgKzMxOSw3IEBACiAJZl9kZXYtPnBhcmVudCA9IGRldmljZTsKIAlmX2Rldi0+Y2xhc3MgPSAmZmlybXdhcmVfY2xhc3M7CiAJZGV2X3NldF9kcnZkYXRhKGZfZGV2LCBmd19wcml2KTsKLQlmX2Rldi0+dWV2ZW50X3N1cHByZXNzID0gMTsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhmX2RldiwgMSk7CiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKGZfZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCWRldl9lcnIoZGV2aWNlLCAiJXM6IGRldmljZV9yZWdpc3RlciBmYWlsZWRcbiIsIF9fZnVuY19fKTsKQEAgLTM2Niw3ICszNjYsNyBAQAogCX0KIAogCWlmICh1ZXZlbnQpCi0JCWZfZGV2LT51ZXZlbnRfc3VwcHJlc3MgPSAwOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhmX2RldiwgMCk7CiAJKmRldl9wID0gZl9kZXY7CiAJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggMzQ5YTEwMS4uZDIxOThmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKQEAgLTIxNyw2ICsyMTcsNyBAQAogCWlmIChkKSB7CiAJCW1lbWNweShkLCBkYXRhLCBzaXplKTsKIAkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBkOworCQlwZGV2LT5wbGF0Zm9ybV9kYXRhID0gZDsKIAl9CiAJcmV0dXJuIGQgPyAwIDogLUVOT01FTTsKIH0KQEAgLTI0Niw2ICsyNDcsMjEgQEAKIAllbHNlCiAJCWRldl9zZXRfbmFtZSgmcGRldi0+ZGV2LCBwZGV2LT5uYW1lKTsKIAorCS8qIFdlIHdpbGwgcmVtb3ZlIHBsYXRmb3JtX2RhdGEgZmllbGQgZnJvbSBzdHJ1Y3QgZGV2aWNlCisJKiBpZiBhbGwgcGxhdGZvcm0gZGV2aWNlcyBwYXNzIGl0cyBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhCisJKiBmcm9tIHBsYXRmb3JtX2RldmljZS4gVGhlIGNvbnZlcnNpb24gaXMgZ29pbmcgdG8gYmUgYQorCSogbG9uZyB0aW1lLCBzbyB3ZSBhbGxvdyB0aGUgdHdvIGNhc2VzIGNvZXhpc3QgdG8gbWFrZQorCSogdGhpcyBraW5kIG9mIGZpeCBtb3JlIGVhc2lseSovCisJaWYgKHBkZXYtPnBsYXRmb3JtX2RhdGEgJiYgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiB1c2Ugd2hpY2ggcGxhdGZvcm1fZGF0YT9cbiIsCisJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldikpOworCX0gZWxzZSBpZiAocGRldi0+cGxhdGZvcm1fZGF0YSkgeworCQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IHBkZXYtPnBsYXRmb3JtX2RhdGE7CisJfSBlbHNlIGlmIChwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlwZGV2LT5wbGF0Zm9ybV9kYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJfQorCiAJZm9yIChpID0gMDsgaSA8IHBkZXYtPm51bV9yZXNvdXJjZXM7IGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgKnAsICpyID0gJnBkZXYtPnJlc291cmNlW2ldOwogCkBAIC01ODQsMTAgKzYwMCwyNSBAQAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAotCWFkZF91ZXZlbnRfdmFyKGVudiwgIk1PREFMSUFTPXBsYXRmb3JtOiVzIiwgcGRldi0+bmFtZSk7CisJYWRkX3VldmVudF92YXIoZW52LCAiTU9EQUxJQVM9JXMlcyIsIFBMQVRGT1JNX01PRFVMRV9QUkVGSVgsCisJCShwZGV2LT5pZF9lbnRyeSkgPyBwZGV2LT5pZF9lbnRyeS0+bmFtZSA6IHBkZXYtPm5hbWUpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqcGxhdGZvcm1fbWF0Y2hfaWQoCisJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZCwKKwkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJd2hpbGUgKGlkLT5uYW1lWzBdKSB7CisJCWlmIChzdHJjbXAocGRldi0+bmFtZSwgaWQtPm5hbWUpID09IDApIHsKKwkJCXBkZXYtPmlkX2VudHJ5ID0gaWQ7CisJCQlyZXR1cm4gaWQ7CisJCX0KKwkJaWQrKzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIC8qKgogICogcGxhdGZvcm1fbWF0Y2ggLSBiaW5kIHBsYXRmb3JtIGRldmljZSB0byBwbGF0Zm9ybSBkcml2ZXIuCiAgKiBAZGV2OiBkZXZpY2UuCkBAIC02MDMsOSArNjM0LDE0IEBACiAgKi8KIHN0YXRpYyBpbnQgcGxhdGZvcm1fbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKnBkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZHJ2KTsKIAotCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCS8qIG1hdGNoIGFnYWluc3QgdGhlIGlkIHRhYmxlIGZpcnN0ICovCisJaWYgKHBkcnYtPmlkX3RhYmxlKQorCQlyZXR1cm4gcGxhdGZvcm1fbWF0Y2hfaWQocGRydi0+aWRfdGFibGUsIHBkZXYpICE9IE5VTEw7CisKKwkvKiBmYWxsLWJhY2sgdG8gZHJpdmVyIG5hbWUgbWF0Y2ggKi8KIAlyZXR1cm4gKHN0cmNtcChwZGV2LT5uYW1lLCBkcnYtPm5hbWUpID09IDApOwogfQogCkBAIC02MjMsMjYgKzY1OSwyNCBAQAogCiBzdGF0aWMgaW50IHBsYXRmb3JtX2xlZ2FjeV9zdXNwZW5kX2xhdGUoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYgPSB0b19wbGF0Zm9ybV9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqcGRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWludCByZXQgPSAwOwogCi0JcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7Ci0JaWYgKGRldi0+ZHJpdmVyICYmIGRydi0+c3VzcGVuZF9sYXRlKQotCQlyZXQgPSBkcnYtPnN1c3BlbmRfbGF0ZShwZGV2LCBtZXNnKTsKKwlpZiAoZGV2LT5kcml2ZXIgJiYgcGRydi0+c3VzcGVuZF9sYXRlKQorCQlyZXQgPSBwZHJ2LT5zdXNwZW5kX2xhdGUocGRldiwgbWVzZyk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBsYXRmb3JtX2xlZ2FjeV9yZXN1bWVfZWFybHkoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiA9IHRvX3BsYXRmb3JtX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpwZHJ2ID0gdG9fcGxhdGZvcm1fZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJaW50IHJldCA9IDA7CiAKLQlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKLQlpZiAoZGV2LT5kcml2ZXIgJiYgZHJ2LT5yZXN1bWVfZWFybHkpCi0JCXJldCA9IGRydi0+cmVzdW1lX2Vhcmx5KHBkZXYpOworCWlmIChkZXYtPmRyaXZlciAmJiBwZHJ2LT5yZXN1bWVfZWFybHkpCisJCXJldCA9IHBkcnYtPnJlc3VtZV9lYXJseShwZGV2KTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCAyZDE0ZjRhLi5lMjU1MzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTEwNyw2ICsxMDcsNTAgQEAKIH0KIAogLyoqCisgKglkZXZpY2VfcG1fbW92ZV9iZWZvcmUgLSBtb3ZlIGRldmljZSBpbiBkcG1fbGlzdAorICoJQGRldmE6ICBEZXZpY2UgdG8gbW92ZSBpbiBkcG1fbGlzdAorICoJQGRldmI6ICBEZXZpY2UgQGRldmEgc2hvdWxkIGNvbWUgYmVmb3JlCisgKi8KK3ZvaWQgZGV2aWNlX3BtX21vdmVfYmVmb3JlKHN0cnVjdCBkZXZpY2UgKmRldmEsIHN0cnVjdCBkZXZpY2UgKmRldmIpCit7CisJcHJfZGVidWcoIlBNOiBNb3ZpbmcgJXM6JXMgYmVmb3JlICVzOiVzXG4iLAorCQkgZGV2YS0+YnVzID8gZGV2YS0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCisJCSBrb2JqZWN0X25hbWUoJmRldmEtPmtvYmopLAorCQkgZGV2Yi0+YnVzID8gZGV2Yi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCisJCSBrb2JqZWN0X25hbWUoJmRldmItPmtvYmopKTsKKwkvKiBEZWxldGUgZGV2YSBmcm9tIGRwbV9saXN0IGFuZCByZWluc2VydCBiZWZvcmUgZGV2Yi4gKi8KKwlsaXN0X21vdmVfdGFpbCgmZGV2YS0+cG93ZXIuZW50cnksICZkZXZiLT5wb3dlci5lbnRyeSk7Cit9CisKKy8qKgorICoJZGV2aWNlX3BtX21vdmVfYWZ0ZXIgLSBtb3ZlIGRldmljZSBpbiBkcG1fbGlzdAorICoJQGRldmE6ICBEZXZpY2UgdG8gbW92ZSBpbiBkcG1fbGlzdAorICoJQGRldmI6ICBEZXZpY2UgQGRldmEgc2hvdWxkIGNvbWUgYWZ0ZXIKKyAqLwordm9pZCBkZXZpY2VfcG1fbW92ZV9hZnRlcihzdHJ1Y3QgZGV2aWNlICpkZXZhLCBzdHJ1Y3QgZGV2aWNlICpkZXZiKQoreworCXByX2RlYnVnKCJQTTogTW92aW5nICVzOiVzIGFmdGVyICVzOiVzXG4iLAorCQkgZGV2YS0+YnVzID8gZGV2YS0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCisJCSBrb2JqZWN0X25hbWUoJmRldmEtPmtvYmopLAorCQkgZGV2Yi0+YnVzID8gZGV2Yi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCisJCSBrb2JqZWN0X25hbWUoJmRldmItPmtvYmopKTsKKwkvKiBEZWxldGUgZGV2YSBmcm9tIGRwbV9saXN0IGFuZCByZWluc2VydCBhZnRlciBkZXZiLiAqLworCWxpc3RfbW92ZSgmZGV2YS0+cG93ZXIuZW50cnksICZkZXZiLT5wb3dlci5lbnRyeSk7Cit9CisKKy8qKgorICogCWRldmljZV9wbV9tb3ZlX2xhc3QgLSBtb3ZlIGRldmljZSB0byBlbmQgb2YgZHBtX2xpc3QKKyAqIAlAZGV2OiAgIERldmljZSB0byBtb3ZlIGluIGRwbV9saXN0CisgKi8KK3ZvaWQgZGV2aWNlX3BtX21vdmVfbGFzdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcHJfZGVidWcoIlBNOiBNb3ZpbmcgJXM6JXMgdG8gZW5kIG9mIGxpc3RcbiIsCisJCSBkZXYtPmJ1cyA/IGRldi0+YnVzLT5uYW1lIDogIk5vIEJ1cyIsCisJCSBrb2JqZWN0X25hbWUoJmRldi0+a29iaikpOworCWxpc3RfbW92ZV90YWlsKCZkZXYtPnBvd2VyLmVudHJ5LCAmZHBtX2xpc3QpOworfQorCisvKioKICAqCXBtX29wIC0gZXhlY3V0ZSB0aGUgUE0gb3BlcmF0aW9uIGFwcHJvcGlhdGUgZm9yIGdpdmVuIFBNIGV2ZW50CiAgKglAZGV2OglEZXZpY2UuCiAgKglAb3BzOglQTSBvcGVyYXRpb25zIHRvIGNob29zZSBmcm9tLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Bvd2VyLmggYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAppbmRleCA0MWY1MWZhLi5jN2NiNGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaAorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcG93ZXIuaApAQCAtMTgsMTEgKzE4LDE5IEBACiAKIGV4dGVybiB2b2lkIGRldmljZV9wbV9hZGQoc3RydWN0IGRldmljZSAqKTsKIGV4dGVybiB2b2lkIGRldmljZV9wbV9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKK2V4dGVybiB2b2lkIGRldmljZV9wbV9tb3ZlX2JlZm9yZShzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gdm9pZCBkZXZpY2VfcG1fbW92ZV9hZnRlcihzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBkZXZpY2UgKik7CitleHRlcm4gdm9pZCBkZXZpY2VfcG1fbW92ZV9sYXN0KHN0cnVjdCBkZXZpY2UgKik7CiAKICNlbHNlIC8qIENPTkZJR19QTV9TTEVFUCAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX21vdmVfYmVmb3JlKHN0cnVjdCBkZXZpY2UgKmRldmEsCisJCQkJCSBzdHJ1Y3QgZGV2aWNlICpkZXZiKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9wbV9tb3ZlX2FmdGVyKHN0cnVjdCBkZXZpY2UgKmRldmEsCisJCQkJCXN0cnVjdCBkZXZpY2UgKmRldmIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGV2aWNlX3BtX21vdmVfbGFzdChzdHJ1Y3QgZGV2aWNlICpkZXYpIHt9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2Uvc3lzLmMgYi9kcml2ZXJzL2Jhc2Uvc3lzLmMKaW5kZXggYjQyOGM4Yy4uY2JkMzZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3N5cy5jCisrKyBiL2RyaXZlcnMvYmFzZS9zeXMuYwpAQCAtMzAsMTAgKzMwLDEwIEBACiAKIAogc3RhdGljIHNzaXplX3QKLXN5c2Rldl9zaG93KHN0cnVjdCBrb2JqZWN0ICoga29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqIGF0dHIsIGNoYXIgKiBidWZmZXIpCitzeXNkZXZfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmZmVyKQogewotCXN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOwotCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogc3lzZGV2X2F0dHIgPSB0b19zeXNkZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOworCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICpzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOwogCiAJaWYgKHN5c2Rldl9hdHRyLT5zaG93KQogCQlyZXR1cm4gc3lzZGV2X2F0dHItPnNob3coc3lzZGV2LCBzeXNkZXZfYXR0ciwgYnVmZmVyKTsKQEAgLTQyLDExICs0MiwxMSBAQAogCiAKIHN0YXRpYyBzc2l6ZV90Ci1zeXNkZXZfc3RvcmUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwKLQkgICAgIGNvbnN0IGNoYXIgKiBidWZmZXIsIHNpemVfdCBjb3VudCkKK3N5c2Rldl9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOwotCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICogc3lzZGV2X2F0dHIgPSB0b19zeXNkZXZfYXR0cihhdHRyKTsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2ID0gdG9fc3lzZGV2KGtvYmopOworCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICpzeXNkZXZfYXR0ciA9IHRvX3N5c2Rldl9hdHRyKGF0dHIpOwogCiAJaWYgKHN5c2Rldl9hdHRyLT5zdG9yZSkKIAkJcmV0dXJuIHN5c2Rldl9hdHRyLT5zdG9yZShzeXNkZXYsIHN5c2Rldl9hdHRyLCBidWZmZXIsIGNvdW50KTsKQEAgLTYzLDEzICs2MywxMyBAQAogfTsKIAogCi1pbnQgc3lzZGV2X2NyZWF0ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICogcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKiBhKQoraW50IHN5c2Rldl9jcmVhdGVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmEpCiB7CiAJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9maWxlKCZzLT5rb2JqLCAmYS0+YXR0cik7CiB9CiAKIAotdm9pZCBzeXNkZXZfcmVtb3ZlX2ZpbGUoc3RydWN0IHN5c19kZXZpY2UgKiBzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqIGEpCit2b2lkIHN5c2Rldl9yZW1vdmVfZmlsZShzdHJ1Y3Qgc3lzX2RldmljZSAqcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmEpCiB7CiAJc3lzZnNfcmVtb3ZlX2ZpbGUoJnMtPmtvYmosICZhLT5hdHRyKTsKIH0KQEAgLTg0LDcgKzg0LDcgQEAKIHN0YXRpYyBzc2l6ZV90IHN5c2Rldl9jbGFzc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLAogCQkJCSBjaGFyICpidWZmZXIpCiB7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzID0gdG9fc3lzZGV2X2NsYXNzKGtvYmopOwogCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICpjbGFzc19hdHRyID0gdG9fc3lzZGV2X2NsYXNzX2F0dHIoYXR0cik7CiAKIAlpZiAoY2xhc3NfYXR0ci0+c2hvdykKQEAgLTk1LDggKzk1LDggQEAKIHN0YXRpYyBzc2l6ZV90IHN5c2Rldl9jbGFzc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbGFzcyA9IHRvX3N5c2Rldl9jbGFzcyhrb2JqKTsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqIGNsYXNzX2F0dHIgPSB0b19zeXNkZXZfY2xhc3NfYXR0cihhdHRyKTsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcyA9IHRvX3N5c2Rldl9jbGFzcyhrb2JqKTsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqY2xhc3NfYXR0ciA9IHRvX3N5c2Rldl9jbGFzc19hdHRyKGF0dHIpOwogCiAJaWYgKGNsYXNzX2F0dHItPnN0b3JlKQogCQlyZXR1cm4gY2xhc3NfYXR0ci0+c3RvcmUoY2xhc3MsIGJ1ZmZlciwgY291bnQpOwpAQCAtMTI4LDcgKzEyOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga3NldCAqc3lzdGVtX2tzZXQ7CiAKLWludCBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscykKK2ludCBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzKQogewogCXByX2RlYnVnKCJSZWdpc3RlcmluZyBzeXNkZXYgY2xhc3MgJyVzJ1xuIiwgY2xzLT5uYW1lKTsKIApAQCAtMTQxLDcgKzE0MSw3IEBACiAJcmV0dXJuIGtzZXRfcmVnaXN0ZXIoJmNscy0+a3NldCk7CiB9CiAKLXZvaWQgc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscykKK3ZvaWQgc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzKQogewogCXByX2RlYnVnKCJVbnJlZ2lzdGVyaW5nIHN5c2RldiBjbGFzcyAnJXMnXG4iLAogCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwpAQCAtMjAzLDggKzIwMyw4IEBACiAgKglAY2xzOglDbGFzcyBkcml2ZXIgYmVsb25ncyB0by4KICAqCUBkcnY6CURyaXZlci4KICAqLwotdm9pZCBzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNscywKLQkJCSAgICAgIHN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2KQordm9pZCBzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzLAorCQkJICAgICAgc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydikKIHsKIAltdXRleF9sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKIAlsaXN0X2RlbF9pbml0KCZkcnYtPmVudHJ5KTsKQEAgLTIyOSwxMCArMjI5LDEwIEBACiAgKglAc3lzZGV2OglkZXZpY2UgaW4gcXVlc3Rpb24KICAqCiAgKi8KLWludCBzeXNkZXZfcmVnaXN0ZXIoc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXYpCitpbnQgc3lzZGV2X3JlZ2lzdGVyKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCiB7CiAJaW50IGVycm9yOwotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKiBjbHMgPSBzeXNkZXYtPmNsczsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMgPSBzeXNkZXYtPmNsczsKIAogCWlmICghY2xzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCQkJCSAgICAgc3lzZGV2LT5pZCk7CiAKIAlpZiAoIWVycm9yKSB7Ci0JCXN0cnVjdCBzeXNkZXZfZHJpdmVyICogZHJ2OworCQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2OwogCiAJCXByX2RlYnVnKCJSZWdpc3RlcmluZyBzeXMgZGV2aWNlICclcydcbiIsCiAJCQkga29iamVjdF9uYW1lKCZzeXNkZXYtPmtvYmopKTsKQEAgLTI3NCw5ICsyNzQsOSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBzeXNkZXZfdW5yZWdpc3RlcihzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldikKK3ZvaWQgc3lzZGV2X3VucmVnaXN0ZXIoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqIGRydjsKKwlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2OwogCiAJbXV0ZXhfbG9jaygmc3lzZGV2X2RyaXZlcnNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZzeXNkZXYtPmNscy0+ZHJpdmVycywgZW50cnkpIHsKQEAgLTMwNSwxOSArMzA1LDE5IEBACiAgKi8KIHZvaWQgc3lzZGV2X3NodXRkb3duKHZvaWQpCiB7Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNsczsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHM7CiAKIAlwcl9kZWJ1ZygiU2h1dHRpbmcgRG93biBTeXN0ZW0gRGV2aWNlc1xuIik7CiAKIAltdXRleF9sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoY2xzLCAmc3lzdGVtX2tzZXQtPmxpc3QsIGtzZXQua29iai5lbnRyeSkgewotCQlzdHJ1Y3Qgc3lzX2RldmljZSAqIHN5c2RldjsKKwkJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldjsKIAogCQlwcl9kZWJ1ZygiU2h1dHRpbmcgZG93biB0eXBlICclcyc6XG4iLAogCQkJIGtvYmplY3RfbmFtZSgmY2xzLT5rc2V0LmtvYmopKTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN5c2RldiwgJmNscy0+a3NldC5saXN0LCBrb2JqLmVudHJ5KSB7Ci0JCQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqIGRydjsKKwkJCXN0cnVjdCBzeXNkZXZfZHJpdmVyICpkcnY7CiAJCQlwcl9kZWJ1ZygiICVzXG4iLCBrb2JqZWN0X25hbWUoJnN5c2Rldi0+a29iaikpOwogCiAJCQkvKiBDYWxsIGF1eGlsbGFyeSBkcml2ZXJzIGZpcnN0ICovCkBAIC0zNjQsNyArMzY0LDcgQEAKICAqLwogaW50IHN5c2Rldl9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsczsKIAlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LCAqZXJyX2RldjsKIAlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2LCAqZXJyX2RydjsKIAlpbnQgcmV0OwpAQCAtNDQyLDEyICs0NDIsMTIgQEAKICAqLwogaW50IHN5c2Rldl9yZXN1bWUodm9pZCkKIHsKLQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzOworCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsczsKIAogCXByX2RlYnVnKCJSZXN1bWluZyBTeXN0ZW0gRGV2aWNlc1xuIik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNscywgJnN5c3RlbV9rc2V0LT5saXN0LCBrc2V0LmtvYmouZW50cnkpIHsKLQkJc3RydWN0IHN5c19kZXZpY2UgKiBzeXNkZXY7CisJCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXY7CiAKIAkJcHJfZGVidWcoIlJlc3VtaW5nIHR5cGUgJyVzJzpcbiIsCiAJCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IDAzNDRhOGEuLmU3YjhhYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKQEAgLTQ1LDYgKzQ1LDEzIEBACiAJICBJZiB5b3UgaGF2ZSBhIFNXSU0tMyAoU3VwZXIgV296IEludGVncmF0ZWQgTWFjaGluZSAzOyBmcm9tIEFwcGxlKQogCSAgZmxvcHB5IGNvbnRyb2xsZXIsIHNheSBZIGhlcmUuIE1vc3QgY29tbW9ubHkgZm91bmQgaW4gUG93ZXJNYWNzLgogCitjb25maWcgQkxLX0RFVl9TV0lNCisJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFNXSU0gTWFjaW50b3NoIGZsb3BweSIKKwlkZXBlbmRzIG9uIE02OEsgJiYgTUFDCisJaGVscAorCSAgWW91IHNob3VsZCBzZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgZmxvcHB5IHN1cHBvcnQKKwkgIGFuZCB5b3UgZG9uJ3QgaGF2ZSBhIElJLCBJSWZ4LCBROTAwLCBROTUwIG9yIEFWIHNlcmllcy4KKwogY29uZmlnIEFNSUdBX1oyUkFNCiAJdHJpc3RhdGUgIkFtaWdhIFpvcnJvIElJIHJhbWRpc2sgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFpPUlJPCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQppbmRleCA4N2UxMjBlLi4zMTQ1MTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKQEAgLTYsNiArNiw3IEBACiAjIAogCiBvYmotJChDT05GSUdfTUFDX0ZMT1BQWSkJKz0gc3dpbTMubworb2JqLSQoQ09ORklHX0JMS19ERVZfU1dJTSkJKz0gc3dpbV9tb2Qubwogb2JqLSQoQ09ORklHX0JMS19ERVZfRkQpCSs9IGZsb3BweS5vCiBvYmotJChDT05GSUdfQU1JR0FfRkxPUFBZKQkrPSBhbWlmbG9wLm8KIG9iai0kKENPTkZJR19QUzNfRElTSykJCSs9IHBzM2Rpc2subwpAQCAtMzMsMyArMzQsNSBAQAogb2JqLSQoQ09ORklHX0JMS19ERVZfSEQpCSs9IGhkLm8KIAogb2JqLSQoQ09ORklHX1hFTl9CTEtERVZfRlJPTlRFTkQpCSs9IHhlbi1ibGtmcm9udC5vCisKK3N3aW1fbW9kLW9ianMJOj0gc3dpbS5vIHN3aW1fYXNtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYW9lL2FvZW5ldC5jIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKaW5kZXggYzYwOTliYS4uY2UwZDYyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKKysrIGIvZHJpdmVycy9ibG9jay9hb2UvYW9lbmV0LmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFvZV9wdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYW9lX3B0IF9fcmVhZF9tb3N0bHkgPSB7CiAJLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FPRSksCiAJLmZ1bmMgPSBhb2VuZXRfcmN2LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCA0ZjliNmQ3Li41ZDBlMTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0zODk4LDYgKzM4OTgsMTMgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgY2Npc3NfaW5pdCh2b2lkKQogeworCS8qCisJICogVGhlIGhhcmR3YXJlIHJlcXVpcmVzIHRoYXQgY29tbWFuZHMgYXJlIGFsaWduZWQgb24gYSA2NC1iaXQKKwkgKiBib3VuZGFyeS4gR2l2ZW4gdGhhdCB3ZSB1c2UgcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSB0byBhbGxvY2F0ZSBhbgorCSAqIGFycmF5IG9mIHRoZW0sIHRoZSBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4IGJ5dGVzLgorCSAqLworCUJVSUxEX0JVR19PTihzaXplb2YoQ29tbWFuZExpc3Rfc3RydWN0KSAlIDgpOworCiAJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRSAiXG4iKTsKIAogCS8qIFJlZ2lzdGVyIGZvciBvdXIgUENJIGRldmljZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYyBiL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYwppbmRleCA1ZDM5ZGYxLi5jYTI2OGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKKysrIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCkBAIC02MTcsNiArNjE3LDcgQEAKIAlpbnQgaTsKIAogCWMtPnBjaV9kZXYgPSBwZGV2OworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgImNwcWFycmF5OiBVbmFibGUgdG8gRW5hYmxlIFBDSSBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLTE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwppbmRleCA4M2Q4ZWQzLi5jMmM5NWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCisrKyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKQEAgLTQxMzUsMTAgKzQxMzUsOSBAQAogc3RhdGljIHNzaXplX3QgZmxvcHB5X2Ntb3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnAgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgZHJpdmU7CiAKLQlwID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSxkZXYpOwogCWRyaXZlID0gcC0+aWQ7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJVhcbiIsIFVEUC0+Y21vcyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IGJmMDM0NTUuLjI2MjFlZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC00NzQsMTAgKzQ3NCwzNSBAQAogCWludCByZXQ7CiAKIAlwb3MgPSAoKGxvZmZfdCkgYmlvLT5iaV9zZWN0b3IgPDwgOSkgKyBsby0+bG9fb2Zmc2V0OwotCWlmIChiaW9fcncoYmlvKSA9PSBXUklURSkKKworCWlmIChiaW9fcncoYmlvKSA9PSBXUklURSkgeworCQlpbnQgYmFycmllciA9IGJpb19iYXJyaWVyKGJpbyk7CisJCXN0cnVjdCBmaWxlICpmaWxlID0gbG8tPmxvX2JhY2tpbmdfZmlsZTsKKworCQlpZiAoYmFycmllcikgeworCQkJaWYgKHVubGlrZWx5KCFmaWxlLT5mX29wLT5mc3luYykpIHsKKwkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJcmV0ID0gdmZzX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnksIDApOworCQkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKIAkJcmV0ID0gbG9fc2VuZChsbywgYmlvLCBwb3MpOwotCWVsc2UKKworCQlpZiAoYmFycmllciAmJiAhcmV0KSB7CisJCQlyZXQgPSB2ZnNfZnN5bmMoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCk7CisJCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCQlyZXQgPSAtRUlPOworCQl9CisJfSBlbHNlCiAJCXJldCA9IGxvX3JlY2VpdmUobG8sIGJpbywgbG8tPmxvX2Jsb2Nrc2l6ZSwgcG9zKTsKKworb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgyNiw2ICs4NTEsOSBAQAogCWxvLT5sb19xdWV1ZS0+cXVldWVkYXRhID0gbG87CiAJbG8tPmxvX3F1ZXVlLT51bnBsdWdfZm4gPSBsb29wX3VucGx1ZzsKIAorCWlmICghKGxvX2ZsYWdzICYgTE9fRkxBR1NfUkVBRF9PTkxZKSAmJiBmaWxlLT5mX29wLT5mc3luYykKKwkJYmxrX3F1ZXVlX29yZGVyZWQobG8tPmxvX3F1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOLCBOVUxMKTsKKwogCXNldF9jYXBhY2l0eShsby0+bG9fZGlzaywgc2l6ZSk7CiAJYmRfc2V0X3NpemUoYmRldiwgc2l6ZSA8PCA5KTsKIApAQCAtOTQxLDExICs5NjksMTggQEAKIAkJYmRfc2V0X3NpemUoYmRldiwgMCk7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2soZmlscC0+Zl9tYXBwaW5nLCBnZnApOwogCWxvLT5sb19zdGF0ZSA9IExvX3VuYm91bmQ7Ci0JZnB1dChmaWxwKTsKIAkvKiBUaGlzIGlzIHNhZmU6IG9wZW4oKSBpcyBzdGlsbCBob2xkaW5nIGEgcmVmZXJlbmNlLiAqLwogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCWlmIChtYXhfcGFydCA+IDApCiAJCWlvY3RsX2J5X2JkZXYoYmRldiwgQkxLUlJQQVJULCAwKTsKKwltdXRleF91bmxvY2soJmxvLT5sb19jdGxfbXV0ZXgpOworCS8qCisJICogTmVlZCBub3QgaG9sZCBsb19jdGxfbXV0ZXggdG8gZnB1dCBiYWNraW5nIGZpbGUuCisJICogQ2FsbGluZyBmcHV0IGhvbGRpbmcgbG9fY3RsX211dGV4IHRyaWdnZXJzIGEgY2lyY3VsYXIKKwkgKiBsb2NrIGRlcGVuZGVuY3kgcG9zc2liaWxpdHkgd2FybmluZyBhcyBmcHV0IGNhbiB0YWtlCisJICogYmRfbXV0ZXggd2hpY2ggaXMgdXN1YWxseSB0YWtlbiBiZWZvcmUgbG9fY3RsX211dGV4LgorCSAqLworCWZwdXQoZmlscCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNjMsNyArMTE5OCw3IEBACiAJc3RydWN0IGxvb3BfZGV2aWNlICpsbyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyOwogCi0JbXV0ZXhfbG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmxvLT5sb19jdGxfbXV0ZXgsIDEpOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBMT09QX1NFVF9GRDoKIAkJZXJyID0gbG9vcF9zZXRfZmQobG8sIG1vZGUsIGJkZXYsIGFyZyk7CkBAIC0xMTcyLDcgKzEyMDcsMTAgQEAKIAkJZXJyID0gbG9vcF9jaGFuZ2VfZmQobG8sIGJkZXYsIGFyZyk7CiAJCWJyZWFrOwogCWNhc2UgTE9PUF9DTFJfRkQ6CisJCS8qIGxvb3BfY2xyX2ZkIHdvdWxkIGhhdmUgdW5sb2NrZWQgbG9fY3RsX211dGV4IG9uIHN1Y2Nlc3MgKi8KIAkJZXJyID0gbG9vcF9jbHJfZmQobG8sIGJkZXYpOworCQlpZiAoIWVycikKKwkJCWdvdG8gb3V0X3VubG9ja2VkOwogCQlicmVhazsKIAljYXNlIExPT1BfU0VUX1NUQVRVUzoKIAkJZXJyID0gbG9vcF9zZXRfc3RhdHVzX29sZChsbywgKHN0cnVjdCBsb29wX2luZm8gX191c2VyICopIGFyZyk7CkBAIC0xMTkwLDYgKzEyMjgsOCBAQAogCQllcnIgPSBsby0+aW9jdGwgPyBsby0+aW9jdGwobG8sIGNtZCwgYXJnKSA6IC1FSU5WQUw7CiAJfQogCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisKK291dF91bmxvY2tlZDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMmNjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0uYwpAQCAtMCwwICsxLDk5NSBAQAorLyoKKyAqIERyaXZlciBmb3IgU1dJTSAoU2FuZGVyIFdveiBJbnRlZ3JhdGVkIE1hY2hpbmUpIGZsb3BweSBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgPExhdXJlbnRAbHZpdmllci5pbmZvPgorICoKKyAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKKyAqIGJhc2VkIG9uIFNXSU0zIGRyaXZlciAoYykgUGF1bCBNYWNrZXJyYXMsIDE5OTYKKyAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uCisgKiAyMDA4LTEwLTMwIChsdikgLSBQb3J0IHRvIDIuNgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNpbnRvc2guaD4KKyNpbmNsdWRlIDxhc20vbWFjX3ZpYS5oPgorCisjZGVmaW5lIENBUkROQU1FICJzd2ltIgorCitzdHJ1Y3Qgc2VjdG9yX2hlYWRlciB7CisJdW5zaWduZWQgY2hhciBzaWRlOworCXVuc2lnbmVkIGNoYXIgdHJhY2s7CisJdW5zaWduZWQgY2hhciBzZWN0b3I7CisJdW5zaWduZWQgY2hhciBzaXplOworCXVuc2lnbmVkIGNoYXIgY3JjMDsKKwl1bnNpZ25lZCBjaGFyIGNyYzE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJWZXJzaW9uIDAuMiAoMjAwOC0xMC0zMCkiCisKKyNkZWZpbmUgUkVHKHgpCXVuc2lnbmVkIGNoYXIgeCwgeCAjIyBfcGFkWzB4MjAwIC0gMV07CisKK3N0cnVjdCBzd2ltIHsKKwlSRUcod3JpdGVfZGF0YSkKKwlSRUcod3JpdGVfbWFyaykKKwlSRUcod3JpdGVfQ1JDKQorCVJFRyh3cml0ZV9wYXJhbWV0ZXIpCisJUkVHKHdyaXRlX3BoYXNlKQorCVJFRyh3cml0ZV9zZXR1cCkKKwlSRUcod3JpdGVfbW9kZTApCisJUkVHKHdyaXRlX21vZGUxKQorCisJUkVHKHJlYWRfZGF0YSkKKwlSRUcocmVhZF9tYXJrKQorCVJFRyhyZWFkX2Vycm9yKQorCVJFRyhyZWFkX3BhcmFtZXRlcikKKwlSRUcocmVhZF9waGFzZSkKKwlSRUcocmVhZF9zZXR1cCkKKwlSRUcocmVhZF9zdGF0dXMpCisJUkVHKHJlYWRfaGFuZHNoYWtlKQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBzd2ltX3dyaXRlKGJhc2UsIHJlZywgdikgCW91dF84KCYoYmFzZSktPndyaXRlXyMjcmVnLCAodikpCisjZGVmaW5lIHN3aW1fcmVhZChiYXNlLCByZWcpCQlpbl84KCYoYmFzZSktPnJlYWRfIyNyZWcpCisKKy8qIElXTSByZWdpc3RlcnMgKi8KKworc3RydWN0IGl3bSB7CisJUkVHKHBoMEwpCisJUkVHKHBoMEgpCisJUkVHKHBoMUwpCisJUkVHKHBoMUgpCisJUkVHKHBoMkwpCisJUkVHKHBoMkgpCisJUkVHKHBoM0wpCisJUkVHKHBoM0gpCisJUkVHKG10ck9mZikKKwlSRUcobXRyT24pCisJUkVHKGludERyaXZlKQorCVJFRyhleHREcml2ZSkKKwlSRUcocTZMKQorCVJFRyhxNkgpCisJUkVHKHE3TCkKKwlSRUcocTdIKQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBpd21fd3JpdGUoYmFzZSwgcmVnLCB2KSAJb3V0XzgoJihiYXNlKS0+cmVnLCAodikpCisjZGVmaW5lIGl3bV9yZWFkKGJhc2UsIHJlZykJCWluXzgoJihiYXNlKS0+cmVnKQorCisvKiBiaXRzIGluIHBoYXNlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgU0VFS19QT1NJVElWRQkweDA3MAorI2RlZmluZSBTRUVLX05FR0FUSVZFCTB4MDc0CisjZGVmaW5lIFNURVAJCTB4MDcxCisjZGVmaW5lIE1PVE9SX09OCTB4MDcyCisjZGVmaW5lIE1PVE9SX09GRgkweDA3NgorI2RlZmluZSBJTkRFWAkJMHgwNzMKKyNkZWZpbmUgRUpFQ1QJCTB4MDc3CisjZGVmaW5lIFNFVE1GTQkJMHgxNzEKKyNkZWZpbmUgU0VUR0NSCQkweDE3NQorCisjZGVmaW5lIFJFTEFYCQkweDAzMworI2RlZmluZSBMU1RSQgkJMHgwMDgKKworI2RlZmluZSBDQV9NQVNLCQkweDA3NworCisvKiBTZWxlY3QgdmFsdWVzIGZvciBzd2ltX3NlbGVjdCBhbmQgc3dpbV9yZWFkYml0ICovCisKKyNkZWZpbmUgUkVBRF9EQVRBXzAJMHgwNzQKKyNkZWZpbmUgVFdPTUVHX0RSSVZFCTB4MDc1CisjZGVmaW5lIFNJTkdMRV9TSURFRAkweDA3NgorI2RlZmluZSBEUklWRV9QUkVTRU5UCTB4MDc3CisjZGVmaW5lIERJU0tfSU4JCTB4MTcwCisjZGVmaW5lIFdSSVRFX1BST1QJMHgxNzEKKyNkZWZpbmUgVFJBQ0tfWkVSTwkweDE3MgorI2RlZmluZSBUQUNITwkJMHgxNzMKKyNkZWZpbmUgUkVBRF9EQVRBXzEJMHgxNzQKKyNkZWZpbmUgTUZNX01PREUJMHgxNzUKKyNkZWZpbmUgU0VFS19DT01QTEVURQkweDE3NgorI2RlZmluZSBPTkVNRUdfTUVESUEJMHgxNzcKKworLyogQml0cyBpbiBoYW5kc2hha2UgcmVnaXN0ZXIgKi8KKworI2RlZmluZSBNQVJLX0JZVEUJMHgwMQorI2RlZmluZSBDUkNfWkVSTwkweDAyCisjZGVmaW5lIFJEREFUQQkJMHgwNAorI2RlZmluZSBTRU5TRQkJMHgwOAorI2RlZmluZSBNT1RFTgkJMHgxMAorI2RlZmluZSBFUlJPUgkJMHgyMAorI2RlZmluZSBEQVQyQllURQkweDQwCisjZGVmaW5lIERBVDFCWVRFCTB4ODAKKworLyogYml0cyBpbiBzZXR1cCByZWdpc3RlciAqLworCisjZGVmaW5lIFNfSU5WX1dEQVRBCTB4MDEKKyNkZWZpbmUgU18zXzVfU0VMRUNUCTB4MDIKKyNkZWZpbmUgU19HQ1IJCTB4MDQKKyNkZWZpbmUgU19GQ0xLX0RJVjIJMHgwOAorI2RlZmluZSBTX0VSUk9SX0NPUlIJMHgxMAorI2RlZmluZSBTX0lCTV9EUklWRQkweDIwCisjZGVmaW5lIFNfR0NSX1dSSVRFCTB4NDAKKyNkZWZpbmUgU19USU1FT1VUCTB4ODAKKworLyogYml0cyBpbiBtb2RlIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgQ0xGSUZPCQkweDAxCisjZGVmaW5lIEVOQkwxCQkweDAyCisjZGVmaW5lIEVOQkwyCQkweDA0CisjZGVmaW5lIEFDVElPTgkJMHgwOAorI2RlZmluZSBXUklURV9NT0RFCTB4MTAKKyNkZWZpbmUgSEVEU0VMCQkweDIwCisjZGVmaW5lIE1PVE9OCQkweDgwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2VudW0gZHJpdmVfbG9jYXRpb24geworCUlOVEVSTkFMX0RSSVZFID0gMHgwMiwKKwlFWFRFUk5BTF9EUklWRSA9IDB4MDQsCit9OworCitlbnVtIG1lZGlhX3R5cGUgeworCUREX01FRElBLAorCUhEX01FRElBLAorfTsKKworc3RydWN0IGZsb3BweV9zdGF0ZSB7CisKKwkvKiBwaHlzaWNhbCBwcm9wZXJ0aWVzICovCisKKwllbnVtIGRyaXZlX2xvY2F0aW9uIGxvY2F0aW9uOwkvKiBpbnRlcm5hbCBvciBleHRlcm5hbCBkcml2ZSAqLworCWludAkJIGhlYWRfbnVtYmVyOwkvKiBzaW5nbGUtIG9yIGRvdWJsZS1zaWRlZCBkcml2ZSAqLworCisJLyogbWVkaWEgKi8KKworCWludAkJIGRpc2tfaW47CisJaW50CQkgZWplY3RlZDsKKwllbnVtIG1lZGlhX3R5cGUJIHR5cGU7CisJaW50CQkgd3JpdGVfcHJvdGVjdGVkOworCisJaW50CQkgdG90YWxfc2VjczsKKwlpbnQJCSBzZWNwZXJjeWw7CisJaW50CQkgc2VjcGVydHJhY2s7CisKKwkvKiBpbi11c2UgaW5mb3JtYXRpb24gKi8KKworCWludAkJdHJhY2s7CisJaW50CQlyZWZfY291bnQ7CisKKwlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKKworCS8qIHBhcmVudCBjb250cm9sbGVyICovCisKKwlzdHJ1Y3Qgc3dpbV9wcml2ICpzd2Q7Cit9OworCitlbnVtIG1vdG9yX2FjdGlvbiB7CisJT0ZGLAorCU9OLAorfTsKKworZW51bSBoZWFkIHsKKwlMT1dFUl9IRUFEID0gMCwKKwlVUFBFUl9IRUFEID0gMSwKK307CisKKyNkZWZpbmUgRkRfTUFYX1VOSVQJMgorCitzdHJ1Y3Qgc3dpbV9wcml2IHsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcXVldWU7CisJaW50IGZsb3BweV9jb3VudDsKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlIHVuaXRbRkRfTUFYX1VOSVRdOworfTsKKworZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLAorCQkJCSAgIHN0cnVjdCBzZWN0b3JfaGVhZGVyICpoZWFkZXIpOworZXh0ZXJuIGludCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCQkgdW5zaWduZWQgY2hhciAqZGF0YSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBlbmFibGUpCit7CisJc3RydWN0IGl3bSBfX2lvbWVtICppd21fYmFzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFlbmFibGUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgMHhmOCk7CisJCXJldHVybjsKKwl9CisKKwlpd21fYmFzZSA9IChzdHJ1Y3QgaXdtIF9faW9tZW0gKiliYXNlOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWl3bV9yZWFkKGl3bV9iYXNlLCBxN0wpOworCWl3bV9yZWFkKGl3bV9iYXNlLCBtdHJPZmYpOworCWl3bV9yZWFkKGl3bV9iYXNlLCBxNkgpOworCisJaXdtX3dyaXRlKGl3bV9iYXNlLCBxN0gsIDB4NTcpOworCWl3bV93cml0ZShpd21fYmFzZSwgcTdILCAweDE3KTsKKwlpd21fd3JpdGUoaXdtX2Jhc2UsIHE3SCwgMHg1Nyk7CisJaXdtX3dyaXRlKGl3bV9iYXNlLCBxN0gsIDB4NTcpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRfc3dpbV9tb2RlKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjUpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjUpCisJCWdvdG8gaXNfaXdtOworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjYpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjYpCisJCWdvdG8gaXNfaXdtOworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIDB4ZjcpOworCWlmIChzd2ltX3JlYWQoYmFzZSwgcGhhc2UpICE9IDB4ZjcpCisJCWdvdG8gaXNfaXdtOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyZXR1cm4gMTsKK2lzX2l3bToKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX3NlbGVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgc2VsKQoreworCXN3aW1fd3JpdGUoYmFzZSwgcGhhc2UsIFJFTEFYKTsKKworCXZpYTFfc2V0X2hlYWQoc2VsICYgMHgxMDApOworCisJc3dpbV93cml0ZShiYXNlLCBwaGFzZSwgc2VsICYgQ0FfTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2FjdGlvbihzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLCBpbnQgYWN0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzd2ltX3NlbGVjdChiYXNlLCBhY3Rpb24pOworCXVkZWxheSgxKTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkI8PDQpIHwgTFNUUkIpOworCXVkZWxheSgxKTsKKwlzd2ltX3dyaXRlKGJhc2UsIHBoYXNlLCAoTFNUUkI8PDQpIHwgKCh+TFNUUkIpICYgMHgwRikpOworCXVkZWxheSgxKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV9yZWFkYml0KHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBiaXQpCit7CisJaW50IHN0YXQ7CisKKwlzd2ltX3NlbGVjdChiYXNlLCBiaXQpOworCisJdWRlbGF5KDEwKTsKKworCXN0YXQgPSBzd2ltX3JlYWQoYmFzZSwgaGFuZHNoYWtlKTsKKworCXJldHVybiAoc3RhdCAmIFNFTlNFKSA9PSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9kcml2ZShzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlLAorCQkJICAgICAgZW51bSBkcml2ZV9sb2NhdGlvbiBsb2NhdGlvbikKK3sKKwlpZiAobG9jYXRpb24gPT0gSU5URVJOQUxfRFJJVkUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgRVhURVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAxIGJpdCAqLworCQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBJTlRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAwIGJpdCAqLworCX0gZWxzZSBpZiAobG9jYXRpb24gPT0gRVhURVJOQUxfRFJJVkUpIHsKKwkJc3dpbV93cml0ZShiYXNlLCBtb2RlMCwgSU5URVJOQUxfRFJJVkUpOyAvKiBjbGVhciBkcml2ZSAwIGJpdCAqLworCQlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBFWFRFUk5BTF9EUklWRSk7IC8qIHNldCBkcml2ZSAxIGJpdCAqLworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3aW1fbW90b3Ioc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwKKwkJCSAgICAgIGVudW0gbW90b3JfYWN0aW9uIGFjdGlvbikKK3sKKwlpZiAoYWN0aW9uID09IE9OKSB7CisJCWludCBpOworCisJCXN3aW1fYWN0aW9uKGJhc2UsIE1PVE9SX09OKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMipIWjsgaSsrKSB7CisJCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCQlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIE1PVE9SX09OKSkKKwkJCQlicmVhazsKKwkJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKKwkJfQorCX0gZWxzZSBpZiAoYWN0aW9uID09IE9GRikgeworCQlzd2ltX2FjdGlvbihiYXNlLCBNT1RPUl9PRkYpOworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dpbV9lamVjdChzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlKQoreworCWludCBpOworCisJc3dpbV9hY3Rpb24oYmFzZSwgRUpFQ1QpOworCisJZm9yIChpID0gMDsgaSA8IDIqSFo7IGkrKykgeworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCWlmICghc3dpbV9yZWFkYml0KGJhc2UsIERJU0tfSU4pKQorCQkJYnJlYWs7CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCX0KKwlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzd2ltX2hlYWQoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSwgZW51bSBoZWFkIGhlYWQpCit7CisJLyogd2FpdCBkcml2ZSBpcyByZWFkeSAqLworCisJaWYgKGhlYWQgPT0gVVBQRVJfSEVBRCkKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzEpOworCWVsc2UgaWYgKGhlYWQgPT0gTE9XRVJfSEVBRCkKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVBRF9EQVRBXzApOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd2ltX3N0ZXAoc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSkKK3sKKwlpbnQgd2FpdDsKKworCXN3aW1fYWN0aW9uKGJhc2UsIFNURVApOworCisJZm9yICh3YWl0ID0gMDsgd2FpdCA8IEhaOyB3YWl0KyspIHsKKworCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwkJc2NoZWR1bGVfdGltZW91dCgxKTsKKworCQlzd2ltX3NlbGVjdChiYXNlLCBSRUxBWCk7CisJCWlmICghc3dpbV9yZWFkYml0KGJhc2UsIFNURVApKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV90cmFjazAwKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UpCit7CisJaW50IHRyeTsKKworCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfTkVHQVRJVkUpOworCisJZm9yICh0cnkgPSAwOyB0cnkgPCAxMDA7IHRyeSsrKSB7CisKKwkJc3dpbV9zZWxlY3QoYmFzZSwgUkVMQVgpOworCQlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKQorCQkJYnJlYWs7CisKKwkJaWYgKHN3aW1fc3RlcChiYXNlKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIFRSQUNLX1pFUk8pKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAtMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3dpbV9zZWVrKHN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UsIGludCBzdGVwKQoreworCWlmIChzdGVwID09IDApCisJCXJldHVybiAwOworCisJaWYgKHN0ZXAgPCAwKSB7CisJCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfTkVHQVRJVkUpOworCQlzdGVwID0gLXN0ZXA7CisJfSBlbHNlCisJCXN3aW1fYWN0aW9uKGJhc2UsIFNFRUtfUE9TSVRJVkUpOworCisJZm9yICggOyBzdGVwID4gMDsgc3RlcC0tKSB7CisJCWlmIChzd2ltX3N0ZXAoYmFzZSkpCisJCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fdHJhY2soc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsICBpbnQgdHJhY2spCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisJaW50IHJldDsKKworCXJldCA9IHN3aW1fc2VlayhiYXNlLCB0cmFjayAtIGZzLT50cmFjayk7CisKKwlpZiAocmV0ID09IDApCisJCWZzLT50cmFjayA9IHRyYWNrOworCWVsc2UgeworCQlzd2ltX3RyYWNrMDAoYmFzZSk7CisJCWZzLT50cmFjayA9IDA7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmbG9wcHlfZWplY3Qoc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisKKwlzd2ltX2RyaXZlKGJhc2UsIGZzLT5sb2NhdGlvbik7CisJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCXN3aW1fZWplY3QoYmFzZSk7CisKKwlmcy0+ZGlza19pbiA9IDA7CisJZnMtPmVqZWN0ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3aW1fcmVhZF9zZWN0b3Ioc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMsCisJCQkJICAgaW50IHNpZGUsIGludCB0cmFjaywKKwkJCQkgICBpbnQgc2VjdG9yLCB1bnNpZ25lZCBjaGFyICpidWZmZXIpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2VjdG9yX2hlYWRlciBoZWFkZXI7CisJaW50IHJldCA9IC0xOworCXNob3J0IGk7CisKKwlzd2ltX3RyYWNrKGZzLCB0cmFjayk7CisKKwlzd2ltX3dyaXRlKGJhc2UsIG1vZGUxLCBNT1RPTik7CisJc3dpbV9oZWFkKGJhc2UsIHNpZGUpOworCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIHNpZGUpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCAzNjsgaSsrKSB7CisJCXJldCA9IHN3aW1fcmVhZF9zZWN0b3JfaGVhZGVyKGJhc2UsICZoZWFkZXIpOworCQlpZiAoIXJldCAmJiAoaGVhZGVyLnNlY3RvciA9PSBzZWN0b3IpKSB7CisJCQkvKiBmb3VuZCAqLworCisJCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yX2RhdGEoYmFzZSwgYnVmZmVyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXN3aW1fd3JpdGUoYmFzZSwgbW9kZTAsIE1PVE9OKTsKKworCWlmICgoaGVhZGVyLnNpZGUgIT0gc2lkZSkgIHx8IChoZWFkZXIudHJhY2sgIT0gdHJhY2spIHx8CisJICAgICAoaGVhZGVyLnNlY3RvciAhPSBzZWN0b3IpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X3JlYWRfc2VjdG9ycyhzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywKKwkJCSAgICAgICBpbnQgcmVxX3NlY3RvciwgaW50IHNlY3RvcnNfbmIsCisJCQkgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCWludCByZXQ7CisJaW50IHNpZGUsIHRyYWNrLCBzZWN0b3I7CisJaW50IGksIHRyeTsKKworCisJc3dpbV9kcml2ZShiYXNlLCBmcy0+bG9jYXRpb24pOworCWZvciAoaSA9IHJlcV9zZWN0b3I7IGkgPCByZXFfc2VjdG9yICsgc2VjdG9yc19uYjsgaSsrKSB7CisJCWludCB4OworCQl0cmFjayA9IGkgLyBmcy0+c2VjcGVyY3lsOworCQl4ID0gaSAlIGZzLT5zZWNwZXJjeWw7CisJCXNpZGUgPSB4IC8gZnMtPnNlY3BlcnRyYWNrOworCQlzZWN0b3IgPSB4ICUgZnMtPnNlY3BlcnRyYWNrICsgMTsKKworCQl0cnkgPSA1OworCQlkbyB7CisJCQlyZXQgPSBzd2ltX3JlYWRfc2VjdG9yKGZzLCBzaWRlLCB0cmFjaywgc2VjdG9yLAorCQkJCQkJYnVmZmVyKTsKKwkJCWlmICh0cnktLSA9PSAwKQorCQkJCXJldHVybiAtMTsKKwkJfSB3aGlsZSAocmV0ICE9IDUxMik7CisKKwkJYnVmZmVyICs9IHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVkb19mZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQoreworCXN0cnVjdCByZXF1ZXN0ICpyZXE7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnM7CisKKwl3aGlsZSAoKHJlcSA9IGVsdl9uZXh0X3JlcXVlc3QocSkpKSB7CisKKwkJZnMgPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKKwkJaWYgKHJlcS0+c2VjdG9yIDwgMCB8fCByZXEtPnNlY3RvciA+PSBmcy0+dG90YWxfc2VjcykgeworCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChyZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9PSAwKSB7CisJCQllbmRfcmVxdWVzdChyZXEsIDEpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKCFmcy0+ZGlza19pbikgeworCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChycV9kYXRhX2RpcihyZXEpID09IFdSSVRFKSB7CisJCQlpZiAoZnMtPndyaXRlX3Byb3RlY3RlZCkgeworCQkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJc3dpdGNoIChycV9kYXRhX2RpcihyZXEpKSB7CisJCWNhc2UgV1JJVEU6CisJCQkvKiBOT1QgSU1QTEVNRU5URUQgKi8KKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSBSRUFEOgorCQkJaWYgKGZsb3BweV9yZWFkX3NlY3RvcnMoZnMsIHJlcS0+c2VjdG9yLAorCQkJCQkJcmVxLT5jdXJyZW50X25yX3NlY3RvcnMsCisJCQkJCQlyZXEtPmJ1ZmZlcikpIHsKKwkJCQllbmRfcmVxdWVzdChyZXEsIDApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcmVxLT5ucl9zZWN0b3JzIC09IHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzOworCQkJcmVxLT5zZWN0b3IgKz0gcmVxLT5jdXJyZW50X25yX3NlY3RvcnM7CisJCQlyZXEtPmJ1ZmZlciArPSByZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyAqIDUxMjsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZG9fZmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlyZWRvX2ZkX3JlcXVlc3QocSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCBmbG9wcHlfdHlwZVs0XSA9IHsKKwl7ICAgIDAsICAwLCAwLCAgMCwgMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgTlVMTCB9LCAvKiBubyB0ZXN0aW5nICAgKi8KKwl7ICA3MjAsICA5LCAxLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiAzNjBLQiBTUyAzLjUiKi8KKwl7IDE0NDAsICA5LCAyLCA4MCwgMCwgMHgyQSwgMHgwMiwgMHhERiwgMHg1MCwgTlVMTCB9LCAvKiA3MjBLQiAzLjUiICAgKi8KKwl7IDI4ODAsIDE4LCAyLCA4MCwgMCwgMHgxQiwgMHgwMCwgMHhDRiwgMHg2QywgTlVMTCB9LCAvKiAxLjQ0TUIgMy41IiAgKi8KK307CisKK3N0YXRpYyBpbnQgZ2V0X2Zsb3BweV9nZW9tZXRyeShzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcywgaW50IHR5cGUsCisJCQkgICAgICAgc3RydWN0IGZsb3BweV9zdHJ1Y3QgKipnKQoreworCWlmICh0eXBlID49IEFSUkFZX1NJWkUoZmxvcHB5X3R5cGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0eXBlKQorCQkqZyA9ICZmbG9wcHlfdHlwZVt0eXBlXTsKKwllbHNlIGlmIChmcy0+dHlwZSA9PSBIRF9NRURJQSkgLyogSGlnaC1EZW5zaXR5IG1lZGlhICovCisJCSpnID0gJmZsb3BweV90eXBlWzNdOworCWVsc2UgaWYgKGZzLT5oZWFkX251bWJlciA9PSAyKSAvKiBkb3VibGUtc2lkZWQgKi8KKwkJKmcgPSAmZmxvcHB5X3R5cGVbMl07CisJZWxzZQorCQkqZyA9ICZmbG9wcHlfdHlwZVsxXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9tZWRpdW0oc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMpCit7CisJc3RydWN0IHN3aW0gX19pb21lbSAqYmFzZSA9IGZzLT5zd2QtPmJhc2U7CisKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIERJU0tfSU4pKSB7CisJCXN0cnVjdCBmbG9wcHlfc3RydWN0ICpnOworCQlmcy0+ZGlza19pbiA9IDE7CisJCWZzLT53cml0ZV9wcm90ZWN0ZWQgPSBzd2ltX3JlYWRiaXQoYmFzZSwgV1JJVEVfUFJPVCk7CisJCWZzLT50eXBlID0gc3dpbV9yZWFkYml0KGJhc2UsIE9ORU1FR19NRURJQSk7CisKKwkJaWYgKHN3aW1fdHJhY2swMChiYXNlKSkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJCSJTV0lNOiBjYW5ub3QgbW92ZSBmbG9wcHkgaGVhZCB0byB0cmFjayAwXG4iKTsKKworCQlzd2ltX3RyYWNrMDAoYmFzZSk7CisKKwkJZ2V0X2Zsb3BweV9nZW9tZXRyeShmcywgMCwgJmcpOworCQlmcy0+dG90YWxfc2VjcyA9IGctPnNpemU7CisJCWZzLT5zZWNwZXJjeWwgPSBnLT5oZWFkICogZy0+c2VjdDsKKwkJZnMtPnNlY3BlcnRyYWNrID0gZy0+c2VjdDsKKwkJZnMtPnRyYWNrID0gMDsKKwl9IGVsc2UgeworCQlmcy0+ZGlza19pbiA9IDA7CisJfQorfQorCitzdGF0aWMgaW50IGZsb3BweV9vcGVuKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSkKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKwlpbnQgZXJyOworCisJaWYgKGZzLT5yZWZfY291bnQgPT0gLTEgfHwgKGZzLT5yZWZfY291bnQgJiYgbW9kZSAmIEZNT0RFX0VYQ0wpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKG1vZGUgJiBGTU9ERV9FWENMKQorCQlmcy0+cmVmX2NvdW50ID0gLTE7CisJZWxzZQorCQlmcy0+cmVmX2NvdW50Kys7CisKKwlzd2ltX3dyaXRlKGJhc2UsIHNldHVwLCBTX0lCTV9EUklWRSAgfCBTX0ZDTEtfRElWMik7CisJdWRlbGF5KDEwKTsKKwlzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTsKKwlzd2ltX21vdG9yKGJhc2UsIE9OKTsKKwlzd2ltX2FjdGlvbihiYXNlLCBTRVRNRk0pOworCWlmIChmcy0+ZWplY3RlZCkKKwkJc2V0dXBfbWVkaXVtKGZzKTsKKwlpZiAoIWZzLT5kaXNrX2luKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1vZGUgJiBGTU9ERV9OREVMQVkpCisJCXJldHVybiAwOworCisJaWYgKG1vZGUgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSkpIHsKKwkJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CisJCWlmICgobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiBmcy0+d3JpdGVfcHJvdGVjdGVkKSB7CisJCQllcnIgPSAtRVJPRlM7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK291dDoKKwlpZiAoZnMtPnJlZl9jb3VudCA8IDApCisJCWZzLT5yZWZfY291bnQgPSAwOworCWVsc2UgaWYgKGZzLT5yZWZfY291bnQgPiAwKQorCQktLWZzLT5yZWZfY291bnQ7CisKKwlpZiAoZnMtPnJlZl9jb3VudCA9PSAwKQorCQlzd2ltX21vdG9yKGJhc2UsIE9GRik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBmbG9wcHlfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBmbG9wcHlfc3RhdGUgKmZzID0gZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzd2ltIF9faW9tZW0gKmJhc2UgPSBmcy0+c3dkLT5iYXNlOworCisJaWYgKGZzLT5yZWZfY291bnQgPCAwKQorCQlmcy0+cmVmX2NvdW50ID0gMDsKKwllbHNlIGlmIChmcy0+cmVmX2NvdW50ID4gMCkKKwkJLS1mcy0+cmVmX2NvdW50OworCisJaWYgKGZzLT5yZWZfY291bnQgPT0gMCkKKwkJc3dpbV9tb3RvcihiYXNlLCBPRkYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2lvY3RsKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGZtb2RlX3QgbW9kZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgcGFyYW0pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCWlmICgoY21kICYgMHg4MCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEZERUpFQ1Q6CisJCWlmIChmcy0+cmVmX2NvdW50ICE9IDEpCisJCQlyZXR1cm4gLUVCVVNZOworCQllcnIgPSBmbG9wcHlfZWplY3QoZnMpOworCQlyZXR1cm4gZXJyOworCisJY2FzZSBGREdFVFBSTToKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgcGFyYW0sICh2b2lkICopICZmbG9wcHlfdHlwZSwKKwkJCQkgc2l6ZW9mKHN0cnVjdCBmbG9wcHlfc3RydWN0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyAiU1dJTSBmbG9wcHlfaW9jdGw6IHVua25vd24gY21kICVkXG4iLAorCQkgICAgICAgY21kKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZsb3BweV9nZXRnZW8oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGZsb3BweV9zdHJ1Y3QgKmc7CisJaW50IHJldDsKKworCXJldCA9IGdldF9mbG9wcHlfZ2VvbWV0cnkoZnMsIDAsICZnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ2VvLT5oZWFkcyA9IGctPmhlYWQ7CisJZ2VvLT5zZWN0b3JzID0gZy0+c2VjdDsKKwlnZW8tPmN5bGluZGVycyA9IGctPnRyYWNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxvcHB5X2NoZWNrX2NoYW5nZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGRpc2stPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBmcy0+ZWplY3RlZDsKK30KKworc3RhdGljIGludCBmbG9wcHlfcmV2YWxpZGF0ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwlzdHJ1Y3QgZmxvcHB5X3N0YXRlICpmcyA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gZnMtPnN3ZC0+YmFzZTsKKworCXN3aW1fZHJpdmUoYmFzZSwgZnMtPmxvY2F0aW9uKTsKKworCWlmIChmcy0+ZWplY3RlZCkKKwkJc2V0dXBfbWVkaXVtKGZzKTsKKworCWlmICghZnMtPmRpc2tfaW4pCisJCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKwllbHNlCisJCWZzLT5lamVjdGVkID0gMDsKKworCXJldHVybiAhZnMtPmRpc2tfaW47Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgZmxvcHB5X2ZvcHMgPSB7CisJLm93bmVyCQkgPSBUSElTX01PRFVMRSwKKwkub3BlbgkJID0gZmxvcHB5X29wZW4sCisJLnJlbGVhc2UJID0gZmxvcHB5X3JlbGVhc2UsCisJLmxvY2tlZF9pb2N0bAkgPSBmbG9wcHlfaW9jdGwsCisJLmdldGdlbwkJID0gZmxvcHB5X2dldGdlbywKKwkubWVkaWFfY2hhbmdlZAkgPSBmbG9wcHlfY2hlY2tfY2hhbmdlLAorCS5yZXZhbGlkYXRlX2Rpc2sgPSBmbG9wcHlfcmV2YWxpZGF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqZmxvcHB5X2ZpbmQoZGV2X3QgZGV2LCBpbnQgKnBhcnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkID0gZGF0YTsKKwlpbnQgZHJpdmUgPSAoKnBhcnQgJiAzKTsKKworCWlmIChkcml2ZSA+IHN3ZC0+ZmxvcHB5X2NvdW50KQorCQlyZXR1cm4gTlVMTDsKKworCSpwYXJ0ID0gMDsKKwlyZXR1cm4gZ2V0X2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc3dpbV9hZGRfZmxvcHB5KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCwKKwkJCQkgICAgIGVudW0gZHJpdmVfbG9jYXRpb24gbG9jYXRpb24pCit7CisJc3RydWN0IGZsb3BweV9zdGF0ZSAqZnMgPSAmc3dkLT51bml0W3N3ZC0+ZmxvcHB5X2NvdW50XTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLT5iYXNlOworCisJZnMtPmxvY2F0aW9uID0gbG9jYXRpb247CisKKwlzd2ltX2RyaXZlKGJhc2UsIGxvY2F0aW9uKTsKKworCXN3aW1fbW90b3IoYmFzZSwgT0ZGKTsKKworCWlmIChzd2ltX3JlYWRiaXQoYmFzZSwgU0lOR0xFX1NJREVEKSkKKwkJZnMtPmhlYWRfbnVtYmVyID0gMTsKKwllbHNlCisJCWZzLT5oZWFkX251bWJlciA9IDI7CisJZnMtPnJlZl9jb3VudCA9IDA7CisJZnMtPmVqZWN0ZWQgPSAxOworCisJc3dkLT5mbG9wcHlfY291bnQrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzd2ltX2Zsb3BweV9pbml0KHN0cnVjdCBzd2ltX3ByaXYgKnN3ZCkKK3sKKwlpbnQgZXJyOworCWludCBkcml2ZTsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpiYXNlID0gc3dkLT5iYXNlOworCisJLyogc2NhbiBmbG9wcHkgZHJpdmVzICovCisKKwlzd2ltX2RyaXZlKGJhc2UsIElOVEVSTkFMX0RSSVZFKTsKKwlpZiAoc3dpbV9yZWFkYml0KGJhc2UsIERSSVZFX1BSRVNFTlQpKQorCQlzd2ltX2FkZF9mbG9wcHkoc3dkLCBJTlRFUk5BTF9EUklWRSk7CisJc3dpbV9kcml2ZShiYXNlLCBFWFRFUk5BTF9EUklWRSk7CisJaWYgKHN3aW1fcmVhZGJpdChiYXNlLCBEUklWRV9QUkVTRU5UKSkKKwkJc3dpbV9hZGRfZmxvcHB5KHN3ZCwgRVhURVJOQUxfRFJJVkUpOworCisJLyogcmVnaXN0ZXIgZmxvcHB5IGRyaXZlcyAqLworCisJZXJyID0gcmVnaXN0ZXJfYmxrZGV2KEZMT1BQWV9NQUpPUiwgImZkIik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIFNXSU0gZmxvcHB5XG4iLAorCQkgICAgICAgRkxPUFBZX01BSk9SKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykgeworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2sgPSBhbGxvY19kaXNrKDEpOworCQlpZiAoc3dkLT51bml0W2RyaXZlXS5kaXNrID09IE5VTEwpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGV4aXRfcHV0X2Rpc2tzOworCQl9CisJCXN3ZC0+dW5pdFtkcml2ZV0uc3dkID0gc3dkOworCX0KKworCXN3ZC0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19mZF9yZXF1ZXN0LCAmc3dkLT5sb2NrKTsKKwlpZiAoIXN3ZC0+cXVldWUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBleGl0X3B1dF9kaXNrczsKKwl9CisKKwlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBzd2QtPmZsb3BweV9jb3VudDsgZHJpdmUrKykgeworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZsYWdzID0gR0VOSERfRkxfUkVNT1ZBQkxFOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPm1ham9yID0gRkxPUFBZX01BSk9SOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZpcnN0X21pbm9yID0gZHJpdmU7CisJCXNwcmludGYoc3dkLT51bml0W2RyaXZlXS5kaXNrLT5kaXNrX25hbWUsICJmZCVkIiwgZHJpdmUpOworCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+cHJpdmF0ZV9kYXRhID0gJnN3ZC0+dW5pdFtkcml2ZV07CisJCXN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+cXVldWUgPSBzd2QtPnF1ZXVlOworCQlzZXRfY2FwYWNpdHkoc3dkLT51bml0W2RyaXZlXS5kaXNrLCAyODgwKTsKKwkJYWRkX2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKKwl9CisKKwlibGtfcmVnaXN0ZXJfcmVnaW9uKE1LREVWKEZMT1BQWV9NQUpPUiwgMCksIDI1NiwgVEhJU19NT0RVTEUsCisJCQkgICAgZmxvcHB5X2ZpbmQsIE5VTEwsIHN3ZCk7CisKKwlyZXR1cm4gMDsKKworZXhpdF9wdXRfZGlza3M6CisJdW5yZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKTsKKwl3aGlsZSAoZHJpdmUtLSkKKwkJcHV0X2Rpc2soc3dkLT51bml0W2RyaXZlXS5kaXNrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzd2ltX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3Qgc3dpbSBfX2lvbWVtICpzd2ltX2Jhc2U7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKGRldiwgSU9SRVNPVVJDRV9NRU0sICJzd2ltLXJlZ3MiKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIENBUkROQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXN3aW1fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXN3aW1fYmFzZSkgeworCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXRfcmVsZWFzZV9pbzsKKwl9CisKKwkvKiBwcm9iZSBkZXZpY2UgKi8KKworCXNldF9zd2ltX21vZGUoc3dpbV9iYXNlLCAxKTsKKwlpZiAoIWdldF9zd2ltX21vZGUoc3dpbV9iYXNlKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJTV0lNIGRldmljZSBub3QgZm91bmQgIVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2lvdW5tYXA7CisJfQorCisJLyogc2V0IHBsYXRmb3JtIGRyaXZlciBkYXRhICovCisKKwlzd2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3dpbV9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzd2QpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfaW91bm1hcDsKKwl9CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBzd2QpOworCisJc3dkLT5iYXNlID0gc3dpbV9iYXNlOworCisJcmV0ID0gc3dpbV9mbG9wcHlfaW5pdChzd2QpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2tmcmVlOworCisJcmV0dXJuIDA7CisKK291dF9rZnJlZToKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKHN3ZCk7CitvdXRfaW91bm1hcDoKKwlpb3VubWFwKHN3aW1fYmFzZSk7CitvdXRfcmVsZWFzZV9pbzoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzd2ltX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHN3aW1fcHJpdiAqc3dkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZHJpdmU7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlibGtfdW5yZWdpc3Rlcl9yZWdpb24oTUtERVYoRkxPUFBZX01BSk9SLCAwKSwgMjU2KTsKKworCWZvciAoZHJpdmUgPSAwOyBkcml2ZSA8IHN3ZC0+ZmxvcHB5X2NvdW50OyBkcml2ZSsrKSB7CisJCWRlbF9nZW5kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJCXB1dF9kaXNrKHN3ZC0+dW5pdFtkcml2ZV0uZGlzayk7CisJfQorCisJdW5yZWdpc3Rlcl9ibGtkZXYoRkxPUFBZX01BSk9SLCAiZmQiKTsKKworCWJsa19jbGVhbnVwX3F1ZXVlKHN3ZC0+cXVldWUpOworCisJLyogZWplY3QgZmxvcHBpZXMgKi8KKworCWZvciAoZHJpdmUgPSAwOyBkcml2ZSA8IHN3ZC0+ZmxvcHB5X2NvdW50OyBkcml2ZSsrKQorCQlmbG9wcHlfZWplY3QoJnN3ZC0+dW5pdFtkcml2ZV0pOworCisJaW91bm1hcChzd2QtPmJhc2UpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShkZXYsIElPUkVTT1VSQ0VfTUVNLCAic3dpbS1yZWdzIik7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWtmcmVlKHN3ZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3dpbV9kcml2ZXIgPSB7CisJLnByb2JlICA9IHN3aW1fcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHN3aW1fcmVtb3ZlKSwKKwkuZHJpdmVyICAgPSB7CisJCS5uYW1lCT0gQ0FSRE5BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzd2ltX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJTV0lNIGZsb3BweSBkcml2ZXIgJXNcbiIsIERSSVZFUl9WRVJTSU9OKTsKKworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnN3aW1fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KHN3aW1faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzd2ltX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc3dpbV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoc3dpbV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFNXSU0gZmxvcHB5IGNvbnRyb2xsZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkxhdXJlbnQgVml2aWVyIDxsYXVyZW50QGx2aXZpZXIuaW5mbz4iKTsKK01PRFVMRV9BTElBU19CTE9DS0RFVl9NQUpPUihGTE9QUFlfTUFKT1IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TIGIvZHJpdmVycy9ibG9jay9zd2ltX2FzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NjY4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW1fYXNtLlMKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiBsb3ctbGV2ZWwgZnVuY3Rpb25zIGZvciB0aGUgU1dJTSBmbG9wcHkgY29udHJvbGxlcgorICoKKyAqIG5lZWRzIGFzc2VtYmx5IGxhbmd1YWdlIGJlY2F1c2UgaXMgdmVyeSB0aW1pbmcgZGVwZW5kZW50CisgKiB0aGlzIGNvbnRyb2xsZXIgZXhpc3RzIG9ubHkgb24gbWFjaW50b3NoIDY4MHgwIGJhc2VkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDggTGF1cmVudCBWaXZpZXIgPExhdXJlbnRAbHZpdmllci5pbmZvPgorICoKKyAqIGJhc2VkIG9uIEFsYXN0YWlyIEJyaWRnZXdhdGVyIFNXSU0gYW5hbHlzaXMsIDIwMDEKKyAqIGJhc2VkIG9uIG5ldEJTRCBJV00gZHJpdmVyIChjKSAxOTk3LCAxOTk4IEhhdWtlIEZhdGguCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAyMDA0LTA4LTIxIChsdikgLSBJbml0aWFsIGltcGxlbWVudGF0aW9uCisgKiAyMDA4LTExLTA1IChsdikgLSBhZGQgZ2V0X3N3aW1fbW9kZQorICovCisKKwkuZXF1CXdyaXRlX2RhdGEsCTB4MDAwMAorCS5lcXUJd3JpdGVfbWFyaywJMHgwMjAwCisJLmVxdQl3cml0ZV9DUkMsCTB4MDQwMAorCS5lcXUJd3JpdGVfcGFyYW1ldGVyLDB4MDYwMAorCS5lcXUJd3JpdGVfcGhhc2UsCTB4MDgwMAorCS5lcXUJd3JpdGVfc2V0dXAsCTB4MGEwMAorCS5lcXUJd3JpdGVfbW9kZTAsCTB4MGMwMAorCS5lcXUJd3JpdGVfbW9kZTEsCTB4MGUwMAorCS5lcXUJcmVhZF9kYXRhLAkweDEwMDAKKwkuZXF1CXJlYWRfbWFyaywJMHgxMjAwCisJLmVxdQlyZWFkX2Vycm9yLAkweDE0MDAKKwkuZXF1CXJlYWRfcGFyYW1ldGVyLAkweDE2MDAKKwkuZXF1CXJlYWRfcGhhc2UsCTB4MTgwMAorCS5lcXUJcmVhZF9zZXR1cCwJMHgxYTAwCisJLmVxdQlyZWFkX3N0YXR1cywJMHgxYzAwCisJLmVxdQlyZWFkX2hhbmRzaGFrZSwJMHgxZTAwCisKKwkuZXF1CW9fc2lkZSwgMAorCS5lcXUJb190cmFjaywgMQorCS5lcXUJb19zZWN0b3IsIDIKKwkuZXF1CW9fc2l6ZSwgMworCS5lcXUJb19jcmMwLCA0CisJLmVxdQlvX2NyYzEsIDUKKworCS5lcXUJc2Vla190aW1lLCAzMDAwMAorCS5lcXUJbWF4X3JldHJ5LCA0MAorCS5lcXUJc2VjdG9yX3NpemUsIDUxMgorCisJLmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2hlYWRlcgorc3dpbV9yZWFkX3NlY3Rvcl9oZWFkZXI6CisJbGluawklYTYsICMwCisJbW92ZW1sCSVkMS0lZDUvJWEwLSVhNCwlc3BALQorCW1vdmVsCSVhNkAoMHgwYyksICVhNAorCWJzcgltZm1fcmVhZF9hZGRybWFyaworCW1vdmVtbAklc3BAKywgJWQxLSVkNS8lYTAtJWE0CisJdW5sawklYTYKKwlydHMKKworc2VjdG9yX2FkZHJlc3NfbWFyazoKKwkuYnl0ZQkweGExLCAweGExLCAweGExLCAweGZlCitzZWN0b3JfZGF0YV9tYXJrOgorCS5ieXRlCTB4YTEsIDB4YTEsIDB4YTEsIDB4ZmIKKworbWZtX3JlYWRfYWRkcm1hcms6CisJbW92ZWwJJWE2QCgweDA4KSwgJWEzCisJbGVhCSVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTIKKwlsZWEJJWEzQChyZWFkX21hcmspLCAlYTMKKwltb3ZlcQkjLTEsICVkMAorCW1vdmV3CSNzZWVrX3RpbWUsICVkMgorCit3YWl0X2hlYWRlcl9pbml0OgorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDAxLCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCW1vdmViCSMweDA4LCAlYTNAKHdyaXRlX21vZGUxIC0gcmVhZF9tYXJrKQorCisJbGVhCXNlY3Rvcl9hZGRyZXNzX21hcmssICVhMAorCW1vdmVxCSMzLCAlZDEKKword2FpdF9hZGRyX21hcmtfYnl0ZToKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCB3YWl0X2FkZHJfbWFya19ieXRlCisJYnBsCWhlYWRlcl9leGl0CisKKwltb3ZlYgklYTNALCAlZDMKKwljbXBiCSVhMEArLCAlZDMKKwlkYm5lCSVkMSwgd2FpdF9hZGRyX21hcmtfYnl0ZQorCWJuZQl3YWl0X2hlYWRlcl9pbml0CisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworYW1hcmswOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgYW1hcmswCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX3RyYWNrKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMToJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMQorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19zaWRlKQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2FtYXJrMjoJdHN0YgklYTJACisJZGJtaQklZDIsIGFtYXJrMgorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19zZWN0b3IpCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworYW1hcmszOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgYW1hcmszCisJYnBsCXNpZ25hbF9ub255YgorCisJbW92ZWIJJWEzQCwgJWE0QChvX3NpemUpCisKKwltb3ZlcQkjbWF4X3JldHJ5LCAlZDIKKworY3JjMDoJdHN0YgklYTJACisJZGJtaQklZDIsIGNyYzAKKwlicGwJc2lnbmFsX25vbnliCisKKwltb3ZlYgklYTNALCAlYTRAKG9fY3JjMCkKKworCW1vdmVxCSNtYXhfcmV0cnksICVkMgorCitjcmMxOgl0c3RiCSVhMkAKKwlkYm1pCSVkMiwgY3JjMQorCWJwbAlzaWduYWxfbm9ueWIKKworCW1vdmViCSVhM0AsICVhNEAob19jcmMxKQorCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisKK2hlYWRlcl9leGl0OgorCW1vdmVxCSMwLCAlZDAKKwltb3ZlYgkjMHgxOCwgJWEzQCh3cml0ZV9tb2RlMCAtIHJlYWRfbWFyaykKKwlydHMKK3NpZ25hbF9ub255YjoKKwltb3ZlcQkjLTEsICVkMAorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCXJ0cworCisJLmdsb2JhbCBzd2ltX3JlYWRfc2VjdG9yX2RhdGEKK3N3aW1fcmVhZF9zZWN0b3JfZGF0YToKKwlsaW5rCSVhNiwgIzAKKwltb3ZlbWwJJWQxLSVkNS8lYTAtJWE1LCVzcEAtCisJbW92ZWwJJWE2QCgweDBjKSwgJWE0CisJYnNyCW1mbV9yZWFkX2RhdGEKKwltb3ZlbWwJJXNwQCssICVkMS0lZDUvJWEwLSVhNQorCXVubGsJJWE2CisJcnRzCisKK21mbV9yZWFkX2RhdGE6CisJbW92ZWwJJWE2QCgweDA4KSwgJWEzCisJbGVhCSVhM0AocmVhZF9oYW5kc2hha2UpLCAlYTIKKwlsZWEJJWEzQChyZWFkX2RhdGEpLCAlYTUKKwlsZWEJJWEzQChyZWFkX21hcmspLCAlYTMKKwltb3Zldwkjc2Vla190aW1lLCAlZDIKKword2FpdF9kYXRhX2luaXQ6CisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDEsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisJdHN0YgklYTNAKHJlYWRfZXJyb3IgLSByZWFkX21hcmspCisJbW92ZWIJIzB4MDgsICVhM0Aod3JpdGVfbW9kZTEgLSByZWFkX21hcmspCisKKwlsZWEJc2VjdG9yX2RhdGFfbWFyaywgJWEwCisJbW92ZXEJIzMsICVkMQorCisJLyogd2FpdCBkYXRhIGFkZHJlc3MgbWFyayAqLworCit3YWl0X2RhdGFfbWFya19ieXRlOgorCisJdHN0YgklYTJACisJZGJtaQklZDIsIHdhaXRfZGF0YV9tYXJrX2J5dGUKKwlicGwJZGF0YV9leGl0CisKKwltb3ZlYgklYTNALCAlZDMKKwljbXBiCSVhMEArLCAlZDMKKwlkYm5lCSVkMSwgd2FpdF9kYXRhX21hcmtfYnl0ZQorCWJuZQl3YWl0X2RhdGFfaW5pdAorCisJLyogcmVhZCBkYXRhICovCisKKwl0c3RiCSVhM0AocmVhZF9lcnJvciAtIHJlYWRfbWFyaykKKworCW1vdmVsCSNzZWN0b3Jfc2l6ZS0xLCAlZDQJCS8qIHNlY3RvciBzaXplICovCityZWFkX25ld19kYXRhOgorCW1vdmV3CSNtYXhfcmV0cnksICVkMgorcmVhZF9kYXRhX2xvb3A6CisJbW92ZWIJJWEyQCwgJWQ1CisJYW5kYgkjMHhjMCwgJWQ1CisJZGJuZQklZDIsIHJlYWRfZGF0YV9sb29wCisJYmVxCWRhdGFfZXhpdAorCW1vdmViCSVhNUAsICVhNEArCisJYW5kYgkjMHg0MCwgJWQ1CisJZGJuZQklZDQsIHJlYWRfbmV3X2RhdGEKKwliZXEJZXhpdF9sb29wCisJbW92ZWIJJWE1QCwgJWE0QCsKKwlkYnJhCSVkNCwgcmVhZF9uZXdfZGF0YQorZXhpdF9sb29wOgorCisJLyogcmVhZCBDUkMgKi8KKworCW1vdmV3CSNtYXhfcmV0cnksICVkMgorZGF0YV9jcmMwOgorCisJdHN0YgklYTJACisJZGJtaQklZDIsIGRhdGFfY3JjMAorCWJwbAlkYXRhX2V4aXQKKworCW1vdmViCSVhM0AsICVkNQorCisJbW92ZXEJI21heF9yZXRyeSwgJWQyCisKK2RhdGFfY3JjMToKKworCXRzdGIJJWEyQAorCWRibWkJJWQyLCBkYXRhX2NyYzEKKwlicGwJZGF0YV9leGl0CisKKwltb3ZlYgklYTNALCAlZDUKKworCXRzdGIJJWEzQChyZWFkX2Vycm9yIC0gcmVhZF9tYXJrKQorCisJbW92ZWIJIzB4MTgsICVhM0Aod3JpdGVfbW9kZTAgLSByZWFkX21hcmspCisKKwkvKiByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKi8KKworCW1vdmVsCSNzZWN0b3Jfc2l6ZSwgJWQwCisJYWRkdwkjMSwgJWQ0CisJc3VibAklZDQsICVkMAorCXJ0cworZGF0YV9leGl0OgorCW1vdmViCSMweDE4LCAlYTNAKHdyaXRlX21vZGUwIC0gcmVhZF9tYXJrKQorCW1vdmVxCSMtMSwgJWQwCisJcnRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3ViLmMgYi9kcml2ZXJzL2Jsb2NrL3ViLmMKaW5kZXggMTJmYjgxNi4uNjliN2Y4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay91Yi5jCisrKyBiL2RyaXZlcnMvYmxvY2svdWIuYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAgKi8KICNpZmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCiAKLSNkZWZpbmUgdWJfdXNiX2lkcyAgc3RvcmFnZV91c2JfaWRzCisjZGVmaW5lIHViX3VzYl9pZHMgIHVzYl9zdG9yYWdlX3VzYl9pZHMKICNlbHNlCiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1Yl91c2JfaWRzW10gPSB7CkBAIC0yMTQ2LDEwICsyMTQ2LDkgQEAKIAkJZXAgPSAmYWx0c2V0dGluZy0+ZW5kcG9pbnRbaV0uZGVzYzsKIAogCQkvKiBJcyBpdCBhIEJVTEsgZW5kcG9pbnQ/ICovCi0JCWlmICgoZXAtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQotCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspIHsKKwkJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXApKSB7CiAJCQkvKiBCVUxLIGluIG9yIG91dD8gKi8KLQkJCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pIHsKKwkJCWlmICh1c2JfZW5kcG9pbnRfZGlyX2luKGVwKSkgewogCQkJCWlmIChlcF9pbiA9PSBOVUxMKQogCQkJCQllcF9pbiA9IGVwOwogCQkJfSBlbHNlIHsKQEAgLTIxNjgsOSArMjE2Nyw5IEBACiAJc2MtPnNlbmRfY3RybF9waXBlID0gdXNiX3NuZGN0cmxwaXBlKGRldiwgMCk7CiAJc2MtPnJlY3ZfY3RybF9waXBlID0gdXNiX3JjdmN0cmxwaXBlKGRldiwgMCk7CiAJc2MtPnNlbmRfYnVsa19waXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwKLQkJZXBfb3V0LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKKwkJdXNiX2VuZHBvaW50X251bShlcF9vdXQpKTsKIAlzYy0+cmVjdl9idWxrX3BpcGUgPSB1c2JfcmN2YnVsa3BpcGUoZGV2LCAKLQkJZXBfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX2luKSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCmluZGV4IGQzZjE0YmUuLjJhMDA3MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYwpAQCAtMjU3LDggKzI1Nyw3IEBACiAKIAlpZiAoaGRyICYgMHgxMCkgewogCQlCVF9FUlIoIiVzIGVycm9yIGluIGJsb2NrIiwgZGF0YS0+aGRldi0+bmFtZSk7Ci0JCWlmIChkYXRhLT5yZWFzc2VtYmx5KQotCQkJa2ZyZWVfc2tiKGRhdGEtPnJlYXNzZW1ibHkpOworCQlrZnJlZV9za2IoZGF0YS0+cmVhc3NlbWJseSk7CiAJCWRhdGEtPnJlYXNzZW1ibHkgPSBOVUxMOwogCQlyZXR1cm4gLUVJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKaW5kZXggZmYxOTVjMi4uZDU4ZTIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwpAQCAtMzU5LDkgKzM1OSw5IEBACiAJCQlCVF9FUlIoIlZlcnkgc3RyYW5nZSAoc3RhdD0weCUwNHgpIiwgc3RhdCk7CiAJCX0gZWxzZSBpZiAoKHN0YXQgJiAweGZmKSAhPSAweGZmKSB7CiAJCQlpZiAoc3RhdCAmIDB4MDAyMCkgewotCQkJCWludCBzdGF0ID0gYnQzY19yZWFkKGlvYmFzZSwgMHg3MDAyKSAmIDB4MTA7CisJCQkJaW50IHN0YXR1cyA9IGJ0M2NfcmVhZChpb2Jhc2UsIDB4NzAwMikgJiAweDEwOwogCQkJCUJUX0lORk8oIiVzOiBBbnRlbm5hICVzIiwgaW5mby0+aGRldi0+bmFtZSwKLQkJCQkJCQlzdGF0ID8gIm91dCIgOiAiaW4iKTsKKwkJCQkJCQlzdGF0dXMgPyAib3V0IiA6ICJpbiIpOwogCQkJfQogCQkJaWYgKHN0YXQgJiAweDAwMDEpCiAJCQkJYnQzY19yZWNlaXZlKGluZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggYjVmYmRhNi4uZTcwYzU3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CiAKLSNkZWZpbmUgVkVSU0lPTiAiMC40IgorI2RlZmluZSBWRVJTSU9OICIwLjUiCiAKIHN0YXRpYyBpbnQgaWdub3JlX2RnYTsKIHN0YXRpYyBpbnQgaWdub3JlX2NzcjsKQEAgLTE3MSw2ICsxNzEsNyBAQAogCiAJX191OCBjbWRyZXFfdHlwZTsKIAorCXVuc2lnbmVkIGludCBzY29fbnVtOwogCWludCBpc29jX2FsdHNldHRpbmc7CiAJaW50IHN1c3BlbmRfY291bnQ7CiB9OwpAQCAtNDk2LDExICs0OTcsMjMgQEAKIAkJcmV0dXJuIDA7CiAKIAllcnIgPSBidHVzYl9zdWJtaXRfaW50cl91cmIoaGRldiwgR0ZQX0tFUk5FTCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZmFpbGVkOworCisJZXJyID0gYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9LRVJORUwpOwogCWlmIChlcnIgPCAwKSB7Ci0JCWNsZWFyX2JpdChCVFVTQl9JTlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCWNsZWFyX2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKTsKKwkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmZGF0YS0+aW50cl9hbmNob3IpOworCQlnb3RvIGZhaWxlZDsKIAl9CiAKKwlzZXRfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKKwlidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkOgorCWNsZWFyX2JpdChCVFVTQl9JTlRSX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7CisJY2xlYXJfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY1NSwxOSArNjY4LDEwIEBACiAKIAlCVF9EQkcoIiVzIGV2dCAlZCIsIGhkZXYtPm5hbWUsIGV2dCk7CiAKLQlpZiAoaGRldi0+Y29ubl9oYXNoLmFjbF9udW0gPiAwKSB7Ci0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncykpIHsKLQkJCWlmIChidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX0FUT01JQykgPCAwKQotCQkJCWNsZWFyX2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncyk7Ci0JCQllbHNlCi0JCQkJYnR1c2Jfc3VibWl0X2J1bGtfdXJiKGhkZXYsIEdGUF9BVE9NSUMpOwotCQl9Ci0JfSBlbHNlIHsKLQkJY2xlYXJfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQkJdXNiX3VubGlua19hbmNob3JlZF91cmJzKCZkYXRhLT5idWxrX2FuY2hvcik7CisJaWYgKGhkZXYtPmNvbm5faGFzaC5zY29fbnVtICE9IGRhdGEtPnNjb19udW0pIHsKKwkJZGF0YS0+c2NvX251bSA9IGhkZXYtPmNvbm5faGFzaC5zY29fbnVtOworCQlzY2hlZHVsZV93b3JrKCZkYXRhLT53b3JrKTsKIAl9Ci0KLQlzY2hlZHVsZV93b3JrKCZkYXRhLT53b3JrKTsKIH0KIAogc3RhdGljIGludCBpbmxpbmUgX19zZXRfaXNvY19pbnRlcmZhY2Uoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCBhbHRzZXR0aW5nKQpAQCAtOTgyLDkgKzk4NiwxMSBAQAogCX0KIAogCWlmICh0ZXN0X2JpdChCVFVTQl9CVUxLX1JVTk5JTkcsICZkYXRhLT5mbGFncykpIHsKLQkJaWYgKGJ0dXNiX3N1Ym1pdF9idWxrX3VyYihoZGV2LCBHRlBfTk9JTykgPCAwKQorCQllcnIgPSBidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX05PSU8pOworCQlpZiAoZXJyIDwgMCkgewogCQkJY2xlYXJfYml0KEJUVVNCX0JVTEtfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKLQkJZWxzZQorCQkJcmV0dXJuIGVycjsKKwkJfSBlbHNlCiAJCQlidHVzYl9zdWJtaXRfYnVsa191cmIoaGRldiwgR0ZQX05PSU8pOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2g0LmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYwppbmRleCBiMGZhZmIwLi5jMGNlODEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfaDQuYwpAQCAtMTAyLDggKzEwMiw3IEBACiAKIAlza2JfcXVldWVfcHVyZ2UoJmg0LT50eHEpOwogCi0JaWYgKGg0LT5yeF9za2IpCi0JCWtmcmVlX3NrYihoNC0+cnhfc2tiKTsKKwlrZnJlZV9za2IoaDQtPnJ4X3NrYik7CiAKIAlodS0+cHJpdiA9IE5VTEw7CiAJa2ZyZWUoaDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xsLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYwppbmRleCBiOTFkNDVhLi41YzY1MDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGwuYwpAQCAtMTYzLDggKzE2Myw3IEBACiAJc2tiX3F1ZXVlX3B1cmdlKCZsbC0+dHhfd2FpdF9xKTsKIAlza2JfcXVldWVfcHVyZ2UoJmxsLT50eHEpOwogCi0JaWYgKGxsLT5yeF9za2IpCi0JCWtmcmVlX3NrYihsbC0+cnhfc2tiKTsKKwlrZnJlZV9za2IobGwtPnJ4X3NrYik7CiAKIAlodS0+cHJpdiA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDQzNzNhZGIuLjlkOTQ5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtMjYsNiArMjYsMTAgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NUdNRV9JRyAgICAgMHgyQTEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NDVHTUVfSEIgICAgIDB4MjdBQwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ1R01FX0lHICAgICAweDI3QUUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHTV9IQiAgICAgICAgMHhBMDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUdER01fSUcgICAgICAgIDB4QTAxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdfSEIgICAgICAgICAweEEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHX0lHICAgICAgICAgMHhBMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRzMzX0hCICAgICAgICAgIDB4MjlDMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0czM19JRyAgICAgICAgICAweDI5QzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9RMzVfSEIgICAgICAgICAgMHgyOUIwCkBAIC02MCw3ICs2NCwxMiBAQAogCiAjZGVmaW5lIElTX0czMyAoYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9HMzNfSEIgfHwgXAogCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzNV9IQiB8fCBcCi0JCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfUTMzX0hCKQorCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzM19IQiB8fCBcCisJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdER01fSEIgfHwgXAorCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdfSEIpCisKKyNkZWZpbmUgSVNfSUdEIChhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdNX0hCIHx8IFwKKwkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHX0hCKQogCiAjZGVmaW5lIElTX0c0WCAoYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JR0RfRV9IQiB8fCBcCiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfUTQ1X0hCIHx8IFwKQEAgLTUxMCw3ICs1MTksNyBAQAogCQkJc2l6ZSA9IDUxMjsKIAkJfQogCQlzaXplICs9IDQ7IC8qIGFkZCBpbiBCSU9TIHBvcHVwIHNwYWNlICovCi0JfSBlbHNlIGlmIChJU19HMzMpIHsKKwl9IGVsc2UgaWYgKElTX0czMyAmJiAhSVNfSUdEKSB7CiAJLyogRzMzJ3MgR1RUIHNpemUgZGVmaW5lZCBpbiBnbWNoX2N0cmwgKi8KIAkJc3dpdGNoIChnbWNoX2N0cmwgJiBHMzNfUEdFVEJMX1NJWkVfTUFTSykgewogCQljYXNlIEczM19QR0VUQkxfU0laRV8xTToKQEAgLTUyNiw3ICs1MzUsNyBAQAogCQkJc2l6ZSA9IDUxMjsKIAkJfQogCQlzaXplICs9IDQ7Ci0JfSBlbHNlIGlmIChJU19HNFgpIHsKKwl9IGVsc2UgaWYgKElTX0c0WCB8fCBJU19JR0QpIHsKIAkJLyogT24gNCBzZXJpZXMgaGFyZHdhcmUsIEdUVCBzdG9sZW4gaXMgc2VwYXJhdGUgZnJvbSBncmFwaGljcwogCQkgKiBzdG9sZW4sIGlnbm9yZSBpdCBpbiBzdG9sZW4gZ3R0IGVudHJpZXMgY291bnRpbmcuICBIb3dldmVyLAogCQkgKiA0S0Igb2YgdGhlIHN0b2xlbiBtZW1vcnkgZG9lc24ndCBnZXQgbWFwcGVkIHRvIHRoZSBHVFQuCkBAIC0yMTYxLDYgKzIxNzAsMTAgQEAKIAkJTlVMTCwgJmludGVsX2czM19kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfUTMzX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzM19JRywgMCwgIlEzMyIsCiAJCU5VTEwsICZpbnRlbF9nMzNfZHJpdmVyIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdNX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdNX0lHLCAwLCAiSUdEIiwKKwkJTlVMTCwgJmludGVsX2czM19kcml2ZXIgfSwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSUdER19IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9JR0RHX0lHLCAwLCAiSUdEIiwKKwkJTlVMTCwgJmludGVsX2czM19kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfR000NV9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9HTTQ1X0lHLCAwLAogCSAgICAiTW9iaWxlIEludGVswq4gR000NSBFeHByZXNzIiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHRF9FX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lHRF9FX0lHLCAwLApAQCAtMjM1NSw2ICsyMzY4LDggQEAKIAlJRChQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ1R19IQiksCiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdNX0hCKSwKIAlJRChQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ1R01FX0hCKSwKKwlJRChQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdNX0hCKSwKKwlJRChQQ0lfREVWSUNFX0lEX0lOVEVMX0lHREdfSEIpLAogCUlEKFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NDZHWl9IQiksCiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF84MkczNV9IQiksCiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF84Mjk2NVFfSEIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19pdWN2LmMgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwppbmRleCBhNTM0OTY4Li41NDQ4MWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYworKysgYi9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYwpAQCAtMTMsMTAgKzEzLDExIEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxuZXQvaXVjdi9pdWN2Lmg+CkBAIC05NSw2ICs5NiwxMiBAQAogLyogQXJyYXkgb2YgYWxsb2NhdGVkIGh2YyBpdWN2IHR0eSBsaW5lcy4uLiAqLwogc3RhdGljIHN0cnVjdCBodmNfaXVjdl9wcml2YXRlICpodmNfaXVjdl90YWJsZVtNQVhfSFZDX0lVQ1ZfTElORVNdOwogI2RlZmluZSBJVUNWX0hWQ19DT05fSURYCSgwKQorLyogTGlzdCBvZiB6L1ZNIHVzZXIgSUQgZmlsdGVyIGVudHJpZXMgKHN0cnVjdCBpdWN2X3ZtaWRfZmlsdGVyKSAqLworI2RlZmluZSBNQVhfVk1JRF9GSUxURVIJCSg1MDApCitzdGF0aWMgc2l6ZV90IGh2Y19pdWN2X2ZpbHRlcl9zaXplOworc3RhdGljIHZvaWQgKmh2Y19pdWN2X2ZpbHRlcjsKK3N0YXRpYyBjb25zdCBjaGFyICpodmNfaXVjdl9maWx0ZXJfc3RyaW5nOworc3RhdGljIERFRklORV9SV0xPQ0soaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOwogCiAvKiBLbWVtIGNhY2hlIGFuZCBtZW1wb29sIGZvciBpdWN2X3R0eV9idWZmZXIgZWxlbWVudHMgKi8KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaHZjX2l1Y3ZfYnVmZmVyX2NhY2hlOwpAQCAtNjE4LDYgKzYyNSwyNyBAQAogfQogCiAvKioKKyAqIGh2Y19pdWN2X2ZpbHRlcl9jb25ucmVxKCkgLSBGaWx0ZXIgY29ubmVjdGlvbiByZXF1ZXN0IGJhc2VkIG9uIHovVk0gdXNlciBJRAorICogQGlwdm1pZDoJT3JpZ2luYXRpbmcgei9WTSB1c2VyIElEIChyaWdodCBwYWRkZWQgd2l0aCBibGFua3MpCisgKgorICogUmV0dXJucyAwIGlmIHRoZSB6L1ZNIHVzZXIgSUQgQGlwdm1pZCBpcyBhbGxvd2VkIHRvIGNvbm5lY3Rpb24sIG90aGVyd2lzZQorICogbm9uLXplcm8uCisgKi8KK3N0YXRpYyBpbnQgaHZjX2l1Y3ZfZmlsdGVyX2Nvbm5yZXEodTggaXB2bWlkWzhdKQoreworCXNpemVfdCBpOworCisJLyogTm90ZTogZGVmYXVsdCBwb2xpY3kgaXMgQUNDRVBUIGlmIG5vIGZpbHRlciBpcyBzZXQgKi8KKwlpZiAoIWh2Y19pdWN2X2ZpbHRlcl9zaXplKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBodmNfaXVjdl9maWx0ZXJfc2l6ZTsgaSsrKQorCQlpZiAoMCA9PSBtZW1jbXAoaXB2bWlkLCBodmNfaXVjdl9maWx0ZXIgKyAoOCAqIGkpLCA4KSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKioKICAqIGh2Y19pdWN2X3BhdGhfcGVuZGluZygpIC0gSVVDViBoYW5kbGVyIHRvIHByb2Nlc3MgYSBjb25uZWN0aW9uIHJlcXVlc3QuCiAgKiBAcGF0aDoJUGVuZGluZyBwYXRoIChzdHJ1Y3QgaXVjdl9wYXRoKQogICogQGlwdm1pZDoJei9WTSBzeXN0ZW0gaWRlbnRpZmllciBvZiBvcmlnaW5hdG9yCkBAIC02NDEsNiArNjY5LDcgQEAKIHsKIAlzdHJ1Y3QgaHZjX2l1Y3ZfcHJpdmF0ZSAqcHJpdjsKIAl1OCBudXNlcl9kYXRhWzE2XTsKKwl1OCB2bV91c2VyX2lkWzldOwogCWludCBpLCByYzsKIAogCXByaXYgPSBOVUxMOwpAQCAtNjUzLDYgKzY4MiwyMCBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwkvKiBFbmZvcmNlIHRoYXQgaXB2bWlkIGlzIGFsbG93ZWQgdG8gY29ubmVjdCB0byB1cyAqLworCXJlYWRfbG9jaygmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCXJjID0gaHZjX2l1Y3ZfZmlsdGVyX2Nvbm5yZXEoaXB2bWlkKTsKKwlyZWFkX3VubG9jaygmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCWlmIChyYykgeworCQlpdWN2X3BhdGhfc2V2ZXIocGF0aCwgaXB1c2VyKTsKKwkJaXVjdl9wYXRoX2ZyZWUocGF0aCk7CisJCW1lbWNweSh2bV91c2VyX2lkLCBpcHZtaWQsIDgpOworCQl2bV91c2VyX2lkWzhdID0gMDsKKwkJcHJfaW5mbygiQSBjb25uZWN0aW9uIHJlcXVlc3QgZnJvbSB6L1ZNIHVzZXIgSUQgJXMgIgorCQkJIndhcyByZWZ1c2VkXG4iLCB2bV91c2VyX2lkKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCS8qIElmIHRoZSB0ZXJtaW5hbCBpcyBhbHJlYWR5IGNvbm5lY3RlZCBvciBiZWluZyBzZXZlcmVkLCB0aGVuIHNldmVyCkBAIC04NzcsNiArOTIwLDE3MSBAQAogfQogCiAvKioKKyAqIGh2Y19pdWN2X3BhcnNlX2ZpbHRlcigpIC0gUGFyc2UgZmlsdGVyIGZvciBhIHNpbmdsZSB6L1ZNIHVzZXIgSUQKKyAqIEBmaWx0ZXI6CVN0cmluZyBjb250YWluaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICovCitzdGF0aWMgY29uc3QgY2hhciAqaHZjX2l1Y3ZfcGFyc2VfZmlsdGVyKGNvbnN0IGNoYXIgKmZpbHRlciwgY2hhciAqZGVzdCkKK3sKKwljb25zdCBjaGFyICpuZXh0ZGVsaW0sICpyZXNpZHVhbDsKKwlzaXplX3QgbGVuOworCisJbmV4dGRlbGltID0gc3RyY2hyKGZpbHRlciwgJywnKTsKKwlpZiAobmV4dGRlbGltKSB7CisJCWxlbiA9IG5leHRkZWxpbSAtIGZpbHRlcjsKKwkJcmVzaWR1YWwgPSBuZXh0ZGVsaW0gKyAxOworCX0gZWxzZSB7CisJCWxlbiA9IHN0cmxlbihmaWx0ZXIpOworCQlyZXNpZHVhbCA9IGZpbHRlciArIGxlbjsKKwl9CisKKwlpZiAobGVuID09IDApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJLyogY2hlY2sgZm9yICdcbicgKGlmIGNhbGxlZCBmcm9tIHN5c2ZzKSAqLworCWlmIChmaWx0ZXJbbGVuIC0gMV0gPT0gJ1xuJykKKwkJbGVuLS07CisKKwlpZiAobGVuID4gOCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwkvKiBwYWQgd2l0aCBibGFua3MgYW5kIHNhdmUgdXBwZXIgY2FzZSB2ZXJzaW9uIG9mIHVzZXIgSUQgKi8KKwltZW1zZXQoZGVzdCwgJyAnLCA4KTsKKwl3aGlsZSAobGVuLS0pCisJCWRlc3RbbGVuXSA9IHRvdXBwZXIoZmlsdGVyW2xlbl0pOworCXJldHVybiByZXNpZHVhbDsKK30KKworLyoqCisgKiBodmNfaXVjdl9zZXR1cF9maWx0ZXIoKSAtIFNldCB1cCB6L1ZNIHVzZXIgSUQgZmlsdGVyCisgKiBAZmlsdGVyOglTdHJpbmcgY29uc2lzdGluZyBvZiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHovVk0gdXNlciBJRHMKKyAqCisgKiBUaGUgZnVuY3Rpb24gcGFyc2VzIHRoZSBAZmlsdGVyIHN0cmluZyBhbmQgY3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nCisgKiB0aGUgbGlzdCBvZiB6L1ZNIHVzZXIgSUQgZmlsdGVyIGVudHJpZXMuCisgKiBSZXR1cm4gY29kZSAwIG1lYW5zIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgdGhlIGZpbHRlciBpcyBzeW50YWN0aWNhbGx5CisgKiBpbmNvcnJlY3QsIC1FTk9NRU0gaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5IHRvIGFsbG9jYXRlIHRoZQorICogZmlsdGVyIGxpc3QgYXJyYXksIG9yIC1FTk9TUEMgaWYgdG9vIG1hbnkgei9WTSB1c2VyIElEcyBoYXZlIGJlZW4gc3BlY2lmaWVkLgorICovCitzdGF0aWMgaW50IGh2Y19pdWN2X3NldHVwX2ZpbHRlcihjb25zdCBjaGFyICp2YWwpCit7CisJY29uc3QgY2hhciAqcmVzaWR1YWw7CisJaW50IGVycjsKKwlzaXplX3Qgc2l6ZSwgY291bnQ7CisJdm9pZCAqYXJyYXksICpvbGRfZmlsdGVyOworCisJY291bnQgPSBzdHJsZW4odmFsKTsKKwlpZiAoY291bnQgPT0gMCB8fCAoY291bnQgPT0gMSAmJiB2YWxbMF0gPT0gJ1xuJykpIHsKKwkJc2l6ZSAgPSAwOworCQlhcnJheSA9IE5VTEw7CisJCWdvdG8gb3V0X3JlcGxhY2VfZmlsdGVyOwkvKiBjbGVhciBmaWx0ZXIgKi8KKwl9CisKKwkvKiBjb3VudCB1c2VyIElEcyBpbiBvcmRlciB0byBhbGxvY2F0ZSBzdWZmaWNpZW50IG1lbW9yeSAqLworCXNpemUgPSAxOworCXJlc2lkdWFsID0gdmFsOworCXdoaWxlICgocmVzaWR1YWwgPSBzdHJjaHIocmVzaWR1YWwsICcsJykpICE9IE5VTEwpIHsKKwkJcmVzaWR1YWwrKzsKKwkJc2l6ZSsrOworCX0KKworCS8qIGNoZWNrIGlmIHRoZSBzcGVjaWZpZWQgbGlzdCBleGNlZWRzIHRoZSBmaWx0ZXIgbGltaXQgKi8KKwlpZiAoc2l6ZSA+IE1BWF9WTUlEX0ZJTFRFUikKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlhcnJheSA9IGt6YWxsb2Moc2l6ZSAqIDgsIEdGUF9LRVJORUwpOworCWlmICghYXJyYXkpCisJCXJldHVybiAtRU5PTUVNOworCisJY291bnQgPSBzaXplOworCXJlc2lkdWFsID0gdmFsOworCXdoaWxlICgqcmVzaWR1YWwgJiYgY291bnQpIHsKKwkJcmVzaWR1YWwgPSBodmNfaXVjdl9wYXJzZV9maWx0ZXIocmVzaWR1YWwsCisJCQkJCQkgYXJyYXkgKyAoKHNpemUgLSBjb3VudCkgKiA4KSk7CisJCWlmIChJU19FUlIocmVzaWR1YWwpKSB7CisJCQllcnIgPSBQVFJfRVJSKHJlc2lkdWFsKTsKKwkJCWtmcmVlKGFycmF5KTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCQljb3VudC0tOworCX0KKworb3V0X3JlcGxhY2VfZmlsdGVyOgorCXdyaXRlX2xvY2tfYmgoJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlvbGRfZmlsdGVyID0gaHZjX2l1Y3ZfZmlsdGVyOworCWh2Y19pdWN2X2ZpbHRlcl9zaXplID0gc2l6ZTsKKwlodmNfaXVjdl9maWx0ZXIgPSBhcnJheTsKKwl3cml0ZV91bmxvY2tfYmgoJmh2Y19pdWN2X2ZpbHRlcl9sb2NrKTsKKwlrZnJlZShvbGRfZmlsdGVyKTsKKworCWVyciA9IDA7CitvdXRfZXJyOgorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogcGFyYW1fc2V0X3ZtaWRmaWx0ZXIoKSAtIFNldCB6L1ZNIHVzZXIgSUQgZmlsdGVyIHBhcmFtZXRlcgorICogQHZhbDoJU3RyaW5nIGNvbnNpc3Rpbmcgb2YgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB6L1ZNIHVzZXIgSURzCisgKiBAa3A6CQlLZXJuZWwgcGFyYW1ldGVyIHBvaW50aW5nIHRvIGh2Y19pdWN2X2ZpbHRlciBhcnJheQorICoKKyAqIFRoZSBmdW5jdGlvbiBzZXRzIHVwIHRoZSB6L1ZNIHVzZXIgSUQgZmlsdGVyIHNwZWNpZmllZCBhcyBjb21tYS1zZXBhcmF0ZWQKKyAqIGxpc3Qgb2YgdXNlciBJRHMgaW4gQHZhbC4KKyAqIE5vdGU6IElmIGl0IGlzIGNhbGxlZCBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLCBAdmFsIGlzIHN0b3JlZCBhbmQKKyAqCSBwYXJzZWQgbGF0ZXIgaW4gaHZjX2l1Y3ZfaW5pdCgpLgorICovCitzdGF0aWMgaW50IHBhcmFtX3NldF92bWlkZmlsdGVyKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCit7CisJaW50IHJjOworCisJaWYgKCFNQUNISU5FX0lTX1ZNIHx8ICFodmNfaXVjdl9kZXZpY2VzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghdmFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJjID0gMDsKKwlpZiAoc2xhYl9pc19hdmFpbGFibGUoKSkKKwkJcmMgPSBodmNfaXVjdl9zZXR1cF9maWx0ZXIodmFsKTsKKwllbHNlCisJCWh2Y19pdWN2X2ZpbHRlcl9zdHJpbmcgPSB2YWw7CS8qIGRlZmVyLi4uICovCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHBhcmFtX2dldF92bWlkZmlsdGVyKCkgLSBHZXQgei9WTSB1c2VyIElEIGZpbHRlcgorICogQGJ1ZmZlcjoJQnVmZmVyIHRvIHN0b3JlIHovVk0gdXNlciBJRCBmaWx0ZXIsCisgKgkJKGJ1ZmZlciBzaXplIGFzc3VtcHRpb24gUEFHRV9TSVpFKQorICogQGtwOgkJS2VybmVsIHBhcmFtZXRlciBwb2ludGluZyB0byB0aGUgaHZjX2l1Y3ZfZmlsdGVyIGFycmF5CisgKgorICogVGhlIGZ1bmN0aW9uIHN0b3JlcyB0aGUgZmlsdGVyIGFzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICogaW4gQGJ1ZmZlci4gVHlwaWNhbGx5LCBzeXNmcyByb3V0aW5lcyBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGF0dHIgc2hvdy4KKyAqLworc3RhdGljIGludCBwYXJhbV9nZXRfdm1pZGZpbHRlcihjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCWludCByYzsKKwlzaXplX3QgaW5kZXgsIGxlbjsKKwl2b2lkICpzdGFydCwgKmVuZDsKKworCWlmICghTUFDSElORV9JU19WTSB8fCAhaHZjX2l1Y3ZfZGV2aWNlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyYyA9IDA7CisJcmVhZF9sb2NrX2JoKCZodmNfaXVjdl9maWx0ZXJfbG9jayk7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgaHZjX2l1Y3ZfZmlsdGVyX3NpemU7IGluZGV4KyspIHsKKwkJc3RhcnQgPSBodmNfaXVjdl9maWx0ZXIgKyAoOCAqIGluZGV4KTsKKwkJZW5kICAgPSBtZW1jaHIoc3RhcnQsICcgJywgOCk7CisJCWxlbiAgID0gKGVuZCkgPyBlbmQgLSBzdGFydCA6IDg7CisJCW1lbWNweShidWZmZXIgKyByYywgc3RhcnQsIGxlbik7CisJCXJjICs9IGxlbjsKKwkJYnVmZmVyW3JjKytdID0gJywnOworCX0KKwlyZWFkX3VubG9ja19iaCgmaHZjX2l1Y3ZfZmlsdGVyX2xvY2spOworCWlmIChyYykKKwkJYnVmZmVyWy0tcmNdID0gJ1wwJzsJLyogcmVwbGFjZSBsYXN0IGNvbW1hIGFuZCB1cGRhdGUgcmMgKi8KKwlyZXR1cm4gcmM7Cit9CisKKyNkZWZpbmUgcGFyYW1fY2hlY2tfdm1pZGZpbHRlcihuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHZvaWQpCisKKy8qKgogICogaHZjX2l1Y3ZfaW5pdCgpIC0gei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGluaXRpYWxpemF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGh2Y19pdWN2X2luaXQodm9pZCkKQEAgLTg4NCwyNCArMTA5Miw1MyBAQAogCWludCByYzsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlmICghTUFDSElORV9JU19WTSkgewotCQlwcl9pbmZvKCJUaGUgei9WTSBJVUNWIEhWQyBkZXZpY2UgZHJpdmVyIGNhbm5vdCAiCi0JCQkgICAiYmUgdXNlZCB3aXRob3V0IHovVk1cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlpZiAoIWh2Y19pdWN2X2RldmljZXMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGh2Y19pdWN2X2RldmljZXMgPiBNQVhfSFZDX0lVQ1ZfTElORVMpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghTUFDSElORV9JU19WTSkgeworCQlwcl9ub3RpY2UoIlRoZSB6L1ZNIElVQ1YgSFZDIGRldmljZSBkcml2ZXIgY2Fubm90ICIKKwkJCSAgICJiZSB1c2VkIHdpdGhvdXQgei9WTVxuIik7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCisJaWYgKGh2Y19pdWN2X2RldmljZXMgPiBNQVhfSFZDX0lVQ1ZfTElORVMpIHsKKwkJcHJfZXJyKCIlbHUgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHRoZSBodmNfaXVjdj0gIgorCQkJImtlcm5lbCBwYXJhbWV0ZXJcbiIsIGh2Y19pdWN2X2RldmljZXMpOworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KKworCS8qIHBhcnNlIGh2Y19pdWN2X2FsbG93IHN0cmluZyBhbmQgY3JlYXRlIHovVk0gdXNlciBJRCBmaWx0ZXIgbGlzdCAqLworCWlmIChodmNfaXVjdl9maWx0ZXJfc3RyaW5nKSB7CisJCXJjID0gaHZjX2l1Y3Zfc2V0dXBfZmlsdGVyKGh2Y19pdWN2X2ZpbHRlcl9zdHJpbmcpOworCQlzd2l0Y2ggKHJjKSB7CisJCWNhc2UgMDoKKwkJCWJyZWFrOworCQljYXNlIC1FTk9NRU06CisJCQlwcl9lcnIoIkFsbG9jYXRpbmcgbWVtb3J5IGZhaWxlZCB3aXRoICIKKwkJCQkicmVhc29uIGNvZGU9JWRcbiIsIDMpOworCQkJZ290byBvdXRfZXJyb3I7CisJCWNhc2UgLUVJTlZBTDoKKwkJCXByX2VycigiaHZjX2l1Y3ZfYWxsb3c9IGRvZXMgbm90IHNwZWNpZnkgYSB2YWxpZCAiCisJCQkJInovVk0gdXNlciBJRCBsaXN0XG4iKTsKKwkJCWdvdG8gb3V0X2Vycm9yOworCQljYXNlIC1FTk9TUEM6CisJCQlwcl9lcnIoImh2Y19pdWN2X2FsbG93PSBzcGVjaWZpZXMgdG9vIG1hbnkgIgorCQkJCSJ6L1ZNIHVzZXIgSURzXG4iKTsKKwkJCWdvdG8gb3V0X2Vycm9yOworCQlkZWZhdWx0OgorCQkJZ290byBvdXRfZXJyb3I7CisJCX0KKwl9CiAKIAlodmNfaXVjdl9idWZmZXJfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZShLTVNHX0NPTVBPTkVOVCwKIAkJCQkJICAgc2l6ZW9mKHN0cnVjdCBpdWN2X3R0eV9idWZmZXIpLAogCQkJCQkgICAwLCAwLCBOVUxMKTsKIAlpZiAoIWh2Y19pdWN2X2J1ZmZlcl9jYWNoZSkgewogCQlwcl9lcnIoIkFsbG9jYXRpbmcgbWVtb3J5IGZhaWxlZCB3aXRoIHJlYXNvbiBjb2RlPSVkXG4iLCAxKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyb3I7CiAJfQogCiAJaHZjX2l1Y3ZfbWVtcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNRU1QT09MX01JTl9OUiwKQEAgLTkwOSw3ICsxMTQ2LDggQEAKIAlpZiAoIWh2Y19pdWN2X21lbXBvb2wpIHsKIAkJcHJfZXJyKCJBbGxvY2F0aW5nIG1lbW9yeSBmYWlsZWQgd2l0aCByZWFzb24gY29kZT0lZFxuIiwgMik7CiAJCWttZW1fY2FjaGVfZGVzdHJveShodmNfaXVjdl9idWZmZXJfY2FjaGUpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9lcnJvcjsKIAl9CiAKIAkvKiByZWdpc3RlciB0aGUgZmlyc3QgdGVybWluYWwgZGV2aWNlIGFzIGNvbnNvbGUKQEAgLTk1Myw2ICsxMTkxLDggQEAKIG91dF9lcnJvcl9tZW1vcnk6CiAJbWVtcG9vbF9kZXN0cm95KGh2Y19pdWN2X21lbXBvb2wpOwogCWttZW1fY2FjaGVfZGVzdHJveShodmNfaXVjdl9idWZmZXJfY2FjaGUpOworb3V0X2Vycm9yOgorCWh2Y19pdWN2X2RldmljZXMgPSAwOyAvKiBlbnN1cmUgdGhhdCB3ZSBkbyBub3QgcHJvdmlkZSBhbnkgZGV2aWNlICovCiAJcmV0dXJuIHJjOwogfQogCkBAIC05NjgsMyArMTIwOCw0IEBACiAKIGRldmljZV9pbml0Y2FsbChodmNfaXVjdl9pbml0KTsKIF9fc2V0dXAoImh2Y19pdWN2PSIsIGh2Y19pdWN2X2NvbmZpZyk7Citjb3JlX3BhcmFtKGh2Y19pdWN2X2FsbG93LCBodmNfaXVjdl9maWx0ZXIsIHZtaWRmaWx0ZXIsIDA2NDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCmluZGV4IDg4MjJlY2EuLjVmYWI2NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKQEAgLTIwLDYgKzIwLDIwIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbmZpZyBIV19SQU5ET01fVElNRVJJT01FTQorCXRyaXN0YXRlICJUaW1lciBJT01FTSBIVyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBzdXBwb3J0IgorCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIEhBU19JT01FTQorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGtlcm5lbC1zaWRlIHN1cHBvcnQgZm9yIGEgZ2VuZXJpYyBSYW5kb20KKwkgIE51bWJlciBHZW5lcmF0b3IgdXNlZCBieSByZWFkaW5nIGEgJ2R1bWInIGlvbWVtIGFkZHJlc3MgdGhhdAorCSAgaXMgdG8gYmUgcmVhZCBubyBmYXN0ZXIgdGhhbiwgZm9yIGV4YW1wbGUsIG9uY2UgYSBzZWNvbmQ7CisJICB0aGUgZGVmYXVsdCBGUEdBIGJpdHN0cmVhbSBvbiB0aGUgVFMtNzgwMCBoYXMgc3VjaCBmdW5jdGlvbmFsaXR5LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0aW1lcmlvbWVtLXJuZy4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIEhXX1JBTkRPTV9JTlRFTAogCXRyaXN0YXRlICJJbnRlbCBIVyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBzdXBwb3J0IgogCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIChYODYgfHwgSUE2NCkgJiYgUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9NYWtlZmlsZQppbmRleCBiNmVmZmI3Li5lODFkMjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKIG9iai0kKENPTkZJR19IV19SQU5ET00pICs9IHJuZy1jb3JlLm8KIHJuZy1jb3JlLXkgOj0gY29yZS5vCitvYmotJChDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0pICs9IHRpbWVyaW9tZW0tcm5nLm8KIG9iai0kKENPTkZJR19IV19SQU5ET01fSU5URUwpICs9IGludGVsLXJuZy5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NX0FNRCkgKz0gYW1kLXJuZy5vCiBvYmotJChDT05GSUdfSFdfUkFORE9NX0dFT0RFKSArPSBnZW9kZS1ybmcubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCmluZGV4IGJhNjhhNDYuLjUzODMxM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7Ci0JCXJuZ19pY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJybmdfaWNrIik7CisJCXJuZ19pY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKIAkJaWYgKElTX0VSUihybmdfaWNrKSkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGdldCBybmdfaWNrXG4iKTsKIAkJCXJldCA9IFBUUl9FUlIocm5nX2ljayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3RpbWVyaW9tZW0tcm5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBhZDQxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYwpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIGRyaXZlcnMvY2hhci9od19yYW5kb20vdGltZXJpb21lbS1ybmcuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPgorICoKKyAqIERlcml2ZWQgZnJvbSBkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKKyAqICAgQ29weXJpZ2h0IDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqICAgQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQHBsZXhpdHkubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogT3ZlcnZpZXc6CisgKiAgIFRoaXMgZHJpdmVyIGlzIHVzZWZ1bCBmb3IgcGxhdGZvcm1zIHRoYXQgaGF2ZSBhbiBJTyByYW5nZSB0aGF0IHByb3ZpZGVzCisgKiAgIHBlcmlvZGljIHJhbmRvbSBkYXRhIGZyb20gYSBzaW5nbGUgSU8gbWVtb3J5IGFkZHJlc3MuICBBbGwgdGhlIHBsYXRmb3JtCisgKiAgIGhhcyB0byBkbyBpcyBwcm92aWRlIHRoZSBhZGRyZXNzIGFuZCAnd2FpdCB0aW1lJyB0aGF0IG5ldyBkYXRhIGJlY29tZXMKKyAqICAgYXZhaWxhYmxlLgorICoKKyAqIFRPRE86IGFkZCBzdXBwb3J0IGZvciByZWFkaW5nIHNpemVzIG90aGVyIHRoYW4gMzJiaXRzIGFuZCBtYXNraW5nCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXJpb21lbS1ybmcuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKworc3RhdGljIHN0cnVjdCB0aW1lcmlvbWVtX3JuZ19kYXRhICp0aW1lcmlvbWVtX3JuZ19kYXRhOworCitzdGF0aWMgdm9pZCB0aW1lcmlvbWVtX3JuZ190cmlnZ2VyKHVuc2lnbmVkIGxvbmcpOworc3RhdGljIERFRklORV9USU1FUih0aW1lcmlvbWVtX3JuZ190aW1lciwgdGltZXJpb21lbV9ybmdfdHJpZ2dlciwgMCwgMCk7CisKKy8qCisgKiBoYXZlIGRhdGEgcmV0dXJuIDEsIGhvd2V2ZXIgcmV0dXJuIDAgaWYgd2UgaGF2ZSBub3RoaW5nCisgKi8KK3N0YXRpYyBpbnQgdGltZXJpb21lbV9ybmdfZGF0YV9wcmVzZW50KHN0cnVjdCBod3JuZyAqcm5nLCBpbnQgd2FpdCkKK3sKKwlpZiAocm5nLT5wcml2ID09IDApCisJCXJldHVybiAxOworCisJaWYgKCF3YWl0IHx8IHRpbWVyaW9tZW1fcm5nX2RhdGEtPnByZXNlbnQpCisJCXJldHVybiB0aW1lcmlvbWVtX3JuZ19kYXRhLT5wcmVzZW50OworCisJd2FpdF9mb3JfY29tcGxldGlvbigmdGltZXJpb21lbV9ybmdfZGF0YS0+Y29tcGxldGlvbik7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB0aW1lcmlvbWVtX3JuZ19kYXRhX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHUzMiAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGN1cjsKKwlzMzIgZGVsYXk7CisKKwkqZGF0YSA9IHJlYWRsKHRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MpOworCisJaWYgKHJuZy0+cHJpdiAhPSAwKSB7CisJCWN1ciA9IGppZmZpZXM7CisKKwkJZGVsYXkgPSBjdXIgLSB0aW1lcmlvbWVtX3JuZ190aW1lci5leHBpcmVzOworCQlkZWxheSA9IHJuZy0+cHJpdiAtIChkZWxheSAlIHJuZy0+cHJpdik7CisKKwkJdGltZXJpb21lbV9ybmdfdGltZXIuZXhwaXJlcyA9IGN1ciArIGRlbGF5OworCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wcmVzZW50ID0gMDsKKworCQlpbml0X2NvbXBsZXRpb24oJnRpbWVyaW9tZW1fcm5nX2RhdGEtPmNvbXBsZXRpb24pOworCQlhZGRfdGltZXIoJnRpbWVyaW9tZW1fcm5nX3RpbWVyKTsKKwl9CisKKwlyZXR1cm4gNDsKK30KKworc3RhdGljIHZvaWQgdGltZXJpb21lbV9ybmdfdHJpZ2dlcih1bnNpZ25lZCBsb25nIGR1bW15KQoreworCXRpbWVyaW9tZW1fcm5nX2RhdGEtPnByZXNlbnQgPSAxOworCWNvbXBsZXRlKCZ0aW1lcmlvbWVtX3JuZ19kYXRhLT5jb21wbGV0aW9uKTsKK30KKworc3RhdGljIHN0cnVjdCBod3JuZyB0aW1lcmlvbWVtX3JuZ19vcHMgPSB7CisJLm5hbWUJCT0gInRpbWVyaW9tZW0iLAorCS5kYXRhX3ByZXNlbnQJPSB0aW1lcmlvbWVtX3JuZ19kYXRhX3ByZXNlbnQsCisJLmRhdGFfcmVhZAk9IHRpbWVyaW9tZW1fcm5nX2RhdGFfcmVhZCwKKwkucHJpdgkJPSAwLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGltZXJpb21lbV9ybmdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCisJdGltZXJpb21lbV9ybmdfZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJaWYgKHRpbWVyaW9tZW1fcm5nX2RhdGEtPnBlcmlvZCAhPSAwCisJCSYmIHVzZWNzX3RvX2ppZmZpZXModGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kKSA+IDApIHsKKwkJdGltZXJpb21lbV9ybmdfdGltZXIuZXhwaXJlcyA9IGppZmZpZXM7CisKKwkJdGltZXJpb21lbV9ybmdfb3BzLnByaXYgPSB1c2Vjc190b19qaWZmaWVzKAorCQkJCQkJdGltZXJpb21lbV9ybmdfZGF0YS0+cGVyaW9kKTsKKwl9CisJdGltZXJpb21lbV9ybmdfZGF0YS0+cHJlc2VudCA9IDE7CisKKwlyZXQgPSBod3JuZ19yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfb3BzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JsZW0gcmVnaXN0ZXJpbmdcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICIzMmJpdHMgZnJvbSAweCVwIEAgJWR1c1xuIiwKKwkJCXRpbWVyaW9tZW1fcm5nX2RhdGEtPmFkZHJlc3MsCisJCQl0aW1lcmlvbWVtX3JuZ19kYXRhLT5wZXJpb2QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHRpbWVyaW9tZW1fcm5nX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWRlbF90aW1lcl9zeW5jKCZ0aW1lcmlvbWVtX3JuZ190aW1lcik7CisJaHdybmdfdW5yZWdpc3RlcigmdGltZXJpb21lbV9ybmdfb3BzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aW1lcmlvbWVtX3JuZ19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gInRpbWVyaW9tZW1fcm5nIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHRpbWVyaW9tZW1fcm5nX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodGltZXJpb21lbV9ybmdfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRpbWVyaW9tZW1fcm5nX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0aW1lcmlvbWVtX3JuZ19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdGltZXJpb21lbV9ybmdfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aW1lcmlvbWVtX3JuZ19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh0aW1lcmlvbWVtX3JuZ19pbml0KTsKK21vZHVsZV9leGl0KHRpbWVyaW9tZW1fcm5nX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUaW1lciBJT01FTSBIL1cgUk5HIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9zeW5jbGlua19jcy5jCmluZGV4IGRjMDczZTEuLjU2MDhhMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wY21jaWEvc3luY2xpbmtfY3MuYworKysgYi9kcml2ZXJzL2NoYXIvcGNtY2lhL3N5bmNsaW5rX2NzLmMKQEAgLTQzMTEsMTAgKzQzMTEsMTcgQEAKIAlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNpemU7CiAKIAluZXRpZl9yeChza2IpOwotCi0JZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBoZGxjZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBoZGxjZGV2X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gaGRsY2Rldl9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGhkbGNkZXZfaW9jdGwsCisJLm5kb190eF90aW1lb3V0ID0gaGRsY2Rldl90eF90aW1lb3V0LAorfTsKKwogLyoqCiAgKiBjYWxsZWQgYnkgZGV2aWNlIGRyaXZlciB3aGVuIGFkZGluZyBkZXZpY2UgaW5zdGFuY2UKICAqIGRvIGdlbmVyaWMgSERMQyBpbml0aWFsaXphdGlvbgpAQCAtNDM0MSwxMSArNDM0OCw4IEBACiAJZGV2LT5pcnEgICAgICAgPSBpbmZvLT5pcnFfbGV2ZWw7CiAKIAkvKiBuZXR3b3JrIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KLQlkZXYtPmRvX2lvY3RsICAgICAgID0gaGRsY2Rldl9pb2N0bDsKLQlkZXYtPm9wZW4gICAgICAgICAgID0gaGRsY2Rldl9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgPSBoZGxjZGV2X2Nsb3NlOwotCWRldi0+dHhfdGltZW91dCAgICAgPSBoZGxjZGV2X3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwKkhaOworCWRldi0+bmV0ZGV2X29wcwkgICAgPSAmaGRsY2Rldl9vcHM7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwICogSFo7CiAJZGV2LT50eF9xdWV1ZV9sZW4gICA9IDUwOwogCiAJLyogZ2VuZXJpYyBIRExDIGxheWVyIGNhbGxiYWNrcyBhbmQgc2V0dGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yYW5kb20uYyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwppbmRleCA3YzEzNTgxLi43YzQzYWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKKysrIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCkBAIC0yNDEsNiArMjQxLDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvaGFzaC5oPgogCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKKyMgaW5jbHVkZSA8bGludXgvaXJxLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTU1OCw3ICs1NjIsNyBAQAogCXVuc2lnbmVkIGRvbnRfY291bnRfZW50cm9weToxOwogfTsKIAotI2lmbmRlZiBDT05GSUdfU1BBUlNFX0lSUQorI2lmbmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogCiBzdGF0aWMgc3RydWN0IHRpbWVyX3JhbmRfc3RhdGUgKmlycV90aW1lcl9zdGF0ZVtOUl9JUlFTXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IGY0Mzc0NDMuLmZkM2RjZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTg4OCwxMiArODg4LDcgQEAKIAogc3RhdGljIGludCBzb255cGlfbWlzY19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKQogewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnNvbnlwaV9kZXZpY2UuZmlmb19hc3luYyk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmc29ueXBpX2RldmljZS5maWZvX2FzeW5jKTsKIH0KIAogc3RhdGljIGludCBzb255cGlfbWlzY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwppbmRleCBiODA2M2Q0Li4wMDU3YThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmsuYwpAQCAtODAwNywxMCArODAwNywxNyBAQAogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAogCW5ldGlmX3J4KHNrYik7Ci0KLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhkbGNkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGhkbGNkZXZfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBoZGxjZGV2X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaGRsY2Rldl9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBoZGxjZGV2X3R4X3RpbWVvdXQsCit9OworCiAvKioKICAqIGNhbGxlZCBieSBkZXZpY2UgZHJpdmVyIHdoZW4gYWRkaW5nIGRldmljZSBpbnN0YW5jZQogICogZG8gZ2VuZXJpYyBIRExDIGluaXRpYWxpemF0aW9uCkBAIC04MDM4LDExICs4MDQ1LDggQEAKIAlkZXYtPmRtYSAgICAgICA9IGluZm8tPmRtYV9sZXZlbDsKIAogCS8qIG5ldHdvcmsgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwotCWRldi0+ZG9faW9jdGwgICAgICAgPSBoZGxjZGV2X2lvY3RsOwotCWRldi0+b3BlbiAgICAgICAgICAgPSBoZGxjZGV2X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICA9IGhkbGNkZXZfY2xvc2U7Ci0JZGV2LT50eF90aW1lb3V0ICAgICA9IGhkbGNkZXZfdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAqSFo7CisJZGV2LT5uZXRkZXZfb3BzICAgICA9ICZoZGxjZGV2X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAgKiBIWjsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgID0gNTA7CiAKIAkvKiBnZW5lcmljIEhETEMgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwppbmRleCBmMzI5ZjQ1Li5lZmIzZGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwpAQCAtMTc2MywxMCArMTc2MywxNyBAQAogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2l6ZTsKIAogCW5ldGlmX3J4KHNrYik7Ci0KLQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhkbGNkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGhkbGNkZXZfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBoZGxjZGV2X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaGRsY2Rldl9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBoZGxjZGV2X3R4X3RpbWVvdXQsCit9OworCiAvKioKICAqIGNhbGxlZCBieSBkZXZpY2UgZHJpdmVyIHdoZW4gYWRkaW5nIGRldmljZSBpbnN0YW5jZQogICogZG8gZ2VuZXJpYyBIRExDIGluaXRpYWxpemF0aW9uCkBAIC0xNzk0LDExICsxODAxLDggQEAKIAlkZXYtPmlycSAgICAgICA9IGluZm8tPmlycV9sZXZlbDsKIAogCS8qIG5ldHdvcmsgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwotCWRldi0+ZG9faW9jdGwgICAgICAgPSBoZGxjZGV2X2lvY3RsOwotCWRldi0+b3BlbiAgICAgICAgICAgPSBoZGxjZGV2X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICA9IGhkbGNkZXZfY2xvc2U7Ci0JZGV2LT50eF90aW1lb3V0ICAgICA9IGhkbGNkZXZfdHhfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAqSFo7CisJZGV2LT5uZXRkZXZfb3BzCSAgICA9ICZoZGxjZGV2X29wczsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAgKiBIWjsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgID0gNTA7CiAKIAkvKiBnZW5lcmljIEhETEMgbGF5ZXIgY2FsbGJhY2tzIGFuZCBzZXR0aW5ncyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua21wLmMKaW5kZXggN2IwYzViMi4uOGViNmM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rbXAuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmttcC5jCkBAIC0xOTA3LDEwICsxOTA3LDE3IEBACiAJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBzaXplOwogCiAJbmV0aWZfcngoc2tiKTsKLQotCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGRsY2Rldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaGRsY2Rldl9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhkbGNkZXZfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBoZGxjZGV2X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGhkbGNkZXZfdHhfdGltZW91dCwKK307CisKIC8qKgogICogY2FsbGVkIGJ5IGRldmljZSBkcml2ZXIgd2hlbiBhZGRpbmcgZGV2aWNlIGluc3RhbmNlCiAgKiBkbyBnZW5lcmljIEhETEMgaW5pdGlhbGl6YXRpb24KQEAgLTE5MzgsMTEgKzE5NDUsOCBAQAogCWRldi0+aXJxICAgICAgID0gaW5mby0+aXJxX2xldmVsOwogCiAJLyogbmV0d29yayBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCi0JZGV2LT5kb19pb2N0bCAgICAgICA9IGhkbGNkZXZfaW9jdGw7Ci0JZGV2LT5vcGVuICAgICAgICAgICA9IGhkbGNkZXZfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgID0gaGRsY2Rldl9jbG9zZTsKLQlkZXYtPnR4X3RpbWVvdXQgICAgID0gaGRsY2Rldl90eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCpIWjsKKwlkZXYtPm5ldGRldl9vcHMJICAgID0gJmhkbGNkZXZfb3BzOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAxMCAqIEhaOwogCWRldi0+dHhfcXVldWVfbGVuICAgPSA1MDsKIAogCS8qIGdlbmVyaWMgSERMQyBsYXllciBjYWxsYmFja3MgYW5kIHNldHRpbmdzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uYwppbmRleCA5YzQ3ZGM0Li5jY2RkODI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmMKQEAgLTQyOSwxMzQgKzQyOSwxNDggQEAKICNkZWZpbmUgVFBNX0RJR0VTVF9TSVpFIDIwCiAjZGVmaW5lIFRQTV9FUlJPUl9TSVpFIDEwCiAjZGVmaW5lIFRQTV9SRVRfQ09ERV9JRFggNgotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfU0laRV9JRFggMTAKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCAxNAotI2RlZmluZSBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzJfSURYIDE4Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfM19JRFggMjIKLSNkZWZpbmUgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl80X0lEWCAyNgotI2RlZmluZSBUUE1fR0VUX0NBUF9QRVJNX0RJU0FCTEVfSURYIDE2Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1BFUk1fSU5BQ1RJVkVfSURYIDE4Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1JFVF9CT09MXzFfSURYIDE0Ci0jZGVmaW5lIFRQTV9HRVRfQ0FQX1RFTVBfSU5BQ1RJVkVfSURYIDE2Ci0KLSNkZWZpbmUgVFBNX0NBUF9JRFggMTMKLSNkZWZpbmUgVFBNX0NBUF9TVUJDQVBfSURYIDIxCiAKIGVudW0gdHBtX2NhcGFiaWxpdGllcyB7Ci0JVFBNX0NBUF9GTEFHID0gNCwKLQlUUE1fQ0FQX1BST1AgPSA1LAorCVRQTV9DQVBfRkxBRyA9IGNwdV90b19iZTMyKDQpLAorCVRQTV9DQVBfUFJPUCA9IGNwdV90b19iZTMyKDUpLAorCUNBUF9WRVJTSU9OXzFfMSA9IGNwdV90b19iZTMyKDB4MDYpLAorCUNBUF9WRVJTSU9OXzFfMiA9IGNwdV90b19iZTMyKDB4MUEpCiB9OwogCiBlbnVtIHRwbV9zdWJfY2FwYWJpbGl0aWVzIHsKLQlUUE1fQ0FQX1BST1BfUENSID0gMHgxLAotCVRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVIgPSAweDMsCi0JVFBNX0NBUF9GTEFHX1BFUk0gPSAweDgsCi0JVFBNX0NBUF9GTEFHX1ZPTCA9IDB4OSwKLQlUUE1fQ0FQX1BST1BfT1dORVIgPSAweDExLAotCVRQTV9DQVBfUFJPUF9USVNfVElNRU9VVCA9IDB4MTUsCi0JVFBNX0NBUF9QUk9QX1RJU19EVVJBVElPTiA9IDB4MjAsCisJVFBNX0NBUF9QUk9QX1BDUiA9IGNwdV90b19iZTMyKDB4MTAxKSwKKwlUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSID0gY3B1X3RvX2JlMzIoMHgxMDMpLAorCVRQTV9DQVBfRkxBR19QRVJNID0gY3B1X3RvX2JlMzIoMHgxMDgpLAorCVRQTV9DQVBfRkxBR19WT0wgPSBjcHVfdG9fYmUzMigweDEwOSksCisJVFBNX0NBUF9QUk9QX09XTkVSID0gY3B1X3RvX2JlMzIoMHgxMTEpLAorCVRQTV9DQVBfUFJPUF9USVNfVElNRU9VVCA9IGNwdV90b19iZTMyKDB4MTE1KSwKKwlUUE1fQ0FQX1BST1BfVElTX0RVUkFUSU9OID0gY3B1X3RvX2JlMzIoMHgxMjApLAorCiB9OwogCi0vKgotICogVGhpcyBpcyBhIHNlbWkgZ2VuZXJpYyBHZXRDYXBhYmlsaXR5IGNvbW1hbmQgZm9yIHVzZQotICogd2l0aCB0aGUgY2FwYWJpbGl0eSB0eXBlIFRQTV9DQVBfUFJPUCBvciBUUE1fQ0FQX0ZMQUcKLSAqIGFuZCB0aGVpciBhc3NvY2lhdGVkIHN1Yl9jYXBhYmlsaXRpZXMuCi0gKi8KLQotc3RhdGljIGNvbnN0IHU4IHRwbV9jYXBbXSA9IHsKLQkwLCAxOTMsCQkJLyogVFBNX1RBR19SUVVfQ09NTUFORCAqLwotCTAsIDAsIDAsIDIyLAkJLyogbGVuZ3RoICovCi0JMCwgMCwgMCwgMTAxLAkJLyogVFBNX09SRF9HZXRDYXBhYmlsaXR5ICovCi0JMCwgMCwgMCwgMCwJCS8qIFRQTV9DQVBfPFRZUEU+ICovCi0JMCwgMCwgMCwgNCwJCS8qIFRQTV9DQVBfU1VCXzxUWVBFPiBzaXplICovCi0JMCwgMCwgMSwgMAkJLyogVFBNX0NBUF9TVUJfPFRZUEU+ICovCi19OwotCi1zdGF0aWMgc3NpemVfdCB0cmFuc21pdF9jbWQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqZGF0YSwgaW50IGxlbiwKLQkJCSAgICBjaGFyICpkZXNjKQorc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfY21kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgc3RydWN0IHRwbV9jbWRfdCAqY21kLAorCQkJICAgIGludCBsZW4sIGNvbnN0IGNoYXIgKmRlc2MpCiB7CiAJaW50IGVycjsKIAotCWxlbiA9IHRwbV90cmFuc21pdChjaGlwLCBkYXRhLCBsZW4pOworCWxlbiA9IHRwbV90cmFuc21pdChjaGlwLCh1OCAqKSBjbWQsIGxlbik7CiAJaWYgKGxlbiA8ICAwKQogCQlyZXR1cm4gbGVuOwogCWlmIChsZW4gPT0gVFBNX0VSUk9SX1NJWkUpIHsKLQkJZXJyID0gYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX1JFVF9DT0RFX0lEWCkpKTsKKwkJZXJyID0gYmUzMl90b19jcHUoY21kLT5oZWFkZXIub3V0LnJldHVybl9jb2RlKTsKIAkJZGV2X2RiZyhjaGlwLT5kZXYsICJBIFRQTSBlcnJvciAoJWQpIG9jY3VycmVkICVzXG4iLCBlcnIsIGRlc2MpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUgMjAwCisjZGVmaW5lIFRQTV9UQUdfUlFVX0NPTU1BTkQgY3B1X3RvX2JlMTYoMTkzKQorI2RlZmluZSBUUE1fT1JEX0dFVF9DQVAgY3B1X3RvX2JlMzIoMTAxKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgdHBtX2dldGNhcF9oZWFkZXIgPSB7CisJLnRhZyA9IFRQTV9UQUdfUlFVX0NPTU1BTkQsCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKDIyKSwKKwkub3JkaW5hbCA9IFRQTV9PUkRfR0VUX0NBUAorfTsKKworc3NpemVfdCB0cG1fZ2V0Y2FwKHN0cnVjdCBkZXZpY2UgKmRldiwgX19iZTMyIHN1YmNhcF9pZCwgY2FwX3QgKmNhcCwKKwkJICAgY29uc3QgY2hhciAqZGVzYykKK3sKKwlzdHJ1Y3QgdHBtX2NtZF90IHRwbV9jbWQ7CisJaW50IHJjOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJdHBtX2NtZC5oZWFkZXIuaW4gPSB0cG1fZ2V0Y2FwX2hlYWRlcjsKKwlpZiAoc3ViY2FwX2lkID09IENBUF9WRVJTSU9OXzFfMSB8fCBzdWJjYXBfaWQgPT0gQ0FQX1ZFUlNJT05fMV8yKSB7CisJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBzdWJjYXBfaWQ7CisJCS8qc3ViY2FwIGZpZWxkIG5vdCBuZWNlc3NhcnkgKi8KKwkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoMCk7CisJCXRwbV9jbWQuaGVhZGVyLmluLmxlbmd0aCAtPSBjcHVfdG9fYmUzMihzaXplb2YoX19iZTMyKSk7CisJfSBlbHNlIHsKKwkJaWYgKHN1YmNhcF9pZCA9PSBUUE1fQ0FQX0ZMQUdfUEVSTSB8fAorCQkgICAgc3ViY2FwX2lkID09IFRQTV9DQVBfRkxBR19WT0wpCisJCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gVFBNX0NBUF9GTEFHOworCQllbHNlCisJCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gVFBNX0NBUF9QUk9QOworCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwX3NpemUgPSBjcHVfdG9fYmUzMig0KTsKKwkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcCA9IHN1YmNhcF9pZDsKKwl9CisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgZGVzYyk7CisJaWYgKCFyYykKKwkJKmNhcCA9IHRwbV9jbWQucGFyYW1zLmdldGNhcF9vdXQuY2FwOworCXJldHVybiByYzsKK30KKwogdm9pZCB0cG1fZ2VuX2ludGVycnVwdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCiB7Ci0JdTggZGF0YVttYXhfdChpbnQsIEFSUkFZX1NJWkUodHBtX2NhcCksIDMwKV07CisJc3RydWN0CXRwbV9jbWRfdCB0cG1fY21kOwogCXNzaXplX3QgcmM7CiAKLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQ7CisJdHBtX2NtZC5oZWFkZXIuaW4gPSB0cG1fZ2V0Y2FwX2hlYWRlcjsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gVFBNX0NBUF9QUk9QOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDQpOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXAgPSBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQ7CiAKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKIAkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgdGltZW91dHMiKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9nZW5faW50ZXJydXB0KTsKIAogdm9pZCB0cG1fZ2V0X3RpbWVvdXRzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQl1OCBkYXRhW21heF90KGludCwgQVJSQVlfU0laRSh0cG1fY2FwKSwgMzApXTsKKwlzdHJ1Y3QgdHBtX2NtZF90IHRwbV9jbWQ7CisJc3RydWN0IHRpbWVvdXRfdCAqdGltZW91dF9jYXA7CisJc3RydWN0IGR1cmF0aW9uX3QgKmR1cmF0aW9uX2NhcDsKIAlzc2l6ZV90IHJjOwogCXUzMiB0aW1lb3V0OwogCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUOworCXRwbV9jbWQuaGVhZGVyLmluID0gdHBtX2dldGNhcF9oZWFkZXI7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLmNhcCA9IFRQTV9DQVBfUFJPUDsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwX3NpemUgPSBjcHVfdG9fYmUzMig0KTsKKwl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwID0gVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUOwogCi0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgZGF0YSwgc2l6ZW9mKGRhdGEpLAorCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCiAJCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXRzIik7CiAJaWYgKHJjKQogCQlnb3RvIGR1cmF0aW9uOwogCi0JaWYgKGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9TSVpFX0lEWCkpKQorCWlmIChiZTMyX3RvX2NwdSh0cG1fY21kLmhlYWRlci5vdXQubGVuZ3RoKQogCSAgICAhPSA0ICogc2l6ZW9mKHUzMikpCiAJCWdvdG8gZHVyYXRpb247CiAKKwl0aW1lb3V0X2NhcCA9ICZ0cG1fY21kLnBhcmFtcy5nZXRjYXBfb3V0LmNhcC50aW1lb3V0OwogCS8qIERvbid0IG92ZXJ3cml0ZSBkZWZhdWx0IGlmIHZhbHVlIGlzIDAgKi8KLQl0aW1lb3V0ID0KLQkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKTsKKwl0aW1lb3V0ID0gYmUzMl90b19jcHUodGltZW91dF9jYXAtPmEpOwogCWlmICh0aW1lb3V0KQogCQljaGlwLT52ZW5kb3IudGltZW91dF9hID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKLQl0aW1lb3V0ID0KLQkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCkpKTsKKwl0aW1lb3V0ID0gYmUzMl90b19jcHUodGltZW91dF9jYXAtPmIpOwogCWlmICh0aW1lb3V0KQogCQljaGlwLT52ZW5kb3IudGltZW91dF9iID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKLQl0aW1lb3V0ID0KLQkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8zX0lEWCkpKTsKKwl0aW1lb3V0ID0gYmUzMl90b19jcHUodGltZW91dF9jYXAtPmMpOwogCWlmICh0aW1lb3V0KQogCQljaGlwLT52ZW5kb3IudGltZW91dF9jID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKLQl0aW1lb3V0ID0KLQkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl80X0lEWCkpKTsKKwl0aW1lb3V0ID0gYmUzMl90b19jcHUodGltZW91dF9jYXAtPmQpOwogCWlmICh0aW1lb3V0KQogCQljaGlwLT52ZW5kb3IudGltZW91dF9kID0gdXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKIAogZHVyYXRpb246Ci0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX1RJU19EVVJBVElPTjsKKwl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9nZXRjYXBfaGVhZGVyOworCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBUUE1fQ0FQX1BST1A7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoNCk7CisJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcCA9IFRQTV9DQVBfUFJPUF9USVNfRFVSQVRJT047CiAKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBzaXplb2YoZGF0YSksCisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKIAkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgZHVyYXRpb25zIik7CiAJaWYgKHJjKQogCQlyZXR1cm47CiAKLQlpZiAoYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX0dFVF9DQVBfUkVUX1NJWkVfSURYKSkpCisJaWYgKGJlMzJfdG9fY3B1KHRwbV9jbWQuaGVhZGVyLm91dC5yZXR1cm5fY29kZSkKIAkgICAgIT0gMyAqIHNpemVvZih1MzIpKQogCQlyZXR1cm47Ci0KKwlkdXJhdGlvbl9jYXAgPSAmdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX291dC5jYXAuZHVyYXRpb247CiAJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9TSE9SVF0gPQotCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1Ci0JCQkgICAgICgqKChfX2JlMzIgKikgKGRhdGEgKwotCQkJCQkgICAgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8xX0lEWCkpKSk7CisJICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUoZHVyYXRpb25fY2FwLT50cG1fc2hvcnQpKTsKIAkvKiBUaGUgQnJvYWRjb20gQkNNMDEwMiBjaGlwc2V0IGluIGEgRGVsbCBMYXRpdHVkZSBEODIwIGdldHMgdGhlIGFib3ZlCiAJICogdmFsdWUgd3JvbmcgYW5kIGFwcGFyZW50bHkgcmVwb3J0cyBtc2VjcyByYXRoZXIgdGhhbiB1c2Vjcy4gU28gd2UKIAkgKiBmaXggdXAgdGhlIHJlc3VsdGluZyB0b28tc21hbGwgVFBNX1NIT1JUIHZhbHVlIHRvIG1ha2UgdGhpbmdzIHdvcmsuCkBAIC01NjUsMTMgKzU3OSw5IEBACiAJCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fU0hPUlRdID0gSFo7CiAKIAljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX01FRElVTV0gPQotCSAgICB1c2Vjc190b19qaWZmaWVzKGJlMzJfdG9fY3B1Ci0JCQkgICAgICgqKChfX2JlMzIgKikgKGRhdGEgKwotCQkJCQkgICAgVFBNX0dFVF9DQVBfUkVUX1VJTlQzMl8yX0lEWCkpKSk7CisJICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUoZHVyYXRpb25fY2FwLT50cG1fbWVkaXVtKSk7CiAJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9MT05HXSA9Ci0JICAgIHVzZWNzX3RvX2ppZmZpZXMoYmUzMl90b19jcHUKLQkJCSAgICAgKCooKF9fYmUzMiAqKSAoZGF0YSArCi0JCQkJCSAgICBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzNfSURYKSkpKTsKKwkgICAgdXNlY3NfdG9famlmZmllcyhiZTMyX3RvX2NwdShkdXJhdGlvbl9jYXAtPnRwbV9sb25nKSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fZ2V0X3RpbWVvdXRzKTsKIApAQCAtNTg3LDM2ICs1OTcsMTggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9jb250aW51ZV9zZWxmdGVzdCk7CiAKLSNkZWZpbmUgIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSAyMDAKLQogc3NpemVfdCB0cG1fc2hvd19lbmFibGVkKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICogYXR0ciwKIAkJCWNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CiAJc3NpemVfdCByYzsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUc7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9GTEFHX1BFUk07Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkiYXR0ZW10cGluZyB0byBkZXRlcm1pbmUgdGhlIHBlcm1hbmVudCBlbmFibGVkIHN0YXRlIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOworCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfRkxBR19QRVJNLCAmY2FwLAorCQkJICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgcGVybWFuZW50IGVuYWJsZWQgc3RhdGUiKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KIAotCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgIWRhdGFbVFBNX0dFVF9DQVBfUEVSTV9ESVNBQkxFX0lEWF0pOwotCi0Ja2ZyZWUoZGF0YSk7CisJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhY2FwLnBlcm1fZmxhZ3MuZGlzYWJsZSk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfZW5hYmxlZCk7CkBAIC02MjQsMzEgKzYxNiwxNSBAQAogc3NpemVfdCB0cG1fc2hvd19hY3RpdmUoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLAogCQkJY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKIAlzc2l6ZV90IHJjOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfRkxBRzsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUdfUEVSTTsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCSJhdHRlbXRwaW5nIHRvIGRldGVybWluZSB0aGUgcGVybWFuZW50IGFjdGl2ZSBzdGF0ZSIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX0ZMQUdfUEVSTSwgJmNhcCwKKwkJCSAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHBlcm1hbmVudCBhY3RpdmUgc3RhdGUiKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KIAotCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgIWRhdGFbVFBNX0dFVF9DQVBfUEVSTV9JTkFDVElWRV9JRFhdKTsKLQotCWtmcmVlKGRhdGEpOworCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgIWNhcC5wZXJtX2ZsYWdzLmRlYWN0aXZhdGVkKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19hY3RpdmUpOwpAQCAtNjU2LDMxICs2MzIsMTUgQEAKIHNzaXplX3QgdHBtX3Nob3dfb3duZWQoc3RydWN0IGRldmljZSAqIGRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBhdHRyLAogCQkJY2hhciAqYnVmKQogewotCXU4ICpkYXRhOworCWNhcF90IGNhcDsKIAlzc2l6ZV90IHJjOwogCi0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkYXRhID0ga3phbGxvYyhUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghZGF0YSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YSwgdHBtX2NhcCwgc2l6ZW9mKHRwbV9jYXApKTsKLQlkYXRhW1RQTV9DQVBfSURYXSA9IFRQTV9DQVBfUFJPUDsKLQlkYXRhW1RQTV9DQVBfU1VCQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1BfT1dORVI7Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG93bmVyIHN0YXRlIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOworCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfUFJPUF9PV05FUiwgJmNhcCwKKwkJCSAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG93bmVyIHN0YXRlIik7CisJaWYgKHJjKQogCQlyZXR1cm4gMDsKLQl9CiAKLQlyYyA9IHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGFbVFBNX0dFVF9DQVBfUkVUX0JPT0xfMV9JRFhdKTsKLQotCWtmcmVlKGRhdGEpOworCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgY2FwLm93bmVkKTsKIAlyZXR1cm4gcmM7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19vd25lZCk7CkBAIC02ODgsMTE2ICs2NDgsMTgwIEBACiBzc2l6ZV90IHRwbV9zaG93X3RlbXBfZGVhY3RpdmF0ZWQoc3RydWN0IGRldmljZSAqIGRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsIGNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CiAJc3NpemVfdCByYzsKIAotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX0ZMQUc7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9GTEFHX1ZPTDsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgdGVtcG9yYXJ5IHN0YXRlIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOworCXJjID0gdHBtX2dldGNhcChkZXYsIFRQTV9DQVBfRkxBR19WT0wsICZjYXAsCisJCQkgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSB0ZW1wb3Jhcnkgc3RhdGUiKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KIAotCXJjID0gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YVtUUE1fR0VUX0NBUF9URU1QX0lOQUNUSVZFX0lEWF0pOwotCi0Ja2ZyZWUoZGF0YSk7CisJcmMgPSBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjYXAuc3RjbGVhcl9mbGFncy5kZWFjdGl2YXRlZCk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfdGVtcF9kZWFjdGl2YXRlZCk7CiAKLXN0YXRpYyBjb25zdCB1OCBwY3JyZWFkW10gPSB7Ci0JMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KLQkwLCAwLCAwLCAxNCwJCS8qIGxlbmd0aCAqLwotCTAsIDAsIDAsIDIxLAkJLyogVFBNX09SRF9QY3JSZWFkICovCi0JMCwgMCwgMCwgMAkJLyogUENSIGluZGV4ICovCisvKgorICogdHBtX2NoaXBfZmluZF9nZXQgLSByZXR1cm4gdHBtX2NoaXAgZm9yIGdpdmVuIGNoaXAgbnVtYmVyCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdHBtX2NoaXAgKnRwbV9jaGlwX2ZpbmRfZ2V0KGludCBjaGlwX251bSkKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKnBvcywgKmNoaXAgPSBOVUxMOworCisJcmN1X3JlYWRfbG9jaygpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHBvcywgJnRwbV9jaGlwX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGNoaXBfbnVtICE9IFRQTV9BTllfTlVNICYmIGNoaXBfbnVtICE9IHBvcy0+ZGV2X251bSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0cnlfbW9kdWxlX2dldChwb3MtPmRldi0+ZHJpdmVyLT5vd25lcikpIHsKKwkJCWNoaXAgPSBwb3M7CisJCQlicmVhazsKKwkJfQorCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gY2hpcDsKK30KKworI2RlZmluZSBUUE1fT1JESU5BTF9QQ1JSRUFEIGNwdV90b19iZTMyKDIxKQorI2RlZmluZSBSRUFEX1BDUl9SRVNVTFRfU0laRSAzMAorc3RhdGljIHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHBjcnJlYWRfaGVhZGVyID0geworCS50YWcgPSBUUE1fVEFHX1JRVV9DT01NQU5ELAorCS5sZW5ndGggPSBjcHVfdG9fYmUzMigxNCksCisJLm9yZGluYWwgPSBUUE1fT1JESU5BTF9QQ1JSRUFECiB9OwogCitpbnQgX190cG1fcGNyX3JlYWQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCBpbnQgcGNyX2lkeCwgdTggKnJlc19idWYpCit7CisJaW50IHJjOworCXN0cnVjdCB0cG1fY21kX3QgY21kOworCisJY21kLmhlYWRlci5pbiA9IHBjcnJlYWRfaGVhZGVyOworCWNtZC5wYXJhbXMucGNycmVhZF9pbi5wY3JfaWR4ID0gY3B1X3RvX2JlMzIocGNyX2lkeCk7CisJQlVJTERfQlVHX09OKGNtZC5oZWFkZXIuaW4ubGVuZ3RoID4gUkVBRF9QQ1JfUkVTVUxUX1NJWkUpOworCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIGNtZC5oZWFkZXIuaW4ubGVuZ3RoLAorCQkJICAiYXR0ZW1wdGluZyB0byByZWFkIGEgcGNyIHZhbHVlIik7CisKKwlpZiAocmMgPT0gMCkKKwkJbWVtY3B5KHJlc19idWYsIGNtZC5wYXJhbXMucGNycmVhZF9vdXQucGNyX3Jlc3VsdCwKKwkJICAgICAgIFRQTV9ESUdFU1RfU0laRSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHRwbV9wY3JfcmVhZCAtIHJlYWQgYSBwY3IgdmFsdWUKKyAqIEBjaGlwX251bTogCXRwbSBpZHggIyBvciBBTlkKKyAqIEBwY3JfaWR4OglwY3IgaWR4IHRvIHJldHJpZXZlCisgKiBAcmVzX2J1ZjogCVRQTV9QQ1IgdmFsdWUKKyAqIAkJc2l6ZSBvZiByZXNfYnVmIGlzIDIwIGJ5dGVzIChvciBOVUxMIGlmIHlvdSBkb24ndCBjYXJlKQorICoKKyAqIFRoZSBUUE0gZHJpdmVyIHNob3VsZCBiZSBidWlsdC1pbiwgYnV0IGZvciB3aGF0ZXZlciByZWFzb24gaXQKKyAqIGlzbid0LCBwcm90ZWN0IGFnYWluc3QgdGhlIGNoaXAgZGlzYXBwZWFyaW5nLCBieSBpbmNyZW1lbnRpbmcKKyAqIHRoZSBtb2R1bGUgdXNhZ2UgY291bnQuCisgKi8KK2ludCB0cG1fcGNyX3JlYWQodTMyIGNoaXBfbnVtLCBpbnQgcGNyX2lkeCwgdTggKnJlc19idWYpCit7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwOworCWludCByYzsKKworCWNoaXAgPSB0cG1fY2hpcF9maW5kX2dldChjaGlwX251bSk7CisJaWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmMgPSBfX3RwbV9wY3JfcmVhZChjaGlwLCBwY3JfaWR4LCByZXNfYnVmKTsKKwltb2R1bGVfcHV0KGNoaXAtPmRldi0+ZHJpdmVyLT5vd25lcik7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Bjcl9yZWFkKTsKKworLyoqCisgKiB0cG1fcGNyX2V4dGVuZCAtIGV4dGVuZCBwY3IgdmFsdWUgd2l0aCBoYXNoCisgKiBAY2hpcF9udW06IAl0cG0gaWR4ICMgb3IgQU4mCisgKiBAcGNyX2lkeDoJcGNyIGlkeCB0byBleHRlbmQKKyAqIEBoYXNoOiAJaGFzaCB2YWx1ZSB1c2VkIHRvIGV4dGVuZCBwY3IgdmFsdWUKKyAqCisgKiBUaGUgVFBNIGRyaXZlciBzaG91bGQgYmUgYnVpbHQtaW4sIGJ1dCBmb3Igd2hhdGV2ZXIgcmVhc29uIGl0CisgKiBpc24ndCwgcHJvdGVjdCBhZ2FpbnN0IHRoZSBjaGlwIGRpc2FwcGVhcmluZywgYnkgaW5jcmVtZW50aW5nCisgKiB0aGUgbW9kdWxlIHVzYWdlIGNvdW50LgorICovCisjZGVmaW5lIFRQTV9PUkRfUENSX0VYVEVORCBjcHVfdG9fYmUzMigyMCkKKyNkZWZpbmUgRVhURU5EX1BDUl9TSVpFIDM0CitzdGF0aWMgc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgcGNyZXh0ZW5kX2hlYWRlciA9IHsKKwkudGFnID0gVFBNX1RBR19SUVVfQ09NTUFORCwKKwkubGVuZ3RoID0gY3B1X3RvX2JlMzIoMzQpLAorCS5vcmRpbmFsID0gVFBNX09SRF9QQ1JfRVhURU5ECit9OworCitpbnQgdHBtX3Bjcl9leHRlbmQodTMyIGNoaXBfbnVtLCBpbnQgcGNyX2lkeCwgY29uc3QgdTggKmhhc2gpCit7CisJc3RydWN0IHRwbV9jbWRfdCBjbWQ7CisJaW50IHJjOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcDsKKworCWNoaXAgPSB0cG1fY2hpcF9maW5kX2dldChjaGlwX251bSk7CisJaWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwljbWQuaGVhZGVyLmluID0gcGNyZXh0ZW5kX2hlYWRlcjsKKwlCVUlMRF9CVUdfT04oYmUzMl90b19jcHUoY21kLmhlYWRlci5pbi5sZW5ndGgpID4gRVhURU5EX1BDUl9TSVpFKTsKKwljbWQucGFyYW1zLnBjcmV4dGVuZF9pbi5wY3JfaWR4ID0gY3B1X3RvX2JlMzIocGNyX2lkeCk7CisJbWVtY3B5KGNtZC5wYXJhbXMucGNyZXh0ZW5kX2luLmhhc2gsIGhhc2gsIFRQTV9ESUdFU1RfU0laRSk7CisJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgY21kLmhlYWRlci5pbi5sZW5ndGgsCisJCQkgICJhdHRlbXB0aW5nIGV4dGVuZCBhIFBDUiB2YWx1ZSIpOworCisJbW9kdWxlX3B1dChjaGlwLT5kZXYtPmRyaXZlci0+b3duZXIpOworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9wY3JfZXh0ZW5kKTsKKwogc3NpemVfdCB0cG1fc2hvd19wY3JzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgIGNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CisJdTggZGlnZXN0W1RQTV9ESUdFU1RfU0laRV07CiAJc3NpemVfdCByYzsKIAlpbnQgaSwgaiwgbnVtX3BjcnM7Ci0JX19iZTMyIGluZGV4OwogCWNoYXIgKnN0ciA9IGJ1ZjsKLQogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwogCi0JZGF0YSA9IGt6YWxsb2MoVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KGRhdGEsIHRwbV9jYXAsIHNpemVvZih0cG1fY2FwKSk7Ci0JZGF0YVtUUE1fQ0FQX0lEWF0gPSBUUE1fQ0FQX1BST1A7Ci0JZGF0YVtUUE1fQ0FQX1NVQkNBUF9JRFhdID0gVFBNX0NBUF9QUk9QX1BDUjsKLQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX1BST1BfUENSLCAmY2FwLAogCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgUENSUyIpOwotCWlmIChyYykgewotCQlrZnJlZShkYXRhKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KIAotCW51bV9wY3JzID0gYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgMTQpKSk7CisJbnVtX3BjcnMgPSBiZTMyX3RvX2NwdShjYXAubnVtX3BjcnMpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGNyczsgaSsrKSB7Ci0JCW1lbWNweShkYXRhLCBwY3JyZWFkLCBzaXplb2YocGNycmVhZCkpOwotCQlpbmRleCA9IGNwdV90b19iZTMyKGkpOwotCQltZW1jcHkoZGF0YSArIDEwLCAmaW5kZXgsIDQpOwotCQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkJImF0dGVtcHRpbmcgdG8gcmVhZCBhIFBDUiIpOworCQlyYyA9IF9fdHBtX3Bjcl9yZWFkKGNoaXAsIGksIGRpZ2VzdCk7CiAJCWlmIChyYykKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIlBDUi0lMDJkOiAiLCBpKTsKIAkJZm9yIChqID0gMDsgaiA8IFRQTV9ESUdFU1RfU0laRTsgaisrKQotCQkJc3RyICs9IHNwcmludGYoc3RyLCAiJTAyWCAiLCAqKGRhdGEgKyAxMCArIGopKTsKKwkJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiUwMlggIiwgZGlnZXN0W2pdKTsKIAkJc3RyICs9IHNwcmludGYoc3RyLCAiXG4iKTsKIAl9Ci1vdXQ6Ci0Ja2ZyZWUoZGF0YSk7CiAJcmV0dXJuIHN0ciAtIGJ1ZjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHRwbV9zaG93X3BjcnMpOwogCiAjZGVmaW5lICBSRUFEX1BVQkVLX1JFU1VMVF9TSVpFIDMxNAotc3RhdGljIGNvbnN0IHU4IHJlYWRwdWJla1tdID0gewotCTAsIDE5MywJCQkvKiBUUE1fVEFHX1JRVV9DT01NQU5EICovCi0JMCwgMCwgMCwgMzAsCQkvKiBsZW5ndGggKi8KLQkwLCAwLCAwLCAxMjQsCQkvKiBUUE1fT1JEX1JlYWRQdWJlayAqLworI2RlZmluZSBUUE1fT1JEX1JFQURQVUJFSyBjcHVfdG9fYmUzMigxMjQpCitzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlciB0cG1fcmVhZHB1YmVrX2hlYWRlciA9IHsKKwkudGFnID0gVFBNX1RBR19SUVVfQ09NTUFORCwKKwkubGVuZ3RoID0gY3B1X3RvX2JlMzIoMzApLAorCS5vcmRpbmFsID0gVFBNX09SRF9SRUFEUFVCRUsKIH07CiAKIHNzaXplX3QgdHBtX3Nob3dfcHViZWsoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgIGNoYXIgKmJ1ZikKIHsKIAl1OCAqZGF0YTsKKwlzdHJ1Y3QgdHBtX2NtZF90IHRwbV9jbWQ7CiAJc3NpemVfdCBlcnI7CiAJaW50IGksIHJjOwogCWNoYXIgKnN0ciA9IGJ1ZjsKIAogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWlmIChjaGlwID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwogCi0JZGF0YSA9IGt6YWxsb2MoUkVBRF9QVUJFS19SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCByZWFkcHViZWssIHNpemVvZihyZWFkcHViZWspKTsKLQotCWVyciA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBSRUFEX1BVQkVLX1JFU1VMVF9TSVpFLAorCXRwbV9jbWQuaGVhZGVyLmluID0gdHBtX3JlYWRwdWJla19oZWFkZXI7CisJZXJyID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBSRUFEX1BVQkVLX1JFU1VMVF9TSVpFLAogCQkJImF0dGVtcHRpbmcgdG8gcmVhZCB0aGUgUFVCRUsiKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTgxMiw3ICs4MzYsNyBAQAogCSAgIDI1NiBieXRlIG1vZHVsdXMKIAkgICBpZ25vcmUgY2hlY2tzdW0gMjAgYnl0ZXMKIAkgKi8KLQorCWRhdGEgPSB0cG1fY21kLnBhcmFtcy5yZWFkcHViZWtfb3V0X2J1ZmZlcjsKIAlzdHIgKz0KIAkgICAgc3ByaW50ZihzdHIsCiAJCSAgICAiQWxnb3JpdGhtOiAlMDJYICUwMlggJTAyWCAlMDJYXG5FbmNzY2hlbWU6ICUwMlggJTAyWFxuIgpAQCAtODMyLDY1ICs4NTYsMzMgQEAKIAl9CiBvdXQ6CiAJcmMgPSBzdHIgLSBidWY7Ci0Ja2ZyZWUoZGF0YSk7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfcHViZWspOwogCi0jZGVmaW5lIENBUF9WRVJTSU9OXzFfMSA2Ci0jZGVmaW5lIENBUF9WRVJTSU9OXzFfMiAweDFBCi0jZGVmaW5lIENBUF9WRVJTSU9OX0lEWCAxMwotc3RhdGljIGNvbnN0IHU4IGNhcF92ZXJzaW9uW10gPSB7Ci0JMCwgMTkzLAkJCS8qIFRQTV9UQUdfUlFVX0NPTU1BTkQgKi8KLQkwLCAwLCAwLCAxOCwJCS8qIGxlbmd0aCAqLwotCTAsIDAsIDAsIDEwMSwJCS8qIFRQTV9PUkRfR2V0Q2FwYWJpbGl0eSAqLwotCTAsIDAsIDAsIDAsCi0JMCwgMCwgMCwgMAotfTsKIAogc3NpemVfdCB0cG1fc2hvd19jYXBzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCSAgICAgIGNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKKwljYXBfdCBjYXA7CiAJc3NpemVfdCByYzsKIAljaGFyICpzdHIgPSBidWY7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVI7Ci0KLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBkYXRhLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCisJcmMgPSB0cG1fZ2V0Y2FwKGRldiwgVFBNX0NBUF9QUk9QX01BTlVGQUNUVVJFUiwgJmNhcCwKIAkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgbWFudWZhY3R1cmVyIik7Ci0JaWYgKHJjKSB7Ci0JCWtmcmVlKGRhdGEpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzdHIgKz0gc3ByaW50ZihzdHIsICJNYW51ZmFjdHVyZXI6IDB4JXhcbiIsCi0JCSAgICAgICBiZTMyX3RvX2NwdSgqKChfX2JlMzIgKikgKGRhdGEgKyBUUE1fR0VUX0NBUF9SRVRfVUlOVDMyXzFfSURYKSkpKTsKLQotCW1lbWNweShkYXRhLCBjYXBfdmVyc2lvbiwgc2l6ZW9mKGNhcF92ZXJzaW9uKSk7Ci0JZGF0YVtDQVBfVkVSU0lPTl9JRFhdID0gQ0FQX1ZFUlNJT05fMV8xOwotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsIGRhdGEsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCSJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgMS4xIHZlcnNpb24iKTsKIAlpZiAocmMpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKKwlzdHIgKz0gc3ByaW50ZihzdHIsICJNYW51ZmFjdHVyZXI6IDB4JXhcbiIsCisJCSAgICAgICBiZTMyX3RvX2NwdShjYXAubWFudWZhY3R1cmVyX2lkKSk7CiAKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBDQVBfVkVSU0lPTl8xXzEsICZjYXAsCisJCSAgICAgICAgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSAxLjEgdmVyc2lvbiIpOworCWlmIChyYykKKwkJcmV0dXJuIDA7CiAJc3RyICs9IHNwcmludGYoc3RyLAogCQkgICAgICAgIlRDRyB2ZXJzaW9uOiAlZC4lZFxuRmlybXdhcmUgdmVyc2lvbjogJWQuJWRcbiIsCi0JCSAgICAgICAoaW50KSBkYXRhWzE0XSwgKGludCkgZGF0YVsxNV0sIChpbnQpIGRhdGFbMTZdLAotCQkgICAgICAgKGludCkgZGF0YVsxN10pOwotCi1vdXQ6Ci0Ja2ZyZWUoZGF0YSk7CisJCSAgICAgICBjYXAudHBtX3ZlcnNpb24uTWFqb3IsIGNhcC50cG1fdmVyc2lvbi5NaW5vciwKKwkJICAgICAgIGNhcC50cG1fdmVyc2lvbi5yZXZNYWpvciwgY2FwLnRwbV92ZXJzaW9uLnJldk1pbm9yKTsKIAlyZXR1cm4gc3RyIC0gYnVmOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX3Nob3dfY2Fwcyk7CkBAIC04OTgsNTEgKzg5MCwyNSBAQAogc3NpemVfdCB0cG1fc2hvd19jYXBzXzFfMihzdHJ1Y3QgZGV2aWNlICogZGV2LAogCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGF0dHIsIGNoYXIgKmJ1ZikKIHsKLQl1OCAqZGF0YTsKLQlzc2l6ZV90IGxlbjsKKwljYXBfdCBjYXA7CisJc3NpemVfdCByYzsKIAljaGFyICpzdHIgPSBidWY7CiAKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRhdGEgPSBremFsbG9jKFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCW1lbWNweShkYXRhLCB0cG1fY2FwLCBzaXplb2YodHBtX2NhcCkpOwotCWRhdGFbVFBNX0NBUF9JRFhdID0gVFBNX0NBUF9QUk9QOwotCWRhdGFbVFBNX0NBUF9TVUJDQVBfSURYXSA9IFRQTV9DQVBfUFJPUF9NQU5VRkFDVFVSRVI7Ci0KLQlsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFKTsKLQlpZiAobGVuIDw9IFRQTV9FUlJPUl9TSVpFKSB7Ci0JCWRldl9kYmcoY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCVkKSBvY2N1cnJlZCAiCi0JCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIG1hbnVmYWN0dXJlclxuIiwKLQkJCWJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9SRVRfQ09ERV9JRFgpKSkpOwotCQlrZnJlZShkYXRhKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBUUE1fQ0FQX1BST1BfTUFOVUZBQ1RVUkVSLCAmY2FwLAorCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBtYW51ZmFjdHVyZXIiKTsKKwlpZiAocmMpCiAJCXJldHVybiAwOwotCX0KLQogCXN0ciArPSBzcHJpbnRmKHN0ciwgIk1hbnVmYWN0dXJlcjogMHgleFxuIiwKLQkJICAgICAgIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoZGF0YSArIFRQTV9HRVRfQ0FQX1JFVF9VSU5UMzJfMV9JRFgpKSkpOwotCi0JbWVtY3B5KGRhdGEsIGNhcF92ZXJzaW9uLCBzaXplb2YoY2FwX3ZlcnNpb24pKTsKLQlkYXRhW0NBUF9WRVJTSU9OX0lEWF0gPSBDQVBfVkVSU0lPTl8xXzI7Ci0KLQlsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgZGF0YSwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFKTsKLQlpZiAobGVuIDw9IFRQTV9FUlJPUl9TSVpFKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiQSBUUE0gZXJyb3IgKCVkKSBvY2N1cnJlZCAiCi0JCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIDEuMiB2ZXJzaW9uXG4iLAotCQkJYmUzMl90b19jcHUoKigoX19iZTMyICopIChkYXRhICsgVFBNX1JFVF9DT0RFX0lEWCkpKSk7Ci0JCWdvdG8gb3V0OwotCX0KKwkJICAgICAgIGJlMzJfdG9fY3B1KGNhcC5tYW51ZmFjdHVyZXJfaWQpKTsKKwlyYyA9IHRwbV9nZXRjYXAoZGV2LCBDQVBfVkVSU0lPTl8xXzIsICZjYXAsCisJCQkgImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSAxLjIgdmVyc2lvbiIpOworCWlmIChyYykKKwkJcmV0dXJuIDA7CiAJc3RyICs9IHNwcmludGYoc3RyLAogCQkgICAgICAgIlRDRyB2ZXJzaW9uOiAlZC4lZFxuRmlybXdhcmUgdmVyc2lvbjogJWQuJWRcbiIsCi0JCSAgICAgICAoaW50KSBkYXRhWzE2XSwgKGludCkgZGF0YVsxN10sIChpbnQpIGRhdGFbMThdLAotCQkgICAgICAgKGludCkgZGF0YVsxOV0pOwotCi1vdXQ6Ci0Ja2ZyZWUoZGF0YSk7CisJCSAgICAgICBjYXAudHBtX3ZlcnNpb25fMV8yLk1ham9yLCBjYXAudHBtX3ZlcnNpb25fMV8yLk1pbm9yLAorCQkgICAgICAgY2FwLnRwbV92ZXJzaW9uXzFfMi5yZXZNYWpvciwKKwkJICAgICAgIGNhcC50cG1fdmVyc2lvbl8xXzIucmV2TWlub3IpOwogCXJldHVybiBzdHIgLSBidWY7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fc2hvd19jYXBzXzFfMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uaAppbmRleCA4ZTMwZGY0Li44ZTAwYjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC90cG0uaD4KIAogZW51bSB0cG1fdGltZW91dCB7CiAJVFBNX1RJTUVPVVQgPSA1LAkvKiBtc2VjcyAqLwpAQCAtMTIzLDYgKzEyNCwxNDcgQEAKIAlvdXRiKGluZGV4LCBiYXNlKTsKIAlvdXRiKHZhbHVlICYgMHhGRiwgYmFzZSsxKTsKIH0KK3N0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHsKKwlfX2JlMTYJdGFnOworCV9fYmUzMglsZW5ndGg7CisJX19iZTMyCW9yZGluYWw7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCB0cG1fb3V0cHV0X2hlYWRlciB7CisJX19iZTE2CXRhZzsKKwlfX2JlMzIJbGVuZ3RoOworCV9fYmUzMglyZXR1cm5fY29kZTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXN0Y2xlYXJfZmxhZ3NfdCB7CisJX19iZTE2CXRhZzsKKwl1OAlkZWFjdGl2YXRlZDsKKwl1OAlkaXNhYmxlRm9yY2VDbGVhcjsKKwl1OAlwaHlzaWNhbFByZXNlbmNlOworCXU4CXBoeXNpY2FsUHJlc2VuY2VMb2NrOworCXU4CWJHbG9iYWxMb2NrOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QJdHBtX3ZlcnNpb25fdCB7CisJdTgJTWFqb3I7CisJdTgJTWlub3I7CisJdTgJcmV2TWFqb3I7CisJdTgJcmV2TWlub3I7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdAl0cG1fdmVyc2lvbl8xXzJfdCB7CisJX19iZTE2CXRhZzsKKwl1OAlNYWpvcjsKKwl1OAlNaW5vcjsKKwl1OAlyZXZNYWpvcjsKKwl1OAlyZXZNaW5vcjsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXRpbWVvdXRfdCB7CisJX19iZTMyCWE7CisJX19iZTMyCWI7CisJX19iZTMyCWM7CisJX19iZTMyCWQ7Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBkdXJhdGlvbl90IHsKKwlfX2JlMzIJdHBtX3Nob3J0OworCV9fYmUzMgl0cG1fbWVkaXVtOworCV9fYmUzMgl0cG1fbG9uZzsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHBlcm1hbmVudF9mbGFnc190IHsKKwlfX2JlMTYJdGFnOworCXU4CWRpc2FibGU7CisJdTgJb3duZXJzaGlwOworCXU4CWRlYWN0aXZhdGVkOworCXU4CXJlYWRQdWJlazsKKwl1OAlkaXNhYmxlT3duZXJDbGVhcjsKKwl1OAlhbGxvd01haW50ZW5hbmNlOworCXU4CXBoeXNpY2FsUHJlc2VuY2VMaWZldGltZUxvY2s7CisJdTgJcGh5c2ljYWxQcmVzZW5jZUhXRW5hYmxlOworCXU4CXBoeXNpY2FsUHJlc2VuY2VDTURFbmFibGU7CisJdTgJQ0VLUFVzZWQ7CisJdTgJVFBNcG9zdDsKKwl1OAlUUE1wb3N0TG9jazsKKwl1OAlGSVBTOworCXU4CW9wZXJhdG9yOworCXU4CWVuYWJsZVJldm9rZUVLOworCXU4CW52TG9ja2VkOworCXU4CXJlYWRTUktQdWI7CisJdTgJdHBtRXN0YWJsaXNoZWQ7CisJdTgJbWFpbnRlbmFuY2VEb25lOworCXU4CWRpc2FibGVGdWxsREFMb2dpY0luZm87Cit9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3R5cGVkZWYgdW5pb24geworCXN0cnVjdAlwZXJtYW5lbnRfZmxhZ3NfdCBwZXJtX2ZsYWdzOworCXN0cnVjdAlzdGNsZWFyX2ZsYWdzX3QJc3RjbGVhcl9mbGFnczsKKwlib29sCW93bmVkOworCV9fYmUzMgludW1fcGNyczsKKwlzdHJ1Y3QJdHBtX3ZlcnNpb25fdAl0cG1fdmVyc2lvbjsKKwlzdHJ1Y3QJdHBtX3ZlcnNpb25fMV8yX3QgdHBtX3ZlcnNpb25fMV8yOworCV9fYmUzMgltYW51ZmFjdHVyZXJfaWQ7CisJc3RydWN0IHRpbWVvdXRfdCAgdGltZW91dDsKKwlzdHJ1Y3QgZHVyYXRpb25fdCBkdXJhdGlvbjsKK30gY2FwX3Q7CisKK3N0cnVjdAl0cG1fZ2V0Y2FwX3BhcmFtc19pbiB7CisJX19iZTMyCWNhcDsKKwlfX2JlMzIJc3ViY2FwX3NpemU7CisJX19iZTMyCXN1YmNhcDsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXRwbV9nZXRjYXBfcGFyYW1zX291dCB7CisJX19iZTMyCWNhcF9zaXplOworCWNhcF90CWNhcDsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0CXRwbV9yZWFkcHViZWtfcGFyYW1zX291dCB7CisJdTgJYWxnb3JpdGhtWzRdOworCXU4CWVuY3NjaGVtZVsyXTsKKwl1OAlzaWdzY2hlbWVbMl07CisJdTgJcGFyYW1ldGVyc1sxMl07IC8qYXNzdW1pbmcgUlNBKi8KKwlfX2JlMzIJa2V5c2l6ZTsKKwl1OAltb2R1bHVzWzI1Nl07CisJdTgJY2hlY2tzdW1bMjBdOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit0eXBlZGVmIHVuaW9uIHsKKwlzdHJ1Y3QJdHBtX2lucHV0X2hlYWRlciBpbjsKKwlzdHJ1Y3QJdHBtX291dHB1dF9oZWFkZXIgb3V0OworfSB0cG1fY21kX2hlYWRlcjsKKworI2RlZmluZSBUUE1fRElHRVNUX1NJWkUgMjAKK3N0cnVjdCB0cG1fcGNycmVhZF9vdXQgeworCXU4CXBjcl9yZXN1bHRbVFBNX0RJR0VTVF9TSVpFXTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHRwbV9wY3JyZWFkX2luIHsKKwlfX2JlMzIJcGNyX2lkeDsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHRwbV9wY3JleHRlbmRfaW4geworCV9fYmUzMglwY3JfaWR4OworCXU4CWhhc2hbVFBNX0RJR0VTVF9TSVpFXTsKK31fX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordHlwZWRlZiB1bmlvbiB7CisJc3RydWN0CXRwbV9nZXRjYXBfcGFyYW1zX291dCBnZXRjYXBfb3V0OworCXN0cnVjdAl0cG1fcmVhZHB1YmVrX3BhcmFtc19vdXQgcmVhZHB1YmVrX291dDsKKwl1OAlyZWFkcHViZWtfb3V0X2J1ZmZlcltzaXplb2Yoc3RydWN0IHRwbV9yZWFkcHViZWtfcGFyYW1zX291dCldOworCXN0cnVjdAl0cG1fZ2V0Y2FwX3BhcmFtc19pbiBnZXRjYXBfaW47CisJc3RydWN0CXRwbV9wY3JyZWFkX2luCXBjcnJlYWRfaW47CisJc3RydWN0CXRwbV9wY3JyZWFkX291dAlwY3JyZWFkX291dDsKKwlzdHJ1Y3QJdHBtX3BjcmV4dGVuZF9pbiBwY3JleHRlbmRfaW47Cit9IHRwbV9jbWRfcGFyYW1zOworCitzdHJ1Y3QgdHBtX2NtZF90IHsKKwl0cG1fY21kX2hlYWRlcgloZWFkZXI7CisJdHBtX2NtZF9wYXJhbXMJcGFyYW1zOworfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzc2l6ZV90CXRwbV9nZXRjYXAoc3RydWN0IGRldmljZSAqLCBfX2JlMzIsIGNhcF90ICosIGNvbnN0IGNoYXIgKik7CiAKIGV4dGVybiB2b2lkIHRwbV9nZXRfdGltZW91dHMoc3RydWN0IHRwbV9jaGlwICopOwogZXh0ZXJuIHZvaWQgdHBtX2dlbl9pbnRlcnJ1cHQoc3RydWN0IHRwbV9jaGlwICopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMKaW5kZXggZDBlNzkyNi4uYzY0YTFiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jCkBAIC0xNjgsMTIgKzE2OCwyMiBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGF0bWxfZHJ2ID0gewotCS5uYW1lID0gInRwbV9hdG1lbCIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuc3VzcGVuZCA9IHRwbV9wbV9zdXNwZW5kLAotCS5yZXN1bWUgPSB0cG1fcG1fcmVzdW1lLAorc3RhdGljIGludCB0cG1fYXRtbF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlyZXR1cm4gdHBtX3BtX3N1c3BlbmQoJmRldi0+ZGV2LCBtc2cpOworfQorCitzdGF0aWMgaW50IHRwbV9hdG1sX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHRwbV9wbV9yZXN1bWUoJmRldi0+ZGV2KTsKK30KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0bWxfZHJ2ID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRwbV9hdG1lbCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kID0gdHBtX2F0bWxfc3VzcGVuZCwKKwkucmVzdW1lID0gdHBtX2F0bWxfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9hdG1lbCh2b2lkKQpAQCAtMTg0LDcgKzE5NCw3IEBACiAJdW5zaWduZWQgbG9uZyBiYXNlOwogCXN0cnVjdCAgdHBtX2NoaXAgKmNoaXA7CiAKLQlyYyA9IGRyaXZlcl9yZWdpc3RlcigmYXRtbF9kcnYpOworCXJjID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdG1sX2Rydik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTIyMywxMyArMjMzLDEzIEBACiAJCWF0bWVsX3JlbGVhc2VfcmVnaW9uKGJhc2UsCiAJCQkJICAgICByZWdpb25fc2l6ZSk7CiBlcnJfdW5yZWdfZHJ2OgotCWRyaXZlcl91bnJlZ2lzdGVyKCZhdG1sX2Rydik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWxfZHJ2KTsKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2F0bWVsKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWxfZHJ2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXRtbF9kcnYpOwogCWF0bWxfcGxhdF9yZW1vdmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fdGlzLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwppbmRleCA3MTdhZjdhLi5hZWMxOTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYwpAQCAtNjU0LDEyICs2NTQsMjIgQEAKIAkJICAgIHNpemVvZih0cG1fcG5wX3RibFtUSVNfSElEX1VTUl9JRFhdLmlkKSwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGhpZCwgIlNldCBhZGRpdGlvbmFsIHNwZWNpZmljIEhJRCBmb3IgdGhpcyBkcml2ZXIgdG8gcHJvYmUiKTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHRpc19kcnYgPSB7Ci0JLm5hbWUgPSAidHBtX3RpcyIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkuc3VzcGVuZCA9IHRwbV9wbV9zdXNwZW5kLAotCS5yZXN1bWUgPSB0cG1fcG1fcmVzdW1lLAorc3RhdGljIGludCB0cG1fdGlzX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCXJldHVybiB0cG1fcG1fc3VzcGVuZCgmZGV2LT5kZXYsIG1zZyk7Cit9CisKK3N0YXRpYyBpbnQgdHBtX3Rpc19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiB0cG1fcG1fcmVzdW1lKCZkZXYtPmRldik7Cit9CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aXNfZHJ2ID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInRwbV90aXMiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCA9IHRwbV90aXNfc3VzcGVuZCwKKwkucmVzdW1lID0gdHBtX3Rpc19yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKQEAgLTY3MiwxNCArNjgyLDE0IEBACiAJaW50IHJjOwogCiAJaWYgKGZvcmNlKSB7Ci0JCXJjID0gZHJpdmVyX3JlZ2lzdGVyKCZ0aXNfZHJ2KTsKKwkJcmMgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRpc19kcnYpOwogCQlpZiAocmMgPCAwKQogCQkJcmV0dXJuIHJjOwogCQlpZiAoSVNfRVJSKHBkZXY9cGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgidHBtX3RpcyIsIC0xLCBOVUxMLCAwKSkpCiAJCQlyZXR1cm4gUFRSX0VSUihwZGV2KTsKIAkJaWYoKHJjPXRwbV90aXNfaW5pdCgmcGRldi0+ZGV2LCBUSVNfTUVNX0JBU0UsIFRJU19NRU1fTEVOLCAwKSkgIT0gMCkgewogCQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7Ci0JCQlkcml2ZXJfdW5yZWdpc3RlcigmdGlzX2Rydik7CisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGlzX2Rydik7CiAJCX0KIAkJcmV0dXJuIHJjOwogCX0KQEAgLTcxMSw3ICs3MjEsNyBAQAogCiAJaWYgKGZvcmNlKSB7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwotCQlkcml2ZXJfdW5yZWdpc3RlcigmdGlzX2Rydik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aXNfZHJ2KTsKIAl9IGVsc2UKIAkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZ0aXNfcG5wX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKaW5kZXggYmM4NGUxMi4uMjI0ZjI3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMjE2MiwxMyArMjE2MiwxMiBAQAogCWlmIChnZXRfdXNlcihub25ibG9jaywgcCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JLyogZmlsZS0+Zl9mbGFncyBpcyBzdGlsbCBCS0wgcHJvdGVjdGVkIGluIHRoZSBmcyBsYXllciAtIHZvbWl0ICovCi0JbG9ja19rZXJuZWwoKTsKKwlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJaWYgKG5vbmJsb2NrKQogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CiAJZWxzZQogCQlmaWxlLT5mX2ZsYWdzICY9IH5PX05PTkJMT0NLOwotCXVubG9ja19rZXJuZWwoKTsKKwlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jIGIvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCmluZGV4IDRmM2IzZjkuLmQ5NGQyNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYworKysgYi9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKQEAgLTQ3OSwxOCArNDc5LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKnZjX2NsYXNzOwogCi12b2lkIHZjc19tYWtlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit2b2lkIHZjc19tYWtlX3N5c2ZzKGludCBpbmRleCkKIHsKLQlkZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxKSwgTlVMTCwKLQkJICAgICAgInZjcyV1IiwgdHR5LT5pbmRleCArIDEpOwotCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEyOSksIE5VTEwsCi0JCSAgICAgICJ2Y3NhJXUiLCB0dHktPmluZGV4ICsgMSk7CisJZGV2aWNlX2NyZWF0ZSh2Y19jbGFzcywgTlVMTCwgTUtERVYoVkNTX01BSk9SLCBpbmRleCArIDEpLCBOVUxMLAorCQkgICAgICAidmNzJXUiLCBpbmRleCArIDEpOworCWRldmljZV9jcmVhdGUodmNfY2xhc3MsIE5VTEwsIE1LREVWKFZDU19NQUpPUiwgaW5kZXggKyAxMjkpLCBOVUxMLAorCQkgICAgICAidmNzYSV1IiwgaW5kZXggKyAxKTsKIH0KIAotdm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit2b2lkIHZjc19yZW1vdmVfc3lzZnMoaW50IGluZGV4KQogewotCWRldmljZV9kZXN0cm95KHZjX2NsYXNzLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxKSk7Ci0JZGV2aWNlX2Rlc3Ryb3kodmNfY2xhc3MsIE1LREVWKFZDU19NQUpPUiwgdHR5LT5pbmRleCArIDEyOSkpOworCWRldmljZV9kZXN0cm95KHZjX2NsYXNzLCBNS0RFVihWQ1NfTUFKT1IsIGluZGV4ICsgMSkpOworCWRldmljZV9kZXN0cm95KHZjX2NsYXNzLCBNS0RFVihWQ1NfTUFKT1IsIGluZGV4ICsgMTI5KSk7CiB9CiAKIGludCBfX2luaXQgdmNzX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggNzkwMGJkNi4uMmMxZDEzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTc3OCw2ICs3NzgsNyBAQAogCSAgICB9CiAJICAgIHZjLT52Y19rbWFsbG9jZWQgPSAxOwogCSAgICB2Y19pbml0KHZjLCB2Yy0+dmNfcm93cywgdmMtPnZjX2NvbHMsIDEpOworCSAgICB2Y3NfbWFrZV9zeXNmcyhjdXJyY29ucyk7CiAJICAgIGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZ2dF9ub3RpZmllcl9saXN0LCBWVF9BTExPQ0FURSwgJnBhcmFtKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC05ODcsNyArOTg4LDkgQEAKIAlpZiAodmNfY29uc19hbGxvY2F0ZWQoY3VycmNvbnMpKSB7CiAJCXN0cnVjdCB2Y19kYXRhICp2YyA9IHZjX2NvbnNbY3VycmNvbnNdLmQ7CiAJCXN0cnVjdCB2dF9ub3RpZmllcl9wYXJhbSBwYXJhbSA9IHsgLnZjID0gdmMgfTsKKwogCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmdnRfbm90aWZpZXJfbGlzdCwgVlRfREVBTExPQ0FURSwgJnBhcmFtKTsKKwkJdmNzX3JlbW92ZV9zeXNmcyhjdXJyY29ucyk7CiAJCXZjLT52Y19zdy0+Y29uX2RlaW5pdCh2Yyk7CiAJCXB1dF9waWQodmMtPnZ0X3BpZCk7CiAJCW1vZHVsZV9wdXQodmMtPnZjX3N3LT5vd25lcik7CkBAIC0yNzc1LDcgKzI3NzgsNiBAQAogCQkJCXR0eS0+dGVybWlvcy0+Y19pZmxhZyB8PSBJVVRGODsKIAkJCWVsc2UKIAkJCQl0dHktPnRlcm1pb3MtPmNfaWZsYWcgJj0gfklVVEY4OwotCQkJdmNzX21ha2Vfc3lzZnModHR5KTsKIAkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTI3OTUsNyArMjc5Nyw2IEBACiAJQlVHX09OKHZjID09IE5VTEwpOwogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIAl2Yy0+dmNfdHR5ID0gTlVMTDsKLQl2Y3NfcmVtb3ZlX3N5c2ZzKHR0eSk7CiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCXR0eV9zaHV0ZG93bih0dHkpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZSBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKaW5kZXggMTUyNTg4Mi4uMWVmYjI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCkBAIC0yLDMgKzIsNCBAQAogb2JqLSQoQ09ORklHX1g4Nl9DWUNMT05FX1RJTUVSKQkrPSBjeWNsb25lLm8KIG9iai0kKENPTkZJR19YODZfUE1fVElNRVIpCSs9IGFjcGlfcG0ubwogb2JqLSQoQ09ORklHX1NDeDIwMEhSX1RJTUVSKQkrPSBzY3gyMDBfaHJ0Lm8KK29iai0kKENPTkZJR19TSF9USU1FUl9DTVQpCSs9IHNoX2NtdC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3NoX2NtdC5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzgzYjQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9zaF9jbXQuYwpAQCAtMCwwICsxLDYxNSBAQAorLyoKKyAqIFN1cGVySCBUaW1lciBTdXBwb3J0IC0gQ01UCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2NtdC5oPgorCitzdHJ1Y3Qgc2hfY210X3ByaXYgeworCXZvaWQgX19pb21lbSAqbWFwYmFzZTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdW5zaWduZWQgbG9uZyB3aWR0aDsgLyogMTYgb3IgMzIgYml0IHZlcnNpb24gb2YgaGFyZHdhcmUgYmxvY2sgKi8KKwl1bnNpZ25lZCBsb25nIG92ZXJmbG93X2JpdDsKKwl1bnNpZ25lZCBsb25nIGNsZWFyX2JpdHM7CisJc3RydWN0IGlycWFjdGlvbiBpcnFhY3Rpb247CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBtYXRjaF92YWx1ZTsKKwl1bnNpZ25lZCBsb25nIG5leHRfbWF0Y2hfdmFsdWU7CisJdW5zaWduZWQgbG9uZyBtYXhfbWF0Y2hfdmFsdWU7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGNlZDsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX2N5Y2xlczsKK307CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2hfY210X2xvY2spOworCisjZGVmaW5lIENNU1RSIC0xIC8qIHNoYXJlZCByZWdpc3RlciAqLworI2RlZmluZSBDTUNTUiAwIC8qIGNoYW5uZWwgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ01DTlQgMSAvKiBjaGFubmVsIHJlZ2lzdGVyICovCisjZGVmaW5lIENNQ09SIDIgLyogY2hhbm5lbCByZWdpc3RlciAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2hfY210X3JlYWQoc3RydWN0IHNoX2NtdF9wcml2ICpwLCBpbnQgcmVnX25yKQoreworCXN0cnVjdCBzaF9jbXRfY29uZmlnICpjZmcgPSBwLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwLT5tYXBiYXNlOworCXVuc2lnbmVkIGxvbmcgb2ZmczsKKworCWlmIChyZWdfbnIgPT0gQ01TVFIpIHsKKwkJb2ZmcyA9IDA7CisJCWJhc2UgLT0gY2ZnLT5jaGFubmVsX29mZnNldDsKKwl9IGVsc2UKKwkJb2ZmcyA9IHJlZ19ucjsKKworCWlmIChwLT53aWR0aCA9PSAxNikKKwkJb2ZmcyA8PD0gMTsKKwllbHNlIHsKKwkJb2ZmcyA8PD0gMjsKKwkJaWYgKChyZWdfbnIgPT0gQ01DTlQpIHx8IChyZWdfbnIgPT0gQ01DT1IpKQorCQkJcmV0dXJuIGlvcmVhZDMyKGJhc2UgKyBvZmZzKTsKKwl9CisKKwlyZXR1cm4gaW9yZWFkMTYoYmFzZSArIG9mZnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2hfY210X3dyaXRlKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgaW50IHJlZ19uciwKKwkJCQl1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXN0cnVjdCBzaF9jbXRfY29uZmlnICpjZmcgPSBwLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBwLT5tYXBiYXNlOworCXVuc2lnbmVkIGxvbmcgb2ZmczsKKworCWlmIChyZWdfbnIgPT0gQ01TVFIpIHsKKwkJb2ZmcyA9IDA7CisJCWJhc2UgLT0gY2ZnLT5jaGFubmVsX29mZnNldDsKKwl9IGVsc2UKKwkJb2ZmcyA9IHJlZ19ucjsKKworCWlmIChwLT53aWR0aCA9PSAxNikKKwkJb2ZmcyA8PD0gMTsKKwllbHNlIHsKKwkJb2ZmcyA8PD0gMjsKKwkJaWYgKChyZWdfbnIgPT0gQ01DTlQpIHx8IChyZWdfbnIgPT0gQ01DT1IpKSB7CisJCQlpb3dyaXRlMzIodmFsdWUsIGJhc2UgKyBvZmZzKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCWlvd3JpdGUxNih2YWx1ZSwgYmFzZSArIG9mZnMpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzaF9jbXRfZ2V0X2NvdW50ZXIoc3RydWN0IHNoX2NtdF9wcml2ICpwLAorCQkJCQlpbnQgKmhhc193cmFwcGVkKQoreworCXVuc2lnbmVkIGxvbmcgdjEsIHYyLCB2MzsKKworCS8qIE1ha2Ugc3VyZSB0aGUgdGltZXIgdmFsdWUgaXMgc3RhYmxlLiBTdG9sZW4gZnJvbSBhY3BpX3BtLmMgKi8KKwlkbyB7CisJCXYxID0gc2hfY210X3JlYWQocCwgQ01DTlQpOworCQl2MiA9IHNoX2NtdF9yZWFkKHAsIENNQ05UKTsKKwkJdjMgPSBzaF9jbXRfcmVhZChwLCBDTUNOVCk7CisJfSB3aGlsZSAodW5saWtlbHkoKHYxID4gdjIgJiYgdjEgPCB2MykgfHwgKHYyID4gdjMgJiYgdjIgPCB2MSkKKwkJCSAgfHwgKHYzID4gdjEgJiYgdjMgPCB2MikpKTsKKworCSpoYXNfd3JhcHBlZCA9IHNoX2NtdF9yZWFkKHAsIENNQ1NSKSAmIHAtPm92ZXJmbG93X2JpdDsKKwlyZXR1cm4gdjI7Cit9CisKKworc3RhdGljIHZvaWQgc2hfY210X3N0YXJ0X3N0b3BfY2goc3RydWN0IHNoX2NtdF9wcml2ICpwLCBpbnQgc3RhcnQpCit7CisJc3RydWN0IHNoX2NtdF9jb25maWcgKmNmZyA9IHAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZhbHVlOworCisJLyogc3RhcnQgc3RvcCByZWdpc3RlciBzaGFyZWQgYnkgbXVsdGlwbGUgdGltZXIgY2hhbm5lbHMgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2hfY210X2xvY2ssIGZsYWdzKTsKKwl2YWx1ZSA9IHNoX2NtdF9yZWFkKHAsIENNU1RSKTsKKworCWlmIChzdGFydCkKKwkJdmFsdWUgfD0gMSA8PCBjZmctPnRpbWVyX2JpdDsKKwllbHNlCisJCXZhbHVlICY9IH4oMSA8PCBjZmctPnRpbWVyX2JpdCk7CisKKwlzaF9jbXRfd3JpdGUocCwgQ01TVFIsIHZhbHVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaF9jbXRfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHNoX2NtdF9lbmFibGUoc3RydWN0IHNoX2NtdF9wcml2ICpwLCB1bnNpZ25lZCBsb25nICpyYXRlKQoreworCXN0cnVjdCBzaF9jbXRfY29uZmlnICpjZmcgPSBwLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0OworCisJLyogZW5hYmxlIGNsb2NrICovCisJcmV0ID0gY2xrX2VuYWJsZShwLT5jbGspOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IGNhbm5vdCBlbmFibGUgY2xvY2sgXCIlc1wiXG4iLCBjZmctPmNsayk7CisJCXJldHVybiByZXQ7CisJfQorCSpyYXRlID0gY2xrX2dldF9yYXRlKHAtPmNsaykgLyA4OworCisJLyogbWFrZSBzdXJlIGNoYW5uZWwgaXMgZGlzYWJsZWQgKi8KKwlzaF9jbXRfc3RhcnRfc3RvcF9jaChwLCAwKTsKKworCS8qIGNvbmZpZ3VyZSBjaGFubmVsLCBwZXJpb2RpYyBtb2RlIGFuZCBtYXhpbXVtIHRpbWVvdXQgKi8KKwlpZiAocC0+d2lkdGggPT0gMTYpCisJCXNoX2NtdF93cml0ZShwLCBDTUNTUiwgMCk7CisJZWxzZQorCQlzaF9jbXRfd3JpdGUocCwgQ01DU1IsIDB4MDFhNCk7CisKKwlzaF9jbXRfd3JpdGUocCwgQ01DT1IsIDB4ZmZmZmZmZmYpOworCXNoX2NtdF93cml0ZShwLCBDTUNOVCwgMCk7CisKKwkvKiBlbmFibGUgY2hhbm5lbCAqLworCXNoX2NtdF9zdGFydF9zdG9wX2NoKHAsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfZGlzYWJsZShzdHJ1Y3Qgc2hfY210X3ByaXYgKnApCit7CisJLyogZGlzYWJsZSBjaGFubmVsICovCisJc2hfY210X3N0YXJ0X3N0b3BfY2gocCwgMCk7CisKKwkvKiBzdG9wIGNsb2NrICovCisJY2xrX2Rpc2FibGUocC0+Y2xrKTsKK30KKworLyogcHJpdmF0ZSBmbGFncyAqLworI2RlZmluZSBGTEFHX0NMT0NLRVZFTlQgKDEgPDwgMCkKKyNkZWZpbmUgRkxBR19DTE9DS1NPVVJDRSAoMSA8PCAxKQorI2RlZmluZSBGTEFHX1JFUFJPR1JBTSAoMSA8PCAyKQorI2RlZmluZSBGTEFHX1NLSVBFVkVOVCAoMSA8PCAzKQorI2RlZmluZSBGTEFHX0lSUUNPTlRFWFQgKDEgPDwgNCkKKworc3RhdGljIHZvaWQgc2hfY210X2Nsb2NrX2V2ZW50X3Byb2dyYW1fdmVyaWZ5KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwKKwkJCQkJICAgICAgaW50IGFic29sdXRlKQoreworCXVuc2lnbmVkIGxvbmcgbmV3X21hdGNoOworCXVuc2lnbmVkIGxvbmcgdmFsdWUgPSBwLT5uZXh0X21hdGNoX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAwOworCXVuc2lnbmVkIGxvbmcgbm93ID0gMDsKKwlpbnQgaGFzX3dyYXBwZWQ7CisKKwlub3cgPSBzaF9jbXRfZ2V0X2NvdW50ZXIocCwgJmhhc193cmFwcGVkKTsKKwlwLT5mbGFncyB8PSBGTEFHX1JFUFJPR1JBTTsgLyogZm9yY2UgcmVwcm9ncmFtICovCisKKwlpZiAoaGFzX3dyYXBwZWQpIHsKKwkJLyogd2UncmUgY29tcGV0aW5nIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyLgorCQkgKiAgLT4gbGV0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciByZXByb2dyYW0gdGhlIHRpbWVyLgorCQkgKiAgLT4gaW50ZXJydXB0IG51bWJlciB0d28gaGFuZGxlcyB0aGUgZXZlbnQuCisJCSAqLworCQlwLT5mbGFncyB8PSBGTEFHX1NLSVBFVkVOVDsKKwkJcmV0dXJuOworCX0KKworCWlmIChhYnNvbHV0ZSkKKwkJbm93ID0gMDsKKworCWRvIHsKKwkJLyogcmVwcm9ncmFtIHRoZSB0aW1lciBoYXJkd2FyZSwKKwkJICogYnV0IGRvbid0IHNhdmUgdGhlIG5ldyBtYXRjaCB2YWx1ZSB5ZXQuCisJCSAqLworCQluZXdfbWF0Y2ggPSBub3cgKyB2YWx1ZSArIGRlbGF5OworCQlpZiAobmV3X21hdGNoID4gcC0+bWF4X21hdGNoX3ZhbHVlKQorCQkJbmV3X21hdGNoID0gcC0+bWF4X21hdGNoX3ZhbHVlOworCisJCXNoX2NtdF93cml0ZShwLCBDTUNPUiwgbmV3X21hdGNoKTsKKworCQlub3cgPSBzaF9jbXRfZ2V0X2NvdW50ZXIocCwgJmhhc193cmFwcGVkKTsKKwkJaWYgKGhhc193cmFwcGVkICYmIChuZXdfbWF0Y2ggPiBwLT5tYXRjaF92YWx1ZSkpIHsKKwkJCS8qIHdlIGFyZSBjaGFuZ2luZyB0byBhIGdyZWF0ZXIgbWF0Y2ggdmFsdWUsCisJCQkgKiBzbyB0aGlzIHdyYXAgbXVzdCBiZSBjYXVzZWQgYnkgdGhlIGNvdW50ZXIKKwkJCSAqIG1hdGNoaW5nIHRoZSBvbGQgdmFsdWUuCisJCQkgKiAtPiBmaXJzdCBpbnRlcnJ1cHQgcmVwcm9ncmFtcyB0aGUgdGltZXIuCisJCQkgKiAtPiBpbnRlcnJ1cHQgbnVtYmVyIHR3byBoYW5kbGVzIHRoZSBldmVudC4KKwkJCSAqLworCQkJcC0+ZmxhZ3MgfD0gRkxBR19TS0lQRVZFTlQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChoYXNfd3JhcHBlZCkgeworCQkJLyogd2UgYXJlIGNoYW5naW5nIHRvIGEgc21hbGxlciBtYXRjaCB2YWx1ZSwKKwkJCSAqIHNvIHRoZSB3cmFwIG11c3QgYmUgY2F1c2VkIGJ5IHRoZSBjb3VudGVyCisJCQkgKiBtYXRjaGluZyB0aGUgbmV3IHZhbHVlLgorCQkJICogLT4gc2F2ZSBwcm9ncmFtbWVkIG1hdGNoIHZhbHVlLgorCQkJICogLT4gbGV0IGlzciBoYW5kbGUgdGhlIGV2ZW50LgorCQkJICovCisJCQlwLT5tYXRjaF92YWx1ZSA9IG5ld19tYXRjaDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogYmUgc2FmZTogdmVyaWZ5IGhhcmR3YXJlIHNldHRpbmdzICovCisJCWlmIChub3cgPCBuZXdfbWF0Y2gpIHsKKwkJCS8qIHRpbWVyIHZhbHVlIGlzIGJlbG93IG1hdGNoIHZhbHVlLCBhbGwgZ29vZC4KKwkJCSAqIHRoaXMgbWFrZXMgc3VyZSB3ZSB3b24ndCBtaXNzIGFueSBtYXRjaCBldmVudHMuCisJCQkgKiAtPiBzYXZlIHByb2dyYW1tZWQgbWF0Y2ggdmFsdWUuCisJCQkgKiAtPiBsZXQgaXNyIGhhbmRsZSB0aGUgZXZlbnQuCisJCQkgKi8KKwkJCXAtPm1hdGNoX3ZhbHVlID0gbmV3X21hdGNoOworCQkJYnJlYWs7CisJCX0KKworCQkvKiB0aGUgY291bnRlciBoYXMgcmVhY2hlZCBhIHZhbHVlIGdyZWF0ZXIKKwkJICogdGhhbiBvdXIgbmV3IG1hdGNoIHZhbHVlLiBhbmQgc2luY2UgdGhlCisJCSAqIGhhc193cmFwcGVkIGZsYWcgaXNuJ3Qgc2V0IHdlIG11c3QgaGF2ZQorCQkgKiBwcm9ncmFtbWVkIGEgdG9vIGNsb3NlIGV2ZW50LgorCQkgKiAtPiBpbmNyZWFzZSBkZWxheSBhbmQgcmV0cnkuCisJCSAqLworCQlpZiAoZGVsYXkpCisJCQlkZWxheSA8PD0gMTsKKwkJZWxzZQorCQkJZGVsYXkgPSAxOworCisJCWlmICghZGVsYXkpCisJCQlwcl93YXJuaW5nKCJzaF9jbXQ6IHRvbyBsb25nIGRlbGF5XG4iKTsKKworCX0gd2hpbGUgKGRlbGF5KTsKK30KKworc3RhdGljIHZvaWQgc2hfY210X3NldF9uZXh0KHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgdW5zaWduZWQgbG9uZyBkZWx0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGRlbHRhID4gcC0+bWF4X21hdGNoX3ZhbHVlKQorCQlwcl93YXJuaW5nKCJzaF9jbXQ6IGRlbHRhIG91dCBvZiByYW5nZVxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+bG9jaywgZmxhZ3MpOworCXAtPm5leHRfbWF0Y2hfdmFsdWUgPSBkZWx0YTsKKwlzaF9jbXRfY2xvY2tfZXZlbnRfcHJvZ3JhbV92ZXJpZnkocCwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfY210X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX2NtdF9wcml2ICpwID0gZGV2X2lkOworCisJLyogY2xlYXIgZmxhZ3MgKi8KKwlzaF9jbXRfd3JpdGUocCwgQ01DU1IsIHNoX2NtdF9yZWFkKHAsIENNQ1NSKSAmIHAtPmNsZWFyX2JpdHMpOworCisJLyogdXBkYXRlIGNsb2NrIHNvdXJjZSBjb3VudGVyIHRvIGJlZ2luIHdpdGggaWYgZW5hYmxlZAorCSAqIHRoZSB3cmFwIGZsYWcgc2hvdWxkIGJlIGNsZWFyZWQgYnkgdGhlIHRpbWVyIHNwZWNpZmljCisJICogaXNyIGJlZm9yZSB3ZSBlbmQgdXAgaGVyZS4KKwkgKi8KKwlpZiAocC0+ZmxhZ3MgJiBGTEFHX0NMT0NLU09VUkNFKQorCQlwLT50b3RhbF9jeWNsZXMgKz0gcC0+bWF0Y2hfdmFsdWU7CisKKwlpZiAoIShwLT5mbGFncyAmIEZMQUdfUkVQUk9HUkFNKSkKKwkJcC0+bmV4dF9tYXRjaF92YWx1ZSA9IHAtPm1heF9tYXRjaF92YWx1ZTsKKworCXAtPmZsYWdzIHw9IEZMQUdfSVJRQ09OVEVYVDsKKworCWlmIChwLT5mbGFncyAmIEZMQUdfQ0xPQ0tFVkVOVCkgeworCQlpZiAoIShwLT5mbGFncyAmIEZMQUdfU0tJUEVWRU5UKSkgeworCQkJaWYgKHAtPmNlZC5tb2RlID09IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpIHsKKwkJCQlwLT5uZXh0X21hdGNoX3ZhbHVlID0gcC0+bWF4X21hdGNoX3ZhbHVlOworCQkJCXAtPmZsYWdzIHw9IEZMQUdfUkVQUk9HUkFNOworCQkJfQorCisJCQlwLT5jZWQuZXZlbnRfaGFuZGxlcigmcC0+Y2VkKTsKKwkJfQorCX0KKworCXAtPmZsYWdzICY9IH5GTEFHX1NLSVBFVkVOVDsKKworCWlmIChwLT5mbGFncyAmIEZMQUdfUkVQUk9HUkFNKSB7CisJCXAtPmZsYWdzICY9IH5GTEFHX1JFUFJPR1JBTTsKKwkJc2hfY210X2Nsb2NrX2V2ZW50X3Byb2dyYW1fdmVyaWZ5KHAsIDEpOworCisJCWlmIChwLT5mbGFncyAmIEZMQUdfQ0xPQ0tFVkVOVCkKKwkJCWlmICgocC0+Y2VkLm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfU0hVVERPV04pCisJCQkgICAgfHwgKHAtPm1hdGNoX3ZhbHVlID09IHAtPm5leHRfbWF0Y2hfdmFsdWUpKQorCQkJCXAtPmZsYWdzICY9IH5GTEFHX1JFUFJPR1JBTTsKKwl9CisKKwlwLT5mbGFncyAmPSB+RkxBR19JUlFDT05URVhUOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHNoX2NtdF9zdGFydChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZykKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPmxvY2ssIGZsYWdzKTsKKworCWlmICghKHAtPmZsYWdzICYgKEZMQUdfQ0xPQ0tFVkVOVCB8IEZMQUdfQ0xPQ0tTT1VSQ0UpKSkKKwkJcmV0ID0gc2hfY210X2VuYWJsZShwLCAmcC0+cmF0ZSk7CisKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlwLT5mbGFncyB8PSBmbGFnOworCisJLyogc2V0dXAgdGltZW91dCBpZiBubyBjbG9ja2V2ZW50ICovCisJaWYgKChmbGFnID09IEZMQUdfQ0xPQ0tTT1VSQ0UpICYmICghKHAtPmZsYWdzICYgRkxBR19DTE9DS0VWRU5UKSkpCisJCXNoX2NtdF9zZXRfbmV4dChwLCBwLT5tYXhfbWF0Y2hfdmFsdWUpOworIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfc3RvcChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIHVuc2lnbmVkIGxvbmcgZmxhZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5sb2NrLCBmbGFncyk7CisKKwlmID0gcC0+ZmxhZ3MgJiAoRkxBR19DTE9DS0VWRU5UIHwgRkxBR19DTE9DS1NPVVJDRSk7CisJcC0+ZmxhZ3MgJj0gfmZsYWc7CisKKwlpZiAoZiAmJiAhKHAtPmZsYWdzICYgKEZMQUdfQ0xPQ0tFVkVOVCB8IEZMQUdfQ0xPQ0tTT1VSQ0UpKSkKKwkJc2hfY210X2Rpc2FibGUocCk7CisKKwkvKiBhZGp1c3QgdGhlIHRpbWVvdXQgdG8gbWF4aW11bSBpZiBvbmx5IGNsb2Nrc291cmNlIGxlZnQgKi8KKwlpZiAoKGZsYWcgPT0gRkxBR19DTE9DS0VWRU5UKSAmJiAocC0+ZmxhZ3MgJiBGTEFHX0NMT0NLU09VUkNFKSkKKwkJc2hfY210X3NldF9uZXh0KHAsIHAtPm1heF9tYXRjaF92YWx1ZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfY210X3ByaXYgKmNlZF90b19zaF9jbXQoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2VkLCBzdHJ1Y3Qgc2hfY210X3ByaXYsIGNlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX2NtdF9jbG9ja19ldmVudF9zdGFydChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsIGludCBwZXJpb2RpYykKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQgPSAmcC0+Y2VkOworCisJc2hfY210X3N0YXJ0KHAsIEZMQUdfQ0xPQ0tFVkVOVCk7CisKKwkvKiBUT0RPOiBjYWxjdWxhdGUgZ29vZCBzaGlmdCBmcm9tIHJhdGUgYW5kIGNvdW50ZXIgYml0IHdpZHRoICovCisKKwljZWQtPnNoaWZ0ID0gMzI7CisJY2VkLT5tdWx0ID0gZGl2X3NjKHAtPnJhdGUsIE5TRUNfUEVSX1NFQywgY2VkLT5zaGlmdCk7CisJY2VkLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKHAtPm1heF9tYXRjaF92YWx1ZSwgY2VkKTsKKwljZWQtPm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHgxZiwgY2VkKTsKKworCWlmIChwZXJpb2RpYykKKwkJc2hfY210X3NldF9uZXh0KHAsIChwLT5yYXRlICsgSFovMikgLyBIWik7CisJZWxzZQorCQlzaF9jbXRfc2V0X25leHQocCwgcC0+bWF4X21hdGNoX3ZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgc2hfY210X2Nsb2NrX2V2ZW50X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCkKK3sKKwlzdHJ1Y3Qgc2hfY210X3ByaXYgKnAgPSBjZWRfdG9fc2hfY210KGNlZCk7CisKKwkvKiBkZWFsIHdpdGggb2xkIHNldHRpbmcgZmlyc3QgKi8KKwlzd2l0Y2ggKGNlZC0+bW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQlzaF9jbXRfc3RvcChwLCBGTEFHX0NMT0NLRVZFTlQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgorCQlwcl9pbmZvKCJzaF9jbXQ6ICVzIHVzZWQgZm9yIHBlcmlvZGljIGNsb2NrIGV2ZW50c1xuIiwKKwkJCWNlZC0+bmFtZSk7CisJCXNoX2NtdF9jbG9ja19ldmVudF9zdGFydChwLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQlwcl9pbmZvKCJzaF9jbXQ6ICVzIHVzZWQgZm9yIG9uZXNob3QgY2xvY2sgZXZlbnRzXG4iLAorCQkJY2VkLT5uYW1lKTsKKwkJc2hfY210X2Nsb2NrX2V2ZW50X3N0YXJ0KHAsIDApOworCQlicmVhazsKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCQlzaF9jbXRfc3RvcChwLCBGTEFHX0NMT0NLRVZFTlQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2hfY210X2Nsb2NrX2V2ZW50X25leHQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCQkgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCit7CisJc3RydWN0IHNoX2NtdF9wcml2ICpwID0gY2VkX3RvX3NoX2NtdChjZWQpOworCisJQlVHX09OKGNlZC0+bW9kZSAhPSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKTsKKwlpZiAobGlrZWx5KHAtPmZsYWdzICYgRkxBR19JUlFDT05URVhUKSkKKwkJcC0+bmV4dF9tYXRjaF92YWx1ZSA9IGRlbHRhOworCWVsc2UKKwkJc2hfY210X3NldF9uZXh0KHAsIGRlbHRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaF9jbXRfcmVnaXN0ZXJfY2xvY2tldmVudChzdHJ1Y3Qgc2hfY210X3ByaXYgKnAsCisJCQkJICAgICAgIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgcmF0aW5nKQoreworCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZCA9ICZwLT5jZWQ7CisKKwltZW1zZXQoY2VkLCAwLCBzaXplb2YoKmNlZCkpOworCisJY2VkLT5uYW1lID0gbmFtZTsKKwljZWQtPmZlYXR1cmVzID0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUM7CisJY2VkLT5mZWF0dXJlcyB8PSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UOworCWNlZC0+cmF0aW5nID0gcmF0aW5nOworCWNlZC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisJY2VkLT5zZXRfbmV4dF9ldmVudCA9IHNoX2NtdF9jbG9ja19ldmVudF9uZXh0OworCWNlZC0+c2V0X21vZGUgPSBzaF9jbXRfY2xvY2tfZXZlbnRfbW9kZTsKKworCXByX2luZm8oInNoX2NtdDogJXMgdXNlZCBmb3IgY2xvY2sgZXZlbnRzXG4iLCBjZWQtPm5hbWUpOworCWNlZC0+bXVsdCA9IDE7IC8qIHdvcmsgYXJvdW5kIG1pc3BsYWNlZCBXQVJOX09OKCkgaW4gY2xvY2tldmVudHMuYyAqLworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZWQpOworfQorCitpbnQgc2hfY210X3JlZ2lzdGVyKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgY2hhciAqbmFtZSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgY2xvY2tldmVudF9yYXRpbmcsCisJCSAgICB1bnNpZ25lZCBsb25nIGNsb2Nrc291cmNlX3JhdGluZykKK3sKKwlpZiAocC0+d2lkdGggPT0gKHNpemVvZihwLT5tYXhfbWF0Y2hfdmFsdWUpICogOCkpCisJCXAtPm1heF9tYXRjaF92YWx1ZSA9IH4wOworCWVsc2UKKwkJcC0+bWF4X21hdGNoX3ZhbHVlID0gKDEgPDwgcC0+d2lkdGgpIC0gMTsKKworCXAtPm1hdGNoX3ZhbHVlID0gcC0+bWF4X21hdGNoX3ZhbHVlOworCXNwaW5fbG9ja19pbml0KCZwLT5sb2NrKTsKKworCWlmIChjbG9ja2V2ZW50X3JhdGluZykKKwkJc2hfY210X3JlZ2lzdGVyX2Nsb2NrZXZlbnQocCwgbmFtZSwgY2xvY2tldmVudF9yYXRpbmcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfY210X3NldHVwKHN0cnVjdCBzaF9jbXRfcHJpdiAqcCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2hfY210X2NvbmZpZyAqY2ZnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycSwgcmV0OworCXJldCA9IC1FTlhJTzsKKworCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKKwlwLT5wZGV2ID0gcGRldjsKKworCWlmICghY2ZnKSB7CisJCWRldl9lcnIoJnAtPnBkZXYtPmRldiwgIm1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwLT5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBJL08gbWVtb3J5XG4iKTsKKwkJZ290byBlcnIwOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocC0+cGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBpcnFcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJLyogbWFwIG1lbW9yeSwgbGV0IG1hcGJhc2UgcG9pbnQgdG8gb3VyIGNoYW5uZWwgKi8KKwlwLT5tYXBiYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKHAtPm1hcGJhc2UgPT0gTlVMTCkgeworCQlwcl9lcnIoInNoX2NtdDogZmFpbGVkIHRvIHJlbWFwIEkvTyBtZW1vcnlcbiIpOworCQlnb3RvIGVycjA7CisJfQorCisJLyogcmVxdWVzdCBpcnEgdXNpbmcgc2V0dXBfaXJxKCkgKHRvbyBlYXJseSBmb3IgcmVxdWVzdF9pcnEoKSkgKi8KKwlwLT5pcnFhY3Rpb24ubmFtZSA9IGNmZy0+bmFtZTsKKwlwLT5pcnFhY3Rpb24uaGFuZGxlciA9IHNoX2NtdF9pbnRlcnJ1cHQ7CisJcC0+aXJxYWN0aW9uLmRldl9pZCA9IHA7CisJcC0+aXJxYWN0aW9uLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEw7CisJcC0+aXJxYWN0aW9uLm1hc2sgPSBDUFVfTUFTS19OT05FOworCXJldCA9IHNldHVwX2lycShpcnEsICZwLT5pcnFhY3Rpb24pOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCJzaF9jbXQ6IGZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKKwkJZ290byBlcnIxOworCX0KKworCS8qIGdldCBob2xkIG9mIGNsb2NrICovCisJcC0+Y2xrID0gY2xrX2dldCgmcC0+cGRldi0+ZGV2LCBjZmctPmNsayk7CisJaWYgKElTX0VSUihwLT5jbGspKSB7CisJCXByX2Vycigic2hfY210OiBjYW5ub3QgZ2V0IGNsb2NrIFwiJXNcIlxuIiwgY2ZnLT5jbGspOworCQlyZXQgPSBQVFJfRVJSKHAtPmNsayk7CisJCWdvdG8gZXJyMjsKKwl9CisKKwlpZiAocmVzb3VyY2Vfc2l6ZShyZXMpID09IDYpIHsKKwkJcC0+d2lkdGggPSAxNjsKKwkJcC0+b3ZlcmZsb3dfYml0ID0gMHg4MDsKKwkJcC0+Y2xlYXJfYml0cyA9IH4weGMwOworCX0gZWxzZSB7CisJCXAtPndpZHRoID0gMzI7CisJCXAtPm92ZXJmbG93X2JpdCA9IDB4ODAwMDsKKwkJcC0+Y2xlYXJfYml0cyA9IH4weGMwMDA7CisJfQorCisJcmV0dXJuIHNoX2NtdF9yZWdpc3RlcihwLCBjZmctPm5hbWUsCisJCQkgICAgICAgY2ZnLT5jbG9ja2V2ZW50X3JhdGluZywKKwkJCSAgICAgICBjZmctPmNsb2Nrc291cmNlX3JhdGluZyk7CisgZXJyMjoKKwlmcmVlX2lycShpcnEsIHApOworIGVycjE6CisJaW91bm1hcChwLT5tYXBiYXNlKTsKKyBlcnIwOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNoX2NtdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzaF9jbXRfcHJpdiAqcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlwID0ga21hbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKKwlpZiAocCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBkcml2ZXIgZGF0YVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldCA9IHNoX2NtdF9zZXR1cChwLCBwZGV2KTsKKwlpZiAocmV0KSB7CisJCWtmcmVlKHApOworCisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzaF9jbXRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIC1FQlVTWTsgLyogY2Fubm90IHVucmVnaXN0ZXIgY2xvY2tldmVudCBhbmQgY2xvY2tzb3VyY2UgKi8KK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfY210X2RldmljZV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHNoX2NtdF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNoX2NtdF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzaF9jbXQiLAorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoX2NtdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2hfY210X2RldmljZV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2hfY210X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2hfY210X2RldmljZV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzaF9jbXRfaW5pdCk7Cittb2R1bGVfZXhpdChzaF9jbXRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1hZ251cyBEYW1tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cGVySCBDTVQgVGltZXIgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcXVldWUuYwppbmRleCBiNmZlN2U3Li5jNzY5ZWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9xdWV1ZS5jCisrKyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3F1ZXVlLmMKQEAgLTEsOSArMSw5IEBACiAvKgogICogCWNuX3F1ZXVlLmMKLSAqIAorICoKICAqIDIwMDQtMjAwNSBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMzEsNiArMzEsNDggQEAKICNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCisKKy8qCisgKiBUaGlzIGpvYiBpcyBzZW50IHRvIHRoZSBrZXZlbnQgd29ya3F1ZXVlLgorICogV2hpbGUgbm8gZXZlbnQgaXMgb25jZSBzZW50IHRvIGFueSBjYWxsYmFjaywgdGhlIGNvbm5lY3RvciB3b3JrcXVldWUKKyAqIGlzIG5vdCBjcmVhdGVkIHRvIGF2b2lkIGEgdXNlbGVzcyB3YWl0aW5nIGtlcm5lbCB0YXNrLgorICogT25jZSB0aGUgZmlyc3QgZXZlbnQgaXMgcmVjZWl2ZWQsIHdlIGNyZWF0ZSB0aGlzIGRlZGljYXRlZCB3b3JrcXVldWUgd2hpY2gKKyAqIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBmbG93IG9mIGRhdGEgY2FuIGJlIGhpZ2ggYW5kIHdlIGRvbid0IHdhbnQKKyAqIHRvIGVuY3VtYmVyIGtldmVudGQgd2l0aCB0aGF0LgorICovCitzdGF0aWMgdm9pZCBjbl9xdWV1ZV9jcmVhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldjsKKworCWRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY25fcXVldWVfZGV2LCB3cV9jcmVhdGlvbik7CisKKwlkZXYtPmNuX3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoZGV2LT5uYW1lKTsKKwkvKiBJZiB3ZSBmYWlsLCB3ZSB3aWxsIHVzZSBrZXZlbnRkIGZvciBhbGwgZm9sbG93aW5nIGNvbm5lY3RvciBqb2JzICovCisJV0FSTl9PTighZGV2LT5jbl9xdWV1ZSk7Cit9CisKKy8qCisgKiBRdWV1ZSBhIGRhdGEgc2VudCB0byBhIGNhbGxiYWNrLgorICogSWYgdGhlIGNvbm5lY3RvciB3b3JrcXVldWUgaXMgYWxyZWFkeSBjcmVhdGVkLCB3ZSBxdWV1ZSB0aGUgam9iIG9uIGl0LgorICogT3RoZXJ3aXNlLCB3ZSBxdWV1ZSB0aGUgam9iIHRvIGtldmVudCBhbmQgcXVldWUgdGhlIGNvbm5lY3RvciB3b3JrcXVldWUKKyAqIGNyZWF0aW9uIHRvby4KKyAqLworaW50IHF1ZXVlX2NuX3dvcmsoc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEsIHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY25fcXVldWVfZGV2ICpwZGV2ID0gY2JxLT5wZGV2OworCisJaWYgKGxpa2VseShwZGV2LT5jbl9xdWV1ZSkpCisJCXJldHVybiBxdWV1ZV93b3JrKHBkZXYtPmNuX3F1ZXVlLCB3b3JrKTsKKworCS8qIERvbid0IGNyZWF0ZSB0aGUgY29ubmVjdG9yIHdvcmtxdWV1ZSB0d2ljZSAqLworCWlmIChhdG9taWNfaW5jX3JldHVybigmcGRldi0+d3FfcmVxdWVzdGVkKSA9PSAxKQorCQlzY2hlZHVsZV93b3JrKCZwZGV2LT53cV9jcmVhdGlvbik7CisJZWxzZQorCQlhdG9taWNfZGVjKCZwZGV2LT53cV9yZXF1ZXN0ZWQpOworCisJcmV0dXJuIHNjaGVkdWxlX3dvcmsod29yayk7Cit9CisKIHZvaWQgY25fcXVldWVfd3JhcHBlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGNuX2NhbGxiYWNrX2VudHJ5ICpjYnEgPQpAQCAtNTgsMTQgKzEwMCwxNyBAQAogCXNucHJpbnRmKGNicS0+aWQubmFtZSwgc2l6ZW9mKGNicS0+aWQubmFtZSksICIlcyIsIG5hbWUpOwogCW1lbWNweSgmY2JxLT5pZC5pZCwgaWQsIHNpemVvZihzdHJ1Y3QgY2JfaWQpKTsKIAljYnEtPmRhdGEuY2FsbGJhY2sgPSBjYWxsYmFjazsKLQkKKwogCUlOSVRfV09SSygmY2JxLT53b3JrLCAmY25fcXVldWVfd3JhcHBlcik7CiAJcmV0dXJuIGNicTsKIH0KIAogc3RhdGljIHZvaWQgY25fcXVldWVfZnJlZV9jYWxsYmFjayhzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSkKIHsKLQlmbHVzaF93b3JrcXVldWUoY2JxLT5wZGV2LT5jbl9xdWV1ZSk7CisJLyogVGhlIGZpcnN0IGpvYnMgaGF2ZSBiZWVuIHNlbnQgdG8ga2V2ZW50LCBmbHVzaCB0aGVtIHRvbyAqLworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJaWYgKGNicS0+cGRldi0+Y25fcXVldWUpCisJCWZsdXNoX3dvcmtxdWV1ZShjYnEtPnBkZXYtPmNuX3F1ZXVlKTsKIAogCWtmcmVlKGNicSk7CiB9CkBAIC0xNDMsMTQgKzE4OCwxMSBAQAogCWF0b21pY19zZXQoJmRldi0+cmVmY250LCAwKTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5xdWV1ZV9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5xdWV1ZV9sb2NrKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndxX2NyZWF0ZWQpOwogCiAJZGV2LT5ubHMgPSBubHM7CiAKLQlkZXYtPmNuX3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoZGV2LT5uYW1lKTsKLQlpZiAoIWRldi0+Y25fcXVldWUpIHsKLQkJa2ZyZWUoZGV2KTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCUlOSVRfV09SSygmZGV2LT53cV9jcmVhdGlvbiwgY25fcXVldWVfY3JlYXRlKTsKIAogCXJldHVybiBkZXY7CiB9CkBAIC0xNTgsOSArMjAwLDI1IEBACiB2b2lkIGNuX3F1ZXVlX2ZyZWVfZGV2KHN0cnVjdCBjbl9xdWV1ZV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSwgKm47CisJbG9uZyB0aW1lb3V0OworCURFRklORV9XQUlUKHdhaXQpOwogCi0JZmx1c2hfd29ya3F1ZXVlKGRldi0+Y25fcXVldWUpOwotCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+Y25fcXVldWUpOworCS8qIEZsdXNoIHRoZSBmaXJzdCBwZW5kaW5nIGpvYnMgcXVldWVkIG9uIGtldmVudCAqLworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwkvKiBJZiB0aGUgY29ubmVjdG9yIHdvcmtxdWV1ZSBjcmVhdGlvbiBpcyBzdGlsbCBwZW5kaW5nLCB3YWl0IGZvciBpdCAqLworCXByZXBhcmVfdG9fd2FpdCgmZGV2LT53cV9jcmVhdGVkLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCWlmIChhdG9taWNfcmVhZCgmZGV2LT53cV9yZXF1ZXN0ZWQpICYmICFkZXYtPmNuX3F1ZXVlKSB7CisJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KEhaICogMik7CisJCWlmICghdGltZW91dCAmJiAhZGV2LT5jbl9xdWV1ZSkKKwkJCVdBUk5fT04oMSk7CisJfQorCWZpbmlzaF93YWl0KCZkZXYtPndxX2NyZWF0ZWQsICZ3YWl0KTsKKworCWlmIChkZXYtPmNuX3F1ZXVlKSB7CisJCWZsdXNoX3dvcmtxdWV1ZShkZXYtPmNuX3F1ZXVlKTsKKwkJZGVzdHJveV93b3JrcXVldWUoZGV2LT5jbl9xdWV1ZSk7CisJfQogCiAJc3Bpbl9sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjYnEsIG4sICZkZXYtPnF1ZXVlX2xpc3QsIGNhbGxiYWNrX2VudHJ5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwppbmRleCBiZjQ4MzAwLi5mZDMzNmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2Nvbm5lY3Rvci9jb25uZWN0b3IuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCiAgKiAJY29ubmVjdG9yLmMKLSAqIAorICoKICAqIDIwMDQtMjAwNSBDb3B5cmlnaHQgKGMpIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMTQ1LDE0ICsxNDUsMTMgQEAKIAkJCQlfX2NicS0+ZGF0YS5kZGF0YSA9IGRhdGE7CiAJCQkJX19jYnEtPmRhdGEuZGVzdHJ1Y3RfZGF0YSA9IGRlc3RydWN0X2RhdGE7CiAKLQkJCQlpZiAocXVldWVfd29yayhkZXYtPmNiZGV2LT5jbl9xdWV1ZSwKLQkJCQkJCQkmX19jYnEtPndvcmspKQorCQkJCWlmIChxdWV1ZV9jbl93b3JrKF9fY2JxLCAmX19jYnEtPndvcmspKQogCQkJCQllcnIgPSAwOwogCQkJCWVsc2UKIAkJCQkJZXJyID0gLUVJTlZBTDsKIAkJCX0gZWxzZSB7CiAJCQkJc3RydWN0IGNuX2NhbGxiYWNrX2RhdGEgKmQ7Ci0JCQkJCisKIAkJCQllcnIgPSAtRU5PTUVNOwogCQkJCV9fbmV3X2NicSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjbl9jYWxsYmFja19lbnRyeSksIEdGUF9BVE9NSUMpOwogCQkJCWlmIChfX25ld19jYnEpIHsKQEAgLTE2MywxMCArMTYyLDEyIEBACiAJCQkJCWQtPmRlc3RydWN0X2RhdGEgPSBkZXN0cnVjdF9kYXRhOwogCQkJCQlkLT5mcmVlID0gX19uZXdfY2JxOwogCisJCQkJCV9fbmV3X2NicS0+cGRldiA9IF9fY2JxLT5wZGV2OworCiAJCQkJCUlOSVRfV09SSygmX19uZXdfY2JxLT53b3JrLAogCQkJCQkJCSZjbl9xdWV1ZV93cmFwcGVyKTsKIAotCQkJCQlpZiAocXVldWVfd29yayhkZXYtPmNiZGV2LT5jbl9xdWV1ZSwKKwkJCQkJaWYgKHF1ZXVlX2NuX3dvcmsoX19uZXdfY2JxLAogCQkJCQkJICAgICZfX25ld19jYnEtPndvcmspKQogCQkJCQkJZXJyID0gMDsKIAkJCQkJZWxzZSB7CkBAIC0yMzcsNyArMjM4LDcgQEAKIAogCQlyZXEgPSAoc3RydWN0IGNuX25vdGlmeV9yZXEgKiljdGwtPmRhdGE7CiAJCWZvciAoaSA9IDA7IGkgPCBjdGwtPmlkeF9ub3RpZnlfbnVtOyArK2ksICsrcmVxKSB7Ci0JCQlpZiAoaWQtPmlkeCA+PSByZXEtPmZpcnN0ICYmIAorCQkJaWYgKGlkLT5pZHggPj0gcmVxLT5maXJzdCAmJgogCQkJCQlpZC0+aWR4IDwgcmVxLT5maXJzdCArIHJlcS0+cmFuZ2UpIHsKIAkJCQlpZHhfZm91bmQgPSAxOwogCQkJCWJyZWFrOwpAQCAtMjQ1LDcgKzI0Niw3IEBACiAJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgY3RsLT52YWxfbm90aWZ5X251bTsgKytpLCArK3JlcSkgewotCQkJaWYgKGlkLT52YWwgPj0gcmVxLT5maXJzdCAmJiAKKwkJCWlmIChpZC0+dmFsID49IHJlcS0+Zmlyc3QgJiYKIAkJCQkJaWQtPnZhbCA8IHJlcS0+Zmlyc3QgKyByZXEtPnJhbmdlKSB7CiAJCQkJdmFsX2ZvdW5kID0gMTsKIAkJCQlicmVhazsKQEAgLTQ1OSw3ICs0NjAsNyBAQAogCQluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKGRldi0+bmxzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCQorCiAJY25fYWxyZWFkeV9pbml0aWFsaXplZCA9IDE7CiAKIAllcnIgPSBjbl9hZGRfY2FsbGJhY2soJmRldi0+aWQsICJjb25uZWN0b3IiLCAmY25fY2FsbGJhY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggZDZkYWYzYy4uZDI3MGU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0xMDQsNyArMTA0LDggQEAKIAogCiAvKiBpbnRlcm5hbCBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50IF9fY3B1ZnJlcV9nb3Zlcm5vcihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgdW5zaWduZWQgaW50IGV2ZW50KTsKK3N0YXRpYyBpbnQgX19jcHVmcmVxX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCQl1bnNpZ25lZCBpbnQgZXZlbnQpOwogc3RhdGljIHVuc2lnbmVkIGludCBfX2NwdWZyZXFfZ2V0KHVuc2lnbmVkIGludCBjcHUpOwogc3RhdGljIHZvaWQgaGFuZGxlX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCkBAIC0xMjgsNyArMTI5LDcgQEAKIHB1cmVfaW5pdGNhbGwoaW5pdF9jcHVmcmVxX3RyYW5zaXRpb25fbm90aWZpZXJfbGlzdCk7CiAKIHN0YXRpYyBMSVNUX0hFQUQoY3B1ZnJlcV9nb3Zlcm5vcl9saXN0KTsKLXN0YXRpYyBERUZJTkVfTVVURVggKGNwdWZyZXFfZ292ZXJub3JfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWChjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAogc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjcHVmcmVxX2NwdV9nZXQodW5zaWduZWQgaW50IGNwdSkKIHsKQEAgLTM3MSw3ICszNzIsNyBAQAogCXN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICp0OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmY3B1ZnJlcV9nb3Zlcm5vcl9saXN0LCBnb3Zlcm5vcl9saXN0KQotCQlpZiAoIXN0cm5pY21wKHN0cl9nb3Zlcm5vcix0LT5uYW1lLENQVUZSRVFfTkFNRV9MRU4pKQorCQlpZiAoIXN0cm5pY21wKHN0cl9nb3Zlcm5vciwgdC0+bmFtZSwgQ1BVRlJFUV9OQU1FX0xFTikpCiAJCQlyZXR1cm4gdDsKIAogCXJldHVybiBOVUxMOwpAQCAtNDI5LDE1ICs0MzAsMTEgQEAKIAogCQltdXRleF91bmxvY2soJmNwdWZyZXFfZ292ZXJub3JfbXV0ZXgpOwogCX0KLSAgb3V0Ogorb3V0OgogCXJldHVybiBlcnI7CiB9CiAKIAotLyogZHJpdmVycy9iYXNlL2NwdS5jICovCi1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBjcHVfc3lzZGV2X2NsYXNzOwotCi0KIC8qKgogICogY3B1ZnJlcV9wZXJfY3B1X2F0dHJfcmVhZCgpIC8gc2hvd18jI2ZpbGVfbmFtZSgpIC0KICAqIHByaW50IG91dCBjcHVmcmVxIGluZm9ybWF0aW9uCkBAIC00NTAsMTEgKzQ0NywxMiBAQAogc3RhdGljIHNzaXplX3Qgc2hvd18jI2ZpbGVfbmFtZQkJCQlcCiAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikJCVwKIHsJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmIChidWYsICIldVxuIiwgcG9saWN5LT5vYmplY3QpOwlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHBvbGljeS0+b2JqZWN0KTsJXAogfQogCiBzaG93X29uZShjcHVpbmZvX21pbl9mcmVxLCBjcHVpbmZvLm1pbl9mcmVxKTsKIHNob3dfb25lKGNwdWluZm9fbWF4X2ZyZXEsIGNwdWluZm8ubWF4X2ZyZXEpOworc2hvd19vbmUoY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3ksIGNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5KTsKIHNob3dfb25lKHNjYWxpbmdfbWluX2ZyZXEsIG1pbik7CiBzaG93X29uZShzY2FsaW5nX21heF9mcmVxLCBtYXgpOwogc2hvd19vbmUoc2NhbGluZ19jdXJfZnJlcSwgY3VyKTsKQEAgLTQ3Niw3ICs0NzQsNyBAQAogCWlmIChyZXQpCQkJCQkJCVwKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAogCQkJCQkJCQkJXAotCXJldCA9IHNzY2FuZiAoYnVmLCAiJXUiLCAmbmV3X3BvbGljeS5vYmplY3QpOwkJCVwKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmbmV3X3BvbGljeS5vYmplY3QpOwkJCVwKIAlpZiAocmV0ICE9IDEpCQkJCQkJCVwKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAogCQkJCQkJCQkJXApAQCAtNDg2LDggKzQ4NCw4IEBACiAJcmV0dXJuIHJldCA/IHJldCA6IGNvdW50OwkJCQkJXAogfQogCi1zdG9yZV9vbmUoc2NhbGluZ19taW5fZnJlcSxtaW4pOwotc3RvcmVfb25lKHNjYWxpbmdfbWF4X2ZyZXEsbWF4KTsKK3N0b3JlX29uZShzY2FsaW5nX21pbl9mcmVxLCBtaW4pOworc3RvcmVfb25lKHNjYWxpbmdfbWF4X2ZyZXEsIG1heCk7CiAKIC8qKgogICogc2hvd19jcHVpbmZvX2N1cl9mcmVxIC0gY3VycmVudCBDUFUgZnJlcXVlbmN5IGFzIGRldGVjdGVkIGJ5IGhhcmR3YXJlCkBAIC01MDcsMTIgKzUwNSwxMyBAQAogICovCiBzdGF0aWMgc3NpemVfdCBzaG93X3NjYWxpbmdfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKLQlpZihwb2xpY3ktPnBvbGljeSA9PSBDUFVGUkVRX1BPTElDWV9QT1dFUlNBVkUpCisJaWYgKHBvbGljeS0+cG9saWN5ID09IENQVUZSRVFfUE9MSUNZX1BPV0VSU0FWRSkKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAicG93ZXJzYXZlXG4iKTsKIAllbHNlIGlmIChwb2xpY3ktPnBvbGljeSA9PSBDUFVGUkVRX1BPTElDWV9QRVJGT1JNQU5DRSkKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAicGVyZm9ybWFuY2VcbiIpOwogCWVsc2UgaWYgKHBvbGljeS0+Z292ZXJub3IpCi0JCXJldHVybiBzY25wcmludGYoYnVmLCBDUFVGUkVRX05BTUVfTEVOLCAiJXNcbiIsIHBvbGljeS0+Z292ZXJub3ItPm5hbWUpOworCQlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgQ1BVRlJFUV9OQU1FX0xFTiwgIiVzXG4iLAorCQkJCXBvbGljeS0+Z292ZXJub3ItPm5hbWUpOwogCXJldHVybiAtRUlOVkFMOwogfQogCkBAIC01MzEsNyArNTMwLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc3NjYW5mIChidWYsICIlMTVzIiwgc3RyX2dvdmVybm9yKTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJTE1cyIsIHN0cl9nb3Zlcm5vcik7CiAJaWYgKHJldCAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNTc1LDcgKzU3NCw4IEBACiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmY3B1ZnJlcV9nb3Zlcm5vcl9saXN0LCBnb3Zlcm5vcl9saXN0KSB7Ci0JCWlmIChpID49IChzc2l6ZV90KSAoKFBBR0VfU0laRSAvIHNpemVvZihjaGFyKSkgLSAoQ1BVRlJFUV9OQU1FX0xFTiArIDIpKSkKKwkJaWYgKGkgPj0gKHNzaXplX3QpICgoUEFHRV9TSVpFIC8gc2l6ZW9mKGNoYXIpKQorCQkgICAgLSAoQ1BVRlJFUV9OQU1FX0xFTiArIDIpKSkKIAkJCWdvdG8gb3V0OwogCQlpICs9IHNjbnByaW50ZigmYnVmW2ldLCBDUFVGUkVRX05BTUVfTEVOLCAiJXMgIiwgdC0+bmFtZSk7CiAJfQpAQCAtNTk0LDcgKzU5NCw3IEBACiAJCQlpICs9IHNjbnByaW50ZigmYnVmW2ldLCAoUEFHRV9TSVpFIC0gaSAtIDIpLCAiICIpOwogCQlpICs9IHNjbnByaW50ZigmYnVmW2ldLCAoUEFHRV9TSVpFIC0gaSAtIDIpLCAiJXUiLCBjcHUpOwogCQlpZiAoaSA+PSAoUEFHRV9TSVpFIC0gNSkpCi0JCSAgICBicmVhazsKKwkJCWJyZWFrOwogCX0KIAlpICs9IHNwcmludGYoJmJ1ZltpXSwgIlxuIik7CiAJcmV0dXJuIGk7CkBAIC02NjAsNiArNjYwLDcgQEAKIGRlZmluZV9vbmVfcm8wNDAwKGNwdWluZm9fY3VyX2ZyZXEpOwogZGVmaW5lX29uZV9ybyhjcHVpbmZvX21pbl9mcmVxKTsKIGRlZmluZV9vbmVfcm8oY3B1aW5mb19tYXhfZnJlcSk7CitkZWZpbmVfb25lX3JvKGNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5KTsKIGRlZmluZV9vbmVfcm8oc2NhbGluZ19hdmFpbGFibGVfZ292ZXJub3JzKTsKIGRlZmluZV9vbmVfcm8oc2NhbGluZ19kcml2ZXIpOwogZGVmaW5lX29uZV9ybyhzY2FsaW5nX2N1cl9mcmVxKTsKQEAgLTY3Myw2ICs2NzQsNyBAQAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRlZmF1bHRfYXR0cnNbXSA9IHsKIAkmY3B1aW5mb19taW5fZnJlcS5hdHRyLAogCSZjcHVpbmZvX21heF9mcmVxLmF0dHIsCisJJmNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5LmF0dHIsCiAJJnNjYWxpbmdfbWluX2ZyZXEuYXR0ciwKIAkmc2NhbGluZ19tYXhfZnJlcS5hdHRyLAogCSZhZmZlY3RlZF9jcHVzLmF0dHIsCkBAIC02ODQsMTAgKzY4NiwxMCBAQAogCU5VTEwKIH07CiAKLSNkZWZpbmUgdG9fcG9saWN5KGspIGNvbnRhaW5lcl9vZihrLHN0cnVjdCBjcHVmcmVxX3BvbGljeSxrb2JqKQotI2RlZmluZSB0b19hdHRyKGEpIGNvbnRhaW5lcl9vZihhLHN0cnVjdCBmcmVxX2F0dHIsYXR0cikKKyNkZWZpbmUgdG9fcG9saWN5KGspIGNvbnRhaW5lcl9vZihrLCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3ksIGtvYmopCisjZGVmaW5lIHRvX2F0dHIoYSkgY29udGFpbmVyX29mKGEsIHN0cnVjdCBmcmVxX2F0dHIsIGF0dHIpCiAKLXN0YXRpYyBzc2l6ZV90IHNob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIgLGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IHRvX3BvbGljeShrb2JqKTsKIAlzdHJ1Y3QgZnJlcV9hdHRyICpmYXR0ciA9IHRvX2F0dHIoYXR0cik7CkBAIC04NTMsMTAgKzg1NSwxMCBAQAogCQlpZiAoY3B1ID09IGopCiAJCQljb250aW51ZTsKIAotCQkvKiBjaGVjayBmb3IgZXhpc3RpbmcgYWZmZWN0ZWQgQ1BVcy4gIFRoZXkgbWF5IG5vdCBiZSBhd2FyZQotCQkgKiBvZiBpdCBkdWUgdG8gQ1BVIEhvdHBsdWcuCisJCS8qIENoZWNrIGZvciBleGlzdGluZyBhZmZlY3RlZCBDUFVzLgorCQkgKiBUaGV5IG1heSBub3QgYmUgYXdhcmUgb2YgaXQgZHVlIHRvIENQVSBIb3RwbHVnLgogCQkgKi8KLQkJbWFuYWdlZF9wb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQoaik7CQkvLyBGSVhNRTogV2hlcmUgaXMgdGhpcyByZWxlYXNlZD8gIFdoYXQgYWJvdXQgZXJyb3IgcGF0aHM/CisJCW1hbmFnZWRfcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGopOwkJLyogRklYTUU6IFdoZXJlIGlzIHRoaXMgcmVsZWFzZWQ/ICBXaGF0IGFib3V0IGVycm9yIHBhdGhzPyAqLwogCQlpZiAodW5saWtlbHkobWFuYWdlZF9wb2xpY3kpKSB7CiAKIAkJCS8qIFNldCBwcm9wZXIgcG9saWN5X2NwdSAqLwpAQCAtMTEyNyw4ICsxMTI5LDggQEAKICAqCUBvbGRfZnJlcTogQ1BVIGZyZXF1ZW5jeSB0aGUga2VybmVsIHRoaW5rcyB0aGUgQ1BVIHJ1bnMgYXQKICAqCUBuZXdfZnJlcTogQ1BVIGZyZXF1ZW5jeSB0aGUgQ1BVIGFjdHVhbGx5IHJ1bnMgYXQKICAqCi0gKglXZSBhZGp1c3QgdG8gY3VycmVudCBmcmVxdWVuY3kgZmlyc3QsIGFuZCBuZWVkIHRvIGNsZWFuIHVwIGxhdGVyLiBTbyBlaXRoZXIgY2FsbAotICoJdG8gY3B1ZnJlcV91cGRhdGVfcG9saWN5KCkgb3Igc2NoZWR1bGUgaGFuZGxlX3VwZGF0ZSgpKS4KKyAqCVdlIGFkanVzdCB0byBjdXJyZW50IGZyZXF1ZW5jeSBmaXJzdCwgYW5kIG5lZWQgdG8gY2xlYW4gdXAgbGF0ZXIuCisgKglTbyBlaXRoZXIgY2FsbCB0byBjcHVmcmVxX3VwZGF0ZV9wb2xpY3koKSBvciBzY2hlZHVsZSBoYW5kbGVfdXBkYXRlKCkpLgogICovCiBzdGF0aWMgdm9pZCBjcHVmcmVxX291dF9vZl9zeW5jKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBvbGRfZnJlcSwKIAkJCQl1bnNpZ25lZCBpbnQgbmV3X2ZyZXEpCkBAIC0xNjEwLDcgKzE2MTIsOCBAQAogCiAvKioKICAqIGNwdWZyZXFfZ2V0X3BvbGljeSAtIGdldCB0aGUgY3VycmVudCBjcHVmcmVxX3BvbGljeQotICogQHBvbGljeTogc3RydWN0IGNwdWZyZXFfcG9saWN5IGludG8gd2hpY2ggdGhlIGN1cnJlbnQgY3B1ZnJlcV9wb2xpY3kgaXMgd3JpdHRlbgorICogQHBvbGljeTogc3RydWN0IGNwdWZyZXFfcG9saWN5IGludG8gd2hpY2ggdGhlIGN1cnJlbnQgY3B1ZnJlcV9wb2xpY3kKKyAqCWlzIHdyaXR0ZW4KICAqCiAgKiBSZWFkcyB0aGUgY3VycmVudCBjcHVmcmVxIHBvbGljeS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfY29uc2VydmF0aXZlLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYwppbmRleCAwMzIwOTYyLi4yZWNkOTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9jb25zZXJ2YXRpdmUuYwpAQCAtNCw3ICs0LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpICAyMDAxIFJ1c3NlbGwgS2luZwogICogICAgICAgICAgICAoQykgIDIwMDMgVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+LgogICogICAgICAgICAgICAgICAgICAgICAgSnVuIE5ha2FqaW1hIDxqdW4ubmFrYWppbWFAaW50ZWwuY29tPgotICogICAgICAgICAgICAoQykgIDIwMDQgQWxleGFuZGVyIENsb3V0ZXIgPGFsZXgta2VybmVsQGRpZ3Jpei5vcmcudWs+CisgKiAgICAgICAgICAgIChDKSAgMjAwOSBBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMTMsMjIgKzEzLDE3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+Ci0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKIC8qCiAgKiBkYnMgaXMgdXNlZCBpbiB0aGlzIGZpbGUgYXMgYSBzaG9ydGZvcm0gZm9yIGRlbWFuZGJhc2VkIHN3aXRjaGluZwogICogSXQgaGVscHMgdG8ga2VlcCB2YXJpYWJsZSBuYW1lcyBzbWFsbGVyLCBzaW1wbGVyCkBAIC00MywxOSArMzgsMzEgQEAKICAqIGxhdGVuY3kgb2YgdGhlIHByb2Nlc3Nvci4gVGhlIGdvdmVybm9yIHdpbGwgd29yayBvbiBhbnkgcHJvY2Vzc29yIHdpdGgKICAqIHRyYW5zaXRpb24gbGF0ZW5jeSA8PSAxMG1TLCB1c2luZyBhcHByb3ByaWF0ZSBzYW1wbGluZwogICogcmF0ZS4KLSAqIEZvciBDUFVzIHdpdGggdHJhbnNpdGlvbiBsYXRlbmN5ID4gMTBtUyAobW9zdGx5IGRyaXZlcnMKLSAqIHdpdGggQ1BVRlJFUV9FVEVSTkFMKSwgdGhpcyBnb3Zlcm5vciB3aWxsIG5vdCB3b3JrLgorICogRm9yIENQVXMgd2l0aCB0cmFuc2l0aW9uIGxhdGVuY3kgPiAxMG1TIChtb3N0bHkgZHJpdmVycyB3aXRoIENQVUZSRVFfRVRFUk5BTCkKKyAqIHRoaXMgZ292ZXJub3Igd2lsbCBub3Qgd29yay4KICAqIEFsbCB0aW1lcyBoZXJlIGFyZSBpbiB1Uy4KICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBkZWZfc2FtcGxpbmdfcmF0ZTsKICNkZWZpbmUgTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8JCQkoMikKIC8qIGZvciBjb3JyZWN0IHN0YXRpc3RpY3MsIHdlIG5lZWQgYXQgbGVhc3QgMTAgdGlja3MgYmV0d2VlbiBlYWNoIG1lYXN1cmUgKi8KLSNkZWZpbmUgTUlOX1NUQVRfU0FNUExJTkdfUkFURQkJCVwKKyNkZWZpbmUgTUlOX1NUQVRfU0FNUExJTkdfUkFURSAJCQlcCiAJCQkoTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8gKiBqaWZmaWVzX3RvX3VzZWNzKDEwKSkKICNkZWZpbmUgTUlOX1NBTVBMSU5HX1JBVEUJCQlcCiAJCQkoZGVmX3NhbXBsaW5nX3JhdGUgLyBNSU5fU0FNUExJTkdfUkFURV9SQVRJTykKKy8qIEFib3ZlIE1JTl9TQU1QTElOR19SQVRFIHdpbGwgdmFuaXNoIHdpdGggaXRzIHN5c2ZzIGZpbGUgc29vbgorICogRGVmaW5lIHRoZSBtaW5pbWFsIHNldHRhYmxlIHNhbXBsaW5nIHJhdGUgdG8gdGhlIGdyZWF0ZXIgb2Y6CisgKiAgIC0gIkhXIHRyYW5zaXRpb24gbGF0ZW5jeSIgKiAxMDAgKHNhbWUgYXMgZGVmYXVsdCBzYW1wbGluZyAvIDEwKQorICogICAtIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUKKyAqIFRvIGF2b2lkIHRoYXQgdXNlcnNwYWNlIHNob290cyBpdHNlbGYuCisqLworc3RhdGljIHVuc2lnbmVkIGludCBtaW5pbXVtX3NhbXBsaW5nX3JhdGUodm9pZCkKK3sKKwlyZXR1cm4gbWF4KGRlZl9zYW1wbGluZ19yYXRlIC8gMTAsIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpOworfQorCisvKiBUaGlzIHdpbGwgYWxzbyB2YW5pc2ggc29vbiB3aXRoIHJlbW92aW5nIHNhbXBsaW5nX3JhdGVfbWF4ICovCiAjZGVmaW5lIE1BWF9TQU1QTElOR19SQVRFCQkJKDUwMCAqIGRlZl9zYW1wbGluZ19yYXRlKQotI2RlZmluZSBERUZfU0FNUExJTkdfUkFURV9MQVRFTkNZX01VTFRJUExJRVIJKDEwMDApCisjZGVmaW5lIExBVEVOQ1lfTVVMVElQTElFUgkJCSgxMDAwKQogI2RlZmluZSBERUZfU0FNUExJTkdfRE9XTl9GQUNUT1IJCSgxKQogI2RlZmluZSBNQVhfU0FNUExJTkdfRE9XTl9GQUNUT1IJCSgxMCkKICNkZWZpbmUgVFJBTlNJVElPTl9MQVRFTkNZX0xJTUlUCQkoMTAgKiAxMDAwICogMTAwMCkKQEAgLTYzLDEyICs3MCwxNSBAQAogc3RhdGljIHZvaWQgZG9fZGJzX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIHN0cnVjdCBjcHVfZGJzX2luZm9fcyB7CisJY3B1dGltZTY0X3QgcHJldl9jcHVfaWRsZTsKKwljcHV0aW1lNjRfdCBwcmV2X2NwdV93YWxsOworCWNwdXRpbWU2NF90IHByZXZfY3B1X25pY2U7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjdXJfcG9saWN5OwotCXVuc2lnbmVkIGludCBwcmV2X2NwdV9pZGxlX3VwOwotCXVuc2lnbmVkIGludCBwcmV2X2NwdV9pZGxlX2Rvd247Ci0JdW5zaWduZWQgaW50IGVuYWJsZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJdW5zaWduZWQgaW50IGRvd25fc2tpcDsKIAl1bnNpZ25lZCBpbnQgcmVxdWVzdGVkX2ZyZXE7CisJaW50IGNwdTsKKwl1bnNpZ25lZCBpbnQgZW5hYmxlOjE7CiB9Owogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfZGJzX2luZm9fcywgY3B1X2Ric19pbmZvKTsKIApAQCAtODIsMTkgKzkyLDE4IEBACiAgKiBjcHVfaG90cGx1ZyBsb2NrIHNob3VsZCBiZSB0YWtlbiBiZWZvcmUgdGhhdC4gTm90ZSB0aGF0IGNwdV9ob3RwbHVnIGxvY2sKICAqIGlzIHJlY3Vyc2l2ZSBmb3IgdGhlIHNhbWUgcHJvY2Vzcy4gLVZlbmtpCiAgKi8KLXN0YXRpYyBERUZJTkVfTVVURVggKGRic19tdXRleCk7Ci1zdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksoZGJzX3dvcmssIGRvX2Ric190aW1lcik7CitzdGF0aWMgREVGSU5FX01VVEVYKGRic19tdXRleCk7CiAKLXN0cnVjdCBkYnNfdHVuZXJzIHsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqa2NvbnNlcnZhdGl2ZV93cTsKKworc3RhdGljIHN0cnVjdCBkYnNfdHVuZXJzIHsKIAl1bnNpZ25lZCBpbnQgc2FtcGxpbmdfcmF0ZTsKIAl1bnNpZ25lZCBpbnQgc2FtcGxpbmdfZG93bl9mYWN0b3I7CiAJdW5zaWduZWQgaW50IHVwX3RocmVzaG9sZDsKIAl1bnNpZ25lZCBpbnQgZG93bl90aHJlc2hvbGQ7CiAJdW5zaWduZWQgaW50IGlnbm9yZV9uaWNlOwogCXVuc2lnbmVkIGludCBmcmVxX3N0ZXA7Ci19OwotCi1zdGF0aWMgc3RydWN0IGRic190dW5lcnMgZGJzX3R1bmVyc19pbnMgPSB7Cit9IGRic190dW5lcnNfaW5zID0gewogCS51cF90aHJlc2hvbGQgPSBERUZfRlJFUVVFTkNZX1VQX1RIUkVTSE9MRCwKIAkuZG93bl90aHJlc2hvbGQgPSBERUZfRlJFUVVFTkNZX0RPV05fVEhSRVNIT0xELAogCS5zYW1wbGluZ19kb3duX2ZhY3RvciA9IERFRl9TQU1QTElOR19ET1dOX0ZBQ1RPUiwKQEAgLTEwMiwxOCArMTExLDM3IEBACiAJLmZyZXFfc3RlcCA9IDUsCiB9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfY3B1X2lkbGVfdGltZSh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGlubGluZSBjcHV0aW1lNjRfdCBnZXRfY3B1X2lkbGVfdGltZV9qaWZmeSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJCWNwdXRpbWU2NF90ICp3YWxsKQogewotCXVuc2lnbmVkIGludCBhZGRfbmljZSA9IDAsIHJldDsKKwljcHV0aW1lNjRfdCBpZGxlX3RpbWU7CisJY3B1dGltZTY0X3QgY3VyX3dhbGxfdGltZTsKKwljcHV0aW1lNjRfdCBidXN5X3RpbWU7CiAKLQlpZiAoZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UpCi0JCWFkZF9uaWNlID0ga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5uaWNlOworCWN1cl93YWxsX3RpbWUgPSBqaWZmaWVzNjRfdG9fY3B1dGltZTY0KGdldF9qaWZmaWVzXzY0KCkpOworCWJ1c3lfdGltZSA9IGNwdXRpbWU2NF9hZGQoa3N0YXRfY3B1KGNwdSkuY3B1c3RhdC51c2VyLAorCQkJa3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5zeXN0ZW0pOwogCi0JcmV0ID0ga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5pZGxlICsKLQkJa3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5pb3dhaXQgKwotCQlhZGRfbmljZTsKKwlidXN5X3RpbWUgPSBjcHV0aW1lNjRfYWRkKGJ1c3lfdGltZSwga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5pcnEpOworCWJ1c3lfdGltZSA9IGNwdXRpbWU2NF9hZGQoYnVzeV90aW1lLCBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LnNvZnRpcnEpOworCWJ1c3lfdGltZSA9IGNwdXRpbWU2NF9hZGQoYnVzeV90aW1lLCBrc3RhdF9jcHUoY3B1KS5jcHVzdGF0LnN0ZWFsKTsKKwlidXN5X3RpbWUgPSBjcHV0aW1lNjRfYWRkKGJ1c3lfdGltZSwga3N0YXRfY3B1KGNwdSkuY3B1c3RhdC5uaWNlKTsKIAotCXJldHVybiByZXQ7CisJaWRsZV90aW1lID0gY3B1dGltZTY0X3N1YihjdXJfd2FsbF90aW1lLCBidXN5X3RpbWUpOworCWlmICh3YWxsKQorCQkqd2FsbCA9IGN1cl93YWxsX3RpbWU7CisKKwlyZXR1cm4gaWRsZV90aW1lOworfQorCitzdGF0aWMgaW5saW5lIGNwdXRpbWU2NF90IGdldF9jcHVfaWRsZV90aW1lKHVuc2lnbmVkIGludCBjcHUsIGNwdXRpbWU2NF90ICp3YWxsKQoreworCXU2NCBpZGxlX3RpbWUgPSBnZXRfY3B1X2lkbGVfdGltZV91cyhjcHUsIHdhbGwpOworCisJaWYgKGlkbGVfdGltZSA9PSAtMVVMTCkKKwkJcmV0dXJuIGdldF9jcHVfaWRsZV90aW1lX2ppZmZ5KGNwdSwgd2FsbCk7CisKKwlyZXR1cm4gaWRsZV90aW1lOwogfQogCiAvKiBrZWVwIHRyYWNrIG9mIGZyZXF1ZW5jeSB0cmFuc2l0aW9ucyAqLwpAQCAtMTI1LDEwICsxNTMsMjEgQEAKIAlzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKnRoaXNfZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sCiAJCQkJCQkJZnJlcS0+Y3B1KTsKIAorCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5OworCiAJaWYgKCF0aGlzX2Ric19pbmZvLT5lbmFibGUpCiAJCXJldHVybiAwOwogCi0JdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPSBmcmVxLT5uZXc7CisJcG9saWN5ID0gdGhpc19kYnNfaW5mby0+Y3VyX3BvbGljeTsKKworCS8qCisJICogd2Ugb25seSBjYXJlIGlmIG91ciBpbnRlcm5hbGx5IHRyYWNrZWQgZnJlcSBtb3ZlcyBvdXRzaWRlCisJICogdGhlICd2YWxpZCcgcmFuZ2VzIG9mIGZyZXFlbmN5IGF2YWlsYWJsZSB0byB1cyBvdGhlcndpc2UKKwkgKiB3ZSBkbyBub3QgY2hhbmdlIGl0CisJKi8KKwlpZiAodGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPiBwb2xpY3ktPm1heAorCQkJfHwgdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPCBwb2xpY3ktPm1pbikKKwkJdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPSBmcmVxLT5uZXc7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MCwxNiArMTc5LDMxIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKiogc3lzZnMgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzc2l6ZV90IHNob3dfc2FtcGxpbmdfcmF0ZV9tYXgoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIE1BWF9TQU1QTElOR19SQVRFKTsKKwlzdGF0aWMgaW50IHByaW50X29uY2U7CisKKwlpZiAoIXByaW50X29uY2UpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVRlJFUTogY29uc2VydmF0aXZlIHNhbXBsaW5nX3JhdGVfbWF4ICIKKwkJICAgICAgICJzeXNmcyBmaWxlIGlzIGRlcHJlY2F0ZWQgLSB1c2VkIGJ5OiAlc1xuIiwKKwkJICAgICAgIGN1cnJlbnQtPmNvbW0pOworCQlwcmludF9vbmNlID0gMTsKKwl9CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIE1BWF9TQU1QTElOR19SQVRFKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19yYXRlX21pbihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmIChidWYsICIldVxuIiwgTUlOX1NBTVBMSU5HX1JBVEUpOworCXN0YXRpYyBpbnQgcHJpbnRfb25jZTsKKworCWlmICghcHJpbnRfb25jZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDUFVGUkVROiBjb25zZXJ2YXRpdmUgc2FtcGxpbmdfcmF0ZV9tYXggIgorCQkgICAgICAgInN5c2ZzIGZpbGUgaXMgZGVwcmVjYXRlZCAtIHVzZWQgYnk6ICVzXG4iLCBjdXJyZW50LT5jb21tKTsKKwkJcHJpbnRfb25jZSA9IDE7CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBNSU5fU0FNUExJTkdfUkFURSk7CiB9CiAKLSNkZWZpbmUgZGVmaW5lX29uZV9ybyhfbmFtZSkJCQkJXAotc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgX25hbWUgPQkJCQlcCisjZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUpCQlcCitzdGF0aWMgc3RydWN0IGZyZXFfYXR0ciBfbmFtZSA9CQlcCiBfX0FUVFIoX25hbWUsIDA0NDQsIHNob3dfIyNfbmFtZSwgTlVMTCkKIAogZGVmaW5lX29uZV9ybyhzYW1wbGluZ19yYXRlX21heCk7CkBAIC0xNzQsNyArMjI4LDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgaW5wdXQ7CiAJaW50IHJldDsKLQlyZXQgPSBzc2NhbmYgKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOworCiAJaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gTUFYX1NBTVBMSU5HX0RPV05fRkFDVE9SIHx8IGlucHV0IDwgMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTE5MCwxNSArMjQ1LDEzIEBACiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwogCWludCByZXQ7Ci0JcmV0ID0gc3NjYW5mIChidWYsICIldSIsICZpbnB1dCk7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKKworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IE1BWF9TQU1QTElOR19SQVRFIHx8IGlucHV0IDwgTUlOX1NBTVBMSU5HX1JBVEUpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gaW5wdXQ7CisJZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IG1heChpbnB1dCwgbWluaW11bV9zYW1wbGluZ19yYXRlKCkpOwogCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAogCXJldHVybiBjb3VudDsKQEAgLTIwOSwxMCArMjYyLDExIEBACiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwogCWludCByZXQ7Ci0JcmV0ID0gc3NjYW5mIChidWYsICIldSIsICZpbnB1dCk7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gMTAwIHx8IGlucHV0IDw9IGRic190dW5lcnNfaW5zLmRvd25fdGhyZXNob2xkKSB7CisJaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gMTAwIHx8CisJCQlpbnB1dCA8PSBkYnNfdHVuZXJzX2lucy5kb3duX3RocmVzaG9sZCkgewogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTIyOCwxMCArMjgyLDEyIEBACiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwogCWludCByZXQ7Ci0JcmV0ID0gc3NjYW5mIChidWYsICIldSIsICZpbnB1dCk7CisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1IiwgJmlucHV0KTsKIAogCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JaWYgKHJldCAhPSAxIHx8IGlucHV0ID4gMTAwIHx8IGlucHV0ID49IGRic190dW5lcnNfaW5zLnVwX3RocmVzaG9sZCkgeworCS8qIGNhbm5vdCBiZSBsb3dlciB0aGFuIDExIG90aGVyd2lzZSBmcmVxIHdpbGwgbm90IGZhbGwgKi8KKwlpZiAocmV0ICE9IDEgfHwgaW5wdXQgPCAxMSB8fCBpbnB1dCA+IDEwMCB8fAorCQkJaW5wdXQgPj0gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkKSB7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjY0LDEyICszMjAsMTQgQEAKIAl9CiAJZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UgPSBpbnB1dDsKIAotCS8qIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgcHJldl9jcHVfaWRsZV91cCBhbmQgcHJldl9jcHVfaWRsZV9kb3duICovCisJLyogd2UgbmVlZCB0byByZS1ldmFsdWF0ZSBwcmV2X2NwdV9pZGxlICovCiAJZm9yX2VhY2hfb25saW5lX2NwdShqKSB7Ci0JCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqal9kYnNfaW5mbzsKLQkJal9kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgaik7Ci0JCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXAgPSBnZXRfY3B1X2lkbGVfdGltZShqKTsKLQkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV9kb3duID0gal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cDsKKwkJc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbzsKKwkJZGJzX2luZm8gPSAmcGVyX2NwdShjcHVfZGJzX2luZm8sIGopOworCQlkYnNfaW5mby0+cHJldl9jcHVfaWRsZSA9IGdldF9jcHVfaWRsZV90aW1lKGosCisJCQkJCQkmZGJzX2luZm8tPnByZXZfY3B1X3dhbGwpOworCQlpZiAoZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UpCisJCQlkYnNfaW5mby0+cHJldl9jcHVfbmljZSA9IGtzdGF0X2NwdShqKS5jcHVzdGF0Lm5pY2U7CiAJfQogCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIApAQCAtMjgxLDcgKzMzOSw2IEBACiB7CiAJdW5zaWduZWQgaW50IGlucHV0OwogCWludCByZXQ7Ci0KIAlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOwogCiAJaWYgKHJldCAhPSAxKQpAQCAtMzEwLDcgKzM2Nyw3IEBACiBkZWZpbmVfb25lX3J3KGlnbm9yZV9uaWNlX2xvYWQpOwogZGVmaW5lX29uZV9ydyhmcmVxX3N0ZXApOwogCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIGRic19hdHRyaWJ1dGVzW10gPSB7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGJzX2F0dHJpYnV0ZXNbXSA9IHsKIAkmc2FtcGxpbmdfcmF0ZV9tYXguYXR0ciwKIAkmc2FtcGxpbmdfcmF0ZV9taW4uYXR0ciwKIAkmc2FtcGxpbmdfcmF0ZS5hdHRyLApAQCAtMzI5LDU1ICszODYsNzggQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqIHN5c2ZzIGVuZCAqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGRic19jaGVja19jcHUoaW50IGNwdSkKK3N0YXRpYyB2b2lkIGRic19jaGVja19jcHUoc3RydWN0IGNwdV9kYnNfaW5mb19zICp0aGlzX2Ric19pbmZvKQogewotCXVuc2lnbmVkIGludCBpZGxlX3RpY2tzLCB1cF9pZGxlX3RpY2tzLCBkb3duX2lkbGVfdGlja3M7Ci0JdW5zaWduZWQgaW50IHRtcF9pZGxlX3RpY2tzLCB0b3RhbF9pZGxlX3RpY2tzOworCXVuc2lnbmVkIGludCBsb2FkID0gMDsKIAl1bnNpZ25lZCBpbnQgZnJlcV90YXJnZXQ7Ci0JdW5zaWduZWQgaW50IGZyZXFfZG93bl9zYW1wbGluZ19yYXRlOwotCXN0cnVjdCBjcHVfZGJzX2luZm9fcyAqdGhpc19kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgY3B1KTsKLQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKIAotCWlmICghdGhpc19kYnNfaW5mby0+ZW5hYmxlKQotCQlyZXR1cm47CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisJdW5zaWduZWQgaW50IGo7CiAKIAlwb2xpY3kgPSB0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5OwogCiAJLyoKLQkgKiBUaGUgZGVmYXVsdCBzYWZlIHJhbmdlIGlzIDIwJSB0byA4MCUKLQkgKiBFdmVyeSBzYW1wbGluZ19yYXRlLCB3ZSBjaGVjawotCSAqCS0gSWYgY3VycmVudCBpZGxlIHRpbWUgaXMgbGVzcyB0aGFuIDIwJSwgdGhlbiB3ZSB0cnkgdG8KLQkgKgkgIGluY3JlYXNlIGZyZXF1ZW5jeQotCSAqIEV2ZXJ5IHNhbXBsaW5nX3JhdGUqc2FtcGxpbmdfZG93bl9mYWN0b3IsIHdlIGNoZWNrCi0JICoJLSBJZiBjdXJyZW50IGlkbGUgdGltZSBpcyBtb3JlIHRoYW4gODAlLCB0aGVuIHdlIHRyeSB0bwotCSAqCSAgZGVjcmVhc2UgZnJlcXVlbmN5CisJICogRXZlcnkgc2FtcGxpbmdfcmF0ZSwgd2UgY2hlY2ssIGlmIGN1cnJlbnQgaWRsZSB0aW1lIGlzIGxlc3MKKwkgKiB0aGFuIDIwJSAoZGVmYXVsdCksIHRoZW4gd2UgdHJ5IHRvIGluY3JlYXNlIGZyZXF1ZW5jeQorCSAqIEV2ZXJ5IHNhbXBsaW5nX3JhdGUqc2FtcGxpbmdfZG93bl9mYWN0b3IsIHdlIGNoZWNrLCBpZiBjdXJyZW50CisJICogaWRsZSB0aW1lIGlzIG1vcmUgdGhhbiA4MCUsIHRoZW4gd2UgdHJ5IHRvIGRlY3JlYXNlIGZyZXF1ZW5jeQogCSAqCiAJICogQW55IGZyZXF1ZW5jeSBpbmNyZWFzZSB0YWtlcyBpdCB0byB0aGUgbWF4aW11bSBmcmVxdWVuY3kuCiAJICogRnJlcXVlbmN5IHJlZHVjdGlvbiBoYXBwZW5zIGF0IG1pbmltdW0gc3RlcHMgb2YKLQkgKiA1JSAoZGVmYXVsdCkgb2YgbWF4X2ZyZXF1ZW5jeQorCSAqIDUlIChkZWZhdWx0KSBvZiBtYXhpbXVtIGZyZXF1ZW5jeQogCSAqLwogCi0JLyogQ2hlY2sgZm9yIGZyZXF1ZW5jeSBpbmNyZWFzZSAqLwotCWlkbGVfdGlja3MgPSBVSU5UX01BWDsKKwkvKiBHZXQgQWJzb2x1dGUgTG9hZCAqLworCWZvcl9lYWNoX2NwdShqLCBwb2xpY3ktPmNwdXMpIHsKKwkJc3RydWN0IGNwdV9kYnNfaW5mb19zICpqX2Ric19pbmZvOworCQljcHV0aW1lNjRfdCBjdXJfd2FsbF90aW1lLCBjdXJfaWRsZV90aW1lOworCQl1bnNpZ25lZCBpbnQgaWRsZV90aW1lLCB3YWxsX3RpbWU7CisKKwkJal9kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgaik7CisKKwkJY3VyX2lkbGVfdGltZSA9IGdldF9jcHVfaWRsZV90aW1lKGosICZjdXJfd2FsbF90aW1lKTsKKworCQl3YWxsX3RpbWUgPSAodW5zaWduZWQgaW50KSBjcHV0aW1lNjRfc3ViKGN1cl93YWxsX3RpbWUsCisJCQkJal9kYnNfaW5mby0+cHJldl9jcHVfd2FsbCk7CisJCWpfZGJzX2luZm8tPnByZXZfY3B1X3dhbGwgPSBjdXJfd2FsbF90aW1lOworCisJCWlkbGVfdGltZSA9ICh1bnNpZ25lZCBpbnQpIGNwdXRpbWU2NF9zdWIoY3VyX2lkbGVfdGltZSwKKwkJCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlKTsKKwkJal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZSA9IGN1cl9pZGxlX3RpbWU7CisKKwkJaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKSB7CisJCQljcHV0aW1lNjRfdCBjdXJfbmljZTsKKwkJCXVuc2lnbmVkIGxvbmcgY3VyX25pY2VfamlmZmllczsKKworCQkJY3VyX25pY2UgPSBjcHV0aW1lNjRfc3ViKGtzdGF0X2NwdShqKS5jcHVzdGF0Lm5pY2UsCisJCQkJCSBqX2Ric19pbmZvLT5wcmV2X2NwdV9uaWNlKTsKKwkJCS8qCisJCQkgKiBBc3N1bXB0aW9uOiBuaWNlIHRpbWUgYmV0d2VlbiBzYW1wbGluZyBwZXJpb2RzIHdpbGwKKwkJCSAqIGJlIGxlc3MgdGhhbiAyXjMyIGppZmZpZXMgZm9yIDMyIGJpdCBzeXMKKwkJCSAqLworCQkJY3VyX25pY2VfamlmZmllcyA9ICh1bnNpZ25lZCBsb25nKQorCQkJCQljcHV0aW1lNjRfdG9famlmZmllczY0KGN1cl9uaWNlKTsKKworCQkJal9kYnNfaW5mby0+cHJldl9jcHVfbmljZSA9IGtzdGF0X2NwdShqKS5jcHVzdGF0Lm5pY2U7CisJCQlpZGxlX3RpbWUgKz0gamlmZmllc190b191c2VjcyhjdXJfbmljZV9qaWZmaWVzKTsKKwkJfQorCisJCWlmICh1bmxpa2VseSghd2FsbF90aW1lIHx8IHdhbGxfdGltZSA8IGlkbGVfdGltZSkpCisJCQljb250aW51ZTsKKworCQlsb2FkID0gMTAwICogKHdhbGxfdGltZSAtIGlkbGVfdGltZSkgLyB3YWxsX3RpbWU7CisJfQorCisJLyoKKwkgKiBicmVhayBvdXQgaWYgd2UgJ2Nhbm5vdCcgcmVkdWNlIHRoZSBzcGVlZCBhcyB0aGUgdXNlciBtaWdodAorCSAqIHdhbnQgZnJlcV9zdGVwIHRvIGJlIHplcm8KKwkgKi8KKwlpZiAoZGJzX3R1bmVyc19pbnMuZnJlcV9zdGVwID09IDApCisJCXJldHVybjsKIAogCS8qIENoZWNrIGZvciBmcmVxdWVuY3kgaW5jcmVhc2UgKi8KLQl0b3RhbF9pZGxlX3RpY2tzID0gZ2V0X2NwdV9pZGxlX3RpbWUoY3B1KTsKLQl0bXBfaWRsZV90aWNrcyA9IHRvdGFsX2lkbGVfdGlja3MgLQotCQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwOwotCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXAgPSB0b3RhbF9pZGxlX3RpY2tzOwotCi0JaWYgKHRtcF9pZGxlX3RpY2tzIDwgaWRsZV90aWNrcykKLQkJaWRsZV90aWNrcyA9IHRtcF9pZGxlX3RpY2tzOwotCi0JLyogU2NhbGUgaWRsZSB0aWNrcyBieSAxMDAgYW5kIGNvbXBhcmUgd2l0aCB1cCBhbmQgZG93biB0aWNrcyAqLwotCWlkbGVfdGlja3MgKj0gMTAwOwotCXVwX2lkbGVfdGlja3MgPSAoMTAwIC0gZGJzX3R1bmVyc19pbnMudXBfdGhyZXNob2xkKSAqCi0JCQl1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpOwotCi0JaWYgKGlkbGVfdGlja3MgPCB1cF9pZGxlX3RpY2tzKSB7CisJaWYgKGxvYWQgPiBkYnNfdHVuZXJzX2lucy51cF90aHJlc2hvbGQpIHsKIAkJdGhpc19kYnNfaW5mby0+ZG93bl9za2lwID0gMDsKLQkJdGhpc19kYnNfaW5mby0+cHJldl9jcHVfaWRsZV9kb3duID0KLQkJCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfdXA7CiAKIAkJLyogaWYgd2UgYXJlIGFscmVhZHkgYXQgZnVsbCBzcGVlZCB0aGVuIGJyZWFrIG91dCBlYXJseSAqLwogCQlpZiAodGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPT0gcG9saWN5LT5tYXgpCkBAIC0zOTgsNDkgKzQ3OCwyNCBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogQ2hlY2sgZm9yIGZyZXF1ZW5jeSBkZWNyZWFzZSAqLwotCXRoaXNfZGJzX2luZm8tPmRvd25fc2tpcCsrOwotCWlmICh0aGlzX2Ric19pbmZvLT5kb3duX3NraXAgPCBkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19kb3duX2ZhY3RvcikKLQkJcmV0dXJuOwotCi0JLyogQ2hlY2sgZm9yIGZyZXF1ZW5jeSBkZWNyZWFzZSAqLwotCXRvdGFsX2lkbGVfdGlja3MgPSB0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwOwotCXRtcF9pZGxlX3RpY2tzID0gdG90YWxfaWRsZV90aWNrcyAtCi0JCXRoaXNfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfZG93bjsKLQl0aGlzX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX2Rvd24gPSB0b3RhbF9pZGxlX3RpY2tzOwotCi0JaWYgKHRtcF9pZGxlX3RpY2tzIDwgaWRsZV90aWNrcykKLQkJaWRsZV90aWNrcyA9IHRtcF9pZGxlX3RpY2tzOwotCi0JLyogU2NhbGUgaWRsZSB0aWNrcyBieSAxMDAgYW5kIGNvbXBhcmUgd2l0aCB1cCBhbmQgZG93biB0aWNrcyAqLwotCWlkbGVfdGlja3MgKj0gMTAwOwotCXRoaXNfZGJzX2luZm8tPmRvd25fc2tpcCA9IDA7Ci0KLQlmcmVxX2Rvd25fc2FtcGxpbmdfcmF0ZSA9IGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgKgotCQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19kb3duX2ZhY3RvcjsKLQlkb3duX2lkbGVfdGlja3MgPSAoMTAwIC0gZGJzX3R1bmVyc19pbnMuZG93bl90aHJlc2hvbGQpICoKLQkJdXNlY3NfdG9famlmZmllcyhmcmVxX2Rvd25fc2FtcGxpbmdfcmF0ZSk7Ci0KLQlpZiAoaWRsZV90aWNrcyA+IGRvd25faWRsZV90aWNrcykgewotCQkvKgotCQkgKiBpZiB3ZSBhcmUgYWxyZWFkeSBhdCB0aGUgbG93ZXN0IHNwZWVkIHRoZW4gYnJlYWsgb3V0IGVhcmx5Ci0JCSAqIG9yIGlmIHdlICdjYW5ub3QnIHJlZHVjZSB0aGUgc3BlZWQgYXMgdGhlIHVzZXIgbWlnaHQgd2FudAotCQkgKiBmcmVxX3RhcmdldCB0byBiZSB6ZXJvCi0JCSAqLwotCQlpZiAodGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPT0gcG9saWN5LT5taW4KLQkJCQl8fCBkYnNfdHVuZXJzX2lucy5mcmVxX3N0ZXAgPT0gMCkKLQkJCXJldHVybjsKLQorCS8qCisJICogVGhlIG9wdGltYWwgZnJlcXVlbmN5IGlzIHRoZSBmcmVxdWVuY3kgdGhhdCBpcyB0aGUgbG93ZXN0IHRoYXQKKwkgKiBjYW4gc3VwcG9ydCB0aGUgY3VycmVudCBDUFUgdXNhZ2Ugd2l0aG91dCB0cmlnZ2VyaW5nIHRoZSB1cAorCSAqIHBvbGljeS4gVG8gYmUgc2FmZSwgd2UgZm9jdXMgMTAgcG9pbnRzIHVuZGVyIHRoZSB0aHJlc2hvbGQuCisJICovCisJaWYgKGxvYWQgPCAoZGJzX3R1bmVyc19pbnMuZG93bl90aHJlc2hvbGQgLSAxMCkpIHsKIAkJZnJlcV90YXJnZXQgPSAoZGJzX3R1bmVyc19pbnMuZnJlcV9zdGVwICogcG9saWN5LT5tYXgpIC8gMTAwOwogCi0JCS8qIG1heCBmcmVxIGNhbm5vdCBiZSBsZXNzIHRoYW4gMTAwLiBCdXQgd2hvIGtub3dzLi4uLiAqLwotCQlpZiAodW5saWtlbHkoZnJlcV90YXJnZXQgPT0gMCkpCi0JCQlmcmVxX3RhcmdldCA9IDU7Ci0KIAkJdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgLT0gZnJlcV90YXJnZXQ7CiAJCWlmICh0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSA8IHBvbGljeS0+bWluKQogCQkJdGhpc19kYnNfaW5mby0+cmVxdWVzdGVkX2ZyZXEgPSBwb2xpY3ktPm1pbjsKIAorCQkvKgorCQkgKiBpZiB3ZSBjYW5ub3QgcmVkdWNlIHRoZSBmcmVxdWVuY3kgYW55bW9yZSwgYnJlYWsgb3V0IGVhcmx5CisJCSAqLworCQlpZiAocG9saWN5LT5jdXIgPT0gcG9saWN5LT5taW4pCisJCQlyZXR1cm47CisKIAkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQocG9saWN5LCB0aGlzX2Ric19pbmZvLT5yZXF1ZXN0ZWRfZnJlcSwKIAkJCQlDUFVGUkVRX1JFTEFUSU9OX0gpOwogCQlyZXR1cm47CkBAIC00NDksMjcgKzUwNCw0NSBAQAogCiBzdGF0aWMgdm9pZCBkb19kYnNfdGltZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBpOwotCW11dGV4X2xvY2soJmRic19tdXRleCk7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShpKQotCQlkYnNfY2hlY2tfY3B1KGkpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGJzX3dvcmssCi0JCQl1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpKTsKLQltdXRleF91bmxvY2soJmRic19tdXRleCk7CisJc3RydWN0IGNwdV9kYnNfaW5mb19zICpkYnNfaW5mbyA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3B1X2Ric19pbmZvX3MsIHdvcmsud29yayk7CisJdW5zaWduZWQgaW50IGNwdSA9IGRic19pbmZvLT5jcHU7CisKKwkvKiBXZSB3YW50IGFsbCBDUFVzIHRvIGRvIHNhbXBsaW5nIG5lYXJseSBvbiBzYW1lIGppZmZ5ICovCisJaW50IGRlbGF5ID0gdXNlY3NfdG9famlmZmllcyhkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlKTsKKworCWRlbGF5IC09IGppZmZpZXMgJSBkZWxheTsKKworCWlmIChsb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKCFkYnNfaW5mby0+ZW5hYmxlKSB7CisJCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKKwkJcmV0dXJuOworCX0KKworCWRic19jaGVja19jcHUoZGJzX2luZm8pOworCisJcXVldWVfZGVsYXllZF93b3JrX29uKGNwdSwga2NvbnNlcnZhdGl2ZV93cSwgJmRic19pbmZvLT53b3JrLCBkZWxheSk7CisJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGJzX3RpbWVyX2luaXQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfaW5pdChzdHJ1Y3QgY3B1X2Ric19pbmZvX3MgKmRic19pbmZvKQogewotCWluaXRfdGltZXJfZGVmZXJyYWJsZSgmZGJzX3dvcmsudGltZXIpOwotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGJzX3dvcmssCi0JCQl1c2Vjc190b19qaWZmaWVzKGRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUpKTsKLQlyZXR1cm47CisJLyogV2Ugd2FudCBhbGwgQ1BVcyB0byBkbyBzYW1wbGluZyBuZWFybHkgb24gc2FtZSBqaWZmeSAqLworCWludCBkZWxheSA9IHVzZWNzX3RvX2ppZmZpZXMoZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSk7CisJZGVsYXkgLT0gamlmZmllcyAlIGRlbGF5OworCisJZGJzX2luZm8tPmVuYWJsZSA9IDE7CisJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmZGJzX2luZm8tPndvcmssIGRvX2Ric190aW1lcik7CisJcXVldWVfZGVsYXllZF93b3JrX29uKGRic19pbmZvLT5jcHUsIGtjb25zZXJ2YXRpdmVfd3EsICZkYnNfaW5mby0+d29yaywKKwkJCQlkZWxheSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkYnNfdGltZXJfZXhpdCh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9leGl0KHN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8pCiB7Ci0JY2FuY2VsX2RlbGF5ZWRfd29yaygmZGJzX3dvcmspOwotCXJldHVybjsKKwlkYnNfaW5mby0+ZW5hYmxlID0gMDsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZkYnNfaW5mby0+d29yayk7CiB9CiAKIHN0YXRpYyBpbnQgY3B1ZnJlcV9nb3Zlcm5vcl9kYnMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCkBAIC01MDMsMTEgKzU3NiwxMyBAQAogCQkJal9kYnNfaW5mbyA9ICZwZXJfY3B1KGNwdV9kYnNfaW5mbywgaik7CiAJCQlqX2Ric19pbmZvLT5jdXJfcG9saWN5ID0gcG9saWN5OwogCi0JCQlqX2Ric19pbmZvLT5wcmV2X2NwdV9pZGxlX3VwID0gZ2V0X2NwdV9pZGxlX3RpbWUoY3B1KTsKLQkJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGVfZG93bgotCQkJCT0gal9kYnNfaW5mby0+cHJldl9jcHVfaWRsZV91cDsKKwkJCWpfZGJzX2luZm8tPnByZXZfY3B1X2lkbGUgPSBnZXRfY3B1X2lkbGVfdGltZShqLAorCQkJCQkJJmpfZGJzX2luZm8tPnByZXZfY3B1X3dhbGwpOworCQkJaWYgKGRic190dW5lcnNfaW5zLmlnbm9yZV9uaWNlKSB7CisJCQkJal9kYnNfaW5mby0+cHJldl9jcHVfbmljZSA9CisJCQkJCQlrc3RhdF9jcHUoaikuY3B1c3RhdC5uaWNlOworCQkJfQogCQl9Ci0JCXRoaXNfZGJzX2luZm8tPmVuYWJsZSA9IDE7CiAJCXRoaXNfZGJzX2luZm8tPmRvd25fc2tpcCA9IDA7CiAJCXRoaXNfZGJzX2luZm8tPnJlcXVlc3RlZF9mcmVxID0gcG9saWN5LT5jdXI7CiAKQEAgLTUyMywzOCArNTk4LDM2IEBACiAJCQlpZiAobGF0ZW5jeSA9PSAwKQogCQkJCWxhdGVuY3kgPSAxOwogCi0JCQlkZWZfc2FtcGxpbmdfcmF0ZSA9IDEwICogbGF0ZW5jeSAqCi0JCQkJCURFRl9TQU1QTElOR19SQVRFX0xBVEVOQ1lfTVVMVElQTElFUjsKLQotCQkJaWYgKGRlZl9zYW1wbGluZ19yYXRlIDwgTUlOX1NUQVRfU0FNUExJTkdfUkFURSkKLQkJCQlkZWZfc2FtcGxpbmdfcmF0ZSA9IE1JTl9TVEFUX1NBTVBMSU5HX1JBVEU7CisJCQlkZWZfc2FtcGxpbmdfcmF0ZSA9CisJCQkJbWF4KGxhdGVuY3kgKiBMQVRFTkNZX01VTFRJUExJRVIsCisJCQkJICAgIE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpOwogCiAJCQlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gZGVmX3NhbXBsaW5nX3JhdGU7CiAKLQkJCWRic190aW1lcl9pbml0KCk7CiAJCQljcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKAogCQkJCQkmZGJzX2NwdWZyZXFfbm90aWZpZXJfYmxvY2ssCiAJCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7CiAJCX0KKwkJZGJzX3RpbWVyX2luaXQodGhpc19kYnNfaW5mbyk7CiAKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOworCiAJCWJyZWFrOwogCiAJY2FzZSBDUFVGUkVRX0dPVl9TVE9QOgogCQltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCQl0aGlzX2Ric19pbmZvLT5lbmFibGUgPSAwOworCQlkYnNfdGltZXJfZXhpdCh0aGlzX2Ric19pbmZvKTsKIAkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwb2xpY3ktPmtvYmosICZkYnNfYXR0cl9ncm91cCk7CiAJCWRic19lbmFibGUtLTsKKwogCQkvKgogCQkgKiBTdG9wIHRoZSB0aW1lcnNjaGVkdWxlIHdvcmssIHdoZW4gdGhpcyBnb3Zlcm5vcgogCQkgKiBpcyB1c2VkIGZvciBmaXJzdCB0aW1lCiAJCSAqLwotCQlpZiAoZGJzX2VuYWJsZSA9PSAwKSB7Ci0JCQlkYnNfdGltZXJfZXhpdCgpOworCQlpZiAoZGJzX2VuYWJsZSA9PSAwKQogCQkJY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKAogCQkJCQkmZGJzX2NwdWZyZXFfbm90aWZpZXJfYmxvY2ssCiAJCQkJCUNQVUZSRVFfVFJBTlNJVElPTl9OT1RJRklFUik7Ci0JCX0KIAogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAKQEAgLTU3MSw2ICs2NDQsNyBAQAogCQkJCQl0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5LAogCQkJCQlwb2xpY3ktPm1pbiwgQ1BVRlJFUV9SRUxBVElPTl9MKTsKIAkJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOworCiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTU4OCwyMyArNjYyLDMzIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNwdWZyZXFfZ292X2Ric19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3IoJmNwdWZyZXFfZ292X2NvbnNlcnZhdGl2ZSk7CisJaW50IGVycjsKKworCWtjb25zZXJ2YXRpdmVfd3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJrY29uc2VydmF0aXZlIik7CisJaWYgKCFrY29uc2VydmF0aXZlX3dxKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ3JlYXRpb24gb2Yga2NvbnNlcnZhdGl2ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwllcnIgPSBjcHVmcmVxX3JlZ2lzdGVyX2dvdmVybm9yKCZjcHVmcmVxX2dvdl9jb25zZXJ2YXRpdmUpOworCWlmIChlcnIpCisJCWRlc3Ryb3lfd29ya3F1ZXVlKGtjb25zZXJ2YXRpdmVfd3EpOworCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNwdWZyZXFfZ292X2Ric19leGl0KHZvaWQpCiB7Ci0JLyogTWFrZSBzdXJlIHRoYXQgdGhlIHNjaGVkdWxlZCB3b3JrIGlzIGluZGVlZCBub3QgcnVubmluZyAqLwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0KIAljcHVmcmVxX3VucmVnaXN0ZXJfZ292ZXJub3IoJmNwdWZyZXFfZ292X2NvbnNlcnZhdGl2ZSk7CisJZGVzdHJveV93b3JrcXVldWUoa2NvbnNlcnZhdGl2ZV93cSk7CiB9CiAKIAotTU9EVUxFX0FVVEhPUiAoIkFsZXhhbmRlciBDbG91dGVyIDxhbGV4LWtlcm5lbEBkaWdyaXoub3JnLnVrPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiJ2NwdWZyZXFfY29uc2VydmF0aXZlJyAtIEEgZHluYW1pYyBjcHVmcmVxIGdvdmVybm9yIGZvciAiCitNT0RVTEVfQVVUSE9SKCJBbGV4YW5kZXIgQ2xvdXRlciA8YWxleEBkaWdyaXoub3JnLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCInY3B1ZnJlcV9jb25zZXJ2YXRpdmUnIC0gQSBkeW5hbWljIGNwdWZyZXEgZ292ZXJub3IgZm9yICIKIAkJIkxvdyBMYXRlbmN5IEZyZXF1ZW5jeSBUcmFuc2l0aW9uIGNhcGFibGUgcHJvY2Vzc29ycyAiCiAJCSJvcHRpbWlzZWQgZm9yIHVzZSBpbiBhIGJhdHRlcnkgZW52aXJvbm1lbnQiKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFCiBmc19pbml0Y2FsbChjcHVmcmVxX2dvdl9kYnNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfb25kZW1hbmQuYwppbmRleCA2ZjQ1YjE2Li4zMzhmNDI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9vbmRlbWFuZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX29uZGVtYW5kLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGljay5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogLyoKICAqIGRicyBpcyB1c2VkIGluIHRoaXMgZmlsZSBhcyBhIHNob3J0Zm9ybSBmb3IgZGVtYW5kYmFzZWQgc3dpdGNoaW5nCkBAIC01MSw4ICs1MiwyMCBAQAogCQkJKE1JTl9TQU1QTElOR19SQVRFX1JBVElPICogamlmZmllc190b191c2VjcygxMCkpCiAjZGVmaW5lIE1JTl9TQU1QTElOR19SQVRFCQkJXAogCQkJKGRlZl9zYW1wbGluZ19yYXRlIC8gTUlOX1NBTVBMSU5HX1JBVEVfUkFUSU8pCisvKiBBYm92ZSBNSU5fU0FNUExJTkdfUkFURSB3aWxsIHZhbmlzaCB3aXRoIGl0cyBzeXNmcyBmaWxlIHNvb24KKyAqIERlZmluZSB0aGUgbWluaW1hbCBzZXR0YWJsZSBzYW1wbGluZyByYXRlIHRvIHRoZSBncmVhdGVyIG9mOgorICogICAtICJIVyB0cmFuc2l0aW9uIGxhdGVuY3kiICogMTAwIChzYW1lIGFzIGRlZmF1bHQgc2FtcGxpbmcgLyAxMCkKKyAqICAgLSBNSU5fU1RBVF9TQU1QTElOR19SQVRFCisgKiBUbyBhdm9pZCB0aGF0IHVzZXJzcGFjZSBzaG9vdHMgaXRzZWxmLgorKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWluaW11bV9zYW1wbGluZ19yYXRlKHZvaWQpCit7CisJcmV0dXJuIG1heChkZWZfc2FtcGxpbmdfcmF0ZSAvIDEwLCBNSU5fU1RBVF9TQU1QTElOR19SQVRFKTsKK30KKworLyogVGhpcyB3aWxsIGFsc28gdmFuaXNoIHNvb24gd2l0aCByZW1vdmluZyBzYW1wbGluZ19yYXRlX21heCAqLwogI2RlZmluZSBNQVhfU0FNUExJTkdfUkFURQkJCSg1MDAgKiBkZWZfc2FtcGxpbmdfcmF0ZSkKLSNkZWZpbmUgREVGX1NBTVBMSU5HX1JBVEVfTEFURU5DWV9NVUxUSVBMSUVSCSgxMDAwKQorI2RlZmluZSBMQVRFTkNZX01VTFRJUExJRVIJCQkoMTAwMCkKICNkZWZpbmUgVFJBTlNJVElPTl9MQVRFTkNZX0xJTUlUCQkoMTAgKiAxMDAwICogMTAwMCkKIAogc3RhdGljIHZvaWQgZG9fZGJzX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CkBAIC02NSwxNCArNzgsMTQgQEAKIAljcHV0aW1lNjRfdCBwcmV2X2NwdV93YWxsOwogCWNwdXRpbWU2NF90IHByZXZfY3B1X25pY2U7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjdXJfcG9saWN5OwotIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqZnJlcV90YWJsZTsKIAl1bnNpZ25lZCBpbnQgZnJlcV9sbzsKIAl1bnNpZ25lZCBpbnQgZnJlcV9sb19qaWZmaWVzOwogCXVuc2lnbmVkIGludCBmcmVxX2hpX2ppZmZpZXM7CiAJaW50IGNwdTsKIAl1bnNpZ25lZCBpbnQgZW5hYmxlOjEsCi0JICAgICAgICAgICAgIHNhbXBsZV90eXBlOjE7CisJCXNhbXBsZV90eXBlOjE7CiB9Owogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVfZGJzX2luZm9fcywgY3B1X2Ric19pbmZvKTsKIApAQCAtMjAzLDEyICsyMTYsMjggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBzeXNmcyBpbnRlcmZhY2UgKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHNzaXplX3Qgc2hvd19zYW1wbGluZ19yYXRlX21heChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmIChidWYsICIldVxuIiwgTUFYX1NBTVBMSU5HX1JBVEUpOworCXN0YXRpYyBpbnQgcHJpbnRfb25jZTsKKworCWlmICghcHJpbnRfb25jZSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDUFVGUkVROiBvbmRlbWFuZCBzYW1wbGluZ19yYXRlX21heCAiCisJCSAgICAgICAic3lzZnMgZmlsZSBpcyBkZXByZWNhdGVkIC0gdXNlZCBieTogJXNcbiIsCisJCSAgICAgICBjdXJyZW50LT5jb21tKTsKKwkJcHJpbnRfb25jZSA9IDE7CisJfQorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBNQVhfU0FNUExJTkdfUkFURSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc2FtcGxpbmdfcmF0ZV9taW4oc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZiAoYnVmLCAiJXVcbiIsIE1JTl9TQU1QTElOR19SQVRFKTsKKwlzdGF0aWMgaW50IHByaW50X29uY2U7CisKKwlpZiAoIXByaW50X29uY2UpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVRlJFUTogb25kZW1hbmQgc2FtcGxpbmdfcmF0ZV9taW4gIgorCQkgICAgICAgInN5c2ZzIGZpbGUgaXMgZGVwcmVjYXRlZCAtIHVzZWQgYnk6ICVzXG4iLAorCQkgICAgICAgY3VycmVudC0+Y29tbSk7CisJCXByaW50X29uY2UgPSAxOworCX0KKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgTUlOX1NBTVBMSU5HX1JBVEUpOwogfQogCiAjZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUpCQlcCkBAIC0yMzgsMTMgKzI2NywxMSBAQAogCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmIChyZXQgIT0gMSB8fCBpbnB1dCA+IE1BWF9TQU1QTElOR19SQVRFCi0JCSAgICAgfHwgaW5wdXQgPCBNSU5fU0FNUExJTkdfUkFURSkgeworCWlmIChyZXQgIT0gMSkgewogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQotCWRic190dW5lcnNfaW5zLnNhbXBsaW5nX3JhdGUgPSBpbnB1dDsKKwlkYnNfdHVuZXJzX2lucy5zYW1wbGluZ19yYXRlID0gbWF4KGlucHV0LCBtaW5pbXVtX3NhbXBsaW5nX3JhdGUoKSk7CiAJbXV0ZXhfdW5sb2NrKCZkYnNfbXV0ZXgpOwogCiAJcmV0dXJuIGNvdW50OwpAQCAtMjc5LDE0ICszMDYsMTQgQEAKIAl1bnNpZ25lZCBpbnQgajsKIAogCXJldCA9IHNzY2FuZihidWYsICIldSIsICZpbnB1dCk7Ci0JaWYgKCByZXQgIT0gMSApCisJaWYgKHJldCAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICggaW5wdXQgPiAxICkKKwlpZiAoaW5wdXQgPiAxKQogCQlpbnB1dCA9IDE7CiAKIAltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwotCWlmICggaW5wdXQgPT0gZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UgKSB7IC8qIG5vdGhpbmcgdG8gZG8gKi8KKwlpZiAoaW5wdXQgPT0gZGJzX3R1bmVyc19pbnMuaWdub3JlX25pY2UpIHsgLyogbm90aGluZyB0byBkbyAqLwogCQltdXRleF91bmxvY2soJmRic19tdXRleCk7CiAJCXJldHVybiBjb3VudDsKIAl9CkBAIC0zMzcsNyArMzY0LDcgQEAKIGRlZmluZV9vbmVfcncoaWdub3JlX25pY2VfbG9hZCk7CiBkZWZpbmVfb25lX3J3KHBvd2Vyc2F2ZV9iaWFzKTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBkYnNfYXR0cmlidXRlc1tdID0geworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRic19hdHRyaWJ1dGVzW10gPSB7CiAJJnNhbXBsaW5nX3JhdGVfbWF4LmF0dHIsCiAJJnNhbXBsaW5nX3JhdGVfbWluLmF0dHIsCiAJJnNhbXBsaW5nX3JhdGUuYXR0ciwKQEAgLTUxMiw4ICs1MzksNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQoZGJzX2luZm8tPmN1cl9wb2xpY3ksCi0JICAgICAgICAgICAgICAgICAgICAgICAgCWRic19pbmZvLT5mcmVxX2xvLAotCSAgICAgICAgICAgICAgICAgICAgICAgIAlDUFVGUkVRX1JFTEFUSU9OX0gpOworCQkJZGJzX2luZm8tPmZyZXFfbG8sIENQVUZSRVFfUkVMQVRJT05fSCk7CiAJfQogCXF1ZXVlX2RlbGF5ZWRfd29ya19vbihjcHUsIGtvbmRlbWFuZF93cSwgJmRic19pbmZvLT53b3JrLCBkZWxheSk7CiAJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwpAQCAtNTMwLDcgKzU1Niw3IEBACiAJZGJzX2luZm8tPnNhbXBsZV90eXBlID0gREJTX05PUk1BTF9TQU1QTEU7CiAJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmZGJzX2luZm8tPndvcmssIGRvX2Ric190aW1lcik7CiAJcXVldWVfZGVsYXllZF93b3JrX29uKGRic19pbmZvLT5jcHUsIGtvbmRlbWFuZF93cSwgJmRic19pbmZvLT53b3JrLAotCSAgICAgICAgICAgICAgICAgICAgICBkZWxheSk7CisJCWRlbGF5KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRic190aW1lcl9leGl0KHN0cnVjdCBjcHVfZGJzX2luZm9fcyAqZGJzX2luZm8pCkBAIC01OTEsMTEgKzYxNyw5IEBACiAJCQlpZiAobGF0ZW5jeSA9PSAwKQogCQkJCWxhdGVuY3kgPSAxOwogCi0JCQlkZWZfc2FtcGxpbmdfcmF0ZSA9IGxhdGVuY3kgKgotCQkJCQlERUZfU0FNUExJTkdfUkFURV9MQVRFTkNZX01VTFRJUExJRVI7Ci0KLQkJCWlmIChkZWZfc2FtcGxpbmdfcmF0ZSA8IE1JTl9TVEFUX1NBTVBMSU5HX1JBVEUpCi0JCQkJZGVmX3NhbXBsaW5nX3JhdGUgPSBNSU5fU1RBVF9TQU1QTElOR19SQVRFOworCQkJZGVmX3NhbXBsaW5nX3JhdGUgPQorCQkJCW1heChsYXRlbmN5ICogTEFURU5DWV9NVUxUSVBMSUVSLAorCQkJCSAgICBNSU5fU1RBVF9TQU1QTElOR19SQVRFKTsKIAogCQkJZGJzX3R1bmVyc19pbnMuc2FtcGxpbmdfcmF0ZSA9IGRlZl9zYW1wbGluZ19yYXRlOwogCQl9CkBAIC02MTcsMTIgKzY0MSwxMCBAQAogCQltdXRleF9sb2NrKCZkYnNfbXV0ZXgpOwogCQlpZiAocG9saWN5LT5tYXggPCB0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5LT5jdXIpCiAJCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldCh0aGlzX2Ric19pbmZvLT5jdXJfcG9saWN5LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5LT5tYXgsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBDUFVGUkVRX1JFTEFUSU9OX0gpOworCQkJCXBvbGljeS0+bWF4LCBDUFVGUkVRX1JFTEFUSU9OX0gpOwogCQllbHNlIGlmIChwb2xpY3ktPm1pbiA+IHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ktPmN1cikKIAkJCV9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHRoaXNfZGJzX2luZm8tPmN1cl9wb2xpY3ksCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3ktPm1pbiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIENQVUZSRVFfUkVMQVRJT05fTCk7CisJCQkJcG9saWN5LT5taW4sIENQVUZSRVFfUkVMQVRJT05fTCk7CiAJCW11dGV4X3VubG9jaygmZGJzX211dGV4KTsKIAkJYnJlYWs7CiAJfQpAQCAtNjc3LDcgKzY5OSw3IEBACiBNT0RVTEVfQVVUSE9SKCJWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4iKTsKIE1PRFVMRV9BVVRIT1IoIkFsZXhleSBTdGFyaWtvdnNraXkgPGFsZXhleS55LnN0YXJpa292c2tpeUBpbnRlbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIidjcHVmcmVxX29uZGVtYW5kJyAtIEEgZHluYW1pYyBjcHVmcmVxIGdvdmVybm9yIGZvciAiCi0gICAgICAgICAgICAgICAgICAgIkxvdyBMYXRlbmN5IEZyZXF1ZW5jeSBUcmFuc2l0aW9uIGNhcGFibGUgcHJvY2Vzc29ycyIpOworCSJMb3cgTGF0ZW5jeSBGcmVxdWVuY3kgVHJhbnNpdGlvbiBjYXBhYmxlIHByb2Nlc3NvcnMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKaW5kZXggYzBmZjk3ZC4uNWE2MmQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCkBAIC0yLDcgKzIsNyBAQAogICogIGRyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+LgotICoJICAgICAgKEMpIDIwMDQgWm91IE5hbiBoYWkgPG5hbmhhaS56b3VAaW50ZWwuY29tPi4KKyAqICAoQykgMjAwNCBab3UgTmFuIGhhaSA8bmFuaGFpLnpvdUBpbnRlbC5jb20+LgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMjMsNyArMjMsNyBAQAogCiBzdGF0aWMgc3BpbmxvY2tfdCBjcHVmcmVxX3N0YXRzX2xvY2s7CiAKLSNkZWZpbmUgQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIoX25hbWUsX21vZGUsX3Nob3cpIFwKKyNkZWZpbmUgQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdykgXAogc3RhdGljIHN0cnVjdCBmcmVxX2F0dHIgX2F0dHJfIyNfbmFtZSA9IHtcCiAJLmF0dHIgPSB7Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gX21vZGUsIH0sIFwKIAkuc2hvdyA9IF9zaG93LFwKQEAgLTUwLDggKzUwLDcgQEAKIAlzc2l6ZV90KCpzaG93KSAoc3RydWN0IGNwdWZyZXFfc3RhdHMgKiwgY2hhciAqKTsKIH07CiAKLXN0YXRpYyBpbnQKLWNwdWZyZXFfc3RhdHNfdXBkYXRlICh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIGludCBjcHVmcmVxX3N0YXRzX3VwZGF0ZSh1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0OwogCXVuc2lnbmVkIGxvbmcgbG9uZyBjdXJfdGltZTsKQEAgLTY4LDggKzY3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QKLXNob3dfdG90YWxfdHJhbnMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdG90YWxfdHJhbnMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCA9IHBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgcG9saWN5LT5jcHUpOwogCWlmICghc3RhdCkKQEAgLTc4LDggKzc2LDcgQEAKIAkJCXBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgc3RhdC0+Y3B1KS0+dG90YWxfdHJhbnMpOwogfQogCi1zdGF0aWMgc3NpemVfdAotc2hvd190aW1lX2luX3N0YXRlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X3RpbWVfaW5fc3RhdGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKIAlzc2l6ZV90IGxlbiA9IDA7CiAJaW50IGk7CkBAIC04OSwxNCArODYsMTQgQEAKIAljcHVmcmVxX3N0YXRzX3VwZGF0ZShzdGF0LT5jcHUpOwogCWZvciAoaSA9IDA7IGkgPCBzdGF0LT5zdGF0ZV9udW07IGkrKykgewogCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIldSAlbGx1XG4iLCBzdGF0LT5mcmVxX3RhYmxlW2ldLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljcHV0aW1lNjRfdG9fY2xvY2tfdChzdGF0LT50aW1lX2luX3N0YXRlW2ldKSk7CisJCQkodW5zaWduZWQgbG9uZyBsb25nKQorCQkJY3B1dGltZTY0X3RvX2Nsb2NrX3Qoc3RhdC0+dGltZV9pbl9zdGF0ZVtpXSkpOwogCX0KIAlyZXR1cm4gbGVuOwogfQogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUwotc3RhdGljIHNzaXplX3QKLXNob3dfdHJhbnNfdGFibGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdHJhbnNfdGFibGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKIHsKIAlzc2l6ZV90IGxlbiA9IDA7CiAJaW50IGksIGo7CkBAIC0xMzksMTEgKzEzNiwxMSBAQAogCQlyZXR1cm4gUEFHRV9TSVpFOwogCXJldHVybiBsZW47CiB9Ci1DUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0cmFuc190YWJsZSwwNDQ0LHNob3dfdHJhbnNfdGFibGUpOworQ1BVRlJFUV9TVEFUREVWSUNFX0FUVFIodHJhbnNfdGFibGUsIDA0NDQsIHNob3dfdHJhbnNfdGFibGUpOwogI2VuZGlmCiAKLUNQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRvdGFsX3RyYW5zLDA0NDQsc2hvd190b3RhbF90cmFucyk7Ci1DUFVGUkVRX1NUQVRERVZJQ0VfQVRUUih0aW1lX2luX3N0YXRlLDA0NDQsc2hvd190aW1lX2luX3N0YXRlKTsKK0NQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRvdGFsX3RyYW5zLCAwNDQ0LCBzaG93X3RvdGFsX3RyYW5zKTsKK0NQVUZSRVFfU1RBVERFVklDRV9BVFRSKHRpbWVfaW5fc3RhdGUsIDA0NDQsIHNob3dfdGltZV9pbl9zdGF0ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZWZhdWx0X2F0dHJzW10gPSB7CiAJJl9hdHRyX3RvdGFsX3RyYW5zLmF0dHIsCkBAIC0xNTgsOCArMTU1LDcgQEAKIAkubmFtZSA9ICJzdGF0cyIKIH07CiAKLXN0YXRpYyBpbnQKLWZyZXFfdGFibGVfZ2V0X2luZGV4KHN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0LCB1bnNpZ25lZCBpbnQgZnJlcSkKK3N0YXRpYyBpbnQgZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQsIHVuc2lnbmVkIGludCBmcmVxKQogewogCWludCBpbmRleDsKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGF0LT5tYXhfc3RhdGU7IGluZGV4KyspCkBAIC0xODMsOCArMTc5LDcgQEAKIAkJY3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7CiB9CiAKLXN0YXRpYyBpbnQKLWNwdWZyZXFfc3RhdHNfY3JlYXRlX3RhYmxlIChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKK3N0YXRpYyBpbnQgY3B1ZnJlcV9zdGF0c19jcmVhdGVfdGFibGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCXN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGksIGosIGNvdW50ID0gMCwgcmV0ID0gMDsKQEAgLTE5NCw3ICsxODksOCBAQAogCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKIAlpZiAocGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBjcHUpKQogCQlyZXR1cm4gLUVCVVNZOwotCWlmICgoc3RhdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3N0YXRzKSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpCisJc3RhdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3N0YXRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKChzdGF0KSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRhdGEgPSBjcHVmcmVxX2NwdV9nZXQoY3B1KTsKQEAgLTIwMywxMyArMTk5LDE0IEBACiAJCWdvdG8gZXJyb3JfZ2V0X2ZhaWw7CiAJfQogCi0JaWYgKChyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRhdGEtPmtvYmosICZzdGF0c19hdHRyX2dyb3VwKSkpCisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkYXRhLT5rb2JqLCAmc3RhdHNfYXR0cl9ncm91cCk7CisJaWYgKHJldCkKIAkJZ290byBlcnJvcl9vdXQ7CiAKIAlzdGF0LT5jcHUgPSBjcHU7CiAJcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBjcHUpID0gc3RhdDsKIAotCWZvciAoaT0wOyB0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7IGkrKykgeworCWZvciAoaSA9IDA7IHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORDsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBmcmVxID0gdGFibGVbaV0uZnJlcXVlbmN5OwogCQlpZiAoZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCiAJCQljb250aW51ZTsKQEAgLTI1NSw5ICsyNTIsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKLWNwdWZyZXFfc3RhdF9ub3RpZmllcl9wb2xpY3kgKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQl2b2lkICpkYXRhKQorc3RhdGljIGludCBjcHVmcmVxX3N0YXRfbm90aWZpZXJfcG9saWN5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQogewogCWludCByZXQ7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSBkYXRhOwpAQCAtMjY4LDE0ICsyNjQsMTQgQEAKIAl0YWJsZSA9IGNwdWZyZXFfZnJlcXVlbmN5X2dldF90YWJsZShjcHUpOwogCWlmICghdGFibGUpCiAJCXJldHVybiAwOwotCWlmICgocmV0ID0gY3B1ZnJlcV9zdGF0c19jcmVhdGVfdGFibGUocG9saWN5LCB0YWJsZSkpKQorCXJldCA9IGNwdWZyZXFfc3RhdHNfY3JlYXRlX3RhYmxlKHBvbGljeSwgdGFibGUpOworCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLWNwdWZyZXFfc3RhdF9ub3RpZmllcl90cmFucyAoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsCi0JCXZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGNwdWZyZXFfc3RhdF9ub3RpZmllcl90cmFucyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAqZnJlcSA9IGRhdGE7CiAJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQ7CkBAIC0zNDAsMTkgKzMzNiwyMCBAQAogCS5ub3RpZmllcl9jYWxsID0gY3B1ZnJlcV9zdGF0X25vdGlmaWVyX3RyYW5zCiB9OwogCi1zdGF0aWMgaW50Ci1fX2luaXQgY3B1ZnJlcV9zdGF0c19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjcHVmcmVxX3N0YXRzX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBjcHU7CiAKIAlzcGluX2xvY2tfaW5pdCgmY3B1ZnJlcV9zdGF0c19sb2NrKTsKLQlpZiAoKHJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJm5vdGlmaWVyX3BvbGljeV9ibG9jaywKLQkJCQlDUFVGUkVRX1BPTElDWV9OT1RJRklFUikpKQorCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJm5vdGlmaWVyX3BvbGljeV9ibG9jaywKKwkJCQlDUFVGUkVRX1BPTElDWV9OT1RJRklFUik7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICgocmV0ID0gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmbm90aWZpZXJfdHJhbnNfYmxvY2ssCi0JCQkJQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKSkpIHsKKwlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKCZub3RpZmllcl90cmFuc19ibG9jaywKKwkJCQlDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOworCWlmIChyZXQpIHsKIAkJY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKCZub3RpZmllcl9wb2xpY3lfYmxvY2ssCiAJCQkJQ1BVRlJFUV9QT0xJQ1lfTk9USUZJRVIpOwogCQlyZXR1cm4gcmV0OwpAQCAtMzY0LDggKzM2MSw3IEBACiAJfQogCXJldHVybiAwOwogfQotc3RhdGljIHZvaWQKLV9fZXhpdCBjcHVmcmVxX3N0YXRzX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcHVmcmVxX3N0YXRzX2V4aXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCkBAIC0zNzksMTAgKzM3NSwxMCBAQAogCX0KIH0KIAotTU9EVUxFX0FVVEhPUiAoIlpvdSBOYW4gaGFpIDxuYW5oYWkuem91QGludGVsLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIidjcHVmcmVxX3N0YXRzJyAtIEEgZHJpdmVyIHRvIGV4cG9ydCBjcHVmcmVxIHN0YXRzICIKK01PRFVMRV9BVVRIT1IoIlpvdSBOYW4gaGFpIDxuYW5oYWkuem91QGludGVsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiJ2NwdWZyZXFfc3RhdHMnIC0gQSBkcml2ZXIgdG8gZXhwb3J0IGNwdWZyZXEgc3RhdHMgIgogCQkJCSJ0aHJvdWdoIHN5c2ZzIGZpbGVzeXN0ZW0iKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KGNwdWZyZXFfc3RhdHNfaW5pdCk7CiBtb2R1bGVfZXhpdChjcHVmcmVxX3N0YXRzX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfdXNlcnNwYWNlLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYwppbmRleCAxNDQyYmJhLi42NmQyZDFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYwpAQCAtMjQsOSArMjQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0KLQogLyoqCiAgKiBBIGZldyB2YWx1ZXMgbmVlZGVkIGJ5IHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IKICAqLwpAQCAtMzcsNyArMzQsNyBAQAogCQkJCQkJCXVzZXJzcGFjZSAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgY3B1X2lzX21hbmFnZWQpOwogCi1zdGF0aWMgREVGSU5FX01VVEVYCSh1c2Vyc3BhY2VfbXV0ZXgpOworc3RhdGljIERFRklORV9NVVRFWCh1c2Vyc3BhY2VfbXV0ZXgpOwogc3RhdGljIGludCBjcHVzX3VzaW5nX3VzZXJzcGFjZV9nb3Zlcm5vcjsKIAogI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgXApAQCAtNDYsOSArNDMsOSBAQAogLyoga2VlcCB0cmFjayBvZiBmcmVxdWVuY3kgdHJhbnNpdGlvbnMgKi8KIHN0YXRpYyBpbnQKIHVzZXJzcGFjZV9jcHVmcmVxX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAotICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKQorCXZvaWQgKmRhdGEpCiB7Ci0gICAgICAgIHN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyAqZnJlcSA9IGRhdGE7CiAKIAlpZiAoIXBlcl9jcHUoY3B1X2lzX21hbmFnZWQsIGZyZXEtPmNwdSkpCiAJCXJldHVybiAwOwpAQCAtNTcsMTEgKzU0LDExIEBACiAJCQlmcmVxLT5jcHUsIGZyZXEtPm5ldyk7CiAJcGVyX2NwdShjcHVfY3VyX2ZyZXEsIGZyZXEtPmNwdSkgPSBmcmVxLT5uZXc7CiAKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdXNlcnNwYWNlX2NwdWZyZXFfbm90aWZpZXJfYmxvY2sgPSB7Ci0gICAgICAgIC5ub3RpZmllcl9jYWxsICA9IHVzZXJzcGFjZV9jcHVmcmVxX25vdGlmaWVyCisJLm5vdGlmaWVyX2NhbGwgID0gdXNlcnNwYWNlX2NwdWZyZXFfbm90aWZpZXIKIH07CiAKIApAQCAtOTMsOCArOTAsMTEgQEAKIAkgKiBXZSdyZSBzYWZlIGZyb20gY29uY3VycmVudCBjYWxscyB0byAtPnRhcmdldCgpIGhlcmUKIAkgKiBhcyB3ZSBob2xkIHRoZSB1c2Vyc3BhY2VfbXV0ZXggbG9jay4gSWYgd2Ugd2VyZSBjYWxsaW5nCiAJICogY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0LCBhIGRlYWRsb2NrIHNpdHVhdGlvbiBtaWdodCBvY2N1cjoKLQkgKiBBOiBjcHVmcmVxX3NldCAobG9jayB1c2Vyc3BhY2VfbXV0ZXgpIC0+IGNwdWZyZXFfZHJpdmVyX3RhcmdldChsb2NrIHBvbGljeS0+bG9jaykKLQkgKiBCOiBjcHVmcmVxX3NldF9wb2xpY3kobG9jayBwb2xpY3ktPmxvY2spIC0+IF9fY3B1ZnJlcV9nb3Zlcm5vciAtPiBjcHVmcmVxX2dvdmVybm9yX3VzZXJzcGFjZSAobG9jayB1c2Vyc3BhY2VfbXV0ZXgpCisJICogQTogY3B1ZnJlcV9zZXQgKGxvY2sgdXNlcnNwYWNlX211dGV4KSAtPgorCSAqICAgICAgY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KGxvY2sgcG9saWN5LT5sb2NrKQorCSAqIEI6IGNwdWZyZXFfc2V0X3BvbGljeShsb2NrIHBvbGljeS0+bG9jaykgLT4KKwkgKiAgICAgIF9fY3B1ZnJlcV9nb3Zlcm5vciAtPgorCSAqICAgICAgICAgY3B1ZnJlcV9nb3Zlcm5vcl91c2Vyc3BhY2UgKGxvY2sgdXNlcnNwYWNlX211dGV4KQogCSAqLwogCXJldCA9IF9fY3B1ZnJlcV9kcml2ZXJfdGFyZ2V0KHBvbGljeSwgZnJlcSwgQ1BVRlJFUV9SRUxBVElPTl9MKTsKIApAQCAtMjEwLDkgKzIxMCwxMCBAQAogfQogCiAKLU1PRFVMRV9BVVRIT1IgKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+LCBSdXNzZWxsIEtpbmcgPHJta0Bhcm0ubGludXgub3JnLnVrPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiQ1BVZnJlcSBwb2xpY3kgZ292ZXJub3IgJ3VzZXJzcGFjZSciKTsKLU1PRFVMRV9MSUNFTlNFICgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+LCAiCisJCSJSdXNzZWxsIEtpbmcgPHJta0Bhcm0ubGludXgub3JnLnVrPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDUFVmcmVxIHBvbGljeSBnb3Zlcm5vciAndXNlcnNwYWNlJyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRQogZnNfaW5pdGNhbGwoY3B1ZnJlcV9nb3ZfdXNlcnNwYWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKaW5kZXggOTA3MWQ4MC4uYTliZDNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCkBAIC0yOCw3ICsyOCw3IEBACiAJdW5zaWduZWQgaW50IG1heF9mcmVxID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZvciAoaT0wOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CisJZm9yIChpID0gMDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgZnJlcSA9IHRhYmxlW2ldLmZyZXF1ZW5jeTsKIAkJaWYgKGZyZXEgPT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKSB7CiAJCQlkcHJpbnRrKCJ0YWJsZSBlbnRyeSAldSBpcyBpbnZhbGlkLCBza2lwcGluZ1xuIiwgaSk7CkBAIC03MCw3ICs3MCw3IEBACiAJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSwKIAkJCQkgICAgIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSk7CiAKLQlmb3IgKGk9MDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgeworCWZvciAoaSA9IDA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJdW5zaWduZWQgaW50IGZyZXEgPSB0YWJsZVtpXS5mcmVxdWVuY3k7CiAJCWlmIChmcmVxID09IENQVUZSRVFfRU5UUllfSU5WQUxJRCkKIAkJCWNvbnRpbnVlOwpAQCAtMTI1LDEzICsxMjUsMTMgQEAKIAlpZiAoIWNwdV9vbmxpbmUocG9saWN5LT5jcHUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoaT0wOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CisJZm9yIChpID0gMDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgewogCQl1bnNpZ25lZCBpbnQgZnJlcSA9IHRhYmxlW2ldLmZyZXF1ZW5jeTsKIAkJaWYgKGZyZXEgPT0gQ1BVRlJFUV9FTlRSWV9JTlZBTElEKQogCQkJY29udGludWU7CiAJCWlmICgoZnJlcSA8IHBvbGljeS0+bWluKSB8fCAoZnJlcSA+IHBvbGljeS0+bWF4KSkKIAkJCWNvbnRpbnVlOwotCQlzd2l0Y2gocmVsYXRpb24pIHsKKwkJc3dpdGNoIChyZWxhdGlvbikgewogCQljYXNlIENQVUZSRVFfUkVMQVRJT05fSDoKIAkJCWlmIChmcmVxIDw9IHRhcmdldF9mcmVxKSB7CiAJCQkJaWYgKGZyZXEgPj0gb3B0aW1hbC5mcmVxdWVuY3kpIHsKQEAgLTE3OCw3ICsxNzgsNyBAQAogLyoqCiAgKiBzaG93X2F2YWlsYWJsZV9mcmVxcyAtIHNob3cgYXZhaWxhYmxlIGZyZXF1ZW5jaWVzIGZvciB0aGUgc3BlY2lmaWVkIENQVQogICovCi1zdGF0aWMgc3NpemVfdCBzaG93X2F2YWlsYWJsZV9mcmVxcyAoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfYXZhaWxhYmxlX2ZyZXFzKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7CiAJdW5zaWduZWQgaW50IGkgPSAwOwogCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKQEAgLTE5MCw3ICsxOTAsNyBAQAogCiAJdGFibGUgPSBwZXJfY3B1KHNob3dfdGFibGUsIGNwdSk7CiAKLQlmb3IgKGk9MDsgKHRhYmxlW2ldLmZyZXF1ZW5jeSAhPSBDUFVGUkVRX1RBQkxFX0VORCk7IGkrKykgeworCWZvciAoaSA9IDA7ICh0YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQpOyBpKyspIHsKIAkJaWYgKHRhYmxlW2ldLmZyZXF1ZW5jeSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCiAJCQljb250aW51ZTsKIAkJY291bnQgKz0gc3ByaW50ZigmYnVmW2NvdW50XSwgIiVkICIsIHRhYmxlW2ldLmZyZXF1ZW5jeSk7CkBAIC0yMzQsNiArMjM0LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfZnJlcXVlbmN5X2dldF90YWJsZSk7CiAKLU1PRFVMRV9BVVRIT1IgKCJEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAYnJvZG8uZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJDUFVmcmVxIGZyZXF1ZW5jeSB0YWJsZSBoZWxwZXJzIik7Ci1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDUFVmcmVxIGZyZXF1ZW5jeSB0YWJsZSBoZWxwZXJzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9LY29uZmlnIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwppbmRleCBlNTIyMTQ0Li4wMWFmZDc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9LY29uZmlnCisrKyBiL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKQEAgLTg2LDcgKzg2LDcgQEAKIGNvbmZpZyBDUllQVE9fU0hBMV9TMzkwCiAJdHJpc3RhdGUgIlNIQTEgZGlnZXN0IGFsZ29yaXRobSIKIAlkZXBlbmRzIG9uIFMzOTAKLQlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCXNlbGVjdCBDUllQVE9fSEFTSAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAJICBTSEEtMSBzZWN1cmUgaGFzaCBzdGFuZGFyZCAoRklQUyAxODAtMS9ERklQUyAxODAtMikuCkBAIC05NCw3ICs5NCw3IEBACiBjb25maWcgQ1JZUFRPX1NIQTI1Nl9TMzkwCiAJdHJpc3RhdGUgIlNIQTI1NiBkaWdlc3QgYWxnb3JpdGhtIgogCWRlcGVuZHMgb24gUzM5MAotCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19IQVNICiAJaGVscAogCSAgVGhpcyBpcyB0aGUgczM5MCBoYXJkd2FyZSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKIAkgIFNIQTI1NiBzZWN1cmUgaGFzaCBzdGFuZGFyZCAoREZJUFMgMTgwLTIpLgpAQCAtMTA1LDcgKzEwNSw3IEBACiBjb25maWcgQ1JZUFRPX1NIQTUxMl9TMzkwCiAJdHJpc3RhdGUgIlNIQTM4NCBhbmQgU0hBNTEyIGRpZ2VzdCBhbGdvcml0aG0iCiAJZGVwZW5kcyBvbiBTMzkwCi0Jc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0hBU0gKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQogCSAgU0hBNTEyIHNlY3VyZSBoYXNoIHN0YW5kYXJkLgpAQCAtMjAwLDQgKzIwMCwxMyBAQAogCWhlbHAKIAkgIERyaXZlciBmb3IgdGhlIElYUDR4eCBOUEUgY3J5cHRvIGVuZ2luZS4KIAorY29uZmlnIENSWVBUT19ERVZfUFBDNFhYCisJdHJpc3RhdGUgIkRyaXZlciBBTUNDIFBQQzR4eCBjcnlwdG8gYWNjZWxlcmF0b3IiCisJZGVwZW5kcyBvbiBQUEMgJiYgNHh4CisJc2VsZWN0IENSWVBUT19IQVNICisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gaGF2ZSBzdXBwb3J0IGZvciBBTUNDIGNyeXB0byBhY2NlbGVyYXRpb24uCisKIGVuZGlmICMgQ1JZUFRPX0hXCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZSBiL2RyaXZlcnMvY3J5cHRvL01ha2VmaWxlCmluZGV4IDczNTU3YjIuLjliZjRhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY3J5cHRvL01ha2VmaWxlCkBAIC00LDMgKzQsNCBAQAogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfSElGTl83OTVYKSArPSBoaWZuXzc5NXgubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUykgKz0gdGFsaXRvcy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9JWFA0WFgpICs9IGl4cDR4eF9jcnlwdG8ubworb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfUFBDNFhYKSArPSBhbWNjLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9NYWtlZmlsZSBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEzNzZlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9QUEM0WFgpICs9IGNyeXB0bzR4eC5vCitjcnlwdG80eHgtb2JqcyA6PSAgY3J5cHRvNHh4X2NvcmUubyBjcnlwdG80eHhfYWxnLm8gY3J5cHRvNHh4X3NhLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2FsZy5jIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfYWxnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFiNmUxYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2FsZy5jCkBAIC0wLDAgKzEsMjkzIEBACisvKioKKyAqIEFNQ0MgU29DIFBQQzR4eCBDcnlwdG8gRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgTGludXggY3J5cHRvIGFsZ29yaXRobXMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisjaW5jbHVkZSA8Y3J5cHRvL3NoYS5oPgorI2luY2x1ZGUgImNyeXB0bzR4eF9yZWdfZGVmLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X3NhLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X2NvcmUuaCIKKwordm9pZCBzZXRfZHluYW1pY19zYV9jb21tYW5kXzAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYSwgdTMyIHNhdmVfaCwKKwkJCSAgICAgIHUzMiBzYXZlX2l2LCB1MzIgbGRfaCwgdTMyIGxkX2l2LCB1MzIgaGRyX3Byb2MsCisJCQkgICAgICB1MzIgaCwgdTMyIGMsIHUzMiBwYWRfdHlwZSwgdTMyIG9wX2dycCwgdTMyIG9wLAorCQkJICAgICAgdTMyIGRpcikKK3sKKwlzYS0+c2FfY29tbWFuZF8wLncgPSAwOworCXNhLT5zYV9jb21tYW5kXzAuYmYuc2F2ZV9oYXNoX3N0YXRlID0gc2F2ZV9oOworCXNhLT5zYV9jb21tYW5kXzAuYmYuc2F2ZV9pdiA9IHNhdmVfaXY7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5sb2FkX2hhc2hfc3RhdGUgPSBsZF9oOworCXNhLT5zYV9jb21tYW5kXzAuYmYubG9hZF9pdiA9IGxkX2l2OworCXNhLT5zYV9jb21tYW5kXzAuYmYuaGRyX3Byb2MgPSBoZHJfcHJvYzsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmhhc2hfYWxnID0gaDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmNpcGhlcl9hbGcgPSBjOworCXNhLT5zYV9jb21tYW5kXzAuYmYucGFkX3R5cGUgPSBwYWRfdHlwZSAmIDM7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5leHRlbmRfcGFkID0gcGFkX3R5cGUgPj4gMjsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLm9wX2dyb3VwID0gb3BfZ3JwOworCXNhLT5zYV9jb21tYW5kXzAuYmYub3Bjb2RlID0gb3A7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5kaXIgPSBkaXI7Cit9CisKK3ZvaWQgc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8xKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2EsIHUzMiBjbSwgdTMyIGhtYWNfbWMsCisJCQkgICAgICB1MzIgY2ZiLCB1MzIgZXNuLCB1MzIgc25fbWFzaywgdTMyIG11dGUsCisJCQkgICAgICB1MzIgY3BfcGFkLCB1MzIgY3BfcGF5LCB1MzIgY3BfaGRyKQoreworCXNhLT5zYV9jb21tYW5kXzEudyA9IDA7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5jcnlwdG9fbW9kZTMxID0gKGNtICYgNCkgPj4gMjsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmNyeXB0b19tb2RlOV84ID0gY20gJiAzOworCXNhLT5zYV9jb21tYW5kXzEuYmYuZmVlZGJhY2tfbW9kZSA9IGNmYiwKKwlzYS0+c2FfY29tbWFuZF8xLmJmLnNhX3JldiA9IDE7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5leHRlbmRlZF9zZXFfbnVtID0gZXNuOworCXNhLT5zYV9jb21tYW5kXzEuYmYuc2VxX251bV9tYXNrID0gc25fbWFzazsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLm11dGFibGVfYml0X3Byb2MgPSBtdXRlOworCXNhLT5zYV9jb21tYW5kXzEuYmYuY29weV9wYWQgPSBjcF9wYWQ7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5jb3B5X3BheWxvYWQgPSBjcF9wYXk7CisJc2EtPnNhX2NvbW1hbmRfMS5iZi5jb3B5X2hkciA9IGNwX2hkcjsKK30KKworaW50IGNyeXB0bzR4eF9lbmNyeXB0KHN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocmVxLT5iYXNlLnRmbSk7CisKKwljdHgtPmRpcmVjdGlvbiA9IERJUl9PVVRCT1VORDsKKwljdHgtPmhhc2hfZmluYWwgPSAwOworCWN0eC0+aXNfaGFzaCA9IDA7CisJY3R4LT5wZF9jdGwgPSAweDE7CisKKwlyZXR1cm4gY3J5cHRvNHh4X2J1aWxkX3BkKCZyZXEtPmJhc2UsIGN0eCwgcmVxLT5zcmMsIHJlcS0+ZHN0LAorCQkJCSAgcmVxLT5uYnl0ZXMsIHJlcS0+aW5mbywKKwkJCQkgIGdldF9keW5hbWljX3NhX2l2X3NpemUoY3R4KSk7Cit9CisKK2ludCBjcnlwdG80eHhfZGVjcnlwdChzdHJ1Y3QgYWJsa2NpcGhlcl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKwljdHgtPmhhc2hfZmluYWwgPSAwOworCWN0eC0+aXNfaGFzaCA9IDA7CisJY3R4LT5wZF9jdGwgPSAxOworCisJcmV0dXJuIGNyeXB0bzR4eF9idWlsZF9wZCgmcmVxLT5iYXNlLCBjdHgsIHJlcS0+c3JjLCByZXEtPmRzdCwKKwkJCQkgIHJlcS0+bmJ5dGVzLCByZXEtPmluZm8sCisJCQkJICBnZXRfZHluYW1pY19zYV9pdl9zaXplKGN0eCkpOworfQorCisvKioKKyAqIEFFUyBGdW5jdGlvbnMKKyAqLworc3RhdGljIGludCBjcnlwdG80eHhfc2V0a2V5X2FlcyhzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgKmNpcGhlciwKKwkJCQljb25zdCB1OCAqa2V5LAorCQkJCXVuc2lnbmVkIGludCBrZXlsZW4sCisJCQkJdW5zaWduZWQgY2hhciBjbSwKKwkJCQl1OCBmYikKK3sKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gY3J5cHRvX2FibGtjaXBoZXJfdGZtKGNpcGhlcik7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IGR5bmFtaWNfc2FfY3RsICpzYTsKKwlpbnQgICAgcmM7CisKKwlpZiAoa2V5bGVuICE9IEFFU19LRVlTSVpFXzI1NiAmJgorCQlrZXlsZW4gIT0gQUVTX0tFWVNJWkVfMTkyICYmIGtleWxlbiAhPSBBRVNfS0VZU0laRV8xMjgpIHsKKwkJY3J5cHRvX2FibGtjaXBoZXJfc2V0X2ZsYWdzKGNpcGhlciwKKwkJCQlDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENyZWF0ZSBTQSAqLworCWlmIChjdHgtPnNhX2luX2RtYV9hZGRyIHx8IGN0eC0+c2Ffb3V0X2RtYV9hZGRyKQorCQljcnlwdG80eHhfZnJlZV9zYShjdHgpOworCisJcmMgPSBjcnlwdG80eHhfYWxsb2Nfc2EoY3R4LCBTQV9BRVMxMjhfTEVOICsgKGtleWxlbi0xNikgLyA0KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkciA9PSAwKSB7CisJCXJjID0gY3J5cHRvNHh4X2FsbG9jX3N0YXRlX3JlY29yZChjdHgpOworCQlpZiAocmMpIHsKKwkJCWNyeXB0bzR4eF9mcmVlX3NhKGN0eCk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisJLyogU2V0dXAgU0EgKi8KKwlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbjsKKwljdHgtPmhhc2hfZmluYWwgPSAwOworCisJc2V0X2R5bmFtaWNfc2FfY29tbWFuZF8wKHNhLCBTQV9OT1RfU0FWRV9IQVNILCBTQV9OT1RfU0FWRV9JViwKKwkJCQkgU0FfTE9BRF9IQVNIX0ZST01fU0EsIFNBX0xPQURfSVZfRlJPTV9TVEFURSwKKwkJCQkgU0FfTk9fSEVBREVSX1BST0MsIFNBX0hBU0hfQUxHX05VTEwsCisJCQkJIFNBX0NJUEhFUl9BTEdfQUVTLCBTQV9QQURfVFlQRV9aRVJPLAorCQkJCSBTQV9PUF9HUk9VUF9CQVNJQywgU0FfT1BDT0RFX0RFQ1JZUFQsCisJCQkJIERJUl9JTkJPVU5EKTsKKworCXNldF9keW5hbWljX3NhX2NvbW1hbmRfMShzYSwgY20sIFNBX0hBU0hfTU9ERV9IQVNILAorCQkJCSBmYiwgU0FfRVhURU5ERURfU05fT0ZGLAorCQkJCSBTQV9TRVFfTUFTS19PRkYsIFNBX01DX0VOQUJMRSwKKwkJCQkgU0FfTk9UX0NPUFlfUEFELCBTQV9OT1RfQ09QWV9QQVlMT0FELAorCQkJCSBTQV9OT1RfQ09QWV9IRFIpOworCWNyeXB0bzR4eF9tZW1jcHlfbGUoY3R4LT5zYV9pbiArIGdldF9keW5hbWljX3NhX29mZnNldF9rZXlfZmllbGQoY3R4KSwKKwkJCSAgICBrZXksIGtleWxlbik7CisJc2EtPnNhX2NvbnRlbnRzID0gU0FfQUVTX0NPTlRFTlRTIHwgKGtleWxlbiA8PCAyKTsKKwlzYS0+c2FfY29tbWFuZF8xLmJmLmtleV9sZW4gPSBrZXlsZW4gPj4gMzsKKwljdHgtPmlzX2hhc2ggPSAwOworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisJbWVtY3B5KGN0eC0+c2FfaW4gKyBnZXRfZHluYW1pY19zYV9vZmZzZXRfc3RhdGVfcHRyX2ZpZWxkKGN0eCksCisJCQkodm9pZCAqKSZjdHgtPnN0YXRlX3JlY29yZF9kbWFfYWRkciwgNCk7CisJY3R4LT5vZmZzZXRfdG9fc3JfcHRyID0gZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X3N0YXRlX3B0cl9maWVsZChjdHgpOworCisJbWVtY3B5KGN0eC0+c2Ffb3V0LCBjdHgtPnNhX2luLCBjdHgtPnNhX2xlbiAqIDQpOworCXNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX291dDsKKwlzYS0+c2FfY29tbWFuZF8wLmJmLmRpciA9IERJUl9PVVRCT1VORDsKKworCXJldHVybiAwOworfQorCitpbnQgY3J5cHRvNHh4X3NldGtleV9hZXNfY2JjKHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqY2lwaGVyLAorCQkJICAgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXJldHVybiBjcnlwdG80eHhfc2V0a2V5X2FlcyhjaXBoZXIsIGtleSwga2V5bGVuLCBDUllQVE9fTU9ERV9DQkMsCisJCQkJICAgIENSWVBUT19GRUVEQkFDS19NT0RFX05PX0ZCKTsKK30KKworLyoqCisgKiBIQVNIIFNIQTEgRnVuY3Rpb25zCisgKi8KK3N0YXRpYyBpbnQgY3J5cHRvNHh4X2hhc2hfYWxnX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgc2FfbGVuLAorCQkJCSAgIHVuc2lnbmVkIGNoYXIgaGEsCisJCQkJICAgdW5zaWduZWQgY2hhciBobSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnID0gdGZtLT5fX2NydF9hbGc7CisJc3RydWN0IGNyeXB0bzR4eF9hbGcgKm15X2FsZyA9IGNyeXB0b19hbGdfdG9fY3J5cHRvNHh4X2FsZyhhbGcpOworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2E7CisJc3RydWN0IGR5bmFtaWNfc2FfaGFzaDE2MCAqc2FfaW47CisJaW50IHJjOworCisJY3R4LT5kZXYgICA9IG15X2FsZy0+ZGV2OworCWN0eC0+aXNfaGFzaCA9IDE7CisJY3R4LT5oYXNoX2ZpbmFsID0gMDsKKworCS8qIENyZWF0ZSBTQSAqLworCWlmIChjdHgtPnNhX2luX2RtYV9hZGRyIHx8IGN0eC0+c2Ffb3V0X2RtYV9hZGRyKQorCQljcnlwdG80eHhfZnJlZV9zYShjdHgpOworCisJcmMgPSBjcnlwdG80eHhfYWxsb2Nfc2EoY3R4LCBzYV9sZW4pOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKGN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyID09IDApIHsKKwkJY3J5cHRvNHh4X2FsbG9jX3N0YXRlX3JlY29yZChjdHgpOworCQlpZiAoIWN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyKSB7CisJCQljcnlwdG80eHhfZnJlZV9zYShjdHgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwl0Zm0tPmNydF9haGFzaC5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBjcnlwdG80eHhfY3R4KTsKKwlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbjsKKwlzZXRfZHluYW1pY19zYV9jb21tYW5kXzAoc2EsIFNBX1NBVkVfSEFTSCwgU0FfTk9UX1NBVkVfSVYsCisJCQkJIFNBX05PVF9MT0FEX0hBU0gsIFNBX0xPQURfSVZfRlJPTV9TQSwKKwkJCQkgU0FfTk9fSEVBREVSX1BST0MsIGhhLCBTQV9DSVBIRVJfQUxHX05VTEwsCisJCQkJIFNBX1BBRF9UWVBFX1pFUk8sIFNBX09QX0dST1VQX0JBU0lDLAorCQkJCSBTQV9PUENPREVfSEFTSCwgRElSX0lOQk9VTkQpOworCXNldF9keW5hbWljX3NhX2NvbW1hbmRfMShzYSwgMCwgU0FfSEFTSF9NT0RFX0hBU0gsCisJCQkJIENSWVBUT19GRUVEQkFDS19NT0RFX05PX0ZCLCBTQV9FWFRFTkRFRF9TTl9PRkYsCisJCQkJIFNBX1NFUV9NQVNLX09GRiwgU0FfTUNfRU5BQkxFLAorCQkJCSBTQV9OT1RfQ09QWV9QQUQsIFNBX05PVF9DT1BZX1BBWUxPQUQsCisJCQkJIFNBX05PVF9DT1BZX0hEUik7CisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKwlzYS0+c2FfY29udGVudHMgPSBTQV9IQVNIMTYwX0NPTlRFTlRTOworCXNhX2luID0gKHN0cnVjdCBkeW5hbWljX3NhX2hhc2gxNjAgKikgY3R4LT5zYV9pbjsKKwkvKiBOZWVkIHRvIHplcm8gaGFzaCBkaWdlc3QgaW4gU0EgKi8KKwltZW1zZXQoc2FfaW4tPmlubmVyX2RpZ2VzdCwgMCwgc2l6ZW9mKHNhX2luLT5pbm5lcl9kaWdlc3QpKTsKKwltZW1zZXQoc2FfaW4tPm91dGVyX2RpZ2VzdCwgMCwgc2l6ZW9mKHNhX2luLT5vdXRlcl9kaWdlc3QpKTsKKwlzYV9pbi0+c3RhdGVfcHRyID0gY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHI7CisJY3R4LT5vZmZzZXRfdG9fc3JfcHRyID0gZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X3N0YXRlX3B0cl9maWVsZChjdHgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjcnlwdG80eHhfaGFzaF9pbml0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCWludCBkczsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhOworCisJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW47CisJZHMgPSBjcnlwdG9fYWhhc2hfZGlnZXN0c2l6ZSgKKwkJCV9fY3J5cHRvX2FoYXNoX2Nhc3QocmVxLT5iYXNlLnRmbSkpOworCXNhLT5zYV9jb21tYW5kXzAuYmYuZGlnZXN0X2xlbiA9IGRzID4+IDI7CisJc2EtPnNhX2NvbW1hbmRfMC5iZi5sb2FkX2hhc2hfc3RhdGUgPSBTQV9MT0FEX0hBU0hfRlJPTV9TQTsKKwljdHgtPmlzX2hhc2ggPSAxOworCWN0eC0+ZGlyZWN0aW9uID0gRElSX0lOQk9VTkQ7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNyeXB0bzR4eF9oYXNoX3VwZGF0ZShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChyZXEtPmJhc2UudGZtKTsKKworCWN0eC0+aXNfaGFzaCA9IDE7CisJY3R4LT5oYXNoX2ZpbmFsID0gMDsKKwljdHgtPnBkX2N0bCA9IDB4MTE7CisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKworCXJldHVybiBjcnlwdG80eHhfYnVpbGRfcGQoJnJlcS0+YmFzZSwgY3R4LCByZXEtPnNyYywKKwkJCQkgIChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgcmVxLT5yZXN1bHQsCisJCQkJICByZXEtPm5ieXRlcywgTlVMTCwgMCk7Cit9CisKK2ludCBjcnlwdG80eHhfaGFzaF9maW5hbChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiAwOworfQorCitpbnQgY3J5cHRvNHh4X2hhc2hfZGlnZXN0KHN0cnVjdCBhaGFzaF9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHJlcS0+YmFzZS50Zm0pOworCisJY3R4LT5oYXNoX2ZpbmFsID0gMTsKKwljdHgtPnBkX2N0bCA9IDB4MTE7CisJY3R4LT5kaXJlY3Rpb24gPSBESVJfSU5CT1VORDsKKworCXJldHVybiBjcnlwdG80eHhfYnVpbGRfcGQoJnJlcS0+YmFzZSwgY3R4LCByZXEtPnNyYywKKwkJCQkgIChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgcmVxLT5yZXN1bHQsCisJCQkJICByZXEtPm5ieXRlcywgTlVMTCwgMCk7Cit9CisKKy8qKgorICogU0hBMSBBbGdvcml0aG0KKyAqLworaW50IGNyeXB0bzR4eF9zaGExX2FsZ19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0bzR4eF9oYXNoX2FsZ19pbml0KHRmbSwgU0FfSEFTSDE2MF9MRU4sIFNBX0hBU0hfQUxHX1NIQTEsCisJCQkJICAgICAgIFNBX0hBU0hfTU9ERV9IQVNIKTsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwZGZiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuYwpAQCAtMCwwICsxLDEzMTAgQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIEFNQ0MgY3J5cHRvIG9mZmxvYWQgTGludXggZGV2aWNlIGRyaXZlciBmb3IgdXNlIHdpdGgKKyAqIExpbnV4IENyeXB0b0FQSS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8YXNtL2Rjci5oPgorI2luY2x1ZGUgPGFzbS9kY3ItcmVncy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFsL2hhc2guaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgorI2luY2x1ZGUgPGNyeXB0by9zaGEuaD4KKyNpbmNsdWRlICJjcnlwdG80eHhfcmVnX2RlZi5oIgorI2luY2x1ZGUgImNyeXB0bzR4eF9jb3JlLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X3NhLmgiCisKKyNkZWZpbmUgUFBDNFhYX1NFQ19WRVJTSU9OX1NUUgkJCSIwLjUiCisKKy8qKgorICogUFBDNHh4IENyeXB0byBFbmdpbmUgSW5pdGlhbGl6YXRpb24gUm91dGluZQorICovCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfaHdfaW5pdChzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCXVuaW9uIGNlX3Jpbmdfc2l6ZSByaW5nX3NpemU7CisJdW5pb24gY2VfcmluZ19jb250b2wgcmluZ19jdHJsOworCXVuaW9uIGNlX3BhcnRfcmluZ19zaXplIHBhcnRfcmluZ19zaXplOworCXVuaW9uIGNlX2lvX3RocmVzaG9sZCBpb190aHJlc2hvbGQ7CisJdTMyIHJhbmRfbnVtOworCXVuaW9uIGNlX3BlX2RtYV9jZmcgcGVfZG1hX2NmZzsKKworCXdyaXRlbChQUEM0WFhfQllURV9PUkRFUiwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0JZVEVfT1JERVJfQ0ZHKTsKKwkvKiBzZXR1cCBwZSBkbWEsIGluY2x1ZGUgcmVzZXQgc2csIHBkciBhbmQgcGUsIHRoZW4gcmVsZWFzZSByZXNldCAqLworCXBlX2RtYV9jZmcudyA9IDA7CisJcGVfZG1hX2NmZy5iZi5ib19zZ3BkX2VuID0gMTsKKwlwZV9kbWFfY2ZnLmJmLmJvX2RhdGFfZW4gPSAwOworCXBlX2RtYV9jZmcuYmYuYm9fc2FfZW4gPSAxOworCXBlX2RtYV9jZmcuYmYuYm9fcGRfZW4gPSAxOworCXBlX2RtYV9jZmcuYmYuZHluYW1pY19zYV9lbiA9IDE7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9zZyA9IDE7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZHIgPSAxOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGUgPSAxOworCXdyaXRlbChwZV9kbWFfY2ZnLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QRV9ETUFfQ0ZHKTsKKwkvKiB1biByZXNldCBwZSxzZyBhbmQgcGRyICovCisJcGVfZG1hX2NmZy5iZi5wZV9tb2RlID0gMDsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3NnID0gMDsKKwlwZV9kbWFfY2ZnLmJmLnJlc2V0X3BkciA9IDA7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZSA9IDA7CisJcGVfZG1hX2NmZy5iZi5ib190ZF9lbiA9IDA7CisJd3JpdGVsKHBlX2RtYV9jZmcudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BFX0RNQV9DRkcpOworCXdyaXRlbChkZXYtPnBkcl9wYSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BEUl9CQVNFKTsKKwl3cml0ZWwoZGV2LT5wZHJfcGEsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9SRFJfQkFTRSk7CisJd3JpdGVsKFBQQzRYWF9QUk5HX0NUUkxfQVVUT19FTiwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BSTkdfQ1RSTCk7CisJZ2V0X3JhbmRvbV9ieXRlcygmcmFuZF9udW0sIHNpemVvZihyYW5kX251bSkpOworCXdyaXRlbChyYW5kX251bSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BSTkdfU0VFRF9MKTsKKwlnZXRfcmFuZG9tX2J5dGVzKCZyYW5kX251bSwgc2l6ZW9mKHJhbmRfbnVtKSk7CisJd3JpdGVsKHJhbmRfbnVtLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUFJOR19TRUVEX0gpOworCXJpbmdfc2l6ZS53ID0gMDsKKwlyaW5nX3NpemUuYmYucmluZ19vZmZzZXQgPSBQUEM0WFhfUERfU0laRTsKKwlyaW5nX3NpemUuYmYucmluZ19zaXplICAgPSBQUEM0WFhfTlVNX1BEOworCXdyaXRlbChyaW5nX3NpemUudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1JJTkdfU0laRSk7CisJcmluZ19jdHJsLncgPSAwOworCXdyaXRlbChyaW5nX2N0cmwudywgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1JJTkdfQ1RSTCk7CisJd3JpdGVsKFBQQzRYWF9EQ18zREVTX0VOLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfREVWSUNFX0NUUkwpOworCXdyaXRlbChkZXYtPmdkcl9wYSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0dBVEhfUklOR19CQVNFKTsKKwl3cml0ZWwoZGV2LT5zZHJfcGEsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9TQ0FUX1JJTkdfQkFTRSk7CisJcGFydF9yaW5nX3NpemUudyA9IDA7CisJcGFydF9yaW5nX3NpemUuYmYuc2RyX3NpemUgPSBQUEM0WFhfU0RSX1NJWkU7CisJcGFydF9yaW5nX3NpemUuYmYuZ2RyX3NpemUgPSBQUEM0WFhfR0RSX1NJWkU7CisJd3JpdGVsKHBhcnRfcmluZ19zaXplLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QQVJUX1JJTkdfU0laRSk7CisJd3JpdGVsKFBQQzRYWF9TRF9CVUZGRVJfU0laRSwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX1BBUlRfUklOR19DRkcpOworCWlvX3RocmVzaG9sZC53ID0gMDsKKwlpb190aHJlc2hvbGQuYmYub3V0cHV0X3RocmVzaG9sZCA9IFBQQzRYWF9PVVRQVVRfVEhSRVNIT0xEOworCWlvX3RocmVzaG9sZC5iZi5pbnB1dF90aHJlc2hvbGQgID0gUFBDNFhYX0lOUFVUX1RIUkVTSE9MRDsKKwl3cml0ZWwoaW9fdGhyZXNob2xkLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9JT19USFJFU0hPTEQpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUERSX0JBU0VfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUkRSX0JBU0VfVUFERFIpOworCXdyaXRlbCgwLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfUEtUX1NSQ19VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QS1RfREVTVF9VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9TQV9VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9HQVRIX1JJTkdfQkFTRV9VQUREUik7CisJd3JpdGVsKDAsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9TQ0FUX1JJTkdfQkFTRV9VQUREUik7CisJLyogdW4gcmVzZXQgcGUsc2cgYW5kIHBkciAqLworCXBlX2RtYV9jZmcuYmYucGVfbW9kZSA9IDE7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9zZyA9IDA7CisJcGVfZG1hX2NmZy5iZi5yZXNldF9wZHIgPSAwOworCXBlX2RtYV9jZmcuYmYucmVzZXRfcGUgPSAwOworCXBlX2RtYV9jZmcuYmYuYm9fdGRfZW4gPSAwOworCXdyaXRlbChwZV9kbWFfY2ZnLncsIGRldi0+Y2VfYmFzZSArIENSWVBUTzRYWF9QRV9ETUFfQ0ZHKTsKKwkvKmNsZWFyIGFsbCBwZW5kaW5nIGludGVycnVwdCovCisJd3JpdGVsKFBQQzRYWF9JTlRFUlJVUFRfQ0xSLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0NMUik7CisJd3JpdGVsKFBQQzRYWF9JTlRfREVTQ1JfQ05ULCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0RFU0NSX0NOVCk7CisJd3JpdGVsKFBQQzRYWF9JTlRfREVTQ1JfQ05ULCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0RFU0NSX0NOVCk7CisJd3JpdGVsKFBQQzRYWF9JTlRfQ0ZHLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0NGRyk7CisJd3JpdGVsKFBQQzRYWF9QRF9ET05FX0lOVCwgZGV2LT5jZV9iYXNlICsgQ1JZUFRPNFhYX0lOVF9FTik7Cit9CisKK2ludCBjcnlwdG80eHhfYWxsb2Nfc2Eoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCwgdTMyIHNpemUpCit7CisJY3R4LT5zYV9pbiA9IGRtYV9hbGxvY19jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwgc2l6ZSAqIDQsCisJCQkJCSZjdHgtPnNhX2luX2RtYV9hZGRyLCBHRlBfQVRPTUlDKTsKKwlpZiAoY3R4LT5zYV9pbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWN0eC0+c2Ffb3V0ID0gZG1hX2FsbG9jX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBzaXplICogNCwKKwkJCQkJICZjdHgtPnNhX291dF9kbWFfYWRkciwgR0ZQX0FUT01JQyk7CisJaWYgKGN0eC0+c2Ffb3V0ID09IE5VTEwpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBjdHgtPnNhX2xlbiAqIDQsCisJCQkJICBjdHgtPnNhX2luLCBjdHgtPnNhX2luX2RtYV9hZGRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGN0eC0+c2FfaW4sIDAsIHNpemUgKiA0KTsKKwltZW1zZXQoY3R4LT5zYV9vdXQsIDAsIHNpemUgKiA0KTsKKwljdHgtPnNhX2xlbiA9IHNpemU7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjcnlwdG80eHhfZnJlZV9zYShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCWlmIChjdHgtPnNhX2luICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLCBjdHgtPnNhX2xlbiAqIDQsCisJCQkJICBjdHgtPnNhX2luLCBjdHgtPnNhX2luX2RtYV9hZGRyKTsKKwlpZiAoY3R4LT5zYV9vdXQgIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoY3R4LT5kZXYtPmNvcmVfZGV2LT5kZXZpY2UsIGN0eC0+c2FfbGVuICogNCwKKwkJCQkgIGN0eC0+c2Ffb3V0LCBjdHgtPnNhX291dF9kbWFfYWRkcik7CisKKwljdHgtPnNhX2luX2RtYV9hZGRyID0gMDsKKwljdHgtPnNhX291dF9kbWFfYWRkciA9IDA7CisJY3R4LT5zYV9sZW4gPSAwOworfQorCit1MzIgY3J5cHRvNHh4X2FsbG9jX3N0YXRlX3JlY29yZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCWN0eC0+c3RhdGVfcmVjb3JkID0gZG1hX2FsbG9jX2NvaGVyZW50KGN0eC0+ZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCXNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSwKKwkJCQkmY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIsIEdGUF9BVE9NSUMpOworCWlmICghY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChjdHgtPnN0YXRlX3JlY29yZCwgMCwgc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGNyeXB0bzR4eF9mcmVlX3N0YXRlX3JlY29yZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCWlmIChjdHgtPnN0YXRlX3JlY29yZCAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChjdHgtPmRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIHNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSwKKwkJCQkgIGN0eC0+c3RhdGVfcmVjb3JkLAorCQkJCSAgY3R4LT5zdGF0ZV9yZWNvcmRfZG1hX2FkZHIpOworCWN0eC0+c3RhdGVfcmVjb3JkX2RtYV9hZGRyID0gMDsKK30KKworLyoqCisgKiBhbGxvYyBtZW1vcnkgZm9yIHRoZSBnYXRoZXIgcmluZworICogbm8gbmVlZCB0byBhbGxvYyBidWYgZm9yIHRoZSByaW5nCisgKiBnZHJfdGFpbCwgZ2RyX2hlYWQgYW5kIGdkcl9jb3VudCBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhpcyBmdW5jdGlvbgorICovCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9idWlsZF9wZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvOworCWRldi0+cGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIFBQQzRYWF9OVU1fUEQsCisJCQkJICAgICAgJmRldi0+cGRyX3BhLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+cGRyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+cGRyX3VpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSAqIFBQQzRYWF9OVU1fUEQsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnBkcl91aW5mbykgeworCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIFBQQzRYWF9OVU1fUEQsCisJCQkJICBkZXYtPnBkciwKKwkJCQkgIGRldi0+cGRyX3BhKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChkZXYtPnBkciwgMCwgIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogUFBDNFhYX05VTV9QRCk7CisJZGV2LT5zaGFkb3dfc2FfcG9vbCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICAgMjU2ICogUFBDNFhYX05VTV9QRCwKKwkJCQkgICAmZGV2LT5zaGFkb3dfc2FfcG9vbF9wYSwKKwkJCQkgICBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+c2hhZG93X3NhX3Bvb2wpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2LT5zaGFkb3dfc3JfcG9vbCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkgc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpICogUFBDNFhYX05VTV9QRCwKKwkJCSAmZGV2LT5zaGFkb3dfc3JfcG9vbF9wYSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPnNoYWRvd19zcl9wb29sKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmb3IgKGkgPSAwOyBpIDwgUFBDNFhYX05VTV9QRDsgaSsrKSB7CisJCXBkX3VpbmZvID0gKHN0cnVjdCBwZF91aW5mbyAqKSAoZGV2LT5wZHJfdWluZm8gKworCQkJCQkJc2l6ZW9mKHN0cnVjdCBwZF91aW5mbykgKiBpKTsKKworCQkvKiBhbGxvYyAyNTYgYnl0ZXMgd2hpY2ggaXMgZW5vdWdoIGZvciBhbnkga2luZCBvZiBkeW5hbWljIHNhICovCisJCXBkX3VpbmZvLT5zYV92YSA9IGRldi0+c2hhZG93X3NhX3Bvb2wgKyAyNTYgKiBpOworCQlwZF91aW5mby0+c2FfcGEgPSBkZXYtPnNoYWRvd19zYV9wb29sX3BhICsgMjU2ICogaTsKKworCQkvKiBhbGxvYyBzdGF0ZSByZWNvcmQgKi8KKwkJcGRfdWluZm8tPnNyX3ZhID0gZGV2LT5zaGFkb3dfc3JfcG9vbCArCisJCSAgICBzaXplb2Yoc3RydWN0IHNhX3N0YXRlX3JlY29yZCkgKiBpOworCQlwZF91aW5mby0+c3JfcGEgPSBkZXYtPnNoYWRvd19zcl9wb29sX3BhICsKKwkJICAgIHNpemVvZihzdHJ1Y3Qgc2Ffc3RhdGVfcmVjb3JkKSAqIGk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9kZXN0cm95X3BkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPnBkciAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBzaXplb2Yoc3RydWN0IGNlX3BkKSAqIFBQQzRYWF9OVU1fUEQsCisJCQkJICBkZXYtPnBkciwgZGV2LT5wZHJfcGEpOworCWlmIChkZXYtPnNoYWRvd19zYV9wb29sKQorCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsIDI1NiAqIFBQQzRYWF9OVU1fUEQsCisJCQkJICBkZXYtPnNoYWRvd19zYV9wb29sLCBkZXYtPnNoYWRvd19zYV9wb29sX3BhKTsKKwlpZiAoZGV2LT5zaGFkb3dfc3JfcG9vbCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJc2l6ZW9mKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQpICogUFBDNFhYX05VTV9QRCwKKwkJCWRldi0+c2hhZG93X3NyX3Bvb2wsIGRldi0+c2hhZG93X3NyX3Bvb2xfcGEpOworCisJa2ZyZWUoZGV2LT5wZHJfdWluZm8pOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9nZXRfcGRfZnJvbV9wZHJfbm9sb2NrKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJdTMyIHJldHZhbDsKKwl1MzIgdG1wOworCisJcmV0dmFsID0gZGV2LT5wZHJfaGVhZDsKKwl0bXAgPSAoZGV2LT5wZHJfaGVhZCArIDEpICUgUFBDNFhYX05VTV9QRDsKKworCWlmICh0bXAgPT0gZGV2LT5wZHJfdGFpbCkKKwkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCisJZGV2LT5wZHJfaGVhZCA9IHRtcDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB1MzIgY3J5cHRvNHh4X3B1dF9wZF90b19wZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwgdTMyIGlkeCkKK3sKKwlzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwZF91aW5mbyA9IChzdHJ1Y3QgcGRfdWluZm8gKikoZGV2LT5wZHJfdWluZm8gKworCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSAqIGlkeCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZGV2LT5wZHJfdGFpbCAhPSBQUEM0WFhfTEFTVF9QRCkKKwkJZGV2LT5wZHJfdGFpbCsrOworCWVsc2UKKwkJZGV2LT5wZHJfdGFpbCA9IDA7CisJcGRfdWluZm8tPnN0YXRlID0gUERfRU5UUllfRlJFRTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjZV9wZCAqY3J5cHRvNHh4X2dldF9wZHAoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgZG1hX2FkZHJfdCAqcGRfZG1hLCB1MzIgaWR4KQoreworCSpwZF9kbWEgPSBkZXYtPnBkcl9wYSArIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogaWR4OworCisJcmV0dXJuIGRldi0+cGRyICsgc2l6ZW9mKHN0cnVjdCBjZV9wZCkgKiBpZHg7Cit9CisKKy8qKgorICogYWxsb2MgbWVtb3J5IGZvciB0aGUgZ2F0aGVyIHJpbmcKKyAqIG5vIG5lZWQgdG8gYWxsb2MgYnVmIGZvciB0aGUgcmluZworICogZ2RyX3RhaWwsIGdkcl9oZWFkIGFuZCBnZHJfY291bnQgYXJlIGluaXRpYWxpemVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAqLworc3RhdGljIHUzMiBjcnlwdG80eHhfYnVpbGRfZ2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJZGV2LT5nZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LT5jb3JlX2Rldi0+ZGV2aWNlLAorCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgY2VfZ2QpICogUFBDNFhYX05VTV9HRCwKKwkJCQkgICAgICAmZGV2LT5nZHJfcGEsIEdGUF9BVE9NSUMpOworCWlmICghZGV2LT5nZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KGRldi0+Z2RyLCAwLCBzaXplb2Yoc3RydWN0IGNlX2dkKSAqIFBQQzRYWF9OVU1fR0QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG80eHhfZGVzdHJveV9nZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkgIHNpemVvZihzdHJ1Y3QgY2VfZ2QpICogUFBDNFhYX05VTV9HRCwKKwkJCSAgZGV2LT5nZHIsIGRldi0+Z2RyX3BhKTsKK30KKworLyoKKyAqIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKiBwcmVlbXB0aW9uIG9yIGludGVycnVwdCBtdXN0IGJlIGRpc2FibGVkCisgKi8KK3UzMiBjcnlwdG80eHhfZ2V0X25fZ2Qoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwgaW50IG4pCit7CisJdTMyIHJldHZhbDsKKwl1MzIgdG1wOworCWlmIChuID49IFBQQzRYWF9OVU1fR0QpCisJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKworCXJldHZhbCA9IGRldi0+Z2RyX2hlYWQ7CisJdG1wID0gKGRldi0+Z2RyX2hlYWQgKyBuKSAlIFBQQzRYWF9OVU1fR0Q7CisJaWYgKGRldi0+Z2RyX2hlYWQgPiBkZXYtPmdkcl90YWlsKSB7CisJCWlmICh0bXAgPCBkZXYtPmdkcl9oZWFkICYmIHRtcCA+PSBkZXYtPmdkcl90YWlsKQorCQkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCX0gZWxzZSBpZiAoZGV2LT5nZHJfaGVhZCA8IGRldi0+Z2RyX3RhaWwpIHsKKwkJaWYgKHRtcCA8IGRldi0+Z2RyX2hlYWQgfHwgdG1wID49IGRldi0+Z2RyX3RhaWwpCisJCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisJfQorCWRldi0+Z2RyX2hlYWQgPSB0bXA7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9wdXRfZ2RfdG9fZ2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKGRldi0+Z2RyX3RhaWwgPT0gZGV2LT5nZHJfaGVhZCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmNvcmVfZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCWlmIChkZXYtPmdkcl90YWlsICE9IFBQQzRYWF9MQVNUX0dEKQorCQlkZXYtPmdkcl90YWlsKys7CisJZWxzZQorCQlkZXYtPmdkcl90YWlsID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZV9nZCAqY3J5cHRvNHh4X2dldF9nZHAoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgZG1hX2FkZHJfdCAqZ2RfZG1hLCB1MzIgaWR4KQoreworCSpnZF9kbWEgPSBkZXYtPmdkcl9wYSArIHNpemVvZihzdHJ1Y3QgY2VfZ2QpICogaWR4OworCisJcmV0dXJuIChzdHJ1Y3QgY2VfZ2QgKikgKGRldi0+Z2RyICsgc2l6ZW9mKHN0cnVjdCBjZV9nZCkgKiBpZHgpOworfQorCisvKioKKyAqIGFsbG9jIG1lbW9yeSBmb3IgdGhlIHNjYXR0ZXIgcmluZworICogbmVlZCB0byBhbGxvYyBidWYgZm9yIHRoZSByaW5nCisgKiBzZHJfdGFpbCwgc2RyX2hlYWQgYW5kIHNkcl9jb3VudCBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhpcyBmdW5jdGlvbgorICovCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9idWlsZF9zZHIoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY2Vfc2QgKnNkX2FycmF5OworCisJLyogYWxsb2MgbWVtb3J5IGZvciBzY2F0dGVyIGRlc2NyaXB0b3IgcmluZyAqLworCWRldi0+c2RyID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGNlX3NkKSAqIFBQQzRYWF9OVU1fU0QsCisJCQkJICAgICAgJmRldi0+c2RyX3BhLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRldi0+c2RyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSA9IFBQQzRYWF9TRF9CVUZGRVJfU0laRTsKKwlkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhID0KKwkJZG1hX2FsbG9jX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCWRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSAqIFBQQzRYWF9OVU1fU0QsCisJCQkmZGV2LT5zY2F0dGVyX2J1ZmZlcl9wYSwgR0ZQX0FUT01JQyk7CisJaWYgKCFkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhKSB7CisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgY2Vfc2QpICogUFBDNFhYX05VTV9TRCwKKwkJCQkgIGRldi0+c2RyLCBkZXYtPnNkcl9wYSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNkX2FycmF5ID0gZGV2LT5zZHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgUFBDNFhYX05VTV9TRDsgaSsrKSB7CisJCXNkX2FycmF5W2ldLnB0ciA9IGRldi0+c2NhdHRlcl9idWZmZXJfcGEgKworCQkJCSAgZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplICogaTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2Rlc3Ryb3lfc2RyKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYpCit7CisJaWYgKGRldi0+c2RyICE9IE5VTEwpCisJCWRtYV9mcmVlX2NvaGVyZW50KGRldi0+Y29yZV9kZXYtPmRldmljZSwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgY2Vfc2QpICogUFBDNFhYX05VTV9TRCwKKwkJCQkgIGRldi0+c2RyLCBkZXYtPnNkcl9wYSk7CisKKwlpZiAoZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSAhPSBOVUxMKQorCQlkbWFfZnJlZV9jb2hlcmVudChkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJICBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKiBQUEM0WFhfTlVNX1NELAorCQkJCSAgZGV2LT5zY2F0dGVyX2J1ZmZlcl92YSwKKwkJCQkgIGRldi0+c2NhdHRlcl9idWZmZXJfcGEpOworfQorCisvKgorICogd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAqIHByZWVtcHRpb24gb3IgaW50ZXJydXB0IG11c3QgYmUgZGlzYWJsZWQKKyAqLworc3RhdGljIHUzMiBjcnlwdG80eHhfZ2V0X25fc2Qoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwgaW50IG4pCit7CisJdTMyIHJldHZhbDsKKwl1MzIgdG1wOworCisJaWYgKG4gPj0gUFBDNFhYX05VTV9TRCkKKwkJcmV0dXJuIEVSSU5HX1dBU19GVUxMOworCisJcmV0dmFsID0gZGV2LT5zZHJfaGVhZDsKKwl0bXAgPSAoZGV2LT5zZHJfaGVhZCArIG4pICUgUFBDNFhYX05VTV9TRDsKKwlpZiAoZGV2LT5zZHJfaGVhZCA+IGRldi0+Z2RyX3RhaWwpIHsKKwkJaWYgKHRtcCA8IGRldi0+c2RyX2hlYWQgJiYgdG1wID49IGRldi0+c2RyX3RhaWwpCisJCQlyZXR1cm4gRVJJTkdfV0FTX0ZVTEw7CisJfSBlbHNlIGlmIChkZXYtPnNkcl9oZWFkIDwgZGV2LT5zZHJfdGFpbCkgeworCQlpZiAodG1wIDwgZGV2LT5zZHJfaGVhZCB8fCB0bXAgPj0gZGV2LT5zZHJfdGFpbCkKKwkJCXJldHVybiBFUklOR19XQVNfRlVMTDsKKwl9IC8qIHRoZSBoZWFkID0gdGFpbCwgb3IgZW1wdHkgY2FzZSBpcyBhbHJlYWR5IHRha2UgY2FyZWQgKi8KKwlkZXYtPnNkcl9oZWFkID0gdG1wOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfcHV0X3NkX3RvX3NkcihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCWlmIChkZXYtPnNkcl90YWlsID09IGRldi0+c2RyX2hlYWQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGRldi0+c2RyX3RhaWwgIT0gUFBDNFhYX0xBU1RfU0QpCisJCWRldi0+c2RyX3RhaWwrKzsKKwllbHNlCisJCWRldi0+c2RyX3RhaWwgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZV9zZCAqY3J5cHRvNHh4X2dldF9zZHAoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgZG1hX2FkZHJfdCAqc2RfZG1hLCB1MzIgaWR4KQoreworCSpzZF9kbWEgPSBkZXYtPnNkcl9wYSArIHNpemVvZihzdHJ1Y3QgY2Vfc2QpICogaWR4OworCisJcmV0dXJuICAoc3RydWN0IGNlX3NkICopKGRldi0+c2RyICsgc2l6ZW9mKHN0cnVjdCBjZV9zZCkgKiBpZHgpOworfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9maWxsX29uZV9wYWdlKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJICAgZG1hX2FkZHJfdCAqYWRkciwgdTMyICpsZW5ndGgsCisJCQkJICAgdTMyICppZHgsIHUzMiAqb2Zmc2V0LCB1MzIgKm5ieXRlcykKK3sKKwl1MzIgbGVuOworCisJaWYgKCpsZW5ndGggPiBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUpIHsKKwkJbWVtY3B5KHBoeXNfdG9fdmlydCgqYWRkciksCisJCQlkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhICsKKwkJCSppZHggKiBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKyAqb2Zmc2V0LAorCQkJZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplKTsKKwkJKm9mZnNldCA9IDA7CisJCSpsZW5ndGggLT0gZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplOworCQkqbmJ5dGVzIC09IGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZTsKKwkJaWYgKCppZHggPT0gUFBDNFhYX0xBU1RfU0QpCisJCQkqaWR4ID0gMDsKKwkJZWxzZQorCQkJKCppZHgpKys7CisJCSphZGRyID0gKmFkZHIgKyAgZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKCpsZW5ndGggPCBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUpIHsKKwkJbWVtY3B5KHBoeXNfdG9fdmlydCgqYWRkciksCisJCQlkZXYtPnNjYXR0ZXJfYnVmZmVyX3ZhICsKKwkJCSppZHggKiBkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgKyAqb2Zmc2V0LCAqbGVuZ3RoKTsKKwkJaWYgKCgqb2Zmc2V0ICsgKmxlbmd0aCkgPT0gZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplKSB7CisJCQlpZiAoKmlkeCA9PSBQUEM0WFhfTEFTVF9TRCkKKwkJCQkqaWR4ID0gMDsKKwkJCWVsc2UKKwkJCQkoKmlkeCkrKzsKKwkJCSpuYnl0ZXMgLT0gKmxlbmd0aDsKKwkJCSpvZmZzZXQgPSAwOworCQl9IGVsc2UgeworCQkJKm5ieXRlcyAtPSAqbGVuZ3RoOworCQkJKm9mZnNldCArPSAqbGVuZ3RoOworCQl9CisKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJbGVuID0gKCpuYnl0ZXMgPD0gZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplKSA/CisJCQkJKCpuYnl0ZXMpIDogZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplOworCQltZW1jcHkocGh5c190b192aXJ0KCphZGRyKSwKKwkJCWRldi0+c2NhdHRlcl9idWZmZXJfdmEgKworCQkJKmlkeCAqIGRldi0+c2NhdHRlcl9idWZmZXJfc2l6ZSArICpvZmZzZXQsCisJCQlsZW4pOworCQkqb2Zmc2V0ID0gMDsKKwkJKm5ieXRlcyAtPSBsZW47CisKKwkJaWYgKCppZHggPT0gUFBDNFhYX0xBU1RfU0QpCisJCQkqaWR4ID0gMDsKKwkJZWxzZQorCQkJKCppZHgpKys7CisKKwkJcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfY29weV9wa3RfdG9fZHN0KHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGNlX3BkICpwZCwKKwkJCQkgICAgICBzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvLAorCQkJCSAgICAgIHUzMiBuYnl0ZXMsCisJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QpCit7CisJZG1hX2FkZHJfdCBhZGRyOworCXUzMiB0aGlzX3NkOworCXUzMiBvZmZzZXQ7CisJdTMyIGxlbjsKKwl1MzIgaTsKKwl1MzIgc2dfbGVuOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisKKwl0aGlzX3NkID0gcGRfdWluZm8tPmZpcnN0X3NkOworCW9mZnNldCA9IDA7CisJaSA9IDA7CisKKwl3aGlsZSAobmJ5dGVzKSB7CisJCXNnID0gJmRzdFtpXTsKKwkJc2dfbGVuID0gc2ctPmxlbmd0aDsKKwkJYWRkciA9IGRtYV9tYXBfcGFnZShkZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNnX3BhZ2Uoc2cpLAorCQkJCXNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCisJCWlmIChvZmZzZXQgPT0gMCkgeworCQkJbGVuID0gKG5ieXRlcyA8PSBzZy0+bGVuZ3RoKSA/IG5ieXRlcyA6IHNnLT5sZW5ndGg7CisJCQl3aGlsZSAoY3J5cHRvNHh4X2ZpbGxfb25lX3BhZ2UoZGV2LCAmYWRkciwgJmxlbiwKKwkJCQkmdGhpc19zZCwgJm9mZnNldCwgJm5ieXRlcykpCisJCQkJOworCQkJaWYgKCFuYnl0ZXMpCisJCQkJcmV0dXJuOworCQkJaSsrOworCQl9IGVsc2UgeworCQkJbGVuID0gKG5ieXRlcyA8PSAoZGV2LT5zY2F0dGVyX2J1ZmZlcl9zaXplIC0gb2Zmc2V0KSkgPworCQkJCW5ieXRlcyA6IChkZXYtPnNjYXR0ZXJfYnVmZmVyX3NpemUgLSBvZmZzZXQpOworCQkJbGVuID0gKHNnLT5sZW5ndGggPCBsZW4pID8gc2ctPmxlbmd0aCA6IGxlbjsKKwkJCXdoaWxlIChjcnlwdG80eHhfZmlsbF9vbmVfcGFnZShkZXYsICZhZGRyLCAmbGVuLAorCQkJCQkgICAgICAgJnRoaXNfc2QsICZvZmZzZXQsICZuYnl0ZXMpKQorCQkJCTsKKwkJCWlmICghbmJ5dGVzKQorCQkJCXJldHVybjsKKwkJCXNnX2xlbiAtPSBsZW47CisJCQlpZiAoc2dfbGVuKSB7CisJCQkJYWRkciArPSBsZW47CisJCQkJd2hpbGUgKGNyeXB0bzR4eF9maWxsX29uZV9wYWdlKGRldiwgJmFkZHIsCisJCQkJCSZzZ19sZW4sICZ0aGlzX3NkLCAmb2Zmc2V0LCAmbmJ5dGVzKSkKKwkJCQkJOworCQkJfQorCQkJaSsrOworCQl9CisJfQorfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9jb3B5X2RpZ2VzdF90b19kc3Qoc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbywKKwkJCQkJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKnNhID0gKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luOworCXN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQgKnN0YXRlX3JlY29yZCA9CisJCQkJKHN0cnVjdCBzYV9zdGF0ZV9yZWNvcmQgKikgcGRfdWluZm8tPnNyX3ZhOworCisJaWYgKHNhLT5zYV9jb21tYW5kXzAuYmYuaGFzaF9hbGcgPT0gU0FfSEFTSF9BTEdfU0hBMSkgeworCQltZW1jcHkoKHZvaWQgKikgcGRfdWluZm8tPmRlc3RfdmEsIHN0YXRlX3JlY29yZC0+c2F2ZV9kaWdlc3QsCisJCSAgICAgICBTQV9IQVNIX0FMR19TSEExX0RJR0VTVF9TSVpFKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X3JldF9zZ19kZXNjKHN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgcGRfdWluZm8gKnBkX3VpbmZvKQoreworCWludCBpOworCWlmIChwZF91aW5mby0+bnVtX2dkKSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZF91aW5mby0+bnVtX2dkOyBpKyspCisJCQljcnlwdG80eHhfcHV0X2dkX3RvX2dkcihkZXYpOworCQlwZF91aW5mby0+Zmlyc3RfZ2QgPSAweGZmZmZmZmZmOworCQlwZF91aW5mby0+bnVtX2dkID0gMDsKKwl9CisJaWYgKHBkX3VpbmZvLT5udW1fc2QpIHsKKwkJZm9yIChpID0gMDsgaSA8IHBkX3VpbmZvLT5udW1fc2Q7IGkrKykKKwkJCWNyeXB0bzR4eF9wdXRfc2RfdG9fc2RyKGRldik7CisKKwkJcGRfdWluZm8tPmZpcnN0X3NkID0gMHhmZmZmZmZmZjsKKwkJcGRfdWluZm8tPm51bV9zZCA9IDA7CisJfQorfQorCitzdGF0aWMgdTMyIGNyeXB0bzR4eF9hYmxrY2lwaGVyX2RvbmUoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8sCisJCQkJICAgICBzdHJ1Y3QgY2VfcGQgKnBkKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHg7CisJc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqYWJsa19yZXE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3Q7CisJZG1hX2FkZHJfdCBhZGRyOworCisJYWJsa19yZXEgPSBhYmxrY2lwaGVyX3JlcXVlc3RfY2FzdChwZF91aW5mby0+YXN5bmNfcmVxKTsKKwljdHggID0gY3J5cHRvX3RmbV9jdHgoYWJsa19yZXEtPmJhc2UudGZtKTsKKworCWlmIChwZF91aW5mby0+dXNpbmdfc2QpIHsKKwkJY3J5cHRvNHh4X2NvcHlfcGt0X3RvX2RzdChkZXYsIHBkLCBwZF91aW5mbywgYWJsa19yZXEtPm5ieXRlcywKKwkJCQkJICBhYmxrX3JlcS0+ZHN0KTsKKwl9IGVsc2UgeworCQlkc3QgPSBwZF91aW5mby0+ZGVzdF92YTsKKwkJYWRkciA9IGRtYV9tYXBfcGFnZShkZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNnX3BhZ2UoZHN0KSwKKwkJCQkgICAgZHN0LT5vZmZzZXQsIGRzdC0+bGVuZ3RoLCBETUFfRlJPTV9ERVZJQ0UpOworCX0KKwljcnlwdG80eHhfcmV0X3NnX2Rlc2MoZGV2LCBwZF91aW5mbyk7CisJaWYgKGFibGtfcmVxLT5iYXNlLmNvbXBsZXRlICE9IE5VTEwpCisJCWFibGtfcmVxLT5iYXNlLmNvbXBsZXRlKCZhYmxrX3JlcS0+YmFzZSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfYWhhc2hfZG9uZShzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8pCit7CisJc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eDsKKwlzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqYWhhc2hfcmVxOworCisJYWhhc2hfcmVxID0gYWhhc2hfcmVxdWVzdF9jYXN0KHBkX3VpbmZvLT5hc3luY19yZXEpOworCWN0eCAgPSBjcnlwdG9fdGZtX2N0eChhaGFzaF9yZXEtPmJhc2UudGZtKTsKKworCWNyeXB0bzR4eF9jb3B5X2RpZ2VzdF90b19kc3QocGRfdWluZm8sCisJCQkJICAgICBjcnlwdG9fdGZtX2N0eChhaGFzaF9yZXEtPmJhc2UudGZtKSk7CisJY3J5cHRvNHh4X3JldF9zZ19kZXNjKGRldiwgcGRfdWluZm8pOworCS8qIGNhbGwgdXNlciBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB4ICovCisJaWYgKGFoYXNoX3JlcS0+YmFzZS5jb21wbGV0ZSAhPSBOVUxMKQorCQlhaGFzaF9yZXEtPmJhc2UuY29tcGxldGUoJmFoYXNoX3JlcS0+YmFzZSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBjcnlwdG80eHhfcGRfZG9uZShzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2LCB1MzIgaWR4KQoreworCXN0cnVjdCBjZV9wZCAqcGQ7CisJc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbzsKKworCXBkID0gIGRldi0+cGRyICsgc2l6ZW9mKHN0cnVjdCBjZV9wZCkqaWR4OworCXBkX3VpbmZvID0gZGV2LT5wZHJfdWluZm8gKyBzaXplb2Yoc3RydWN0IHBkX3VpbmZvKSppZHg7CisJaWYgKGNyeXB0b190Zm1fYWxnX3R5cGUocGRfdWluZm8tPmFzeW5jX3JlcS0+dGZtKSA9PQorCQkJQ1JZUFRPX0FMR19UWVBFX0FCTEtDSVBIRVIpCisJCXJldHVybiBjcnlwdG80eHhfYWJsa2NpcGhlcl9kb25lKGRldiwgcGRfdWluZm8sIHBkKTsKKwllbHNlCisJCXJldHVybiBjcnlwdG80eHhfYWhhc2hfZG9uZShkZXYsIHBkX3VpbmZvKTsKK30KKworLyoqCisgKiBOb3RlOiBPbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvcHkgaXRlbXMgdGhhdCBpcyB3b3JkIGFsaWduZWQuCisgKi8KK3ZvaWQgY3J5cHRvNHh4X21lbWNweV9sZSh1bnNpZ25lZCBpbnQgKmRzdCwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkgaW50IGxlbikKK3sKKwl1OCAqdG1wOworCWZvciAoOyBsZW4gPj0gNDsgYnVmICs9IDQsIGxlbiAtPSA0KQorCQkqZHN0KysgPSBjcHVfdG9fbGUzMigqKHVuc2lnbmVkIGludCAqKSBidWYpOworCisJdG1wID0gKHU4ICopZHN0OworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAzOgorCQkqdG1wKysgPSAwOworCQkqdG1wKysgPSAqKGJ1ZisyKTsKKwkJKnRtcCsrID0gKihidWYrMSk7CisJCSp0bXArKyA9ICpidWY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gKihidWYrMSk7CisJCSp0bXArKyA9ICpidWY7CisJCWJyZWFrOworCWNhc2UgMToKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gMDsKKwkJKnRtcCsrID0gKmJ1ZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfc3RvcF9hbGwoc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSAqY29yZV9kZXYpCit7CisJY3J5cHRvNHh4X2Rlc3Ryb3lfcGRyKGNvcmVfZGV2LT5kZXYpOworCWNyeXB0bzR4eF9kZXN0cm95X2dkcihjb3JlX2Rldi0+ZGV2KTsKKwljcnlwdG80eHhfZGVzdHJveV9zZHIoY29yZV9kZXYtPmRldik7CisJZGV2X3NldF9kcnZkYXRhKGNvcmVfZGV2LT5kZXZpY2UsIE5VTEwpOworCWlvdW5tYXAoY29yZV9kZXYtPmRldi0+Y2VfYmFzZSk7CisJa2ZyZWUoY29yZV9kZXYtPmRldik7CisJa2ZyZWUoY29yZV9kZXYpOworfQorCit2b2lkIGNyeXB0bzR4eF9yZXR1cm5fcGQoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldiwKKwkJCSB1MzIgcGRfZW50cnksIHN0cnVjdCBjZV9wZCAqcGQsCisJCQkgc3RydWN0IHBkX3VpbmZvICpwZF91aW5mbykKK3sKKwkvKiBpcnEgc2hvdWxkIGJlIGFscmVhZHkgZGlzYWJsZWQgKi8KKwlkZXYtPnBkcl9oZWFkID0gcGRfZW50cnk7CisJcGQtPnBkX2N0bC53ID0gMDsKKwlwZC0+cGRfY3RsX2xlbi53ID0gMDsKKwlwZF91aW5mby0+c3RhdGUgPSBQRF9FTlRSWV9GUkVFOworfQorCisvKgorICogZGVyaXZlIG51bWJlciBvZiBlbGVtZW50cyBpbiBzY2F0dGVybGlzdAorICogU2hhbWxlc3NseSBjb3B5IGZyb20gdGFsaXRvcy5jCisgKi8KK3N0YXRpYyBpbnQgZ2V0X3NnX2NvdW50KHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfbGlzdCwgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gc2dfbGlzdDsKKwlpbnQgc2dfbmVudHMgPSAwOworCisJd2hpbGUgKG5ieXRlcykgeworCQlzZ19uZW50cysrOworCQlpZiAoc2ctPmxlbmd0aCA+IG5ieXRlcykKKwkJCWJyZWFrOworCQluYnl0ZXMgLT0gc2ctPmxlbmd0aDsKKwkJc2cgPSBzZ19uZXh0KHNnKTsKKwl9CisKKwlyZXR1cm4gc2dfbmVudHM7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X25leHRfZ2QodTMyIGN1cnJlbnQpCit7CisJaWYgKGN1cnJlbnQgIT0gUFBDNFhYX0xBU1RfR0QpCisJCXJldHVybiBjdXJyZW50ICsgMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGdldF9uZXh0X3NkKHUzMiBjdXJyZW50KQoreworCWlmIChjdXJyZW50ICE9IFBQQzRYWF9MQVNUX1NEKQorCQlyZXR1cm4gY3VycmVudCArIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwordTMyIGNyeXB0bzR4eF9idWlsZF9wZChzdHJ1Y3QgY3J5cHRvX2FzeW5jX3JlcXVlc3QgKnJlcSwKKwkJICAgICAgIHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgsCisJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFsZW4sCisJCSAgICAgICB2b2lkICppdiwgdTMyIGl2X2xlbikKK3sKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2ID0gY3R4LT5kZXY7CisJZG1hX2FkZHJfdCBhZGRyLCBwZF9kbWEsIHNkX2RtYSwgZ2RfZG1hOworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCAqc2E7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3QgY2VfZ2QgKmdkOworCXN0cnVjdCBjZV9wZCAqcGQ7CisJdTMyIG51bV9nZCwgbnVtX3NkOworCXUzMiBmc3RfZ2QgPSAweGZmZmZmZmZmOworCXUzMiBmc3Rfc2QgPSAweGZmZmZmZmZmOworCXUzMiBwZF9lbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm8gPSBOVUxMOworCXVuc2lnbmVkIGludCBuYnl0ZXMgPSBkYXRhbGVuLCBpZHg7CisJdW5zaWduZWQgaW50IGl2bGVuID0gMDsKKwl1MzIgZ2RfaWR4ID0gMDsKKworCS8qIGZpZ3VyZSBob3cgbWFueSBnZCBpcyBuZWVkZWQgKi8KKwludW1fZ2QgPSBnZXRfc2dfY291bnQoc3JjLCBkYXRhbGVuKTsKKwlpZiAobnVtX2dkID09IDEpCisJCW51bV9nZCA9IDA7CisKKwkvKiBmaWd1cmUgaG93IG1hbnkgc2QgaXMgbmVlZGVkICovCisJaWYgKHNnX2lzX2xhc3QoZHN0KSB8fCBjdHgtPmlzX2hhc2gpIHsKKwkJbnVtX3NkID0gMDsKKwl9IGVsc2UgeworCQlpZiAoZGF0YWxlbiA+IFBQQzRYWF9TRF9CVUZGRVJfU0laRSkgeworCQkJbnVtX3NkID0gZGF0YWxlbiAvIFBQQzRYWF9TRF9CVUZGRVJfU0laRTsKKwkJCWlmIChkYXRhbGVuICUgUFBDNFhYX1NEX0JVRkZFUl9TSVpFKQorCQkJCW51bV9zZCsrOworCQl9IGVsc2UgeworCQkJbnVtX3NkID0gMTsKKwkJfQorCX0KKworCS8qCisJICogVGhlIGZvbGxvdyBzZWN0aW9uIG9mIGNvZGUgbmVlZHMgdG8gYmUgcHJvdGVjdGVkCisJICogVGhlIGdhdGhlciByaW5nIGFuZCBzY2F0dGVyIHJpbmcgbmVlZHMgdG8gYmUgY29uc2VjdXRpdmUKKwkgKiBJbiBjYXNlIG9mIHJ1biBvdXQgb2YgYW55IGtpbmQgb2YgZGVzY3JpcHRvciwgdGhlIGRlc2NyaXB0b3IKKwkgKiBhbHJlYWR5IGdvdCBtdXN0IGJlIHJldHVybiB0aGUgb3JpZ2luYWwgcGxhY2UuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAobnVtX2dkKSB7CisJCWZzdF9nZCA9IGNyeXB0bzR4eF9nZXRfbl9nZChkZXYsIG51bV9nZCk7CisJCWlmIChmc3RfZ2QgPT0gRVJJTkdfV0FTX0ZVTEwpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJfQorCWlmIChudW1fc2QpIHsKKwkJZnN0X3NkID0gY3J5cHRvNHh4X2dldF9uX3NkKGRldiwgbnVtX3NkKTsKKwkJaWYgKGZzdF9zZCA9PSBFUklOR19XQVNfRlVMTCkgeworCQkJaWYgKG51bV9nZCkKKwkJCQlkZXYtPmdkcl9oZWFkID0gZnN0X2dkOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5jb3JlX2Rldi0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwl9CisJcGRfZW50cnkgPSBjcnlwdG80eHhfZ2V0X3BkX2Zyb21fcGRyX25vbG9jayhkZXYpOworCWlmIChwZF9lbnRyeSA9PSBFUklOR19XQVNfRlVMTCkgeworCQlpZiAobnVtX2dkKQorCQkJZGV2LT5nZHJfaGVhZCA9IGZzdF9nZDsKKwkJaWYgKG51bV9zZCkKKwkJCWRldi0+c2RyX2hlYWQgPSBmc3Rfc2Q7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+Y29yZV9kZXYtPmxvY2ssIGZsYWdzKTsKKworCXBkX3VpbmZvID0gKHN0cnVjdCBwZF91aW5mbyAqKShkZXYtPnBkcl91aW5mbyArCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcGRfdWluZm8pICogcGRfZW50cnkpOworCXBkID0gY3J5cHRvNHh4X2dldF9wZHAoZGV2LCAmcGRfZG1hLCBwZF9lbnRyeSk7CisJcGRfdWluZm8tPmFzeW5jX3JlcSA9IHJlcTsKKwlwZF91aW5mby0+bnVtX2dkID0gbnVtX2dkOworCXBkX3VpbmZvLT5udW1fc2QgPSBudW1fc2Q7CisKKwlpZiAoaXZfbGVuIHx8IGN0eC0+aXNfaGFzaCkgeworCQlpdmxlbiA9IGl2X2xlbjsKKwkJcGQtPnNhID0gcGRfdWluZm8tPnNhX3BhOworCQlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgcGRfdWluZm8tPnNhX3ZhOworCQlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpCisJCQltZW1jcHkoc2EsIGN0eC0+c2FfaW4sIGN0eC0+c2FfbGVuICogNCk7CisJCWVsc2UKKwkJCW1lbWNweShzYSwgY3R4LT5zYV9vdXQsIGN0eC0+c2FfbGVuICogNCk7CisKKwkJbWVtY3B5KCh2b2lkICopIHNhICsgY3R4LT5vZmZzZXRfdG9fc3JfcHRyLAorCQkJJnBkX3VpbmZvLT5zcl9wYSwgNCk7CisKKwkJaWYgKGl2X2xlbikKKwkJCWNyeXB0bzR4eF9tZW1jcHlfbGUocGRfdWluZm8tPnNyX3ZhLCBpdiwgaXZfbGVuKTsKKwl9IGVsc2UgeworCQlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpIHsKKwkJCXBkLT5zYSA9IGN0eC0+c2FfaW5fZG1hX2FkZHI7CisJCQlzYSA9IChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9pbjsKKwkJfSBlbHNlIHsKKwkJCXBkLT5zYSA9IGN0eC0+c2Ffb3V0X2RtYV9hZGRyOworCQkJc2EgPSAoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2Ffb3V0OworCQl9CisJfQorCXBkLT5zYV9sZW4gPSBjdHgtPnNhX2xlbjsKKwlpZiAobnVtX2dkKSB7CisJCS8qIGdldCBmaXJzdCBnZCB3ZSBhcmUgZ29pbmcgdG8gdXNlICovCisJCWdkX2lkeCA9IGZzdF9nZDsKKwkJcGRfdWluZm8tPmZpcnN0X2dkID0gZnN0X2dkOworCQlwZF91aW5mby0+bnVtX2dkID0gbnVtX2dkOworCQlnZCA9IGNyeXB0bzR4eF9nZXRfZ2RwKGRldiwgJmdkX2RtYSwgZ2RfaWR4KTsKKwkJcGQtPnNyYyA9IGdkX2RtYTsKKwkJLyogZW5hYmxlIGdhdGhlciAqLworCQlzYS0+c2FfY29tbWFuZF8wLmJmLmdhdGhlciA9IDE7CisJCWlkeCA9IDA7CisJCXNyYyA9ICZzcmNbMF07CisJCS8qIHdhbGsgdGhlIHNnLCBhbmQgc2V0dXAgZ2F0aGVyIGFycmF5ICovCisJCXdoaWxlIChuYnl0ZXMpIHsKKwkJCXNnID0gJnNyY1tpZHhdOworCQkJYWRkciA9IGRtYV9tYXBfcGFnZShkZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNnX3BhZ2Uoc2cpLAorCQkJCSAgICBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKKwkJCWdkLT5wdHIgPSBhZGRyOworCQkJZ2QtPmN0bF9sZW4ubGVuID0gc2ctPmxlbmd0aDsKKwkJCWdkLT5jdGxfbGVuLmRvbmUgPSAwOworCQkJZ2QtPmN0bF9sZW4ucmVhZHkgPSAxOworCQkJaWYgKHNnLT5sZW5ndGggPj0gbmJ5dGVzKQorCQkJCWJyZWFrOworCQkJbmJ5dGVzIC09IHNnLT5sZW5ndGg7CisJCQlnZF9pZHggPSBnZXRfbmV4dF9nZChnZF9pZHgpOworCQkJZ2QgPSBjcnlwdG80eHhfZ2V0X2dkcChkZXYsICZnZF9kbWEsIGdkX2lkeCk7CisJCQlpZHgrKzsKKwkJfQorCX0gZWxzZSB7CisJCXBkLT5zcmMgPSAodTMyKWRtYV9tYXBfcGFnZShkZXYtPmNvcmVfZGV2LT5kZXZpY2UsIHNnX3BhZ2Uoc3JjKSwKKwkJCQlzcmMtPm9mZnNldCwgc3JjLT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOworCQkvKgorCQkgKiBEaXNhYmxlIGdhdGhlciBpbiBzYSBjb21tYW5kCisJCSAqLworCQlzYS0+c2FfY29tbWFuZF8wLmJmLmdhdGhlciA9IDA7CisJCS8qCisJCSAqIEluZGljYXRlIGdhdGhlciBhcnJheSBpcyBub3QgdXNlZAorCQkgKi8KKwkJcGRfdWluZm8tPmZpcnN0X2dkID0gMHhmZmZmZmZmZjsKKwkJcGRfdWluZm8tPm51bV9nZCA9IDA7CisJfQorCWlmIChjdHgtPmlzX2hhc2ggfHwgc2dfaXNfbGFzdChkc3QpKSB7CisJCS8qCisJCSAqIHdlIGtub3cgYXBwbGljYXRpb24gZ2l2ZSB1cyBkc3QgYSB3aG9sZSBwaWVjZSBvZiBtZW1vcnkKKwkJICogbm8gbmVlZCB0byB1c2Ugc2NhdHRlciByaW5nLgorCQkgKiBJbiBjYXNlIG9mIGlzX2hhc2gsIHRoZSBpY3YgaXMgYWx3YXlzIGF0IGVuZCBvZiBzcmMgZGF0YS4KKwkJICovCisJCXBkX3VpbmZvLT51c2luZ19zZCA9IDA7CisJCXBkX3VpbmZvLT5maXJzdF9zZCA9IDB4ZmZmZmZmZmY7CisJCXBkX3VpbmZvLT5udW1fc2QgPSAwOworCQlwZF91aW5mby0+ZGVzdF92YSA9IGRzdDsKKwkJc2EtPnNhX2NvbW1hbmRfMC5iZi5zY2F0dGVyID0gMDsKKwkJaWYgKGN0eC0+aXNfaGFzaCkKKwkJCXBkLT5kZXN0ID0gdmlydF90b19waHlzKCh2b2lkICopZHN0KTsKKwkJZWxzZQorCQkJcGQtPmRlc3QgPSAodTMyKWRtYV9tYXBfcGFnZShkZXYtPmNvcmVfZGV2LT5kZXZpY2UsCisJCQkJCXNnX3BhZ2UoZHN0KSwgZHN0LT5vZmZzZXQsCisJCQkJCWRzdC0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgY2Vfc2QgKnNkID0gTlVMTDsKKwkJdTMyIHNkX2lkeCA9IGZzdF9zZDsKKwkJbmJ5dGVzID0gZGF0YWxlbjsKKwkJc2EtPnNhX2NvbW1hbmRfMC5iZi5zY2F0dGVyID0gMTsKKwkJcGRfdWluZm8tPnVzaW5nX3NkID0gMTsKKwkJcGRfdWluZm8tPmRlc3RfdmEgPSBkc3Q7CisJCXBkX3VpbmZvLT5maXJzdF9zZCA9IGZzdF9zZDsKKwkJcGRfdWluZm8tPm51bV9zZCA9IG51bV9zZDsKKwkJc2QgPSBjcnlwdG80eHhfZ2V0X3NkcChkZXYsICZzZF9kbWEsIHNkX2lkeCk7CisJCXBkLT5kZXN0ID0gc2RfZG1hOworCQkvKiBzZXR1cCBzY2F0dGVyIGRlc2NyaXB0b3IgKi8KKwkJc2QtPmN0bC5kb25lID0gMDsKKwkJc2QtPmN0bC5yZHkgPSAxOworCQkvKiBzZC0+cHRyIHNob3VsZCBiZSBzZXR1cCBieSBzZF9pbml0IHJvdXRpbmUqLworCQlpZHggPSAwOworCQlpZiAobmJ5dGVzID49IFBQQzRYWF9TRF9CVUZGRVJfU0laRSkKKwkJCW5ieXRlcyAtPSBQUEM0WFhfU0RfQlVGRkVSX1NJWkU7CisJCWVsc2UKKwkJCW5ieXRlcyA9IDA7CisJCXdoaWxlIChuYnl0ZXMpIHsKKwkJCXNkX2lkeCA9IGdldF9uZXh0X3NkKHNkX2lkeCk7CisJCQlzZCA9IGNyeXB0bzR4eF9nZXRfc2RwKGRldiwgJnNkX2RtYSwgc2RfaWR4KTsKKwkJCS8qIHNldHVwIHNjYXR0ZXIgZGVzY3JpcHRvciAqLworCQkJc2QtPmN0bC5kb25lID0gMDsKKwkJCXNkLT5jdGwucmR5ID0gMTsKKwkJCWlmIChuYnl0ZXMgPj0gUFBDNFhYX1NEX0JVRkZFUl9TSVpFKQorCQkJCW5ieXRlcyAtPSBQUEM0WFhfU0RfQlVGRkVSX1NJWkU7CisJCQllbHNlCisJCQkJLyoKKwkJCQkgKiBTRCBlbnRyeSBjYW4gaG9sZCBQUEM0WFhfU0RfQlVGRkVSX1NJWkUsCisJCQkJICogd2hpY2ggaXMgbW9yZSB0aGFuIG5ieXRlcywgc28gZG9uZS4KKwkJCQkgKi8KKwkJCQluYnl0ZXMgPSAwOworCQl9CisJfQorCisJc2EtPnNhX2NvbW1hbmRfMS5iZi5oYXNoX2NyeXB0b19vZmZzZXQgPSAwOworCXBkLT5wZF9jdGwudyA9IGN0eC0+cGRfY3RsOworCXBkLT5wZF9jdGxfbGVuLncgPSAweDAwNDAwMDAwIHwgKGN0eC0+YnlwYXNzIDw8IDI0KSB8IGRhdGFsZW47CisJcGRfdWluZm8tPnN0YXRlID0gUERfRU5UUllfSU5VU0U7CisJd21iKCk7CisJLyogd3JpdGUgYW55IHZhbHVlIHRvIHB1c2ggZW5naW5lIHRvIHJlYWQgYSBwZCAqLworCXdyaXRlbCgxLCBkZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0RFU0NSX1JEKTsKKwlyZXR1cm4gLUVJTlBST0dSRVNTOworfQorCisvKioKKyAqIEFsZ29yaXRobSBSZWdpc3RyYXRpb24gRnVuY3Rpb25zCisgKi8KK3N0YXRpYyBpbnQgY3J5cHRvNHh4X2FsZ19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IHRmbS0+X19jcnRfYWxnOworCXN0cnVjdCBjcnlwdG80eHhfYWxnICphbWNjX2FsZyA9IGNyeXB0b19hbGdfdG9fY3J5cHRvNHh4X2FsZyhhbGcpOworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3R4LT5kZXYgPSBhbWNjX2FsZy0+ZGV2OworCWN0eC0+c2FfaW4gPSBOVUxMOworCWN0eC0+c2Ffb3V0ID0gTlVMTDsKKwljdHgtPnNhX2luX2RtYV9hZGRyID0gMDsKKwljdHgtPnNhX291dF9kbWFfYWRkciA9IDA7CisJY3R4LT5zYV9sZW4gPSAwOworCisJaWYgKGFsZy0+Y3JhX3R5cGUgPT0gJmNyeXB0b19hYmxrY2lwaGVyX3R5cGUpCisJCXRmbS0+Y3J0X2FibGtjaXBoZXIucmVxc2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCk7CisJZWxzZSBpZiAoYWxnLT5jcmFfdHlwZSA9PSAmY3J5cHRvX2FoYXNoX3R5cGUpCisJCXRmbS0+Y3J0X2FoYXNoLnJlcXNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0bzR4eF9hbGdfZXhpdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJY3J5cHRvNHh4X2ZyZWVfc2EoY3R4KTsKKwljcnlwdG80eHhfZnJlZV9zdGF0ZV9yZWNvcmQoY3R4KTsKK30KKworaW50IGNyeXB0bzR4eF9yZWdpc3Rlcl9hbGcoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKnNlY19kZXYsCisJCQkgICBzdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX2FsZywgaW50IGFycmF5X3NpemUpCit7CisJc3RydWN0IGNyeXB0bzR4eF9hbGcgKmFsZzsKKwlpbnQgaTsKKwlpbnQgcmMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGFycmF5X3NpemU7IGkrKykgeworCQlhbGcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2FsZyksIEdGUF9LRVJORUwpOworCQlpZiAoIWFsZykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWFsZy0+YWxnID0gY3J5cHRvX2FsZ1tpXTsKKwkJSU5JVF9MSVNUX0hFQUQoJmFsZy0+YWxnLmNyYV9saXN0KTsKKwkJaWYgKGFsZy0+YWxnLmNyYV9pbml0ID09IE5VTEwpCisJCQlhbGctPmFsZy5jcmFfaW5pdCA9IGNyeXB0bzR4eF9hbGdfaW5pdDsKKwkJaWYgKGFsZy0+YWxnLmNyYV9leGl0ID09IE5VTEwpCisJCQlhbGctPmFsZy5jcmFfZXhpdCA9IGNyeXB0bzR4eF9hbGdfZXhpdDsKKwkJYWxnLT5kZXYgPSBzZWNfZGV2OworCQlyYyA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZy0+YWxnKTsKKwkJaWYgKHJjKSB7CisJCQlsaXN0X2RlbCgmYWxnLT5lbnRyeSk7CisJCQlrZnJlZShhbGcpOworCQl9IGVsc2UgeworCQkJbGlzdF9hZGRfdGFpbCgmYWxnLT5lbnRyeSwgJnNlY19kZXYtPmFsZ19saXN0KTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjcnlwdG80eHhfdW5yZWdpc3Rlcl9hbGcoc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKnNlY19kZXYpCit7CisJc3RydWN0IGNyeXB0bzR4eF9hbGcgKmFsZywgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhbGcsIHRtcCwgJnNlY19kZXYtPmFsZ19saXN0LCBlbnRyeSkgeworCQlsaXN0X2RlbCgmYWxnLT5lbnRyeSk7CisJCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWxnLT5hbGcpOworCQlrZnJlZShhbGcpOworCX0KK30KKworc3RhdGljIHZvaWQgY3J5cHRvNHh4X2JoX3Rhc2tsZXRfY2IodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IChzdHJ1Y3QgZGV2aWNlICopZGF0YTsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBwZF91aW5mbyAqcGRfdWluZm87CisJc3RydWN0IGNlX3BkICpwZDsKKwl1MzIgdGFpbDsKKworCXdoaWxlIChjb3JlX2Rldi0+ZGV2LT5wZHJfaGVhZCAhPSBjb3JlX2Rldi0+ZGV2LT5wZHJfdGFpbCkgeworCQl0YWlsID0gY29yZV9kZXYtPmRldi0+cGRyX3RhaWw7CisJCXBkX3VpbmZvID0gY29yZV9kZXYtPmRldi0+cGRyX3VpbmZvICsKKwkJCXNpemVvZihzdHJ1Y3QgcGRfdWluZm8pKnRhaWw7CisJCXBkID0gIGNvcmVfZGV2LT5kZXYtPnBkciArIHNpemVvZihzdHJ1Y3QgY2VfcGQpICogdGFpbDsKKwkJaWYgKChwZF91aW5mby0+c3RhdGUgPT0gUERfRU5UUllfSU5VU0UpICYmCisJCQkJICAgcGQtPnBkX2N0bC5iZi5wZV9kb25lICYmCisJCQkJICAgIXBkLT5wZF9jdGwuYmYuaG9zdF9yZWFkeSkgeworCQkJcGQtPnBkX2N0bC5iZi5wZV9kb25lID0gMDsKKwkJCWNyeXB0bzR4eF9wZF9kb25lKGNvcmVfZGV2LT5kZXYsIHRhaWwpOworCQkJY3J5cHRvNHh4X3B1dF9wZF90b19wZHIoY29yZV9kZXYtPmRldiwgdGFpbCk7CisJCQlwZF91aW5mby0+c3RhdGUgPSBQRF9FTlRSWV9GUkVFOworCQl9IGVsc2UgeworCQkJLyogaWYgdGFpbCBub3QgZG9uZSwgYnJlYWsgKi8KKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKioKKyAqIFRvcCBIYWxmIG9mIGlzci4KKyAqLworc3RhdGljIGlycXJldHVybl90IGNyeXB0bzR4eF9jZV9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IChzdHJ1Y3QgZGV2aWNlICopZGF0YTsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKGNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl3cml0ZWwoUFBDNFhYX0lOVEVSUlVQVF9DTFIsCisJICAgICAgIGNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UgKyBDUllQVE80WFhfSU5UX0NMUik7CisJdGFza2xldF9zY2hlZHVsZSgmY29yZV9kZXYtPnRhc2tsZXQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIFN1cHBvcnRlZCBDcnlwdG8gQWxnb3JpdGhtcworICovCitzdHJ1Y3QgY3J5cHRvX2FsZyBjcnlwdG80eHhfYWxnW10gPSB7CisJLyogQ3J5cHRvIEFFUyBtb2RlcyAqLworCXsKKwkJLmNyYV9uYW1lIAk9ICJjYmMoYWVzKSIsCisJCS5jcmFfZHJpdmVyX25hbWUgPSAiY2JjLWFlcy1wcGM0eHgiLAorCQkuY3JhX3ByaW9yaXR5IAk9IENSWVBUTzRYWF9DUllQVE9fUFJJT1JJVFksCisJCS5jcmFfZmxhZ3MgCT0gQ1JZUFRPX0FMR19UWVBFX0FCTEtDSVBIRVIgfCBDUllQVE9fQUxHX0FTWU5DLAorCQkuY3JhX2Jsb2Nrc2l6ZSAJPSBBRVNfQkxPQ0tfU0laRSwKKwkJLmNyYV9jdHhzaXplIAk9IHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2N0eCksCisJCS5jcmFfYWxpZ25tYXNrIAk9IDAsCisJCS5jcmFfdHlwZSAJPSAmY3J5cHRvX2FibGtjaXBoZXJfdHlwZSwKKwkJLmNyYV9tb2R1bGUgCT0gVEhJU19NT0RVTEUsCisJCS5jcmFfdSAJCT0geworCQkJLmFibGtjaXBoZXIgPSB7CisJCQkJLm1pbl9rZXlzaXplIAk9IEFFU19NSU5fS0VZX1NJWkUsCisJCQkJLm1heF9rZXlzaXplIAk9IEFFU19NQVhfS0VZX1NJWkUsCisJCQkJLml2c2l6ZQkJPSBBRVNfSVZfU0laRSwKKwkJCQkuc2V0a2V5IAk9IGNyeXB0bzR4eF9zZXRrZXlfYWVzX2NiYywKKwkJCQkuZW5jcnlwdCAJPSBjcnlwdG80eHhfZW5jcnlwdCwKKwkJCQkuZGVjcnlwdCAJPSBjcnlwdG80eHhfZGVjcnlwdCwKKwkJCX0KKwkJfQorCX0sCisJLyogSGFzaCBTSEExICovCisJeworCQkuY3JhX25hbWUJPSAic2hhMSIsCisJCS5jcmFfZHJpdmVyX25hbWUgPSAic2hhMS1wcGM0eHgiLAorCQkuY3JhX3ByaW9yaXR5CT0gQ1JZUFRPNFhYX0NSWVBUT19QUklPUklUWSwKKwkJLmNyYV9mbGFncwk9IENSWVBUT19BTEdfVFlQRV9BSEFTSCB8IENSWVBUT19BTEdfQVNZTkMsCisJCS5jcmFfYmxvY2tzaXplCT0gU0hBMV9CTE9DS19TSVpFLAorCQkuY3JhX2N0eHNpemUJPSBzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jdHgpLAorCQkuY3JhX2FsaWdubWFzawk9IDAsCisJCS5jcmFfdHlwZQk9ICZjcnlwdG9fYWhhc2hfdHlwZSwKKwkJLmNyYV9pbml0CT0gY3J5cHRvNHh4X3NoYTFfYWxnX2luaXQsCisJCS5jcmFfbW9kdWxlCT0gVEhJU19NT0RVTEUsCisJCS5jcmFfdQkJPSB7CisJCQkuYWhhc2ggPSB7CisJCQkJLmRpZ2VzdHNpemUgCT0gU0hBMV9ESUdFU1RfU0laRSwKKwkJCQkuaW5pdAkJPSBjcnlwdG80eHhfaGFzaF9pbml0LAorCQkJCS51cGRhdGUJCT0gY3J5cHRvNHh4X2hhc2hfdXBkYXRlLAorCQkJCS5maW5hbCAgCT0gY3J5cHRvNHh4X2hhc2hfZmluYWwsCisJCQkJLmRpZ2VzdCAJPSBjcnlwdG80eHhfaGFzaF9kaWdlc3QsCisJCQl9CisJCX0KKwl9LAorfTsKKworLyoqCisgKiBNb2R1bGUgSW5pdGlhbGl6YXRpb24gUm91dGluZQorICovCitzdGF0aWMgaW50IF9faW5pdCBjcnlwdG80eHhfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb2ZkZXYtPmRldjsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldjsKKworCXJjID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShvZmRldi0+bm9kZSwgMCwgJnJlcyk7CisJaWYgKHJjKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiYW1jYyxwcGM0NjBleC1jcnlwdG8iKSkgeworCQltdGRjcmkoU0RSMCwgUFBDNDYwRVhfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQ2MEVYX1NEUjBfU1JTVCkgfCBQUEM0NjBFWF9DRV9SRVNFVCk7CisJCW10ZGNyaShTRFIwLCBQUEM0NjBFWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDYwRVhfU0RSMF9TUlNUKSAmIH5QUEM0NjBFWF9DRV9SRVNFVCk7CisJfSBlbHNlIGlmIChvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLAorCQkJImFtY2MscHBjNDA1ZXgtY3J5cHRvIikpIHsKKwkJbXRkY3JpKFNEUjAsIFBQQzQwNUVYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0MDVFWF9TRFIwX1NSU1QpIHwgUFBDNDA1RVhfQ0VfUkVTRVQpOworCQltdGRjcmkoU0RSMCwgUFBDNDA1RVhfU0RSMF9TUlNULAorCQkgICAgICAgbWZkY3JpKFNEUjAsIFBQQzQwNUVYX1NEUjBfU1JTVCkgJiB+UFBDNDA1RVhfQ0VfUkVTRVQpOworCX0gZWxzZSBpZiAob2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwKKwkJCSJhbWNjLHBwYzQ2MHN4LWNyeXB0byIpKSB7CisJCW10ZGNyaShTRFIwLCBQUEM0NjBTWF9TRFIwX1NSU1QsCisJCSAgICAgICBtZmRjcmkoU0RSMCwgUFBDNDYwU1hfU0RSMF9TUlNUKSB8IFBQQzQ2MFNYX0NFX1JFU0VUKTsKKwkJbXRkY3JpKFNEUjAsIFBQQzQ2MFNYX1NEUjBfU1JTVCwKKwkJICAgICAgIG1mZGNyaShTRFIwLCBQUEM0NjBTWF9TRFIwX1NSU1QpICYgflBQQzQ2MFNYX0NFX1JFU0VUKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkNyeXB0byBGdW5jdGlvbiBOb3Qgc3VwcG9ydGVkIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvcmVfZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNyeXB0bzR4eF9jb3JlX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghY29yZV9kZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgY29yZV9kZXYpOworCWNvcmVfZGV2LT5vZmRldiA9IG9mZGV2OworCWNvcmVfZGV2LT5kZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghY29yZV9kZXYtPmRldikKKwkJZ290byBlcnJfYWxsb2NfZGV2OworCisJY29yZV9kZXYtPmRldi0+Y29yZV9kZXYgPSBjb3JlX2RldjsKKwljb3JlX2Rldi0+ZGV2aWNlID0gZGV2OworCXNwaW5fbG9ja19pbml0KCZjb3JlX2Rldi0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNvcmVfZGV2LT5kZXYtPmFsZ19saXN0KTsKKwlyYyA9IGNyeXB0bzR4eF9idWlsZF9wZHIoY29yZV9kZXYtPmRldik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9idWlsZF9wZHI7CisKKwlyYyA9IGNyeXB0bzR4eF9idWlsZF9nZHIoY29yZV9kZXYtPmRldik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9idWlsZF9nZHI7CisKKwlyYyA9IGNyeXB0bzR4eF9idWlsZF9zZHIoY29yZV9kZXYtPmRldik7CisJaWYgKHJjKQorCQlnb3RvIGVycl9idWlsZF9zZHI7CisKKwkvKiBJbml0IHRhc2tsZXQgZm9yIGJvdHRvbSBoYWxmIHByb2Nlc3NpbmcgKi8KKwl0YXNrbGV0X2luaXQoJmNvcmVfZGV2LT50YXNrbGV0LCBjcnlwdG80eHhfYmhfdGFza2xldF9jYiwKKwkJICAgICAodW5zaWduZWQgbG9uZykgZGV2KTsKKworCS8qIFJlZ2lzdGVyIGZvciBDcnlwdG8gaXNyLCBDcnlwdG8gRW5naW5lIElSUSAqLworCWNvcmVfZGV2LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgMCk7CisJcmMgPSByZXF1ZXN0X2lycShjb3JlX2Rldi0+aXJxLCBjcnlwdG80eHhfY2VfaW50ZXJydXB0X2hhbmRsZXIsIDAsCisJCQkgY29yZV9kZXYtPmRldi0+bmFtZSwgZGV2KTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOworCisJY29yZV9kZXYtPmRldi0+Y2VfYmFzZSA9IG9mX2lvbWFwKG9mZGV2LT5ub2RlLCAwKTsKKwlpZiAoIWNvcmVfZGV2LT5kZXYtPmNlX2Jhc2UpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gb2ZfaW9tYXBcbiIpOworCQlnb3RvIGVycl9pb21hcDsKKwl9CisKKwkvKiBuZWVkIHRvIHNldHVwIHBkciwgcmRyLCBnZHIgYW5kIHNkciBiZWZvcmUgdGhpcyAqLworCWNyeXB0bzR4eF9od19pbml0KGNvcmVfZGV2LT5kZXYpOworCisJLyogUmVnaXN0ZXIgc2VjdXJpdHkgYWxnb3JpdGhtcyB3aXRoIExpbnV4IENyeXB0b0FQSSAqLworCXJjID0gY3J5cHRvNHh4X3JlZ2lzdGVyX2FsZyhjb3JlX2Rldi0+ZGV2LCBjcnlwdG80eHhfYWxnLAorCQkJICAgICAgIEFSUkFZX1NJWkUoY3J5cHRvNHh4X2FsZykpOworCWlmIChyYykKKwkJZ290byBlcnJfc3RhcnRfZGV2OworCisJcmV0dXJuIDA7CisKK2Vycl9zdGFydF9kZXY6CisJaW91bm1hcChjb3JlX2Rldi0+ZGV2LT5jZV9iYXNlKTsKK2Vycl9pb21hcDoKKwlmcmVlX2lycShjb3JlX2Rldi0+aXJxLCBkZXYpOworCWlycV9kaXNwb3NlX21hcHBpbmcoY29yZV9kZXYtPmlycSk7CisJdGFza2xldF9raWxsKCZjb3JlX2Rldi0+dGFza2xldCk7CitlcnJfcmVxdWVzdF9pcnE6CisJY3J5cHRvNHh4X2Rlc3Ryb3lfc2RyKGNvcmVfZGV2LT5kZXYpOworZXJyX2J1aWxkX3NkcjoKKwljcnlwdG80eHhfZGVzdHJveV9nZHIoY29yZV9kZXYtPmRldik7CitlcnJfYnVpbGRfZ2RyOgorCWNyeXB0bzR4eF9kZXN0cm95X3Bkcihjb3JlX2Rldi0+ZGV2KTsKK2Vycl9idWlsZF9wZHI6CisJa2ZyZWUoY29yZV9kZXYtPmRldik7CitlcnJfYWxsb2NfZGV2OgorCWtmcmVlKGNvcmVfZGV2KTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBfX2V4aXQgY3J5cHRvNHh4X3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb2ZkZXYtPmRldjsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlICpjb3JlX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZnJlZV9pcnEoY29yZV9kZXYtPmlycSwgZGV2KTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKGNvcmVfZGV2LT5pcnEpOworCisJdGFza2xldF9raWxsKCZjb3JlX2Rldi0+dGFza2xldCk7CisJLyogVW4tcmVnaXN0ZXIgd2l0aCBMaW51eCBDcnlwdG9BUEkgKi8KKwljcnlwdG80eHhfdW5yZWdpc3Rlcl9hbGcoY29yZV9kZXYtPmRldik7CisJLyogRnJlZSBhbGwgYWxsb2NhdGVkIG1lbW9yeSAqLworCWNyeXB0bzR4eF9zdG9wX2FsbChjb3JlX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgY3J5cHRvNHh4X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSAgICAgID0gImFtY2MscHBjNHh4LWNyeXB0byIsfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBjcnlwdG80eHhfZHJpdmVyID0geworCS5uYW1lCQk9ICJjcnlwdG80eHgiLAorCS5tYXRjaF90YWJsZQk9IGNyeXB0bzR4eF9tYXRjaCwKKwkucHJvYmUJCT0gY3J5cHRvNHh4X3Byb2JlLAorCS5yZW1vdmUJCT0gY3J5cHRvNHh4X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNyeXB0bzR4eF9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmY3J5cHRvNHh4X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcnlwdG80eHhfZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZjcnlwdG80eHhfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY3J5cHRvNHh4X2luaXQpOworbW9kdWxlX2V4aXQoY3J5cHRvNHh4X2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYW1lcyBIc2lhbyA8amhzaWFvQGFtY2MuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEFNQ0MgUFBDNHh4IGNyeXB0byBhY2NlbGVyYXRvciIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmggYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVmMTAzNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3J5cHRvL2FtY2MvY3J5cHRvNHh4X2NvcmUuaApAQCAtMCwwICsxLDE3NyBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBpcyB0aGUgaGVhZGVyIGZpbGUgZm9yIEFNQ0MgQ3J5cHRvIG9mZmxvYWQgTGludXggZGV2aWNlIGRyaXZlciBmb3IKKyAqIHVzZSB3aXRoIExpbnV4IENyeXB0b0FQSS4KKworICovCisKKyNpZm5kZWYgX19DUllQVE80WFhfQ09SRV9IX18KKyNkZWZpbmUgX19DUllQVE80WFhfQ09SRV9IX18KKworI2RlZmluZSBQUEM0NjBTWF9TRFIwX1NSU1QgICAgICAgICAgICAgICAgICAgICAgMHgyMDEKKyNkZWZpbmUgUFBDNDA1RVhfU0RSMF9TUlNUICAgICAgICAgICAgICAgICAgICAgIDB4MjAwCisjZGVmaW5lIFBQQzQ2MEVYX1NEUjBfU1JTVCAgICAgICAgICAgICAgICAgICAgICAweDIwMQorI2RlZmluZSBQUEM0NjBFWF9DRV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBQUEM0NjBTWF9DRV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBQUEM0MDVFWF9DRV9SRVNFVCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisjZGVmaW5lIENSWVBUTzRYWF9DUllQVE9fUFJJT1JJVFkJCTMwMAorI2RlZmluZSBQUEM0WFhfTEFTVF9QRAkJCQk2MworI2RlZmluZSBQUEM0WFhfTlVNX1BECQkJCTY0CisjZGVmaW5lIFBQQzRYWF9MQVNUX0dECQkJCTEwMjMKKyNkZWZpbmUgUFBDNFhYX05VTV9HRAkJCQkxMDI0CisjZGVmaW5lIFBQQzRYWF9MQVNUX1NECQkJCTYzCisjZGVmaW5lIFBQQzRYWF9OVU1fU0QJCQkJNjQKKyNkZWZpbmUgUFBDNFhYX1NEX0JVRkZFUl9TSVpFCQkJMjA0OAorCisjZGVmaW5lIFBEX0VOVFJZX0lOVVNFCQkJCTEKKyNkZWZpbmUgUERfRU5UUllfRlJFRQkJCQkwCisjZGVmaW5lIEVSSU5HX1dBU19GVUxMCQkJCTB4ZmZmZmZmZmYKKworc3RydWN0IGNyeXB0bzR4eF9kZXZpY2U7CisKK3N0cnVjdCBwZF91aW5mbyB7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldjsKKwl1MzIgICBzdGF0ZTsKKwl1MzIgdXNpbmdfc2Q7CisJdTMyIGZpcnN0X2dkOwkJLyogZmlyc3QgZ2F0aGVyIGRpc2NyaXB0b3IKKwkJCQl1c2VkIGJ5IHRoaXMgcGFja2V0ICovCisJdTMyIG51bV9nZDsgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGdhdGhlciBkaXNjcmlwdG9yCisJCQkJdXNlZCBieSB0aGlzIHBhY2tldCAqLworCXUzMiBmaXJzdF9zZDsJCS8qIGZpcnN0IHNjYXR0ZXIgZGlzY3JpcHRvcgorCQkJCXVzZWQgYnkgdGhpcyBwYWNrZXQgKi8KKwl1MzIgbnVtX3NkOwkJLyogbnVtYmVyIG9mIHNjYXR0ZXIgZGlzY3JpcHRvcnMKKwkJCQl1c2VkIGJ5IHRoaXMgcGFja2V0ICovCisJdm9pZCAqc2FfdmE7CQkvKiBzaGFkb3cgc2EsIHdoZW4gdXNpbmcgY3AgZnJvbSBjdHgtPnNhICovCisJdTMyIHNhX3BhOworCXZvaWQgKnNyX3ZhOwkJLyogc3RhdGUgcmVjb3JkIGZvciBzaGFkb3cgc2EgKi8KKwl1MzIgc3JfcGE7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpkZXN0X3ZhOworCXN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqYXN5bmNfcmVxOyAJLyogYmFzZSBjcnlwdG8gcmVxdWVzdAorCQkJCQkJCWZvciB0aGlzIHBhY2tldCAqLworfTsKKworc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgeworCXN0cnVjdCBjcnlwdG80eHhfY29yZV9kZXZpY2UgKmNvcmVfZGV2OworCWNoYXIgKm5hbWU7CisJdTY0ICBjZV9waHlfYWRkcmVzczsKKwl2b2lkIF9faW9tZW0gKmNlX2Jhc2U7CisKKwl2b2lkICpwZHI7CQkJLyogYmFzZSBhZGRyZXNzIG9mIHBhY2tldAorCQkJCQlkZXNjcmlwdG9yIHJpbmcgKi8KKwlkbWFfYWRkcl90IHBkcl9wYTsJCS8qIHBoeXNpY2FsIGFkZHJlc3MgdXNlZCB0bworCQkJCQlwcm9ncmFtIGNlIHBkcl9iYXNlX3JlZ2lzdGVyICovCisJdm9pZCAqZ2RyOyAgICAgICAgICAgICAgICAgICAgICAvKiBnYXRoZXIgZGVzY3JpcHRvciByaW5nICovCisJZG1hX2FkZHJfdCBnZHJfcGE7CQkvKiBwaHlzaWNhbCBhZGRyZXNzIHVzZWQgdG8KKwkJCQkJcHJvZ3JhbSBjZSBnZHJfYmFzZV9yZWdpc3RlciAqLworCXZvaWQgKnNkcjsJCQkvKiBzY2F0dGVyIGRlc2NyaXB0b3IgcmluZyAqLworCWRtYV9hZGRyX3Qgc2RyX3BhOwkJLyogcGh5c2ljYWwgYWRkcmVzcyB1c2VkIHRvCisJCQkJCXByb2dyYW0gY2Ugc2RyX2Jhc2VfcmVnaXN0ZXIgKi8KKwl2b2lkICpzY2F0dGVyX2J1ZmZlcl92YTsKKwlkbWFfYWRkcl90IHNjYXR0ZXJfYnVmZmVyX3BhOworCXUzMiBzY2F0dGVyX2J1ZmZlcl9zaXplOworCisJdm9pZCAqc2hhZG93X3NhX3Bvb2w7CQkvKiBwb29sIG9mIG1lbW9yeSBmb3Igc2EgaW4gcGRfdWluZm8gKi8KKwlkbWFfYWRkcl90IHNoYWRvd19zYV9wb29sX3BhOworCXZvaWQgKnNoYWRvd19zcl9wb29sOwkJLyogcG9vbCBvZiBtZW1vcnkgZm9yIHNyIGluIHBkX3VpbmZvICovCisJZG1hX2FkZHJfdCBzaGFkb3dfc3JfcG9vbF9wYTsKKwl1MzIgcGRyX3RhaWw7CisJdTMyIHBkcl9oZWFkOworCXUzMiBnZHJfdGFpbDsKKwl1MzIgZ2RyX2hlYWQ7CisJdTMyIHNkcl90YWlsOworCXUzMiBzZHJfaGVhZDsKKwl2b2lkICpwZHJfdWluZm87CisJc3RydWN0IGxpc3RfaGVhZCBhbGdfbGlzdDsJLyogTGlzdCBvZiBhbGdvcml0aG0gc3VwcG9ydGVkCisJCQkJCWJ5IHRoaXMgZGV2aWNlICovCit9OworCitzdHJ1Y3QgY3J5cHRvNHh4X2NvcmVfZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IG9mX2RldmljZSAqb2ZkZXY7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldjsKKwl1MzIgaW50X3N0YXR1czsKKwl1MzIgaXJxOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0cnVjdCBjcnlwdG80eHhfY3R4IHsKKwlzdHJ1Y3QgY3J5cHRvNHh4X2RldmljZSAqZGV2OworCXZvaWQgKnNhX2luOworCWRtYV9hZGRyX3Qgc2FfaW5fZG1hX2FkZHI7CisJdm9pZCAqc2Ffb3V0OworCWRtYV9hZGRyX3Qgc2Ffb3V0X2RtYV9hZGRyOworCXZvaWQgKnN0YXRlX3JlY29yZDsKKwlkbWFfYWRkcl90IHN0YXRlX3JlY29yZF9kbWFfYWRkcjsKKwl1MzIgc2FfbGVuOworCXUzMiBvZmZzZXRfdG9fc3JfcHRyOyAgICAgICAgICAgLyogb2Zmc2V0IHRvIHN0YXRlIHB0ciwgaW4gZHluYW1pYyBzYSAqLworCXUzMiBkaXJlY3Rpb247CisJdTMyIG5leHRfaGRyOworCXUzMiBzYXZlX2l2OworCXUzMiBwZF9jdGxfbGVuOworCXUzMiBwZF9jdGw7CisJdTMyIGJ5cGFzczsKKwl1MzIgaXNfaGFzaDsKKwl1MzIgaGFzaF9maW5hbDsKK307CisKK3N0cnVjdCBjcnlwdG80eHhfcmVxX2N0eCB7CisJc3RydWN0IGNyeXB0bzR4eF9kZXZpY2UgKmRldjsJLyogRGV2aWNlIGluIHdoaWNoCisJCQkJCW9wZXJhdGlvbiB0byBzZW5kIHRvICovCisJdm9pZCAqc2E7CisJdTMyIHNhX2RtYV9hZGRyOworCXUxNiBzYV9sZW47Cit9OworCitzdHJ1Y3QgY3J5cHRvNHh4X2FsZyB7CisJc3RydWN0IGxpc3RfaGVhZCAgZW50cnk7CisJc3RydWN0IGNyeXB0b19hbGcgYWxnOworCXN0cnVjdCBjcnlwdG80eHhfZGV2aWNlICpkZXY7Cit9OworCisjZGVmaW5lIGNyeXB0b19hbGdfdG9fY3J5cHRvNHh4X2FsZyh4KSBcCisJCWNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgY3J5cHRvNHh4X2FsZywgYWxnKQorCitleHRlcm4gaW50IGNyeXB0bzR4eF9hbGxvY19zYShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4LCB1MzIgc2l6ZSk7CitleHRlcm4gdm9pZCBjcnlwdG80eHhfZnJlZV9zYShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB1MzIgY3J5cHRvNHh4X2FsbG9jX3NhX3JjdHgoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCwKKwkJCQkgICBzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqcmN0eCk7CitleHRlcm4gdm9pZCBjcnlwdG80eHhfZnJlZV9zYV9yY3R4KHN0cnVjdCBjcnlwdG80eHhfY3R4ICpyY3R4KTsKK2V4dGVybiB2b2lkIGNyeXB0bzR4eF9mcmVlX2N0eChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB1MzIgY3J5cHRvNHh4X2FsbG9jX3N0YXRlX3JlY29yZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB1MzIgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X3N0YXRlX3B0cl9maWVsZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB1MzIgZ2V0X2R5bmFtaWNfc2Ffb2Zmc2V0X2tleV9maWVsZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB1MzIgZ2V0X2R5bmFtaWNfc2FfaXZfc2l6ZShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KTsKK2V4dGVybiB2b2lkIGNyeXB0bzR4eF9tZW1jcHlfbGUodW5zaWduZWQgaW50ICpkc3QsCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKTsKK2V4dGVybiB1MzIgY3J5cHRvNHh4X2J1aWxkX3BkKHN0cnVjdCBjcnlwdG9fYXN5bmNfcmVxdWVzdCAqcmVxLAorCQkJICAgICAgc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCwKKwkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YWxlbiwKKwkJCSAgICAgIHZvaWQgKml2LCB1MzIgaXZfbGVuKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X3NldGtleV9hZXNfY2JjKHN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqY2lwaGVyLAorCQkJCSAgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2VuY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2RlY3J5cHQoc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqcmVxKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X3NoYTFfYWxnX2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9oYXNoX2RpZ2VzdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2hhc2hfZmluYWwoc3RydWN0IGFoYXNoX3JlcXVlc3QgKnJlcSk7CitleHRlcm4gaW50IGNyeXB0bzR4eF9oYXNoX3VwZGF0ZShzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKK2V4dGVybiBpbnQgY3J5cHRvNHh4X2hhc2hfaW5pdChzdHJ1Y3QgYWhhc2hfcmVxdWVzdCAqcmVxKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfcmVnX2RlZi5oIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfcmVnX2RlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNGVkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9yZWdfZGVmLmgKQEAgLTAsMCArMSwyODQgQEAKKy8qKgorICogQU1DQyBTb0MgUFBDNHh4IENyeXB0byBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQXBwbGllZCBNaWNybyBDaXJjdWl0cyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIEphbWVzIEhzaWFvIDxqaHNpYW9AYW1jYy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgZmlsciBkZWZpbmVzIHRoZSByZWdpc3RlciBzZXQgZm9yIFNlY3VyaXR5IFN1YnN5c3RlbQorICovCisKKyNpZm5kZWYgX19DUllQVE80WFhfUkVHX0RFRl9IX18KKyNkZWZpbmUgX19DUllQVE80WFhfUkVHX0RFRl9IX18KKworLyogQ1JZUFRPNFhYIFJlZ2lzdGVyIG9mZnNldCAqLworI2RlZmluZSBDUllQVE80WFhfREVTQ1JJUFRPUgkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0NUUkxfU1RBVAkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX1NPVVJDRQkJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQ1JZUFRPNFhYX0RFU1QJCQkJMHgwMDAwMDAwOAorI2RlZmluZSBDUllQVE80WFhfU0EJCQkJMHgwMDAwMDAwQworI2RlZmluZSBDUllQVE80WFhfU0FfTEVOR1RICQkJMHgwMDAwMDAxMAorI2RlZmluZSBDUllQVE80WFhfTEVOR1RICQkJMHgwMDAwMDAxNAorCisjZGVmaW5lIENSWVBUTzRYWF9QRV9ETUFfQ0ZHCQkJMHgwMDAwMDA0MAorI2RlZmluZSBDUllQVE80WFhfUEVfRE1BX1NUQVQJCQkweDAwMDAwMDQ0CisjZGVmaW5lIENSWVBUTzRYWF9QRFJfQkFTRQkJCTB4MDAwMDAwNDgKKyNkZWZpbmUgQ1JZUFRPNFhYX1JEUl9CQVNFCQkJMHgwMDAwMDA0YworI2RlZmluZSBDUllQVE80WFhfUklOR19TSVpFCQkJMHgwMDAwMDA1MAorI2RlZmluZSBDUllQVE80WFhfUklOR19DVFJMCQkJMHgwMDAwMDA1NAorI2RlZmluZSBDUllQVE80WFhfSU5UX1JJTkdfU1RBVAkJCTB4MDAwMDAwNTgKKyNkZWZpbmUgQ1JZUFRPNFhYX0VYVF9SSU5HX1NUQVQJCQkweDAwMDAwMDVjCisjZGVmaW5lIENSWVBUTzRYWF9JT19USFJFU0hPTEQJCQkweDAwMDAwMDYwCisjZGVmaW5lIENSWVBUTzRYWF9HQVRIX1JJTkdfQkFTRQkJMHgwMDAwMDA2NAorI2RlZmluZSBDUllQVE80WFhfU0NBVF9SSU5HX0JBU0UJCTB4MDAwMDAwNjgKKyNkZWZpbmUgQ1JZUFRPNFhYX1BBUlRfUklOR19TSVpFCQkweDAwMDAwMDZjCisjZGVmaW5lIENSWVBUTzRYWF9QQVJUX1JJTkdfQ0ZHCQkgICAgICAgIDB4MDAwMDAwNzAKKworI2RlZmluZSBDUllQVE80WFhfUERSX0JBU0VfVUFERFIJCTB4MDAwMDAwODAKKyNkZWZpbmUgQ1JZUFRPNFhYX1JEUl9CQVNFX1VBRERSCQkweDAwMDAwMDg0CisjZGVmaW5lIENSWVBUTzRYWF9QS1RfU1JDX1VBRERSCQkJMHgwMDAwMDA4OAorI2RlZmluZSBDUllQVE80WFhfUEtUX0RFU1RfVUFERFIJCTB4MDAwMDAwOGMKKyNkZWZpbmUgQ1JZUFRPNFhYX1NBX1VBRERSCQkJMHgwMDAwMDA5MAorI2RlZmluZSBDUllQVE80WFhfR0FUSF9SSU5HX0JBU0VfVUFERFIJCTB4MDAwMDAwQTAKKyNkZWZpbmUgQ1JZUFRPNFhYX1NDQVRfUklOR19CQVNFX1VBRERSCQkweDAwMDAwMEE0CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1NFUV9SRAkJCTB4MDAwMDA0MDgKKyNkZWZpbmUgQ1JZUFRPNFhYX1NFUV9NQVNLX1JECQkJMHgwMDAwMDQwQworCisjZGVmaW5lIENSWVBUTzRYWF9TQV9DTURfMAkJCTB4MDAwMTA2MDAKKyNkZWZpbmUgQ1JZUFRPNFhYX1NBX0NNRF8xCQkJMHgwMDAxMDYwNAorCisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9QVFIJCQkweDAwMDEwNmRjCisjZGVmaW5lIENSWVBUTzRYWF9TVEFURV9JVgkJCTB4MDAwMTA3MDAKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX0hBU0hfQllURV9DTlRfMAkJMHgwMDAxMDcxMAorI2RlZmluZSBDUllQVE80WFhfU1RBVEVfSEFTSF9CWVRFX0NOVF8xCQkweDAwMDEwNzE0CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1NUQVRFX0lESUdFU1RfMAkJMHgwMDAxMDcxOAorI2RlZmluZSBDUllQVE80WFhfU1RBVEVfSURJR0VTVF8xCQkweDAwMDEwNzFjCisKKyNkZWZpbmUgQ1JZUFRPNFhYX0RBVEFfSU4JCQkweDAwMDE4MDAwCisjZGVmaW5lIENSWVBUTzRYWF9EQVRBX09VVAkJCTB4MDAwMWMwMDAKKworI2RlZmluZSBDUllQVE80WFhfSU5UX1VOTUFTS19TVEFUCQkweDAwMDUwMGEwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfTUFTS19TVEFUCQkJMHgwMDA1MDBhNAorI2RlZmluZSBDUllQVE80WFhfSU5UX0NMUgkJCTB4MDAwNTAwYTQKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9FTgkJCTB4MDAwNTAwYTgKKworI2RlZmluZSBDUllQVE80WFhfSU5UX1BLQQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9QRFJfRE9ORQkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9NQV9XUl9FUlIJCQkweDAwMDIwMDAwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfTUFfUkRfRVJSCQkJMHgwMDAxMDAwMAorI2RlZmluZSBDUllQVE80WFhfSU5UX1BFX0VSUgkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9VU0VSX0RNQV9FUlIJCTB4MDAwMDAwNDAKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9TTEFWRV9FUlIJCQkweDAwMDAwMDEwCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfTUFTVEVSX0VSUgkJMHgwMDAwMDAwOAorI2RlZmluZSBDUllQVE80WFhfSU5UX0VSUk9SCQkJMHgwMDAzMDI1OAorCisjZGVmaW5lIENSWVBUTzRYWF9JTlRfQ0ZHCQkJMHgwMDA1MDBhYworI2RlZmluZSBDUllQVE80WFhfSU5UX0RFU0NSX1JECQkJMHgwMDA1MDBiMAorI2RlZmluZSBDUllQVE80WFhfSU5UX0RFU0NSX0NOVAkJCTB4MDAwNTAwYjQKKyNkZWZpbmUgQ1JZUFRPNFhYX0lOVF9USU1FT1VUX0NOVAkJMHgwMDA1MDBiOAorCisjZGVmaW5lIENSWVBUTzRYWF9ERVZJQ0VfQ1RSTAkJCTB4MDAwNjAwODAKKyNkZWZpbmUgQ1JZUFRPNFhYX0RFVklDRV9JRAkJCTB4MDAwNjAwODQKKyNkZWZpbmUgQ1JZUFRPNFhYX0RFVklDRV9JTkZPCQkJMHgwMDA2MDA4OAorI2RlZmluZSBDUllQVE80WFhfRE1BX1VTRVJfU1JDCQkJMHgwMDA2MDA5NAorI2RlZmluZSBDUllQVE80WFhfRE1BX1VTRVJfREVTVAkJCTB4MDAwNjAwOTgKKyNkZWZpbmUgQ1JZUFRPNFhYX0RNQV9VU0VSX0NNRAkJCTB4MDAwNjAwOUMKKworI2RlZmluZSBDUllQVE80WFhfRE1BX0NGRwkgICAgICAgIAkweDAwMDYwMGQ0CisjZGVmaW5lIENSWVBUTzRYWF9CWVRFX09SREVSX0NGRyAJCTB4MDAwNjAwZDgKKyNkZWZpbmUgQ1JZUFRPNFhYX0VORElBTl9DRkcJCQkweDAwMDYwMGQ4CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfU1RBVAkJCTB4MDAwNzAwMDAKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfQ1RSTAkJCTB4MDAwNzAwMDQKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfU0VFRF9MCQkJMHgwMDA3MDAwOAorI2RlZmluZSBDUllQVE80WFhfUFJOR19TRUVEX0gJCQkweDAwMDcwMDBjCisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfUkVTXzAJCQkweDAwMDcwMDIwCisjZGVmaW5lIENSWVBUTzRYWF9QUk5HX1JFU18xCQkJMHgwMDA3MDAyNAorI2RlZmluZSBDUllQVE80WFhfUFJOR19SRVNfMgkJCTB4MDAwNzAwMjgKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfUkVTXzMJCQkweDAwMDcwMDJDCisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BSTkdfTEZTUl9MCQkJMHgwMDA3MDAzMAorI2RlZmluZSBDUllQVE80WFhfUFJOR19MRlNSX0gJCQkweDAwMDcwMDM0CisKKy8qKgorICogSW5pdGlsaXplIENSWVBUTyBFTkdJTkUgcmVnaXN0ZXJzLCBhbmQgbWVtb3J5IGJhc2VzLgorICovCisjZGVmaW5lIFBQQzRYWF9QRFJfUE9MTAkJCQkweDNmZgorI2RlZmluZSBQUEM0WFhfT1VUUFVUX1RIUkVTSE9MRAkJCTIKKyNkZWZpbmUgUFBDNFhYX0lOUFVUX1RIUkVTSE9MRAkJCTIKKyNkZWZpbmUgUFBDNFhYX1BEX1NJWkUJCQkJNgorI2RlZmluZSBQUEM0WFhfQ1RYX0RPTkVfSU5UCQkJMHgyMDAwCisjZGVmaW5lIFBQQzRYWF9QRF9ET05FX0lOVAkJCTB4ODAwMAorI2RlZmluZSBQUEM0WFhfQllURV9PUkRFUgkJCTB4MjIyMjIKKyNkZWZpbmUgUFBDNFhYX0lOVEVSUlVQVF9DTFIJCQkweDNmZmZmCisjZGVmaW5lIFBQQzRYWF9QUk5HX0NUUkxfQVVUT19FTgkJMHgzCisjZGVmaW5lIFBQQzRYWF9EQ18zREVTX0VOCQkJMQorI2RlZmluZSBQUEM0WFhfSU5UX0RFU0NSX0NOVAkJCTQKKyNkZWZpbmUgUFBDNFhYX0lOVF9USU1FT1VUX0NOVAkJCTAKKyNkZWZpbmUgUFBDNFhYX0lOVF9DRkcJCQkJMQorLyoqCisgKiBhbGwgZm9sbG93IGRlZmluZSBhcmUgYWQgaG9jCisgKi8KKyNkZWZpbmUgUFBDNFhYX1JJTkdfUkVUUlkJCQkxMDAKKyNkZWZpbmUgUFBDNFhYX1JJTkdfUE9MTAkJCTEwMAorI2RlZmluZSBQUEM0WFhfU0RSX1NJWkUJCQkJUFBDNFhYX05VTV9TRAorI2RlZmluZSBQUEM0WFhfR0RSX1NJWkUJCQkJUFBDNFhYX05VTV9HRAorCisvKioKKyAgKiBHZW5lcmljIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgd2l0aCBhbGwgcG9zc2libGUgZmllbGRzLiBUaGVzZSB3aWxsCisgKiBuZXZlciBsaWtlbHkgdXNlZCBleGNlcHQgZm9yIHJlZmVyZW5jZSBwdXJwb3NlLiBUaGVzZSBzdHJ1Y3R1cmUgZm9ybWF0CisgKiBjYW4gYmUgbm90IGNoYW5nZWQgYXMgdGhlIGhhcmR3YXJlIGV4cGVjdHMgdGhlbSB0byBiZSBsYXlvdXQgYXMgZGVmaW5lZC4KKyAqIEZpZWxkIGNhbiBiZSByZW1vdmVkIG9yIHJlZHVjZWQgYnV0IG9yZGVyaW5nIGNhbiBub3QgYmUgY2hhbmdlZC4KKyAqLworI2RlZmluZSBDUllQVE80WFhfRE1BX0NGR19PRkZTRVQJCTB4NDAKK3VuaW9uIGNlX3BlX2RtYV9jZmcgeworCXN0cnVjdCB7CisJCXUzMiByc3Y6NzsKKwkJdTMyIGRpcl9ob3N0OjE7CisJCXUzMiByc3YxOjI7CisJCXUzMiBib190ZF9lbjoxOworCQl1MzIgZGlzX3Bkcl91cGQ6MTsKKwkJdTMyIGJvX3NncGRfZW46MTsKKwkJdTMyIGJvX2RhdGFfZW46MTsKKwkJdTMyIGJvX3NhX2VuOjE7CisJCXUzMiBib19wZF9lbjoxOworCQl1MzIgcnN2Mjo0OworCQl1MzIgZHluYW1pY19zYV9lbjoxOworCQl1MzIgcGRyX21vZGU6MjsKKwkJdTMyIHBlX21vZGU6MTsKKwkJdTMyIHJzdjM6NTsKKwkJdTMyIHJlc2V0X3NnOjE7CisJCXUzMiByZXNldF9wZHI6MTsKKwkJdTMyIHJlc2V0X3BlOjE7CisJfSBiZjsKKyAgICB1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ1JZUFRPNFhYX1BEUl9CQVNFX09GRlNFVAkJMHg0OAorI2RlZmluZSBDUllQVE80WFhfUkRSX0JBU0VfT0ZGU0VUCQkweDRjCisjZGVmaW5lIENSWVBUTzRYWF9SSU5HX1NJWkVfT0ZGU0VUCQkweDUwCit1bmlvbiBjZV9yaW5nX3NpemUgeworCXN0cnVjdCB7CisJCXUzMiByaW5nX29mZnNldDoxNjsKKwkJdTMyIHJzdjo2OworCQl1MzIgcmluZ19zaXplOjEwOworCX0gYmY7CisgICAgdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIENSWVBUTzRYWF9SSU5HX0NPTlRST0xfT0ZGU0VUCQkweDU0Cit1bmlvbiBjZV9yaW5nX2NvbnRvbCB7CisJc3RydWN0IHsKKwkJdTMyIGNvbnRpbnVvdXM6MTsKKwkJdTMyIHJzdjo1OworCQl1MzIgcmluZ19yZXRyeV9kaXZpc29yOjEwOworCQl1MzIgcnN2MTo0OworCQl1MzIgcmluZ19wb2xsX2Rpdmlzb3I6MTA7CisJfSBiZjsKKyAgICB1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ1JZUFRPNFhYX0lPX1RIUkVTSE9MRF9PRkZTRVQJCTB4NjAKK3VuaW9uIGNlX2lvX3RocmVzaG9sZCB7CisJc3RydWN0IHsKKwkJdTMyIHJzdjo2OworCQl1MzIgb3V0cHV0X3RocmVzaG9sZDoxMDsKKwkJdTMyIHJzdjE6NjsKKwkJdTMyIGlucHV0X3RocmVzaG9sZDoxMDsKKwl9IGJmOworICAgIHUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBDUllQVE80WFhfR0FUSEVSX1JJTkdfQkFTRV9PRkZTRVQJMHg2NAorI2RlZmluZSBDUllQVE80WFhfU0NBVFRFUl9SSU5HX0JBU0VfT0ZGU0VUCTB4NjgKKwordW5pb24gY2VfcGFydF9yaW5nX3NpemUgIHsKKwlzdHJ1Y3QgeworCQl1MzIgc2RyX3NpemU6MTY7CisJCXUzMiBnZHJfc2l6ZToxNjsKKwl9IGJmOworICAgIHUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBNQVhfQlVSU1RfU0laRV8zMgkJCTAKKyNkZWZpbmUgTUFYX0JVUlNUX1NJWkVfNjQJCQkxCisjZGVmaW5lIE1BWF9CVVJTVF9TSVpFXzEyOAkJCTIKKyNkZWZpbmUgTUFYX0JVUlNUX1NJWkVfMjU2CQkJMworCisvKiBnYXRoZXIgZGVzY3JpcHRvciBjb250cm9sIGxlbmd0aCAqLworc3RydWN0IGdkX2N0bF9sZW4geworCXUzMiBsZW46MTY7CisJdTMyIHJzdjoxNDsKKwl1MzIgZG9uZToxOworCXUzMiByZWFkeToxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNlX2dkIHsKKwl1MzIgcHRyOworCXN0cnVjdCBnZF9jdGxfbGVuIGN0bF9sZW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2RfY3RsIHsKKwl1MzIgY3RsOjMwOworCXUzMiBkb25lOjE7CisJdTMyIHJkeToxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNlX3NkIHsKKyAgICB1MzIgcHRyOworCXN0cnVjdCBzZF9jdGwgY3RsOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBQRF9QQURfQ1RMXzMyCTB4MTAKKyNkZWZpbmUgUERfUEFEX0NUTF82NAkweDIwCisjZGVmaW5lIFBEX1BBRF9DVExfMTI4CTB4NDAKKyNkZWZpbmUgUERfUEFEX0NUTF8yNTYJMHg4MAordW5pb24gY2VfcGRfY3RsIHsKKwlzdHJ1Y3QgeworCQl1MzIgcGRfcGFkX2N0bDo4OworCQl1MzIgc3RhdHVzOjg7CisJCXUzMiBuZXh0X2hkcjo4OworCQl1MzIgcnN2OjI7CisJCXUzMiBjYWNoZWRfc2E6MTsKKwkJdTMyIGhhc2hfZmluYWw6MTsKKwkJdTMyIGluaXRfYXJjNDoxOworCQl1MzIgcnN2MToxOworCQl1MzIgcGVfZG9uZToxOworCQl1MzIgaG9zdF9yZWFkeToxOworCX0gYmY7CisJdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBjZV9wZF9jdGxfbGVuIHsKKwlzdHJ1Y3QgeworCQl1MzIgYnlwYXNzOjg7CisJCXUzMiBwZV9kb25lOjE7CisJCXUzMiBob3N0X3JlYWR5OjE7CisJCXUzMiByc3Y6MjsKKwkJdTMyIHBrdF9sZW46MjA7CisJfSBiZjsKKwl1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZV9wZCB7CisJdW5pb24gY2VfcGRfY3RsICAgcGRfY3RsOworCXUzMiBzcmM7CisJdTMyIGRlc3Q7CisJdTMyIHNhOyAgICAgICAgICAgICAgICAgLyogZ2V0IGZyb20gY3R4LT5zYV9kbWFfYWRkciAqLworCXUzMiBzYV9sZW47ICAgICAgICAgICAgIC8qIG9ubHkgaWYgZHluYW1pYyBzYSBpcyB1c2VkICovCisJdW5pb24gY2VfcGRfY3RsX2xlbiBwZF9jdGxfbGVuOworCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5jIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjZmZDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuYwpAQCAtMCwwICsxLDEwOCBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQGZpbGUgY3J5cHRvNHh4X3NhLmMKKyAqCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgc2VjdXJpdHkgY29udGV4dAorICogYXNzb2ljYXRlIGZvcm1hdC4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Rlcy5oPgorI2luY2x1ZGUgImNyeXB0bzR4eF9yZWdfZGVmLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X3NhLmgiCisjaW5jbHVkZSAiY3J5cHRvNHh4X2NvcmUuaCIKKwordTMyIGdldF9keW5hbWljX3NhX29mZnNldF9pdl9maWVsZChzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCXUzMiBvZmZzZXQ7CisJdW5pb24gZHluYW1pY19zYV9jb250ZW50cyBjdHM7CisKKwlpZiAoY3R4LT5kaXJlY3Rpb24gPT0gRElSX0lOQk9VTkQpCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikoY3R4LT5zYV9pbikpLT5zYV9jb250ZW50czsKKwllbHNlCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikoY3R4LT5zYV9vdXQpKS0+c2FfY29udGVudHM7CisJb2Zmc2V0ID0gY3RzLmJmLmtleV9zaXplCisJCSsgY3RzLmJmLmlubmVyX3NpemUKKwkJKyBjdHMuYmYub3V0ZXJfc2l6ZQorCQkrIGN0cy5iZi5zcGkKKwkJKyBjdHMuYmYuc2VxX251bTAKKwkJKyBjdHMuYmYuc2VxX251bTEKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMAorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2sxCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazIKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMzsKKworCXJldHVybiBzaXplb2Yoc3RydWN0IGR5bmFtaWNfc2FfY3RsKSArIG9mZnNldCAqIDQ7Cit9CisKK3UzMiBnZXRfZHluYW1pY19zYV9vZmZzZXRfc3RhdGVfcHRyX2ZpZWxkKHN0cnVjdCBjcnlwdG80eHhfY3R4ICpjdHgpCit7CisJdTMyIG9mZnNldDsKKwl1bmlvbiBkeW5hbWljX3NhX2NvbnRlbnRzIGN0czsKKworCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luKS0+c2FfY29udGVudHM7CisJZWxzZQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2Ffb3V0KS0+c2FfY29udGVudHM7CisJb2Zmc2V0ID0gY3RzLmJmLmtleV9zaXplCisJCSsgY3RzLmJmLmlubmVyX3NpemUKKwkJKyBjdHMuYmYub3V0ZXJfc2l6ZQorCQkrIGN0cy5iZi5zcGkKKwkJKyBjdHMuYmYuc2VxX251bTAKKwkJKyBjdHMuYmYuc2VxX251bTEKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMAorCQkrIGN0cy5iZi5zZXFfbnVtX21hc2sxCisJCSsgY3RzLmJmLnNlcV9udW1fbWFzazIKKwkJKyBjdHMuYmYuc2VxX251bV9tYXNrMworCQkrIGN0cy5iZi5pdjAKKwkJKyBjdHMuYmYuaXYxCisJCSsgY3RzLmJmLml2MgorCQkrIGN0cy5iZi5pdjM7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2N0bCkgKyBvZmZzZXQgKiA0OworfQorCit1MzIgZ2V0X2R5bmFtaWNfc2FfaXZfc2l6ZShzdHJ1Y3QgY3J5cHRvNHh4X2N0eCAqY3R4KQoreworCXVuaW9uIGR5bmFtaWNfc2FfY29udGVudHMgY3RzOworCisJaWYgKGN0eC0+ZGlyZWN0aW9uID09IERJUl9JTkJPVU5EKQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2FfaW4pLT5zYV9jb250ZW50czsKKwllbHNlCisJCWN0cy53ID0gKChzdHJ1Y3QgZHluYW1pY19zYV9jdGwgKikgY3R4LT5zYV9vdXQpLT5zYV9jb250ZW50czsKKwlyZXR1cm4gKGN0cy5iZi5pdjAgKyBjdHMuYmYuaXYxICsgY3RzLmJmLml2MiArIGN0cy5iZi5pdjMpICogNDsKK30KKwordTMyIGdldF9keW5hbWljX3NhX29mZnNldF9rZXlfZmllbGQoc3RydWN0IGNyeXB0bzR4eF9jdHggKmN0eCkKK3sKKwl1bmlvbiBkeW5hbWljX3NhX2NvbnRlbnRzIGN0czsKKworCWlmIChjdHgtPmRpcmVjdGlvbiA9PSBESVJfSU5CT1VORCkKKwkJY3RzLncgPSAoKHN0cnVjdCBkeW5hbWljX3NhX2N0bCAqKSBjdHgtPnNhX2luKS0+c2FfY29udGVudHM7CisJZWxzZQorCQljdHMudyA9ICgoc3RydWN0IGR5bmFtaWNfc2FfY3RsICopIGN0eC0+c2Ffb3V0KS0+c2FfY29udGVudHM7CisKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2N0bCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9hbWNjL2NyeXB0bzR4eF9zYS5oIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjgzZWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vYW1jYy9jcnlwdG80eHhfc2EuaApAQCAtMCwwICsxLDI0MyBAQAorLyoqCisgKiBBTUNDIFNvQyBQUEM0eHggQ3J5cHRvIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBBcHBsaWVkIE1pY3JvIENpcmN1aXRzIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gSmFtZXMgSHNpYW8gPGpoc2lhb0BhbWNjLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGRlZmluZXMgdGhlIHNlY3VyaXR5IGNvbnRleHQKKyAqIGFzc29pY2F0ZSBmb3JtYXQuCisgKi8KKworI2lmbmRlZiBfX0NSWVBUTzRYWF9TQV9IX18KKyNkZWZpbmUgX19DUllQVE80WFhfU0FfSF9fCisKKyNkZWZpbmUgQUVTX0lWX1NJWkUJCQkJMTYKKworLyoqCisgKiBDb250ZW50cyBvZiBEeW5hbWljIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgd2l0aCBhbGwgcG9zc2libGUgZmllbGRzCisgKi8KK3VuaW9uIGR5bmFtaWNfc2FfY29udGVudHMgeworCXN0cnVjdCB7CisJCXUzMiBhcmM0X3N0YXRlX3B0cjoxOworCQl1MzIgYXJjNF9pal9wdHI6MTsKKwkJdTMyIHN0YXRlX3B0cjoxOworCQl1MzIgaXYzOjE7CisJCXUzMiBpdjI6MTsKKwkJdTMyIGl2MToxOworCQl1MzIgaXYwOjE7CisJCXUzMiBzZXFfbnVtX21hc2szOjE7CisJCXUzMiBzZXFfbnVtX21hc2syOjE7CisJCXUzMiBzZXFfbnVtX21hc2sxOjE7CisJCXUzMiBzZXFfbnVtX21hc2swOjE7CisJCXUzMiBzZXFfbnVtMToxOworCQl1MzIgc2VxX251bTA6MTsKKwkJdTMyIHNwaToxOworCQl1MzIgb3V0ZXJfc2l6ZTo1OworCQl1MzIgaW5uZXJfc2l6ZTo1OworCQl1MzIga2V5X3NpemU6NDsKKwkJdTMyIGNtZF9zaXplOjQ7CisJfSBiZjsKKwl1MzIgdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgRElSX09VVEJPVU5ECQkJCTAKKyNkZWZpbmUgRElSX0lOQk9VTkQJCQkJMQorI2RlZmluZSBTQV9PUF9HUk9VUF9CQVNJQwkJCTAKKyNkZWZpbmUgU0FfT1BDT0RFX0VOQ1JZUFQJCQkwCisjZGVmaW5lIFNBX09QQ09ERV9ERUNSWVBUCQkJMAorI2RlZmluZSBTQV9PUENPREVfSEFTSAkJCQkzCisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfREVTCQkJMAorI2RlZmluZSBTQV9DSVBIRVJfQUxHXzNERVMJCQkxCisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfQVJDNAkJCTIKKyNkZWZpbmUgU0FfQ0lQSEVSX0FMR19BRVMJCQkzCisjZGVmaW5lIFNBX0NJUEhFUl9BTEdfS0FTVU1JCQkJNAorI2RlZmluZSBTQV9DSVBIRVJfQUxHX05VTEwJCQkxNQorCisjZGVmaW5lIFNBX0hBU0hfQUxHX01ENQkJCQkwCisjZGVmaW5lIFNBX0hBU0hfQUxHX1NIQTEJCQkxCisjZGVmaW5lIFNBX0hBU0hfQUxHX05VTEwJCQkxNQorI2RlZmluZSBTQV9IQVNIX0FMR19TSEExX0RJR0VTVF9TSVpFCQkyMAorCisjZGVmaW5lIFNBX0xPQURfSEFTSF9GUk9NX1NBCQkJMAorI2RlZmluZSBTQV9MT0FEX0hBU0hfRlJPTV9TVEFURQkJCTIKKyNkZWZpbmUgU0FfTk9UX0xPQURfSEFTSAkJCTMKKyNkZWZpbmUgU0FfTE9BRF9JVl9GUk9NX1NBCQkJMAorI2RlZmluZSBTQV9MT0FEX0lWX0ZST01fSU5QVVQJCQkxCisjZGVmaW5lIFNBX0xPQURfSVZfRlJPTV9TVEFURQkJCTIKKyNkZWZpbmUgU0FfTE9BRF9JVl9HRU5fSVYJCQkzCisKKyNkZWZpbmUgU0FfUEFEX1RZUEVfQ09OU1RBTlQJCQkyCisjZGVmaW5lIFNBX1BBRF9UWVBFX1pFUk8JCQkzCisjZGVmaW5lIFNBX1BBRF9UWVBFX1RMUwkJCQk1CisjZGVmaW5lIFNBX1BBRF9UWVBFX0RUTFMJCQk1CisjZGVmaW5lIFNBX05PVF9TQVZFX0hBU0gJCQkwCisjZGVmaW5lIFNBX1NBVkVfSEFTSAkJCQkxCisjZGVmaW5lIFNBX05PVF9TQVZFX0lWCQkJCTAKKyNkZWZpbmUgU0FfU0FWRV9JVgkJCQkxCisjZGVmaW5lIFNBX0hFQURFUl9QUk9DCQkJCTEKKyNkZWZpbmUgU0FfTk9fSEVBREVSX1BST0MJCQkwCisKK3VuaW9uIHNhX2NvbW1hbmRfMCB7CisJc3RydWN0IHsKKwkJdTMyIHNjYXR0ZXI6MTsKKwkJdTMyIGdhdGhlcjoxOworCQl1MzIgc2F2ZV9oYXNoX3N0YXRlOjE7CisJCXUzMiBzYXZlX2l2OjE7CisJCXUzMiBsb2FkX2hhc2hfc3RhdGU6MjsKKwkJdTMyIGxvYWRfaXY6MjsKKwkJdTMyIGRpZ2VzdF9sZW46NDsKKwkJdTMyIGhkcl9wcm9jOjE7CisJCXUzMiBleHRlbmRfcGFkOjE7CisJCXUzMiBzdHJlYW1fY2lwaGVyX3BhZDoxOworCQl1MzIgcnN2OjE7CisJCXUzMiBoYXNoX2FsZzo0OworCQl1MzIgY2lwaGVyX2FsZzo0OworCQl1MzIgcGFkX3R5cGU6MjsKKwkJdTMyIG9wX2dyb3VwOjI7CisJCXUzMiBkaXI6MTsKKwkJdTMyIG9wY29kZTozOworCX0gYmY7CisJdTMyIHc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIENSWVBUT19NT0RFX0VDQgkJCQkwCisjZGVmaW5lIENSWVBUT19NT0RFX0NCQwkJCQkxCisKKyNkZWZpbmUgQ1JZUFRPX0ZFRURCQUNLX01PREVfTk9fRkIJCTAKKyNkZWZpbmUgQ1JZUFRPX0ZFRURCQUNLX01PREVfNjRCSVRfT0ZCCQkwCisjZGVmaW5lIENSWVBUT19GRUVEQkFDS19NT0RFXzhCSVRfQ0ZCCQkxCisjZGVmaW5lIENSWVBUT19GRUVEQkFDS19NT0RFXzFCSVRfQ0ZCCQkyCisjZGVmaW5lIENSWVBUT19GRUVEQkFDS19NT0RFXzEyOEJJVF9DRkIJCTMKKworI2RlZmluZSBTQV9BRVNfS0VZX0xFTl8xMjgJCQkyCisjZGVmaW5lIFNBX0FFU19LRVlfTEVOXzE5MgkJCTMKKyNkZWZpbmUgU0FfQUVTX0tFWV9MRU5fMjU2CQkJNAorCisjZGVmaW5lIFNBX1JFVjIJCQkJCTEKKy8qKgorICogVGhlIGZvbGxvdyBkZWZpbmVzIGJpdHMgc2FfY29tbWFuZF8xCisgKiBJbiBCYXNpYyBoYXNoIG1vZGUgIHRoaXMgYml0IGRlZmluZSBzaW1wbGUgaGFzaCBvciBobWFjLgorICogSW4gSVBzZWMgbW9kZSwgdGhpcyBiaXQgZGVmaW5lIG11dGluZyBjb250cm9sLgorICovCisjZGVmaW5lIFNBX0hBU0hfTU9ERV9IQVNICQkJMAorI2RlZmluZSBTQV9IQVNIX01PREVfSE1BQwkJCTEKKyNkZWZpbmUgU0FfTUNfRU5BQkxFCQkJCTAKKyNkZWZpbmUgU0FfTUNfRElTQUJMRQkJCQkxCisjZGVmaW5lIFNBX05PVF9DT1BZX0hEUgkJCQkwCisjZGVmaW5lIFNBX0NPUFlfSERSCQkJCTEKKyNkZWZpbmUgU0FfTk9UX0NPUFlfUEFECQkJCTAKKyNkZWZpbmUgU0FfQ09QWV9QQUQJCQkJMQorI2RlZmluZSBTQV9OT1RfQ09QWV9QQVlMT0FECQkJMAorI2RlZmluZSBTQV9DT1BZX1BBWUxPQUQJCQkJMQorI2RlZmluZSBTQV9FWFRFTkRFRF9TTl9PRkYJCQkwCisjZGVmaW5lIFNBX0VYVEVOREVEX1NOX09OCQkJMQorI2RlZmluZSBTQV9TRVFfTUFTS19PRkYJCQkJMAorI2RlZmluZSBTQV9TRVFfTUFTS19PTgkJCQkxCisKK3VuaW9uIHNhX2NvbW1hbmRfMSB7CisJc3RydWN0IHsKKwkJdTMyIGNyeXB0b19tb2RlMzE6MTsKKwkJdTMyIHNhdmVfYXJjNF9zdGF0ZToxOworCQl1MzIgYXJjNF9zdGF0ZWZ1bDoxOworCQl1MzIga2V5X2xlbjo1OworCQl1MzIgaGFzaF9jcnlwdG9fb2Zmc2V0Ojg7CisJCXUzMiBzYV9yZXY6MjsKKwkJdTMyIGJ5dGVfb2Zmc2V0OjE7CisJCXUzMiBobWFjX211dGluZzoxOworCQl1MzIgZmVlZGJhY2tfbW9kZToyOworCQl1MzIgY3J5cHRvX21vZGU5Xzg6MjsKKwkJdTMyIGV4dGVuZGVkX3NlcV9udW06MTsKKwkJdTMyIHNlcV9udW1fbWFzazoxOworCQl1MzIgbXV0YWJsZV9iaXRfcHJvYzoxOworCQl1MzIgaXBfdmVyc2lvbjoxOworCQl1MzIgY29weV9wYWQ6MTsKKwkJdTMyIGNvcHlfcGF5bG9hZDoxOworCQl1MzIgY29weV9oZHI6MTsKKwkJdTMyIHJzdjE6MTsKKwl9IGJmOworCXUzMiB3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGR5bmFtaWNfc2FfY3RsIHsKKwl1MzIgc2FfY29udGVudHM7CisJdW5pb24gc2FfY29tbWFuZF8wIHNhX2NvbW1hbmRfMDsKKwl1bmlvbiBzYV9jb21tYW5kXzEgc2FfY29tbWFuZF8xOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBTdGF0ZSBSZWNvcmQgZm9yIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkKKyAqLworc3RydWN0ICBzYV9zdGF0ZV9yZWNvcmQgeworCXUzMiBzYXZlX2l2WzRdOworCXUzMiBzYXZlX2hhc2hfYnl0ZV9jbnRbMl07CisJdTMyIHNhdmVfZGlnZXN0WzE2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKgorICogU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSBmb3IgQUVTMTI4CisgKgorICovCitzdHJ1Y3QgZHluYW1pY19zYV9hZXMxMjggeworCXN0cnVjdCBkeW5hbWljX3NhX2N0bAljdHJsOworCXUzMiBrZXlbNF07CisJdTMyIGl2WzRdOyAvKiBmb3IgQ0JDLCBPRkMsIGFuZCBDRkIgbW9kZSAqLworCXUzMiBzdGF0ZV9wdHI7CisJdTMyIHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBTQV9BRVMxMjhfTEVOCQkoc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2FlczEyOCkvNCkKKyNkZWZpbmUgU0FfQUVTMTI4X0NPTlRFTlRTCTB4M2UwMDAwNDIKKworLyoKKyAqIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgZm9yIEFFUzE5MgorICovCitzdHJ1Y3QgZHluYW1pY19zYV9hZXMxOTIgeworCXN0cnVjdCBkeW5hbWljX3NhX2N0bCBjdHJsOworCXUzMiBrZXlbNl07CisJdTMyIGl2WzRdOyAvKiBmb3IgQ0JDLCBPRkMsIGFuZCBDRkIgbW9kZSAqLworCXUzMiBzdGF0ZV9wdHI7CisJdTMyIHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBTQV9BRVMxOTJfTEVOCQkoc2l6ZW9mKHN0cnVjdCBkeW5hbWljX3NhX2FlczE5MikvNCkKKyNkZWZpbmUgU0FfQUVTMTkyX0NPTlRFTlRTCTB4M2UwMDAwNjIKKworLyoqCisgKiBTZWN1cml0eSBBc3NvY2lhdGlvbiAoU0EpIGZvciBBRVMyNTYKKyAqLworc3RydWN0IGR5bmFtaWNfc2FfYWVzMjU2IHsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgY3RybDsKKwl1MzIga2V5WzhdOworCXUzMiBpdls0XTsgLyogZm9yIENCQywgT0ZDLCBhbmQgQ0ZCIG1vZGUgKi8KKwl1MzIgc3RhdGVfcHRyOworCXUzMiByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgU0FfQUVTMjU2X0xFTgkJKHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9hZXMyNTYpLzQpCisjZGVmaW5lIFNBX0FFUzI1Nl9DT05URU5UUwkweDNlMDAwMDgyCisjZGVmaW5lIFNBX0FFU19DT05URU5UUwkJMHgzZTAwMDAwMgorCisvKioKKyAqIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgZm9yIEhBU0gxNjA6IEhNQUMtU0hBMQorICovCitzdHJ1Y3QgZHluYW1pY19zYV9oYXNoMTYwIHsKKwlzdHJ1Y3QgZHluYW1pY19zYV9jdGwgY3RybDsKKwl1MzIgaW5uZXJfZGlnZXN0WzVdOworCXUzMiBvdXRlcl9kaWdlc3RbNV07CisJdTMyIHN0YXRlX3B0cjsKKwl1MzIgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworI2RlZmluZSBTQV9IQVNIMTYwX0xFTgkJKHNpemVvZihzdHJ1Y3QgZHluYW1pY19zYV9oYXNoMTYwKS80KQorI2RlZmluZSBTQV9IQVNIMTYwX0NPTlRFTlRTICAgICAweDIwMDBhNTAyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kY2EvZGNhLXN5c2ZzLmMgYi9kcml2ZXJzL2RjYS9kY2Etc3lzZnMuYwppbmRleCBiYjUzOGI5Li5lZTkxNmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RjYS9kY2Etc3lzZnMuYworKysgYi9kcml2ZXJzL2RjYS9kY2Etc3lzZnMuYwpAQCAtMSwzICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLworCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlvL2Rpby5jIGIvZHJpdmVycy9kaW8vZGlvLmMKaW5kZXggMTBjM2M0OS4uNTVkZDg4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kaW8vZGlvLmMKKysrIGIvZHJpdmVycy9kaW8vZGlvLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCiAJLyogSW5pdGlhbGl6ZSB0aGUgRElPIGJ1cyAqLyAKIAlJTklUX0xJU1RfSEVBRCgmZGlvX2J1cy5kZXZpY2VzKTsKLQlzdHJjcHkoZGlvX2J1cy5kZXYuYnVzX2lkLCAiZGlvIik7CisJZGV2X3NldF9uYW1lKCZkaW9fYnVzLmRldiwgImRpbyIpOwogCWVycm9yID0gZGV2aWNlX3JlZ2lzdGVyKCZkaW9fYnVzLmRldik7CiAJaWYgKGVycm9yKSB7CiAJCXByX2VycigiRElPOiBFcnJvciByZWdpc3RlcmluZyBkaW9fYnVzXG4iKTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogCQlkZXYtPnNjb2RlID0gc2NvZGU7CiAJCWRldi0+cmVzb3VyY2Uuc3RhcnQgPSBwYTsKIAkJZGV2LT5yZXNvdXJjZS5lbmQgPSBwYSArIERJT19TSVpFKHNjb2RlLCB2YSk7Ci0JCXNwcmludGYoZGV2LT5kZXYuYnVzX2lkLCIlMDJ4Iiwgc2NvZGUpOworCQlkZXZfc2V0X25hbWUoJmRldi0+ZGV2LCAiJTAyeCIsIHNjb2RlKTsKIAogICAgICAgICAgICAgICAgIC8qIHJlYWQgdGhlIElEIGJ5dGUocykgYW5kIGVuY29kZSBpZiBuZWNlc3NhcnkuICovCiAJCXByaWQgPSBESU9fSUQodmEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHdfZG1hYy5jIGIvZHJpdmVycy9kbWEvZHdfZG1hYy5jCmluZGV4IGE5N2MwN2UuLjIwYWQzZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2R3X2RtYWMuYworKysgYi9kcml2ZXJzL2RtYS9kd19kbWFjLmMKQEAgLTEwMTEsNyArMTAxMSw3IEBACiAJZG1hX3dyaXRlbChkdywgQ0ZHLCBEV19DRkdfRE1BX0VOKTsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBEZXNpZ25XYXJlIERNQSBDb250cm9sbGVyLCAlZCBjaGFubmVsc1xuIiwKLQkJCXBkZXYtPmRldi5idXNfaWQsIGR3LT5kbWEuY2hhbmNudCk7CisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSwgZHctPmRtYS5jaGFuY250KTsKIAogCWRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJmR3LT5kbWEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMgYi9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKaW5kZXggYWU1MGE5ZC4uZGE3ODFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCisrKyBiL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYwpAQCAtMTY0OSw3ICsxNjQ5LDcgQEAKIAl9CiAKIAkvKiBHZXQgSVBVIGNsb2NrICovCi0JaXB1X2RhdGEuaXB1X2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImlwdV9jbGsiKTsKKwlpcHVfZGF0YS5pcHVfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKGlwdV9kYXRhLmlwdV9jbGspKSB7CiAJCXJldCA9IFBUUl9FUlIoaXB1X2RhdGEuaXB1X2Nsayk7CiAJCWdvdG8gZXJyX2Nsa19nZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvY2VsbF9lZGFjLmMKaW5kZXggMjRmM2NhOC4uY2IwZjYzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2NlbGxfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9jZWxsX2VkYWMuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJbWNpLT5lZGFjX2NhcCA9IEVEQUNfRkxBR19FQyB8IEVEQUNfRkxBR19TRUNERUQ7CiAJbWNpLT5tb2RfbmFtZSA9ICJjZWxsX2VkYWMiOwogCW1jaS0+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+ZGV2KSk7CiAKIAkvKiBGaXJzdCB0cnkgdG8gZ2V0IGhvbGQgb2Ygc2xvdCAwLiBJZiB0aGVyZSBpcyBubyBkZXZpY2UKIAkgKiBoZXJlLCBzaW1wbHkgZmFpbCwgdW5sZXNzIHJvb3QtPmZvcmNlX3Byb2JlIGlzIHNldC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctY2FyZC5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1jYXJkLmMKaW5kZXggYTVkZDdhNi4uOGI4YzhjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1jYXJkLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1jYXJkLmMKQEAgLTYzLDggKzYzLDcgQEAKICNkZWZpbmUgQklCX0NNQwkJCSgoMSkgPDwgMzApCiAjZGVmaW5lIEJJQl9JTUMJCQkoKDEpIDw8IDMxKQogCi1zdGF0aWMgdTMyICoKLWdlbmVyYXRlX2NvbmZpZ19yb20oc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHNpemVfdCAqY29uZmlnX3JvbV9sZW5ndGgpCitzdGF0aWMgdTMyICpnZW5lcmF0ZV9jb25maWdfcm9tKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzaXplX3QgKmNvbmZpZ19yb21fbGVuZ3RoKQogewogCXN0cnVjdCBmd19kZXNjcmlwdG9yICpkZXNjOwogCXN0YXRpYyB1MzIgY29uZmlnX3JvbVsyNTZdOwpAQCAtMTI4LDggKzEyNyw3IEBACiAJcmV0dXJuIGNvbmZpZ19yb207CiB9CiAKLXN0YXRpYyB2b2lkCi11cGRhdGVfY29uZmlnX3JvbXModm9pZCkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jb25maWdfcm9tcyh2b2lkKQogewogCXN0cnVjdCBmd19jYXJkICpjYXJkOwogCXUzMiAqY29uZmlnX3JvbTsKQEAgLTE0MSw4ICsxMzksNyBAQAogCX0KIH0KIAotaW50Ci1md19jb3JlX2FkZF9kZXNjcmlwdG9yKHN0cnVjdCBmd19kZXNjcmlwdG9yICpkZXNjKQoraW50IGZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3Ioc3RydWN0IGZ3X2Rlc2NyaXB0b3IgKmRlc2MpCiB7CiAJc2l6ZV90IGk7CiAKQEAgLTE3MSw4ICsxNjgsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkCi1md19jb3JlX3JlbW92ZV9kZXNjcmlwdG9yKHN0cnVjdCBmd19kZXNjcmlwdG9yICpkZXNjKQordm9pZCBmd19jb3JlX3JlbW92ZV9kZXNjcmlwdG9yKHN0cnVjdCBmd19kZXNjcmlwdG9yICpkZXNjKQogewogCW11dGV4X2xvY2soJmNhcmRfbXV0ZXgpOwogCkBAIC0xODUsMTIgKzE4MSwzMCBAQAogCW11dGV4X3VubG9jaygmY2FyZF9tdXRleCk7CiB9CiAKK3N0YXRpYyBpbnQgc2V0X2Jyb2FkY2FzdF9jaGFubmVsKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmd19kZXZpY2Vfc2V0X2Jyb2FkY2FzdF9jaGFubmVsKGZ3X2RldmljZShkZXYpLCAobG9uZylkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWxsb2NhdGVfYnJvYWRjYXN0X2NoYW5uZWwoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBnZW5lcmF0aW9uKQoreworCWludCBjaGFubmVsLCBiYW5kd2lkdGggPSAwOworCisJZndfaXNvX3Jlc291cmNlX21hbmFnZShjYXJkLCBnZW5lcmF0aW9uLCAxVUxMIDw8IDMxLAorCQkJICAgICAgICZjaGFubmVsLCAmYmFuZHdpZHRoLCB0cnVlKTsKKwlpZiAoY2hhbm5lbCA9PSAzMSkgeworCQljYXJkLT5icm9hZGNhc3RfY2hhbm5lbF9hbGxvY2F0ZWQgPSB0cnVlOworCQlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoY2FyZC0+ZGV2aWNlLCAodm9pZCAqKShsb25nKWdlbmVyYXRpb24sCisJCQkJICAgICAgc2V0X2Jyb2FkY2FzdF9jaGFubmVsKTsKKwl9Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyIGdhcF9jb3VudF90YWJsZVtdID0gewogCTYzLCA1LCA3LCA4LCAxMCwgMTMsIDE2LCAxOCwgMjEsIDI0LCAyNiwgMjksIDMyLCAzNSwgMzcsIDQwCiB9OwogCi12b2lkCi1md19zY2hlZHVsZV9ibV93b3JrKHN0cnVjdCBmd19jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIGRlbGF5KQordm9pZCBmd19zY2hlZHVsZV9ibV93b3JrKHN0cnVjdCBmd19jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIGRlbGF5KQogewogCWludCBzY2hlZHVsZWQ7CiAKQEAgLTIwMCwzNyArMjE0LDM4IEBACiAJCWZ3X2NhcmRfcHV0KGNhcmQpOwogfQogCi1zdGF0aWMgdm9pZAotZndfY2FyZF9ibV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGZ3X2NhcmRfYm1fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGZ3X2NhcmQsIHdvcmsud29yayk7CiAJc3RydWN0IGZ3X2RldmljZSAqcm9vdF9kZXZpY2U7Ci0Jc3RydWN0IGZ3X25vZGUgKnJvb3Rfbm9kZSwgKmxvY2FsX25vZGU7CisJc3RydWN0IGZ3X25vZGUgKnJvb3Rfbm9kZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByb290X2lkLCBuZXdfcm9vdF9pZCwgaXJtX2lkLCBnYXBfY291bnQsIGdlbmVyYXRpb24sIGdyYWNlLCByY29kZTsKKwlpbnQgcm9vdF9pZCwgbmV3X3Jvb3RfaWQsIGlybV9pZCwgbG9jYWxfaWQ7CisJaW50IGdhcF9jb3VudCwgZ2VuZXJhdGlvbiwgZ3JhY2UsIHJjb2RlOwogCWJvb2wgZG9fcmVzZXQgPSBmYWxzZTsKIAlib29sIHJvb3RfZGV2aWNlX2lzX3J1bm5pbmc7CiAJYm9vbCByb290X2RldmljZV9pc19jbWM7CiAJX19iZTMyIGxvY2tfZGF0YVsyXTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0JbG9jYWxfbm9kZSA9IGNhcmQtPmxvY2FsX25vZGU7Ci0Jcm9vdF9ub2RlICA9IGNhcmQtPnJvb3Rfbm9kZTsKIAotCWlmIChsb2NhbF9ub2RlID09IE5VTEwpIHsKKwlpZiAoY2FyZC0+bG9jYWxfbm9kZSA9PSBOVUxMKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJZ290byBvdXRfcHV0X2NhcmQ7CiAJfQotCWZ3X25vZGVfZ2V0KGxvY2FsX25vZGUpOwotCWZ3X25vZGVfZ2V0KHJvb3Rfbm9kZSk7CiAKIAlnZW5lcmF0aW9uID0gY2FyZC0+Z2VuZXJhdGlvbjsKKwlyb290X25vZGUgPSBjYXJkLT5yb290X25vZGU7CisJZndfbm9kZV9nZXQocm9vdF9ub2RlKTsKIAlyb290X2RldmljZSA9IHJvb3Rfbm9kZS0+ZGF0YTsKIAlyb290X2RldmljZV9pc19ydW5uaW5nID0gcm9vdF9kZXZpY2UgJiYKIAkJCWF0b21pY19yZWFkKCZyb290X2RldmljZS0+c3RhdGUpID09IEZXX0RFVklDRV9SVU5OSU5HOwogCXJvb3RfZGV2aWNlX2lzX2NtYyA9IHJvb3RfZGV2aWNlICYmIHJvb3RfZGV2aWNlLT5jbWM7Ci0Jcm9vdF9pZCA9IHJvb3Rfbm9kZS0+bm9kZV9pZDsKLQlncmFjZSA9IHRpbWVfYWZ0ZXIoamlmZmllcywgY2FyZC0+cmVzZXRfamlmZmllcyArIERJVl9ST1VORF9VUChIWiwgMTApKTsKKwlyb290X2lkICA9IHJvb3Rfbm9kZS0+bm9kZV9pZDsKKwlpcm1faWQgICA9IGNhcmQtPmlybV9ub2RlLT5ub2RlX2lkOworCWxvY2FsX2lkID0gY2FyZC0+bG9jYWxfbm9kZS0+bm9kZV9pZDsKKworCWdyYWNlID0gdGltZV9hZnRlcihqaWZmaWVzLCBjYXJkLT5yZXNldF9qaWZmaWVzICsgRElWX1JPVU5EX1VQKEhaLCA4KSk7CiAKIAlpZiAoaXNfbmV4dF9nZW5lcmF0aW9uKGdlbmVyYXRpb24sIGNhcmQtPmJtX2dlbmVyYXRpb24pIHx8CiAJICAgIChjYXJkLT5ibV9nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24gJiYgZ3JhY2UpKSB7CkBAIC0yNDYsMTYgKzI2MSwxNSBAQAogCQkgKiBuZXh0IGdlbmVyYXRpb24uCiAJCSAqLwogCi0JCWlybV9pZCA9IGNhcmQtPmlybV9ub2RlLT5ub2RlX2lkOwogCQlpZiAoIWNhcmQtPmlybV9ub2RlLT5saW5rX29uKSB7Ci0JCQluZXdfcm9vdF9pZCA9IGxvY2FsX25vZGUtPm5vZGVfaWQ7CisJCQluZXdfcm9vdF9pZCA9IGxvY2FsX2lkOwogCQkJZndfbm90aWZ5KCJJUk0gaGFzIGxpbmsgb2ZmLCBtYWtpbmcgbG9jYWwgbm9kZSAoJTAyeCkgcm9vdC5cbiIsCiAJCQkJICBuZXdfcm9vdF9pZCk7CiAJCQlnb3RvIHBpY2tfbWU7CiAJCX0KIAogCQlsb2NrX2RhdGFbMF0gPSBjcHVfdG9fYmUzMigweDNmKTsKLQkJbG9ja19kYXRhWzFdID0gY3B1X3RvX2JlMzIobG9jYWxfbm9kZS0+bm9kZV9pZCk7CisJCWxvY2tfZGF0YVsxXSA9IGNwdV90b19iZTMyKGxvY2FsX2lkKTsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKQEAgLTI2OSw5ICsyODMsMTQgQEAKIAkJCWdvdG8gb3V0OwogCiAJCWlmIChyY29kZSA9PSBSQ09ERV9DT01QTEVURSAmJgotCQkgICAgbG9ja19kYXRhWzBdICE9IGNwdV90b19iZTMyKDB4M2YpKQotCQkJLyogU29tZWJvZHkgZWxzZSBpcyBCTSwgbGV0IHRoZW0gZG8gdGhlIHdvcmsuICovCisJCSAgICBsb2NrX2RhdGFbMF0gIT0gY3B1X3RvX2JlMzIoMHgzZikpIHsKKworCQkJLyogU29tZWJvZHkgZWxzZSBpcyBCTS4gIE9ubHkgYWN0IGFzIElSTS4gKi8KKwkJCWlmIChsb2NhbF9pZCA9PSBpcm1faWQpCisJCQkJYWxsb2NhdGVfYnJvYWRjYXN0X2NoYW5uZWwoY2FyZCwgZ2VuZXJhdGlvbik7CisKIAkJCWdvdG8gb3V0OworCQl9CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIApAQCAtMjgyLDE5ICszMDEsMTggQEAKIAkJCSAqIGRvIGEgYnVzIHJlc2V0IGFuZCBwaWNrIHRoZSBsb2NhbCBub2RlIGFzCiAJCQkgKiByb290LCBhbmQgdGh1cywgSVJNLgogCQkJICovCi0JCQluZXdfcm9vdF9pZCA9IGxvY2FsX25vZGUtPm5vZGVfaWQ7CisJCQluZXdfcm9vdF9pZCA9IGxvY2FsX2lkOwogCQkJZndfbm90aWZ5KCJCTSBsb2NrIGZhaWxlZCwgbWFraW5nIGxvY2FsIG5vZGUgKCUwMngpIHJvb3QuXG4iLAogCQkJCSAgbmV3X3Jvb3RfaWQpOwogCQkJZ290byBwaWNrX21lOwogCQl9CiAJfSBlbHNlIGlmIChjYXJkLT5ibV9nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pIHsKIAkJLyoKLQkJICogT0ssIHdlIHdlcmVuJ3QgQk0gaW4gdGhlIGxhc3QgZ2VuZXJhdGlvbiwgYW5kIGl0J3MKLQkJICogbGVzcyB0aGFuIDEwMG1zIHNpbmNlIGxhc3QgYnVzIHJlc2V0LiBSZXNjaGVkdWxlCi0JCSAqIHRoaXMgdGFzayAxMDBtcyBmcm9tIG5vdy4KKwkJICogV2Ugd2VyZW4ndCBCTSBpbiB0aGUgbGFzdCBnZW5lcmF0aW9uLCBhbmQgdGhlIGxhc3QKKwkJICogYnVzIHJlc2V0IGlzIGxlc3MgdGhhbiAxMjVtcyBhZ28uICBSZXNjaGVkdWxlIHRoaXMgam9iLgogCQkgKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwotCQlmd19zY2hlZHVsZV9ibV93b3JrKGNhcmQsIERJVl9ST1VORF9VUChIWiwgMTApKTsKKwkJZndfc2NoZWR1bGVfYm1fd29yayhjYXJkLCBESVZfUk9VTkRfVVAoSFosIDgpKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0zMTAsNyArMzI4LDcgQEAKIAkJICogRWl0aGVyIGxpbmtfb24gaXMgZmFsc2UsIG9yIHdlIGZhaWxlZCB0byByZWFkIHRoZQogCQkgKiBjb25maWcgcm9tLiAgSW4gZWl0aGVyIGNhc2UsIHBpY2sgYW5vdGhlciByb290LgogCQkgKi8KLQkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9ub2RlLT5ub2RlX2lkOworCQluZXdfcm9vdF9pZCA9IGxvY2FsX2lkOwogCX0gZWxzZSBpZiAoIXJvb3RfZGV2aWNlX2lzX3J1bm5pbmcpIHsKIAkJLyoKIAkJICogSWYgd2UgaGF2ZW4ndCBwcm9iZWQgdGhpcyBkZXZpY2UgeWV0LCBiYWlsIG91dCBub3cKQEAgLTMzMiw3ICszNTAsNyBAQAogCQkgKiBzdWNjZXNzZnVsbHkgcmVhZCB0aGUgY29uZmlnIHJvbSwgYnV0IGl0J3Mgbm90CiAJCSAqIGN5Y2xlIG1hc3RlciBjYXBhYmxlLgogCQkgKi8KLQkJbmV3X3Jvb3RfaWQgPSBsb2NhbF9ub2RlLT5ub2RlX2lkOworCQluZXdfcm9vdF9pZCA9IGxvY2FsX2lkOwogCX0KIAogIHBpY2tfbWU6CkBAIC0zNjMsMjUgKzM4MSwyOCBAQAogCQkJICBjYXJkLT5pbmRleCwgbmV3X3Jvb3RfaWQsIGdhcF9jb3VudCk7CiAJCWZ3X3NlbmRfcGh5X2NvbmZpZyhjYXJkLCBuZXdfcm9vdF9pZCwgZ2VuZXJhdGlvbiwgZ2FwX2NvdW50KTsKIAkJZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoY2FyZCwgMSk7CisJCS8qIFdpbGwgYWxsb2NhdGUgYnJvYWRjYXN0IGNoYW5uZWwgYWZ0ZXIgdGhlIHJlc2V0LiAqLworCX0gZWxzZSB7CisJCWlmIChsb2NhbF9pZCA9PSBpcm1faWQpCisJCQlhbGxvY2F0ZV9icm9hZGNhc3RfY2hhbm5lbChjYXJkLCBnZW5lcmF0aW9uKTsKIAl9CisKICBvdXQ6CiAJZndfbm9kZV9wdXQocm9vdF9ub2RlKTsKLQlmd19ub2RlX3B1dChsb2NhbF9ub2RlKTsKICBvdXRfcHV0X2NhcmQ6CiAJZndfY2FyZF9wdXQoY2FyZCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1mbHVzaF90aW1lcl9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBmbHVzaF90aW1lcl9jYWxsYmFjayh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSAoc3RydWN0IGZ3X2NhcmQgKilkYXRhOwogCiAJZndfZmx1c2hfdHJhbnNhY3Rpb25zKGNhcmQpOwogfQogCi12b2lkCi1md19jYXJkX2luaXRpYWxpemUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGNvbnN0IHN0cnVjdCBmd19jYXJkX2RyaXZlciAqZHJpdmVyLAotCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCit2b2lkIGZ3X2NhcmRfaW5pdGlhbGl6ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCWNvbnN0IHN0cnVjdCBmd19jYXJkX2RyaXZlciAqZHJpdmVyLAorCQkJc3RydWN0IGRldmljZSAqZGV2aWNlKQogewogCXN0YXRpYyBhdG9taWNfdCBpbmRleCA9IEFUT01JQ19JTklUKC0xKTsKIApAQCAtNDA2LDEzICs0MjcsMTIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZndfY2FyZF9pbml0aWFsaXplKTsKIAotaW50Ci1md19jYXJkX2FkZChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkgICAgdTMyIG1heF9yZWNlaXZlLCB1MzIgbGlua19zcGVlZCwgdTY0IGd1aWQpCitpbnQgZndfY2FyZF9hZGQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCXUzMiBtYXhfcmVjZWl2ZSwgdTMyIGxpbmtfc3BlZWQsIHU2NCBndWlkKQogewogCXUzMiAqY29uZmlnX3JvbTsKIAlzaXplX3QgbGVuZ3RoOwotCWludCBlcnI7CisJaW50IHJldDsKIAogCWNhcmQtPm1heF9yZWNlaXZlID0gbWF4X3JlY2VpdmU7CiAJY2FyZC0+bGlua19zcGVlZCA9IGxpbmtfc3BlZWQ7CkBAIC00MjMsMTMgKzQ0MywxNCBAQAogCWxpc3RfYWRkX3RhaWwoJmNhcmQtPmxpbmssICZjYXJkX2xpc3QpOwogCW11dGV4X3VubG9jaygmY2FyZF9tdXRleCk7CiAKLQllcnIgPSBjYXJkLT5kcml2ZXItPmVuYWJsZShjYXJkLCBjb25maWdfcm9tLCBsZW5ndGgpOwotCWlmIChlcnIgPCAwKSB7CisJcmV0ID0gY2FyZC0+ZHJpdmVyLT5lbmFibGUoY2FyZCwgY29uZmlnX3JvbSwgbGVuZ3RoKTsKKwlpZiAocmV0IDwgMCkgewogCQltdXRleF9sb2NrKCZjYXJkX211dGV4KTsKIAkJbGlzdF9kZWwoJmNhcmQtPmxpbmspOwogCQltdXRleF91bmxvY2soJmNhcmRfbXV0ZXgpOwogCX0KLQlyZXR1cm4gZXJyOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woZndfY2FyZF9hZGQpOwogCkBAIC00NDIsMjMgKzQ2MywyMCBAQAogICogZHVtbXkgZHJpdmVyIGp1c3QgZmFpbHMgYWxsIElPLgogICovCiAKLXN0YXRpYyBpbnQKLWR1bW15X2VuYWJsZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgdTMyICpjb25maWdfcm9tLCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIGludCBkdW1teV9lbmFibGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHUzMiAqY29uZmlnX3JvbSwgc2l6ZV90IGxlbmd0aCkKIHsKIAlCVUcoKTsKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQKLWR1bW15X3VwZGF0ZV9waHlfcmVnKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgYWRkcmVzcywKLQkJICAgICBpbnQgY2xlYXJfYml0cywgaW50IHNldF9iaXRzKQorc3RhdGljIGludCBkdW1teV91cGRhdGVfcGh5X3JlZyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGFkZHJlc3MsCisJCQkJaW50IGNsZWFyX2JpdHMsIGludCBzZXRfYml0cykKIHsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGludAotZHVtbXlfc2V0X2NvbmZpZ19yb20oc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCSAgICAgdTMyICpjb25maWdfcm9tLCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIGludCBkdW1teV9zZXRfY29uZmlnX3JvbShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCQl1MzIgKmNvbmZpZ19yb20sIHNpemVfdCBsZW5ndGgpCiB7CiAJLyoKIAkgKiBXZSB0YWtlIHRoZSBjYXJkIG91dCBvZiBjYXJkX2xpc3QgYmVmb3JlIHNldHRpbmcgdGhlIGR1bW15CkBAIC00NjgsMjcgKzQ4NiwyMyBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQKLWR1bW15X3NlbmRfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQorc3RhdGljIHZvaWQgZHVtbXlfc2VuZF9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCiB7CiAJcGFja2V0LT5jYWxsYmFjayhwYWNrZXQsIGNhcmQsIC1FTk9ERVYpOwogfQogCi1zdGF0aWMgdm9pZAotZHVtbXlfc2VuZF9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQorc3RhdGljIHZvaWQgZHVtbXlfc2VuZF9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQogewogCXBhY2tldC0+Y2FsbGJhY2socGFja2V0LCBjYXJkLCAtRU5PREVWKTsKIH0KIAotc3RhdGljIGludAotZHVtbXlfY2FuY2VsX3BhY2tldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQorc3RhdGljIGludCBkdW1teV9jYW5jZWxfcGFja2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCiB7CiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKLXN0YXRpYyBpbnQKLWR1bW15X2VuYWJsZV9waHlzX2RtYShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkJICAgICAgaW50IG5vZGVfaWQsIGludCBnZW5lcmF0aW9uKQorc3RhdGljIGludCBkdW1teV9lbmFibGVfcGh5c19kbWEoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkJIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbikKIHsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KQEAgLTUwMywxNiArNTE3LDE0IEBACiAJLmVuYWJsZV9waHlzX2RtYSA9IGR1bW15X2VuYWJsZV9waHlzX2RtYSwKIH07CiAKLXZvaWQKLWZ3X2NhcmRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3ZvaWQgZndfY2FyZF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBmd19jYXJkLCBrcmVmKTsKIAogCWNvbXBsZXRlKCZjYXJkLT5kb25lKTsKIH0KIAotdm9pZAotZndfY29yZV9yZW1vdmVfY2FyZChzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKK3ZvaWQgZndfY29yZV9yZW1vdmVfY2FyZChzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKIHsKIAljYXJkLT5kcml2ZXItPnVwZGF0ZV9waHlfcmVnKGNhcmQsIDQsCiAJCQkJICAgICBQSFlfTElOS19BQ1RJVkUgfCBQSFlfQ09OVEVOREVSLCAwKTsKQEAgLTUzNiw4ICs1NDgsNyBAQAogfQogRVhQT1JUX1NZTUJPTChmd19jb3JlX3JlbW92ZV9jYXJkKTsKIAotaW50Ci1md19jb3JlX2luaXRpYXRlX2J1c19yZXNldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHNob3J0X3Jlc2V0KQoraW50IGZ3X2NvcmVfaW5pdGlhdGVfYnVzX3Jlc2V0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc2hvcnRfcmVzZXQpCiB7CiAJaW50IHJlZyA9IHNob3J0X3Jlc2V0ID8gNSA6IDE7CiAJaW50IGJpdCA9IHNob3J0X3Jlc2V0ID8gUEhZX0JVU19TSE9SVF9SRVNFVCA6IFBIWV9CVVNfUkVTRVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWNkZXYuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctY2Rldi5jCmluZGV4IGVkMDMyMzQuLjdlYjY1OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctY2Rldi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctY2Rldi5jCkBAIC0xOCw2NyArMTgsNDAgQEAKICAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUtY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lkci5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLWNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJmdy10b3BvbG9neS5oIgorCiAjaW5jbHVkZSAiZnctZGV2aWNlLmgiCi0KLXN0cnVjdCBjbGllbnQ7Ci1zdHJ1Y3QgY2xpZW50X3Jlc291cmNlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7Ci0Jdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcik7Ci0JdTMyIGhhbmRsZTsKLX07Ci0KLS8qCi0gKiBkZXF1ZXVlX2V2ZW50KCkganVzdCBrZnJlZSgpJ3MgdGhlIGV2ZW50LCBzbyB0aGUgZXZlbnQgaGFzIHRvIGJlCi0gKiB0aGUgZmlyc3QgZmllbGQgaW4gdGhlIHN0cnVjdC4KLSAqLwotCi1zdHJ1Y3QgZXZlbnQgewotCXN0cnVjdCB7IHZvaWQgKmRhdGE7IHNpemVfdCBzaXplOyB9IHZbMl07Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaW5rOwotfTsKLQotc3RydWN0IGJ1c19yZXNldCB7Ci0Jc3RydWN0IGV2ZW50IGV2ZW50OwotCXN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCByZXNldDsKLX07Ci0KLXN0cnVjdCByZXNwb25zZSB7Ci0Jc3RydWN0IGV2ZW50IGV2ZW50OwotCXN0cnVjdCBmd190cmFuc2FjdGlvbiB0cmFuc2FjdGlvbjsKLQlzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKLQlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXNwb25zZSByZXNwb25zZTsKLX07Ci0KLXN0cnVjdCBpc29faW50ZXJydXB0IHsKLQlzdHJ1Y3QgZXZlbnQgZXZlbnQ7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdCBpbnRlcnJ1cHQ7Ci19OworI2luY2x1ZGUgImZ3LXRvcG9sb2d5LmgiCisjaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKIAogc3RydWN0IGNsaWVudCB7CiAJdTMyIHZlcnNpb247CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlOworCiAJc3BpbmxvY2tfdCBsb2NrOwotCXUzMiByZXNvdXJjZV9oYW5kbGU7Ci0Jc3RydWN0IGxpc3RfaGVhZCByZXNvdXJjZV9saXN0OworCWJvb2wgaW5fc2h1dGRvd247CisJc3RydWN0IGlkciByZXNvdXJjZV9pZHI7CiAJc3RydWN0IGxpc3RfaGVhZCBldmVudF9saXN0OwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiAJdTY0IGJ1c19yZXNldF9jbG9zdXJlOwpAQCAtODksMTYgKzYyLDExOCBAQAogCXVuc2lnbmVkIGxvbmcgdm1fc3RhcnQ7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJc3RydWN0IGtyZWYga3JlZjsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKgotdTY0X3RvX3VwdHIoX191NjQgdmFsdWUpCitzdGF0aWMgaW5saW5lIHZvaWQgY2xpZW50X2dldChzdHJ1Y3QgY2xpZW50ICpjbGllbnQpCit7CisJa3JlZl9nZXQoJmNsaWVudC0+a3JlZik7Cit9CisKK3N0YXRpYyB2b2lkIGNsaWVudF9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgY2xpZW50LCBrcmVmKTsKKworCWZ3X2RldmljZV9wdXQoY2xpZW50LT5kZXZpY2UpOworCWtmcmVlKGNsaWVudCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsaWVudF9wdXQoc3RydWN0IGNsaWVudCAqY2xpZW50KQoreworCWtyZWZfcHV0KCZjbGllbnQtPmtyZWYsIGNsaWVudF9yZWxlYXNlKTsKK30KKworc3RydWN0IGNsaWVudF9yZXNvdXJjZTsKK3R5cGVkZWYgdm9pZCAoKmNsaWVudF9yZXNvdXJjZV9yZWxlYXNlX2ZuX3QpKHN0cnVjdCBjbGllbnQgKiwKKwkJCQkJICAgICBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICopOworc3RydWN0IGNsaWVudF9yZXNvdXJjZSB7CisJY2xpZW50X3Jlc291cmNlX3JlbGVhc2VfZm5fdCByZWxlYXNlOworCWludCBoYW5kbGU7Cit9OworCitzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyX3Jlc291cmNlIHsKKwlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlIHJlc291cmNlOworCXN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgaGFuZGxlcjsKKwlfX3U2NCBjbG9zdXJlOworCXN0cnVjdCBjbGllbnQgKmNsaWVudDsKK307CisKK3N0cnVjdCBvdXRib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSB7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKKwlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gdHJhbnNhY3Rpb247Cit9OworCitzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSB7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKKwlzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdDsKKwl2b2lkICpkYXRhOworCXNpemVfdCBsZW5ndGg7Cit9OworCitzdHJ1Y3QgZGVzY3JpcHRvcl9yZXNvdXJjZSB7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKKwlzdHJ1Y3QgZndfZGVzY3JpcHRvciBkZXNjcmlwdG9yOworCXUzMiBkYXRhWzBdOworfTsKKworc3RydWN0IGlzb19yZXNvdXJjZSB7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSByZXNvdXJjZTsKKwlzdHJ1Y3QgY2xpZW50ICpjbGllbnQ7CisJLyogU2NoZWR1bGUgd29yayBhbmQgYWNjZXNzIHRvZG8gb25seSB3aXRoIGNsaWVudC0+bG9jayBoZWxkLiAqLworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKKwllbnVtIHtJU09fUkVTX0FMTE9DLCBJU09fUkVTX1JFQUxMT0MsIElTT19SRVNfREVBTExPQywKKwkgICAgICBJU09fUkVTX0FMTE9DX09OQ0UsIElTT19SRVNfREVBTExPQ19PTkNFLH0gdG9kbzsKKwlpbnQgZ2VuZXJhdGlvbjsKKwl1NjQgY2hhbm5lbHM7CisJczMyIGJhbmR3aWR0aDsKKwlzdHJ1Y3QgaXNvX3Jlc291cmNlX2V2ZW50ICplX2FsbG9jLCAqZV9kZWFsbG9jOworfTsKKworc3RhdGljIHZvaWQgc2NoZWR1bGVfaXNvX3Jlc291cmNlKHN0cnVjdCBpc29fcmVzb3VyY2UgKik7CitzdGF0aWMgdm9pZCByZWxlYXNlX2lzb19yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICosIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKik7CisKKy8qCisgKiBkZXF1ZXVlX2V2ZW50KCkganVzdCBrZnJlZSgpJ3MgdGhlIGV2ZW50LCBzbyB0aGUgZXZlbnQgaGFzIHRvIGJlCisgKiB0aGUgZmlyc3QgZmllbGQgaW4gYSBzdHJ1Y3QgWFlaX2V2ZW50LgorICovCitzdHJ1Y3QgZXZlbnQgeworCXN0cnVjdCB7IHZvaWQgKmRhdGE7IHNpemVfdCBzaXplOyB9IHZbMl07CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOworfTsKKworc3RydWN0IGJ1c19yZXNldF9ldmVudCB7CisJc3RydWN0IGV2ZW50IGV2ZW50OworCXN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCByZXNldDsKK307CisKK3N0cnVjdCBvdXRib3VuZF90cmFuc2FjdGlvbl9ldmVudCB7CisJc3RydWN0IGV2ZW50IGV2ZW50OworCXN0cnVjdCBjbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3Qgb3V0Ym91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UgcjsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXNwb25zZSByZXNwb25zZTsKK307CisKK3N0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX2V2ZW50IHsKKwlzdHJ1Y3QgZXZlbnQgZXZlbnQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVxdWVzdCByZXF1ZXN0OworfTsKKworc3RydWN0IGlzb19pbnRlcnJ1cHRfZXZlbnQgeworCXN0cnVjdCBldmVudCBldmVudDsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0IGludGVycnVwdDsKK307CisKK3N0cnVjdCBpc29fcmVzb3VyY2VfZXZlbnQgeworCXN0cnVjdCBldmVudCBldmVudDsKKwlzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29fcmVzb3VyY2UgcmVzb3VyY2U7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgX191c2VyICp1NjRfdG9fdXB0cihfX3U2NCB2YWx1ZSkKIHsKIAlyZXR1cm4gKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpdmFsdWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX191NjQKLXVwdHJfdG9fdTY0KHZvaWQgX191c2VyICpwdHIpCitzdGF0aWMgaW5saW5lIF9fdTY0IHVwdHJfdG9fdTY0KHZvaWQgX191c2VyICpwdHIpCiB7CiAJcmV0dXJuIChfX3U2NCkodW5zaWduZWQgbG9uZylwdHI7CiB9CkBAIC0xMDcsNyArMTgyLDYgQEAKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2U7CiAJc3RydWN0IGNsaWVudCAqY2xpZW50OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlkZXZpY2UgPSBmd19kZXZpY2VfZ2V0X2J5X2RldnQoaW5vZGUtPmlfcmRldik7CiAJaWYgKGRldmljZSA9PSBOVUxMKQpAQCAtMTI1LDE2ICsxOTksMTcgQEAKIAl9CiAKIAljbGllbnQtPmRldmljZSA9IGRldmljZTsKLQlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5ldmVudF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmY2xpZW50LT5yZXNvdXJjZV9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmY2xpZW50LT5sb2NrKTsKKwlpZHJfaW5pdCgmY2xpZW50LT5yZXNvdXJjZV9pZHIpOworCUlOSVRfTElTVF9IRUFEKCZjbGllbnQtPmV2ZW50X2xpc3QpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNsaWVudC0+d2FpdCk7CisJa3JlZl9pbml0KCZjbGllbnQtPmtyZWYpOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2xpZW50OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJmRldmljZS0+Y2xpZW50X2xpc3RfbXV0ZXgpOwogCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+bGluaywgJmRldmljZS0+Y2xpZW50X2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZS0+Y2FyZC0+bG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmZGV2aWNlLT5jbGllbnRfbGlzdF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MCw2OCArMjI1LDY5IEBACiAJZXZlbnQtPnZbMV0uc2l6ZSA9IHNpemUxOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJmV2ZW50LT5saW5rLCAmY2xpZW50LT5ldmVudF9saXN0KTsKKwlpZiAoY2xpZW50LT5pbl9zaHV0ZG93bikKKwkJa2ZyZWUoZXZlbnQpOworCWVsc2UKKwkJbGlzdF9hZGRfdGFpbCgmZXZlbnQtPmxpbmssICZjbGllbnQtPmV2ZW50X2xpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOwogCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjbGllbnQtPndhaXQpOwogfQogCi1zdGF0aWMgaW50Ci1kZXF1ZXVlX2V2ZW50KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQorc3RhdGljIGludCBkZXF1ZXVlX2V2ZW50KHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJCSBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZXZlbnQgKmV2ZW50OwogCXNpemVfdCBzaXplLCB0b3RhbDsKLQlpbnQgaSwgcmV0dmFsOworCWludCBpLCByZXQ7CiAKLQlyZXR2YWwgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoY2xpZW50LT53YWl0LAotCQkJCQkgICFsaXN0X2VtcHR5KCZjbGllbnQtPmV2ZW50X2xpc3QpIHx8Ci0JCQkJCSAgZndfZGV2aWNlX2lzX3NodXRkb3duKGNsaWVudC0+ZGV2aWNlKSk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7CisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNsaWVudC0+d2FpdCwKKwkJCSFsaXN0X2VtcHR5KCZjbGllbnQtPmV2ZW50X2xpc3QpIHx8CisJCQlmd19kZXZpY2VfaXNfc2h1dGRvd24oY2xpZW50LT5kZXZpY2UpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAogCWlmIChsaXN0X2VtcHR5KCZjbGllbnQtPmV2ZW50X2xpc3QpICYmCiAJCSAgICAgICBmd19kZXZpY2VfaXNfc2h1dGRvd24oY2xpZW50LT5kZXZpY2UpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKLQlldmVudCA9IGNvbnRhaW5lcl9vZihjbGllbnQtPmV2ZW50X2xpc3QubmV4dCwgc3RydWN0IGV2ZW50LCBsaW5rKTsKKwlzcGluX2xvY2tfaXJxKCZjbGllbnQtPmxvY2spOworCWV2ZW50ID0gbGlzdF9maXJzdF9lbnRyeSgmY2xpZW50LT5ldmVudF9saXN0LCBzdHJ1Y3QgZXZlbnQsIGxpbmspOwogCWxpc3RfZGVsKCZldmVudC0+bGluayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxKCZjbGllbnQtPmxvY2spOwogCiAJdG90YWwgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGV2ZW50LT52KSAmJiB0b3RhbCA8IGNvdW50OyBpKyspIHsKIAkJc2l6ZSA9IG1pbihldmVudC0+dltpXS5zaXplLCBjb3VudCAtIHRvdGFsKTsKIAkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIgKyB0b3RhbCwgZXZlbnQtPnZbaV0uZGF0YSwgc2l6ZSkpIHsKLQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJdG90YWwgKz0gc2l6ZTsKIAl9Ci0JcmV0dmFsID0gdG90YWw7CisJcmV0ID0gdG90YWw7CiAKICBvdXQ6CiAJa2ZyZWUoZXZlbnQpOwogCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3NpemVfdAotZndfZGV2aWNlX29wX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKK3N0YXRpYyBzc2l6ZV90IGZ3X2RldmljZV9vcF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQogewogCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAogCXJldHVybiBkZXF1ZXVlX2V2ZW50KGNsaWVudCwgYnVmZmVyLCBjb3VudCk7CiB9CiAKLS8qIGNhbGxlciBtdXN0IGhvbGQgY2FyZC0+bG9jayBzbyB0aGF0IG5vZGUgcG9pbnRlcnMgY2FuIGJlIGRlcmVmZXJlbmNlZCBoZXJlICovCi1zdGF0aWMgdm9pZAotZmlsbF9idXNfcmVzZXRfZXZlbnQoc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0ICpldmVudCwKLQkJICAgICBzdHJ1Y3QgY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCBmaWxsX2J1c19yZXNldF9ldmVudChzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQgKmV2ZW50LAorCQkJCSBzdHJ1Y3QgY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBjbGllbnQtPmRldmljZS0+Y2FyZDsKIAorCXNwaW5fbG9ja19pcnEoJmNhcmQtPmxvY2spOworCiAJZXZlbnQtPmNsb3N1cmUJICAgICA9IGNsaWVudC0+YnVzX3Jlc2V0X2Nsb3N1cmU7CiAJZXZlbnQtPnR5cGUgICAgICAgICAgPSBGV19DREVWX0VWRU5UX0JVU19SRVNFVDsKIAlldmVudC0+Z2VuZXJhdGlvbiAgICA9IGNsaWVudC0+ZGV2aWNlLT5nZW5lcmF0aW9uOwpAQCAtMjIwLDM5ICsyOTYsNDkgQEAKIAlldmVudC0+Ym1fbm9kZV9pZCAgICA9IDA7IC8qIEZJWE1FOiBXZSBkb24ndCB0cmFjayB0aGUgQk0uICovCiAJZXZlbnQtPmlybV9ub2RlX2lkICAgPSBjYXJkLT5pcm1fbm9kZS0+bm9kZV9pZDsKIAlldmVudC0+cm9vdF9ub2RlX2lkICA9IGNhcmQtPnJvb3Rfbm9kZS0+bm9kZV9pZDsKKworCXNwaW5fdW5sb2NrX2lycSgmY2FyZC0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkCi1mb3JfZWFjaF9jbGllbnQoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLAotCQl2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBjbGllbnQgKmNsaWVudCkpCitzdGF0aWMgdm9pZCBmb3JfZWFjaF9jbGllbnQoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLAorCQkJICAgIHZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGNsaWVudCAqY2xpZW50KSkKIHsKLQlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGRldmljZS0+Y2FyZDsKIAlzdHJ1Y3QgY2xpZW50ICpjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwotCisJbXV0ZXhfbG9jaygmZGV2aWNlLT5jbGllbnRfbGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmZGV2aWNlLT5jbGllbnRfbGlzdCwgbGluaykKIAkJY2FsbGJhY2soYyk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZkZXZpY2UtPmNsaWVudF9saXN0X211dGV4KTsKIH0KIAotc3RhdGljIHZvaWQKLXF1ZXVlX2J1c19yZXNldF9ldmVudChzdHJ1Y3QgY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IHNjaGVkdWxlX3JlYWxsb2NhdGlvbnMoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBidXNfcmVzZXQgKmJ1c19yZXNldDsKKwlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyID0gcDsKIAotCWJ1c19yZXNldCA9IGt6YWxsb2Moc2l6ZW9mKCpidXNfcmVzZXQpLCBHRlBfQVRPTUlDKTsKLQlpZiAoYnVzX3Jlc2V0ID09IE5VTEwpIHsKKwlpZiAoci0+cmVsZWFzZSA9PSByZWxlYXNlX2lzb19yZXNvdXJjZSkKKwkJc2NoZWR1bGVfaXNvX3Jlc291cmNlKGNvbnRhaW5lcl9vZihyLAorCQkJCQlzdHJ1Y3QgaXNvX3Jlc291cmNlLCByZXNvdXJjZSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxdWV1ZV9idXNfcmVzZXRfZXZlbnQoc3RydWN0IGNsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBidXNfcmVzZXRfZXZlbnQgKmU7CisKKwllID0ga3phbGxvYyhzaXplb2YoKmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZSA9PSBOVUxMKSB7CiAJCWZ3X25vdGlmeSgiT3V0IG9mIG1lbW9yeSB3aGVuIGFsbG9jYXRpbmcgYnVzIHJlc2V0IGV2ZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWZpbGxfYnVzX3Jlc2V0X2V2ZW50KCZidXNfcmVzZXQtPnJlc2V0LCBjbGllbnQpOworCWZpbGxfYnVzX3Jlc2V0X2V2ZW50KCZlLT5yZXNldCwgY2xpZW50KTsKIAotCXF1ZXVlX2V2ZW50KGNsaWVudCwgJmJ1c19yZXNldC0+ZXZlbnQsCi0JCSAgICAmYnVzX3Jlc2V0LT5yZXNldCwgc2l6ZW9mKGJ1c19yZXNldC0+cmVzZXQpLCBOVUxMLCAwKTsKKwlxdWV1ZV9ldmVudChjbGllbnQsICZlLT5ldmVudCwKKwkJICAgICZlLT5yZXNldCwgc2l6ZW9mKGUtPnJlc2V0KSwgTlVMTCwgMCk7CisKKwlzcGluX2xvY2tfaXJxKCZjbGllbnQtPmxvY2spOworCWlkcl9mb3JfZWFjaCgmY2xpZW50LT5yZXNvdXJjZV9pZHIsIHNjaGVkdWxlX3JlYWxsb2NhdGlvbnMsIGNsaWVudCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjbGllbnQtPmxvY2spOwogfQogCiB2b2lkIGZ3X2RldmljZV9jZGV2X3VwZGF0ZShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpCkBAIC0yNzQsMTEgKzM2MCwxMSBAQAogewogCXN0cnVjdCBmd19jZGV2X2dldF9pbmZvICpnZXRfaW5mbyA9IGJ1ZmZlcjsKIAlzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQgYnVzX3Jlc2V0OwotCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQ7CiAJdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCiAJY2xpZW50LT52ZXJzaW9uID0gZ2V0X2luZm8tPnZlcnNpb247CiAJZ2V0X2luZm8tPnZlcnNpb24gPSBGV19DREVWX1ZFUlNJT047CisJZ2V0X2luZm8tPmNhcmQgPSBjbGllbnQtPmRldmljZS0+Y2FyZC0+aW5kZXg7CiAKIAlkb3duX3JlYWQoJmZ3X2RldmljZV9yd3NlbSk7CiAKQEAgLTMwMCw0OSArMzg2LDYxIEBACiAJY2xpZW50LT5idXNfcmVzZXRfY2xvc3VyZSA9IGdldF9pbmZvLT5idXNfcmVzZXRfY2xvc3VyZTsKIAlpZiAoZ2V0X2luZm8tPmJ1c19yZXNldCAhPSAwKSB7CiAJCXZvaWQgX191c2VyICp1cHRyID0gdTY0X3RvX3VwdHIoZ2V0X2luZm8tPmJ1c19yZXNldCk7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJZmlsbF9idXNfcmVzZXRfZXZlbnQoJmJ1c19yZXNldCwgY2xpZW50KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwotCiAJCWlmIChjb3B5X3RvX3VzZXIodXB0ciwgJmJ1c19yZXNldCwgc2l6ZW9mKGJ1c19yZXNldCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JZ2V0X2luZm8tPmNhcmQgPSBjYXJkLT5pbmRleDsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotYWRkX2NsaWVudF9yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQorc3RhdGljIGludCBhZGRfY2xpZW50X3Jlc291cmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJCSAgICAgICBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisgcmV0cnk6CisJaWYgKGlkcl9wcmVfZ2V0KCZjbGllbnQtPnJlc291cmNlX2lkciwgZ2ZwX21hc2spID09IDApCisJCXJldHVybiAtRU5PTUVNOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJnJlc291cmNlLT5saW5rLCAmY2xpZW50LT5yZXNvdXJjZV9saXN0KTsKLQlyZXNvdXJjZS0+aGFuZGxlID0gY2xpZW50LT5yZXNvdXJjZV9oYW5kbGUrKzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIGludAotcmVsZWFzZV9jbGllbnRfcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1MzIgaGFuZGxlLAotCQkJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqKnJlc291cmNlKQotewotCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHIsICZjbGllbnQtPnJlc291cmNlX2xpc3QsIGxpbmspIHsKLQkJaWYgKHItPmhhbmRsZSA9PSBoYW5kbGUpIHsKLQkJCWxpc3RfZGVsKCZyLT5saW5rKTsKLQkJCWJyZWFrOwotCQl9CisJaWYgKGNsaWVudC0+aW5fc2h1dGRvd24pCisJCXJldCA9IC1FQ0FOQ0VMRUQ7CisJZWxzZQorCQlyZXQgPSBpZHJfZ2V0X25ldygmY2xpZW50LT5yZXNvdXJjZV9pZHIsIHJlc291cmNlLAorCQkJCSAgJnJlc291cmNlLT5oYW5kbGUpOworCWlmIChyZXQgPj0gMCkgeworCQljbGllbnRfZ2V0KGNsaWVudCk7CisJCWlmIChyZXNvdXJjZS0+cmVsZWFzZSA9PSByZWxlYXNlX2lzb19yZXNvdXJjZSkKKwkJCXNjaGVkdWxlX2lzb19yZXNvdXJjZShjb250YWluZXJfb2YocmVzb3VyY2UsCisJCQkJCQlzdHJ1Y3QgaXNvX3Jlc291cmNlLCByZXNvdXJjZSkpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmxvY2ssIGZsYWdzKTsKIAotCWlmICgmci0+bGluayA9PSAmY2xpZW50LT5yZXNvdXJjZV9saXN0KQorCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJZ290byByZXRyeTsKKworCXJldHVybiByZXQgPCAwID8gcmV0IDogMDsKK30KKworc3RhdGljIGludCByZWxlYXNlX2NsaWVudF9yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHUzMiBoYW5kbGUsCisJCQkJICAgY2xpZW50X3Jlc291cmNlX3JlbGVhc2VfZm5fdCByZWxlYXNlLAorCQkJCSAgIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKipyZXNvdXJjZSkKK3sKKwlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyOworCisJc3Bpbl9sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKwlpZiAoY2xpZW50LT5pbl9zaHV0ZG93bikKKwkJciA9IE5VTEw7CisJZWxzZQorCQlyID0gaWRyX2ZpbmQoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBoYW5kbGUpOworCWlmIChyICYmIHItPnJlbGVhc2UgPT0gcmVsZWFzZSkKKwkJaWRyX3JlbW92ZSgmY2xpZW50LT5yZXNvdXJjZV9pZHIsIGhhbmRsZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZjbGllbnQtPmxvY2spOworCisJaWYgKCEociAmJiByLT5yZWxlYXNlID09IHJlbGVhc2UpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChyZXNvdXJjZSkKQEAgLTM1MCwyMDMgKzQ0OCwyMzkgQEAKIAllbHNlCiAJCXItPnJlbGVhc2UoY2xpZW50LCByKTsKIAorCWNsaWVudF9wdXQoY2xpZW50KTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotcmVsZWFzZV90cmFuc2FjdGlvbihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQorc3RhdGljIHZvaWQgcmVsZWFzZV90cmFuc2FjdGlvbihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2UpCiB7Ci0Jc3RydWN0IHJlc3BvbnNlICpyZXNwb25zZSA9Ci0JCWNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IHJlc3BvbnNlLCByZXNvdXJjZSk7CisJc3RydWN0IG91dGJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlICpyID0gY29udGFpbmVyX29mKHJlc291cmNlLAorCQkJc3RydWN0IG91dGJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlLCByZXNvdXJjZSk7CiAKLQlmd19jYW5jZWxfdHJhbnNhY3Rpb24oY2xpZW50LT5kZXZpY2UtPmNhcmQsICZyZXNwb25zZS0+dHJhbnNhY3Rpb24pOworCWZ3X2NhbmNlbF90cmFuc2FjdGlvbihjbGllbnQtPmRldmljZS0+Y2FyZCwgJnItPnRyYW5zYWN0aW9uKTsKIH0KIAotc3RhdGljIHZvaWQKLWNvbXBsZXRlX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCi0JCSAgICAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCisJCQkJIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IHJlc3BvbnNlICpyZXNwb25zZSA9IGRhdGE7Ci0Jc3RydWN0IGNsaWVudCAqY2xpZW50ID0gcmVzcG9uc2UtPmNsaWVudDsKKwlzdHJ1Y3Qgb3V0Ym91bmRfdHJhbnNhY3Rpb25fZXZlbnQgKmUgPSBkYXRhOworCXN0cnVjdCBmd19jZGV2X2V2ZW50X3Jlc3BvbnNlICpyc3AgPSAmZS0+cmVzcG9uc2U7CisJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZS0+Y2xpZW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVzcG9uc2UgKnIgPSAmcmVzcG9uc2UtPnJlc3BvbnNlOwogCi0JaWYgKGxlbmd0aCA8IHItPmxlbmd0aCkKLQkJci0+bGVuZ3RoID0gbGVuZ3RoOworCWlmIChsZW5ndGggPCByc3AtPmxlbmd0aCkKKwkJcnNwLT5sZW5ndGggPSBsZW5ndGg7CiAJaWYgKHJjb2RlID09IFJDT0RFX0NPTVBMRVRFKQotCQltZW1jcHkoci0+ZGF0YSwgcGF5bG9hZCwgci0+bGVuZ3RoKTsKKwkJbWVtY3B5KHJzcC0+ZGF0YSwgcGF5bG9hZCwgcnNwLT5sZW5ndGgpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNsaWVudC0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZyZXNwb25zZS0+cmVzb3VyY2UubGluayk7CisJLyoKKwkgKiAxLiBJZiBjYWxsZWQgd2hpbGUgaW4gc2h1dGRvd24sIHRoZSBpZHIgdHJlZSBtdXN0IGJlIGxlZnQgdW50b3VjaGVkLgorCSAqICAgIFRoZSBpZHIgaGFuZGxlIHdpbGwgYmUgcmVtb3ZlZCBhbmQgdGhlIGNsaWVudCByZWZlcmVuY2Ugd2lsbCBiZQorCSAqICAgIGRyb3BwZWQgbGF0ZXIuCisJICogMi4gSWYgdGhlIGNhbGwgY2hhaW4gd2FzIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlIC0+CisJICogICAgcmVsZWFzZV90cmFuc2FjdGlvbiAtPiBjb21wbGV0ZV90cmFuc2FjdGlvbiAoaW5zdGVhZCBvZiBhIG5vcm1hbAorCSAqICAgIGNvbmNsdXNpb24gb2YgdGhlIHRyYW5zYWN0aW9uKSwgaS5lLiBpZiB0aGlzIHJlc291cmNlIHdhcyBhbHJlYWR5CisJICogICAgdW5yZWdpc3RlcmVkIGZyb20gdGhlIGlkciwgdGhlIGNsaWVudCByZWZlcmVuY2Ugd2lsbCBiZSBkcm9wcGVkCisJICogICAgYnkgcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UgYW5kIHdlIG11c3Qgbm90IGRyb3AgaXQgaGVyZS4KKwkgKi8KKwlpZiAoIWNsaWVudC0+aW5fc2h1dGRvd24gJiYKKwkgICAgaWRyX2ZpbmQoJmNsaWVudC0+cmVzb3VyY2VfaWRyLCBlLT5yLnJlc291cmNlLmhhbmRsZSkpIHsKKwkJaWRyX3JlbW92ZSgmY2xpZW50LT5yZXNvdXJjZV9pZHIsIGUtPnIucmVzb3VyY2UuaGFuZGxlKTsKKwkJLyogRHJvcCB0aGUgaWRyJ3MgcmVmZXJlbmNlICovCisJCWNsaWVudF9wdXQoY2xpZW50KTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT5sb2NrLCBmbGFncyk7CiAKLQlyLT50eXBlICAgPSBGV19DREVWX0VWRU5UX1JFU1BPTlNFOwotCXItPnJjb2RlICA9IHJjb2RlOworCXJzcC0+dHlwZSA9IEZXX0NERVZfRVZFTlRfUkVTUE9OU0U7CisJcnNwLT5yY29kZSA9IHJjb2RlOwogCiAJLyoKLQkgKiBJbiB0aGUgY2FzZSB0aGF0IHNpemVvZigqcikgZG9lc24ndCBhbGlnbiB3aXRoIHRoZSBwb3NpdGlvbiBvZiB0aGUKKwkgKiBJbiB0aGUgY2FzZSB0aGF0IHNpemVvZigqcnNwKSBkb2Vzbid0IGFsaWduIHdpdGggdGhlIHBvc2l0aW9uIG9mIHRoZQogCSAqIGRhdGEsIGFuZCB0aGUgcmVhZCBpcyBzaG9ydCwgcHJlc2VydmUgYW4gZXh0cmEgY29weSBvZiB0aGUgZGF0YQogCSAqIHRvIHN0YXkgY29tcGF0aWJsZSB3aXRoIGEgcHJlLTIuNi4yNyBidWcuICBTaW5jZSB0aGUgYnVnIGlzIGhhcm1sZXNzCiAJICogZm9yIHNob3J0IHJlYWRzIGFuZCBzb21lIGFwcHMgZGVwZW5kZWQgb24gaXQsIHRoaXMgaXMgYm90aCBzYWZlCiAJICogYW5kIHBydWRlbnQgZm9yIGNvbXBhdGliaWxpdHkuCiAJICovCi0JaWYgKHItPmxlbmd0aCA8PSBzaXplb2YoKnIpIC0gb2Zmc2V0b2YodHlwZW9mKCpyKSwgZGF0YSkpCi0JCXF1ZXVlX2V2ZW50KGNsaWVudCwgJnJlc3BvbnNlLT5ldmVudCwgciwgc2l6ZW9mKCpyKSwKLQkJCSAgICByLT5kYXRhLCByLT5sZW5ndGgpOworCWlmIChyc3AtPmxlbmd0aCA8PSBzaXplb2YoKnJzcCkgLSBvZmZzZXRvZih0eXBlb2YoKnJzcCksIGRhdGEpKQorCQlxdWV1ZV9ldmVudChjbGllbnQsICZlLT5ldmVudCwgcnNwLCBzaXplb2YoKnJzcCksCisJCQkgICAgcnNwLT5kYXRhLCByc3AtPmxlbmd0aCk7CiAJZWxzZQotCQlxdWV1ZV9ldmVudChjbGllbnQsICZyZXNwb25zZS0+ZXZlbnQsIHIsIHNpemVvZigqcikgKyByLT5sZW5ndGgsCisJCXF1ZXVlX2V2ZW50KGNsaWVudCwgJmUtPmV2ZW50LCByc3AsIHNpemVvZigqcnNwKSArIHJzcC0+bGVuZ3RoLAogCQkJICAgIE5VTEwsIDApOworCisJLyogRHJvcCB0aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sncyByZWZlcmVuY2UgKi8KKwljbGllbnRfcHV0KGNsaWVudCk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9yZXF1ZXN0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCAqcmVxdWVzdCwKKwkJCWludCBkZXN0aW5hdGlvbl9pZCwgaW50IHNwZWVkKQoreworCXN0cnVjdCBvdXRib3VuZF90cmFuc2FjdGlvbl9ldmVudCAqZTsKKwlpbnQgcmV0OworCisJaWYgKHJlcXVlc3QtPnRjb2RlICE9IFRDT0RFX1NUUkVBTV9EQVRBICYmCisJICAgIChyZXF1ZXN0LT5sZW5ndGggPiA0MDk2IHx8IHJlcXVlc3QtPmxlbmd0aCA+IDUxMiA8PCBzcGVlZCkpCisJCXJldHVybiAtRUlPOworCisJZSA9IGttYWxsb2Moc2l6ZW9mKCplKSArIHJlcXVlc3QtPmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllLT5jbGllbnQgPSBjbGllbnQ7CisJZS0+cmVzcG9uc2UubGVuZ3RoID0gcmVxdWVzdC0+bGVuZ3RoOworCWUtPnJlc3BvbnNlLmNsb3N1cmUgPSByZXF1ZXN0LT5jbG9zdXJlOworCisJaWYgKHJlcXVlc3QtPmRhdGEgJiYKKwkgICAgY29weV9mcm9tX3VzZXIoZS0+cmVzcG9uc2UuZGF0YSwKKwkJCSAgIHU2NF90b191cHRyKHJlcXVlc3QtPmRhdGEpLCByZXF1ZXN0LT5sZW5ndGgpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZmFpbGVkOworCX0KKworCWUtPnIucmVzb3VyY2UucmVsZWFzZSA9IHJlbGVhc2VfdHJhbnNhY3Rpb247CisJcmV0ID0gYWRkX2NsaWVudF9yZXNvdXJjZShjbGllbnQsICZlLT5yLnJlc291cmNlLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwkvKiBHZXQgYSByZWZlcmVuY2UgZm9yIHRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjayAqLworCWNsaWVudF9nZXQoY2xpZW50KTsKKworCWZ3X3NlbmRfcmVxdWVzdChjbGllbnQtPmRldmljZS0+Y2FyZCwgJmUtPnIudHJhbnNhY3Rpb24sCisJCQlyZXF1ZXN0LT50Y29kZSwgZGVzdGluYXRpb25faWQsIHJlcXVlc3QtPmdlbmVyYXRpb24sCisJCQlzcGVlZCwgcmVxdWVzdC0+b2Zmc2V0LCBlLT5yZXNwb25zZS5kYXRhLAorCQkJcmVxdWVzdC0+bGVuZ3RoLCBjb21wbGV0ZV90cmFuc2FjdGlvbiwgZSk7CisJcmV0dXJuIDA7CisKKyBmYWlsZWQ6CisJa2ZyZWUoZSk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGlvY3RsX3NlbmRfcmVxdWVzdChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKIHsKLQlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBjbGllbnQtPmRldmljZTsKIAlzdHJ1Y3QgZndfY2Rldl9zZW5kX3JlcXVlc3QgKnJlcXVlc3QgPSBidWZmZXI7Ci0Jc3RydWN0IHJlc3BvbnNlICpyZXNwb25zZTsKIAotCS8qIFdoYXQgaXMgdGhlIGJpZ2dlc3Qgc2l6ZSB3ZSdsbCBhY2NlcHQsIHJlYWxseT8gKi8KLQlpZiAocmVxdWVzdC0+bGVuZ3RoID4gNDA5NikKKwlzd2l0Y2ggKHJlcXVlc3QtPnRjb2RlKSB7CisJY2FzZSBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1Q6CisJY2FzZSBUQ09ERV9XUklURV9CTE9DS19SRVFVRVNUOgorCWNhc2UgVENPREVfUkVBRF9RVUFETEVUX1JFUVVFU1Q6CisJY2FzZSBUQ09ERV9SRUFEX0JMT0NLX1JFUVVFU1Q6CisJY2FzZSBUQ09ERV9MT0NLX01BU0tfU1dBUDoKKwljYXNlIFRDT0RFX0xPQ0tfQ09NUEFSRV9TV0FQOgorCWNhc2UgVENPREVfTE9DS19GRVRDSF9BREQ6CisJY2FzZSBUQ09ERV9MT0NLX0xJVFRMRV9BREQ6CisJY2FzZSBUQ09ERV9MT0NLX0JPVU5ERURfQUREOgorCWNhc2UgVENPREVfTE9DS19XUkFQX0FERDoKKwljYXNlIFRDT0RFX0xPQ0tfVkVORE9SX0RFUEVOREVOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXNwb25zZSA9IGttYWxsb2Moc2l6ZW9mKCpyZXNwb25zZSkgKyByZXF1ZXN0LT5sZW5ndGgsIEdGUF9LRVJORUwpOwotCWlmIChyZXNwb25zZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJlc3BvbnNlLT5jbGllbnQgPSBjbGllbnQ7Ci0JcmVzcG9uc2UtPnJlc3BvbnNlLmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKLQlyZXNwb25zZS0+cmVzcG9uc2UuY2xvc3VyZSA9IHJlcXVlc3QtPmNsb3N1cmU7Ci0KLQlpZiAocmVxdWVzdC0+ZGF0YSAmJgotCSAgICBjb3B5X2Zyb21fdXNlcihyZXNwb25zZS0+cmVzcG9uc2UuZGF0YSwKLQkJCSAgIHU2NF90b191cHRyKHJlcXVlc3QtPmRhdGEpLCByZXF1ZXN0LT5sZW5ndGgpKSB7Ci0JCWtmcmVlKHJlc3BvbnNlKTsKLQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JcmVzcG9uc2UtPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX3RyYW5zYWN0aW9uOwotCWFkZF9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCAmcmVzcG9uc2UtPnJlc291cmNlKTsKLQotCWZ3X3NlbmRfcmVxdWVzdChkZXZpY2UtPmNhcmQsICZyZXNwb25zZS0+dHJhbnNhY3Rpb24sCi0JCQlyZXF1ZXN0LT50Y29kZSAmIDB4MWYsCi0JCQlkZXZpY2UtPm5vZGUtPm5vZGVfaWQsCi0JCQlyZXF1ZXN0LT5nZW5lcmF0aW9uLAotCQkJZGV2aWNlLT5tYXhfc3BlZWQsCi0JCQlyZXF1ZXN0LT5vZmZzZXQsCi0JCQlyZXNwb25zZS0+cmVzcG9uc2UuZGF0YSwgcmVxdWVzdC0+bGVuZ3RoLAotCQkJY29tcGxldGVfdHJhbnNhY3Rpb24sIHJlc3BvbnNlKTsKLQotCWlmIChyZXF1ZXN0LT5kYXRhKQotCQlyZXR1cm4gc2l6ZW9mKHJlcXVlc3QpICsgcmVxdWVzdC0+bGVuZ3RoOwotCWVsc2UKLQkJcmV0dXJuIHNpemVvZihyZXF1ZXN0KTsKKwlyZXR1cm4gaW5pdF9yZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgY2xpZW50LT5kZXZpY2UtPm5vZGVfaWQsCisJCQkgICAgY2xpZW50LT5kZXZpY2UtPm1heF9zcGVlZCk7CiB9CiAKLXN0cnVjdCBhZGRyZXNzX2hhbmRsZXIgewotCXN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgaGFuZGxlcjsKLQlfX3U2NCBjbG9zdXJlOwotCXN0cnVjdCBjbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlIHJlc291cmNlOwotfTsKLQotc3RydWN0IHJlcXVlc3QgewotCXN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0OwotCXZvaWQgKmRhdGE7Ci0Jc2l6ZV90IGxlbmd0aDsKLQlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlIHJlc291cmNlOwotfTsKLQotc3RydWN0IHJlcXVlc3RfZXZlbnQgewotCXN0cnVjdCBldmVudCBldmVudDsKLQlzdHJ1Y3QgZndfY2Rldl9ldmVudF9yZXF1ZXN0IHJlcXVlc3Q7Ci19OwotCi1zdGF0aWMgdm9pZAotcmVsZWFzZV9yZXF1ZXN0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2UpCitzdGF0aWMgdm9pZCByZWxlYXNlX3JlcXVlc3Qoc3RydWN0IGNsaWVudCAqY2xpZW50LAorCQkJICAgIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQogewotCXN0cnVjdCByZXF1ZXN0ICpyZXF1ZXN0ID0KLQkJY29udGFpbmVyX29mKHJlc291cmNlLCBzdHJ1Y3QgcmVxdWVzdCwgcmVzb3VyY2UpOworCXN0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlICpyID0gY29udGFpbmVyX29mKHJlc291cmNlLAorCQkJc3RydWN0IGluYm91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UsIHJlc291cmNlKTsKIAotCWZ3X3NlbmRfcmVzcG9uc2UoY2xpZW50LT5kZXZpY2UtPmNhcmQsIHJlcXVlc3QtPnJlcXVlc3QsCisJZndfc2VuZF9yZXNwb25zZShjbGllbnQtPmRldmljZS0+Y2FyZCwgci0+cmVxdWVzdCwKIAkJCSBSQ09ERV9DT05GTElDVF9FUlJPUik7Ci0Ja2ZyZWUocmVxdWVzdCk7CisJa2ZyZWUocik7CiB9CiAKLXN0YXRpYyB2b2lkCi1oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3JlcXVlc3QgKnIsCi0JICAgICAgIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLAotCSAgICAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAotCSAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAotCSAgICAgICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQorc3RhdGljIHZvaWQgaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAorCQkJICAgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsCisJCQkgICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAorCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJCSAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7Ci0Jc3RydWN0IGFkZHJlc3NfaGFuZGxlciAqaGFuZGxlciA9IGNhbGxiYWNrX2RhdGE7Ci0Jc3RydWN0IHJlcXVlc3QgKnJlcXVlc3Q7Ci0Jc3RydWN0IHJlcXVlc3RfZXZlbnQgKmU7Ci0Jc3RydWN0IGNsaWVudCAqY2xpZW50ID0gaGFuZGxlci0+Y2xpZW50OworCXN0cnVjdCBhZGRyZXNzX2hhbmRsZXJfcmVzb3VyY2UgKmhhbmRsZXIgPSBjYWxsYmFja19kYXRhOworCXN0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX3Jlc291cmNlICpyOworCXN0cnVjdCBpbmJvdW5kX3RyYW5zYWN0aW9uX2V2ZW50ICplOworCWludCByZXQ7CiAKLQlyZXF1ZXN0ID0ga21hbGxvYyhzaXplb2YoKnJlcXVlc3QpLCBHRlBfQVRPTUlDKTsKKwlyID0ga21hbGxvYyhzaXplb2YoKnIpLCBHRlBfQVRPTUlDKTsKIAllID0ga21hbGxvYyhzaXplb2YoKmUpLCBHRlBfQVRPTUlDKTsKLQlpZiAocmVxdWVzdCA9PSBOVUxMIHx8IGUgPT0gTlVMTCkgewotCQlrZnJlZShyZXF1ZXN0KTsKLQkJa2ZyZWUoZSk7Ci0JCWZ3X3NlbmRfcmVzcG9uc2UoY2FyZCwgciwgUkNPREVfQ09ORkxJQ1RfRVJST1IpOwotCQlyZXR1cm47Ci0JfQorCWlmIChyID09IE5VTEwgfHwgZSA9PSBOVUxMKQorCQlnb3RvIGZhaWxlZDsKIAotCXJlcXVlc3QtPnJlcXVlc3QgPSByOwotCXJlcXVlc3QtPmRhdGEgICAgPSBwYXlsb2FkOwotCXJlcXVlc3QtPmxlbmd0aCAgPSBsZW5ndGg7CisJci0+cmVxdWVzdCA9IHJlcXVlc3Q7CisJci0+ZGF0YSAgICA9IHBheWxvYWQ7CisJci0+bGVuZ3RoICA9IGxlbmd0aDsKIAotCXJlcXVlc3QtPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX3JlcXVlc3Q7Ci0JYWRkX2NsaWVudF9yZXNvdXJjZShjbGllbnQsICZyZXF1ZXN0LT5yZXNvdXJjZSk7CisJci0+cmVzb3VyY2UucmVsZWFzZSA9IHJlbGVhc2VfcmVxdWVzdDsKKwlyZXQgPSBhZGRfY2xpZW50X3Jlc291cmNlKGhhbmRsZXItPmNsaWVudCwgJnItPnJlc291cmNlLCBHRlBfQVRPTUlDKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CiAKIAllLT5yZXF1ZXN0LnR5cGUgICAgPSBGV19DREVWX0VWRU5UX1JFUVVFU1Q7CiAJZS0+cmVxdWVzdC50Y29kZSAgID0gdGNvZGU7CiAJZS0+cmVxdWVzdC5vZmZzZXQgID0gb2Zmc2V0OwogCWUtPnJlcXVlc3QubGVuZ3RoICA9IGxlbmd0aDsKLQllLT5yZXF1ZXN0LmhhbmRsZSAgPSByZXF1ZXN0LT5yZXNvdXJjZS5oYW5kbGU7CisJZS0+cmVxdWVzdC5oYW5kbGUgID0gci0+cmVzb3VyY2UuaGFuZGxlOwogCWUtPnJlcXVlc3QuY2xvc3VyZSA9IGhhbmRsZXItPmNsb3N1cmU7CiAKLQlxdWV1ZV9ldmVudChjbGllbnQsICZlLT5ldmVudCwKKwlxdWV1ZV9ldmVudChoYW5kbGVyLT5jbGllbnQsICZlLT5ldmVudCwKIAkJICAgICZlLT5yZXF1ZXN0LCBzaXplb2YoZS0+cmVxdWVzdCksIHBheWxvYWQsIGxlbmd0aCk7CisJcmV0dXJuOworCisgZmFpbGVkOgorCWtmcmVlKHIpOworCWtmcmVlKGUpOworCWZ3X3NlbmRfcmVzcG9uc2UoY2FyZCwgcmVxdWVzdCwgUkNPREVfQ09ORkxJQ1RfRVJST1IpOwogfQogCi1zdGF0aWMgdm9pZAotcmVsZWFzZV9hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGNsaWVudCAqY2xpZW50LAotCQkJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2UpCitzdGF0aWMgdm9pZCByZWxlYXNlX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkJICAgIHN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnJlc291cmNlKQogewotCXN0cnVjdCBhZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXIgPQotCQljb250YWluZXJfb2YocmVzb3VyY2UsIHN0cnVjdCBhZGRyZXNzX2hhbmRsZXIsIHJlc291cmNlKTsKKwlzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyX3Jlc291cmNlICpyID0KKwkgICAgY29udGFpbmVyX29mKHJlc291cmNlLCBzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyX3Jlc291cmNlLCByZXNvdXJjZSk7CiAKLQlmd19jb3JlX3JlbW92ZV9hZGRyZXNzX2hhbmRsZXIoJmhhbmRsZXItPmhhbmRsZXIpOwotCWtmcmVlKGhhbmRsZXIpOworCWZ3X2NvcmVfcmVtb3ZlX2FkZHJlc3NfaGFuZGxlcigmci0+aGFuZGxlcik7CisJa2ZyZWUocik7CiB9CiAKIHN0YXRpYyBpbnQgaW9jdGxfYWxsb2NhdGUoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCiB7CiAJc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGUgKnJlcXVlc3QgPSBidWZmZXI7Ci0Jc3RydWN0IGFkZHJlc3NfaGFuZGxlciAqaGFuZGxlcjsKKwlzdHJ1Y3QgYWRkcmVzc19oYW5kbGVyX3Jlc291cmNlICpyOwogCXN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiByZWdpb247CisJaW50IHJldDsKIAotCWhhbmRsZXIgPSBrbWFsbG9jKHNpemVvZigqaGFuZGxlciksIEdGUF9LRVJORUwpOwotCWlmIChoYW5kbGVyID09IE5VTEwpCisJciA9IGttYWxsb2Moc2l6ZW9mKCpyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZWdpb24uc3RhcnQgPSByZXF1ZXN0LT5vZmZzZXQ7CiAJcmVnaW9uLmVuZCA9IHJlcXVlc3QtPm9mZnNldCArIHJlcXVlc3QtPmxlbmd0aDsKLQloYW5kbGVyLT5oYW5kbGVyLmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKLQloYW5kbGVyLT5oYW5kbGVyLmFkZHJlc3NfY2FsbGJhY2sgPSBoYW5kbGVfcmVxdWVzdDsKLQloYW5kbGVyLT5oYW5kbGVyLmNhbGxiYWNrX2RhdGEgPSBoYW5kbGVyOwotCWhhbmRsZXItPmNsb3N1cmUgPSByZXF1ZXN0LT5jbG9zdXJlOwotCWhhbmRsZXItPmNsaWVudCA9IGNsaWVudDsKKwlyLT5oYW5kbGVyLmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKKwlyLT5oYW5kbGVyLmFkZHJlc3NfY2FsbGJhY2sgPSBoYW5kbGVfcmVxdWVzdDsKKwlyLT5oYW5kbGVyLmNhbGxiYWNrX2RhdGEgPSByOworCXItPmNsb3N1cmUgPSByZXF1ZXN0LT5jbG9zdXJlOworCXItPmNsaWVudCA9IGNsaWVudDsKIAotCWlmIChmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoJmhhbmRsZXItPmhhbmRsZXIsICZyZWdpb24pIDwgMCkgewotCQlrZnJlZShoYW5kbGVyKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwlyZXQgPSBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoJnItPmhhbmRsZXIsICZyZWdpb24pOworCWlmIChyZXQgPCAwKSB7CisJCWtmcmVlKHIpOworCQlyZXR1cm4gcmV0OwogCX0KIAotCWhhbmRsZXItPnJlc291cmNlLnJlbGVhc2UgPSByZWxlYXNlX2FkZHJlc3NfaGFuZGxlcjsKLQlhZGRfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgJmhhbmRsZXItPnJlc291cmNlKTsKLQlyZXF1ZXN0LT5oYW5kbGUgPSBoYW5kbGVyLT5yZXNvdXJjZS5oYW5kbGU7CisJci0+cmVzb3VyY2UucmVsZWFzZSA9IHJlbGVhc2VfYWRkcmVzc19oYW5kbGVyOworCXJldCA9IGFkZF9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCAmci0+cmVzb3VyY2UsIEdGUF9LRVJORUwpOworCWlmIChyZXQgPCAwKSB7CisJCXJlbGVhc2VfYWRkcmVzc19oYW5kbGVyKGNsaWVudCwgJnItPnJlc291cmNlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmVxdWVzdC0+aGFuZGxlID0gci0+cmVzb3VyY2UuaGFuZGxlOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NTUsMTggKzY4OSwyMiBAQAogewogCXN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUgKnJlcXVlc3QgPSBidWZmZXI7CiAKLQlyZXR1cm4gcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsIE5VTEwpOworCXJldHVybiByZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QtPmhhbmRsZSwKKwkJCQkgICAgICAgcmVsZWFzZV9hZGRyZXNzX2hhbmRsZXIsIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IGlvY3RsX3NlbmRfcmVzcG9uc2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCiB7CiAJc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXNwb25zZSAqcmVxdWVzdCA9IGJ1ZmZlcjsKIAlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcjsKKwlzdHJ1Y3QgaW5ib3VuZF90cmFuc2FjdGlvbl9yZXNvdXJjZSAqcjsKIAotCWlmIChyZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QtPmhhbmRsZSwgJnJlc291cmNlKSA8IDApCisJaWYgKHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdC0+aGFuZGxlLAorCQkJCSAgICByZWxlYXNlX3JlcXVlc3QsICZyZXNvdXJjZSkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyID0gY29udGFpbmVyX29mKHJlc291cmNlLCBzdHJ1Y3QgcmVxdWVzdCwgcmVzb3VyY2UpOworCisJciA9IGNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IGluYm91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UsCisJCQkgcmVzb3VyY2UpOwogCWlmIChyZXF1ZXN0LT5sZW5ndGggPCByLT5sZW5ndGgpCiAJCXItPmxlbmd0aCA9IHJlcXVlc3QtPmxlbmd0aDsKIAlpZiAoY29weV9mcm9tX3VzZXIoci0+ZGF0YSwgdTY0X3RvX3VwdHIocmVxdWVzdC0+ZGF0YSksIHItPmxlbmd0aCkpCkBAIC01ODgsODUgKzcyNiw5MiBAQAogCXJldHVybiBmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldChjbGllbnQtPmRldmljZS0+Y2FyZCwgc2hvcnRfcmVzZXQpOwogfQogCi1zdHJ1Y3QgZGVzY3JpcHRvciB7Ci0Jc3RydWN0IGZ3X2Rlc2NyaXB0b3IgZDsKLQlzdHJ1Y3QgY2xpZW50X3Jlc291cmNlIHJlc291cmNlOwotCXUzMiBkYXRhWzBdOwotfTsKLQogc3RhdGljIHZvaWQgcmVsZWFzZV9kZXNjcmlwdG9yKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKIAkJCSAgICAgICBzdHJ1Y3QgY2xpZW50X3Jlc291cmNlICpyZXNvdXJjZSkKIHsKLQlzdHJ1Y3QgZGVzY3JpcHRvciAqZGVzY3JpcHRvciA9Ci0JCWNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IGRlc2NyaXB0b3IsIHJlc291cmNlKTsKKwlzdHJ1Y3QgZGVzY3JpcHRvcl9yZXNvdXJjZSAqciA9CisJCWNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IGRlc2NyaXB0b3JfcmVzb3VyY2UsIHJlc291cmNlKTsKIAotCWZ3X2NvcmVfcmVtb3ZlX2Rlc2NyaXB0b3IoJmRlc2NyaXB0b3ItPmQpOwotCWtmcmVlKGRlc2NyaXB0b3IpOworCWZ3X2NvcmVfcmVtb3ZlX2Rlc2NyaXB0b3IoJnItPmRlc2NyaXB0b3IpOworCWtmcmVlKHIpOwogfQogCiBzdGF0aWMgaW50IGlvY3RsX2FkZF9kZXNjcmlwdG9yKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQogewogCXN0cnVjdCBmd19jZGV2X2FkZF9kZXNjcmlwdG9yICpyZXF1ZXN0ID0gYnVmZmVyOwotCXN0cnVjdCBkZXNjcmlwdG9yICpkZXNjcmlwdG9yOwotCWludCByZXR2YWw7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBjbGllbnQtPmRldmljZS0+Y2FyZDsKKwlzdHJ1Y3QgZGVzY3JpcHRvcl9yZXNvdXJjZSAqcjsKKwlpbnQgcmV0OworCisJLyogQWNjZXNzIHBvbGljeTogQWxsb3cgdGhpcyBpb2N0bCBvbmx5IG9uIGxvY2FsIG5vZGVzJyBkZXZpY2UgZmlsZXMuICovCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+bG9jayk7CisJcmV0ID0gY2xpZW50LT5kZXZpY2UtPm5vZGVfaWQgIT0gY2FyZC0+bG9jYWxfbm9kZS0+bm9kZV9pZDsKKwlzcGluX3VubG9ja19pcnEoJmNhcmQtPmxvY2spOworCWlmIChyZXQpCisJCXJldHVybiAtRU5PU1lTOwogCiAJaWYgKHJlcXVlc3QtPmxlbmd0aCA+IDI1NikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkZXNjcmlwdG9yID0KLQkJa21hbGxvYyhzaXplb2YoKmRlc2NyaXB0b3IpICsgcmVxdWVzdC0+bGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlc2NyaXB0b3IgPT0gTlVMTCkKKwlyID0ga21hbGxvYyhzaXplb2YoKnIpICsgcmVxdWVzdC0+bGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7CisJaWYgKHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoZGVzY3JpcHRvci0+ZGF0YSwKKwlpZiAoY29weV9mcm9tX3VzZXIoci0+ZGF0YSwKIAkJCSAgIHU2NF90b191cHRyKHJlcXVlc3QtPmRhdGEpLCByZXF1ZXN0LT5sZW5ndGggKiA0KSkgewotCQlrZnJlZShkZXNjcmlwdG9yKTsKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZmFpbGVkOwogCX0KIAotCWRlc2NyaXB0b3ItPmQubGVuZ3RoID0gcmVxdWVzdC0+bGVuZ3RoOwotCWRlc2NyaXB0b3ItPmQuaW1tZWRpYXRlID0gcmVxdWVzdC0+aW1tZWRpYXRlOwotCWRlc2NyaXB0b3ItPmQua2V5ID0gcmVxdWVzdC0+a2V5OwotCWRlc2NyaXB0b3ItPmQuZGF0YSA9IGRlc2NyaXB0b3ItPmRhdGE7CisJci0+ZGVzY3JpcHRvci5sZW5ndGggICAgPSByZXF1ZXN0LT5sZW5ndGg7CisJci0+ZGVzY3JpcHRvci5pbW1lZGlhdGUgPSByZXF1ZXN0LT5pbW1lZGlhdGU7CisJci0+ZGVzY3JpcHRvci5rZXkgICAgICAgPSByZXF1ZXN0LT5rZXk7CisJci0+ZGVzY3JpcHRvci5kYXRhICAgICAgPSByLT5kYXRhOwogCi0JcmV0dmFsID0gZndfY29yZV9hZGRfZGVzY3JpcHRvcigmZGVzY3JpcHRvci0+ZCk7Ci0JaWYgKHJldHZhbCA8IDApIHsKLQkJa2ZyZWUoZGVzY3JpcHRvcik7Ci0JCXJldHVybiByZXR2YWw7CisJcmV0ID0gZndfY29yZV9hZGRfZGVzY3JpcHRvcigmci0+ZGVzY3JpcHRvcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCisJci0+cmVzb3VyY2UucmVsZWFzZSA9IHJlbGVhc2VfZGVzY3JpcHRvcjsKKwlyZXQgPSBhZGRfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgJnItPnJlc291cmNlLCBHRlBfS0VSTkVMKTsKKwlpZiAocmV0IDwgMCkgeworCQlmd19jb3JlX3JlbW92ZV9kZXNjcmlwdG9yKCZyLT5kZXNjcmlwdG9yKTsKKwkJZ290byBmYWlsZWQ7CiAJfQotCi0JZGVzY3JpcHRvci0+cmVzb3VyY2UucmVsZWFzZSA9IHJlbGVhc2VfZGVzY3JpcHRvcjsKLQlhZGRfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgJmRlc2NyaXB0b3ItPnJlc291cmNlKTsKLQlyZXF1ZXN0LT5oYW5kbGUgPSBkZXNjcmlwdG9yLT5yZXNvdXJjZS5oYW5kbGU7CisJcmVxdWVzdC0+aGFuZGxlID0gci0+cmVzb3VyY2UuaGFuZGxlOwogCiAJcmV0dXJuIDA7CisgZmFpbGVkOgorCWtmcmVlKHIpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpb2N0bF9yZW1vdmVfZGVzY3JpcHRvcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKIHsKIAlzdHJ1Y3QgZndfY2Rldl9yZW1vdmVfZGVzY3JpcHRvciAqcmVxdWVzdCA9IGJ1ZmZlcjsKIAotCXJldHVybiByZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QtPmhhbmRsZSwgTlVMTCk7CisJcmV0dXJuIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdC0+aGFuZGxlLAorCQkJCSAgICAgICByZWxlYXNlX2Rlc2NyaXB0b3IsIE5VTEwpOwogfQogCi1zdGF0aWMgdm9pZAotaXNvX2NhbGxiYWNrKHN0cnVjdCBmd19pc29fY29udGV4dCAqY29udGV4dCwgdTMyIGN5Y2xlLAotCSAgICAgc2l6ZV90IGhlYWRlcl9sZW5ndGgsIHZvaWQgKmhlYWRlciwgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGlzb19jYWxsYmFjayhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmNvbnRleHQsIHUzMiBjeWNsZSwKKwkJCSBzaXplX3QgaGVhZGVyX2xlbmd0aCwgdm9pZCAqaGVhZGVyLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGRhdGE7Ci0Jc3RydWN0IGlzb19pbnRlcnJ1cHQgKmlycTsKKwlzdHJ1Y3QgaXNvX2ludGVycnVwdF9ldmVudCAqZTsKIAotCWlycSA9IGt6YWxsb2Moc2l6ZW9mKCppcnEpICsgaGVhZGVyX2xlbmd0aCwgR0ZQX0FUT01JQyk7Ci0JaWYgKGlycSA9PSBOVUxMKQorCWUgPSBremFsbG9jKHNpemVvZigqZSkgKyBoZWFkZXJfbGVuZ3RoLCBHRlBfQVRPTUlDKTsKKwlpZiAoZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlpcnEtPmludGVycnVwdC50eXBlICAgICAgPSBGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQ7Ci0JaXJxLT5pbnRlcnJ1cHQuY2xvc3VyZSAgID0gY2xpZW50LT5pc29fY2xvc3VyZTsKLQlpcnEtPmludGVycnVwdC5jeWNsZSAgICAgPSBjeWNsZTsKLQlpcnEtPmludGVycnVwdC5oZWFkZXJfbGVuZ3RoID0gaGVhZGVyX2xlbmd0aDsKLQltZW1jcHkoaXJxLT5pbnRlcnJ1cHQuaGVhZGVyLCBoZWFkZXIsIGhlYWRlcl9sZW5ndGgpOwotCXF1ZXVlX2V2ZW50KGNsaWVudCwgJmlycS0+ZXZlbnQsICZpcnEtPmludGVycnVwdCwKLQkJICAgIHNpemVvZihpcnEtPmludGVycnVwdCkgKyBoZWFkZXJfbGVuZ3RoLCBOVUxMLCAwKTsKKwllLT5pbnRlcnJ1cHQudHlwZSAgICAgID0gRldfQ0RFVl9FVkVOVF9JU09fSU5URVJSVVBUOworCWUtPmludGVycnVwdC5jbG9zdXJlICAgPSBjbGllbnQtPmlzb19jbG9zdXJlOworCWUtPmludGVycnVwdC5jeWNsZSAgICAgPSBjeWNsZTsKKwllLT5pbnRlcnJ1cHQuaGVhZGVyX2xlbmd0aCA9IGhlYWRlcl9sZW5ndGg7CisJbWVtY3B5KGUtPmludGVycnVwdC5oZWFkZXIsIGhlYWRlciwgaGVhZGVyX2xlbmd0aCk7CisJcXVldWVfZXZlbnQoY2xpZW50LCAmZS0+ZXZlbnQsICZlLT5pbnRlcnJ1cHQsCisJCSAgICBzaXplb2YoZS0+aW50ZXJydXB0KSArIGhlYWRlcl9sZW5ndGgsIE5VTEwsIDApOwogfQogCiBzdGF0aWMgaW50IGlvY3RsX2NyZWF0ZV9pc29fY29udGV4dChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKQEAgLTg3MSw2ICsxMDE2LDI2MSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBpc29fcmVzb3VyY2Vfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGlzb19yZXNvdXJjZV9ldmVudCAqZTsKKwlzdHJ1Y3QgaXNvX3Jlc291cmNlICpyID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXNvX3Jlc291cmNlLCB3b3JrLndvcmspOworCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IHItPmNsaWVudDsKKwlpbnQgZ2VuZXJhdGlvbiwgY2hhbm5lbCwgYmFuZHdpZHRoLCB0b2RvOworCWJvb2wgc2tpcCwgZnJlZSwgc3VjY2VzczsKKworCXNwaW5fbG9ja19pcnEoJmNsaWVudC0+bG9jayk7CisJZ2VuZXJhdGlvbiA9IGNsaWVudC0+ZGV2aWNlLT5nZW5lcmF0aW9uOworCXRvZG8gPSByLT50b2RvOworCS8qIEFsbG93IDEwMDBtcyBncmFjZSBwZXJpb2QgZm9yIG90aGVyIHJlYWxsb2NhdGlvbnMuICovCisJaWYgKHRvZG8gPT0gSVNPX1JFU19BTExPQyAmJgorCSAgICB0aW1lX2lzX2FmdGVyX2ppZmZpZXMoY2xpZW50LT5kZXZpY2UtPmNhcmQtPnJlc2V0X2ppZmZpZXMgKyBIWikpIHsKKwkJaWYgKHNjaGVkdWxlX2RlbGF5ZWRfd29yaygmci0+d29yaywgRElWX1JPVU5EX1VQKEhaLCAzKSkpCisJCQljbGllbnRfZ2V0KGNsaWVudCk7CisJCXNraXAgPSB0cnVlOworCX0gZWxzZSB7CisJCS8qIFdlIGNvdWxkIGJlIGNhbGxlZCB0d2ljZSB3aXRoaW4gdGhlIHNhbWUgZ2VuZXJhdGlvbi4gKi8KKwkJc2tpcCA9IHRvZG8gPT0gSVNPX1JFU19SRUFMTE9DICYmCisJCSAgICAgICByLT5nZW5lcmF0aW9uID09IGdlbmVyYXRpb247CisJfQorCWZyZWUgPSB0b2RvID09IElTT19SRVNfREVBTExPQyB8fAorCSAgICAgICB0b2RvID09IElTT19SRVNfQUxMT0NfT05DRSB8fAorCSAgICAgICB0b2RvID09IElTT19SRVNfREVBTExPQ19PTkNFOworCXItPmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOworCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKworCWlmIChza2lwKQorCQlnb3RvIG91dDsKKworCWJhbmR3aWR0aCA9IHItPmJhbmR3aWR0aDsKKworCWZ3X2lzb19yZXNvdXJjZV9tYW5hZ2UoY2xpZW50LT5kZXZpY2UtPmNhcmQsIGdlbmVyYXRpb24sCisJCQlyLT5jaGFubmVscywgJmNoYW5uZWwsICZiYW5kd2lkdGgsCisJCQl0b2RvID09IElTT19SRVNfQUxMT0MgfHwKKwkJCXRvZG8gPT0gSVNPX1JFU19SRUFMTE9DIHx8CisJCQl0b2RvID09IElTT19SRVNfQUxMT0NfT05DRSk7CisJLyoKKwkgKiBJcyB0aGlzIGdlbmVyYXRpb24gb3V0ZGF0ZWQgYWxyZWFkeT8gIEFzIGxvbmcgYXMgdGhpcyByZXNvdXJjZSBzdGlja3MKKwkgKiBpbiB0aGUgaWRyLCBpdCB3aWxsIGJlIHNjaGVkdWxlZCBhZ2FpbiBmb3IgYSBuZXdlciBnZW5lcmF0aW9uIG9yIGF0CisJICogc2h1dGRvd24uCisJICovCisJaWYgKGNoYW5uZWwgPT0gLUVBR0FJTiAmJgorCSAgICAodG9kbyA9PSBJU09fUkVTX0FMTE9DIHx8IHRvZG8gPT0gSVNPX1JFU19SRUFMTE9DKSkKKwkJZ290byBvdXQ7CisKKwlzdWNjZXNzID0gY2hhbm5lbCA+PSAwIHx8IGJhbmR3aWR0aCA+IDA7CisKKwlzcGluX2xvY2tfaXJxKCZjbGllbnQtPmxvY2spOworCS8qCisJICogVHJhbnNpdCBmcm9tIGFsbG9jYXRpb24gdG8gcmVhbGxvY2F0aW9uLCBleGNlcHQgaWYgdGhlIGNsaWVudAorCSAqIHJlcXVlc3RlZCBkZWFsbG9jYXRpb24gaW4gdGhlIG1lYW50aW1lLgorCSAqLworCWlmIChyLT50b2RvID09IElTT19SRVNfQUxMT0MpCisJCXItPnRvZG8gPSBJU09fUkVTX1JFQUxMT0M7CisJLyoKKwkgKiBBbGxvY2F0aW9uIG9yIHJlYWxsb2NhdGlvbiBmYWlsdXJlPyAgUHVsbCB0aGlzIHJlc291cmNlIG91dCBvZiB0aGUKKwkgKiBpZHIgYW5kIHByZXBhcmUgZm9yIGRlbGV0aW9uLCB1bmxlc3MgdGhlIGNsaWVudCBpcyBzaHV0dGluZyBkb3duLgorCSAqLworCWlmIChyLT50b2RvID09IElTT19SRVNfUkVBTExPQyAmJiAhc3VjY2VzcyAmJgorCSAgICAhY2xpZW50LT5pbl9zaHV0ZG93biAmJgorCSAgICBpZHJfZmluZCgmY2xpZW50LT5yZXNvdXJjZV9pZHIsIHItPnJlc291cmNlLmhhbmRsZSkpIHsKKwkJaWRyX3JlbW92ZSgmY2xpZW50LT5yZXNvdXJjZV9pZHIsIHItPnJlc291cmNlLmhhbmRsZSk7CisJCWNsaWVudF9wdXQoY2xpZW50KTsKKwkJZnJlZSA9IHRydWU7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKworCWlmICh0b2RvID09IElTT19SRVNfQUxMT0MgJiYgY2hhbm5lbCA+PSAwKQorCQlyLT5jaGFubmVscyA9IDFVTEwgPDwgY2hhbm5lbDsKKworCWlmICh0b2RvID09IElTT19SRVNfUkVBTExPQyAmJiBzdWNjZXNzKQorCQlnb3RvIG91dDsKKworCWlmICh0b2RvID09IElTT19SRVNfQUxMT0MgfHwgdG9kbyA9PSBJU09fUkVTX0FMTE9DX09OQ0UpIHsKKwkJZSA9IHItPmVfYWxsb2M7CisJCXItPmVfYWxsb2MgPSBOVUxMOworCX0gZWxzZSB7CisJCWUgPSByLT5lX2RlYWxsb2M7CisJCXItPmVfZGVhbGxvYyA9IE5VTEw7CisJfQorCWUtPnJlc291cmNlLmhhbmRsZQk9IHItPnJlc291cmNlLmhhbmRsZTsKKwllLT5yZXNvdXJjZS5jaGFubmVsCT0gY2hhbm5lbDsKKwllLT5yZXNvdXJjZS5iYW5kd2lkdGgJPSBiYW5kd2lkdGg7CisKKwlxdWV1ZV9ldmVudChjbGllbnQsICZlLT5ldmVudCwKKwkJICAgICZlLT5yZXNvdXJjZSwgc2l6ZW9mKGUtPnJlc291cmNlKSwgTlVMTCwgMCk7CisKKwlpZiAoZnJlZSkgeworCQljYW5jZWxfZGVsYXllZF93b3JrKCZyLT53b3JrKTsKKwkJa2ZyZWUoci0+ZV9hbGxvYyk7CisJCWtmcmVlKHItPmVfZGVhbGxvYyk7CisJCWtmcmVlKHIpOworCX0KKyBvdXQ6CisJY2xpZW50X3B1dChjbGllbnQpOworfQorCitzdGF0aWMgdm9pZCBzY2hlZHVsZV9pc29fcmVzb3VyY2Uoc3RydWN0IGlzb19yZXNvdXJjZSAqcikKK3sKKwljbGllbnRfZ2V0KHItPmNsaWVudCk7CisJaWYgKCFzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnItPndvcmssIDApKQorCQljbGllbnRfcHV0KHItPmNsaWVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfaXNvX3Jlc291cmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJCQkgc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2UpCit7CisJc3RydWN0IGlzb19yZXNvdXJjZSAqciA9CisJCWNvbnRhaW5lcl9vZihyZXNvdXJjZSwgc3RydWN0IGlzb19yZXNvdXJjZSwgcmVzb3VyY2UpOworCisJc3Bpbl9sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKwlyLT50b2RvID0gSVNPX1JFU19ERUFMTE9DOworCXNjaGVkdWxlX2lzb19yZXNvdXJjZShyKTsKKwlzcGluX3VubG9ja19pcnEoJmNsaWVudC0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9pc29fcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LAorCQlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgKnJlcXVlc3QsIGludCB0b2RvKQoreworCXN0cnVjdCBpc29fcmVzb3VyY2VfZXZlbnQgKmUxLCAqZTI7CisJc3RydWN0IGlzb19yZXNvdXJjZSAqcjsKKwlpbnQgcmV0OworCisJaWYgKChyZXF1ZXN0LT5jaGFubmVscyA9PSAwICYmIHJlcXVlc3QtPmJhbmR3aWR0aCA9PSAwKSB8fAorCSAgICByZXF1ZXN0LT5iYW5kd2lkdGggPiBCQU5EV0lEVEhfQVZBSUxBQkxFX0lOSVRJQUwgfHwKKwkgICAgcmVxdWVzdC0+YmFuZHdpZHRoIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyICA9IGttYWxsb2Moc2l6ZW9mKCpyKSwgR0ZQX0tFUk5FTCk7CisJZTEgPSBrbWFsbG9jKHNpemVvZigqZTEpLCBHRlBfS0VSTkVMKTsKKwllMiA9IGttYWxsb2Moc2l6ZW9mKCplMiksIEdGUF9LRVJORUwpOworCWlmIChyID09IE5VTEwgfHwgZTEgPT0gTlVMTCB8fCBlMiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisKKwlJTklUX0RFTEFZRURfV09SSygmci0+d29yaywgaXNvX3Jlc291cmNlX3dvcmspOworCXItPmNsaWVudAk9IGNsaWVudDsKKwlyLT50b2RvCQk9IHRvZG87CisJci0+Z2VuZXJhdGlvbgk9IC0xOworCXItPmNoYW5uZWxzCT0gcmVxdWVzdC0+Y2hhbm5lbHM7CisJci0+YmFuZHdpZHRoCT0gcmVxdWVzdC0+YmFuZHdpZHRoOworCXItPmVfYWxsb2MJPSBlMTsKKwlyLT5lX2RlYWxsb2MJPSBlMjsKKworCWUxLT5yZXNvdXJjZS5jbG9zdXJlCT0gcmVxdWVzdC0+Y2xvc3VyZTsKKwllMS0+cmVzb3VyY2UudHlwZQk9IEZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0FMTE9DQVRFRDsKKwllMi0+cmVzb3VyY2UuY2xvc3VyZQk9IHJlcXVlc3QtPmNsb3N1cmU7CisJZTItPnJlc291cmNlLnR5cGUJPSBGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRDsKKworCWlmICh0b2RvID09IElTT19SRVNfQUxMT0MpIHsKKwkJci0+cmVzb3VyY2UucmVsZWFzZSA9IHJlbGVhc2VfaXNvX3Jlc291cmNlOworCQlyZXQgPSBhZGRfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgJnItPnJlc291cmNlLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWw7CisJfSBlbHNlIHsKKwkJci0+cmVzb3VyY2UucmVsZWFzZSA9IE5VTEw7CisJCXItPnJlc291cmNlLmhhbmRsZSA9IC0xOworCQlzY2hlZHVsZV9pc29fcmVzb3VyY2Uocik7CisJfQorCXJlcXVlc3QtPmhhbmRsZSA9IHItPnJlc291cmNlLmhhbmRsZTsKKworCXJldHVybiAwOworIGZhaWw6CisJa2ZyZWUocik7CisJa2ZyZWUoZTEpOworCWtmcmVlKGUyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW9jdGxfYWxsb2NhdGVfaXNvX3Jlc291cmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSAqcmVxdWVzdCA9IGJ1ZmZlcjsKKworCXJldHVybiBpbml0X2lzb19yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QsIElTT19SRVNfQUxMT0MpOworfQorCitzdGF0aWMgaW50IGlvY3RsX2RlYWxsb2NhdGVfaXNvX3Jlc291cmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUgKnJlcXVlc3QgPSBidWZmZXI7CisKKwlyZXR1cm4gcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsCisJCQkJICAgICAgIHJlbGVhc2VfaXNvX3Jlc291cmNlLCBOVUxMKTsKK30KKworc3RhdGljIGludCBpb2N0bF9hbGxvY2F0ZV9pc29fcmVzb3VyY2Vfb25jZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgKnJlcXVlc3QgPSBidWZmZXI7CisKKwlyZXR1cm4gaW5pdF9pc29fcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LCBJU09fUkVTX0FMTE9DX09OQ0UpOworfQorCitzdGF0aWMgaW50IGlvY3RsX2RlYWxsb2NhdGVfaXNvX3Jlc291cmNlX29uY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlICpyZXF1ZXN0ID0gYnVmZmVyOworCisJcmV0dXJuIGluaXRfaXNvX3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdCwgSVNPX1JFU19ERUFMTE9DX09OQ0UpOworfQorCisvKgorICogUmV0dXJucyBhIHNwZWVkIGNvZGU6ICBNYXhpbXVtIHNwZWVkIHRvIG9yIGZyb20gdGhpcyBkZXZpY2UsCisgKiBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UncyBsaW5rIHNwZWVkLCB0aGUgbG9jYWwgbm9kZSdzIGxpbmsgc3BlZWQsCisgKiBhbmQgYWxsIFBIWSBwb3J0IHNwZWVkcyBiZXR3ZWVuIHRoZSB0d28gbGlua3MuCisgKi8KK3N0YXRpYyBpbnQgaW9jdGxfZ2V0X3NwZWVkKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQoreworCXJldHVybiBjbGllbnQtPmRldmljZS0+bWF4X3NwZWVkOworfQorCitzdGF0aWMgaW50IGlvY3RsX3NlbmRfYnJvYWRjYXN0X3JlcXVlc3Qoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0ICpyZXF1ZXN0ID0gYnVmZmVyOworCisJc3dpdGNoIChyZXF1ZXN0LT50Y29kZSkgeworCWNhc2UgVENPREVfV1JJVEVfUVVBRExFVF9SRVFVRVNUOgorCWNhc2UgVENPREVfV1JJVEVfQkxPQ0tfUkVRVUVTVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU2VjdXJpdHkgcG9saWN5OiBPbmx5IGFsbG93IGFjY2Vzc2VzIHRvIFVuaXRzIFNwYWNlLiAqLworCWlmIChyZXF1ZXN0LT5vZmZzZXQgPCBDU1JfUkVHSVNURVJfQkFTRSArIENTUl9DT05GSUdfUk9NX0VORCkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlyZXR1cm4gaW5pdF9yZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgTE9DQUxfQlVTIHwgMHgzZiwgU0NPREVfMTAwKTsKK30KKworc3RhdGljIGludCBpb2N0bF9zZW5kX3N0cmVhbV9wYWNrZXQoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IGZ3X2NkZXZfc2VuZF9zdHJlYW1fcGFja2V0ICpwID0gYnVmZmVyOworCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCByZXF1ZXN0OworCWludCBkZXN0OworCisJaWYgKHAtPnNwZWVkID4gY2xpZW50LT5kZXZpY2UtPmNhcmQtPmxpbmtfc3BlZWQgfHwKKwkgICAgcC0+bGVuZ3RoID4gMTAyNCA8PCBwLT5zcGVlZCkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAocC0+dGFnID4gMyB8fCBwLT5jaGFubmVsID4gNjMgfHwgcC0+c3kgPiAxNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXN0ID0gZndfc3RyZWFtX3BhY2tldF9kZXN0aW5hdGlvbl9pZChwLT50YWcsIHAtPmNoYW5uZWwsIHAtPnN5KTsKKwlyZXF1ZXN0LnRjb2RlCQk9IFRDT0RFX1NUUkVBTV9EQVRBOworCXJlcXVlc3QubGVuZ3RoCQk9IHAtPmxlbmd0aDsKKwlyZXF1ZXN0LmNsb3N1cmUJCT0gcC0+Y2xvc3VyZTsKKwlyZXF1ZXN0LmRhdGEJCT0gcC0+ZGF0YTsKKwlyZXF1ZXN0LmdlbmVyYXRpb24JPSBwLT5nZW5lcmF0aW9uOworCisJcmV0dXJuIGluaXRfcmVxdWVzdChjbGllbnQsICZyZXF1ZXN0LCBkZXN0LCBwLT5zcGVlZCk7Cit9CisKIHN0YXRpYyBpbnQgKCogY29uc3QgaW9jdGxfaGFuZGxlcnNbXSkoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpID0gewogCWlvY3RsX2dldF9pbmZvLAogCWlvY3RsX3NlbmRfcmVxdWVzdCwKQEAgLTg4NSwxMyArMTI4NSwyMCBAQAogCWlvY3RsX3N0YXJ0X2lzbywKIAlpb2N0bF9zdG9wX2lzbywKIAlpb2N0bF9nZXRfY3ljbGVfdGltZXIsCisJaW9jdGxfYWxsb2NhdGVfaXNvX3Jlc291cmNlLAorCWlvY3RsX2RlYWxsb2NhdGVfaXNvX3Jlc291cmNlLAorCWlvY3RsX2FsbG9jYXRlX2lzb19yZXNvdXJjZV9vbmNlLAorCWlvY3RsX2RlYWxsb2NhdGVfaXNvX3Jlc291cmNlX29uY2UsCisJaW9jdGxfZ2V0X3NwZWVkLAorCWlvY3RsX3NlbmRfYnJvYWRjYXN0X3JlcXVlc3QsCisJaW9jdGxfc2VuZF9zdHJlYW1fcGFja2V0LAogfTsKIAotc3RhdGljIGludAotZGlzcGF0Y2hfaW9jdGwoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKQorc3RhdGljIGludCBkaXNwYXRjaF9pb2N0bChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCiB7CiAJY2hhciBidWZmZXJbMjU2XTsKLQlpbnQgcmV0dmFsOworCWludCByZXQ7CiAKIAlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gJyMnIHx8CiAJICAgIF9JT0NfTlIoY21kKSA+PSBBUlJBWV9TSVpFKGlvY3RsX2hhbmRsZXJzKSkKQEAgLTkwMyw5ICsxMzEwLDkgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJldHZhbCA9IGlvY3RsX2hhbmRsZXJzW19JT0NfTlIoY21kKV0oY2xpZW50LCBidWZmZXIpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOworCXJldCA9IGlvY3RsX2hhbmRsZXJzW19JT0NfTlIoY21kKV0oY2xpZW50LCBidWZmZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKF9JT0NfRElSKGNtZCkgJiBfSU9DX1JFQUQpIHsKIAkJaWYgKF9JT0NfU0laRShjbWQpID4gc2l6ZW9mKGJ1ZmZlcikgfHwKQEAgLTkxMywxMiArMTMyMCwxMSBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgbG9uZwotZndfZGV2aWNlX29wX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAotCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGZ3X2RldmljZV9vcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKQEAgLTkyOSw5ICsxMzM1LDggQEAKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKLXN0YXRpYyBsb25nCi1md19kZXZpY2Vfb3BfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIGZ3X2RldmljZV9vcF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCkBAIC05NDcsNyArMTM1Miw3IEBACiAJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbjsKIAl1bnNpZ25lZCBsb25nIHNpemU7Ci0JaW50IHBhZ2VfY291bnQsIHJldHZhbDsKKwlpbnQgcGFnZV9jb3VudCwgcmV0OwogCiAJaWYgKGZ3X2RldmljZV9pc19zaHV0ZG93bihjbGllbnQtPmRldmljZSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtOTczLDQ4ICsxMzc4LDU3IEBACiAJZWxzZQogCQlkaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CiAKLQlyZXR2YWwgPSBmd19pc29fYnVmZmVyX2luaXQoJmNsaWVudC0+YnVmZmVyLCBjbGllbnQtPmRldmljZS0+Y2FyZCwKLQkJCQkgICAgcGFnZV9jb3VudCwgZGlyZWN0aW9uKTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJcmV0dXJuIHJldHZhbDsKKwlyZXQgPSBmd19pc29fYnVmZmVyX2luaXQoJmNsaWVudC0+YnVmZmVyLCBjbGllbnQtPmRldmljZS0+Y2FyZCwKKwkJCQkgcGFnZV9jb3VudCwgZGlyZWN0aW9uKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAotCXJldHZhbCA9IGZ3X2lzb19idWZmZXJfbWFwKCZjbGllbnQtPmJ1ZmZlciwgdm1hKTsKLQlpZiAocmV0dmFsIDwgMCkKKwlyZXQgPSBmd19pc29fYnVmZmVyX21hcCgmY2xpZW50LT5idWZmZXIsIHZtYSk7CisJaWYgKHJldCA8IDApCiAJCWZ3X2lzb19idWZmZXJfZGVzdHJveSgmY2xpZW50LT5idWZmZXIsIGNsaWVudC0+ZGV2aWNlLT5jYXJkKTsKIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaHV0ZG93bl9yZXNvdXJjZShpbnQgaWQsIHZvaWQgKnAsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqciA9IHA7CisJc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZGF0YTsKKworCXItPnJlbGVhc2UoY2xpZW50LCByKTsKKwljbGllbnRfcHV0KGNsaWVudCk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBmd19kZXZpY2Vfb3BfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGV2ZW50ICplLCAqbmV4dF9lOwotCXN0cnVjdCBjbGllbnRfcmVzb3VyY2UgKnIsICpuZXh0X3I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChjbGllbnQtPmJ1ZmZlci5wYWdlcykKLQkJZndfaXNvX2J1ZmZlcl9kZXN0cm95KCZjbGllbnQtPmJ1ZmZlciwgY2xpZW50LT5kZXZpY2UtPmNhcmQpOworCW11dGV4X2xvY2soJmNsaWVudC0+ZGV2aWNlLT5jbGllbnRfbGlzdF9tdXRleCk7CisJbGlzdF9kZWwoJmNsaWVudC0+bGluayk7CisJbXV0ZXhfdW5sb2NrKCZjbGllbnQtPmRldmljZS0+Y2xpZW50X2xpc3RfbXV0ZXgpOwogCiAJaWYgKGNsaWVudC0+aXNvX2NvbnRleHQpCiAJCWZ3X2lzb19jb250ZXh0X2Rlc3Ryb3koY2xpZW50LT5pc29fY29udGV4dCk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUociwgbmV4dF9yLCAmY2xpZW50LT5yZXNvdXJjZV9saXN0LCBsaW5rKQotCQlyLT5yZWxlYXNlKGNsaWVudCwgcik7CisJaWYgKGNsaWVudC0+YnVmZmVyLnBhZ2VzKQorCQlmd19pc29fYnVmZmVyX2Rlc3Ryb3koJmNsaWVudC0+YnVmZmVyLCBjbGllbnQtPmRldmljZS0+Y2FyZCk7CiAKLQkvKgotCSAqIEZJWE1FOiBXZSBzaG91bGQgd2FpdCBmb3IgdGhlIGFzeW5jIHRhc2tsZXRzIHRvIHN0b3AKLQkgKiBydW5uaW5nIGJlZm9yZSBmcmVlaW5nIHRoZSBtZW1vcnkuCi0JICovCisJLyogRnJlZXplIGNsaWVudC0+cmVzb3VyY2VfaWRyIGFuZCBjbGllbnQtPmV2ZW50X2xpc3QgKi8KKwlzcGluX2xvY2tfaXJxKCZjbGllbnQtPmxvY2spOworCWNsaWVudC0+aW5fc2h1dGRvd24gPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycSgmY2xpZW50LT5sb2NrKTsKKworCWlkcl9mb3JfZWFjaCgmY2xpZW50LT5yZXNvdXJjZV9pZHIsIHNodXRkb3duX3Jlc291cmNlLCBjbGllbnQpOworCWlkcl9yZW1vdmVfYWxsKCZjbGllbnQtPnJlc291cmNlX2lkcik7CisJaWRyX2Rlc3Ryb3koJmNsaWVudC0+cmVzb3VyY2VfaWRyKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCBuZXh0X2UsICZjbGllbnQtPmV2ZW50X2xpc3QsIGxpbmspCiAJCWtmcmVlKGUpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsaWVudC0+ZGV2aWNlLT5jYXJkLT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJmNsaWVudC0+bGluayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT5kZXZpY2UtPmNhcmQtPmxvY2ssIGZsYWdzKTsKLQotCWZ3X2RldmljZV9wdXQoY2xpZW50LT5kZXZpY2UpOwotCWtmcmVlKGNsaWVudCk7CisJY2xpZW50X3B1dChjbGllbnQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuYwppbmRleCBiZjUzYWNiLi5hNDdlMjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmMKQEAgLTE4LDIyICsxOCwyNiBAQAogICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJmdy10b3BvbG9neS5oIgorCiAjaW5jbHVkZSAiZnctZGV2aWNlLmgiCisjaW5jbHVkZSAiZnctdG9wb2xvZ3kuaCIKKyNpbmNsdWRlICJmdy10cmFuc2FjdGlvbi5oIgogCiB2b2lkIGZ3X2Nzcl9pdGVyYXRvcl9pbml0KHN0cnVjdCBmd19jc3JfaXRlcmF0b3IgKmNpLCB1MzIgKiBwKQogewpAQCAtMTMyLDggKzEzNiw3IEBACiAJCQl2ZW5kb3IsIG1vZGVsLCBzcGVjaWZpZXJfaWQsIHZlcnNpb24pOwogfQogCi1zdGF0aWMgaW50Ci1md191bml0X3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKK3N0YXRpYyBpbnQgZndfdW5pdF91ZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qga29ial91ZXZlbnRfZW52ICplbnYpCiB7CiAJc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBmd191bml0KGRldik7CiAJY2hhciBtb2RhbGlhc1s2NF07CkBAIC0xNTIsMjcgKzE1NSw2IEBACiB9OwogRVhQT1JUX1NZTUJPTChmd19idXNfdHlwZSk7CiAKLXN0YXRpYyB2b2lkIGZ3X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGRldmljZS0+Y2FyZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiBUYWtlIHRoZSBjYXJkIGxvY2sgc28gd2UgZG9uJ3Qgc2V0IHRoaXMgdG8gTlVMTCB3aGlsZSBhCi0JICogRldfTk9ERV9VUERBVEVEIGNhbGxiYWNrIGlzIGJlaW5nIGhhbmRsZWQgb3Igd2hpbGUgdGhlCi0JICogYnVzIG1hbmFnZXIgd29yayBsb29rcyBhdCB0aGlzIG5vZGUuCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQlkZXZpY2UtPm5vZGUtPmRhdGEgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQotCWZ3X25vZGVfcHV0KGRldmljZS0+bm9kZSk7Ci0Ja2ZyZWUoZGV2aWNlLT5jb25maWdfcm9tKTsKLQlrZnJlZShkZXZpY2UpOwotCWZ3X2NhcmRfcHV0KGNhcmQpOwotfQotCiBpbnQgZndfZGV2aWNlX2VuYWJsZV9waHlzX2RtYShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IGdlbmVyYXRpb24gPSBkZXZpY2UtPmdlbmVyYXRpb247CkBAIC0xOTEsOCArMTczLDggQEAKIAl1MzIga2V5OwogfTsKIAotc3RhdGljIHNzaXplX3QKLXNob3dfaW1tZWRpYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzaG93X2ltbWVkaWF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUgKmF0dHIgPQogCQljb250YWluZXJfb2YoZGF0dHIsIHN0cnVjdCBjb25maWdfcm9tX2F0dHJpYnV0ZSwgYXR0cik7CkBAIC0yMjMsOCArMjA1LDggQEAKICNkZWZpbmUgSU1NRURJQVRFX0FUVFIobmFtZSwga2V5KQkJCQlcCiAJeyBfX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19pbW1lZGlhdGUsIE5VTEwpLCBrZXkgfQogCi1zdGF0aWMgc3NpemVfdAotc2hvd190ZXh0X2xlYWYoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGV4dF9sZWFmKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBjb25maWdfcm9tX2F0dHJpYnV0ZSAqYXR0ciA9CiAJCWNvbnRhaW5lcl9vZihkYXR0ciwgc3RydWN0IGNvbmZpZ19yb21fYXR0cmlidXRlLCBhdHRyKTsKQEAgLTI5MywxMCArMjc1LDkgQEAKIAlURVhUX0xFQUZfQVRUUihoYXJkd2FyZV92ZXJzaW9uX25hbWUsIENTUl9IQVJEV0FSRV9WRVJTSU9OKSwKIH07CiAKLXN0YXRpYyB2b2lkCi1pbml0X2Z3X2F0dHJpYnV0ZV9ncm91cChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cnMsCi0JCQlzdHJ1Y3QgZndfYXR0cmlidXRlX2dyb3VwICpncm91cCkKK3N0YXRpYyB2b2lkIGluaXRfZndfYXR0cmlidXRlX2dyb3VwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHJzLAorCQkJCSAgICBzdHJ1Y3QgZndfYXR0cmlidXRlX2dyb3VwICpncm91cCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cjsKIAlpbnQgaSwgajsKQEAgLTMxOSw5ICszMDAsOCBAQAogCWRldi0+Z3JvdXBzID0gZ3JvdXAtPmdyb3VwczsKIH0KIAotc3RhdGljIHNzaXplX3QKLW1vZGFsaWFzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAotCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBtb2RhbGlhc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IGZ3X3VuaXQoZGV2KTsKIAlpbnQgbGVuZ3RoOwpAQCAtMzMyLDkgKzMxMiw4IEBACiAJcmV0dXJuIGxlbmd0aCArIDE7CiB9CiAKLXN0YXRpYyBzc2l6ZV90Ci1yb21faW5kZXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCByb21faW5kZXhfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShkZXYtPnBhcmVudCk7CiAJc3RydWN0IGZ3X3VuaXQgKnVuaXQgPSBmd191bml0KGRldik7CkBAIC0zNDksOCArMzI4LDggQEAKIAlfX0FUVFJfTlVMTCwKIH07CiAKLXN0YXRpYyBzc2l6ZV90Ci1jb25maWdfcm9tX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgY29uZmlnX3JvbV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9IGZ3X2RldmljZShkZXYpOwogCXNpemVfdCBsZW5ndGg7CkBAIC0zNjMsOCArMzQyLDggQEAKIAlyZXR1cm4gbGVuZ3RoOwogfQogCi1zdGF0aWMgc3NpemVfdAotZ3VpZF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGd1aWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UoZGV2KTsKIAlpbnQgcmV0OwpAQCAtMzgzLDggKzM2Miw4IEBACiAJX19BVFRSX05VTEwsCiB9OwogCi1zdGF0aWMgaW50Ci1yZWFkX3JvbShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsIGludCBnZW5lcmF0aW9uLCBpbnQgaW5kZXgsIHUzMiAqZGF0YSkKK3N0YXRpYyBpbnQgcmVhZF9yb20oc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLAorCQkgICAgaW50IGdlbmVyYXRpb24sIGludCBpbmRleCwgdTMyICpkYXRhKQogewogCWludCByY29kZTsKIApAQCAtNTM5LDcgKzUxOCw3IEBACiAKIAlrZnJlZShvbGRfcm9tKTsKIAlyZXQgPSAwOwotCWRldmljZS0+Y21jID0gcm9tWzJdICYgMSA8PCAzMDsKKwlkZXZpY2UtPmNtYyA9IHJvbVsyXSA+PiAzMCAmIDE7CiAgb3V0OgogCWtmcmVlKHJvbSk7CiAKQEAgLTY3OSwxMSArNjU4LDUzIEBACiAJZndfZGV2aWNlX3B1dChkZXZpY2UpOwogfQogCitzdGF0aWMgdm9pZCBmd19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGRldik7CisJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBkZXZpY2UtPmNhcmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogVGFrZSB0aGUgY2FyZCBsb2NrIHNvIHdlIGRvbid0IHNldCB0aGlzIHRvIE5VTEwgd2hpbGUgYQorCSAqIEZXX05PREVfVVBEQVRFRCBjYWxsYmFjayBpcyBiZWluZyBoYW5kbGVkIG9yIHdoaWxlIHRoZQorCSAqIGJ1cyBtYW5hZ2VyIHdvcmsgbG9va3MgYXQgdGhpcyBub2RlLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJZGV2aWNlLT5ub2RlLT5kYXRhID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisKKwlmd19ub2RlX3B1dChkZXZpY2UtPm5vZGUpOworCWtmcmVlKGRldmljZS0+Y29uZmlnX3JvbSk7CisJa2ZyZWUoZGV2aWNlKTsKKwlmd19jYXJkX3B1dChjYXJkKTsKK30KKwogc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBmd19kZXZpY2VfdHlwZSA9IHsKLQkucmVsZWFzZQk9IGZ3X2RldmljZV9yZWxlYXNlLAorCS5yZWxlYXNlID0gZndfZGV2aWNlX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgdm9pZCBmd19kZXZpY2VfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgaW50IHVwZGF0ZV91bml0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IGZ3X3VuaXQoZGV2KTsKKwlzdHJ1Y3QgZndfZHJpdmVyICpkcml2ZXIgPSAoc3RydWN0IGZ3X2RyaXZlciAqKWRldi0+ZHJpdmVyOworCisJaWYgKGlzX2Z3X3VuaXQoZGV2KSAmJiBkcml2ZXIgIT0gTlVMTCAmJiBkcml2ZXItPnVwZGF0ZSAhPSBOVUxMKSB7CisJCWRvd24oJmRldi0+c2VtKTsKKwkJZHJpdmVyLT51cGRhdGUodW5pdCk7CisJCXVwKCZkZXYtPnNlbSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZ3X2RldmljZV91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZndfZGV2aWNlLCB3b3JrLndvcmspOworCisJZndfZGV2aWNlX2NkZXZfdXBkYXRlKGRldmljZSk7CisJZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZkZXZpY2UtPmRldmljZSwgTlVMTCwgdXBkYXRlX3VuaXQpOworfQogCiAvKgogICogSWYgYSBkZXZpY2Ugd2FzIHBlbmRpbmcgZm9yIGRlbGV0aW9uIGJlY2F1c2UgaXRzIG5vZGUgd2VudCBhd2F5IGJ1dCBpdHMKQEAgLTczNSwxMiArNzU2LDUwIEBACiAJcmV0dXJuIG1hdGNoOwogfQogCitlbnVtIHsgQkNfVU5LTk9XTiA9IDAsIEJDX1VOSU1QTEVNRU5URUQsIEJDX0lNUExFTUVOVEVELCB9OworCit2b2lkIGZ3X2RldmljZV9zZXRfYnJvYWRjYXN0X2NoYW5uZWwoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLCBpbnQgZ2VuZXJhdGlvbikKK3sKKwlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9IGRldmljZS0+Y2FyZDsKKwlfX2JlMzIgZGF0YTsKKwlpbnQgcmNvZGU7CisKKwlpZiAoIWNhcmQtPmJyb2FkY2FzdF9jaGFubmVsX2FsbG9jYXRlZCkKKwkJcmV0dXJuOworCisJaWYgKGRldmljZS0+YmNfaW1wbGVtZW50ZWQgPT0gQkNfVU5LTk9XTikgeworCQlyY29kZSA9IGZ3X3J1bl90cmFuc2FjdGlvbihjYXJkLCBUQ09ERV9SRUFEX1FVQURMRVRfUkVRVUVTVCwKKwkJCQlkZXZpY2UtPm5vZGVfaWQsIGdlbmVyYXRpb24sIGRldmljZS0+bWF4X3NwZWVkLAorCQkJCUNTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0JST0FEQ0FTVF9DSEFOTkVMLAorCQkJCSZkYXRhLCA0KTsKKwkJc3dpdGNoIChyY29kZSkgeworCQljYXNlIFJDT0RFX0NPTVBMRVRFOgorCQkJaWYgKGRhdGEgJiBjcHVfdG9fYmUzMigxIDw8IDMxKSkgeworCQkJCWRldmljZS0+YmNfaW1wbGVtZW50ZWQgPSBCQ19JTVBMRU1FTlRFRDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIGVsc2UgZmFsbCB0aHJvdWdoIHRvIGNhc2UgYWRkcmVzcyBlcnJvciAqLworCQljYXNlIFJDT0RFX0FERFJFU1NfRVJST1I6CisJCQlkZXZpY2UtPmJjX2ltcGxlbWVudGVkID0gQkNfVU5JTVBMRU1FTlRFRDsKKwkJfQorCX0KKworCWlmIChkZXZpY2UtPmJjX2ltcGxlbWVudGVkID09IEJDX0lNUExFTUVOVEVEKSB7CisJCWRhdGEgPSBjcHVfdG9fYmUzMihCUk9BRENBU1RfQ0hBTk5FTF9JTklUSUFMIHwKKwkJCQkgICBCUk9BRENBU1RfQ0hBTk5FTF9WQUxJRCk7CisJCWZ3X3J1bl90cmFuc2FjdGlvbihjYXJkLCBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1QsCisJCQkJZGV2aWNlLT5ub2RlX2lkLCBnZW5lcmF0aW9uLCBkZXZpY2UtPm1heF9zcGVlZCwKKwkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CUk9BRENBU1RfQ0hBTk5FTCwKKwkJCQkmZGF0YSwgNCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBmd19kZXZpY2VfaW5pdChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmd19kZXZpY2UsIHdvcmsud29yayk7CiAJc3RydWN0IGRldmljZSAqcmV2aXZlZF9kZXY7Ci0JaW50IG1pbm9yLCBlcnI7CisJaW50IG1pbm9yLCByZXQ7CiAKIAkvKgogCSAqIEFsbCBmYWlsdXJlIHBhdGhzIGhlcmUgc2V0IG5vZGUtPmRhdGEgdG8gTlVMTCwgc28gdGhhdCB3ZQpAQCAtNzc2LDEyICs4MzUsMTIgQEAKIAogCWZ3X2RldmljZV9nZXQoZGV2aWNlKTsKIAlkb3duX3dyaXRlKCZmd19kZXZpY2VfcndzZW0pOwotCWVyciA9IGlkcl9wcmVfZ2V0KCZmd19kZXZpY2VfaWRyLCBHRlBfS0VSTkVMKSA/CisJcmV0ID0gaWRyX3ByZV9nZXQoJmZ3X2RldmljZV9pZHIsIEdGUF9LRVJORUwpID8KIAkgICAgICBpZHJfZ2V0X25ldygmZndfZGV2aWNlX2lkciwgZGV2aWNlLCAmbWlub3IpIDoKIAkgICAgICAtRU5PTUVNOwogCXVwX3dyaXRlKCZmd19kZXZpY2VfcndzZW0pOwogCi0JaWYgKGVyciA8IDApCisJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyb3I7CiAKIAlkZXZpY2UtPmRldmljZS5idXMgPSAmZndfYnVzX3R5cGU7CkBAIC04MjgsNiArODg3LDggQEAKIAkJCQkgIGRldmljZS0+Y29uZmlnX3JvbVszXSwgZGV2aWNlLT5jb25maWdfcm9tWzRdLAogCQkJCSAgMSA8PCBkZXZpY2UtPm1heF9zcGVlZCk7CiAJCWRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzID0gMDsKKworCQlmd19kZXZpY2Vfc2V0X2Jyb2FkY2FzdF9jaGFubmVsKGRldmljZSwgZGV2aWNlLT5nZW5lcmF0aW9uKTsKIAl9CiAKIAkvKgpAQCAtODUxLDI5ICs5MTIsNiBAQAogCXB1dF9kZXZpY2UoJmRldmljZS0+ZGV2aWNlKTsJLyogb3VyIHJlZmVyZW5jZSAqLwogfQogCi1zdGF0aWMgaW50IHVwZGF0ZV91bml0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZndfdW5pdCAqdW5pdCA9IGZ3X3VuaXQoZGV2KTsKLQlzdHJ1Y3QgZndfZHJpdmVyICpkcml2ZXIgPSAoc3RydWN0IGZ3X2RyaXZlciAqKWRldi0+ZHJpdmVyOwotCi0JaWYgKGlzX2Z3X3VuaXQoZGV2KSAmJiBkcml2ZXIgIT0gTlVMTCAmJiBkcml2ZXItPnVwZGF0ZSAhPSBOVUxMKSB7Ci0JCWRvd24oJmRldi0+c2VtKTsKLQkJZHJpdmVyLT51cGRhdGUodW5pdCk7Ci0JCXVwKCZkZXYtPnNlbSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGZ3X2RldmljZV91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBmd19kZXZpY2UgKmRldmljZSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZndfZGV2aWNlLCB3b3JrLndvcmspOwotCi0JZndfZGV2aWNlX2NkZXZfdXBkYXRlKGRldmljZSk7Ci0JZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZkZXZpY2UtPmRldmljZSwgTlVMTCwgdXBkYXRlX3VuaXQpOwotfQotCiBlbnVtIHsKIAlSRVJFQURfQklCX0VSUk9SLAogCVJFUkVBRF9CSUJfR09ORSwKQEAgLTg5NCw3ICs5MzIsNyBAQAogCQlpZiAoaSA9PSAwICYmIHEgPT0gMCkKIAkJCXJldHVybiBSRVJFQURfQklCX0dPTkU7CiAKLQkJaWYgKGkgPiBkZXZpY2UtPmNvbmZpZ19yb21fbGVuZ3RoIHx8IHEgIT0gZGV2aWNlLT5jb25maWdfcm9tW2ldKQorCQlpZiAocSAhPSBkZXZpY2UtPmNvbmZpZ19yb21baV0pCiAJCQlyZXR1cm4gUkVSRUFEX0JJQl9DSEFOR0VEOwogCX0KIApAQCAtMTAwNCw2ICsxMDQyLDcgQEAKIAkJZGV2aWNlLT5ub2RlID0gZndfbm9kZV9nZXQobm9kZSk7CiAJCWRldmljZS0+bm9kZV9pZCA9IG5vZGUtPm5vZGVfaWQ7CiAJCWRldmljZS0+Z2VuZXJhdGlvbiA9IGNhcmQtPmdlbmVyYXRpb247CisJCW11dGV4X2luaXQoJmRldmljZS0+Y2xpZW50X2xpc3RfbXV0ZXgpOwogCQlJTklUX0xJU1RfSEVBRCgmZGV2aWNlLT5jbGllbnRfbGlzdCk7CiAKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmggYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWRldmljZS5oCmluZGV4IDhlZjZlYzIuLjk3NTg4OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctZGV2aWNlLmgKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1kZXZpY2UuaApAQCAtMTksMTAgKzE5LDE3IEBACiAjaWZuZGVmIF9fZndfZGV2aWNlX2gKICNkZWZpbmUgX19md19kZXZpY2VfaAogCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKIGVudW0gZndfZGV2aWNlX3N0YXRlIHsKQEAgLTM4LDYgKzQ1LDkgQEAKIAlzdHJ1Y3QgYXR0cmlidXRlICphdHRyc1sxMV07CiB9OwogCitzdHJ1Y3QgZndfbm9kZTsKK3N0cnVjdCBmd19jYXJkOworCiAvKgogICogTm90ZSwgZndfZGV2aWNlLmdlbmVyYXRpb24gYWx3YXlzIGhhcyB0byBiZSByZWFkIGJlZm9yZSBmd19kZXZpY2Uubm9kZV9pZC4KICAqIFVzZSBTTVAgbWVtb3J5IGJhcnJpZXJzIHRvIGVuc3VyZSB0aGlzLiAgT3RoZXJ3aXNlIHJlcXVlc3RzIHdpbGwgYmUgc2VudApAQCAtNjEsMTMgKzcxLDE4IEBACiAJaW50IG5vZGVfaWQ7CiAJaW50IGdlbmVyYXRpb247CiAJdW5zaWduZWQgbWF4X3NwZWVkOwotCWJvb2wgY21jOwogCXN0cnVjdCBmd19jYXJkICpjYXJkOwogCXN0cnVjdCBkZXZpY2UgZGV2aWNlOworCisJc3RydWN0IG11dGV4IGNsaWVudF9saXN0X211dGV4OwogCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7CisKIAl1MzIgKmNvbmZpZ19yb207CiAJc2l6ZV90IGNvbmZpZ19yb21fbGVuZ3RoOwogCWludCBjb25maWdfcm9tX3JldHJpZXM7CisJdW5zaWduZWQgY21jOjE7CisJdW5zaWduZWQgYmNfaW1wbGVtZW50ZWQ6MjsKKwogCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAlzdHJ1Y3QgZndfYXR0cmlidXRlX2dyb3VwIGF0dHJpYnV0ZV9ncm91cDsKIH07CkBAIC05Niw2ICsxMTEsNyBAQAogCiBzdHJ1Y3QgZndfZGV2aWNlICpmd19kZXZpY2VfZ2V0X2J5X2RldnQoZGV2X3QgZGV2dCk7CiBpbnQgZndfZGV2aWNlX2VuYWJsZV9waHlzX2RtYShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpOwordm9pZCBmd19kZXZpY2Vfc2V0X2Jyb2FkY2FzdF9jaGFubmVsKHN0cnVjdCBmd19kZXZpY2UgKmRldmljZSwgaW50IGdlbmVyYXRpb24pOwogCiB2b2lkIGZ3X2RldmljZV9jZGV2X3VwZGF0ZShzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UpOwogdm9pZCBmd19kZXZpY2VfY2Rldl9yZW1vdmUoc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlKTsKQEAgLTE3Niw4ICsxOTIsNyBAQAogCWNvbnN0IHN0cnVjdCBmd19kZXZpY2VfaWQgKmlkX3RhYmxlOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfZHJpdmVyICoKLWZ3X2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZndfZHJpdmVyICpmd19kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGRydiwgc3RydWN0IGZ3X2RyaXZlciwgZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctaXNvLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LWlzby5jCmluZGV4IGUxNGMwM2QuLjJiYWYxMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctaXNvLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1pc28uYwpAQCAtMSw1ICsxLDcgQEAKIC8qCi0gKiBJc29jaHJvbm91cyBJTyBmdW5jdGlvbmFsaXR5CisgKiBJc29jaHJvbm91cyBJL08gZnVuY3Rpb25hbGl0eToKKyAqICAgLSBJc29jaHJvbm91cyBETUEgY29udGV4dCBtYW5hZ2VtZW50CisgKiAgIC0gSXNvY2hyb25vdXMgYnVzIHJlc291cmNlIG1hbmFnZW1lbnQgKGNoYW5uZWxzLCBiYW5kd2lkdGgpLCBjbGllbnQgc2lkZQogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBLcmlzdGlhbiBIb2Vnc2JlcmcgPGtyaEBiaXRwbGFuZXQubmV0PgogICoKQEAgLTE4LDIxICsyMCwyNSBAQAogICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCi0jaW5jbHVkZSAiZnctdHJhbnNhY3Rpb24uaCIKICNpbmNsdWRlICJmdy10b3BvbG9neS5oIgotI2luY2x1ZGUgImZ3LWRldmljZS5oIgorI2luY2x1ZGUgImZ3LXRyYW5zYWN0aW9uLmgiCiAKLWludAotZndfaXNvX2J1ZmZlcl9pbml0KHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIHN0cnVjdCBmd19jYXJkICpjYXJkLAotCQkgICBpbnQgcGFnZV9jb3VudCwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorLyoKKyAqIElzb2Nocm9ub3VzIERNQSBjb250ZXh0IG1hbmFnZW1lbnQKKyAqLworCitpbnQgZndfaXNvX2J1ZmZlcl9pbml0KHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkgICAgICAgaW50IHBhZ2VfY291bnQsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLQlpbnQgaSwgaiwgcmV0dmFsID0gLUVOT01FTTsKKwlpbnQgaSwgajsKIAlkbWFfYWRkcl90IGFkZHJlc3M7CiAKIAlidWZmZXItPnBhZ2VfY291bnQgPSBwYWdlX2NvdW50OwpAQCAtNjksMTkgKzc1LDIxIEBACiAJa2ZyZWUoYnVmZmVyLT5wYWdlcyk7CiAgb3V0OgogCWJ1ZmZlci0+cGFnZXMgPSBOVUxMOwotCXJldHVybiByZXR2YWw7CisKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogaW50IGZ3X2lzb19idWZmZXJfbWFwKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXVuc2lnbmVkIGxvbmcgdWFkZHI7Ci0JaW50IGksIHJldHZhbDsKKwlpbnQgaSwgZXJyOwogCiAJdWFkZHIgPSB2bWEtPnZtX3N0YXJ0OwogCWZvciAoaSA9IDA7IGkgPCBidWZmZXItPnBhZ2VfY291bnQ7IGkrKykgewotCQlyZXR2YWwgPSB2bV9pbnNlcnRfcGFnZSh2bWEsIHVhZGRyLCBidWZmZXItPnBhZ2VzW2ldKTsKLQkJaWYgKHJldHZhbCkKLQkJCXJldHVybiByZXR2YWw7CisJCWVyciA9IHZtX2luc2VydF9wYWdlKHZtYSwgdWFkZHIsIGJ1ZmZlci0+cGFnZXNbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwogCQl1YWRkciArPSBQQUdFX1NJWkU7CiAJfQogCkBAIC0xMDUsMTQgKzExMywxNCBAQAogCWJ1ZmZlci0+cGFnZXMgPSBOVUxMOwogfQogCi1zdHJ1Y3QgZndfaXNvX2NvbnRleHQgKgotZndfaXNvX2NvbnRleHRfY3JlYXRlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdHlwZSwKLQkJICAgICAgaW50IGNoYW5uZWwsIGludCBzcGVlZCwgc2l6ZV90IGhlYWRlcl9zaXplLAotCQkgICAgICBmd19pc29fY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfZGF0YSkKK3N0cnVjdCBmd19pc29fY29udGV4dCAqZndfaXNvX2NvbnRleHRfY3JlYXRlKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQlpbnQgdHlwZSwgaW50IGNoYW5uZWwsIGludCBzcGVlZCwgc2l6ZV90IGhlYWRlcl9zaXplLAorCQlmd19pc29fY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfZGF0YSkKIHsKIAlzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eDsKIAotCWN0eCA9IGNhcmQtPmRyaXZlci0+YWxsb2NhdGVfaXNvX2NvbnRleHQoY2FyZCwgdHlwZSwgaGVhZGVyX3NpemUpOworCWN0eCA9IGNhcmQtPmRyaXZlci0+YWxsb2NhdGVfaXNvX2NvbnRleHQoY2FyZCwKKwkJCQkJCSB0eXBlLCBjaGFubmVsLCBoZWFkZXJfc2l6ZSk7CiAJaWYgKElTX0VSUihjdHgpKQogCQlyZXR1cm4gY3R4OwogCkBAIC0xMzQsMjUgKzE0MiwxODYgQEAKIAljYXJkLT5kcml2ZXItPmZyZWVfaXNvX2NvbnRleHQoY3R4KTsKIH0KIAotaW50Ci1md19pc29fY29udGV4dF9zdGFydChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwgaW50IGN5Y2xlLCBpbnQgc3luYywgaW50IHRhZ3MpCitpbnQgZndfaXNvX2NvbnRleHRfc3RhcnQoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsCisJCQkgaW50IGN5Y2xlLCBpbnQgc3luYywgaW50IHRhZ3MpCiB7CiAJcmV0dXJuIGN0eC0+Y2FyZC0+ZHJpdmVyLT5zdGFydF9pc28oY3R4LCBjeWNsZSwgc3luYywgdGFncyk7CiB9CiAKLWludAotZndfaXNvX2NvbnRleHRfcXVldWUoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgsCi0JCSAgICAgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKLQkJICAgICBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKK2ludCBmd19pc29fY29udGV4dF9xdWV1ZShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKKwkJCSBzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAorCQkJIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCisJCQkgdW5zaWduZWQgbG9uZyBwYXlsb2FkKQogewogCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY3R4LT5jYXJkOwogCiAJcmV0dXJuIGNhcmQtPmRyaXZlci0+cXVldWVfaXNvKGN0eCwgcGFja2V0LCBidWZmZXIsIHBheWxvYWQpOwogfQogCi1pbnQKLWZ3X2lzb19jb250ZXh0X3N0b3Aoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpCitpbnQgZndfaXNvX2NvbnRleHRfc3RvcChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCkKIHsKIAlyZXR1cm4gY3R4LT5jYXJkLT5kcml2ZXItPnN0b3BfaXNvKGN0eCk7CiB9CisKKy8qCisgKiBJc29jaHJvbm91cyBidXMgcmVzb3VyY2UgbWFuYWdlbWVudCAoY2hhbm5lbHMsIGJhbmR3aWR0aCksIGNsaWVudCBzaWRlCisgKi8KKworc3RhdGljIGludCBtYW5hZ2VfYmFuZHdpZHRoKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgaXJtX2lkLCBpbnQgZ2VuZXJhdGlvbiwKKwkJCSAgICBpbnQgYmFuZHdpZHRoLCBib29sIGFsbG9jYXRlKQoreworCV9fYmUzMiBkYXRhWzJdOworCWludCB0cnksIG5ldywgb2xkID0gYWxsb2NhdGUgPyBCQU5EV0lEVEhfQVZBSUxBQkxFX0lOSVRJQUwgOiAwOworCisJLyoKKwkgKiBPbiBhIDEzOTRhIElSTSB3aXRoIGxvdyBjb250ZW50aW9uLCB0cnkgPCAxIGlzIGVub3VnaC4KKwkgKiBPbiBhIDEzOTQtMTk5NSBJUk0sIHdlIG5lZWQgYXQgbGVhc3QgdHJ5IDwgMi4KKwkgKiBMZXQncyBqdXN0IGRvIHRyeSA8IDUuCisJICovCisJZm9yICh0cnkgPSAwOyB0cnkgPCA1OyB0cnkrKykgeworCQluZXcgPSBhbGxvY2F0ZSA/IG9sZCAtIGJhbmR3aWR0aCA6IG9sZCArIGJhbmR3aWR0aDsKKwkJaWYgKG5ldyA8IDAgfHwgbmV3ID4gQkFORFdJRFRIX0FWQUlMQUJMRV9JTklUSUFMKQorCQkJYnJlYWs7CisKKwkJZGF0YVswXSA9IGNwdV90b19iZTMyKG9sZCk7CisJCWRhdGFbMV0gPSBjcHVfdG9fYmUzMihuZXcpOworCQlzd2l0Y2ggKGZ3X3J1bl90cmFuc2FjdGlvbihjYXJkLCBUQ09ERV9MT0NLX0NPTVBBUkVfU1dBUCwKKwkJCQlpcm1faWQsIGdlbmVyYXRpb24sIFNDT0RFXzEwMCwKKwkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9CQU5EV0lEVEhfQVZBSUxBQkxFLAorCQkJCWRhdGEsIHNpemVvZihkYXRhKSkpIHsKKwkJY2FzZSBSQ09ERV9HRU5FUkFUSU9OOgorCQkJLyogQSBnZW5lcmF0aW9uIGNoYW5nZSBmcmVlcyBhbGwgYmFuZHdpZHRoLiAqLworCQkJcmV0dXJuIGFsbG9jYXRlID8gLUVBR0FJTiA6IGJhbmR3aWR0aDsKKworCQljYXNlIFJDT0RFX0NPTVBMRVRFOgorCQkJaWYgKGJlMzJfdG9fY3B1cChkYXRhKSA9PSBvbGQpCisJCQkJcmV0dXJuIGJhbmR3aWR0aDsKKworCQkJb2xkID0gYmUzMl90b19jcHVwKGRhdGEpOworCQkJLyogRmFsbCB0aHJvdWdoLiAqLworCQl9CisJfQorCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgbWFuYWdlX2NoYW5uZWwoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBpcm1faWQsIGludCBnZW5lcmF0aW9uLAorCQkJICB1MzIgY2hhbm5lbHNfbWFzaywgdTY0IG9mZnNldCwgYm9vbCBhbGxvY2F0ZSkKK3sKKwlfX2JlMzIgZGF0YVsyXSwgYywgYWxsLCBvbGQ7CisJaW50IGksIHJldHJ5ID0gNTsKKworCW9sZCA9IGFsbCA9IGFsbG9jYXRlID8gY3B1X3RvX2JlMzIofjApIDogMDsKKworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmICghKGNoYW5uZWxzX21hc2sgJiAxIDw8IGkpKQorCQkJY29udGludWU7CisKKwkJYyA9IGNwdV90b19iZTMyKDEgPDwgKDMxIC0gaSkpOworCQlpZiAoKG9sZCAmIGMpICE9IChhbGwgJiBjKSkKKwkJCWNvbnRpbnVlOworCisJCWRhdGFbMF0gPSBvbGQ7CisJCWRhdGFbMV0gPSBvbGQgXiBjOworCQlzd2l0Y2ggKGZ3X3J1bl90cmFuc2FjdGlvbihjYXJkLCBUQ09ERV9MT0NLX0NPTVBBUkVfU1dBUCwKKwkJCQkJICAgaXJtX2lkLCBnZW5lcmF0aW9uLCBTQ09ERV8xMDAsCisJCQkJCSAgIG9mZnNldCwgZGF0YSwgc2l6ZW9mKGRhdGEpKSkgeworCQljYXNlIFJDT0RFX0dFTkVSQVRJT046CisJCQkvKiBBIGdlbmVyYXRpb24gY2hhbmdlIGZyZWVzIGFsbCBjaGFubmVscy4gKi8KKwkJCXJldHVybiBhbGxvY2F0ZSA/IC1FQUdBSU4gOiBpOworCisJCWNhc2UgUkNPREVfQ09NUExFVEU6CisJCQlpZiAoZGF0YVswXSA9PSBvbGQpCisJCQkJcmV0dXJuIGk7CisKKwkJCW9sZCA9IGRhdGFbMF07CisKKwkJCS8qIElzIHRoZSBJUk0gMTM5NGEtMjAwMCBjb21wbGlhbnQ/ICovCisJCQlpZiAoKGRhdGFbMF0gJiBjKSA9PSAoZGF0YVsxXSAmIGMpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiAxMzk0LTE5OTUgSVJNLCBmYWxsIHRocm91Z2ggdG8gcmV0cnkuICovCisJCWRlZmF1bHQ6CisJCQlpZiAocmV0cnktLSkKKwkJCQlpLS07CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHZvaWQgZGVhbGxvY2F0ZV9jaGFubmVsKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgaXJtX2lkLAorCQkJICAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgY2hhbm5lbCkKK3sKKwl1MzIgbWFzazsKKwl1NjQgb2Zmc2V0OworCisJbWFzayA9IGNoYW5uZWwgPCAzMiA/IDEgPDwgY2hhbm5lbCA6IDEgPDwgKGNoYW5uZWwgLSAzMik7CisJb2Zmc2V0ID0gY2hhbm5lbCA8IDMyID8gQ1NSX1JFR0lTVEVSX0JBU0UgKyBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0hJIDoKKwkJCQlDU1JfUkVHSVNURVJfQkFTRSArIENTUl9DSEFOTkVMU19BVkFJTEFCTEVfTE87CisKKwltYW5hZ2VfY2hhbm5lbChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sIG1hc2ssIG9mZnNldCwgZmFsc2UpOworfQorCisvKioKKyAqIGZ3X2lzb19yZXNvdXJjZV9tYW5hZ2UgLSBBbGxvY2F0ZSBvciBkZWFsbG9jYXRlIGEgY2hhbm5lbCBhbmQvb3IgYmFuZHdpZHRoCisgKgorICogSW4gcGFyYW1ldGVyczogY2FyZCwgZ2VuZXJhdGlvbiwgY2hhbm5lbHNfbWFzaywgYmFuZHdpZHRoLCBhbGxvY2F0ZQorICogT3V0IHBhcmFtZXRlcnM6IGNoYW5uZWwsIGJhbmR3aWR0aAorICogVGhpcyBmdW5jdGlvbiBibG9ja3MgKHNsZWVwcykgZHVyaW5nIGNvbW11bmljYXRpb24gd2l0aCB0aGUgSVJNLgorICoKKyAqIEFsbG9jYXRlcyBvciBkZWFsbG9jYXRlcyBhdCBtb3N0IG9uZSBjaGFubmVsIG91dCBvZiBjaGFubmVsc19tYXNrLgorICogY2hhbm5lbHNfbWFzayBpcyBhIGJpdGZpZWxkIHdpdGggTVNCIGZvciBjaGFubmVsIDYzIGFuZCBMU0IgZm9yIGNoYW5uZWwgMC4KKyAqIChOb3RlLCB0aGUgSVJNJ3MgQ0hBTk5FTFNfQVZBSUxBQkxFIGlzIGEgYmlnLWVuZGlhbiBiaXRmaWVsZCB3aXRoIE1TQiBmb3IKKyAqIGNoYW5uZWwgMCBhbmQgTFNCIGZvciBjaGFubmVsIDYzLikKKyAqIEFsbG9jYXRlcyBvciBkZWFsbG9jYXRlcyBhcyBtYW55IGJhbmR3aWR0aCBhbGxvY2F0aW9uIHVuaXRzIGFzIHNwZWNpZmllZC4KKyAqCisgKiBSZXR1cm5zIGNoYW5uZWwgPCAwIGlmIG5vIGNoYW5uZWwgd2FzIGFsbG9jYXRlZCBvciBkZWFsbG9jYXRlZC4KKyAqIFJldHVybnMgYmFuZHdpZHRoID0gMCBpZiBubyBiYW5kd2lkdGggd2FzIGFsbG9jYXRlZCBvciBkZWFsbG9jYXRlZC4KKyAqCisgKiBJZiBnZW5lcmF0aW9uIGlzIHN0YWxlLCBkZWFsbG9jYXRpb25zIHN1Y2NlZWQgYnV0IGFsbG9jYXRpb25zIGZhaWwgd2l0aAorICogY2hhbm5lbCA9IC1FQUdBSU4uCisgKgorICogSWYgY2hhbm5lbCBhbGxvY2F0aW9uIGZhaWxzLCBubyBiYW5kd2lkdGggd2lsbCBiZSBhbGxvY2F0ZWQgZWl0aGVyLgorICogSWYgYmFuZHdpZHRoIGFsbG9jYXRpb24gZmFpbHMsIG5vIGNoYW5uZWwgd2lsbCBiZSBhbGxvY2F0ZWQgZWl0aGVyLgorICogQnV0IGRlYWxsb2NhdGlvbnMgb2YgY2hhbm5lbCBhbmQgYmFuZHdpZHRoIGFyZSB0cmllZCBpbmRlcGVuZGVudGx5CisgKiBvZiBlYWNoIG90aGVyJ3Mgc3VjY2Vzcy4KKyAqLwordm9pZCBmd19pc29fcmVzb3VyY2VfbWFuYWdlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgZ2VuZXJhdGlvbiwKKwkJCSAgICB1NjQgY2hhbm5lbHNfbWFzaywgaW50ICpjaGFubmVsLCBpbnQgKmJhbmR3aWR0aCwKKwkJCSAgICBib29sIGFsbG9jYXRlKQoreworCXUzMiBjaGFubmVsc19oaSA9IGNoYW5uZWxzX21hc2s7CS8qIGNoYW5uZWxzIDMxLi4uMCAqLworCXUzMiBjaGFubmVsc19sbyA9IGNoYW5uZWxzX21hc2sgPj4gMzI7CS8qIGNoYW5uZWxzIDYzLi4uMzIgKi8KKwlpbnQgaXJtX2lkLCByZXQsIGMgPSAtRUlOVkFMOworCisJc3Bpbl9sb2NrX2lycSgmY2FyZC0+bG9jayk7CisJaXJtX2lkID0gY2FyZC0+aXJtX25vZGUtPm5vZGVfaWQ7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXJkLT5sb2NrKTsKKworCWlmIChjaGFubmVsc19oaSkKKwkJYyA9IG1hbmFnZV9jaGFubmVsKGNhcmQsIGlybV9pZCwgZ2VuZXJhdGlvbiwgY2hhbm5lbHNfaGksCisJCSAgICBDU1JfUkVHSVNURVJfQkFTRSArIENTUl9DSEFOTkVMU19BVkFJTEFCTEVfSEksIGFsbG9jYXRlKTsKKwlpZiAoY2hhbm5lbHNfbG8gJiYgYyA8IDApIHsKKwkJYyA9IG1hbmFnZV9jaGFubmVsKGNhcmQsIGlybV9pZCwgZ2VuZXJhdGlvbiwgY2hhbm5lbHNfbG8sCisJCSAgICBDU1JfUkVHSVNURVJfQkFTRSArIENTUl9DSEFOTkVMU19BVkFJTEFCTEVfTE8sIGFsbG9jYXRlKTsKKwkJaWYgKGMgPj0gMCkKKwkJCWMgKz0gMzI7CisJfQorCSpjaGFubmVsID0gYzsKKworCWlmIChhbGxvY2F0ZSAmJiBjaGFubmVsc19tYXNrICE9IDAgJiYgYyA8IDApCisJCSpiYW5kd2lkdGggPSAwOworCisJaWYgKCpiYW5kd2lkdGggPT0gMCkKKwkJcmV0dXJuOworCisJcmV0ID0gbWFuYWdlX2JhbmR3aWR0aChjYXJkLCBpcm1faWQsIGdlbmVyYXRpb24sICpiYW5kd2lkdGgsIGFsbG9jYXRlKTsKKwlpZiAocmV0IDwgMCkKKwkJKmJhbmR3aWR0aCA9IDA7CisKKwlpZiAoYWxsb2NhdGUgJiYgcmV0IDwgMCAmJiBjID49IDApIHsKKwkJZGVhbGxvY2F0ZV9jaGFubmVsKGNhcmQsIGlybV9pZCwgZ2VuZXJhdGlvbiwgYyk7CisJCSpjaGFubmVsID0gcmV0OworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctb2hjaS5jIGIvZHJpdmVycy9maXJld2lyZS9mdy1vaGNpLmMKaW5kZXggNmQxOTgyOC4uMTE4MGQwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy1vaGNpLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy1vaGNpLmMKQEAgLTIwNSw2ICsyMDUsNyBAQAogCiAJdTMyIGl0X2NvbnRleHRfbWFzazsKIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKml0X2NvbnRleHRfbGlzdDsKKwl1NjQgaXJfY29udGV4dF9jaGFubmVsczsKIAl1MzIgaXJfY29udGV4dF9tYXNrOwogCXN0cnVjdCBpc29fY29udGV4dCAqaXJfY29udGV4dF9saXN0OwogfTsKQEAgLTQ0MSw5ICs0NDIsOCBAQAogCXJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X1ZlcnNpb24pOwogfQogCi1zdGF0aWMgaW50Ci1vaGNpX3VwZGF0ZV9waHlfcmVnKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgYWRkciwKLQkJICAgIGludCBjbGVhcl9iaXRzLCBpbnQgc2V0X2JpdHMpCitzdGF0aWMgaW50IG9oY2lfdXBkYXRlX3BoeV9yZWcoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBhZGRyLAorCQkJICAgICAgIGludCBjbGVhcl9iaXRzLCBpbnQgc2V0X2JpdHMpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBmd19vaGNpKGNhcmQpOwogCXUzMiB2YWwsIG9sZDsKQEAgLTY1OCw4ICs2NTgsOCBAQAogCX0KIH0KIAotc3RhdGljIGludAotYXJfY29udGV4dF9pbml0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsIHN0cnVjdCBmd19vaGNpICpvaGNpLCB1MzIgcmVncykKK3N0YXRpYyBpbnQgYXJfY29udGV4dF9pbml0KHN0cnVjdCBhcl9jb250ZXh0ICpjdHgsCisJCQkgICBzdHJ1Y3QgZndfb2hjaSAqb2hjaSwgdTMyIHJlZ3MpCiB7CiAJc3RydWN0IGFyX2J1ZmZlciBhYjsKIApAQCAtNjkwLDggKzY5MCw3IEBACiAJZmx1c2hfd3JpdGVzKGN0eC0+b2hjaSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVzY3JpcHRvciAqCi1maW5kX2JyYW5jaF9kZXNjcmlwdG9yKHN0cnVjdCBkZXNjcmlwdG9yICpkLCBpbnQgeikKK3N0YXRpYyBzdHJ1Y3QgZGVzY3JpcHRvciAqZmluZF9icmFuY2hfZGVzY3JpcHRvcihzdHJ1Y3QgZGVzY3JpcHRvciAqZCwgaW50IHopCiB7CiAJaW50IGIsIGtleTsKIApAQCAtNzUxLDggKzc1MCw3IEBACiAgKiBBbGxvY2F0ZSBhIG5ldyBidWZmZXIgYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBmcmVlIGJ1ZmZlcnMgZm9yIHRoaXMKICAqIGNvbnRleHQuICBNdXN0IGJlIGNhbGxlZCB3aXRoIG9oY2ktPmxvY2sgaGVsZC4KICAqLwotc3RhdGljIGludAotY29udGV4dF9hZGRfYnVmZmVyKHN0cnVjdCBjb250ZXh0ICpjdHgpCitzdGF0aWMgaW50IGNvbnRleHRfYWRkX2J1ZmZlcihzdHJ1Y3QgY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBkZXNjcmlwdG9yX2J1ZmZlciAqZGVzYzsKIAlkbWFfYWRkcl90IHVuaW5pdGlhbGl6ZWRfdmFyKGJ1c19hZGRyKTsKQEAgLTc4MSw5ICs3NzksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jb250ZXh0X2luaXQoc3RydWN0IGNvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksCi0JICAgICB1MzIgcmVncywgZGVzY3JpcHRvcl9jYWxsYmFja190IGNhbGxiYWNrKQorc3RhdGljIGludCBjb250ZXh0X2luaXQoc3RydWN0IGNvbnRleHQgKmN0eCwgc3RydWN0IGZ3X29oY2kgKm9oY2ksCisJCQl1MzIgcmVncywgZGVzY3JpcHRvcl9jYWxsYmFja190IGNhbGxiYWNrKQogewogCWN0eC0+b2hjaSA9IG9oY2k7CiAJY3R4LT5yZWdzID0gcmVnczsKQEAgLTgxNCw4ICs4MTEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotY29udGV4dF9yZWxlYXNlKHN0cnVjdCBjb250ZXh0ICpjdHgpCitzdGF0aWMgdm9pZCBjb250ZXh0X3JlbGVhc2Uoc3RydWN0IGNvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgZndfY2FyZCAqY2FyZCA9ICZjdHgtPm9oY2ktPmNhcmQ7CiAJc3RydWN0IGRlc2NyaXB0b3JfYnVmZmVyICpkZXNjLCAqdG1wOwpAQCAtODI3LDggKzgyMyw4IEBACiB9CiAKIC8qIE11c3QgYmUgY2FsbGVkIHdpdGggb2hjaS0+bG9jayBoZWxkICovCi1zdGF0aWMgc3RydWN0IGRlc2NyaXB0b3IgKgotY29udGV4dF9nZXRfZGVzY3JpcHRvcnMoc3RydWN0IGNvbnRleHQgKmN0eCwgaW50IHosIGRtYV9hZGRyX3QgKmRfYnVzKQorc3RhdGljIHN0cnVjdCBkZXNjcmlwdG9yICpjb250ZXh0X2dldF9kZXNjcmlwdG9ycyhzdHJ1Y3QgY29udGV4dCAqY3R4LAorCQkJCQkJICBpbnQgeiwgZG1hX2FkZHJfdCAqZF9idXMpCiB7CiAJc3RydWN0IGRlc2NyaXB0b3IgKmQgPSBOVUxMOwogCXN0cnVjdCBkZXNjcmlwdG9yX2J1ZmZlciAqZGVzYyA9IGN0eC0+YnVmZmVyX3RhaWw7CkBAIC05MTIsOCArOTA4LDggQEAKICAqIE11c3QgYWx3YXlzIGJlIGNhbGxlZCB3aXRoIHRoZSBvY2hpLT5sb2NrIGhlbGQgdG8gZW5zdXJlIHByb3BlcgogICogZ2VuZXJhdGlvbiBoYW5kbGluZyBhbmQgbG9ja2luZyBhcm91bmQgcGFja2V0IHF1ZXVlIG1hbmlwdWxhdGlvbi4KICAqLwotc3RhdGljIGludAotYXRfY29udGV4dF9xdWV1ZV9wYWNrZXQoc3RydWN0IGNvbnRleHQgKmN0eCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KQorc3RhdGljIGludCBhdF9jb250ZXh0X3F1ZXVlX3BhY2tldChzdHJ1Y3QgY29udGV4dCAqY3R4LAorCQkJCSAgIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKIHsKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGN0eC0+b2hjaTsKIAlkbWFfYWRkcl90IGRfYnVzLCB1bmluaXRpYWxpemVkX3ZhcihwYXlsb2FkX2J1cyk7CkBAIC05NDAsNyArOTM2LDkgQEAKIAkgKi8KIAogCWhlYWRlciA9IChfX2xlMzIgKikgJmRbMV07Ci0JaWYgKHBhY2tldC0+aGVhZGVyX2xlbmd0aCA+IDgpIHsKKwlzd2l0Y2ggKHBhY2tldC0+aGVhZGVyX2xlbmd0aCkgeworCWNhc2UgMTY6CisJY2FzZSAxMjoKIAkJaGVhZGVyWzBdID0gY3B1X3RvX2xlMzIoKHBhY2tldC0+aGVhZGVyWzBdICYgMHhmZmZmKSB8CiAJCQkJCShwYWNrZXQtPnNwZWVkIDw8IDE2KSk7CiAJCWhlYWRlclsxXSA9IGNwdV90b19sZTMyKChwYWNrZXQtPmhlYWRlclsxXSAmIDB4ZmZmZikgfApAQCAtOTU0LDEyICs5NTIsMjcgQEAKIAkJCWhlYWRlclszXSA9IChfX2ZvcmNlIF9fbGUzMikgcGFja2V0LT5oZWFkZXJbM107CiAKIAkJZFswXS5yZXFfY291bnQgPSBjcHVfdG9fbGUxNihwYWNrZXQtPmhlYWRlcl9sZW5ndGgpOwotCX0gZWxzZSB7CisJCWJyZWFrOworCisJY2FzZSA4OgogCQloZWFkZXJbMF0gPSBjcHVfdG9fbGUzMigoT0hDSTEzOTRfcGh5X3Rjb2RlIDw8IDQpIHwKIAkJCQkJKHBhY2tldC0+c3BlZWQgPDwgMTYpKTsKIAkJaGVhZGVyWzFdID0gY3B1X3RvX2xlMzIocGFja2V0LT5oZWFkZXJbMF0pOwogCQloZWFkZXJbMl0gPSBjcHVfdG9fbGUzMihwYWNrZXQtPmhlYWRlclsxXSk7CiAJCWRbMF0ucmVxX2NvdW50ID0gY3B1X3RvX2xlMTYoMTIpOworCQlicmVhazsKKworCWNhc2UgNDoKKwkJaGVhZGVyWzBdID0gY3B1X3RvX2xlMzIoKHBhY2tldC0+aGVhZGVyWzBdICYgMHhmZmZmKSB8CisJCQkJCShwYWNrZXQtPnNwZWVkIDw8IDE2KSk7CisJCWhlYWRlclsxXSA9IGNwdV90b19sZTMyKHBhY2tldC0+aGVhZGVyWzBdICYgMHhmZmZmMDAwMCk7CisJCWRbMF0ucmVxX2NvdW50ID0gY3B1X3RvX2xlMTYoOCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogQlVHKCk7ICovCisJCXBhY2tldC0+YWNrID0gUkNPREVfU0VORF9FUlJPUjsKKwkJcmV0dXJuIC0xOwogCX0KIAogCWRyaXZlcl9kYXRhID0gKHN0cnVjdCBkcml2ZXJfZGF0YSAqKSAmZFszXTsKQEAgLTEwOTUsOCArMTEwOCw4IEBACiAjZGVmaW5lIEhFQURFUl9HRVRfREFUQV9MRU5HVEgocSkJKCgocSkgPj4gMTYpICYgMHhmZmZmKQogI2RlZmluZSBIRUFERVJfR0VUX0VYVEVOREVEX1RDT0RFKHEpCSgoKHEpID4+IDApICYgMHhmZmZmKQogCi1zdGF0aWMgdm9pZAotaGFuZGxlX2xvY2FsX3JvbShzdHJ1Y3QgZndfb2hjaSAqb2hjaSwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0LCB1MzIgY3NyKQorc3RhdGljIHZvaWQgaGFuZGxlX2xvY2FsX3JvbShzdHJ1Y3QgZndfb2hjaSAqb2hjaSwKKwkJCSAgICAgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0LCB1MzIgY3NyKQogewogCXN0cnVjdCBmd19wYWNrZXQgcmVzcG9uc2U7CiAJaW50IHRjb2RlLCBsZW5ndGgsIGk7CkBAIC0xMTIyLDggKzExMzUsOCBAQAogCWZ3X2NvcmVfaGFuZGxlX3Jlc3BvbnNlKCZvaGNpLT5jYXJkLCAmcmVzcG9uc2UpOwogfQogCi1zdGF0aWMgdm9pZAotaGFuZGxlX2xvY2FsX2xvY2soc3RydWN0IGZ3X29oY2kgKm9oY2ksIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwgdTMyIGNzcikKK3N0YXRpYyB2b2lkIGhhbmRsZV9sb2NhbF9sb2NrKHN0cnVjdCBmd19vaGNpICpvaGNpLAorCQkJICAgICAgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0LCB1MzIgY3NyKQogewogCXN0cnVjdCBmd19wYWNrZXQgcmVzcG9uc2U7CiAJaW50IHRjb2RlLCBsZW5ndGgsIGV4dF90Y29kZSwgc2VsOwpAQCAtMTE2NCw4ICsxMTc3LDcgQEAKIAlmd19jb3JlX2hhbmRsZV9yZXNwb25zZSgmb2hjaS0+Y2FyZCwgJnJlc3BvbnNlKTsKIH0KIAotc3RhdGljIHZvaWQKLWhhbmRsZV9sb2NhbF9yZXF1ZXN0KHN0cnVjdCBjb250ZXh0ICpjdHgsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKK3N0YXRpYyB2b2lkIGhhbmRsZV9sb2NhbF9yZXF1ZXN0KHN0cnVjdCBjb250ZXh0ICpjdHgsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKIHsKIAl1NjQgb2Zmc2V0OwogCXUzMiBjc3I7CkBAIC0xMjA1LDExICsxMjE3LDEwIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZAotYXRfY29udGV4dF90cmFuc21pdChzdHJ1Y3QgY29udGV4dCAqY3R4LCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpCitzdGF0aWMgdm9pZCBhdF9jb250ZXh0X3RyYW5zbWl0KHN0cnVjdCBjb250ZXh0ICpjdHgsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXR2YWw7CisJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjdHgtPm9oY2ktPmxvY2ssIGZsYWdzKTsKIApAQCAtMTIyMCwxMCArMTIzMSwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JcmV0dmFsID0gYXRfY29udGV4dF9xdWV1ZV9wYWNrZXQoY3R4LCBwYWNrZXQpOworCXJldCA9IGF0X2NvbnRleHRfcXVldWVfcGFja2V0KGN0eCwgcGFja2V0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPm9oY2ktPmxvY2ssIGZsYWdzKTsKIAotCWlmIChyZXR2YWwgPCAwKQorCWlmIChyZXQgPCAwKQogCQlwYWNrZXQtPmNhbGxiYWNrKHBhY2tldCwgJmN0eC0+b2hjaS0+Y2FyZCwgcGFja2V0LT5hY2spOwogCiB9CkBAIC0xNTkwLDEyICsxNjAxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLW9oY2lfc2V0X2NvbmZpZ19yb20oc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHUzMiAqY29uZmlnX3JvbSwgc2l6ZV90IGxlbmd0aCkKK3N0YXRpYyBpbnQgb2hjaV9zZXRfY29uZmlnX3JvbShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCSAgICAgICB1MzIgKmNvbmZpZ19yb20sIHNpemVfdCBsZW5ndGgpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2k7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0dmFsID0gLUVCVVNZOworCWludCByZXQgPSAtRUJVU1k7CiAJX19iZTMyICpuZXh0X2NvbmZpZ19yb207CiAJZG1hX2FkZHJfdCB1bmluaXRpYWxpemVkX3ZhcihuZXh0X2NvbmZpZ19yb21fYnVzKTsKIApAQCAtMTY0OSw3ICsxNjYwLDcgQEAKIAogCQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfQ29uZmlnUk9NbWFwLAogCQkJICBvaGNpLT5uZXh0X2NvbmZpZ19yb21fYnVzKTsKLQkJcmV0dmFsID0gMDsKKwkJcmV0ID0gMDsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CkBAIC0xNjYxLDEzICsxNjcyLDEzIEBACiAJICogY29udHJvbGxlciBjb3VsZCBuZWVkIHRvIGFjY2VzcyBpdCBiZWZvcmUgdGhlIGJ1cyByZXNldAogCSAqIHRha2VzIGVmZmVjdC4KIAkgKi8KLQlpZiAocmV0dmFsID09IDApCisJaWYgKHJldCA9PSAwKQogCQlmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldCgmb2hjaS0+Y2FyZCwgMSk7CiAJZWxzZQogCQlkbWFfZnJlZV9jb2hlcmVudChvaGNpLT5jYXJkLmRldmljZSwgQ09ORklHX1JPTV9TSVpFLAogCQkJCSAgbmV4dF9jb25maWdfcm9tLCBuZXh0X2NvbmZpZ19yb21fYnVzKTsKIAotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgb2hjaV9zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKQEAgLTE2ODksNyArMTcwMCw3IEBACiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBmd19vaGNpKGNhcmQpOwogCXN0cnVjdCBjb250ZXh0ICpjdHggPSAmb2hjaS0+YXRfcmVxdWVzdF9jdHg7CiAJc3RydWN0IGRyaXZlcl9kYXRhICpkcml2ZXJfZGF0YSA9IHBhY2tldC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHJldHZhbCA9IC1FTk9FTlQ7CisJaW50IHJldCA9IC1FTk9FTlQ7CiAKIAl0YXNrbGV0X2Rpc2FibGUoJmN0eC0+dGFza2xldCk7CiAKQEAgLTE3MDQsMjMgKzE3MTUsMjIgQEAKIAlkcml2ZXJfZGF0YS0+cGFja2V0ID0gTlVMTDsKIAlwYWNrZXQtPmFjayA9IFJDT0RFX0NBTkNFTExFRDsKIAlwYWNrZXQtPmNhbGxiYWNrKHBhY2tldCwgJm9oY2ktPmNhcmQsIHBhY2tldC0+YWNrKTsKLQlyZXR2YWwgPSAwOwotCisJcmV0ID0gMDsKICBvdXQ6CiAJdGFza2xldF9lbmFibGUoJmN0eC0+dGFza2xldCk7CiAKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKLW9oY2lfZW5hYmxlX3BoeXNfZG1hKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24pCitzdGF0aWMgaW50IG9oY2lfZW5hYmxlX3BoeXNfZG1hKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJCWludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbikKIHsKICNpZmRlZiBDT05GSUdfRklSRVdJUkVfT0hDSV9SRU1PVEVfRE1BCiAJcmV0dXJuIDA7CiAjZWxzZQogCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBuLCByZXR2YWwgPSAwOworCWludCBuLCByZXQgPSAwOwogCiAJLyoKIAkgKiBGSVhNRTogIE1ha2Ugc3VyZSB0aGlzIGJpdG1hc2sgaXMgY2xlYXJlZCB3aGVuIHdlIGNsZWFyIHRoZSBidXNSZXNldApAQCAtMTczMCw3ICsxNzQwLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKG9oY2ktPmdlbmVyYXRpb24gIT0gZ2VuZXJhdGlvbikgewotCQlyZXR2YWwgPSAtRVNUQUxFOworCQlyZXQgPSAtRVNUQUxFOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE3NDgsMTIgKzE3NTgsMTIgQEAKIAlmbHVzaF93cml0ZXMob2hjaSk7CiAgb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmV0dmFsOworCisJcmV0dXJuIHJldDsKICNlbmRpZiAvKiBDT05GSUdfRklSRVdJUkVfT0hDSV9SRU1PVEVfRE1BICovCiB9CiAKLXN0YXRpYyB1NjQKLW9oY2lfZ2V0X2J1c190aW1lKHN0cnVjdCBmd19jYXJkICpjYXJkKQorc3RhdGljIHU2NCBvaGNpX2dldF9idXNfdGltZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaSA9IGZ3X29oY2koY2FyZCk7CiAJdTMyIGN5Y2xlX3RpbWU7CkBAIC0xNzY1LDYgKzE3NzUsMjggQEAKIAlyZXR1cm4gYnVzX3RpbWU7CiB9CiAKK3N0YXRpYyB2b2lkIGNvcHlfaXNvX2hlYWRlcnMoc3RydWN0IGlzb19jb250ZXh0ICpjdHgsIHZvaWQgKnApCit7CisJaW50IGkgPSBjdHgtPmhlYWRlcl9sZW5ndGg7CisKKwlpZiAoaSArIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSA+IFBBR0VfU0laRSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBUaGUgaXNvIGhlYWRlciBpcyBieXRlc3dhcHBlZCB0byBsaXR0bGUgZW5kaWFuIGJ5CisJICogdGhlIGNvbnRyb2xsZXIsIGJ1dCB0aGUgcmVtYWluaW5nIGhlYWRlciBxdWFkbGV0cworCSAqIGFyZSBiaWcgZW5kaWFuLiAgV2Ugd2FudCB0byBwcmVzZW50IGFsbCB0aGUgaGVhZGVycworCSAqIGFzIGJpZyBlbmRpYW4sIHNvIHdlIGhhdmUgdG8gc3dhcCB0aGUgZmlyc3QgcXVhZGxldC4KKwkgKi8KKwlpZiAoY3R4LT5iYXNlLmhlYWRlcl9zaXplID4gMCkKKwkJKih1MzIgKikgKGN0eC0+aGVhZGVyICsgaSkgPSBfX3N3YWIzMigqKHUzMiAqKSAocCArIDQpKTsKKwlpZiAoY3R4LT5iYXNlLmhlYWRlcl9zaXplID4gNCkKKwkJKih1MzIgKikgKGN0eC0+aGVhZGVyICsgaSArIDQpID0gX19zd2FiMzIoKih1MzIgKikgcCk7CisJaWYgKGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSA+IDgpCisJCW1lbWNweShjdHgtPmhlYWRlciArIGkgKyA4LCBwICsgOCwgY3R4LT5iYXNlLmhlYWRlcl9zaXplIC0gOCk7CisJY3R4LT5oZWFkZXJfbGVuZ3RoICs9IGN0eC0+YmFzZS5oZWFkZXJfc2l6ZTsKK30KKwogc3RhdGljIGludCBoYW5kbGVfaXJfZHVhbGJ1ZmZlcl9wYWNrZXQoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCiAJCQkJICAgICAgIHN0cnVjdCBkZXNjcmlwdG9yICpkLAogCQkJCSAgICAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqbGFzdCkKQEAgLTE3NzUsNyArMTgwNyw2IEBACiAJX19sZTMyICppcl9oZWFkZXI7CiAJc2l6ZV90IGhlYWRlcl9sZW5ndGg7CiAJdm9pZCAqcCwgKmVuZDsKLQlpbnQgaTsKIAogCWlmIChkYi0+Zmlyc3RfcmVzX2NvdW50ICE9IDAgJiYgZGItPnNlY29uZF9yZXNfY291bnQgIT0gMCkgewogCQlpZiAoY3R4LT5leGNlc3NfYnl0ZXMgPD0gbGUxNl90b19jcHUoZGItPnNlY29uZF9yZXFfY291bnQpKSB7CkBAIC0xNzg4LDI1ICsxODE5LDE0IEBACiAJaGVhZGVyX2xlbmd0aCA9IGxlMTZfdG9fY3B1KGRiLT5maXJzdF9yZXFfY291bnQpIC0KIAkJbGUxNl90b19jcHUoZGItPmZpcnN0X3Jlc19jb3VudCk7CiAKLQlpID0gY3R4LT5oZWFkZXJfbGVuZ3RoOwogCXAgPSBkYiArIDE7CiAJZW5kID0gcCArIGhlYWRlcl9sZW5ndGg7Ci0Jd2hpbGUgKHAgPCBlbmQgJiYgaSArIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSA8PSBQQUdFX1NJWkUpIHsKLQkJLyoKLQkJICogVGhlIGlzbyBoZWFkZXIgaXMgYnl0ZXN3YXBwZWQgdG8gbGl0dGxlIGVuZGlhbiBieQotCQkgKiB0aGUgY29udHJvbGxlciwgYnV0IHRoZSByZW1haW5pbmcgaGVhZGVyIHF1YWRsZXRzCi0JCSAqIGFyZSBiaWcgZW5kaWFuLiAgV2Ugd2FudCB0byBwcmVzZW50IGFsbCB0aGUgaGVhZGVycwotCQkgKiBhcyBiaWcgZW5kaWFuLCBzbyB3ZSBoYXZlIHRvIHN3YXAgdGhlIGZpcnN0Ci0JCSAqIHF1YWRsZXQuCi0JCSAqLwotCQkqKHUzMiAqKSAoY3R4LT5oZWFkZXIgKyBpKSA9IF9fc3dhYjMyKCoodTMyICopIChwICsgNCkpOwotCQltZW1jcHkoY3R4LT5oZWFkZXIgKyBpICsgNCwgcCArIDgsIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSAtIDQpOwotCQlpICs9IGN0eC0+YmFzZS5oZWFkZXJfc2l6ZTsKKwl3aGlsZSAocCA8IGVuZCkgeworCQljb3B5X2lzb19oZWFkZXJzKGN0eCwgcCk7CiAJCWN0eC0+ZXhjZXNzX2J5dGVzICs9CiAJCQkobGUzMl90b19jcHUoKihfX2xlMzIgKikocCArIDQpKSA+PiAxNikgJiAweGZmZmY7Ci0JCXAgKz0gY3R4LT5iYXNlLmhlYWRlcl9zaXplICsgNDsKKwkJcCArPSBtYXgoY3R4LT5iYXNlLmhlYWRlcl9zaXplLCAoc2l6ZV90KTgpOwogCX0KLQljdHgtPmhlYWRlcl9sZW5ndGggPSBpOwogCiAJY3R4LT5leGNlc3NfYnl0ZXMgLT0gbGUxNl90b19jcHUoZGItPnNlY29uZF9yZXFfY291bnQpIC0KIAkJbGUxNl90b19jcHUoZGItPnNlY29uZF9yZXNfY291bnQpOwpAQCAtMTgzMiw3ICsxODUyLDYgQEAKIAlzdHJ1Y3QgZGVzY3JpcHRvciAqcGQ7CiAJX19sZTMyICppcl9oZWFkZXI7CiAJdm9pZCAqcDsKLQlpbnQgaTsKIAogCWZvciAocGQgPSBkOyBwZCA8PSBsYXN0OyBwZCsrKSB7CiAJCWlmIChwZC0+dHJhbnNmZXJfc3RhdHVzKQpAQCAtMTg0MiwyMSArMTg2MSw4IEBACiAJCS8qIERlc2NyaXB0b3Iocykgbm90IGRvbmUgeWV0LCBzdG9wIGl0ZXJhdGlvbiAqLwogCQlyZXR1cm4gMDsKIAotCWkgICA9IGN0eC0+aGVhZGVyX2xlbmd0aDsKLQlwICAgPSBsYXN0ICsgMTsKLQotCWlmIChjdHgtPmJhc2UuaGVhZGVyX3NpemUgPiAwICYmCi0JCQlpICsgY3R4LT5iYXNlLmhlYWRlcl9zaXplIDw9IFBBR0VfU0laRSkgewotCQkvKgotCQkgKiBUaGUgaXNvIGhlYWRlciBpcyBieXRlc3dhcHBlZCB0byBsaXR0bGUgZW5kaWFuIGJ5Ci0JCSAqIHRoZSBjb250cm9sbGVyLCBidXQgdGhlIHJlbWFpbmluZyBoZWFkZXIgcXVhZGxldHMKLQkJICogYXJlIGJpZyBlbmRpYW4uICBXZSB3YW50IHRvIHByZXNlbnQgYWxsIHRoZSBoZWFkZXJzCi0JCSAqIGFzIGJpZyBlbmRpYW4sIHNvIHdlIGhhdmUgdG8gc3dhcCB0aGUgZmlyc3QgcXVhZGxldC4KLQkJICovCi0JCSoodTMyICopIChjdHgtPmhlYWRlciArIGkpID0gX19zd2FiMzIoKih1MzIgKikgKHAgKyA0KSk7Ci0JCW1lbWNweShjdHgtPmhlYWRlciArIGkgKyA0LCBwICsgOCwgY3R4LT5iYXNlLmhlYWRlcl9zaXplIC0gNCk7Ci0JCWN0eC0+aGVhZGVyX2xlbmd0aCArPSBjdHgtPmJhc2UuaGVhZGVyX3NpemU7Ci0JfQorCXAgPSBsYXN0ICsgMTsKKwljb3B5X2lzb19oZWFkZXJzKGN0eCwgcCk7CiAKIAlpZiAobGUxNl90b19jcHUobGFzdC0+Y29udHJvbCkgJiBERVNDUklQVE9SX0lSUV9BTFdBWVMpIHsKIAkJaXJfaGVhZGVyID0gKF9fbGUzMiAqKSBwOwpAQCAtMTg4OCwyMSArMTg5NCwyNCBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGZ3X2lzb19jb250ZXh0ICoKLW9oY2lfYWxsb2NhdGVfaXNvX2NvbnRleHQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCB0eXBlLCBzaXplX3QgaGVhZGVyX3NpemUpCitzdGF0aWMgc3RydWN0IGZ3X2lzb19jb250ZXh0ICpvaGNpX2FsbG9jYXRlX2lzb19jb250ZXh0KHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJCWludCB0eXBlLCBpbnQgY2hhbm5lbCwgc2l6ZV90IGhlYWRlcl9zaXplKQogewogCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCwgKmxpc3Q7CiAJZGVzY3JpcHRvcl9jYWxsYmFja190IGNhbGxiYWNrOworCXU2NCAqY2hhbm5lbHMsIGRvbnRfY2FyZSA9IH4wVUxMOwogCXUzMiAqbWFzaywgcmVnczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpbmRleCwgcmV0dmFsID0gLUVOT01FTTsKKwlpbnQgaW5kZXgsIHJldCA9IC1FTk9NRU07CiAKIAlpZiAodHlwZSA9PSBGV19JU09fQ09OVEVYVF9UUkFOU01JVCkgeworCQljaGFubmVscyA9ICZkb250X2NhcmU7CiAJCW1hc2sgPSAmb2hjaS0+aXRfY29udGV4dF9tYXNrOwogCQlsaXN0ID0gb2hjaS0+aXRfY29udGV4dF9saXN0OwogCQljYWxsYmFjayA9IGhhbmRsZV9pdF9wYWNrZXQ7CiAJfSBlbHNlIHsKKwkJY2hhbm5lbHMgPSAmb2hjaS0+aXJfY29udGV4dF9jaGFubmVsczsKIAkJbWFzayA9ICZvaGNpLT5pcl9jb250ZXh0X21hc2s7CiAJCWxpc3QgPSBvaGNpLT5pcl9jb250ZXh0X2xpc3Q7CiAJCWlmIChvaGNpLT51c2VfZHVhbGJ1ZmZlcikKQEAgLTE5MTIsOSArMTkyMSwxMSBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZvaGNpLT5sb2NrLCBmbGFncyk7Ci0JaW5kZXggPSBmZnMoKm1hc2spIC0gMTsKLQlpZiAoaW5kZXggPj0gMCkKKwlpbmRleCA9ICpjaGFubmVscyAmIDFVTEwgPDwgY2hhbm5lbCA/IGZmcygqbWFzaykgLSAxIDogLTE7CisJaWYgKGluZGV4ID49IDApIHsKKwkJKmNoYW5uZWxzICY9IH4oMVVMTCA8PCBjaGFubmVsKTsKIAkJKm1hc2sgJj0gfigxIDw8IGluZGV4KTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGluZGV4IDwgMCkKQEAgLTE5MzIsOCArMTk0Myw4IEBACiAJaWYgKGN0eC0+aGVhZGVyID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCi0JcmV0dmFsID0gY29udGV4dF9pbml0KCZjdHgtPmNvbnRleHQsIG9oY2ksIHJlZ3MsIGNhbGxiYWNrKTsKLQlpZiAocmV0dmFsIDwgMCkKKwlyZXQgPSBjb250ZXh0X2luaXQoJmN0eC0+Y29udGV4dCwgb2hjaSwgcmVncywgY2FsbGJhY2spOworCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF93aXRoX2hlYWRlcjsKIAogCXJldHVybiAmY3R4LT5iYXNlOwpAQCAtMTk0NSw3ICsxOTU2LDcgQEAKIAkqbWFzayB8PSAxIDw8IGluZGV4OwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiBFUlJfUFRSKHJldHZhbCk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAogc3RhdGljIGludCBvaGNpX3N0YXJ0X2lzbyhzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UsCkBAIC0yMDI0LDE2ICsyMDM1LDE2IEBACiAJfSBlbHNlIHsKIAkJaW5kZXggPSBjdHggLSBvaGNpLT5pcl9jb250ZXh0X2xpc3Q7CiAJCW9oY2ktPmlyX2NvbnRleHRfbWFzayB8PSAxIDw8IGluZGV4OworCQlvaGNpLT5pcl9jb250ZXh0X2NoYW5uZWxzIHw9IDFVTEwgPDwgYmFzZS0+Y2hhbm5lbDsKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQKLW9oY2lfcXVldWVfaXNvX3RyYW5zbWl0KHN0cnVjdCBmd19pc29fY29udGV4dCAqYmFzZSwKLQkJCXN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCi0JCQlzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAotCQkJdW5zaWduZWQgbG9uZyBwYXlsb2FkKQorc3RhdGljIGludCBvaGNpX3F1ZXVlX2lzb190cmFuc21pdChzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UsCisJCQkJICAgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKKwkJCQkgICBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgaXNvX2NvbnRleHQsIGJhc2UpOwogCXN0cnVjdCBkZXNjcmlwdG9yICpkLCAqbGFzdCwgKnBkOwpAQCAtMjEyOCwxMSArMjEzOSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1vaGNpX3F1ZXVlX2lzb19yZWNlaXZlX2R1YWxidWZmZXIoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAotCQkJCSAgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKLQkJCQkgIHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCi0JCQkJICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCitzdGF0aWMgaW50IG9oY2lfcXVldWVfaXNvX3JlY2VpdmVfZHVhbGJ1ZmZlcihzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UsCisJCQkJCSAgICAgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKKwkJCQkJICAgICBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgaXNvX2NvbnRleHQsIGJhc2UpOwogCXN0cnVjdCBkYl9kZXNjcmlwdG9yICpkYiA9IE5VTEw7CkBAIC0yMTUxLDExICsyMTYxLDExIEBACiAJeiA9IDI7CiAKIAkvKgotCSAqIFRoZSBPSENJIGNvbnRyb2xsZXIgcHV0cyB0aGUgc3RhdHVzIHdvcmQgaW4gdGhlIGhlYWRlcgotCSAqIGJ1ZmZlciB0b28sIHNvIHdlIG5lZWQgNCBleHRyYSBieXRlcyBwZXIgcGFja2V0LgorCSAqIFRoZSBPSENJIGNvbnRyb2xsZXIgcHV0cyB0aGUgaXNvY2hyb25vdXMgaGVhZGVyIGFuZCB0cmFpbGVyIGluIHRoZQorCSAqIGJ1ZmZlciwgc28gd2UgbmVlZCBhdCBsZWFzdCA4IGJ5dGVzLgogCSAqLwogCXBhY2tldF9jb3VudCA9IHAtPmhlYWRlcl9sZW5ndGggLyBjdHgtPmJhc2UuaGVhZGVyX3NpemU7Ci0JaGVhZGVyX3NpemUgPSBwYWNrZXRfY291bnQgKiAoY3R4LT5iYXNlLmhlYWRlcl9zaXplICsgNCk7CisJaGVhZGVyX3NpemUgPSBwYWNrZXRfY291bnQgKiBtYXgoY3R4LT5iYXNlLmhlYWRlcl9zaXplLCAoc2l6ZV90KTgpOwogCiAJLyogR2V0IGhlYWRlciBzaXplIGluIG51bWJlciBvZiBkZXNjcmlwdG9ycy4gKi8KIAloZWFkZXJfeiA9IERJVl9ST1VORF9VUChoZWFkZXJfc2l6ZSwgc2l6ZW9mKCpkKSk7CkBAIC0yMTczLDcgKzIxODMsOCBAQAogCQlkYiA9IChzdHJ1Y3QgZGJfZGVzY3JpcHRvciAqKSBkOwogCQlkYi0+Y29udHJvbCA9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfU1RBVFVTIHwKIAkJCQkJICBERVNDUklQVE9SX0JSQU5DSF9BTFdBWVMpOwotCQlkYi0+Zmlyc3Rfc2l6ZSA9IGNwdV90b19sZTE2KGN0eC0+YmFzZS5oZWFkZXJfc2l6ZSArIDQpOworCQlkYi0+Zmlyc3Rfc2l6ZSA9CisJCSAgICBjcHVfdG9fbGUxNihtYXgoY3R4LT5iYXNlLmhlYWRlcl9zaXplLCAoc2l6ZV90KTgpKTsKIAkJaWYgKHAtPnNraXAgJiYgcmVzdCA9PSBwLT5wYXlsb2FkX2xlbmd0aCkgewogCQkJZGItPmNvbnRyb2wgfD0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9XQUlUKTsKIAkJCWRiLT5maXJzdF9yZXFfY291bnQgPSBkYi0+Zmlyc3Rfc2l6ZTsKQEAgLTIyMDgsMTEgKzIyMTksMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotb2hjaV9xdWV1ZV9pc29fcmVjZWl2ZV9wYWNrZXRfcGVyX2J1ZmZlcihzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UsCi0JCQkJCSBzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAotCQkJCQkgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJCQkJIHVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKK3N0YXRpYyBpbnQgb2hjaV9xdWV1ZV9pc29fcmVjZWl2ZV9wYWNrZXRfcGVyX2J1ZmZlcihzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmJhc2UsCisJCQkJCXN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCQkJCXN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsCisJCQkJCXVuc2lnbmVkIGxvbmcgcGF5bG9hZCkKIHsKIAlzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihiYXNlLCBzdHJ1Y3QgaXNvX2NvbnRleHQsIGJhc2UpOwogCXN0cnVjdCBkZXNjcmlwdG9yICpkID0gTlVMTCwgKnBkID0gTlVMTDsKQEAgLTIyMjMsMTEgKzIyMzMsMTEgQEAKIAlpbnQgcGFnZSwgb2Zmc2V0LCBwYWNrZXRfY291bnQsIGhlYWRlcl9zaXplLCBwYXlsb2FkX3Blcl9idWZmZXI7CiAKIAkvKgotCSAqIFRoZSBPSENJIGNvbnRyb2xsZXIgcHV0cyB0aGUgc3RhdHVzIHdvcmQgaW4gdGhlCi0JICogYnVmZmVyIHRvbywgc28gd2UgbmVlZCA0IGV4dHJhIGJ5dGVzIHBlciBwYWNrZXQuCisJICogVGhlIE9IQ0kgY29udHJvbGxlciBwdXRzIHRoZSBpc29jaHJvbm91cyBoZWFkZXIgYW5kIHRyYWlsZXIgaW4gdGhlCisJICogYnVmZmVyLCBzbyB3ZSBuZWVkIGF0IGxlYXN0IDggYnl0ZXMuCiAJICovCiAJcGFja2V0X2NvdW50ID0gcC0+aGVhZGVyX2xlbmd0aCAvIGN0eC0+YmFzZS5oZWFkZXJfc2l6ZTsKLQloZWFkZXJfc2l6ZSAgPSBjdHgtPmJhc2UuaGVhZGVyX3NpemUgKyA0OworCWhlYWRlcl9zaXplICA9IG1heChjdHgtPmJhc2UuaGVhZGVyX3NpemUsIChzaXplX3QpOCk7CiAKIAkvKiBHZXQgaGVhZGVyIHNpemUgaW4gbnVtYmVyIG9mIGRlc2NyaXB0b3JzLiAqLwogCWhlYWRlcl96ID0gRElWX1JPVU5EX1VQKGhlYWRlcl9zaXplLCBzaXplb2YoKmQpKTsKQEAgLTIyODYsMjkgKzIyOTYsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotb2hjaV9xdWV1ZV9pc28oc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAotCSAgICAgICBzdHJ1Y3QgZndfaXNvX3BhY2tldCAqcGFja2V0LAotCSAgICAgICBzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAotCSAgICAgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCitzdGF0aWMgaW50IG9oY2lfcXVldWVfaXNvKHN0cnVjdCBmd19pc29fY29udGV4dCAqYmFzZSwKKwkJCSAgc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKKwkJCSAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJCSAgdW5zaWduZWQgbG9uZyBwYXlsb2FkKQogewogCXN0cnVjdCBpc29fY29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGJhc2UsIHN0cnVjdCBpc29fY29udGV4dCwgYmFzZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0dmFsOworCWludCByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5jb250ZXh0Lm9oY2ktPmxvY2ssIGZsYWdzKTsKIAlpZiAoYmFzZS0+dHlwZSA9PSBGV19JU09fQ09OVEVYVF9UUkFOU01JVCkKLQkJcmV0dmFsID0gb2hjaV9xdWV1ZV9pc29fdHJhbnNtaXQoYmFzZSwgcGFja2V0LCBidWZmZXIsIHBheWxvYWQpOworCQlyZXQgPSBvaGNpX3F1ZXVlX2lzb190cmFuc21pdChiYXNlLCBwYWNrZXQsIGJ1ZmZlciwgcGF5bG9hZCk7CiAJZWxzZSBpZiAoY3R4LT5jb250ZXh0Lm9oY2ktPnVzZV9kdWFsYnVmZmVyKQotCQlyZXR2YWwgPSBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX2R1YWxidWZmZXIoYmFzZSwgcGFja2V0LAotCQkJCQkJCSBidWZmZXIsIHBheWxvYWQpOworCQlyZXQgPSBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX2R1YWxidWZmZXIoYmFzZSwgcGFja2V0LAorCQkJCQkJCWJ1ZmZlciwgcGF5bG9hZCk7CiAJZWxzZQotCQlyZXR2YWwgPSBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX3BhY2tldF9wZXJfYnVmZmVyKGJhc2UsIHBhY2tldCwKLQkJCQkJCQkJYnVmZmVyLAotCQkJCQkJCQlwYXlsb2FkKTsKKwkJcmV0ID0gb2hjaV9xdWV1ZV9pc29fcmVjZWl2ZV9wYWNrZXRfcGVyX2J1ZmZlcihiYXNlLCBwYWNrZXQsCisJCQkJCQkJYnVmZmVyLCBwYXlsb2FkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPmNvbnRleHQub2hjaS0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZ3X2NhcmRfZHJpdmVyIG9oY2lfZHJpdmVyID0gewpAQCAtMjM1Nyw4ICsyMzY1LDggQEAKICNkZWZpbmUgb2hjaV9wbWFjX29mZihkZXYpCiAjZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0Ci1wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2k7CiAJdTMyIGJ1c19vcHRpb25zLCBtYXhfcmVjZWl2ZSwgbGlua19zcGVlZCwgdmVyc2lvbjsKQEAgLTI0NDAsNiArMjQ0OCw3IEBACiAJb2hjaS0+aXRfY29udGV4dF9saXN0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza1NldCwgfjApOworCW9oY2ktPmlyX2NvbnRleHRfY2hhbm5lbHMgPSB+MFVMTDsKIAlvaGNpLT5pcl9jb250ZXh0X21hc2sgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza1NldCk7CiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrQ2xlYXIsIH4wKTsKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpc29fY29udGV4dCkgKiBod2VpZ2h0MzIob2hjaS0+aXJfY29udGV4dF9tYXNrKTsKQEAgLTI0NjcsMTEgKzI0NzYsMTIgQEAKIAkJcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfR1VJRExvKTsKIAogCWVyciA9IGZ3X2NhcmRfYWRkKCZvaGNpLT5jYXJkLCBtYXhfcmVjZWl2ZSwgbGlua19zcGVlZCwgZ3VpZCk7Ci0JaWYgKGVyciA8IDApCisJaWYgKGVycikKIAkJZ290byBmYWlsX3NlbGZfaWQ7CiAKIAlmd19ub3RpZnkoIkFkZGVkIGZ3LW9oY2kgZGV2aWNlICVzLCBPSENJIHZlcnNpb24gJXguJXhcbiIsCiAJCSAgZGV2X25hbWUoJmRldi0+ZGV2KSwgdmVyc2lvbiA+PiAxNiwgdmVyc2lvbiAmIDB4ZmYpOworCiAJcmV0dXJuIDA7CiAKICBmYWlsX3NlbGZfaWQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXNicDIuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctc2JwMi5jCmluZGV4IGM3MWM0NDEuLjJiY2Y1MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvZnctc2JwMi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctc2JwMi5jCkBAIC0zOTIsMjAgKzM5MiwxOCBAQAogCX0KIH07CiAKLXN0YXRpYyB2b2lkCi1mcmVlX29yYihzdHJ1Y3Qga3JlZiAqa3JlZikKK3N0YXRpYyB2b2lkIGZyZWVfb3JiKHN0cnVjdCBrcmVmICprcmVmKQogewogCXN0cnVjdCBzYnAyX29yYiAqb3JiID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBzYnAyX29yYiwga3JlZik7CiAKIAlrZnJlZShvcmIpOwogfQogCi1zdGF0aWMgdm9pZAotc2JwMl9zdGF0dXNfd3JpdGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAotCQkgIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLAotCQkgIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCi0JCSAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKLQkJICB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQorc3RhdGljIHZvaWQgc2JwMl9zdGF0dXNfd3JpdGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAorCQkJICAgICAgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb24sIGludCBzb3VyY2UsCisJCQkgICAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJCSAgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmNhbGxiYWNrX2RhdGEpCiB7CiAJc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSA9IGNhbGxiYWNrX2RhdGE7CiAJc3RydWN0IHNicDJfb3JiICpvcmI7CkBAIC00NTEsOSArNDQ5LDggQEAKIAlmd19zZW5kX3Jlc3BvbnNlKGNhcmQsIHJlcXVlc3QsIFJDT0RFX0NPTVBMRVRFKTsKIH0KIAotc3RhdGljIHZvaWQKLWNvbXBsZXRlX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCi0JCSAgICAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgcmNvZGUsCisJCQkJIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNicDJfb3JiICpvcmIgPSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00ODIsOSArNDc5LDggQEAKIAlrcmVmX3B1dCgmb3JiLT5rcmVmLCBmcmVlX29yYik7CiB9CiAKLXN0YXRpYyB2b2lkCi1zYnAyX3NlbmRfb3JiKHN0cnVjdCBzYnAyX29yYiAqb3JiLCBzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1LAotCSAgICAgIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgdTY0IG9mZnNldCkKK3N0YXRpYyB2b2lkIHNicDJfc2VuZF9vcmIoc3RydWN0IHNicDJfb3JiICpvcmIsIHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUsCisJCQkgIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgdTY0IG9mZnNldCkKIHsKIAlzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UgPSBmd19kZXZpY2UobHUtPnRndC0+dW5pdC0+ZGV2aWNlLnBhcmVudCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTUzMSw4ICs1MjcsOCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyB2b2lkCi1jb21wbGV0ZV9tYW5hZ2VtZW50X29yYihzdHJ1Y3Qgc2JwMl9vcmIgKmJhc2Vfb3JiLCBzdHJ1Y3Qgc2JwMl9zdGF0dXMgKnN0YXR1cykKK3N0YXRpYyB2b2lkIGNvbXBsZXRlX21hbmFnZW1lbnRfb3JiKHN0cnVjdCBzYnAyX29yYiAqYmFzZV9vcmIsCisJCQkJICAgIHN0cnVjdCBzYnAyX3N0YXR1cyAqc3RhdHVzKQogewogCXN0cnVjdCBzYnAyX21hbmFnZW1lbnRfb3JiICpvcmIgPQogCQljb250YWluZXJfb2YoYmFzZV9vcmIsIHN0cnVjdCBzYnAyX21hbmFnZW1lbnRfb3JiLCBiYXNlKTsKQEAgLTU0MiwxMCArNTM4LDkgQEAKIAljb21wbGV0ZSgmb3JiLT5kb25lKTsKIH0KIAotc3RhdGljIGludAotc2JwMl9zZW5kX21hbmFnZW1lbnRfb3JiKHN0cnVjdCBzYnAyX2xvZ2ljYWxfdW5pdCAqbHUsIGludCBub2RlX2lkLAotCQkJIGludCBnZW5lcmF0aW9uLCBpbnQgZnVuY3Rpb24sIGludCBsdW5fb3JfbG9naW5faWQsCi0JCQkgdm9pZCAqcmVzcG9uc2UpCitzdGF0aWMgaW50IHNicDJfc2VuZF9tYW5hZ2VtZW50X29yYihzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1LCBpbnQgbm9kZV9pZCwKKwkJCQkgICAgaW50IGdlbmVyYXRpb24sIGludCBmdW5jdGlvbiwKKwkJCQkgICAgaW50IGx1bl9vcl9sb2dpbl9pZCwgdm9pZCAqcmVzcG9uc2UpCiB7CiAJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlID0gZndfZGV2aWNlKGx1LT50Z3QtPnVuaXQtPmRldmljZS5wYXJlbnQpOwogCXN0cnVjdCBzYnAyX21hbmFnZW1lbnRfb3JiICpvcmI7CkBAIC02NTIsOSArNjQ3LDggQEAKIAkJCSAgICZkLCBzaXplb2YoZCkpOwogfQogCi1zdGF0aWMgdm9pZAotY29tcGxldGVfYWdlbnRfcmVzZXRfd3JpdGVfbm9fd2FpdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkJCSAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBjb21wbGV0ZV9hZ2VudF9yZXNldF93cml0ZV9ub193YWl0KHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQlpbnQgcmNvZGUsIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCiB7CiAJa2ZyZWUoZGF0YSk7CiB9CkBAIC0xMjk5LDggKzEyOTMsNyBAQAogCQkJCSBzaXplb2Yob3JiLT5wYWdlX3RhYmxlKSwgRE1BX1RPX0RFVklDRSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXNicDJfc3RhdHVzX3RvX3NlbnNlX2RhdGEodTggKnNicDJfc3RhdHVzLCB1OCAqc2Vuc2VfZGF0YSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2JwMl9zdGF0dXNfdG9fc2Vuc2VfZGF0YSh1OCAqc2JwMl9zdGF0dXMsIHU4ICpzZW5zZV9kYXRhKQogewogCWludCBzYW1fc3RhdHVzOwogCkBAIC0xMzM3LDggKzEzMzAsOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLWNvbXBsZXRlX2NvbW1hbmRfb3JiKHN0cnVjdCBzYnAyX29yYiAqYmFzZV9vcmIsIHN0cnVjdCBzYnAyX3N0YXR1cyAqc3RhdHVzKQorc3RhdGljIHZvaWQgY29tcGxldGVfY29tbWFuZF9vcmIoc3RydWN0IHNicDJfb3JiICpiYXNlX29yYiwKKwkJCQkgc3RydWN0IHNicDJfc3RhdHVzICpzdGF0dXMpCiB7CiAJc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYiA9CiAJCWNvbnRhaW5lcl9vZihiYXNlX29yYiwgc3RydWN0IHNicDJfY29tbWFuZF9vcmIsIGJhc2UpOwpAQCAtMTM4NCw5ICsxMzc3LDggQEAKIAlvcmItPmRvbmUob3JiLT5jbWQpOwogfQogCi1zdGF0aWMgaW50Ci1zYnAyX21hcF9zY2F0dGVybGlzdChzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiAqb3JiLCBzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsCi0JCSAgICAgc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdSkKK3N0YXRpYyBpbnQgc2JwMl9tYXBfc2NhdHRlcmxpc3Qoc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKm9yYiwKKwkJc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qgc2JwMl9sb2dpY2FsX3VuaXQgKmx1KQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBzY3NpX3NnbGlzdChvcmItPmNtZCk7CiAJaW50IGksIG47CkBAIC0xNTg0LDkgKzE1NzYsOCBAQAogICogVGhpcyBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0YXJnZXQgcG9ydCBpZGVudGlmaWVyIGFuZCBsb2dpY2FsIHVuaXQKICAqIGlkZW50aWZpZXIgYXMgcGVyIFNBTS0yLi4uU0FNLTQgYW5uZXggQS4KICAqLwotc3RhdGljIHNzaXplX3QKLXNicDJfc3lzZnNfaWVlZTEzOTRfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJICAgIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNicDJfc3lzZnNfaWVlZTEzOTRfaWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CiAJc3RydWN0IHNicDJfbG9naWNhbF91bml0ICpsdTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuYwppbmRleCA4ZGQ2NzAzLi5kMGRlZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5jCkBAIC0zMTQsOSArMzE0LDggQEAKIAkJCQkgICBzdHJ1Y3QgZndfbm9kZSAqIG5vZGUsCiAJCQkJICAgc3RydWN0IGZ3X25vZGUgKiBwYXJlbnQpOwogCi1zdGF0aWMgdm9pZAotZm9yX2VhY2hfZndfbm9kZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X25vZGUgKnJvb3QsCi0JCSBmd19ub2RlX2NhbGxiYWNrX3QgY2FsbGJhY2spCitzdGF0aWMgdm9pZCBmb3JfZWFjaF9md19ub2RlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfbm9kZSAqcm9vdCwKKwkJCSAgICAgZndfbm9kZV9jYWxsYmFja190IGNhbGxiYWNrKQogewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgZndfbm9kZSAqbm9kZSwgKm5leHQsICpjaGlsZCwgKnBhcmVudDsKQEAgLTM0OSw5ICszNDgsOCBAQAogCQlmd19ub2RlX3B1dChub2RlKTsKIH0KIAotc3RhdGljIHZvaWQKLXJlcG9ydF9sb3N0X25vZGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCSBzdHJ1Y3QgZndfbm9kZSAqbm9kZSwgc3RydWN0IGZ3X25vZGUgKnBhcmVudCkKK3N0YXRpYyB2b2lkIHJlcG9ydF9sb3N0X25vZGUoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCQkgICAgIHN0cnVjdCBmd19ub2RlICpub2RlLCBzdHJ1Y3QgZndfbm9kZSAqcGFyZW50KQogewogCWZ3X25vZGVfZXZlbnQoY2FyZCwgbm9kZSwgRldfTk9ERV9ERVNUUk9ZRUQpOwogCWZ3X25vZGVfcHV0KG5vZGUpOwpAQCAtMzYwLDkgKzM1OCw4IEBACiAJY2FyZC0+Ym1fcmV0cmllcyA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkCi1yZXBvcnRfZm91bmRfbm9kZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkJICBzdHJ1Y3QgZndfbm9kZSAqbm9kZSwgc3RydWN0IGZ3X25vZGUgKnBhcmVudCkKK3N0YXRpYyB2b2lkIHJlcG9ydF9mb3VuZF9ub2RlKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJICAgICAgc3RydWN0IGZ3X25vZGUgKm5vZGUsIHN0cnVjdCBmd19ub2RlICpwYXJlbnQpCiB7CiAJaW50IGJfcGF0aCA9IChub2RlLT5waHlfc3BlZWQgPT0gU0NPREVfQkVUQSk7CiAKQEAgLTQxNSw4ICs0MTIsNyBAQAogICogZm91bmQsIGxvc3Qgb3IgdXBkYXRlZC4gIFVwZGF0ZSB0aGUgbm9kZXMgaW4gdGhlIGNhcmQgdG9wb2xvZ3kgdHJlZQogICogYXMgd2UgZ28uCiAgKi8KLXN0YXRpYyB2b2lkCi11cGRhdGVfdHJlZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X25vZGUgKnJvb3QpCitzdGF0aWMgdm9pZCB1cGRhdGVfdHJlZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X25vZGUgKnJvb3QpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0MCwgbGlzdDE7CiAJc3RydWN0IGZ3X25vZGUgKm5vZGUwLCAqbm9kZTEsICpuZXh0MTsKQEAgLTQ5Nyw4ICs0OTMsOCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLXVwZGF0ZV90b3BvbG9neV9tYXAoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHUzMiAqc2VsZl9pZHMsIGludCBzZWxmX2lkX2NvdW50KQorc3RhdGljIHZvaWQgdXBkYXRlX3RvcG9sb2d5X21hcChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJCQl1MzIgKnNlbGZfaWRzLCBpbnQgc2VsZl9pZF9jb3VudCkKIHsKIAlpbnQgbm9kZV9jb3VudDsKIApAQCAtNTEwLDEwICs1MDYsOCBAQAogCWZ3X2NvbXB1dGVfYmxvY2tfY3JjKGNhcmQtPnRvcG9sb2d5X21hcCk7CiB9CiAKLXZvaWQKLWZ3X2NvcmVfaGFuZGxlX2J1c19yZXNldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkJCSBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sCi0JCQkgaW50IHNlbGZfaWRfY291bnQsIHUzMiAqIHNlbGZfaWRzKQordm9pZCBmd19jb3JlX2hhbmRsZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwKKwkJCSAgICAgIGludCBzZWxmX2lkX2NvdW50LCB1MzIgKnNlbGZfaWRzKQogewogCXN0cnVjdCBmd19ub2RlICpsb2NhbF9ub2RlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01MzIsNiArNTI2LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKKwljYXJkLT5icm9hZGNhc3RfY2hhbm5lbF9hbGxvY2F0ZWQgPSBmYWxzZTsKIAljYXJkLT5ub2RlX2lkID0gbm9kZV9pZDsKIAkvKgogCSAqIFVwZGF0ZSBub2RlX2lkIGJlZm9yZSBnZW5lcmF0aW9uIHRvIHByZXZlbnQgYW55Ym9keSBmcm9tIHVzaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmggYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRvcG9sb2d5LmgKaW5kZXggYWRkYjlmOC4uM2M0OTdiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy10b3BvbG9neS5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdG9wb2xvZ3kuaApAQCAtMTksNiArMTksMTEgQEAKICNpZm5kZWYgX19md190b3BvbG9neV9oCiAjZGVmaW5lIF9fZndfdG9wb2xvZ3lfaAogCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKwogZW51bSB7CiAJRldfTk9ERV9DUkVBVEVELAogCUZXX05PREVfVVBEQVRFRCwKQEAgLTUxLDI2ICs1NiwyMiBAQAogCXN0cnVjdCBmd19ub2RlICpwb3J0c1swXTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGZ3X25vZGUgKgotZndfbm9kZV9nZXQoc3RydWN0IGZ3X25vZGUgKm5vZGUpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBmd19ub2RlICpmd19ub2RlX2dldChzdHJ1Y3QgZndfbm9kZSAqbm9kZSkKIHsKIAlhdG9taWNfaW5jKCZub2RlLT5yZWZfY291bnQpOwogCiAJcmV0dXJuIG5vZGU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotZndfbm9kZV9wdXQoc3RydWN0IGZ3X25vZGUgKm5vZGUpCitzdGF0aWMgaW5saW5lIHZvaWQgZndfbm9kZV9wdXQoc3RydWN0IGZ3X25vZGUgKm5vZGUpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm5vZGUtPnJlZl9jb3VudCkpCiAJCWtmcmVlKG5vZGUpOwogfQogCi12b2lkCi1md19kZXN0cm95X25vZGVzKHN0cnVjdCBmd19jYXJkICpjYXJkKTsKK3N0cnVjdCBmd19jYXJkOwordm9pZCBmd19kZXN0cm95X25vZGVzKHN0cnVjdCBmd19jYXJkICpjYXJkKTsKIAotaW50Ci1md19jb21wdXRlX2Jsb2NrX2NyYyh1MzIgKmJsb2NrKTsKLQoraW50IGZ3X2NvbXB1dGVfYmxvY2tfY3JjKHUzMiAqYmxvY2spOwogCiAjZW5kaWYgLyogX19md190b3BvbG9neV9oICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMKaW5kZXggNjk5YWMwNC4uMjgzZGFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYwpAQCAtNjQsMTAgKzY0LDggQEAKICNkZWZpbmUgUEhZX0NPTkZJR19ST09UX0lEKG5vZGVfaWQpCSgoKChub2RlX2lkKSAmIDB4M2YpIDw8IDI0KSB8ICgxIDw8IDIzKSkKICNkZWZpbmUgUEhZX0lERU5USUZJRVIoaWQpCQkoKGlkKSA8PCAzMCkKIAotc3RhdGljIGludAotY2xvc2VfdHJhbnNhY3Rpb24oc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKLQkJICBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkgIHUzMiAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCkKK3N0YXRpYyBpbnQgY2xvc2VfdHJhbnNhY3Rpb24oc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbiwKKwkJCSAgICAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCByY29kZSkKIHsKIAlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTgzLDcgKzgxLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoJnQtPmxpbmsgIT0gJmNhcmQtPnRyYW5zYWN0aW9uX2xpc3QpIHsKLQkJdC0+Y2FsbGJhY2soY2FyZCwgcmNvZGUsIHBheWxvYWQsIGxlbmd0aCwgdC0+Y2FsbGJhY2tfZGF0YSk7CisJCXQtPmNhbGxiYWNrKGNhcmQsIHJjb2RlLCBOVUxMLCAwLCB0LT5jYWxsYmFja19kYXRhKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05NCw5ICs5Miw4IEBACiAgKiBPbmx5IHZhbGlkIGZvciB0cmFuc2FjdGlvbnMgdGhhdCBhcmUgcG90ZW50aWFsbHkgcGVuZGluZyAoaWUgaGF2ZQogICogYmVlbiBzZW50KS4KICAqLwotaW50Ci1md19jYW5jZWxfdHJhbnNhY3Rpb24oc3RydWN0IGZ3X2NhcmQgKmNhcmQsCi0JCSAgICAgIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb24pCitpbnQgZndfY2FuY2VsX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkJICBzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uKQogewogCS8qCiAJICogQ2FuY2VsIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGlmIGl0J3Mgc3RpbGwgcXVldWVkLiAgVGhhdApAQCAtMTEyLDIwICsxMDksMTkgQEAKIAkgKiBpZiB0aGUgdHJhbnNhY3Rpb24gaXMgc3RpbGwgcGVuZGluZyBhbmQgcmVtb3ZlIGl0IGluIHRoYXQgY2FzZS4KIAkgKi8KIAotCXJldHVybiBjbG9zZV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgY2FyZCwgUkNPREVfQ0FOQ0VMTEVELCBOVUxMLCAwKTsKKwlyZXR1cm4gY2xvc2VfdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24sIGNhcmQsIFJDT0RFX0NBTkNFTExFRCk7CiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2NhbmNlbF90cmFuc2FjdGlvbik7CiAKLXN0YXRpYyB2b2lkCi10cmFuc21pdF9jb21wbGV0ZV9jYWxsYmFjayhzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsCi0JCQkgICBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHN0YXR1cykKK3N0YXRpYyB2b2lkIHRyYW5zbWl0X2NvbXBsZXRlX2NhbGxiYWNrKHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwKKwkJCQkgICAgICAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzdGF0dXMpCiB7CiAJc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0ID0KIAkgICAgY29udGFpbmVyX29mKHBhY2tldCwgc3RydWN0IGZ3X3RyYW5zYWN0aW9uLCBwYWNrZXQpOwogCiAJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIEFDS19DT01QTEVURToKLQkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgUkNPREVfQ09NUExFVEUsIE5VTEwsIDApOworCQljbG9zZV90cmFuc2FjdGlvbih0LCBjYXJkLCBSQ09ERV9DT01QTEVURSk7CiAJCWJyZWFrOwogCWNhc2UgQUNLX1BFTkRJTkc6CiAJCXQtPnRpbWVzdGFtcCA9IHBhY2tldC0+dGltZXN0YW1wOwpAQCAtMTMzLDMxICsxMjksNDIgQEAKIAljYXNlIEFDS19CVVNZX1g6CiAJY2FzZSBBQ0tfQlVTWV9BOgogCWNhc2UgQUNLX0JVU1lfQjoKLQkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgUkNPREVfQlVTWSwgTlVMTCwgMCk7CisJCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIFJDT0RFX0JVU1kpOwogCQlicmVhazsKIAljYXNlIEFDS19EQVRBX0VSUk9SOgotCQljbG9zZV90cmFuc2FjdGlvbih0LCBjYXJkLCBSQ09ERV9EQVRBX0VSUk9SLCBOVUxMLCAwKTsKKwkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgUkNPREVfREFUQV9FUlJPUik7CiAJCWJyZWFrOwogCWNhc2UgQUNLX1RZUEVfRVJST1I6Ci0JCWNsb3NlX3RyYW5zYWN0aW9uKHQsIGNhcmQsIFJDT0RFX1RZUEVfRVJST1IsIE5VTEwsIDApOworCQljbG9zZV90cmFuc2FjdGlvbih0LCBjYXJkLCBSQ09ERV9UWVBFX0VSUk9SKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyoKIAkJICogSW4gdGhpcyBjYXNlIHRoZSBhY2sgaXMgcmVhbGx5IGEganVqdSBzcGVjaWZpYwogCQkgKiByY29kZSwgc28ganVzdCBmb3J3YXJkIHRoYXQgdG8gdGhlIGNhbGxiYWNrLgogCQkgKi8KLQkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgc3RhdHVzLCBOVUxMLCAwKTsKKwkJY2xvc2VfdHJhbnNhY3Rpb24odCwgY2FyZCwgc3RhdHVzKTsKIAkJYnJlYWs7CiAJfQogfQogCi1zdGF0aWMgdm9pZAotZndfZmlsbF9yZXF1ZXN0KHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwgaW50IHRjb2RlLCBpbnQgdGxhYmVsLAorc3RhdGljIHZvaWQgZndfZmlsbF9yZXF1ZXN0KHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwgaW50IHRjb2RlLCBpbnQgdGxhYmVsLAogCQlpbnQgZGVzdGluYXRpb25faWQsIGludCBzb3VyY2VfaWQsIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgpCiB7CiAJaW50IGV4dF90Y29kZTsKIAorCWlmICh0Y29kZSA9PSBUQ09ERV9TVFJFQU1fREFUQSkgeworCQlwYWNrZXQtPmhlYWRlclswXSA9CisJCQlIRUFERVJfREFUQV9MRU5HVEgobGVuZ3RoKSB8CisJCQlkZXN0aW5hdGlvbl9pZCB8CisJCQlIRUFERVJfVENPREUoVENPREVfU1RSRUFNX0RBVEEpOworCQlwYWNrZXQtPmhlYWRlcl9sZW5ndGggPSA0OworCQlwYWNrZXQtPnBheWxvYWQgPSBwYXlsb2FkOworCQlwYWNrZXQtPnBheWxvYWRfbGVuZ3RoID0gbGVuZ3RoOworCisJCWdvdG8gY29tbW9uOworCX0KKwogCWlmICh0Y29kZSA+IDB4MTApIHsKIAkJZXh0X3Rjb2RlID0gdGNvZGUgJiB+MHgxMDsKIAkJdGNvZGUgPSBUQ09ERV9MT0NLX1JFUVVFU1Q7CkBAIC0yMDQsNyArMjExLDcgQEAKIAkJcGFja2V0LT5wYXlsb2FkX2xlbmd0aCA9IDA7CiAJCWJyZWFrOwogCX0KLQorIGNvbW1vbjoKIAlwYWNrZXQtPnNwZWVkID0gc3BlZWQ7CiAJcGFja2V0LT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKIAlwYWNrZXQtPmFjayA9IDA7CkBAIC0yNDYsMTMgKzI1MywxNCBAQAogICogQHBhcmFtIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBjb21wbGV0ZWQKICAqIEBwYXJhbSBjYWxsYmFja19kYXRhIHBvaW50ZXIgdG8gYXJiaXRyYXJ5IGRhdGEsIHdoaWNoIHdpbGwgYmUKICAqICAgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaworICoKKyAqIEluIGNhc2Ugb2YgYXN5bmNocm9ub3VzIHN0cmVhbSBwYWNrZXRzIGkuZS4gVENPREVfU1RSRUFNX0RBVEEsIHRoZSBjYWxsZXIKKyAqIG5lZWRzIHRvIHN5bnRoZXNpemUgQGRlc3RpbmF0aW9uX2lkIHdpdGggZndfc3RyZWFtX3BhY2tldF9kZXN0aW5hdGlvbl9pZCgpLgogICovCi12b2lkCi1md19zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdCwKLQkJaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb25faWQsIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCi0JCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCi0JCXZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsCi0JCWZ3X3RyYW5zYWN0aW9uX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpCit2b2lkIGZ3X3NlbmRfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0LCBpbnQgdGNvZGUsCisJCSAgICAgaW50IGRlc3RpbmF0aW9uX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsCisJCSAgICAgZndfdHJhbnNhY3Rpb25fY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB0bGFiZWw7CkBAIC0zMjIsMTYgKzMzMCwxNiBAQAogICogUmV0dXJucyB0aGUgUkNPREUuCiAgKi8KIGludCBmd19ydW5fdHJhbnNhY3Rpb24oc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uX2lkLAotCQlpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAotCQl2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKQorCQkgICAgICAgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJICAgICAgIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgpCiB7CiAJc3RydWN0IHRyYW5zYWN0aW9uX2NhbGxiYWNrX2RhdGEgZDsKIAlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gdDsKIAogCWluaXRfY29tcGxldGlvbigmZC5kb25lKTsKLQlkLnBheWxvYWQgPSBkYXRhOworCWQucGF5bG9hZCA9IHBheWxvYWQ7CiAJZndfc2VuZF9yZXF1ZXN0KGNhcmQsICZ0LCB0Y29kZSwgZGVzdGluYXRpb25faWQsIGdlbmVyYXRpb24sIHNwZWVkLAotCQkJb2Zmc2V0LCBkYXRhLCBsZW5ndGgsIHRyYW5zYWN0aW9uX2NhbGxiYWNrLCAmZCk7CisJCQlvZmZzZXQsIHBheWxvYWQsIGxlbmd0aCwgdHJhbnNhY3Rpb25fY2FsbGJhY2ssICZkKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkLmRvbmUpOwogCiAJcmV0dXJuIGQucmNvZGU7CkBAIC0zOTksOSArNDA3LDggQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICoKLWxvb2t1cF9vdmVybGFwcGluZ19hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIHN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKmxvb2t1cF9vdmVybGFwcGluZ19hZGRyZXNzX2hhbmRsZXIoCisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKIHsKIAlzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyOwogCkBAIC00MTQsOSArNDIxLDggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKgotbG9va3VwX2VuY2xvc2luZ19hZGRyZXNzX2hhbmRsZXIoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQkJCQkgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwgc2l6ZV90IGxlbmd0aCkKK3N0YXRpYyBzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpsb29rdXBfZW5jbG9zaW5nX2FkZHJlc3NfaGFuZGxlcigKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKQogewogCXN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXI7CiAKQEAgLTQ0OSwzNiArNDU1LDQ0IEBACiAjZW5kaWYgIC8qICAwICAqLwogCiAvKioKLSAqIEFsbG9jYXRlIGEgcmFuZ2Ugb2YgYWRkcmVzc2VzIGluIHRoZSBub2RlIHNwYWNlIG9mIHRoZSBPSENJCi0gKiBjb250cm9sbGVyLiAgV2hlbiBhIHJlcXVlc3QgaXMgcmVjZWl2ZWQgdGhhdCBmYWxscyB3aXRoaW4gdGhlCi0gKiBzcGVjaWZpZWQgYWRkcmVzcyByYW5nZSwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBpcyBpbnZva2VkLiAgVGhlCi0gKiBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZ2l2ZSB0aGUgZGV0YWlscyBvZiB0aGUKLSAqIHBhcnRpY3VsYXIgcmVxdWVzdC4KKyAqIGZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlciAtIHJlZ2lzdGVyIGZvciBpbmNvbWluZyByZXF1ZXN0cworICogQGhhbmRsZXI6IGNhbGxiYWNrCisgKiBAcmVnaW9uOiByZWdpb24gaW4gdGhlIElFRUUgMTIxMiBub2RlIHNwYWNlIGFkZHJlc3MgcmFuZ2UKKyAqCisgKiByZWdpb24tPnN0YXJ0LCAtPmVuZCwgYW5kIGhhbmRsZXItPmxlbmd0aCBoYXZlIHRvIGJlIHF1YWRsZXQtYWxpZ25lZC4KKyAqCisgKiBXaGVuIGEgcmVxdWVzdCBpcyByZWNlaXZlZCB0aGF0IGZhbGxzIHdpdGhpbiB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgcmFuZ2UsCisgKiB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGlzIGludm9rZWQuICBUaGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrCisgKiBnaXZlIHRoZSBkZXRhaWxzIG9mIHRoZSBwYXJ0aWN1bGFyIHJlcXVlc3QuCiAgKgogICogUmV0dXJuIHZhbHVlOiAgMCBvbiBzdWNjZXNzLCBub24temVybyBvdGhlcndpc2UuCiAgKiBUaGUgc3RhcnQgb2Zmc2V0IG9mIHRoZSBoYW5kbGVyJ3MgYWRkcmVzcyByZWdpb24gaXMgZGV0ZXJtaW5lZCBieQogICogZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCkgYW5kIGlzIHJldHVybmVkIGluIGhhbmRsZXItPm9mZnNldC4KLSAqIFRoZSBvZmZzZXQgaXMgcXVhZGxldC1hbGlnbmVkLgogICovCi1pbnQKLWZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyLAotCQkJICAgIGNvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiAqcmVnaW9uKQoraW50IGZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcihzdHJ1Y3QgZndfYWRkcmVzc19oYW5kbGVyICpoYW5kbGVyLAorCQkJCWNvbnN0IHN0cnVjdCBmd19hZGRyZXNzX3JlZ2lvbiAqcmVnaW9uKQogewogCXN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKm90aGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IC1FQlVTWTsKIAorCWlmIChyZWdpb24tPnN0YXJ0ICYgMHhmZmZmMDAwMDAwMDAwMDAzVUxMIHx8CisJICAgIHJlZ2lvbi0+ZW5kICAgJiAweGZmZmYwMDAwMDAwMDAwMDNVTEwgfHwKKwkgICAgcmVnaW9uLT5zdGFydCA+PSByZWdpb24tPmVuZCB8fAorCSAgICBoYW5kbGVyLT5sZW5ndGggJiAzIHx8CisJICAgIGhhbmRsZXItPmxlbmd0aCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGRyZXNzX2hhbmRsZXJfbG9jaywgZmxhZ3MpOwogCi0JaGFuZGxlci0+b2Zmc2V0ID0gcm91bmR1cChyZWdpb24tPnN0YXJ0LCA0KTsKKwloYW5kbGVyLT5vZmZzZXQgPSByZWdpb24tPnN0YXJ0OwogCXdoaWxlIChoYW5kbGVyLT5vZmZzZXQgKyBoYW5kbGVyLT5sZW5ndGggPD0gcmVnaW9uLT5lbmQpIHsKIAkJb3RoZXIgPQogCQkgICAgbG9va3VwX292ZXJsYXBwaW5nX2FkZHJlc3NfaGFuZGxlcigmYWRkcmVzc19oYW5kbGVyX2xpc3QsCiAJCQkJCQkgICAgICAgaGFuZGxlci0+b2Zmc2V0LAogCQkJCQkJICAgICAgIGhhbmRsZXItPmxlbmd0aCk7CiAJCWlmIChvdGhlciAhPSBOVUxMKSB7Ci0JCQloYW5kbGVyLT5vZmZzZXQgPQotCQkJICAgIHJvdW5kdXAob3RoZXItPm9mZnNldCArIG90aGVyLT5sZW5ndGgsIDQpOworCQkJaGFuZGxlci0+b2Zmc2V0ICs9IG90aGVyLT5sZW5ndGg7CiAJCX0gZWxzZSB7CiAJCQlsaXN0X2FkZF90YWlsKCZoYW5kbGVyLT5saW5rLCAmYWRkcmVzc19oYW5kbGVyX2xpc3QpOwogCQkJcmV0ID0gMDsKQEAgLTQ5MywxMiArNTA3LDcgQEAKIEVYUE9SVF9TWU1CT0woZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKTsKIAogLyoqCi0gKiBEZWFsbG9jYXRlIGEgcmFuZ2Ugb2YgYWRkcmVzc2VzIGFsbG9jYXRlZCB3aXRoIGZ3X2FsbG9jYXRlLiAgVGhpcwotICogd2lsbCBjYWxsIHRoZSBhc3NvY2lhdGVkIGNhbGxiYWNrIG9uZSBsYXN0IHRpbWUgd2l0aCBhIHRoZSBzcGVjaWFsCi0gKiB0Y29kZSBUQ09ERV9ERUFMTE9DQVRFLCB0byBsZXQgdGhlIGNsaWVudCBkZXN0cm95IHRoZSByZWdpc3RlcmVkCi0gKiBjYWxsYmFjayBkYXRhLiAgRm9yIGNvbnZlbmllbmNlLCB0aGUgY2FsbGJhY2sgcGFyYW1ldGVycyBvZmZzZXQgYW5kCi0gKiBsZW5ndGggYXJlIHNldCB0byB0aGUgc3RhcnQgYW5kIHRoZSBsZW5ndGggcmVzcGVjdGl2ZWx5IGZvciB0aGUKLSAqIGRlYWxsb2NhdGVkIHJlZ2lvbiwgcGF5bG9hZCBpcyBzZXQgdG8gTlVMTC4KKyAqIGZ3X2NvcmVfcmVtb3ZlX2FkZHJlc3NfaGFuZGxlciAtIHVucmVnaXN0ZXIgYW4gYWRkcmVzcyBoYW5kbGVyCiAgKi8KIHZvaWQgZndfY29yZV9yZW1vdmVfYWRkcmVzc19oYW5kbGVyKHN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXIpCiB7CkBAIC01MTgsOSArNTI3LDggQEAKIAl1MzIgZGF0YVswXTsKIH07CiAKLXN0YXRpYyB2b2lkCi1mcmVlX3Jlc3BvbnNlX2NhbGxiYWNrKHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCwKLQkJICAgICAgIHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgc3RhdHVzKQorc3RhdGljIHZvaWQgZnJlZV9yZXNwb25zZV9jYWxsYmFjayhzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQsCisJCQkJICAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzdGF0dXMpCiB7CiAJc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3Q7CiAKQEAgLTUyOCw5ICs1MzYsOCBAQAogCWtmcmVlKHJlcXVlc3QpOwogfQogCi12b2lkCi1md19maWxsX3Jlc3BvbnNlKHN0cnVjdCBmd19wYWNrZXQgKnJlc3BvbnNlLCB1MzIgKnJlcXVlc3RfaGVhZGVyLAotCQkgaW50IHJjb2RlLCB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoKQordm9pZCBmd19maWxsX3Jlc3BvbnNlKHN0cnVjdCBmd19wYWNrZXQgKnJlc3BvbnNlLCB1MzIgKnJlcXVlc3RfaGVhZGVyLAorCQkgICAgICBpbnQgcmNvZGUsIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgpCiB7CiAJaW50IHRjb2RlLCB0bGFiZWwsIGV4dGVuZGVkX3Rjb2RlLCBzb3VyY2UsIGRlc3RpbmF0aW9uOwogCkBAIC01ODgsOCArNTk1LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZndfZmlsbF9yZXNwb25zZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgZndfcmVxdWVzdCAqCi1hbGxvY2F0ZV9yZXF1ZXN0KHN0cnVjdCBmd19wYWNrZXQgKnApCitzdGF0aWMgc3RydWN0IGZ3X3JlcXVlc3QgKmFsbG9jYXRlX3JlcXVlc3Qoc3RydWN0IGZ3X3BhY2tldCAqcCkKIHsKIAlzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdDsKIAl1MzIgKmRhdGEsIGxlbmd0aDsKQEAgLTY0OSw4ICs2NTUsOCBAQAogCXJldHVybiByZXF1ZXN0OwogfQogCi12b2lkCi1md19zZW5kX3Jlc3BvbnNlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwgaW50IHJjb2RlKQordm9pZCBmd19zZW5kX3Jlc3BvbnNlKHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkgICAgICBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwgaW50IHJjb2RlKQogewogCS8qIHVuaWZpZWQgdHJhbnNhY3Rpb24gb3IgYnJvYWRjYXN0IHRyYW5zYWN0aW9uOiBkb24ndCByZXNwb25kICovCiAJaWYgKHJlcXVlc3QtPmFjayAhPSBBQ0tfUEVORElORyB8fApAQCAtNjcwLDggKzY3Niw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X3NlbmRfcmVzcG9uc2UpOwogCi12b2lkCi1md19jb3JlX2hhbmRsZV9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwKQordm9pZCBmd19jb3JlX2hhbmRsZV9yZXF1ZXN0KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwKQogewogCXN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgKmhhbmRsZXI7CiAJc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3Q7CkBAIC03MTksOCArNzI0LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZndfY29yZV9oYW5kbGVfcmVxdWVzdCk7CiAKLXZvaWQKLWZ3X2NvcmVfaGFuZGxlX3Jlc3BvbnNlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwKQordm9pZCBmd19jb3JlX2hhbmRsZV9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcCkKIHsKIAlzdHJ1Y3QgZndfdHJhbnNhY3Rpb24gKnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTc5MywxMiArNzk3LDEwIEBACiAJeyAuc3RhcnQgPSBDU1JfUkVHSVNURVJfQkFTRSB8IENTUl9UT1BPTE9HWV9NQVAsCiAJICAuZW5kICAgPSBDU1JfUkVHSVNURVJfQkFTRSB8IENTUl9UT1BPTE9HWV9NQVBfRU5ELCB9OwogCi1zdGF0aWMgdm9pZAotaGFuZGxlX3RvcG9sb2d5X21hcChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCi0JCSAgICBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwKLQkJICAgIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCi0JCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAotCQkgICAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKK3N0YXRpYyB2b2lkIGhhbmRsZV90b3BvbG9neV9tYXAoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19yZXF1ZXN0ICpyZXF1ZXN0LAorCQlpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbiwgaW50IHNvdXJjZSwgaW50IGdlbmVyYXRpb24sCisJCWludCBzcGVlZCwgdW5zaWduZWQgbG9uZyBsb25nIG9mZnNldCwKKwkJdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKIHsKIAlpbnQgaSwgc3RhcnQsIGVuZDsKIAlfX2JlMzIgKm1hcDsKQEAgLTgzMiwxMiArODM0LDEwIEBACiAJeyAuc3RhcnQgPSBDU1JfUkVHSVNURVJfQkFTRSwKIAkgIC5lbmQgICA9IENTUl9SRUdJU1RFUl9CQVNFIHwgQ1NSX0NPTkZJR19ST00sIH07CiAKLXN0YXRpYyB2b2lkCi1oYW5kbGVfcmVnaXN0ZXJzKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcmVxdWVzdCAqcmVxdWVzdCwKLQkJIGludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLAotCQkgaW50IGdlbmVyYXRpb24sIGludCBzcGVlZCwKLQkJIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCi0JCSB2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQorc3RhdGljIHZvaWQgaGFuZGxlX3JlZ2lzdGVycyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3JlcXVlc3QgKnJlcXVlc3QsCisJCWludCB0Y29kZSwgaW50IGRlc3RpbmF0aW9uLCBpbnQgc291cmNlLCBpbnQgZ2VuZXJhdGlvbiwKKwkJaW50IHNwZWVkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAorCQl2b2lkICpwYXlsb2FkLCBzaXplX3QgbGVuZ3RoLCB2b2lkICpjYWxsYmFja19kYXRhKQogewogCWludCByZWcgPSBvZmZzZXQgJiB+Q1NSX1JFR0lTVEVSX0JBU0U7CiAJdW5zaWduZWQgbG9uZyBsb25nIGJ1c190aW1lOwpAQCAtOTM5LDExICs5MzksMTEgQEAKIAogc3RhdGljIGludCBfX2luaXQgZndfY29yZV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldHZhbDsKKwlpbnQgcmV0OwogCi0JcmV0dmFsID0gYnVzX3JlZ2lzdGVyKCZmd19idXNfdHlwZSk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7CisJcmV0ID0gYnVzX3JlZ2lzdGVyKCZmd19idXNfdHlwZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKIAlmd19jZGV2X21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJmaXJld2lyZSIsICZmd19kZXZpY2Vfb3BzKTsKIAlpZiAoZndfY2Rldl9tYWpvciA8IDApIHsKQEAgLTk1MSwxOSArOTUxLDEwIEBACiAJCXJldHVybiBmd19jZGV2X21ham9yOwogCX0KIAotCXJldHZhbCA9IGZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcigmdG9wb2xvZ3lfbWFwLAotCQkJCQkgICAgICZ0b3BvbG9neV9tYXBfcmVnaW9uKTsKLQlCVUdfT04ocmV0dmFsIDwgMCk7Ci0KLQlyZXR2YWwgPSBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoJnJlZ2lzdGVycywKLQkJCQkJICAgICAmcmVnaXN0ZXJzX3JlZ2lvbik7Ci0JQlVHX09OKHJldHZhbCA8IDApOwotCi0JLyogQWRkIHRoZSB2ZW5kb3IgdGV4dHVhbCBkZXNjcmlwdG9yLiAqLwotCXJldHZhbCA9IGZ3X2NvcmVfYWRkX2Rlc2NyaXB0b3IoJnZlbmRvcl9pZF9kZXNjcmlwdG9yKTsKLQlCVUdfT04ocmV0dmFsIDwgMCk7Ci0JcmV0dmFsID0gZndfY29yZV9hZGRfZGVzY3JpcHRvcigmbW9kZWxfaWRfZGVzY3JpcHRvcik7Ci0JQlVHX09OKHJldHZhbCA8IDApOworCWZ3X2NvcmVfYWRkX2FkZHJlc3NfaGFuZGxlcigmdG9wb2xvZ3lfbWFwLCAmdG9wb2xvZ3lfbWFwX3JlZ2lvbik7CisJZndfY29yZV9hZGRfYWRkcmVzc19oYW5kbGVyKCZyZWdpc3RlcnMsICZyZWdpc3RlcnNfcmVnaW9uKTsKKwlmd19jb3JlX2FkZF9kZXNjcmlwdG9yKCZ2ZW5kb3JfaWRfZGVzY3JpcHRvcik7CisJZndfY29yZV9hZGRfZGVzY3JpcHRvcigmbW9kZWxfaWRfZGVzY3JpcHRvcik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uaCBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uaAppbmRleCAxZDc4ZTljLi5kZmE3OTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmgKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5oCkBAIC04MiwxNCArODIsMTQgQEAKICNkZWZpbmUgQ1NSX1NQRUVEX01BUAkJCTB4MjAwMAogI2RlZmluZSBDU1JfU1BFRURfTUFQX0VORAkJMHgzMDAwCiAKKyNkZWZpbmUgQkFORFdJRFRIX0FWQUlMQUJMRV9JTklUSUFMCTQ5MTUKICNkZWZpbmUgQlJPQURDQVNUX0NIQU5ORUxfSU5JVElBTAkoMSA8PCAzMSB8IDMxKQogI2RlZmluZSBCUk9BRENBU1RfQ0hBTk5FTF9WQUxJRAkJKDEgPDwgMzApCiAKICNkZWZpbmUgZndfbm90aWZ5KHMsIGFyZ3MuLi4pIHByaW50ayhLRVJOX05PVElDRSBLQlVJTERfTU9ETkFNRSAiOiAiIHMsICMjIGFyZ3MpCiAjZGVmaW5lIGZ3X2Vycm9yKHMsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiAiIHMsICMjIGFyZ3MpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotZndfbWVtY3B5X2Zyb21fYmUzMih2b2lkICpfZHN0LCB2b2lkICpfc3JjLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmd19tZW1jcHlfZnJvbV9iZTMyKHZvaWQgKl9kc3QsIHZvaWQgKl9zcmMsIHNpemVfdCBzaXplKQogewogCXUzMiAgICAqZHN0ID0gX2RzdDsKIAlfX2JlMzIgKnNyYyA9IF9zcmM7CkBAIC05OSw4ICs5OSw3IEBACiAJCWRzdFtpXSA9IGJlMzJfdG9fY3B1KHNyY1tpXSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotZndfbWVtY3B5X3RvX2JlMzIodm9pZCAqX2RzdCwgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgZndfbWVtY3B5X3RvX2JlMzIodm9pZCAqX2RzdCwgdm9pZCAqX3NyYywgc2l6ZV90IHNpemUpCiB7CiAJZndfbWVtY3B5X2Zyb21fYmUzMihfZHN0LCBfc3JjLCBzaXplKTsKIH0KQEAgLTEyNSw4ICsxMjQsNyBAQAogCQkJCSAgICAgc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzdGF0dXMpOwogCiB0eXBlZGVmIHZvaWQgKCpmd190cmFuc2FjdGlvbl9jYWxsYmFja190KShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHJjb2RlLAotCQkJCQkgIHZvaWQgKmRhdGEsCi0JCQkJCSAgc2l6ZV90IGxlbmd0aCwKKwkJCQkJICB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoLAogCQkJCQkgIHZvaWQgKmNhbGxiYWNrX2RhdGEpOwogCiAvKgpAQCAtMTQxLDEyICsxMzksNiBAQAogCQkJCSAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgsCiAJCQkJICAgICAgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CiAKLXR5cGVkZWYgdm9pZCAoKmZ3X2J1c19yZXNldF9jYWxsYmFja190KShzdHJ1Y3QgZndfY2FyZCAqaGFuZGxlLAotCQkJCQlpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sCi0JCQkJCXUzMiAqc2VsZl9pZHMsCi0JCQkJCWludCBzZWxmX2lkX2NvdW50LAotCQkJCQl2b2lkICpjYWxsYmFja19kYXRhKTsKLQogc3RydWN0IGZ3X3BhY2tldCB7CiAJaW50IHNwZWVkOwogCWludCBnZW5lcmF0aW9uOwpAQCAtMTg3LDEyICsxNzksNiBAQAogCXZvaWQgKmNhbGxiYWNrX2RhdGE7CiB9OwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmd19wYWNrZXQgKgotZndfcGFja2V0KHN0cnVjdCBsaXN0X2hlYWQgKmwpCi17Ci0JcmV0dXJuIGxpc3RfZW50cnkobCwgc3RydWN0IGZ3X3BhY2tldCwgbGluayk7Ci19Ci0KIHN0cnVjdCBmd19hZGRyZXNzX2hhbmRsZXIgewogCXU2NCBvZmZzZXQ7CiAJc2l6ZV90IGxlbmd0aDsKQEAgLTIwMSw3ICsxODcsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKIH07CiAKLQogc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIHsKIAl1NjQgc3RhcnQ7CiAJdTY0IGVuZDsKQEAgLTI1NSw2ICsyNDAsNyBAQAogCWludCBibV9yZXRyaWVzOwogCWludCBibV9nZW5lcmF0aW9uOwogCisJYm9vbCBicm9hZGNhc3RfY2hhbm5lbF9hbGxvY2F0ZWQ7CiAJdTMyIGJyb2FkY2FzdF9jaGFubmVsOwogCXUzMiB0b3BvbG9neV9tYXBbKENTUl9UT1BPTE9HWV9NQVBfRU5EIC0gQ1NSX1RPUE9MT0dZX01BUCkgLyA0XTsKIH07CkBAIC0zMTUsMTAgKzMwMSw4IEBACiBzdHJ1Y3QgZndfaXNvX2NvbnRleHQ7CiAKIHR5cGVkZWYgdm9pZCAoKmZ3X2lzb19jYWxsYmFja190KShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmNvbnRleHQsCi0JCQkJICB1MzIgY3ljbGUsCi0JCQkJICBzaXplX3QgaGVhZGVyX2xlbmd0aCwKLQkJCQkgIHZvaWQgKmhlYWRlciwKLQkJCQkgIHZvaWQgKmRhdGEpOworCQkJCSAgdTMyIGN5Y2xlLCBzaXplX3QgaGVhZGVyX2xlbmd0aCwKKwkJCQkgIHZvaWQgKmhlYWRlciwgdm9pZCAqZGF0YSk7CiAKIC8qCiAgKiBBbiBpc28gYnVmZmVyIGlzIGp1c3QgYSBzZXQgb2YgcGFnZXMgbWFwcGVkIGZvciBETUEgaW4gdGhlCkBAIC0zNDQsMzYgKzMyOCwyNSBAQAogCXZvaWQgKmNhbGxiYWNrX2RhdGE7CiB9OwogCi1pbnQKLWZ3X2lzb19idWZmZXJfaW5pdChzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLAotCQkgICBzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkJICAgaW50IHBhZ2VfY291bnQsCi0JCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Ci1pbnQKLWZ3X2lzb19idWZmZXJfbWFwKHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKLXZvaWQKLWZ3X2lzb19idWZmZXJfZGVzdHJveShzdHJ1Y3QgZndfaXNvX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3QgZndfY2FyZCAqY2FyZCk7CitpbnQgZndfaXNvX2J1ZmZlcl9pbml0KHN0cnVjdCBmd19pc29fYnVmZmVyICpidWZmZXIsIHN0cnVjdCBmd19jYXJkICpjYXJkLAorCQkgICAgICAgaW50IHBhZ2VfY291bnQsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitpbnQgZndfaXNvX2J1ZmZlcl9tYXAoc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwordm9pZCBmd19pc29fYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwgc3RydWN0IGZ3X2NhcmQgKmNhcmQpOwogCi1zdHJ1Y3QgZndfaXNvX2NvbnRleHQgKgotZndfaXNvX2NvbnRleHRfY3JlYXRlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdHlwZSwKLQkJICAgICAgaW50IGNoYW5uZWwsIGludCBzcGVlZCwgc2l6ZV90IGhlYWRlcl9zaXplLAotCQkgICAgICBmd19pc29fY2FsbGJhY2tfdCBjYWxsYmFjaywgdm9pZCAqY2FsbGJhY2tfZGF0YSk7CitzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmZ3X2lzb19jb250ZXh0X2NyZWF0ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJaW50IHR5cGUsIGludCBjaGFubmVsLCBpbnQgc3BlZWQsIHNpemVfdCBoZWFkZXJfc2l6ZSwKKwkJZndfaXNvX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpOworaW50IGZ3X2lzb19jb250ZXh0X3F1ZXVlKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAorCQkJIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCisJCQkgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKKwkJCSB1bnNpZ25lZCBsb25nIHBheWxvYWQpOworaW50IGZ3X2lzb19jb250ZXh0X3N0YXJ0KHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAorCQkJIGludCBjeWNsZSwgaW50IHN5bmMsIGludCB0YWdzKTsKK2ludCBmd19pc29fY29udGV4dF9zdG9wKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKK3ZvaWQgZndfaXNvX2NvbnRleHRfZGVzdHJveShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCk7CiAKLXZvaWQKLWZ3X2lzb19jb250ZXh0X2Rlc3Ryb3koc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpOwotCi1pbnQKLWZ3X2lzb19jb250ZXh0X3F1ZXVlKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAotCQkgICAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCi0JCSAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJICAgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpOwotCi1pbnQKLWZ3X2lzb19jb250ZXh0X3N0YXJ0KHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4LAotCQkgICAgIGludCBjeWNsZSwgaW50IHN5bmMsIGludCB0YWdzKTsKLQotaW50Ci1md19pc29fY29udGV4dF9zdG9wKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKK3ZvaWQgZndfaXNvX3Jlc291cmNlX21hbmFnZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IGdlbmVyYXRpb24sCisJCXU2NCBjaGFubmVsc19tYXNrLCBpbnQgKmNoYW5uZWwsIGludCAqYmFuZHdpZHRoLCBib29sIGFsbG9jYXRlKTsKIAogc3RydWN0IGZ3X2NhcmRfZHJpdmVyIHsKIAkvKgpAQCAtNDE1LDcgKzM4OCw3IEBACiAKIAlzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKgogCSgqYWxsb2NhdGVfaXNvX2NvbnRleHQpKHN0cnVjdCBmd19jYXJkICpjYXJkLAotCQkJCWludCB0eXBlLCBzaXplX3QgaGVhZGVyX3NpemUpOworCQkJCWludCB0eXBlLCBpbnQgY2hhbm5lbCwgc2l6ZV90IGhlYWRlcl9zaXplKTsKIAl2b2lkICgqZnJlZV9pc29fY29udGV4dCkoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpjdHgpOwogCiAJaW50ICgqc3RhcnRfaXNvKShzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCwKQEAgLTQyOSw1NCArNDAyLDQ1IEBACiAJaW50ICgqc3RvcF9pc28pKHN0cnVjdCBmd19pc29fY29udGV4dCAqY3R4KTsKIH07CiAKLWludAotZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzaG9ydF9yZXNldCk7CitpbnQgZndfY29yZV9pbml0aWF0ZV9idXNfcmVzZXQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIGludCBzaG9ydF9yZXNldCk7CiAKLXZvaWQKLWZ3X3NlbmRfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0LAordm9pZCBmd19zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd190cmFuc2FjdGlvbiAqdCwKIAkJaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb25faWQsIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsCi0JCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgsCisJCXVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsIHZvaWQgKnBheWxvYWQsIHNpemVfdCBsZW5ndGgsCiAJCWZ3X3RyYW5zYWN0aW9uX2NhbGxiYWNrX3QgY2FsbGJhY2ssIHZvaWQgKmNhbGxiYWNrX2RhdGEpOwotCi1pbnQgZndfcnVuX3RyYW5zYWN0aW9uKHN0cnVjdCBmd19jYXJkICpjYXJkLCBpbnQgdGNvZGUsIGludCBkZXN0aW5hdGlvbl9pZCwKLQkJICAgICAgIGludCBnZW5lcmF0aW9uLCBpbnQgc3BlZWQsIHVuc2lnbmVkIGxvbmcgbG9uZyBvZmZzZXQsCi0JCSAgICAgICB2b2lkICpkYXRhLCBzaXplX3QgbGVuZ3RoKTsKLQogaW50IGZ3X2NhbmNlbF90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKIAkJCSAgc3RydWN0IGZ3X3RyYW5zYWN0aW9uICp0cmFuc2FjdGlvbik7Ci0KIHZvaWQgZndfZmx1c2hfdHJhbnNhY3Rpb25zKHN0cnVjdCBmd19jYXJkICpjYXJkKTsKLQoraW50IGZ3X3J1bl90cmFuc2FjdGlvbihzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IHRjb2RlLCBpbnQgZGVzdGluYXRpb25faWQsCisJCSAgICAgICBpbnQgZ2VuZXJhdGlvbiwgaW50IHNwZWVkLCB1bnNpZ25lZCBsb25nIGxvbmcgb2Zmc2V0LAorCQkgICAgICAgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCk7CiB2b2lkIGZ3X3NlbmRfcGh5X2NvbmZpZyhzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKIAkJCWludCBub2RlX2lkLCBpbnQgZ2VuZXJhdGlvbiwgaW50IGdhcF9jb3VudCk7CiAKK3N0YXRpYyBpbmxpbmUgaW50IGZ3X3N0cmVhbV9wYWNrZXRfZGVzdGluYXRpb25faWQoaW50IHRhZywgaW50IGNoYW5uZWwsIGludCBzeSkKK3sKKwlyZXR1cm4gdGFnIDw8IDE0IHwgY2hhbm5lbCA8PCA4IHwgc3k7Cit9CisKIC8qCiAgKiBDYWxsZWQgYnkgdGhlIHRvcG9sb2d5IGNvZGUgdG8gaW5mb3JtIHRoZSBkZXZpY2UgY29kZSBvZiBub2RlCiAgKiBhY3Rpdml0eTsgZm91bmQsIGxvc3QsIG9yIHVwZGF0ZWQgbm9kZXMuCiAgKi8KLXZvaWQKLWZ3X25vZGVfZXZlbnQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19ub2RlICpub2RlLCBpbnQgZXZlbnQpOwordm9pZCBmd19ub2RlX2V2ZW50KHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfbm9kZSAqbm9kZSwgaW50IGV2ZW50KTsKIAogLyogQVBJIHVzZWQgYnkgY2FyZCBsZXZlbCBkcml2ZXJzICovCiAKLXZvaWQKLWZ3X2NhcmRfaW5pdGlhbGl6ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgY29uc3Qgc3RydWN0IGZ3X2NhcmRfZHJpdmVyICpkcml2ZXIsCi0JCSAgIHN0cnVjdCBkZXZpY2UgKmRldmljZSk7Ci1pbnQKLWZ3X2NhcmRfYWRkKHN0cnVjdCBmd19jYXJkICpjYXJkLAotCSAgICB1MzIgbWF4X3JlY2VpdmUsIHUzMiBsaW5rX3NwZWVkLCB1NjQgZ3VpZCk7Cit2b2lkIGZ3X2NhcmRfaW5pdGlhbGl6ZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKKwkJY29uc3Qgc3RydWN0IGZ3X2NhcmRfZHJpdmVyICpkcml2ZXIsIHN0cnVjdCBkZXZpY2UgKmRldmljZSk7CitpbnQgZndfY2FyZF9hZGQoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCisJCXUzMiBtYXhfcmVjZWl2ZSwgdTMyIGxpbmtfc3BlZWQsIHU2NCBndWlkKTsKK3ZvaWQgZndfY29yZV9yZW1vdmVfY2FyZChzdHJ1Y3QgZndfY2FyZCAqY2FyZCk7Cit2b2lkIGZ3X2NvcmVfaGFuZGxlX2J1c19yZXNldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgaW50IG5vZGVfaWQsCisJCWludCBnZW5lcmF0aW9uLCBpbnQgc2VsZl9pZF9jb3VudCwgdTMyICpzZWxmX2lkcyk7Cit2b2lkIGZ3X2NvcmVfaGFuZGxlX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnJlcXVlc3QpOwordm9pZCBmd19jb3JlX2hhbmRsZV9yZXNwb25zZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcGFja2V0KTsKIAotdm9pZAotZndfY29yZV9yZW1vdmVfY2FyZChzdHJ1Y3QgZndfY2FyZCAqY2FyZCk7Ci0KLXZvaWQKLWZ3X2NvcmVfaGFuZGxlX2J1c19yZXNldChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKLQkJCSBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24sCi0JCQkgaW50IHNlbGZfaWRfY291bnQsIHUzMiAqc2VsZl9pZHMpOwotdm9pZAotZndfY29yZV9oYW5kbGVfcmVxdWVzdChzdHJ1Y3QgZndfY2FyZCAqY2FyZCwgc3RydWN0IGZ3X3BhY2tldCAqcmVxdWVzdCk7Ci0KLXZvaWQKLWZ3X2NvcmVfaGFuZGxlX3Jlc3BvbnNlKHN0cnVjdCBmd19jYXJkICpjYXJkLCBzdHJ1Y3QgZndfcGFja2V0ICpwYWNrZXQpOworZXh0ZXJuIGludCBmd19pcm1fc2V0X2Jyb2FkY2FzdF9jaGFubmVsX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSB2b2lkICpkYXRhKTsKIAogI2VuZGlmIC8qIF9fZndfdHJhbnNhY3Rpb25faCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jIGIvZHJpdmVycy9ncGlvL2J0OHh4Z3Bpby5jCmluZGV4IDdhMTE2ODIuLjk4NGI1ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9idDh4eGdwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vYnQ4eHhncGlvLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogewogCXN0cnVjdCBncGlvX2NoaXAgKmMgPSAmYmctPmdwaW87CiAKLQljLT5sYWJlbCA9IGJnLT5wZGV2LT5kZXYuYnVzX2lkOworCWMtPmxhYmVsID0gZGV2X25hbWUoJmJnLT5wZGV2LT5kZXYpOwogCWMtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJYy0+ZGlyZWN0aW9uX2lucHV0ID0gYnQ4eHhncGlvX2dwaW9fZGlyZWN0aW9uX2lucHV0OwogCWMtPmdldCA9IGJ0OHh4Z3Bpb19ncGlvX2dldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQppbmRleCAzMDAyMmM0Li40ZWM1MDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCkBAIC0xMCw3ICsxMCw4IEBACiAJCWRybV9sb2NrLm8gZHJtX21lbW9yeS5vIGRybV9wcm9jLm8gZHJtX3N0dWIubyBkcm1fdm0ubyBcCiAJCWRybV9hZ3BzdXBwb3J0Lm8gZHJtX3NjYXR0ZXIubyBhdGlfcGNpZ2FydC5vIGRybV9wY2kubyBcCiAJCWRybV9zeXNmcy5vIGRybV9oYXNodGFiLm8gZHJtX3NtYW4ubyBkcm1fbW0ubyBcCi0JCWRybV9jcnRjLm8gZHJtX2NydGNfaGVscGVyLm8gZHJtX21vZGVzLm8gZHJtX2VkaWQubworCQlkcm1fY3J0Yy5vIGRybV9jcnRjX2hlbHBlci5vIGRybV9tb2Rlcy5vIGRybV9lZGlkLm8gXAorCQlkcm1faW5mby5vIGRybV9kZWJ1Z2ZzLm8KIAogZHJtLSQoQ09ORklHX0NPTVBBVCkgKz0gZHJtX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzdjNmM2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kZWJ1Z2ZzLmMKQEAgLTAsMCArMSwyMzUgQEAKKy8qKgorICogXGZpbGUgZHJtX2RlYnVnZnMuYworICogZGVidWdmcyBzdXBwb3J0IGZvciBEUk0KKyAqCisgKiBcYXV0aG9yIEJlbiBHYW1hcmkgPGJnYW1hcmlAZ21haWwuY29tPgorICovCisKKy8qCisgKiBDcmVhdGVkOiBTdW4gRGVjIDIxIDEzOjA4OjUwIDIwMDggYnkgYmdhbWFyaUBnbWFpbC5jb20KKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBCZW4gR2FtYXJpIDxiZ2FtYXJpQGdtYWlsLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVkEgTElOVVggU1lTVEVNUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSAiZHJtUC5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluaXRpYWxpemF0aW9uLCBldGMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCBkcm1fZGVidWdmc19saXN0W10gPSB7CisJeyJuYW1lIiwgZHJtX25hbWVfaW5mbywgMH0sCisJeyJ2bSIsIGRybV92bV9pbmZvLCAwfSwKKwl7ImNsaWVudHMiLCBkcm1fY2xpZW50c19pbmZvLCAwfSwKKwl7InF1ZXVlcyIsIGRybV9xdWV1ZXNfaW5mbywgMH0sCisJeyJidWZzIiwgZHJtX2J1ZnNfaW5mbywgMH0sCisJeyJnZW1fbmFtZXMiLCBkcm1fZ2VtX25hbWVfaW5mbywgRFJJVkVSX0dFTX0sCisJeyJnZW1fb2JqZWN0cyIsIGRybV9nZW1fb2JqZWN0X2luZm8sIERSSVZFUl9HRU19LAorI2lmIERSTV9ERUJVR19DT0RFCisJeyJ2bWEiLCBkcm1fdm1hX2luZm8sIDB9LAorI2VuZGlmCit9OworI2RlZmluZSBEUk1fREVCVUdGU19FTlRSSUVTIEFSUkFZX1NJWkUoZHJtX2RlYnVnZnNfbGlzdCkKKworCitzdGF0aWMgaW50IGRybV9kZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSBpbm9kZS0+aV9wcml2YXRlOworCisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG5vZGUtPmluZm9fZW50LT5zaG93LCBub2RlKTsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkcm1fZGVidWdmc19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gZHJtX2RlYnVnZnNfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKKworLyoqCisgKiBJbml0aWFsaXplIGEgZ2l2ZW4gc2V0IG9mIGRlYnVnZnMgZmlsZXMgZm9yIGEgZGV2aWNlCisgKgorICogXHBhcmFtIGZpbGVzIFRoZSBhcnJheSBvZiBmaWxlcyB0byBjcmVhdGUKKyAqIFxwYXJhbSBjb3VudCBUaGUgbnVtYmVyIG9mIGZpbGVzIGdpdmVuCisgKiBccGFyYW0gcm9vdCBEUkkgZGVidWdmcyBkaXIgZW50cnkuCisgKiBccGFyYW0gbWlub3IgZGV2aWNlIG1pbm9yIG51bWJlcgorICogXHJldHVybiBaZXJvIG9uIHN1Y2Nlc3MsIG5vbi16ZXJvIG9uIGZhaWx1cmUKKyAqCisgKiBDcmVhdGUgYSBnaXZlbiBzZXQgb2YgZGVidWdmcyBmaWxlcyByZXByZXNlbnRlZCBieSBhbiBhcnJheSBvZgorICogZ2RtX2RlYnVnZnNfbGlzdHMgaW4gdGhlIGdpdmVuIHJvb3QgZGlyZWN0b3J5LgorICovCitpbnQgZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKHN0cnVjdCBkcm1faW5mb19saXN0ICpmaWxlcywgaW50IGNvdW50LAorCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpyb290LCBzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKKwlzdHJ1Y3QgZGVudHJ5ICplbnQ7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKnRtcDsKKwljaGFyIG5hbWVbNjRdOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQl1MzIgZmVhdHVyZXMgPSBmaWxlc1tpXS5kcml2ZXJfZmVhdHVyZXM7CisKKwkJaWYgKGZlYXR1cmVzICE9IDAgJiYKKwkJICAgIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgZmVhdHVyZXMpICE9IGZlYXR1cmVzKQorCQkJY29udGludWU7CisKKwkJdG1wID0gZHJtX2FsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2luZm9fbm9kZSksCisJCQkJX0RSTV9EUklWRVIpOworCQllbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZpbGVzW2ldLm5hbWUsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCQkgIHJvb3QsIHRtcCwgJmRybV9kZWJ1Z2ZzX2ZvcHMpOworCQlpZiAoIWVudCkgeworCQkJRFJNX0VSUk9SKCJDYW5ub3QgY3JlYXRlIC9kZWJ1Z2ZzL2RyaS8lcy8lc1xuIiwKKwkJCQkgIG5hbWUsIGZpbGVzW2ldLm5hbWUpOworCQkJZHJtX2ZyZWUodG1wLCBzaXplb2Yoc3RydWN0IGRybV9pbmZvX25vZGUpLAorCQkJCSBfRFJNX0RSSVZFUik7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCXRtcC0+bWlub3IgPSBtaW5vcjsKKwkJdG1wLT5kZW50ID0gZW50OworCQl0bXAtPmluZm9fZW50ID0gJmZpbGVzW2ldOworCQlsaXN0X2FkZCgmKHRtcC0+bGlzdCksICYobWlub3ItPmRlYnVnZnNfbm9kZXMubGlzdCkpOworCX0KKwlyZXR1cm4gMDsKKworZmFpbDoKKwlkcm1fZGVidWdmc19yZW1vdmVfZmlsZXMoZmlsZXMsIGNvdW50LCBtaW5vcik7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKTsKKworLyoqCisgKiBJbml0aWFsaXplIHRoZSBEUkkgZGVidWdmcyBmaWxlc3lzdGVtIGZvciBhIGRldmljZQorICoKKyAqIFxwYXJhbSBkZXYgRFJNIGRldmljZQorICogXHBhcmFtIG1pbm9yIGRldmljZSBtaW5vciBudW1iZXIKKyAqIFxwYXJhbSByb290IERSSSBkZWJ1Z2ZzIGRpciBlbnRyeS4KKyAqCisgKiBDcmVhdGUgdGhlIERSSSBkZWJ1Z2ZzIHJvb3QgZW50cnkgIi9kZWJ1Z2ZzL2RyaSIsIHRoZSBkZXZpY2UgZGVidWdmcyByb290IGVudHJ5CisgKiAiL2RlYnVnZnMvZHJpLyVtaW5vciUvIiwgYW5kIGVhY2ggZW50cnkgaW4gZGVidWdmc19saXN0IGFzCisgKiAiL2RlYnVnZnMvZHJpLyVtaW5vciUvJW5hbWUlIi4KKyAqLworaW50IGRybV9kZWJ1Z2ZzX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IsIGludCBtaW5vcl9pZCwKKwkJICAgICBzdHJ1Y3QgZGVudHJ5ICpyb290KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OworCWNoYXIgbmFtZVs2NF07CisJaW50IHJldDsKKworCUlOSVRfTElTVF9IRUFEKCZtaW5vci0+ZGVidWdmc19ub2Rlcy5saXN0KTsKKwlzcHJpbnRmKG5hbWUsICIlZCIsIG1pbm9yX2lkKTsKKwltaW5vci0+ZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHJvb3QpOworCWlmICghbWlub3ItPmRlYnVnZnNfcm9vdCkgeworCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL2RlYnVnZnMvZHJpLyVzXG4iLCBuYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldCA9IGRybV9kZWJ1Z2ZzX2NyZWF0ZV9maWxlcyhkcm1fZGVidWdmc19saXN0LCBEUk1fREVCVUdGU19FTlRSSUVTLAorCQkJCSAgICAgICBtaW5vci0+ZGVidWdmc19yb290LCBtaW5vcik7CisJaWYgKHJldCkgeworCQlkZWJ1Z2ZzX3JlbW92ZShtaW5vci0+ZGVidWdmc19yb290KTsKKwkJbWlub3ItPmRlYnVnZnNfcm9vdCA9IE5VTEw7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBjb3JlIGRybSBkZWJ1Z2ZzIGZpbGVzXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZGV2LT5kcml2ZXItPmRlYnVnZnNfaW5pdCkgeworCQlyZXQgPSBkZXYtPmRyaXZlci0+ZGVidWdmc19pbml0KG1pbm9yKTsKKwkJaWYgKHJldCkgeworCQkJRFJNX0VSUk9SKCJEUk06IERyaXZlciBmYWlsZWQgdG8gaW5pdGlhbGl6ZSAiCisJCQkJICAiL2RlYnVnZnMvZHJpLlxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXJldHVybiAwOworfQorCisKKy8qKgorICogUmVtb3ZlIGEgbGlzdCBvZiBkZWJ1Z2ZzIGZpbGVzCisgKgorICogXHBhcmFtIGZpbGVzIFRoZSBsaXN0IG9mIGZpbGVzCisgKiBccGFyYW0gY291bnQgVGhlIG51bWJlciBvZiBmaWxlcworICogXHBhcmFtIG1pbm9yIFRoZSBtaW5vciBvZiB3aGljaCB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBmaWxlcworICogXHJldHVybiBhbHdheXMgemVyby4KKyAqCisgKiBSZW1vdmUgYWxsIGRlYnVnZnMgZW50cmllcyBjcmVhdGVkIGJ5IGRlYnVnZnNfaW5pdCgpLgorICovCitpbnQgZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKHN0cnVjdCBkcm1faW5mb19saXN0ICpmaWxlcywgaW50IGNvdW50LAorCQkJICAgICBzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpxOworCXN0cnVjdCBkcm1faW5mb19ub2RlICp0bXA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBxLCAmbWlub3ItPmRlYnVnZnNfbm9kZXMubGlzdCkgeworCQkJdG1wID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBkcm1faW5mb19ub2RlLCBsaXN0KTsKKwkJCWlmICh0bXAtPmluZm9fZW50ID09ICZmaWxlc1tpXSkgeworCQkJCWRlYnVnZnNfcmVtb3ZlKHRtcC0+ZGVudCk7CisJCQkJbGlzdF9kZWwocG9zKTsKKwkJCQlkcm1fZnJlZSh0bXAsIHNpemVvZihzdHJ1Y3QgZHJtX2luZm9fbm9kZSksCisJCQkJCSBfRFJNX0RSSVZFUik7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcyk7CisKKy8qKgorICogQ2xlYW51cCB0aGUgZGVidWdmcyBmaWxlc3lzdGVtIHJlc291cmNlcy4KKyAqCisgKiBccGFyYW0gbWlub3IgZGV2aWNlIG1pbm9yIG51bWJlci4KKyAqIFxyZXR1cm4gYWx3YXlzIHplcm8uCisgKgorICogUmVtb3ZlIGFsbCBkZWJ1Z2ZzIGVudHJpZXMgY3JlYXRlZCBieSBkZWJ1Z2ZzX2luaXQoKS4KKyAqLworaW50IGRybV9kZWJ1Z2ZzX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisKKwlpZiAoIW1pbm9yLT5kZWJ1Z2ZzX3Jvb3QpCisJCXJldHVybiAwOworCisJaWYgKGRldi0+ZHJpdmVyLT5kZWJ1Z2ZzX2NsZWFudXApCisJCWRldi0+ZHJpdmVyLT5kZWJ1Z2ZzX2NsZWFudXAobWlub3IpOworCisJZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKGRybV9kZWJ1Z2ZzX2xpc3QsIERSTV9ERUJVR0ZTX0VOVFJJRVMsIG1pbm9yKTsKKworCWRlYnVnZnNfcmVtb3ZlKG1pbm9yLT5kZWJ1Z2ZzX3Jvb3QpOworCW1pbm9yLT5kZWJ1Z2ZzX3Jvb3QgPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKaW5kZXggMTRjN2EyMy4uZWQzMmVkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCkBAIC00Niw5ICs0NiwxMSBAQAogICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgImRybV9jb3JlLmgiCiAKKwogc3RhdGljIGludCBkcm1fdmVyc2lvbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogCkBAIC0xNzgsNyArMTgwLDcgQEAKIAogCS8qIENsZWFyIEFHUCBpbmZvcm1hdGlvbiAqLwogCWlmIChkcm1fY29yZV9oYXNfQUdQKGRldikgJiYgZGV2LT5hZ3AgJiYKLQkgICAgIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKKwkJCSFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CiAJCXN0cnVjdCBkcm1fYWdwX21lbSAqZW50cnksICp0ZW1wZTsKIAogCQkvKiBSZW1vdmUgQUdQIHJlc291cmNlcywgYnV0IGxlYXZlIGRldi0+YWdwCkBAIC0zODIsNiArMzg0LDEzIEBACiAJCWdvdG8gZXJyX3AzOwogCX0KIAorCWRybV9kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImRyaSIsIE5VTEwpOworCWlmICghZHJtX2RlYnVnZnNfcm9vdCkgeworCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL2RlYnVnZnMvZHJpXG4iKTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gZXJyX3AzOworCX0KKwogCWRybV9tZW1faW5pdCgpOwogCiAJRFJNX0lORk8oIkluaXRpYWxpemVkICVzICVkLiVkLiVkICVzXG4iLApAQCAtNDAwLDYgKzQwOSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgZHJtX2NvcmVfZXhpdCh2b2lkKQogewogCXJlbW92ZV9wcm9jX2VudHJ5KCJkcmkiLCBOVUxMKTsKKwlkZWJ1Z2ZzX3JlbW92ZShkcm1fZGVidWdmc19yb290KTsKIAlkcm1fc3lzZnNfZGVzdHJveSgpOwogCiAJdW5yZWdpc3Rlcl9jaHJkZXYoRFJNX01BSk9SLCAiZHJtIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCmluZGV4IGY1MjY2M2UuLmUxM2NiNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCkBAIC0zMzcsMTQgKzMzNywxMCBAQAogewogCXN0cnVjdCBkcm1fZmlsZSAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJpdi0+bWlub3ItPmRldjsKLQlpbnQgcmV0Y29kZTsKIAogCURSTV9ERUJVRygiZmQgPSAlZCwgZGV2aWNlID0gMHglbHhcbiIsIGZkLAogCQkgIChsb25nKW9sZF9lbmNvZGVfZGV2KHByaXYtPm1pbm9yLT5kZXZpY2UpKTsKLQlyZXRjb2RlID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZkZXYtPmJ1Zl9hc3luYyk7Ci0JaWYgKHJldGNvZGUgPCAwKQotCQlyZXR1cm4gcmV0Y29kZTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZkZXYtPmJ1Zl9hc3luYyk7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYXN5bmMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2luZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjOTg5NTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2luZm8uYwpAQCAtMCwwICsxLDMyOCBAQAorLyoqCisgKiBcZmlsZSBkcm1faW5mby5jCisgKiBEUk0gaW5mbyBmaWxlIGltcGxlbWVudGF0aW9ucworICoKKyAqIFxhdXRob3IgQmVuIEdhbWFyaSA8YmdhbWFyaUBnbWFpbC5jb20+CisgKi8KKworLyoKKyAqIENyZWF0ZWQ6IFN1biBEZWMgMjEgMTM6MDk6NTAgMjAwOCBieSBiZ2FtYXJpQGdtYWlsLmNvbQorICoKKyAqIENvcHlyaWdodCAxOTk5IFByZWNpc2lvbiBJbnNpZ2h0LCBJbmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAqIENvcHlyaWdodCAyMDAwIFZBIExpbnV4IFN5c3RlbXMsIEluYy4sIFN1bm55dmFsZSwgQ2FsaWZvcm5pYS4KKyAqIENvcHlyaWdodCAyMDA4IEJlbiBHYW1hcmkgPGJnYW1hcmlAZ21haWwuY29tPgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVkEgTElOVVggU1lTVEVNUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlICJkcm1QLmgiCisKKy8qKgorICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vbmFtZSIgaXMgcmVhZC4KKyAqCisgKiBQcmludHMgdGhlIGRldmljZSBuYW1lIHRvZ2V0aGVyIHdpdGggdGhlIGJ1cyBpZCBpZiBhdmFpbGFibGUuCisgKi8KK2ludCBkcm1fbmFtZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gbm9kZS0+bWlub3I7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlciA9IG1pbm9yLT5tYXN0ZXI7CisKKwlpZiAoIW1hc3RlcikKKwkJcmV0dXJuIDA7CisKKwlpZiAobWFzdGVyLT51bmlxdWUpIHsKKwkJc2VxX3ByaW50ZihtLCAiJXMgJXMgJXNcbiIsCisJCQkgICBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lLAorCQkJICAgcGNpX25hbWUoZGV2LT5wZGV2KSwgbWFzdGVyLT51bmlxdWUpOworCX0gZWxzZSB7CisJCXNlcV9wcmludGYobSwgIiVzICVzXG4iLCBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lLAorCQkJICAgcGNpX25hbWUoZGV2LT5wZGV2KSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vdm0iIGlzIHJlYWQuCisgKgorICogUHJpbnRzIGluZm9ybWF0aW9uIGFib3V0IGFsbCBtYXBwaW5ncyBpbiBkcm1fZGV2aWNlOjptYXBsaXN0LgorICovCitpbnQgZHJtX3ZtX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IGRybV9tYXAgKm1hcDsKKwlzdHJ1Y3QgZHJtX21hcF9saXN0ICpyX2xpc3Q7CisKKwkvKiBIYXJkY29kZWQgZnJvbSBfRFJNX0ZSQU1FX0JVRkZFUiwKKwkgICBfRFJNX1JFR0lTVEVSUywgX0RSTV9TSE0sIF9EUk1fQUdQLCBhbmQKKwkgICBfRFJNX1NDQVRURVJfR0FUSEVSIGFuZCBfRFJNX0NPTlNJU1RFTlQgKi8KKwljb25zdCBjaGFyICp0eXBlc1tdID0geyAiRkIiLCAiUkVHIiwgIlNITSIsICJBR1AiLCAiU0ciLCAiUENJIiB9OworCWNvbnN0IGNoYXIgKnR5cGU7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJc2VxX3ByaW50ZihtLCAic2xvdAkgb2Zmc2V0CSAgICAgIHNpemUgdHlwZSBmbGFncwkgYWRkcmVzcyBtdHJyXG5cbiIpOworCWkgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocl9saXN0LCAmZGV2LT5tYXBsaXN0LCBoZWFkKSB7CisJCW1hcCA9IHJfbGlzdC0+bWFwOworCQlpZiAoIW1hcCkKKwkJCWNvbnRpbnVlOworCQlpZiAobWFwLT50eXBlIDwgMCB8fCBtYXAtPnR5cGUgPiA1KQorCQkJdHlwZSA9ICI/PyI7CisJCWVsc2UKKwkJCXR5cGUgPSB0eXBlc1ttYXAtPnR5cGVdOworCisJCXNlcV9wcmludGYobSwgIiU0ZCAweCUwOGx4IDB4JTA4bHggJTQuNHMgIDB4JTAyeCAweCUwOGx4ICIsCisJCQkgICBpLAorCQkJICAgbWFwLT5vZmZzZXQsCisJCQkgICBtYXAtPnNpemUsIHR5cGUsIG1hcC0+ZmxhZ3MsCisJCQkgICAodW5zaWduZWQgbG9uZykgcl9saXN0LT51c2VyX3Rva2VuKTsKKwkJaWYgKG1hcC0+bXRyciA8IDApCisJCQlzZXFfcHJpbnRmKG0sICJub25lXG4iKTsKKwkJZWxzZQorCQkJc2VxX3ByaW50ZihtLCAiJTRkXG4iLCBtYXAtPm10cnIpOworCQlpKys7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiAwOworfQorCisvKioKKyAqIENhbGxlZCB3aGVuICIvcHJvYy9kcmkvLi4uL3F1ZXVlcyIgaXMgcmVhZC4KKyAqLworaW50IGRybV9xdWV1ZXNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlpbnQgaTsKKwlzdHJ1Y3QgZHJtX3F1ZXVlICpxOworCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXNlcV9wcmludGYobSwgIiAgY3R4L2ZsYWdzICAgdXNlICAgZmluIgorCQkgICAiICAgYmxrL3J3L3J3ZiAgd2FpdCAgICBmbHVzaGVkCSAgIHF1ZXVlZCIKKwkJICAgIiAgICAgIGxvY2tzXG5cbiIpOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPnF1ZXVlX2NvdW50OyBpKyspIHsKKwkJcSA9IGRldi0+cXVldWVsaXN0W2ldOworCQlhdG9taWNfaW5jKCZxLT51c2VfY291bnQpOworCQlzZXFfcHJpbnRmKG0sICAgIiU1ZC8weCUwM3ggJTVkICU1ZCIKKwkJCSAgICIgJTVkLyVjJWMvJWMlYyVjICU1WmRcbiIsCisJCQkgICBpLAorCQkJICAgcS0+ZmxhZ3MsCisJCQkgICBhdG9taWNfcmVhZCgmcS0+dXNlX2NvdW50KSwKKwkJCSAgIGF0b21pY19yZWFkKCZxLT5maW5hbGl6YXRpb24pLAorCQkJICAgYXRvbWljX3JlYWQoJnEtPmJsb2NrX2NvdW50KSwKKwkJCSAgIGF0b21pY19yZWFkKCZxLT5ibG9ja19yZWFkKSA/ICdyJyA6ICctJywKKwkJCSAgIGF0b21pY19yZWFkKCZxLT5ibG9ja193cml0ZSkgPyAndycgOiAnLScsCisJCQkgICB3YWl0cXVldWVfYWN0aXZlKCZxLT5yZWFkX3F1ZXVlKSA/ICdyJyA6ICctJywKKwkJCSAgIHdhaXRxdWV1ZV9hY3RpdmUoJnEtPndyaXRlX3F1ZXVlKSA/ICd3JyA6ICctJywKKwkJCSAgIHdhaXRxdWV1ZV9hY3RpdmUoJnEtPmZsdXNoX3F1ZXVlKSA/ICdmJyA6ICctJywKKwkJCSAgIERSTV9CVUZDT1VOVCgmcS0+d2FpdGxpc3QpKTsKKwkJYXRvbWljX2RlYygmcS0+dXNlX2NvdW50KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vYnVmcyIgaXMgcmVhZC4KKyAqLworaW50IGRybV9idWZzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IGRybV9kZXZpY2VfZG1hICpkbWE7CisJaW50IGksIHNlZ19wYWdlczsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkbWEgPSBkZXYtPmRtYTsKKwlpZiAoIWRtYSkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2VxX3ByaW50ZihtLCAiIG8gICAgIHNpemUgY291bnQgIGZyZWUJIHNlZ3MgcGFnZXMgICAga0JcblxuIik7CisJZm9yIChpID0gMDsgaSA8PSBEUk1fTUFYX09SREVSOyBpKyspIHsKKwkJaWYgKGRtYS0+YnVmc1tpXS5idWZfY291bnQpIHsKKwkJCXNlZ19wYWdlcyA9IGRtYS0+YnVmc1tpXS5zZWdfY291bnQgKiAoMSA8PCBkbWEtPmJ1ZnNbaV0ucGFnZV9vcmRlcik7CisJCQlzZXFfcHJpbnRmKG0sICIlMmQgJThkICU1ZCAlNWQgJTVkICU1ZCAlNWxkXG4iLAorCQkJCSAgIGksCisJCQkJICAgZG1hLT5idWZzW2ldLmJ1Zl9zaXplLAorCQkJCSAgIGRtYS0+YnVmc1tpXS5idWZfY291bnQsCisJCQkJICAgYXRvbWljX3JlYWQoJmRtYS0+YnVmc1tpXS5mcmVlbGlzdC5jb3VudCksCisJCQkJICAgZG1hLT5idWZzW2ldLnNlZ19jb3VudCwKKwkJCQkgICBzZWdfcGFnZXMsCisJCQkJICAgc2VnX3BhZ2VzICogUEFHRV9TSVpFIC8gMTAyNCk7CisJCX0KKwl9CisJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgZG1hLT5idWZfY291bnQ7IGkrKykgeworCQlpZiAoaSAmJiAhKGkgJSAzMikpCisJCQlzZXFfcHJpbnRmKG0sICJcbiIpOworCQlzZXFfcHJpbnRmKG0sICIgJWQiLCBkbWEtPmJ1Zmxpc3RbaV0tPmxpc3QpOworCX0KKwlzZXFfcHJpbnRmKG0sICJcbiIpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiAwOworfQorCisvKioKKyAqIENhbGxlZCB3aGVuICIvcHJvYy9kcmkvLi4uL3ZibGFuayIgaXMgcmVhZC4KKyAqLworaW50IGRybV92YmxhbmtfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlpbnQgY3J0YzsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlmb3IgKGNydGMgPSAwOyBjcnRjIDwgZGV2LT5udW1fY3J0Y3M7IGNydGMrKykgeworCQlzZXFfcHJpbnRmKG0sICJDUlRDICVkIGVuYWJsZTogICAgICVkXG4iLAorCQkJICAgY3J0YywgYXRvbWljX3JlYWQoJmRldi0+dmJsYW5rX3JlZmNvdW50W2NydGNdKSk7CisJCXNlcV9wcmludGYobSwgIkNSVEMgJWQgY291bnRlcjogICAgJWRcbiIsCisJCQkgICBjcnRjLCBkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0YykpOworCQlzZXFfcHJpbnRmKG0sICJDUlRDICVkIGxhc3Qgd2FpdDogICVkXG4iLAorCQkJICAgY3J0YywgZGV2LT5sYXN0X3ZibGFua193YWl0W2NydGNdKTsKKwkJc2VxX3ByaW50ZihtLCAiQ1JUQyAlZCBpbiBtb2Rlc2V0OiAlZFxuIiwKKwkJCSAgIGNydGMsIGRldi0+dmJsYW5rX2lubW9kZXNldFtjcnRjXSk7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiAwOworfQorCisvKioKKyAqIENhbGxlZCB3aGVuICIvcHJvYy9kcmkvLi4uL2NsaWVudHMiIGlzIHJlYWQuCisgKgorICovCitpbnQgZHJtX2NsaWVudHNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2ZpbGUgKnByaXY7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJc2VxX3ByaW50ZihtLCAiYSBkZXYJcGlkICAgIHVpZAltYWdpYwkgIGlvY3Rsc1xuXG4iKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHByaXYsICZkZXYtPmZpbGVsaXN0LCBsaGVhZCkgeworCQlzZXFfcHJpbnRmKG0sICIlYyAlM2QgJTVkICU1ZCAlMTB1ICUxMGx1XG4iLAorCQkJICAgcHJpdi0+YXV0aGVudGljYXRlZCA/ICd5JyA6ICduJywKKwkJCSAgIHByaXYtPm1pbm9yLT5pbmRleCwKKwkJCSAgIHByaXYtPnBpZCwKKwkJCSAgIHByaXYtPnVpZCwgcHJpdi0+bWFnaWMsIHByaXYtPmlvY3RsX2NvdW50KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKKworaW50IGRybV9nZW1fb25lX25hbWVfaW5mbyhpbnQgaWQsIHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHB0cjsKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBkYXRhOworCisJc2VxX3ByaW50ZihtLCAibmFtZSAlZCBzaXplICV6ZFxuIiwgb2JqLT5uYW1lLCBvYmotPnNpemUpOworCisJc2VxX3ByaW50ZihtLCAiJTZkICU4emQgJTdkICU4ZFxuIiwKKwkJICAgb2JqLT5uYW1lLCBvYmotPnNpemUsCisJCSAgIGF0b21pY19yZWFkKCZvYmotPmhhbmRsZWNvdW50LnJlZmNvdW50KSwKKwkJICAgYXRvbWljX3JlYWQoJm9iai0+cmVmY291bnQucmVmY291bnQpKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRybV9nZW1fbmFtZV9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCisJc2VxX3ByaW50ZihtLCAiICBuYW1lICAgICBzaXplIGhhbmRsZXMgcmVmY291bnRcbiIpOworCWlkcl9mb3JfZWFjaCgmZGV2LT5vYmplY3RfbmFtZV9pZHIsIGRybV9nZW1fb25lX25hbWVfaW5mbywgbSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkcm1fZ2VtX29iamVjdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCogZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCisJc2VxX3ByaW50ZihtLCAiJWQgb2JqZWN0c1xuIiwgYXRvbWljX3JlYWQoJmRldi0+b2JqZWN0X2NvdW50KSk7CisJc2VxX3ByaW50ZihtLCAiJWQgb2JqZWN0IGJ5dGVzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5vYmplY3RfbWVtb3J5KSk7CisJc2VxX3ByaW50ZihtLCAiJWQgcGlubmVkXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5waW5fY291bnQpKTsKKwlzZXFfcHJpbnRmKG0sICIlZCBwaW4gYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPnBpbl9tZW1vcnkpKTsKKwlzZXFfcHJpbnRmKG0sICIlZCBndHQgYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPmd0dF9tZW1vcnkpKTsKKwlzZXFfcHJpbnRmKG0sICIlZCBndHQgdG90YWxcbiIsIGRldi0+Z3R0X3RvdGFsKTsKKwlyZXR1cm4gMDsKK30KKworI2lmIERSTV9ERUJVR19DT0RFCisKK2ludCBkcm1fdm1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJc3RydWN0IGRybV92bWFfZW50cnkgKnB0OworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworI2lmIGRlZmluZWQoX19pMzg2X18pCisJdW5zaWduZWQgaW50IHBncHJvdDsKKyNlbmRpZgorCisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXNlcV9wcmludGYobSwgInZtYSB1c2UgY291bnQ6ICVkLCBoaWdoX21lbW9yeSA9ICVwLCAweCUwOGx4XG4iLAorCQkgICBhdG9taWNfcmVhZCgmZGV2LT52bWFfY291bnQpLAorCQkgICBoaWdoX21lbW9yeSwgdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0LCAmZGV2LT52bWFsaXN0LCBoZWFkKSB7CisJCXZtYSA9IHB0LT52bWE7CisJCWlmICghdm1hKQorCQkJY29udGludWU7CisJCXNlcV9wcmludGYobSwKKwkJCSAgICJcbiU1ZCAweCUwOGx4LTB4JTA4bHggJWMlYyVjJWMlYyVjIDB4JTA4bHgwMDAiLAorCQkJICAgcHQtPnBpZCwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCisJCQkgICB2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCA/ICdyJyA6ICctJywKKwkJCSAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSA/ICd3JyA6ICctJywKKwkJCSAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDID8gJ3gnIDogJy0nLAorCQkJICAgdm1hLT52bV9mbGFncyAmIFZNX01BWVNIQVJFID8gJ3MnIDogJ3AnLAorCQkJICAgdm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCA/ICdsJyA6ICctJywKKwkJCSAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9JTyA/ICdpJyA6ICctJywKKwkJCSAgIHZtYS0+dm1fcGdvZmYpOworCisjaWYgZGVmaW5lZChfX2kzODZfXykKKwkJcGdwcm90ID0gcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisJCXNlcV9wcmludGYobSwgIiAlYyVjJWMlYyVjJWMlYyVjJWMiLAorCQkJICAgcGdwcm90ICYgX1BBR0VfUFJFU0VOVCA/ICdwJyA6ICctJywKKwkJCSAgIHBncHJvdCAmIF9QQUdFX1JXID8gJ3cnIDogJ3InLAorCQkJICAgcGdwcm90ICYgX1BBR0VfVVNFUiA/ICd1JyA6ICdzJywKKwkJCSAgIHBncHJvdCAmIF9QQUdFX1BXVCA/ICd0JyA6ICdiJywKKwkJCSAgIHBncHJvdCAmIF9QQUdFX1BDRCA/ICd1JyA6ICdjJywKKwkJCSAgIHBncHJvdCAmIF9QQUdFX0FDQ0VTU0VEID8gJ2EnIDogJy0nLAorCQkJICAgcGdwcm90ICYgX1BBR0VfRElSVFkgPyAnZCcgOiAnLScsCisJCQkgICBwZ3Byb3QgJiBfUEFHRV9QU0UgPyAnbScgOiAnaycsCisJCQkgICBwZ3Byb3QgJiBfUEFHRV9HTE9CQUwgPyAnZycgOiAnbCcpOworI2VuZGlmCisJCXNlcV9wcmludGYobSwgIlxuIik7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldHVybiAwOworfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9jLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwppbmRleCA4ZGY4NDlmLi45YjNjNWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYwpAQCAtMzcsNTggKzM3LDEwNSBAQAogICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgImRybVAuaCIKIAotc3RhdGljIGludCBkcm1fbmFtZV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLXN0YXRpYyBpbnQgZHJtX3ZtX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50IGRybV9jbGllbnRzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotc3RhdGljIGludCBkcm1fcXVldWVzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50IGRybV9idWZzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotc3RhdGljIGludCBkcm1fdmJsYW5rX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50IGRybV9nZW1fbmFtZV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgaW50IGRybV9nZW1fb2JqZWN0X2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwotI2lmIERSTV9ERUJVR19DT0RFCi1zdGF0aWMgaW50IGRybV92bWFfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLSNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBJbml0aWFsaXphdGlvbiwgZXRjLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKioKICAqIFByb2MgZmlsZSBsaXN0LgogICovCi1zdGF0aWMgc3RydWN0IGRybV9wcm9jX2xpc3QgewotCWNvbnN0IGNoYXIgKm5hbWU7CS8qKjwgZmlsZSBuYW1lICovCi0JaW50ICgqZikgKGNoYXIgKiwgY2hhciAqKiwgb2ZmX3QsIGludCwgaW50ICosIHZvaWQgKik7CQkvKio8IHByb2MgY2FsbGJhY2sqLwotCXUzMiBkcml2ZXJfZmVhdHVyZXM7IC8qKjwgUmVxdWlyZWQgZHJpdmVyIGZlYXR1cmVzIGZvciB0aGlzIGVudHJ5ICovCi19IGRybV9wcm9jX2xpc3RbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCBkcm1fcHJvY19saXN0W10gPSB7CiAJeyJuYW1lIiwgZHJtX25hbWVfaW5mbywgMH0sCi0JeyJtZW0iLCBkcm1fbWVtX2luZm8sIDB9LAogCXsidm0iLCBkcm1fdm1faW5mbywgMH0sCiAJeyJjbGllbnRzIiwgZHJtX2NsaWVudHNfaW5mbywgMH0sCiAJeyJxdWV1ZXMiLCBkcm1fcXVldWVzX2luZm8sIDB9LAogCXsiYnVmcyIsIGRybV9idWZzX2luZm8sIDB9LAotCXsidmJsYW5rIiwgZHJtX3ZibGFua19pbmZvLCAwfSwKIAl7ImdlbV9uYW1lcyIsIGRybV9nZW1fbmFtZV9pbmZvLCBEUklWRVJfR0VNfSwKIAl7ImdlbV9vYmplY3RzIiwgZHJtX2dlbV9vYmplY3RfaW5mbywgRFJJVkVSX0dFTX0sCiAjaWYgRFJNX0RFQlVHX0NPREUKLQl7InZtYSIsIGRybV92bWFfaW5mb30sCisJeyJ2bWEiLCBkcm1fdm1hX2luZm8sIDB9LAogI2VuZGlmCiB9OwotCiAjZGVmaW5lIERSTV9QUk9DX0VOVFJJRVMgQVJSQVlfU0laRShkcm1fcHJvY19saXN0KQogCitzdGF0aWMgaW50IGRybV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUqIG5vZGUgPSBQREUoaW5vZGUpLT5kYXRhOworCisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIG5vZGUtPmluZm9fZW50LT5zaG93LCBub2RlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHJtX3Byb2NfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGRybV9wcm9jX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9OworCisKIC8qKgotICogSW5pdGlhbGl6ZSB0aGUgRFJJIHByb2MgZmlsZXN5c3RlbSBmb3IgYSBkZXZpY2UuCisgKiBJbml0aWFsaXplIGEgZ2l2ZW4gc2V0IG9mIHByb2MgZmlsZXMgZm9yIGEgZGV2aWNlCiAgKgotICogXHBhcmFtIGRldiBEUk0gZGV2aWNlLgotICogXHBhcmFtIG1pbm9yIGRldmljZSBtaW5vciBudW1iZXIuCisgKiBccGFyYW0gZmlsZXMgVGhlIGFycmF5IG9mIGZpbGVzIHRvIGNyZWF0ZQorICogXHBhcmFtIGNvdW50IFRoZSBudW1iZXIgb2YgZmlsZXMgZ2l2ZW4KKyAqIFxwYXJhbSByb290IERSSSBwcm9jIGRpciBlbnRyeS4KKyAqIFxwYXJhbSBtaW5vciBkZXZpY2UgbWlub3IgbnVtYmVyCisgKiBccmV0dXJuIFplcm8gb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZQorICoKKyAqIENyZWF0ZSBhIGdpdmVuIHNldCBvZiBwcm9jIGZpbGVzIHJlcHJlc2VudGVkIGJ5IGFuIGFycmF5IG9mCisgKiBnZG1fcHJvY19saXN0cyBpbiB0aGUgZ2l2ZW4gcm9vdCBkaXJlY3RvcnkuCisgKi8KK2ludCBkcm1fcHJvY19jcmVhdGVfZmlsZXMoc3RydWN0IGRybV9pbmZvX2xpc3QgKmZpbGVzLCBpbnQgY291bnQsCisJCQkgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCwgc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKnRtcDsKKwljaGFyIG5hbWVbNjRdOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQl1MzIgZmVhdHVyZXMgPSBmaWxlc1tpXS5kcml2ZXJfZmVhdHVyZXM7CisKKwkJaWYgKGZlYXR1cmVzICE9IDAgJiYKKwkJICAgIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgZmVhdHVyZXMpICE9IGZlYXR1cmVzKQorCQkJY29udGludWU7CisKKwkJdG1wID0gZHJtX2FsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX2luZm9fbm9kZSksIF9EUk1fRFJJVkVSKTsKKwkJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoZmlsZXNbaV0ubmFtZSwgU19JRlJFRyB8IFNfSVJVR08sIHJvb3QpOworCQlpZiAoIWVudCkgeworCQkJRFJNX0VSUk9SKCJDYW5ub3QgY3JlYXRlIC9wcm9jL2RyaS8lcy8lc1xuIiwKKwkJCQkgIG5hbWUsIGZpbGVzW2ldLm5hbWUpOworCQkJZHJtX2ZyZWUodG1wLCBzaXplb2Yoc3RydWN0IGRybV9pbmZvX25vZGUpLAorCQkJCSBfRFJNX0RSSVZFUik7CisJCQlyZXQgPSAtMTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCWVudC0+cHJvY19mb3BzID0gJmRybV9wcm9jX2ZvcHM7CisJCWVudC0+ZGF0YSA9IHRtcDsKKwkJdG1wLT5taW5vciA9IG1pbm9yOworCQl0bXAtPmluZm9fZW50ID0gJmZpbGVzW2ldOworCQlsaXN0X2FkZCgmKHRtcC0+bGlzdCksICYobWlub3ItPnByb2Nfbm9kZXMubGlzdCkpOworCX0KKwlyZXR1cm4gMDsKKworZmFpbDoKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJcmVtb3ZlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLCBtaW5vci0+cHJvY19yb290KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIEluaXRpYWxpemUgdGhlIERSSSBwcm9jIGZpbGVzeXN0ZW0gZm9yIGEgZGV2aWNlCisgKgorICogXHBhcmFtIGRldiBEUk0gZGV2aWNlCisgKiBccGFyYW0gbWlub3IgZGV2aWNlIG1pbm9yIG51bWJlcgogICogXHBhcmFtIHJvb3QgRFJJIHByb2MgZGlyIGVudHJ5LgogICogXHBhcmFtIGRldl9yb290IHJlc3VsdGluZyBEUkkgZGV2aWNlIHByb2MgZGlyIGVudHJ5LgogICogXHJldHVybiByb290IGVudHJ5IHBvaW50ZXIgb24gc3VjY2Vzcywgb3IgTlVMTCBvbiBmYWlsdXJlLgpAQCAtMTAxLDM0ICsxNDgsMjQgQEAKIAkJICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJvb3QpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7Ci0JaW50IGksIGosIHJldDsKIAljaGFyIG5hbWVbNjRdOworCWludCByZXQ7CiAKKwlJTklUX0xJU1RfSEVBRCgmbWlub3ItPnByb2Nfbm9kZXMubGlzdCk7CiAJc3ByaW50ZihuYW1lLCAiJWQiLCBtaW5vcl9pZCk7Ci0JbWlub3ItPmRldl9yb290ID0gcHJvY19ta2RpcihuYW1lLCByb290KTsKLQlpZiAoIW1pbm9yLT5kZXZfcm9vdCkgeworCW1pbm9yLT5wcm9jX3Jvb3QgPSBwcm9jX21rZGlyKG5hbWUsIHJvb3QpOworCWlmICghbWlub3ItPnByb2Nfcm9vdCkgewogCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL3Byb2MvZHJpLyVzXG4iLCBuYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBEUk1fUFJPQ19FTlRSSUVTOyBpKyspIHsKLQkJdTMyIGZlYXR1cmVzID0gZHJtX3Byb2NfbGlzdFtpXS5kcml2ZXJfZmVhdHVyZXM7Ci0KLQkJaWYgKGZlYXR1cmVzICE9IDAgJiYKLQkJICAgIChkZXYtPmRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgZmVhdHVyZXMpICE9IGZlYXR1cmVzKQotCQkJY29udGludWU7Ci0KLQkJZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoZHJtX3Byb2NfbGlzdFtpXS5uYW1lLAotCQkJCQlTX0lGUkVHIHwgU19JUlVHTywgbWlub3ItPmRldl9yb290KTsKLQkJaWYgKCFlbnQpIHsKLQkJCURSTV9FUlJPUigiQ2Fubm90IGNyZWF0ZSAvcHJvYy9kcmkvJXMvJXNcbiIsCi0JCQkJICBuYW1lLCBkcm1fcHJvY19saXN0W2ldLm5hbWUpOwotCQkJcmV0ID0gLTE7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQkJZW50LT5yZWFkX3Byb2MgPSBkcm1fcHJvY19saXN0W2ldLmY7Ci0JCWVudC0+ZGF0YSA9IG1pbm9yOworCXJldCA9IGRybV9wcm9jX2NyZWF0ZV9maWxlcyhkcm1fcHJvY19saXN0LCBEUk1fUFJPQ19FTlRSSUVTLAorCQkJCSAgICBtaW5vci0+cHJvY19yb290LCBtaW5vcik7CisJaWYgKHJldCkgeworCQlyZW1vdmVfcHJvY19lbnRyeShuYW1lLCByb290KTsKKwkJbWlub3ItPnByb2Nfcm9vdCA9IE5VTEw7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSBjb3JlIGRybSBwcm9jIGZpbGVzXG4iKTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlpZiAoZGV2LT5kcml2ZXItPnByb2NfaW5pdCkgewpAQCAtMTM2LDE5ICsxNzMsMzIgQEAKIAkJaWYgKHJldCkgewogCQkJRFJNX0VSUk9SKCJEUk06IERyaXZlciBmYWlsZWQgdG8gaW5pdGlhbGl6ZSAiCiAJCQkJICAiL3Byb2MvZHJpLlxuIik7Ci0JCQlnb3RvIGZhaWw7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQotCiAJcmV0dXJuIDA7Ci0gZmFpbDoKK30KIAotCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCi0JCXJlbW92ZV9wcm9jX2VudHJ5KGRybV9wcm9jX2xpc3RbaV0ubmFtZSwKLQkJCQkgIG1pbm9yLT5kZXZfcm9vdCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkobmFtZSwgcm9vdCk7Ci0JbWlub3ItPmRldl9yb290ID0gTlVMTDsKLQlyZXR1cm4gcmV0OworaW50IGRybV9wcm9jX3JlbW92ZV9maWxlcyhzdHJ1Y3QgZHJtX2luZm9fbGlzdCAqZmlsZXMsIGludCBjb3VudCwKKwkJCSAgc3RydWN0IGRybV9taW5vciAqbWlub3IpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zLCAqcTsKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqdG1wOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgcSwgJm1pbm9yLT5wcm9jX25vZGVzLmxpc3QpIHsKKwkJCXRtcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZHJtX2luZm9fbm9kZSwgbGlzdCk7CisJCQlpZiAodG1wLT5pbmZvX2VudCA9PSAmZmlsZXNbaV0pIHsKKwkJCQlyZW1vdmVfcHJvY19lbnRyeShmaWxlc1tpXS5uYW1lLAorCQkJCQkJICBtaW5vci0+cHJvY19yb290KTsKKwkJCQlsaXN0X2RlbChwb3MpOworCQkJCWRybV9mcmVlKHRtcCwgc2l6ZW9mKHN0cnVjdCBkcm1faW5mb19ub2RlKSwKKwkJCQkJIF9EUk1fRFJJVkVSKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xNjQsNTcwICsyMTQsMTkgQEAKIGludCBkcm1fcHJvY19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJvb3QpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IGk7CiAJY2hhciBuYW1lWzY0XTsKIAotCWlmICghcm9vdCB8fCAhbWlub3ItPmRldl9yb290KQorCWlmICghcm9vdCB8fCAhbWlub3ItPnByb2Nfcm9vdCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZGV2LT5kcml2ZXItPnByb2NfY2xlYW51cCkKIAkJZGV2LT5kcml2ZXItPnByb2NfY2xlYW51cChtaW5vcik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgRFJNX1BST0NfRU5UUklFUzsgaSsrKQotCQlyZW1vdmVfcHJvY19lbnRyeShkcm1fcHJvY19saXN0W2ldLm5hbWUsIG1pbm9yLT5kZXZfcm9vdCk7CisJZHJtX3Byb2NfcmVtb3ZlX2ZpbGVzKGRybV9wcm9jX2xpc3QsIERSTV9QUk9DX0VOVFJJRVMsIG1pbm9yKTsKKwogCXNwcmludGYobmFtZSwgIiVkIiwgbWlub3ItPmluZGV4KTsKIAlyZW1vdmVfcHJvY19lbnRyeShuYW1lLCByb290KTsKIAogCXJldHVybiAwOwogfQogCi0vKioKLSAqIENhbGxlZCB3aGVuICIvcHJvYy9kcmkvLi4uL25hbWUiIGlzIHJlYWQuCi0gKgotICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgotICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgotICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgotICogXHBhcmFtIHJlcXVlc3QgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcy4KLSAqIFxwYXJhbSBlb2Ygd2hldGhlciB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gcmV0dXJuLgotICogXHBhcmFtIGRhdGEgcHJpdmF0ZSBkYXRhLgotICogXHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcy4KLSAqCi0gKiBQcmludHMgdGhlIGRldmljZSBuYW1lIHRvZ2V0aGVyIHdpdGggdGhlIGJ1cyBpZCBpZiBhdmFpbGFibGUuCi0gKi8KLXN0YXRpYyBpbnQgZHJtX25hbWVfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwKLQkJCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9tYXN0ZXIgKm1hc3RlciA9IG1pbm9yLT5tYXN0ZXI7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IGxlbiA9IDA7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICghbWFzdGVyKQotCQlyZXR1cm4gMDsKLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQotCWlmIChtYXN0ZXItPnVuaXF1ZSkgewotCQlEUk1fUFJPQ19QUklOVCgiJXMgJXMgJXNcbiIsCi0JCQkgICAgICAgZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSwKLQkJCSAgICAgICBwY2lfbmFtZShkZXYtPnBkZXYpLCBtYXN0ZXItPnVuaXF1ZSk7Ci0JfSBlbHNlIHsKLQkJRFJNX1BST0NfUFJJTlQoIiVzICVzXG4iLCBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lLAotCQkJICAgICAgIHBjaV9uYW1lKGRldi0+cGRldikpOwotCX0KLQotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi0vKioKLSAqIENhbGxlZCB3aGVuICIvcHJvYy9kcmkvLi4uL3ZtIiBpcyByZWFkLgotICoKLSAqIFxwYXJhbSBidWYgb3V0cHV0IGJ1ZmZlci4KLSAqIFxwYXJhbSBzdGFydCBzdGFydCBvZiBvdXRwdXQgZGF0YS4KLSAqIFxwYXJhbSBvZmZzZXQgcmVxdWVzdGVkIHN0YXJ0IG9mZnNldC4KLSAqIFxwYXJhbSByZXF1ZXN0IHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMuCi0gKiBccGFyYW0gZW9mIHdoZXRoZXIgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIHJldHVybi4KLSAqIFxwYXJhbSBkYXRhIHByaXZhdGUgZGF0YS4KLSAqIFxyZXR1cm4gbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMuCi0gKgotICogUHJpbnRzIGluZm9ybWF0aW9uIGFib3V0IGFsbCBtYXBwaW5ncyBpbiBkcm1fZGV2aWNlOjptYXBsaXN0LgotICovCi1zdGF0aWMgaW50IGRybV9fdm1faW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwKLQkJCWludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwOwotCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdDsKLQotCS8qIEhhcmRjb2RlZCBmcm9tIF9EUk1fRlJBTUVfQlVGRkVSLAotCSAgIF9EUk1fUkVHSVNURVJTLCBfRFJNX1NITSwgX0RSTV9BR1AsIGFuZAotCSAgIF9EUk1fU0NBVFRFUl9HQVRIRVIgYW5kIF9EUk1fQ09OU0lTVEVOVCAqLwotCWNvbnN0IGNoYXIgKnR5cGVzW10gPSB7ICJGQiIsICJSRUciLCAiU0hNIiwgIkFHUCIsICJTRyIsICJQQ0kiIH07Ci0JY29uc3QgY2hhciAqdHlwZTsKLQlpbnQgaTsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCi0JRFJNX1BST0NfUFJJTlQoInNsb3QJIG9mZnNldAkgICAgICBzaXplIHR5cGUgZmxhZ3MJICIKLQkJICAgICAgICJhZGRyZXNzIG10cnJcblxuIik7Ci0JaSA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShyX2xpc3QsICZkZXYtPm1hcGxpc3QsIGhlYWQpIHsKLQkJbWFwID0gcl9saXN0LT5tYXA7Ci0JCWlmICghbWFwKQotCQkJY29udGludWU7Ci0JCWlmIChtYXAtPnR5cGUgPCAwIHx8IG1hcC0+dHlwZSA+IDUpCi0JCQl0eXBlID0gIj8/IjsKLQkJZWxzZQotCQkJdHlwZSA9IHR5cGVzW21hcC0+dHlwZV07Ci0JCURSTV9QUk9DX1BSSU5UKCIlNGQgMHglMDhseCAweCUwOGx4ICU0LjRzICAweCUwMnggMHglMDhseCAiLAotCQkJICAgICAgIGksCi0JCQkgICAgICAgbWFwLT5vZmZzZXQsCi0JCQkgICAgICAgbWFwLT5zaXplLCB0eXBlLCBtYXAtPmZsYWdzLAotCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSByX2xpc3QtPnVzZXJfdG9rZW4pOwotCQlpZiAobWFwLT5tdHJyIDwgMCkgewotCQkJRFJNX1BST0NfUFJJTlQoIm5vbmVcbiIpOwotCQl9IGVsc2UgewotCQkJRFJNX1BST0NfUFJJTlQoIiU0ZFxuIiwgbWFwLT5tdHJyKTsKLQkJfQotCQlpKys7Ci0JfQotCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLS8qKgotICogU2ltcGx5IGNhbGxzIF92bV9pbmZvKCkgd2hpbGUgaG9sZGluZyB0aGUgZHJtX2RldmljZTo6c3RydWN0X211dGV4IGxvY2suCi0gKi8KLXN0YXRpYyBpbnQgZHJtX3ZtX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCi0JCSAgICAgICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXQgPSBkcm1fX3ZtX2luZm8oYnVmLCBzdGFydCwgb2Zmc2V0LCByZXF1ZXN0LCBlb2YsIGRhdGEpOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vcXVldWVzIiBpcyByZWFkLgotICoKLSAqIFxwYXJhbSBidWYgb3V0cHV0IGJ1ZmZlci4KLSAqIFxwYXJhbSBzdGFydCBzdGFydCBvZiBvdXRwdXQgZGF0YS4KLSAqIFxwYXJhbSBvZmZzZXQgcmVxdWVzdGVkIHN0YXJ0IG9mZnNldC4KLSAqIFxwYXJhbSByZXF1ZXN0IHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMuCi0gKiBccGFyYW0gZW9mIHdoZXRoZXIgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIHJldHVybi4KLSAqIFxwYXJhbSBkYXRhIHByaXZhdGUgZGF0YS4KLSAqIFxyZXR1cm4gbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMuCi0gKi8KLXN0YXRpYyBpbnQgZHJtX19xdWV1ZXNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IGxlbiA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IGRybV9xdWV1ZSAqcTsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCi0JRFJNX1BST0NfUFJJTlQoIiAgY3R4L2ZsYWdzICAgdXNlICAgZmluIgotCQkgICAgICAgIiAgIGJsay9ydy9yd2YgIHdhaXQgICAgZmx1c2hlZAkgICBxdWV1ZWQiCi0JCSAgICAgICAiICAgICAgbG9ja3NcblxuIik7Ci0JZm9yIChpID0gMDsgaSA8IGRldi0+cXVldWVfY291bnQ7IGkrKykgewotCQlxID0gZGV2LT5xdWV1ZWxpc3RbaV07Ci0JCWF0b21pY19pbmMoJnEtPnVzZV9jb3VudCk7Ci0JCURSTV9QUk9DX1BSSU5UX1JFVChhdG9taWNfZGVjKCZxLT51c2VfY291bnQpLAotCQkJCSAgICIlNWQvMHglMDN4ICU1ZCAlNWQiCi0JCQkJICAgIiAlNWQvJWMlYy8lYyVjJWMgJTVaZFxuIiwKLQkJCQkgICBpLAotCQkJCSAgIHEtPmZsYWdzLAotCQkJCSAgIGF0b21pY19yZWFkKCZxLT51c2VfY291bnQpLAotCQkJCSAgIGF0b21pY19yZWFkKCZxLT5maW5hbGl6YXRpb24pLAotCQkJCSAgIGF0b21pY19yZWFkKCZxLT5ibG9ja19jb3VudCksCi0JCQkJICAgYXRvbWljX3JlYWQoJnEtPmJsb2NrX3JlYWQpID8gJ3InIDogJy0nLAotCQkJCSAgIGF0b21pY19yZWFkKCZxLT5ibG9ja193cml0ZSkgPyAndycgOiAnLScsCi0JCQkJICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcS0+cmVhZF9xdWV1ZSkgPyAncicgOiAnLScsCi0JCQkJICAgd2FpdHF1ZXVlX2FjdGl2ZSgmcS0+Ci0JCQkJCQkgICAgd3JpdGVfcXVldWUpID8gJ3cnIDogJy0nLAotCQkJCSAgIHdhaXRxdWV1ZV9hY3RpdmUoJnEtPgotCQkJCQkJICAgIGZsdXNoX3F1ZXVlKSA/ICdmJyA6ICctJywKLQkJCQkgICBEUk1fQlVGQ09VTlQoJnEtPndhaXRsaXN0KSk7Ci0JCWF0b21pY19kZWMoJnEtPnVzZV9jb3VudCk7Ci0JfQotCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLS8qKgotICogU2ltcGx5IGNhbGxzIF9xdWV1ZXNfaW5mbygpIHdoaWxlIGhvbGRpbmcgdGhlIGRybV9kZXZpY2U6OnN0cnVjdF9tdXRleCBsb2NrLgotICovCi1zdGF0aWMgaW50IGRybV9xdWV1ZXNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwKLQkJCSAgIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldCA9IGRybV9fcXVldWVzX2luZm8oYnVmLCBzdGFydCwgb2Zmc2V0LCByZXF1ZXN0LCBlb2YsIGRhdGEpOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogQ2FsbGVkIHdoZW4gIi9wcm9jL2RyaS8uLi4vYnVmcyIgaXMgcmVhZC4KLSAqCi0gKiBccGFyYW0gYnVmIG91dHB1dCBidWZmZXIuCi0gKiBccGFyYW0gc3RhcnQgc3RhcnQgb2Ygb3V0cHV0IGRhdGEuCi0gKiBccGFyYW0gb2Zmc2V0IHJlcXVlc3RlZCBzdGFydCBvZmZzZXQuCi0gKiBccGFyYW0gcmVxdWVzdCByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJ5dGVzLgotICogXHBhcmFtIGVvZiB3aGV0aGVyIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZXR1cm4uCi0gKiBccGFyYW0gZGF0YSBwcml2YXRlIGRhdGEuCi0gKiBccmV0dXJuIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzLgotICovCi1zdGF0aWMgaW50IGRybV9fYnVmc19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IGxlbiA9IDA7Ci0Jc3RydWN0IGRybV9kZXZpY2VfZG1hICpkbWEgPSBkZXYtPmRtYTsKLQlpbnQgaTsKLQotCWlmICghZG1hIHx8IG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0KLQlEUk1fUFJPQ19QUklOVCgiIG8gICAgIHNpemUgY291bnQgIGZyZWUJIHNlZ3MgcGFnZXMgICAga0JcblxuIik7Ci0JZm9yIChpID0gMDsgaSA8PSBEUk1fTUFYX09SREVSOyBpKyspIHsKLQkJaWYgKGRtYS0+YnVmc1tpXS5idWZfY291bnQpCi0JCQlEUk1fUFJPQ19QUklOVCgiJTJkICU4ZCAlNWQgJTVkICU1ZCAlNWQgJTVsZFxuIiwKLQkJCQkgICAgICAgaSwKLQkJCQkgICAgICAgZG1hLT5idWZzW2ldLmJ1Zl9zaXplLAotCQkJCSAgICAgICBkbWEtPmJ1ZnNbaV0uYnVmX2NvdW50LAotCQkJCSAgICAgICBhdG9taWNfcmVhZCgmZG1hLT5idWZzW2ldCi0JCQkJCQkgICAuZnJlZWxpc3QuY291bnQpLAotCQkJCSAgICAgICBkbWEtPmJ1ZnNbaV0uc2VnX2NvdW50LAotCQkJCSAgICAgICBkbWEtPmJ1ZnNbaV0uc2VnX2NvdW50Ci0JCQkJICAgICAgICogKDEgPDwgZG1hLT5idWZzW2ldLnBhZ2Vfb3JkZXIpLAotCQkJCSAgICAgICAoZG1hLT5idWZzW2ldLnNlZ19jb3VudAotCQkJCQkqICgxIDw8IGRtYS0+YnVmc1tpXS5wYWdlX29yZGVyKSkKLQkJCQkgICAgICAgKiBQQUdFX1NJWkUgLyAxMDI0KTsKLQl9Ci0JRFJNX1BST0NfUFJJTlQoIlxuIik7Ci0JZm9yIChpID0gMDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKLQkJaWYgKGkgJiYgIShpICUgMzIpKQotCQkJRFJNX1BST0NfUFJJTlQoIlxuIik7Ci0JCURSTV9QUk9DX1BSSU5UKCIgJWQiLCBkbWEtPmJ1Zmxpc3RbaV0tPmxpc3QpOwotCX0KLQlEUk1fUFJPQ19QUklOVCgiXG4iKTsKLQotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi0vKioKLSAqIFNpbXBseSBjYWxscyBfYnVmc19pbmZvKCkgd2hpbGUgaG9sZGluZyB0aGUgZHJtX2RldmljZTo6c3RydWN0X211dGV4IGxvY2suCi0gKi8KLXN0YXRpYyBpbnQgZHJtX2J1ZnNfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwKLQkJCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXQgPSBkcm1fX2J1ZnNfaW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi92YmxhbmsiIGlzIHJlYWQuCi0gKgotICogXHBhcmFtIGJ1ZiBvdXRwdXQgYnVmZmVyLgotICogXHBhcmFtIHN0YXJ0IHN0YXJ0IG9mIG91dHB1dCBkYXRhLgotICogXHBhcmFtIG9mZnNldCByZXF1ZXN0ZWQgc3RhcnQgb2Zmc2V0LgotICogXHBhcmFtIHJlcXVlc3QgcmVxdWVzdGVkIG51bWJlciBvZiBieXRlcy4KLSAqIFxwYXJhbSBlb2Ygd2hldGhlciB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8gcmV0dXJuLgotICogXHBhcmFtIGRhdGEgcHJpdmF0ZSBkYXRhLgotICogXHJldHVybiBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcy4KLSAqLwotc3RhdGljIGludCBkcm1fX3ZibGFua19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCByZXF1ZXN0LAotCQkJICBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IGxlbiA9IDA7Ci0JaW50IGNydGM7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQotCWZvciAoY3J0YyA9IDA7IGNydGMgPCBkZXYtPm51bV9jcnRjczsgY3J0YysrKSB7Ci0JCURSTV9QUk9DX1BSSU5UKCJDUlRDICVkIGVuYWJsZTogICAgICVkXG4iLAotCQkJICAgICAgIGNydGMsIGF0b21pY19yZWFkKCZkZXYtPnZibGFua19yZWZjb3VudFtjcnRjXSkpOwotCQlEUk1fUFJPQ19QUklOVCgiQ1JUQyAlZCBjb3VudGVyOiAgICAlZFxuIiwKLQkJCSAgICAgICBjcnRjLCBkcm1fdmJsYW5rX2NvdW50KGRldiwgY3J0YykpOwotCQlEUk1fUFJPQ19QUklOVCgiQ1JUQyAlZCBsYXN0IHdhaXQ6ICAlZFxuIiwKLQkJCSAgICAgICBjcnRjLCBkZXYtPmxhc3RfdmJsYW5rX3dhaXRbY3J0Y10pOwotCQlEUk1fUFJPQ19QUklOVCgiQ1JUQyAlZCBpbiBtb2Rlc2V0OiAlZFxuIiwKLQkJCSAgICAgICBjcnRjLCBkZXYtPnZibGFua19pbm1vZGVzZXRbY3J0Y10pOwotCX0KLQotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi0vKioKLSAqIFNpbXBseSBjYWxscyBfdmJsYW5rX2luZm8oKSB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3RfbXV0ZXggbG9jay4KLSAqLwotc3RhdGljIGludCBkcm1fdmJsYW5rX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwgaW50IHJlcXVlc3QsCi0JCQkgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0ID0gZHJtX192YmxhbmtfaW5mbyhidWYsIHN0YXJ0LCBvZmZzZXQsIHJlcXVlc3QsIGVvZiwgZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBDYWxsZWQgd2hlbiAiL3Byb2MvZHJpLy4uLi9jbGllbnRzIiBpcyByZWFkLgotICoKLSAqIFxwYXJhbSBidWYgb3V0cHV0IGJ1ZmZlci4KLSAqIFxwYXJhbSBzdGFydCBzdGFydCBvZiBvdXRwdXQgZGF0YS4KLSAqIFxwYXJhbSBvZmZzZXQgcmVxdWVzdGVkIHN0YXJ0IG9mZnNldC4KLSAqIFxwYXJhbSByZXF1ZXN0IHJlcXVlc3RlZCBudW1iZXIgb2YgYnl0ZXMuCi0gKiBccGFyYW0gZW9mIHdoZXRoZXIgdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIHJldHVybi4KLSAqIFxwYXJhbSBkYXRhIHByaXZhdGUgZGF0YS4KLSAqIFxyZXR1cm4gbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMuCi0gKi8KLXN0YXRpYyBpbnQgZHJtX19jbGllbnRzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgbGVuID0gMDsKLQlzdHJ1Y3QgZHJtX2ZpbGUgKnByaXY7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQotCURSTV9QUk9DX1BSSU5UKCJhIGRldglwaWQgICAgdWlkCW1hZ2ljCSAgaW9jdGxzXG5cbiIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHJpdiwgJmRldi0+ZmlsZWxpc3QsIGxoZWFkKSB7Ci0JCURSTV9QUk9DX1BSSU5UKCIlYyAlM2QgJTVkICU1ZCAlMTB1ICUxMGx1XG4iLAotCQkJICAgICAgIHByaXYtPmF1dGhlbnRpY2F0ZWQgPyAneScgOiAnbicsCi0JCQkgICAgICAgcHJpdi0+bWlub3ItPmluZGV4LAotCQkJICAgICAgIHByaXYtPnBpZCwKLQkJCSAgICAgICBwcml2LT51aWQsIHByaXYtPm1hZ2ljLCBwcml2LT5pb2N0bF9jb3VudCk7Ci0JfQotCi0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLS8qKgotICogU2ltcGx5IGNhbGxzIF9jbGllbnRzX2luZm8oKSB3aGlsZSBob2xkaW5nIHRoZSBkcm1fZGV2aWNlOjpzdHJ1Y3RfbXV0ZXggbG9jay4KLSAqLwotc3RhdGljIGludCBkcm1fY2xpZW50c19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkgICAgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldCA9IGRybV9fY2xpZW50c19pbmZvKGJ1Ziwgc3RhcnQsIG9mZnNldCwgcmVxdWVzdCwgZW9mLCBkYXRhKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdHJ1Y3QgZHJtX2dlbV9uYW1lX2luZm9fZGF0YSB7Ci0gICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICpidWY7Ci0gICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZW9mOwotfTsKLQotc3RhdGljIGludCBkcm1fZ2VtX29uZV9uYW1lX2luZm8oaW50IGlkLCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBwdHI7Ci0Jc3RydWN0IGRybV9nZW1fbmFtZV9pbmZvX2RhdGEgICAqbmlkID0gZGF0YTsKLQotCURSTV9JTkZPKCJuYW1lICVkIHNpemUgJXpkXG4iLCBvYmotPm5hbWUsIG9iai0+c2l6ZSk7Ci0JaWYgKG5pZC0+ZW9mKQotCQlyZXR1cm4gMDsKLQotCW5pZC0+bGVuICs9IHNwcmludGYoJm5pZC0+YnVmW25pZC0+bGVuXSwKLQkJCSAgICAiJTZkICU4emQgJTdkICU4ZFxuIiwKLQkJCSAgICBvYmotPm5hbWUsIG9iai0+c2l6ZSwKLQkJCSAgICBhdG9taWNfcmVhZCgmb2JqLT5oYW5kbGVjb3VudC5yZWZjb3VudCksCi0JCQkgICAgYXRvbWljX3JlYWQoJm9iai0+cmVmY291bnQucmVmY291bnQpKTsKLQlpZiAobmlkLT5sZW4gPiBEUk1fUFJPQ19MSU1JVCkgewotCQluaWQtPmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkcm1fZ2VtX25hbWVfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCXN0cnVjdCBkcm1fZ2VtX25hbWVfaW5mb19kYXRhIG5pZDsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbmlkLmxlbiA9IHNwcmludGYoYnVmLCAiICBuYW1lICAgICBzaXplIGhhbmRsZXMgcmVmY291bnRcbiIpOwotCW5pZC5idWYgPSBidWY7Ci0JbmlkLmVvZiA9IDA7Ci0JaWRyX2Zvcl9lYWNoKCZkZXYtPm9iamVjdF9uYW1lX2lkciwgZHJtX2dlbV9vbmVfbmFtZV9pbmZvLCAmbmlkKTsKLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQlpZiAobmlkLmxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBuaWQubGVuIC0gb2Zmc2V0OwotfQotCi1zdGF0aWMgaW50IGRybV9nZW1fb2JqZWN0X2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSAgICAgICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWludCBsZW4gPSAwOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0JRFJNX1BST0NfUFJJTlQoIiVkIG9iamVjdHNcbiIsIGF0b21pY19yZWFkKCZkZXYtPm9iamVjdF9jb3VudCkpOwotCURSTV9QUk9DX1BSSU5UKCIlZCBvYmplY3QgYnl0ZXNcbiIsIGF0b21pY19yZWFkKCZkZXYtPm9iamVjdF9tZW1vcnkpKTsKLQlEUk1fUFJPQ19QUklOVCgiJWQgcGlubmVkXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5waW5fY291bnQpKTsKLQlEUk1fUFJPQ19QUklOVCgiJWQgcGluIGJ5dGVzXG4iLCBhdG9taWNfcmVhZCgmZGV2LT5waW5fbWVtb3J5KSk7Ci0JRFJNX1BST0NfUFJJTlQoIiVkIGd0dCBieXRlc1xuIiwgYXRvbWljX3JlYWQoJmRldi0+Z3R0X21lbW9yeSkpOwotCURSTV9QUk9DX1BSSU5UKCIlZCBndHQgdG90YWxcbiIsIGRldi0+Z3R0X3RvdGFsKTsKLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotI2lmIERSTV9ERUJVR19DT0RFCi0KLXN0YXRpYyBpbnQgZHJtX192bWFfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwKLQkJCSBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JaW50IGxlbiA9IDA7Ci0Jc3RydWN0IGRybV92bWFfZW50cnkgKnB0OwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotI2lmIGRlZmluZWQoX19pMzg2X18pCi0JdW5zaWduZWQgaW50IHBncHJvdDsKLSNlbmRpZgotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0KLQlEUk1fUFJPQ19QUklOVCgidm1hIHVzZSBjb3VudDogJWQsIGhpZ2hfbWVtb3J5ID0gJXAsIDB4JTA4bHhcbiIsCi0JCSAgICAgICBhdG9taWNfcmVhZCgmZGV2LT52bWFfY291bnQpLAotCQkgICAgICAgaGlnaF9tZW1vcnksIHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHQsICZkZXYtPnZtYWxpc3QsIGhlYWQpIHsKLQkJaWYgKCEodm1hID0gcHQtPnZtYSkpCi0JCQljb250aW51ZTsKLQkJRFJNX1BST0NfUFJJTlQoIlxuJTVkIDB4JTA4bHgtMHglMDhseCAlYyVjJWMlYyVjJWMgMHglMDhseDAwMCIsCi0JCQkgICAgICAgcHQtPnBpZCwKLQkJCSAgICAgICB2bWEtPnZtX3N0YXJ0LAotCQkJICAgICAgIHZtYS0+dm1fZW5kLAotCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEID8gJ3InIDogJy0nLAotCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSA/ICd3JyA6ICctJywKLQkJCSAgICAgICB2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQyA/ICd4JyA6ICctJywKLQkJCSAgICAgICB2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUgPyAncycgOiAncCcsCi0JCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCA/ICdsJyA6ICctJywKLQkJCSAgICAgICB2bWEtPnZtX2ZsYWdzICYgVk1fSU8gPyAnaScgOiAnLScsCi0JCQkgICAgICAgdm1hLT52bV9wZ29mZik7Ci0KLSNpZiBkZWZpbmVkKF9faTM4Nl9fKQotCQlwZ3Byb3QgPSBwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KTsKLQkJRFJNX1BST0NfUFJJTlQoIiAlYyVjJWMlYyVjJWMlYyVjJWMiLAotCQkJICAgICAgIHBncHJvdCAmIF9QQUdFX1BSRVNFTlQgPyAncCcgOiAnLScsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUlcgPyAndycgOiAncicsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfVVNFUiA/ICd1JyA6ICdzJywKLQkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9QV1QgPyAndCcgOiAnYicsCi0JCQkgICAgICAgcGdwcm90ICYgX1BBR0VfUENEID8gJ3UnIDogJ2MnLAotCQkJICAgICAgIHBncHJvdCAmIF9QQUdFX0FDQ0VTU0VEID8gJ2EnIDogJy0nLAotCQkJICAgICAgIHBncHJvdCAmIF9QQUdFX0RJUlRZID8gJ2QnIDogJy0nLAotCQkJICAgICAgIHBncHJvdCAmIF9QQUdFX1BTRSA/ICdtJyA6ICdrJywKLQkJCSAgICAgICBwZ3Byb3QgJiBfUEFHRV9HTE9CQUwgPyAnZycgOiAnbCcpOwotI2VuZGlmCi0JCURSTV9QUk9DX1BSSU5UKCJcbiIpOwotCX0KLQotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi1zdGF0aWMgaW50IGRybV92bWFfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LCBpbnQgcmVxdWVzdCwKLQkJCWludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldCA9IGRybV9fdm1hX2luZm8oYnVmLCBzdGFydCwgb2Zmc2V0LCByZXF1ZXN0LCBlb2YsIGRhdGEpOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKaW5kZXggN2M4YjE1Yi4uNDhmMzNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKQEAgLTUwLDYgKzUwLDcgQEAKIAogc3RydWN0IGNsYXNzICpkcm1fY2xhc3M7CiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRybV9wcm9jX3Jvb3Q7CitzdHJ1Y3QgZGVudHJ5ICpkcm1fZGVidWdmc19yb290OwogCiBzdGF0aWMgaW50IGRybV9taW5vcl9nZXRfaWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHR5cGUpCiB7CkBAIC0zMTMsNyArMzE0LDE1IEBACiAJCQlnb3RvIGVycl9tZW07CiAJCX0KIAl9IGVsc2UKLQkJbmV3X21pbm9yLT5kZXZfcm9vdCA9IE5VTEw7CisJCW5ld19taW5vci0+cHJvY19yb290ID0gTlVMTDsKKworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCXJldCA9IGRybV9kZWJ1Z2ZzX2luaXQobmV3X21pbm9yLCBtaW5vcl9pZCwgZHJtX2RlYnVnZnNfcm9vdCk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkRSTTogRmFpbGVkIHRvIGluaXRpYWxpemUgL2RlYnVnZnMvZHJpLlxuIik7CisJCWdvdG8gZXJyX2cyOworCX0KKyNlbmRpZgogCiAJcmV0ID0gZHJtX3N5c2ZzX2RldmljZV9hZGQobmV3X21pbm9yKTsKIAlpZiAocmV0KSB7CkBAIC00NTEsNiArNDYwLDEwIEBACiAKIAlpZiAobWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0xFR0FDWSkKIAkJZHJtX3Byb2NfY2xlYW51cChtaW5vciwgZHJtX3Byb2Nfcm9vdCk7CisjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCisJZHJtX2RlYnVnZnNfY2xlYW51cChtaW5vcik7CisjZW5kaWYKKwogCWRybV9zeXNmc19kZXZpY2VfcmVtb3ZlKG1pbm9yKTsKIAogCWlkcl9yZW1vdmUoJmRybV9taW5vcnNfaWRyLCBtaW5vci0+aW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCmluZGV4IDVhYTY3ODAuLjE4NmQwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKQEAgLTM1OSw4ICszNTksOCBAQAogCURSTV9ERUJVRygiYWRkaW5nIFwiJXNcIiB0byBzeXNmc1xuIiwKIAkJICBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOwogCi0Jc25wcmludGYoY29ubmVjdG9yLT5rZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICJjYXJkJWQtJXMiLAotCQkgZGV2LT5wcmltYXJ5LT5pbmRleCwgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKKwlkZXZfc2V0X25hbWUoJmNvbm5lY3Rvci0+a2RldiwgImNhcmQlZC0lcyIsCisJCSAgICAgZGV2LT5wcmltYXJ5LT5pbmRleCwgZHJtX2dldF9jb25uZWN0b3JfbmFtZShjb25uZWN0b3IpKTsKIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmNvbm5lY3Rvci0+a2Rldik7CiAKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCmluZGV4IDc5M2NiYTMuLjUxYzVhMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCkBAIC03LDcgKzcsNyBAQAogICAgICAgICAgIGk5MTVfc3VzcGVuZC5vIFwKIAkgIGk5MTVfZ2VtLm8gXAogCSAgaTkxNV9nZW1fZGVidWcubyBcCi0JICBpOTE1X2dlbV9wcm9jLm8gXAorCSAgaTkxNV9nZW1fZGVidWdmcy5vIFwKIAkgIGk5MTVfZ2VtX3RpbGluZy5vIFwKIAkgIGludGVsX2Rpc3BsYXkubyBcCiAJICBpbnRlbF9jcnQubyBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCA2ZDIxYjllLi5hODE4YjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTQxLDcgKzQxLDYgQEAKIGludCBpOTE1X3dhaXRfcmluZyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50IG4sIGNvbnN0IGNoYXIgKmNhbGxlcikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2k5MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmRyaXZlcl9wcml2OwogCWRybV9pOTE1X3JpbmdfYnVmZmVyX3QgKnJpbmcgPSAmKGRldl9wcml2LT5yaW5nKTsKIAl1MzIgYWN0aGRfcmVnID0gSVNfSTk2NUcoZGV2KSA/IEFDVEhEX0k5NjUgOiBBQ1RIRDsKIAl1MzIgbGFzdF9hY3RoZCA9IEk5MTVfUkVBRChhY3RoZF9yZWcpOwpAQCAtNTgsOCArNTcsMTIgQEAKIAkJaWYgKHJpbmctPnNwYWNlID49IG4pCiAJCQlyZXR1cm4gMDsKIAotCQlpZiAobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCi0JCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+cGVyZl9ib3hlcyB8PSBJOTE1X0JPWF9XQUlUOworCQlpZiAoZGV2LT5wcmltYXJ5LT5tYXN0ZXIpIHsKKwkJCXN0cnVjdCBkcm1faTkxNV9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXYgPSBkZXYtPnByaW1hcnktPm1hc3Rlci0+ZHJpdmVyX3ByaXY7CisJCQlpZiAobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCisJCQkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPnBlcmZfYm94ZXMgfD0gSTkxNV9CT1hfV0FJVDsKKwkJfQorCiAKIAkJaWYgKHJpbmctPmhlYWQgIT0gbGFzdF9oZWFkKQogCQkJaSA9IDA7CkBAIC0zNTYsNyArMzU5LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGk5MTVfZW1pdF9jbWRzKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgX191c2VyICogYnVmZmVyLCBpbnQgZHdvcmRzKQorc3RhdGljIGludCBpOTE1X2VtaXRfY21kcyhzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgaW50ICpidWZmZXIsIGludCBkd29yZHMpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IGk7CkBAIC0zNzAsOCArMzczLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZHdvcmRzOykgewogCQlpbnQgY21kLCBzejsKIAotCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSX1VOQ0hFQ0tFRCgmY21kLCAmYnVmZmVyW2ldLCBzaXplb2YoY21kKSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJY21kID0gYnVmZmVyW2ldOwogCiAJCWlmICgoc3ogPSB2YWxpZGF0ZV9jbWQoY21kKSkgPT0gMCB8fCBpICsgc3ogPiBkd29yZHMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM3OSwxMSArMzgxLDcgQEAKIAkJT1VUX1JJTkcoY21kKTsKIAogCQl3aGlsZSAoKytpLCAtLXN6KSB7Ci0JCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSX1VOQ0hFQ0tFRCgmY21kLCAmYnVmZmVyW2ldLAotCQkJCQkJCSBzaXplb2YoY21kKSkpIHsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCU9VVF9SSU5HKGNtZCk7CisJCQlPVVRfUklORyhidWZmZXJbaV0pOwogCQl9CiAJfQogCkBAIC0zOTcsMTcgKzM5NSwxMyBAQAogCiBpbnQKIGk5MTVfZW1pdF9ib3goc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkgICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKmJveGVzLAorCSAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpib3hlcywKIAkgICAgICBpbnQgaSwgaW50IERSMSwgaW50IERSNCkKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBib3g7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgYm94ID0gYm94ZXNbaV07CiAJUklOR19MT0NBTFM7CiAKLQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSX1VOQ0hFQ0tFRCgmYm94LCAmYm94ZXNbaV0sIHNpemVvZihib3gpKSkgewotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KIAlpZiAoYm94LnkyIDw9IGJveC55MSB8fCBib3gueDIgPD0gYm94LngxIHx8IGJveC55MiA8PSAwIHx8IGJveC54MiA8PSAwKSB7CiAJCURSTV9FUlJPUigiQmFkIGJveCAlZCwlZC4uJWQsJWRcbiIsCiAJCQkgIGJveC54MSwgYm94LnkxLCBib3gueDIsIGJveC55Mik7CkBAIC00NjAsNyArNDU0LDkgQEAKIH0KIAogc3RhdGljIGludCBpOTE1X2Rpc3BhdGNoX2NtZGJ1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkgICBkcm1faTkxNV9jbWRidWZmZXJfdCAqIGNtZCkKKwkJCQkgICBkcm1faTkxNV9jbWRidWZmZXJfdCAqY21kLAorCQkJCSAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMsCisJCQkJICAgdm9pZCAqY21kYnVmKQogewogCWludCBuYm94ID0gY21kLT5udW1fY2xpcHJlY3RzOwogCWludCBpID0gMCwgY291bnQsIHJldDsKQEAgLTQ3NiwxMyArNDcyLDEzIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlpZiAoaSA8IG5ib3gpIHsKLQkJCXJldCA9IGk5MTVfZW1pdF9ib3goZGV2LCBjbWQtPmNsaXByZWN0cywgaSwKKwkJCXJldCA9IGk5MTVfZW1pdF9ib3goZGV2LCBjbGlwcmVjdHMsIGksCiAJCQkJCSAgICBjbWQtPkRSMSwgY21kLT5EUjQpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCQl9CiAKLQkJcmV0ID0gaTkxNV9lbWl0X2NtZHMoZGV2LCAoaW50IF9fdXNlciAqKWNtZC0+YnVmLCBjbWQtPnN6IC8gNCk7CisJCXJldCA9IGk5MTVfZW1pdF9jbWRzKGRldiwgY21kYnVmLCBjbWQtPnN6IC8gNCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KQEAgLTQ5MiwxMCArNDg4LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9kaXNwYXRjaF9iYXRjaGJ1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwKLQkJCQkgICAgIGRybV9pOTE1X2JhdGNoYnVmZmVyX3QgKiBiYXRjaCkKKwkJCQkgICAgIGRybV9pOTE1X2JhdGNoYnVmZmVyX3QgKiBiYXRjaCwKKwkJCQkgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpib3hlcyA9IGJhdGNoLT5jbGlwcmVjdHM7CiAJaW50IG5ib3ggPSBiYXRjaC0+bnVtX2NsaXByZWN0czsKIAlpbnQgaSA9IDAsIGNvdW50OwogCVJJTkdfTE9DQUxTOwpAQCAtNTExLDcgKzUwNyw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlpZiAoaSA8IG5ib3gpIHsKLQkJCWludCByZXQgPSBpOTE1X2VtaXRfYm94KGRldiwgYm94ZXMsIGksCisJCQlpbnQgcmV0ID0gaTkxNV9lbWl0X2JveChkZXYsIGNsaXByZWN0cywgaSwKIAkJCQkJCWJhdGNoLT5EUjEsIGJhdGNoLT5EUjQpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwpAQCAtNjI2LDYgKzYyMiw3IEBACiAJICAgIG1hc3Rlcl9wcml2LT5zYXJlYV9wcml2OwogCWRybV9pOTE1X2JhdGNoYnVmZmVyX3QgKmJhdGNoID0gZGF0YTsKIAlpbnQgcmV0OworCXN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMgPSBOVUxMOwogCiAJaWYgKCFkZXZfcHJpdi0+YWxsb3dfYmF0Y2hidWZmZXIpIHsKIAkJRFJNX0VSUk9SKCJCYXRjaGJ1ZmZlciBpb2N0bCBkaXNhYmxlZFxuIik7CkBAIC02MzcsMTcgKzYzNCwzNSBAQAogCiAJUklOR19MT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCi0JaWYgKGJhdGNoLT5udW1fY2xpcHJlY3RzICYmIERSTV9WRVJJRllBUkVBX1JFQUQoYmF0Y2gtPmNsaXByZWN0cywKLQkJCQkJCSAgICAgICBiYXRjaC0+bnVtX2NsaXByZWN0cyAqCi0JCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSkpCi0JCXJldHVybiAtRUZBVUxUOworCWlmIChiYXRjaC0+bnVtX2NsaXByZWN0cyA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGJhdGNoLT5udW1fY2xpcHJlY3RzKSB7CisJCWNsaXByZWN0cyA9IGRybV9jYWxsb2MoYmF0Y2gtPm51bV9jbGlwcmVjdHMsCisJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZHJtX2NsaXBfcmVjdCksCisJCQkJICAgICAgIERSTV9NRU1fRFJJVkVSKTsKKwkJaWYgKGNsaXByZWN0cyA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoY2xpcHJlY3RzLCBiYXRjaC0+Y2xpcHJlY3RzLAorCQkJCSAgICAgYmF0Y2gtPm51bV9jbGlwcmVjdHMgKgorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWdvdG8gZmFpbF9mcmVlOworCX0KIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlyZXQgPSBpOTE1X2Rpc3BhdGNoX2JhdGNoYnVmZmVyKGRldiwgYmF0Y2gpOworCXJldCA9IGk5MTVfZGlzcGF0Y2hfYmF0Y2hidWZmZXIoZGV2LCBiYXRjaCwgY2xpcHJlY3RzKTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCWlmIChzYXJlYV9wcml2KQogCQlzYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gUkVBRF9CUkVBRENSVU1CKGRldl9wcml2KTsKKworZmFpbF9mcmVlOgorCWRybV9mcmVlKGNsaXByZWN0cywKKwkJIGJhdGNoLT5udW1fY2xpcHJlY3RzICogc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSwKKwkJIERSTV9NRU1fRFJJVkVSKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY1OSw2ICs2NzQsOCBAQAogCWRybV9pOTE1X3NhcmVhX3QgKnNhcmVhX3ByaXYgPSAoZHJtX2k5MTVfc2FyZWFfdCAqKQogCSAgICBtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdjsKIAlkcm1faTkxNV9jbWRidWZmZXJfdCAqY21kYnVmID0gZGF0YTsKKwlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHJlY3RzID0gTlVMTDsKKwl2b2lkICpiYXRjaF9kYXRhOwogCWludCByZXQ7CiAKIAlEUk1fREVCVUcoImk5MTUgY21kYnVmZmVyLCBidWYgJXAgc3ogJWQgY2xpcHJlY3RzICVkXG4iLApAQCAtNjY2LDI1ICs2ODMsNTAgQEAKIAogCVJJTkdfTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAotCWlmIChjbWRidWYtPm51bV9jbGlwcmVjdHMgJiYKLQkgICAgRFJNX1ZFUklGWUFSRUFfUkVBRChjbWRidWYtPmNsaXByZWN0cywKLQkJCQljbWRidWYtPm51bV9jbGlwcmVjdHMgKgotCQkJCXNpemVvZihzdHJ1Y3QgZHJtX2NsaXBfcmVjdCkpKSB7Ci0JCURSTV9FUlJPUigiRmF1bHQgYWNjZXNzaW5nIGNsaXByZWN0c1xuIik7Ci0JCXJldHVybiAtRUZBVUxUOworCWlmIChjbWRidWYtPm51bV9jbGlwcmVjdHMgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJhdGNoX2RhdGEgPSBkcm1fYWxsb2MoY21kYnVmLT5zeiwgRFJNX01FTV9EUklWRVIpOworCWlmIChiYXRjaF9kYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gY29weV9mcm9tX3VzZXIoYmF0Y2hfZGF0YSwgY21kYnVmLT5idWYsIGNtZGJ1Zi0+c3opOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBmYWlsX2JhdGNoX2ZyZWU7CisKKwlpZiAoY21kYnVmLT5udW1fY2xpcHJlY3RzKSB7CisJCWNsaXByZWN0cyA9IGRybV9jYWxsb2MoY21kYnVmLT5udW1fY2xpcHJlY3RzLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGRybV9jbGlwX3JlY3QpLAorCQkJCSAgICAgICBEUk1fTUVNX0RSSVZFUik7CisJCWlmIChjbGlwcmVjdHMgPT0gTlVMTCkKKwkJCWdvdG8gZmFpbF9iYXRjaF9mcmVlOworCisJCXJldCA9IGNvcHlfZnJvbV91c2VyKGNsaXByZWN0cywgY21kYnVmLT5jbGlwcmVjdHMsCisJCQkJICAgICBjbWRidWYtPm51bV9jbGlwcmVjdHMgKgorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWdvdG8gZmFpbF9jbGlwX2ZyZWU7CiAJfQogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXJldCA9IGk5MTVfZGlzcGF0Y2hfY21kYnVmZmVyKGRldiwgY21kYnVmKTsKKwlyZXQgPSBpOTE1X2Rpc3BhdGNoX2NtZGJ1ZmZlcihkZXYsIGNtZGJ1ZiwgY2xpcHJlY3RzLCBiYXRjaF9kYXRhKTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiaTkxNV9kaXNwYXRjaF9jbWRidWZmZXIgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBmYWlsX2JhdGNoX2ZyZWU7CiAJfQogCiAJaWYgKHNhcmVhX3ByaXYpCiAJCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSBSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpOwotCXJldHVybiAwOworCitmYWlsX2JhdGNoX2ZyZWU6CisJZHJtX2ZyZWUoYmF0Y2hfZGF0YSwgY21kYnVmLT5zeiwgRFJNX01FTV9EUklWRVIpOworZmFpbF9jbGlwX2ZyZWU6CisJZHJtX2ZyZWUoY2xpcHJlY3RzLAorCQkgY21kYnVmLT5udW1fY2xpcHJlY3RzICogc2l6ZW9mKHN0cnVjdCBkcm1fY2xpcF9yZWN0KSwKKwkJIERSTV9NRU1fRFJJVkVSKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV9mbGlwX2J1ZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGIyOTNlZjAuLmRjYjkxZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtMTUwLDggKzE1MCwxMCBAQAogCS5nZXRfcmVnX29mcyA9IGRybV9jb3JlX2dldF9yZWdfb2ZzLAogCS5tYXN0ZXJfY3JlYXRlID0gaTkxNV9tYXN0ZXJfY3JlYXRlLAogCS5tYXN0ZXJfZGVzdHJveSA9IGk5MTVfbWFzdGVyX2Rlc3Ryb3ksCi0JLnByb2NfaW5pdCA9IGk5MTVfZ2VtX3Byb2NfaW5pdCwKLQkucHJvY19jbGVhbnVwID0gaTkxNV9nZW1fcHJvY19jbGVhbnVwLAorI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCS5kZWJ1Z2ZzX2luaXQgPSBpOTE1X2dlbV9kZWJ1Z2ZzX2luaXQsCisJLmRlYnVnZnNfY2xlYW51cCA9IGk5MTVfZ2VtX2RlYnVnZnNfY2xlYW51cCwKKyNlbmRpZgogCS5nZW1faW5pdF9vYmplY3QgPSBpOTE1X2dlbV9pbml0X29iamVjdCwKIAkuZ2VtX2ZyZWVfb2JqZWN0ID0gaTkxNV9nZW1fZnJlZV9vYmplY3QsCiAJLmdlbV92bV9vcHMgPSAmaTkxNV9nZW1fdm1fb3BzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggZDZjYzk4Ni4uYzE2ODVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC00MDQsNyArNDA0LDggQEAKIAkvKiogQUdQIG1lbW9yeSBzdHJ1Y3R1cmUgZm9yIG91ciBHVFQgYmluZGluZy4gKi8KIAlEUk1fQUdQX01FTSAqYWdwX21lbTsKIAotCXN0cnVjdCBwYWdlICoqcGFnZV9saXN0OworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJaW50IHBhZ2VzX3JlZmNvdW50OwogCiAJLyoqCiAJICogQ3VycmVudCBvZmZzZXQgb2YgdGhlIG9iamVjdCBpbiBHVFQgc3BhY2UuCkBAIC01MTksNyArNTIwLDcgQEAKIGV4dGVybiBsb25nIGk5MTVfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcpOwogZXh0ZXJuIGludCBpOTE1X2VtaXRfYm94KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkgc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpib3hlcywKKwkJCSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqYm94ZXMsCiAJCQkgaW50IGksIGludCBEUjEsIGludCBEUjQpOwogCiAvKiBpOTE1X2lycS5jICovCkBAIC02MDQsOCArNjA1LDYgQEAKIGludCBpOTE1X2dlbV9nZXRfYXBlcnR1cmVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiB2b2lkIGk5MTVfZ2VtX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1pbnQgaTkxNV9nZW1fcHJvY19pbml0KHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKLXZvaWQgaTkxNV9nZW1fcHJvY19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKIGludCBpOTE1X2dlbV9pbml0X29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CiB2b2lkIGk5MTVfZ2VtX2ZyZWVfb2JqZWN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIGludCBpOTE1X2dlbV9vYmplY3RfcGluKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLCB1aW50MzJfdCBhbGlnbm1lbnQpOwpAQCAtNjQ5LDYgKzY0OCwxMCBAQAogCQkJICBjb25zdCBjaGFyICp3aGVyZSwgdWludDMyX3QgbWFyayk7CiB2b2lkIGk5MTVfZHVtcF9scnUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqd2hlcmUpOwogCisvKiBpOTE1X2RlYnVnZnMuYyAqLworaW50IGk5MTVfZ2VtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7Cit2b2lkIGk5MTVfZ2VtX2RlYnVnZnNfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CisKIC8qIGk5MTVfc3VzcGVuZC5jICovCiBleHRlcm4gaW50IGk5MTVfc2F2ZV9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgaTkxNV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwpAQCAtNzg0LDE1ICs3ODcsMjEgQEAKIAkJICAgICAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMjIgfHwgXAogCQkgICAgIElTX0dNNDUoZGV2KSkKIAorI2RlZmluZSBJU19JR0RHKGRldikgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4YTAwMSkKKyNkZWZpbmUgSVNfSUdER00oZGV2KSAoKGRldiktPnBjaV9kZXZpY2UgPT0gMHhhMDExKQorI2RlZmluZSBJU19JR0QoZGV2KSAoSVNfSUdERyhkZXYpIHx8IElTX0lHREdNKGRldikpCisKICNkZWZpbmUgSVNfRzMzKGRldikgICAgKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjlDMiB8fAlcCiAJCQkoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5QjIgfHwJXAotCQkJKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOUQyKQorCQkJKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyOUQyIHx8ICBcCisJCQkoSVNfSUdEKGRldikpKQogCiAjZGVmaW5lIElTX0k5WFgoZGV2KSAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSB8fCBJU19JOTQ1RyhkZXYpIHx8IFwKIAkJICAgICAgSVNfSTk0NUdNKGRldikgfHwgSVNfSTk2NUcoZGV2KSB8fCBJU19HMzMoZGV2KSkKIAogI2RlZmluZSBJU19NT0JJTEUoZGV2KSAoSVNfSTgzMChkZXYpIHx8IElTX0k4NVgoZGV2KSB8fCBJU19JOTE1R00oZGV2KSB8fCBcCi0JCQlJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikpCisJCQlJU19JOTQ1R00oZGV2KSB8fCBJU19JOTY1R00oZGV2KSB8fCBJU19HTTQ1KGRldikgfHwgXAorCQkJSVNfSUdEKGRldikpCiAKICNkZWZpbmUgSTkxNV9ORUVEX0dGWF9IV1MoZGV2KSAoSVNfRzMzKGRldikgfHwgSVNfR000NShkZXYpIHx8IElTX0c0WChkZXYpKQogLyogV2l0aCB0aGUgOTQ1IGFuZCBsYXRlciwgWSB0aWxpbmcgZ290IGFkanVzdGVkIHNvIHRoYXQgaXQgd2FzIDMyIDEyOC1ieXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwppbmRleCAzNzQyN2U0Li5iNTJjYmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKQEAgLTQzLDggKzQzLDggQEAKIAkJCQkJCSAgICAgdWludDY0X3Qgb2Zmc2V0LAogCQkJCQkJICAgICB1aW50NjRfdCBzaXplKTsKIHN0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZnVsbF9jcHVfcmVhZF9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwotc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7Ci1zdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfYmluZF90b19ndHQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCiAJCQkJCSAgIHVuc2lnbmVkIGFsaWdubWVudCk7CkBAIC0xMzYsNiArMTM2LDIyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludAorZmFzdF9zaG1lbV9yZWFkKHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCWxvZmZfdCBwYWdlX2Jhc2UsIGludCBwYWdlX29mZnNldCwKKwkJY2hhciBfX3VzZXIgKmRhdGEsCisJCWludCBsZW5ndGgpCit7CisJY2hhciBfX2lvbWVtICp2YWRkcjsKKwlpbnQgcmV0OworCisJdmFkZHIgPSBrbWFwX2F0b21pYyhwYWdlc1twYWdlX2Jhc2UgPj4gUEFHRV9TSElGVF0sIEtNX1VTRVIwKTsKKwlpZiAodmFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gX19jb3B5X3RvX3VzZXJfaW5hdG9taWMoZGF0YSwgdmFkZHIgKyBwYWdlX29mZnNldCwgbGVuZ3RoKTsKKwlrdW5tYXBfYXRvbWljKHZhZGRyLCBLTV9VU0VSMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludAorc2xvd19zaG1lbV9jb3B5KHN0cnVjdCBwYWdlICpkc3RfcGFnZSwKKwkJaW50IGRzdF9vZmZzZXQsCisJCXN0cnVjdCBwYWdlICpzcmNfcGFnZSwKKwkJaW50IHNyY19vZmZzZXQsCisJCWludCBsZW5ndGgpCit7CisJY2hhciAqZHN0X3ZhZGRyLCAqc3JjX3ZhZGRyOworCisJZHN0X3ZhZGRyID0ga21hcF9hdG9taWMoZHN0X3BhZ2UsIEtNX1VTRVIwKTsKKwlpZiAoZHN0X3ZhZGRyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3JjX3ZhZGRyID0ga21hcF9hdG9taWMoc3JjX3BhZ2UsIEtNX1VTRVIxKTsKKwlpZiAoc3JjX3ZhZGRyID09IE5VTEwpIHsKKwkJa3VubWFwX2F0b21pYyhkc3RfdmFkZHIsIEtNX1VTRVIwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5KGRzdF92YWRkciArIGRzdF9vZmZzZXQsIHNyY192YWRkciArIHNyY19vZmZzZXQsIGxlbmd0aCk7CisKKwlrdW5tYXBfYXRvbWljKHNyY192YWRkciwgS01fVVNFUjEpOworCWt1bm1hcF9hdG9taWMoZHN0X3ZhZGRyLCBLTV9VU0VSMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYXN0IHNobWVtIHByZWFkIHBhdGgsIHdoaWNoIGF0dGVtcHRzIHRvIGNvcHlfZnJvbV91c2VyIGRpcmVjdGx5CisgKiBmcm9tIHRoZSBiYWNraW5nIHBhZ2VzIG9mIHRoZSBvYmplY3QgdG8gdGhlIHVzZXIncyBhZGRyZXNzIHNwYWNlLiAgT24gYQorICogZmF1bHQsIGl0IGZhaWxzIHNvIHdlIGNhbiBmYWxsIGJhY2sgdG8gaTkxNV9nZW1fc2htZW1fcHdyaXRlX3Nsb3coKS4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fc2htZW1fcHJlYWRfZmFzdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCSAgc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCAqYXJncywKKwkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlzc2l6ZV90IHJlbWFpbjsKKwlsb2ZmX3Qgb2Zmc2V0LCBwYWdlX2Jhc2U7CisJY2hhciBfX3VzZXIgKnVzZXJfZGF0YTsKKwlpbnQgcGFnZV9vZmZzZXQsIHBhZ2VfbGVuZ3RoOworCWludCByZXQ7CisKKwl1c2VyX2RhdGEgPSAoY2hhciBfX3VzZXIgKikgKHVpbnRwdHJfdCkgYXJncy0+ZGF0YV9wdHI7CisJcmVtYWluID0gYXJncy0+c2l6ZTsKKworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbF91bmxvY2s7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X2NwdV9yZWFkX2RvbWFpbl9yYW5nZShvYmosIGFyZ3MtPm9mZnNldCwKKwkJCQkJCQlhcmdzLT5zaXplKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gZmFpbF9wdXRfcGFnZXM7CisKKwlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJb2Zmc2V0ID0gYXJncy0+b2Zmc2V0OworCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQorCQkgKgorCQkgKiBwYWdlX2Jhc2UgPSBwYWdlIG9mZnNldCB3aXRoaW4gYXBlcnR1cmUKKwkJICogcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UKKwkJICogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKKwkJICovCisJCXBhZ2VfYmFzZSA9IChvZmZzZXQgJiB+KFBBR0VfU0laRS0xKSk7CisJCXBhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgKFBBR0VfU0laRS0xKTsKKwkJcGFnZV9sZW5ndGggPSByZW1haW47CisJCWlmICgocGFnZV9vZmZzZXQgKyByZW1haW4pID4gUEFHRV9TSVpFKQorCQkJcGFnZV9sZW5ndGggPSBQQUdFX1NJWkUgLSBwYWdlX29mZnNldDsKKworCQlyZXQgPSBmYXN0X3NobWVtX3JlYWQob2JqX3ByaXYtPnBhZ2VzLAorCQkJCSAgICAgIHBhZ2VfYmFzZSwgcGFnZV9vZmZzZXQsCisJCQkJICAgICAgdXNlcl9kYXRhLCBwYWdlX2xlbmd0aCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxfcHV0X3BhZ2VzOworCisJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKKwkJdXNlcl9kYXRhICs9IHBhZ2VfbGVuZ3RoOworCQlvZmZzZXQgKz0gcGFnZV9sZW5ndGg7CisJfQorCitmYWlsX3B1dF9wYWdlczoKKwlpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7CitmYWlsX3VubG9jazoKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogVGhpcyBpcyB0aGUgZmFsbGJhY2sgc2htZW0gcHJlYWQgcGF0aCwgd2hpY2ggYWxsb2NhdGVzIHRlbXBvcmFyeSBzdG9yYWdlCisgKiBpbiBrZXJuZWwgc3BhY2UgdG8gY29weV90b191c2VyIGludG8gb3V0c2lkZSBvZiB0aGUgc3RydWN0X211dGV4LCBzbyB3ZQorICogY2FuIGNvcHkgb3V0IG9mIHRoZSBvYmplY3QncyBiYWNraW5nIHBhZ2VzIHdoaWxlIGhvbGRpbmcgdGhlIHN0cnVjdCBtdXRleAorICogYW5kIG5vdCB0YWtlIHBhZ2UgZmF1bHRzLgorICovCitzdGF0aWMgaW50CitpOTE1X2dlbV9zaG1lbV9wcmVhZF9zbG93KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkICphcmdzLAorCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJc3RydWN0IHBhZ2UgKip1c2VyX3BhZ2VzOworCXNzaXplX3QgcmVtYWluOworCWxvZmZfdCBvZmZzZXQsIHBpbm5lZF9wYWdlcywgaTsKKwlsb2ZmX3QgZmlyc3RfZGF0YV9wYWdlLCBsYXN0X2RhdGFfcGFnZSwgbnVtX3BhZ2VzOworCWludCBzaG1lbV9wYWdlX2luZGV4LCBzaG1lbV9wYWdlX29mZnNldDsKKwlpbnQgZGF0YV9wYWdlX2luZGV4LCAgZGF0YV9wYWdlX29mZnNldDsKKwlpbnQgcGFnZV9sZW5ndGg7CisJaW50IHJldDsKKwl1aW50NjRfdCBkYXRhX3B0ciA9IGFyZ3MtPmRhdGFfcHRyOworCisJcmVtYWluID0gYXJncy0+c2l6ZTsKKworCS8qIFBpbiB0aGUgdXNlciBwYWdlcyBjb250YWluaW5nIHRoZSBkYXRhLiAgV2UgY2FuJ3QgZmF1bHQgd2hpbGUKKwkgKiBob2xkaW5nIHRoZSBzdHJ1Y3QgbXV0ZXgsIHlldCB3ZSB3YW50IHRvIGhvbGQgaXQgd2hpbGUKKwkgKiBkZXJlZmVyZW5jaW5nIHRoZSB1c2VyIGRhdGEuCisJICovCisJZmlyc3RfZGF0YV9wYWdlID0gZGF0YV9wdHIgLyBQQUdFX1NJWkU7CisJbGFzdF9kYXRhX3BhZ2UgPSAoZGF0YV9wdHIgKyBhcmdzLT5zaXplIC0gMSkgLyBQQUdFX1NJWkU7CisJbnVtX3BhZ2VzID0gbGFzdF9kYXRhX3BhZ2UgLSBmaXJzdF9kYXRhX3BhZ2UgKyAxOworCisJdXNlcl9wYWdlcyA9IGtjYWxsb2MobnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICh1c2VyX3BhZ2VzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXBpbm5lZF9wYWdlcyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCAodWludHB0cl90KWFyZ3MtPmRhdGFfcHRyLAorCQkJCSAgICAgIG51bV9wYWdlcywgMCwgMCwgdXNlcl9wYWdlcywgTlVMTCk7CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlpZiAocGlubmVkX3BhZ2VzIDwgbnVtX3BhZ2VzKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZmFpbF9wdXRfdXNlcl9wYWdlczsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWxfdW5sb2NrOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF9jcHVfcmVhZF9kb21haW5fcmFuZ2Uob2JqLCBhcmdzLT5vZmZzZXQsCisJCQkJCQkJYXJncy0+c2l6ZSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWxfcHV0X3BhZ2VzOworCisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKworCXdoaWxlIChyZW1haW4gPiAwKSB7CisJCS8qIE9wZXJhdGlvbiBpbiB0aGlzIHBhZ2UKKwkJICoKKwkJICogc2htZW1fcGFnZV9pbmRleCA9IHBhZ2UgbnVtYmVyIHdpdGhpbiBzaG1lbSBmaWxlCisJCSAqIHNobWVtX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0IHdpdGhpbiBwYWdlIGluIHNobWVtIGZpbGUKKwkJICogZGF0YV9wYWdlX2luZGV4ID0gcGFnZSBudW1iZXIgaW4gZ2V0X3VzZXJfcGFnZXMgcmV0dXJuCisJCSAqIGRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aCBkYXRhX3BhZ2VfaW5kZXggcGFnZS4KKwkJICogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKKwkJICovCisJCXNobWVtX3BhZ2VfaW5kZXggPSBvZmZzZXQgLyBQQUdFX1NJWkU7CisJCXNobWVtX3BhZ2Vfb2Zmc2V0ID0gb2Zmc2V0ICYgflBBR0VfTUFTSzsKKwkJZGF0YV9wYWdlX2luZGV4ID0gZGF0YV9wdHIgLyBQQUdFX1NJWkUgLSBmaXJzdF9kYXRhX3BhZ2U7CisJCWRhdGFfcGFnZV9vZmZzZXQgPSBkYXRhX3B0ciAmIH5QQUdFX01BU0s7CisKKwkJcGFnZV9sZW5ndGggPSByZW1haW47CisJCWlmICgoc2htZW1fcGFnZV9vZmZzZXQgKyBwYWdlX2xlbmd0aCkgPiBQQUdFX1NJWkUpCisJCQlwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIHNobWVtX3BhZ2Vfb2Zmc2V0OworCQlpZiAoKGRhdGFfcGFnZV9vZmZzZXQgKyBwYWdlX2xlbmd0aCkgPiBQQUdFX1NJWkUpCisJCQlwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIGRhdGFfcGFnZV9vZmZzZXQ7CisKKwkJcmV0ID0gc2xvd19zaG1lbV9jb3B5KHVzZXJfcGFnZXNbZGF0YV9wYWdlX2luZGV4XSwKKwkJCQkgICAgICBkYXRhX3BhZ2Vfb2Zmc2V0LAorCQkJCSAgICAgIG9ial9wcml2LT5wYWdlc1tzaG1lbV9wYWdlX2luZGV4XSwKKwkJCQkgICAgICBzaG1lbV9wYWdlX29mZnNldCwKKwkJCQkgICAgICBwYWdlX2xlbmd0aCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxfcHV0X3BhZ2VzOworCisJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKKwkJZGF0YV9wdHIgKz0gcGFnZV9sZW5ndGg7CisJCW9mZnNldCArPSBwYWdlX2xlbmd0aDsKKwl9CisKK2ZhaWxfcHV0X3BhZ2VzOgorCWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsKK2ZhaWxfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworZmFpbF9wdXRfdXNlcl9wYWdlczoKKwlmb3IgKGkgPSAwOyBpIDwgcGlubmVkX3BhZ2VzOyBpKyspIHsKKwkJU2V0UGFnZURpcnR5KHVzZXJfcGFnZXNbaV0pOworCQlwYWdlX2NhY2hlX3JlbGVhc2UodXNlcl9wYWdlc1tpXSk7CisJfQorCWtmcmVlKHVzZXJfcGFnZXMpOworCisJcmV0dXJuIHJldDsKK30KKwogLyoqCiAgKiBSZWFkcyBkYXRhIGZyb20gdGhlIG9iamVjdCByZWZlcmVuY2VkIGJ5IGhhbmRsZS4KICAqCkBAIC0xNDgsOCArMzY2LDYgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3ByZWFkICphcmdzID0gZGF0YTsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7Ci0Jc3NpemVfdCByZWFkOwotCWxvZmZfdCBvZmZzZXQ7CiAJaW50IHJldDsKIAogCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgYXJncy0+aGFuZGxlKTsKQEAgLTE2NywzMyArMzgzLDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQotCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfY3B1X3JlYWRfZG9tYWluX3JhbmdlKG9iaiwgYXJncy0+b2Zmc2V0LAotCQkJCQkJCWFyZ3MtPnNpemUpOwotCWlmIChyZXQgIT0gMCkgewotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlvZmZzZXQgPSBhcmdzLT5vZmZzZXQ7Ci0KLQlyZWFkID0gdmZzX3JlYWQob2JqLT5maWxwLCAoY2hhciBfX3VzZXIgKikodWludHB0cl90KWFyZ3MtPmRhdGFfcHRyLAotCQkJYXJncy0+c2l6ZSwgJm9mZnNldCk7Ci0JaWYgKHJlYWQgIT0gYXJncy0+c2l6ZSkgewotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJaWYgKHJlYWQgPCAwKQotCQkJcmV0dXJuIHJlYWQ7Ci0JCWVsc2UKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KKwlyZXQgPSBpOTE1X2dlbV9zaG1lbV9wcmVhZF9mYXN0KGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHJlYWRfc2xvdyhkZXYsIG9iaiwgYXJncywgZmlsZV9wcml2KTsKIAogCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKiBUaGlzIGlzIHRoZSBmYXN0IHdyaXRlIHBhdGggd2hpY2ggY2Fubm90IGhhbmRsZQpAQCAtMjIzLDI5ICs0MTksNTEgQEAKICAqLwogCiBzdGF0aWMgaW5saW5lIGludAotc2xvd191c2VyX3dyaXRlKHN0cnVjdCBpb19tYXBwaW5nICptYXBwaW5nLAotCQlsb2ZmX3QgcGFnZV9iYXNlLCBpbnQgcGFnZV9vZmZzZXQsCi0JCWNoYXIgX191c2VyICp1c2VyX2RhdGEsCi0JCWludCBsZW5ndGgpCitzbG93X2tlcm5lbF93cml0ZShzdHJ1Y3QgaW9fbWFwcGluZyAqbWFwcGluZywKKwkJICBsb2ZmX3QgZ3R0X2Jhc2UsIGludCBndHRfb2Zmc2V0LAorCQkgIHN0cnVjdCBwYWdlICp1c2VyX3BhZ2UsIGludCB1c2VyX29mZnNldCwKKwkJICBpbnQgbGVuZ3RoKQogewotCWNoYXIgX19pb21lbSAqdmFkZHI7CisJY2hhciAqc3JjX3ZhZGRyLCAqZHN0X3ZhZGRyOwogCXVuc2lnbmVkIGxvbmcgdW53cml0dGVuOwogCi0JdmFkZHIgPSBpb19tYXBwaW5nX21hcF93YyhtYXBwaW5nLCBwYWdlX2Jhc2UpOwotCWlmICh2YWRkciA9PSBOVUxMKQotCQlyZXR1cm4gLUVGQVVMVDsKLQl1bndyaXR0ZW4gPSBfX2NvcHlfZnJvbV91c2VyKHZhZGRyICsgcGFnZV9vZmZzZXQsCi0JCQkJICAgICB1c2VyX2RhdGEsIGxlbmd0aCk7Ci0JaW9fbWFwcGluZ191bm1hcCh2YWRkcik7CisJZHN0X3ZhZGRyID0gaW9fbWFwcGluZ19tYXBfYXRvbWljX3djKG1hcHBpbmcsIGd0dF9iYXNlKTsKKwlzcmNfdmFkZHIgPSBrbWFwX2F0b21pYyh1c2VyX3BhZ2UsIEtNX1VTRVIxKTsKKwl1bndyaXR0ZW4gPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljX25vY2FjaGUoZHN0X3ZhZGRyICsgZ3R0X29mZnNldCwKKwkJCQkJCSAgICAgIHNyY192YWRkciArIHVzZXJfb2Zmc2V0LAorCQkJCQkJICAgICAgbGVuZ3RoKTsKKwlrdW5tYXBfYXRvbWljKHNyY192YWRkciwgS01fVVNFUjEpOworCWlvX21hcHBpbmdfdW5tYXBfYXRvbWljKGRzdF92YWRkcik7CiAJaWYgKHVud3JpdHRlbikKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50CitmYXN0X3NobWVtX3dyaXRlKHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCSBsb2ZmX3QgcGFnZV9iYXNlLCBpbnQgcGFnZV9vZmZzZXQsCisJCSBjaGFyIF9fdXNlciAqZGF0YSwKKwkJIGludCBsZW5ndGgpCit7CisJY2hhciBfX2lvbWVtICp2YWRkcjsKKworCXZhZGRyID0ga21hcF9hdG9taWMocGFnZXNbcGFnZV9iYXNlID4+IFBBR0VfU0hJRlRdLCBLTV9VU0VSMCk7CisJaWYgKHZhZGRyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCV9fY29weV9mcm9tX3VzZXJfaW5hdG9taWModmFkZHIgKyBwYWdlX29mZnNldCwgZGF0YSwgbGVuZ3RoKTsKKwlrdW5tYXBfYXRvbWljKHZhZGRyLCBLTV9VU0VSMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYXN0IHB3cml0ZSBwYXRoLCB3aGVyZSB3ZSBjb3B5IHRoZSBkYXRhIGRpcmVjdGx5IGZyb20gdGhlCisgKiB1c2VyIGludG8gdGhlIEdUVCwgdW5jYWNoZWQuCisgKi8KIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX2d0dF9wd3JpdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKLQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoraTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAorCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yNzMsNyArNDkxLDYgQEAKIAogCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlvZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldCArIGFyZ3MtPm9mZnNldDsKLQlvYmpfcHJpdi0+ZGlydHkgPSAxOwogCiAJd2hpbGUgKHJlbWFpbiA+IDApIHsKIAkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQpAQCAtMjkyLDE2ICs1MDksMTEgQEAKIAkJCQkgICAgICAgcGFnZV9vZmZzZXQsIHVzZXJfZGF0YSwgcGFnZV9sZW5ndGgpOwogCiAJCS8qIElmIHdlIGdldCBhIGZhdWx0IHdoaWxlIGNvcHlpbmcgZGF0YSwgdGhlbiAocHJlc3VtYWJseSkgb3VyCi0JCSAqIHNvdXJjZSBwYWdlIGlzbid0IGF2YWlsYWJsZS4gSW4gdGhpcyBjYXNlLCB1c2UgdGhlCi0JCSAqIG5vbi1hdG9taWMgZnVuY3Rpb24KKwkJICogc291cmNlIHBhZ2UgaXNuJ3QgYXZhaWxhYmxlLiAgUmV0dXJuIHRoZSBlcnJvciBhbmQgd2UnbGwKKwkJICogcmV0cnkgaW4gdGhlIHNsb3cgcGF0aC4KIAkJICovCi0JCWlmIChyZXQpIHsKLQkJCXJldCA9IHNsb3dfdXNlcl93cml0ZSAoZGV2X3ByaXYtPm1tLmd0dF9tYXBwaW5nLAotCQkJCQkgICAgICAgcGFnZV9iYXNlLCBwYWdlX29mZnNldCwKLQkJCQkJICAgICAgIHVzZXJfZGF0YSwgcGFnZV9sZW5ndGgpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGZhaWw7Ci0JCX0KKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbDsKIAogCQlyZW1haW4gLT0gcGFnZV9sZW5ndGg7CiAJCXVzZXJfZGF0YSArPSBwYWdlX2xlbmd0aDsKQEAgLTMxNSwzOSArNTI3LDI4NCBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogVGhpcyBpcyB0aGUgZmFsbGJhY2sgR1RUIHB3cml0ZSBwYXRoLCB3aGljaCB1c2VzIGdldF91c2VyX3BhZ2VzIHRvIHBpbgorICogdGhlIG1lbW9yeSBhbmQgbWFwcyBpdCB1c2luZyBrbWFwX2F0b21pYyBmb3IgY29weWluZy4KKyAqCisgKiBUaGlzIGNvZGUgcmVzdWx0ZWQgaW4geDExcGVyZiAtcmdiMTB0ZXh0IGNvbnN1bWluZyBhYm91dCAxMCUgbW9yZSBDUFUKKyAqIHRoYW4gdXNpbmcgaTkxNV9nZW1fZ3R0X3B3cml0ZV9mYXN0IG9uIGEgRzQ1ICgzMi1iaXQpLgorICovCiBzdGF0aWMgaW50Ci1pOTE1X2dlbV9zaG1lbV9wd3JpdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCi0JCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcHdyaXRlICphcmdzLAotCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK2k5MTVfZ2VtX2d0dF9wd3JpdGVfc2xvdyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwKKwkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKKwkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXNzaXplX3QgcmVtYWluOworCWxvZmZfdCBndHRfcGFnZV9iYXNlLCBvZmZzZXQ7CisJbG9mZl90IGZpcnN0X2RhdGFfcGFnZSwgbGFzdF9kYXRhX3BhZ2UsIG51bV9wYWdlczsKKwlsb2ZmX3QgcGlubmVkX3BhZ2VzLCBpOworCXN0cnVjdCBwYWdlICoqdXNlcl9wYWdlczsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCWludCBndHRfcGFnZV9vZmZzZXQsIGRhdGFfcGFnZV9vZmZzZXQsIGRhdGFfcGFnZV9pbmRleCwgcGFnZV9sZW5ndGg7CiAJaW50IHJldDsKLQlsb2ZmX3Qgb2Zmc2V0OwotCXNzaXplX3Qgd3JpdHRlbjsKKwl1aW50NjRfdCBkYXRhX3B0ciA9IGFyZ3MtPmRhdGFfcHRyOworCisJcmVtYWluID0gYXJncy0+c2l6ZTsKKworCS8qIFBpbiB0aGUgdXNlciBwYWdlcyBjb250YWluaW5nIHRoZSBkYXRhLiAgV2UgY2FuJ3QgZmF1bHQgd2hpbGUKKwkgKiBob2xkaW5nIHRoZSBzdHJ1Y3QgbXV0ZXgsIGFuZCBhbGwgb2YgdGhlIHB3cml0ZSBpbXBsZW1lbnRhdGlvbnMKKwkgKiB3YW50IHRvIGhvbGQgaXQgd2hpbGUgZGVyZWZlcmVuY2luZyB0aGUgdXNlciBkYXRhLgorCSAqLworCWZpcnN0X2RhdGFfcGFnZSA9IGRhdGFfcHRyIC8gUEFHRV9TSVpFOworCWxhc3RfZGF0YV9wYWdlID0gKGRhdGFfcHRyICsgYXJncy0+c2l6ZSAtIDEpIC8gUEFHRV9TSVpFOworCW51bV9wYWdlcyA9IGxhc3RfZGF0YV9wYWdlIC0gZmlyc3RfZGF0YV9wYWdlICsgMTsKKworCXVzZXJfcGFnZXMgPSBrY2FsbG9jKG51bV9wYWdlcywgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlpZiAodXNlcl9wYWdlcyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlwaW5uZWRfcGFnZXMgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBtbSwgKHVpbnRwdHJfdClhcmdzLT5kYXRhX3B0ciwKKwkJCQkgICAgICBudW1fcGFnZXMsIDAsIDAsIHVzZXJfcGFnZXMsIE5VTEwpOworCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJaWYgKHBpbm5lZF9wYWdlcyA8IG51bV9wYWdlcykgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dF91bnBpbl9wYWdlczsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3BpbihvYmosIDApOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZ3R0X2RvbWFpbihvYmosIDEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VucGluX29iamVjdDsKKworCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwlvZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldCArIGFyZ3MtPm9mZnNldDsKKworCXdoaWxlIChyZW1haW4gPiAwKSB7CisJCS8qIE9wZXJhdGlvbiBpbiB0aGlzIHBhZ2UKKwkJICoKKwkJICogZ3R0X3BhZ2VfYmFzZSA9IHBhZ2Ugb2Zmc2V0IHdpdGhpbiBhcGVydHVyZQorCQkgKiBndHRfcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UgaW4gYXBlcnR1cmUKKwkJICogZGF0YV9wYWdlX2luZGV4ID0gcGFnZSBudW1iZXIgaW4gZ2V0X3VzZXJfcGFnZXMgcmV0dXJuCisJCSAqIGRhdGFfcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aCBkYXRhX3BhZ2VfaW5kZXggcGFnZS4KKwkJICogcGFnZV9sZW5ndGggPSBieXRlcyB0byBjb3B5IGZvciB0aGlzIHBhZ2UKKwkJICovCisJCWd0dF9wYWdlX2Jhc2UgPSBvZmZzZXQgJiBQQUdFX01BU0s7CisJCWd0dF9wYWdlX29mZnNldCA9IG9mZnNldCAmIH5QQUdFX01BU0s7CisJCWRhdGFfcGFnZV9pbmRleCA9IGRhdGFfcHRyIC8gUEFHRV9TSVpFIC0gZmlyc3RfZGF0YV9wYWdlOworCQlkYXRhX3BhZ2Vfb2Zmc2V0ID0gZGF0YV9wdHIgJiB+UEFHRV9NQVNLOworCisJCXBhZ2VfbGVuZ3RoID0gcmVtYWluOworCQlpZiAoKGd0dF9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gZ3R0X3BhZ2Vfb2Zmc2V0OworCQlpZiAoKGRhdGFfcGFnZV9vZmZzZXQgKyBwYWdlX2xlbmd0aCkgPiBQQUdFX1NJWkUpCisJCQlwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIGRhdGFfcGFnZV9vZmZzZXQ7CisKKwkJcmV0ID0gc2xvd19rZXJuZWxfd3JpdGUoZGV2X3ByaXYtPm1tLmd0dF9tYXBwaW5nLAorCQkJCQlndHRfcGFnZV9iYXNlLCBndHRfcGFnZV9vZmZzZXQsCisJCQkJCXVzZXJfcGFnZXNbZGF0YV9wYWdlX2luZGV4XSwKKwkJCQkJZGF0YV9wYWdlX29mZnNldCwKKwkJCQkJcGFnZV9sZW5ndGgpOworCisJCS8qIElmIHdlIGdldCBhIGZhdWx0IHdoaWxlIGNvcHlpbmcgZGF0YSwgdGhlbiAocHJlc3VtYWJseSkgb3VyCisJCSAqIHNvdXJjZSBwYWdlIGlzbid0IGF2YWlsYWJsZS4gIFJldHVybiB0aGUgZXJyb3IgYW5kIHdlJ2xsCisJCSAqIHJldHJ5IGluIHRoZSBzbG93IHBhdGguCisJCSAqLworCQlpZiAocmV0KQorCQkJZ290byBvdXRfdW5waW5fb2JqZWN0OworCisJCXJlbWFpbiAtPSBwYWdlX2xlbmd0aDsKKwkJb2Zmc2V0ICs9IHBhZ2VfbGVuZ3RoOworCQlkYXRhX3B0ciArPSBwYWdlX2xlbmd0aDsKKwl9CisKK291dF91bnBpbl9vYmplY3Q6CisJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworb3V0X3VucGluX3BhZ2VzOgorCWZvciAoaSA9IDA7IGkgPCBwaW5uZWRfcGFnZXM7IGkrKykKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHVzZXJfcGFnZXNbaV0pOworCWtmcmVlKHVzZXJfcGFnZXMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYXN0IHNobWVtIHB3cml0ZSBwYXRoLCB3aGljaCBhdHRlbXB0cyB0byBkaXJlY3RseQorICogY29weV9mcm9tX3VzZXIgaW50byB0aGUga21hcHBlZCBwYWdlcyBiYWNraW5nIHRoZSBvYmplY3QuCisgKi8KK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3NobWVtX3B3cml0ZV9mYXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJICAgc3RydWN0IGRybV9pOTE1X2dlbV9wd3JpdGUgKmFyZ3MsCisJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCXNzaXplX3QgcmVtYWluOworCWxvZmZfdCBvZmZzZXQsIHBhZ2VfYmFzZTsKKwljaGFyIF9fdXNlciAqdXNlcl9kYXRhOworCWludCBwYWdlX29mZnNldCwgcGFnZV9sZW5ndGg7CisJaW50IHJldDsKKworCXVzZXJfZGF0YSA9IChjaGFyIF9fdXNlciAqKSAodWludHB0cl90KSBhcmdzLT5kYXRhX3B0cjsKKwlyZW1haW4gPSBhcmdzLT5zaXplOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBmYWlsX3VubG9jazsKKwogCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihvYmosIDEpOwotCWlmIChyZXQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWlmIChyZXQgIT0gMCkKKwkJZ290byBmYWlsX3B1dF9wYWdlczsKIAorCW9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlvZmZzZXQgPSBhcmdzLT5vZmZzZXQ7CisJb2JqX3ByaXYtPmRpcnR5ID0gMTsKIAotCXdyaXR0ZW4gPSB2ZnNfd3JpdGUob2JqLT5maWxwLAotCQkJICAgIChjaGFyIF9fdXNlciAqKSh1aW50cHRyX3QpIGFyZ3MtPmRhdGFfcHRyLAotCQkJICAgIGFyZ3MtPnNpemUsICZvZmZzZXQpOwotCWlmICh3cml0dGVuICE9IGFyZ3MtPnNpemUpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWlmICh3cml0dGVuIDwgMCkKLQkJCXJldHVybiB3cml0dGVuOwotCQllbHNlCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwl3aGlsZSAocmVtYWluID4gMCkgeworCQkvKiBPcGVyYXRpb24gaW4gdGhpcyBwYWdlCisJCSAqCisJCSAqIHBhZ2VfYmFzZSA9IHBhZ2Ugb2Zmc2V0IHdpdGhpbiBhcGVydHVyZQorCQkgKiBwYWdlX29mZnNldCA9IG9mZnNldCB3aXRoaW4gcGFnZQorCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQorCQkgKi8KKwkJcGFnZV9iYXNlID0gKG9mZnNldCAmIH4oUEFHRV9TSVpFLTEpKTsKKwkJcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiAoUEFHRV9TSVpFLTEpOworCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKKwkJaWYgKChwYWdlX29mZnNldCArIHJlbWFpbikgPiBQQUdFX1NJWkUpCisJCQlwYWdlX2xlbmd0aCA9IFBBR0VfU0laRSAtIHBhZ2Vfb2Zmc2V0OworCisJCXJldCA9IGZhc3Rfc2htZW1fd3JpdGUob2JqX3ByaXYtPnBhZ2VzLAorCQkJCSAgICAgICBwYWdlX2Jhc2UsIHBhZ2Vfb2Zmc2V0LAorCQkJCSAgICAgICB1c2VyX2RhdGEsIHBhZ2VfbGVuZ3RoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbF9wdXRfcGFnZXM7CisKKwkJcmVtYWluIC09IHBhZ2VfbGVuZ3RoOworCQl1c2VyX2RhdGEgKz0gcGFnZV9sZW5ndGg7CisJCW9mZnNldCArPSBwYWdlX2xlbmd0aDsKIAl9CiAKK2ZhaWxfcHV0X3BhZ2VzOgorCWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsKK2ZhaWxfdW5sb2NrOgogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBUaGlzIGlzIHRoZSBmYWxsYmFjayBzaG1lbSBwd3JpdGUgcGF0aCwgd2hpY2ggdXNlcyBnZXRfdXNlcl9wYWdlcyB0byBwaW4KKyAqIHRoZSBtZW1vcnkgYW5kIG1hcHMgaXQgdXNpbmcga21hcF9hdG9taWMgZm9yIGNvcHlpbmcuCisgKgorICogVGhpcyBhdm9pZHMgdGFraW5nIG1tYXBfc2VtIGZvciBmYXVsdGluZyBvbiB0aGUgdXNlcidzIGFkZHJlc3Mgd2hpbGUgdGhlCisgKiBzdHJ1Y3RfbXV0ZXggaXMgaGVsZC4KKyAqLworc3RhdGljIGludAoraTkxNV9nZW1fc2htZW1fcHdyaXRlX3Nsb3coc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosCisJCQkgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSAqYXJncywKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3QgcGFnZSAqKnVzZXJfcGFnZXM7CisJc3NpemVfdCByZW1haW47CisJbG9mZl90IG9mZnNldCwgcGlubmVkX3BhZ2VzLCBpOworCWxvZmZfdCBmaXJzdF9kYXRhX3BhZ2UsIGxhc3RfZGF0YV9wYWdlLCBudW1fcGFnZXM7CisJaW50IHNobWVtX3BhZ2VfaW5kZXgsIHNobWVtX3BhZ2Vfb2Zmc2V0OworCWludCBkYXRhX3BhZ2VfaW5kZXgsICBkYXRhX3BhZ2Vfb2Zmc2V0OworCWludCBwYWdlX2xlbmd0aDsKKwlpbnQgcmV0OworCXVpbnQ2NF90IGRhdGFfcHRyID0gYXJncy0+ZGF0YV9wdHI7CisKKwlyZW1haW4gPSBhcmdzLT5zaXplOworCisJLyogUGluIHRoZSB1c2VyIHBhZ2VzIGNvbnRhaW5pbmcgdGhlIGRhdGEuICBXZSBjYW4ndCBmYXVsdCB3aGlsZQorCSAqIGhvbGRpbmcgdGhlIHN0cnVjdCBtdXRleCwgYW5kIGFsbCBvZiB0aGUgcHdyaXRlIGltcGxlbWVudGF0aW9ucworCSAqIHdhbnQgdG8gaG9sZCBpdCB3aGlsZSBkZXJlZmVyZW5jaW5nIHRoZSB1c2VyIGRhdGEuCisJICovCisJZmlyc3RfZGF0YV9wYWdlID0gZGF0YV9wdHIgLyBQQUdFX1NJWkU7CisJbGFzdF9kYXRhX3BhZ2UgPSAoZGF0YV9wdHIgKyBhcmdzLT5zaXplIC0gMSkgLyBQQUdFX1NJWkU7CisJbnVtX3BhZ2VzID0gbGFzdF9kYXRhX3BhZ2UgLSBmaXJzdF9kYXRhX3BhZ2UgKyAxOworCisJdXNlcl9wYWdlcyA9IGtjYWxsb2MobnVtX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmICh1c2VyX3BhZ2VzID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXBpbm5lZF9wYWdlcyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCAodWludHB0cl90KWFyZ3MtPmRhdGFfcHRyLAorCQkJCSAgICAgIG51bV9wYWdlcywgMCwgMCwgdXNlcl9wYWdlcywgTlVMTCk7CisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlpZiAocGlubmVkX3BhZ2VzIDwgbnVtX3BhZ2VzKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZmFpbF9wdXRfdXNlcl9wYWdlczsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWxfdW5sb2NrOworCisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3NldF90b19jcHVfZG9tYWluKG9iaiwgMSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZhaWxfcHV0X3BhZ2VzOworCisJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCW9mZnNldCA9IGFyZ3MtPm9mZnNldDsKKwlvYmpfcHJpdi0+ZGlydHkgPSAxOworCisJd2hpbGUgKHJlbWFpbiA+IDApIHsKKwkJLyogT3BlcmF0aW9uIGluIHRoaXMgcGFnZQorCQkgKgorCQkgKiBzaG1lbV9wYWdlX2luZGV4ID0gcGFnZSBudW1iZXIgd2l0aGluIHNobWVtIGZpbGUKKwkJICogc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgd2l0aGluIHBhZ2UgaW4gc2htZW0gZmlsZQorCQkgKiBkYXRhX3BhZ2VfaW5kZXggPSBwYWdlIG51bWJlciBpbiBnZXRfdXNlcl9wYWdlcyByZXR1cm4KKwkJICogZGF0YV9wYWdlX29mZnNldCA9IG9mZnNldCB3aXRoIGRhdGFfcGFnZV9pbmRleCBwYWdlLgorCQkgKiBwYWdlX2xlbmd0aCA9IGJ5dGVzIHRvIGNvcHkgZm9yIHRoaXMgcGFnZQorCQkgKi8KKwkJc2htZW1fcGFnZV9pbmRleCA9IG9mZnNldCAvIFBBR0VfU0laRTsKKwkJc2htZW1fcGFnZV9vZmZzZXQgPSBvZmZzZXQgJiB+UEFHRV9NQVNLOworCQlkYXRhX3BhZ2VfaW5kZXggPSBkYXRhX3B0ciAvIFBBR0VfU0laRSAtIGZpcnN0X2RhdGFfcGFnZTsKKwkJZGF0YV9wYWdlX29mZnNldCA9IGRhdGFfcHRyICYgflBBR0VfTUFTSzsKKworCQlwYWdlX2xlbmd0aCA9IHJlbWFpbjsKKwkJaWYgKChzaG1lbV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gc2htZW1fcGFnZV9vZmZzZXQ7CisJCWlmICgoZGF0YV9wYWdlX29mZnNldCArIHBhZ2VfbGVuZ3RoKSA+IFBBR0VfU0laRSkKKwkJCXBhZ2VfbGVuZ3RoID0gUEFHRV9TSVpFIC0gZGF0YV9wYWdlX29mZnNldDsKKworCQlyZXQgPSBzbG93X3NobWVtX2NvcHkob2JqX3ByaXYtPnBhZ2VzW3NobWVtX3BhZ2VfaW5kZXhdLAorCQkJCSAgICAgIHNobWVtX3BhZ2Vfb2Zmc2V0LAorCQkJCSAgICAgIHVzZXJfcGFnZXNbZGF0YV9wYWdlX2luZGV4XSwKKwkJCQkgICAgICBkYXRhX3BhZ2Vfb2Zmc2V0LAorCQkJCSAgICAgIHBhZ2VfbGVuZ3RoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbF9wdXRfcGFnZXM7CisKKwkJcmVtYWluIC09IHBhZ2VfbGVuZ3RoOworCQlkYXRhX3B0ciArPSBwYWdlX2xlbmd0aDsKKwkJb2Zmc2V0ICs9IHBhZ2VfbGVuZ3RoOworCX0KKworZmFpbF9wdXRfcGFnZXM6CisJaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOworZmFpbF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CitmYWlsX3B1dF91c2VyX3BhZ2VzOgorCWZvciAoaSA9IDA7IGkgPCBwaW5uZWRfcGFnZXM7IGkrKykKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHVzZXJfcGFnZXNbaV0pOworCWtmcmVlKHVzZXJfcGFnZXMpOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0zODgsMTAgKzg0NSwxOSBAQAogCWlmIChvYmpfcHJpdi0+cGh5c19vYmopCiAJCXJldCA9IGk5MTVfZ2VtX3BoeXNfcHdyaXRlKGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOwogCWVsc2UgaWYgKG9ial9wcml2LT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19OT05FICYmCi0JCSBkZXYtPmd0dF90b3RhbCAhPSAwKQotCQlyZXQgPSBpOTE1X2dlbV9ndHRfcHdyaXRlKGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOwotCWVsc2UKLQkJcmV0ID0gaTkxNV9nZW1fc2htZW1fcHdyaXRlKGRldiwgb2JqLCBhcmdzLCBmaWxlX3ByaXYpOworCQkgZGV2LT5ndHRfdG90YWwgIT0gMCkgeworCQlyZXQgPSBpOTE1X2dlbV9ndHRfcHdyaXRlX2Zhc3QoZGV2LCBvYmosIGFyZ3MsIGZpbGVfcHJpdik7CisJCWlmIChyZXQgPT0gLUVGQVVMVCkgeworCQkJcmV0ID0gaTkxNV9nZW1fZ3R0X3B3cml0ZV9zbG93KGRldiwgb2JqLCBhcmdzLAorCQkJCQkJICAgICAgIGZpbGVfcHJpdik7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBpOTE1X2dlbV9zaG1lbV9wd3JpdGVfZmFzdChkZXYsIG9iaiwgYXJncywgZmlsZV9wcml2KTsKKwkJaWYgKHJldCA9PSAtRUZBVUxUKSB7CisJCQlyZXQgPSBpOTE1X2dlbV9zaG1lbV9wd3JpdGVfc2xvdyhkZXYsIG9iaiwgYXJncywKKwkJCQkJCQkgZmlsZV9wcml2KTsKKwkJfQorCX0KIAogI2lmIFdBVENIX1BXUklURQogCWlmIChyZXQpCkBAIC04MTYsMjkgKzEyODIsMzAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWk5MTVfZ2VtX29iamVjdF9mcmVlX3BhZ2VfbGlzdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKK2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCiB7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKIAlpbnQgcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKIAlpbnQgaTsKIAotCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0ID09IE5VTEwpCisJQlVHX09OKG9ial9wcml2LT5wYWdlc19yZWZjb3VudCA9PSAwKTsKKworCWlmICgtLW9ial9wcml2LT5wYWdlc19yZWZjb3VudCAhPSAwKQogCQlyZXR1cm47CiAKLQogCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspCi0JCWlmIChvYmpfcHJpdi0+cGFnZV9saXN0W2ldICE9IE5VTEwpIHsKKwkJaWYgKG9ial9wcml2LT5wYWdlc1tpXSAhPSBOVUxMKSB7CiAJCQlpZiAob2JqX3ByaXYtPmRpcnR5KQotCQkJCXNldF9wYWdlX2RpcnR5KG9ial9wcml2LT5wYWdlX2xpc3RbaV0pOwotCQkJbWFya19wYWdlX2FjY2Vzc2VkKG9ial9wcml2LT5wYWdlX2xpc3RbaV0pOwotCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9ial9wcml2LT5wYWdlX2xpc3RbaV0pOworCQkJCXNldF9wYWdlX2RpcnR5KG9ial9wcml2LT5wYWdlc1tpXSk7CisJCQltYXJrX3BhZ2VfYWNjZXNzZWQob2JqX3ByaXYtPnBhZ2VzW2ldKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShvYmpfcHJpdi0+cGFnZXNbaV0pOwogCQl9CiAJb2JqX3ByaXYtPmRpcnR5ID0gMDsKIAotCWRybV9mcmVlKG9ial9wcml2LT5wYWdlX2xpc3QsCisJZHJtX2ZyZWUob2JqX3ByaXYtPnBhZ2VzLAogCQkgcGFnZV9jb3VudCAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKIAkJIERSTV9NRU1fRFJJVkVSKTsKLQlvYmpfcHJpdi0+cGFnZV9saXN0ID0gTlVMTDsKKwlvYmpfcHJpdi0+cGFnZXMgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTI5MCw3ICsxNzU3LDcgQEAKIAlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyAhPSBJOTE1X0ZFTkNFX1JFR19OT05FKQogCQlpOTE1X2dlbV9jbGVhcl9mZW5jZV9yZWcob2JqKTsKIAotCWk5MTVfZ2VtX29iamVjdF9mcmVlX3BhZ2VfbGlzdChvYmopOworCWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMob2JqKTsKIAogCWlmIChvYmpfcHJpdi0+Z3R0X3NwYWNlKSB7CiAJCWF0b21pY19kZWMoJmRldi0+Z3R0X2NvdW50KTsKQEAgLTE0MDksNyArMTg3Niw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZV9saXN0KHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoraTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCWludCBwYWdlX2NvdW50LCBpOwpAQCAtMTQxOCwxOCArMTg4NSwxOSBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCByZXQ7CiAKLQlpZiAob2JqX3ByaXYtPnBhZ2VfbGlzdCkKKwlpZiAob2JqX3ByaXYtPnBhZ2VzX3JlZmNvdW50KysgIT0gMCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBHZXQgdGhlIGxpc3Qgb2YgcGFnZXMgb3V0IG9mIG91ciBzdHJ1Y3QgZmlsZS4gIFRoZXknbGwgYmUgcGlubmVkCiAJICogYXQgdGhpcyBwb2ludCB1bnRpbCB3ZSByZWxlYXNlIHRoZW0uCiAJICovCiAJcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKLQlCVUdfT04ob2JqX3ByaXYtPnBhZ2VfbGlzdCAhPSBOVUxMKTsKLQlvYmpfcHJpdi0+cGFnZV9saXN0ID0gZHJtX2NhbGxvYyhwYWdlX2NvdW50LCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCi0JCQkJCSBEUk1fTUVNX0RSSVZFUik7Ci0JaWYgKG9ial9wcml2LT5wYWdlX2xpc3QgPT0gTlVMTCkgeworCUJVR19PTihvYmpfcHJpdi0+cGFnZXMgIT0gTlVMTCk7CisJb2JqX3ByaXYtPnBhZ2VzID0gZHJtX2NhbGxvYyhwYWdlX2NvdW50LCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCisJCQkJICAgICBEUk1fTUVNX0RSSVZFUik7CisJaWYgKG9ial9wcml2LT5wYWdlcyA9PSBOVUxMKSB7CiAJCURSTV9FUlJPUigiRmFsZWQgdG8gYWxsb2NhdGUgcGFnZSBsaXN0XG4iKTsKKwkJb2JqX3ByaXYtPnBhZ2VzX3JlZmNvdW50LS07CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTQ0MCwxMCArMTkwOCwxMCBAQAogCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHBhZ2UpOwogCQkJRFJNX0VSUk9SKCJyZWFkX21hcHBpbmdfcGFnZSBmYWlsZWQ6ICVkXG4iLCByZXQpOwotCQkJaTkxNV9nZW1fb2JqZWN0X2ZyZWVfcGFnZV9saXN0KG9iaik7CisJCQlpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCW9ial9wcml2LT5wYWdlX2xpc3RbaV0gPSBwYWdlOworCQlvYmpfcHJpdi0+cGFnZXNbaV0gPSBwYWdlOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE3NjYsNyArMjIzNCw3IEBACiAJRFJNX0lORk8oIkJpbmRpbmcgb2JqZWN0IG9mIHNpemUgJWQgYXQgMHglMDh4XG4iLAogCQkgb2JqLT5zaXplLCBvYmpfcHJpdi0+Z3R0X29mZnNldCk7CiAjZW5kaWYKLQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VfbGlzdChvYmopOworCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMob2JqKTsKIAlpZiAocmV0KSB7CiAJCWRybV9tbV9wdXRfYmxvY2sob2JqX3ByaXYtPmd0dF9zcGFjZSk7CiAJCW9ial9wcml2LT5ndHRfc3BhY2UgPSBOVUxMOwpAQCAtMTc3OCwxMiArMjI0NiwxMiBAQAogCSAqIGludG8gdGhlIEdUVC4KIAkgKi8KIAlvYmpfcHJpdi0+YWdwX21lbSA9IGRybV9hZ3BfYmluZF9wYWdlcyhkZXYsCi0JCQkJCSAgICAgICBvYmpfcHJpdi0+cGFnZV9saXN0LAorCQkJCQkgICAgICAgb2JqX3ByaXYtPnBhZ2VzLAogCQkJCQkgICAgICAgcGFnZV9jb3VudCwKIAkJCQkJICAgICAgIG9ial9wcml2LT5ndHRfb2Zmc2V0LAogCQkJCQkgICAgICAgb2JqX3ByaXYtPmFncF90eXBlKTsKIAlpZiAob2JqX3ByaXYtPmFncF9tZW0gPT0gTlVMTCkgewotCQlpOTE1X2dlbV9vYmplY3RfZnJlZV9wYWdlX2xpc3Qob2JqKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopOwogCQlkcm1fbW1fcHV0X2Jsb2NrKG9ial9wcml2LT5ndHRfc3BhY2UpOwogCQlvYmpfcHJpdi0+Z3R0X3NwYWNlID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xODEwLDEwICsyMjc4LDEwIEBACiAJICogdG8gR1BVLCBhbmQgd2UgY2FuIGlnbm9yZSB0aGUgY2FjaGUgZmx1c2ggYmVjYXVzZSBpdCdsbCBoYXBwZW4KIAkgKiBhZ2FpbiBhdCBiaW5kIHRpbWUuCiAJICovCi0JaWYgKG9ial9wcml2LT5wYWdlX2xpc3QgPT0gTlVMTCkKKwlpZiAob2JqX3ByaXYtPnBhZ2VzID09IE5VTEwpCiAJCXJldHVybjsKIAotCWRybV9jbGZsdXNoX3BhZ2VzKG9ial9wcml2LT5wYWdlX2xpc3QsIG9iai0+c2l6ZSAvIFBBR0VfU0laRSk7CisJZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VzLCBvYmotPnNpemUgLyBQQUdFX1NJWkUpOwogfQogCiAvKiogRmx1c2hlcyBhbnkgR1BVIHdyaXRlIGRvbWFpbiBmb3IgdGhlIG9iamVjdCBpZiBpdCdzIGRpcnR5LiAqLwpAQCAtMTkxMyw3ICsyMzgxLDYgQEAKIHN0YXRpYyBpbnQKIGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IHdyaXRlKQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKIAlpbnQgcmV0OwogCiAJaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4ob2JqKTsKQEAgLTE5MzIsNyArMjM5OSw2IEBACiAJLyogRmx1c2ggdGhlIENQVSBjYWNoZSBpZiBpdCdzIHN0aWxsIGludmFsaWQuICovCiAJaWYgKChvYmotPnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpID09IDApIHsKIAkJaTkxNV9nZW1fY2xmbHVzaF9vYmplY3Qob2JqKTsKLQkJZHJtX2FncF9jaGlwc2V0X2ZsdXNoKGRldik7CiAKIAkJb2JqLT5yZWFkX2RvbWFpbnMgfD0gSTkxNV9HRU1fRE9NQUlOX0NQVTsKIAl9CkBAIC0yMTQ0LDcgKzI2MTAsNiBAQAogc3RhdGljIHZvaWQKIGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fZnVsbF9jcHVfcmVhZF9kb21haW4oc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAKIAlpZiAoIW9ial9wcml2LT5wYWdlX2NwdV92YWxpZCkKQEAgLTIxNTgsOSArMjYyMyw4IEBACiAJCWZvciAoaSA9IDA7IGkgPD0gKG9iai0+c2l6ZSAtIDEpIC8gUEFHRV9TSVpFOyBpKyspIHsKIAkJCWlmIChvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWRbaV0pCiAJCQkJY29udGludWU7Ci0JCQlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZV9saXN0ICsgaSwgMSk7CisJCQlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZXMgKyBpLCAxKTsKIAkJfQotCQlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKIAl9CiAKIAkvKiBGcmVlIHRoZSBwYWdlX2NwdV92YWxpZCBtYXBwaW5ncyB3aGljaCBhcmUgbm93IHN0YWxlLCB3aGV0aGVyCkBAIC0yMjI0LDcgKzI2ODgsNyBAQAogCQlpZiAob2JqX3ByaXYtPnBhZ2VfY3B1X3ZhbGlkW2ldKQogCQkJY29udGludWU7CiAKLQkJZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VfbGlzdCArIGksIDEpOworCQlkcm1fY2xmbHVzaF9wYWdlcyhvYmpfcHJpdi0+cGFnZXMgKyBpLCAxKTsKIAogCQlvYmpfcHJpdi0+cGFnZV9jcHVfdmFsaWRbaV0gPSAxOwogCX0KQEAgLTIyNDUsMTIgKzI3MDksMTEgQEAKIHN0YXRpYyBpbnQKIGk5MTVfZ2VtX29iamVjdF9waW5fYW5kX3JlbG9jYXRlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAogCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKLQkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdCAqZW50cnkpCisJCQkJIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QgKmVudHJ5LAorCQkJCSBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jcykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKnJlbG9jczsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCWludCBpLCByZXQ7CiAJdm9pZCBfX2lvbWVtICpyZWxvY19wYWdlOwpAQCAtMjI2MiwyNSArMjcyNSwxOCBAQAogCiAJZW50cnktPm9mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OwogCi0JcmVsb2NzID0gKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKikKLQkJICh1aW50cHRyX3QpIGVudHJ5LT5yZWxvY3NfcHRyOwogCS8qIEFwcGx5IHRoZSByZWxvY2F0aW9ucywgdXNpbmcgdGhlIEdUVCBhcGVydHVyZSB0byBhdm9pZCBjYWNoZQogCSAqIGZsdXNoaW5nIHJlcXVpcmVtZW50cy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZW50cnktPnJlbG9jYXRpb25fY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jPSAmcmVsb2NzW2ldOwogCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKnRhcmdldF9vYmo7CiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICp0YXJnZXRfb2JqX3ByaXY7CiAJCXVpbnQzMl90IHJlbG9jX3ZhbCwgcmVsb2Nfb2Zmc2V0OwogCQl1aW50MzJfdCBfX2lvbWVtICpyZWxvY19lbnRyeTsKIAotCQlyZXQgPSBjb3B5X2Zyb21fdXNlcigmcmVsb2MsIHJlbG9jcyArIGksIHNpemVvZihyZWxvYykpOwotCQlpZiAocmV0ICE9IDApIHsKLQkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCiAJCXRhcmdldF9vYmogPSBkcm1fZ2VtX29iamVjdF9sb29rdXAob2JqLT5kZXYsIGZpbGVfcHJpdiwKLQkJCQkJCSAgIHJlbG9jLnRhcmdldF9oYW5kbGUpOworCQkJCQkJICAgcmVsb2MtPnRhcmdldF9oYW5kbGUpOwogCQlpZiAodGFyZ2V0X29iaiA9PSBOVUxMKSB7CiAJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKIAkJCXJldHVybiAtRUJBREY7CkBAIC0yMjkyLDUzICsyNzQ4LDUzIEBACiAJCSAqLwogCQlpZiAodGFyZ2V0X29ial9wcml2LT5ndHRfc3BhY2UgPT0gTlVMTCkgewogCQkJRFJNX0VSUk9SKCJObyBHVFQgc3BhY2UgZm91bmQgZm9yIG9iamVjdCAlZFxuIiwKLQkJCQkgIHJlbG9jLnRhcmdldF9oYW5kbGUpOworCQkJCSAgcmVsb2MtPnRhcmdldF9oYW5kbGUpOwogCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CiAJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaWYgKHJlbG9jLm9mZnNldCA+IG9iai0+c2l6ZSAtIDQpIHsKKwkJaWYgKHJlbG9jLT5vZmZzZXQgPiBvYmotPnNpemUgLSA0KSB7CiAJCQlEUk1fRVJST1IoIlJlbG9jYXRpb24gYmV5b25kIG9iamVjdCBib3VuZHM6ICIKIAkJCQkgICJvYmogJXAgdGFyZ2V0ICVkIG9mZnNldCAlZCBzaXplICVkLlxuIiwKLQkJCQkgIG9iaiwgcmVsb2MudGFyZ2V0X2hhbmRsZSwKLQkJCQkgIChpbnQpIHJlbG9jLm9mZnNldCwgKGludCkgb2JqLT5zaXplKTsKKwkJCQkgIG9iaiwgcmVsb2MtPnRhcmdldF9oYW5kbGUsCisJCQkJICAoaW50KSByZWxvYy0+b2Zmc2V0LCAoaW50KSBvYmotPnNpemUpOwogCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CiAJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmIChyZWxvYy5vZmZzZXQgJiAzKSB7CisJCWlmIChyZWxvYy0+b2Zmc2V0ICYgMykgewogCQkJRFJNX0VSUk9SKCJSZWxvY2F0aW9uIG5vdCA0LWJ5dGUgYWxpZ25lZDogIgogCQkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkLlxuIiwKLQkJCQkgIG9iaiwgcmVsb2MudGFyZ2V0X2hhbmRsZSwKLQkJCQkgIChpbnQpIHJlbG9jLm9mZnNldCk7CisJCQkJICBvYmosIHJlbG9jLT50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2MtPm9mZnNldCk7CiAJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpZiAocmVsb2Mud3JpdGVfZG9tYWluICYgSTkxNV9HRU1fRE9NQUlOX0NQVSB8fAotCQkgICAgcmVsb2MucmVhZF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX0NQVSkgeworCQlpZiAocmVsb2MtPndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0RPTUFJTl9DUFUgfHwKKwkJICAgIHJlbG9jLT5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSB7CiAJCQlEUk1fRVJST1IoInJlbG9jIHdpdGggcmVhZC93cml0ZSBDUFUgZG9tYWluczogIgogCQkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkICIKIAkJCQkgICJyZWFkICUwOHggd3JpdGUgJTA4eCIsCi0JCQkJICBvYmosIHJlbG9jLnRhcmdldF9oYW5kbGUsCi0JCQkJICAoaW50KSByZWxvYy5vZmZzZXQsCi0JCQkJICByZWxvYy5yZWFkX2RvbWFpbnMsCi0JCQkJICByZWxvYy53cml0ZV9kb21haW4pOworCQkJCSAgb2JqLCByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKKwkJCQkgIChpbnQpIHJlbG9jLT5vZmZzZXQsCisJCQkJICByZWxvYy0+cmVhZF9kb21haW5zLAorCQkJCSAgcmVsb2MtPndyaXRlX2RvbWFpbik7CiAJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKIAkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpZiAocmVsb2Mud3JpdGVfZG9tYWluICYmIHRhcmdldF9vYmotPnBlbmRpbmdfd3JpdGVfZG9tYWluICYmCi0JCSAgICByZWxvYy53cml0ZV9kb21haW4gIT0gdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4pIHsKKwkJaWYgKHJlbG9jLT53cml0ZV9kb21haW4gJiYgdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4gJiYKKwkJICAgIHJlbG9jLT53cml0ZV9kb21haW4gIT0gdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4pIHsKIAkJCURSTV9FUlJPUigiV3JpdGUgZG9tYWluIGNvbmZsaWN0OiAiCiAJCQkJICAib2JqICVwIHRhcmdldCAlZCBvZmZzZXQgJWQgIgogCQkJCSAgIm5ldyAlMDh4IG9sZCAlMDh4XG4iLAotCQkJCSAgb2JqLCByZWxvYy50YXJnZXRfaGFuZGxlLAotCQkJCSAgKGludCkgcmVsb2Mub2Zmc2V0LAotCQkJCSAgcmVsb2Mud3JpdGVfZG9tYWluLAorCQkJCSAgb2JqLCByZWxvYy0+dGFyZ2V0X2hhbmRsZSwKKwkJCQkgIChpbnQpIHJlbG9jLT5vZmZzZXQsCisJCQkJICByZWxvYy0+d3JpdGVfZG9tYWluLAogCQkJCSAgdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4pOwogCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UodGFyZ2V0X29iaik7CiAJCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKQEAgLTIzNTEsMjIgKzI4MDcsMjIgQEAKIAkJCSAicHJlc3VtZWQgJTA4eCBkZWx0YSAlMDh4XG4iLAogCQkJIF9fZnVuY19fLAogCQkJIG9iaiwKLQkJCSAoaW50KSByZWxvYy5vZmZzZXQsCi0JCQkgKGludCkgcmVsb2MudGFyZ2V0X2hhbmRsZSwKLQkJCSAoaW50KSByZWxvYy5yZWFkX2RvbWFpbnMsCi0JCQkgKGludCkgcmVsb2Mud3JpdGVfZG9tYWluLAorCQkJIChpbnQpIHJlbG9jLT5vZmZzZXQsCisJCQkgKGludCkgcmVsb2MtPnRhcmdldF9oYW5kbGUsCisJCQkgKGludCkgcmVsb2MtPnJlYWRfZG9tYWlucywKKwkJCSAoaW50KSByZWxvYy0+d3JpdGVfZG9tYWluLAogCQkJIChpbnQpIHRhcmdldF9vYmpfcHJpdi0+Z3R0X29mZnNldCwKLQkJCSAoaW50KSByZWxvYy5wcmVzdW1lZF9vZmZzZXQsCi0JCQkgcmVsb2MuZGVsdGEpOworCQkJIChpbnQpIHJlbG9jLT5wcmVzdW1lZF9vZmZzZXQsCisJCQkgcmVsb2MtPmRlbHRhKTsKICNlbmRpZgogCi0JCXRhcmdldF9vYmotPnBlbmRpbmdfcmVhZF9kb21haW5zIHw9IHJlbG9jLnJlYWRfZG9tYWluczsKLQkJdGFyZ2V0X29iai0+cGVuZGluZ193cml0ZV9kb21haW4gfD0gcmVsb2Mud3JpdGVfZG9tYWluOworCQl0YXJnZXRfb2JqLT5wZW5kaW5nX3JlYWRfZG9tYWlucyB8PSByZWxvYy0+cmVhZF9kb21haW5zOworCQl0YXJnZXRfb2JqLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiB8PSByZWxvYy0+d3JpdGVfZG9tYWluOwogCiAJCS8qIElmIHRoZSByZWxvY2F0aW9uIGFscmVhZHkgaGFzIHRoZSByaWdodCB2YWx1ZSBpbiBpdCwgbm8KIAkJICogbW9yZSB3b3JrIG5lZWRzIHRvIGJlIGRvbmUuCiAJCSAqLwotCQlpZiAodGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0ID09IHJlbG9jLnByZXN1bWVkX29mZnNldCkgeworCQlpZiAodGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0ID09IHJlbG9jLT5wcmVzdW1lZF9vZmZzZXQpIHsKIAkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOwogCQkJY29udGludWU7CiAJCX0KQEAgLTIzODEsMzIgKzI4MzcsMjYgQEAKIAkJLyogTWFwIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIHJlbG9jYXRpb24gd2UncmUgZ29pbmcgdG8KIAkJICogcGVyZm9ybS4KIAkJICovCi0JCXJlbG9jX29mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgcmVsb2Mub2Zmc2V0OworCQlyZWxvY19vZmZzZXQgPSBvYmpfcHJpdi0+Z3R0X29mZnNldCArIHJlbG9jLT5vZmZzZXQ7CiAJCXJlbG9jX3BhZ2UgPSBpb19tYXBwaW5nX21hcF9hdG9taWNfd2MoZGV2X3ByaXYtPm1tLmd0dF9tYXBwaW5nLAogCQkJCQkJICAgICAgKHJlbG9jX29mZnNldCAmCiAJCQkJCQkgICAgICAgfihQQUdFX1NJWkUgLSAxKSkpOwogCQlyZWxvY19lbnRyeSA9ICh1aW50MzJfdCBfX2lvbWVtICopKHJlbG9jX3BhZ2UgKwogCQkJCQkJICAgKHJlbG9jX29mZnNldCAmIChQQUdFX1NJWkUgLSAxKSkpOwotCQlyZWxvY192YWwgPSB0YXJnZXRfb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyByZWxvYy5kZWx0YTsKKwkJcmVsb2NfdmFsID0gdGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0ICsgcmVsb2MtPmRlbHRhOwogCiAjaWYgV0FUQ0hfQlVGCiAJCURSTV9JTkZPKCJBcHBsaWVkIHJlbG9jYXRpb246ICVwQDB4JTA4eCAlMDh4IC0+ICUwOHhcbiIsCi0JCQkgIG9iaiwgKHVuc2lnbmVkIGludCkgcmVsb2Mub2Zmc2V0LAorCQkJICBvYmosICh1bnNpZ25lZCBpbnQpIHJlbG9jLT5vZmZzZXQsCiAJCQkgIHJlYWRsKHJlbG9jX2VudHJ5KSwgcmVsb2NfdmFsKTsKICNlbmRpZgogCQl3cml0ZWwocmVsb2NfdmFsLCByZWxvY19lbnRyeSk7CiAJCWlvX21hcHBpbmdfdW5tYXBfYXRvbWljKHJlbG9jX3BhZ2UpOwogCi0JCS8qIFdyaXRlIHRoZSB1cGRhdGVkIHByZXN1bWVkIG9mZnNldCBmb3IgdGhpcyBlbnRyeSBiYWNrIG91dAotCQkgKiB0byB0aGUgdXNlci4KKwkJLyogVGhlIHVwZGF0ZWQgcHJlc3VtZWQgb2Zmc2V0IGZvciB0aGlzIGVudHJ5IHdpbGwgYmUKKwkJICogY29waWVkIGJhY2sgb3V0IHRvIHRoZSB1c2VyLgogCQkgKi8KLQkJcmVsb2MucHJlc3VtZWRfb2Zmc2V0ID0gdGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0OwotCQlyZXQgPSBjb3B5X3RvX3VzZXIocmVsb2NzICsgaSwgJnJlbG9jLCBzaXplb2YocmVsb2MpKTsKLQkJaWYgKHJldCAhPSAwKSB7Ci0JCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSh0YXJnZXRfb2JqKTsKLQkJCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwotCQkJcmV0dXJuIHJldDsKLQkJfQorCQlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0ID0gdGFyZ2V0X29ial9wcml2LT5ndHRfb2Zmc2V0OwogCiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKHRhcmdldF9vYmopOwogCX0KQEAgLTI0MjMsMTEgKzI4NzMsMTAgQEAKIHN0YXRpYyBpbnQKIGk5MTVfZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlciAqZXhlYywKKwkJCSAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMsCiAJCQkgICAgICB1aW50NjRfdCBleGVjX29mZnNldCkKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBfX3VzZXIgKmJveGVzID0gKHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqKQotCQkJCQkgICAgICh1aW50cHRyX3QpIGV4ZWMtPmNsaXByZWN0c19wdHI7CiAJaW50IG5ib3ggPSBleGVjLT5udW1fY2xpcHJlY3RzOwogCWludCBpID0gMCwgY291bnQ7CiAJdWludDMyX3QJZXhlY19zdGFydCwgZXhlY19sZW47CkBAIC0yNDQ4LDcgKzI4OTcsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaWYgKGkgPCBuYm94KSB7Ci0JCQlpbnQgcmV0ID0gaTkxNV9lbWl0X2JveChkZXYsIGJveGVzLCBpLAorCQkJaW50IHJldCA9IGk5MTVfZW1pdF9ib3goZGV2LCBjbGlwcmVjdHMsIGksCiAJCQkJCQlleGVjLT5EUjEsIGV4ZWMtPkRSNCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CkBAIC0yNTA0LDYgKzI5NTMsNzUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50CitpOTE1X2dlbV9nZXRfcmVsb2NzX2Zyb21fdXNlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICpleGVjX2xpc3QsCisJCQkgICAgICB1aW50MzJfdCBidWZmZXJfY291bnQsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKipyZWxvY3MpCit7CisJdWludDMyX3QgcmVsb2NfY291bnQgPSAwLCByZWxvY19pbmRleCA9IDAsIGk7CisJaW50IHJldDsKKworCSpyZWxvY3MgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBidWZmZXJfY291bnQ7IGkrKykgeworCQlpZiAocmVsb2NfY291bnQgKyBleGVjX2xpc3RbaV0ucmVsb2NhdGlvbl9jb3VudCA8IHJlbG9jX2NvdW50KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJlbG9jX2NvdW50ICs9IGV4ZWNfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50OworCX0KKworCSpyZWxvY3MgPSBkcm1fY2FsbG9jKHJlbG9jX2NvdW50LCBzaXplb2YoKipyZWxvY3MpLCBEUk1fTUVNX0RSSVZFUik7CisJaWYgKCpyZWxvY3MgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGkgPSAwOyBpIDwgYnVmZmVyX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IF9fdXNlciAqdXNlcl9yZWxvY3M7CisKKwkJdXNlcl9yZWxvY3MgPSAodm9pZCBfX3VzZXIgKikodWludHB0cl90KWV4ZWNfbGlzdFtpXS5yZWxvY3NfcHRyOworCisJCXJldCA9IGNvcHlfZnJvbV91c2VyKCYoKnJlbG9jcylbcmVsb2NfaW5kZXhdLAorCQkJCSAgICAgdXNlcl9yZWxvY3MsCisJCQkJICAgICBleGVjX2xpc3RbaV0ucmVsb2NhdGlvbl9jb3VudCAqCisJCQkJICAgICBzaXplb2YoKipyZWxvY3MpKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkcm1fZnJlZSgqcmVsb2NzLCByZWxvY19jb3VudCAqIHNpemVvZigqKnJlbG9jcyksCisJCQkJIERSTV9NRU1fRFJJVkVSKTsKKwkJCSpyZWxvY3MgPSBOVUxMOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJlbG9jX2luZGV4ICs9IGV4ZWNfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfZ2VtX3B1dF9yZWxvY3NfdG9fdXNlcihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0ICpleGVjX2xpc3QsCisJCQkgICAgdWludDMyX3QgYnVmZmVyX2NvdW50LAorCQkJICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSAqcmVsb2NzKQoreworCXVpbnQzMl90IHJlbG9jX2NvdW50ID0gMCwgaTsKKwlpbnQgcmV0OworCisJZm9yIChpID0gMDsgaSA8IGJ1ZmZlcl9jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBfX3VzZXIgKnVzZXJfcmVsb2NzOworCisJCXVzZXJfcmVsb2NzID0gKHZvaWQgX191c2VyICopKHVpbnRwdHJfdClleGVjX2xpc3RbaV0ucmVsb2NzX3B0cjsKKworCQlpZiAocmV0ID09IDApIHsKKwkJCXJldCA9IGNvcHlfdG9fdXNlcih1c2VyX3JlbG9jcywKKwkJCQkJICAgJnJlbG9jc1tyZWxvY19jb3VudF0sCisJCQkJCSAgIGV4ZWNfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50ICoKKwkJCQkJICAgc2l6ZW9mKCpyZWxvY3MpKTsKKwkJfQorCisJCXJlbG9jX2NvdW50ICs9IGV4ZWNfbGlzdFtpXS5yZWxvY2F0aW9uX2NvdW50OworCX0KKworCWRybV9mcmVlKHJlbG9jcywgcmVsb2NfY291bnQgKiBzaXplb2YoKnJlbG9jcyksIERSTV9NRU1fRFJJVkVSKTsKKworCXJldHVybiByZXQ7Cit9CisKIGludAogaTkxNV9nZW1fZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCkBAIC0yNTE1LDkgKzMwMzMsMTEgQEAKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKipvYmplY3RfbGlzdCA9IE5VTEw7CiAJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpiYXRjaF9vYmo7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwotCWludCByZXQsIGksIHBpbm5lZCA9IDA7CisJc3RydWN0IGRybV9jbGlwX3JlY3QgKmNsaXByZWN0cyA9IE5VTEw7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3M7CisJaW50IHJldCwgcmV0MiwgaSwgcGlubmVkID0gMDsKIAl1aW50NjRfdCBleGVjX29mZnNldDsKLQl1aW50MzJfdCBzZXFubywgZmx1c2hfZG9tYWluczsKKwl1aW50MzJfdCBzZXFubywgZmx1c2hfZG9tYWlucywgcmVsb2NfaW5kZXg7CiAJaW50IHBpbl90cmllczsKIAogI2lmIFdBVENIX0VYRUMKQEAgLTI1NTEsNiArMzA3MSwyOCBAQAogCQlnb3RvIHByZV9tdXRleF9lcnI7CiAJfQogCisJaWYgKGFyZ3MtPm51bV9jbGlwcmVjdHMgIT0gMCkgeworCQljbGlwcmVjdHMgPSBkcm1fY2FsbG9jKGFyZ3MtPm51bV9jbGlwcmVjdHMsIHNpemVvZigqY2xpcHJlY3RzKSwKKwkJCQkgICAgICAgRFJNX01FTV9EUklWRVIpOworCQlpZiAoY2xpcHJlY3RzID09IE5VTEwpCisJCQlnb3RvIHByZV9tdXRleF9lcnI7CisKKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoY2xpcHJlY3RzLAorCQkJCSAgICAgKHN0cnVjdCBkcm1fY2xpcF9yZWN0IF9fdXNlciAqKQorCQkJCSAgICAgKHVpbnRwdHJfdCkgYXJncy0+Y2xpcHJlY3RzX3B0ciwKKwkJCQkgICAgIHNpemVvZigqY2xpcHJlY3RzKSAqIGFyZ3MtPm51bV9jbGlwcmVjdHMpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCURSTV9FUlJPUigiY29weSAlZCBjbGlwcmVjdHMgZmFpbGVkOiAlZFxuIiwKKwkJCQkgIGFyZ3MtPm51bV9jbGlwcmVjdHMsIHJldCk7CisJCQlnb3RvIHByZV9tdXRleF9lcnI7CisJCX0KKwl9CisKKwlyZXQgPSBpOTE1X2dlbV9nZXRfcmVsb2NzX2Zyb21fdXNlcihleGVjX2xpc3QsIGFyZ3MtPmJ1ZmZlcl9jb3VudCwKKwkJCQkJICAgICZyZWxvY3MpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byBwcmVfbXV0ZXhfZXJyOworCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOwpAQCAtMjU5MywxNSArMzEzNSwxOSBAQAogCS8qIFBpbiBhbmQgcmVsb2NhdGUgKi8KIAlmb3IgKHBpbl90cmllcyA9IDA7IDsgcGluX3RyaWVzKyspIHsKIAkJcmV0ID0gMDsKKwkJcmVsb2NfaW5kZXggPSAwOworCiAJCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5idWZmZXJfY291bnQ7IGkrKykgewogCQkJb2JqZWN0X2xpc3RbaV0tPnBlbmRpbmdfcmVhZF9kb21haW5zID0gMDsKIAkJCW9iamVjdF9saXN0W2ldLT5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9IDA7CiAJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfcGluX2FuZF9yZWxvY2F0ZShvYmplY3RfbGlzdFtpXSwKIAkJCQkJCQkgICAgICAgZmlsZV9wcml2LAotCQkJCQkJCSAgICAgICAmZXhlY19saXN0W2ldKTsKKwkJCQkJCQkgICAgICAgJmV4ZWNfbGlzdFtpXSwKKwkJCQkJCQkgICAgICAgJnJlbG9jc1tyZWxvY19pbmRleF0pOwogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJCXBpbm5lZCA9IGkgKyAxOworCQkJcmVsb2NfaW5kZXggKz0gZXhlY19saXN0W2ldLnJlbG9jYXRpb25fY291bnQ7CiAJCX0KIAkJLyogc3VjY2VzcyAqLwogCQlpZiAocmV0ID09IDApCkBAIC0yNjg3LDcgKzMyMzMsNyBAQAogI2VuZGlmCiAKIAkvKiBFeGVjIHRoZSBiYXRjaGJ1ZmZlciAqLwotCXJldCA9IGk5MTVfZGlzcGF0Y2hfZ2VtX2V4ZWNidWZmZXIoZGV2LCBhcmdzLCBleGVjX29mZnNldCk7CisJcmV0ID0gaTkxNV9kaXNwYXRjaF9nZW1fZXhlY2J1ZmZlcihkZXYsIGFyZ3MsIGNsaXByZWN0cywgZXhlY19vZmZzZXQpOwogCWlmIChyZXQpIHsKIAkJRFJNX0VSUk9SKCJkaXNwYXRjaCBmYWlsZWQgJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyOwpAQCAtMjc1MSwxMSArMzI5NywyNyBAQAogCQkJCSAgYXJncy0+YnVmZmVyX2NvdW50LCByZXQpOwogCX0KIAorCS8qIENvcHkgdGhlIHVwZGF0ZWQgcmVsb2NhdGlvbnMgb3V0IHJlZ2FyZGxlc3Mgb2YgY3VycmVudCBlcnJvcgorCSAqIHN0YXRlLiAgRmFpbHVyZSB0byB1cGRhdGUgdGhlIHJlbG9jcyB3b3VsZCBtZWFuIHRoYXQgdGhlIG5leHQKKwkgKiB0aW1lIHVzZXJsYW5kIGNhbGxzIGV4ZWNidWYsIGl0IHdvdWxkIGRvIHNvIHdpdGggcHJlc3VtZWQgb2Zmc2V0CisJICogc3RhdGUgdGhhdCBkaWRuJ3QgbWF0Y2ggdGhlIGFjdHVhbCBvYmplY3Qgc3RhdGUuCisJICovCisJcmV0MiA9IGk5MTVfZ2VtX3B1dF9yZWxvY3NfdG9fdXNlcihleGVjX2xpc3QsIGFyZ3MtPmJ1ZmZlcl9jb3VudCwKKwkJCQkJICAgcmVsb2NzKTsKKwlpZiAocmV0MiAhPSAwKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGNvcHkgcmVsb2NhdGlvbnMgYmFjayBvdXQ6ICVkXG4iLCByZXQyKTsKKworCQlpZiAocmV0ID09IDApCisJCQlyZXQgPSByZXQyOworCX0KKwogcHJlX211dGV4X2VycjoKIAlkcm1fZnJlZShvYmplY3RfbGlzdCwgc2l6ZW9mKCpvYmplY3RfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQsCiAJCSBEUk1fTUVNX0RSSVZFUik7CiAJZHJtX2ZyZWUoZXhlY19saXN0LCBzaXplb2YoKmV4ZWNfbGlzdCkgKiBhcmdzLT5idWZmZXJfY291bnQsCiAJCSBEUk1fTUVNX0RSSVZFUik7CisJZHJtX2ZyZWUoY2xpcHJlY3RzLCBzaXplb2YoKmNsaXByZWN0cykgKiBhcmdzLT5udW1fY2xpcHJlY3RzLAorCQkgRFJNX01FTV9EUklWRVIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTMxOTIsNyArMzc1NCw3IEBACiAKIAlkZXZfcHJpdi0+c3RhdHVzX2dmeF9hZGRyID0gb2JqX3ByaXYtPmd0dF9vZmZzZXQ7CiAKLQlkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgPSBrbWFwKG9ial9wcml2LT5wYWdlX2xpc3RbMF0pOworCWRldl9wcml2LT5od19zdGF0dXNfcGFnZSA9IGttYXAob2JqX3ByaXYtPnBhZ2VzWzBdKTsKIAlpZiAoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlID09IE5VTEwpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbWFwIHN0YXR1cyBwYWdlLlxuIik7CiAJCW1lbXNldCgmZGV2X3ByaXYtPmh3c19tYXAsIDAsIHNpemVvZihkZXZfcHJpdi0+aHdzX21hcCkpOwpAQCAtMzIyMiw3ICszNzg0LDcgQEAKIAlvYmogPSBkZXZfcHJpdi0+aHdzX29iajsKIAlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAKLQlrdW5tYXAob2JqX3ByaXYtPnBhZ2VfbGlzdFswXSk7CisJa3VubWFwKG9ial9wcml2LT5wYWdlc1swXSk7CiAJaTkxNV9nZW1fb2JqZWN0X3VucGluKG9iaik7CiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKIAlkZXZfcHJpdi0+aHdzX29iaiA9IE5VTEw7CkBAIC0zNTI1LDIwICs0MDg3LDIwIEBACiAJaWYgKCFvYmpfcHJpdi0+cGh5c19vYmopCiAJCXJldHVybjsKIAotCXJldCA9IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZV9saXN0KG9iaik7CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhvYmopOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCiAJcGFnZV9jb3VudCA9IG9iai0+c2l6ZSAvIFBBR0VfU0laRTsKIAogCWZvciAoaSA9IDA7IGkgPCBwYWdlX2NvdW50OyBpKyspIHsKLQkJY2hhciAqZHN0ID0ga21hcF9hdG9taWMob2JqX3ByaXYtPnBhZ2VfbGlzdFtpXSwgS01fVVNFUjApOworCQljaGFyICpkc3QgPSBrbWFwX2F0b21pYyhvYmpfcHJpdi0+cGFnZXNbaV0sIEtNX1VTRVIwKTsKIAkJY2hhciAqc3JjID0gb2JqX3ByaXYtPnBoeXNfb2JqLT5oYW5kbGUtPnZhZGRyICsgKGkgKiBQQUdFX1NJWkUpOwogCiAJCW1lbWNweShkc3QsIHNyYywgUEFHRV9TSVpFKTsKIAkJa3VubWFwX2F0b21pYyhkc3QsIEtNX1VTRVIwKTsKIAl9Ci0JZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VfbGlzdCwgcGFnZV9jb3VudCk7CisJZHJtX2NsZmx1c2hfcGFnZXMob2JqX3ByaXYtPnBhZ2VzLCBwYWdlX2NvdW50KTsKIAlkcm1fYWdwX2NoaXBzZXRfZmx1c2goZGV2KTsKIG91dDoKIAlvYmpfcHJpdi0+cGh5c19vYmotPmN1cl9vYmogPSBOVUxMOwpAQCAtMzU4MSw3ICs0MTQzLDcgQEAKIAlvYmpfcHJpdi0+cGh5c19vYmogPSBkZXZfcHJpdi0+bW0ucGh5c19vYmpzW2lkIC0gMV07CiAJb2JqX3ByaXYtPnBoeXNfb2JqLT5jdXJfb2JqID0gb2JqOwogCi0JcmV0ID0gaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlX2xpc3Qob2JqKTsKKwlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7CiAJaWYgKHJldCkgewogCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgcGFnZSBsaXN0XG4iKTsKIAkJZ290byBvdXQ7CkBAIC0zNTkwLDcgKzQxNTIsNyBAQAogCXBhZ2VfY291bnQgPSBvYmotPnNpemUgLyBQQUdFX1NJWkU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZV9jb3VudDsgaSsrKSB7Ci0JCWNoYXIgKnNyYyA9IGttYXBfYXRvbWljKG9ial9wcml2LT5wYWdlX2xpc3RbaV0sIEtNX1VTRVIwKTsKKwkJY2hhciAqc3JjID0ga21hcF9hdG9taWMob2JqX3ByaXYtPnBhZ2VzW2ldLCBLTV9VU0VSMCk7CiAJCWNoYXIgKmRzdCA9IG9ial9wcml2LT5waHlzX29iai0+aGFuZGxlLT52YWRkciArIChpICogUEFHRV9TSVpFKTsKIAogCQltZW1jcHkoZHN0LCBzcmMsIFBBR0VfU0laRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Z2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU1ZWM5NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RlYnVnZnMuYwpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgorICogICAgS2VpdGggUGFja2FyZCA8a2VpdGhwQGtlaXRocC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJpOTE1X2RybS5oIgorI2luY2x1ZGUgImk5MTVfZHJ2LmgiCisKKyNkZWZpbmUgRFJNX0k5MTVfUklOR19ERUJVRyAxCisKKworI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKQorCisjZGVmaW5lIEFDVElWRV9MSVNUCTEKKyNkZWZpbmUgRkxVU0hJTkdfTElTVAkyCisjZGVmaW5lIElOQUNUSVZFX0xJU1QJMworCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3Bpbl9mbGFnKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdikKK3sKKwlpZiAob2JqX3ByaXYtPnVzZXJfcGluX2NvdW50ID4gMCkKKwkJcmV0dXJuICJQIjsKKwllbHNlIGlmIChvYmpfcHJpdi0+cGluX2NvdW50ID4gMCkKKwkJcmV0dXJuICJwIjsKKwllbHNlCisJCXJldHVybiAiICI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfdGlsaW5nX2ZsYWcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2KQoreworICAgIHN3aXRjaCAob2JqX3ByaXYtPnRpbGluZ19tb2RlKSB7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIEk5MTVfVElMSU5HX05PTkU6IHJldHVybiAiICI7CisgICAgY2FzZSBJOTE1X1RJTElOR19YOiByZXR1cm4gIlgiOworICAgIGNhc2UgSTkxNV9USUxJTkdfWTogcmV0dXJuICJZIjsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2xpc3RfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwl1aW50cHRyX3QgbGlzdCA9ICh1aW50cHRyX3QpIG5vZGUtPmluZm9fZW50LT5kYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OworCisJc3dpdGNoIChsaXN0KSB7CisJY2FzZSBBQ1RJVkVfTElTVDoKKwkJc2VxX3ByaW50ZihtLCAiQWN0aXZlOlxuIik7CisJCWhlYWQgPSAmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0OworCQlicmVhazsKKwljYXNlIElOQUNUSVZFX0xJU1Q6CisJCXNlcV9wcmludGYobSwgIkluY3RpdmU6XG4iKTsKKwkJaGVhZCA9ICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdDsKKwkJYnJlYWs7CisJY2FzZSBGTFVTSElOR19MSVNUOgorCQlzZXFfcHJpbnRmKG0sICJGbHVzaGluZzpcbiIpOworCQloZWFkID0gJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fSU5GTygiT29vcHMsIHVuZXhwZWN0ZWQgbGlzdFxuIik7CisJCXJldHVybiAwOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsIGhlYWQsIGxpc3QpCisJeworCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7CisKKwkJc2VxX3ByaW50ZihtLCAiICAgICVwOiAlcyAlMDh4ICUwOHggJWQiLAorCQkJICAgb2JqLAorCQkJICAgZ2V0X3Bpbl9mbGFnKG9ial9wcml2KSwKKwkJCSAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKKwkJCSAgIG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubyk7CisKKwkJaWYgKG9iai0+bmFtZSkKKwkJCXNlcV9wcmludGYobSwgIiAobmFtZTogJWQpIiwgb2JqLT5uYW1lKTsKKwkJaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgIT0gSTkxNV9GRU5DRV9SRUdfTk9ORSkKKwkJCXNlcV9wcmludGYobSwgIiAoZmVuY2U6ICVkXG4iLCBvYmpfcHJpdi0+ZmVuY2VfcmVnKTsKKwkJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fcmVxdWVzdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqZ2VtX3JlcXVlc3Q7CisKKwlzZXFfcHJpbnRmKG0sICJSZXF1ZXN0OlxuIik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShnZW1fcmVxdWVzdCwgJmRldl9wcml2LT5tbS5yZXF1ZXN0X2xpc3QsIGxpc3QpIHsKKwkJc2VxX3ByaW50ZihtLCAiICAgICVkIEAgJWRcbiIsCisJCQkgICBnZW1fcmVxdWVzdC0+c2Vxbm8sCisJCQkgICAoaW50KSAoamlmZmllcyAtIGdlbV9yZXF1ZXN0LT5lbWl0dGVkX2ppZmZpZXMpKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9nZW1fc2Vxbm9faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgIT0gTlVMTCkgeworCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IHNlcXVlbmNlOiAlZFxuIiwKKwkJCSAgIGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpKTsKKwl9IGVsc2UgeworCQlzZXFfcHJpbnRmKG0sICJDdXJyZW50IHNlcXVlbmNlOiBod3MgdW5pbml0aWFsaXplZFxuIik7CisJfQorCXNlcV9wcmludGYobSwgIldhaXRlciBzZXF1ZW5jZTogICVkXG4iLAorCQkJZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vKTsKKwlzZXFfcHJpbnRmKG0sICJJUlEgc2VxdWVuY2U6ICAgICAlZFxuIiwgZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8pOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaTkxNV9pbnRlcnJ1cHRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXNlcV9wcmludGYobSwgIkludGVycnVwdCBlbmFibGU6ICAgICUwOHhcbiIsCisJCSAgIEk5MTVfUkVBRChJRVIpKTsKKwlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHQgaWRlbnRpdHk6ICAlMDh4XG4iLAorCQkgICBJOTE1X1JFQUQoSUlSKSk7CisJc2VxX3ByaW50ZihtLCAiSW50ZXJydXB0IG1hc2s6ICAgICAgJTA4eFxuIiwKKwkJICAgSTkxNV9SRUFEKElNUikpOworCXNlcV9wcmludGYobSwgIlBpcGUgQSBzdGF0OiAgICAgICAgICUwOHhcbiIsCisJCSAgIEk5MTVfUkVBRChQSVBFQVNUQVQpKTsKKwlzZXFfcHJpbnRmKG0sICJQaXBlIEIgc3RhdDogICAgICAgICAlMDh4XG4iLAorCQkgICBJOTE1X1JFQUQoUElQRUJTVEFUKSk7CisJc2VxX3ByaW50ZihtLCAiSW50ZXJydXB0cyByZWNlaXZlZDogJWRcbiIsCisJCSAgIGF0b21pY19yZWFkKCZkZXZfcHJpdi0+aXJxX3JlY2VpdmVkKSk7CisJaWYgKGRldl9wcml2LT5od19zdGF0dXNfcGFnZSAhPSBOVUxMKSB7CisJCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2U6ICAgICVkXG4iLAorCQkJICAgaTkxNV9nZXRfZ2VtX3NlcW5vKGRldikpOworCX0gZWxzZSB7CisJCXNlcV9wcmludGYobSwgIkN1cnJlbnQgc2VxdWVuY2U6ICAgIGh3cyB1bmluaXRpYWxpemVkXG4iKTsKKwl9CisJc2VxX3ByaW50ZihtLCAiV2FpdGVyIHNlcXVlbmNlOiAgICAgJWRcbiIsCisJCSAgIGRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyk7CisJc2VxX3ByaW50ZihtLCAiSVJRIHNlcXVlbmNlOiAgICAgICAgJWRcbiIsCisJCSAgIGRldl9wcml2LT5tbS5pcnFfZ2VtX3NlcW5vKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2dlbV9mZW5jZV9yZWdzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlzZXFfcHJpbnRmKG0sICJSZXNlcnZlZCBmZW5jZXMgPSAlZFxuIiwgZGV2X3ByaXYtPmZlbmNlX3JlZ19zdGFydCk7CisJc2VxX3ByaW50ZihtLCAiVG90YWwgZmVuY2VzID0gJWRcbiIsIGRldl9wcml2LT5udW1fZmVuY2VfcmVncyk7CisJZm9yIChpID0gMDsgaSA8IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7CisJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gZGV2X3ByaXYtPmZlbmNlX3JlZ3NbaV0ub2JqOworCisJCWlmIChvYmogPT0gTlVMTCkgeworCQkJc2VxX3ByaW50ZihtLCAiRmVuY2VkIG9iamVjdFslMmRdID0gdW51c2VkXG4iLCBpKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKKworCQkJb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOworCQkJc2VxX3ByaW50ZihtLCAiRmVuY2VkIG9iamVjdFslMmRdID0gJXA6ICVzICIKKwkJCQkgICAiJTA4eCAlMDh6eCAlMDh4ICVzICUwOHggJTA4eCAlZCIsCisJCQkJICAgaSwgb2JqLCBnZXRfcGluX2ZsYWcob2JqX3ByaXYpLAorCQkJCSAgIG9ial9wcml2LT5ndHRfb2Zmc2V0LAorCQkJCSAgIG9iai0+c2l6ZSwgb2JqX3ByaXYtPnN0cmlkZSwKKwkJCQkgICBnZXRfdGlsaW5nX2ZsYWcob2JqX3ByaXYpLAorCQkJCSAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKKwkJCQkgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOworCQkJaWYgKG9iai0+bmFtZSkKKwkJCQlzZXFfcHJpbnRmKG0sICIgKG5hbWU6ICVkKSIsIG9iai0+bmFtZSk7CisJCQlzZXFfcHJpbnRmKG0sICJcbiIpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9od3NfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaTsKKwl2b2xhdGlsZSB1MzIgKmh3czsKKworCWh3cyA9ICh2b2xhdGlsZSB1MzIgKilkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2U7CisJaWYgKGh3cyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCA0MDk2IC8gc2l6ZW9mKHUzMikgLyA0OyBpICs9IDQpIHsKKwkJc2VxX3ByaW50ZihtLCAiMHglMDh4OiAweCUwOHggMHglMDh4IDB4JTA4eCAweCUwOHhcbiIsCisJCQkgICBpICogNCwKKwkJCSAgIGh3c1tpXSwgaHdzW2kgKyAxXSwgaHdzW2kgKyAyXSwgaHdzW2kgKyAzXSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgaTkxNV9nZW1fZGVidWdmc19saXN0W10gPSB7CisJeyJpOTE1X2dlbV9hY3RpdmUiLCBpOTE1X2dlbV9vYmplY3RfbGlzdF9pbmZvLCAwLCAodm9pZCAqKSBBQ1RJVkVfTElTVH0sCisJeyJpOTE1X2dlbV9mbHVzaGluZyIsIGk5MTVfZ2VtX29iamVjdF9saXN0X2luZm8sIDAsICh2b2lkICopIEZMVVNISU5HX0xJU1R9LAorCXsiaTkxNV9nZW1faW5hY3RpdmUiLCBpOTE1X2dlbV9vYmplY3RfbGlzdF9pbmZvLCAwLCAodm9pZCAqKSBJTkFDVElWRV9MSVNUfSwKKwl7Imk5MTVfZ2VtX3JlcXVlc3QiLCBpOTE1X2dlbV9yZXF1ZXN0X2luZm8sIDB9LAorCXsiaTkxNV9nZW1fc2Vxbm8iLCBpOTE1X2dlbV9zZXFub19pbmZvLCAwfSwKKwl7Imk5MTVfZ2VtX2ZlbmNlX3JlZ3MiLCBpOTE1X2dlbV9mZW5jZV9yZWdzX2luZm8sIDB9LAorCXsiaTkxNV9nZW1faW50ZXJydXB0IiwgaTkxNV9pbnRlcnJ1cHRfaW5mbywgMH0sCisJeyJpOTE1X2dlbV9od3MiLCBpOTE1X2h3c19pbmZvLCAwfSwKK307CisjZGVmaW5lIEk5MTVfR0VNX0RFQlVHRlNfRU5UUklFUyBBUlJBWV9TSVpFKGk5MTVfZ2VtX2RlYnVnZnNfbGlzdCkKKworaW50IGk5MTVfZ2VtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKK3sKKwlyZXR1cm4gZHJtX2RlYnVnZnNfY3JlYXRlX2ZpbGVzKGk5MTVfZ2VtX2RlYnVnZnNfbGlzdCwKKwkJCQkJSTkxNV9HRU1fREVCVUdGU19FTlRSSUVTLAorCQkJCQltaW5vci0+ZGVidWdmc19yb290LCBtaW5vcik7Cit9CisKK3ZvaWQgaTkxNV9nZW1fZGVidWdmc19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQoreworCWRybV9kZWJ1Z2ZzX3JlbW92ZV9maWxlcyhpOTE1X2dlbV9kZWJ1Z2ZzX2xpc3QsCisJCQkJIEk5MTVfR0VNX0RFQlVHRlNfRU5UUklFUywgbWlub3IpOworfQorCisjZW5kaWYgLyogQ09ORklHX0RFQlVHX0ZTICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Byb2MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQxYjlkZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9wcm9jLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDA4IEludGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgICBFcmljIEFuaG9sdCA8ZXJpY0BhbmhvbHQubmV0PgotICogICAgS2VpdGggUGFja2FyZCA8a2VpdGhwQGtlaXRocC5jb20+Ci0gKgotICovCi0KLSNpbmNsdWRlICJkcm1QLmgiCi0jaW5jbHVkZSAiZHJtLmgiCi0jaW5jbHVkZSAiaTkxNV9kcm0uaCIKLSNpbmNsdWRlICJpOTE1X2Rydi5oIgotCi1zdGF0aWMgaW50IGk5MTVfZ2VtX2FjdGl2ZV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkJaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXY7Ci0JaW50IGxlbiA9IDA7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQlEUk1fUFJPQ19QUklOVCgiQWN0aXZlOlxuIik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmpfcHJpdiwgJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCwKLQkJCSAgICBsaXN0KQotCXsKLQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmpfcHJpdi0+b2JqOwotCQlpZiAob2JqLT5uYW1lKSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgiICAgICVwKCVkKTogJTA4eCAlMDh4ICVkXG4iLAotCQkJCSAgICAgICBvYmosIG9iai0+bmFtZSwKLQkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAotCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCQl9IGVsc2UgewotCQkJRFJNX1BST0NfUFJJTlQoIiAgICAgICAlcDogJTA4eCAlMDh4ICVkXG4iLAotCQkJCSAgICAgICBvYmosCi0JCQkJICAgICAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKLQkJCQkgICAgICAgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKLQkJfQotCX0KLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotc3RhdGljIGludCBpOTE1X2dlbV9mbHVzaGluZ19pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkJICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQlpbnQgbGVuID0gMDsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCURSTV9QUk9DX1BSSU5UKCJGbHVzaGluZzpcbiIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCwKLQkJCSAgICBsaXN0KQotCXsKLQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmpfcHJpdi0+b2JqOwotCQlpZiAob2JqLT5uYW1lKSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgiICAgICVwKCVkKTogJTA4eCAlMDh4ICVkXG4iLAotCQkJCSAgICAgICBvYmosIG9iai0+bmFtZSwKLQkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAotCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCQl9IGVsc2UgewotCQkJRFJNX1BST0NfUFJJTlQoIiAgICAgICAlcDogJTA4eCAlMDh4ICVkXG4iLCBvYmosCi0JCQkJICAgICAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKLQkJCQkgICAgICAgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKLQkJfQotCX0KLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotc3RhdGljIGludCBpOTE1X2dlbV9pbmFjdGl2ZV9pbmZvKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsCi0JCQkJICBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdjsKLQlpbnQgbGVuID0gMDsKLQotCWlmIChvZmZzZXQgPiBEUk1fUFJPQ19MSU1JVCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCURSTV9QUk9DX1BSSU5UKCJJbmFjdGl2ZTpcbiIpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uaW5hY3RpdmVfbGlzdCwKLQkJCSAgICBsaXN0KQotCXsKLQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmpfcHJpdi0+b2JqOwotCQlpZiAob2JqLT5uYW1lKSB7Ci0JCQlEUk1fUFJPQ19QUklOVCgiICAgICVwKCVkKTogJTA4eCAlMDh4ICVkXG4iLAotCQkJCSAgICAgICBvYmosIG9iai0+bmFtZSwKLQkJCQkgICAgICAgb2JqLT5yZWFkX2RvbWFpbnMsIG9iai0+d3JpdGVfZG9tYWluLAotCQkJCSAgICAgICBvYmpfcHJpdi0+bGFzdF9yZW5kZXJpbmdfc2Vxbm8pOwotCQl9IGVsc2UgewotCQkJRFJNX1BST0NfUFJJTlQoIiAgICAgICAlcDogJTA4eCAlMDh4ICVkXG4iLCBvYmosCi0JCQkJICAgICAgIG9iai0+cmVhZF9kb21haW5zLCBvYmotPndyaXRlX2RvbWFpbiwKLQkJCQkgICAgICAgb2JqX3ByaXYtPmxhc3RfcmVuZGVyaW5nX3NlcW5vKTsKLQkJfQotCX0KLQlpZiAobGVuID4gcmVxdWVzdCArIG9mZnNldCkKLQkJcmV0dXJuIHJlcXVlc3Q7Ci0JKmVvZiA9IDE7Ci0JcmV0dXJuIGxlbiAtIG9mZnNldDsKLX0KLQotc3RhdGljIGludCBpOTE1X2dlbV9yZXF1ZXN0X2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCQkgaW50IHJlcXVlc3QsIGludCAqZW9mLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yID0gKHN0cnVjdCBkcm1fbWlub3IgKikgZGF0YTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbWlub3ItPmRldjsKLQlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKmdlbV9yZXF1ZXN0OwotCWludCBsZW4gPSAwOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkqc3RhcnQgPSAmYnVmW29mZnNldF07Ci0JKmVvZiA9IDA7Ci0JRFJNX1BST0NfUFJJTlQoIlJlcXVlc3Q6XG4iKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdlbV9yZXF1ZXN0LCAmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCwKLQkJCSAgICBsaXN0KQotCXsKLQkJRFJNX1BST0NfUFJJTlQoIiAgICAlZCBAICVkXG4iLAotCQkJICAgICAgIGdlbV9yZXF1ZXN0LT5zZXFubywKLQkJCSAgICAgICAoaW50KSAoamlmZmllcyAtIGdlbV9yZXF1ZXN0LT5lbWl0dGVkX2ppZmZpZXMpKTsKLQl9Ci0JaWYgKGxlbiA+IHJlcXVlc3QgKyBvZmZzZXQpCi0JCXJldHVybiByZXF1ZXN0OwotCSplb2YgPSAxOwotCXJldHVybiBsZW4gLSBvZmZzZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaTkxNV9nZW1fc2Vxbm9faW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGxlbiA9IDA7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQlpZiAoZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlICE9IE5VTEwpIHsKLQkJRFJNX1BST0NfUFJJTlQoIkN1cnJlbnQgc2VxdWVuY2U6ICVkXG4iLAotCQkJICAgICAgIGk5MTVfZ2V0X2dlbV9zZXFubyhkZXYpKTsKLQl9IGVsc2UgewotCQlEUk1fUFJPQ19QUklOVCgiQ3VycmVudCBzZXF1ZW5jZTogaHdzIHVuaW5pdGlhbGl6ZWRcbiIpOwotCX0KLQlEUk1fUFJPQ19QUklOVCgiV2FpdGVyIHNlcXVlbmNlOiAgJWRcbiIsCi0JCSAgICAgICBkZXZfcHJpdi0+bW0ud2FpdGluZ19nZW1fc2Vxbm8pOwotCURSTV9QUk9DX1BSSU5UKCJJUlEgc2VxdWVuY2U6ICAgICAlZFxuIiwgZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8pOwotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi0KLXN0YXRpYyBpbnQgaTkxNV9pbnRlcnJ1cHRfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zmc2V0LAotCQkJICAgICAgIGludCByZXF1ZXN0LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZHJtX21pbm9yICptaW5vciA9IChzdHJ1Y3QgZHJtX21pbm9yICopIGRhdGE7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG1pbm9yLT5kZXY7Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGxlbiA9IDA7Ci0KLQlpZiAob2Zmc2V0ID4gRFJNX1BST0NfTElNSVQpIHsKLQkJKmVvZiA9IDE7Ci0JCXJldHVybiAwOwotCX0KLQotCSpzdGFydCA9ICZidWZbb2Zmc2V0XTsKLQkqZW9mID0gMDsKLQlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0IGVuYWJsZTogICAgJTA4eFxuIiwKLQkJICAgICAgIEk5MTVfUkVBRChJRVIpKTsKLQlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0IGlkZW50aXR5OiAgJTA4eFxuIiwKLQkJICAgICAgIEk5MTVfUkVBRChJSVIpKTsKLQlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0IG1hc2s6ICAgICAgJTA4eFxuIiwKLQkJICAgICAgIEk5MTVfUkVBRChJTVIpKTsKLQlEUk1fUFJPQ19QUklOVCgiUGlwZSBBIHN0YXQ6ICAgICAgICAgJTA4eFxuIiwKLQkJICAgICAgIEk5MTVfUkVBRChQSVBFQVNUQVQpKTsKLQlEUk1fUFJPQ19QUklOVCgiUGlwZSBCIHN0YXQ6ICAgICAgICAgJTA4eFxuIiwKLQkJICAgICAgIEk5MTVfUkVBRChQSVBFQlNUQVQpKTsKLQlEUk1fUFJPQ19QUklOVCgiSW50ZXJydXB0cyByZWNlaXZlZDogJWRcbiIsCi0JCSAgICAgICBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPmlycV9yZWNlaXZlZCkpOwotCWlmIChkZXZfcHJpdi0+aHdfc3RhdHVzX3BhZ2UgIT0gTlVMTCkgewotCQlEUk1fUFJPQ19QUklOVCgiQ3VycmVudCBzZXF1ZW5jZTogICAgJWRcbiIsCi0JCQkgICAgICAgaTkxNV9nZXRfZ2VtX3NlcW5vKGRldikpOwotCX0gZWxzZSB7Ci0JCURSTV9QUk9DX1BSSU5UKCJDdXJyZW50IHNlcXVlbmNlOiAgICBod3MgdW5pbml0aWFsaXplZFxuIik7Ci0JfQotCURSTV9QUk9DX1BSSU5UKCJXYWl0ZXIgc2VxdWVuY2U6ICAgICAlZFxuIiwKLQkJICAgICAgIGRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyk7Ci0JRFJNX1BST0NfUFJJTlQoIklSUSBzZXF1ZW5jZTogICAgICAgICVkXG4iLAotCQkgICAgICAgZGV2X3ByaXYtPm1tLmlycV9nZW1fc2Vxbm8pOwotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi1zdGF0aWMgaW50IGk5MTVfaHdzX2luZm8oY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJCSBpbnQgcmVxdWVzdCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRybV9taW5vciAqbWlub3IgPSAoc3RydWN0IGRybV9taW5vciAqKSBkYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBtaW5vci0+ZGV2OwotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCBsZW4gPSAwLCBpOwotCXZvbGF0aWxlIHUzMiAqaHdzOwotCi0JaWYgKG9mZnNldCA+IERSTV9QUk9DX0xJTUlUKSB7Ci0JCSplb2YgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlod3MgPSAodm9sYXRpbGUgdTMyICopZGV2X3ByaXYtPmh3X3N0YXR1c19wYWdlOwotCWlmIChod3MgPT0gTlVMTCkgewotCQkqZW9mID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JKnN0YXJ0ID0gJmJ1ZltvZmZzZXRdOwotCSplb2YgPSAwOwotCWZvciAoaSA9IDA7IGkgPCA0MDk2IC8gc2l6ZW9mKHUzMikgLyA0OyBpICs9IDQpIHsKLQkJRFJNX1BST0NfUFJJTlQoIjB4JTA4eDogMHglMDh4IDB4JTA4eCAweCUwOHggMHglMDh4XG4iLAotCQkJICAgICAgIGkgKiA0LAotCQkJICAgICAgIGh3c1tpXSwgaHdzW2kgKyAxXSwgaHdzW2kgKyAyXSwgaHdzW2kgKyAzXSk7Ci0JfQotCWlmIChsZW4gPiByZXF1ZXN0ICsgb2Zmc2V0KQotCQlyZXR1cm4gcmVxdWVzdDsKLQkqZW9mID0gMTsKLQlyZXR1cm4gbGVuIC0gb2Zmc2V0OwotfQotCi1zdGF0aWMgc3RydWN0IGRybV9wcm9jX2xpc3QgewotCS8qKiBmaWxlIG5hbWUgKi8KLQljb25zdCBjaGFyICpuYW1lOwotCS8qKiBwcm9jIGNhbGxiYWNrKi8KLQlpbnQgKCpmKSAoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsKLX0gaTkxNV9nZW1fcHJvY19saXN0W10gPSB7Ci0JeyJpOTE1X2dlbV9hY3RpdmUiLCBpOTE1X2dlbV9hY3RpdmVfaW5mb30sCi0JeyJpOTE1X2dlbV9mbHVzaGluZyIsIGk5MTVfZ2VtX2ZsdXNoaW5nX2luZm99LAotCXsiaTkxNV9nZW1faW5hY3RpdmUiLCBpOTE1X2dlbV9pbmFjdGl2ZV9pbmZvfSwKLQl7Imk5MTVfZ2VtX3JlcXVlc3QiLCBpOTE1X2dlbV9yZXF1ZXN0X2luZm99LAotCXsiaTkxNV9nZW1fc2Vxbm8iLCBpOTE1X2dlbV9zZXFub19pbmZvfSwKLQl7Imk5MTVfZ2VtX2ludGVycnVwdCIsIGk5MTVfaW50ZXJydXB0X2luZm99LAotCXsiaTkxNV9nZW1faHdzIiwgaTkxNV9od3NfaW5mb30sCi19OwotCi0jZGVmaW5lIEk5MTVfR0VNX1BST0NfRU5UUklFUyBBUlJBWV9TSVpFKGk5MTVfZ2VtX3Byb2NfbGlzdCkKLQotaW50IGk5MTVfZ2VtX3Byb2NfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQlpbnQgaSwgajsKLQotCWZvciAoaSA9IDA7IGkgPCBJOTE1X0dFTV9QUk9DX0VOVFJJRVM7IGkrKykgewotCQllbnQgPSBjcmVhdGVfcHJvY19lbnRyeShpOTE1X2dlbV9wcm9jX2xpc3RbaV0ubmFtZSwKLQkJCQkJU19JRlJFRyB8IFNfSVJVR08sIG1pbm9yLT5kZXZfcm9vdCk7Ci0JCWlmICghZW50KSB7Ci0JCQlEUk1fRVJST1IoIkNhbm5vdCBjcmVhdGUgL3Byb2MvZHJpLy4uLi8lc1xuIiwKLQkJCQkgIGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lKTsKLQkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCi0JCQkJcmVtb3ZlX3Byb2NfZW50cnkoaTkxNV9nZW1fcHJvY19saXN0W2ldLm5hbWUsCi0JCQkJCQkgIG1pbm9yLT5kZXZfcm9vdCk7Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQkJZW50LT5yZWFkX3Byb2MgPSBpOTE1X2dlbV9wcm9jX2xpc3RbaV0uZjsKLQkJZW50LT5kYXRhID0gbWlub3I7Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkIGk5MTVfZ2VtX3Byb2NfY2xlYW51cChzdHJ1Y3QgZHJtX21pbm9yICptaW5vcikKLXsKLQlpbnQgaTsKLQotCWlmICghbWlub3ItPmRldl9yb290KQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9HRU1fUFJPQ19FTlRSSUVTOyBpKyspCi0JCXJlbW92ZV9wcm9jX2VudHJ5KGk5MTVfZ2VtX3Byb2NfbGlzdFtpXS5uYW1lLCBtaW5vci0+ZGV2X3Jvb3QpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwppbmRleCA3ZmI0MTkxLi40Y2NlMWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYwpAQCAtOTYsMTYgKzk2LDE2IEBACiAJCSAqLwogCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKIAkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX05PTkU7Ci0JfSBlbHNlIGlmICgoIUlTX0k5NjVHKGRldikgJiYgIUlTX0czMyhkZXYpKSB8fCBJU19JOTY1R00oZGV2KSB8fAotCQkgICBJU19HTTQ1KGRldikpIHsKKwl9IGVsc2UgaWYgKElTX01PQklMRShkZXYpKSB7CiAJCXVpbnQzMl90IGRjYzsKIAotCQkvKiBPbiA5MTUtOTQ1IGFuZCBHTTk2NSwgY2hhbm5lbCBpbnRlcmxlYXZlIGJ5IHRoZSBDUFUgaXMKLQkJICogZGV0ZXJtaW5lZCBieSBEQ0MuICBUaGUgQ1BVIHdpbGwgYWx0ZXJuYXRlIGJhc2VkIG9uIGJpdCA2Ci0JCSAqIGluIGludGVybGVhdmVkIG1vZGUsIGFuZCB0aGUgR1BVIHdpbGwgdGhlbiBhbHNvIGFsdGVybmF0ZQotCQkgKiBvbiBiaXQgNiwgOSwgYW5kIDEwIGZvciBYLCBidXQgdGhlIENQVSBtYXkgYWxzbyBvcHRpb25hbGx5Ci0JCSAqIGFsdGVybmF0ZSBiYXNlZCBvbiBiaXQgMTcgKFhPUiBub3QgZGlzYWJsZWQgYW5kIFhPUgotCQkgKiBiaXQgPT0gMTcpLgorCQkvKiBPbiBtb2JpbGUgOXh4IGNoaXBzZXRzLCBjaGFubmVsIGludGVybGVhdmUgYnkgdGhlIENQVSBpcworCQkgKiBkZXRlcm1pbmVkIGJ5IERDQy4gIEZvciBzaW5nbGUtY2hhbm5lbCwgbmVpdGhlciB0aGUgQ1BVCisJCSAqIG5vciB0aGUgR1BVIGRvIHN3aXp6bGluZy4gIEZvciBkdWFsIGNoYW5uZWwgaW50ZXJsZWF2ZWQsCisJCSAqIHRoZSBHUFUncyBpbnRlcmxlYXZlIGlzIGJpdCA5IGFuZCAxMCBmb3IgWCB0aWxlZCwgYW5kIGJpdAorCQkgKiA5IGZvciBZIHRpbGVkLiAgVGhlIENQVSdzIGludGVybGVhdmUgaXMgaW5kZXBlbmRlbnQsIGFuZAorCQkgKiBjYW4gYmUgYmFzZWQgb24gZWl0aGVyIGJpdCAxMSAoaGF2ZW4ndCBzZWVuIHRoaXMgeWV0KSBvcgorCQkgKiBiaXQgMTcgKGNvbW1vbikuCiAJCSAqLwogCQlkY2MgPSBJOTE1X1JFQUQoRENDKTsKIAkJc3dpdGNoIChkY2MgJiBEQ0NfQUREUkVTU0lOR19NT0RFX01BU0spIHsKQEAgLTExNSwxOSArMTE1LDE4IEBACiAJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfTk9ORTsKIAkJCWJyZWFrOwogCQljYXNlIERDQ19BRERSRVNTSU5HX01PREVfRFVBTF9DSEFOTkVMX0lOVEVSTEVBVkVEOgotCQkJaWYgKElTX0k5MTVHKGRldikgfHwgSVNfSTkxNUdNKGRldikgfHwKLQkJCSAgICBkY2MgJiBEQ0NfQ0hBTk5FTF9YT1JfRElTQUJMRSkgeworCQkJaWYgKGRjYyAmIERDQ19DSEFOTkVMX1hPUl9ESVNBQkxFKSB7CisJCQkJLyogVGhpcyBpcyB0aGUgYmFzZSBzd2l6emxpbmcgYnkgdGhlIEdQVSBmb3IKKwkJCQkgKiB0aWxlZCBidWZmZXJzLgorCQkJCSAqLwogCQkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV85XzEwOwogCQkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV85OwotCQkJfSBlbHNlIGlmICgoSVNfSTk2NUdNKGRldikgfHwgSVNfR000NShkZXYpKSAmJgotCQkJCSAgIChkY2MgJiBEQ0NfQ0hBTk5FTF9YT1JfQklUXzE3KSA9PSAwKSB7Ci0JCQkJLyogR005NjUvR000NSBkb2VzIGVpdGhlciBiaXQgMTEgb3IgYml0IDE3Ci0JCQkJICogc3dpenpsaW5nLgotCQkJCSAqLworCQkJfSBlbHNlIGlmICgoZGNjICYgRENDX0NIQU5ORUxfWE9SX0JJVF8xNykgPT0gMCkgeworCQkJCS8qIEJpdCAxMSBzd2l6emxpbmcgYnkgdGhlIENQVSBpbiBhZGRpdGlvbi4gKi8KIAkJCQlzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMF8xMTsKIAkJCQlzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfOV8xMTsKIAkJCX0gZWxzZSB7Ci0JCQkJLyogQml0IDE3IG9yIHBlcmhhcHMgb3RoZXIgc3dpenpsaW5nICovCisJCQkJLyogQml0IDE3IHN3aXp6bGluZyBieSB0aGUgQ1BVIGluIGFkZGl0aW9uLiAqLwogCQkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOwogCQkJCXN3aXp6bGVfeSA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggOTA2MDBkOC4uMzc3Y2M1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC0zNTksNiArMzU5LDcgQEAKICNkZWZpbmUgICBEUExMQl9MVkRTX1AyX0NMT0NLX0RJVl83CSgxIDw8IDI0KSAvKiBpOTE1ICovCiAjZGVmaW5lICAgRFBMTF9QMl9DTE9DS19ESVZfTUFTSwkweDAzMDAwMDAwIC8qIGk5MTUgKi8KICNkZWZpbmUgICBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0sJMHgwMGZmMDAwMCAvKiBpOTE1ICovCisjZGVmaW5lICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLX0lHRAkweDAwZmY4MDAwIC8qIElHRCAqLwogCiAjZGVmaW5lIEk5MTVfRklGT19VTkRFUlJVTl9TVEFUVVMJCSgxVUw8PDMxKQogI2RlZmluZSBJOTE1X0NSQ19FUlJPUl9FTkFCTEUJCQkoMVVMPDwyOSkKQEAgLTQzNSw2ICs0MzYsNyBAQAogICovCiAjZGVmaW5lICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9NQVNLX0k4MzBfTFZEUwkweDAwM2YwMDAwCiAjZGVmaW5lICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVAkxNgorI2RlZmluZSAgIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlRfSUdEIDE1CiAvKiBpODMwLCByZXF1aXJlZCBpbiBEVk8gbm9uLWdhbmcgKi8KICNkZWZpbmUgICBQTExfUDJfRElWSURFX0JZXzQJCSgxIDw8IDIzKQogI2RlZmluZSAgIFBMTF9QMV9ESVZJREVfQllfVFdPCQkoMSA8PCAyMSkgLyogaTgzMCAqLwpAQCAtNTAxLDEwICs1MDMsMTIgQEAKICNkZWZpbmUgRlBCMAkweDA2MDQ4CiAjZGVmaW5lIEZQQjEJMHgwNjA0YwogI2RlZmluZSAgIEZQX05fRElWX01BU0sJCTB4MDAzZjAwMDAKKyNkZWZpbmUgICBGUF9OX0lHRF9ESVZfTUFTSwkweDAwZmYwMDAwCiAjZGVmaW5lICAgRlBfTl9ESVZfU0hJRlQJCTE2CiAjZGVmaW5lICAgRlBfTTFfRElWX01BU0sJMHgwMDAwM2YwMAogI2RlZmluZSAgIEZQX00xX0RJVl9TSElGVAkJIDgKICNkZWZpbmUgICBGUF9NMl9ESVZfTUFTSwkweDAwMDAwMDNmCisjZGVmaW5lICAgRlBfTTJfSUdEX0RJVl9NQVNLCTB4MDAwMDAwZmYKICNkZWZpbmUgICBGUF9NMl9ESVZfU0hJRlQJCSAwCiAjZGVmaW5lIERQTExfVEVTVAkweDYwNmMKICNkZWZpbmUgICBEUExMQl9URVNUX1NEVk9fRElWXzEJCSgwIDw8IDIyKQpAQCAtNjI5LDYgKzYzMywyMiBAQAogI2RlZmluZSAgIFRWX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgMTgpCiAjZGVmaW5lICAgQ1JUX0hPVFBMVUdfSU5UX0VOCQkJKDEgPDwgOSkKICNkZWZpbmUgICBDUlRfSE9UUExVR19GT1JDRV9ERVRFQ1QJCSgxIDw8IDMpCisjZGVmaW5lIENSVF9IT1RQTFVHX0FDVElWQVRJT05fUEVSSU9EXzMyCSgwIDw8IDgpCisvKiBtdXN0IHVzZSBwZXJpb2QgNjQgb24gR000NSBhY2NvcmRpbmcgdG8gZG9jcyAqLworI2RlZmluZSBDUlRfSE9UUExVR19BQ1RJVkFUSU9OX1BFUklPRF82NAkoMSA8PCA4KQorI2RlZmluZSBDUlRfSE9UUExVR19EQUNfT05fVElNRV8yTQkJKDAgPDwgNykKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfREFDX09OX1RJTUVfNE0JCSgxIDw8IDcpCisjZGVmaW5lIENSVF9IT1RQTFVHX1ZPTFRBR0VfQ09NUEFSRV80MAkJKDAgPDwgNSkKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfVk9MVEFHRV9DT01QQVJFXzUwCQkoMSA8PCA1KQorI2RlZmluZSBDUlRfSE9UUExVR19WT0xUQUdFX0NPTVBBUkVfNjAJCSgyIDw8IDUpCisjZGVmaW5lIENSVF9IT1RQTFVHX1ZPTFRBR0VfQ09NUEFSRV83MAkJKDMgPDwgNSkKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfVk9MVEFHRV9DT01QQVJFX01BU0sJKDMgPDwgNSkKKyNkZWZpbmUgQ1JUX0hPVFBMVUdfREVURUNUX0RFTEFZXzFHCQkoMCA8PCA0KQorI2RlZmluZSBDUlRfSE9UUExVR19ERVRFQ1RfREVMQVlfMkcJCSgxIDw8IDQpCisjZGVmaW5lIENSVF9IT1RQTFVHX0RFVEVDVF9WT0xUQUdFXzMyNU1WCSgwIDw8IDIpCisjZGVmaW5lIENSVF9IT1RQTFVHX0RFVEVDVF9WT0xUQUdFXzQ3NU1WCSgxIDw8IDIpCisjZGVmaW5lIENSVF9IT1RQTFVHX01BU0sJCQkoMHgzZmMpIC8qIEJpdHMgOS0yICovCisKIAogI2RlZmluZSBQT1JUX0hPVFBMVUdfU1RBVAkweDYxMTE0CiAjZGVmaW5lICAgSERNSUJfSE9UUExVR19JTlRfU1RBVFVTCQkoMSA8PCAyOSkKQEAgLTg1Niw3ICs4NzYsNyBAQAogICovCiAjIGRlZmluZSBUVl9FTkNfQzBfRklYCQkJKDEgPDwgMTApCiAvKiogQml0cyB0aGF0IG11c3QgYmUgcHJlc2VydmVkIGJ5IHNvZnR3YXJlICovCi0jIGRlZmluZSBUVl9DVExfU0FWRQkJCSgoMyA8PCA4KSB8ICgzIDw8IDYpKQorIyBkZWZpbmUgVFZfQ1RMX1NBVkUJCQkoKDEgPDwgMTEpIHwgKDMgPDwgOSkgfCAoNyA8PCA2KSB8IDB4ZikKICMgZGVmaW5lIFRWX0ZVU0VfU1RBVEVfTUFTSwkJKDMgPDwgNCkKIC8qKiBSZWFkLW9ubHkgc3RhdGUgdGhhdCByZXBvcnRzIGFsbCBmZWF0dXJlcyBlbmFibGVkICovCiAjIGRlZmluZSBUVl9GVVNFX1NUQVRFX0VOQUJMRUQJCSgwIDw8IDQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmgKaW5kZXggNWVhNzE1YS4uZGU2MjFhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuaApAQCAtMTYyLDEzICsxNjIsMTMgQEAKIAl1OCBwYW5lbF90eXBlOwogCXU4IHJzdmQxOwogCS8qIExWRFMgY2FwYWJpbGl0aWVzLCBzdG9yZWQgaW4gYSBkd29yZCAqLwotCXU4IHJzdmQyOjE7Ci0JdTggbHZkc19lZGlkOjE7Ci0JdTggcGl4ZWxfZGl0aGVyOjE7Ci0JdTggcGZpdF9yYXRpb19hdXRvOjE7Ci0JdTggcGZpdF9nZnhfbW9kZV9lbmhhbmNlZDoxOwotCXU4IHBmaXRfdGV4dF9tb2RlX2VuaGFuY2VkOjE7CiAJdTggcGZpdF9tb2RlOjI7CisJdTggcGZpdF90ZXh0X21vZGVfZW5oYW5jZWQ6MTsKKwl1OCBwZml0X2dmeF9tb2RlX2VuaGFuY2VkOjE7CisJdTggcGZpdF9yYXRpb19hdXRvOjE7CisJdTggcGl4ZWxfZGl0aGVyOjE7CisJdTggbHZkc19lZGlkOjE7CisJdTggcnN2ZDI6MTsKIAl1OCByc3ZkNDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKaW5kZXggZGNhZWQzNC4uMmI2ZDQ0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY3J0LmMKQEAgLTY0LDExICs2NCwyMSBAQAogc3RhdGljIGludCBpbnRlbF9jcnRfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKworCWludCBtYXhfY2xvY2sgPSAwOwogCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikKIAkJcmV0dXJuIE1PREVfTk9fREJMRVNDQU47CiAKLQlpZiAobW9kZS0+Y2xvY2sgPiA0MDAwMDAgfHwgbW9kZS0+Y2xvY2sgPCAyNTAwMCkKLQkJcmV0dXJuIE1PREVfQ0xPQ0tfUkFOR0U7CisJaWYgKG1vZGUtPmNsb2NrIDwgMjUwMDApCisJCXJldHVybiBNT0RFX0NMT0NLX0xPVzsKKworCWlmICghSVNfSTlYWChkZXYpKQorCQltYXhfY2xvY2sgPSAzNTAwMDA7CisJZWxzZQorCQltYXhfY2xvY2sgPSA0MDAwMDA7CisJaWYgKG1vZGUtPmNsb2NrID4gbWF4X2Nsb2NrKQorCQlyZXR1cm4gTU9ERV9DTE9DS19ISUdIOwogCiAJcmV0dXJuIE1PREVfT0s7CiB9CkBAIC0xMTMsMTAgKzEyMywxMyBAQAogCWlmIChhZGp1c3RlZF9tb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfUFZTWU5DKQogCQlhZHBhIHw9IEFEUEFfVlNZTkNfQUNUSVZFX0hJR0g7CiAKLQlpZiAoaW50ZWxfY3J0Yy0+cGlwZSA9PSAwKQorCWlmIChpbnRlbF9jcnRjLT5waXBlID09IDApIHsKIAkJYWRwYSB8PSBBRFBBX1BJUEVfQV9TRUxFQ1Q7Ci0JZWxzZQorCQlJOTE1X1dSSVRFKEJDTFJQQVRfQSwgMCk7CisJfSBlbHNlIHsKIAkJYWRwYSB8PSBBRFBBX1BJUEVfQl9TRUxFQ1Q7CisJCUk5MTVfV1JJVEUoQkNMUlBBVF9CLCAwKTsKKwl9CiAKIAlJOTE1X1dSSVRFKEFEUEEsIGFkcGEpOwogfQpAQCAtMTMzLDIwICsxNDYsMzkgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgdGVtcDsKKwl1MzIgaG90cGx1Z19lbjsKKwlpbnQgaSwgdHJpZXMgPSAwOworCS8qCisJICogT24gNCBzZXJpZXMgZGVza3RvcCwgQ1JUIGRldGVjdCBzZXF1ZW5jZSBuZWVkIHRvIGJlIGRvbmUgdHdpY2UKKwkgKiB0byBnZXQgYSByZWxpYWJsZSByZXN1bHQuCisJICovCiAKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKTsKKwlpZiAoSVNfRzRYKGRldikgJiYgIUlTX0dNNDUoZGV2KSkKKwkJdHJpZXMgPSAyOworCWVsc2UKKwkJdHJpZXMgPSAxOworCWhvdHBsdWdfZW4gPSBJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKTsKKwlob3RwbHVnX2VuICY9IH4oQ1JUX0hPVFBMVUdfTUFTSyk7CisJaG90cGx1Z19lbiB8PSBDUlRfSE9UUExVR19GT1JDRV9ERVRFQ1Q7CiAKLQl0ZW1wID0gSTkxNV9SRUFEKFBPUlRfSE9UUExVR19FTik7CisJaWYgKElTX0dNNDUoZGV2KSkKKwkJaG90cGx1Z19lbiB8PSBDUlRfSE9UUExVR19BQ1RJVkFUSU9OX1BFUklPRF82NDsKIAotCUk5MTVfV1JJVEUoUE9SVF9IT1RQTFVHX0VOLAotCQkgICB0ZW1wIHwgQ1JUX0hPVFBMVUdfRk9SQ0VfREVURUNUIHwgKDEgPDwgNSkpOworCWhvdHBsdWdfZW4gfD0gQ1JUX0hPVFBMVUdfVk9MVEFHRV9DT01QQVJFXzUwOwogCi0JZG8gewotCQlpZiAoIShJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKSAmIENSVF9IT1RQTFVHX0ZPUkNFX0RFVEVDVCkpCi0JCQlicmVhazsKLQkJbXNsZWVwKDEpOwotCX0gd2hpbGUgKHRpbWVfYWZ0ZXIodGltZW91dCwgamlmZmllcykpOworCWZvciAoaSA9IDA7IGkgPCB0cmllcyA7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJCS8qIHR1cm4gb24gdGhlIEZPUkNFX0RFVEVDVCAqLworCQlJOTE1X1dSSVRFKFBPUlRfSE9UUExVR19FTiwgaG90cGx1Z19lbik7CisJCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxMDAwKTsKKwkJLyogd2FpdCBmb3IgRk9SQ0VfREVURUNUIHRvIGdvIG9mZiAqLworCQlkbyB7CisJCQlpZiAoIShJOTE1X1JFQUQoUE9SVF9IT1RQTFVHX0VOKSAmCisJCQkJCUNSVF9IT1RQTFVHX0ZPUkNFX0RFVEVDVCkpCisJCQkJYnJlYWs7CisJCQltc2xlZXAoMSk7CisJCX0gd2hpbGUgKHRpbWVfYWZ0ZXIodGltZW91dCwgamlmZmllcykpOworCX0KIAogCWlmICgoSTkxNV9SRUFEKFBPUlRfSE9UUExVR19TVEFUKSAmIENSVF9IT1RQTFVHX01PTklUT1JfTUFTSykgPT0KIAkgICAgQ1JUX0hPVFBMVUdfTU9OSVRPUl9DT0xPUikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCBhMjgzNDI3Li5kOWM1MGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC01NiwxMSArNTYsMTMgQEAKIH0gaW50ZWxfcDJfdDsKIAogI2RlZmluZSBJTlRFTF9QMl9OVU0JCSAgICAgIDIKLQotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgaW50ZWxfbGltaXQgaW50ZWxfbGltaXRfdDsKK3N0cnVjdCBpbnRlbF9saW1pdCB7CiAgICAgaW50ZWxfcmFuZ2VfdCAgIGRvdCwgdmNvLCBuLCBtLCBtMSwgbTIsIHAsIHAxOwogICAgIGludGVsX3AyX3QJICAgIHAyOwotfSBpbnRlbF9saW1pdF90OworICAgIGJvb2wgKCogZmluZF9wbGwpKGNvbnN0IGludGVsX2xpbWl0X3QgKiwgc3RydWN0IGRybV9jcnRjICosCisJCSAgICAgIGludCwgaW50LCBpbnRlbF9jbG9ja190ICopOworfTsKIAogI2RlZmluZSBJOFhYX0RPVF9NSU4JCSAgMjUwMDAKICNkZWZpbmUgSThYWF9ET1RfTUFYCQkgMzUwMDAwCkBAIC05MCwxOCArOTIsMzIgQEAKICNkZWZpbmUgSTlYWF9ET1RfTUFYCQkgNDAwMDAwCiAjZGVmaW5lIEk5WFhfVkNPX01JTgkJMTQwMDAwMAogI2RlZmluZSBJOVhYX1ZDT19NQVgJCTI4MDAwMDAKKyNkZWZpbmUgSUdEX1ZDT19NSU4JCTE3MDAwMDAKKyNkZWZpbmUgSUdEX1ZDT19NQVgJCTM1MDAwMDAKICNkZWZpbmUgSTlYWF9OX01JTgkJICAgICAgMQogI2RlZmluZSBJOVhYX05fTUFYCQkgICAgICA2CisvKiBJR0QncyBOY291bnRlciBpcyBhIHJpbmcgY291bnRlciAqLworI2RlZmluZSBJR0RfTl9NSU4JCSAgICAgIDMKKyNkZWZpbmUgSUdEX05fTUFYCQkgICAgICA2CiAjZGVmaW5lIEk5WFhfTV9NSU4JCSAgICAgNzAKICNkZWZpbmUgSTlYWF9NX01BWAkJICAgIDEyMAorI2RlZmluZSBJR0RfTV9NSU4JCSAgICAgIDIKKyNkZWZpbmUgSUdEX01fTUFYCQkgICAgMjU2CiAjZGVmaW5lIEk5WFhfTTFfTUlOCQkgICAgIDEwCiAjZGVmaW5lIEk5WFhfTTFfTUFYCQkgICAgIDIyCiAjZGVmaW5lIEk5WFhfTTJfTUlOCQkgICAgICA1CiAjZGVmaW5lIEk5WFhfTTJfTUFYCQkgICAgICA5CisvKiBJR0QgTTEgaXMgcmVzZXJ2ZWQsIGFuZCBtdXN0IGJlIDAgKi8KKyNkZWZpbmUgSUdEX00xX01JTgkJICAgICAgMAorI2RlZmluZSBJR0RfTTFfTUFYCQkgICAgICAwCisjZGVmaW5lIElHRF9NMl9NSU4JCSAgICAgIDAKKyNkZWZpbmUgSUdEX00yX01BWAkJICAgICAgMjU0CiAjZGVmaW5lIEk5WFhfUF9TRFZPX0RBQ19NSU4JICAgICAgNQogI2RlZmluZSBJOVhYX1BfU0RWT19EQUNfTUFYCSAgICAgODAKICNkZWZpbmUgSTlYWF9QX0xWRFNfTUlOCQkgICAgICA3CiAjZGVmaW5lIEk5WFhfUF9MVkRTX01BWAkJICAgICA5OAorI2RlZmluZSBJR0RfUF9MVkRTX01JTgkJICAgICAgNworI2RlZmluZSBJR0RfUF9MVkRTX01BWAkJICAgICAxMTIKICNkZWZpbmUgSTlYWF9QMV9NSU4JCSAgICAgIDEKICNkZWZpbmUgSTlYWF9QMV9NQVgJCSAgICAgIDgKICNkZWZpbmUgSTlYWF9QMl9TRFZPX0RBQ19TTE9XCQkgICAgIDEwCkBAIC0xMTUsNiArMTMxLDk3IEBACiAjZGVmaW5lIElOVEVMX0xJTUlUX0k4WFhfTFZEUwkgICAgMQogI2RlZmluZSBJTlRFTF9MSU1JVF9JOVhYX1NEVk9fREFDICAgMgogI2RlZmluZSBJTlRFTF9MSU1JVF9JOVhYX0xWRFMJICAgIDMKKyNkZWZpbmUgSU5URUxfTElNSVRfRzRYX1NEVk8JICAgIDQKKyNkZWZpbmUgSU5URUxfTElNSVRfRzRYX0hETUlfREFDICAgNQorI2RlZmluZSBJTlRFTF9MSU1JVF9HNFhfU0lOR0xFX0NIQU5ORUxfTFZEUyAgIDYKKyNkZWZpbmUgSU5URUxfTElNSVRfRzRYX0RVQUxfQ0hBTk5FTF9MVkRTICAgNworI2RlZmluZSBJTlRFTF9MSU1JVF9JR0RfU0RWT19EQUMgICAgOAorI2RlZmluZSBJTlRFTF9MSU1JVF9JR0RfTFZEUwkgICAgOQorCisvKlRoZSBwYXJhbWV0ZXIgaXMgZm9yIFNEVk8gb24gRzR4IHBsYXRmb3JtKi8KKyNkZWZpbmUgRzRYX0RPVF9TRFZPX01JTiAgICAgICAgICAgMjUwMDAKKyNkZWZpbmUgRzRYX0RPVF9TRFZPX01BWCAgICAgICAgICAgMjcwMDAwCisjZGVmaW5lIEc0WF9WQ09fTUlOICAgICAgICAgICAgICAgIDE3NTAwMDAKKyNkZWZpbmUgRzRYX1ZDT19NQVggICAgICAgICAgICAgICAgMzUwMDAwMAorI2RlZmluZSBHNFhfTl9TRFZPX01JTiAgICAgICAgICAgICAxCisjZGVmaW5lIEc0WF9OX1NEVk9fTUFYICAgICAgICAgICAgIDQKKyNkZWZpbmUgRzRYX01fU0RWT19NSU4gICAgICAgICAgICAgMTA0CisjZGVmaW5lIEc0WF9NX1NEVk9fTUFYICAgICAgICAgICAgIDEzOAorI2RlZmluZSBHNFhfTTFfU0RWT19NSU4gICAgICAgICAgICAxNworI2RlZmluZSBHNFhfTTFfU0RWT19NQVggICAgICAgICAgICAyMworI2RlZmluZSBHNFhfTTJfU0RWT19NSU4gICAgICAgICAgICA1CisjZGVmaW5lIEc0WF9NMl9TRFZPX01BWCAgICAgICAgICAgIDExCisjZGVmaW5lIEc0WF9QX1NEVk9fTUlOICAgICAgICAgICAgIDEwCisjZGVmaW5lIEc0WF9QX1NEVk9fTUFYICAgICAgICAgICAgIDMwCisjZGVmaW5lIEc0WF9QMV9TRFZPX01JTiAgICAgICAgICAgIDEKKyNkZWZpbmUgRzRYX1AxX1NEVk9fTUFYICAgICAgICAgICAgMworI2RlZmluZSBHNFhfUDJfU0RWT19TTE9XICAgICAgICAgICAxMAorI2RlZmluZSBHNFhfUDJfU0RWT19GQVNUICAgICAgICAgICAxMAorI2RlZmluZSBHNFhfUDJfU0RWT19MSU1JVCAgICAgICAgICAyNzAwMDAKKworLypUaGUgcGFyYW1ldGVyIGlzIGZvciBIRE1JX0RBQyBvbiBHNHggcGxhdGZvcm0qLworI2RlZmluZSBHNFhfRE9UX0hETUlfREFDX01JTiAgICAgICAgICAgMjIwMDAKKyNkZWZpbmUgRzRYX0RPVF9IRE1JX0RBQ19NQVggICAgICAgICAgIDQwMDAwMAorI2RlZmluZSBHNFhfTl9IRE1JX0RBQ19NSU4gICAgICAgICAgICAgMQorI2RlZmluZSBHNFhfTl9IRE1JX0RBQ19NQVggICAgICAgICAgICAgNAorI2RlZmluZSBHNFhfTV9IRE1JX0RBQ19NSU4gICAgICAgICAgICAgMTA0CisjZGVmaW5lIEc0WF9NX0hETUlfREFDX01BWCAgICAgICAgICAgICAxMzgKKyNkZWZpbmUgRzRYX00xX0hETUlfREFDX01JTiAgICAgICAgICAgIDE2CisjZGVmaW5lIEc0WF9NMV9IRE1JX0RBQ19NQVggICAgICAgICAgICAyMworI2RlZmluZSBHNFhfTTJfSERNSV9EQUNfTUlOICAgICAgICAgICAgNQorI2RlZmluZSBHNFhfTTJfSERNSV9EQUNfTUFYICAgICAgICAgICAgMTEKKyNkZWZpbmUgRzRYX1BfSERNSV9EQUNfTUlOICAgICAgICAgICAgIDUKKyNkZWZpbmUgRzRYX1BfSERNSV9EQUNfTUFYICAgICAgICAgICAgIDgwCisjZGVmaW5lIEc0WF9QMV9IRE1JX0RBQ19NSU4gICAgICAgICAgICAxCisjZGVmaW5lIEc0WF9QMV9IRE1JX0RBQ19NQVggICAgICAgICAgICA4CisjZGVmaW5lIEc0WF9QMl9IRE1JX0RBQ19TTE9XICAgICAgICAgICAxMAorI2RlZmluZSBHNFhfUDJfSERNSV9EQUNfRkFTVCAgICAgICAgICAgNQorI2RlZmluZSBHNFhfUDJfSERNSV9EQUNfTElNSVQgICAgICAgICAgMTY1MDAwCisKKy8qVGhlIHBhcmFtZXRlciBpcyBmb3IgU0lOR0xFX0NIQU5ORUxfTFZEUyBvbiBHNHggcGxhdGZvcm0qLworI2RlZmluZSBHNFhfRE9UX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAyMDAwMAorI2RlZmluZSBHNFhfRE9UX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAxMTUwMDAKKyNkZWZpbmUgRzRYX05fU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAgMQorI2RlZmluZSBHNFhfTl9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgICAzCisjZGVmaW5lIEc0WF9NX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAgIDEwNAorI2RlZmluZSBHNFhfTV9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgICAxMzgKKyNkZWZpbmUgRzRYX00xX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAgMTcKKyNkZWZpbmUgRzRYX00xX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgMjMKKyNkZWZpbmUgRzRYX00yX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAgNQorI2RlZmluZSBHNFhfTTJfU0lOR0xFX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgICAxMQorI2RlZmluZSBHNFhfUF9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiAgICAgICAgICAgICAyOAorI2RlZmluZSBHNFhfUF9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgICAxMTIKKyNkZWZpbmUgRzRYX1AxX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAgMgorI2RlZmluZSBHNFhfUDFfU0lOR0xFX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgICA4CisjZGVmaW5lIEc0WF9QMl9TSU5HTEVfQ0hBTk5FTF9MVkRTX1NMT1cgICAgICAgICAgIDE0CisjZGVmaW5lIEc0WF9QMl9TSU5HTEVfQ0hBTk5FTF9MVkRTX0ZBU1QgICAgICAgICAgIDE0CisjZGVmaW5lIEc0WF9QMl9TSU5HTEVfQ0hBTk5FTF9MVkRTX0xJTUlUICAgICAgICAgIDAKKworLypUaGUgcGFyYW1ldGVyIGlzIGZvciBEVUFMX0NIQU5ORUxfTFZEUyBvbiBHNHggcGxhdGZvcm0qLworI2RlZmluZSBHNFhfRE9UX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiAgICAgICAgICAgODAwMDAKKyNkZWZpbmUgRzRYX0RPVF9EVUFMX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgIDIyNDAwMAorI2RlZmluZSBHNFhfTl9EVUFMX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAgMQorI2RlZmluZSBHNFhfTl9EVUFMX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgICAgMworI2RlZmluZSBHNFhfTV9EVUFMX0NIQU5ORUxfTFZEU19NSU4gICAgICAgICAgICAgMTA0CisjZGVmaW5lIEc0WF9NX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgICAxMzgKKyNkZWZpbmUgRzRYX00xX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiAgICAgICAgICAgIDE3CisjZGVmaW5lIEc0WF9NMV9EVUFMX0NIQU5ORUxfTFZEU19NQVggICAgICAgICAgICAyMworI2RlZmluZSBHNFhfTTJfRFVBTF9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAgNQorI2RlZmluZSBHNFhfTTJfRFVBTF9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgMTEKKyNkZWZpbmUgRzRYX1BfRFVBTF9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAgIDE0CisjZGVmaW5lIEc0WF9QX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCAgICAgICAgICAgICA0MgorI2RlZmluZSBHNFhfUDFfRFVBTF9DSEFOTkVMX0xWRFNfTUlOICAgICAgICAgICAgMgorI2RlZmluZSBHNFhfUDFfRFVBTF9DSEFOTkVMX0xWRFNfTUFYICAgICAgICAgICAgNgorI2RlZmluZSBHNFhfUDJfRFVBTF9DSEFOTkVMX0xWRFNfU0xPVyAgICAgICAgICAgNworI2RlZmluZSBHNFhfUDJfRFVBTF9DSEFOTkVMX0xWRFNfRkFTVCAgICAgICAgICAgNworI2RlZmluZSBHNFhfUDJfRFVBTF9DSEFOTkVMX0xWRFNfTElNSVQgICAgICAgICAgMAorCitzdGF0aWMgYm9vbAoraW50ZWxfZmluZF9iZXN0X1BMTChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkgICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jayk7CitzdGF0aWMgYm9vbAoraW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwoY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQsIHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKKwkJCWludCB0YXJnZXQsIGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spOwogCiBzdGF0aWMgY29uc3QgaW50ZWxfbGltaXRfdCBpbnRlbF9saW1pdHNbXSA9IHsKICAgICB7IC8qIElOVEVMX0xJTUlUX0k4WFhfRFZPX0RBQyAqLwpAQCAtMTI4LDYgKzIzNSw3IEBACiAgICAgICAgIC5wMSAgPSB7IC5taW4gPSBJOFhYX1AxX01JTiwJCS5tYXggPSBJOFhYX1AxX01BWCB9LAogCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBJOFhYX1AyX1NMT1dfTElNSVQsCiAJCSAucDJfc2xvdyA9IEk4WFhfUDJfU0xPVywJLnAyX2Zhc3QgPSBJOFhYX1AyX0ZBU1QgfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9maW5kX2Jlc3RfUExMLAogICAgIH0sCiAgICAgeyAvKiBJTlRFTF9MSU1JVF9JOFhYX0xWRFMgKi8KICAgICAgICAgLmRvdCA9IHsgLm1pbiA9IEk4WFhfRE9UX01JTiwJCS5tYXggPSBJOFhYX0RPVF9NQVggfSwKQEAgLTE0MCw2ICsyNDgsNyBAQAogICAgICAgICAucDEgID0geyAubWluID0gSThYWF9QMV9MVkRTX01JTiwJLm1heCA9IEk4WFhfUDFfTFZEU19NQVggfSwKIAkucDIgID0geyAuZG90X2xpbWl0ID0gSThYWF9QMl9TTE9XX0xJTUlULAogCQkgLnAyX3Nsb3cgPSBJOFhYX1AyX0xWRFNfU0xPVywJLnAyX2Zhc3QgPSBJOFhYX1AyX0xWRFNfRkFTVCB9LAorCS5maW5kX3BsbCA9IGludGVsX2ZpbmRfYmVzdF9QTEwsCiAgICAgfSwKICAgICB7IC8qIElOVEVMX0xJTUlUX0k5WFhfU0RWT19EQUMgKi8KICAgICAgICAgLmRvdCA9IHsgLm1pbiA9IEk5WFhfRE9UX01JTiwJCS5tYXggPSBJOVhYX0RPVF9NQVggfSwKQEAgLTE1Miw2ICsyNjEsNyBAQAogICAgICAgICAucDEgID0geyAubWluID0gSTlYWF9QMV9NSU4sCQkubWF4ID0gSTlYWF9QMV9NQVggfSwKIAkucDIgID0geyAuZG90X2xpbWl0ID0gSTlYWF9QMl9TRFZPX0RBQ19TTE9XX0xJTUlULAogCQkgLnAyX3Nsb3cgPSBJOVhYX1AyX1NEVk9fREFDX1NMT1csCS5wMl9mYXN0ID0gSTlYWF9QMl9TRFZPX0RBQ19GQVNUIH0sCisJLmZpbmRfcGxsID0gaW50ZWxfZmluZF9iZXN0X1BMTCwKICAgICB9LAogICAgIHsgLyogSU5URUxfTElNSVRfSTlYWF9MVkRTICovCiAgICAgICAgIC5kb3QgPSB7IC5taW4gPSBJOVhYX0RPVF9NSU4sCQkubWF4ID0gSTlYWF9ET1RfTUFYIH0sCkBAIC0xNjcsMTkgKzI3NywxNTcgQEAKIAkgKi8KIAkucDIgID0geyAuZG90X2xpbWl0ID0gSTlYWF9QMl9MVkRTX1NMT1dfTElNSVQsCiAJCSAucDJfc2xvdyA9IEk5WFhfUDJfTFZEU19TTE9XLAkucDJfZmFzdCA9IEk5WFhfUDJfTFZEU19GQVNUIH0sCisJLmZpbmRfcGxsID0gaW50ZWxfZmluZF9iZXN0X1BMTCwKICAgICB9LAorICAgIC8qIGJlbG93IHBhcmFtZXRlciBhbmQgZnVuY3Rpb24gaXMgZm9yIEc0WCBDaGlwc2V0IEZhbWlseSovCisgICAgeyAvKiBJTlRFTF9MSU1JVF9HNFhfU0RWTyAqLworCS5kb3QgPSB7IC5taW4gPSBHNFhfRE9UX1NEVk9fTUlOLAkubWF4ID0gRzRYX0RPVF9TRFZPX01BWCB9LAorCS52Y28gPSB7IC5taW4gPSBHNFhfVkNPX01JTiwJICAgICAgICAubWF4ID0gRzRYX1ZDT19NQVh9LAorCS5uICAgPSB7IC5taW4gPSBHNFhfTl9TRFZPX01JTiwJICAgICAgICAubWF4ID0gRzRYX05fU0RWT19NQVggfSwKKwkubSAgID0geyAubWluID0gRzRYX01fU0RWT19NSU4sICAgICAgICAgLm1heCA9IEc0WF9NX1NEVk9fTUFYIH0sCisJLm0xICA9IHsgLm1pbiA9IEc0WF9NMV9TRFZPX01JTiwJLm1heCA9IEc0WF9NMV9TRFZPX01BWCB9LAorCS5tMiAgPSB7IC5taW4gPSBHNFhfTTJfU0RWT19NSU4sCS5tYXggPSBHNFhfTTJfU0RWT19NQVggfSwKKwkucCAgID0geyAubWluID0gRzRYX1BfU0RWT19NSU4sICAgICAgICAgLm1heCA9IEc0WF9QX1NEVk9fTUFYIH0sCisJLnAxICA9IHsgLm1pbiA9IEc0WF9QMV9TRFZPX01JTiwJLm1heCA9IEc0WF9QMV9TRFZPX01BWH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEc0WF9QMl9TRFZPX0xJTUlULAorCQkgLnAyX3Nsb3cgPSBHNFhfUDJfU0RWT19TTE9XLAorCQkgLnAyX2Zhc3QgPSBHNFhfUDJfU0RWT19GQVNUCisJfSwKKwkuZmluZF9wbGwgPSBpbnRlbF9nNHhfZmluZF9iZXN0X1BMTCwKKyAgICB9LAorICAgIHsgLyogSU5URUxfTElNSVRfRzRYX0hETUlfREFDICovCisJLmRvdCA9IHsgLm1pbiA9IEc0WF9ET1RfSERNSV9EQUNfTUlOLAkubWF4ID0gRzRYX0RPVF9IRE1JX0RBQ19NQVggfSwKKwkudmNvID0geyAubWluID0gRzRYX1ZDT19NSU4sCSAgICAgICAgLm1heCA9IEc0WF9WQ09fTUFYfSwKKwkubiAgID0geyAubWluID0gRzRYX05fSERNSV9EQUNfTUlOLAkubWF4ID0gRzRYX05fSERNSV9EQUNfTUFYIH0sCisJLm0gICA9IHsgLm1pbiA9IEc0WF9NX0hETUlfREFDX01JTiwJLm1heCA9IEc0WF9NX0hETUlfREFDX01BWCB9LAorCS5tMSAgPSB7IC5taW4gPSBHNFhfTTFfSERNSV9EQUNfTUlOLAkubWF4ID0gRzRYX00xX0hETUlfREFDX01BWCB9LAorCS5tMiAgPSB7IC5taW4gPSBHNFhfTTJfSERNSV9EQUNfTUlOLAkubWF4ID0gRzRYX00yX0hETUlfREFDX01BWCB9LAorCS5wICAgPSB7IC5taW4gPSBHNFhfUF9IRE1JX0RBQ19NSU4sCS5tYXggPSBHNFhfUF9IRE1JX0RBQ19NQVggfSwKKwkucDEgID0geyAubWluID0gRzRYX1AxX0hETUlfREFDX01JTiwJLm1heCA9IEc0WF9QMV9IRE1JX0RBQ19NQVh9LAorCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBHNFhfUDJfSERNSV9EQUNfTElNSVQsCisJCSAucDJfc2xvdyA9IEc0WF9QMl9IRE1JX0RBQ19TTE9XLAorCQkgLnAyX2Zhc3QgPSBHNFhfUDJfSERNSV9EQUNfRkFTVAorCX0sCisJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCisgICAgfSwKKyAgICB7IC8qIElOVEVMX0xJTUlUX0c0WF9TSU5HTEVfQ0hBTk5FTF9MVkRTICovCisJLmRvdCA9IHsgLm1pbiA9IEc0WF9ET1RfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4sCisJCSAubWF4ID0gRzRYX0RPVF9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS52Y28gPSB7IC5taW4gPSBHNFhfVkNPX01JTiwKKwkJIC5tYXggPSBHNFhfVkNPX01BWCB9LAorCS5uICAgPSB7IC5taW4gPSBHNFhfTl9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfTl9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS5tICAgPSB7IC5taW4gPSBHNFhfTV9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfTV9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS5tMSAgPSB7IC5taW4gPSBHNFhfTTFfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4sCisJCSAubWF4ID0gRzRYX00xX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLm0yICA9IHsgLm1pbiA9IEc0WF9NMl9TSU5HTEVfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfTTJfU0lOR0xFX0NIQU5ORUxfTFZEU19NQVggfSwKKwkucCAgID0geyAubWluID0gRzRYX1BfU0lOR0xFX0NIQU5ORUxfTFZEU19NSU4sCisJCSAubWF4ID0gRzRYX1BfU0lOR0xFX0NIQU5ORUxfTFZEU19NQVggfSwKKwkucDEgID0geyAubWluID0gRzRYX1AxX1NJTkdMRV9DSEFOTkVMX0xWRFNfTUlOLAorCQkgLm1heCA9IEc0WF9QMV9TSU5HTEVfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBHNFhfUDJfU0lOR0xFX0NIQU5ORUxfTFZEU19MSU1JVCwKKwkJIC5wMl9zbG93ID0gRzRYX1AyX1NJTkdMRV9DSEFOTkVMX0xWRFNfU0xPVywKKwkJIC5wMl9mYXN0ID0gRzRYX1AyX1NJTkdMRV9DSEFOTkVMX0xWRFNfRkFTVAorCX0sCisJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCisgICAgfSwKKyAgICB7IC8qIElOVEVMX0xJTUlUX0c0WF9EVUFMX0NIQU5ORUxfTFZEUyAqLworCS5kb3QgPSB7IC5taW4gPSBHNFhfRE9UX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfRE9UX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS52Y28gPSB7IC5taW4gPSBHNFhfVkNPX01JTiwKKwkJIC5tYXggPSBHNFhfVkNPX01BWCB9LAorCS5uICAgPSB7IC5taW4gPSBHNFhfTl9EVUFMX0NIQU5ORUxfTFZEU19NSU4sCisJCSAubWF4ID0gRzRYX05fRFVBTF9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLm0gICA9IHsgLm1pbiA9IEc0WF9NX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfTV9EVUFMX0NIQU5ORUxfTFZEU19NQVggfSwKKwkubTEgID0geyAubWluID0gRzRYX00xX0RVQUxfQ0hBTk5FTF9MVkRTX01JTiwKKwkJIC5tYXggPSBHNFhfTTFfRFVBTF9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLm0yICA9IHsgLm1pbiA9IEc0WF9NMl9EVUFMX0NIQU5ORUxfTFZEU19NSU4sCisJCSAubWF4ID0gRzRYX00yX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS5wICAgPSB7IC5taW4gPSBHNFhfUF9EVUFMX0NIQU5ORUxfTFZEU19NSU4sCisJCSAubWF4ID0gRzRYX1BfRFVBTF9DSEFOTkVMX0xWRFNfTUFYIH0sCisJLnAxICA9IHsgLm1pbiA9IEc0WF9QMV9EVUFMX0NIQU5ORUxfTFZEU19NSU4sCisJCSAubWF4ID0gRzRYX1AxX0RVQUxfQ0hBTk5FTF9MVkRTX01BWCB9LAorCS5wMiAgPSB7IC5kb3RfbGltaXQgPSBHNFhfUDJfRFVBTF9DSEFOTkVMX0xWRFNfTElNSVQsCisJCSAucDJfc2xvdyA9IEc0WF9QMl9EVUFMX0NIQU5ORUxfTFZEU19TTE9XLAorCQkgLnAyX2Zhc3QgPSBHNFhfUDJfRFVBTF9DSEFOTkVMX0xWRFNfRkFTVAorCX0sCisJLmZpbmRfcGxsID0gaW50ZWxfZzR4X2ZpbmRfYmVzdF9QTEwsCisgICAgfSwKKyAgICB7IC8qIElOVEVMX0xJTUlUX0lHRF9TRFZPICovCisgICAgICAgIC5kb3QgPSB7IC5taW4gPSBJOVhYX0RPVF9NSU4sCQkubWF4ID0gSTlYWF9ET1RfTUFYfSwKKyAgICAgICAgLnZjbyA9IHsgLm1pbiA9IElHRF9WQ09fTUlOLAkJLm1heCA9IElHRF9WQ09fTUFYIH0sCisgICAgICAgIC5uICAgPSB7IC5taW4gPSBJR0RfTl9NSU4sCQkubWF4ID0gSUdEX05fTUFYIH0sCisgICAgICAgIC5tICAgPSB7IC5taW4gPSBJR0RfTV9NSU4sCQkubWF4ID0gSUdEX01fTUFYIH0sCisgICAgICAgIC5tMSAgPSB7IC5taW4gPSBJR0RfTTFfTUlOLAkJLm1heCA9IElHRF9NMV9NQVggfSwKKyAgICAgICAgLm0yICA9IHsgLm1pbiA9IElHRF9NMl9NSU4sCQkubWF4ID0gSUdEX00yX01BWCB9LAorICAgICAgICAucCAgID0geyAubWluID0gSTlYWF9QX1NEVk9fREFDX01JTiwgICAgLm1heCA9IEk5WFhfUF9TRFZPX0RBQ19NQVggfSwKKyAgICAgICAgLnAxICA9IHsgLm1pbiA9IEk5WFhfUDFfTUlOLAkJLm1heCA9IEk5WFhfUDFfTUFYIH0sCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk5WFhfUDJfU0RWT19EQUNfU0xPV19MSU1JVCwKKwkJIC5wMl9zbG93ID0gSTlYWF9QMl9TRFZPX0RBQ19TTE9XLAkucDJfZmFzdCA9IEk5WFhfUDJfU0RWT19EQUNfRkFTVCB9LAorICAgIH0sCisgICAgeyAvKiBJTlRFTF9MSU1JVF9JR0RfTFZEUyAqLworICAgICAgICAuZG90ID0geyAubWluID0gSTlYWF9ET1RfTUlOLAkJLm1heCA9IEk5WFhfRE9UX01BWCB9LAorICAgICAgICAudmNvID0geyAubWluID0gSUdEX1ZDT19NSU4sCQkubWF4ID0gSUdEX1ZDT19NQVggfSwKKyAgICAgICAgLm4gICA9IHsgLm1pbiA9IElHRF9OX01JTiwJCS5tYXggPSBJR0RfTl9NQVggfSwKKyAgICAgICAgLm0gICA9IHsgLm1pbiA9IElHRF9NX01JTiwJCS5tYXggPSBJR0RfTV9NQVggfSwKKyAgICAgICAgLm0xICA9IHsgLm1pbiA9IElHRF9NMV9NSU4sCQkubWF4ID0gSUdEX00xX01BWCB9LAorICAgICAgICAubTIgID0geyAubWluID0gSUdEX00yX01JTiwJCS5tYXggPSBJR0RfTTJfTUFYIH0sCisgICAgICAgIC5wICAgPSB7IC5taW4gPSBJR0RfUF9MVkRTX01JTiwJLm1heCA9IElHRF9QX0xWRFNfTUFYIH0sCisgICAgICAgIC5wMSAgPSB7IC5taW4gPSBJOVhYX1AxX01JTiwJCS5tYXggPSBJOVhYX1AxX01BWCB9LAorCS8qIElHRCBvbmx5IHN1cHBvcnRzIHNpbmdsZS1jaGFubmVsIG1vZGUuICovCisJLnAyICA9IHsgLmRvdF9saW1pdCA9IEk5WFhfUDJfTFZEU19TTE9XX0xJTUlULAorCQkgLnAyX3Nsb3cgPSBJOVhYX1AyX0xWRFNfU0xPVywJLnAyX2Zhc3QgPSBJOVhYX1AyX0xWRFNfU0xPVyB9LAorICAgIH0sCisKIH07CiAKK3N0YXRpYyBjb25zdCBpbnRlbF9saW1pdF90ICppbnRlbF9nNHhfbGltaXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwljb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdDsKKworCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkgeworCQlpZiAoKEk5MTVfUkVBRChMVkRTKSAmIExWRFNfQ0xLQl9QT1dFUl9NQVNLKSA9PQorCQkgICAgTFZEU19DTEtCX1BPV0VSX1VQKQorCQkJLyogTFZEUyB3aXRoIGR1YWwgY2hhbm5lbCAqLworCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzCisJCQkJCVtJTlRFTF9MSU1JVF9HNFhfRFVBTF9DSEFOTkVMX0xWRFNdOworCQllbHNlCisJCQkvKiBMVkRTIHdpdGggZHVhbCBjaGFubmVsICovCisJCQlsaW1pdCA9ICZpbnRlbF9saW1pdHMKKwkJCQkJW0lOVEVMX0xJTUlUX0c0WF9TSU5HTEVfQ0hBTk5FTF9MVkRTXTsKKwl9IGVsc2UgaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0hETUkpIHx8CisJCSAgIGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0FOQUxPRykpIHsKKwkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0c0WF9IRE1JX0RBQ107CisJfSBlbHNlIGlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9TRFZPKSkgeworCQlsaW1pdCA9ICZpbnRlbF9saW1pdHNbSU5URUxfTElNSVRfRzRYX1NEVk9dOworCX0gZWxzZSAvKiBUaGUgb3B0aW9uIGlzIGZvciBvdGhlciBvdXRwdXRzICovCisJCWxpbWl0ID0gJmludGVsX2xpbWl0c1tJTlRFTF9MSU1JVF9JOVhYX1NEVk9fREFDXTsKKworCXJldHVybiBsaW1pdDsKK30KKwogc3RhdGljIGNvbnN0IGludGVsX2xpbWl0X3QgKmludGVsX2xpbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCWNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0OwogCi0JaWYgKElTX0k5WFgoZGV2KSkgeworCWlmIChJU19HNFgoZGV2KSkgeworCQlsaW1pdCA9IGludGVsX2c0eF9saW1pdChjcnRjKTsKKwl9IGVsc2UgaWYgKElTX0k5WFgoZGV2KSAmJiAhSVNfSUdEKGRldikpIHsKIAkJaWYgKGludGVsX3BpcGVfaGFzX3R5cGUoY3J0YywgSU5URUxfT1VUUFVUX0xWRFMpKQogCQkJbGltaXQgPSAmaW50ZWxfbGltaXRzW0lOVEVMX0xJTUlUX0k5WFhfTFZEU107CiAJCWVsc2UKIAkJCWxpbWl0ID0gJmludGVsX2xpbWl0c1tJTlRFTF9MSU1JVF9JOVhYX1NEVk9fREFDXTsKKwl9IGVsc2UgaWYgKElTX0lHRChkZXYpKSB7CisJCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkKKwkJCWxpbWl0ID0gJmludGVsX2xpbWl0c1tJTlRFTF9MSU1JVF9JR0RfTFZEU107CisJCWVsc2UKKwkJCWxpbWl0ID0gJmludGVsX2xpbWl0c1tJTlRFTF9MSU1JVF9JR0RfU0RWT19EQUNdOwogCX0gZWxzZSB7CiAJCWlmIChpbnRlbF9waXBlX2hhc190eXBlKGNydGMsIElOVEVMX09VVFBVVF9MVkRTKSkKIAkJCWxpbWl0ID0gJmludGVsX2xpbWl0c1tJTlRFTF9MSU1JVF9JOFhYX0xWRFNdOwpAQCAtMTg5LDggKzQzNywyMSBAQAogCXJldHVybiBsaW1pdDsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfY2xvY2soaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqY2xvY2spCisvKiBtMSBpcyByZXNlcnZlZCBhcyAwIGluIElHRCwgbiBpcyBhIHJpbmcgY291bnRlciAqLworc3RhdGljIHZvaWQgaWdkX2Nsb2NrKGludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmNsb2NrKQogeworCWNsb2NrLT5tID0gY2xvY2stPm0yICsgMjsKKwljbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKKwljbG9jay0+dmNvID0gcmVmY2xrICogY2xvY2stPm0gLyBjbG9jay0+bjsKKwljbG9jay0+ZG90ID0gY2xvY2stPnZjbyAvIGNsb2NrLT5wOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9jbG9jayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgcmVmY2xrLCBpbnRlbF9jbG9ja190ICpjbG9jaykKK3sKKwlpZiAoSVNfSUdEKGRldikpIHsKKwkJaWdkX2Nsb2NrKHJlZmNsaywgY2xvY2spOworCQlyZXR1cm47CisJfQogCWNsb2NrLT5tID0gNSAqIChjbG9jay0+bTEgKyAyKSArIChjbG9jay0+bTIgKyAyKTsKIAljbG9jay0+cCA9IGNsb2NrLT5wMSAqIGNsb2NrLT5wMjsKIAljbG9jay0+dmNvID0gcmVmY2xrICogY2xvY2stPm0gLyAoY2xvY2stPm4gKyAyKTsKQEAgLTIyNiw2ICs0ODcsNyBAQAogc3RhdGljIGJvb2wgaW50ZWxfUExMX2lzX3ZhbGlkKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50ZWxfY2xvY2tfdCAqY2xvY2spCiB7CiAJY29uc3QgaW50ZWxfbGltaXRfdCAqbGltaXQgPSBpbnRlbF9saW1pdCAoY3J0Yyk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAogCWlmIChjbG9jay0+cDEgIDwgbGltaXQtPnAxLm1pbiAgfHwgbGltaXQtPnAxLm1heCAgPCBjbG9jay0+cDEpCiAJCUlOVEVMUGxsSW52YWxpZCAoInAxIG91dCBvZiByYW5nZVxuIik7CkBAIC0yMzUsNyArNDk3LDcgQEAKIAkJSU5URUxQbGxJbnZhbGlkICgibTIgb3V0IG9mIHJhbmdlXG4iKTsKIAlpZiAoY2xvY2stPm0xICA8IGxpbWl0LT5tMS5taW4gIHx8IGxpbWl0LT5tMS5tYXggIDwgY2xvY2stPm0xKQogCQlJTlRFTFBsbEludmFsaWQgKCJtMSBvdXQgb2YgcmFuZ2VcbiIpOwotCWlmIChjbG9jay0+bTEgPD0gY2xvY2stPm0yKQorCWlmIChjbG9jay0+bTEgPD0gY2xvY2stPm0yICYmICFJU19JR0QoZGV2KSkKIAkJSU5URUxQbGxJbnZhbGlkICgibTEgPD0gbTJcbiIpOwogCWlmIChjbG9jay0+bSAgIDwgbGltaXQtPm0ubWluICAgfHwgbGltaXQtPm0ubWF4ICAgPCBjbG9jay0+bSkKIAkJSU5URUxQbGxJbnZhbGlkICgibSBvdXQgb2YgcmFuZ2VcbiIpOwpAQCAtMjUyLDE4ICs1MTQsMTQgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoqCi0gKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KLSAqIHJlZmNsaywgb3IgRkFMU0UuICBUaGUgcmV0dXJuZWQgdmFsdWVzIHJlcHJlc2VudCB0aGUgY2xvY2sgZXF1YXRpb246Ci0gKiByZWZsY2sgKiAoNSAqIChtMSArIDIpICsgKG0yICsgMikpIC8gKG4gKyAyKSAvIHAxIC8gcDIuCi0gKi8KLXN0YXRpYyBib29sIGludGVsX2ZpbmRfYmVzdF9QTEwoc3RydWN0IGRybV9jcnRjICpjcnRjLCBpbnQgdGFyZ2V0LAotCQkJCWludCByZWZjbGssIGludGVsX2Nsb2NrX3QgKmJlc3RfY2xvY2spCitzdGF0aWMgYm9vbAoraW50ZWxfZmluZF9iZXN0X1BMTChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkgICAgaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jaykKKwogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnRlbF9jbG9ja190IGNsb2NrOwotCWNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0ID0gaW50ZWxfbGltaXQoY3J0Yyk7CiAJaW50IGVyciA9IHRhcmdldDsKIAogCWlmIChJU19JOVhYKGRldikgJiYgaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykgJiYKQEAgLTI4OSwxNSArNTQ3LDE3IEBACiAJbWVtc2V0IChiZXN0X2Nsb2NrLCAwLCBzaXplb2YgKCpiZXN0X2Nsb2NrKSk7CiAKIAlmb3IgKGNsb2NrLm0xID0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEgPD0gbGltaXQtPm0xLm1heDsgY2xvY2subTErKykgewotCQlmb3IgKGNsb2NrLm0yID0gbGltaXQtPm0yLm1pbjsgY2xvY2subTIgPCBjbG9jay5tMSAmJgotCQkJICAgICBjbG9jay5tMiA8PSBsaW1pdC0+bTIubWF4OyBjbG9jay5tMisrKSB7CisJCWZvciAoY2xvY2subTIgPSBsaW1pdC0+bTIubWluOyBjbG9jay5tMiA8PSBsaW1pdC0+bTIubWF4OyBjbG9jay5tMisrKSB7CisJCQkvKiBtMSBpcyBhbHdheXMgMCBpbiBJR0QgKi8KKwkJCWlmIChjbG9jay5tMiA+PSBjbG9jay5tMSAmJiAhSVNfSUdEKGRldikpCisJCQkJYnJlYWs7CiAJCQlmb3IgKGNsb2NrLm4gPSBsaW1pdC0+bi5taW47IGNsb2NrLm4gPD0gbGltaXQtPm4ubWF4OwogCQkJICAgICBjbG9jay5uKyspIHsKIAkJCQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1pbjsKIAkJCQkgICAgIGNsb2NrLnAxIDw9IGxpbWl0LT5wMS5tYXg7IGNsb2NrLnAxKyspIHsKIAkJCQkJaW50IHRoaXNfZXJyOwogCi0JCQkJCWludGVsX2Nsb2NrKHJlZmNsaywgJmNsb2NrKTsKKwkJCQkJaW50ZWxfY2xvY2soZGV2LCByZWZjbGssICZjbG9jayk7CiAKIAkJCQkJaWYgKCFpbnRlbF9QTExfaXNfdmFsaWQoY3J0YywgJmNsb2NrKSkKIAkJCQkJCWNvbnRpbnVlOwpAQCAtMzE1LDYgKzU3NSw2MyBAQAogCXJldHVybiAoZXJyICE9IHRhcmdldCk7CiB9CiAKK3N0YXRpYyBib29sCitpbnRlbF9nNHhfZmluZF9iZXN0X1BMTChjb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdCwgc3RydWN0IGRybV9jcnRjICpjcnRjLAorCQkJaW50IHRhcmdldCwgaW50IHJlZmNsaywgaW50ZWxfY2xvY2tfdCAqYmVzdF9jbG9jaykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50ZWxfY2xvY2tfdCBjbG9jazsKKwlpbnQgbWF4X247CisJYm9vbCBmb3VuZDsKKwkvKiBhcHByb3hpbWF0ZWx5IGVxdWFscyB0YXJnZXQgKiAwLjAwNDg4ICovCisJaW50IGVycl9tb3N0ID0gKHRhcmdldCA+PiA4KSArICh0YXJnZXQgPj4gMTApOworCWZvdW5kID0gZmFsc2U7CisKKwlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKKwkJaWYgKChJOTE1X1JFQUQoTFZEUykgJiBMVkRTX0NMS0JfUE9XRVJfTUFTSykgPT0KKwkJICAgIExWRFNfQ0xLQl9QT1dFUl9VUCkKKwkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX2Zhc3Q7CisJCWVsc2UKKwkJCWNsb2NrLnAyID0gbGltaXQtPnAyLnAyX3Nsb3c7CisJfSBlbHNlIHsKKwkJaWYgKHRhcmdldCA8IGxpbWl0LT5wMi5kb3RfbGltaXQpCisJCQljbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9zbG93OworCQllbHNlCisJCQljbG9jay5wMiA9IGxpbWl0LT5wMi5wMl9mYXN0OworCX0KKworCW1lbXNldChiZXN0X2Nsb2NrLCAwLCBzaXplb2YoKmJlc3RfY2xvY2spKTsKKwltYXhfbiA9IGxpbWl0LT5uLm1heDsKKwkvKiBiYXNlZCBvbiBoYXJkd2FyZSByZXF1cmltZW50IHByZWZlciBzbWFsbGVyIG4gdG8gcHJlY2lzaW9uICovCisJZm9yIChjbG9jay5uID0gbGltaXQtPm4ubWluOyBjbG9jay5uIDw9IG1heF9uOyBjbG9jay5uKyspIHsKKwkJLyogYmFzZWQgb24gaGFyZHdhcmUgcmVxdWlybWVudCBwcmVmZXJlIGxhcmdlciBtMSxtMiwgcDEgKi8KKwkJZm9yIChjbG9jay5tMSA9IGxpbWl0LT5tMS5tYXg7CisJCSAgICAgY2xvY2subTEgPj0gbGltaXQtPm0xLm1pbjsgY2xvY2subTEtLSkgeworCQkJZm9yIChjbG9jay5tMiA9IGxpbWl0LT5tMi5tYXg7CisJCQkgICAgIGNsb2NrLm0yID49IGxpbWl0LT5tMi5taW47IGNsb2NrLm0yLS0pIHsKKwkJCQlmb3IgKGNsb2NrLnAxID0gbGltaXQtPnAxLm1heDsKKwkJCQkgICAgIGNsb2NrLnAxID49IGxpbWl0LT5wMS5taW47IGNsb2NrLnAxLS0pIHsKKwkJCQkJaW50IHRoaXNfZXJyOworCisJCQkJCWludGVsX2Nsb2NrKGRldiwgcmVmY2xrLCAmY2xvY2spOworCQkJCQlpZiAoIWludGVsX1BMTF9pc192YWxpZChjcnRjLCAmY2xvY2spKQorCQkJCQkJY29udGludWU7CisJCQkJCXRoaXNfZXJyID0gYWJzKGNsb2NrLmRvdCAtIHRhcmdldCkgOworCQkJCQlpZiAodGhpc19lcnIgPCBlcnJfbW9zdCkgeworCQkJCQkJKmJlc3RfY2xvY2sgPSBjbG9jazsKKwkJCQkJCWVycl9tb3N0ID0gdGhpc19lcnI7CisJCQkJCQltYXhfbiA9IGNsb2NrLm47CisJCQkJCQlmb3VuZCA9IHRydWU7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gZm91bmQ7Cit9CisKIHZvaWQKIGludGVsX3dhaXRfZm9yX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpAQCAtNjM0LDcgKzk1MSw3IEBACiAJCXJldHVybiA0MDAwMDA7CiAJZWxzZSBpZiAoSVNfSTkxNUcoZGV2KSkKIAkJcmV0dXJuIDMzMzAwMDsKLQllbHNlIGlmIChJU19JOTQ1R00oZGV2KSB8fCBJU184NDVHKGRldikpCisJZWxzZSBpZiAoSVNfSTk0NUdNKGRldikgfHwgSVNfODQ1RyhkZXYpIHx8IElTX0lHREdNKGRldikpCiAJCXJldHVybiAyMDAwMDA7CiAJZWxzZSBpZiAoSVNfSTkxNUdNKGRldikpIHsKIAkJdTE2IGdjZmdjID0gMDsKQEAgLTczMyw2ICsxMDUwLDcgQEAKIAlib29sIGlzX2NydCA9IGZhbHNlLCBpc19sdmRzID0gZmFsc2UsIGlzX3R2ID0gZmFsc2U7CiAJc3RydWN0IGRybV9tb2RlX2NvbmZpZyAqbW9kZV9jb25maWcgPSAmZGV2LT5tb2RlX2NvbmZpZzsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOworCWNvbnN0IGludGVsX2xpbWl0X3QgKmxpbWl0OwogCWludCByZXQ7CiAKIAlkcm1fdmJsYW5rX3ByZV9tb2Rlc2V0KGRldiwgcGlwZSk7CkBAIC03NzYsMTMgKzEwOTQsMjIgQEAKIAkJcmVmY2xrID0gNDgwMDA7CiAJfQogCi0Jb2sgPSBpbnRlbF9maW5kX2Jlc3RfUExMKGNydGMsIGFkanVzdGVkX21vZGUtPmNsb2NrLCByZWZjbGssICZjbG9jayk7CisJLyoKKwkgKiBSZXR1cm5zIGEgc2V0IG9mIGRpdmlzb3JzIGZvciB0aGUgZGVzaXJlZCB0YXJnZXQgY2xvY2sgd2l0aCB0aGUgZ2l2ZW4KKwkgKiByZWZjbGssIG9yIEZBTFNFLiAgVGhlIHJldHVybmVkIHZhbHVlcyByZXByZXNlbnQgdGhlIGNsb2NrIGVxdWF0aW9uOgorCSAqIHJlZmxjayAqICg1ICogKG0xICsgMikgKyAobTIgKyAyKSkgLyAobiArIDIpIC8gcDEgLyBwMi4KKwkgKi8KKwlsaW1pdCA9IGludGVsX2xpbWl0KGNydGMpOworCW9rID0gbGltaXQtPmZpbmRfcGxsKGxpbWl0LCBjcnRjLCBhZGp1c3RlZF9tb2RlLT5jbG9jaywgcmVmY2xrLCAmY2xvY2spOwogCWlmICghb2spIHsKIAkJRFJNX0VSUk9SKCJDb3VsZG4ndCBmaW5kIFBMTCBzZXR0aW5ncyBmb3IgbW9kZSFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmcCA9IGNsb2NrLm4gPDwgMTYgfCBjbG9jay5tMSA8PCA4IHwgY2xvY2subTI7CisJaWYgKElTX0lHRChkZXYpKQorCQlmcCA9ICgxIDw8IGNsb2NrLm4pIDw8IDE2IHwgY2xvY2subTEgPDwgOCB8IGNsb2NrLm0yOworCWVsc2UKKwkJZnAgPSBjbG9jay5uIDw8IDE2IHwgY2xvY2subTEgPDwgOCB8IGNsb2NrLm0yOwogCiAJZHBsbCA9IERQTExfVkdBX01PREVfRElTOwogCWlmIChJU19JOVhYKGRldikpIHsKQEAgLTc5OSw3ICsxMTI2LDEwIEBACiAJCX0KIAogCQkvKiBjb21wdXRlIGJpdG1hc2sgZnJvbSBwMSB2YWx1ZSAqLwotCQlkcGxsIHw9ICgxIDw8IChjbG9jay5wMSAtIDEpKSA8PCAxNjsKKwkJaWYgKElTX0lHRChkZXYpKQorCQkJZHBsbCB8PSAoMSA8PCAoY2xvY2sucDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVF9JR0Q7CisJCWVsc2UKKwkJCWRwbGwgfD0gKDEgPDwgKGNsb2NrLnAxIC0gMSkpIDw8IERQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlQ7CiAJCXN3aXRjaCAoY2xvY2sucDIpIHsKIAkJY2FzZSA1OgogCQkJZHBsbCB8PSBEUExMX0RBQ19TRVJJQUxfUDJfQ0xPQ0tfRElWXzU7CkBAIC0xMjc5LDEwICsxNjA5LDIwIEBACiAJCWZwID0gSTkxNV9SRUFEKChwaXBlID09IDApID8gRlBBMSA6IEZQQjEpOwogCiAJY2xvY2subTEgPSAoZnAgJiBGUF9NMV9ESVZfTUFTSykgPj4gRlBfTTFfRElWX1NISUZUOwotCWNsb2NrLm0yID0gKGZwICYgRlBfTTJfRElWX01BU0spID4+IEZQX00yX0RJVl9TSElGVDsKLQljbG9jay5uID0gKGZwICYgRlBfTl9ESVZfTUFTSykgPj4gRlBfTl9ESVZfU0hJRlQ7CisJaWYgKElTX0lHRChkZXYpKSB7CisJCWNsb2NrLm4gPSBmZnMoKGZwICYgRlBfTl9JR0RfRElWX01BU0spID4+IEZQX05fRElWX1NISUZUKSAtIDE7CisJCWNsb2NrLm0yID0gKGZwICYgRlBfTTJfSUdEX0RJVl9NQVNLKSA+PiBGUF9NMl9ESVZfU0hJRlQ7CisJfSBlbHNlIHsKKwkJY2xvY2subiA9IChmcCAmIEZQX05fRElWX01BU0spID4+IEZQX05fRElWX1NISUZUOworCQljbG9jay5tMiA9IChmcCAmIEZQX00yX0RJVl9NQVNLKSA+PiBGUF9NMl9ESVZfU0hJRlQ7CisJfQorCiAJaWYgKElTX0k5WFgoZGV2KSkgewotCQljbG9jay5wMSA9IGZmcygoZHBsbCAmIERQTExfRlBBMDFfUDFfUE9TVF9ESVZfTUFTSykgPj4KKwkJaWYgKElTX0lHRChkZXYpKQorCQkJY2xvY2sucDEgPSBmZnMoKGRwbGwgJiBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0tfSUdEKSA+PgorCQkJCURQTExfRlBBMDFfUDFfUE9TVF9ESVZfU0hJRlRfSUdEKTsKKwkJZWxzZQorCQkJY2xvY2sucDEgPSBmZnMoKGRwbGwgJiBEUExMX0ZQQTAxX1AxX1BPU1RfRElWX01BU0spID4+CiAJCQkgICAgICAgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVCk7CiAKIAkJc3dpdGNoIChkcGxsICYgRFBMTF9NT0RFX01BU0spIHsKQEAgLTEzMDEsNyArMTY0MSw3IEBACiAJCX0KIAogCQkvKiBYWFg6IEhhbmRsZSB0aGUgMTAwTWh6IHJlZmNsayAqLwotCQlpbnRlbF9jbG9jayg5NjAwMCwgJmNsb2NrKTsKKwkJaW50ZWxfY2xvY2soZGV2LCA5NjAwMCwgJmNsb2NrKTsKIAl9IGVsc2UgewogCQlib29sIGlzX2x2ZHMgPSAocGlwZSA9PSAxKSAmJiAoSTkxNV9SRUFEKExWRFMpICYgTFZEU19QT1JUX0VOKTsKIApAQCAtMTMxMyw5ICsxNjUzLDkgQEAKIAkJCWlmICgoZHBsbCAmIFBMTF9SRUZfSU5QVVRfTUFTSykgPT0KIAkJCSAgICBQTExCX1JFRl9JTlBVVF9TUFJFQURTUEVDVFJVTUlOKSB7CiAJCQkJLyogWFhYOiBtaWdodCBub3QgYmUgNjZNSHogKi8KLQkJCQlpbnRlbF9jbG9jayg2NjAwMCwgJmNsb2NrKTsKKwkJCQlpbnRlbF9jbG9jayhkZXYsIDY2MDAwLCAmY2xvY2spOwogCQkJfSBlbHNlCi0JCQkJaW50ZWxfY2xvY2soNDgwMDAsICZjbG9jayk7CisJCQkJaW50ZWxfY2xvY2soZGV2LCA0ODAwMCwgJmNsb2NrKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChkcGxsICYgUExMX1AxX0RJVklERV9CWV9UV08pCiAJCQkJY2xvY2sucDEgPSAyOwpAQCAtMTMyOCw3ICsxNjY4LDcgQEAKIAkJCWVsc2UKIAkJCQljbG9jay5wMiA9IDI7CiAKLQkJCWludGVsX2Nsb2NrKDQ4MDAwLCAmY2xvY2spOworCQkJaW50ZWxfY2xvY2soZGV2LCA0ODAwMCwgJmNsb2NrKTsKIAkJfQogCX0KIApAQCAtMTQ3NCwxMyArMTgxNCwyMSBAQAogCiAJaWYgKElTX0k5WFgoZGV2KSkgewogCQlpbnQgZm91bmQ7CisJCXUzMiByZWc7CiAKIAkJaWYgKEk5MTVfUkVBRChTRFZPQikgJiBTRFZPX0RFVEVDVEVEKSB7CiAJCQlmb3VuZCA9IGludGVsX3Nkdm9faW5pdChkZXYsIFNEVk9CKTsKIAkJCWlmICghZm91bmQgJiYgU1VQUE9SVFNfSU5URUdSQVRFRF9IRE1JKGRldikpCiAJCQkJaW50ZWxfaGRtaV9pbml0KGRldiwgU0RWT0IpOwogCQl9Ci0JCWlmICghSVNfRzRYKGRldikgfHwgKEk5MTVfUkVBRChTRFZPQikgJiBTRFZPX0RFVEVDVEVEKSkgeworCisJCS8qIEJlZm9yZSBHNFggU0RWT0MgZG9lc24ndCBoYXZlIGl0cyBvd24gZGV0ZWN0IHJlZ2lzdGVyICovCisJCWlmIChJU19HNFgoZGV2KSkKKwkJCXJlZyA9IFNEVk9DOworCQllbHNlCisJCQlyZWcgPSBTRFZPQjsKKworCQlpZiAoSTkxNV9SRUFEKHJlZykgJiBTRFZPX0RFVEVDVEVEKSB7CiAJCQlmb3VuZCA9IGludGVsX3Nkdm9faW5pdChkZXYsIFNEVk9DKTsKIAkJCWlmICghZm91bmQgJiYgU1VQUE9SVFNfSU5URUdSQVRFRF9IRE1JKGRldikpCiAJCQkJaW50ZWxfaGRtaV9pbml0KGRldiwgU0RWT0MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IDBkMjExYWYuLjY2MTlmMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCQlwZml0X2NvbnRyb2wgPSAwOwogCiAJaWYgKCFJU19JOTY1RyhkZXYpKSB7Ci0JCWlmIChkZXZfcHJpdi0+cGFuZWxfd2FudHNfZGl0aGVyKQorCQlpZiAoZGV2X3ByaXYtPnBhbmVsX3dhbnRzX2RpdGhlciB8fCBkZXZfcHJpdi0+bHZkc19kaXRoZXIpCiAJCQlwZml0X2NvbnRyb2wgfD0gUEFORUxfOFRPNl9ESVRIRVJfRU5BQkxFOwogCX0KIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwppbmRleCA1NjQ4NWQ2Li5jZWNhOTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKQEAgLTIxNyw4ICsyMTcsOCBAQAogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gbnRzY19tX2NzY19jb21wb3NpdGUgPSB7CiAJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTA0LAotCS5ydSA9IDB4MDczMywgLmd1ID0gMHgwNTJkLCAuYnUgPSAweDA1YzcsIC5hdSA9IDB4MGYwMCwKLQkucnYgPSAweDAzNDAsIC5ndiA9IDB4MDMwYywgLmJ2ID0gMHgwNmQwLCAuYXYgPSAweDBmMDAsCisJLnJ1ID0gMHgwNzMzLCAuZ3UgPSAweDA1MmQsIC5idSA9IDB4MDVjNywgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDM0MCwgLmd2ID0gMHgwMzBjLCAuYnYgPSAweDA2ZDAsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIG50c2NfbV9sZXZlbHNfY29tcG9zaXRlID0gewpAQCAtMjI2LDkgKzIyNiw5IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gbnRzY19tX2NzY19zdmlkZW8gPSB7Ci0JLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTM0LAotCS5ydSA9IDB4MDc2YSwgLmd1ID0gMHgwNTY0LCAuYnUgPSAweDAzMGQsIC5hdSA9IDB4MGYwMCwKLQkucnYgPSAweDAzN2EsIC5ndiA9IDB4MDMzZCwgLmJ2ID0gMHgwNmY2LCAuYXYgPSAweDBmMDAsCisJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTMzLAorCS5ydSA9IDB4MDc2YSwgLmd1ID0gMHgwNTY0LCAuYnUgPSAweDAzMGQsIC5hdSA9IDB4MDIwMCwKKwkucnYgPSAweDAzN2EsIC5ndiA9IDB4MDMzZCwgLmJ2ID0gMHgwNmY2LCAuYXYgPSAweDAyMDAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyBudHNjX21fbGV2ZWxzX3N2aWRlbyA9IHsKQEAgLTIzNyw4ICsyMzcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gbnRzY19qX2NzY19jb21wb3NpdGUgPSB7CiAJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTE5LAotCS5ydSA9IDB4MDc0YywgLmd1ID0gMHgwNTQ2LCAuYnUgPSAweDA1ZWMsIC5hdSA9IDB4MGYwMCwKLQkucnYgPSAweDAzNWEsIC5ndiA9IDB4MDMyMiwgLmJ2ID0gMHgwNmUxLCAuYXYgPSAweDBmMDAsCisJLnJ1ID0gMHgwNzRjLCAuZ3UgPSAweDA1NDYsIC5idSA9IDB4MDVlYywgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDM1YSwgLmd2ID0gMHgwMzIyLCAuYnYgPSAweDA2ZTEsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIG50c2Nfal9sZXZlbHNfY29tcG9zaXRlID0gewpAQCAtMjQ3LDggKzI0Nyw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBudHNjX2pfY3NjX3N2aWRlbyA9IHsKIAkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxNGMsCi0JLnJ1ID0gMHgwNzg4LCAuZ3UgPSAweDA1ODEsIC5idSA9IDB4MDMyMiwgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM5OSwgLmd2ID0gMHgwMzU2LCAuYnYgPSAweDA3MGEsIC5hdiA9IDB4MGYwMCwKKwkucnUgPSAweDA3ODgsIC5ndSA9IDB4MDU4MSwgLmJ1ID0gMHgwMzIyLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzk5LCAuZ3YgPSAweDAzNTYsIC5idiA9IDB4MDcwYSwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgbnRzY19qX2xldmVsc19zdmlkZW8gPSB7CkBAIC0yNTcsOCArMjU3LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHBhbF9jc2NfY29tcG9zaXRlID0gewogCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDExMywKLQkucnUgPSAweDA3NDUsIC5ndSA9IDB4MDUzZiwgLmJ1ID0gMHgwNWUxLCAuYXUgPSAweDBmMDAsCi0JLnJ2ID0gMHgwMzUzLCAuZ3YgPSAweDAzMWMsIC5idiA9IDB4MDZkYywgLmF2ID0gMHgwZjAwLAorCS5ydSA9IDB4MDc0NSwgLmd1ID0gMHgwNTNmLCAuYnUgPSAweDA1ZTEsIC5hdSA9IDB4MDIwMCwKKwkucnYgPSAweDAzNTMsIC5ndiA9IDB4MDMxYywgLmJ2ID0gMHgwNmRjLCAuYXYgPSAweDAyMDAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyBwYWxfbGV2ZWxzX2NvbXBvc2l0ZSA9IHsKQEAgLTI2Nyw4ICsyNjcsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gcGFsX2NzY19zdmlkZW8gPSB7CiAJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTQ1LAotCS5ydSA9IDB4MDc4MCwgLmd1ID0gMHgwNTc5LCAuYnUgPSAweDAzMWMsIC5hdSA9IDB4MGYwMCwKLQkucnYgPSAweDAzOTAsIC5ndiA9IDB4MDM0ZiwgLmJ2ID0gMHgwNzA1LCAuYXYgPSAweDBmMDAsCisJLnJ1ID0gMHgwNzgwLCAuZ3UgPSAweDA1NzksIC5idSA9IDB4MDMxYywgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDM5MCwgLmd2ID0gMHgwMzRmLCAuYnYgPSAweDA3MDUsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIHBhbF9sZXZlbHNfc3ZpZGVvID0gewpAQCAtMjc3LDggKzI3Nyw4IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBwYWxfbV9jc2NfY29tcG9zaXRlID0gewogCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDEwNCwKLQkucnUgPSAweDA3MzMsIC5ndSA9IDB4MDUyZCwgLmJ1ID0gMHgwNWM3LCAuYXUgPSAweDBmMDAsCi0JLnJ2ID0gMHgwMzQwLCAuZ3YgPSAweDAzMGMsIC5idiA9IDB4MDZkMCwgLmF2ID0gMHgwZjAwLAorCS5ydSA9IDB4MDczMywgLmd1ID0gMHgwNTJkLCAuYnUgPSAweDA1YzcsIC5hdSA9IDB4MDIwMCwKKwkucnYgPSAweDAzNDAsIC5ndiA9IDB4MDMwYywgLmJ2ID0gMHgwNmQwLCAuYXYgPSAweDAyMDAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2xldmVscyBwYWxfbV9sZXZlbHNfY29tcG9zaXRlID0gewpAQCAtMjg2LDkgKzI4Niw5IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbG9yX2NvbnZlcnNpb24gcGFsX21fY3NjX3N2aWRlbyA9IHsKLQkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMzQsCi0JLnJ1ID0gMHgwNzZhLCAuZ3UgPSAweDA1NjQsIC5idSA9IDB4MDMwZCwgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDM3YSwgLmd2ID0gMHgwMzNkLCAuYnYgPSAweDA2ZjYsIC5hdiA9IDB4MGYwMCwKKwkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxMzMsCisJLnJ1ID0gMHgwNzZhLCAuZ3UgPSAweDA1NjQsIC5idSA9IDB4MDMwZCwgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDM3YSwgLmd2ID0gMHgwMzNkLCAuYnYgPSAweDA2ZjYsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIHBhbF9tX2xldmVsc19zdmlkZW8gPSB7CkBAIC0yOTcsOCArMjk3LDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb2xvcl9jb252ZXJzaW9uIHBhbF9uX2NzY19jb21wb3NpdGUgPSB7CiAJLnJ5ID0gMHgwMzMyLCAuZ3kgPSAweDAxMmQsIC5ieSA9IDB4MDdkMywgLmF5ID0gMHgwMTA0LAotCS5ydSA9IDB4MDczMywgLmd1ID0gMHgwNTJkLCAuYnUgPSAweDA1YzcsIC5hdSA9IDB4MGYwMCwKLQkucnYgPSAweDAzNDAsIC5ndiA9IDB4MDMwYywgLmJ2ID0gMHgwNmQwLCAuYXYgPSAweDBmMDAsCisJLnJ1ID0gMHgwNzMzLCAuZ3UgPSAweDA1MmQsIC5idSA9IDB4MDVjNywgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDM0MCwgLmd2ID0gMHgwMzBjLCAuYnYgPSAweDA2ZDAsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlkZW9fbGV2ZWxzIHBhbF9uX2xldmVsc19jb21wb3NpdGUgPSB7CkBAIC0zMDYsOSArMzA2LDkgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBwYWxfbl9jc2Nfc3ZpZGVvID0gewotCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDEzNCwKLQkucnUgPSAweDA3NmEsIC5ndSA9IDB4MDU2NCwgLmJ1ID0gMHgwMzBkLCAuYXUgPSAweDBmMDAsCi0JLnJ2ID0gMHgwMzdhLCAuZ3YgPSAweDAzM2QsIC5idiA9IDB4MDZmNiwgLmF2ID0gMHgwZjAwLAorCS5yeSA9IDB4MDMzMiwgLmd5ID0gMHgwMTJkLCAuYnkgPSAweDA3ZDMsIC5heSA9IDB4MDEzMywKKwkucnUgPSAweDA3NmEsIC5ndSA9IDB4MDU2NCwgLmJ1ID0gMHgwMzBkLCAuYXUgPSAweDAyMDAsCisJLnJ2ID0gMHgwMzdhLCAuZ3YgPSAweDAzM2QsIC5idiA9IDB4MDZmNiwgLmF2ID0gMHgwMjAwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19sZXZlbHMgcGFsX25fbGV2ZWxzX3N2aWRlbyA9IHsKQEAgLTMxOSw5ICszMTksOSBAQAogICogQ29tcG9uZW50IGNvbm5lY3Rpb25zCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBzZHR2X2NzY195cHJwYiA9IHsKLQkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxNDYsCi0JLnJ1ID0gMHgwNTU5LCAuZ3UgPSAweDAzNTMsIC5idSA9IDB4MDEwMCwgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDEwMCwgLmd2ID0gMHgwM2FkLCAuYnYgPSAweDA3NGQsIC5hdiA9IDB4MGYwMCwKKwkucnkgPSAweDAzMzIsIC5neSA9IDB4MDEyZCwgLmJ5ID0gMHgwN2QzLCAuYXkgPSAweDAxNDUsCisJLnJ1ID0gMHgwNTU5LCAuZ3UgPSAweDAzNTMsIC5idSA9IDB4MDEwMCwgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDEwMCwgLmd2ID0gMHgwM2FkLCAuYnYgPSAweDA3NGQsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBzZHR2X2NzY19yZ2IgPSB7CkBAIC0zMzEsOSArMzMxLDkgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBoZHR2X2NzY195cHJwYiA9IHsKLQkucnkgPSAweDA1YjMsIC5neSA9IDB4MDE2ZSwgLmJ5ID0gMHgwNzI4LCAuYXkgPSAweDAxNDYsCi0JLnJ1ID0gMHgwN2Q1LCAuZ3UgPSAweDAzOGIsIC5idSA9IDB4MDEwMCwgLmF1ID0gMHgwZjAwLAotCS5ydiA9IDB4MDEwMCwgLmd2ID0gMHgwM2QxLCAuYnYgPSAweDA2YmMsIC5hdiA9IDB4MGYwMCwKKwkucnkgPSAweDA1YjMsIC5neSA9IDB4MDE2ZSwgLmJ5ID0gMHgwNzI4LCAuYXkgPSAweDAxNDUsCisJLnJ1ID0gMHgwN2Q1LCAuZ3UgPSAweDAzOGIsIC5idSA9IDB4MDEwMCwgLmF1ID0gMHgwMjAwLAorCS5ydiA9IDB4MDEwMCwgLmd2ID0gMHgwM2QxLCAuYnYgPSAweDA2YmMsIC5hdiA9IDB4MDIwMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29sb3JfY29udmVyc2lvbiBoZHR2X2NzY19yZ2IgPSB7CkBAIC00MTQsNyArNDE0LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdHZfbW9kZSB0dl9tb2Rlc1tdID0gewogCXsKIAkJLm5hbWUJCT0gIk5UU0MtTSIsCi0JCS5jbG9jawkJPSAxMDc1MjAsCisJCS5jbG9jawkJPSAxMDgwMDAsCiAJCS5yZWZyZXNoCT0gMjk5NzAsCiAJCS5vdmVyc2FtcGxlCT0gVFZfT1ZFUlNBTVBMRV84WCwKIAkJLmNvbXBvbmVudF9vbmx5ID0gMCwKQEAgLTQ0Miw4ICs0NDIsOCBAQAogCQkudmJ1cnN0X3N0YXJ0X2Y0ID0gMTAsCQkgICAgLnZidXJzdF9lbmRfZjQJPSAyNDAsCiAKIAkJLyogZGVzaXJlZCAzLjU4MDAwMDAgYWN0dWFsIDMuNTgwMDAwMCBjbG9jayAxMDcuNTIgKi8KLQkJLmRkYTFfaW5jCT0gICAgMTM2LAotCQkuZGRhMl9pbmMJPSAgIDc2MjQsCSAgICAuZGRhMl9zaXplCQk9ICAyMDAxMywKKwkJLmRkYTFfaW5jCT0gICAgMTM1LAorCQkuZGRhMl9pbmMJPSAgMjA4MDAsCSAgICAuZGRhMl9zaXplCQk9ICAyNzQ1NiwKIAkJLmRkYTNfaW5jCT0gICAgICAwLAkgICAgLmRkYTNfc2l6ZQkJPSAgICAgIDAsCiAJCS5zY19yZXNldAk9IFRWX1NDX1JFU0VUX0VWRVJZXzQsCiAJCS5wYWxfYnVyc3QJPSBmYWxzZSwKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogCX0sCiAJewogCQkubmFtZQkJPSAiTlRTQy00NDMiLAotCQkuY2xvY2sJCT0gMTA3NTIwLAorCQkuY2xvY2sJCT0gMTA4MDAwLAogCQkucmVmcmVzaAk9IDI5OTcwLAogCQkub3ZlcnNhbXBsZQk9IFRWX09WRVJTQU1QTEVfOFgsCiAJCS5jb21wb25lbnRfb25seSA9IDAsCkBAIC00ODUsMTAgKzQ4NSwxMCBAQAogCiAJCS8qIGRlc2lyZWQgNC40MzM2MTgwIGFjdHVhbCA0LjQzMzYxODAgY2xvY2sgMTA3LjUyICovCiAJCS5kZGExX2luYyAgICAgICA9ICAgIDE2OCwKLQkJLmRkYTJfaW5jICAgICAgID0gIDE4NTU3LCAgICAgICAuZGRhMl9zaXplICAgICAgPSAgMjA2MjUsCi0JCS5kZGEzX2luYyAgICAgICA9ICAgICAgMCwgICAgICAgLmRkYTNfc2l6ZSAgICAgID0gICAgICAwLAotCQkuc2NfcmVzZXQgICA9IFRWX1NDX1JFU0VUX0VWRVJZXzgsCi0JCS5wYWxfYnVyc3QgID0gdHJ1ZSwKKwkJLmRkYTJfaW5jICAgICAgID0gICA0MDkzLCAgICAgICAuZGRhMl9zaXplICAgICAgPSAgMjc0NTYsCisJCS5kZGEzX2luYyAgICAgICA9ICAgIDMxMCwgICAgICAgLmRkYTNfc2l6ZSAgICAgID0gICAgNTI1LAorCQkuc2NfcmVzZXQgICA9IFRWX1NDX1JFU0VUX05FVkVSLAorCQkucGFsX2J1cnN0ICA9IGZhbHNlLAogCiAJCS5jb21wb3NpdGVfbGV2ZWxzID0gJm50c2NfbV9sZXZlbHNfY29tcG9zaXRlLAogCQkuY29tcG9zaXRlX2NvbG9yID0gJm50c2NfbV9jc2NfY29tcG9zaXRlLApAQCAtNDk5LDcgKzQ5OSw3IEBACiAJfSwKIAl7CiAJCS5uYW1lCQk9ICJOVFNDLUoiLAotCQkuY2xvY2sJCT0gMTA3NTIwLAorCQkuY2xvY2sJCT0gMTA4MDAwLAogCQkucmVmcmVzaAk9IDI5OTcwLAogCQkub3ZlcnNhbXBsZQk9IFRWX09WRVJTQU1QTEVfOFgsCiAJCS5jb21wb25lbnRfb25seSA9IDAsCkBAIC01MjcsOCArNTI3LDggQEAKIAkJLnZidXJzdF9zdGFydF9mNCA9IDEwLAkJICAgIC52YnVyc3RfZW5kX2Y0CT0gMjQwLAogCiAJCS8qIGRlc2lyZWQgMy41ODAwMDAwIGFjdHVhbCAzLjU4MDAwMDAgY2xvY2sgMTA3LjUyICovCi0JCS5kZGExX2luYwk9ICAgIDEzNiwKLQkJLmRkYTJfaW5jCT0gICA3NjI0LAkgICAgLmRkYTJfc2l6ZQkJPSAgMjAwMTMsCisJCS5kZGExX2luYwk9ICAgIDEzNSwKKwkJLmRkYTJfaW5jCT0gIDIwODAwLAkgICAgLmRkYTJfc2l6ZQkJPSAgMjc0NTYsCiAJCS5kZGEzX2luYwk9ICAgICAgMCwJICAgIC5kZGEzX3NpemUJCT0gICAgICAwLAogCQkuc2NfcmVzZXQJPSBUVl9TQ19SRVNFVF9FVkVSWV80LAogCQkucGFsX2J1cnN0CT0gZmFsc2UsCkBAIC01NDIsNyArNTQyLDcgQEAKIAl9LAogCXsKIAkJLm5hbWUJCT0gIlBBTC1NIiwKLQkJLmNsb2NrCQk9IDEwNzUyMCwKKwkJLmNsb2NrCQk9IDEwODAwMCwKIAkJLnJlZnJlc2gJPSAyOTk3MCwKIAkJLm92ZXJzYW1wbGUJPSBUVl9PVkVSU0FNUExFXzhYLAogCQkuY29tcG9uZW50X29ubHkgPSAwLApAQCAtNTcwLDExICs1NzAsMTEgQEAKIAkJLnZidXJzdF9zdGFydF9mNCA9IDEwLAkJICAgIC52YnVyc3RfZW5kX2Y0CT0gMjQwLAogCiAJCS8qIGRlc2lyZWQgMy41ODAwMDAwIGFjdHVhbCAzLjU4MDAwMDAgY2xvY2sgMTA3LjUyICovCi0JCS5kZGExX2luYwk9ICAgIDEzNiwKLQkJLmRkYTJfaW5jCT0gICAgNzYyNCwJICAgIC5kZGEyX3NpemUJCT0gIDIwMDEzLAorCQkuZGRhMV9pbmMJPSAgICAxMzUsCisJCS5kZGEyX2luYwk9ICAxNjcwNCwJICAgIC5kZGEyX3NpemUJCT0gIDI3NDU2LAogCQkuZGRhM19pbmMJPSAgICAgIDAsCSAgICAuZGRhM19zaXplCQk9ICAgICAgMCwKLQkJLnNjX3Jlc2V0CT0gVFZfU0NfUkVTRVRfRVZFUllfNCwKLQkJLnBhbF9idXJzdCAgPSBmYWxzZSwKKwkJLnNjX3Jlc2V0CT0gVFZfU0NfUkVTRVRfRVZFUllfOCwKKwkJLnBhbF9idXJzdCAgPSB0cnVlLAogCiAJCS5jb21wb3NpdGVfbGV2ZWxzID0gJnBhbF9tX2xldmVsc19jb21wb3NpdGUsCiAJCS5jb21wb3NpdGVfY29sb3IgPSAmcGFsX21fY3NjX2NvbXBvc2l0ZSwKQEAgLTU4Niw3ICs1ODYsNyBAQAogCXsKIAkJLyogNjI1IExpbmVzLCA1MCBGaWVsZHMsIDE1LjYyNUtIeiBsaW5lLCBTdWItQ2FycmllciA0LjQzNE1IeiAqLwogCQkubmFtZQkgICAgPSAiUEFMLU4iLAotCQkuY2xvY2sJCT0gMTA3NTIwLAorCQkuY2xvY2sJCT0gMTA4MDAwLAogCQkucmVmcmVzaAk9IDI1MDAwLAogCQkub3ZlcnNhbXBsZQk9IFRWX09WRVJTQU1QTEVfOFgsCiAJCS5jb21wb25lbnRfb25seSA9IDAsCkBAIC02MTUsOSArNjE1LDkgQEAKIAogCiAJCS8qIGRlc2lyZWQgNC40MzM2MTgwIGFjdHVhbCA0LjQzMzYxODAgY2xvY2sgMTA3LjUyICovCi0JCS5kZGExX2luYyAgICAgICA9ICAgIDE2OCwKLQkJLmRkYTJfaW5jICAgICAgID0gIDE4NTU3LCAgICAgICAuZGRhMl9zaXplICAgICAgPSAgMjA2MjUsCi0JCS5kZGEzX2luYyAgICAgICA9ICAgICAgMCwgICAgICAgLmRkYTNfc2l6ZSAgICAgID0gICAgICAwLAorCQkuZGRhMV9pbmMgICAgICAgPSAgICAxMzUsCisJCS5kZGEyX2luYyAgICAgICA9ICAyMzU3OCwgICAgICAgLmRkYTJfc2l6ZSAgICAgID0gIDI3NjQ4LAorCQkuZGRhM19pbmMgICAgICAgPSAgICAxMzQsICAgICAgIC5kZGEzX3NpemUgICAgICA9ICAgIDYyNSwKIAkJLnNjX3Jlc2V0ICAgPSBUVl9TQ19SRVNFVF9FVkVSWV84LAogCQkucGFsX2J1cnN0ICA9IHRydWUsCiAKQEAgLTYzMSwxMiArNjMxLDEyIEBACiAJewogCQkvKiA2MjUgTGluZXMsIDUwIEZpZWxkcywgMTUuNjI1S0h6IGxpbmUsIFN1Yi1DYXJyaWVyIDQuNDM0TUh6ICovCiAJCS5uYW1lCSAgICA9ICJQQUwiLAotCQkuY2xvY2sJCT0gMTA3NTIwLAorCQkuY2xvY2sJCT0gMTA4MDAwLAogCQkucmVmcmVzaAk9IDI1MDAwLAogCQkub3ZlcnNhbXBsZQk9IFRWX09WRVJTQU1QTEVfOFgsCiAJCS5jb21wb25lbnRfb25seSA9IDAsCiAKLQkJLmhzeW5jX2VuZAk9IDY0LAkJICAgIC5oYmxhbmtfZW5kCQk9IDEyOCwKKwkJLmhzeW5jX2VuZAk9IDY0LAkJICAgIC5oYmxhbmtfZW5kCQk9IDE0MiwKIAkJLmhibGFua19zdGFydAk9IDg0NCwJICAgIC5odG90YWwJCT0gODYzLAogCiAJCS5wcm9ncmVzc2l2ZQk9IGZhbHNlLCAgICAudHJpbGV2ZWxfc3luYyA9IGZhbHNlLApAQCAtNjU5LDggKzY1OSw4IEBACiAKIAkJLyogZGVzaXJlZCA0LjQzMzYxODAgYWN0dWFsIDQuNDMzNjE4MCBjbG9jayAxMDcuNTIgKi8KIAkJLmRkYTFfaW5jICAgICAgID0gICAgMTY4LAotCQkuZGRhMl9pbmMgICAgICAgPSAgMTg1NTcsICAgICAgIC5kZGEyX3NpemUgICAgICA9ICAyMDYyNSwKLQkJLmRkYTNfaW5jICAgICAgID0gICAgICAwLCAgICAgICAuZGRhM19zaXplICAgICAgPSAgICAgIDAsCisJCS5kZGEyX2luYyAgICAgICA9ICAgNDEyMiwgICAgICAgLmRkYTJfc2l6ZSAgICAgID0gIDI3NjQ4LAorCQkuZGRhM19pbmMgICAgICAgPSAgICAgNjcsICAgICAgIC5kZGEzX3NpemUgICAgICA9ICAgIDYyNSwKIAkJLnNjX3Jlc2V0ICAgPSBUVl9TQ19SRVNFVF9FVkVSWV84LAogCQkucGFsX2J1cnN0ICA9IHRydWUsCiAKQEAgLTY4OSw3ICs2ODksNyBAQAogCQkudmVxX2VuYSAgICAgICAgPSBmYWxzZSwKIAogCQkudmlfZW5kX2YxICAgICAgPSA0NCwgICAgICAgICAgICAgICAudmlfZW5kX2YyICAgICAgICAgID0gNDQsCi0JCS5uYnJfZW5kICAgICAgICA9IDQ5NiwKKwkJLm5icl9lbmQgICAgICAgID0gNDc5LAogCiAJCS5idXJzdF9lbmEgICAgICA9IGZhbHNlLAogCkBAIC03MTMsNyArNzEzLDcgQEAKIAkJLnZlcV9lbmEgICAgICAgID0gZmFsc2UsCiAKIAkJLnZpX2VuZF9mMSAgICAgID0gNDQsICAgICAgICAgICAgICAgLnZpX2VuZF9mMiAgICAgICAgICA9IDQ0LAotCQkubmJyX2VuZCAgICAgICAgPSA0OTYsCisJCS5uYnJfZW5kICAgICAgICA9IDQ3OSwKIAogCQkuYnVyc3RfZW5hICAgICAgPSBmYWxzZSwKIApAQCAtODc2LDcgKzg3Niw3IEBACiAJCS5jb21wb25lbnRfb25seSA9IDEsCiAKIAkJLmhzeW5jX2VuZCAgICAgID0gODgsICAgICAgICAgICAgICAgLmhibGFua19lbmQgICAgICAgICA9IDIzNSwKLQkJLmhibGFua19zdGFydCAgID0gMjE1NSwgICAgICAgICAgICAgLmh0b3RhbCAgICAgICAgICAgICA9IDIyMDAsCisJCS5oYmxhbmtfc3RhcnQgICA9IDIxNTUsICAgICAgICAgICAgIC5odG90YWwgICAgICAgICAgICAgPSAyMjAxLAogCiAJCS5wcm9ncmVzc2l2ZSAgICA9IGZhbHNlLCAJICAgIC50cmlsZXZlbF9zeW5jID0gdHJ1ZSwKIApAQCAtMTA4Miw3ICsxMDgyLDcgQEAKIAljb25zdCBzdHJ1Y3QgdHZfbW9kZSAqdHZfbW9kZSA9IGludGVsX3R2X21vZGVfZmluZChpbnRlbF9vdXRwdXQpOwogCiAJLyogRW5zdXJlIFRWIHJlZnJlc2ggaXMgY2xvc2UgdG8gZGVzaXJlZCByZWZyZXNoICovCi0JaWYgKHR2X21vZGUgJiYgYWJzKHR2X21vZGUtPnJlZnJlc2ggLSBkcm1fbW9kZV92cmVmcmVzaChtb2RlKSkgPCAxKQorCWlmICh0dl9tb2RlICYmIGFicyh0dl9tb2RlLT5yZWZyZXNoIC0gZHJtX21vZGVfdnJlZnJlc2gobW9kZSkpIDwgMTApCiAJCXJldHVybiBNT0RFX09LOwogCXJldHVybiBNT0RFX0NMT0NLX1JBTkdFOwogfQpAQCAtMTEzNSw3ICsxMTM1LDggQEAKIAlpZiAoIXR2X21vZGUpCiAJCXJldHVybjsJLyogY2FuJ3QgaGFwcGVuIChtb2RlX3ByZXBhcmUgcHJldmVudHMgdGhpcykgKi8KIAotCXR2X2N0bCA9IDA7CisJdHZfY3RsID0gSTkxNV9SRUFEKFRWX0NUTCk7CisJdHZfY3RsICY9IFRWX0NUTF9TQVZFOwogCiAJc3dpdGNoICh0dl9wcml2LT50eXBlKSB7CiAJZGVmYXVsdDoKQEAgLTEyMTUsNyArMTIxNiw2IEBACiAJLyogZGRhMSBpbXBsaWVzIHZhbGlkIHZpZGVvIGxldmVscyAqLwogCWlmICh0dl9tb2RlLT5kZGExX2luYykgewogCQlzY2N0bDEgfD0gVFZfU0NfRERBMV9FTjsKLQkJc2NjdGwxIHw9IHZpZGVvX2xldmVscy0+YnVyc3QgPDwgVFZfQlVSU1RfTEVWRUxfU0hJRlQ7CiAJfQogCiAJaWYgKHR2X21vZGUtPmRkYTJfaW5jKQpAQCAtMTIyNSw2ICsxMjI1LDcgQEAKIAkJc2NjdGwxIHw9IFRWX1NDX0REQTNfRU47CiAKIAlzY2N0bDEgfD0gdHZfbW9kZS0+c2NfcmVzZXQ7CisJc2NjdGwxIHw9IHZpZGVvX2xldmVscy0+YnVyc3QgPDwgVFZfQlVSU1RfTEVWRUxfU0hJRlQ7CiAJc2NjdGwxIHw9IHR2X21vZGUtPmRkYTFfaW5jIDw8IFRWX1NDRERBMV9JTkNfU0hJRlQ7CiAKIAlzY2N0bDIgPSB0dl9tb2RlLT5kZGEyX3NpemUgPDwgVFZfU0NEREEyX1NJWkVfU0hJRlQgfApAQCAtMTI2Niw3ICsxMjY3LDExIEBACiAJCQkgICBjb2xvcl9jb252ZXJzaW9uLT5hdik7CiAJfQogCi0JSTkxNV9XUklURShUVl9DTFJfS05PQlMsIDB4MDA2MDYwMDApOworCWlmIChJU19JOTY1RyhkZXYpKQorCQlJOTE1X1dSSVRFKFRWX0NMUl9LTk9CUywgMHgwMDQwNDAwMCk7CisJZWxzZQorCQlJOTE1X1dSSVRFKFRWX0NMUl9LTk9CUywgMHgwMDYwNjAwMCk7CisKIAlpZiAodmlkZW9fbGV2ZWxzKQogCQlJOTE1X1dSSVRFKFRWX0NMUl9MRVZFTCwKIAkJCSAgICgodmlkZW9fbGV2ZWxzLT5ibGFjayA8PCBUVl9CTEFDS19MRVZFTF9TSElGVCkgfApAQCAtMTQwMSw2ICsxNDA2LDcgQEAKIAkJdHZfZGFjID0gSTkxNV9SRUFEKFRWX0RBQyk7CiAJCUk5MTVfV1JJVEUoVFZfREFDLCBzYXZlX3R2X2RhYyk7CiAJCUk5MTVfV1JJVEUoVFZfQ1RMLCBzYXZlX3R2X2N0bCk7CisJCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYpOwogCX0KIAkvKgogCSAqICBBIEIgQwpAQCAtMTQ1MSw3ICsxNDU3LDcgQEAKIAltb2RlID0gcmVwb3J0ZWRfbW9kZXNbMF07CiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKCZtb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKIAotCWlmIChlbmNvZGVyLT5jcnRjKSB7CisJaWYgKGVuY29kZXItPmNydGMgJiYgZW5jb2Rlci0+Y3J0Yy0+ZW5hYmxlZCkgewogCQl0eXBlID0gaW50ZWxfdHZfZGV0ZWN0X3R5cGUoZW5jb2Rlci0+Y3J0YywgaW50ZWxfb3V0cHV0KTsKIAl9IGVsc2UgewogCQljcnRjID0gaW50ZWxfZ2V0X2xvYWRfZGV0ZWN0X3BpcGUoaW50ZWxfb3V0cHV0LCAmbW9kZSwgJmRwbXNfbW9kZSk7CkBAIC0xNDYyLDYgKzE0NjgsOCBAQAogCQkJdHlwZSA9IC0xOwogCX0KIAorCXR2X3ByaXYtPnR5cGUgPSB0eXBlOworCiAJaWYgKHR5cGUgPCAwKQogCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKQEAgLTE0OTUsNyArMTUwMyw4IEBACiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGVfcHRyOwogCXN0cnVjdCBpbnRlbF9vdXRwdXQgKmludGVsX291dHB1dCA9IHRvX2ludGVsX291dHB1dChjb25uZWN0b3IpOwogCWNvbnN0IHN0cnVjdCB0dl9tb2RlICp0dl9tb2RlID0gaW50ZWxfdHZfbW9kZV9maW5kKGludGVsX291dHB1dCk7Ci0JaW50IGo7CisJaW50IGosIGNvdW50ID0gMDsKKwl1NjQgdG1wOwogCiAJZm9yIChqID0gMDsgaiA8IHNpemVvZihpbnB1dF9yZXNfdGFibGUpIC8gc2l6ZW9mKGlucHV0X3Jlc190YWJsZVswXSk7CiAJICAgICBqKyspIHsKQEAgLTE1MTAsOCArMTUxOSw5IEBACiAJCQkJCSYmICF0dl9tb2RlLT5jb21wb25lbnRfb25seSkpCiAJCQljb250aW51ZTsKIAotCQltb2RlX3B0ciA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlKSwKLQkJCQkgICAgICBEUk1fTUVNX0RSSVZFUik7CisJCW1vZGVfcHRyID0gZHJtX21vZGVfY3JlYXRlKGNvbm5lY3Rvci0+ZGV2KTsKKwkJaWYgKCFtb2RlX3B0cikKKwkJCWNvbnRpbnVlOwogCQlzdHJuY3B5KG1vZGVfcHRyLT5uYW1lLCBpbnB1dC0+bmFtZSwgRFJNX0RJU1BMQVlfTU9ERV9MRU4pOwogCiAJCW1vZGVfcHRyLT5oZGlzcGxheSA9IGhhY3RpdmVfczsKQEAgLTE1MjgsMTUgKzE1MzgsMTcgQEAKIAkJCW1vZGVfcHRyLT52c3luY19lbmQgPSBtb2RlX3B0ci0+dnN5bmNfc3RhcnQgICsgMTsKIAkJbW9kZV9wdHItPnZ0b3RhbCA9IHZhY3RpdmVfcyArIDMzOwogCi0JCW1vZGVfcHRyLT5jbG9jayA9IChpbnQpICh0dl9tb2RlLT5yZWZyZXNoICoKLQkJCQkJIG1vZGVfcHRyLT52dG90YWwgKgotCQkJCQkgbW9kZV9wdHItPmh0b3RhbCAvIDEwMDApIC8gMTAwMDsKKwkJdG1wID0gKHU2NCkgdHZfbW9kZS0+cmVmcmVzaCAqIG1vZGVfcHRyLT52dG90YWw7CisJCXRtcCAqPSBtb2RlX3B0ci0+aHRvdGFsOworCQl0bXAgPSBkaXZfdTY0KHRtcCwgMTAwMDAwMCk7CisJCW1vZGVfcHRyLT5jbG9jayA9IChpbnQpIHRtcDsKIAogCQltb2RlX3B0ci0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSOwogCQlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZV9wdHIpOworCQljb3VudCsrOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBjb3VudDsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwppbmRleCAxZjViNWQ0Li5hYTIxNDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCkBAIC0yMjcsMTIgKzIyNyw5IEBACiAgKi8KIHN0YXRpYyBpbnQgaGlkZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7Ci0JaW50IHJldHZhbDsKIAlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmxpc3QtPmZhc3luYyk7Ci0KLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFjb3JuLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFjb3JuLmMKaW5kZXggOWFlZmI1ZS4uODY3OTY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hY29ybi5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWNvcm4uYwpAQCAtMTUsOSArMTUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb2MuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKaW5kZXggYmU4ZWUyYy4uZWNlMDEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKQEAgLTE5MywyMiArMTkzLDI0IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaTJjX2dldF9jbG9ja3Moc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQogewotCWlmIChjcHVfaXNfb21hcDE2eHgoKSB8fCBjcHVfY2xhc3NfaXNfb21hcDIoKSkgewotCQlkZXYtPmljbGsgPSBjbGtfZ2V0KGRldi0+ZGV2LCAiaTJjX2ljayIpOwotCQlpZiAoSVNfRVJSKGRldi0+aWNsaykpIHsKLQkJCWRldi0+aWNsayA9IE5VTEw7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQorCWludCByZXQ7CisKKwlkZXYtPmljbGsgPSBjbGtfZ2V0KGRldi0+ZGV2LCAiaWNrIik7CisJaWYgKElTX0VSUihkZXYtPmljbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZGV2LT5pY2xrKTsKKwkJZGV2LT5pY2xrID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQlkZXYtPmZjbGsgPSBjbGtfZ2V0KGRldi0+ZGV2LCAiaTJjX2ZjayIpOworCWRldi0+ZmNsayA9IGNsa19nZXQoZGV2LT5kZXYsICJmY2siKTsKIAlpZiAoSVNfRVJSKGRldi0+ZmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihkZXYtPmZjbGspOwogCQlpZiAoZGV2LT5pY2xrICE9IE5VTEwpIHsKIAkJCWNsa19wdXQoZGV2LT5pY2xrKTsKIAkJCWRldi0+aWNsayA9IE5VTEw7CiAJCX0KIAkJZGV2LT5mY2xrID0gTlVMTDsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yMTgsMTggKzIyMCwxNSBAQAogewogCWNsa19wdXQoZGV2LT5mY2xrKTsKIAlkZXYtPmZjbGsgPSBOVUxMOwotCWlmIChkZXYtPmljbGsgIT0gTlVMTCkgewotCQljbGtfcHV0KGRldi0+aWNsayk7Ci0JCWRldi0+aWNsayA9IE5VTEw7Ci0JfQorCWNsa19wdXQoZGV2LT5pY2xrKTsKKwlkZXYtPmljbGsgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBvbWFwX2kyY191bmlkbGUoc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQogewogCVdBUk5fT04oIWRldi0+aWRsZSk7CiAKLQlpZiAoZGV2LT5pY2xrICE9IE5VTEwpCi0JCWNsa19lbmFibGUoZGV2LT5pY2xrKTsKKwljbGtfZW5hYmxlKGRldi0+aWNsayk7CiAJY2xrX2VuYWJsZShkZXYtPmZjbGspOwogCWRldi0+aWRsZSA9IDA7CiAJaWYgKGRldi0+aWVzdGF0ZSkKQEAgLTI1NCw4ICsyNTMsNyBAQAogCX0KIAlkZXYtPmlkbGUgPSAxOwogCWNsa19kaXNhYmxlKGRldi0+ZmNsayk7Ci0JaWYgKGRldi0+aWNsayAhPSBOVUxMKQotCQljbGtfZGlzYWJsZShkZXYtPmljbGspOworCWNsa19kaXNhYmxlKGRldi0+aWNsayk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9pMmNfaW5pdChzdHJ1Y3Qgb21hcF9pMmNfZGV2ICpkZXYpCkBAIC0zMTIsMTUgKzMxMCwxNCBAQAogCW9tYXBfaTJjX3dyaXRlX3JlZyhkZXYsIE9NQVBfSTJDX0NPTl9SRUcsIDApOwogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCXN0cnVjdCBjbGsgKmFybXhvcl9jazsKKwkJLyoKKwkJICogVGhlIEkyQyBmdW5jdGlvbmFsIGNsb2NrIGlzIHRoZSBhcm14b3JfY2ssIHNvIHRoZXJlJ3MKKwkJICogbm8gbmVlZCB0byBnZXQgImFybXhvcl9jayIgc2VwYXJhdGVseS4gIE5vdywgaWYgT01BUDI0MjAKKwkJICogYWx3YXlzIHJldHVybnMgMTJNSHogZm9yIHRoZSBmdW5jdGlvbmFsIGNsb2NrLCB3ZSBjYW4KKwkJICogZG8gdGhpcyBiaXQgdW5jb25kaXRpb25hbGx5LgorCQkgKi8KKwkJZmNsa19yYXRlID0gY2xrX2dldF9yYXRlKGRldi0+ZmNsayk7CiAKLQkJYXJteG9yX2NrID0gY2xrX2dldChOVUxMLCAiYXJteG9yX2NrIik7Ci0JCWlmIChJU19FUlIoYXJteG9yX2NrKSkKLQkJCWRldl93YXJuKGRldi0+ZGV2LCAiQ291bGQgbm90IGdldCBhcm14b3JfY2tcbiIpOwotCQllbHNlIHsKLQkJCWZjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShhcm14b3JfY2spOwotCQkJY2xrX3B1dChhcm14b3JfY2spOwotCQl9CiAJCS8qIFRSTSBmb3IgNTkxMiBzYXlzIHRoZSBJMkMgY2xvY2sgbXVzdCBiZSBwcmVzY2FsZWQgdG8gYmUKIAkJICogYmV0d2VlbiA3IC0gMTIgTUh6LiBUaGUgWE9SIGlucHV0IGNsb2NrIGlzIHR5cGljYWxseQogCQkgKiAxMiwgMTMgb3IgMTkuMiBNSHouIFNvIHdlIHNob3VsZCBoYXZlIGNvZGUgdGhhdCBwcm9kdWNlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmVyc2F0aWxlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZlcnNhdGlsZS5jCmluZGV4IDQ2NzhiYWIuLmZlZGU2MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmVyc2F0aWxlLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12ZXJzYXRpbGUuYwpAQCAtMTAyLDcgKzEwMiwxMyBAQAogCWkyYy0+YWxnbyA9IGkyY192ZXJzYXRpbGVfYWxnbzsKIAlpMmMtPmFsZ28uZGF0YSA9IGkyYzsKIAotCXJldCA9IGkyY19iaXRfYWRkX2J1cygmaTJjLT5hZGFwKTsKKwlpZiAoZGV2LT5pZCA+PSAwKSB7CisJCS8qIHN0YXRpYyBidXMgbnVtYmVyaW5nICovCisJCWkyYy0+YWRhcC5uciA9IGRldi0+aWQ7CisJCXJldCA9IGkyY19iaXRfYWRkX251bWJlcmVkX2J1cygmaTJjLT5hZGFwKTsKKwl9IGVsc2UKKwkJLyogZHluYW1pYyBidXMgbnVtYmVyaW5nICovCisJCXJldCA9IGkyY19iaXRfYWRkX2J1cygmaTJjLT5hZGFwKTsKIAlpZiAocmV0ID49IDApIHsKIAkJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBpMmMpOwogCQlyZXR1cm4gMDsKQEAgLTE0Niw3ICsxNTIsNyBAQAogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpMmNfdmVyc2F0aWxlX2RyaXZlcik7CiB9CiAKLW1vZHVsZV9pbml0KGkyY192ZXJzYXRpbGVfaW5pdCk7CitzdWJzeXNfaW5pdGNhbGwoaTJjX3ZlcnNhdGlsZV9pbml0KTsKIG1vZHVsZV9leGl0KGkyY192ZXJzYXRpbGVfZXhpdCk7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQVJNIFZlcnNhdGlsZSBJMkMgYnVzIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggZTdkOTg0OC4uZmJiOTAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC04NDEsNyArODQxLDcgQEAKIAogCWlmIChjbGllbnQtPmRyaXZlciAmJiAhaXNfbmV3c3R5bGVfZHJpdmVyKGNsaWVudC0+ZHJpdmVyKSkgewogCQljbGllbnQtPmRldi5yZWxlYXNlID0gaTJjX2NsaWVudF9yZWxlYXNlOwotCQljbGllbnQtPmRldi51ZXZlbnRfc3VwcHJlc3MgPSAxOworCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmY2xpZW50LT5kZXYsIDEpOwogCX0gZWxzZQogCQljbGllbnQtPmRldi5yZWxlYXNlID0gaTJjX2NsaWVudF9kZXZfcmVsZWFzZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvS2NvbmZpZyBiL2RyaXZlcnMvaWRlL0tjb25maWcKaW5kZXggNWVhM2JmYS4uNjQwYzk5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvS2NvbmZpZworKysgYi9kcml2ZXJzL2lkZS9LY29uZmlnCkBAIC01Niw4ICs1NiwxMiBAQAogCiBjb21tZW50ICJQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzIgogCitjb25maWcgSURFX1hGRVJfTU9ERQorCWJvb2wKKwogY29uZmlnIElERV9USU1JTkdTCiAJYm9vbAorCXNlbGVjdCBJREVfWEZFUl9NT0RFCiAKIGNvbmZpZyBJREVfQVRBUEkKIAlib29sCkBAIC02OTgsNiArNzAyLDcgQEAKIGNvbmZpZyBCTEtfREVWX0lERV9BVTFYWFgKICAgICAgICBib29sICJJREUgZm9yIEFNRCBBbGNoZW15IEF1MTIwMCIKICAgICAgICBkZXBlbmRzIG9uIFNPQ19BVTEyMDAKKyAgICAgICBzZWxlY3QgSURFX1hGRVJfTU9ERQogY2hvaWNlCiAgICAgICAgcHJvbXB0ICJJREUgTW9kZSBmb3IgQU1EIEFsY2hlbXkgQXUxMjAwIgogICAgICAgIGRlZmF1bHQgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9QSU9fREJETUEKQEAgLTg3MSw2ICs4NzYsNyBAQAogCiBjb25maWcgQkxLX0RFVl9EVEMyMjc4CiAJdHJpc3RhdGUgIkRUQy0yMjc4IHN1cHBvcnQiCisJc2VsZWN0IElERV9YRkVSX01PREUKIAlzZWxlY3QgSURFX0xFR0FDWQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGlzIGVuYWJsZWQgYXQgcnVudGltZSB1c2luZyB0aGUgImR0YzIyNzgucHJvYmUiIGtlcm5lbApAQCAtOTAyLDYgKzkwOCw3IEBACiAKIGNvbmZpZyBCTEtfREVWX1VNQzg2NzIKIAl0cmlzdGF0ZSAiVU1DLTg2NzIgc3VwcG9ydCIKKwlzZWxlY3QgSURFX1hGRVJfTU9ERQogCXNlbGVjdCBJREVfTEVHQUNZCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhdCBydW50aW1lIHVzaW5nIHRoZSAidW1jODY3Mi5wcm9iZSIga2VybmVsCkBAIC05MTUsNSArOTIyLDYgQEAKIGNvbmZpZyBCTEtfREVWX0lERURNQQogCWRlZl9ib29sIEJMS19ERVZfSURFRE1BX1NGRiB8fCBcCiAJCSBCTEtfREVWX0lERURNQV9JQ1MgfHwgQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BCisJc2VsZWN0IElERV9YRkVSX01PREUKIAogZW5kaWYgIyBJREUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL01ha2VmaWxlIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKaW5kZXggMWMzMjZkOS4uOWI0YmJlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pZGUvTWFrZWZpbGUKQEAgLTUsOSArNSwxMSBAQAogRVhUUkFfQ0ZMQUdTCQkJCSs9IC1JZHJpdmVycy9pZGUKIAogaWRlLWNvcmUteSArPSBpZGUubyBpZGUtaW9jdGxzLm8gaWRlLWlvLm8gaWRlLWlvcHMubyBpZGUtbGliLm8gaWRlLXByb2JlLm8gXAotCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1wbS5vIGlkZS1wYXJrLm8gaWRlLXBpby1ibGFja2xpc3QubyBpZGUtc3lzZnMubworCSAgICAgIGlkZS10YXNrZmlsZS5vIGlkZS1wbS5vIGlkZS1wYXJrLm8gaWRlLXN5c2ZzLm8gaWRlLWRldnNldHMubyBcCisJICAgICAgaWRlLWlvLXN0ZC5vIGlkZS1laC5vCiAKICMgY29yZSBJREUgY29kZQoraWRlLWNvcmUtJChDT05GSUdfSURFX1hGRVJfTU9ERSkJKz0gaWRlLXBpby1ibGFja2xpc3QubyBpZGUteGZlci1tb2RlLm8KIGlkZS1jb3JlLSQoQ09ORklHX0lERV9USU1JTkdTKQkJKz0gaWRlLXRpbWluZ3MubwogaWRlLWNvcmUtJChDT05GSUdfSURFX0FUQVBJKQkJKz0gaWRlLWF0YXBpLm8KIGlkZS1jb3JlLSQoQ09ORklHX0JMS19ERVZfSURFUENJKQkrPSBzZXR1cC1wY2kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYWVjNjJ4eC5jIGIvZHJpdmVycy9pZGUvYWVjNjJ4eC5jCmluZGV4IDQ0ODViOWMuLjg3OGY4ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FlYzYyeHguYworKysgYi9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCWRyaXZlLT5od2lmLT5wb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBwaW8gKyBYRkVSX1BJT18wKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfYWVjNjJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfYWVjNjJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCS8qIFRoZXNlIGFyZSBuZWNlc3NhcnkgdG8gZ2V0IEFFQzYyODAgTWFjaW50b3NoIGNhcmRzIHRvIHdvcmsgKi8KIAlpZiAoKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY1KSB8fApAQCAtMTU2LDcgKzE1Niw3IEBACiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NGEsIHJlZzRhaCB8IDB4ODApOwogCX0KIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU4IGF0cDg2eF9jYWJsZV9kZXRlY3QoaWRlX2h3aWZfdCAqaHdpZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMgYi9kcml2ZXJzL2lkZS9hbGltMTV4My5jCmluZGV4IDY2ZjQzMDguLmQzNTEzYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKKysrIGIvZHJpdmVycy9pZGUvYWxpbTE1eDMuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAgKglhcHByb3ByaWF0ZSBhbHNvIHNldHMgdXAgdGhlIDE1MzMgc291dGhicmlkZ2UuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfYWxpMTV4MyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfYWxpMTV4MyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggdG1wYnl0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FtZDc0eHguYyBiL2RyaXZlcnMvaWRlL2FtZDc0eHguYwppbmRleCA3NzI2N2M4Li42MjhjZDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hbWQ3NHh4LmMKKysrIGIvZHJpdmVycy9pZGUvYW1kNzR4eC5jCkBAIC0xNDAsNyArMTQwLDcgQEAKICAqIFRoZSBpbml0aWFsaXphdGlvbiBjYWxsYmFjay4gIEluaXRpYWxpemUgZHJpdmUgaW5kZXBlbmRlbnQgcmVnaXN0ZXJzLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2FtZDc0eHgoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2FtZDc0eHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1OCB0ID0gMCwgb2Zmc2V0ID0gYW1kX29mZnNldChkZXYpOwogCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJdCB8PSAweGYwOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIEFNRF9JREVfQ09ORklHICsgb2Zmc2V0LCB0KTsKIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHU4IGFtZF9jYWJsZV9kZXRlY3QoaWRlX2h3aWZfdCAqaHdpZikKQEAgLTE4MywxNCArMTgzLDYgQEAKIAkJcmV0dXJuIEFUQV9DQkxfUEFUQTQwOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX2FtZDc0eHgoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwotCi0JaWYgKGh3aWYtPmlycSA9PSAwKSAvKiAwIGlzIGJvZ3VzIGJ1dCB3aWxsIGRvIGZvciBub3cgKi8KLQkJaHdpZi0+aXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIGh3aWYtPmNoYW5uZWwpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBhbWRfcG9ydF9vcHMgPSB7CiAJLnNldF9waW9fbW9kZQkJPSBhbWRfc2V0X3Bpb19tb2RlLAogCS5zZXRfZG1hX21vZGUJCT0gYW1kX3NldF9kcml2ZSwKQEAgLTIwNyw3ICsxOTksNiBAQAogCXsJCQkJCQkJCVwKIAkJLm5hbWUJCT0gRFJWX05BTUUsCQkJCVwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9hbWQ3NHh4LAkJCVwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9hbWQ3NHh4LAkJCVwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDAsMHgwMiwweDAyfSwgezB4NDAsMHgwMSwweDAxfX0sCVwKIAkJLnBvcnRfb3BzCT0gJmFtZF9wb3J0X29wcywJCQlcCiAJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19BTUQsCQkJXApAQCAtMjIxLDcgKzIxMiw2IEBACiAJewkJCQkJCQkJXAogCQkubmFtZQkJPSBEUlZfTkFNRSwJCQkJXAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2FtZDc0eHgsCQkJXAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2FtZDc0eHgsCQkJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MCwweDAyLDB4MDJ9LCB7MHg1MCwweDAxLDB4MDF9fSwJXAogCQkucG9ydF9vcHMJPSAmYW1kX3BvcnRfb3BzLAkJCVwKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0FNRCwJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdGlpeHAuYyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCmluZGV4IGVjZDFlNjIuLjkyM2NiZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL2F0aWl4cC5jCkBAIC0xNDIsNyArMTQyLDYgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5lbmFibGViaXRzCT0ge3sweDQ4LDB4MDEsMHgwMH0sIHsweDQ4LDB4MDgsMHgwMH19LAogCQkucG9ydF9vcHMJPSAmYXRpaXhwX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19MRUdBQ1lfSVJRUywKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKQEAgLTE1MSw3ICsxNTAsNyBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDgsMHgwMSwweDAwfSwgezB4MDAsMHgwMCwweDAwfX0sCiAJCS5wb3J0X29wcwk9ICZhdGlpeHBfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSB8IElERV9IRkxBR19MRUdBQ1lfSVJRUywKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jIGIvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCmluZGV4IDc5YTJkZmUuLjE1NGVjMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYworKysgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKQEAgLTUzNiw5ICs1MzYsOCBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IGF1X2lkZV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1X2lkZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCV9hdWlkZV9od2lmICphaHdpZiA9ICZhdWlkZV9od2lmOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBpZGVfaG9zdCAqaG9zdDsKQEAgLTU1MiwyMyArNTUxLDIzIEBACiAjZW5kaWYKIAogCW1lbXNldCgmYXVpZGVfaHdpZiwgMCwgc2l6ZW9mKF9hdWlkZV9od2lmKSk7Ci0JYWh3aWYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJYWh3aWYtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCiAJaWYgKHJlcyA9PSBOVUxMKSB7Ci0JCXByX2RlYnVnKCIlcyAlZDogbm8gYmFzZSBhZGRyZXNzXG4iLCBEUlZfTkFNRSwgcGRldi0+aWQpOworCQlwcl9kZWJ1ZygiJXMgJWQ6IG5vIGJhc2UgYWRkcmVzc1xuIiwgRFJWX05BTUUsIGRldi0+aWQpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKGFod2lmLT5pcnEgPCAwKSB7Ci0JCXByX2RlYnVnKCIlcyAlZDogbm8gSVJRXG4iLCBEUlZfTkFNRSwgcGRldi0+aWQpOworCQlwcl9kZWJ1ZygiJXMgJWQ6IG5vIElSUVxuIiwgRFJWX05BTUUsIGRldi0+aWQpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLAotCQkJCXBkZXYtPm5hbWUpKSB7CisJCQkJZGV2LT5uYW1lKSkgewogCQlwcl9kZWJ1ZygiJXM6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIsIERSVl9OQU1FKTsKIAkJcmV0ID0gIC1FQlVTWTsKIAkJZ290byBvdXQ7CkBAIC01ODMsNyArNTgyLDcgQEAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAlhdWlkZV9zZXR1cF9wb3J0cygmaHcsIGFod2lmKTsKIAlody5pcnEgPSBhaHdpZi0+aXJxOwotCWh3LmRldiA9IGRldjsKKwlody5kZXYgPSAmZGV2LT5kZXY7CiAJaHcuY2hpcHNldCA9IGlkZV9hdTF4eHg7CiAKIAlyZXQgPSBpZGVfaG9zdF9hZGQoJmF1MXh4eF9wb3J0X2luZm8sIGh3cywgJmhvc3QpOwpAQCAtNTkyLDcgKzU5MSw3IEBACiAKIAlhdWlkZV9od2lmLmh3aWYgPSBob3N0LT5wb3J0c1swXTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJBdTF4eHggSURFKGJ1aWx0aW4pIGNvbmZpZ3VyZWQgZm9yICVzXG4iLCBtb2RlICk7CiAKQEAgLTYwMCwzOCArNTk5LDM5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhdV9pZGVfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgYXVfaWRlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJX2F1aWRlX2h3aWYgKmFod2lmID0gJmF1aWRlX2h3aWY7CiAKIAlpZGVfaG9zdF9yZW1vdmUoaG9zdCk7CiAKIAlpb3VubWFwKCh2b2lkICopYWh3aWYtPnJlZ2Jhc2UpOwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTEyMDBfaWRlX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiYXUxMjAwLWlkZSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdTEyMDBfaWRlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiYXUxMjAwLWlkZSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZSAJCT0gYXVfaWRlX3Byb2JlLAogCS5yZW1vdmUJCT0gYXVfaWRlX3JlbW92ZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGF1X2lkZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MTIwMF9pZGVfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGF1X2lkZV9leGl0KHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMF9pZGVfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXUxMjAwX2lkZV9kcml2ZXIpOwogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jbWQ2NHguYyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCmluZGV4IDJmOTY4OGQuLmFlZWUwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCkBAIC0zMzMsNyArMzMzLDcgQEAKIAlyZXR1cm4gKGRtYV9zdGF0ICYgNykgIT0gNDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfY21kNjR4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9jbWQ2NHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1OCBtcmRtb2RlID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY3M1NTIwLmMgYi9kcml2ZXJzL2lkZS9jczU1MjAuYwppbmRleCBkMDAzYmVjLi41OGZiOTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jczU1MjAuYworKysgYi9kcml2ZXJzL2lkZS9jczU1MjAuYwpAQCAtMTMzLDcgKzEzMyw4IEBACiAJICoJZG8gYWxsIHRoZSBkZXZpY2Ugc2V0dXAgZm9yIHVzCiAJICovCiAKLQlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgMTQsICZod1swXSwgJmh3c1swXSk7CisJaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsICZod1swXSwgJmh3c1swXSk7CisJaHdbMF0uaXJxID0gMTQ7CiAKIAlyZXR1cm4gaWRlX2hvc3RfYWRkKGQsIGh3cywgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jczU1MzAuYyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCmluZGV4IGQ4ZWRlODUuLjhlOGIzNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCkBAIC0xMzUsNyArMTM1LDcgQEAKICAqCUluaXRpYWxpemUgdGhlIGNzNTUzMCBicmlkZ2UgZm9yIHJlbGlhYmxlIElERSBETUEgb3BlcmF0aW9uLgogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X2NzNTUzMChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfY3M1NTMwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKm1hc3Rlcl8wID0gTlVMTCwgKmNzNTUzMF8wID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvZGVsa2luX2NiLmMgYi9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYwppbmRleCA4ZjFiMmQ5Li5iYWNiMTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYworKysgYi9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYwpAQCAtNDYsNyArNDYsNyBAQAogCS5xdWlya3Byb2MJCT0gaWRlX3VuZGVjb2RlZF9zbGF2ZSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsa2luX2NiX2luaXRfY2hpcHNldChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBkZWxraW5fY2JfaW5pdF9jaGlwc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9ocHQzNjYuYyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCmluZGV4IDNlYjliNWMuLmQzYjNlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCkBAIC05OTUsNyArOTk1LDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgbWNyX2FkZHIgKyAxLCBuZXdfbWNyKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfaHB0MzY2KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9ocHQzNjYoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGlvX2Jhc2UJPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKIAlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oJmRldi0+ZGV2KTsKQEAgLTEyMzcsNyArMTIzNyw3IEBACiAJaHB0M3h4X2Rpc2FibGVfZmFzdF9pcnEoZGV2LCAweDUwKTsKIAlocHQzeHhfZGlzYWJsZV9mYXN0X2lycShkZXYsIDB4NTQpOwogCi0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTggaHB0M3h4X2NhYmxlX2RldGVjdChpZGVfaHdpZl90ICpod2lmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKaW5kZXggZWM3ZDA3Zi4uNWI3MDRmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWFjcGkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCkBAIC0yMCw5ICsyMCw2IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogCiAjZGVmaW5lIFJFR1NfUEVSX0dURgkJNwotc3RydWN0IHRhc2tmaWxlX2FycmF5IHsKLQl1OAl0ZmFbUkVHU19QRVJfR1RGXTsJLyogcmVncy4gMHgxZjEgLSAweDFmNyAqLwotfTsKIAogc3RydWN0IEdUTV9idWZmZXIgewogCXUzMglQSU9fc3BlZWQwOwpAQCAtODksMTIgKzg2LDggQEAKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiAKLXN0YXRpYyBpbnQgaWRlX2FjcGlfYmxhY2tsaXN0KHZvaWQpCitpbnQgaWRlX2FjcGlfaW5pdCh2b2lkKQogewotCXN0YXRpYyBpbnQgZG9uZTsKLQlpZiAoZG9uZSkKLQkJcmV0dXJuIDA7Ci0JZG9uZSA9IDE7CiAJZG1pX2NoZWNrX3N5c3RlbShpZGVfYWNwaV9kbWlfdGFibGUpOwogCXJldHVybiAwOwogfQpAQCAtMjAyLDQwICsxOTUsNiBAQAogfQogCiAvKioKLSAqIGlkZV9hY3BpX2RyaXZlX2dldF9oYW5kbGUgLSBHZXQgQUNQSSBvYmplY3QgaGFuZGxlIGZvciBhIGdpdmVuIGRyaXZlCi0gKiBAZHJpdmU6IGRldmljZSB0byBsb2NhdGUKLSAqCi0gKiBSZXRyaWV2ZXMgdGhlIG9iamVjdCBoYW5kbGUgb2YgYSBnaXZlbiBkcml2ZS4gQWNjb3JkaW5nIHRvIHRoZSBBQ1BJCi0gKiBzcGVjIHRoZSBkcml2ZSBpcyBhIGNoaWxkIG9mIHRoZSBod2lmLgotICoKLSAqIFJldHVybnMgaGFuZGxlIG9uIHN1Y2Nlc3MsIDAgb24gZXJyb3IuCi0gKi8KLXN0YXRpYyBhY3BpX2hhbmRsZSBpZGVfYWNwaV9kcml2ZV9nZXRfaGFuZGxlKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90CSpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaW50CQkgcG9ydDsKLQlhY3BpX2hhbmRsZQkgZHJpdmVfaGFuZGxlOwotCi0JaWYgKCFod2lmLT5hY3BpZGF0YSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoIWh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKQotCQlyZXR1cm4gTlVMTDsKLQotCXBvcnQgPSBod2lmLT5jaGFubmVsID8gZHJpdmUtPmRuIC0gMjogZHJpdmUtPmRuOwotCi0JREVCUFJJTlQoIkVOVEVSOiAlcyBhdCBjaGFubmVsIzogJWQgcG9ydCM6ICVkXG4iLAotCQkgZHJpdmUtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIHBvcnQpOwotCi0KLQkvKiBUQkQ6IGNvdWxkIGFsc28gY2hlY2sgQUNQSSBvYmplY3QgVkFMSUQgYml0cyAqLwotCWRyaXZlX2hhbmRsZSA9IGFjcGlfZ2V0X2NoaWxkKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLCBwb3J0KTsKLQlERUJQUklOVCgiZHJpdmUgJXMgaGFuZGxlIDB4JXBcbiIsIGRyaXZlLT5uYW1lLCBkcml2ZV9oYW5kbGUpOwotCi0JcmV0dXJuIGRyaXZlX2hhbmRsZTsKLX0KLQotLyoqCiAgKiBkb19kcml2ZV9nZXRfR1RGIC0gZ2V0IHRoZSBkcml2ZSBib290dXAgZGVmYXVsdCB0YXNrZmlsZSBzZXR0aW5ncwogICogQGRyaXZlOiB0aGUgZHJpdmUgZm9yIHdoaWNoIHRoZSB0YXNrZmlsZSBzZXR0aW5ncyBzaG91bGQgYmUgcmV0cmlldmVkCiAgKiBAZ3RmX2xlbmd0aDogbnVtYmVyIG9mIGJ5dGVzIG9mIF9HVEYgZGF0YSByZXR1cm5lZCBhdCBAZ3RmX2FkZHJlc3MKQEAgLTI1Nyw0NyArMjE2LDE1IEBACiAJYWNwaV9zdGF0dXMJCQlzdGF0dXM7CiAJc3RydWN0IGFjcGlfYnVmZmVyCQlvdXRwdXQ7CiAJdW5pb24gYWNwaV9vYmplY3QgCQkqb3V0X29iajsKLQlpZGVfaHdpZl90CQkJKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgZGV2aWNlCQkJKmRldiA9IGh3aWYtPmdlbmRldi5wYXJlbnQ7CiAJaW50CQkJCWVyciA9IC1FTk9ERVY7Ci0JaW50CQkJCXBvcnQ7CiAKIAkqZ3RmX2xlbmd0aCA9IDA7CiAJKmd0Zl9hZGRyZXNzID0gMFVMOwogCSpvYmpfbG9jID0gMFVMOwogCi0JaWYgKGlkZV9ub2FjcGkpCi0JCXJldHVybiAwOwotCi0JaWYgKCFkZXYpIHsKLQkJREVCUFJJTlQoIm5vIFBDSSBkZXZpY2UgZm9yICVzXG4iLCBod2lmLT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKCFod2lmLT5hY3BpZGF0YSkgewotCQlERUJQUklOVCgibm8gQUNQSSBkYXRhIGZvciAlc1xuIiwgaHdpZi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXBvcnQgPSBod2lmLT5jaGFubmVsID8gZHJpdmUtPmRuIC0gMjogZHJpdmUtPmRuOwotCi0JREVCUFJJTlQoIkVOVEVSOiAlcyBhdCAlcywgcG9ydCM6ICVkLCBoYXJkX3BvcnQjOiAlZFxuIiwKLQkJIGh3aWYtPm5hbWUsIGRldl9uYW1lKGRldiksIHBvcnQsIGh3aWYtPmNoYW5uZWwpOwotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApIHsKLQkJREVCUFJJTlQoIiVzIGRyaXZlICVkOiVkIG5vdCBwcmVzZW50XG4iLAotCQkJIGh3aWYtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIHBvcnQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgdGhpcyBkcml2ZSdzIF9BRFIgaW5mby4gaWYgbm90IGFscmVhZHkga25vd24uICovCiAJaWYgKCFkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUpIHsKLQkJZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlID0gaWRlX2FjcGlfZHJpdmVfZ2V0X2hhbmRsZShkcml2ZSk7Ci0JCWlmICghZHJpdmUtPmFjcGlkYXRhLT5vYmpfaGFuZGxlKSB7Ci0JCQlERUJQUklOVCgiTm8gQUNQSSBvYmplY3QgZm91bmQgZm9yICVzXG4iLAotCQkJCSBkcml2ZS0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQorCQlERUJQUklOVCgiTm8gQUNQSSBvYmplY3QgZm91bmQgZm9yICVzXG4iLCBkcml2ZS0+bmFtZSk7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIFNldHRpbmcgdXAgb3V0cHV0IGJ1ZmZlciAqLwpAQCAtMzU1LDQzICsyODIsNiBAQAogfQogCiAvKioKLSAqIHRhc2tmaWxlX2xvYWRfcmF3IC0gc2VuZCB0YXNrZmlsZSByZWdpc3RlcnMgdG8gZHJpdmUKLSAqIEBkcml2ZTogZHJpdmUgdG8gd2hpY2ggb3V0cHV0IGlzIHNlbnQKLSAqIEBndGY6IHJhdyBBVEEgdGFza2ZpbGUgcmVnaXN0ZXIgc2V0ICgweDFmMSAtIDB4MWY3KQotICoKLSAqIE91dHB1dHMgSURFIHRhc2tmaWxlIHRvIHRoZSBkcml2ZS4KLSAqLwotc3RhdGljIGludCB0YXNrZmlsZV9sb2FkX3JhdyhpZGVfZHJpdmVfdCAqZHJpdmUsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgdGFza2ZpbGVfYXJyYXkgKmd0ZikKLXsKLQlpZGVfdGFza190IGFyZ3M7Ci0JaW50IGVyciA9IDA7Ci0KLQlERUJQUklOVCgiKDB4MWYxLTFmNyk6IGhleDogIgotCSAgICAgICAiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkgICAgICAgZ3RmLT50ZmFbMF0sIGd0Zi0+dGZhWzFdLCBndGYtPnRmYVsyXSwKLQkgICAgICAgZ3RmLT50ZmFbM10sIGd0Zi0+dGZhWzRdLCBndGYtPnRmYVs1XSwgZ3RmLT50ZmFbNl0pOwotCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCi0JLyogY29udmVydCBndGYgdG8gSURFIFRhc2tmaWxlICovCi0JbWVtY3B5KCZhcmdzLnRmX2FycmF5WzddLCAmZ3RmLT50ZmEsIDcpOwotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCi0JaWYgKCFpZGVfYWNwaWd0ZikgewotCQlERUJQUklOVCgiX0dURiBleGVjdXRpb24gZGlzYWJsZWRcbiIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWRlX25vX2RhdGFfdGFza2ZpbGUgZmFpbGVkOiAldVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBlcnIpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotLyoqCiAgKiBkb19kcml2ZV9zZXRfdGFza2ZpbGVzIC0gd3JpdGUgdGhlIGRyaXZlIHRhc2tmaWxlIHNldHRpbmdzIGZyb20gX0dURgogICogQGRyaXZlOiB0aGUgZHJpdmUgdG8gd2hpY2ggdGhlIHRhc2tmaWxlIGNvbW1hbmQgc2hvdWxkIGJlIHNlbnQKICAqIEBndGZfbGVuZ3RoOiB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgb2YgX0dURiB0YXNrZmlsZXMKQEAgLTQwNCw0MyArMjk0LDQxIEBACiAJCQkJICB1bnNpZ25lZCBpbnQgZ3RmX2xlbmd0aCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZ3RmX2FkZHJlc3MpCiB7Ci0JaW50CQkJcmMgPSAtRU5PREVWLCBlcnI7CisJaW50CQkJcmMgPSAwLCBlcnI7CiAJaW50CQkJZ3RmX2NvdW50ID0gZ3RmX2xlbmd0aCAvIFJFR1NfUEVSX0dURjsKIAlpbnQJCQlpeDsKLQlzdHJ1Y3QgdGFza2ZpbGVfYXJyYXkJKmd0ZjsKLQotCWlmIChpZGVfbm9hY3BpKQotCQlyZXR1cm4gMDsKLQotCURFQlBSSU5UKCJFTlRFUjogJXMsIGhhcmRfcG9ydCM6ICVkXG4iLCBkcml2ZS0+bmFtZSwgZHJpdmUtPmRuKTsKLQotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQlnb3RvIG91dDsKLQotCWlmICghZ3RmX2NvdW50KQkJLyogc2hvdWxkbid0IGJlIGhlcmUgKi8KLQkJZ290byBvdXQ7CiAKIAlERUJQUklOVCgidG90YWwgR1RGIGJ5dGVzPSV1ICgweCV4KSwgZ3RmX2NvdW50PSVkLCBhZGRyPTB4JWx4XG4iLAogCQkgZ3RmX2xlbmd0aCwgZ3RmX2xlbmd0aCwgZ3RmX2NvdW50LCBndGZfYWRkcmVzcyk7CiAKLQlpZiAoZ3RmX2xlbmd0aCAlIFJFR1NfUEVSX0dURikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmV4cGVjdGVkIEdURiBsZW5ndGggKCVkKVxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBndGZfbGVuZ3RoKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmMgPSAwOworCS8qIHNlbmQgYWxsIHRhc2tmaWxlIHJlZ2lzdGVycyAoMHgxZjEtMHgxZjcpICppbip0aGF0Km9yZGVyKiAqLwogCWZvciAoaXggPSAwOyBpeCA8IGd0Zl9jb3VudDsgaXgrKykgewotCQlndGYgPSAoc3RydWN0IHRhc2tmaWxlX2FycmF5ICopCi0JCQkoZ3RmX2FkZHJlc3MgKyBpeCAqIFJFR1NfUEVSX0dURik7CisJCXU4ICpndGYgPSAodTggKikoZ3RmX2FkZHJlc3MgKyBpeCAqIFJFR1NfUEVSX0dURik7CisJCWlkZV90YXNrX3QgdGFzazsKIAotCQkvKiBzZW5kIGFsbCBUYXNrRmlsZSByZWdpc3RlcnMgKDB4MWYxLTB4MWY3KSAqaW4qdGhhdCpvcmRlciogKi8KLQkJZXJyID0gdGFza2ZpbGVfbG9hZF9yYXcoZHJpdmUsIGd0Zik7Ci0JCWlmIChlcnIpCisJCURFQlBSSU5UKCIoMHgxZjEtMWY3KTogIgorCQkJICJoZXg6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCQkgZ3RmWzBdLCBndGZbMV0sIGd0ZlsyXSwKKwkJCSBndGZbM10sIGd0Zls0XSwgZ3RmWzVdLCBndGZbNl0pOworCisJCWlmICghaWRlX2FjcGlndGYpIHsKKwkJCURFQlBSSU5UKCJfR1RGIGV4ZWN1dGlvbiBkaXNhYmxlZFxuIik7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIGNvbnZlcnQgR1RGIHRvIHRhc2tmaWxlICovCisJCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKwkJbWVtY3B5KCZ0YXNrLnRmX2FycmF5WzddLCBndGYsIFJFR1NfUEVSX0dURik7CisJCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCisJCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlkZV9ub19kYXRhX3Rhc2tmaWxlIGZhaWxlZDogJXVcbiIsCisJCQkJCV9fZnVuY19fLCBlcnIpOwogCQkJcmMgPSBlcnI7CisJCX0KIAl9CiAKLW91dDoKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTY0NywyNiArNTM1LDIzIEBACiAJCURFQlBSSU5UKCJubyBBQ1BJIGRhdGEgZm9yICVzXG4iLCBod2lmLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KKwogCS8qIGNoYW5uZWwgZmlyc3QgYW5kIHRoZW4gZHJpdmVzIGZvciBwb3dlciBvbiBhbmQgdmVyc2UgdmVyc2EgZm9yIHBvd2VyIG9mZiAqLwogCWlmIChvbikKIAkJYWNwaV9idXNfc2V0X3Bvd2VyKGh3aWYtPmFjcGlkYXRhLT5vYmpfaGFuZGxlLCBBQ1BJX1NUQVRFX0QwKTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoIWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkKLQkJCWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSA9IGlkZV9hY3BpX2RyaXZlX2dldF9oYW5kbGUoZHJpdmUpOwotCi0JCWlmIChkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUgJiYKLQkJICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpKSB7CisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJaWYgKGRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSkKIAkJCWFjcGlfYnVzX3NldF9wb3dlcihkcml2ZS0+YWNwaWRhdGEtPm9ial9oYW5kbGUsCi0JCQkJb24/IEFDUElfU1RBVEVfRDA6IEFDUElfU1RBVEVfRDMpOwotCQl9CisJCQkJCSAgIG9uID8gQUNQSV9TVEFURV9EMCA6IEFDUElfU1RBVEVfRDMpOwogCX0KKwogCWlmICghb24pCiAJCWFjcGlfYnVzX3NldF9wb3dlcihod2lmLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSwgQUNQSV9TVEFURV9EMyk7CiB9CiAKIC8qKgotICogaWRlX2FjcGlfaW5pdCAtIGluaXRpYWxpemUgdGhlIEFDUEkgbGluayBmb3IgYW4gSURFIGludGVyZmFjZQorICogaWRlX2FjcGlfaW5pdF9wb3J0IC0gaW5pdGlhbGl6ZSB0aGUgQUNQSSBsaW5rIGZvciBhbiBJREUgaW50ZXJmYWNlCiAgKiBAaHdpZjogdGFyZ2V0IElERSBpbnRlcmZhY2UgKGNoYW5uZWwpCiAgKgogICogVGhlIEFDUEkgc3BlYyBpcyBub3QgcXVpdGUgY2xlYXIgd2hlbiB0aGUgZHJpdmUgaWRlbnRpZnkgYnVmZmVyCkBAIC02NzYsMTAgKzU2MSw4IEBACiAgKiBTbyB3ZSBnZXQgdGhlIGluZm9ybWF0aW9uIGR1cmluZyBzdGFydHVwOyBidXQgdGhpcyBtZWFucyB0aGF0CiAgKiBhbnkgY2hhbmdlcyBkdXJpbmcgcnVuLXRpbWUgd2lsbCBiZSBsb3N0IGFmdGVyIHJlc3VtZS4KICAqLwotdm9pZCBpZGVfYWNwaV9pbml0KGlkZV9od2lmX3QgKmh3aWYpCit2b2lkIGlkZV9hY3BpX2luaXRfcG9ydChpZGVfaHdpZl90ICpod2lmKQogewotCWlkZV9hY3BpX2JsYWNrbGlzdCgpOwotCiAJaHdpZi0+YWNwaWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWRlX2FjcGlfaHdpZl9saW5rKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFod2lmLT5hY3BpZGF0YSkKIAkJcmV0dXJuOwpAQCAtNzA4LDE1ICs1OTEsMjQgQEAKIAlod2lmLT5kZXZpY2VzWzBdLT5hY3BpZGF0YSA9ICZod2lmLT5hY3BpZGF0YS0+bWFzdGVyOwogCWh3aWYtPmRldmljZXNbMV0tPmFjcGlkYXRhID0gJmh3aWYtPmFjcGlkYXRhLT5zbGF2ZTsKIAotCS8qCi0JICogU2VuZCBJREVOVElGWSBmb3IgZWFjaCBkcml2ZQotCSAqLwotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQltZW1zZXQoZHJpdmUtPmFjcGlkYXRhLCAwLCBzaXplb2YoKmRyaXZlLT5hY3BpZGF0YSkpOworCS8qIGdldCBfQURSIGluZm8gZm9yIGVhY2ggZGV2aWNlICovCisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKKwkJYWNwaV9oYW5kbGUgZGV2X2hhbmRsZTsKIAotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKLQkJCWNvbnRpbnVlOworCQlERUJQUklOVCgiRU5URVI6ICVzIGF0IGNoYW5uZWwjOiAlZCBwb3J0IzogJWRcbiIsCisJCQkgZHJpdmUtPm5hbWUsIGh3aWYtPmNoYW5uZWwsIGRyaXZlLT5kbiAmIDEpOwogCisJCS8qIFRCRDogY291bGQgYWxzbyBjaGVjayBBQ1BJIG9iamVjdCBWQUxJRCBiaXRzICovCisJCWRldl9oYW5kbGUgPSBhY3BpX2dldF9jaGlsZChod2lmLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSwKKwkJCQkJICAgIGRyaXZlLT5kbiAmIDEpOworCisJCURFQlBSSU5UKCJkcml2ZSAlcyBoYW5kbGUgMHglcFxuIiwgZHJpdmUtPm5hbWUsIGRldl9oYW5kbGUpOworCisJCWRyaXZlLT5hY3BpZGF0YS0+b2JqX2hhbmRsZSA9IGRldl9oYW5kbGU7CisJfQorCisJLyogc2VuZCBJREVOVElGWSBmb3IgZWFjaCBkZXZpY2UgKi8KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgewogCQllcnIgPSB0YXNrZmlsZV9saWJfZ2V0X2lkZW50aWZ5KGRyaXZlLCBkcml2ZS0+YWNwaWRhdGEtPmlkYnVmZik7CiAJCWlmIChlcnIpCiAJCQlERUJQUklOVCgiaWRlbnRpZnkgZGV2aWNlICVzIGZhaWxlZCAoJWQpXG4iLApAQCAtNzM2LDkgKzYyOCw3IEBACiAJaWRlX2FjcGlfZ2V0X3RpbWluZyhod2lmKTsKIAlpZGVfYWNwaV9wdXNoX3RpbWluZyhod2lmKTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKQotCQkJLyogRXhlY3V0ZSBBQ1BJIHN0YXJ0dXAgY29kZSAqLwotCQkJaWRlX2FjcGlfZXhlY190ZnMoZHJpdmUpOworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWlkZV9hY3BpX2V4ZWNfdGZzKGRyaXZlKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCmluZGV4IGU5ZDA0MmRiLi42YWRjNWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYwpAQCAtMTQ5LDcgKzE0OSwxMCBAQAogCW1lbWNweShycS0+Y21kLCBwYy0+YywgMTIpOwogCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX3RhcGUpCiAJCXJxLT5jbWRbMTNdID0gUkVRX0lERVRBUEVfUEMxOwotCWlkZV9kb19kcml2ZV9jbWQoZHJpdmUsIHJxKTsKKworCWRyaXZlLT5od2lmLT5ycSA9IE5VTEw7CisKKwllbHZfYWRkX3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKIH0KIAogLyoKQEAgLTI5Nyw2ICszMDAsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9jZF9nZXRfeGZlcmxlbik7CiAKK3ZvaWQgaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSwgdTE2ICpiY291bnQsIHU4ICppcmVhc29uKQoreworCWlkZV90YXNrX3QgdGFzazsKKworCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0xCQUggfCBJREVfVEZMQUdfSU5fTEJBTSB8CisJCQlJREVfVEZMQUdfSU5fTlNFQ1Q7CisKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7CisKKwkqYmNvdW50ID0gKHRhc2sudGYubGJhaCA8PCA4KSB8IHRhc2sudGYubGJhbTsKKwkqaXJlYXNvbiA9IHRhc2sudGYubnNlY3QgJiAzOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKTsKKwogLyoKICAqIFRoaXMgaXMgdGhlIHVzdWFsIGludGVycnVwdCBoYW5kbGVyIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGR1cmluZyBhIHBhY2tldAogICogY29tbWFuZC4gIFdlIHdpbGwgdHJhbnNmZXIgc29tZSBvZiB0aGUgZGF0YSAoYXMgcmVxdWVzdGVkIGJ5IHRoZSBkcml2ZSkKQEAgLTQ1Niw2ICs0NzQsMjUgQEAKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiB9CiAKK3N0YXRpYyB2b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHUzMiB0Zl9mbGFncywgdTE2IGJjb3VudCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJaWRlX3Rhc2tfdCB0YXNrOworCXU4IGRtYSA9IGRyaXZlLT5kbWE7CisKKwltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CisJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfTEJBSCB8IElERV9URkxBR19PVVRfTEJBTSB8CisJCQlJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKKwl0YXNrLnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLworCXRhc2sudGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7CisJdGFzay50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7CisKKwlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgJnRhc2sudGYpOworCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKKwlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7CisJaHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7Cit9CisKIHN0YXRpYyB1OCBpZGVfcmVhZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfdGFza190IHRhc2s7CkBAIC02MjksNyArNjY2LDcgQEAKIAkJCQkJCSAgICAgICA6IFdBSVRfVEFQRV9DTUQ7CiAJfQogCi0JaWRlX3BrdGNtZF90Zl9sb2FkKGRyaXZlLCB0Zl9mbGFncywgYmNvdW50LCBkcml2ZS0+ZG1hKTsKKwlpZGVfcGt0Y21kX3RmX2xvYWQoZHJpdmUsIHRmX2ZsYWdzLCBiY291bnQpOwogCiAJLyogSXNzdWUgdGhlIHBhY2tldCBjb21tYW5kICovCiAJaWYgKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19EUlFfSU5URVJSVVBUKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCmluZGV4IGRkZmJlYTQuLjIxNzdjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jZC5jCkBAIC0yNDIsNyArMjQyLDkgQEAKIAkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiZmFpbGVkX2NtZDogMHgleFxuIiwKIAkJCSAgICAgIGZhaWxlZF9jb21tYW5kLT5jbWRbMF0pOwogCi0JaWRlX2RvX2RyaXZlX2NtZChkcml2ZSwgcnEpOworCWRyaXZlLT5od2lmLT5ycSA9IE5VTEw7CisKKwllbHZfYWRkX3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBycSwgRUxFVkFUT1JfSU5TRVJUX0ZST05ULCAwKTsKIH0KIAogc3RhdGljIHZvaWQgY2Ryb21fZW5kX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jIGIvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzM5NTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYwpAQCAtMCwwICsxLDE5MCBAQAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisKK0RFRklORV9NVVRFWChpZGVfc2V0dGluZ19tdHgpOworCitpZGVfZGV2c2V0X2dldChpb18zMmJpdCwgaW9fMzJiaXQpOworCitzdGF0aWMgaW50IHNldF9pb18zMmJpdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fSU9fMzJCSVQpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxICsgKFNVUFBPUlRfVkxCX1NZTkMgPDwgMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJZHJpdmUtPmlvXzMyYml0ID0gYXJnOworCisJcmV0dXJuIDA7Cit9CisKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcoa3NldHRpbmdzLCBJREVfREZMQUdfS0VFUF9TRVRUSU5HUyk7CisKK3N0YXRpYyBpbnQgc2V0X2tzZXR0aW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCit7CisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYXJnKQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19LRUVQX1NFVFRJTkdTOworCWVsc2UKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0tFRVBfU0VUVElOR1M7CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2RldnNldF9nZXRfZmxhZyh1c2luZ19kbWEsIElERV9ERkxBR19VU0lOR19ETUEpOworCitzdGF0aWMgaW50IHNldF91c2luZ19kbWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQorCWludCBlcnIgPSAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhdGFfaWRfaGFzX2RtYShkcml2ZS0+aWQpID09IDApCisJCWdvdG8gb3V0OworCisJaWYgKGRyaXZlLT5od2lmLT5kbWFfb3BzID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJZXJyID0gMDsKKworCWlmIChhcmcpIHsKKwkJaWYgKGlkZV9zZXRfZG1hKGRyaXZlKSkKKwkJCWVyciA9IC1FSU87CisJfSBlbHNlCisJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKKworb3V0OgorCXJldHVybiBlcnI7CisjZWxzZQorCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIC1FUEVSTTsKKyNlbmRpZgorfQorCisvKgorICogaGFuZGxlIEhESU9fU0VUX1BJT19NT0RFIGlvY3RsIGFidXNlcnMgaGVyZSwgZXZlbnR1YWxseSBpdCB3aWxsIGdvIGF3YXkKKyAqLworc3RhdGljIGludCBzZXRfcGlvX21vZGVfYWJ1c2UoaWRlX2h3aWZfdCAqaHdpZiwgdTggcmVxX3BpbykKK3sKKwlzd2l0Y2ggKHJlcV9waW8pIHsKKwljYXNlIDIwMjoKKwljYXNlIDIwMToKKwljYXNlIDIwMDoKKwljYXNlIDEwMjoKKwljYXNlIDEwMToKKwljYXNlIDEwMDoKKwkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0RNQV9NT0RFUykgPyAxIDogMDsKKwljYXNlIDk6CisJY2FzZSA4OgorCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gpID8gMSA6IDA7CisJY2FzZSA3OgorCWNhc2UgNjoKKwkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0ZBU1RfREVWU0VMKSA/IDEgOiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBzZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCisJaWYgKGFyZyA8IDAgfHwgYXJnID4gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCisJCXJldHVybiAtRU5PU1lTOworCisJaWYgKHNldF9waW9fbW9kZV9hYnVzZShkcml2ZS0+aHdpZiwgYXJnKSkgeworCQlpZiAoYXJnID09IDggfHwgYXJnID09IDkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCS8qIHRha2UgbG9jayBmb3IgSURFX0RGTEFHX1tOT19dVU5NQVNLL1tOT19dSU9fMzJCSVQgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQl9IGVsc2UKKwkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7CisJfSBlbHNlIHsKKwkJaW50IGtlZXBfZG1hID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpOworCisJCWlkZV9zZXRfcGlvKGRyaXZlLCBhcmcpOworCisJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFVF9QSU9fTU9ERV9LRUVQX0RNQSkgeworCQkJaWYgKGtlZXBfZG1hKQorCQkJCWlkZV9kbWFfb24oZHJpdmUpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2lkZV9kZXZzZXRfZ2V0X2ZsYWcodW5tYXNraXJxLCBJREVfREZMQUdfVU5NQVNLKTsKKworc3RhdGljIGludCBzZXRfdW5tYXNraXJxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKK3sKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19VTk1BU0spCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChhcmcpCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VOTUFTSzsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7CisKKwlyZXR1cm4gMDsKK30KKworaWRlX2V4dF9kZXZzZXRfcndfc3luYyhpb18zMmJpdCwgaW9fMzJiaXQpOworaWRlX2V4dF9kZXZzZXRfcndfc3luYyhrZWVwc2V0dGluZ3MsIGtzZXR0aW5ncyk7CitpZGVfZXh0X2RldnNldF9yd19zeW5jKHVubWFza2lycSwgdW5tYXNraXJxKTsKK2lkZV9leHRfZGV2c2V0X3J3X3N5bmModXNpbmdfZG1hLCB1c2luZ19kbWEpOworX19JREVfREVWU0VUKHBpb19tb2RlLCBEU19TWU5DLCBOVUxMLCBzZXRfcGlvX21vZGUpOworCitpbnQgaWRlX2RldnNldF9leGVjdXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgKnNldHRpbmcsCisJCSAgICAgICBpbnQgYXJnKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghKHNldHRpbmctPmZsYWdzICYgRFNfU1lOQykpCisJCXJldHVybiBzZXR0aW5nLT5zZXQoZHJpdmUsIGFyZyk7CisKKwlycSA9IGJsa19nZXRfcmVxdWVzdChxLCBSRUFELCBfX0dGUF9XQUlUKTsKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOworCXJxLT5jbWRfbGVuID0gNTsKKwlycS0+Y21kWzBdID0gUkVRX0RFVlNFVF9FWEVDOworCSooaW50ICopJnJxLT5jbWRbMV0gPSBhcmc7CisJcnEtPnNwZWNpYWwgPSBzZXR0aW5nLT5zZXQ7CisKKwlpZiAoYmxrX2V4ZWN1dGVfcnEocSwgTlVMTCwgcnEsIDApKQorCQlyZXQgPSBycS0+ZXJyb3JzOworCWJsa19wdXRfcmVxdWVzdChycSk7CisKKwlyZXR1cm4gcmV0OworfQorCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX2RldnNldChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpbnQgZXJyLCAoKnNldGZ1bmMpKGlkZV9kcml2ZV90ICosIGludCkgPSBycS0+c3BlY2lhbDsKKworCWVyciA9IHNldGZ1bmMoZHJpdmUsICooaW50ICopJnJxLT5jbWRbMV0pOworCWlmIChlcnIpCisJCXJxLT5lcnJvcnMgPSBlcnI7CisJZWxzZQorCQllcnIgPSAxOworCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyLCAwKTsKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKaW5kZXggMDU5YzkwYi4uYTg3OGY0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwpAQCAtNDcwLDYgKzQ3MCw2MyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RtYV90aW1lb3V0KTsKIAorLyoKKyAqIHVuLWJ1c3kgdGhlIHBvcnQgZXRjLCBhbmQgY2xlYXIgYW55IHBlbmRpbmcgRE1BIHN0YXR1cy4gd2Ugd2FudCB0bworICogcmV0cnkgdGhlIGN1cnJlbnQgcmVxdWVzdCBpbiBwaW8gbW9kZSBpbnN0ZWFkIG9mIHJpc2tpbmcgdG9zc2luZyBpdAorICogYWxsIGF3YXkKKyAqLworaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvcikKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCWlkZV9zdGFydHN0b3BfdCByZXQgPSBpZGVfc3RvcHBlZDsKKworCS8qCisJICogZW5kIGN1cnJlbnQgZG1hIHRyYW5zYWN0aW9uCisJICovCisKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBETUEgdGltZW91dCBlcnJvclxuIiwgZHJpdmUtPm5hbWUpOworCQkodm9pZClod2lmLT5kbWFfb3BzLT5kbWFfZW5kKGRyaXZlKTsKKwkJcmV0ID0gaWRlX2Vycm9yKGRyaXZlLCAiZG1hIHRpbWVvdXQgZXJyb3IiLAorCQkJCWh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBETUEgdGltZW91dCByZXRyeVxuIiwgZHJpdmUtPm5hbWUpOworCQlod2lmLT5kbWFfb3BzLT5kbWFfdGltZW91dChkcml2ZSk7CisJfQorCisJLyoKKwkgKiBkaXNhYmxlIGRtYSBmb3Igbm93LCBidXQgcmVtZW1iZXIgdGhhdCB3ZSBkaWQgc28gYmVjYXVzZSBvZgorCSAqIGEgdGltZW91dCAtLSB3ZSdsbCByZWVuYWJsZSBhZnRlciB3ZSBmaW5pc2ggdGhpcyBuZXh0IHJlcXVlc3QKKwkgKiAob3IgcmF0aGVyIHRoZSBmaXJzdCBjaHVuayBvZiBpdCkgaW4gcGlvLgorCSAqLworCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0RNQV9QSU9fUkVUUlk7CisJZHJpdmUtPnJldHJ5X3BpbysrOworCWlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOworCisJLyoKKwkgKiB1bi1idXN5IGRyaXZlIGV0YyBhbmQgbWFrZSBzdXJlIHJlcXVlc3QgaXMgc2FuZQorCSAqLworCisJcnEgPSBod2lmLT5ycTsKKwlpZiAoIXJxKQorCQlnb3RvIG91dDsKKworCWh3aWYtPnJxID0gTlVMTDsKKworCXJxLT5lcnJvcnMgPSAwOworCisJaWYgKCFycS0+YmlvKQorCQlnb3RvIG91dDsKKworCXJxLT5zZWN0b3IgPSBycS0+YmlvLT5iaV9zZWN0b3I7CisJcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9IGJpb19pb3ZlYyhycS0+YmlvKS0+YnZfbGVuID4+IDk7CisJcnEtPmhhcmRfY3VyX3NlY3RvcnMgPSBycS0+Y3VycmVudF9ucl9zZWN0b3JzOworCXJxLT5idWZmZXIgPSBiaW9fZGF0YShycS0+YmlvKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiB2b2lkIGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlpZiAoaHdpZi0+ZG1hdGFibGVfY3B1KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZWguYyBiL2RyaXZlcnMvaWRlL2lkZS1laC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMzFiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwpAQCAtMCwwICsxLDQyOCBAQAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfYXRhX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCSAgICAgdTggc3RhdCwgdTggZXJyKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKworCWlmICgoc3RhdCAmIEFUQV9CVVNZKSB8fAorCSAgICAoKHN0YXQgJiBBVEFfREYpICYmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX05PV0VSUikgPT0gMCkpIHsKKwkJLyogb3RoZXIgYml0cyBhcmUgdXNlbGVzcyB3aGVuIEJVU1kgKi8KKwkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKKwl9IGVsc2UgaWYgKHN0YXQgJiBBVEFfRVJSKSB7CisJCS8qIGVyciBoYXMgZGlmZmVyZW50IG1lYW5pbmcgb24gY2Ryb20gYW5kIHRhcGUgKi8KKwkJaWYgKGVyciA9PSBBVEFfQUJPUlRFRCkgeworCQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQSkgJiYKKwkJCSAgICAvKiBzb21lIG5ld2VyIGRyaXZlcyBkb24ndCBzdXBwb3J0IEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TICovCisJCQkgICAgaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSA9PSBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUykKKwkJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCX0gZWxzZSBpZiAoKGVyciAmIEJBRF9DUkMpID09IEJBRF9DUkMpIHsKKwkJCS8qIFVETUEgY3JjIGVycm9yLCBqdXN0IHJldHJ5IHRoZSBvcGVyYXRpb24gKi8KKwkJCWRyaXZlLT5jcmNfY291bnQrKzsKKwkJfSBlbHNlIGlmIChlcnIgJiAoQVRBX0JCSyB8IEFUQV9VTkMpKSB7CisJCQkvKiByZXRyaWVzIHdvbid0IGhlbHAgdGhlc2UgKi8KKwkJCXJxLT5lcnJvcnMgPSBFUlJPUl9NQVg7CisJCX0gZWxzZSBpZiAoZXJyICYgQVRBX1RSSzBORikgeworCQkJLyogaGVscCBpdCBmaW5kIHRyYWNrIHplcm8gKi8KKwkJCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVDQUw7CisJCX0KKwl9CisKKwlpZiAoKHN0YXQgJiBBVEFfRFJRKSAmJiBycV9kYXRhX2RpcihycSkgPT0gUkVBRCAmJgorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19FUlJPUl9TVE9QU19GSUZPKSA9PSAwKSB7CisJCWludCBuc2VjdCA9IGRyaXZlLT5tdWx0X2NvdW50ID8gZHJpdmUtPm11bHRfY291bnQgOiAxOworCisJCWlkZV9wYWRfdHJhbnNmZXIoZHJpdmUsIFJFQUQsIG5zZWN0ICogU0VDVE9SX1NJWkUpOworCX0KKworCWlmIChycS0+ZXJyb3JzID49IEVSUk9SX01BWCB8fCBibGtfbm9yZXRyeV9yZXF1ZXN0KHJxKSkgeworCQlpZGVfa2lsbF9ycShkcml2ZSwgcnEpOworCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJfQorCisJaWYgKGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkKKwkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRVNFVDsKKworCWlmICgocnEtPmVycm9ycyAmIEVSUk9SX1JFU0VUKSA9PSBFUlJPUl9SRVNFVCkgeworCQkrK3JxLT5lcnJvcnM7CisJCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOworCX0KKworCWlmICgocnEtPmVycm9ycyAmIEVSUk9SX1JFQ0FMKSA9PSBFUlJPUl9SRUNBTCkKKwkJZHJpdmUtPnNwZWNpYWwuYi5yZWNhbGlicmF0ZSA9IDE7CisKKwkrK3JxLT5lcnJvcnM7CisKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CisKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2F0YXBpX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorCQkJCSAgICAgICB1OCBzdGF0LCB1OCBlcnIpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCisJaWYgKChzdGF0ICYgQVRBX0JVU1kpIHx8CisJICAgICgoc3RhdCAmIEFUQV9ERikgJiYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9XRVJSKSA9PSAwKSkgeworCQkvKiBvdGhlciBiaXRzIGFyZSB1c2VsZXNzIHdoZW4gQlVTWSAqLworCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOworCX0gZWxzZSB7CisJCS8qIGFkZCBkZWNvZGluZyBlcnJvciBzdHVmZiAqLworCX0KKworCWlmIChod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpICYgKEFUQV9CVVNZIHwgQVRBX0RSUSkpCisJCS8qIGZvcmNlIGFuIGFib3J0ICovCisJCWh3aWYtPnRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfSURMRUlNTUVESUFURSk7CisKKwlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVgpIHsKKwkJaWRlX2tpbGxfcnEoZHJpdmUsIHJxKTsKKwl9IGVsc2UgeworCQlpZiAoKHJxLT5lcnJvcnMgJiBFUlJPUl9SRVNFVCkgPT0gRVJST1JfUkVTRVQpIHsKKwkJCSsrcnEtPmVycm9yczsKKwkJCXJldHVybiBpZGVfZG9fcmVzZXQoZHJpdmUpOworCQl9CisJCSsrcnEtPmVycm9yczsKKwl9CisKKwlyZXR1cm4gaWRlX3N0b3BwZWQ7Cit9CisKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgX19pZGVfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCisJCQkJICAgdTggc3RhdCwgdTggZXJyKQoreworCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCisJCXJldHVybiBpZGVfYXRhX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKKwlyZXR1cm4gaWRlX2F0YXBpX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKK30KKworLyoqCisgKglpZGVfZXJyb3IJLQloYW5kbGUgYW4gZXJyb3Igb24gdGhlIElERQorICoJQGRyaXZlOiBkcml2ZSB0aGUgZXJyb3Igb2NjdXJyZWQgb24KKyAqCUBtc2c6IG1lc3NhZ2UgdG8gcmVwb3J0CisgKglAc3RhdDogc3RhdHVzIGJpdHMKKyAqCisgKglpZGVfZXJyb3IoKSB0YWtlcyBhY3Rpb24gYmFzZWQgb24gdGhlIGVycm9yIHJldHVybmVkIGJ5IHRoZSBkcml2ZS4KKyAqCUZvciBub3JtYWwgSS9PIHRoYXQgbWF5IHdlbGwgaW5jbHVkZSByZXRyaWVzLiBXZSBkZWFsIHdpdGgKKyAqCWJvdGggbmV3LXN0eWxlICh0YXNrZmlsZSkgYW5kIG9sZCBzdHlsZSBjb21tYW5kIGhhbmRsaW5nIGhlcmUuCisgKglJbiB0aGUgY2FzZSBvZiB0YXNrZmlsZSBjb21tYW5kIGhhbmRsaW5nIHRoZXJlIGlzIHdvcmsgbGVmdCB0bworICoJZG8KKyAqLworCitpZGVfc3RhcnRzdG9wX3QgaWRlX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbXNnLCB1OCBzdGF0KQoreworCXN0cnVjdCByZXF1ZXN0ICpycTsKKwl1OCBlcnI7CisKKwllcnIgPSBpZGVfZHVtcF9zdGF0dXMoZHJpdmUsIG1zZywgc3RhdCk7CisKKwlycSA9IGRyaXZlLT5od2lmLT5ycTsKKwlpZiAocnEgPT0gTlVMTCkKKwkJcmV0dXJuIGlkZV9zdG9wcGVkOworCisJLyogcmV0cnkgb25seSAibm9ybWFsIiBJL086ICovCisJaWYgKCFibGtfZnNfcmVxdWVzdChycSkpIHsKKwkJcnEtPmVycm9ycyA9IDE7CisJCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBlcnIpOworCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJfQorCisJcmV0dXJuIF9faWRlX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9lcnJvcik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyKQoreworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKKworCWlmIChycSAmJiBibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSAmJiBycS0+Y21kWzBdID09IFJFUV9EUklWRV9SRVNFVCkKKwkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBlcnIgPyBlcnIgOiAxLCAwKTsKK30KKworLyogbmVlZGVkIGJlbG93ICovCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGRvX3Jlc2V0MShpZGVfZHJpdmVfdCAqLCBpbnQpOworCisvKgorICogYXRhcGlfcmVzZXRfcG9sbGZ1bmMoKSBnZXRzIGludm9rZWQgdG8gcG9sbCB0aGUgaW50ZXJmYWNlIGZvciBjb21wbGV0aW9uCisgKiBldmVyeSA1MG1zIGR1cmluZyBhbiBhdGFwaSBkcml2ZSByZXNldCBvcGVyYXRpb24uICBJZiB0aGUgZHJpdmUgaGFzIG5vdCB5ZXQKKyAqIHJlc3BvbmRlZCwgYW5kIHdlIGhhdmUgbm90IHlldCBoaXQgb3VyIG1heGltdW0gd2FpdGluZyB0aW1lLCB0aGVuIHRoZSB0aW1lcgorICogaXMgcmVzdGFydGVkIGZvciBhbm90aGVyIDUwbXMuCisgKi8KK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgYXRhcGlfcmVzZXRfcG9sbGZ1bmMoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwl1OCBzdGF0OworCisJU0VMRUNUX0RSSVZFKGRyaXZlKTsKKwl1ZGVsYXkoMTApOworCXN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOworCisJaWYgKE9LX1NUQVQoc3RhdCwgMCwgQVRBX0JVU1kpKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogQVRBUEkgcmVzZXQgY29tcGxldGVcbiIsIGRyaXZlLT5uYW1lKTsKKwllbHNlIHsKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGh3aWYtPnBvbGxfdGltZW91dCkpIHsKKwkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwKKwkJCQkJTlVMTCk7CisJCQkvKiBjb250aW51ZSBwb2xsaW5nICovCisJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CisJCX0KKwkJLyogZW5kIG9mIHBvbGxpbmcgKi8KKwkJaHdpZi0+cG9sbGluZyA9IDA7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEFUQVBJIHJlc2V0IHRpbWVkLW91dCwgc3RhdHVzPTB4JTAyeFxuIiwKKwkJCWRyaXZlLT5uYW1lLCBzdGF0KTsKKwkJLyogZG8gaXQgdGhlIG9sZCBmYXNoaW9uZWQgd2F5ICovCisJCXJldHVybiBkb19yZXNldDEoZHJpdmUsIDEpOworCX0KKwkvKiBkb25lIHBvbGxpbmcgKi8KKwlod2lmLT5wb2xsaW5nID0gMDsKKwlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIDApOworCXJldHVybiBpZGVfc3RvcHBlZDsKK30KKworc3RhdGljIHZvaWQgaWRlX3Jlc2V0X3JlcG9ydF9lcnJvcihpZGVfaHdpZl90ICpod2lmLCB1OCBlcnIpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmVycl9tYXN0ZXJfdmFsc1tdID0KKwkJeyBOVUxMLCAicGFzc2VkIiwgImZvcm1hdHRlciBkZXZpY2UgZXJyb3IiLAorCQkgICJzZWN0b3IgYnVmZmVyIGVycm9yIiwgIkVDQyBjaXJjdWl0cnkgZXJyb3IiLAorCQkgICJjb250cm9sbGluZyBNUFUgZXJyb3IiIH07CisKKwl1OCBlcnJfbWFzdGVyID0gZXJyICYgMHg3ZjsKKworCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc2V0OiBtYXN0ZXI6ICIsIGh3aWYtPm5hbWUpOworCWlmIChlcnJfbWFzdGVyICYmIGVycl9tYXN0ZXIgPCA2KQorCQlwcmludGsoS0VSTl9DT05UICIlcyIsIGVycl9tYXN0ZXJfdmFsc1tlcnJfbWFzdGVyXSk7CisJZWxzZQorCQlwcmludGsoS0VSTl9DT05UICJlcnJvciAoMHglMDJ4PykiLCBlcnIpOworCWlmIChlcnIgJiAweDgwKQorCQlwcmludGsoS0VSTl9DT05UICI7IHNsYXZlOiBmYWlsZWQiKTsKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworfQorCisvKgorICogcmVzZXRfcG9sbGZ1bmMoKSBnZXRzIGludm9rZWQgdG8gcG9sbCB0aGUgaW50ZXJmYWNlIGZvciBjb21wbGV0aW9uIGV2ZXJ5IDUwbXMKKyAqIGR1cmluZyBhbiBpZGUgcmVzZXQgb3BlcmF0aW9uLiBJZiB0aGUgZHJpdmVzIGhhdmUgbm90IHlldCByZXNwb25kZWQsCisgKiBhbmQgd2UgaGF2ZSBub3QgeWV0IGhpdCBvdXIgbWF4aW11bSB3YWl0aW5nIHRpbWUsIHRoZW4gdGhlIHRpbWVyIGlzIHJlc3RhcnRlZAorICogZm9yIGFub3RoZXIgNTBtcy4KKyAqLworc3RhdGljIGlkZV9zdGFydHN0b3BfdCByZXNldF9wb2xsZnVuYyhpZGVfZHJpdmVfdCAqZHJpdmUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisJdTggdG1wOworCWludCBlcnIgPSAwOworCisJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5yZXNldF9wb2xsKSB7CisJCWVyciA9IHBvcnRfb3BzLT5yZXNldF9wb2xsKGRyaXZlKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaG9zdCByZXNldF9wb2xsIGZhaWx1cmUgZm9yICVzLlxuIiwKKwkJCQlod2lmLT5uYW1lLCBkcml2ZS0+bmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXRtcCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CisKKwlpZiAoIU9LX1NUQVQodG1wLCAwLCBBVEFfQlVTWSkpIHsKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGh3aWYtPnBvbGxfdGltZW91dCkpIHsKKwkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisJCQkvKiBjb250aW51ZSBwb2xsaW5nICovCisJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CisJCX0KKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVzZXQgdGltZWQtb3V0LCBzdGF0dXM9MHglMDJ4XG4iLAorCQkJaHdpZi0+bmFtZSwgdG1wKTsKKwkJZHJpdmUtPmZhaWx1cmVzKys7CisJCWVyciA9IC1FSU87CisJfSBlbHNlICB7CisJCXRtcCA9IGlkZV9yZWFkX2Vycm9yKGRyaXZlKTsKKworCQlpZiAodG1wID09IDEpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXNldDogc3VjY2Vzc1xuIiwgaHdpZi0+bmFtZSk7CisJCQlkcml2ZS0+ZmFpbHVyZXMgPSAwOworCQl9IGVsc2UgeworCQkJaWRlX3Jlc2V0X3JlcG9ydF9lcnJvcihod2lmLCB0bXApOworCQkJZHJpdmUtPmZhaWx1cmVzKys7CisJCQllcnIgPSAtRUlPOworCQl9CisJfQorb3V0OgorCWh3aWYtPnBvbGxpbmcgPSAwOwkvKiBkb25lIHBvbGxpbmcgKi8KKwlpZGVfY29tcGxldGVfZHJpdmVfcmVzZXQoZHJpdmUsIGVycik7CisJcmV0dXJuIGlkZV9zdG9wcGVkOworfQorCitzdGF0aWMgdm9pZCBpZGVfZGlza19wcmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWludCBsZWdhY3kgPSAoZHJpdmUtPmlkW0FUQV9JRF9DRlNfRU5BQkxFXzJdICYgMHgwNDAwKSA/IDAgOiAxOworCisJZHJpdmUtPnNwZWNpYWwuYWxsID0gMDsKKwlkcml2ZS0+c3BlY2lhbC5iLnNldF9nZW9tZXRyeSA9IGxlZ2FjeTsKKwlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlICA9IGxlZ2FjeTsKKworCWRyaXZlLT5tdWx0X2NvdW50ID0gMDsKKwlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUEFSS0VEOworCisJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpID09IDAgJiYKKwkgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwKQorCQlkcml2ZS0+bXVsdF9yZXEgPSAwOworCisJaWYgKGRyaXZlLT5tdWx0X3JlcSAhPSBkcml2ZS0+bXVsdF9jb3VudCkKKwkJZHJpdmUtPnNwZWNpYWwuYi5zZXRfbXVsdG1vZGUgPSAxOworfQorCitzdGF0aWMgdm9pZCBwcmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gZHJpdmUtPmh3aWYtPnBvcnRfb3BzOworCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKKwkJaWRlX2Rpc2tfcHJlX3Jlc2V0KGRyaXZlKTsKKwllbHNlCisJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BPU1RfUkVTRVQ7CisKKwlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpIHsKKwkJaWYgKGRyaXZlLT5jcmNfY291bnQpCisJCQlpZGVfY2hlY2tfZG1hX2NyYyhkcml2ZSk7CisJCWVsc2UKKwkJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKKwl9CisKKwlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfS0VFUF9TRVRUSU5HUykgPT0gMCkgeworCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSA9PSAwKSB7CisJCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfVU5NQVNLOworCQkJZHJpdmUtPmlvXzMyYml0ID0gMDsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5wcmVfcmVzZXQpCisJCXBvcnRfb3BzLT5wcmVfcmVzZXQoZHJpdmUpOworCisJaWYgKGRyaXZlLT5jdXJyZW50X3NwZWVkICE9IDB4ZmYpCisJCWRyaXZlLT5kZXNpcmVkX3NwZWVkID0gZHJpdmUtPmN1cnJlbnRfc3BlZWQ7CisJZHJpdmUtPmN1cnJlbnRfc3BlZWQgPSAweGZmOworfQorCisvKgorICogZG9fcmVzZXQxKCkgYXR0ZW1wdHMgdG8gcmVjb3ZlciBhIGNvbmZ1c2VkIGRyaXZlIGJ5IHJlc2V0dGluZyBpdC4KKyAqIFVuZm9ydHVuYXRlbHksIHJlc2V0dGluZyBhIGRpc2sgZHJpdmUgYWN0dWFsbHkgcmVzZXRzIGFsbCBkZXZpY2VzIG9uCisgKiB0aGUgc2FtZSBpbnRlcmZhY2UsIHNvIGl0IGNhbiByZWFsbHkgYmUgdGhvdWdodCBvZiBhcyByZXNldHRpbmcgdGhlCisgKiBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gcmVzZXR0aW5nIHRoZSBkcml2ZS4KKyAqCisgKiBBVEFQSSBkZXZpY2VzIGhhdmUgdGhlaXIgb3duIHJlc2V0IG1lY2hhbmlzbSB3aGljaCBhbGxvd3MgdGhlbSB0byBiZQorICogaW5kaXZpZHVhbGx5IHJlc2V0IHdpdGhvdXQgY2xvYmJlcmluZyBvdGhlciBkZXZpY2VzIG9uIHRoZSBzYW1lIGludGVyZmFjZS4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCB0aGUgSURFIGludGVyZmFjZSBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgdG8gbGV0CisgKiB1cyBrbm93IHdoZW4gdGhlIHJlc2V0IG9wZXJhdGlvbiBoYXMgZmluaXNoZWQsIHNvIHdlIG11c3QgcG9sbCBmb3IgdGhpcy4KKyAqIEVxdWFsbHkgcG9vciwgdGhvdWdoLCBpcyB0aGUgZmFjdCB0aGF0IHRoaXMgbWF5IGEgdmVyeSBsb25nIHRpbWUgdG8gY29tcGxldGUsCisgKiAodXAgdG8gMzAgc2Vjb25kcyB3b3JzdGNhc2UpLiAgU28sIGluc3RlYWQgb2YgYnVzeS13YWl0aW5nIGhlcmUgZm9yIGl0LAorICogd2Ugc2V0IGEgdGltZXIgdG8gcG9sbCBhdCA1MG1zIGludGVydmFscy4KKyAqLworc3RhdGljIGlkZV9zdGFydHN0b3BfdCBkb19yZXNldDEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZG9fbm90X3RyeV9hdGFwaSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wczsKKwlpZGVfZHJpdmVfdCAqdGRyaXZlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHRpbWVvdXQ7CisJaW50IGk7CisJREVGSU5FX1dBSVQod2FpdCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCisJLyogV2UgbXVzdCBub3QgcmVzZXQgd2l0aCBydW5uaW5nIGhhbmRsZXJzICovCisJQlVHX09OKGh3aWYtPmhhbmRsZXIgIT0gTlVMTCk7CisKKwkvKiBGb3IgYW4gQVRBUEkgZGV2aWNlLCBmaXJzdCB0cnkgYW4gQVRBUEkgU1JTVC4gKi8KKwlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrICYmICFkb19ub3RfdHJ5X2F0YXBpKSB7CisJCXByZV9yZXNldChkcml2ZSk7CisJCVNFTEVDVF9EUklWRShkcml2ZSk7CisJCXVkZWxheSgyMCk7CisJCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfREVWX1JFU0VUKTsKKwkJbmRlbGF5KDQwMCk7CisJCWh3aWYtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKKwkJaHdpZi0+cG9sbGluZyA9IDE7CisJCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CisJfQorCisJLyogV2UgbXVzdCBub3QgZGlzdHVyYiBkZXZpY2VzIGluIHRoZSBJREVfREZMQUdfUEFSS0VEIHN0YXRlLiAqLworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBub3c7CisKKwkJcHJlcGFyZV90b193YWl0KCZpZGVfcGFya193cSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJdGltZW91dCA9IGppZmZpZXM7CisJCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIHRkcml2ZSwgaHdpZikgeworCQkJaWYgKCh0ZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QQVJLRUQpICYmCisJCQkgICAgdGltZV9hZnRlcih0ZHJpdmUtPnNsZWVwLCB0aW1lb3V0KSkKKwkJCQl0aW1lb3V0ID0gdGRyaXZlLT5zbGVlcDsKKwkJfQorCisJCW5vdyA9IGppZmZpZXM7CisJCWlmICh0aW1lX2JlZm9yZV9lcSh0aW1lb3V0LCBub3cpKQorCQkJYnJlYWs7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOworCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUodGltZW91dCAtIG5vdyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJfSB3aGlsZSAodGltZW91dCk7CisJZmluaXNoX3dhaXQoJmlkZV9wYXJrX3dxLCAmd2FpdCk7CisKKwkvKgorCSAqIEZpcnN0LCByZXNldCBhbnkgZGV2aWNlIHN0YXRlIGRhdGEgd2Ugd2VyZSBtYWludGFpbmluZworCSAqIGZvciBhbnkgb2YgdGhlIGRyaXZlcyBvbiB0aGlzIGludGVyZmFjZS4KKwkgKi8KKwlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgdGRyaXZlLCBod2lmKQorCQlwcmVfcmVzZXQodGRyaXZlKTsKKworCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIgPT0gMCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgLUVOWElPKTsKKwkJcmV0dXJuIGlkZV9zdG9wcGVkOworCX0KKworCS8qCisJICogTm90ZSB0aGF0IHdlIGFsc28gc2V0IG5JRU4gd2hpbGUgcmVzZXR0aW5nIHRoZSBkZXZpY2UsCisJICogdG8gbWFzayB1bndhbnRlZCBpbnRlcnJ1cHRzIGZyb20gdGhlIGludGVyZmFjZSBkdXJpbmcgdGhlIHJlc2V0LgorCSAqIEhvd2V2ZXIsIGR1ZSB0byB0aGUgZGVzaWduIG9mIFBDIGhhcmR3YXJlLCB0aGlzIHdpbGwgY2F1c2UgYW4KKwkgKiBpbW1lZGlhdGUgaW50ZXJydXB0IGR1ZSB0byB0aGUgZWRnZSB0cmFuc2l0aW9uIGl0IHByb2R1Y2VzLgorCSAqIFRoaXMgc2luZ2xlIGludGVycnVwdCBnaXZlcyB1cyBhICJmYXN0IHBvbGwiIGZvciBkcml2ZXMgdGhhdAorCSAqIHJlY292ZXIgZnJvbSByZXNldCB2ZXJ5IHF1aWNrbHksIHNhdmluZyB1cyB0aGUgZmlyc3QgNTBtcyB3YWl0IHRpbWUuCisJICoKKwkgKiBUT0RPOiBhZGQgLT5zb2Z0cmVzZXQgbWV0aG9kIGFuZCBzdG9wIGFidXNpbmcgLT5zZXRfaXJxCisJICovCisJLyogc2V0IFNSU1QgYW5kIG5JRU4gKi8KKwl0cF9vcHMtPnNldF9pcnEoaHdpZiwgNCk7CisJLyogbW9yZSB0aGFuIGVub3VnaCB0aW1lICovCisJdWRlbGF5KDEwKTsKKwkvKiBjbGVhciBTUlNULCBsZWF2ZSBuSUVOICh1bmxlc3MgZGV2aWNlIGlzIG9uIHRoZSBxdWlyayBsaXN0KSAqLworCXRwX29wcy0+c2V0X2lycShod2lmLCBkcml2ZS0+cXVpcmtfbGlzdCA9PSAyKTsKKwkvKiBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgKi8KKwl1ZGVsYXkoMTApOworCWh3aWYtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKKwlod2lmLT5wb2xsaW5nID0gMTsKKwlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisKKwkvKgorCSAqIFNvbWUgd2VpcmQgY29udHJvbGxlciBsaWtlIHJlc2V0dGluZyB0aGVtc2VsdmVzIHRvIGEgc3RyYW5nZQorCSAqIHN0YXRlIHdoZW4gdGhlIGRpc2tzIGFyZSByZXNldCB0aGlzIHdheS4gQXQgbGVhc3QsIHRoZSBXaW5ib25kCisJICogNTUzIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0CisJICovCisJcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKwlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnJlc2V0cHJvYykKKwkJcG9ydF9vcHMtPnJlc2V0cHJvYyhkcml2ZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIGlkZV9zdGFydGVkOworfQorCisvKgorICogaWRlX2RvX3Jlc2V0KCkgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBkcml2ZS9pbnRlcmZhY2UgcmVzZXQgY29kZS4KKyAqLworCitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gZG9fcmVzZXQxKGRyaXZlLCAwKTsKK30KK0VYUE9SVF9TWU1CT0woaWRlX2RvX3Jlc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pby1zdGQuYyBiL2RyaXZlcnMvaWRlL2lkZS1pby1zdGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWI0M2RkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jCkBAIC0wLDAgKzEsMzE2IEBACisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKworLyoKKyAqCUNvbnZlbnRpb25hbCBQSU8gb3BlcmF0aW9ucyBmb3IgQVRBIGRldmljZXMKKyAqLworCitzdGF0aWMgdTggaWRlX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJcmV0dXJuICh1OCkgaW5iKHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBpZGVfb3V0Yih1OCB2YWwsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlvdXRiKHZhbCwgcG9ydCk7Cit9CisKKy8qCisgKglNTUlPIG9wZXJhdGlvbnMsIHR5cGljYWxseSB1c2VkIGZvciBTQVRBIGNvbnRyb2xsZXJzCisgKi8KKworc3RhdGljIHU4IGlkZV9tbV9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiAodTgpIHJlYWRiKCh2b2lkIF9faW9tZW0gKikgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGlkZV9tbV9vdXRiKHU4IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJd3JpdGViKHZhbHVlLCAodm9pZCBfX2lvbWVtICopIHBvcnQpOworfQorCit2b2lkIGlkZV9leGVjX2NvbW1hbmQoaWRlX2h3aWZfdCAqaHdpZiwgdTggY21kKQoreworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXdyaXRlYihjbWQsICh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5jb21tYW5kX2FkZHIpOworCWVsc2UKKwkJb3V0YihjbWQsIGh3aWYtPmlvX3BvcnRzLmNvbW1hbmRfYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfZXhlY19jb21tYW5kKTsKKwordTggaWRlX3JlYWRfc3RhdHVzKGlkZV9od2lmX3QgKmh3aWYpCit7CisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJcmV0dXJuIHJlYWRiKCh2b2lkIF9faW9tZW0gKilod2lmLT5pb19wb3J0cy5zdGF0dXNfYWRkcik7CisJZWxzZQorCQlyZXR1cm4gaW5iKGh3aWYtPmlvX3BvcnRzLnN0YXR1c19hZGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX3N0YXR1cyk7CisKK3U4IGlkZV9yZWFkX2FsdHN0YXR1cyhpZGVfaHdpZl90ICpod2lmKQoreworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pCisJCXJldHVybiByZWFkYigodm9pZCBfX2lvbWVtICopaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpOworCWVsc2UKKwkJcmV0dXJuIGluYihod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9hbHRzdGF0dXMpOworCit2b2lkIGlkZV9zZXRfaXJxKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbikKK3sKKwl1OCBjdGwgPSBBVEFfREVWQ1RMX09CUzsKKworCWlmIChvbiA9PSA0KSB7IC8qIGhhY2sgZm9yIFNSU1QgKi8KKwkJY3RsIHw9IDQ7CisJCW9uICY9IH40OworCX0KKworCWN0bCB8PSBvbiA/IDAgOiAyOworCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykKKwkJd3JpdGViKGN0bCwgKHZvaWQgX19pb21lbSAqKWh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKKwllbHNlCisJCW91dGIoY3RsLCBod2lmLT5pb19wb3J0cy5jdGxfYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0X2lycSk7CisKK3ZvaWQgaWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKwl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKwl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOworCisJaWYgKG1taW8pCisJCXRmX291dGIgPSBpZGVfbW1fb3V0YjsKKwllbHNlCisJCXRmX291dGIgPSBpZGVfb3V0YjsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQorCQlISUhJID0gMHhGRjsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgeworCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKKworCQlpZiAobW1pbykKKwkJCXdyaXRldyhkYXRhLCAodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7CisJCWVsc2UKKwkJCW91dHcoZGF0YSwgaW9fcG9ydHMtPmRhdGFfYWRkcik7CisJfQorCisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKKwkJdGZfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCQl0Zl9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCQl0Zl9vdXRiKHRmLT5ob2JfbGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKKwkJdGZfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJCXRmX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwkJdGZfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKKwkJdGZfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJCXRmX291dGIodGYtPmxiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTSkKKwkJdGZfb3V0Yih0Zi0+bGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQorCQl0Zl9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKKworCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCQl0Zl9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAorCQkJIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfbG9hZCk7CisKK3ZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKwl1OCAoKnRmX2luYikodW5zaWduZWQgbG9uZyBwb3J0KTsKKwl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKworCWlmIChtbWlvKSB7CisJCXRmX291dGIgPSBpZGVfbW1fb3V0YjsKKwkJdGZfaW5iICA9IGlkZV9tbV9pbmI7CisJfSBlbHNlIHsKKwkJdGZfb3V0YiA9IGlkZV9vdXRiOworCQl0Zl9pbmIgID0gaWRlX2luYjsKKwl9CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgeworCQl1MTYgZGF0YTsKKworCQlpZiAobW1pbykKKwkJCWRhdGEgPSByZWFkdygodm9pZCBfX2lvbWVtICopaW9fcG9ydHMtPmRhdGFfYWRkcik7CisJCWVsc2UKKwkJCWRhdGEgPSBpbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7CisKKwkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKKwkJdGYtPmhvYl9kYXRhID0gKGRhdGEgPj4gOCkgJiAweGZmOworCX0KKworCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KKwl0Zl9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwkJdGYtPmZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQorCQl0Zi0+bnNlY3QgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKKwkJdGYtPmxiYWwgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwkJdGYtPmxiYW0gICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKKwkJdGYtPmxiYWggICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQorCQl0Zi0+ZGV2aWNlID0gdGZfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CisKKwlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwkJdGZfb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CisKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQorCQkJdGYtPmhvYl9mZWF0dXJlID0gdGZfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQorCQkJdGYtPmhvYl9uc2VjdCAgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKKwkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQkJdGYtPmhvYl9sYmFsICAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOworCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCisJCQl0Zi0+aG9iX2xiYW0gICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKKwkJCXRmLT5ob2JfbGJhaCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfdGZfcmVhZCk7CisKKy8qCisgKiBTb21lIGxvY2FsYnVzIEVJREUgaW50ZXJmYWNlcyByZXF1aXJlIGEgc3BlY2lhbCBhY2Nlc3Mgc2VxdWVuY2UKKyAqIHdoZW4gdXNpbmcgMzItYml0IEkvTyBpbnN0cnVjdGlvbnMgdG8gdHJhbnNmZXIgZGF0YS4gIFdlIGNhbGwgdGhpcworICogdGhlICJ2bGJfc3luYyIgc2VxdWVuY2UsIHdoaWNoIGNvbnNpc3RzIG9mIHRocmVlIHN1Y2Nlc3NpdmUgcmVhZHMKKyAqIG9mIHRoZSBzZWN0b3IgY291bnQgcmVnaXN0ZXIgbG9jYXRpb24sIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAorICogdG8gZW5zdXJlIHRoYXQgdGhlIHJlYWRzIGFsbCBoYXBwZW4gdG9nZXRoZXIuCisgKi8KK3N0YXRpYyB2b2lkIGF0YV92bGJfc3luYyh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJKHZvaWQpaW5iKHBvcnQpOworCSh2b2lkKWluYihwb3J0KTsKKwkodm9pZClpbmIocG9ydCk7Cit9CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICpmcm9tKiB0aGUgSURFIGludGVyZmFjZQorICoKKyAqIFRoZXNlIHJvdXRpbmVzIHdpbGwgcm91bmQgdXAgYW55IHJlcXVlc3QgZm9yIGFuIG9kZCBudW1iZXIgb2YgYnl0ZXMsCisgKiBzbyBpZiBhbiBvZGQgbGVuIGlzIHNwZWNpZmllZCwgYmUgc3VyZSB0aGF0IHRoZXJlJ3MgYXQgbGVhc3Qgb25lCisgKiBleHRyYSBieXRlIGFsbG9jYXRlZCBmb3IgdGhlIGJ1ZmZlci4KKyAqLwordm9pZCBpZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdm9pZCAqYnVmLAorCQkgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBpb19wb3J0cy0+ZGF0YV9hZGRyOworCXU4IGlvXzMyYml0ID0gZHJpdmUtPmlvXzMyYml0OworCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOworCisJbGVuKys7CisKKwlpZiAoaW9fMzJiaXQpIHsKKwkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7CisKKwkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKSB7CisJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQlhdGFfdmxiX3N5bmMoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCQl9CisKKwkJaWYgKG1taW8pCisJCQlfX2lkZV9tbV9pbnNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisJCWVsc2UKKwkJCWluc2woZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOworCisJCWlmICgoaW9fMzJiaXQgJiAyKSAmJiAhbW1pbykKKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCQlpZiAoKGxlbiAmIDMpID49IDIpIHsKKwkJCWlmIChtbWlvKQorCQkJCV9faWRlX21tX2luc3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwKKwkJCQkJCSh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOworCQkJZWxzZQorCQkJCWluc3coZGF0YV9hZGRyLCAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChtbWlvKQorCQkJX19pZGVfbW1faW5zdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOworCQllbHNlCisJCQlpbnN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfaW5wdXRfZGF0YSk7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICp0byogdGhlIElERSBpbnRlcmZhY2UKKyAqLwordm9pZCBpZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKKwkJICAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGlvX3BvcnRzLT5kYXRhX2FkZHI7CisJdTggaW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7CisJdTggbW1pbyA9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CisKKwlsZW4rKzsKKworCWlmIChpb18zMmJpdCkgeworCQl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKKworCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pIHsKKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCWF0YV92bGJfc3luYyhpb19wb3J0cy0+bnNlY3RfYWRkcik7CisJCX0KKworCQlpZiAobW1pbykKKwkJCV9faWRlX21tX291dHNsKCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7CisJCWVsc2UKKwkJCW91dHNsKGRhdGFfYWRkciwgYnVmLCBsZW4gLyA0KTsKKworCQlpZiAoKGlvXzMyYml0ICYgMikgJiYgIW1taW8pCisJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwkJaWYgKChsZW4gJiAzKSA+PSAyKSB7CisJCQlpZiAobW1pbykKKwkJCQlfX2lkZV9tbV9vdXRzdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLAorCQkJCQkJICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOworCQkJZWxzZQorCQkJCW91dHN3KGRhdGFfYWRkciwgKHU4ICopYnVmICsgKGxlbiAmIH4zKSwgMSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobW1pbykKKwkJCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKilkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CisJCWVsc2UKKwkJCW91dHN3KGRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfb3V0cHV0X2RhdGEpOworCitjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyBkZWZhdWx0X3RwX29wcyA9IHsKKwkuZXhlY19jb21tYW5kCQk9IGlkZV9leGVjX2NvbW1hbmQsCisJLnJlYWRfc3RhdHVzCQk9IGlkZV9yZWFkX3N0YXR1cywKKwkucmVhZF9hbHRzdGF0dXMJCT0gaWRlX3JlYWRfYWx0c3RhdHVzLAorCisJLnNldF9pcnEJCT0gaWRlX3NldF9pcnEsCisKKwkudGZfbG9hZAkJPSBpZGVfdGZfbG9hZCwKKwkudGZfcmVhZAkJPSBpZGVfdGZfcmVhZCwKKworCS5pbnB1dF9kYXRhCQk9IGlkZV9pbnB1dF9kYXRhLAorCS5vdXRwdXRfZGF0YQkJPSBpZGVfb3V0cHV0X2RhdGEsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwppbmRleCBhOWE2YzIwLi4yZTkyNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW8uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwpAQCAtMTk2LDcgKzE5Niw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGlkZV9lbmRfZHJpdmVfY21kKTsKIAotc3RhdGljIHZvaWQgaWRlX2tpbGxfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit2b2lkIGlkZV9raWxsX3JxKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCWlmIChycS0+cnFfZGlzaykgewogCQlzdHJ1Y3QgaWRlX2RyaXZlciAqZHJ2OwpAQCAtMjA3LDEzMyArMjA3LDYgQEAKIAkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKIH0KIAotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfYXRhX2Vycm9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0LCB1OCBlcnIpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JaWYgKChzdGF0ICYgQVRBX0JVU1kpIHx8Ci0JICAgICgoc3RhdCAmIEFUQV9ERikgJiYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9XRVJSKSA9PSAwKSkgewotCQkvKiBvdGhlciBiaXRzIGFyZSB1c2VsZXNzIHdoZW4gQlVTWSAqLwotCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOwotCX0gZWxzZSBpZiAoc3RhdCAmIEFUQV9FUlIpIHsKLQkJLyogZXJyIGhhcyBkaWZmZXJlbnQgbWVhbmluZyBvbiBjZHJvbSBhbmQgdGFwZSAqLwotCQlpZiAoZXJyID09IEFUQV9BQk9SVEVEKSB7Ci0JCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBKSAmJgotCQkJICAgIC8qIHNvbWUgbmV3ZXIgZHJpdmVzIGRvbid0IHN1cHBvcnQgQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMgKi8KLQkJCSAgICBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpID09IEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TKQotCQkJCXJldHVybiBpZGVfc3RvcHBlZDsKLQkJfSBlbHNlIGlmICgoZXJyICYgQkFEX0NSQykgPT0gQkFEX0NSQykgewotCQkJLyogVURNQSBjcmMgZXJyb3IsIGp1c3QgcmV0cnkgdGhlIG9wZXJhdGlvbiAqLwotCQkJZHJpdmUtPmNyY19jb3VudCsrOwotCQl9IGVsc2UgaWYgKGVyciAmIChBVEFfQkJLIHwgQVRBX1VOQykpIHsKLQkJCS8qIHJldHJpZXMgd29uJ3QgaGVscCB0aGVzZSAqLwotCQkJcnEtPmVycm9ycyA9IEVSUk9SX01BWDsKLQkJfSBlbHNlIGlmIChlcnIgJiBBVEFfVFJLME5GKSB7Ci0JCQkvKiBoZWxwIGl0IGZpbmQgdHJhY2sgemVybyAqLwotCQkJcnEtPmVycm9ycyB8PSBFUlJPUl9SRUNBTDsKLQkJfQotCX0KLQotCWlmICgoc3RhdCAmIEFUQV9EUlEpICYmIHJxX2RhdGFfZGlyKHJxKSA9PSBSRUFEICYmCi0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0VSUk9SX1NUT1BTX0ZJRk8pID09IDApIHsKLQkJaW50IG5zZWN0ID0gZHJpdmUtPm11bHRfY291bnQgPyBkcml2ZS0+bXVsdF9jb3VudCA6IDE7Ci0KLQkJaWRlX3BhZF90cmFuc2Zlcihkcml2ZSwgUkVBRCwgbnNlY3QgKiBTRUNUT1JfU0laRSk7Ci0JfQotCi0JaWYgKHJxLT5lcnJvcnMgPj0gRVJST1JfTUFYIHx8IGJsa19ub3JldHJ5X3JlcXVlc3QocnEpKSB7Ci0JCWlkZV9raWxsX3JxKGRyaXZlLCBycSk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KLQlpZiAoaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKSAmIChBVEFfQlVTWSB8IEFUQV9EUlEpKQotCQlycS0+ZXJyb3JzIHw9IEVSUk9SX1JFU0VUOwotCi0JaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVTRVQpID09IEVSUk9SX1JFU0VUKSB7Ci0JCSsrcnEtPmVycm9yczsKLQkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7Ci0JfQotCi0JaWYgKChycS0+ZXJyb3JzICYgRVJST1JfUkVDQUwpID09IEVSUk9SX1JFQ0FMKQotCQlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlID0gMTsKLQotCSsrcnEtPmVycm9yczsKLQotCXJldHVybiBpZGVfc3RvcHBlZDsKLX0KLQotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfYXRhcGlfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IHN0YXQsIHU4IGVycikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0KLQlpZiAoKHN0YXQgJiBBVEFfQlVTWSkgfHwKLQkgICAgKChzdGF0ICYgQVRBX0RGKSAmJiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT1dFUlIpID09IDApKSB7Ci0JCS8qIG90aGVyIGJpdHMgYXJlIHVzZWxlc3Mgd2hlbiBCVVNZICovCi0JCXJxLT5lcnJvcnMgfD0gRVJST1JfUkVTRVQ7Ci0JfSBlbHNlIHsKLQkJLyogYWRkIGRlY29kaW5nIGVycm9yIHN0dWZmICovCi0JfQotCi0JaWYgKGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikgJiAoQVRBX0JVU1kgfCBBVEFfRFJRKSkKLQkJLyogZm9yY2UgYW4gYWJvcnQgKi8KLQkJaHdpZi0+dHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9JRExFSU1NRURJQVRFKTsKLQotCWlmIChycS0+ZXJyb3JzID49IEVSUk9SX01BWCkgewotCQlpZGVfa2lsbF9ycShkcml2ZSwgcnEpOwotCX0gZWxzZSB7Ci0JCWlmICgocnEtPmVycm9ycyAmIEVSUk9SX1JFU0VUKSA9PSBFUlJPUl9SRVNFVCkgewotCQkJKytycS0+ZXJyb3JzOwotCQkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7Ci0JCX0KLQkJKytycS0+ZXJyb3JzOwotCX0KLQotCXJldHVybiBpZGVfc3RvcHBlZDsKLX0KLQotc3RhdGljIGlkZV9zdGFydHN0b3BfdAotX19pZGVfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IHN0YXQsIHU4IGVycikKLXsKLQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQotCQlyZXR1cm4gaWRlX2F0YV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7Ci0JcmV0dXJuIGlkZV9hdGFwaV9lcnJvcihkcml2ZSwgcnEsIHN0YXQsIGVycik7Ci19Ci0KLS8qKgotICoJaWRlX2Vycm9yCS0JaGFuZGxlIGFuIGVycm9yIG9uIHRoZSBJREUKLSAqCUBkcml2ZTogZHJpdmUgdGhlIGVycm9yIG9jY3VycmVkIG9uCi0gKglAbXNnOiBtZXNzYWdlIHRvIHJlcG9ydAotICoJQHN0YXQ6IHN0YXR1cyBiaXRzCi0gKgotICoJaWRlX2Vycm9yKCkgdGFrZXMgYWN0aW9uIGJhc2VkIG9uIHRoZSBlcnJvciByZXR1cm5lZCBieSB0aGUgZHJpdmUuCi0gKglGb3Igbm9ybWFsIEkvTyB0aGF0IG1heSB3ZWxsIGluY2x1ZGUgcmV0cmllcy4gV2UgZGVhbCB3aXRoCi0gKglib3RoIG5ldy1zdHlsZSAodGFza2ZpbGUpIGFuZCBvbGQgc3R5bGUgY29tbWFuZCBoYW5kbGluZyBoZXJlLgotICoJSW4gdGhlIGNhc2Ugb2YgdGFza2ZpbGUgY29tbWFuZCBoYW5kbGluZyB0aGVyZSBpcyB3b3JrIGxlZnQgdG8KLSAqCWRvCi0gKi8KLSAKLWlkZV9zdGFydHN0b3BfdCBpZGVfZXJyb3IgKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbXNnLCB1OCBzdGF0KQotewotCXN0cnVjdCByZXF1ZXN0ICpycTsKLQl1OCBlcnI7Ci0KLQllcnIgPSBpZGVfZHVtcF9zdGF0dXMoZHJpdmUsIG1zZywgc3RhdCk7Ci0KLQlycSA9IGRyaXZlLT5od2lmLT5ycTsKLQlpZiAocnEgPT0gTlVMTCkKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCi0JLyogcmV0cnkgb25seSAibm9ybWFsIiBJL086ICovCi0JaWYgKCFibGtfZnNfcmVxdWVzdChycSkpIHsKLQkJcnEtPmVycm9ycyA9IDE7Ci0JCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBlcnIpOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCi0JcmV0dXJuIF9faWRlX2Vycm9yKGRyaXZlLCBycSwgc3RhdCwgZXJyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9lcnJvcik7Ci0KIHN0YXRpYyB2b2lkIGlkZV90Zl9zZXRfc3BlY2lmeV9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZikKIHsKIAl0Zi0+bnNlY3QgICA9IGRyaXZlLT5zZWN0OwpAQCAtNDkwLDcxICszNjMsMTYgQEAKICAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCi1pbnQgaWRlX2RldnNldF9leGVjdXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3Qgc3RydWN0IGlkZV9kZXZzZXQgKnNldHRpbmcsCi0JCSAgICAgICBpbnQgYXJnKQotewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwotCXN0cnVjdCByZXF1ZXN0ICpycTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICghKHNldHRpbmctPmZsYWdzICYgRFNfU1lOQykpCi0JCXJldHVybiBzZXR0aW5nLT5zZXQoZHJpdmUsIGFyZyk7Ci0KLQlycSA9IGJsa19nZXRfcmVxdWVzdChxLCBSRUFELCBfX0dGUF9XQUlUKTsKLQlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOwotCXJxLT5jbWRfbGVuID0gNTsKLQlycS0+Y21kWzBdID0gUkVRX0RFVlNFVF9FWEVDOwotCSooaW50ICopJnJxLT5jbWRbMV0gPSBhcmc7Ci0JcnEtPnNwZWNpYWwgPSBzZXR0aW5nLT5zZXQ7Ci0KLQlpZiAoYmxrX2V4ZWN1dGVfcnEocSwgTlVMTCwgcnEsIDApKQotCQlyZXQgPSBycS0+ZXJyb3JzOwotCWJsa19wdXRfcmVxdWVzdChycSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2RldnNldF9leGVjdXRlKTsKLQogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfc3BlY2lhbF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAl1OCBjbWQgPSBycS0+Y21kWzBdOwogCi0JaWYgKGNtZCA9PSBSRVFfUEFSS19IRUFEUyB8fCBjbWQgPT0gUkVRX1VOUEFSS19IRUFEUykgewotCQlpZGVfdGFza190IHRhc2s7Ci0JCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2sudGY7Ci0KLQkJbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCQlpZiAoY21kID09IFJFUV9QQVJLX0hFQURTKSB7Ci0JCQlkcml2ZS0+c2xlZXAgPSAqKHVuc2lnbmVkIGxvbmcgKilycS0+c3BlY2lhbDsKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1NMRUVQSU5HOwotCQkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX0lETEVJTU1FRElBVEU7Ci0JCQl0Zi0+ZmVhdHVyZSA9IDB4NDQ7Ci0JCQl0Zi0+bGJhbCA9IDB4NGM7Ci0JCQl0Zi0+bGJhbSA9IDB4NGU7Ci0JCQl0Zi0+bGJhaCA9IDB4NTU7Ci0JCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19DVVNUT01fSEFORExFUjsKLQkJfSBlbHNlCQkvKiBjbWQgPT0gUkVRX1VOUEFSS19IRUFEUyAqLwotCQkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX0NIS19QT1dFUjsKLQotCQl0YXNrLnRmX2ZsYWdzIHw9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JCXRhc2sucnEgPSBycTsKLQkJZHJpdmUtPmh3aWYtPmRhdGFfcGhhc2UgPSB0YXNrLmRhdGFfcGhhc2UgPSBUQVNLRklMRV9OT19EQVRBOwotCQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKLQl9Ci0KIAlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUkVRX1BBUktfSEVBRFM6CisJY2FzZSBSRVFfVU5QQVJLX0hFQURTOgorCQlyZXR1cm4gaWRlX2RvX3BhcmtfdW5wYXJrKGRyaXZlLCBycSk7CiAJY2FzZSBSRVFfREVWU0VUX0VYRUM6Ci0JewotCQlpbnQgZXJyLCAoKnNldGZ1bmMpKGlkZV9kcml2ZV90ICosIGludCkgPSBycS0+c3BlY2lhbDsKLQotCQllcnIgPSBzZXRmdW5jKGRyaXZlLCAqKGludCAqKSZycS0+Y21kWzFdKTsKLQkJaWYgKGVycikKLQkJCXJxLT5lcnJvcnMgPSBlcnI7Ci0JCWVsc2UKLQkJCWVyciA9IDE7Ci0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyLCAwKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KKwkJcmV0dXJuIGlkZV9kb19kZXZzZXQoZHJpdmUsIHJxKTsKIAljYXNlIFJFUV9EUklWRV9SRVNFVDoKIAkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CiAJZGVmYXVsdDoKQEAgLTgyMCw2MyArNjM4LDYgQEAKIAkJYmxrX3BsdWdfZGV2aWNlKHEpOwogfQogCi0vKgotICogdW4tYnVzeSB0aGUgcG9ydCBldGMsIGFuZCBjbGVhciBhbnkgcGVuZGluZyBETUEgc3RhdHVzLiB3ZSB3YW50IHRvCi0gKiByZXRyeSB0aGUgY3VycmVudCByZXF1ZXN0IGluIHBpbyBtb2RlIGluc3RlYWQgb2Ygcmlza2luZyB0b3NzaW5nIGl0Ci0gKiBhbGwgYXdheQotICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvcikKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxOwotCWlkZV9zdGFydHN0b3BfdCByZXQgPSBpZGVfc3RvcHBlZDsKLQotCS8qCi0JICogZW5kIGN1cnJlbnQgZG1hIHRyYW5zYWN0aW9uCi0JICovCi0KLQlpZiAoZXJyb3IgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBETUEgdGltZW91dCBlcnJvclxuIiwgZHJpdmUtPm5hbWUpOwotCQkodm9pZClod2lmLT5kbWFfb3BzLT5kbWFfZW5kKGRyaXZlKTsKLQkJcmV0ID0gaWRlX2Vycm9yKGRyaXZlLCAiZG1hIHRpbWVvdXQgZXJyb3IiLAotCQkJCWh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZikpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBETUEgdGltZW91dCByZXRyeVxuIiwgZHJpdmUtPm5hbWUpOwotCQlod2lmLT5kbWFfb3BzLT5kbWFfdGltZW91dChkcml2ZSk7Ci0JfQotCi0JLyoKLQkgKiBkaXNhYmxlIGRtYSBmb3Igbm93LCBidXQgcmVtZW1iZXIgdGhhdCB3ZSBkaWQgc28gYmVjYXVzZSBvZgotCSAqIGEgdGltZW91dCAtLSB3ZSdsbCByZWVuYWJsZSBhZnRlciB3ZSBmaW5pc2ggdGhpcyBuZXh0IHJlcXVlc3QKLQkgKiAob3IgcmF0aGVyIHRoZSBmaXJzdCBjaHVuayBvZiBpdCkgaW4gcGlvLgotCSAqLwotCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX0RNQV9QSU9fUkVUUlk7Ci0JZHJpdmUtPnJldHJ5X3BpbysrOwotCWlkZV9kbWFfb2ZmX3F1aWV0bHkoZHJpdmUpOwotCi0JLyoKLQkgKiB1bi1idXN5IGRyaXZlIGV0YyBhbmQgbWFrZSBzdXJlIHJlcXVlc3QgaXMgc2FuZQotCSAqLwotCi0JcnEgPSBod2lmLT5ycTsKLQlpZiAoIXJxKQotCQlnb3RvIG91dDsKLQotCWh3aWYtPnJxID0gTlVMTDsKLQotCXJxLT5lcnJvcnMgPSAwOwotCi0JaWYgKCFycS0+YmlvKQotCQlnb3RvIG91dDsKLQotCXJxLT5zZWN0b3IgPSBycS0+YmlvLT5iaV9zZWN0b3I7Ci0JcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9IGJpb19pb3ZlYyhycS0+YmlvKS0+YnZfbGVuID4+IDk7Ci0JcnEtPmhhcmRfY3VyX3NlY3RvcnMgPSBycS0+Y3VycmVudF9ucl9zZWN0b3JzOwotCXJxLT5idWZmZXIgPSBiaW9fZGF0YShycS0+YmlvKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBpZGVfcGx1Z19kZXZpY2UoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwpAQCAtODg4LDYgKzY0OSwyOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgaW50IGRyaXZlX2lzX3JlYWR5KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJdTggc3RhdCA9IDA7CisKKwlpZiAoZHJpdmUtPndhaXRpbmdfZm9yX2RtYSkKKwkJcmV0dXJuIGh3aWYtPmRtYV9vcHMtPmRtYV90ZXN0X2lycShkcml2ZSk7CisKKwlpZiAoaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIgJiYKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQlJPS0VOX0FMVFNUQVRVUykgPT0gMCkKKwkJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9hbHRzdGF0dXMoaHdpZik7CisJZWxzZQorCQkvKiBOb3RlOiB0aGlzIG1heSBjbGVhciBhIHBlbmRpbmcgSVJRISEgKi8KKwkJc3RhdCA9IGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CisKKwlpZiAoc3RhdCAmIEFUQV9CVVNZKQorCQkvKiBkcml2ZSBidXN5OiBkZWZpbml0ZWx5IG5vdCBpbnRlcnJ1cHRpbmcgKi8KKwkJcmV0dXJuIDA7CisKKwkvKiBkcml2ZSByZWFkeTogKm1pZ2h0KiBiZSBpbnRlcnJ1cHRpbmcgKi8KKwlyZXR1cm4gMTsKK30KKwogLyoqCiAgKglpZGVfdGltZXJfZXhwaXJ5CS0JaGFuZGxlIGxhY2sgb2YgYW4gSURFIGludGVycnVwdAogICoJQGRhdGE6IHRpbWVyIGNhbGxiYWNrIG1hZ2ljIChod2lmKQpAQCAtMTE2NCw1NCArOTQ4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9pbnRyKTsKIAotLyoqCi0gKglpZGVfZG9fZHJpdmVfY21kCS0JaXNzdWUgSURFIHNwZWNpYWwgY29tbWFuZAotICoJQGRyaXZlOiBkZXZpY2UgdG8gaXNzdWUgY29tbWFuZAotICoJQHJxOiByZXF1ZXN0IHRvIGlzc3VlCi0gKgotICoJVGhpcyBmdW5jdGlvbiBpc3N1ZXMgYSBzcGVjaWFsIElERSBkZXZpY2UgcmVxdWVzdAotICoJb250byB0aGUgcmVxdWVzdCBxdWV1ZS4KLSAqCi0gKgl0aGUgcnEgaXMgcXVldWVkIGF0IHRoZSBoZWFkIG9mIHRoZSByZXF1ZXN0IHF1ZXVlLCBkaXNwbGFjaW5nCi0gKgl0aGUgY3VycmVudGx5LWJlaW5nLXByb2Nlc3NlZCByZXF1ZXN0IGFuZCB0aGlzIGZ1bmN0aW9uCi0gKglyZXR1cm5zIGltbWVkaWF0ZWx5IHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIG5ldyBycSB0byBiZQotICoJY29tcGxldGVkLiAgVGhpcyBpcyBWRVJZIERBTkdFUk9VUywgYW5kIGlzIGludGVuZGVkIGZvcgotICoJY2FyZWZ1bCB1c2UgYnkgdGhlIEFUQVBJIHRhcGUvY2Ryb20gZHJpdmVyIGNvZGUuCi0gKi8KLQotdm9pZCBpZGVfZG9fZHJpdmVfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gZHJpdmUtPnF1ZXVlOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkcml2ZS0+aHdpZi0+cnEgPSBOVUxMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCV9fZWx2X2FkZF9yZXF1ZXN0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfRlJPTlQsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChpZGVfZG9fZHJpdmVfY21kKTsKLQotdm9pZCBpZGVfcGt0Y21kX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1MzIgdGZfZmxhZ3MsIHUxNiBiY291bnQsIHU4IGRtYSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaWRlX3Rhc2tfdCB0YXNrOwotCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0xCQUggfCBJREVfVEZMQUdfT1VUX0xCQU0gfAotCQkJSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgdGZfZmxhZ3M7Ci0JdGFzay50Zi5mZWF0dXJlID0gZG1hOwkJLyogVXNlIFBJTy9ETUEgKi8KLQl0YXNrLnRmLmxiYW0gICAgPSBiY291bnQgJiAweGZmOwotCXRhc2sudGYubGJhaCAgICA9IChiY291bnQgPj4gOCkgJiAweGZmOwotCi0JaWRlX3RmX2R1bXAoZHJpdmUtPm5hbWUsICZ0YXNrLnRmKTsKLQlod2lmLT50cF9vcHMtPnNldF9pcnEoaHdpZiwgMSk7Ci0JU0VMRUNUX01BU0soZHJpdmUsIDApOwotCWh3aWYtPnRwX29wcy0+dGZfbG9hZChkcml2ZSwgJnRhc2spOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpZGVfcGt0Y21kX3RmX2xvYWQpOwotCiB2b2lkIGlkZV9wYWRfdHJhbnNmZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgd3JpdGUsIGludCBsZW4pCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKaW5kZXggYjE4OTJiZC4uMzE3YzVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCkBAIC0yNywzNSArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLS8qCi0gKglDb252ZW50aW9uYWwgUElPIG9wZXJhdGlvbnMgZm9yIEFUQSBkZXZpY2VzCi0gKi8KLQotc3RhdGljIHU4IGlkZV9pbmIgKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlyZXR1cm4gKHU4KSBpbmIocG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9vdXRiICh1OCB2YWwsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlvdXRiKHZhbCwgcG9ydCk7Ci19Ci0KLS8qCi0gKglNTUlPIG9wZXJhdGlvbnMsIHR5cGljYWxseSB1c2VkIGZvciBTQVRBIGNvbnRyb2xsZXJzCi0gKi8KLQotc3RhdGljIHU4IGlkZV9tbV9pbmIgKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQlyZXR1cm4gKHU4KSByZWFkYigodm9pZCBfX2lvbWVtICopIHBvcnQpOwotfQotCi1zdGF0aWMgdm9pZCBpZGVfbW1fb3V0YiAodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQl3cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKikgcG9ydCk7Ci19Ci0KLXZvaWQgU0VMRUNUX0RSSVZFIChpZGVfZHJpdmVfdCAqZHJpdmUpCit2b2lkIFNFTEVDVF9EUklWRShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CkBAIC03OCwyNzcgKzUwLDYgQEAKIAkJcG9ydF9vcHMtPm1hc2twcm9jKGRyaXZlLCBtYXNrKTsKIH0KIAotdm9pZCBpZGVfZXhlY19jb21tYW5kKGlkZV9od2lmX3QgKmh3aWYsIHU4IGNtZCkKLXsKLQlpZiAoaHdpZi0+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/IDEgOiAwOwotCi0JbGVuKys7Ci0KLQlpZiAoaW9fMzJiaXQpIHsKLQkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihmbGFncyk7Ci0KLQkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKSB7Ci0JCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQlhdGFfdmxiX3N5bmMoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQl9Ci0KLQkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9vdXRzbCgodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDQpOwotCQllbHNlCi0JCQlvdXRzbChkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gNCk7Ci0KLQkJaWYgKChpb18zMmJpdCAmIDIpICYmICFtbWlvKQotCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JCWlmICgobGVuICYgMykgPj0gMikgewotCQkJaWYgKG1taW8pCi0JCQkJX19pZGVfbW1fb3V0c3coKHZvaWQgX19pb21lbSAqKWRhdGFfYWRkciwKLQkJCQkJCSAodTggKilidWYgKyAobGVuICYgfjMpLCAxKTsKLQkJCWVsc2UKLQkJCQlvdXRzdyhkYXRhX2FkZHIsICh1OCAqKWJ1ZiArIChsZW4gJiB+MyksIDEpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG1taW8pCi0JCQlfX2lkZV9tbV9vdXRzdygodm9pZCBfX2lvbWVtICopZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwotCQllbHNlCi0JCQlvdXRzdyhkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX291dHB1dF9kYXRhKTsKLQogdTggaWRlX3JlYWRfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV90YXNrX3QgdGFzazsKQEAgLTM2MiwzNSArNjMsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfZXJyb3IpOwogCi12b2lkIGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbihpZGVfZHJpdmVfdCAqZHJpdmUsIHUxNiAqYmNvdW50LCB1OCAqaXJlYXNvbikKLXsKLQlpZGVfdGFza190IHRhc2s7Ci0KLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkFIIHwgSURFX1RGTEFHX0lOX0xCQU0gfAotCQkJSURFX1RGTEFHX0lOX05TRUNUOwotCi0JZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOwotCi0JKmJjb3VudCA9ICh0YXNrLnRmLmxiYWggPDwgOCkgfCB0YXNrLnRmLmxiYW07Ci0JKmlyZWFzb24gPSB0YXNrLnRmLm5zZWN0ICYgMzsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbik7Ci0KLWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzIGRlZmF1bHRfdHBfb3BzID0gewotCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKLQkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAotCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCi0KLQkuc2V0X2lycQkJPSBpZGVfc2V0X2lycSwKLQotCS50Zl9sb2FkCQk9IGlkZV90Zl9sb2FkLAotCS50Zl9yZWFkCQk9IGlkZV90Zl9yZWFkLAotCi0JLmlucHV0X2RhdGEJCT0gaWRlX2lucHV0X2RhdGEsCi0JLm91dHB1dF9kYXRhCQk9IGlkZV9vdXRwdXRfZGF0YSwKLX07Ci0KIHZvaWQgaWRlX2ZpeF9kcml2ZWlkKHUxNiAqaWQpCiB7CiAjaWZuZGVmIF9fTElUVExFX0VORElBTgpAQCAtNDEyLDcgKzg0LDcgQEAKICAqIHJldHVybmVkIGJ5IHRoZSBBVEFfQ01EX0lEX0FUQVtQSV0gY29tbWFuZHMuCiAgKi8KIAotdm9pZCBpZGVfZml4c3RyaW5nICh1OCAqcywgY29uc3QgaW50IGJ5dGVjb3VudCwgY29uc3QgaW50IGJ5dGVzd2FwKQordm9pZCBpZGVfZml4c3RyaW5nKHU4ICpzLCBjb25zdCBpbnQgYnl0ZWNvdW50LCBjb25zdCBpbnQgYnl0ZXN3YXApCiB7CiAJdTggKnAsICplbmQgPSAmc1tieXRlY291bnQgJiB+MV07IC8qIGJ5dGVjb3VudCBtdXN0IGJlIGV2ZW4gKi8KIApAQCAtNDM1LDQ0ICsxMDcsOSBAQAogCXdoaWxlIChwICE9IGVuZCkKIAkJKnArKyA9ICdcMCc7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaWRlX2ZpeHN0cmluZyk7CiAKIC8qCi0gKiBOZWVkZWQgZm9yIFBDSSBpcnEgc2hhcmluZwotICovCi1pbnQgZHJpdmVfaXNfcmVhZHkgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmCT0gZHJpdmUtPmh3aWY7Ci0JdTggc3RhdAkJCT0gMDsKLQotCWlmIChkcml2ZS0+d2FpdGluZ19mb3JfZG1hKQotCQlyZXR1cm4gaHdpZi0+ZG1hX29wcy0+ZG1hX3Rlc3RfaXJxKGRyaXZlKTsKLQotCS8qCi0JICogV2UgZG8gYSBwYXNzaXZlIHN0YXR1cyB0ZXN0IHVuZGVyIHNoYXJlZCBQQ0kgaW50ZXJydXB0cyBvbgotCSAqIGNhcmRzIHRoYXQgdHJ1bHkgc2hhcmUgdGhlIEFUQSBzaWRlIGludGVycnVwdCwgYnV0IG1heSBhbHNvIHNoYXJlCi0JICogYW4gaW50ZXJydXB0IHdpdGggYW5vdGhlciBwY2kgY2FyZC9kZXZpY2UuICBXZSBtYWtlIG5vIGFzc3VtcHRpb25zCi0JICogYWJvdXQgcG9zc2libGUgaXNhLXBucCBhbmQgcGNpLXBucCBpc3N1ZXMgeWV0LgotCSAqLwotCWlmIChod2lmLT5pb19wb3J0cy5jdGxfYWRkciAmJgotCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19CUk9LRU5fQUxUU1RBVFVTKSA9PSAwKQotCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX2FsdHN0YXR1cyhod2lmKTsKLQllbHNlCi0JCS8qIE5vdGU6IHRoaXMgbWF5IGNsZWFyIGEgcGVuZGluZyBJUlEhISAqLwotCQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmIChzdGF0ICYgQVRBX0JVU1kpCi0JCS8qIGRyaXZlIGJ1c3k6ICBkZWZpbml0ZWx5IG5vdCBpbnRlcnJ1cHRpbmcgKi8KLQkJcmV0dXJuIDA7Ci0KLQkvKiBkcml2ZSByZWFkeTogKm1pZ2h0KiBiZSBpbnRlcnJ1cHRpbmcgKi8KLQlyZXR1cm4gMTsKLX0KLQotRVhQT1JUX1NZTUJPTChkcml2ZV9pc19yZWFkeSk7Ci0KLS8qCiAgKiBUaGlzIHJvdXRpbmUgYnVzeS13YWl0cyBmb3IgdGhlIGRyaXZlIHN0YXR1cyB0byBiZSBub3QgImJ1c3kiLgogICogSXQgdGhlbiBjaGVja3MgdGhlIHN0YXR1cyBmb3IgYWxsIG9mIHRoZSAiZ29vZCIgYml0cyBhbmQgbm9uZQogICogb2YgdGhlICJiYWQiIGJpdHMsIGFuZCBpZiBhbGwgaXMgb2theSBpdCByZXR1cm5zIDAuICBBbGwgb3RoZXIKQEAgLTQ4Myw3ICsxMjAsOCBAQAogICogc2V0dGluZyBhIHRpbWVyIHRvIHdha2UgdXAgYXQgaGFsZiBzZWNvbmQgaW50ZXJ2YWxzIHRoZXJlYWZ0ZXIsCiAgKiB1bnRpbCB0aW1lb3V0IGlzIGFjaGlldmVkLCBiZWZvcmUgdGltaW5nIG91dC4KICAqLwotc3RhdGljIGludCBfX2lkZV93YWl0X3N0YXQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBnb29kLCB1OCBiYWQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCwgdTggKnJzdGF0KQorc3RhdGljIGludCBfX2lkZV93YWl0X3N0YXQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBnb29kLCB1OCBiYWQsCisJCQkgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHU4ICpyc3RhdCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKQEAgLTU0MSw3ICsxNzksOCBAQAogICogVGhlIGNhbGxlciBzaG91bGQgcmV0dXJuIHRoZSB1cGRhdGVkIHZhbHVlIG9mICJzdGFydHN0b3AiIGluIHRoaXMgY2FzZSwKICAqICJzdGFydHN0b3AiIGlzIHVuY2hhbmdlZCB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIDAuCiAgKi8KLWludCBpZGVfd2FpdF9zdGF0KGlkZV9zdGFydHN0b3BfdCAqc3RhcnRzdG9wLCBpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGdvb2QsIHU4IGJhZCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoraW50IGlkZV93YWl0X3N0YXQoaWRlX3N0YXJ0c3RvcF90ICpzdGFydHN0b3AsIGlkZV9kcml2ZV90ICpkcml2ZSwgdTggZ29vZCwKKwkJICB1OCBiYWQsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKIHsKIAlpbnQgZXJyOwogCXU4IHN0YXQ7CkBAIC01NjEsNyArMjAwLDYgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaWRlX3dhaXRfc3RhdCk7CiAKIC8qKgpAQCAtNTgyLDcgKzIyMCw2IEBACiAJCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2luX2RyaXZlX2xpc3QpOwogCiAvKgpAQCAtNjA3LDcgKzI0NCw3IEBACiAgKiAgQWxsIGhvc3RzIHRoYXQgdXNlIHRoZSA4MGMgcmliYm9uIG11c3QgdXNlIQogICogIFRoZSBuYW1lIGlzIGRlcml2ZWQgZnJvbSB1cHBlciBieXRlIG9mIHdvcmQgOTMgYW5kIHRoZSA4MGMgcmliYm9uLgogICovCi11OCBlaWdodHlfbmludHlfdGhyZWUgKGlkZV9kcml2ZV90ICpkcml2ZSkKK3U4IGVpZ2h0eV9uaW50eV90aHJlZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CkBAIC02NTIsNDcgKzI4OSwxOSBAQAogCiBpbnQgaWRlX2RyaXZlaWRfdXBkYXRlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKIAl1MTYgKmlkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTggc3RhdDsKKwlpbnQgcmM7CiAKLQkvKgotCSAqIFJlLXJlYWQgZHJpdmUtPmlkIGZvciBwb3NzaWJsZSBETUEgbW9kZQotCSAqIGNoYW5nZSAoY29waWVkIGZyb20gaWRlLXByb2JlLmMpCi0JICovCisJaWQgPSBrbWFsbG9jKFNFQ1RPUl9TSVpFLCBHRlBfQVRPTUlDKTsKKwlpZiAoaWQgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CiAKIAlTRUxFQ1RfTUFTSyhkcml2ZSwgMSk7Ci0JdHBfb3BzLT5zZXRfaXJxKGh3aWYsIDApOwotCW1zbGVlcCg1MCk7Ci0JdHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9JRF9BVEEpOwotCi0JaWYgKGlkZV9idXN5X3NsZWVwKGh3aWYsIFdBSVRfV09SU1RDQVNFLCAxKSkgewotCQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JCXJldHVybiAwOwotCX0KLQotCW1zbGVlcCg1MCk7CS8qIHdhaXQgZm9yIElSUSBhbmQgQVRBX0RSUSAqLwotCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKCFPS19TVEFUKHN0YXQsIEFUQV9EUlEsIEJBRF9SX1NUQVQpKSB7Ci0JCVNFTEVDVF9NQVNLKGRyaXZlLCAwKTsKLQkJcHJpbnRrKCIlczogQ0hFQ0sgZm9yIGdvb2QgU1RBVFVTXG4iLCBkcml2ZS0+bmFtZSk7Ci0JCXJldHVybiAwOwotCX0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmMgPSBpZGVfZGV2X3JlYWRfaWQoZHJpdmUsIEFUQV9DTURfSURfQVRBLCBpZCk7CiAJU0VMRUNUX01BU0soZHJpdmUsIDApOwotCWlkID0ga21hbGxvYyhTRUNUT1JfU0laRSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFpZCkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCXJldHVybiAwOwotCX0KLQl0cF9vcHMtPmlucHV0X2RhdGEoZHJpdmUsIE5VTEwsIGlkLCBTRUNUT1JfU0laRSk7Ci0JKHZvaWQpdHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsJLyogY2xlYXIgZHJpdmUgSVJRICovCi0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlpZGVfZml4X2RyaXZlaWQoaWQpOworCisJaWYgKHJjKQorCQlnb3RvIG91dF9lcnI7CiAKIAlkcml2ZS0+aWRbQVRBX0lEX1VETUFfTU9ERVNdICA9IGlkW0FUQV9JRF9VRE1BX01PREVTXTsKIAlkcml2ZS0+aWRbQVRBX0lEX01XRE1BX01PREVTXSA9IGlkW0FUQV9JRF9NV0RNQV9NT0RFU107CkBAIC03MDUsNiArMzE0LDEyIEBACiAJCWlkZV9kbWFfb2ZmKGRyaXZlKTsKIAogCXJldHVybiAxOworb3V0X2VycjoKKwlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7CisJaWYgKHJjID09IDIpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzOiBiYWQgc3RhdHVzXG4iLCBkcml2ZS0+bmFtZSwgX19mdW5jX18pOworCWtmcmVlKGlkKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGlkZV9jb25maWdfZHJpdmVfc3BlZWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkKQEAgLTczMSwxOCArMzQ2LDE1IEBACiAJICogYnV0IGZvciBzb21lIHJlYXNvbiB0aGVzZSBkb24ndCB3b3JrIGF0CiAJICogdGhpcyBwb2ludCAobG9zdCBpbnRlcnJ1cHQpLgogCSAqLwotICAgICAgICAvKgotICAgICAgICAgKiBTZWxlY3QgdGhlIGRyaXZlLCBhbmQgaXNzdWUgdGhlIFNFVEZFQVRVUkVTIGNvbW1hbmQKLSAgICAgICAgICovCi0JZGlzYWJsZV9pcnFfbm9zeW5jKGh3aWYtPmlycSk7Ci0JCisKIAkvKgogCSAqCUZJWE1FOiB3ZSByYWNlIGFnYWluc3QgdGhlIHJ1bm5pbmcgSVJRIGhlcmUgaWYKIAkgKgl0aGlzIGlzIGNhbGxlZCBmcm9tIG5vbiBJUlEgY29udGV4dC4gSWYgd2UgdXNlCiAJICoJZGlzYWJsZV9pcnEoKSB3ZSBoYW5nIG9uIHRoZSBlcnJvciBwYXRoLiBXb3JrCiAJICoJaXMgbmVlZGVkLgogCSAqLwotCSAKKwlkaXNhYmxlX2lycV9ub3N5bmMoaHdpZi0+aXJxKTsKKwogCXVkZWxheSgxKTsKIAlTRUxFQ1RfRFJJVkUoZHJpdmUpOwogCVNFTEVDVF9NQVNLKGRyaXZlLCAxKTsKQEAgLTgxMiw4ICs0MjQsOCBAQAogICoKICAqIFNlZSBhbHNvIGlkZV9leGVjdXRlX2NvbW1hbmQKICAqLwotc3RhdGljIHZvaWQgX19pZGVfc2V0X2hhbmRsZXIgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwKLQkJICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQordm9pZCBfX2lkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCkBAIC04MzUsOSArNDQ3LDggQEAKIAlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCwgZXhwaXJ5KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woaWRlX3NldF9oYW5kbGVyKTsKLSAKKwogLyoqCiAgKglpZGVfZXhlY3V0ZV9jb21tYW5kCS0JZXhlY3V0ZSBhbiBJREUgY29tbWFuZAogICoJQGRyaXZlOiBJREUgZHJpdmUgdG8gaXNzdWUgdGhlIGNvbW1hbmQgYWdhaW5zdApAQCAtODQ3LDcgKzQ1OCw3IEBACiAgKglAZXhwaXJ5OiAgaGFuZGxlciB0byBydW4gb24gdGltZW91dAogICoKICAqCUhlbHBlciBmdW5jdGlvbiB0byBpc3N1ZSBhbiBJREUgY29tbWFuZC4gVGhpcyBoYW5kbGVzIHRoZQotICoJYXRvbWljaXR5IHJlcXVpcmVtZW50cywgY29tbWFuZCB0aW1pbmcgYW5kIGVuc3VyZXMgdGhhdCB0aGUgCisgKglhdG9taWNpdHkgcmVxdWlyZW1lbnRzLCBjb21tYW5kIHRpbWluZyBhbmQgZW5zdXJlcyB0aGF0IHRoZQogICoJaGFuZGxlciBhbmQgSVJRIHNldHVwIGRvIG5vdCByYWNlLiBBbGwgSURFIGNvbW1hbmQga2ljayBvZmYKICAqCXNob3VsZCBnbyB2aWEgdGhpcyBmdW5jdGlvbiBvciBkbyBlcXVpdmFsZW50IGxvY2tpbmcuCiAgKi8KQEAgLTg4NCwzMDEgKzQ5NSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfZXhlY3V0ZV9wa3RfY21kKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnIpCi17Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwotCi0JaWYgKHJxICYmIGJsa19zcGVjaWFsX3JlcXVlc3QocnEpICYmIHJxLT5jbWRbMF0gPT0gUkVRX0RSSVZFX1JFU0VUKQotCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIGVyciA/IGVyciA6IDEsIDApOwotfQotCi0vKiBuZWVkZWQgYmVsb3cgKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgZG9fcmVzZXQxIChpZGVfZHJpdmVfdCAqLCBpbnQpOwotCi0vKgotICogYXRhcGlfcmVzZXRfcG9sbGZ1bmMoKSBnZXRzIGludm9rZWQgdG8gcG9sbCB0aGUgaW50ZXJmYWNlIGZvciBjb21wbGV0aW9uIGV2ZXJ5IDUwbXMKLSAqIGR1cmluZyBhbiBhdGFwaSBkcml2ZSByZXNldCBvcGVyYXRpb24uIElmIHRoZSBkcml2ZSBoYXMgbm90IHlldCByZXNwb25kZWQsCi0gKiBhbmQgd2UgaGF2ZSBub3QgeWV0IGhpdCBvdXIgbWF4aW11bSB3YWl0aW5nIHRpbWUsIHRoZW4gdGhlIHRpbWVyIGlzIHJlc3RhcnRlZAotICogZm9yIGFub3RoZXIgNTBtcy4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBhdGFwaV9yZXNldF9wb2xsZnVuYyAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQl1OCBzdGF0OwotCi0JU0VMRUNUX0RSSVZFKGRyaXZlKTsKLQl1ZGVsYXkgKDEwKTsKLQlzdGF0ID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmIChPS19TVEFUKHN0YXQsIDAsIEFUQV9CVVNZKSkKLQkJcHJpbnRrKCIlczogQVRBUEkgcmVzZXQgY29tcGxldGVcbiIsIGRyaXZlLT5uYW1lKTsKLQllbHNlIHsKLQkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGh3aWYtPnBvbGxfdGltZW91dCkpIHsKLQkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7Ci0JCQkvKiBjb250aW51ZSBwb2xsaW5nICovCi0JCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci0JCX0KLQkJLyogZW5kIG9mIHBvbGxpbmcgKi8KLQkJaHdpZi0+cG9sbGluZyA9IDA7Ci0JCXByaW50aygiJXM6IEFUQVBJIHJlc2V0IHRpbWVkLW91dCwgc3RhdHVzPTB4JTAyeFxuIiwKLQkJCQlkcml2ZS0+bmFtZSwgc3RhdCk7Ci0JCS8qIGRvIGl0IHRoZSBvbGQgZmFzaGlvbmVkIHdheSAqLwotCQlyZXR1cm4gZG9fcmVzZXQxKGRyaXZlLCAxKTsKLQl9Ci0JLyogZG9uZSBwb2xsaW5nICovCi0JaHdpZi0+cG9sbGluZyA9IDA7Ci0JaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCAwKTsKLQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlkZV9yZXNldF9yZXBvcnRfZXJyb3IoaWRlX2h3aWZfdCAqaHdpZiwgdTggZXJyKQotewotCXN0YXRpYyBjb25zdCBjaGFyICplcnJfbWFzdGVyX3ZhbHNbXSA9Ci0JCXsgTlVMTCwgInBhc3NlZCIsICJmb3JtYXR0ZXIgZGV2aWNlIGVycm9yIiwKLQkJICAic2VjdG9yIGJ1ZmZlciBlcnJvciIsICJFQ0MgY2lyY3VpdHJ5IGVycm9yIiwKLQkJICAiY29udHJvbGxpbmcgTVBVIGVycm9yIiB9OwotCi0JdTggZXJyX21hc3RlciA9IGVyciAmIDB4N2Y7Ci0KLQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXNldDogbWFzdGVyOiAiLCBod2lmLT5uYW1lKTsKLQlpZiAoZXJyX21hc3RlciAmJiBlcnJfbWFzdGVyIDwgNikKLQkJcHJpbnRrKEtFUk5fQ09OVCAiJXMiLCBlcnJfbWFzdGVyX3ZhbHNbZXJyX21hc3Rlcl0pOwotCWVsc2UKLQkJcHJpbnRrKEtFUk5fQ09OVCAiZXJyb3IgKDB4JTAyeD8pIiwgZXJyKTsKLQlpZiAoZXJyICYgMHg4MCkKLQkJcHJpbnRrKEtFUk5fQ09OVCAiOyBzbGF2ZTogZmFpbGVkIik7Ci0JcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLX0KLQotLyoKLSAqIHJlc2V0X3BvbGxmdW5jKCkgZ2V0cyBpbnZva2VkIHRvIHBvbGwgdGhlIGludGVyZmFjZSBmb3IgY29tcGxldGlvbiBldmVyeSA1MG1zCi0gKiBkdXJpbmcgYW4gaWRlIHJlc2V0IG9wZXJhdGlvbi4gSWYgdGhlIGRyaXZlcyBoYXZlIG5vdCB5ZXQgcmVzcG9uZGVkLAotICogYW5kIHdlIGhhdmUgbm90IHlldCBoaXQgb3VyIG1heGltdW0gd2FpdGluZyB0aW1lLCB0aGVuIHRoZSB0aW1lciBpcyByZXN0YXJ0ZWQKLSAqIGZvciBhbm90aGVyIDUwbXMuCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcmVzZXRfcG9sbGZ1bmMgKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQl1OCB0bXA7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnJlc2V0X3BvbGwpIHsKLQkJZXJyID0gcG9ydF9vcHMtPnJlc2V0X3BvbGwoZHJpdmUpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBob3N0IHJlc2V0X3BvbGwgZmFpbHVyZSBmb3IgJXMuXG4iLAotCQkJCWh3aWYtPm5hbWUsIGRyaXZlLT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JdG1wID0gaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLQotCWlmICghT0tfU1RBVCh0bXAsIDAsIEFUQV9CVVNZKSkgewotCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgewotCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKLQkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KLQkJCXJldHVybiBpZGVfc3RhcnRlZDsKLQkJfQotCQlwcmludGsoIiVzOiByZXNldCB0aW1lZC1vdXQsIHN0YXR1cz0weCUwMnhcbiIsIGh3aWYtPm5hbWUsIHRtcCk7Ci0JCWRyaXZlLT5mYWlsdXJlcysrOwotCQllcnIgPSAtRUlPOwotCX0gZWxzZSAgewotCQl0bXAgPSBpZGVfcmVhZF9lcnJvcihkcml2ZSk7Ci0KLQkJaWYgKHRtcCA9PSAxKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVzZXQ6IHN1Y2Nlc3NcbiIsIGh3aWYtPm5hbWUpOwotCQkJZHJpdmUtPmZhaWx1cmVzID0gMDsKLQkJfSBlbHNlIHsKLQkJCWlkZV9yZXNldF9yZXBvcnRfZXJyb3IoaHdpZiwgdG1wKTsKLQkJCWRyaXZlLT5mYWlsdXJlcysrOwotCQkJZXJyID0gLUVJTzsKLQkJfQotCX0KLW91dDoKLQlod2lmLT5wb2xsaW5nID0gMDsJLyogZG9uZSBwb2xsaW5nICovCi0JaWRlX2NvbXBsZXRlX2RyaXZlX3Jlc2V0KGRyaXZlLCBlcnIpOwotCXJldHVybiBpZGVfc3RvcHBlZDsKLX0KLQotc3RhdGljIHZvaWQgaWRlX2Rpc2tfcHJlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpbnQgbGVnYWN5ID0gKGRyaXZlLT5pZFtBVEFfSURfQ0ZTX0VOQUJMRV8yXSAmIDB4MDQwMCkgPyAwIDogMTsKLQotCWRyaXZlLT5zcGVjaWFsLmFsbCA9IDA7Ci0JZHJpdmUtPnNwZWNpYWwuYi5zZXRfZ2VvbWV0cnkgPSBsZWdhY3k7Ci0JZHJpdmUtPnNwZWNpYWwuYi5yZWNhbGlicmF0ZSAgPSBsZWdhY3k7Ci0KLQlkcml2ZS0+bXVsdF9jb3VudCA9IDA7Ci0JZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BBUktFRDsKLQotCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19LRUVQX1NFVFRJTkdTKSA9PSAwICYmCi0JICAgIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkKLQkJZHJpdmUtPm11bHRfcmVxID0gMDsKLQotCWlmIChkcml2ZS0+bXVsdF9yZXEgIT0gZHJpdmUtPm11bHRfY291bnQpCi0JCWRyaXZlLT5zcGVjaWFsLmIuc2V0X211bHRtb2RlID0gMTsKLX0KLQotc3RhdGljIHZvaWQgcHJlX3Jlc2V0KGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGRyaXZlLT5od2lmLT5wb3J0X29wczsKLQotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spCi0JCWlkZV9kaXNrX3ByZV9yZXNldChkcml2ZSk7Ci0JZWxzZQotCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QT1NUX1JFU0VUOwotCi0JaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSB7Ci0JCWlmIChkcml2ZS0+Y3JjX2NvdW50KQotCQkJaWRlX2NoZWNrX2RtYV9jcmMoZHJpdmUpOwotCQllbHNlCi0JCQlpZGVfZG1hX29mZihkcml2ZSk7Ci0JfQotCi0JaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0tFRVBfU0VUVElOR1MpID09IDApIHsKLQkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCkgewotCQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1VOTUFTSzsKLQkJCWRyaXZlLT5pb18zMmJpdCA9IDA7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+cHJlX3Jlc2V0KQotCQlwb3J0X29wcy0+cHJlX3Jlc2V0KGRyaXZlKTsKLQotCWlmIChkcml2ZS0+Y3VycmVudF9zcGVlZCAhPSAweGZmKQotCQlkcml2ZS0+ZGVzaXJlZF9zcGVlZCA9IGRyaXZlLT5jdXJyZW50X3NwZWVkOwotCWRyaXZlLT5jdXJyZW50X3NwZWVkID0gMHhmZjsKLX0KLQotLyoKLSAqIGRvX3Jlc2V0MSgpIGF0dGVtcHRzIHRvIHJlY292ZXIgYSBjb25mdXNlZCBkcml2ZSBieSByZXNldHRpbmcgaXQuCi0gKiBVbmZvcnR1bmF0ZWx5LCByZXNldHRpbmcgYSBkaXNrIGRyaXZlIGFjdHVhbGx5IHJlc2V0cyBhbGwgZGV2aWNlcyBvbgotICogdGhlIHNhbWUgaW50ZXJmYWNlLCBzbyBpdCBjYW4gcmVhbGx5IGJlIHRob3VnaHQgb2YgYXMgcmVzZXR0aW5nIHRoZQotICogaW50ZXJmYWNlIHJhdGhlciB0aGFuIHJlc2V0dGluZyB0aGUgZHJpdmUuCi0gKgotICogQVRBUEkgZGV2aWNlcyBoYXZlIHRoZWlyIG93biByZXNldCBtZWNoYW5pc20gd2hpY2ggYWxsb3dzIHRoZW0gdG8gYmUKLSAqIGluZGl2aWR1YWxseSByZXNldCB3aXRob3V0IGNsb2JiZXJpbmcgb3RoZXIgZGV2aWNlcyBvbiB0aGUgc2FtZSBpbnRlcmZhY2UuCi0gKgotICogVW5mb3J0dW5hdGVseSwgdGhlIElERSBpbnRlcmZhY2UgZG9lcyBub3QgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHRvIGxldAotICogdXMga25vdyB3aGVuIHRoZSByZXNldCBvcGVyYXRpb24gaGFzIGZpbmlzaGVkLCBzbyB3ZSBtdXN0IHBvbGwgZm9yIHRoaXMuCi0gKiBFcXVhbGx5IHBvb3IsIHRob3VnaCwgaXMgdGhlIGZhY3QgdGhhdCB0aGlzIG1heSBhIHZlcnkgbG9uZyB0aW1lIHRvIGNvbXBsZXRlLAotICogKHVwIHRvIDMwIHNlY29uZHMgd29yc3RjYXNlKS4gIFNvLCBpbnN0ZWFkIG9mIGJ1c3ktd2FpdGluZyBoZXJlIGZvciBpdCwKLSAqIHdlIHNldCBhIHRpbWVyIHRvIHBvbGwgYXQgNTBtcyBpbnRlcnZhbHMuCi0gKi8KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgZG9fcmVzZXQxIChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkb19ub3RfdHJ5X2F0YXBpKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQljb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyAqdHBfb3BzID0gaHdpZi0+dHBfb3BzOwotCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzOwotCWlkZV9kcml2ZV90ICp0ZHJpdmU7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgdGltZW91dDsKLQlpbnQgaTsKLQlERUZJTkVfV0FJVCh3YWl0KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0KLQkvKiBXZSBtdXN0IG5vdCByZXNldCB3aXRoIHJ1bm5pbmcgaGFuZGxlcnMgKi8KLQlCVUdfT04oaHdpZi0+aGFuZGxlciAhPSBOVUxMKTsKLQotCS8qIEZvciBhbiBBVEFQSSBkZXZpY2UsIGZpcnN0IHRyeSBhbiBBVEFQSSBTUlNULiAqLwotCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2sgJiYgIWRvX25vdF90cnlfYXRhcGkpIHsKLQkJcHJlX3Jlc2V0KGRyaXZlKTsKLQkJU0VMRUNUX0RSSVZFKGRyaXZlKTsKLQkJdWRlbGF5ICgyMCk7Ci0JCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfREVWX1JFU0VUKTsKLQkJbmRlbGF5KDQwMCk7Ci0JCWh3aWYtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKLQkJaHdpZi0+cG9sbGluZyA9IDE7Ci0JCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLCBOVUxMKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci0JfQotCi0JLyogV2UgbXVzdCBub3QgZGlzdHVyYiBkZXZpY2VzIGluIHRoZSBJREVfREZMQUdfUEFSS0VEIHN0YXRlLiAqLwotCWRvIHsKLQkJdW5zaWduZWQgbG9uZyBub3c7Ci0KLQkJcHJlcGFyZV90b193YWl0KCZpZGVfcGFya193cSwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJdGltZW91dCA9IGppZmZpZXM7Ci0JCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCB0ZHJpdmUsIGh3aWYpIHsKLQkJCWlmICh0ZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UICYmCi0JCQkgICAgdGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUEFSS0VEICYmCi0JCQkgICAgdGltZV9hZnRlcih0ZHJpdmUtPnNsZWVwLCB0aW1lb3V0KSkKLQkJCQl0aW1lb3V0ID0gdGRyaXZlLT5zbGVlcDsKLQkJfQotCi0JCW5vdyA9IGppZmZpZXM7Ci0JCWlmICh0aW1lX2JlZm9yZV9lcSh0aW1lb3V0LCBub3cpKQotCQkJYnJlYWs7Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCQl0aW1lb3V0ID0gc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUodGltZW91dCAtIG5vdyk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JfSB3aGlsZSAodGltZW91dCk7Ci0JZmluaXNoX3dhaXQoJmlkZV9wYXJrX3dxLCAmd2FpdCk7Ci0KLQkvKgotCSAqIEZpcnN0LCByZXNldCBhbnkgZGV2aWNlIHN0YXRlIGRhdGEgd2Ugd2VyZSBtYWludGFpbmluZwotCSAqIGZvciBhbnkgb2YgdGhlIGRyaXZlcyBvbiB0aGlzIGludGVyZmFjZS4KLQkgKi8KLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgdGRyaXZlLCBod2lmKQotCQlwcmVfcmVzZXQodGRyaXZlKTsKLQotCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIgPT0gMCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCWlkZV9jb21wbGV0ZV9kcml2ZV9yZXNldChkcml2ZSwgLUVOWElPKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCX0KLQotCS8qCi0JICogTm90ZSB0aGF0IHdlIGFsc28gc2V0IG5JRU4gd2hpbGUgcmVzZXR0aW5nIHRoZSBkZXZpY2UsCi0JICogdG8gbWFzayB1bndhbnRlZCBpbnRlcnJ1cHRzIGZyb20gdGhlIGludGVyZmFjZSBkdXJpbmcgdGhlIHJlc2V0LgotCSAqIEhvd2V2ZXIsIGR1ZSB0byB0aGUgZGVzaWduIG9mIFBDIGhhcmR3YXJlLCB0aGlzIHdpbGwgY2F1c2UgYW4KLQkgKiBpbW1lZGlhdGUgaW50ZXJydXB0IGR1ZSB0byB0aGUgZWRnZSB0cmFuc2l0aW9uIGl0IHByb2R1Y2VzLgotCSAqIFRoaXMgc2luZ2xlIGludGVycnVwdCBnaXZlcyB1cyBhICJmYXN0IHBvbGwiIGZvciBkcml2ZXMgdGhhdAotCSAqIHJlY292ZXIgZnJvbSByZXNldCB2ZXJ5IHF1aWNrbHksIHNhdmluZyB1cyB0aGUgZmlyc3QgNTBtcyB3YWl0IHRpbWUuCi0JICoKLQkgKiBUT0RPOiBhZGQgLT5zb2Z0cmVzZXQgbWV0aG9kIGFuZCBzdG9wIGFidXNpbmcgLT5zZXRfaXJxCi0JICovCi0JLyogc2V0IFNSU1QgYW5kIG5JRU4gKi8KLQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgNCk7Ci0JLyogbW9yZSB0aGFuIGVub3VnaCB0aW1lICovCi0JdWRlbGF5KDEwKTsKLQkvKiBjbGVhciBTUlNULCBsZWF2ZSBuSUVOICh1bmxlc3MgZGV2aWNlIGlzIG9uIHRoZSBxdWlyayBsaXN0KSAqLwotCXRwX29wcy0+c2V0X2lycShod2lmLCBkcml2ZS0+cXVpcmtfbGlzdCA9PSAyKTsKLQkvKiBtb3JlIHRoYW4gZW5vdWdoIHRpbWUgKi8KLQl1ZGVsYXkoMTApOwotCWh3aWYtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX1dPUlNUQ0FTRTsKLQlod2lmLT5wb2xsaW5nID0gMTsKLQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnJlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7Ci0KLQkvKgotCSAqIFNvbWUgd2VpcmQgY29udHJvbGxlciBsaWtlIHJlc2V0dGluZyB0aGVtc2VsdmVzIHRvIGEgc3RyYW5nZQotCSAqIHN0YXRlIHdoZW4gdGhlIGRpc2tzIGFyZSByZXNldCB0aGlzIHdheS4gQXQgbGVhc3QsIHRoZSBXaW5ib25kCi0JICogNTUzIGRvY3VtZW50YXRpb24gc2F5cyB0aGF0Ci0JICovCi0JcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnJlc2V0cHJvYykKLQkJcG9ydF9vcHMtPnJlc2V0cHJvYyhkcml2ZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIGlkZV9zdGFydGVkOwotfQotCi0vKgotICogaWRlX2RvX3Jlc2V0KCkgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHRoZSBkcml2ZS9pbnRlcmZhY2UgcmVzZXQgY29kZS4KLSAqLwotCi1pZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3Jlc2V0IChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JcmV0dXJuIGRvX3Jlc2V0MShkcml2ZSwgMCk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woaWRlX2RvX3Jlc2V0KTsKLQogLyoKICAqIGlkZV93YWl0X25vdF9idXN5KCkgd2FpdHMgZm9yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZGV2aWNlIG9uIHRoZSBod2lmCiAgKiB0byByZXBvcnQgYSBub24tYnVzeSBzdGF0dXMsIHNlZSBjb21tZW50cyBpbiBpZGVfcHJvYmVfcG9ydCgpLgpAQCAtMTE4Nyw3ICs1MDMsNyBAQAogewogCXU4IHN0YXQgPSAwOwogCi0Jd2hpbGUodGltZW91dC0tKSB7CisJd2hpbGUgKHRpbWVvdXQtLSkgewogCQkvKgogCQkgKiBUdXJuIHRoaXMgaW50byBhIHNjaGVkdWxlKCkgc2xlZXAgb25jZSBJJ20gc3VyZQogCQkgKiBhYm91dCBsb2NraW5nIGlzc3VlcyAoMi41IHdvcmsgPykuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKaW5kZXggMDk1MjZhMC4uZjZjNjgzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwpAQCAtNSwxNjMgKzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCi1zdGF0aWMgY29uc3QgY2hhciAqdWRtYV9zdHJbXSA9Ci0JIHsgIlVETUEvMTYiLCAiVURNQS8yNSIsICAiVURNQS8zMyIsICAiVURNQS80NCIsCi0JICAgIlVETUEvNjYiLCAiVURNQS8xMDAiLCAiVURNQS8xMzMiLCAiVURNQTciIH07Ci1zdGF0aWMgY29uc3QgY2hhciAqbXdkbWFfc3RyW10gPQotCXsgIk1XRE1BMCIsICJNV0RNQTEiLCAiTVdETUEyIiB9Owotc3RhdGljIGNvbnN0IGNoYXIgKnN3ZG1hX3N0cltdID0KLQl7ICJTV0RNQTAiLCAiU1dETUExIiwgIlNXRE1BMiIgfTsKLXN0YXRpYyBjb25zdCBjaGFyICpwaW9fc3RyW10gPQotCXsgIlBJTzAiLCAiUElPMSIsICJQSU8yIiwgIlBJTzMiLCAiUElPNCIsICJQSU81IiB9OwotCi0vKioKLSAqCWlkZV94ZmVyX3ZlcmJvc2UJLQlyZXR1cm4gSURFIG1vZGUgbmFtZXMKLSAqCUBtb2RlOiB0cmFuc2ZlciBtb2RlCi0gKgotICoJUmV0dXJucyBhIGNvbnN0YW50IHN0cmluZyBnaXZpbmcgdGhlIG5hbWUgb2YgdGhlIG1vZGUKLSAqCXJlcXVlc3RlZC4KLSAqLwotCi1jb25zdCBjaGFyICppZGVfeGZlcl92ZXJib3NlKHU4IG1vZGUpCi17Ci0JY29uc3QgY2hhciAqczsKLQl1OCBpID0gbW9kZSAmIDB4ZjsKLQotCWlmIChtb2RlID49IFhGRVJfVURNQV8wICYmIG1vZGUgPD0gWEZFUl9VRE1BXzcpCi0JCXMgPSB1ZG1hX3N0cltpXTsKLQllbHNlIGlmIChtb2RlID49IFhGRVJfTVdfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX01XX0RNQV8yKQotCQlzID0gbXdkbWFfc3RyW2ldOwotCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9TV19ETUFfMCAmJiBtb2RlIDw9IFhGRVJfU1dfRE1BXzIpCi0JCXMgPSBzd2RtYV9zdHJbaV07Ci0JZWxzZSBpZiAobW9kZSA+PSBYRkVSX1BJT18wICYmIG1vZGUgPD0gWEZFUl9QSU9fNSkKLQkJcyA9IHBpb19zdHJbaSAmIDB4N107Ci0JZWxzZSBpZiAobW9kZSA9PSBYRkVSX1BJT19TTE9XKQotCQlzID0gIlBJTyBTTE9XIjsKLQllbHNlCi0JCXMgPSAiWEZFUiBFUlJPUiI7Ci0KLQlyZXR1cm4gczsKLX0KLUVYUE9SVF9TWU1CT0woaWRlX3hmZXJfdmVyYm9zZSk7Ci0KLS8qKgotICoJaWRlX3JhdGVfZmlsdGVyCQktCWZpbHRlciB0cmFuc2ZlciBtb2RlCi0gKglAZHJpdmU6IElERSBkZXZpY2UKLSAqCUBzcGVlZDogZGVzaXJlZCBzcGVlZAotICoKLSAqCUdpdmVuIHRoZSBhdmFpbGFibGUgdHJhbnNmZXIgbW9kZXMgdGhpcyBmdW5jdGlvbiByZXR1cm5zCi0gKgl0aGUgYmVzdCBhdmFpbGFibGUgc3BlZWQgYXQgb3IgYmVsb3cgdGhlIHNwZWVkIHJlcXVlc3RlZC4KLSAqCi0gKglUT0RPOiBjaGVjayBkZXZpY2UgUElPIGNhcGFiaWxpdGllcwotICovCi0KLXN0YXRpYyB1OCBpZGVfcmF0ZV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzcGVlZCkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdTggbW9kZSA9IGlkZV9maW5kX2RtYV9tb2RlKGRyaXZlLCBzcGVlZCk7Ci0KLQlpZiAobW9kZSA9PSAwKSB7Ci0JCWlmIChod2lmLT5waW9fbWFzaykKLQkJCW1vZGUgPSBmbHMoaHdpZi0+cGlvX21hc2spIC0gMSArIFhGRVJfUElPXzA7Ci0JCWVsc2UKLQkJCW1vZGUgPSBYRkVSX1BJT180OwotCX0KLQotLyoJcHJpbnRrKCIlczogbW9kZSAweCUwMngsIHNwZWVkIDB4JTAyeFxuIiwgX19mdW5jX18sIG1vZGUsIHNwZWVkKTsgKi8KLQotCXJldHVybiBtaW4oc3BlZWQsIG1vZGUpOwotfQotCi0vKioKLSAqCWlkZV9nZXRfYmVzdF9waW9fbW9kZQktCWdldCBQSU8gbW9kZSBmcm9tIGRyaXZlCi0gKglAZHJpdmU6IGRyaXZlIHRvIGNvbnNpZGVyCi0gKglAbW9kZV93YW50ZWQ6IHByZWZlcnJlZCBtb2RlCi0gKglAbWF4X21vZGU6IGhpZ2hlc3QgYWxsb3dlZCBtb2RlCi0gKgotICoJVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIHJlY29tbWVuZGVkIFBJTyBzZXR0aW5ncyBmb3IgYSBnaXZlbiBkcml2ZSwKLSAqCWJhc2VkIG9uIHRoZSBkcml2ZS0+aWQgaW5mb3JtYXRpb24gYW5kIHRoZSBpZGVfcGlvX2JsYWNrbGlzdFtdLgotICoKLSAqCURyaXZlIFBJTyBtb2RlIGlzIGF1dG8tc2VsZWN0ZWQgaWYgMjU1IGlzIHBhc3NlZCBhcyBtb2RlX3dhbnRlZC4KLSAqCVRoaXMgaXMgdXNlZCBieSBtb3N0IGNoaXBzZXQgc3VwcG9ydCBtb2R1bGVzIHdoZW4gImF1dG8tdHVuaW5nIi4KLSAqLwotCi11OCBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBtb2RlX3dhbnRlZCwgdTggbWF4X21vZGUpCi17Ci0JdTE2ICppZCA9IGRyaXZlLT5pZDsKLQlpbnQgcGlvX21vZGUgPSAtMSwgb3ZlcnJpZGRlbiA9IDA7Ci0KLQlpZiAobW9kZV93YW50ZWQgIT0gMjU1KQotCQlyZXR1cm4gbWluX3QodTgsIG1vZGVfd2FudGVkLCBtYXhfbW9kZSk7Ci0KLQlpZiAoKGRyaXZlLT5od2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BJT19OT19CTEFDS0xJU1QpID09IDApCi0JCXBpb19tb2RlID0gaWRlX3NjYW5fcGlvX2JsYWNrbGlzdCgoY2hhciAqKSZpZFtBVEFfSURfUFJPRF0pOwotCi0JaWYgKHBpb19tb2RlICE9IC0xKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpcyBvbiBQSU8gYmxhY2tsaXN0XG4iLCBkcml2ZS0+bmFtZSk7Ci0JfSBlbHNlIHsKLQkJcGlvX21vZGUgPSBpZFtBVEFfSURfT0xEX1BJT19NT0RFU10gPj4gODsKLQkJaWYgKHBpb19tb2RlID4gMikgewkvKiAyIGlzIG1heGltdW0gYWxsb3dlZCB0UElPIHZhbHVlICovCi0JCQlwaW9fbW9kZSA9IDI7Ci0JCQlvdmVycmlkZGVuID0gMTsKLQkJfQotCi0JCWlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikgewkgICAgICAvKiBBVEEyPyAqLwotCQkJaWYgKGF0YV9pZF9oYXNfaW9yZHkoaWQpKSB7Ci0JCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNykgewotCQkJCQlvdmVycmlkZGVuID0gMDsKLQkJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNCkKLQkJCQkJCXBpb19tb2RlID0gNTsKLQkJCQkJZWxzZSBpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiAyKQotCQkJCQkJcGlvX21vZGUgPSA0OwotCQkJCQllbHNlCi0JCQkJCQlwaW9fbW9kZSA9IDM7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaWYgKG92ZXJyaWRkZW4pCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogdFBJTyA+IDIsIGFzc3VtaW5nIHRQSU8gPSAyXG4iLAotCQkJCQkgZHJpdmUtPm5hbWUpOwotCX0KLQotCWlmIChwaW9fbW9kZSA+IG1heF9tb2RlKQotCQlwaW9fbW9kZSA9IG1heF9tb2RlOwotCi0JcmV0dXJuIHBpb19tb2RlOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2dldF9iZXN0X3Bpb19tb2RlKTsKLQotLyogcmVxX3BpbyA9PSAiMjU1IiBmb3IgYXV0by10dW5lICovCi12b2lkIGlkZV9zZXRfcGlvKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmVxX3BpbykKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQl1OCBob3N0X3BpbywgcGlvOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMIHx8Ci0JICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKSkKLQkJcmV0dXJuOwotCi0JQlVHX09OKGh3aWYtPnBpb19tYXNrID09IDB4MDApOwotCi0JaG9zdF9waW8gPSBmbHMoaHdpZi0+cGlvX21hc2spIC0gMTsKLQotCXBpbyA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShkcml2ZSwgcmVxX3BpbywgaG9zdF9waW8pOwotCi0JLyoKLQkgKiBUT0RPOgotCSAqIC0gcmVwb3J0IGRldmljZSBtYXggUElPIG1vZGUKLQkgKiAtIGNoZWNrIHJlcV9waW8gIT0gMjU1IGFnYWluc3QgZGV2aWNlIG1heCBQSU8gbW9kZQotCSAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogaG9zdCBtYXggUElPJWQgd2FudGVkIFBJTyVkJXMgc2VsZWN0ZWQgUElPJWRcbiIsCi0JCQkgIGRyaXZlLT5uYW1lLCBob3N0X3BpbywgcmVxX3BpbywKLQkJCSAgcmVxX3BpbyA9PSAyNTUgPyAiKGF1dG8tdHVuZSkiIDogIiIsIHBpbyk7Ci0KLQkodm9pZClpZGVfc2V0X3Bpb19tb2RlKGRyaXZlLCBYRkVSX1BJT18wICsgcGlvKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfcGlvKTsKLQogLyoqCiAgKglpZGVfdG9nZ2xlX2JvdW5jZQktCWhhbmRsZSBib3VuY2UgYnVmZmVyaW5nCiAgKglAZHJpdmU6IGRyaXZlIHRvIHVwZGF0ZQpAQCAtMTg4LDg5ICszMSw2IEBACiAJCWJsa19xdWV1ZV9ib3VuY2VfbGltaXQoZHJpdmUtPnF1ZXVlLCBhZGRyKTsKIH0KIAotaW50IGlkZV9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpCi0JCXJldHVybiAwOwotCi0JaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQkvKgotCSAqIFRPRE86IHRlbXBvcmFyeSBoYWNrIGZvciBzb21lIGxlZ2FjeSBob3N0IGRyaXZlcnMgdGhhdCBkaWRuJ3QKLQkgKiBzZXQgdHJhbnNmZXIgbW9kZSBvbiB0aGUgZGV2aWNlIGluIC0+c2V0X3Bpb19tb2RlIG1ldGhvZC4uLgotCSAqLwotCWlmIChwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwpIHsKLQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7Ci0JCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKLQkJCXJldHVybiAtMTsKLQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7Ci0JCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKTsKLQl9Ci19Ci0KLWludCBpZGVfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggbW9kZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQotCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKQotCQlyZXR1cm4gMDsKLQotCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSkgewotCQlpZiAoaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSkpCi0JCQlyZXR1cm4gLTE7Ci0JCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQlwb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBtb2RlKTsKLQkJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfZG1hX21vZGUpOwotCi0vKioKLSAqCWlkZV9zZXRfeGZlcl9yYXRlCS0Jc2V0IHRyYW5zZmVyIHJhdGUKLSAqCUBkcml2ZTogZHJpdmUgdG8gc2V0Ci0gKglAcmF0ZTogc3BlZWQgdG8gYXR0ZW1wdCB0byBzZXQKLSAqCi0gKglHZW5lcmFsIGhlbHBlciBmb3Igc2V0dGluZyB0aGUgc3BlZWQgb2YgYW4gSURFIGRldmljZS4gVGhpcwotICoJZnVuY3Rpb24ga25vd3MgYWJvdXQgdXNlciBlbmZvcmNlZCBsaW1pdHMgZnJvbSB0aGUgY29uZmlndXJhdGlvbgotICoJd2hpY2ggLT5zZXRfcGlvX21vZGUvLT5zZXRfZG1hX21vZGUgZG9lcyBub3QuCi0gKi8KLQotaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQotCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCB8fAotCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCi0JCXJldHVybiAtMTsKLQotCXJhdGUgPSBpZGVfcmF0ZV9maWx0ZXIoZHJpdmUsIHJhdGUpOwotCi0JQlVHX09OKHJhdGUgPCBYRkVSX1BJT18wKTsKLQotCWlmIChyYXRlID49IFhGRVJfUElPXzAgJiYgcmF0ZSA8PSBYRkVSX1BJT181KQotCQlyZXR1cm4gaWRlX3NldF9waW9fbW9kZShkcml2ZSwgcmF0ZSk7Ci0KLQlyZXR1cm4gaWRlX3NldF9kbWFfbW9kZShkcml2ZSwgcmF0ZSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGlkZV9kdW1wX29wY29kZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBhcmsuYyBiL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKaW5kZXggYzg3NWE5NS4uZjMwZTUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXBhcmsuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogCkBAIC02MCw2ICs2MSwzMCBAQAogCXJldHVybjsKIH0KIAoraWRlX3N0YXJ0c3RvcF90IGlkZV9kb19wYXJrX3VucGFyayhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay50ZjsKKworCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwlpZiAocnEtPmNtZFswXSA9PSBSRVFfUEFSS19IRUFEUykgeworCQlkcml2ZS0+c2xlZXAgPSAqKHVuc2lnbmVkIGxvbmcgKilycS0+c3BlY2lhbDsKKwkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfU0xFRVBJTkc7CisJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9JRExFSU1NRURJQVRFOworCQl0Zi0+ZmVhdHVyZSA9IDB4NDQ7CisJCXRmLT5sYmFsID0gMHg0YzsKKwkJdGYtPmxiYW0gPSAweDRlOworCQl0Zi0+bGJhaCA9IDB4NTU7CisJCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSOworCX0gZWxzZQkJLyogY21kID09IFJFUV9VTlBBUktfSEVBRFMgKi8KKwkJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX0NIS19QT1dFUjsKKworCXRhc2sudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwl0YXNrLnJxID0gcnE7CisJZHJpdmUtPmh3aWYtPmRhdGFfcGhhc2UgPSB0YXNrLmRhdGFfcGhhc2UgPSBUQVNLRklMRV9OT19EQVRBOworCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgJnRhc2spOworfQorCiBzc2l6ZV90IGlkZV9wYXJrX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJICAgICAgY2hhciAqYnVmKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBjaS1nZW5lcmljLmMgYi9kcml2ZXJzL2lkZS9pZGUtcGNpLWdlbmVyaWMuYwppbmRleCBiZGRhZTJiLi42MTExMWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcGNpLWdlbmVyaWMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcGNpLWdlbmVyaWMuYwpAQCAtMzMsOCArMzMsNiBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGFsbF9nZW5lcmljX2lkZSwgaWRlX2dlbmVyaWNfYWxsLCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYWxsX2dlbmVyaWNfaWRlLCAiSURFIGdlbmVyaWMgd2lsbCBjbGFpbSBhbGwgdW5rbm93biBQQ0kgSURFIHN0b3JhZ2UgY29udHJvbGxlcnMuIik7CiAKLSNkZWZpbmUgSURFX0hGTEFHU19VTUMgKElERV9IRkxBR19OT19ETUEgfCBJREVfSEZMQUdfRk9SQ0VfTEVHQUNZX0lSUVMpCi0KICNkZWZpbmUgREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoZXh0cmFfZmxhZ3MpIFwKIAl7IFwKIAkJLm5hbWUJCT0gRFJWX05BTUUsIFwKQEAgLTYxLDcgKzU5LDcgQEAKIAkvKiAgMjogU0FNVVJBSSAvIEhUNjU2NSAvIEhJTlRfSURFICovCiAJREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoMCksCiAJLyogIDM6IFVNODY3M0YgLyBVTTg4ODZBIC8gVU04ODg2QkYgKi8KLQlERUNMQVJFX0dFTkVSSUNfUENJX0RFVihJREVfSEZMQUdTX1VNQyksCisJREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoSURFX0hGTEFHX05PX0RNQSksCiAJLyogIDQ6IFZJQV9JREUgLyBPUFRJNjIxViAvIFBpY2NvbG8wMTB7MiwzLDV9ICovCiAJREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoSURFX0hGTEFHX05PX0FVVE9ETUEpLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IGVlOGUzZTcuLjk3NDA2NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC0xODEsMTYgKzE4MSwxNiBAQAogICoJZG9faWRlbnRpZnkJLQlpZGVudGlmeSBhIGRyaXZlCiAgKglAZHJpdmU6IGRyaXZlIHRvIGlkZW50aWZ5IAogICoJQGNtZDogY29tbWFuZCB1c2VkCisgKglAaWQ6IGJ1ZmZlciBmb3IgSURFTlRJRlkgZGF0YQogICoKICAqCUNhbGxlZCB3aGVuIHdlIGhhdmUgaXNzdWVkIGEgZHJpdmUgaWRlbnRpZnkgY29tbWFuZCB0bwogICoJcmVhZCBhbmQgcGFyc2UgdGhlIHJlc3VsdHMuIFRoaXMgZnVuY3Rpb24gaXMgcnVuIHdpdGgKICAqCWludGVycnVwdHMgZGlzYWJsZWQuIAogICovCiAKLXN0YXRpYyB2b2lkIGRvX2lkZW50aWZ5KGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kKQorc3RhdGljIHZvaWQgZG9faWRlbnRpZnkoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQsIHUxNiAqaWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAJY2hhciAqbSA9IChjaGFyICopJmlkW0FUQV9JRF9QUk9EXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBic3dhcCA9IDE7CkBAIC0yMzMsMTYgKzIzMyw2IEBACiAJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUFJFU0VOVDsKIAlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfREVBRDsKIAotCS8qCi0JICogQ2hlY2sgZm9yIGFuIEFUQVBJIGRldmljZQotCSAqLwotCWlmIChjbWQgPT0gQVRBX0NNRF9JRF9BVEFQSSkKLQkJaWRlX2NsYXNzaWZ5X2F0YXBpX2Rldihkcml2ZSk7Ci0JZWxzZQotCS8qCi0JICogTm90IGFuIEFUQVBJIGRldmljZTogbG9va3MgbGlrZSBhICJyZWd1bGFyIiBoYXJkIGRpc2sKLQkgKi8KLQkJaWRlX2NsYXNzaWZ5X2F0YV9kZXYoZHJpdmUpOwogCXJldHVybjsKIGVycl9taXNjOgogCWtmcmVlKGlkKTsKQEAgLTI1MCwyMSArMjQwLDE5IEBACiB9CiAKIC8qKgotICoJYWN0dWFsX3RyeV90b19pZGVudGlmeQktCXNlbmQgYXRhL2F0YXBpIGlkZW50aWZ5CisgKglpZGVfZGV2X3JlYWRfaWQJLQlzZW5kIEFUQS9BVEFQSSBJREVOVElGWSBjb21tYW5kCiAgKglAZHJpdmU6IGRyaXZlIHRvIGlkZW50aWZ5CiAgKglAY21kOiBjb21tYW5kIHRvIHVzZQorICoJQGlkOiBidWZmZXIgZm9yIElERU5USUZZIGRhdGEKICAqCi0gKgl0cnlfdG9faWRlbnRpZnkoKSBzZW5kcyBhbiBBVEEoUEkpIElERU5USUZZIHJlcXVlc3QgdG8gYSBkcml2ZQotICoJYW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlLiAgSXQgYWxzbyBtb25pdG9ycyBpcnFzIHdoaWxlIHRoaXMgaXMKLSAqCWhhcHBlbmluZywgaW4gaG9wZSBvZiBhdXRvbWF0aWNhbGx5IGRldGVybWluaW5nIHdoaWNoIG9uZSBpcwotICoJYmVpbmcgdXNlZCBieSB0aGUgaW50ZXJmYWNlLgorICoJU2VuZHMgYW4gQVRBKFBJKSBJREVOVElGWSByZXF1ZXN0IHRvIGEgZHJpdmUgYW5kIHdhaXRzIGZvciBhIHJlc3BvbnNlLgogICoKICAqCVJldHVybnM6CTAgIGRldmljZSB3YXMgaWRlbnRpZmllZAogICoJCQkxICBkZXZpY2UgdGltZWQtb3V0IChubyByZXNwb25zZSB0byBpZGVudGlmeSByZXF1ZXN0KQogICoJCQkyICBkZXZpY2UgYWJvcnRlZCB0aGUgY29tbWFuZCAocmVmdXNlZCB0byBpZGVudGlmeSBpdHNlbGYpCiAgKi8KIAotc3RhdGljIGludCBhY3R1YWxfdHJ5X3RvX2lkZW50aWZ5IChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCkKK2ludCBpZGVfZGV2X3JlYWRfaWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQsIHUxNiAqaWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwpAQCAtMjczLDYgKzI2MSwxMyBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAl1OCBzID0gMCwgYSA9IDA7CiAKKwkvKgorCSAqIERpc2FibGUgZGV2aWNlIElSUS4gIE90aGVyd2lzZSB3ZSdsbCBnZXQgc3B1cmlvdXMgaW50ZXJydXB0cworCSAqIGR1cmluZyB0aGUgaWRlbnRpZnkgcGhhc2UgdGhhdCB0aGUgSVJRIGhhbmRsZXIgaXNuJ3QgZXhwZWN0aW5nLgorCSAqLworCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIpCisJCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKKwogCS8qIHRha2UgYSBkZWVwIGJyZWF0aCAqLwogCW1zbGVlcCg1MCk7CiAKQEAgLTMxNyw3ICszMTIsNyBAQAogCiAJaWYgKE9LX1NUQVQocywgQVRBX0RSUSwgQkFEX1JfU1RBVCkpIHsKIAkJLyogZHJpdmUgcmV0dXJuZWQgSUQgKi8KLQkJZG9faWRlbnRpZnkoZHJpdmUsIGNtZCk7CisJCWRvX2lkZW50aWZ5KGRyaXZlLCBjbWQsIGlkKTsKIAkJLyogZHJpdmUgcmVzcG9uZGVkIHdpdGggSUQgKi8KIAkJcmMgPSAwOwogCQkvKiBjbGVhciBkcml2ZSBJUlEgKi8KQEAgLTMyOSw2MyArMzI0LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qKgotICoJdHJ5X3RvX2lkZW50aWZ5CS0JdHJ5IHRvIGlkZW50aWZ5IGEgZHJpdmUKLSAqCUBkcml2ZTogZHJpdmUgdG8gcHJvYmUKLSAqCUBjbWQ6IGNvbW1hbmQgdG8gdXNlCi0gKgotICoJSXNzdWUgdGhlIGlkZW50aWZ5IGNvbW1hbmQgYW5kIHRoZW4gZG8gSVJRIHByb2JpbmcgdG8KLSAqCWNvbXBsZXRlIHRoZSBpZGVudGlmaWNhdGlvbiB3aGVuIG5lZWRlZCBieSBmaW5kaW5nIHRoZQotICoJSVJRIHRoZSBkcml2ZSBpcyBhdHRhY2hlZCB0bwotICovCi0gCi1zdGF0aWMgaW50IHRyeV90b19pZGVudGlmeSAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjbWQpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7Ci0JaW50IHJldHZhbDsKLQlpbnQgYXV0b3Byb2JlID0gMDsKLQl1bnNpZ25lZCBsb25nIGNvb2tpZSA9IDA7Ci0KLQkvKgotCSAqIERpc2FibGUgZGV2aWNlIGlycSB1bmxlc3Mgd2UgbmVlZCB0bwotCSAqIHByb2JlIGZvciBpdC4gT3RoZXJ3aXNlIHdlJ2xsIGdldCBzcHVyaW91cwotCSAqIGludGVycnVwdHMgZHVyaW5nIHRoZSBpZGVudGlmeS1waGFzZSB0aGF0Ci0JICogdGhlIGlycSBoYW5kbGVyIGlzbid0IGV4cGVjdGluZy4KLQkgKi8KLQlpZiAoaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHIpIHsKLQkJaWYgKCFod2lmLT5pcnEpIHsKLQkJCWF1dG9wcm9iZSA9IDE7Ci0JCQljb29raWUgPSBwcm9iZV9pcnFfb24oKTsKLQkJfQotCQl0cF9vcHMtPnNldF9pcnEoaHdpZiwgYXV0b3Byb2JlKTsKLQl9Ci0KLQlyZXR2YWwgPSBhY3R1YWxfdHJ5X3RvX2lkZW50aWZ5KGRyaXZlLCBjbWQpOwotCi0JaWYgKGF1dG9wcm9iZSkgewotCQlpbnQgaXJxOwotCi0JCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKLQkJLyogY2xlYXIgZHJpdmUgSVJRICovCi0JCSh2b2lkKXRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7Ci0JCXVkZWxheSg1KTsKLQkJaXJxID0gcHJvYmVfaXJxX29mZihjb29raWUpOwotCQlpZiAoIWh3aWYtPmlycSkgewotCQkJaWYgKGlycSA+IDApIHsKLQkJCQlod2lmLT5pcnEgPSBpcnE7Ci0JCQl9IGVsc2UgewotCQkJCS8qIE1tbW0uLiBtdWx0aXBsZSBJUlFzLi4KLQkJCQkgKiBkb24ndCBrbm93IHdoaWNoIHdhcyBvdXJzCi0JCQkJICovCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSVJRIHByb2JlIGZhaWxlZCAoMHglbHgpXG4iLAotCQkJCQlkcml2ZS0+bmFtZSwgY29va2llKTsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gcmV0dmFsOwotfQotCiBpbnQgaWRlX2J1c3lfc2xlZXAoaWRlX2h3aWZfdCAqaHdpZiwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBpbnQgYWx0c3RhdHVzKQogewogCXU4IHN0YXQ7CkBAIC00NDAsNiArMzc4LDcgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgKnRwX29wcyA9IGh3aWYtPnRwX29wczsKKwl1MTYgKmlkID0gZHJpdmUtPmlkOwogCWludCByYzsKIAl1OCBwcmVzZW50ID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSwgc3RhdDsKIApAQCAtNDc1LDExICs0MTQsMTAgQEAKIAogCWlmIChPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBBVEFfQlVTWSkgfHwKIAkgICAgcHJlc2VudCB8fCBjbWQgPT0gQVRBX0NNRF9JRF9BVEFQSSkgewotCQkvKiBzZW5kIGNtZCBhbmQgd2FpdCAqLwotCQlpZiAoKHJjID0gdHJ5X3RvX2lkZW50aWZ5KGRyaXZlLCBjbWQpKSkgeworCQlyYyA9IGlkZV9kZXZfcmVhZF9pZChkcml2ZSwgY21kLCBpZCk7CisJCWlmIChyYykKIAkJCS8qIGZhaWxlZDogdHJ5IGFnYWluICovCi0JCQlyYyA9IHRyeV90b19pZGVudGlmeShkcml2ZSxjbWQpOwotCQl9CisJCQlyYyA9IGlkZV9kZXZfcmVhZF9pZChkcml2ZSwgY21kLCBpZCk7CiAKIAkJc3RhdCA9IHRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZik7CiAKQEAgLTQ5NCw3ICs0MzIsNyBAQAogCQkJbXNsZWVwKDUwKTsKIAkJCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIEFUQV9DTURfREVWX1JFU0VUKTsKIAkJCSh2b2lkKWlkZV9idXN5X3NsZWVwKGh3aWYsIFdBSVRfV09SU1RDQVNFLCAwKTsKLQkJCXJjID0gdHJ5X3RvX2lkZW50aWZ5KGRyaXZlLCBjbWQpOworCQkJcmMgPSBpZGVfZGV2X3JlYWRfaWQoZHJpdmUsIGNtZCwgaWQpOwogCQl9CiAKIAkJLyogZW5zdXJlIGRyaXZlIElSUSBpcyBjbGVhciAqLwpAQCAtNTE3LDM3ICs0NTUsNiBAQAogCXJldHVybiByYzsKIH0KIAotLyoKLSAqCi0gKi8KLXN0YXRpYyB2b2lkIGVuYWJsZV9uZXN0IChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7Ci0JdTggc3RhdDsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBlbmFibGluZyAlcyAtLSAiLAotCQlod2lmLT5uYW1lLCAoY2hhciAqKSZkcml2ZS0+aWRbQVRBX0lEX1BST0RdKTsKLQotCVNFTEVDVF9EUklWRShkcml2ZSk7Ci0JbXNsZWVwKDUwKTsKLQl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfRVhBQllURV9FTkFCTEVfTkVTVCk7Ci0KLQlpZiAoaWRlX2J1c3lfc2xlZXAoaHdpZiwgV0FJVF9XT1JTVENBU0UsIDApKSB7Ci0JCXByaW50ayhLRVJOX0NPTlQgImZhaWxlZCAodGltZW91dClcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbXNsZWVwKDUwKTsKLQotCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKCFPS19TVEFUKHN0YXQsIDAsIEJBRF9TVEFUKSkKLQkJcHJpbnRrKEtFUk5fQ09OVCAiZmFpbGVkIChzdGF0dXMgPSAweCUwMngpXG4iLCBzdGF0KTsKLQllbHNlCi0JCXByaW50ayhLRVJOX0NPTlQgInN1Y2Nlc3NcbiIpOwotfQotCiAvKioKICAqCXByb2JlX2Zvcl9kcml2ZXMJLQl1cHBlciBsZXZlbCBkcml2ZSBwcm9iZQogICoJQGRyaXZlOiBkcml2ZSB0byBwcm9iZSBmb3IKQEAgLTU2Myw2ICs0NzAsOCBAQAogc3RhdGljIHU4IHByb2JlX2Zvcl9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJY2hhciAqbTsKKwlpbnQgcmM7CisJdTggY21kOwogCiAJLyoKIAkgKglJbiBvcmRlciB0byBrZWVwIHRoaW5ncyBzaW1wbGUgd2UgaGF2ZSBhbiBpZApAQCAtNTg2LDIxICs0OTUsMTkgQEAKIAogCS8qIHNraXAgcHJvYmluZz8gKi8KIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9QUk9CRSkgPT0gMCkgewotcmV0cnk6CiAJCS8qIGlmICEoc3VjY2Vzc3x8dGltZWQtb3V0KSAqLwotCQlpZiAoZG9fcHJvYmUoZHJpdmUsIEFUQV9DTURfSURfQVRBKSA+PSAyKQorCQljbWQgPSBBVEFfQ01EX0lEX0FUQTsKKwkJcmMgPSBkb19wcm9iZShkcml2ZSwgY21kKTsKKwkJaWYgKHJjID49IDIpIHsKIAkJCS8qIGxvb2sgZm9yIEFUQVBJIGRldmljZSAqLwotCQkJKHZvaWQpZG9fcHJvYmUoZHJpdmUsIEFUQV9DTURfSURfQVRBUEkpOworCQkJY21kID0gQVRBX0NNRF9JRF9BVEFQSTsKKwkJCXJjID0gZG9fcHJvYmUoZHJpdmUsIGNtZCk7CisJCX0KIAogCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKIAkJCS8qIGRyaXZlIG5vdCBmb3VuZCAqLwogCQkJcmV0dXJuIDA7CiAKLQkJaWYgKHN0cnN0cihtLCAiRSBYIEEgQiBZIFQgRSBOIEUgUyBUIikpIHsKLQkJCWVuYWJsZV9uZXN0KGRyaXZlKTsKLQkJCWdvdG8gcmV0cnk7Ci0JCX0KLQogCQkvKiBpZGVudGlmaWNhdGlvbiBmYWlsZWQ/ICovCiAJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19JRF9SRUFEKSA9PSAwKSB7CiAJCQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKSB7CkBAIC02MTQsOCArNTIxLDEyIEBACiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVua25vd24gZGV2aWNlIG9uIGJ1cyByZWZ1c2VkIGlkZW50aWZpY2F0aW9uLiBJZ25vcmluZy5cbiIsIGRyaXZlLT5uYW1lKTsKIAkJCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUFJFU0VOVDsKIAkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjbWQgPT0gQVRBX0NNRF9JRF9BVEFQSSkKKwkJCQlpZGVfY2xhc3NpZnlfYXRhcGlfZGV2KGRyaXZlKTsKKwkJCWVsc2UKKwkJCQlpZGVfY2xhc3NpZnlfYXRhX2Rldihkcml2ZSk7CiAJCX0KLQkJLyogZHJpdmUgd2FzIGZvdW5kICovCiAJfQogCiAJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCkBAIC03NzksNyArNjkwLDYgQEAKIHN0YXRpYyBpbnQgaWRlX3Byb2JlX3BvcnQoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlpZGVfZHJpdmVfdCAqZHJpdmU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaXJxZDsKIAlpbnQgaSwgcmMgPSAtRU5PREVWOwogCkBAIC03OTcsOSArNzA3LDYgQEAKIAlpZiAoaXJxZCkKIAkJZGlzYWJsZV9pcnEoaHdpZi0+aXJxKTsKIAotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwotCWxvY2FsX2lycV9lbmFibGVfaW5faGFyZGlycSgpOwotCiAJaWYgKGlkZV9wb3J0X3dhaXRfcmVhZHkoaHdpZikgPT0gLUVCVVNZKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdhaXQgZm9yIHJlYWR5IGZhaWxlZCBiZWZvcmUgcHJvYmUgIVxuIiwgaHdpZi0+bmFtZSk7CiAKQEAgLTgxMyw4ICs3MjAsNiBAQAogCQkJcmMgPSAwOwogCX0KIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQogCS8qCiAJICogVXNlIGNhY2hlZCBJUlEgbnVtYmVyLiBJdCBtaWdodCBiZSAoYW5kIGlzLi4uKSBjaGFuZ2VkIGJ5IHByb2JlCiAJICogY29kZSBhYm92ZQpAQCAtODMxLDI5ICs3MzYsMTggQEAKIAlpZGVfZHJpdmVfdCAqZHJpdmU7CiAJaW50IGk7CiAKLQlpZGVfcG9ydF9mb3JfZWFjaF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKLQkJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgewotCQkJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5xdWlya3Byb2MpCi0JCQkJcG9ydF9vcHMtPnF1aXJrcHJvYyhkcml2ZSk7Ci0JCX0KKwlpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkcml2ZSwgaHdpZikgeworCQlpZiAocG9ydF9vcHMgJiYgcG9ydF9vcHMtPnF1aXJrcHJvYykKKwkJCXBvcnRfb3BzLT5xdWlya3Byb2MoZHJpdmUpOwogCX0KIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSB7Ci0JCQlpZGVfc2V0X21heF9waW8oZHJpdmUpOworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWlkZV9zZXRfbWF4X3Bpbyhkcml2ZSk7CiAKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05JQ0UxOworCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19OSUNFMTsKIAotCQkJaWYgKGh3aWYtPmRtYV9vcHMpCi0JCQkJaWRlX3NldF9kbWEoZHJpdmUpOwotCQl9Ci0JfQotCi0JaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0lPXzMyQklUKQotCQkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfTk9fSU9fMzJCSVQ7Ci0JCWVsc2UKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19OT19JT18zMkJJVDsKKwkJaWYgKGh3aWYtPmRtYV9vcHMpCisJCQlpZGVfc2V0X2RtYShkcml2ZSk7CiAJfQogfQogCkBAIC05MjQsMTAgKzgxOCw3IEBACiAJaW50IGksIGogPSAwOwogCiAJbXV0ZXhfbG9jaygmaWRlX2NmZ19tdHgpOwotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCisJaWRlX3BvcnRfZm9yX2VhY2hfcHJlc2VudF9kZXYoaSwgZHJpdmUsIGh3aWYpIHsKIAkJaWYgKGlkZV9pbml0X3F1ZXVlKGRyaXZlKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJpZGU6IGZhaWxlZCB0byBpbml0ICVzXG4iLAogCQkJCQlkcml2ZS0+bmFtZSk7CkBAIC05NTMsMTMgKzg0NCw2IEBACiAJaXJxX2hhbmRsZXJfdCBpcnFfaGFuZGxlcjsKIAlpbnQgc2EgPSAwOwogCi0JbXV0ZXhfbG9jaygmaWRlX2NmZ19tdHgpOwotCXNwaW5fbG9ja19pbml0KCZod2lmLT5sb2NrKTsKLQotCWluaXRfdGltZXIoJmh3aWYtPnRpbWVyKTsKLQlod2lmLT50aW1lci5mdW5jdGlvbiA9ICZpZGVfdGltZXJfZXhwaXJ5OwotCWh3aWYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylod2lmOwotCiAJaXJxX2hhbmRsZXIgPSBod2lmLT5ob3N0LT5pcnFfaGFuZGxlcjsKIAlpZiAoaXJxX2hhbmRsZXIgPT0gTlVMTCkKIAkJaXJxX2hhbmRsZXIgPSBpZGVfaW50cjsKQEAgLTk5NywxMCArODgxLDggQEAKIAkJcHJpbnRrKEtFUk5fQ09OVCAiIChzZXJpYWxpemVkKSIpOwogCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAKLQltdXRleF91bmxvY2soJmlkZV9jZmdfbXR4KTsKIAlyZXR1cm4gMDsKIG91dF91cDoKLQltdXRleF91bmxvY2soJmlkZV9jZmdfbXR4KTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTA5OSwxNCArOTgxLDkgQEAKIAogc3RhdGljIGludCBod2lmX2luaXQoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlpbnQgb2xkX2lycTsKLQogCWlmICghaHdpZi0+aXJxKSB7Ci0JCWh3aWYtPmlycSA9IF9faWRlX2RlZmF1bHRfaXJxKGh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcik7Ci0JCWlmICghaHdpZi0+aXJxKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkaXNhYmxlZCwgbm8gSVJRXG4iLCBod2lmLT5uYW1lKTsKLQkJCXJldHVybiAwOwotCQl9CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGRpc2FibGVkLCBubyBJUlFcbiIsIGh3aWYtPm5hbWUpOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAocmVnaXN0ZXJfYmxrZGV2KGh3aWYtPm1ham9yLCBod2lmLT5uYW1lKSkKQEAgLTExMjQsMjkgKzEwMDEsMTIgQEAKIAogCXNnX2luaXRfdGFibGUoaHdpZi0+c2dfdGFibGUsIGh3aWYtPnNnX21heF9uZW50cyk7CiAJCi0JaWYgKGluaXRfaXJxKGh3aWYpID09IDApCi0JCWdvdG8gZG9uZTsKLQotCW9sZF9pcnEgPSBod2lmLT5pcnE7Ci0JLyoKLQkgKglJdCBmYWlsZWQgdG8gaW5pdGlhbGlzZS4gRmluZCB0aGUgZGVmYXVsdCBJUlEgZm9yIAotCSAqCXRoaXMgcG9ydCBhbmQgdHJ5IHRoYXQuCi0JICovCi0JaHdpZi0+aXJxID0gX19pZGVfZGVmYXVsdF9pcnEoaHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyKTsKLQlpZiAoIWh3aWYtPmlycSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkaXNhYmxlZCwgdW5hYmxlIHRvIGdldCBJUlEgJWRcbiIsCi0JCQlod2lmLT5uYW1lLCBvbGRfaXJxKTsKLQkJZ290byBvdXQ7Ci0JfQogCWlmIChpbml0X2lycShod2lmKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwcm9iZWQgSVJRICVkIGFuZCBkZWZhdWx0IElSUSAlZCBmYWlsZWRcbiIsCi0JCQlod2lmLT5uYW1lLCBvbGRfaXJxLCBod2lmLT5pcnEpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBkaXNhYmxlZCwgdW5hYmxlIHRvIGdldCBJUlEgJWRcbiIsCisJCQlod2lmLT5uYW1lLCBod2lmLT5pcnEpOwogCQlnb3RvIG91dDsKIAl9Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHByb2JlZCBJUlEgJWQgZmFpbGVkLCB1c2luZyBkZWZhdWx0XG4iLAotCQlod2lmLT5uYW1lLCBod2lmLT5pcnEpOwogCi1kb25lOgogCWJsa19yZWdpc3Rlcl9yZWdpb24oTUtERVYoaHdpZi0+bWFqb3IsIDApLCBNQVhfRFJJVkVTIDw8IFBBUlROX0JJVFMsCiAJCQkgICAgVEhJU19NT0RVTEUsIGF0YV9wcm9iZSwgYXRhX2xvY2ssIGh3aWYpOwogCXJldHVybiAxOwpAQCAtMTE2MSwxMyArMTAyMSwxMCBAQAogCWlkZV9kcml2ZV90ICpkcml2ZTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgeworCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkcml2ZS0+Z2VuZGV2OwogCQlpbnQgcmV0OwogCi0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQkJY29udGludWU7Ci0KIAkJZGV2X3NldF9uYW1lKGRldiwgIiV1LiV1IiwgaHdpZi0+aW5kZXgsIGkpOwogCQlkZXYtPnBhcmVudCA9ICZod2lmLT5nZW5kZXY7CiAJCWRldi0+YnVzID0gJmlkZV9idXNfdHlwZTsKQEAgLTExOTIsNiArMTA0OSw4IEBACiAKIAkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfSU9fMzJCSVQpCiAJCQlkcml2ZS0+aW9fMzJiaXQgPSAxOworCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19JT18zMkJJVCkKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX0lPXzMyQklUOwogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19VTk1BU0tfSVJRUykKIAkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VOTUFTSzsKIAkJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fVU5NQVNLX0lSUVMpCkBAIC0xMjEzLDEwICsxMDcyLDYgQEAKIAlpZiAoZC0+aW5pdF9pb3BzKQogCQlkLT5pbml0X2lvcHMoaHdpZik7CiAKLQlpZiAoKCFod2lmLT5pcnEgJiYgKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTEVHQUNZX0lSUVMpKSB8fAotCSAgICAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUykpCi0JCWh3aWYtPmlycSA9IHBvcnQgPyAxNSA6IDE0OwotCiAJLyogLT5ob3N0X2ZsYWdzIG1heSBiZSBzZXQgYnkgLT5pbml0X2lvcHMgKG9yIGV2ZW4gZWFybGllci4uLikgKi8KIAlod2lmLT5ob3N0X2ZsYWdzIHw9IGQtPmhvc3RfZmxhZ3M7CiAJaHdpZi0+cGlvX21hc2sgPSBkLT5waW9fbWFzazsKQEAgLTEzMTcsNiArMTE3MiwxMiBAQAogCWh3aWYtPm5hbWVbMl0JPSAnZSc7CiAJaHdpZi0+bmFtZVszXQk9ICcwJyArIGluZGV4OwogCisJc3Bpbl9sb2NrX2luaXQoJmh3aWYtPmxvY2spOworCisJaW5pdF90aW1lcigmaHdpZi0+dGltZXIpOworCWh3aWYtPnRpbWVyLmZ1bmN0aW9uID0gJmlkZV90aW1lcl9leHBpcnk7CisJaHdpZi0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWh3aWY7CisKIAlpbml0X2NvbXBsZXRpb24oJmh3aWYtPmdlbmRldl9yZWxfY29tcCk7CiAKIAlod2lmLT50cF9vcHMgPSAmZGVmYXVsdF90cF9vcHM7CkBAIC0xNTY3LDcgKzE0MjgsNyBAQAogCiAJCWorKzsKIAotCQlpZGVfYWNwaV9pbml0KGh3aWYpOworCQlpZGVfYWNwaV9pbml0X3BvcnQoaHdpZik7CiAKIAkJaWYgKGh3aWYtPnByZXNlbnQpCiAJCQlpZGVfYWNwaV9wb3J0X2luaXRfZGV2aWNlcyhod2lmKTsKQEAgLTE2MjQsMTEgKzE0ODUsOSBAQAogCWlkZV9kcml2ZV90ICpkcml2ZTsKIAlpbnQgaTsKIAotCWlkZV9wb3J0X2Zvcl9lYWNoX2RldihpLCBkcml2ZSwgaHdpZikgewotCQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSB7Ci0JCQlkZXZpY2VfdW5yZWdpc3RlcigmZHJpdmUtPmdlbmRldik7Ci0JCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkcml2ZS0+Z2VuZGV2X3JlbF9jb21wKTsKLQkJfQorCWlkZV9wb3J0X2Zvcl9lYWNoX3ByZXNlbnRfZGV2KGksIGRyaXZlLCBod2lmKSB7CisJCWRldmljZV91bnJlZ2lzdGVyKCZkcml2ZS0+Z2VuZGV2KTsKKwkJd2FpdF9mb3JfY29tcGxldGlvbigmZHJpdmUtPmdlbmRldl9yZWxfY29tcCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwppbmRleCBhN2I5Mjg3Li40MTdjZGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKQEAgLTYwMCw3ICs2MDAsNyBAQAogCWludCBpOwogCiAJaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRyaXZlLCBod2lmKSB7Ci0JCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwIHx8IGRyaXZlLT5wcm9jKQorCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCiAJCWRyaXZlLT5wcm9jID0gcHJvY19ta2Rpcihkcml2ZS0+bmFtZSwgcGFyZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS14ZmVyLW1vZGUuYyBiL2RyaXZlcnMvaWRlL2lkZS14ZmVyLW1vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTEwZjZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jCkBAIC0wLDAgKzEsMjQ2IEBACisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgKnVkbWFfc3RyW10gPQorCSB7ICJVRE1BLzE2IiwgIlVETUEvMjUiLCAgIlVETUEvMzMiLCAgIlVETUEvNDQiLAorCSAgICJVRE1BLzY2IiwgIlVETUEvMTAwIiwgIlVETUEvMTMzIiwgIlVETUE3IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKm13ZG1hX3N0cltdID0KKwl7ICJNV0RNQTAiLCAiTVdETUExIiwgIk1XRE1BMiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICpzd2RtYV9zdHJbXSA9CisJeyAiU1dETUEwIiwgIlNXRE1BMSIsICJTV0RNQTIiIH07CitzdGF0aWMgY29uc3QgY2hhciAqcGlvX3N0cltdID0KKwl7ICJQSU8wIiwgIlBJTzEiLCAiUElPMiIsICJQSU8zIiwgIlBJTzQiLCAiUElPNSIgfTsKKworLyoqCisgKglpZGVfeGZlcl92ZXJib3NlCS0JcmV0dXJuIElERSBtb2RlIG5hbWVzCisgKglAbW9kZTogdHJhbnNmZXIgbW9kZQorICoKKyAqCVJldHVybnMgYSBjb25zdGFudCBzdHJpbmcgZ2l2aW5nIHRoZSBuYW1lIG9mIHRoZSBtb2RlCisgKglyZXF1ZXN0ZWQuCisgKi8KKworY29uc3QgY2hhciAqaWRlX3hmZXJfdmVyYm9zZSh1OCBtb2RlKQoreworCWNvbnN0IGNoYXIgKnM7CisJdTggaSA9IG1vZGUgJiAweGY7CisKKwlpZiAobW9kZSA+PSBYRkVSX1VETUFfMCAmJiBtb2RlIDw9IFhGRVJfVURNQV83KQorCQlzID0gdWRtYV9zdHJbaV07CisJZWxzZSBpZiAobW9kZSA+PSBYRkVSX01XX0RNQV8wICYmIG1vZGUgPD0gWEZFUl9NV19ETUFfMikKKwkJcyA9IG13ZG1hX3N0cltpXTsKKwllbHNlIGlmIChtb2RlID49IFhGRVJfU1dfRE1BXzAgJiYgbW9kZSA8PSBYRkVSX1NXX0RNQV8yKQorCQlzID0gc3dkbWFfc3RyW2ldOworCWVsc2UgaWYgKG1vZGUgPj0gWEZFUl9QSU9fMCAmJiBtb2RlIDw9IFhGRVJfUElPXzUpCisJCXMgPSBwaW9fc3RyW2kgJiAweDddOworCWVsc2UgaWYgKG1vZGUgPT0gWEZFUl9QSU9fU0xPVykKKwkJcyA9ICJQSU8gU0xPVyI7CisJZWxzZQorCQlzID0gIlhGRVIgRVJST1IiOworCisJcmV0dXJuIHM7Cit9CitFWFBPUlRfU1lNQk9MKGlkZV94ZmVyX3ZlcmJvc2UpOworCisvKioKKyAqCWlkZV9nZXRfYmVzdF9waW9fbW9kZQktCWdldCBQSU8gbW9kZSBmcm9tIGRyaXZlCisgKglAZHJpdmU6IGRyaXZlIHRvIGNvbnNpZGVyCisgKglAbW9kZV93YW50ZWQ6IHByZWZlcnJlZCBtb2RlCisgKglAbWF4X21vZGU6IGhpZ2hlc3QgYWxsb3dlZCBtb2RlCisgKgorICoJVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIHJlY29tbWVuZGVkIFBJTyBzZXR0aW5ncyBmb3IgYSBnaXZlbiBkcml2ZSwKKyAqCWJhc2VkIG9uIHRoZSBkcml2ZS0+aWQgaW5mb3JtYXRpb24gYW5kIHRoZSBpZGVfcGlvX2JsYWNrbGlzdFtdLgorICoKKyAqCURyaXZlIFBJTyBtb2RlIGlzIGF1dG8tc2VsZWN0ZWQgaWYgMjU1IGlzIHBhc3NlZCBhcyBtb2RlX3dhbnRlZC4KKyAqCVRoaXMgaXMgdXNlZCBieSBtb3N0IGNoaXBzZXQgc3VwcG9ydCBtb2R1bGVzIHdoZW4gImF1dG8tdHVuaW5nIi4KKyAqLworCit1OCBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBtb2RlX3dhbnRlZCwgdTggbWF4X21vZGUpCit7CisJdTE2ICppZCA9IGRyaXZlLT5pZDsKKwlpbnQgcGlvX21vZGUgPSAtMSwgb3ZlcnJpZGRlbiA9IDA7CisKKwlpZiAobW9kZV93YW50ZWQgIT0gMjU1KQorCQlyZXR1cm4gbWluX3QodTgsIG1vZGVfd2FudGVkLCBtYXhfbW9kZSk7CisKKwlpZiAoKGRyaXZlLT5od2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BJT19OT19CTEFDS0xJU1QpID09IDApCisJCXBpb19tb2RlID0gaWRlX3NjYW5fcGlvX2JsYWNrbGlzdCgoY2hhciAqKSZpZFtBVEFfSURfUFJPRF0pOworCisJaWYgKHBpb19tb2RlICE9IC0xKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpcyBvbiBQSU8gYmxhY2tsaXN0XG4iLCBkcml2ZS0+bmFtZSk7CisJfSBlbHNlIHsKKwkJcGlvX21vZGUgPSBpZFtBVEFfSURfT0xEX1BJT19NT0RFU10gPj4gODsKKwkJaWYgKHBpb19tb2RlID4gMikgewkvKiAyIGlzIG1heGltdW0gYWxsb3dlZCB0UElPIHZhbHVlICovCisJCQlwaW9fbW9kZSA9IDI7CisJCQlvdmVycmlkZGVuID0gMTsKKwkJfQorCisJCWlmIChpZFtBVEFfSURfRklFTERfVkFMSURdICYgMikgewkgICAgICAvKiBBVEEyPyAqLworCQkJaWYgKGF0YV9pZF9oYXNfaW9yZHkoaWQpKSB7CisJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNykgeworCQkJCQlvdmVycmlkZGVuID0gMDsKKwkJCQkJaWYgKGlkW0FUQV9JRF9QSU9fTU9ERVNdICYgNCkKKwkJCQkJCXBpb19tb2RlID0gNTsKKwkJCQkJZWxzZSBpZiAoaWRbQVRBX0lEX1BJT19NT0RFU10gJiAyKQorCQkJCQkJcGlvX21vZGUgPSA0OworCQkJCQllbHNlCisJCQkJCQlwaW9fbW9kZSA9IDM7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKG92ZXJyaWRkZW4pCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogdFBJTyA+IDIsIGFzc3VtaW5nIHRQSU8gPSAyXG4iLAorCQkJCQkgZHJpdmUtPm5hbWUpOworCX0KKworCWlmIChwaW9fbW9kZSA+IG1heF9tb2RlKQorCQlwaW9fbW9kZSA9IG1heF9tb2RlOworCisJcmV0dXJuIHBpb19tb2RlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2dldF9iZXN0X3Bpb19tb2RlKTsKKworaW50IGlkZV9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpCisJCXJldHVybiAwOworCisJaWYgKHBvcnRfb3BzID09IE5VTEwgfHwgcG9ydF9vcHMtPnNldF9waW9fbW9kZSA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwkvKgorCSAqIFRPRE86IHRlbXBvcmFyeSBoYWNrIGZvciBzb21lIGxlZ2FjeSBob3N0IGRyaXZlcnMgdGhhdCBkaWRuJ3QKKwkgKiBzZXQgdHJhbnNmZXIgbW9kZSBvbiB0aGUgZGV2aWNlIGluIC0+c2V0X3Bpb19tb2RlIG1ldGhvZC4uLgorCSAqLworCWlmIChwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwpIHsKKwkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7CisJCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKKwkJCXJldHVybiAtMTsKKwkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgbW9kZSAtIFhGRVJfUElPXzApOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKTsKKwl9Cit9CisKK2ludCBpZGVfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggbW9kZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKKworCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX1NFVF9NT0RFKQorCQlyZXR1cm4gMDsKKworCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfZG1hX21vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSkgeworCQlpZiAoaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSkpCisJCQlyZXR1cm4gLTE7CisJCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoZHJpdmUsIG1vZGUpOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQlwb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBtb2RlKTsKKwkJcmV0dXJuIGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfZG1hX21vZGUpOworCisvKiByZXFfcGlvID09ICIyNTUiIGZvciBhdXRvLXR1bmUgKi8KK3ZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCByZXFfcGlvKQoreworCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOworCXU4IGhvc3RfcGlvLCBwaW87CisKKwlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X3Bpb19tb2RlID09IE5VTEwgfHwKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQorCQlyZXR1cm47CisKKwlCVUdfT04oaHdpZi0+cGlvX21hc2sgPT0gMHgwMCk7CisKKwlob3N0X3BpbyA9IGZscyhod2lmLT5waW9fbWFzaykgLSAxOworCisJcGlvID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKGRyaXZlLCByZXFfcGlvLCBob3N0X3Bpbyk7CisKKwkvKgorCSAqIFRPRE86CisJICogLSByZXBvcnQgZGV2aWNlIG1heCBQSU8gbW9kZQorCSAqIC0gY2hlY2sgcmVxX3BpbyAhPSAyNTUgYWdhaW5zdCBkZXZpY2UgbWF4IFBJTyBtb2RlCisJICovCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0IG1heCBQSU8lZCB3YW50ZWQgUElPJWQlcyBzZWxlY3RlZCBQSU8lZFxuIiwKKwkJCSAgZHJpdmUtPm5hbWUsIGhvc3RfcGlvLCByZXFfcGlvLAorCQkJICByZXFfcGlvID09IDI1NSA/ICIoYXV0by10dW5lKSIgOiAiIiwgcGlvKTsKKworCSh2b2lkKWlkZV9zZXRfcGlvX21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3NldF9waW8pOworCisvKioKKyAqCWlkZV9yYXRlX2ZpbHRlcgkJLQlmaWx0ZXIgdHJhbnNmZXIgbW9kZQorICoJQGRyaXZlOiBJREUgZGV2aWNlCisgKglAc3BlZWQ6IGRlc2lyZWQgc3BlZWQKKyAqCisgKglHaXZlbiB0aGUgYXZhaWxhYmxlIHRyYW5zZmVyIG1vZGVzIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICoJdGhlIGJlc3QgYXZhaWxhYmxlIHNwZWVkIGF0IG9yIGJlbG93IHRoZSBzcGVlZCByZXF1ZXN0ZWQuCisgKgorICoJVE9ETzogY2hlY2sgZGV2aWNlIFBJTyBjYXBhYmlsaXRpZXMKKyAqLworCitzdGF0aWMgdTggaWRlX3JhdGVfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCXU4IG1vZGUgPSBpZGVfZmluZF9kbWFfbW9kZShkcml2ZSwgc3BlZWQpOworCisJaWYgKG1vZGUgPT0gMCkgeworCQlpZiAoaHdpZi0+cGlvX21hc2spCisJCQltb2RlID0gZmxzKGh3aWYtPnBpb19tYXNrKSAtIDEgKyBYRkVSX1BJT18wOworCQllbHNlCisJCQltb2RlID0gWEZFUl9QSU9fNDsKKwl9CisKKy8qCXByaW50aygiJXM6IG1vZGUgMHglMDJ4LCBzcGVlZCAweCUwMnhcbiIsIF9fZnVuY19fLCBtb2RlLCBzcGVlZCk7ICovCisKKwlyZXR1cm4gbWluKHNwZWVkLCBtb2RlKTsKK30KKworLyoqCisgKglpZGVfc2V0X3hmZXJfcmF0ZQktCXNldCB0cmFuc2ZlciByYXRlCisgKglAZHJpdmU6IGRyaXZlIHRvIHNldAorICoJQHJhdGU6IHNwZWVkIHRvIGF0dGVtcHQgdG8gc2V0CisgKgorICoJR2VuZXJhbCBoZWxwZXIgZm9yIHNldHRpbmcgdGhlIHNwZWVkIG9mIGFuIElERSBkZXZpY2UuIFRoaXMKKyAqCWZ1bmN0aW9uIGtub3dzIGFib3V0IHVzZXIgZW5mb3JjZWQgbGltaXRzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24KKyAqCXdoaWNoIC0+c2V0X3Bpb19tb2RlLy0+c2V0X2RtYV9tb2RlIGRvZXMgbm90LgorICovCisKK2ludCBpZGVfc2V0X3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJhdGUpCit7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgKnBvcnRfb3BzID0gaHdpZi0+cG9ydF9vcHM7CisKKwlpZiAocG9ydF9vcHMgPT0gTlVMTCB8fCBwb3J0X29wcy0+c2V0X2RtYV9tb2RlID09IE5VTEwgfHwKKwkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fU0VUX01PREUpKQorCQlyZXR1cm4gLTE7CisKKwlyYXRlID0gaWRlX3JhdGVfZmlsdGVyKGRyaXZlLCByYXRlKTsKKworCUJVR19PTihyYXRlIDwgWEZFUl9QSU9fMCk7CisKKwlpZiAocmF0ZSA+PSBYRkVSX1BJT18wICYmIHJhdGUgPD0gWEZFUl9QSU9fNSkKKwkJcmV0dXJuIGlkZV9zZXRfcGlvX21vZGUoZHJpdmUsIHJhdGUpOworCisJcmV0dXJuIGlkZV9zZXRfZG1hX21vZGUoZHJpdmUsIHJhdGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLmMgYi9kcml2ZXJzL2lkZS9pZGUuYwppbmRleCAwOTIwZTNiLi45MmM5YjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUuYwpAQCAtNjIsMTYwICs2Miw2IEBACiAKIHN0cnVjdCBjbGFzcyAqaWRlX3BvcnRfY2xhc3M7CiAKLS8qCi0gKglMb2NrcyBmb3IgSURFIHNldHRpbmcgZnVuY3Rpb25hbGl0eQotICovCi0KLURFRklORV9NVVRFWChpZGVfc2V0dGluZ19tdHgpOwotCi1pZGVfZGV2c2V0X2dldChpb18zMmJpdCwgaW9fMzJiaXQpOwotCi1zdGF0aWMgaW50IHNldF9pb18zMmJpdChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0JaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTk9fSU9fMzJCSVQpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxICsgKFNVUFBPUlRfVkxCX1NZTkMgPDwgMSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZHJpdmUtPmlvXzMyYml0ID0gYXJnOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWlkZV9kZXZzZXRfZ2V0X2ZsYWcoa3NldHRpbmdzLCBJREVfREZMQUdfS0VFUF9TRVRUSU5HUyk7Ci0KLXN0YXRpYyBpbnQgc2V0X2tzZXR0aW5ncyhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBhcmcpCi17Ci0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYXJnKQotCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19LRUVQX1NFVFRJTkdTOwotCWVsc2UKLQkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX0tFRVBfU0VUVElOR1M7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2RldnNldF9nZXRfZmxhZyh1c2luZ19kbWEsIElERV9ERkxBR19VU0lOR19ETUEpOwotCi1zdGF0aWMgaW50IHNldF91c2luZ19kbWEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQotCWludCBlcnIgPSAtRVBFUk07Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhdGFfaWRfaGFzX2RtYShkcml2ZS0+aWQpID09IDApCi0JCWdvdG8gb3V0OwotCi0JaWYgKGRyaXZlLT5od2lmLT5kbWFfb3BzID09IE5VTEwpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gMDsKLQotCWlmIChhcmcpIHsKLQkJaWYgKGlkZV9zZXRfZG1hKGRyaXZlKSkKLQkJCWVyciA9IC1FSU87Ci0JfSBlbHNlCi0JCWlkZV9kbWFfb2ZmKGRyaXZlKTsKLQotb3V0OgotCXJldHVybiBlcnI7Ci0jZWxzZQotCWlmIChhcmcgPCAwIHx8IGFyZyA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIC1FUEVSTTsKLSNlbmRpZgotfQotCi0vKgotICogaGFuZGxlIEhESU9fU0VUX1BJT19NT0RFIGlvY3RsIGFidXNlcnMgaGVyZSwgZXZlbnR1YWxseSBpdCB3aWxsIGdvIGF3YXkKLSAqLwotc3RhdGljIGludCBzZXRfcGlvX21vZGVfYWJ1c2UoaWRlX2h3aWZfdCAqaHdpZiwgdTggcmVxX3BpbykKLXsKLQlzd2l0Y2ggKHJlcV9waW8pIHsKLQljYXNlIDIwMjoKLQljYXNlIDIwMToKLQljYXNlIDIwMDoKLQljYXNlIDEwMjoKLQljYXNlIDEwMToKLQljYXNlIDEwMDoKLQkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0RNQV9NT0RFUykgPyAxIDogMDsKLQljYXNlIDk6Ci0JY2FzZSA4OgotCQlyZXR1cm4gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gpID8gMSA6IDA7Ci0JY2FzZSA3OgotCWNhc2UgNjoKLQkJcmV0dXJuIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0FCVVNFX0ZBU1RfREVWU0VMKSA/IDEgOiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIGludCBzZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQotewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzICpwb3J0X29wcyA9IGh3aWYtPnBvcnRfb3BzOwotCi0JaWYgKGFyZyA8IDAgfHwgYXJnID4gMjU1KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChwb3J0X29wcyA9PSBOVUxMIHx8IHBvcnRfb3BzLT5zZXRfcGlvX21vZGUgPT0gTlVMTCB8fAotCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19TRVRfTU9ERSkpCi0JCXJldHVybiAtRU5PU1lTOwotCi0JaWYgKHNldF9waW9fbW9kZV9hYnVzZShkcml2ZS0+aHdpZiwgYXJnKSkgewotCQlpZiAoYXJnID09IDggfHwgYXJnID09IDkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJCS8qIHRha2UgbG9jayBmb3IgSURFX0RGTEFHX1tOT19dVU5NQVNLL1tOT19dSU9fMzJCSVQgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBhcmcpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCQl9IGVsc2UKLQkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7Ci0JfSBlbHNlIHsKLQkJaW50IGtlZXBfZG1hID0gISEoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpOwotCi0JCWlkZV9zZXRfcGlvKGRyaXZlLCBhcmcpOwotCi0JCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFVF9QSU9fTU9ERV9LRUVQX0RNQSkgewotCQkJaWYgKGtlZXBfZG1hKQotCQkJCWlkZV9kbWFfb24oZHJpdmUpOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWlkZV9kZXZzZXRfZ2V0X2ZsYWcodW5tYXNraXJxLCBJREVfREZMQUdfVU5NQVNLKTsKLQotc3RhdGljIGludCBzZXRfdW5tYXNraXJxKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGFyZykKLXsKLQlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19OT19VTk1BU0spCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAoYXJnIDwgMCB8fCBhcmcgPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChhcmcpCi0JCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1VOTUFTSzsKLQllbHNlCi0JCWRyaXZlLT5kZXZfZmxhZ3MgJj0gfklERV9ERkxBR19VTk1BU0s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaWRlX2V4dF9kZXZzZXRfcndfc3luYyhpb18zMmJpdCwgaW9fMzJiaXQpOwotaWRlX2V4dF9kZXZzZXRfcndfc3luYyhrZWVwc2V0dGluZ3MsIGtzZXR0aW5ncyk7Ci1pZGVfZXh0X2RldnNldF9yd19zeW5jKHVubWFza2lycSwgdW5tYXNraXJxKTsKLWlkZV9leHRfZGV2c2V0X3J3X3N5bmModXNpbmdfZG1hLCB1c2luZ19kbWEpOwotX19JREVfREVWU0VUKHBpb19tb2RlLCBEU19TWU5DLCBOVUxMLCBzZXRfcGlvX21vZGUpOwotCiAvKioKICAqIGlkZV9kZXZpY2VfZ2V0CS0JZ2V0IGFuIGFkZGl0aW9uYWwgcmVmZXJlbmNlIHRvIGEgaWRlX2RyaXZlX3QKICAqIEBkcml2ZToJZGV2aWNlIHRvIGdldCBhIHJlZmVyZW5jZSB0bwpAQCAtNTI3LDYgKzM3Myw4IEBACiAJCWdvdG8gb3V0X3BvcnRfY2xhc3M7CiAJfQogCisJaWRlX2FjcGlfaW5pdCgpOworCiAJcHJvY19pZGVfY3JlYXRlKCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2l0ODIxeC5jIGIvZHJpdmVycy9pZGUvaXQ4MjF4LmMKaW5kZXggMTNiODE1My4uNmI5ZmM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaXQ4MjF4LmMKKysrIGIvZHJpdmVycy9pZGUvaXQ4MjF4LmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweDIwKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfaXQ4MjF4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9pdDgyMXgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1OCBjb25mOwogCXN0YXRpYyBjaGFyICptb2RlWzJdID0geyAicGFzcyB0aHJvdWdoIiwgInNtYXJ0IiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbnM4NzQxNS5jIGIvZHJpdmVycy9pZGUvbnM4NzQxNS5jCmluZGV4IDgzNjQzZWQuLmVhNDhhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL25zODc0MTUuYworKysgYi9kcml2ZXJzL2lkZS9uczg3NDE1LmMKQEAgLTI4Niw5ICsyODYsNyBAQAogCX0KIAogCWlmICghdXNpbmdfaW50YSkKLQkJaHdpZi0+aXJxID0gX19pZGVfZGVmYXVsdF9pcnEoaHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyKTsKLQllbHNlIGlmICghaHdpZi0+aXJxICYmIGh3aWYtPm1hdGUgJiYgaHdpZi0+bWF0ZS0+aXJxKQotCQlod2lmLT5pcnEgPSBod2lmLT5tYXRlLT5pcnE7CS8qIHNoYXJlIElSUSB3aXRoIG1hdGUgKi8KKwkJaHdpZi0+aXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIGh3aWYtPmNoYW5uZWwpOwogCiAJaWYgKCFod2lmLT5kbWFfYmFzZSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfbmV3LmMgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYwppbmRleCBmMjEyOTBjLi5iNjg5MDZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYworKysgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYwpAQCAtMzI1LDcgKzMyNSw3IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3BkY25ldyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBpbml0X2NoaXBzZXRfcGRjbmV3KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJY29uc3QgY2hhciAqbmFtZSA9IERSVl9OQU1FOwogCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKQEAgLTQ0NCw3ICs0NDQsNyBAQAogI2VuZGlmCiAKICBvdXQ6Ci0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXYgKiBfX2RldmluaXQgcGRjMjAyNzBfZ2V0X2RldjIoc3RydWN0IHBjaV9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jIGIvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKaW5kZXggOTcxOTMzMi4uY2JhNjZlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKKysrIGIvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCWlkZV9kbWFfdGltZW91dChkcml2ZSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3BkYzIwMnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9wZGMyMDJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZG1hYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpOwogCXU4IHVkbWFfc3BlZWRfZmxhZyA9IDAsIHByaW1hcnlfbW9kZSA9IDAsIHNlY29uZGFyeV9tb2RlID0gMDsKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQlwcmludGsoIiVzQUNUSVZFXG4iLCAoaW5iKGRtYWJhc2UgfCAweDFmKSAmIDEpID8gIiIgOiAiSU4iKTsKIAl9CiBvdXQ6Ci0JcmV0dXJuIGRldi0+aXJxOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcGRjMjAyYXRhNF9maXh1cF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BpaXguYyBiL2RyaXZlcnMvaWRlL3BpaXguYwppbmRleCBmMWUyZTRlLi4yYWE2OTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9waWl4LmMKKysrIGIvZHJpdmVycy9pZGUvcGlpeC5jCkBAIC0yMDQsNyArMjA0LDcgQEAKICAqCW91dCB0byBiZSBuaWNlIGFuZCBzaW1wbGUuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfaWNoKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9pY2goc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAl1MzIgZXh0cmEgPSAwOwogCkBAIC0zMTgsMTkgKzMxOCwxMiBAQAogCS5jYWJsZV9kZXRlY3QJCT0gcGlpeF9jYWJsZV9kZXRlY3QsCiB9OwogCi0jaWZuZGVmIENPTkZJR19JQTY0Ci0gI2RlZmluZSBJREVfSEZMQUdTX1BJSVggSURFX0hGTEFHX0xFR0FDWV9JUlFTCi0jZWxzZQotICNkZWZpbmUgSURFX0hGTEFHU19QSUlYIDAKLSNlbmRpZgotCiAjZGVmaW5lIERFQ0xBUkVfUElJWF9ERVYodWRtYSkgXAogCXsJCQkJCQlcCiAJCS5uYW1lCQk9IERSVl9OQU1FLAkJXAogCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3BpaXgsCVwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDEsMHg4MCwweDgwfSwgezB4NDMsMHg4MCwweDgwfX0sIFwKIAkJLnBvcnRfb3BzCT0gJnBpaXhfcG9ydF9vcHMsCVwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1BJSVgsCVwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCQlcCiAJCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMl9PTkxZLAlcCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwJXApAQCAtMzQ0LDcgKzMzNyw2IEBACiAJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGlpeCwgXAogCQkuZW5hYmxlYml0cwk9IHt7MHg0MSwweDgwLDB4ODB9LCB7MHg0MywweDgwLDB4ODB9fSwgXAogCQkucG9ydF9vcHMJPSAmaWNoX3BvcnRfb3BzLCBcCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19QSUlYLCBcCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LCBcCiAJCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMl9PTkxZLCBcCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwgXApAQCAtMzYwLDggKzM1Miw3IEBACiAJCSAqLwogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NmQsMHhjMCwweDgwfSwgezB4NmQsMHhjMCwweGMwfX0sCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0lTQV9QT1JUUyB8IElERV9IRkxBR19OT19ETUEgfAotCQkJCSAgSURFX0hGTEFHU19QSUlYLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19JU0FfUE9SVFMgfCBJREVfSEZMQUdfTk9fRE1BLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLyogVGhpcyBpcyBhIHBhaW5mdWwgc3lzdGVtIGJlc3QgdG8gbGV0IGl0IHNlbGYgdHVuZSBmb3Igbm93ICovCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtzLmMgYi9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDM4MjEwMmIuLmI2NTU0ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtzLmMKKysrIGIvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYwpAQCAtMTc1LDcgKzE3NSw3IEBACiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1NCwgdWx0cmFfZW5hYmxlKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfc3Z3a3Moc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X3N2d2tzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgaW50IHJlZzsKIAl1OCBidHI7CkBAIC0yNzAsNyArMjcwLDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1QSwgYnRyKTsKIAl9CiAKLQlyZXR1cm4gZGV2LT5pcnE7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1OCBhdGE2Nl9zdndrc19zdndrcyhpZGVfaHdpZl90ICpod2lmKQpAQCAtMzUzLDE0ICszNTMsMTEgQEAKIAkuY2FibGVfZGV0ZWN0CQk9IHN2d2tzX2NhYmxlX2RldGVjdCwKIH07CiAKLSNkZWZpbmUgSURFX0hGTEFHU19TVldLUyBJREVfSEZMQUdfTEVHQUNZX0lSUVMKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHNlcnZlcndvcmtzX2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CS8qIDA6IE9TQjQgKi8KIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5wb3J0X29wcwk9ICZvc2I0X3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfU1ZXS1MsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSAweDAwLCAvKiBVRE1BIGlzIHByb2JsZW1hdGljIG9uIE9TQjQgKi8KQEAgLTM2OSw3ICszNjYsNiBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJnN2d2tzX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfU1ZXS1MsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCkBAIC0zNzgsNyArMzc0LDYgQEAKIAkJLm5hbWUJCT0gRFJWX05BTUUsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5wb3J0X29wcwk9ICZzdndrc19wb3J0X29wcywKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1NWV0tTLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LApAQCAtMzg3LDcgKzM4Miw3IEBACiAJCS5uYW1lCQk9IERSVl9OQU1FLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkucG9ydF9vcHMJPSAmc3Z3a3NfcG9ydF9vcHMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19TVldLUyB8IElERV9IRkxBR19TSU5HTEUsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKQEAgLTM5Niw3ICszOTEsNyBAQAogCQkubmFtZQkJPSBEUlZfTkFNRSwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLnBvcnRfb3BzCT0gJnN2d2tzX3BvcnRfb3BzLAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfU1ZXS1MgfCBJREVfSEZMQUdfU0lOR0xFLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zZXR1cC1wY2kuYyBiL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCmluZGV4IGU4NWQxZWQuLjI0YmM4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCisrKyBiL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jCkBAIC0zMDUsNyArMzA1LDYgQEAKICAqCUBkZXY6IFBDSSBkZXZpY2UgaG9sZGluZyBpbnRlcmZhY2UKICAqCUBkOiBJREUgcG9ydCBpbmZvCiAgKglAcG9ydDogcG9ydCBudW1iZXIKLSAqCUBpcnE6IFBDSSBJUlEKICAqCUBodzogaHdfcmVnc190IGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwb3J0CiAgKgogICoJUGVyZm9ybSB0aGUgaW5pdGlhbCBzZXQgdXAgZm9yIHRoZSBoYXJkd2FyZSBpbnRlcmZhY2Ugc3RydWN0dXJlLiBUaGlzCkBAIC0zMTYsNyArMzE1LDcgQEAKICAqLwogCiBzdGF0aWMgaW50IGlkZV9od19jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCi0JCQkgICAgdW5zaWduZWQgaW50IHBvcnQsIGludCBpcnEsIGh3X3JlZ3NfdCAqaHcpCisJCQkgICAgdW5zaWduZWQgaW50IHBvcnQsIGh3X3JlZ3NfdCAqaHcpCiB7CiAJdW5zaWduZWQgbG9uZyBjdGwgPSAwLCBiYXNlID0gMDsKIApAQCAtMzQ0LDcgKzM0Myw2IEBACiAJfQogCiAJbWVtc2V0KGh3LCAwLCBzaXplb2YoKmh3KSk7Ci0JaHctPmlycSA9IGlycTsKIAlody0+ZGV2ID0gJmRldi0+ZGV2OwogCWh3LT5jaGlwc2V0ID0gZC0+Y2hpcHNldCA/IGQtPmNoaXBzZXQgOiBpZGVfcGNpOwogCWlkZV9zdGRfaW5pdF9wb3J0cyhodywgYmFzZSwgY3RsIHwgMik7CkBAIC00NDgsNyArNDQ2LDYgQEAKICAqCWlkZV9wY2lfc2V0dXBfcG9ydHMJLQljb25maWd1cmUgcG9ydHMvZGV2aWNlcyBvbiBQQ0kgSURFCiAgKglAZGV2OiBQQ0kgZGV2aWNlCiAgKglAZDogSURFIHBvcnQgaW5mbwotICoJQHBjaWlycTogSVJRIGxpbmUKICAqCUBodzogaHdfcmVnc190IGluc3RhbmNlcyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgUENJIElERSBkZXZpY2UKICAqCUBod3M6IGh3X3JlZ3NfdCBwb2ludGVycyB0YWJsZSB0byB1cGRhdGUKICAqCkBAIC00NjIsNyArNDU5LDcgQEAKICAqLwogCiB2b2lkIGlkZV9wY2lfc2V0dXBfcG9ydHMoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsCi0JCQkgaW50IHBjaWlycSwgaHdfcmVnc190ICpodywgaHdfcmVnc190ICoqaHdzKQorCQkJIGh3X3JlZ3NfdCAqaHcsIGh3X3JlZ3NfdCAqKmh3cykKIHsKIAlpbnQgY2hhbm5lbHMgPSAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19TSU5HTEUpID8gMSA6IDIsIHBvcnQ7CiAJdTggdG1wOwpAQCAtNDgxLDcgKzQ3OCw3IEBACiAJCQljb250aW51ZTsJLyogcG9ydCBub3QgZW5hYmxlZCAqLwogCQl9CiAKLQkJaWYgKGlkZV9od19jb25maWd1cmUoZGV2LCBkLCBwb3J0LCBwY2lpcnEsIGh3ICsgcG9ydCkpCisJCWlmIChpZGVfaHdfY29uZmlndXJlKGRldiwgZCwgcG9ydCwgaHcgKyBwb3J0KSkKIAkJCWNvbnRpbnVlOwogCiAJCSooaHdzICsgcG9ydCkgPSBodyArIHBvcnQ7CkBAIC01MjQsNyArNTIxLDcgQEAKIAkJaWYgKG5vaXN5KQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXM6IG5vdCAxMDAlJSBuYXRpdmUgbW9kZTogd2lsbCAiCiAJCQkJInByb2JlIGlycXMgbGF0ZXJcbiIsIGQtPm5hbWUsIHBjaV9uYW1lKGRldikpOwotCQlwY2lpcnEgPSByZXQ7CisJCXBjaWlycSA9IDA7CiAJfSBlbHNlIGlmICghcGNpaXJxICYmIG5vaXN5KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzICVzOiBiYWQgaXJxICglZCk6IHdpbGwgcHJvYmUgbGF0ZXJcbiIsCiAJCQlkLT5uYW1lLCBwY2lfbmFtZShkZXYpLCBwY2lpcnEpOwpAQCAtNTQ5LDcgKzU0Niw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCi0JaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsIDAsICZod1swXSwgJmh3c1swXSk7CisJaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsICZod1swXSwgJmh3c1swXSk7CiAKIAlob3N0ID0gaWRlX2hvc3RfYWxsb2MoZCwgaHdzKTsKIAlpZiAoaG9zdCA9PSBOVUxMKSB7CkBAIC01NjgsNyArNTY1LDExIEBACiAJCWdvdG8gb3V0OwogCiAJLyogZml4dXAgSVJRICovCi0JaHdbMV0uaXJxID0gaHdbMF0uaXJxID0gcmV0OworCWlmIChpZGVfcGNpX2lzX2luX2NvbXBhdGliaWxpdHlfbW9kZShkZXYpKSB7CisJCWh3WzBdLmlycSA9IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEoZGV2LCAwKTsKKwkJaHdbMV0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShkZXYsIDEpOworCX0gZWxzZQorCQlod1sxXS5pcnEgPSBod1swXS5pcnEgPSByZXQ7CiAKIAlyZXQgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCBkLCBod3MpOwogCWlmIChyZXQpCkBAIC01OTEsNyArNTkyLDcgQEAKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKIAotCQlpZGVfcGNpX3NldHVwX3BvcnRzKHBkZXZbaV0sIGQsIDAsICZod1tpKjJdLCAmaHdzW2kqMl0pOworCQlpZGVfcGNpX3NldHVwX3BvcnRzKHBkZXZbaV0sIGQsICZod1tpKjJdLCAmaHdzW2kqMl0pOwogCX0KIAogCWhvc3QgPSBpZGVfaG9zdF9hbGxvYyhkLCBod3MpOwpAQCAtNjE5LDcgKzYyMCwxMSBAQAogCQkJZ290byBvdXQ7CiAKIAkJLyogZml4dXAgSVJRICovCi0JCWh3W2kqMiArIDFdLmlycSA9IGh3W2kqMl0uaXJxID0gcmV0OworCQlpZiAoaWRlX3BjaV9pc19pbl9jb21wYXRpYmlsaXR5X21vZGUocGRldltpXSkpIHsKKwkJCWh3W2kqMl0uaXJxID0gcGNpX2dldF9sZWdhY3lfaWRlX2lycShwZGV2W2ldLCAwKTsKKwkJCWh3W2kqMiArIDFdLmlycSA9IHBjaV9nZXRfbGVnYWN5X2lkZV9pcnEocGRldltpXSwgMSk7CisJCX0gZWxzZQorCQkJaHdbaSoyICsgMV0uaXJxID0gaHdbaSoyXS5pcnEgPSByZXQ7CiAJfQogCiAJcmV0ID0gaWRlX2hvc3RfcmVnaXN0ZXIoaG9zdCwgZCwgaHdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYyBiL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYwppbmRleCBjYjJiMzUyLi4xODExYWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaWltYWdlLmMKKysrIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCkBAIC00NjQsNyArNDY0LDcgQEAKICAqCXRvIDEzMyBNSHogY2xvY2tpbmcgaWYgdGhlIHN5c3RlbSBpc24ndCBhbHJlYWR5IHNldCB1cCB0byBkbyBpdC4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9zaWltYWdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9zaWltYWdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBob3N0LT5ob3N0X3ByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMgYi9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKaW5kZXggOWVjMWE0YS4uYWZjYTIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2lzNTUxMy5jCisrKyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJcmV0dXJuIGNoaXBzZXRfZmFtaWx5OwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGluaXRfY2hpcHNldF9zaXM1NTEzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9zaXM1NTEzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJLyogTWFrZSBnZW5lcmFsIGNvbmZpZyBvcHMgaGVyZQogCSAgIDEvIHRlbGwgSURFIGNoYW5uZWxzIHRvIG9wZXJhdGUgaW4gQ29tcGF0aWJpbGl0eSBtb2RlIG9ubHkKQEAgLTU2Myw3ICs1NjMsNyBAQAogCS5uYW1lCQk9IERSVl9OQU1FLAogCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc2lzNTUxMywKIAkuZW5hYmxlYml0cwk9IHsgezB4NGEsIDB4MDIsIDB4MDJ9LCB7MHg0YSwgMHgwNCwgMHgwNH0gfSwKLQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19MRUdBQ1lfSVJRUyB8IElERV9IRkxBR19OT19BVVRPRE1BLAorCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX05PX0FVVE9ETUEsCiAJLnBpb19tYXNrCT0gQVRBX1BJTzQsCiAJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMgYi9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCmluZGV4IDYyOTc5NTYuLmRiYTIxM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKKysrIGIvZHJpdmVycy9pZGUvc2w4MmMxMDUuYwpAQCAtMjcxLDcgKzI3MSw3IEBACiAgKiBjaGFubmVsIDAgaGVyZSBhdCBsZWFzdCwgYnV0IGNoYW5uZWwgMSBoYXMgdG8gYmUgZW5hYmxlZCBieQogICogZmlybXdhcmUgb3IgYXJjaCBjb2RlLiBXZSBzdGlsbCBzZXQgYm90aCB0byAxNiBiaXRzIG1vZGUuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5pdF9jaGlwc2V0X3NsODJjMTA1KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF9zbDgyYzEwNShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewogCXUzMiB2YWw7CiAKQEAgLTI4MSw3ICsyODEsNyBAQAogCXZhbCB8PSBDVFJMX1AwRU4gfCBDVFJMX1AwRjE2IHwgQ1RSTF9QMUYxNjsKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg0MCwgdmFsKTsKIAotCXJldHVybiBkZXYtPmlycTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgc2w4MmMxMDVfcG9ydF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jIGIvZHJpdmVycy9pZGUvc2xjOTBlNjYuYwppbmRleCA0MGI0Yjk0Li5mNTVkN2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMKQEAgLTEzNiw3ICsxMzYsNiBAQAogCS5uYW1lCQk9IERSVl9OQU1FLAogCS5lbmFibGViaXRzCT0geyB7MHg0MSwgMHg4MCwgMHg4MH0sIHsweDQzLCAweDgwLCAweDgwfSB9LAogCS5wb3J0X29wcwk9ICZzbGM5MGU2Nl9wb3J0X29wcywKLQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19MRUdBQ1lfSVJRUywKIAkucGlvX21hc2sJPSBBVEFfUElPNCwKIAkuc3dkbWFfbWFzawk9IEFUQV9TV0RNQTJfT05MWSwKIAkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTEyX09OTFksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90cm0yOTAuYyBiL2RyaXZlcnMvaWRlL3RybTI5MC5jCmluZGV4IGI2YTEyODUuLjFjMDllNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3RybTI5MC5jCisrKyBiL2RyaXZlcnMvaWRlL3RybTI5MC5jCkBAIC0yNzcsOSArMjc3LDYgQEAKIAlpZiAocmVnICYgMHgxMCkKIAkJLyogbGVnYWN5IG1vZGUgKi8KIAkJaHdpZi0+aXJxID0gaHdpZi0+Y2hhbm5lbCA/IDE1IDogMTQ7Ci0JZWxzZSBpZiAoIWh3aWYtPmlycSAmJiBod2lmLT5tYXRlICYmIGh3aWYtPm1hdGUtPmlycSkKLQkJLyogc2hhcmluZyBJUlEgd2l0aCBtYXRlICovCi0JCWh3aWYtPmlycSA9IGh3aWYtPm1hdGUtPmlycTsKIAogI2lmIDEKIAl7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS92aWE4MmN4eHguYyBiL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCmluZGV4IDYwOTJmZTMuLjNmZjcyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jCkBAIC0yNjcsNyArMjY3LDcgQEAKICAqCWFuZCBpbml0aWFsaXplIGl0cyBkcml2ZSBpbmRlcGVuZGVudCByZWdpc3RlcnMuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGludCBpbml0X2NoaXBzZXRfdmlhODJjeHh4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCitzdGF0aWMgaW50IGluaXRfY2hpcHNldF92aWE4MmN4eHgoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdmlhODJjeHh4X2RldiAqdmRldiA9IGhvc3QtPmhvc3RfcHJpdjsKQEAgLTQ0MywxNiArNDQzLDYgQEAKIAlpZiAoKHZpYV9jb25maWctPmZsYWdzICYgVklBX05PX1VOTUFTSykgPT0gMCkKIAkJZC5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19VTk1BU0tfSVJRUzsKIAotI2lmZGVmIENPTkZJR19QUENfQ0hSUAotCWlmIChtYWNoaW5lX2lzKGNocnApICYmIF9jaHJwX3R5cGUgPT0gX0NIUlBfUGVnYXNvcykKLQkJZC5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUzsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FNSUdBT05FCi0JaWYgKG1hY2hpbmVfaXMoYW1pZ2FvbmUpKQotCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTOwotI2VuZGlmCi0KIAlkLnVkbWFfbWFzayA9IHZpYV9jb25maWctPnVkbWFfbWFzazsKIAogCXZkZXYgPSBremFsbG9jKHNpemVvZigqdmRldiksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9jc3IuYyBiL2RyaXZlcnMvaWVlZTEzOTQvY3NyLmMKaW5kZXggMzE0MDBjOC4uZDY5NmY2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9jc3IuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2Nzci5jCkBAIC02OCwyMiArNjgsMjIgQEAKIAkuaG9zdF9yZXNldCA9CWhvc3RfcmVzZXQsCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgbWFwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyBtYXBfb3BzID0gewogCS5yZWFkID0gcmVhZF9tYXBzLAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGZjcF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgZmNwX29wcyA9IHsKIAkud3JpdGUgPSB3cml0ZV9mY3AsCiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgcmVnX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyByZWdfb3BzID0gewogCS5yZWFkID0gcmVhZF9yZWdzLAogCS53cml0ZSA9IHdyaXRlX3JlZ3MsCiAJLmxvY2sgPSBsb2NrX3JlZ3MsCiAJLmxvY2s2NCA9IGxvY2s2NF9yZWdzLAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGNvbmZpZ19yb21fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGNvbmZpZ19yb21fb3BzID0gewogCS5yZWFkID0gcmVhZF9jb25maWdfcm9tLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYyBiL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKaW5kZXggMzgzOGJjNC4uODIzYTYyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCkBAIC0xMzI1LDExICsxMzI1LDcgQEAKIAogCXN0cnVjdCB2aWRlb19jYXJkICp2aWRlbyA9IGZpbGVfdG9fdmlkZW9fY2FyZChmaWxlKTsKIAotCWludCByZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnZpZGVvLT5mYXN5bmMpOwotCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0gICAgICAgIHJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnZpZGVvLT5mYXN5bmMpOwogfQogCiBzdGF0aWMgc3NpemVfdCBkdjEzOTRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpAQCAtMjE3NSw3ICsyMTcxLDcgQEAKICAqIEV4cG9ydCBpbmZvcm1hdGlvbiBhYm91dCBwcm90b2NvbHMvZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCiAgKi8KICNpZmRlZiBNT0RVTEUKLXN0YXRpYyBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIGR2MTM5NF9pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgZHYxMzk0X2lkX3RhYmxlW10gPSB7CiAJewogCQkubWF0Y2hfZmxhZ3MJPSBJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQgfCBJRUVFMTM5NF9NQVRDSF9WRVJTSU9OLAogCQkuc3BlY2lmaWVyX2lkCT0gQVZDX1VOSVRfU1BFQ19JRF9FTlRSWSAmIDB4ZmZmZmZmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwppbmRleCAxYTkxOWRmLi40Y2ExMDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiBzdGF0aWMgdm9pZCBldGhlcjEzOTRfaG9zdF9yZXNldChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KTsKIAogLyogRnVuY3Rpb24gZm9yIGluY29taW5nIDEzOTQgcGFja2V0cyAqLwotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGFkZHJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGFkZHJfb3BzID0gewogCS53cml0ZSA9CWV0aGVyMTM5NF93cml0ZSwKIH07CiAKQEAgLTQzOCw3ICs0MzgsNyBAQAogCXJldHVybiBldGgxMzk0X25ld19ub2RlKGhpLCB1ZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIGV0aDEzOTRfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIGV0aDEzOTRfaWRfdGFibGVbXSA9IHsKIAl7CiAJCS5tYXRjaF9mbGFncyA9IChJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQgfAogCQkJCUlFRUUxMzk0X01BVENIX1ZFUlNJT04pLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9oaWdobGV2ZWwuYyBiL2RyaXZlcnMvaWVlZTEzOTQvaGlnaGxldmVsLmMKaW5kZXggNjAwZTM5MS4uNGJjNDQzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9oaWdobGV2ZWwuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2hpZ2hsZXZlbC5jCkBAIC00NzgsNyArNDc4LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1jb25zdCBzdGF0aWMgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgZHVtbXlfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGR1bW15X29wczsKIAogLyogZHVtbXkgYWRkcmVzcyBzcGFjZXMgYXMgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBvZiB0aGUgaG9zdCdzIGEucy4gbGlzdCAqLwogc3RhdGljIHZvaWQgaW5pdF9ocHNiX2hpZ2hsZXZlbChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYwppbmRleCA1M2FhZGE1Li5hNmQ1NWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuYwpAQCAtNDg0LDcgKzQ4NCw3IEBACiBzdGF0aWMgc3NpemVfdCBmd19zaG93X2Rydl9kZXZpY2VfaWRzKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaHBzYl9wcm90b2NvbF9kcml2ZXIgKmRyaXZlcjsKLQlzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkICppZDsKKwljb25zdCBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkICppZDsKIAlpbnQgbGVuZ3RoID0gMDsKIAljaGFyICpzY3JhdGNoID0gYnVmOwogCkBAIC02NTgsNyArNjU4LDcgQEAKIHsKIAlzdHJ1Y3QgaHBzYl9wcm90b2NvbF9kcml2ZXIgKmRyaXZlcjsKIAlzdHJ1Y3QgdW5pdF9kaXJlY3RvcnkgKnVkOwotCXN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgKmlkOworCWNvbnN0IHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgKmlkOwogCiAJLyogV2Ugb25seSBtYXRjaCB1bml0IGRpcmVjdG9yaWVzICovCiAJaWYgKGRldi0+cGxhdGZvcm1fZGF0YSAhPSAmbm9kZW1ncl91ZF9wbGF0Zm9ybV9kYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmggYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaAppbmRleCBlZTVhY2RiLi43NDliMjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaApAQCAtMTI1LDcgKzEyNSw3IEBACiAJICogcHJvYmUgZnVuY3Rpb24gYmVsb3cgY2FuIGltcGxlbWVudCBmdXJ0aGVyIHByb3RvY29sCiAJICogZGVwZW5kZW50IG9yIHZlbmRvciBkZXBlbmRlbnQgY2hlY2tpbmcuCiAJICovCi0Jc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCAqaWRfdGFibGU7CisJY29uc3Qgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCAqaWRfdGFibGU7CiAKIAkvKgogCSAqIFRoZSB1cGRhdGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIG5vZGUgaGFzIGp1c3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKaW5kZXggYmFkNjZjNi4uZGE1Zjg4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMKQEAgLTkwLDcgKzkwLDcgQEAKIHN0YXRpYyBpbnQgYXJtX2xvY2s2NChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgbm9kZWlkLCBvY3RsZXRfdCAqIHN0b3JlLAogCQkgICAgICB1NjQgYWRkciwgb2N0bGV0X3QgZGF0YSwgb2N0bGV0X3QgYXJnLCBpbnQgZXh0X3Rjb2RlLAogCQkgICAgICB1MTYgZmxhZ3MpOwotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIGFybV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgYXJtX29wcyA9IHsKIAkucmVhZCA9IGFybV9yZWFkLAogCS53cml0ZSA9IGFybV93cml0ZSwKIAkubG9jayA9IGFybV9sb2NrLApAQCAtMzY5LDYgKzM2OSw3IEBACiB7CiAJc3RydWN0IGNvbXBhdF9yYXcxMzk0X3JlcSBfX3VzZXIgKmNyID0gKHR5cGVvZihjcikpIGJ1ZjsKIAlzdHJ1Y3QgcmF3MTM5NF9yZXF1ZXN0IF9fdXNlciAqcjsKKwogCXIgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc3RydWN0IHJhdzEzOTRfcmVxdWVzdCkpOwogCiAjZGVmaW5lIEMoeCkgX19jb3B5X2luX3VzZXIoJnItPngsICZjci0+eCwgc2l6ZW9mKHItPngpKQpAQCAtMzc4LDcgKzM3OSw4IEBACiAJICAgIEModGFnKSB8fAogCSAgICBDKHNlbmRiKSB8fAogCSAgICBDKHJlY3ZiKSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CisJCXJldHVybiAoX19mb3JjZSBjb25zdCBjaGFyIF9fdXNlciAqKUVSUl9QVFIoLUVGQVVMVCk7CisKIAlyZXR1cm4gKGNvbnN0IGNoYXIgX191c2VyICopcjsKIH0KICN1bmRlZiBDCkBAIC0zODksNiArMzkxLDcgQEAKIHJhdzEzOTRfY29tcGF0X3JlYWQoY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc3RydWN0IHJhdzEzOTRfcmVxdWVzdCAqcikKIHsKIAlzdHJ1Y3QgY29tcGF0X3JhdzEzOTRfcmVxIF9fdXNlciAqY3IgPSAodHlwZW9mKGNyKSkgYnVmOworCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBjciwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfcmF3MTM5NF9yZXEpKSB8fAogCSAgICBQKHR5cGUpIHx8CiAJICAgIFAoZXJyb3IpIHx8CkBAIC00MDAsNiArNDAzLDcgQEAKIAkgICAgUChzZW5kYikgfHwKIAkgICAgUChyZWN2YikpCiAJCXJldHVybiAtRUZBVUxUOworCiAJcmV0dXJuIHNpemVvZihzdHJ1Y3QgY29tcGF0X3JhdzEzOTRfcmVxKTsKIH0KICN1bmRlZiBQCkBAIC0yMjQ5LDggKzIyNTMsOCBAQAogICAgCSAgICBzaXplb2Yoc3RydWN0IGNvbXBhdF9yYXcxMzk0X3JlcSkgIT0KIAkJCXNpemVvZihzdHJ1Y3QgcmF3MTM5NF9yZXF1ZXN0KSkgewogCQlidWZmZXIgPSByYXcxMzk0X2NvbXBhdF93cml0ZShidWZmZXIpOwotCQlpZiAoSVNfRVJSKGJ1ZmZlcikpCi0JCQlyZXR1cm4gUFRSX0VSUihidWZmZXIpOworCQlpZiAoSVNfRVJSKChfX2ZvcmNlIHZvaWQgKilidWZmZXIpKQorCQkJcmV0dXJuIFBUUl9FUlIoKF9fZm9yY2Ugdm9pZCAqKWJ1ZmZlcik7CiAJfSBlbHNlCiAjZW5kaWYKIAlpZiAoY291bnQgIT0gc2l6ZW9mKHN0cnVjdCByYXcxMzk0X3JlcXVlc3QpKSB7CkBAIC0yOTc4LDcgKzI5ODIsNyBAQAogICogRXhwb3J0IGluZm9ybWF0aW9uIGFib3V0IHByb3RvY29scy9kZXZpY2VzIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlci4KICAqLwogI2lmZGVmIE1PRFVMRQotc3RhdGljIHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgcmF3MTM5NF9pZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQgcmF3MTM5NF9pZF90YWJsZVtdID0gewogCXsKIAkgLm1hdGNoX2ZsYWdzID0gSUVFRTEzOTRfTUFUQ0hfU1BFQ0lGSUVSX0lEIHwgSUVFRTEzOTRfTUFUQ0hfVkVSU0lPTiwKIAkgLnNwZWNpZmllcl9pZCA9IEFWQ19VTklUX1NQRUNfSURfRU5UUlkgJiAweGZmZmZmZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKaW5kZXggZjNmZDg2NS4uYTUxYWIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKQEAgLTI2NSw3ICsyNjUsNyBAQAogCS5ob3N0X3Jlc2V0CT0gc2JwMl9ob3N0X3Jlc2V0LAogfTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIHNicDJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIHNicDJfb3BzID0gewogCS53cml0ZQkJPSBzYnAyX2hhbmRsZV9zdGF0dXNfd3JpdGUKIH07CiAKQEAgLTI3NSw3ICsyNzUsNyBAQAogc3RhdGljIGludCBzYnAyX2hhbmRsZV9waHlzZG1hX3JlYWQoc3RydWN0IGhwc2JfaG9zdCAqLCBpbnQsIHF1YWRsZXRfdCAqLCB1NjQsCiAJCQkJICAgIHNpemVfdCwgdTE2KTsKIAotY29uc3Qgc3RhdGljIHN0cnVjdCBocHNiX2FkZHJlc3Nfb3BzIHNicDJfcGh5c2RtYV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgc2JwMl9waHlzZG1hX29wcyA9IHsKIAkucmVhZAkJPSBzYnAyX2hhbmRsZV9waHlzZG1hX3JlYWQsCiAJLndyaXRlCQk9IHNicDJfaGFuZGxlX3BoeXNkbWFfd3JpdGUsCiB9OwpAQCAtMjg1LDcgKzI4NSw3IEBACiAvKgogICogSW50ZXJmYWNlIHRvIGRyaXZlciBjb3JlIGFuZCBJRUVFIDEzOTQgY29yZQogICovCi1zdGF0aWMgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCBzYnAyX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCBzYnAyX2lkX3RhYmxlW10gPSB7CiAJewogCSAubWF0Y2hfZmxhZ3MJPSBJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQgfCBJRUVFMTM5NF9NQVRDSF9WRVJTSU9OLAogCSAuc3BlY2lmaWVyX2lkCT0gU0JQMl9VTklUX1NQRUNfSURfRU5UUlkgJiAweGZmZmZmZiwKQEAgLTE0MTMsOCArMTQxMyw3IEBACiAJCQkgICIoZmlybXdhcmVfcmV2aXNpb24gMHglMDZ4LCB2ZW5kb3JfaWQgMHglMDZ4LCIKIAkJCSAgIiBtb2RlbF9pZCAweCUwNngpIiwKIAkJCSAgTk9ERV9CVVNfQVJHUyh1ZC0+bmUtPmhvc3QsIHVkLT5uZS0+bm9kZWlkKSwKLQkJCSAgd29ya2Fyb3VuZHMsIGZpcm13YXJlX3JldmlzaW9uLAotCQkJICB1ZC0+dmVuZG9yX2lkID8gdWQtPnZlbmRvcl9pZCA6IHVkLT5uZS0+dmVuZG9yX2lkLAorCQkJICB3b3JrYXJvdW5kcywgZmlybXdhcmVfcmV2aXNpb24sIHVkLT52ZW5kb3JfaWQsCiAJCQkgIG1vZGVsKTsKIAogCS8qIFdlIHdvdWxkIG5lZWQgb25lIFNDU0kgaG9zdCB0ZW1wbGF0ZSBmb3IgZWFjaCB0YXJnZXQgdG8gYWRqdXN0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwppbmRleCA2NzlhOTE4Li5kMjg3YmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKQEAgLTEyOTQsNyArMTI5NCw3IEBACiAgKiBFeHBvcnQgaW5mb3JtYXRpb24gYWJvdXQgcHJvdG9jb2xzL2RldmljZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgogICovCiAjaWZkZWYgTU9EVUxFCi1zdGF0aWMgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCB2aWRlbzEzOTRfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkIHZpZGVvMTM5NF9pZF90YWJsZVtdID0gewogCXsKIAkJLm1hdGNoX2ZsYWdzCT0gSUVFRTEzOTRfTUFUQ0hfU1BFQ0lGSUVSX0lEIHwgSUVFRTEzOTRfTUFUQ0hfVkVSU0lPTiwKIAkJLnNwZWNpZmllcl9pZAk9IENBTUVSQV9VTklUX1NQRUNfSURfRU5UUlkgJiAweGZmZmZmZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IGYxZTgyYTkuLjUxMzBmYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtOTI3LDggKzkyNyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIAotCXNlcnZpY2VfbWFzayA9IHNlcnZpY2VfbWFzayA/IHNlcnZpY2VfbWFzayA6Ci0JCSAgICAgICBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwlzZXJ2aWNlX21hc2sgPSBzZXJ2aWNlX21hc2sgPyBzZXJ2aWNlX21hc2sgOiB+Y3B1X3RvX2JlNjQoMCk7CiAJc2VydmljZV9pZCAmPSBzZXJ2aWNlX21hc2s7CiAJaWYgKChzZXJ2aWNlX2lkICYgSUJfU0VSVklDRV9JRF9BR05fTUFTSykgPT0gSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQgJiYKIAkgICAgKHNlcnZpY2VfaWQgIT0gSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQpKQpAQCAtOTU0LDcgKzk1Myw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNtLmxvY2ssIGZsYWdzKTsKIAlpZiAoc2VydmljZV9pZCA9PSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRCkgewogCQljbV9pZC0+c2VydmljZV9pZCA9IGNwdV90b19iZTY0KGNtLmxpc3Rlbl9zZXJ2aWNlX2lkKyspOwotCQljbV9pZC0+c2VydmljZV9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmU2NCh+MFVMTCk7CisJCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAJfSBlbHNlIHsKIAkJY21faWQtPnNlcnZpY2VfaWQgPSBzZXJ2aWNlX2lkOwogCQljbV9pZC0+c2VydmljZV9tYXNrID0gc2VydmljZV9tYXNrOwpAQCAtMTEzNCw3ICsxMTMzLDcgQEAKIAkJCWdvdG8gZXJyb3IxOwogCX0KIAljbV9pZC0+c2VydmljZV9pZCA9IHBhcmFtLT5zZXJ2aWNlX2lkOwotCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwljbV9pZC0+c2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCWNtX2lkX3ByaXYtPnRpbWVvdXRfbXMgPSBjbV9jb252ZXJ0X3RvX21zKAogCQkJCSAgICBwYXJhbS0+cHJpbWFyeV9wYXRoLT5wYWNrZXRfbGlmZV90aW1lKSAqIDIgKwogCQkJCSBjbV9jb252ZXJ0X3RvX21zKApAQCAtMTU0NSw3ICsxNTQ0LDcgQEAKIAljbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyID0gbGlzdGVuX2NtX2lkX3ByaXYtPmlkLmNtX2hhbmRsZXI7CiAJY21faWRfcHJpdi0+aWQuY29udGV4dCA9IGxpc3Rlbl9jbV9pZF9wcml2LT5pZC5jb250ZXh0OwogCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfaWQgPSByZXFfbXNnLT5zZXJ2aWNlX2lkOwotCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfbWFzayA9IF9fY29uc3RhbnRfY3B1X3RvX2JlNjQofjBVTEwpOworCWNtX2lkX3ByaXYtPmlkLnNlcnZpY2VfbWFzayA9IH5jcHVfdG9fYmU2NCgwKTsKIAogCWNtX3Byb2Nlc3Nfcm91dGVkX3JlcShyZXFfbXNnLCB3b3JrLT5tYWRfcmVjdl93Yy0+d2MpOwogCWNtX2Zvcm1hdF9wYXRoc19mcm9tX3JlcShyZXFfbXNnLCAmd29yay0+cGF0aFswXSwgJndvcmstPnBhdGhbMV0pOwpAQCAtMjg5OCw3ICsyODk3LDcgQEAKIAkJZ290byBvdXQ7CiAKIAljbV9pZC0+c2VydmljZV9pZCA9IHBhcmFtLT5zZXJ2aWNlX2lkOwotCWNtX2lkLT5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwljbV9pZC0+c2VydmljZV9tYXNrID0gfmNwdV90b19iZTY0KDApOwogCWNtX2lkX3ByaXYtPnRpbWVvdXRfbXMgPSBwYXJhbS0+dGltZW91dF9tczsKIAljbV9pZF9wcml2LT5tYXhfY21fcmV0cmllcyA9IHBhcmFtLT5tYXhfY21fcmV0cmllczsKIAlyZXQgPSBjbV9hbGxvY19tc2coY21faWRfcHJpdiwgJm1zZyk7CkBAIC0yOTkyLDcgKzI5OTEsNyBAQAogCWNtX2lkX3ByaXYtPmlkLmNtX2hhbmRsZXIgPSBjdXJfY21faWRfcHJpdi0+aWQuY21faGFuZGxlcjsKIAljbV9pZF9wcml2LT5pZC5jb250ZXh0ID0gY3VyX2NtX2lkX3ByaXYtPmlkLmNvbnRleHQ7CiAJY21faWRfcHJpdi0+aWQuc2VydmljZV9pZCA9IHNpZHJfcmVxX21zZy0+c2VydmljZV9pZDsKLQljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgPSBfX2NvbnN0YW50X2NwdV90b19iZTY0KH4wVUxMKTsKKwljbV9pZF9wcml2LT5pZC5zZXJ2aWNlX21hc2sgPSB+Y3B1X3RvX2JlNjQoMCk7CiAKIAljbV9mb3JtYXRfc2lkcl9yZXFfZXZlbnQod29yaywgJmN1cl9jbV9pZF9wcml2LT5pZCk7CiAJY21fcHJvY2Vzc193b3JrKGNtX2lkX3ByaXYsIHdvcmspOwpAQCAtMzc4OSw3ICszNzg4LDcgQEAKIAlyd2xvY2tfaW5pdCgmY20uZGV2aWNlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZjbS5sb2NrKTsKIAljbS5saXN0ZW5fc2VydmljZV90YWJsZSA9IFJCX1JPT1Q7Ci0JY20ubGlzdGVuX3NlcnZpY2VfaWQgPSBfX2NvbnN0YW50X2JlNjRfdG9fY3B1KElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEKTsKKwljbS5saXN0ZW5fc2VydmljZV9pZCA9IGJlNjRfdG9fY3B1KElCX0NNX0FTU0lHTl9TRVJWSUNFX0lEKTsKIAljbS5yZW1vdGVfaWRfdGFibGUgPSBSQl9ST09UOwogCWNtLnJlbW90ZV9xcF90YWJsZSA9IFJCX1JPT1Q7CiAJY20ucmVtb3RlX3NpZHJfdGFibGUgPSBSQl9ST09UOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21fbXNncy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21fbXNncy5oCmluZGV4IGFlYzljN2EuLjdlNjNjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtX21zZ3MuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbV9tc2dzLmgKQEAgLTQ0LDE3ICs0NCwxNyBAQAogCiAjZGVmaW5lIElCX0NNX0NMQVNTX1ZFUlNJT04JMiAvKiBJQiBzcGVjaWZpY2F0aW9uIDEuMiAqLwogCi0jZGVmaW5lIENNX1JFUV9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKLSNkZWZpbmUgQ01fTVJBX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDExKQotI2RlZmluZSBDTV9SRUpfQVRUUl9JRAkgICAgX19jb25zdGFudF9odG9ucygweDAwMTIpCi0jZGVmaW5lIENNX1JFUF9BVFRSX0lECSAgICBfX2NvbnN0YW50X2h0b25zKDB4MDAxMykKLSNkZWZpbmUgQ01fUlRVX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE0KQotI2RlZmluZSBDTV9EUkVRX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE1KQotI2RlZmluZSBDTV9EUkVQX0FUVFJfSUQJICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE2KQotI2RlZmluZSBDTV9TSURSX1JFUV9BVFRSX0lEIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE3KQotI2RlZmluZSBDTV9TSURSX1JFUF9BVFRSX0lEIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE4KQotI2RlZmluZSBDTV9MQVBfQVRUUl9JRCAgICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDE5KQotI2RlZmluZSBDTV9BUFJfQVRUUl9JRCAgICAgIF9fY29uc3RhbnRfaHRvbnMoMHgwMDFBKQorI2RlZmluZSBDTV9SRVFfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDEwKQorI2RlZmluZSBDTV9NUkFfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDExKQorI2RlZmluZSBDTV9SRUpfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDEyKQorI2RlZmluZSBDTV9SRVBfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDEzKQorI2RlZmluZSBDTV9SVFVfQVRUUl9JRAkJY3B1X3RvX2JlMTYoMHgwMDE0KQorI2RlZmluZSBDTV9EUkVRX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxNSkKKyNkZWZpbmUgQ01fRFJFUF9BVFRSX0lECQljcHVfdG9fYmUxNigweDAwMTYpCisjZGVmaW5lIENNX1NJRFJfUkVRX0FUVFJfSUQJY3B1X3RvX2JlMTYoMHgwMDE3KQorI2RlZmluZSBDTV9TSURSX1JFUF9BVFRSX0lECWNwdV90b19iZTE2KDB4MDAxOCkKKyNkZWZpbmUgQ01fTEFQX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxOSkKKyNkZWZpbmUgQ01fQVBSX0FUVFJfSUQJCWNwdV90b19iZTE2KDB4MDAxQSkKIAogZW51bSBjbV9tc2dfc2VxdWVuY2UgewogCUNNX01TR19TRVFVRU5DRV9SRVEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCmluZGV4IDc5MTNiODAuLmQxZmJhNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2RldmljZS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAogCUJVR19PTihkZXZpY2UtPnJlZ19zdGF0ZSAhPSBJQl9ERVZfVU5SRUdJU1RFUkVEKTsKIAotCWliX2RldmljZV91bnJlZ2lzdGVyX3N5c2ZzKGRldmljZSk7CisJa29iamVjdF9wdXQoJmRldmljZS0+ZGV2LmtvYmopOwogfQogRVhQT1JUX1NZTUJPTChpYl9kZWFsbG9jX2RldmljZSk7CiAKQEAgLTM0OCw2ICszNDgsOCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZkZXZpY2VfbXV0ZXgpOwogCisJaWJfZGV2aWNlX3VucmVnaXN0ZXJfc3lzZnMoZGV2aWNlKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2UtPmNsaWVudF9kYXRhX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29udGV4dCwgdG1wLCAmZGV2aWNlLT5jbGllbnRfZGF0YV9saXN0LCBsaXN0KQogCQlrZnJlZShjb250ZXh0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKaW5kZXggNWM1NGZjMi4uZGU5MjJhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKQEAgLTMwMSw2ICszMDEsMTYgQEAKIAltYWRfYWdlbnRfcHJpdi0+YWdlbnQuY29udGV4dCA9IGNvbnRleHQ7CiAJbWFkX2FnZW50X3ByaXYtPmFnZW50LnFwID0gcG9ydF9wcml2LT5xcF9pbmZvW3Fwbl0ucXA7CiAJbWFkX2FnZW50X3ByaXYtPmFnZW50LnBvcnRfbnVtID0gcG9ydF9udW07CisJc3Bpbl9sb2NrX2luaXQoJm1hZF9hZ2VudF9wcml2LT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPnNlbmRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT53YWl0X2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+ZG9uZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPnJtcHBfbGlzdCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJm1hZF9hZ2VudF9wcml2LT50aW1lZF93b3JrLCB0aW1lb3V0X3NlbmRzKTsKKwlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPmxvY2FsX2xpc3QpOworCUlOSVRfV09SSygmbWFkX2FnZW50X3ByaXYtPmxvY2FsX3dvcmssIGxvY2FsX2NvbXBsZXRpb25zKTsKKwlhdG9taWNfc2V0KCZtYWRfYWdlbnRfcHJpdi0+cmVmY291bnQsIDEpOworCWluaXRfY29tcGxldGlvbigmbWFkX2FnZW50X3ByaXYtPmNvbXApOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnRfcHJpdi0+cmVnX2xvY2ssIGZsYWdzKTsKIAltYWRfYWdlbnRfcHJpdi0+YWdlbnQuaGlfdGlkID0gKytpYl9tYWRfY2xpZW50X2lkOwpAQCAtMzUwLDE3ICszNjAsNiBAQAogCWxpc3RfYWRkX3RhaWwoJm1hZF9hZ2VudF9wcml2LT5hZ2VudF9saXN0LCAmcG9ydF9wcml2LT5hZ2VudF9saXN0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0X3ByaXYtPnJlZ19sb2NrLCBmbGFncyk7CiAKLQlzcGluX2xvY2tfaW5pdCgmbWFkX2FnZW50X3ByaXYtPmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+c2VuZF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmbWFkX2FnZW50X3ByaXYtPndhaXRfbGlzdCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hZF9hZ2VudF9wcml2LT5kb25lX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+cm1wcF9saXN0KTsKLQlJTklUX0RFTEFZRURfV09SSygmbWFkX2FnZW50X3ByaXYtPnRpbWVkX3dvcmssIHRpbWVvdXRfc2VuZHMpOwotCUlOSVRfTElTVF9IRUFEKCZtYWRfYWdlbnRfcHJpdi0+bG9jYWxfbGlzdCk7Ci0JSU5JVF9XT1JLKCZtYWRfYWdlbnRfcHJpdi0+bG9jYWxfd29yaywgbG9jYWxfY29tcGxldGlvbnMpOwotCWF0b21pY19zZXQoJm1hZF9hZ2VudF9wcml2LT5yZWZjb3VudCwgMSk7Ci0JaW5pdF9jb21wbGV0aW9uKCZtYWRfYWdlbnRfcHJpdi0+Y29tcCk7Ci0KIAlyZXR1cm4gJm1hZF9hZ2VudF9wcml2LT5hZ2VudDsKIAogZXJyb3I0OgpAQCAtNzQzLDkgKzc0Miw3IEBACiAJCWJyZWFrOwogCWNhc2UgSUJfTUFEX1JFU1VMVF9TVUNDRVNTIHwgSUJfTUFEX1JFU1VMVF9DT05TVU1FRDoKIAkJa21lbV9jYWNoZV9mcmVlKGliX21hZF9jYWNoZSwgbWFkX3ByaXYpOwotCQlrZnJlZShsb2NhbCk7Ci0JCXJldCA9IDE7Ci0JCWdvdG8gb3V0OworCQlicmVhazsKIAljYXNlIElCX01BRF9SRVNVTFRfU1VDQ0VTUzoKIAkJLyogVHJlYXQgbGlrZSBhbiBpbmNvbWluZyByZWNlaXZlIE1BRCAqLwogCQlwb3J0X3ByaXYgPSBpYl9nZXRfbWFkX3BvcnQobWFkX2FnZW50X3ByaXYtPmFnZW50LmRldmljZSwKQEAgLTc1NiwxMCArNzUzLDEyIEBACiAJCQkJCQkgICAgICAgICZtYWRfcHJpdi0+bWFkLm1hZCk7CiAJCX0KIAkJaWYgKCFwb3J0X3ByaXYgfHwgIXJlY3ZfbWFkX2FnZW50KSB7CisJCQkvKgorCQkJICogTm8gcmVjZWl2aW5nIGFnZW50IHNvIGRyb3AgcGFja2V0IGFuZAorCQkJICogZ2VuZXJhdGUgc2VuZCBjb21wbGV0aW9uLgorCQkJICovCiAJCQlrbWVtX2NhY2hlX2ZyZWUoaWJfbWFkX2NhY2hlLCBtYWRfcHJpdik7Ci0JCQlrZnJlZShsb2NhbCk7Ci0JCQlyZXQgPSAwOwotCQkJZ290byBvdXQ7CisJCQlicmVhazsKIAkJfQogCQlsb2NhbC0+bWFkX3ByaXYgPSBtYWRfcHJpdjsKIAkJbG9jYWwtPnJlY3ZfbWFkX2FnZW50ID0gcmVjdl9tYWRfYWdlbnQ7CkBAIC0yMzU2LDcgKzIzNTUsNyBAQAogCXN0cnVjdCBpYl9tYWRfbG9jYWxfcHJpdmF0ZSAqbG9jYWw7CiAJc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICpyZWN2X21hZF9hZ2VudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZWN2ID0gMDsKKwlpbnQgZnJlZV9tYWQ7CiAJc3RydWN0IGliX3djIHdjOwogCXN0cnVjdCBpYl9tYWRfc2VuZF93YyBtYWRfc2VuZF93YzsKIApAQCAtMjM3MCwxNCArMjM2OSwxNSBAQAogCQkJCSAgIGNvbXBsZXRpb25fbGlzdCk7CiAJCWxpc3RfZGVsKCZsb2NhbC0+Y29tcGxldGlvbl9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFkX2FnZW50X3ByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZnJlZV9tYWQgPSAwOwogCQlpZiAobG9jYWwtPm1hZF9wcml2KSB7CiAJCQlyZWN2X21hZF9hZ2VudCA9IGxvY2FsLT5yZWN2X21hZF9hZ2VudDsKIAkJCWlmICghcmVjdl9tYWRfYWdlbnQpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyByZWNlaXZlIE1BRCBhZ2VudCBmb3IgbG9jYWwgY29tcGxldGlvblxuIik7CisJCQkJZnJlZV9tYWQgPSAxOwogCQkJCWdvdG8gbG9jYWxfc2VuZF9jb21wbGV0aW9uOwogCQkJfQogCi0JCQlyZWN2ID0gMTsKIAkJCS8qCiAJCQkgKiBEZWZpbmVkIGJlaGF2aW9yIGlzIHRvIGNvbXBsZXRlIHJlc3BvbnNlCiAJCQkgKiBiZWZvcmUgcmVxdWVzdApAQCAtMjQyMiw3ICsyNDIyLDcgQEAKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFkX2FnZW50X3ByaXYtPmxvY2ssIGZsYWdzKTsKIAkJYXRvbWljX2RlYygmbWFkX2FnZW50X3ByaXYtPnJlZmNvdW50KTsKLQkJaWYgKCFyZWN2KQorCQlpZiAoZnJlZV9tYWQpCiAJCQlrbWVtX2NhY2hlX2ZyZWUoaWJfbWFkX2NhY2hlLCBsb2NhbC0+bWFkX3ByaXYpOwogCQlrZnJlZShsb2NhbCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKaW5kZXggM2FmMmI4NC4uNTdhM2M2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCkBAIC03MzUsNyArNzM1LDcgQEAKIAkJZ290byBiYWQ7CiAJfQogCi0JaWYgKHJtcHBfaGRyLT5zZWdfbnVtID09IF9fY29uc3RhbnRfaHRvbmwoMSkpIHsKKwlpZiAocm1wcF9oZHItPnNlZ19udW0gPT0gY3B1X3RvX2JlMzIoMSkpIHsKIAkJaWYgKCEoaWJfZ2V0X3JtcHBfZmxhZ3Mocm1wcF9oZHIpICYgSUJfTUdNVF9STVBQX0ZMQUdfRklSU1QpKSB7CiAJCQlybXBwX3N0YXR1cyA9IElCX01HTVRfUk1QUF9TVEFUVVNfQkFEX1NFRzsKIAkJCWdvdG8gYmFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKaW5kZXggNzg2M2E1MC4uMTg2NTA0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCkBAIC0zOTUsNiArMzk1LDggQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxKCZwb3J0LT5haF9sb2NrKTsKKwlpZiAocG9ydC0+c21fYWgpCisJCWtyZWZfcHV0KCZwb3J0LT5zbV9haC0+cmVmLCBmcmVlX3NtX2FoKTsKIAlwb3J0LT5zbV9haCA9IG5ld19haDsKIAlzcGluX3VubG9ja19pcnEoJnBvcnQtPmFoX2xvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYwppbmRleCBiNDNmN2QzNjguLjVjMDRjZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYwpAQCAtNjYsMTEgKzY2LDYgQEAKIAlpbnQJCQlpbmRleDsKIH07CiAKLXN0YXRpYyBpbmxpbmUgaW50IGliZGV2X2lzX2FsaXZlKGNvbnN0IHN0cnVjdCBpYl9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZGV2LT5yZWdfc3RhdGUgPT0gSUJfREVWX1JFR0lTVEVSRUQ7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IHBvcnRfYXR0cl9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJICAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtODAsOCArNzUsNiBAQAogCiAJaWYgKCFwb3J0X2F0dHItPnNob3cpCiAJCXJldHVybiAtRUlPOwotCWlmICghaWJkZXZfaXNfYWxpdmUocC0+aWJkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiBwb3J0X2F0dHItPnNob3cocCwgcG9ydF9hdHRyLCBidWYpOwogfQpAQCAtNTYyLDkgKzU1NSw2IEBACiB7CiAJc3RydWN0IGliX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGliX2RldmljZSwgZGV2KTsKIAotCWlmICghaWJkZXZfaXNfYWxpdmUoZGV2KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAlzd2l0Y2ggKGRldi0+bm9kZV90eXBlKSB7CiAJY2FzZSBSRE1BX05PREVfSUJfQ0E6CSAgcmV0dXJuIHNwcmludGYoYnVmLCAiJWQ6IENBXG4iLCBkZXYtPm5vZGVfdHlwZSk7CiAJY2FzZSBSRE1BX05PREVfUk5JQzoJICByZXR1cm4gc3ByaW50ZihidWYsICIlZDogUk5JQ1xuIiwgZGV2LT5ub2RlX3R5cGUpOwpAQCAtNTgxLDkgKzU3MSw2IEBACiAJc3RydWN0IGliX2RldmljZV9hdHRyIGF0dHI7CiAJc3NpemVfdCByZXQ7CiAKLQlpZiAoIWliZGV2X2lzX2FsaXZlKGRldikpCi0JCXJldHVybiAtRU5PREVWOwotCiAJcmV0ID0gaWJfcXVlcnlfZGV2aWNlKGRldiwgJmF0dHIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC02MDAsOSArNTg3LDYgQEAKIHsKIAlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoZGV2aWNlLCBzdHJ1Y3QgaWJfZGV2aWNlLCBkZXYpOwogCi0JaWYgKCFpYmRldl9pc19hbGl2ZShkZXYpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUwNHg6JTA0eDolMDR4OiUwNHhcbiIsCiAJCSAgICAgICBiZTE2X3RvX2NwdSgoKF9fYmUxNiAqKSAmZGV2LT5ub2RlX2d1aWQpWzBdKSwKIAkJICAgICAgIGJlMTZfdG9fY3B1KCgoX19iZTE2ICopICZkZXYtPm5vZGVfZ3VpZClbMV0pLApAQCAtODQ4LDYgKzgzMiw5IEBACiAJc3RydWN0IGtvYmplY3QgKnAsICp0OwogCXN0cnVjdCBpYl9wb3J0ICpwb3J0OwogCisJLyogSG9sZCBrb2JqZWN0IHVudGlsIGliX2RlYWxsb2NfZGV2aWNlKCkgKi8KKwlrb2JqZWN0X2dldCgmZGV2aWNlLT5kZXYua29iaik7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdCwgJmRldmljZS0+cG9ydF9saXN0LCBlbnRyeSkgewogCQlsaXN0X2RlbCgmcC0+ZW50cnkpOwogCQlwb3J0ID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBpYl9wb3J0LCBrb2JqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMKaW5kZXggMTEzZjNjMC4uN2Q3OWFhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyLmMKQEAgLTc2LDcgKzc2LDYgQEAKIHN0YXRpYyB2b2lkIGMyX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBzdGF0aWMgaW50IGMyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOwogc3RhdGljIHZvaWQgYzJfcmVzZXQoc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjMl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjMl9wY2lfdGFibGVbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoMHgxOGI4LCAweGIwMDEpIH0sCkBAIC0zNDksNyArMzQ4LDcgQEAKIAkJCQkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0FERFIpOwogCQkJCV9fcmF3X3dyaXRldygoX19mb3JjZSB1MTYpIGNwdV90b19iZTE2KFRYUF9IVFhEX0RPTkUpLAogCQkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfRkxBR1MpOwotCQkJCWMyX3BvcnQtPm5ldHN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCQljMl9wb3J0LT5uZXRkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCQlicmVhazsKIAkJCX0gZWxzZSB7CiAJCQkJX19yYXdfd3JpdGV3KDAsCkBAIC00NTcsNyArNDU2LDcgQEAKIAkJICAgICBlbGVtLT5od19kZXNjICsgQzJfUlhQX0ZMQUdTKTsKIAogCXByX2RlYnVnKCJwYWNrZXQgZHJvcHBlZFxuIik7Ci0JYzJfcG9ydC0+bmV0c3RhdHMucnhfZHJvcHBlZCsrOworCWMyX3BvcnQtPm5ldGRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogfQogCiBzdGF0aWMgdm9pZCBjMl9yeF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKQEAgLTUzMiw4ICs1MzEsOCBAQAogCQluZXRpZl9yeChza2IpOwogCiAJCW5ldGRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCWMyX3BvcnQtPm5ldHN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJYzJfcG9ydC0+bmV0c3RhdHMucnhfYnl0ZXMgKz0gYnVmbGVuOworCQluZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJbmV0ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBidWZsZW47CiAJfQogCiAJLyogU2F2ZSB3aGVyZSB3ZSBsZWZ0IG9mZiAqLwpAQCAtNzk3LDggKzc5Niw4IEBACiAJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikgY3B1X3RvX2JlMTYoVFhQX0hUWERfUkVBRFkpLAogCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfRkxBR1MpOwogCi0JYzJfcG9ydC0+bmV0c3RhdHMudHhfcGFja2V0cysrOwotCWMyX3BvcnQtPm5ldHN0YXRzLnR4X2J5dGVzICs9IG1hcGxlbjsKKwluZXRkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IG1hcGxlbjsKIAogCS8qIExvb3AgdGhydSBhZGRpdGlvbmFsIGRhdGEgZnJhZ21lbnRzIGFuZCBxdWV1ZSB0aGVtICovCiAJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpIHsKQEAgLTgyMyw4ICs4MjIsOCBAQAogCQkJX19yYXdfd3JpdGV3KChfX2ZvcmNlIHUxNikgY3B1X3RvX2JlMTYoVFhQX0hUWERfUkVBRFkpLAogCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9GTEFHUyk7CiAKLQkJCWMyX3BvcnQtPm5ldHN0YXRzLnR4X3BhY2tldHMrKzsKLQkJCWMyX3BvcnQtPm5ldHN0YXRzLnR4X2J5dGVzICs9IG1hcGxlbjsKKwkJCW5ldGRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQkJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBtYXBsZW47CiAJCX0KIAl9CiAKQEAgLTg0NSwxMyArODQ0LDYgQEAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmMyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQotewotCXN0cnVjdCBjMl9wb3J0ICpjMl9wb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCXJldHVybiAmYzJfcG9ydC0+bmV0c3RhdHM7Ci19Ci0KIHN0YXRpYyB2b2lkIGMyX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYzJfcG9ydCAqYzJfcG9ydCA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC04ODAsNiArODcyLDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjMl9uZXRkZXYgPSB7CisJLm5kb19vcGVuIAkJPSBjMl91cCwKKwkubmRvX3N0b3AgCQk9IGMyX2Rvd24sCisJLm5kb19zdGFydF94bWl0CQk9IGMyX3htaXRfZnJhbWUsCisJLm5kb190eF90aW1lb3V0CQk9IGMyX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGMyX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyogSW5pdGlhbGl6ZSBuZXR3b3JrIGRldmljZSAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpjMl9kZXZpbml0KHN0cnVjdCBjMl9kZXYgKmMyZGV2LAogCQkJCSAgICAgdm9pZCBfX2lvbWVtICogbW1pb19hZGRyKQpAQCAtODk0LDEyICs4OTYsNyBAQAogCiAJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmYzJkZXYtPnBjaWRldi0+ZGV2KTsKIAotCW5ldGRldi0+b3BlbiA9IGMyX3VwOwotCW5ldGRldi0+c3RvcCA9IGMyX2Rvd247Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjMl94bWl0X2ZyYW1lOwotCW5ldGRldi0+Z2V0X3N0YXRzID0gYzJfZ2V0X3N0YXRzOwotCW5ldGRldi0+dHhfdGltZW91dCA9IGMyX3R4X3RpbWVvdXQ7Ci0JbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gYzJfY2hhbmdlX210dTsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmYzJfbmV0ZGV2OwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBDMl9UWF9USU1FT1VUOwogCW5ldGRldi0+aXJxID0gYzJkZXYtPnBjaWRldi0+aXJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oCmluZGV4IGQxMmEyNGEuLmY3ZmY2NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oCkBAIC0zNjksOCArMzY5LDYgQEAKIAl1bnNpZ25lZCBsb25nIG1lbV9zaXplOwogCiAJdTMyIHJ4X2J1Zl9zaXplOwotCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0c3RhdHM7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYwppbmRleCA1MTE5ZDY1Li5mMTk0OGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuYwpAQCAtNzA4LDI2ICs3MDgsMjcgQEAKIAogc3RhdGljIGludCBjMl9wc2V1ZG9fY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKIHsKLQlpbnQgcmV0ID0gMDsKLQogCWlmIChuZXdfbXR1IDwgRVRIX1pMRU4gfHwgbmV3X210dSA+IEVUSF9KVU1CT19NVFUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OwogCiAJLyogVE9ETzogVGVsbCBybmljIGFib3V0IG5ldyBybWRhIGludGVyZmFjZSBtdHUgKi8KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGMyX3BzZXVkb19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gYzJfcHNldWRvX3VwLAorCS5uZG9fc3RvcCAJCT0gYzJfcHNldWRvX2Rvd24sCisJLm5kb19zdGFydF94bWl0IAk9IGMyX3BzZXVkb194bWl0X2ZyYW1lLAorCS5uZG9fY2hhbmdlX210dSAJPSBjMl9wc2V1ZG9fY2hhbmdlX210dSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyB2b2lkIHNldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7Ci0JbmV0ZGV2LT5vcGVuID0gYzJfcHNldWRvX3VwOwotCW5ldGRldi0+c3RvcCA9IGMyX3BzZXVkb19kb3duOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gYzJfcHNldWRvX3htaXRfZnJhbWU7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBOVUxMOwotCW5ldGRldi0+dHhfdGltZW91dCA9IE5VTEw7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBOVUxMOwotCW5ldGRldi0+Y2hhbmdlX210dSA9IGMyX3BzZXVkb19jaGFuZ2VfbXR1OworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZjMl9wc2V1ZG9fbmV0ZGV2X29wczsKKwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSAwOwogCW5ldGRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKIAluZXRkZXYtPm10dSA9IDE1MDA7CkBAIC03MzUsNyArNzM2LDYgQEAKIAluZXRkZXYtPmFkZHJfbGVuID0gRVRIX0FMRU47CiAJbmV0ZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwogCW5ldGRldi0+ZmxhZ3MgfD0gSUZGX05PQVJQOwotCXJldHVybjsKIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpjMl9wc2V1ZG9fbmV0ZGV2X2luaXQoc3RydWN0IGMyX2RldiAqYzJkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCmluZGV4IDRkY2YwOGIuLmE0YTgyYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCkBAIC00NTAsNyArNDUwLDcgQEAKIAlpZiAoKENRRV9PUENPREUoKmNxZSkgPT0gVDNfUkVBRF9SRVNQKSAmJiBTUV9UWVBFKCpjcWUpKQogCQlyZXR1cm4gMDsKIAotCWlmICgoQ1FFX09QQ09ERSgqY3FlKSA9PSBUM19TRU5EKSAmJiBSUV9UWVBFKCpjcWUpICYmCisJaWYgKENRRV9TRU5EX09QQ09ERSgqY3FlKSAmJiBSUV9UWVBFKCpjcWUpICYmCiAJICAgIFFfRU1QVFkod3EtPnJxX3JwdHIsIHdxLT5ycV93cHRyKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTcwMSw2ICs3MDEsOSBAQAogCXUzMiBzdGFnX2lkeDsKIAl1MzIgd3B0cjsKIAorCWlmIChyZGV2X3AtPmZsYWdzKQorCQlyZXR1cm4gLUVJTzsKKwogCXN0YWdfc3RhdGUgPSBzdGFnX3N0YXRlID4gMDsKIAlzdGFnX2lkeCA9ICgqc3RhZykgPj4gODsKIApAQCAtOTM4LDYgKzk0MSwyMyBAQAogCWlmICghcmRldl9wLT50M2NkZXZfcCkKIAkJcmRldl9wLT50M2NkZXZfcCA9IGRldjJ0M2NkZXYobmV0ZGV2X3ApOwogCXJkZXZfcC0+dDNjZGV2X3AtPnVscCA9ICh2b2lkICopIHJkZXZfcDsKKworCWVyciA9IHJkZXZfcC0+dDNjZGV2X3AtPmN0bChyZGV2X3AtPnQzY2Rldl9wLCBHRVRfRU1CRURERURfSU5GTywKKwkJCQkJICYocmRldl9wLT5md19pbmZvKSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzIHQzY2Rldl9wKCVwKS0+Y3RsIHJldHVybmVkIGVycm9yICVkLlxuIiwKKwkJICAgICBfX2Z1bmNfXywgcmRldl9wLT50M2NkZXZfcCwgZXJyKTsKKwkJZ290byBlcnIxOworCX0KKwlpZiAoR19GV19WRVJTSU9OX01BSk9SKHJkZXZfcC0+ZndfaW5mby5md192ZXJzKSAhPSBDWElPX0ZXX01BSikgeworCQlwcmludGsoS0VSTl9FUlIgTU9EICJmYXRhbCBmaXJtd2FyZSB2ZXJzaW9uIG1pc21hdGNoOiAiCisJCSAgICAgICAibmVlZCB2ZXJzaW9uICV1IGJ1dCBhZGFwdGVyIGhhcyB2ZXJzaW9uICV1XG4iLAorCQkgICAgICAgQ1hJT19GV19NQUosCisJCSAgICAgICBHX0ZXX1ZFUlNJT05fTUFKT1IocmRldl9wLT5md19pbmZvLmZ3X3ZlcnMpKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnIxOworCX0KKwogCWVyciA9IHJkZXZfcC0+dDNjZGV2X3AtPmN0bChyZGV2X3AtPnQzY2Rldl9wLCBSRE1BX0dFVF9QQVJBTVMsCiAJCQkJCSAmKHJkZXZfcC0+cm5pY19pbmZvKSk7CiAJaWYgKGVycikgewpAQCAtMTIwNCwxMSArMTIyNCwxMiBAQAogCQl9CiAKIAkJLyogaW5jb21pbmcgU0VORCB3aXRoIG5vIHJlY2VpdmUgcG9zdGVkIGZhaWx1cmVzICovCi0JCWlmICgoQ1FFX09QQ09ERSgqaHdfY3FlKSA9PSBUM19TRU5EKSAmJiBSUV9UWVBFKCpod19jcWUpICYmCisJCWlmIChDUUVfU0VORF9PUENPREUoKmh3X2NxZSkgJiYgUlFfVFlQRSgqaHdfY3FlKSAmJgogCQkgICAgUV9FTVBUWSh3cS0+cnFfcnB0ciwgd3EtPnJxX3dwdHIpKSB7CiAJCQlyZXQgPSAtMTsKIAkJCWdvdG8gc2tpcF9jcWU7CiAJCX0KKwkJQlVHX09OKCgqY3FlX2ZsdXNoZWQgPT0gMCkgJiYgIVNXX0NRRSgqaHdfY3FlKSk7CiAJCWdvdG8gcHJvY19jcWU7CiAJfQogCkBAIC0xMjIzLDYgKzEyNDQsMTMgQEAKIAkJICogdGhlbiB3ZSBjb21wbGV0ZSB0aGlzIHdpdGggVFBUX0VSUl9NU04gYW5kIG1hcmsgdGhlIHdxIGluCiAJCSAqIGVycm9yLgogCQkgKi8KKworCQlpZiAoUV9FTVBUWSh3cS0+cnFfcnB0ciwgd3EtPnJxX3dwdHIpKSB7CisJCQl3cS0+ZXJyb3IgPSAxOworCQkJcmV0ID0gLTE7CisJCQlnb3RvIHNraXBfY3FlOworCQl9CisKIAkJaWYgKHVubGlrZWx5KChDUUVfV1JJRF9NU04oKmh3X2NxZSkgIT0gKHdxLT5ycV9ycHRyICsgMSkpKSkgewogCQkJd3EtPmVycm9yID0gMTsKIAkJCWh3X2NxZS0+aGVhZGVyIHw9IGh0b25sKFZfQ1FFX1NUQVRVUyhUUFRfRVJSX01TTikpOwpAQCAtMTI3Nyw2ICsxMzA1LDcgQEAKIAkJCWN4aW9faGFsX3BibHBvb2xfZnJlZSh3cS0+cmRldiwKIAkJCQl3cS0+cnFbUV9QVFIySURYKHdxLT5ycV9ycHRyLAogCQkJCXdxLT5ycV9zaXplX2xvZzIpXS5wYmxfYWRkciwgVDNfU1RBRzBfUEJMX1NJWkUpOworCQlCVUdfT04oUV9FTVBUWSh3cS0+cnFfcnB0ciwgd3EtPnJxX3dwdHIpKTsKIAkJd3EtPnJxX3JwdHIrKzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKaW5kZXggNjU2ZmU0Ny4uMDk0YTY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKQEAgLTYxLDYgKzYxLDggQEAKIAogI2RlZmluZSBUM19NQVhfREVWX05BTUVfTEVOIDMyCiAKKyNkZWZpbmUgQ1hJT19GV19NQUogNworCiBzdHJ1Y3QgY3hpb19oYWxfY3RybF9xcCB7CiAJdTMyIHdwdHI7CiAJdTMyIHJwdHI7CkBAIC0xMDgsNiArMTEwLDkgQEAKIAlzdHJ1Y3QgZ2VuX3Bvb2wgKnBibF9wb29sOwogCXN0cnVjdCBnZW5fcG9vbCAqcnF0X3Bvb2w7CiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKwlzdHJ1Y3QgY2hfZW1iZWRkZWRfaW5mbyBmd19pbmZvOworCXUzMglmbGFnczsKKyNkZWZpbmUJQ1hJT19FUlJPUl9GQVRBTAkxCiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBjeGlvX251bV9zdGFncyhzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2X3ApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaAppbmRleCAwNDYxOGY3Li5mZjliZTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmgKQEAgLTYwNCw2ICs2MDQsMTIgQEAKICNkZWZpbmUgQ1FFX1NUQVRVUyh4KSAgICAgKEdfQ1FFX1NUQVRVUyhiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkpCiAjZGVmaW5lIENRRV9PUENPREUoeCkgICAgIChHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpKQogCisjZGVmaW5lIENRRV9TRU5EX09QQ09ERSh4KSggXAorCShHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLmhlYWRlcikpID09IFQzX1NFTkQpIHx8IFwKKwkoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSA9PSBUM19TRU5EX1dJVEhfU0UpIHx8IFwKKwkoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS5oZWFkZXIpKSA9PSBUM19TRU5EX1dJVEhfSU5WKSB8fCBcCisJKEdfQ1FFX09QQ09ERShiZTMyX3RvX2NwdSgoeCkuaGVhZGVyKSkgPT0gVDNfU0VORF9XSVRIX1NFX0lOVikpCisKICNkZWZpbmUgQ1FFX0xFTih4KSAgICAgICAgKGJlMzJfdG9fY3B1KCh4KS5sZW4pKQogCiAvKiB1c2VkIGZvciBSUSBjb21wbGV0aW9uIHByb2Nlc3NpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jCmluZGV4IDQ0ODljODkuLjM3YTRmYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYwpAQCAtNTEsMTMgKzUxLDE1IEBACiAKIHN0YXRpYyB2b2lkIG9wZW5fcm5pY19kZXYoc3RydWN0IHQzY2RldiAqKTsKIHN0YXRpYyB2b2lkIGNsb3NlX3JuaWNfZGV2KHN0cnVjdCB0M2NkZXYgKik7CitzdGF0aWMgdm9pZCBpd2NoX2Vycl9oYW5kbGVyKHN0cnVjdCB0M2NkZXYgKiwgdTMyLCB1MzIpOwogCiBzdHJ1Y3QgY3hnYjNfY2xpZW50IHQzY19jbGllbnQgPSB7CiAJLm5hbWUgPSAiaXdfY3hnYjMiLAogCS5hZGQgPSBvcGVuX3JuaWNfZGV2LAogCS5yZW1vdmUgPSBjbG9zZV9ybmljX2RldiwKIAkuaGFuZGxlcnMgPSB0M2NfaGFuZGxlcnMsCi0JLnJlZGlyZWN0ID0gaXdjaF9lcF9yZWRpcmVjdAorCS5yZWRpcmVjdCA9IGl3Y2hfZXBfcmVkaXJlY3QsCisJLmVycl9oYW5kbGVyID0gaXdjaF9lcnJfaGFuZGxlcgogfTsKIAogc3RhdGljIExJU1RfSEVBRChkZXZfbGlzdCk7CkBAIC0xNjAsNiArMTYyLDE3IEBACiAJbXV0ZXhfdW5sb2NrKCZkZXZfbXV0ZXgpOwogfQogCitzdGF0aWMgdm9pZCBpd2NoX2Vycl9oYW5kbGVyKHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBzdGF0dXMsIHUzMiBlcnJvcikKK3sKKwlzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2ID0gdGRldi0+dWxwOworCisJaWYgKHN0YXR1cyA9PSBPRkZMT0FEX1NUQVRVU19ET1dOKQorCQlyZGV2LT5mbGFncyA9IENYSU9fRVJST1JfRkFUQUw7CisKKwlyZXR1cm47CisKK30KKwogc3RhdGljIGludCBfX2luaXQgaXdjaF9pbml0X21vZHVsZSh2b2lkKQogewogCWludCBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYwppbmRleCA0NGU5MzZlLi44Njk5OTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKQEAgLTE2NzgsNiArMTY3OCw5IEBACiB7CiAJc3RydWN0IGl3Y2hfZXAgKmVwID0gY3R4OwogCisJaWYgKHN0YXRlX3JlYWQoJmVwLT5jb20pICE9IEZQRFVfTU9ERSkKKwkJcmV0dXJuIENQTF9SRVRfQlVGX0RPTkU7CisKIAlQREJHKCIlcyBlcCAlcFxuIiwgX19mdW5jX18sIGVwKTsKIAlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgY3BsX3JkbWFfdGVybWluYXRlKSk7CiAJUERCRygiJXMgc2F2aW5nICVkIGJ5dGVzIG9mIHRlcm0gbXNnXG4iLCBfX2Z1bmNfXywgc2tiLT5sZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfZXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2V2LmMKaW5kZXggN2I2N2E2Ny4uNzQzYzVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfZXYuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9ldi5jCkBAIC0xNzksMTEgKzE3OSw2IEBACiAJY2FzZSBUUFRfRVJSX0JPVU5EOgogCWNhc2UgVFBUX0VSUl9JTlZBTElEQVRFX1NIQVJFRF9NUjoKIAljYXNlIFRQVF9FUlJfSU5WQUxJREFURV9NUl9XSVRIX01XX0JPVU5EOgotCQlwcmludGsoS0VSTl9FUlIgIiVzIC0gQ1FFIEVyciBxcGlkIDB4JXggb3Bjb2RlICVkIHN0YXR1cyAweCV4ICIKLQkJICAgICAgICJ0eXBlICVkIHdyaWQuaGkgMHgleCB3cmlkLmxvIDB4JXggXG4iLCBfX2Z1bmNfXywKLQkJICAgICAgIENRRV9RUElEKHJzcF9tc2ctPmNxZSksIENRRV9PUENPREUocnNwX21zZy0+Y3FlKSwKLQkJICAgICAgIENRRV9TVEFUVVMocnNwX21zZy0+Y3FlKSwgQ1FFX1RZUEUocnNwX21zZy0+Y3FlKSwKLQkJICAgICAgIENRRV9XUklEX0hJKHJzcF9tc2ctPmNxZSksIENRRV9XUklEX0xPVyhyc3BfbXNnLT5jcWUpKTsKIAkJKCpjaHAtPmliY3EuY29tcF9oYW5kbGVyKSgmY2hwLT5pYmNxLCBjaHAtPmliY3EuY3FfY29udGV4dCk7CiAJCXBvc3RfcXBfZXZlbnQocm5pY3AsIGNocCwgcnNwX21zZywgSUJfRVZFTlRfUVBfQUNDRVNTX0VSUiwgMSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKaW5kZXggMTk2NjFiMi4uYzc1OGZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCkBAIC05OSw4ICs5OSw4IEBACiAJaWYgKHdyLT5vcGNvZGUgPT0gSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTSkgewogCQlwbGVuID0gNDsKIAkJd3FlLT53cml0ZS5zZ2xbMF0uc3RhZyA9IHdyLT5leC5pbW1fZGF0YTsKLQkJd3FlLT53cml0ZS5zZ2xbMF0ubGVuID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigwKTsKLQkJd3FlLT53cml0ZS5udW1fc2dsZSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMCk7CisJCXdxZS0+d3JpdGUuc2dsWzBdLmxlbiA9IGNwdV90b19iZTMyKDApOworCQl3cWUtPndyaXRlLm51bV9zZ2xlID0gY3B1X3RvX2JlMzIoMCk7CiAJCSpmbGl0X2NudCA9IDY7CiAJfSBlbHNlIHsKIAkJcGxlbiA9IDA7CkBAIC0xOTUsMTUgKzE5NSwxMiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogVEJEOiB0aGlzIGlzIGdvaW5nIHRvIGJlIG1vdmVkIHRvIGZpcm13YXJlLiBNaXNzaW5nIHBkaWQvcXBpZCBjaGVjayBmb3Igbm93LgotICovCiBzdGF0aWMgaW50IGl3Y2hfc2dsMnBibF9tYXAoc3RydWN0IGl3Y2hfZGV2ICpyaHAsIHN0cnVjdCBpYl9zZ2UgKnNnX2xpc3QsCiAJCQkgICAgdTMyIG51bV9zZ2xlLCB1MzIgKiBwYmxfYWRkciwgdTggKiBwYWdlX3NpemUpCiB7CiAJaW50IGk7CiAJc3RydWN0IGl3Y2hfbXIgKm1ocDsKLQl1MzIgb2Zmc2V0OworCXU2NCBvZmZzZXQ7CiAJZm9yIChpID0gMDsgaSA8IG51bV9zZ2xlOyBpKyspIHsKIAogCQltaHAgPSBnZXRfbWhwKHJocCwgKHNnX2xpc3RbaV0ubGtleSkgPj4gOCk7CkBAIC0yMzUsOCArMjMyLDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCW9mZnNldCA9IHNnX2xpc3RbaV0uYWRkciAtIG1ocC0+YXR0ci52YV9mYm87Ci0JCW9mZnNldCArPSAoKHUzMikgbWhwLT5hdHRyLnZhX2ZibykgJQotCQkgICAgICAgICAgKDFVTCA8PCAoMTIgKyBtaHAtPmF0dHIucGFnZV9zaXplKSk7CisJCW9mZnNldCArPSBtaHAtPmF0dHIudmFfZmJvICYKKwkJCSAgKCgxVUwgPDwgKDEyICsgbWhwLT5hdHRyLnBhZ2Vfc2l6ZSkpIC0gMSk7CiAJCXBibF9hZGRyW2ldID0gKChtaHAtPmF0dHIucGJsX2FkZHIgLQogCQkJICAgICAgICByaHAtPnJkZXYucm5pY19pbmZvLnBibF9iYXNlKSA+PiAzKSArCiAJCQkgICAgICAob2Zmc2V0ID4+ICgxMiArIG1ocC0+YXR0ci5wYWdlX3NpemUpKTsKQEAgLTI2Niw4ICsyNjMsOCBAQAogCQl3cWUtPnJlY3Yuc2dsW2ldLmxlbiA9IGNwdV90b19iZTMyKHdyLT5zZ19saXN0W2ldLmxlbmd0aCk7CiAKIAkJLyogdG8gaW4gdGhlIFdRRSA9PSB0aGUgb2Zmc2V0IGludG8gdGhlIHBhZ2UgKi8KLQkJd3FlLT5yZWN2LnNnbFtpXS50byA9IGNwdV90b19iZTY0KCgodTMyKSB3ci0+c2dfbGlzdFtpXS5hZGRyKSAlCi0JCQkJKDFVTCA8PCAoMTIgKyBwYWdlX3NpemVbaV0pKSk7CisJCXdxZS0+cmVjdi5zZ2xbaV0udG8gPSBjcHVfdG9fYmU2NCgoKHUzMil3ci0+c2dfbGlzdFtpXS5hZGRyKSAmCisJCQkJKCgxVUwgPDwgKDEyICsgcGFnZV9zaXplW2ldKSkgLSAxKSk7CiAKIAkJLyogcGJsX2FkZHIgaXMgdGhlIGFkYXB0ZXJzIGFkZHJlc3MgaW4gdGhlIFBCTCAqLwogCQl3cWUtPnJlY3YucGJsX2FkZHJbaV0gPSBjcHVfdG9fYmUzMihwYmxfYWRkcltpXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYwppbmRleCA0NDQ0N2FhLi5jNTY4YjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMKQEAgLTQ2LDExICs0NiwxMSBAQAogI2luY2x1ZGUgImVoY2FfaXZlcmJzLmgiCiAjaW5jbHVkZSAiaGNwX2lmLmgiCiAKLSNkZWZpbmUgSUJfTUFEX1NUQVRVU19SRURJUkVDVAkJX19jb25zdGFudF9odG9ucygweDAwMDIpCi0jZGVmaW5lIElCX01BRF9TVEFUVVNfVU5TVVBfVkVSU0lPTglfX2NvbnN0YW50X2h0b25zKDB4MDAwNCkKLSNkZWZpbmUgSUJfTUFEX1NUQVRVU19VTlNVUF9NRVRIT0QJX19jb25zdGFudF9odG9ucygweDAwMDgpCisjZGVmaW5lIElCX01BRF9TVEFUVVNfUkVESVJFQ1QJCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfTUFEX1NUQVRVU19VTlNVUF9WRVJTSU9OCWNwdV90b19iZTE2KDB4MDAwNCkKKyNkZWZpbmUgSUJfTUFEX1NUQVRVU19VTlNVUF9NRVRIT0QJY3B1X3RvX2JlMTYoMHgwMDA4KQogCi0jZGVmaW5lIElCX1BNQV9DTEFTU19QT1JUX0lORk8JCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQorI2RlZmluZSBJQl9QTUFfQ0xBU1NfUE9SVF9JTkZPCQljcHVfdG9fYmUxNigweDAwMDEpCiAKIC8qKgogICogZWhjYV9kZWZpbmVfc3FwIC0gRGVmaW5lcyBzcGVjaWFsIHF1ZXVlIHBhaXIgMSAoR1NJIFFQKS4gV2hlbiBzcGVjaWFsIHF1ZXVlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKaW5kZXggNjljMGNlMy4uY2I5ZGFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwpAQCAtMjcxNSw3ICsyNzE1LDcgQEAKICAqIHRvIHByZXZlbnQgSG9MIGJsb2NraW5nLCB0aGVuIHN0YXJ0IHRoZSBIb0wgdGltZXIgdGhhdAogICogcGVyaW9kaWNhbGx5IGNvbnRpbnVlcywgdGhlbiBzdG9wIHByb2NzLCBzbyB0aGV5IGNhbiBkZXRlY3QKICAqIGxpbmsgZG93biBpZiB0aGV5IHdhbnQsIGFuZCBkbyBzb21ldGhpbmcgYWJvdXQgaXQuCi0gKiBUaW1lciBtYXkgYWxyZWFkeSBiZSBydW5uaW5nLCBzbyB1c2UgX19tb2RfdGltZXIsIG5vdCBhZGRfdGltZXIuCisgKiBUaW1lciBtYXkgYWxyZWFkeSBiZSBydW5uaW5nLCBzbyB1c2UgbW9kX3RpbWVyLCBub3QgYWRkX3RpbWVyLgogICovCiB2b2lkIGlwYXRoX2hvbF9kb3duKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKQEAgLTI3MjQsNyArMjcyNCw3IEBACiAJZGQtPmlwYXRoX2hvbF9uZXh0ID0gSVBBVEhfSE9MX0RPV05DT05UOwogCWRkLT5pcGF0aF9ob2xfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKwogCQltc2Vjc190b19qaWZmaWVzKGlwYXRoX2hvbF90aW1lb3V0X21zKTsKLQlfX21vZF90aW1lcigmZGQtPmlwYXRoX2hvbF90aW1lciwgZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzKTsKKwltb2RfdGltZXIoJmRkLT5pcGF0aF9ob2xfdGltZXIsIGRkLT5pcGF0aF9ob2xfdGltZXIuZXhwaXJlcyk7CiB9CiAKIC8qCkBAIC0yNzYzLDcgKzI3NjMsNyBAQAogCWVsc2UgewogCQlkZC0+aXBhdGhfaG9sX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKIAkJCW1zZWNzX3RvX2ppZmZpZXMoaXBhdGhfaG9sX3RpbWVvdXRfbXMpOwotCQlfX21vZF90aW1lcigmZGQtPmlwYXRoX2hvbF90aW1lciwKKwkJbW9kX3RpbWVyKCZkZC0+aXBhdGhfaG9sX3RpbWVyLAogCQkJZGQtPmlwYXRoX2hvbF90aW1lci5leHBpcmVzKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMKaW5kZXggZGMzNzI3Ny4uZmM3MTgxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYwpAQCAtNzcyLDggKzc3Miw4IEBACiAJCQkgIjB4JXgsIG5vdCAweCV4XG4iLCBjc3VtLCBpZnAtPmlmX2NzdW0pOwogCQlnb3RvIGRvbmU7CiAJfQotCWlmICgqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gMFVMTCB8fAotCSAgICAqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gX19jb25zdGFudF9jcHVfdG9fYmU2NCgtMUxMKSkgeworCWlmICgqKF9fYmU2NCAqKSBpZnAtPmlmX2d1aWQgPT0gY3B1X3RvX2JlNjQoMCkgfHwKKwkgICAgKihfX2JlNjQgKikgaWZwLT5pZl9ndWlkID09IH5jcHVfdG9fYmU2NCgwKSkgewogCQlpcGF0aF9kZXZfZXJyKGRkLCAiSW52YWxpZCBHVUlEICVsbHggZnJvbSBmbGFzaDsgIgogCQkJICAgICAgImlnbm9yaW5nXG4iLAogCQkJICAgICAgKih1bnNpZ25lZCBsb25nIGxvbmcgKikgaWZwLT5pZl9ndWlkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYwppbmRleCA2NGFlZWZiLi4wNzc4NzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCkBAIC00NTUsNyArNDU1LDcgQEAKIAlpZiAoIWFkZHJzKSB7CiAJCWlwYXRoX2Rldl9lcnIoZGQsICJmYWlsZWQgdG8gYWxsb2NhdGUgc2hhZG93IGRtYSBoYW5kbGUgIgogCQkJICAgICAgImFycmF5LCBubyBleHBlY3RlZCBzZW5kcyFcbiIpOwotCQl2ZnJlZShkZC0+aXBhdGhfcGFnZXNoYWRvdyk7CisJCXZmcmVlKHBhZ2VzKTsKIAkJZGQtPmlwYXRoX3BhZ2VzaGFkb3cgPSBOVUxMOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCmluZGV4IDE3YTEyMzEuLjE2YTcwMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKQEAgLTM3LDEwICszNywxMCBAQAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCiAjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCiAKLSNkZWZpbmUgSUJfU01QX1VOU1VQX1ZFUlNJT04JX19jb25zdGFudF9odG9ucygweDAwMDQpCi0jZGVmaW5lIElCX1NNUF9VTlNVUF9NRVRIT0QJX19jb25zdGFudF9odG9ucygweDAwMDgpCi0jZGVmaW5lIElCX1NNUF9VTlNVUF9NRVRIX0FUVFIJX19jb25zdGFudF9odG9ucygweDAwMEMpCi0jZGVmaW5lIElCX1NNUF9JTlZBTElEX0ZJRUxECV9fY29uc3RhbnRfaHRvbnMoMHgwMDFDKQorI2RlZmluZSBJQl9TTVBfVU5TVVBfVkVSU0lPTgljcHVfdG9fYmUxNigweDAwMDQpCisjZGVmaW5lIElCX1NNUF9VTlNVUF9NRVRIT0QJY3B1X3RvX2JlMTYoMHgwMDA4KQorI2RlZmluZSBJQl9TTVBfVU5TVVBfTUVUSF9BVFRSCWNwdV90b19iZTE2KDB4MDAwQykKKyNkZWZpbmUgSUJfU01QX0lOVkFMSURfRklFTEQJY3B1X3RvX2JlMTYoMHgwMDFDKQogCiBzdGF0aWMgaW50IHJlcGx5KHN0cnVjdCBpYl9zbXAgKnNtcCkKIHsKQEAgLTc4OSwxMiArNzg5LDEyIEBACiAJcmV0dXJuIHJlY3Zfc3Vibl9nZXRfcGtleXRhYmxlKHNtcCwgaWJkZXYpOwogfQogCi0jZGVmaW5lIElCX1BNQV9DTEFTU19QT1JUX0lORk8JCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQotI2RlZmluZSBJQl9QTUFfUE9SVF9TQU1QTEVTX0NPTlRST0wJX19jb25zdGFudF9odG9ucygweDAwMTApCi0jZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfUkVTVUxUCV9fY29uc3RhbnRfaHRvbnMoMHgwMDExKQotI2RlZmluZSBJQl9QTUFfUE9SVF9DT1VOVEVSUwkJX19jb25zdGFudF9odG9ucygweDAwMTIpCi0jZGVmaW5lIElCX1BNQV9QT1JUX0NPVU5URVJTX0VYVAlfX2NvbnN0YW50X2h0b25zKDB4MDAxRCkKLSNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19SRVNVTFRfRVhUCV9fY29uc3RhbnRfaHRvbnMoMHgwMDFFKQorI2RlZmluZSBJQl9QTUFfQ0xBU1NfUE9SVF9JTkZPCQljcHVfdG9fYmUxNigweDAwMDEpCisjZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfQ09OVFJPTAljcHVfdG9fYmUxNigweDAwMTApCisjZGVmaW5lIElCX1BNQV9QT1JUX1NBTVBMRVNfUkVTVUxUCWNwdV90b19iZTE2KDB4MDAxMSkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfQ09VTlRFUlMJCWNwdV90b19iZTE2KDB4MDAxMikKKyNkZWZpbmUgSUJfUE1BX1BPUlRfQ09VTlRFUlNfRVhUCWNwdV90b19iZTE2KDB4MDAxRCkKKyNkZWZpbmUgSUJfUE1BX1BPUlRfU0FNUExFU19SRVNVTFRfRVhUCWNwdV90b19iZTE2KDB4MDAxRSkKIAogc3RydWN0IGliX3BlcmYgewogCXU4IGJhc2VfdmVyc2lvbjsKQEAgLTg4NCwxOSArODg0LDE5IEBACiAJX19iZTMyIHBvcnRfcmN2X3BhY2tldHM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBJQl9QTUFfU0VMX1NZTUJPTF9FUlJPUgkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQotI2RlZmluZSBJQl9QTUFfU0VMX0xJTktfRVJST1JfUkVDT1ZFUlkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQotI2RlZmluZSBJQl9QTUFfU0VMX0xJTktfRE9XTkVECQkJX19jb25zdGFudF9odG9ucygweDAwMDQpCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfRVJST1JTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1JDVl9SRU1QSFlTX0VSUk9SUwlfX2NvbnN0YW50X2h0b25zKDB4MDAxMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfRElTQ0FSRFMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDQwKQotI2RlZmluZSBJQl9QTUFfU0VMX0xPQ0FMX0xJTktfSU5URUdSSVRZX0VSUk9SUwlfX2NvbnN0YW50X2h0b25zKDB4MDIwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9FWENFU1NJVkVfQlVGRkVSX09WRVJSVU5TCV9fY29uc3RhbnRfaHRvbnMoMHgwNDAwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfVkwxNV9EUk9QUEVECQlfX2NvbnN0YW50X2h0b25zKDB4MDgwMCkKLSNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfREFUQQkJX19jb25zdGFudF9odG9ucygweDEwMDApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfREFUQQkJX19jb25zdGFudF9odG9ucygweDIwMDApCi0jZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9YTUlUX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHg0MDAwKQotI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHg4MDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1NZTUJPTF9FUlJPUgkJCWNwdV90b19iZTE2KDB4MDAwMSkKKyNkZWZpbmUgSUJfUE1BX1NFTF9MSU5LX0VSUk9SX1JFQ09WRVJZCQljcHVfdG9fYmUxNigweDAwMDIpCisjZGVmaW5lIElCX1BNQV9TRUxfTElOS19ET1dORUQJCQljcHVfdG9fYmUxNigweDAwMDQpCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfRVJST1JTCQljcHVfdG9fYmUxNigweDAwMDgpCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9SQ1ZfUkVNUEhZU19FUlJPUlMJY3B1X3RvX2JlMTYoMHgwMDEwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfWE1JVF9ESVNDQVJEUwkJY3B1X3RvX2JlMTYoMHgwMDQwKQorI2RlZmluZSBJQl9QTUFfU0VMX0xPQ0FMX0xJTktfSU5URUdSSVRZX0VSUk9SUwljcHVfdG9fYmUxNigweDAyMDApCisjZGVmaW5lIElCX1BNQV9TRUxfRVhDRVNTSVZFX0JVRkZFUl9PVkVSUlVOUwljcHVfdG9fYmUxNigweDA0MDApCisjZGVmaW5lIElCX1BNQV9TRUxfUE9SVF9WTDE1X0RST1BQRUQJCWNwdV90b19iZTE2KDB4MDgwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfREFUQQkJY3B1X3RvX2JlMTYoMHgxMDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX0RBVEEJCWNwdV90b19iZTE2KDB4MjAwMCkKKyNkZWZpbmUgSUJfUE1BX1NFTF9QT1JUX1hNSVRfUEFDS0VUUwkJY3B1X3RvX2JlMTYoMHg0MDAwKQorI2RlZmluZSBJQl9QTUFfU0VMX1BPUlRfUkNWX1BBQ0tFVFMJCWNwdV90b19iZTE2KDB4ODAwMCkKIAogc3RydWN0IGliX3BtYV9wb3J0Y291bnRlcnNfZXh0IHsKIAl1OCByZXNlcnZlZDsKQEAgLTkxMywxNCArOTEzLDE0IEBACiAJX19iZTY0IHBvcnRfbXVsdGljYXN0X3Jjdl9wYWNrZXRzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX0RBVEEJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAxKQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1JDVl9EQVRBCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX1BBQ0tFVFMJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1JDVl9QQUNLRVRTCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwOCkKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9VTklfWE1JVF9QQUNLRVRTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEwKQotI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1VOSV9SQ1ZfUEFDS0VUUwlfX2NvbnN0YW50X2h0b25zKDB4MDAyMCkKLSNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9YTUlUX1BBQ0tFVFMJX19jb25zdGFudF9odG9ucygweDAwNDApCi0jZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfTVVMVElfUkNWX1BBQ0tFVFMJX19jb25zdGFudF9odG9ucygweDAwODApCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfWE1JVF9EQVRBCQljcHVfdG9fYmUxNigweDAwMDEpCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfUkNWX0RBVEEJCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX1BBQ0tFVFMJCWNwdV90b19iZTE2KDB4MDAwNCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9SQ1ZfUEFDS0VUUwkJY3B1X3RvX2JlMTYoMHgwMDA4KQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1VOSV9YTUlUX1BBQ0tFVFMJY3B1X3RvX2JlMTYoMHgwMDEwKQorI2RlZmluZSBJQl9QTUFfU0VMWF9QT1JUX1VOSV9SQ1ZfUEFDS0VUUwljcHVfdG9fYmUxNigweDAwMjApCisjZGVmaW5lIElCX1BNQV9TRUxYX1BPUlRfTVVMVElfWE1JVF9QQUNLRVRTCWNwdV90b19iZTE2KDB4MDA0MCkKKyNkZWZpbmUgSUJfUE1BX1NFTFhfUE9SVF9NVUxUSV9SQ1ZfUEFDS0VUUwljcHVfdG9fYmUxNigweDAwODApCiAKIHN0YXRpYyBpbnQgcmVjdl9wbWFfZ2V0X2NsYXNzcG9ydGluZm8oc3RydWN0IGliX3BlcmYgKnBtcCkKIHsKQEAgLTkzMyw3ICs5MzMsNyBAQAogCQlwbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKIAogCS8qIEluZGljYXRlIEFsbFBvcnRTZWxlY3QgaXMgdmFsaWQgKG9ubHkgb25lIHBvcnQgYW55d2F5KSAqLwotCXAtPmNhcF9tYXNrID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigxIDw8IDgpOworCXAtPmNhcF9tYXNrID0gY3B1X3RvX2JlMTYoMSA8PCA4KTsKIAlwLT5iYXNlX3ZlcnNpb24gPSAxOwogCXAtPmNsYXNzX3ZlcnNpb24gPSAxOwogCS8qCkBAIC05NTEsMTIgKzk1MSwxMSBAQAogICogV2Ugc3VwcG9ydCA1IGNvdW50ZXJzIHdoaWNoIG9ubHkgY291bnQgdGhlIG1hbmRhdG9yeSBxdWFudGl0aWVzLgogICovCiAjZGVmaW5lIENPVU5URVJfTUFTSyhxLCBuKSAocSA8PCAoKDkgLSBuKSAqIDMpKQotI2RlZmluZSBDT1VOVEVSX01BU0swXzkgXAotCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoQ09VTlRFUl9NQVNLKDEsIDApIHwgXAotCQkJICAgICAgIENPVU5URVJfTUFTSygxLCAxKSB8IFwKLQkJCSAgICAgICBDT1VOVEVSX01BU0soMSwgMikgfCBcCi0JCQkgICAgICAgQ09VTlRFUl9NQVNLKDEsIDMpIHwgXAotCQkJICAgICAgIENPVU5URVJfTUFTSygxLCA0KSkKKyNkZWZpbmUgQ09VTlRFUl9NQVNLMF85IGNwdV90b19iZTMyKENPVU5URVJfTUFTSygxLCAwKSB8IFwKKwkJCQkgICAgQ09VTlRFUl9NQVNLKDEsIDEpIHwgXAorCQkJCSAgICBDT1VOVEVSX01BU0soMSwgMikgfCBcCisJCQkJICAgIENPVU5URVJfTUFTSygxLCAzKSB8IFwKKwkJCQkgICAgQ09VTlRFUl9NQVNLKDEsIDQpKQogCiBzdGF0aWMgaW50IHJlY3ZfcG1hX2dldF9wb3J0c2FtcGxlc2NvbnRyb2woc3RydWN0IGliX3BlcmYgKnBtcCwKIAkJCQkJICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQpCkBAIC0xMTM3LDcgKzExMzYsNyBAQAogCQlzdGF0dXMgPSBkZXYtPnBtYV9zYW1wbGVfc3RhdHVzOwogCXAtPnNhbXBsZV9zdGF0dXMgPSBjcHVfdG9fYmUxNihzdGF0dXMpOwogCS8qIDY0IGJpdHMgKi8KLQlwLT5leHRlbmRlZF93aWR0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHg4MDAwMDAwMCk7CisJcC0+ZXh0ZW5kZWRfd2lkdGggPSBjcHVfdG9fYmUzMigweDgwMDAwMDAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXYtPnBtYV9jb3VudGVyX3NlbGVjdCk7IGkrKykKIAkJcC0+Y291bnRlcltpXSA9IChzdGF0dXMgIT0gSUJfUE1BX1NBTVBMRV9TVEFUVVNfRE9ORSkgPyAwIDoKIAkJICAgIGNwdV90b19iZTY0KApAQCAtMTE4NSw3ICsxMTg0LDcgQEAKIAkJcG1wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CiAKIAlpZiAoY250cnMuc3ltYm9sX2Vycm9yX2NvdW50ZXIgPiAweEZGRkZVTCkKLQkJcC0+c3ltYm9sX2Vycm9yX2NvdW50ZXIgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJCXAtPnN5bWJvbF9lcnJvcl9jb3VudGVyID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAllbHNlCiAJCXAtPnN5bWJvbF9lcnJvcl9jb3VudGVyID0KIAkJCWNwdV90b19iZTE2KCh1MTYpY250cnMuc3ltYm9sX2Vycm9yX2NvdW50ZXIpOwpAQCAtMTE5OSwxNyArMTE5OCwxNyBAQAogCWVsc2UKIAkJcC0+bGlua19kb3duZWRfY291bnRlciA9ICh1OCljbnRycy5saW5rX2Rvd25lZF9jb3VudGVyOwogCWlmIChjbnRycy5wb3J0X3Jjdl9lcnJvcnMgPiAweEZGRkZVTCkKLQkJcC0+cG9ydF9yY3ZfZXJyb3JzID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCQlwLT5wb3J0X3Jjdl9lcnJvcnMgPSBjcHVfdG9fYmUxNigweEZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF9yY3ZfZXJyb3JzID0KIAkJCWNwdV90b19iZTE2KCh1MTYpIGNudHJzLnBvcnRfcmN2X2Vycm9ycyk7CiAJaWYgKGNudHJzLnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID4gMHhGRkZGVUwpCi0JCXAtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0gX19jb25zdGFudF9jcHVfdG9fYmUxNigweEZGRkYpOworCQlwLT5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA9IGNwdV90b19iZTE2KDB4RkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3Jjdl9yZW1waHlzX2Vycm9ycyA9CiAJCQljcHVfdG9fYmUxNigodTE2KWNudHJzLnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzKTsKIAlpZiAoY250cnMucG9ydF94bWl0X2Rpc2NhcmRzID4gMHhGRkZGVUwpCi0JCXAtPnBvcnRfeG1pdF9kaXNjYXJkcyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoMHhGRkZGKTsKKwkJcC0+cG9ydF94bWl0X2Rpc2NhcmRzID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfeG1pdF9kaXNjYXJkcyA9CiAJCQljcHVfdG9fYmUxNigodTE2KWNudHJzLnBvcnRfeG1pdF9kaXNjYXJkcyk7CkBAIC0xMjIwLDI0ICsxMjE5LDI0IEBACiAJcC0+bGxpX2Vib3JfZXJyb3JzID0gKGNudHJzLmxvY2FsX2xpbmtfaW50ZWdyaXR5X2Vycm9ycyA8PCA0KSB8CiAJCWNudHJzLmV4Y2Vzc2l2ZV9idWZmZXJfb3ZlcnJ1bl9lcnJvcnM7CiAJaWYgKGNudHJzLnZsMTVfZHJvcHBlZCA+IDB4RkZGRlVMKQotCQlwLT52bDE1X2Ryb3BwZWQgPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KDB4RkZGRik7CisJCXAtPnZsMTVfZHJvcHBlZCA9IGNwdV90b19iZTE2KDB4RkZGRik7CiAJZWxzZQogCQlwLT52bDE1X2Ryb3BwZWQgPSBjcHVfdG9fYmUxNigodTE2KWNudHJzLnZsMTVfZHJvcHBlZCk7CiAJaWYgKGNudHJzLnBvcnRfeG1pdF9kYXRhID4gMHhGRkZGRkZGRlVMKQotCQlwLT5wb3J0X3htaXRfZGF0YSA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CisJCXAtPnBvcnRfeG1pdF9kYXRhID0gY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3htaXRfZGF0YSA9IGNwdV90b19iZTMyKCh1MzIpY250cnMucG9ydF94bWl0X2RhdGEpOwogCWlmIChjbnRycy5wb3J0X3Jjdl9kYXRhID4gMHhGRkZGRkZGRlVMKQotCQlwLT5wb3J0X3Jjdl9kYXRhID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKKwkJcC0+cG9ydF9yY3ZfZGF0YSA9IGNwdV90b19iZTMyKDB4RkZGRkZGRkYpOwogCWVsc2UKIAkJcC0+cG9ydF9yY3ZfZGF0YSA9IGNwdV90b19iZTMyKCh1MzIpY250cnMucG9ydF9yY3ZfZGF0YSk7CiAJaWYgKGNudHJzLnBvcnRfeG1pdF9wYWNrZXRzID4gMHhGRkZGRkZGRlVMKQotCQlwLT5wb3J0X3htaXRfcGFja2V0cyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CisJCXAtPnBvcnRfeG1pdF9wYWNrZXRzID0gY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CiAJZWxzZQogCQlwLT5wb3J0X3htaXRfcGFja2V0cyA9CiAJCQljcHVfdG9fYmUzMigodTMyKWNudHJzLnBvcnRfeG1pdF9wYWNrZXRzKTsKIAlpZiAoY250cnMucG9ydF9yY3ZfcGFja2V0cyA+IDB4RkZGRkZGRkZVTCkKLQkJcC0+cG9ydF9yY3ZfcGFja2V0cyA9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHhGRkZGRkZGRik7CisJCXAtPnBvcnRfcmN2X3BhY2tldHMgPSBjcHVfdG9fYmUzMigweEZGRkZGRkZGKTsKIAllbHNlCiAJCXAtPnBvcnRfcmN2X3BhY2tldHMgPQogCQkJY3B1X3RvX2JlMzIoKHUzMikgY250cnMucG9ydF9yY3ZfcGFja2V0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jCmluZGV4IDkxNzA3MTAuLjc5YjNkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jCkBAIC0xNzQ0LDcgKzE3NDQsNyBAQAogCQkvKiBTaWduYWwgY29tcGxldGlvbiBldmVudCBpZiB0aGUgc29saWNpdGVkIGJpdCBpcyBzZXQuICovCiAJCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgJndjLAogCQkJICAgICAgIChvaGRyLT5idGhbMF0gJgotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMSA8PCAyMykpICE9IDApOworCQkJCWNwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKIAkJYnJlYWs7CiAKIAljYXNlIE9QKFJETUFfV1JJVEVfRklSU1QpOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NkbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zZG1hLmMKaW5kZXggOGUyNTVhZC4uNGIwNjk4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NkbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc2RtYS5jCkBAIC03ODEsMTAgKzc4MSwxMCBAQAogCQlkZXNjcXAgPSAmZGQtPmlwYXRoX3NkbWFfZGVzY3FbZGQtPmlwYXRoX3NkbWFfZGVzY3FfY250XS5xd1swXTsKIAlkZXNjcXAgLT0gMjsKIAkvKiBTRG1hTGFzdERlc2MgKi8KLQlkZXNjcXBbMF0gfD0gX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDExKTsKKwlkZXNjcXBbMF0gfD0gY3B1X3RvX2xlNjQoMVVMTCA8PCAxMSk7CiAJaWYgKHR4LT50eHJlcS5mbGFncyAmIElQQVRIX1NETUFfVFhSRVFfRl9JTlRSRVEpIHsKIAkJLyogU0RtYUludFJlcSAqLwotCQlkZXNjcXBbMF0gfD0gX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDE1KTsKKwkJZGVzY3FwWzBdIHw9IGNwdV90b19sZTY0KDFVTEwgPDwgMTUpOwogCX0KIAogCS8qIENvbW1pdCB3cml0ZXMgdG8gbWVtb3J5IGFuZCBhZHZhbmNlIHRoZSB0YWlsIG9uIHRoZSBjaGlwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jCmluZGV4IDgyY2M1ODguLjIyZTYwOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jCkBAIC00MTksNyArNDE5LDcgQEAKIAkJLyogU2lnbmFsIGNvbXBsZXRpb24gZXZlbnQgaWYgdGhlIHNvbGljaXRlZCBiaXQgaXMgc2V0LiAqLwogCQlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAucmVjdl9jcSksICZ3YywKIAkJCSAgICAgICAob2hkci0+YnRoWzBdICYKLQkJCQlfX2NvbnN0YW50X2NwdV90b19iZTMyKDEgPDwgMjMpKSAhPSAwKTsKKwkJCQljcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CiAJCWJyZWFrOwogCiAJY2FzZSBPUChSRE1BX1dSSVRFX0ZJUlNUKToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKaW5kZXggOTFjNzRjYy4uNjA3NmNiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKQEAgLTM3MCw3ICszNzAsNyBAQAogCSAqLwogCW9oZHItPmJ0aFsxXSA9IGFoX2F0dHItPmRsaWQgPj0gSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFICYmCiAJCWFoX2F0dHItPmRsaWQgIT0gSVBBVEhfUEVSTUlTU0lWRV9MSUQgPwotCQlfX2NvbnN0YW50X2NwdV90b19iZTMyKElQQVRIX01VTFRJQ0FTVF9RUE4pIDoKKwkJY3B1X3RvX2JlMzIoSVBBVEhfTVVMVElDQVNUX1FQTikgOgogCQljcHVfdG9fYmUzMih3cWUtPndyLndyLnVkLnJlbW90ZV9xcG4pOwogCW9oZHItPmJ0aFsyXSA9IGNwdV90b19iZTMyKHFwLT5zX25leHRfcHNuKysgJiBJUEFUSF9QU05fTUFTSyk7CiAJLyoKQEAgLTU3Myw3ICs1NzMsNyBAQAogCS8qIFNpZ25hbCBjb21wbGV0aW9uIGV2ZW50IGlmIHRoZSBzb2xpY2l0ZWQgYml0IGlzIHNldC4gKi8KIAlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAucmVjdl9jcSksICZ3YywKIAkJICAgICAgIChvaGRyLT5idGhbMF0gJgotCQkJX19jb25zdGFudF9jcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CisJCQljcHVfdG9fYmUzMigxIDw8IDIzKSkgIT0gMCk7CiAKIGJhaWw6OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKaW5kZXggMDE5MGVkYy4uODU1OTExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCkBAIC0yMDksMjAgKzIwOSwyMCBAQAogCiAJbW0gPSBnZXRfdGFza19tbShjdXJyZW50KTsKIAlpZiAoIW1tKQotCQlnb3RvIGJhaWw7CisJCXJldHVybjsKIAogCXdvcmsgPSBrbWFsbG9jKHNpemVvZigqd29yayksIEdGUF9LRVJORUwpOwogCWlmICghd29yaykKIAkJZ290byBiYWlsX21tOwogCi0JZ290byBiYWlsOwotCiAJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCB1c2VyX3BhZ2VzX2FjY291bnQpOwogCXdvcmstPm1tID0gbW07CiAJd29yay0+bnVtX3BhZ2VzID0gbnVtX3BhZ2VzOwogCisJc2NoZWR1bGVfd29yaygmd29yay0+d29yayk7CisJcmV0dXJuOworCiBiYWlsX21tOgogCW1tcHV0KG1tKTsKLWJhaWw6CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfc2RtYS5jCmluZGV4IDgyZDlhMGIuLjdiZmY0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3NkbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9zZG1hLmMKQEAgLTY2NywxMyArNjY3LDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgX19sZTY0IGlwYXRoX3NkbWFfbWFrZV9maXJzdF9kZXNjMChfX2xlNjQgZGVzY3EpCiB7Ci0JcmV0dXJuIGRlc2NxIHwgX19jb25zdGFudF9jcHVfdG9fbGU2NCgxVUxMIDw8IDEyKTsKKwlyZXR1cm4gZGVzY3EgfCBjcHVfdG9fbGU2NCgxVUxMIDw8IDEyKTsKIH0KIAogc3RhdGljIGlubGluZSBfX2xlNjQgaXBhdGhfc2RtYV9tYWtlX2xhc3RfZGVzYzAoX19sZTY0IGRlc2NxKQogewogCQkJCQkgICAgICAvKiBsYXN0ICovICAvKiBkbWEgaGVhZCAqLwotCXJldHVybiBkZXNjcSB8IF9fY29uc3RhbnRfY3B1X3RvX2xlNjQoMVVMTCA8PCAxMSB8IDFVTEwgPDwgMTMpOworCXJldHVybiBkZXNjcSB8IGNwdV90b19sZTY0KDFVTEwgPDwgMTEgfCAxVUxMIDw8IDEzKTsKIH0KIAogc3RhdGljIGlubGluZSBfX2xlNjQgaXBhdGhfc2RtYV9tYWtlX2Rlc2MxKHU2NCBhZGRyKQpAQCAtNzYzLDcgKzc2Myw3IEBACiAJCWlmIChvZnMgPj0gSVBBVEhfU01BTExCVUZfRFdPUkRTKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgcGt0LT5uYWRkcjsgaSsrKSB7CiAJCQkJZGQtPmlwYXRoX3NkbWFfZGVzY3FbZHRhaWxdLnF3WzBdIHw9Ci0JCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlNjQoMVVMTCA8PCAxNCk7CisJCQkJCWNwdV90b19sZTY0KDFVTEwgPDwgMTQpOwogCQkJCWlmICgrK2R0YWlsID09IGRkLT5pcGF0aF9zZG1hX2Rlc2NxX2NudCkKIAkJCQkJZHRhaWwgPSAwOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwppbmRleCBjZGYwZTZhLi45Mjg5YWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwpAQCAtMTU4NSw3ICsxNTg1LDcgQEAKIAl1NjQgaWJjc3RhdDsKIAogCW1lbXNldChwcm9wcywgMCwgc2l6ZW9mKCpwcm9wcykpOwotCXByb3BzLT5saWQgPSBsaWQgPyBsaWQgOiBfX2NvbnN0YW50X2JlMTZfdG9fY3B1KElCX0xJRF9QRVJNSVNTSVZFKTsKKwlwcm9wcy0+bGlkID0gbGlkID8gbGlkIDogYmUxNl90b19jcHUoSUJfTElEX1BFUk1JU1NJVkUpOwogCXByb3BzLT5sbWMgPSBkZC0+aXBhdGhfbG1jOwogCXByb3BzLT5zbV9saWQgPSBkZXYtPnNtX2xpZDsKIAlwcm9wcy0+c21fc2wgPSBkZXYtPnNtX3NsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaAppbmRleCAxMWUzZjYxLi5hZTZjZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaApAQCAtODYsMTEgKzg2LDExIEBACiAjZGVmaW5lIElCX1BNQV9TQU1QTEVfU1RBVFVTX1JVTk5JTkcJMHgwMgogCiAvKiBNYW5kYXRvcnkgSUIgcGVyZm9ybWFuY2UgY291bnRlciBzZWxlY3QgdmFsdWVzLiAqLwotI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX0RBVEEJX19jb25zdGFudF9odG9ucygweDAwMDEpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1JDVl9EQVRBCV9fY29uc3RhbnRfaHRvbnMoMHgwMDAyKQotI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX1BLVFMJX19jb25zdGFudF9odG9ucygweDAwMDMpCi0jZGVmaW5lIElCX1BNQV9QT1JUX1JDVl9QS1RTCV9fY29uc3RhbnRfaHRvbnMoMHgwMDA0KQotI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX1dBSVQJX19jb25zdGFudF9odG9ucygweDAwMDUpCisjZGVmaW5lIElCX1BNQV9QT1JUX1hNSVRfREFUQQljcHVfdG9fYmUxNigweDAwMDEpCisjZGVmaW5lIElCX1BNQV9QT1JUX1JDVl9EQVRBCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfUE1BX1BPUlRfWE1JVF9QS1RTCWNwdV90b19iZTE2KDB4MDAwMykKKyNkZWZpbmUgSUJfUE1BX1BPUlRfUkNWX1BLVFMJY3B1X3RvX2JlMTYoMHgwMDA0KQorI2RlZmluZSBJQl9QTUFfUE9SVF9YTUlUX1dBSVQJY3B1X3RvX2JlMTYoMHgwMDA1KQogCiBzdHJ1Y3QgaWJfcmV0aCB7CiAJX19iZTY0IHZhZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYwppbmRleCA2MDZmMWUyLi4xOWU2OGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYwpAQCAtMTQ3LDcgKzE0Nyw4IEBACiAgKiBTbm9vcCBTTSBNQURzIGZvciBwb3J0IGluZm8gYW5kIFBfS2V5IHRhYmxlIHNldHMsIHNvIHdlIGNhbgogICogc3ludGhlc2l6ZSBMSUQgY2hhbmdlIGFuZCBQX0tleSBjaGFuZ2UgZXZlbnRzLgogICovCi1zdGF0aWMgdm9pZCBzbXBfc25vb3Aoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnRfbnVtLCBzdHJ1Y3QgaWJfbWFkICptYWQpCitzdGF0aWMgdm9pZCBzbXBfc25vb3Aoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnRfbnVtLCBzdHJ1Y3QgaWJfbWFkICptYWQsCisJCQkJdTE2IHByZXZfbGlkKQogewogCXN0cnVjdCBpYl9ldmVudCBldmVudDsKIApAQCAtMTU3LDYgKzE1OCw3IEBACiAJCWlmIChtYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QT1JUX0lORk8pIHsKIAkJCXN0cnVjdCBpYl9wb3J0X2luZm8gKnBpbmZvID0KIAkJCQkoc3RydWN0IGliX3BvcnRfaW5mbyAqKSAoKHN0cnVjdCBpYl9zbXAgKikgbWFkKS0+ZGF0YTsKKwkJCXUxNiBsaWQgPSBiZTE2X3RvX2NwdShwaW5mby0+bGlkKTsKIAogCQkJdXBkYXRlX3NtX2FoKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSwKIAkJCQkgICAgIGJlMTZfdG9fY3B1KHBpbmZvLT5zbV9saWQpLApAQCAtMTY1LDEyICsxNjcsMTUgQEAKIAkJCWV2ZW50LmRldmljZQkgICAgICAgPSBpYmRldjsKIAkJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0X251bTsKIAotCQkJaWYgKHBpbmZvLT5jbGllbnRyZXJlZ19yZXN2X3N1Ym5ldHRvICYgMHg4MCkKKwkJCWlmIChwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApIHsKIAkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0NMSUVOVF9SRVJFR0lTVEVSOwotCQkJZWxzZQotCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCi0JCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJaWYgKHByZXZfbGlkICE9IGxpZCkgeworCQkJCWV2ZW50LmV2ZW50ICAgID0gSUJfRVZFTlRfTElEX0NIQU5HRTsKKwkJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQkJfQogCQl9CiAKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BLRVlfVEFCTEUpIHsKQEAgLTIyOCw4ICsyMzMsOSBAQAogCQkJc3RydWN0IGliX3djICppbl93Yywgc3RydWN0IGliX2dyaCAqaW5fZ3JoLAogCQkJc3RydWN0IGliX21hZCAqaW5fbWFkLCBzdHJ1Y3QgaWJfbWFkICpvdXRfbWFkKQogewotCXUxNiBzbGlkOworCXUxNiBzbGlkLCBwcmV2X2xpZCA9IDA7CiAJaW50IGVycjsKKwlzdHJ1Y3QgaWJfcG9ydF9hdHRyIHBhdHRyOwogCiAJc2xpZCA9IGluX3djID8gaW5fd2MtPnNsaWQgOiBiZTE2X3RvX2NwdShJQl9MSURfUEVSTUlTU0lWRSk7CiAKQEAgLTI2Myw2ICsyNjksMTMgQEAKIAl9IGVsc2UKIAkJcmV0dXJuIElCX01BRF9SRVNVTFRfU1VDQ0VTUzsKIAorCWlmICgoaW5fbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0xJRF9ST1VURUQgfHwKKwkgICAgIGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9ESVJFQ1RFRF9ST1VURSkgJiYKKwkgICAgaW5fbWFkLT5tYWRfaGRyLm1ldGhvZCA9PSBJQl9NR01UX01FVEhPRF9TRVQgJiYKKwkgICAgaW5fbWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUE9SVF9JTkZPICYmCisJICAgICFpYl9xdWVyeV9wb3J0KGliZGV2LCBwb3J0X251bSwgJnBhdHRyKSkKKwkJcHJldl9saWQgPSBwYXR0ci5saWQ7CisKIAllcnIgPSBtbHg0X01BRF9JRkModG9fbWRldihpYmRldiksCiAJCQkgICBtYWRfZmxhZ3MgJiBJQl9NQURfSUdOT1JFX01LRVksCiAJCQkgICBtYWRfZmxhZ3MgJiBJQl9NQURfSUdOT1JFX0JLRVksCkBAIC0yNzEsNyArMjg0LDcgQEAKIAkJcmV0dXJuIElCX01BRF9SRVNVTFRfRkFJTFVSRTsKIAogCWlmICghb3V0X21hZC0+bWFkX2hkci5zdGF0dXMpIHsKLQkJc21wX3Nub29wKGliZGV2LCBwb3J0X251bSwgaW5fbWFkKTsKKwkJc21wX3Nub29wKGliZGV2LCBwb3J0X251bSwgaW5fbWFkLCBwcmV2X2xpZCk7CiAJCW5vZGVfZGVzY19vdmVycmlkZShpYmRldiwgb3V0X21hZCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKaW5kZXggNjE1ODhiZC4uMmNjYjlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYwpAQCAtNjk5LDExICs2OTksMTIgQEAKIAlzdHJ1Y3QgbWx4NF9pYl9kZXYgKmliZGV2ID0gaWJkZXZfcHRyOwogCWludCBwOwogCisJbWx4NF9pYl9tYWRfY2xlYW51cChpYmRldik7CisJaWJfdW5yZWdpc3Rlcl9kZXZpY2UoJmliZGV2LT5pYl9kZXYpOworCiAJZm9yIChwID0gMTsgcCA8PSBpYmRldi0+bnVtX3BvcnRzOyArK3ApCiAJCW1seDRfQ0xPU0VfUE9SVChkZXYsIHApOwogCi0JbWx4NF9pYl9tYWRfY2xlYW51cChpYmRldik7Ci0JaWJfdW5yZWdpc3Rlcl9kZXZpY2UoJmliZGV2LT5pYl9kZXYpOwogCWlvdW5tYXAoaWJkZXYtPnVhcl9tYXApOwogCW1seDRfdWFyX2ZyZWUoZGV2LCAmaWJkZXYtPnByaXZfdWFyKTsKIAltbHg0X3BkX2ZyZWUoZGV2LCBpYmRldi0+cHJpdl9wZG4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKaW5kZXggYTkxY2I0Yy4uZjM4NWEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCkBAIC03MSwxNyArNzEsMTcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBfX2JlMzIgbWx4NF9pYl9vcGNvZGVbXSA9IHsKLQlbSUJfV1JfU0VORF0JCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORCksCi0JW0lCX1dSX0xTT10JCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfTFNPKSwKLQlbSUJfV1JfU0VORF9XSVRIX0lNTV0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EX0lNTSksCi0JW0lCX1dSX1JETUFfV1JJVEVdCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfUkRNQV9XUklURSksCi0JW0lCX1dSX1JETUFfV1JJVEVfV0lUSF9JTU1dCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFX0lNTSksCi0JW0lCX1dSX1JETUFfUkVBRF0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1JFQUQpLAotCVtJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1BdCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9BVE9NSUNfQ1MpLAotCVtJQl9XUl9BVE9NSUNfRkVUQ0hfQU5EX0FERF0JPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0FUT01JQ19GQSksCi0JW0lCX1dSX1NFTkRfV0lUSF9JTlZdCQk9IF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORF9JTlZBTCksCi0JW0lCX1dSX0xPQ0FMX0lOVl0JCT0gX19jb25zdGFudF9jcHVfdG9fYmUzMihNTFg0X09QQ09ERV9MT0NBTF9JTlZBTCksCi0JW0lCX1dSX0ZBU1RfUkVHX01SXQkJPSBfX2NvbnN0YW50X2NwdV90b19iZTMyKE1MWDRfT1BDT0RFX0ZNUiksCisJW0lCX1dSX1NFTkRdCQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9TRU5EKSwKKwlbSUJfV1JfTFNPXQkJCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfTFNPKSwKKwlbSUJfV1JfU0VORF9XSVRIX0lNTV0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORF9JTU0pLAorCVtJQl9XUl9SRE1BX1dSSVRFXQkJPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFKSwKKwlbSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTV0JPSBjcHVfdG9fYmUzMihNTFg0X09QQ09ERV9SRE1BX1dSSVRFX0lNTSksCisJW0lCX1dSX1JETUFfUkVBRF0JCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfUkRNQV9SRUFEKSwKKwlbSUJfV1JfQVRPTUlDX0NNUF9BTkRfU1dQXQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX0FUT01JQ19DUyksCisJW0lCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREXQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX0FUT01JQ19GQSksCisJW0lCX1dSX1NFTkRfV0lUSF9JTlZdCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX1NFTkRfSU5WQUwpLAorCVtJQl9XUl9MT0NBTF9JTlZdCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX0xPQ0FMX0lOVkFMKSwKKwlbSUJfV1JfRkFTVF9SRUdfTVJdCQk9IGNwdV90b19iZTMyKE1MWDRfT1BDT0RFX0ZNUiksCiB9OwogCiBzdGF0aWMgc3RydWN0IG1seDRfaWJfc3FwICp0b19tc3FwKHN0cnVjdCBtbHg0X2liX3FwICptcXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKaW5kZXggNjQwNDQ5NS4uNTY0ODY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYwpAQCAtMTA0LDcgKzEwNCw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIHNtcF9zbm9vcChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKIAkJICAgICAgdTggcG9ydF9udW0sCi0JCSAgICAgIHN0cnVjdCBpYl9tYWQgKm1hZCkKKwkJICAgICAgc3RydWN0IGliX21hZCAqbWFkLAorCQkgICAgICB1MTYgcHJldl9saWQpCiB7CiAJc3RydWN0IGliX2V2ZW50IGV2ZW50OwogCkBAIC0xMTQsNiArMTE1LDcgQEAKIAkJaWYgKG1hZC0+bWFkX2hkci5hdHRyX2lkID09IElCX1NNUF9BVFRSX1BPUlRfSU5GTykgewogCQkJc3RydWN0IGliX3BvcnRfaW5mbyAqcGluZm8gPQogCQkJCShzdHJ1Y3QgaWJfcG9ydF9pbmZvICopICgoc3RydWN0IGliX3NtcCAqKSBtYWQpLT5kYXRhOworCQkJdTE2IGxpZCA9IGJlMTZfdG9fY3B1KHBpbmZvLT5saWQpOwogCiAJCQltdGhjYV91cGRhdGVfcmF0ZSh0b19tZGV2KGliZGV2KSwgcG9ydF9udW0pOwogCQkJdXBkYXRlX3NtX2FoKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSwKQEAgLTEyMywxMiArMTI1LDE1IEBACiAJCQlldmVudC5kZXZpY2UgICAgICAgICAgID0gaWJkZXY7CiAJCQlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gcG9ydF9udW07CiAKLQkJCWlmIChwaW5mby0+Y2xpZW50cmVyZWdfcmVzdl9zdWJuZXR0byAmIDB4ODApCisJCQlpZiAocGluZm8tPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDgwKSB7CiAJCQkJZXZlbnQuZXZlbnQgICAgPSBJQl9FVkVOVF9DTElFTlRfUkVSRUdJU1RFUjsKLQkJCWVsc2UKLQkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CisJCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwkJCX0KIAotCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwkJCWlmIChwcmV2X2xpZCAhPSBsaWQpIHsKKwkJCQlldmVudC5ldmVudCAgICA9IElCX0VWRU5UX0xJRF9DSEFOR0U7CisJCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwkJCX0KIAkJfQogCiAJCWlmIChtYWQtPm1hZF9oZHIuYXR0cl9pZCA9PSBJQl9TTVBfQVRUUl9QS0VZX1RBQkxFKSB7CkBAIC0xOTYsNiArMjAxLDggQEAKIAlpbnQgZXJyOwogCXU4IHN0YXR1czsKIAl1MTYgc2xpZCA9IGluX3djID8gaW5fd2MtPnNsaWQgOiBiZTE2X3RvX2NwdShJQl9MSURfUEVSTUlTU0lWRSk7CisJdTE2IHByZXZfbGlkID0gMDsKKwlzdHJ1Y3QgaWJfcG9ydF9hdHRyIHBhdHRyOwogCiAJLyogRm9yd2FyZCBsb2NhbGx5IGdlbmVyYXRlZCB0cmFwcyB0byB0aGUgU00gKi8KIAlpZiAoaW5fbWFkLT5tYWRfaGRyLm1ldGhvZCA9PSBJQl9NR01UX01FVEhPRF9UUkFQICYmCkBAIC0yMzMsNiArMjQwLDEyIEBACiAJCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOwogCX0gZWxzZQogCQlyZXR1cm4gSUJfTUFEX1JFU1VMVF9TVUNDRVNTOworCWlmICgoaW5fbWFkLT5tYWRfaGRyLm1nbXRfY2xhc3MgPT0gSUJfTUdNVF9DTEFTU19TVUJOX0xJRF9ST1VURUQgfHwKKwkgICAgIGluX21hZC0+bWFkX2hkci5tZ210X2NsYXNzID09IElCX01HTVRfQ0xBU1NfU1VCTl9ESVJFQ1RFRF9ST1VURSkgJiYKKwkgICAgaW5fbWFkLT5tYWRfaGRyLm1ldGhvZCA9PSBJQl9NR01UX01FVEhPRF9TRVQgJiYKKwkgICAgaW5fbWFkLT5tYWRfaGRyLmF0dHJfaWQgPT0gSUJfU01QX0FUVFJfUE9SVF9JTkZPICYmCisJICAgICFpYl9xdWVyeV9wb3J0KGliZGV2LCBwb3J0X251bSwgJnBhdHRyKSkKKwkJcHJldl9saWQgPSBwYXR0ci5saWQ7CiAKIAllcnIgPSBtdGhjYV9NQURfSUZDKHRvX21kZXYoaWJkZXYpLAogCQkJICAgIG1hZF9mbGFncyAmIElCX01BRF9JR05PUkVfTUtFWSwKQEAgLTI1Miw3ICsyNjUsNyBAQAogCX0KIAogCWlmICghb3V0X21hZC0+bWFkX2hkci5zdGF0dXMpIHsKLQkJc21wX3Nub29wKGliZGV2LCBwb3J0X251bSwgaW5fbWFkKTsKKwkJc21wX3Nub29wKGliZGV2LCBwb3J0X251bSwgaW5fbWFkLCBwcmV2X2xpZCk7CiAJCW5vZGVfZGVzY19vdmVycmlkZShpYmRldiwgb3V0X21hZCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYwppbmRleCBiOTYxMWFkLi5jYTU5OTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaAppbmRleCAxM2E1YmIxLi4wNGIxMmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYwppbmRleCA0YTY1Yjk2Li41MjQyNTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTEwMyw2ICsxMDMsNyBAQAogc3RhdGljIHZvaWQgbmVzX2Rpc2Nvbm5lY3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIHN0YXRpYyBpbnQgc2VuZF9tcGFfcmVxdWVzdChzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKik7CitzdGF0aWMgaW50IHNlbmRfbXBhX3JlamVjdChzdHJ1Y3QgbmVzX2NtX25vZGUgKik7CiBzdGF0aWMgaW50IHNlbmRfc3luKHN0cnVjdCBuZXNfY21fbm9kZSAqLCB1MzIsIHN0cnVjdCBza19idWZmICopOwogc3RhdGljIGludCBzZW5kX3Jlc2V0KHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIHN0YXRpYyBpbnQgc2VuZF9hY2soc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTExMyw4ICsxMTQsNyBAQAogc3RhdGljIHZvaWQgYWN0aXZlX29wZW5fZXJyKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQpOwogc3RhdGljIHZvaWQgcGFzc2l2ZV9vcGVuX2VycihzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKIHN0YXRpYyB2b2lkIGNsZWFudXBfcmV0cmFuc19lbnRyeShzdHJ1Y3QgbmVzX2NtX25vZGUgKik7Ci1zdGF0aWMgdm9pZCBoYW5kbGVfcmN2X21wYShzdHJ1Y3QgbmVzX2NtX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwKLQllbnVtIG5lc19jbV9ldmVudF90eXBlKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9yY3ZfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIHN0YXRpYyB2b2lkIGZyZWVfcmV0cmFuc19lbnRyeShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpOwogc3RhdGljIGludCBoYW5kbGVfdGNwX29wdGlvbnMoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3QgdGNwaGRyICp0Y3BoLAogCXN0cnVjdCBza19idWZmICpza2IsIGludCBvcHRpb25zaXplLCBpbnQgcGFzc2l2ZSk7CkBAIC0xMjQsNiArMTI0LDggQEAKIHN0YXRpYyB2b2lkIGNtX2V2ZW50X2Nvbm5lY3RfZXJyb3Ioc3RydWN0IG5lc19jbV9ldmVudCAqKTsKIHN0YXRpYyB2b2lkIGNtX2V2ZW50X3Jlc2V0KHN0cnVjdCBuZXNfY21fZXZlbnQgKik7CiBzdGF0aWMgdm9pZCBjbV9ldmVudF9tcGFfcmVxKHN0cnVjdCBuZXNfY21fZXZlbnQgKik7CitzdGF0aWMgdm9pZCBjbV9ldmVudF9tcGFfcmVqZWN0KHN0cnVjdCBuZXNfY21fZXZlbnQgKik7CitzdGF0aWMgdm9pZCBoYW5kbGVfcmVjdl9lbnRyeShzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHUzMiByZW1fbm9kZSk7CiAKIHN0YXRpYyB2b2lkIHByaW50X2NvcmUoc3RydWN0IG5lc19jbV9jb3JlICpjb3JlKTsKIApAQCAtMTk2LDcgKzE5OCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgc2VuZF9tcGFfcmVxdWVzdChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHJldDsKIAlpZiAoIXNrYikgewogCQluZXNfZGVidWcoTkVTX0RCR19DTSwgInNrYiBzZXQgdG8gTlVMTFxuIik7CiAJCXJldHVybiAtMTsKQEAgLTIwNiwxMSArMjA3LDI3IEBACiAJZm9ybV9jbV9mcmFtZShza2IsIGNtX25vZGUsIE5VTEwsIDAsICZjbV9ub2RlLT5tcGFfZnJhbWUsCiAJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwgU0VUX0FDSyk7CiAKLQlyZXQgPSBzY2hlZHVsZV9uZXNfdGltZXIoY21fbm9kZSwgc2tiLCBORVNfVElNRVJfVFlQRV9TRU5ELCAxLCAwKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwlyZXR1cm4gc2NoZWR1bGVfbmVzX3RpbWVyKGNtX25vZGUsIHNrYiwgTkVTX1RJTUVSX1RZUEVfU0VORCwgMSwgMCk7Cit9CiAKLQlyZXR1cm4gMDsKKworCitzdGF0aWMgaW50IHNlbmRfbXBhX3JlamVjdChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCit7CisJc3RydWN0IHNrX2J1ZmYgICpza2IgPSBOVUxMOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihNQVhfQ01fQlVGRkVSKTsKKwlpZiAoIXNrYikgeworCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkZhaWxlZCB0byBnZXQgYSBGcmVlIHBrdFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIHNlbmQgYW4gTVBBIHJlamVjdCBmcmFtZSAqLworCWZvcm1fY21fZnJhbWUoc2tiLCBjbV9ub2RlLCBOVUxMLCAwLCAmY21fbm9kZS0+bXBhX2ZyYW1lLAorCQkJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUsIFNFVF9BQ0sgfCBTRVRfRklOKTsKKworCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMTsKKwlyZXR1cm4gc2NoZWR1bGVfbmVzX3RpbWVyKGNtX25vZGUsIHNrYiwgTkVTX1RJTUVSX1RZUEVfU0VORCwgMSwgMCk7CiB9CiAKIApAQCAtMjE4LDE0ICsyMzUsMTcgQEAKICAqIHJlY3ZfbXBhIC0gcHJvY2VzcyBhIHJlY2VpdmVkIFRDUCBwa3QsIHdlIGFyZSBleHBlY3RpbmcgYW4KICAqIElFVEYgTVBBIGZyYW1lCiAgKi8KLXN0YXRpYyBpbnQgcGFyc2VfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgdTggKmJ1ZmZlciwgdTMyIGxlbikKK3N0YXRpYyBpbnQgcGFyc2VfbXBhKHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgdTggKmJ1ZmZlciwgdTMyICp0eXBlLAorCQl1MzIgbGVuKQogewogCXN0cnVjdCBpZXRmX21wYV9mcmFtZSAqbXBhX2ZyYW1lOwogCisJKnR5cGUgPSBORVNfTVBBX1JFUVVFU1RfQUNDRVBUOworCiAJLyogYXNzdW1lIHJlcSBmcmFtZSBpcyBpbiB0Y3AgZGF0YSBwYXlsb2FkICovCiAJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUpKSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiVGhlIHJlY2VpdmVkIGlldGYgYnVmZmVyIHdhcyB0b28gc21hbGwgKCV4KVxuIiwgbGVuKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAltcGFfZnJhbWUgPSAoc3RydWN0IGlldGZfbXBhX2ZyYW1lICopYnVmZmVyOwpAQCAtMjM0LDE0ICsyNTQsMjUgQEAKIAlpZiAoY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUgKyBzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSAhPSBsZW4pIHsKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJUaGUgcmVjZWl2ZWQgaWV0ZiBidWZmZXIgd2FzIG5vdCByaWdodCIKIAkJCQkiIGNvbXBsZXRlICgleCArICV4ICE9ICV4KVxuIiwKLQkJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSwgKHUzMilzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwgbGVuKTsKLQkJcmV0dXJuIC0xOworCQkJCWNtX25vZGUtPm1wYV9mcmFtZV9zaXplLAorCQkJCSh1MzIpc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSksIGxlbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBtYWtlIHN1cmUgaXQgZG9lcyBub3QgZXhjZWVkIHRoZSBtYXggc2l6ZSAqLworCWlmIChsZW4gPiBNQVhfQ01fQlVGRkVSKSB7CisJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiVGhlIHJlY2VpdmVkIGlldGYgYnVmZmVyIHdhcyB0b28gbGFyZ2UiCisJCQkJIiAoJXggKyAleCAhPSAleClcbiIsCisJCQkJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUsCisJCQkJKHUzMilzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSwgbGVuKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogY29weSBlbnRpcmUgTVBBIGZyYW1lIHRvIG91ciBjbV9ub2RlJ3MgZnJhbWUgKi8KIAltZW1jcHkoY21fbm9kZS0+bXBhX2ZyYW1lX2J1ZiwgYnVmZmVyICsgc2l6ZW9mKHN0cnVjdCBpZXRmX21wYV9mcmFtZSksCiAJCQljbV9ub2RlLT5tcGFfZnJhbWVfc2l6ZSk7CiAKKwlpZiAobXBhX2ZyYW1lLT5mbGFncyAmIElFVEZfTVBBX0ZMQUdTX1JFSkVDVCkKKwkJKnR5cGUgPSBORVNfTVBBX1JFUVVFU1RfUkVKRUNUOwogCXJldHVybiAwOwogfQogCkBAIC0zODAsNyArNDExLDcgQEAKIAogCW5ld19zZW5kID0ga3phbGxvYyhzaXplb2YoKm5ld19zZW5kKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFuZXdfc2VuZCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIG5ld19zZW5kLT50aW1ldG9zZW5kID0gY3VycmVudHRpbWUgKi8KIAluZXdfc2VuZC0+cmV0cnljb3VudCA9IE5FU19ERUZBVUxUX1JFVFJZUzsKQEAgLTM5NCw5ICs0MjUsMTEgQEAKIAogCWlmICh0eXBlID09IE5FU19USU1FUl9UWVBFX0NMT1NFKSB7CiAJCW5ld19zZW5kLT50aW1ldG9zZW5kICs9IChIWi8xMCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2FkZF90YWlsKCZuZXdfc2VuZC0+bGlzdCwgJmNtX25vZGUtPnJlY3ZfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7CisJCWlmIChjbV9ub2RlLT5yZWN2X2VudHJ5KSB7CisJCQlXQVJOX09OKDEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY21fbm9kZS0+cmVjdl9lbnRyeSA9IG5ld19zZW5kOwogCX0KIAogCWlmICh0eXBlID09IE5FU19USU1FUl9UWVBFX1NFTkQpIHsKQEAgLTQzNSwyNCArNDY4LDc4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgbmVzX3JldHJhbnNfZXhwaXJlZChzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUpCit7CisJc3dpdGNoIChjbV9ub2RlLT5zdGF0ZSkgeworCWNhc2UgTkVTX0NNX1NUQVRFX1NZTl9SQ1ZEOgorCWNhc2UgTkVTX0NNX1NUQVRFX0NMT1NJTkc6CisJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfTEFTVF9BQ0s6CisJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOgorCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFSl9SQ1ZEOgorCQlzZW5kX3Jlc2V0KGNtX25vZGUsIE5VTEwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljcmVhdGVfZXZlbnQoY21fbm9kZSwgTkVTX0NNX0VWRU5UX0FCT1JURUQpOworCX0KK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3JlY3ZfZW50cnkoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCB1MzIgcmVtX25vZGUpCit7CisJc3RydWN0IG5lc190aW1lcl9lbnRyeSAqcmVjdl9lbnRyeSA9IGNtX25vZGUtPnJlY3ZfZW50cnk7CisJc3RydWN0IGl3X2NtX2lkICpjbV9pZCA9IGNtX25vZGUtPmNtX2lkOworCXN0cnVjdCBuZXNfcXAgKm5lc3FwOworCXVuc2lnbmVkIGxvbmcgcXBsb2NrZmxhZ3M7CisKKwlpZiAoIXJlY3ZfZW50cnkpCisJCXJldHVybjsKKwluZXNxcCA9IChzdHJ1Y3QgbmVzX3FwICopcmVjdl9lbnRyeS0+c2tiOworCWlmIChuZXNxcCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKKwkJaWYgKG5lc3FwLT5jbV9pZCkgeworCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBjbV9pZCA9ICVwLCAiCisJCQkJInJlZmNvdW50ID0gJWQ6IEhJVCBBICIKKwkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBzb21ldGhpbmcgIgorCQkJCSJ0byBkbyEhIVxuIiwgbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkLAorCQkJCWF0b21pY19yZWFkKCZuZXNxcC0+cmVmY291bnQpKTsKKwkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOworCQkJbmVzcXAtPmxhc3RfYWVxID0gTkVTX0FFUUVfQUVJRF9SRVNFVF9TRU5UOworCQkJbmVzcXAtPmlicXBfc3RhdGUgPSBJQl9RUFNfRVJSOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKKwkJCW5lc19jbV9kaXNjb25uKG5lc3FwKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7CisJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXAsICIKKwkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgorCQkJCSJORVNfVElNRVJfVFlQRV9DTE9TRSB3aXRoIG5vdGhpbmcgIgorCQkJCSJ0byBkbyEhIVxuIiwgbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkLAorCQkJCWF0b21pY19yZWFkKCZuZXNxcC0+cmVmY291bnQpKTsKKwkJfQorCX0gZWxzZSBpZiAocmVtX25vZGUpIHsKKwkJLyogVElNRV9XQUlUIHN0YXRlICovCisJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLCBjbV9ub2RlKTsKKwl9CisJaWYgKGNtX25vZGUtPmNtX2lkKQorCQljbV9pZC0+cmVtX3JlZihjbV9pZCk7CisJa2ZyZWUocmVjdl9lbnRyeSk7CisJY21fbm9kZS0+cmVjdl9lbnRyeSA9IE5VTEw7Cit9CiAKIC8qKgogICogbmVzX2NtX3RpbWVyX3RpY2sKICAqLwogc3RhdGljIHZvaWQgbmVzX2NtX3RpbWVyX3RpY2sodW5zaWduZWQgbG9uZyBwYXNzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHFwbG9ja2ZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBuZXh0dGltZW91dCA9IGppZmZpZXMgKyBORVNfTE9OR19USU1FOwotCXN0cnVjdCBpd19jbV9pZCAqY21faWQ7CiAJc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlOwogCXN0cnVjdCBuZXNfdGltZXJfZW50cnkgKnNlbmRfZW50cnksICpyZWN2X2VudHJ5OwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfY29yZSwgKmxpc3RfY29yZV90ZW1wOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Rfbm9kZSwgKmxpc3Rfbm9kZV90ZW1wOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfY29yZV90ZW1wOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Rfbm9kZTsKIAlzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNtX2NvcmUgPSBnX2NtX2NvcmU7Ci0Jc3RydWN0IG5lc19xcCAqbmVzcXA7CiAJdTMyIHNldHRpbWVyID0gMDsKIAlpbnQgcmV0ID0gTkVUREVWX1RYX09LOwotCWVudW0gbmVzX2NtX25vZGVfc3RhdGUgbGFzdF9zdGF0ZTsKIAogCXN0cnVjdCBsaXN0X2hlYWQgdGltZXJfbGlzdDsKIAlJTklUX0xJU1RfSEVBRCgmdGltZXJfbGlzdCk7CkBAIC00NjEsNyArNTQ4LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9ub2RlLCBsaXN0X2NvcmVfdGVtcCwKIAkJCQkmY21fY29yZS0+Y29ubmVjdGVkX25vZGVzKSB7CiAJCWNtX25vZGUgPSBjb250YWluZXJfb2YobGlzdF9ub2RlLCBzdHJ1Y3QgbmVzX2NtX25vZGUsIGxpc3QpOwotCQlpZiAoIWxpc3RfZW1wdHkoJmNtX25vZGUtPnJlY3ZfbGlzdCkgfHwgKGNtX25vZGUtPnNlbmRfZW50cnkpKSB7CisJCWlmICgoY21fbm9kZS0+cmVjdl9lbnRyeSkgfHwgKGNtX25vZGUtPnNlbmRfZW50cnkpKSB7CiAJCQlhZGRfcmVmX2NtX25vZGUoY21fbm9kZSk7CiAJCQlsaXN0X2FkZCgmY21fbm9kZS0+dGltZXJfZW50cnksICZ0aW1lcl9saXN0KTsKIAkJfQpAQCAtNDcxLDU0ICs1NTgsMTggQEAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9ub2RlLCBsaXN0X2NvcmVfdGVtcCwgJnRpbWVyX2xpc3QpIHsKIAkJY21fbm9kZSA9IGNvbnRhaW5lcl9vZihsaXN0X25vZGUsIHN0cnVjdCBuZXNfY21fbm9kZSwKIAkJCQkJdGltZXJfZW50cnkpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3RfY29yZSwgbGlzdF9ub2RlX3RlbXAsCi0JCQkmY21fbm9kZS0+cmVjdl9saXN0KSB7Ci0JCQlyZWN2X2VudHJ5ID0gY29udGFpbmVyX29mKGxpc3RfY29yZSwKLQkJCQlzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5LCBsaXN0KTsKLQkJCWlmICghcmVjdl9lbnRyeSkKLQkJCQlicmVhazsKKwkJcmVjdl9lbnRyeSA9IGNtX25vZGUtPnJlY3ZfZW50cnk7CisKKwkJaWYgKHJlY3ZfZW50cnkpIHsKIAkJCWlmICh0aW1lX2FmdGVyKHJlY3ZfZW50cnktPnRpbWV0b3NlbmQsIGppZmZpZXMpKSB7CiAJCQkJaWYgKG5leHR0aW1lb3V0ID4gcmVjdl9lbnRyeS0+dGltZXRvc2VuZCB8fAotCQkJCQkhc2V0dGltZXIpIHsKKwkJCQkJCSFzZXR0aW1lcikgewogCQkJCQluZXh0dGltZW91dCA9IHJlY3ZfZW50cnktPnRpbWV0b3NlbmQ7CiAJCQkJCXNldHRpbWVyID0gMTsKIAkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlsaXN0X2RlbCgmcmVjdl9lbnRyeS0+bGlzdCk7Ci0JCQljbV9pZCA9IGNtX25vZGUtPmNtX2lkOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2ssIGZsYWdzKTsKLQkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKilyZWN2X2VudHJ5LT5za2I7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIHFwbG9ja2ZsYWdzKTsKLQkJCWlmIChuZXNxcC0+Y21faWQpIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXAsICIKLQkJCQkJInJlZmNvdW50ID0gJWQ6IEhJVCBBICIKLQkJCQkJIk5FU19USU1FUl9UWVBFX0NMT1NFIHdpdGggc29tZXRoaW5nICIKLQkJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCi0JCQkJCWF0b21pY19yZWFkKCZuZXNxcC0+cmVmY291bnQpKTsKLQkJCQluZXNxcC0+aHdfdGNwX3N0YXRlID0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFRDsKLQkJCQluZXNxcC0+bGFzdF9hZXEgPSBORVNfQUVRRV9BRUlEX1JFU0VUX1NFTlQ7Ci0JCQkJbmVzcXAtPmlicXBfc3RhdGUgPSBJQl9RUFNfRVJSOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLAotCQkJCQlxcGxvY2tmbGFncyk7Ci0JCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOwotCQkJfSBlbHNlIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywKLQkJCQkJcXBsb2NrZmxhZ3MpOwotCQkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUVAldTogY21faWQgPSAlcCwgIgotCQkJCQkicmVmY291bnQgPSAlZDogSElUIEEgIgotCQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBub3RoaW5nICIKLQkJCQkJInRvIGRvISEhXG4iLCBuZXNxcC0+aHdxcC5xcF9pZCwgY21faWQsCi0JCQkJCWF0b21pY19yZWFkKCZuZXNxcC0+cmVmY291bnQpKTsKLQkJCX0KLQkJCWlmIChjbV9pZCkKLQkJCQljbV9pZC0+cmVtX3JlZihjbV9pZCk7Ci0KLQkJCWtmcmVlKHJlY3ZfZW50cnkpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7CisJCQl9IGVsc2UKKwkJCQloYW5kbGVfcmVjdl9lbnRyeShjbV9ub2RlLCAxKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZXRyYW5zX2xpc3RfbG9jaywgZmxhZ3MpOwogCQlkbyB7CkBAIC01MzMsMTIgKzU4NCwxMSBAQAogCQkJCQkJbmV4dHRpbWVvdXQgPQogCQkJCQkJCXNlbmRfZW50cnktPnRpbWV0b3NlbmQ7CiAJCQkJCQlzZXR0aW1lciA9IDE7Ci0JCQkJCQlicmVhazsKIAkJCQkJfQogCQkJCX0gZWxzZSB7CiAJCQkJCWZyZWVfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKLQkJCQkJYnJlYWs7CiAJCQkJfQorCQkJCWJyZWFrOwogCQkJfQogCiAJCQlpZiAoKGNtX25vZGUtPnN0YXRlID09IE5FU19DTV9TVEFURV9UU0EpIHx8CkBAIC01NTAsMTYgKzYwMCwxMiBAQAogCQkJaWYgKCFzZW5kX2VudHJ5LT5yZXRyYW5zY291bnQgfHwKIAkJCQkhc2VuZF9lbnRyeS0+cmV0cnljb3VudCkgewogCQkJCWNtX3BhY2tldHNfZHJvcHBlZCsrOwotCQkJCWxhc3Rfc3RhdGUgPSBjbV9ub2RlLT5zdGF0ZTsKLQkJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CiAJCQkJZnJlZV9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKIAkJCQkJJmNtX25vZGUtPnJldHJhbnNfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKGxhc3Rfc3RhdGUgPT0gTkVTX0NNX1NUQVRFX1NZTl9SQ1ZEKQotCQkJCQlyZW1fcmVmX2NtX25vZGUoY21fY29yZSwgY21fbm9kZSk7Ci0JCQkJZWxzZQotCQkJCQljcmVhdGVfZXZlbnQoY21fbm9kZSwKLQkJCQkJCU5FU19DTV9FVkVOVF9BQk9SVEVEKTsKKwkJCQluZXNfcmV0cmFuc19leHBpcmVkKGNtX25vZGUpOworCQkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21fbm9kZS0+cmV0cmFuc19saXN0X2xvY2ssCiAJCQkJCWZsYWdzKTsKIAkJCQlicmVhazsKQEAgLTcxNCw3ICs3NjAsNyBAQAogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKE1BWF9DTV9CVUZGRVIpOwogCWlmICghc2tiKSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiRmFpbGVkIHRvIGdldCBhIEZyZWUgcGt0XG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlmb3JtX2NtX2ZyYW1lKHNrYiwgY21fbm9kZSwgTlVMTCwgMCwgTlVMTCwgMCwgZmxhZ3MpOwpAQCAtNzc4LDE0ICs4MjQsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmh0ZTsKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGU7Ci0JX19iZTMyIHRtcF9hZGRyID0gY3B1X3RvX2JlMzIobG9jX2FkZHIpOwogCiAJLyogZ2V0IGEgaGFuZGxlIG9uIHRoZSBodGUgKi8KIAlodGUgPSAmY21fY29yZS0+Y29ubmVjdGVkX25vZGVzOwogCi0JbmVzX2RlYnVnKE5FU19EQkdfQ00sICJTZWFyY2hpbmcgZm9yIGFuIG93bmVyIG5vZGU6ICVwSTQ6JXggZnJvbSBjb3JlICVwLT4lcFxuIiwKLQkJICAmdG1wX2FkZHIsIGxvY19wb3J0LCBjbV9jb3JlLCBodGUpOwotCiAJLyogd2FsayBsaXN0IGFuZCBmaW5kIGNtX25vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2Vzc2lvbiBJRCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9jb3JlLT5odF9sb2NrLCBmbGFncyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjbV9ub2RlLCBodGUsIGxpc3QpIHsKQEAgLTg3NSw3ICs5MTcsOCBAQAogc3RhdGljIGludCBtaW5pX2NtX2RlY19yZWZjbnRfbGlzdGVuKHN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZSwKIAlzdHJ1Y3QgbmVzX2NtX2xpc3RlbmVyICpsaXN0ZW5lciwgaW50IGZyZWVfaGFuZ2luZ19ub2RlcykKIHsKLQlpbnQgcmV0ID0gMTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X3RlbXAgPSBOVUxMOwpAQCAtOTA0LDEwICs5NDcsNjAgQEAKIAogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X3BvcywgbGlzdF90ZW1wLCAmcmVzZXRfbGlzdCkgewogCQljbV9ub2RlID0gY29udGFpbmVyX29mKGxpc3RfcG9zLCBzdHJ1Y3QgbmVzX2NtX25vZGUsCi0JCQkJCXJlc2V0X2VudHJ5KTsKLQkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwotCQlzZW5kX3Jlc2V0KGNtX25vZGUsIE5VTEwpOwotCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCQkJcmVzZXRfZW50cnkpOworCQl7CisJCQlzdHJ1Y3QgbmVzX2NtX25vZGUgKmxvb3BiYWNrID0gY21fbm9kZS0+bG9vcGJhY2twYXJ0bmVyOworCQkJaWYgKE5FU19DTV9TVEFURV9GSU5fV0FJVDEgPD0gY21fbm9kZS0+c3RhdGUpIHsKKwkJCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCQl9IGVsc2UgeworCQkJCWlmICghbG9vcGJhY2spIHsKKwkJCQkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQkJCQllcnIgPSBzZW5kX3Jlc2V0KGNtX25vZGUsIE5VTEwpOworCQkJCQlpZiAoZXJyKSB7CisJCQkJCQljbV9ub2RlLT5zdGF0ZSA9CisJCQkJCQkJIE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCQkJCQlXQVJOX09OKDEpOworCQkJCQl9IGVsc2UgeworCQkJCQkJY21fbm9kZS0+c3RhdGUgPQorCQkJCQkJCU5FU19DTV9TVEFURV9DTE9TRUQ7CisJCQkJCQlyZW1fcmVmX2NtX25vZGUoCisJCQkJCQkJY21fbm9kZS0+Y21fY29yZSwKKwkJCQkJCQljbV9ub2RlKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCXN0cnVjdCBuZXNfY21fZXZlbnQgZXZlbnQ7CisKKwkJCQkJZXZlbnQuY21fbm9kZSA9IGxvb3BiYWNrOworCQkJCQlldmVudC5jbV9pbmZvLnJlbV9hZGRyID0KKwkJCQkJCQlsb29wYmFjay0+cmVtX2FkZHI7CisJCQkJCWV2ZW50LmNtX2luZm8ubG9jX2FkZHIgPQorCQkJCQkJCWxvb3BiYWNrLT5sb2NfYWRkcjsKKwkJCQkJZXZlbnQuY21faW5mby5yZW1fcG9ydCA9CisJCQkJCQkJbG9vcGJhY2stPnJlbV9wb3J0OworCQkJCQlldmVudC5jbV9pbmZvLmxvY19wb3J0ID0KKwkJCQkJCQkgbG9vcGJhY2stPmxvY19wb3J0OworCQkJCQlldmVudC5jbV9pbmZvLmNtX2lkID0gbG9vcGJhY2stPmNtX2lkOworCQkJCQljbV9ldmVudF9jb25uZWN0X2Vycm9yKCZldmVudCk7CisJCQkJCWxvb3BiYWNrLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisKKwkJCQkJZXZlbnQuY21fbm9kZSA9IGNtX25vZGU7CisJCQkJCWV2ZW50LmNtX2luZm8ucmVtX2FkZHIgPQorCQkJCQkJCSBjbV9ub2RlLT5yZW1fYWRkcjsKKwkJCQkJZXZlbnQuY21faW5mby5sb2NfYWRkciA9CisJCQkJCQkJIGNtX25vZGUtPmxvY19hZGRyOworCQkJCQlldmVudC5jbV9pbmZvLnJlbV9wb3J0ID0KKwkJCQkJCQkgY21fbm9kZS0+cmVtX3BvcnQ7CisJCQkJCWV2ZW50LmNtX2luZm8ubG9jX3BvcnQgPQorCQkJCQkJCSBjbV9ub2RlLT5sb2NfcG9ydDsKKwkJCQkJZXZlbnQuY21faW5mby5jbV9pZCA9IGNtX25vZGUtPmNtX2lkOworCQkJCQljbV9ldmVudF9yZXNldCgmZXZlbnQpOworCisJCQkJCXJlbV9yZWZfY21fbm9kZShjbV9ub2RlLT5jbV9jb3JlLAorCQkJCQkJCSBjbV9ub2RlKTsKKworCQkJCX0KKwkJCX0KKwkJfQogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9jb3JlLT5saXN0ZW5fbGlzdF9sb2NrLCBmbGFncyk7CkBAIC05NjgsNiArMTA2MSw3IEBACiAJaWYgKGNtX25vZGUtPmFjY2VwdF9wZW5kKSB7CiAJCUJVR19PTighY21fbm9kZS0+bGlzdGVuZXIpOwogCQlhdG9taWNfZGVjKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCk7CisJCWNtX25vZGUtPmFjY2VwdF9wZW5kID0gMDsKIAkJQlVHX09OKGF0b21pY19yZWFkKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCkgPCAwKTsKIAl9CiAKQEAgLTk5NCw3ICsxMDg4LDcgQEAKIAltZW1zZXQoJmZsLCAwLCBzaXplb2YgZmwpOwogCWZsLm5sX3UuaXA0X3UuZGFkZHIgPSBodG9ubChkc3RfaXApOwogCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KCZpbml0X25ldCwgJnJ0LCAmZmwpKSB7Ci0JCXByaW50aygiJXM6IGlwX3JvdXRlX291dHB1dF9rZXkgZmFpbGVkIGZvciAweCUwOFhcbiIsCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlwX3JvdXRlX291dHB1dF9rZXkgZmFpbGVkIGZvciAweCUwOFhcbiIsCiAJCQkJX19mdW5jX18sIGRzdF9pcCk7CiAJCXJldHVybiByYzsKIAl9CkBAIC0xMDU3LDggKzExNTEsNiBAQAogCQkJY21fbm9kZS0+Y21faWQpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmNtX25vZGUtPnJldHJhbnNfbGlzdF9sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmY21fbm9kZS0+cmVjdl9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmY21fbm9kZS0+cmVjdl9saXN0X2xvY2spOwogCiAJY21fbm9kZS0+bG9vcGJhY2twYXJ0bmVyID0gTlVMTDsKIAlhdG9taWNfc2V0KCZjbV9ub2RlLT5yZWZfY291bnQsIDEpOwpAQCAtMTEyNiwxMCArMTIxOCw3IEBACiBzdGF0aWMgaW50IHJlbV9yZWZfY21fbm9kZShzdHJ1Y3QgbmVzX2NtX2NvcmUgKmNtX2NvcmUsCiAJc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHFwbG9ja2ZsYWdzOwotCXN0cnVjdCBuZXNfdGltZXJfZW50cnkgKnJlY3ZfZW50cnk7Ci0Jc3RydWN0IGl3X2NtX2lkICpjbV9pZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X2NvcmUsICpsaXN0X25vZGVfdGVtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBuZXNfcXAgKm5lc3FwOwogCiAJaWYgKCFjbV9ub2RlKQpAQCAtMTE1MCwzOCArMTIzOSw5IEBACiAJCWF0b21pY19kZWMoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KTsKIAkJQlVHX09OKGF0b21pY19yZWFkKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCkgPCAwKTsKIAl9Ci0JQlVHX09OKGNtX25vZGUtPnNlbmRfZW50cnkpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X2NvcmUsIGxpc3Rfbm9kZV90ZW1wLCAmY21fbm9kZS0+cmVjdl9saXN0KSB7Ci0JCXJlY3ZfZW50cnkgPSBjb250YWluZXJfb2YobGlzdF9jb3JlLCBzdHJ1Y3QgbmVzX3RpbWVyX2VudHJ5LAotCQkJCWxpc3QpOwotCQlsaXN0X2RlbCgmcmVjdl9lbnRyeS0+bGlzdCk7Ci0JCWNtX2lkID0gY21fbm9kZS0+Y21faWQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX25vZGUtPnJlY3ZfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKilyZWN2X2VudHJ5LT5za2I7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOwotCQlpZiAobmVzcXAtPmNtX2lkKSB7Ci0JCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIlFQJXU6IGNtX2lkID0gJXA6IEhJVCBBICIKLQkJCQkiTkVTX1RJTUVSX1RZUEVfQ0xPU0Ugd2l0aCBzb21ldGhpbmcgdG8gZG8hXG4iLAotCQkJCW5lc3FwLT5od3FwLnFwX2lkLCBjbV9pZCk7Ci0JCQluZXNxcC0+aHdfdGNwX3N0YXRlID0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFRDsKLQkJCW5lc3FwLT5sYXN0X2FlcSA9IE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVDsKLQkJCW5lc3FwLT5pYnFwX3N0YXRlID0gSUJfUVBTX0VSUjsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc3FwLT5sb2NrLCBxcGxvY2tmbGFncyk7Ci0JCQluZXNfY21fZGlzY29ubihuZXNxcCk7Ci0JCX0gZWxzZSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgcXBsb2NrZmxhZ3MpOwotCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJRUCV1OiBjbV9pZCA9ICVwOiBISVQgQSAiCi0JCQkJIk5FU19USU1FUl9UWVBFX0NMT1NFIHdpdGggbm90aGluZyB0byBkbyFcbiIsCi0JCQkJbmVzcXAtPmh3cXAucXBfaWQsIGNtX2lkKTsKLQkJfQotCQljbV9pZC0+cmVtX3JlZihjbV9pZCk7Ci0KLQkJa2ZyZWUocmVjdl9lbnRyeSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9ub2RlLT5yZWN2X2xpc3RfbG9jaywgZmxhZ3MpOwotCisJV0FSTl9PTihjbV9ub2RlLT5zZW5kX2VudHJ5KTsKKwlpZiAoY21fbm9kZS0+cmVjdl9lbnRyeSkKKwkJaGFuZGxlX3JlY3ZfZW50cnkoY21fbm9kZSwgMCk7CiAJaWYgKGNtX25vZGUtPmxpc3RlbmVyKSB7CiAJCW1pbmlfY21fZGVjX3JlZmNudF9saXN0ZW4oY21fY29yZSwgY21fbm9kZS0+bGlzdGVuZXIsIDApOwogCX0gZWxzZSB7CkBAIC0xMjY2LDggKzEzMjYsNyBAQAogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZV9maW5fcGt0KHN0cnVjdCBuZXNfY21fbm9kZSAqY21fbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQlzdHJ1Y3QgdGNwaGRyICp0Y3BoKQorc3RhdGljIHZvaWQgaGFuZGxlX2Zpbl9wa3Qoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQogewogCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiUmVjZWl2ZWQgRklOLCBjbV9ub2RlID0gJXAsIHN0YXRlID0gJXUuICIKIAkJInJlZmNudD0lZFxuIiwgY21fbm9kZSwgY21fbm9kZS0+c3RhdGUsCkBAIC0xMjc5LDIzICsxMzM4LDMwIEBACiAJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1NFTlQ6CiAJY2FzZSBORVNfQ01fU1RBVEVfRVNUQUJMSVNIRUQ6CiAJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQ6CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVKX1JDVkQ6CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0xBU1RfQUNLOwotCQlzZW5kX2ZpbihjbV9ub2RlLCBza2IpOworCQlzZW5kX2ZpbihjbV9ub2RlLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBORVNfQ01fU1RBVEVfRklOX1dBSVQxOgogCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TSU5HOwotCQlzZW5kX2FjayhjbV9ub2RlLCBza2IpOworCQlzZW5kX2FjayhjbV9ub2RlLCBOVUxMKTsKKwkJLyogV2FpdCBmb3IgQUNLIGFzIHRoaXMgaXMgc2ltdWx0YW5vdXMgY2xvc2UuLgorCQkqIEFmdGVyIHdlIHJlY2VpdmUgQUNLLCBkbyBub3Qgc2VuZCBhbnl0aGluZy4uCisJCSogSnVzdCBybSB0aGUgbm9kZS4uIERvbmUuLiAqLwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDI6CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX1RJTUVfV0FJVDsKLQkJc2VuZF9hY2soY21fbm9kZSwgc2tiKTsKKwkJc2VuZF9hY2soY21fbm9kZSwgTlVMTCk7CisJCXNjaGVkdWxlX25lc190aW1lcihjbV9ub2RlLCBOVUxMLCAgTkVTX1RJTUVSX1RZUEVfQ0xPU0UsIDEsIDApOworCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9USU1FX1dBSVQ6CiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9UU0E6CiAJZGVmYXVsdDoKIAkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJFcnJvciBSY3ZkIEZJTiBmb3Igbm9kZS0lcCBzdGF0ZSA9ICVkXG4iLAogCQkJY21fbm9kZSwgY21fbm9kZS0+c3RhdGUpOwotCQlkcm9wX3BhY2tldChza2IpOwogCQlicmVhazsKIAl9CiB9CkBAIC0xMzQxLDIzICsxNDA3LDM1IEBACiAJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJZHJvcF9wYWNrZXQoc2tiKTsKIAkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfVElNRV9XQUlUOgorCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CisJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKKwkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsIGNtX25vZGUpOworCQlkcm9wX3BhY2tldChza2IpOworCQlicmVhazsKKwljYXNlIE5FU19DTV9TVEFURV9GSU5fV0FJVDE6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJCYWQgc3RhdGUgJXNbJXVdXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCWRlZmF1bHQ6CiAJCWRyb3BfcGFja2V0KHNrYik7CiAJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlX3Jjdl9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCWVudW0gbmVzX2NtX2V2ZW50X3R5cGUgdHlwZSkKKworc3RhdGljIHZvaWQgaGFuZGxlX3Jjdl9tcGEoc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCi0JaW50CXJldDsKKwlpbnQJcmV0ID0gMDsKIAlpbnQgZGF0YXNpemUgPSBza2ItPmxlbjsKIAl1OCAqZGF0YWxvYyA9IHNrYi0+ZGF0YTsKLQlyZXQgPSBwYXJzZV9tcGEoY21fbm9kZSwgZGF0YWxvYywgZGF0YXNpemUpOwotCWlmIChyZXQgPCAwKSB7CisKKwllbnVtIG5lc19jbV9ldmVudF90eXBlIHR5cGUgPSBORVNfQ01fRVZFTlRfVU5LTk9XTjsKKwl1MzIgICAgIHJlc190eXBlOworCXJldCA9IHBhcnNlX21wYShjbV9ub2RlLCBkYXRhbG9jLCAmcmVzX3R5cGUsIGRhdGFzaXplKTsKKwlpZiAocmV0KSB7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiZGlkbid0IGxpa2UgTVBBIFJlcXVlc3RcbiIpOwotCQlpZiAodHlwZSA9PSBORVNfQ01fRVZFTlRfQ09OTkVDVEVEKSB7CisJCWlmIChjbV9ub2RlLT5zdGF0ZSA9PSBORVNfQ01fU1RBVEVfTVBBUkVRX1NFTlQpIHsKIAkJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiJXNbJXVdIGNyZWF0ZSBhYm9ydCBmb3IgIgogCQkJCSJjbV9ub2RlPSVwIGxpc3RlbmVyPSVwIHN0YXRlPSVkXG4iLCBfX2Z1bmNfXywKIAkJCQlfX0xJTkVfXywgY21fbm9kZSwgY21fbm9kZS0+bGlzdGVuZXIsCkBAIC0xMzY2LDE4ICsxNDQ0LDM4IEBACiAJCX0gZWxzZSB7CiAJCQlwYXNzaXZlX29wZW5fZXJyKGNtX25vZGUsIHNrYiwgMSk7CiAJCX0KLQl9IGVsc2UgewotCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCWlmICh0eXBlID09IE5FU19DTV9FVkVOVF9DT05ORUNURUQpCi0JCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9UU0E7Ci0JCWVsc2UKLQkJCWF0b21pY19zZXQoJmNtX25vZGUtPnBhc3NpdmVfc3RhdGUsCi0JCQkJCU5FU19QQVNTSVZFX1NUQVRFX0lORElDQVRFRCk7Ci0JCWNyZWF0ZV9ldmVudChjbV9ub2RlLCB0eXBlKTsKLQorCQlyZXR1cm47CiAJfQotCXJldHVybiA7CisKKwlzd2l0Y2ggKGNtX25vZGUtPnN0YXRlKSB7CisJY2FzZSBORVNfQ01fU1RBVEVfRVNUQUJMSVNIRUQ6CisJCWlmIChyZXNfdHlwZSA9PSBORVNfTVBBX1JFUVVFU1RfUkVKRUNUKSB7CisJCQkvKkJJRyBwcm9ibGVtIGFzIHdlIGFyZSByZWNlaXZpbmcgdGhlIE1QQS4uIFNvIHNob3VsZAorCQkJKiBub3QgYmUgUkVKRUNULi4gVGhpcyBpcyBQYXNzaXZlIE9wZW4uLiBXZSBjYW4KKwkJCSogb25seSByZWNlaXZlIGl0IFJlamVjdCBmb3IgQWN0aXZlIE9wZW4uLi4qLworCQkJV0FSTl9PTigxKTsKKwkJfQorCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9NUEFSRVFfUkNWRDsKKwkJdHlwZSA9IE5FU19DTV9FVkVOVF9NUEFfUkVROworCQlhdG9taWNfc2V0KCZjbV9ub2RlLT5wYXNzaXZlX3N0YXRlLAorCQkJCU5FU19QQVNTSVZFX1NUQVRFX0lORElDQVRFRCk7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NUQVRFX01QQVJFUV9TRU5UOgorCQlpZiAocmVzX3R5cGUgPT0gTkVTX01QQV9SRVFVRVNUX1JFSkVDVCkgeworCQkJdHlwZSA9IE5FU19DTV9FVkVOVF9NUEFfUkVKRUNUOworCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTVBBUkVKX1JDVkQ7CisJCX0gZWxzZSB7CisJCQl0eXBlID0gTkVTX0NNX0VWRU5UX0NPTk5FQ1RFRDsKKwkJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX1RTQTsKKwkJfQorCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KKwlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCWNyZWF0ZV9ldmVudChjbV9ub2RlLCB0eXBlKTsKIH0KIAogc3RhdGljIHZvaWQgaW5kaWNhdGVfcGt0X2VycihzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGUsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xNDY1LDggKzE1NjMsNiBAQAogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9MSVNURU5JTkc6CiAJCS8qIFBhc3NpdmUgT1BFTiAqLwotCQljbV9ub2RlLT5hY2NlcHRfcGVuZCA9IDE7Ci0JCWF0b21pY19pbmMoJmNtX25vZGUtPmxpc3RlbmVyLT5wZW5kX2FjY2VwdHNfY250KTsKIAkJaWYgKGF0b21pY19yZWFkKCZjbV9ub2RlLT5saXN0ZW5lci0+cGVuZF9hY2NlcHRzX2NudCkgPgogCQkJCWNtX25vZGUtPmxpc3RlbmVyLT5iYWNrbG9nKSB7CiAJCQluZXNfZGVidWcoTkVTX0RCR19DTSwgImRyb3Agc3luIGR1ZSB0byBiYWNrbG9nICIKQEAgLTE0ODQsNiArMTU4MCw5IEBACiAJCX0KIAkJY21fbm9kZS0+dGNwX2NudHh0LnJjdl9ueHQgPSBpbmNfc2VxdWVuY2UgKyAxOwogCQlCVUdfT04oY21fbm9kZS0+c2VuZF9lbnRyeSk7CisJCWNtX25vZGUtPmFjY2VwdF9wZW5kID0gMTsKKwkJYXRvbWljX2luYygmY21fbm9kZS0+bGlzdGVuZXItPnBlbmRfYWNjZXB0c19jbnQpOworCiAJCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX1NZTl9SQ1ZEOwogCQlzZW5kX3N5bihjbV9ub2RlLCAxLCBza2IpOwogCQlicmVhazsKQEAgLTE1MTgsNiArMTYxNyw3IEBACiAJaW5jX3NlcXVlbmNlID0gbnRvaGwodGNwaC0+c2VxKTsKIAlzd2l0Y2ggKGNtX25vZGUtPnN0YXRlKSB7CiAJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1NFTlQ6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJLyogYWN0aXZlIG9wZW4gKi8KIAkJaWYgKGNoZWNrX3N5bihjbV9ub2RlLCB0Y3BoLCBza2IpKQogCQkJcmV0dXJuOwpAQCAtMTU2NywxMCArMTY2Nyw3IEBACiAJdTMyIHJlbV9zZXE7CiAJaW50IHJldDsKIAlpbnQgb3B0aW9uc2l6ZTsKLQl1MzIgdGVtcF9zZXEgPSBjbV9ub2RlLT50Y3BfY250eHQubG9jX3NlcV9udW07Ci0KIAlvcHRpb25zaXplID0gKHRjcGgtPmRvZmYgPDwgMikgLSBzaXplb2Yoc3RydWN0IHRjcGhkcik7Ci0JY21fbm9kZS0+dGNwX2NudHh0LmxvY19zZXFfbnVtID0gbnRvaGwodGNwaC0+YWNrX3NlcSk7CiAKIAlpZiAoY2hlY2tfc2VxKGNtX25vZGUsIHRjcGgsIHNrYikpCiAJCXJldHVybjsKQEAgLTE1ODAsNyArMTY3Nyw3IEBACiAJcmVtX3NlcSA9IG50b2hsKHRjcGgtPnNlcSk7CiAJcmVtX3NlcV9hY2sgPSAgbnRvaGwodGNwaC0+YWNrX3NlcSk7CiAJZGF0YXNpemUgPSBza2ItPmxlbjsKLQorCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAlzd2l0Y2ggKGNtX25vZGUtPnN0YXRlKSB7CiAJY2FzZSBORVNfQ01fU1RBVEVfU1lOX1JDVkQ6CiAJCS8qIFBhc3NpdmUgT1BFTiAqLwpAQCAtMTU4OCw3ICsxNjg1LDYgQEAKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCQljbV9ub2RlLT50Y3BfY250eHQucmVtX2Fja19udW0gPSBudG9obCh0Y3BoLT5hY2tfc2VxKTsKLQkJY21fbm9kZS0+dGNwX2NudHh0LmxvY19zZXFfbnVtID0gdGVtcF9zZXE7CiAJCWlmIChjbV9ub2RlLT50Y3BfY250eHQucmVtX2Fja19udW0gIT0KIAkJICAgIGNtX25vZGUtPnRjcF9jbnR4dC5sb2Nfc2VxX251bSkgewogCQkJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJyZW1fYWNrX251bSAhPSBsb2Nfc2VxX251bVxuIik7CkBAIC0xNTk3LDMxICsxNjkzLDMwIEBACiAJCQlyZXR1cm47CiAJCX0KIAkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfRVNUQUJMSVNIRUQ7CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJaWYgKGRhdGFzaXplKSB7CiAJCQljbV9ub2RlLT50Y3BfY250eHQucmN2X254dCA9IGluY19zZXF1ZW5jZSArIGRhdGFzaXplOwotCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTVBBUkVRX1JDVkQ7Ci0JCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IsIE5FU19DTV9FVkVOVF9NUEFfUkVRKTsKLQkJIH0gZWxzZSB7IC8qIHJjdmQgQUNLIG9ubHkgKi8KKwkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYik7CisJCX0gZWxzZSB7IC8qIHJjdmQgQUNLIG9ubHkgKi8KIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCSB9CiAJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0VTVEFCTElTSEVEOgogCQkvKiBQYXNzaXZlIE9QRU4gKi8KLQkJLyogV2UgZXhwZWN0IG1wYSBmcmFtZSB0byBiZSByZWNlaXZlZCBvbmx5ICovCisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKIAkJaWYgKGRhdGFzaXplKSB7CiAJCQljbV9ub2RlLT50Y3BfY250eHQucmN2X254dCA9IGluY19zZXF1ZW5jZSArIGRhdGFzaXplOwotCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTVBBUkVRX1JDVkQ7Ci0JCQloYW5kbGVfcmN2X21wYShjbV9ub2RlLCBza2IsCi0JCQkJTkVTX0NNX0VWRU5UX01QQV9SRVEpOworCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiKTsKIAkJfSBlbHNlCiAJCQlkcm9wX3BhY2tldChza2IpOwogCQlicmVhazsKIAljYXNlIE5FU19DTV9TVEFURV9NUEFSRVFfU0VOVDoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOwogCQljbV9ub2RlLT50Y3BfY250eHQucmVtX2Fja19udW0gPSBudG9obCh0Y3BoLT5hY2tfc2VxKTsKIAkJaWYgKGRhdGFzaXplKSB7CiAJCQljbV9ub2RlLT50Y3BfY250eHQucmN2X254dCA9IGluY19zZXF1ZW5jZSArIGRhdGFzaXplOwotCQkJaGFuZGxlX3Jjdl9tcGEoY21fbm9kZSwgc2tiLCBORVNfQ01fRVZFTlRfQ09OTkVDVEVEKTsKKwkJCWhhbmRsZV9yY3ZfbXBhKGNtX25vZGUsIHNrYik7CiAJCX0gZWxzZSB7IC8qIENvdWxkIGJlIGp1c3QgYW4gYWNrIHBrdC4uICovCiAJCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMTYzMiwxMyArMTcyNywyNCBAQAogCQljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAJCXNlbmRfcmVzZXQoY21fbm9kZSwgc2tiKTsKIAkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfTEFTVF9BQ0s6CisJCWNsZWFudXBfcmV0cmFuc19lbnRyeShjbV9ub2RlKTsKKwkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQljbV9ub2RlLT5jbV9pZC0+cmVtX3JlZihjbV9ub2RlLT5jbV9pZCk7CisJY2FzZSBORVNfQ01fU1RBVEVfQ0xPU0lORzoKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQlyZW1fcmVmX2NtX25vZGUoY21fbm9kZS0+Y21fY29yZSwgY21fbm9kZSk7CisJCWRyb3BfcGFja2V0KHNrYik7CisJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMToKKwkJY2xlYW51cF9yZXRyYW5zX2VudHJ5KGNtX25vZGUpOworCQlkcm9wX3BhY2tldChza2IpOworCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9GSU5fV0FJVDI7CisJCWJyZWFrOwogCWNhc2UgTkVTX0NNX1NUQVRFX1NZTl9TRU5UOgogCWNhc2UgTkVTX0NNX1NUQVRFX0ZJTl9XQUlUMjoKIAljYXNlIE5FU19DTV9TVEFURV9UU0E6CiAJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVRX1JDVkQ6Ci0JY2FzZSBORVNfQ01fU1RBVEVfTEFTVF9BQ0s6Ci0JY2FzZSBORVNfQ01fU1RBVEVfQ0xPU0lORzoKIAljYXNlIE5FU19DTV9TVEFURV9VTktOT1dOOgogCWRlZmF1bHQ6CiAJCWRyb3BfcGFja2V0KHNrYik7CkBAIC0xNzQ4LDYgKzE4NTQsNyBAQAogewogCWVudW0gbmVzX3RjcGlwX3BrdF90eXBlCXBrdF90eXBlID0gTkVTX1BLVF9UWVBFX1VOS05PV047CiAJc3RydWN0IHRjcGhkciAqdGNwaCA9IHRjcF9oZHIoc2tiKTsKKwl1MzIgICAgIGZpbl9zZXQgPSAwOwogCXNrYl9wdWxsKHNrYiwgaXBfaGRyKHNrYiktPmlobCA8PCAyKTsKIAogCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAicHJvY2Vzc19wYWNrZXQ6IGNtX25vZGU9JXAgc3RhdGUgPSVkIHN5bj0lZCAiCkBAIC0xNzYwLDEwICsxODY3LDEwIEBACiAJCXBrdF90eXBlID0gTkVTX1BLVF9UWVBFX1NZTjsKIAkJaWYgKHRjcGgtPmFjaykKIAkJCXBrdF90eXBlID0gTkVTX1BLVF9UWVBFX1NZTkFDSzsKLQl9IGVsc2UgaWYgKHRjcGgtPmZpbikKLQkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfRklOOwotCWVsc2UgaWYgKHRjcGgtPmFjaykKKwl9IGVsc2UgaWYgKHRjcGgtPmFjaykKIAkJcGt0X3R5cGUgPSBORVNfUEtUX1RZUEVfQUNLOworCWlmICh0Y3BoLT5maW4pCisJCWZpbl9zZXQgPSAxOwogCiAJc3dpdGNoIChwa3RfdHlwZSkgewogCWNhc2UgTkVTX1BLVF9UWVBFX1NZTjoKQEAgLTE3NzQsMTUgKzE4ODEsMTYgQEAKIAkJYnJlYWs7CiAJY2FzZSBORVNfUEtUX1RZUEVfQUNLOgogCQloYW5kbGVfYWNrX3BrdChjbV9ub2RlLCBza2IsIHRjcGgpOworCQlpZiAoZmluX3NldCkKKwkJCWhhbmRsZV9maW5fcGt0KGNtX25vZGUpOwogCQlicmVhazsKIAljYXNlIE5FU19QS1RfVFlQRV9SU1Q6CiAJCWhhbmRsZV9yc3RfcGt0KGNtX25vZGUsIHNrYiwgdGNwaCk7CiAJCWJyZWFrOwotCWNhc2UgTkVTX1BLVF9UWVBFX0ZJTjoKLQkJaGFuZGxlX2Zpbl9wa3QoY21fbm9kZSwgc2tiLCB0Y3BoKTsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZHJvcF9wYWNrZXQoc2tiKTsKKwkJaWYgKGZpbl9zZXQpCisJCQloYW5kbGVfZmluX3BrdChjbV9ub2RlKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMTkyNSw3ICsyMDMzLDcgQEAKIAkJCQlsb29wYmFja3JlbW90ZW5vZGUtPnRjcF9jbnR4dC5yY3Zfd3NjYWxlOwogCQkJbG9vcGJhY2tyZW1vdGVub2RlLT50Y3BfY250eHQuc25kX3dzY2FsZSA9CiAJCQkJY21fbm9kZS0+dGNwX2NudHh0LnJjdl93c2NhbGU7Ci0KKwkJCWxvb3BiYWNrcmVtb3Rlbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfTVBBUkVRX1JDVkQ7CiAJCQljcmVhdGVfZXZlbnQobG9vcGJhY2tyZW1vdGVub2RlLCBORVNfQ01fRVZFTlRfTVBBX1JFUSk7CiAJCX0KIAkJcmV0dXJuIGNtX25vZGU7CkBAIC0xOTgwLDcgKzIwODgsMTEgQEAKIAlzdHJ1Y3QgaWV0Zl9tcGFfZnJhbWUgKm1wYV9mcmFtZSwgc3RydWN0IG5lc19jbV9ub2RlICpjbV9ub2RlKQogewogCWludCByZXQgPSAwOworCWludCBlcnIgPSAwOwogCWludCBwYXNzaXZlX3N0YXRlOworCXN0cnVjdCBuZXNfY21fZXZlbnQgZXZlbnQ7CisJc3RydWN0IGl3X2NtX2lkICpjbV9pZCA9IGNtX25vZGUtPmNtX2lkOworCXN0cnVjdCBuZXNfY21fbm9kZSAqbG9vcGJhY2sgPSBjbV9ub2RlLT5sb29wYmFja3BhcnRuZXI7CiAKIAluZXNfZGVidWcoTkVTX0RCR19DTSwgIiVzIGNtX25vZGU9JXAgdHlwZT0lZCBzdGF0ZT0lZFxuIiwKIAkJX19mdW5jX18sIGNtX25vZGUsIGNtX25vZGUtPnRjcF9jbnR4dC5jbGllbnQsIGNtX25vZGUtPnN0YXRlKTsKQEAgLTE5ODksMTIgKzIxMDEsMzggQEAKIAkJcmV0dXJuIHJldDsKIAljbGVhbnVwX3JldHJhbnNfZW50cnkoY21fbm9kZSk7CiAKLQlwYXNzaXZlX3N0YXRlID0gYXRvbWljX2FkZF9yZXR1cm4oMSwgJmNtX25vZGUtPnBhc3NpdmVfc3RhdGUpOwotCWNtX25vZGUtPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKLQlpZiAocGFzc2l2ZV9zdGF0ZSA9PSBORVNfU0VORF9SRVNFVF9FVkVOVCkKKwlpZiAoIWxvb3BiYWNrKSB7CisJCXBhc3NpdmVfc3RhdGUgPSBhdG9taWNfYWRkX3JldHVybigxLCAmY21fbm9kZS0+cGFzc2l2ZV9zdGF0ZSk7CisJCWlmIChwYXNzaXZlX3N0YXRlID09IE5FU19TRU5EX1JFU0VUX0VWRU5UKSB7CisJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CisJCQlyZW1fcmVmX2NtX25vZGUoY21fY29yZSwgY21fbm9kZSk7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBzZW5kX21wYV9yZWplY3QoY21fbm9kZSk7CisJCQlpZiAocmV0KSB7CisJCQkJY21fbm9kZS0+c3RhdGUgPSBORVNfQ01fU1RBVEVfQ0xPU0VEOworCQkJCWVyciA9IHNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCQkJaWYgKGVycikKKwkJCQkJV0FSTl9PTigxKTsKKwkJCX0gZWxzZQorCQkJCWNtX2lkLT5hZGRfcmVmKGNtX2lkKTsKKwkJfQorCX0gZWxzZSB7CisJCWNtX25vZGUtPmNtX2lkID0gTlVMTDsKKwkJZXZlbnQuY21fbm9kZSA9IGxvb3BiYWNrOworCQlldmVudC5jbV9pbmZvLnJlbV9hZGRyID0gbG9vcGJhY2stPnJlbV9hZGRyOworCQlldmVudC5jbV9pbmZvLmxvY19hZGRyID0gbG9vcGJhY2stPmxvY19hZGRyOworCQlldmVudC5jbV9pbmZvLnJlbV9wb3J0ID0gbG9vcGJhY2stPnJlbV9wb3J0OworCQlldmVudC5jbV9pbmZvLmxvY19wb3J0ID0gbG9vcGJhY2stPmxvY19wb3J0OworCQlldmVudC5jbV9pbmZvLmNtX2lkID0gbG9vcGJhY2stPmNtX2lkOworCQljbV9ldmVudF9tcGFfcmVqZWN0KCZldmVudCk7CiAJCXJlbV9yZWZfY21fbm9kZShjbV9jb3JlLCBjbV9ub2RlKTsKLQllbHNlCi0JCXJldCA9IHNlbmRfcmVzZXQoY21fbm9kZSwgTlVMTCk7CisJCWxvb3BiYWNrLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TSU5HOworCisJCWNtX2lkID0gbG9vcGJhY2stPmNtX2lkOworCQlyZW1fcmVmX2NtX25vZGUoY21fY29yZSwgbG9vcGJhY2spOworCQljbV9pZC0+cmVtX3JlZihjbV9pZCk7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjAzMSw2ICsyMTY5LDcgQEAKIAljYXNlIE5FU19DTV9TVEFURV9DTE9TSU5HOgogCQlyZXQgPSAtMTsKIAkJYnJlYWs7CisJY2FzZSBORVNfQ01fU1RBVEVfTVBBUkVKX1JDVkQ6CiAJY2FzZSBORVNfQ01fU1RBVEVfTElTVEVOSU5HOgogCWNhc2UgTkVTX0NNX1NUQVRFX1VOS05PV046CiAJY2FzZSBORVNfQ01fU1RBVEVfSU5JVEVEOgpAQCAtMjIyNywxNSArMjM2NiwxNSBAQAogCWludCByZXQgPSAwOwogCiAJc3dpdGNoICh0eXBlKSB7Ci0JCWNhc2UgTkVTX0NNX1NFVF9QS1RfU0laRToKLQkJCWNtX2NvcmUtPm10dSA9IHZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgTkVTX0NNX1NFVF9GUkVFX1BLVF9RX1NJWkU6Ci0JCQljbV9jb3JlLT5mcmVlX3R4X3BrdF9tYXggPSB2YWx1ZTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogdW5rbm93biBzZXQgb3B0aW9uICovCi0JCQlyZXQgPSAtRUlOVkFMOworCWNhc2UgTkVTX0NNX1NFVF9QS1RfU0laRToKKwkJY21fY29yZS0+bXR1ID0gdmFsdWU7CisJCWJyZWFrOworCWNhc2UgTkVTX0NNX1NFVF9GUkVFX1BLVF9RX1NJWkU6CisJCWNtX2NvcmUtPmZyZWVfdHhfcGt0X21heCA9IHZhbHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiB1bmtub3duIHNldCBvcHRpb24gKi8KKwkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMjY1NCw5ICsyNzkzLDcgQEAKIAkJCU5FU19RUENPTlRFWFRfT1JESVJEX1dSUERVKTsKIAl9IGVsc2UgewogCQluZXNxcC0+bmVzcXBfY29udGV4dC0+aXJkX29yZF9zaXplcyB8PQotCQkJY3B1X3RvX2xlMzIoKE5FU19RUENPTlRFWFRfT1JESVJEX0xTTU1fUFJFU0VOVCB8Ci0JCQlORVNfUVBDT05URVhUX09SRElSRF9XUlBEVSB8Ci0JCQlORVNfUVBDT05URVhUX09SRElSRF9BTFNNTSkpOworCQkJY3B1X3RvX2xlMzIoTkVTX1FQQ09OVEVYVF9PUkRJUkRfV1JQRFUpOwogCX0KIAluZXNxcC0+c2tpcF9sc21tID0gMTsKIApAQCAtMjc3OCwyMyArMjkxNSwzNSBAQAogaW50IG5lc19yZWplY3Qoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwgY29uc3Qgdm9pZCAqcGRhdGEsIHU4IHBkYXRhX2xlbikKIHsKIAlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGU7CisJc3RydWN0IG5lc19jbV9ub2RlICpsb29wYmFjazsKKwogCXN0cnVjdCBuZXNfY21fY29yZSAqY21fY29yZTsKIAogCWF0b21pY19pbmMoJmNtX3JlamVjdHMpOwogCWNtX25vZGUgPSAoc3RydWN0IG5lc19jbV9ub2RlICopIGNtX2lkLT5wcm92aWRlcl9kYXRhOworCWxvb3BiYWNrID0gY21fbm9kZS0+bG9vcGJhY2twYXJ0bmVyOwogCWNtX2NvcmUgPSBjbV9ub2RlLT5jbV9jb3JlOworCWNtX25vZGUtPmNtX2lkID0gY21faWQ7CiAJY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUgPSBzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSArIHBkYXRhX2xlbjsKIAotCXN0cmNweSgmY21fbm9kZS0+bXBhX2ZyYW1lLmtleVswXSwgSUVGVF9NUEFfS0VZX1JFUCk7Ci0JbWVtY3B5KCZjbV9ub2RlLT5tcGFfZnJhbWUucHJpdl9kYXRhLCBwZGF0YSwgcGRhdGFfbGVuKTsKKwlpZiAoY21fbm9kZS0+bXBhX2ZyYW1lX3NpemUgPiBNQVhfQ01fQlVGRkVSKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWNtX25vZGUtPm1wYV9mcmFtZS5wcml2X2RhdGFfbGVuID0gY3B1X3RvX2JlMTYocGRhdGFfbGVuKTsKKwlzdHJjcHkoJmNtX25vZGUtPm1wYV9mcmFtZS5rZXlbMF0sIElFRlRfTVBBX0tFWV9SRVApOworCWlmIChsb29wYmFjaykgeworCQltZW1jcHkoJmxvb3BiYWNrLT5tcGFfZnJhbWUucHJpdl9kYXRhLCBwZGF0YSwgcGRhdGFfbGVuKTsKKwkJbG9vcGJhY2stPm1wYV9mcmFtZS5wcml2X2RhdGFfbGVuID0gcGRhdGFfbGVuOworCQlsb29wYmFjay0+bXBhX2ZyYW1lX3NpemUgPSBzaXplb2Yoc3RydWN0IGlldGZfbXBhX2ZyYW1lKSArCisJCQkJcGRhdGFfbGVuOworCX0gZWxzZSB7CisJCW1lbWNweSgmY21fbm9kZS0+bXBhX2ZyYW1lLnByaXZfZGF0YSwgcGRhdGEsIHBkYXRhX2xlbik7CisJCWNtX25vZGUtPm1wYV9mcmFtZS5wcml2X2RhdGFfbGVuID0gY3B1X3RvX2JlMTYocGRhdGFfbGVuKTsKKwl9CisKIAljbV9ub2RlLT5tcGFfZnJhbWUucmV2ID0gbXBhX3ZlcnNpb247CiAJY21fbm9kZS0+bXBhX2ZyYW1lLmZsYWdzID0gSUVURl9NUEFfRkxBR1NfQ1JDIHwgSUVURl9NUEFfRkxBR1NfUkVKRUNUOwogCi0JY21fY29yZS0+YXBpLT5yZWplY3QoY21fY29yZSwgJmNtX25vZGUtPm1wYV9mcmFtZSwgY21fbm9kZSk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gY21fY29yZS0+YXBpLT5yZWplY3QoY21fY29yZSwgJmNtX25vZGUtPm1wYV9mcmFtZSwgY21fbm9kZSk7CiB9CiAKIApAQCAtMzMwMywxMyArMzQ1Miw1NiBAQAogCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9wb3J0ID0gaHRvbnMoZXZlbnQtPmNtX2luZm8ucmVtX3BvcnQpOwogCWNtX2V2ZW50LnJlbW90ZV9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKGV2ZW50LT5jbV9pbmZvLnJlbV9hZGRyKTsKLQotCQljbV9ldmVudC5wcml2YXRlX2RhdGEgICAgICAgICAgICAgICAgPSBjbV9ub2RlLT5tcGFfZnJhbWVfYnVmOwotCQljbV9ldmVudC5wcml2YXRlX2RhdGFfbGVuICAgICAgICAgICAgPSAodTgpIGNtX25vZGUtPm1wYV9mcmFtZV9zaXplOworCWNtX2V2ZW50LnByaXZhdGVfZGF0YSA9IGNtX25vZGUtPm1wYV9mcmFtZV9idWY7CisJY21fZXZlbnQucHJpdmF0ZV9kYXRhX2xlbiAgPSAodTgpIGNtX25vZGUtPm1wYV9mcmFtZV9zaXplOwogCiAJcmV0ID0gY21faWQtPmV2ZW50X2hhbmRsZXIoY21faWQsICZjbV9ldmVudCk7CiAJaWYgKHJldCkKLQkJcHJpbnRrKCIlc1sldV0gT0ZBIENNIGV2ZW50X2hhbmRsZXIgcmV0dXJuZWQsIHJldD0lZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlc1sldV0gT0ZBIENNIGV2ZW50X2hhbmRsZXIgcmV0dXJuZWQsIHJldD0lZFxuIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CisJcmV0dXJuOworfQorCisKK3N0YXRpYyB2b2lkIGNtX2V2ZW50X21wYV9yZWplY3Qoc3RydWN0IG5lc19jbV9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IGl3X2NtX2lkICAgKmNtX2lkOworCXN0cnVjdCBpd19jbV9ldmVudCBjbV9ldmVudDsKKwlzdHJ1Y3QgbmVzX2NtX25vZGUgKmNtX25vZGU7CisJaW50IHJldDsKKworCWNtX25vZGUgPSBldmVudC0+Y21fbm9kZTsKKwlpZiAoIWNtX25vZGUpCisJCXJldHVybjsKKwljbV9pZCA9IGNtX25vZGUtPmNtX2lkOworCisJYXRvbWljX2luYygmY21fY29ubmVjdF9yZXFzKTsKKwluZXNfZGVidWcoTkVTX0RCR19DTSwgImNtX25vZGUgPSAlcCAtIGNtX2lkID0gJXAsIGppZmZpZXMgPSAlbHVcbiIsCisJCQljbV9ub2RlLCBjbV9pZCwgamlmZmllcyk7CisKKwljbV9ldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0NPTk5FQ1RfUkVQTFk7CisJY21fZXZlbnQuc3RhdHVzID0gLUVDT05OUkVGVVNFRDsKKwljbV9ldmVudC5wcm92aWRlcl9kYXRhID0gY21faWQtPnByb3ZpZGVyX2RhdGE7CisKKwljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWNtX2V2ZW50LmxvY2FsX2FkZHIuc2luX3BvcnQgPSBodG9ucyhldmVudC0+Y21faW5mby5sb2NfcG9ydCk7CisJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChldmVudC0+Y21faW5mby5sb2NfYWRkcik7CisKKwljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fcG9ydCA9IGh0b25zKGV2ZW50LT5jbV9pbmZvLnJlbV9wb3J0KTsKKwljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChldmVudC0+Y21faW5mby5yZW1fYWRkcik7CisKKwljbV9ldmVudC5wcml2YXRlX2RhdGEgPSBjbV9ub2RlLT5tcGFfZnJhbWVfYnVmOworCWNtX2V2ZW50LnByaXZhdGVfZGF0YV9sZW4gPSAodTgpIGNtX25vZGUtPm1wYV9mcmFtZV9zaXplOworCisJbmVzX2RlYnVnKE5FU19EQkdfQ00sICJjYWxsIENNX0VWRU5UX01QQV9SRUpFQ1RFRCwgbG9jYWxfYWRkcj0lMDh4LCAiCisJCQkicmVtb3ZlX2FkZHI9JTA4eFxuIiwKKwkJCWNtX2V2ZW50LmxvY2FsX2FkZHIuc2luX2FkZHIuc19hZGRyLAorCQkJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyKTsKKworCXJldCA9IGNtX2lkLT5ldmVudF9oYW5kbGVyKGNtX2lkLCAmY21fZXZlbnQpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAiJXNbJXVdIE9GQSBDTSBldmVudF9oYW5kbGVyIHJldHVybmVkLCByZXQ9JWRcbiIsCiAJCQkJX19mdW5jX18sIF9fTElORV9fLCByZXQpOwogCiAJcmV0dXJuOwpAQCAtMzM3NCw2ICszNTY2LDE0IEBACiAJCWNtX2V2ZW50X2Nvbm5lY3RlZChldmVudCk7CiAJCW5lc19kZWJ1ZyhORVNfREJHX0NNLCAiQ00gRXZlbnQ6IENPTk5FQ1RFRFxuIik7CiAJCWJyZWFrOworCWNhc2UgTkVTX0NNX0VWRU5UX01QQV9SRUpFQ1Q6CisJCWlmICgoIWV2ZW50LT5jbV9ub2RlLT5jbV9pZCkgfHwKKwkJCQkoZXZlbnQtPmNtX25vZGUtPnN0YXRlID09IE5FU19DTV9TVEFURV9UU0EpKQorCQkJYnJlYWs7CisJCWNtX2V2ZW50X21wYV9yZWplY3QoZXZlbnQpOworCQluZXNfZGVidWcoTkVTX0RCR19DTSwgIkNNIEV2ZW50OiBSRUpFQ1RcbiIpOworCQlicmVhazsKKwogCWNhc2UgTkVTX0NNX0VWRU5UX0FCT1JURUQ6CiAJCWlmICgoIWV2ZW50LT5jbV9ub2RlLT5jbV9pZCkgfHwKIAkJCShldmVudC0+Y21fbm9kZS0+c3RhdGUgPT0gTkVTX0NNX1NUQVRFX1RTQSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uaAppbmRleCBmYWZhMzUwLi5kNWY3NzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKQEAgLTM5LDYgKzM5LDkgQEAKICNkZWZpbmUgTkVTX01BTkFHRV9BUEJWVF9ERUwgMAogI2RlZmluZSBORVNfTUFOQUdFX0FQQlZUX0FERCAxCiAKKyNkZWZpbmUgTkVTX01QQV9SRVFVRVNUX0FDQ0VQVCAgMQorI2RlZmluZSBORVNfTVBBX1JFUVVFU1RfUkVKRUNUICAyCisKIC8qIElFVEYgTVBBIC0tIGRlZmluZXMsIGVudW1zLCBzdHJ1Y3RzICovCiAjZGVmaW5lIElFRlRfTVBBX0tFWV9SRVEgICJNUEEgSUQgUmVxIEZyYW1lIgogI2RlZmluZSBJRUZUX01QQV9LRVlfUkVQICAiTVBBIElEIFJlcCBGcmFtZSIKQEAgLTE4Niw2ICsxODksNyBAQAogCU5FU19DTV9TVEFURV9BQ0NFUFRJTkcsCiAJTkVTX0NNX1NUQVRFX01QQVJFUV9TRU5ULAogCU5FU19DTV9TVEFURV9NUEFSRVFfUkNWRCwKKwlORVNfQ01fU1RBVEVfTVBBUkVKX1JDVkQsCiAJTkVTX0NNX1NUQVRFX1RTQSwKIAlORVNfQ01fU1RBVEVfRklOX1dBSVQxLAogCU5FU19DTV9TVEFURV9GSU5fV0FJVDIsCkBAIC0yNzgsMTMgKzI4MiwxMiBAQAogCXN0cnVjdCBuZXNfdGltZXJfZW50cnkJKnNlbmRfZW50cnk7CiAKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgIHJldHJhbnNfbGlzdF9sb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgcmVjdl9saXN0OwotCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgcmVjdl9saXN0X2xvY2s7CisJc3RydWN0IG5lc190aW1lcl9lbnRyeSAgKnJlY3ZfZW50cnk7CiAKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfd3JpdGUwOwogCXVuaW9uIHsKIAkJc3RydWN0IGlldGZfbXBhX2ZyYW1lIG1wYV9mcmFtZTsKLQkJdTggICAgICAgICAgICAgICAgICAgIG1wYV9mcmFtZV9idWZbTkVTX0NNX0RFRkFVTFRfTVRVXTsKKwkJdTggICAgICAgICAgICAgICAgICAgIG1wYV9mcmFtZV9idWZbTUFYX0NNX0JVRkZFUl07CiAJfTsKIAl1MTYgICAgICAgICAgICAgICAgICAgICAgIG1wYV9mcmFtZV9zaXplOwogCXN0cnVjdCBpd19jbV9pZCAgICAgICAgICAgKmNtX2lkOwpAQCAtMzI2LDYgKzMyOSw3IEBACiAJTkVTX0NNX0VWRU5UX01QQV9SRVEsCiAJTkVTX0NNX0VWRU5UX01QQV9DT05ORUNULAogCU5FU19DTV9FVkVOVF9NUEFfQUNDRVBULAorCU5FU19DTV9FVkVOVF9NUEFfUkVKRUNULAogCU5FU19DTV9FVkVOVF9NUEFfRVNUQUJMSVNIRUQsCiAJTkVTX0NNX0VWRU5UX0NPTk5FQ1RFRCwKIAlORVNfQ01fRVZFTlRfQ0xPU0VELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY29udGV4dC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY29udGV4dC5oCmluZGV4IGRhOWRhYmEuLjBmYjhkODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NvbnRleHQuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jb250ZXh0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCmluZGV4IDVkMTM5ZGIuLjUyZTczNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMjU0LDYgKzI1NCw3IEBACiAJdTMyIGFkYXB0ZXJfc2l6ZTsKIAl1MzIgYXJwX3RhYmxlX3NpemU7CiAJdTE2IHZlbmRvcl9pZDsKKwl1MTYgZGV2aWNlX2lkOwogCXU4ICBPbmVHX01vZGU7CiAJdTggIGZ1bmNfaW5kZXg7CiAKQEAgLTM1Niw2ICszNTcsMTMgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCisJbmVzYWRhcHRlci0+dmVuZG9yX2lkID0gKCgodTMyKSBuZXNhZGFwdGVyLT5tYWNfYWRkcl9oaWdoKSA8PCA4KSB8CisJCQkJKG5lc2FkYXB0ZXItPm1hY19hZGRyX2xvdyA+PiAyNCk7CisKKwlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQobmVzZGV2LT5wY2lkZXYtPmJ1cywgbmVzZGV2LT5wY2lkZXYtPmRldmZuLAorCQkJCSBQQ0lfREVWSUNFX0lELCAmZGV2aWNlX2lkKTsKKwluZXNhZGFwdGVyLT52ZW5kb3JfcGFydF9pZCA9IGRldmljZV9pZDsKKwogCWlmIChuZXNfaW5pdF9zZXJkZXMobmVzZGV2LCBod19yZXYsIHBvcnRfY291bnQsIG5lc2FkYXB0ZXIsCiAJCQkJCQkJT25lR19Nb2RlKSkgewogCQlrZnJlZShuZXNhZGFwdGVyKTsKQEAgLTE2MzYsNyArMTY0NCw2IEBACiAJbmVzdm5pYy0+cG9zdF9jcXBfcmVxdWVzdCA9IG5lc19wb3N0X2NxcF9yZXF1ZXN0OwogCW5lc3ZuaWMtPm1jcnFfbWNhc3RfZmlsdGVyID0gTlVMTDsKIAotCXNwaW5fbG9ja19pbml0KCZuZXN2bmljLT5uaWMuc3FfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJm5lc3ZuaWMtPm5pYy5ycV9sb2NrKTsKIAogCS8qIHNldHVwIHRoZSBSUSAqLwpAQCAtMjI2MSw2ICsyMjY4LDggQEAKIAogCQlpZiAoKytoZWFkID49IGFlcV9zaXplKQogCQkJaGVhZCA9IDA7CisKKwkJbmVzX3dyaXRlMzIobmVzZGV2LT5yZWdzICsgTkVTX0FFUV9BTExPQywgMSA8PCAxNik7CiAJfQogCXdoaWxlICgxKTsKIAlhZXEtPmFlcV9oZWFkID0gaGVhZDsKQEAgLTI1NDEsNyArMjU1MCw3IEBACiB7CiAJc3RydWN0IG5lc192bmljICpuZXN2bmljID0gY29udGFpbmVyX29mKGNxLCBzdHJ1Y3QgbmVzX3ZuaWMsIG5pY19jcSk7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmbmVzdm5pYy0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmbmVzdm5pYy0+bmFwaSk7CiB9CiAKIApAQCAtMjYyMiw5ICsyNjMxLDkgQEAKIAkJCQkJCX0gZWxzZQogCQkJCQkJCWJyZWFrOwogCQkJCQl9Ci0JCQkJCWlmIChza2IpCi0JCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCX0KKwkJCQlpZiAoc2tiKQorCQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQkJCW5lc25pYy0+c3FfdGFpbCsrOwogCQkJCW5lc25pYy0+c3FfdGFpbCAmPSBuZXNuaWMtPnNxX3NpemUtMTsKIAkJCQlpZiAoc3FfY3FlcyA+IDEyOCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKaW5kZXggYmMwYjRkZS4uZjQxYTg3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtNjEsNiArNjEsNyBAQAogCU5FU19DUV9BQ0sgPSAweDAwMzQsCiAJTkVTX1dRRV9BTExPQyA9IDB4MDA0MCwKIAlORVNfQ1FFX0FMTE9DID0gMHgwMDQ0LAorCU5FU19BRVFfQUxMT0MgPSAweDAwNDgKIH07CiAKIGVudW0gaW5kZXhlZF9yZWdzIHsKQEAgLTg3NSw3ICs4NzYsNiBAQAogCXU4IHJlcGxlbmlzaGluZ19ycTsKIAl1OCByZXNlcnZlZDsKIAotCXNwaW5sb2NrX3Qgc3FfbG9jazsKIAlzcGlubG9ja190IHJxX2xvY2s7CiB9OwogCkBAIC0xMTQ3LDcgKzExNDcsNiBAQAogc3RydWN0IG5lc192bmljIHsKIAlzdHJ1Y3QgbmVzX2liX2RldmljZSAqbmVzaWJkZXY7CiAJdTY0IHNxX2Z1bGw7Ci0JdTY0IHNxX2xvY2tlZDsKIAl1NjQgdHNvX3JlcXVlc3RzOwogCXU2NCBzZWdtZW50ZWRfdHNvX3JlcXVlc3RzOwogCXU2NCBsaW5lYXJpemVkX3NrYnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCmluZGV4IDU3YTQ3Y2YuLmVjYjFmNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX25pYy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCiAgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCkBAIC0xMTEsNyArMTExLDcgQEAKIAluZXNfbmljX2NlX2hhbmRsZXIobmVzZGV2LCBuZXNjcSk7CiAKIAlpZiAobmVzY3EtPmNxZXNfcGVuZGluZyA9PSAwKSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkvKiBjbGVhciBvdXQgY29tcGxldGVkIGNxZXMgYW5kIGFybSAqLwogCQluZXNfd3JpdGUzMihuZXNkZXYtPnJlZ3MrTkVTX0NRRV9BTExPQywgTkVTX0NRRV9BTExPQ19OT1RJRllfTkVYVCB8CiAJCQkJbmVzY3EtPmNxX251bWJlciB8IChuZXNjcS0+Y3FlX2FsbG9jc19wZW5kaW5nIDw8IDE2KSk7CkBAIC00MDAsOCArNDAwLDcgQEAKIAlpZiAoc2tiX2hlYWRsZW4oc2tiKSA9PSBza2ItPmxlbikgewogCQlpZiAoc2tiX2hlYWRsZW4oc2tiKSA8PSBORVNfRklSU1RfRlJBR19TSVpFKSB7CiAJCQluaWNfc3FlLT53cWVfd29yZHNbTkVTX05JQ19TUV9XUUVfTEVOR1RIXzJfMV9JRFhdID0gMDsKLQkJCW5lc25pYy0+dHhfc2tiW25lc25pYy0+c3FfaGVhZF0gPSBOVUxMOwotCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJbmVzbmljLT50eF9za2JbbmVzbmljLT5zcV9oZWFkXSA9IHNrYjsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIERlYWwgd2l0aCBGcmFnbWVudHMgKi8KQEAgLTQ1Myw3ICs0NTIsNiBAQAogCXUzMiB3cWVfY291bnQ9MTsKIAl1MzIgc2VuZF9yYzsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCV9fbGUxNiAqd3FlX2ZyYWdtZW50X2xlbmd0aDsKIAl1MzIgbnJfZnJhZ3M7CiAJdTMyIG9yaWdpbmFsX2ZpcnN0X2xlbmd0aDsKQEAgLTQ4MCwxMyArNDc4LDYgQEAKIAlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JaWYgKCFzcGluX3RyeWxvY2soJm5lc25pYy0+c3FfbG9jaykpIHsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQluZXN2bmljLT5zcV9sb2NrZWQrKzsKLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0JfQotCiAJLyogQ2hlY2sgaWYgU1EgaXMgZnVsbCAqLwogCWlmICgoKChuZXNuaWMtPnNxX3RhaWwrKG5lc25pYy0+c3Ffc2l6ZSoyKSktbmVzbmljLT5zcV9oZWFkKSAmIChuZXNuaWMtPnNxX3NpemUgLSAxKSkgPT0gMSkgewogCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSkgewpAQCAtNDk4LDcgKzQ4OSw2IEBACiAJCQl9CiAJCX0KIAkJbmVzdm5pYy0+c3FfZnVsbCsrOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNuaWMtPnNxX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIApAQCAtNTMxLDcgKzUyMSw2IEBACiAJCQkJCX0KIAkJCQl9CiAJCQkJbmVzdm5pYy0+c3FfZnVsbCsrOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOwogCQkJCW5lc19kZWJ1ZyhORVNfREJHX05JQ19UWCwgIiVzOiBITklDIFNRIGZ1bGwtIFRTTyByZXF1ZXN0IGhhcyB0b28gbWFueSBmcmFncyFcbiIsCiAJCQkJCQluZXRkZXYtPm5hbWUpOwogCQkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKQEAgLTY1NiwxNyArNjQ1LDEzIEBACiAJCQlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBob2Zmc2V0KTsKIAkJCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBuaG9mZnNldCk7CiAJCQlzZW5kX3JjID0gbmVzX25pY19zZW5kKHNrYiwgbmV0ZGV2KTsKLQkJCWlmIChzZW5kX3JjICE9IE5FVERFVl9UWF9PSykgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOworCQkJaWYgKHNlbmRfcmMgIT0gTkVUREVWX1RYX09LKQogCQkJCXJldHVybiBORVRERVZfVFhfT0s7Ci0JCQl9CiAJCX0KIAl9IGVsc2UgewogCQlzZW5kX3JjID0gbmVzX25pY19zZW5kKHNrYiwgbmV0ZGV2KTsKLQkJaWYgKHNlbmRfcmMgIT0gTkVUREVWX1RYX09LKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNuaWMtPnNxX2xvY2ssIGZsYWdzKTsKKwkJaWYgKHNlbmRfcmMgIT0gTkVUREVWX1RYX09LKQogCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJfQogCX0KIAogCWJhcnJpZXIoKTsKQEAgLTY3Niw3ICs2NjEsNiBAQAogCQkJCSh3cWVfY291bnQgPDwgMjQpIHwgKDEgPDwgMjMpIHwgbmVzdm5pYy0+bmljLnFwX2lkKTsKIAogCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc25pYy0+c3FfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTEwMTIsNyArOTk2LDYgQEAKIAkiUGF1c2UgRnJhbWVzIFJlY2VpdmVkIiwKIAkiSW50ZXJuYWwgUm91dGluZyBFcnJvcnMiLAogCSJTUSBTVyBEcm9wcGVkIFNLQnMiLAotCSJTUSBMb2NrZWQiLAogCSJTUSBGdWxsIiwKIAkiU2VnbWVudGVkIFRTTyBSZXF1ZXN0cyIsCiAJIlJ4IFN5bWJvbCBFcnJvcnMiLApAQCAtMTEyOSwxNiArMTExMiwxNyBAQAogCXN0cnVjdCBuZXNfZGV2aWNlICpuZXNkZXYgPSBuZXN2bmljLT5uZXNkZXY7CiAJdTMyIG5pY19jb3VudDsKIAl1MzIgdTMydGVtcDsKKwl1MzIgaW5kZXggPSAwOwogCiAJdGFyZ2V0X2V0aHRvb2xfc3RhdHMtPm5fc3RhdHMgPSBORVNfRVRIVE9PTF9TVEFUX0NPVU5UOwotCXRhcmdldF9zdGF0X3ZhbHVlc1swXSA9IG5lc3ZuaWMtPm5lc2Rldi0+bGlua19zdGF0dXNfaW50ZXJydXB0czsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMV0gPSBuZXN2bmljLT5saW5lYXJpemVkX3NrYnM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzJdID0gbmVzdm5pYy0+dHNvX3JlcXVlc3RzOworCXRhcmdldF9zdGF0X3ZhbHVlc1tpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPmxpbmtfc3RhdHVzX2ludGVycnVwdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bGluZWFyaXplZF9za2JzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPnRzb19yZXF1ZXN0czsKIAogCXUzMnRlbXAgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwKIAkJCU5FU19JRFhfTUFDX1RYX1BBVVNFX0ZSQU1FUyArIChuZXN2bmljLT5uZXNkZXYtPm1hY19pbmRleCoweDIwMCkpOwogCW5lc3ZuaWMtPm5lc2Rldi0+bWFjX3BhdXNlX2ZyYW1lc19zZW50ICs9IHUzMnRlbXA7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzNdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3NlbnQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcGF1c2VfZnJhbWVzX3NlbnQ7CiAKIAl1MzJ0ZW1wID0gbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsCiAJCQlORVNfSURYX01BQ19SWF9QQVVTRV9GUkFNRVMgKyAobmVzdm5pYy0+bmVzZGV2LT5tYWNfaW5kZXgqMHgyMDApKTsKQEAgLTEyMDksNjAgKzExOTMsNTkgQEAKIAkJbmVzdm5pYy0+ZW5kbm9kZV9pcHY0X3RjcF9yZXRyYW5zbWl0cyArPSB1MzJ0ZW1wOwogCX0KIAotCXRhcmdldF9zdGF0X3ZhbHVlc1s0XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3BhdXNlX2ZyYW1lc19yZWNlaXZlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNV0gPSBuZXNkZXYtPm5lc2FkYXB0ZXItPm5pY19yeF9ldGhfcm91dGVfZXJyOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s2XSA9IG5lc3ZuaWMtPnR4X3N3X2Ryb3BwZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzddID0gbmVzdm5pYy0+c3FfbG9ja2VkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s4XSA9IG5lc3ZuaWMtPnNxX2Z1bGw7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzldID0gbmVzdm5pYy0+c2VnbWVudGVkX3Rzb19yZXF1ZXN0czsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTBdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfc3ltYm9sX2Vycl9mcmFtZXM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzExXSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X2phYmJlcl9mcmFtZXM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzEyXSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X292ZXJzaXplZF9mcmFtZXM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzEzXSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X3Nob3J0X2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTRdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9kaXNjYXJkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxNV0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3J4X29jdGV0czsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTZdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9mcmFtZXM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzE3XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfdHhfb2N0ZXRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1sxOF0gPSBuZXN2bmljLT5lbmRub2RlX25zdGF0X3R4X2ZyYW1lczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMTldID0gbWhfZGV0ZWN0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzIwXSA9IG1oX3BhdXNlc19zZW50OwotCXRhcmdldF9zdGF0X3ZhbHVlc1syMV0gPSBuZXN2bmljLT5lbmRub2RlX2lwdjRfdGNwX3JldHJhbnNtaXRzOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syMl0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1syM10gPSBhdG9taWNfcmVhZCgmY21fYWNjZXB0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzI0XSA9IGF0b21pY19yZWFkKCZjbV9kaXNjb25uZWN0cyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzI1XSA9IGF0b21pY19yZWFkKCZjbV9jb25uZWN0ZWRzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjZdID0gYXRvbWljX3JlYWQoJmNtX2Nvbm5lY3RfcmVxcyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzI3XSA9IGF0b21pY19yZWFkKCZjbV9yZWplY3RzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjhdID0gYXRvbWljX3JlYWQoJm1vZF9xcF90aW1vdXRzKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMjldID0gYXRvbWljX3JlYWQoJnFwc19jcmVhdGVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzBdID0gYXRvbWljX3JlYWQoJnN3X3Fwc19kZXN0cm95ZWQpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szMV0gPSBhdG9taWNfcmVhZCgmcXBzX2Rlc3Ryb3llZCk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzMyXSA9IGF0b21pY19yZWFkKCZjbV9jbG9zZXMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szM10gPSBjbV9wYWNrZXRzX3NlbnQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM0XSA9IGNtX3BhY2tldHNfYm91bmNlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzVdID0gY21fcGFja2V0c19jcmVhdGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szNl0gPSBjbV9wYWNrZXRzX3JlY2VpdmVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1szN10gPSBjbV9wYWNrZXRzX2Ryb3BwZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzM4XSA9IGNtX3BhY2tldHNfcmV0cmFuczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbMzldID0gY21fbGlzdGVuc19jcmVhdGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0MF0gPSBjbV9saXN0ZW5zX2Rlc3Ryb3llZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDFdID0gY21fYmFja2xvZ19kcm9wczsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDJdID0gYXRvbWljX3JlYWQoJmNtX2xvb3BiYWNrcyk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQzXSA9IGF0b21pY19yZWFkKCZjbV9ub2Rlc19jcmVhdGVkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDRdID0gYXRvbWljX3JlYWQoJmNtX25vZGVzX2Rlc3Ryb3llZCk7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ1XSA9IGF0b21pY19yZWFkKCZjbV9hY2NlbF9kcm9wcGVkX3BrdHMpOwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0Nl0gPSBhdG9taWNfcmVhZCgmY21fcmVzZXRzX3JlY3ZkKTsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNDddID0gaW50X21vZF90aW1lcl9pbml0OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s0OF0gPSBpbnRfbW9kX2NxX2RlcHRoXzE7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzQ5XSA9IGludF9tb2RfY3FfZGVwdGhfNDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTBdID0gaW50X21vZF9jcV9kZXB0aF8xNjsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTFdID0gaW50X21vZF9jcV9kZXB0aF8yNDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTJdID0gaW50X21vZF9jcV9kZXB0aF8zMjsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTNdID0gaW50X21vZF9jcV9kZXB0aF8xMjg7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzU0XSA9IGludF9tb2RfY3FfZGVwdGhfMjU2OwotCXRhcmdldF9zdGF0X3ZhbHVlc1s1NV0gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLmFnZ3JlZ2F0ZWQ7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWzU2XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKLQl0YXJnZXRfc3RhdF92YWx1ZXNbNTddID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5ub19kZXNjOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3BhdXNlX2ZyYW1lc19yZWNlaXZlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXNkZXYtPm5lc2FkYXB0ZXItPm5pY19yeF9ldGhfcm91dGVfZXJyOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPnR4X3N3X2Ryb3BwZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+c3FfZnVsbDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5zZWdtZW50ZWRfdHNvX3JlcXVlc3RzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X3N5bWJvbF9lcnJfZnJhbWVzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPm5lc2Rldi0+bWFjX3J4X2phYmJlcl9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bmVzZGV2LT5tYWNfcnhfb3ZlcnNpemVkX2ZyYW1lczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5uZXNkZXYtPm1hY19yeF9zaG9ydF9mcmFtZXM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+ZW5kbm9kZV9uc3RhdF9yeF9kaXNjYXJkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfcnhfb2N0ZXRzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfcnhfZnJhbWVzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfdHhfb2N0ZXRzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmVuZG5vZGVfbnN0YXRfdHhfZnJhbWVzOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG1oX2RldGVjdGVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG1oX3BhdXNlc19zZW50OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmVuZG5vZGVfaXB2NF90Y3BfcmV0cmFuc21pdHM7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2Nvbm5lY3RzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fYWNjZXB0cyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2Rpc2Nvbm5lY3RzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fY29ubmVjdGVkcyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2Nvbm5lY3RfcmVxcyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX3JlamVjdHMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZtb2RfcXBfdGltb3V0cyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJnFwc19jcmVhdGVkKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmc3dfcXBzX2Rlc3Ryb3llZCk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJnFwc19kZXN0cm95ZWQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9jbG9zZXMpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfc2VudDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX2JvdW5jZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19jcmVhdGVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfcmVjZWl2ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fcGFja2V0c19kcm9wcGVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfcmV0cmFuczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9saXN0ZW5zX2NyZWF0ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fbGlzdGVuc19kZXN0cm95ZWQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fYmFja2xvZ19kcm9wczsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fbG9vcGJhY2tzKTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfY3JlYXRlZCk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX25vZGVzX2Rlc3Ryb3llZCk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX2FjY2VsX2Ryb3BwZWRfcGt0cyk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gYXRvbWljX3JlYWQoJmNtX3Jlc2V0c19yZWN2ZCk7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF90aW1lcl9pbml0OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfMTsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzQ7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8xNjsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBpbnRfbW9kX2NxX2RlcHRoXzI0OworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGludF9tb2RfY3FfZGVwdGhfMzI7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8xMjg7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gaW50X21vZF9jcV9kZXB0aF8yNTY7CisJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gbmVzdm5pYy0+bHJvX21nci5zdGF0cy5hZ2dyZWdhdGVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IG5lc3ZuaWMtPmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKKwl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBuZXN2bmljLT5scm9fbWdyLnN0YXRzLm5vX2Rlc2M7CiAKIH0KIApAQCAtMTU2OCw2ICsxNTUxLDE5IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGh5X2xvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IG5lc19uZXRkZXZfb3BlbiwKKwkubmRvX3N0b3AJCT0gbmVzX25ldGRldl9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBuZXNfbmV0ZGV2X3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJCT0gbmVzX25ldGRldl9nZXRfc3RhdHMsCisJLm5kb190eF90aW1lb3V0IAk9IG5lc19uZXRkZXZfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG5lc19uZXRkZXZfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbmVzX25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IG5lc19uZXRkZXZfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb192bGFuX3J4X3JlZ2lzdGVyIAk9IG5lc19uZXRkZXZfdmxhbl9yeF9yZWdpc3RlciwKK307CiAKIC8qKgogICogbmVzX25ldGRldl9pbml0IC0gaW5pdGlhbGl6ZSBuZXR3b3JrIGRldmljZQpAQCAtMTU3Niw3ICsxNTcyLDcgQEAKIAkJdm9pZCBfX2lvbWVtICptbWlvX2FkZHIpCiB7CiAJdTY0IHU2NHRlbXA7Ci0Jc3RydWN0IG5lc192bmljICpuZXN2bmljID0gTlVMTDsKKwlzdHJ1Y3QgbmVzX3ZuaWMgKm5lc3ZuaWM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbmljX3FwX21hcCAqY3Vycl9xcF9tYXA7CiAJdTMyIHUzMnRlbXA7CkBAIC0xNTg4LDIyICsxNTg0LDEyIEBACiAJCXByaW50ayhLRVJOX0VSUiBQRlggIm5lc3ZuaWMgZXRoZXJkZXYgYWxsb2MgZmFpbGVkIik7CiAJCXJldHVybiBOVUxMOwogCX0KKwluZXN2bmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCW5lc19kZWJ1ZyhORVNfREJHX0lOSVQsICJuZXRkZXYgPSAlcCwgJXNcbiIsIG5ldGRldiwgbmV0ZGV2LT5uYW1lKTsKIAogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJm5lc2Rldi0+cGNpZGV2LT5kZXYpOwogCi0JbmVzdm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JbWVtc2V0KG5lc3ZuaWMsIDAsIHNpemVvZigqbmVzdm5pYykpOwotCi0JbmV0ZGV2LT5vcGVuID0gbmVzX25ldGRldl9vcGVuOwotCW5ldGRldi0+c3RvcCA9IG5lc19uZXRkZXZfc3RvcDsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG5lc19uZXRkZXZfc3RhcnRfeG1pdDsKLQluZXRkZXYtPmdldF9zdGF0cyA9IG5lc19uZXRkZXZfZ2V0X3N0YXRzOwotCW5ldGRldi0+dHhfdGltZW91dCA9IG5lc19uZXRkZXZfdHhfdGltZW91dDsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IG5lc19uZXRkZXZfc2V0X21hY19hZGRyZXNzOwotCW5ldGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbmVzX25ldGRldl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gbmVzX25ldGRldl9jaGFuZ2VfbXR1OwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBORVNfVFhfVElNRU9VVDsKIAluZXRkZXYtPmlycSA9IG5lc2Rldi0+cGNpZGV2LT5pcnE7CiAJbmV0ZGV2LT5tdHUgPSBFVEhfREFUQV9MRU47CkBAIC0xNjExLDEyICsxNTk3LDExIEBACiAJbmV0ZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwogCW5ldGRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKIAluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9ISUdIRE1BOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZuZXNfbmV0ZGV2X29wczsKIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJm5lc19ldGh0b29sX29wczsKIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZuZXN2bmljLT5uYXBpLCBuZXNfbmV0ZGV2X3BvbGwsIDEyOCk7CiAJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIkVuYWJsaW5nIFZMQU4gSW5zZXJ0L0RlbGV0ZS5cbiIpOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwotCW5ldGRldi0+dmxhbl9yeF9yZWdpc3RlciA9IG5lc19uZXRkZXZfdmxhbl9yeF9yZWdpc3RlcjsKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKIAogCS8qIEZpbGwgaW4gdGhlIHBvcnQgc3RydWN0dXJlICovCiAJbmVzdm5pYy0+bmV0ZGV2ID0gbmV0ZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXNlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXNlci5oCmluZGV4IGU2NDMwNmIuLmNjOTBjMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3VzZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191c2VyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBDaXNjbyBTeXN0ZW1zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdXRpbHMuYwppbmRleCA2ZjNiYzFiLi5hMjgyMDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc191dGlscy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3V0aWxzLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOCBOZXRFZmZlY3QsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDkgSW50ZWwtTkUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KICAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCmluZGV4IGQ5M2E2NTYuLjdlNWI1YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA4IE5ldEVmZmVjdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IC0gMjAwOSBJbnRlbC1ORSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtNTUxLDYgKzU1MSw3IEBACiAJc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiA9IG5lc3ZuaWMtPm5lc2RldjsKIAlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXI7CiAJaW50IGkgPSAwOworCWludCByYzsKIAogCS8qIGZyZWUgdGhlIHJlc291cmNlcyAqLwogCWlmIChuZXNmbXItPmxlYWZfcGJsX2NudCA9PSAwKSB7CkBAIC01NzIsNyArNTczLDkgQEAKIAluZXNtci0+aWJtdy5ya2V5ID0gaWJmbXItPnJrZXk7CiAJbmVzbXItPmlibXcudW9iamVjdCA9IE5VTEw7CiAKLQlpZiAobmVzZm1yLT5uZXNtci5wYmxzX3VzZWQgIT0gMCkgeworCXJjID0gbmVzX2RlYWxsb2NfbXcoJm5lc21yLT5pYm13KTsKKworCWlmICgocmMgPT0gMCkgJiYgKG5lc2Ztci0+bmVzbXIucGJsc191c2VkICE9IDApKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwogCQlpZiAobmVzZm1yLT5uZXNtci5wYmxfNGspIHsKIAkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgKz0gbmVzZm1yLT5uZXNtci5wYmxzX3VzZWQ7CkBAIC01ODQsNyArNTg3LDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKIAl9CiAKLQlyZXR1cm4gbmVzX2RlYWxsb2NfbXcoJm5lc21yLT5pYm13KTsKKwlyZXR1cm4gcmM7CiB9CiAKIApAQCAtMTg4NiwyMSArMTg4OSw3NSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qKgorICogcm9vdF8yNTYKKyAqLworc3RhdGljIHUzMiByb290XzI1NihzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LAorCQkgICAgc3RydWN0IG5lc19yb290X3ZwYmwgKnJvb3RfdnBibCwKKwkJICAgIHN0cnVjdCBuZXNfcm9vdF92cGJsICpuZXdfcm9vdCwKKwkJICAgIHUxNiBwYmxfY291bnRfNGssCisJCSAgICB1MTYgcGJsX2NvdW50XzI1NikKK3sKKwl1NjQgbGVhZl9wYmw7CisJaW50IGksIGosIGs7CisKKwlpZiAocGJsX2NvdW50XzRrID09IDEpIHsKKwkJbmV3X3Jvb3QtPnBibF92YmFzZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KG5lc2Rldi0+cGNpZGV2LAorCQkJCQkJNTEyLCAmbmV3X3Jvb3QtPnBibF9wYmFzZSk7CisKKwkJaWYgKG5ld19yb290LT5wYmxfdmJhc2UgPT0gTlVMTCkKKwkJCXJldHVybiAwOworCisJCWxlYWZfcGJsID0gKHU2NClyb290X3ZwYmwtPnBibF9wYmFzZTsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKwkJCW5ld19yb290LT5wYmxfdmJhc2VbaV0ucGFfbG93ID0KKwkJCQljcHVfdG9fbGUzMigodTMyKWxlYWZfcGJsKTsKKwkJCW5ld19yb290LT5wYmxfdmJhc2VbaV0ucGFfaGlnaCA9CisJCQkJY3B1X3RvX2xlMzIoKHUzMikoKCgodTY0KWxlYWZfcGJsKSA+PiAzMikpKTsKKwkJCWxlYWZfcGJsICs9IDI1NjsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7CisJCQlqID0gaSAqIDE2OworCQkJcm9vdF92cGJsLT5wYmxfdmJhc2Vbal0gPSByb290X3ZwYmwtPnBibF92YmFzZVtpXTsKKwkJCWxlYWZfcGJsID0gbGUzMl90b19jcHUocm9vdF92cGJsLT5wYmxfdmJhc2Vbal0ucGFfbG93KSArCisJCQkgICAgKCgodTY0KWxlMzJfdG9fY3B1KHJvb3RfdnBibC0+cGJsX3ZiYXNlW2pdLnBhX2hpZ2gpKQorCQkJCTw8IDMyKTsKKwkJCWZvciAoayA9IDE7IGsgPCAxNjsgaysrKSB7CisJCQkJbGVhZl9wYmwgKz0gMjU2OworCQkJCXJvb3RfdnBibC0+cGJsX3ZiYXNlW2ogKyBrXS5wYV9sb3cgPQorCQkJCQkJY3B1X3RvX2xlMzIoKHUzMilsZWFmX3BibCk7CisJCQkJcm9vdF92cGJsLT5wYmxfdmJhc2VbaiArIGtdLnBhX2hpZ2ggPQorCQkJCSAgICBjcHVfdG9fbGUzMigodTMyKSgoKCh1NjQpbGVhZl9wYmwpID4+IDMyKSkpOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDE7Cit9CisKIAogLyoqCiAgKiBuZXNfcmVnX21yCiAgKi8KIHN0YXRpYyBpbnQgbmVzX3JlZ19tcihzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCBzdHJ1Y3QgbmVzX3BkICpuZXNwZCwKIAkJdTMyIHN0YWcsIHU2NCByZWdpb25fbGVuZ3RoLCBzdHJ1Y3QgbmVzX3Jvb3RfdnBibCAqcm9vdF92cGJsLAotCQlkbWFfYWRkcl90IHNpbmdsZV9idWZmZXIsIHUxNiBwYmxfY291bnQsIHUxNiByZXNpZHVhbF9wYWdlX2NvdW50LAotCQlpbnQgYWNjLCB1NjQgKmlvdmFfc3RhcnQpCisJCWRtYV9hZGRyX3Qgc2luZ2xlX2J1ZmZlciwgdTE2IHBibF9jb3VudF80aywKKwkJdTE2IHJlc2lkdWFsX3BhZ2VfY291bnRfNGssIGludCBhY2MsIHU2NCAqaW92YV9zdGFydCwKKwkJdTE2ICphY3R1YWxfcGJsX2NudCwgdTggKnVzZWRfNGtfcGJscykKIHsKIAlzdHJ1Y3QgbmVzX2h3X2NxcF93cWUgKmNxcF93cWU7CiAJc3RydWN0IG5lc19jcXBfcmVxdWVzdCAqY3FwX3JlcXVlc3Q7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCXN0cnVjdCBuZXNfYWRhcHRlciAqbmVzYWRhcHRlciA9IG5lc2Rldi0+bmVzYWRhcHRlcjsKLQkvKiBpbnQgY291bnQ7ICovCisJdWludCBwZ19jbnQgPSAwOworCXUxNiBwYmxfY291bnRfMjU2OworCXUxNiBwYmxfY291bnQgPSAwOworCXU4ICB1c2VfMjU2X3BibHMgPSAwOworCXU4ICB1c2VfNGtfcGJscyA9IDA7CisJdTE2IHVzZV90d29fbGV2ZWwgPSAocGJsX2NvdW50XzRrID4gMSkgPyAxIDogMDsKKwlzdHJ1Y3QgbmVzX3Jvb3RfdnBibCBuZXdfcm9vdCA9IHswLCAwLCAwfTsKIAl1MzIgb3Bjb2RlID0gMDsKIAl1MTYgbWFqb3JfY29kZTsKIApAQCAtMTkxMyw0MSArMTk3MCw3MCBAQAogCWNxcF9yZXF1ZXN0LT53YWl0aW5nID0gMTsKIAljcXBfd3FlID0gJmNxcF9yZXF1ZXN0LT5jcXBfd3FlOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7Ci0JLyogdHJhY2sgUEJMIHJlc291cmNlcyAqLwotCWlmIChwYmxfY291bnQgIT0gMCkgewotCQlpZiAocGJsX2NvdW50ID4gMSkgewotCQkJLyogVHdvIGxldmVsIFBCTCAqLwotCQkJaWYgKChwYmxfY291bnQrMSkgPiBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSB7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJPdXQgb2YgNEtCIFBibHMgZm9yIHR3byBsZXZlbCByZXF1ZXN0LlxuIik7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKLQkJCQluZXNfZnJlZV9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCAtPSBwYmxfY291bnQrMTsKLQkJCX0KLQkJfSBlbHNlIGlmIChyZXNpZHVhbF9wYWdlX2NvdW50ID4gMzIpIHsKLQkJCWlmIChwYmxfY291bnQgPiBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSB7Ci0JCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJPdXQgb2YgNEtCIFBibHMuXG4iKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJCW5lc19mcmVlX2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfSBlbHNlIHsKLQkJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsIC09IHBibF9jb3VudDsKKwlpZiAocGJsX2NvdW50XzRrKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCisJCXBnX2NudCA9ICgocGJsX2NvdW50XzRrIC0gMSkgKiA1MTIpICsgcmVzaWR1YWxfcGFnZV9jb3VudF80azsKKwkJcGJsX2NvdW50XzI1NiA9IChwZ19jbnQgKyAzMSkgLyAzMjsKKwkJaWYgKHBnX2NudCA8PSAzMikgeworCQkJaWYgKHBibF9jb3VudF8yNTYgPD0gbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwpCisJCQkJdXNlXzI1Nl9wYmxzID0gMTsKKwkJCWVsc2UgaWYgKHBibF9jb3VudF80ayA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKQorCQkJCXVzZV80a19wYmxzID0gMTsKKwkJfSBlbHNlIGlmIChwZ19jbnQgPD0gMjA0OCkgeworCQkJaWYgKCgocGJsX2NvdW50XzRrICsgdXNlX3R3b19sZXZlbCkgPD0gbmVzYWRhcHRlci0+ZnJlZV80a3BibCkgJiYKKwkJCSAgICAobmVzYWRhcHRlci0+ZnJlZV80a3BibCA+IChuZXNhZGFwdGVyLT5tYXhfNGtwYmwgPj4gMSkpKSB7CisJCQkJdXNlXzRrX3BibHMgPSAxOworCQkJfSBlbHNlIGlmICgocGJsX2NvdW50XzI1NiArIDEpIDw9IG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsKSB7CisJCQkJdXNlXzI1Nl9wYmxzID0gMTsKKwkJCQl1c2VfdHdvX2xldmVsID0gMTsKKwkJCX0gZWxzZSBpZiAoKHBibF9jb3VudF80ayArIHVzZV90d29fbGV2ZWwpIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpIHsKKwkJCQl1c2VfNGtfcGJscyA9IDE7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlpZiAocGJsX2NvdW50ID4gbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwpIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19NUiwgIk91dCBvZiAyNTZCIFBibHMuXG4iKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCQkJCW5lc19mcmVlX2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfSBlbHNlIHsKLQkJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCAtPSBwYmxfY291bnQ7Ci0JCQl9CisJCQlpZiAoKHBibF9jb3VudF80ayArIDEpIDw9IG5lc2FkYXB0ZXItPmZyZWVfNGtwYmwpCisJCQkJdXNlXzRrX3BibHMgPSAxOwogCQl9CisKKwkJaWYgKHVzZV8yNTZfcGJscykgeworCQkJcGJsX2NvdW50ID0gcGJsX2NvdW50XzI1NjsKKwkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsIC09IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCX0gZWxzZSBpZiAodXNlXzRrX3BibHMpIHsKKwkJCXBibF9jb3VudCA9ICBwYmxfY291bnRfNGs7CisJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsIC09IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCX0gZWxzZSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJPdXQgb2YgUGJsc1xuIik7CisJCQluZXNfZnJlZV9jcXBfcmVxdWVzdChuZXNkZXYsIGNxcF9yZXF1ZXN0KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCWlmICh1c2VfMjU2X3BibHMgJiYgdXNlX3R3b19sZXZlbCkgeworCQlpZiAocm9vdF8yNTYobmVzZGV2LCByb290X3ZwYmwsICZuZXdfcm9vdCwgcGJsX2NvdW50XzRrLCBwYmxfY291bnRfMjU2KSA9PSAxKSB7CisJCQlpZiAobmV3X3Jvb3QucGJsX3BiYXNlICE9IDApCisJCQkJcm9vdF92cGJsID0gJm5ld19yb290OworCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCArPSBwYmxfY291bnRfMjU2ICsgdXNlX3R3b19sZXZlbDsKKwkJCXVzZV8yNTZfcGJscyA9IDA7CisKKwkJCWlmIChwYmxfY291bnRfNGsgPT0gMSkKKwkJCQl1c2VfdHdvX2xldmVsID0gMDsKKwkJCXBibF9jb3VudCA9IHBibF9jb3VudF80azsKKworCQkJaWYgKChwYmxfY291bnRfNGsgKyB1c2VfdHdvX2xldmVsKSA8PSBuZXNhZGFwdGVyLT5mcmVlXzRrcGJsKSB7CisJCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCAtPSBwYmxfY291bnQgKyB1c2VfdHdvX2xldmVsOworCQkJCXVzZV80a19wYmxzID0gMTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisKKwkJCWlmICh1c2VfNGtfcGJscyA9PSAwKQorCQkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQogCiAJb3Bjb2RlID0gTkVTX0NRUF9SRUdJU1RFUl9TVEFHIHwgTkVTX0NRUF9TVEFHX1JJR0hUU19MT0NBTF9SRUFEIHwKIAkJCQkJTkVTX0NRUF9TVEFHX1ZBX1RPIHwgTkVTX0NRUF9TVEFHX01SOwpAQCAtMTk3NiwxMCArMjA2Miw5IEBACiAJfSBlbHNlIHsKIAkJc2V0X3dxZV82NGJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEFfTE9XX0lEWCwgcm9vdF92cGJsLT5wYmxfcGJhc2UpOwogCQlzZXRfd3FlXzMyYml0X3ZhbHVlKGNxcF93cWUtPndxZV93b3JkcywgTkVTX0NRUF9TVEFHX1dRRV9QQkxfQkxLX0NPVU5UX0lEWCwgcGJsX2NvdW50KTsKLQkJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfU1RBR19XUUVfUEJMX0xFTl9JRFgsCi0JCQkJKCgocGJsX2NvdW50IC0gMSkgKiA0MDk2KSArIChyZXNpZHVhbF9wYWdlX2NvdW50KjgpKSk7CisJCXNldF93cWVfMzJiaXRfdmFsdWUoY3FwX3dxZS0+d3FlX3dvcmRzLCBORVNfQ1FQX1NUQUdfV1FFX1BCTF9MRU5fSURYLCAocGdfY250ICogOCkpOwogCi0JCWlmICgocGJsX2NvdW50ID4gMSkgfHwgKHJlc2lkdWFsX3BhZ2VfY291bnQgPiAzMikpCisJCWlmICh1c2VfNGtfcGJscykKIAkJCWNxcF93cWUtPndxZV93b3Jkc1tORVNfQ1FQX1dRRV9PUENPREVfSURYXSB8PSBjcHVfdG9fbGUzMihORVNfQ1FQX1NUQUdfUEJMX0JMS19TSVpFKTsKIAl9CiAJYmFycmllcigpOwpAQCAtMTk5NiwxMyArMjA4MSwyNSBAQAogCW1ham9yX2NvZGUgPSBjcXBfcmVxdWVzdC0+bWFqb3JfY29kZTsKIAluZXNfcHV0X2NxcF9yZXF1ZXN0KG5lc2RldiwgY3FwX3JlcXVlc3QpOwogCisJaWYgKCghcmV0IHx8IG1ham9yX2NvZGUpICYmIHBibF9jb3VudCAhPSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOworCQlpZiAodXNlXzI1Nl9wYmxzKQorCQkJbmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgKz0gcGJsX2NvdW50ICsgdXNlX3R3b19sZXZlbDsKKwkJZWxzZSBpZiAodXNlXzRrX3BibHMpCisJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsICs9IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJfQorCWlmIChuZXdfcm9vdC5wYmxfcGJhc2UpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQobmVzZGV2LT5wY2lkZXYsIDUxMiwgbmV3X3Jvb3QucGJsX3ZiYXNlLAorCQkJCSAgICBuZXdfcm9vdC5wYmxfcGJhc2UpOworCiAJaWYgKCFyZXQpCiAJCXJldHVybiAtRVRJTUU7CiAJZWxzZSBpZiAobWFqb3JfY29kZSkKIAkJcmV0dXJuIC1FSU87Ci0JZWxzZQotCQlyZXR1cm4gMDsKIAorCSphY3R1YWxfcGJsX2NudCA9IHBibF9jb3VudCArIHVzZV90d29fbGV2ZWw7CisJKnVzZWRfNGtfcGJscyA9IHVzZV80a19wYmxzOwogCXJldHVybiAwOwogfQogCkBAIC0yMTY3LDE4ICsyMjY0LDE0IEBACiAJCXBibF9jb3VudCA9IHJvb3RfcGJsX2luZGV4OwogCX0KIAlyZXQgPSBuZXNfcmVnX21yKG5lc2RldiwgbmVzcGQsIHN0YWcsIHJlZ2lvbl9sZW5ndGgsICZyb290X3ZwYmwsCi0JCQlidWZmZXJfbGlzdFswXS5hZGRyLCBwYmxfY291bnQsICh1MTYpY3VyX3BibF9pbmRleCwgYWNjLCBpb3ZhX3N0YXJ0KTsKKwkJCWJ1ZmZlcl9saXN0WzBdLmFkZHIsIHBibF9jb3VudCwgKHUxNiljdXJfcGJsX2luZGV4LCBhY2MsIGlvdmFfc3RhcnQsCisJCQkmbmVzbXItPnBibHNfdXNlZCwgJm5lc21yLT5wYmxfNGspOwogCiAJaWYgKHJldCA9PSAwKSB7CiAJCW5lc21yLT5pYm1yLnJrZXkgPSBzdGFnOwogCQluZXNtci0+aWJtci5sa2V5ID0gc3RhZzsKIAkJbmVzbXItPm1vZGUgPSBJV05FU19NRU1SRUdfVFlQRV9NRU07CiAJCWlibXIgPSAmbmVzbXItPmlibXI7Ci0JCW5lc21yLT5wYmxfNGsgPSAoKHBibF9jb3VudCA+IDEpIHx8IChjdXJfcGJsX2luZGV4ID4gMzIpKSA/IDEgOiAwOwotCQluZXNtci0+cGJsc191c2VkID0gcGJsX2NvdW50OwotCQlpZiAocGJsX2NvdW50ID4gMSkgewotCQkJbmVzbXItPnBibHNfdXNlZCsrOwotCQl9CiAJfSBlbHNlIHsKIAkJa2ZyZWUobmVzbXIpOwogCQlpYm1yID0gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTI0NTYsOCArMjU0OSw5IEBACiAJCQkJCXN0YWcsICh1bnNpZ25lZCBpbnQpaW92YV9zdGFydCwKIAkJCQkJKHVuc2lnbmVkIGludClyZWdpb25fbGVuZ3RoLCBzdGFnX2luZGV4LAogCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlZ2lvbi0+bGVuZ3RoLCBwYmxfY291bnQpOwotCQkJcmV0ID0gbmVzX3JlZ19tciggbmVzZGV2LCBuZXNwZCwgc3RhZywgcmVnaW9uLT5sZW5ndGgsICZyb290X3ZwYmwsCi0JCQkJCWZpcnN0X2RtYV9hZGRyLCBwYmxfY291bnQsICh1MTYpY3VyX3BibF9pbmRleCwgYWNjLCAmaW92YV9zdGFydCk7CisJCQlyZXQgPSBuZXNfcmVnX21yKG5lc2RldiwgbmVzcGQsIHN0YWcsIHJlZ2lvbi0+bGVuZ3RoLCAmcm9vdF92cGJsLAorCQkJCQkgZmlyc3RfZG1hX2FkZHIsIHBibF9jb3VudCwgKHUxNiljdXJfcGJsX2luZGV4LCBhY2MsCisJCQkJCSAmaW92YV9zdGFydCwgJm5lc21yLT5wYmxzX3VzZWQsICZuZXNtci0+cGJsXzRrKTsKIAogCQkJbmVzX2RlYnVnKE5FU19EQkdfTVIsICJyZXQ9JWRcbiIsIHJldCk7CiAKQEAgLTI0NjYsMTEgKzI1NjAsNiBAQAogCQkJCW5lc21yLT5pYm1yLmxrZXkgPSBzdGFnOwogCQkJCW5lc21yLT5tb2RlID0gSVdORVNfTUVNUkVHX1RZUEVfTUVNOwogCQkJCWlibXIgPSAmbmVzbXItPmlibXI7Ci0JCQkJbmVzbXItPnBibF80ayA9ICgocGJsX2NvdW50ID4gMSkgfHwgKGN1cl9wYmxfaW5kZXggPiAzMikpID8gMSA6IDA7Ci0JCQkJbmVzbXItPnBibHNfdXNlZCA9IHBibF9jb3VudDsKLQkJCQlpZiAocGJsX2NvdW50ID4gMSkgewotCQkJCQluZXNtci0+cGJsc191c2VkKys7Ci0JCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlpYl91bWVtX3JlbGVhc2UocmVnaW9uKTsKIAkJCQlrZnJlZShuZXNtcik7CkBAIC0yNjA5LDI0ICsyNjk4LDYgQEAKIAljcXBfcmVxdWVzdC0+d2FpdGluZyA9IDE7CiAJY3FwX3dxZSA9ICZjcXBfcmVxdWVzdC0+Y3FwX3dxZTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNhZGFwdGVyLT5wYmxfbG9jaywgZmxhZ3MpOwotCWlmIChuZXNtci0+cGJsc191c2VkICE9IDApIHsKLQkJaWYgKG5lc21yLT5wYmxfNGspIHsKLQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwgKz0gbmVzbXItPnBibHNfdXNlZDsKLQkJCWlmIChuZXNhZGFwdGVyLT5mcmVlXzRrcGJsID4gbmVzYWRhcHRlci0+bWF4XzRrcGJsKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnJlZSA0S0IgUEJMcygldSkgaGFzIGV4Y2VlZGVkIHRoZSBtYXgoJXUpXG4iLAotCQkJCQkJbmVzYWRhcHRlci0+ZnJlZV80a3BibCwgbmVzYWRhcHRlci0+bWF4XzRrcGJsKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsICs9IG5lc21yLT5wYmxzX3VzZWQ7Ci0JCQlpZiAobmVzYWRhcHRlci0+ZnJlZV8yNTZwYmwgPiBuZXNhZGFwdGVyLT5tYXhfMjU2cGJsKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZnJlZSAyNTZCIFBCTHMoJXUpIGhhcyBleGNlZWRlZCB0aGUgbWF4KCV1KVxuIiwKLQkJCQkJCW5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsLCBuZXNhZGFwdGVyLT5tYXhfMjU2cGJsKTsKLQkJCX0KLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CiAJbmVzX2ZpbGxfaW5pdF9jcXBfd3FlKGNxcF93cWUsIG5lc2Rldik7CiAJc2V0X3dxZV8zMmJpdF92YWx1ZShjcXBfd3FlLT53cWVfd29yZHMsIE5FU19DUVBfV1FFX09QQ09ERV9JRFgsCiAJCQlORVNfQ1FQX0RFQUxMT0NBVEVfU1RBRyB8IE5FU19DUVBfU1RBR19WQV9UTyB8CkBAIC0yNjQ0LDExICsyNzE1LDYgQEAKIAkJCSIgQ1FQIE1ham9yOk1pbm9yIGNvZGVzID0gMHglMDRYOjB4JTA0WFxuIiwKIAkJCWliX21yLT5ya2V5LCByZXQsIGNxcF9yZXF1ZXN0LT5tYWpvcl9jb2RlLCBjcXBfcmVxdWVzdC0+bWlub3JfY29kZSk7CiAKLQluZXNfZnJlZV9yZXNvdXJjZShuZXNhZGFwdGVyLCBuZXNhZGFwdGVyLT5hbGxvY2F0ZWRfbXJzLAotCQkJKGliX21yLT5ya2V5ICYgMHgwZmZmZmYwMCkgPj4gOCk7Ci0KLQlrZnJlZShuZXNtcik7Ci0KIAltYWpvcl9jb2RlID0gY3FwX3JlcXVlc3QtPm1ham9yX2NvZGU7CiAJbWlub3JfY29kZSA9IGNxcF9yZXF1ZXN0LT5taW5vcl9jb2RlOwogCkBAIC0yNjY0LDggKzI3MzAsMzMgQEAKIAkJCQkiIHRvIGRlc3Ryb3kgU1RhZywgaWJfbXI9JXAsIHJrZXkgPSAweCUwOFhcbiIsCiAJCQkJbWFqb3JfY29kZSwgbWlub3JfY29kZSwgaWJfbXIsIGliX21yLT5ya2V5KTsKIAkJcmV0dXJuIC1FSU87Ci0JfSBlbHNlCi0JCXJldHVybiAwOworCX0KKworCWlmIChuZXNtci0+cGJsc191c2VkICE9IDApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnBibF9sb2NrLCBmbGFncyk7CisJCWlmIChuZXNtci0+cGJsXzRrKSB7CisJCQluZXNhZGFwdGVyLT5mcmVlXzRrcGJsICs9IG5lc21yLT5wYmxzX3VzZWQ7CisJCQlpZiAobmVzYWRhcHRlci0+ZnJlZV80a3BibCA+IG5lc2FkYXB0ZXItPm1heF80a3BibCkKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJmcmVlIDRLQiBQQkxzKCV1KSBoYXMgIgorCQkJCQkiZXhjZWVkZWQgdGhlIG1heCgldSlcbiIsCisJCQkJCW5lc2FkYXB0ZXItPmZyZWVfNGtwYmwsCisJCQkJCW5lc2FkYXB0ZXItPm1heF80a3BibCk7CisJCX0gZWxzZSB7CisJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCArPSBuZXNtci0+cGJsc191c2VkOworCQkJaWYgKG5lc2FkYXB0ZXItPmZyZWVfMjU2cGJsID4gbmVzYWRhcHRlci0+bWF4XzI1NnBibCkKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJmcmVlIDI1NkIgUEJMcygldSkgaGFzICIKKwkJCQkJImV4Y2VlZGVkIHRoZSBtYXgoJXUpXG4iLAorCQkJCQluZXNhZGFwdGVyLT5mcmVlXzI1NnBibCwKKwkJCQkJbmVzYWRhcHRlci0+bWF4XzI1NnBibCk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzYWRhcHRlci0+cGJsX2xvY2ssIGZsYWdzKTsKKwl9CisJbmVzX2ZyZWVfcmVzb3VyY2UobmVzYWRhcHRlciwgbmVzYWRhcHRlci0+YWxsb2NhdGVkX21ycywKKwkJCShpYl9tci0+cmtleSAmIDB4MGZmZmZmMDApID4+IDgpOworCisJa2ZyZWUobmVzbXIpOworCisJcmV0dXJuIDA7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmgKaW5kZXggYWUwY2E5Yi4uNWU0OGY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNiAtIDIwMDggTmV0RWZmZWN0LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgLSAyMDA5IEludGVsLU5FLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCmluZGV4IGExOTI1ODEuLmRhNjA4MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKQEAgLTQ0NiwxMSArNDQ2LDExIEBACiAJCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pCiAJCQlscm9fZmx1c2hfYWxsKCZwcml2LT5scm8ubHJvX21ncik7CiAKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWlmICh1bmxpa2VseShpYl9yZXFfbm90aWZ5X2NxKHByaXYtPnJlY3ZfY3EsCiAJCQkJCSAgICAgIElCX0NRX05FWFRfQ09NUCB8CiAJCQkJCSAgICAgIElCX0NRX1JFUE9SVF9NSVNTRURfRVZFTlRTKSkgJiYKLQkJICAgIG5ldGlmX3J4X3Jlc2NoZWR1bGUobmFwaSkpCisJCSAgICBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpCiAJCQlnb3RvIHBvbGxfbW9yZTsKIAl9CiAKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfcHRyOwogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRyYWluX3R4X2NxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IDBiZDJhNGYuLjQyMWE2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC02NjAsOCArNjYwLDEyIEBACiAKIAlwYXRoID0gX19wYXRoX2ZpbmQoZGV2LCBwaGRyLT5od2FkZHIgKyA0KTsKIAlpZiAoIXBhdGggfHwgIXBhdGgtPnZhbGlkKSB7Ci0JCWlmICghcGF0aCkKKwkJaW50IG5ld19wYXRoID0gMDsKKworCQlpZiAoIXBhdGgpIHsKIAkJCXBhdGggPSBwYXRoX3JlY19jcmVhdGUoZGV2LCBwaGRyLT5od2FkZHIgKyA0KTsKKwkJCW5ld19wYXRoID0gMTsKKwkJfQogCQlpZiAocGF0aCkgewogCQkJLyogcHV0IHBzZXVkb2hlYWRlciBiYWNrIG9uIGZvciBuZXh0IHRpbWUgKi8KIAkJCXNrYl9wdXNoKHNrYiwgc2l6ZW9mICpwaGRyKTsKQEAgLTY2OSw3ICs2NzMsOCBAQAogCiAJCQlpZiAoIXBhdGgtPnF1ZXJ5ICYmIHBhdGhfcmVjX3N0YXJ0KGRldiwgcGF0aCkpIHsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQkJcGF0aF9mcmVlKGRldiwgcGF0aCk7CisJCQkJaWYgKG5ld19wYXRoKQorCQkJCQlwYXRoX2ZyZWUoZGV2LCBwYXRoKTsKIAkJCQlyZXR1cm47CiAJCQl9IGVsc2UKIAkJCQlfX3BhdGhfYWRkKGRldiwgcGF0aCk7CkBAIC0xMDE2LDE4ICsxMDIxLDIyIEBACiAJcHJpdi0+bHJvLmxyb19tZ3IuaXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcG9pYl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJID0gaXBvaWJfb3BlbiwKKwkubmRvX3N0b3AJCSA9IGlwb2liX3N0b3AsCisJLm5kb19jaGFuZ2VfbXR1CQkgPSBpcG9pYl9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdAkgCSA9IGlwb2liX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQkgPSBpcG9pYl90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CSA9IGlwb2liX3NldF9tY2FzdF9saXN0LAorCS5uZG9fbmVpZ2hfc2V0dXAJID0gaXBvaWJfbmVpZ2hfc2V0dXBfZGV2LAorfTsKKwogc3RhdGljIHZvaWQgaXBvaWJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGV2LT5vcGVuCQkgPSBpcG9pYl9vcGVuOwotCWRldi0+c3RvcAkJID0gaXBvaWJfc3RvcDsKLQlkZXYtPmNoYW5nZV9tdHUJCSA9IGlwb2liX2NoYW5nZV9tdHU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJID0gaXBvaWJfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQJCSA9IGlwb2liX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzCQkgPSAmaXBvaWJfbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMJCSA9ICZpcG9pYl9oZWFkZXJfb3BzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0CSA9IGlwb2liX3NldF9tY2FzdF9saXN0OwotCWRldi0+bmVpZ2hfc2V0dXAJID0gaXBvaWJfbmVpZ2hfc2V0dXBfZGV2OwogCiAJaXBvaWJfc2V0X2V0aHRvb2xfb3BzKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCmluZGV4IDMxOWIxODguLmVhOWUxNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYwpAQCAtNDAxLDEzICs0MDEsNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbHVyZTsKIAotCWlzZXJfZGJnKCJwYXRoLm10dSBpcyAlZCBzZXR0aW5nIGl0IHRvICVkXG4iLAotCQkgY21hX2lkLT5yb3V0ZS5wYXRoX3JlYy0+bXR1LCBJQl9NVFVfMTAyNCk7Ci0KLQkvKiB3ZSBtdXN0IHNldCB0aGUgTVRVIHRvIDEwMjQgYXMgdGhpcyBpcyB3aGF0IHRoZSB0YXJnZXQgaXMgYXNzdW1pbmcgKi8KLQlpZiAoY21hX2lkLT5yb3V0ZS5wYXRoX3JlYy0+bXR1ID4gSUJfTVRVXzEwMjQpCi0JCWNtYV9pZC0+cm91dGUucGF0aF9yZWMtPm10dSA9IElCX01UVV8xMDI0OwotCiAJbWVtc2V0KCZjb25uX3BhcmFtLCAwLCBzaXplb2YgY29ubl9wYXJhbSk7CiAJY29ubl9wYXJhbS5yZXNwb25kZXJfcmVzb3VyY2VzID0gNDsKIAljb25uX3BhcmFtLmluaXRpYXRvcl9kZXB0aCAgICAgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9ldmRldi5jIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCmluZGV4IGVkOGJhYTAuLjdhN2EwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKQEAgLTk0LDExICs5NCw4IEBACiBzdGF0aWMgaW50IGV2ZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7CiAJc3RydWN0IGV2ZGV2X2NsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCByZXR2YWw7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjbGllbnQtPmZhc3luYyk7CiB9CiAKIHN0YXRpYyBpbnQgZXZkZXZfZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIGZsX293bmVyX3QgaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveWRldi5jIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwppbmRleCA2ZjIzNjYyLi40MjI0ZjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKQEAgLTE1OSwxMiArMTU5LDkgQEAKIAogc3RhdGljIGludCBqb3lkZXZfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBqb3lkZXZfY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjbGllbnQtPmZhc3luYyk7CiB9CiAKIHN0YXRpYyB2b2lkIGpveWRldl9mcmVlKHN0cnVjdCBkZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFwbGVjb250cm9sLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hcGxlY29udHJvbC5jCmluZGV4IGU1MDA0N2IuLjc3Y2ZkZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFwbGVjb250cm9sLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYXBsZWNvbnRyb2wuYwpAQCAtMyw3ICszLDcgQEAKICAqCUJhc2VkIG9uIGRyaXZlcnMvdXNiL2lmb3JjZS5jCiAgKgogICoJQ29weXJpZ2h0IFlhZWdhc2hpIFRha2VzaGksIDIwMDEKLSAqCUFkcmlhbiBNY01lbmFtaW4sIDIwMDgKKyAqCUFkcmlhbiBNY01lbmFtaW4sIDIwMDggLSAyMDA5CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjksNyArMjksNyBAQAogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1hcGxlZGV2ID0gbXEtPmRldjsKIAlzdHJ1Y3QgZGNfcGFkICpwYWQgPSBtYXBsZV9nZXRfZHJ2ZGF0YShtYXBsZWRldik7CiAJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gcGFkLT5kZXY7Ci0JdW5zaWduZWQgY2hhciAqcmVzID0gbXEtPnJlY3ZidWY7CisJdW5zaWduZWQgY2hhciAqcmVzID0gbXEtPnJlY3ZidWYtPmJ1ZjsKIAogCWJ1dHRvbnMgPSB+bGUxNl90b19jcHVwKChfX2xlMTYgKikocmVzICsgOCkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKaW5kZXggYWJiMDRjOC4uNjM0YWY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYwpAQCAtMjEsOCArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPG1hY2gvY29yZ2kuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tYXBsZV9rZXliLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYwppbmRleCAyMmYxN2E1Li41YWEyMzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL21hcGxlX2tleWIuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBTRUdBIERyZWFtY2FzdCBrZXlib2FyZCBkcml2ZXIKICAqIEJhc2VkIG9uIGRyaXZlcnMvdXNiL3VzYmtiZC5jCi0gKiBDb3B5cmlnaHQgWUFFR0FTSEkgVGFrZXNoaSwgMjAwMQotICogUG9ydGluZyB0byAyLjYgQ29weXJpZ2h0IEFkcmlhbiBNY01lbmFtaW4sIDIwMDcsIDIwMDgKKyAqIENvcHlyaWdodCAoYykgWUFFR0FTSEkgVGFrZXNoaSwgMjAwMQorICogUG9ydGluZyB0byAyLjYgQ29weXJpZ2h0IChjKSBBZHJpYW4gTWNNZW5hbWluLCAyMDA3IC0gMjAwOQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lIE5SX1NDQU5DT0RFUyAyNTYKIAotTU9EVUxFX0FVVEhPUigiWUFFR0FTSEkgVGFrZXNoaSwgQWRyaWFuIE1jTWVuYW1pbiIpOworTU9EVUxFX0FVVEhPUigiQWRyaWFuIE1jTWVuYW1pbiA8YWRyaWFuQG1jbWVuLmRlbW9uLmNvLnVrIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNFR0EgRHJlYW1jYXN0IGtleWJvYXJkIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCkBAIC0xMTUsNyArMTE1LDcgQEAKIAkJCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NDQU4sIGNvZGUpOwogCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBrZXljb2RlLCAwKTsKIAkJCX0gZWxzZQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJtYXBsZV9rZXliOiAiCisJCQkJZGV2X2RiZygmZGV2LT5kZXYsCiAJCQkJCSJVbmtub3duIGtleSAoc2NhbmNvZGUgJSN4KSByZWxlYXNlZC4iLAogCQkJCQljb2RlKTsKIAkJfQpAQCAtMTI3LDcgKzEyNyw3IEBACiAJCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBjb2RlKTsKIAkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwga2V5Y29kZSwgMSk7CiAJCQl9IGVsc2UKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAibWFwbGVfa2V5YjogIgorCQkJCWRldl9kYmcoJmRldi0+ZGV2LAogCQkJCQkiVW5rbm93biBrZXkgKHNjYW5jb2RlICUjeCkgcHJlc3NlZC4iLAogCQkJCQljb2RlKTsKIAkJfQpAQCAtMTQwLDcgKzE0MCw3IEBACiB7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWFwbGVkZXYgPSBtcS0+ZGV2OwogCXN0cnVjdCBkY19rYmQgKmtiZCA9IG1hcGxlX2dldF9kcnZkYXRhKG1hcGxlZGV2KTsKLQl1bnNpZ25lZCBsb25nICpidWYgPSBtcS0+cmVjdmJ1ZjsKKwl1bnNpZ25lZCBsb25nICpidWYgPSAodW5zaWduZWQgbG9uZyAqKShtcS0+cmVjdmJ1Zi0+YnVmKTsKIAogCS8qCiAJICogV2Ugc2hvdWxkIGFsd2F5cyBnZXQgdGhlIGxvY2sgYmVjYXVzZSB0aGUgb25seQpAQCAtMTU5LDIyICsxNTksMjcgQEAKIAogc3RhdGljIGludCBwcm9iZV9tYXBsZV9rYmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYgPSB0b19tYXBsZV9kZXYoZGV2KTsKLQlzdHJ1Y3QgbWFwbGVfZHJpdmVyICptZHJ2ID0gdG9fbWFwbGVfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2OworCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1kcnY7CiAJaW50IGksIGVycm9yOwogCXN0cnVjdCBkY19rYmQgKmtiZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwogCi0JaWYgKCEobWRldi0+ZnVuY3Rpb24gJiBNQVBMRV9GVU5DX0tFWUJPQVJEKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJbWRldiA9IHRvX21hcGxlX2RldihkZXYpOworCW1kcnYgPSB0b19tYXBsZV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCiAJa2JkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRjX2tiZCksIEdGUF9LRVJORUwpOwotCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWtiZCB8fCAhaWRldikgeworCWlmICgha2JkKSB7CiAJCWVycm9yID0gLUVOT01FTTsKIAkJZ290byBmYWlsOwogCX0KIAorCWlkZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWlkZXYpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfaWRldl9hbGxvYzsKKwl9CisKIAlrYmQtPmRldiA9IGlkZXY7CiAJbWVtY3B5KGtiZC0+a2V5Y29kZSwgZGNfa2JkX2tleWNvZGUsIHNpemVvZihrYmQtPmtleWNvZGUpKTsKIApAQCAtMTk1LDcgKzIwMCw3IEBACiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShpZGV2KTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsX3JlZ2lzdGVyOwogCiAJLyogTWFwbGUgcG9sbGluZyBpcyBsb2NrZWQgdG8gVkJMQU5LIC0gd2hpY2ggbWF5IGJlIGp1c3QgNTAvcyAqLwogCW1hcGxlX2dldGNvbmRfY2FsbGJhY2sobWRldiwgZGNfa2JkX2NhbGxiYWNrLCBIWi81MCwKQEAgLTIwNywxMCArMjEyLDEyIEBACiAKIAlyZXR1cm4gZXJyb3I7CiAKLWZhaWw6Ci0JaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7Ci0Ja2ZyZWUoa2JkKTsKK2ZhaWxfcmVnaXN0ZXI6CiAJbWFwbGVfc2V0X2RydmRhdGEobWRldiwgTlVMTCk7CisJaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7CitmYWlsX2lkZXZfYWxsb2M6CisJa2ZyZWUoa2JkKTsKK2ZhaWw6CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NoX2tleXNjLmMKaW5kZXggNWM4YTFiYy4uZTE0ODBmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zaF9rZXlzYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc2hfa2V5c2MuYwpAQCAtMjE5LDYgKzIxOSw4IEBACiAJCSAgcGRhdGEtPnNjYW5fdGltaW5nLCBwcml2LT5pb21lbV9iYXNlICsgS1lDUjFfT0ZGUyk7CiAJaW93cml0ZTE2KDAsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWU9VVERSX09GRlMpOwogCWlvd3JpdGUxNihLWUNSMl9JUlFfTEVWRUwsIHByaXYtPmlvbWVtX2Jhc2UgKyBLWUNSMl9PRkZTKTsKKworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIAlyZXR1cm4gMDsKICBlcnI1OgogCWZyZWVfaXJxKGlycSwgcGRldik7CkBAIC0yNTMsMTcgKzI1NSwzMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNoX2tleXNjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2hfa2V5c2NfcHJpdiAqcHJpdiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXVuc2lnbmVkIHNob3J0IHZhbHVlOwogCi0jZGVmaW5lIHNoX2tleXNjX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzaF9rZXlzY19yZXN1bWUgTlVMTAorCXZhbHVlID0gaW9yZWFkMTYocHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCisJCXZhbHVlIHw9IDB4ODA7CisJZWxzZQorCQl2YWx1ZSAmPSB+MHg4MDsKKworCWlvd3JpdGUxNih2YWx1ZSwgcHJpdi0+aW9tZW1fYmFzZSArIEtZQ1IxX09GRlMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgc2hfa2V5c2NfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZCA9IHNoX2tleXNjX3N1c3BlbmQsCit9OwogCiBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX2tleXNjX2RldmljZV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHNoX2tleXNjX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2hfa2V5c2NfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHNoX2tleXNjX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzaF9rZXlzY19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInNoX2tleXNjIiwKKwkJLnBtCT0gJnNoX2tleXNjX2Rldl9wbV9vcHMsCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCmluZGV4IDlkMTc4MWEuLjEzOTY3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxtYWNoL3NwaXR6Lmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CiAKICNkZWZpbmUgS0JfUk9XUwkJCTcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcnBjbW91c2UuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcnBjbW91c2UuYwppbmRleCA1NmMwNzllLi4yNzJkZWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3JwY21vdXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9ycGNtb3VzZS5jCkBAIC0yMiwxMCArMjIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgogCiBNT0RVTEVfQVVUSE9SKCJWb2p0ZWNoIFBhdmxpaywgUnVzc2VsbCBLaW5nIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKaW5kZXggZWY5OWE3ZS4uMTdmZDZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwpAQCAtNDAzLDEyICs0MDMsOSBAQAogCiBzdGF0aWMgaW50IG1vdXNlZGV2X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7Ci0JaW50IHJldHZhbDsKIAlzdHJ1Y3QgbW91c2VkZXZfY2xpZW50ICpjbGllbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmNsaWVudC0+ZmFzeW5jKTsKLQotCXJldHVybiByZXR2YWwgPCAwID8gcmV0dmFsIDogMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZjbGllbnQtPmZhc3luYyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1vdXNlZGV2X2ZyZWUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKaW5kZXggN2YzNmVkZDMuLmVkMDQ1YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vcnBja2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9ycGNrYmQuYwpAQCAtMzMsMTAgKzMzLDEwIEBACiAjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9tZC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW9fcmF3LmMKaW5kZXggMDZiYmQwZS4uYjAzMDA5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpb19yYXcuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvX3Jhdy5jCkBAIC01OCwxMCArNTgsOCBAQAogc3RhdGljIGludCBzZXJpb19yYXdfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3Qgc2VyaW9fcmF3X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JaW50IHJldHZhbDsKIAotCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKLQlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmbGlzdC0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzZXJpb19yYXcgKnNlcmlvX3Jhd19sb2NhdGUoaW50IG1pbm9yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCmluZGV4IDNmYjUxYjUuLjk0YTE5MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKQEAgLTIxLDcgKzIxLDYgQEAKIAogI2luY2x1ZGUgPG1hY2gvc2hhcnBzbC5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtZ3Bpby5oPgogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9hY3QyMDAwX2lzYS5jCmluZGV4IDFiZDg5NjAuLmZlYTViNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMKKysrIGIvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYwpAQCAtMjU3LDkgKzI1Nyw5IEBACiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkJICAgICAgICJhY3QyMDAwX2lzYV9yZWNlaXZlOiBJbnZhbGlkIENBUEkgbXNnXG4iKTsKIAkJCQkJewotCQkJCQkJaW50IGk7IF9fdTggKnA7IF9fdTggKmM7IF9fdTggdG1wWzMwXTsKLQkJCQkJCWZvciAoaSA9IDAsIHAgPSAoX191OCAqKSZjYXJkLT5pZGF0LmlzYS5yY3ZoZHIsIGMgPSB0bXA7IGkgPCA4OyBpKyspCi0JCQkJCQkJYyArPSBzcHJpbnRmKGMsICIlMDJ4ICIsICoocCsrKSk7CisJCQkJCQlpbnQgaTsgX191OCAqcDsgX191OCAqdDsgX191OCB0bXBbMzBdOworCQkJCQkJZm9yIChpID0gMCwgcCA9IChfX3U4ICopJmNhcmQtPmlkYXQuaXNhLnJjdmhkciwgdCA9IHRtcDsgaSA8IDg7IGkrKykKKwkJCQkJCQl0ICs9IHNwcmludGYodCwgIiUwMnggIiwgKihwKyspKTsKIAkJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImFjdDIwMDBfaXNhX3JlY2VpdmU6ICVzXG4iLCB0bXApOwogCQkJCQl9CiAJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCmluZGV4IDFiNWJmODcuLjNlNDY4ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogCWxpc3RfZGVsKCZtcC0+bGlzdCk7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcGltaW5vcl9saXN0X2xvY2ssIGZsYWdzKTsKIAotCWlmIChtcC0+dHR5c2tiKSBrZnJlZV9za2IobXAtPnR0eXNrYik7CisJa2ZyZWVfc2tiKG1wLT50dHlza2IpOwogCW1wLT50dHlza2IgPSBOVUxMOwogCXNrYl9xdWV1ZV9wdXJnZSgmbXAtPmlucXVldWUpOwogCXNrYl9xdWV1ZV9wdXJnZSgmbXAtPm91dHF1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYwppbmRleCBjMjkyMDhiLi41MGVkNzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCkBAIC0yMzksNiArMjM5LDcgQEAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBzdGF0aWMgdm9pZCAqY2FwaV9kcml2ZXJfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoJmNhcGlfZHJpdmVyc19saXN0X2xvY2spCiB7CiAJcmVhZF9sb2NrKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKTsKIAlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJmNhcGlfZHJpdmVycywgKnBvcyk7CkBAIC0yNTAsNiArMjUxLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgY2FwaV9kcml2ZXJfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKQogewogCXJlYWRfdW5sb2NrKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9LY29uZmlnCmluZGV4IDAwMTdlNTAuLjljYTg4OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKIG1lbnVjb25maWcgSVNETl9EUlZfR0lHQVNFVAotCXRyaXN0YXRlICJTaWVtZW5zIEdpZ2FzZXQgc3VwcG9ydCAoaXNkbikiCisJdHJpc3RhdGUgIlNpZW1lbnMgR2lnYXNldCBzdXBwb3J0IgogCXNlbGVjdCBDUkNfQ0NJVFQKIAlzZWxlY3QgQklUUkVWRVJTRQogCWhlbHAKQEAgLTExLDExICsxMSwxMSBAQAogCSAgb25lIG9mIHRoZSBjb25uZWN0aW9uIHNwZWNpZmljIHBhcnRzIHRoYXQgZm9sbG93LgogCSAgVGhpcyB3aWxsIGJ1aWxkIGEgbW9kdWxlIGNhbGxlZCAiZ2lnYXNldCIuCiAKLWlmIElTRE5fRFJWX0dJR0FTRVQhPW4KK2lmIElTRE5fRFJWX0dJR0FTRVQKIAogY29uZmlnIEdJR0FTRVRfQkFTRQogCXRyaXN0YXRlICJHaWdhc2V0IGJhc2Ugc3RhdGlvbiBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNETl9EUlZfR0lHQVNFVCAmJiBVU0IKKwlkZXBlbmRzIG9uIFVTQgogCWhlbHAKIAkgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBVU0IgaW50ZXJmYWNlIG9mIHRoZSBHaWdhc2V0CiAJICBiYXNlIGZvciBjb25uZWN0aW9uIHRvIHlvdXIgc3lzdGVtLgpAQCAtMjMsNyArMjMsNyBAQAogCiBjb25maWcgR0lHQVNFVF9NMTA1CiAJdHJpc3RhdGUgIkdpZ2FzZXQgTTEwNSBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNETl9EUlZfR0lHQVNFVCAmJiBVU0IKKwlkZXBlbmRzIG9uIFVTQgogCWhlbHAKIAkgIFNheSBNIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCB0byB0aGUgR2lnYXNldCBiYXNlIHZpYSBERUNUCiAJICB1c2luZyBhIEdpZ2FzZXQgTTEwNSAoU2ludXMgNDUgRGF0YSAyKSBVU0IgREVDVCBkZXZpY2UuCkBAIC0zMSw3ICszMSw2IEBACiAKIGNvbmZpZyBHSUdBU0VUX00xMDEKIAl0cmlzdGF0ZSAiR2lnYXNldCBNMTAxIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0ROX0RSVl9HSUdBU0VUCiAJaGVscAogCSAgU2F5IE0gaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IHRvIHRoZSBHaWdhc2V0IGJhc2UgdmlhIERFQ1QKIAkgIHVzaW5nIGEgR2lnYXNldCBNMTAxIChTaW51cyA0NSBEYXRhIDEpIFJTMjMyIERFQ1QgZGV2aWNlLgpAQCAtNDgsNyArNDcsNiBAQAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBVU0IgcmVxdWVzdHMgd2Ugb25seSBrbm93IGZyb20KIAkgIHJldmVyc2UgZW5naW5lZXJpbmcgKGN1cnJlbnRseSBNMTA1IG9ubHkpLiBJZiB5b3UgbmVlZAotCSAgZmVhdHVyZXMgbGlrZSBjb25maWd1cmF0aW9uIG1vZGUgb2YgTTEwNSwgc2F5IHllcy4gSWYgeW91Ci0JICBjYXJlIGFib3V0IHlvdXIgZGV2aWNlLCBzYXkgbm8uCisJICBmZWF0dXJlcyBsaWtlIGNvbmZpZ3VyYXRpb24gbW9kZSBvZiBNMTA1LCBzYXkgeWVzLgogCi1lbmRpZiAjIElTRE5fRFJWX0dJR0FTRVQgIT0gbgorZW5kaWYgIyBJU0ROX0RSVl9HSUdBU0VUCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwppbmRleCAxOGRkOGFhLi44MzFkZGNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKQEAgLTQ2LDYgKzQ2LDkgQEAKIC8qIGxlbmd0aCBsaW1pdCBhY2NvcmRpbmcgdG8gU2llbWVucyAzMDcwdXNiLXByb3Rva29sbC5kb2MgY2guIDIuMSAqLwogI2RlZmluZSBJRl9XUklURUJVRiAyNjQKIAorLyogaW50ZXJydXB0IHBpcGUgbWVzc2FnZSBzaXplIGFjY29yZGluZyB0byBpYmlkLiBjaC4gMi4yICovCisjZGVmaW5lIElQX01TR1NJWkUgMworCiAvKiBWYWx1ZXMgZm9yIHRoZSBHaWdhc2V0IDMwN3ggKi8KICNkZWZpbmUgVVNCX0dJR0FfVkVORE9SX0lEICAgICAgMHgwNjgxCiAjZGVmaW5lIFVTQl8zMDcwX1BST0RVQ1RfSUQgICAgIDB4MDAwMQpAQCAtMTEwLDcgKzExMyw3IEBACiAJdW5zaWduZWQgY2hhcgkJKnJjdmJ1ZjsJLyogQVQgcmVwbHkgcmVjZWl2ZSBidWZmZXIgKi8KIAogCXN0cnVjdCB1cmIJCSp1cmJfaW50X2luOwkvKiBVUkIgZm9yIGludGVycnVwdCBwaXBlICovCi0JdW5zaWduZWQgY2hhcgkJaW50X2luX2J1ZlszXTsKKwl1bnNpZ25lZCBjaGFyCQkqaW50X2luX2J1ZjsKIAogCXNwaW5sb2NrX3QJCWxvY2s7CQkvKiBsb2NrcyBhbGwgZm9sbG93aW5nICovCiAJaW50CQkJYmFzc3RhdGU7CS8qIGJpdG1hcCAoQlNfKikgKi8KQEAgLTY1Nyw3ICs2NjAsNyBAQAogCX0KIAogCS8qIGRyb3AgaW5jb21wbGV0ZSBwYWNrZXRzIGV2ZW4gaWYgdGhlIG1pc3NpbmcgYnl0ZXMgd291bGRuJ3QgbWF0dGVyICovCi0JaWYgKHVubGlrZWx5KHVyYi0+YWN0dWFsX2xlbmd0aCA8IDMpKSB7CisJaWYgKHVubGlrZWx5KHVyYi0+YWN0dWFsX2xlbmd0aCA8IElQX01TR1NJWkUpKSB7CiAJCWRldl93YXJuKGNzLT5kZXYsICJpbmNvbXBsZXRlIGludGVycnVwdCBwYWNrZXQgKCVkIGJ5dGVzKVxuIiwKIAkJCSB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQlnb3RvIHJlc3VibWl0OwpAQCAtMjEyNyw2ICsyMTMwLDcgQEAKIHN0YXRpYyB2b2lkIGdpZ2FzZXRfZnJlZWNzaHcoc3RydWN0IGNhcmRzdGF0ZSAqY3MpCiB7CiAJLyogdGltZXJzLCBVUkJzIGFuZCByY3ZidWYgYXJlIGRpc3Bvc2VkIG9mIGluIGRpc2Nvbm5lY3QgKi8KKwlrZnJlZShjcy0+aHcuYmFzLT5pbnRfaW5fYnVmKTsKIAlrZnJlZShjcy0+aHcuYmFzKTsKIAljcy0+aHcuYmFzID0gTlVMTDsKIH0KQEAgLTIxNDAsNiArMjE0NCwxMiBAQAogCQlwcl9lcnIoIm91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gMDsKIAl9CisJdWNzLT5pbnRfaW5fYnVmID0ga21hbGxvYyhJUF9NU0dTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVjcy0+aW50X2luX2J1ZikgeworCQlrZnJlZSh1Y3MpOworCQlwcl9lcnIoIm91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gMDsKKwl9CiAKIAl1Y3MtPnVyYl9jbWRfaW4gPSBOVUxMOwogCXVjcy0+dXJiX2NtZF9vdXQgPSBOVUxMOwpAQCAtMjI5Miw3ICsyMzAyLDcgQEAKIAl1c2JfZmlsbF9pbnRfdXJiKHVjcy0+dXJiX2ludF9pbiwgdWRldiwKIAkJCSB1c2JfcmN2aW50cGlwZSh1ZGV2LAogCQkJCQkoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpICYgMHgwZiksCi0JCQkgdWNzLT5pbnRfaW5fYnVmLCAzLCByZWFkX2ludF9jYWxsYmFjaywgY3MsCisJCQkgdWNzLT5pbnRfaW5fYnVmLCBJUF9NU0dTSVpFLCByZWFkX2ludF9jYWxsYmFjaywgY3MsCiAJCQkgZW5kcG9pbnQtPmJJbnRlcnZhbCk7CiAJaWYgKChyYyA9IHVzYl9zdWJtaXRfdXJiKHVjcy0+dXJiX2ludF9pbiwgR0ZQX0tFUk5FTCkpICE9IDApIHsKIAkJZGV2X2Vycihjcy0+ZGV2LCAiY291bGQgbm90IHN1Ym1pdCBpbnRlcnJ1cHQgVVJCOiAlc1xuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9zZXItZ2lnYXNldC5jCmluZGV4IGFjMjQ1ZTcuLjMwNzFhNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Nlci1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvc2VyLWdpZ2FzZXQuYwpAQCAtMzg5LDggKzM4OSw3IEBACiAKIHN0YXRpYyB2b2lkIGdpZ2FzZXRfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPQotCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAogCS8qIGFkYXB0ZWQgZnJvbSBwbGF0Zm9ybV9kZXZpY2VfcmVsZWFzZSgpIGluIGRyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jICovCiAJLy9GSVhNRSBpcyB0aGlzIGFjdHVhbGx5IG5lY2Vzc2FyeT8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCmluZGV4IGZiYTYxZjYuLmQ3ODM4NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYwpAQCAtMjc4LDE3ICsyNzgsMTcgQEAKIHN0YXRpYyBpbnQgZ2lnYXNldF9zZXRfbW9kZW1fY3RybChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgb2xkX3N0YXRlLAogCQkJCSAgdW5zaWduZWQgbmV3X3N0YXRlKQogewotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PVFRZOwogfQogCiBzdGF0aWMgaW50IGdpZ2FzZXRfc2V0X2xpbmVfY3RybChzdHJ1Y3QgY2FyZHN0YXRlICpjcywgdW5zaWduZWQgY2ZsYWcpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIC1FTk9UVFk7CiB9CiAKIHN0YXRpYyBpbnQgZ2lnYXNldF9iYXVkX3JhdGUoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIHVuc2lnbmVkIGNmbGFnKQogewotCXJldHVybiAtRUlOVkFMOworCXJldHVybiAtRU5PVFRZOwogfQogI2VuZGlmCiAKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDE5LCAweDQxLAogCQkJICAgICAgIDAsIDAsICZidWYsIDYsIDIwMDApOwogI2Vsc2UKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gLUVOT1RUWTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGVidWcuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jCmluZGV4IDg0MzE4ZWMuLjMzY2U4OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kZWJ1Zy5jCkBAIC0xMTk4LDcgKzExOTgsNyBAQAogICAgICAgICBwQy0+eGJ1ZmZlcls1XSA9IChieXRlKShyeF9kbWFfbWFnaWMgPj4gIDgpOwogICAgICAgICBwQy0+eGJ1ZmZlcls2XSA9IChieXRlKShyeF9kbWFfbWFnaWMgPj4gMTYpOwogICAgICAgICBwQy0+eGJ1ZmZlcls3XSA9IChieXRlKShyeF9kbWFfbWFnaWMgPj4gMjQpOwotICAgICAgICBwQy0+eGJ1ZmZlcls4XSA9IChieXRlKURJVkFfTUFYX01BTkFHRU1FTlRfVFJBTlNGRVJfU0laRTsKKwlwQy0+eGJ1ZmZlcls4XSA9IChieXRlKShESVZBX01BWF9NQU5BR0VNRU5UX1RSQU5TRkVSX1NJWkUgJiAweEZGKTsKICAgICAgICAgcEMtPnhidWZmZXJbOV0gPSAoYnl0ZSkoRElWQV9NQVhfTUFOQUdFTUVOVF9UUkFOU0ZFUl9TSVpFID4+IDgpOwogICAgICAgICBwQy0+eGJ1ZmZlclsxMF0gPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwppbmRleCA0Y2M5NGYyLi4zMWY5MWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKQEAgLTExOTQsNyArMTE5NCw4IEBACiAvKiB0cmFuc2xhdGlvbiBmdW5jdGlvbiBmb3IgZWFjaCBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLWJ5dGUgY29ubmVjdF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBjaDsKICAgd29yZCBpOwpAQCAtMTQxMSw3ICsxNDEyLDggQEAKICAgcmV0dXJuIDI7CiB9CiAKLWJ5dGUgY29ubmVjdF9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSBjb25uZWN0X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBpLCBJbmZvOwogICB3b3JkIFJlamVjdDsKQEAgLTE1NjcsMTMgKzE1NjksMTUgQEAKICAgcmV0dXJuIDE7CiB9CiAKLWJ5dGUgY29ubmVjdF9hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBjb25uZWN0X2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICBkYnVnKDEsZHByaW50ZigiY29ubmVjdF9hX3JlcyIpKTsKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGRpc2Nvbm5lY3RfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGRpc2Nvbm5lY3RfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBJbmZvOwogICB3b3JkIGk7CkBAIC0xNjI4LDcgKzE2MzIsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgZGlzY29ubmVjdF9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgZGlzY29ubmVjdF9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqbXNnKQogewogICBkYnVnKDEsZHByaW50ZigiZGlzY29ubmVjdF9yZXMiKSk7CiAgIGlmKHBsY2kpCkBAIC0xNjU1LDcgKzE2NjAsOCBAQAogICByZXR1cm4gMDsKIH0KIAotYnl0ZSBsaXN0ZW5fcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgbGlzdGVuX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkgICAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICpwYXJtcykKIHsKICAgd29yZCBJbmZvOwogICBieXRlIGk7CkBAIC0xNzA0LDcgKzE3MTAsOCBAQAogICByZXR1cm4gZmFsc2U7CiB9CiAKLWJ5dGUgaW5mb19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgaW5mb19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBpOwogICBBUElfUEFSU0UgKiBhaTsKQEAgLTE4MTMsMTMgKzE4MjAsMTUgQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGluZm9fcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIG1zZykKK3N0YXRpYyBieXRlIGluZm9fcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCSAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIGRidWcoMSxkcHJpbnRmKCJpbmZvX3JlcyIpKTsKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGFsZXJ0X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBhbGVydF9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJICAgICAgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIHdvcmQgSW5mbzsKICAgYnl0ZSByZXQ7CkBAIC0xODQ5LDcgKzE4NTgsOCBAQAogICByZXR1cm4gcmV0OwogfQogCi1ieXRlIGZhY2lsaXR5X3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBmYWNpbGl0eV9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgd29yZCBJbmZvID0gMDsKICAgd29yZCBpICAgID0gMDsKQEAgLTI1OTksMTMgKzI2MDksMTUgQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGZhY2lsaXR5X3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBtc2cpCitzdGF0aWMgYnl0ZSBmYWNpbGl0eV9yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKm1zZykKIHsKICAgZGJ1ZygxLGRwcmludGYoImZhY2lsaXR5X3JlcyIpKTsKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGNvbm5lY3RfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgSW5mbyA9IDA7CiAgIGJ5dGUgcmVxOwpAQCAtMjgzOSw3ICsyODUxLDggQEAKICAgcmV0dXJuIGZhbHNlOwogfQogCi1ieXRlIGNvbm5lY3RfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSAgIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKICAgQVBJX1BBUlNFICogbmNwaTsKQEAgLTI5NTQsNyArMjk2Nyw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBjb25uZWN0X2IzX2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgICAqIGEsIFBMQ0kgICAqIHBsY2ksIEFQUEwgICAqIGFwcGwsIEFQSV9QQVJTRSAqIHBhcm1zKQorc3RhdGljIGJ5dGUgY29ubmVjdF9iM19hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICphLAorCQkJICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG5jY2k7CiAKQEAgLTI5NzQsNyArMjk4OCw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkaXNjb25uZWN0X2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGRpc2Nvbm5lY3RfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIEluZm87CiAgIHdvcmQgbmNjaTsKQEAgLTMwMzAsNyArMzA0NSw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkaXNjb25uZWN0X2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGRpc2Nvbm5lY3RfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgICAgICBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG5jY2k7CiAgIHdvcmQgaTsKQEAgLTMwODYsNyArMzEwMiw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkYXRhX2IzX3JlcShkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGRhdGFfYjNfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQlQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICBOQ0NJICAgKm5jY2lfcHRyOwogICBEQVRBX0IzX0RFU0MgICAqZGF0YTsKQEAgLTMxNjMsNyArMzE4MCw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBkYXRhX2IzX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGRhdGFfYjNfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQlQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG47CiAgIHdvcmQgbmNjaTsKQEAgLTMxOTYsNyArMzIxNCw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSByZXNldF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSByZXNldF9iM19yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIEluZm87CiAgIHdvcmQgbmNjaTsKQEAgLTMyMzcsNyArMzI1Niw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSByZXNldF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogcGFybXMpCitzdGF0aWMgYnl0ZSByZXNldF9iM19yZXMoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAqYSwKKwkJCSBQTENJICpwbGNpLCBBUFBMICphcHBsLCBBUElfUEFSU0UgKnBhcm1zKQogewogICB3b3JkIG5jY2k7CiAKQEAgLTMyNjEsNyArMzI4MSw4IEBACiAgIHJldHVybiBmYWxzZTsKIH0KIAotYnl0ZSBjb25uZWN0X2IzX3Q5MF9hX3Jlcyhkd29yZCBJZCwgd29yZCBOdW1iZXIsIERJVkFfQ0FQSV9BREFQVEVSICAgKiBhLCBQTENJICAgKiBwbGNpLCBBUFBMICAgKiBhcHBsLCBBUElfUEFSU0UgKiBwYXJtcykKK3N0YXRpYyBieXRlIGNvbm5lY3RfYjNfdDkwX2FfcmVzKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkJIFBMQ0kgKnBsY2ksIEFQUEwgKmFwcGwsIEFQSV9QQVJTRSAqcGFybXMpCiB7CiAgIHdvcmQgbmNjaTsKICAgQVBJX1BBUlNFICogbmNwaTsKQEAgLTMyOTUsNyArMzMxNiw4IEBACiB9CiAKIAotYnl0ZSBzZWxlY3RfYl9yZXEoZHdvcmQgSWQsIHdvcmQgTnVtYmVyLCBESVZBX0NBUElfQURBUFRFUiAgICogYSwgUExDSSAgICogcGxjaSwgQVBQTCAgICogYXBwbCwgQVBJX1BBUlNFICogbXNnKQorc3RhdGljIGJ5dGUgc2VsZWN0X2JfcmVxKGR3b3JkIElkLCB3b3JkIE51bWJlciwgRElWQV9DQVBJX0FEQVBURVIgKmEsCisJCQkgUExDSSAqcGxjaSwgQVBQTCAqYXBwbCwgQVBJX1BBUlNFICptc2cpCiB7CiAgIHdvcmQgSW5mbz0wOwogICB3b3JkIGk7CkBAIC04Njg5LDcgKzg3MTEsNyBAQAogLyogc2VuZCBhIHJlcXVlc3QgZm9yIHRoZSBzaWduYWxpbmcgZW50aXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi12b2lkIHNpZ19yZXEoUExDSSAgICogcGxjaSwgYnl0ZSByZXEsIGJ5dGUgSWQpCitzdGF0aWMgdm9pZCBzaWdfcmVxKFBMQ0kgKnBsY2ksIGJ5dGUgcmVxLCBieXRlIElkKQogewogICBpZighcGxjaSkgcmV0dXJuOwogICBpZihwbGNpLT5hZGFwdGVyLT5hZGFwdGVyX2Rpc2FibGVkKSByZXR1cm47CkBAIC04Nzg5LDcgKzg4MTEsNyBAQAogICBkYnVnKDEsZHByaW50Zigic2VuZF9vayIpKTsKIH0KIAotdm9pZCBzZW5kX2RhdGEoUExDSSAgICogcGxjaSkKK3N0YXRpYyB2b2lkIHNlbmRfZGF0YShQTENJICpwbGNpKQogewogICBESVZBX0NBUElfQURBUFRFUiAgICogYTsKICAgREFUQV9CM19ERVNDICAgKiBkYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3BjaS5jCmluZGV4IGYwZTE0ZGYuLjY0MWE5Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNwY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjcGNpLmMKQEAgLTU2LDggKzU2LDggQEAKIHN0YXRpYyBpbnQgSEZDX2NudDsKIHN0YXRpYyB1aW50IGRlYnVnOwogc3RhdGljIHVpbnQgcG9sbCwgdGljczsKLXN0cnVjdCB0aW1lcl9saXN0IGhmY190bDsKLXUzMgloZmNfamlmZmllczsKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBoZmNfdGw7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBoZmNfamlmZmllczsKIAogTU9EVUxFX0FVVEhPUigiS2Fyc3RlbiBLZWlsIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuYwppbmRleCBiYTY5MjVmLi45YzQyN2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tSVNETmh3Lmg+CiAjaW5jbHVkZSAiaGZjc3VzYi5oIgogCi1jb25zdCBjaGFyICpoZmNzdXNiX3JldiA9ICJSZXZpc2lvbjogMC4zLjMgKHNvY2tldCksIDIwMDgtMTEtMDUiOworc3RhdGljIGNvbnN0IGNoYXIgKmhmY3N1c2JfcmV2ID0gIlJldmlzaW9uOiAwLjMuMyAoc29ja2V0KSwgMjAwOC0xMS0wNSI7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7CiBzdGF0aWMgaW50IHBvbGwgPSBERUZBVUxUX1RSQU5TUF9CVVJTVF9TWjsKQEAgLTk3NCw3ICs5NzQsNyBAQAogCXNwaW5fdW5sb2NrKCZody0+bG9jayk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBmaWxsX2lzb2NfdXJiKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHBpcGUsCiAJICAgICAgdm9pZCAqYnVmLCBpbnQgbnVtX3BhY2tldHMsIGludCBwYWNrZXRfc2l6ZSwgaW50IGludGVydmFsLAogCSAgICAgIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLCB2b2lkICpjb250ZXh0KQpAQCAtMTcyMCw3ICsxNzIwLDcgQEAKIAogCiAvKiBIYXJkd2FyZSBJbml0aWFsaXphdGlvbiAqLwotaW50CitzdGF0aWMgaW50CiBzZXR1cF9oZmNzdXNiKHN0cnVjdCBoZmNzdXNiICpodykKIHsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9oZmNzdXNiLmgKaW5kZXggMDk4NDg2Yi4uNDNlZmU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY3N1c2IuaAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjc3VzYi5oCkBAIC0xOTgsNyArMTk4LDcgQEAKIH07CiAKIC8qIHN0cmluZyBkZXNjcmlwdGlvbiBvZiBjaG9zZW4gY29uZmlnICovCi1jaGFyICpjb25mX3N0cltdID0geworc3RhdGljIGNoYXIgKmNvbmZfc3RyW10gPSB7CiAJIjQgSW50ZXJydXB0IElOICsgMyBJc29jaHJvbiBPVVQiLAogCSIzIEludGVycnVwdCBJTiArIDMgSXNvY2hyb24gT1VUIiwKIAkiNCBJc29jaHJvbiBJTiArIDMgSXNvY2hyb24gT1VUIiwKQEAgLTMxNiw3ICszMTYsNyBAQAogI2RlZmluZSBIRkNfTUFYX1RFX0xBWUVSMV9TVEFURSA4CiAjZGVmaW5lIEhGQ19NQVhfTlRfTEFZRVIxX1NUQVRFIDQKIAotY29uc3QgY2hhciAqSEZDX1RFX0xBWUVSMV9TVEFURVNbSEZDX01BWF9URV9MQVlFUjFfU1RBVEUgKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpIRkNfVEVfTEFZRVIxX1NUQVRFU1tIRkNfTUFYX1RFX0xBWUVSMV9TVEFURSArIDFdID0gewogCSJURSBGMCAtIFJlc2V0IiwKIAkiVEUgRjEgLSBSZXNldCIsCiAJIlRFIEYyIC0gU2Vuc2luZyIsCkBAIC0zMjgsNyArMzI4LDcgQEAKIAkiVEUgRjggLSBMb3N0IGZyYW1pbmciLAogfTsKIAotY29uc3QgY2hhciAqSEZDX05UX0xBWUVSMV9TVEFURVNbSEZDX01BWF9OVF9MQVlFUjFfU1RBVEUgKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpIRkNfTlRfTEFZRVIxX1NUQVRFU1tIRkNfTUFYX05UX0xBWUVSMV9TVEFURSArIDFdID0gewogCSJOVCBHMCAtIFJlc2V0IiwKIAkiTlQgRzEgLSBEZWFjdGl2ZSIsCiAJIk5UIEcyIC0gUGVuZGluZyBhY3RpdmF0aW9uIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9jYWxsYy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMKaW5kZXggN2M1NmM0NC4uMDI1YTIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NhbGxjLmMKQEAgLTI0LDcgKzI0LDYgQEAKIGNvbnN0IGNoYXIgKmxsaV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuNTkuMi40ICQiOwogCiBleHRlcm4gc3RydWN0IElzZG5DYXJkIGNhcmRzW107Ci1leHRlcm4gaW50IG5yY2FyZHM7CiAKIHN0YXRpYyBpbnQgaW5pdF9iX3N0KHN0cnVjdCBDaGFubmVsICpjaGFucCwgaW50IGluY29taW5nKTsKIHN0YXRpYyB2b2lkIHJlbGVhc2VfYl9zdChzdHJ1Y3QgQ2hhbm5lbCAqY2hhbnApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2NvbmZpZy5jCmluZGV4IGRlZDlkMGIuLjRmYWIxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9jb25maWcuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvY29uZmlnLmMKQEAgLTM2MSwxMiArMzYxLDYgQEAKIAogaW50IG5yY2FyZHM7CiAKLWV4dGVybiBjb25zdCBjaGFyICpsMV9yZXZpc2lvbjsKLWV4dGVybiBjb25zdCBjaGFyICpsMl9yZXZpc2lvbjsKLWV4dGVybiBjb25zdCBjaGFyICpsM19yZXZpc2lvbjsKLWV4dGVybiBjb25zdCBjaGFyICpsbGlfcmV2aXNpb247Ci1leHRlcm4gY29uc3QgY2hhciAqdGVpX3JldmlzaW9uOwotCiBjaGFyICpIaVNheF9nZXRyZXYoY29uc3QgY2hhciAqcmV2aXNpb24pCiB7CiAJY2hhciAqcmV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY3NjYXJkLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjc2NhcmQuYwppbmRleCBjZjA4MjY2Li4yMGQ3Njg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjc2NhcmQuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjc2NhcmQuYwpAQCAtMTYsOCArMTYsNiBAQAogI2luY2x1ZGUgImhmY18yYmRzMC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKmhmY3NfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjEwLjIuNCAkIjsKIAogc3RhdGljIGlycXJldHVybl90CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaGlzYXguaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCmluZGV4IGU4ZDQyOWYuLmY4NTI3MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oaXNheC5oCkBAIC0xMjEsNiArMTIxLDE1IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKK2V4dGVybiBjb25zdCBjaGFyICpDYXJkVHlwZVtdOworZXh0ZXJuIGludCBucmNhcmRzOworCitleHRlcm4gY29uc3QgY2hhciAqbDFfcmV2aXNpb247CitleHRlcm4gY29uc3QgY2hhciAqbDJfcmV2aXNpb247CitleHRlcm4gY29uc3QgY2hhciAqbDNfcmV2aXNpb247CitleHRlcm4gY29uc3QgY2hhciAqbGxpX3JldmlzaW9uOworZXh0ZXJuIGNvbnN0IGNoYXIgKnRlaV9yZXZpc2lvbjsKKwogLyogaW5jbHVkZSBsM2RzczEgJiBuaTEgc3BlY2lmaWMgcHJvY2VzcyBzdHJ1Y3R1cmVzLCBidXQgbm8gb3RoZXIgZGVmaW5lcyAqLwogI2lmZGVmIENPTkZJR19ISVNBWF9FVVJPCiAgICNkZWZpbmUgbDNkc3MxX3Byb2Nlc3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDEuYwppbmRleCBhMTQyMDRlLi4zMTdmMTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwxLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMS5jCkBAIC0xOCwxMiArMTgsMTIgQEAKICAqCiAgKi8KIAotY29uc3QgY2hhciAqbDFfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjQ2LjIuNSAkIjsKLQogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlICJoaXNheC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogCitjb25zdCBjaGFyICpsMV9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuNDYuMi41ICQiOworCiAjZGVmaW5lIFRJTUVSM19WQUxVRSA3MDAwCiAKIHN0YXRpYyBzdHJ1Y3QgRnNtIGwxZnNtX2I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvc2VkbGJhdWVyLmMKaW5kZXggYTEwZGZhOC4uNTU2OWE1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L3NlZGxiYXVlci5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9zZWRsYmF1ZXIuYwpAQCAtNDgsOCArNDgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKlNlZGxiYXVlcl9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMzQuMi42ICQiOwogCiBzdGF0aWMgY29uc3QgY2hhciAqU2VkbGJhdWVyX1R5cGVzW10gPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMC5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMC5jCmluZGV4IDQ4NTgxMzMuLjNjYTBiZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczAuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMwLmMKQEAgLTIxLDggKzIxLDYgQEAKICNpbmNsdWRlICJpc2FjLmgiCiAjaW5jbHVkZSAiaHNjeC5oIgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKnRlbGVzMF9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDIuMTUuMi40ICQiOwogCiAjZGVmaW5lIFRFTEVTX0lPTUVNX1NJWkUJMHg0MDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC90ZWxlczMuYwppbmRleCA1ZGM5ZjFhLi5lOWY1YmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvdGVsZXMzLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L3RlbGVzMy5jCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSAiaHNjeC5oIgogI2luY2x1ZGUgImlzZG5sMS5oIgogCi1leHRlcm4gY29uc3QgY2hhciAqQ2FyZFR5cGVbXTsKIHN0YXRpYyBjb25zdCBjaGFyICp0ZWxlczNfcmV2aXNpb24gPSAiJFJldmlzaW9uOiAyLjE5LjIuNCAkIjsKIAogI2RlZmluZSBieXRlb3V0KGFkZHIsdmFsKSBvdXRiKHZhbCxhZGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2Nsb2NrLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vY2xvY2suYwppbmRleCA0NGQ5YzNkLi5mMWJiYzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vY2xvY2suYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vY2xvY2suYwpAQCAtNDEsMTEgKzQxLDExIEBACiAKIHN0YXRpYyB1X2ludCAqZGVidWc7CiBzdGF0aWMgTElTVF9IRUFEKGljbG9ja19saXN0KTsKLURFRklORV9SV0xPQ0soaWNsb2NrX2xvY2spOwotdTE2CWljbG9ja19jb3VudDsJCS8qIGNvdW50ZXIgb2YgbGFzdCBjbG9jayAqLwotc3RydWN0CXRpbWV2YWwgaWNsb2NrX3R2OwkvKiB0aW1lIHN0YW1wIG9mIGxhc3QgY2xvY2sgKi8KLWludAlpY2xvY2tfdHZfdmFsaWQ7CS8qIGFscmVhZHkgcmVjZWl2ZWQgb25lIHRpbWVzdGFtcCAqLwotc3RydWN0CW1JU0ROY2xvY2sgKmljbG9ja19jdXJyZW50Oworc3RhdGljIERFRklORV9SV0xPQ0soaWNsb2NrX2xvY2spOworc3RhdGljIHUxNiBpY2xvY2tfY291bnQ7CQkvKiBjb3VudGVyIG9mIGxhc3QgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZXZhbCBpY2xvY2tfdHY7CS8qIHRpbWUgc3RhbXAgb2YgbGFzdCBjbG9jayAqLworc3RhdGljIGludCBpY2xvY2tfdHZfdmFsaWQ7CQkvKiBhbHJlYWR5IHJlY2VpdmVkIG9uZSB0aW1lc3RhbXAgKi8KK3N0YXRpYyBzdHJ1Y3QgbUlTRE5jbG9jayAqaWNsb2NrX2N1cnJlbnQ7CiAKIHZvaWQKIG1JU0ROX2luaXRfY2xvY2sodV9pbnQgKmRwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL3RpbWVyZGV2LmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYwppbmRleCBmMmIzMjE4Li5iYmQ5OWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vdGltZXJkZXYuYwpAQCAtMTUyLDggKzE1Miw3IEBACiAJdV9sb25nCQkJZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGltZXItPmRldi0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZ0aW1lci0+bGlzdCk7Ci0JbGlzdF9hZGRfdGFpbCgmdGltZXItPmxpc3QsICZ0aW1lci0+ZGV2LT5leHBpcmVkKTsKKwlsaXN0X21vdmVfdGFpbCgmdGltZXItPmxpc3QsICZ0aW1lci0+ZGV2LT5leHBpcmVkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0aW1lci0+ZGV2LT5sb2NrLCBmbGFncyk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0aW1lci0+ZGV2LT53YWl0KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYyBiL2RyaXZlcnMvaXNkbi9wY2JpdC9sYXllcjIuYwppbmRleCA1YmEyYTg3Li5lMDc1ZThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vcGNiaXQvbGF5ZXIyLmMKKysrIGIvZHJpdmVycy9pc2RuL3BjYml0L2xheWVyMi5jCkBAIC0zNDcsOCArMzQ3LDcgQEAKIAkJaWYgKGRldi0+cmVhZF9mcmFtZSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjYml0X3JlY2VpdmU6IFR5cGUgMCBmcmFtZSBhbmQgcmVhZF9mcmFtZSAhPSBOVUxMXG4iKTsKIAkJCS8qIGRpc2NhcmQgcHJldmlvdXMgcXVldWVkIGZyYW1lICovCi0JCQlpZiAoZGV2LT5yZWFkX2ZyYW1lLT5za2IpCi0JCQkJa2ZyZWVfc2tiKGRldi0+cmVhZF9mcmFtZS0+c2tiKTsKKwkJCWtmcmVlX3NrYihkZXYtPnJlYWRfZnJhbWUtPnNrYik7CiAJCQlrZnJlZShkZXYtPnJlYWRfZnJhbWUpOwogCQkJZGV2LT5yZWFkX2ZyYW1lID0gTlVMTDsKIAkJfQpAQCAtNjAxLDggKzYwMCw3IEBACiAJZGV2LT53X2J1c3kgPSBkZXYtPnJfYnVzeSA9IDE7CiAKIAlpZiAoZGV2LT5yZWFkX2ZyYW1lKSB7Ci0JCWlmIChkZXYtPnJlYWRfZnJhbWUtPnNrYikKLQkJCWtmcmVlX3NrYihkZXYtPnJlYWRfZnJhbWUtPnNrYik7CisJCWtmcmVlX3NrYihkZXYtPnJlYWRfZnJhbWUtPnNrYik7CiAJCWtmcmVlKGRldi0+cmVhZF9mcmFtZSk7CiAJCWRldi0+cmVhZF9mcmFtZSA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL0tjb25maWcgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwppbmRleCA3NDI3MTM2Li41NTZhZWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMjIzLDQgKzIyMyw3IEBACiAJICBUaGlzIGFsbG93cyBMRURzIHRvIGJlIGluaXRpYWxpc2VkIGluIHRoZSBPTiBzdGF0ZS4KIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbW1lbnQgImlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkiCisJZGVwZW5kcyBvbiBMRURTX1RSSUdHRVJTCisKIGVuZGlmICMgTkVXX0xFRFMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWNhL21jYS1idXMuYyBiL2RyaXZlcnMvbWNhL21jYS1idXMuYwppbmRleCBlZjJkYmZlLi5hZGE1ZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21jYS9tY2EtYnVzLmMKKysrIGIvZHJpdmVycy9tY2EvbWNhLWJ1cy5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAogCW1jYV9kZXYtPmRldi5wYXJlbnQgPSAmbWNhX2J1cy0+ZGV2OwogCW1jYV9kZXYtPmRldi5idXMgPSAmbWNhX2J1c190eXBlOwotCXNwcmludGYgKG1jYV9kZXYtPmRldi5idXNfaWQsICIlMDJkOiUwMlgiLCBidXMsIG1jYV9kZXYtPnNsb3QpOworCWRldl9zZXRfbmFtZSgmbWNhX2Rldi0+ZGV2LCAiJTAyZDolMDJYIiwgYnVzLCBtY2FfZGV2LT5zbG90KTsKIAltY2FfZGV2LT5kbWFfbWFzayA9IG1jYV9idXMtPmRlZmF1bHRfZG1hX21hc2s7CiAJbWNhX2Rldi0+ZGV2LmRtYV9tYXNrID0gJm1jYV9kZXYtPmRtYV9tYXNrOwogCW1jYV9kZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzayA9IG1jYV9kZXYtPmRtYV9tYXNrOwpAQCAtMTUxLDcgKzE1MSw3IEBACiAJaWYgKCFtY2FfYnVzKQogCQlyZXR1cm4gTlVMTDsKIAotCXNwcmludGYobWNhX2J1cy0+ZGV2LmJ1c19pZCwibWNhJWQiLGJ1cyk7CisJZGV2X3NldF9uYW1lKCZtY2FfYnVzLT5kZXYsICJtY2ElZCIsIGJ1cyk7CiAJc3ByaW50ZihtY2FfYnVzLT5uYW1lLCJIb3N0ICVzIE1DQSBCcmlkZ2UiLCBidXMgPyAiU2Vjb25kYXJ5IiA6ICJQcmltYXJ5Iik7CiAJaWYgKGRldmljZV9yZWdpc3RlcigmbWNhX2J1cy0+ZGV2KSkgewogCQlrZnJlZShtY2FfYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCmluZGV4IGI1NWQ5Y2MuLjMyNTI2ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwpAQCAtMTE1LDcgKzExNSw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z19mY3Bfb3Bjb2RlKHVuc2lnbmVkIGludCBvcGNvZGUsCi0JCQkJICAgIGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuZ3RoKQorCQkJCSAgICBjb25zdCB1OCAqZGF0YSwgaW50IGxlbmd0aCkKIHsKIAlzd2l0Y2ggKG9wY29kZSkgewogCWNhc2UgQVZDX09QQ09ERV9WRU5ET1I6CQkJYnJlYWs7CkBAIC0xMzUsMTMgKzEzNSwxNCBAQAogCWNhc2UgU0ZFX1ZFTkRPUl9PUENPREVfUkVHSVNURVJfUkVNT1RFX0NPTlRST0w6CXJldHVybiAiUmVnaXN0ZXJSQyI7CiAJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9MTkJfQ09OVFJPTDoJCXJldHVybiAiTE5CQ29udHJvbCI7CiAJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0s6CQlyZXR1cm4gIlR1bmVRUFNLIjsKKwljYXNlIFNGRV9WRU5ET1JfT1BDT0RFX1RVTkVfUVBTSzI6CQlyZXR1cm4gIlR1bmVRUFNLMiI7CiAJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9IT1NUMkNBOgkJCXJldHVybiAiSG9zdDJDQSI7CiAJY2FzZSBTRkVfVkVORE9SX09QQ09ERV9DQTJIT1NUOgkJCXJldHVybiAiQ0EySG9zdCI7CiAJfQogCXJldHVybiAiVmVuZG9yIjsKIH0KIAotc3RhdGljIHZvaWQgZGVidWdfZmNwKGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgbGVuZ3RoKQorc3RhdGljIHZvaWQgZGVidWdfZmNwKGNvbnN0IHU4ICpkYXRhLCBpbnQgbGVuZ3RoKQogewogCXVuc2lnbmVkIGludCBzdWJ1bml0X3R5cGUsIHN1YnVuaXRfaWQsIG9wOwogCWNvbnN0IGNoYXIgKnByZWZpeCA9IGRhdGFbMF0gPiA3ID8gIkZDUCA8LSAiIDogIkZDUCAtPiAiOwpAQCAtMjY2LDcgKzI2NywxMCBAQAogCWMtPm9wZXJhbmRbMF0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8wOwogCWMtPm9wZXJhbmRbMV0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8xOwogCWMtPm9wZXJhbmRbMl0gPSBTRkVfVkVORE9SX0RFX0NPTVBBTllJRF8yOwotCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0s7CisJaWYgKGZkdHYtPnR5cGUgPT0gRklSRURUVl9EVkJfUzIpCisJCWMtPm9wZXJhbmRbM10gPSBTRkVfVkVORE9SX09QQ09ERV9UVU5FX1FQU0syOworCWVsc2UKKwkJYy0+b3BlcmFuZFszXSA9IFNGRV9WRU5ET1JfT1BDT0RFX1RVTkVfUVBTSzsKIAogCWMtPm9wZXJhbmRbNF0gPSAocGFyYW1zLT5mcmVxdWVuY3kgPj4gMjQpICYgMHhmZjsKIAljLT5vcGVyYW5kWzVdID0gKHBhcmFtcy0+ZnJlcXVlbmN5ID4+IDE2KSAmIDB4ZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlYTU3NjQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCmluZGV4IDRkMzUzMDguLjM5MzYyMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVhNTc2NC5jCkBAIC0yOTgsNyArMjk4LDggQEAKIAogCXN0cmxjcHkodi0+ZHJpdmVyLCBkZXYtPmRldi5kcml2ZXItPm5hbWUsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsIGRldi0+bmFtZSwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzbnByaW50Zih2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSwgIkkyQzolcyIsIGRldi0+ZGV2LmJ1c19pZCk7CisJc25wcmludGYodi0+YnVzX2luZm8sIHNpemVvZih2LT5idXNfaW5mbyksCisJCSAiSTJDOiVzIiwgZGV2X25hbWUoJmRldi0+ZGV2KSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CiAJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWFsc2EuYwppbmRleCA2NmM3NTVjLi5jZTk4ZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtYWxzYS5jCkBAIC04MDMsOSArODAzLDEwIEBACiAJCXJldHVybiAoLUVOT0VOVCk7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZub10sIGlkW2Rldm5vXSwgVEhJU19NT0RVTEUsIHNpemVvZihzbmRfY3g4OF9jYXJkX3QpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAoLUVOT01FTSk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm5vXSwgaWRbZGV2bm9dLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzbmRfY3g4OF9jYXJkX3QpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY3g4OF9kZXZfZnJlZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwppbmRleCAyYWM3MzhmLi5mMTMyZTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYwpAQCAtNDQ4LDkgKzQ0OCwxMCBAQAogCXByaW50ayhLRVJOX0lORk8gImVtMjh4eC1hdWRpby5jOiBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzICIKIAkJCSAiUmVjaGJlcmdlclxuIik7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldm5yXSwgIkVtMjh4eCBBdWRpbyIsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2bnJdLCAiRW0yOHh4IEF1ZGlvIiwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzcGluX2xvY2tfaW5pdCgmYWRldi0+c2xvY2spOwogCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsICJFbTI4eHggQXVkaW8iLCAwLCAwLCAxLCAmcGNtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYwppbmRleCA3M2ViNjU2Li44MDVmYWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCkBAIC04MCwxNyArODAsMTcgQEAKIHsKIAlpbnQgcnZhbCA9IDA7CiAKLQljYW0tPmZjayA9IGNsa19nZXQoY2FtLT5kZXYsICJjYW1fZmNrIik7CisJY2FtLT5mY2sgPSBjbGtfZ2V0KGNhbS0+ZGV2LCAiZmNrIik7CiAJaWYgKElTX0VSUihjYW0tPmZjaykpIHsKLQkJZGV2X2VycihjYW0tPmRldiwgImNhbid0IGdldCBjYW1fZmNrIik7CisJCWRldl9lcnIoY2FtLT5kZXYsICJjYW4ndCBnZXQgY2FtZXJhIGZjayIpOwogCQlydmFsID0gUFRSX0VSUihjYW0tPmZjayk7CiAJCW9tYXAyNHh4Y2FtX2Nsb2NrX3B1dChjYW0pOwogCQlyZXR1cm4gcnZhbDsKIAl9CiAKLQljYW0tPmljayA9IGNsa19nZXQoY2FtLT5kZXYsICJjYW1faWNrIik7CisJY2FtLT5pY2sgPSBjbGtfZ2V0KGNhbS0+ZGV2LCAiaWNrIik7CiAJaWYgKElTX0VSUihjYW0tPmljaykpIHsKLQkJZGV2X2VycihjYW0tPmRldiwgImNhbid0IGdldCBjYW1faWNrIik7CisJCWRldl9lcnIoY2FtLT5kZXYsICJjYW4ndCBnZXQgY2FtZXJhIGljayIpOwogCQlydmFsID0gUFRSX0VSUihjYW0tPmljayk7CiAJCW9tYXAyNHh4Y2FtX2Nsb2NrX3B1dChjYW0pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHhhX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKaW5kZXggMDdjMzM0Zi4uMGM0Y2U1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvY2FtZXJhLmg+CiAKICNkZWZpbmUgUFhBX0NBTV9WRVJTSU9OX0NPREUgS0VSTkVMX1ZFUlNJT04oMCwgMCwgNSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwppbmRleCBjNzUwZDNkLi44YjBiNjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCkBAIC05OTAsMTAgKzk5MCwxMCBAQAogCWlmICghZW5hYmxlW2Rldm51bV0pCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZudW1dLCBpZFtkZXZudW1dLCBUSElTX01PRFVMRSwgc2l6ZW9mKHNuZF9jYXJkX3NhYTcxMzRfdCkpOwotCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldm51bV0sIGlkW2Rldm51bV0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHNuZF9jYXJkX3NhYTcxMzRfdCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJTQUE3MTM0Iik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwppbmRleCBjZjlkNGM3Li44YTRiNzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCkBAIC0zNCw3ICszNCw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnY0bDJfZGV2LT5sb2NrKTsKIAl2NGwyX2Rldi0+ZGV2ID0gZGV2OwogCXNucHJpbnRmKHY0bDJfZGV2LT5uYW1lLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpLCAiJXMgJXMiLAotCQkJZGV2LT5kcml2ZXItPm5hbWUsIGRldi0+YnVzX2lkKTsKKwkJCWRldi0+ZHJpdmVyLT5uYW1lLCBkZXZfbmFtZShkZXYpKTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCB2NGwyX2Rldik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tY3AtY29yZS5jIGIvZHJpdmVycy9tZmQvbWNwLWNvcmUuYwppbmRleCA2MDYzZGMyLi41NzI3MWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9tY3AtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL21jcC1jb3JlLmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCiBpbnQgbWNwX2hvc3RfcmVnaXN0ZXIoc3RydWN0IG1jcCAqbWNwKQogewotCXN0cmNweShtY3AtPmF0dGFjaGVkX2RldmljZS5idXNfaWQsICJtY3AwIik7CisJZGV2X3NldF9uYW1lKCZtY3AtPmF0dGFjaGVkX2RldmljZSwgIm1jcDAiKTsKIAlyZXR1cm4gZGV2aWNlX3JlZ2lzdGVyKCZtY3AtPmF0dGFjaGVkX2RldmljZSk7CiB9CiBFWFBPUlRfU1lNQk9MKG1jcF9ob3N0X3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKaW5kZXggNjg2MGM5Mi4uZmVhOTA4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdWNiMXgwMC1jb3JlLmMKQEAgLTQ5Miw3ICs0OTIsNyBAQAogCiAJdWNiLT5kZXYuY2xhc3MgPSAmdWNiMXgwMF9jbGFzczsKIAl1Y2ItPmRldi5wYXJlbnQgPSAmbWNwLT5hdHRhY2hlZF9kZXZpY2U7Ci0Jc3RybGNweSh1Y2ItPmRldi5idXNfaWQsICJ1Y2IxeDAwIiwgc2l6ZW9mKHVjYi0+ZGV2LmJ1c19pZCkpOworCWRldl9zZXRfbmFtZSgmdWNiLT5kZXYsICJ1Y2IxeDAwIik7CiAKIAlzcGluX2xvY2tfaW5pdCgmdWNiLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmdWNiLT5pb19sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jCmluZGV4IDJiMTE5NmUuLmU5NGU5MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYwpAQCAtMTYwMyw3ICsxNjAzLDcgQEAKIAogCXRhc2tsZXRfaW5pdCgmaG9zdC0+dGFza2xldCwgYXRtY2lfdGFza2xldF9mdW5jLCAodW5zaWduZWQgbG9uZylob3N0KTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRtY2lfaW50ZXJydXB0LCAwLCBwZGV2LT5kZXYuYnVzX2lkLCBob3N0KTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIGF0bWNpX2ludGVycnVwdCwgMCwgZGV2X25hbWUoJnBkZXYtPmRldiksIGhvc3QpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3JlcXVlc3RfaXJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jCmluZGV4IDI5MDliYmM4Li5hNjYzNDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAJbW9kX3RpbWVyKCZob3N0LT50aW1lciwgamlmZmllcyArIEhaKTsKIH0KIAotc3RhdGljIGludCBtbWNpX3Byb2JlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2LCB2b2lkICppZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1tY2lfcHJvYmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIHZvaWQgKmlkKQogewogCXN0cnVjdCBtbWNfcGxhdGZvcm1fZGF0YSAqcGxhdCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG1tY2lfaG9zdCAqaG9zdDsKQEAgLTYzMyw3ICs2MzMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbW1jaV9yZW1vdmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtbWNpX3JlbW92ZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGFtYmFfZ2V0X2RydmRhdGEoZGV2KTsKIApAQCAtNzMwLDcgKzczMCw3IEBACiAJCS5uYW1lCT0gRFJJVkVSX05BTUUsCiAJfSwKIAkucHJvYmUJCT0gbW1jaV9wcm9iZSwKLQkucmVtb3ZlCQk9IG1tY2lfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobW1jaV9yZW1vdmUpLAogCS5zdXNwZW5kCT0gbW1jaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gbW1jaV9yZXN1bWUsCiAJLmlkX3RhYmxlCT0gbW1jaV9pZHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYwppbmRleCBkZGEwYmU0Li5iNGE2MTVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKQEAgLTQyLDcgKzQyLDcgQEAKICNkZWZpbmUgSEFTX0RNQQogI2VuZGlmCiAKLSNkZWZpbmUgRFJJVkVSX05BTUUgImlteC1tbWMiCisjZGVmaW5lIERSSVZFUl9OQU1FICJteGMtbW1jIgogCiAjZGVmaW5lIE1NQ19SRUdfU1RSX1NUUF9DTEsJCTB4MDAKICNkZWZpbmUgTU1DX1JFR19TVEFUVVMJCQkweDA0CkBAIC03MDcsNyArNzA3LDcgQEAKIAlob3N0LT5yZXMgPSByOwogCWhvc3QtPmlycSA9IGlycTsKIAotCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInNkaGNfY2xrIik7CisJaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKGhvc3QtPmNsaykpIHsKIAkJcmV0ID0gUFRSX0VSUihob3N0LT5jbGspOwogCQlnb3RvIG91dF9pb3VubWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vZl9tbWNfc3BpLmMgYi9kcml2ZXJzL21tYy9ob3N0L29mX21tY19zcGkuYwppbmRleCBmYjI5MjFmLi4wYzQ0ZDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29mX21tY19zcGkuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29mX21tY19zcGkuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJCWlmICghZ3Bpb19pc192YWxpZChvbXMtPmdwaW9zW2ldKSkKIAkJCWNvbnRpbnVlOwogCi0JCXJldCA9IGdwaW9fcmVxdWVzdChvbXMtPmdwaW9zW2ldLCBkZXYtPmJ1c19pZCk7CisJCXJldCA9IGdwaW9fcmVxdWVzdChvbXMtPmdwaW9zW2ldLCBkZXZfbmFtZShkZXYpKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCW9tcy0+Z3Bpb3NbaV0gPSAtRUlOVkFMOwogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXAuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCmluZGV4IDY3ZDdiN2YuLjU1NzA4NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jCkBAIC0xNDYwLDE4ICsxNDYwLDEyIEBACiAJaWYgKCFob3N0LT52aXJ0X2Jhc2UpCiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAKLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKLQkJaG9zdC0+aWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1tY19pY2siKTsKLQkJaWYgKElTX0VSUihob3N0LT5pY2xrKSkKLQkJCWdvdG8gZXJyX2ZyZWVfbW1jX2hvc3Q7Ci0JCWNsa19lbmFibGUoaG9zdC0+aWNsayk7Ci0JfQorCWhvc3QtPmljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKKwlpZiAoSVNfRVJSKGhvc3QtPmljbGspKQorCQlnb3RvIGVycl9mcmVlX21tY19ob3N0OworCWNsa19lbmFibGUoaG9zdC0+aWNsayk7CiAKLQlpZiAoIWNwdV9pc19vbWFwMjR4eCgpKQotCQlob3N0LT5mY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jX2NrIik7Ci0JZWxzZQotCQlob3N0LT5mY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jX2ZjayIpOwotCisJaG9zdC0+ZmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOwogCWlmIChJU19FUlIoaG9zdC0+ZmNsaykpIHsKIAkJcmV0ID0gUFRSX0VSUihob3N0LT5mY2xrKTsKIAkJZ290byBlcnJfZnJlZV9pY2xrOwpAQCAtMTUzNiwxMCArMTUzMCwxMCBAQAogCWlmIChob3N0LT5wZGF0YS0+Y2xlYW51cCkKIAkJaG9zdC0+cGRhdGEtPmNsZWFudXAoJnBkZXYtPmRldik7CiAKLQlpZiAoaG9zdC0+aWNsayAmJiAhSVNfRVJSKGhvc3QtPmljbGspKQotCQljbGtfcHV0KGhvc3QtPmljbGspOwotCWlmIChob3N0LT5mY2xrICYmICFJU19FUlIoaG9zdC0+ZmNsaykpCi0JCWNsa19wdXQoaG9zdC0+ZmNsayk7CisJbW1jX29tYXBfZmNsa19lbmFibGUoaG9zdCwgMCk7CisJY2xrX3B1dChob3N0LT5mY2xrKTsKKwljbGtfZGlzYWJsZShob3N0LT5pY2xrKTsKKwljbGtfcHV0KGhvc3QtPmljbGspOwogCiAJaW91bm1hcChob3N0LT52aXJ0X2Jhc2UpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihwZGV2LT5yZXNvdXJjZVswXS5zdGFydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKaW5kZXggYTYzMWM4MS4uMzkxNmE1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMKQEAgLTk1NiwxMyArOTU2LDEzIEBACiAKIAlzZW1hX2luaXQoJmhvc3QtPnNlbSwgMSk7CiAKLQlob3N0LT5pY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibW1jaHNfaWNrIik7CisJaG9zdC0+aWNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOwogCWlmIChJU19FUlIoaG9zdC0+aWNsaykpIHsKIAkJcmV0ID0gUFRSX0VSUihob3N0LT5pY2xrKTsKIAkJaG9zdC0+aWNsayA9IE5VTEw7CiAJCWdvdG8gZXJyMTsKIAl9Ci0JaG9zdC0+ZmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1tY2hzX2ZjayIpOworCWhvc3QtPmZjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKIAlpZiAoSVNfRVJSKGhvc3QtPmZjbGspKSB7CiAJCXJldCA9IFBUUl9FUlIoaG9zdC0+ZmNsayk7CiAJCWhvc3QtPmZjbGsgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvcHhhbWNpLmMKaW5kZXggOTcwMmFkMy4uNDMwMDk1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9weGFtY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3B4YW1jaS5jCkBAIC0zMCw5ICszMCw4IEBACiAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIAotI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CiAKICNpbmNsdWRlICJweGFtY2kuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCAwNDNkNTBmLi43MjlmODk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC01NTEsNSArNTUxLDE1IEBACiAKIAkgIFRoaXMgc2VsZWN0aW9uIGF1dG9tYXRpY2FsbHkgc2VsZWN0cyB0aGUgbWFwX3JhbSBkcml2ZXIuCiAKLWVuZG1lbnUKK2NvbmZpZyBNVERfVk1VCisJdHJpc3RhdGUgIk1hcCBkcml2ZXIgZm9yIERyZWFtY2FzdCBWTVUiCisJZGVwZW5kcyBvbiBNQVBMRQorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGVuYWJsZXMgYWNjZXNzIHRvIHRoZSBEcmVhbWNhc3QgVmlzdWFsIE1lbW9yeSBVbml0IChWTVUpLgogCisJICBNb3N0IERyZWFtY2FzdCB1c2VycyB3aWxsIHdhbnQgdG8gc2F5IFkgaGVyZS4KKworCSAgVG8gYnVpbGQgdGhpcyBhcyBhIG1vZHVsZSBzZWxlY3QgTSBoZXJlLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkCisJICB2bXUtZmxhc2guCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IDZkOWJhMzUuLjI2YjI4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNjEsMyArNjEsNCBAQAogb2JqLSQoQ09ORklHX01URF9PTUFQX05PUikJKz0gb21hcF9ub3Iubwogb2JqLSQoQ09ORklHX01URF9JTlRFTF9WUl9OT1IpCSs9IGludGVsX3ZyX25vci5vCiBvYmotJChDT05GSUdfTVREX0JGSU5fQVNZTkMpCSs9IGJmaW4tYXN5bmMtZmxhc2gubworb2JqLSQoQ09ORklHX01URF9WTVUpCQkrPSB2bXUtZmxhc2gubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9pbnRlZ3JhdG9yLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYwppbmRleCBkMmVjMjYyLi5jOTY4MWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2ludGVncmF0b3ItZmxhc2guYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KQEAgLTM4LDcgKzM5LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogI2lmZGVmIENPTkZJR19BUkNIX1A3MjBUCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9weGEyeHgtZmxhc2guYwppbmRleCA3NzExMzljLi5lOTAyNmNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3B4YTJ4eC1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcHhhMnh4LWZsYXNoLmMKQEAgLTQxLDkgKzQxLDggQEAKIHN0YXRpYyBjb25zdCBjaGFyICpwcm9iZXNbXSA9IHsgIlJlZEJvb3QiLCAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAKIAotc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2ZsYXNoX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqZmxhc2ggPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm87CiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwpAQCAtMTE0LDE1ICsxMTMsMTUgQEAKIAkJYWRkX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgcHhhMnh4X2ZsYXNoX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZXhpdCBweGEyeHhfZmxhc2hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCWlmIChpbmZvLT5ucl9wYXJ0cykKQEAgLTE0MSw5ICsxNDAsOSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHB4YTJ4eF9mbGFzaF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBweGEyeHhfZmxhc2hfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgcHhhMnh4X2ZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByZXQgPSAwOwogCiAJaWYgKGluZm8tPm10ZCAmJiBpbmZvLT5tdGQtPnN1c3BlbmQpCkBAIC0xNTEsMTcgKzE1MCwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2ZsYXNoX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHB4YTJ4eF9mbGFzaF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBweGEyeHhfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKIAlpZiAoaW5mby0+bXRkICYmIGluZm8tPm10ZC0+cmVzdW1lKQogCQlpbmZvLT5tdGQtPnJlc3VtZShpbmZvLT5tdGQpOwogCXJldHVybiAwOwogfQotc3RhdGljIHZvaWQgcHhhMnh4X2ZsYXNoX3NodXRkb3duKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHB4YTJ4eF9mbGFzaF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHB4YTJ4eF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAogCWlmIChpbmZvICYmIGluZm8tPm10ZC0+c3VzcGVuZChpbmZvLT5tdGQpID09IDApCiAJCWluZm8tPm10ZC0+cmVzdW1lKGluZm8tPm10ZCk7CkBAIC0xNzIsMTEgKzE3MSwxMyBAQAogI2RlZmluZSBweGEyeHhfZmxhc2hfc2h1dGRvd24gTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBweGEyeHhfZmxhc2hfZHJpdmVyID0gewotCS5uYW1lCQk9ICJweGEyeHgtZmxhc2giLAotCS5idXMJCT0gJnBsYXRmb3JtX2J1c190eXBlLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X2ZsYXNoX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAicHhhMnh4LWZsYXNoIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IHB4YTJ4eF9mbGFzaF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKHB4YTJ4eF9mbGFzaF9yZW1vdmUpLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocHhhMnh4X2ZsYXNoX3JlbW92ZSksCiAJLnN1c3BlbmQJPSBweGEyeHhfZmxhc2hfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YTJ4eF9mbGFzaF9yZXN1bWUsCiAJLnNodXRkb3duCT0gcHhhMnh4X2ZsYXNoX3NodXRkb3duLApAQCAtMTg0LDEyICsxODUsMTIgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9weGEyeHhfZmxhc2godm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfZmxhc2hfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZweGEyeHhfZmxhc2hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfcHhhMnh4X2ZsYXNoKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9mbGFzaF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZweGEyeHhfZmxhc2hfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9weGEyeHhfZmxhc2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYyBiL2RyaXZlcnMvbXRkL21hcHMvc2ExMTAwLWZsYXNoLmMKaW5kZXggNmY2YTBmNi4uOGY1N2I2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9zYTExMDAtZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3NhMTEwMC1mbGFzaC5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgpAQCAtMTksNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9jb25jYXQuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3ZtdS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy92bXUtZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjczMjk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbWFwcy92bXUtZmxhc2guYwpAQCAtMCwwICsxLDgzMiBAQAorLyogdm11LWZsYXNoLmMKKyAqIERyaXZlciBmb3IgU0VHQSBEcmVhbWNhc3QgVmlzdWFsIE1lbW9yeSBVbml0CisgKgorICogQ29weXJpZ2h0IChjKSBBZHJpYW4gTWNNZW5hbWluIDIwMDIgLSAyMDA5CisgKiBDb3B5cmlnaHQgKGMpIFBhdWwgTXVuZHQgMjAwMQorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHZlcnNpb24gMiBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+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+Y2FuX3VubG9hZCA9IHZtdV9jYW5fdW5sb2FkOworCW1kZXYtPmZpbGVlcnJfaGFuZGxlciA9IHZtdV9maWxlX2Vycm9yOworCW1kZXYtPmRyaXZlciA9IG1kcnY7CisKKwllcnJvciA9IHZtdV9jb25uZWN0KG1kZXYpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHJlbW92ZV9tYXBsZV92bXUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYgPSB0b19tYXBsZV9kZXYoZGV2KTsKKworCXZtdV9kaXNjb25uZWN0KG1kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciB2bXVfZmxhc2hfZHJpdmVyID0geworCS5mdW5jdGlvbiA9CU1BUExFX0ZVTkNfTUVNQ0FSRCwKKwkuZHJ2ID0geworCQkubmFtZSA9CQkiRHJlYW1jYXN0X3Zpc3VhbF9tZW1vcnkiLAorCQkucHJvYmUgPQlwcm9iZV9tYXBsZV92bXUsCisJCS5yZW1vdmUgPSAJX19kZXZleGl0X3AocmVtb3ZlX21hcGxlX3ZtdSksCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZtdV9mbGFzaF9tYXBfaW5pdCh2b2lkKQoreworCXJldHVybiBtYXBsZV9kcml2ZXJfcmVnaXN0ZXIoJnZtdV9mbGFzaF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdm11X2ZsYXNoX21hcF9leGl0KHZvaWQpCit7CisJbWFwbGVfZHJpdmVyX3VucmVnaXN0ZXIoJnZtdV9mbGFzaF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh2bXVfZmxhc2hfbWFwX2luaXQpOworbW9kdWxlX2V4aXQodm11X2ZsYXNoX21hcF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQWRyaWFuIE1jTWVuYW1pbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGbGFzaCBtYXBwaW5nIGZvciBTZWdhIERyZWFtY2FzdCB2aXN1YWwgbWVtb3J5Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRzdXBlci5jIGIvZHJpdmVycy9tdGQvbXRkc3VwZXIuYwppbmRleCAwMGQ0NmUxLi45MjI4NWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRzdXBlci5jCisrKyBiL2RyaXZlcnMvbXRkL210ZHN1cGVyLmMKQEAgLTgxLDEzICs4MSwxNiBAQAogCiAJLyogZ28gKi8KIAlzYi0+c19mbGFncyB8PSBNU19BQ1RJVkU7Ci0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCisJcmV0dXJuIDA7CiAKIAkvKiBuZXcgbW91bnRwb2ludCBmb3IgYW4gYWxyZWFkeSBtb3VudGVkIHN1cGVyYmxvY2sgKi8KIGFscmVhZHlfbW91bnRlZDoKIAlERUJVRygxLCAiTVREU0I6IERldmljZSAlZCAoXCIlc1wiKSBpcyBhbHJlYWR5IG1vdW50ZWRcbiIsCiAJICAgICAgbXRkLT5pbmRleCwgbXRkLT5uYW1lKTsKLQlyZXQgPSBzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlyZXQgPSAwOwogCWdvdG8gb3V0X3B1dDsKIAogb3V0X2Vycm9yOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9jbXgyNzBfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9jbXgyNzBfbmFuZC5jCmluZGV4IGZhMTI5YzAuLjEwMDgxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvY214MjcwX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2NteDI3MF9uYW5kLmMKQEAgLTI2LDggKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogCiAjZGVmaW5lIEdQSU9fTkFORF9DUwkoMTEpCiAjZGVmaW5lIEdQSU9fTkFORF9SQgkoODkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2V4Y2l0ZV9uYW5kZmxhc2guYyBiL2RyaXZlcnMvbXRkL25hbmQvZXhjaXRlX25hbmRmbGFzaC5jCmluZGV4IGNlZDE0YjUuLjcyNDQ2ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZXhjaXRlX25hbmRmbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZXhjaXRlX25hbmRmbGFzaC5jCkBAIC0xMjgsMTEgKzEyOCwxMSBAQAogICogVGhlIGJpbmRpbmcgdG8gdGhlIG10ZCBhbmQgYWxsIGFsbG9jYXRlZAogICogcmVzb3VyY2VzIGFyZSByZWxlYXNlZC4KICAqLwotc3RhdGljIGludCBfX2V4aXQgZXhjaXRlX25hbmRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IGV4Y2l0ZV9uYW5kX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKiBjb25zdCB0aGlzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGV4Y2l0ZV9uYW5kX2RydmRhdGEgKiBjb25zdCB0aGlzID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlpZiAodW5saWtlbHkoIXRoaXMpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbGxlZCAlcyB3aXRob3V0IHByaXZhdGUgZGF0YSEhIiwKQEAgLTE1OSw5ICsxNTksOCBAQAogICogaXQgY2FuIGFsbG9jYXRlIGFsbCBuZWNlc3NhcnkgcmVzb3VyY2VzIHRoZW4gY2FsbHMgdGhlCiAgKiBuYW5kIGxheWVyIHRvIGxvb2sgZm9yIGRldmljZXMuCiAqLwotc3RhdGljIGludCBfX2luaXQgZXhjaXRlX25hbmRfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgZXhjaXRlX25hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICogY29uc3QgcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBleGNpdGVfbmFuZF9kcnZkYXRhICpkcnZkYXRhOwkvKiBwcml2YXRlIGRyaXZlciBkYXRhICovCiAJc3RydWN0IG5hbmRfY2hpcCAqYm9hcmRfY2hpcDsJLyogcHJpdmF0ZSBmbGFzaCBjaGlwIGRhdGEgKi8KIAlzdHJ1Y3QgbXRkX2luZm8gKmJvYXJkX210ZDsJLyogbXRkIGluZm8gZm9yIHRoaXMgYm9hcmQgKi8KQEAgLTE3NSw3ICsxNzQsNyBAQAogCX0KIAogCS8qIGJpbmQgcHJpdmF0ZSBkYXRhIGludG8gZHJpdmVyICovCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgZHJ2ZGF0YSk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHJ2ZGF0YSk7CiAKIAkvKiBhbGxvY2F0ZSBhbmQgbWFwIHRoZSByZXNvdXJjZSAqLwogCWRydmRhdGEtPnJlZ3MgPQpAQCAtMjE5LDIzICsyMTgsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGV4Y2l0ZV9uYW5kX2RyaXZlciA9IHsKLQkubmFtZSA9ICJleGNpdGVfbmFuZCIsCi0JLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGV4Y2l0ZV9uYW5kX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJleGNpdGVfbmFuZCIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZSA9IGV4Y2l0ZV9uYW5kX3Byb2JlLAotCS5yZW1vdmUgPSBfX2V4aXRfcChleGNpdGVfbmFuZF9yZW1vdmUpCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGV4Y2l0ZV9uYW5kX3JlbW92ZSkKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGV4Y2l0ZV9uYW5kX2luaXQodm9pZCkKIHsKIAlwcl9pbmZvKCJCYXNsZXIgZVhjaXRlIG5hbmQgZmxhc2ggZHJpdmVyIFZlcnNpb24gIgogCQlFWENJVEVfTkFOREZMQVNIX1ZFUlNJT04gIlxuIik7Ci0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZXhjaXRlX25hbmRfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZleGNpdGVfbmFuZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhjaXRlX25hbmRfZXhpdCh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZleGNpdGVfbmFuZF9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZleGNpdGVfbmFuZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChleGNpdGVfbmFuZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYyBiL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYwppbmRleCAyMWZkNGYxLi5iYWQwNDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCkBAIC04ODAsNyArODgwLDcgQEAKIAl0aGlzLT5yZWFkX2J1ZiA9IG14Y19uYW5kX3JlYWRfYnVmOwogCXRoaXMtPnZlcmlmeV9idWYgPSBteGNfbmFuZF92ZXJpZnlfYnVmOwogCi0JaG9zdC0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibmZjX2NsayIpOworCWhvc3QtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm5mYyIpOwogCWlmIChJU19FUlIoaG9zdC0+Y2xrKSkKIAkJZ290byBlY2xrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25kZmMuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCmluZGV4IDU4MmNmODAuLjg5YmY4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAluZGZjLT5tdGQubmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXMuJXMiLAotCQkJCSAgIG5kZmMtPm9mZGV2LT5kZXYuYnVzX2lkLCBmbGFzaF9ucC0+bmFtZSk7CisJCQlkZXZfbmFtZSgmbmRmYy0+b2ZkZXYtPmRldiksIGZsYXNoX25wLT5uYW1lKTsKIAlpZiAoIW5kZmMtPm10ZC5uYW1lKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCmluZGV4IGNjNTVjYmMuLjYxYjY5Y2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3B4YTN4eF9uYW5kLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9weGEzeHhfbmFuZC5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3B4YTN4eF9uYW5kLmg+CiAKICNkZWZpbmUJQ0hJUF9ERUxBWV9USU1FT1VUCSgyICogSFovMTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL2dlbmVyaWMuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvZ2VuZXJpYy5jCmluZGV4IDViNjllNzcuLjNhNDk2YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL29uZW5hbmQvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvZ2VuZXJpYy5jCkBAIC0zNiwxMCArMzYsOSBAQAogCXN0cnVjdCBvbmVuYW5kX2NoaXAJb25lbmFuZDsKIH07CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGdlbmVyaWNfb25lbmFuZF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZW5lcmljX29uZW5hbmRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9pbmZvICppbmZvOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlOwogCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CkBAIC00OSw3ICs0OCw3IEBACiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIGRldi0+ZHJpdmVyLT5uYW1lKSkgeworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUsIHBkZXYtPmRldi5kcml2ZXItPm5hbWUpKSB7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBvdXRfZnJlZV9pbmZvOwogCX0KQEAgLTgyLDcgKzgxLDcgQEAKICNlbmRpZgogCQllcnIgPSBhZGRfbXRkX2RldmljZSgmaW5mby0+bXRkKTsKIAotCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpbmZvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIAogCXJldHVybiAwOwogCkBAIC05NiwxNCArOTUsMTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBnZW5lcmljX29uZW5hbmRfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGdlbmVyaWNfb25lbmFuZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7Ci0Jc3RydWN0IG9uZW5hbmRfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3Qgb25lbmFuZF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZTsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwogCi0JZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJaWYgKGluZm8pIHsKIAkJaWYgKGluZm8tPnBhcnRzKQpAQCAtMTIwLDkgKzExOCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZ2VuZXJpY19vbmVuYW5kX2RyaXZlciA9IHsKLQkubmFtZQkJPSBEUklWRVJfTkFNRSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGdlbmVyaWNfb25lbmFuZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gRFJJVkVSX05BTUUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSBnZW5lcmljX29uZW5hbmRfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChnZW5lcmljX29uZW5hbmRfcmVtb3ZlKSwKIH07CkBAIC0xMzEsMTIgKzEzMSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnZW5lcmljX29uZW5hbmRfaW5pdCh2b2lkKQogewotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmdlbmVyaWNfb25lbmFuZF9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmdlbmVyaWNfb25lbmFuZF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2VuZXJpY19vbmVuYW5kX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZ2VuZXJpY19vbmVuYW5kX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmdlbmVyaWNfb25lbmFuZF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChnZW5lcmljX29uZW5hbmRfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwMS5jIGIvZHJpdmVycy9uZXQvM2M1MDEuYwppbmRleCAzZDEzMThhLi4xYzUzNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwMS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTAxLmMKQEAgLTE5Nyw2ICsxOTcsMTcgQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVsX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGVsX29wZW4sCisJLm5kb19zdG9wCQk9IGVsMV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gZWxfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gZWxfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoqCiAgKgllbDFfcHJvYmUxOgogICoJQGRldjogVGhlIGRldmljZSBzdHJ1Y3R1cmUgdG8gdXNlCkBAIC0zMDUsMTIgKzMxNiw4IEBACiAJICoJVGhlIEVMMS1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgogCSAqLwogCi0JZGV2LT5vcGVuID0gJmVsX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZWxfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSAmZWxfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmZWxfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7Ci0JZGV2LT5zdG9wID0gJmVsMV9jbG9zZTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwMy5jIGIvZHJpdmVycy9uZXQvM2M1MDMuYwppbmRleCA1YjkxYTg1Li40ZjA4YmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwMy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTAzLmMKQEAgLTM1Myw5ICszNTMsNiBAQAogCiAgICAgZGV2LT5uZXRkZXZfb3BzID0gJmVsMl9uZXRkZXZfb3BzOwogICAgIGRldi0+ZXRodG9vbF9vcHMgPSAmbmV0ZGV2X2V0aHRvb2xfb3BzOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0gICAgZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaXBfcG9sbDsKLSNlbmRpZgogCiAgICAgcmV0dmFsID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAgICAgaWYgKHJldHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA1LmMgYi9kcml2ZXJzL25ldC8zYzUwNS5jCmluZGV4IGE4MTA3ZjkuLjJkZTFjOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA1LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDUuYwpAQCAtMTM1NCw2ICsxMzU0LDE3IEBACiAJcmV0dXJuIDA7CQkvKiBCZWNhdXNlIG9mIHRoaXMsIHRoZSBsYXllciBhYm92ZSB3aWxsIHJldHVybiAtRU5PREVWICovCiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWxwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGVscF9vcGVuLAorCS5uZG9fc3RvcAkJPSBlbHBfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMgCQk9IGVscF9nZXRfc3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGVscF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dCAJPSBlbHBfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGVscF9zZXRfbWNfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE1NTgsMTMgKzE1NjksOCBAQAogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhZGFwdGVyIGNvbmZpZ3VyYXRpb24gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCX0KIAotCWRldi0+b3BlbiA9IGVscF9vcGVuOwkJCQkvKiBsb2NhbCAqLwotCWRldi0+c3RvcCA9IGVscF9jbG9zZTsJCQkJLyogbG9jYWwgKi8KLQlkZXYtPmdldF9zdGF0cyA9IGVscF9nZXRfc3RhdHM7CQkJLyogbG9jYWwgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGVscF9zdGFydF94bWl0OwkJLyogbG9jYWwgKi8KLQlkZXYtPnR4X3RpbWVvdXQgPSBlbHBfdGltZW91dDsJCQkvKiBsb2NhbCAqLworCWRldi0+bmV0ZGV2X29wcyA9ICZlbHBfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMTAqSFo7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBlbHBfc2V0X21jX2xpc3Q7CS8qIGxvY2FsICovCiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CQkvKiBsb2NhbCAqLwogCiAJZGV2LT5tZW1fc3RhcnQgPSBkZXYtPm1lbV9lbmQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDcuYyBiL2RyaXZlcnMvbmV0LzNjNTA3LmMKaW5kZXggNDIzZTY1ZC4uZmJiYWY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDcuYworKysgYi9kcml2ZXJzL25ldC8zYzUwNy5jCkBAIC0zNTIsNiArMzUyLDE2IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBlbDE2X29wZW4sCisJLm5kb19zdG9wCQk9IGVsMTZfY2xvc2UsCisJLm5kb19zdGFydF94bWl0IAk9IGVsMTZfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0IAk9IGVsMTZfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZWwxNl9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcikKIHsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBpbml0X0lEX2RvbmUsIHZlcnNpb25fcHJpbnRlZDsKQEAgLTQ0OSwxMCArNDU5LDcgQEAKIAkJZ290byBvdXQxOwogCX0KIAotIAlkZXYtPm9wZW4gPSBlbDE2X29wZW47Ci0gCWRldi0+c3RvcCA9IGVsMTZfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBlbDE2X3NlbmRfcGFja2V0OwotCWRldi0+dHhfdGltZW91dCA9IGVsMTZfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsKICAJZGV2LT5mbGFncyAmPSB+SUZGX01VTFRJQ0FTVDsJLyogTXVsdGljYXN0IGRvZXNuJ3Qgd29yayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDkuYyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKaW5kZXggOGM2OTQyMS4uZmJiMzcxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDkuYworKysgYi9kcml2ZXJzL25ldC8zYzUwOS5jCkBAIC01MzcsNiArNTM3LDIxIEBACiBzdGF0aWMgaW50IG1jYV9yZWdpc3RlcmVkOwogI2VuZGlmIC8qIENPTkZJR19NQ0EgKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZWwzX29wZW4sCisJLm5kb19zdG9wCSAJPSBlbDNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0IAk9IGVsM19zdGFydF94bWl0LAorCS5uZG9fZ2V0X3N0YXRzIAkJPSBlbDNfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dCAJPSBlbDNfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBlbDNfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBlbDNfY29tbW9uX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTU1MywxNiArNTY4LDggQEAKIAl9CiAKIAkvKiBUaGUgRUwzLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5vcGVuID0gJmVsM19vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsM19zdGFydF94bWl0OwotCWRldi0+c3RvcCA9ICZlbDNfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmZWwzX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gZWwzX3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJm5ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGVsM19wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmZXRodG9vbF9vcHMpOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUxNS5jIGIvZHJpdmVycy9uZXQvM2M1MTUuYwppbmRleCAzOWFjMTIyLi4xNjdiZjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUxNS5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKQEAgLTU2Myw2ICs1NjMsMjAgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGNvcmtzY3Jld19vcGVuLAorCS5uZG9fc3RvcAkJPSBjb3Jrc2NyZXdfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGNvcmtzY3Jld19zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBjb3Jrc2NyZXdfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSBjb3Jrc2NyZXdfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKKwogc3RhdGljIGludCBjb3Jrc2NyZXdfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkciwKIAkJCSAgICBzdHJ1Y3QgcG5wX2RldiAqaWRldiwgaW50IGNhcmRfbnVtYmVyKQogewpAQCAtNjgxLDEzICs2OTUsOCBAQAogCXZwLT5mdWxsX2J1c19tYXN0ZXJfcnggPSAodnAtPmNhcGFiaWxpdGllcyAmIDB4MjApID8gMSA6IDA7CiAKIAkvKiBUaGUgM2M1MXgtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPm9wZW4gPSAmY29ya3NjcmV3X29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmY29ya3NjcmV3X3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJmNvcmtzY3Jld190aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZuZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSAoNDAwICogSFopIC8gMTAwMDsKLQlkZXYtPnN0b3AgPSAmY29ya3NjcmV3X2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gJmNvcmtzY3Jld19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X3J4X21vZGU7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAKIAlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyMy5jIGIvZHJpdmVycy9uZXQvM2M1MjMuYwppbmRleCBmZjQxZTFmLi44ZjczNGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyMy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKQEAgLTQwMyw2ICs0MDMsMjAgQEAKIAlyZXR1cm4gbGVuOwogfQkJCQkvKiBlbG1jX2dldGluZm8oKSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBlbG1jX29wZW4sCisJLm5kb19zdG9wCQk9IGVsbWNfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gZWxtY19nZXRfc3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGVsbWNfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CQk9IGVsbWNfdGltZW91dCwKKyNpZmRlZiBFTE1DX01VTFRJQ0FTVAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorI2VuZGlmCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBfX2luaXQgZG9fZWxtY19wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNTQ0LDE3ICs1NTgsOCBAQAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBoYXJkd2FyZSBhZGRyZXNzICVwTVxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKIAotCWRldi0+b3BlbiA9ICZlbG1jX29wZW47Ci0JZGV2LT5zdG9wID0gJmVsbWNfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmZWxtY19nZXRfc3RhdHM7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZWxtY19zZW5kX3BhY2tldDsKLQlkZXYtPnR4X3RpbWVvdXQgPSAmZWxtY190aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZuZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWjsKLSNpZmRlZiBFTE1DX01VTFRJQ0FTVAotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKLSNlbHNlCi0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBOVUxMOwotI2VuZGlmCiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7CiAKIAkvKiBub3RlIHRoYXQgd2UgaGF2ZW4ndCBhY3R1YWxseSByZXF1ZXN0ZWQgdGhlIElSUSBmcm9tIHRoZSBrZXJuZWwuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyNy5jIGIvZHJpdmVycy9uZXQvM2M1MjcuYwppbmRleCAyZGYzYWYzLi5iNjEwNzNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyNy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKQEAgLTI4OCw2ICsyODgsMTggQEAKIAlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBtYzMyX29wZW4sCisJLm5kb19zdG9wCQk9IG1jMzJfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG1jMzJfc2VuZF9wYWNrZXQsCisJLm5kb19nZXRfc3RhdHMJCT0gbWMzMl9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBtYzMyX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbWMzMl90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioKICAqIG1jMzJfcHJvYmUxCS0JQ2hlY2sgYSBnaXZlbiBzbG90IGZvciBhIGJvYXJkIGFuZCB0ZXN0IHRoZSBjYXJkCiAgKiBAZGV2OiAgRGV2aWNlIHN0cnVjdHVyZSB0byBmaWxsIGluCkBAIC01MTgsMTIgKzUzMCw3IEBACiAJcHJpbnRrKCIlczogRmlybXdhcmUgUmV2ICVkLiAlZCBSWCBidWZmZXJzLCAlZCBUWCBidWZmZXJzLiBCYXNlIG9mIDB4JTA4WC5cbiIsCiAJCWRldi0+bmFtZSwgbHAtPmV4ZWNfYm94LT5kYXRhWzEyXSwgbHAtPnJ4X2xlbiwgbHAtPnR4X2xlbiwgbHAtPmJhc2UpOwogCi0JZGV2LT5vcGVuCQk9IG1jMzJfb3BlbjsKLQlkZXYtPnN0b3AJCT0gbWMzMl9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IG1jMzJfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gbWMzMl9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBtYzMyX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gbWMzMl90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJPSAmbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gSFoqNTsJLyogQm9hcmQgZG9lcyBhbGwgdGhlIHdvcmsgKi8KIAlkZXYtPmV0aHRvb2xfb3BzCT0gJm5ldGRldl9ldGh0b29sX29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggY2RiYmI2Mi4uYzU2Njk4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC0xMDIsOCArMTAyLDggQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLURSVl9OQU1FICI6IERvbmFsZCBCZWNrZXIgYW5kIG90aGVycy5cbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCURSVl9OQU1FICI6IERvbmFsZCBCZWNrZXIgYW5kIG90aGVycy5cbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIjNDb20gM2M1OXgvM2M5eHggZXRoZXJuZXQgZHJpdmVyICIpOwpAQCAtOTkyLDYgKzk5Miw0MiBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBib29tcmFuZ19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB2b3J0ZXhfb3BlbiwKKwkubmRvX3N0b3AJCT0gdm9ydGV4X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBib29tZXJhbmdfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdm9ydGV4X3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gdm9ydGV4X2dldF9zdGF0cywKKyNpZmRlZiBDT05GSUdfUENJCisJLm5kb19kb19pb2N0bCAJCT0gdm9ydGV4X2lvY3RsLAorI2VuZGlmCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZSwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBwb2xsX3ZvcnRleCwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2b3J0ZXhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdm9ydGV4X29wZW4sCisJLm5kb19zdG9wCQk9IHZvcnRleF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdm9ydGV4X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHZvcnRleF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IHZvcnRleF9nZXRfc3RhdHMsCisjaWZkZWYgQ09ORklHX1BDSQorCS5uZG9fZG9faW9jdGwgCQk9IHZvcnRleF9pb2N0bCwKKyNlbmRpZgorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gcG9sbF92b3J0ZXgsCisjZW5kaWYKK307CisKIC8qCiAgKiBTdGFydCB1cCB0aGUgUENJL0VJU0EgZGV2aWNlIHdoaWNoIGlzIGRlc2NyaWJlZCBieSAqZ2VuZGV2LgogICogUmV0dXJuIDAgb24gc3VjY2Vzcy4KQEAgLTEzNjYsMTggKzE0MDIsMTYgQEAKIAl9CiAKIAkvKiBUaGUgM2M1OXgtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPm9wZW4gPSB2b3J0ZXhfb3BlbjsKIAlpZiAodnAtPmZ1bGxfYnVzX21hc3Rlcl90eCkgewotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGJvb21lcmFuZ19zdGFydF94bWl0OworCQlkZXYtPm5ldGRldl9vcHMgPSAmYm9vbXJhbmdfbmV0ZGV2X29wczsKIAkJLyogQWN0dWFsbHksIGl0IHN0aWxsIHNob3VsZCB3b3JrIHdpdGggaW9tbXUuICovCiAJCWlmIChjYXJkX2lkeCA8IE1BWF9VTklUUyAmJgogCQkgICAgKChod19jaGVja3N1bXNbY2FyZF9pZHhdID09IC0xICYmICh2cC0+ZHJ2X2ZsYWdzICYgSEFTX0hXQ0tTTSkpIHx8CiAJCQkJaHdfY2hlY2tzdW1zW2NhcmRfaWR4XSA9PSAxKSkgewogCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHOwogCQl9Ci0JfSBlbHNlIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2b3J0ZXhfc3RhcnRfeG1pdDsKLQl9CisJfSBlbHNlCisJCWRldi0+bmV0ZGV2X29wcyA9ICAmdm9ydGV4X25ldGRldl9vcHM7CiAKIAlpZiAocHJpbnRfaW5mbykgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogc2NhdHRlci9nYXRoZXIgJXNhYmxlZC4gaC93IGNoZWNrc3VtcyAlc2FibGVkXG4iLApAQCAtMTM4NiwxOCArMTQyMCw5IEBACiAJCQkJKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0lQX0NTVU0pID8gImVuIjoiZGlzIik7CiAJfQogCi0JZGV2LT5zdG9wID0gdm9ydGV4X2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gdm9ydGV4X2dldF9zdGF0czsKLSNpZmRlZiBDT05GSUdfUENJCi0JZGV2LT5kb19pb2N0bCA9IHZvcnRleF9pb2N0bDsKLSNlbmRpZgogCWRldi0+ZXRodG9vbF9vcHMgPSAmdm9ydGV4X2V0aHRvb2xfb3BzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGU7Ci0JZGV2LT50eF90aW1lb3V0ID0gdm9ydGV4X3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9ICh3YXRjaGRvZyAqIEhaKSAvIDEwMDA7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHBvbGxfdm9ydGV4OwotI2VuZGlmCisKIAlpZiAocGRldikgewogCQl2cC0+cG1fc3RhdGVfdmFsaWQgPSAxOwogIAkJcGNpX3NhdmVfc3RhdGUoVk9SVEVYX1BDSSh2cCkpOwpAQCAtMjg4Myw3ICsyOTA4LDcgQEAKIAkJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShWT1JURVhfUENJKHZwKSkpOwogCX0gZWxzZSB7CiAJCWlmIChWT1JURVhfRUlTQSh2cCkpCi0JCQlzcHJpbnRmKGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZSh2cC0+Z2VuZGV2KSk7CisJCQlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKHZwLT5nZW5kZXYpKTsKIAkJZWxzZQogCQkJc3ByaW50ZihpbmZvLT5idXNfaW5mbywgIkVJU0EgMHglbHggJWQiLAogCQkJCQlkZXYtPmJhc2VfYWRkciwgZGV2LT5pcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOWNwLmMgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwppbmRleCA0ZTE5YWUzLi5hMDllM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5Y3AuYworKysgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwpAQCAtNjA0LDcgKzYwNCw3IEBACiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CiAJCWNwdzE2X2YoSW50ck1hc2ssIGNwX2ludHJfbWFzayk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPmxvY2ssIGZsYWdzKTsKIAl9CiAKQEAgLTY0MSw5ICs2NDEsOSBAQAogCX0KIAogCWlmIChzdGF0dXMgJiAoUnhPSyB8IFJ4RXJyIHwgUnhFbXB0eSB8IFJ4RklGT092cikpCi0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZjcC0+bmFwaSkpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmY3AtPm5hcGkpKSB7CiAJCQljcHcxNl9mKEludHJNYXNrLCBjcF9ub3J4X2ludHJfbWFzayk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZjcC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmNwLT5uYXBpKTsKIAkJfQogCiAJaWYgKHN0YXR1cyAmIChUeE9LIHwgVHhFcnIgfCBUeEVtcHR5IHwgU1dJbnQpKQpAQCAtMTYwMiw2ICsxNjAyLDI4IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IGNwX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBjcF9wcml2YXRlICpjcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCisJc3Bpbl9sb2NrX2lycSgmY3AtPmxvY2spOworCisJY3B3OF9mKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwljcHczMl9mKE1BQzAgKyAwLCBsZTMyX3RvX2NwdSAoKihfX2xlMzIgKikgKGRldi0+ZGV2X2FkZHIgKyAwKSkpOworCWNwdzMyX2YoTUFDMCArIDQsIGxlMzJfdG9fY3B1ICgqKF9fbGUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDQpKSk7CisJY3B3OF9mKENmZzkzNDYsIENmZzkzNDZfTG9jayk7CisKKwlzcGluX3VubG9ja19pcnEoJmNwLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCiAvKiBTZXJpYWwgRUVQUk9NIHNlY3Rpb24uICovCiAKIC8qICBFRVBST01fQ3RybCBiaXRzLiAqLwpAQCAtMTgyMSw3ICsxODQzLDcgQEAKIAkubmRvX29wZW4JCT0gY3Bfb3BlbiwKIAkubmRvX3N0b3AJCT0gY3BfY2xvc2UsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGNwX3NldF9tYWNfYWRkcmVzcywKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGNwX3NldF9yeF9tb2RlLAogCS5uZG9fZ2V0X3N0YXRzCQk9IGNwX2dldF9zdGF0cywKIAkubmRvX2RvX2lvY3RsCQk9IGNwX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IGE1YjI0MjAuLjI5ZGYzOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTY0MCw2ICs2NDAsNyBAQAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCBydGw4MTM5X3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgorc3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKTsKIHN0YXRpYyBpbnQgcnRsODEzOV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CiBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODEzOV9pbnRlcnJ1cHQgKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CiBzdGF0aWMgaW50IHJ0bDgxMzlfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtOTE3LDcgKzkxOCw3IEBACiAJLm5kb19zdG9wCQk9IHJ0bDgxMzlfY2xvc2UsCiAJLm5kb19nZXRfc3RhdHMJCT0gcnRsODEzOV9nZXRfc3RhdHMsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IHJ0bDgxMzlfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBydGw4MTM5X3N0YXJ0X3htaXQsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBydGw4MTM5X3NldF9yeF9tb2RlLAogCS5uZG9fZG9faW9jdGwJCT0gbmV0ZGV2X2lvY3RsLApAQCAtMjEyOCw3ICsyMTI5LDcgQEAKIAkJICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCQlSVExfVzE2X0YoSW50ck1hc2ssIHJ0bDgxMzlfaW50cl9tYXNrKTsKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCX0KIAlzcGluX3VubG9jaygmdHAtPnJ4X2xvY2spOwpAQCAtMjE3OCw5ICsyMTc5LDkgQEAKIAkvKiBSZWNlaXZlIHBhY2tldHMgYXJlIHByb2Nlc3NlZCBieSBwb2xsIHJvdXRpbmUuCiAJICAgSWYgbm90IHJ1bm5pbmcgc3RhcnQgaXQgbm93LiAqLwogCWlmIChzdGF0dXMgJiBSeEFja0JpdHMpewotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgewogCQkJUlRMX1cxNl9GIChJbnRyTWFzaywgcnRsODEzOV9ub3J4X2ludHJfbWFzayk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAkJfQogCX0KIApAQCAtMjIxNSw2ICsyMjE2LDI5IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGludCBydGw4MTM5X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCisJc3Bpbl9sb2NrX2lycSgmdHAtPmxvY2spOworCisJUlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOworCVJUTF9XMzJfRihNQUMwICsgMCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtPmRldl9hZGRyICsgMCkpKTsKKwlSVExfVzMyX0YoTUFDMCArIDQsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDQpKSk7CisJUlRMX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKKworCXNwaW5fdW5sb2NrX2lycSgmdHAtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcnRsODEzOV9jbG9zZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MjU5Ni5jIGIvZHJpdmVycy9uZXQvODI1OTYuYwppbmRleCBiMjczNTk2Li5jY2E5NGI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MjU5Ni5jCisrKyBiL2RyaXZlcnMvbmV0LzgyNTk2LmMKQEAgLTExMjIsNiArMTEyMiwxNyBAQAogc3RhdGljIGludCBpbyA9IDB4MzAwOwogc3RhdGljIGludCBpcnEgPSAxMDsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNTk2X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBpNTk2X29wZW4sCisJLm5kb19zdG9wCQk9IGk1OTZfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGk1OTZfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gaTU5Nl90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdHJ1Y3QgbmV0X2RldmljZSAqIF9faW5pdCBpODI1OTZfcHJvYmUoaW50IHVuaXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTEyMzIsMTEgKzEyNDMsNyBAQAogCURFQihERUJfUFJPQkUscHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKSk7CiAKIAkvKiBUaGUgODI1OTYtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPm9wZW4gPSBpNTk2X29wZW47Ci0JZGV2LT5zdG9wID0gaTU5Nl9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGk1OTZfc3RhcnRfeG1pdDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBpNTk2X3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmk1OTZfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAogCWRldi0+bWxfcHJpdiA9ICh2b2lkICopKGRldi0+bWVtX3N0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IDQzNWUyZTMuLmYwNjJiNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMjYsNiArMjYsMTUgQEAKICMgdGhhdCBmb3IgZWFjaCBvZiB0aGUgc3ltYm9scy4KIGlmIE5FVERFVklDRVMKIAorY29uZmlnIENPTVBBVF9ORVRfREVWX09QUworICAgICAgIGRlZmF1bHQgeQorICAgICAgIGJvb2wgIkVuYWJsZSBvbGRlciBuZXR3b3JrIGRldmljZSBBUEkgY29tcGF0aWFibGl0eSIKKyAgICAgICAtLS1oZWxwLS0tCisgICAgICAgICAgVGhpcyBvcHRpb24gZW5hYmxlcyBrZXJuZWwgY29tcGF0aWFiaWxpdHkgd2l0aCBvbGRlciBuZXR3b3JrIGRldmljZXMKKyAgICAgICAgICB0aGF0IGRvIG5vdCB1c2UgbmV0X2RldmljZV9vcHMgaW50ZXJmYWNlLgorCisJICBJZiB1bnN1cmUsIHNheSBZLgorCiBjb25maWcgSUZCCiAJdHJpc3RhdGUgIkludGVybWVkaWF0ZSBGdW5jdGlvbmFsIEJsb2NrIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBORVRfQ0xTX0FDVApAQCAtOTYzLDYgKzk3MiwxNCBAQAogCSAgRW5hYmxlIHRoZSB2ZXJpZnkgYWZ0ZXIgdGhlIGJ1ZmZlciB3cml0ZSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLgogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEVUSE9DCisJdHJpc3RhdGUgIk9wZW5Db3JlcyAxMC8xMDAgTWJwcyBFdGhlcm5ldCBNQUMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVAorCXNlbGVjdCBNSUkKKwlzZWxlY3QgUEhZTElCCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIE9wZW5Db3JlcyAxMC8xMDAgTWJwcyBFdGhlcm5ldCBNQUMuCisKIGNvbmZpZyBTTUM5MTFYCiAJdHJpc3RhdGUgIlNNU0MgTEFOOTExWzU2NzhdIHN1cHBvcnQiCiAJc2VsZWN0IENSQzMyCkBAIC0xMDQyLDcgKzEwNTksNyBAQAogCiBjb25maWcgRE5FVAogCXRyaXN0YXRlICJEYXZlIGV0aGVybmV0IHN1cHBvcnQgKERORVQpIgotCWRlcGVuZHMgb24gTkVUX0VUSEVSTkVUCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgSEFTX0lPTUVNCiAJc2VsZWN0IFBIWUxJQgogCWhlbHAKIAkgIFRoZSBEYXZlIGV0aGVybmV0IGludGVyZmFjZSAoRE5FVCkgaXMgZm91bmQgb24gUW9uZyBCb2FyZCBGUEdBLgpAQCAtMTg0MCwxMCArMTg1NywxMCBAQAogCiBjb25maWcgRkVDCiAJYm9vbCAiRkVDIGV0aGVybmV0IGNvbnRyb2xsZXIgKG9mIENvbGRGaXJlIENQVXMpIgotCWRlcGVuZHMgb24gTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMngKKwlkZXBlbmRzIG9uIE01MjN4IHx8IE01Mjd4IHx8IE01MjcyIHx8IE01Mjh4IHx8IE01MjB4IHx8IE01MzJ4IHx8IE1BQ0hfTVgyNwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBidWlsdC1pbiAxMC8xMDAgRmFzdCBldGhlcm5ldAotCSAgY29udHJvbGxlciBvbiBzb21lIE1vdG9yb2xhIENvbGRGaXJlIHByb2Nlc3NvcnMuCisJICBjb250cm9sbGVyIG9uIHNvbWUgTW90b3JvbGEgQ29sZEZpcmUgYW5kIEZyZWVzY2FsZSBpLk1YIHByb2Nlc3NvcnMuCiAKIGNvbmZpZyBGRUMyCiAJYm9vbCAiU2Vjb25kIEZFQyBldGhlcm5ldCBjb250cm9sbGVyIChvbiBzb21lIENvbGRGaXJlIENQVXMpIgpAQCAtMjAzMCwxNSArMjA0Nyw2IEBACiAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBpZ2IuCiAKLWNvbmZpZyBJR0JfTFJPIAotCWJvb2wgIlVzZSBzb2Z0d2FyZSBMUk8iCi0JZGVwZW5kcyBvbiBJR0IgJiYgSU5FVAotCXNlbGVjdCBJTkVUX0xSTwotCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGxhcmdlIHJlY2VpdmUgb2ZmbG9hZC4gCi0KLQkgIElmIGluIGRvdWJ0LCBzYXkgTi4KLQogY29uZmlnIElHQl9EQ0EKIAlib29sICJEaXJlY3QgQ2FjaGUgQWNjZXNzIChEQ0EpIFN1cHBvcnQiCiAJZGVmYXVsdCB5CkBAIC0yMjg0LDkgKzIyOTIsMTcgQEAKIAogICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBGU0xfUFFfTURJTworCXRyaXN0YXRlICJGcmVlc2NhbGUgUFEgTURJTyIKKwlkZXBlbmRzIG9uIEZTTF9TT0MKKwlzZWxlY3QgUEhZTElCCisJaGVscAorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gYnVzIHVzZWQgYnkgdGhlIGdpYW5mYXIgYW5kIFVDQyBkcml2ZXJzLgorCiBjb25maWcgR0lBTkZBUgogCXRyaXN0YXRlICJHaWFuZmFyIEV0aGVybmV0IgogCWRlcGVuZHMgb24gRlNMX1NPQworCXNlbGVjdCBGU0xfUFFfTURJTwogCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgQ1JDMzIKIAloZWxwCkBAIC0yMjk2LDYgKzIzMTIsNyBAQAogY29uZmlnIFVDQ19HRVRICiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBRRSBHaWdhYml0IEV0aGVybmV0IgogCWRlcGVuZHMgb24gUVVJQ0NfRU5HSU5FCisJc2VsZWN0IEZTTF9QUV9NRElPCiAJc2VsZWN0IFBIWUxJQgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHaWdhYml0IEV0aGVybmV0IG1vZGUgb2YgdGhlIFFVSUNDIEVuZ2luZSwKQEAgLTIzMTIsNiArMjMyOSw3IEBACiBjb25maWcgTVY2NDNYWF9FVEgKIAl0cmlzdGF0ZSAiTWFydmVsbCBEaXNjb3ZlcnkgKDY0M1hYKSBhbmQgT3Jpb24gZXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1WNjQzNjAgfHwgTVY2NFg2MCB8fCAoUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDMzIpIHx8IFBMQVRfT1JJT04KKwlzZWxlY3QgSU5FVF9MUk8KIAlzZWxlY3QgUEhZTElCCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGdpZ2FiaXQgZXRoZXJuZXQgTUFDcyBpbiB0aGUKQEAgLTI0MzAsNyArMjQ0OCw2IEBACiAJdHJpc3RhdGUgIkNoZWxzaW8gQ29tbXVuaWNhdGlvbnMgVDMgMTBHYiBFdGhlcm5ldCBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ0hFTFNJT19UM19ERVBFTkRTCiAJc2VsZWN0IEZXX0xPQURFUgotCXNlbGVjdCBJTkVUX0xSTwogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIENoZWxzaW8gVDMtYmFzZWQgZ2lnYWJpdCBhbmQgMTBHYiBFdGhlcm5ldAogCSAgYWRhcHRlcnMuCkBAIC0yNDY2LDcgKzI0ODMsNiBAQAogY29uZmlnIElYR0JFCiAJdHJpc3RhdGUgIkludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAotCXNlbGVjdCBJTkVUX0xSTwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEludGVsKFIpIDEwR2JFIFBDSSBFeHByZXNzIGZhbWlseSBvZgogCSAgYWRhcHRlcnMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gaWRlbnRpZnkgeW91ciBhZGFwdGVyLCBnbwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCA0NzFiYWFmLi45ODQwOWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtMjYsMTEgKzI2LDEyIEBACiAKIGdpYW5mYXJfZHJpdmVyLW9ianMgOj0gZ2lhbmZhci5vIFwKIAkJZ2lhbmZhcl9ldGh0b29sLm8gXAotCQlnaWFuZmFyX21paS5vIFwKIAkJZ2lhbmZhcl9zeXNmcy5vCiAKIG9iai0kKENPTkZJR19VQ0NfR0VUSCkgKz0gdWNjX2dldGhfZHJpdmVyLm8KLXVjY19nZXRoX2RyaXZlci1vYmpzIDo9IHVjY19nZXRoLm8gdWNjX2dldGhfbWlpLm8gdWNjX2dldGhfZXRodG9vbC5vCit1Y2NfZ2V0aF9kcml2ZXItb2JqcyA6PSB1Y2NfZ2V0aC5vIHVjY19nZXRoX2V0aHRvb2wubworCitvYmotJChDT05GSUdfRlNMX1BRX01ESU8pICs9IGZzbF9wcV9tZGlvLm8KIAogIwogIyBsaW5rIG9yZGVyIGltcG9ydGFudCBoZXJlCkBAIC0yMjksNiArMjMwLDcgQEAKIHBhc2VtaV9tYWNfZHJpdmVyLW9ianMgOj0gcGFzZW1pX21hYy5vIHBhc2VtaV9tYWNfZXRodG9vbC5vCiBvYmotJChDT05GSUdfTUxYNF9DT1JFKSArPSBtbHg0Lwogb2JqLSQoQ09ORklHX0VOQzI4SjYwKSArPSBlbmMyOGo2MC5vCitvYmotJChDT05GSUdfRVRIT0MpICs9IGV0aG9jLm8KIAogb2JqLSQoQ09ORklHX1hURU5TQV9YVDIwMDBfU09OSUMpICs9IHh0c29uaWMubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hMjA2NS5jIGIvZHJpdmVycy9uZXQvYTIwNjUuYwppbmRleCA3YTYwYmRkLi5kMGQwYzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hMjA2NS5jCisrKyBiL2RyaXZlcnMvbmV0L2EyMDY1LmMKQEAgLTU1MiwxOCArNTUyLDEzIEBACiAJc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2xhdGlsZSBzdHJ1Y3QgbGFuY2VfcmVncyAqbGwgPSBscC0+bGw7CiAJdm9sYXRpbGUgc3RydWN0IGxhbmNlX2luaXRfYmxvY2sgKmliID0gbHAtPmluaXRfYmxvY2s7Ci0JaW50IGVudHJ5LCBza2JsZW4sIGxlbjsKKwlpbnQgZW50cnksIHNrYmxlbjsKIAlpbnQgc3RhdHVzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc2tibGVuID0gc2tiLT5sZW47Ci0JbGVuID0gc2tibGVuOwotCi0JaWYgKGxlbiA8IEVUSF9aTEVOKSB7Ci0JCWxlbiA9IEVUSF9aTEVOOwotCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotCQkJcmV0dXJuIDA7Ci0JfQorCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCisJCXJldHVybiAwOworCXNrYmxlbiA9IG1heF90KHVuc2lnbmVkLCBza2ItPmxlbiwgRVRIX1pMRU4pOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC01ODYsMTUgKzU4MSwxMSBAQAogCX0KICNlbmRpZgogCWVudHJ5ID0gbHAtPnR4X25ldyAmIGxwLT50eF9yaW5nX21vZF9tYXNrOwotCWliLT5idHhfcmluZyBbZW50cnldLmxlbmd0aCA9ICgtbGVuKSB8IDB4ZjAwMDsKKwlpYi0+YnR4X3JpbmcgW2VudHJ5XS5sZW5ndGggPSAoLXNrYmxlbikgfCAweGYwMDA7CiAJaWItPmJ0eF9yaW5nIFtlbnRyeV0ubWlzYyA9IDA7CiAKIAlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgKHZvaWQgKikmaWItPnR4X2J1ZiBbZW50cnldWzBdLCBza2JsZW4pOwogCi0JLyogQ2xlYXIgdGhlIHNsYWNrIG9mIHRoZSBwYWNrZXQsIGRvIEkgbmVlZCB0aGlzPyAqLwotCWlmIChsZW4gIT0gc2tibGVuKQotCQltZW1zZXQgKCh2b2lkICopICZpYi0+dHhfYnVmIFtlbnRyeV1bc2tibGVuXSwgMCwgbGVuIC0gc2tibGVuKTsKLQogCS8qIE5vdywgZ2l2ZSB0aGUgcGFja2V0IHRvIHRoZSBsYW5jZSAqLwogCWliLT5idHhfcmluZyBbZW50cnldLnRtZDFfYml0cyA9IChMRV9UMV9QT0t8TEVfVDFfT1dOKTsKIAlscC0+dHhfbmV3ID0gKGxwLT50eF9uZXcrMSkgJiBscC0+dHhfcmluZ19tb2RfbWFzazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjMzIwMC5jIGIvZHJpdmVycy9uZXQvYWMzMjAwLmMKaW5kZXggMDcxYTg1MS4uZWFjNzMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYWMzMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvYWMzMjAwLmMKQEAgLTE0Myw2ICsxNDMsMjIgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGFjX29wZW4sCisJLm5kb19zdG9wIAkJPSBhY19jbG9zZV9jYXJkLAorCisJLm5kb19zdGFydF94bWl0CQk9IGVpX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGVpX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gZWlfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWlfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVpX3BvbGwsCisjZW5kaWYKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGFjX3Byb2JlMShpbnQgaW9hZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBpLCByZXR2YWw7CkBAIC0yNTMsMTEgKzI2OSw3IEBACiAJZWlfc3RhdHVzLmJsb2NrX291dHB1dCA9ICZhY19ibG9ja19vdXRwdXQ7CiAJZWlfc3RhdHVzLmdldF84MzkwX2hkciA9ICZhY19nZXRfODM5MF9oZHI7CiAKLQlkZXYtPm9wZW4gPSAmYWNfb3BlbjsKLQlkZXYtPnN0b3AgPSAmYWNfY2xvc2VfY2FyZDsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gZWlfcG9sbDsKLSNlbmRpZgorCWRldi0+bmV0ZGV2X29wcyA9ICZhY19uZXRkZXZfb3BzOwogCU5TODM5MF9pbml0KGRldiwgMCk7CiAKIAlyZXR2YWwgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKaW5kZXggOTU4OWQ2MjAuLjA2YTlmMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCkBAIC00MzcsNyArNDM3LDcgQEAKIE1PRFVMRV9QQVJNX0RFU0ModHhfcmF0aW8sICJBY2VOSUMvM0M5ODUvR0E2MjAgcmF0aW8gb2YgTklDIG1lbW9yeSB1c2VkIGZvciBUWC9SWCBkZXNjcmlwdG9ycyAocmFuZ2UgMC02MykiKTsKIAogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogICAiYWNlbmljLmM6IHYwLjkyIDA4LzA1LzIwMDIgIEplcyBTb3JlbnNlbiwgbGludXgtYWNlbmljQFN1blNJVEUuZGtcbiIKICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vaG9tZS5jZXJuLmNoL35qZXMvZ2lnZS9hY2VuaWMuaHRtbFxuIjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW1kODExMWUuYyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKaW5kZXggNzcwOTk5Mi4uY2I5Yzk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYW1kODExMWUuYworKysgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCkBAIC04MzEsNyArODMxLDcgQEAKIAlpZiAocnhfcGt0X2xpbWl0ID4gMCkgewogCQkvKiBSZWNlaXZlIGRlc2NyaXB0b3IgaXMgZW1wdHkgbm93ICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCXdyaXRlbChWQUwwfFJJTlRFTjAsIG1taW8gKyBJTlRFTjApOwogCQl3cml0ZWwoVkFMMiB8IFJETUQwLCBtbWlvICsgQ01EMCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CkBAIC0xMTcwLDExICsxMTcwLDExIEBACiAKIAkvKiBDaGVjayBpZiBSZWNlaXZlIEludGVycnVwdCBoYXMgb2NjdXJyZWQuICovCiAJaWYgKGludHIwICYgUklOVDApIHsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpIHsKIAkJCS8qIERpc2FibGUgcmVjZWl2ZSBpbnRlcnVwdHMgKi8KIAkJCXdyaXRlbChSSU5URU4wLCBtbWlvICsgSU5URU4wKTsKIAkJCS8qIFNjaGVkdWxlIGEgcG9sbGluZyByb3V0aW5lICovCi0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAkJfSBlbHNlIGlmIChpbnRyZW4wICYgUklOVEVOMCkgewogCQkJcHJpbnRrKCIqKioqKioqKioqKipEcml2ZXIgYnVnISBcCiAJCQkJaW50ZXJydXB0IHdoaWxlIGluIHBvbGxcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMKaW5kZXggNTQ4MTlhMy4uN2Y4MzI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYworKysgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jCkBAIC0xNzEsNyArMTcxLDYgQEAKIAogc3RydWN0IGNvcHNfbG9jYWwKIHsKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAgICAgICAgIGludCBib2FyZDsJCQkvKiBIb2xkcyB3aGF0IGJvYXJkIHR5cGUgaXMuICovCiAJaW50IG5vZGVpZDsJCQkvKiBTZXQgdG8gMSBvbmNlIGhhdmUgbm9kZWlkLiAqLwogICAgICAgICB1bnNpZ25lZCBjaGFyIG5vZGVfYWNxdWlyZTsJLyogTm9kZSBJRCB3aGVuIGFjcXVpcmVkLiAqLwpAQCAtMTk3LDcgKzE5Niw2IEBACiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3QgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCAgY29wc19pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CiBzdGF0aWMgaW50ICBjb3BzX2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY29wc19nZXRfc3RhdHMgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgdm9pZCBjbGVhbnVwX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTI2MCw2ICsyNTgsMTUgQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNvcHNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICAgICA9IGNvcHNfb3BlbiwKKyAgICAgICAgLm5kb19zdG9wICAgICAgICAgICAgICAgPSBjb3BzX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgIAk9IGNvcHNfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CQk9IGNvcHNfdGltZW91dCwKKyAgICAgICAgLm5kb19kb19pb2N0bCAgICAgICAgICAgPSBjb3BzX2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorfTsKKwogLyoKICAqICAgICAgVGhpcyBpcyB0aGUgcmVhbCBwcm9iZSByb3V0aW5lLiBMaW51eCBoYXMgYSBoaXN0b3J5IG9mIGZyaWVuZGx5IGRldmljZQogICogICAgICBwcm9iZXMgb24gdGhlIElTQSBidXMuIEEgZ29vZCBkZXZpY2UgcHJvYmVzIGF2b2lkcyBkb2luZyB3cml0ZXMsIGFuZApAQCAtMzMzLDE2ICszNDAsOSBAQAogCS8qIENvcHkgbG9jYWwgYm9hcmQgdmFyaWFibGUgdG8gbHAgc3RydWN0LiAqLwogCWxwLT5ib2FyZCAgICAgICAgICAgICAgID0gYm9hcmQ7CiAKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAgICA9IGNvcHNfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0CQk9IGNvcHNfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgCT0gJmNvcHNfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gSFogKiAyOwogCi0gICAgICAgIGRldi0+Z2V0X3N0YXRzICAgICAgICAgID0gY29wc19nZXRfc3RhdHM7Ci0JZGV2LT5vcGVuICAgICAgICAgICAgICAgPSBjb3BzX29wZW47Ci0gICAgICAgIGRldi0+c3RvcCAgICAgICAgICAgICAgID0gY29wc19jbG9zZTsKLSAgICAgICAgZGV2LT5kb19pb2N0bCAgICAgICAgICAgPSBjb3BzX2lvY3RsOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0OwotICAgICAgICBkZXYtPm1jX2xpc3QgICAgICAgICAgICA9IE5VTEw7CiAKIAkvKiBUZWxsIHRoZSB1c2VyIHdoZXJlIHRoZSBjYXJkIGlzIGFuZCB3aGF0IG1vZGUgd2UncmUgaW4uICovCiAJaWYoYm9hcmQ9PURBWU5BKQpAQCAtNzk3LDcgKzc5Nyw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCiAJCQlkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIGxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisgICAgICAgICAgICAgICAgZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAgICAgICAgICAgICAgICAgd2hpbGUocGt0X2xlbi0tKSAgICAgICAgLyogRGlzY2FyZCBwYWNrZXQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGluYihpb2FkZHIpOwogICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CkBAIC04MTksNyArODE5LDcgQEAKICAgICAgICAgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQmFkIHBhY2tldCBsZW5ndGggb2YgJWQgYnl0ZXMuXG4iLCAKIAkJCWRldi0+bmFtZSwgcGt0X2xlbik7Ci0gICAgICAgICAgICAgICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOworICAgICAgICAgICAgICAgIGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTgzNiw3ICs4MzYsNyBAQAogICAgICAgICBpZihyc3BfdHlwZSAhPSBMQVBfUkVTUE9OU0UpCiAgICAgICAgIHsKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogQmFkIHBhY2tldCB0eXBlICVkLlxuIiwgZGV2LT5uYW1lLCByc3BfdHlwZSk7Ci0gICAgICAgICAgICAgICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOworICAgICAgICAgICAgICAgIGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTg0Niw4ICs4NDYsOCBAQAogICAgICAgICBza2JfcmVzZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOyAgICAvKiBQb2ludCB0byBkYXRhIChTa2lwIGhlYWRlcikuICovCiAKICAgICAgICAgLyogVXBkYXRlIHRoZSBjb3VudGVycy4gKi8KLSAgICAgICAgbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLSAgICAgICAgbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworICAgICAgICBkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKyAgICAgICAgZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAogICAgICAgICAvKiBTZW5kIHBhY2tldCB0byBhIGhpZ2hlciBwbGFjZS4gKi8KICAgICAgICAgbmV0aWZfcngoc2tiKTsKQEAgLTg1OCw3ICs4NTgsNyBAQAogICAgICAgICBzdHJ1Y3QgY29wc19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICAgICAgICBpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKLQlscC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKICAgICAgICAgaWYobHAtPmJvYXJkPT1UQU5HRU5UKQogICAgICAgICB7CiAJCWlmKChpbmIoaW9hZGRyK1RBTkdfQ0FSRF9TVEFUVVMpJlRBTkdfVFhfUkVBRFkpPT0wKQpAQCAtOTE2LDggKzkxNiw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsJLyogUmVzdG9yZSBpbnRlcnJ1cHRzLiAqLwogCiAJLyogRG9uZSBzZW5kaW5nIHBhY2tldCwgdXBkYXRlIGNvdW50ZXJzIGFuZCBjbGVhbnVwLiAqLwotCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JbHAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC05ODYsMTUgKzk4Niw2IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi0vKgotICogICAgICBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4KLSAqICAgICAgVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggdGhlIGNhcmQgb3BlbiBvciBjbG9zZWQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY29wc19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLSAgICAgICAgc3RydWN0IGNvcHNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICAgICAgcmV0dXJuICZscC0+c3RhdHM7Ci19CiAKICNpZmRlZiBNT0RVTEUKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqY29wc19kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2x0cGMuYwppbmRleCBkYzRkNDk2Li43OGNjNzE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMKQEAgLTI2MSw3ICsyNjEsNiBAQAogCiBzdHJ1Y3QgbHRwY19wcml2YXRlCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IGF0YWxrX2FkZHIgbXlfYWRkcjsKIH07CiAKQEAgLTY5OSw3ICs2OTgsNiBAQAogc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IGx0cGNfdGltZXI7CiAKIHN0YXRpYyBpbnQgbHRwY194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsdHBjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogc3RhdGljIGludCByZWFkXzMwICggc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTcyNiw4ICs3MjQsNiBAQAogCWludCBkbm9kZSwgc25vZGUsIGxsYXB0eXBlLCBsZW47IAogCWludCBza2xlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBsdHBjX3ByaXZhdGUgKmx0cGNfcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmx0cGNfcHJpdi0+c3RhdHM7CiAJc3RydWN0IGx0X3JjdmxhcCAqbHRjID0gKHN0cnVjdCBsdF9yY3ZsYXAgKikgbHRkbWFjYnVmOwogCiAJaWYgKGx0Yy0+Y29tbWFuZCAhPSBMVF9SQ1ZMQVApIHsKQEAgLTc3OSw4ICs3NzUsOCBAQAogCiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzKz1za2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJLyogdG9zcyBpdCBvbndhcmRzICovCiAJbmV0aWZfcngoc2tiKTsKQEAgLTkwNCwxMCArOTAwLDYgQEAKIAkvKiBpbiBrZXJuZWwgMS4zLnh4LCBvbiBlbnRyeSBza2ItPmRhdGEgcG9pbnRzIHRvIGRkcCBoZWFkZXIsCiAJICogYW5kIHNrYi0+bGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlIGRkcCBkYXRhICsgZGRwIGhlYWRlcgogCSAqLwotCi0Jc3RydWN0IGx0cGNfcHJpdmF0ZSAqbHRwY19wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbHRwY19wcml2LT5zdGF0czsKLQogCWludCBpOwogCXN0cnVjdCBsdF9zZW5kbGFwIGNidWY7CiAJdW5zaWduZWQgY2hhciAqaGRyOwpAQCAtOTM2LDIwICs5MjgsMTMgQEAKIAkJcHJpbnRrKCJcbiIpOwogCX0KIAotCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnR4X2J5dGVzKz1za2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmx0cGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGx0cGNfcHJpdmF0ZSAqbHRwY19wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbHRwY19wcml2LT5zdGF0czsKLQlyZXR1cm4gc3RhdHM7Ci19Ci0KIC8qIGluaXRpYWxpemF0aW9uIHN0dWZmICovCiAgIAogc3RhdGljIGludCBfX2luaXQgbHRwY19wcm9iZV9kbWEoaW50IGJhc2UsIGludCBkbWEpCkBAIC0xMDI3LDYgKzEwMTIsMTIgQEAKIAlyZXR1cm4gKHdhbnQgJiAyKSA/IDMgOiAxOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGx0cGNfbmV0ZGV2ID0geworCS5uZG9fc3RhcnRfeG1pdAkJPSBsdHBjX3htaXQsCisJLm5kb19kb19pb2N0bAkJPSBsdHBjX2lvY3RsLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorfTsKKwogc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgbHRwY19wcm9iZSh2b2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMTMzLDE0ICsxMTI0LDcgQEAKIAllbHNlCiAJCXByaW50ayhLRVJOX0lORk8gIkFwcGxlL0ZhcmFsbG9uIExvY2FsVGFsay1QQyBjYXJkIGF0ICUwM3gsIERNQSVkLiAgVXNpbmcgcG9sbGVkIG1vZGUuXG4iLGlvLGRtYSk7CiAKLQkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBldGhlcm5ldC1nZW5lcmljIHZhbHVlcy4gKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGx0cGNfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9IGx0cGNfZ2V0X3N0YXRzOwotCi0JLyogYWRkIHRoZSBsdHBjLXNwZWNpZmljIHRoaW5ncyAqLwotCWRldi0+ZG9faW9jdGwgPSAmbHRwY19pb2N0bDsKLQotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbHRwY19uZXRkZXY7CiAJZGV2LT5tY19saXN0ID0gTlVMTDsKIAlkZXYtPmJhc2VfYWRkciA9IGlvOwogCWRldi0+aXJxID0gaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2FyYy1yYXdtb2RlLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYwppbmRleCAzZmY5YWZmLi42NDZkZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvYXJjLXJhd21vZGUuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCArIEFSQ19IRFJfU0laRSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiX3B1dChza2IsIGxlbmd0aCArIEFSQ19IRFJfU0laRSk7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAogCUJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgc2tiLCAicngiKTsKIAotCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FSQ05FVCk7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0FSQ05FVCk7CiA7CiAJbmV0aWZfcngoc2tiKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9hcmNuZXQuYwppbmRleCA2YjUzZTVlLi5kNmQ0YWIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvYXJjbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJjbmV0L2FyY25ldC5jCkBAIC05NSwxNyArOTUsMTYgQEAKIEVYUE9SVF9TWU1CT0woYXJjbmV0X2RlYnVnKTsKIEVYUE9SVF9TWU1CT0woYWxsb2NfYXJjZGV2KTsKIEVYUE9SVF9TWU1CT0woYXJjbmV0X2ludGVycnVwdCk7CitFWFBPUlRfU1lNQk9MKGFyY25ldF9vcGVuKTsKK0VYUE9SVF9TWU1CT0woYXJjbmV0X2Nsb3NlKTsKK0VYUE9SVF9TWU1CT0woYXJjbmV0X3NlbmRfcGFja2V0KTsKK0VYUE9SVF9TWU1CT0woYXJjbmV0X3RpbWVvdXQpOwogCiAvKiBJbnRlcm5hbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50IGFyY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBhcmNuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGFyY25ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGFyY25ldF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBhcmNuZXRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgdW5zaWduZWQgc2hvcnQgdHlwZSwgY29uc3Qgdm9pZCAqZGFkZHIsCiAJCQkgY29uc3Qgdm9pZCAqc2FkZHIsIHVuc2lnbmVkIGxlbik7CiBzdGF0aWMgaW50IGFyY25ldF9yZWJ1aWxkX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXJjbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZ29fdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIHN0YXRpYyBpbnQgZGVidWcgPSBBUkNORVRfREVCVUc7CkBAIC0zMjIsMTEgKzMyMSwxOCBAQAogCS5yZWJ1aWxkID0gYXJjbmV0X3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhcmNuZXRfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSBhcmNuZXRfb3BlbiwKKwkubmRvX3N0b3AJPSBhcmNuZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gYXJjbmV0X3NlbmRfcGFja2V0LAorCS5uZG9fdHhfdGltZW91dCA9IGFyY25ldF90aW1lb3V0LAorfTsKIAogLyogU2V0dXAgYSBzdHJ1Y3QgZGV2aWNlIGZvciBBUkNuZXQuICovCiBzdGF0aWMgdm9pZCBhcmNkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVJDTkVUOworCWRldi0+bmV0ZGV2X29wcyA9ICZhcmNuZXRfbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMgPSAmYXJjbmV0X2hlYWRlcl9vcHM7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBzaXplb2Yoc3RydWN0IGFyY2hkcik7CiAJZGV2LT5tdHUgPSBjaG9vc2VfbXR1KCk7CkBAIC0zMzksMTggKzM0NSw5IEBACiAJLyogTmV3LXN0eWxlIGZsYWdzLiAqLwogCWRldi0+ZmxhZ3MgPSBJRkZfQlJPQURDQVNUOwogCi0JLyoKLQkgKiBQdXQgaW4gdGhpcyBzdHVmZiBoZXJlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIGV4cG9ydCB0aGUgc3ltYm9scyB0bwotCSAqIHRoZSBjaGlwc2V0IGRyaXZlcnMuCi0JICovCi0JZGV2LT5vcGVuID0gYXJjbmV0X29wZW47Ci0JZGV2LT5zdG9wID0gYXJjbmV0X2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYXJjbmV0X3NlbmRfcGFja2V0OwotCWRldi0+dHhfdGltZW91dCA9IGFyY25ldF90aW1lb3V0OwotCWRldi0+Z2V0X3N0YXRzID0gYXJjbmV0X2dldF9zdGF0czsKIH0KIAotc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2FyY2RldihjaGFyICpuYW1lKQorc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2FyY2Rldihjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKQEAgLTM3Miw3ICszNjksNyBAQAogICogdGhhdCAic2hvdWxkIiBvbmx5IG5lZWQgdG8gYmUgc2V0IG9uY2UgYXQgYm9vdCwgc28gdGhhdCB0aGVyZSBpcwogICogbm9uLXJlYm9vdCB3YXkgdG8gcmVjb3ZlciBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KICAqLwotc3RhdGljIGludCBhcmNuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGFyY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBjb3VudCwgbmV3bXR1LCBlcnJvcjsKQEAgLTM4Myw3ICszODAsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCUJVR0xWTChEX1BST1RPKSB7Ci0JCWludCBjb3VudDsKIAkJQlVHTVNHKERfUFJPVE8sICJwcm90b2NvbCBtYXAgKGRlZmF1bHQgaXMgJyVjJyk6ICIsCiAJCSAgICAgICBhcmNfcHJvdG9fZGVmYXVsdC0+c3VmZml4KTsKIAkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgMjU2OyBjb3VudCsrKQpAQCAtNDcyLDcgKzQ2OCw3IEBACiAKIAogLyogVGhlIGludmVyc2Ugcm91dGluZSB0byBhcmNuZXRfb3BlbiAtIHNodXRzIGRvd24gdGhlIGNhcmQuICovCi1zdGF0aWMgaW50IGFyY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGFyY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtNTgzLDggKzU3OSw4IEBACiAJfSBlbHNlIHsKIAkJQlVHTVNHKERfTk9STUFMLAogCQkgICAgICAgIkkgZG9uJ3QgdW5kZXJzdGFuZCBldGhlcm5ldCBwcm90b2NvbCAlWGggYWRkcmVzc2VzIVxuIiwgdHlwZSk7Ci0JCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAl9CiAKIAkvKiBpZiB3ZSBjb3VsZG4ndCByZXNvbHZlIHRoZSBhZGRyZXNzLi4uIGdpdmUgdXAuICovCkBAIC02MDEsNyArNTk3LDcgQEAKIAogCiAvKiBDYWxsZWQgYnkgdGhlIGtlcm5lbCBpbiBvcmRlciB0byB0cmFuc21pdCBhIHBhY2tldC4gKi8KLXN0YXRpYyBpbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhcmNoZHIgKnBrdDsKQEAgLTY0NSw3ICs2NDEsNyBAQAogCQkgICAgIXByb3RvLT5hY2tfdHgpIHsKIAkJCS8qIGRvbmUgcmlnaHQgYXdheSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBhY2tub3dsZWRnZQogCQkJICAgdGhlIHBhY2thZ2UgbGF0ZXIgLSBmb3JnZXQgYWJvdXQgaXQgbm93ICovCi0JCQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJZnJlZXNrYiA9IDE7CiAJCX0gZWxzZSB7CiAJCQkvKiBkbyBpdCB0aGUgJ3NwbGl0JyB3YXkgKi8KQEAgLTcwOSw3ICs3MDUsNyBAQAogCS8qIHN0YXJ0IHNlbmRpbmcgKi8KIAlBQ09NTUFORChUWGNtZCB8IChscC0+Y3VyX3R4IDw8IDMpKTsKIAotCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJbHAtPmxhc3R0cmFuc19kZXN0ID0gbHAtPmxhc3Rsb2FkX2Rlc3Q7CiAJbHAtPmxhc3Rsb2FkX2Rlc3QgPSAwOwogCWxwLT5leGNuYWtfcGVuZGluZyA9IDA7CkBAIC03MjAsNyArNzE2LDcgQEAKIAogCiAvKiBDYWxsZWQgYnkgdGhlIGtlcm5lbCB3aGVuIHRyYW5zbWl0IHRpbWVzIG91dCAqLwotc3RhdGljIHZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgYXJjbmV0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTczMiwxMSArNzI4LDExIEBACiAJCW1zZyA9ICIgLSBtaXNzZWQgSVJRPyI7CiAJfSBlbHNlIHsKIAkJbXNnID0gIiI7Ci0JCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCWxwLT50aW1lZF9vdXQgPSAxOwogCQlBQ09NTUFORChOT1RYY21kIHwgKGxwLT5jdXJfdHggPDwgMykpOwogCX0KLQlscC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCS8qIG1ha2Ugc3VyZSB3ZSBkaWRuJ3QgbWlzcyBhIFRYIG9yIGEgRVhDIE5BSyBJUlEgKi8KIAlBSU5UTUFTSygwKTsKQEAgLTg2NSw4ICs4NjEsOCBAQAogCQkJCQkJICAgICAgICJ0cmFuc21pdCB3YXMgbm90IGFja25vd2xlZGdlZCEgIgogCQkJCQkJICAgICAgICIoc3RhdHVzPSVYaCwgZGVzdD0lMDJYaClcbiIsCiAJCQkJCQkgICAgICAgc3RhdHVzLCBscC0+bGFzdHRyYW5zX2Rlc3QpOwotCQkJCQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJCQkJbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJCQkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkJCQl9IGVsc2UgewogCQkJCQkJQlVHTVNHKERfRFVSSU5HLAogCQkJCQkJICAgICAgICJicm9hZGNhc3Qgd2FzIG5vdCBhY2tub3dsZWRnZWQ7IHRoYXQncyBub3JtYWwgIgpAQCAtOTA1LDcgKzkwMSw3IEBACiAJCQkJaWYgKHR4YnVmICE9IC0xKSB7CiAJCQkJCWlmIChscC0+b3V0Z29pbmcucHJvdG8tPmNvbnRpbnVlX3R4KGRldiwgdHhidWYpKSB7CiAJCQkJCQkvKiB0aGF0IHdhcyB0aGUgbGFzdCBzZWdtZW50ICovCi0JCQkJCQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gbHAtPm91dGdvaW5nLnNrYi0+bGVuOworCQkJCQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBscC0+b3V0Z29pbmcuc2tiLT5sZW47CiAJCQkJCQlpZighbHAtPm91dGdvaW5nLnByb3RvLT5hY2tfdHgpCiAJCQkJCQkgIHsKIAkJCQkJCSAgICBkZXZfa2ZyZWVfc2tiX2lycShscC0+b3V0Z29pbmcuc2tiKTsKQEAgLTkzMCw3ICs5MjYsNyBAQAogCQl9CiAJCWlmIChzdGF0dXMgJiBscC0+aW50bWFzayAmIFJFQ09OZmxhZykgewogCQkJQUNPTU1BTkQoQ0ZMQUdTY21kIHwgQ09ORklHY2xlYXIpOwotCQkJbHAtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAKIAkJCUJVR01TRyhEX1JFQ09OLCAiTmV0d29yayByZWNvbmZpZ3VyYXRpb24gZGV0ZWN0ZWQgKHN0YXR1cz0lWGgpXG4iLAogCQkJICAgICAgIHN0YXR1cyk7CkBAIC0xMDM4LDggKzEwMzQsOCBAQAogCSAgICAgICAiKCVkKzQgYnl0ZXMpXG4iLAogCSAgICAgICBidWZudW0sIHBrdC5oYXJkLnNvdXJjZSwgcGt0LmhhcmQuZGVzdCwgbGVuZ3RoKTsKIAotCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JbHAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aCArIEFSQ19IRFJfU0laRTsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aCArIEFSQ19IRFJfU0laRTsKIAogCS8qIGNhbGwgdGhlIHJpZ2h0IHJlY2VpdmVyIGZvciB0aGUgcHJvdG9jb2wgKi8KIAlpZiAoYXJjX3Byb3RvX21hcFtzb2Z0LT5wcm90b10tPmlzX2lwKSB7CkBAIC0xMDY3LDE4ICsxMDYzLDYgQEAKIH0KIAogCi0KLS8qIAotICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgY2FyZCBvcGVuIG9yCi0gKiBjbG9zZWQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXJjbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJmxwLT5zdGF0czsKLX0KLQotCiBzdGF0aWMgdm9pZCBudWxsX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBidWZudW0sCiAJCSAgICBzdHJ1Y3QgYXJjaGRyICpwa3RoZHIsIGludCBsZW5ndGgpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NhcG1vZGUuYwppbmRleCAzMDU4MGJiLi4wODNlMjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvY2FwbW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jYXBtb2RlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCXNrYiA9IGFsbG9jX3NrYihsZW5ndGggKyBBUkNfSERSX1NJWkUgKyBzaXplb2YoaW50KSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiX3B1dChza2IsIGxlbmd0aCArIEFSQ19IRFJfU0laRSArIHNpemVvZihpbnQpKTsKQEAgLTE0OCw3ICsxNDgsNyBAQAogCiAJQlVHTFZMKERfU0tCKSBhcmNuZXRfZHVtcF9za2IoZGV2LCBza2IsICJyeCIpOwogCi0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJDTkVUKTsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQVJDTkVUKTsKIDsKIAluZXRpZl9yeChza2IpOwogfQpAQCAtMjgyLDcgKzI4Miw3IEBACiAgIEJVR01TRyhEX1BST1RPLCAiQWNra25vd2xlZGdlIGZvciBjYXAgcGFja2V0ICV4LlxuIiwKIAkgKigoaW50KikmYWNrcGt0LT5zb2Z0LmNhcC5jb29raWVbMF0pKTsKIAotICBhY2tza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUkNORVQpOworICBhY2tza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfQVJDTkVUKTsKIAogICBCVUdMVkwoRF9TS0IpIGFyY25ldF9kdW1wX3NrYihkZXYsIGFja3NrYiwgImFja190eF9yZWN2Iik7CiAgIG5ldGlmX3J4KGFja3NrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtaXNhLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtaXNhLmMKaW5kZXggZWE1M2E5NC4uZGIwOGZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLWlzYS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1pc2EuYwpAQCAtMTUxLDYgKzE1MSw4IEBACiAJaWYgKG5vZGUgJiYgbm9kZSAhPSAweGZmKQogCQlkZXYtPmRldl9hZGRyWzBdID0gbm9kZTsKIAorCWRldi0+bmV0ZGV2X29wcyA9ICZjb20yMDAyMF9uZXRkZXZfb3BzOworCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxwLT5iYWNrcGxhbmUgPSBiYWNrcGxhbmU7CiAJbHAtPmNsb2NrcCA9IGNsb2NrcCAmIDc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKaW5kZXggOGI1MWY2My4uZGJmNGRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYwpAQCAtNzIsNiArNzIsOSBAQAogCWRldiA9IGFsbG9jX2FyY2RldihkZXZpY2UpOwogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKKworCWRldi0+bmV0ZGV2X29wcyA9ICZjb20yMDAyMF9uZXRkZXZfb3BzOworCiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jCmluZGV4IDEwMzY4ODMuLjY1MTI3NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC5jCkBAIC0xNDksNiArMTQ5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK2NvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjb20yMDAyMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3Blbgk9IGFyY25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGFyY25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBhcmNuZXRfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0ID0gYXJjbmV0X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBjb20yMDAyMF9zZXRfbWNfbGlzdCwKK307CisKIC8qIFNldCB1cCB0aGUgc3RydWN0IG5ldF9kZXZpY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2FyZC4gIENhbGxlZCBhZnRlcgogICogcHJvYmluZyBzdWNjZWVkcy4KICAqLwpAQCAtMTcwLDggKzE3OCw2IEBACiAJbHAtPmh3LmNvcHlfZnJvbV9jYXJkID0gY29tMjAwMjBfY29weV9mcm9tX2NhcmQ7CiAJbHAtPmh3LmNsb3NlID0gY29tMjAwMjBfY2xvc2U7CiAKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGNvbTIwMDIwX3NldF9tY19saXN0OwotCiAJaWYgKCFkZXYtPmRldl9hZGRyWzBdKQogCQlkZXYtPmRldl9hZGRyWzBdID0gaW5iKGlvYWRkciArIEJVU19BTElHTio4KTsJLyogRklYTUU6IGRvIHRoaXMgc29tZSBvdGhlciB3YXkhICovCiAKQEAgLTM0Miw2ICszNDgsNyBAQAogICAgIGRlZmluZWQoQ09ORklHX0FSQ05FVF9DT00yMDAyMF9DU19NT0RVTEUpCiBFWFBPUlRfU1lNQk9MKGNvbTIwMDIwX2NoZWNrKTsKIEVYUE9SVF9TWU1CT0woY29tMjAwMjBfZm91bmQpOworRVhQT1JUX1NZTUJPTChjb20yMDAyMF9uZXRkZXZfb3BzKTsKICNlbmRpZgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTA1MS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEwNTEuYwppbmRleCA0OWQzOWE5Li4wNmY4ZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTA1MS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMDUxLmMKQEAgLTg4LDcgKzg4LDYgQEAKICAqLwogc3RhdGljIF9fYmUxNiB0eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGFyY25ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhcmNoZHIgKnBrdCA9IChzdHJ1Y3QgYXJjaGRyICopIHNrYi0+ZGF0YTsKIAlzdHJ1Y3QgYXJjX3JmYzEwNTEgKnNvZnQgPSAmcGt0LT5zb2Z0LnJmYzEwNTE7CiAJaW50IGhkcl9zaXplID0gQVJDX0hEUl9TSVpFICsgUkZDMTA1MV9IRFJfU0laRTsKQEAgLTExMiw4ICsxMTEsOCBAQAogCQlyZXR1cm4gaHRvbnMoRVRIX1BfQVJQKTsKIAogCWRlZmF1bHQ6Ci0JCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTQwLDcgKzEzOSw3IEBACiAJc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCArIEFSQ19IRFJfU0laRSwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUJVR01TRyhEX05PUk1BTCwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiX3B1dChza2IsIGxlbmd0aCArIEFSQ19IRFJfU0laRSk7CkBAIC0xNjgsNyArMTY3LDYgQEAKIHN0YXRpYyBpbnQgYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQl1bnNpZ25lZCBzaG9ydCB0eXBlLCB1aW50OF90IGRhZGRyKQogewotCXN0cnVjdCBhcmNuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaGRyX3NpemUgPSBBUkNfSERSX1NJWkUgKyBSRkMxMDUxX0hEUl9TSVpFOwogCXN0cnVjdCBhcmNoZHIgKnBrdCA9IChzdHJ1Y3QgYXJjaGRyICopIHNrYl9wdXNoKHNrYiwgaGRyX3NpemUpOwogCXN0cnVjdCBhcmNfcmZjMTA1MSAqc29mdCA9ICZwa3QtPnNvZnQucmZjMTA1MTsKQEAgLTE4NCw4ICsxODIsOCBAQAogCWRlZmF1bHQ6CiAJCUJVR01TRyhEX05PUk1BTCwgIlJGQzEwNTE6IEkgZG9uJ3QgdW5kZXJzdGFuZCBwcm90b2NvbCAlZCAoJVhoKVxuIiwKIAkJICAgICAgIHR5cGUsIHR5cGUpOwotCQlscC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEyMDEuYyBiL2RyaXZlcnMvbmV0L2FyY25ldC9yZmMxMjAxLmMKaW5kZXggMjMwM2QzYS4uNzQ1NTMwNjUxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJjbmV0L3JmYzEyMDEuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvcmZjMTIwMS5jCkBAIC05Miw3ICs5Miw2IEBACiB7CiAJc3RydWN0IGFyY2hkciAqcGt0ID0gKHN0cnVjdCBhcmNoZHIgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBhcmNfcmZjMTIwMSAqc29mdCA9ICZwa3QtPnNvZnQucmZjMTIwMTsKLQlzdHJ1Y3QgYXJjbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGhkcl9zaXplID0gQVJDX0hEUl9TSVpFICsgUkZDMTIwMV9IRFJfU0laRTsKIAogCS8qIFB1bGwgb2ZmIHRoZSBhcmNuZXQgaGVhZGVyLiAqLwpAQCAtMTIxLDggKzEyMCw4IEBACiAJY2FzZSBBUkNfUF9OT1ZFTExfRUM6CiAJCXJldHVybiBodG9ucyhFVEhfUF84MDJfMyk7CiAJZGVmYXVsdDoKLQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNzIsOCArMTcxLDggQEAKIAkJCSBpbi0+c2VxdWVuY2UsIHNvZnQtPnNwbGl0X2ZsYWcsIHNvZnQtPnNlcXVlbmNlKTsKIAkJCWxwLT5yZmMxMjAxLmFib3J0ZWRfc2VxID0gc29mdC0+c2VxdWVuY2U7CiAJCQlkZXZfa2ZyZWVfc2tiX2lycShpbi0+c2tiKTsKLQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAJCQlpbi0+c2tiID0gTlVMTDsKIAkJfQogCQlpbi0+c2VxdWVuY2UgPSBzb2Z0LT5zZXF1ZW5jZTsKQEAgLTE4MSw3ICsxODAsNyBAQAogCQlza2IgPSBhbGxvY19za2IobGVuZ3RoICsgQVJDX0hEUl9TSVpFLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQlCVUdNU0coRF9OT1JNQUwsICJNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIik7Ci0JCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQlyZXR1cm47CiAJCX0KIAkJc2tiX3B1dChza2IsIGxlbmd0aCArIEFSQ19IRFJfU0laRSk7CkBAIC0yMTMsNyArMjEyLDcgQEAKIAkJCQkJQlVHTVNHKERfRVhUUkEsCiAJCQkJCSAgICAgICAiQVJQIHNvdXJjZSBhZGRyZXNzIHdhcyAwMGgsIHNldCB0byAlMDJYaC5cbiIsCiAJCQkJCSAgICAgICBzYWRkcik7Ci0JCQkJCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJCQkqY3B0ciA9IHNhZGRyOwogCQkJCX0gZWxzZSB7CiAJCQkJCUJVR01TRyhEX0RVUklORywgIkFSUCBzb3VyY2UgYWRkcmVzcyAoJVhoKSBpcyBmaW5lLlxuIiwKQEAgLTIyMiw4ICsyMjEsOCBAQAogCQkJfSBlbHNlIHsKIAkJCQlCVUdNU0coRF9OT1JNQUwsICJmdW5ueS1zaGFwZWQgQVJQIHBhY2tldC4gKCVYaCwgJVhoKVxuIiwKIAkJCQkgICAgICAgYXJwLT5hcl9obG4sIGFycC0+YXJfcGxuKTsKLQkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJfQogCQl9CiAJCUJVR0xWTChEX1NLQikgYXJjbmV0X2R1bXBfc2tiKGRldiwgc2tiLCAicngiKTsKQEAgLTI1Nyw4ICsyNTYsOCBAQAogCQkJICAgICAgIHNvZnQtPnNwbGl0X2ZsYWcpOwogCQkJZGV2X2tmcmVlX3NrYl9pcnEoaW4tPnNrYik7CiAJCQlpbi0+c2tiID0gTlVMTDsKLQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAJCQlpbi0+bGFzdHBhY2tldCA9IGluLT5udW1wYWNrZXRzID0gMDsKIAkJfQogCQlpZiAoc29mdC0+c3BsaXRfZmxhZyAmIDEpIHsJLyogZmlyc3QgcGFja2V0IGluIHNwbGl0ICovCkBAIC0yNjksOCArMjY4LDggQEAKIAkJCQkgICAgICAgIihzcGxpdGZsYWc9JWQsIHNlcT0lZClcbiIsCiAJCQkJICAgICAgIGluLT5zZXF1ZW5jZSwgc29mdC0+c3BsaXRfZmxhZywKIAkJCQkgICAgICAgc29mdC0+c2VxdWVuY2UpOwotCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CiAJCQkJZGV2X2tmcmVlX3NrYl9pcnEoaW4tPnNrYik7CiAJCQl9CiAJCQlpbi0+c2VxdWVuY2UgPSBzb2Z0LT5zZXF1ZW5jZTsKQEAgLTI4MSw4ICsyODAsOCBAQAogCQkJCUJVR01TRyhEX0VYVFJBLCAiaW5jb21pbmcgcGFja2V0IG1vcmUgdGhhbiAxNiBzZWdtZW50czsgZHJvcHBpbmcuIChzcGxpdGZsYWc9JWQpXG4iLAogCQkJCSAgICAgICBzb2Z0LT5zcGxpdF9mbGFnKTsKIAkJCQlscC0+cmZjMTIwMS5hYm9ydGVkX3NlcSA9IHNvZnQtPnNlcXVlbmNlOwotCQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQlscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJcmV0dXJuOwogCQkJfQogCQkJaW4tPnNrYiA9IHNrYiA9IGFsbG9jX3NrYig1MDggKiBpbi0+bnVtcGFja2V0cyArIEFSQ19IRFJfU0laRSwKQEAgLTI5MCw3ICsyODksNyBAQAogCQkJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCQkJQlVHTVNHKERfTk9STUFMLCAiKHNwbGl0KSBtZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIik7CiAJCQkJbHAtPnJmYzEyMDEuYWJvcnRlZF9zZXEgPSBzb2Z0LT5zZXF1ZW5jZTsKLQkJCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCXNrYi0+ZGV2ID0gZGV2OwpAQCAtMzE0LDggKzMxMyw4IEBACiAJCQkJCSAgICAgICAiZmlyc3QhIChzcGxpdGZsYWc9JWQsIHNlcT0lZCwgYWJvcnRlZD0lZClcbiIsCiAJCQkJCXNvZnQtPnNwbGl0X2ZsYWcsIHNvZnQtPnNlcXVlbmNlLAogCQkJCQkgICAgICAgbHAtPnJmYzEyMDEuYWJvcnRlZF9zZXEpOwotCQkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOwogCQkJCX0KIAkJCQlyZXR1cm47CiAJCQl9CkBAIC0zMjUsOCArMzI0LDggQEAKIAkJCQlpZiAocGFja2V0bnVtIDw9IGluLT5sYXN0cGFja2V0IC0gMSkgewogCQkJCQlCVUdNU0coRF9FWFRSQSwgImR1cGxpY2F0ZSBzcGxpdHBhY2tldCBpZ25vcmVkISAoc3BsaXRmbGFnPSVkKVxuIiwKIAkJCQkJICAgICAgIHNvZnQtPnNwbGl0X2ZsYWcpOwotCQkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJCWxwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJCQkJcmV0dXJuOwogCQkJCX0KIAkJCQkvKiAiYmFkIiBkdXBsaWNhdGUsIGtpbGwgcmVhc3NlbWJseSAqLwpAQCAtMzM2LDggKzMzNSw4IEBACiAJCQkJbHAtPnJmYzEyMDEuYWJvcnRlZF9zZXEgPSBzb2Z0LT5zZXF1ZW5jZTsKIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShpbi0+c2tiKTsKIAkJCQlpbi0+c2tiID0gTlVMTDsKLQkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOwogCQkJCWluLT5sYXN0cGFja2V0ID0gaW4tPm51bXBhY2tldHMgPSAwOwogCQkJCXJldHVybjsKIAkJCX0KQEAgLTQwNCw4ICs0MDMsOCBAQAogCWRlZmF1bHQ6CiAJCUJVR01TRyhEX05PUk1BTCwgIlJGQzEyMDE6IEkgZG9uJ3QgdW5kZXJzdGFuZCBwcm90b2NvbCAlZCAoJVhoKVxuIiwKIAkJICAgICAgIHR5cGUsIHR5cGUpOwotCQlscC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jIGIvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCmluZGV4IGMyZDAxMmYuLjRiYzY5MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYworKysgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKQEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAjZGVmaW5lIFRYX0JVRkZFUlMgMTUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMgYi9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCmluZGV4IDNlYzIwY2MuLmNjNzcwODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJCWludCBtb3JlID0gMDsKIAogCQlzcGluX2xvY2tfaXJxKCZlcC0+cnhfbG9jayk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJd3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCB8IFJFR19JTlRFTl9SWCk7CiAJCWlmIChlcDkzeHhfaGF2ZV9tb3JlX3J4KGVwKSkgewogCQkJd3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCk7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAkJfQogCQlzcGluX3VubG9ja19pcnEoJmVwLT5yeF9sb2NrKTsKIAotCQlpZiAobW9yZSAmJiBuZXRpZl9yeF9yZXNjaGVkdWxlKG5hcGkpKQorCQlpZiAobW9yZSAmJiBuYXBpX3Jlc2NoZWR1bGUobmFwaSkpCiAJCQlnb3RvIHBvbGxfc29tZV9tb3JlOwogCX0KIApAQCAtNDE1LDkgKzQxNSw5IEBACiAKIAlpZiAoc3RhdHVzICYgUkVHX0lOVFNUU19SWCkgewogCQlzcGluX2xvY2soJmVwLT5yeF9sb2NrKTsKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZlcC0+bmFwaSkpKSB7CisJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZlcC0+bmFwaSkpKSB7CiAJCQl3cmwoZXAsIFJFR19JTlRFTiwgUkVHX0lOVEVOX1RYKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmVwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmZXAtPm5hcGkpOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZlcC0+cnhfbG9jayk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKaW5kZXggNWZjZTFkNS4uNDQ4NDg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCkBAIC0zMzUsMTEgKzMzNSwyMCBAQAogCWlmICghKG1kaW9fYnVzID0gbWRpb2J1c19hbGxvYygpKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBBbGwgTUlJIFBIWSBhY2Nlc3NlcyB1c2UgTlBFLUIgRXRoZXJuZXQgcmVnaXN0ZXJzICovCi0Jc3Bpbl9sb2NrX2luaXQoJm1kaW9fbG9jayk7Ci0JbWRpb19yZWdzID0gKHN0cnVjdCBldGhfcmVncyBfX2lvbWVtICopSVhQNFhYX0V0aEJfQkFTRV9WSVJUOwotCV9fcmF3X3dyaXRlbChERUZBVUxUX0NPUkVfQ05UUkwsICZtZGlvX3JlZ3MtPmNvcmVfY29udHJvbCk7CisJaWYgKGNwdV9pc19peHA0M3goKSkgeworCQkvKiBJWFA0M3ggbGFja3MgTlBFLUIgYW5kIHVzZXMgTlBFLUMgZm9yIE1JSSBQSFkgYWNjZXNzICovCisJCWlmICghKGl4cDR4eF9yZWFkX2ZlYXR1cmVfYml0cygpICYgSVhQNFhYX0ZFQVRVUkVfTlBFQ19FVEgpKQorCQkJcmV0dXJuIC1FTk9TWVM7CisJCW1kaW9fcmVncyA9IChzdHJ1Y3QgZXRoX3JlZ3MgX19pb21lbSAqKUlYUDRYWF9FdGhDX0JBU0VfVklSVDsKKwl9IGVsc2UgeworCQkvKiBBbGwgTUlJIFBIWSBhY2Nlc3NlcyB1c2UgTlBFLUIgRXRoZXJuZXQgcmVnaXN0ZXJzICovCisJCWlmICghKGl4cDR4eF9yZWFkX2ZlYXR1cmVfYml0cygpICYgSVhQNFhYX0ZFQVRVUkVfTlBFQl9FVEgwKSkKKwkJCXJldHVybiAtRU5PU1lTOworCQltZGlvX3JlZ3MgPSAoc3RydWN0IGV0aF9yZWdzIF9faW9tZW0gKilJWFA0WFhfRXRoQl9CQVNFX1ZJUlQ7CisJfQogCisJX19yYXdfd3JpdGVsKERFRkFVTFRfQ09SRV9DTlRSTCwgJm1kaW9fcmVncy0+Y29yZV9jb250cm9sKTsKKwlzcGluX2xvY2tfaW5pdCgmbWRpb19sb2NrKTsKIAltZGlvX2J1cy0+bmFtZSA9ICJJWFA0eHggTUlJIEJ1cyI7CiAJbWRpb19idXMtPnJlYWQgPSAmaXhwNHh4X21kaW9fcmVhZDsKIAltZGlvX2J1cy0+d3JpdGUgPSAmaXhwNHh4X21kaW9fd3JpdGU7CkBAIC00NzMsNyArNDgyLDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV0aF9yeF9pcnFcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKIAlxbWdyX2Rpc2FibGVfaXJxKHBvcnQtPnBsYXQtPnJ4cSk7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOwogfQogCiBzdGF0aWMgaW50IGV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKQEAgLTQ5OCwxNiArNTA3LDE2IEBACiAKIAkJaWYgKChuID0gcXVldWVfZ2V0X2Rlc2MocnhxLCBwb3J0LCAwKSkgPCAwKSB7CiAjaWYgREVCVUdfUlgKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXRoX3BvbGwgbmV0aWZfcnhfY29tcGxldGVcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV0aF9wb2xsIG5hcGlfY29tcGxldGVcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJcW1ncl9lbmFibGVfaXJxKHJ4cSk7CiAJCQlpZiAoIXFtZ3Jfc3RhdF9lbXB0eShyeHEpICYmCi0JCQkgICAgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkgeworCQkJICAgIG5hcGlfcmVzY2hlZHVsZShuYXBpKSkgewogI2lmIERFQlVHX1JYCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBldGhfcG9sbCIKLQkJCQkgICAgICAgIiBuZXRpZl9yeF9yZXNjaGVkdWxlIHN1Y2Nlc3NlZFxuIiwKKwkJCQkgICAgICAgIiBuYXBpX3Jlc2NoZWR1bGUgc3VjY2Vzc2VkXG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUpOwogI2VuZGlmCiAJCQkJcW1ncl9kaXNhYmxlX2lycShyeHEpOwpAQCAtMTAzNiw3ICsxMDQ1LDcgQEAKIAl9CiAJcG9ydHNfb3BlbisrOwogCS8qIHdlIG1heSBhbHJlYWR5IGhhdmUgUlggZGF0YSwgZW5hYmxlcyBJUlEgKi8KLQluZXRpZl9yeF9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNTAsOSArMTI1OSw2IEBACiBzdGF0aWMgaW50IF9faW5pdCBldGhfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgZXJyOwotCWlmICghKGl4cDR4eF9yZWFkX2ZlYXR1cmVfYml0cygpICYgSVhQNFhYX0ZFQVRVUkVfTlBFQl9FVEgwKSkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KIAlpZiAoKGVyciA9IGl4cDR4eF9tZGlvX3JlZ2lzdGVyKCkpKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJml4cDR4eF9ldGhfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwppbmRleCBmM2ExMjc0Li4zNWNkMjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCkBAIC0xMDU5LDcgKzEwNTksNyBAQAogewogCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBNT0RVTEVOQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybGNweShpbmZvLT52ZXJzaW9uLCBNT0RVTEVWRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwotCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIG5kZXYtPmRldi5wYXJlbnQtPmJ1c19pZCwKKwlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShuZGV2LT5kZXYucGFyZW50KSwKIAkJc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0MTcwMC5jIGIvZHJpdmVycy9uZXQvYXQxNzAwLmMKaW5kZXggNzJlYTZlMy4uMThiNTY2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXQxNzAwLmMKKysrIGIvZHJpdmVycy9uZXQvYXQxNzAwLmMKQEAgLTI0OSw2ICsyNDksMTcgQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF0MTcwMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBuZXRfc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gbmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIFRoZSBGdWppdHN1IGRhdGFzaGVldCBzdWdnZXN0cyB0aGF0IHRoZSBOSUMgYmUgcHJvYmVkIGZvciBieSBjaGVja2luZyBpdHMKICAgICJzaWduYXR1cmUiLCB0aGUgZGVmYXVsdCBiaXQgcGF0dGVybiBhZnRlciBhIHJlc2V0LiAgVGhpcyAqZG9lc24ndCogd29yayAtLQogICAgdGhlcmUgaXMgbm8gd2F5IHRvIHJlc2V0IHRoZSBidXMgaW50ZXJmYWNlIHdpdGhvdXQgYSBjb21wbGV0ZSBwb3dlci1jeWNsZSEKQEAgLTQ0OCwxMyArNDU5LDcgQEAKIAlpZiAobmV0X2RlYnVnKQogCQlwcmludGsodmVyc2lvbik7CiAKLQltZW1zZXQobHAsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2xvY2FsKSk7Ci0KLQlkZXYtPm9wZW4JCT0gbmV0X29wZW47Ci0JZGV2LT5zdG9wCQk9IG5ldF9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG5ldF9zZW5kX3BhY2tldDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLQlkZXYtPnR4X3RpbWVvdXQgPSBuZXRfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYXQxNzAwX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAKIAlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOwpAQCAtODI4LDcgKzgzMyw2IEBACiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGNoYXIgbWNfZmlsdGVyWzhdOwkJIC8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKQEAgLTg1Nyw2ICs4NjEsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZscC0+bG9jaywgZmxhZ3MpOwogCWlmIChtZW1jbXAobWNfZmlsdGVyLCBscC0+bWNfZmlsdGVyLCBzaXplb2YobWNfZmlsdGVyKSkpIHsKKwkJaW50IGk7CiAJCWludCBzYXZlZF9iYW5rID0gaW53KGlvYWRkciArIENPTkZJR18wKTsKIAkJLyogU3dpdGNoIHRvIGJhbmsgMSBhbmQgc2V0IHRoZSBtdWx0aWNhc3QgdGFibGUuICovCiAJCW91dHcoKHNhdmVkX2JhbmsgJiB+MHgwQzAwKSB8IDB4MDQ4MCwgaW9hZGRyICsgQ09ORklHXzApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaCBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKaW5kZXggYWMxMWI4NC4uZTE2NThlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaAorKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWUuaCBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlLmgKaW5kZXggYzQ5NTUwZC4uMmJmNjNiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWUuaAorKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZS5oCkBAIC00NDgsNyArNDQ4LDcgQEAKIAkvKiBBbGwgRGVzY3JpcHRvciBtZW1vcnkgKi8KIAlkbWFfYWRkcl90ICAJcmluZ19kbWE7CiAJdm9pZCAgICAgCSpyaW5nX3Zpcl9hZGRyOwotCWludCAgICAgICAgICAgICByaW5nX3NpemU7CisJdTMyICAgICAgICAgICAgIHJpbmdfc2l6ZTsKIAogCXN0cnVjdCBhdGwxZV90eF9yaW5nIHR4X3Jpbmc7CiAJc3RydWN0IGF0bDFlX3J4X3JpbmcgcnhfcmluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYwppbmRleCBiYjkwOTRkLi5jNzU4ODg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCkBAIC0xMzI2LDkgKzEzMjYsOSBAQAogCQkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfSU1SLAogCQkJCSAgICAgSU1SX05PUk1BTF9NQVNLICYgfklTUl9SWF9FVkVOVCk7CiAJCQlBVF9XUklURV9GTFVTSChodyk7Ci0JCQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoCisJCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgKIAkJCQkgICAmYWRhcHRlci0+bmFwaSkpKQotCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCQkJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJCX0KIAl9IHdoaWxlICgtLW1heF9pbnRzID4gMCk7CiAJLyogcmUtZW5hYmxlIEludGVycnVwdCovCkBAIC0xNTE0LDcgKzE1MTQsNyBAQAogCS8qIElmIG5vIFR4IGFuZCBub3QgZW5vdWdoIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogcXVpdF9wb2xsaW5nOgotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaW1yX2RhdGEgPSBBVF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFJFR19JTVIpOwogCQlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfSU1SLCBpbXJfZGF0YSB8IElTUl9SWF9FVkVOVCk7CiAJCS8qIHRlc3QgZGVidWcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9wYXJhbS5jCmluZGV4IGY3MmFiYjMuLmIzYmU1OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfcGFyYW0uYwpAQCAtNDEsNyArNDEsNyBAQAogCiAjZGVmaW5lIEFUTDFFX1BBUkFNKHgsIGRlc2MpIFwKIAlzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgeFtBVEwxRV9NQVhfTklDICsgMV0gPSBBVEwxRV9QQVJBTV9JTklUOyBcCi0Jc3RhdGljIGludCBudW1fIyN4OyBcCisJc3RhdGljIHVuc2lnbmVkIGludCBudW1fIyN4OyBcCiAJbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKHgsIHgsIGludCwgJm51bV8jI3gsIDApOyBcCiAJTU9EVUxFX1BBUk1fREVTQyh4LCBkZXNjKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYwppbmRleCBjMGNlZWUwLi40M2ZjMWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYworKysgYi9kcml2ZXJzL25ldC9hdGx4L2F0bDEuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAgKiBEZWZhdWx0IFZhbHVlOiAxMDAgKDIwMHVzKQogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgaW50X21vZF90aW1lcltBVEwxX01BWF9OSUMrMV0gPSBBVEwxX1BBUkFNX0lOSVQ7Ci1zdGF0aWMgaW50IG51bV9pbnRfbW9kX3RpbWVyOworc3RhdGljIHVuc2lnbmVkIGludCBudW1faW50X21vZF90aW1lcjsKIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChpbnRfbW9kX3RpbWVyLCBpbnRfbW9kX3RpbWVyLCBpbnQsCiAJJm51bV9pbnRfbW9kX3RpbWVyLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoaW50X21vZF90aW1lciwgIkludGVycnVwdCBtb2RlcmF0b3IgdGltZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKaW5kZXggYmMzOTQ0OS4uOWZlMDZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwyLmMKQEAgLTI4NTQsNyArMjg1NCw3IEBACiAjZWxzZQogI2RlZmluZSBBVEwyX1BBUkFNKFgsIGRlc2MpIFwKICAgICBzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgWFtBVEwyX01BWF9OSUMrMV0gPSBBVEwyX1BBUkFNX0lOSVQ7IFwKLSAgICBzdGF0aWMgaW50IG51bV8jI1ggPSAwOyBcCisgICAgc3RhdGljIHVuc2lnbmVkIGludCBudW1fIyNYOyBcCiAgICAgbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKFgsIFgsIGludCwgJm51bV8jI1gsIDApOyBcCiAgICAgTU9EVUxFX1BBUk1fREVTQyhYLCBkZXNjKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IDljODc1YmIuLjQyNzRlNGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC04MSwyNCArODEsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotLy8gcHJvdG90eXBlcwotc3RhdGljIHZvaWQgaGFyZF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgZW5hYmxlX3J4X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICogYXUxMDAwX3Byb2JlKGludCBwb3J0X251bSk7Ci1zdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBhdTEwMDBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpbnQgYXUxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIGludCBhdTEwMDBfdHgoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyBpcnFyZXR1cm5fdCBhdTEwMDBfaW50ZXJydXB0KGludCwgdm9pZCAqKTsKLXN0YXRpYyB2b2lkIGF1MTAwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IGF1MTAwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50KTsKLXN0YXRpYyBpbnQgYXUxMDAwX21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCk7Ci1zdGF0aWMgdm9pZCBhdTEwMDBfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQsIGludCwgdTE2KTsKLXN0YXRpYyB2b2lkIGF1MTAwMF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKLXN0YXRpYyB2b2lkIGVuYWJsZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50KTsKLQogLyoKICAqIFRoZW9yeSBvZiBvcGVyYXRpb24KICAqCkBAIC0xODgsNiArMTcwLDI2IEBACiAjIGVycm9yIE1BQzAtYXNzb2NpYXRlZCBQSFkgYXR0YWNoZWQgMm5kIE1BQ3MgTUlJIGJ1cyBub3Qgc3VwcG9ydGVkIHlldAogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIGVuYWJsZV9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlX3Jlc2V0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJaWYoZm9yY2VfcmVzZXQgfHwgKCFhdXAtPm1hY19lbmFibGVkKSkgeworCQkqYXVwLT5lbmFibGUgPSBNQUNfRU5fQ0xPQ0tfRU5BQkxFOworCQlhdV9zeW5jX2RlbGF5KDIpOworCQkqYXVwLT5lbmFibGUgPSAoTUFDX0VOX1JFU0VUMCB8IE1BQ19FTl9SRVNFVDEgfCBNQUNfRU5fUkVTRVQyCisJCQkJfCBNQUNfRU5fQ0xPQ0tfRU5BQkxFKTsKKwkJYXVfc3luY19kZWxheSgyKTsKKworCQlhdXAtPm1hY19lbmFibGVkID0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKK30KKwogLyoKICAqIE1JSSBvcGVyYXRpb25zCiAgKi8KQEAgLTI4MSw2ICsyODMsMTA3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGhhcmRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoS0VSTl9JTkZPICIlczogaGFyZCBzdG9wXG4iLCBkZXYtPm5hbWUpOworCisJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfihNQUNfUlhfRU5BQkxFIHwgTUFDX1RYX0VOQUJMRSk7CisJYXVfc3luY19kZWxheSgxMCk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9yeF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoS0VSTl9JTkZPICIlczogZW5hYmxlX3J4X3R4XG4iLCBkZXYtPm5hbWUpOworCisJYXVwLT5tYWMtPmNvbnRyb2wgfD0gKE1BQ19SWF9FTkFCTEUgfCBNQUNfVFhfRU5BQkxFKTsKKwlhdV9zeW5jX2RlbGF5KDEwKTsKK30KKworc3RhdGljIHZvaWQKK2F1MTAwMF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gYXVwLT5waHlfZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpbnQgc3RhdHVzX2NoYW5nZSA9IDA7CisKKwlCVUdfT04oIWF1cC0+cGh5X2Rldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7CisKKwlpZiAocGh5ZGV2LT5saW5rICYmIChhdXAtPm9sZF9zcGVlZCAhPSBwaHlkZXYtPnNwZWVkKSkgeworCQkvLyBzcGVlZCBjaGFuZ2VkCisKKwkJc3dpdGNoKHBoeWRldi0+c3BlZWQpIHsKKwkJY2FzZSBTUEVFRF8xMDoKKwkJY2FzZSBTUEVFRF8xMDA6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IFNwZWVkICglZCkgaXMgbm90IDEwLzEwMCA/Pz9cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYXVwLT5vbGRfc3BlZWQgPSBwaHlkZXYtPnNwZWVkOworCisJCXN0YXR1c19jaGFuZ2UgPSAxOworCX0KKworCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX2R1cGxleCAhPSBwaHlkZXYtPmR1cGxleCkpIHsKKwkJLy8gZHVwbGV4IG1vZGUgY2hhbmdlZAorCisJCS8qIHN3aXRjaGluZyBkdXBsZXggbW9kZSByZXF1aXJlcyB0byBkaXNhYmxlIHJ4IGFuZCB0eCEgKi8KKwkJaGFyZF9zdG9wKGRldik7CisKKwkJaWYgKERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4KQorCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCisJCQkJCSAgICAgfCBNQUNfRlVMTF9EVVBMRVgpCisJCQkJCSAgICAgJiB+TUFDX0RJU0FCTEVfUlhfT1dOKTsKKwkJZWxzZQorCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCisJCQkJCSAgICAgICYgfk1BQ19GVUxMX0RVUExFWCkKKwkJCQkJICAgICB8IE1BQ19ESVNBQkxFX1JYX09XTik7CisJCWF1X3N5bmNfZGVsYXkoMSk7CisKKwkJZW5hYmxlX3J4X3R4KGRldik7CisJCWF1cC0+b2xkX2R1cGxleCA9IHBoeWRldi0+ZHVwbGV4OworCisJCXN0YXR1c19jaGFuZ2UgPSAxOworCX0KKworCWlmKHBoeWRldi0+bGluayAhPSBhdXAtPm9sZF9saW5rKSB7CisJCS8vIGxpbmsgc3RhdGUgY2hhbmdlZAorCisJCWlmICghcGh5ZGV2LT5saW5rKSB7CisJCQkvKiBsaW5rIHdlbnQgZG93biAqLworCQkJYXVwLT5vbGRfc3BlZWQgPSAwOworCQkJYXVwLT5vbGRfZHVwbGV4ID0gLTE7CisJCX0KKworCQlhdXAtPm9sZF9saW5rID0gcGh5ZGV2LT5saW5rOworCQlzdGF0dXNfY2hhbmdlID0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCWlmIChzdGF0dXNfY2hhbmdlKSB7CisJCWlmIChwaHlkZXYtPmxpbmspCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cCAoJWQvJXMpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCwKKwkJCSAgICAgICBEVVBMRVhfRlVMTCA9PSBwaHlkZXYtPmR1cGxleCA/ICJGdWxsIiA6ICJIYWxmIik7CisJCWVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CisJfQorfQorCiBzdGF0aWMgaW50IG1paV9wcm9iZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zNTUsOCArNDU4LDggQEAKIAkvKiBub3cgd2UgYXJlIHN1cHBvc2VkIHRvIGhhdmUgYSBwcm9wZXIgcGh5ZGV2LCB0byBhdHRhY2ggdG8uLi4gKi8KIAlCVUdfT04ocGh5ZGV2LT5hdHRhY2hlZF9kZXYpOwogCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsICZhdTEwMDBfYWRqdXN0X2xpbmssIDAsCi0JCQlQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksICZhdTEwMDBfYWRqdXN0X2xpbmssCisJCQkwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwgZGV2LT5uYW1lKTsKQEAgLTM4MSw4ICs0ODQsOCBAQAogCWF1cC0+cGh5X2RldiA9IHBoeWRldjsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgotCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19pZCwgcGh5ZGV2LT5pcnEpOworCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDEyLDQ4ICs1MTUsNiBAQAogCWF1cC0+cERCZnJlZSA9IHBEQjsKIH0KIAotc3RhdGljIHZvaWQgZW5hYmxlX3J4X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBlbmFibGVfcnhfdHhcbiIsIGRldi0+bmFtZSk7Ci0KLQlhdXAtPm1hYy0+Y29udHJvbCB8PSAoTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEUpOwotCWF1X3N5bmNfZGVsYXkoMTApOwotfQotCi1zdGF0aWMgdm9pZCBoYXJkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGhhcmQgc3RvcFxuIiwgZGV2LT5uYW1lKTsKLQotCWF1cC0+bWFjLT5jb250cm9sICY9IH4oTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEUpOwotCWF1X3N5bmNfZGVsYXkoMTApOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmb3JjZV9yZXNldCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCWlmKGZvcmNlX3Jlc2V0IHx8ICghYXVwLT5tYWNfZW5hYmxlZCkpIHsKLQkJKmF1cC0+ZW5hYmxlID0gTUFDX0VOX0NMT0NLX0VOQUJMRTsKLQkJYXVfc3luY19kZWxheSgyKTsKLQkJKmF1cC0+ZW5hYmxlID0gKE1BQ19FTl9SRVNFVDAgfCBNQUNfRU5fUkVTRVQxIHwgTUFDX0VOX1JFU0VUMgotCQkJCXwgTUFDX0VOX0NMT0NLX0VOQUJMRSk7Ci0JCWF1X3N5bmNfZGVsYXkoMik7Ci0KLQkJYXVwLT5tYWNfZW5hYmxlZCA9IDE7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJlc2V0X21hY191bmxvY2tlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqY29uc3QgYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTU0MiwzMCArNjAzLDYgQEAKIHN0YXRpYyBpbnQgbnVtX2lmczsKIAogLyoKLSAqIFNldHVwIHRoZSBiYXNlIGFkZHJlc3MgYW5kIGludGVycnVwdCBvZiB0aGUgQXUxeHh4IGV0aGVybmV0IG1hY3MKLSAqIGJhc2VkIG9uIGNwdSB0eXBlIGFuZCB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZCBpbiBzeXNfcGluZnVuYwotICogcmVnaXN0ZXIuIFRoZSBsYXN0IGludGVyZmFjZSBpcyBlbmFibGVkIGlmIFNZU19QRl9OSTIgKGJpdCA0KSBpcyAwLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlpbnQgbmkgPSAoaW50KSgoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMikoU1lTX1BGX05JMikpID4+IDQpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JaW50IGksIGZvdW5kX29uZSA9IDA7Ci0KLQludW1faWZzID0gTlVNX0VUSF9JTlRFUkZBQ0VTIC0gbmk7Ci0KLQlmb3IoaSA9IDA7IGkgPCBudW1faWZzOyBpKyspIHsKLQkJZGV2ID0gYXUxMDAwX3Byb2JlKGkpOwotCQlpZmxpc3RbaV0uZGV2ID0gZGV2OwotCQlpZiAoZGV2KQotCQkJZm91bmRfb25lKys7Ci0JfQotCWlmICghZm91bmRfb25lKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIGV0aHRvb2wgb3BlcmF0aW9ucwogICovCiAKQEAgLTYxMSw2ICs2NDgsNDA1IEBACiAJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGludGVyZmFjZS4KKyAqCisgKiBXaGVuIHRoZSBkZXZpY2UgcG93ZXJzIHVwLCB0aGUgY2xvY2tzIGFyZSBkaXNhYmxlZCBhbmQgdGhlCisgKiBtYWMgaXMgaW4gcmVzZXQgc3RhdGUuICBXaGVuIHRoZSBpbnRlcmZhY2UgaXMgY2xvc2VkLCB3ZQorICogZG8gdGhlIHNhbWUgLS0gcmVzZXQgdGhlIGRldmljZSBhbmQgZGlzYWJsZSB0aGUgY2xvY2tzIHRvCisgKiBjb25zZXJ2ZSBwb3dlci4gVGh1cywgd2hlbmV2ZXIgYXUxMDAwX2luaXQoKSBpcyBjYWxsZWQsCisgKiB0aGUgZGV2aWNlIHNob3VsZCBhbHJlYWR5IGJlIGluIHJlc2V0IHN0YXRlLgorICovCitzdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisJdTMyIGNvbnRyb2w7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKCIlczogYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7CisKKwkvKiBicmluZyB0aGUgZGV2aWNlIG91dCBvZiByZXNldCAqLworCWVuYWJsZV9tYWMoZGV2LCAxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCWF1cC0+bWFjLT5jb250cm9sID0gMDsKKwlhdXAtPnR4X2hlYWQgPSAoYXVwLT50eF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+PiAyOworCWF1cC0+dHhfdGFpbCA9IGF1cC0+dHhfaGVhZDsKKwlhdXAtPnJ4X2hlYWQgPSAoYXVwLT5yeF9kbWFfcmluZ1swXS0+YnVmZl9zdGF0ICYgMHhDKSA+PiAyOworCisJYXVwLT5tYWMtPm1hY19hZGRyX2hpZ2ggPSBkZXYtPmRldl9hZGRyWzVdPDw4IHwgZGV2LT5kZXZfYWRkcls0XTsKKwlhdXAtPm1hYy0+bWFjX2FkZHJfbG93ID0gZGV2LT5kZXZfYWRkclszXTw8MjQgfCBkZXYtPmRldl9hZGRyWzJdPDwxNiB8CisJCWRldi0+ZGV2X2FkZHJbMV08PDggfCBkZXYtPmRldl9hZGRyWzBdOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9ETUE7IGkrKykgeworCQlhdXAtPnJ4X2RtYV9yaW5nW2ldLT5idWZmX3N0YXQgfD0gUlhfRE1BX0VOQUJMRTsKKwl9CisJYXVfc3luYygpOworCisJY29udHJvbCA9IE1BQ19SWF9FTkFCTEUgfCBNQUNfVFhfRU5BQkxFOworI2lmbmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KKwljb250cm9sIHw9IE1BQ19CSUdfRU5ESUFOOworI2VuZGlmCisJaWYgKGF1cC0+cGh5X2RldikgeworCQlpZiAoYXVwLT5waHlfZGV2LT5saW5rICYmIChEVVBMRVhfRlVMTCA9PSBhdXAtPnBoeV9kZXYtPmR1cGxleCkpCisJCQljb250cm9sIHw9IE1BQ19GVUxMX0RVUExFWDsKKwkJZWxzZQorCQkJY29udHJvbCB8PSBNQUNfRElTQUJMRV9SWF9PV047CisJfSBlbHNlIHsgLyogUEhZLWxlc3Mgb3AsIGFzc3VtZSBmdWxsLWR1cGxleCAqLworCQljb250cm9sIHw9IE1BQ19GVUxMX0RVUExFWDsKKwl9CisKKwlhdXAtPm1hYy0+Y29udHJvbCA9IGNvbnRyb2w7CisJYXVwLT5tYWMtPnZsYW4xX3RhZyA9IDB4ODEwMDsgLyogYWN0aXZhdGUgdmxhbiBzdXBwb3J0ICovCisJYXVfc3luYygpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXVwLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfcnhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7CisKKwlwcy0+cnhfcGFja2V0cysrOworCWlmIChzdGF0dXMgJiBSWF9NQ0FTVF9GUkFNRSkKKwkJcHMtPm11bHRpY2FzdCsrOworCisJaWYgKHN0YXR1cyAmIFJYX0VSUk9SKSB7CisJCXBzLT5yeF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkKKwkJCXBzLT5yeF9taXNzZWRfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiAoUlhfT1ZFUkxFTiB8IFJYX09WRVJMRU4gfCBSWF9MRU5fRVJST1IpKQorCQkJcHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIFJYX0NSQ19FUlJPUikKKwkJCXBzLT5yeF9jcmNfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiBSWF9DT0xMKQorCQkJcHMtPmNvbGxpc2lvbnMrKzsKKwl9CisJZWxzZQorCQlwcy0+cnhfYnl0ZXMgKz0gc3RhdHVzICYgUlhfRlJBTUVfTEVOX01BU0s7CisKK30KKworLyoKKyAqIEF1MTAwMCByZWNlaXZlIHJvdXRpbmUuCisgKi8KK3N0YXRpYyBpbnQgYXUxMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBza19idWZmICpza2I7CisJdm9sYXRpbGUgcnhfZG1hX3QgKnByeGQ7CisJdTMyIGJ1ZmZfc3RhdCwgc3RhdHVzOworCWRiX2Rlc3RfdCAqcERCOworCXUzMglmcm1sZW47CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNSkKKwkJcHJpbnRrKCIlczogYXUxMDAwX3J4IGhlYWQgJWRcbiIsIGRldi0+bmFtZSwgYXVwLT5yeF9oZWFkKTsKKworCXByeGQgPSBhdXAtPnJ4X2RtYV9yaW5nW2F1cC0+cnhfaGVhZF07CisJYnVmZl9zdGF0ID0gcHJ4ZC0+YnVmZl9zdGF0OworCXdoaWxlIChidWZmX3N0YXQgJiBSWF9UX0RPTkUpICB7CisJCXN0YXR1cyA9IHByeGQtPnN0YXR1czsKKwkJcERCID0gYXVwLT5yeF9kYl9pbnVzZVthdXAtPnJ4X2hlYWRdOworCQl1cGRhdGVfcnhfc3RhdHMoZGV2LCBzdGF0dXMpOworCQlpZiAoIShzdGF0dXMgJiBSWF9FUlJPUikpICB7CisKKwkJCS8qIGdvb2QgZnJhbWUgKi8KKwkJCWZybWxlbiA9IChzdGF0dXMgJiBSWF9GUkFNRV9MRU5fTUFTSyk7CisJCQlmcm1sZW4gLT0gNDsgLyogUmVtb3ZlIEZDUyAqLworCQkJc2tiID0gZGV2X2FsbG9jX3NrYihmcm1sZW4gKyAyKTsKKwkJCWlmIChza2IgPT0gTlVMTCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogMTYgYnl0ZSBJUCBoZWFkZXIgYWxpZ24gKi8KKwkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwKKwkJCQkodW5zaWduZWQgY2hhciAqKXBEQi0+dmFkZHIsIGZybWxlbik7CisJCQlza2JfcHV0KHNrYiwgZnJtbGVuKTsKKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQluZXRpZl9yeChza2IpOwkvKiBwYXNzIHRoZSBwYWNrZXQgdG8gdXBwZXIgbGF5ZXJzICovCisJCX0KKwkJZWxzZSB7CisJCQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgeworCQkJCWlmIChzdGF0dXMgJiBSWF9NSVNTRURfRlJBTUUpCisJCQkJCXByaW50aygicnggbWlzc1xuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX1dET0dfVElNRVIpCisJCQkJCXByaW50aygicnggd2RvZ1xuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX1JVTlQpCisJCQkJCXByaW50aygicnggcnVudFxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX09WRVJMRU4pCisJCQkJCXByaW50aygicnggb3ZlcmxlblxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX0NPTEwpCisJCQkJCXByaW50aygicnggY29sbFxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX01JSV9FUlJPUikKKwkJCQkJcHJpbnRrKCJyeCBtaWkgZXJyb3JcbiIpOworCQkJCWlmIChzdGF0dXMgJiBSWF9DUkNfRVJST1IpCisJCQkJCXByaW50aygicnggY3JjIGVycm9yXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfTEVOX0VSUk9SKQorCQkJCQlwcmludGsoInJ4IGxlbiBlcnJvclxuIik7CisJCQkJaWYgKHN0YXR1cyAmIFJYX1VfQ05UUkxfRlJBTUUpCisJCQkJCXByaW50aygicnggdSBjb250cm9sIGZyYW1lXG4iKTsKKwkJCQlpZiAoc3RhdHVzICYgUlhfTUlTU0VEX0ZSQU1FKQorCQkJCQlwcmludGsoInJ4IG1pc3NcbiIpOworCQkJfQorCQl9CisJCXByeGQtPmJ1ZmZfc3RhdCA9ICh1MzIpKHBEQi0+ZG1hX2FkZHIgfCBSWF9ETUFfRU5BQkxFKTsKKwkJYXVwLT5yeF9oZWFkID0gKGF1cC0+cnhfaGVhZCArIDEpICYgKE5VTV9SWF9ETUEgLSAxKTsKKwkJYXVfc3luYygpOworCisJCS8qIG5leHQgZGVzY3JpcHRvciAqLworCQlwcnhkID0gYXVwLT5yeF9kbWFfcmluZ1thdXAtPnJ4X2hlYWRdOworCQlidWZmX3N0YXQgPSBwcnhkLT5idWZmX3N0YXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfdHhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7CisKKwlpZiAoc3RhdHVzICYgVFhfRlJBTUVfQUJPUlRFRCkgeworCQlpZiAoIWF1cC0+cGh5X2RldiB8fCAoRFVQTEVYX0ZVTEwgPT0gYXVwLT5waHlfZGV2LT5kdXBsZXgpKSB7CisJCQlpZiAoc3RhdHVzICYgKFRYX0pBQl9USU1FT1VUIHwgVFhfVU5ERVJSVU4pKSB7CisJCQkJLyogYW55IG90aGVyIHR4IGVycm9ycyBhcmUgb25seSB2YWxpZAorCQkJCSAqIGluIGhhbGYgZHVwbGV4IG1vZGUgKi8KKwkJCQlwcy0+dHhfZXJyb3JzKys7CisJCQkJcHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQlwcy0+dHhfZXJyb3JzKys7CisJCQlwcy0+dHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCWlmIChzdGF0dXMgJiAoVFhfTk9fQ0FSUklFUiB8IFRYX0xPU1NfQ0FSUklFUikpCisJCQkJcHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byBhY2tub3dsZWRnZQorICogdGhlIFRYIERPTkUgYml0cy4gIFRoaXMgaXMgYSBtdXN0IGlmIHRoZSBpcnEgaXMgc2V0dXAgYXMKKyAqIGVkZ2UgdHJpZ2dlcmVkLgorICovCitzdGF0aWMgdm9pZCBhdTEwMDBfdHhfYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXZvbGF0aWxlIHR4X2RtYV90ICpwdHhkOworCisJcHR4ZCA9IGF1cC0+dHhfZG1hX3JpbmdbYXVwLT50eF90YWlsXTsKKworCXdoaWxlIChwdHhkLT5idWZmX3N0YXQgJiBUWF9UX0RPTkUpIHsKKwkJdXBkYXRlX3R4X3N0YXRzKGRldiwgcHR4ZC0+c3RhdHVzKTsKKwkJcHR4ZC0+YnVmZl9zdGF0ICY9IH5UWF9UX0RPTkU7CisJCXB0eGQtPmxlbiA9IDA7CisJCWF1X3N5bmMoKTsKKworCQlhdXAtPnR4X3RhaWwgPSAoYXVwLT50eF90YWlsICsgMSkgJiAoTlVNX1RYX0RNQSAtIDEpOworCQlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X3RhaWxdOworCisJCWlmIChhdXAtPnR4X2Z1bGwpIHsKKwkJCWF1cC0+dHhfZnVsbCA9IDA7CisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCX0KKwl9Cit9CisKKy8qCisgKiBBdTEwMDAgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KKyAqLworc3RhdGljIGlycXJldHVybl90IGF1MTAwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisKKwkvKiBIYW5kbGUgUlggaW50ZXJydXB0cyBmaXJzdCB0byBtaW5pbWl6ZSBjaGFuY2Ugb2Ygb3ZlcnJ1biAqLworCisJYXUxMDAwX3J4KGRldik7CisJYXUxMDAwX3R4X2FjayhkZXYpOworCXJldHVybiBJUlFfUkVUVkFMKDEpOworfQorCitzdGF0aWMgaW50IGF1MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKCIlczogb3BlbjogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7CisKKwlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmYXUxMDAwX2ludGVycnVwdCwgMCwKKwkJCQkJZGV2LT5uYW1lLCBkZXYpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoKHJldHZhbCA9IGF1MTAwMF9pbml0KGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUpOworCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoYXVwLT5waHlfZGV2KSB7CisJCS8qIGNhdXNlIHRoZSBQSFkgc3RhdGUgbWFjaGluZSB0byBzY2hlZHVsZSBhIGxpbmsgc3RhdGUgY2hlY2sgKi8KKwkJYXVwLT5waHlfZGV2LT5zdGF0ZSA9IFBIWV9DSEFOR0VMSU5LOworCQlwaHlfc3RhcnQoYXVwLT5waHlfZGV2KTsKKwl9CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCisJCXByaW50aygiJXM6IG9wZW46IEluaXRpYWxpemF0aW9uIGRvbmUuXG4iLCBkZXYtPm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXUxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoYXUxMDAwX2RlYnVnID4gNCkKKwkJcHJpbnRrKCIlczogY2xvc2U6IGRldj0lcFxuIiwgZGV2LT5uYW1lLCBkZXYpOworCisJaWYgKGF1cC0+cGh5X2RldikKKwkJcGh5X3N0b3AoYXVwLT5waHlfZGV2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKKworCXJlc2V0X21hY191bmxvY2tlZCAoZGV2KTsKKworCS8qIHN0b3AgdGhlIGRldmljZSAqLworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCS8qIGRpc2FibGUgdGhlIGludGVycnVwdCAqLworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBdTEwMDAgdHJhbnNtaXQgcm91dGluZS4KKyAqLworc3RhdGljIGludCBhdTEwMDBfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7CisJdm9sYXRpbGUgdHhfZG1hX3QgKnB0eGQ7CisJdTMyIGJ1ZmZfc3RhdDsKKwlkYl9kZXN0X3QgKnBEQjsKKwlpbnQgaTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA1KQorCQlwcmludGsoIiVzOiB0eDogYXVwICV4IGxlbj0lZCwgZGF0YT0lcCwgaGVhZCAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsICh1bnNpZ25lZClhdXAsIHNrYi0+bGVuLAorCQkJCXNrYi0+ZGF0YSwgYXVwLT50eF9oZWFkKTsKKworCXB0eGQgPSBhdXAtPnR4X2RtYV9yaW5nW2F1cC0+dHhfaGVhZF07CisJYnVmZl9zdGF0ID0gcHR4ZC0+YnVmZl9zdGF0OworCWlmIChidWZmX3N0YXQgJiBUWF9ETUFfRU5BQkxFKSB7CisJCS8qIFdlJ3ZlIHdyYXBwZWQgYXJvdW5kIGFuZCB0aGUgdHJhbnNtaXR0ZXIgaXMgc3RpbGwgYnVzeSAqLworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCWF1cC0+dHhfZnVsbCA9IDE7CisJCXJldHVybiAxOworCX0KKwllbHNlIGlmIChidWZmX3N0YXQgJiBUWF9UX0RPTkUpIHsKKwkJdXBkYXRlX3R4X3N0YXRzKGRldiwgcHR4ZC0+c3RhdHVzKTsKKwkJcHR4ZC0+bGVuID0gMDsKKwl9CisKKwlpZiAoYXVwLT50eF9mdWxsKSB7CisJCWF1cC0+dHhfZnVsbCA9IDA7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwl9CisKKwlwREIgPSBhdXAtPnR4X2RiX2ludXNlW2F1cC0+dHhfaGVhZF07CisJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHBEQi0+dmFkZHIsIHNrYi0+bGVuKTsKKwlpZiAoc2tiLT5sZW4gPCBFVEhfWkxFTikgeworCQlmb3IgKGk9c2tiLT5sZW47IGk8RVRIX1pMRU47IGkrKykgeworCQkJKChjaGFyICopcERCLT52YWRkcilbaV0gPSAwOworCQl9CisJCXB0eGQtPmxlbiA9IEVUSF9aTEVOOworCX0KKwllbHNlCisJCXB0eGQtPmxlbiA9IHNrYi0+bGVuOworCisJcHMtPnR4X3BhY2tldHMrKzsKKwlwcy0+dHhfYnl0ZXMgKz0gcHR4ZC0+bGVuOworCisJcHR4ZC0+YnVmZl9zdGF0ID0gcERCLT5kbWFfYWRkciB8IFRYX0RNQV9FTkFCTEU7CisJYXVfc3luYygpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlhdXAtPnR4X2hlYWQgPSAoYXVwLT50eF9oZWFkICsgMSkgJiAoTlVNX1RYX0RNQSAtIDEpOworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCXJldHVybiAwOworfQorCisvKgorICogVGhlIFR4IHJpbmcgaGFzIGJlZW4gZnVsbCBsb25nZXIgdGhhbiB0aGUgd2F0Y2hkb2cgdGltZW91dAorICogdmFsdWUuIFRoZSB0cmFuc21pdHRlciBtdXN0IGJlIGh1bmc/CisgKi8KK3N0YXRpYyB2b2lkIGF1MTAwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcHJpbnRrKEtFUk5fRVJSICIlczogYXUxMDAwX3R4X3RpbWVvdXQ6IGRldj0lcFxuIiwgZGV2LT5uYW1lLCBkZXYpOworCXJlc2V0X21hYyhkZXYpOworCWF1MTAwMF9pbml0KGRldik7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChhdTEwMDBfZGVidWcgPiA0KQorCQlwcmludGsoIiVzOiBzZXRfcnhfbW9kZTogZmxhZ3M9JXhcbiIsIGRldi0+bmFtZSwgZGV2LT5mbGFncyk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLworCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfUFJPTUlTQ1VPVVM7CisJfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgIHx8CisJCQkgICBkZXYtPm1jX2NvdW50ID4gTVVMVElDQVNUX0ZJTFRFUl9MSU1JVCkgeworCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfUEFTU19BTExfTVVMVEk7CisJCWF1cC0+bWFjLT5jb250cm9sICY9IH5NQUNfUFJPTUlTQ1VPVVM7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQYXNzIGFsbCBtdWx0aWNhc3RcbiIsIGRldi0+bmFtZSk7CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCQl1MzIgbWNfZmlsdGVyWzJdOwkvKiBNdWx0aWNhc3QgaGFzaCBmaWx0ZXIgKi8KKworCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOworCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKKwkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQkJc2V0X2JpdChldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpPj4yNiwKKwkJCQkJKGxvbmcgKiltY19maWx0ZXIpOworCQl9CisJCWF1cC0+bWFjLT5tdWx0aV9oYXNoX2hpZ2ggPSBtY19maWx0ZXJbMV07CisJCWF1cC0+bWFjLT5tdWx0aV9oYXNoX2xvdyA9IG1jX2ZpbHRlclswXTsKKwkJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfk1BQ19QUk9NSVNDVU9VUzsKKwkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX0hBU0hfTU9ERTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXUxMDAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCit7CisJc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHJldHVybiAtRUlOVkFMOworCisJaWYgKCFhdXAtPnBoeV9kZXYpIHJldHVybiAtRUlOVkFMOyAvLyBQSFkgbm90IGNvbnRyb2xsYWJsZQorCisJcmV0dXJuIHBoeV9taWlfaW9jdGwoYXVwLT5waHlfZGV2LCBpZl9taWkocnEpLCBjbWQpOworfQorCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBhdTEwMDBfcHJvYmUoaW50IHBvcnRfbnVtKQogewogCXN0YXRpYyB1bnNpZ25lZCB2ZXJzaW9uX3ByaW50ZWQgPSAwOwpAQCAtNjIyLDcgKzEwNTgsNyBAQAogCXUzMiBiYXNlLCBtYWNlbjsKIAogCWlmIChwb3J0X251bSA+PSBOVU1fRVRIX0lOVEVSRkFDRVMpCi0gCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIE5VTEw7CiAKIAliYXNlICA9IENQSFlTQUREUihpZmxpc3RbcG9ydF9udW1dLmJhc2VfYWRkciApOwogCW1hY2VuID0gQ1BIWVNBRERSKGlmbGlzdFtwb3J0X251bV0ubWFjZW5fYWRkcik7CkBAIC04MDYsMjAwICsxMjQyLDI2IEBACiB9CiAKIC8qCi0gKiBJbml0aWFsaXplIHRoZSBpbnRlcmZhY2UuCi0gKgotICogV2hlbiB0aGUgZGV2aWNlIHBvd2VycyB1cCwgdGhlIGNsb2NrcyBhcmUgZGlzYWJsZWQgYW5kIHRoZQotICogbWFjIGlzIGluIHJlc2V0IHN0YXRlLiAgV2hlbiB0aGUgaW50ZXJmYWNlIGlzIGNsb3NlZCwgd2UKLSAqIGRvIHRoZSBzYW1lIC0tIHJlc2V0IHRoZSBkZXZpY2UgYW5kIGRpc2FibGUgdGhlIGNsb2NrcyB0bwotICogY29uc2VydmUgcG93ZXIuIFRodXMsIHdoZW5ldmVyIGF1MTAwMF9pbml0KCkgaXMgY2FsbGVkLAotICogdGhlIGRldmljZSBzaG91bGQgYWxyZWFkeSBiZSBpbiByZXNldCBzdGF0ZS4KKyAqIFNldHVwIHRoZSBiYXNlIGFkZHJlc3MgYW5kIGludGVycnVwdCBvZiB0aGUgQXUxeHh4IGV0aGVybmV0IG1hY3MKKyAqIGJhc2VkIG9uIGNwdSB0eXBlIGFuZCB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgZW5hYmxlZCBpbiBzeXNfcGluZnVuYworICogcmVnaXN0ZXIuIFRoZSBsYXN0IGludGVyZmFjZSBpcyBlbmFibGVkIGlmIFNZU19QRl9OSTIgKGJpdCA0KSBpcyAwLgogICovCi1zdGF0aWMgaW50IGF1MTAwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBhdTEwMDBfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaTsKLQl1MzIgY29udHJvbDsKKwlpbnQgbmkgPSAoaW50KSgoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMikoU1lTX1BGX05JMikpID4+IDQpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGksIGZvdW5kX29uZSA9IDA7CiAKLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogYXUxMDAwX2luaXRcbiIsIGRldi0+bmFtZSk7CisJbnVtX2lmcyA9IE5VTV9FVEhfSU5URVJGQUNFUyAtIG5pOwogCi0JLyogYnJpbmcgdGhlIGRldmljZSBvdXQgb2YgcmVzZXQgKi8KLQllbmFibGVfbWFjKGRldiwgMSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci0KLQlhdXAtPm1hYy0+Y29udHJvbCA9IDA7Ci0JYXVwLT50eF9oZWFkID0gKGF1cC0+dHhfZG1hX3JpbmdbMF0tPmJ1ZmZfc3RhdCAmIDB4QykgPj4gMjsKLQlhdXAtPnR4X3RhaWwgPSBhdXAtPnR4X2hlYWQ7Ci0JYXVwLT5yeF9oZWFkID0gKGF1cC0+cnhfZG1hX3JpbmdbMF0tPmJ1ZmZfc3RhdCAmIDB4QykgPj4gMjsKLQotCWF1cC0+bWFjLT5tYWNfYWRkcl9oaWdoID0gZGV2LT5kZXZfYWRkcls1XTw8OCB8IGRldi0+ZGV2X2FkZHJbNF07Ci0JYXVwLT5tYWMtPm1hY19hZGRyX2xvdyA9IGRldi0+ZGV2X2FkZHJbM108PDI0IHwgZGV2LT5kZXZfYWRkclsyXTw8MTYgfAotCQlkZXYtPmRldl9hZGRyWzFdPDw4IHwgZGV2LT5kZXZfYWRkclswXTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfRE1BOyBpKyspIHsKLQkJYXVwLT5yeF9kbWFfcmluZ1tpXS0+YnVmZl9zdGF0IHw9IFJYX0RNQV9FTkFCTEU7CisJZm9yKGkgPSAwOyBpIDwgbnVtX2lmczsgaSsrKSB7CisJCWRldiA9IGF1MTAwMF9wcm9iZShpKTsKKwkJaWZsaXN0W2ldLmRldiA9IGRldjsKKwkJaWYgKGRldikKKwkJCWZvdW5kX29uZSsrOwogCX0KLQlhdV9zeW5jKCk7Ci0KLQljb250cm9sID0gTUFDX1JYX0VOQUJMRSB8IE1BQ19UWF9FTkFCTEU7Ci0jaWZuZGVmIENPTkZJR19DUFVfTElUVExFX0VORElBTgotCWNvbnRyb2wgfD0gTUFDX0JJR19FTkRJQU47Ci0jZW5kaWYKLQlpZiAoYXVwLT5waHlfZGV2KSB7Ci0JCWlmIChhdXAtPnBoeV9kZXYtPmxpbmsgJiYgKERVUExFWF9GVUxMID09IGF1cC0+cGh5X2Rldi0+ZHVwbGV4KSkKLQkJCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOwotCQllbHNlCi0JCQljb250cm9sIHw9IE1BQ19ESVNBQkxFX1JYX09XTjsKLQl9IGVsc2UgeyAvKiBQSFktbGVzcyBvcCwgYXNzdW1lIGZ1bGwtZHVwbGV4ICovCi0JCWNvbnRyb2wgfD0gTUFDX0ZVTExfRFVQTEVYOwotCX0KLQotCWF1cC0+bWFjLT5jb250cm9sID0gY29udHJvbDsKLQlhdXAtPm1hYy0+dmxhbjFfdGFnID0gMHg4MTAwOyAvKiBhY3RpdmF0ZSB2bGFuIHN1cHBvcnQgKi8KLQlhdV9zeW5jKCk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWF1MTAwMF9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gYXVwLT5waHlfZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpbnQgc3RhdHVzX2NoYW5nZSA9IDA7Ci0KLQlCVUdfT04oIWF1cC0+cGh5X2Rldik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYXVwLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocGh5ZGV2LT5saW5rICYmIChhdXAtPm9sZF9zcGVlZCAhPSBwaHlkZXYtPnNwZWVkKSkgewotCQkvLyBzcGVlZCBjaGFuZ2VkCi0KLQkJc3dpdGNoKHBoeWRldi0+c3BlZWQpIHsKLQkJY2FzZSBTUEVFRF8xMDoKLQkJY2FzZSBTUEVFRF8xMDA6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IFNwZWVkICglZCkgaXMgbm90IDEwLzEwMCA/Pz9cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBwaHlkZXYtPnNwZWVkKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYXVwLT5vbGRfc3BlZWQgPSBwaHlkZXYtPnNwZWVkOwotCi0JCXN0YXR1c19jaGFuZ2UgPSAxOwotCX0KLQotCWlmIChwaHlkZXYtPmxpbmsgJiYgKGF1cC0+b2xkX2R1cGxleCAhPSBwaHlkZXYtPmR1cGxleCkpIHsKLQkJLy8gZHVwbGV4IG1vZGUgY2hhbmdlZAotCi0JCS8qIHN3aXRjaGluZyBkdXBsZXggbW9kZSByZXF1aXJlcyB0byBkaXNhYmxlIHJ4IGFuZCB0eCEgKi8KLQkJaGFyZF9zdG9wKGRldik7Ci0KLQkJaWYgKERVUExFWF9GVUxMID09IHBoeWRldi0+ZHVwbGV4KQotCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCi0JCQkJCSAgICAgfCBNQUNfRlVMTF9EVVBMRVgpCi0JCQkJCSAgICAgJiB+TUFDX0RJU0FCTEVfUlhfT1dOKTsKLQkJZWxzZQotCQkJYXVwLT5tYWMtPmNvbnRyb2wgPSAoKGF1cC0+bWFjLT5jb250cm9sCi0JCQkJCSAgICAgICYgfk1BQ19GVUxMX0RVUExFWCkKLQkJCQkJICAgICB8IE1BQ19ESVNBQkxFX1JYX09XTik7Ci0JCWF1X3N5bmNfZGVsYXkoMSk7Ci0KLQkJZW5hYmxlX3J4X3R4KGRldik7Ci0JCWF1cC0+b2xkX2R1cGxleCA9IHBoeWRldi0+ZHVwbGV4OwotCi0JCXN0YXR1c19jaGFuZ2UgPSAxOwotCX0KLQotCWlmKHBoeWRldi0+bGluayAhPSBhdXAtPm9sZF9saW5rKSB7Ci0JCS8vIGxpbmsgc3RhdGUgY2hhbmdlZAotCi0JCWlmICghcGh5ZGV2LT5saW5rKSB7Ci0JCQkvKiBsaW5rIHdlbnQgZG93biAqLwotCQkJYXVwLT5vbGRfc3BlZWQgPSAwOwotCQkJYXVwLT5vbGRfZHVwbGV4ID0gLTE7Ci0JCX0KLQotCQlhdXAtPm9sZF9saW5rID0gcGh5ZGV2LT5saW5rOwotCQlzdGF0dXNfY2hhbmdlID0gMTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChzdGF0dXNfY2hhbmdlKSB7Ci0JCWlmIChwaHlkZXYtPmxpbmspCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cCAoJWQvJXMpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCwKLQkJCSAgICAgICBEVVBMRVhfRlVMTCA9PSBwaHlkZXYtPmR1cGxleCA/ICJGdWxsIiA6ICJIYWxmIik7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IGF1MTAwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JaW50IHJldHZhbDsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogb3BlbjogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7Ci0KLQlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmYXUxMDAwX2ludGVycnVwdCwgMCwKLQkJCQkJZGV2LT5uYW1lLCBkZXYpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZFxuIiwKLQkJCQlkZXYtPm5hbWUsIGRldi0+aXJxKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlpZiAoKHJldHZhbCA9IGF1MTAwMF9pbml0KGRldikpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yIGluIGF1MTAwMF9pbml0XG4iLCBkZXYtPm5hbWUpOwotCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlpZiAoYXVwLT5waHlfZGV2KSB7Ci0JCS8qIGNhdXNlIHRoZSBQSFkgc3RhdGUgbWFjaGluZSB0byBzY2hlZHVsZSBhIGxpbmsgc3RhdGUgY2hlY2sgKi8KLQkJYXVwLT5waHlfZGV2LT5zdGF0ZSA9IFBIWV9DSEFOR0VMSU5LOwotCQlwaHlfc3RhcnQoYXVwLT5waHlfZGV2KTsKLQl9Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygiJXM6IG9wZW46IEluaXRpYWxpemF0aW9uIGRvbmUuXG4iLCBkZXYtPm5hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXUxMDAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmNvbnN0IGF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNCkKLQkJcHJpbnRrKCIlczogY2xvc2U6IGRldj0lcFxuIiwgZGV2LT5uYW1lLCBkZXYpOwotCi0JaWYgKGF1cC0+cGh5X2RldikKLQkJcGh5X3N0b3AoYXVwLT5waHlfZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhdXAtPmxvY2ssIGZsYWdzKTsKLQotCXJlc2V0X21hY191bmxvY2tlZCAoZGV2KTsKLQotCS8qIHN0b3AgdGhlIGRldmljZSAqLwotCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCS8qIGRpc2FibGUgdGhlIGludGVycnVwdCAqLwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmF1cC0+bG9jaywgZmxhZ3MpOwotCisJaWYgKCFmb3VuZF9vbmUpCisJCXJldHVybiAtRU5PREVWOwogCXJldHVybiAwOwogfQogCkBAIC0xMDIyLDI5OCArMTI4NCwxNSBAQAogCQkJZm9yIChqID0gMDsgaiA8IE5VTV9UWF9ETUE7IGorKykKIAkJCQlpZiAoYXVwLT50eF9kYl9pbnVzZVtqXSkKIAkJCQkJUmVsZWFzZURCKGF1cCwgYXVwLT50eF9kYl9pbnVzZVtqXSk7Ci0gCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoTlVMTCwgTUFYX0JVRl9TSVpFICoKLSAJCQkJCSAgICAgKE5VTV9UWF9CVUZGUyArIE5VTV9SWF9CVUZGUyksCi0gCQkJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7Ci0gCQkJcmVsZWFzZV9tZW1fcmVnaW9uKGRldi0+YmFzZV9hZGRyLCBNQUNfSU9TSVpFKTsKLSAJCQlyZWxlYXNlX21lbV9yZWdpb24oQ1BIWVNBRERSKGlmbGlzdFtpXS5tYWNlbl9hZGRyKSwgNCk7CisJCQlkbWFfZnJlZV9ub25jb2hlcmVudChOVUxMLCBNQVhfQlVGX1NJWkUgKgorCQkJCQkgICAgIChOVU1fVFhfQlVGRlMgKyBOVU1fUlhfQlVGRlMpLAorCQkJCQkgICAgICh2b2lkICopYXVwLT52YWRkciwgYXVwLT5kbWFfYWRkcik7CisJCQlyZWxlYXNlX21lbV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIE1BQ19JT1NJWkUpOworCQkJcmVsZWFzZV9tZW1fcmVnaW9uKENQSFlTQUREUihpZmxpc3RbaV0ubWFjZW5fYWRkciksIDQpOwogCQkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3R4X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdGF0dXMpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpwcyA9ICZkZXYtPnN0YXRzOwotCi0JaWYgKHN0YXR1cyAmIFRYX0ZSQU1FX0FCT1JURUQpIHsKLQkJaWYgKCFhdXAtPnBoeV9kZXYgfHwgKERVUExFWF9GVUxMID09IGF1cC0+cGh5X2Rldi0+ZHVwbGV4KSkgewotCQkJaWYgKHN0YXR1cyAmIChUWF9KQUJfVElNRU9VVCB8IFRYX1VOREVSUlVOKSkgewotCQkJCS8qIGFueSBvdGhlciB0eCBlcnJvcnMgYXJlIG9ubHkgdmFsaWQKLQkJCQkgKiBpbiBoYWxmIGR1cGxleCBtb2RlICovCi0JCQkJcHMtPnR4X2Vycm9ycysrOwotCQkJCXBzLT50eF9hYm9ydGVkX2Vycm9ycysrOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJcHMtPnR4X2Vycm9ycysrOwotCQkJcHMtPnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgKFRYX05PX0NBUlJJRVIgfCBUWF9MT1NTX0NBUlJJRVIpKQotCQkJCXBzLT50eF9jYXJyaWVyX2Vycm9ycysrOwotCQl9Ci0JfQotfQotCi0KLS8qCi0gKiBDYWxsZWQgZnJvbSB0aGUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB0byBhY2tub3dsZWRnZQotICogdGhlIFRYIERPTkUgYml0cy4gIFRoaXMgaXMgYSBtdXN0IGlmIHRoZSBpcnEgaXMgc2V0dXAgYXMKLSAqIGVkZ2UgdHJpZ2dlcmVkLgotICovCi1zdGF0aWMgdm9pZCBhdTEwMDBfdHhfYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvbGF0aWxlIHR4X2RtYV90ICpwdHhkOwotCi0JcHR4ZCA9IGF1cC0+dHhfZG1hX3JpbmdbYXVwLT50eF90YWlsXTsKLQotCXdoaWxlIChwdHhkLT5idWZmX3N0YXQgJiBUWF9UX0RPTkUpIHsKLQkJdXBkYXRlX3R4X3N0YXRzKGRldiwgcHR4ZC0+c3RhdHVzKTsKLQkJcHR4ZC0+YnVmZl9zdGF0ICY9IH5UWF9UX0RPTkU7Ci0JCXB0eGQtPmxlbiA9IDA7Ci0JCWF1X3N5bmMoKTsKLQotCQlhdXAtPnR4X3RhaWwgPSAoYXVwLT50eF90YWlsICsgMSkgJiAoTlVNX1RYX0RNQSAtIDEpOwotCQlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X3RhaWxdOwotCi0JCWlmIChhdXAtPnR4X2Z1bGwpIHsKLQkJCWF1cC0+dHhfZnVsbCA9IDA7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCX0KLQl9Ci19Ci0KLQotLyoKLSAqIEF1MTAwMCB0cmFuc21pdCByb3V0aW5lLgotICovCi1zdGF0aWMgaW50IGF1MTAwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcHMgPSAmZGV2LT5zdGF0czsKLQl2b2xhdGlsZSB0eF9kbWFfdCAqcHR4ZDsKLQl1MzIgYnVmZl9zdGF0OwotCWRiX2Rlc3RfdCAqcERCOwotCWludCBpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDUpCi0JCXByaW50aygiJXM6IHR4OiBhdXAgJXggbGVuPSVkLCBkYXRhPSVwLCBoZWFkICVkXG4iLAotCQkJCWRldi0+bmFtZSwgKHVuc2lnbmVkKWF1cCwgc2tiLT5sZW4sCi0JCQkJc2tiLT5kYXRhLCBhdXAtPnR4X2hlYWQpOwotCi0JcHR4ZCA9IGF1cC0+dHhfZG1hX3JpbmdbYXVwLT50eF9oZWFkXTsKLQlidWZmX3N0YXQgPSBwdHhkLT5idWZmX3N0YXQ7Ci0JaWYgKGJ1ZmZfc3RhdCAmIFRYX0RNQV9FTkFCTEUpIHsKLQkJLyogV2UndmUgd3JhcHBlZCBhcm91bmQgYW5kIHRoZSB0cmFuc21pdHRlciBpcyBzdGlsbCBidXN5ICovCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJYXVwLT50eF9mdWxsID0gMTsKLQkJcmV0dXJuIDE7Ci0JfQotCWVsc2UgaWYgKGJ1ZmZfc3RhdCAmIFRYX1RfRE9ORSkgewotCQl1cGRhdGVfdHhfc3RhdHMoZGV2LCBwdHhkLT5zdGF0dXMpOwotCQlwdHhkLT5sZW4gPSAwOwotCX0KLQotCWlmIChhdXAtPnR4X2Z1bGwpIHsKLQkJYXVwLT50eF9mdWxsID0gMDsKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCX0KLQotCXBEQiA9IGF1cC0+dHhfZGJfaW51c2VbYXVwLT50eF9oZWFkXTsKLQlza2JfY29weV9mcm9tX2xpbmVhcl9kYXRhKHNrYiwgcERCLT52YWRkciwgc2tiLT5sZW4pOwotCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKSB7Ci0JCWZvciAoaT1za2ItPmxlbjsgaTxFVEhfWkxFTjsgaSsrKSB7Ci0JCQkoKGNoYXIgKilwREItPnZhZGRyKVtpXSA9IDA7Ci0JCX0KLQkJcHR4ZC0+bGVuID0gRVRIX1pMRU47Ci0JfQotCWVsc2UKLQkJcHR4ZC0+bGVuID0gc2tiLT5sZW47Ci0KLQlwcy0+dHhfcGFja2V0cysrOwotCXBzLT50eF9ieXRlcyArPSBwdHhkLT5sZW47Ci0KLQlwdHhkLT5idWZmX3N0YXQgPSBwREItPmRtYV9hZGRyIHwgVFhfRE1BX0VOQUJMRTsKLQlhdV9zeW5jKCk7Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCWF1cC0+dHhfaGVhZCA9IChhdXAtPnR4X2hlYWQgKyAxKSAmIChOVU1fVFhfRE1BIC0gMSk7Ci0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfcnhfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnBzID0gJmRldi0+c3RhdHM7Ci0KLQlwcy0+cnhfcGFja2V0cysrOwotCWlmIChzdGF0dXMgJiBSWF9NQ0FTVF9GUkFNRSkKLQkJcHMtPm11bHRpY2FzdCsrOwotCi0JaWYgKHN0YXR1cyAmIFJYX0VSUk9SKSB7Ci0JCXBzLT5yeF9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkKLQkJCXBzLT5yeF9taXNzZWRfZXJyb3JzKys7Ci0JCWlmIChzdGF0dXMgJiAoUlhfT1ZFUkxFTiB8IFJYX09WRVJMRU4gfCBSWF9MRU5fRVJST1IpKQotCQkJcHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIFJYX0NSQ19FUlJPUikKLQkJCXBzLT5yeF9jcmNfZXJyb3JzKys7Ci0JCWlmIChzdGF0dXMgJiBSWF9DT0xMKQotCQkJcHMtPmNvbGxpc2lvbnMrKzsKLQl9Ci0JZWxzZQotCQlwcy0+cnhfYnl0ZXMgKz0gc3RhdHVzICYgUlhfRlJBTUVfTEVOX01BU0s7Ci0KLX0KLQotLyoKLSAqIEF1MTAwMCByZWNlaXZlIHJvdXRpbmUuCi0gKi8KLXN0YXRpYyBpbnQgYXUxMDAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jdm9sYXRpbGUgcnhfZG1hX3QgKnByeGQ7Ci0JdTMyIGJ1ZmZfc3RhdCwgc3RhdHVzOwotCWRiX2Rlc3RfdCAqcERCOwotCXUzMglmcm1sZW47Ci0KLQlpZiAoYXUxMDAwX2RlYnVnID4gNSkKLQkJcHJpbnRrKCIlczogYXUxMDAwX3J4IGhlYWQgJWRcbiIsIGRldi0+bmFtZSwgYXVwLT5yeF9oZWFkKTsKLQotCXByeGQgPSBhdXAtPnJ4X2RtYV9yaW5nW2F1cC0+cnhfaGVhZF07Ci0JYnVmZl9zdGF0ID0gcHJ4ZC0+YnVmZl9zdGF0OwotCXdoaWxlIChidWZmX3N0YXQgJiBSWF9UX0RPTkUpICB7Ci0JCXN0YXR1cyA9IHByeGQtPnN0YXR1czsKLQkJcERCID0gYXVwLT5yeF9kYl9pbnVzZVthdXAtPnJ4X2hlYWRdOwotCQl1cGRhdGVfcnhfc3RhdHMoZGV2LCBzdGF0dXMpOwotCQlpZiAoIShzdGF0dXMgJiBSWF9FUlJPUikpICB7Ci0KLQkJCS8qIGdvb2QgZnJhbWUgKi8KLQkJCWZybWxlbiA9IChzdGF0dXMgJiBSWF9GUkFNRV9MRU5fTUFTSyk7Ci0JCQlmcm1sZW4gLT0gNDsgLyogUmVtb3ZlIEZDUyAqLwotCQkJc2tiID0gZGV2X2FsbG9jX3NrYihmcm1sZW4gKyAyKTsKLQkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogMTYgYnl0ZSBJUCBoZWFkZXIgYWxpZ24gKi8KLQkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwKLQkJCQkodW5zaWduZWQgY2hhciAqKXBEQi0+dmFkZHIsIGZybWxlbik7Ci0JCQlza2JfcHV0KHNrYiwgZnJtbGVuKTsKLQkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0JCQluZXRpZl9yeChza2IpOwkvKiBwYXNzIHRoZSBwYWNrZXQgdG8gdXBwZXIgbGF5ZXJzICovCi0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoYXUxMDAwX2RlYnVnID4gNCkgewotCQkJCWlmIChzdGF0dXMgJiBSWF9NSVNTRURfRlJBTUUpCi0JCQkJCXByaW50aygicnggbWlzc1xuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX1dET0dfVElNRVIpCi0JCQkJCXByaW50aygicnggd2RvZ1xuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX1JVTlQpCi0JCQkJCXByaW50aygicnggcnVudFxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX09WRVJMRU4pCi0JCQkJCXByaW50aygicnggb3ZlcmxlblxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX0NPTEwpCi0JCQkJCXByaW50aygicnggY29sbFxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX01JSV9FUlJPUikKLQkJCQkJcHJpbnRrKCJyeCBtaWkgZXJyb3JcbiIpOwotCQkJCWlmIChzdGF0dXMgJiBSWF9DUkNfRVJST1IpCi0JCQkJCXByaW50aygicnggY3JjIGVycm9yXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfTEVOX0VSUk9SKQotCQkJCQlwcmludGsoInJ4IGxlbiBlcnJvclxuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX1VfQ05UUkxfRlJBTUUpCi0JCQkJCXByaW50aygicnggdSBjb250cm9sIGZyYW1lXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfTUlTU0VEX0ZSQU1FKQotCQkJCQlwcmludGsoInJ4IG1pc3NcbiIpOwotCQkJfQotCQl9Ci0JCXByeGQtPmJ1ZmZfc3RhdCA9ICh1MzIpKHBEQi0+ZG1hX2FkZHIgfCBSWF9ETUFfRU5BQkxFKTsKLQkJYXVwLT5yeF9oZWFkID0gKGF1cC0+cnhfaGVhZCArIDEpICYgKE5VTV9SWF9ETUEgLSAxKTsKLQkJYXVfc3luYygpOwotCi0JCS8qIG5leHQgZGVzY3JpcHRvciAqLwotCQlwcnhkID0gYXVwLT5yeF9kbWFfcmluZ1thdXAtPnJ4X2hlYWRdOwotCQlidWZmX3N0YXQgPSBwcnhkLT5idWZmX3N0YXQ7Ci0JfQotCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBBdTEwMDAgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZS4KLSAqLwotc3RhdGljIGlycXJldHVybl90IGF1MTAwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0KLQkvKiBIYW5kbGUgUlggaW50ZXJydXB0cyBmaXJzdCB0byBtaW5pbWl6ZSBjaGFuY2Ugb2Ygb3ZlcnJ1biAqLwotCi0JYXUxMDAwX3J4KGRldik7Ci0JYXUxMDAwX3R4X2FjayhkZXYpOwotCXJldHVybiBJUlFfUkVUVkFMKDEpOwotfQotCi0KLS8qCi0gKiBUaGUgVHggcmluZyBoYXMgYmVlbiBmdWxsIGxvbmdlciB0aGFuIHRoZSB3YXRjaGRvZyB0aW1lb3V0Ci0gKiB2YWx1ZS4gVGhlIHRyYW5zbWl0dGVyIG11c3QgYmUgaHVuZz8KLSAqLwotc3RhdGljIHZvaWQgYXUxMDAwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdTEwMDBfdHhfdGltZW91dDogZGV2PSVwXG4iLCBkZXYtPm5hbWUsIGRldik7Ci0JcmVzZXRfbWFjKGRldik7Ci0JYXUxMDAwX2luaXQoZGV2KTsKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF1MTAwMF9wcml2YXRlICphdXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpCi0JCXByaW50aygiJXM6IHNldF9yeF9tb2RlOiBmbGFncz0leFxuIiwgZGV2LT5uYW1lLCBkZXYtPmZsYWdzKTsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCQkvKiBTZXQgcHJvbWlzY3VvdXMuICovCi0JCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19QUk9NSVNDVU9VUzsKLQl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAgfHwKLQkJCSAgIGRldi0+bWNfY291bnQgPiBNVUxUSUNBU1RfRklMVEVSX0xJTUlUKSB7Ci0JCWF1cC0+bWFjLT5jb250cm9sIHw9IE1BQ19QQVNTX0FMTF9NVUxUSTsKLQkJYXVwLT5tYWMtPmNvbnRyb2wgJj0gfk1BQ19QUk9NSVNDVU9VUzsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBhc3MgYWxsIG11bHRpY2FzdFxuIiwgZGV2LT5uYW1lKTsKLQl9IGVsc2UgewotCQlpbnQgaTsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCXUzMiBtY19maWx0ZXJbMl07CS8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLwotCi0JCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQlzZXRfYml0KGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcik+PjI2LAotCQkJCQkobG9uZyAqKW1jX2ZpbHRlcik7Ci0JCX0KLQkJYXVwLT5tYWMtPm11bHRpX2hhc2hfaGlnaCA9IG1jX2ZpbHRlclsxXTsKLQkJYXVwLT5tYWMtPm11bHRpX2hhc2hfbG93ID0gbWNfZmlsdGVyWzBdOwotCQlhdXAtPm1hYy0+Y29udHJvbCAmPSB+TUFDX1BST01JU0NVT1VTOwotCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfSEFTSF9NT0RFOwotCX0KLX0KLQotc3RhdGljIGludCBhdTEwMDBfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF1cC0+cGh5X2RldikgcmV0dXJuIC1FSU5WQUw7IC8vIFBIWSBub3QgY29udHJvbGxhYmxlCi0KLQlyZXR1cm4gcGh5X21paV9pb2N0bChhdXAtPnBoeV9kZXYsIGlmX21paShycSksIGNtZCk7Ci19Ci0KIG1vZHVsZV9pbml0KGF1MTAwMF9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChhdTEwMDBfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXg4ODc5Ni5jIGIvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCmluZGV4IGE0ZWI2YzQuLjYyZDljOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F4ODg3OTYuYworKysgYi9kcml2ZXJzL25ldC9heDg4Nzk2LmMKQEAgLTkzLDYgKzkzLDcgQEAKIAogCXVuc2lnbmVkIGNoYXIJCSBydW5uaW5nOwogCXVuc2lnbmVkIGNoYXIJCSByZXN1bWVfb3BlbjsKKwl1bnNpZ25lZCBpbnQJCSBpcnFmbGFnczsKIAogCXUzMgkJCSByZWdfb2Zmc2V0c1sweDIwXTsKIH07CkBAIC00NzQsNyArNDc1LDggQEAKIAogCWRldl9kYmcoJmF4LT5kZXYtPmRldiwgIiVzOiBvcGVuXG4iLCBkZXYtPm5hbWUpOwogCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGF4X2VpX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBheF9laV9pbnRlcnJ1cHQsIGF4LT5pcnFmbGFncywKKwkJCSAgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTczMSwxMiArNzMzLDE5IEBACiAJLyogbG9hZCB0aGUgbWFjLWFkZHJlc3MgZnJvbSB0aGUgZGV2aWNlIGlmIHRoaXMgaXMgdGhlCiAJICogZmlyc3QgdGltZSB3ZSd2ZSBpbml0aWFsaXNlZCAqLwogCi0JaWYgKGZpcnN0X2luaXQgJiYgYXgtPnBsYXQtPmZsYWdzICYgQVhGTEdfTUFDX0ZST01ERVYpIHsKLQkJZWlfb3V0YihFODM5MF9OT0RNQSArIEU4MzkwX1BBR0UxICsgRTgzOTBfU1RPUCwKLQkJCWVpX2xvY2FsLT5tZW0gKyBFODM5MF9DTUQpOyAvKiAweDYxICovCisJaWYgKGZpcnN0X2luaXQpIHsKKwkJaWYgKGF4LT5wbGF0LT5mbGFncyAmIEFYRkxHX01BQ19GUk9NREVWKSB7CisJCQllaV9vdXRiKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTEgKyBFODM5MF9TVE9QLAorCQkJCWVpX2xvY2FsLT5tZW0gKyBFODM5MF9DTUQpOyAvKiAweDYxICovCisJCQlmb3IgKGkgPSAwOyBpIDwgRVRIRVJfQUREUl9MRU47IGkrKykKKwkJCQlkZXYtPmRldl9hZGRyW2ldID0KKwkJCQkJZWlfaW5iKGlvYWRkciArIEVOMV9QSFlTX1NISUZUKGkpKTsKKwkJfQogCi0JCWZvciAoaSA9IDAgOyBpIDwgRVRIRVJfQUREUl9MRU4gOyBpKyspCi0JCQlkZXYtPmRldl9hZGRyW2ldID0gZWlfaW5iKGlvYWRkciArIEVOMV9QSFlTX1NISUZUKGkpKTsKKwkJaWYgKChheC0+cGxhdC0+ZmxhZ3MgJiBBWEZMR19NQUNfRlJPTVBMQVRGT1JNKSAmJgorCQkgICAgIGF4LT5wbGF0LT5tYWNfYWRkcikKKwkJCW1lbWNweShkZXYtPmRldl9hZGRyLCBheC0+cGxhdC0+bWFjX2FkZHIsCisJCQkJRVRIRVJfQUREUl9MRU4pOwogCX0KIAogCWF4X3Jlc2V0XzgzOTAoZGV2KTsKQEAgLTgyOSw3ICs4MzgsNyBAQAogCXN0cnVjdCBheF9kZXZpY2UgICpheDsKIAlzdHJ1Y3QgcmVzb3VyY2UgICAqcmVzOwogCXNpemVfdCBzaXplOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlkZXYgPSBheF9fYWxsb2NfZWlfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgYXhfZGV2aWNlKSk7CiAJaWYgKGRldiA9PSBOVUxMKQpAQCAtODUwLDEyICs4NTksMTQgQEAKIAogCS8qIGZpbmQgdGhlIHBsYXRmb3JtIHJlc291cmNlcyAqLwogCi0JcmV0ICA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Ci0JaWYgKHJldCA8IDApIHsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChyZXMgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBJUlEgc3BlY2lmaWVkXG4iKTsKIAkJZ290byBleGl0X21lbTsKIAl9Ci0JZGV2LT5pcnEgPSByZXQ7CisKKwlkZXYtPmlycSA9IHJlcy0+c3RhcnQ7CisJYXgtPmlycWZsYWdzID0gcmVzLT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2I0NC5jIGIvZHJpdmVycy9uZXQvYjQ0LmMKaW5kZXggZGM1ZjA1MS4uNWM4NDU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYjQ0LmMKKysrIGIvZHJpdmVycy9uZXQvYjQ0LmMKQEAgLTg3NCw3ICs4NzQsNyBAQAogCX0KIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWI0NF9lbmFibGVfaW50cyhicCk7CiAJfQogCkBAIC05MDYsMTMgKzkwNiwxMyBAQAogCQkJZ290byBpcnFfYWNrOwogCQl9CiAKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmJwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZicC0+bmFwaSkpIHsKIAkJCS8qIE5PVEU6IFRoZXNlIHdyaXRlcyBhcmUgcG9zdGVkIGJ5IHRoZSByZWFkYmFjayBvZgogCQkJICogICAgICAgdGhlIElTVEFUIHJlZ2lzdGVyIGJlbG93LgogCQkJICovCiAJCQlicC0+aXN0YXQgPSBpc3RhdDsKIAkJCV9fYjQ0X2Rpc2FibGVfaW50cyhicCk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZicC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJmJwLT5uYXBpKTsKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBFcnJvciwgcG9sbCBhbHJlYWR5IHNjaGVkdWxlZFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwpAQCAtOTczLDcgKzk3Myw3IEBACiAJCQlzc2JfZG1hX3VubWFwX3NpbmdsZShicC0+c2RldiwgbWFwcGluZywgbGVuLAogCQkJCQkgICAgIERNQV9UT19ERVZJQ0UpOwogCi0JCWJvdW5jZV9za2IgPSBfX2Rldl9hbGxvY19za2IobGVuLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CisJCWJvdW5jZV9za2IgPSBfX25ldGRldl9hbGxvY19za2IoZGV2LCBsZW4sIEdGUF9BVE9NSUMgfCBHRlBfRE1BKTsKIAkJaWYgKCFib3VuY2Vfc2tiKQogCQkJZ290byBlcnJfb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAppbmRleCA2M2Q1OTNkLi5jNDlkZGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKQEAgLTEwMCw5ICsxMDAsOSBAQAogCXUzMiBiZV90eF93cmJzOwkJLyogbnVtYmVyIG9mIHR4IFdSQnMgdXNlZCAqLwogCXUzMiBiZV90eF9ldmVudHM7CS8qIG51bWJlciBvZiB0eCBjb21wbGV0aW9uIGV2ZW50cyAgKi8KIAl1MzIgYmVfdHhfY29tcGw7CS8qIG51bWJlciBvZiB0eCBjb21wbGV0aW9uIGVudHJpZXMgcHJvY2Vzc2VkICovCi0JdTY0IGJlX3R4X2ppZmZpZXM7Ci0JdWxvbmcgYmVfdHhfYnl0ZXM7Ci0JdWxvbmcgYmVfdHhfYnl0ZXNfcHJldjsKKwl1bG9uZyBiZV90eF9qaWZmaWVzOworCXU2NCBiZV90eF9ieXRlczsKKwl1NjQgYmVfdHhfYnl0ZXNfcHJldjsKIAl1MzIgYmVfdHhfcmF0ZTsKIAogCXUzMiBjYWNoZV9iYXJyaWVyWzE2XTsKQEAgLTExMyw5ICsxMTMsOSBAQAogCXUzMiBiZV9yeF9jb21wbDsJLyogbnVtYmVyIG9mIHJ4IGNvbXBsZXRpb24gZW50cmllcyBwcm9jZXNzZWQgKi8KIAl1MzIgYmVfbHJvX2hncmFtX2RhdGFbOF07CS8qIGhpc3RvZ3JhbSBvZiBMUk8gZGF0YSBwYWNrZXRzICovCiAJdTMyIGJlX2xyb19oZ3JhbV9hY2tbOF07CS8qIGhpc3RvZ3JhbSBvZiBMUk8gQUNLcyAqLwotCXU2NCBiZV9yeF9qaWZmaWVzOwotCXVsb25nIGJlX3J4X2J5dGVzOwotCXVsb25nIGJlX3J4X2J5dGVzX3ByZXY7CisJdWxvbmcgYmVfcnhfamlmZmllczsKKwl1NjQgYmVfcnhfYnl0ZXM7CisJdTY0IGJlX3J4X2J5dGVzX3ByZXY7CiAJdTMyIGJlX3J4X3JhdGU7CiAJLyogbnVtYmVyIG9mIG5vbiBldGhlciB0eXBlIElJIGZyYW1lcyBkcm9wcGVkIHdoZXJlCiAJICogZnJhbWUgbGVuID4gbGVuZ3RoIGZpZWxkIG9mIE1hYyBIZHIgKi8KQEAgLTE5NCw2ICsxOTQsNyBAQAogCXN0cnVjdCBiZV9lcV9vYmogcnhfZXE7CiAJc3RydWN0IGJlX3J4X29iaiByeF9vYmo7CiAJdTMyIGJpZ19wYWdlX3NpemU7CS8qIENvbXBvdW5kZWQgcGFnZSBzaXplIHNoYXJlZCBieSByeCB3cmJzICovCisJYm9vbCByeF9wb3N0X3N0YXJ2ZWQ7CS8qIFplcm8gcnggZnJhZ3MgaGF2ZSBiZWVuIHBvc3RlZCB0byBCRSAqLwogCiAJc3RydWN0IHZsYW5fZ3JvdXAgKnZsYW5fZ3JwOwogCXUxNiBudW1fdmxhbnM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKaW5kZXggODk3YTYzZC4uOWI3NWFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwpAQCAtMTYsNiArMTYsNyBAQAogICovCiAKICNpbmNsdWRlICJiZS5oIgorI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCiBNT0RVTEVfVkVSU0lPTihEUlZfVkVSKTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBiZV9kZXZfaWRzKTsKQEAgLTI0NSwxOSArMjQ2LDI5IEBACiAvKiBVcGRhdGUgdGhlIEVRIGRlbGF5IG4gQkUgYmFzZWQgb24gdGhlIFJYIGZyYWdzIGNvbnN1bWVkIC8gc2VjICovCiBzdGF0aWMgdm9pZCBiZV9yeF9lcWRfdXBkYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCXUzMiBlcWQ7CiAJc3RydWN0IGJlX2N0cmxfaW5mbyAqY3RybCA9ICZhZGFwdGVyLT5jdHJsOwogCXN0cnVjdCBiZV9lcV9vYmogKnJ4X2VxID0gJmFkYXB0ZXItPnJ4X2VxOwogCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOworCXVsb25nIG5vdyA9IGppZmZpZXM7CisJdTMyIGVxZDsKKworCWlmICghcnhfZXEtPmVuYWJsZV9haWMpCisJCXJldHVybjsKKworCS8qIFdyYXBwZWQgYXJvdW5kICovCisJaWYgKHRpbWVfYmVmb3JlKG5vdywgc3RhdHMtPnJ4X2Zwc19qaWZmaWVzKSkgeworCQlzdGF0cy0+cnhfZnBzX2ppZmZpZXMgPSBub3c7CisJCXJldHVybjsKKwl9CiAKIAkvKiBVcGRhdGUgb25jZSBhIHNlY29uZCAqLwotCWlmICgoKGppZmZpZXMgLSBzdGF0cy0+cnhfZnBzX2ppZmZpZXMpIDwgSFopIHx8IHJ4X2VxLT5lbmFibGVfYWljID09IDApCisJaWYgKChub3cgLSBzdGF0cy0+cnhfZnBzX2ppZmZpZXMpIDwgSFopCiAJCXJldHVybjsKIAogCXN0YXRzLT5iZV9yeF9mcHMgPSAoc3RhdHMtPmJlX3J4X2ZyYWdzIC0gc3RhdHMtPmJlX3ByZXZfcnhfZnJhZ3MpIC8KLQkJCSgoamlmZmllcyAtIHN0YXRzLT5yeF9mcHNfamlmZmllcykgLyBIWik7CisJCQkoKG5vdyAtIHN0YXRzLT5yeF9mcHNfamlmZmllcykgLyBIWik7CiAKLQlzdGF0cy0+cnhfZnBzX2ppZmZpZXMgPSBqaWZmaWVzOworCXN0YXRzLT5yeF9mcHNfamlmZmllcyA9IG5vdzsKIAlzdGF0cy0+YmVfcHJldl9yeF9mcmFncyA9IHN0YXRzLT5iZV9yeF9mcmFnczsKIAllcWQgPSBzdGF0cy0+YmVfcnhfZnBzIC8gMTEwMDAwOwogCWVxZCA9IGVxZCA8PCAzOwpAQCAtMjczLDI2ICsyODQsNiBAQAogCXJ4X2VxLT5jdXJfZXFkID0gZXFkOwogfQogCi1zdGF0aWMgdm9pZCBiZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBiZV9hZGFwdGVyLCB3b3JrLndvcmspOwotCWludCBzdGF0dXM7Ci0KLQkvKiBDaGVjayBsaW5rICovCi0JYmVfbGlua19zdGF0dXNfdXBkYXRlKGFkYXB0ZXIpOwotCi0JLyogR2V0IFN0YXRzICovCi0Jc3RhdHVzID0gYmVfY21kX2dldF9zdGF0cygmYWRhcHRlci0+Y3RybCwgJmFkYXB0ZXItPnN0YXRzLmNtZCk7Ci0JaWYgKCFzdGF0dXMpCi0JCW5ldGRldl9zdGF0c191cGRhdGUoYWRhcHRlcik7Ci0KLQkvKiBTZXQgRVEgZGVsYXkgKi8KLQliZV9yeF9lcWRfdXBkYXRlKGFkYXB0ZXIpOwotCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhZGFwdGVyLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKLX0KLQogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpiZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zMDAsMjYgKzI5MSw0NyBAQAogCXJldHVybiAmYWRhcHRlci0+c3RhdHMubmV0X3N0YXRzOwogfQogCitzdGF0aWMgdTMyIGJlX2NhbGNfcmF0ZSh1NjQgYnl0ZXMsIHVuc2lnbmVkIGxvbmcgdGlja3MpCit7CisJdTY0IHJhdGUgPSBieXRlczsKKworCWRvX2RpdihyYXRlLCB0aWNrcyAvIEhaKTsKKwlyYXRlIDw8PSAzOwkJCS8qIGJ5dGVzL3NlYyAtPiBiaXRzL3NlYyAqLworCWRvX2RpdihyYXRlLCAxMDAwMDAwdWwpOwkvKiBNQi9TZWMgKi8KKworCXJldHVybiByYXRlOworfQorCitzdGF0aWMgdm9pZCBiZV90eF9yYXRlX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyAqc3RhdHMgPSBkcnZyX3N0YXRzKGFkYXB0ZXIpOworCXVsb25nIG5vdyA9IGppZmZpZXM7CisKKwkvKiBXcmFwcGVkIGFyb3VuZD8gKi8KKwlpZiAodGltZV9iZWZvcmUobm93LCBzdGF0cy0+YmVfdHhfamlmZmllcykpIHsKKwkJc3RhdHMtPmJlX3R4X2ppZmZpZXMgPSBub3c7CisJCXJldHVybjsKKwl9CisKKwkvKiBVcGRhdGUgdHggcmF0ZSBvbmNlIGluIHR3byBzZWNvbmRzICovCisJaWYgKChub3cgLSBzdGF0cy0+YmVfdHhfamlmZmllcykgPiAyICogSFopIHsKKwkJc3RhdHMtPmJlX3R4X3JhdGUgPSBiZV9jYWxjX3JhdGUoc3RhdHMtPmJlX3R4X2J5dGVzCisJCQkJCQkgIC0gc3RhdHMtPmJlX3R4X2J5dGVzX3ByZXYsCisJCQkJCQkgbm93IC0gc3RhdHMtPmJlX3R4X2ppZmZpZXMpOworCQlzdGF0cy0+YmVfdHhfamlmZmllcyA9IG5vdzsKKwkJc3RhdHMtPmJlX3R4X2J5dGVzX3ByZXYgPSBzdGF0cy0+YmVfdHhfYnl0ZXM7CisJfQorfQorCiBzdGF0aWMgdm9pZCBiZV90eF9zdGF0c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQl1MzIgd3JiX2NudCwgdTMyIGNvcGllZCwgYm9vbCBzdG9wcGVkKQogewotCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9ICZhZGFwdGVyLT5zdGF0cy5kcnZyX3N0YXRzOworCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CiAJc3RhdHMtPmJlX3R4X3JlcXMrKzsKIAlzdGF0cy0+YmVfdHhfd3JicyArPSB3cmJfY250OwogCXN0YXRzLT5iZV90eF9ieXRlcyArPSBjb3BpZWQ7CiAJaWYgKHN0b3BwZWQpCiAJCXN0YXRzLT5iZV90eF9zdG9wcysrOwotCi0JLyogVXBkYXRlIHR4IHJhdGUgb25jZSBpbiB0d28gc2Vjb25kcyAqLwotCWlmICgoamlmZmllcyAtIHN0YXRzLT5iZV90eF9qaWZmaWVzKSA+IDIgKiBIWikgewotCQl1MzIgcjsKLQkJciA9IChzdGF0cy0+YmVfdHhfYnl0ZXMgLSBzdGF0cy0+YmVfdHhfYnl0ZXNfcHJldikgLwotCQkJKCh1MzIpIChqaWZmaWVzIC0gc3RhdHMtPmJlX3R4X2ppZmZpZXMpIC8gSFopOwotCQlyID0gKHIgLyAxMDAwMDAwKTsJCQkvKiBNIGJ5dGVzL3MgKi8KLQkJc3RhdHMtPmJlX3R4X3JhdGUgPSAociAqIDgpOwkvKiBNIGJpdHMvcyAqLwotCQlzdGF0cy0+YmVfdHhfamlmZmllcyA9IGppZmZpZXM7Ci0JCXN0YXRzLT5iZV90eF9ieXRlc19wcmV2ID0gc3RhdHMtPmJlX3R4X2J5dGVzOwotCX0KIH0KIAogLyogRGV0ZXJtaW5lIG51bWJlciBvZiBXUkIgZW50cmllcyBuZWVkZWQgdG8geG1pdCBkYXRhIGluIGFuIHNrYiAqLwpAQCAtNDkzLDcgKzUwNSw3IEBACiAgKiBwcm9ncmFtIHRoZW0gaW4gQkUuICBJZiBtb3JlIHRoYW4gQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRCBhcmUgY29uZmlndXJlZCwKICAqIHNldCB0aGUgQkUgaW4gcHJvbWlzY3VvdXMgVkxBTiBtb2RlLgogICovCi1zdGF0aWMgdm9pZCBiZV92aWRzX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIHZvaWQgYmVfdmlkX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1MTYgdnRhZ1tCRV9OVU1fVkxBTlNfU1VQUE9SVEVEXTsKQEAgLTUzNiw3ICs1NDgsNyBAQAogCWFkYXB0ZXItPm51bV92bGFucysrOwogCWFkYXB0ZXItPnZsYW5fdGFnW3ZpZF0gPSAxOwogCi0JYmVfdmlkc19jb25maWcobmV0ZGV2KTsKKwliZV92aWRfY29uZmlnKG5ldGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3ZsYW5fcmVtX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQpAQCAtNTQ3LDcgKzU1OSw3IEBACiAJYWRhcHRlci0+dmxhbl90YWdbdmlkXSA9IDA7CiAKIAl2bGFuX2dyb3VwX3NldF9kZXZpY2UoYWRhcHRlci0+dmxhbl9ncnAsIHZpZCwgTlVMTCk7Ci0JYmVfdmlkc19jb25maWcobmV0ZGV2KTsKKwliZV92aWRfY29uZmlnKG5ldGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3NldF9tdWx0aWNhc3RfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC01OTMsMjYgKzYwNSwzNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYmVfcnhfcmF0ZV91cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBwa3RzaXplLAotCQkJdTE2IG51bWZyYWdzKQorc3RhdGljIHZvaWQgYmVfcnhfcmF0ZV91cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJlX2RydnJfc3RhdHMgKnN0YXRzID0gJmFkYXB0ZXItPnN0YXRzLmRydnJfc3RhdHM7Ci0JdTMyIHJhdGU7CisJc3RydWN0IGJlX2RydnJfc3RhdHMgKnN0YXRzID0gZHJ2cl9zdGF0cyhhZGFwdGVyKTsKKwl1bG9uZyBub3cgPSBqaWZmaWVzOworCisJLyogV3JhcHBlZCBhcm91bmQgKi8KKwlpZiAodGltZV9iZWZvcmUobm93LCBzdGF0cy0+YmVfcnhfamlmZmllcykpIHsKKwkJc3RhdHMtPmJlX3J4X2ppZmZpZXMgPSBub3c7CisJCXJldHVybjsKKwl9CisKKwkvKiBVcGRhdGUgdGhlIHJhdGUgb25jZSBpbiB0d28gc2Vjb25kcyAqLworCWlmICgobm93IC0gc3RhdHMtPmJlX3J4X2ppZmZpZXMpIDwgMiAqIEhaKQorCQlyZXR1cm47CisKKwlzdGF0cy0+YmVfcnhfcmF0ZSA9IGJlX2NhbGNfcmF0ZShzdGF0cy0+YmVfcnhfYnl0ZXMKKwkJCQkJICAtIHN0YXRzLT5iZV9yeF9ieXRlc19wcmV2LAorCQkJCQkgbm93IC0gc3RhdHMtPmJlX3J4X2ppZmZpZXMpOworCXN0YXRzLT5iZV9yeF9qaWZmaWVzID0gbm93OworCXN0YXRzLT5iZV9yeF9ieXRlc19wcmV2ID0gc3RhdHMtPmJlX3J4X2J5dGVzOworfQorCitzdGF0aWMgdm9pZCBiZV9yeF9zdGF0c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXUzMiBwa3RzaXplLCB1MTYgbnVtZnJhZ3MpCit7CisJc3RydWN0IGJlX2RydnJfc3RhdHMgKnN0YXRzID0gZHJ2cl9zdGF0cyhhZGFwdGVyKTsKIAogCXN0YXRzLT5iZV9yeF9jb21wbCsrOwogCXN0YXRzLT5iZV9yeF9mcmFncyArPSBudW1mcmFnczsKIAlzdGF0cy0+YmVfcnhfYnl0ZXMgKz0gcGt0c2l6ZTsKLQotCS8qIFVwZGF0ZSB0aGUgcmF0ZSBvbmNlIGluIHR3byBzZWNvbmRzICovCi0JaWYgKChqaWZmaWVzIC0gc3RhdHMtPmJlX3J4X2ppZmZpZXMpIDwgMiAqIEhaKQotCQlyZXR1cm47Ci0KLQlyYXRlID0gKHN0YXRzLT5iZV9yeF9ieXRlcyAtIHN0YXRzLT5iZV9yeF9ieXRlc19wcmV2KSAvCi0JCSgodTMyKSAoamlmZmllcyAtIHN0YXRzLT5iZV9yeF9qaWZmaWVzKSAvIEhaKTsKLQlyYXRlID0gKHJhdGUgLyAxMDAwMDAwKTsJLyogTUIvU2VjICovCi0Jc3RhdHMtPmJlX3J4X3JhdGUgPSAocmF0ZSAqIDgpOyAJLyogTWVnYSBCaXRzL1NlYyAqLwotCXN0YXRzLT5iZV9yeF9qaWZmaWVzID0gamlmZmllczsKLQlzdGF0cy0+YmVfcnhfYnl0ZXNfcHJldiA9IHN0YXRzLT5iZV9yeF9ieXRlczsKIH0KIAogc3RhdGljIHN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKgpAQCAtNzIwLDcgKzc0Miw3IEBACiAJCW1lbXNldChwYWdlX2luZm8sIDAsIHNpemVvZigqcGFnZV9pbmZvKSk7CiAJfQogCi0JYmVfcnhfcmF0ZV91cGRhdGUoYWRhcHRlciwgcGt0c2l6ZSwgbnVtX3JjdmQpOworCWJlX3J4X3N0YXRzX3VwZGF0ZShhZGFwdGVyLCBwa3RzaXplLCBudW1fcmN2ZCk7CiAJcmV0dXJuOwogfQogCkBAIC04MTksNyArODQxLDcgQEAKIAkJCXZpZCwgTlVMTCwgMCk7CiAJfQogCi0JYmVfcnhfcmF0ZV91cGRhdGUoYWRhcHRlciwgcGt0X3NpemUsIG51bV9yY3ZkKTsKKwliZV9yeF9zdGF0c191cGRhdGUoYWRhcHRlciwgcGt0X3NpemUsIG51bV9yY3ZkKTsKIAlyZXR1cm47CiB9CiAKQEAgLTg2MSw3ICs4ODMsNiBAQAogCXU2NCBwYWdlX2RtYWFkZHIgPSAwLCBmcmFnX2RtYWFkZHI7CiAJdTMyIHBvc3RlZCwgcGFnZV9vZmZzZXQgPSAwOwogCi0KIAlwYWdlX2luZm8gPSAmcGFnZV9pbmZvX3RibFtyeHEtPmhlYWRdOwogCWZvciAocG9zdGVkID0gMDsgcG9zdGVkIDwgTUFYX1JYX1BPU1QgJiYgIXBhZ2VfaW5mby0+cGFnZTsgcG9zdGVkKyspIHsKIAkJaWYgKCFwYWdlcCkgewpAQCAtOTAwLDggKzkyMSwxMSBAQAogCQlwYWdlX2luZm8tPmxhc3RfcGFnZV91c2VyID0gdHJ1ZTsKIAogCWlmIChwb3N0ZWQpIHsKLQkJYmVfcnhxX25vdGlmeSgmYWRhcHRlci0+Y3RybCwgcnhxLT5pZCwgcG9zdGVkKTsKIAkJYXRvbWljX2FkZChwb3N0ZWQsICZyeHEtPnVzZWQpOworCQliZV9yeHFfbm90aWZ5KCZhZGFwdGVyLT5jdHJsLCByeHEtPmlkLCBwb3N0ZWQpOworCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJnJ4cS0+dXNlZCkgPT0gMCkgeworCQkvKiBMZXQgYmVfd29ya2VyIHJlcGxlbmlzaCB3aGVuIG1lbW9yeSBpcyBhdmFpbGFibGUgKi8KKwkJYWRhcHRlci0+cnhfcG9zdF9zdGFydmVkID0gdHJ1ZTsKIAl9CiAKIAlyZXR1cm47CkBAIC0xMzA1LDYgKzEzMjksMzQgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQgYmVfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYmVfYWRhcHRlciwgd29yay53b3JrKTsKKwlpbnQgc3RhdHVzOworCisJLyogQ2hlY2sgbGluayAqLworCWJlX2xpbmtfc3RhdHVzX3VwZGF0ZShhZGFwdGVyKTsKKworCS8qIEdldCBTdGF0cyAqLworCXN0YXR1cyA9IGJlX2NtZF9nZXRfc3RhdHMoJmFkYXB0ZXItPmN0cmwsICZhZGFwdGVyLT5zdGF0cy5jbWQpOworCWlmICghc3RhdHVzKQorCQluZXRkZXZfc3RhdHNfdXBkYXRlKGFkYXB0ZXIpOworCisJLyogU2V0IEVRIGRlbGF5ICovCisJYmVfcnhfZXFkX3VwZGF0ZShhZGFwdGVyKTsKKworCWJlX3R4X3JhdGVfdXBkYXRlKGFkYXB0ZXIpOworCWJlX3J4X3JhdGVfdXBkYXRlKGFkYXB0ZXIpOworCisJaWYgKGFkYXB0ZXItPnJ4X3Bvc3Rfc3RhcnZlZCkgeworCQlhZGFwdGVyLT5yeF9wb3N0X3N0YXJ2ZWQgPSBmYWxzZTsKKwkJYmVfcG9zdF9yeF9mcmFncyhhZGFwdGVyKTsKKwl9CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworfQorCiBzdGF0aWMgdm9pZCBiZV9tc2l4X2VuYWJsZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgaSwgc3RhdHVzOwpAQCAtMTQyMiw2ICsxNDc0LDggQEAKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gZG9fbm9uZTsKIAorCWJlX3ZpZF9jb25maWcobmV0ZGV2KTsKKwogCXN0YXR1cyA9IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKGN0cmwsIHRydWUsIHRydWUpOwogCWlmIChzdGF0dXMgIT0gMCkKIAkJZ290byBpZl9kZXN0cm95OwpAQCAtMTg1Niw4ICsxOTEwLDYgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCi0JYmVfdmlkc19jb25maWcobmV0ZGV2KTsKLQogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJcnRubF9sb2NrKCk7CiAJCWJlX29wZW4obmV0ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMgYi9kcml2ZXJzL25ldC9iZmluX21hYy5jCmluZGV4IDc4ZTMxYWEuLjlhZmU4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuYwpAQCAtNDE1LDExICs0MTUsMTEgQEAKIAl9CiAKICNpZiBkZWZpbmVkKENPTkZJR19CRklOX01BQ19STUlJKQotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLCAmYmZpbl9tYWNfYWRqdXN0X2xpbmssIDAsCi0JCQlQSFlfSU5URVJGQUNFX01PREVfUk1JSSk7CisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCAmYmZpbl9tYWNfYWRqdXN0X2xpbmssCisJCQkwLCBQSFlfSU5URVJGQUNFX01PREVfUk1JSSk7CiAjZWxzZQotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLCAmYmZpbl9tYWNfYWRqdXN0X2xpbmssIDAsCi0JCQlQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksICZiZmluX21hY19hZGp1c3RfbGluaywKKwkJCTAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwogI2VuZGlmCiAKIAlpZiAoSVNfRVJSKHBoeWRldikpIHsKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgogCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZCwgbWRjX2Nsaz0lZEh6KG1kY19kaXY9JWQpIgogCSAgICAgICAiQHNjbGs9JWRNSHopXG4iLAotCSAgICAgICBEUlZfTkFNRSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19pZCwgcGh5ZGV2LT5pcnEsCisJICAgICAgIERSVl9OQU1FLCBwaHlkZXYtPmRydi0+bmFtZSwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgcGh5ZGV2LT5pcnEsCiAJICAgICAgIE1EQ19DTEssIG1kY19kaXYsIHNjbGsvMTAwMDAwMCk7CiAKIAlyZXR1cm4gMDsKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCXN0cmNweShpbmZvLT5kcml2ZXIsIERSVl9OQU1FKTsKIAlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04pOwogCXN0cmNweShpbmZvLT5md192ZXJzaW9uLCAiTi9BIik7Ci0Jc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBkZXYtPmRldi5idXNfaWQpOworCXN0cmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+ZGV2KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYmZpbl9tYWNfZXRodG9vbF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibWFjLmMgYi9kcml2ZXJzL25ldC9ibWFjLmMKaW5kZXggOGE1NDZhMy4uNDRkMDE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JtYWMuYwpAQCAtMTA2Miw3ICsxMDYyLDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBibWFjX21pc2NfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkZXZfaWQ7Ci0Jc3RydWN0IGJtYWNfZGF0YSAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGludCBzdGF0dXMgPSBibXJlYWQoZGV2LCBTVEFUVVMpOwogCWlmIChtaXNjaW50Y291bnQrKyA8IDEwKSB7CiAJCVhYREVCVUcoKCJibWFjX21pc2NfaW50clxuIikpOwpAQCAtMTI0MCw3ICsxMjM5LDcgQEAKIHsKIAlzdHJ1Y3QgYm1hY19kYXRhICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RyY3B5KGluZm8tPmRyaXZlciwgImJtYWMiKTsKLQlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGJwLT5tZGV2LT5vZmRldi5kZXYuYnVzX2lkKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKCZicC0+bWRldi0+b2ZkZXYuZGV2KSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYm1hY19ldGh0b29sX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCA2NTAwYjdjLi5hZDQ0NmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC01Nyw4ICs1Nyw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MiIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS45LjIiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiRmViIDExLCAyMDA5IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuOS4zIgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk1hcmNoIDE3LCAyMDA5IgogCiAjZGVmaW5lIFJVTl9BVCh4KSAoamlmZmllcyArICh4KSkKIApAQCAtMTQ5Nyw2ICsxNDk3LDggQEAKIAogc3RhdGljIGludAogYm54Ml9zZXR1cF9yZW1vdGVfcGh5KHN0cnVjdCBibngyICpicCwgdTggcG9ydCkKK19fcmVsZWFzZXMoJmJwLT5waHlfbG9jaykKK19fYWNxdWlyZXMoJmJwLT5waHlfbG9jaykKIHsKIAl1MzIgc3BlZWRfYXJnID0gMCwgcGF1c2VfYWR2OwogCkBAIC0xNTU0LDYgKzE1NTYsOCBAQAogCiBzdGF0aWMgaW50CiBibngyX3NldHVwX3NlcmRlc19waHkoc3RydWN0IGJueDIgKmJwLCB1OCBwb3J0KQorX19yZWxlYXNlcygmYnAtPnBoeV9sb2NrKQorX19hY3F1aXJlcygmYnAtPnBoeV9sb2NrKQogewogCXUzMiBhZHYsIGJtY3I7CiAJdTMyIG5ld19hZHYgPSAwOwpAQCAtMTg2Niw2ICsxODcwLDggQEAKIAogc3RhdGljIGludAogYm54Ml9zZXR1cF9jb3BwZXJfcGh5KHN0cnVjdCBibngyICpicCkKK19fcmVsZWFzZXMoJmJwLT5waHlfbG9jaykKK19fYWNxdWlyZXMoJmJwLT5waHlfbG9jaykKIHsKIAl1MzIgYm1jcjsKIAl1MzIgbmV3X2JtY3I7CkBAIC0xOTYzLDYgKzE5NjksOCBAQAogCiBzdGF0aWMgaW50CiBibngyX3NldHVwX3BoeShzdHJ1Y3QgYm54MiAqYnAsIHU4IHBvcnQpCitfX3JlbGVhc2VzKCZicC0+cGh5X2xvY2spCitfX2FjcXVpcmVzKCZicC0+cGh5X2xvY2spCiB7CiAJaWYgKGJwLT5sb29wYmFjayA9PSBNQUNfTE9PUEJBQ0spCiAJCXJldHVybiAwOwpAQCAtMjE3Niw2ICsyMTg0LDggQEAKIAogc3RhdGljIGludAogYm54Ml9pbml0X3BoeShzdHJ1Y3QgYm54MiAqYnAsIGludCByZXNldF9waHkpCitfX3JlbGVhc2VzKCZicC0+cGh5X2xvY2spCitfX2FjcXVpcmVzKCZicC0+cGh5X2xvY2spCiB7CiAJdTMyIHZhbDsKIAlpbnQgcmMgPSAwOwpAQCAtMzAwNSw2ICszMDE1LDggQEAKIAkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQl9CiAKKwkJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIGJuYXBpIC0gJmJwLT5ibngyX25hcGlbMF0pOworCiAjaWZkZWYgQkNNX1ZMQU4KIAkJaWYgKGh3X3ZsYW4pCiAJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBicC0+dmxncnAsIHZ0YWcpOwpAQCAtMzA2MSw3ICszMDczLDcgQEAKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmYm5hcGktPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzA3OCw3ICszMDkwLDcgQEAKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmYm5hcGktPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzExNCw5ICszMTI2LDkgQEAKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZibmFwaS0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZibmFwaS0+bmFwaSkpIHsKIAkJYm5hcGktPmxhc3Rfc3RhdHVzX2lkeCA9IHNibGstPnN0YXR1c19pZHg7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmJuYXBpLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZibmFwaS0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMzIyNiw3ICszMjM4LDcgQEAKIAkJcm1iKCk7CiAJCWlmIChsaWtlbHkoIWJueDJfaGFzX2Zhc3Rfd29yayhibmFwaSkpKSB7CiAKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCVJFR19XUihicCwgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTUQsIGJuYXBpLT5pbnRfbnVtIHwKIAkJCSAgICAgICBCTlgyX1BDSUNGR19JTlRfQUNLX0NNRF9JTkRFWF9WQUxJRCB8CiAJCQkgICAgICAgYm5hcGktPmxhc3Rfc3RhdHVzX2lkeCk7CkBAIC0zMjU5LDcgKzMyNzEsNyBAQAogCiAJCXJtYigpOwogCQlpZiAobGlrZWx5KCFibngyX2hhc193b3JrKGJuYXBpKSkpIHsKLQkJCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJCWlmIChsaWtlbHkoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSV9PUl9NU0lYKSkgewogCQkJCVJFR19XUihicCwgQk5YMl9QQ0lDRkdfSU5UX0FDS19DTUQsCiAJCQkJICAgICAgIEJOWDJfUENJQ0ZHX0lOVF9BQ0tfQ01EX0lOREVYX1ZBTElEIHwKQEAgLTU4NDMsOSArNTg1NSw2IEBACiAJZm9yIChpID0gMDsgaSA8IEJOWDJfTUFYX01TSVhfVkVDOyBpKyspIHsKIAkJbXNpeF9lbnRbaV0uZW50cnkgPSBpOwogCQltc2l4X2VudFtpXS52ZWN0b3IgPSAwOwotCi0JCXNucHJpbnRmKGJwLT5pcnFfdGJsW2ldLm5hbWUsIGxlbiwgIiVzLSVkIiwgZGV2LT5uYW1lLCBpKTsKLQkJYnAtPmlycV90YmxbaV0uaGFuZGxlciA9IGJueDJfbXNpXzFzaG90OwogCX0KIAogCXJjID0gcGNpX2VuYWJsZV9tc2l4KGJwLT5wZGV2LCBtc2l4X2VudCwgQk5YMl9NQVhfTVNJWF9WRUMpOwpAQCAtNTg1NCw4ICs1ODYzLDExIEBACiAKIAlicC0+aXJxX252ZWNzID0gbXNpeF92ZWNzOwogCWJwLT5mbGFncyB8PSBCTlgyX0ZMQUdfVVNJTkdfTVNJWCB8IEJOWDJfRkxBR19PTkVfU0hPVF9NU0k7Ci0JZm9yIChpID0gMDsgaSA8IEJOWDJfTUFYX01TSVhfVkVDOyBpKyspCisJZm9yIChpID0gMDsgaSA8IEJOWDJfTUFYX01TSVhfVkVDOyBpKyspIHsKIAkJYnAtPmlycV90YmxbaV0udmVjdG9yID0gbXNpeF9lbnRbaV0udmVjdG9yOworCQlzbnByaW50ZihicC0+aXJxX3RibFtpXS5uYW1lLCBsZW4sICIlcy0lZCIsIGRldi0+bmFtZSwgaSk7CisJCWJwLT5pcnFfdGJsW2ldLmhhbmRsZXIgPSBibngyX21zaV8xc2hvdDsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC5oIGIvZHJpdmVycy9uZXQvYm54MnguaAppbmRleCAzY2YyYjkyLi5hMzI5YmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4LmgKQEAgLTI1LDYgKzI1LDE2IEBACiAjZW5kaWYKIAogCisjZGVmaW5lIEJOWDJYX01VTFRJX1FVRVVFCisKKyNkZWZpbmUgQk5YMlhfTkVXX05BUEkKKworCisjaW5jbHVkZSAiYm54MnhfcmVnLmgiCisjaW5jbHVkZSAiYm54MnhfZndfZGVmcy5oIgorI2luY2x1ZGUgImJueDJ4X2hzaS5oIgorI2luY2x1ZGUgImJueDJ4X2xpbmsuaCIKKwogLyogZXJyb3IvZGVidWcgcHJpbnRzICovCiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MngiCkBAIC05MiwxMiArMTAyLDEwIEBACiAKICNkZWZpbmUgUkVHX1JEKGJwLCBvZmZzZXQpCQlyZWFkbChSRUdfQUREUihicCwgb2Zmc2V0KSkKICNkZWZpbmUgUkVHX1JEOChicCwgb2Zmc2V0KQkJcmVhZGIoUkVHX0FERFIoYnAsIG9mZnNldCkpCi0jZGVmaW5lIFJFR19SRDY0KGJwLCBvZmZzZXQpCQlyZWFkcShSRUdfQUREUihicCwgb2Zmc2V0KSkKIAogI2RlZmluZSBSRUdfV1IoYnAsIG9mZnNldCwgdmFsKQkJd3JpdGVsKCh1MzIpdmFsLCBSRUdfQUREUihicCwgb2Zmc2V0KSkKICNkZWZpbmUgUkVHX1dSOChicCwgb2Zmc2V0LCB2YWwpCXdyaXRlYigodTgpdmFsLCBSRUdfQUREUihicCwgb2Zmc2V0KSkKICNkZWZpbmUgUkVHX1dSMTYoYnAsIG9mZnNldCwgdmFsKQl3cml0ZXcoKHUxNil2YWwsIFJFR19BRERSKGJwLCBvZmZzZXQpKQotI2RlZmluZSBSRUdfV1IzMihicCwgb2Zmc2V0LCB2YWwpCVJFR19XUihicCwgb2Zmc2V0LCB2YWwpCiAKICNkZWZpbmUgUkVHX1JEX0lORChicCwgb2Zmc2V0KQkJYm54MnhfcmVnX3JkX2luZChicCwgb2Zmc2V0KQogI2RlZmluZSBSRUdfV1JfSU5EKGJwLCBvZmZzZXQsIHZhbCkJYm54MnhfcmVnX3dyX2luZChicCwgb2Zmc2V0LCB2YWwpCkBAIC0xNTQsOCArMTYyLDYgQEAKICNkZWZpbmUgU0dFX1BBR0VfU0hJRlQJCQlQQUdFX1NISUZUCiAjZGVmaW5lIFNHRV9QQUdFX0FMSUdOKGFkZHIpCQlQQUdFX0FMSUdOKCh0eXBlb2YoUEFHRV9TSVpFKSlhZGRyKQogCi0jZGVmaW5lIEJDTV9SWF9FVEhfUEFZTE9BRF9BTElHTgk2NAotCiAvKiBTR0UgcmluZyByZWxhdGVkIG1hY3JvcyAqLwogI2RlZmluZSBOVU1fUlhfU0dFX1BBR0VTCQkyCiAjZGVmaW5lIFJYX1NHRV9DTlQJCShCQ01fUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBldGhfcnhfc2dlKSkKQEAgLTE4Nyw2ICsxOTMsNDMgQEAKICNkZWZpbmUgTkVYVF9TR0VfTUFTS19FTEVNKGVsKQkJKCgoZWwpICsgMSkgJiBSWF9TR0VfTUFTS19MRU5fTUFTSykKIAogCitzdHJ1Y3QgYm54MnhfZXRoX3Ffc3RhdHMgeworCXUzMiB0b3RhbF9ieXRlc19yZWNlaXZlZF9oaTsKKwl1MzIgdG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG87CisJdTMyIHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpOworCXUzMiB0b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbzsKKwl1MzIgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpOworCXUzMiB0b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG87CisJdTMyIHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpOworCXUzMiB0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbzsKKwl1MzIgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGk7CisJdTMyIHRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvOworCXUzMiB0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGk7CisJdTMyIHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbzsKKwl1MzIgdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGk7CisJdTMyIHRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvOworCXUzMiB0b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaTsKKwl1MzIgdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG87CisJdTMyIHZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpOworCXUzMiB2YWxpZF9ieXRlc19yZWNlaXZlZF9sbzsKKworCXUzMiBlcnJvcl9ieXRlc19yZWNlaXZlZF9oaTsKKwl1MzIgZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG87CisJdTMyIGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpOworCXUzMiBldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19sbzsKKwl1MzIgbm9fYnVmZl9kaXNjYXJkX2hpOworCXUzMiBub19idWZmX2Rpc2NhcmRfbG87CisKKwl1MzIgZHJpdmVyX3hvZmY7CisJdTMyIHJ4X2Vycl9kaXNjYXJkX3BrdDsKKwl1MzIgcnhfc2tiX2FsbG9jX2ZhaWxlZDsKKwl1MzIgaHdfY3N1bV9lcnI7Cit9OworCisjZGVmaW5lIEJOWDJYX05VTV9RX1NUQVRTCQkxMQorI2RlZmluZSBRX1NUQVRTX09GRlNFVDMyKHN0YXRfbmFtZSkgXAorCQkJKG9mZnNldG9mKHN0cnVjdCBibngyeF9ldGhfcV9zdGF0cywgc3RhdF9uYW1lKSAvIDQpCisKIHN0cnVjdCBibngyeF9mYXN0cGF0aCB7CiAKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJbmFwaTsKQEAgLTIyOCwyMCArMjcxLDE1IEBACiAJdTgJCQlpbmRleDsJLyogbnVtYmVyIGluIGZwIGFycmF5ICovCiAJdTgJCQljbF9pZDsJLyogZXRoIGNsaWVudCBpZCAqLwogCXU4CQkJc2JfaWQ7CS8qIHN0YXR1cyBibG9jayBudW1iZXIgaW4gSFcgKi8KLSNkZWZpbmUgRlBfSURYKGZwKQkJCShmcC0+aW5kZXgpCi0jZGVmaW5lIEZQX0NMX0lEKGZwKQkJCShmcC0+Y2xfaWQpCi0jZGVmaW5lIEJQX0NMX0lEKGJwKQkJCShicC0+ZnBbMF0uY2xfaWQpCi0jZGVmaW5lIEZQX1NCX0lEKGZwKQkJCShmcC0+c2JfaWQpCi0jZGVmaW5lIENOSUNfU0JfSUQJCQkwCiAKIAl1MTYJCQl0eF9wa3RfcHJvZDsKIAl1MTYJCQl0eF9wa3RfY29uczsKIAl1MTYJCQl0eF9iZF9wcm9kOwogCXUxNgkJCXR4X2JkX2NvbnM7Ci0JdTE2CQkJKnR4X2NvbnNfc2I7CisJX19sZTE2CQkJKnR4X2NvbnNfc2I7CiAKLQl1MTYJCQlmcF9jX2lkeDsKLQl1MTYJCQlmcF91X2lkeDsKKwlfX2xlMTYJCQlmcF9jX2lkeDsKKwlfX2xlMTYJCQlmcF91X2lkeDsKIAogCXUxNgkJCXJ4X2JkX3Byb2Q7CiAJdTE2CQkJcnhfYmRfY29uczsKQEAgLTI1MCw4ICsyODgsOCBAQAogCXUxNgkJCXJ4X3NnZV9wcm9kOwogCS8qIFRoZSBsYXN0IG1heGltYWwgY29tcGxldGVkIFNHRSAqLwogCXUxNgkJCWxhc3RfbWF4X3NnZTsKLQl1MTYJCQkqcnhfY29uc19zYjsKLQl1MTYJCQkqcnhfYmRfY29uc19zYjsKKwlfX2xlMTYJCQkqcnhfY29uc19zYjsKKwlfX2xlMTYJCQkqcnhfYmRfY29uc19zYjsKIAogCXVuc2lnbmVkIGxvbmcJCXR4X3BrdCwKIAkJCQlyeF9wa3QsCkBAIC0yNjYsNiArMzA0LDEyIEBACiAJdTY0CQkJdHBhX3F1ZXVlX3VzZWQ7CiAjZW5kaWYKIAorCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyBvbGRfdGNsaWVudDsKKwlzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMgb2xkX3VjbGllbnQ7CisJc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF94Y2xpZW50OworCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyBldGhfcV9zdGF0czsKKworCWNoYXIJCQluYW1lW0lGTkFNU0laXTsKIAlzdHJ1Y3QgYm54MngJCSpicDsgLyogcGFyZW50ICovCiB9OwogCkBAIC00MDEsMTAgKzQ0NSwxMyBAQAogI2RlZmluZSBCTlgyWF9SWF9DU1VNX09LKGNxZSkgXAogCQkJKCEoQk5YMlhfTDRfQ1NVTV9FUlIoY3FlKSB8fCBCTlgyWF9JUF9DU1VNX0VSUihjcWUpKSkKIAorI2RlZmluZSBCTlgyWF9QUlNfRkxBR19PVkVSRVRIX0lQVjQoZmxhZ3MpIFwKKwkJCQkoKChsZTE2X3RvX2NwdShmbGFncykgJiBcCisJCQkJICAgUEFSU0lOR19GTEFHU19PVkVSX0VUSEVSTkVUX1BST1RPQ09MKSA+PiBcCisJCQkJICBQQVJTSU5HX0ZMQUdTX09WRVJfRVRIRVJORVRfUFJPVE9DT0xfU0hJRlQpIFwKKwkJCQkgPT0gUFJTX0ZMQUdfT1ZFUkVUSF9JUFY0KQogI2RlZmluZSBCTlgyWF9SWF9TVU1fRklYKGNxZSkgXAotCQkJKChsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucGFyc19mbGFncy5mbGFncykgJiBcCi0JCQkgIFBBUlNJTkdfRkxBR1NfT1ZFUl9FVEhFUk5FVF9QUk9UT0NPTCkgPT0gXAotCQkJICgxIDw8IFBBUlNJTkdfRkxBR1NfT1ZFUl9FVEhFUk5FVF9QUk9UT0NPTF9TSElGVCkpCisJQk5YMlhfUFJTX0ZMQUdfT1ZFUkVUSF9JUFY0KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKQogCiAKICNkZWZpbmUgRlBfVVNCX0ZVTkNfT0ZGCQkJKDIgKyAyKkhDX1VTVE9STV9TQl9OVU1fSU5ESUNFUykKQEAgLTQ3OCwxMSArNTI1LDggQEAKIAl1MzIJCQlzaG1lbV9iYXNlOwogCiAJdTMyCQkJaHdfY29uZmlnOwotCXUzMgkJCWJvYXJkOwogCiAJdTMyCQkJYmNfdmVyOwotCi0JY2hhcgkJCSpuYW1lOwogfTsKIAogCkBAIC01MjgsNiArNTcyLDcgQEAKIAogCS8qIHVzZWQgdG8gc3luY2hyb25pemUgcGh5IGFjY2Vzc2VzICovCiAJc3RydWN0IG11dGV4CQlwaHlfbXV0ZXg7CisJaW50CQkJbmVlZF9od19sb2NrOwogCiAJdTMyCQkJcG9ydF9zdHg7CiAKQEAgLTU3Myw2ICs2MTgsMTAgQEAKIAogCXUzMiBlcnJvcl9ieXRlc19yZWNlaXZlZF9oaTsKIAl1MzIgZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG87CisJdTMyIGV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpOworCXUzMiBldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19sbzsKKwl1MzIgbm9fYnVmZl9kaXNjYXJkX2hpOworCXUzMiBub19idWZmX2Rpc2NhcmRfbG87CiAKIAl1MzIgcnhfc3RhdF9pZmhjaW5iYWRvY3RldHNfaGk7CiAJdTMyIHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2xvOwpAQCAtNjUxLDE5ICs3MDAsMjAgQEAKIAl1MzIgdHhfc3RhdF9ibWFjX3VmbF9oaTsKIAl1MzIgdHhfc3RhdF9ibWFjX3VmbF9sbzsKIAotCXUzMiBicmJfZHJvcF9oaTsKLQl1MzIgYnJiX2Ryb3BfbG87Ci0JdTMyIGJyYl90cnVuY2F0ZV9oaTsKLQl1MzIgYnJiX3RydW5jYXRlX2xvOwotCi0JdTMyIGphYmJlcl9wYWNrZXRzX3JlY2VpdmVkOworCXUzMiBwYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGk7CisJdTMyIHBhdXNlX2ZyYW1lc19yZWNlaXZlZF9sbzsKKwl1MzIgcGF1c2VfZnJhbWVzX3NlbnRfaGk7CisJdTMyIHBhdXNlX2ZyYW1lc19zZW50X2xvOwogCiAJdTMyIGV0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0c19oaTsKIAl1MzIgZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzX2xvOwogCXUzMiBldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2hpOwogCXUzMiBldGhlcnN0YXRzcGt0c292ZXIxNTIyb2N0ZXRzX2xvOwogCi0JdTMyIG5vX2J1ZmZfZGlzY2FyZDsKKwl1MzIgYnJiX2Ryb3BfaGk7CisJdTMyIGJyYl9kcm9wX2xvOworCXUzMiBicmJfdHJ1bmNhdGVfaGk7CisJdTMyIGJyYl90cnVuY2F0ZV9sbzsKIAogCXUzMiBtYWNfZmlsdGVyX2Rpc2NhcmQ7CiAJdTMyIHh4b3ZlcmZsb3dfZGlzY2FyZDsKQEAgLTY3NCwxNyArNzI0LDE2IEBACiAJdTMyIHJ4X2Vycl9kaXNjYXJkX3BrdDsKIAl1MzIgcnhfc2tiX2FsbG9jX2ZhaWxlZDsKIAl1MzIgaHdfY3N1bV9lcnI7CisKKwl1MzIgbmlnX3RpbWVyX21heDsKIH07CiAKKyNkZWZpbmUgQk5YMlhfTlVNX1NUQVRTCQkJNDEKICNkZWZpbmUgU1RBVFNfT0ZGU0VUMzIoc3RhdF9uYW1lKSBcCiAJCQkob2Zmc2V0b2Yoc3RydWN0IGJueDJ4X2V0aF9zdGF0cywgc3RhdF9uYW1lKSAvIDQpCiAKIAotI2lmZGVmIEJOWDJYX01VTFRJCiAjZGVmaW5lIE1BWF9DT05URVhUCQkJMTYKLSNlbHNlCi0jZGVmaW5lIE1BWF9DT05URVhUCQkJMQotI2VuZGlmCiAKIHVuaW9uIGNkdV9jb250ZXh0IHsKIAlzdHJ1Y3QgZXRoX2NvbnRleHQgZXRoOwpAQCAtNzM5LDYgKzc4OCw5IEBACiAKIAlhdG9taWNfdAkJaW50cl9zZW07CiAJc3RydWN0IG1zaXhfZW50cnkJbXNpeF90YWJsZVtNQVhfQ09OVEVYVCsxXTsKKyNkZWZpbmUgSU5UX01PREVfSU5UeAkJCTEKKyNkZWZpbmUgSU5UX01PREVfTVNJCQkJMgorI2RlZmluZSBJTlRfTU9ERV9NU0lYCQkJMwogCiAJaW50CQkJdHhfcmluZ19zaXplOwogCkBAIC03NDcsMjMgKzc5OSwyNiBAQAogI2VuZGlmCiAKIAl1MzIJCQlyeF9jc3VtOwotCXUzMgkJCXJ4X29mZnNldDsKIAl1MzIJCQlyeF9idWZfc2l6ZTsKICNkZWZpbmUgRVRIX09WUkVIRUFECQkJKEVUSF9ITEVOICsgOCkJLyogOCBmb3IgQ1JDICsgVkxBTiAqLwogI2RlZmluZSBFVEhfTUlOX1BBQ0tFVF9TSVpFCQk2MAogI2RlZmluZSBFVEhfTUFYX1BBQ0tFVF9TSVpFCQkxNTAwCiAjZGVmaW5lIEVUSF9NQVhfSlVNQk9fUEFDS0VUX1NJWkUJOTYwMAogCisJLyogTWF4IHN1cHBvcnRlZCBhbGlnbm1lbnQgaXMgMjU2ICg4IHNoaWZ0KSAqLworI2RlZmluZSBCTlgyWF9SWF9BTElHTl9TSElGVAkJKChMMV9DQUNIRV9TSElGVCA8IDgpID8gXAorCQkJCQkgTDFfQ0FDSEVfU0hJRlQgOiA4KQorI2RlZmluZSBCTlgyWF9SWF9BTElHTgkJCSgxIDw8IEJOWDJYX1JYX0FMSUdOX1NISUZUKQorCiAJc3RydWN0IGhvc3RfZGVmX3N0YXR1c19ibG9jayAqZGVmX3N0YXR1c19ibGs7CiAjZGVmaW5lIERFRl9TQl9JRAkJCTE2Ci0JdTE2CQkJZGVmX2NfaWR4OwotCXUxNgkJCWRlZl91X2lkeDsKLQl1MTYJCQlkZWZfeF9pZHg7Ci0JdTE2CQkJZGVmX3RfaWR4OwotCXUxNgkJCWRlZl9hdHRfaWR4OworCV9fbGUxNgkJCWRlZl9jX2lkeDsKKwlfX2xlMTYJCQlkZWZfdV9pZHg7CisJX19sZTE2CQkJZGVmX3hfaWR4OworCV9fbGUxNgkJCWRlZl90X2lkeDsKKwlfX2xlMTYJCQlkZWZfYXR0X2lkeDsKIAl1MzIJCQlhdHRuX3N0YXRlOwogCXN0cnVjdCBhdHRuX3JvdXRlCWF0dG5fZ3JvdXBbTUFYX0RZTkFNSUNfQVRUTl9HUlBTXTsKLQl1MzIJCQluaWdfbWFzazsKIAogCS8qIHNsb3cgcGF0aCByaW5nICovCiAJc3RydWN0IGV0aF9zcGUJCSpzcHE7CkBAIC03NzEsNyArODI2LDcgQEAKIAl1MTYJCQlzcHFfcHJvZF9pZHg7CiAJc3RydWN0IGV0aF9zcGUJCSpzcHFfcHJvZF9iZDsKIAlzdHJ1Y3QgZXRoX3NwZQkJKnNwcV9sYXN0X2JkOwotCXUxNgkJCSpkc2Jfc3BfcHJvZDsKKwlfX2xlMTYJCQkqZHNiX3NwX3Byb2Q7CiAJdTE2CQkJc3BxX2xlZnQ7IC8qIHNlcmlhbGl6ZSBzcHEgKi8KIAkvKiB1c2VkIHRvIHN5bmNocm9uaXplIHNwcSBhY2Nlc3NlcyAqLwogCXNwaW5sb2NrX3QJCXNwcV9sb2NrOwpAQCAtNzg5LDExICs4NDQsMTEgQEAKIAl1MzIJCQlmbGFnczsKICNkZWZpbmUgUENJWF9GTEFHCQkJMQogI2RlZmluZSBQQ0lfMzJCSVRfRkxBRwkJCTIKLSNkZWZpbmUgT05FX1RETUFfRkxBRwkJCTQJLyogbm8gbG9uZ2VyIHVzZWQgKi8KKyNkZWZpbmUgT05FX1BPUlRfRkxBRwkJCTQKICNkZWZpbmUgTk9fV09MX0ZMQUcJCQk4CiAjZGVmaW5lIFVTSU5HX0RBQ19GTEFHCQkJMHgxMAogI2RlZmluZSBVU0lOR19NU0lYX0ZMQUcJCQkweDIwCi0jZGVmaW5lIEFTRl9FTkFCTEVfRkxBRwkJCTB4NDAKKyNkZWZpbmUgVVNJTkdfTVNJX0ZMQUcJCQkweDQwCiAjZGVmaW5lIFRQQV9FTkFCTEVfRkxBRwkJCTB4ODAKICNkZWZpbmUgTk9fTUNQX0ZMQUcJCQkweDEwMAogI2RlZmluZSBCUF9OT01DUChicCkJCQkoYnAtPmZsYWdzICYgTk9fTUNQX0ZMQUcpCkBAIC04MDgsMTIgKzg2MywxMiBAQAogCiAJaW50CQkJcG1fY2FwOwogCWludAkJCXBjaWVfY2FwOworCWludAkJCW1ycnM7CiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCXNwX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0CXJlc2V0X3Rhc2s7CiAKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKLQlpbnQJCQl0aW1lcl9pbnRlcnZhbDsKIAlpbnQJCQljdXJyZW50X2ludGVydmFsOwogCiAJdTE2CQkJZndfc2VxOwpAQCAtODI2LDYgKzg4MSw5IEBACiAJc3RydWN0IGJueDJ4X2NvbW1vbgljb21tb247CiAJc3RydWN0IGJueDJ4X3BvcnQJcG9ydDsKIAorCXN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCBjbW5nOworCXUzMgkJCXZuX3dlaWdodF9zdW07CisKIAl1MzIJCQltZl9jb25maWc7CiAJdTE2CQkJZTFob3Y7CiAJdTgJCQllMWhtZjsKQEAgLTg0OCw3ICs5MDYsNyBAQAogCXUzMgkJCWxpbl9jbnQ7CiAKIAlpbnQJCQlzdGF0ZTsKLSNkZWZpbmUgQk5YMlhfU1RBVEVfQ0xPU0VECQkweDAKKyNkZWZpbmUgQk5YMlhfU1RBVEVfQ0xPU0VECQkwCiAjZGVmaW5lIEJOWDJYX1NUQVRFX09QRU5JTkdfV0FJVDRfTE9BRAkweDEwMDAKICNkZWZpbmUgQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9QT1JUCTB4MjAwMAogI2RlZmluZSBCTlgyWF9TVEFURV9PUEVOCQkweDMwMDAKQEAgLTg1OSw4ICs5MTcsOSBAQAogI2RlZmluZSBCTlgyWF9TVEFURV9ESUFHCQkweGUwMDAKICNkZWZpbmUgQk5YMlhfU1RBVEVfRVJST1IJCTB4ZjAwMAogCi0JaW50CQkJbnVtX3F1ZXVlczsKLSNkZWZpbmUgQlBfTUFYX1FVRVVFUyhicCkJCShJU19FMUhNRihicCkgPyA0IDogMTYpCisJaW50CQkJbXVsdGlfbW9kZTsKKwlpbnQJCQludW1fcnhfcXVldWVzOworCWludAkJCW51bV90eF9xdWV1ZXM7CiAKIAl1MzIJCQlyeF9tb2RlOwogI2RlZmluZSBCTlgyWF9SWF9NT0RFX05PTkUJCTAKQEAgLTg5OCw4ICs5NTcsNiBAQAogCWludAkJCWV4ZWN1dGVyX2lkeDsKIAogCXUxNgkJCXN0YXRzX2NvdW50ZXI7Ci0Jc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzIG9sZF90Y2xpZW50OwotCXN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyBvbGRfeGNsaWVudDsKIAlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzCWV0aF9zdGF0czsKIAogCXN0cnVjdCB6X3N0cmVhbV9zCSpzdHJtOwpAQCAtOTExLDE3ICs5NjgsMjcgQEAKIH07CiAKIAotI2RlZmluZSBmb3JfZWFjaF9xdWV1ZShicCwgdmFyKQlmb3IgKHZhciA9IDA7IHZhciA8IGJwLT5udW1fcXVldWVzOyB2YXIrKykKKyNkZWZpbmUgQk5YMlhfTUFYX1FVRVVFUyhicCkJKElTX0UxSE1GKGJwKSA/IChNQVhfQ09OVEVYVCAvIEUxSFZOX01BWCkgOiBcCisJCQkJCQkgTUFYX0NPTlRFWFQpCisjZGVmaW5lIEJOWDJYX05VTV9RVUVVRVMoYnApCW1heChicC0+bnVtX3J4X3F1ZXVlcywgYnAtPm51bV90eF9xdWV1ZXMpCisjZGVmaW5lIGlzX211bHRpKGJwKQkJKEJOWDJYX05VTV9RVUVVRVMoYnApID4gMSkKIAorI2RlZmluZSBmb3JfZWFjaF9yeF9xdWV1ZShicCwgdmFyKSBcCisJCQlmb3IgKHZhciA9IDA7IHZhciA8IGJwLT5udW1fcnhfcXVldWVzOyB2YXIrKykKKyNkZWZpbmUgZm9yX2VhY2hfdHhfcXVldWUoYnAsIHZhcikgXAorCQkJZm9yICh2YXIgPSAwOyB2YXIgPCBicC0+bnVtX3R4X3F1ZXVlczsgdmFyKyspCisjZGVmaW5lIGZvcl9lYWNoX3F1ZXVlKGJwLCB2YXIpIFwKKwkJCWZvciAodmFyID0gMDsgdmFyIDwgQk5YMlhfTlVNX1FVRVVFUyhicCk7IHZhcisrKQogI2RlZmluZSBmb3JfZWFjaF9ub25kZWZhdWx0X3F1ZXVlKGJwLCB2YXIpIFwKLQkJCQlmb3IgKHZhciA9IDE7IHZhciA8IGJwLT5udW1fcXVldWVzOyB2YXIrKykKLSNkZWZpbmUgaXNfbXVsdGkoYnApCQkoYnAtPm51bV9xdWV1ZXMgPiAxKQorCQkJZm9yICh2YXIgPSAxOyB2YXIgPCBCTlgyWF9OVU1fUVVFVUVTKGJwKTsgdmFyKyspCiAKIAogdm9pZCBibngyeF9yZWFkX2RtYWUoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNyY19hZGRyLCB1MzIgbGVuMzIpOwogdm9pZCBibngyeF93cml0ZV9kbWFlKHN0cnVjdCBibngyeCAqYnAsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHUzMiBkc3RfYWRkciwKIAkJICAgICAgdTMyIGxlbjMyKTsKK2ludCBibngyeF9nZXRfZ3BpbyhzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHU4IHBvcnQpOwogaW50IGJueDJ4X3NldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTMyIG1vZGUsIHU4IHBvcnQpOworaW50IGJueDJ4X3NldF9ncGlvX2ludChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlLCB1OCBwb3J0KTsKIAogc3RhdGljIGlubGluZSB1MzIgcmVnX3BvbGwoc3RydWN0IGJueDJ4ICpicCwgdTMyIHJlZywgdTMyIGV4cGVjdGVkLCBpbnQgbXMsCiAJCQkgICBpbnQgd2FpdCkKQEAgLTk5MiwxMyArMTA1OSwxMiBAQAogI2RlZmluZSBQQ0lDRkdfTElOS19TUEVFRF9TSElGVAkJMTYKIAogCi0jZGVmaW5lIEJOWDJYX05VTV9TVEFUUwkJCTQyCi0jZGVmaW5lIEJOWDJYX05VTV9URVNUUwkJCTgKKyNkZWZpbmUgQk5YMlhfTlVNX1RFU1RTCQkJNwogCi0jZGVmaW5lIEJOWDJYX01BQ19MT09QQkFDSwkJMAotI2RlZmluZSBCTlgyWF9QSFlfTE9PUEJBQ0sJCTEKLSNkZWZpbmUgQk5YMlhfTUFDX0xPT1BCQUNLX0ZBSUxFRAkxCi0jZGVmaW5lIEJOWDJYX1BIWV9MT09QQkFDS19GQUlMRUQJMgorI2RlZmluZSBCTlgyWF9QSFlfTE9PUEJBQ0sJCTAKKyNkZWZpbmUgQk5YMlhfTUFDX0xPT1BCQUNLCQkxCisjZGVmaW5lIEJOWDJYX1BIWV9MT09QQkFDS19GQUlMRUQJMQorI2RlZmluZSBCTlgyWF9NQUNfTE9PUEJBQ0tfRkFJTEVECTIKICNkZWZpbmUgQk5YMlhfTE9PUEJBQ0tfRkFJTEVECQkoQk5YMlhfTUFDX0xPT1BCQUNLX0ZBSUxFRCB8IFwKIAkJCQkJIEJOWDJYX1BIWV9MT09QQkFDS19GQUlMRUQpCiAKQEAgLTEwNjEsOSArMTEyNyw2IEBACiAjZGVmaW5lIEJOWDJYX01DUF9BU1NFUlQgXAogCUdFTkVSQUxfQVRURU5fT0ZGU0VUKE1DUF9GQVRBTF9BU1NFUlRfQVRURU5USU9OX0JJVCkKIAotI2RlZmluZSBCTlgyWF9ET09SUV9BU1NFUlQgXAotCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9IV19JTlRFUlJVUFQKLQogI2RlZmluZSBCTlgyWF9HUkNfVElNRU9VVAlHRU5FUkFMX0FUVEVOX09GRlNFVChMQVRDSEVEX0FUVE5fVElNRU9VVF9HUkMpCiAjZGVmaW5lIEJOWDJYX0dSQ19SU1YJCShHRU5FUkFMX0FUVEVOX09GRlNFVChMQVRDSEVEX0FUVE5fUkJDUikgfCBcCiAJCQkJIEdFTkVSQUxfQVRURU5fT0ZGU0VUKExBVENIRURfQVRUTl9SQkNUKSB8IFwKQEAgLTExMjAsMTIgKzExODMsMTMgQEAKIAkJCQkgQUVVX0lOUFVUU19BVFROX0JJVFNfTUlTQ19QQVJJVFlfRVJST1IpCiAKIAotI2RlZmluZSBNVUxUSV9GTEFHUyBcCisjZGVmaW5lIE1VTFRJX0ZMQUdTKGJwKSBcCiAJCShUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX0lQVjRfQ0FQQUJJTElUWSB8IFwKIAkJIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNF9UQ1BfQ0FQQUJJTElUWSB8IFwKIAkJIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9DQVBBQklMSVRZIHwgXAogCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X1RDUF9DQVBBQklMSVRZIHwgXAotCQkgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19FTkFCTEUpCisJCSAoYnAtPm11bHRpX21vZGUgPDwgXAorCQkgIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfTU9ERV9TSElGVCkpCiAKICNkZWZpbmUgTVVMVElfTUFTSwkJCTB4N2YKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfZHVtcC5oIGIvZHJpdmVycy9uZXQvYm54MnhfZHVtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YzZiMDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9kdW1wLmgKQEAgLTAsMCArMSw1MjYgQEAKKy8qIGJueDJ4X2R1bXAuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworCisvKiBUaGlzIHN0cnVjdCBob2xkcyBhIHNpZ25hdHVyZSB0byBlbnN1cmUgdGhlIGR1bXAgcmV0dXJuZWQgZnJvbSB0aGUgZHJpdmVyCisgKiBtYXRjaCB0aGUgbWV0YSBkYXRhIGZpbGUgaW5zZXJ0ZWQgdG8gZ3JjX2R1bXAudGNsCisgKiBUaGUgc2lnbmF0dXJlIGlzIHRpbWUgc3RhbXAsIGRpYWcgdmVyc2lvbiBhbmQgZ3JjX2R1bXAgdmVyc2lvbgorICovCisKK3N0cnVjdCBkdW1wX3NpZ24geworCXUzMiB0aW1lX3N0YW1wOworCXUzMiBkaWFnX3ZlcjsKKwl1MzIgZ3JjX2R1bXBfdmVyOworfTsKKworI2RlZmluZSBUU1RPUk1fV0FJVFBfQUREUgkweDFiOGE4MAorI2RlZmluZSBDU1RPUk1fV0FJVFBfQUREUgkweDIzOGE4MAorI2RlZmluZSBYU1RPUk1fV0FJVFBfQUREUgkweDJiOGE4MAorI2RlZmluZSBVU1RPUk1fV0FJVFBfQUREUgkweDMzOGE4MAorI2RlZmluZSBUU1RPUk1fQ0FNX01PREUJCTB4MWIxNDQwCisKKyNkZWZpbmUgUklfRTEJCQkweDEKKyNkZWZpbmUgUklfRTFICQkJMHgyCisjZGVmaW5lIFJJX09OTElORQkJMHgxMDAKKworI2RlZmluZSBSSV9FMV9PRkZMSU5FCQkoUklfRTEpCisjZGVmaW5lIFJJX0UxX09OTElORQkJKFJJX0UxIHwgUklfT05MSU5FKQorI2RlZmluZSBSSV9FMUhfT0ZGTElORQkJKFJJX0UxSCkKKyNkZWZpbmUgUklfRTFIX09OTElORQkJKFJJX0UxSCB8IFJJX09OTElORSkKKyNkZWZpbmUgUklfQUxMX09GRkxJTkUJCShSSV9FMSB8IFJJX0UxSCkKKyNkZWZpbmUgUklfQUxMX09OTElORQkJKFJJX0UxIHwgUklfRTFIIHwgUklfT05MSU5FKQorCisjZGVmaW5lIE1BWF9USU1FUl9QRU5ESU5HCTIwMAorI2RlZmluZSBUSU1FUl9TQ0FOX0RPTlRfQ0FSRQkweEZGCisKKworc3RydWN0IGR1bXBfaGRyIHsKKwl1MzIJCSBoZHJfc2l6ZTsJLyogaW4gZHdvcmRzLCBleGNsdWRpbmcgdGhpcyBmaWVsZCAqLworCXN0cnVjdCBkdW1wX3NpZ24gZHVtcF9zaWduOworCXUzMgkJIHhzdG9ybV93YWl0cDsKKwl1MzIJCSB0c3Rvcm1fd2FpdHA7CisJdTMyCQkgdXN0b3JtX3dhaXRwOworCXUzMgkJIGNzdG9ybV93YWl0cDsKKwl1MTYJCSBpbmZvOworCXU4CQkgaWRsZV9jaGs7CisJdTgJCSByZXNlcnZlZDsKK307CisKK3N0cnVjdCByZWdfYWRkciB7CisJdTMyIGFkZHI7CisJdTMyIHNpemU7CisJdTE2IGluZm87Cit9OworCitzdHJ1Y3Qgd3JlZ19hZGRyIHsKKwl1MzIgYWRkcjsKKwl1MzIgc2l6ZTsKKwl1MzIgcmVhZF9yZWdzX2NvdW50OworCWNvbnN0IHUzMiAqcmVhZF9yZWdzOworCXUxNiBpbmZvOworfTsKKworCisjZGVmaW5lIFJFR1NfQ09VTlQJCTU1OAorc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfYWRkciByZWdfYWRkcnNbUkVHU19DT1VOVF0gPSB7CisJeyAweDIwMDAsIDM0MSwgUklfQUxMX09OTElORX0sIHsgMHgyODAwLCAxMDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAwLCAyODcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzgwMCwgMzMxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ODgwMCwgNiwgUklfRTFfT05MSU5FfSwgeyAweGEwMDAsIDIyMywgUklfQUxMX09OTElORX0sCisJeyAweGEzODgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YTM5OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGEzOWMsIDcsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTNjMCwgMywgUklfRTFIX09OTElORX0sCisJeyAweGEzZDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTNkOCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweGEzZTAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTNlOCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweGEzZjAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4YTNmOCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweGE0MDAsIDY5LCBSSV9BTExfT05MSU5FfSwgeyAweGE1MTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNTIwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1MjgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNTMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1MzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNTQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1NDgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNTUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1NTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNTYwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1NjgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNTcwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1ODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNTkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1YTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNWMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE1ZTAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhhNWU4LCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweGE1ZjAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHhhNWY4LCAxMCwgUklfRTFIX09OTElORX0sIHsgMHgxMDAwMCwgMjM2LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzYmMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzY2MsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDNkYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQwMCwgNTcsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDRlOCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDRmNCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwNTAwLCAxNDYsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3NTAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDc2MCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDc3MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwNzgwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNzkwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA3YTAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA3YjAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDdjMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMDdkMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwN2UwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDEwODgwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA5MDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjAwMCwgMjYsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNjA3MCwgMTgsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTYwYzAsIDI3LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTYxNDAsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTYxNjAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNjE4MCwgMiwgUklfRTFIX09OTElORX0sIHsgMHgxNjFjMCwgMiwgUklfRTFIX09OTElORX0sCisJeyAweDE2MjA0LCA1LCBSSV9FMUhfT05MSU5FfSwgeyAweDE4MDAwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTgwMDgsIDEsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MjAwMDAsIDI0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwNjAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwODAsIDEzOCwgUklfQUxMX09OTElORX0sCisJeyAweDIwMmI0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMmM0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjA0MDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjA0MGMsIDgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDQyYywgMTgsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MjA0ODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDUwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDYwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDA0LCA4MTkxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDA0LCAxNjM4MywgUklfQUxMX09GRkxJTkV9LAorCXsgMHg0MDAwMCwgOTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDAxOTQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDFhNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MDFhOCwgMTEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHg0MDIwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHg0MDQwMCwgNDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDRiOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MDRjOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQwNGNjLCAzLCBSSV9FMUhfT05MSU5FfSwgeyAweDQwNTAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDA1MTAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDA1MjAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MDUzMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHg0MDU0MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDQyMDAwLCAxNjQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDIyOWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjJhYywgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MjJiYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQyMmQ0LCA1LCBSSV9FMUhfT05MSU5FfSwgeyAweDQyNDAwLCA0OSwgUklfQUxMX09OTElORX0sCisJeyAweDQyNGM4LCAzOCwgUklfQUxMX09OTElORX0sIHsgMHg0MjU2OCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDQyODAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMDAwLCAyMCwgUklfQUxMX09OTElORX0sCisJeyAweDUwMDUwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDUwMDcwLCA4OCwgUklfQUxMX09OTElORX0sCisJeyAweDUwMWRjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMWVjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAxZjAsIDQsIFJJX0UxSF9PTkxJTkV9LCB7IDB4NTAyMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDIwYywgNywgUklfQUxMX09OTElORX0sIHsgMHg1MDIyOCwgNiwgUklfRTFIX09OTElORX0sCisJeyAweDUwMjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMjgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTIwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTQwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1NDAwNCwgMzMyNywgUklfQUxMX09GRkxJTkV9LCB7IDB4NTgwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1ODAwNCwgODE5MSwgUklfQUxMX09GRkxJTkV9LCB7IDB4NjAwMDAsIDcxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NjAxMjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NjAxMzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg2MDEzYywgMjQsIFJJX0UxSF9PTkxJTkV9LCB7IDB4NjAyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg2MTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg2MTAwNCwgNTExLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDcwMDAwLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweDcwMDIwLCAyMTQ5NiwgUklfQUxMX09GRkxJTkV9LAorCXsgMHg4NTAwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHg4NTAwYywgNCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHg4NTAxYywgNywgUklfQUxMX09OTElORX0sIHsgMHg4NTAzOCwgNCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHg4NTA0OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg4NTA0YywgMTA5LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDg1MjAwLCAzMiwgUklfQUxMX09OTElORX0sIHsgMHg4NTI4MCwgMTExMDQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4YTAwMDAsIDE2Mzg0LCBSSV9BTExfT05MSU5FfSwgeyAweGIwMDAwLCAxNjM4NCwgUklfRTFIX09OTElORX0sCisJeyAweGMxMDAwLCA3LCBSSV9BTExfT05MSU5FfSwgeyAweGMxMDI4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzEwMzgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzE4MDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjAwMCwgMTY0LCBSSV9BTExfT05MSU5FfSwgeyAweGMyMjljLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzIyYWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzIyYmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjQwMCwgNDksIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzI0YzgsIDM4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzI1NjgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzI2MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDAwMCwgMTY1LCBSSV9BTExfT05MSU5FfSwgeyAweGM0MmEwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQyYjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDJlMCwgNywgUklfRTFIX09OTElORX0sIHsgMHhjNDQwMCwgNTEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDRkMCwgMzgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQ1NzAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDYwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDAwMCwgMTksIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDA0YywgOCwgUklfQUxMX09OTElORX0sIHsgMHhkMDA2YywgOTEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDFlNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDFmNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGQwMjAwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMjBjLCA3LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAyMjgsIDE4LCBSSV9FMUhfT05MSU5FfSwgeyAweGQwMjgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAzMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkNDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkNDAwNCwgMjU1OSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHhkODAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkODAwNCwgODE5MSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHhlMDAwMCwgMjEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAwNTQsIDgsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMDA3NCwgODUsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAxZDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMDFlNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhlMDIwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweGUwMjBjLCA4LCBSSV9BTExfT05MSU5FfSwgeyAweGUwMjJjLCAxOCwgUklfRTFIX09OTElORX0sCisJeyAweGUwMjgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGUwMzAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTIwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMjAwNCwgMjA0NywgUklfQUxMX09GRkxJTkV9LCB7IDB4ZjAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhmMDAwNCwgMTYzODMsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwMTAwMCwgMTIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDEwM2MsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAxMDRjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAxMDUwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDEwMTEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMTgwMCwgOCwgUklfQUxMX09OTElORX0sIHsgMHgxMDIwMDAsIDE4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAyMDU0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMjA2NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwMjA4MCwgMTcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAyMGM4LCA4LCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTAyNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzAwMCwgMjYsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDMwNzQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDg0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzMDk0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzA5OCwgNSwgUklfRTFIX09OTElORX0sCisJeyAweDEwMzgwMCwgOCwgUklfQUxMX09OTElORX0sIHsgMHgxMDQwMDAsIDYzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0MTA4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDExOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwNDIwMCwgMTcsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0NDAwLCA2NCwgUklfQUxMX09OTElORX0sCisJeyAweDEwNDUwMCwgMTkyLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDQ4MDAsIDY0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0OTAwLCAxOTIsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTAwMCwgNywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTAxYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwM2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA0MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA0YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwNjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwNmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTA3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA3YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MDgwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDhjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwOWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBhMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBhYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwYzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwY2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTBkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBkYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MGUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUwZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwZmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTEwMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTEwYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxMjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxMmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTEzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTEzYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxNWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE2MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE2YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MTcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTdjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxODAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxOGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTE5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE5YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWFjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxYmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFjMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFjYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MWQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWRjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUxZTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxZWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTFmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFmYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjAwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjBjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyMWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTIyMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTIyYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyNDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyNGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI1YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyN2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTI4MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI4YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MjkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjljLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyYTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyYWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJiYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmNjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUyZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyZGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTJlMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJlYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MmYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmZjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzMDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzMGMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTMxMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMxYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzJjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzM2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM0MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM0YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzVjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzNjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzNmMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTM3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM3YywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1MzgwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzhjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzOWMsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNhMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNhYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2IwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2JjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzYzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzY2MsIDEsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDEwNTNkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNkYywgMSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA1M2UwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2VjLCAxLCBSSV9BTExfT0ZGTElORX0sIHsgMHgxMDUzZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzZmMsIDc2OSwgUklfQUxMX09GRkxJTkV9LCB7IDB4MTA4MDAwLCAzMywgUklfQUxMX09OTElORX0sCisJeyAweDEwODA5MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDgwYTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDgwYWMsIDUsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTA4MTAwLCA1LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA4MTIwLCA1LCBSSV9BTExfT05MSU5FfSwgeyAweDEwODIwMCwgNzQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDg0MDAsIDc0LCBSSV9BTExfT05MSU5FfSwgeyAweDEwODgwMCwgMTUyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA5MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDAwMCwgMzQ3LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNTc4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDU4OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDU5OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA1OWMsIDIzLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTIwNjE0LCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDEyMDYxYywgMzAsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxMjA4MGMsIDY1LCBSSV9BTExfT05MSU5FfSwgeyAweDEyMGEwMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEyMjAwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMjgwMDAsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxNDAwMDAsIDExNCwgUklfQUxMX09OTElORX0sIHsgMHgxNDAxZDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNDAxZTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMjAwLCA2LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTQ0MDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDE0ODAwMCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDE0YzAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgxNTAwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNTQwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTU4MDAwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTVjMDAwLCA3LCBSSV9FMUhfT05MSU5FfSwgeyAweDE2MTAwMCwgNywgUklfQUxMX09OTElORX0sCisJeyAweDE2MTAyOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjEwMzgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjE4MDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MDAwLCA2MCwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDBmYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQxMGMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQxMTAsIDIsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTY0MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjA4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDIxMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDIxOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyMjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyMjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjMwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDI0MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDI0OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjQyNTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQyNTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MjYwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY0MjcwLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NDI4MCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDE2NDgwMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjUwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjYwMDAsIDE2NCwgUklfQUxMX09OTElORX0sIHsgMHgxNjYyOWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjYyYWMsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2MmJjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2NDAwLCA0OSwgUklfQUxMX09OTElORX0sIHsgMHgxNjY0YzgsIDM4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2NTY4LCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjgwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODAwMCwgMjcwLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODQ0NCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODQ1NCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjg4MDAsIDE5LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4OTAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2OGEwMCwgMTI4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTZhMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2YTAwNCwgMTUzNSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxNmMwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTZjMDA0LCAxNTM1LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDE2ZTAwMCwgMTYsIFJJX0UxSF9PTkxJTkV9LCB7IDB4MTZlMTAwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTZlMjAwLCAyLCBSSV9FMUhfT05MSU5FfSwgeyAweDE2ZTQwMCwgMTgzLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTcwMDAwLCA5MywgUklfQUxMX09OTElORX0sIHsgMHgxNzAxODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNzAxOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTcwMjAwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTcwMjE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE3ODAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE4MDAwMCwgNjEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMTEwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDEyMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE4MDEzMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAxM2MsIDIsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxODAyMDAsIDU4LCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDM0MCwgNCwgUklfQUxMX09OTElORX0sCisJeyAweDE4MDQwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODA0MDQsIDI1NSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxODEwMDAsIDQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgxMDEwLCAxMDIwLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDFhMDAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYTAwMDQsIDEwMjMsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MWExMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFhMTAwNCwgNDYwNywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgxYTU4MDAsIDI1NjAsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDFhODAwMCwgNjQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MWE4MTAwLCAxOTg0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgxYWEwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgxYWEwMDQsIDY2NTUsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDFiMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDFiMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sIHsgMHgxYjIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MWIyNDAwLCA2NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MWI4MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWI4MjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDFiODI4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFiODJjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYjhhMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYjhhODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWMwMDAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwMDAwLCA2NSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAxMTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTMwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwMTQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDE0YywgMiwgUklfRTFIX09OTElORX0sCisJeyAweDIwMDIwMCwgNTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMzQwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIwMjAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgyMDIwMTAsIDIwNDQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjIwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIyMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjIxMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIyNTgwMCwgMTUzNiwgUklfRTFIX09GRkxJTkV9LCB7IDB4MjI3MDAwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MjI3MDA0LCAxMDIzLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyMjgwMDAsIDY0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDIyODEwMCwgODY0MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MjMxODAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjMxYzAwLCAxMjgsIFJJX0FMTF9PRkZMSU5FfSwgeyAweDIzMjAwMCwgMSwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyMzI0MDAsIDY0LCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyMzgyMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMzgyNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjM4MjgwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjM4MmMwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIzOGEwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIzOGE4MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyNDAwMDAsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAwMDAsIDY1LCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDExMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDEyMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAxMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAxNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTRjLCAyLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MjgwMjAwLCA1OCwgUklfQUxMX09OTElORX0sIHsgMHgyODAzNDAsIDQsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODA0MDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwNDA0LCAyNTUsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MjgyMDAwLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDI4MjAxMCwgMjA0NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgyYTAwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmEwMDA0LCAxMDIzLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDJhMTAwMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYTEwMDQsIDQ2MDcsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmE1ODAwLCAyNTYwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyYTgwMDAsIDY0LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDJhODEwMCwgOTYwLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgyYTkwMDAsIDEsIFJJX0UxSF9PTkxJTkV9LAorCXsgMHgyYTkwMDQsIDc2NzksIFJJX0UxSF9PRkZMSU5FfSwgeyAweDJiMTgwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDJiMWMwMCwgMTI4LCBSSV9BTExfT0ZGTElORX0sIHsgMHgyYjIwMDAsIDEsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MmIyNDAwLCA2NCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MmI4MjAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmI4MjQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDJiODI4MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJiODJjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYjhhMDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYjhhODAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmMwMDAwLCAyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMDAwLCA2NSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAxMTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTMwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMTQwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDE0YywgMiwgUklfRTFIX09OTElORX0sCisJeyAweDMwMDIwMCwgNTgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMzQwLCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwNDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDQwNCwgMjU1LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMwMjAwMCwgNCwgUklfQUxMX09OTElORX0sIHsgMHgzMDIwMTAsIDIwNDQsIFJJX0FMTF9PRkZMSU5FfSwKKwl7IDB4MzIwMDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMyMDAwNCwgMTAyMywgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMjEwMDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzIxMDA0LCA0NjA3LCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMyNTgwMCwgMjU2MCwgUklfRTFIX09GRkxJTkV9LCB7IDB4MzI4MDAwLCA2NCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMjgxMDAsIDUzNiwgUklfRTFIX09GRkxJTkV9LCB7IDB4MzI4OTYwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MzI4OTY0LCA4MTAzLCBSSV9FMUhfT0ZGTElORX0sIHsgMHgzMzE4MDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LAorCXsgMHgzMzFjMDAsIDEyOCwgUklfQUxMX09GRkxJTkV9LCB7IDB4MzMyMDAwLCAxLCBSSV9BTExfT0ZGTElORX0sCisJeyAweDMzMjQwMCwgNjQsIFJJX0UxSF9PRkZMSU5FfSwgeyAweDMzODIwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMzODI0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMzgyODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMzgyYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzM4YTAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzM4YTgwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDM0MDAwMCwgMiwgUklfQUxMX09OTElORX0KK307CisKKworI2RlZmluZSBJRExFUkVHU19DT1VOVAkJMjc3CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ19hZGRyIGlkbGVfYWRkcnNbSURMRVJFR1NfQ09VTlRdID0geworCXsgMHgyMTE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIxMjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMTJjLCA0LCBSSV9BTExfT05MSU5FfSwgeyAweDI4MTQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODFjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweGEzOGMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhhNDA4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGE0MmMsIDEyLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YTYwMCwgNSwgUklfRTFIX09OTElORX0sIHsgMHhhNjE4LCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4YzA5YywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDNiMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwM2MwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwM2QwLCAxLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MjAyMWMsIDExLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMmE4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAyYjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjA0MDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDQwYywgMiwgUklfQUxMX09OTElORX0sIHsgMHgyMDQxYywgMiwgUklfQUxMX09OTElORX0sCisJeyAweDQwMTU0LCAxNCwgUklfQUxMX09OTElORX0sIHsgMHg0MDE5OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQwNGFjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQwNGJjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NDIyOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NDIyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg0MjJiMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg0MjU0OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDQyNTUwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDQyNTU4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NTAxNjAsIDgsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NTAxZDAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg1MDFlMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHg1MDIwNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDUwMjBjLCAyLCBSSV9BTExfT05MSU5FfSwgeyAweDUwMjFjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4NjAwOTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4NjAxMWMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHg2MDEyYywgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMTAxYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMxMDJjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGMyMjkwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzIyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzIyYjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjMjU0OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjMjU1MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGMyNTU4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGM0Mjk0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4YzQyYTQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4YzQyYjQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhjNDU1MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhjNDU1OCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweGM0NTYwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweGQwMTZjLCA4LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZDAxZDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZDAxZTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhkMDIwNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHhkMDIwYywgMywgUklfQUxMX09OTElORX0sCisJeyAweGUwMTU0LCA4LCBSSV9BTExfT05MSU5FfSwgeyAweGUwMWM4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4ZTAxZDgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4ZTAyMDQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHhlMDIwYywgMiwgUklfQUxMX09OTElORX0sIHsgMHhlMDIxYywgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEwMTAxNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDEwMzAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDEwNDAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAyMDU4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAyMDgwLCAxNiwgUklfQUxMX09OTElORX0sIHsgMHgxMDMwMDQsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDMwNjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTAzMDc4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTAzMDg4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwMzA5YywgMiwgUklfRTFIX09OTElORX0sCisJeyAweDEwNDAwNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMDQwMTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDQwMjAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0MDNjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA0MGZjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNDEwYywgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEwNDQwMCwgNjQsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA0ODAwLCA2NCwgUklfQUxMX09OTElORX0sCisJeyAweDEwNTAwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwMjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MDQwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTA1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTA2MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwODAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MDkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MGEwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTBiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTBjMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUwZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUwZTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MGYwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTAwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTExMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTEyMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxMzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxNDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MTUwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MTYwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTE3MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTE4MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxOTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUxYTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MWIwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MWMwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTFkMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTFlMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUxZjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyMDAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjEwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjIwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTIzMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTI0MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyNTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyNjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MjcwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MjgwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTI5MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTJhMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUyYjAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUyYzAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MmQwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MmUwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTJmMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTMwMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzMTAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzMjAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzMwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1MzQwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTM1MCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTM2MCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzNzAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzODAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1MzkwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA1M2EwLCAzLCBSSV9BTExfT05MSU5FfSwgeyAweDEwNTNiMCwgMywgUklfQUxMX09OTElORX0sCisJeyAweDEwNTNjMCwgMywgUklfQUxMX09OTElORX0sIHsgMHgxMDUzZDAsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMDUzZTAsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTA1M2YwLCAzLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTA4MDk0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDFiMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDMyYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjAzNmMsIDMsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA0MDgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNDE0LCAxNSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDQ3OCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxMjA1MmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA1NjQsIDMsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwNTdjLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwNThjLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDYwOCwgMSwgUklfRTFIX09OTElORX0sCisJeyAweDEyMDgwOCwgMSwgUklfRTFfT05MSU5FfSwgeyAweDEyMDgwYywgMiwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDgxOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4MjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4MjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODMwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg0MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg0OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4NTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4NTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODYwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODY4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDg3MCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDg3OCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4ODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4ODgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwODkwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwODk4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhhOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4YjAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4YjgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGMwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDhkMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDhkOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxMjA4ZTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxMjA4ZTgsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTIwOGYwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTIwOGY4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDEyMDkwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDEyMDkwOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNDAwNWMsIDIsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNDAwZDAsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTQwMGUwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTQwMWM4LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE0MDIwMCwgNiwgUklfQUxMX09OTElORX0sCisJeyAweDE2MTAxYywgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjEwMmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjQwMTQsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY0MGYwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY2MjkwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2NjJhMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2NjJiMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjY1NDgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjY1NTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY2NTU4LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MDAwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODAwOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODAxMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjgwMTgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgwMjgsIDIsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTY4MDU4LCA0LCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTY4MDcwLCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODIzOCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODJkMCwgMiwgUklfQUxMX09OTElORX0sIHsgMHgxNjgyZTAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjgzMDAsIDY3LCBSSV9BTExfT05MSU5FfSwgeyAweDE2ODQxMCwgMiwgUklfQUxMX09OTElORX0sCisJeyAweDE2ODQzOCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNjg0NDgsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNjhhMDAsIDEyOCwgUklfQUxMX09OTElORX0sIHsgMHgxNmUyMDAsIDEyOCwgUklfRTFIX09OTElORX0sCisJeyAweDE2ZTQwNCwgMiwgUklfRTFIX09OTElORX0sIHsgMHgxNmU1ODQsIDcwLCBSSV9FMUhfT05MSU5FfSwKKwl7IDB4MTcwMGE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE3MDBhYywgMiwgUklfQUxMX09OTElORX0sCisJeyAweDE3MDBjMCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxNzAxNzQsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxNzAxODQsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MTgwMGY0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MTgwMTA0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDE4MDExNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDE4MDEyNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxODAyNmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxODAyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MWExMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MWFhMDAwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDFiODAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDFiODA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgxYjgwODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgxYjgwYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjAwMTA0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjAwMTE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDIwMDEyNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIwMDEzNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMDAyNmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMDAyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjIxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjI3MDAwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDIzODAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDIzODA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyMzgwODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyMzgwYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MjgwMTA0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MjgwMTE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDI4MDEyNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDI4MDEzNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyODAyNmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyODAyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MmExMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MmE5MDAwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDJiODAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDJiODA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgyYjgwODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgyYjgwYzAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzAwMTA0LCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzAwMTE0LCAxLCBSSV9BTExfT05MSU5FfSwgeyAweDMwMDEyNCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMwMDEzNCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMDAyNmMsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMDAyYTAsIDEsIFJJX0FMTF9PTkxJTkV9LCB7IDB4MzIxMDAwLCAxLCBSSV9BTExfT05MSU5FfSwKKwl7IDB4MzI4OTYwLCAxLCBSSV9FMUhfT05MSU5FfSwgeyAweDMzODAwMCwgMSwgUklfQUxMX09OTElORX0sCisJeyAweDMzODA0MCwgMSwgUklfQUxMX09OTElORX0sIHsgMHgzMzgwODAsIDEsIFJJX0FMTF9PTkxJTkV9LAorCXsgMHgzMzgwYzAsIDEsIFJJX0FMTF9PTkxJTkV9Cit9OworCitzdGF0aWMgY29uc3QgdTMyIHJlYWRfcmVnX2UxXzBbXSA9IHsgMHgxYjEwMDAgfTsKKworI2RlZmluZSBXUkVHU19DT1VOVF9FMQkJMQorc3RhdGljIGNvbnN0IHN0cnVjdCB3cmVnX2FkZHIgd3JlZ19hZGRyc19lMVtXUkVHU19DT1VOVF9FMV0gPSB7CisJeyAweDFiMGMwMCwgMTkyLCAxLCByZWFkX3JlZ19lMV8wLCBSSV9FMV9PRkZMSU5FIH0KK307CisKK3N0YXRpYyBjb25zdCB1MzIgcmVhZF9yZWdfZTFoXzBbXSA9IHsgMHgxYjEwNDAsIDB4MWIxMDAwIH07CisKKyNkZWZpbmUgV1JFR1NfQ09VTlRfRTFICQkxCitzdGF0aWMgY29uc3Qgc3RydWN0IHdyZWdfYWRkciB3cmVnX2FkZHJzX2UxaFtXUkVHU19DT1VOVF9FMUhdID0geworCXsgMHgxYjBjMDAsIDI1NiwgMiwgcmVhZF9yZWdfZTFoXzAsIFJJX0UxSF9PRkZMSU5FIH0KK307CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkdW1wX3NpZ24gZHVtcF9zaWduX2FsbCA9IHsgMHg0OWFhOTNlZSwgMHg0MDgzNSwgMHgyMiB9OworCisKKyNkZWZpbmUgVElNRVJfUkVHU19DT1VOVF9FMQkyCitzdGF0aWMgY29uc3QgdTMyIHRpbWVyX3N0YXR1c19yZWdzX2UxW1RJTUVSX1JFR1NfQ09VTlRfRTFdID0KKwl7IDB4MTY0MDE0LCAweDE2NDAxOCB9Oworc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zY2FuX3JlZ3NfZTFbVElNRVJfUkVHU19DT1VOVF9FMV0gPQorCXsgMHgxNjQwZDAsIDB4MTY0MGQ0IH07CisKKyNkZWZpbmUgVElNRVJfUkVHU19DT1VOVF9FMUgJMgorc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zdGF0dXNfcmVnc19lMWhbVElNRVJfUkVHU19DT1VOVF9FMUhdID0KKwl7IDB4MTY0MDE0LCAweDE2NDAxOCB9Oworc3RhdGljIGNvbnN0IHUzMiB0aW1lcl9zY2FuX3JlZ3NfZTFoW1RJTUVSX1JFR1NfQ09VTlRfRTFIXSA9CisJeyAweDE2NDBkMCwgMHgxNjQwZDQgfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oIGIvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oCmluZGV4IDE5MmZhOTguLmUyZGYyMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9md19kZWZzLmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC01MCw4ICs1MCwxMCBAQAogI2RlZmluZSBUU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGlkeCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4YTAyMCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKICNkZWZpbmUgVFNUT1JNX0NMSUVOVF9DT05GSUdfT0ZGU0VUKHBvcnQsIGNsaWVudF9pZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MzM1OCArIChwb3J0ICogMHgzZTgpICsgKGNsaWVudF9pZCAqIDB4MjgpKSBcCi0JOiAoMHg5YzggKyAocG9ydCAqIDB4MmY4KSArIChjbGllbnRfaWQgKiAweDI4KSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHgzMzUwICsgKHBvcnQgKiAweDE5MCkgKyAoY2xpZW50X2lkICogMHgxMCkpIFwKKwk6ICgweDljMCArIChwb3J0ICogMHgxMzApICsgKGNsaWVudF9pZCAqIDB4MTApKSkKKyNkZWZpbmUgVFNUT1JNX0NPTU1PTl9TQUZDX1dPUktBUk9VTkRfRU5BQkxFX09GRlNFVCBcCisJKElTX0UxSF9PRkZTRVQgPyAweDFhZDggOiAweGZmZmZmZmZmKQogI2RlZmluZSBUU1RPUk1fREVGX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKGZ1bmN0aW9uLCBpbmRleCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4YjAxYSArICgoZnVuY3Rpb24+PjEpICogMHgyOCkgKyBcCiAJKChmdW5jdGlvbiYxKSAqIDB4YTApICsgKGluZGV4ICogMHg0KSkgOiAoMHgxNDFhICsgKGZ1bmN0aW9uICogXApAQCAtODEsNDMgKzgzLDU0IEBACiAJKGZ1bmN0aW9uICogMHgzOCkpKQogI2RlZmluZSBUU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIHN0YXRzX2NvdW50ZXJfaWQpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDIwMTAgKyAocG9ydCAqIDB4NWIwKSArIChzdGF0c19jb3VudGVyX2lkICogXAotCTB4NTApKSA6ICgweDQwMDAgKyAocG9ydCAqIDB4M2YwKSArIChzdGF0c19jb3VudGVyX2lkICogMHgzOCkpKQotI2RlZmluZSBUU1RPUk1fUlhfUFJPRFNfT0ZGU0VUKHBvcnQsIGNsaWVudF9pZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MzM1MCArIChwb3J0ICogMHgzZTgpICsgKGNsaWVudF9pZCAqIDB4MjgpKSBcCi0JOiAoMHg5YzAgKyAocG9ydCAqIDB4MmY4KSArIChjbGllbnRfaWQgKiAweDI4KSkpCisJMHg1MCkpIDogKDB4NDA4MCArIChwb3J0ICogMHg1YjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiAweDUwKSkpCiAjZGVmaW5lIFRTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuY3Rpb24pIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDJjMDAgKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDRiODggKyBcCiAJKGZ1bmN0aW9uICogMHg4KSkpCi0jZGVmaW5lIFRTVE9STV9UUEFfRVhJU1RfT0ZGU0VUIChJU19FMUhfT0ZGU0VUID8gMHgzYjMwIDogMHgxYzIwKQorI2RlZmluZSBUU1RPUk1fVFBBX0VYSVNUX09GRlNFVCAoSVNfRTFIX09GRlNFVCA/IDB4MzY4MCA6IDB4MWMyMCkKICNkZWZpbmUgVVNUT1JNX0FHR19EQVRBX09GRlNFVCAoSVNfRTFIX09GRlNFVCA/IDB4YTA0MCA6IDB4MmMxMCkKICNkZWZpbmUgVVNUT1JNX0FHR19EQVRBX1NJWkUgKElTX0UxSF9PRkZTRVQgPyAweDI0NDAgOiAweDEyMDApCiAjZGVmaW5lIFVTVE9STV9BU1NFUlRfTElTVF9JTkRFWF9PRkZTRVQgXAotCShJU19FMUhfT0ZGU0VUID8gMHg4MDAwIDogMHgxMDAwKQorCShJU19FMUhfT0ZGU0VUID8gMHg4OTYwIDogMHgxMDAwKQogI2RlZmluZSBVU1RPUk1fQVNTRVJUX0xJU1RfT0ZGU0VUKGlkeCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4ODAyMCArIChpZHggKiAweDEwKSkgOiAoMHgxMDIwICsgKGlkeCAqIDB4MTApKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDg5ODAgKyAoaWR4ICogMHgxMCkpIDogKDB4MTAyMCArIChpZHggKiAweDEwKSkpCiAjZGVmaW5lIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBjbGllbnRJZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MzI5OCArIChwb3J0ICogMHgyNTgpICsgKGNsaWVudElkICogMHgxOCkpIDogXAotCSgweDU0NTAgKyAocG9ydCAqIDB4MWM4KSArIChjbGllbnRJZCAqIDB4MTgpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwMTggKyAocG9ydCAqIDB4NGIwKSArIChjbGllbnRJZCAqIDB4MzApKSA6IFwKKwkoMHg1MzMwICsgKHBvcnQgKiAweDI2MCkgKyAoY2xpZW50SWQgKiAweDIwKSkpCiAjZGVmaW5lIFVTVE9STV9ERUZfU0JfSENfRElTQUJMRV9PRkZTRVQoZnVuY3Rpb24sIGluZGV4KSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5NTFhICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArIFwKLQkoKGZ1bmN0aW9uJjEpICogMHhhMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDE5MWEgKyAoZnVuY3Rpb24gKiBcCi0JMHgyOCkgKyAoaW5kZXggKiAweDQpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDk1MjIgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4NDApICsgXAorCSgoZnVuY3Rpb24mMSkgKiAweDEwMCkgKyAoaW5kZXggKiAweDQpKSA6ICgweDE5MjIgKyAoZnVuY3Rpb24gKiBcCisJMHg0MCkgKyAoaW5kZXggKiAweDQpKSkKICNkZWZpbmUgVVNUT1JNX0RFRl9TQl9IT1NUX1NCX0FERFJfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHg5NTAwICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArIFwKLQkoKGZ1bmN0aW9uJjEpICogMHhhMCkpIDogKDB4MTkwMCArIChmdW5jdGlvbiAqIDB4MjgpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDk1MDAgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4NDApICsgXAorCSgoZnVuY3Rpb24mMSkgKiAweDEwMCkpIDogKDB4MTkwMCArIChmdW5jdGlvbiAqIDB4NDApKSkKICNkZWZpbmUgVVNUT1JNX0RFRl9TQl9IT1NUX1NUQVRVU19CTE9DS19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDk1MDggKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAotCSgoZnVuY3Rpb24mMSkgKiAweGEwKSkgOiAoMHgxOTA4ICsgKGZ1bmN0aW9uICogMHgyOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4OTUwOCArICgoZnVuY3Rpb24+PjEpICogMHg0MCkgKyBcCisJKChmdW5jdGlvbiYxKSAqIDB4MTAwKSkgOiAoMHgxOTA4ICsgKGZ1bmN0aW9uICogMHg0MCkpKQorI2RlZmluZSBVU1RPUk1fRVRIX1JJTkdfUEFVU0VfREFUQV9PRkZTRVQocG9ydCwgY2xpZW50SWQpIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwMjAgKyAocG9ydCAqIDB4NGIwKSArIChjbGllbnRJZCAqIDB4MzApKSA6IFwKKwkweGZmZmZmZmZmKQorI2RlZmluZSBVU1RPUk1fRVRIX1NUQVRTX1FVRVJZX0FERFJfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyYTUwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxZDk4ICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQogI2RlZmluZSBVU1RPUk1fRlVOQ1RJT05fTU9ERV9PRkZTRVQgXAogCShJU19FMUhfT0ZGU0VUID8gMHgyNDQ4IDogMHhmZmZmZmZmZikKICNkZWZpbmUgVVNUT1JNX0hDX0JUUl9PRkZTRVQocG9ydCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4OTY0NCArIChwb3J0ICogMHhkMCkpIDogKDB4MTk1NCArIChwb3J0ICogMHhiOCkpKQorCShJU19FMUhfT0ZGU0VUID8gKDB4OTcwNCArIChwb3J0ICogMHhmMCkpIDogKDB4MTk4NCArIChwb3J0ICogMHhjMCkpKQogI2RlZmluZSBVU1RPUk1fTUFYX0FHR19TSVpFX09GRlNFVChwb3J0LCBjbGllbnRJZCkgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MzI5MCArIChwb3J0ICogMHgyNTgpICsgKGNsaWVudElkICogMHgxOCkpIDogXAotCSgweDU0NDggKyAocG9ydCAqIDB4MWM4KSArIChjbGllbnRJZCAqIDB4MTgpKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDgwMTAgKyAocG9ydCAqIDB4NGIwKSArIChjbGllbnRJZCAqIDB4MzApKSA6IFwKKwkoMHg1MzI4ICsgKHBvcnQgKiAweDI2MCkgKyAoY2xpZW50SWQgKiAweDIwKSkpCiAjZGVmaW5lIFVTVE9STV9NRU1fV09SS0FST1VORF9BRERSRVNTX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MjQwOCArIChmdW5jdGlvbiAqIDB4OCkpIDogKDB4NTQwOCArIFwKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI0MDggKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDUzMDggKyBcCiAJKGZ1bmN0aW9uICogMHg4KSkpCisjZGVmaW5lIFVTVE9STV9QQVVTRV9FTkFCTEVEX09GRlNFVChwb3J0KSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyYWQ0ICsgKHBvcnQgKiAweDgpKSA6IDB4ZmZmZmZmZmYpCisjZGVmaW5lIFVTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgc3RhdHNfY291bnRlcl9pZCkgXAorCShJU19FMUhfT0ZGU0VUID8gKDB4MjQ1MCArIChwb3J0ICogMHgyZDApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiBcCisJMHgyOCkpIDogKDB4NDc0MCArIChwb3J0ICogMHgyZDApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiAweDI4KSkpCisjZGVmaW5lIFVTVE9STV9SWF9QUk9EU19PRkZTRVQocG9ydCwgY2xpZW50X2lkKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHg4MDAwICsgKHBvcnQgKiAweDRiMCkgKyAoY2xpZW50X2lkICogMHgzMCkpIFwKKwk6ICgweDUzMTggKyAocG9ydCAqIDB4MjYwKSArIChjbGllbnRfaWQgKiAweDIwKSkpCiAjZGVmaW5lIFVTVE9STV9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBjcHVfaWQsIGluZGV4KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHg5MDFhICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCiAJKGluZGV4ICogMHg0KSkgOiAoMHgxNDFhICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkgKyBcCkBAIC0xMzIsMTIgKzE0NSwxNSBAQAogI2RlZmluZSBVU1RPUk1fU0JfSE9TVF9TVEFUVVNfQkxPQ0tfT0ZGU0VUKHBvcnQsIGNwdV9pZCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4OTAwOCArIChwb3J0ICogMHgyODApICsgKGNwdV9pZCAqIDB4MjgpKSA6IFwKIAkoMHgxNDA4ICsgKHBvcnQgKiAweDI4MCkgKyAoY3B1X2lkICogMHgyOCkpKQorI2RlZmluZSBVU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmN0aW9uKSBcCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyOWYwICsgKGZ1bmN0aW9uICogMHg4KSkgOiAoMHgxZDgwICsgXAorCShmdW5jdGlvbiAqIDB4OCkpKQogI2RlZmluZSBYU1RPUk1fQVNTRVJUX0xJU1RfSU5ERVhfT0ZGU0VUIFwKIAkoSVNfRTFIX09GRlNFVCA/IDB4OTAwMCA6IDB4MTAwMCkKICNkZWZpbmUgWFNUT1JNX0FTU0VSVF9MSVNUX09GRlNFVChpZHgpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDkwMjAgKyAoaWR4ICogMHgxMCkpIDogKDB4MTAyMCArIChpZHggKiAweDEwKSkpCiAjZGVmaW5lIFhTVE9STV9DTU5HX1BFUl9QT1JUX1ZBUlNfT0ZGU0VUKHBvcnQpIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDI0YTggKyAocG9ydCAqIDB4NDApKSA6ICgweDNiYTAgKyAocG9ydCAqIDB4NDApKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI0YTggKyAocG9ydCAqIDB4NTApKSA6ICgweDNiYTAgKyAocG9ydCAqIDB4NTApKSkKICNkZWZpbmUgWFNUT1JNX0RFRl9TQl9IQ19ESVNBQkxFX09GRlNFVChmdW5jdGlvbiwgaW5kZXgpIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweGEwMWEgKyAoKGZ1bmN0aW9uPj4xKSAqIDB4MjgpICsgXAogCSgoZnVuY3Rpb24mMSkgKiAweGEwKSArIChpbmRleCAqIDB4NCkpIDogKDB4MTQxYSArIChmdW5jdGlvbiAqIFwKQEAgLTE0OSwyMyArMTY1LDIzIEBACiAJKElTX0UxSF9PRkZTRVQgPyAoMHhhMDA4ICsgKChmdW5jdGlvbj4+MSkgKiAweDI4KSArIFwKIAkoKGZ1bmN0aW9uJjEpICogMHhhMCkpIDogKDB4MTQwOCArIChmdW5jdGlvbiAqIDB4MjgpKSkKICNkZWZpbmUgWFNUT1JNX0UxSE9WX09GRlNFVChmdW5jdGlvbikgXAotCShJU19FMUhfT0ZGU0VUID8gKDB4MmFiOCArIChmdW5jdGlvbiAqIDB4MikpIDogMHhmZmZmZmZmZikKKwkoSVNfRTFIX09GRlNFVCA/ICgweDJjMTAgKyAoZnVuY3Rpb24gKiAweDIpKSA6IDB4ZmZmZmZmZmYpCiAjZGVmaW5lIFhTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQoZnVuY3Rpb24pIFwKIAkoSVNfRTFIX09GRlNFVCA/ICgweDI0MTggKyAoZnVuY3Rpb24gKiAweDgpKSA6ICgweDNiNzAgKyBcCiAJKGZ1bmN0aW9uICogMHg4KSkpCiAjZGVmaW5lIFhTVE9STV9GQUlSTkVTU19QRVJfVk5fVkFSU19PRkZTRVQoZnVuY3Rpb24pIFwKLQkoSVNfRTFIX09GRlNFVCA/ICgweDI1NjggKyAoZnVuY3Rpb24gKiAweDcwKSkgOiAoMHgzYzYwICsgXAotCShmdW5jdGlvbiAqIDB4NzApKSkKKwkoSVNfRTFIX09GRlNFVCA/ICgweDI1ODggKyAoZnVuY3Rpb24gKiAweDkwKSkgOiAoMHgzYzgwICsgXAorCShmdW5jdGlvbiAqIDB4OTApKSkKICNkZWZpbmUgWFNUT1JNX0ZVTkNUSU9OX01PREVfT0ZGU0VUIFwKLQkoSVNfRTFIX09GRlNFVCA/IDB4MmFjOCA6IDB4ZmZmZmZmZmYpCisJKElTX0UxSF9PRkZTRVQgPyAweDJjMjAgOiAweGZmZmZmZmZmKQogI2RlZmluZSBYU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSBcCiAJKElTX0UxSF9PRkZTRVQgPyAoMHhhMTQ0ICsgKHBvcnQgKiAweDMwKSkgOiAoMHgxNDU0ICsgKHBvcnQgKiAweDE4KSkpCiAjZGVmaW5lIFhTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgc3RhdHNfY291bnRlcl9pZCkgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4YzAwMCArIChwb3J0ICogMHgzZjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiBcCiAJMHgzOCkpIDogKDB4MzM3OCArIChwb3J0ICogMHgzZjApICsgKHN0YXRzX2NvdW50ZXJfaWQgKiAweDM4KSkpCiAjZGVmaW5lIFhTVE9STV9SQVRFX1NIQVBJTkdfUEVSX1ZOX1ZBUlNfT0ZGU0VUKGZ1bmN0aW9uKSBcCi0JKElTX0UxSF9PRkZTRVQgPyAoMHgyNTI4ICsgKGZ1bmN0aW9uICogMHg3MCkpIDogKDB4M2MyMCArIFwKLQkoZnVuY3Rpb24gKiAweDcwKSkpCisJKElTX0UxSF9PRkZTRVQgPyAoMHgyNTQ4ICsgKGZ1bmN0aW9uICogMHg5MCkpIDogKDB4M2M0MCArIFwKKwkoZnVuY3Rpb24gKiAweDkwKSkpCiAjZGVmaW5lIFhTVE9STV9TUFFfUEFHRV9CQVNFX09GRlNFVChmdW5jdGlvbikgXAogCShJU19FMUhfT0ZGU0VUID8gKDB4MjAwMCArIChmdW5jdGlvbiAqIDB4MTApKSA6ICgweDMzMjggKyBcCiAJKGZ1bmN0aW9uICogMHgxMCkpKQpAQCAtMTc4LDcgKzE5NCw3IEBACiAjZGVmaW5lIENPTU1PTl9BU01fSU5WQUxJRF9BU1NFUlRfT1BDT0RFIDB4MAogCiAvKioKLSogVGhpcyBmaWxlIGRlZmluZXMgSFNJIGNvbnN0YXRudHMgZm9yIHRoZSBFVEggZmxvdworKiBUaGlzIGZpbGUgZGVmaW5lcyBIU0kgY29uc3RhbnRzIGZvciB0aGUgRVRIIGZsb3cKICovCiAjaWZkZWYgX0VWRVJFU1RfTUlDUk9DT0RFCiAjaW5jbHVkZSAibWljcm9jb2RlX2NvbnN0YW50cy5oIgpAQCAtMTk2LDE4ICsyMTIsMTggQEAKICNkZWZpbmUgSVBWNl9IQVNIX1RZUEUgMwogI2RlZmluZSBUQ1BfSVBWNl9IQVNIX1RZUEUgNAogCi0vKiBFdGhlcm5ldCBSaW5nIHBhcm1hdGVycyAqLworCisvKiBFdGhlcm5ldCBSaW5nIHBhcmFtZXRlcnMgKi8KICNkZWZpbmUgWF9FVEhfTE9DQUxfUklOR19TSVpFIDEzCiAjZGVmaW5lIEZJUlNUX0JEX0lOX1BLVCAwCiAjZGVmaW5lIFBBUlNFX0JEX0lOREVYIDEKLSNkZWZpbmUgTlVNX09GX0VUSF9CRFNfSU5fUEFHRSBcCi0JKChQQUdFX1NJWkUpIC8gKFNUUlVDVF9TSVpFKGV0aF90eF9iZCkvOCkpCisjZGVmaW5lIE5VTV9PRl9FVEhfQkRTX0lOX1BBR0UgKChQQUdFX1NJWkUpLyhTVFJVQ1RfU0laRShldGhfdHhfYmQpLzgpKQogCiAKIC8qIFJ4IHJpbmcgcGFyYW1zICovCi0jZGVmaW5lIFVfRVRIX0xPQ0FMX0JEX1JJTkdfU0laRSAoMTYpCi0jZGVmaW5lIFVfRVRIX0xPQ0FMX1NHRV9SSU5HX1NJWkUgKDEyKQotI2RlZmluZSBVX0VUSF9TR0xfU0laRSAoOCkKKyNkZWZpbmUgVV9FVEhfTE9DQUxfQkRfUklOR19TSVpFIDE2CisjZGVmaW5lIFVfRVRIX0xPQ0FMX1NHRV9SSU5HX1NJWkUgMTIKKyNkZWZpbmUgVV9FVEhfU0dMX1NJWkUgOAogCiAKICNkZWZpbmUgVV9FVEhfQkRTX1BFUl9QQUdFX01BU0sgXApAQCAtMjI5LDE1ICsyNDUsMTUgQEAKICNkZWZpbmUgVV9FVEhfVU5ERUZJTkVEX1EgMHhGRgogCiAvKiB2YWx1ZXMgb2YgY29tbWFuZCBJRHMgaW4gdGhlIHJhbXJvZCBtZXNzYWdlICovCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1BPUlRfU0VUVVAgKDgwKQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9DTElFTlRfU0VUVVAgKDg1KQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9TVEFUX1FVRVJZICg5MCkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfVVBEQVRFICgxMDApCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0hBTFQgKDEwNSkKLSNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfU0VUX01BQyAoMTEwKQotI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9DRkNfREVMICgxMTUpCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1BPUlRfREVMICgxMjApCi0jZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0ZPUldBUkRfU0VUVVAgKDEyNSkKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfUE9SVF9TRVRVUCA4MAorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9DTElFTlRfU0VUVVAgODUKKyNkZWZpbmUgUkFNUk9EX0NNRF9JRF9FVEhfU1RBVF9RVUVSWSA5MAorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9VUERBVEUgMTAwCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0hBTFQgMTA1CisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMgMTEwCisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX0NGQ19ERUwgMTE1CisjZGVmaW5lIFJBTVJPRF9DTURfSURfRVRIX1BPUlRfREVMIDEyMAorI2RlZmluZSBSQU1ST0RfQ01EX0lEX0VUSF9GT1JXQVJEX1NFVFVQIDEyNQogCiAKIC8qIGNvbW1hbmQgdmFsdWVzIGZvciBzZXQgbWFjIGNvbW1hbmQgKi8KQEAgLTI1NCwxMiArMjcwLDE2IEBACiAjZGVmaW5lIEVUSF9NQVhfUlhfQ0xJRU5UU19FMUggMjUKIAogLyogTWF4aW1hbCBhZ2dyZWdhdGlvbiBxdWV1ZXMgc3VwcG9ydGVkICovCi0jZGVmaW5lIEVUSF9NQVhfQUdHUkVHQVRJT05fUVVFVUVTX0UxICgzMikKLSNkZWZpbmUgRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTFIICg2NCkKKyNkZWZpbmUgRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTEgMzIKKyNkZWZpbmUgRVRIX01BWF9BR0dSRUdBVElPTl9RVUVVRVNfRTFIIDY0CisKKy8qIEVUSCBSU1MgbW9kZXMgKi8KKyNkZWZpbmUgRVRIX1JTU19NT0RFX0RJU0FCTEVEIDAKKyNkZWZpbmUgRVRIX1JTU19NT0RFX1JFR1VMQVIgMQogCiAKIC8qKgotKiBUaGlzIGZpbGUgZGVmaW5lcyBIU0kgY29uc3RhdG50cyBjb21tb24gdG8gYWxsIG1pY3JvY29kZSBmbG93cworKiBUaGlzIGZpbGUgZGVmaW5lcyBIU0kgY29uc3RhbnRzIGNvbW1vbiB0byBhbGwgbWljcm9jb2RlIGZsb3dzCiAqLwogCiAvKiBDb25uZWN0aW9uIHR5cGVzICovCkBAIC0yNzgsMjUgKzI5OCwyMiBAQAogI2RlZmluZSBFVEhfU1RBVEUgKEVUSF9DT05ORUNUSU9OX1RZUEUgPDwgUFJPVE9DT0xfU1RBVEVfQklUX09GRlNFVCkKICNkZWZpbmUgVE9FX1NUQVRFIChUT0VfQ09OTkVDVElPTl9UWVBFIDw8IFBST1RPQ09MX1NUQVRFX0JJVF9PRkZTRVQpCiAjZGVmaW5lIFJETUFfU1RBVEUgKFJETUFfQ09OTkVDVElPTl9UWVBFIDw8IFBST1RPQ09MX1NUQVRFX0JJVF9PRkZTRVQpCi0jZGVmaW5lIElTQ1NJX1NUQVRFIFwKLQkoSVNDU0lfQ09OTkVDVElPTl9UWVBFIDw8IFBST1RPQ09MX1NUQVRFX0JJVF9PRkZTRVQpCi0jZGVmaW5lIEZDT0VfU1RBVEUgKEZDT0VfQ09OTkVDVElPTl9UWVBFIDw8IFBST1RPQ09MX1NUQVRFX0JJVF9PRkZTRVQpCiAKIC8qIG1pY3JvY29kZSBmaXhlZCBwYWdlIHBhZ2Ugc2l6ZSA0SyAoY2hhaW5zIGFuZCByaW5nIHNlZ21lbnRzKSAqLwotI2RlZmluZSBNQ19QQUdFX1NJWkUgKDQwOTYpCisjZGVmaW5lIE1DX1BBR0VfU0laRSA0MDk2CiAKIAogLyogSG9zdCBjb2FsZXNjaW5nIGNvbnN0YW50cyAqLwogCiAvKiBpbmRleCBudW1iZXJzICovCi0jZGVmaW5lIEhDX1VTVE9STV9ERUZfU0JfTlVNX0lORElDRVMgNAorI2RlZmluZSBIQ19VU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTIDgKICNkZWZpbmUgSENfQ1NUT1JNX0RFRl9TQl9OVU1fSU5ESUNFUyA4CiAjZGVmaW5lIEhDX1hTVE9STV9ERUZfU0JfTlVNX0lORElDRVMgNAogI2RlZmluZSBIQ19UU1RPUk1fREVGX1NCX05VTV9JTkRJQ0VTIDQKICNkZWZpbmUgSENfVVNUT1JNX1NCX05VTV9JTkRJQ0VTIDQKICNkZWZpbmUgSENfQ1NUT1JNX1NCX05VTV9JTkRJQ0VTIDQKIAotLyogaW5kZXggdmFsdWVzIC0gd2hpY2ggY291bnRlcnRvIHVwZGF0ZSAqLworLyogaW5kZXggdmFsdWVzIC0gd2hpY2ggY291bnRlciB0byB1cGRhdGUgKi8KIAogI2RlZmluZSBIQ19JTkRFWF9VX1RPRV9SWF9DUV9DT05TIDAKICNkZWZpbmUgSENfSU5ERVhfVV9FVEhfUlhfQ1FfQ09OUyAxCkBAIC0zMzAsMTYgKzM0NywxNiBAQAogI2RlZmluZSBBVFRFTlRJT05fSUQgNAogCiAvKiBtYXggbnVtYmVyIG9mIHNsb3cgcGF0aCBjb21tYW5kcyBwZXIgcG9ydCAqLwotI2RlZmluZSBNQVhfUkFNUk9EU19QRVJfUE9SVCAoOCkKKyNkZWZpbmUgTUFYX1JBTVJPRFNfUEVSX1BPUlQgOAogCiAvKiB2YWx1ZXMgZm9yIFJYIEVUSCBDUUUgdHlwZSBmaWVsZCAqLwotI2RlZmluZSBSWF9FVEhfQ1FFX1RZUEVfRVRIX0ZBU1RQQVRIICgwKQotI2RlZmluZSBSWF9FVEhfQ1FFX1RZUEVfRVRIX1JBTVJPRCAoMSkKKyNkZWZpbmUgUlhfRVRIX0NRRV9UWVBFX0VUSF9GQVNUUEFUSCAwCisjZGVmaW5lIFJYX0VUSF9DUUVfVFlQRV9FVEhfUkFNUk9EIDEKIAogCiAvKioqKiBERUZJTkVTIEZPUiBUSU1FUlMvQ0xPQ0tTIFJFU09MVVRJT05TICoqKiovCi0jZGVmaW5lIEVNVUxBVElPTl9GUkVRVUVOQ1lfRkFDVE9SICgxNjAwKQotI2RlZmluZSBGUEdBX0ZSRVFVRU5DWV9GQUNUT1IgKDEwMCkKKyNkZWZpbmUgRU1VTEFUSU9OX0ZSRVFVRU5DWV9GQUNUT1IgMTYwMAorI2RlZmluZSBGUEdBX0ZSRVFVRU5DWV9GQUNUT1IgMTAwCiAKICNkZWZpbmUgVElNRVJTX1RJQ0tfU0laRV9DSElQICgxZS0zKQogI2RlZmluZSBUSU1FUlNfVElDS19TSVpFX0VNVUwgXApAQCAtMzUzLDEyICszNzAsOSBAQAogI2RlZmluZSBUU0VNSV9DTEsxX1JFU1VMX0ZQR0EgXAogICgoVFNFTUlfQ0xLMV9SRVNVTF9DSElQKS8oRlBHQV9GUkVRVUVOQ1lfRkFDVE9SKSkKIAotI2RlZmluZSBVU0VNSV9DTEsxX1JFU1VMX0NISVAgXAotIChUSU1FUlNfVElDS19TSVpFX0NISVApCi0jZGVmaW5lIFVTRU1JX0NMSzFfUkVTVUxfRU1VTCBcCi0gKFRJTUVSU19USUNLX1NJWkVfRU1VTCkKLSNkZWZpbmUgVVNFTUlfQ0xLMV9SRVNVTF9GUEdBIFwKLSAoVElNRVJTX1RJQ0tfU0laRV9GUEdBKQorI2RlZmluZSBVU0VNSV9DTEsxX1JFU1VMX0NISVAgKFRJTUVSU19USUNLX1NJWkVfQ0hJUCkKKyNkZWZpbmUgVVNFTUlfQ0xLMV9SRVNVTF9FTVVMIChUSU1FUlNfVElDS19TSVpFX0VNVUwpCisjZGVmaW5lIFVTRU1JX0NMSzFfUkVTVUxfRlBHQSAoVElNRVJTX1RJQ0tfU0laRV9GUEdBKQogCiAjZGVmaW5lIFhTRU1JX0NMSzFfUkVTVUxfQ0hJUCAoMWUtMykKICNkZWZpbmUgWFNFTUlfQ0xLMV9SRVNVTF9FTVVMIFwKQEAgLTM4MywxMiArMzk3LDE1IEBACiAjZGVmaW5lIFhTVE9STV9JUF9JRF9ST0xMX0hBTEYgMHg4MDAwCiAjZGVmaW5lIFhTVE9STV9JUF9JRF9ST0xMX0FMTCAwCiAKLSNkZWZpbmUgRldfTE9HX0xJU1RfU0laRSAoNTApCisjZGVmaW5lIEZXX0xPR19MSVNUX1NJWkUgNTAKIAogI2RlZmluZSBOVU1fT0ZfUFJPVE9DT0xTIDQKLSNkZWZpbmUgTUFYX0NPU19OVU1CRVIgMTYKKyNkZWZpbmUgTlVNX09GX1NBRkNfQklUUyAxNgorI2RlZmluZSBNQVhfQ09TX05VTUJFUiA0CiAjZGVmaW5lIE1BWF9UX1NUQVRfQ09VTlRFUl9JRCAxOAogI2RlZmluZSBNQVhfWF9TVEFUX0NPVU5URVJfSUQgMTgKKyNkZWZpbmUgTUFYX1VfU1RBVF9DT1VOVEVSX0lEIDE4CisKIAogI2RlZmluZSBVTktOT1dOX0FERFJFU1MgMAogI2RlZmluZSBVTklDQVNUX0FERFJFU1MgMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfaHNpLmggYi9kcml2ZXJzL25ldC9ibngyeF9oc2kuaAppbmRleCBlZmQ3NjQ0Li4wM2M2MjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9oc2kuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9oc2kuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2hzaS5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTE5LDM1ICsxMTksMTUgQEAKICNkZWZpbmUgU0hBUkVEX0hXX0NGR19VTVBfTkNfU0lfRVhUX1BIWV9UWVBFX0JDTTUyMjEgMHgwMDAxMDAwMAogCiAJdTMyIGJvYXJkOwkJCQkJCS8qIDB4MTI0ICovCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9NQVNLCQkgICAgMHgwMDAwZmZmZgotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfU0hJRlQJCSAgICAwCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9OT05FCQkgICAgMHgwMDAwMDAwMAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDAxICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAwMkcgICAgMHgwMDAwMDAwMwotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwVDEwMDRHICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDA3RyAgICAweDAwMDAwMDA1Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBUMTAxNUcgICAgMHgwMDAwMDAwNgotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjBHICAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMFQxMDAzRyAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMkcgICAgMHgwMDAwMDAwOQotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjFHICAgIDB4MDAwMDAwMGEKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIzRyAgICAweDAwMDAwMDBiCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAzM0cgICAgMHgwMDAwMDAwYwotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzExVDExMDEgICAgIDB4MDAwMDAwMGQKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMUVUMTIwMSAgICAweDAwMDAwMDBlCi0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTFBMTEzM0cgICAgMHgwMDAwMDAwZgotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzExRUExMjMzRyAgIDB4MDAwMDAwMTAKLQotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1ZFUl9NQVNLCQkgICAgMHhmZmZmMDAwMAotI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1ZFUl9TSElGVAkJICAgIDE2Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfTUFKT1JfVkVSX01BU0sJICAgIDB4ZjAwMDAwMDAKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NQUpPUl9WRVJfU0hJRlQJICAgIDI4Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfTUlOT1JfVkVSX01BU0sJICAgIDB4MGYwMDAwMDAKLSNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NSU5PUl9WRVJfU0hJRlQJICAgIDI0Ci0jZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfUkVWX01BU0sJCSAgICAweDAwZmYwMDAwCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfUkVWX01BU0sJCSAgICAweDAwRkYwMDAwCiAjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfUkVWX1NISUZUCQkgICAgMTYKIAorI2RlZmluZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX01BSk9SX1ZFUl9NQVNLCSAgICAweDBGMDAwMDAwCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfTUFKT1JfVkVSX1NISUZUCSAgICAyNAorCisjZGVmaW5lIFNIQVJFRF9IV19DRkdfQk9BUkRfTUlOT1JfVkVSX01BU0sJICAgIDB4RjAwMDAwMDAKKyNkZWZpbmUgU0hBUkVEX0hXX0NGR19CT0FSRF9NSU5PUl9WRVJfU0hJRlQJICAgIDI4CisKIAl1MzIgcmVzZXJ2ZWQ7CQkJCQkJLyogMHgxMjggKi8KIAogfTsKQEAgLTE5OCwzNiArMTc4LDIxIEBACiAJdTMyIHJkbWFfbWFjX2xvd2VyOwogCiAJdTMyIHNlcmRlc19jb25maWc7Ci0JLyogZm9yIGV4dGVybmFsIFBIWSwgb3IgZm9yY2VkIG1vZGUgb3IgZHVyaW5nIEFOICovCi0jZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19UWF9EUlZfUFJFX0VNUEhBU0lTX01BU0sgMHhmZmZmMDAwMAotI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfVFhfRFJWX1BSRV9FTVBIQVNJU19TSElGVCAgMTYKKyNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1RYX0RSVl9QUkVfRU1QSEFTSVNfTUFTSwkgICAgICAweDAwMDBGRkZGCisjZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19UWF9EUlZfUFJFX0VNUEhBU0lTX1NISUZUCSAgICAgIDAKIAotI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9NQVNLICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgUE9SVF9IV19DRkdfU0VSREVTX1JYX0RSVl9FUVVBTElaRVJfU0hJRlQgICAwCisjZGVmaW5lIFBPUlRfSFdfQ0ZHX1NFUkRFU19SWF9EUlZfRVFVQUxJWkVSX01BU0sJICAgICAgMHhGRkZGMDAwMAorI2RlZmluZSBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9TSElGVAkgICAgICAxNgogCi0JdTE2IHNlcmRlc190eF9kcml2ZXJfcHJlX2VtcGhhc2lzWzE2XTsKLQl1MTYgc2VyZGVzX3J4X2RyaXZlcl9lcXVhbGl6ZXJbMTZdOwogCi0JdTMyIHhneHNfY29uZmlnX2xhbmUwOwotCXUzMiB4Z3hzX2NvbmZpZ19sYW5lMTsKLQl1MzIgeGd4c19jb25maWdfbGFuZTI7Ci0JdTMyIHhneHNfY29uZmlnX2xhbmUzOwotCS8qIGZvciBleHRlcm5hbCBQSFksIG9yIGZvcmNlZCBtb2RlIG9yIGR1cmluZyBBTiAqLwotI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX1RYX0RSVl9QUkVfRU1QSEFTSVNfTUFTSyAgIDB4ZmZmZjAwMDAKLSNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19UWF9EUlZfUFJFX0VNUEhBU0lTX1NISUZUICAxNgorCXUzMiBSZXNlcnZlZDBbMTZdOwkJCQkgICAgLyogMHgxNTggKi8KIAotI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX1JYX0RSVl9FUVVBTElaRVJfTUFTSwkgICAgMHgwMDAwZmZmZgotI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX1JYX0RSVl9FUVVBTElaRVJfU0hJRlQgICAgIDAKKwkvKiAgZm9yIGV4dGVybmFsIFBIWSwgb3IgZm9yY2VkIG1vZGUgb3IgZHVyaW5nIEFOICovCisJdTE2IHhneHNfY29uZmlnX3J4WzRdOwkJCQkgICAgLyogMHgxOTggKi8KIAotCXUxNiB4Z3hzX3R4X2RyaXZlcl9wcmVfZW1waGFzaXNfbGFuZTBbMTZdOwotCXUxNiB4Z3hzX3R4X2RyaXZlcl9wcmVfZW1waGFzaXNfbGFuZTFbMTZdOwotCXUxNiB4Z3hzX3R4X2RyaXZlcl9wcmVfZW1waGFzaXNfbGFuZTJbMTZdOwotCXUxNiB4Z3hzX3R4X2RyaXZlcl9wcmVfZW1waGFzaXNfbGFuZTNbMTZdOworCXUxNiB4Z3hzX2NvbmZpZ190eFs0XTsJCQkJICAgIC8qIDB4MUEwICovCiAKLQl1MTYgeGd4c19yeF9kcml2ZXJfZXF1YWxpemVyX2xhbmUwWzE2XTsKLQl1MTYgeGd4c19yeF9kcml2ZXJfZXF1YWxpemVyX2xhbmUxWzE2XTsKLQl1MTYgeGd4c19yeF9kcml2ZXJfZXF1YWxpemVyX2xhbmUyWzE2XTsKLQl1MTYgeGd4c19yeF9kcml2ZXJfZXF1YWxpemVyX2xhbmUzWzE2XTsKKwl1MzIgUmVzZXJ2ZWQxWzY0XTsJCQkJICAgIC8qIDB4MUE4ICovCiAKIAl1MzIgbGFuZV9jb25maWc7CiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX0xBTkVfU1dBUF9DRkdfTUFTSwkJICAgIDB4MDAwMGZmZmYKQEAgLTI2NSw3ICsyMzAsNyBAQAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczCSAgICAweDAwMDAwMzAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUJICAgIDB4MDAwMDA0MDAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNgkgICAgMHgwMDAwMDUwMAotI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004Mjc2CSAgICAweDAwMDAwNjAwCisjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYJICAgIDB4MDAwMDA2MDAKICNkZWZpbmUgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MQkgICAgMHgwMDAwMDcwMAogI2RlZmluZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxCSAgICAweDAwMDAwODAwCiAjZGVmaW5lIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0ZBSUxVUkUJICAgIDB4MDAwMGZkMDAKQEAgLTMxOSw2ICsyODQsMTIgQEAKIAogCXUzMiBjb25maWc7CQkJCQkJLyogMHg0NTAgKi8KICNkZWZpbmUgU0hBUkVEX0ZFQVRVUkVfQk1DX0VDSE9fTU9ERV9FTiAJICAgIDB4MDAwMDAwMDEKKworCS8qICBVc2UgdGhlIHZhbHVlcyBmcm9tIG9wdGlvbnMgNDcgYW5kIDQ4IGluc3RlYWQgb2YgdGhlIEhXIGRlZmF1bHQKKwkgIHZhbHVlcyAqLworI2RlZmluZSBTSEFSRURfRkVBVF9DRkdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfQ0ZHX0RJU0FCTEVEICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFNIQVJFRF9GRUFUX0NGR19PVkVSUklERV9QUkVFTVBIQVNJU19DRkdfRU5BQkxFRCAgICAgIDB4MDAwMDAwMDIKKwogI2RlZmluZSBTSEFSRURfRkVBVFVSRV9NRl9NT0RFX0RJU0FCTEVEIAkgICAgMHgwMDAwMDEwMAogCiB9OwpAQCAtMzcyLDYgKzM0MywxMSBAQAogI2RlZmluZSBQT1JUX0ZFQVRVUkVfTUJBX0VOQUJMRUQJCSAgICAweDAyMDAwMDAwCiAjZGVmaW5lIFBPUlRfRkVBVFVSRV9NRldfRU5BQkxFRAkJICAgIDB4MDQwMDAwMDAKIAorCS8qICBDaGVjayB0aGUgb3B0aWMgdmVuZG9yIHZpYSBpMmMgYmVmb3JlIGFsbG93aW5nIGl0IHRvIGJlIHVzZWQgYnkKKwkgIFNXICovCisjZGVmaW5lIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9ESVNBQkxFRCAJICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBQT1JUX0ZFQVRfQ0ZHX09QVF9NRExfRU5GUkNNTlRfRU5BQkxFRAkJICAgICAgMHgwODAwMDAwMAorCiAJdTMyIHdvbF9jb25maWc7CiAJLyogRGVmYXVsdCBpcyB1c2VkIHdoZW4gZHJpdmVyIHNldHMgdG8gImF1dG8iIG1vZGUgKi8KICNkZWZpbmUgUE9SVF9GRUFUVVJFX1dPTF9ERUZBVUxUX01BU0sJCSAgICAweDAwMDAwMDAzCkBAIC01MTIsNyArNDg4LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBEZXZpY2UgSW5mb3JtYXRpb24JCQkJCQkJICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RydWN0IGRldl9pbmZvIHsJCQkJCQkgICAgLyogc2l6ZSAqLworc3RydWN0IHNobV9kZXZfaW5mbyB7CQkJCQkJICAgIC8qIHNpemUgKi8KIAogCXUzMiAgICBiY19yZXY7IC8qIDggYml0cyBlYWNoOiBtYWpvciwgbWlub3IsIGJ1aWxkICovCSAgICAgICAvKiA0ICovCiAKQEAgLTY0MSw3ICs2MTcsMTAgQEAKIAogCXUzMiBwb3J0X3N0eDsKIAotCXUzMiByZXNlcnZlZFsyXTsKKwl1MzIgc3RhdF9uaWdfdGltZXI7CisKKwkvKiBNQ1AgZmlybXdhcmUgZG9lcyBub3QgdXNlIHRoaXMgZmllbGQgKi8KKwl1MzIgZXh0X3BoeV9md192ZXJzaW9uOwogCiB9OwogCkBAIC04MjcsMTEgKzgwNiw3IEBACiAKIAlzdHJ1Y3Qgc2hhcmVkX21mX2NmZwlzaGFyZWRfbWZfY29uZmlnOwogCXN0cnVjdCBwb3J0X21mX2NmZwlwb3J0X21mX2NvbmZpZ1tQT1JUX01BWF07Ci0jaWYgZGVmaW5lZChiNzEwKQotCXN0cnVjdCBmdW5jX21mX2NmZwlmdW5jX21mX2NvbmZpZ1tFMV9GVU5DX01BWF07Ci0jZWxzZQogCXN0cnVjdCBmdW5jX21mX2NmZwlmdW5jX21mX2NvbmZpZ1tFMUhfRlVOQ19NQVhdOwotI2VuZGlmCiAKIH07CiAKQEAgLTg2Miw3ICs4MzcsNyBAQAogI2RlZmluZSBTSFJfTUVNX1ZBTElESVRZX0FDVElWRV9NRldfTk9ORQkgICAgMHgwMDAwMDFjMAogI2RlZmluZSBTSFJfTUVNX1ZBTElESVRZX0FDVElWRV9NRldfTUFTSwkgICAgMHgwMDAwMDFjMAogCi0Jc3RydWN0IGRldl9pbmZvIAlkZXZfaW5mbzsJCSAvKiAweDggICAgICgweDQzOCkgKi8KKwlzdHJ1Y3Qgc2htX2Rldl9pbmZvCWRldl9pbmZvOwkJIC8qIDB4OCAgICAgKDB4NDM4KSAqLwogCiAJdTgJCQlyZXNlcnZlZFs1MipQT1JUX01BWF07CiAKQEAgLTEyMTIsOCArMTE4Nyw5IEBACiAKIAogI2RlZmluZSBCQ01fNTcxMF9GV19NQUpPUl9WRVJTSU9OCQkJNAotI2RlZmluZSBCQ01fNTcxMF9GV19NSU5PUl9WRVJTSU9OCQkJNQotI2RlZmluZSBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OCQkJMQorI2RlZmluZSBCQ01fNTcxMF9GV19NSU5PUl9WRVJTSU9OCQkJOAorI2RlZmluZSBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OCQkJNTMKKyNkZWZpbmUgQkNNXzU3MTBfRldfRU5HSU5FRVJJTkdfVkVSU0lPTiAJCTAKICNkZWZpbmUgQkNNXzU3MTBfRldfQ09NUElMRV9GTEFHUwkJCTEKIAogCkBAIC0xMjIxLDE4ICsxMTk3LDEyIEBACiAgKiBhdHRlbnRpb24gYml0cwogICovCiBzdHJ1Y3QgYXR0ZW5fZGVmX3N0YXR1c19ibG9jayB7Ci0JdTMyIGF0dG5fYml0czsKLQl1MzIgYXR0bl9iaXRzX2FjazsKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgYXR0bl9iaXRzX2luZGV4OwotCXU4IHJlc2VydmVkMDsKLQl1OCBzdGF0dXNfYmxvY2tfaWQ7Ci0jZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwlfX2xlMzIgYXR0bl9iaXRzOworCV9fbGUzMiBhdHRuX2JpdHNfYWNrOwogCXU4IHN0YXR1c19ibG9ja19pZDsKIAl1OCByZXNlcnZlZDA7Ci0JdTE2IGF0dG5fYml0c19pbmRleDsKLSNlbmRpZgotCXUzMiByZXNlcnZlZDE7CisJX19sZTE2IGF0dG5fYml0c19pbmRleDsKKwlfX2xlMzIgcmVzZXJ2ZWQxOwogfTsKIAogCkBAIC0xMzA1LDcgKzEyNzUsNyBAQAogICogUGFyc2VyIHBhcnNpbmcgZmxhZ3MgZmllbGQKICAqLwogc3RydWN0IHBhcnNpbmdfZmxhZ3MgewotCXUxNiBmbGFnczsKKwlfX2xlMTYgZmxhZ3M7CiAjZGVmaW5lIFBBUlNJTkdfRkxBR1NfRVRIRVJORVRfQUREUkVTU19UWVBFICgweDE8PDApCiAjZGVmaW5lIFBBUlNJTkdfRkxBR1NfRVRIRVJORVRfQUREUkVTU19UWVBFX1NISUZUIDAKICNkZWZpbmUgUEFSU0lOR19GTEFHU19WTEFOICgweDE8PDEpCkBAIC0xMzM2LDggKzEzMDYsOCBAQAogCiAKIHN0cnVjdCByZWdwYWlyIHsKLQl1MzIgbG87Ci0JdTMyIGhpOworCV9fbGUzMiBsbzsKKwlfX2xlMzIgaGk7CiB9OwogCiAKQEAgLTE0MzQsOCArMTQwNCwxMCBAQAogI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9UUEFfU0hJRlQgMgogI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwzKQogI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TR0VfUklOR19TSElGVCAzCi0jZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDAgKDB4Rjw8NCkKLSNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA0CisjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1MgKDB4MTw8NCkKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDU19TSElGVCA0CisjZGVmaW5lIF9fVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19SRVNFUlZFRDAgKDB4Nzw8NSkKKyNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA1CiAJdTggc3RhdHVzX2Jsb2NrX2lkOwogCXU4IGNsaWVudElkOwogCXU4IHNiX2luZGV4X251bWJlcnM7CkBAIC0xNDYwLDE0ICsxNDMyLDE4IEBACiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1RQQV9TSElGVCAyCiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDMpCiAjZGVmaW5lIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDMKLSNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMCAoMHhGPDw0KQotI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDQKKyNkZWZpbmUgVVNUT1JNX0VUSF9TVF9DT05URVhUX0NPTkZJR19FTkFCTEVfU1RBVElTVElDUyAoMHgxPDw0KQorI2RlZmluZSBVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9TVEFUSVNUSUNTX1NISUZUIDQKKyNkZWZpbmUgX19VU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX1JFU0VSVkVEMCAoMHg3PDw1KQorI2RlZmluZSBfX1VTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfUkVTRVJWRUQwX1NISUZUIDUKICNlbmRpZgogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQogCXUxNiBiZF9idWZmX3NpemU7Ci0JdTE2IG1jX2FsaWdubWVudF9zaXplOworCXU4IHN0YXRpc3RpY3NfY291bnRlcl9pZDsKKwl1OCBtY19hbGlnbm1lbnRfbG9nX3NpemU7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1MTYgbWNfYWxpZ25tZW50X3NpemU7CisJdTggbWNfYWxpZ25tZW50X2xvZ19zaXplOworCXU4IHN0YXRpc3RpY3NfY291bnRlcl9pZDsKIAl1MTYgYmRfYnVmZl9zaXplOwogI2VuZGlmCiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCkBAIC0xNDc5LDEzICsxNDU1LDcgQEAKIAl1OCBfX2xvY2FsX2JkX3Byb2Q7CiAJdTggX19sb2NhbF9zZ2VfcHJvZDsKICNlbmRpZgotI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQotCXUxNiBfX2JkX2NvbnM7Ci0JdTE2IF9fc2dlX2NvbnM7Ci0jZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1MTYgX19zZ2VfY29uczsKLQl1MTYgX19iZF9jb25zOwotI2VuZGlmCisJdTMyIHJlc2VydmVkOwogCXUzMiBiZF9wYWdlX2Jhc2VfbG87CiAJdTMyIGJkX3BhZ2VfYmFzZV9oaTsKIAl1MzIgc2dlX3BhZ2VfYmFzZV9sbzsKQEAgLTE0OTYsMTYgKzE0NjYsMTYgQEAKICAqIFRoZSBldGggUnggQnVmZmVyIERlc2NyaXB0b3IKICAqLwogc3RydWN0IGV0aF9yeF9iZCB7Ci0JdTMyIGFkZHJfbG87Ci0JdTMyIGFkZHJfaGk7CisJX19sZTMyIGFkZHJfbG87CisJX19sZTMyIGFkZHJfaGk7CiB9OwogCiAvKgogICogVGhlIGV0aCBSeCBTR0UgRGVzY3JpcHRvcgogICovCiBzdHJ1Y3QgZXRoX3J4X3NnZSB7Ci0JdTMyIGFkZHJfbG87Ci0JdTMyIGFkZHJfaGk7CisJX19sZTMyIGFkZHJfbG87CisJX19sZTMyIGFkZHJfaGk7CiB9OwogCiAvKgpAQCAtMTY5Nyw3ICsxNjY3LDcgQEAKIH07CiAKIC8qCi0gKiBUaGUgZXRoIGFnZ3JlZ2F0aXZlIGNvbnRleHQgc2VjdGlvbiBvZiBUc3Rvcm0KKyAqIFRoZSBldGggZXh0cmEgYWdncmVnYXRpdmUgY29udGV4dCBzZWN0aW9uIG9mIFRzdG9ybQogICovCiBzdHJ1Y3QgdHN0b3JtX2V0aF9leHRyYV9hZ19jb250ZXh0X3NlY3Rpb24gewogCXUzMiBfX2FnZ192YWwxOwpAQCAtMTkwOCwxMSArMTg3OCwxMSBAQAogICogVGhlIGV0aCBUeCBCdWZmZXIgRGVzY3JpcHRvcgogICovCiBzdHJ1Y3QgZXRoX3R4X2JkIHsKLQl1MzIgYWRkcl9sbzsKLQl1MzIgYWRkcl9oaTsKLQl1MTYgbmJkOwotCXUxNiBuYnl0ZXM7Ci0JdTE2IHZsYW47CisJX19sZTMyIGFkZHJfbG87CisJX19sZTMyIGFkZHJfaGk7CisJX19sZTE2IG5iZDsKKwlfX2xlMTYgbmJ5dGVzOworCV9fbGUxNiB2bGFuOwogCXN0cnVjdCBldGhfdHhfYmRfZmxhZ3MgYmRfZmxhZ3M7CiAJdTggZ2VuZXJhbF9kYXRhOwogI2RlZmluZSBFVEhfVFhfQkRfSERSX05CRFMgKDB4M0Y8PDApCkBAIC0xOTU1LDExICsxOTI1LDExIEBACiAjZGVmaW5lIEVUSF9UWF9QQVJTRV9CRF9DV1JfRkxHX1NISUZUIDcKIAl1OCBpcF9obGVuOwogCXM4IGNzX29mZnNldDsKLQl1MTYgdG90YWxfaGxlbjsKLQl1MTYgbHNvX21zczsKLQl1MTYgdGNwX3BzZXVkb19jc3VtOwotCXUxNiBpcF9pZDsKLQl1MzIgdGNwX3NlbmRfc2VxOworCV9fbGUxNiB0b3RhbF9obGVuOworCV9fbGUxNiBsc29fbXNzOworCV9fbGUxNiB0Y3BfcHNldWRvX2NzdW07CisJX19sZTE2IGlwX2lkOworCV9fbGUzMiB0Y3Bfc2VuZF9zZXE7CiB9OwogCiAvKgpAQCAtMjA3NSw0NCArMjA0NSw0NCBAQAogICogdXN0b3JtIHN0YXR1cyBibG9jawogICovCiBzdHJ1Y3QgdXN0b3JtX2RlZl9zdGF0dXNfYmxvY2sgewotCXUxNiBpbmRleF92YWx1ZXNbSENfVVNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107Ci0JdTE2IHN0YXR1c19ibG9ja19pbmRleDsKKwlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX1VTVE9STV9ERUZfU0JfTlVNX0lORElDRVNdOworCV9fbGUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CiAJdTggZnVuYzsKIAl1OCBzdGF0dXNfYmxvY2tfaWQ7Ci0JdTMyIF9fZmxhZ3M7CisJX19sZTMyIF9fZmxhZ3M7CiB9OwogCiAvKgogICogY3N0b3JtIHN0YXR1cyBibG9jawogICovCiBzdHJ1Y3QgY3N0b3JtX2RlZl9zdGF0dXNfYmxvY2sgewotCXUxNiBpbmRleF92YWx1ZXNbSENfQ1NUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107Ci0JdTE2IHN0YXR1c19ibG9ja19pbmRleDsKKwlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX0NTVE9STV9ERUZfU0JfTlVNX0lORElDRVNdOworCV9fbGUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CiAJdTggZnVuYzsKIAl1OCBzdGF0dXNfYmxvY2tfaWQ7Ci0JdTMyIF9fZmxhZ3M7CisJX19sZTMyIF9fZmxhZ3M7CiB9OwogCiAvKgogICogeHN0b3JtIHN0YXR1cyBibG9jawogICovCiBzdHJ1Y3QgeHN0b3JtX2RlZl9zdGF0dXNfYmxvY2sgewotCXUxNiBpbmRleF92YWx1ZXNbSENfWFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107Ci0JdTE2IHN0YXR1c19ibG9ja19pbmRleDsKKwlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX1hTVE9STV9ERUZfU0JfTlVNX0lORElDRVNdOworCV9fbGUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CiAJdTggZnVuYzsKIAl1OCBzdGF0dXNfYmxvY2tfaWQ7Ci0JdTMyIF9fZmxhZ3M7CisJX19sZTMyIF9fZmxhZ3M7CiB9OwogCiAvKgogICogdHN0b3JtIHN0YXR1cyBibG9jawogICovCiBzdHJ1Y3QgdHN0b3JtX2RlZl9zdGF0dXNfYmxvY2sgewotCXUxNiBpbmRleF92YWx1ZXNbSENfVFNUT1JNX0RFRl9TQl9OVU1fSU5ESUNFU107Ci0JdTE2IHN0YXR1c19ibG9ja19pbmRleDsKKwlfX2xlMTYgaW5kZXhfdmFsdWVzW0hDX1RTVE9STV9ERUZfU0JfTlVNX0lORElDRVNdOworCV9fbGUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CiAJdTggZnVuYzsKIAl1OCBzdGF0dXNfYmxvY2tfaWQ7Ci0JdTMyIF9fZmxhZ3M7CisJX19sZTMyIF9fZmxhZ3M7CiB9OwogCiAvKgpAQCAtMjEzMSwyMiArMjEwMSwyMiBAQAogICogdXN0b3JtIHN0YXR1cyBibG9jawogICovCiBzdHJ1Y3QgdXN0b3JtX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19VU1RPUk1fU0JfTlVNX0lORElDRVNdOwotCXUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CisJX19sZTE2IGluZGV4X3ZhbHVlc1tIQ19VU1RPUk1fU0JfTlVNX0lORElDRVNdOworCV9fbGUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CiAJdTggZnVuYzsKIAl1OCBzdGF0dXNfYmxvY2tfaWQ7Ci0JdTMyIF9fZmxhZ3M7CisJX19sZTMyIF9fZmxhZ3M7CiB9OwogCiAvKgogICogY3N0b3JtIHN0YXR1cyBibG9jawogICovCiBzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9jayB7Ci0JdTE2IGluZGV4X3ZhbHVlc1tIQ19DU1RPUk1fU0JfTlVNX0lORElDRVNdOwotCXUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CisJX19sZTE2IGluZGV4X3ZhbHVlc1tIQ19DU1RPUk1fU0JfTlVNX0lORElDRVNdOworCV9fbGUxNiBzdGF0dXNfYmxvY2tfaW5kZXg7CiAJdTggZnVuYzsKIAl1OCBzdGF0dXNfYmxvY2tfaWQ7Ci0JdTMyIF9fZmxhZ3M7CisJX19sZTMyIF9fZmxhZ3M7CiB9OwogCiAvKgpAQCAtMjE2Miw5ICsyMTMyLDkgQEAKICAqIFRoZSBkYXRhIGZvciBSU1Mgc2V0dXAgcmFtcm9kCiAgKi8KIHN0cnVjdCBldGhfY2xpZW50X3NldHVwX3JhbXJvZF9kYXRhIHsKLQl1MzIgY2xpZW50X2lkXzViOwotCXU4IGlzX3JkbWFfMWI7Ci0JdTggcmVzZXJ2ZWQwOworCXUzMiBjbGllbnRfaWQ7CisJdTggaXNfcmRtYTsKKwl1OCBpc19mY29lOwogCXUxNiByZXNlcnZlZDE7CiB9OwogCkBAIC0yMjEyLDEyICsyMTgyLDEyIEBACiAjZGVmaW5lIEVUSF9GQVNUX1BBVEhfUlhfQ1FFX0w0X1hTVU1fTk9fVkFMSURBVElPTl9GTEdfU0hJRlQgNwogCXU4IHBsYWNlbWVudF9vZmZzZXQ7CiAJdTggcXVldWVfaW5kZXg7Ci0JdTMyIHJzc19oYXNoX3Jlc3VsdDsKLQl1MTYgdmxhbl90YWc7Ci0JdTE2IHBrdF9sZW47Ci0JdTE2IGxlbl9vbl9iZDsKKwlfX2xlMzIgcnNzX2hhc2hfcmVzdWx0OworCV9fbGUxNiB2bGFuX3RhZzsKKwlfX2xlMTYgcGt0X2xlbjsKKwlfX2xlMTYgbGVuX29uX2JkOwogCXN0cnVjdCBwYXJzaW5nX2ZsYWdzIHBhcnNfZmxhZ3M7Ci0JdTE2IHNnbFs4XTsKKwlfX2xlMTYgc2dsWzhdOwogfTsKIAogCkBAIC0yMjI1LDcgKzIxOTUsNyBAQAogICogVGhlIGRhdGEgZm9yIFJTUyBzZXR1cCByYW1yb2QKICAqLwogc3RydWN0IGV0aF9oYWx0X3JhbXJvZF9kYXRhIHsKLQl1MzIgY2xpZW50X2lkXzViOworCXUzMiBjbGllbnRfaWQ7CiAJdTMyIHJlc2VydmVkMDsKIH07CiAKQEAgLTIyMzYsMTEgKzIyMDYsMTEgQEAKIHN0cnVjdCBldGhfcXVlcnlfcmFtcm9kX2RhdGEgewogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQogCXU4IHJlc2VydmVkMDsKLQl1OCBjb2xsZWN0X3BvcnRfMWI7CisJdTggY29sbGVjdF9wb3J0OwogCXUxNiBkcnZfY291bnRlcjsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCXUxNiBkcnZfY291bnRlcjsKLQl1OCBjb2xsZWN0X3BvcnRfMWI7CisJdTggY29sbGVjdF9wb3J0OwogCXU4IHJlc2VydmVkMDsKICNlbmRpZgogCXUzMiBjdHJfaWRfdmVjdG9yOwpAQCAtMjI1MSw4ICsyMjIxLDggQEAKICAqIFBsYWNlIGhvbGRlciBmb3IgcmFtcm9kcyBwcm90b2NvbCBzcGVjaWZpYyBkYXRhCiAgKi8KIHN0cnVjdCByYW1yb2RfZGF0YSB7Ci0JdTMyIGRhdGFfbG87Ci0JdTMyIGRhdGFfaGk7CisJX19sZTMyIGRhdGFfbG87CisJX19sZTMyIGRhdGFfaGk7CiB9OwogCiAvKgpAQCAtMjI2NCwxNiArMjIzNCw2IEBACiAKIAogLyoKLSAqIFJ4IExhc3QgQkQgaW4gcGFnZSAoaW4gRVRIKQotICovCi1zdHJ1Y3QgZXRoX3J4X2JkX25leHRfcGFnZSB7Ci0JdTMyIGFkZHJfbG87Ci0JdTMyIGFkZHJfaGk7Ci0JdTggcmVzZXJ2ZWRbOF07Ci19OwotCi0KLS8qCiAgKiBFdGggUnggQ3FlIHN0cnVjdHVyZS0gZ2VuZXJhbCBzdHJ1Y3R1cmUgZm9yIHJhbXJvZHMKICAqLwogc3RydWN0IGNvbW1vbl9yYW1yb2RfZXRoX3J4X2NxZSB7CkBAIC0yMjgyLDI0ICsyMjQyLDI0IEBACiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9UWVBFX1NISUZUIDAKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX1JFU0VSVkVEMCAoMHg3Rjw8MSkKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX1JFU0VSVkVEMF9TSElGVCAxCi0JdTggY29ubl90eXBlXzNiOwotCXUxNiByZXNlcnZlZDE7Ci0JdTMyIGNvbm5fYW5kX2NtZF9kYXRhOworCXU4IGNvbm5fdHlwZTsKKwlfX2xlMTYgcmVzZXJ2ZWQxOworCV9fbGUzMiBjb25uX2FuZF9jbWRfZGF0YTsKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NJRCAoMHhGRkZGRkY8PDApCiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9DSURfU0hJRlQgMAogI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfQ01EX0lEICgweEZGPDwyNCkKICNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX0NNRF9JRF9TSElGVCAyNAogCXN0cnVjdCByYW1yb2RfZGF0YSBwcm90b2NvbF9kYXRhOwotCXUzMiByZXNlcnZlZDJbNF07CisJX19sZTMyIHJlc2VydmVkMls0XTsKIH07CiAKIC8qCiAgKiBSeCBMYXN0IENRRSBpbiBwYWdlIChpbiBFVEgpCiAgKi8KIHN0cnVjdCBldGhfcnhfY3FlX25leHRfcGFnZSB7Ci0JdTMyIGFkZHJfbG87Ci0JdTMyIGFkZHJfaGk7Ci0JdTMyIHJlc2VydmVkWzZdOworCV9fbGUzMiBhZGRyX2xvOworCV9fbGUzMiBhZGRyX2hpOworCV9fbGUzMiByZXNlcnZlZFs2XTsKIH07CiAKIC8qCkBAIC0yMzE2LDE3ICsyMjc2LDE3IEBACiAgKiBjb21tb24gZGF0YSBmb3IgYWxsIHByb3RvY29scwogICovCiBzdHJ1Y3Qgc3BlX2hkciB7Ci0JdTMyIGNvbm5fYW5kX2NtZF9kYXRhOworCV9fbGUzMiBjb25uX2FuZF9jbWRfZGF0YTsKICNkZWZpbmUgU1BFX0hEUl9DSUQgKDB4RkZGRkZGPDwwKQogI2RlZmluZSBTUEVfSERSX0NJRF9TSElGVCAwCiAjZGVmaW5lIFNQRV9IRFJfQ01EX0lEICgweEZGPDwyNCkKICNkZWZpbmUgU1BFX0hEUl9DTURfSURfU0hJRlQgMjQKLQl1MTYgdHlwZTsKKwlfX2xlMTYgdHlwZTsKICNkZWZpbmUgU1BFX0hEUl9DT05OX1RZUEUgKDB4RkY8PDApCiAjZGVmaW5lIFNQRV9IRFJfQ09OTl9UWVBFX1NISUZUIDAKICNkZWZpbmUgU1BFX0hEUl9DT01NT05fUkFNUk9EICgweEZGPDw4KQogI2RlZmluZSBTUEVfSERSX0NPTU1PTl9SQU1ST0RfU0hJRlQgOAotCXUxNiByZXNlcnZlZDsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CiB9OwogCiAvKgpAQCAtMjM1NSw5ICsyMzE1LDkgQEAKICAqIGRvb3JiZWxsIGRhdGEgaW4gaG9zdCBtZW1vcnkKICAqLwogc3RydWN0IGV0aF90eF9kYl9kYXRhIHsKLQl1MzIgcGFja2V0c19wcm9kOwotCXUxNiBiZHNfcHJvZDsKLQl1MTYgcmVzZXJ2ZWQ7CisJX19sZTMyIHBhY2tldHNfcHJvZDsKKwlfX2xlMTYgYmRzX3Byb2Q7CisJX19sZTE2IHJlc2VydmVkOwogfTsKIAogCkBAIC0yMzc3LDE0ICsyMzM3LDE2IEBACiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9DQVBBQklMSVRZX1NISUZUIDIKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X1RDUF9DQVBBQklMSVRZICgweDE8PDMpCiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9UQ1BfQ0FQQUJJTElUWV9TSElGVCAzCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfRU5BQkxFICgweDE8PDQpCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfRU5BQkxFX1NISUZUIDQKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFICgweDE8PDUpCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19ERUZBVUxUX0VOQUJMRV9TSElGVCA1Ci0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTSAoMHgxPDw2KQotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfVkxBTl9JTl9DQU1fU0hJRlQgNgotI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDAgKDB4MUZGPDw3KQotI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNworI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX01PREUgKDB4Nzw8NCkKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19NT0RFX1NISUZUIDQKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFICgweDE8PDcpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19ERUZBVUxUX0VOQUJMRV9TSElGVCA3CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTSAoMHgxPDw4KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfVkxBTl9JTl9DQU1fU0hJRlQgOAorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRTFIT1ZfSU5fQ0FNICgweDE8PDkpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU1fU0hJRlQgOQorI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDAgKDB4M0Y8PDEwKQorI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgMTAKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQogCXUxNiBjb25maWdfZmxhZ3M7CiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNF9DQVBBQklMSVRZICgweDE8PDApCkBAIC0yMzk1LDE0ICsyMzU3LDE2IEBACiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9DQVBBQklMSVRZX1NISUZUIDIKICNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19JUFY2X1RDUF9DQVBBQklMSVRZICgweDE8PDMpCiAjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfSVBWNl9UQ1BfQ0FQQUJJTElUWV9TSElGVCAzCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfRU5BQkxFICgweDE8PDQpCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SU1NfRU5BQkxFX1NISUZUIDQKLSNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFICgweDE8PDUpCi0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19ERUZBVUxUX0VOQUJMRV9TSElGVCA1Ci0jZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTSAoMHgxPDw2KQotI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfVkxBTl9JTl9DQU1fU0hJRlQgNgotI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDAgKDB4MUZGPDw3KQotI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNworI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfUlNTX01PREUgKDB4Nzw8NCkKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX1JTU19NT0RFX1NISUZUIDQKKyNkZWZpbmUgVFNUT1JNX0VUSF9GVU5DVElPTl9DT01NT05fQ09ORklHX0RFRkFVTFRfRU5BQkxFICgweDE8PDcpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19ERUZBVUxUX0VOQUJMRV9TSElGVCA3CisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19WTEFOX0lOX0NBTSAoMHgxPDw4KQorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfVkxBTl9JTl9DQU1fU0hJRlQgOAorI2RlZmluZSBUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRTFIT1ZfSU5fQ0FNICgweDE8PDkpCisjZGVmaW5lIFRTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19FMUhPVl9JTl9DQU1fU0hJRlQgOQorI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDAgKDB4M0Y8PDEwKQorI2RlZmluZSBfX1RTVE9STV9FVEhfRlVOQ1RJT05fQ09NTU9OX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgMTAKIAl1OCByc3NfcmVzdWx0X21hc2s7CiAJdTggbGVhZGluZ19jbGllbnRfaWQ7CiAjZW5kaWYKQEAgLTI0MjIsNyArMjM4Niw3IEBACiAgKiBNQUMgZmlsdGVyaW5nIGNvbmZpZ3VyYXRpb24gY29tbWFuZCBoZWFkZXIKICAqLwogc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2hkciB7Ci0JdTggbGVuZ3RoXzZiOworCXU4IGxlbmd0aDsKIAl1OCBvZmZzZXQ7CiAJdTE2IGNsaWVudF9pZDsKIAl1MzIgcmVzZXJ2ZWQxOwpAQCAtMjQzMiwxMCArMjM5NiwxMCBAQAogICogTUFDIGFkZHJlc3MgaW4gbGlzdCBmb3IgcmFtcm9kCiAgKi8KIHN0cnVjdCB0c3Rvcm1fY2FtX2VudHJ5IHsKLQl1MTYgbHNiX21hY19hZGRyOwotCXUxNiBtaWRkbGVfbWFjX2FkZHI7Ci0JdTE2IG1zYl9tYWNfYWRkcjsKLQl1MTYgZmxhZ3M7CisJX19sZTE2IGxzYl9tYWNfYWRkcjsKKwlfX2xlMTYgbWlkZGxlX21hY19hZGRyOworCV9fbGUxNiBtc2JfbWFjX2FkZHI7CisJX19sZTE2IGZsYWdzOwogI2RlZmluZSBUU1RPUk1fQ0FNX0VOVFJZX1BPUlRfSUQgKDB4MTw8MCkKICNkZWZpbmUgVFNUT1JNX0NBTV9FTlRSWV9QT1JUX0lEX1NISUZUIDAKICNkZWZpbmUgVFNUT1JNX0NBTV9FTlRSWV9SU1JWVkFMMCAoMHg3PDwxKQpAQCAtMjQ4NCwxMSArMjQ0OCwxMSBAQAogICogTUFDIGFkZHJlc3MgaW4gbGlzdCBmb3IgcmFtcm9kCiAgKi8KIHN0cnVjdCBtYWNfY29uZmlndXJhdGlvbl9lbnRyeV9lMWggewotCXUxNiBsc2JfbWFjX2FkZHI7Ci0JdTE2IG1pZGRsZV9tYWNfYWRkcjsKLQl1MTYgbXNiX21hY19hZGRyOwotCXUxNiB2bGFuX2lkOwotCXUxNiBlMWhvdl9pZDsKKwlfX2xlMTYgbHNiX21hY19hZGRyOworCV9fbGUxNiBtaWRkbGVfbWFjX2FkZHI7CisJX19sZTE2IG1zYl9tYWNfYWRkcjsKKwlfX2xlMTYgdmxhbl9pZDsKKwlfX2xlMTYgZTFob3ZfaWQ7CiAJdTggY2xpZW50X2lkOwogCXU4IGZsYWdzOwogI2RlZmluZSBNQUNfQ09ORklHVVJBVElPTl9FTlRSWV9FMUhfUE9SVCAoMHgxPDwwKQpAQCAtMjU0NCwyNCArMjUwOCwyOCBAQAogI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDEgKDB4RkZGPDw0KQogI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDFfU0hJRlQgNAogCXUxNiBjb25maWdfZmxhZ3M7Ci0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTU9WQUxfRU5BQkxFICgweDE8PDApCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTU9WQUxfRU5BQkxFX1NISUZUIDAKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFICgweDE8PDEpCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRV9TSElGVCAxCi0jZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MikKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklOR19TSElGVCAyCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMCAoMHgxRkZGPDwzKQotI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgMworI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfVkxBTl9SRU1fRU5BQkxFICgweDE8PDApCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTV9FTkFCTEVfU0hJRlQgMAorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRTFIT1ZfUkVNX0VOQUJMRSAoMHgxPDwxKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRTFIT1ZfUkVNX0VOQUJMRV9TSElGVCAxCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRSAoMHgxPDwyKQorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEVfU0hJRlQgMgorI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HICgweDE8PDMpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkdfU0hJRlQgMworI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDAgKDB4RkZGPDw0KQorI2RlZmluZSBfX1RTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19SRVNFUlZFRDBfU0hJRlQgNAogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCiAJdTE2IGNvbmZpZ19mbGFnczsKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEUgKDB4MTw8MCkKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNT1ZBTF9FTkFCTEVfU0hJRlQgMAotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfU1RBVFNJVElDU19FTkFCTEUgKDB4MTw8MSkKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFX1NISUZUIDEKLSNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklORyAoMHgxPDwyKQotI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRU5BQkxFX1NHRV9SSU5HX1NISUZUIDIKLSNkZWZpbmUgX19UU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfUkVTRVJWRUQwICgweDFGRkY8PDMpCi0jZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCAzCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTV9FTkFCTEUgKDB4MTw8MCkKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1ZMQU5fUkVNX0VOQUJMRV9TSElGVCAwCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFICgweDE8PDEpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FMUhPVl9SRU1fRU5BQkxFX1NISUZUIDEKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFICgweDE8PDIpCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRV9TSElGVCAyCisjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19FTkFCTEVfU0dFX1JJTkcgKDB4MTw8MykKKyNkZWZpbmUgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0VOQUJMRV9TR0VfUklOR19TSElGVCAzCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMCAoMHhGRkY8PDQpCisjZGVmaW5lIF9fVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1JFU0VSVkVEMF9TSElGVCA0CiAJdTE2IGRyb3BfZmxhZ3M7CiAjZGVmaW5lIFRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19EUk9QX0lQX0NTX0VSUiAoMHgxPDwwKQogI2RlZmluZSBUU1RPUk1fRVRIX0NMSUVOVF9DT05GSUdfRFJPUF9JUF9DU19FUlJfU0hJRlQgMApAQCAtMjU5NCwyOCArMjU2Miw3IEBACiAKIAogLyoKLSAqIFRocmVlIFJYIHByb2R1Y2VycyBmb3IgRVRICi0gKi8KLXN0cnVjdCB0c3Rvcm1fZXRoX3J4X3Byb2R1Y2VycyB7Ci0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTE2IGJkX3Byb2Q7Ci0JdTE2IGNxZV9wcm9kOwotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JdTE2IGNxZV9wcm9kOwotCXUxNiBiZF9wcm9kOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTE2IHJlc2VydmVkOwotCXUxNiBzZ2VfcHJvZDsKLSNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQotCXUxNiBzZ2VfcHJvZDsKLQl1MTYgcmVzZXJ2ZWQ7Ci0jZW5kaWYKLX07Ci0KLQotLyoKLSAqIGNvbW1vbiBmbGFnIHRvIGluZGljYXRlIGV4aXN0ZW5jZSBvZiBUUEEuCisgKiBjb21tb24gZmxhZyB0byBpbmRpY2F0ZSBleGlzdGFuY2Ugb2YgVFBBLgogICovCiBzdHJ1Y3QgdHN0b3JtX2V0aF90cGFfZXhpc3QgewogI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQpAQCAtMjYzMiwyMSArMjU3OSw3OSBAQAogCiAKIC8qCisgKiByeCByaW5ncyBwYXVzZSBkYXRhIGZvciBFMWggb25seQorICovCitzdHJ1Y3QgdXN0b3JtX2V0aF9yeF9wYXVzZV9kYXRhX2UxaCB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGJkX3Rocl9sb3c7CisJdTE2IGNxZV90aHJfbG93OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IGNxZV90aHJfbG93OworCXUxNiBiZF90aHJfbG93OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGNvczsKKwl1MTYgc2dlX3Rocl9sb3c7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgc2dlX3Rocl9sb3c7CisJdTE2IGNvczsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCXUxNiBiZF90aHJfaGlnaDsKKwl1MTYgY3FlX3Rocl9oaWdoOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IGNxZV90aHJfaGlnaDsKKwl1MTYgYmRfdGhyX2hpZ2g7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKwl1MTYgcmVzZXJ2ZWQwOworCXUxNiBzZ2VfdGhyX2hpZ2g7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKKwl1MTYgc2dlX3Rocl9oaWdoOworCXUxNiByZXNlcnZlZDA7CisjZW5kaWYKK307CisKKworLyoKKyAqIFRocmVlIFJYIHByb2R1Y2VycyBmb3IgRVRICisgKi8KK3N0cnVjdCB1c3Rvcm1fZXRoX3J4X3Byb2R1Y2VycyB7CisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IGJkX3Byb2Q7CisJdTE2IGNxZV9wcm9kOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCisJdTE2IGNxZV9wcm9kOworCXUxNiBiZF9wcm9kOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisJdTE2IHJlc2VydmVkOworCXUxNiBzZ2VfcHJvZDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOKQorCXUxNiBzZ2VfcHJvZDsKKwl1MTYgcmVzZXJ2ZWQ7CisjZW5kaWYKK307CisKKworLyoKICAqIHBlci1wb3J0IFNBRkMgZGVtbyB2YXJpYWJsZXMKICAqLwogc3RydWN0IGNtbmdfZmxhZ3NfcGVyX3BvcnQgewogCXU4IGNvbl9udW1iZXJbTlVNX09GX1BST1RPQ09MU107Ci0jaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTggZmFpcm5lc3NfZW5hYmxlOwotCXU4IHJhdGVfc2hhcGluZ19lbmFibGU7Ci0JdTggY21uZ19wcm90b2NvbF9lbmFibGU7Ci0JdTggY21uZ192bl9lbmFibGU7Ci0jZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQl1OCBjbW5nX3ZuX2VuYWJsZTsKLQl1OCBjbW5nX3Byb3RvY29sX2VuYWJsZTsKLQl1OCByYXRlX3NoYXBpbmdfZW5hYmxlOwotCXU4IGZhaXJuZXNzX2VuYWJsZTsKLSNlbmRpZgorCXUzMiBjbW5nX2VuYWJsZXM7CisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfRkFJUk5FU1NfVk4gKDB4MTw8MCkKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19WTl9TSElGVCAwCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfUkFURV9TSEFQSU5HX1ZOICgweDE8PDEpCisjZGVmaW5lIENNTkdfRkxBR1NfUEVSX1BPUlRfUkFURV9TSEFQSU5HX1ZOX1NISUZUIDEKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9GQUlSTkVTU19QUk9UT0NPTCAoMHgxPDwyKQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX1BST1RPQ09MX1NISUZUIDIKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9SQVRFX1NIQVBJTkdfUFJPVE9DT0wgKDB4MTw8MykKKyNkZWZpbmUgQ01OR19GTEFHU19QRVJfUE9SVF9SQVRFX1NIQVBJTkdfUFJPVE9DT0xfU0hJRlQgMworI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX0NPUyAoMHgxPDw0KQorI2RlZmluZSBDTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX0NPU19TSElGVCA0CisjZGVmaW5lIF9fQ01OR19GTEFHU19QRVJfUE9SVF9SRVNFUlZFRDAgKDB4N0ZGRkZGRjw8NSkKKyNkZWZpbmUgX19DTU5HX0ZMQUdTX1BFUl9QT1JUX1JFU0VSVkVEMF9TSElGVCA1CiB9OwogCiAKQEAgLTI2NzQsMTUgKzI2NzksMTUgQEAKICAqLwogc3RydWN0IHNhZmNfc3RydWN0X3Blcl9wb3J0IHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQl1MTYgX19yZXNlcnZlZDA7Ci0JdTggY3VyX2Nvc190eXBlczsKKwl1MTYgX19yZXNlcnZlZDE7CisJdTggX19yZXNlcnZlZDA7CiAJdTggc2FmY190aW1lb3V0X3VzZWM7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKIAl1OCBzYWZjX3RpbWVvdXRfdXNlYzsKLQl1OCBjdXJfY29zX3R5cGVzOwotCXUxNiBfX3Jlc2VydmVkMDsKKwl1OCBfX3Jlc2VydmVkMDsKKwl1MTYgX19yZXNlcnZlZDE7CiAjZW5kaWYKLQl1OCBjb3NfdG9fcHJvdG9jb2xbTUFYX0NPU19OVU1CRVJdOworCXUxNiBjb3NfdG9fcGF1c2VfbWFza1tOVU1fT0ZfU0FGQ19CSVRTXTsKIH07CiAKIApAQCAtMjcwMiwxNiArMjcwNywxNiBAQAogICovCiBzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgewogCXN0cnVjdCByZWdwYWlyIHRvdGFsX3NlbnRfYnl0ZXM7Ci0JdTMyIHRvdGFsX3NlbnRfcGt0czsKLQl1MzIgdW5pY2FzdF9wa3RzX3NlbnQ7CisJX19sZTMyIHRvdGFsX3NlbnRfcGt0czsKKwlfX2xlMzIgdW5pY2FzdF9wa3RzX3NlbnQ7CiAJc3RydWN0IHJlZ3BhaXIgdW5pY2FzdF9ieXRlc19zZW50OwogCXN0cnVjdCByZWdwYWlyIG11bHRpY2FzdF9ieXRlc19zZW50OwotCXUzMiBtdWx0aWNhc3RfcGt0c19zZW50OwotCXUzMiBicm9hZGNhc3RfcGt0c19zZW50OworCV9fbGUzMiBtdWx0aWNhc3RfcGt0c19zZW50OworCV9fbGUzMiBicm9hZGNhc3RfcGt0c19zZW50OwogCXN0cnVjdCByZWdwYWlyIGJyb2FkY2FzdF9ieXRlc19zZW50OwotCXUxNiBzdGF0c19jb3VudGVyOwotCXUxNiByZXNlcnZlZDA7Ci0JdTMyIHJlc2VydmVkMTsKKwlfX2xlMTYgc3RhdHNfY291bnRlcjsKKwlfX2xlMTYgcmVzZXJ2ZWQwOworCV9fbGUzMiByZXNlcnZlZDE7CiB9OwogCiAKQEAgLTI3MjcsMTAgKzI3MzIsMTAgQEAKICAqIFByb3RvY29sLWNvbW1vbiBzdGF0aXN0aWNzIGNvbGxlY3RlZCBieSB0aGUgVHN0b3JtIChwZXIgcG9ydCkKICAqLwogc3RydWN0IHRzdG9ybV9wZXJfcG9ydF9zdGF0cyB7Ci0JdTMyIG1hY19maWx0ZXJfZGlzY2FyZDsKLQl1MzIgeHhvdmVyZmxvd19kaXNjYXJkOwotCXUzMiBicmJfdHJ1bmNhdGVfZGlzY2FyZDsKLQl1MzIgbWFjX2Rpc2NhcmQ7CisJX19sZTMyIG1hY19maWx0ZXJfZGlzY2FyZDsKKwlfX2xlMzIgeHhvdmVyZmxvd19kaXNjYXJkOworCV9fbGUzMiBicmJfdHJ1bmNhdGVfZGlzY2FyZDsKKwlfX2xlMzIgbWFjX2Rpc2NhcmQ7CiB9OwogCiAKQEAgLTI3NDMsMTcgKzI3NDgsMTcgQEAKIAlzdHJ1Y3QgcmVncGFpciByY3ZfYnJvYWRjYXN0X2J5dGVzOwogCXN0cnVjdCByZWdwYWlyIHJjdl9tdWx0aWNhc3RfYnl0ZXM7CiAJc3RydWN0IHJlZ3BhaXIgcmN2X2Vycm9yX2J5dGVzOwotCXUzMiBjaGVja3N1bV9kaXNjYXJkOwotCXUzMiBwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZDsKLQl1MzIgdG90YWxfcmN2X3BrdHM7Ci0JdTMyIHJjdl91bmljYXN0X3BrdHM7Ci0JdTMyIHJjdl9icm9hZGNhc3RfcGt0czsKLQl1MzIgcmN2X211bHRpY2FzdF9wa3RzOwotCXUzMiBub19idWZmX2Rpc2NhcmQ7Ci0JdTMyIHR0bDBfZGlzY2FyZDsKLQl1MTYgc3RhdHNfY291bnRlcjsKLQl1MTYgcmVzZXJ2ZWQwOwotCXUzMiByZXNlcnZlZDE7CisJX19sZTMyIGNoZWNrc3VtX2Rpc2NhcmQ7CisJX19sZTMyIHBhY2tldHNfdG9vX2JpZ19kaXNjYXJkOworCV9fbGUzMiB0b3RhbF9yY3ZfcGt0czsKKwlfX2xlMzIgcmN2X3VuaWNhc3RfcGt0czsKKwlfX2xlMzIgcmN2X2Jyb2FkY2FzdF9wa3RzOworCV9fbGUzMiByY3ZfbXVsdGljYXN0X3BrdHM7CisJX19sZTMyIG5vX2J1ZmZfZGlzY2FyZDsKKwlfX2xlMzIgdHRsMF9kaXNjYXJkOworCV9fbGUxNiBzdGF0c19jb3VudGVyOworCV9fbGUxNiByZXNlcnZlZDA7CisJX19sZTMyIHJlc2VydmVkMTsKIH07CiAKIC8qCkBAIC0yNzY1LDExICsyNzcwLDMzIEBACiB9OwogCiAvKgorICogUHJvdG9jb2wtY29tbW9uIHN0YXRpc3RpY3MgY29sbGVjdGVkIGJ5IHRoZSBVc3Rvcm0gKHBlciBjbGllbnQpCisgKi8KK3N0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyB7CisJc3RydWN0IHJlZ3BhaXIgdWNhc3Rfbm9fYnVmZl9ieXRlczsKKwlzdHJ1Y3QgcmVncGFpciBtY2FzdF9ub19idWZmX2J5dGVzOworCXN0cnVjdCByZWdwYWlyIGJjYXN0X25vX2J1ZmZfYnl0ZXM7CisJX19sZTMyIHVjYXN0X25vX2J1ZmZfcGt0czsKKwlfX2xlMzIgbWNhc3Rfbm9fYnVmZl9wa3RzOworCV9fbGUzMiBiY2FzdF9ub19idWZmX3BrdHM7CisJX19sZTE2IHN0YXRzX2NvdW50ZXI7CisJX19sZTE2IHJlc2VydmVkMDsKK307CisKKy8qCisgKiBQcm90b2NvbC1jb21tb24gc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkgdGhlIFVzdG9ybQorICovCitzdHJ1Y3QgdXN0b3JtX2NvbW1vbl9zdGF0cyB7Cisgc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzIGNsaWVudF9zdGF0aXN0aWNzW01BWF9VX1NUQVRfQ09VTlRFUl9JRF07Cit9OworCisvKgogICogRXRoIHN0YXRpc3RpY3MgcXVlcnkgc3RydWN0dXJlIGZvciB0aGUgZXRoX3N0YXRzX3F1ZXJ5IHJhbXJvZAogICovCiBzdHJ1Y3QgZXRoX3N0YXRzX3F1ZXJ5IHsKIAlzdHJ1Y3QgeHN0b3JtX2NvbW1vbl9zdGF0cyB4c3Rvcm1fY29tbW9uOwogCXN0cnVjdCB0c3Rvcm1fY29tbW9uX3N0YXRzIHRzdG9ybV9jb21tb247CisJc3RydWN0IHVzdG9ybV9jb21tb25fc3RhdHMgdXN0b3JtX2NvbW1vbjsKIH07CiAKIApAQCAtMjc3Nyw2ICsyODA0LDcgQEAKICAqIHBlci12bmljIGZhaXJuZXNzIHZhcmlhYmxlcwogICovCiBzdHJ1Y3QgZmFpcm5lc3NfdmFyc19wZXJfdm4geworCXUzMiBjb3NfY3JlZGl0X2RlbHRhW01BWF9DT1NfTlVNQkVSXTsKIAl1MzIgcHJvdG9jb2xfY3JlZGl0X2RlbHRhW05VTV9PRl9QUk9UT0NPTFNdOwogCXUzMiB2bl9jcmVkaXRfZGVsdGE7CiAJdTMyIF9fcmVzZXJ2ZWQwOwpAQCAtMjc4OCwxMyArMjgxNiwxNSBAQAogICovCiBzdHJ1Y3QgZndfdmVyc2lvbiB7CiAjaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCi0JdTE2IHBhdGNoOwotCXU4IHByaW1hcnk7Ci0JdTggY2xpZW50OworCXU4IGVuZ2luZWVyaW5nOworCXU4IHJldmlzaW9uOworCXU4IG1pbm9yOworCXU4IG1ham9yOwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JdTggY2xpZW50OwotCXU4IHByaW1hcnk7Ci0JdTE2IHBhdGNoOworCXU4IG1ham9yOworCXU4IG1pbm9yOworCXU4IHJldmlzaW9uOworCXU4IGVuZ2luZWVyaW5nOwogI2VuZGlmCiAJdTMyIGZsYWdzOwogI2RlZmluZSBGV19WRVJTSU9OX09QVElNSVpFRCAoMHgxPDwwKQpAQCAtMjgxMiw5ICsyODQyLDEwIEBACiAgKiBGVyB2ZXJzaW9uIHN0b3JlZCBpbiBmaXJzdCBsaW5lIG9mIHByYW0KICAqLwogc3RydWN0IHByYW1fZndfdmVyc2lvbiB7Ci0JdTggY2xpZW50OwotCXU4IHByaW1hcnk7Ci0JdTE2IHBhdGNoOworCXU4IG1ham9yOworCXU4IG1pbm9yOworCXU4IHJldmlzaW9uOworCXU4IGVuZ2luZWVyaW5nOwogCXU4IGZsYWdzOwogI2RlZmluZSBQUkFNX0ZXX1ZFUlNJT05fT1BUSU1JWkVEICgweDE8PDApCiAjZGVmaW5lIFBSQU1fRldfVkVSU0lPTl9PUFRJTUlaRURfU0hJRlQgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdC5oCmluZGV4IDNiMGMyNDkuLjM5YmEyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X2luaXQuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9pbml0LmgKQEAgLTEsNiArMSw2IEBACiAvKiBibngyeF9pbml0Lmg6IEJyb2FkY29tIEV2ZXJlc3QgbmV0d29yayBkcml2ZXIuCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMiwxMiArMjIsMTUgQEAKICNkZWZpbmUgSU5JVF9BU0lDCQkJMHg0CiAjZGVmaW5lIElOSVRfSEFSRFdBUkUJCQkweDcKIAotI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRV9FMQkJKDB4NTgwMCAvIDQpCi0jZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxSAkJKDB4MTAwMDAgLyA0KQotI2RlZmluZSBUU1RPUk1fSU5UTUVNX0FERFIJCTB4MWEwMDAwCi0jZGVmaW5lIENTVE9STV9JTlRNRU1fQUREUgkJMHgyMjAwMDAKLSNkZWZpbmUgWFNUT1JNX0lOVE1FTV9BRERSCQkweDJhMDAwMAotI2RlZmluZSBVU1RPUk1fSU5UTUVNX0FERFIJCTB4MzIwMDAwCisjZGVmaW5lIFRTVE9STV9JTlRNRU1fQUREUgkJVFNFTV9SRUdfRkFTVF9NRU1PUlkKKyNkZWZpbmUgQ1NUT1JNX0lOVE1FTV9BRERSCQlDU0VNX1JFR19GQVNUX01FTU9SWQorI2RlZmluZSBYU1RPUk1fSU5UTUVNX0FERFIJCVhTRU1fUkVHX0ZBU1RfTUVNT1JZCisjZGVmaW5lIFVTVE9STV9JTlRNRU1fQUREUgkJVVNFTV9SRUdfRkFTVF9NRU1PUlkKKy8qIFJBTTAgc2l6ZSBpbiBieXRlcyAqLworI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRV9FMQkJMHg1ODAwCisjZGVmaW5lIFNUT1JNX0lOVE1FTV9TSVpFX0UxSAkJMHgxMDAwMAorI2RlZmluZSBTVE9STV9JTlRNRU1fU0laRShicCkJKChDSElQX0lTX0UxSChicCkgPyBTVE9STV9JTlRNRU1fU0laRV9FMUggOiBcCisJCQkJCQkgICAgU1RPUk1fSU5UTUVNX1NJWkVfRTEpIC8gNCkKIAogCiAvKiBJbml0IG9wZXJhdGlvbiB0eXBlcyBhbmQgc3RydWN0dXJlcyAqLwpAQCAtMTY3LDIxICsxNzAsMjQgQEAKIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF9maWxsKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBpbnQgZmlsbCwgdTMyIGxlbikKIHsKLQlpZiAoKGxlbiAqIDQpID4gRldfQlVGX1NJWkUpIHsKLQkJQk5YMlhfRVJSKCJMQVJHRSBETUFFIE9QRVJBVElPTiAhIGFkZHIgMHgleCAgbGVuIDB4JXhcbiIsCi0JCQkgIGFkZHIsIGxlbio0KTsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQoYnAtPmd1bnppcF9idWYsIGZpbGwsIGxlbiAqIDQpOworCXUzMiBidWZfbGVuID0gKCgobGVuICogNCkgPiBGV19CVUZfU0laRSkgPyBGV19CVUZfU0laRSA6IChsZW4gKiA0KSk7CisJdTMyIGJ1Zl9sZW4zMiA9IGJ1Zl9sZW4gLyA0OworCWludCBpOwogCi0JYm54Mnhfd3JpdGVfYmlnX2J1ZihicCwgYWRkciwgbGVuKTsKKwltZW1zZXQoYnAtPmd1bnppcF9idWYsIGZpbGwsIGJ1Zl9sZW4pOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBidWZfbGVuMzIpIHsKKwkJdTMyIGN1cl9sZW4gPSBtaW4oYnVmX2xlbjMyLCBsZW4gLSBpKTsKKworCQlibngyeF93cml0ZV9iaWdfYnVmKGJwLCBhZGRyICsgaSAqIDQsIGN1cl9sZW4pOworCX0KIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdF93cl82NChzdHJ1Y3QgYm54MnggKmJwLCB1MzIgYWRkciwgY29uc3QgdTMyICpkYXRhLAogCQkJICAgICB1MzIgbGVuNjQpCiB7Ci0JdTMyIGJ1Zl9sZW4zMiA9IEZXX0JVRl9TSVpFLzQ7Ci0JdTMyIGxlbiA9IGxlbjY0KjI7CisJdTMyIGJ1Zl9sZW4zMiA9IEZXX0JVRl9TSVpFIC8gNDsKKwl1MzIgbGVuID0gbGVuNjQgKiAyOwogCXU2NCBkYXRhNjQgPSAwOwogCWludCBpOwogCkBAIC0yNzAsNiArMjc2LDkgQEAKIAkJcmMgPSBibngyeF9ndW56aXAoYnAsICh1OCAqKWRhdGEsIGxlbik7CiAJCWlmIChyYykgewogCQkJQk5YMlhfRVJSKCJndW56aXAgZmFpbGVkICEgcmMgJWRcbiIsIHJjKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCWtmcmVlKHRlbXApOworI2VuZGlmCiAJCQlyZXR1cm47CiAJCX0KIAkJbGVuID0gYnAtPmd1bnppcF9vdXRsZW47CkBAIC00MjIsNTcgKzQzMSw1NyBAQAogCiAvKiBkZXJpdmVkIGNvbmZpZ3VyYXRpb24gZm9yIGVhY2ggcmVhZCBxdWV1ZSBmb3IgZWFjaCBtYXggcmVxdWVzdCBzaXplICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFyYl9saW5lIHJlYWRfYXJiX2RhdGFbTlVNX1JEX1FdW01BWF9SRF9PUkQgKyAxXSA9IHsKLQl7ezggLCA2NCAsIDI1fSwgezE2ICwgNjQgLCAyNX0sIHszMiAsIDY0ICwgMjV9LCB7NjQgLCA2NCAsIDQxfSB9LAotCXt7NCAsIDggLCA0fSwgICB7NCAsIDggLCA0fSwgICAgezQgLCA4ICwgNH0sICAgIHs0ICwgOCAsIDR9IH0sCi0Je3s0ICwgMyAsIDN9LCAgIHs0ICwgMyAsIDN9LCAgICB7NCAsIDMgLCAzfSwgICAgezQgLCAzICwgM30gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHsxNiAsIDMgLCAxMX0sICB7MTYgLCAzICwgMTF9IH0sCi0Je3s4ICwgNjQgLCAyNX0sIHsxNiAsIDY0ICwgMjV9LCB7MzIgLCA2NCAsIDI1fSwgezY0ICwgNjQgLCA0MX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7NjQgLCAzICwgNDF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezY0ICwgMyAsIDQxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHs2NCAsIDMgLCA0MX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7NjQgLCAzICwgNDF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDMgLCA2fSwgICB7MTYgLCAzICwgMTF9LCAgezMyICwgMyAsIDIxfSwgIHszMiAsIDMgLCAyMX0gfSwKLQl7ezggLCAzICwgNn0sICAgezE2ICwgMyAsIDExfSwgIHszMiAsIDMgLCAyMX0sICB7MzIgLCAzICwgMjF9IH0sCi0Je3s4ICwgMyAsIDZ9LCAgIHsxNiAsIDMgLCAxMX0sICB7MzIgLCAzICwgMjF9LCAgezMyICwgMyAsIDIxfSB9LAotCXt7OCAsIDY0ICwgMjV9LCB7MTYgLCA2NCAsIDQxfSwgezMyICwgNjQgLCA4MX0sIHs2NCAsIDY0ICwgMTIwfSB9CisvKiAxICovCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDI1fSwgezMyLCA2NCwgMjV9LCB7NjQsIDY0LCA0MX0gfSwKKwl7IHs0LCA4LCAgNH0sICB7NCwgIDgsICA0fSwgIHs0LCAgOCwgIDR9LCAgezQsICA4LCAgNH0gIH0sCisJeyB7NCwgMywgIDN9LCAgezQsICAzLCAgM30sICB7NCwgIDMsICAzfSwgIHs0LCAgMywgIDN9ICB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezE2LCAzLCAgMTF9LCB7MTYsIDMsICAxMX0gfSwKKwl7IHs4LCA2NCwgMjV9LCB7MTYsIDY0LCAyNX0sIHszMiwgNjQsIDI1fSwgezY0LCA2NCwgNDF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7NjQsIDMsICA0MX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezY0LCAzLCAgNDF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHs2NCwgMywgIDQxfSB9LAorLyogMTAgKi97IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisvKiAyMCAqL3sgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDMsICA2fSwgIHsxNiwgMywgIDExfSwgezMyLCAzLCAgMjF9LCB7MzIsIDMsICAyMX0gfSwKKwl7IHs4LCAzLCAgNn0sICB7MTYsIDMsICAxMX0sIHszMiwgMywgIDIxfSwgezMyLCAzLCAgMjF9IH0sCisJeyB7OCwgMywgIDZ9LCAgezE2LCAzLCAgMTF9LCB7MzIsIDMsICAyMX0sIHszMiwgMywgIDIxfSB9LAorCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDQxfSwgezMyLCA2NCwgODF9LCB7NjQsIDY0LCAxMjB9IH0KIH07CiAKIC8qIGRlcml2ZWQgY29uZmlndXJhdGlvbiBmb3IgZWFjaCB3cml0ZSBxdWV1ZSBmb3IgZWFjaCBtYXggcmVxdWVzdCBzaXplICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFyYl9saW5lIHdyaXRlX2FyYl9kYXRhW05VTV9XUl9RXVtNQVhfV1JfT1JEICsgMV0gPSB7Ci0Je3s0ICwgNiAsIDN9LCAgIHs0ICwgNiAsIDN9LCAgICB7NCAsIDYgLCAzfSB9LAotCXt7NCAsIDIgLCAzfSwgICB7NCAsIDIgLCAzfSwgICAgezQgLCAyICwgM30gfSwKLQl7ezggLCAyICwgNn0sICAgezE2ICwgMiAsIDExfSwgIHsxNiAsIDIgLCAxMX0gfSwKLQl7ezggLCAyICwgNn0sICAgezE2ICwgMiAsIDExfSwgIHszMiAsIDIgLCAyMX0gfSwKLQl7ezggLCAyICwgNn0sICAgezE2ICwgMiAsIDExfSwgIHszMiAsIDIgLCAyMX0gfSwKLQl7ezggLCAyICwgNn0sICAgezE2ICwgMiAsIDExfSwgIHszMiAsIDIgLCAyMX0gfSwKLQl7ezggLCA2NCAsIDI1fSwgezE2ICwgNjQgLCAyNX0sIHszMiAsIDY0ICwgMjV9IH0sCi0Je3s4ICwgMiAsIDZ9LCAgIHsxNiAsIDIgLCAxMX0sICB7MTYgLCAyICwgMTF9IH0sCi0Je3s4ICwgMiAsIDZ9LCAgIHsxNiAsIDIgLCAxMX0sICB7MTYgLCAyICwgMTF9IH0sCi0Je3s4ICwgOSAsIDZ9LCAgIHsxNiAsIDkgLCAxMX0sICB7MzIgLCA5ICwgMjF9IH0sCi0Je3s4ICwgNDcgLCAxOX0sIHsxNiAsIDQ3ICwgMTl9LCB7MzIgLCA0NyAsIDIxfSB9LAotCXt7OCAsIDkgLCA2fSwgICB7MTYgLCA5ICwgMTF9LCAgezE2ICwgOSAsIDExfSB9LAotCXt7OCAsIDY0ICwgMjV9LCB7MTYgLCA2NCAsIDQxfSwgezMyICwgNjQgLCA4MX0gfQorLyogMSAqLwl7IHs0LCA2LCAgM30sICB7NCwgIDYsICAzfSwgIHs0LCAgNiwgIDN9IH0sCisJeyB7NCwgMiwgIDN9LCAgezQsICAyLCAgM30sICB7NCwgIDIsICAzfSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezE2LCAyLCAgMTF9IH0sCisJeyB7OCwgMiwgIDZ9LCAgezE2LCAyLCAgMTF9LCB7MzIsIDIsICAyMX0gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHszMiwgMiwgIDIxfSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezMyLCAyLCAgMjF9IH0sCisJeyB7OCwgNjQsIDI1fSwgezE2LCA2NCwgMjV9LCB7MzIsIDY0LCAyNX0gfSwKKwl7IHs4LCAyLCAgNn0sICB7MTYsIDIsICAxMX0sIHsxNiwgMiwgIDExfSB9LAorCXsgezgsIDIsICA2fSwgIHsxNiwgMiwgIDExfSwgezE2LCAyLCAgMTF9IH0sCisvKiAxMCAqL3sgezgsIDksICA2fSwgIHsxNiwgOSwgIDExfSwgezMyLCA5LCAgMjF9IH0sCisJeyB7OCwgNDcsIDE5fSwgezE2LCA0NywgMTl9LCB7MzIsIDQ3LCAyMX0gfSwKKwl7IHs4LCA5LCAgNn0sICB7MTYsIDksICAxMX0sIHsxNiwgOSwgIDExfSB9LAorCXsgezgsIDY0LCAyNX0sIHsxNiwgNjQsIDQxfSwgezMyLCA2NCwgODF9IH0KIH07CiAKIC8qIHJlZ2lzdGVyIGFkZHJlc3NlcyBmb3IgcmVhZCBxdWV1ZXMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJiX2xpbmUgcmVhZF9hcmJfYWRkcltOVU1fUkRfUS0xXSA9IHsKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDAsIFBYUDJfUkVHX1JRX0JXX1JEX0FERDAsCisvKiAxICovCXtQWFAyX1JFR19SUV9CV19SRF9MMCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMCwKIAkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMH0sCiAJe1BYUDJfUkVHX1BTV1JRX0JXX0wxLCBQWFAyX1JFR19QU1dSUV9CV19BREQxLAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjF9LApAQCAtNDkwLDcgKzQ5OSw3IEBACiAJCVBYUDJfUkVHX1BTV1JRX0JXX1VCN30sCiAJe1BYUDJfUkVHX1BTV1JRX0JXX0w4LCBQWFAyX1JFR19QU1dSUV9CV19BREQ4LAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjh9LAotCXtQWFAyX1JFR19QU1dSUV9CV19MOSwgUFhQMl9SRUdfUFNXUlFfQldfQUREOSwKKy8qIDEwICove1BYUDJfUkVHX1BTV1JRX0JXX0w5LCBQWFAyX1JFR19QU1dSUV9CV19BREQ5LAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjl9LAogCXtQWFAyX1JFR19QU1dSUV9CV19MMTAsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDEwLAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjEwfSwKQEAgLTUxMCw3ICs1MTksNyBAQAogCQlQWFAyX1JFR19SUV9CV19SRF9VQk9VTkQxN30sCiAJe1BYUDJfUkVHX1JRX0JXX1JEX0wxOCwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTgsCiAJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE4fSwKLQl7UFhQMl9SRUdfUlFfQldfUkRfTDE5LCBQWFAyX1JFR19SUV9CV19SRF9BREQxOSwKKy8qIDIwICove1BYUDJfUkVHX1JRX0JXX1JEX0wxOSwgUFhQMl9SRUdfUlFfQldfUkRfQUREMTksCiAJCVBYUDJfUkVHX1JRX0JXX1JEX1VCT1VORDE5fSwKIAl7UFhQMl9SRUdfUlFfQldfUkRfTDIwLCBQWFAyX1JFR19SUV9CV19SRF9BREQyMCwKIAkJUFhQMl9SRUdfUlFfQldfUkRfVUJPVU5EMjB9LApAQCAtNTMyLDcgKzU0MSw3IEBACiAKIC8qIHJlZ2lzdGVyIGFkZHJlc3NlcyBmb3Igd3JpdGUgcXVldWVzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFyYl9saW5lIHdyaXRlX2FyYl9hZGRyW05VTV9XUl9RLTFdID0gewotCXtQWFAyX1JFR19QU1dSUV9CV19MMSwgUFhQMl9SRUdfUFNXUlFfQldfQUREMSwKKy8qIDEgKi8Je1BYUDJfUkVHX1BTV1JRX0JXX0wxLCBQWFAyX1JFR19QU1dSUV9CV19BREQxLAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjF9LAogCXtQWFAyX1JFR19QU1dSUV9CV19MMiwgUFhQMl9SRUdfUFNXUlFfQldfQUREMiwKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUIyfSwKQEAgLTU1MCw3ICs1NTksNyBAQAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjEwfSwKIAl7UFhQMl9SRUdfUFNXUlFfQldfTDExLCBQWFAyX1JFR19QU1dSUV9CV19BREQxMSwKIAkJUFhQMl9SRUdfUFNXUlFfQldfVUIxMX0sCi0Je1BYUDJfUkVHX1BTV1JRX0JXX0wyOCwgUFhQMl9SRUdfUFNXUlFfQldfQUREMjgsCisvKiAxMCAqL3tQWFAyX1JFR19QU1dSUV9CV19MMjgsIFBYUDJfUkVHX1BTV1JRX0JXX0FERDI4LAogCQlQWFAyX1JFR19QU1dSUV9CV19VQjI4fSwKIAl7UFhQMl9SRUdfUlFfQldfV1JfTDI5LCBQWFAyX1JFR19SUV9CV19XUl9BREQyOSwKIAkJUFhQMl9SRUdfUlFfQldfV1JfVUJPVU5EMjl9LApAQCAtNTY4LDcgKzU3NywxMiBAQAogCQkJICAgICBicC0+cGNpZV9jYXAgKyBQQ0lfRVhQX0RFVkNUTCwgJmRldmN0bCk7CiAJRFAoTkVUSUZfTVNHX0hXLCAicmVhZCAweCV4IGZyb20gZGV2Y3RsXG4iLCBkZXZjdGwpOwogCXdfb3JkZXIgPSAoKGRldmN0bCAmIFBDSV9FWFBfREVWQ1RMX1BBWUxPQUQpID4+IDUpOwotCXJfb3JkZXIgPSAoKGRldmN0bCAmIFBDSV9FWFBfREVWQ1RMX1JFQURSUSkgPj4gMTIpOworCWlmIChicC0+bXJycyA9PSAtMSkKKwkJcl9vcmRlciA9ICgoZGV2Y3RsICYgUENJX0VYUF9ERVZDVExfUkVBRFJRKSA+PiAxMik7CisJZWxzZSB7CisJCURQKE5FVElGX01TR19IVywgImZvcmNlIHJlYWQgb3JkZXIgdG8gJWRcbiIsIGJwLT5tcnJzKTsKKwkJcl9vcmRlciA9IGJwLT5tcnJzOworCX0KIAogCWlmIChyX29yZGVyID4gTUFYX1JEX09SRCkgewogCQlEUChORVRJRl9NU0dfSFcsICJyZWFkIG9yZGVyIG9mICVkICBvcmRlciBhZGp1c3RlZCB0byAlZFxuIiwKQEAgLTY0MywxNyArNjU3LDE4IEBACiAJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9VU0RNRFBfVEgsICgweDE4IDw8IHdfb3JkZXIpKTsKIAogCWlmIChDSElQX0lTX0UxSChicCkpIHsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9IQ19NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVVNETV9NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfQ1NETV9NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVFNETV9NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfWFNETV9NUFMsIHdfb3JkZXIrMSk7Ci0JCVJFR19XUihicCwgUFhQMl9SRUdfV1JfUU1fTVBTLCB3X29yZGVyKzEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1RNX01QUywgd19vcmRlcisxKTsKLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9TUkNfTVBTLCB3X29yZGVyKzEpOwotCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0RCR19NUFMsIHdfb3JkZXIrMSk7CisJCXZhbCA9ICgod19vcmRlciA9PSAwKSA/IDIgOiAzKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9IQ19NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVVNETV9NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfQ1NETV9NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfVFNETV9NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfWFNETV9NUFMsIHZhbCk7CisJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfUU1fTVBTLCB2YWwpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX1RNX01QUywgdmFsKTsKKwkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9TUkNfTVBTLCB2YWwpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0RCR19NUFMsIHZhbCk7CiAJCVJFR19XUihicCwgUFhQMl9SRUdfV1JfRE1BRV9NUFMsIDIpOyAvKiBETUFFIGlzIHNwZWNpYWwgKi8KLQkJUkVHX1dSKGJwLCBQWFAyX1JFR19XUl9DRFVfTVBTLCB3X29yZGVyKzEpOworCQlSRUdfV1IoYnAsIFBYUDJfUkVHX1dSX0NEVV9NUFMsIHZhbCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9pbml0X3ZhbHVlcy5oIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdF92YWx1ZXMuaAppbmRleCA5NzU1YmY2Li4xZjIyYzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9pbml0X3ZhbHVlcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfdmFsdWVzLmgKQEAgLTEsNyArMSwyMyBAQAogI2lmbmRlZiBfX0JOWDJYX0lOSVRfVkFMVUVTX0hfXwogI2RlZmluZSBfX0JOWDJYX0lOSVRfVkFMVUVTX0hfXwogCi0vKiBUaGlzIGFycmF5IGNvbnRhaW5zIHRoZSBsaXN0IG9mIG9wZXJhdGlvbnMgbmVlZGVkIHRvIGluaXRpYWxpemUgdGhlIGNoaXAuCisvKiBibngyeF9pbml0X3ZhbHVlcy5oOiBCcm9hZGNvbSBOWDIgMTBHIG5ldHdvcmsgZHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBleGNlcHQgYXMgbm90ZWQgYmVsb3cuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCisgKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKKyAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyAqIGFjY29tcGFueWluZyBpdC4KKyAqCisgKgorICogVGhpcyBhcnJheSBjb250YWlucyB0aGUgbGlzdCBvZiBvcGVyYXRpb25zIG5lZWRlZCB0byBpbml0aWFsaXplIHRoZSBjaGlwLgogICoKICAqIEZvciBlYWNoIGJsb2NrIGluIHRoZSBjaGlwIHRoZXJlIGFyZSB0aHJlZSBpbml0IHN0YWdlczoKICAqIGNvbW1vbiAtIEhXIHVzZWQgYnkgYm90aCBwb3J0cywKQEAgLTQ3LDEyICs2MywxNiBAQAogCXtPUF9XUiwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzEsIDB4MTAxMDAwMDB9LAogCXtPUF9XUiwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzIsIDB4MjAxMDAwMDB9LAogCXtPUF9XUiwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzMsIDB4MzAxMDAwMDB9LAotCXtPUF9aUiwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzQsIDB4NH0sCisJe09QX1pSX0UxLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNCwgMHg0fSwKKwl7T1BfV1JfRTFILCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfNCwgMHg0MDEwMDAwMH0sCisJe09QX1pSX0UxSCwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzUsIDB4M30sCiAJe09QX1dSLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfMCwgMHgxMDAwMDB9LAogCXtPUF9XUiwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzEsIDB4MTIxNDAwMDB9LAogCXtPUF9XUiwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzIsIDB4MjIxNDAwMDB9LAogCXtPUF9XUiwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzMsIDB4MzIxNDAwMDB9LAotCXtPUF9aUiwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzQsIDB4NH0sCisJe09QX1pSX0UxLCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfNCwgMHg0fSwKKwl7T1BfV1JfRTFILCBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfNCwgMHg0MjE0MDAwMH0sCisJe09QX1pSX0UxSCwgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzUsIDB4M30sCiAJe09QX1JELCBQUlNfUkVHX05VTV9PRl9QQUNLRVRTLCAweDB9LAogCXtPUF9SRCwgUFJTX1JFR19OVU1fT0ZfQ0ZDX0ZMVVNIX01FU1NBR0VTLCAweDB9LAogCXtPUF9SRCwgUFJTX1JFR19OVU1fT0ZfVFJBTlNQQVJFTlRfRkxVU0hfTUVTU0FHRVMsIDB4MH0sCkBAIC03MSwxNSArOTEsMTYgQEAKIAl7T1BfV1IsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV8xLCAweDNmfSwKIAl7T1BfV1IsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV8yLCAweDNmfSwKIAl7T1BfV1IsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV8zLCAweDNmfSwKLQl7T1BfV1IsIFBSU19SRUdfUEFDS0VUX1JFR0lPTlNfVFlQRV80LCAweDB9LAorCXtPUF9XUl9FMSwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzQsIDB4MH0sCisJe09QX1dSX0UxSCwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzQsIDB4M2Z9LAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzUsIDB4M2Z9LAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzYsIDB4M2Z9LAogCXtPUF9XUiwgUFJTX1JFR19QQUNLRVRfUkVHSU9OU19UWVBFXzcsIDB4M2Z9LAotI2RlZmluZSBQUlNfQ09NTU9OX0VORCAgICAgICAgICA0NwotI2RlZmluZSBTUkNIX0NPTU1PTl9TVEFSVCAgICAgICA0NworI2RlZmluZSBQUlNfQ09NTU9OX0VORCAgICAgICAgICA1MgorI2RlZmluZSBTUkNIX0NPTU1PTl9TVEFSVCAgICAgICA1MgogCXtPUF9XUl9FMUgsIFNSQ19SRUdfRTFITUZfRU5BQkxFLCAweDF9LAotI2RlZmluZSBTUkNIX0NPTU1PTl9FTkQgICAgICAgICA0OAotI2RlZmluZSBUU0RNX0NPTU1PTl9TVEFSVCAgICAgICA0OAorI2RlZmluZSBTUkNIX0NPTU1PTl9FTkQgICAgICAgICA1MworI2RlZmluZSBUU0RNX0NPTU1PTl9TVEFSVCAgICAgICA1MwogCXtPUF9XUl9FMSwgVFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDQxMX0sCiAJe09QX1dSX0UxSCwgVFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDIxMX0sCiAJe09QX1dSX0UxLCBUU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweDQwMH0sCkBAIC05MiwxMCArMTEzLDE1IEBACiAJe09QX1dSLCBUU0RNX1JFR19DTVBfQ09VTlRFUl9NQVgxLCAweGZmZmZ9LAogCXtPUF9XUiwgVFNETV9SRUdfQ01QX0NPVU5URVJfTUFYMiwgMHhmZmZmfSwKIAl7T1BfV1IsIFRTRE1fUkVHX0NNUF9DT1VOVEVSX01BWDMsIDB4ZmZmZn0sCi0Je09QX1pSLCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAsIDB4Mn0sCisJe09QX1pSX0UxLCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzAsIDB4Mn0sCisJe09QX1dSX0UxSCwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8wLCAweDIwfSwKKwl7T1BfV1JfRTFILCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEsIDB4MH0sCiAJe09QX1dSLCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIsIDB4MzR9LAogCXtPUF9XUiwgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8zLCAweDM1fSwKLQl7T1BfWlIsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfNCwgMHg3Y30sCisJe09QX1pSX0UxLCBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzQsIDB4N2N9LAorCXtPUF9aUl9FMUgsIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfNCwgMHgxY30sCisJe09QX1dSX0UxSCwgVFNETV9SRUdfQUdHX0lOVF9UXzAsIDB4MX0sCisJe09QX1pSX0UxSCwgVFNETV9SRUdfQUdHX0lOVF9UXzEsIDB4NWZ9LAogCXtPUF9XUiwgVFNETV9SRUdfRU5BQkxFX0lOMSwgMHg3ZmZmZmZmfSwKIAl7T1BfV1IsIFRTRE1fUkVHX0VOQUJMRV9JTjIsIDB4M2Z9LAogCXtPUF9XUiwgVFNETV9SRUdfRU5BQkxFX09VVDEsIDB4N2ZmZmZmZn0sCkBAIC0xMTgsOCArMTQ0LDggQEAKIAl7T1BfV1JfQVNJQywgVFNETV9SRUdfVElNRVJfVElDSywgMHgzZTh9LAogCXtPUF9XUl9FTVVMLCBUU0RNX1JFR19USU1FUl9USUNLLCAweDF9LAogCXtPUF9XUl9GUEdBLCBUU0RNX1JFR19USU1FUl9USUNLLCAweGF9LAotI2RlZmluZSBUU0RNX0NPTU1PTl9FTkQgICAgICAgICA4NgotI2RlZmluZSBUQ01fQ09NTU9OX1NUQVJUICAgICAgICA4NgorI2RlZmluZSBUU0RNX0NPTU1PTl9FTkQgICAgICAgICA5NgorI2RlZmluZSBUQ01fQ09NTU9OX1NUQVJUICAgICAgICA5NgogCXtPUF9XUiwgVENNX1JFR19YWF9NQVhfTExfU1osIDB4MjB9LAogCXtPUF9XUiwgVENNX1JFR19YWF9PVkZMX0VWTlRfSUQsIDB4MzJ9LAogCXtPUF9XUiwgVENNX1JFR19UUU1fVENNX0hEUl9QLCAweDIxNTAwMjB9LApAQCAtMTI5LDEwICsxNTUsMTYgQEAKIAl7T1BfV1IsIFRDTV9SRUdfRVJSX0VWTlRfSUQsIDB4MzN9LAogCXtPUF9XUiwgVENNX1JFR19FWFBSX0VWTlRfSUQsIDB4MzB9LAogCXtPUF9XUiwgVENNX1JFR19TVE9QX0VWTlRfSUQsIDB4MzF9LAotCXtPUF9XUiwgVENNX1JFR19QUlNfV0VJR0hULCAweDR9LAotCXtPUF9XUiwgVENNX1JFR19QQkZfV0VJR0hULCAweDV9LAorCXtPUF9XUiwgVENNX1JFR19TVE9STV9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBUQ01fUkVHX1BSU19XRUlHSFQsIDB4NX0sCisJe09QX1dSLCBUQ01fUkVHX1BCRl9XRUlHSFQsIDB4Nn0sCisJe09QX1dSLCBUQ01fUkVHX1VTRU1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVENNX1JFR19DU0VNX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIFRDTV9SRUdfQ1BfV0VJR0hULCAweDB9LAotCXtPUF9XUiwgVENNX1JFR19UU0RNX1dFSUdIVCwgMHg0fSwKKwl7T1BfV1IsIFRDTV9SRUdfVFNETV9XRUlHSFQsIDB4NX0sCisJe09QX1dSLCBUQ01fUkVHX1RRTV9QX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFRDTV9SRUdfVFFNX1NfV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgVENNX1JFR19UTV9XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBUQ01fUkVHX1RDTV9UUU1fVVNFX1EsIDB4MX0sCiAJe09QX1dSLCBUQ01fUkVHX0dSX0FSQl9UWVBFLCAweDF9LAogCXtPUF9XUiwgVENNX1JFR19HUl9MRDBfUFIsIDB4MX0sCkBAIC0xNDksNyArMTgxLDkgQEAKIAl7T1BfV1IsIFRDTV9SRUdfTl9TTV9DVFhfTERfMSwgMHg3fSwKIAl7T1BfV1IsIFRDTV9SRUdfTl9TTV9DVFhfTERfMiwgMHg4fSwKIAl7T1BfV1IsIFRDTV9SRUdfTl9TTV9DVFhfTERfMywgMHg4fSwKLQl7T1BfWlIsIFRDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHg0fSwKKwl7T1BfWlJfRTEsIFRDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHg0fSwKKwl7T1BfV1JfRTFILCBUQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4MX0sCisJe09QX1pSX0UxSCwgVENNX1JFR19OX1NNX0NUWF9MRF81LCAweDN9LAogCXtPUF9XUiwgVENNX1JFR19UQ01fUkVHMF9TWiwgMHg2fSwKIAl7T1BfV1JfRTEsIFRDTV9SRUdfUEhZU19RTlVNMF8wLCAweGR9LAogCXtPUF9XUl9FMSwgVENNX1JFR19QSFlTX1FOVU0wXzEsIDB4MmR9LApAQCAtMTc1LDc1ICsyMDksNzUgQEAKIAl7T1BfV1IsIFRDTV9SRUdfQ0RVX1NNX1dSX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBUQ01fUkVHX0NEVV9TTV9SRF9JRkVOLCAweDF9LAogCXtPUF9XUiwgVENNX1JFR19UQ01fQ0ZDX0lGRU4sIDB4MX0sCi0jZGVmaW5lIFRDTV9DT01NT05fRU5EICAgICAgICAgIDE0MQotI2RlZmluZSBUQ01fRlVOQzBfU1RBUlQgICAgICAgICAxNDEKKyNkZWZpbmUgVENNX0NPTU1PTl9FTkQgICAgICAgICAgMTU5CisjZGVmaW5lIFRDTV9GVU5DMF9TVEFSVCAgICAgICAgIDE1OQogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8wLCAweGR9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8wLCAweDd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8wLCAweDd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18wLCAweDd9LAotI2RlZmluZSBUQ01fRlVOQzBfRU5EICAgICAgICAgICAxNDUKLSNkZWZpbmUgVENNX0ZVTkMxX1NUQVJUICAgICAgICAgMTQ1CisjZGVmaW5lIFRDTV9GVU5DMF9FTkQgICAgICAgICAgIDE2MworI2RlZmluZSBUQ01fRlVOQzFfU1RBUlQgICAgICAgICAxNjMKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHgyZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzEsIDB4Mjd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8xLCAweDI3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgyN30sCi0jZGVmaW5lIFRDTV9GVU5DMV9FTkQgICAgICAgICAgIDE0OQotI2RlZmluZSBUQ01fRlVOQzJfU1RBUlQgICAgICAgICAxNDkKKyNkZWZpbmUgVENNX0ZVTkMxX0VORCAgICAgICAgICAgMTY3CisjZGVmaW5lIFRDTV9GVU5DMl9TVEFSVCAgICAgICAgIDE2NwogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8wLCAweDFkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHgxN30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzAsIDB4MTd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18wLCAweDE3fSwKLSNkZWZpbmUgVENNX0ZVTkMyX0VORCAgICAgICAgICAgMTUzCi0jZGVmaW5lIFRDTV9GVU5DM19TVEFSVCAgICAgICAgIDE1MworI2RlZmluZSBUQ01fRlVOQzJfRU5EICAgICAgICAgICAxNzEKKyNkZWZpbmUgVENNX0ZVTkMzX1NUQVJUICAgICAgICAgMTcxCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzEsIDB4M2R9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8xLCAweDM3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgzN30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzEsIDB4Mzd9LAotI2RlZmluZSBUQ01fRlVOQzNfRU5EICAgICAgICAgICAxNTcKLSNkZWZpbmUgVENNX0ZVTkM0X1NUQVJUICAgICAgICAgMTU3CisjZGVmaW5lIFRDTV9GVU5DM19FTkQgICAgICAgICAgIDE3NQorI2RlZmluZSBUQ01fRlVOQzRfU1RBUlQgICAgICAgICAxNzUKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMCwgMHg0ZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzAsIDB4NDd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8wLCAweDQ3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHg0N30sCi0jZGVmaW5lIFRDTV9GVU5DNF9FTkQgICAgICAgICAgIDE2MQotI2RlZmluZSBUQ01fRlVOQzVfU1RBUlQgICAgICAgICAxNjEKKyNkZWZpbmUgVENNX0ZVTkM0X0VORCAgICAgICAgICAgMTc5CisjZGVmaW5lIFRDTV9GVU5DNV9TVEFSVCAgICAgICAgIDE3OQogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMF8xLCAweDZkfSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHg2N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0yXzEsIDB4Njd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNM18xLCAweDY3fSwKLSNkZWZpbmUgVENNX0ZVTkM1X0VORCAgICAgICAgICAgMTY1Ci0jZGVmaW5lIFRDTV9GVU5DNl9TVEFSVCAgICAgICAgIDE2NQorI2RlZmluZSBUQ01fRlVOQzVfRU5EICAgICAgICAgICAxODMKKyNkZWZpbmUgVENNX0ZVTkM2X1NUQVJUICAgICAgICAgMTgzCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0wXzAsIDB4NWR9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMV8wLCAweDU3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHg1N30sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0zXzAsIDB4NTd9LAotI2RlZmluZSBUQ01fRlVOQzZfRU5EICAgICAgICAgICAxNjkKLSNkZWZpbmUgVENNX0ZVTkM3X1NUQVJUICAgICAgICAgMTY5CisjZGVmaW5lIFRDTV9GVU5DNl9FTkQgICAgICAgICAgIDE4NworI2RlZmluZSBUQ01fRlVOQzdfU1RBUlQgICAgICAgICAxODcKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTBfMSwgMHg3ZH0sCiAJe09QX1dSX0UxSCwgVENNX1JFR19QSFlTX1FOVU0xXzEsIDB4Nzd9LAogCXtPUF9XUl9FMUgsIFRDTV9SRUdfUEhZU19RTlVNMl8xLCAweDc3fSwKIAl7T1BfV1JfRTFILCBUQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHg3N30sCi0jZGVmaW5lIFRDTV9GVU5DN19FTkQgICAgICAgICAgIDE3MwotI2RlZmluZSBCUkIxX0NPTU1PTl9TVEFSVCAgICAgICAxNzMKKyNkZWZpbmUgVENNX0ZVTkM3X0VORCAgICAgICAgICAgMTkxCisjZGVmaW5lIEJSQjFfQ09NTU9OX1NUQVJUICAgICAgIDE5MQogCXtPUF9TVywgQlJCMV9SRUdfTExfUkFNLCAweDIwMDAwMjB9LAogCXtPUF9XUiwgQlJCMV9SRUdfU09GVF9SRVNFVCwgMHgxfSwKIAl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9GVUxMX0NZQ0xFU180LCAweDB9LAogCXtPUF9TVywgQlJCMV9SRUdfRlJFRV9MSVNUX1BSU19DUkRULCAweDMwMjIwfSwKIAl7T1BfV1IsIEJSQjFfUkVHX1NPRlRfUkVTRVQsIDB4MH0sCi0jZGVmaW5lIEJSQjFfQ09NTU9OX0VORCAgICAgICAgIDE3OAotI2RlZmluZSBCUkIxX1BPUlQwX1NUQVJUICAgICAgICAxNzgKKyNkZWZpbmUgQlJCMV9DT01NT05fRU5EICAgICAgICAgMTk2CisjZGVmaW5lIEJSQjFfUE9SVDBfU1RBUlQgICAgICAgIDE5NgogCXtPUF9XUl9FMSwgQlJCMV9SRUdfUEFVU0VfTE9XX1RIUkVTSE9MRF8wLCAweGI4fSwKIAl7T1BfV1JfRTEsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzAsIDB4MTE0fSwKIAl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9QQVVTRV9DWUNMRVNfMCwgMHgwfSwKIAl7T1BfUkQsIEJSQjFfUkVHX05VTV9PRl9GVUxMX0NZQ0xFU18wLCAweDB9LAotI2RlZmluZSBCUkIxX1BPUlQwX0VORCAgICAgICAgICAxODIKLSNkZWZpbmUgQlJCMV9QT1JUMV9TVEFSVCAgICAgICAgMTgyCisjZGVmaW5lIEJSQjFfUE9SVDBfRU5EICAgICAgICAgIDIwMAorI2RlZmluZSBCUkIxX1BPUlQxX1NUQVJUICAgICAgICAyMDAKIAl7T1BfV1JfRTEsIEJSQjFfUkVHX1BBVVNFX0xPV19USFJFU0hPTERfMSwgMHhiOH0sCiAJe09QX1dSX0UxLCBCUkIxX1JFR19QQVVTRV9ISUdIX1RIUkVTSE9MRF8xLCAweDExNH0sCiAJe09QX1JELCBCUkIxX1JFR19OVU1fT0ZfUEFVU0VfQ1lDTEVTXzEsIDB4MH0sCiAJe09QX1JELCBCUkIxX1JFR19OVU1fT0ZfRlVMTF9DWUNMRVNfMSwgMHgwfSwKLSNkZWZpbmUgQlJCMV9QT1JUMV9FTkQgICAgICAgICAgMTg2Ci0jZGVmaW5lIFRTRU1fQ09NTU9OX1NUQVJUICAgICAgIDE4NgorI2RlZmluZSBCUkIxX1BPUlQxX0VORCAgICAgICAgICAyMDQKKyNkZWZpbmUgVFNFTV9DT01NT05fU1RBUlQgICAgICAgMjA0CiAJe09QX1JELCBUU0VNX1JFR19NU0dfTlVNX0ZJQzAsIDB4MH0sCiAJe09QX1JELCBUU0VNX1JFR19NU0dfTlVNX0ZJQzEsIDB4MH0sCiAJe09QX1JELCBUU0VNX1JFR19NU0dfTlVNX0ZPQzAsIDB4MH0sCkBAIC0zMDMsMTQzICszMzcsMTY2IEBACiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGEwMjAsIDB4Yzh9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFjMTgsIDB4NH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGEwMDAsIDB4Mn0sCi0Je09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwLCAweDJ9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFjMTAsIDB4Mn0sCiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFhZDAsIDB4MH0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwLCAweDJ9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYWQ4LCAweDR9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwOCwgMHgyfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2IyOCwgMHg2fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzY3OCwgMHg2fSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MTAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4Mn0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM2NzAsIDB4Mn0sCiAJe09QX1NXX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWZiMCwgMHg0MDIyNH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDgsIDB4NH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4Mn0sCiAJe09QX1NXX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGNiMCwgMHg4MDIyOH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDgsIDB4NH0sCisJe09QX1pQX0UxLCBUU0VNX1JFR19JTlRfVEFCTEUsIDB4OTMwMDAwfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAxOCwgMHg0fSwKLQl7T1BfWlBfRTEsIFRTRU1fUkVHX0lOVF9UQUJMRSwgMHg5NDAwMDB9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDI4LCAweDR9LAogCXtPUF9XUl82NF9FMSwgVFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjAsIDB4MTQwMjMwfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAyOCwgMHg0fSwKKwl7T1BfWlBfRTEsIFRTRU1fUkVHX1BSQU0sIDB4MzI0ZjAwMDB9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDM4LCAweDR9LAotCXtPUF9aUF9FMSwgVFNFTV9SRUdfUFJBTSwgMHgzMGIxMDAwMH0sCisJe09QX1pQX0UxLCBUU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDMzMjUwYzk0fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0OCwgMHg0fSwKLQl7T1BfWlBfRTEsIFRTRU1fUkVHX1BSQU0gKyAweDgwMDAsIDB4MzNjNTBjMmR9LAorCXtPUF9aUF9FMSwgVFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4ZTRkMTk1ZX0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNTgsIDB4NH0sCi0Je09QX1pQX0UxLCBUU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHhiYzYxOTFmfSwKKwl7T1BfV1JfNjRfRTEsIFRTRU1fUkVHX1BSQU0gKyAweDExZTAwLCAweDVjNDAwMjMyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA2OCwgMHg0fSwKLQl7T1BfV1JfNjRfRTEsIFRTRU1fUkVHX1BSQU0gKyAweDExN2YwLCAweDVkMDIwMjMyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA3OCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwOCwgMHgyfSwKLQl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjE0MCwgMHgyMDAyMjR9LAotCXtPUF9aUF9FMUgsIFRTRU1fUkVHX0lOVF9UQUJMRSwgMHg5NjAwMDB9LAotCXtPUF9XUl82NF9FMUgsIFRTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzYwLCAweDE0MDI0NH0sCi0Je09QX1pQX0UxSCwgVFNFTV9SRUdfUFJBTSwgMHgzMGNjMDAwMH0sCi0Je09QX1pQX0UxSCwgVFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzM2RmMGMzM30sCi0Je09QX1pQX0UxSCwgVFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4ZGNlMTkyYn0sCi0Je09QX1dSXzY0X0UxSCwgVFNFTV9SRUdfUFJBTSArIDB4MTFjNzAsIDB4NWM3MjAyNDZ9LAotI2RlZmluZSBUU0VNX0NPTU1PTl9FTkQgICAgICAgICAyNzYKLSNkZWZpbmUgVFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMjc2CisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYyYzAsIDB4MjAwMjI0fSwKKwl7T1BfWlBfRTFILCBUU0VNX1JFR19JTlRfVEFCTEUsIDB4OWIwMDAwfSwKKwl7T1BfV1JfNjRfRTFILCBUU0VNX1JFR19JTlRfVEFCTEUgKyAweDM5OCwgMHhkMDI0NH0sCisJe09QX1pQX0UxSCwgVFNFTV9SRUdfUFJBTSwgMHgzMjVlMDAwMH0sCisJe09QX1pQX0UxSCwgVFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzNTk2MGM5OH0sCisJe09QX1pQX0UxSCwgVFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4MWFlYTE5ZmV9LAorCXtPUF9XUl82NF9FMUgsIFRTRU1fUkVHX1BSQU0gKyAweDE0M2QwLCAweDU3ODYwMjQ2fSwKKyNkZWZpbmUgVFNFTV9DT01NT05fRU5EICAgICAgICAgMjk3CisjZGVmaW5lIFRTRU1fUE9SVDBfU1RBUlQgICAgICAgIDI5NwogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIyYzgsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMDAwLCAweDE2Y30sCi0Je09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHhmY30sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHgxNmN9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhiMDAwLCAweDI4fSwKIAl7T1BfV1JfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjYwLCAweDB9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhiMTQwLCAweGN9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0MDAsIDB4YX0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyYzAsIDB4MTJ9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE0NTAsIDB4Nn0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzNTAsIDB4ZmF9LAotCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MDAsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzNTAsIDB4NjR9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE1MDAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgxMDgsIDB4Mn0sCisJe09QX1NXX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwMCArIDB4OCwgMHg1MDIzNH0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwMCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTU3MCwgMHgxMn0sCi0Je09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OWMwLCAweGJlfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5YzAsIDB4NGN9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMCwgMHgyfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MjAsIDB4ZX0sCi0Je09QX1NXX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWZiMCwgMHgyMDIzNH0sCisJe09QX1NXX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWZiMCwgMHgyMDIzOX0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjkwOCwgMHgyfSwKLSNkZWZpbmUgVFNFTV9QT1JUMF9FTkQgICAgICAgICAgMjk0Ci0jZGVmaW5lIFRTRU1fUE9SVDFfU1RBUlQgICAgICAgIDI5NAorI2RlZmluZSBUU0VNX1BPUlQwX0VORCAgICAgICAgICAzMTcKKyNkZWZpbmUgVFNFTV9QT1JUMV9TVEFSVCAgICAgICAgMzE3CiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjM0OCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI1YjAsIDB4MTZjfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0M2YwLCAweGZjfSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0NWIwLCAweDE2Y30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGIwYTAsIDB4Mjh9LAogCXtPUF9XUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiNjQsIDB4MH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGIxNzAsIDB4Y30sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQyOCwgMHhhfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMwOCwgMHgxMn0sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQ2OCwgMHg2fSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzczOCwgMHhmYX0sCi0Je09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUzOCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzRlMCwgMHg2NH0sCisJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUzOCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODExMCwgMHgyfSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTM4ICsgMHg4LCAweDUwMjNifSwKKwl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTM4ICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNWI4LCAweDEyfSwKLQl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHhjYjgsIDB4YmV9LAorCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGFmMCwgMHg0Y30sCiAJe09QX1pSX0UxLCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODA4LCAweDJ9LAogCXtPUF9aUl9FMSwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDg1OCwgMHhlfSwKLQl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmI4LCAweDIwMjM2fSwKKwl7T1BfU1dfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZmI4LCAweDIwMjQwfSwKIAl7T1BfWlJfRTEsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTEwLCAweDJ9LAotI2RlZmluZSBUU0VNX1BPUlQxX0VORCAgICAgICAgICAzMTIKLSNkZWZpbmUgVFNFTV9GVU5DMF9TVEFSVCAgICAgICAgMzEyCisjZGVmaW5lIFRTRU1fUE9SVDFfRU5EICAgICAgICAgIDMzNworI2RlZmluZSBUU0VNX0ZVTkMwX1NUQVJUICAgICAgICAzMzcKIAl7T1BfV1JfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmI2MCwgMHgwfSwKLQl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHhlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHgyfSwKKwl7T1BfU1dfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCArIDB4OCwgMHg1MDI0OH0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAgKyAweDFjLCAweDd9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMWMwLCAweDh9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDgwLCAweDEyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHgyfSwKLSNkZWZpbmUgVFNFTV9GVU5DMF9FTkQgICAgICAgICAgMzE4Ci0jZGVmaW5lIFRTRU1fRlVOQzFfU1RBUlQgICAgICAgIDMxOAorI2RlZmluZSBUU0VNX0ZVTkMwX0VORCAgICAgICAgICAzNDUKKyNkZWZpbmUgVFNFTV9GVU5DMV9TVEFSVCAgICAgICAgMzQ1CiAJe09QX1dSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJiNjQsIDB4MH0sCi0Je09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMzgsIDB4ZX0sCisJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMzgsIDB4Mn0sCisJe09QX1NXX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMzggKyAweDgsIDB4NTAyNGR9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDM4ICsgMHgxYywgMHg3fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzFlMCwgMHg4fSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAxMCwgMHgyfSwKIAl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTBjOCwgMHgxMn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDgsIDB4Mn0sCi0jZGVmaW5lIFRTRU1fRlVOQzFfRU5EICAgICAgICAgIDMyNAotI2RlZmluZSBUU0VNX0ZVTkMyX1NUQVJUICAgICAgICAzMjQKKyNkZWZpbmUgVFNFTV9GVU5DMV9FTkQgICAgICAgICAgMzUzCisjZGVmaW5lIFRTRU1fRlVOQzJfU1RBUlQgICAgICAgIDM1MwogCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjY4LCAweDB9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDcwLCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDcwLCAweDJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDcwICsgMHg4LCAweDUwMjUyfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA3MCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMDAsIDB4OH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMjAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxMTAsIDB4MTJ9LAotCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDEwLCAweDIwMjQ4fSwKLSNkZWZpbmUgVFNFTV9GVU5DMl9FTkQgICAgICAgICAgMzMwCi0jZGVmaW5lIFRTRU1fRlVOQzNfU1RBUlQgICAgICAgIDMzMAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDEwLCAweDIwMjU3fSwKKyNkZWZpbmUgVFNFTV9GVU5DMl9FTkQgICAgICAgICAgMzYxCisjZGVmaW5lIFRTRU1fRlVOQzNfU1RBUlQgICAgICAgIDM2MQogCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjZjLCAweDB9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGE4LCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGE4LCAweDJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGE4ICsgMHg4LCAweDUwMjU5fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzBhOCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMjAsIDB4OH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMzAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxNTgsIDB4MTJ9LAotCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDE4LCAweDIwMjRhfSwKLSNkZWZpbmUgVFNFTV9GVU5DM19FTkQgICAgICAgICAgMzM2Ci0jZGVmaW5lIFRTRU1fRlVOQzRfU1RBUlQgICAgICAgIDMzNgorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDE4LCAweDIwMjVlfSwKKyNkZWZpbmUgVFNFTV9GVU5DM19FTkQgICAgICAgICAgMzY5CisjZGVmaW5lIFRTRU1fRlVOQzRfU1RBUlQgICAgICAgIDM2OQogCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjcwLCAweDB9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGUwLCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGUwLCAweDJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMGUwICsgMHg4LCAweDUwMjYwfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzBlMCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyNDAsIDB4OH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNDAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxYTAsIDB4MTJ9LAotCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDIwLCAweDIwMjRjfSwKLSNkZWZpbmUgVFNFTV9GVU5DNF9FTkQgICAgICAgICAgMzQyCi0jZGVmaW5lIFRTRU1fRlVOQzVfU1RBUlQgICAgICAgIDM0MgorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDIwLCAweDIwMjY1fSwKKyNkZWZpbmUgVFNFTV9GVU5DNF9FTkQgICAgICAgICAgMzc3CisjZGVmaW5lIFRTRU1fRlVOQzVfU1RBUlQgICAgICAgIDM3NwogCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjc0LCAweDB9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTE4LCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTE4LCAweDJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTE4ICsgMHg4LCAweDUwMjY3fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzExOCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyNjAsIDB4OH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNTAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxZTgsIDB4MTJ9LAotCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDI4LCAweDIwMjRlfSwKLSNkZWZpbmUgVFNFTV9GVU5DNV9FTkQgICAgICAgICAgMzQ4Ci0jZGVmaW5lIFRTRU1fRlVOQzZfU1RBUlQgICAgICAgIDM0OAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDI4LCAweDIwMjZjfSwKKyNkZWZpbmUgVFNFTV9GVU5DNV9FTkQgICAgICAgICAgMzg1CisjZGVmaW5lIFRTRU1fRlVOQzZfU1RBUlQgICAgICAgIDM4NQogCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjc4LCAweDB9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTUwLCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTUwLCAweDJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTUwICsgMHg4LCAweDUwMjZlfSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE1MCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyODAsIDB4OH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNjAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyMzAsIDB4MTJ9LAotCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDMwLCAweDIwMjUwfSwKLSNkZWZpbmUgVFNFTV9GVU5DNl9FTkQgICAgICAgICAgMzU0Ci0jZGVmaW5lIFRTRU1fRlVOQzdfU1RBUlQgICAgICAgIDM1NAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDMwLCAweDIwMjczfSwKKyNkZWZpbmUgVFNFTV9GVU5DNl9FTkQgICAgICAgICAgMzkzCisjZGVmaW5lIFRTRU1fRlVOQzdfU1RBUlQgICAgICAgIDM5MwogCXtPUF9XUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjdjLCAweDB9LAotCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTg4LCAweGV9LAorCXtPUF9aUl9FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTg4LCAweDJ9LAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTg4ICsgMHg4LCAweDUwMjc1fSwKKwl7T1BfWlJfRTFILCBUU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzE4OCArIDB4MWMsIDB4N30sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyYTAsIDB4OH0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNzAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgVFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyNzgsIDB4MTJ9LAotCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDM4LCAweDIwMjUyfSwKLSNkZWZpbmUgVFNFTV9GVU5DN19FTkQgICAgICAgICAgMzYwCi0jZGVmaW5lIE1JU0NfQ09NTU9OX1NUQVJUICAgICAgIDM2MAorCXtPUF9TV19FMUgsIFRTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDM4LCAweDIwMjdhfSwKKyNkZWZpbmUgVFNFTV9GVU5DN19FTkQgICAgICAgICAgNDAxCisjZGVmaW5lIE1JU0NfQ09NTU9OX1NUQVJUICAgICAgIDQwMQogCXtPUF9XUl9FMSwgTUlTQ19SRUdfR1JDX1RJTUVPVVRfRU4sIDB4MX0sCiAJe09QX1dSLCBNSVNDX1JFR19QTExfU1RPUk1fQ1RSTF8xLCAweDcxZDI5MTF9LAogCXtPUF9XUiwgTUlTQ19SRUdfUExMX1NUT1JNX0NUUkxfMiwgMHgwfSwKQEAgLTQ0NywzOSArNTA0LDM5IEBACiAJe09QX1dSLCBNSVNDX1JFR19QTExfU1RPUk1fQ1RSTF80LCAweDB9LAogCXtPUF9XUiwgTUlTQ19SRUdfTENQTExfQ1RSTF8xLCAweDIwOX0sCiAJe09QX1dSX0UxLCBNSVNDX1JFR19TUElPLCAweGZmMDAwMDAwfSwKLSNkZWZpbmUgTUlTQ19DT01NT05fRU5EICAgICAgICAgMzY3Ci0jZGVmaW5lIE1JU0NfRlVOQzBfU1RBUlQgICAgICAgIDM2NworI2RlZmluZSBNSVNDX0NPTU1PTl9FTkQgICAgICAgICA0MDgKKyNkZWZpbmUgTUlTQ19GVU5DMF9TVEFSVCAgICAgICAgNDA4CiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfTklHX1dPTF9QMCwgMHgwfSwKLSNkZWZpbmUgTUlTQ19GVU5DMF9FTkQgICAgICAgICAgMzY4Ci0jZGVmaW5lIE1JU0NfRlVOQzFfU1RBUlQgICAgICAgIDM2OAorI2RlZmluZSBNSVNDX0ZVTkMwX0VORCAgICAgICAgICA0MDkKKyNkZWZpbmUgTUlTQ19GVU5DMV9TVEFSVCAgICAgICAgNDA5CiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfTklHX1dPTF9QMSwgMHgwfSwKLSNkZWZpbmUgTUlTQ19GVU5DMV9FTkQgICAgICAgICAgMzY5Ci0jZGVmaW5lIE1JU0NfRlVOQzJfU1RBUlQgICAgICAgIDM2OQorI2RlZmluZSBNSVNDX0ZVTkMxX0VORCAgICAgICAgICA0MTAKKyNkZWZpbmUgTUlTQ19GVU5DMl9TVEFSVCAgICAgICAgNDEwCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfTklHX1dPTF9QMCwgMHgwfSwKLSNkZWZpbmUgTUlTQ19GVU5DMl9FTkQgICAgICAgICAgMzcwCi0jZGVmaW5lIE1JU0NfRlVOQzNfU1RBUlQgICAgICAgIDM3MAorI2RlZmluZSBNSVNDX0ZVTkMyX0VORCAgICAgICAgICA0MTEKKyNkZWZpbmUgTUlTQ19GVU5DM19TVEFSVCAgICAgICAgNDExCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfTklHX1dPTF9QMSwgMHgwfSwKLSNkZWZpbmUgTUlTQ19GVU5DM19FTkQgICAgICAgICAgMzcxCi0jZGVmaW5lIE1JU0NfRlVOQzRfU1RBUlQgICAgICAgIDM3MQorI2RlZmluZSBNSVNDX0ZVTkMzX0VORCAgICAgICAgICA0MTIKKyNkZWZpbmUgTUlTQ19GVU5DNF9TVEFSVCAgICAgICAgNDEyCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfTklHX1dPTF9QMCwgMHgwfSwKLSNkZWZpbmUgTUlTQ19GVU5DNF9FTkQgICAgICAgICAgMzcyCi0jZGVmaW5lIE1JU0NfRlVOQzVfU1RBUlQgICAgICAgIDM3MgorI2RlZmluZSBNSVNDX0ZVTkM0X0VORCAgICAgICAgICA0MTMKKyNkZWZpbmUgTUlTQ19GVU5DNV9TVEFSVCAgICAgICAgNDEzCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfTklHX1dPTF9QMSwgMHgwfSwKLSNkZWZpbmUgTUlTQ19GVU5DNV9FTkQgICAgICAgICAgMzczCi0jZGVmaW5lIE1JU0NfRlVOQzZfU1RBUlQgICAgICAgIDM3MworI2RlZmluZSBNSVNDX0ZVTkM1X0VORCAgICAgICAgICA0MTQKKyNkZWZpbmUgTUlTQ19GVU5DNl9TVEFSVCAgICAgICAgNDE0CiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfTklHX1dPTF9QMCwgMHgwfSwKLSNkZWZpbmUgTUlTQ19GVU5DNl9FTkQgICAgICAgICAgMzc0Ci0jZGVmaW5lIE1JU0NfRlVOQzdfU1RBUlQgICAgICAgIDM3NAorI2RlZmluZSBNSVNDX0ZVTkM2X0VORCAgICAgICAgICA0MTUKKyNkZWZpbmUgTUlTQ19GVU5DN19TVEFSVCAgICAgICAgNDE1CiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfTklHX1dPTF9QMSwgMHgwfSwKLSNkZWZpbmUgTUlTQ19GVU5DN19FTkQgICAgICAgICAgMzc1Ci0jZGVmaW5lIE5JR19DT01NT05fU1RBUlQgICAgICAgIDM3NQorI2RlZmluZSBNSVNDX0ZVTkM3X0VORCAgICAgICAgICA0MTYKKyNkZWZpbmUgTklHX0NPTU1PTl9TVEFSVCAgICAgICAgNDE2CiAJe09QX1dSLCBOSUdfUkVHX1BCRl9MQl9JTl9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfUFJTX1JFUV9JTl9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfRUdSRVNTX0RFQlVHX0lOX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19CUkJfTEJfT1VUX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19QUlNfRU9QX09VVF9FTiwgMHgxfSwKLSNkZWZpbmUgTklHX0NPTU1PTl9FTkQgICAgICAgICAgMzgwCi0jZGVmaW5lIE5JR19QT1JUMF9TVEFSVCAgICAgICAgIDM4MAorI2RlZmluZSBOSUdfQ09NTU9OX0VORCAgICAgICAgICA0MjEKKyNkZWZpbmUgTklHX1BPUlQwX1NUQVJUICAgICAgICAgNDIxCiAJe09QX1dSLCBOSUdfUkVHX0xMSDBfQ01fSEVBREVSLCAweDMwMDAwMH0sCiAJe09QX1dSLCBOSUdfUkVHX0xMSDBfRVZFTlRfSUQsIDB4Mjh9LAogCXtPUF9XUiwgTklHX1JFR19MTEgwX0VSUk9SX01BU0ssIDB4MH0sCkBAIC00OTIsOCArNTQ5LDggQEAKIAl7T1BfV1IsIE5JR19SRUdfRUdSRVNTX1BCRjBfSU5fRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX0JSQjBfT1VUX0VOLCAweDF9LAogCXtPUF9XUiwgTklHX1JFR19YQ00wX09VVF9FTiwgMHgxfSwKLSNkZWZpbmUgTklHX1BPUlQwX0VORCAgICAgICAgICAgMzkyCi0jZGVmaW5lIE5JR19QT1JUMV9TVEFSVCAgICAgICAgIDM5MgorI2RlZmluZSBOSUdfUE9SVDBfRU5EICAgICAgICAgICA0MzMKKyNkZWZpbmUgTklHX1BPUlQxX1NUQVJUICAgICAgICAgNDMzCiAJe09QX1dSLCBOSUdfUkVHX0xMSDFfQ01fSEVBREVSLCAweDMwMDAwMH0sCiAJe09QX1dSLCBOSUdfUkVHX0xMSDFfRVZFTlRfSUQsIDB4Mjh9LAogCXtPUF9XUiwgTklHX1JFR19MTEgxX0VSUk9SX01BU0ssIDB4MH0sCkBAIC01MDYsMTEgKzU2MywxMSBAQAogCXtPUF9XUiwgTklHX1JFR19FR1JFU1NfUEJGMV9JTl9FTiwgMHgxfSwKIAl7T1BfV1IsIE5JR19SRUdfQlJCMV9PVVRfRU4sIDB4MX0sCiAJe09QX1dSLCBOSUdfUkVHX1hDTTFfT1VUX0VOLCAweDF9LAotI2RlZmluZSBOSUdfUE9SVDFfRU5EICAgICAgICAgICA0MDQKLSNkZWZpbmUgVVBCX0NPTU1PTl9TVEFSVCAgICAgICAgNDA0CisjZGVmaW5lIE5JR19QT1JUMV9FTkQgICAgICAgICAgIDQ0NQorI2RlZmluZSBVUEJfQ09NTU9OX1NUQVJUICAgICAgICA0NDUKIAl7T1BfV1IsIEdSQ0JBU0VfVVBCICsgUEJfUkVHX0NPTlRST0wsIDB4MjB9LAotI2RlZmluZSBVUEJfQ09NTU9OX0VORCAgICAgICAgICA0MDUKLSNkZWZpbmUgQ1NETV9DT01NT05fU1RBUlQgICAgICAgNDA1CisjZGVmaW5lIFVQQl9DT01NT05fRU5EICAgICAgICAgIDQ0NgorI2RlZmluZSBDU0RNX0NPTU1PTl9TVEFSVCAgICAgICA0NDYKIAl7T1BfV1JfRTEsIENTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHhhMTF9LAogCXtPUF9XUl9FMUgsIENTRE1fUkVHX0NGQ19SU1BfU1RBUlRfQUREUiwgMHgyMTF9LAogCXtPUF9XUl9FMSwgQ1NETV9SRUdfQ01QX0NPVU5URVJfU1RBUlRfQUREUiwgMHhhMDB9LApAQCAtNTUwLDggKzYwNyw4IEBACiAJe09QX1dSX0FTSUMsIENTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4M2U4fSwKIAl7T1BfV1JfRU1VTCwgQ1NETV9SRUdfVElNRVJfVElDSywgMHgxfSwKIAl7T1BfV1JfRlBHQSwgQ1NETV9SRUdfVElNRVJfVElDSywgMHhhfSwKLSNkZWZpbmUgQ1NETV9DT01NT05fRU5EICAgICAgICAgNDQ0Ci0jZGVmaW5lIFVTRE1fQ09NTU9OX1NUQVJUICAgICAgIDQ0NAorI2RlZmluZSBDU0RNX0NPTU1PTl9FTkQgICAgICAgICA0ODUKKyNkZWZpbmUgVVNETV9DT01NT05fU1RBUlQgICAgICAgNDg1CiAJe09QX1dSX0UxLCBVU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4YTExfSwKIAl7T1BfV1JfRTFILCBVU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIsIDB4NDExfSwKIAl7T1BfV1JfRTEsIFVTRE1fUkVHX0NNUF9DT1VOVEVSX1NUQVJUX0FERFIsIDB4YTAwfSwKQEAgLTU2OCw5ICs2MjUsMTQgQEAKIAl7T1BfV1IsIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMSwgMHg1fSwKIAl7T1BfV1IsIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfMiwgMHgzNH0sCiAJe09QX1dSLCBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMsIDB4MzV9LAotCXtPUF9aUiwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDVjfSwKKwl7T1BfWlJfRTEsIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfNCwgMHg1Y30sCisJe09QX1dSX0UxSCwgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF80LCAweDd9LAorCXtPUF9aUl9FMUgsIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfNSwgMHg1Yn0sCiAJe09QX1dSLCBVU0RNX1JFR19BR0dfSU5UX01PREVfMCwgMHgxfSwKLQl7T1BfWlIsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xLCAweDFmfSwKKwl7T1BfWlJfRTEsIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xLCAweDFmfSwKKwl7T1BfWlJfRTFILCBVU0RNX1JFR19BR0dfSU5UX01PREVfMSwgMHgzfSwKKwl7T1BfV1JfRTFILCBVU0RNX1JFR19BR0dfSU5UX01PREVfNCwgMHgxfSwKKwl7T1BfWlJfRTFILCBVU0RNX1JFR19BR0dfSU5UX01PREVfNSwgMHgxYn0sCiAJe09QX1dSLCBVU0RNX1JFR19FTkFCTEVfSU4xLCAweDdmZmZmZmZ9LAogCXtPUF9XUiwgVVNETV9SRUdfRU5BQkxFX0lOMiwgMHgzZn0sCiAJe09QX1dSLCBVU0RNX1JFR19FTkFCTEVfT1VUMSwgMHg3ZmZmZmZmfSwKQEAgLTU5NCwxOCArNjU2LDIxIEBACiAJe09QX1dSX0FTSUMsIFVTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4M2U4fSwKIAl7T1BfV1JfRU1VTCwgVVNETV9SRUdfVElNRVJfVElDSywgMHgxfSwKIAl7T1BfV1JfRlBHQSwgVVNETV9SRUdfVElNRVJfVElDSywgMHhhfSwKLSNkZWZpbmUgVVNETV9DT01NT05fRU5EICAgICAgICAgNDg2Ci0jZGVmaW5lIENDTV9DT01NT05fU1RBUlQgICAgICAgIDQ4NgorI2RlZmluZSBVU0RNX0NPTU1PTl9FTkQgICAgICAgICA1MzIKKyNkZWZpbmUgQ0NNX0NPTU1PTl9TVEFSVCAgICAgICAgNTMyCiAJe09QX1dSLCBDQ01fUkVHX1hYX09WRkxfRVZOVF9JRCwgMHgzMn0sCiAJe09QX1dSLCBDQ01fUkVHX0NRTV9DQ01fSERSX1AsIDB4MjE1MDAyMH0sCiAJe09QX1dSLCBDQ01fUkVHX0NRTV9DQ01fSERSX1MsIDB4MjE1MDAyMH0sCiAJe09QX1dSLCBDQ01fUkVHX0VSUl9DQ01fSERSLCAweDgxMDAwMDB9LAogCXtPUF9XUiwgQ0NNX1JFR19FUlJfRVZOVF9JRCwgMHgzM30sCisJe09QX1dSLCBDQ01fUkVHX1NUT1JNX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIENDTV9SRUdfVFNFTV9XRUlHSFQsIDB4MH0sCi0Je09QX1dSLCBDQ01fUkVHX1hTRU1fV0VJR0hULCAweDR9LAotCXtPUF9XUiwgQ0NNX1JFR19VU0VNX1dFSUdIVCwgMHg0fSwKKwl7T1BfV1IsIENDTV9SRUdfWFNFTV9XRUlHSFQsIDB4NX0sCisJe09QX1dSLCBDQ01fUkVHX1VTRU1fV0VJR0hULCAweDV9LAogCXtPUF9aUiwgQ0NNX1JFR19QQkZfV0VJR0hULCAweDJ9LAotCXtPUF9XUiwgQ0NNX1JFR19DUU1fUF9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBDQ01fUkVHX0NTRE1fV0VJR0hULCAweDJ9LAorCXtPUF9XUiwgQ0NNX1JFR19DUU1fUF9XRUlHSFQsIDB4M30sCisJe09QX1dSLCBDQ01fUkVHX0NRTV9TX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIENDTV9SRUdfQ0NNX0NRTV9VU0VfUSwgMHgxfSwKIAl7T1BfV1IsIENDTV9SRUdfQ05UX0FVWDFfUSwgMHgyfSwKIAl7T1BfV1IsIENDTV9SRUdfQ05UX0FVWDJfUSwgMHgyfSwKQEAgLTYyMCw4ICs2ODUsOCBAQAogCXtPUF9XUiwgQ0NNX1JFR19YWF9JTklUX0NSRCwgMHgzfSwKIAl7T1BfV1IsIENDTV9SRUdfWFhfTVNHX05VTSwgMHgxOH0sCiAJe09QX1pSLCBDQ01fUkVHX1hYX1RBQkxFLCAweDEyfSwKLQl7T1BfU1dfRTEsIENDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MjQwMjM4fSwKLQl7T1BfU1dfRTFILCBDQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDI0MDI1NH0sCisJe09QX1NXX0UxLCBDQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDI0MDI0Mn0sCisJe09QX1NXX0UxSCwgQ0NNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgyNDAyN2N9LAogCXtPUF9XUiwgQ0NNX1JFR19OX1NNX0NUWF9MRF8wLCAweDF9LAogCXtPUF9XUiwgQ0NNX1JFR19OX1NNX0NUWF9MRF8xLCAweDJ9LAogCXtPUF9XUiwgQ0NNX1JFR19OX1NNX0NUWF9MRF8yLCAweDh9LApAQCAtNjU3LDggKzcyMiw4IEBACiAJe09QX1dSLCBDQ01fUkVHX0NEVV9TTV9XUl9JRkVOLCAweDF9LAogCXtPUF9XUiwgQ0NNX1JFR19DRFVfU01fUkRfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIENDTV9SRUdfQ0NNX0NGQ19JRkVOLCAweDF9LAotI2RlZmluZSBDQ01fQ09NTU9OX0VORCAgICAgICAgICA1NDcKLSNkZWZpbmUgQ0NNX0ZVTkMwX1NUQVJUICAgICAgICAgNTQ3CisjZGVmaW5lIENDTV9DT01NT05fRU5EICAgICAgICAgIDU5NgorI2RlZmluZSBDQ01fRlVOQzBfU1RBUlQgICAgICAgICA1OTYKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0wXzAsIDB4OX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMV8wLCAweGF9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTJfMCwgMHg3fSwKQEAgLTY2Niw4ICs3MzEsOCBAQAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMV8wLCAweGN9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMl8wLCAweGJ9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNM18wLCAweDd9LAotI2RlZmluZSBDQ01fRlVOQzBfRU5EICAgICAgICAgICA1NTQKLSNkZWZpbmUgQ0NNX0ZVTkMxX1NUQVJUICAgICAgICAgNTU0CisjZGVmaW5lIENDTV9GVU5DMF9FTkQgICAgICAgICAgIDYwMworI2RlZmluZSBDQ01fRlVOQzFfU1RBUlQgICAgICAgICA2MDMKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0wXzEsIDB4Mjl9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMSwgMHgyYX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8xLCAweDI3fSwKQEAgLTY3NSw4ICs3NDAsOCBAQAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMV8xLCAweDJjfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgyYn0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzEsIDB4Mjd9LAotI2RlZmluZSBDQ01fRlVOQzFfRU5EICAgICAgICAgICA1NjEKLSNkZWZpbmUgQ0NNX0ZVTkMyX1NUQVJUICAgICAgICAgNTYxCisjZGVmaW5lIENDTV9GVU5DMV9FTkQgICAgICAgICAgIDYxMAorI2RlZmluZSBDQ01fRlVOQzJfU1RBUlQgICAgICAgICA2MTAKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0wXzAsIDB4MTl9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMCwgMHgxYX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8wLCAweDE3fSwKQEAgLTY4NCw4ICs3NDksOCBAQAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMV8wLCAweDFjfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHgxYn0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzAsIDB4MTd9LAotI2RlZmluZSBDQ01fRlVOQzJfRU5EICAgICAgICAgICA1NjgKLSNkZWZpbmUgQ0NNX0ZVTkMzX1NUQVJUICAgICAgICAgNTY4CisjZGVmaW5lIENDTV9GVU5DMl9FTkQgICAgICAgICAgIDYxNworI2RlZmluZSBDQ01fRlVOQzNfU1RBUlQgICAgICAgICA2MTcKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0wXzEsIDB4Mzl9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMSwgMHgzYX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8xLCAweDM3fSwKQEAgLTY5Myw4ICs3NTgsOCBAQAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMV8xLCAweDNjfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHgzYn0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzEsIDB4Mzd9LAotI2RlZmluZSBDQ01fRlVOQzNfRU5EICAgICAgICAgICA1NzUKLSNkZWZpbmUgQ0NNX0ZVTkM0X1NUQVJUICAgICAgICAgNTc1CisjZGVmaW5lIENDTV9GVU5DM19FTkQgICAgICAgICAgIDYyNAorI2RlZmluZSBDQ01fRlVOQzRfU1RBUlQgICAgICAgICA2MjQKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0wXzAsIDB4NDl9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMCwgMHg0YX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8wLCAweDQ3fSwKQEAgLTcwMiw4ICs3NjcsOCBAQAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMV8wLCAweDRjfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHg0Yn0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzAsIDB4NDd9LAotI2RlZmluZSBDQ01fRlVOQzRfRU5EICAgICAgICAgICA1ODIKLSNkZWZpbmUgQ0NNX0ZVTkM1X1NUQVJUICAgICAgICAgNTgyCisjZGVmaW5lIENDTV9GVU5DNF9FTkQgICAgICAgICAgIDYzMQorI2RlZmluZSBDQ01fRlVOQzVfU1RBUlQgICAgICAgICA2MzEKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0wXzEsIDB4Njl9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMSwgMHg2YX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8xLCAweDY3fSwKQEAgLTcxMSw4ICs3NzYsOCBAQAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMV8xLCAweDZjfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHg2Yn0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzEsIDB4Njd9LAotI2RlZmluZSBDQ01fRlVOQzVfRU5EICAgICAgICAgICA1ODkKLSNkZWZpbmUgQ0NNX0ZVTkM2X1NUQVJUICAgICAgICAgNTg5CisjZGVmaW5lIENDTV9GVU5DNV9FTkQgICAgICAgICAgIDYzOAorI2RlZmluZSBDQ01fRlVOQzZfU1RBUlQgICAgICAgICA2MzgKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0wXzAsIDB4NTl9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMCwgMHg1YX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8wLCAweDU3fSwKQEAgLTcyMCw4ICs3ODUsOCBAQAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMV8wLCAweDVjfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTJfMCwgMHg1Yn0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzAsIDB4NTd9LAotI2RlZmluZSBDQ01fRlVOQzZfRU5EICAgICAgICAgICA1OTYKLSNkZWZpbmUgQ0NNX0ZVTkM3X1NUQVJUICAgICAgICAgNTk2CisjZGVmaW5lIENDTV9GVU5DNl9FTkQgICAgICAgICAgIDY0NQorI2RlZmluZSBDQ01fRlVOQzdfU1RBUlQgICAgICAgICA2NDUKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1FPU19QSFlTX1FOVU0wXzEsIDB4Nzl9LAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUU9TX1BIWVNfUU5VTTFfMSwgMHg3YX0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19RT1NfUEhZU19RTlVNMl8xLCAweDc3fSwKQEAgLTcyOSw4ICs3OTQsOCBAQAogCXtPUF9XUl9FMUgsIENDTV9SRUdfUEhZU19RTlVNMV8xLCAweDdjfSwKIAl7T1BfV1JfRTFILCBDQ01fUkVHX1BIWVNfUU5VTTJfMSwgMHg3Yn0sCiAJe09QX1dSX0UxSCwgQ0NNX1JFR19QSFlTX1FOVU0zXzEsIDB4Nzd9LAotI2RlZmluZSBDQ01fRlVOQzdfRU5EICAgICAgICAgICA2MDMKLSNkZWZpbmUgVUNNX0NPTU1PTl9TVEFSVCAgICAgICAgNjAzCisjZGVmaW5lIENDTV9GVU5DN19FTkQgICAgICAgICAgIDY1MgorI2RlZmluZSBVQ01fQ09NTU9OX1NUQVJUICAgICAgICA2NTIKIAl7T1BfV1IsIFVDTV9SRUdfWFhfT1ZGTF9FVk5UX0lELCAweDMyfSwKIAl7T1BfV1IsIFVDTV9SRUdfVVFNX1VDTV9IRFJfUCwgMHgyMTUwMDIwfSwKIAl7T1BfV1IsIFVDTV9SRUdfVVFNX1VDTV9IRFJfUywgMHgyMTUwMDIwfSwKQEAgLTczOSwxMCArODA0LDE2IEBACiAJe09QX1dSLCBVQ01fUkVHX0VSUl9FVk5UX0lELCAweDMzfSwKIAl7T1BfV1IsIFVDTV9SRUdfRVhQUl9FVk5UX0lELCAweDMwfSwKIAl7T1BfV1IsIFVDTV9SRUdfU1RPUF9FVk5UX0lELCAweDMxfSwKLQl7T1BfV1IsIFVDTV9SRUdfVFNFTV9XRUlHSFQsIDB4M30sCisJe09QX1dSLCBVQ01fUkVHX1NUT1JNX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFVDTV9SRUdfVFNFTV9XRUlHSFQsIDB4NH0sCiAJe09QX1dSLCBVQ01fUkVHX0NTRU1fV0VJR0hULCAweDB9LAorCXtPUF9XUiwgVUNNX1JFR19YU0VNX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFVDTV9SRUdfRE9SUV9XRUlHSFQsIDB4Mn0sCiAJe09QX1dSLCBVQ01fUkVHX0NQX1dFSUdIVCwgMHgwfSwKLQl7T1BfV1IsIFVDTV9SRUdfVVFNX1BfV0VJR0hULCAweDZ9LAorCXtPUF9XUiwgVUNNX1JFR19VU0RNX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFVDTV9SRUdfVVFNX1BfV0VJR0hULCAweDd9LAorCXtPUF9XUiwgVUNNX1JFR19VUU1fU19XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBVQ01fUkVHX1RNX1dFSUdIVCwgMHgyfSwKIAl7T1BfV1IsIFVDTV9SRUdfVUNNX1VRTV9VU0VfUSwgMHgxfSwKIAl7T1BfV1IsIFVDTV9SRUdfSU5WX0NGTEdfUSwgMHgxfSwKIAl7T1BfV1IsIFVDTV9SRUdfR1JfQVJCX1RZUEUsIDB4MX0sCkBAIC03NTYsMTQgKzgyNywxNCBAQAogCXtPUF9XUiwgVUNNX1JFR19YWF9JTklUX0NSRCwgMHhlfSwKIAl7T1BfV1IsIFVDTV9SRUdfWFhfTVNHX05VTSwgMHgxYn0sCiAJe09QX1pSLCBVQ01fUkVHX1hYX1RBQkxFLCAweDEyfSwKLQl7T1BfU1dfRTEsIFVDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWIwMjVjfSwKLQl7T1BfU1dfRTFILCBVQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFiMDI3OH0sCisJe09QX1NXX0UxLCBVQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFiMDI2Nn0sCisJe09QX1NXX0UxSCwgVUNNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxYjAyYTB9LAogCXtPUF9XUiwgVUNNX1JFR19OX1NNX0NUWF9MRF8wLCAweDEwfSwKIAl7T1BfV1IsIFVDTV9SRUdfTl9TTV9DVFhfTERfMSwgMHg3fSwKIAl7T1BfV1IsIFVDTV9SRUdfTl9TTV9DVFhfTERfMiwgMHhmfSwKIAl7T1BfV1IsIFVDTV9SRUdfTl9TTV9DVFhfTERfMywgMHgxMH0sCiAJe09QX1pSX0UxLCBVQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4NH0sCi0Je09QX1dSX0UxSCwgVUNNX1JFR19OX1NNX0NUWF9MRF80LCAweGR9LAorCXtPUF9XUl9FMUgsIFVDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHhifSwKIAl7T1BfWlJfRTFILCBVQ01fUkVHX05fU01fQ1RYX0xEXzUsIDB4M30sCiAJe09QX1dSLCBVQ01fUkVHX1VDTV9SRUcwX1NaLCAweDN9LAogCXtPUF9XUl9FMSwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4Zn0sCkBAIC03ODcsNTYgKzg1OCw1NiBAQAogCXtPUF9XUiwgVUNNX1JFR19DRFVfU01fV1JfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFVDTV9SRUdfQ0RVX1NNX1JEX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBVQ01fUkVHX1VDTV9DRkNfSUZFTiwgMHgxfSwKLSNkZWZpbmUgVUNNX0NPTU1PTl9FTkQgICAgICAgICAgNjU5Ci0jZGVmaW5lIFVDTV9GVU5DMF9TVEFSVCAgICAgICAgIDY1OQorI2RlZmluZSBVQ01fQ09NTU9OX0VORCAgICAgICAgICA3MTQKKyNkZWZpbmUgVUNNX0ZVTkMwX1NUQVJUICAgICAgICAgNzE0CiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0wXzAsIDB4Zn0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0xXzAsIDB4ZX0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0yXzAsIDB4MH0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCi0jZGVmaW5lIFVDTV9GVU5DMF9FTkQgICAgICAgICAgIDY2MwotI2RlZmluZSBVQ01fRlVOQzFfU1RBUlQgICAgICAgICA2NjMKKyNkZWZpbmUgVUNNX0ZVTkMwX0VORCAgICAgICAgICAgNzE4CisjZGVmaW5lIFVDTV9GVU5DMV9TVEFSVCAgICAgICAgIDcxOAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMF8xLCAweDJmfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgyZX0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0yXzEsIDB4MH0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFVDTV9GVU5DMV9FTkQgICAgICAgICAgIDY2NwotI2RlZmluZSBVQ01fRlVOQzJfU1RBUlQgICAgICAgICA2NjcKKyNkZWZpbmUgVUNNX0ZVTkMxX0VORCAgICAgICAgICAgNzIyCisjZGVmaW5lIFVDTV9GVU5DMl9TVEFSVCAgICAgICAgIDcyMgogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMF8wLCAweDFmfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHgxZX0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0yXzAsIDB4MH0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCi0jZGVmaW5lIFVDTV9GVU5DMl9FTkQgICAgICAgICAgIDY3MQotI2RlZmluZSBVQ01fRlVOQzNfU1RBUlQgICAgICAgICA2NzEKKyNkZWZpbmUgVUNNX0ZVTkMyX0VORCAgICAgICAgICAgNzI2CisjZGVmaW5lIFVDTV9GVU5DM19TVEFSVCAgICAgICAgIDcyNgogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMF8xLCAweDNmfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHgzZX0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0yXzEsIDB4MH0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFVDTV9GVU5DM19FTkQgICAgICAgICAgIDY3NQotI2RlZmluZSBVQ01fRlVOQzRfU1RBUlQgICAgICAgICA2NzUKKyNkZWZpbmUgVUNNX0ZVTkMzX0VORCAgICAgICAgICAgNzMwCisjZGVmaW5lIFVDTV9GVU5DNF9TVEFSVCAgICAgICAgIDczMAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMF8wLCAweDRmfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg0ZX0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0yXzAsIDB4MH0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCi0jZGVmaW5lIFVDTV9GVU5DNF9FTkQgICAgICAgICAgIDY3OQotI2RlZmluZSBVQ01fRlVOQzVfU1RBUlQgICAgICAgICA2NzkKKyNkZWZpbmUgVUNNX0ZVTkM0X0VORCAgICAgICAgICAgNzM0CisjZGVmaW5lIFVDTV9GVU5DNV9TVEFSVCAgICAgICAgIDczNAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMF8xLCAweDZmfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHg2ZX0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0yXzEsIDB4MH0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFVDTV9GVU5DNV9FTkQgICAgICAgICAgIDY4MwotI2RlZmluZSBVQ01fRlVOQzZfU1RBUlQgICAgICAgICA2ODMKKyNkZWZpbmUgVUNNX0ZVTkM1X0VORCAgICAgICAgICAgNzM4CisjZGVmaW5lIFVDTV9GVU5DNl9TVEFSVCAgICAgICAgIDczOAogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMF8wLCAweDVmfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMCwgMHg1ZX0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0yXzAsIDB4MH0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCi0jZGVmaW5lIFVDTV9GVU5DNl9FTkQgICAgICAgICAgIDY4NwotI2RlZmluZSBVQ01fRlVOQzdfU1RBUlQgICAgICAgICA2ODcKKyNkZWZpbmUgVUNNX0ZVTkM2X0VORCAgICAgICAgICAgNzQyCisjZGVmaW5lIFVDTV9GVU5DN19TVEFSVCAgICAgICAgIDc0MgogCXtPUF9XUl9FMUgsIFVDTV9SRUdfUEhZU19RTlVNMF8xLCAweDdmfSwKIAl7T1BfV1JfRTFILCBVQ01fUkVHX1BIWVNfUU5VTTFfMSwgMHg3ZX0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0yXzEsIDB4MH0sCiAJe09QX1dSX0UxSCwgVUNNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFVDTV9GVU5DN19FTkQgICAgICAgICAgIDY5MQotI2RlZmluZSBVU0VNX0NPTU1PTl9TVEFSVCAgICAgICA2OTEKKyNkZWZpbmUgVUNNX0ZVTkM3X0VORCAgICAgICAgICAgNzQ2CisjZGVmaW5lIFVTRU1fQ09NTU9OX1NUQVJUICAgICAgIDc0NgogCXtPUF9SRCwgVVNFTV9SRUdfTVNHX05VTV9GSUMwLCAweDB9LAogCXtPUF9SRCwgVVNFTV9SRUdfTVNHX05VTV9GSUMxLCAweDB9LAogCXtPUF9SRCwgVVNFTV9SRUdfTVNHX05VTV9GT0MwLCAweDB9LApAQCAtODg3LDY5ICs5NTgsNzIgQEAKIAl7T1BfV1JfQVNJQywgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDFkY2Q2NTAwfSwKIAl7T1BfV1JfRU1VTCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDRjNGI0fSwKIAl7T1BfV1JfRlBHQSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE4MzgwLCAweDRjNGI0MH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTAwMCwgMHgxMDJ9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4YzJ9LAogCXtPUF9XUl9FTVVMX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNDgwLCAweDB9LAogCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMjAsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4MCwgMHgxfSwKIAl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDAwLCAweDJ9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMDAwLCAweDEwMn0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTdlOCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAyMCwgMHhjOH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTdkMCwgMHg1fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODAwMCwgMHgyfSwKLQl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2QwICsgMHgxNCwgMHgxMDI3N30sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM3NjAsIDB4NH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWUyMCwgMHg0Mn0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM3MzgsIDB4OX0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGI2OCwgMHgyfSwKLQl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzczOCArIDB4MjQsIDB4MTAyOTN9LAotCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiNjggKyAweDgsIDB4MjAyNzh9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMTgwLCAweDQyfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjEwLCAweDJ9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQ2NDAsIDB4NDB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4OTgwLCAweGM4fSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1N2YwLCAweDR9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4OTYwLCAweDJ9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU3ZDgsIDB4NX0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMjgsIDB4NH0sCisJe09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTdkOCArIDB4MTQsIDB4MTAyODF9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjAwLCAweDl9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFjNjAsIDB4MjB9LAorCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMjAwICsgMHgyNCwgMHgxMDJiYn0sCisJe09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjgzMCwgMHgyMDI4Mn0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMxODAsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDAwLCAweDQwMH0sCi0Je09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjgzMCwgMHgyMDI3YX0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAsIDB4Mn0sCi0Je09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMDAgKyAweDgsIDB4MjAyOTR9LAorCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwICsgMHg4LCAweDEwMmJjfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCArIDB4YywgMHgzfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmI2OCwgMHgyfSwKLQl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmI2OCArIDB4OCwgMHgyMDI5Nn0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiNjggKyAweDgsIDB4MjAyYmR9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjEwLCAweDJ9LAotCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg3NGMwLCAweDIwMjk4fSwKKwl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NzRjMCwgMHgyMDJiZn0sCiAJe09QX1dSLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MTAwMDAwMH0sCi0Je09QX1NXX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMjdjfSwKLQl7T1BfU1dfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMjlhfSwKKwl7T1BfU1dfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyODR9LAorCXtPUF9TV19FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyYzF9LAogCXtPUF9XUiwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwODAwLCAweDB9LAotCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDEwMDI4Y30sCi0Je09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDEwMDJhYX0sCi0Je09QX1pQX0UxLCBVU0VNX1JFR19JTlRfVEFCTEUsIDB4YzIwMDAwfSwKLQl7T1BfWlBfRTFILCBVU0VNX1JFR19JTlRfVEFCTEUsIDB4YzQwMDAwfSwKLQl7T1BfV1JfNjRfRTEsIFVTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzY4LCAweDEzMDI5Y30sCi0Je09QX1dSXzY0X0UxSCwgVVNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMmJhfSwKLQl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0sIDB4MzExYzAwMDB9LAotCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0sIDB4MzEwNzAwMDB9LAotCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzMzQ1MGM0N30sCi0Je09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzMzBlMGM0Mn0sCi0Je09QX1pQX0UxLCBVU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzODU2MTkxOX0sCi0Je09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4Mzg5YjE5MDZ9LAotCXtPUF9XUl82NF9FMSwgVVNFTV9SRUdfUFJBTSArIDB4MTdmZTAsIDB4NTAwNDAyOWV9LAotCXtPUF9aUF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDEzMjI3MmR9LAotCXtPUF9XUl82NF9FMUgsIFVTRU1fUkVHX1BSQU0gKyAweDE4MjUwLCAweDRmYjYwMmJjfSwKLSNkZWZpbmUgVVNFTV9DT01NT05fRU5EICAgICAgICAgNzg3Ci0jZGVmaW5lIFVTRU1fUE9SVDBfU1RBUlQgICAgICAgIDc4NworCXtPUF9TV19FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDEwMDI5NH0sCisJe09QX1NXX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDEwMDJkMX0sCisJe09QX1pQX0UxLCBVU0VNX1JFR19JTlRfVEFCTEUsIDB4YzMwMDAwfSwKKwl7T1BfWlBfRTFILCBVU0VNX1JFR19JTlRfVEFCTEUsIDB4ZDIwMDAwfSwKKwl7T1BfV1JfNjRfRTEsIFVTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzY4LCAweDEzMDJhNH0sCisJe09QX1dSXzY0X0UxSCwgVVNFTV9SRUdfSU5UX1RBQkxFICsgMHgzYTgsIDB4YjAyZTF9LAorCXtPUF9aUF9FMSwgVVNFTV9SRUdfUFJBTSwgMHgzMTRjMDAwMH0sCisJe09QX1pQX0UxSCwgVVNFTV9SRUdfUFJBTSwgMHgzMWI2MDAwMH0sCisJe09QX1pQX0UxLCBVU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM1ZWYwYzUzfSwKKwl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHg4MDAwLCAweDM2NTAwYzZlfSwKKwl7T1BfWlBfRTEsIFVTRU1fUkVHX1BSQU0gKyAweDEwMDAwLCAweDM2MTMxOWNmfSwKKwl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzNzU5MWEwMn0sCisJe09QX1pQX0UxLCBVU0VNX1JFR19QUkFNICsgMHgxODAwMCwgMHg3MTEyNzU0fSwKKwl7T1BfWlBfRTFILCBVU0VNX1JFR19QUkFNICsgMHgxODAwMCwgMHgyODYxMjdkOX0sCisJe09QX1dSXzY0X0UxLCBVU0VNX1JFR19QUkFNICsgMHgxOGVlMCwgMHg0ZTI0MDJhNn0sCisJe09QX1dSXzY0X0UxSCwgVVNFTV9SRUdfUFJBTSArIDB4MWZmNDAsIDB4NDAxODAyZTN9LAorI2RlZmluZSBVU0VNX0NPTU1PTl9FTkQgICAgICAgICA4NDIKKyNkZWZpbmUgVVNFTV9QT1JUMF9TVEFSVCAgICAgICAgODQyCiAJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQwMCwgMHhhMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDkwMDAsIDB4YTB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5MDAsIDB4YX0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk1MDAsIDB4Mjh9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5NTAsIDB4MmV9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5NjQwLCAweDM0fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZDAwLCAweDR9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5MDAsIDB4MTB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5NTAwLCAweDQwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxOTgwLCAweDMwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTcwMCwgMHgzY30sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDc0MCwgMHhiNH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0NTAsIDB4YjR9LAorCXtPUF9XUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkOTAsIDB4MH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhZDAsIDB4Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWI0MCwgMHg0fSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA4MCwgMHgyMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWQyMCwgMHgyMH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyODgsIDB4OTZ9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU0NDAsIDB4NzJ9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFiNjAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4MDAwLCAweDEyY30sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTMxOCwgMHg5OH0sCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyMzgsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwMDAsIDB4MjB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiNzgsIDB4NTJ9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTAwLCAweDIwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0ZTA4LCAweGN9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MjAwLCAweDIwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTMwMCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU0MDAsIDB4MjB9LApAQCAtOTY2LDIzICsxMDQwLDI2IEBACiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDVmMDAsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2Yjc4LCAweDUyfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmUwOCwgMHhjfSwKLSNkZWZpbmUgVVNFTV9QT1JUMF9FTkQgICAgICAgICAgODE4Ci0jZGVmaW5lIFVTRU1fUE9SVDFfU1RBUlQgICAgICAgIDgxOAorI2RlZmluZSBVU0VNX1BPUlQwX0VORCAgICAgICAgICA4NzYKKyNkZWZpbmUgVVNFTV9QT1JUMV9TVEFSVCAgICAgICAgODc2CiAJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTY4MCwgMHhhMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDkyODAsIDB4YTB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5MjgsIDB4YX0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDk1YTAsIDB4Mjh9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFhMDgsIDB4MmV9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5NzEwLCAweDM0fSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZDEwLCAweDR9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5NDAsIDB4MTB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg5NjAwLCAweDQwfSwKKwl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxYTQwLCAweDMwfSwKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTdmMCwgMHgzY30sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGExMCwgMHhiNH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI3MjAsIDB4YjR9LAorCXtPUF9XUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFkOTQsIDB4MH0sCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhZDgsIDB4Mn0sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWI1MCwgMHg0fSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzEwMCwgMHgyMH0sCi0Je09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MWRhMCwgMHgyMH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM0ZTAsIDB4OTZ9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU2MDgsIDB4NzJ9LAorCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFiZTAsIDB4MjB9LAorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4NGIwLCAweDEyY30sCisJe09QX1pSX0UxLCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTU3OCwgMHg5OH0sCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMyM2MsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwODAsIDB4MjB9LAotCXtPUF9aUl9FMSwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRjYzAsIDB4NTJ9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MTgwLCAweDIwfSwKLQl7T1BfWlJfRTEsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0ZTM4LCAweGN9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MjgwLCAweDIwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTM4MCwgMHgyMH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDU0ODAsIDB4MjB9LApAQCAtOTk5LDQwICsxMDc2LDQ4IEBACiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDVmODAsIDB4MjB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2Y2MwLCAweDUyfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmUzOCwgMHhjfSwKLSNkZWZpbmUgVVNFTV9QT1JUMV9FTkQgICAgICAgICAgODQ5Ci0jZGVmaW5lIFVTRU1fRlVOQzBfU1RBUlQgICAgICAgIDg0OQorI2RlZmluZSBVU0VNX1BPUlQxX0VORCAgICAgICAgICA5MTAKKyNkZWZpbmUgVVNFTV9GVU5DMF9TVEFSVCAgICAgICAgOTEwCisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhMzAsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMTAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzBfRU5EICAgICAgICAgIDg1MQotI2RlZmluZSBVU0VNX0ZVTkMxX1NUQVJUICAgICAgICA4NTEKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAxOCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DMF9FTkQgICAgICAgICAgOTEzCisjZGVmaW5lIFVTRU1fRlVOQzFfU1RBUlQgICAgICAgIDkxMworCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTM0LCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDEwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDIwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkMxX0VORCAgICAgICAgICA4NTMKLSNkZWZpbmUgVVNFTV9GVU5DMl9TVEFSVCAgICAgICAgODUzCisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwMjgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzFfRU5EICAgICAgICAgIDkxNgorI2RlZmluZSBVU0VNX0ZVTkMyX1NUQVJUICAgICAgICA5MTYKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmEzOCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAyMCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAzMCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DMl9FTkQgICAgICAgICAgODU1Ci0jZGVmaW5lIFVTRU1fRlVOQzNfU1RBUlQgICAgICAgIDg1NQorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDM4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkMyX0VORCAgICAgICAgICA5MTkKKyNkZWZpbmUgVVNFTV9GVU5DM19TVEFSVCAgICAgICAgOTE5CisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhM2MsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMzAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNDAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzNfRU5EICAgICAgICAgIDg1NwotI2RlZmluZSBVU0VNX0ZVTkM0X1NUQVJUICAgICAgICA4NTcKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA0OCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DM19FTkQgICAgICAgICAgOTIyCisjZGVmaW5lIFVTRU1fRlVOQzRfU1RBUlQgICAgICAgIDkyMgorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTQwLCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDQwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDUwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkM0X0VORCAgICAgICAgICA4NTkKLSNkZWZpbmUgVVNFTV9GVU5DNV9TVEFSVCAgICAgICAgODU5CisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNTgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzRfRU5EICAgICAgICAgIDkyNQorI2RlZmluZSBVU0VNX0ZVTkM1X1NUQVJUICAgICAgICA5MjUKKwl7T1BfV1JfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmE0NCwgMHgwfSwKIAl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA1MCwgMHg0fSwKLQl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA2MCwgMHgyfSwKLSNkZWZpbmUgVVNFTV9GVU5DNV9FTkQgICAgICAgICAgODYxCi0jZGVmaW5lIFVTRU1fRlVOQzZfU1RBUlQgICAgICAgIDg2MQorCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDY4LCAweDJ9LAorI2RlZmluZSBVU0VNX0ZVTkM1X0VORCAgICAgICAgICA5MjgKKyNkZWZpbmUgVVNFTV9GVU5DNl9TVEFSVCAgICAgICAgOTI4CisJe09QX1dSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJhNDgsIDB4MH0sCiAJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwNjAsIDB4NH0sCi0Je09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNzAsIDB4Mn0sCi0jZGVmaW5lIFVTRU1fRlVOQzZfRU5EICAgICAgICAgIDg2MwotI2RlZmluZSBVU0VNX0ZVTkM3X1NUQVJUICAgICAgICA4NjMKKwl7T1BfWlJfRTFILCBVU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA3OCwgMHgyfSwKKyNkZWZpbmUgVVNFTV9GVU5DNl9FTkQgICAgICAgICAgOTMxCisjZGVmaW5lIFVTRU1fRlVOQzdfU1RBUlQgICAgICAgIDkzMQorCXtPUF9XUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTRjLCAweDB9LAogCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDcwLCAweDR9LAotCXtPUF9aUl9FMUgsIFVTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDgwLCAweDJ9LAotI2RlZmluZSBVU0VNX0ZVTkM3X0VORCAgICAgICAgICA4NjUKLSNkZWZpbmUgQ1NFTV9DT01NT05fU1RBUlQgICAgICAgODY1CisJe09QX1pSX0UxSCwgVVNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwODgsIDB4Mn0sCisjZGVmaW5lIFVTRU1fRlVOQzdfRU5EICAgICAgICAgIDkzNAorI2RlZmluZSBDU0VNX0NPTU1PTl9TVEFSVCAgICAgICA5MzQKIAl7T1BfUkQsIENTRU1fUkVHX01TR19OVU1fRklDMCwgMHgwfSwKIAl7T1BfUkQsIENTRU1fUkVHX01TR19OVU1fRklDMSwgMHgwfSwKIAl7T1BfUkQsIENTRU1fUkVHX01TR19OVU1fRk9DMCwgMHgwfSwKQEAgLTEwOTEsMjkgKzExNzYsMzAgQEAKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTFlOCwgMHgwfSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNWMwLCAweDI0MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAsIDB4YzB9LAotCXtPUF9TV19FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJlYzgsIDB4ODAyYTB9LAorCXtPUF9TV19FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJlYzgsIDB4ODAyYTh9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDcwLCAweDgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTI4MCwgMHg0fSwKLQl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjI4MCwgMHgyNDB9LAotCXtPUF9TV19FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2Yjg4LCAweDIwMDJiZX0sCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDY3MDAsIDB4MTAwfSwKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4OTAwMCwgMHg0MDB9LAorCXtPUF9TV19FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2YjA4LCAweDIwMDJlNX0sCiAJe09QX1dSLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MTNmZmZmZn0sCi0Je09QX1NXX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMmE4fSwKLQl7T1BfU1dfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjMDAsIDB4MTAwMmRlfSwKKwl7T1BfU1dfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyYjB9LAorCXtPUF9TV19FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAzMDV9LAogCXtPUF9XUiwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwODAwLCAweDB9LAotCXtPUF9TV19FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDEwMDJiOH0sCi0Je09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDEwMDJlZX0sCi0Je09QX1pQX0UxLCBDU0VNX1JFR19JTlRfVEFCTEUsIDB4NmUwMDAwfSwKLQl7T1BfWlBfRTFILCBDU0VNX1JFR19JTlRfVEFCTEUsIDB4NmYwMDAwfSwKLQl7T1BfV1JfNjRfRTEsIENTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzgwLCAweDEwMDJjOH0sCi0Je09QX1dSXzY0X0UxSCwgQ1NFTV9SRUdfSU5UX1RBQkxFICsgMHgzODAsIDB4MTAwMmZlfSwKLQl7T1BfWlBfRTEsIENTRU1fUkVHX1BSQU0sIDB4MzI1ODAwMDB9LAotCXtPUF9aUF9FMUgsIENTRU1fUkVHX1BSQU0sIDB4MzFmYTAwMDB9LAotCXtPUF9aUF9FMSwgQ1NFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgxODI3MGM5Nn0sCi0Je09QX1pQX0UxSCwgQ1NFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgxOTA0MGM3Zn0sCi0Je09QX1dSXzY0X0UxLCBDU0VNX1JFR19QUkFNICsgMHhiMjEwLCAweDY4MjQwMmNhfSwKLQl7T1BfV1JfNjRfRTFILCBDU0VNX1JFR19QUkFNICsgMHhiNDMwLCAweDY3ZTAwMzAwfSwKLSNkZWZpbmUgQ1NFTV9DT01NT05fRU5EICAgICAgICAgOTQ0Ci0jZGVmaW5lIENTRU1fUE9SVDBfU1RBUlQgICAgICAgIDk0NAorCXtPUF9TV19FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDEwMDJjMH0sCisJe09QX1NXX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzQwLCAweDEwMDMxNX0sCisJe09QX1pQX0UxLCBDU0VNX1JFR19JTlRfVEFCTEUsIDB4NzEwMDAwfSwKKwl7T1BfWlBfRTFILCBDU0VNX1JFR19JTlRfVEFCTEUsIDB4NzQwMDAwfSwKKwl7T1BfV1JfNjRfRTEsIENTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzgwLCAweDEwMDJkMH0sCisJe09QX1dSXzY0X0UxSCwgQ1NFTV9SRUdfSU5UX1RBQkxFICsgMHgzODAsIDB4MTAwMzI1fSwKKwl7T1BfWlBfRTEsIENTRU1fUkVHX1BSQU0sIDB4MzIyOTAwMDB9LAorCXtPUF9aUF9FMUgsIENTRU1fUkVHX1BSQU0sIDB4MzIyNjAwMDB9LAorCXtPUF9aUF9FMSwgQ1NFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgyMzYzMGM4Yn0sCisJe09QX1pQX0UxSCwgQ1NFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgyNDZlMGM4YX0sCisJe09QX1dSXzY0X0UxLCBDU0VNX1JFR19QUkFNICsgMHhjOTMwLCAweDY1NDAwMmQyfSwKKwl7T1BfV1JfNjRfRTFILCBDU0VNX1JFR19QUkFNICsgMHhjYmIwLCAweDY0ZjAwMzI3fSwKKyNkZWZpbmUgQ1NFTV9DT01NT05fRU5EICAgICAgICAgMTAxNAorI2RlZmluZSBDU0VNX1BPUlQwX1NUQVJUICAgICAgICAxMDE0CiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQwMCwgMHhhMH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgwMDAsIDB4YTB9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDE5MDAsIDB4MTB9LApAQCAtMTEyMywxMSArMTIwOSwxMCBAQAogCXtPUF9XUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxMTgsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDQwNDAsIDB4Nn0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjMwMCwgMHhlfSwKLQl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjA0MCwgMHgzMH0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzA0MCwgMHg2fSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNDEwLCAweDMwfSwKLSNkZWZpbmUgQ1NFTV9QT1JUMF9FTkQgICAgICAgICAgOTU2Ci0jZGVmaW5lIENTRU1fUE9SVDFfU1RBUlQgICAgICAgIDk1NgorI2RlZmluZSBDU0VNX1BPUlQwX0VORCAgICAgICAgICAxMDI1CisjZGVmaW5lIENTRU1fUE9SVDFfU1RBUlQgICAgICAgIDEwMjUKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNjgwLCAweGEwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4ODI4MCwgMHhhMH0sCiAJe09QX1pSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTk0MCwgMHgxMH0sCkBAIC0xMTM3LDQ2ICsxMjIyLDUzIEBACiAJe09QX1dSX0UxLCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTExYywgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDA1OCwgMHg2fSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyMzM4LCAweGV9LAotCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MTAwLCAweDMwfSwKIAl7T1BfWlJfRTEsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMDU4LCAweDZ9LAogCXtPUF9aUl9FMSwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0ZDAsIDB4MzB9LAotI2RlZmluZSBDU0VNX1BPUlQxX0VORCAgICAgICAgICA5NjgKLSNkZWZpbmUgQ1NFTV9GVU5DMF9TVEFSVCAgICAgICAgOTY4CisjZGVmaW5lIENTRU1fUE9SVDFfRU5EICAgICAgICAgIDEwMzYKKyNkZWZpbmUgQ1NFTV9GVU5DMF9TVEFSVCAgICAgICAgMTAzNgogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTQ4LCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzAwLCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkMwX0VORCAgICAgICAgICA5NzAKLSNkZWZpbmUgQ1NFTV9GVU5DMV9TVEFSVCAgICAgICAgOTcwCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYwNDAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkMwX0VORCAgICAgICAgICAxMDM5CisjZGVmaW5lIENTRU1fRlVOQzFfU1RBUlQgICAgICAgIDEwMzkKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE0YywgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMwOCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DMV9FTkQgICAgICAgICAgOTcyCi0jZGVmaW5lIENTRU1fRlVOQzJfU1RBUlQgICAgICAgIDk3MgorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MTAwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DMV9FTkQgICAgICAgICAgMTA0MgorI2RlZmluZSBDU0VNX0ZVTkMyX1NUQVJUICAgICAgICAxMDQyCiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNTAsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMTAsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzJfRU5EICAgICAgICAgIDk3NAotI2RlZmluZSBDU0VNX0ZVTkMzX1NUQVJUICAgICAgICA5NzQKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjFjMCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzJfRU5EICAgICAgICAgIDEwNDUKKyNkZWZpbmUgQ1NFTV9GVU5DM19TVEFSVCAgICAgICAgMTA0NQogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTU0LCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzE4LCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkMzX0VORCAgICAgICAgICA5NzYKLSNkZWZpbmUgQ1NFTV9GVU5DNF9TVEFSVCAgICAgICAgOTc2CisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDYyODAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkMzX0VORCAgICAgICAgICAxMDQ4CisjZGVmaW5lIENTRU1fRlVOQzRfU1RBUlQgICAgICAgIDEwNDgKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE1OCwgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMyMCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DNF9FTkQgICAgICAgICAgOTc4Ci0jZGVmaW5lIENTRU1fRlVOQzVfU1RBUlQgICAgICAgIDk3OAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2MzQwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DNF9FTkQgICAgICAgICAgMTA1MQorI2RlZmluZSBDU0VNX0ZVTkM1X1NUQVJUICAgICAgICAxMDUxCiAJe09QX1dSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDExNWMsIDB4MH0sCiAJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzMjgsIDB4Mn0sCi0jZGVmaW5lIENTRU1fRlVOQzVfRU5EICAgICAgICAgIDk4MAotI2RlZmluZSBDU0VNX0ZVTkM2X1NUQVJUICAgICAgICA5ODAKKwl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NjQwMCwgMHgzMH0sCisjZGVmaW5lIENTRU1fRlVOQzVfRU5EICAgICAgICAgIDEwNTQKKyNkZWZpbmUgQ1NFTV9GVU5DNl9TVEFSVCAgICAgICAgMTA1NAogCXtPUF9XUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMTYwLCAweDB9LAogCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzMzMwLCAweDJ9LAotI2RlZmluZSBDU0VNX0ZVTkM2X0VORCAgICAgICAgICA5ODIKLSNkZWZpbmUgQ1NFTV9GVU5DN19TVEFSVCAgICAgICAgOTgyCisJe09QX1pSX0UxSCwgQ1NFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDY0YzAsIDB4MzB9LAorI2RlZmluZSBDU0VNX0ZVTkM2X0VORCAgICAgICAgICAxMDU3CisjZGVmaW5lIENTRU1fRlVOQzdfU1RBUlQgICAgICAgIDEwNTcKIAl7T1BfV1JfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE2NCwgMHgwfSwKIAl7T1BfWlJfRTFILCBDU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzMzOCwgMHgyfSwKLSNkZWZpbmUgQ1NFTV9GVU5DN19FTkQgICAgICAgICAgOTg0Ci0jZGVmaW5lIFhQQl9DT01NT05fU1RBUlQgICAgICAgIDk4NAorCXtPUF9aUl9FMUgsIENTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2NTgwLCAweDMwfSwKKyNkZWZpbmUgQ1NFTV9GVU5DN19FTkQgICAgICAgICAgMTA2MAorI2RlZmluZSBYUEJfQ09NTU9OX1NUQVJUICAgICAgICAxMDYwCiAJe09QX1dSLCBHUkNCQVNFX1hQQiArIFBCX1JFR19DT05UUk9MLCAweDIwfSwKLSNkZWZpbmUgWFBCX0NPTU1PTl9FTkQgICAgICAgICAgOTg1Ci0jZGVmaW5lIERRX0NPTU1PTl9TVEFSVCAgICAgICAgIDk4NQorI2RlZmluZSBYUEJfQ09NTU9OX0VORCAgICAgICAgICAxMDYxCisjZGVmaW5lIERRX0NPTU1PTl9TVEFSVCAgICAgICAgIDEwNjEKIAl7T1BfV1IsIERPUlFfUkVHX01PREVfQUNULCAweDJ9LAogCXtPUF9XUiwgRE9SUV9SRUdfTk9STV9DSURfT0ZTVCwgMHgzfSwKIAl7T1BfV1IsIERPUlFfUkVHX09VVFNUX1JFUSwgMHg0fSwKQEAgLTExOTUsOCArMTI4Nyw4IEBACiAJe09QX1dSLCBET1JRX1JFR19EUV9GSUZPX0FGVUxMX1RILCAweDc2Y30sCiAJe09QX1dSLCBET1JRX1JFR19SRUdOLCAweDdjMTAwNH0sCiAJe09QX1dSLCBET1JRX1JFR19JRl9FTiwgMHhmfSwKLSNkZWZpbmUgRFFfQ09NTU9OX0VORCAgICAgICAgICAgMTAwMwotI2RlZmluZSBUSU1FUlNfQ09NTU9OX1NUQVJUICAgICAxMDAzCisjZGVmaW5lIERRX0NPTU1PTl9FTkQgICAgICAgICAgIDEwNzkKKyNkZWZpbmUgVElNRVJTX0NPTU1PTl9TVEFSVCAgICAgMTA3OQogCXtPUF9aUiwgVE1fUkVHX0NMSU5fUFJJT1IwX0NMSUVOVCwgMHgyfSwKIAl7T1BfV1IsIFRNX1JFR19MSU5fU0VUQ0xSX0ZJRk9fQUxGVUxMX1RIUiwgMHgxY30sCiAJe09QX1dSLCBUTV9SRUdfQ0ZDX0FDX0NSRENOVF9WQUwsIDB4MX0sCkBAIC0xMjE5LDE0ICsxMzExLDE4IEBACiAJe09QX1dSLCBUTV9SRUdfRU5fQ0wwX0lOUFVULCAweDF9LAogCXtPUF9XUiwgVE1fUkVHX0VOX0NMMV9JTlBVVCwgMHgxfSwKIAl7T1BfV1IsIFRNX1JFR19FTl9DTDJfSU5QVVQsIDB4MX0sCi0jZGVmaW5lIFRJTUVSU19DT01NT05fRU5EICAgICAgIDEwMjUKLSNkZWZpbmUgVElNRVJTX1BPUlQwX1NUQVJUICAgICAgMTAyNQorI2RlZmluZSBUSU1FUlNfQ09NTU9OX0VORCAgICAgICAxMTAxCisjZGVmaW5lIFRJTUVSU19QT1JUMF9TVEFSVCAgICAgIDExMDEKKwl7T1BfV1IsIFRNX1JFR19MSU4wX0xPR0lDX0FERFIsIDB4MH0sCisJe09QX1dSLCBUTV9SRUdfTElOMF9QSFlfQUREUl9WQUxJRCwgMHgwfSwKIAl7T1BfWlIsIFRNX1JFR19MSU4wX1BIWV9BRERSLCAweDJ9LAotI2RlZmluZSBUSU1FUlNfUE9SVDBfRU5EICAgICAgICAxMDI2Ci0jZGVmaW5lIFRJTUVSU19QT1JUMV9TVEFSVCAgICAgIDEwMjYKKyNkZWZpbmUgVElNRVJTX1BPUlQwX0VORCAgICAgICAgMTEwNAorI2RlZmluZSBUSU1FUlNfUE9SVDFfU1RBUlQgICAgICAxMTA0CisJe09QX1dSLCBUTV9SRUdfTElOMV9MT0dJQ19BRERSLCAweDB9LAorCXtPUF9XUiwgVE1fUkVHX0xJTjFfUEhZX0FERFJfVkFMSUQsIDB4MH0sCiAJe09QX1pSLCBUTV9SRUdfTElOMV9QSFlfQUREUiwgMHgyfSwKLSNkZWZpbmUgVElNRVJTX1BPUlQxX0VORCAgICAgICAgMTAyNwotI2RlZmluZSBYU0RNX0NPTU1PTl9TVEFSVCAgICAgICAxMDI3CisjZGVmaW5lIFRJTUVSU19QT1JUMV9FTkQgICAgICAgIDExMDcKKyNkZWZpbmUgWFNETV9DT01NT05fU1RBUlQgICAgICAgMTEwNwogCXtPUF9XUl9FMSwgWFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDYxNH0sCiAJe09QX1dSX0UxSCwgWFNETV9SRUdfQ0ZDX1JTUF9TVEFSVF9BRERSLCAweDQyNH0sCiAJe09QX1dSX0UxLCBYU0RNX1JFR19DTVBfQ09VTlRFUl9TVEFSVF9BRERSLCAweDYwMH0sCkBAIC0xMjQ5LDcgKzEzNDUsOSBAQAogCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF85LCAweDI5fSwKIAl7T1BfV1IsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTAsIDB4MmF9LAogCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMSwgMHgyYn0sCi0Je09QX1pSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEyLCAweDU0fSwKKwl7T1BfV1IsIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIsIDB4MmN9LAorCXtPUF9XUiwgWFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMywgMHgyZH0sCisJe09QX1pSLCBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE0LCAweDUyfSwKIAl7T1BfV1IsIFhTRE1fUkVHX0FHR19JTlRfTU9ERV8wLCAweDF9LAogCXtPUF9aUiwgWFNETV9SRUdfQUdHX0lOVF9NT0RFXzEsIDB4MWZ9LAogCXtPUF9XUiwgWFNETV9SRUdfRU5BQkxFX0lOMSwgMHg3ZmZmZmZmfSwKQEAgLTEyNzQsOCArMTM3Miw4IEBACiAJe09QX1dSX0FTSUMsIFhTRE1fUkVHX1RJTUVSX1RJQ0ssIDB4M2U4fSwKIAl7T1BfV1JfRU1VTCwgWFNETV9SRUdfVElNRVJfVElDSywgMHgxfSwKIAl7T1BfV1JfRlBHQSwgWFNETV9SRUdfVElNRVJfVElDSywgMHhhfSwKLSNkZWZpbmUgWFNETV9DT01NT05fRU5EICAgICAgICAgMTA3NAotI2RlZmluZSBRTV9DT01NT05fU1RBUlQgICAgICAgICAxMDc0CisjZGVmaW5lIFhTRE1fQ09NTU9OX0VORCAgICAgICAgIDExNTYKKyNkZWZpbmUgUU1fQ09NTU9OX1NUQVJUICAgICAgICAgMTE1NgogCXtPUF9XUiwgUU1fUkVHX0FDVENUUklOSVRWQUxfMCwgMHg2fSwKIAl7T1BfV1IsIFFNX1JFR19BQ1RDVFJJTklUVkFMXzEsIDB4NX0sCiAJe09QX1dSLCBRTV9SRUdfQUNUQ1RSSU5JVFZBTF8yLCAweGF9LApAQCAtMTU3Niw4ICsxNjc0LDggQEAKIAl7T1BfV1JfRTFILCBRTV9SRUdfUFEyUENJRlVOQ182LCAweDV9LAogCXtPUF9XUl9FMUgsIFFNX1JFR19QUTJQQ0lGVU5DXzcsIDB4N30sCiAJe09QX1dSLCBRTV9SRUdfQ01JTlRFTiwgMHhmZn0sCi0jZGVmaW5lIFFNX0NPTU1PTl9FTkQgICAgICAgICAgIDEzNzQKLSNkZWZpbmUgUEJGX0NPTU1PTl9TVEFSVCAgICAgICAgMTM3NAorI2RlZmluZSBRTV9DT01NT05fRU5EICAgICAgICAgICAxNDU2CisjZGVmaW5lIFBCRl9DT01NT05fU1RBUlQgICAgICAgIDE0NTYKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVCwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QNCwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfTUFDX0xCX0VOQUJMRSwgMHgxfSwKQEAgLTE1ODUsMjAgKzE2ODMsMjAgQEAKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QNCwgMHgwfSwKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVCwgMHgwfSwKIAl7T1BfV1IsIFBCRl9SRUdfRElTQUJMRV9ORVdfVEFTS19QUk9DX1A0LCAweDB9LAotI2RlZmluZSBQQkZfQ09NTU9OX0VORCAgICAgICAgICAxMzgxCi0jZGVmaW5lIFBCRl9QT1JUMF9TVEFSVCAgICAgICAgIDEzODEKKyNkZWZpbmUgUEJGX0NPTU1PTl9FTkQgICAgICAgICAgMTQ2MworI2RlZmluZSBQQkZfUE9SVDBfU1RBUlQgICAgICAgICAxNDYzCiAJe09QX1dSLCBQQkZfUkVHX0lOSVRfUDAsIDB4MX0sCiAJe09QX1dSLCBQQkZfUkVHX01BQ19JRjBfRU5BQkxFLCAweDF9LAogCXtPUF9XUiwgUEJGX1JFR19JTklUX1AwLCAweDB9LAogCXtPUF9XUiwgUEJGX1JFR19ESVNBQkxFX05FV19UQVNLX1BST0NfUDAsIDB4MH0sCi0jZGVmaW5lIFBCRl9QT1JUMF9FTkQgICAgICAgICAgIDEzODUKLSNkZWZpbmUgUEJGX1BPUlQxX1NUQVJUICAgICAgICAgMTM4NQorI2RlZmluZSBQQkZfUE9SVDBfRU5EICAgICAgICAgICAxNDY3CisjZGVmaW5lIFBCRl9QT1JUMV9TVEFSVCAgICAgICAgIDE0NjcKIAl7T1BfV1IsIFBCRl9SRUdfSU5JVF9QMSwgMHgxfSwKIAl7T1BfV1IsIFBCRl9SRUdfTUFDX0lGMV9FTkFCTEUsIDB4MX0sCiAJe09QX1dSLCBQQkZfUkVHX0lOSVRfUDEsIDB4MH0sCiAJe09QX1dSLCBQQkZfUkVHX0RJU0FCTEVfTkVXX1RBU0tfUFJPQ19QMSwgMHgwfSwKLSNkZWZpbmUgUEJGX1BPUlQxX0VORCAgICAgICAgICAgMTM4OQotI2RlZmluZSBYQ01fQ09NTU9OX1NUQVJUICAgICAgICAxMzg5CisjZGVmaW5lIFBCRl9QT1JUMV9FTkQgICAgICAgICAgIDE0NzEKKyNkZWZpbmUgWENNX0NPTU1PTl9TVEFSVCAgICAgICAgMTQ3MQogCXtPUF9XUiwgWENNX1JFR19YWF9PVkZMX0VWTlRfSUQsIDB4MzJ9LAogCXtPUF9XUiwgWENNX1JFR19YUU1fWENNX0hEUl9QLCAweDMxNTAwMjB9LAogCXtPUF9XUiwgWENNX1JFR19YUU1fWENNX0hEUl9TLCAweDMxNTAwMjB9LApAQCAtMTYwNywxNSArMTcwNSwxOCBAQAogCXtPUF9XUiwgWENNX1JFR19FUlJfRVZOVF9JRCwgMHgzM30sCiAJe09QX1dSLCBYQ01fUkVHX0VYUFJfRVZOVF9JRCwgMHgzMH0sCiAJe09QX1dSLCBYQ01fUkVHX1NUT1BfRVZOVF9JRCwgMHgzMX0sCi0Je09QX1dSLCBYQ01fUkVHX1NUT1JNX1dFSUdIVCwgMHgyfSwKLQl7T1BfV1IsIFhDTV9SRUdfVFNFTV9XRUlHSFQsIDB4NX0sCi0Je09QX1dSLCBYQ01fUkVHX0NTRU1fV0VJR0hULCAweDJ9LAotCXtPUF9XUiwgWENNX1JFR19VU0VNX1dFSUdIVCwgMHgyfSwKLQl7T1BfV1IsIFhDTV9SRUdfUEJGX1dFSUdIVCwgMHg3fSwKLQl7T1BfV1IsIFhDTV9SRUdfTklHMV9XRUlHSFQsIDB4MX0sCisJe09QX1dSLCBYQ01fUkVHX1NUT1JNX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIFhDTV9SRUdfVFNFTV9XRUlHSFQsIDB4Nn0sCisJe09QX1dSLCBYQ01fUkVHX0NTRU1fV0VJR0hULCAweDN9LAorCXtPUF9XUiwgWENNX1JFR19VU0VNX1dFSUdIVCwgMHgzfSwKKwl7T1BfV1IsIFhDTV9SRUdfRE9SUV9XRUlHSFQsIDB4Mn0sCisJe09QX1dSLCBYQ01fUkVHX1BCRl9XRUlHSFQsIDB4MH0sCisJe09QX1dSLCBYQ01fUkVHX05JRzBfV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgWENNX1JFR19DUF9XRUlHSFQsIDB4MH0sCi0Je09QX1dSLCBYQ01fUkVHX1hTRE1fV0VJR0hULCAweDV9LAotCXtPUF9XUiwgWENNX1JFR19YUU1fUF9XRUlHSFQsIDB4M30sCisJe09QX1dSLCBYQ01fUkVHX1hTRE1fV0VJR0hULCAweDZ9LAorCXtPUF9XUiwgWENNX1JFR19YUU1fUF9XRUlHSFQsIDB4NH0sCisJe09QX1dSLCBYQ01fUkVHX1hRTV9TX1dFSUdIVCwgMHgyfSwKKwl7T1BfV1IsIFhDTV9SRUdfVE1fV0VJR0hULCAweDJ9LAogCXtPUF9XUiwgWENNX1JFR19YQ01fWFFNX1VTRV9RLCAweDF9LAogCXtPUF9XUiwgWENNX1JFR19YUU1fQllQX0FDVF9VUEQsIDB4Nn0sCiAJe09QX1dSLCBYQ01fUkVHX1VOQV9HVF9OWFRfUSwgMHgwfSwKQEAgLTE2MzMsMTQgKzE3MzQsMTQgQEAKIAl7T1BfV1JfRTEsIFhDTV9SRUdfWFhfTVNHX05VTSwgMHgxZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19YWF9NU0dfTlVNLCAweDIwfSwKIAl7T1BfWlIsIFhDTV9SRUdfWFhfVEFCTEUsIDB4MTJ9LAotCXtPUF9TV19FMSwgWENNX1JFR19YWF9ERVNDUl9UQUJMRSwgMHgxZjAyY2N9LAotCXtPUF9TV19FMUgsIFhDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWYwMzAyfSwKKwl7T1BfU1dfRTEsIFhDTV9SRUdfWFhfREVTQ1JfVEFCTEUsIDB4MWYwMmQ0fSwKKwl7T1BfU1dfRTFILCBYQ01fUkVHX1hYX0RFU0NSX1RBQkxFLCAweDFmMDMyOX0sCiAJe09QX1dSLCBYQ01fUkVHX05fU01fQ1RYX0xEXzAsIDB4Zn0sCiAJe09QX1dSLCBYQ01fUkVHX05fU01fQ1RYX0xEXzEsIDB4N30sCiAJe09QX1dSLCBYQ01fUkVHX05fU01fQ1RYX0xEXzIsIDB4Yn0sCiAJe09QX1dSLCBYQ01fUkVHX05fU01fQ1RYX0xEXzMsIDB4ZX0sCiAJe09QX1pSX0UxLCBYQ01fUkVHX05fU01fQ1RYX0xEXzQsIDB4NH0sCi0Je09QX1dSX0UxSCwgWENNX1JFR19OX1NNX0NUWF9MRF80LCAweGN9LAorCXtPUF9XUl9FMUgsIFhDTV9SRUdfTl9TTV9DVFhfTERfNCwgMHhlfSwKIAl7T1BfWlJfRTFILCBYQ01fUkVHX05fU01fQ1RYX0xEXzUsIDB4M30sCiAJe09QX1dSLCBYQ01fUkVHX1hDTV9SRUcwX1NaLCAweDR9LAogCXtPUF9XUiwgWENNX1JFR19YQ01fU1RPUk0wX0lGRU4sIDB4MX0sCkBAIC0xNjYzLDggKzE3NjQsOCBAQAogCXtPUF9XUiwgWENNX1JFR19DRFVfU01fV1JfSUZFTiwgMHgxfSwKIAl7T1BfV1IsIFhDTV9SRUdfQ0RVX1NNX1JEX0lGRU4sIDB4MX0sCiAJe09QX1dSLCBYQ01fUkVHX1hDTV9DRkNfSUZFTiwgMHgxfSwKLSNkZWZpbmUgWENNX0NPTU1PTl9FTkQgICAgICAgICAgMTQ1MwotI2RlZmluZSBYQ01fUE9SVDBfU1RBUlQgICAgICAgICAxNDUzCisjZGVmaW5lIFhDTV9DT01NT05fRU5EICAgICAgICAgIDE1MzgKKyNkZWZpbmUgWENNX1BPUlQwX1NUQVJUICAgICAgICAgMTUzOAogCXtPUF9XUl9FMSwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzAsIDB4Yzh9LAogCXtPUF9XUl9FMSwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzAsIDB4Mn0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKQEAgLTE2NzMsOCArMTc3NCw4IEBACiAJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX0NOVF9DTUQxMCwgMHgyfSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMCwgMHhmZn0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTAsIDB4ZmZ9LAotI2RlZmluZSBYQ01fUE9SVDBfRU5EICAgICAgICAgICAxNDYxCi0jZGVmaW5lIFhDTV9QT1JUMV9TVEFSVCAgICAgICAgIDE0NjEKKyNkZWZpbmUgWENNX1BPUlQwX0VORCAgICAgICAgICAgMTU0NgorI2RlZmluZSBYQ01fUE9SVDFfU1RBUlQgICAgICAgICAxNTQ2CiAJe09QX1dSX0UxLCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMSwgMHhjOH0sCiAJe09QX1dSX0UxLCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAxLCAweDB9LApAQCAtMTY4Myw4ICsxNzg0LDggQEAKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX0NNRDExLCAweDJ9LAogCXtPUF9XUl9FMSwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAxLCAweGZmfSwKIAl7T1BfV1JfRTEsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCi0jZGVmaW5lIFhDTV9QT1JUMV9FTkQgICAgICAgICAgIDE0NjkKLSNkZWZpbmUgWENNX0ZVTkMwX1NUQVJUICAgICAgICAgMTQ2OQorI2RlZmluZSBYQ01fUE9SVDFfRU5EICAgICAgICAgICAxNTU0CisjZGVmaW5lIFhDTV9GVU5DMF9TVEFSVCAgICAgICAgIDE1NTQKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMCwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzAsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDAsIDB4MH0sCkBAIC0xNjk0LDggKzE3OTUsOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDEwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkMwX0VORCAgICAgICAgICAgMTQ3OAotI2RlZmluZSBYQ01fRlVOQzFfU1RBUlQgICAgICAgICAxNDc4CisjZGVmaW5lIFhDTV9GVU5DMF9FTkQgICAgICAgICAgIDE1NjMKKyNkZWZpbmUgWENNX0ZVTkMxX1NUQVJUICAgICAgICAgMTU2MwogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMSwgMHgwfSwKQEAgLTE3MDUsOCArMTgwNiw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAxLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzFfRU5EICAgICAgICAgICAxNDg3Ci0jZGVmaW5lIFhDTV9GVU5DMl9TVEFSVCAgICAgICAgIDE0ODcKKyNkZWZpbmUgWENNX0ZVTkMxX0VORCAgICAgICAgICAgMTU3MgorI2RlZmluZSBYQ01fRlVOQzJfU1RBUlQgICAgICAgICAxNTcyCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzAsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8wLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAwLCAweDB9LApAQCAtMTcxNiw4ICsxODE3LDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzAsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DMl9FTkQgICAgICAgICAgIDE0OTYKLSNkZWZpbmUgWENNX0ZVTkMzX1NUQVJUICAgICAgICAgMTQ5NgorI2RlZmluZSBYQ01fRlVOQzJfRU5EICAgICAgICAgICAxNTgxCisjZGVmaW5lIFhDTV9GVU5DM19TVEFSVCAgICAgICAgIDE1ODEKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMSwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzEsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDEsIDB4MH0sCkBAIC0xNzI3LDggKzE4MjgsOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDExLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMSwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkMzX0VORCAgICAgICAgICAgMTUwNQotI2RlZmluZSBYQ01fRlVOQzRfU1RBUlQgICAgICAgICAxNTA1CisjZGVmaW5lIFhDTV9GVU5DM19FTkQgICAgICAgICAgIDE1OTAKKyNkZWZpbmUgWENNX0ZVTkM0X1NUQVJUICAgICAgICAgMTU5MAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8wLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMCwgMHgwfSwKQEAgLTE3MzgsOCArMTgzOSw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTAsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18wLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzRfRU5EICAgICAgICAgICAxNTE0Ci0jZGVmaW5lIFhDTV9GVU5DNV9TVEFSVCAgICAgICAgIDE1MTQKKyNkZWZpbmUgWENNX0ZVTkM0X0VORCAgICAgICAgICAgMTU5OQorI2RlZmluZSBYQ01fRlVOQzVfU1RBUlQgICAgICAgICAxNTk5CiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19UTVJfVkFMXzEsIDB4Yzh9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfTUFYX0NOVF8xLCAweDJ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfU0VUX1RNUl9DTlRfRkxHX0NNRDAxLCAweDB9LApAQCAtMTc0OSw4ICsxODUwLDggQEAKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMDEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwxMSwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19QSFlTX1FOVU0zXzEsIDB4MH0sCi0jZGVmaW5lIFhDTV9GVU5DNV9FTkQgICAgICAgICAgIDE1MjMKLSNkZWZpbmUgWENNX0ZVTkM2X1NUQVJUICAgICAgICAgMTUyMworI2RlZmluZSBYQ01fRlVOQzVfRU5EICAgICAgICAgICAxNjA4CisjZGVmaW5lIFhDTV9GVU5DNl9TVEFSVCAgICAgICAgIDE2MDgKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX1RNUl9WQUxfMCwgMHhjOH0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19HTEJfREVMX0FDS19NQVhfQ05UXzAsIDB4Mn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9TRVRfVE1SX0NOVF9GTEdfQ01EMDAsIDB4MH0sCkBAIC0xNzYwLDggKzE4NjEsOCBAQAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfV1VfREFfQ05UX1VQRF9WQUwwMCwgMHhmZn0sCiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDEwLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1BIWVNfUU5VTTNfMCwgMHgwfSwKLSNkZWZpbmUgWENNX0ZVTkM2X0VORCAgICAgICAgICAgMTUzMgotI2RlZmluZSBYQ01fRlVOQzdfU1RBUlQgICAgICAgICAxNTMyCisjZGVmaW5lIFhDTV9GVU5DNl9FTkQgICAgICAgICAgIDE2MTcKKyNkZWZpbmUgWENNX0ZVTkM3X1NUQVJUICAgICAgICAgMTYxNwogCXtPUF9XUl9FMUgsIFhDTV9SRUdfR0xCX0RFTF9BQ0tfVE1SX1ZBTF8xLCAweGM4fSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX0dMQl9ERUxfQUNLX01BWF9DTlRfMSwgMHgyfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX1NFVF9UTVJfQ05UX0ZMR19DTUQwMSwgMHgwfSwKQEAgLTE3NzEsOCArMTg3Miw4IEBACiAJe09QX1dSX0UxSCwgWENNX1JFR19XVV9EQV9DTlRfVVBEX1ZBTDAxLCAweGZmfSwKIAl7T1BfV1JfRTFILCBYQ01fUkVHX1dVX0RBX0NOVF9VUERfVkFMMTEsIDB4ZmZ9LAogCXtPUF9XUl9FMUgsIFhDTV9SRUdfUEhZU19RTlVNM18xLCAweDB9LAotI2RlZmluZSBYQ01fRlVOQzdfRU5EICAgICAgICAgICAxNTQxCi0jZGVmaW5lIFhTRU1fQ09NTU9OX1NUQVJUICAgICAgIDE1NDEKKyNkZWZpbmUgWENNX0ZVTkM3X0VORCAgICAgICAgICAgMTYyNgorI2RlZmluZSBYU0VNX0NPTU1PTl9TVEFSVCAgICAgICAxNjI2CiAJe09QX1JELCBYU0VNX1JFR19NU0dfTlVNX0ZJQzAsIDB4MH0sCiAJe09QX1JELCBYU0VNX1JFR19NU0dfTlVNX0ZJQzEsIDB4MH0sCiAJe09QX1JELCBYU0VNX1JFR19NU0dfTlVNX0ZPQzAsIDB4MH0sCkBAIC0xODI3LDEwICsxOTI4LDEyIEBACiAJe09QX1dSX0FTSUMsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4MCwgMHgxZGNkNjUwMH0sCiAJe09QX1dSX0VNVUxfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE0ODAsIDB4MH0sCiAJe09QX1dSX0ZQR0EsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODM4MCwgMHg0YzRiNDB9LAotCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNkMDAsIDB4NH0sCisJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2Q2MCwgMHg0fSwKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTE0ODAsIDB4MX0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2Q2MCArIDB4MTAsIDB4MjAyZjN9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWM4LCAweDR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMwMDAsIDB4NDh9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOGE4LCAweDR9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWM4ICsgMHgxMCwgMHgyMDM0OH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTAyMCwgMHhjOH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwODAsIDB4NDh9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwMDAsIDB4Mn0sCkBAIC0xODM5LDY4ICsxOTQyLDczIEBACiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDkwMDAsIDB4Mn0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM2OCwgMHgwfSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjFhOCwgMHg4Nn0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM3MCwgMHgyMDJlYn0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzM3MCwgMHgyMDJmNX0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDIwMDAsIDB4MjB9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiOTAsIDB4NDAyZWR9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiOTAsIDB4NDAyZjd9LAogCXtPUF9XUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyM2M4LCAweDB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNlMjAsIDB4MjAyZmJ9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyM2QwLCAweDIwMzRhfSwKIAl7T1BfV1JfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNTE4LCAweDF9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyM2QwLCAweDIwMzIxfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjQ5OCwgMHg0MDM0Y30sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzMCwgMHgwfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjQ5OCwgMHg0MDMyM30sCisJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDJjMjAsIDB4MH0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTgzOCwgMHgwfSwKLQl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmFjOCwgMHgwfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODIwLCAweDIwMmYxfSwKLQl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmFiOCwgMHgwfSwKKwl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmMxMCwgMHgwfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxODIwLCAweDIwMmZkfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmMwOCwgMHgyMDM1MH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NGFjMCwgMHgyfSwKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAxMCwgMHgxfSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0YjAwLCAweDR9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDQwLCAweDEwfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxZjUwLCAweDIwMmYzfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NDAwMCwgMHgxMDAzMjd9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDFmNDgsIDB4MjAyZmZ9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg0MDAwLCAweDEwMDM1Mn0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZhYzAsIDB4Mn0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiMDAsIDB4NH0sCi0Je09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDgzYjAsIDB4MjAzMzd9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg4NDA4LCAweDIwMzYyfSwKIAl7T1BfV1IsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMDgwMCwgMHgwfSwKLQl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAyZjV9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGMwMCwgMHgxMDAzMzl9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDMwMX0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzAwLCAweDEwMDM2NH0sCiAJe09QX1dSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MTAwMDAwMH0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4ODAzMDV9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHg4MDM0OX0sCisJe09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNDAsIDB4ODAzMTF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM0MCwgMHg4MDM3NH0sCiAJe09QX1dSLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTA4MDAsIDB4MjAwMDAwMH0sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNjAsIDB4ODAzMGR9LAotCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxMGM2MCwgMHg4MDM1MX0sCi0Je09QX1pQX0UxLCBYU0VNX1JFR19JTlRfVEFCTEUsIDB4YTkwMDAwfSwKLQl7T1BfWlBfRTFILCBYU0VNX1JFR19JTlRfVEFCTEUsIDB4YWMwMDAwfSwKLQl7T1BfV1JfNjRfRTEsIFhTRU1fUkVHX0lOVF9UQUJMRSArIDB4MzY4LCAweDEzMDMxNX0sCi0Je09QX1dSXzY0X0UxSCwgWFNFTV9SRUdfSU5UX1RBQkxFICsgMHgzNjgsIDB4MTMwMzU5fSwKLQl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0sIDB4MzQ0ZTAwMDB9LAotCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0sIDB4MzQ2MjAwMDB9LAotCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzODg0MGQxNH0sCi0Je09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzODI0MGQxOX0sCi0Je09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzZTcxMWIzNX0sCi0Je09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4M2U5NzFiMjJ9LAotCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MWRkMDJhZDJ9LAotCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDIxNTQyYWM4fSwKLQl7T1BfV1JfNjRfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDFjMGQwLCAweDQ3ZTYwMzE3fSwKLQl7T1BfV1JfNjRfRTFILCBYU0VNX1JFR19QUkFNICsgMHgxYzhkMCwgMHg0NmU2MDM1Yn0sCi0jZGVmaW5lIFhTRU1fQ09NTU9OX0VORCAgICAgICAgIDE2NTEKLSNkZWZpbmUgWFNFTV9QT1JUMF9TVEFSVCAgICAgICAgMTY1MQotCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiYTAsIDB4MTB9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDEwYzYwLCAweDgwMzE5fSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTBjNjAsIDB4ODAzN2N9LAorCXtPUF9aUF9FMSwgWFNFTV9SRUdfSU5UX1RBQkxFLCAweGI1MDAwMH0sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfSU5UX1RBQkxFLCAweGJkMDAwMH0sCisJe09QX1dSXzY0X0UxLCBYU0VNX1JFR19JTlRfVEFCTEUgKyAweDM2OCwgMHgxMzAzMjF9LAorCXtPUF9XUl82NF9FMUgsIFhTRU1fUkVHX0lOVF9UQUJMRSArIDB4M2E4LCAweGIwMzg0fSwKKwl7T1BfWlBfRTEsIFhTRU1fUkVHX1BSQU0sIDB4MzM2NjAwMDB9LAorCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0sIDB4MzQwNjAwMDB9LAorCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzOGIzMGNkYX0sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4ODAwMCwgMHgzNzk2MGQwMn0sCisJe09QX1pQX0UxLCBYU0VNX1JFR19QUkFNICsgMHgxMDAwMCwgMHgzYmIxMWIwN30sCisJe09QX1pQX0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MTAwMDAsIDB4M2JjMzFhZTh9LAorCXtPUF9aUF9FMSwgWFNFTV9SRUdfUFJBTSArIDB4MTgwMDAsIDB4MmEyNjI5ZjR9LAorCXtPUF9aUF9FMUgsIFhTRU1fUkVHX1BSQU0gKyAweDE4MDAwLCAweDM4MjYyOWQ5fSwKKwl7T1BfV1JfNjRfRTEsIFhTRU1fUkVHX1BSQU0gKyAweDFkNmMwLCAweDQ1MjgwMzIzfSwKKwl7T1BfWlBfRTFILCBYU0VNX1JFR19QUkFNICsgMHgyMDAwMCwgMHgxMjQ1MzdlM30sCisJe09QX1dSXzY0X0UxSCwgWFNFTV9SRUdfUFJBTSArIDB4MjIyMjAsIDB4M2JiYzAzODZ9LAorI2RlZmluZSBYU0VNX0NPTU1PTl9FTkQgICAgICAgICAxNzQxCisjZGVmaW5lIFhTRU1fUE9SVDBfU1RBUlQgICAgICAgIDE3NDEKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYmEwLCAweDE0fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YzAwMCwgMHhmY30sCi0Je09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2MyMCwgMHgxY30sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0YTgsIDB4MTB9LAorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNjNDAsIDB4MjR9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNGE4LCAweDE0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDAwLCAweGF9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNTI4LCAweDFjfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjU0OCwgMHgyNH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQ1MCwgMHg2fSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjYwOCwgMHgxY30sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI2NjgsIDB4MjR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDMzNzgsIDB4ZmN9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNmU4LCAweDFjfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mjc4OCwgMHgyNH0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2I1OCwgMHgwfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjdjOCwgMHgxY30sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2QxMCwgMHgxMDAzMTl9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOGE4LCAweDI0fSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDc4LCAweDIwMzI1fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTAwMCwgMHgyOH0sCi0Je09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwMCwgMHgwfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDg4LCAweDEwMDMyN30sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGExNDAsIDB4Y30sCisJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwMCwgMHgwfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjllMCwgMHgyMDM4OH0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwOCwgMHgxfSwKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwMCwgMHgxfSwKIAl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDIwLCAweDJ9LApAQCAtMTkxMCwzMSArMjAxOCwzMyBAQAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNDAsIDB4MH0sCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyMDgsIDB4MX0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA0OCwgMHhlfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFjOCwgMHgyMDM1ZH0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZhYzgsIDB4MjAzOGF9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwYjgsIDB4MX0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZiMTAsIDB4NDJ9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRhYzgsIDB4MjAzMjl9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRhYzgsIDB4MjAzMzd9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2ZDIwLCAweDR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRiMTAsIDB4NDJ9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRkMjAsIDB4NH0sCi0jZGVmaW5lIFhTRU1fUE9SVDBfRU5EICAgICAgICAgIDE2ODMKLSNkZWZpbmUgWFNFTV9QT1JUMV9TVEFSVCAgICAgICAgMTY4MwotCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNiZTAsIDB4MTB9LAorI2RlZmluZSBYU0VNX1BPUlQwX0VORCAgICAgICAgICAxNzc1CisjZGVmaW5lIFhTRU1fUE9SVDFfU1RBUlQgICAgICAgIDE3NzUKKwl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzYmYwLCAweDE0fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YzNmMCwgMHhmY30sCi0Je09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2M5MCwgMHgxY30sCi0Je09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI0ZTgsIDB4MTB9LAorCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDNjZDAsIDB4MjR9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNGY4LCAweDE0fSwKIAl7T1BfWlJfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgxNDI4LCAweGF9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNTk4LCAweDFjfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjVkOCwgMHgyNH0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTQ2OCwgMHg2fSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjY3OCwgMHgxY30sCisJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDI2ZjgsIDB4MjR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDM3NjgsIDB4ZmN9LAotCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyNzU4LCAweDFjfSwKKwl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjgxOCwgMHgyNH0sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2I1YywgMHgwfSwKLQl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjgzOCwgMHgxY30sCi0Je09QX1NXX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4M2Q1MCwgMHgxMDAzMmJ9LAorCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOTM4LCAweDI0fSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZDgwLCAweDIwMzM5fSwKIAl7T1BfWlJfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YTBhMCwgMHgyOH0sCi0Je09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwNCwgMHgwfSwKKwl7T1BfU1dfRTEsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgzZGM4LCAweDEwMDMzYn0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweGExNzAsIDB4Y30sCisJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwNCwgMHgwfSwKKwl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjllOCwgMHgyMDM4Y30sCiAJe09QX1dSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MTUwYywgMHgxfSwKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MzAwNCwgMHgxfSwKIAl7T1BfWlIsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg1MDI4LCAweDJ9LApAQCAtMTk0NCw2OCArMjA1NCw2OCBAQAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNDQsIDB4MH0sCiAJe09QX1dSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUyMGMsIDB4MX0sCiAJe09QX1pSX0UxLCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NTA4MCwgMHhlfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4NmFkMCwgMHgyMDM1Zn0sCisJe09QX1NXX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZhZDAsIDB4MjAzOGV9LAogCXtPUF9XUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwYmMsIDB4MX0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDZjMTgsIDB4NDJ9LAotCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRhZDAsIDB4MjAzM2J9LAorCXtPUF9TV19FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRhZDAsIDB4MjAzNGJ9LAogCXtPUF9aUl9FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHg2ZDMwLCAweDR9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRjMTgsIDB4NDJ9LAogCXtPUF9aUl9FMSwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDRkMzAsIDB4NH0sCi0jZGVmaW5lIFhTRU1fUE9SVDFfRU5EICAgICAgICAgIDE3MTUKLSNkZWZpbmUgWFNFTV9GVU5DMF9TVEFSVCAgICAgICAgMTcxNQorI2RlZmluZSBYU0VNX1BPUlQxX0VORCAgICAgICAgICAxODA5CisjZGVmaW5lIFhTRU1fRlVOQzBfU1RBUlQgICAgICAgIDE4MDkKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YzdlMCwgMHgwfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjhiOCwgMHgxMDAzNjF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyOWYwLCAweDEwMDM5MH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwNDgsIDB4ZX0sCi0jZGVmaW5lIFhTRU1fRlVOQzBfRU5EICAgICAgICAgIDE3MTgKLSNkZWZpbmUgWFNFTV9GVU5DMV9TVEFSVCAgICAgICAgMTcxOAorI2RlZmluZSBYU0VNX0ZVTkMwX0VORCAgICAgICAgICAxODEyCisjZGVmaW5lIFhTRU1fRlVOQzFfU1RBUlQgICAgICAgIDE4MTIKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YzdlNCwgMHgwfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjhmOCwgMHgxMDAzNzF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTMwLCAweDEwMDNhMH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwODAsIDB4ZX0sCi0jZGVmaW5lIFhTRU1fRlVOQzFfRU5EICAgICAgICAgIDE3MjEKLSNkZWZpbmUgWFNFTV9GVU5DMl9TVEFSVCAgICAgICAgMTcyMQorI2RlZmluZSBYU0VNX0ZVTkMxX0VORCAgICAgICAgICAxODE1CisjZGVmaW5lIFhTRU1fRlVOQzJfU1RBUlQgICAgICAgIDE4MTUKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YzdlOCwgMHgwfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjkzOCwgMHgxMDAzODF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYTcwLCAweDEwMDNiMH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwYjgsIDB4ZX0sCi0jZGVmaW5lIFhTRU1fRlVOQzJfRU5EICAgICAgICAgIDE3MjQKLSNkZWZpbmUgWFNFTV9GVU5DM19TVEFSVCAgICAgICAgMTcyNAorI2RlZmluZSBYU0VNX0ZVTkMyX0VORCAgICAgICAgICAxODE4CisjZGVmaW5lIFhTRU1fRlVOQzNfU1RBUlQgICAgICAgIDE4MTgKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YzdlYywgMHgwfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4Mjk3OCwgMHgxMDAzOTF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWIwLCAweDEwMDNjMH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUwZjAsIDB4ZX0sCi0jZGVmaW5lIFhTRU1fRlVOQzNfRU5EICAgICAgICAgIDE3MjcKLSNkZWZpbmUgWFNFTV9GVU5DNF9TVEFSVCAgICAgICAgMTcyNworI2RlZmluZSBYU0VNX0ZVTkMzX0VORCAgICAgICAgICAxODIxCisjZGVmaW5lIFhTRU1fRlVOQzRfU1RBUlQgICAgICAgIDE4MjEKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YzdmMCwgMHgwfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjliOCwgMHgxMDAzYTF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYWYwLCAweDEwMDNkMH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxMjgsIDB4ZX0sCi0jZGVmaW5lIFhTRU1fRlVOQzRfRU5EICAgICAgICAgIDE3MzAKLSNkZWZpbmUgWFNFTV9GVU5DNV9TVEFSVCAgICAgICAgMTczMAorI2RlZmluZSBYU0VNX0ZVTkM0X0VORCAgICAgICAgICAxODI0CisjZGVmaW5lIFhTRU1fRlVOQzVfU1RBUlQgICAgICAgIDE4MjQKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YzdmNCwgMHgwfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MjlmOCwgMHgxMDAzYjF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjMwLCAweDEwMDNlMH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxNjAsIDB4ZX0sCi0jZGVmaW5lIFhTRU1fRlVOQzVfRU5EICAgICAgICAgIDE3MzMKLSNkZWZpbmUgWFNFTV9GVU5DNl9TVEFSVCAgICAgICAgMTczMworI2RlZmluZSBYU0VNX0ZVTkM1X0VORCAgICAgICAgICAxODI3CisjZGVmaW5lIFhTRU1fRlVOQzZfU1RBUlQgICAgICAgIDE4MjcKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YzdmOCwgMHgwfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmEzOCwgMHgxMDAzYzF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYjcwLCAweDEwMDNmMH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxOTgsIDB4ZX0sCi0jZGVmaW5lIFhTRU1fRlVOQzZfRU5EICAgICAgICAgIDE3MzYKLSNkZWZpbmUgWFNFTV9GVU5DN19TVEFSVCAgICAgICAgMTczNgorI2RlZmluZSBYU0VNX0ZVTkM2X0VORCAgICAgICAgICAxODMwCisjZGVmaW5lIFhTRU1fRlVOQzdfU1RBUlQgICAgICAgIDE4MzAKIAl7T1BfV1JfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4YzdmYywgMHgwfSwKLQl7T1BfU1dfRTFILCBYU0VNX1JFR19GQVNUX01FTU9SWSArIDB4MmE3OCwgMHgxMDAzZDF9LAorCXtPUF9TV19FMUgsIFhTRU1fUkVHX0ZBU1RfTUVNT1JZICsgMHgyYmIwLCAweDEwMDQwMH0sCiAJe09QX1pSX0UxSCwgWFNFTV9SRUdfRkFTVF9NRU1PUlkgKyAweDUxZDAsIDB4ZX0sCi0jZGVmaW5lIFhTRU1fRlVOQzdfRU5EICAgICAgICAgIDE3MzkKLSNkZWZpbmUgQ0RVX0NPTU1PTl9TVEFSVCAgICAgICAgMTczOQorI2RlZmluZSBYU0VNX0ZVTkM3X0VORCAgICAgICAgICAxODMzCisjZGVmaW5lIENEVV9DT01NT05fU1RBUlQgICAgICAgIDE4MzMKIAl7T1BfV1IsIENEVV9SRUdfQ0RVX0NPTlRST0wwLCAweDF9LAogCXtPUF9XUl9FMUgsIENEVV9SRUdfTUZfTU9ERSwgMHgxfSwKIAl7T1BfV1IsIENEVV9SRUdfQ0RVX0NIS19NQVNLMCwgMHgzZDAwMH0sCiAJe09QX1dSLCBDRFVfUkVHX0NEVV9DSEtfTUFTSzEsIDB4M2R9LAotCXtPUF9XQl9FMSwgQ0RVX1JFR19MMVRULCAweDIwMDAzM2R9LAotCXtPUF9XQl9FMUgsIENEVV9SRUdfTDFUVCwgMHgyMDAwM2UxfSwKLQl7T1BfV0JfRTEsIENEVV9SRUdfTUFUVCwgMHgyMDA1M2R9LAotCXtPUF9XQl9FMUgsIENEVV9SRUdfTUFUVCwgMHgyODA1ZTF9LAorCXtPUF9XQl9FMSwgQ0RVX1JFR19MMVRULCAweDIwMDAzNGR9LAorCXtPUF9XQl9FMUgsIENEVV9SRUdfTDFUVCwgMHgyMDAwNDEwfSwKKwl7T1BfV0JfRTEsIENEVV9SRUdfTUFUVCwgMHgyMDA1NGR9LAorCXtPUF9XQl9FMUgsIENEVV9SRUdfTUFUVCwgMHgyODA2MTB9LAogCXtPUF9aUl9FMSwgQ0RVX1JFR19NQVRUICsgMHg4MCwgMHgyfSwKLQl7T1BfV0JfRTEsIENEVV9SRUdfTUFUVCArIDB4ODgsIDB4NjA1NWR9LAorCXtPUF9XQl9FMSwgQ0RVX1JFR19NQVRUICsgMHg4OCwgMHg2MDU2ZH0sCiAJe09QX1pSLCBDRFVfUkVHX01BVFQgKyAweGEwLCAweDE4fSwKLSNkZWZpbmUgQ0RVX0NPTU1PTl9FTkQgICAgICAgICAgMTc1MAotI2RlZmluZSBETUFFX0NPTU1PTl9TVEFSVCAgICAgICAxNzUwCisjZGVmaW5lIENEVV9DT01NT05fRU5EICAgICAgICAgIDE4NDQKKyNkZWZpbmUgRE1BRV9DT01NT05fU1RBUlQgICAgICAgMTg0NAogCXtPUF9aUiwgRE1BRV9SRUdfQ01EX01FTSwgMHhlMH0sCiAJe09QX1dSLCBETUFFX1JFR19DUkMxNkNfSU5JVCwgMHgwfSwKIAl7T1BfV1IsIERNQUVfUkVHX0NSQzE2VDEwX0lOSVQsIDB4MX0sCkBAIC0yMDEzLDI0ICsyMTIzLDI3IEBACiAJe09QX1dSX0UxSCwgRE1BRV9SRUdfUFhQX1JFUV9JTklUX0NSRCwgMHgyfSwKIAl7T1BfV1IsIERNQUVfUkVHX1BDSV9JRkVOLCAweDF9LAogCXtPUF9XUiwgRE1BRV9SRUdfR1JDX0lGRU4sIDB4MX0sCi0jZGVmaW5lIERNQUVfQ09NTU9OX0VORCAgICAgICAgIDE3NTcKLSNkZWZpbmUgUFhQX0NPTU1PTl9TVEFSVCAgICAgICAgMTc1NwotCXtPUF9XQl9FMSwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDQwMCwgMHg1MDU2M30sCi0Je09QX1dCX0UxSCwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDQwMCwgMHg1MDYwOX0sCi0Je09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCArIDB4NDIwLCAweDUwNTY4fSwKLQl7T1BfV0JfRTFILCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCwgMHg1MDYwZX0sCi0Je09QX1dCX0UxLCBQWFBfUkVHX0hTVF9JTkJPVU5EX0lOVCwgMHg1MDU2ZH0sCi0jZGVmaW5lIFBYUF9DT01NT05fRU5EICAgICAgICAgIDE3NjIKLSNkZWZpbmUgQ0ZDX0NPTU1PTl9TVEFSVCAgICAgICAgMTc2MgorI2RlZmluZSBETUFFX0NPTU1PTl9FTkQgICAgICAgICAxODUxCisjZGVmaW5lIFBYUF9DT01NT05fU1RBUlQgICAgICAgIDE4NTEKKwl7T1BfV0JfRTEsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UICsgMHg0MDAsIDB4NTA1NzN9LAorCXtPUF9XQl9FMUgsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UICsgMHg0MDAsIDB4NTA2Mzh9LAorCXtPUF9XQl9FMSwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQgKyAweDQyMCwgMHg1MDU3OH0sCisJe09QX1dCX0UxSCwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQsIDB4NTA2M2R9LAorCXtPUF9XQl9FMSwgUFhQX1JFR19IU1RfSU5CT1VORF9JTlQsIDB4NTA1N2R9LAorCXtPUF9XQl9FMUgsIFBYUF9SRUdfSFNUX0lOQk9VTkRfSU5UICsgMHgyMCwgMHg1MDY0Mn0sCisjZGVmaW5lIFBYUF9DT01NT05fRU5EICAgICAgICAgIDE4NTcKKyNkZWZpbmUgQ0ZDX0NPTU1PTl9TVEFSVCAgICAgICAgMTg1NwogCXtPUF9aUl9FMUgsIENGQ19SRUdfTElOS19MSVNULCAweDEwMH0sCiAJe09QX1dSLCBDRkNfUkVHX0NPTlRST0wwLCAweDEwfSwKIAl7T1BfV1IsIENGQ19SRUdfRElTQUJMRV9PTl9FUlJPUiwgMHgzZmZmfSwKKwl7T1BfV1IsIENGQ19SRUdfSU5URVJGQUNFUywgMHgyODAwMDB9LAogCXtPUF9XUiwgQ0ZDX1JFR19MQ1JFUV9XRUlHSFRTLCAweDg0OTI0YX0sCi0jZGVmaW5lIENGQ19DT01NT05fRU5EICAgICAgICAgIDE3NjYKLSNkZWZpbmUgSENfQ09NTU9OX1NUQVJUICAgICAgICAgMTc2NgorCXtPUF9XUiwgQ0ZDX1JFR19JTlRFUkZBQ0VTLCAweDB9LAorI2RlZmluZSBDRkNfQ09NTU9OX0VORCAgICAgICAgICAxODYzCisjZGVmaW5lIEhDX0NPTU1PTl9TVEFSVCAgICAgICAgIDE4NjMKIAl7T1BfWlJfRTEsIEhDX1JFR19VU1RPUk1fQUREUl9GT1JfQ09BTEVTQ0UsIDB4NH0sCi0jZGVmaW5lIEhDX0NPTU1PTl9FTkQgICAgICAgICAgIDE3NjcKLSNkZWZpbmUgSENfUE9SVDBfU1RBUlQgICAgICAgICAgMTc2NworI2RlZmluZSBIQ19DT01NT05fRU5EICAgICAgICAgICAxODY0CisjZGVmaW5lIEhDX1BPUlQwX1NUQVJUICAgICAgICAgIDE4NjQKIAl7T1BfV1JfRTEsIEhDX1JFR19DT05GSUdfMCwgMHgxMDgwfSwKIAl7T1BfWlJfRTEsIEhDX1JFR19VQ19SQU1fQUREUl8wLCAweDJ9LAogCXtPUF9XUl9FMSwgSENfUkVHX0FUVE5fTlVNX1AwLCAweDEwfSwKQEAgLTIwNDksOCArMjE2Miw4IEBACiAJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgxMjAsIDB4NGF9LAogCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MzcwLCAweDRhfSwKIAl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDVjMCwgMHg0YX0sCi0jZGVmaW5lIEhDX1BPUlQwX0VORCAgICAgICAgICAgIDE3ODUKLSNkZWZpbmUgSENfUE9SVDFfU1RBUlQgICAgICAgICAgMTc4NQorI2RlZmluZSBIQ19QT1JUMF9FTkQgICAgICAgICAgICAxODgyCisjZGVmaW5lIEhDX1BPUlQxX1NUQVJUICAgICAgICAgIDE4ODIKIAl7T1BfV1JfRTEsIEhDX1JFR19DT05GSUdfMSwgMHgxMDgwfSwKIAl7T1BfWlJfRTEsIEhDX1JFR19VQ19SQU1fQUREUl8xLCAweDJ9LAogCXtPUF9XUl9FMSwgSENfUkVHX0FUVE5fTlVNX1AxLCAweDEwfSwKQEAgLTIwNjksOCArMjE4Miw4IEBACiAJe09QX1pSX0UxLCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgyNDgsIDB4NGF9LAogCXtPUF9aUl9FMSwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NDk4LCAweDRhfSwKIAl7T1BfWlJfRTEsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCi0jZGVmaW5lIEhDX1BPUlQxX0VORCAgICAgICAgICAgIDE4MDMKLSNkZWZpbmUgSENfRlVOQzBfU1RBUlQgICAgICAgICAgMTgwMworI2RlZmluZSBIQ19QT1JUMV9FTkQgICAgICAgICAgICAxOTAwCisjZGVmaW5lIEhDX0ZVTkMwX1NUQVJUICAgICAgICAgIDE5MDAKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzAsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AwLCAweDB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMCwgMHgxMH0sCkBAIC0yMDg2LDggKzIxOTksOCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MzcwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg1YzAsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DMF9FTkQgICAgICAgICAgICAxODE4Ci0jZGVmaW5lIEhDX0ZVTkMxX1NUQVJUICAgICAgICAgIDE4MTgKKyNkZWZpbmUgSENfRlVOQzBfRU5EICAgICAgICAgICAgMTkxNQorI2RlZmluZSBIQ19GVU5DMV9TVEFSVCAgICAgICAgICAxOTE1CiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18xLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMSwgMHgxfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDEsIDB4MTB9LApAQCAtMjEwMyw4ICsyMjE2LDggQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgyNDgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDQ5OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NmU4LCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzFfRU5EICAgICAgICAgICAgMTgzMwotI2RlZmluZSBIQ19GVU5DMl9TVEFSVCAgICAgICAgICAxODMzCisjZGVmaW5lIEhDX0ZVTkMxX0VORCAgICAgICAgICAgIDE5MzAKKyNkZWZpbmUgSENfRlVOQzJfU1RBUlQgICAgICAgICAgMTkzMAogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMCwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDAsIDB4Mn0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AwLCAweDEwfSwKQEAgLTIxMjAsOCArMjIzMyw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MTIwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgzNzAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDVjMCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkMyX0VORCAgICAgICAgICAgIDE4NDgKLSNkZWZpbmUgSENfRlVOQzNfU1RBUlQgICAgICAgICAgMTg0OAorI2RlZmluZSBIQ19GVU5DMl9FTkQgICAgICAgICAgICAxOTQ1CisjZGVmaW5lIEhDX0ZVTkMzX1NUQVJUICAgICAgICAgIDE5NDUKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzEsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AxLCAweDN9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMSwgMHgxMH0sCkBAIC0yMTM3LDggKzIyNTAsOCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDI0OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NDk4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg2ZTgsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DM19FTkQgICAgICAgICAgICAxODYzCi0jZGVmaW5lIEhDX0ZVTkM0X1NUQVJUICAgICAgICAgIDE4NjMKKyNkZWZpbmUgSENfRlVOQzNfRU5EICAgICAgICAgICAgMTk2MAorI2RlZmluZSBIQ19GVU5DNF9TVEFSVCAgICAgICAgICAxOTYwCiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18wLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMCwgMHg0fSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDAsIDB4MTB9LApAQCAtMjE1NCw4ICsyMjY3LDggQEAKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHgxMjAsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDM3MCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NWMwLCAweDRhfSwKLSNkZWZpbmUgSENfRlVOQzRfRU5EICAgICAgICAgICAgMTg3OAotI2RlZmluZSBIQ19GVU5DNV9TVEFSVCAgICAgICAgICAxODc4CisjZGVmaW5lIEhDX0ZVTkM0X0VORCAgICAgICAgICAgIDE5NzUKKyNkZWZpbmUgSENfRlVOQzVfU1RBUlQgICAgICAgICAgMTk3NQogCXtPUF9XUl9FMUgsIEhDX1JFR19DT05GSUdfMSwgMHgxMDgwfSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfRlVOQ19OVU1fUDEsIDB4NX0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0FUVE5fTlVNX1AxLCAweDEwfSwKQEAgLTIxNzEsOCArMjI4NCw4IEBACiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MjQ4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg0OTgsIDB4NGF9LAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDZlOCwgMHg0YX0sCi0jZGVmaW5lIEhDX0ZVTkM1X0VORCAgICAgICAgICAgIDE4OTMKLSNkZWZpbmUgSENfRlVOQzZfU1RBUlQgICAgICAgICAgMTg5MworI2RlZmluZSBIQ19GVU5DNV9FTkQgICAgICAgICAgICAxOTkwCisjZGVmaW5lIEhDX0ZVTkM2X1NUQVJUICAgICAgICAgIDE5OTAKIAl7T1BfV1JfRTFILCBIQ19SRUdfQ09ORklHXzAsIDB4MTA4MH0sCiAJe09QX1dSX0UxSCwgSENfUkVHX0ZVTkNfTlVNX1AwLCAweDZ9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19BVFROX05VTV9QMCwgMHgxMH0sCkBAIC0yMTg4LDggKzIzMDEsOCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDEyMCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4MzcwLCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg1YzAsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DNl9FTkQgICAgICAgICAgICAxOTA4Ci0jZGVmaW5lIEhDX0ZVTkM3X1NUQVJUICAgICAgICAgIDE5MDgKKyNkZWZpbmUgSENfRlVOQzZfRU5EICAgICAgICAgICAgMjAwNQorI2RlZmluZSBIQ19GVU5DN19TVEFSVCAgICAgICAgICAyMDA1CiAJe09QX1dSX0UxSCwgSENfUkVHX0NPTkZJR18xLCAweDEwODB9LAogCXtPUF9XUl9FMUgsIEhDX1JFR19GVU5DX05VTV9QMSwgMHg3fSwKIAl7T1BfV1JfRTFILCBIQ19SRUdfQVRUTl9OVU1fUDEsIDB4MTB9LApAQCAtMjIwNSwxMCArMjMxOCwxMCBAQAogCXtPUF9aUl9FMUgsIEhDX1JFR19TVEFUSVNUSUNfQ09VTlRFUlMgKyAweDI0OCwgMHg0YX0sCiAJe09QX1pSX0UxSCwgSENfUkVHX1NUQVRJU1RJQ19DT1VOVEVSUyArIDB4NDk4LCAweDRhfSwKIAl7T1BfWlJfRTFILCBIQ19SRUdfU1RBVElTVElDX0NPVU5URVJTICsgMHg2ZTgsIDB4NGF9LAotI2RlZmluZSBIQ19GVU5DN19FTkQgICAgICAgICAgICAxOTIzCi0jZGVmaW5lIFBYUDJfQ09NTU9OX1NUQVJUICAgICAgIDE5MjMKLQl7T1BfV1JfRTEsIFBYUDJfUkVHX1BHTF9DT05UUk9MMCwgMHhlMzgzNDB9LAorI2RlZmluZSBIQ19GVU5DN19FTkQgICAgICAgICAgICAyMDIwCisjZGVmaW5lIFBYUDJfQ09NTU9OX1NUQVJUICAgICAgIDIwMjAKIAl7T1BfV1JfRTFILCBQWFAyX1JFR19SUV9EUkFNX0FMSUdOLCAweDF9LAorCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0NPTlRST0wwLCAweGUzODM0MH0sCiAJe09QX1dSLCBQWFAyX1JFR19QR0xfQ09OVFJPTDEsIDB4M2MxMH0sCiAJe09QX1dSX0UxSCwgUFhQMl9SRUdfUlFfRUxUX0RJU0FCTEUsIDB4MX0sCiAJe09QX1dSX0UxSCwgUFhQMl9SRUdfV1JfUkVWX01PREUsIDB4MH0sCkBAIC0yMjIwLDcgKzIzMzMsNyBAQAogCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0lOVF9UU0RNXzUsIDB4ZmZmZmZmZmZ9LAogCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0lOVF9UU0RNXzYsIDB4ZmZmZmZmZmZ9LAogCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0lOVF9UU0RNXzcsIDB4ZmZmZmZmZmZ9LAotCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0lOVF9VU0RNXzEsIDB4ZmZmZmZmZmZ9LAorCXtPUF9XUl9FMSwgUFhQMl9SRUdfUEdMX0lOVF9VU0RNXzEsIDB4ZmZmZmZmZmZ9LAogCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0lOVF9VU0RNXzIsIDB4ZmZmZmZmZmZ9LAogCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0lOVF9VU0RNXzMsIDB4ZmZmZmZmZmZ9LAogCXtPUF9XUiwgUFhQMl9SRUdfUEdMX0lOVF9VU0RNXzQsIDB4ZmZmZmZmZmZ9LApAQCAtMjI0Nyw2ICsyMzYwLDcgQEAKIAl7T1BfV1JfRTEsIFBYUDJfUkVHX1BHTF9JTlRfWFNETV8xLCAweGZmZmYzMzQwfSwKIAl7T1BfV1JfRTFILCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMCwgMHhmMDAwNTAwMH0sCiAJe09QX1dSX0UxLCBQWFAyX1JFR19QR0xfSU5UX1VTRE1fMCwgMHhmMDAwMzAwMH0sCisJe09QX1dSX0UxSCwgUFhQMl9SRUdfUEdMX0lOVF9VU0RNXzEsIDB4ZjAwMDgwMDB9LAogCXtPUF9XUiwgUFhQMl9SRUdfUkRfTUFYX0JMS1NfVlE2LCAweDh9LAogCXtPUF9XUiwgUFhQMl9SRUdfUkRfTUFYX0JMS1NfVlE5LCAweDh9LAogCXtPUF9XUiwgUFhQMl9SRUdfUkRfTUFYX0JMS1NfVlExMCwgMHg4fSwKQEAgLTIzMjMsOSArMjQzNyw4IEBACiAJe09QX1dSLCBQWFAyX1JFR19QU1dSUV9CV19XUiwgMHgxMDY0NDB9LAogCXtPUF9XUl9FMUgsIFBYUDJfUkVHX1JRX0lMVF9NT0RFLCAweDF9LAogCXtPUF9XUiwgUFhQMl9SRUdfUlFfUkJDX0RPTkUsIDB4MX0sCi0Je09QX1dSX0UxSCwgUFhQMl9SRUdfUEdMX0NPTlRST0wwLCAweGUzODM0MH0sCi0jZGVmaW5lIFBYUDJfQ09NTU9OX0VORCAgICAgICAgIDIwNDAKLSNkZWZpbmUgTUlTQ19BRVVfQ09NTU9OX1NUQVJUICAgMjA0MAorI2RlZmluZSBQWFAyX0NPTU1PTl9FTkQgICAgICAgICAyMTM3CisjZGVmaW5lIE1JU0NfQUVVX0NPTU1PTl9TVEFSVCAgIDIxMzcKIAl7T1BfWlIsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMCwgMHgxNn0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTFfTklHXzAsIDB4NTU1NDAwMDB9LAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUyX05JR18wLCAweDU1NTU1NTU1fSwKQEAgLTIzNDUsOCArMjQ1OCw4IEBACiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0VOQUJMRTRfUFhQXzEsIDB4MH0sCiAJe09QX1dSX0UxSCwgTUlTQ19SRUdfQUVVX0NMUl9MQVRDSF9TSUdOQUwsIDB4YzAwfSwKIAl7T1BfV1JfRTFILCBNSVNDX1JFR19BRVVfR0VORVJBTF9NQVNLLCAweDN9LAotI2RlZmluZSBNSVNDX0FFVV9DT01NT05fRU5EICAgICAyMDU5Ci0jZGVmaW5lIE1JU0NfQUVVX1BPUlQwX1NUQVJUICAgIDIwNTkKKyNkZWZpbmUgTUlTQ19BRVVfQ09NTU9OX0VORCAgICAgMjE1NgorI2RlZmluZSBNSVNDX0FFVV9QT1JUMF9TVEFSVCAgICAyMTU2CiAJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzAsIDB4YmY1YzAwMDB9LAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMF9PVVRfMCwgMHhmZjVjMDAwMH0sCiAJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMl9GVU5DXzBfT1VUXzAsIDB4ZmZmNTFmZWZ9LApAQCAtMjM3OSw4ICsyNDkyLDggQEAKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9JTlZFUlRFUl8xX0ZVTkNfMCwgMHgwfSwKIAl7T1BfWlJfRTEsIE1JU0NfUkVHX0FFVV9JTlZFUlRFUl8yX0ZVTkNfMCwgMHgzfSwKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18wLCAweDd9LAotI2RlZmluZSBNSVNDX0FFVV9QT1JUMF9FTkQgICAgICAyMDkxCi0jZGVmaW5lIE1JU0NfQUVVX1BPUlQxX1NUQVJUICAgIDIwOTEKKyNkZWZpbmUgTUlTQ19BRVVfUE9SVDBfRU5EICAgICAgMjE4OAorI2RlZmluZSBNSVNDX0FFVV9QT1JUMV9TVEFSVCAgICAyMTg4CiAJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzFfT1VUXzAsIDB4YmY1YzAwMDB9LAogCXtPUF9XUl9FMUgsIE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCwgMHhmZjVjMDAwMH0sCiAJe09QX1dSX0UxLCBNSVNDX1JFR19BRVVfRU5BQkxFMl9GVU5DXzFfT1VUXzAsIDB4ZmZmNTFmZWZ9LApAQCAtMjQxMyw3ICsyNTI2LDcgQEAKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9JTlZFUlRFUl8xX0ZVTkNfMSwgMHgwfSwKIAl7T1BfWlJfRTEsIE1JU0NfUkVHX0FFVV9JTlZFUlRFUl8yX0ZVTkNfMSwgMHgzfSwKIAl7T1BfV1JfRTEsIE1JU0NfUkVHX0FFVV9NQVNLX0FUVE5fRlVOQ18xLCAweDd9LAotI2RlZmluZSBNSVNDX0FFVV9QT1JUMV9FTkQgICAgICAyMTIzCisjZGVmaW5lIE1JU0NfQUVVX1BPUlQxX0VORCAgICAgIDIyMjAKIAogfTsKIApAQCAtMjUxMiw3MiArMjYyNSw2NCBAQAogCTB4MDAwMDAyMDAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsCiAJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKIAkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAzNTAwLAotCTB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4MDAwMDIwMDAsIDB4MDAwMDQwYzAsCi0JMHgwMDAwNjE4MCwgMHgwMDAwODI0MCwgMHgwMDAwYTMwMCwgMHgwMDAwYzNjMCwgMHgwMDAwZTQ4MCwgMHgwMDAxMDU0MCwKLQkweDAwMDEyNjAwLCAweDAwMDE0NmMwLCAweDAwMDE2NzgwLCAweDAwMDE4ODQwLCAweDAwMDFhOTAwLCAweDAwMDFjOWMwLAotCTB4MDAwMWVhODAsIDB4MDAwMjBiNDAsIDB4MDAwMjJjMDAsIDB4MDAwMjRjYzAsIDB4MDAwMjZkODAsIDB4MDAwMjhlNDAsCi0JMHgwMDAyYWYwMCwgMHgwMDAyY2ZjMCwgMHgwMDAyZjA4MCwgMHgwMDAzMTE0MCwgMHgwMDAzMzIwMCwgMHgwMDAzNTJjMCwKLQkweDAwMDM3MzgwLCAweDAwMDM5NDQwLCAweDAwMDNiNTAwLCAweDAwMDNkNWMwLCAweDAwMDNmNjgwLCAweDAwMDQxNzQwLAotCTB4MDAwNDM4MDAsIDB4MDAwNDU4YzAsIDB4MDAwNDc5ODAsIDB4MDAwNDlhNDAsIDB4MDAwMDgwMDAsIDB4MDAwMTAzODAsCi0JMHgwMDAxODcwMCwgMHgwMDAyMGE4MCwgMHgwMDAyOGUwMCwgMHgwMDAzMTE4MCwgMHgwMDAzOTUwMCwgMHgwMDA0MTg4MCwKLQkweDAwMDQ5YzAwLCAweDAwMDUxZjgwLCAweDAwMDVhMzAwLCAweDAwMDYyNjgwLCAweDAwMDZhYTAwLCAweDAwMDcyZDgwLAotCTB4MDAwN2IxMDAsIDB4MDAwODM0ODAsIDB4MDAwOGI4MDAsIDB4MDAwOTNiODAsIDB4MDAwOWJmMDAsIDB4MDAwYTQyODAsCi0JMHgwMDBhYzYwMCwgMHgwMDBiNDk4MCwgMHgwMDBiY2QwMCwgMHgwMDBjNTA4MCwgMHgwMDBjZDQwMCwgMHgwMDBkNTc4MCwKLQkweDAwMGRkYjAwLCAweDAwMDAxOTAwLCAweDAwMTAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAxNTAwLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAzLAorCTB4MDBiZWJjMjAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsCisJMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMjAwMCwgMHgwMDAwNDBjMCwgMHgwMDAwNjE4MCwgMHgwMDAwODI0MCwKKwkweDAwMDBhMzAwLCAweDAwMDBjM2MwLCAweDAwMDBlNDgwLCAweDAwMDEwNTQwLCAweDAwMDEyNjAwLCAweDAwMDE0NmMwLAorCTB4MDAwMTY3ODAsIDB4MDAwMTg4NDAsIDB4MDAwMWE5MDAsIDB4MDAwMWM5YzAsIDB4MDAwMWVhODAsIDB4MDAwMjBiNDAsCisJMHgwMDAyMmMwMCwgMHgwMDAyNGNjMCwgMHgwMDAyNmQ4MCwgMHgwMDAyOGU0MCwgMHgwMDAyYWYwMCwgMHgwMDAyY2ZjMCwKKwkweDAwMDJmMDgwLCAweDAwMDMxMTQwLCAweDAwMDMzMjAwLCAweDAwMDM1MmMwLCAweDAwMDM3MzgwLCAweDAwMDM5NDQwLAorCTB4MDAwM2I1MDAsIDB4MDAwM2Q1YzAsIDB4MDAwM2Y2ODAsIDB4MDAwNDE3NDAsIDB4MDAwNDM4MDAsIDB4MDAwNDU4YzAsCisJMHgwMDA0Nzk4MCwgMHgwMDA0OWE0MCwgMHgwMDAwODAwMCwgMHgwMDAxMDM4MCwgMHgwMDAxODcwMCwgMHgwMDAyMGE4MCwKKwkweDAwMDI4ZTAwLCAweDAwMDMxMTgwLCAweDAwMDM5NTAwLCAweDAwMDQxODgwLCAweDAwMDQ5YzAwLCAweDAwMDUxZjgwLAorCTB4MDAwNWEzMDAsIDB4MDAwNjI2ODAsIDB4MDAwNmFhMDAsIDB4MDAwNzJkODAsIDB4MDAwN2IxMDAsIDB4MDAwODM0ODAsCisJMHgwMDA4YjgwMCwgMHgwMDA5M2I4MCwgMHgwMDA5YmYwMCwgMHgwMDBhNDI4MCwgMHgwMDBhYzYwMCwgMHgwMDBiNDk4MCwKKwkweDAwMGJjZDAwLCAweDAwMGM1MDgwLCAweDAwMGNkNDAwLCAweDAwMGQ1NzgwLCAweDAwMGRkYjAwLCAweDAwMDAxOTAwLAorCTB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3ZmY4LAotCTB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsIDB4MDAwMDEwMDAsIDB4MDAwMDIwODAsIDB4MDAwMDMxMDAsIDB4MDAwMDQxODAsCi0JMHgwMDAwNTIwMCwgMHgwMDAwNjI4MCwgMHgwMDAwNzMwMCwgMHgwMDAwODM4MCwgMHgwMDAwOTQwMCwgMHgwMDAwYTQ4MCwKLQkweDAwMDBiNTAwLCAweDAwMDBjNTgwLCAweDAwMDBkNjAwLCAweDAwMDBlNjgwLCAweDAwMDBmNzAwLCAweDAwMDEwNzgwLAotCTB4MDAwMTE4MDAsIDB4MDAwMTI4ODAsIDB4MDAwMTM5MDAsIDB4MDAwMTQ5ODAsIDB4MDAwMTVhMDAsIDB4MDAwMTZhODAsCi0JMHgwMDAxN2IwMCwgMHgwMDAxOGI4MCwgMHgwMDAxOWMwMCwgMHgwMDAxYWM4MCwgMHgwMDAxYmQwMCwgMHgwMDAxY2Q4MCwKLQkweDAwMDFkZTAwLCAweDAwMDFlZTgwLCAweDAwMDFmZjAwLCAweDAwMDAwMDAwLCAweDAwMDEwMDAxLCAweDAwMDAwNjA0LAotCTB4Y2NjY2NjYzEsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMTUwMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDAwMDAwMDAwLCAweDAwMDA3ZmY4LCAweDAwMDAwMDAwLCAweDAwMDAxNTAwLCAweDAwMDAxMDAwLCAweDAwMDAyMDgwLAorCTB4MDAwMDMxMDAsIDB4MDAwMDQxODAsIDB4MDAwMDUyMDAsIDB4MDAwMDYyODAsIDB4MDAwMDczMDAsIDB4MDAwMDgzODAsCisJMHgwMDAwOTQwMCwgMHgwMDAwYTQ4MCwgMHgwMDAwYjUwMCwgMHgwMDAwYzU4MCwgMHgwMDAwZDYwMCwgMHgwMDAwZTY4MCwKKwkweDAwMDBmNzAwLCAweDAwMDEwNzgwLCAweDAwMDExODAwLCAweDAwMDEyODgwLCAweDAwMDEzOTAwLCAweDAwMDE0OTgwLAorCTB4MDAwMTVhMDAsIDB4MDAwMTZhODAsIDB4MDAwMTdiMDAsIDB4MDAwMThiODAsIDB4MDAwMTljMDAsIDB4MDAwMWFjODAsCisJMHgwMDAxYmQwMCwgMHgwMDAxY2Q4MCwgMHgwMDAxZGUwMCwgMHgwMDAxZWU4MCwgMHgwMDAxZmYwMCwgMHgxMDAwMDAwMCwKKwkweDAwMDAyOGFkLCAweDAwMDAwMDAwLCAweDAwMDEwMDAxLCAweDAwMzUwODA0LCAweGNjY2NjY2MxLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4NzA1ODEwM2MsIDB4MDAwMDAwMDAsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4MDAwMDAwMDAsCiAJMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsCi0JMHgwMDAwMzUwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAxMDAwMDAsCisJMHgwMDAwMzUwMCwgMHgwMDBlMDFiNywgMHgwMTE2MDBkNiwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKIAkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAogCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDEwMDAwMCwKLQkweDAwMDAwMDAwLCAweGZmZmZmZmYzLCAweDMyMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwKLQkweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsCi0JMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLAotCTB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmNywgMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsCi0JMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4MDAwMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDA3MjAxYmIsIDB4MDEyMzAwZjMsIDB4MDAwMGZmZmYsCisJMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKKwkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAorCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZjMsCisJMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMwZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAogCTB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsCiAJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwKIAkweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLAogCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCiAJMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywKIAkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY3LAotCTB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMxZWZmZmZmLCAweDBjMzBjMzBjLAorCTB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsCiAJMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKIAkweGNkY2RjZGNkLCAweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLApAQCAtMjU4NSw0MSArMjY5MCw0MSBAQAogCTB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsCiAJMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKIAkweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDU2ZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwKLQkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNywgMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LAorCTB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywgMHgzMWVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKIAkweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLAogCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsCiAJMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywKIAkweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LAogCTB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY4YSwKLQkweDA0MmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDVjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsCisJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwKKwkweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsIDB4MDU2ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsCiAJMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywKIAkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLAotCTB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweDMyMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCiAJMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywKIAkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LAogCTB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsCiAJMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsCi0JMHgwNDBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKKwkweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjhhLCAweDA0MmZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsCisJMHgwNWNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAorCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwKKwkweDMwMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAorCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCisJMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwKKwkweGMzMGMzMGMzLCAweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLAorCTB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKKwkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA0MGZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsCisJMHgzMDBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKIAkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAogCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCiAJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKQEAgLTI2NDEsMTYgKzI3NDYsMjYgQEAKIAkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAogCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsCiAJMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweDAwMTAwMDAwLCAweDAwMDcwMTAwLCAweDAwMDI4MTcwLAotCTB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwZjAyODAsIDB4MDAwMTAzNzAsIDB4MDAwODAwMDAsCi0JMHgwMDA4MDA4MCwgMHgwMDAyODEwMCwgMHgwMDBiODEyOCwgMHgwMDAyMDFlMCwgMHgwMDAxMDIwMCwgMHgwMDA3MDIxMCwKLQkweDAwMDIwMjgwLCAweDAwMGYwMDAwLCAweDAwMDgwMGYwLCAweDAwMDI4MTcwLCAweDAwMGI4MTk4LCAweDAwMDIwMjUwLAotCTB4MDAwMTAyNzAsIDB4MDAwYjgyODAsIDB4MDAwODAzMzgsIDB4MDAxMDAwMDAsIDB4MDAwODAxMDAsIDB4MDAwMjgxODAsCi0JMHgwMDBiODFhOCwgMHgwMDAyMDI2MCwgMHgwMDAxODI4MCwgMHgwMDBlODI5OCwgMHgwMDA4MDM4MCwgMHgwMDAyODAwMCwKLQkweDAwMGI4MDI4LCAweDAwMDIwMGUwLCAweDAwMDEwMTAwLCAweDAwMDA4MTEwLCAweDAwMDAwMTE4LCAweGNjY2NjY2NjLAotCTB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsCi0JMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHgwMDAwMjAwMCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKLQkweGNjY2NjY2NjLCAweDAwMDAyMDAwCisJMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKKwkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAorCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCisJMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKKwkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAorCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCisJMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKKwkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAorCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCisJMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKKwkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAorCTB4Y2RjZGNkY2QsIDB4MDAxMDAwMDAsIDB4MDAwNzAxMDAsIDB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsCisJMHgwMDAxMDI3MCwgMHgwMDBmMDI4MCwgMHgwMDAxMDM3MCwgMHgwMDA4MDAwMCwgMHgwMDA4MDA4MCwgMHgwMDAyODEwMCwKKwkweDAwMGI4MTI4LCAweDAwMDIwMWUwLCAweDAwMDEwMjAwLCAweDAwMDcwMjEwLCAweDAwMDIwMjgwLCAweDAwMGYwMDAwLAorCTB4MDAwODAwZjAsIDB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwYjgyODAsCisJMHgwMDA4MDMzOCwgMHgwMDEwMDAwMCwgMHgwMDA4MDEwMCwgMHgwMDAyODE4MCwgMHgwMDBiODFhOCwgMHgwMDAyMDI2MCwKKwkweDAwMDE4MjgwLCAweDAwMGU4Mjk4LCAweDAwMDgwMzgwLCAweDAwMDI4MDAwLCAweDAwMGI4MDI4LCAweDAwMDIwMGUwLAorCTB4MDAwMTAxMDAsIDB4MDAwMDgxMTAsIDB4MDAwMDAxMTgsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsCisJMHhjY2NjY2NjYywgMHgwMDAwMjAwMCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKKwkweDAwMDAyMDAwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweDAwMDAyMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGluaXRfZGF0YV9lMWhbXSA9IHsKQEAgLTI3NTEsMTE5NzMgKzI4NjYsMTM0NTcgQEAKIAkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAogCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCiAJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwKLQkweDAwMDAwMDAwLCAweDAwMDAzNTAwLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLAotCTB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsCi0JMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHgwMDAwMjAwMCwgMHgwMDAwNDBjMCwgMHgwMDAwNjE4MCwgMHgwMDAwODI0MCwKLQkweDAwMDBhMzAwLCAweDAwMDBjM2MwLCAweDAwMDBlNDgwLCAweDAwMDEwNTQwLCAweDAwMDEyNjAwLCAweDAwMDE0NmMwLAotCTB4MDAwMTY3ODAsIDB4MDAwMTg4NDAsIDB4MDAwMWE5MDAsIDB4MDAwMWM5YzAsIDB4MDAwMWVhODAsIDB4MDAwMjBiNDAsCi0JMHgwMDAyMmMwMCwgMHgwMDAyNGNjMCwgMHgwMDAyNmQ4MCwgMHgwMDAyOGU0MCwgMHgwMDAyYWYwMCwgMHgwMDAyY2ZjMCwKLQkweDAwMDJmMDgwLCAweDAwMDMxMTQwLCAweDAwMDMzMjAwLCAweDAwMDM1MmMwLCAweDAwMDM3MzgwLCAweDAwMDM5NDQwLAotCTB4MDAwM2I1MDAsIDB4MDAwM2Q1YzAsIDB4MDAwM2Y2ODAsIDB4MDAwNDE3NDAsIDB4MDAwNDM4MDAsIDB4MDAwNDU4YzAsCi0JMHgwMDA0Nzk4MCwgMHgwMDA0OWE0MCwgMHgwMDAwODAwMCwgMHgwMDAxMDM4MCwgMHgwMDAxODcwMCwgMHgwMDAyMGE4MCwKLQkweDAwMDI4ZTAwLCAweDAwMDMxMTgwLCAweDAwMDM5NTAwLCAweDAwMDQxODgwLCAweDAwMDQ5YzAwLCAweDAwMDUxZjgwLAotCTB4MDAwNWEzMDAsIDB4MDAwNjI2ODAsIDB4MDAwNmFhMDAsIDB4MDAwNzJkODAsIDB4MDAwN2IxMDAsIDB4MDAwODM0ODAsCi0JMHgwMDA4YjgwMCwgMHgwMDA5M2I4MCwgMHgwMDA5YmYwMCwgMHgwMDBhNDI4MCwgMHgwMDBhYzYwMCwgMHgwMDBiNDk4MCwKLQkweDAwMGJjZDAwLCAweDAwMGM1MDgwLCAweDAwMGNkNDAwLCAweDAwMGQ1NzgwLCAweDAwMGRkYjAwLCAweDAwMDAxOTAwLAotCTB4MDAwMDAwMjgsIDB4MDAwMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDE1MDAsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCi0JMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKLQkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAotCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAotCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCi0JMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKLQkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA3ZmY4LAotCTB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsIDB4MDAwMDEwMDAsIDB4MDAwMDIwODAsIDB4MDAwMDMxMDAsIDB4MDAwMDQxODAsCi0JMHgwMDAwNTIwMCwgMHgwMDAwNjI4MCwgMHgwMDAwNzMwMCwgMHgwMDAwODM4MCwgMHgwMDAwOTQwMCwgMHgwMDAwYTQ4MCwKLQkweDAwMDBiNTAwLCAweDAwMDBjNTgwLCAweDAwMDBkNjAwLCAweDAwMDBlNjgwLCAweDAwMDBmNzAwLCAweDAwMDEwNzgwLAotCTB4MDAwMTE4MDAsIDB4MDAwMTI4ODAsIDB4MDAwMTM5MDAsIDB4MDAwMTQ5ODAsIDB4MDAwMTVhMDAsIDB4MDAwMTZhODAsCi0JMHgwMDAxN2IwMCwgMHgwMDAxOGI4MCwgMHgwMDAxOWMwMCwgMHgwMDAxYWM4MCwgMHgwMDAxYmQwMCwgMHgwMDAxY2Q4MCwKLQkweDAwMDFkZTAwLCAweDAwMDFlZTgwLCAweDAwMDFmZjAwLCAweDAwMDAwMDAwLCAweDAwMDEwMDAxLCAweDAwMDAwNjA0LAotCTB4Y2NjY2NjYzUsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsCi0JMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHhjY2NjMDIwMSwKLQkweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLAotCTB4Y2NjY2NjY2MsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDMsCisJMHgwMGJlYmMyMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwKKwkweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAwLAorCTB4ZmZmZmZmZmYsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsCisJMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMywgMHgwMGJlYmMyMCwgMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCwKKwkweGZmZmZmZmZmLCAweDAwMDAwMDAwLCAweGZmZmZmZmZmLCAweDAwMDAwMDAzLCAweDAwYmViYzIwLCAweGZmZmZmZmZmLAorCTB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4MDAwMDAwMDMsIDB4MDBiZWJjMjAsCisJMHgwMDAwMjAwMCwgMHgwMDAwNDBjMCwgMHgwMDAwNjE4MCwgMHgwMDAwODI0MCwgMHgwMDAwYTMwMCwgMHgwMDAwYzNjMCwKKwkweDAwMDBlNDgwLCAweDAwMDEwNTQwLCAweDAwMDEyNjAwLCAweDAwMDE0NmMwLCAweDAwMDE2NzgwLCAweDAwMDE4ODQwLAorCTB4MDAwMWE5MDAsIDB4MDAwMWM5YzAsIDB4MDAwMWVhODAsIDB4MDAwMjBiNDAsIDB4MDAwMjJjMDAsIDB4MDAwMjRjYzAsCisJMHgwMDAyNmQ4MCwgMHgwMDAyOGU0MCwgMHgwMDAyYWYwMCwgMHgwMDAyY2ZjMCwgMHgwMDAyZjA4MCwgMHgwMDAzMTE0MCwKKwkweDAwMDMzMjAwLCAweDAwMDM1MmMwLCAweDAwMDM3MzgwLCAweDAwMDM5NDQwLCAweDAwMDNiNTAwLCAweDAwMDNkNWMwLAorCTB4MDAwM2Y2ODAsIDB4MDAwNDE3NDAsIDB4MDAwNDM4MDAsIDB4MDAwNDU4YzAsIDB4MDAwNDc5ODAsIDB4MDAwNDlhNDAsCisJMHgwMDAwODAwMCwgMHgwMDAxMDM4MCwgMHgwMDAxODcwMCwgMHgwMDAyMGE4MCwgMHgwMDAyOGUwMCwgMHgwMDAzMTE4MCwKKwkweDAwMDM5NTAwLCAweDAwMDQxODgwLCAweDAwMDQ5YzAwLCAweDAwMDUxZjgwLCAweDAwMDVhMzAwLCAweDAwMDYyNjgwLAorCTB4MDAwNmFhMDAsIDB4MDAwNzJkODAsIDB4MDAwN2IxMDAsIDB4MDAwODM0ODAsIDB4MDAwOGI4MDAsIDB4MDAwOTNiODAsCisJMHgwMDA5YmYwMCwgMHgwMDBhNDI4MCwgMHgwMDBhYzYwMCwgMHgwMDBiNDk4MCwgMHgwMDBiY2QwMCwgMHgwMDBjNTA4MCwKKwkweDAwMGNkNDAwLCAweDAwMGQ1NzgwLCAweDAwMGRkYjAwLCAweDAwMDAxOTAwLCAweDAwMDAwMDI4LCAweDAwMTAwMDAwLAorCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAogCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCiAJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKIAkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDAwMDAwMDAwLAotCTB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDM1MDAsIDB4MDAxMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAxMDAwMDAsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwKLQkweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLAotCTB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsCi0JMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHhmZmZmZmZmMywgMHgzMjBmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLAotCTB4MzBlZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LCAweDFjYmZmZmZmLCAweDBjMzBjMzA1LAotCTB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsCi0JMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjcsIDB4MzFlZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNSwKLQkweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY2LAotCTB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywgMHhjZjMwMDAxNCwKLQkweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmEsCi0JMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY3LCAweDMwZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMywKLQkweDMxZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmNDA2LAotCTB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwKLQkweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmOTcsCi0JMHgwNTZmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwKLQkweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsCi0JMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwKLQkweGMzMGMzMGMzLCAweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLAotCTB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmY4YSwgMHgwNDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwKLQkweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1Y2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsCi0JMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMxYWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLAotCTB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzAwZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwKLQkweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsCi0JMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLAotCTB4MzAyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNThmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjYzAwMCwKLQkweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwMGZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLAotCTB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsCi0JMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywKLQkweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLAotCTB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsCi0JMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywKLQkweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLAotCTB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsCi0JMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwKLQkweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLAotCTB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsCi0JMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywKLQkweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweDAwMTAwMDAwLAotCTB4MDAwNzAxMDAsIDB4MDAwMjgxNzAsIDB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwZjAyODAsCi0JMHgwMDAxMDM3MCwgMHgwMDA4MDAwMCwgMHgwMDA4MDA4MCwgMHgwMDAyODEwMCwgMHgwMDBiODEyOCwgMHgwMDAyMDFlMCwKLQkweDAwMDEwMjAwLCAweDAwMDcwMjEwLCAweDAwMDIwMjgwLCAweDAwMGYwMDAwLCAweDAwMDgwMGYwLCAweDAwMDI4MTcwLAotCTB4MDAwYjgxOTgsIDB4MDAwMjAyNTAsIDB4MDAwMTAyNzAsIDB4MDAwYjgyODAsIDB4MDAwODAzMzgsIDB4MDAxMDAwMDAsCi0JMHgwMDA4MDEwMCwgMHgwMDAyODE4MCwgMHgwMDBiODFhOCwgMHgwMDAyMDI2MCwgMHgwMDAxODI4MCwgMHgwMDBlODI5OCwKLQkweDAwMDgwMzgwLCAweDAwMGQwMDAwLCAweDAwMDAwMGQwLCAweDAwMDI4MGQwLCAweDAwMGI4MGY4LCAweDAwMDIwMWIwLAotCTB4MDAwMTAxZDAsIDB4MDAwYzgxZTAsIDB4MDAwMDAyYTgsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsCi0JMHhjY2NjY2NjYywgMHgwMDAwMjAwMCwgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywKLQkweDAwMDAyMDAwCisJMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMTUwMCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwKKwkweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLCAweGZmZmZmZmZmLAorCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDdmZjgsIDB4MDAwMDAwMDAsIDB4MDAwMDE1MDAsIDB4MDAwMDEwMDAsCisJMHgwMDAwMjA4MCwgMHgwMDAwMzEwMCwgMHgwMDAwNDE4MCwgMHgwMDAwNTIwMCwgMHgwMDAwNjI4MCwgMHgwMDAwNzMwMCwKKwkweDAwMDA4MzgwLCAweDAwMDA5NDAwLCAweDAwMDBhNDgwLCAweDAwMDBiNTAwLCAweDAwMDBjNTgwLCAweDAwMDBkNjAwLAorCTB4MDAwMGU2ODAsIDB4MDAwMGY3MDAsIDB4MDAwMTA3ODAsIDB4MDAwMTE4MDAsIDB4MDAwMTI4ODAsIDB4MDAwMTM5MDAsCisJMHgwMDAxNDk4MCwgMHgwMDAxNWEwMCwgMHgwMDAxNmE4MCwgMHgwMDAxN2IwMCwgMHgwMDAxOGI4MCwgMHgwMDAxOWMwMCwKKwkweDAwMDFhYzgwLCAweDAwMDFiZDAwLCAweDAwMDFjZDgwLCAweDAwMDFkZTAwLCAweDAwMDFlZTgwLCAweDAwMDFmZjAwLAorCTB4MTAwMDAwMDAsIDB4MDAwMDI4YWQsIDB4MDAwMDAwMDAsIDB4MDAwMTAwMDEsIDB4MDAzNTA4MDQsIDB4Y2NjY2NjYzUsCisJMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgMHg3MDU4MTAzYywgMHgwMDAwMDAwMCwgMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywKKwkweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLCAweGNjY2MwMjAxLCAweGNjY2NjY2NjLAorCTB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsIDB4Y2NjYzAyMDEsIDB4Y2NjY2NjY2MsCisJMHhjY2NjMDIwMSwgMHhjY2NjY2NjYywgMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwgMHg0MDAwMDAwMCwKKwkweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLCAweDQwMDAwMDAwLAorCTB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4NDAwMDAwMDAsCisJMHgwMDAwMDAwMCwgMHgwMDAwN2ZmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMzUwMCwgMHgwMDBlMDIzMiwgMHgwMTE2MDBkNiwKKwkweDAwMTAwMDAwLCAweDAwMDAwMDAwLCAweDAwNzIwMjM2LCAweDAxMjMwMGYzLCAweDAwMTAwMDAwLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsCisJMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwgMHgwMDAwZmZmZiwgMHgwMDAwMDAwMCwKKwkweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLCAweDAwMDBmZmZmLCAweDAwMDAwMDAwLAorCTB4MDAwMGZmZmYsIDB4MDAwMDAwMDAsIDB4ZmZmZmZmZjMsIDB4MzIwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMSwgMHgzMGVmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwgMHgwYzMwYzMwNSwgMHhjMzBjMzBjMywKKwkweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYyLCAweDMwNGZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmYSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY3LCAweDMxZWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjUsIDB4MzAyZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmYzLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmNiwgMHgzMDVmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDJjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsIDB4Y2YzMDAwMTQsIDB4ZjNjZjNjZjMsCisJMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZhLCAweDMwMmZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmNywgMHgzMGVmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMwNGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjMsIDB4MzFlZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmYxLCAweDMxMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZjQwNiwgMHgxY2JmZmZmZiwKKwkweDBjMzBjMzA1LCAweGMzMGMzMGMzLCAweGNmMzAwMDE0LCAweGYzY2YzY2YzLCAweDAwMDRjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwgMHgzMDJmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZjk3LCAweDA1NmZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsIDB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmNSwgMHgzMTBmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYzLCAweDMyMGZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjEsIDB4MzEwZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAxY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmY2LCAweDMwNWZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLAorCTB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmY0MDYsIDB4MWNiZmZmZmYsIDB4MGMzMGMzMDUsIDB4YzMwYzMwYzMsCisJMHhjZjMwMDAxNCwgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMiwgMHgzMDRmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMDhjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmOGEsIDB4MDQyZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2MwMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmY5NywgMHgwNWNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NjMDAwLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmY1LCAweDMxMGZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDA0MGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmMywgMHgzMTZmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywKKwkweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmYxLCAweDMwMmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjYsIDB4MzA1ZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDAyY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmY2LCAweDMwYmZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzE0LCAweGYzY2YzY2YzLAorCTB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZjIsIDB4MzA0ZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjMwMCwgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmYSwgMHgzMDJmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwMTBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZjcsIDB4MzFjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzMDAsIDB4ZjNjZjNjZjMsCisJMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmMCwgMHgzMDdmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmMzAwLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMGNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA0Y2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMjBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDBjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMWNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwMDJjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwNGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDA4Y2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAxMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDIwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwKKwkweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwNDBjZjNjLCAweGNkY2RjZGNkLAorCTB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsCisJMHgwMDAwY2YzYywgMHhjZGNkY2RjZCwgMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywKKwkweGNmM2NmM2NjLCAweGYzY2YzY2YzLCAweDAwMDFjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLAorCTB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsIDB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwMmNmM2MsIDB4Y2RjZGNkY2QsCisJMHhmZmZmZmZmZiwgMHgzMGNmZmZmZiwgMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywKKwkweDAwMDRjZjNjLCAweGNkY2RjZGNkLCAweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLAorCTB4Y2YzY2YzY2MsIDB4ZjNjZjNjZjMsIDB4MDAwOGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsCisJMHgwYzMwYzMwYywgMHhjMzBjMzBjMywgMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDEwY2YzYywgMHhjZGNkY2RjZCwKKwkweGZmZmZmZmZmLCAweDMwY2ZmZmZmLCAweDBjMzBjMzBjLCAweGMzMGMzMGMzLCAweGNmM2NmM2NjLCAweGYzY2YzY2YzLAorCTB4MDAyMGNmM2MsIDB4Y2RjZGNkY2QsIDB4ZmZmZmZmZmYsIDB4MzBjZmZmZmYsIDB4MGMzMGMzMGMsIDB4YzMwYzMwYzMsCisJMHhjZjNjZjNjYywgMHhmM2NmM2NmMywgMHgwMDQwY2YzYywgMHhjZGNkY2RjZCwgMHgwMDEwMDAwMCwgMHgwMDA3MDEwMCwKKwkweDAwMDI4MTcwLCAweDAwMGI4MTk4LCAweDAwMDIwMjUwLCAweDAwMDEwMjcwLCAweDAwMGYwMjgwLCAweDAwMDEwMzcwLAorCTB4MDAwODAwMDAsIDB4MDAwODAwODAsIDB4MDAwMjgxMDAsIDB4MDAwYjgxMjgsIDB4MDAwMjAxZTAsIDB4MDAwMTAyMDAsCisJMHgwMDA3MDIxMCwgMHgwMDAyMDI4MCwgMHgwMDBmMDAwMCwgMHgwMDA4MDBmMCwgMHgwMDAyODE3MCwgMHgwMDBiODE5OCwKKwkweDAwMDIwMjUwLCAweDAwMDEwMjcwLCAweDAwMGI4MjgwLCAweDAwMDgwMzM4LCAweDAwMTAwMDAwLCAweDAwMDgwMTAwLAorCTB4MDAwMjgxODAsIDB4MDAwYjgxYTgsIDB4MDAwMjAyNjAsIDB4MDAwMTgyODAsIDB4MDAwZTgyOTgsIDB4MDAwODAzODAsCisJMHgwMDBiMDAwMCwgMHgwMDAxMDBiMCwgMHgwMDAyODBjMCwgMHgwMDA1ODBlOCwgMHgwMDAyMDE0MCwgMHgwMDAxMDE2MCwKKwkweDAwMGUwMTcwLCAweDAwMDM4MjUwLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLCAweGNjY2NjY2NjLAorCTB4MDAwMDIwMDAsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4Y2NjY2NjY2MsIDB4MDAwMDIwMDAsCisJMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHhjY2NjY2NjYywgMHgwNDAwMjAwMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB0c2VtX2ludF90YWJsZV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1MWZiZmYwMCwgMHgwM2YwYzBjZiwgMHgxOWQ5YjM4YSwgMHgyMjcxNzYxOCwKLQkweGE3MDE0M2Y4LCAweGE0MzAzMzMyLCAweDEwMjY3MTAzLCAweDk3ZTIwNGFmLCAweGFmMGMwYzhjLCAweDJmZDc4OTE4LAotCTB4Y2Y2MDg2MjEsIDB4Mzg2MDY2MTAsIDB4NDIwNmM0MDIsIDB4MjI0NTBjMGMsIDB4YTA3YWYxMDgsIDB4ZmU0MDdiOWEsCi0JMHhiNjk4YTg0MiwgMHg3NmMzMDMyOCwgMHgzYmY3ODFkMSwgMHgzNDk1NzAzNSwgMHgyNGE0NThhNiwgMHg0NThkNWQ4MiwKLQkweGEwZDcxOTFlLCAweDQ0OTRlZmM5LCAweGQwMTJkN2U1LCAweDQ1MzhkMDNmLCAweDUxM2Y5NTA5LCAweDU0N2Y0MjAxLAotCTB4MzQyZmE2ODQsIDB4Zjk1MDQ5ZjksIDB4YTU3ZjUwMzksIDB4NzczNzYxMjksIDB4MDAxZTU0MmUsIDB4NjFhYThhOTIsCi0JMHgwMDAwMDM2MAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NTFmYmZmMDAsIDB4MDNmMGMwY2YsIDB4MTlkOTQ1OGEsIDB4MTEzOGZjMTgsCisJMHg1OTgwYTFmYywgMHhkODE4MTk5OCwgMHg4ODAzOTg4MCwgMHg4MWI4ODAzZCwgMHg5MWExODE5MSwgMHhkYWZkNzg5MSwKKwkweGJmNzYwODYyLCAweDZlYzMwMzMwLCAweDAyMTFlNjIwLCAweDEwODIyMzlhLCAweGYzNTQwMjlmLCAweDBmNWZjODA2LAorCTB4NjUxMmIzMTUsIDB4M2EyNjM4NjAsIDB4MDZhNzdlZjAsIDB4Mjk4ZDJhZGUsIDB4YzExMjQ1MzYsIDB4MWU0NTg2ZGUsCisJMHg5MzQ3NmYxOSwgMHhjYTg5MjJmZiwgMHhmZjQwNDFkZiwgMHg2NTI5NjM0MCwgMHgyMjlkYmU1NCwgMHgwNGE2NWU4NCwKKwkweGU0ZDFhNWExLCAweGQ3ZjJhMWVkLCAweDUxOTJmZWExLCAweDBkZWU2ZWM2LCAweGY4MDAzY2E4LCAweDYwNjU0OTVjLAorCTB4MDA2MDY1NDkKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgdHNlbV9wcmFtX2RhdGFfZTFbXSA9IHsKIAkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGQ1NTQ3ODBiLCAweDczM2VmMGI1LCAweDQ5OTk5Y2NlLAotCTB4MjA0ZTRjY2UsIDB4MzA4NDA5MDksIDB4NDM1MTE4NzksIDB4N2MwNjFlMWMsIDB4MjAxMjc2ZjQsIDB4MDZiZjJhZTUsCi0JMHgwZWEyYTE3YywgMHgyZGU0MjEwOCwgMHhlYmY4ZmVhNSwgMHgwOTIxMzJmZCwgMHhmNjM2YzU0NCwgMHhkYTJmNDVhMiwKLQkweDA1YTg1NWUxLCAweGExODBkMDNiLCAweDRhMDBlZTA1LCAweDc4MzZkYWExLCAweGY1YWIxNWJkLCAweDYyYTI5NjhlLAotCTB4OTZhZDIyNDgsIDB4YmZjYjE3ZmUsIDB4MjRmYmRhZDYsIDB4MDA2NjRlNzMsIDB4YmJmN2JkY2IsIDB4OWZhN2VmZDcsCi0JMHhlY2U3ZDlkZCwgMHhlYmRhZjdiMywgMHg3YjVhZDdiNSwgMHg1ZDhhM2RlZCwgMHgxOWQ3ZWE2MiwgMHhhMGZmODczYiwKLQkweGM2MzFiM2VjLCAweDlmMmMxOWFlLCAweDIzYTU3Y2M4LCAweDZhZDhjYmQ3LCAweDMxMjdkNDNiLCAweDBmNjIzYzE2LAotCTB4NWIxODkyNmQsIDB4YjU5ZmRhMzIsIDB4NzFjYTBkMzAsIDB4YmMyMGJlNjksIDB4ZWJlMTY3NjcsIDB4YzY1NGM2MTIsCi0JMHg5YjRhYWRmZiwgMHhlOGYyYzk5NCwgMHhmMDczYjlmOSwgMHhmMzBmODFkYywgMHg1ODU2NGIxOSwgMHg2MzAyNjUzMCwKLQkweGFmY2M2YzJiLCAweDhmYmE4MzBmLCAweGZjOWMwZmIxLCAweDdmZjg3MzliLCAweGY2MWIyNGMxLCAweGJmODc0MjMzLAotCTB4YWYzZWRmYTEsIDB4ODE0ZjY4MmQsIDB4ZWRjZGIzN2UsIDB4MTIxNTQ5NGUsIDB4ZDVkYjE5OTMsIDB4MTQwYmQyYzQsCi0JMHg5YzlhYmFjNiwgMHg0OWI0ZmU1NCwgMHg2MDI4MmY0ZiwgMHgyNjUzNGY2YywgMHg3OTM1ZjdkNSwgMHg4ZDM0OGNhOSwKLQkweDlhMDdlN2E1LCAweGIzNGY1NDdjLCAweGY3ZTNkN2Y1LCAweDJiN2M4ZTIzLCAweGNlMGQxNTk1LCAweDY4YWU1YWRmLAotCTB4MDYwYjcxODIsIDB4NjRjYzdmZWIsIDB4ZjllMDA1NDEsIDB4YWZlZWMyYTMsIDB4NWY5YWVmODAsIDB4ODUxMjk4OWYsCi0JMHg4MDJjOTlmMiwgMHhmN2U4NjUzNiwgMHg0NWZiMmVjZiwgMHg4Y2UxYjRmZSwgMHgzODdjM2Q2NSwgMHg2ODQ0ZGE3ZiwKLQkweGUxMzliMTI3LCAweDg3NDU5YzIyLCAweGUyNWM2YjM0LCAweDc3YjE5ZjcxLCAweGNkYzAzMmE0LCAweDY5OTE4MDJkLAotCTB4YjliNThjOTksIDB4NGYyZTZmZmEsIDB4NDRmNWNjNjUsIDB4MGI5YTdmYjYsIDB4NWQwY2RkZTYsIDB4MmVlYzY0OGMsCi0JMHhkZTBjMTA1NiwgMHhmODFmZmQwMCwgMHhlODA1MjViOCwgMHg2MTQ5NzZhMSwgMHg0YjI2Y2Q3OCwgMHhkMDEyY2QxNSwKLQkweDdjY2VkZDhiLCAweGE1Mzg3MDliLCAweGQ0MTQ3OWEyLCAweGRlNjBlZWZiLCAweGUzODNiZGM3LCAweDk4ODBjNWRjLAotCTB4NDZjY2Q4ZTksIDB4MzJhODY0ZTUsIDB4YTVkZDg3ZTgsIDB4ZTJlNTM2ODYsIDB4MTVjNWZkODcsIDB4MmZiNzEyZTMsCi0JMHhkNTE3ZjgzOSwgMHhmNmYxYTZlYiwgMHgwNzhkMzI4ZiwgMHg3ZjEzYjlkZiwgMHhjYmUwNzU5NywgMHhhZWY3ZDc3ZCwKLQkweDc4ODQyMzMyLCAweGUxMWY5ODUzLCAweGM2NTc3NTNiLCAweGRlMjVjN2JhLCAweDdkOGYxNjNlLCAweGM3MGFhYjJhLAotCTB4OGUxNTY3YTEsIDB4NjZkY2ZjMGIsIDB4MzY3Yjc0ZTcsIDB4YjE4ZDRhMTcsIDB4MTY2NjM4MzUsIDB4OWM2MmI1NjMsCi0JMHgwM2Q5NWEyOSwgMHgzMDAwYjI1OCwgMHhiNThjYjVlNywgMHhkZGEwYmQyMCwgMHgzYWJmNjg5NCwgMHhkZjRhZTAwZiwKLQkweDg1MmE0YjMzLCAweDBhZjFmYTdhLCAweGYyMTE1ZTY5LCAweDEwY2Y0MWExLCAweGIxMjU5ZmY1LCAweDllZjgxZDhhLAotCTB4NzBjYTkyY2QsIDB4ZTcxZjNiMWMsIDB4OGI1MGZlODYsIDB4ZTg2ZWUwMDcsIDB4ZWM5ZWRkY2EsIDB4NjE5NGZkZTUsCi0JMHg0ODU1M2ZiYiwgMHgzODU4YjVmMywgMHg3YTRmZDRiZCwgMHhkZjAzOGMxNywgMHgzOGMwZjdhNywgMHhhNTZiM2VmMCwKLQkweGZlNjliYWM0LCAweGUxYTYxNGRlLCAweDMyYzY3ZTc4LCAweDcwYTZhNDQwLCAweGE4ZDk5MDk5LCAweDc4NjdlNDI0LAotCTB4ZmM4MTY1YWUsIDB4M2YyZTMzNjQsIDB4OGJlNjM1YTcsIDB4OWY3MzdlMDAsIDB4ZDBkNDdjZDQsIDB4NzgzNTc5YWIsCi0JMHg2OWM4NWEzZiwgMHgyNjZhYTA3NiwgMHgwMWI2MzBmMywgMHg1MzA1OTNkMCwgMHg3Y2E4ZGQxZSwgMHhiMzkxOGQxMCwKLQkweGNkYTM3MzMxLCAweDk2NjNmYTI4LCAweDk5N2I5Zjk5LCAweDljZjI4NmQ3LCAweGNmM2YzNDFiLCAweGJmZDczNzZmLAotCTB4Mjc2OWRjY2QsIDB4ZGMzZjgyYWUsIDB4OGU0ZTdkY2MsIDB4YzBlMzhmMzMsIDB4MTJjZjAwZDQsIDB4NmZjMGVmMjEsCi0JMHhhZGJmMmM2YSwgMHg1YTE5NjI2ZCwgMHg5MTM5NjI0MSwgMHg1ZGNlMWM5NiwgMHhiNzY4N2E4OSwgMHhmN2MwNzNlNCwKLQkweDkwN2I2MDJmLCAweDZlZjg5MGVmLCAweDA1ZDdhOGJkLCAweDBkNWQ4NTU1LCAweDFlMjgyMDI1LCAweDk1OGFmYzdmLAotCTB4MWZiYTQwNmUsIDB4MTAxYjY1NjcsIDB4YmY0YTBkZmYsIDB4MGQ3YzAzYWEsIDB4YTQzZmFhOGQsIDB4MTdiZjZkMGQsCi0JMHhkN2RiMTExOCwgMHg0ZTAzYmUyYiwgMHg5OWJmYmYxOCwgMHhmOGMzZDZmOSwgMHgxOTdhZWM0YiwgMHhlYzNjOTdkNiwKLQkweGQ3OThiZDI1LCAweDdlNDcyZDFlLCAweGVhMDVkMzFkLCAweGZiZjA3NzJhLCAweDI3Njc4MDhiLCAweGVjZjAwMWMyLAotCTB4OTdmNGUzZTQsIDB4ZGZlZGZlYTMsIDB4YjlmNWIxMmIsIDB4NzdlZjBlMzgsIDB4MTY1Y2VlYzksIDB4ZTcwYzRkY2MsCi0JMHhmYzRlY2M3MywgMHhiYzBiNDBiNCwgMHgyNjdlZTU4MiwgMHgwMmM2MjcyOSwgMHg4M2NjM2Q5YSwgMHhjYWE5NjhmNCwKLQkweDU0Mzk0ZWZiLCAweGU5ZjdjNjlmLCAweGY5Y2NmNTgzLCAweDAwMDMzMjMzLCAweDY2MThkNjU3LCAweGIzYTU1N2EyLAotCTB4N2FmNTA3MzEsIDB4MWNiODQ1NzUsIDB4MjVjM2UyZjksIDB4MTJjMGFjYWYsIDB4MDBhZTljZjAsIDB4MmEzODhmYmUsCi0JMHhlYTdlYzc1ZSwgMHhhMjE2MzZlNiwgMHhlODcwZWRjOCwgMHg3YjFhZmUzNCwgMHg3MjM3ZDY0NywgMHgxZmE1MGYxMSwKLQkweGQwNmZjMDJiLCAweDE4NjUzMDZkLCAweGZmNDU5NWYyLCAweGM2MGZiZmMzLCAweDk4OWNiYThhLCAweDE3MmExN2VlLAotCTB4ZTIwYTNmNjAsIDB4ZjU5ZmNiOGQsIDB4MGY0MjA3ZmQsIDB4ZjgyNjFlODEsIDB4OTU3ZWNiYmMsIDB4YjYzYzMwNWYsCi0JMHhjMTdlN2FmZSwgMHgwOTUwMDE0NCwgMHgxM2YwY2JjMSwgMHg0NTUyYTJjNiwgMHg2NjNkYmQxYywgMHhhNTYxZTk3NywKLQkweGZmM2MzMTM4LCAweDc0MDRmM2Q5LCAweDAwMWE3Y2QyLCAweDc1MjdjOGI3LCAweDFjYjQzNTZlLCAweGE3NzUzZGYwLAotCTB4ZTA3NWYyM2QsIDB4NTI3NWJhOTMsIDB4ZGI3NTAxYzgsIDB4ZWZiZDE3M2UsIDB4MTFlYmNiNWQsIDB4ZTlmNWNhYjcsCi0JMHgwYTgzYTg0NiwgMHg3Zjc0NzA2YywgMHhiM2U0N2FmYiwgMHg4ZjViMzI5ZCwgMHhmNTg1OGVkZCwgMHgwOWNjZjQxOCwKLQkweGM0OWIzYjAxLCAweDE3NGFlN2Q3LCAweGRiYWRkNmFmLCAweDVmN2UxZjdmLCAweDJlNjBlNWQ1LCAweGY3NmVhZmU4LAotCTB4ODdhZjliYTIsIDB4NzZjM2EyZmEsIDB4MzZlYTRkODYsIDB4YTEyM2FiMzUsIDB4ZDdjNDM4YmUsIDB4MGUzMmJlYTUsCi0JMHg0Yzk3NzA1ZiwgMHhhNzlmNGJlYiwgMHhhMDc2ZTMzYiwgMHgyNzI2YzljZiwgMHhkMGYxODJmMywgMHhiOGNlZWVlMiwKLQkweDNhYWRmODBkLCAweGJmMWNiZGI0LCAweGY5MmFkZWFiLCAweDc3NTNlZDEwLCAweDg1OTQzYTZlLCAweDk3MjFmYWYzLAotCTB4YzkyZDlhZjMsIDB4MGZlMDZiY2MsIDB4MjlkMTNiZmUsIDB4ZWYwZWJlNDcsIDB4MTkzY2MwOTcsIDB4NzU4OGJiZjQsCi0JMHhhYzNlYTM5NCwgMHhhZDE0ZjRkYiwgMHg0ZWJlMDYzMywgMHhjZTM0ZTkzNiwgMHgxMGZlMWM4MCwgMHhlYWVmODFjNiwKLQkweDM4N2M5MjVmLCAweDBiMWI3YWM1LCAweGVlZjYzY2EwLCAweGEwZDljZDc2LCAweGQ1OWFmY2UxLCAweDZiY2UzNzQyLAotCTB4MTZlZDhhYTUsIDB4NzJlZGU2ODUsIDB4NzViZTExNzksIDB4YWZiYzM5NmEsIDB4YWQ0ZWJiNWUsIDB4OWFkZjkxOGMsCi0JMHg3MGNkYzMyZCwgMHgxMTFmYzlhZCwgMHg3MTdkOGYzOCwgMHg2ZjBiZWMxMiwgMHgxYWJkNjBlMSwgMHg0NWVhMDFmNSwKLQkweGFlYzZhNDI1LCAweGE5NDk2ZjZiLCAweDJkOWFkZjQ0LCAweGY4OWFmMzMyLCAweGY4M2RkMzg4LCAweGVkZDY4Y2FmLAotCTB4NWYzNzVlZTAsIDB4MDZkZDA1YjcsIDB4ZGJhMGFhZjQsIDB4NTFkMDVkNjksIDB4Njc4OTJmZTksIDB4ZTkxYjdjN2YsCi0JMHgyMDc0ZjAwMCwgMHgyNTVjYTA5ZSwgMHhjMGRjZjNlMCwgMHhkZmU4MTU0YSwgMHgyZTNhNjdlMywgMHhjYmUyMTdiYiwKLQkweGM3OWIzYjBlLCAweGNkMzlhYzYwLCAweGFjMGFmZDliLCAweDdiMmExZGEzLCAweGVmOTllZDEwLCAweGQzZmQ4NmI2LAotCTB4OTY2ZGJkNjAsIDB4ODAyNWIzMDIsIDB4YWEwNWI2NWIsIDB4Y2UxNWJhZjgsIDB4ODU3Zjc1YzQsIDB4OTQ2ZjZmNTgsCi0JMHgxNWFmMzRiYywgMHg4MDlmYzA1OSwgMHgyNWU5OGVmNywgMHhjMDQ5NjQxYiwgMHhjYWY1ODY5ZSwgMHg0YjllM2MxZiwKLQkweGZkNDNkY2ZkLCAweGZlNGZkMGE4LCAweGNiZDFmYjg1LCAweGQxZmE5OGE3LCAweDdlOGNhYmNiLCAweDQ5M2Y1MDE2LAotCTB4NDc0ZmQ3MTcsIDB4Nzg2Njc1ZjksIDB4N2U4ZGFiY2EsIDB4Y2YxZmE4ZWEsIDB4ZmY0YmNkYzUsIDB4Nzg2NjBkYzYsCi0JMHhmZDRiNTFiZSwgMHhiMWYzNGVhNCwgMHhiYWViODY4MCwgMHhlZGQ2MDdlMCwgMHhiNmJkZTE5NywgMHhlM2MyNzUzNSwKLQkweGNhMmY5NjJjLCAweGRjZjFjNjFlLCAweDdjYjEyNTIwLCAweGM5MjUzMjkxLCAweGZlYTk4N2M0LCAweGY0M2FhNjYxLAotCTB4MmNiYWQzYTQsIDB4ZTNkZjhmZjQsIDB4NDc1NGI5MjQsIDB4NGExN2E0YWEsIDB4OWUwOTNhNDcsIDB4YTQ2YTQ2ODcsCi0JMHgyZWJhMWUxNywgMHg4N2FlMzk3MCwgMHg0YmRhMzYzOCwgMHhhYjgxYTkwZiwgMHgwZDdjMzhmNSwgMHgxMzJjNGE3MCwKLQkweDMyMGZiMDRiLCAweDY5NWZiZTg3LCAweDFiMjg3OGU3LCAweDdkZjBiNjc1LCAweGQ2YzFiZWY4LCAweGY1MGE5ODVmLAotCTB4M2ZlOTViMzYsIDB4OTU5ZTNjZTIsIDB4MjQ5NjlkYjgsIDB4OTc2YzQ2YjMsIDB4ZGVmNmUwZTQsIDB4MGQ5MmRjY2EsCi0JMHhiNTNjMThjMSwgMHg0YmZhMDY4ZiwgMHhkYmI2ZmQ4MywgMHg1ZmM4OTkwMywgMHgwZWJmNGJjZiwgMHgxOGFkYmYyMiwKLQkweGZjN2Q5MmFkLCAweDIyYWZmMzQyLCAweDJiOGZkMDQxLCAweDIyNjY1NzQ3LCAweGM4MmExZDNlLCAweDJhZjhlYzc3LAotCTB4ZTM0NDVmOGMsIDB4N2ZmMWMwNmYsIDB4NDc3YzYwOTgsIDB4ZjhkMzE0ZGUsIDB4ZDMyYTljY2UsIDB4YzYxNTRlZjgsCi0JMHgyNmRmN2UwNywgMHgwN2M2MjViZCwgMHhkOGM3NWRmYywgMHhhMWJmY2Q0YiwgMHg1NTM5MWRmMSwgMHhiNDRhZmUzNCwKLQkweDRmYzc2MzRmLCAweDI3ZmYxODFhLCAweDViYmI4YzEyLCAweDkwZDJlYmUyLCAweDY3NWRlN2Y5LCAweGI1NGU3ZjllLAotCTB4OWYyYWZlNzksIDB4ZGZlOTVlZmYsIDB4MzQ0OWY4YzQsIDB4ZWZjZDdkZmYsIDB4NTRlN2Y5ZjEsIDB4NzgzYmY5ZjMsCi0JMHg3YmUzMDNiZiwgMHgxMDdmZjAwNiwgMHhkMTI0N2ZlNywgMHgzMDZmZjNmYywgMHhhZDRjN2ZjZiwgMHgzZTBlZmU3OSwKLQkweDBmYTUyZmZlLCAweDhkMWFmOGM1LCAweDEzZTZhYmZmLCAweDZhNjNmZTdjLCAweDExZDU3YzY5LCAweGE5MWYyMWYwLAotCTB4YzkxYTkyYTMsIDB4ZWQwNmNmOWUsIDB4OTQ3NDgyMzQsIDB4ZGNiMWNhOWYsIDB4ZjI5NzZlZWUsIDB4MjUwZjBmMDgsCi0JMHgzY2ZiYmU3MSwgMHgxYjRkZjgwOSwgMHgwNDJjNzdkNCwgMHhhY2ZhMDUxMiwgMHhjZDdjZjA1ZSwgMHg1MDM1NTJkNiwKLQkweGRlODNkZTI0LCAweDVkNDAyODViLCAweDVmMTMyNWQwLCAweGQwOGVkNWIzLCAweDZmNmYwMDY1LCAweGZhYzQxYzk3LAotCTB4MGI1ZmQ1ODIsIDB4NzFkZWI0YzksIDB4YjljYzAwN2YsIDB4YzNmZjNlMDgsIDB4YzdkNmUzZDMsIDB4MmU1YWNiY2UsCi0JMHg4ODlmYjBlYywgMHhjMzg4ZTQ5YSwgMHg2MzYzMmMxMywgMHg2YmJlMDExYiwgMHg2N2YwOWQyNSwgMHgxZTgwNGZkNCwKLQkweDNmM2ZhMDY1LCAweGU1OGEzZDAwLCAweDM4MWZjMjg3LCAweGE5OTY3YTBlLCAweDRjZDM3MmIxLCAweDZmNzc0MWRmLAotCTB4ZWViY2MxMTYsIDB4NTA5ZmYwMTAsIDB4MmM0ZmJlMzgsIDB4ZmY4ODQyOTUsIDB4NTA3YTlmY2YsIDB4YjBiNGZkNDUsCi0JMHgzZTkwMTkyMywgMHhhMDgzNDcwOCwgMHg0NzZlZmY1MywgMHhmODQ0YmQ2OCwgMHhlZTdlMjJmNCwgMHhlYzY0NTEyNCwKLQkweDVmYmVjMjc3LCAweGU5Yjg2NmI0LCAweGQ0MmNiOWJiLCAweDFmZWQwOTk2LCAweGI0NmYzNTU4LCAweDY3YmZmMzBlLAotCTB4NGM4MjYzOGUsIDB4OTQ3ZjlmN2UsIDB4OGQ5OGU0OGQsIDB4MzE4ZjgxYjIsIDB4ZmIyOWYzYTcsIDB4MzlkY2E4MjgsCi0JMHhlZmIyNmVjNywgMHhlYjk4MGFlZiwgMHhlYjk5NTRmNywgMHhkZDkwZjZiZCwgMHg2MmM2ZjY4NiwgMHg3ZTgzYWQ4OSwKLQkweGJmMzQ2ZGVmLCAweGRiYjFjNjM3LCAweDhjN2IwOTg2LCAweDA2NDc3NzhmLCAweDJjNWVmNzg3LCAweDlkNjNlMDI3LAotCTB4Y2U5ZjdhZTgsIDB4NjllMDM1YmYsIDB4MjJjZWM0NzgsIDB4ZDM0NjVlYjQsIDB4YzE2NzhmZDEsIDB4MDJkN2IyNzQsCi0JMHgxNWI3OWYzYSwgMHg0ZWVjZmJkZSwgMHg3M2MwMDU3ZiwgMHhlMTMyYzNkZiwgMHg3NDdmMGFkMywgMHgwNmRmYjI1ZiwKLQkweGNkNzQ1Yzc2LCAweGU3NjhlZDFmLCAweDg1NjNlNzVhLCAweGQ2NjVmZWZmLCAweGVhMmFlOGY5LCAweGViNDE3OWZiLAotCTB4NTYyN2NlNzMsIDB4MmFlODZhN2UsIDB4YTYzYzdlMWQsIDB4ZWZmODVkNWQsIDB4ZTE4ZjFmODcsIDB4YjMyZDlhYWYsCi0JMHhhMWM1ZjU0YywgMHgxN2VkNGNiYiwgMHg3YTY3OTlhZCwgMHhiMTYzYjBiZiwgMHhlZDAzZmRlOSwgMHhmM2VhOWEwZiwKLQkweGRhOWIwZjgyLCAweGQ5YWNiZmRmLCAweGM2ZGVmZWY0LCAweGVmZWY0Y2M3LCAweDU0Y2E3YWE5LCAweGFjZjAyYmJmLAotCTB4NzM5ZGZkYTksIDB4NGJkZTk5ZDYsIDB4ODk4ZjE2ZmIsIDB4OGMwZDVlOTIsIDB4ZjJiYjQyYzksIDB4N2U0MzA3NmQsCi0JMHg5MGRkZjgzNCwgMHgzMjlhOGY4NywgMHhlNGQ5M2NhOSwgMHhlNTE5YjJhNSwgMHhiNmRmZTQxNCwgMHhlYjBkOTc5YiwKLQkweDYzZDE4ZGU3LCAweGVkMGZmNmVjLCAweDRmMjgzOThkLCAweGUyYjdiZTU2LCAweGYwZGZjYWQzLCAweDc1YmM1NDZmLAotCTB4YzE2YjI4YzgsIDB4ZDczZDQ3NWYsIDB4ZTM2N2Q2MjcsIDB4Zjg2NDhmNzksIDB4MmU0OWNiMDcsIDB4YjcyZTU1NmIsCi0JMHhjYWIyM2JiNSwgMHg1NWFlNWZkMCwgMHg3MThkODUyMywgMHg3OTAxOGFmYywgMHgwZjM0NGIwZSwgMHgzYTc0NTY4NiwKLQkweGQ1YjgwZGQyLCAweDEzN2NkNzQ0LCAweDY1ZmIzZDljLCAweDY1MWViZjFhLCAweGZmZGZmNDE3LCAweGIyZGYxNTY1LAotCTB4MWM4ODNlYTEsIDB4MWM3NWI5Y2MsIDB4Yzg3ZmUzYzIsIDB4YTU3NGYwODYsIDB4ZDNkYmZhZDMsIDB4NzFmODYzMzQsCi0JMHg0MTU3ZjEwNSwgMHg3MzRkNDdlNSwgMHgxNGQxM2NhOCwgMHg1Mzc4ZjJhMCwgMHgzNDFmOTUxNSwgMHg2ZDE5NTIzNSwKLQkweDdiZTU0NjVhLCAweGRmMmE0MTRkLCAweGYyYTc2YTZkLCAweDU0MWQ0ZGI3LCAweDQzNWE2YjFlLCAweDQyOWE2ZmU1LAotCTB4ZjkzNmY2NTQsIDB4MmJmMDFjYTksIDB4MjY5OTNkMGMsIDB4ZmY2MTRhZWMsIDB4ZjU0MTBhYzMsIDB4MzIyZTYyZDMsCi0JMHhmMjRkZGRmYywgMHg3OTQ0Y2JlOCwgMHg1ZTdkYWQzYywgMHhlOWYzNzY4OCwgMHg3MmM2MGU2MywgMHhjYWNiZTMxMywKLQkweGNhZjEwOTBmLCAweDU0NTc2NGZjLCAweDRjMzk0MDg2LCAweDk1ZGVmYTFjLCAweGIyZTRlOWM0LCAweGY0MGMxOWIxLAotCTB4ZmQ5NzYzYzYsIDB4ODhiZjM3YzAsIDB4ODYxYjBhZWEsIDB4YjM3Yzg3ZGYsIDB4MDVmYTcxZGMsIDB4NzVlOTE1ZGYsCi0JMHg3ZjMxM2EyMSwgMHhhMDZjZjE3ZiwgMHhmZWU3ODljNywgMHhlZGZiMDRiZCwgMHhkNzBhNzVjMSwgMHhhZDMyODNjYiwKLQkweGMxYjIyYzk3LCAweGMxOGFmNDg3LCAweGZkM2ZhZDFiLCAweGJlNWU4NTNiLCAweGE1NGVmZTAwLCAweGNlZWJmODFiLAotCTB4ZDhiYjdmNDEsIDB4YTdmZjUzYTYsIDB4NDE0YzFkM2IsIDB4MGU0OWVlM2MsIDB4ZjRlYWE4NjEsIDB4NWMxZTBkZTEsCi0JMHhkYTY0OTZlZiwgMHhmMDcxZTNmNCwgMHhlMTc1OTQ2MCwgMHg1ZDhiNWQ1YywgMHhmNWNjYmEyNywgMHgwY2QyMWRkMywKLQkweGE2ZjJiZjFlLCAweGQ2N2M4NmRjLCAweDBiYzdlYmE0LCAweDU0OTlmZTkwLCAweGM5MmNmZDFhLCAweGU0ZTNmNTU0LAotCTB4M2FmODg3MWYsIDB4Zjg5NTM1YjUsIDB4NmEzNmZjMTQsIDB4NDcwZDFmZjcsIDB4ZTEwNjdlYTIsIDB4ODdiZjY0ZTgsCi0JMHhjOTE3YzllZiwgMHgzMzdlZjJmZiwgMHg3MTQ0ZmU1MywgMHhmZWM3YjYyNiwgMHgwZWU3YWUzOSwgMHhmOTFjZWZmOCwKLQkweDhkZDUwYWY3LCAweDcyYzIxYjdlLCAweDNlMzU3MWQwLCAweDBmMWE2YWRmLCAweDNlMWFmM2JlLCAweGYzYmNiOWYxLAotCTB4NGVjMmFiZjEsIDB4YmRmOWY4YzQsIDB4NzFmOTA2MzgsIDB4ZjdhY2RkMmUsIDB4ODZmNTRkNTMsIDB4YjRkZDJjYWUsCi0JMHgyMDFmZTAwZSwgMHg1MjRhYWNmNywgMHgwNTZhNWY5MCwgMHg1YTI5ZjRmNywgMHgxZGYwMDRiYiwgMHgyZTg5NzliMSwKLQkweDU3NmYxMjBkLCAweDAxYWE4Y2U3LCAweGNiNGRmMjJmLCAweGIxN2JkNzFkLCAweDJmMWE4NzY1LCAweGU5YjI3MTZlLAotCTB4MTI1MTU3YjAsIDB4OWYyMzVmYzMsIDB4OGUyMmE4N2UsIDB4OGQxYzNmOWQsIDB4MzY4YmQ0MjcsIDB4NjczMzRmNmUsCi0JMHgyNGZlODNkMCwgMHg2NjdhMGNjYiwgMHg2ZDM0MDliYiwgMHgwN2U0M2YwMCwgMHg3NTMxMzhjMSwgMHgyMWM1OWZhMywKLQkweDc1YmM3ZjdiLCAweGVkYzZjN2IyLCAweDA1YjhlYjY0LCAweGY4NTE3NGIyLCAweGI0N2FkZmFiLCAweGM1NmRlNzFjLAotCTB4YTdkNzdkNjMsIDB4MGJlNDgwNmEsIDB4ODgzMjU3ZmUsIDB4NDdiZjAzNDcsIDB4MzIwNTE1NmMsIDB4ZTViZDVmZjQsCi0JMHgzZjI3YjI3ZCwgMHgxZjBiMDdiMiwgMHgxYWRlOGYzOSwgMHg3OTk2YmYwYSwgMHhkZTY2MzkyMiwgMHhlMzhkZDY0MSwKLQkweDVhNzExN2NjLCAweGRmM2JlZmUwLCAweGUzZjE3NTgxLCAweGUzMGNlY2Q3LCAweGI0MmNlY2YwLCAweDgzMDM4MThhLAotCTB4M2ZhODM2NGMsIDB4M2JmMzZhMjAsIDB4ZmIzZTI4NmIsIDB4NDFkYjhkYjEsIDB4MDc4NTU4MGIsIDB4ZDYyYWMyOWQsCi0JMHhlMDc2ODI1MSwgMHg4MTliNjYyOSwgMHhkZWM1M2E3OCwgMHhhMThjNGNmMCwgMHgyNTU5MGNkMywgMHg2ZWQwM2NmYSwKLQkweDdlYzA0M2I2LCAweGFkMTdkNTM1LCAweGQ5MmJkNzMxLCAweDMzZDQwY2VjLCAweDJjZWRhYjk1LCAweDRjZmNkMTI0LAotCTB4M2FjOGE3ZWYsIDB4MzU4OGJiZjUsIDB4YjlmNWMwYWUsIDB4ZGZlM2NlYzUsIDB4OGNhNjc1ZjMsIDB4NWVlYWY4MDIsCi0JMHhlMzA0YmU3ZSwgMHhkY2M4YjdlMiwgMHgxYmUyMzA4ZiwgMHhmODcxODc4YiwgMHg1NGViYzNhYiwgMHg3ZGZmYmMzZiwKLQkweGFlM2JjNGU3LCAweDY4N2RmODY3LCAweGMxMGZhZTA1LCAweDkzNmY5MjlkLCAweGJmN2UyODc3LCAweDc4NTZmYzJjLAotCTB4NDg3YmY1OGQsIDB4NTFjMDQ1OWMsIDB4MWI4YTQ1YjcsIDB4ZjA1N2JkMzcsIDB4M2Y4ZmMxYjcsIDB4ZWMzNmYzMTIsCi0JMHgxZWIxOTdmYSwgMHhjYTM3Zjc2MywgMHgzMzJhYWUyMiwgMHg0YTdlZTkxOSwgMHgyOTZkMDY3NywgMHhlZmUyOWVmNCwKLQkweDVmMGUxZGMxLCAweGFjZWZjYzBiLCAweGYyMjk2MmFkLCAweGM1MGZkODE3LCAweDU5ZGRhNjJjLCAweGY3OWU4MDViLAotCTB4ZDI1N2FmNDgsIDB4YTExMjk5YmUsIDB4N2I1ODEwN2QsIDB4MzU3ZGQ4OTQsIDB4OGM1M2M5MzksIDB4ODMzNzYzNzEsCi0JMHhmNzFmMzVmNSwgMHgyNDE0ODJkNSwgMHg5YWFlZTE1OCwgMHg2ZTMxOGFjOSwgMHhmYTAwZmEwZCwgMHg3ZTUzZDI3YiwKLQkweDRiYmE4MjU4LCAweDlmZDg2NGViLCAweDk3MWNkMzIzLCAweGY1Y2Q3OTc3LCAweGY3MDNmYzA2LCAweDhhMzJjNjdkLAotCTB4NTU4ZjI1MWYsIDB4MzA4Yzc4MmMsIDB4OWY2ZTFmZDQsIDB4ZTQyZmJlMjUsIDB4MWYxM2RlMTEsIDB4YTFjNTg4N2IsCi0JMHhiOTExNmE3NCwgMHhlOTQ2MTkxOCwgMHhmMjk3ZjAxOSwgMHhmMGUzNWZkMCwgMHhkYTAwN2M1MywgMHhmYjc5ZDUyZiwKLQkweDVmMDcxMTdhLCAweDg4ZDk3NmZhLCAweDk3ODllNzYxLCAweDE1ODE5YzM1LCAweGRkNGM3ODY4LCAweDUxOWZkMzg4LAotCTB4MjVlMjY4NTgsIDB4YWMyZjU1ZTgsIDB4ZjU3YTMxYjYsIDB4MDdlMDViNjUsIDB4YTNkNDBmNDgsIDB4ZTMwNDlmMDgsCi0JMHgwNGY4NjIwNCwgMHg1NjNkNTcxYywgMHhmODVhMGZjZSwgMHgyMzg2NmZlMSwgMHhmYmY0OTk4ZCwgMHhlNWUwNWIxMSwKLQkweGNkZmM3MDc4LCAweGU5MGU2N2ZkLCAweDY4N2ZlMGZmLCAweGZhNDMwNWZmLCAweGZlYmM3NWZmLCAweGI2ZGU1ZWViLAotCTB4NTRmYzA4MmIsIDB4M2RhN2UzZmQsIDB4NjNlY2NjYzAsIDB4MDdjMzIzYTUsIDB4ZDRkZGFmNzQsIDB4ZmNiOTQxZTYsCi0JMHg5MDdhMDk0OCwgMHg2NDg3MWZhZSwgMHhmMmIzZjdkYSwgMHhlNDMxNWQ4MSwgMHgyNTQ5YWZkMywgMHg0N2M0M2ZjNCwKLQkweGUyN2M1ZjI3LCAweDNlYjdiNDY2LCAweGM5ZDc2NGRmLCAweDg4ZTJkZmJmLCAweGViMjk4MDM4LCAweGY5NzMxNzNiLAotCTB4OWY3OGUyZDgsIDB4OGE3ZTU3ZDcsIDB4NjVkMGQ5ZmMsIDB4OWJkNTE3ZDYsIDB4ZDJmMGNlOWYsIDB4ZmUxNDE1ZmEsCi0JMHg4N2ZjODQ2ZiwgMHgyODdmOGRmYSwgMHg4MWFjN2I0NywgMHhiM2RlOTNmNSwgMHg5ZmUzODc3ZSwgMHhjMmY2NDYxOSwKLQkweGU4NjUzNTNjLCAweGFlYmY2MzdiLCAweGExYTVlMDQxLCAweDY1NGY4OWYzLCAweGY5Mjg5NjEyLCAweDU1ZjZkNjhiLAotCTB4NWNmODBmYzIsIDB4OTM2N2ZiMTYsIDB4MzNlNDY0ZDksIDB4YzQyYzFmMDMsIDB4ZTVmOTAwZmQsIDB4OGUzMThiZTcsCi0JMHgzNWYxYjNkMywgMHhjYjE0NTQ4ZiwgMHg5ZGVmNWM5ZiwgMHhmZGYwM2YwZSwgMHhjYjEzN2E5ZiwgMHhjNWU4MmY1MywKLQkweGIwZGI3YjU4LCAweGMyNWRiY2VmLCAweGNiYzNkOTdmLCAweDgzYzQ3YjVhLCAweDc1ZGFmZDcxLCAweDFlMTA1Zjc2LAotCTB4ZjBkYjZlZDcsIDB4YWUzMGU3ODMsIDB4NzdjM2I2ZjIsIDB4YjM1ZmY0MTksIDB4NWNkZmQ1ZWQsIDB4ZWQ5YWY1MDcsCi0JMHg3Yzk5YjRmNiwgMHgzMTk0OWExYSwgMHhmODA2OTc0OCwgMHg0MTg0ZDk2ZiwgMHhlNGZmNTQzYSwgMHg4ZTNiZDU1NSwKLQkweGQ4NzQ3ZjNmLCAweGI2NmEzZDIwLCAweGI4ZDk1N2VmLCAweDFhOThmOGExLCAweGI1NDZhZmRlLCAweGJmMDk3NDM4LAotCTB4ODY3ZThlNWYsIDB4MmExN2YyZmMsIDB4N2RlM2ZkZDIsIDB4MWI5MTFiMTIsIDB4NWVlYjlmMDcsIDB4ZjExOTdiMjUsCi0JMHg3NDE0NzQ0NCwgMHhhNTliYTAxYSwgMHgwNWQwMDM3ZCwgMHgyNzQxYWJmNSwgMHg0MjYzZmJlYiwgMHg2ZjNmYjFkZSwKLQkweDRiZjNmMTExLCAweDkwN2RjNTNmLCAweDM4N2MzYWRmLCAweGJlOTdhYWZmLCAweDdjNzljMWU5LCAweGJlNzIzNGE4LAotCTB4YzMyZGJlN2UsIDB4ZDk1NmUzMGYsIDB4OTUzYTE5ODMsIDB4MGJkNTc5ZmMsIDB4NWI3ZTIyZGYsIDB4MTk1YmY0NzQsCi0JMHhmZTYwYmYxNCwgMHgwYWQ5MWIyYywgMHhkZjljMmNjMSwgMHhkM2I3YjVjMiwgMHg4MDU5MmFmYywgMHg3OWVhYWVmOCwKLQkweGFiZDcwMmI5LCAweDYzMzYxNGNmLCAweDc4YjkxYzdiLCAweDg3YzVjODQ0LCAweDgwZjFjMWViLCAweDBiODg3ZGY5LAotCTB4YmMwYmVlMDcsIDB4MDZkZTUzMjEsIDB4N2M1MjBmNjMsIDB4N2VjNjViZTQsIDB4ZjU0MjViMGUsIDB4NGU5YzljY2YsCi0JMHhlZmMzMTViMywgMHg5NjI3OTU4NSwgMHhlY2FlMzc1ZiwgMHgxYzljZmE0NiwgMHg3MTgxMWZlZCwgMHgwNGE2MDZkZiwKLQkweDczYTQzZTA1LCAweDc0N2NhZmQwLCAweDFmNGUwOGZhLCAweGM0NGE1NWU2LCAweGE3ZWZhMDc3LCAweGRmNmM3M2UyLAotCTB4OGFiYmY3NmQsIDB4NzNiMWRmNGQsIDB4MmZlMzgzYjksIDB4ZGMwM2UzMTUsIDB4N2VjZjY4NDksIDB4MWY3ZjExOTgsCi0JMHhhYzYyYjM3ZiwgMHhjNTU3NjAzNywgMHg3YzhjNTdmMCwgMHhmOGRmNzk3MywgMHg0MzZmOTcxOCwgMHg2NmIzNDNkZSwKLQkweGJkM2ZmYmUwLCAweGJmMDdlNWM5LCAweGUwMDU3YjQzLCAweGY3YTA4YzhhLCAweDQ4OTM2ZmZiLCAweDI0NTgzODFmLAotCTB4YjQ2ZjVjOWUsIDB4YmYzNmI5MGIsIDB4ZTAwNGY4MzcsIDB4MWRkZDcwNTYsIDB4N2ZlYzE3ZTAsIDB4ZWM5ZmUxMTgsCi0JMHhmMGQ1Y2FkOCwgMHg2Y2JlOGM1ZCwgMHg0MzNjZjFjMCwgMHg3NmU0MzNmYiwgMHg4N2ZmOTA5MSwgMHhiM2ZjYjMxNCwKLQkweDEzZWU1Y2I1LCAweGMyNDExYmZiLCAweGY0M2RhZDRmLCAweDVlNTBlNzgzLCAweDFmNzEzZTQxLCAweGJkOWI3NmJhLAotCTB4YzlmZGU3MDIsIDB4YjliZjgzZDYsIDB4OTNlNGU0MWIsIDB4NjZhNzIxYjAsIDB4ZDM5NTY5ZmQsIDB4YjBkNzFkYWEsCi0JMHgwOWZhNzI3OCwgMHg5M2M0MTNhNiwgMHg1NzFlNzg1MywgMHhmMTI4YjU0ZSwgMHhmZTk1N2ZmMSwgMHg4MmY3ZjAzNCwKLQkweDNlODY3ZjA1LCAweGFiNDc4NDRjLCAweGYxNWViYzNlLCAweGZhYWQzZTEyLCAweGM5YmRmZTEwLCAweDlmZjI4NjRhLAotCTB4YmYwNjc3YzEsIDB4NmVhOGZmNTUsIDB4MDE5ZGVhMGMsIDB4NmVmODM0YmUsIDB4YmUwZDJmODAsIDB4MzQyZjEyMWIsCi0JMHgzZTg4NmZlMSwgMHhmMDBjZDhjMywgMHg3ZmVlYzU0OSwgMHg5OWZjYzcyZCwgMHg1ZjdjM2RkYSwgMHg4NDNiYmUxNCwKLQkweDlmOTNjMDc1LCAweDg3MWQ2MWJiLCAweGQ2YzVhNTQ2LCAweGQ4N2E5NjQzLCAweGE5NmZkZWQyLCAweDA3ZGE1ODU3LAotCTB4NGI0NmY1MmMsIDB4MGJmNzEwZmIsIDB4M2NhYTBlYmIsIDB4NmE2MjI1NGYsIDB4ODJjZTVmNmYsIDB4ZWY1MzhjNmUsCi0JMHhkMjFlMjk5NSwgMHhjMGFmMzAwNywgMHhiOWFkYTRiYywgMHg2ODYzY2MyMSwgMHg1MzM4ZjE3MywgMHgwMmJhYmE3ZiwKLQkweGRlOWY1N2Y1LCAweGIwN2I0MWVmLCAweDczZTNjNWRmLCAweDllZmQxNTdkLCAweGVjM2IxOGQ0LCAweGU5MzIzZGZkLAotCTB4Y2Q4ODY4ZGYsIDB4ODIyZmU3ODgsIDB4OGJmNDQxODcsIDB4NzllZjQ0YjIsIDB4YWNiYTdkZGMsIDB4ZjhjMzJjZTUsCi0JMHhjM2VjODc0YSwgMHhlNjgyY2Q5MCwgMHhkZmI4M2QzYiwgMHhmZjI3YjdkZiwgMHg3Y2YwMzk5NiwgMHhiNjk5MTFlMSwKLQkweGZlZDBmYWYzLCAweGZiMzQ0MTRlLCAweDNmMThhYzk1LCAweDdjMTYyM2VkLCAweGEzOGMwNmU2LCAweGRhZmVlMWVmLAotCTB4YmIxNjU1ODIsIDB4YmUyMmFkODIsIDB4YWE5NmQ0YTgsIDB4YmZjMTE3YTgsIDB4OGZiY2MwZmEsIDB4NWFiYmY5YzAsCi0JMHhkNmI1NTdmNCwgMHhkZWY4ZGVmYywgMHgzN2FiZTNmMCwgMHg4NDA3ZGY5YSwgMHhmOTE2N2ZkZiwgMHhmMWQyZWQxZCwKLQkweGJiZjczYzZjLCAweDA5Mzc4ZjE5LCAweDJlNWQzYWZkLCAweGUwMGU2NWJhLCAweGNjYjBlZmJmLCAweGVmNGU1ZjkwLAotCTB4YTdmZjA5OTEsIDB4NzM3ZGYyYjcsIDB4OGI1ZjlmOGEsIDB4N2E0ZmRhN2MsIDB4MGY1M2MwY2QsIDB4NTg5YTg1Y2EsCi0JMHhmY2VjZjRlZiwgMHhkMDIzYzk1ZCwgMHgzYmQ3NzZhNCwgMHg2NTA0ZmZjNSwgMHgwYmI3YWVjZiwgMHg5N2Y1ODY3ZiwKLQkweDg3NzljYWRmLCAweDc1M2Y2ZDBkLCAweDJiZjY4YjlmLCAweDY5YjlmNmZhLCAweGVmNmZiMTdmLCAweGMxMWU3MzJmLAotCTB4OGY4NzZlZmEsIDB4ZmRmNmZlZjIsIDB4YTdmOTE4YjksIDB4MGFhM2I5NmYsIDB4NjhkZjU2ZjUsIDB4ZWNiNjY3ZWUsCi0JMHg5NDcxNzNmZCwgMHhhMjU2YzlkNiwgMHhlZTc2ZTVkYiwgMHhmM2RlOWVlNywgMHg2OTQ5ZWZlZiwgMHg3MGFjYzI1OCwKLQkweDRjOTdkZmZkLCAweDlmODZiNzcxLCAweGQ2NWUyOGJhLCAweDI1Y2ZmN2I3LCAweGE1ZmJmNmIxLCAweGVjNWVhN2NlLAotCTB4ZDliOWY2MjMsIDB4NWYwODFkOWMsIDB4Njk3ZmRmMmEsIDB4MWJiNWQ5ZjgsIDB4YTIwZjMxOWEsIDB4MDBmYWJmNzMsCi0JMHhjZmZhOWZiYywgMHgzZWEzMTQ1ZiwgMHhlZGMxZGJlYywgMHhmNDdiNWU5YSwgMHg5YjI3ZGMwNSwgMHhiOTYyYjZkMCwKLQkweDhiZDVlODFkLCAweDY0ZmI4MTQyLCAweDBiMmYzZjZkLCAweGYyZjBmMTZhLCAweDJmMDFjNTA1LCAweDhmN2YxZjE2LAotCTB4OWZmZjQ4ZjgsIDB4ZjY4OTBmODAsIDB4YjhmNzZiYmYsIDB4ZTcwOTRlNDMsIDB4ZGVmNzk3ZmQsIDB4Y2ZiMDNkNDEsCi0JMHhjYzY5N2M0MSwgMHgzMzcwOTNmNywgMHg5YTE3MWRkOSwgMHg2ZTU3ZDU3NywgMHg2MmU0NTJkZSwgMHhiZmYyYmRlNiwKLQkweGVkYmJmZjM5LCAweDJhY2Y4MjVlLCAweDdjZjk0MzA3LCAweGRmNTQ0M2VmLCAweGJjMTFmNmU2LCAweDliZWZjOTE3LAotCTB4ZGY3NDZhYmYsIDB4NWNmNzc0MDEsIDB4ZmU4N2RlNzgsIDB4YzhmZGQyYzcsIDB4M2FlZTgyN2QsIDB4ZmMzNDk5ZTYsCi0JMHhkZjA0MTdmMywgMHgyNzczZDU5NywgMHgzZGQzOWJmZSwgMHhmYjBkZmNkMSwgMHhhZjliNzFmYywgMHg2Y2UzMGYyMywKLQkweDNhYzNmZDY4LCAweGI3NjdiOWFkLCAweGYxZWZkODYzLCAweGI0NzViM2IxLCAweDJmYjE2NTE3LCAweDg0NmY4NTY5LAotCTB4MTkxZmZkY2EsIDB4NWUzMTI3ZjcsIDB4M2M4OTlhMzcsIDB4ZDEwZmVlNmQsIDB4YWQwYzFkOTYsIDB4OGY2NDk1NjgsCi0JMHg2ZTBhZGEyYSwgMHg2ZWJlMmIyNywgMHhmMWU1ZTAzZiwgMHgyOGZiZTcyYiwgMHgzODRkODc4NywgMHhmNjdhYzAxNiwKLQkweDQzOGEzZTBkLCAweDU2YzJmYzViLCAweGIwMjVmOTg5LCAweDZmMmI5NTUzLCAweDhhN2U4YzNjLCAweGUyMmRhYzdkLAotCTB4N2RmMmE2MjgsIDB4Zjg4YTU3MmMsIDB4NGQ1NzVkYTIsIDB4NjQ1NjhiZmUsIDB4ZTZiY2JiYWUsIDB4ZTdmNDQzYmEsCi0JMHg2NzdlMWM2NCwgMHg5YzYxMGIyNiwgMHg4MGUyYmU1OSwgMHhmMjY1Zjk4ZSwgMHg1MDQ5ODU3OCwgMHgyMDhlYjE3NywKLQkweDRjOGUwOWZhLCAweGM0N2ZmN2YzLCAweGI4OThkMzY0LCAweDExZWJkYTJjLCAweGJlN2ZkN2IwLCAweDA3YzUwMzc1LAotCTB4ZmVmOGJkNGUsIDB4Y2Q2ZmQ4Y2QsIDB4MDRlNjY0Y2YsIDB4NzU2ZWY0YmMsIDB4OGRmMjA4YjMsIDB4ZmZkMTUyMTIsCi0JMHhmZDk0ZWVhOCwgMHg1MjNjOGYzYywgMHgzZWNjNmI3MiwgMHhkNjI3NjFhMCwgMHg3MDRkZDhmYywgMHg4NDcwZWY1NSwKLQkweGQ1ZjdjMjY2LCAweDRjNWY3ZWJiLCAweDdlZjJmNmViLCAweDJmODM2M2IyLCAweDNkNGYzYzRhLCAweDdkYzYyZDE4LAotCTB4MGU3MTZhYmUsIDB4ZjFhNzRhYzAsIDB4Zjc3ZjhmMmEsIDB4ODM5ZTRlZWMsIDB4ODViNGJhZmUsIDB4ODc1NjQ5ZTcsCi0JMHg2MjNiYjRlZiwgMHhhYWM2NGJmMiwgMHhmMTFkYTM3NiwgMHgxMjg3ZjA1MSwgMHg3YzIwYTllNSwgMHg4Njc5ZjliMSwKLQkweDQzZjNkYTlkLCAweDY1ZDdjMzg5LCAweDY1YmU2MTBmLCAweGJkZWQ5NmY1LCAweDNlYTg3NzE4LCAweGQ5YTFmMGU2LAotCTB4NTNlNWIwZDcsIDB4ZmQ0ZjZiOGEsIDB4OTQ0ZjM2ZjEsIDB4ZTRkOTJjZmMsIDB4ZjdmMTBlNzcsIDB4ZDc0NGM4YjYsCi0JMHhiMjNhY2VmYSwgMHhmNDRlYTE1YiwgMHg4ZmM3MGZhZCwgMHgyZmM4NWM3YiwgMHhkZWYxZjlhOSwgMHg2MTQwNDE1ZCwKLQkweDdiMzY0ZmNkLCAweGIyNzFhZTMwLCAweGZjODc5MzdiLCAweDhmZTcyZGJlLCAweGVmZjEwY2I3LCAweGQ3OWQ4ZmMyLAotCTB4N2Y4OTNiYmYsIDB4Yjc3NGZkODAsIDB4Yjc4ZmYxNmEsIDB4MTVmYjI3MGMsIDB4Yjc4OTJiZTAsIDB4NGRmMDY1ZGYsCi0JMHg1ZWNmYjZjZCwgMHhjZjYzZjhjMCwgMHg0MDVlNGY4ZSwgMHhmYWZmNmI3OCwgMHhmZWQwMTdjNywgMHgzYTVjZmI2NCwKLQkweGJjMzQ0M2VlLCAweGJmMTRhZmY4LCAweDJhNWJiZTMxLCAweDg3ZjdhZWU0LCAweGQ1ZWUyOTliLCAweGY2MzU3ZTBiLAotCTB4YzNmN2JiZDYsIDB4N2EzZmY0MWMsIDB4MDMyNWZmYjcsIDB4N2JhNWU0ZmQsIDB4ZjljMDhmYTcsIDB4NzUzOWRkMmUsCi0JMHhiZjIzOGIwNCwgMHgxYjdjODk0NiwgMHg5YmI4ODhiYSwgMHgzYjA3NWU5NSwgMHg3YzlkOTIwZiwgMHg3ZThkZTgwYSwKLQkweDFlYmY4MGNhLCAweDBmZjFlM2FlLCAweGI3ZDNmMGFmLCAweDBlNmY4ZmM2LCAweDZmM2JjYmYxLCAweDkzNmJlNWJkLAotCTB4NTBmYmI0YjAsIDB4M2ZkMDVjMGQsIDB4NzhlODEzN2YsIDB4NmZkMDQ1ZjUsIDB4NWZjMjYzZWIsIDB4NTNiZjRmODksCi0JMHhlOWQwMDdmOCwgMHg1N2YwYWFiYiwgMHhlYjNlZmQwNCwgMHhlN2ZkZjg1YywgMHhmMGU3NWRmMCwgMHhlNDc5ZmU4NCwKLQkweGM0NjZmMDIyLCAweGZkNTdlZjRmLCAweDM3MjhhYmNmLCAweGYxNDQ3ZTNiLCAweDRjZGJhNDEwLCAweGI2ZWY2ODk4LAotCTB4ZWUzMDcyY2YsIDB4ZmZiZDkxZmMsIDB4ZWY1NzllM2UsIDB4YWQxZmQxZDAsIDB4YzkxNmZiZGUsIDB4YTNjZWVmNGYsCi0JMHgyMjY0OWYxNCwgMHgwNmNiZDk4ZSwgMHg5M2I4ZjFmZSwgMHhkODZiODVjOCwgMHhiZDdlZTZlOCwgMHhmZGZhM2ZjMCwKLQkweDE3M2QwZjVlLCAweDYzZTczZGZlLCAweGU0NGZlZmMzLCAweGYyYTliZmVmLCAweGFlMjMwMjNjLCAweDFkZjFiNzViLAotCTB4ZDIwZjNmZTEsIDB4NzQ4MjlhNGIsIDB4NzFiY2ZmN2EsIDB4M2EwZjAzNjgsIDB4NmM3MjYxZTIsIDB4NWM3ZTJhZmMsCi0JMHgyOWNlMjA2NSwgMHhhZGM0NjVlOCwgMHg1MDUzZTIwNiwgMHg0NTc4YzZjZiwgMHhjNThiN2E0OCwgMHhlYmJkMDdkMSwKLQkweGQ3YWJkYzc4LCAweDE5OWZjZTZlLCAweDY3OGYwZmE0LCAweGE3MmFkYWZkLCAweDYzOGI4YmExLCAweDJmZmUwODVkLAotCTB4ZWE4ODlmOGIsIDB4MGM3M2M1MzUsIDB4OGQ5Y2Y1M2MsIDB4YWI0ZmM3YWYsIDB4MzdmYTllM2MsIDB4OTAyYzg3ZWYsCi0JMHg5ZjIxZmJhYywgMHg3NWQ2M2YyMiwgMHhmM2YyYWZiZSwgMHhjYmJjZmMwNCwgMHhjOGI3YmVjMCwgMHg1MTc5ZWJmNywKLQkweDhhYzg3OGE2LCAweGUzZDI0MWYwLCAweGVjNjE3ZDU2LCAweDU1ZTE1OTk3LCAweGQ1NGY1YzFjLCAweGEyNzVmMTc3LAotCTB4YTQzYjg3NjcsIDB4MDczZDNmNDEsIDB4ZDczZjEzNzYsIDB4NDU1ZjdkNmYsIDB4OTZkMGYzM2YsIDB4OWVkY2E4OWYsCi0JMHhlYjgzZjJlMiwgMHhmZTA2Mjg0NCwgMHgxN2Y2OTc5ZSwgMHhjZjFkNzhmMywgMHgzMzhlYjYzZiwgMHhkMmYxYzFjYywKLQkweDM4ZmUyN2IwLCAweDM1M2Y1YjBkLCAweDBjMTM1MzhkLCAweGYzN2YzY2FiLCAweDU0OWRlM2ZjLCAweDdmNjI3N2ZjLAotCTB4MGNlZGJiMjcsIDB4ODY0ZWYzZjMsIDB4ZjZmMTE5ZTUsIDB4ZWIxMzNmNjcsIDB4MDM1ZTcxYTYsIDB4YjNjYTRiZDcsCi0JMHgzM2NmY2EzZSwgMHg4OTIzN2E0YywgMHgxZTk3OThmMiwgMHg5ZTBlZjE5ZCwgMHhlMjBhNWI4YiwgMHg2NzYwZjY4YywKLQkweGNlZDNlNzMzLCAweDQyOGZmMDdmLCAweGJkMWU3NzdhLCAweDZhNzVjNjViLCAweGM2MzdlMjE3LCAweGIzNzkyYzJlLAotCTB4ZjQxYmFhNzEsIDB4MTViYmM5NDIsIDB4YWQ1ZDkwOTMsIDB4MzFmMjY2ZmEsIDB4MTg3ZTA5OWIsIDB4MDNhZTA0NjcsCi0JMHg5ZTBmZDBhZCwgMHgyN2ZjYzAyZiwgMHg5NGY2NDc4NCwgMHg2NDc4NDBjZiwgMHhlMmJiYTZkZCwgMHhiNWRhOTVlNCwKLQkweDM2ZjNjYTBhLCAweGU2ZWJiNWZhLCAweDc2NzY2ZTNjLCAweGU5ZmIxN2EyLCAweDBiYzhjMmJkLCAweDNjNDE0OGFhLAotCTB4M2I3ZGQ2N2QsIDB4MjkxNTlkMmYsIDB4OTlkNjc5ZmEsIDB4ZWNiZTg0OGYsIDB4ZWYwMWYyNjksIDB4NTgxNjczZjMsCi0JMHhiZGY5MTA2ZiwgMHhkMjBlN2I1NSwgMHhiMGFhYTJiOSwgMHhhZjgwYmNjNCwgMHhlNDgzYWNjNSwgMHhhYTQ3NjZlNiwKLQkweGRiMzM1YmM4LCAweGZlN2JkNTBmLCAweDc3NTdkYTg1LCAweDJjMzVmNmYyLCAweDNjZjFlZDRjLCAweDFmMjRjNDQ2LAotCTB4MDc3NjJkMTMsIDB4OTEzZWVmZTcsIDB4YTY3YjUxZDcsIDB4ZjY2MjQ1ODQsIDB4N2MxM2VmNzEsIDB4OWJhNGQzZGIsCi0JMHhjMjJkN2JmNCwgMHhhOTM5ZTFhNywgMHgyZWE3MWE2ZSwgMHg4ZTM0ZGMzYywgMHhjY2VlYWVkMSwgMHg5MzEyMmM3NSwKLQkweDc0YTc1NDdmLCAweDlkZDViZjEzLCAweDY3MWEzYmY5LCAweDMyOWFiZTQwLCAweGZiODkwZjA5LCAweDdiODI2NTFmLAotCTB4MjYyOWZmYjAsIDB4YmZmYjA3NzgsIDB4ZTZiNWM2ODEsIDB4ZTZjZTY2NzcsIDB4NWJhY2MyNzEsIDB4Y2UzNDE5NzksCi0JMHg4NTI2NTRiZCwgMHhiNzZmMDA1YSwgMHgwZTI1ODE2YiwgMHg1ZWU5OWY2OCwgMHhjMzJhZmI5ZCwgMHgyODUzNTZmMywKLQkweDg3NjFmYTNmLCAweDhjZGU1MGE0LCAweDRhNzU5ZjM4LCAweDU4MzY4MmQ3LCAweGQ2ZDM5ZjZmLCAweGEzMDM3NTNmLAotCTB4NzA3ZjgxM2MsIDB4Mjc5MzEzNWMsIDB4M2U3NDIyYzAsIDB4ZTQzNzY4ZDMsIDB4MjA4ZjI1YmQsIDB4MTUwMTNmMWIsCi0JMHhmMmY4MGIyOCwgMHg2OGMxMWU0NSwgMHhiNGYzYTUxNiwgMHgzY2ZjZGQ2YiwgMHhjZDJkMThlMCwgMHgxMDZmZGY4NiwKLQkweGRlNzFiZTc2LCAweDQwZjljODZmLCAweDBiYzBiOWNiLCAweDliNGMwNzlkLCAweDE4ZTBmYTVhLCAweDM5NmY2MzFmLAotCTB4Nzk4YTlkM2UsIDB4OTY3NzY5ZTIsIDB4ODNhNTFmNmUsIDB4YTY1MmMxZGYsIDB4ZTk3MzdkNTEsIDB4OTdhODJjZjgsCi0JMHhmNWUxNmZiNSwgMHhjZjhlOTc1ZiwgMHhhYjk1N2E4MSwgMHgyNDZiZDc5MywgMHhiMzVmYWJjYSwgMHg2MGI0YzE3MiwKLQkweGU1ZTgyNWQxLCAweDI1MjMwMGRiLCAweDExYmNiZDI2LCAweGUyYWE3MWU5LCAweDdhMTYzYmRkLCAweDVmYTE0ZjMxLAotCTB4MTU2NWY4ZTUsIDB4MTRmNDZlZDgsIDB4ZWQ2Y2I3OGUsIDB4YTc4OGVkZGQsIDB4MzM2OGI2MzEsIDB4ZWZlZjkzZWEsCi0JMHhlYTJhNzNmZCwgMHgwOWQzMmY3MSwgMHhkNTZiM2EzZiwgMHg2OGYwN2U5MSwgMHhlNGYzYjljYSwgMHhjMmYzNTljMywKLQkweGE1ZDlmZTBjLCAweDFjMjI3NjA1LCAweGQyYzdmMzZkLCAweGFhZTdiYzM5LCAweDFmZDEzODI2LCAweDZjZjIyMzVjLAotCTB4MGZjODFkOWUsIDB4N2VmMWU3ZTQsIDB4NzVmYmUwZWUsIDB4ZWIwZjIyOTksIDB4MjliOWEzZjQsIDB4MGZhM2NlYzMsCi0JMHg1ZGJiMzIxYSwgMHg3ZDVjMGM0YSwgMHhiM2VkM2Y0YSwgMHhmZjdkOWRmNywgMHhjNDliY2MzZSwgMHg3NTljNmE3YSwKLQkweDM3ZmJmMDY1LCAweDkzYzkwYTVkLCAweGU5ODFmZjM5LCAweDBiNWZjNDY5LCAweGRlMjE3ZjA0LCAweGY4NzkzMTljLAotCTB4Y2FhMGU0OGIsIDB4ODg3NGMzY2YsIDB4OGU5YTZlZjUsIDB4YjU4Mjk3ZjMsIDB4YmVhYmI5ZjIsIDB4NjgxNjllM2MsCi0JMHhjZjkwZjc4MSwgMHhiYzg4NzFkZiwgMHgzNGJlNzExYiwgMHg3YmUzM2NlNiwgMHg3OWViNDc4OCwgMHg4YThlOGRjNiwKLQkweDU1OTc3ZTI4LCAweGU1MDcyNjc5LCAweGEyN2NlMDZkLCAweGY0ODU5MWQ0LCAweDY0Nzc5ZWIzLCAweDllMmRiZjRhLAotCTB4OWM1ZWIxMWYsIDB4ZjcwNDRjNzcsIDB4M2U4MTlkOGYsIDB4OWZlZjNmMWMsIDB4ODMwZTNiYmQsIDB4NDBiZDVmZGMsCi0JMHhlN2NhNjFmNSwgMHhhNTI2Y2JkNSwgMHgyMTVjZmMyYiwgMHg4MjBkMDVkOSwgMHg1YzZkMzJhZiwgMHgxODg3YjAzZiwKLQkweDM5ZjZkM2VkLCAweGViZmEzZjI0LCAweGM5ZDRkZjdkLCAweDMwNWVjODBlLCAweGJlZTZmYzkzLCAweGU2MzBkY2U0LAotCTB4YzIzZGY1MTMsIDB4ZmQ4Mjk3Y2YsIDB4OGY3Y2ExMjAsIDB4NzExMjkzZGUsIDB4M2YzZTQ4NzksIDB4ZTdlN2M4YjcsCi0JMHgzY2M5N2I2NiwgMHg2ZjM5ZGY2ZSwgMHhkM2ZhOTQ1NywgMHhjODYwN2Y0NSwgMHgwZjllMGM2NywgMHhmYWY5OTNlZSwKLQkweDI1ZTRkN2RlLCAweGUwYjM0NjM4LCAweDJmMTNiNDdlLCAweGQzOGYzYzc2LCAweGYwMTdmZTdjLCAweGYwNjMzYmFmLAotCTB4ODExYzc0MGYsIDB4NDI2NzM0ZjUsIDB4YzY3MDhlM2EsIDB4MWNmNWEzYTEsIDB4MjA0NzExZWEsIDB4NTg3ZGRiMWIsCi0JMHg4NjA1Njg3OSwgMHg0ZmU3YWM1ZSwgMHg0MmNjMTI5OSwgMHhkYmU5NTkzYywgMHg2YjNjNzRhMCwgMHhlYzY2Mjk4NywKLQkweDE2ZWM5NGY5LCAweDJmNTc3ZTgzLCAweGMzMmJhNWYzLCAweDhiMWNmNDRkLCAweGU3YmQ1ZTcwLCAweDZkYzIxYjUzLAotCTB4NTI3YmYxZDAsIDB4ODI3N2JiN2MsIDB4ZDY2N2FmOTMsIDB4NDRlNjMyZjEsIDB4ZWQzODgxNmQsIDB4NTA5NTk3OGIsCi0JMHg0OTlmODA3ZiwgMHg4ZjVjZmMxNiwgMHgxNGUyOWFmMywgMHhmYzUwYzJlYiwgMHgyZmVkOGY1YywgMHg4YmZlM2YwMiwKLQkweGM3ZTE4ZmMxLCAweGFlMzkwOGQ1LCAweGEwMjc3ZGMxLCAweGIzYmMxZmYzLCAweGRjNjBmMjMzLCAweDNlMjM1OTcyLAotCTB4YTY0OWJjNWQsIDB4OWZiNDJkYjgsIDB4MjgzMTk1OTksIDB4NmRhZjhiZjcsIDB4N2UwNzZmZGMsIDB4NDRiY2ZjNTksCi0JMHg5YzQwYjRmYywgMHg5YzQ0ZmYyZiwgMHhlZmU2YjEzZiwgMHg5MjA5Y2U1NSwgMHgxZTcwYmQ5ZSwgMHg0NmY0ODg1ZiwKLQkweGYzZjMxNmNkLCAweDdmYzI5ZGJiLCAweGNhMWNiMzc0LCAweDQ3ZjcxNWNiLCAweGFkN2Y4MmM4LCAweDA5YWQzZmY4LAotCTB4NmE5MDVlYjksIDB4YzdhNTY3NmEsIDB4Mjk5YjQ2ZTgsIDB4ZWE2YjNjMGYsIDB4ZDdlNDNmNDAsIDB4NmZiY2RhNjcsCi0JMHgxN2VkZmM1MSwgMHgyMGYxODY3NiwgMHgyOTM2OTJiZiwgMHgyNDk4Zjg4MiwgMHg0YjdlYzM0ZCwgMHhmZDE5N2M4NSwKLQkweGI2NjY1OThkLCAweGU2ODM3MmViLCAweGVkZjk3OWYzLCAweDk3NzlmM2U2LCAweGI1MzQ4Yzc1LCAweDllNGQ3Y2JmLAotCTB4YTExNWZkZTksIDB4YWZlZjRkMmIsIDB4NTRjMTMyZGEsIDB4Y2ViZTE3MWYsIDB4YWVlYWZlZDQsIDB4N2M3ZDUzMzIsCi0JMHhmYjUzNDZlNCwgMHg5YjY3ODc4OSwgMHhkZjc0ZDdlYSwgMHhmOTNmNmE2ZCwgMHhmYmQzN2NkOCwgMHhhNmQ1YTM2YiwKLQkweGI0N2ZkN2Y3LCAweDVhZmY1NGM0LCAweGI1MzFmZmZmLCAweGZhZTQyYzhmLCAweDY2NTM0MGViLCAweDdjOThmMWY2LAotCTB4YWEwZjAzZTMsIDB4M2Y5ZjFkMzYsIDB4OGJkMzY4NTgsIDB4Zjg2NzlmNjMsIDB4OTY1OGM1YmQsIDB4NGU5ZmQxZjgsCi0JMHgzYWE3NjdhNCwgMHhkNzYzYjJiMywgMHgzNzY2NTJmNywgMHg0ZWE5OWZlOSwgMHhmMDY0M2Q3MywgMHgwYmYwMGU0YiwKLQkweDQ1OTM3ZjEwLCAweDZkYmM4MGVmLCAweGQ1MTkzOTQxLCAweDk4M2I0Mzc4LCAweGUyZTQ2Y2ExLCAweGE3OTQxNDgyLAotCTB4YzVmOWYxYTcsIDB4OTIzNmQ5YzksIDB4OWQwOGZhYjMsIDB4MGU3MzhmOGIsIDB4MTczNTZkZmUsIDB4Zjc0ODJlZjksCi0JMHgyZTE5ODBhMSwgMHhhMzMxMDBjYSwgMHg5NjA2ZTYwYywgMHgyOTA2MGIwYSwgMHgyOGY5OWNkOSwgMHhlZWJhZDJlZiwKLQkweDE1YmRlYjFiLCAweGRjOWMwNzFmLCAweDYxNzg3MDFlLCAweGRmZDkzNzlkLCAweDY0NWZlZTIxLCAweDMxMjk3MzFlLAotCTB4YThmNTkwZjgsIDB4MWVmMGVlYTksIDB4ZDc3ZmUyZDYsIDB4ZWIyZTdhNmQsIDB4Njk3NTRjYzcsIDB4ZmZjYTRjZDEsCi0JMHgzZDk3MDQ0OSwgMHgxYjRkZmU3MywgMHhiM2Q5YmY0MSwgMHhjZjFhNTQwMiwgMHhlMmQ4ZTZkYiwgMHg5ZDQ1ZjdlNiwKLQkweDlkZTc5NzE3LCAweGYxMGJiZWQwLCAweGZiMThhNWZjLCAweDM5NzQ4YTJlLCAweDMzYzZmNjk1LCAweDNmNTZhZjk4LAotCTB4ZWZmYzlmYjcsIDB4M2Y1OTg3MmMsIDB4MjM3ZGQ2MGMsIDB4OTc5NjNlNzgsIDB4ZjlkNDI3OWYsIDB4ZGE5YjZiOWYsCi0JMHhkZjc1YzI2ZiwgMHhiN2MyZTc5OCwgMHg3ZTYwNjc2NywgMHg3ZjAyNzY0MiwgMHhlN2M1YzczYywgMHhkNTUzNDJmMSwKLQkweDhjZjAwYjRkLCAweDI1ODlkYTA5LCAweDczYjJlNzgzLCAweDY4ZTUwZDIyLCAweGY5MTE4ZDdmLCAweGUyZDhjZmQ0LAotCTB4NzU5ZDNkZTcsIDB4MDQ3YjdmNzIsIDB4MTNiNDY4MmEsIDB4Y2IzZjdlMzQsIDB4M2Q3N2NhYTksIDB4MjQ1NWIyOTgsCi0JMHg3ZjIyY2UwNywgMHhiYmJhYmZjZSwgMHhmNjVmOWY4NCwgMHg3YzNjZjI2NSwgMHhmNDM3ZTA5ZCwgMHhmMTU2OGU1YywKLQkweDFjYWRlYTBjLCAweGI5YmNkNzMwLCAweDMxMTllMTQzLCAweDJlNDY2MmI3LCAweDY2MWQ2ZmJjLCAweGVmNTQ2OWYzLAotCTB4ZjA1Y2U4OTcsIDB4ODcwZDhjYTMsIDB4OTU3ZmFkZjYsIDB4MDNkNmJlMDksIDB4OTA1ZTUyZDcsIDB4ZGExODA1YWEsCi0JMHg5OTNjYzZlMSwgMHhmNjMwMzdjOCwgMHhiYjRiM2UxMSwgMHhkNmQ0ZmM4ZCwgMHgwNWNlMDcyYiwgMHhiNTViZjIzMSwKLQkweGY3ZWM2ZThhLCAweDA4NThiYzMzLCAweDkzMmQ2OWM2LCAweGI0NzNlZjRjLCAweDAxMGYwNzhlLCAweGM5OWQ5NTFjLAotCTB4ZDY1NDk3MTQsIDB4OTY3ZTRjZGMsIDB4NjllMWM5OWEsIDB4ZDk2MjQxN2QsIDB4ZTNjM2MxMTIsIDB4MGY4ZTFlZTYsCi0JMHg0MmVhODNjMCwgMHgzZjczZmIzYSwgMHg4NjkzMTliNywgMHgyYTI5NzVmNywgMHg5ZDFjZWI5ZCwgMHg4ZDcxOWUyMCwKLQkweDViN2ViZjAxLCAweDk3MDlkOTA2LCAweDU3OTVlMTliLCAweDIxZTBmZDNmLCAweDg5ZDkwM2NjLCAweGZkZTExNjM3LAotCTB4M2QwNGNiMjIsIDB4NGI2ZGYzY2QsIDB4NWRjYjdkOWIsIDB4NGRlNWFlZDAsIDB4YjgwMGM5OTksIDB4MzBkOGNhMzcsCi0JMHgwYTFjODc5YSwgMHg0MWI3YzFjNSwgMHgxYWZiODAyZiwgMHg1MzVlNWI4NCwgMHgxNWNjZjM0ZSwgMHg3NDA0NWU3NCwKLQkweGQzMjU3NWM2LCAweGU4ODMzMTU2LCAweDM4NjM2MTllLCAweDM3ZmMyYjRmLCAweDdmZGNiOGI4LCAweDc5MGJhNWNkLAotCTB4ZTM2OWJjYWQsIDB4OTAxNzJjNzAsIDB4OWI1ZTgxYmMsIDB4YmE5N2ZkODYsIDB4ZDMxMWRhMTIsIDB4ZGJmNDcxNWMsCi0JMHhhOGZmZWU4NSwgMHgwODdkZDM5ZCwgMHgxMzZmZDk0YiwgMHg2MTYzNmQ3NiwgMHhmYTBjYmRhYywgMHhkN2VjMTZmMCwKLQkweDhmMjljYmE4LCAweDE3YmY2MzE2LCAweDE0MWJiYmIyLCAweGVlNjE3YjVmLCAweGI0MzJlZDg1LCAweDBjZmY5MGM3LAotCTB4MzllNjBjN2IsIDB4Y2ZiYmM3MGYsIDB4MzFlYmQ2NjUsIDB4ZWI5ZTdjN2EsIDB4NGFjOWVjZTIsIDB4ZGRlMWY3NmMsCi0JMHgxMmY2Yjg5MSwgMHgxYmIyNzFlOCwgMHhmYWY4ZDVkMywgMHgxZTgyZmJlZSwgMHgyOGNhYmEwZCwgMHgzZWMxMzAyZiwKLQkweDVjNWQ3N2QxLCAweDRmZjNhZGFlLCAweGM4NWRkZWI0LCAweDYxMWJjOGVmLCAweDE0ZWMwN2VlLCAweGE1NTgzZmYyLAotCTB4YTc1NmZiNGEsIDB4NThmNzVkMWYsIDB4NjhmYmU2MjEsIDB4OWJjNzk0NzksIDB4Y2I1MTlmYTgsIDB4MGYzZjIwZGUsCi0JMHhlMjA0ZjlmMCwgMHhiYjVmYzBjMSwgMHhjNjllN2Y4NSwgMHhjNWQ2ZjFmNywgMHhjZGE3YzA1YSwgMHhkNzBlY2Y4NCwKLQkweDdmOWZkODQ1LCAweGYzMjhiOWZiLCAweDgxNWU5ZTc5LCAweDBmZmJkMDc3LCAweGY1YjgzZTkyLCAweGIzOGMxMmJkLAotCTB4MzlmZWRmZDQsIDB4NzliZmZkZTksIDB4YjhlNjM5OWMsIDB4ODAyZjExODEsIDB4OWM3MTZhNzEsIDB4MmFmZjViZGUsCi0JMHg4YTUxYmFlMiwgMHhiY2VjYjY0NywgMHhhYjA3ZWU5YywgMHg0OWY0MzMyYiwgMHg0NWNlOTNhMywgMHg3ZDExZTc2NiwKLQkweGY4NzJlZDRlLCAweGMzNTNjZTExLCAweGQ0ZWM1Yzc4LCAweDMwODdjOWFlLCAweGQzNDlmMzJlLCAweDczZDhiY2UxLAotCTB4M2E1ZWE3NTksIDB4ZmU4NzYyNWEsIDB4NWEzOGVkNGUsIDB4MGY1ZTkwYTIsIDB4Zjc4Y2RlMTEsIDB4YTVmZWU3NzUsCi0JMHhlMzc3ZmQwNCwgMHhkZjAwYzFmYywgMHg0YmFmZTMzOSwgMHhmOWZjMTZiZiwgMHhmMTgwZjE2NSwgMHg1MjVmZGE3OCwKLQkweGNmNjhiM2Q4LCAweGQ2YTVlMDBkLCAweDJhN2ZmNzljLCAweGM0MTJiZGY5LCAweDEzZmZlNjAzLCAweDQ2M2MwNDVlLAotCTB4OGJiNTdiYmMsIDB4YTQ1YTlmYzcsIDB4YzZlMzEwNjAsIDB4NTRmNzUyMmQsIDB4ZmYwNmQzOGMsIDB4NDA3M2EzMTcsCi0JMHg5MjU2Yjc5OSwgMHhjYzNkZmU5OSwgMHhkNjFhYmMwMywgMHhiN2RiMGNhMSwgMHgzZTY2N2RiMSwgMHg3NTBiOWIxYiwKLQkweDExMWQyYmM3LCAweDFkZDQ5ZjdjLCAweGVkNDJiY2E2LCAweDRiMDQ3NzU4LCAweDhmZGZiNDRmLCAweDQ3ZmE4NmRiLAotCTB4NmYyYzdlZmEsIDB4ODZmZjAyZDcsIDB4MGZlYjBmZTMsIDB4ZmRmMjgxNWUsIDB4MzMxMzA1OGYsIDB4NGNhMTI2MzEsCi0JMHg2MmY2MWRmNSwgMHg4NTJjZTIxZSwgMHg3ZDNhNmRlZSwgMHgyMjc1YTY1OCwgMHgzZDczOTY2MywgMHhhOGNlZmYzZiwKLQkweDVlZWRjY2ZlLCAweDkzOTIzNzVhLCAweDgxZTlmMzhjLCAweDE1NTc1YzVjLCAweGY2MTFmYTU2LCAweGY4MTVkNWJiLAotCTB4YzMzZmY5MDQsIDB4MDg3ODVkZDYsIDB4ZmIxZDczYmUsIDB4NzllNjBlNmQsIDB4ZWRhMmY3MWIsIDB4OGZkOGFkMmEsCi0JMHhiYmZkYzZmYiwgMHgzNjdhZWYyNSwgMHg5YzlmNmUzNCwgMHgyOGRmZTVjNCwgMHhiZTM1MjdiZiwgMHhjOTYxZjk4ZCwKLQkweDYzYTdkYjhmLCAweGFlN2JlYmJjLCAweDA1NDdiYTQ2LCAweDk5OWRmOWZlLCAweDcwMmI5ZmQwLCAweDcxODU0YjBmLAotCTB4YzY2ZGE5MjQsIDB4ODc2ZWEwZDcsIDB4N2JmMWUzZjcsIDB4ZDAyYjViNWIsIDB4NjA2YTU3NjEsIDB4YmJkZTBkOTQsCi0JMHg4N2FkNzNhNSwgMHg4ZGZjM2RmMSwgMHg0OWM5NjVmOSwgMHg5ZWYxNWFlNywgMHhlNzQ5MzUzOCwgMHhiOTAyZDBmMywKLQkweGJhODE4NzQ4LCAweDRjNzc3NTBlLCAweDJiYTk2OWRkLCAweGFiY2M2ZWJjLCAweDI4NWZlMGVlLCAweDBmN2ViM2VmLAotCTB4ZWYwN2Q3YmYsIDB4MzM3ZGMzMzMsIDB4ZTUwY2I3YmMsIDB4ZTg0OTM1M2YsIDB4YjE2OThkMDksIDB4ZGFjZWExZTcsCi0JMHgzYzQ5ZTkwMiwgMHhlNWM4NTkzZSwgMHgyNjVmODhjNCwgMHg5N2UyMmY3OCwgMHhlMjkxYWM4NSwgMHg2MGYxMjM2YiwKLQkweDViZGEzZTc1LCAweGIwZTY1NGRkLCAweGY4OGQyYTdlLCAweDUxZjMxZTViLCAweGE4MmFjMDU5LCAweGE4M2FjYjFjLAotCTB4YTk4NTkyYmMsIDB4NTRkZDYyMmMsIDB4MmE3ZWIzMTYsIDB4YjE5NzRjN2QsIDB4NTQ3Y2MwOWMsIDB4OGYxYWQ5YTYsCi0JMHhmOTdkNDc0ZSwgMHhjYmU5M2IwYiwgMHgxZTBmMmRjMiwgMHgwNTA4YzkxOCwgMHg2YWE1YmEyNiwgMHg2OTg2N2U1YywKLQkweDI4NjRhMWE1LCAweDgwMzg4YjU3LCAweDE2YTlhZTcxLCAweDM1NDVlNjY5LCAweGQwN2Q5MGEwLCAweDkzZWE2NDIzLAotCTB4ZWUyMGI2MzUsIDB4MmFiOWIyOWYsIDB4ZTcxNWFmM2QsIDB4M2VkZjZiODAsIDB4MjdlNDc2NDAsIDB4YWE3OWY4ZmUsCi0JMHg0Yjk0OTM1MywgMHhlYjMyODdkYywgMHgxYWI1ODZjNywgMHg3M2U0MWJlMSwgMHgxZWJiZTIyYSwgMHhjZGJhODJlMSwKLQkweDFlZTc0ZGQ5LCAweGRmYzNjYmVkLCAweDc0NWY3MTk2LCAweDQ1ZjY5ZDliLCAweGEwMjY1MDZiLCAweDBjMmVlMzVlLAotCTB4YTc5ODRiMzUsIDB4OWY2YTUxNWIsIDB4ZjI0ZDdjNDQsIDB4Y2UxYTkzNTMsIDB4OWUwZGEwOTgsIDB4NzhmYWM0MDcsCi0JMHhlYmRmOTA2ZCwgMHhjMWNhOWViYiwgMHhmNzhmZjY3ZCwgMHhmOWViNGRiZiwgMHgzNGI5YzlmNSwgMHhhM2NlYmE5ZiwKLQkweGZiNGRjMDZhLCAweGNkY2EyYTc2LCAweGY2MDNlOWM3LCAweDZkOGRkOTM3LCAweDllMGE1ZjJlLCAweDI1ZmZlOTNiLAotCTB4YzBjYThmYmYsIDB4N2U5NWY3ZGYsIDB4YzdiZWVjNTcsIDB4NzQ1MDI2ZTEsIDB4MzdhZjYzMmEsIDB4YWJmOTUyNjUsCi0JMHhiZjk1MmYyNiwgMHgxZjk5ZDI2OCwgMHhmNjIzYjkxYywgMHhlMTExMzZhOCwgMHgxMWQwMmY0ZCwgMHhmMGY0NGZkZSwKLQkweDYxMjY2M2ViLCAweDE3OWU3YjFlLCAweDc2OTJkM2U3LCAweGQ0NDRkNTdjLCAweDc3ZDkzZTNmLCAweDc3NjM4YzE5LAotCTB4Zjc4NDlmMmYsIDB4Y2U2NGI2MjcsIDB4OTU5NDdjYTYsIDB4MWZlNzA0ZGEsIDB4YzUxNjllMDAsIDB4NzE4NzRjZTcsCi0JMHg2ODc2ZDM1ZiwgMHhkMzc5NDE5NywgMHhiODlkOTMxNywgMHhkNjk2YmZhZSwgMHhkZjcxNzlhOSwgMHgzYWVkZmM2NCwKLQkweDdmNDEwM2VlLCAweGZlYTU2ZmFiLCAweDA5YmZhMmVjLCAweDE4ZmY2YzRlLCAweGY2MGRhM2Y2LCAweDZmZDQ1ZmIzLAotCTB4YzM0OGVmNzIsIDB4MTg5YTg3ZjcsIDB4N2E1MzdkYzEsIDB4ZjdmNjFhNjcsIDB4YWY4NWEyZjMsIDB4ZGY4NDk4NGYsCi0JMHhiYmRlZTJkYiwgMHgzNDk5ZDM3NCwgMHg2N2JiMDdlNiwgMHhlNjFjOTllNiwgMHg3MzdhZjU4NywgMHgyODk1ZTM1OSwKLQkweDlhNGRkZmZmLCAweGY5MDRlNmQ2LCAweGFiMWI3MjU3LCAweDRkYWM1ZjUxLCAweDA5Y2RiOWJhLCAweDM2NTNlZmM2LAotCTB4ZjU0ZTkzYTAsIDB4MDAxNWRhZTksIDB4MWZhZTM0YzcsIDB4YmMzNmYyMDAsIDB4NjU5ZWQwNmYsIDB4ZmMzYWY4YTMsCi0JMHg4ZTVlZWJhMywgMHg4ZWI4ZmVhMCwgMHgyZDk2OWZiZiwgMHhmZGEwMTBmMiwgMHg5ZjlmYzdjYywgMHhhZDU3NzY4ZSwKLQkweGU5NjJmOWM0LCAweGQzZWU4Y2VkLCAweDU0NGY2NDQ4LCAweGYzYTI0OTlkLCAweDdhZmQ0Njc5LCAweGYzMTEwNGJhLAotCTB4OGZiNDgzZDgsIDB4NDNjNjc1NTIsIDB4YmUyZWZhZTcsIDB4MWNlOWE3M2YsIDB4MzRmZWQwZTAsIDB4OTVmMGVmMWEsCi0JMHgyOWY5M2YwNiwgMHhiYjc0YjM2ZSwgMHhmOTcwY2ZjOCwgMHhlZmJiNjA0NywgMHg4M2Y5OGRkOSwgMHg3YzQ0ZWRiZCwKLQkweDBhODNkNDBkLCAweGFhMjNkYmU4LCAweDZkZjlmZjMxLCAweDZlN2Y0MGQzLCAweGIzZGYwNzU2LCAweDY1OGY5ODI5LAotCTB4ZjQ3ZTY3YmMsIDB4ODkyNDhmODcsIDB4N2UzYWIwN2EsIDB4ZmI0YjI0ZmIsIDB4NGRmZWEzM2MsIDB4ZTc4NTZmNmEsCi0JMHhiYWMxYWU3YiwgMHg1ZjJiZGExMywgMHgwOGVhMDYzOCwgMHg0YjM2NTNkZiwgMHhmMThjYzM3ZiwgMHg2YWZlYTExZiwKLQkweGJlZDE2NTcyLCAweDEyYmY1NWY1LCAweGFhZTBlZjQzLCAweDY2N2JkMmYzLCAweGFkNmRkM2QyLCAweDkwMTFmZGYwLAotCTB4NmViZjVhNzMsIDB4YTE3ZWI0NjcsIDB4ZjQ2MmY5ZGMsIDB4NmViMTRjZTAsIDB4ZDJiOTlkNTUsIDB4M2E0MThmNDQsCi0JMHhmZWU4OWIxNCwgMHhlYzY1YzgyMSwgMHhhZGEyZWIzZSwgMHgyMTczYTRkZiwgMHhiY2JjOTMzMywgMHhlN2U0MTYxZiwKLQkweDliZTZkNjljLCAweDNmZmY1N2Y2LCAweDFjMmI3ZjFjLCAweDRjNzAwNGZlLCAweDYzODYyZmZiLCAweDQxYmM2OWFjLAotCTB4ZjA0YzhhMzgsIDB4NTFjM2U3ZmQsIDB4ZjI4ZTAwOTYsIDB4NTYxYzE0YWYsIDB4YzcyOGM1N2IsIDB4ZjY0MmJkYTAsCi0JMHhiMGYzOGYyYSwgMHhiN2IyMzZlNSwgMHgxNTE1NTJmYiwgMHgzNjk4OTdmMywgMHg1MjA0ZWM4NSwgMHg4ZWVhNWUxOSwKLQkweGYxNDZmMWY2LCAweDhmNzc5OWFlLCAweGYzYjYxZTYzLCAweDk5NWRhYzJhLCAweGU4MmFmYTgwLCAweGVkN2RjM2NjLAotCTB4ZTA3ZWYxNmYsIDB4NzQwNTYxZjksIDB4Mjc1NGU4ZDAsIDB4MTc3YjQ3ZWQsIDB4ZmM2MGQ0NTQsIDB4YjJhNzNiZGYsCi0JMHhmMWJkNGE4ZSwgMHgzM2ZmYmMxNiwgMHgzYzdmYTBhNywgMHhiNGViNzdkYSwgMHg5OGRiMTdiNCwgMHg2OTA1ZWY0OSwKLQkweDI0MWU5N2RkLCAweDEzZWU3NmJiLCAweDJjOTRkYWRiLCAweGNmOGQ5YmQ0LCAweDA1MmMxZGEyLCAweGNlMWRiNWI3LAotCTB4ZWI5ZWY3OGEsIDB4NWY5MjdiYWQsIDB4NTQyOTc1YTIsIDB4M2Y0NGFlYzYsIDB4ODUwYWU0MjgsIDB4ZGEzZDIwMGYsCi0JMHgyM2QyMWYzNCwgMHg3YjUwODlmNywgMHhjNzk1ZDQxZSwgMHg4MDY2YmU2YywgMHg2ZDBkNDk1NywgMHgyYmYwMGY1OSwKLQkweDlhZmExNjRmLCAweGY1MDg3ZGUxLCAweDUyN2ZiNjFmLCAweGFiM2RlMTA5LCAweGQ5YmM5YTJiLCAweDhiNDliZjc4LAotCTB4YjdkNjhmYjAsIDB4ZGYzMWQ0Y2UsIDB4YjMwYTllZDgsIDB4YjBhZTUyMDQsIDB4ZjY4NWRlMzcsIDB4ZDdlNDlhZmEsCi0JMHhlMmQ3OWNkYiwgMHgxZjZiZTA3YSwgMHgyNjdhZjNhZSwgMHg4ZjM5YjVjMCwgMHhjNTUzMzllNSwgMHg0MzdmNTg3YiwKLQkweDFlYTQ2Y2NkLCAweDdmNGFmNzUzLCAweDVmYmNmOTk1LCAweDgwZGZmMzZmLCAweDZhOTJmY2ViLCAweDE1N2ZiZmM2LAotCTB4ODc5Yjk1ZTMsIDB4ZWZlMTc4MTksIDB4NWM3NTMxYmQsIDB4YzFlNjk0NGYsIDB4Zjc5ODM0ZmEsIDB4YmViOWU3ODYsCi0JMHg0N2ZhMTQ3ZiwgMHgxM2U2MWY3YiwgMHgxYzZlM2IyNCwgMHg4YzMyNGY5ZiwgMHgyNzEwZjc4ZCwgMHhmNWEzY2Y4ZiwKLQkweDhiZWIwNDM1LCAweDU3OGZkZjA3LCAweGIxOTYzY2U4LCAweDY3MWNlM2JmLCAweDZjMWRmZGEzLCAweGRjZTRmNThmLAotCTB4NzNmZmRhM2MsIDB4MDhiZTYyY2UsIDB4Njk2NmVkZTYsIDB4ZjE1MGJmN2MsIDB4MzhmY2MzNGYsIDB4ZjhiZjAwZjcsCi0JMHg4YWE4ZGUyOSwgMHg5MjZkMGZmZCwgMHhhOTNmZmY3OSwgMHgzOWI0YmJmNSwgMHg3ZTY0NTQ5ZSwgMHhkNzMwMmNlZSwKLQkweDFmMzdjYzFkLCAweGI2NmE5NjgzLCAweDU5Mjg3OWY5LCAweGIzODdlZmM0LCAweGU0NTdlODkxLCAweDZjMzY4MmRiLAotCTB4NTEwYjA1NzcsIDB4OTA4YjE1NzksIDB4NDU4ZTNmNWQsIDB4ODYzNTdlYTksIDB4MzhmMWYzM2UsIDB4NzAwZTk3OTQsCi0JMHg5OTdlNjQ0ZCwgMHg2NDJiNDdjNywgMHg2ODE2M2JmNCwgMHhiZjY4Y2Q4MSwgMHhmZTE2NGM2ZiwgMHg2ZmRlNDhjYSwKLQkweDc3YzE0NTRiLCAweGJlMjk3YmE2LCAweGM1ZTUxOWIxLCAweDU1OWVhZmE4LCAweDQ0OGRmMTRlLCAweDNjNjlhNWYyLAotCTB4ZGVlMjM4OGUsIDB4ZmJkZWYzODIsIDB4OGY4Y2Y1MzksIDB4M2NlNDYzNzksIDB4YmI3OWUzNWQsIDB4YmEzMWI3MGQsCi0JMHgwZjYxYTI4ZiwgMHhmNzhjYTNmNywgMHg3ZWYzMjRhZiwgMHgyZmM0MTIxYiwgMHhjMTVmYWU0MSwgMHg0NTlmN2M3OSwKLQkweDc0YjllZGNiLCAweGQzZGZjOWNmLCAweGRhOGZiMDNkLCAweDE3NTQ4MjE4LCAweDZkZmI5Yjc5LCAweDUxM2I3YjE2LAotCTB4OTJjZmQ5MWUsIDB4ODBmMmZlNzksIDB4MThmYzIzNWYsIDB4Y2U5MDM1ZjIsIDB4ZTA1OTdmYzIsIDB4YmU2ZWU4MzIsCi0JMHhjN2I4YzFjZiwgMHg0ZGM4NGZhMSwgMHhjNDRhYTU1ZiwgMHgwOTgzNDA2OCwgMHgwNWI3ZTllYSwgMHg0YTgwMWVlOCwKLQkweDM1Y2E5ZjMxLCAweDFmZTgxOWE1LCAweDE3N2ZkODJjLCAweGY1NzBiOWMxLCAweDBlMzAzNTJjLCAweDIzY2RjOWNmLAotCTB4NWQ3ODE4YmMsIDB4ZmUwZmYxNjAsIDB4YmNmMTMxZDgsIDB4OWVjMzMyZjEsIDB4YzMwM2ZjMzYsIDB4MDlmYWIwMWYsCi0JMHg3MWJmYmU4OSwgMHg0M2EyN2VlYywgMHhlZDI5NjY3OSwgMHg3YjIzN2VkYiwgMHhjMGViMGQ5NiwgMHg0ZmJjN2U2ZCwKLQkweDc4YWYzOGNhLCAweDlmZWVjZWM0LCAweDY0Mzk0NDVkLCAweGIzZjlmMDMzLCAweDU1MGY3ZTJlLCAweDc1NDNkYzQ4LAotCTB4MGMzZjliZDgsIDB4ZmY5MTliYmYsIDB4YmU1ODE1YzUsIDB4YTg2YjBjZTYsIDB4N2IzYjVmYjcsIDB4MWZmMjY2ZjQsCi0JMHg3OTg2YjA5NCwgMHhlZTE0YTcxNywgMHhjNjc1MTlmZiwgMHhiZjE0YzhjZSwgMHhjOWJmNzgxNywgMHg4ZmRkMDZmZCwKLQkweGVmZWU1MzcwLCAweDlkNzhiY2U4LCAweDU3M2EwZGZiLCAweDRlZDNhYTdlLCAweGI5Mzc3Mjc5LCAweGY3YjE2OWMyLAotCTB4YmI5NGRjNjcsIDB4Zjg3Y2VkMzcsIDB4MjM4N2ZjMzEsIDB4NzljM2RlMDIsIDB4NjgwNGU0OWYsIDB4ZTE5ZjkxNWMsCi0JMHg0YjlkMjBkZiwgMHgzNWJkZmM0ZSwgMHg0NzFhZTMzZiwgMHg2MWYyMzc1OSwgMHg1ZGQ3ZTBiNywgMHg4MzQ1MjA1YSwKLQkweDIxNzY2ZGIyLCAweGFjZGE0ZmM5LCAweGJmZGU0ZTQ5LCAweDk0MjQ3ZjM5LCAweGM1N2M0NGNjLCAweGZmMDY0N2NjLAotCTB4NTkwNWVmNTksIDB4ZTg3M2YxMmEsIDB4Mzg2YWUwODksIDB4YWZhZDMzNjMsIDB4YTg4NGY3ODMsIDB4OGFmNmJlYjQsCi0JMHgyNjc3NDM3OCwgMHg5MDdhZmE3YiwgMHhkMWFjNTk5NywgMHhlMjZmZmI0ZSwgMHhjOTE2OTU3ZSwgMHgzMTNkNDc2YiwKLQkweGRmYjk2ZmNiLCAweDU1NTFlNDQ3LCAweDJkZjBmNTg4LCAweDZhMDUxZjkxLCAweGU2M2Y1NWYxLCAweDdkM2YzMTc1LAotCTB4NjNlZTJkZDcsIDB4OGY2MDJjNjEsIDB4ZmQwMjNmOTcsIDB4YWRkYWY0OWEsIDB4ZGJmNWNjMzMsIDB4ZWI3NWNjMmIsCi0JMHgxZTQ2ODYzZCwgMHg3YTRkMmJjYywgMHg1ZDNkZWM3NiwgMHg4N2U4MTJkMywgMHhhNWRiMzUxYiwgMHhjZDFhMGZjNSwKLQkweGFlMjMwM2YxLCAweGMzZjk4NzU3LCAweGUzYzJjZmI0LCAweDdjOWRkMzdhLCAweDhiODhiMmZjLCAweDM0MWEyZmY2LAotCTB4Yjg4NjFkNzUsIDB4M2RlMTlmNTEsIDB4YWUzNWQzZjYsIDB4ODQ1ZTMwNmYsIDB4NTc0ZDA0ZjcsIDB4NDM2ZGZiOGMsCi0JMHhlZjkzOWYyMiwgMHg2NDU3YTQ3YiwgMHg3ZGZkZmI4YSwgMHg1NGFmNzQ5OSwgMHgxY2U5OTI1NywgMHgzODY3MTFhYiwKLQkweDQ5NGRlMDVkLCAweDNiN2YwZjNkLCAweGFkNzBkOGQ2LCAweDU0YWZhODE4LCAweDA3Yzg5ZDFhLCAweDVlNzliMzJiLAotCTB4ODcxZjIwZDUsIDB4Yzc1NGYxNGMsIDB4ZmRlZTM1MWEsIDB4ODBmZDAzNzIsIDB4ZTI3M2MxNWUsIDB4ZGI2ZmIxMmUsCi0JMHhkOGY1ZjhhZSwgMHg1ZWMzODQ3OCwgMHhkYTdmMjNhMSwgMHg1ZWRkNjVkZCwgMHhhYjU1ZTVlMCwgMHhhYmM3MmNlZSwKLQkweGJmMzA1YTBiLCAweDQ2OTRlYzE3LCAweDgyMmJlYmVkLCAweGVkM2I0ZmUwLCAweGFmNzhjM2JlLCAweGYzNmRkM2FmLAotCTB4YWNkYzdhZTIsIDB4YWIzZjY4ZDksIDB4ZWI0OWQzMjUsIDB4NTZhOTBhZWYsIDB4ZThkMmY1YzcsIDB4Njg1NTE5ZDcsCi0JMHgzY2I1YTczZSwgMHhlMDg5N2ZkMiwgMHg2NjlmYzE1MywgMHhiZTYzMWZiNCwgMHg2ZjNmZWE4ZiwgMHgwZGRhOGQzYywKLQkweGUwZWFmZmI5LCAweDc1NjcxNGI1LCAweGZmOTQ2ZDc5LCAweDc0NjgxNmE0LCAweDVmYzE5YThmLCAweDZiOWM3ZWQ2LAotCTB4MjRmZGI4OTQsIDB4YmE0MjdmYzIsIDB4ZDc5NGEzZGIsIDB4ZGZjNWFiZDYsIDB4YmI0OTdlNWYsIDB4YjllZWJjYzQsCi0JMHhlYTc3Nzg5NiwgMHhmODIzMGE2ZiwgMHhlMGY1MTRiZCwgMHg4ZjkwMmViOSwgMHhhYjhjMzQ5NywgMHhhYmZkM2U4ZCwKLQkweDQ3YzkyZjUyLCAweGUxYWZjZjA2LCAweDJkYTJkYjcyLCAweDVmYmNmMjc3LCAweDg5NjkzZGYzLCAweDRiYzBkMWY4LAotCTB4NDcyODNjMjIsIDB4NGZkYzUxZmUsIDB4ZmFiMTYwMWYsIDB4NTYzNTI5YzYsIDB4NjhlMWJlZDAsIDB4MTM4YTZkODUsCi0JMHg1Y2RjNTE0ZiwgMHgzZTI4Yjc0ZiwgMHg2YmY5NWZlMiwgMHgwNzVjNGUxNSwgMHg5Y2NhZDM5YSwgMHhhNmRmOWZiOCwKLQkweGQxNzI1Mzc4LCAweDMzMjIzYzNlLCAweGVhYjU5YjhjLCAweGNhMzFiOTY2LCAweDRmN2VmMWM3LCAweDg4OThlMzgwLAotCTB4MjdkZjVhOGIsIDB4MzgwYmM4MjUsIDB4YzdmNWQ2MjcsIDB4ZWRkYjVmZjcsIDB4MDA5ZjBmM2YsIDB4NDkxZTY4ZGUsCi0JMHg3YThlOGE3OSwgMHg3ODczYjY0MSwgMHhlZDdkYzU5MywgMHhjNDRkZmE4OSwgMHhlN2VjNGYxZiwgMHg4YWJiZTBmNywKLQkweGNhOGU3NDljLCAweDM4YWI1ZTNhLCAweGYwMGFkNzJmLCAweDlhZGI5ZGEwLCAweGJlZTNlMzBkLCAweGM5ZDE1N2I4LAotCTB4YzQ5YjFlOGUsIDB4YTE3YzMxOWMsIDB4ZjdhMjRlYTQsIDB4M2MzNGI1YTcsIDB4MTM1YWM3YmIsIDB4YTc4MTlkZjAsCi0JMHgxZjU1MmVkNywgMHg5N2ZjMmMwNywgMHg5NzhhNWJmZSwgMHg1ZmRmZjBjNywgMHg2YmRmZjFlMywgMHgxY2U5NzNjOCwKLQkweDJkN2JkOGZlLCAweGJmYmU1NDk1LCAweGM4ZDc4NTY3LCAweGRiNjY3N2FmLCAweGMwNGJlZDRjLCAweGEzNzFlMGI3LAotCTB4MDMyYTFjZWYsIDB4NTAzMTFjZDYsIDB4ZjE4NzA2MDcsIDB4NzFjZjUxM2EsIDB4NzRlMjJlN2YsIDB4NzE0ZmI2MGUsCi0JMHg1NWJjYTc3ZiwgMHhjMzlkM2FhMSwgMHhlYmZjZWY4MywgMHhmNzRmNmEzNCwgMHhjZWExZDRkOSwgMHhmNmFhM2YwNywKLQkweGIwZTk4ZDRlLCAweDRiZDU5ZjNlLCAweDZmMDBkZGQzLCAweDdlMDFmNzQ5LCAweDlkMzNhNjFlLCAweGY4OGI1ZWZmLAotCTB4OGRlZjBhZGUsIDB4MWJmNzRlMWUsIDB4Mjk5NTNhM2QsIDB4YzIzZmZjYzcsIDB4ZWNlODNmZGYsIDB4MWM2MmYyNGUsCi0JMHhmYzU4NzNiNywgMHhjYzc4ODNkZiwgMHg3NDJmZTQ2ZCwgMHgyOGM4ZmQ4OCwgMHg0ZmE0NGJlZCwgMHhmZjUxZWJlNSwKLQkweDhmZjI2NGVlLCAweDk5YTdlMjg2LCAweGIxNjE3N2RmLCAweGMxZWUwNjM3LCAweDc3NjQyMjUwLCAweGMzYmIwYWQ0LAotCTB4MmU2NGJmMTgsIDB4ZjI4N2FmZjMsIDB4ZWVkNjI0ZDUsIDB4Y2E3MGZiMDQsIDB4MTVkZmY4YzAsIDB4NDc4MDJkZmIsCi0JMHg5Zjk2ZmI4MCwgMHg0ZmZiNDU1ZCwgMHhjMmFmN2Y0NiwgMHgzM2VkODRiMiwgMHg5MmM1YTIzMiwgMHgxM2ZjMDk3YywKLQkweGNlZmJhNjY2LCAweDQyZDE5Y2VhLCAweGQ5N2IxZmRjLCAweGY4OGU5ODE2LCAweGNkMTYzODZlLCAweDFiZTc3YWMwLAotCTB4YmMxZWM5MjcsIDB4NzJlZTFlMTAsIDB4N2I5YTdkNzMsIDB4NDc5ZjYxOTUsIDB4ZWIzOGQ4ZDQsIDB4ZTdhNWVkZDIsCi0JMHg4YjU3MGYzZCwgMHhmZDE4OTBmMSwgMHg3MmI3ODgzNiwgMHg3ZTkwZWJjMiwgMHhlOGFmM2ZhMSwgMHhlOTJiZTMxZiwKLQkweDNhZTlmMTJkLCAweDJjOTE5ZjQ4LCAweGY0N2NmYzM4LCAweDg5YzE2MWM5LCAweDIyYTEyZTljLCAweGU3ZGM3ZjRlLAotCTB4NWQ5Mzc5ODMsIDB4ZjU5Yjc0MWYsIDB4OGFmZWZmYzksIDB4MTMwZDM3Y2MsIDB4ZDI5ZjgwZDEsIDB4YmVmM2M0YTEsCi0JMHhkZTJjZWY3OCwgMHhlM2M0YmI4ZiwgMHg2OTNmYWQzNSwgMHgxZDQ1N2IwYSwgMHg0OTg3YzMxNiwgMHhmYTg0ZTgyYywKLQkweDRiZTg4ZTJkLCAweDc1MThmZjY4LCAweDBlMmRmZGUzLCAweGNmZWM2OWUwLCAweDkwYzhlNWM5LCAweGYxYjlkYWRmLAotCTB4ZWRjNzM2ZTUsIDB4Yzc0ZGY5ZTEsIDB4ZjdkYzFlMjIsIDB4MDNlMzhlOTgsIDB4YmZjMzNiYmUsIDB4M2FjNzdiYTcsCi0JMHgzZjg2NjRiYiwgMHg2ZTYyMzA5ZCwgMHg4MzY4MGU0MCwgMHgwZmRhMWE3NCwgMHhmYzg2YWJkNywgMHg5NTc5Mzk4MywKLQkweGVkM2ZjODViLCAweGZlZTMyZWUzLCAweDhjNjdhMWI1LCAweDZiNzI1ZWVmLCAweDhiOGZhNjk3LCAweDdhZjM5Yzg2LAotCTB4ZTQwOGU1MDksIDB4Y2IyZTEwZWEsIDB4YmRmOGNiMzksIDB4NWVlMmI1NzcsIDB4MGY3MTFlOWIsIDB4ZGZjMjA3ZTIsCi0JMHhhZmY3M2E2MCwgMHgzZWIwN2I4ZCwgMHhmN2M4MWMyOCwgMHhkNmFmM2YyMywgMHhkZTBlZmZlNSwgMHhjYThlYzM0MywKLQkweDI3ZmE2Zjk0LCAweGZkYzI5ZmRkLCAweGQ0YmZiMzQzLCAweDMxYjllZTIzLCAweDY2YjZhNWZjLCAweDM2NzM2ZjcxLAotCTB4NDkzNmU3ZTcsIDB4ZjYxNjdmYmEsIDB4Zjc0YTM2M2IsIDB4ZjA2NDY3MTgsIDB4YTczOGQzZjUsIDB4ZjRhMzMyYzcsCi0JMHgxZjA2NWE3YiwgMHg3ZmIzZTIyNSwgMHg3YTgwZjIxMSwgMHg4Zjk3MTgyZiwgMHhlMzJmZTI1NSwgMHhlZWIwMDdmOSwKLQkweGI1ZWM2MzA1LCAweGQwMTUxZmY5LCAweDk4MDc5YmI5LCAweDBmOTdlMjhmLCAweDYwYjMyN2I0LCAweDVmM2I1ZTBjLAotCTB4NzMyZjlmODgsIDB4MjlkYjhjNDIsIDB4NDU2Njc5ZWUsIDB4N2M4MzVlN2MsIDB4YjlkMWU3Y2UsIDB4MGZkYzNlM2MsCi0JMHhlOGZlNzBhNywgMHg3Nzc5ZjcxNCwgMHhjNDY0ZmUyYSwgMHhlMTc1YTI1MywgMHhmNjVlODBjNCwgMHgyYjFmMjMyNywKLQkweDk5YmMxYzVmLCAweGM3OWFmNWM2LCAweGZiZjQ1N2JkLCAweGUyY2FiZmIzLCAweDhmMDAwNGY3LCAweDdiNjA3ZjQyLAotCTB4MTc2MmM3YTcsIDB4ZjBmZWIyNWQsIDB4NDE5YmQ2OWIsIDB4YmQyMzRmYmMsIDB4NDNmYWU5NzIsIDB4NDhmZTgwYmYsCi0JMHhmMmMyZmEyMywgMHhlMmJiNDFlZSwgMHg1N2JmMzBjNSwgMHhiNmMzYzVlZCwgMHhkMGUzZWIxOSwgMHhlNWM4NDBhZCwKLQkweGRkMGFlOTk1LCAweDg0NTU3NjQzLCAweGRhODlmYmFmLCAweGY3MTMwYzY1LCAweDVhM2MwYjBhLCAweDhmY2I0YmUxLAotCTB4MDhiNzFmY2YsIDB4ZjE5NmQ0M2EsIDB4OWVmMTkxN2IsIDB4OTQyZjljNzYsIDB4YWZlODNlMzksIDB4ZDIwYjRjYTcsCi0JMHhiYzhiYmZmMywgMHhkYWQxNzE4NywgMHhmZTJmMGUxZCwgMHgwZWNmNTI0ZSwgMHg4NWVhMTU1NywgMHhhYThlMWQ5ZSwKLQkweGZhNTBkYWY1LCAweDliZjQyZGY5LCAweGZmOGNlYzJjLCAweDY0YmZmYWU5LCAweDJmZTI3ZmFlLCAweDRiYTAxZjcxLAotCTB4YWQxYzdiYTYsIDB4NzZlOTNkZmQsIDB4ZmEwMzc3ZDMsIDB4ZTVkZDgxM2IsIDB4MmQzM2ZhMTAsIDB4OWVjNWQzOTksCi0JMHhhYjRkZDdjNywgMHhmMDIzZGQ1YywgMHg2N2MwOGY3NiwgMHgxZTU3Yjg5YSwgMHhhZTI3MjFkNiwgMHgzOWJiNDY0MywKLQkweDAwOTRmZGUyLCAweGVmM2Y3YjhiLCAweGZhNTcwODYzLCAweGVjZjAzYWUwLCAweGZiZjYzMmIyLCAweDdkM2JmOGUxLAotCTB4NzQyYjhhNDEsIDB4ODM5MjM2ZmUsIDB4ZjI5NGY2ZmQsIDB4ZmJmNTgxMzgsIDB4OGM2N2MxNjIsIDB4YzllOGVkOTksCi0JMHhmZDEyYmNkMywgMHhkMjU4NjExZSwgMHg4MDdlZGY3MSwgMHg0ZjdlNjFkZSwgMHhiMjc3MGFmMCwgMHhjNWEyY2ZiMCwKLQkweGY3M2Y5MmY3LCAweDQ4YTNmNTI0LCAweDBmMWM1MGFmLCAweDBkYmYzNjZjLCAweDBhN2U4OGYzLCAweDllNGM1Yjc2LAotCTB4YmQxNmJkZTYsIDB4YmU2Nzg1NjMsIDB4MTNiN2NmOWIsIDB4YTNmNjM3ZjUsIDB4ZGRlMzhiNDUsIDB4NWJhYzYwZmYsCi0JMHg4NmQzYmNjNiwgMHg0OWUwZTU5YiwgMHgyNmM3MWYwZiwgMHgyNTk3NGJjNiwgMHg2ZWJhMGYxYSwgMHhlYmUzMGM3NywKLQkweGU2MGJjZjMxLCAweDQ3OWUxMjdhLCAweGM4MGIzOWU4LCAweGZhZWUwMGUzLCAweGZjNmZjNWZiLCAweDU5Y2U3ODg4LAotCTB4MTNkMmIwM2QsIDB4NWRhMDA3NjMsIDB4YjA5NWViNGUsIDB4YzY1NTNiYzMsIDB4NWQ4NDRiZjcsIDB4ODI3NGZhODgsCi0JMHg5MDc3MGIxNiwgMHg2ZDk3NDkwNiwgMHhmMTJiNWY1YywgMHg0M2NjMzVmNSwgMHg5Yjg5N2VmYywgMHgyZmI0MTlmYSwKLQkweDRmYjExZGI4LCAweDM4OWQ2YmNjLCAweDhkYWFmYTNmLCAweDIxYmQ5MmI1LCAweGU5Yzg2NGYwLCAweDZlOWM4YjRlLAotCTB4ZWMzNTdjZjUsIDB4NzdlMjc1YjQsIDB4ZjE3ZTkxMmQsIDB4NjE0YWUxZjQsIDB4ZjMxYzk1YWYsIDB4OTViY2M3OGYsCi0JMHgxZjM0MmFjYiwgMHhkZDI1YTFmYSwgMHg5ZTYwMGZiMywgMHhmYzFlZTE0ZSwgMHgzOTQxOWE2MSwgMHg4Y2ZjMTQyZSwKLQkweGMxOGRjZGZkLCAweDZlM2NlZmRmLCAweGU2ZjdkZDkzLCAweDg1N2YwNDU3LCAweDdjYzBkOGM3LCAweGViZDE4ZGVmLAotCTB4N2FlMWVlZmYsIDB4MmRmYzFkMmIsIDB4NWZkMzgzOTQsIDB4Nzg1ZWJkMTEsIDB4OWUwMGUyYWMsIDB4YmEwNWFhYzMsCi0JMHhmODMwY2FhMywgMHg2ZjNjMzNhMywgMHhlMWVkMGJiOSwgMHhmNjg3Y2M2MywgMHg5ZTc4NmY3NCwgMHg0N2YwMWM2ZCwKLQkweDNmNmUxYWVmLCAweGQ1ZjllODBlLCAweDk3YTA1ZjFjLCAweDJmOTdhOGMzLCAweDJlNGZlNjNiLCAweGMyOTZiYTgyLAotCTB4NzM2NWVlZjUsIDB4Mjk2N2JmMTksIDB4NWZhMTBlZWMsIDB4ZjQ4OWU4NmQsIDB4ZTJhN2ZhZGIsIDB4NzI3ZDZmM2UsCi0JMHhlNjJiYjM2MywgMHgyZWZiNDBmOSwgMHhhODNiOWY2OCwgMHhkZjUxNmE2ZiwgMHhmM2RiMTM3OCwgMHg3OTkyNTMyMywKLQkweGM3MWU3YjNlLCAweGU2NjRmNGNiLCAweGFmM2MwMTc0LCAweGRjNjUwNmU2LCAweGIyZjU3Y2M3LCAweGFmNzgwOWRjLAotCTB4NDBhNGExZmEsIDB4N2VmODEyZDEsIDB4MGUzZTBjZjIsIDB4MmU4NDcyZWIsIDB4NDc4NzhkY2IsIDB4NDQzM2FmYWUsCi0JMHhlNDQzMjhkYywgMHhmMTI0Njc2ZiwgMHhlNzBhNDU3MiwgMHg5NzlkMjRmNywgMHgxZjljZTlmNywgMHhlM2YxM2MzMiwKLQkweGJiNDRjYjRjLCAweDNiZDcxYjNlLCAweGI3YzY5NzhmLCAweDkxNGJhZTRiLCAweDhiM2NlZDJlLCAweGRmYzZiMjRmLAotCTB4MTc0OTRiYWYsIDB4MDZkYjZhZjcsIDB4M2ZjMWI1ZjUsIDB4YzY3N2M0MjcsIDB4ZmM2MjY1ZjgsIDB4ODk5ODY3NDUsCi0JMHg4ZDI5MTY3ZiwgMHhjZThiMzdjNCwgMHg4NjM3YzQyOCwgMHgzZmUyMjQ1YywgMHgxYWVlZmY2MywgMHgxNGM2ZTA0NywKLQkweDlmYTNmNzljLCAweDIwOWM2MzE1LCAweGRmMGY2NTc3LCAweGRmZGZjMjM3LCAweDdjYjEzNmI5LCAweDQxODFlYjE4LAotCTB4OWRmM2QwNmYsIDB4M2QwMGNmMTgsIDB4YWQwYTY5M2YsIDB4ZmM4YmNmNDMsIDB4MzFhNzJlNTMsIDB4ZjA4ZmZhNzYsCi0JMHhiYjNiMWRmNywgMHg4ZTZiY2NhZiwgMHg3YWMwZWJhMSwgMHg4Y2ZlZTNlOSwgMHg4NTE5NWQ3NSwgMHg4OWU5YzA0OSwKLQkweDcyOThkNWU3LCAweGNhZWRmYWE5LCAweGYxNzg3NjA0LCAweDVlMWRhOTdmLCAweGU0ODEzZGQyLCAweDU3ODEwMWY2LAotCTB4YzQ2NmJlMjMsIDB4Nzg5N2YwYjEsIDB4OGFiM2JkYjksIDB4MWE3OTMxZjAsIDB4ZmZjMDZmOTcsIDB4MjJmZjgxNTYsCi0JMHgxYTdmZmY4ZSwgMHg2NDNkZmZjMCwgMHg3OTcwNzQyNywgMHg0YmQ2ODhjOSwgMHhmNDVmMjRmOSwgMHg0NTNiZjE5ZCwKLQkweGEwZGYyN2I5LCAweDI5M2RjZTdjLCAweGE5ZGY3ZmRjLCAweGJlNDA5ZmZiLCAweGJiZjIyNTVjLCAweGE4ODhjZjI3LAotCTB4NDA3YjU4ZGUsIDB4MmFkMTdlZmMsIDB4MWFmOWMwZmIsIDB4NTkxYmM3Y2EsIDB4MGVjZGZiY2IsIDB4MTg5NDk3ZWYsCi0JMHg4NTk2ZDFmOSwgMHhmOTgwMmNjNywgMHhmOWYxNTc2NywgMHg5YmIxNGRhYywgMHg1ODc1YTdkNiwgMHg0ODVmMmU4NywKLQkweGJiMmRmYWUxLCAweDYwMTUyMjJhLCAweDRhMzc2YjdmLCAweDEyMzdmNDBhLCAweGY4MDk4NzdmLCAweDBiMjM2NDY2LAotCTB4ZDBmZWZlYzUsIDB4NGYxZjFmNDgsIDB4MDdhNDg1ZjMsIDB4ZDNlNzA2OGEsIDB4YTQ1NTliNmUsIDB4Y2Y2OTVlODMsCi0JMHhhMGI1ZjY0OCwgMHgzNjA2YTRjOCwgMHhiZWQ3OWYyMywgMHhmMmZjYTExYiwgMHgyYjc2ZWZjOSwgMHg5ZTVmYzdlOCwKLQkweGNmODJkZmVhLCAweDY1NzhmOThkLCAweGJlZmQyNDdkLCAweGNlMWNiYmY5LCAweDMyZjc2MTBlLCAweDcxZTFjZDE2LAotCTB4ZmUwNDI3ZmYsIDB4ODg3YjBiZDcsIDB4MjNkZmE2MWQsIDB4OTRmZGI4ZDIsIDB4ZTlhYzdjYjEsIDB4ZmYwY2U3NzcsCi0JMHhmYTczZmQwNywgMHhiNTk5NjkzZCwgMHg3MGE3OGEzMywgMHhiY2IxOTZmZCwgMHg4MzRiZWM5MCwgMHg1N2U3YTYxZiwKLQkweGQzZTdjNDZjLCAweDAxMzE1YzQ3LCAweDVmYzg5N2VmLCAweDc3ZjA1MTE1LCAweGQ2YmE3ZmE1LCAweDk0ZmVmNzE2LAotCTB4YzAxZjQyNDMsIDB4Y2VjN2Y2M2MsIDB4NmI3MjQyZTMsIDB4OWQyN2IzYjQsIDB4Njc5MzZmOWYsIDB4MGRkYmI3YzQsCi0JMHgzZTdkMmMzZSwgMHgwZmJhNmVlZCwgMHhiODY1NTViMSwgMHhmZmUwNjRlZiwgMHgzNzhhZDRmMiwgMHhlMTkxOWUxMSwKLQkweDQ2ZTExMjc1LCAweDQ5YzQ2NzhjLCAweGNmY2EzOWYwLCAweDljZjlhYTA3LCAweDVjZjk0MjVlLCAweDgyY2M2M2I2LAotCTB4NTU2Y2Y5NTgsIDB4MmNlYjNlODksIDB4ZTg2ZTEzYmYsIDB4YWUxNGRlOGIsIDB4YWQ0OGVmYzcsIDB4NzFmMjAzZjgsCi0JMHgxNDUzZDc3ZCwgMHg5MWJjNTliNywgMHg0MjRjMWVmZiwgMHhmZTI0NWNmYywgMHg3OGNkZGU2MCwgMHhmODBkNWRjZiwKLQkweGEzZWY3ODE3LCAweGVlYzg5NjE0LCAweGY3YzM5ZGFkLCAweDcyYjc2YWRmLCAweDJhYWQ2NTdlLCAweDFiNTcwM2RkLAotCTB4N2Y0MTFlZGUsIDB4N2VhM2Q0NjIsIDB4ZDVhNzZlMWYsIDB4MmQyZWRkNmMsIDB4YThlYmMxOGMsIDB4MjdlNTEwZGEsCi0JMHhlNDM2ZWU1YywgMHgyYjE5ZWI4OSwgMHhkOGRjNjNkZiwgMHhjODc2ZmMwNSwgMHg5ZWVhZWRjNSwgMHhmZjA3ZWU1MiwKLQkweDdhYzkwODNmLCAweDAwODAwMDZiLCAweDAwMDAwMDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZDVmZjAwLAotCTB4ZDU5NDdjNzksIDB4Njc3OWYwYjksIDB4Y2M5MzMyNGYsIDB4MjEzM2RmNjQsIDB4NjEyNjIyMDEsIDB4MDExNjEyMTIsCi0JMHhhMDA4NDkzMywgMHgyNDU4NGUwOCwgMHg4MWVjMzZjOCwgMHg4YmY2MjhhYywgMHgwYzE5N2U5NSwgMHg2ZjYyZTQ1MiwKLQkweGI5MDU1NmFjLCAweGRhNTQ0MDc2LCAweDFhMDgwOTYyLCAweDg4YjBlODM0LCAweDE0OGQ2YWQwLCAweDQzYjA1YjA1LAotCTB4OTIxMDg4YTUsIDB4NmYxNmI2MjksIDB4NzllN2JkNjksIDB4Nzk5OTM5Y2UsIDB4ZjhiMGNjZGYsIDB4YWJiZjdlZDEsCi0JMHg5Y2NlMWM3ZiwgMHhmM2NmNmNmNywgMHgyNzNmNjc5YywgMHgyZDY3NWE1ZCwgMHgyYmE0MjIyOSwgMHhjYWU2YzIyOSwKLQkweDlkYmRlNDI0LCAweDkxNDg4ZWUzLCAweGU5NzY5ODg0LCAweDU1YWU1MDNkLCAweGQwMzQ0OTZkLCAweDc0ODNiNWY2LAotCTB4NGVkYTE2YjYsIDB4NjI5MDliODgsIDB4OGUzNWEyNDIsIDB4MTJjZmQwZGQsIDB4OTJhZGIyNmIsIDB4NDllYWIxMDgsCi0JMHhjODQ4ZDlhMSwgMHhlZWM0ZjFiMCwgMHhmMGI3ZTVhNiwgMHhhZmFkMDk1ZiwgMHg0MjVjZjVhNCwgMHhjMWQzMzRlZSwKLQkweDI5M2ZhMGUyLCAweGM5MDg5ODc0LCAweDljNzA5YjM2LCAweGMzMjExNTc4LCAweGFjMzkwOTBiLCAweDM0NDMyZTI1LAotCTB4OGJlMGJiMjEsIDB4ODlhYzg0MTEsIDB4ZTM5OWM0NzIsIDB4YjEwZjFlNjAsIDB4ZjE5NmZlZDEsIDB4NDI1OGY3ZjQsCi0JMHg1Yjg5MWE2YSwgMHg2Y2Q1ZjNhMiwgMHhmNDIzYWRkYSwgMHg3Njg0NzI3NywgMHg2NTI0MjI0YSwgMHhkNmYzODRiYiwKLQkweDJkMmNkZjZjLCAweDVlNjdiZmEwLCAweDA3NWZiNWQ4LCAweGExOTM1N2RmLCAweDdhYjNmNDYxLCAweGQwM2I4ZDg5LAotCTB4NzE4MGNmNjIsIDB4ZjYxYzdiNDksIDB4OTY1NGViMTMsIDB4YmQ3MGI4ODQsIDB4ZTliN2M2YzMsIDB4MGUzOGI5YWMsCi0JMHhiZmY0YTNlZSwgMHgwNzlmNGFiNiwgMHg1NjY2Y2ZlYywgMHg5YjM1NzdlMywgMHhhNjRmZWViNiwgMHg2MjZhOTFmMywKLQkweGVmYzU2ZmVlLCAweGU2YzVkZmY2LCAweGZmODllOGQ3LCAweDY3NTg2NGZiLCAweGEyZTc1YjJlLCAweGM0YmFmZjVjLAotCTB4MmFhYWQ3ZmUsIDB4ZGZiNGNkNzMsIDB4NWIwOGY4ZGEsIDB4YjM4YjZkMGIsIDB4N2FjMTg3MzgsIDB4MGYzYWE3OGQsCi0JMHg2MTkxODg1MSwgMHhhNzNhM2NhNywgMHg3N2ZlYmZkMSwgMHhkMTg0ODQ3NSwgMHg1OGMzODc3ZSwgMHgxNWIzNTJmZiwKLQkweDQ3NTYzYWUxLCAweGNlYmJmODVjLCAweGUzYTU2Mzk1LCAweDhlMTdlZTFkLCAweDQ5YjliZGUzLCAweGE0ZTAxZTM1LAotCTB4Mjc3MzI3MGQsIDB4Mzc5M2Y5ZDMsIDB4YjQ1NDk1NmQsIDB4ZTY0MTFiMWUsIDB4MjNkNjAyM2EsIDB4NWNjN2JiZDYsCi0JMHgwNjJlNjE1NiwgMHgxYzIyNzQzOCwgMHg3MDY5MzZlYSwgMHg0NzNhMTVmZCwgMHhmZjVjZjJmNiwgMHgyYWNjNTM3NywKLQkweGY0YzBmNzljLCAweGZhNWU3NGNmLCAweDdjNmZkM2ZiLCAweDZiYTlmODg0LCAweGIwNmRlYzk1LCAweDc0OGZkNmRlLAotCTB4YWMwMGYyZDMsIDB4Nzg5MzUzM2YsIDB4ZjYxMDI2NDIsIDB4M2U3YjMzZGYsIDB4ZWZlOTU5ZDIsIDB4ZmMzMzc2MTMsCi0JMHhhOWRlZWRkNSwgMHhhZWNiNDA1OSwgMHgxYTRiYTM1MiwgMHgzMDNjNzgwYywgMHhhZWFjZTgwNywgMHgyNGMyNGY0ZCwKLQkweDA2NzM5ZmMwLCAweGE3NDk0M2MwLCAweDc4ODQxZTAyLCAweDQyYmU4MWQzLCAweGU4MDIzM2UxLCAweDNhYWEwOGE4LAotCTB4NjdhNDdmNzcsIDB4ZmE2NGU2NjcsIDB4ZGQzNDZiN2QsIDB4OGVlODExYmYsIDB4ZDkxODgzZWQsIDB4YmVjMTBmZWYsCi0JMHhjN2U5MDJlMiwgMHhhZmU2MGNiOSwgMHg4MDFkYjcwOCwgMHgyODUxNTE3MywgMHhhYzA4NWFkOSwgMHgyM2VlMThmMywKLQkweDMxYzE5Y2I2LCAweDc5OTUzZDcwLCAweDBhYjNkNmMxLCAweDYxOGI4OWU3LCAweDM3OGQxMmYzLCAweGU3MTNlNjFkLAotCTB4ZDY0ZDRlMmIsIDB4ZmY3ZjQyOTIsIDB4ZmE1NzhlMjYsIDB4NGVmZDg3YmIsIDB4ZmNmMjM5ZmEsIDB4NmRlMjU2ZWIsCi0JMHg3NWMyNTlhYiwgMHg1NWE3YTEwNywgMHg1M2RhY2Y4MCwgMHhhN2EzMGYxZSwgMHg5M2QwMGQ0ZSwgMHg4ZmEwYmY1OCwKLQkweGM2NjkzNjU3LCAweDU2ZTM5ZTA3LCAweDZiYzcwZWIzLCAweDFkNzA2YjM1LCAweGEyN2UwMGNmLCAweGU3NjVhOTY4LAotCTB4MDY1NTk5ZjIsIDB4MTk4ZmYyMzcsIDB4Zjk0ODhmNjMsIDB4ZWJmNzJmMTQsIDB4YWJiZTUwM2MsIDB4ZWQwYjVmOWEsCi0JMHhmOWIzMjZlZiwgMHgwZjU0YWFkNywgMHhhM2VkN2Q0MCwgMHhmODgyZDI0NiwgMHhmMDA5M2ZiNCwgMHgxMjNkMzAzYywKLQkweGE1NWI1MmYxLCAweDM4ZTllYjczLCAweGIxMjZiZjRmLCAweDI2ZThjYmJhLCAweGNlYjU5ZmY0LCAweDFmYTEwYmE5LAotCTB4YmRiMzBkODksIDB4MWU3Mzc4MDQsIDB4ZjUzMzRkZDIsIDB4M2QyYjI3YTUsIDB4ZmJmYTU2ZjYsIDB4Y2U3NjM2ODQsCi0JMHhkYjZhMWUwNCwgMHhkZDAxNWQxOCwgMHg1YzM5YmMyMywgMHhjYjc0ZjBmZCwgMHhjN2MwOGRjZSwgMHhhMzMzMjg5YSwKLQkweDAwMjc0YTA3LCAweDYxNmQ5YWVmLCAweDM2MDZiM2U2LCAweGU4MDRiN2Q3LCAweDM3YWIyMmQyLCAweGNmOTkyN2I0LAotCTB4MzVlYmY4ZTYsIDB4ODNhMDBmZjAsIDB4ODY0OGM0ZWQsIDB4NzVmMDc1ZDIsIDB4ZWU3MmExYmUsIDB4MTlkNDNjMDIsCi0JMHgxNGI1ODdiYywgMHhmYTRmNDNiNSwgMHhhMjg3NWNmMCwgMHg1ZmE2OWFkYiwgMHg4NDNiMzgwZCwgMHg0Nzg5NjU5MCwKLQkweDU1ZTcxNGIwLCAweDQ3ZWQ4ZmRiLCAweGM3MGVmZjdjLCAweGQyNTBjYmZiLCAweGJhNzMwZmYxLCAweGMzNmEyOWE5LAotCTB4YjY3MzU4ZjMsIDB4NzFiMWNmMTEsIDB4YzY2N2UzM2MsIDB4NGQ3ZTcyNTMsIDB4YmY3YzEzYzgsIDB4OGE5YzcxZWIsCi0JMHg2YWIxYjY4OCwgMHg5ZjhhZjcwYSwgMHgxMjE2ZTY0YSwgMHg5MTJlNWY5YSwgMHg4ZThkYTM4OCwgMHg4M2E2YzVmNywKLQkweGJlMDBmMzkxLCAweGUzNTViZjU3LCAweDdlZDhjMzdlLCAweGQwZmU3MDRmLCAweDFjMDI4ZGI1LCAweDQ3NTFiZGU5LAotCTB4NDZmN2VjODIsIDB4ZTM5ZTIzYzcsIDB4ODZiZGUwMTIsIDB4N2I2YmJlYzMsIDB4NTEzZjg4ZjksIDB4OGI2ZDcxN2EsCi0JMHhiZGZmMDFiMiwgMHhjM2NhN2RiOCwgMHhlZWViYTI3ZiwgMHg1MzYyNWFkYSwgMHgzOGI0ZDkwMywgMHg3MTdjN2U5MCwKLQkweDk0MmRiNjYxLCAweDY0ZDU2MjdlLCAweGJlZjE0NGJjLCAweGU0NjBlZGFhLCAweGNiZWZkYTQ4LCAweGQ0MmUwYzVmLAotCTB4N2NkZDdlZDMsIDB4NTM1ZTE3OWQsIDB4MWU1YzAxMzcsIDB4OWRjNzY1N2QsIDB4OTZlMzVlZDAsIDB4Nzc4ZjgwNjIsCi0JMHgzZmU5ZmI2ZCwgMHg2ZjU3Y2Y4MSwgMHg5MzA4MDA2ZCwgMHhhM2JjNWY5NiwgMHg1NGVmZDJmMywgMHhmN2VjY2RlZSwKLQkweGY4NjY1MTZkLCAweDlmMTdjYmVlLCAweGRkZTAxM2JjLCAweGVkODJkNmQyLCAweDhjZGM1ZTE3LCAweGVjYWYwM2Y1LAotCTB4ZTliZmZiNzgsIDB4NDg4ZWI1NzcsIDB4ZTE3NzdjMWIsIDB4OTc4OGZkYjUsIDB4MGVjNmE3NWEsIDB4ZDc0NTBkZmIsCi0JMHhjZmRjZWNjZiwgMHg4NDliNjRmOCwgMHgzMTU0OGRlNywgMHg1YWU4MjVmZSwgMHhhZjk3ZWZkMCwgMHgyODExMWRjYywKLQkweDhlZDU2YTFmLCAweDRmYmUwOTU0LCAweDkyNWVkYmQwLCAweDljYTA1ZTUwLCAweDY4OGMzNzc4LCAweGRmZmVlOGMyLAotCTB4OTY4MWE1YTMsIDB4ZmJlNWVhMTUsIDB4MmNlNzgwYjUsIDB4ZDkwOGNmYzYsIDB4YTdiNWU0MmMsIDB4NmY3ZWZlODQsCi0JMHg3NWU2YzQ0OSwgMHgzZWFlZWU3MCwgMHgyNmU3OGQ5OCwgMHgxZDFkZDE4MiwgMHgzMWM3YzBjNywgMHg0MzQ0MzhjMCwKLQkweDBmYmViMGVjLCAweGIyZGI2ZmQzLCAweGE1NDdjZThlLCAweDkyNGVmYjM0LCAweDQ3Nzc5YzcwLCAweGNlMDViZWRmLAotCTB4OGMyZjU4YmQsIDB4ZGEwZjM5MzcsIDB4OWU0MTUzMmIsIDB4ZjJkN2RmODgsIDB4NjcwZGFlNzUsIDB4ZTcyMmVkZjIsCi0JMHhjNjY1MzUzNywgMHg3YzVlNTBiNSwgMHhmMDBhYWMzNSwgMHgwZWYzYWY1MywgMHg3MmZjMDBiMCwgMHg1YjQ3MWQxOSwKLQkweDZkYWViZjE4LCAweDM3YWRhZTViLCAweGU3MWM3ZjYyLCAweGEwYTdjYTEzLCAweGU5ZTdhM2NjLCAweGY0OWYzZDFjLAotCTB4MGVkZmFkYWIsIDB4Yzk3ZWY5ODEsIDB4MTkzODY0ZjgsIDB4M2U5OGZiMGUsIDB4ZjAwNDhjZWIsIDB4ZDQ2ZGM4OGIsCi0JMHg3ZjVjMjBkNiwgMHg5NjI5ZGFjMSwgMHhhZTg3ZGIwMiwgMHg0OTQ3ZTc2MCwgMHgyMzE2YjliNywgMHhiNzNiMWI4NywKLQkweDUzMmJiYmM5LCAweGY0YjdjOGFkLCAweGZhMDFmZWI2LCAweGIzYjU3MjUzLCAweGJmN2Y0NGM1LCAweGE2ZDM4NTdiLAotCTB4ZTZmNzc0YTYsIDB4NTM2MzYzZjksIDB4MWM5NWZkNjgsIDB4YWJkMjA4NjksIDB4ZDhmMjYyNWEsIDB4ZWE3OWM0NjUsCi0JMHhlN2M4Y2E5YSwgMHgyZDIzYmQ3NCwgMHg5YmM3NWNlYywgMHg0MjhlZTY4OSwgMHgzNDJhOWUzZiwgMHhmODQ0NjM0NCwKLQkweGQ1YWY5MGZiLCAweDdhZjJlNWFkLCAweDMxMjc1YjJiLCAweDk4YTdkMmY4LCAweDhlZjE5ZmIwLCAweDY4M2FmZjY4LAotCTB4ZWIxMWEzM2YsIDB4ZjJmYmY0YmUsIDB4YWFiYTNlNDAsIDB4NzU1YTNlNTAsIDB4ODIwYmRlYjgsIDB4ZmU1NzExN2YsCi0JMHg3ZjNmM2NlYywgMHgxMzliN2FhMCwgMHg0NzVlMzVlOCwgMHg4ZmUzMjM0YiwgMHhmYmZjNzQ5NSwgMHg5Njk1YTUyYywKLQkweDFmMTk3ZjM4LCAweDcwOTVkYWNlLCAweDc0ZWQwZjVhLCAweDc2MmRkNzljLCAweDhiNmM4ZWZjLCAweDUwYWZjOTkxLAotCTB4ZTM5ZWIwN2MsIDB4YmJjOTE5ZmYsIDB4YjVjY2U4MTgsIDB4NzQwY2NjMzcsIDB4NzdhNzdmNWQsIDB4NWMxZjIwNDAsCi0JMHhiMDdjNjE2YiwgMHhmNzRkZDM5YiwgMHhlZjJmNDY1ZSwgMHhkODJlNTRhYSwgMHg2ZTViYmJkZiwgMHhhODc0MGNkZiwKLQkweGZmMDNjNzk0LCAweDg2OTU3NjJiLCAweDJlZGM5YjhlLCAweGM5MmYwMTk5LCAweGYwY2IyNjliLCAweDU1YmFmNTQ3LAotCTB4ZTVkNjU3YTAsIDB4NWY4MTQzNDgsIDB4N2ZjYmVkNDgsIDB4ZDdhZDFiNzUsIDB4YmQ0MWJjNTMsIDB4OWYzZjM3N2UsCi0JMHhlZjg1NGY1NCwgMHgxNzJiZGJlYiwgMHhiMTI5N2NjMiwgMHgxMmQ0ZDk3NywgMHg1MzYzNDdlYSwgMHg5NmJlYmQ2OCwKLQkweDdmZjljMzE0LCAweDM3YmVjZDI2LCAweDkxMjFmNzA1LCAweDRmMjBhYzk3LCAweGYyMGQ1ZWE5LCAweGY1MGYyZTM0LAotCTB4NTZlNzdhZjEsIDB4OGU0OWJmZDQsIDB4ODViZGNiOGUsIDB4MjdkN2FmYTgsIDB4ZjljMWI0Y2UsIDB4ZjYyN2MzZWEsCi0JMHhhZjdkNDJhZSwgMHgwYjZlMWFkZSwgMHg2ODRmZGZhMywgMHhmYTYwMWU5NywgMHhmNWIwOTE4ZSwgMHg0ZmE4NzY0OCwKLQkweGMzNzQ4ZjcwLCAweGY4MDkyZTdhLCAweDM5ZGI1Mjg4LCAweGRlZWZlNjA3LCAweGRhMmUyN2EzLCAweDcxZGVkZWZlLAotCTB4YmQwNWNmMjgsIDB4YTNkNzVlOTgsIDB4OThkNjhmNWMsIDB4MmZjYmQwMjUsIDB4ZTdjOWRiMzYsIDB4NjU5ODI1NTQsCi0JMHgwNWJjMjJiMSwgMHg2N2I2NmIzYywgMHg1YzljZTBhYSwgMHg5ZmYwZWRlMiwgMHg0M2NiOWUzNSwgMHg0MmRkNjlmYSwKLQkweDJkNjdkMjBmLCAweGY1NjNkYmQ3LCAweDAzMDc4MmY2LCAweDI4ZjQyN2YwLCAweDgyZmMxZDI1LCAweGE2ZjI3ZmQzLAotCTB4NjIxYzEyNDMsIDB4YWVlZTdlMjUsIDB4YmEwNjllMjYsIDB4YTkzN2JiYmUsIDB4YThmOTI1M2MsIDB4N2M4ZmRkNWYsCi0JMHg2YzhlOTU3ZiwgMHhiNzhlZmE5MSwgMHg4YThiZjM4MywgMHhmMDAxNDcxOCwgMHg0NmU5OGFjOSwgMHhhYTdmMjA1YiwKLQkweGMyYWJiNzA4LCAweDQyM2NmNDAyLCAweGZhMmE0NTFjLCAweDEzNzhmOWRkLCAweGQ4NzVmZmMyLCAweGFjYmQxMDc3LAotCTB4NjM5NjdmYjcsIDB4MjJiYmMwMmIsIDB4YTdlZDBjMjEsIDB4Zjk1ZDVhN2IsIDB4NWQ2ZDFmYTQsIDB4ZTcwNTVlMTUsCi0JMHgyMzYzZjI5MiwgMHhlZDMzNGRmMiwgMHhkZjhiYmY0ZiwgMHhlNDQ1ZjIzMiwgMHhkNzA1YTRiMywgMHg2NjYyZDliNSwKLQkweDhhMzhjNGUzLCAweDY0YjU4MTFhLCAweDM5MzA1NjM5LCAweGRiMDViMjY2LCAweDNmN2M3ZGNmLCAweDI5Y2ZhNjA3LAotCTB4NGM5ZDAxNTAsIDB4ZjRmNGRhMzUsIDB4OTJkZmE3YmIsIDB4YjhkZDIzZTYsIDB4ZjM4NGMwYTgsIDB4ZWM3MTVjZTIsCi0JMHhkOGFmNjYyZSwgMHg1Mzg4ZWU4MCwgMHg3ZDU2ZmE4MywgMHg5YzFkYzNhMywgMHhkNzFkMThhZSwgMHhmNDBiZmQ1MywKLQkweDg4NTc0YTcwLCAweDI2NzZmYWI3LCAweGRkYjgyMjdmLCAweDUwMjI3YzA3LCAweDRhZTcxNWRmLCAweGQ3ZTA1YjljLAotCTB4ZGU4MjM3NDAsIDB4ZDFiZGI5YzQsIDB4Y2ZjZGQ5ZjMsIDB4N2ZkZDM3NDcsIDB4ZGU5YTdkMjAsIDB4NmViOTc0NjQsCi0JMHhkYTE0YjU5NSwgMHg3MzEwNTVkNywgMHhiNGFhYmRhMCwgMHhmODcwYWM4MywgMHg2MmZhZGQ2OCwgMHgxMWM2MWI4NCwKLQkweGUyY2UyZTdjLCAweGE4ZmMwYjM4LCAweDM1ZDFjYjdlLCAweDJmOWNiNjQ4LCAweGY4ZjliZmQ1LCAweDY3ZTk2YjgwLAotCTB4Y2YxYjBkMDYsIDB4MDc3MDhlZTAsIDB4ODI4MThmZDIsIDB4YTU4ODU0ZGIsIDB4NDQ3M2Y4MGIsIDB4MTJkZjVjOTMsCi0JMHhkY2I5M2ZlNSwgMHg2NWZhY2VmOCwgMHg3YzAxYTRhZSwgMHhhOGYyZmQwOSwgMHgwYjRmZjljYSwgMHg0NTI5MmZkNywKLQkweGE2MjZmNDkwLCAweGFmMDNjNjVmLCAweDI1YjA3ZTA3LCAweDI0ZmMwZGMyLCAweDc3Mzg5ZTNlLCAweDk3Y2Y1OTA1LAotCTB4YmMwOTljZmMsIDB4M2UyMzNiMGEsIDB4MWM5ZjdkOTIsIDB4NTMyNGY0Y2QsIDB4OGIyZWZiMzQsIDB4MGJmNjAxOTcsCi0JMHhjYWFiMDc5ZSwgMHg0M2E4ODY3OSwgMHg4ZmQxMDFjYiwgMHhjNWRiMGJhZSwgMHgxZmVkN2E3YSwgMHhmYzZmNWIwMywKLQkweGFjYjYwM2EzLCAweGZmYTdjMDBiLCAweDA4NTZkZDVjLCAweGVmNWFjZTc4LCAweGZhMzdjY2QxLCAweDQ4ZjIxMWU3LAotCTB4N2ViMDNmNDksIDB4OWZiMDViOTAsIDB4ZGZkMGRjY2EsIDB4NzZlN2VlYjUsIDB4Y2I5ZTgyOWMsIDB4NjMzYWY5ZjgsCi0JMHhmMmRkZjgyMSwgMHg2OGVhZTcxOCwgMHg0NTE1OWY1YSwgMHhmZjE0MzFlYywgMHgyM2QxZGViMywgMHhkZjFjOTEzZCwKLQkweDZiNDNiMDAwLCAweDhmYTVjNDM0LCAweGRkNmFiYzA2LCAweGZlM2MwMGRlLCAweGZiNDBmMDBkLCAweDJlMGM5OGY1LAotCTB4MmQwNzNkMzUsIDB4NjhlMmNlMzEsIDB4OGNhYjllM2EsIDB4YzdhMDNjZDgsIDB4MGJmMjlmN2UsIDB4NTNjNDk3MzgsCi0JMHg4MWE0ZmMwYywgMHg4ZTAxMjM3OCwgMHgyMzljOTgyZiwgMHg3NTdhYmJlMCwgMHhhOWQ0M2E2NywgMHhmMzBmOTMxZCwKLQkweGVjYzExYjNjLCAweGI1NTFkZjI3LCAweGM3ODUyMDdiLCAweDQ3Zjc4MzY1LCAweDJlN2FlOTIzLCAweGI5YjJjOGFmLAotCTB4ZGZhNzM4ZTgsIDB4ZGY5ZWZkZmMsIDB4ZWQyZmFmZDMsIDB4MTljZDIyZjksIDB4MGRlYjU3YzAsIDB4YzYyNjgzMmEsCi0JMHg0ODk2ZWY1ZiwgMHhiZTEwNWI1NSwgMHhjOTlhMjMzYiwgMHgwOWRiY2NkMywgMHg2OGI4MDRlOSwgMHhhZWI3YTg3YywKLQkweDgwMjdiMzA4LCAweGJlYzU2N2RmLCAweGU5NmI4NGQyLCAweGNhNTcwZGYzLCAweDllNjAzYjg4LCAweGZhMWZkYTA2LAotCTB4NGIxOTVjMzUsIDB4OGM4MjQzZGMsIDB4ZjkwM2M3NGIsIDB4OTkyNTcwZDAsIDB4M2NkODYyYjgsIDB4MzE1NDM3YzAsCi0JMHhmYmY4Y2U0YywgMHhlZDE3MTNhNywgMHhhYTQ1NWE3ZiwgMHhlN2ZiYWQ4MywgMHhiYjVmMGNkMSwgMHhhYzFmMTkwOSwKLQkweGQ3ZGYwNzdkLCAweGZjZWM3ZWVlLCAweDZlNDgzNmZhLCAweGFmMTYwZmIwLCAweDE0ZDQ3OTMwLCAweGNmZTk4YmE0LAotCTB4MzYyZDJmYTAsIDB4NDhhYTNjYmIsIDB4OGY5NDNmZTAsIDB4NGUzNDQ2MGQsIDB4NjQ3YjUwMzUsIDB4ZjQ2Nzk3MWUsCi0JMHhhMDI4Y2QzYiwgMHhjZjE5OTc1NywgMHhjMzlmOTNhMSwgMHg3ZGVmZWQ3OSwgMHhjNTg5ZmUwMywgMHg0NTE4NjIxYSwKLQkweGIwNmY5OWM3LCAweGJmYTE0ZTFkLCAweDI2MzhjOWZmLCAweGMyYzRjNDEyLCAweDgzYzRhNjg3LCAweGQ1OTg0YjFjLAotCTB4YmQyMjczYTgsIDB4N2U4MzMxOGQsIDB4ZWE1MTkxMmEsIDB4YTVhZTIzNmYsIDB4OGY1MDY5MGYsIDB4NzRhMjdhNDUsCi0JMHhhYzcxOGJhMCwgMHgzYTAwYmEwNCwgMHhmNTk4M2EwNCwgMHhlMjZiZTMyMCwgMHg1ZTdlNWNmYiwgMHg1OWY4NzQ5NSwKLQkweDhlY2Y3YzA4LCAweGYxODFjYjI5LCAweDM1OGU1MTJjLCAweDVlMGZkZjQ4LCAweDZlYmZmMTkyLCAweGYzZjJmYmM5LAotCTB4NGRjYmE3NDAsIDB4ZGY0ODk3YjYsIDB4NzBlMTNmZmUsIDB4ZDRlODI5ZWYsIDB4MmU1YTJjOTEsIDB4ZWEzYTQ3ZmYsCi0JMHg5ZGVmMWRhMywgMHg2NzVkM2UwNCwgMHhhMGQ0N2EzMCwgMHg3NmQ2ZWM1NywgMHgyODNlYzU3OSwgMHhkOTQ1MDYwZSwKLQkweGYwNzNjMjlmLCAweDczOTY1MWMzLCAweDAyNDgyNjk0LCAweGUzZDcxZGZkLCAweDAzYmYwMGRjLCAweDAzNjNkYjlkLAotCTB4MTUxYWRjZTksIDB4ZWJhMjc0MGQsIDB4MTBjMzhiYzUsIDB4NDkwYmM3ZWYsIDB4ZDFmMWM5MzUsIDB4MzFmMTE0NzEsCi0JMHgwMWQ3NjBkZiwgMHgxZGQ4MTdkYywgMHg1MTU5YmViOCwgMHgwY2IzNjI5ZSwgMHg2ZmVhYjlmZSwgMHhmODcxYmY2ZiwKLQkweGY5ZTdlN2FmLCAweDYxZDI4ZWI0LCAweDgzYjA3MzkwLCAweGMzMTU0M2MzLCAweDY0ZTljNmY4LCAweGQzYTdhZjQ2LAotCTB4MjgyZWY1NDksIDB4ZjY5MmQxMDcsIDB4ZDc4ZmRkM2IsIDB4MDA3ZDc5MGIsIDB4ZDU5ZTJlZmYsIDB4Nzk3ZTcwMGYsCi0JMHhhNzdkOWYzYSwgMHgzZTMzZTc5YywgMHg3YjE4ZWNjZiwgMHhmNjhiYzAwNywgMHg0ZjAwZThmMywgMHg0MWI5ODc2ZiwKLQkweGVhZmNhNjRmLCAweDhmMTNhNzAwLCAweDE1NWY5MDI1LCAweDFmMDAwNmY5LCAweGY4YTYyOWVjLCAweDU3NTlmYmEyLAotCTB4MDEzZjRiZWEsIDB4ZGU5ZjY0ZmMsIDB4N2Q3YWM1YmMsIDB4ZDdjMjdkYmMsIDB4OTdlNTlkZjUsIDB4YTFhZmNhOGQsCi0JMHg0OWY1ZjkzMiwgMHg4ODVmOTMzNCwgMHgxZDEyYmEyNywgMHgxMWIyYWJkMywgMHhlYTE3NDgzZiwgMHg1YmNmYzcxYiwKLQkweGY0ZWUwYzYxLCAweDUxYTM3ODljLCAweDFjZjI3OTRlLCAweGFmZmQ3YzAxLCAweDhmODI2ZTFjLCAweGUzOTcwZTljLAotCTB4ZjdmN2M1ZDEsIDB4ZWI0NzNmMjUsIDB4ZGU0Y2NkYTMsIDB4MzBlOTdjZDksIDB4ZTBlOGU5Y2UsIDB4YzdlZDVmNzgsCi0JMHgyMzllMzc0NywgMHgwYzRlNmZiZCwgMHhhOGZiYjdhNSwgMHg0NDJiYTBiZSwgMHhmNTg3YWM3YywgMHg3MzRiYjFmNCwKLQkweDczODU3ZjNkLCAweDg5ODBmMGRjLCAweDIyYmJkYzgwLCAweGExZjIyYmU2LCAweDk3Y2E5MzdmLCAweDRlOGYwNjc0LAotCTB4ODdhZmQ0MWQsIDB4MjdkMWYwMWYsIDB4ZDQ5NTFhNTEsIDB4ZDVhMDIyNzQsIDB4NzFjNTYyMWMsIDB4OWUzMzI4YzgsCi0JMHgzZTVlYjBiMywgMHhmMzg5ODlhMiwgMHhlZjM5NDdjMywgMHhjOGFmOGUyOSwgMHgwZTczNDkxOCwgMHgzNjIzNmFmMCwKLQkweGEzZTczN2U4LCAweDI5YjM0Y2FmLCAweDFiMzI1YzlkLCAweGNmMmEyYTVjLCAweGQxOWNhYWFlLCAweDc5ZWZlMDMxLAotCTB4YmJlYTI4ZjgsIDB4MDE5ZTc0YTcsIDB4ZWQyMGM2YWQsIDB4Y2YwYmNmM2EsIDB4YjlmNmZlNGEsIDB4NzRiYjUzM2YsCi0JMHhlZWVmMWNmNCwgMHg3NGM5ZmFlYywgMHhhNzY3N2ZiYSwgMHhkOGU3MDZkYSwgMHgxZmFmZjJiOSwgMHhhNWJkMDMwYywKLQkweDRmZWI2YjUzLCAweGQ3YWVhZTUwLCAweDk5MWEzZWMwLCAweDI1NGE3NjdlLCAweGVmYzVmZjg3LCAweGMxODdlZGM5LAotCTB4NTQwZjBjMzEsIDB4MTMzYTQwOWYsIDB4NTg1NGUwZmMsIDB4ZWJhMTNlNjQsIDB4ZmQzYzQyNTksIDB4NTFlN2VlODEsCi0JMHhlZjRhMTdjMywgMHgxMGY3MjVmMiwgMHgxODE2MjdjYSwgMHg3ZGZkMjJhNywgMHhlODVkYzBmMSwgMHg5YzQ4NWU2ZiwKLQkweGI5ZTYyZmM4LCAweGU0MGM3ZmI0LCAweGNhZDYwYmEzLCAweGU1NWE4YmViLCAweGM5Y2YyNWY1LCAweGRmZmViZGViLAotCTB4NGVmZmI5NzIsIDB4OTg2MzUzOTQsIDB4MGJhOGJhNWMsIDB4ODYzZTNlZGUsIDB4OTc3N2UzZDEsIDB4ZWU1MDgzYzcsCi0JMHhmOWM3OTVmNiwgMHhlMzk1YTcyOCwgMHhhZWU1YzNkZSwgMHgxZTQyY2I5MCwgMHg4NDMxNWMzNywgMHhlMzg4YzcxOCwKLQkweDdjMWM1YzVjLCAweGY1ZjFmN2ZkLCAweGEzMzE1YzM3LCAweDNmZGJlZjdjLCAweGQ1M2FlNTE2LCAweDgxM2JmMGM0LAotCTB4ODkyYjg2Y2YsIDB4MGJhOGJiZjgsIDB4MmZkZmQwN2QsIDB4OGNhM2M3MTUsIDB4YzIyZTdjZGYsIDB4ZGY4NWZlN2YsCi0JMHgxOWVmZDA1NywgMHhkMDkyMTg4OSwgMHhmYjkyN2I1ZSwgMHhlMGY5Y2M2YiwgMHhmMjAzM2E4NywgMHgzOWQ5ZTI5ZCwKLQkweGE1ZWRiYzhlLCAweDQ4Zjc5YzRiLCAweDNmNGQwMGQyLCAweGY3MmI3ZDNmLCAweDgyZTBlOTQxLCAweGQ1OWY4MDM3LAotCTB4NzE2Mjk4YzYsIDB4MzA2NGMxZGUsIDB4NzNlODJiY2MsIDB4NTExNWMzY2UsIDB4YjBmZmRmMjAsIDB4NTAyMTNjYjIsCi0JMHg2YmY1ZWFmZiwgMHg0NDdkOThlOCwgMHhhZjI2NTE4OCwgMHhjZDllNDI4OCwgMHgyYmYyYTc2YiwgMHgwMTg4ZjUxZiwKLQkweGVmOWY5NzQwLCAweGI5ZjQ4MTliLCAweDgxZTJkODkwLCAweGU5ZjY3YjZlLCAweGY3ZmZkMWQzLCAweDU4OThlNTFkLAotCTB4M2NkNzE0Y2YsIDB4YTkyZmQzMmQsIDB4NjVlN2EwOTAsIDB4NGE3ZjlmMzIsIDB4NTQ2N2QzMDcsIDB4ZjUxNmJiMDYsCi0JMHg5YWIxM2IxNSwgMHg2NGE0ZDFlMywgMHgxMzBhOTZmMiwgMHgxNjhmYWQwZCwgMHg1YTFlMjA3NSwgMHgyMzM3YzUxZiwKLQkweGZlYmE3ZjQxLCAweGYzMjRiY2QxLCAweDllNzA4OTlkLCAweDFhYWYzMGY0LCAweDExM2I5MGQ4LCAweDM2MTE5NmNhLAotCTB4OTIyNTk0MmIsIDB4YzFkNmMzNDMsIDB4MzQ5NjNjZjAsIDB4MmFmN2MyYTYsIDB4ZjRjZDU3ODMsIDB4Nzg4MmJhMjUsCi0JMHg2M2U2MmZlOCwgMHhhZmFmMTM3NSwgMHhjZTc5N2E5ZSwgMHg2OGRkZjgyMiwgMHhlM2FmNzNjMiwgMHhmMDU1NzhlYiwKLQkweGMwMzEwMzJmLCAweGNmNDZmNWJlLCAweGUyNGYxODk3LCAweDhhY2NhYmE1LCAweDFmYWJhODc2LCAweDljM2ZiYjQxLAotCTB4ZDc5ODExYjQsIDB4ODJlNGJjNjgsIDB4NTk4OTlhY2QsIDB4Zjk5ODdhODIsIDB4MDIxMWU3YjIsIDB4NTJlOGNkN2MsCi0JMHhiNmJlNDYwZCwgMHhmNDlhZjkxMywgMHg3YmUwNjJmZSwgMHgwM2U2OGY5NCwgMHhhZWQ5MGQxZiwgMHgyZWZlYTBmMSwKLQkweDVmMzQ1MmY4LCAweDRiZTcwYjVmLCAweDIxYzE4NDQ5LCAweGJlNzFkODg2LCAweDIzMTY5YjFmLCAweGFlMzM4YTVmLAotCTB4ODZmZmEwOTAsIDB4OTdjOGYxYzgsIDB4YjRmMDAxZTIsIDB4NDZiYzY2M2QsIDB4MWNlMjY3YzYsIDB4OTU0MjdhZjIsCi0JMHg5NGU0OWViYywgMHgxNGU0MGRkNywgMHhlM2M5MDNjYSwgMHgwNjM2ZmM0OCwgMHhmMDFjOTFlZCwgMHhkOGNiNjgzYiwKLQkweGNlMWU5OWY5LCAweGViMGRkNWQ2LCAweDExMzlmYmEzLCAweDkzN2ZmYWEzLCAweGJiNzI0NWZiLCAweDQ3NWEzZWI1LAotCTB4NGYxNTBmZDAsIDB4YThjMWU2MmQsIDB4NjE4ODljMDcsIDB4MmU2N2MwN2EsIDB4OTBmYjU3NjgsIDB4ZmVlMDllZmYsCi0JMHgxZGUzYTk4MywgMHhkZjhhMWExNSwgMHgwN2M5NzJmYiwgMHg4ZjllNWE3NiwgMHhlZjg2OWU3MywgMHhhYzY5MWM2NywKLQkweGFhZjVhNWFiLCAweDg3OWU0OWY3LCAweGU2MjUwNTk2LCAweDlmMTRlZDlhLCAweDZjOWI2NjZiLCAweDFhZmFkMjhmLAotCTB4NTc2ZDIzMTMsIDB4MjJmNTFlOWMsIDB4YjY5OGYyMDIsIDB4YTIyNTU2NmYsIDB4ZmMwMWEzZmYsIDB4NmJmZjc0YWQsCi0JMHgzYTAwNmY0MCwgMHg1ZWQwNGZlOCwgMHgxYWM4N2FhNiwgMHg3OWI3ZWQwMywgMHhjZWJjZDk5ZCwgMHhkZjJhN2UwYSwKLQkweGZhMDdmMDU4LCAweDE2ZjMxMTE2LCAweDVjM2NlNDEyLCAweGUyOGNlN2E1LCAweDUzYTg0NWY1LCAweGJlOWM0YTNjLAotCTB4ZTE1YmVmYzQsIDB4MmY1NjJjZjcsIDB4MWU3NjBhMTksIDB4ODNhYjJmZmIsIDB4Y2ZmMDI4MzIsIDB4ZmRkY2U4ZTQsCi0JMHhhNTFkM2Q2MSwgMHhjZjVhMzhkYSwgMHg3ZjQzNjMxYSwgMHg2MTdjZTEzMSwgMHg5Zjg3OTg5OCwgMHg3M2ZlOTFiYiwKLQkweGJjMDVlZDgwLCAweDY0ZjFkZDllLCAweDk3OGMzYzQ1LCAweGNhN2U1MDRiLCAweGQ2MmMwZGNlLCAweGNhMTg3ZjRjLAotCTB4NzNjMGVkY2MsIDB4ZmZmMTA3N2IsIDB4ZmI5NWUzMDcsIDB4OGRiYzQ3YzcsIDB4Y2VlZjZkZTEsIDB4NjFkOGYxNjYsCi0JMHgzODdlY2YxYSwgMHg1OTc5MjNkNywgMHg4Nzc0Y2JjMCwgMHhhNTExZmU1NCwgMHhlZDgzNDJkNywgMHg4MDJiMWVlMCwKLQkweDdkODZhMWQ0LCAweGRlM2YzNTBmLCAweDcwOGZmMzAyLCAweDdjMDMxNDdjLCAweGYyODE5NDZjLCAweDBjYjY1YTAzLAotCTB4NTljY2Q5YjcsIDB4ZjgxNTZmYjgsIDB4NDJiNWJhOTcsIDB4NDBhM2Q5MWUsIDB4OTJhZDRkYWUsIDB4N2QwMGZmNWMsCi0JMHhlMTFhOGM2MCwgMHhlNTMxOTdmMywgMHg3Nzk0ZDc1MSwgMHgzYWIyMmE0ZCwgMHhkNmFjY2U1MCwgMHhmM2Y3ZmNjOSwKLQkweDY1ZmY5OTYzLCAweGVjZDhlYzVjLCAweDJjMDc5NDU4LCAweDk2MjgzN2RlLCAweGRiYTAwOWYyLCAweDdjMDM5MjFjLAotCTB4ZTcxY2UwMjIsIDB4YTU1ZDc3YzMsIDB4Y2U3NTBlYmYsIDB4OWNmY2VkZTUsIDB4ZDEwZmIzNGYsIDB4Y2ZjYjNlYTIsCi0JMHg4ZWFiZTBiYiwgMHg2NjllNzY3MCwgMHg3NDA2OTIxMCwgMHgyMjM0OTUzMiwgMHhiYTU2M2RmZiwgMHg3ZGZiY2YxNCwKLQkweDc4MDVhNWM0LCAweGUwYzY1YTdkLCAweDY1M2RkNjJjLCAweDk4YWY1Y2JjLCAweGE3ZDc5MGU2LCAweDBlZjUyOTU3LAotCTB4N2ZiYzdiM2EsIDB4Nzk0ZTE5ZGUsIDB4M2ZhMTY0ZmIsIDB4OGZlYjk3OGUsIDB4NTVjZmZlYjMsIDB4ODRiNWNhMGIsCi0JMHhjZGJlZWI5NywgMHg1NGY4M2YwMCwgMHgwM2Y4MWM2ZCwgMHhmYTMzMjQzYiwgMHg4YzI0M2JjMSwgMHgxOTU0MzRmYiwKLQkweDZjNmZlMGRjLCAweDViZjE2NzY4LCAweGVmZDA1YWIyLCAweDdlODBjN2JjLCAweDMxZGE1NjUzLCAweGJlZGY1NzFlLAotCTB4ODAxNDVhNTMsIDB4Yjc1YTk0YWYsIDB4MjA3Y2ZjMDQsIDB4YzgyNzUxODUsIDB4OWM3N2FlMmYsIDB4ODNmN2JhZDAsCi0JMHg1MmM0ZmNiZiwgMHg5ZTc0ZTI0YSwgMHhlMWRmM2M4MywgMHgxNDNiZTQxMCwgMHgzNGNlZTlmYSwgMHgyOGZmZjk4NywKLQkweDNjN2ZhMzE1LCAweDAzNjExY2Q1LCAweGFhYWQ3OWJkLCAweDZiODVmZDEwLCAweGJmMzI0ZDIzLCAweGY2NTViYWVlLAotCTB4Zjg0ZWY4MGEsIDB4Y2FmZTQ1MDksIDB4NmM2OTNkNzQsIDB4NDNhN2ZlNjMsIDB4Y2M4ZDhjYzgsIDB4NzZlNmU0M2YsCi0JMHhkMzJjNzY3MiwgMHg2YWZiNjhjYiwgMHhjZTI5NGZmNCwgMHg0MTBjNWM2ZCwgMHgzMzM3MTFiOSwgMHg1NTgwZmQwNywKLQkweGUwNDUwNTFkLCAweDA3ZjJhNTg3LCAweGIxZDlkM2ZkLCAweGU1NWZlYzU2LCAweGQ1ZmY0MDJjLCAweDE4MTljNmRkLAotCTB4ZDhlODY4MTcsIDB4ZjQ2ODU5YWMsIDB4ODJjM2NmZDMsIDB4MDQ0ODIyZWUsIDB4NWZhZjVkZDAsIDB4ZmQxZTk3NjgsCi0JMHg4ZTU1NTc0MiwgMHhkNTdkMDAxZiwgMHg0NGY5M2NlYSwgMHg3YmY4OTc0ZSwgMHg4NGIyZjkyOCwgMHhlNjViNWRlMywKLQkweGMyODhiMTk4LCAweDlkMDNlN2E1LCAweGFhM2JlYzBkLCAweDVlYmUyMDQwLCAweGZlNDE2YmRiLCAweDkwNGM5OWE3LAotCTB4MjUyZWFmY2YsIDB4MzY3YjI3YzgsIDB4MTdjOGJmMzMsIDB4Njg3YmVhOTYsIDB4YjUyZDU5MGIsIDB4OGVlZTFmMjIsCi0JMHg1ZmYwOGIxZSwgMHg3YTg0M2M2NiwgMHg0YTI2ZjU0OCwgMHg3ZTdjMDE0ZiwgMHhiZDc5NTZkOSwgMHhiMmZiMzA4NiwKLQkweGJhMWY3Yjc2LCAweGY4MjQ3ZTQ0LCAweDc5NmVmZDU1LCAweGU0Y2Q5MjNmLCAweGI5YzM4ZGI3LCAweDQyZDFmMzgwLAotCTB4MDU0YTZkODcsIDB4OTZjYWJkMmMsIDB4NjI0NGVjYzUsIDB4ZmM1ZTNlMDcsIDB4MGJmYjhlYmUsIDB4ODVjZjk5NjcsCi0JMHg1OTdiOGIwMSwgMHhkNDFlOTZiYSwgMHg2NmFmM2E2MywgMHhjZGYxOThlNywgMHg5MjhmM2U2MiwgMHhmZDczMTc5ZiwKLQkweDlkMGQ0ZWU3LCAweGNmYWZkMGE3LCAweDNmNTYxMzE0LCAweDI3NTBlYWE0LCAweDJkZWJmY2FhLCAweDFlODRmZGUyLAotCTB4YzBhOWY4MjUsIDB4NDI3MGU5NTcsIDB4M2IzYTUzODYsIDB4OGZkZGYwMjAsIDB4ZDM3YzAzZjQsIDB4MjVjZTkxZjEsCi0JMHhjNjg5NTRjOCwgMHhlZjYwNWRmMSwgMHg1MWYzZTQ4YywgMHg1ZDAxNzA3YSwgMHgzNzA2NTRiOSwgMHhhOTFhZWZkMCwKLQkweDAxODhlNTExLCAweGFlNWE2NWY0LCAweDU3Yzg5YzkzLCAweGE5NzZhOGRmLCAweDQ4MjNkZTAxLCAweDMyN2I5NGUzLAotCTB4NDY3NmJmODEsIDB4OWQyODljMDAsIDB4OWZhNDBlMWMsIDB4ZGY0OWUyMTYsIDB4MDhlOGM5MjksIDB4YmYyY2JiZGIsCi0JMHg4MjQ3NGEwZSwgMHg2NTNlN2JlZiwgMHhiYTA0YzBmYSwgMHgwMmE3MTg2MywgMHgzY2I0MDkwMiwgMHgzYTQxMmQyNCwKLQkweDVhN2M2NzE5LCAweGFkN2ZmZDAzLCAweDc4ZDNmNjYyLCAweGZhYzBkNmUyLCAweGZjNzJjYzJhLCAweGQ3OTQ0YjhmLAotCTB4YTFmNmIyZWYsIDB4ZGJmZjhjMGYsIDB4ZTQyNzNjMzksIDB4ODJlZGRiYzgsIDB4ZGYzOTExNmYsIDB4OTk1NzI0Y2EsCi0JMHhlMWY4ZmI3ZCwgMHg4ZWFlYzA4NywgMHgxMDM5MjI2OCwgMHg5ZDFhYTNkZiwgMHhmODkwN2ZhZCwgMHgyZGVjNGY0OSwKLQkweGM0ZjdjM2Y3LCAweGY3YzNmMTA2LCAweGFmYmViOTY4LCAweGMzZmFhZmEwLCAweDI3YWNlNjE3LCAweGU3MTQzYTdlLAotCTB4YThkMjBlZTEsIDB4OTM3MGE0NGUsIDB4OGVmMTYxZGUsIDB4MjhmZTgwM2IsIDB4OTAzNzBjM2QsIDB4NDg2ZmQwNWMsCi0JMHg4OTczZjMxMSwgMHg2ZGU4MjFmMywgMHhjNTQ1YWYyOCwgMHgyMGNhZmE3MSwgMHhhMzVmNDAxOSwgMHhiZmQwYzNkYiwKLQkweDE5ZDAwNzc5LCAweDNlMDJkYmE1LCAweDQyZGY5MGFlLCAweGRlMTk2ZjJmLCAweGE1MzJhZTg3LCAweDc4ZTM5NDJjLAotCTB4MWYxYzg0ZGUsIDB4N2Y5ZWQ5MjIsIDB4NzJmNDEzMjQsIDB4MDFlNWVhMTcsIDB4ODcxMzE0NzQsIDB4MTFkMjg4ZmMsCi0JMHg3MjNlY2Y5ZSwgMHhhMGFlZGU1MiwgMHhlM2VmODEzMywgMHgyNTJjZGY1YywgMHg1MzVmNDg4ZCwgMHgzZDJjNTY1NSwKLQkweDJmNGVjYzk1LCAweDQwZDU0ZTM3LCAweDMzMjZmN2ZmLCAweDc0MDMxYjNhLCAweGNiZGYwNTk4LCAweDIwZGNhNGU5LAotCTB4OTBlOTJiYWYsIDB4OWMwYWE4Y2UsIDB4YTE5NzQ5NTcsIDB4ZTgwMzJjZTgsIDB4OThjN2M4NGMsIDB4YThkOWQzZWIsCi0JMHg2NzRlNWJiOCwgMHg4MjZlZTJhMywgMHhkYWRmMDRjZSwgMHgzNzJlNjYxOSwgMHg5NmFlZGM4MiwgMHhmOTBjMGU1MCwKLQkweGVhMDViYjIwLCAweDUxMzJlYjAzLCAweGIxNjlkY2NmLCAweDQ2ZjZjNDFkLCAweDY5ZDQ1ZWQ2LCAweDQyZGU0MzU3LAotCTB4OWVkZTBhZDYsIDB4N2E4NzI4ZTksIDB4YTc2ZDEzNDMsIDB4NjcxZjE3NDMsIDB4MmJkOTBkNzksIDB4YTNjMTdiNTksCi0JMHhlMDRkMDc4ZCwgMHhmZWIxNzJjNywgMHg0NmI5N2U2ZiwgMHhkZGRiNDkxZCwgMHhkMmZmNzg2YiwgMHgzN2E4NzJkNiwKLQkweGJmZmQ2NWFjLCAweDYwYzg3ODgwLCAweGI3NzI4N2M4LCAweGFkYjdlZmMwLCAweGIzMzFiNGNmLCAweDI1YjdlOTk0LAotCTB4YTUzYmJmN2MsIDB4NWZiMTA3NWQsIDB4ZTRiN2ViMmIsIDB4YTA5YzIxYjAsIDB4ZDZmNGNjZmQsIDB4NGIzZWY5M2IsCi0JMHhjNjdkYjEzNiwgMHg3OGY3N2U3ZSwgMHg0NThiYTUyYiwgMHg1ZmVhMTczZSwgMHg0M2I1NTRlNywgMHhiMDg1YWY5MSwKLQkweGQ2YTU0YjNmLCAweDUxYzcyODU0LCAweGRkYTUwYmI2LCAweGVlYWI1YjYwLCAweDViNjFlMmM3LCAweDcxNGQxNGU4LAotCTB4ZTIyMTdmY2MsIDB4YWVhZjEwNDgsIDB4OWE2N2QwMGMsIDB4MjQ1ZDk4ZTIsIDB4MjY4ZjhiYmUsIDB4OGQ5MTFmYTgsCi0JMHg0NDM3YjQyNiwgMHgyY2YzY2I5YywgMHg4NTBlYzA5MSwgMHg1MGJmNDIzZCwgMHg1OTcxYWY3MSwgMHg4YzJmYTg4ZCwKLQkweDJlZjExMGNiLCAweDlkM2U2NmFmLCAweGFmZGJlMGI3LCAweGFmZjMwNmM2LCAweDNkMzFjNzM0LCAweGJmOGYzY2U1LAotCTB4ZGRhYmRmOGIsIDB4MTNiZjJlMmMsIDB4ZTAxOTI0ODgsIDB4NzA1N2Y4N2EsIDB4M2M0Mjc3NWUsIDB4MTcyNzA5OGIsCi0JMHg2NTc4MGUxOSwgMHg3MjdlMjdmNSwgMHg2YTVhZGQ2MCwgMHgzNTUxMmZiYywgMHhjYzIwNWM2YSwgMHgyM2NjMjVkMiwKLQkweDNjNDlkNDlhLCAweGQ3N2Q5MTUxLCAweDNjNDM0ZTNmLCAweDg0MDc5NjNhLCAweGEyZGM1ZmViLCAweGMyMjAzY2MzLAotCTB4YzEzNGQ5ZjksIDB4YzdmNTQ2OWUsIDB4ZTM5NTNkZjMsIDB4NGZlMGEzNjksIDB4ZTAxMGM4NDMsIDB4ZGUzOGQzNGYsCi0JMHgzZDUwMzNlZSwgMHhhYjcyZTUxOCwgMHg1ZTM3YzE1NiwgMHgyMWIxYmU0MCwgMHg2ZjJkZmVhNCwgMHg2YTk1ZjA1NywKLQkweGFlNjJlZjNlLCAweDNlMjUyZjc3LCAweDQ5Y2U0YmQ0LCAweDZmY2YyYzZlLCAweDhkNzc3YTYwLCAweDM1ZWEzOGYxLAotCTB4OWU5OTFiM2QsIDB4YThiYzRiNTksIDB4Y2I3NTJjZjcsIDB4MzZjZDQyZjksIDB4NGRhZWJkNzksIDB4OTc2ODZmNWUsCi0JMHg1Y2YyN2JkNywgMHg4NmNmNGYzOCwgMHg0ZmUwYTFiYSwgMHgwM2VlN2VhYiwgMHgwYjU2ZGZmNCwgMHhmMzk2ZTJmZSwKLQkweDMyNTY0MjE3LCAweDIwZWNmMmZlLCAweGVkMjhlN2Y0LCAweGVlZjc2YTcwLCAweGExZjhjMzhiLCAweGU4MmQ2Njc5LAotCTB4NTgyMjczMDUsIDB4OThkYTgyYmUsIDB4NjRjMDdjODcsIDB4MTQzODNiNDAsIDB4MzlkYTUwMWYsIDB4ODMyMGVmNDIsCi0JMHgyYTBmOWY4MiwgMHhjZjAwMGM2OSwgMHhjNjc3NzgwMCwgMHg5MjFlZGI1ZCwgMHgyMWYwMmJiNywgMHgzOWZiOTFlYywKLQkweDdjNTBhNjNlLCAweDkzYmYzY2MzLCAweDFjZjc2OGVjLCAweDMxZjBjYTViLCAweGU5MDJiOGNkLCAweDBjNjVkM2UxLAotCTB4YmEyZWMyMWYsIDB4YWVjODNiNzksIDB4OTA3NjJlZmUsIDB4Y2UyZTVmZDIsIDB4YjA5YTc3NTUsIDB4ODc2OGFkNGYsCi0JMHgyOTgwMDAzNiwgMHhmMzdiYWU5ZiwgMHg5ZmEwMGJjNCwgMHgzNThlZWY4YSwgMHhjMDRkMzg5MywgMHgyYTU2M2M3OSwKLQkweDllNGU4ZmY3LCAweGU0Mjg3YTcwLCAweDJiMGY2ZTNiLCAweDkzZTAwYmZiLCAweGZmYTFjNDc0LCAweGQ4NDEyZWIwLAotCTB4ZTlmYzZjNDUsIDB4ZjJlYWZmM2MsIDB4ZThhOGNjY2EsIDB4ODliZGQ5NmIsIDB4MDA5YTYxOWQsIDB4YzY4ZjZjZmYsCi0JMHg0ZTc2MDkxNywgMHhlNzA5NTVjZiwgMHg0ODI1YmE4NSwgMHhmZmRmYzkxYywgMHg4N2M0MTg3OCwgMHhmOWRmY2VmYiwKLQkweDNmMDNkZmJkLCAweGUzMDIyMTdiLCAweDMyNTc5NzdmLCAweGE2ZjJlZjdiLCAweDdjMDc5ODgxLCAweDA1NDljNzkxLAotCTB4ZGUxYzk2MWMsIDB4Y2UxN2I2ZjYsIDB4MWMzMWQzNWIsIDB4N2Y3MjQ2YWYsIDB4MWRiNjg3YmQsIDB4ZTI2MzNiZDUsCi0JMHgzY2FhMGU0MSwgMHgyYzU3NDYzYSwgMHgxZGY2MjE5ZSwgMHg0MmU5NmZkYSwgMHhjMDNiYTZmZSwgMHgwYTRmYWNlNCwKLQkweGZhNGViY2M3LCAweGI4YzA4MGZiLCAweGUzMDI1MjRlLCAweDdlMGU0MmMzLCAweDJkNmFmZGNjLCAweDE3ZDhhNWJkLAotCTB4YzRiNDJiZjMsIDB4M2Q2MGIzZDgsIDB4YzFiYWMzMWYsIDB4MTY5MWY0M2YsIDB4YmJmODM1ZjksIDB4YTU0OGNlMjEsCi0JMHhlZTg5NDkyZSwgMHhhMzg4MWViYiwgMHgzODgxYmQ2ZiwgMHhjOTllMmRiYSwgMHhmNjk0YTU4MywgMHg2MmNkM2YzMCwKLQkweGNlZjk4MDJmLCAweDc5ZTFiOGYzLCAweDFmM2E3NzFlLCAweDIzNTBlMmM5LCAweDVmMWYxOWUzLCAweGU0NGRmYmNhLAotCTB4ZjExMGY5ZTUsIDB4ZDlkZGYxNmUsIDB4MzU2MTgzNjYsIDB4OWIxZmViNWQsIDB4MzY3NTYxODksIDB4ZjU2N2YxMjUsCi0JMHgzMzlmOTg4ZCwgMHg2N2FiZWQ4YiwgMHgzOWYzMDVhZiwgMHhmOGFhYmY0NSwgMHg4ZWIwYTVkMiwgMHgxOGM3MTYyMSwKLQkweDllYjYxNzI4LCAweGE5ZmEwNWQxLCAweGE4M2Y2MDdiLCAweGY1N2RiMDRmLCAweGNjNTJiMTg0LCAweGI5NWYxNTU3LAotCTB4M2NlMDFlMzQsIDB4ZWM3ODhiYzMsIDB4NzUxMDhmYWQsIDB4MzNkZjhlMDcsIDB4YzI0ZmYxOWEsIDB4ZmM3NTEwZmQsCi0JMHg1YjhhODVmYywgMHhhNTVlMmY1ZCwgMHhlNmNlZmI4YywgMHhlZmI4ODllMywgMHg5OTE0MzYyYywgMHg3M2JlZTNjZCwKLQkweDBhNGQ2NDBjLCAweDkxZGI5ZjZkLCAweDQ4ZDVlY2MwLCAweGRjNTkwMGQ3LCAweDUzNzExNWQ3LCAweDg3NDE3NzcxLAotCTB4YjhmZTY5M2QsIDB4ODg5YmM2ZTksIDB4ZmUyMGZlOWIsIDB4N2Y0ZGM3OTYsIDB4NmUyNDFmMTAsIDB4YmZhNzhjYWEsCi0JMHhiNjQxN2EwZSwgMHg5ODBmMGYxZiwgMHhkNDJhZGMxOSwgMHhjZmUwZTViNSwgMHg2MDkwYmNiYywgMHhlOTAxNzMxZSwKLQkweGQwMjhlY2Y3LCAweDg5Njg4ZWIzLCAweDEzN2M4YWRiLCAweGUxZWJlM2Y1LCAweDIyYTFjZTJkLCAweDM5ZGY5OTU2LAotCTB4ZDYwMzU4OWMsIDB4OTY4Y2U0OWYsIDB4MGVlMzUxZDUsIDB4YTk0YzBmYzgsIDB4NGZmNTk2NGUsIDB4ZmIyN2VjNmIsCi0JMHg5MDY5YTMzZSwgMHg1NWQzM2RhYywgMHhhZDY3YWIyOCwgMHg3ZGY2NDNiZCwgMHg1OTMyZDZmZiwgMHg3NzczZTA3ZCwKLQkweGNkYmZiZWNiLCAweGJmNTY1OTNkLCAweDdlNDBmZjBjLCAweDc2N2U0NmE2LCAweDY1ZmJiNmZiLCAweDFkMWM5N2ZkLAotCTB4ZGRjYTdlODIsIDB4OTcxMmZlNWMsIDB4Mjg3NzMzYmQsIDB4ZmFjMGEzNzMsIDB4Y2JlNmRhZjMsIDB4YzkxZTIzYzYsCi0JMHg0NWY2ZDEyMywgMHgyMzE3NGYxYywgMHg4NTg5M2RkOSwgMHgzZjlmY2M5ZCwgMHg2Yzk5N2RiOCwgMHgyZDc1MWFmYywKLQkweDQ3MTk0ZmUyLCAweGMzYmUyNDJjLCAweDk2ZWEzZjk4LCAweDM3ZDIxZTZjLCAweDdkYjRiOGFlLCAweDllYmJmNjMzLAotCTB4ZmFmYzIyN2UsIDB4YjE0ZGUyMDcsIDB4MjRjOTE3NDgsIDB4OTJiM2QxOTksIDB4NzBiZDhjMWUsIDB4MDUxOTdiODAsCi0JMHhhM2IzYzA2NCwgMHgyMGY0NjQ4YSwgMHgxYjg1MWJjMywgMHg2ZjJlYTlmYSwgMHhkMWRlNjEzNywgMHg3MDBiYTM5MiwKLQkweDM5NDRmYTNkLCAweGU1NTk4NDNkLCAweDIzOTExMGY0LCAweDRkOTMwN2E3LCAweGUxYThmZjhlLCAweGUxMmJmYzcyLAotCTB4ZTljYmIxNmQsIDB4ZmZlOTc4ODEsIDB4Y2M3NzgwZDcsIDB4ZmNiZDM5NzgsIDB4MWRkY2UwYWIsIDB4MWM4MWUzY2YsCi0JMHhkOTBlNDNiZSwgMHgzNzA4OGM1YiwgMHhlYzI0M2Y5NiwgMHhhM2I3M2Q3YiwgMHhjZmRjYWM0OSwgMHg3ZmE3ZjQyNSwKLQkweDE1NzhmM2M2LCAweGQ1Zjg0NzFmLCAweGI0MmU0OGQ3LCAweDY2ZTM3YmNiLCAweDllZTkzZGMzLCAweDFiY2ZiMDRjLAotCTB4MzhmM2YzMDksIDB4NDFjNTA5NTQsIDB4N2JmODg0ZmQsIDB4ODBhMTNmMjgsIDB4NjdhZTU0ZWIsIDB4ZmEzYjEwZDYsCi0JMHhmYzQxMTdhNSwgMHgyYjY3OTY5YiwgMHg2NzdmYTI5NywgMHgxZDY5ZjE4OSwgMHg5OTM4YmZmNCwgMHhjNGQ1NjNlOSwKLQkweDdhZmRmYzhkLCAweGRjMjU2ZmYxLCAweDAxMjUyZjQwLCAweDFjMjU1NDdlLCAweDYzYzkwZWE1LCAweGU1YzMzZTAyLAotCTB4MTBlOTMyNDAsIDB4ZjJjOWMwNzIsIDB4MTJmZWU1ZjgsIDB4MDBiMmYxMDIsIDB4NWVmNDI1M2UsIDB4OWY4MGJlMzEsCi0JMHg3YzYyNWZlMCwgMHhlMDU5ZjgzZCwgMHgxOWY4MjgxYywgMHg0NWUzOTFjOSwgMHg2MzgxNWZlOSwgMHgxODFhMTg2MCwKLQkweGMwOTJiMTJmLCAweGFmZDI4YWY4LCAweDUwYTdmN2UyLCAweGE3Y2U5MmJiLCAweDIxNmNjOGNlLCAweGNjNDM2ZjE0LAotCTB4MTVkN2Y0NzYsIDB4ZjA5OWNlOTMsIDB4YTBhN2YwYmIsIDB4ZDIzNmUxN2YsIDB4MjkwODVmZWIsIDB4OGYxM2FlOWYsCi0JMHhiYzkyZTI5ZCwgMHg4ZGY2NjdjZiwgMHgyZWI4OGFjMywgMHhiZmU3YzMwNSwgMHg0OTQ3OWRhNywgMHhlNGY3YzQ1NiwKLQkweDAxYzYwNzM3LCAweDJmZjVmNTFkLCAweDQ1YmU0ZWRhLCAweDdjYWI1MWM3LCAweDNmN2U4MTMxLCAweDRmN2Y1ZmUxLAotCTB4ZWU3ZWUyZjIsIDB4NDhjN2Y2MjMsIDB4NGY1MTllODAsIDB4Y2NjZWM2ZGEsIDB4OTUyZWZmMDQsIDB4MzI1MDkxOGIsCi0JMHg1NzY5MTQzZiwgMHhmNDFhZDllYSwgMHg0ZWU4YWFmZiwgMHg0ODZiZGU4MCwgMHhkMzMyOWM0MCwgMHg3NTc1OGVkZiwKLQkweGU2OGRmYWRmLCAweGMxM2FmY2JiLCAweDJjYmQ5ZGNjLCAweGZlNzA5MzVmLCAweGQwYzNlYzI3LCAweDdkN2M5OGY2LAotCTB4MzMwYjhjMGIsIDB4ODJmYmZhMjUsIDB4YzBkYzc1YzAsIDB4MDM3ZTQ1M2EsIDB4Nzg4NGUzZGMsIDB4OWYyYTI2YzYsCi0JMHhiMDRiY2Y1MSwgMHgxNzUxNWVhMiwgMHgzYjEzZWE3ZSwgMHg5OWQ0NTY3YywgMHgzNmQ3YTgxZSwgMHgwMzAxYThlOCwKLQkweDdhZWJmOGY2LCAweDkzNmM5NzE2LCAweDRjM2ZjYmViLCAweGExMmVmOTYwLCAweGE4ZjNjMGUxLCAweGY1Y2M3NjE0LAotCTB4NDc5MTFkZjQsIDB4MTZlMDExMzUsIDB4OTQ0YjNlYjAsIDB4OWY4MDNmZTMsIDB4OWVmNDlkYTQsIDB4ZmVmZTU0OTMsCi0JMHhjYzJlZWExNSwgMHhhZWRjYmMxMywgMHhmNTRlZmJjNiwgMHgxZmM4NWRhMywgMHhmMWFhZjdlYSwgMHhlODc3NzUwOCwKLQkweDc1NmYzZWYxLCAweDkzZDQ0MWZiLCAweDAzMjk5YWJhLCAweDg1Yzk3YWEyLCAweGU2YjMzYTY2LCAweGVjNTdmMDFhLAotCTB4MjA3ZDk0MzcsIDB4NGM1ZThkZjIsIDB4OWYzM2ZjZTAsIDB4MmJlNjA3ZTQsIDB4OGFmODNlNTEsIDB4ZGFmNjBmOGMsCi0JMHg0YTc5YmRhZCwgMHg5M2UzMDRhZiwgMHgyOGRjZWExNSwgMHg5YmRhZTdiOCwgMHhhNWYxYTI4NywgMHg4ZmMwMGU0ZiwKLQkweDcyMGYxZjcyLCAweDFhMzdlNDNiLCAweDVkMDI1YjQ3LCAweGQ0Y2U5OWQ3LCAweDBhYmM2MDY3LCAweDY0ZTFjNzc1LAotCTB4YzkwYWNmODAsIDB4MTJiNDcxMDYsIDB4YTg3ZmJiM2QsIDB4MzViNzJmNTcsIDB4MDM3NWQ4MDYsIDB4MjAzYjUyMWYsCi0JMHhjNTdhNzk1ZSwgMHhiZjcwZDE4MywgMHg1MDNiOGM1OSwgMHgzOTNkZTE1MiwgMHhmNjdkNzY0MiwgMHg5Zjg4MjJmZCwKLQkweGEzYWRiMmNkLCAweDY2N2FkOWI1LCAweDJmN2U2NjU3LCAweGNmNDU5M2MyLCAweDc2M2EzYmQ3LCAweGFmZGI0YjNmLAotCTB4N2RmZWYzMTEsIDB4ZTNmYTM1MTYsIDB4MGM2NGQ1NjIsIDB4YWY1ODg1ZDAsIDB4N2UyODU3YjgsIDB4NzBjZWZiODcsCi0JMHg1ZWZjNGQ3ZiwgMHhmMjFiZTJkMiwgMHgwNzFmMmQwMCwgMHhhZmY2MmNmYSwgMHgzN2RjYTRhZiwgMHg4N2U4ZDFhNCwKLQkweDZlOWM3ZDdiLCAweGRkNDVlODBkLCAweDQ0M2YyNjA2LCAweDZiMzExNTllLCAweDMwYWQ3Y2YwLCAweGFhNzVmM2IwLAotCTB4M2Q5YmIwYmYsIDB4ZWFiZmIwMjYsIDB4OTg1MWVjYzMsIDB4OWE5MWY1ZTcsIDB4MTdmOTVkODAsIDB4ODJjYTNkYjMsCi0JMHhkZWEyYjNmYiwgMHhmYWNjYzJiOSwgMHhkZTdjZjM3NSwgMHhhMTk2OWYxNSwgMHgxMmQ3MTY1ZCwgMHg3Y2U4Y2YzYywKLQkweDZhOWZiMzAyLCAweDc5NjRhOGFmLCAweDBmMWFiNTQ2LCAweDVlZDUwYmU2LCAweDkxM2U2MWQxLCAweDE0OGZmZGY4LAotCTB4ZmUwMWFlMGUsIDB4ZDlmM2ZjZmEsIDB4MGI1ZDYxNjMsIDB4N2MwZDZkODgsIDB4MDQ2ZDYwYmYsIDB4MjFlODA1NzEsCi0JMHg4OTU4YWYyMiwgMHg3YzcxZWZmZiwgMHg0NDM0NWJkNywgMHhlN2VmMTgzMywgMHhkZGY1YWUzYSwgMHgwNzU0ZmY1YiwKLQkweDlkMTJlZmJkLCAweDVjNzFjZWM4LCAweGE1ZWJjYjM5LCAweGUxYzYwNTc2LCAweDI1ODVkZjk0LCAweDZjZmM4YTRhLAotCTB4ZWNhZmRlMmYsIDB4NWJkYjA3Y2QsIDB4NjFhZTQwOWEsIDB4YjE1ZmQ3ZTcsIDB4ZWJiM2YyY2IsIDB4NTdlODdmNjksCi0JMHgyMjhjNjU3ZiwgMHg0YjhmOWIzZiwgMHhmZDFhYjNjNywgMHhlMGExNjA3OSwgMHg2NjA0YmRmZiwgMHg5ZTQzZDRkZiwKLQkweGRmYzA5MGQ3LCAweGU3ZjhmZDE5LCAweDViNzllNTg5LCAweDdmMzg0OGRlLCAweGUzNTc2ZjNmLCAweDFmOWZlM2ZkLAotCTB4MTJkZjhkNTEsIDB4MTJjM2RkNjQsIDB4YzUwNmRjMTksIDB4ZGM1Y2YwNjksIDB4Y2RmNjIxZWUsIDB4ZGYxN2U2NDEsCi0JMHhlMjA1ZmI4OSwgMHg3ZDcyOWM3ZSwgMHg3M2JjY2JiYiwgMHhjNmMzZmQ2MCwgMHg3MmFlZmYzMCwgMHhlYzg5NDE5YywKLQkweGRkZWViMTNiLCAweGY1MWYwY2QxLCAweDYwN2M1MzZmLCAweDlmY2IwOGZlLCAweDVkZWQxZGRkLCAweDJjYzBmYzhjLAotCTB4OGU3Y2YzYzcsIDB4N2I3N2RkZTcsIDB4Y2JiZWYxZDMsIDB4MGU3ZWNjNWQsIDB4Y2Q1NzBmNDUsIDB4NGY4MDA3Y2UsCi0JMHg0MjM3NGVkNCwgMHhhYTE5MTkyZSwgMHgwMWNjOTQ2OSwgMHhmNDdhZWJlNywgMHg0YWJiODdlMCwgMHg3MGJlZDc4NiwKLQkweGM1N2UyMWQ3LCAweGZmZGY0MmI4LCAweGM2MzUzOWYyLCAweGM2M2NiZmYxLCAweDFiYjEyZGNmLCAweGY3N2M4MGE1LAotCTB4ZWJmMzA5MmYsIDB4YTEyYWQ5N2YsIDB4NDlkZjNmOWUsIDB4MmZlNTEzNDgsIDB4YTBkNmI2ZjMsIDB4YTVmOGI4NWUsCi0JMHgwMzYyOTgyMSwgMHg3Y2E0YWZiZiwgMHgyMTIyNWU2NCwgMHhmZTcyZDI3NywgMHg3NzVjNzk2YSwgMHg3ZTNlZmFlMSwKLQkweDdmMjgxMjM5LCAweDk0NDY5MTE3LCAweDk2OWY4YjE3LCAweGViMjZhYmY3LCAweDgzN2EwY2ZmLCAweDNlOGNkZTMyLAotCTB4Y2YxNzZhNGYsIDB4Zjc3YWU0NGUsIDB4ZjgxNDMyNTAsIDB4N2QyZjAzZmQsIDB4ODZiNDhiYTUsIDB4OTRmM2ZmYTYsCi0JMHg4MDZiNjY5ZiwgMHhlY2IwMWFhZiwgMHhiOTYzMzY2YSwgMHgyOGJlZDEzYywgMHgzOWE1YzI5MSwgMHgwODlkNTlkMSwKLQkweDE4OGY4Y2ZlLCAweDVlZDcyZTNjLCAweDJlMDBmMjY2LCAweDdlMDA4ZTRmLCAweGQzM2NhMTJkLCAweGQ4ZjE2NGNmLAotCTB4NzIzZGMyMWYsIDB4OWViZDBmMGEsIDB4ZDQ3NTc1YzksIDB4NzA5M2M5Y2EsIDB4ZmY4NDZlOTUsIDB4OGU3OWFmMzAsCi0JMHgyZDhkZTUwNSwgMHhmNjNkZTgxMSwgMHg2M2M2ZTMxNywgMHgyMjJmZDc1ZSwgMHg3NWJmMDBlYywgMHhjMTk3ZWVhNSwKLQkweDU1NmViMDhmLCAweDBkNzFmYTM4LCAweGNlMGYxNjdhLCAweDgyYWE1ZWRhLCAweGVkYjcwM2ZiLCAweDFmODNmNjk2LAotCTB4NTU2M2ExYTMsIDB4MzdlZmRjMGUsIDB4OGYzMWMzNWEsIDB4NWU2M2FhMjAsIDB4NmM2MzkzMjYsIDB4YzcxNmQ4OWUsCi0JMHgyYzY3YzA0ZSwgMHhlYmEzNmJkYywgMHg0ZWU5OTc1YSwgMHhlOTlhN2M2NCwgMHhmNjFjZjUzOSwgMHgzZmY1OTIzZCwKLQkweGViYjM5ZWUxLCAweDIxZWYxYWE4LCAweGJjYjBkNjVlLCAweGUxODQ0MWZhLCAweGMxMmJlNDU1LCAweDVjZmE4MWRjLAotCTB4MjQxYjg1MTcsIDB4OTM5ZWY1ZDUsIDB4OGRhM2M5MzYsIDB4MzAxYzc3YzQsIDB4YThmYjUwY2UsIDB4YzgyNjdlMjcsCi0JMHgzMDY5OWY5YiwgMHhhZWJiZDM0ZSwgMHgyMGNhOTI3NywgMHhjY2U0MjMxZSwgMHhmY2NjYzk0YywgMHg5ZDVmNWM0MiwKLQkweDJjN2ZjNDQxLCAweGU5YzU1MzllLCAweDUzZDcwNjYxLCAweGY4MzA0NjY3LCAweDc0YjYyN2NlLCAweDgxYmY3N2U4LAotCTB4ZDFlOGFhNDQsIDB4NTZkZTU5OTksIDB4ZDFhYmZiOGMsIDB4MTE2ZjQwNWEsIDB4N2FkMDg5NzEsIDB4NGU3ZjcwNDIsCi0JMHg3NjI2Y2JmZCwgMHgwZGYyNTIxZiwgMHg2ODJlNDE4MCwgMHg3OWQ2YjkwOSwgMHg0M2Y5YzNkYiwgMHg5N2U2MDBmZCwKLQkweDBlYzRkOTI1LCAweGI3ZmFiMDcxLCAweGY4ODY2ZTA3LCAweGM1OWMzZTg3LCAweDMyMWYyOTU5LCAweGVmMjc3YmMwLAotCTB4ZmJhNjNjODIsIDB4MTg1NmZhNWUsIDB4ZGM0MmJmN2IsIDB4MGJkYjM2ODcsIDB4YzM2MTdlZTAsIDB4Y2M0MmQ0ZTQsCi0JMHhjM2U5Mzg1ZiwgMHhiNWJhMDg3NywgMHhhZjNjNzRkZSwgMHg1NDQ4YmY5NCwgMHgzODk4N2UwNiwgMHhhNTBkMWVlZiwKLQkweGFhNjRmYWYzLCAweDNmZmFkMTZmLCAweGJkNTgxYjEyLCAweDhhYjE3NzlmLCAweDNkMjQwN2Q2LCAweGJjODNlYWNlLAotCTB4NGI2ZWEwZTcsIDB4MGQxZWZhN2EsIDB4ZjQyYjYzZGMsIDB4ZmFkMzU2MmUsIDB4YWMyZGE0ODQsIDB4MzI0YjA2MGUsCi0JMHhjZmQyNmY4NSwgMHhmMWQxNzFlZSwgMHgzZWI4NTgyZiwgMHgzZGUyZjM2MywgMHgwNzM3ZmFkMCwgMHg4NGZkMDJhYSwKLQkweDdmMTg5MjYzLCAweGJlYzYxMGJhLCAweGU2NDk5MGJiLCAweGU3NzgwNjRlLCAweDg3M2VmZjA0LCAweDVjZjQyZjdmLAotCTB4OWZkMTVmYjEsIDB4ZjdlZjA2MjQsIDB4NGI3Yjk3MTksIDB4OTJkMDNkZjksIDB4OGMzNmIyMDgsIDB4OTE1Yzk1YzUsCi0JMHgzYTg3MGYxNCwgMHhlYzVjNjIwNiwgMHhjYjM0NjI0MCwgMHhmMTdiMzVkZiwgMHg4ZTMxMTA5ZCwgMHg0ZjE4YTc4MCwKLQkweGU0MGNiYmNjLCAweGM5ZjMxMWIwLCAweGUyZjk2NGFhLCAweDc5ZDI3ZTVjLCAweGQ5M2NlMzU2LCAweDcyN2Y3Njc2LAotCTB4ZTAwMTZhNzIsIDB4YzM0ZGUyOGYsIDB4YmMwMWE2ZjEsIDB4MzBkNzdiODksIDB4ZjkxZjI1YWUsIDB4NDNmMDEwZmQsCi0JMHhiZjRhYmExZiwgMHg1YmFmZjRjZiwgMHgzODU3Mjc0OSwgMHg2MTZkMmM5ZCwgMHgyNTlmNDBmMSwgMHgyNGE5ZTkwYiwKLQkweDUxM2JiZjgyLCAweDA0YzdkZjI0LCAweDQ5MzFiZjBlLCAweDVlY2ZiNjE2LCAweDM4NDgyNGJjLCAweDYzODcwYjRmLAotCTB4ZTRjMDc3YWEsIDB4NzdkZjliYmMsIDB4Y2Y1YjEyNzgsIDB4MDA3N2RlYWQsIDB4N2VmMGVjYmUsIDB4ZGJmNmExYzQsCi0JMHgzMGZkYjBiNiwgMHg0NzNkMDE3YywgMHhhNGY3NWVhMywgMHhhYjBiYmM2YywgMHhkMzg3ZmQxNCwgMHg4ZGZiMDkwMywKLQkweDNmZmVjMmNlLCAweDEwMGRlZmU0LCAweDVmYjdhNWIyLCAweDNmZDMzZTY2LCAweGY3MTUyZjQxLCAweDRlZWI4OWU0LAotCTB4ZWQxN2U4MTIsIDB4YzZkZjBmYmQsIDB4ZjdmYWFkZWUsIDB4ZGYxMTRmNzksIDB4ZDNlZjk5YTcsIDB4OTZlOWY2Y2MsCi0JMHhlZTM5MmJkMSwgMHhlYTZhOWY0YiwgMHhmMGJkYzc0YiwgMHhiNzJmMWRlZiwgMHgzYjI3OGY5MCwgMHg4M2M2YzFlNywKLQkweDJmMGExZDczLCAweDMxNmU5M2EzLCAweDJhNzU4YTNkLCAweDY3MGJkOWUwLCAweDNjMDRmYWM1LCAweGJmNjM3Y2UxLAotCTB4OGE1ZDM5NWMsIDB4OWQ0MmRhNzUsIDB4MzhlZmNjZWYsIDB4NTdlYjI5NWYsIDB4YmZjYjMwZjcsIDB4NWQzOTU2MjUsCi0JMHg1NGNlZWRkNywgMHhmNDViZGM0MSwgMHhlZTNlMGEzYiwgMHhjYjVmYmYzOCwgMHg5OGUzYzQ5OSwgMHg0NDM1MjRhOSwKLQkweGE0YzJkY2RlLCAweDMwZmVhMGI4LCAweGU3Njk1ZGZjLCAweDNlNTg1OGY1LCAweGVmZGVkMmIyLCAweGMyNzViMzg5LAotCTB4MjVkNzM0M2QsIDB4YTQ3YTdmNzYsIDB4NzEwMTNmYzIsIDB4N2Y0NjVkOTIsIDB4OTE3Y2JmM2YsIDB4Zjg3MTc3ZDcsCi0JMHhmOGFmZjVmNSwgMHg5MTY3N2VmMCwgMHhhYjM1ZWNiZSwgMHg5YmZmOTA4ZCwgMHhlYmYyMGVmNCwgMHgwN2IyYThhMiwKLQkweGY1N2Q2OTMzLCAweGRmYzhmZDg2LCAweGJlY2E1MjhiLCAweDdjZmNhNGNhLCAweGFjMDM4NmNkLCAweGFmYjJmNmZkLAotCTB4ZTkzZDQxZmEsIDB4ZDg5N2FiMjAsIDB4NGY3ZTAzNWYsIDB4YzY3YmMxYzgsIDB4ODhmNWY5MjQsIDB4NzE1OTI2MWYsCi0JMHgwYWI5NzU1ZSwgMHhkNWVhZGZkZiwgMHhhM2QxZGU1ZiwgMHgxYWUwMjJmZSwgMHhhYmQyMmNhYSwgMHg5ZmM1ODMxYSwKLQkweDgxZTk3YjVhLCAweGMzODYwOWM1LCAweGE3OTBhZDNmLCAweGFmNzhlZGM0LCAweGY3Yzc2NjQ2LCAweGFmZmJiMjQ0LAotCTB4ODZmZWZiM2QsIDB4NGY5ZTE5ZjcsIDB4ZjAwNGZlNzIsIDB4MzVkMTEwZDAsIDB4MWZkNjkzMjcsIDB4ZTMwY2Y4OGQsCi0JMHhlYTlkOTI1MCwgMHhiMGM3ZTAyMSwgMHhiYTJjYzk5YSwgMHg5ZDZiYTk1ZSwgMHhiMjI1ZjQwMywgMHgyMGQwNjZjYywKLQkweDA3NWZiOTVjLCAweGYwYTJmNGRlLCAweDlmZWRlYjdiLCAweGE2YzI5MjNkLCAweDQ2M2FjMDcxLCAweGYwZDAzZTcwLAotCTB4NDM1ZjM3ZjYsIDB4ODJlMWIyZGMsIDB4ZTFlYTA2ZDEsIDB4MGYwZDhlODgsIDB4YTIzNWJlODIsIDB4MzBkZmQ3ZTMsCi0JMHg1ZmVlY2MzOSwgMHgwMDhmNzU4OCwgMHg3ZGZkMWRiZiwgMHhkNzFlYmI3OCwgMHhiNmUzYTIzZiwgMHhjOGZkZjA0NSwKLQkweDAxNjQ3NmRmLCAweGU1M2U4YzlkLCAweGQwYjYwMTY5LCAweDE0OGRlZmIzLCAweDJmY2RmZGY5LCAweDE4NmY5OWFlLAotCTB4ZTAyNDhlMzIsIDB4NTRhYTI3ZjEsIDB4ZGUzYzIxNDUsIDB4OGFiOGYwNjAsIDB4NzFkZDUxZjksIDB4ZDE3OGQ2YzcsCi0JMHhkZmJmMjdiOSwgMHg4Yzc2ZjU0MiwgMHhlMTI2NWU4MywgMHg4YmQzZjAzNiwgMHg3ZjRhYzU3YiwgMHhiYTRhYzllMCwKLQkweDY4ZmJmYTNmLCAweDgwNDE1ZDFmLCAweDg1NzI1Y2RlLCAweDdhMDFmZmRhLCAweGM4YjEyOTc4LCAweDI0ODZlNWVhLAotCTB4ZTYxNWY3ZDksIDB4YjhmYjU5NGMsIDB4ZWQ2NGRiYzQsIDB4NjQwYjU5NzcsIDB4MjMzOTA5ZjUsIDB4YjQ0ZmRmNjQsCi0JMHhmN2VhY2E5NSwgMHhmNjRiYmYwZSwgMHg1MmJkYTU3ZCwgMHhiNGYwMmY1NiwgMHg3MjFmYmVjOSwgMHg3ZWRlNWRhNCwKLQkweDBmMDFhODljLCAweDA3NmQyNzg1LCAweDZiM2UyY2ExLCAweGQwZTJiNzQ3LCAweGExMDc4ZGYzLCAweDA2MTdmMTFjLAotCTB4ZjQzZmE1MGUsIDB4MDc2ZDJiOGUsIDB4MGZlMTc3ZTEsIDB4MTE1N2RlNTUsIDB4NmFlOWQxZmUsIDB4ZGMxNzViYTMsCi0JMHhhMWE4OWEwZiwgMHg4YmM5MjVlNSwgMHg2MmFkNDRmYywgMHgzMDVlNTVmNywgMHg2ZjAxYmIzOSwgMHgwOTRhYmVlMiwKLQkweDEyMjk0M2Y4LCAweDYyNWVlNjJhLCAweDMxNjdiMmY3LCAweDQwNDlkODdmLCAweDE5YTdmMDBjLCAweDlkZTNmNDI2LAotCTB4ZmFiZTM2ZDQsIDB4NGVjNzE2N2IsIDB4ZGEzN2JlMDMsIDB4NzdkYjI1NTcsIDB4NmNhNzE1YzksIDB4YTk2NGE1ZGYsCi0JMHg2NWNiNGYwMiwgMHhjM2YzMGFmNSwgMHgyNWM3ZWZiMiwgMHhkZmI1OTJhZSwgMHg4MTVjN2Q2NSwgMHhmNTY1MjdhNywKLQkweDBhMGRiNjg5LCAweGUwNTY2ZDNjLCAweDc2YjI2N2U5LCAweGRjMWRkZjQxLCAweGY4MzZmNTNmLCAweGNhMzk2ODk1LAotCTB4NzgwZTU5ZGIsIDB4MGZiY2YzYjgsIDB4YjNiYzMxZjEsIDB4NzRmMDFjYjUsIDB4YzQzNmM5YzcsIDB4NTFjNzkxNTcsCi0JMHhlODcyZWMwZSwgMHg1MDgzYzY5MSwgMHgwNWZkYTg3YSwgMHgyNzM0MGVmZCwgMHhkOWE4Nzk2MiwgMHhjM2E5ZmU4YSwKLQkweDFlNTgzOWNkLCAweGVmZTFiNjY5LCAweDhlMWU2YWJmLCAweDc2Y2RmYmU1LCAweDNjZDM3ZjJjLCAweDY2Y2VjYjFlLAotCTB4Y2Q2ZDk2MDcsIDB4YWVmZGY4NmQsIDB4ZGZlNjc2ZTYsIDB4ZDdiZGU5OGEsIDB4ODA3ZTA2OWYsIDB4MWViNzk1NmUsCi0JMHgyNzY0M2VlZSwgMHg3ZTA0NGVjNywgMHhlZGVlMWRkOSwgMHhhZWEzZmE4NiwgMHgyZmMwODllOCwgMHhhMTEzMDAwNywKLQkweGNiY2Y5Yzc4LCAweDNkZjYyOWIxLCAweDBkYmY5NGM5LCAweDkxNzU2NjQ5LCAweGIyYTZkMDU3LCAweDVlMWU4MDE3LAotCTB4MDllMzMxYjIsIDB4OGYyMTFhNGQsIDB4OWEyNDcyYWQsIDB4YTA2ZWFjMmQsIDB4ZTYzNjQ0NzUsIDB4NjEzYzY1NWIsCi0JMHg1NWU0MjU0ZiwgMHg2MDc3MjUxMCwgMHg3YmQ0MjI3ZCwgMHg5MGZiNThjMiwgMHg0MTEzMTk4ZCwgMHhmMWNlZmYwZiwKLQkweGJjOWY3YjYwLCAweDIwZTQ5MmMwLCAweGNmNTdlMGYxLCAweGJmZTA0ZDViLCAweGEwNzU3NjM5LCAweDhjNzFlMDA5LAotCTB4YTRlY2IxZmIsIDB4OTY4ZjNiNDAsIDB4MmQwMjlhYTUsIDB4MGE5M2Q5YzgsIDB4M2Q5NDQ0YmQsIDB4YzlmMWQyYWEsCi0JMHhkYjZmYjA3MSwgMHhiZTQzY2MzNCwgMHg3ZTgwNGI1YiwgMHhkZWNjNGIyNywgMHg0ZmY1ZGYxNSwgMHgxMzE3ZjllMSwKLQkweDFkNGY2OGY1LCAweDYxMTdkOTU3LCAweDdiZTQ5M2RlLCAweDY0YmNlMDAxLCAweDdiODQxMGUzLCAweDBlOTdjOThmLAotCTB4YjFiNDViZjAsIDB4N2NlM2Q1OTAsIDB4ODBiNjQ4MmYsIDB4NjdjMTk2YmEsIDB4ODk4MmM2ZmEsIDB4MGE1YmRjYWUsCi0JMHhlMGMxMDU5ZiwgMHg2NjZjOWQ1MywgMHg5ZWM3YjZmYSwgMHhhODgwN2EwNiwgMHhkN2I0YWYxZiwgMHg1ZTNlNzljMSwKLQkweGEyZmJjNzZhLCAweDc2N2ExY2M3LCAweGJjMjYxZDdlLCAweGY2MzQ0MGU3LCAweGZlMDE2OWUyLCAweDVhYzliMzljLAotCTB4MmUxNTM3ZWMsIDB4ZjM1ZjgxOWUsIDB4NzM5ZTM1N2UsIDB4Mjk1NTNjMjUsIDB4M2E0NzBmNGMsIDB4NDY3MzNiMDEsCi0JMHhjNzA1ZGEwNCwgMHhiN2RlZWM1NSwgMHgxNGNjZmJmMiwgMHgwYzVkMWY2NiwgMHhlYjc3ZWUwZiwgMHhhNmNiZGJjNywKLQkweDg3YmFiZGQ0LCAweDIyYjNkNzhlLCAweDcxZWU4NzBjLCAweGFjN2Q0NDBjLCAweDdiYzI1MWE3LCAweDFiZTczZGI1LAotCTB4YmQ3NmIxMmYsIDB4ZTMwNDgzOGQsIDB4NWZlMTMzOTIsIDB4OGVkNWZkYjQsIDB4MzFmYWZmMDcsIDB4MTViM2ZlZmQsCi0JMHgyMTk0MzYxMSwgMHhiZjA4NDFlNiwgMHhiM2M3ZjlmYiwgMHgzZmE4MGM2MywgMHg1NjljOWVjZCwgMHgyNjcxNzIwNiwKLQkweDMxY2Q3MzhmLCAweGRjMzFlMjY5LCAweGUwZThiMWE1LCAweGM2ODViYTA5LCAweDgyMTQzNTgyLCAweGE1NmM3MTY0LAotCTB4YTljYzllMGUsIDB4MDZiZTVkNGUsIDB4NGZkOTY1Y2EsIDB4ZjBhZGEyZWEsIDB4MzVjZWQ3N2UsIDB4ZDFkNmM2YTAsCi0JMHhmYzhjNWMyMywgMHgzMzQxZmJjZiwgMHgyNmRjZDc1ZCwgMHg3M2Q5OTViNSwgMHg2YmRhYWU1YywgMHg0MzNmMmE2ZSwKLQkweDllNzFlZmQwLCAweDgwODE0MzJmLCAweDg3MTY2YWY2LCAweGM1OTdlOGI3LCAweDMyNWI3NGU5LCAweDkxZTQxMzhmLAotCTB4YTdkZjc2M2MsIDB4MWRiMDBlMzcsIDB4ZjY2YmE0ZTgsIDB4YzQ0MjAzMDcsIDB4NWNlZGU0MDksIDB4Yzc0NGZjN2YsCi0JMHhiYmJlNTVlNiwgMHg0ZWNkZTYyMCwgMHg3MWZlN2E2MSwgMHhkMDRjYTUxZCwgMHg3MjY3ZWYyNywgMHhhYmVhYmYyMCwKLQkweGZlZTk4YjQ3LCAweDJhY2MzYmYzLCAweGFkY2ZjMzhjLCAweGI4NzgwM2RiLCAweGE4ZjFjZWRjLCAweDllNzBlZDI1LAotCTB4N2RlNmI4YTYsIDB4OGE0YWI5ODYsIDB4OTNkNzlhN2IsIDB4NzM0ZWI2OTcsIDB4MmNiY2EwNzksIDB4MDNjYTNhZjIsCi0JMHg1ZjcwZTVlNSwgMHg0NWM4Mzk2YiwgMHg3YzQ1MWYyMSwgMHhjZDVjZDNkMCwgMHhmMjIzNzJmOSwgMHg0ZGNkNDNkMywKLQkweGVjZGMzZjU4LCAweGYzNDhmMmMyLCAweDViOTdjZTVhLCAweGU2ZmRmZGIxLCAweDc2NWYzOGU3LCAweDBkYmNiZTczLAotCTB4YWU2OGVmN2YsIDB4NjZlZGYyYzIsIDB4Mjg5Njk2MjcsIDB4N2UwMTZmYzcsIDB4Y2M0ZTBkNTMsIDB4ODM3NzdiZWYsCi0JMHhlYjdjNDA5ZSwgMHhmMzFlODc3MiwgMHg3ODg5ZTgwZSwgMHhjODU4ZjllMSwgMHhiZGUzZDFhNywgMHg4ZDVlNjUzYiwKLQkweGQyZjdjZjkyLCAweDI1ZjdkZjQzLCAweGY0ZjMwMGZlLCAweGJlODBjM2U2LCAweDllOWExMTk4LCAweDA5YWIxMThlLAotCTB4OTJkZmQyZjgsIDB4YmU4MjI2OWIsIDB4MzU2YWNjN2QsIDB4NjU3ZDNlODEsIDB4YTVmMjEzNjMsIDB4NDlhYjc2NjMsCi0JMHgyNGRmZWI0YiwgMHg5ZGRhY2MzZiwgMHhkNjllOTM1NiwgMHhjM2UzN2JmZiwgMHgzNTY1ZGRhYywgMHhkZmZhZDE4NSwKLQkweGVhY2ZiZjkzLCAweGM0ODJjMjZlLCAweGU3YzhjZDI5LCAweDA4NzQ4OTRiLCAweDIxYjk0N2NlLCAweDE3MTUwYzczLAotCTB4MWU5NzVlNTQsIDB4MmUzMTczODIsIDB4MzgxOGRlNzEsIDB4NTZjOTc1MTcsIDB4YWNiYjhmYTQsIDB4N2Q0MTBlYWIsCi0JMHgwZDY2Y2U0MiwgMHgxYmI2YzU1YywgMHhiZjQzNTYwYiwgMHgwZDRhZDhiMiwgMHhiYTkzMWJmNCwgMHgxYmY0MzU3YywKLQkweDI2YTRmZDliLCAweGRjZjhkZmIwLCAweDdlYTFhYjlkLCAweDA2YjM2ZDhmLCAweGNlM2FkM2Y0LCAweGEyMzhjNGM3LAotCTB4OWYwNWRhMmUsIDB4ODM1ZTc5MTYsIDB4MGYyODFjM2IsIDB4MjgxZGRiZjIsIDB4Y2E1YzA0MGYsIDB4MDYzZTU2YTYsCi0JMHg3Njg2Yzc3ZSwgMHgzYWMxMmNjOSwgMHhjMWJkNGFhNiwgMHhhYjkxYzg2ZiwgMHgyOTFhZjc4NywgMHhmZTdhOGViZiwKLQkweGJhMmFkMzA5LCAweGRmYTgwNmNmLCAweDU2MjdmNTgxLCAweDlkZmU1YWRkLCAweDk3ZDcxMjkyLCAweGU3ZTA5ZjdmLAotCTB4ZTQzZGU0MWQsIDB4YjFkMDlmNjUsIDB4MDAxZTMyZjcsIDB4N2RlMzE0YjgsIDB4MmJiZTEzMzQsIDB4ZDAyNjljNDksCi0JMHgzY2I4OWFiMywgMHg2ZDI1MDk1ZiwgMHgzYmViY2VkZiwgMHhkOTU3OWM4NSwgMHhkZmQwYTdmYiwgMHg3ZGI4NTM3MywKLQkweGQ4M2Y5N2Q5LCAweGZjZjQxZDYwLCAweDg0MzllZTJiLCAweGExZmNlNzY4LCAweDdiMmNjNTMwLCAweGIwOGVhMTVmLAotCTB4Y2JkNzU1N2IsIDB4MzFlNjUzMWIsIDB4OTYyOWYzMmIsIDB4ZjZjM2I2OTEsIDB4MTQ3OWJlY2MsIDB4YzdiZDg0YjUsCi0JMHhhZTRmY2NhMiwgMHhhZDVlZWMyNywgMHhkN2I5NGYzMiwgMHhmYzY3MGFhZSwgMHgwZDc4MGFiNCwgMHgyOTg5ZTNhNSwKLQkweDY1NjRmOTIxLCAweGUxMzVmMTRhLCAweDkxMGY2ZjIwLCAweGIwOTRiZDk3LCAweGY5M2VlYzNjLCAweDViMWYzYzM1LAotCTB4OGNlMjJmYjksIDB4ZjI1ZGVmNjMsIDB4ZmVlNTZjZmMsIDB4ZGRmNDVkMDQsIDB4YmY4MzJiNWYsIDB4ZWE5ZmMxODYsCi0JMHg3ZDYwMGI3NywgMHgwNDRkNzMxNSwgMHhmYzgxNTZmYywgMHhmMDZiZTNlNywgMHhiYjNmMjUxZiwgMHhmYTcyN2M1NSwKLQkweDlmNzYzYWRjLCAweDZiMWYyZmJmLCAweGM3YzIwOTRhLCAweGIyOTc1ZTQ0LCAweGRjMmE3YTE0LCAweDNlZmM4MzFiLAotCTB4ZWMwNjBmNzgsIDB4OWMxMjNiZmMsIDB4M2Q5NzQwMmQsIDB4NTVhZmJlNjUsIDB4YjJjNjg3NjAsIDB4MmRiYjkzZjcsCi0JMHhiYmYwMzVjZSwgMHgwM2Y5NjNhNCwgMHhiY2Y2YWYyMiwgMHhkMDRiZjVjYSwgMHhmOTRhOWVkYiwgMHg2ZWJiZjIxNSwKLQkweDhjZjQxNjEwLCAweGUwNzVhM2FjLCAweDhlMmM0MzY3LCAweGU0OGZkMGY1LCAweGVmODE3NTc4LCAweDFmY2E4NzMwLAotCTB4ZTFjYjlhN2QsIDB4ZTU5MTI1YmUsIDB4ZmU2Y2Y2NTUsIDB4MGZkZTg2ZTYsIDB4MGE4ZjA1MGEsIDB4ZGMyZjI4ZjUsCi0JMHgzYzNjYjg1ZiwgMHg5NzY3ZTUwMiwgMHhmZWYwM2M0NCwgMHgzYzY5NTc2YiwgMHg2OTVkMmRlYSwgMHhiNzk0MGQzYSwKLQkweDRhZWUyZWRhLCAweDJiZTM4MDFiLCAweGE0YWVlM2VkLCAweGVmMzYwNmUxLCAweGZlNTBmMWQ4LCAweDExNWNlOTI2LAotCTB4NzkwZmJkYzgsIDB4Y2ViYjYxM2UsIDB4ZTAzN2U0MzUsIDB4ODYxMTFlMWYsIDB4MjU3YmZhNzEsIDB4NDFjMDExNmYsCi0JMHgxZDc3NTc2OSwgMHhjZDY2NTU5ZCwgMHhkMzVmNmJlZiwgMHhmZDgxOGRmZCwgMHgzZDUxOWVkNSwgMHhhY2RkYmYwNiwKLQkweGY0ZGI1ZGJkLCAweGVkM2M4MTM1LCAweDA5NTc0ZDkxLCAweGJjZGY4ZmU0LCAweDlkMTlkZGZkLCAweGMyYmQwNTZmLAotCTB4MzIyNDAyZDksIDB4MTNlYThiYWMsIDB4ZmNiZDdlYjQsIDB4YjUxMjRiYTQsIDB4ZWMwMzMzZDMsIDB4NjZiZmUxZjIsCi0JMHg1NGJjNGE3OSwgMHhkZTdkZTdkYSwgMHg5MmU2NWI0YiwgMHg3YTk1YzNlNywgMHg0NGRmMzE4YSwgMHhmYmM0OGRlZCwKLQkweDllZjYyYWFhLCAweDdhNTdjODgyLCAweGQ0ZjNkYjhmLCAweDgyOWIzZjVlLCAweDc0Y2ViODdlLCAweGZkZmViZDk5LAotCTB4ODIzY2U3NGYsIDB4ZjMwYzIwN2MsIDB4ZmY2ZDVlMzMsIDB4ZmFkNjBlM2MsIDB4OWZiOGNlODcsIDB4ZDNmNTY1YmMsCi0JMHg2YmY5ODM3NywgMHg1ZjY3OTgxMiwgMHg1NjU5NzRkYiwgMHhlZDdlZTJlZiwgMHgyZmJiMmQ1NiwgMHgzNTRmZmI1NCwKLQkweGM3MmEyNWNhLCAweGM4OWUyMmQ2LCAweDAxMDNkZDAxLCAweGZkYjQ5NWYyLCAweDgzZGUxN2I5LCAweDA0YWJiZjI5LAotCTB4MWQ3Y2ExODAsIDB4ZmI0ZWM5MzksIDB4ODg3YjcyNTUsIDB4OWQ1ODc3OTAsIDB4OTVjNDhmZGIsIDB4ZTI3MWVhYzIsCi0JMHg3YWIzMWZmYiwgMHhhOWZlZjg5YSwgMHg0ZjNhNzY0OSwgMHhlNzY4OTI2NSwgMHg3NWUzNmZmZCwgMHgzM2Q1ODc5NywKLQkweDY0N2ZmN2M1LCAweGJiNTg5YmRmLCAweDQ5OGVkMzdlLCAweDNmMDVjZTcwLCAweGRmY2FhNTM3LCAweGRkZmNhMjAxLAotCTB4Y2Q3YzVhOTIsIDB4M2I3OTFhN2MsIDB4ZGRlMmZmZTcsIDB4ZGZlZjhhOWYsIDB4OWMwMWYxMTUsIDB4NzMwOTM2ZDMsCi0JMHg2YTU3NmFlNywgMHgzMTdmNWZkMSwgMHhmMDNmMmRiYSwgMHg3NzkxNTA3ZCwgMHg2MTM3MjhlMywgMHhlYmRkNTQxZSwKLQkweDBiODBiNzAzLCAweDFlM2E2ZDUzLCAweDQ0Y2E3YTBmLCAweGExNTRmZjllLCAweGU1OWM2MjM2LCAweGM3YzY3YWYyLAotCTB4OGI3OWU5NDMsIDB4ZTE5NGRlOWIsIDB4N2YzYjRmYWIsIDB4OTEwMzE3OGYsIDB4NGY0YmJlNzQsIDB4OTBmN2IwMjQsCi0JMHhlZTMxM2JiMywgMHhlOTk1MzgzZiwgMHgyMmJlZjBmMSwgMHhmOTE1ZTdkYywgMHhjNDU5YjE1YywgMHhlYzcxZjYwZSwKLQkweDVkZWM2MTFiLCAweGM4OWRiM2M4LCAweGMxYmYxNzVmLCAweDFiNzVkN2ZjLCAweDliM2NhMjBlLCAweGZmYTJiNmFmLAotCTB4NjczZjVjNjgsIDB4NDdjNDJhNzEsIDB4MzAwMzlkNGMsIDB4MzZmNGRkZWUsIDB4NjczZmMzOWUsIDB4Y2I5Yzc5OTgsCi0JMHhjZjA4MWI5NywgMHg1ZmUxN2RkMSwgMHg5N2Y4MWQ3YSwgMHhiZmUxM2JmZSwgMHgxODBkZWE5YiwgMHg4NjEzZGFlNywKLQkweGM2ODI2Y2Y2LCAweDFjNDFiM2FiLCAweDU3N2IyNGYzLCAweGRiODcyMTcyLCAweGUyM2ZjZWQwLCAweDc4ODdmZjdkLAotCTB4YzU5ZGFhM2QsIDB4OTU5ZTQ0NjksIDB4NTRhMWY3OTgsIDB4OGYwMzgzMTMsIDB4N2U0ZGQ0ODcsIDB4NDNjNDE0N2YsCi0JMHgyMjRhZmUwNCwgMHhiN2Y4MWI0OCwgMHgxYzZjMWUyOSwgMHg4M2MwMzYwZiwgMHgyZTNmYjc4MCwgMHgwNjY1ZmI0MiwKLQkweGJkOTU2YjhlLCAweDFlZTAyYjVmLCAweGU5MmIxY2VhLCAweDE5NWJhYzQzLCAweDNjNjY1ODI3LCAweDVkZjgwYzU0LAotCTB4ODE3OTkzNzYsIDB4YmUzOGQyOTcsIDB4ZmJjYzVlMzUsIDB4NDEwNjczZmIsIDB4YjhmMDI4YjksIDB4NWRkZTJmYjIsCi0JMHhjNGQ3NzFhOSwgMHg1ZmZkYmNiYiwgMHhkYzI1Nzc4YywgMHg4ZjJkNjU5NCwgMHg3ZjdmMjk3YiwgMHgyZmY1NTUyMSwKLQkweDM2ZmZlMzg1LCAweGM2ZWNlYTdmLCAweGI5ZjZiMmZkLCAweGM4NmY0NzRkLCAweGEwZmMyYWRmLCAweGFiYmYyZWZmLAotCTB4N2E0ZWI3ZjAsIDB4ZTIwYTg5NmQsIDB4N2M3YjRhMzIsIDB4NmJlM2JhNWEsIDB4ZGY3YmJmYTAsIDB4MDllZTQ3ZmMsCi0JMHgwMGY1N2M1OCwgMHg5MDc5M2ZjYywgMHg1MWFiZTVlZiwgMHgxMWVjZmI3ZiwgMHgzNTVmNGY0YSwgMHhhOWQ0M2YzMiwKLQkweGFkNmE1ZmZkLCAweDYzZTk3ZDc5LCAweGIxMTUxNWY2LCAweGVjZDVkMDA3LCAweDIwYjQ4ZmE2LCAweGNkNTM2NmFmLAotCTB4ZWEzYzU4MjIsIDB4MzA5ZTljZWYsIDB4ODFmMjg0N2YsIDB4YzZkMTAzMmEsIDB4NTU1ZmYzZDIsIDB4YWU3M2RlYzUsCi0JMHgzNDRiYzA4MiwgMHg2ZDI3MWU5NiwgMHgxZTIxYTQ5ZiwgMHhkMmI1YWY3OCwgMHgzMWU4ZjFhOCwgMHhiN2JmMjQxZSwKLQkweGI5ZWZlN2FhLCAweDc2NTJjMzUyLCAweDU3NmQ1NTdmLCAweGI0ZDM3ZTYzLCAweDc0OGUyY2UxLCAweGVmMGRiMWJmLAotCTB4ZjIzOGNlMjUsIDB4Njg0N2E1ZTgsIDB4MmFlZDU5M2IsIDB4ZTJiNzc5NjYsIDB4NTRlZmQxOWUsIDB4ZmExZjEzMzcsCi0JMHg3ZTYxMmE3YiwgMHgxZGM3ODk1NCwgMHhlZTMxNmI5NywgMHg2MWY3ZWNhOCwgMHg0ZDYzZjMyYSwgMHhiZjJjNGI1MiwKLQkweDRmY2IyZjYwLCAweGVlOTFlNzEzLCAweDkwYmU4OGVmLCAweGJiYzNjMWU1LCAweDVhOGQ5NWE2LCAweGQwN2NjMGNmLAotCTB4ZmVhM2Y2M2YsIDB4NTU3YzMwZDEsIDB4NjFhZmUwM2UsIDB4OWY0Njc0OGMsIDB4MWIwM2Q3ZWYsIDB4ZmQ4MmZlOWEsCi0JMHg1OTU4ZmM5NSwgMHhlOWRmYThkZSwgMHg0ODIzZTZiMywgMHgzYzVmNDIyZiwgMHhiYWMxZWNkNSwgMHhhYjM1MGZkMiwKLQkweDZlMzAzZmU0LCAweGVlMmZlMjMzLCAweDVlNDcyODE2LCAweDY2MTg5ZmI1LCAweDk1ZjZlZWZkLCAweDlkODRhYmIwLAotCTB4MDRkYmI0YTUsIDB4YjVlZjEwYmYsIDB4YzNmYzE0MGQsIDB4Nzc3YjExZjAsIDB4YmNjYWMzNTEsIDB4MTVmZjM5MzQsCi0JMHhkOWYyOTU3YywgMHg3ZjhjMzQ4MiwgMHgwMDZmZjljYSwgMHg3ZmY2YzYxZiwgMHhkM2Y2MWYxNywgMHhmYzBkYTM3ZCwKLQkweGVjYTk1NTM1LCAweGRkMjU3MzdkLCAweGY5MzIyNmQ3LCAweDc1NzdhNGE5LCAweDE5ZjUxYWI5LCAweDNhMGJiZDI1LAotCTB4MTliZWNmYmYsIDB4MjBiMzc1ZmQsIDB4MzFkNzRmNTYsIDB4ZmJjMjQxYWIsIDB4ZmY1ZjI3NTIsIDB4YmEwNjQzZTEsCi0JMHhhN2I2YWU4NCwgMHhlOGY3YjJiNCwgMHhmYmVlOTI2ZSwgMHhlOWIzODFjYSwgMHg5Njc3ZGYzMCwgMHg5YzMzYTQwMywKLQkweGY4NjY1YmRkLCAweDQ3ZDY5NDU4LCAweGJiNGQyZThlLCAweGI3OTUxY2I2LCAweDE3ZjE4YmZmLCAweGJlNzNmZjY0LAotCTB4Y2EyNDFjOWIsIDB4ZDQ3MzA1N2IsIDB4ZDM5ZjM2MmEsIDB4MjEzZWYyYzgsIDB4Y2RjN2FjZWYsIDB4Njc1NTc5ZWUsCi0JMHhkMzdiZTJiNiwgMHgxMjJmYjg2NCwgMHg3ZGQyYzhmOCwgMHhjNThlYjI2YSwgMHgwMTQ5MzQzNywgMHgxMTc1MDhlZiwKLQkweGU5MjMyN2NmLCAweGIxNDY0YmVmLCAweGY5OTQzODc3LCAweDRmM2NmNTk4LCAweDM3NzE5OTczLCAweGJlNTIxM2RlLAotCTB4M2RmMjI0MDcsIDB4Y2E3OGY5ZWIsIDB4N2Y0NDgxNzcsIDB4Zjk1ODJmNzEsIDB4MzRjNmQwMmUsIDB4OTBhZDdmN2UsCi0JMHhmODM4YjIxNCwgMHgzNzUzZjliNSwgMHhmZjAwYzljOCwgMHg2NmQ1Zjc3MCwgMHhhNGI2NzNiNCwgMHhhZTQ3ZjFmZCwKLQkweDZmM2M3ZTUxLCAweDNlN2VlMzRiLCAweGJmNmM1ZDNmLCAweGZmNmM1ZDBlLCAweDZhMTc0OWZmLCAweGVmN2M1NmQzLAotCTB4ZTJlOTY2ZTMsIDB4M2Y3ZGFiMTEsIDB4OGY5YzViYWMsIDB4OTZmYzczZGUsIDB4NzhiMWNmMWUsIDB4Zjk2N2I4MGYsCi0JMHg0NzFlZjhhYiwgMHhlMzA0MzdjZiwgMHhjM2YzZDc0MCwgMHg2YmIxNzQ5NCwgMHhiYWNmYTMzZCwgMHhhZjE0NGM1YiwKLQkweGQwYjk0ZjIzLCAweGI4ZTIzMDNmLCAweDBkYmZlZjEzLCAweDk5MGVkZjdiLCAweDkwZTBhNGM2LCAweDE2ZWIwZDQzLAotCTB4MWJkMDgyN2EsIDB4ZGY4MGZjZmMsIDB4MWQ3OWUxNTMsIDB4NmUzN2NhMzcsIDB4YWZmMWJlMzYsIDB4ZmI4ODZiOGEsCi0JMHg0ZjVhZGQzMiwgMHhkYjkwMDlmMSwgMHhiZTgyYzM3YiwgMHg4ZDI1N2Q5NywgMHhlZjUwZWRjOSwgMHg5Y2EyNWE2ZSwKLQkweDUzNGYwMDU3LCAweGVmMTVkZjM4LCAweGQ5YTg1NjZmLCAweDNiOTdiOTNiLCAweDU4OWZlOGQ1LCAweGZlZGY4M2YxLAotCTB4ZGY2Yjc5ZjIsIDB4NThmYTk1ZjEsIDB4NTA3MmY5ODMsIDB4MGQ5NDQ2ZmIsIDB4NWYyZjk2MmEsIDB4YmNjNTZlNTgsCi0JMHhjMDdiYjAyYywgMHgxN2ZjMjE1ZiwgMHg1ODQ3ZWZjYSwgMHhkMWQzYzJjYiwgMHg2OWQ1MWVkZSwgMHhjNzNjZjU4NywKLQkweDVmMGExM2Q2LCAweDEyM2U0ZDBkLCAweGE4N2NlZWY4LCAweDE1ZjYxYmY5LCAweDljMDdlNzliLCAweGJkZTkwOThmLAotCTB4OWNmOTk2NzYsIDB4MWJlZjhmYzEsIDB4NmRmZjhiYTUsIDB4MzUyNGZmZmEsIDB4ZmU1NDQ5NzEsIDB4YTY2ZTQ5ZTYsCi0JMHg1N2E2MTI0ZiwgMHg1ODlkMjJjZSwgMHgyYzNlMjFjZSwgMHg0ZmU1ODQ5ZCwgMHgyYzM2MjdjZiwgMHhhZWY2MTIxNywKLQkweDY3MGNhMWY5LCAweDhkZTgzYTQ5LCAweDBmYmUxZjVhLCAweGJmZjVlOTdiLCAweDRjZmJlMmU3LCAweDg1NmM4ZTc3LAotCTB4ZTU1YmE4OWMsIDB4NTVlYTU2YjcsIDB4OGZiZTA1M2QsIDB4ZDhmZjAzYTcsIDB4MmI3NGY3ZjMsIDB4N2IxYmZmY2EsCi0JMHg5NDUwN2FhNywgMHgxMDdhNGE3ZCwgMHg0YTZmZjZiZiwgMHhjNGJlZWNkNSwgMHg1ZTUxMDdjOSwgMHgxZjU5OWE1NCwKLQkweGZkZjk4NjMyLCAweGUyNjQyNjI3LCAweGNkZjNmMWY5LCAweDZmODJjZDg0LCAweGVmMmFmYzQyLCAweGRmYzU4YThjLAotCTB4NzdmODRhOTcsIDB4MmFiZGRhNzksIDB4OGI3OTYyM2MsIDB4YTg2YWRkMzIsIDB4NzllZDY2ZWYsIDB4NDRiNzE2NzUsCi0JMHhjMjIzNzllYiwgMHg4YjcyZmI1OCwgMHg2N2RkZjIxYiwgMHhjYjllMmYxMywgMHhhZWVkOTBiOSwgMHhiZDEzYmZmNiwKLQkweDdiZjlkODgwLCAweDEyN2ViZTA2LCAweGMzYThiZmVkLCAweDg5YjZmMmMwLCAweDliZjYxYjM3LCAweDEwNDk3NjBmLAotCTB4ZTk5N2Y3M2IsIDB4ZWUwZmJjZWMsIDB4ZTBmZGY4YzcsIDB4ZTE1ZmI5MzIsIDB4MjY3ZWRlMjEsIDB4ZTAxM2FjYTMsCi0JMHhmYjc0YmJmMSwgMHgwZDdjZTBmNywgMHhmNzVjZWU4ZSwgMHg1M2Y4MTE1NCwgMHhjMmZjMDQ1NCwgMHgxODc4OGM1ZiwKLQkweDVmYTIyOGUzLCAweDExZWNiNTk4LCAweGM0ODc2ZWY4LCAweGZiNWQ4YmYyLCAweGQyZGRlMmY0LCAweGZjN2Y0MGY4LAotCTB4NTVmMjhjYTEsIDB4NzRkYWRkZjAsIDB4YzE0MjlmYzYsIDB4OTQyZWZlMTUsIDB4MjYxZDg4MjMsIDB4ODMwNmQ1ZjIsCi0JMHg0MjdlODg2ZSwgMHhlZDA2ZWY4MiwgMHg0MzdkNTg5MCwgMHg1NzdiZDhmYSwgMHhlOTc3ZDExYiwgMHhjYzMzZmQwMiwKLQkweGVjMzFmY2VhLCAweDEwOGViMDYzLCAweGJmZmZhYzIzLCAweGQyMTliZGY4LCAweGVmNzEwZTk4LCAweDU1ZTgyZjI1LAotCTB4NGE3YzVmYTAsIDB4MjdkYzMxYzUsIDB4NjNiNTNkZjgsIDB4ZWQ0ZDNjYTEsIDB4NDBmZjI4NTEsIDB4Y2YyODUxZWQsCi0JMHhjYTE0N2I1MCwgMHgwYTNkYTljZiwgMHgzNjJiYTJlNSwgMHgxNDk3MWM3OCwgMHhjZTdmZDg2NywgMHhiYmY4M2NlOCwKLQkweDMzYTYyZjFiLCAweGMzMjY3OWI5LCAweGM3NWIyOWQ5LCAweDYzYWUxZDNlLCAweGM3ZjNhNTg3LCAweGVjNzVkMTRmLAotCTB4ODJhZDkzZDgsIDB4ZTBhMTJjZmIsIDB4NmZlZmIzZDEsIDB4ZjgyMGNlZTksIDB4OTNkZmNkZWMsIDB4NmNjYmU3ODIsCi0JMHhlZmU3ZjNlNCwgMHhjZmRjYTBkNiwgMHgyZTQ2Zjc2ZiwgMHgzZGFlZjgwZSwgMHhjODc4ODc1ZCwgMHgxMjM2NzNkYiwKLQkweGY3MzZlZmM2LCAweGQxMmVkNWMyLCAweGIxNTI0ZWFkLCAweDMzMGJmYjdhLCAweDBiOWQ1ZGVmLCAweDAyNzdiMGZiLAotCTB4ZWVmOWU4ZmUsIDB4ZmRiZjMyODAsIDB4ZmI4NjNmYjcsIDB4OGM3Yzc0MWIsIDB4YmU0OGY2YzcsIDB4NTMyZjQwNjcsCi0JMHg2ZmI5NDNlZSwgMHhmZmJhMmZiMSwgMHhjNzdmZDA3NSwgMHgxM2IwN2U5ZSwgMHgzYjA4NmZjYSwgMHhmYmQ4ZmIyZiwKLQkweGJiZjc3ZGI4LCAweGFmN2JkNzBhLCAweGY3MDQ1N2RlLCAweDU2ZmRlZTEyLCAweGY0MWYzNDFkLCAweGMyMjk0NjRjLAotCTB4OTlkMDU2YmIsIDB4YmE3MWI3ODgsIDB4YWVmYWY4MTIsIDB4MWUzOTVhZTcsIDB4MDAxN2VmMTEsIDB4M2M4MmI1MGYsCi0JMHhmYTA5MWFiYSwgMHg1YjhmMjU2MCwgMHhmZWNlZWZiNiwgMHgxY2I5ZWYxMCwgMHgzYmY4MTM1MSwgMHhlNWEzODM4MSwKLQkweGMxOWQ0ZWU3LCAweGYzMjg5ZGNlLCAweDgwMWNlOWY2LCAweGNlZmIxZGFmLCAweDljZmJjMzY1LCAweGYwZDkzZjE0LAotCTB4NGFiZjViNzcsIDB4MTdmMzJmZWYsIDB4NjZmODhkZTYsIDB4ZmQwZmQwMjMsIDB4ZTAyZWZmMWUsIDB4MDJiOWIyMGMsCi0JMHgwZDMzZjNlMiwgMHgyZDg1ZGZmYiwgMHhhOTlmMzZjZCwgMHhkY2ZjZjg4MCwgMHg5NDMwZTk0NCwgMHg2Mzk5YWNmMywKLQkweGYyMmYyZTIxLCAweDk0ZTQxNzlhLCAweDc0YTM4NjFlLCAweGY1MTJhZDhmLCAweDJlNjA1MmI4LCAweGRjYTE3MjAxLAotCTB4ZTcxZmMxMTAsIDB4NDYyODcyMTUsIDB4OTg5NzFmNTYsIDB4MmVmZWZiMjIsIDB4N2RhYzk2NmIsIDB4YjJlZGNlNDIsCi0JMHgyNmZiZGVmNiwgMHhkZmZlMjFiNiwgMHg3YzNjMDFmYiwgMHg0NjVlMjBmZCwgMHg4ZWZlYzFmNywgMHg3ZGVjNGJkOSwKLQkweGM3M2RiY2RkLCAweGQ2OWRiZWVmLCAweDBkM2NiZDI3LCAweGMxZGI2M2RmLCAweDJhZWQyN2RiLCAweGQ2MjNiZmM3LAotCTB4YTNhOWUxNDMsIDB4ZTFmOWQ0OGEsIDB4MTRmMzNmOGYsIDB4MTNiMGE2MGMsIDB4NzhiZGY3NmEsIDB4YmU2N2RlMTgsCi0JMHgxZDcwOWRhZSwgMHhmYmQ0MjBmYiwgMHhkMmJmYTJhMSwgMHhmMmZjYTAzZSwgMHgwNzJmYzBjNywgMHgwY2Q1M2ViZiwKLQkweDIzMWRhMWYxLCAweDc5MDY0OWJlLCAweGVmYzE5OTk0LCAweDIxYmI3MTg3LCAweDllZjRkZDE0LCAweDYxZmFjOTBmLAotCTB4MjUyOGZkZTAsIDB4MjhmMjEwZGQsIDB4NGU1NjQzYTcsIDB4MDFlZWM2M2EsIDB4ZmIzZjJjZGQsIDB4YjQzM2YwMTMsCi0JMHhmMDI0NWRjMywgMHhmZDJhMDhlZiwgMHhiNjc1ODM2NSwgMHhmZjA0MWYwZiwgMHhiODZhMDdjZSwgMHgzZjdiZDEwOSwKLQkweDViZmMzMTZiLCAweGIyNzdhN2VkLCAweDQ5NjNmMzcwLCAweDBiYmJmOGIxLCAweGVlN2FlMGY0LCAweGMxOTU5YjNmLAotCTB4NzZhNGFjZTIsIDB4NDU0OTYzZmYsIDB4ZTJiMjc2ZmUsIDB4YjI3YmVjOGMsIDB4YWIyMzVhNTIsIDB4ZDc5NGNlYWYsCi0JMHgwOWFlOTdkNywgMHgwZjRhMWZlYywgMHgzY2RjZmM1YiwgMHhlZTBmMzM5ZCwgMHhmZjQxNDlmMSwgMHg3YWVmNjI2ZSwKLQkweGQ4NWYzOTYyLCAweGVjZjkwNGI3LCAweGYxNGJmZGI5LCAweGJmMmFiOWVmLCAweDgxZTNhN2FmLCAweDA4NzE2ZmRmLAotCTB4ZDNmODJhZjksIDB4Y2Y3YjM1MGMsIDB4NGNiZWQ5NTcsIDB4YjViYjY3Y2MsIDB4NjE0YTdkZjMsIDB4NmY1Yzc5OGYsCi0JMHg2OWZiYjkzMCwgMHg5MzI3NTM5NCwgMHg3ZjRjMTllYiwgMHhjOWUxYjRiZCwgMHg3MTBkN2MxZiwgMHg5ZWNjYmRhNCwKLQkweDcyNjE2NGJhLCAweDE3Zjc3ZjIzLCAweGNjN2JmODJhLCAweDdkMTljMzgzLCAweDJhYmQ5YmU1LCAweDUzZDMyN2I4LAotCTB4YmM4MmUxMWQsIDB4MjZhNTg2ZWQsIDB4ZGMxYmI3Y2MsIDB4YTE4OWY3Y2YsIDB4ZmMxZjkwODAsIDB4MWE3ZmQwZjQsCi0JMHgwZWZlN2QyOCwgMHhjODA1YmYyZSwgMHhiOWQwMWVlMSwgMHg4Y2YxZmQ2OCwgMHg0OTg3Mjg0MywgMHhiODZmY2IyZSwKLQkweDljN2NmYjU1LCAweGJmYTg2NGVhLCAweDMxN2UzMTk0LCAweGNiOGZlODA3LCAweDU1Y2Y0MjJiLCAweDU3YTQ2M2MzLAotCTB4MDIxZjAxN2UsIDB4YzBmZDQwYjgsIDB4ZjBmYmRmNGYsIDB4MWUzM2YwNjksIDB4ZmMwMmZjNjUsIDB4MGY1MTMzMDcsCi0JMHg3ZWU1MWJiMCwgMHgxZWY2MzY4NSwgMHgwYmJkOTU5OCwgMHg0MjQyZjIyMiwgMHg4NzY1OGZmMSwgMHg1NzYwNzU1YSwKLQkweGYxZmU2YWRlLCAweGM0ZjlmNWYyLCAweDhmMTQwOWIxLCAweDNlNTk3YjBkLCAweGZlOGVlNWY3LCAweDZmODAyNDUxLAotCTB4ZjBkN2UxMjgsIDB4YjdjZjBhOWMsIDB4YTg3Nzc3YTgsIDB4NTA3OWMzYzcsIDB4NzAxNjRiZGUsIDB4YjIwMWU2MjYsCi0JMHgxODFlNzhmNywgMHgyMGM5YjdmZCwgMHhhN2Q4MWY5NywgMHg1MGY0NDE2MSwgMHgxMTU1YWNmMywgMHg4MzNjYzA2YiwKLQkweDhlNTFlOWY3LCAweDk4ZjdmNTg5LCAweGY3ZDkxZjM5LCAweDVjZDJlOGQ3LCAweDIyMGFhZTU2LCAweGEwMWVhOTRmLAotCTB4YTAzZDA1OGQsIDB4ZjViYjQyNTIsIDB4NjUwOTdkZTMsIDB4MjU4ZmZmMDAsIDB4ZTIxNmIxZTIsIDB4M2EyZjk4MTAsCi0JMHhiZjA3MGQ4NSwgMHg4OTlkZjExYiwgMHhlMDRkMWNjNCwgMHg2ZWMyN2FmYiwgMHg1YTZmYjY5ZCwgMHgzZjU3ZDA3ZiwKLQkweDYzZmYzZGQ5LCAweDY5ZjIxOThhLCAweDg3OWUxNjQ2LCAweDFmOGVmMGU5LCAweDE2YzdlZjg1LCAweDQzZjgxYTQ3LAotCTB4ZWI3OGYxMjYsIDB4MTc1ZjE2YzcsIDB4OGYxZmQ1ZTgsIDB4NmZjMDkwOGUsIDB4MGQ1ZmM3NDksIDB4N2Q3ZDhiZTMsCi0JMHgzNWE0NzVhYywgMHhlZDE3ZmEwNiwgMHhmYmQzYmU4MywgMHg0MmJkYTI1ZCwgMHgwMjc0YjJiZCwgMHgxMTY3OGJjNCwKLQkweDVlZmNkNzdjLCAweGM5YTNkMzM1LCAweDBiM2NlYzNiLCAweDc1MjBkYWJlLCAweGM3M2JlMzQ2LCAweDMyYmI5MzE5LAotCTB4YTY4NGZmNjgsIDB4YWIzZGExMWYsIDB4NTFiYTI3Y2MsIDB4NmVkN2JhM2QsIDB4NzdiMTI2ZGUsIDB4NGU4YzZjMzIsCi0JMHhmYzVkNDdlYiwgMHg3ZjNhNzRjOSwgMHg0MWVmYjUzZCwgMHhkZjZiYWJhZiwgMHgyOGE2ZWY4ZiwgMHg3YjVlZjllZCwKLQkweGJjMmZlOTRhLCAweDdmZTgzZjhlLCAweGNhNmZiMTAwLCAweDAwODAwMDViLCAweDAwMDAwMDAwLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4NThhZGZmMDAsIDB4ZTU1NDcwMGIsIDB4ZGVmNzNlMTUsIDB4NjZjZDkyN2QsIDB4NDIxYjIyZjMsCi0JMHgyNjBkZGRlMiwgMHg5YjcwOTYwMSwgMHhmNTFlNDM1NywgMHg4Y2E0MTA5YSwgMHg2Mzg4Mzc2ZCwgMHhmYWRlYTU2YSwKLQkweDU5MDkyMDQwLCAweGQ2YTI3NTA5LCAweDAwNzFhNmUxLCAweDNiNjM0ZWE5LCAweGIzMzA4OGEzLCAweDIzMzFlMWQyLAotCTB4MzA1NGQzNTMsIDB4MzJkNzQwYTMsIDB4NWRhOTYyNTUsIDB4NjZkNDJkOGIsIDB4ODhkNDZiOTgsIDB4ZjFhNmM5MzUsCi0JMHhhMTk4NjY1NSwgMHg1ZWY3ZmNlNywgMHhkNjA4NmY3NiwgMHhlNmNjZGQzYSwgMHhlNzNlZmZlYywgMHg5Y2ZmOGYzYiwKLQkweGFhMzZjMDFmLCAweDVjZmIwMTk1LCAweDhiZGZmMDE2LCAweGVkMmJmMWY2LCAweDhjYTJjMDIwLCAweDA2YWM0M2IwLAotCTB4MjdjOGYyZDgsIDB4ZmIwZGJkN2YsIDB4OTkwZGVkZDQsIDB4NDdmMThiNjMsIDB4NDc1ZjhlM2UsIDB4NWM4MDU0YjMsCi0JMHgwMDBlYTU4MCwgMHhkNGMwMTU0ZiwgMHhiZWU4YjRmZSwgMHhmMDk3ZjUwMCwgMHhkOWIwMDM1MCwgMHg4MDQ1M2Y4NywKLQkweDljOTQ0ZThmLCAweDhmZjFjNmVkLCAweDg3MDNiMGRlLCAweDlmMWIyNzVkLCAweGRiMTA3YzllLCAweGY5YTdmNjViLAotCTB4MDU5ZTM0OWMsIDB4ZWY4ZDNlNmEsIDB4MzhhYThkMmIsIDB4NmE3ZTNlZTEsIDB4MjcwNzNiYTQsIDB4ZmI0YmE2MGUsCi0JMHhiZGMzZmM3MSwgMHhjNjFmY2ZhNSwgMHhhZmU3ODZmNiwgMHhhZWNkODg5NywgMHhkOTg4M2M1ZCwgMHgwZDg4NWZkOCwKLQkweDNlNmRmZmVhLCAweGZkN2UwNzViLCAweGZkMmU3NWRjLCAweDkyZTBlMTVjLCAweGY4ZDAzNzlmLCAweGNlODk2Y2MxLAotCTB4Y2IzOWE1NjksIDB4NzVlYzJlMDAsIDB4ZjAwZTUwY2IsIDB4N2RjYWM0MTksIDB4NzMxZjAwYzUsIDB4MWI4ZjE4ZWEsCi0JMHhjZjg3ZjNiNywgMHhiM2MwM2M3MywgMHhlNDk0YTUwZSwgMHgzN2ZiYjhkZSwgMHg3OTQ3YWI3ZiwgMHhlNzdlMGY5YSwKLQkweGRmYzg2NWU5LCAweDQwYjkzMzg2LCAweDVjZjJjMGZiLCAweDc4N2UwMTg2LCAweDFhNzI4Yjk4LCAweDk3MDhiNWU3LAotCTB4NjAwODVhYmMsIDB4MDY3MTU4ZmEsIDB4YjRmODkyODQsIDB4ZGVmYjcyMWYsIDB4ZTJiODE5NzcsIDB4ZDMyMDczYjcsCi0JMHhjYTFhZWVkMiwgMHg5NjVmYmRmNywgMHg4ZTgzYjc2YywgMHhkOWMzZGMzMSwgMHg3ZDBlZmY2OCwgMHg2NTc5ODYwOCwKLQkweDA5ZDVmMTA5LCAweDA4MDgwMzlhLCAweDk3ODQ3Mjk4LCAweDljMDg1NDAwLCAweDEzZmY4NDBjLCAweDY1ZmY4NjRlLAotCTB4YTQ5MGRjZmEsIDB4ZjhjZjIyMmQsIDB4MTk0MWUwZTgsIDB4NmNmY2UwZjAsIDB4NzAyYmY5NzAsIDB4OTdlM2EyYjksCi0JMHhkZjc0YTI3OCwgMHhhZDY2YzQ0ZSwgMHhjZDUwMDU5OCwgMHhiZDU5MmRmNiwgMHg4YjdmYzkyNCwgMHgxNWU5YjIzMCwKLQkweDk3N2E3ZmRjLCAweGVmNjI3MjUzLCAweDBjZWUxYmI4LCAweGE3M2VhZTg3LCAweGViNjRjYzU1LCAweDA1M2ViOWQ3LAotCTB4N2ZiMjc2NWIsIDB4YWRiZmNmNTMsIDB4NTFjODEwZWQsIDB4MjdkMTVmNWMsIDB4YjQ4ZmRlNTYsIDB4YWZjYmQwZGIsCi0JMHgwYzM1ZTFmYywgMHg4ZjI3ODFmNywgMHhlZTc4NjY5ZSwgMHgzYTFkZTA3OSwgMHhlOTg3OTRmNywgMHhiOGViNGUwZiwKLQkweDIzNjgzODI3LCAweGQ2ZmRjYzM5LCAweDU2YzBhNmI5LCAweGM3M2VmYzQ5LCAweGM3ZmIzNWY4LCAweGFlNWIzOTllLAotCTB4NDc2M2ZlZTAsIDB4ZGEwMzk3MTYsIDB4N2M0MjVkZjMsIDB4NjdjNDU5ZWMsIDB4ZmU3ZTNkMzIsIDB4YTc4M2E0NjEsCi0JMHhmMTU3MzJmZSwgMHg0NzZmY2Q1YywgMHhjZmRiMzRjZiwgMHgxYzczOGY2YywgMHhlNDgzYjc5MywgMHg4MjliZmVjMCwKLQkweDllMjI4ZGUxLCAweDA5OTAzNjAzLCAweDRiOWRkMWJmLCAweDQyMmQ3ZTE4LCAweDlmZjQ4MzI4LCAweGRmY2FjOGY4LAotCTB4ZmRjZDNlNGMsIDB4ZmRjY2ZlNGQsIDB4YTQzZDc5Y2QsIDB4YzI2MWM0MmYsIDB4YzJjZjJmMTEsIDB4YTI0NTM5ZmUsCi0JMHg2ZjA5YWU0NSwgMHg0M2QzM2NiYywgMHgzZmQ2M2VmZCwgMHgxNGVkODU5MSwgMHg5ZmEzNmI3YiwgMHgxNzM2ZGZhOCwKLQkweGJmOTA3M2Q4LCAweGVhNGUzNmI2LCAweDQyYWZkNjAzLCAweDA1MzFhMzE2LCAweDJmZmMzYmM3LCAweGQ4NDFiODFiLAotCTB4YWI3Njc2ODUsIDB4OTM5MDY3NjEsIDB4NWEzZjIzNmQsIDB4ZGY1ZGJhMDMsIDB4OGJjN2ZiNWEsIDB4NzZlMDE3OWMsCi0JMHhmYTAzYjAxOCwgMHhmN2JlMzljYiwgMHhlM2E0MmVjNywgMHgxM2I0YmYwMywgMHhiZTEwZTg3ZSwgMHg0ZTVmYjQzMSwKLQkweGJjYmY4NzdkLCAweDRkYjk2YWY4LCAweGE1OGQ4MDRhLCAweDVmODMxYmM2LCAweDIyY2EwOWI1LCAweGNmODRjZmI4LAotCTB4MDE0YmYyYTMsIDB4MWIzOTExOWUsIDB4ODUwODU3OWIsIDB4YTVjNzBmMzQsIDB4M2E4MWRhMTgsIDB4OTBmYTk0ZTgsCi0JMHg3ODdjNGI5ZiwgMHhlMWRmZTEyZiwgMHgxZjkzOTU4OCwgMHhmMTJlZWI5OCwgMHhlNzFmZWIwYSwgMHg3ZDIzYWY0ZSwKLQkweDFlNTYyZDgzLCAweDY0N2Q0NzRlLCAweDQwY2I4MDNhLCAweDY1YzUyYjlhLCAweDBjZmQ0M2M0LCAweDIzMDE1YzU4LAotCTB4OTUxOGYxZmUsIDB4MWQ4NDljZTgsIDB4OGY5MTA2ZGEsIDB4ZmQzN2VhNDYsIDB4YWFhNGVkMTMsIDB4N2EwYzhmOTksCi0JMHhmYzkzZjM5MiwgMHgwMTk1ZGI1YiwgMHhiMmFhY2ZkZCwgMHgyY2MwYzhmOSwgMHhjMzI3ZjFmZSwgMHg0MDYwZmIwZiwKLQkweGQ2MTdmZGQwLCAweDdhZTcxMGI4LCAweDU5MDA2NzAzLCAweDY0ZGY3ZjIwLCAweDNjYjkzN2I0LCAweDU0ZTMwMTMxLAotCTB4MDU1MmViYzIsIDB4MThmZWJmZTQsIDB4ZjVkYjAxZWEsIDB4NDRhYmQ4YjYsIDB4MDdhMWViZDEsIDB4MzEwNzU5ZjUsCi0JMHg2YjIxYmY3ZCwgMHg4ZjcwZTZmYywgMHhmYzFjNzAzYiwgMHhhOTFjNTk4YiwgMHg4ZGJiZDQzMywgMHhkMWU5MDA4YiwKLQkweGVlOGNmZDA1LCAweGQxMDJlMmU0LCAweGEzMTRjMTZmLCAweDQ0NmNmODMyLCAweDk3NDY3NjExLCAweDE1ZDE5ODQzLAotCTB4MjU3NDYxMTAsIDB4MGFiYTMzZjQsIDB4MTliZDE4MDYsIDB4YTJjMjhjZTIsIDB4ZjhiMDFmNTgsIDB4NThkZjEzZmYsCi0JMHhkZjZmOTIxYSwgMHg1YTQ2NWZjNywgMHg2NjQ0MWI3NSwgMHhjMzI5ODdmMywgMHgwNzhkYWZjZSwgMHhhZjlhZjU0NiwKLQkweDUwMGFjNzhmLCAweDZiYWY4Y2ZjLCAweDhjYmYzMmUxLCAweDhiODliOWQ5LCAweGQ3MTFlYzkzLCAweDI3ZWEyMWI5LAotCTB4ZGIxYTA4ZGEsIDB4NWMzMjA2ZTcsIDB4MTA0NmU3ZGMsIDB4MDY2ZWQ0NmQsIDB4YmU1YmI1OTksIDB4OWFiNTFlMjIsCi0JMHhiMzQyNTM2MiwgMHhiYjNjZDJlMCwgMHg3MDM0NWM5ZCwgMHhhYjJjMjVlOSwgMHgxODVhZmE5MywgMHhkNGRiNTkxMCwKLQkweDE0OWYyMDFiLCAweDI3ZDZhZmZmLCAweDU1OWYxMTE0LCAweDg4OWY0ZDY5LCAweDAzYjIyMjE4LCAweGM2MWI2MWJkLAotCTB4YTZjYWFhZDcsIDB4MmY2YzYyZWUsIDB4YjdhOTNjMDgsIDB4ZWQyYTliZWIsIDB4ZmJkMzllMTIsIDB4OGM3MmYwOGIsCi0JMHhlZTBjMmVhYiwgMHgyODQ1YzQ2ZSwgMHhhOTE2YTAxNiwgMHgwMzk2ZjZlMiwgMHhiODUzOTVmYSwgMHg1NGZmMjI1ZiwKLQkweDEwZjEwMGRjLCAweDQwYjllMzczLCAweGMyNTZkMGZlLCAweDNlMmRiZmVlLCAweDNhZWYzZjVkLCAweGRhMDBmNDk0LAotCTB4ZTYyYmE3NzcsIDB4MmRlNzExMTUsIDB4NzQ3OTJkYmQsIDB4ZTg3NzZlMGYsIDB4MmI5YmJlZmIsIDB4NjUwNTdlMmUsCi0JMHhhZTM5ZTI3MiwgMHgzODNjYTQ4YSwgMHhhZGIxYmFhZSwgMHg0Zjc3NjI3MSwgMHg1N2VlNzkyMCwgMHg1MDIwYWYzOCwKLQkweDlhZjNlZDdkLCAweGZjNDg4YWZjLCAweDQ4MDRhYjgwLCAweDNkYzYwNWNmLCAweDJmNTgzODNkLCAweGVmOWQzYzQ5LAotCTB4ZTk2YmU3NjMsIDB4MzgzZGRkMjUsIDB4YmMzZmE0ZjQsIDB4YTQ0YmY2OTAsIDB4OTBiNWY2ZWIsIDB4ZDI0ZGNmZjAsCi0JMHg5NGI5MDEzNSwgMHgyN2Y2NjdjNiwgMHgxYTM4YmY3YSwgMHgxZjEzN2RjMywgMHhhZWI4YzFlMCwgMHhkMzk0YTAzMSwKLQkweDU2YmM1ZGI5LCAweGY4N2E4OTU0LCAweDA3NzlkYTY5LCAweDRmYjRkZmU5LCAweDA3NzI5NTBlLCAweDQzMjdkYmNhLAotCTB4YmVlY2MxZDQsIDB4YWYyNTc3YzEsIDB4NzdkYTRlMmEsIDB4MGZkYzVlZTIsIDB4ODcwYWE4NzEsIDB4NWMzOGVkOWIsCi0JMHg0OTM5MTZkMywgMHg2ZmU5NTZiNCwgMHhhNzNhMTFjNiwgMHgxMmU5Zjg5ZSwgMHhiZTkxZDZhNiwgMHgzOGNmMzMyNywKLQkweDM3ZmU2MDNlLCAweDIzMzNiNzVmLCAweDMxM2YxZDJlLCAweGRlODE3MGZjLCAweDdmOGE0MzBjLCAweGY4Yjg5ZDc1LAotCTB4MWUzMDNmZjksIDB4MjQ3YjRkNzYsIDB4ZWM3ZjVlOWEsIDB4MjZmMDZlOTksIDB4M2FiMzBhZmQsIDB4ZmQzMGRjNGIsCi0JMHgxOWM4NmVhYywgMHg4NWJjZDgxMywgMHhjNmZjZDJmNywgMHgxNGM1MjMzMywgMHhkMTE4NmY2ZiwgMHg0MmRjMzBmYSwKLQkweDAyZDlmOGUyLCAweDdiOGRkZWRkLCAweGZiODJmZTQxLCAweDhiNDJmNzNhLCAweGI4Yzc0YTgwLCAweDEwODhmOWJmLAotCTB4OWI1Y2EyNzUsIDB4ZGEzMDRmMjksIDB4NzQzZmI2MmEsIDB4ZDA2NDlkYTEsIDB4OGY5M2Q5N2MsIDB4ZTQzN2FkNzIsCi0JMHg4M2ZlMWNlYSwgMHg2ZDNhODMwMywgMHgxYmJjOTJhMywgMHhlZmQ3ZmUwYywgMHhjYTY2ZmJiOSwgMHhlZDQ0MzZmYiwKLQkweGRmOGVmOGM5LCAweDM2ZTg5MWY2LCAweDkwZmRiYmUyLCAweDIxMjI5ZmI1LCAweGFjNjVkZmM5LCAweGFiYmNhMGVmLAotCTB4ZWIzN2YyOTgsIDB4ZmM3ODJlYmMsIDB4YmE5NzE0NWYsIDB4OWJmZGFjODYsIDB4NGMzOWU5MDIsIDB4MDYzZGM2MGYsCi0JMHg5Zjc4YmU0NiwgMHhhM2U0ODczMSwgMHg3MWYzNzliYywgMHhiMjg5ZDQ0NywgMHgyZGRiZGU2ZCwgMHhlODVkYThmOSwKLQkweGRkMWM1ODkxLCAweDViYjMyOGYzLCAweGM5ZWMzZTczLCAweGZhNjIzNjY2LCAweGMwMWQ4NmU3LCAweGM3MTM2MGYyLAotCTB4MzI5YzA3YTUsIDB4ODFlOTYzZTksIDB4NjJkZjk2M2MsIDB4MGFmMmNlNWUsIDB4Y2VjYzEzOGMsIDB4MWMyNjIyOTcsCi0JMHg5OTBiZGRkYSwgMHhjZjFlNDE1MywgMHg5OTc4ZTE3OSwgMHhjYmYzNzk0NCwgMHg2Zjc4NjU1YiwgMHgzMzNmOTI0MSwKLQkweDBlMTE2ZjZmLCAweDNlZDAzYjM3LCAweDFmMDFlZmE2LCAweDUwMzU3ZGU1LCAweGFlMDM3NGY2LCAweDg3NjUzZWFiLAotCTB4ODM0ZjhlMjgsIDB4MGJlOThmYWUsIDB4ZWJiZmNiM2MsIDB4NjRmZDJiODYsIDB4MjMxY2MyMDcsIDB4NGYzMWY4NmUsCi0JMHgyZGMzYzE0ZiwgMHgyNTMxMDFjZSwgMHg3NWYxMzVjZiwgMHgyYjRiN2ExYSwgMHhhNzhjYjJjYiwgMHhlYjJjZjM0YiwKLQkweGQ2ODM2YTMzLCAweDBmMWNhYWY1LCAweGQ2OWM1MGQ1LCAweDhiY2E2N2Q3LCAweGMzNDFmMzJjLCAweDMwNmYxYzNmLAotCTB4NWRlZWRiZTAsIDB4YjdlYzhhNzEsIDB4NjZmZWIzZDEsIDB4NjU3YjI5YzIsIDB4NTNiZTY1ODUsIDB4ZmYxMDI2MzgsCi0JMHgyY2RhOWYwZCwgMHg4NDI2ZmM3YSwgMHhjZTUxZDM5YiwgMHgwZjMxYjdkYSwgMHhjNmVhNzNjMSwgMHg0ZDZlZTNhZCwKLQkweDdlZTc1YTA1LCAweGEwMWYyNTNiLCAweDdiNmI0NGZkLCAweGY5ODdiNGMwLCAweDFlZDUzZjMwLCAweGFlN2I3ODkyLAotCTB4NTBmNjQ5ZTAsIDB4NzgyYzBiMDMsIDB4MGFlYmM0Y2YsIDB4ZjMwNzFlZmUsIDB4NmVlMWJhODcsIDB4ZDg2ZTVmYzYsCi0JMHg5YjVlN2I4YSwgMHhjNTdjZjcxNSwgMHg3YWMxNzM4YSwgMHgxMTg1Y2UyYiwgMHhmNWQ3Y2UyYiwgMHhhODBkNzE1OCwKLQkweDc3OGFkYzU2LCAweDVmZTY1OWQ0LCAweDY5NjRkZmRmLCAweDY1NWFlZTk3LCAweGJhMzBiZjk5LCAweDdjNWVkMmRhLAotCTB4ZmNjYjc2ZTgsIDB4NTk3NzAzMjUsIDB4NmQwZTk3YzYsIDB4ZjY5YjhjYjQsIDB4ZGZmZjUzMzUsIDB4NjE5ZTZkODgsCi0JMHg1ZmYwM2M1ZiwgMHg1M2NhZmZhMiwgMHg5OWNlNTkwZiwgMHg4ODgwNzdhOSwgMHg2YmQ2Zjg0MCwgMHg1NzAzYmIwMCwKLQkweGVkZmFiZGViLCAweDU3OGFmMDdlLCAweDBmMDI5ZGViLCAweGY1MzM5ZGU1LCAweGE3ZmE0NTNmLCAweGZmZTg2ZjM4LAotCTB4YzYyOWQyMzMsIDB4MTdiZDM3YjksIDB4ZmQzNzI3MWUsIDB4Y2YxZTlhNmUsIDB4Yjg4Njg0NWEsIDB4YjA2ZDdhNGMsCi0JMHhjZmViN2FiMywgMHgzYTczNzY2MiwgMHgxZWUzMDNjNSwgMHgxOGY3MWIwYiwgMHhlY2MxZGZhYywgMHhkYmQzZWMyMSwKLQkweDQ5M2E1YzUyLCAweDVjZTJhYzcxLCAweGFhZjg5OWI4LCAweDUxMjcyMmQyLCAweGQwYjlhODRjLCAweGYzNDE5Y2RmLAotCTB4Mzg3ZDEwNjUsIDB4ZmFmMDMzOWYsIDB4MzYwNzJkNWUsIDB4N2I2MTNmOGIsIDB4NWJjZjEyNmUsIDB4MDMyMTVlZDQsCi0JMHg4YTVmZDcyNywgMHg0YjMwYjFmNiwgMHhiZjllMGVjNSwgMHg2YWU3MThkYSwgMHg1NWEyN2JmNSwgMHgwNTJkODM3NiwKLQkweGYzNWFjNjk3LCAweGZlMzEwOGZlLCAweDMxNmZmYzRjLCAweGU3Y2MwOGVhLCAweDNjZjk0MWMxLCAweDA1ZjY4YWVmLAotCTB4YTQ1ZmNiNjYsIDB4YWZjYjAyNWQsIDB4YmQ2Zjk2MTQsIDB4YTI3NjI5Y2UsIDB4MjJmMTVjNmIsIDB4OWU0YWViOGEsCi0JMHhiODg4MmYzMiwgMHhjODkyZjI0ZCwgMHhlYjRlMzNmMiwgMHgyNDEyYTEyMywgMHg2YTU2NWQxOCwgMHg3NTRjYWI2NiwKLQkweDMwYTM5NjE4LCAweGQxOWYyOTBmLCAweGZiMTg3YWFhLCAweDJmNDZhZDNlLCAweDEyNTNlOTdiLCAweDE4ODM4YTU0LAotCTB4ZGYzOTQ3MTcsIDB4ZmI1YzRhYjYsIDB4NDVjN2RkNjYsIDB4Y2EyZDZmNzQsIDB4ZmY1MDE3OTAsIDB4M2M4ZWY3OTUsCi0JMHhhYmUzMGI5NCwgMHg0MTJhOGJjNiwgMHhiMWM0M2VhMCwgMHhkYTYzZTFmYSwgMHhkZjhhNTk2NCwgMHg3YmIzYjBlZSwKLQkweDZhN2E4YzBhLCAweDU5OTM4MWFkLCAweDljNjFkZDRmLCAweGFjNWI4YTNiLCAweDc2YmRmOGM3LCAweDQ3ODY3NWU4LAotCTB4ZDU5YzdmYmIsIDB4OTI2ZjY4OWYsIDB4N2JiZmY3MGYsIDB4ZWE4MmE3YmUsIDB4MjUyYjkwNDksIDB4ZWIzNzBlYmQsCi0JMHg3ZmUxMDJhYiwgMHg3YWNkNDdiOSwgMHhkYmYzNWFmNCwgMHg3NTJjMTdmZCwgMHhlZmQ2MWMyZSwgMHhhZmVmNmI5NywKLQkweGNhNGQ3YjMyLCAweGZhM2ZlZmFkLCAweDc3YmIxYTU4LCAweDZjMmIxZjQ2LCAweDdmZGM5YTIyLCAweDM2YmZlZDkyLAotCTB4M2VjNTk2ZjIsIDB4YmJmOWVjZWUsIDB4YTQ3ZWVlYzUsIDB4ZDcxOTZiYmUsIDB4MDVlY2E2NzIsIDB4MzQ3NmJmMjgsCi0JMHgxMDBmYzU3ZiwgMHhjZTIzODliZiwgMHg1MTMzYWExYSwgMHhhNjBmZGY1ZiwgMHgxM2RhYzFkNCwgMHhiY2U5Y2JhNSwKLQkweDNmZTcyZWZmLCAweDViMjNiZTE5LCAweDkwNWI2MGUzLCAweGQ2ZmNmMzk0LCAweDZkYWRhYzczLCAweDI5OWQxOGQ1LAotCTB4OWE5NzU5YTcsIDB4Mjg3YmYxZDQsIDB4YTY3ZWExYjMsIDB4NmNkMjM5YjgsIDB4NDEyMzJjZWYsIDB4YjkxZjZmM2QsCi0JMHhkZDEzNmU3MSwgMHgwZTg1MjNiZiwgMHhmNDRiNGU5YiwgMHg0YmFkN2U3NiwgMHg0OTU4YWY2ZiwgMHhlY2Y3NjEzNCwKLQkweDg0NzRiYWEwLCAweDdiNDM5OTAzLCAweGY5Zjc5ZDE4LCAweDUxNmUwNzAxLCAweDQwM2NhNzk3LCAweGE2OWEyNjcyLAotCTB4Mjk3N2E3M2UsIDB4Mjg4YWQxYzgsIDB4MmE2NjRjOWUsIDB4ODczZjUyMGYsIDB4MTY3ZTVmYzksIDB4ZjI4NGIzZTMsCi0JMHhmYWJjMGJmZiwgMHg3MDE4YzA2YiwgMHhhZDZkZGY2MCwgMHg3YTRmZDc5NCwgMHg2NDdmYmI3NSwgMHgyYWFkMmRkZiwKLQkweDE5OTk1MmUyLCAweDQwZWI0YWRlLCAweDkxN2JkOGQ2LCAweDhlZjlhZmM5LCAweGQ1MmY3NTQyLCAweDRlYjcwOTIxLAotCTB4MjYzOTA3YjcsIDB4NzQxOThlZmYsIDB4MjhkNGQ1MzcsIDB4MWQwNjRiZGYsIDB4Mzg0YWZiZTUsIDB4NGVkZDg3ZjIsCi0JMHg3ZTYwMWZkOCwgMHgzMTVlNTMyMCwgMHhmYmE5Y2M3ZCwgMHg4YmMwMGQ4MSwgMHg3MTFkZWZlMywgMHgzY2Y2NDczZSwKLQkweGJjYTY3OTE3LCAweDk2MzNiMzA1LCAweGNlZmM1N2ZmLCAweDYxMzhhMzE5LCAweDE0ZTRiZmJlLCAweGUxMGIzZjhiLAotCTB4ZWM5NzljZmEsIDB4NGM5ZmNlYWMsIDB4YmZjODZiMTcsIDB4YjJhZmJkM2IsIDB4YTBhNmViYmMsIDB4NDBlNGMwMzIsCi0JMHg4YzdlMjg0OSwgMHhkYmVlNzUxZSwgMHgyYTRkZmNjOSwgMHg3ZmZlOWQ1YSwgMHgxMDNiNjc3ZCwgMHhhNjhjNzU2NCwKLQkweDNiYzY5MWU3LCAweDhiNzcyOTliLCAweDdiOTMzOGYwLCAweDQ4MTM5NzdhLCAweGUzN2I4OWNlLCAweGJiZDg4NTRmLAotCTB4N2M0NDU0OTIsIDB4ZGYzYWYyOGUsIDB4N2NhNmJmMjYsIDB4N2RjOTFjYTYsIDB4Y2Q2ZWRjYmUsIDB4N2JlNGEyZjcsCi0JMHhmMjEyZjZkNiwgMHg3ZjUxYzQwMywgMHgzYmI4MTNjNywgMHhmZWIyY2Y1NywgMHg5YWFiZTkwYywgMHhhMDlkYTdiZCwKLQkweGEyMzFiNjM4LCAweGY1MjVhN2JmLCAweDNiYzBmZmRlLCAweDBmNjFiN2E0LCAweDVhZDc2MzhiLCAweGNlY2U1MzNmLAotCTB4MGYwY2MzMTMsIDB4MjQ4N2YzOTQsIDB4YTc5YzhhNWYsIDB4N2VlZjI5ODMsIDB4M2VjZmM3MTMsIDB4YmViZjEyMTUsCi0JMHgzOGMyODk3YywgMHgzYzRjZGY3YiwgMHhjNDQ4YjE3NywgMHg1ZWM3OWRmNSwgMHhkMjc2NDczZiwgMHgzM2ZmZDQ2OSwKLQkweDczOWRhOWRmLCAweDlhY2M3ZWIwLCAweDZmMWE3ZGVkLCAweGM5N2M5NDg1LCAweDZmOWZhZTY5LCAweDA0YzdhZWIzLAotCTB4ODg2Y2ZjOTksIDB4MGFmMjkxZmMsIDB4NWUyOTI3YmMsIDB4OGJlNGY3OWIsIDB4NjljMTlkNDYsIDB4NGQ3OGIxYWYsCi0JMHg2ZWZkOTFlNywgMHg1Zjc2NTRlMywgMHg3ZDA1ZWY5OSwgMHg1NDQ3ZGUxYywgMHgyY2RkMmI5NywgMHg3OWQ3MGI4ZSwKLQkweDE3Y2ZiMjI0LCAweDc0ZTMwNmQxLCAweDM0ZTRkOGZmLCAweGEzM2MyZWY2LCAweDU0ZTc5ZDhlLCAweGQ5M2IyNTNlLAotCTB4MWU1MzU2ZjIsIDB4NmY4M2I5ZDUsIDB4MjdlYTMyYWMsIDB4MzZhOTFlZmQsIDB4Y2U5YWIyZWMsIDB4MTk0M2ZlMjcsCi0JMHgzMmE5M2VlYywgMHg0NTcxYWJmOCwgMHgwY2JhZGU1OCwgMHgxNzdmNDE1NCwgMHgxZTE5ZGUzMCwgMHg3NzUyY2Q3YiwKLQkweGEyYmYwN2ZkLCAweDE3ZjA4NDZiLCAweDAwMDAxN2YwCisJMHg0MjRlNGNjZSwgMHg0YzIyZjIxMiwgMHgyMWEwODgxMiwgMHg4YTgwYWYwYywgMHgyMjAxMjc3ZiwgMHgyODIwMzlmNSwKKwkweDQyMDFkNDU4LCAweGQ0ODM3OTA4LCAweGNkZWRhZjRiLCAweDExMTAyNDg0LCAweDA1NDdmNDM1LCAweDUwODg3NjhiLAorCTB4MzQwZGEyZDEsIDB4MGVjMTYwZDIsIDB4NmQ3YjE0MjAsIDB4YzBmYWYwNmYsIDB4NDgwYmY1ZWEsIDB4YjEyZjMxNDEsCisJMHhjYmM1N2UyMCwgMHhlN2RhZDZiZiwgMHgyNjRjZTY2NCwgMHhhZmRiZDg4MCwgMHhiNGZkZmZmZiwgMHhlY2U3ZDliOCwKKwkweGViZGFmN2IzLCAweDdiNWFkN2I1LCAweDc1OTIzZGVkLCAweGM3YmY5MzAyLCAweDAzZmM0NWQ4LCAweDhjNGQ0ZmU1LAorCTB4ZjJjMTA5YjEsIDB4ODBmNjY2NjcsIDB4YzliMTg3MjcsIDB4NDczYWZlYmQsIDB4NmQ1NTYzM2MsIDB4OWRhMjNiMTksCisJMHg5OWVjMjU4YywgMHg1MDI4MTQyMSwgMHgyYzIzZDVmZSwgMHhiZmRmODI1MCwgMHhmMDk3YzM2NSwgMHg0MjE5YjZmZiwKKwkweGQwOTc3YzNlLCAweGMzZTYxMWU5LCAweDAyZDVlNGZiLCAweDkzM2E4NzZiLCAweGVhMGMzMTljLCAweDRiMTliOThjLAorCTB4MTI2YjJjNjQsIDB4NGIyMjNmYTMsIDB4ZTBmZjgyOGQsIDB4OGYzOTI1NzMsIDB4MjdmYzM0YjEsIDB4NjE0Njc1NzQsCisJMHhjNjc4YzBhZSwgMHg1YzUzMWUzMiwgMHgzOGE5ZDBkNCwgMHg4NDNmNzgxNSwgMHhiY2QyYzY3ZiwgMHgwNzMxYjcyNSwKKwkweGJjMDNjZjYzLCAweGJjZjA3MWM5LCAweDYxZGUzYTVhLCAweGMyMmVlZmU1LCAweDNhZjNhMWRmLCAweGFlNThjZDZhLAorCTB4MzI3NzNlMzAsIDB4NDE2NTg5YTcsIDB4ZjNlMzNlYmYsIDB4M2Q2MzQ2YWMsIDB4NGZlM2Q5OWIsIDB4ZWMzZmMzNDYsCisJMHg4YzUxN2VjYywgMHhiMTEzOGYzMCwgMHhjYjNjMDE4YywgMHg2MzJmMGU1NCwgMHg1NDY3YjJiZCwgMHg2YTliMWYxMCwKKwkweDJjMzJhMjU4LCAweDg1MmYwZjU4LCAweDU2MzM4NzY1LCAweGVkOTc1ZTAzLCAweGY4MTY1YzE2LCAweDJmNmMzOWZlLAorCTB4YmVkN2U2MzEsIDB4MTVlYWQ2NmIsIDB4YTM2MjU5M2UsIDB4YjUwNDA0YTEsIDB4NjdlZmY0ZTQsIDB4MTFiZmNiMTEsCisJMHgyYjMwZmVmMSwgMHhlYTRhYjJhMCwgMHhhZjgwNTU5NSwgMHhmYjc2NWFhYSwgMHg2N2VkZmU5NSwgMHg1NGU4ODkzMywKKwkweDViZjZiOTI5LCAweDVhZGVmYzYxLCAweGYxODY2YWU2LCAweDAyZDU5OTk3LCAweDkxZmIyZmFjLCAweDdhODNlNWQzLAorCTB4MjE0NzYzNjYsIDB4MzZkMGZhODMsIDB4YzExOTg5ODEsIDB4OWUwMGFmZWYsIDB4MDA3ZjkxZGIsIDB4YTUyYjJhMWUsCisJMHg3NDA2NDJkZSwgMHhiMDJiZGRlYywgMHg4NzFjMGNlNiwgMHg3NzZjYmJmNywgMHgwYzY1ZjMwNiwgMHg2NjU4ZTcwYywKKwkweDMyZTczODI2LCAweDc0ODkzYTQxLCAweGQyMDczMDcxLCAweGYzMjRiY2MxLCAweGNlYTg0Mjg5LCAweGIwZjNkYzU0LAorCTB4OWRlMjlmN2YsIDB4ZTdmNGVkODcsIDB4MzhlNjBiNDksIDB4ZjI1NzAwYmQsIDB4NTdhMDY2NTAsIDB4OWQzYWI1YjEsCisJMHhlYTU2MzI2NSwgMHhiZTQ0Mjk2OSwgMHg4ZGVjYjUzOCwgMHg5ZTAyNTg1NSwgMHhmN2MwMjQxMywgMHgwOGE3OGI3YywKKwkweDU3OThhOWZiLCAweGE3ODBjZDlkLCAweDhkMTg1OWU2LCAweGZmMmRiNDNmLCAweDBjZjgwOTMzLCAweGM0YzVmM2JhLAorCTB4NzYzMTNmMjEsIDB4ZjA0Zjg0M2MsIDB4NWExMWYxY2YsIDB4ZGU5ODFjNWQsIDB4YjA4YjJiOTcsIDB4MDVmMTA5MWYsCisJMHgxZjAxMTc3MiwgMHgyNmEwNDIzZiwgMHg1NDRkMjhlMCwgMHgyOWZjNTczYSwgMHhkMGEwZDg2YiwgMHhjMzU5NWJmYSwKKwkweGU1MDA2OWM2LCAweDNmMGNiYzExLCAweDA4NDNhYzYxLCAweDFjYmQ0YmU1LCAweGIwZmYzYmJhLCAweDNjMzAzYjk0LAorCTB4MDRmM2QzZmYsIDB4YWI3ZTEyNzQsIDB4MWZjOGI3MDAsIDB4YmZkOTc2MTUsIDB4Y2E2MWY4MTIsIDB4ZjdjMGU2YWIsCisJMHgzNjJhM2Y4MCwgMHhkNDBiN2UwYiwgMHhlOGRiYWY0ZCwgMHg1ZTI2Zjc3ZCwgMHgzNzY1ZDgwZiwgMHgxNmQ3NGZmMiwKKwkweGJkZjAwYmE4LCAweDFiZjFmZGE1LCAweDE1NWViZjkxLCAweDNiNzYzMzU5LCAweGZhODRjYTIyLCAweDNiMDZhNGU1LAorCTB4YzA3NTBmMWIsIDB4NTc4ZGIxNDcsIDB4YmJlZjM2MmIsIDB4NjkyZmJmMWYsIDB4ZjQxYjMwYjMsIDB4ZjE3YmIxNTcsCisJMHg3ZDQyMzcxZCwgMHhjMzMzNjFmMSwgMHg2YjViMTUyNiwgMHgyZmE4MTRlNSwgMHg1ODJkMGJmMSwgMHhmMGUwMjllZiwKKwkweGZlODk3NmY5LCAweGM3YmVkMGFkLCAweDFiMzg5ZWQxLCAweGM2YmE3M2U4LCAweDYzMzI5Y2NhLCAweGM0ZjZmNjc1LAorCTB4YTU2N2MwNTksIDB4Zjg4NTFkZmUsIDB4YzE3NmU5NWQsIDB4ZjI5ZjY4ODUsIDB4Yzk0M2Q2ZWEsIDB4YjkxN2FmMzgsCisJMHg4YjZkOTc3YywgMHg3ZjFkNGU2NiwgMHhhYjY0ZjdmMCwgMHhiYzFlZjgxOCwgMHg2NGYzMDY1ZiwgMHhkNjYyZWZkMCwKKwkweGIwN2E4ODU0LCAweGQ5M2FlYjYyLCAweGViZTIwZjY5LCAweGUzNGE4ZDc0LCAweDhiZGZjOWY0LCAweDU3N2MwZTMwLAorCTB4YzJlMDhhZjksIDB4OTg5YTU2MjksIDB4N2JiMGU1MTcsIDB4ZjNjZTZkYjcsIDB4NTZhZmNlMGEsIDB4YmNlM2I2Y2UsCisJMHg2ZWQ4Y2I1NiwgMHgyZWZlN2ZiMSwgMHhmZWE1Y2Q1NCwgMHhiYzIxNzJjZCwgMHg1OWI0ZGQyZiwgMHhkYjkxMGUyZSwKKwkweDhjODM2ZGIyLCAweDFhYzg2ZDcwLCAweGQ3MjA4ZGVjLCAweGQ3ODA3ODQxLCAweDUyZjU4M2IyLCAweDBmYTgwM2Q0LAorCTB4MjMzY2JmMjUsIDB4ODUyYWNmODQsIDB4YjJjYmUyNTgsIDB4MWE3MzIyNmQsIDB4ZGRkMzg4ZjgsIDB4MTNmYzJlZjcsCisJMHg2YmRiZTVmMCwgMHg3NGVhYmMyNywgMHgxYWE3ZDNlYiwgMHgxYWE4Y2VkZCwgMHhiY2RlYTUxZCwgMHhmOGY4MTExOSwKKwkweGMwMDNhNDcxLCAweDgyNzg4NGQzLCAweDlmMDZhZDcyLCAweDk3Y2IzMjYzLCAweDliODc3ZmEwLCAweDNjYmIwMmE5LAorCTB4ZDk5OTM2NWYsIDB4ZjU2MzA2N2MsIDB4ZDJkZDA3YjAsIDB4ZDk5NzUwZjUsIDB4ZjU4MmU2NTIsIDB4N2JiMWZhNTAsCisJMHgwNDkzZDQyYSwgMHg5ZjM4NjdlZiwgMHhjMjViYzE3YSwgMHgyNDk2YWJkNywgMHg5NTc5ZTAwZiwgMHhmY2UwZTZjMCwKKwkweDMwZDAyMThmLCAweGMwYzk1NWFmLCAweGE2Zjc4MDlmLCAweDhiY2Y3OTY5LCAweDNjN2IwNjgyLCAweGIxN2Y4YmQ2LAorCTB4MzlmYTgzMjYsIDB4YTE5OGZkNDMsIDB4ZjdjYmFjOWYsIDB4MzI0ZTE2YTMsIDB4OTYxNmEzZjQsIDB4OGRmY2ZkZTgsCisJMHg1OTVkYjFmYSwgMHgzNzg1NGQzZiwgMHgyYzI5ZTExOCwgMHgwNDkxZmJkNSwgMHhiZjZmNTc2OCwgMHgzN2E5NzliMiwKKwkweDczYzIzNjRmLCAweDEzZjUzOTczLCAweGJjYzVkNTNiLCAweDFhZTdhZTBhLCAweGI3NzZiMDNmLCAweGVkOTVlZjA4LAorCTB4YjBkNzYzYjEsIDB4NTAyOGJlNTAsIDB4MGVkYjgwMDUsIDB4MTdjYTEyNTIsIDB4MGNhMjkzMzEsIDB4OGVlYjE4N2MsCisJMHgyN2ExZDQzMywgMHg0MTc1ZTRmNSwgMHg5NTg4MTNmZCwgMHg0NTM5N2M2OSwgMHg5ZjkwYmQyNiwgMHg0M2ZhYTU2MiwKKwkweDg1ZTkwYTI5LCAweDVlZjA2ZTg3LCAweDhlMjBlYjgzLCAweDJlYTE5MmNkLCAweDExYWI0NzdiLCAweDE0ZTAxYWY4LAorCTB4NjA5NjEyNTgsIDB4N2ZmNTI0MTcsIDB4ZjFjY2RhYmYsIDB4MjE3YTkwNTAsIDB4NWY3YzE4ZmIsIDB4OGVjZGVhNjUsCisJMHhhNjM1ZmE4NSwgMHg2ZjExNmJmYywgMHhlNWViODEyZSwgMHg2MzU1OTEyOCwgMHgyMzBiMjhiYiwgMHgyMzNhYjRmZCwKKwkweDA4NWY3OWVmLCAweDAwODcxYTllLCAweGJmNjA4NWZkLCAweDEyNmY2NjhkLCAweGRhZjhkN2YyLCAweGMwMTI3YzY3LAorCTB4Y2MwODZhYjcsIDB4MTJiYTA1MjcsIDB4NjBmODA5OWUsIDB4YTQzZDVhM2QsIDB4NjlmMTA5MzgsIDB4NDNiZTQxOTEsCisJMHhmYzYxOTdjNywgMHgwNmZmMWExYywgMHhjNzFiYTNjNCwgMHhiZTNmZTg0ZiwgMHg2MTkyNzMyNSwgMHg4OTdhNmI3YywKKwkweDBjYWI3YzYxLCAweDRmYmYwM2UzLCAweGM2ZDY2ZGFkLCAweGMwZGRmYzA3LCAweDk5YTEzNGQ4LCAweDk3YTRiN2M2LAorCTB4NjVhYmY4ZDAsIDB4M2YxODYyNTYsIDB4NWJmYzZmYWEsIDB4ODE5ZWZlNzAsIDB4ODM3OTlmZTYsIDB4YTVlOWZlNzEsCisJMHg3Y2NiZjljNiwgMHg1ZjZhYjNmZSwgMHhhMjhmYzZkMiwgMHg1ZTE2Y2ZmOSwgMHgyZjRmZjNlMiwgMHhmMGI3ZjNlNSwKKwkweDc3YzZmYjdlLCAweDVlZmZlMWY0LCAweDgwNzdiZjljLCAweDkzNTkyZGYxLCAweDVhMWZmMzhkLCAweDg1YmY5YzZlLAorCTB4YmI1NDVmOGYsIDB4YTE1ZjFiNTMsIDB4M2IwOTE3ZjEsIDB4OTY4N2ZjZjksIDB4YzViMmY4ZDMsIDB4OTIzZTQyZWIsCisJMHhmZGFhYTM1MywgMHg4MWE0NGY2OCwgMHgxZDI2MGM0MCwgMHgwNDcyYTZlNSwgMHgxZmEwMDUxOCwgMHgwNDk5MGE4NiwKKwkweDljNTE0M2M3LCAweDAxNDVjZWVmLCAweDdkNDEyOWJmLCAweDUxMjBmY2M3LCAweDM1MmFjZmEwLCAweDllZGIyZjllLAorCTB4YTU5ZWEzMmYsIDB4Mzc2ODg5ZjcsIDB4NmQ0NTNmZjEsIDB4NmMzN2FkMjIsIDB4MWMzZmM1YmQsIDB4MTM2ZWVkZTAsCisJMHg1YTJmNTg3ZCwgMHhhNDVmOTM3ZiwgMHhlNWRiOGVmNSwgMHhmMDA1YzY2MCwgMHgxYzllNWZmOSwgMHhhZjNhMWNkNSwKKwkweDkzNTE3MmYwLCAweDQxODc2NGY5LCAweGJlM2MzODhlLCAweDFhYTIzNjAyLCAweDI2NDc2YmUwLCAweDlmYWMxMDk4LAorCTB4YzYwYTNkMDQsIDB4N2EwZTNiMmYsIDB4NjY1M2NiMTQsIDB4MDA5YzhmNmUsIDB4NTBlNGNiM2QsIDB4ZjZlNWE5YjksCisJMHg5M2JkOGY4OCwgMHg1YmJhZjMwMywgMHhjNGE0ZmY4MywgMHhiOTcyN2RmMSwgMHg5ZmZjNDdlMCwgMHg0NjU0Yjc1YiwKKwkweDA5YThiNGZkLCAweDc5MTBlOThjLCAweGQ0ZThkMmFmLCAweDZmZTJkYmJiLCAweDRlOWYwODE2LCAweDI0M2RjZmM0LAorCTB4OTdmZDhjOGEsIDB4ZGUyZmQ3NjYsIDB4ZGRmMGM4MzAsIDB4NDg2ZmU2M2MsIDB4ZDcwYmY2ODIsIDB4YzJhMjFmY2UsCisJMHhjNzMwN2ZmYywgMHg1M2VkMTYzMiwgMHgxMzU0ODQ5MCwgMHgzNTRiMzFjOSwgMHhhNzMxNmY4MSwgMHgxNTM5OWQ3NSwKKwkweDMxY2NmNzJhLCAweGI5ZmFlYzFiLCAweDA3ZmQ2MzVlLCAweGI3N2FjNjI1LCAweGExMzY2ZmQ5LCAweDYwNDRiMWJkLAorCTB4ZmJkZmExOWIsIDB4ZjVlZjhkYWEsIDB4NzEwOTM2NzEsIDB4NzhkYWFlOWMsIDB4Nzg3MjI3NzcsIDB4MmM3MmMzZWYsCisJMHhhZTg5NTYzZSwgMHg1YmZjYWJmNywgMHg4N2FhOWUxZCwgMHhlYjQwMmNjZCwgMHg0MzAyNDc2NSwgMHhjODEyZmEzYSwKKwkweDdjYWFmMzVlLCAweGRlZjBlMWRlLCAweDNkYmFiNjZmLCAweDNmZmRjZjAwLCAweGUxOWYwOTEyLCAweDFlYmM3N2YwLAorCTB4MWQ4MTM2ZWQsIDB4NGJlMWIxZDcsIDB4ZTFiN2RhMzMsIDB4ZmY4NzA5ZjMsIDB4ZjNlMTE1ODEsIDB4ZjdkNDY1NTEsCisJMHhjZmUxN2RmMywgMHhmMzg0OWYzOSwgMHhmZTViNTU1MywgMHhlZDIxMTNhMCwgMHgzZmJlNWEyYSwgMHg3ZjA4NDRlOCwKKwkweDYxOWI2ZDk1LCAweGNmZjEyZmE4LCAweGJjNWZiNDM1LCAweGZkZTFiZTYxLCAweDg2MjVhNmEyLCAweDk3MWIwYmY3LAorCTB4N2RmM2VhMWEsIDB4N2ZiNDMyM2YsIDB4ZTFhZDQ1NjAsIDB4OGZkNTdkZmQsIDB4YTBmZmRlMTgsIDB4M2VhMTlkNjQsCisJMHhkMGQxYmJkNywgMHg5YjM5OWVmZSwgMHhhZjRkZWYwZCwgMHhlNTEzYmM4ZiwgMHg5MTVkZWVhOCwgMHg1NjcxYmFlMSwKKwkweGRhMzhmOTM5LCAweGM5MTU2NzgzLCAweGI0ZjhmNDg1LCAweGUwZTQ4OTI2LCAweGNhOTM4ZDc0LCAweDU2NzFiNmVlLAorCTB4YzU4M2Q3MmYsIDB4NWU5YzRjMGMsIDB4NzFhZjljZTEsIDB4NDY2NWVhMzIsIDB4YzJhZmYzZmEsIDB4ZWEwZjlmMDUsCisJMHg4NDljMTM3ZiwgMHhjYzgzNzEzZiwgMHgwMmMyYzAwMiwgMHhlM2UzZWI4YiwgMHg3ZGU0MzE1ZSwgMHg2ZmRlNjVjNywKKwkweGQ3MWY0MTAwLCAweDExZDhiZGZmLCAweGYzNTU3OWY5LCAweDA0NmFhMWZjLCAweGI3MjgyMWZmLCAweGI5ZDcxNTJjLAorCTB4MGY3ZDZkMWUsIDB4MzAyZTVmN2YsIDB4YzY3M2U4NGYsIDB4ZDc5YzkyNTYsIDB4Yjk0Y2ViNjksIDB4Zjk0MWY1Y2MsCisJMHhmNDAyZTRjZSwgMHg0MGU1Y2JiZiwgMHhjNmE1ZjU3NiwgMHhhMmE0MDE2YiwgMHgzY2ViNDQ5ZSwgMHhhNDAxZjkwMSwKKwkweDU5MmZjMGMwLCAweGRjZWVmOTA2LCAweDk1NWMxMjI3LCAweGFmNDAxM2E4LCAweGMxOWU2M2FlLCAweDgxMzNkNDI2LAorCTB4OGQ3N2U5MDMsIDB4NDlkYzM4NDIsIDB4YTA0YjZmNTQsIDB4NjZiM2JkNzUsIDB4MTIxM2EwZmEsIDB4ZTU0M2M3ZDIsCisJMHhhODczMzVhNywgMHhhNWUzNTkzYywgMHgwOTRkNDRmMiwgMHhhYTZiYzc5NSwgMHg1OWE4ZWNhOSwgMHgzNWM3ZTU0MSwKKwkweGFhM2YyYTNlLCAweGNmZjJhNDY5LCAweDFlNTQ0ZDM1LCAweGU1NDBkOWFkLCAweDJhN2UzNTdiLCAweDU0ZGM2YmJiLAorCTB4YmEyYmY5ZjYsIDB4ZWNkNzhkZmUsIDB4ODBhZmNkNTUsIDB4NjdlYTg3OTUsIDB4NDNkNGI5YjQsIDB4NzM5Mjc2ZGIsCisJMHhmOWNhMTI1NywgMHgzNjVjZTUxOSwgMHg4ZTY3ZTNkYSwgMHgzMTk5NjM4MiwgMHhmOWMyYmUzMCwgMHhiYTNhNjA2ZCwKKwkweGY2Mjk1ZWM5LCAweGY1YzdmZDAzLCAweGUyOGI2ZjdmLCAweGQ4OTliMjc0LCAweGQ5YTY3MDc0LCAweGUxN2ZjMzIzLAorCTB4NzU0MzkwNWEsIDB4MTYwNjU5MDksIDB4N2IwY2Q3MjQsIDB4ZWQ2MTdlODQsIDB4OGU1ZDdhNDMsIDB4OWJkZGNjNGUsCisJMHg3MWU4MTMzYiwgMHhlNWJmOTlmMiwgMHhkYTc1YmY2MSwgMHg0MDc1MTdmYSwgMHgwNTk4NzVhNCwgMHhiZDIxNzc5ZSwKKwkweGViNDZmMDQyLCAweDlhYWJlZjVhLCAweGZlMGNiZmJlLCAweGQ3ZjBmYWJhLCAweGZiZmU4ZTllLCAweGZlYTU0MTQxLAorCTB4OTg1YWI0Y2YsIDB4MTNkYzc4ODQsIDB4NjdlNjA3ZWQsIDB4ZWYzZjBlNjcsIDB4OTY1Yzc5NDAsIDB4NDQ0ZjUyNjQsCisJMHg1NjVlODNjMCwgMHg0YWE4NjRiNCwgMHg2NmQzZmFlOCwgMHgxMjY5OWZhYywgMHg3YWQwYjdhNiwgMHgzNTk5OGNlYywKKwkweDU1NGFmOTBhLCAweGZhNDMwYzRmLCAweGY3YTk1MTI3LCAweDU2NDkyY2IzLCAweDllYmM4MDRmLCAweGMzMTU5NmRlLAorCTB4NWYzZjZmZDcsIDB4MTJjN2I3MDcsIDB4NDg1ZjgyYmYsIDB4ZjBkZWZmZWQsIDB4MGU4ZmQ0MGMsIDB4ZWNhZDYzMGYsCisJMHgwM2VhMmIxMywgMHhlZGY1OTc3OCwgMHhmZDI2NzJmZCwgMHg2YzU3ZTI5NSwgMHhkYTFjZjk4ZiwgMHg3YmY4MTYwYiwKKwkweDEyMDdlMjkxLCAweGFiN2VmNWQ1LCAweDY1OWY0NDVhLCAweDZlZGYzZTM0LCAweDczYmUwZjE4LCAweGM1ZjczZWVhLAorCTB4YWRmMTRiY2MsIDB4YzQ4NjRlYzQsIDB4ZjE2OWQ2MTEsIDB4MzY2ZGIyYzYsIDB4YzRhZWI4ZDUsIDB4NmQ1NWVhMWEsCisJMHg5ZDYxYWFjOSwgMHhmYzgwN2ZjMSwgMHg0MjQxNmFiMywgMHhiOGQ3MjliZSwgMHgxYTUyNDdhOCwgMHhkY2FmODAwNSwKKwkweGFiN2VhNGU0LCAweGMyYWVkZTA0LCAweGUxN2IyMWRhLCAweGE3MmI1NzUxLCAweDlkZjA0MGRiLCAweDk0ZWMzOWFlLAorCTB4YWM0YmRlNDAsIDB4N2MwMjAxZTAsIDB4YTcyMzJkMjUsIDB4NmFlYjllYTIsIDB4N2I0NDRiYWQsIDB4ZjMzYzRjYjAsCisJMHhmN2MyMjc5MCwgMHg4ZDAyNGQzYiwgMHhlZTZmYzRiNywgMHgxYWEzYWUzNSwgMHg1N2U4MzA3ZiwgMHgxNjdlNGU3ZiwKKwkweGQ0ODY0ZTUzLCAweGNlZGM0ZDNiLCAweDgwZjdlZjBlLCAweGYwZTVlZmQ2LCAweDQ4ZmRiOTUzLCAweGZlY2U4ZGUxLAorCTB4ZmI2Y2FhNzgsIDB4MWM5MmY2NDIsIDB4ODJmMmZmYzEsIDB4NTdmMWQyNzgsIDB4NDAxY2YyNmUsIDB4ZWRiYTVhN2QsCisJMHg5ZmEzZDkxOCwgMHgwZmQ5N2Q5YSwgMHhmNTNmNDI1ZiwgMHg0NDkyOWY5ZiwgMHg1ZTdkNTI3MSwgMHg2MTI5MzAzZSwKKwkweDdjNWEwNTljLCAweDllZjdmODE3LCAweGZkM2Q2MTBmLCAweDZjY2RkZmVjLCAweDJlYzdjMDBkLCAweDZmNzgyYjQwLAorCTB4MTMzMzVmZDYsIDB4YTE3ZDQxMzMsIDB4NWFkMDViNTYsIDB4Y2ZkZDcxNDYsIDB4MmE4ZWRjNGMsIDB4ZDEwNzFlNjIsCisJMHhhMWU1MzU4MSwgMHg0Y2M1ZDkxZCwgMHg1ZDRmMTFkMywgMHhiOGM3NmRlYywgMHgzMjljM2ExMCwgMHgxNjY3YTRjOSwKKwkweDE4ZWQxYTM2LCAweGY1MGQ3ZmIwLCAweGY1OGMxYmM1LCAweDExMzMzNjYyLCAweDdhZjE0OWY1LCAweDM0MGJmMzMzLAorCTB4ZjdmYmMzM2YsIDB4N2ZlMTJhNGQsIDB4ODU1ZWFiMzEsIDB4ZjlhNGFhZWIsIDB4MjY1NDBiMjMsIDB4MTU3YzAyYTUsCisJMHg2ZjM2NzliZiwgMHg0YzVmYzYzZSwgMHhlM2QxMGZkYywgMHgzOGUyNGIyMywgMHg3ZWYxYTVmYywgMHgzZmVmMGRkOSwKKwkweGY3NzcxZDY5LCAweDhiMDY0ODhkLCAweDg5YzYxNTdmLCAweDZkNzMwYzU4LCAweGZiZjFmZDY1LCAweDg3MGZlMTZkLAorCTB4ZmJhZjVmNTcsIDB4MzgzNDY5YzUsIDB4ZGI4MjZkYzQsIDB4MmY3ZjgxMWYsIDB4ZWJhNjdjNjgsIDB4ZDU0NDViZWIsCisJMHg4ZGRjMTdlMCwgMHgyMWJmMTBmNSwgMHhiMmUyZDQ0NiwgMHhlZTkxMTMyMiwgMHg2N2Q1YWE1ZCwgMHgxNGY3YTE4YSwKKwkweGI0ZWRmN2I3LCAweGRlODBlYWI4LCAweDA2NzkzNzNmLCAweDRlYzgxMzg5LCAweGVkMjE2NWM4LCAweGQyZjI2ZTdlLAorCTB4YWRlMTRlZjMsIDB4OTk1YmI0NjIsIDB4M2I0NWM4MTQsIDB4ZTIxOGQ2MTQsIDB4MDdlMzU5NTMsIDB4OGI5MWNhMzEsCisJMHg4MzNiNjZmMSwgMHg2ZmU4MTQ3NSwgMHg5ZmEwZjg0MSwgMHhkYjkyZjY1NSwgMHhiYmM2MmU1OCwgMHhiZmExZGU0MSwKKwkweDg3ODUxY2M3LCAweDk0ZGJhODA1LCAweDU5ZmQ4NjU2LCAweDdjZjE4YzkyLCAweGFmNThkMzliLCAweDFkMjA3ZmMyLAorCTB4M2Y4YTMwNDYsIDB4YzI5MDhmNDUsIDB4YTg2MDE4ZjAsIDB4ZTMyZWVkMGYsIDB4ODRlODUxZjMsIDB4MjAxZmRkOTEsCisJMHg4YjEwNzYzZSwgMHgwMjU1Njk0MywgMHgyNmNmOGMyMiwgMHhmZTdkOWQ0OSwgMHg3YmZhMjY1NiwgMHgyZjhhN2UxYywKKwkweDJhZTVmYjQwLCAweGM1YTk1ZjZmLCAweDUwN2Y5N2NmLCAweDEyZWUzODMwLCAweDNjZWFhOGZhLCAweDIxNDE5MDY4LAorCTB4N2ZiZTNkNzUsIDB4NzFmZTYyNWUsIDB4M2E2ZjQxZGYsIDB4ZDEwZDU1NjEsIDB4ZGU0ZDczOWIsIDB4ZDQwZjQ4NjksCisJMHgwMDlmMDg5MywgMHg3NjBkNzhlMywgMHgyYTFhOWE2MCwgMHhmOGMyMGJlNywgMHg4OGUxYWFlMywgMHg1ZGZkMDY2NywKKwkweDJkZGVmMjZlLCAweGUzODdmNDI2LCAweGVhNGZmYmFhLCAweDQ4ODJmZmQ3LCAweGZlZWFiY2YzLCAweGJmZWJmNTg3LAorCTB4MTVmZjUyMzIsIDB4OTc3OTc5YmYsIDB4ZjRhOWY4MGYsIDB4ODAzYTRmNTcsIDB4NTI2N2Q5OTksIDB4ZTgwYmEyNTMsCisJMHhjMWI1YmU1ZSwgMHhhOWY5NzI4MSwgMHg1ZDIwNzNlNCwgMHhkMzhiZjMzZiwgMHgxNmU3YzkyMywgMHhiNzRmOTc1MSwKKwkweGZmMTFlNDIyLCAweDdlOWQxZjEwLCAweGQwM2JkMWU5LCAweGQ1YjczYWFlLCAweDYwN2M1MmFjLCAweDAxNjAyNTliLAorCTB4NWQ2Y2FjYTYsIDB4OWI2M2U1YzIsIDB4YWZhZjE4ZTUsIDB4YjNmOTAyZmUsIDB4MmZhOGNkYWEsIDB4MzI3ODVmNGEsCisJMHg0MGNkZTMxMSwgMHgwZTdmY2Q0OSwgMHhiOTUwN2Y5MCwgMHg2ODg1MmZlNSwgMHg1ZWIxNTU3NywgMHhkZmUxN2JkMiwKKwkweGUzZTdmOGUxLCAweDJmOTgxZWM4LCAweGFmN2ZmNGM3LCAweDY5NTVmM2VmLCAweDdkNmFhOTc4LCAweDg0OTEwYmY0LAorCTB4Y2RmYzgzYTUsIDB4OWEyNWY2ZjAsIDB4NjhhNGZmYmQsIDB4ZGYzOGE3OGYsIDB4ZjkxMTM2NDQsIDB4ZjMwN2M3NGMsCisJMHhlZWJmN2I3MywgMHg4ZjczYTdjNSwgMHg1YjlkM2MwMSwgMHhlNDIxZGRmZSwgMHhkNzI3ZjI4NCwgMHgxNjVhNjc3YiwKKwkweGU3MzVmY2ZlLCAweDBkZDRmMmMwLCAweGFlZDQzMTdhLCAweDY3NjdkN2Q2LCAweGVjYTdlNjliLCAweDM5Yjk2NWUxLAorCTB4YjAzZjQwZTAsIDB4ZTVkOWIzN2MsIDB4ZmNiZWJhNDMsIDB4YzE5ZTJmZmMsIDB4MTYwN2NjYjgsIDB4YmZlODcwZDcsCisJMHhlZjgzZTVlYywgMHhiMmY1MDBkZCwgMHhkYmY4ZTYxZCwgMHgyMTE0MzRmOCwgMHgyYTk3NDgzMSwgMHg2YzYyYmJmOCwKKwkweGJmYTUwZTkwLCAweDQ3M2IyODNlLCAweDhlM2ZlN2YxLCAweDZjYTNkMjBiLCAweDhkOTkzZWM3LCAweDI5OGY4ZmVhLAorCTB4MGVlNGZiMmQsIDB4NWE1ZDAyMjUsIDB4M2ZhMjE1OGUsIDB4NTdlMmY3NTEsIDB4Y2ZhZmVhMzIsIDB4ZTBkODE3NWUsCisJMHhkY2Y4MDg4YywgMHg2MmVjOTA3YywgMHg1MWQxMTNjNCwgMHhkZDFmNTNhMywgMHgwMTU3ZGFjMiwgMHhlYWJmNTA1ZCwKKwkweGZmN2YwYTc0LCAweGM3ZmU5YTJmLCAweGM0Mzk5Y2ZlLCAweDg2YmNhZmNmLCAweGI2N2YyOGZiLCAweDI1ZmU3MGI4LAorCTB4YzBlODNjYWYsIDB4YWE5MjljNzksIDB4ZGIzZjVmMzksIDB4NzE4NmU4OTAsIDB4NDRiZWNjNGIsIDB4YmNmZTRhOTUsCisJMHgxMjFmYjllNCwgMHhmMjNlMmRiZiwgMHg3ZjhhNDRjMywgMHg4OWIyNzczMCwgMHgzMjVmMDU2YywgMHhhNmQxNmZjZSwKKwkweDYyYmYzNGQ5LCAweDJiYmUyNWU2LCAweGUwZjQ1Njc5LCAweDg5NTllMGZlLCAweDQxMTFkZjRkLCAweGFlMjQ1MjJlLAorCTB4NWIzNTRmOGYsIDB4YTc2NTRkNzAsIDB4N2RjMGUxNzAsIDB4ZmY0NWI3ODUsIDB4MmRmZjhhNTYsIDB4MGZjYWY4YTUsCisJMHhiNjIwZmRmNSwgMHhhZDY3ZWE4YywgMHg4ODVmNGU5YywgMHhhYzFhYmVmYSwgMHhiYWZjYTEzYywgMHhkMjNiNzU2NSwKKwkweGY3MTBmNGU3LCAweDU3MWI4YzYwLCAweGUxYTdjOTMxLCAweGZkMDhiODQzLCAweDBkYTY0NzhhLCAweDRlNjFmNGU2LAorCTB4MGVmYjRmMjksIDB4N2MxNGZkZjQsIDB4Y2RkYmVkOGUsIDB4ZTFhZTViNmUsIDB4MjMzMTc2M2IsIDB4NmQ3MmZlMzgsCisJMHgwYTNiODA3YywgMHg4OTUzZDVlZCwgMHg5ODQ1ZmY2MCwgMHhhZmE0YTE1ZiwgMHg4NTU3NjAzNywgMHg3Yzg4NTdmMCwKKwkweGYyZGY3OTczLCAweDVkNmY5NzA4LCAweGE2MzNmZGRlLCAweGJlYmZmYmUzLCAweGJmMDdlNWMzLCAweGUwMDU3YjQzLAorCTB4ZjdhNjBjMGEsIDB4YTQwOTY2ZmIsIDB4MTAyYzJjMGYsIDB4OThiN2FlNDksIDB4YmUzNmI5MzUsIDB4ZTAwNGY5ZDcsCisJMHhlZGRkNzA5NiwgMHgzZmVjMTdlMywgMHg3NjRmZjA4ZSwgMHhmODdhZjE2YywgMHg1NjVmNDQyZSwgMHhmZThlNzhlMSwKKwkweGJiNzJlOWZkLCAweDA0ZmY5MzU4LCAweDZjZmYyOGM5LCAweDgxZmI5NzEzLCAweDhmMWYwOWZkLCAweGJmZmQ5ODRiLAorCTB4MTVlNTA2NzgsIDB4YWZmNzEzZTQsIDB4N2IzNjVmY2IsIDB4NmY5ZmRlNzAsIDB4YmRkZWYwM2YsIDB4Yjc5ZmE3MjAsCisJMHhkNDZhNzJlOCwgMHg1YTcyZTE5ZiwgMHg4YjAyNzNiMiwgMHg2MzlmYTcyNCwgMHgzOTI0NDIxYSwgMHhlNTExZTc4NSwKKwkweDNlMjBlOTU0LCAweDRmZTk0N2ZlLCAweDg1Mzc3ZjFkLCAweDg3ZDc0ZmUxLCAweDVjMzFlMTAzLCAweDc0NTlmZTFmLAorCTB4ZjA4N2Q0NDYsIDB4ZDc5NjFkZTcsIDB4YmU3NGZmOWYsIDB4ZjRhZGY5ZDMsIDB4Mjk0MzE1OTcsIDB4YTVmM2E2M2UsCisJMHg3YzdkNzdjZSwgMHhiZjVkZjNhOSwgMHg3ZjAxYTM3OCwgMHgxODJkZWZlMSwgMHgzY2I4MDE4MywgMHg0NzE0Y2RiYiwKKwkweGY3YzNkZjI4LCAweDQzYmJlMTdmLCAweDRmMDllM2E5LCAweDU4YzY1YTZlLCAweGY4ZDRhMWQzLCAweGFjM2ZiYWQwLAorCTB4ZGVkNjEyZGUsIDB4ODRmNzU2MWQsIDB4ZDU4NmY3YjUsIDB4Y2JlZDBkYWIsIDB4M2NjODBlZGIsIDB4Njg2MDI1YWYsCisJMHg4Njc4YWUyNywgMHgxMjI4MzI3ZCwgMHg1ZmI5ZmFiZiwgMHhlYzg1ZmFkYSwgMHg3YTUwYmU0MywgMHg0YWYzN2JlOSwKKwkweDNjNjNiM2U2LCAweGYxNDhhZjdjLCAweGYxYzAxZTkxLCAweDY3YTcxODJhLCAweGYzMWY4NjdiLCAweDNjNmMxYTI0LAorCTB4ZjZhM2Q0ZWUsIDB4NmM1ZWQwM2EsIDB4ZGVmNWU1ODgsIDB4ZWExNTc5MDQsIDB4YWY3OWZkM2QsIDB4N2FmNWM3OGQsCisJMHhkODhlYmQzYywgMHhkOGVkZmIxMCwgMHg3NmY0OTExZSwgMHg4ZjRkOWY4NywgMHg4YWMyNjdlNCwgMHhjMWQ0NzI0MiwKKwkweGUzY2Y3YTA2LCAweDI1NDRkM2ZkLCAweDVmYzYwNTdkLCAweDg2MTc0NDlhLCAweGVmNmE4YTc0LCAweDQxOWU2MDcxLAorCTB4M2JhYzllY2YsIDB4NDVmM2MwZTcsIDB4OGRiNDhhNmYsIDB4N2I3NjgzZDgsIDB4MmRjNzkyMGMsIDB4NzdmODg3MjUsCisJMHg1M2RmMzI5ZiwgMHhiZjdlMzE5MywgMHg0NTc5ZmI4NywgMHgxMWVjYzM2YiwgMHhhOWY4OTZiNiwgMHhhMzJlNTk1OCwKKwkweGVjYmYwNTNlLCAweDgyZmY3MWI4LCAweGQ2YTk0NWNiLCAweGUzMjZjOTVmLCAweGRjN2JmZDdiLCAweGJkZmI0NWMxLAorCTB4YmRmMThiNzQsIDB4MzQwNzhiNTcsIDB4ODYzMjcyZWIsIDB4NzFmY2QxOGQsIDB4ZjRkMjhmMWUsIDB4ZTczMTM0ZjIsCisJMHg4ZjQwMzljZSwgMHhjMzIyYzM5ZSwgMHg3YjMzZmJmZCwgMHg5OWM3YTI0NCwgMHg5ZWJmN2NlZCwgMHgyM2Q3ZjZlMiwKKwkweDNlOTJmNzdmLCAweDg5ZDRmMWQ0LCAweGFjMGYyNGYyLCAweGZkNWYzYWFmLCAweDkxODdiY2FmLCAweDk4N2Q3NjZmLAorCTB4M2IyODMzZmIsIDB4ZmQ5MDdkNzcsIDB4ZTZmZmFjNWIsIDB4NTkwZmY0ZmQsIDB4NWU1M2Y2ZmYsIDB4NDkzZWQxYjcsCisJMHhlMjc2ZWJjZiwgMHg3ZmJkOWVmNywgMHhlYjE4N2Y0YywgMHg5ZjE0MmRiYiwgMHhhYmZkNzllZSwgMHg5ZTlmZTQ1YywKKwkweGQ0MTI5Njk1LCAweDgwNDMzZDc3LCAweGVjMWY2OGZlLCAweDgzYjcyYWZkLCAweGEyN2FkN2Q2LCAweDk5MjUxZmRiLAorCTB4ZmU3YjQ3ZGIsIDB4OGYxMGIxZjYsIDB4ZWQwYWNjMjUsIDB4NDlhM2Q3ODYsIDB4YjM1ZWFhOWUsIDB4NjdhZDNjNTEsCisJMHhhMTc5NTdlZiwgMHg5ZDc3ZmY3NiwgMHg3ZmI2YTU0ZiwgMHg3MzY3NjNkOSwgMHhiMTdjMjI3NiwgMHhlYWE3ZGY3YywKKwkweDVmM2ZkN2I3LCAweGFkMTdmOThiLCAweGYwODVlNGZiLCAweGJlZWZjYTdlLCAweGRhM2Q0NWM5LCAweDQzZGI5M2IzLAorCTB4ZTc4ZWU2ZGQsIDB4NjhlZTdmNzAsIDB4NjY5NWRjZmQsIDB4MGEzNzczYzAsIDB4OWJhYzBhNTUsIDB4YTAxNGNmMGQsCisJMHhjYmM3ZjRkYywgMHhiYzI3MTQzNywgMHhmY2Y0N2M1MiwgMHhjMTBmODM1ZiwgMHhkZDlkZjVjZCwgMHhkZTcwMTU2ZiwKKwkweDIxZmM3ZjVmLCAweDJkZDc4NWVhLCAweDdjZmE5N2M0LCAweDI1YTk2ZjNmLCAweGYzNzJlNTdiLCAweDljNzk5ODc2LAorCTB4Nzk5ZGZmZTQsIDB4OTkyYjgxMGIsIDB4M2ZmMzI4ZjcsIDB4MmQ3ZmJkMzcsIDB4ZTEyZTg5MzksIDB4Y2Y5ZmQwNzIsCisJMHhmNTQ0M2VmNywgMHg4MjJlZWQ5NywgMHhmZGY5MGFmNywgMHhmOWYyN2ZmNiwgMHhlZmJhNmI3ZiwgMHgyZTNiYmEwNCwKKwkweDdmZjJlZjNmLCAweDRjMGY3OWYyLCAweGQ3ZWYzN2Y3LCAweDdlNjJhZWU4LCAweGJlZWZkNTRiLCAweGFkYmVmODIxLAorCTB4NGZmYjViOWUsIDB4Y2QwM2VmMmUsIDB4ZDdlYmI3NWYsIDB4OTk0ZDVjOTgsIDB4YWY0MzlmMTgsIDB4YzU2OWQ2MDEsCisJMHhjMzExYjMzZSwgMHhjYzQ2NmI4NSwgMHgxNGNlZDE1NCwgMHhmNTJiZjZjMywgMHhmYjk5YWY3MiwgMHg1YmVlMjI0ZCwKKwkweDA4NmY5YzYyLCAweGNkMzFmMzhmLCAweDNkMmRhMjhmLCAweDhhNTI1YTE4LCAweDk0OTU4ZWM5LCAweDk2YmVkYzU1LAorCTB4YzA2ZWVkNWMsIDB4MTc2YjlhY2IsIDB4ODg3NzI4YjgsIDB4YzVlYTNkOGQsIDB4MTc2NGRhN2EsIDB4ZmNjM2FmYzUsCisJMHhiOTgxN2FjOSwgMHhhNTZmYjAwNSwgMHg4YzM5NmY2YiwgMHg4NDc5OGRmZSwgMHhhNWM5NjAyOSwgMHhhYjk2MThmMiwKKwkweDU5YTRiOGI1LCAweDhmN2UwZDk1LCAweGRiYWM2MzkyLCAweDQ1YmFjNjljLCAweDM4Y2FjZmViLCAweGU2MjRkNmZjLAorCTB4MzhiNGY4YzcsIDB4Nzk4YWJmNzIsIDB4ODkxOGUyNmQsIDB4YjFiNzUwMDksIDB4MTdmYTFmMjYsIDB4ZjdlMzI0OTYsCisJMHgxZWMwMzExYiwgMHg1YWJkY2YxMiwgMHhlMWY2ZjYzYywgMHgxYmJiNmM3MSwgMHg0NGQyMzhmMSwgMHgyZTRhNmI3MSwKKwkweGZjYjhiYzI1LCAweDhkOWU3ODZiLCAweDU1ZDc4OGQ1LCAweDA5NGY4OGVkLCAweDdmNmU1ZmZkLCAweDM0Y2NkZjkxLAorCTB4YmFkMjU5N2YsIDB4ZGM5ODQ2OTAsIDB4Y2QzYjYzMzYsIDB4OWQyY2JlNGYsIDB4Y2JkMjVkMzgsIDB4MzMyZDNhMzUsCisJMHg0M2E3NDVkMCwgMHhlODE4ZmEwNCwgMHhkYmY5ZTNhMiwgMHgyZTljMjdkMiwgMHg2ZmRmZjhlMSwgMHgwN2ZlMTI3NiwKKwkweDk3NGU5N2EyLCAweDUwY2RjNTM0LCAweGJmOWFjZDVlLCAweDQ5ZmQxNTMwLCAweDE4NzlhN2FjLCAweGZlNmIzM2VkLAorCTB4NjZlZjE0ODIsIDB4ZWE5M2E0M2UsIDB4ZjQyZjQ4NjIsIDB4YjdlMDAyZGIsIDB4ZjNmYjdlZmQsIDB4N2FlYTI3MTQsCisJMHgwODFkZDhlOSwgMHg0NTZmZDk0ZiwgMHg3NWZjMDU2NiwgMHgwMGIzYjc2ZiwgMHg2NWY5MmY3ZSwgMHg1YjRiNDNmNCwKKwkweDMzZmI4YTQ1LCAweDU3Nzc5MDI5LCAweDZlYWZiZWM4LCAweGNhZmQ5N2Y3LCAweGRkMjlmMzRlLCAweDA2ZGZmMTY5LAorCTB4ZmFlZTk3ZGYsIDB4YjBlYzk3MjQsIDB4ZDdlNGJkOTUsIDB4MzgxMjVlZjgsIDB4YjkxZDdkZGQsIDB4MmE1YmFmYjgsCisJMHg5YzIzZmY3MSwgMHg5ZTY1NjI1ZiwgMHgzYmI5ZDAyNywgMHg2ZGM2MGU3YSwgMHhkZjNjNmQ4NCwgMHgxZWU1YjRiNiwKKwkweDdmOTBjNWIzLCAweDkxZGJkNjY2LCAweDI4YmRmMDVlLCAweGMyMTNiZTUwLCAweGE5ZTc5YTE3LCAweDJmOWQxZGZiLAorCTB4MzZiZTFjMGEsIDB4NzZmMzFmYjMsIDB4ZThlZGI3NGIsIDB4ZTk1M2Y4YzYsIDB4YzMwYjhiNTEsIDB4YmVkYjU1ZDIsCisJMHgyOThkZmRhMCwgMHhkMWQ5N2FiZiwgMHg2OGI2ZmU0MSwgMHhmM2Y0M2Y4OCwgMHhjNDg5YjdmYiwgMHgxNWFkOTUxZiwKKwkweDlkNDA4N2U0LCAweDI1YjJhMmY4LCAweDcyZWJmYzcyLCAweGFmZDk2OWZlLCAweDAxZjJlZWY2LCAweGZkN2VjYjBhLAorCTB4NWJlMzAzODIsIDB4M2FiN2RiYTcsIDB4NzZkZmZmYzgsIDB4M2Y1YmI4ZTksIDB4OTFlNWJmM2YsIDB4YTdmOWZhNGIsCisJMHhiZmUwMWZmMSwgMHhjNTg3MjBkYywgMHgyMjBkYjY0OSwgMHhjYmUwMDQ3ZiwgMHhhZGVmOTQ4YiwgMHhjYmQ5NWJmMywKKwkweDM4YzM5ZjY3LCAweGNmY2VlNzc0LCAweGNiNzg0MzlmLCAweGU3Y2JmYmZmLCAweGFmNjA5ZmQwLCAweDg4YWRkNGRiLAorCTB4YTVkZTk3OTcsIDB4ZGRmZTllMzgsIDB4OWRjNzk5MmMsIDB4ODE3YzVmYmIsIDB4MWZkZDlmZTIsIDB4N2YwMWRmODAsCisJMHg0YTllZjdiYSwgMHg3YmIyN2Y0NywgMHgxODg5ZDdjNywgMHg3N2JlNTkyZiwgMHhlZjljNjBkYSwgMHgwY2E3NTdmMiwKKwkweDg4ZjQxMTY2LCAweGZhZGYyMjVlLCAweDFhZmUyMGFmLCAweGFkMDNhZjRlLCAweGU5ZWZjODA3LCAweGRmYTM3YTAyLAorCTB4NjliNzE3ZDksIDB4MzA3MWUwYTksIDB4ZDlhZjE2YTcsIDB4ZGRjZTM5MWUsIDB4N2FkMzNlMmYsIDB4OGQzNzlkZDcsCisJMHg3MmVjZDJjNywgMHhkMzg4MmJiMiwgMHgxYzc0MDNiYywgMHhkYmY0MDU3ZCwgMHg3ZmU2ODhmZSwgMHgxNzVmYTY0NiwKKwkweGI0ZTgwM2ZlLCAweDY3N2U4YzJjLCAweGZjZmQxNzViLCAweDNhZDc3YzE5LCAweDRkMzhjMDY4LCAweGE2ZjAwYWUwLAorCTB4MjdiZmQxYzcsIDB4YTMyMjdmYmIsIDB4MjVmY2VkN2MsIDB4NmU5MGM1YzUsIDB4YmI0NGMxYjcsIDB4OGU5YjNlNWYsCisJMHg5YTlmMGZmYiwgMHhlN2U3ZWY3YiwgMHhjNjJhMmMzMiwgMHhiZWY3NGExYiwgMHhmZGQzZjI0ZiwgMHg1MzhhMTFlYSwKKwkweGRkOWUyZDMzLCAweGYwZmVmYWNkLCAweDUzOTZhM2Y4LCAweGNlYzViNTU5LCAweGZlMWEzYmUzLCAweDc0ZTNmZTMxLAorCTB4Y2UyZDczZDAsIDB4OGY1OGY5YzMsIDB4ZjcxNDBjZmYsIDB4ZGU3OTk1NjksIDB4YWZkZjFlODgsIDB4MTZhMWYyZDgsCisJMHg0YmQyMDk0ZiwgMHgzYTc0ODQ5OCwgMHgwOGZkYzk3NiwgMHhlMjJhMGYxZCwgMHgxYzY4NjI2MSwgMHhhZDdjNzIzMywKKwkweGQxYWRkZTJmLCAweGYxODdlOTBiLCAweDI1MzhiZWNiLCAweDZlMzBkM2Q0LCAweDY3ZGUxN2U1LCAweGY3NDFmNDExLAorCTB4ZWNmZjFlNjYsIDB4YTNjZTQ3MzYsIDB4YmY5YWUzZDIsIDB4ZmY1Mzk3MGEsIDB4MmYzM2M1OTUsIDB4YzViN2ZmMDcsCisJMHg1Mjc2NWY4ZiwgMHhlYTc4ZTFiZiwgMHg4ZjU5MTBiYywgMHg3NWYzMmRiZiwgMHhjNWY3YWFmZiwgMHhiZTQzMDVjYSwKKwkweDdiYzliOTQxLCAweGEyYjFmOTA0LCAweGNmY2M5OGY1LCAweDUyZjNmMGE1LCAweGI1M2I3Y2ZhLCAweDk3Y2VkMWJjLAorCTB4YWQ3NzhhNDQsIDB4N2E0MDM5NmEsIDB4ZTg1ZjVjM2MsIDB4ZjBlMWE2ZmIsIDB4YWRlMGQwOWUsIDB4NDRlYmUzNmMsCisJMHg1ZmJiNGVlNywgMHhmNzNhN2U4MSwgMHhhZTdlMjZlZiwgMHhlMjhjN2VkYywgMHhmZGI2ODc2ZCwgMHg1OTA4ZWU1YSwKKwkweGYwOWQ3MTU3LCAweGY5ZGZjMDg3LCAweDFlNWNiZWNhLCAweGVjNzllNWI3LCAweGQxOWNlM2UxLCAweDllZDU2MWY0LAorCTB4NmQ1NGUzYzgsIDB4NGUzMGMyZmYsIDB4ZTY0NWFmOTksIDB4YzdhNWZkZWIsIDB4ZWZiOTJkM2IsIDB4Yjc0ZWZlYzEsCisJMHg3OWU2MTk5YiwgMHhhNzExNmU5ZSwgMHhmNTE3M2E0NywgMHhlYTZlYjZhZSwgMHhiZDcwN2VlNywgMHgyM2ZkN2NhNCwKKwkweGY4Y2M1Y2ZjLCAweDFmMjhhM2I3LCAweGU5OTFmOTdlLCAweDYzYzRjNjFmLCAweGZlODc4NDA5LCAweDlmMzk2YjVhLAorCTB4OWRjNGZlYjYsIDB4M2Q2ZWY0OGEsIDB4ZWI4OGFmNzIsIDB4NmZjNDJlZDQsIDB4Zjc5ZjlkODgsIDB4M2IxNGY1NGUsCisJMHg4ZmJjODVlOCwgMHg1ZDkxZTMzYywgMHhjNGNkZjVjMywgMHhmYzAzMjZhMywgMHg1YzYwY2UzMCwgMHgxZmExZWEwNywKKwkweGY5ODJhNzNjLCAweGU4OGYwODZlLCAweGYwOGU5YzI4LCAweGI1NDlhYTg4LCAweDYxZTdmZDA5LCAweDVlNzQzYzU2LAorCTB4YWNkN2VmNDAsIDB4YjAwM2NmMWEsIDB4ZDg5Y2UzMGIsIDB4MWU0Y2QyNGYsIDB4OGJiZTRjNDcsIDB4M2NmZDNlOTcsCisJMHhiZjk0NzE0ZSwgMHhhMDU5ZTYwZSwgMHhmMDJjZDM3OCwgMHg3ZDdkOTI3ZCwgMHhlNzg2NDFjNiwgMHhkZTUxMjZiZiwKKwkweDc4YzU5Njc2LCAweDU1NGJhYzZlLCAweGRmZDAyNjdjLCAweDU5NmNlNGNmLCAweGY5NDlkOTM3LCAweDQyNThkNzA3LAorCTB4MjA1ODBmZjMsIDB4NmY1MWY5MTcsIDB4NTg3ZGVmZDcsIDB4N2UxYTQyN2UsIDB4MWE4OGZkMDIsIDB4N2U1YTU5N2MsCisJMHgyMWQ2MTBjMiwgMHhjOWJkN2RhMCwgMHgwZTI3Y2ZjZSwgMHhmODRkZTI1NSwgMHhiZDlhZjNmZCwgMHhlYzNmOWZhOSwKKwkweGVjMzE1ZTc3LCAweGNlZTVlMjljLCAweGM5NGZjNjI3LCAweDA1ZDQzYTVmLCAweGNmN2FiNGZjLCAweDhmNWZjYzE0LAorCTB4NDc3ZjI3YmYsIDB4MTI3OThhYWEsIDB4ZTc4MjllN2YsIDB4Yzg1ZmUyNTcsIDB4ZjUwYzkzMWYsIDB4OWMxZmFiMTMsCisJMHhjOGZmZjU0YSwgMHhmNTBlOTMxZiwgMHg4ZGZmMWE2ZiwgMHhjYTA0Y2JkNywgMHgzZDU4MmQ1NywgMHhlYmYyMmE3YSwKKwkweDJjZjljYjU1LCAweGNlNTE4OGMwLCAweDc1YmM0MGVmLCAweDdiYmEzZTc5LCAweDFmZjMxMzkxLCAweDVmOGU2NTdhLAorCTB4NDM3NmMxZTYsIDB4YTViYzcxMjYsIDB4NDBlZDFmMjksIDB4NzUzNTBkM2MsIDB4ZmU3ZjIyZDQsIDB4YjE1N2VmN2MsCisJMHg0YzljMTdhOCwgMHhhY2E4ZmMyNSwgMHhjMWZhNDU1ZSwgMHgyZjE3NDlhMywgMHg5ZTE3NDc5MSwgMHg5M2ViYTY0ZiwKKwkweDAxZjc4YWNkLCAweGY5OTFlMzg0LCAweGUwNWNlODIzLCAweGFkMzMyNTMzLCAweDk4Y2Y1ZjNjLCAweDc4ZDRjMGM3LAorCTB4NDY5MTY3YTIsIDB4MWFkMzg0NGYsIDB4NThiZjhmOTIsIDB4NWNmY2M5ZjQsIDB4YWZhNjkzNGMsIDB4OWUzOGFhYTYsCisJMHgyZjE3MmJlMCwgMHhlMWVkZjc1ZSwgMHg0YmU3NTA3YSwgMHhjODY5NWNlZCwgMHgxMDg3YzY3OSwgMHg3ZGUyOWY1ZSwKKwkweGZmZDA5MmM4LCAweDE2MWRlMzNjLCAweDlmN2MwYWNmLCAweDFkM2U3YzVjLCAweDlmM2Y1YmY5LCAweDkxY2U3ZTE4LAorCTB4NDhhNmJkNDksIDB4NzZiMzVmZjYsIDB4NzgyMDcxY2UsIDB4MmFlZjU2M2QsIDB4NzdmMzM3MWMsIDB4NDE4NzlkY2UsCisJMHhjOTE3NDZiZSwgMHgxY2NkNGMyZSwgMHg4MjdjNjJiZCwgMHg1MjE1Y2ZjNCwgMHg0Njk1NDM5ZSwgMHg5NzEzMjRiZiwKKwkweGEzMTBmNjQzLCAweDhiMWVkNjdkLCAweGI5YmY0NmUwLCAweGY0OTU0MWU3LCAweDZkZDE1YTc3LCAweDQ0ZjU1N2U0LAorCTB4M2U2MGI0NjcsIDB4ZmNjM2NmNTAsIDB4NGM2NjI5NWMsIDB4ZDkwZDFjYTMsIDB4YmY0MDEzMTMsIDB4NWNlMGU0MGYsCisJMHgzMzljMWM5OCwgMHg3MWM2NzNhZSwgMHhkYjNhMmU3YiwgMHg1NTNmYTgzYSwgMHhiMDBjMGZlYiwgMHhlMGI5ZTBjNCwKKwkweGU1ZWI5MTFlLCAweGMxMjcxYTllLCAweGY2Zjk4NDMxLCAweGE1N2VmYWUxLCAweDE4YjU2ZGUzLCAweGRlMDJmZGNmLAorCTB4ZThiYzQwNWYsIDB4YzBlNWZmNzgsIDB4YTM0NTdiZjQsIDB4ZTg5MTJiZGYsIDB4NzRmZTdlMTcsIDB4NmJmYmM1YmUsCisJMHhmOGFhN2Y2YywgMHgxNTc0MmFkMCwgMHg4NjlkY2ZjMywgMHg2YTRhYjVkMywgMHg3OGFlODhkYSwgMHg2ODJmOWVlMiwKKwkweDM2ZTlkMTlkLCAweDQxMmI4NTdhLCAweGUzYTA2NDFhLCAweGU4ZWZkOGViLCAweDEwOTg1ZjNkLCAweDRmN2U5ZDVlLAorCTB4ZmRlZjkwMGYsIDB4Y2Y1ZjBiMDcsIDB4OWM0YmM3YzIsIDB4OGRlMjkxZDMsIDB4MTA2MGZlYjQsIDB4Y2Y1ODIxMmUsCisJMHhmOGQxZTZiNSwgMHhkZTNjNGQ4MywgMHgxMGJkYmZkMywgMHg3ZmQwM2U3MSwgMHgzMGYyYTVlNiwgMHgyZmRlNTU3MywKKwkweDUwZmRmZmUwLCAweGYxMTBmZmJlLCAweGZlMjIyMjNmLCAweDAzYmM0NjNmLCAweGY2YzYzZmZlLCAweDRmZmY4MDU3LAorCTB4ZGQ3Zjg1MmUsIDB4ZjRkMzJmYWUsIDB4MmJlZTE5NDIsIDB4YzVmY2ZmMDEsIDB4MTMzMTMzMzksIDB4MTUxNDJkYzYsCisJMHg1YjI1ZmZlMiwgMHhkMjFmNmQ0NSwgMHg2MjcyNWI3ZCwgMHhiOTJjOGY1MCwgMHgxOTlmN2FiZSwgMHhiM2M5NzBmOCwKKwkweDkxNjlmMTAyLCAweDczZmQ1ZTc2LCAweDc4NGI1Y2VkLCAweDFjZjE1ZjVlLCAweGNiYzllOTFmLCAweDQ5ZjlmN2U3LAorCTB4MzM2ZDk1MGYsIDB4ZTQxMGJmM2UsIDB4YzdjYTc0ZGIsIDB4OTNmM2YxZjUsIDB4ZTExNzI2YTIsIDB4NjhhMzNmZjgsCisJMHhkNjI4YTJmYSwgMHgwZTljMmVkMCwgMHg4NjRkYWE0MywgMHgyOWU0ZjAzYywgMHg5ZjkwZmQ3ZCwgMHhiZTcyNjQ5NywKKwkweDNmYjVmMTRmLCAweDA3YzYxOTk4LCAweGY4ZmM1MmRjLCAweGJjNjNlMjAwLCAweGNkZmIxNTMwLCAweGVmNTZlNGQ3LAorCTB4ZTMwYWU4NmYsIDB4MzNlMTlmM2EsIDB4NmFjYmZiOWUsIDB4MWJmYjllMzQsIDB4Njg2Mjk0ZGUsIDB4NGM4NmNkN2YsCisJMHhmZTkxZmJjMywgMHhhZmVmMGQ2YiwgMHg1MGQ2MzZkYiwgMHg4MzcyZDUxZiwgMHhiNmU4ZmRhMSwgMHg0YzdkNDMwMiwKKwkweGZiNDMxNmUwLCAweDFhNjc4NzcxLCAweGVmZGExM2VhLCAweDc4OWZiNDM1LCAweGZkZTE4MTc0LCAweDg2YTUxZGY1LAorCTB4YmE3ZTM3ZjcsIDB4YTliZjUwY2MsIDB4ZWQwZDVmZjcsIDB4NWViODhiMDMsIDB4OTQ5MzVmZGMsIDB4NzQwYWU3ODYsCisJMHgyYTVmZWNiYywgMHhiZTdjNTQ5YiwgMHhlNmE0ZGIzNCwgMHg3NDRmM2U4NiwgMHhjY2IxNzMzYiwgMHgzNTdmYTM3MywKKwkweGIxNGNiYzkwLCAweGFlODVhNzI2LCAweDZjY2NmOWNmLCAweGFjNTM2YmQwLCAweDU1ODE3YWM2LCAweGUwNzQ5N2UzLAorCTB4Y2RmZTIwMTcsIDB4YTU1Y2EzNTYsIDB4MDI2YmNmNTYsIDB4MmNhNTliYjMsIDB4ZDJmOTQ2MTksIDB4NThiNzVmMjAsCisJMHhjNWJiN2ViOSwgMHhlZGZhNjU3YSwgMHhhYTdmNmM0ZSwgMHhlY2U3NDAzMiwgMHg0NDRiZTVjMywgMHhkMmEyY2FmOSwKKwkweGNjYTlmYjQ3LCAweDFiOTZmOTQ1LCAweDRkM2U0NjZkLCAweGNjYWY0MDFhLCAweGMzY2YxYWIzLCAweDliNjFlYThiLAorCTB4ZmQxMzkwNjQsIDB4ZDBhOGY5ZjksIDB4ZGJlMmMyZTcsIDB4YTA2NzZmMjgsIDB4MDVhNGU1N2UsIDB4N2QwMTZlYjcsCisJMHhhOTdiMjcyOSwgMHg5YWFmOWZkNCwgMHg5Nzk4OGE2MywgMHgzYmY1OTBmNywgMHhmYTFiNDlmYSwgMHgyMTBmNGZkOSwKKwkweGRlOTJiYjdlLCAweGNjZjMwYTdlLCAweDkyZjVlNzJhLCAweDMxNmM5NGJmLCAweDc3NTgyNWUyLCAweDU0NzllNjBkLAorCTB4NTA4ZTdlNGUsIDB4NTRkY2ZmZTUsIDB4YWUyYjc4ZDMsIDB4MTczY2ZhZjcsIDB4MTEzMzMwN2QsIDB4MDZkMjAzZjMsCisJMHhkNTVlOWZmMCwgMHg0ZDVjZjFlNiwgMHhjMzQ1YWRjOSwgMHgxNGQ1M2ZiMCwgMHg3YTQ1YmY3YSwgMHhmZDEwYWFhMCwKKwkweDFlNWFhMTk4LCAweGM4YTY1M2Y0LCAweGQ1M2Y0YWY5LCAweDBhOGMxOWZhLCAweDU1MDNlZDE0LCAweGFiYTBmYjIxLAorCTB4MDQ4NzIzZjgsIDB4OTM3N2Y4ZjMsIDB4MTdjOGE3ZjcsIDB4ZTdiNzQ2MGIsIDB4NmVjYjczZjEsIDB4YWJiMjRjZDcsCisJMHhkNzVmODI1NCwgMHhlNzhhZTk0MywgMHhlOTJiZDQyOSwgMHg2NjczMTI0OSwgMHhmMDY3ODdmNCwgMHgwNjYzNmYzYywKKwkweDMzOGZhZmJjLCAweGY3YWExNGI5LCAweGU1OWUzODBhLCAweDgyMGQ4Y2M3LCAweDViZmZlYWYxLCAweGY3ZWFmODI0LAorCTB4M2NmOTRmNWYsIDB4ZTI5YWE1MTYsIDB4OTkzY2ZhYTcsIDB4YzdhZmRmYjYsIDB4Y2QyNmNmOGIsIDB4ZDYzYzQxOGEsCisJMHg2ZTc3ZGI1ZiwgMHhhY2ZkNjE4NywgMHg3ZWM3NmRlMiwgMHhkMzM3YWVjZiwgMHg4MjA1ZjViOCwgMHg2ZjNlYmRlMSwKKwkweDc0MWRjMzY5LCAweGUxNWQyYjFlLCAweDc5ODYyZWYzLCAweDM0OTZkYzIzLCAweDczZmQ1NzBlLCAweGI4MjM0YjAyLAorCTB4NDNkMmY3ZmUsIDB4OGFlY2JmZTgsIDB4MGRiYzYxNzYsIDB4ZTg4OWIxZjAsIDB4NjczOGNlZWQsIDB4ZjMwZjI3ZDIsCisJMHgzNGE0MThhYSwgMHgyNWZiMjFhZiwgMHg5NmZhMWZiMiwgMHg0Y2RiYWY5NSwgMHhmNjg4OTU5ZCwgMHg0NjM1ZjI1NCwKKwkweDY2ZjVjNWI4LCAweGM1MTcwN2YyLCAweGUwYWY5NDJhLCAweGQxYTE1OWFmLCAweDU1ZWYzOGQ1LCAweDljZWYzMzQ5LAorCTB4YmRkNGYwMGIsIDB4ZmQ0YzMyMjMsIDB4MmQzNDc2NzEsIDB4MTVkZjA0M2QsIDB4ZmNiYjQ2YjcsIDB4ZWY3OGZlY2UsCisJMHgwMTM4NzI3MiwgMHg2ZTEwYjdlZSwgMHhjZDIxNDM3MSwgMHhkYzIxZGE5YiwgMHgzM2Q4MTczZiwgMHhkZTc3YzgxOSwKKwkweDE0ZmY0NGU5LCAweDk3N2RjMzEzLCAweGQzZmZmODcwLCAweGVmYzRlM2NhLCAweDg3OWE1NTU4LCAweGViN2M1NDljLAorCTB4MTY1ODQxOTYsIDB4YjUxZGRjOTEsIDB4N2ZjZWI4MGUsIDB4ZmNlYmU1NjgsIDB4ZWIwOGQ2ODcsIDB4ZmRlZWU1ZmMsCisJMHg3ZWQzOWYyOCwgMHg2ZGQxNGIwOCwgMHhlYWRhZWNkMiwgMHgxOTdiNTBlYywgMHhlYzQ5ZDZmNCwgMHgzMThiYWY1NywKKwkweDdlYzVjZTNmLCAweDNjY2JiNjA3LCAweDk3MTlkOTRkLCAweDFlZDBjYmI3LCAweGVkZDNmZTQzLCAweDhkNWFiZmIxLAorCTB4OWU4ODY0NzYsIDB4YjNkMzRhZmQsIDB4OWVhMTVkNWYsIDB4NGVlZDgwYmQsIDB4Njg4ODFiZGQsIDB4OTFjODI0YzcsCisJMHgxYjM4ZGNmNSwgMHgyYTk1N2ZjNywgMHgxYmUzY2EzMywgMHg2ZDlmOWUyMCwgMHgwZTFmNmM4YiwgMHhjZTVkMGViNCwKKwkweGQ2OGNjOGNmLCAweGVmZDc1NGY5LCAweGM1NjBkZmRjLCAweDljMmZlZDMyLCAweDI0N2ZlMGQ5LCAweGUzMjlmNzFiLAorCTB4ZWRkZTUxODcsIDB4YWVhNGZkNDAsIDB4ZjEwZDgzZjgsIDB4ODg2ZGUzYWIsIDB4YzA0Zjg4Y2QsIDB4ZjljNmQzYTMsCisJMHg2NDhiNjljNCwgMHgxZTAzOTYwZiwgMHgwZTNjMDY0ZCwgMHhkOTAzZjZjNywgMHhkZmFkNTc4MywgMHg2ZWU3OGM0YiwKKwkweDgzN2MzNWJhLCAweGJjNzE5NzllLCAweGNlM2ViYmFlLCAweGU1NDViOGMzLCAweGU3YTQ3M2VjLCAweDM5OWM3YWFmLAorCTB4Zjc0NDc1YzYsIDB4MDExYzYxYmYsIDB4ZDc3ZGRmZTcsIDB4Yjc3MTZiN2YsIDB4ZDUxNzhhMGUsIDB4MGM0ZDdhYmQsCisJMHgwYTJhYTdjNiwgMHg5NTg2ZjRmYSwgMHhhNDk5ODVkYiwgMHg1OTc2YmIwNywgMHg1NzY3MDhkYywgMHhlY2U3Y2YxYywKKwkweDEwZjEzNWRhLCAweGFmM2UzOWM2LCAweDg1Mjk5YzM5LCAweGFmNWQyZGQ4LCAweDQzMzNjOTFjLCAweDhmM2I1ZDdmLAorCTB4MjA5NDQ5ZTQsIDB4ZDE3ZTI3ZTcsIDB4ZmM1YzU3ZGYsIDB4MTI4ZjNjY2YsIDB4YzdkMDI3M2MsIDB4MGViZTU2NmYsCisJMHhmOGYxYjdhZCwgMHhjNzk4ZDNjOSwgMHhmN2IxOWEzNiwgMHhmYWY5NjNhMywgMHgxYzdhNjg5MSwgMHhlM2JmNDc5ZiwKKwkweDdmN2VhMWYzLCAweGM3ZTU3MDU0LCAweGRkMjYyYjAwLCAweGFiNjY0YzU1LCAweDAwYTY4ZGU1LCAweDZlMGE4Zjk2LAorCTB4YmU1NWUzMTEsIDB4NGQzY2ZjOTEsIDB4OTExYjE2NTIsIDB4NDcyOGZkMDEsIDB4OGUwODAzZGIsIDB4OGRkN2EzYTMsCisJMHhhN2VhMjlkYiwgMHgwYjJjM2VlYSwgMHhjNDAyZWYxNCwgMHgyYmFmNWM3YiwgMHgzN2ZjN2QwOSwgMHhhMWIzOGQ4NywKKwkweGUxNGQyMTVmLCAweDdlNzdiNzdhLCAweDI5ZWYxZjk0LCAweDhmYjkzNDRhLCAweDY3NjdhYTgwLCAweGM1OGMyZjBlLAorCTB4ZTY4YjdmZjcsIDB4ZDI1OGYyZjIsIDB4OGU1YzI2ODksIDB4MzhhMDM5NzAsIDB4NWE2NjliZDQsIDB4NzEwZDk2ZGYsCisJMHhlZjgyMmYyNywgMHhlNzg4NGQ5NywgMHg5ODA1ZTk3ZSwgMHg5NjM5Yzg3ZCwgMHgwOTY3ZTNjNywgMHgwMGI5MDcxNCwKKwkweDE0ZTc4MTc4LCAweGI1M2UwMmZhLCAweDMzMTdjYzRiLCAweDg5YjBmNDE2LCAweDBiZjA1NWI5LCAweGVlNDI5M2VjLAorCTB4NjhmZmMxZDksIDB4NGQ2MGZjNzYsIDB4NGQzOGY2ZmYsIDB4NDVlMDMzM2UsIDB4ZDVkYjE5NzYsIDB4NWMwY2VlMDksCisJMHhmYzgxNzc0ZiwgMHhiNGZhMDMwZCwgMHg3Y2E5NThkNSwgMHgxODRkNDZhZCwgMHhhN2I4ZjIwNiwgMHhhZmVhODkyNiwKKwkweDBjYTkzOGQ3LCAweGU3YTA4Y2Q0LCAweDU0NWM2YmZiLCAweGE3YjUzNjhmLCAweDU1MmM3YWQzLCAweGZlODc5YmFmLAorCTB4MGIxMmZkZjUsIDB4YmMyM2I3YmQsIDB4OGU1NjdiYzQsIDB4OTdmOWM4ODcsIDB4MDA5M2U2MmUsIDB4M2QzNTJmYWUsCisJMHgzOGQ2ZmI1MiwgMHhjNmE3YWZlMiwgMHhmZDMxZDQwMCwgMHg4YWQ5ZmZiZiwgMHgwNTRkNjQzZiwgMHhhM2ZhOTgzZCwKKwkweDQxNTM1OWMzLCAweDc4MTI5ZjhlLCAweDE4MWUwMmZlLCAweDU1MmU3NDhlLCAweGI3MzI5ZjJmLCAweGYwYTlhMmM0LAorCTB4NGRmMzFiNmIsIDB4YzhiY2MyNGQsIDB4OGUxNTNmZGUsIDB4ZThmNmNjNjEsIDB4MWQ0ZWE2OWYsIDB4ZmRjN2YzMDksCisJMHhmNmM2MTRmZSwgMHhjN2FiZGVkYSwgMHhmYmE5ZDg3MywgMHg4MThiYWIzZiwgMHhmYzZkYzhmOSwgMHg4Mjg5OWYzZSwKKwkweDdkNDA1NmE3LCAweDBiZjM5YjMzLCAweDk4YjUzYzkzLCAweDM3NzNkOWNmLCAweGJlZmVlMjczLCAweDFiNWVjZTNlLAorCTB4ZGI3NjEzYjcsIDB4NTEzOTlkYjgsIDB4ZTZjMWZjZTAsIDB4NDExZTVhY2EsIDB4YmFlODZlNmYsIDB4ZWYzZWRlMTEsCisJMHg4Zjc0ZDdjMCwgMHgyZmI3OGMwZiwgMHgyZjVlMzBkNSwgMHhmYTA3MTFjNSwgMHhkN2ZmNzUyZSwgMHhlOTVjOGViNCwKKwkweDQ5MWYzZDc3LCAweGM0ODQ3Y2ZjLCAweGU2YmEyYmYzLCAweGZkYTY2ZTI2LCAweGJhMWY2ODc4LCAweDQ3MjNkYThmLAorCTB4ZDJkZWQ3YjYsIDB4ZWQwNjgxZDYsIDB4NjU5ZmI3YmUsIDB4YTY4MzcyZjAsIDB4ZjVjNjI0NTcsIDB4MDVkMTZiZmYsCisJMHg2MWI5NDdiZiwgMHg1ZmRhMzhkZSwgMHgwOWUyZDNhYSwgMHhlNTdhM2E5MywgMHgyZjdlNzZmOSwgMHgxM2Q0M2U1YywKKwkweDNjMDQ3ODRlLCAweGQxYTVkNzBmLCAweDFlNjA1NTMzLCAweDYwNDhmZmNjLCAweDI4MDI4NDMzLCAweGRiY2YzNmRkLAorCTB4YzJkMjRmZDgsIDB4ZDE5N2JlNGQsIDB4NzE2NWQ4NWUsIDB4ZTNhM2Q5YTIsIDB4ZDkwM2VlYWIsIDB4NjEyMWZhOGEsCisJMHg4ZmRhMzFjZiwgMHg2NDNhMTNhYSwgMHg4Zjk3ZjdhNCwgMHhjYjcxNGQ3YywgMHgzMjc1NzMzYSwgMHgxYjE3NmRkNSwKKwkweGJkYjRmZWIwLCAweDk5ZDYyMzdhLCAweDZmYTllYmVmLCAweGQ2MGMzZjAwLCAweDEzZTNlMWNlLCAweDkwYmI2M2Q0LAorCTB4M2I1ODI5ZTgsIDB4N2UwNmVmNTcsIDB4ZjVlNjY1ZDgsIDB4NGIzOTFmMmYsIDB4NWNjYmIxZmMsIDB4ZTE4ZDlmM2QsCisJMHhlZjk4N2FmNSwgMHhhYTZmNThhZSwgMHg1MjkwNTQwOSwgMHhlMWZkNjVmYiwgMHhiN2FlYjA5YiwgMHg3N2RhOTJmZiwKKwkweDNmNmU1NGRiLCAweGE0MGNkZTJhLCAweDg1NWQ1ZjdmLCAweDJlYTQzZGJhLCAweGYyYjMzYWYxLCAweGM1NWY5ZjUyLAorCTB4N2YyOWFmODEsIDB4ZTcwZjcyYjgsIDB4Y2UxYmM0NDcsIDB4YzNjZGVmMTMsIDB4N2E4Y2U5NzUsIDB4YTRlYjUxZDQsCisJMHhkNzM2NzNiOCwgMHg5ZjAzMDFkNywgMHhiNzUzZTdlOSwgMHgyYTJjYmM5OCwgMHgwODVlY2Y0NCwgMHhjZTQyZmY1YiwKKwkweDg0YThiMWQ5LCAweDM4YjRmZTkwLCAweGJiMDMzYTc2LCAweDZmMTgyYjM0LCAweDJhMmU2NGNkLCAweDk1MGYzMTg3LAorCTB4ZWU5NmRiZDksIDB4YmIyZGI0NDcsIDB4N2E4OWQ1YWYsIDB4ZmFkNzNlMmIsIDB4NjhlODk3ODAsIDB4ZDA5ZTFmZjQsCisJMHhlOGZhZTJmNCwgMHgwMWEzMWJmYywgMHg3NzgyZjU5ZSwgMHhmMTdhODg4ZCwgMHhlNzRhYjM2NSwgMHhiMjI0M2EyZiwKKwkweDM1YjUzYjM3LCAweDUzMzBhZDhjLCAweGY3M2I1Y2JkLCAweDVkZTk1ZTZkLCAweGVlZjUxMjMzLCAweDE5YWI5MzIyLAorCTB4NGYwY2IzZDcsIDB4MmZiZTE5YmUsIDB4YWFlMTlkZGIsIDB4ZTdiY2MxNjUsIDB4YzQ5NmQ4YjIsIDB4ZWYzMDRhYjEsCisJMHhhYTNmYWY1OSwgMHhiNTQ2ZDlmMSwgMHhkMmY3ODZjOSwgMHg5NTQzZmJlOCwgMHg3MWQyZWI2ZCwgMHg3ZGIzZmI3ZiwKKwkweGJkM2M5MDFmLCAweDdjNDE5NTFmLCAweDQ0N2FkMTVjLCAweGJmNjlkYWY2LCAweDI5ZjNjNjRjLCAweGQ2ZmFkOTlmLAorCTB4YmVmNzVhM2YsIDB4MGI3NDE5NmMsIDB4ZWIyZmY1ZWEsIDB4NzliODc0NGQsIDB4MDZmNDNkMjAsIDB4MzgzNzNmZTgsCisJMHhhYzZhODdjOCwgMHg1ZGMyZmU1NCwgMHhkZTlhMmQ3ZCwgMHhkMzI5NTEwNSwgMHhiZmI0NjA2YywgMHg5MTU2ZTk5MCwKKwkweGI5YWRlNjhmLCAweDdjMGFjMWE2LCAweDhlYWM4MmY0LCAweDE3OWIzZTQ0LCAweDViN2M0Yjk1LCAweGJlNzIyYjE2LAorCTB4ZGQwN2I5NjQsIDB4MGRjZmI2OTIsIDB4NjUzNWQ0ZjUsIDB4M2M1M2JlZDMsIDB4NmY2OGM4YmUsIDB4ODg1MjZkNTQsCisJMHhjODBlYzAwZiwgMHhkY2E4M2U0NywgMHg3ZWUxZjI2MCwgMHg0ZWRhYzlhMiwgMHg0NWU3N2RlNywgMHgzNjhmY2QzMSwKKwkweGFmNWM0ZjllLCAweDZjZGYzYmU5LCAweGRjYmRkZjFlLCAweGYzOTJjNTM5LCAweDUxMWU3NDUxLCAweGU1MWZiZmFmLAorCTB4OTEyOGJlMjQsIDB4NTVmZmI0N2MsIDB4ZTc0MWRlNzIsIDB4MzhmYmJmMTgsIDB4Yzg3OWMzNTYsIDB4MDQyOGUzZmUsCisJMHg3OTRlM2U4NywgMHg1N2QyMWM3MCwgMHgyN2VjMWZlNSwgMHg2YjhkZjgzZiwgMHg0ZGQ2N2I3NSwgMHgzYmU1YWM3MSwKKwkweDliMDVmY2I0LCAweGYzZjYzMDdiLCAweDE4MjdhNmI0LCAweDc3ODBiMWZhLCAweGVlYWZhMzI5LCAweDFjY2Y0MDkzLAorCTB4ZjkzM2QzZWMsIDB4OTBkMzUzMGQsIDB4NmNmN2MxYmUsIDB4YjkwZjQxOTIsIDB4YzFkM2EwMjUsIDB4ZmJlZWFkMjgsCisJMHg1MWY2ZTQ3ZSwgMHhmNTMzZWQ2MSwgMHhhOTg2Y2NmYSwgMHhmM2MzZmI5MywgMHhiNzU4MmRiNCwgMHgxYmU5N2I0MiwKKwkweGUxMWQ1ZjRiLCAweGExZjU3M2EzLCAweGUzZTljNWZkLCAweGU5ZmQ0YmRmLCAweGI1MWE5N2ZjLCAweGY4MGZhMGYwLAorCTB4MjdhYzYwZWYsIDB4N2E3Y2YzMWYsIDB4Y2EyNzMzNjcsIDB4OGQ0OTY2ZTEsIDB4MjFkMDg1NzIsIDB4MzdhZjhhMzUsCisJMHgzNWFmZTcyNSwgMHhmNzg4M2ZlMCwgMHg0ZmZkMDM1YywgMHhmYjBkMzhkNSwgMHg5NjhiOGI4YSwgMHg1NDk4NzlkMSwKKwkweGM3Y2M1ZTlkLCAweGNhNmQ3N2NmLCAweGZlMjdlYzMyLCAweDE2YWUzODdmLCAweDcwMDBmNzBlLCAweGMzMDdmZDRjLAorCTB4NWUzMGMyMzEsIDB4MDMxYzhlMTAsIDB4ODcwYjU3N2MsIDB4N2E2YjNiMTgsIDB4OGY2YmRhMDYsIDB4MjgwZjI4OTgsCisJMHg2NmIzZTRkMSwgMHg2ZmY2NWRhMiwgMHgwY2E3OGEyNiwgMHg4ODBmM2M2NywgMHhmYjBkZTMyOSwgMHgyYzdiOTliNCwKKwkweDllZmUzMWYzLCAweGQyYzNiMTI5LCAweGI3Mjc5NDU4LCAweGE5ZDcxNmIzLCAweDVmNjQ0ODlmLCAweDM5YWI3M2MxLAorCTB4NzI2ZTg3MGUsIDB4MjA0ZmZkZTMsIDB4NjY1ZmQ0OTUsIDB4MWY4MmI3YjksIDB4ODJmYmU2ZjIsIDB4NzBkMzNlZmEsCisJMHhiZGUzZTU5NSwgMHhlN2EzOWJhMCwgMHhmYjhkMThkZiwgMHhhYTFlNzM2NiwgMHhlNzk4M2NjMiwgMHgzNTJmZjE5NSwKKwkweDkyYmM4MzMwLCAweDJjMjBkMjFkLCAweGFiZTMzYjI1LCAweDcwMWI4N2E4LCAweDE0NzA3NmJmLCAweGY2MDQ1YmI3LAorCTB4ZTRlMWMzNzAsIDB4YmNiOWVmNDgsIDB4ZjBmMzViOWUsIDB4MzQxYjhjMzQsIDB4OGI1ZTc0YWYsIDB4Y2RiMzUzZmUsCisJMHhmMzFmYjJkZiwgMHhlODUzMWU3NiwgMHg0N2FjZDZkZSwgMHg1MDk5OGRmZCwgMHg2ODk5ZDcxNywgMHhmZDYzMTRiZCwKKwkweGRmNzE5YWRiLCAweDE3NmNjOWZkLCAweDY4Y2QxMWRhLCAweDQ3ZmI2MGJmLCAweDU2NmJmMjE0LCAweGYwZDMzOGQ1LAorCTB4NmQzYTkyN2UsIDB4NzZiMmQ4MWQsIDB4YzE3OThhYjIsIDB4ODcxNDhhZjUsIDB4NzMyYWRkZWIsIDB4NzczYzVjZjUsCisJMHg4ZGQxZWUzMSwgMHg1MWViZDYwZCwgMHgwNzFhYjk4ZiwgMHg5NDllYmNhOSwgMHgzMzlhZWI4YywgMHg3YjQ2M2FkMywKKwkweGFlNjhjODBmLCAweGIxYThhNjc1LCAweDZmZjBmYWMxLCAweDNkMjBmYWMwLCAweDlkYzFiMWIzLCAweDJiMmVmZDg2LAorCTB4ODgzYmZhZDUsIDB4ZTIxNzhhNzEsIDB4ZWY2OGJjMzQsIDB4ZDJmNGZiMzMsIDB4Y2JjYzA2YzYsIDB4ZjU4MzZiMTIsCisJMHhhZGRmMzBhOSwgMHgzNTNkNzJjZiwgMHhmYjQ3ZmExOCwgMHhjM2UzZTYwYiwgMHg4NzdiMDU3YiwgMHhjYTRlNzQ0YiwKKwkweDYwM2I2MzA2LCAweDk5OTFiNjdlLCAweDBjZDdkZmI0LCAweDJiZWYxMTdhLCAweGRmYzkxZGVlLCAweGYyMzRmYmViLAorCTB4ZDNlZDEzNzAsIDB4NmY1YzdiNjAsIDB4YmRiY2M5NmMsIDB4NTdkZjgzM2MsIDB4OGExNWRiMjAsIDB4MzA3YWMwMzcsCisJMHgxNDllZjMxNSwgMHhmMzcxZmZhNiwgMHg4ZmI2YTRiOCwgMHgwMWY3ODUxMSwgMHg3NWEzZjA4NCwgMHhmNzNhMzJlZCwKKwkweGRjNjYxZDY5LCAweDhjZDM5NzlmLCAweDE2Nzk4OTc1LCAweGFhMjdiZmEwLCAweDQ2MzdlN2M2LCAweDgzNDFmOTZiLAorCTB4NmRkYTBhNTgsIDB4MTMzZTRkYzMsIDB4ZmNjOTFiYjYsIDB4MDJjNzVlNTQsIDB4NjI4ZDhmNjQsIDB4OGQxZjU0MWQsCisJMHgxZTE2NjM1ZSwgMHg0MWQyNzI1YiwgMHgyZGNjNzFhYiwgMHg0N2FhMzhmMiwgMHg3MTMxM2I0NCwgMHhmMjQ3MWVhZSwKKwkweDc0YmU0MTRlLCAweDYxNzY2YjQ3LCAweDdlM2ZlZjBhLCAweGY3Y2EyY2M2LCAweGNkZWY2OWY1LCAweDMxM2Q4NjMzLAorCTB4N2ViNWU2MGQsIDB4NTBjZWRkYzYsIDB4MmY1ZjRlZmIsIDB4NDhhZGZiNzUsIDB4NjhjYmY5ODMsIDB4YTBiZGEyMjEsCisJMHgzNjQ1NzVkYiwgMHhlNTk4NGY1ZSwgMHhjNjE0N2E3ZSwgMHgyNmNkZGIxMSwgMHg1OGFkOWZiYywgMHg2ZjE2NjM4YiwKKwkweGJiNDQ0ZmM4LCAweDVjZGY2OGFjLCAweDQ0ZDc4N2IyLCAweGQxNmNiYjczLCAweDc3YjIxOWZhLCAweDlhZjc5ZTE0LAorCTB4ZmU3Zjc2NGYsIDB4MTgzMTA5YmEsIDB4YjliMDZmYTcsIDB4ZmU0N2FlNjIsIDB4ZGZiZjIzZmQsIDB4YjFlZDRhZjUsCisJMHgwYTZiYzRlNiwgMHhjMTliMWU1MCwgMHg4ZmZiYzZhZiwgMHhjYWRkOWEwZSwgMHg3NThiZTQxOCwgMHg2Y2NlYzhjMywKKwkweGM3ZDZmMjhlLCAweGZmY2RiZjQyLCAweDQxZDU3NGVhLCAweGY3MzY2N2ZkLCAweDRlMzgyM2Y4LCAweDhmN2YxNDQzLAorCTB4NmYyMTI2ZjcsIDB4M2ZmN2VkZjYsIDB4MWU4YzVjMmYsIDB4ZmRmMGZjNzgsIDB4OTFiMTgzZmUsIDB4NDNiZGYxZWYsCisJMHhmZWQwNWZjMywgMHhkOWRkOTBmMCwgMHhkY2M0ZjY2MCwgMHhjYmJkZjA4NywgMHhlYWQ2NzllNywgMHgxMTJmNTE4OSwKKwkweDg2YjRmYjY3LCAweGQ2NzYwM2U3LCAweGU2NDA1OGI4LCAweGJkNjJkMWY3LCAweGRkM2Y2OGE0LCAweDIyZDI1Y2FmLAorCTB4MDk3Y2RjNTAsIDB4M2EzZDIyNmIsIDB4ZWVkNTg5NGMsIDB4YzVlNjMxYTcsIDB4NGRiZDE2OTYsIDB4Nzk1YjRiZWQsCisJMHg0MmQ2MzJmYiwgMHhlMTdhNzVlZCwgMHg4MzAxYjViZCwgMHhmMGNlM2ExZCwgMHhkY2QxMWRmZCwgMHg3OGFjZGQ2ZiwKKwkweGZmZmI0MzFmLCAweGM0ZDkxOTkxLCAweDExNjdjMDRmLCAweDA3ZTIyZGYzLCAweDMxYjk3N2Q4LCAweDM3MWZhZjlhLAorCTB4ZjZjOGRiNjIsIDB4Yjg2M2YxMjgsIDB4ZTA1Y2I4N2QsIDB4YzIwN2IzZTcsIDB4OTM3OWQ1NTMsIDB4ZGUwYTNkNjEsCisJMHg3YWQzMjE5ZiwgMHg0OWY5YWRkNCwgMHhlYjdjOTM4NywgMHg3ZmY5ODQ2ZiwgMHgyNDRhZjU5ZiwgMHgyM2JkZGFhNywKKwkweDQyNWY4Mjc1LCAweDMzYmVmYWY5LCAweDJkMWJkZWVjLCAweGE2YmE2ODBmLCAweGNiNDNmZTI1LCAweDZiM2VmOWVmLAorCTB4ZmQwZGMzNzksIDB4ZjQwMmNlZGMsIDB4OWVlZDYxZGQsIDB4NDhhNDE0MTIsIDB4YWZkMDE5NzksIDB4M2FkYzFmNDEsCisJMHhkZGJmNThjMiwgMHgzOWRmYWM2NSwgMHg3ZDNkZjIyOSwgMHhiNGQ0NmI2YiwgMHhkNmFhN2JkMCwgMHhmMzhlNzAwZSwKKwkweDU3NWU4ZDJkLCAweDBiMTJkZjdmLCAweDBiN2JlYmNmLCAweGY5ODE1ZWU5LCAweGMxN2ZiNDk0LCAweDFiMTRmYWYzLAorCTB4ZDkxZWEwZjMsIDB4ZmI0NmNmYmYsIDB4YmM4YTU1MjEsIDB4NTUxNjQzMTksIDB4YmRlMmVmZTAsIDB4OWY5ZDhhZjAsCisJMHgxN2ZmNDAzNywgMHg5OThhMDVlMywgMHg5N2RlMGZiNywgMHgxMjUxZjdjNCwgMHgzYzVhNDkzYywgMHg2MzM0OTVjMywKKwkweDFiODdiN2Q0LCAweDBiY2EyYWZkLCAweGRjNDZkODk2LCAweDI3ZTYwZDc3LCAweGU4ZWRlZjFhLCAweDBmMzhmZThhLAorCTB4Y2Y5ODYzZmQsIDB4ZTg0ZjhjNmMsIDB4M2U3ZDVhNzEsIDB4MmM3ZjI4ZmYsIDB4MzljZmJiNWEsIDB4MzQ2YjZlOWMsCisJMHhhMzBiYThmOSwgMHgzOWQyM2Q3MywgMHhiOTczZGYwNywgMHg4N2JiNTJmOSwgMHg0M2MxMjlmZiwgMHgyNjg5Njg3OSwKKwkweGIzYWMxNzFlLCAweDljNTI4ZWI5LCAweGVhMGZmMzQ0LCAweGYzMDZiOGI0LCAweDU2ZWY1ZDdkLCAweDEwOTVlY2MyLAorCTB4ZWQ3ZDIyZmYsIDB4MzlmNWY1ZDcsIDB4MzhmMzc3ZTQsIDB4MTU2YTJkODgsIDB4MzYwZGMzYWUsIDB4ZmFhNjZlYmQsCisJMHgwMGE2ZTZkMywgMHg1YWFmZmRmOSwgMHg4MzFmMTg5YywgMHg2NzE4ZGRlZiwgMHg0MTFkY2RmMywgMHgwNjVkNWQ3ZSwKKwkweDBlN2JjMTRiLCAweGI0Y2JiMGRlLCAweDZhYmRkNmZlLCAweGQ4ZjVjNjY5LCAweGRiNzZmMzZkLCAweGJhNDlmMjQyLAorCTB4ZjlkMWVmZWMsIDB4ZjlmZDA4YTYsIDB4ZjkwZGZkMGMsIDB4ZjhjMWZkNzYsIDB4ZmQ3Nzg4YWQsIDB4YTdmNjFiZmQsCisJMHhjZWZmMjIwMiwgMHg2OTFiZjk0OSwgMHhhMTdiMWZlZCwgMHg0MmNiYjg5ZSwgMHhmN2ZkNGY3MSwgMHhlN2NmY2EwZiwKKwkweDdhOGNmZGQxLCAweDRlMTQxMzdmLCAweGQ1MWFjZTg3LCAweDhlNWQ4ZjkwLCAweGU1MDczNzdhLCAweDY3ZjQ5ZGEwLAorCTB4ODMyMGNiNDUsIDB4NjlmNWQ0ZGUsIDB4NjgxYmY5YzUsIDB4NTc0ODJjYmYsIDB4YjUyMTJlMmQsIDB4MzhhYTVlOTMsCisJMHhiYzY4YmZmZiwgMHgzNDllOTAzYiwgMHhmN2U5MTI0ZSwgMHgzNTQ5Yzc4MSwgMHgzOGUwZTNlOCwgMHhmNzcwMGM5MywKKwkweGMxMzI2NzFmLCAweGRhYzM4ZmExLCAweDlmZTcwY2EyLCAweGFlM2NjY2ViLCAweDMzOTg2NjcyLCAweDFlODIzNjI2LAorCTB4ODM3MTRiZDEsIDB4NjBmZjcwYzksIDB4NjJiMmU0OWQsIDB4NGVjYTc1ZmYsIDB4Mjg3ZjM0MzUsIDB4ZWYwMDVmN2MsCisJMHhmMDIxNjRjNSwgMHg4NjdhYzFkNSwgMHhmMzBiNzJjMSwgMHgzZDQwNWU1MiwgMHgwNzIyMTNmNiwgMHg2MmE1ZDlhMiwKKwkweGY4YzI2MmJmLCAweGM2MmVmOWU5LCAweGJkYjk0NWZlLCAweDMzNzI3ZDEwLCAweDhiZDgyZGYyLCAweDdlM2I1ODNmLAorCTB4NDllYzBmOTUsIDB4NDc2OWVjYzksIDB4OTM3NjRhYmEsIDB4NmI2OGYzMTMsIDB4NDVjNTEzMTUsIDB4NjRhYzkyZWIsCisJMHhjYTEyYWRmZiwgMHhiZDczOTQ1NSwgMHgyMjQzYTk1ZiwgMHg4ZjdkZjQzOCwgMHg5ZjI5ZTY4MSwgMHhjMzNjZDA3NywKKwkweDlmZmIzYmVmLCAweDc2YTE0ZjFiLCAweDNiNTdlZWZkLCAweDBmOTNkNzMwLCAweDkzNTQ1YmZkLCAweDRlNWQ0NTBiLAorCTB4MjEyN2Q4NTMsIDB4NDdlZjBmZjQsIDB4ZWM0NTIwZGEsIDB4OGU5ZGJjMjcsIDB4NmNlOTAxZmYsIDB4M2QyMDcwZWUsCisJMHg4OGE1ZTNiYSwgMHg5NTFiMTA3OSwgMHgzMTA3OThlZiwgMHgyNzFmNGMyZiwgMHhlMDBlY2QxYywgMHgyMzg3NDJmNywKKwkweGU1ZjQ4MzIzLCAweGE1ZjUwNTQ2LCAweGRjOWZjY2ZkLCAweGI0Y2JkMjRlLCAweDdmYWZhZGVmLCAweDU2YTk4NGU2LAorCTB4YmM2YzRmOWUsIDB4ZmUyMDZmNTcsIDB4N2Q2MmYxZDMsIDB4ZjNjNjQxZjMsIDB4N2Y5NGJkNTMsIDB4NDgzYzM5NzIsCisJMHhmYjQzY2I4MiwgMHhlMjI5NzYwMCwgMHg0MjU4MzZiZSwgMHg0OTM4ZmM4NiwgMHgzNTRmZTYzMSwgMHg2M2UyMWU0OCwKKwkweDU2ZDU0ZGYzLCAweDViNDkyN2RhLCAweDkyN2RjNTY5LCAweDA2MzM5MmQ1LCAweDM3ZGVkOGZkLCAweGY5ODNmZWMxLAorCTB4YmU3OTNhMzUsIDB4NmJmZjc4NmEsIDB4YjQ2NjFlZjAsIDB4YzQ1MzE1NzMsIDB4MDZhMzc5ZmIsIDB4MzRiYWFmYjAsCisJMHg3N2Q5YWNmYSwgMHhmNTAxZmU2OSwgMHgzNzc1YzFlMSwgMHg3MTUyNGUyYSwgMHgzOTliMzVkZCwgMHg0YmFkMDNiYywKKwkweGUxMDNiZjdhLCAweGZjN2RkMWViLCAweDM5MmMxYmY3LCAweGZmYWUzZjU2LCAweDRhMzVlM2UxLCAweGJjM2U0ZjFlLAorCTB4NzA3ODA0NmYsIDB4Y2QzMWFjZGYsIDB4NTQ2ZGY4NGQsIDB4ZDVmZDE1MjUsIDB4Y2M1MTExZTgsIDB4NjU2ZmVhMWEsCisJMHg2N2Y3YTJjYywgMHhjY2YxZTNlMiwgMHg4ZjhjNmIyMiwgMHhlM2EzOTc5YywgMHgxZGYyYjc2OSwgMHgxODZmMWRlZCwKKwkweDhmN2YwZTVmLCAweDdjMjFlOGUyLCAweGU4NGNhOWQ5LCAweDkxYmI5N2NmLCAweGZjMzgxMzE3LCAweDVhYTZmN2ExLAorCTB4YmM0NTg2MzMsIDB4N2YxZmIyN2YsIDB4ZGU0ZGYxODYsIDB4ZjdlNzQ2NjQsIDB4MTliOTQzMDYsIDB4ZWVkNTZlZmEsCisJMHhiNWMwYWE0MywgMHhmMmY0ZmMwYiwgMHhjMmE2MTQ3YiwgMHhlNDc3ZTZmYSwgMHhjOTM5NDA1ZiwgMHhjZmNmZGY2YiwKKwkweGYwMjZiNGQxLCAweGVmYjUxZTdiLCAweDYyNWRjN2MzLCAweDEyYzhmZWU3LCAweGNjNjU0YWJiLCAweGYxMmZmNzUxLAorCTB4ZGI1YTM3ZjcsIDB4NWU3ODljYTMsIDB4YjIyZTM1YjEsIDB4ZDc2MzkzMWYsIDB4YjQ5YTY4ZjMsIDB4YjQxZDA4NzMsCisJMHhjZmI3YTE0ZiwgMHhjZGRjYzc5YiwgMHgxYjNkYzUwYSwgMHgyNTdmZTBhZCwgMHhhOWZmYjVmNCwgMHg4MjAyM2ZiNiwKKwkweGY5ZGNlMzBiLCAweGY5OWFlYmRiLCAweDdmM2U1MWY5LCAweGZiNjJhYjhjLCAweDVjOGVjNGM0LCAweDc0MGVmYzQxLAorCTB4ZjcwY2M2ZGIsIDB4M2I1ODU1ZGIsIDB4ZTdjZTUxYjIsIDB4NzY5OWJjOWEsIDB4NjhlYWE3MTgsIDB4NWJkNjIyNDcsCisJMHg0ZTlkM2VkZiwgMHhiNzFkNmY3ZSwgMHg0Nzc3N2IzNywgMHgzZmEwZGM1MywgMHg3OWY5NmE3ZCwgMHhjYzI5ZjNmMiwKKwkweGRkM2ZhODM3LCAweGFkMDBhNWNhLCAweGQzZTdlNWFiLCAweGNkMWM2Zjk5LCAweDBiOGQ2N2RiLCAweGMyZDNiZmJlLAorCTB4YzhiMWE0ZDgsIDB4ODg0ZjFjMDAsIDB4MzBmNDQ4OWYsIDB4N2EwNjRkZGIsIDB4Njc1ZTNjODAsIDB4Nzg4MWU4ZDcsCisJMHg3NmI3YTNlYSwgMHg3NmE3NGJlZiwgMHhjZDcxZTBiZiwgMHhmNzJhNjE1ZiwgMHhhNWZiZjVkNywgMHhlNWY3Njc4ZSwKKwkweDViN2RkMDViLCAweDEzZjczNmU1LCAweDNiMGI0Zjc4LCAweGU2YmU1MjIyLCAweGZlZmMyOWMyLCAweDc3MTY4NWM0LAorCTB4MGI1N2RhMGMsIDB4NmExNDUzZmYsIDB4ZjM5MzdmNjksIDB4N2YwZDIyZmQsIDB4Zjc0NWNjOWQsIDB4ZGFkNmY4MGUsCisJMHg5ODRlYmVmOCwgMHg1NGYxOTY3ZiwgMHhjMjNmYjhmZSwgMHg0NGRhOGJmNywgMHgzMDVmMWJjYSwgMHhiZjYxZjE0NSwKKwkweGJmMDVlZDc5LCAweGUyZjlmZGM0LCAweDc3M2E2OGM2LCAweGFlN2JmMGJlLCAweDJkZDc2ODkzLCAweGM0ZTZjMjdjLAorCTB4ZmU1OTdiZGYsIDB4MzI3ZTY2NDEsIDB4YzlmY2JiZjQsIDB4ZGYwN2Q1MGMsIDB4MjRmMGFmNDUsIDB4MjdhMDVkNTksCisJMHg4ODUzZGIxZiwgMHgzMDgzNDU3ZSwgMHgwNjMwYmU3ZiwgMHgwZWM3Y2FmYywgMHg5OGI4YzJhYywgMHhjZjk0Y2RmNCwKKwkweGY0N2Y1MDZkLCAweDYxNTY3N2IxLCAweDE4YjdlOWJjLCAweGY2M2IyNmU3LCAweDYzYjQ0MmRkLCAweGY0ZDA0MjVmLAorCTB4YzFjMDNmZmQsIDB4NWE0ZDg3NGIsIDB4YTlhYWM0ZmQsIDB4NGRhZmYyYTAsIDB4MmEyOTM1NjgsIDB4NTYyNzY1ZmEsCisJMHhjNGQ5MzllMSwgMHgxMzE4ZjczOCwgMHhmZDhlZjc4YywgMHg2ZmVjNDJiMywgMHhjZWEzMTNjMSwgMHhlN2Y3ODA2ZCwKKwkweGJlYzgxN2VkLCAweGRmNjkzYTAwLCAweDAxNGYzNzBiLCAweGIyNzhiYmJiLCAweDU4MmQ5NzVlLCAweDg2NjY4ZjhmLAorCTB4MzMzOWJlMzgsIDB4ZDlkYTNlMzgsIDB4OGI3YzdhYWQsIDB4NzE4Y2RkNDUsIDB4ZDUwNWUzZjcsIDB4M2ZlODI0NTMsCisJMHhjZWFlYTFjMywgMHhjNGQ4YzkxOSwgMHgxYmFhZjlmNSwgMHhjNDc2Y2ZjNiwgMHg5OGYxOGNkZCwgMHg4MzdkYmVkNiwKKwkweDFmMThkNWY4LCAweDAzZGU2NTZiLCAweGQzN2Y3ODY2LCAweGI2NmU0M2UzLCAweDA3ZTM2MjAyLCAweDMwYThjNjc5LAorCTB4MjlkNjQxZmYsIDB4ZjRkZmE3YWIsIDB4NDQ2M2U0MWQsIDB4MGQ1OWYzYmYsIDB4OTM5MjA0ZjYsIDB4ZjRkMjg4NDMsCisJMHhjMmRlZmMxNSwgMHhlMzRlZjkzZSwgMHgxZjU3ZGI3YywgMHhjM2NmYzFkMSwgMHg1ZTI0ZjVlOCwgMHg1OTE5NWQ2ZiwKKwkweGMzMTJkYzVmLCAweDJhMzViYWY5LCAweDRkNjZmYmYyLCAweDAzYmUwMDNmLCAweDhiNmQ3ZjE0LCAweDA4Y2YwZmY2LAorCTB4MWY5MDBmZWEsIDB4YTc5MjI0ZWIsIDB4ODA3ZjVjNzUsIDB4OTNiNGNkMWMsIDB4ZWZlYzQ2ZGMsIDB4YWI2YmNhZGIsCisJMHhhYjc5YWY3NiwgMHhmOGM2OGVlNCwgMHgzMGM3YWU4MiwgMHhjY2UzODY4MiwgMHhmYTBkM2JiNSwgMHgwMTdkYWYzOSwKKwkweDMxNTFkN2U5LCAweGM5Yzc4NzJhLCAweGM1MzA5M2YxLCAweGI1OTg0N2E4LCAweGRmNzQzYjNkLCAweDNjZGE3N2ZlLAorCTB4ZTNkM2FlMzMsIDB4NzQzOTAxM2YsIDB4OGVmOTY5ZGYsIDB4OWY5ZTRiZmMsIDB4N2YzOGM3MmQsIDB4OWMxZGJkODgsCisJMHg2NzhhNTRjNywgMHhmYTE3ZWJmNCwgMHhiYmZkNmE3MywgMHg1ZjA0YWU3MiwgMHgxNWYwNjVlYSwgMHhkY2JhZjg0ZiwKKwkweDE5ZmQ4MzNjLCAweGZiZmQyZmUzLCAweGMxN2RiNTkzLCAweDIyM2FlMzI2LCAweGE0ZjM4NjQ3LCAweDdmODAyN2NlLAorCTB4MmNmZTg4NTMsIDB4OWVhOWY0ZDYsIDB4NmJiZGQxMDcsIDB4MDY0ZmU1MjQsIDB4MzFlN2U1YzcsIDB4YzRiZmJlODEsCisJMHg4MWYyNWRkZiwgMHg5NjNkNDUzZSwgMHhjNTZmYjkyNywgMHg3MWVkNzlmNiwgMHhjMGVmZGEyYSwgMHhiZjFhZjU2ZiwKKwkweDNhNmZjODQ5LCAweGFhZTM1YjlkLCAweGViYmU2OWYzLCAweGZhNGJiMjA0LCAweDNhZGE0MWQ5LCAweGQwMjRkNzlhLAorCTB4OWUwZDk5ZWYsIDB4ODdlNzE1ZTcsIDB4N2JlYmE3YzAsIDB4ZWI1NWJmZTgsIDB4ZTdlNzNjN2YsIDB4ZjlmOGZiNjcsCisJMHhjZDFmOTQzZSwgMHgwZWFlNjc5ZiwgMHgxYzNkNWZiYSwgMHg3MzI4ODVmZSwgMHhkNWViMjEwOSwgMHhlYjhhMzZhYiwKKwkweDVhYmI3OGViLCAweDg1ZWRkN2ZlLCAweDI1ZDcwMWYyLCAweGY4Mzc3ZDA3LCAweDg0ZTFjMDY4LCAweDFlNTE4Yjc2LAorCTB4N2NiNTVmNTAsIDB4YjY2NGY3NDIsIDB4N2YwYzg5YjYsIDB4OGRlNzAwYjIsIDB4ZDc0ZjIzN2EsIDB4ODc5NWJlOTMsCisJMHg1YmIyMjQwYSwgMHg0OWQ5N2E4MiwgMHgzN2FlOGJmNiwgMHhiMDZiNTYwMywgMHgyYmI1YjlmZCwgMHhhZjUxZWIwYiwKKwkweGM3ZWNmNzZhLCAweGM3YzVhMDhiLCAweDczNDhlMTA2LCAweDkyNzdiYjcwLCAweGRkZmM0NTk3LCAweDVkYmIxY2I4LAorCTB4OGYzNDIzZDcsIDB4ZTgwYTJiOGQsIDB4NmQyYTg1NWUsIDB4ZTFkNDlkM2QsIDB4MzQ1Mzc4YTMsIDB4MTA0MjcxZTIsCisJMHg3ZDdhZmExZiwgMHgxNWUzYTVhNywgMHg4MTk3YmNlZCwgMHhkODNhZjUxZiwgMHhhY2E2OTUyNSwgMHg3ZWY4ZmY2MCwKKwkweGU3ZGYwODY2LCAweDg0MWYzODM5LCAweGVhYmJlN2QzLCAweDBmODNjMDI3LCAweDBkNDNmMGYxLCAweGM3NTAwOWVmLAorCTB4MDQ5ODJkN2IsIDB4ZmRlNjE3ZWIsIDB4NmI1YzUwY2MsIDB4NTZlMDQyMzIsIDB4MTA0ZTNlYjgsIDB4NWQ4ZjVjNGQsCisJMHgwN2UyMmU0NiwgMHg1OGY3ZWQzMSwgMHg0MWNmMjRlYywgMHhlNWJiNzA3YywgMHhlNzE2ODcwMSwgMHgzZjI5ZWVkNSwKKwkweGExMzkwMjY4LCAweGNmM2UzNjdkLCAweGQ0Yzk1ZGVlLCAweGRkYWQ2Y2VmLCAweDZmMmY0YmRmLCAweDc0OTZmMmQ2LAorCTB4YjVlMmIxN2IsIDB4Zjg0NmNkZDQsIDB4MWNiYjdmNzksIDB4NDc3OTJmMWMsIDB4OGVkMDYzZGQsIDB4NWM1MWVlMTksCisJMHhiNWU0MWZlOCwgMHhmOThmZGNjZiwgMHhmMDdiZDkyNCwgMHg3YzgyMDQwNywgMHhlNWMyZGQ5ZSwgMHhjMzRiYjgxNCwKKwkweDQzZGI5YmNiLCAweGQ4NzRhZGZiLCAweGJiZmIzOTc1LCAweDI4ZmIyM2NjLCAweGNiYTQ1N2U3LCAweDVhNzIyMTdkLAorCTB4YmUzODUwZTMsIDB4YzQxNjdlNjAsIDB4YTNkNDY0YTcsIDB4ODNmN2Y5N2EsIDB4Y2YxZmIzYzMsIDB4M2UwMzk1MjUsCisJMHg3OGViNmQ1MCwgMHhiZjk5NmQ2YiwgMHg3YzcyODZkMiwgMHg4ZTUwYjk5NCwgMHg5YmU2NWJiYiwgMHgzMTVkMjE0NiwKKwkweGEyMTljYzExLCAweDc5ZjNkNjFmLCAweGYwMjg3NmU4LCAweGU1ZjIwYjY1LCAweDFhMTBjNzNhLCAweDc3NTFmODZmLAorCTB4MWZiYzBlNzQsIDB4YzYxMzc2OGUsIDB4N2VlYzViN2QsIDB4MGVmYzIzZjQsIDB4ZTIwNzJlZWYsIDB4MTRlZjU2NzMsCisJMHg4Y2FkNGZkYywgMHg4NWI1YWVhZSwgMHhkZjZiZWYzYywgMHg4Zjg5ZWQwNiwgMHgxZmVlMjJiZCwgMHhmOGMwM2Y5NSwKKwkweDdjZGFmMWJkLCAweDAyY2ZhOWEwLCAweDIwYzg1NWUzLCAweDBmNTQ1OWE3LCAweDY1NWFkZTIwLCAweDNlZjdiZWRlLAorCTB4NTYxMWE1ZmEsIDB4Zjk3YmYyMjksIDB4OTViZWZkNjAsIDB4NTM2ZGYzZjgsIDB4ZmQxN2QyMWMsIDB4Y2I5M2I0MjQsCisJMHhlZTFhNGY0NSwgMHgxNmMxYjI3YiwgMHhlMDAzYWUxNywgMHgxZmJmMTA3NywgMHgwNmM5MzFiNCwgMHg0YTFlZmZmZCwKKwkweGM0ZDNkM2Q0LCAweDZiOGU3NGE1LCAweGZiNDA5NjVhLCAweDhmN2ZiYTQ0LCAweGE0ZmQwYjdhLCAweDRkMTdiZjNiLAorCTB4M2MyZWM4ZmMsIDB4ZDNlMzBjMzgsIDB4NGU5Y2QxMDksIDB4ZWI1NThmZDAsIDB4MWIxZDZhYzcsIDB4NDhmZmJmOTQsCisJMHg4ZWZlNDkxZiwgMHgxNDFkYmViZSwgMHhlMGU3ZWEwNCwgMHhkNzM1ZDc0ZCwgMHhkODQxZjg4NSwgMHg4M2ZmZWExZiwKKwkweGE1YjQ4Y2MyLCAweDFmOWFmZmM4LCAweDdjNjFmNjQ3LCAweDdiNDVkZDcwLCAweGNlMjFhYzY1LCAweGViZTBkM2U2LAorCTB4MGEzZTQ3NDgsIDB4M2VkMTQ3YjUsIDB4N2Q2N2IzZWQsIDB4MGNkZjU3ZjMsIDB4ZjRlMjc2N2EsIDB4NzE1ZTAwOTYsCisJMHg2ZThhY2I1ZiwgMHg2ZmU4MTdmZSwgMHgzNmIzZDgxYSwgMHg4ZDNlYzNjMCwgMHhmODY2MGUyZiwgMHgzZDRmZGM0NCwKKwkweGZiYTA1YzM4LCAweDc5NDUwZmRjLCAweGUwOTVhYTczLCAweDVjNWE4OTM4LCAweDMzY2I1MTIwLCAweGU1ZTI4YzRmLAorCTB4MWViODYyMGYsIDB4YWY4NjNjZmMsIDB4YmNhODM3ZDcsIDB4MWM4OGU4OWUsIDB4YmRhZDk4NDcsIDB4ZWI4OWE5ZmYsCisJMHg5MWY5MzVmNywgMHg2ODRmZDFmMywgMHhlZGFhZjVmYSwgMHhmYzIxMWNkZSwgMHg4ZTEzZWViZSwgMHhkZDdkZGEwOSwKKwkweGUzYzc2Zjk0LCAweGZlMzQwYmZkLCAweGU4ODczYjA2LCAweGY4YWJiNDE0LCAweDg3NmU5ZDdlLCAweDRkOWY2ZDllLAorCTB4Zjc4MjEzZjUsIDB4MmMwNDdiYmQsIDB4OWY5MDRmM2QsIDB4ZjE0OGFlZjQsIDB4NmY1OGUyYTEsIDB4NTVhNWU2MjIsCisJMHhjYjhlNDU0NCwgMHhmNGYwZDIwYywgMHgzOGEzMGQ1OSwgMHhjZmRjMjllZiwgMHhiN2JmZTZjYiwgMHgxYjI1ZjU4NSwKKwkweDFkN2JhNDllLCAweGUyOWY5OTRhLCAweDFhMWI0NWJkLCAweGM4YWViZjY4LCAweDgwYTczMDJmLCAweGM3ODc5OWZlLAorCTB4OTQzYTM1ODEsIDB4NzEwZDExNmUsIDB4YjU1MmM1ZTcsIDB4ZTQxMzliMWMsIDB4YWUxZGZjNWIsIDB4OWIyNWY3ZDAsCisJMHg1N2VhMTljNiwgMHgxODE2OTc2ZiwgMHg3YTgyM2JmMiwgMHhiZmVjOTBhNywgMHgzZTc1N2VmMCwgMHg4ZjRmYjcwZiwKKwkweGYxMGQzOGQ3LCAweDg2MWIwNWVlLCAweDc4Y2RmMjE3LCAweDczMjE3ZWRlLCAweDM2MTc3Y2QxLCAweDExZWYxOTY2LAorCTB4YjJiODRjNmUsIDB4MWVjMTgyN2IsIDB4NTM4NDQ1ZjUsIDB4M2ZhOGZkMjYsIDB4ZjdmODBlM2YsIDB4MTdmN2M0ODUsCisJMHhlMDhjM2E3YywgMHg3YmMzOGJmOCwgMHg4ZTAxOGM1ZCwgMHhjNDMzZTY2OCwgMHhkZmYzMjZjZiwgMHhmOGYxYjQyOSwKKwkweGVmOGZmMDIzLCAweDdlNDA3NjUyLCAweDA3ZjU3N2NjLCAweDFmYzAxZGFlLCAweGZhODdmZGM4LCAweGI5OTM3OTAzLAorCTB4MDI0ZDY1ZmUsIDB4OWM0Y2UwZTUsIDB4NjZjZmI0NmEsIDB4NmU3NWYwYzcsIDB4YzFiNDRjNzYsIDB4Njc5YTJiM2UsCisJMHg2YjU3Mzc2YywgMHg3NzZiNTczNywgMHhhODRhMzhiOSwgMHhhMTY0MjY1ZCwgMHhlOWZkZTMzZSwgMHg3MTk1MWZiZiwKKwkweGZmY2E2ZGZhLCAweGVkYzMxMGRjLCAweDZlYWE5ZmQ3LCAweGJiZjQwYzZmLCAweGQwNzczYjU2LCAweGVmZGFkZTZmLAorCTB4ZjczNWFkNGEsIDB4NWU1Mjg1ZTUsIDB4MWU2ZmU2ZTAsIDB4MDlkZmMzYWMsIDB4ZjYwMWRkZTksIDB4ZmNjMWU4M2YsCisJMHg3YmEwZGY2NywgMHg2ZWVmZjRiYSwgMHhiNDMyZDE1ZiwgMHhhOTU0ZjAwOCwgMHg4YmI5NzNjOSwgMHgxNWRjYWZjZiwKKwkweDNmNDE4NzkwLCAweGFlMWNlNTI5LCAweDgyN2Q5NmI0LCAweDVhNWRmMjE0LCAweDIyYjc2ZjA5LCAweDJmZjA2Y2M2LAorCTB4ZmZkNWEyN2YsIDB4NjU0OWM2MzUsIDB4MTg0MDQ5NWEsIDB4MzY1MmVkMDYsIDB4ZWMyNDExNmQsIDB4MGI1NzdmMGYsCisJMHg2NmE5NDllMCwgMHg5M2RmZDBmZSwgMHhlZGNmMTk0YSwgMHg2ZmM3ZGI5YSwgMHgwNGU2MTYxNiwgMHg5YTY4ZDBmMSwKKwkweDVjNjJhMzkxLCAweDg1ZGEzMTM1LCAweGFhNDdjY2ViLCAweDUwZjEwZWI3LCAweGNlODA1MWZlLCAweGE4ZmM0YzQ5LAorCTB4YmRiYjQyNWQsIDB4MjNkNzc1NWIsIDB4NzA3OGViN2YsIDB4YWUwYTZhOGEsIDB4NzExZmQxYTMsIDB4ZmNmYTliMzgsCisJMHgzMGJlYmU2MiwgMHg0NzY2YThmNiwgMHhlOTc2ZWIzNywgMHg0MmVkYzY2MSwgMHg1NzEyYTc1YSwgMHgzZWZjMzA4ZSwKKwkweGI2OWM2MjYxLCAweGVmMzIyNDRlLCAweDM3ZGE4NTRlLCAweGEzMjdhMjMyLCAweGNjYWUyNGY5LCAweDJjNzZlNjZlLAorCTB4MmNiNGY3YTcsIDB4M2U3YzE2Y2YsIDB4YjFjOGYwNmQsIDB4ZDY0N2RmNzgsIDB4YmY4NDgwZGEsIDB4MjZkYWZlM2IsCisJMHg1MWZiYzQ1MywgMHhjM2ZjMzU5YSwgMHhmOWM1OWUzYywgMHg5Y2I4ZjNlOSwgMHg5OWRiZDA1ZSwgMHhlODRmODgwNywKKwkweDNkM2QxMGYyLCAweGQ4YzFkZmIyLCAweGZmM2VmNGUzLCAweGU5N2JmOGQ5LCAweDk5N2FjYWZlLCAweGM3NGU0ZjdlLAorCTB4NjllYWI3N2YsIDB4YjRhNmJjNDEsIDB4MzcwODE2NmMsIDB4ZGM3YTc4ZGEsIDB4NWNhMzlmMGUsIDB4ZTc4ZDk3MWUsCisJMHhmYjk0MDczYSwgMHgxNjg3M2IxNSwgMHhiZDdkY2E4NSwgMHgxY2Q5ZjQ0YywgMHhkYmFmZTc5NiwgMHhlMTg4N2ZmNywKKwkweDU4OTBlYWViLCAweDRiYzQzZWNmLCAweDhhM2FkYjY1LCAweGMyZDkyY2VmLCAweDQwNjdmNzdmLCAweGZlMjE1Y2ZjLAorCTB4MDdlZTEyODQsIDB4ZmJlMWNmOTQsIDB4NGFjZmY5NWUsIDB4N2FiMmZmNDQsIDB4ZTVhY2ZiZmUsIDB4YjhmMDc3ZGIsCisJMHgwYjk5OGZjZSwgMHhjYjc5NDNmNSwgMHgwNzI4YTEwZSwgMHg4NzczMDc3ZiwgMHg5ZjA0MjhiMCwgMHhjYTdlZTVhOSwKKwkweGFlYzZiZjgzLCAweDViZDcxZmNiLCAweDcxOGVmY2UxLCAweDBlNTNiNDYyLCAweGU4N2ViOGQ5LCAweGI4N2M1N2NjLAorCTB4ZjY2OWRjMWYsIDB4Y2ViYjYzOTYsIDB4ZTYxNzY4ZTQsIDB4ZmZmOGU5NzcsIDB4ZTk5YjhlZmQsIDB4YTc3ZGI1ZGMsCisJMHhhMzY1ODAyNSwgMHg4YWM5MzlhOSwgMHhjYWQ3MGVmYiwgMHg2ZWFiZTQyZSwgMHhlOTEyN2JkNSwgMHg1YTc5MjcxMywKKwkweDc4ZDhmYmYxLCAweGJlMTZhYmJiLCAweDU4ZDg1YTc1LCAweDNjNzJiOTU1LCAweDhmZTMwYzRjLCAweDcyZTYzZjg5LAorCTB4ZjQzYWE0OTMsIDB4MjRiMTg2YmMsIDB4ZWI5ZGFhMzcsIDB4NjdkNzEzMmQsIDB4MWU3Y2NjODcsIDB4Zjc4NzE5M2IsCisJMHhiM2VlMzEwNywgMHhlMzg3ODcyNCwgMHhmMjk0ZGM2OCwgMHhjYTFmOWQwMCwgMHg3MGQzYmQzOCwgMHg1ZmM4MzBjZSwKKwkweDFiN2RiZmVlLCAweDJjM2ZmZjdlLCAweDAwMjg0YmExLCAweDAwMDAyODRiLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLAorCTB4N2RkNWZmMDAsIDB4YzU1NDdjN2IsIDB4YmRkY2Y4ZjUsIDB4MGRkOTBhZmIsIDB4ZGMzYmY3OWIsIDB4MjQyODBjMTAsCisJMHgwMTA0OWU2YywgMHg4Nzg0MjRkOSwgMHgyODAyNmUyMCwgMHg0Nzc5NmJjOCwgMHhkMjAyNmM5MiwgMHg2ZGZhZDBmZSwKKwkweGU1MzE4MzE2LCAweDE2ZDQ2YjZiLCAweDg4MmVhOTQ1LCAweDgzNWFiNjk2LCAweGI4MGQwNmEyLCAweDQ3ZDYyMjI4LAorCTB4MmQ4YWE1MjMsIDB4MjIyMGE1ZGEsIDB4ZmIxYjY0ODQsIDB4NmZjYjU2YzAsIDB4ZWM5OTk5Y2UsIDB4MGYwZDliZGUsCisJMHg3Y2Y5ZmI2YiwgMHhkY2M5OGZlMSwgMHhlNjczOWY3OSwgMHg5Y2U3MzM5YywgMHhiNTMzMWQ5OSwgMHgyMjhjYThjZCwKKwkweDM4OWFhNmE0LCAweGZkMmQzNGJjLCAweDg0ZTkwZWU5LCAweGYwMGI5MDg1LCAweDgzMjEyMjZmLCAweGYxMjEzMjZjLAorCTB4YmQzY2E0ODQsIDB4NTgyYzUyNGQsIDB4MWM1YTdmYmUsIDB4MDUyNjI3ZDYsIDB4YWVkODRiYmUsIDB4YTBhZjk2ODYsCisJMHg4NDIyNWJhOSwgMHhhMGU0MjU4YywgMHgzMWNjNzg4MSwgMHgyYWU4YjQ4NCwgMHhmZDY4ZDk0NywgMHg3YjQ4ODQ5NiwKKwkweDY2M2IyZDEzLCAweDY4ZGI0NTczLCAweDlkNjM5NjdmLCAweGVhYjRhYzA3LCAweGEzM2U2Mzk4LCAweGRhNGJmNjhiLAorCTB4NDI2NGM3ZTksIDB4MTIxMjMwZGUsIDB4OGMxZGRiNDEsIDB4NmRkM2VkNjAsIDB4NDIyMjkwNzQsIDB4MDc4OTFiMjYsCisJMHgyMzNkMWJiZiwgMHhjMWRmZGExNCwgMHhiZmIwODNhMSwgMHhhNmVhYjc5NywgMHhjMzdiNjk3YSwgMHgxOWQ4YjIyMCwKKwkweDliNzRlZjMyLCAweDZjYTVkYjBlLCAweGU4ZTkyMWRkLCAweDVhNDhiOGY3LCAweDUxM2YzMjFlLCAweDU5NWIwMWVmLAorCTB4Y2M2N2NjMjYsIDB4NDM4NDRlZDQsIDB4YWUzZDU2ZGQsIDB4MWNlOGMyYTcsIDB4YjA1NDY2YjYsIDB4OGZlODY4ZGUsCisJMHhlNmVkN2JkNiwgMHhmYTdlOGM0ZiwgMHhiZDJmYzdmZCwgMHhiZjUwMjQ2ZiwgMHhjMWI0NzI1NSwgMHgzN2RmNWJmYywKKwkweGE5YTFjOWNlLCAweDQ5MzJlN2U3LCAweDYxM2E2NDIwLCAweGYwYmYzNmZmLCAweGRmYTE1MWJlLCAweDcwYTZlZmE3LAorCTB4NzZlYWY1YTIsIDB4YTMyZmQyZWYsIDB4YzVhOTU3NjksIDB4MjQyNjhkMjMsIDB4OGI2YmNjZjMsIDB4ZGVmZDIxNDgsCisJMHg3NDExMjI2NiwgMHg1NzM2ZGQ2ZSwgMHhmYmNlOGQ5MSwgMHgwZTUzNWRjZCwgMHg1ODg0NTE0OSwgMHgyMGY5MzM5ZiwKKwkweGM0MjFmMDE1LCAweDA2YjRlMTlmLCAweDNhNTIyNWU3LCAweDcyMmZjZTMwLCAweDEwYjNmZDJhLCAweDU1ZWY0NmIyLAorCTB4OTVkZGYwOTksIDB4YjdlYjQ1NTksIDB4Y2NmODMwYzYsIDB4NDJlMGNjMWYsIDB4MTU3YmVjMmMsIDB4MGI4MDk3NWYsCisJMHg4YzBhN2YxZCwgMHhkY2U1OTE1ZiwgMHgyNDU0ZmQwMSwgMHgzMjliZDg0NiwgMHhhZmY5OWU2MSwgMHhlYmRjMjk5OSwKKwkweDgyM2Q5MmVjLCAweDY3MmI4ZDU2LCAweDU3OWQwY2YwLCAweDc5Yjg0ZTY1LCAweGUyZjFjMDZkLCAweDQ0ZjhkOTYzLAorCTB4NzE4MGNmZWYsIDB4ZWZiMmYxMDksIDB4ZjkyMTY5MzIsIDB4Mzg3M2Y2YzEsIDB4MWY3N2U5YmUsIDB4M2E4NjRlZmIsCisJMHhkN2YzODI3MywgMHg0ZDgzNmZlMiwgMHhlODYxZmFjMiwgMHhhM2FjMTE2YywgMHhjN2NmOThmNiwgMHgwZjUzYWNlOCwKKwkweGU2Nzk5Njc0LCAweGQwNDNlMjMwLCAweGVhYjZjZmNkLCAweGQ1ZmQxNTMxLCAweDVmZDg4Y2Q5LCAweDcwOGY0ZDlkLAorCTB4MWE3ODBjZDksIDB4MmMwMzUzNGMsIDB4Y2MxYmE2OWEsIDB4Yzc4NTBmNWUsIDB4MWYyNmYzOWIsIDB4N2UyOTcyOTIsCisJMHgyMGZhMzE2ZSwgMHhiNGI3NDM3ZCwgMHg0OGRmY2ExNiwgMHhlOGI3ZTM2MSwgMHhkZjIxNmI3NCwgMHgzNDg1OTc3MiwKKwkweDZlMWQ1ZTIxLCAweDM3NmJjZjk4LCAweDZhN2UyMTQ3LCAweDI2YmQxYWU3LCAweDlmOGZjZmRhLCAweDYzZGU1ODk3LAorCTB4NjdmYTEyZjEsIDB4NzJmNjZiYWQsIDB4MjJlMjQ3NjgsIDB4ZmUwMjRmZWMsIDB4NzM4YzA3NWMsIDB4NGFlOWZkYWMsCisJMHg1MWJmNmU3OSwgMHhiN2E3ZGZhMSwgMHhmMDI3ZmRiMSwgMHhlOGM2ZGI1MCwgMHgwMTA3ZWM0YiwgMHhiZDNjMjBkNywKKwkweGYwMjRmZGFhLCAweDhkYjA3ZjMxLCAweDE3YTUwNWQxLCAweGNlY2Q3NzgwLCAweDMzNDlkYjA4LCAweDAxMDJlYjFiLAorCTB4ZTU1NjhjZmEsIDB4NmQ5M2RiZWIsIDB4ZjMwNDQ3MjcsIDB4ZDAwN2YwMzUsIDB4ODE2MjBlYzEsIDB4NzlmMmQ2NzksCisJMHhlZWI5ZDNjZSwgMHg2NzU1ZmQ4MywgMHg1MDM0MWZmNiwgMHgwZDFmMTZkNCwgMHg4ODFmN2VlMCwgMHhmZmQ2NmI3ZSwKKwkweDAxNjRmYjNhLCAweDBlOTNhYjIxLCAweGFkZjYyYTYxLCAweDdmN2FhODYxLCAweDZmNzhlNTZmLCAweDdiYjY5NDgyLAorCTB4NGQ0ZGQzODIsIDB4Y2JlZTFiNjEsIDB4YjgwZDkzOWEsIDB4MTk1MzJkOWYsIDB4MjMxY2IzNWYsIDB4MTMzYzUwOGUsCisJMHhkZWJlNDNmMiwgMHg0NTdkYjE3YiwgMHg5OTY0ZGI2NCwgMHg3MWUyYmRjMiwgMHhmYTQ0ZDZjOSwgMHhhYmE0NGZjZiwKKwkweGEzNmNlMjI0LCAweGY1YjY3ZGZkLCAweDAwMjVhOGY1LCAweGM4MmVhZmRmLCAweDM3YWU5OGE0LCAweDM3NzdhZDgyLAorCTB4M2I1ZDNiZTcsIDB4ZGU5MWMwMjksIDB4Y2MyNDhjMWIsIDB4M2ZiNzJmN2EsIDB4MDEyMjNiZTIsIDB4ZWMzODZiM2MsCisJMHgxZjJlOWViYiwgMHgxN2E1MjlmYiwgMHhmNmMxY2VjZiwgMHhjZjkyZThhYiwgMHhmNmViM2QzZSwgMHhiYmJjZTk0ZiwKKwkweGNiYjQ0Yzc2LCAweDRlNGQzNjQwLCAweDdjNDA5ZmE0LCAweGE1M2I3ZDg0LCAweDRjOTkzODlmLCAweDM3ZGUyODk1LAorCTB4MzUxZWJkYjQsIDB4ZmNmYmI2OGUsIDB4ODFmM2EzOTcsIDB4ZjdjZGJmNmYsIDB4ZTVlNzk5ZmQsIDB4YmI5NzAwZjUsCisJMHg3NWVjZjY3ZSwgMHg5NWUzNWU1MCwgMHhjZTMwNGQ2MiwgMHg5NWZmYzdjZSwgMHhkZWE5ZmI0MiwgMHgyNjEwMGY1MSwKKwkweGQ1N2NiZjRkLCAweDc0ZjVhN2U4LCAweGZiZWM2ZGRlLCAweGE4MzZjMWNlLCAweGY3MTNmOWY3LCAweDZlZjAwNzVmLAorCTB4ZjJjMjZiNmEsIDB4YzM2YzRmMzMsIDB4N2IzZjZiZmMsIDB4NjgzZmRmNzYsIDB4OTQ2NzVhYmQsIDB4Nzk5ZGVhMWQsCisJMHhhNWUyM2Y3ZSwgMHhjMDc3YTVkNiwgMHhlYmEyMDc3YSwgMHgzM2Y2YmJjZCwgMHhlMTI2ZDk3ZSwgMHgxOTczMjM3ZSwKKwkweDJkNzQxMzFmLCAweDlmZjNmN2U4LCAweDJhMWIxZTJkLCAweDE2ZjdjNDM3LCAweDgzM2I5NzIzLCAweGNiMzkxYzk4LAorCTB4OTk0ZDZmZjcsIDB4YjNkMjA1YTUsIDB4ODVjYzQ0Y2YsIDB4ZmU4ZGJhZjUsIDB4Y2Y5ODY4ZWMsIDB4MWYxNzQ2MjgsCisJMHhiNmQ0Nzg3MSwgMHgyZGI4MzFhZCwgMHhmOWZiMWVkOCwgMHg0ODdiZWU4MCwgMHg5ZTdkMjg3MywgMHg2YjRlZjRhMiwKKwkweDAwNTBiOGVkLCAweGViMGFmZGUzLCAweDExMjU3YWQzLCAweDJmMzdiZTE0LCAweDdjYzEyZTM4LCAweDE4MzU0NzIyLAorCTB4YmY5ZTcwNmEsIDB4ZDU3NGU1NjQsIDB4ZWJjNWU1YTEsIDB4ZTk2YTNkMTgsIDB4MDU5YjBiZTAsIDB4OTA3ZDhiZWIsCisJMHg0ZDMyYmJiMiwgMHhiMjYwM2U0MSwgMHhkNmNlM2UzMywgMHg2YWVkNTI5NywgMHhkN2VmZDJiMiwgMHg2NWQ5NzNhZiwKKwkweDRmOTdjNzhhLCAweDRhOWM5ZTFmLCAweDIxMWIzZmYzLCAweDY1ZmUyMDE1LCAweDhmMzljOTg5LCAweDViYTljNzA1LAorCTB4ZDA0ZTQ2NWYsIDB4ZDlhMmVhZjksIDB4MTFiMDQ5N2UsIDB4MDdjOGI1ZmQsIDB4ZDdiYTMxYjYsIDB4ZjIwNWJkMTMsCisJMHg4OWYyMDBmYSwgMHgwNzJlMTZiYSwgMHgxMjc5YjA3NywgMHg5NjYzMjA3MywgMHhhZTU5ZGIxNSwgMHg4M2NlMDk4ZCwKKwkweDMwNThiM2I2LCAweDI5YjhjODFmLCAweDY3OGVlNDA3LCAweGM1MWRjYTJlLCAweDIzM2RmMzg4LCAweGU0ZjEwMWY4LAorCTB4ZWUwOWNjMmUsIDB4NzExZDA0YjcsIDB4OGMxM2ZlMDEsIDB4N2UzMGI1MzQsIDB4NGZmYjQ5NTMsIDB4OGE0ZDJlOGYsCisJMHgwOWE2MGEyZSwgMHgxNmI5NTg4MywgMHhmMmYwYjc0ZSwgMHg5MjNiNDUxZiwgMHgzYjVlMDFhMiwgMHg2MGYyNTU2MywKKwkweGRhZjJiZTIwLCAweDZlNGNkZGNkLCAweGU5MWM3MmJmLCAweDA4NzQwZGQwLCAweGFhNGViYmUzLCAweDY0NzJmNmU0LAorCTB4ZjcwZTk0YWUsIDB4NWMzYTQ3MWMsIDB4YWJmOGNlZGUsIDB4YjhkNGJkYmIsIDB4MjU5YmE2OGMsIDB4ZWZlNjE3MzIsCisJMHg3NDA0ZjRlNiwgMHg5YmY5YTc2NCwgMHg3ZDcxYTNhMiwgMHhkOWZjZWJlZSwgMHgzOWJhYTdjMCwgMHg2MWVmNzVkZCwKKwkweDRlODZmNmY0LCAweGJjZjgwMWU3LCAweDM2ZTQ3ZGIxLCAweGY5NWEwNzkwLCAweDExM2I1NTI4LCAweDZmOGE2ZWRmLAorCTB4ZDY3YTA0OTMsIDB4NjdhMGMzYmEsIDB4M2IxMzU1ZDUsIDB4NmVmNzU3ZWMsIDB4MDgxYTFmYmUsIDB4N2I3NzA3ZWUsCisJMHgyZmU4NzJlNSwgMHg1ZDlhNmUzNSwgMHg5OTJmNTA5NiwgMHhlZWYzNGE5YywgMHhmYjA0NTI1YSwgMHhkOTZiNjUyZCwKKwkweGQyMGJhMDFlLCAweDIwYWI5MTJlLCAweDBkZGNlZDVmLCAweGFiOGZhZmVkLCAweDIwOTljYmIzLCAweDk5MjdiNmY3LAorCTB4NDdlYmZkNjksIDB4Y2RmYjYzMTQsIDB4ZjQyOTRhZTksIDB4YjYyMGE5ZTcsIDB4NzA2ZjIxMjcsIDB4OWNkYjNjYTEsCisJMHhmMjBlZDIzYywgMHg4OGRhZWRjZSwgMHgwNjUxMTc3YSwgMHhiODljYTFkOSwgMHhiZWExNmJmNCwgMHg2YzgwYjNkYiwKKwkweGUzZWNjMjkyLCAweGNiMDM5MjNkLCAweDA4ZGU5MWJkLCAweDNiN2E3ZWRhLCAweGVkZGM3ZmQzLCAweDEzOWYxZjZjLAorCTB4YTFhOTExZjAsIDB4ZDc4YzExNzMsIDB4Nzg4OTgyZmQsIDB4YmQ5ZDIwYTQsIDB4OTMwYTY3YjksIDB4NTA5YTJmYjMsCisJMHg3NDZkOWVjZSwgMHgzNDU0MTM5MCwgMHgxMDU2OGM4ZiwgMHgzNThlMDJhZiwgMHhhMDNhOTlhZCwgMHg5OTY2NDI1YiwKKwkweGY4Y2IxZTYwLCAweDRjMGQ1YTNjLCAweDM5NzM0NDZlLCAweDliMmY3NTkwLCAweDFmYmU3MmM3LCAweDc4ZWI0Nzk2LAorCTB4YWZmYmU0NmEsIDB4OWIwNWM5OTUsIDB4ZTBlNDE3MjcsIDB4OTIxZTNlMzksIDB4NzM5NzAyNDUsIDB4ZTViYWU4NzQsCisJMHhiNTI3ZGMzZSwgMHhlMmZlYjM0ZiwgMHhkYmJjOGU0YywgMHhlODU1ZTg0MiwgMHg2YzdhNWE0NywgMHg2Y2E2ZTNlMiwKKwkweDMzMDEyMDNkLCAweGE1NWFkOTQ5LCAweDU3ZDdlN2RhLCAweDVkM2Q1ZjEzLCAweDc1NWJmNWU3LCAweGE4Yjk4OWJlLAorCTB4ZmM4MmRkMzcsIDB4NmM5MTgzN2MsIDB4NzdmN2ZhOTcsIDB4NWJlMzM0NGYsIDB4M2NjZWIxMTUsIDB4Y2RkN2U0MDksCisJMHhmYTNmZDQxNiwgMHg4NzIwZTlmNiwgMHhiOGY0MDIyZSwgMHg4NGRlYzk3YywgMHhlYTE2NzBhYiwgMHgwOWQzYmQ2OCwKKwkweGVkZTAzYjU2LCAweDVhOGUxYzQ3LCAweGJkYWZhYjdkLCAweGQxOWMwZjQ2LCAweDQzMjVjOWVhLCAweDQxODZlOTY5LAorCTB4NTQ5ZTAxNzMsIDB4YTE5OGI3NWYsIDB4YTdiNjhkOWQsIDB4OGZiNjEyZjUsIDB4ZjIxMzYyN2IsIDB4ZjdlYzI2YWIsCisJMHhlYjFiNjhmNiwgMHhkODU5ZDYyNywgMHhjYjJlMmMwMCwgMHgyN2M5OGViOSwgMHg3YWRjM2RhYiwgMHg5ZTg1YTNkMiwKKwkweDA3NGYyOGJkLCAweDgyZGIzM2Y0LCAweGFmYzdlMWZiLCAweGJkMTk0YjQ4LCAweDAxMjg0MTUxLCAweDQxZmRiMjNkLAorCTB4NTI3OGZlZTgsIDB4M2Q0NDdhNDEsIDB4ZjRlMGRkY2EsIDB4YjY0N2E3ODYsIDB4YWY1NGRjNWYsIDB4ZDI5YjNkMDIsCisJMHgyN2E2NWFlMywgMHg0ZmRiMDg1YiwgMHhhNzIzMmU4YywgMHg3YzAwNzkzMiwgMHgxNTlmNTQyYiwgMHhlZmJiNTRmYiwKKwkweGVkZjZmZDA1LCAweGVmZGNjYmZiLCAweDFmYjYwNmRkLCAweDgwMWMyOWJiLCAweGZjZThmYmRlLCAweDliZTc0NjY1LAorCTB4NDhmZGQwMzYsIDB4ZmRkMTM3Y2IsIDB4ZmZjMjE0ZDgsIDB4OTgxZmU3YjUsIDB4MDQwNzljMjcsIDB4NzM2NjNkYmYsCisJMHg3NDVmMDA3NiwgMHgxOWFiN2Y2ZiwgMHg0N2YzOTZjOSwgMHhjODNmY2JmNywgMHg2NWRlOThiZSwgMHg1ZmI0Y2E4NiwKKwkweGExYWZkZDMzLCAweGUwYTY2M2Y0LCAweGVhNjNlNmI2LCAweGI5MTEzOTAxLCAweDg5NDdhZDVlLCAweDI2Njg4M2Y0LAorCTB4ZGViMWJlYmYsIDB4YTNkMjQyMzgsIDB4NTVmMWMzZGUsIDB4MDA3ZDczYWIsIDB4NDZmNDFlN2MsIDB4NjMyNDExNGEsCisJMHgxMzFiZDMzZCwgMHhkZTAwZTY0MCwgMHg0MTdhNDdiNiwgMHgyMDQ4NGUzZiwgMHhjY2MyZTdhZSwgMHg2N2RmM2Y2NywKKwkweGZjZTI5ZjAyLCAweGVhYzUxMDkwLCAweGZmN2RmMmY3LCAweDRmZjdhZjI5LCAweDRiOWM4NjllLCAweDNhMjgzZjcwLAorCTB4MGYyMjcxZDcsIDB4M2I0NDhmMmMsIDB4MTcyYzJmM2EsIDB4ZDczYmU5ZjMsIDB4MTM3Y2Q5OTgsIDB4YmVkZWNhZWUsCisJMHhjMThmMDQyOSwgMHgzZTc1NzU3ZCwgMHg1ZWViMzdlMCwgMHgyNWE5N2U5ZiwgMHg4YjkwOGUzOCwgMHhmOTgxYmE1YSwKKwkweGY1ODFmYzgzLCAweGI4MWE4ZTU0LCAweDdlN2VlYjVlLCAweDcxZDBkMzNlLCAweDdiNWZkZjA0LCAweGI0ODJiOGE4LAorCTB4MmJmYmUwZDUsIDB4NTYzNWM3ZWUsIDB4MjUyMmZhMDIsIDB4OWQyYzQ3MDcsIDB4ZTFiZWZkNTcsIDB4MDg4ZDFmNmMsCisJMHhlYWZiNDM2NCwgMHgzMTRkZDc1OCwgMHg5MzMxZGZiNCwgMHhkZmEwZmVmOCwgMHhhMDljZTBhYiwgMHgwYzUzMWUyNywKKwkweGY1ZTBkZGUwLCAweGQzZjllMDg3LCAweDhmN2ZkNjE4LCAweGU5OTFlY2Q1LCAweGQ2MjNiOGZlLCAweDNkZWQwZDE1LAorCTB4MDNlZWM0NjUsIDB4ZTUwNzczMzksIDB4ODk2ZmIwMjcsIDB4NGRmODA4YWYsIDB4MDE0N2YxM2QsIDB4NWQ1OGM3OWMsCisJMHhiZjQwMzFmMSwgMHhjOTM2Njc3MiwgMHhmMjU3ZmNhMiwgMHg2M2Y3YzJlNywgMHg4NGI5NTExMSwgMHhmYjcxZjNmNiwKKwkweDg1Nzk5ZjZmLCAweGNhZjg1YWI2LCAweDAzZGY4NWI5LCAweDIyMzE3YWZhLCAweDE4ZTJlODAzLCAweDUxM2I5N2Q1LAorCTB4ODMwNjU2ZGYsIDB4OTQ0YmRkYmUsIDB4ZmMzMGI2YzEsIDB4Y2MwYmE0NTcsIDB4MjBiZWIzM2EsIDB4NTU2NjNmOTgsCisJMHg3YTQ0MmY5ZiwgMHg2ZmMzMGM0ZCwgMHhlMjE0ZjlmZCwgMHgwOWZlODU4OSwgMHg2MjdiYmY5ZSwgMHgxZjVkZjYxNCwKKwkweDU2ZWE4MjMwLCAweDc4ODMzZTdmLCAweGViMWY3ZjY4LCAweDk4NWI3NTQ4LCAweDMwYzUzNzcxLCAweGM4NGRkYjdhLAorCTB4ZjdlNTcwZDQsIDB4MGY3NjcxZjEsIDB4YjAzMGZiNjUsIDB4N2YwMmYyNGQsIDB4ZTFiZjVlYWMsIDB4MDdlNTMyY2YsCisJMHgzZWFjZWJkNSwgMHhlODMxNjk0YywgMHg4ZjM2ZDU2ZiwgMHhjN2YzNDc0ZiwgMHhkMTFmOGMwYywgMHhjNWNkYjM3ZiwKKwkweGViNDdiOTQxLCAweDBlMDNjN2U5LCAweDRiMjBmNDNjLCAweDJlNTJlMGY5LCAweGJjMzU5NmI3LCAweDEzZDgyNWY5LAorCTB4M2NjNGY1YWEsIDB4ZGNiM2Y2OWUsIDB4NGE5ODNjZWMsIDB4MmNiMzNlOGIsIDB4YmZiNjAyOGYsIDB4MjViNzNiZjIsCisJMHg1YzRhNWM4MCwgMHgzMmVjY2FkMCwgMHhmNDBkOTI2NCwgMHg0MzMxYzk1ZSwgMHgzMTc5MTBiZSwgMHhmYThmNGIzZCwKKwkweGUyOWZlMjMxLCAweGU3MTg4YmViLCAweDgyZjdjMDRjLCAweDgwZjUwNGMxLCAweDdhNDViNzA1LCAweGQwN2MyMTNkLAorCTB4YTVhMWUxY2MsIDB4N2ViODRmOWIsIDB4NzY3ZmVkYTUsIDB4ZmU4MTE5NmMsIDB4NzM5Y2EyM2EsIDB4ZGMxNjNlODEsCisJMHhjZmM1NGU3NiwgMHg1M2ZmMjViYSwgMHhhZDVkMDI4ZiwgMHg2NDlmZGFiMSwgMHg0MzM4NjVkZCwgMHg2MjNiZmVlOCwKKwkweGM0M2FmM2JjLCAweDY3NWU0ZjUzLCAweGEwNGNmYWY2LCAweDg3YzY0MGRmLCAweDMwZWFjZjYwLCAweDk0MGEzY2Q5LAorCTB4YTJjZjExMWIsIDB4MjkxYTlmZGQsIDB4ZTYwZWNiZTMsIDB4MzYxZTllOTcsIDB4MTk2YmU4MTksIDB4ZGUwMzM3YjEsCisJMHgxMjQ0YjU5NywgMHgwMzNmMDg0ZiwgMHhjM2U4MTgwNSwgMHgzZjYwOWU3ZCwgMHgzY2RlM2I0YiwgMHhhZGRjZmMwYSwKKwkweDJjOWQyM2Y3LCAweDhmMTA1YjM1LCAweDljN2FmM2VlLCAweDc0MzE2OTA3LCAweDhhN2I0NWY5LCAweDhlNTEyM2ZiLAorCTB4OWU3ZDYwZGIsIDB4OWY0N2M2N2IsIDB4MjYzZjQ5MWEsIDB4N2ViOGVmZDIsIDB4ZmRmMGVkZDcsIDB4ZTIyOGM4YTEsCisJMHg0Yjc4ZmEwMCwgMHhmM2E3MGVmNiwgMHg4MzJiMzVlZiwgMHhlYWJjMjg2MywgMHg0NjBlOTQ4ZCwgMHg3MzRlMzc2MywKKwkweGQyNDNmZTg4LCAweDc3ZmM2YWFjLCAweGNjMjVmNWJjLCAweDY1ZDliOTY3LCAweGMyYmUzOTA0LCAweDMyYTdjZjQxLAorCTB4NjQ1N2M5ZTAsIDB4ZWY4YTE1MWIsIDB4OTE4NWYyZjEsIDB4NDVlZjhmOTcsIDB4NmM3ZmJmN2MsIDB4NjYxZmY0YTQsCisJMHhlMWM3ZGQxZiwgMHhhNWVhMjNkZiwgMHg3MWYyN2RiMCwgMHgwZTdlYTkwNiwgMHg0YTY4NmJkMiwgMHg5NDNjN2RkYiwKKwkweDNlNzlmM2U3LCAweDYwNGJkNzliLCAweDlmN2MxZGY5LCAweGVhY2I5YzdjLCAweGM1ZjFjNzY5LCAweDNiMzZmZTMwLAorCTB4ZTAxNWIxZDYsIDB4OGNmOWRiNDUsIDB4MjJmYjE3NDAsIDB4MTZiN2E4YmMsIDB4ZmMwNzdlNTIsIDB4ZWEzYTZkNmQsCisJMHhlZGFmOTRhZCwgMHhjNGQ5N2FjMCwgMHg0Y2Y1OGQxNywgMHgwMzQ4NTcyOCwgMHhjZmIwN2JlNSwgMHhjZjg0MTQ4YiwKKwkweDI3NGE1MmE2LCAweGQ3YjAzY2I0LCAweDA0YWVkYjY0LCAweGE5ZjAyYWYxLCAweDhjN2I2M2M1LCAweGMzYzllZmY0LAorCTB4ZDQzZTkyNTEsIDB4NjFlNTQyOGUsIDB4YTNiMzBjN2IsIDB4ZDI3ZjYxMTgsIDB4OWU5OTE4OTksIDB4ODVmMTBjMzYsCisJMHgzZTVmMjI3NCwgMHg2MDhjNmViZSwgMHhmNGZiYTA3OCwgMHg3YmQ0MThiNSwgMHhmYmExMzk3ZCwgMHg5N2M3MDRlNSwKKwkweDBmMWY2N2UwLCAweDhhYjVlMzUyLCAweDVlNmRlMWUzLCAweDhkOGM1MTZmLCAweDAwN2I0ZmM5LCAweDMxYzdkZGY3LAorCTB4MTY1YzdlYWMsIDB4MGY0MjQzOTMsIDB4Y2I4NzAzZmYsIDB4Yzg1NDlhNGQsIDB4ZDU1MzMxOTUsIDB4MWM0ZGM1ZmEsCisJMHg0NGM1Mzc5ZiwgMHgwODdlYmMwOSwgMHg4OGYyMTVmMywgMHgzNDVmMTdmMiwgMHg1ZTBiMGZkZCwgMHgyMTdmMjEzNSwKKwkweGIwZDkwMzFiLCAweDYzYmQ2OGZmLCAweDJjMGE2ZTU4LCAweGU0NzJhNThhLCAweDE4ZGZhYTI2LCAweDIyZGRiMWYzLAorCTB4M2NlZmRmNjgsIDB4ODVkMDRhM2YsIDB4M2U5YzgwOTUsIDB4MTg1M2Q2MjUsIDB4ZTU0ZjdlNDAsIDB4Mjk2YmFlMWQsCisJMHhiYTQzN2NhMSwgMHhkMDM3ZmUzNCwgMHhkNjk0YzkzYSwgMHhkODU2MGM4NywgMHgwM2E2NGVmOSwgMHgyMDhmZWQwMiwKKwkweGUxNDdmNDBhLCAweGI4NTBlN2ZlLCAweGM2M2JjNzZiLCAweDMxOWZlMGU5LCAweDk2ZjExZTkyLCAweDlmNzBmMjQ3LAorCTB4NzU4NWZmYmQsIDB4OWNmMmVkMjEsIDB4NTFkMWVjY2QsIDB4Y2ViOGZmYmUsIDB4ZTlmYTAxNzUsIDB4ZDQyZGZkYmEsCisJMHg3ZDE5OGZjYiwgMHgzMDk2YWRkOSwgMHg2M2RmNDZlNSwgMHhmMmMxNDkwZiwgMHgzZDk3M2ZjNSwgMHg3NjJmY2E0NiwKKwkweGU0ZmQ3Njc3LCAweGE1ZWViYTY2LCAweDg2MWRiMjlkLCAweDVmZTc3YTVjLCAweDdhMDMxZGRmLCAweDBlYzFhNzc1LAorCTB4ZGYyYTQ2ZTcsIDB4YmNjM2Q1ZWYsIDB4NzkxZTk4MWIsIDB4ODNhNmE3NGMsIDB4OWY1NWRmYjMsIDB4MTk2MmQyNzMsCisJMHg4M2RlYThiZSwgMHgzYmUwOWNmYSwgMHg0YWRmN2U0MiwgMHg1YzgxNTc3YywgMHg0NjFjNDY1ZiwgMHg2NmI0ZmY0OCwKKwkweGUxNDIwY2Q1LCAweDBlYjJjMmI3LCAweDZiZTdkMWY5LCAweGJjMWVhMWE3LCAweDdjYjA3ODkyLCAweDRmZTE4YjU5LAorCTB4NDU2MWYyYTEsIDB4ZWFiZjNhYWIsIDB4NTZmZTc1NjEsIDB4NjdkZjNhYWYsIDB4MmYwZjJlN2YsIDB4MzJjN2E3ZGYsCisJMHhkOTRiM2UzYSwgMHhiMDNmZTAzZSwgMHgzZDA1ZTRjMSwgMHg5OGFmNWI0OCwgMHgzY2E0Y2JkNywgMHgyNGY4MTNiMSwKKwkweDQ3NjBmYjk1LCAweDQ4ZTExNzU4LCAweDZlYmViZTA0LCAweGM1ZTI2OTZmLCAweGU3ZjU3Y2VjLCAweDEwZGUyMWFmLAorCTB4MzdhODIzN2QsIDB4NmM2ZjEyZTQsIDB4NjNjYjdlZmYsIDB4ZjQyMzg0MTUsIDB4ZTA3MWYwYWIsIDB4MmNiNjcxYmMsCisJMHhjNjI2M2FmYywgMHgxMDY1M2QwYSwgMHg4YmJlMjdmNiwgMHg0NWUzODI3ZSwgMHhjZmVhM2NlMSwgMHg4Zjk4MDc5YiwKKwkweDVkOWZkYjA1LCAweDFiOWM3ZTE5LCAweGE5YjFjNmZhLCAweDdkYjA2NGU0LCAweGZjNmI5MzFjLCAweGEzZTgyZDFjLAorCTB4N2UxMjdjZmUsIDB4MDdhMTc5MTcsIDB4MzFhNWRiMDcsIDB4ZDlhNDhhZmQsIDB4ZjkwNjQ1NGUsIDB4OGI2M2IwOTQsCisJMHgyMjQyNzBmZCwgMHgzYmI0NjRlNiwgMHhlYmNmY2ZkZCwgMHg1ZmIwNWNmNiwgMHgwODNkMDA5ZiwgMHg2NTE0ZTNmNiwKKwkweDcxNGU5ZjlmLCAweDY2YzZmN2Q5LCAweGY3MDY4N2ViLCAweDk0MWQ3NjhiLCAweDQzZjhjZWFlLCAweDU4YjJlZWY4LAorCTB4NmI4ZTFjNmIsIDB4NTcxODc2MjcsIDB4ZGJhMmZiZDAsIDB4ZThiYjA2MmIsIDB4Njc3OGZmN2MsIDB4NTQ2YmEyNzksCisJMHgzMGY1M2YyOCwgMHhlODUxODliZiwgMHg5Yzk1MTY1ZiwgMHhiYzM5MWEyNSwgMHhkNDJkZmRhYywgMHg5NWJlYThiYiwKKwkweGQzZTc0YzBkLCAweGJkMjNiN2JkLCAweDA0Y2UyNGFmLCAweGJkOWVmM2EwLCAweGZmNWMzM2MzLCAweGYzMTVmYzg2LAorCTB4NjI1OWU1OTksIDB4OWJhNzk4MjAsIDB4MmFiZmVlOTgsIDB4MWQ1OTlmM2UsIDB4OTlkM2VmNGMsIDB4YzcxYzA2MWQsCisJMHgwMjViMTQ0MSwgMHg3Y2Q5YTUxZSwgMHhkM2Q0ZjMyOSwgMHhmOWJlODRmYywgMHg5MDhlOTE4MywgMHgxMmZlN2NmMSwKKwkweDlkZjBhN2I0LCAweGQ0YjI1M2MwLCAweDM2ZjMwNDk1LCAweGJjNzRiOGMxLCAweDgyNGRlMjA4LCAweDVkYWM2OWI0LAorCTB4ZTRhMjc0ODEsIDB4MzA3OWIzZDQsIDB4MGQyNjRmM2MsIDB4Njc1ZjUwNjksIDB4OWQ2Y2NiZjYsIDB4ZDAwOTA2NzQsCisJMHg5ODVlMGZiZSwgMHhjNmZjZjJiNywgMHg1NjhiYmRkOSwgMHgxNThiNzdjMCwgMHhjZjkxODhmOSwgMHhlNTJjNDc2MywKKwkweDJmZTQ2Njg3LCAweGM5Yjc1ODY2LCAweGZkMWNmYmUyLCAweDk0ZjUzYzY0LCAweDNkOGZiODI5LCAweDNiZGEwOTQzLAorCTB4MDIzNjkxMDYsIDB4ZTcyYzVhZTMsIDB4MWI1OGIwM2MsIDB4OGY5MDQ5YjEsIDB4ZTBmYWY1YjAsIDB4NjZjZTcwZmMsCisJMHgyMzQ2ZThmMSwgMHgwYjE5ZGM5ZiwgMHg2NzdhNTI3YywgMHhmMjg1ZTAyNSwgMHgxOWZmNjY2NSwgMHhjM2VmNWNhOCwKKwkweDczZTBiNzczLCAweDRkN2U3YzMxLCAweDEzMjVjZjljLCAweGUyNTg4NzA2LCAweGIwMWVmMWMwLCAweDQwNDE5Y2FlLAorCTB4NDlkNjU5ODQsIDB4ZDQ0YjdlZDAsIDB4MjVlZmY0NTQsIDB4Nzk2OWUwMDAsIDB4OGFiZDU0ZWMsIDB4ZDUzYmM1NmYsCisJMHhlYWI5YzRmOSwgMHg5ZDRiYjI3YywgMHgzZjkzZDMzNywgMHhjZjkyOGJlOCwgMHgxNjIxNzQ5OSwgMHhjMDIzNTljZiwKKwkweGZjZTA2MmRlLCAweGViY2Y5OWEyLCAweDNkNzRhNDA4LCAweGZkM2U3MWVmLCAweGJiMTNmNThkLCAweDhlZWViY2ZhLAorCTB4ZTNiNDEyMzEsIDB4ZDBjZDk4MjUsIDB4ZGU1N2Q1M2YsIDB4Y2FmYTY1OGIsIDB4OTcyODFlMjcsIDB4ZjNjZmM4MDMsCisJMHhjMGY5YjYyNiwgMHg4MzdjZDNhZSwgMHg3ZThiYmY2NCwgMHgxYjJhYjY2ZiwgMHgzZDU0OTRmNCwgMHhjNzY2MjRkMywKKwkweGY1NGFkYmQxLCAweDg2NWI3Y2I0LCAweGU2ODliZWNkLCAweDFkN2VjMWViLCAweGQ1YjdmMzBiLCAweDQ5ZjY4ZDNjLAorCTB4MDI0N2FiMTMsIDB4ZGM4ZmUwY2QsIDB4ODM2NmM5YjYsIDB4ODFlNTcxN2EsIDB4OGJkMDQ2YzksIDB4NzZkYjEwNTcsCisJMHhiZmJlODYxMiwgMHhjZTg2ZmJhMiwgMHg1M2M4MDlmNywgMHg1ZTljNDhiYywgMHhmMzI5MGYyMiwgMHg3Y2JjMGQ3MSwKKwkweGM1OWRmYzA3LCAweGUxOGIxM2YyLCAweDY1ZmVjYTVjLCAweDNhNzVlNDc1LCAweDkwZTBlZWMwLCAweDc3ZDYyZTUxLAorCTB4YTE2ZWJkZTQsIDB4Y2VjZDY1ZTMsIDB4YjNiYzNiNDMsIDB4MDk3M2Y5OWMsIDB4MzQ2M2Y3ZGYsIDB4OTA1YzZhZmIsCisJMHg4ZjNjYjFjZSwgMHg3MDc1ODdlNywgMHg4OTljNmViYiwgMHg3NDZkNmJmOSwgMHgzNjY2NjI4OCwgMHg4YzcxZmFjMCwKKwkweGZjNDRlZGZlLCAweDVhZjJmYjYzLCAweGZkMDdmYzEyLCAweDQ3ZmIwNzk1LCAweDU4MjkzNDNlLCAweDc0NjdkYzFjLAorCTB4YmRiMzdjYTgsIDB4MWJkNjk2YTksIDB4ODdlZGY3YTMsIDB4YTc4ZTNjN2QsIDB4YTM3ZDNjNzksIDB4YmY5NDA2ZjQsCisJMHg2MjhiM2E5ZCwgMHg2ZDdkYjFkNCwgMHg4NjEzMDJjZSwgMHgxNGI4MDY1MywgMHgwNGQwN2VkYiwgMHg3YzkwNGNmZCwKKwkweGJkNGM2Njk4LCAweDVmYTYwOWJmLCAweGQxNDdlZGM1LCAweDA2ZWY0NjQ5LCAweDEyYTY4ZWJhLCAweDc3YjQ2NzhhLAorCTB4ZDgyMGY5ZmMsIDB4NDkwN2U1YTUsIDB4ODhlOWUwMDEsIDB4MDczOWM4NDEsIDB4N2ExNWQzOWUsIDB4M2ExYWZiMWMsCisJMHhmZDQwNmM5OCwgMHgyYTkzMmZmYywgMHhkNTAxM2JmMCwgMHhkMmJiY2U4YywgMHhiZTIxMTZjNiwgMHg3NTVmMmMwZiwKKwkweGUzNmEzZjI4LCAweGIzMzdlNDY0LCAweDZhYmYzMmE2LCAweDU3YjM1Y2ZkLCAweDEwY2U0MDkyLCAweGJiZDI3N2U2LAorCTB4YjEwYTZmMzIsIDB4YzQzZjA4OTcsIDB4NzczMjA2ZmIsIDB4NDRmMzk4NTcsIDB4NGZkMzFjNmQsIDB4M2IzMDY2YWIsCisJMHhhMzQ2ZmQ2ZiwgMHgxZDUzN2ZjYSwgMHgzMzVlZWNjNywgMHg4YzhmMjZlMywgMHhmY2M0Nzk0MywgMHg1YzcxNzlhNywKKwkweDQ2NDExYjZmLCAweGUxMGE5ZjAwLCAweGFmNTA0NTIzLCAweDgxZWRmNGFiLCAweDljYmE4Y2Y4LCAweDhlMzk5OWYzLAorCTB4ZmRlYTAzMDIsIDB4YmUwOGRmOWMsIDB4ZjZjNDFjZWUsIDB4ZDI0MjNjZjMsIDB4OTM2N2FlODEsIDB4ODdmZmU0MDYsCisJMHg3ZTQ1NmY0YiwgMHgxOGYxMTM3MywgMHg5NTFmNmYwMCwgMHgzMTAyNzhiMSwgMHhkNTUzNTllZiwgMHhhNzFjZDI3YSwKKwkweDVjZjM3ZjNhLCAweGYwYzUxZWFkLCAweGU3OWRjNjIxLCAweDA5NTc5NzUyLCAweDVhYWE3ODNkLCAweGZmZjA1ZTBmLAorCTB4Yjk0NjhhYmUsIDB4ZGQ1NGY4OWEsIDB4ZTdlMDIxODUsIDB4YzAwMGY2NjAsIDB4ZTg3M2YzMGIsIDB4MWJkYzZlOTEsCisJMHhiZWJjM2Y5OSwgMHgzODhkZWYzZCwgMHgxMjc3NjdkOCwgMHg0OTc2Y2ZiZSwgMHhiMmZmZDFjYiwgMHg4MjExNWE0YiwKKwkweGFmNWFkNGZmLCAweGI4NjQ3MjA0LCAweDk4N2RkODU1LCAweDc5MzRlNGRlLCAweGMzZGY4M2Y3LCAweDkxMTI4MzU5LAorCTB4NDllM2NlYmMsIDB4NDkzYzQwMGUsIDB4YWRiZTkwN2UsIDB4NTcxNjU2NjUsIDB4MzBiNTFjNDEsIDB4YTQ1YjM0OWYsCisJMHgxNmZlZjQxZCwgMHg2NWRhM2U1ZCwgMHgyYWFjYTI1YiwgMHgwZGE2ZmEzYiwgMHgxM2Q0MDU0YSwgMHg0NGM1NThmNiwKKwkweDZlOWM2ZGYyLCAweGQ3Nzc5ZGMyLCAweGJhZmUzMWM1LCAweDcxNzY2MjU5LCAweDllMzMzY2NmLCAweDljYjNlMzJiLAorCTB4YmM0MTNmMmEsIDB4OWQ4MjhlNGMsIDB4MjI5YzY0NzAsIDB4NjNmZGEzZWEsIDB4NWM5NWMxYjMsIDB4NDRhZjUzNDAsCisJMHhkMjE3MTE5NywgMHhkMTFiMjY1ZSwgMHg0ZmUxYThhZSwgMHhiNDc2YjFmMSwgMHhjZTBmYzdlYiwgMHg5Y2ZkM2I0MSwKKwkweDJmYjQzYzhlLCAweGZkODQ0YjEyLCAweGZmZDgyOTJhLCAweGY0ZGJkOTljLCAweGRmNTNhNzEwLCAweGRjYmY0ZGIxLAorCTB4N2JiYmE0MTIsIDB4OGQ1Y2I4ZTIsIDB4YWY0MDkxMjQsIDB4ZTdiYTc2N2QsIDB4N2JhNzY4NGMsIDB4NWZmY2U3NWMsCisJMHhhMzVhY2JhMCwgMHgyMTcxZWQwZiwgMHgwN2RmOGFmNCwgMHgzOGFiOGI5MiwgMHg5Y2NhMThiZCwgMHhmOWQwNTZmMywKKwkweGI0NmJiY2Y1LCAweDFkMTlmOWMzLCAweGU3ZmZiNDZkLCAweDlkYTM0NGY3LCAweDUwNDU1ZjUxLCAweDY1MmM2ZDNlLAorCTB4ZWMwN2E0N2MsIDB4OWYxZDc0NWYsIDB4ZjllMzU3NDUsIDB4OGFkNGEzNjAsIDB4NjYzYmEzZjIsIDB4NmFmMWQyMzIsCisJMHgwNzNjMDFjYiwgMHg3NGE1NmY1NywgMHg1NjlmMjIxOCwgMHg2YmU3NTBlZiwgMHhkZjllMjc0OCwgMHg0N2VlOWY2YiwKKwkweDA1MTdjOGNmLCAweDU2ZWY3NjFmLCAweGQ0YzMyM2I3LCAweGNiOGYzNzdjLCAweDdkYTc3YzhiLCAweDdkNGMwNTU2LAorCTB4OWQ4YjNkYWUsIDB4ODY0MWU5YzMsIDB4MWRlOGEzYWUsIDB4MmVlZmI3MjMsIDB4MDA4YTlkYjAsIDB4NzQ5NGZiNTYsCisJMHhjN2FkZmQzMSwgMHhmYjY2NWE3YSwgMHgyMjgzYzk5ZiwgMHg2ZTU2OGUzZSwgMHhlZGJkNzExNSwgMHhlMGJmY2EzYSwKKwkweGIwZjQyYWZjLCAweDA3ZjJjMjIyLCAweDkyNzIxZDc0LCAweDQyZGYzODJlLCAweDdmZTg0ZWRlLCAweDdjMDg0ZTQyLAorCTB4NTIxMDk2OTUsIDB4YTc0M2Y3NDIsIDB4Yzk0MzRmZTAsIDB4ZWQzN2MwNTAsIDB4MDQ4OWY3MWYsIDB4ZDgzMTQzOTEsCisJMHg3ZGNlMDdiZiwgMHg5NDc4ZjhlMywgMHhiNzIwM2MxZSwgMHgxN2IzM2EzZCwgMHg2YTU5YWJlOCwgMHgwNjY5Mzk0MCwKKwkweDliYTY5ZjNkLCAweDgzY2ExNzI0LCAweDMyM2RhYTk3LCAweDY5MmM3YmMwLCAweGQ2ODMzNTk4LCAweDhjZWU2ZjFiLAorCTB4M2E1MTM4MDQsIDB4M2Y0YTEyMzksIDB4YjE5N2M0NGQsIDB4MTFkMTUyNGIsIDB4YmY0NTc3OTYsIDB4ODQ4ZTk2MWQsCisJMHhjNDdkZjMzYywgMHg3NGU5OThmNCwgMHgwNTRmZDBjNSwgMHg3YTY4N2UzOCwgMHhjOGU3NjI0MCwgMHhlYjFmOTYyOSwKKwkweGJhZGJmZGExLCAweDUzMjc0ODY5LCAweGYzMGY1Nzg5LCAweGYxYTliMGFiLCAweDlkNDkyNTNmLCAweGEzZjRhNjlmLAorCTB4NzBjMzhjMGYsIDB4MWY0ZTc4NzAsIDB4MDg3NzJlYTEsIDB4ZmNkNDQ3N2UsIDB4ODU3YzkzMmUsIDB4YzFmOTE4N2EsCisJMHg1ZDgwZWZjMSwgMHgxOTNkNzIyMSwgMHhkNTBkZmEwMSwgMHg2YTFmNzE0NCwgMHhiOGViZTBlOSwgMHhmMjZmZGQ2ZiwKKwkweGJmMTg1Yzc1LCAweDEzYjcwZjQ5LCAweDJiZmM0YjVmLCAweGQzZmE5NjlmLCAweGViMWJmNzU5LCAweDdhMTBhNGU1LAorCTB4NjVlMmZiMTQsIDB4OTA3ZjhiMDMsIDB4YTlmZTY1NWUsIDB4ZTUxOTMzMTIsIDB4NjQyYWZhMDMsIDB4M2ZiMTQ1NzYsCisJMHg4Y2ZhMDVhZSwgMHgzMTVkZDIwOSwgMHhjZjExOWVmZiwgMHgxOTA4NmNlOSwgMHhhMTM2NzQwMiwgMHg1MzI3YzIzZCwKKwkweGZlZjFlNGJjLCAweGNiYmEwNWFlLCAweGUyMjNlYTBmLCAweGQyNTRkMTVjLCAweGE1MzJiZThmLCAweDcwNWZkNDJjLAorCTB4YTQ3ZDA5ZGYsIDB4ZDI2YjZhNDAsIDB4YjkxZjAyNjcsIDB4MWJlNjA5YTcsIDB4ZTM0MzRmNDIsIDB4NTEyZjgwOGIsCisJMHhkYTdkYzI3YSwgMHhjYmFhY2U0ZiwgMHhmMDI2ZjQzNSwgMHg1MmU1ZjQyZSwgMHgzNjc0ODBkMiwgMHhlYTYwYTc1YiwKKwkweGYyODU1Y2FiLCAweDViMzJkY2I1LCAweGFjZGZlZDBmLCAweDA5MzZmNDYyLCAweGVhMGIzMWU4LCAweGRjYTVlOWFiLAorCTB4ZTk2YmNlYWMsIDB4MGJhODhlOTEsIDB4OWY0YjU3MWQsIDB4MTBkYmQxMDMsIDB4NWYyMTM3YTAsIDB4NmY0ZDJmNjMsCisJMHg3NWJmZTNkMywgMHg3ZjFlOWI3YSwgMHhkMmQzN2ExMSwgMHhiYjVmZTA5OSwgMHhhMGU1NmMyMiwgMHg0YjU3ZDczZiwKKwkweGRlMGEwZjI4LCAweGY5MDRkNjFkLCAweGE4OTk3NWUxLCAweGI2OGFlZjRmLCAweGRmNWQ3ZWEzLCAweDNiMGJjYWMwLAorCTB4YmRjNDMyMWQsIDB4ZTVlM2FkNjQsIDB4Yzg3MmNlOTksIDB4ZTVhN2FmZDcsIDB4MjNhMmViYjQsIDB4ZDg2NjJlMmMsCisJMHhlZjNjYWM5ZCwgMHhhZGQ3ODZhZSwgMHg1ODc4NjdhMCwgMHg2ZjNmOTdmYiwgMHhiOTY4YTM5NiwgMHgyZmI3OTliNywKKwkweDdjODcyZDZkLCAweGZmNmIwYjdkLCAweDQ2YTlmODE5LCAweGI3OWE3YzQzLCAweDdkNWZiZTA5LCAweDFkOWRhNjZmLAorCTB4M2VmZTk5YWIsIDB4OTc3N2FmOTEsIDB4ZDhlYmRjZjQsIDB4NWJiNTk1YWUsIDB4ODgzY2QwNzUsIDB4ZTk5ZmY5ZTAsCisJMHg3NWYxZDdlNSwgMHhkNmNhZGM0ZSwgMHhmYWUyNzcxOSwgMHg4YmE1MGFhOSwgMHhlYTBmMDExNSwgMHhiNTc0YTc2ZiwKKwkweDA2ZGZjOGM1LCAweDRhOTczZjM4LCAweDRlOTA2OWFkLCAweDUyMTdlY2ExLCAweDIyZGVkOTg3LCAweGNjN2U2NTBmLAorCTB4N2I4ODc0ZWQsIDB4NDVmZDk5ZTIsIDB4Y2UyMGZmZjgsIDB4OWY0NDMyYTAsIDB4ZDk5ZTI3YjgsIDB4ODRiZDQ1NjMsCisJMHhhMDAxOGExOCwgMHhhOGFjNDc4NywgMHhhNGZmMGI1ZiwgMHg4MTIyMjFlZiwgMHg3MjM1ODdiYywgMHhiZmFjMjQzZCwKKwkweDAzNTY0YTcyLCAweDg2NTMxMWVhLCAweDVmYTUzZjA4LCAweDliOGU5NGJmLCAweGM5OGJlMTc3LCAweDNmNDNlY2UxLAorCTB4ZTY5ZWUzZTIsIDB4N2E3ZDEzNzEsIDB4MDc1MzM3YjIsIDB4ODgwYmIxNzQsIDB4ZjQ4MDA1MjQsIDB4N2Y0MWFmZGUsCisJMHg0ODdlMDVkYiwgMHhhNDNjYTQyNiwgMHhmMmNhZjAwNCwgMHhiZDdmZTM1YiwgMHg4NTNjNjVhOSwgMHhlZjQxYWVhZiwKKwkweDIxOTZhMTAxLCAweGNjYzlkYzYxLCAweDFjMWJlMjRlLCAweDUzZmU3ZmQ1LCAweGM0NjdjNGY0LCAweGZmMzYyNjM4LAorCTB4MWU1NDRkOTUsIDB4N2UzMWQxMjMsIDB4OGZlMzg3MzYsIDB4ZTkwYWJmOGMsIDB4ZDNjNzM2NzcsIDB4MmE3ZjA1Y2YsCisJMHg5ZmMwMDUyMCwgMHhkZGJjNzBlNiwgMHgzNDdhYTY2NCwgMHg4MzU2YzNmMiwgMHgxMzNjNmY4NiwgMHhjYjZhNzIwZiwKKwkweGJhYmJmYTgwLCAweGFhNTdjMzVjLCAweGI5MmJiOGY5LCAweDA5MmI3ZWRlLCAweDRhNzI3ZWEwLCAweDdhN2E2MmYyLAorCTB4NmJkYmQzMGIsIDB4YmY1MDQ3MmMsIDB4ZTk4NDc5ZTksIDB4OGZjNGI1ZWQsIDB4YmVkNjhmZmEsIDB4OWQ1M2IzNTksCisJMHhlNzUzNmJhZiwgMHhmOWQ1ZGJlYiwgMHg4ZTBmMWM5ZSwgMHhhZWE1YjNkMywgMHhkNThhZWMxOCwgMHg3NjhiYmYwZiwKKwkweDVmYzE2YWVjLCAweDQyZmU2YWJjLCAweDVmYzY3MTE1LCAweGVkMDZiYTFlLCAweDZmOThkZjUxLCAweDZmNGY0ZDNjLAorCTB4ZDBiOGFhYzUsIDB4ZmE5YzAyZGYsIDB4YjIyZjM1ZWMsIDB4NjEzNzE0ZjgsIDB4ZWIxZTgyNzYsIDB4NGU3MGY5ODgsCisJMHhhNDc5MWEyNSwgMHg5Yzc5MjdlNSwgMHg4NmZiMDg5ZiwgMHg4NDc5MmZlMCwgMHg4ZTdhMjNjOSwgMHg4MjQxZDc3ZCwKKwkweGQ3YWI1YzdjLCAweGJkNzNjNGY1LCAweDg0ZDM5Zjk3LCAweGZhMDc5M2ZlLCAweDM1ZDNkMDBmLCAweDQxNjQ0ODBkLAorCTB4ZGI3ZjY0MzksIDB4OWZjODg3MjQsIDB4YzA2Njg1NzksIDB4ZWU5OWJlNzMsIDB4NmM5NzgwNjcsIDB4NTQ1OTcxYzksCisJMHhjYTA1ZjBmNCwgMHg3YmNmODE5OSwgMHhiZDBkNzJlYSwgMHgyZGQ2ZjM4OCwgMHg4MTY2NWU5YywgMHhmZjhlODUyNywKKwkweGU3ODFjOTdiLCAweDMyYjdjM2JhLCAweDU5NjM5OTdhLCAweGQxZmFmNDg3LCAweGUyMmY0NjZhLCAweGU3ZTU3N2RjLAorCTB4NGRmYzg3M2MsIDB4NzQ3ZDc5Y2UsIDB4NWVmNTQxMTIsIDB4MTc0OTFlOWEsIDB4OGZlNjdjZTcsIDB4MWQxODk3YWYsCisJMHhmODdkNTVkNCwgMHg4MmNmZTgxOCwgMHgyNDZlMWMyZiwgMHgzZTEwZmFmMSwgMHg2NGNkMzRkMSwgMHg5MzRhM2IwNiwKKwkweGFhODM5ZDgxLCAweGJjNWM3ZmE2LCAweDM4Y2Y4NDM0LCAweDEzMTM0YTIyLCAweDg4ZWU1OTQwLCAweDVkNmNmYjQ3LAorCTB4NjY5YzdhYTQsIDB4N2ZiYmYzYTksIDB4NGZkMmYzODAsIDB4ZDQ0ZWQxMjMsIDB4OTU0MTMwZmIsIDB4NzBlYjc3YTQsCisJMHg2YjNlZGI4YywgMHgzMTUyN2U2MCwgMHg3NzA3NTU5ZiwgMHg3ZWMzZjNlZSwgMHgwOGViZmY1YywgMHgzNTlmOTUzZCwKKwkweDVhYzVmNzkyLCAweGU0YzRiNjVhLCAweDZhNzE4NmNhLCAweGIzMjMzZTc0LCAweDVmYTI3NjYzLCAweGIwM2I4YzU3LAorCTB4ZjI4M2Q2NWQsIDB4OTMxYWY4ZDUsIDB4MTA2OTAxYzMsIDB4ZWZkMmUxYzYsIDB4YjVmZWExZDksIDB4NGY4Yzg5ZDEsCisJMHgyYWViMTFkZiwgMHhjYTBmODg0OCwgMHhhNDNmNjE0YiwgMHhjNmE0OTY1MiwgMHhjMTI2ZmQwNCwgMHgzNzY2MDZmOCwKKwkweDVjNzEwYmY5LCAweDYzNjFiZTMyLCAweGI2OWU3ZDg4LCAweDU2OGYxYjBmLCAweGY1ZjhjMDk2LCAweDYxY2UyOWY3LAorCTB4MWRhMzA3ZGUsIDB4ZDM5ZjMwZTUsIDB4OWE3YjhmZGMsIDB4NDc0ZWZkZmIsIDB4Y2NlMDNmMzEsIDB4NzUyY2ZhYmUsCisJMHhmNzM0ZjRmMSwgMHg1MThlOWUxMywgMHhiZDQ0ODdmYiwgMHg4ZWNjMDlhNSwgMHg2Y2QxYjI3MiwgMHhiZjA3YThkZSwKKwkweDFjNmYzMTNhLCAweDIxZWM0OTQ2LCAweDkzYzYwMzUzLCAweGVhNzg2MDJjLCAweDZkYmQxM2Q5LCAweGE1ZmY4ODUzLAorCTB4ZmJmNGExMmUsIDB4ZDg3ZjlmMzAsIDB4YmE0MzM3OWMsIDB4MzFiOGY1YmMsIDB4MjNkZjBlZDQsIDB4MGY3N2YzYjEsCisJMHgwODllOTdhNywgMHhlYjcxOGE5NiwgMHgwZmJmMmExMiwgMHhlNzk5ZWM3OCwgMHhlNWY2M2M0NywgMHgxM2JjOGFjNywKKwkweGMwOTllZmZiLCAweGZlNWY2YmY4LCAweGI4NGYyYzNiLCAweGY1ZDg0M2RkLCAweDY5ZjdmMjA3LCAweGQwNTQ3YmZkLAorCTB4MDQ0MDczYjAsIDB4ZmQ2YmNmYjMsIDB4M2YwNTBiZjMsIDB4MDVmOWZlZTMsIDB4ZWMyZDFmOWMsIDB4NDU4MjdlNjAsCisJMHg0YTljZDI2NiwgMHgyNDc3MTdjYiwgMHg5NDZlNzNiMiwgMHg5ZmU1NWIyNywgMHg1MTVlNDRmNywgMHhjYmEwODYzYywKKwkweDNlY2VmNDllLCAweDIxMjNmNjdmLCAweGVlM2FlY2ZlLCAweGViMTNhY2NmLCAweGRmNWVhZGRiLCAweGJhZGYwOTAzLAorCTB4ODQ4MWZiM2YsIDB4NmQ2Y2ZlMzAsIDB4YTA4YmMzZGMsIDB4ZTIwYjBjNDcsIDB4YzE4ZGFkNjEsIDB4MmRhZTQyYWQsCisJMHhlZjZmN2IwNywgMHhlODcxODI3MiwgMHhkNjVhZGY2YiwgMHhiNWUwZjYwNCwgMHgyYTBiMDAzZiwgMHhhN2Q0MzFmMiwKKwkweDA3OWMzOGViLCAweDUzYmM1NzVhLCAweDlkOTUxNDQ3LCAweDQyNTExMDdkLCAweDhhZWM5ZmU2LCAweDQzNTFlNTUxLAorCTB4NGQwMzg5MGYsIDB4YjU1MTRlYWQsIDB4YWExODZmNGYsIDB4ZmQ2NDNmYWEsIDB4NGNmMmFhMzUsIDB4OWYyYWJlNGYsCisJMHhhYWFkNzJkNSwgMHg2NWFkNTVmZSwgMHg4N2YwZmNhYSwgMHhjZmQ1NTdhZiwgMHhhMzA3NDMyMywgMHgwYzkwZWNmZCwKKwkweGI1NzIyMWI2LCAweDNlNTU0YWI3LCAweGFhMmRlNzcyLCAweDg2OTE5ZmY2LCAweGJkNjllM2NkLCAweDc5ZmU0MmRkLAorCTB4OGFhMzlkMWMsIDB4MzljZTcxODMsIDB4ZWQ1NTRiNmQsIDB4NjJiNmE0OWIsIDB4OWY0NmYwMWYsIDB4YmQ2ODkzZTQsCisJMHhjYjVmMWMxNSwgMHg2MmZmOTkzYiwgMHg1NTZhZmI3NCwgMHhkOGEzNjdmZiwgMHg1ZmFkMTgzZCwgMHhhMzJlNzY5NiwKKwkweDkxMmVkNjFlLCAweDdlZmVhNDQ3LCAweGZiOGVlYWRhLCAweGE4ZWUyMTliLCAweGYyOTZiZmJmLCAweDM1NmVkYTRkLAorCTB4ZmU4MGJmM2QsIDB4OGU2ZmQ1YTYsIDB4NWQzZjcwMjYsIDB4NzQ2MTQ5MGEsIDB4MGIwYmE1YWQsIDB4NWJiZDdmZWEsCisJMHhlNjI3YjQ2NSwgMHhjNjg3ZWM5MSwgMHhjNDBjYmMyMywgMHg1ZmM3ZjRhYiwgMHhhZTc2NjEyZiwgMHg3NmFkYTdkZSwKKwkweGY1NTlmZjg4LCAweDQ3YTQzMmQ2LCAweDJlOWE5MjUzLCAweDVkMzUxNDIyLCAweGQzNTA4ZTQ0LCAweGE2YWVkNTg1LAorCTB4NmEyNWMxODMsIDB4M2RjMmQwM2EsIDB4MGJhNmExZGEsIDB4NDNmZmE3ZTIsIDB4MmFlMDJkZTAsIDB4NTUzYjFlZTAsCisJMHg3ODVhMzc0ZCwgMHhkYTAwOTNlNywgMHhjOTVlZGRkOSwgMHhmYzYxMjNlZSwgMHg3MGRiZWRlMiwgMHgxZmQyOTc1ZCwKKwkweGY4NmE4OWY1LCAweDM0NzAxYzE2LCAweDJjNmUxMDU5LCAweDYxZTg0Y2JlLCAweDY4ZmZhZTI2LCAweGFmNDIxM2ZkLAorCTB4N2FlNDRiODksIDB4Zjg0N2VmMTUsIDB4MGYyNTlhMTcsIDB4ZmU3ZDUxZWEsIDB4ODY1ZjEyYzIsIDB4YTdmNDEzMmYsCisJMHg0NGVjYzIwNiwgMHhmMGM0YTRjZSwgMHgzZWZjNDY3NiwgMHhjMDUxOWQ5MCwgMHgyNjIwZjY3NSwgMHgwMzg4NmIyZiwKKwkweDg4MmJlMWVkLCAweGM5ZGRmOTBiLCAweDNlZDE1YmNhLCAweDYzZjJjYWI0LCAweGFkOWViYmY0LCAweDM1NTI3YTYyLAorCTB4YmY5ZjIyZjEsIDB4YWEwMmI4ZTIsIDB4ZmIxMDkyODcsIDB4NTI4ZTE2YWIsIDB4MDJiM2U0ODcsIDB4MjBmMmUxYmYsCisJMHg3OTA4NzQ4NSwgMHgxMzc4YzJlMCwgMHg2MmU2ODY0YSwgMHhhZDQ3MWY5NSwgMHgzMGRmODJlNywgMHhiZDA5N2Y4NCwKKwkweGUwMjc4YzU3LCAweDE4OWFmODI5LCAweGU0MWE0NGNmLCAweDFhMTdkODI0LCAweDY4NDY0NzNlLCAweDNiNmE0OGZkLAorCTB4ZTBmM2IwOGQsIDB4MjJmZTIxNjAsIDB4NDQyNjVkYWQsIDB4ZTk5MTZlMGYsIDB4Y2M5MGYyMzgsIDB4NTdmMTQyMjYsCisJMHhkZGEwNzM2MCwgMHhjZTc0ODhhZiwgMHhlNjI1ZWY4NywgMHhjMmJkMjZiNiwgMHg5MzU3MTNlZCwgMHg4MGM0ZmIzZSwKKwkweGZlMTJlYWYyLCAweGM5MWU1OWU4LCAweDdmNjY2OGZmLCAweDZiZjBiNDNmLCAweGY4OWZlNWQzLCAweDVlM2M2ZDAzLAorCTB4NTVlZjEwNTIsIDB4MDc4ZjBmMmYsIDB4YTc2ZmVhN2EsIDB4ODU3ZDFmYjQsIDB4MDJlYjIzZjYsIDB4YzNmNmExYjEsCisJMHg5MjA2ZmJiZSwgMHgxMzczZDcxZiwgMHg0MjRkZGM3MSwgMHg2OTM3MTBmNCwgMHgxMzNmM2M5YiwgMHg0ZTU0YzRlYywKKwkweGVjY2E0MTQ2LCAweGFiNWRhNDU4LCAweDhlZDFlYjA3LCAweDAxMmJhM2FjLCAweDIxMjFhZmJhLCAweDYwY2NkYTdlLAorCTB4ZmVlNWU2MzksIDB4NzQzNzExNzksIDB4NDJlMjdkMjksIDB4M2ZjNzhkYTIsIDB4YzIyNzc4YjAsIDB4NWYzOGEwZjksCisJMHgxMzllNzQwZSwgMHhjZjcwMTQ3MSwgMHgyMjIxZmMxNiwgMHg5MTM5YTg0ZSwgMHg0OTczODM5ZiwgMHhmNzRmZjQyZSwKKwkweGI0NDRhNmRiLCAweDI5ZmRkMDFmLCAweGJlYzdlZTg1LCAweGVmMmMyMmI4LCAweGViMzUxZmI3LCAweGIyMTQ3MTE3LAorCTB4NDJlZDEwYjUsIDB4N2JkNzQyY2IsIDB4N2ExMGYwMTksIDB4M2VhODZmY2IsIDB4MTIzNGY3ODAsIDB4MGRkN2E2MTUsCisJMHgwMzgxZjYzYSwgMHg1NTNiMGI4YSwgMHg0NmY1OWU3MSwgMHg3YjAxODA3YSwgMHg4ZTNjOGJjMSwgMHhhZmFkNGRhZiwKKwkweGUzYzg5YjNmLCAweGU3MzlmODkzLCAweDE4MWFmMDUyLCAweDRlZWUzYzFmLCAweGY1MzJlM2UwLCAweDI3NzcxMTMwLAorCTB4N2Y0MmY4ZTAsIDB4YzE1MWVmYjgsIDB4ZDhiY2VmYjUsIDB4ZTEzZGY3MDcsIDB4NzJlMDJlZTAsIDB4MjlmM2E4YWUsCisJMHgzZDZjOTdjMCwgMHhlZWYwMDA5MiwgMHg4M2VlNzI4OCwgMHhmZDQ3ZTlmYSwgMHg3MDVkMjRhNywgMHgxNzcyMTU1ZSwKKwkweGI2ZjZjYmM2LCAweGNmM2Y3OGNiLCAweDViYzU4MTNkLCAweGM4YzhmN2I5LCAweDRjM2JiYTFhLCAweDZlYWQzN2U4LAorCTB4YzJmNTFkN2YsIDB4NjhjYTQ2YWUsIDB4YTY3NjFlYTksIDB4YmZhOTBlOTEsIDB4MDM0MGJkODgsIDB4NDdjZTgxZWYsCisJMHg2ODFmM2Q2MiwgMHg3NWUyMmZkNiwgMHg3ZjdmM2FlOCwgMHgzZWZjMzgwOSwgMHhlNDJhMWMxYywgMHg5ZWUxODM1MSwKKwkweDkxOWM1ZjU3LCAweDE1NTE5MDNlLCAweDc1ZGExZjQyLCAweGIwZjRlNjZjLCAweDAxM2NlZjU2LCAweDRjZWYxZGZkLAorCTB4NTVmZDBjZGIsIDB4NTMwNzFkYzgsIDB4MjRlYjNlMDAsIDB4ZDEzNTdmYmMsIDB4MjZjYmVlYzQsIDB4MjU3NGZiZjMsCisJMHhkYzNiMDZmZSwgMHhiMzRhNGUzNywgMHhlMWE5ZmRlMCwgMHhlMDlkOTFkZiwgMHhkZDc4ZmUxNywgMHg0ZjcwMzE2ZCwKKwkweDVjM2ZmNDRjLCAweDRlZmRlMWQyLCAweGU0ZmI5ZTQyLCAweDU3ZjA0MjhlLCAweGEyNmZiMDJlLCAweDE2MjY4NWI5LAorCTB4ZGRmOTkxOTcsIDB4ZTUxNjVmNDgsIDB4ODkxYWFmMjMsIDB4NjFhM2Y2MTksIDB4NmJkZTAzNjgsIDB4NjhjYjQ0MDksCisJMHhjOTkzOGNiNywgMHgzMTNiYTAyNCwgMHg1NjFmNzE2ZiwgMHhmYWZiODc3YywgMHg3YzUyZWY3MCwgMHgyODE0ZDg5ZiwKKwkweDBlZDM0YjU4LCAweGRkNjIwZjRlLCAweDA1MDNjYjEzLCAweGZjMjA5NjBkLCAweDE2YTY1YzQ1LCAweDNjMzg1YjNlLAorCTB4NjZjNmYxZGMsIDB4Y2RiYjE3ZDAsIDB4NTJjOWZjZTIsIDB4OWYyM2QzNjIsIDB4ZmI2NjY3NTksIDB4ZTI1NWQ4ZTYsCisJMHhjMmIzZWRmYywgMHhlMTFkZDRiOSwgMHhmNjA2M2MxOCwgMHg3OTMyZmJkZiwgMHhiMTdmMjY5MiwgMHhlMzQ3MDYzOSwKKwkweGM3ZDQxNWZhLCAweGJiNThkOWQ3LCAweGJmMDcxZTZlLCAweDQ0YjJhM2VlLCAweDZmOGU1Zjg4LCAweGE2NmYxZjBhLAorCTB4NWM3M2IxMjQsIDB4OGJlZmY3MmQsIDB4MWY3YWI1ZWYsIDB4NDJkNThkYzYsIDB4ZjA0MTc2YmMsIDB4NmJjNjk1ZmIsCisJMHgwMWZjNzg4YiwgMHgyN2FkMTBlMSwgMHhlZjc4ZDFmYSwgMHg3YWIxNzlkYywgMHgwZTRiZmNhZiwgMHgzZWJlYmU3YiwKKwkweDBmZTIyNzQ5LCAweGNmNGRlZmQxLCAweDBiZTM2MTViLCAweGY5ZDg5MzRiLCAweGU4MDcxODJhLCAweDdkYzM3YmM3LAorCTB4NGE3Yjg1ZjEsIDB4Y2U0NWM5MTMsIDB4MGVmM2VlZmIsIDB4ODg5ZmRjNTUsIDB4OWY5Zjc3MzcsIDB4ZmQ3ZTcxODQsCisJMHgyOWZkYTVmYSwgMHhlMTVjNjA5NiwgMHg5MmRmZjA0MCwgMHg4NmU1ZTZjOCwgMHhkMDgyYmY3OCwgMHhkZWZiMGFlZiwKKwkweDhmMWM0ZTM3LCAweGMxNDdmM2RmLCAweGJiNDVmZDNlLCAweDdmZWFmNzhjLCAweDc1Mzc0ODcxLCAweGQ3Nzk5ODdiLAorCTB4NWRiODMxMjcsIDB4N2RjN2FmMTMsIDB4MWM0N2QyMzMsIDB4MmY4Y2MyZGIsIDB4MzVmYjg5ZWEsIDB4NzZhYTllZTIsCisJMHhmY2NiYmI3ZSwgMHgxMGZlNjA4YiwgMHhiYzZlMWM0NywgMHhjNDhlOWNhNSwgMHgzMGM3NzdiYywgMHg5OWY3Yjg3YywKKwkweGVkMDU5ZWYwLCAweDc3YmRlMzE3LCAweGUyNTdmOGM3LCAweGYxYTliMGJlLCAweGQ3YjczYjdjLCAweDlmZGViZWVjLAorCTB4YTZiY2Y3ODEsIDB4NDBjMzNiMzEsIDB4NzI4ZGUwZjQsIDB4ZDhmNTA0ZmQsIDB4NGE2NTY5OWIsIDB4MDZmYWM1M2YsCisJMHhmZmIyMTZjOSwgMHg0MTBmNDUyZSwgMHg3ODU0ZWJiOCwgMHgyMzc3MGZlZCwgMHhmYmY0NTdlMiwgMHg0ZmJlNjFmOSwKKwkweGU3MDJjMzg5LCAweGJlNWMyNWI3LCAweDgzNTFkOTJkLCAweDFmMzhhZmZhLCAweDhjYjBmZTdkLCAweDEzOWYxN2YxLAorCTB4YmNmOTI3ZTYsIDB4Y2ZmM2MyNTUsIDB4ZWIyMTE3NTIsIDB4Zjk1YTFmMjksIDB4ODgzMzQxNjQsIDB4ODQ0OTI1YjksCisJMHhiZWMzMTc1YywgMHg0NmU5MDlkZiwgMHhmOTdjOWZiNSwgMHg4N2VjZmRiZCwgMHhhZWFlNTQyNCwgMHg1NzI4MGQyMCwKKwkweGRkNThmZTU2LCAweGZiZGM5YWFlLCAweGI0OWZkMDY3LCAweGRjZTFmYmZlLCAweGIxZDYyNzJlLCAweDQ3OWU4OTM5LAorCTB4MjYyOWVmNDAsIDB4ZDYxZjIwYzUsIDB4MzE4NWY5M2UsIDB4MWY3ODE5NGEsIDB4Nzc3Y2E2OWMsIDB4YWZmODFlOTgsCisJMHg0NmFlZDMxOSwgMHg0OGJmYTYxYiwgMHg0NDk2M2M3MiwgMHhjOTI3YjdmMSwgMHg5ZWQyMGRiNSwgMHhiZGZmNTlmNywKKwkweDdlNGNiZGI1LCAweGI5NDM4ZDZjLCAweDJlZmQ2NGQ1LCAweDA4Nzk3NWYyLCAweGMwZjdlYmUzLCAweDFlMTQwOTNiLAorCTB4OTdkMzEzMjYsIDB4NzIwZDc0MTIsIDB4NWUyZGVhMTQsIDB4ZjFlMzg3YTQsIDB4NjI2NmFhNmIsIDB4NzQwNDllZGUsCisJMHgyOWNiZjcxZiwgMHhlZmNlMzE1MywgMHg4MDBlOTE5NywgMHg0NzUyYTZmNywgMHgzNjI1ZDgxZSwgMHg5OTdiYjI1NSwKKwkweGIzZjMxMzY2LCAweGY2MzE3ZjdiLCAweDBjODM3MDM1LCAweDBjYmZiYjZiLCAweDhlYjZjMWNlLCAweGY3YjAzZWZkLAorCTB4N2NmZWU4YjQsIDB4NWE1N2UyMTAsIDB4OGJmMTYzYWUsIDB4ZmVmZjNhMDksIDB4ZTJmMTkwZDQsIDB4ZTA0OWJkMjMsCisJMHg2OTFmOGY4NywgMHgzODhmMzhjNCwgMHgyMWFmMzRiOSwgMHhjZGNhNWUyNCwgMHg5ZWRiZDE3MSwgMHgxZWMyNzY4NSwKKwkweGI2MWJiMDgzLCAweGE4YmRlMDQ1LCAweDgxODNhMWRhLCAweDE4NDM1YzhmLCAweDFiZGM0NTllLCAweGRmNTQyMWNjLAorCTB4ODQ3MGEyZWQsIDB4YmY5MTRiYTAsIDB4MTlmMjRkYTYsIDB4MTJmZGYwYTIsIDB4ZGVkNGUzZjQsIDB4MGY5ODRiZTUsCisJMHg3YWU3ZWE3MiwgMHhmOTg5ODNmNCwgMHg1YzlhYmRjNSwgMHgyMTJlZmUwNiwgMHgzNjRiZTY5ZiwgMHhmYWUzNDc2NiwKKwkweGZlMjIzY2ZjLCAweDVjZDk3ZjMxLCAweGI4ZjMyNzRlLCAweDkyM2YzZjFlLCAweGIxMjk3YmMxLCAweDViYmI0MDY3LAorCTB4NDc0YTI0Y2MsIDB4ZjJmY2Q0YjcsIDB4Njc1YzIyYjYsIDB4ZjQxYTIxOGQsIDB4MTlmN2UxMDUsIDB4NmYwOGNmNTgsCisJMHg2NTNmNzJmZiwgMHhhNThkZjc2NSwgMHg3Mjc0MzY0MCwgMHg2MmU3YzI4NiwgMHhmOWMwMzBmYiwgMHhkZDliM2JiMiwKKwkweDg4YzMyM2JiLCAweGVlOGNmYzAzLCAweDgxYjdjMzdkLCAweDg4MzRjMjdkLCAweDdmMjlhZmY5LCAweGEzZTQ5NzMyLAorCTB4NzM4NjZkNWUsIDB4NDRhZmFkZDQsIDB4MmYyMmY4ZjAsIDB4YzhlYzRmYmYsIDB4ZmE5Y2Y4ODMsIDB4OGM3Y2I0YWEsCisJMHhjMDFhMzkxMywgMHgwZGJhMzc3NywgMHhjN2RjMGNmZSwgMHg1NDQ4ZWY5NCwgMHhmMmRhMGUzNiwgMHhiODdhMTlmZCwKKwkweGY1NDI5OWFmLCAweGQ5MmY5YTM1LCAweDBmY2IyZjcyLCAweGQxZDRhZmY1LCAweDRmMmQ5MmZjLCAweGZkZDNkMGNkLAorCTB4N2ZjNmJlZTEsIDB4NWIzNWYyMGEsIDB4YmU3Y2IxNzYsIDB4ZjM0Y2E1N2YsIDB4NjU1ZTViY2QsIDB4NDk2MGUxZjUsCisJMHgyZGMxZWMwOSwgMHg2ODc4NjcwNywgMHhiOWEyNjdmZiwgMHhmMWZiYjdiYywgMHhlNWZiYjU5ZSwgMHgzYjUwYmFlMSwKKwkweGUzMzI2MzZiLCAweDlkYjg2NzViLCAweDU5MjY0Y2Y4LCAweDFlZjAwNTVjLCAweGIyZmViZTExLCAweDVhMGYxZDY0LAorCTB4YWM1NGM1NjksIDB4NDkyN2I0NTcsIDB4ZjMyNWRiZTEsIDB4ZjdlNTZlNzEsIDB4OTI0NjI3YTMsIDB4YjdlNjA4OTYsCisJMHgzYzUxNDRmMywgMHg4ZTE4ZTgxYywgMHg5M2FmYzc3ZSwgMHg2ZTllOTg2MiwgMHgzOGZiZTNmMywgMHg0ZjAxMWZhMiwKKwkweDc3MTg5ZmQxLCAweGUwNjdjODM1LCAweGFjNzg5YWNiLCAweDNmODY2NGVjLCAweDFjNDZjZTNhLCAweGRkODM5ODY3LAorCTB4Y2I0YWFlMmIsIDB4YmM1MWZjMDMsIDB4ZjRkZTM5ZTksIDB4OGRiYmZjZWMsIDB4MWJmNjhmY2QsIDB4YTA3MjhiOWQsCisJMHgwN2Y4ZWMwMCwgMHgzM2Y1YTJiZSwgMHhkMmQ2ZjM4MywgMHg5MzMyNDE0OSwgMHgzMTM2YjcyZiwgMHgzYTIwNmI3ZiwKKwkweDYyNjllOTBiLCAweGE1Njc3ZjI0LCAweDY2OGViZDUwLCAweGU0YzY4NzBlLCAweDQ2NmY3ZTY4LCAweGMyNTEyYmMwLAorCTB4MWMzODlhNzEsIDB4Y2Y3OGZjZDMsIDB4NWRkNzRhZjIsIDB4Nzc1YTFmZjEsIDB4ZjAxY2JlMDgsIDB4ZjY4MWNhNWUsCisJMHhmNWIzYjdhYiwgMHhjZDdiZjBjNCwgMHhkNDE4OGNmZSwgMHhmNTU3ZWVmNywgMHhhNjgzNjY3NywgMHhiOGMxMDk3ZCwKKwkweDE2NGM3NzM2LCAweDgyMjdiZmI2LCAweGQ5M2JmMTk4LCAweDMzMmVkN2RlLCAweGEwYWRlOTk3LCAweDJjNzc4YWNmLAorCTB4MTIzYWU3ODgsIDB4N2JlYzQ3ZWEsIDB4YzU4ZGEyYWYsIDB4MzlkNzA2NjcsIDB4ZDNhZjkwYTMsIDB4NjM2OWQ3YzYsCisJMHhlOGFhZjRlYiwgMHg2NDA5MWM5NSwgMHhhN2Y2YjZjYywgMHhmN2Y4M2VlMywgMHg5ZjJhMzdmNSwgMHhlN2RhYTdmNywKKwkweDdkODNmYWUxLCAweGQ2NWUxMDNkLCAweGQ2ZjkzYTczLCAweGE5ZTYyMmYwLCAweDljMWY2NzgxLCAweGYwMTNmMzM1LAorCTB4ZWQ4ZGZkODQsIDB4NTJlOWE5NDYsIDB4NTkyNmIzY2MsIDB4ZmIzNTkzOWMsIDB4OGUxYmYzM2IsIDB4ZDVkYWNhNTcsCisJMHhiOWUyY2VkZCwgMHhlYmE2YTI4OSwgMHgzYTk5ZGRiYSwgMHhlZDEwMmI4OCwgMHgxMDI3YzE2YSwgMHgzZGZmYjQxZiwKKwkweDg5ZWRjYzlhLCAweDgwNmQyNDY5LCAweDkzYzdjNGY4LCAweDBkZGFjMjhiLCAweDljZjZiYmYxLCAweGUyY2QxM2Q4LAorCTB4OGFmNmI1ZDUsIDB4Mjc3Yjc4OWUsIDB4OWNmNGFmZGMsIDB4OGMwYWVmNjMsIDB4YzA2ZmQ4ZDMsIDB4MjU5Y2Y0Y2YsCisJMHg1ZjI4MmVkOCwgMHg5YzczZjlkNCwgMHgzZmI3ZjYzZiwgMHg3ZTYwMzIwNSwgMHhlN2IyYTY4NSwgMHg0N2Q1M2IxNSwKKwkweDdlNDMxY2I2LCAweGVjYjgzODVkLCAweDdmOWE0Y2I2LCAweGM4OGZmOTM1LCAweGNiNTMwYmNmLCAweGZjYTRjOGJlLAorCTB4OWZiMjdmN2MsIDB4N2Q5NjQ3ZTUsIDB4NWJmMjE0MzEsIDB4NDRmZWFjZmMsIDB4ZWZjMGYzYzcsIDB4NjMzZmM3ODksCisJMHhhZjUwNzI1MiwgMHg0MTU5MmQ3OCwgMHgzYWU1YzliOCwgMHgwMjY0NzQwMiwgMHhjN2FlODYyNSwgMHhlMzA5YWFmNCwKKwkweDA3NWMwNGY2LCAweGJhNGQwYjRhLCAweDZmZjc3MDg2LCAweDA3YTNlZWRmLCAweDgxMjk1N2U2LCAweGYzYjAxNTNmLAorCTB4NWY4MDNiNzEsIDB4ZjQwM2IyYWYsIDB4ZGY3YmIxNDQsIDB4OGVmZjdiM2QsIDB4NDgzZTVkZjcsIDB4MWUwMjc1NzYsCisJMHgxNmJiMjNlYSwgMHg1ZGZjZDI2NSwgMHgxZmEwOWY5MSwgMHgzZGQwNzI0ZiwgMHhjNTE1ZjYwMSwgMHhmOWQwMTY0NiwKKwkweDljOWI1ZDRhLCAweGQ1OTEzZmEwLCAweGUxMWViMzc2LCAweDc0NWVlZGNhLCAweGZjMjgxNzhkLCAweGYzZjdkOTVlLAorCTB4NjFiMmE1ZWYsIDB4YjE4ZjMwOWMsIDB4ZWZkNDBmOWMsIDB4ZTA2ZmYyZmIsIDB4NjMzZmFkZjcsIDB4N2FmOTgzYjEsCisJMHhkYjk2Yzc2YywgMHhkYjFhZmY0MCwgMHg0Yzk3ZjZmMSwgMHgzOWZiYjMwZSwgMHhjMTYzZGU2MiwgMHg5N2JmNDlhZSwKKwkweGZlNzA5YmI0LCAweDVlYWUzYjYzLCAweGZkYzdmNTAxLCAweGU4MGIyM2I2LCAweDVmMzFjMjY0LCAweDllODViMDEzLAorCTB4YWFhNTJmYmQsIDB4Y2Y5MGU1ZWUsIDB4MzlkNzFhMmUsIDB4YzA0ZGRmYTAsIDB4NTRhYTUzZTMsIDB4ZjQ3ODQ2MGQsCisJMHg4NTdjNzgzMiwgMHhmMWRkNjdmMSwgMHg2OGZkOWI4NywgMHg3ZmRmNTRmYywgMHhmYTNhZmFhMiwgMHgyMGM5N2I5MSwKKwkweGM0MzNmODNiLCAweGJkYWQ3YTdkLCAweDVkMjU2OGY0LCAweDIxM2VmZDFmLCAweGEyMTA2NzQwLCAweDZmM2M0ZjRmLAorCTB4OTgyNDhjYTYsIDB4YWFkMTI1MmYsIDB4NTkzOWI5N2MsIDB4OTZjMmJmNTUsIDB4OTI5ZjJhYTksIDB4N2NhYWI1NzQsCisJMHhjYWE3OTI5YSwgMHg1NjMxMWY0ZiwgMHg3YjA2ZmY1NSwgMHg2MzdmMmFhOSwgMHhmZDU1MzRjOSwgMHgyYWE1NDc0YSwKKwkweDUzNmJlNzlmLCAweGQ0MzgyZmQ1LCAweDQyM2YyZWFlLCAweGZlNDNjMDY0LCAweDkwZWJmYjUxLCAweGEwNzQ5ZDE2LAorCTB4NzRmOGI1ZDksIDB4OGU5MGViYzMsIDB4ODcwMzBiZmQsIDB4ZWQ3YzVlZDYsIDB4ZTFkN2I2ZjksIDB4NmIxN2IwYmIsCisJMHhmYjA5MzNlZiwgMHhjNWIyY2RmMSwgMHgyNzZmMGM2YiwgMHgwNTY3ZDI0ZSwgMHg3NTkwMWZkZiwgMHgxOGQzM2VlYywKKwkweDk0ZWFlYmFiLCAweGE2N2RlMGEyLCAweGE2MmY2MDg5LCAweDdjNThhODQ4LCAweDAwZTM0N2VlLCAweDNkOTgwYjRmLAorCTB4MDYyMDI4ZWQsIDB4NjhhZGJlZTMsIDB4Njg2YTNjODcsIDB4MmMwZmU2NzgsIDB4ZjgxZDIwMGUsIDB4NWNjMDg0ZGUsCisJMHg5ZTI3YmFkNSwgMHg1ZGQ2YTk3NywgMHhlMGQ1NmU0YSwgMHg1ZjJhOGQ2OSwgMHg1NTVkYmI2MSwgMHgwNmQyNGE3ZiwKKwkweGU1MzRmOTU1LCAweGRkM2MxYTA3LCAweDYwZGZjYWFmLCAweGQzYzFhMmRmLCAweDdlOWUwZDM2LCAweGY0MTcyYWFlLAorCTB4NWFlZGMxZGQsIDB4NDUxZWMwZmIsIDB4Y2VmZWYxZDMsIDB4NzVjM2MwNzIsIDB4OGY4ODAzYTcsIDB4NzJkNmNlOTIsCisJMHg0N2I1ZDNjMCwgMHg4NTVmMTBkYiwgMHhiMDM5NjczZSwgMHgwZDQzZTJjYiwgMHhhM2VhNDNhZiwgMHhmNzY4MzFlNywKKwkweGE2MTI2MzVhLCAweGI0MTUxYTA3LCAweDFjNmMxZDZiLCAweDQ2YTFlOTgxLCAweDc1ZmY3ZTNiLCAweGVmYTYwOTYzLAorCTB4N2QzMDNhMzQsIDB4YTYyYTcxYWYsIDB4NGM0ZThkOWQsIDB4YjBkYjFhZGIsIDB4ZWQ4ZDczZmUsIDB4ZGIxNjJlY2MsCisJMHgzYTQ1ZGVmNywgMHg3NWJhMDdkOCwgMHg4Mjc4Mzc3ZSwgMHg3NzkyM2YxNywgMHhlZWNiZjAwMywgMHhjODZlZmU0MSwKKwkweDM3ZWM0NWRmLCAweDI1ZjlhMjRjLCAweGJlZTg0NGMwLCAweDM3NGYyOWZjLCAweDgwMDIzYWE0LCAweGNhMWMzNzU3LAorCTB4MThmMTgyOGEsIDB4MWU0NzNhNmQsIDB4YTQ3N2UxZTgsIDB4M2VhMWY4NGMsIDB4MzdiYjkwOWQsIDB4ZDE2YzkzMzgsCisJMHg3OWE2NmYyYywgMHhiM2M2MzY0NCwgMHg4M2ExZjg0ZCwgMHgyMDMzZDcxMiwgMHgzM2E5ZDA0YSwgMHhmN2M4MDZlMSwKKwkweDc3NzJiMDQ0LCAweDQwMWI4NGNhLCAweGZlYzZmZjBmLCAweGZmM2Y0NzczLCAweDYxMjkxZGY5LCAweDljY2ZlN2ZjLAorCTB4ZDc2MGFjNTYsIDB4NzBkNWZjMzksIDB4MzBlM2MwMmIsIDB4NDgzOTZmYjcsIDB4NGQwOTYxOWUsIDB4MDY3OWY1NGIsCisJMHgwNzQ3YjM5MCwgMHg4MGYwYjdiOCwgMHhlMDA5YjRhZSwgMHhjZmIzYTZkMCwgMHhlYmVmNzhjMSwgMHhiN2U4MDQwZCwKKwkweDVmZTc2MjRhLCAweGNhOTVjZjUxLCAweDBkY2Y0MWU0LCAweDFkNGYzYzI2LCAweDYwNTYzOWQxLCAweDc4MTQ5OTVjLAorCTB4M2RiY2UwMGMsIDB4ZGVlMTEyYTUsIDB4MDA2NDBkNjMsIDB4NGUyOWJjZmMsIDB4M2MwZjhmOTYsIDB4ZjI0M2Q5MjYsCisJMHgwNzlmMDYwNiwgMHhiNmZjNmU1MiwgMHgzODU4ZjNlMSwgMHg2MjkxM2NmOCwgMHhjZmI2ZmE2MywgMHg4MDdhMGU5MSwKKwkweDc0YTkxZmM4LCAweDNlN2VjMWQ0LCAweDBhYjhlYTUyLCAweDRkMzhjZmVmLCAweGFkM2FmZjZjLCAweDNlZDBhYmRlLAorCTB4MTM5YTI4ZTQsIDB4OTIxOWU3NjIsIDB4ZDFmNzYwNmEsIDB4ZDgyMjYyZTEsIDB4NzE5MTZmM2IsIDB4MzllMTZiOWYsCisJMHg3YmU5OTUyMSwgMHhjZTcwMjc0OCwgMHhlNzg5MTc5YywgMHhmNjNhMjM4MiwgMHhmZWI2ODE5ZSwgMHhiM2Q3MGUwMiwKKwkweGUzZGJjMjgzLCAweGJkMzJhNjE2LCAweGRkNTY2Y2EyLCAweGZlZDAyZjMzLCAweDYwNDVkNjdhLCAweGUxY2UzZGQ3LAorCTB4MzRmNThmYTgsIDB4MzQyYWU4NTAsIDB4OGU3MGRkM2QsIDB4MWNlYzliOTUsIDB4OWRiZmU4MjQsIDB4ZjJkMTdmMGYsCisJMHhmYjZlM2E2NywgMHhmZDY4ZWZlYiwgMHhkYTQ1ZDY0ZiwgMHhhZWQ4ODY1MSwgMHhjMmRkZjg0MSwgMHgzNThjMmYyYiwKKwkweGIwYjRmZWEzLCAweGU0MGNiZDJhLCAweDA3ZWU3Y2UyLCAweDI3ZDU2NDVjLCAweDFmNTAzYmEwLCAweDE3Mjc4NDZkLAorCTB4OWFmMjViOTcsIDB4Y2FjOTA0MjksIDB4M2MyMzRhYjgsIDB4YjY5ZDU1MjUsIDB4ZDVkMjE5YTYsIDB4YzIzN2VlYzMsCisJMHhhM2I1MjkxMywgMHgxYTgzMzU3NiwgMHg3MGI3NDc1YiwgMHhmZjNmZjIxMSwgMHg1ZTc0OGRiYiwgMHgwYWNiZDc4YiwKKwkweGZiODljZjNiLCAweDE0NTczNWFlLCAweGY3ZTgyMmNmLCAweGEyM2I4ZjA4LCAweGVhZjNjMDQwLCAweGQxNmYwZTIyLAorCTB4ZDc4NzExNmUsIDB4M2ZhZTE0ODksIDB4MGI5YzkwZTYsIDB4NjdkNjNmNmEsIDB4MGI1ZGVmNDAsIDB4YzAxZWNkZGYsCisJMHhlNzJlYTBjZiwgMHg0NjA3ZTNmYSwgMHhmZGY2YWUzNiwgMHhlMmVlMzExMiwgMHgzYWZlNzY1NCwgMHgwOTk0YTQ2MiwKKwkweDRjMmRlNGZhLCAweGZkY2VlNDBlLCAweGJhMjJhZWUyLCAweDliMGVkY2ZlLCAweDE2MTVlMzBlLCAweDc4MDBiZGQ3LAorCTB4NzhlNzZkZTgsIDB4ZDg3NjkwMzQsIDB4NGIzY2IzNGYsIDB4MjIxZGY5M2UsIDB4OGY3NTRlMjYsIDB4ZDJmMjUyZjcsCisJMHgwZjJiNjlkZSwgMHg3ZTg1OTc5NSwgMHhiY2E4Nzk2NywgMHg5NmI0MDkyYywgMHhmMjE0NWM4MywgMHg3ZDRmZjg1MSwKKwkweDJmOWNkNThkLCAweDNkM2YyMDM3LCAweGYzMWViOGQwLCAweDk4M2QxYjA3LCAweGUxNmM2YTFlLCAweGNiMTViOTdjLAorCTB4OTg3YzY5ZGYsIDB4ZTcyZjY1ZjMsIDB4N2JmMTNiY2IsIDB4NGM1Y2UzNDcsIDB4NThiYTM1ZjcsIDB4OTUxOWNhM2UsCisJMHhlY2M0ZmIwYSwgMHgzN2M0ZjhjMiwgMHhmODA4OThiNiwgMHg0YzNiN2FlNywgMHg3NzQxOWYxOCwgMHhjNjhmNjNjNCwKKwkweDA5OTFmYzQxLCAweGUzNmE3MWVmLCAweGJlN2NiNDkwLCAweGY3NzYxZThmLCAweDA1MjUzNzdiLCAweDFmOGJlOWM2LAorCTB4Yzg3MTdkMDIsIDB4OTg3NGY0YzAsIDB4NGJlMDU2MjgsIDB4ZTRmZThmZjksIDB4MGZhZmQwMDYsIDB4ZjQxNThhMmIsCisJMHhjZGQ0ODJlOSwgMHhhYzUwZWYyYywgMHg3YzJmOWEwNiwgMHg4YTVkZTc5NCwgMHgyMmFjMDRkNSwgMHg1YmU0MjFmNSwKKwkweDM1OGEzZDg3LCAweDFmOGJlNjgyLCAweDdiOTU4ODdkLCAweGM3ZjMzYTA5LCAweDA2ZjViYTNkLCAweDIyNTlmMDBmLAorCTB4NTFmZDgwMWQsIDB4NDQ5Y2NlNmUsIDB4ZDc5NTA1YzUsIDB4NWY2MDA3YTUsIDB4MzI1YTQ5NGMsIDB4Y2VjNWY2MDksCisJMHg2M2U5MDUxNCwgMHgwMGUxYjI5YSwgMHhkODhmYTdlNCwgMHhmYWFiODdhNiwgMHg0NmRlNGIwZSwgMHg1NzE2NTc2OCwKKwkweDkzNzY4N2E5LCAweDg0NmNkNmQyLCAweGRkODc5Mzc2LCAweDM3NmQwZmFmLCAweDhkYWVkNDc1LCAweGRmNjE5ZjkwLAorCTB4NzRmZDA3YTYsIDB4ZjhiMWYwMjcsIDB4MmYyMjNmNjAsIDB4MTY5ZjA1Y2EsIDB4M2JhMzcyNzEsIDB4NzIwZjI4OWMsCisJMHgwZjI4OWRkYiwgMHg2NmNhNWMwNCwgMHhmNjBkZGU1NywgMHhjOTc2ZmFjZiwgMHg2NjNjYzEyNiwgMHgwYTQxN2Q0YiwKKwkweDg2ZTg5MzEwLCAweGJmMjk0OWY3LCAweDk3ZjUzZWJlLCAweDVkYjQwZGQ2LCAweGM1YWZlNDNkLCAweDdjMzcwZmZjLAorCTB4YTZmYmZjYmIsIDB4ZmJmYzMwZDQsIDB4NDFkZmJlNDMsIDB4ZmJkYzQzZGUsIDB4MGVmNjQ2ODcsIDB4MmUxYzMzY2MsCisJMHhhYzRiMWRmNSwgMHg3MTJhOGVmOCwgMHg3YWNmNDE1OSwgMHg5N2YzY2I5ZSwgMHg5ZmU1YTUyMCwgMHg3ZjhiYjRmMSwKKwkweDcwZTc0MDdmLCAweDUyYWIzOGMxLCAweDNmYjIxZmI5LCAweDY1NDlhODdmLCAweDhmNzM1ZmZiLCAweGNlNzI4MDY0LAorCTB4NmQ1MmVhMWYsIDB4ZWEzY2Y3YWEsIDB4NzZiZmJiMDgsIDB4NmQzYjM4YTksIDB4ZWUzNmI4OWMsIDB4M2I2OTM1NjQsCisJMHgxZmVjYzhlOCwgMHhmNzBiNTI2ZiwgMHhjN2ZhYjJkYywgMHg2YTc4OGI3ZiwgMHhkZjc4MWM2ZCwgMHhlMzEwNmFiOSwKKwkweGQ3ODE3M2E3LCAweDQ5NmViYTUwLCAweGRlNGY5MDFkLCAweGRjMzgwOTdiLCAweGZkMGUwZTFiLCAweDljNTg0M2Q2LAorCTB4MjQzOGJmN2IsIDB4NWRhZWVmMWUsIDB4YjNjNTcxMTcsIDB4ZmM3OThkNzcsIDB4ODI3ZDc2YmIsIDB4YWZhZmZhMmUsCisJMHhjZjVmYzE5NSwgMHhiYmY1NGZlMCwgMHgxNTdlNjBjNywgMHhlYzA0YWQ4YiwgMHhlN2ZjYTE1NiwgMHgzZmUxMTc3NywKKwkweDZkZjY3ZTVhLCAweDE3OWJjOWYxLCAweDY1YmJlMWQ3LCAweGYzZDhmODYxLCAweGI4OThmOGUxLCAweDg1NGRhZmNmLAorCTB4ZjNmNzBhOWUsIDB4ZGUxMjFlMjAsIDB4N2U3MzgyMzksIDB4MWY2YmEyNjUsIDB4MTY1M2QzZjQsIDB4Y2UwZTliZjgsCisJMHhkZGVjNzFhMSwgMHhhZWQxODNmMCwgMHgzMjVkZjBmZCwgMHgxMTA2YjhiMiwgMHhlNzVhN2M5NywgMHg2ZGU4MTVmOSwKKwkweDE5ZmEzZGVmLCAweDEwNmViM2YyLCAweGJjOGY3NDE2LCAweDk3YTBmMzQxLCAweDdjZTZjM2ZkLCAweDQ2NDdlMDEzLAorCTB4ZWZhMThkZjgsIDB4N2YxNDBmOGYsIDB4ZmYyZTFiZmIsIDB4ZGY2Y2E3ZmEsIDB4OWVkNDM4ODksIDB4YTA2NjVmNmQsCisJMHhmYjEyZWVmZCwgMHg1NDc4MjA2MiwgMHg3MGZkZTNjOCwgMHgyNGI3YTQzZiwgMHg5NzY3ZTUxMiwgMHhkZWYwN2M0NCwKKwkweDAyNjk1NzcxLCAweGU5NWQyZGVhLCAweGRmYTQzZDQ2LCAweDJiYjhiOWY2LCAweGQ3ZmIxYjNkLCAweDkyYmI4ZjllLAorCTB4ZGM2Y2NjNGIsIDB4N2QyMTUzYzksIDB4MjE1NGY5MmYsIDB4ZjBkZmJkYzgsIDB4YTM3NmNiZjgsIDB4YjAzZGUwYTcsCisJMHg0MDhkOGYwZiwgMHg5MjhkZmVmZiwgMHhhMGUwMTBiZiwgMHhiZDc3NTczZCwgMHhjOTRjYTBiNSwgMHhhNmJlN2ZlZCwKKwkweGViMDQ5YmViLCAweGJiYWUzZGFiLCAweGU5NWRiZTFiLCAweGZkNzZiYjc5LCAweGI5YzQwOGRmLCAweDE1ZmY1YjhmLAorCTB4YWVlZmY3ODEsIDB4MTlkZGZjZmMsIDB4NWU4MGFiOTMsIDB4MTIwMjZhZTEsIDB4ZjU0NWQzMTksIDB4NTRiZjlhMDksCisJMHg4OTM5ZDZmYywgMHg0MzMzZDM5ZSwgMHg2ZjI1ZTVjZSwgMHg5ZTJlMzhiMywgMHhmZGU3Y2Y2YSwgMHhlZDVjMDlkZSwKKwkweDk2MGRjNzUxLCAweDVlMzA4YWZhLCAweGUxNDdmNjQ1LCAweDdiMWQ2MGJkLCAweDczYzQ0MzZmLCAweGYzY2ZjOWJkLAorCTB4MjQzZWJjZjQsIDB4OWQ3MGVkMGQsIDB4ZmFmM2FhMTksIDB4ZmEyZDFmMWQsIDB4MDg4MWYyMWUsIDB4YTY3OGVmOGMsCisJMHhjYzNjNDRmZCwgMHhmMTlkOGZmNSwgMHgwOTQ1NzkzZiwgMHhlZGJkNzdkMiwgMHg5ZGY0MjQ2ZiwgMHhiZGY1ZGFjMCwKKwkweDg2ZDc3Y2FhLCAweDcwNTZmYmUwLCAweDVmZjZhYjFmLCAweDJhMjVjYTMyLCAweDRmMTA1YWM3LCAweGRhZTMzNWU0LAorCTB4ZGE0YWY5MTAsIDB4ZWYwN2RjZmUsIDB4NTVkZjk0ZDEsIDB4YmU1MGMwMDIsIDB4ZDA3NGNmMzYsIDB4M2NmYzk1NzYsCisJMHg4ZGU0NDg0NCwgMHg5MmFlZGEwZSwgMHg2Nzg5MWY5ZiwgMHhlNzhmMmIyNSwgMHhiMDlmM2RmNSwgMHhmZjI4YmE3YywKKwkweDdmYWM0Y2UzLCAweDFjNmZlODk1LCAweDc5MTY0ZjJiLCAweDIyZDVkZmRlLCAweDk2MjM3ODlmLCAweDI1ZjY4YTY3LAorCTB4YzYyMzlmMmMsIDB4YWRlZDY0YWYsIDB4YWRlNGZlYWMsIDB4N2EwOTljZmYsIDB4MzNmN2UwOGQsIDB4ZTA5Y2I4ZDIsCisJMHhmZTUxNTJlZiwgMHhiYTJiNGNlZiwgMHhiYThlYmM2OCwgMHhmMTA3Y2I5YywgMHgxZGM1NTUwZSwgMHg4NWRmMjJkMywKKwkweDYxMjZkYzdkLCAweDlkZWQ2MWVjLCAweDlmZTdiNDA2LCAweDBkY2I2OThkLCAweGUyMmYyZmJkLCAweDU2ZTU5YzdhLAorCTB4N2JhYWYzOGMsIDB4OTk3NmY4NzEsIDB4MWU4MTNiYzcsIDB4ZTlmYjljYjMsIDB4ZmEwYjY0MmIsIDB4NjVlZjdhNjEsCisJMHgzZDIwN2U3YywgMHg5N2ZhZTU3MCwgMHg1N2VjZjg1NSwgMHg0NmQzZGZjZSwgMHhlZjFkMjU0NywgMHhmMTEzMGZkYywKKwkweGQ2MTkwMjdlLCAweGVlMDJmMTg5LCAweDI3YzQ0OTM0LCAweDExNmFiZGUwLCAweDQ1OTcxNzU3LCAweDhlN2U3MDFjLAorCTB4YmQ4MjI5N2IsIDB4MTNiMjdhYTcsIDB4OTdjYWVmZjksIDB4NmViYjdkOTgsIDB4ZWYyOGViY2IsIDB4ZGEwYWNhOTYsCisJMHhlYTFlYmU5NywgMHhlOWYwMDc1YSwgMHgyZjc3YjJiNiwgMHg4N2RmYWU1NywgMHhjNTMxZjRmYiwgMHg4MTYwZmRjNiwKKwkweGJjZjBhMTUxLCAweDNkZmMzZmIzLCAweDg1MTdmMTY5LCAweDNmZmNiYWJmLCAweDVkYWQ3ZjBjLCAweDVmZDdkYzVkLAorCTB4N2ZmMTg1N2QsIDB4MDdlNjU2ZGQsIDB4ZmQzYzczYjYsIDB4NzMxNGE3NDksIDB4ZjAwMjNkNzgsIDB4MzNhMmI3M2EsCisJMHgyMDg2NWEzYiwgMHg3NzhjNGVlZSwgMHgyOWRmOTBhYiwgMHg2ZjU2ZjM4MiwgMHhkZTAwOTU4MywgMHhkY2NlYTViYiwKKwkweDVmZTBjMzBmLCAweDlmMzhhZTdiLCAweDY5NzE1NDQxLCAweGY3YzNmYjNiLCAweGY3ZDA0YmU5LCAweGZhNGRmZmQzLAorCTB4OGRmYmQ0NGUsIDB4MWYxYmYwNzYsIDB4MTVlNWVmNjUsIDB4MThjOWZlNzcsIDB4NGVmNDFmMWEsIDB4MGYwNzNiMWEsCisJMHgzMTdlNjc2ZSwgMHgyYzE3MTcxMSwgMHg3MTNjMzJiNywgMHhkNTVkNTNmZiwgMHhmZmMxZTMzYiwgMHhjNGMzZjYyNCwKKwkweGZlMDZkMjQ4LCAweDc2ZDc0YTA0LCAweGEwNzZkNzRlLCAweDQxYmY0MTZiLCAweDE3NmQxNDNmLCAweGZhNDFiZTA2LAorCTB4OTEyZTJjMjUsIDB4ZmRiN2U5YzMsIDB4MjVlMWZhZTEsIDB4N2ZlMWZhZTAsIDB4YTliYmFlMTMsIDB4ZGJmZThjM2UsCisJMHg0ZWQwMjIxNywgMHgzZmYzODVhMywgMHhiYzA1NWMzOCwgMHgwZTJmZDMyMywgMHhmZmY0YzhlNywgMHhkMzIzOWMwYywKKwkweDQzOWQ5NTE1LCAweGY5MjA3YmMwLCAweDk4OGZjNWE0LCAweDVhN2Q5ODc3LCAweGU5ZjY0ZGY0LCAweDRmOWMxOTIzLAorCTB4OGYxOGZkZTksIDB4NGM3YmM1YWIsIDB4MjdiYzNmN2EsIDB4ZWYxYzVmYTQsIDB4MzBmZmYyZWEsIDB4ZDM3MGI1ZGUsCisJMHg5ZmRjYjVhNiwgMHg5ODVlZmRhYiwgMHhmYmJmMjAzZSwgMHg3ZmY4ZTA1NiwgMHhiMGIwNGZjZCwgMHg3Y2FhYmY2MSwKKwkweDU0YjdmYWYxLCAweGVmM2M0YmU1LCAweDQxNWY5NjVmLCAweDViZmZmYmQ4LCAweDU3ZTEwNWZlLCAweDJhZmNmOTk4LAorCTB4YjUxZmY4MWQsIDB4YzQzNzQxZjIsIDB4YzdhMDIzZjksIDB4N2FmZTVmMWIsIDB4ZjkzMDg3ZDQsIDB4Yjc4YzZjZWEsCisJMHhlNWFmOGRiYSwgMHhmZjdmZjE4YiwgMHhiZTk0N2JlNCwgMHhmNjYwNjhiZSwgMHgzZmZiNjNkNiwgMHhmZDM5MjgzNywKKwkweDc5ZTE2NWU5LCAweGQwODQ3MTFkLCAweGVmZjVjMmQ5LCAweDVhY2Y0MDFiLCAweDU0ZmJkODQ4LCAweGE2MGZmYWRhLAorCTB4YzYzMDdiMzMsIDB4MzBiZTUxNDksIDB4NzEwYzRjZDcsIDB4OWRjYzFmOTQsIDB4Y2Y0YmVlY2IsIDB4MGM2MzA3MDUsCisJMHgyZDE3M2VhNiwgMHgzZTI3YTk5ZiwgMHhkMmJiOGY3OCwgMHhkMDk5ZjdhMiwgMHhmZmJlYTllZiwgMHg3NWVmZTI2ZSwKKwkweGQ1NThiODkzLCAweDIxZDk3ODNkLCAweDljZGY5YzYzLCAweGJkMmZlNjEyLCAweGY3ODZkMmM1LCAweGJhMWRlNzg3LAorCTB4NjBmN2RjZWIsIDB4MTRmNDZmMmYsIDB4NzE3N2I4YjEsIDB4YmFmN2YwZmYsIDB4M2U4M2YxMmIsIDB4OWMyYTdhMDgsCisJMHg1ZmVlMjRmYiwgMHhmZjQwNjM1ZiwgMHgyYWRkYjZiYSwgMHhjYTY2OWZiZSwgMHhkOWEzOGIxMiwgMHhjNTMzZTJjMywKKwkweDNiZWJhNGZlLCAweGY3NjdjYTY0LCAweDQ4ZjdlMDYwLCAweGJlMGMxYjJhLCAweDY3YTBiOWUxLCAweGJiM2Q0N2VmLAorCTB4MmU0MzY0YmUsIDB4OTI3ZWFmZTAsIDB4MWI5NGRjNzQsIDB4YWZkNGVmM2MsIDB4ZDdiNjBiZmYsIDB4N2E2ZDY3ZjIsCisJMHg0ZmQ1ZjZiOSwgMHhiZDIxMGYxYSwgMHhiMWQxNzM4OCwgMHhiNWU2MWY0NiwgMHgxMzA1ZDZmNiwgMHg5M2ZkMTdmZiwKKwkweDZkZTJmZjYzLCAweDU3ZGM3NDgyLCAweGQwYzcwZjhlLCAweDNiMWJmYjc1LCAweDgyN2IyZGZmLCAweGJiMDgyM2IwLAorCTB4MjE0ZWQ2ODIsIDB4YmY3ODg4ZjgsIDB4ZTM2ZTk3ZDIsIDB4YTI5NmIyZWYsIDB4NTllODgzZGYsIDB4YzFlZGY4MmEsCisJMHhkN2Y5ZmNmZSwgMHgyN2Q3MTdlOSwgMHg2MWZmZTVkNSwgMHhmNGI5N2NmZSwgMHhlNGM0OWI1ZiwgMHg4ZmVlOTZhYSwKKwkweGVkMGNmZDU2LCAweGI1YmU4MmNmLCAweDYyMDBiZmY0LCAweDBiZjhlODUyLCAweDI3YmMyNWVhLCAweGFiNTU3NzNlLAorCTB4Y2RmNDljNjEsIDB4ZTViNTdkZTksIDB4OWI4MzA2NjQsIDB4YjE1YzJlNDYsIDB4M2M3ODUwM2MsIDB4MGJlNzhjODcsCisJMHgwZWM2YmM5MywgMHg4NzgxMGY3NiwgMHhlZmQ1ZDNhZiwgMHg0OGJjNTMwMywgMHhhYjk3MTcxOSwgMHhmYWZmZjJlYSwKKwkweGEyZTRlMDM5LCAweDg5MTcyNjZmLCAweGNiNDg5ZjRhLCAweGU1NmViN2U4LCAweGZlNTZlYjEyLCAweGI5MGVlYjliLAorCTB4ZDY0OGI0YTcsIDB4NDBlM2VmMDUsIDB4ODFjNDM1ZmMsIDB4ZmRkOTc4ZjYsIDB4NTZjY2VhZDQsIDB4NTIwM2RkZmMsCisJMHg3ZTAyODgxMiwgMHg5OTVlZWI3NywgMHhkZThlOWVmZCwgMHg3OTBlNGZhMSwgMHhmODhiYWQzZiwgMHg1YzdhMDAzZSwKKwkweDNiYmQ5ZTM1LCAweDc2OWI4ZGE0LCAweGQ1ZWE3OGYzLCAweGJmNzhkZDk2LCAweDlhMGVmYjUxLCAweGYzNzZjYjg4LAorCTB4YTFlZmI0ZmUsIDB4OWRlMmY2ODksIDB4Njg3YmVkMDMsIDB4MWM3ODMyNTMsIDB4NjdjOTNlNzYsIDB4ZTcxNzI5NzEsCisJMHhjZjIwZGRhMywgMHhkZDM1ZmM0MywgMHg1ZGEyMzU1ZiwgMHg0YWM3YzZlMSwgMHgwNWE0ZjNlZSwgMHhhMzI3MzJmMSwKKwkweDk3OTlkZjFmLCAweGEzYmU3MTcxLCAweGQzMmZmZjJlLCAweDgxZGQ2Y2FmLCAweDk0YWVkOGY3LCAweDNhNjQ0NzdlLAorCTB4ODI3ZjQwZGMsIDB4OWJmMWY3MmYsIDB4NmZjODRjNTcsIDB4M2RmMzNiYzQsIDB4ZjdjMTllNmIsIDB4MjRiZTdhODcsCisJMHhkNGJkOTdlOCwgMHhiYjEzZTMzYiwgMHgwOWM0MzVkOCwgMHg1NjRkYmQyNywgMHhjNzcxZDc4YSwgMHgxYmFmNjgzYywKKwkweGY3ODVjNDdiLCAweGUzYmNjNzc2LCAweDkyN2Y4ODgwLCAweGMzMjljMDc3LCAweDIzM2U4NWJjLCAweGZmMjA5YmY0LAorCTB4NzhkOWY3ZTIsIDB4ZjJlNWQ1OWMsIDB4MzdmNTJiYjksIDB4OGNmY2E3ZmUsIDB4Yjc1ZDVlZTIsIDB4YmYwNDU3YzEsCisJMHgxM2Q5ZTBlNywgMHhhMTAzYmY4MSwgMHgxOTkzZmY5ZCwgMHg5M2JlOGJiYSwgMHg3YWU1MTFkYywgMHg4YjM0ZjAxMiwKKwkweDVlZjEwOWNiLCAweGRlY2M4NTcyLCAweDk0ZWRlZjQ5LCAweGVlYjg1ZWQxLCAweGFiZmI3ZTdmLCAweGRiNGI5NTQ3LAorCTB4YmQ2ZGVhMTUsIDB4MjI2NWNmNjEsIDB4N2JiMWQ3YWQsIDB4MGFlNWY5MmQsIDB4NzljMjQ5YzYsIDB4YzI4N2VjMGQsCisJMHg3ZmFkYTg5ZSwgMHgyOTdiMjk0YSwgMHhlMzViZWQwMywgMHhkZWRhM2RmMSwgMHgwNjdjZDk4NywgMHhmYWZkNTdjMiwKKwkweDYwM2Y4ZTAwLCAweDdlYmYxZjM5LCAweGY0MmQ5MTZmLCAweDE5ZjM5NTlkLCAweGRiNDNlNzdkLCAweGRmMTA3MzI5LAorCTB4ZmYxNzRiOTcsIDB4MzMyZGNlZDcsIDB4YTg5MWUyNjUsIDB4YmM5MWNkN2MsIDB4NGMyNWVmNGMsIDB4M2E0MDVkZmYsCisJMHgwMjQ0NWQzMSwgMHhiYjA4YmE5OCwgMHhkODk0YjBjZiwgMHg5YzRlNWQzMSwgMHg1YzU1YWU5OCwgMHgzNzE4MTk1ZCwKKwkweGY4YzA0ODE0LCAweDM5ZmYxN2QzLCAweGRjZTZlODBhLCAweDIxNWFlMzc1LCAweGYyZGJmMTQ2LCAweGJlZjU2OTIzLAorCTB4YmQ4NTNjOWUsIDB4M2ZjMmY0OTcsIDB4ZDlmNDA3N2YsIDB4Y2I4NjNmZjMsIDB4YTI0NzFiZTIsIDB4MTg0ODY0MWMsCisJMHhhNTdiZDMzZiwgMHg1NGQ3YmIzMiwgMHgxN2RjNWRmMiwgMHgzMjVkZmRlMiwgMHg5NmUxZjk4OSwgMHhmZWUyNjYyNywKKwkweGM0Y2RmMjA5LCAweDgyNmY4MjZkLCAweGI4ZTczOTNmLCAweGRjYzNjNThlLCAweGM2N2JlMTJhLCAweDZlMWQ3ZWVkLAorCTB4OTkxNTljYjEsIDB4YjlkZGY4NWUsIDB4M2NhY2RkZjYsIDB4MmJkYTJlYTcsIDB4ZDhjZTdjZDEsIDB4MjZiZTU2MDgsCisJMHg0ZmY3MGJkYSwgMHhlZTNmMTIxNiwgMHhmYjcwYzVjYiwgMHg0YmZiODY0NCwgMHhkZjhhMmY4YywgMHg4MjI3YTAwYiwKKwkweGJmNmQxMmExLCAweGVlY2NjM2EyLCAweDMwZmYxMDUxLCAweDcwYjlmZmUwLCAweDRmMTcwYTdlLCAweGYxZjE4NDMzLAorCTB4YmYxOTQzZDEsIDB4YjZhNjVkMWYsIDB4ZTVlNTBjODcsIDB4ZGY2NTI5ZjcsIDB4MGNiNDc4MDcsIDB4ODEwZDY0NzEsCisJMHg5YjlkMzFmYSwgMHgzYjA0MmMxZSwgMHg5ZjgwOGU5MCwgMHhiN2IxYjNlNiwgMHhiNDUzNWZhMywgMHgxYjI5NTE3YiwKKwkweDk1OWZmNTAxLCAweDY3YmZiYzU4LCAweDRjNmZiZjJmLCAweGZlYTEwOTAyLCAweDc5NGFiNWIxLCAweDFhMmJkNDJlLAorCTB4NDBkM2Y4YzIsIDB4NTFkZjg1NzAsIDB4MmYzOTg2NzQsIDB4ZDFkMWY4OGEsIDB4YmI0MzY2NzAsIDB4ZDI3N2MxM2MsCisJMHg3ZTU4OTU5ZSwgMHg2ZjViZTNmMiwgMHg1ZjQxNjhkYywgMHhlM2Y0MDc4MiwgMHg0NGQ3MTUxNywgMHg5MWI0NmYxOCwKKwkweGZmY2MwYjEwLCAweDFiN2VmY2E3LCAweGJiMDBjODY5LCAweDRjYzdhYWU4LCAweDNlMmZkMDNhLCAweGVlMThlMmEyLAorCTB4OWU4MWZjZjcsIDB4OThmZDIxYjcsIDB4ZmQyMTliOWUsIDB4NDMzNzNkMjMsIDB4OWI5ZTljN2EsIDB4Y2Y0MTNkMjEsCisJMHgzOGFlOTBjZCwgMHhjY2M3ODc2ZiwgMHg4ZTIxODljOSwgMHhmMGJmZDBiOSwgMHg1YmU3NjlmNywgMHhkN2YxODQzOSwKKwkweDFhZjdmMWJlLCAweDE0ZmJmYzcxLCAweDBmYjdjMjE3LCAweGZlMDg3YmRmLCAweGQxYjNlZGRlLCAweDhiOTg5NDgxLAorCTB4ZGVjZjViZDAsIDB4NzQ5ZmEzYmYsIDB4ZmYwOGI4MjAsIDB4MGE3Y2I2YTMsIDB4NmVlZTZiYzcsIDB4ZGNmZmNhM2QsCisJMHhjYWQ0N2Y3NiwgMHg4NzJiN2E5MCwgMHhjZTdkYjExOCwgMHhhMGEzMjcwYiwgMHgxZjViNmVmZiwgMHg1ZDEyMWQ3YywKKwkweGNiMWQ0Y2YyLCAweGI5ZmM3Y2FmLCAweDgyOGUzNzFiLCAweDBmYmUzYmY5LCAweGY5Zjc0MTc0LCAweGRiNzM0ODZhLAorCTB4ZmMwMGZiN2YsIDB4MWZlZDJhNWUsIDB4YTQ3YTI0ZTMsIDB4MmYzYzY2YzAsIDB4ODVhMWQ2NjgsIDB4YjNkNzU4ODMsCisJMHhhMDliOWRkMSwgMHgwYzJmYjNmZCwgMHhiZTUwOTU4NSwgMHgwMWJlZDg0MywgMHhhZGMyOTIzYSwgMHhlN2FlMDM3NywKKwkweDEwYTA1MzQ2LCAweDc4ZGQwYmVlLCAweGE3MWIwZTQxLCAweDhhNTI5ZjdkLCAweDdhMDY0ZTcwLCAweGNhZGRmZTQzLAorCTB4MDI1ZjQ2NTMsIDB4N2Y3NGRmNmYsIDB4ZTIyM2ZiNmIsIDB4YTVlMDE1ZmQsIDB4YWZhNWM4MGEsIDB4YWMyZjQwYTIsCisJMHhlZDA0ZjFlNCwgMHgwNmZkODdiYiwgMHgyNDM5ZTlkNiwgMHhkYWJkZjgxMywgMHhmZGVhMzFkMSwgMHg0OWUzOGJiNywKKwkweDhkN2IzOWE0LCAweGIzZDdjMDRlLCAweDgzMGQ0ZjdiLCAweDdlMjk4OWY3LCAweGM1N2JjMTg2LCAweDQ1NWM4NmRiLAorCTB4MzFlZjdmNDIsIDB4OGY5N2VjNjcsIDB4ZjU4NzE4M2MsIDB4ZTc2OWY3ZjEsIDB4MTAxNTZkOTEsIDB4YmNkZjMzMzcsCisJMHhkMjU4MGRmZiwgMHgwYWYxZGI0MiwgMHg5YzU5OWI4OCwgMHg3NDg0MWQyNCwgMHgxOTM5OTI4OSwgMHg3ZGM0NjVlMiwKKwkweDRhMjM2NTgzLCAweDlhOTZjMjBmLCAweDdkNDRhZjYxLCAweDRjOTgxNGFlLCAweDM3Mjg3Yzg4LCAweGQ4NDdmMjQ3LAorCTB4NTU4YTNjODUsIDB4YTUyNGE3ZTUsIDB4NTM0ZmVhYWEsIDB4ZDNlNTU0YjIsIDB4OTU1NDhjNDcsIDB4ZDg2NzcxOGIsCisJMHg0NmY1NTQwYiwgMHhjMjg2MDRjNywgMHg4M2FlOGU3OSwgMHhhNGZmMDNiZCwgMHgzOTg2ZjE4YywgMHg3ZWI5MWMyZiwKKwkweDdjY2ZjZDI0LCAweDQzYmUwZTZhLCAweDlmMmYyY2Y5LCAweDE3Yjk1Y2Y5LCAweGUxNDNkMWYwLCAweGQ1MGFhNDY5LAorCTB4NmMxZjkyZTksIDB4ZDMzYTEwN2UsIDB4Zjc2YTE3OWMsIDB4YTFkMDcxM2UsIDB4ZTE3OWM2NWMsIDB4ODE4NGU3MTIsCisJMHhlZDE2NGZkZSwgMHhjYTA0ZTdiNSwgMHhiZTAwMWYzNywgMHhkOWM1ZmEzOSwgMHgzZWRiZjAzNiwgMHgxNGNiZjYzYiwKKwkweGNkZmQ0Nzg4LCAweDBjYWVmZTEwLCAweDQ0MGMzZjNmLCAweDQzZmI3ZDM3LCAweGJjZGQxODUyLCAweGMzMjc5MzI1LAorCTB4ZjI0NDBkZDAsIDB4ZTk2NDNhMzIsIDB4N2VlY2MzY2MsIDB4YjVmMjk1ZGUsIDB4YTFhZjgxNGYsIDB4NDI0M2MwYmQsCisJMHg2YjU3N2Y3ZiwgMHhiNDZkMWJkZiwgMHhiMDM2ZTZmZiwgMHhjMzJiYmQ0NywgMHg3YmJlYTUwZCwgMHg2ZmUxMmI5MywKKwkweDY0ZWY0ODM5LCAweDkzYmJiNmY5LCAweDA3YmJmMGUzLCAweGI3Mzc2MWY0LCAweGI4NTIwZGY3LCAweGZmYmI1NTNlLAorCTB4NjBjMmU0ZWUsIDB4NWM3NzU5MzksIDB4MjlkYzlmNTUsIDB4MWJmMmFiMzUsIDB4N2JmOWQ1MzMsIDB4ZGI0MzliNGIsCisJMHhhZDhmYTQwZiwgMHhkMTg5Nzg3YywgMHg2ZWY3MDM5NSwgMHgzN2JmYjBhNSwgMHhmZmYzZTYyYywgMHhkNTgwMDkwMSwKKwkweDAwODAwMDIwLCAweDAwMDAwMDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDE5YjVmZjAwLCAweDY1NTQ1NDBiLAorCTB4Y2VmN2JiZmEsIDB4Nzg2MDE5MGIsIDB4Nzc0MjEwMjgsIDB4ODQwYTQ0OTgsIDB4YjAyODU3ODksIDB4ZDcxZWEwOGQsCisJMHg4ZjRjMWFkYSwgMHhlNTkzNTY1NCwgMHhlMDRkNzkwMywgMHhlM2Q4ZjRiNiwgMHhiNjhmYWQxOCwgMHg2OTViNmQwNywKKwkweDk2NTYzNTZiLCAweGIxMzllNGU3LCAweDM2MjU0NjQ0LCAweGViNDk1YmFlLCAweDY2YTI1NGQ2LCAweDQyZDg5OWU0LAorCTB4N2EyNjcwNGMsIDB4Zjc1YTlkNmQsIDB4NWVmZmZlZmIsIDB4NWI2MDJlNjcsIDB4ZTc0ZWQ2OWQsIDB4ZmZmZmVmOWYsCisJMHgyN2VmN2ZmYiwgMHg3MGNhMTQ5MCwgMHhmNjA4MDBjZSwgMHg5OTcwY2NhYywgMHhkNmY3MDYwMSwgMHg4MDE4ZTQxYSwKKwkweGUyZWZmNGQzLCAweGY5YjhkYWYwLCAweGNmMDM4MzdhLCAweDNhMzgwMDU3LCAweDAxY2ZlM2NjLCAweDAzMTQwMWQ2LAorCTB4N2I4MTI5NWMsIDB4NTkxNGYzYTIsIDB4ZmY2MGU3NjAsIDB4MmZiZGYxNjUsIDB4MDA0OTA4MDEsIDB4ZGU4ZDE3OWUsCisJMHhlMzg0NTZlZCwgMHg2ZTY3MDY1YywgMHhmMDhkOWVmOCwgMHhkOTE4MDY0ZSwgMHhiZmVmZmY3MiwgMHgyNWY1YzIyYSwKKwkweDhjMGVlM2IwLCAweGJkMGQ0M2M0LCAweDVjNzVkNzliLCAweDlmY2Q3MTE0LCAweDc3ZDFkNzA0LCAweDk4ODA5Njc5LAorCTB4NTU3MDZiODAsIDB4MDBlMjA3YjQsIDB4M2M2MzZhOWEsIDB4Njc5ZTNlNjIsIDB4MmU5OTBlODYsIDB4YTZmMWM4MDQsCisJMHgwMTUyOWJiNSwgMHhjMDIyOGE4ZSwgMHg3ODA3NDQzOSwgMHhlM2VmMTRhMCwgMHgyNDVmMDQxYiwgMHhhNGVmMzlhNywKKwkweDY3YzhiOWRmLCAweGU3YzcyZmNjLCAweDM1YjAzMjQ1LCAweGU5OTQzMmJmLCAweDdlZDc3YmM2LCAweGJmMWNlNzg3LAorCTB4Y2U5MWEyMDMsIDB4OGY0YTgwM2YsIDB4MmU1YzRjMDMsIDB4MTliZGJiMDQsIDB4M2YyMzNmZmUsIDB4MTgxMmJkNGQsCisJMHhmMDYxOWY5MCwgMHg2MDVhYmExZCwgMHgyNWE5Y2NkNywgMHhhN2U5MmIwMCwgMHgwNjFkZmI0YywgMHgxOTZmZDg5MCwKKwkweGIyOTU3ZjcwLCAweGU1N2NiMmJmLCAweGYwOGIxMGE1LCAweDIwNDBmZDU2LCAweGE3MGZiZDliLCAweDdmZDVmZmYxLAorCTB4ZjE5ODM3NmYsIDB4ZGE1M2Y1N2MsIDB4NTMwZjQyN2QsIDB4ZmJlNTJmOTAsIDB4NzdiM2YwM2EsIDB4M2RlMjc3ZWIsCisJMHgyMzVlZjg1MywgMHg4NDk5ZmRkYywgMHg2OTc2MzZlZiwgMHhjNzI0NWZiZiwgMHhlMGU2MGQyNCwgMHgzODI4MDI4ZiwKKwkweDkxNmRiMTJkLCAweGYxMzY2YmRlLCAweGRmNGFlNmY3LCAweGVhMDk3YmJkLCAweGM5MjVlOWIxLCAweGQxYWRjNDZlLAorCTB4MDBlMmQzZGQsIDB4YTgzOTgzZjksIDB4ZjJmMWQ0ZTQsIDB4N2E4Y2RhNmIsIDB4YTdjMzBjMmEsIDB4YmRmMzRiNzYsCisJMHhjYTE3NWY3NCwgMHg1ZTMxOWVhOCwgMHhlMmM5NjBjZSwgMHg1ZjFjMmNmOCwgMHgwYmQ3YzU3MywgMHhmNzM1ZjEwMSwKKwkweDdlZDBkMGU4LCAweDExNDZjZjAwLCAweGNmM2MwOGU0LCAweGYyYWUzMWVkLCAweDA3ZjRjMzlhLCAweGZjYzc5YzJkLAorCTB4NjYxMzJmOWUsIDB4MWQ3NWYyZTcsIDB4MWNlZDAxZDEsIDB4OThiZjcwMmYsIDB4MDkzZTgwMjEsIDB4NjBiNTQxZjEsCisJMHg1ZjRiOGVkZiwgMHhjOTI1NzI0ZiwgMHg5ZjAwNGZiZiwgMHg1ODllYzA1YywgMHg1Y2ZkNDI2NCwgMHg3ZGEzOWZjMSwKKwkweDhmZTAyNDMzLCAweGUxMWQ2Yzk0LCAweGZkYzhhODU5LCAweDdjN2ZkMjhhLCAweDhiNzdlMDIzLCAweDQzNGYxNjdiLAorCTB4ZDc1MGUwMGEsIDB4MGNkNDNlYjIsIDB4MGM2ZDkwNmMsIDB4ZThmMDEyZGYsIDB4ZjE3ZDJmNDksIDB4YTQxNmY0Y2UsCisJMHg2MDQ5MzJmMywgMHgxZjE3ZGZmNiwgMHg3ZjEwMTYxYSwgMHhkMGI0NDU1ZiwgMHhlZmY3YjAyNiwgMHhiZTU1ZjdhNCwKKwkweDc0Y2VmNGZhLCAweDhlNmJlMzM3LCAweDI2ZjUxMDY1LCAweDRlOTAyZTM4LCAweDQ3OTc4ZjQ3LCAweDE4M2FhZTU4LAorCTB4NzEyYmY1NTQsIDB4OWM3ZjIxNzcsIDB4ZmIzZWRkMmIsIDB4ZDFkYmY0MTIsIDB4MjIzMTYwYTUsIDB4Njg0Yjk3YmQsCisJMHhhYmMzMDgzOCwgMHg0OWFiOGZkYywgMHhhZTUxMzNkNiwgMHhlODgxM2Y4MiwgMHg2ZTE3OTY2YywgMHhlNGJiZjE5MSwKKwkweDk3NDE3YmQ2LCAweDFkMzcyMTE4LCAweDJmNTUzM2Y3LCAweGQzYzcxY2FhLCAweGY3MmRlMmExLCAweGQxYmY5MDNiLAorCTB4OWZiMzAyMWQsIDB4ZWNjY2JiNDYsIDB4ZTRmY2IxYjMsIDB4N2YxMDRiODMsIDB4MGJiMjVmYTMsIDB4ZWViMmNmNDgsCisJMHg3ZTQ4NDdiZCwgMHg0MDNiNmIxZCwgMHhlNzQwMWU3NywgMHgyZWI2NmVkYSwgMHg1MjdkOTkzMywgMHhkOThiZTMxZSwKKwkweDQxNDY4OGFkLCAweDYwNTZhZDdjLCAweDdjMzVhN2M2LCAweDBjN2JlNjFlLCAweDdjM2Y1MWJjLCAweDM4MDRjZTA2LAorCTB4OWU3Y2ViMTgsIDB4ZmJmMzViZjgsIDB4MTA5NmZiY2YsIDB4ZTNjYTFiYjUsIDB4YWQ5MDFmOTksIDB4M2ZhNjFiOWQsCisJMHg0NjYwMDBkZiwgMHhhM2RiNDNmYSwgMHgzYzMwNGZiZCwgMHg2MTI1YWY2OCwgMHgyN2IxM2Q3YiwgMHg5ZTBiNzBlYiwKKwkweGNmNTM3ODlmLCAweGM1NWY3NWNjLCAweDQxNmVhN2MzLCAweDY4ZjZjZDc4LCAweDA5MTNlNzI2LCAweGYzYTU0OWUwLAorCTB4M2Q3YmE2MjcsIDB4MThhNTYxNzgsIDB4YjkyMTZmZWEsIDB4YjdkOGM2NzcsIDB4NDdmMWY5ZTMsIDB4MTNiYjNmYTcsCisJMHhhNzY3ZGFlMSwgMHhmMjRjODlkOSwgMHg3ZGU1MTkxZiwgMHhkYTAxMWQzYywgMHg3ZDk1M2U3ZiwgMHhlZjFjMjkwNywKKwkweGE1MmZjNTBhLCAweDU3ZGM2NjY3LCAweDI0Y2ZlNzRlLCAweGFhOGYwOWRhLCAweGEzNDdhMWJmLCAweGZhZjI4MDFjLAorCTB4MTY3OTdjMTIsIDB4ODI5M2JkMzQsIDB4ODdjNDUwNjcsIDB4Yzc5ZGM0ZWIsIDB4ZGJjYmI0MDQsIDB4YzQ4M2FlMGMsCisJMHhmZTQ3ZWFmNywgMHhmOTBjYTg3YSwgMHgzN2U2N2FhOSwgMHhmYTQ0Y2YwZiwgMHgwYzliZGY2YSwgMHhhZjU4NGVmNCwKKwkweDZjNDBlMmUzLCAweGRmZmM5NzIwLCAweDkxNWZmZGM2LCAweDI4OGVkZDRmLCAweDcxMTFjN2NiLCAweDVlMjNhMWE2LAorCTB4YTc3NTM3MDMsIDB4ODg4ZTNlNWEsIDB4NjVjMDc1MzcsIDB4OGU4MmY1MGMsIDB4ZmM1N2E5ZjgsIDB4MWQ3NDVlYWEsCisJMHgyMDFhYmEyNSwgMHg4NDIyZTNjMCwgMHgwNTU3NjQwYywgMHg3OGEwZTA5MiwgMHhjOGM3YmExMCwgMHhjZWQ2M2ZlNCwKKwkweGQxOTE2NTQ2LCAweDhiODIyZjUxLCAweDIyNDE3OWUyLCAweDZmYzg1Mjk4LCAweGMxN2U1YzVkLCAweDcxM2ZhNjdiLAorCTB4OTI2NmNhMTcsIDB4ZmJmNTQxMzUsIDB4MjIzMzg1YWMsIDB4ZjFiZmIzZWQsIDB4Y2RjZmIyMTUsIDB4YzM5ZjY2NDYsCisJMHg4ZDJmM2M1MSwgMHgzOTFmZjNjNSwgMHhjMmJmN2Q5ZSwgMHg4N2YzMDVmNCwgMHhmNWE0ZjkzMywgMHgxNzM4NWFkZiwKKwkweDBhZWYxNDFjLCAweDliYzJlNGRhLCAweGY0NTE2ZDcwLCAweDI5YzUyYzcyLCAweDFkZWU0OTU4LCAweGMwM2FlZmY3LAorCTB4ZTZmNWI5ZTQsIDB4YmY3Nzg0YTMsIDB4MGUwZmU5OTksIDB4MDUwN2I5NzAsIDB4ZjdkNTI3OWUsIDB4YTA0Mjk4NTYsCisJMHhiNzdhMjQyYiwgMHhmZGQ1N2EzMSwgMHhmMzg3MmRjMSwgMHhlMGZlZjg1YywgMHg4MDc5MzkwYiwgMHhmMjRjYmNmNiwKKwkweGU1MDVmZTBmLCAweDdmYzYyYTczLCAweDNiNWMzNmVjLCAweDg1M2JiZmY3LCAweDdhNThlMGYyLCAweGQ5NDc1YmViLAorCTB4MmMzYzJhN2IsIDB4NGY1NDM4ZjAsIDB4ZjdmZWUwN2MsIDB4YTI2NGNlOTksIDB4OGIwOGMzMTMsIDB4Y2Q3NzAzMGYsCisJMHgyYjliZjI2MCwgMHhmZTkxYzZlNSwgMHhmNGI0Mjc4MywgMHg3ZDUzYTU4ZCwgMHg3ZDRmYTU1ZiwgMHhjZDM3YmQ1ZiwKKwkweDhlMzkzMjJhLCAweDk0NzlmYzE4LCAweDkwY2M1ZmY3LCAweGM0OGQ3YzM1LCAweGNkZTJmM2ZhLCAweDc1ZTE2ZmI0LAorCTB4MTFjMjAyNDQsIDB4M2Y0MzU2ZjYsIDB4MjYzNWJmNTEsIDB4NWY0OGRiOGMsIDB4NmY2MDhkNGQsIDB4YTFlZmI2MDMsCisJMHhjZmFiODliOCwgMHgyOWY1ZTc4NSwgMHgwMzcyMmIyZiwgMHg3OGVkMDlhNywgMHg5MDY3NjJiMSwgMHg2ZWVjYzg5NCwKKwkweDVlYmI3MDExLCAweGFiZWRjNGFjLCAweGU4MGY0M2EwLCAweDc1YzQ0NzJmLCAweGZkYTAzNWJmLCAweGEwM2M3NzBkLAorCTB4NWRjNjQ1NzcsIDB4NzRmMTUxY2YsIDB4YmI4ZjRmY2UsIDB4YTZjODRhOWUsIDB4MzE2MjNkZjgsIDB4OWU2NmJhYjMsCisJMHg3YmIxZDA1NSwgMHhmNzRlOTBlOSwgMHg0M2VlZGNmMCwgMHgxYTc0ZjAzYiwgMHhjZjQ4NmRlZCwgMHg4MTczYTJlMywKKwkweDZmNTNlNTE1LCAweDFmOTFlNWYwLCAweDJlM2RkZmE4LCAweGIwZmVkOGJhLCAweGU5MDU2MDcwLCAweDNjYmU3NDFiLAorCTB4MWJjNGVmNTYsIDB4MjMzYWMwNDAsIDB4NzdlZWQ5MzgsIDB4MjVmNjVkNTAsIDB4ZDQxMmI4YjAsIDB4ZTIyNzRkNDMsCisJMHhkZDEyYWEyZCwgMHgzYzcwZTY5ZCwgMHg1MTY3ZTM1NCwgMHg1Y2EzZWUwZSwgMHhmNTVmNjgyYiwgMHhhMjliYjQ1NywKKwkweDMwZmRlZDdjLCAweGI4Zjg1YTNmLCAweDUxNWRmYjk1LCAweDk4ZWVlOGEyLCAweDU3NmU1ZmMwLCAweDFkMDZkY2Y0LAorCTB4OWU2N2Y3MTIsIDB4YjkxNGNiNDcsIDB4NDUyMmRkNjMsIDB4NGE4ZDJkZDYsIDB4OWFjNjBmOWMsIDB4NTNmMjEyM2MsCisJMHg4MmY1MWJiNiwgMHhiN2NlOTk3MCwgMHgwMjhjNTY5NywgMHg5ZGZhOGFkMCwgMHg1ZWZlM2UwNSwgMHg1MzllMzZiNywKKwkweGYyY2E1OTBlLCAweGNiY2IwZTcyLCAweGFmNzUxNGIzLCAweDdhNDBkYzE3LCAweGMyZmU1MTM1LCAweDJmYzEyZWY1LAorCTB4MDgyYmZhZDEsIDB4MTYwMWQ1YjEsIDB4MDZhOGFkMWQsIDB4MjcwMWNlYjYsIDB4OWI4MWU3NWIsIDB4OWRhMWYzYWQsCisJMHg4M2EwMGJhZCwgMHg5ZjgyOTdhZCwgMHhhZjgxNzBhZCwgMHhiODNlNTgwZCwgMHhmOTg4MzJkZCwgMHg1MmJkN2UxOCwKKwkweGI0NWNiY2E0LCAweGZjN2FlMjY0LCAweDY3NWU0NTcxLCAweGY5NDYwNzk3LCAweDhmMmY5ZjkyLCAweDYxNGFlMDc5LAorCTB4MmU0ZDlkNzQsIDB4ZGQ5OWIzNTMsIDB4OTIzMTcyYWIsIDB4NTE3N2UyN2QsIDB4YjVhMTRkZTAsIDB4OWRlYzAyMDIsCisJMHhmMTkwYzk4YiwgMHhlYjIwZDk5ZCwgMHgwNzAyYWUwOCwgMHg0OGZlZTc4MywgMHg1YzA2OTQ3OSwgMHgwNGVlNTczYSwKKwkweGQ4OWFhOTcyLCAweDc2Mjg3NjRlLCAweDVkMzY0YzUyLCAweDg3ZDdkNjFjLCAweDU0MTcxZTU2LCAweDQ5ZDIwMWJkLAorCTB4M2ViYzYwZjksIDB4MmNlODgzMjEsIDB4NWNmY2FlOGEsIDB4ZGFmMTkwYzYsIDB4M2E5ZGY3YjYsIDB4ODU0NWEzOGMsCisJMHg4NDM2MmQ5NSwgMHhlNTNmNTkwZiwgMHhmM2U1NTk3MCwgMHhkOTFmMDg5OSwgMHg5YmE5ZDI3NiwgMHg1OTVlNzY0OSwKKwkweDE1NjNiN2E4LCAweDM5ZDg2ZWJhLCAweDE4NGRjZjA3LCAweDRlNTBhM2ZjLCAweDUyODI0ZDkyLCAweGIxNTE1ZDVjLAorCTB4Njc3ZTgwNzksIDB4NzRlYmFjOTQsIDB4ZGJjNjU3ZTgsIDB4NTcxOWM1ODAsIDB4ZDU5ZjgwMTQsIDB4ZTQ2NTY4YjMsCisJMHg3ZWJjMzUyNywgMHg3YWUxNjM1ZCwgMHhiZDcwNmJkYiwgMHg2MGRhN2U0YSwgMHhjOGNhYzVmMiwgMHg3Mzc1OWFkMywKKwkweDZlNWYyOTkzLCAweDNmZjdmMDMwLCAweGJjZTcyYzlhLCAweDIyMzI3MjgyLCAweDk4NDE1MzNlLCAweDQ0ZjczYzRmLAorCTB4ZTQxMDFjMjEsIDB4MTg2YjU2OTYsIDB4ZjdjMDhmZmYsIDB4NzdjMjFmY2YsIDB4NWRlYjhhNmIsIDB4NTk0ZGNmMTYsCisJMHg1MzRmZmE0MCwgMHg2NzY3NzlmMiwgMHgyNDVkOGE1OSwgMHgzZjg2MTZmYywgMHhkMmQ1OTMxMCwgMHg1MjA3NDc4YSwKKwkweDdiZDIxZjljLCAweDc3NmUxOGMxLCAweDVlYjk1YTFmLCAweDMyOWFiNmNlLCAweDI3NTgxZjFkLCAweGZiYWUwZmQ4LAorCTB4ZTI4Zjk3N2EsIDB4MDg0ODI3ZDAsIDB4ZDU5OWYzYmUsIDB4MzQ3NDQwMzUsIDB4NDI4YzgxODksIDB4ZDExZGQ3ZDQsCisJMHgyNzY0MGNjNywgMHhhODBiMWRhYSwgMHg3ZmM4YTViYywgMHgwNmJjMDM5YiwgMHg5NmU1MWZlNiwgMHgyZDk4ZjUzMywKKwkweGU1YzEwN2VjLCAweGE1Y2ExZWY4LCAweGQyYWNlOWM4LCAweDhkNDk3MWUzLCAweGE1YWQxZjdiLCAweDNjMmFmNmFlLAorCTB4YTI0MTNjMjEsIDB4YWQwYTQ5YTcsIDB4MTUzOGJiMjAsIDB4MTNlMTllZmYsIDB4Yjk1M2E3ZTYsIDB4YWJmMTJhM2QsCisJMHg2ZGVmNGY2NywgMHg0Mjc0MWM2OSwgMHhlZDM2MWY4NCwgMHgwZmFiZTZmOSwgMHhhMzRkZGY1MCwgMHgwZjVkM2I2NiwKKwkweDE2OTZkZmZiLCAweDFhYjAwYmVhLCAweGQ1MTdjNGQ0LCAweDFiNzU2NzJmLCAweDk1NWZkNDdkLCAweDM5N2YzZWVkLAorCTB4YWY3OGFiZGQsIDB4ZmE3MTQ2ZGYsIDB4MWI0MGZlZTIsIDB4OWVjMWNiOTUsIDB4MmZkYzY5YzMsIDB4NmJmZTNhZDQsCisJMHg5M2U0ZTdlMSwgMHg3NTA1MTJiOSwgMHg5MDVlY2JhYywgMHhhYmU0NDZiYywgMHgwNTBiZWE5OSwgMHhkYzdjMjBmNiwKKwkweDQ3MTM3Njg0LCAweGE5YmY3OWY3LCAweGJkMGQ5NWY2LCAweDJmYTgxOWFmLCAweGM0M2M2N2MxLCAweGZmNDJhZDZmLAorCTB4NWMzN2FkYWEsIDB4YWQ2MmY1NGEsIDB4ZDYyZmRiNTcsIDB4MTNkNzdiZjUsIDB4YjQzYjc1ZGQsIDB4ZDliZjZhZmIsCisJMHg0ZjVmN2NhNCwgMHhlYThkOWFmNSwgMHgyNmJkZWQzZSwgMHhhOGYzMzdlYSwgMHg2N2VlZDNmZSwgMHhhNmZkMmE2NiwKKwkweGE5NDBmZjkyLCAweDc3MmE1NzMzLCAweGViMzMzZjg4LCAweDIzNWUwY2ZmLCAweDY4ZmNkNmYyLCAweDcwNDJkZDhiLAorCTB4ZTJjZWQ5YmEsIDB4NjYwNmZkNmQsIDB4ZDg3ZGVhYzcsIDB4NDQ2Y2M4OWEsIDB4OGRkYWRiZjUsIDB4NTU2N2VhYzAsCisJMHgxYjRmZjk4ZSwgMHhmYzhmYTQxZCwgMHg1ZDU5OTNhNywgMHhhYjNjZjU4YywgMHhmMDllMzA0NywgMHgyMjY1MWVmZSwKKwkweDE3M2RkZGEwLCAweDExMTRjYTFmLCAweGQ5M2Q3M2NmLCAweDVmYjdhYTc2LCAweDdmODBlYjVlLCAweDRmYTYxNzlkLAorCTB4NGFlN2Y3YWQsIDB4ZDQwY2FiM2IsIDB4N2Q4OGRkNDcsIDB4ZjczNTZlMTQsIDB4NDI2NmQ5M2UsIDB4ZDAxMzc5YjgsCisJMHgzYjJkMjQwZCwgMHhlMmE2ZWE4ZSwgMHhlOTc4MTJmZCwgMHg1MDNlZjAxZCwgMHgxYTk3NmI4ZSwgMHhiZWIwNTI0ZiwKKwkweDk0NDc5MDhmLCAweDA5ZTQwOTNjLCAweGEyYTM3OWZhLCAweDA0ZWNlOGI3LCAweGZkOGM3OWNkLCAweDcxZjdjZDFjLAorCTB4ZWZkYTk5YTUsIDB4NmU3ZjBlM2QsIDB4ZmU3M2M1MDksIDB4MDJlM2JjN2QsIDB4YzEzNmZkY2QsIDB4Y2Q5MWY3NmQsCisJMHhiYzNmZjAwNCwgMHhiMTg4YWU1NywgMHhjZDgyYmZjMiwgMHgxN2U3MTIxZCwgMHg4ODZmZWU2OCwgMHhlYzlmYjc5ZCwKKwkweGRkMGJmY2JiLCAweDRiNzAzYjE4LCAweDAxNjU3NzY0LCAweDJmNTA0NzgwLCAweGU3YjU4NmIzLCAweDIxZGIwN2M1LAorCTB4MWQ0N2YxMTYsIDB4NTc5OThkZDQsIDB4MTZlYTgwNzgsIDB4NWZkZGFjYTMsIDB4NTRjNWRhYWUsIDB4NDM5OWFhOTgsCisJMHhiNzNiOTE5YywgMHg5MTIxZDFmYiwgMHg5YzA5NDVkOSwgMHgxMTc5NzBmNywgMHg1ZTBmNTljOSwgMHg0NmRjYmM3OSwKKwkweDY2ZmJhNTY5LCAweDU5OGJmMzAzLCAweDhhNzYyZGJkLCAweDVhOWQ5MzQ3LCAweDY4ZDcyN2Y5LCAweGQyZWE5ZmU1LAorCTB4OTU2ZDNiY2EsIDB4NmVlOWRlNTYsIDB4NmRjZmJjYWQsIDB4ZWFkN2NhZDUsIDB4YjZjZmNhZDEsIDB4ZmVlNjk2NzEsCisJMHgwZDRhZjZiNCwgMHgwMmYzN2QzYywgMHhiZGYzZmRjZCwgMHhjZTcwMzUwYiwgMHhmNzM0YWI4ZSwgMHhkMzJjNzQ2NywKKwkweGFmNzdlNzljLCAweDc2YWI5Y2Q2LCAweDJlMGVkNjM2LCAweGIxOGYzNWY0LCAweDA4YzQxMTMzLCAweDU2N2FhYmZkLAorCTB4ZmY3MGEwZWQsIDB4ZmYzYzFhYWQsIDB4MWY2ZmZkNmYsIDB4YzhhN2ZmYTMsIDB4YmRkZTMxZDcsIDB4Mzc3NDNiMTUsCisJMHhkMTY1ZWJiOSwgMHg5OTlkYWUzYywgMHg1OWViOTQyNywgMHg5Y2I2ZjZiZiwgMHg3NzQzMTU1OCwgMHg1NGU2ZmM5NSwKKwkweGZmOTQxYmYyLCAweDBlMTZjMzkxLCAweDdkZjZmZGRiLCAweDhlMGFjZjE0LCAweGFlODhhYjM4LCAweDFmN2I4MGEyLAorCTB4YTE5MmYzODUsIDB4YmEzOGFhZjYsIDB4MzJkOTAwZWYsIDB4ZTg5YzhmODUsIDB4MDJhNWU1ZmUsIDB4ODU3ZTM0ZTgsCisJMHgzY2IwOTRmMCwgMHg5M2FjZjBhZiwgMHhkOTcyZjBlMiwgMHgxNjM2ZGU3NywgMHg0YmU5Yzk2ZSwgMHhhMTIwZjNjMiwKKwkweDZhODVlNzk0LCAweDIyZTgxNDQ3LCAweGVjYTE1MmU0LCAweDI5ZTkyNTAzLCAweGYzYWJmOTYxLCAweGMwMDdlYzIzLAorCTB4Njg4MGZkNDAsIDB4Mjc1OWI2ZjIsIDB4OWJlYzc3YWEsIDB4Yjk4ZjU2MjUsIDB4ODZmNjdkNTgsIDB4YTU3MzYyZTAsCisJMHgwNjdmMjY0NSwgMHgyNWRmZjdjNSwgMHhjNGNlZGViYiwgMHhiNDRhNzZiOCwgMHgxMzllYWNjYiwgMHg1NGM0NmQwMiwKKwkweGE0YTMxODkwLCAweDc2YWZhOWU1LCAweGVkODcxZjUwLCAweGZmMmJjZDJjLCAweGI1NmQ0Nzc0LCAweDZmOTE5NzI3LAorCTB4YjZmMDk0MDksIDB4NjdmNWZlOTksIDB4YTI2NDhlYmEsIDB4Y2IwNDA3ZmMsIDB4ZjZmYzQyZmEsIDB4MzMyNzU5YWQsCisJMHgyNTE5N2YyOCwgMHhjZDAxNDQ5NCwgMHhlOTQ3MWM0ZiwgMHgyNGRjY2NmYywgMHg3OGMzZjkxOSwgMHgwZjY1MTAxYiwKKwkweGFiNzNjMjg5LCAweDkzOTBmYWMwLCAweDA4Y2NkOGY0LCAweDY3YThkZGZmLCAweGJlOTQwYjc5LCAweDVlNDUxYWVjLAorCTB4NTRiNjVmNmEsIDB4NGY4MDNmYzEsIDB4N2U3OGMyYWMsIDB4NGMxYmY3NGQsIDB4YzMyOTc1MmUsIDB4NmRjYTFjY2EsCisJMHgzN2ZiZTBiNywgMHg1MDE3MzU0YywgMHg0MjhlMGE1ZiwgMHhkNWU3ZWYzYiwgMHhmYTRkMmQzZSwgMHhlZDU1NzkyOSwKKwkweGJmNzZjZjZiLCAweGQzNDg2NTJlLCAweGM0Y2VjMzJmLCAweDYzOTFlNzA5LCAweGJlNjE1ZWU3LCAweDliMDNmYmY5LAorCTB4MWExZTU5YTIsIDB4ZTZjZTk0ZDgsIDB4NGZmN2UxOGIsIDB4NzFhZmY3YjEsIDB4OTNiMWEzYmYsIDB4ZDdkZjVhZWIsCisJMHg5ZWY1ZGZkOCwgMHg4MWU3MzQ4ZiwgMHgwZDNlOTBhNCwgMHg0YWVjMGZmOSwgMHhjYTM1Nzc5ZCwgMHg2MzA1ZTQ2ZiwKKwkweGE4YWJmNTA5LCAweDcxNWIzOGI3LCAweDNkYzBmZGY4LCAweGJlMTBlN2QzLCAweGE3ZTdjZGZmLCAweDZiZmRiZTRjLAorCTB4YTZlZTZjZmQsIDB4ZWQ2Yzc5ZjIsIDB4ZDYwNzA2MTEsIDB4OTYzYWQ4MDYsIDB4NTViZmI1NGYsIDB4MjBkZmMzNTcsCisJMHg5MGU1ZWE5YiwgMHhkMTNlYzkzMCwgMHgxYjMxZTZiYywgMHg2N2ZhODNlZiwgMHg3Y2E0YTk0ZiwgMHhkMDZlOWZkYywKKwkweGMzOGIzNWYxLCAweDBlMjZhNWE5LCAweDZiNGY5YmNmLCAweDQ4ZGU2ZjUwLCAweDAwYmY2ZGZkLCAweDYxZWQwMTBlLAorCTB4ZWM3Y2UwYTksIDB4M2FiYmU0N2EsIDB4YTM2Yjk1ZDksIDB4Mjg3NTcyN2EsIDB4ZDBmZTg3NGYsIDB4NTZiODFmOTQsCisJMHgxZWJlN2Q0MCwgMHhmZTI3Y2FlZiwgMHg1MzA2MmMwNSwgMHg1OTlkMTgxMywgMHg4OTBjMzdkNCwgMHg2MzAxM2M5ZSwKKwkweDc2NGY0ZGMxLCAweDNmZmQ1MzU3LCAweDhhNzNjOTM0LCAweGFkYWQ3NjMyLCAweDgzZmE5YWFiLCAweDhmZjcwMzIxLAorCTB4ODQ3YzllNWIsIDB4MTZiN2MzZjksIDB4ZTc3YTRjZDcsIDB4MzFmMjQxMTMsIDB4ZjA0OTdlN2IsIDB4MTZmNjY3NmUsCisJMHhmODhjMmMzMCwgMHhhZjNhODJiYiwgMHhmYTliN2VhMSwgMHg1ZjE0NjA5YiwgMHhkZmY4ZGI2NywgMHhhY2M3MmE1ZiwKKwkweGFlM2M2ZDRiLCAweDMxNmI0MmRkLCAweDJjZWVlNWU5LCAweGU4Y2E3YmZhLCAweDVmOTAyMzY2LCAweDQ4ODczZTIwLAorCTB4NWNmODdhZjgsIDB4NDBmMjBhNzYsIDB4NmY1NjBkNzUsIDB4NzgyODVmYWMsIDB4ZjhhM2U4ZDUsIDB4MTY3NWNlYTEsCisJMHhiZGVjYWNkYiwgMHhkNzlmMWIyNCwgMHhmNDY3ZGQyNCwgMHhlZWZjYjFiNiwgMHgzYTQ2YThjZiwgMHhlZjU4ZjVkYiwKKwkweDEwNzBkZjUwLCAweDg0NmQxY2Q4LCAweDdhMTE2MWU2LCAweGZkZTM2YzU5LCAweGMwMDhkYzE3LCAweGQxYjc5M2NmLAorCTB4YzBlZjQzNzksIDB4ZGYyNzhhMzEsIDB4MjRhZWJhNjcsIDB4NzI4ODBjMzksIDB4ODY5M2M1MDksIDB4ZGVhY2JkZDgsCisJMHhlY2M5YjY2YiwgMHhmMTk3YTQzYiwgMHg0ZWUxNzE4ZiwgMHgzODJmY2ZkMiwgMHhmYTQ1NWMwZiwgMHg3ODA1MzA2ZCwKKwkweDAzY2NhYWRkLCAweDkxYjcyNmNmLCAweDcyODdmZWU1LCAweDllY2JmY2Q5LCAweGY0YTlmNDQxLCAweGI2Y2RmZDIyLAorCTB4NGE5ZGI5ODgsIDB4MWY5ZGY4N2YsIDB4YWU3NTBiZjYsIDB4NWI4M2MyYTUsIDB4OWY5MTY0MzYsIDB4YmNmODVlYTEsCisJMHg1YmFlMTI1MSwgMHgwZmY3YzEzOCwgMHg5NjNlZmEyYSwgMHhmZTEwZjRlMiwgMHhmNzNlNmVkNSwgMHhmYjRkZGIwYiwKKwkweGNmNDk0N2NkLCAweDI3MTY2NmJkLCAweDU4ZmRmNmNmLCAweGY0ZjYxYjNlLCAweDlmMjA3OTMyLCAweDExN2YxMmQ3LAorCTB4YzkxYmRlN2MsIDB4ZTFjZjQ4ZTcsIDB4OWZlNTcyODcsIDB4OWQzMDVmY2YsIDB4YjgyOTFkZmYsIDB4MTkwYzliZWQsCisJMHhmZGQ4NmZiZiwgMHhiYmIyMTFjNiwgMHhkZjFlNzUwNiwgMHgxODMzOWRhNSwgMHg5YWZmNjEyNywgMHgxZDFjZDEzMCwKKwkweDVkNDQ0ZmIzLCAweDlmYmY1NDY2LCAweDhmN2VkM2FhLCAweGE5Y2QzOTA1LCAweGE5ZGZjOWJiLCAweGJmZjA3MTdlLAorCTB4YjhmOWE5OGIsIDB4ODQ2YmU5NGIsIDB4MWYyY2ViYzAsIDB4ODdmMjNlMTAsIDB4ZTU4NzgyZjUsIDB4ZDE4ZTc1NDUsCisJMHgyM2RlNjAyNiwgMHg1ODVhYmFkZCwgMHgzNWNlOTA5ZSwgMHhiYjllYzlkYiwgMHhlNGZkMDZkMCwgMHgzNDQ3M2EwNywKKwkweGU5OGY1ZjliLCAweGI4MzViZmEzLCAweGQ2ZmM5MTc2LCAweDRjOTk1M2JjLCAweDliZTc3NjdkLCAweDhkN2U5NDBiLAorCTB4YzU2MmE5ZTcsIDB4M2YwOThiMmUsIDB4YzcxYjlmZDEsIDB4YTE0OGI1ZWMsIDB4ZjU4NGM0YWYsIDB4N2M4NTI2NTAsCisJMHgxNWU3YzQ4ZiwgMHhkMzYzZmNjYSwgMHhlZjNlOWFlYiwgMHg2ODU5MzJiZiwgMHgwMDFlMDA1MywgMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB1c2VtX2ludF90YWJsZV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1MWZiZmYwMCwgMHgwM2YwYzBjZiwgMHgzM2FiNjc4YSwgMHgzMmVhNzgzMCwKLQkweDMxZTljODMwLCAweDQzZDI0YzMwLCAweGI3MTJkMzg4LCAweDlmYTY1MTczLCAweDgxODE4NTlkLCAweDgxYjk4ODEzLAotCTB4NWY4ODE3OTgsIDB4YmMzMDMyMzEsIDB4ZmY1ZTI0NjYsIDB4M2IwNDYxNDcsIDB4ZTE4MTgwNGIsIDB4MGI2ZjkwMTMsCi0JMHgzMjA4OWZhNCwgMHhiMjA3NWMzMCwgMHgwMzcxMDMzZiwgMHg4ODA3M2Y5MCwgMHgzNWIxMDA1NywgMHg0ODBmYmY5MCwKLQkweGEzZTIwNGRmLCAweDE4NDVmYzQwLCAweDA5NWZmOWJmLCAweDQyMTU2ZmM4LCAweGUzNDQzZmU1LCAweGFmYzQxNTlmLAotCTB4Zjk4MDgyNWYsIDB4YjFlNDA0NzIsIDB4ZTQyMjY5ZTEsIDB4MGE2ZGM3YzcsIDB4ZGUwNDBlZjQsIDB4NjdjYTg2YTYsCi0JMHhlMDYwNjU1MywgMHhhYWM1OGEwNywgMHg5MWRiZjg0MywgMHg2MjgxZjNlNCwgMHhmNjEwYWFlYywgMHg4NjA2Mzk2YiwKLQkweDFkYjk0MDVmLCAweDdkY2RkODZhLCAweDBkZmY5NDAzLCAweDlhODZhYjk0LCAweGYxYjkwMDAzLCAweDAzNjg1MDU0LAotCTB4MDAwMDAzNjgKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDE5MTVjNThhLCAweDE5ZDQ0NDE4LAorCTB4MTgzNDRjMTgsIDB4MjA2ODU2MTgsIDB4YjU4OTY5YzQsIDB4OWZkMzI5YjgsIDB4OTBjMGMyYzksIDB4NDBiOWM0MGQsCisJMHg3Y2M0MGY5YywgMHhmYzBjMGM0YywgMHgxN2ViYzQ0YywgMHhmNWIwNDUxNCwgMHg4NDE4MTkwNCwgMHgwMjZmZmM4MCwKKwkweDg1ZDcwYzBjLCAweDhiYmUxODE4LCAweDAzMDgzMDMwLCAweGYxNDAyZWY5LCAweDAxY2UyMDA0LCAweDU4YTA2ZjYyLAorCTB4MDQ1ZTkwMGIsIDB4MmM0MGRkYzQsIDB4N2NkZjhhMjIsIDB4NmJmMjAyNTEsIDB4MzdmOTUxODUsIDB4ODQ3YmY4ZDEsCisJMHgxMDU3ZWJmMCwgMHg0N2FmMmZjMSwgMHgxNjFiMWU0MCwgMHgzZTNmMjJkMSwgMHgzYmQwMjkyMiwgMHgwMTVmNTgxMCwKKwkweGM3MjY1Zjk1LCAweDBmMjdkMGMwLCAweGI4YTg3ZjhjLCAweDRiZmM5MjAxLCAweDBlNWNiYjIwLCAweDYwOTZmNmMyLAorCTB4ZjIwNjI4NjAsIDB4OWJiMDE1MGQsIDB4MmY5NDAzZWIsIDB4ODU3ZGNhMDEsIDB4Y2MwMDAzY2EsIDB4Njg4Y2JhY2MsCisJMHgwMDY4OGNiYQogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB1c2VtX3ByYW1fZGF0YV9lMVtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4NDU1NDc4MDksIDB4YmVkZDcwYjYsIDB4ZTlkM2JiN2QsCi0JMHg4NDg0OWQyNSwgMHgxNjc0YjA5MCwgMHgyNmM0MzUxMCwgMHg2MzBhMDg0MCwgMHg5NDRjMjEyNywgMHg2MTUxNTFhOCwKLQkweDg0MDhlYzQ0LCAweGY5NzA3ZDkwLCAweDM3ZDdkNDcwLCAweGRmOTUwMTJjLCAweDNlMzBlYjg5LCAweDBlMGMxYTc0LAotCTB4MTAzNmEwYzMsIDB4YzZjMDZhMzAsIDB4NjgwZTgzMDAsIDB4OGNjMDgzNzgsIDB4MzY0NTg0Y2IsIDB4NWM3MTA5MjEsCi0JMHg3ZjllNjQ2NiwgMHhiYjc1NTM5ZCwgMHg0OGU5YmRlZiwgMHg5YmRmZmM3NCwgMHgzZjZmZWYzNywgMHg1NTZlYTJiZiwKLQkweDViM2FhYTlkLCAweGFhNzUzYTlkLCAweDQyMDQ5NDYyLCAweDFiZTQyNmFlLCAweDcxZjRkMWY4LCAweDEwOTIxMDkxLAotCTB4NjlmMmJiNGUsIDB4YjkxMDk2M2EsIDB4OTZiZmNhMjcsIDB4ZmY2ZTBkNTYsIDB4NDAxOTA0ZmEsIDB4NWJlNmI5YzgsCi0JMHg0MjU0ZTY1YywgMHhjMTUxM2QzYywgMHgzOWY5NjlhYiwgMHg0Y2RmOWU3ZiwgMHhiY2I2MGJjYiwgMHg3Y2QyMzBlZiwKLQkweDA4ZDExNmY1LCAweDE2ZWQ4NmU1LCAweDRhYjlkZjZjLCAweGQ2YmU0M2YwLCAweDU1ZDhmZWRjLCAweDQ1YmRkZjM0LAotCTB4NjgyODZiMjQsIDB4MjA2NmNlYjIsIDB4ODg5Yzg0MzksIDB4YjQ2N2VjMjIsIDB4MjEyMjQ4MWIsIDB4YWQ5NjE2NjUsCi0JMHgxNjYzYmQ1ZSwgMHg2MmRlNTdmNCwgMHhmZWRhMTYyNiwgMHg4MWU4YjM0NCwgMHg4MmI1ODJmYywgMHhhYWZlZDA5ZiwKLQkweDRhNjY1YjVmLCAweGY5ZTZmMGE2LCAweDQ1YzU4MDg1LCAweDM3MWY2YmYzLCAweDJjODRlY2I5LCAweGEzODFmZWRhLAotCTB4MTljODQ2YzMsIDB4OTk3MTE0NWYsIDB4ODFlNTFlNzAsIDB4ZmMyYTQyNGMsIDB4ZDMyNGE3MWIsIDB4MDQxYjE1ZjYsCi0JMHhhZmMyODFiNywgMHgxM2JlNzU1OCwgMHgyY2QxNTdjNiwgMHhiYzI5MTcwZCwgMHhlMjU2NzVjYSwgMHhmZWZhYzkxYSwKLQkweDZkN2Y0MDg2LCAweDJkYmZiMGM3LCAweDU3ZjQwNjUyLCAweDEzNmVlMTdlLCAweDkyOWU2MTExLCAweGQzNTVkYTA3LAotCTB4OTViY2MwNzEsIDB4MWFmOGNmN2UsIDB4MTg0NDZiODksIDB4YTFiZmQ1OWYsIDB4MzU3YWQxZmQsIDB4OTg2ZTBiMmYsCi0JMHg3ODgxOGQ2MiwgMHhhZjlkMWM2MSwgMHg2MGJmYTY1OSwgMHg5YmQ1Zjk4MywgMHhmM2Q1ZDg0NiwgMHhmMzBhZGQyOCwKLQkweDM2YWZmMGE4LCAweGY4YzFiMTRkLCAweDMyY2E5YjU2LCAweGQ3MmFmMGMzLCAweDUxNWM0OTNkLCAweDRjYWRmMWFhLAotCTB4OTU1NWU4MWYsIDB4M2UzM2QzZWIsIDB4MDU0ZjE5YTIsIDB4MDZjMDU5MjUsIDB4NmU5YmY2NzgsIDB4N2VmZTE1MWMsCi0JMHg3YTQ1ODg1OCwgMHgzNTEzYWU1NywgMHhmMWU1MjlmMCwgMHhmZDNlZmNiYiwgMHhiYzgzYzUyNywgMHg5YjVmZWVjZCwKLQkweDAyZGJhNjFhLCAweDJiYjdmZDI3LCAweGE3MWViNzRjLCAweDFjZWVjNzQyLCAweDdkMjU3YzM1LCAweGM3NDFlODBjLAotCTB4NjI3M2U4ZDMsIDB4MDkyZjg0ZmEsIDB4MmU3Y2E3ZDMsIDB4YmUzM2QzYTQsIDB4ZjRhZTk4OTEsIDB4YjNmYmYxYjksCi0JMHg1NzRjNWNiZSwgMHgzZTk4M2NmOSwgMHhkNGMyMmJlZiwgMHg3YWMxMmJlZiwgMHgzMWQzN2M2YiwgMHhmMTc5ZjI2ZCwKLQkweDcyYmU4YmZiLCAweGVhZjlkNzRjLCAweGRmN2FmYmYwLCAweGY4Mzc0YzQyLCAweGIyZmVmYzY0LCAweDAxYTYzOTZmLAotCTB4YmU0ZGE3NGUsIDB4ZmIzNjk4OTUsIDB4YWI2ZjU4ZmMsIDB4MmRhNjFkNmYsIDB4NWY3ZTAwYmUsIDB4OThlN2YxYzEsCi0JMHg3NDhjZjI0OCwgMHg3MTBmMGVmZSwgMHhiODkzNzI1MiwgMHg0NDllNGY2MiwgMHgyYzI1NzFmMywgMHhjZTUzMzg5ZiwKLQkweGEyN2NkMTMzLCAweDNlMjllNjk3LCAweDc5ODJhYjkyLCAweGFlNGY5YTY2LCAweDFmNDNlNTYzLCAweDM0NTFmOTI0LAotCTB4ZTU2NjU0M2YsIDB4ZjkzYzJiNjksIDB4NmI0ZjlhMTYsIDB4NTYyM2U1NjQsIDB4MzRkMWY5YzksIDB4Y2FjZmMyM2YsCi0JMHhjYzEwZGIyZiwgMHg2NWZjZDJiNywgMHhkNTllNTYwMSwgMHgzNDZjMGE0YSwgMHhmOTY0MTU5ZiwgMHgwMjllYmRlYywKLQkweGI3NjdjZDNiLCAweDg3Y2U3Y2IzLCAweGU2ODM4MTcyLCAweDdiNTgzYTczLCAweDEyMDNkZTNkLCAweDZkMjg0ZDk5LAotCTB4M2M4Yjk1OWUsIDB4NmYzNDQxYzYsIDB4MzcxMzc3MjIsIDB4YTM3YzhiYzUsIDB4ZTI4MTM4YzcsIDB4Zjk2MTcyNDEsCi0JMHg1ODI3Zjk3NiwgMHhjMmU0YzliZSwgMHgzNjc5NzZmMiwgMHgxZTRiMzc5NiwgMHg1NzJhM2YyYywgMHhjOWIzNzk2MSwKLQkweDkxN2ZlNTgzLCAweDU2ZmNjNWVmLCAweGE2ZTU4YmM5LCAweGZhYzM3ZmZhLCAweDJjNWU0ZDViLCAweDg2NWZhYTRmLAotCTB4YzY0OTE2ZjksIDB4MWJlYWNiZjIsIDB4NDk4YjdlYjEsIDB4OTYyN2YyYzYsIDB4OTkzM2QyZmMsIDB4ZWYwNGZiOTYsCi0JMHg4YjY3YzA1MywgMHg0OTM5NmYwNSwgMHgyNDA5ZmUwNywgMHg2OWZlNTA5NSwgMHhlMDc0YzgxMCwgMHhjOTgxMDdkNywKLQkweDIwZmNkMWM2LCAweDYwNWRjYTEzLCAweDIwMGJjZTU3LCAweDAwMWJmOGFmLCAweDFmMTdiMmY5LCAweGNmMzg0NTQ5LAotCTB4YzI4OTFjMjEsIDB4YzcwZTJmMTEsIDB4MDM1NzNiYmQsIDB4NWNiYmJkYzcsIDB4ZDQyMmYzODEsIDB4MWZlOTZjNWIsCi0JMHgyYmVlYzA5YywgMHg1ZGQ5ZTNiNSwgMHgwNTc5YzBhMSwgMHgzN2ZiZDhlMSwgMHgyNmVmZjcyZiwgMHhiYmYzYzc2YSwKLQkweDBiNGUwNTJhLCAweGRmZWQ4OWMyLCAweGQzZWQzNjc4LCAweGJlZDM2N2UyLCAweDIwNzY3ZTEwLCAweDM3ZmExMjdlLAotCTB4YjU3N2VjOWUsIDB4Mzc3ZWM5ZjgsIDB4NzA3NzlmODQsIDB4MDdmYTgzM2MsIDB4NWFiYmQzNjcsIDB4Mzc3YTZjZmMsCi0JMHhlMDNmOWY4NCwgMHg2ZmY0ODY3OCwgMHg2OWVmZDk1ZSwgMHg1ZWZkOTNmMSwgMHgyMjFmM2YwOCwgMHhjMWZlZDQ5YywKLQkweDhiNWY3ZTY5LCAweDQzZjdlNjlmLCAweGUxMDRmOWY4LCAweGJjZGZlZjBjLCAweGUyZDQxZWM2LCAweDEwYzFlYzY3LAotCTB4M2YxMTNhN2UsIDB4NGUwZmY2OTcsIDB4N2UyZDQxZjMsIDB4ZjA4NjBmOWEsIDB4Njc4ZTI1ZjMsIDB4MzVlNmZmNTQsCi0JMHgzZjE2OTBmNiwgMHhmMDg1MGY2MywgMHgzMzgwMDQ0MywgMHhkOWUzN2ZiYSwgMHgzZjE2OTFmYSwgMHhlMTBhM2Y1YiwKLQkweGM2NzA4MmM3LCAweDM5M2M2ZmY1LCAweDkzZjE2YjFmLCAweDNmMDg3MWYzLCAweDQyNjcwODcxLCAweGZkNmNlMGZmLAotCTB4YWQ5ZjhiNTgsIDB4OTNmMDg3MWYsIDB4ZjUyNjcwODIsIDB4N2YzOTVlNmYsIDB4ZTcyN2UyZDYsIDB4NjRmYzIxY2YsCi0JMHgzZTNjOWMyMCwgMHhkOGUxNDIxZSwgMHhmMmQzODZmYiwgMHgyZDNmMTY4OSwgMHgzM2YwODQ5ZiwgMHhmMjE0ZTEwYSwKLQkweDRlMDQ1Y2YxLCAweDdlMmQwOWVlLCAweGYwODQ0ZjcyLCAweGFlNzA4MzkzLCAweDk2OWMxZmU5LCAweGI0ZmM1YTEzLAotCTB4ZTdlMTA4OWMsIDB4NWQ3Mzg0NmEsIDB4N2I5NWU2ZmYsIDB4ZGM5ZjhiNTIsIDB4YTMzZjBjOTMsIDB4YzFiNDk2ZjcsCi0JMHg0MGQ3NDM3YSwgMHg0YzliNDhiNywgMHgwOGYxZWUzOCwgMHg2NGU4YmViNCwgMHgyNmU5ZDE3OSwgMHg4YTg4ODc2MCwKLQkweDNkZGE0MTdkLCAweGRiNmZhZDIyLCAweDA4ZmQ5YjEwLCAweGY5MTlkYjUxLCAweGVjNzhjMDM3LCAweGRiNTJmYWQ0LAotCTB4ZDFiOTMxMTksIDB4ZDYyYmJiMWEsIDB4YzdjOWE3MTMsIDB4ZWE2YjI1MTcsIDB4NjlhNDk0MjcsIDB4YmY0ZTA3Y2EsCi0JMHhjODNlNTM0YywgMHhhN2M5YWQ5YiwgMHhhOWE5NWY5NCwgMHg1ZjJlYTQzZiwgMHhmMGI2MWY5MywgMHg1NGZkNGQ1YSwKLQkweDNlNGQyNmY5LCAweDM0NGZmOTdkLCAweGRlMzc4N2Y1LCAweDY0YmYyOWE1LCAweGZjYTY4NTY1LCAweDRkMDJmZjUyLAotCTB4M2Y3NWYyZmUsIDB4MTUxZmQ0ZDMsIDB4YmYyOWE0NTgsIDB4NGQxMWU1YTIsIDB4MTNlMGU4ZjksIDB4M2Q5OGZjOWEsCi0JMHg4ZmVhNmFjZiwgMHgyOWEzNWY2YiwgMHhiZDc4N2YxZiwgMHhjNzQyN2NhNiwgMHg1MjllNGQyNiwgMHg3MmUyNzljMiwKLQkweGNmODExNzllLCAweDA3ZWJiMzA5LCAweDBiOWVkMDk5LCAweDM3OTg0ZGRhLCAweDRlZDBkYjI1LCAweDVjY2JkYTBmLAotCTB4NGQxZDI5YzcsIDB4MDA2YmFmMDYsIDB4ODQ4NjgxNGQsIDB4Yzk3OWRiYWUsIDB4NTA3NDk3ZTUsIDB4YTU3N2RmM2EsCi0JMHhmZDI3MTJmNywgMHg3YmM5OWY3ZSwgMHhmZDgyMzM4NSwgMHg5MDJmZTk0OSwgMHgwNjVkNDgyNCwgMHhjYmU1ZjU0OCwKLQkweGY5N2ZjNjI0LCAweDFjNDYxNzI5LCAweDBkNmJlZGExLCAweDY5NjIyM2RkLCAweGY3OTBjYmJlLCAweGYxZjk0MDk0LAotCTB4N2M4MGMxNTksIDB4M2E5MjJkMTksIDB4MjY2ZDE3YTgsIDB4NGIyZmY3NjgsIDB4NTY0MTc5Y2QsIDB4MjFmMmU3ZjEsCi0JMHgzMDg0ZWU1NCwgMHgzNzkyZTVkYywgMHhlNzhhZWMwOSwgMHhjMTkzZGZlYiwgMHg0MjE4NjhjZSwgMHhjODRjOTVlNywKLQkweDgyZjc4NGFmLCAweDNmNmQwNjcyLCAweDRiYzkyY2E0LCAweGQ0NGQ5OWUxLCAweDZmZjc1NzBlLCAweDYyNjdmZGEyLAotCTB4ZmZkMDRkZmYsIDB4MzdmYTNlZmEsIDB4ZmE2YWU1YTcsIDB4YWU1YTFhOGYsIDB4NDRjYTNmZTksIDB4M2I1Mjc3ZmIsCi0JMHhlZjEwZmViMywgMHg0YWU5MTI5ZiwgMHgwZTExNWU0MiwgMHhhMWU2ZmY2MSwgMHgzMmZmZDhlNSwgMHhhODhmZGQxMywKLQkweGY1MGU4ZmZiLCAweGYxZjIwY2RmLCAweDEwOWZmNDNhLCAweDU3NjlmZTYxLCAweGI0M2ZlNzZhLCAweDEzN2YzYjQyLAotCTB4ZmFmNmZmOWIsIDB4YTNmZWYzM2YsIDB4MGE2ZmZlNzEsIDB4MWZmMzY2N2YsIDB4NmZlNmMxNWEsIDB4ZmQ0MzcwNjYsCi0JMHhkZmY4NDIzYiwgMHhhNzdmZjMwOSwgMHg0ZmE3ZjlhZiwgMHg1ODdmY2VkNCwgMHg2NmZlNzY5NSwgMHhmNWJiZmZkNiwKLQkweDM2ZmY3OTI3LCAweGUxM2RmZmVjLCAweGIwZmY5YjI0LCAweDY0ZGZlYzJhLCAweDdmODFiYWY2LCAweDc1ZDEyOTRjLAotCTB4MTkzZmRhN2UsIDB4NDBkMTE1NGMsIDB4MGZkYTE3NjAsIDB4MjhlMzIzYTQsIDB4YjBmMjEzMTMsIDB4YjhlMzg2OTAsCi0JMHhkYmYxOWEyZiwgMHhkZjk0ZDExNywgMHg4OGM4YmY1MCwgMHg5YWE3ZTIxZiwgMHg2YTQzZWU4YywgMHg2ZTU0MmNiOCwKLQkweDFlODEzM2M4LCAweDFmYmE3MmMyLCAweDNhODdjYjk5LCAweGZlNDQ0NWE3LCAweGZkOTk0ZjI2LCAweDNiNzhlOWMzLAotCTB4ZjIxOTQ0NWIsIDB4ZTQ5YTllNzMsIDB4NmI1NzdkMDcsIDB4NDA5Njc3MjYsIDB4YzIwOTIzM2IsIDB4MWU5ZTRmZjcsCi0JMHgyZjNkNDZiNSwgMHg1MWI3M2E3ZCwgMHg5MWExZDEzYSwgMHgzOTFlMzYyZiwgMHhhM2FjOGM5ZiwgMHgyNjA0MmJlMywKLQkweDlmY2UxNzE4LCAweDQyMWRmYmEwLCAweGU5NDcxMWY3LCAweDkzZDIwMjdlLCAweDdlOGZlZDEyLCAweDQzZjc0ZTNmLAotCTB4OWI5NmE0YzQsIDB4NjQ0NzZjN2EsIDB4NzQxOWZiY2YsIDB4ZTUxMmI3ZmMsIDB4ZGU3OWMxZTcsIDB4ZTE0NTIyODEsCi0JMHg0ZmZlMTkxOSwgMHhkMDM1N2RkMCwgMHg5NWEzNmU2MywgMHgxZTNjM2YyMiwgMHg2ZjljMWYzYSwgMHg1ZmUwYTk3NywKLQkweGQyYmM3MDIzLCAweGY2ZjFiN2Y2LCAweGUxNDdjNjA0LCAweDM2YjI3MmNmLCAweDBmNzI1MTFmLCAweGI3OWYyOGEyLAotCTB4NjcwMzVlMzIsIDB4NGQyZmYxMDYsIDB4NWY2ZmVkYTIsIDB4YjQyMjQzYjEsIDB4NzRhMTQxY2UsIDB4OTdlMDAyYzgsCi0JMHhjNDEyMjQwNywgMHgwMjQ3NjQ3ZCwgMHg0MGNjZTRjOSwgMHgwYzlkN2JlMSwgMHhhNWQzNmRmZSwgMHgzODJhMWRlMywKLQkweDRmMjhhNGIzLCAweGFjY2YxZDA5LCAweGVmMWM0NWZiLCAweGJjYjZhZjBjLCAweDYzZDViYjYzLCAweGNhZTlhMmM4LAotCTB4NDk0MjI0Y2YsIDB4YjZiOTdiN2UsIDB4NmQzYThlZmMsIDB4ZGE4NWNlZmUsIDB4MDk4ZjlkM2MsIDB4NTk1MmI1ZDYsCi0JMHg4NzRlOWRmZiwgMHhkMGFlZjNjZSwgMHg2OWM0ZTliYywgMHg5YjJmMzY3ZSwgMHgzNTkyNWNiZCwgMHg2ODZkODQ3NCwKLQkweDAzNGYyZjBlLCAweDEzYzQxM2I0LCAweDVkZWY0ZmI2LCAweDI2ODFmMjlmLCAweDBlYTU2ZjNmLCAweGZmOGJlNzFlLAotCTB4ZGRmZmZmNGYsIDB4Yzk2ZGFmZjQsIDB4MWFhZTNmOGIsIDB4OWFlMDc1NTcsIDB4N2FhYWUzZjgsIDB4ZDQ2ZWViOTUsCi0JMHg2N2ZiZTdlNCwgMHg1YmNmZWE2OCwgMHg5ZjI5YWE1OSwgMHg1MzVmMzhkYiwgMHg0ZmY5N2IzZSwgMHhmOTUyZjkzNSwKLQkweDNiZmQ0ZDdlLCAweGNhNmJkNjE3LCAweDU4N2JhOGVmLCAweGY5N2I3ZTUzLCAweDBjZmM5YWUzLCAweGY1MzUyZmVmLAotCTB4NWFiZTliNmYsIDB4OWY2YzJlNTMsIDB4ZDcwM2FjM2YsIDB4NDFiMGVmNGQsIDB4YTNmYzBmZTAsIDB4Mjk5ZjAwOTksCi0JMHhmYmYwYWNmYywgMHhhNjEyNWYyOSwgMHg0YzJlN2M2NywgMHg1MzBmNDFlYiwgMHg4ZDc4NmVmZCwgMHg0YTZiYjVhNSwKLQkweDU3M2U4MTg3LCAweDU0YTRmZmY4LCAweGE1ZjQxNDM3LCAweGZhZjU5ZjllLCAweGY0YTdjZjU3LCAweGNlYzkxMjk3LAotCTB4ODEyYWQyNTAsIDB4ZDYzYWMwOTQsIDB4ZTU1ZWVkYzUsIDB4Y2ViZTM5ZmIsIDB4ZDMwOGIyMTEsIDB4Y2I5MzEzMmEsCi0JMHhmMjgzNGRhYSwgMHhjMWYyMDM4OSwgMHhiZWI2NzUxMSwgMHg4MDgwOTJlMSwgMHhjZGUwMjBmMywgMHhhNWJhMDA0YywKLQkweDRkNGJiNWQwLCAweDM4Y2Q3NGQ3LCAweGIxMTBlZWNmLCAweGM5OTAxYWZmLCAweDk0ZGNiMDA5LCAweGZmNDAzMjZjLAotCTB4MzdhMWI2YzEsIDB4NzhmMTgyOGYsIDB4MjViZTYzMzYsIDB4YjNhZGVkMDEsIDB4ZTNmOGEyYmUsIDB4MDk1ZmMwNDYsCi0JMHhkMzdjYTdhNiwgMHhmM2UxM2QzMSwgMHg1N2RjN2E2MiwgMHg1ZjUxZTk4ZSwgMHhiZTFkYTYxZCwgMHhlYzdlOTg4NSwKLQkweGQwZmQzMTkzLCAweDNmZDMxY2I3LCAweDNkMzExYWY5LCAweGU5ODk1YmVjLCAweGQzMWY5ZjQxLCAweDUzMDc5ZjRlLAotCTB4NTVmZjRmODUsIDB4ZjBjYTNhZTgsIDB4NzNkNzRlZGYsIDB4MzI4ZWJhNmEsIDB4Mzg3OGQ5MzgsIDB4ZjE4NTFmNWQsCi0JMHg5MzliYjA0NiwgMHhhNzE5MThjMSwgMHg1NjNjNDdiMiwgMHhlMDJlYWJmNCwgMHg4OTZhNzBmZSwgMHhlZjJiM2YzMSwKLQkweGQ3MDUzMTdiLCAweDdmOGI3NjhlLCAweDllZTFlODI0LCAweDAxMWI3ZjkxLCAweGMzOWVlNDdlLCAweGVkNDgwMTc0LAotCTB4ZmE3YTdlN2IsIDB4ZTIwNzg5ZjUsIDB4Y2NiZGZiNDEsIDB4MzE4NzE3NGYsIDB4ZDEyZGNiYmQsIDB4MDMxNmFmMGMsCi0JMHhkNGQ5MjIyOSwgMHhhMmZlMWI1ZSwgMHhjYzRjYWVmYiwgMHhiNDFjNDkxYiwgMHhiNDZmYmJmNywgMHg2ZDRiODA0NywKLQkweGM1ZWZjMDQxLCAweGZlZDhiYWYwLCAweDNiYzAxNjQ1LCAweDM5ZDdlY2YxLCAweGE0MzI4ZTkwLCAweDRkYjhiYjMxLAotCTB4MDQ5NGJiNDQsIDB4N2UwMzcwNWYsIDB4ZWNkNjdhNDMsIDB4NmQzZjAyNGUsIDB4MTM5MzcwZjcsIDB4YjhhN2JkZDcsCi0JMHg5ZmMxNWE5ZiwgMHhmZTBhZjJjYywgMHhhZmUxMGUxZSwgMHg5N2YxMDkzMSwgMHgxNGJmYzVmMSwgMHgzYmE3ODhmZSwKLQkweDYxNTFhNmViLCAweGJlMTM5ZGZjLCAweDM5Y2E3ZjFkLCAweDFiYmZiZTg5LCAweGUyNzdlMzQ0LCAweDA1NDRhZWNiLAotCTB4MDk0M2VkYWYsIDB4ZTAyZGU3ZWQsIDB4YTdiZjBhN2YsIDB4YzAxODkyZjksIDB4ZDkzZWM4NzMsIDB4ODdmN2Y2NjIsCi0JMHg0ZTgwZTc0ZSwgMHg2YWJjMzBiNiwgMHgzZDllYmMxZCwgMHhlZWMwMzgyZiwgMHg3MDY0OTA1ZiwgMHg2NzgwOGYxZSwKLQkweGE0MGVhZDI1LCAweDNiNmE2ZDNhLCAweGVmOWI0NWE5LCAweDAyOGExNDY5LCAweDYyYjhjZjY4LCAweGZkMDI4ZGE2LAotCTB4Y2YxZTc0ZWIsIDB4ODQ5OTNkMDAsIDB4NDE2NzAyYTksIDB4M2M3OWM5OTIsIDB4ZTRjM2U5MWUsIDB4Y2EyYzQzN2EsCi0JMHgxNDVmMTlmZCwgMHhjN2ExZmJkNiwgMHhmMDljMTdkMSwgMHgzMWM5OWEzOCwgMHhmOTUwMWVkYSwgMHhmNWRmN2E0ZCwKLQkweGUzNTNlNGZiLCAweDM3ZTA0YzVmLCAweDE3ZDJhZDIzLCAweGQxNDRiZjYwLCAweDAzODFiZmZmLCAweGJjYzQ2MjMyLAotCTB4MjAzNmI3MDIsIDB4ZTAyYmU2Y2EsIDB4N2Y0ZDA2ZmIsIDB4Mzk0YjlkYjQsIDB4ZWQyNmZiYzMsIDB4NDhjMWU0ZGIsCi0JMHg0YWZjMjg0ZSwgMHhmMDQ2OGE5NywgMHhiZTAzOGQ0OSwgMHhmNmI1MzhiNSwgMHg1ZjI2YWM1MSwgMHhhOWM4MzJkYiwKLQkweDFmZTA5N2IxLCAweDcyOTI4ZjU0LCAweDU3N2MwOGMxLCAweGNiYTZkOWM1LCAweGQwMmU1YjY4LCAweDUzODI1NWYxLAotCTB4NjA1NWY4MGEsIDB4M2FhM2FhZjUsIDB4ZjAxNzVlNGMsIDB4YWY1YmUyY2IsIDB4NDZjZDQxNzIsIDB4N2M3ZWFmOWMsCi0JMHgxYTM3N2U5NCwgMHhiZjhmN2Q4ZCwgMHhhZmI5ZWM1MiwgMHg2YzdjODIyNCwgMHhjYWJiN2FlMSwgMHgyNDBhZmNjMCwKLQkweGY5YzA3NjRhLCAweDFkOTI0OTE3LCAweDY4NzFkOTM3LCAweGQwN2UxMGI2LCAweDUxZmI0NzBmLCAweGYzMzgxNWU1LAotCTB4ZDZiNzUyZmQsIDB4Y2Y5MTk1N2UsIDB4YmY5ODFhY2YsIDB4NmVlZmRmNDAsIDB4ZTJlMTM3ZTgsIDB4YjBkOWFiZjgsCi0JMHg1YmNjMGE3ZiwgMHg5NjlhYzc4ZiwgMHhjYTJmMjZmMywgMHgyNzJmZmQxNSwgMHhiZjA1NDc4YywgMHg2ZWM5NjI5NSwKLQkweDU4YWZjMjkxLCAweGQ1ZjcwNDc3LCAweGM0NzkyNGE3LCAweDE3YTJkZjAzLCAweDk2ZGY4ZjdiLCAweDlhYWFjMjc0LAotCTB4YTFkYTRjYjcsIDB4Nzk3MmJiOWYsIDB4ZGI3NWM0NDcsIDB4OWY1ZjU0MDcsIDB4MWU0NGJkZmUsIDB4YTA1Y2JhMDEsCi0JMHhhMGUzNTRiNSwgMHhlNDMxMDUxNiwgMHhiYmY1ZWQ4NCwgMHg2MThiMmI5YSwgMHhmYjBkM2VmZCwgMHhlNzJmYWExNSwKLQkweDM4MDcxMjkwLCAweDYzNDljYjFkLCAweGU3ZTdkODBlLCAweGYwMDhhMTg4LCAweDg3ZmM4ZTc0LCAweDRlOGE4YzYzLAotCTB4ZTIxMzQ0NjcsIDB4NDdlZmRhODksIDB4ZjZhM2UzZDUsIDB4ZWQ0ZjI2YmIsIDB4OGNiZTRkNzcsIDB4ZTcwODk0ZGMsCi0JMHg0OTRmNjVkOSwgMHhmY2UwMmZjNCwgMHgxMjdmZTUzNCwgMHg3OWY3NDg5ZCwgMHhlYzAxYWVhNCwgMHg1YjEyYzU5ZCwKLQkweDEyNzJlZmQ3LCAweDVmMWQwYTYzLCAweGU1Y2ZhYmY1LCAweDc5ZmNkMjk0LCAweGNhMjNkOTkxLCAweDM4ZmNlYzc5LAotCTB4YzA4YWZlMzYsIDB4OTY4NzkzNmEsIDB4NzMxZTZiMWYsIDB4ZGEwNDU1ZWIsIDB4ZmQ2MDFiZmIsIDB4ZWUwOGI3OTEsCi0JMHhmOGRlYWViNSwgMHhkN2UzYWVmZCwgMHg4N2IxNTc4ZiwgMHhmMzBiOWQ3YSwgMHgxM2FmNTQ3MSwgMHg3NjQ4ZmUzYywKLQkweDg1MzNlNzExLCAweDRlOGM2MzFmLCAweDQ1MjM3ZjhkLCAweDk3NDRiZjk3LCAweDdmY2JhMzFmLCAweDQwMWY3OTZmLAotCTB4Mjk1ZWYyMzQsIDB4ZTM4YzUzN2EsIDB4ZmVjMzdjOTgsIDB4MjM3NjMwNGUsIDB4Zjg2ZjdmM2YsIDB4NWZlMGJkNDksCi0JMHgxZmMyODNmMiwgMHhkMTMzOTNhYywgMHg4NTA3ZTYzYiwgMHhmYzZiZDE5ZiwgMHg1ZjgyNDc1NywgMHg1YjRiZWFmZCwKLQkweDJhOWZhYTY1LCAweDQxZGE3OTVlLCAweDZkM2E3ZWE4LCAweDUzNzQ0YzZjLCAweDVkYWQ1N2ZhLCAweDM4M2UwMGVhLAotCTB4YzAxZDk0NjUsIDB4NjJmZGE3Y2YsIDB4YmU4MjNmOTEsIDB4ZjBhOGQ3YmIsIDB4ODAyNmM3ODMsIDB4NDlmZTBkZmYsCi0JMHhmZjU5OWZlMSwgMHhhZWIwZjVlOCwgMHg3MjU2YjE3ZiwgMHg5ZDZkNWZhMiwgMHhmMmE2NjgzOSwgMHhiZjNjZDM1YSwKLQkweGZlNjE2NDk4LCAweDNiMmZjYjA4LCAweDQ1YmU0MjJmLCAweGJmMTU5ZmNiLCAweDg1ZDEzYTdlLCAweDMxNGU1MmZhLAotCTB4ODgzOGZmYTAsIDB4ZDM0ZDdmZjYsIDB4ZGQ2MDUzMjcsIDB4MjhkZDI1YWYsIDB4ZDA3NmZhNjcsIDB4Yjg3MTU3ZmYsCi0JMHg2MjlhOTUzZSwgMHg0NmUzOTc3YSwgMHhiM2RhMTEzZSwgMHhhM2YzNmQ1ZiwgMHhmYzA3NDVlNywgMHgwNmZkMDNhYiwKLQkweGRjZTVmYWZhLCAweGRhMzMyZjhlLCAweDFhZmVhMDA3LCAweGZlODNjNjRmLCAweGZjNDFmMDUyLCAweDVmMTc4ZWNjLAotCTB4ZmMwYjJlN2QsIDB4N2U5YjY3YTcsIDB4Nzg1NDEwZWYsIDB4MjdhY2U0NTIsIDB4YWY1N2ZiMzAsIDB4OTdkNmZhYmIsCi0JMHhkNTBlNTQ5ZCwgMHg0ZjYyYTNmNiwgMHhmZWY4NWFiOCwgMHg1NWE1OTVhMywgMHgxNTcxZDA1MiwgMHhhYjU1OTNkNSwKLQkweDNmNGNiNzI1LCAweGMyZjRiZDU3LCAweDNmODJjZjhiLCAweGY3NjY4ZmYzLCAweGYyYmYwYTcwLCAweGFmMDc1ZGE1LAotCTB4OGRjYWY5YTQsIDB4MzY2MjgwZDIsIDB4MTg5MDliMGQsIDB4ZmQyZDRiYTYsIDB4OTg3NjYxN2YsIDB4Nzc5YjE1MGUsCi0JMHhkOGEzNWM5OSwgMHhjMmUzMDdmNywgMHhiOGRjYThmNCwgMHhmNTQ2NDRjMywgMHg2MDQxNDdjNiwgMHgxNmMzYTk4NywKLQkweDIzODEyZTgxLCAweDEyZmVjMDUzLCAweDA5YmJmZDVmLCAweGJiN2E3ZWU4LCAweDQ2YTYwNjQwLCAweDVkZWFlN2MwLAotCTB4OWUwMTlmNjgsIDB4NGU5YzhlOTAsIDB4ZWFlOWJhMjEsIDB4ODBiYTUyZDcsIDB4YTRlODU3M2UsIDB4ZmFlMjJmMmYsCi0JMHgzMmI5ZTAwNCwgMHg3ZTVmOWY5MSwgMHhmZTg0ZTIxZCwgMHhmY2MzNzY2NCwgMHhkYmJlNWZjYiwgMHg2OTM4ZjMwMSwKLQkweGZkN2M2M2FjLCAweDBmNDRkMmRjLCAweDkyNWNiN2VkLCAweGIyOTg5ZDEzLCAweGRmY2ZlNWVmLCAweDZmMzZmYzhiLAotCTB4Y2M4OWJkZmYsIDB4NjQxOWU1OGYsIDB4MWU0OWI1YzAsIDB4YmI5YmYzMDQsIDB4NWY5YzE2ZWEsIDB4ZGYyMmYxMTksCi0JMHg5NjI3M2Y5NSwgMHhkY2ZjN2U4MCwgMHg0NjM2OGE0OCwgMHg4ZDRmOGI5MCwgMHhiOTM4MGVjYywgMHg3NGI4MWE4NiwKLQkweGIyZTkyNzdlLCAweGZmMzM3MTgzLCAweDE0ZmM2MjIxLCAweDNmNDUzZjIxLCAweDJlN2NiZGQ5LCAweGZjYzM4MmQ0LAotCTB4NGU4YzUxZTcsIDB4NWMwZDE5NmYsIDB4YWYxNWE4YWUsIDB4NjVhNmQ3ZTYsIDB4MzM5ZjQwZWQsIDB4ZTEwMzNjNDMsCi0JMHgxODk2YTViYywgMHhlMTBmOGU2NSwgMHhkYzU3MGExYiwgMHhkMTkwMzg1ZiwgMHgzOThjYjg4NywgMHhjM2I1MWRiYywKLQkweGQ0M2JlMDBhLCAweDk2M2M5NzZmLCAweGYyM2I0ZDJjLCAweGZmYjg2YTRkLCAweDc0ZmY3ODdiLCAweDNmNjBkMWRjLAotCTB4YmM4YzRjOWQsIDB4MjkyODE4MGYsIDB4NzFkNzRmNzIsIDB4ZTRhOTdmMTUsIDB4ZDM3YmM5OWIsIDB4MTViZTRjYzMsCi0JMHg1OGRmZjc3OSwgMHgzOTdmZTUwNCwgMHhkYTA3ZTRjMCwgMHhjNzQ4ZmFjMSwgMHhlNTg4MWMxNSwgMHhhODA5YTYzYiwKLQkweDE4MjRjYzBmLCAweDI0OWJhZTQ5LCAweDcyZGFkNzJlLCAweGI4ZTg0Zjg1LCAweDhhOGM0MjhkLCAweDFjN2UwMDVmLAotCTB4YTZlZDFmZTIsIDB4M2I2OGE3YjIsIDB4ODVhY2JlOTUsIDB4ZTFiZDFjZmUsIDB4OGYzYjcyMjksIDB4OTAwOWZmY2IsCi0JMHhmMmMzY2JmZiwgMHhiOTMxNTY0ZiwgMHg5NWJlZGJlZiwgMHg5MjU1M2YxMSwgMHg0MTY3YzVmZiwgMHhjYTdjYTk1ZSwKLQkweGE5NTc5MDJlLCAweGU5ZmRlNjA0LCAweDNmODNiNjg2LCAweDY5ZjI3MmExLCAweGFkNTM5MTQwLCAweDY5Y2JkNGZlLAotCTB4MDk3YmE2ZjksIDB4NGU1ZWE3ZjAsIDB4NDc1YzFkM2YsIDB4ZmQyOWNhMjIsIDB4MDc0ZTUxMWUsIDB4ZWE5N2ZjNzcsCi0JMHgwZTdmMDU0ZiwgMHgxNTNmYWI0OSwgMHgxZTE3ZDg3ZCwgMHhiN2YwZmFmNSwgMHg1M2UyMTc0NiwgMHhlZmU5MGZhZiwKLQkweGNkZTljOTAwLCAweDI5ZGYwYTdmLCAweGRiZjE1NmZjLCAweDc3YTA2MWVhLCAweGYwYTk3YzQyLCAweDE1MmY4ODVkLAotCTB4NTdjZmQzYmUsIDB4Zjk3ZDNmOGIsIDB4ZDE5OWYwNjEsIDB4ZjZiYzk1NzEsIDB4NGExNDk0ZmUsIDB4YzE1NmFhY2YsCi0JMHhiYjYxNzY2ZCwgMHg3OGE3OTBkZCwgMHhiZmIzMzBmMiwgMHgwMGNhNzc3MSwgMHhjYmFmZGU3NSwgMHgzZGY1NzQwNywKLQkweGFlODk3Y2JhLCAweGFmOTc1N2JlLCAweGIzZjdkNWQzLCAweDliNGI0ODdkLCAweDA0MWYyMDg5LCAweDQ1YTVmNTM1LAotCTB4ZmM3Mzg2NDQsIDB4ZWUyMjZkZWUsIDB4OThlOGJiYmIsIDB4YWVmYjY4MWIsIDB4OTk3ZWE5MGQsIDB4MTZhNTgzZWEsCi0JMHg0ZWVmYmZiNiwgMHhmZTgwMzUzMCwgMHgzYjc2NzJlYSwgMHg2MTZmMjBlMiwgMHg5MmFlYjVmZSwgMHhjYWFjNDc2ZSwKLQkweDJhZDIzYzNlLCAweGYwZWRmZWEyLCAweGZiNDhhMjkzLCAweDIyZDE2YTEzLCAweDVmNDgzYTllLCAweGEzYmNlY2U1LAotCTB4NWQwZGI0NTAsIDB4NDY5NzdlMDgsIDB4ODFhZTBkZDEsIDB4MzliN2Y1MzksIDB4YWJhMWJjZTAsIDB4ZTk4NmZkMzUsCi0JMHhiN2RjZmJmNCwgMHhlODVmMGM0NSwgMHhjMTY0NzY4YSwgMHgzMWVjODhiOCwgMHgwYmVkNTIwZSwgMHg5OWY5MTE0ZSwKLQkweGIzM2U3NDg5LCAweDYwZmVkOTViLCAweDVkOWQwYWNlLCAweDVmMjA1NjQxLCAweDMxZWVkOTk0LCAweGY2YTQ1ZTgxLAotCTB4OWZhZDUxZmMsIDB4MDU3N2YxOWUsIDB4NGFiZTU3ODcsIDB4NTdiNGFlNWIsIDB4NGQxNThkZjYsIDB4ZGYyZjcyZGEsCi0JMHg1YzQ5NTY2NywgMHhhMzI2OGM1ZiwgMHgzMDhmM2VkOSwgMHhhZmQ3MDkzZiwgMHgwZGU2NjI4NSwgMHhiYmZlMjlkMywKLQkweGY4MDQ4OGY2LCAweDQ0NTVhN2E1LCAweDEwNmNmN2ZjLCAweDIyNmZlMGZjLCAweDRkY2EwMjcyLCAweGJkNDZlOTBkLAotCTB4MmNlOWUwYTYsIDB4NmZhOTg1YzgsIDB4Y2I3NjczYmQsIDB4ZDAwZjM5NDcsIDB4M2Y1YjU1MmEsIDB4OWE3N2ZhYzgsCi0JMHhjN2ZhZGQ5ZSwgMHhmZTQwNmYxMSwgMHgzZjQzNDNkNSwgMHgxN2ViYmQyMCwgMHg3OWUwYjc2YywgMHgzYjc2ZDc2ZSwKLQkweDZkNzZhZmM2LCAweDAxZjQzN2RiLCAweDc2NjZiZmM4LCAweGI2YmIzOGMzLCAweGZjMDU5OTdmLCAweDVjYzhiNWQzLAotCTB4NmJhYjdhMGUsIDB4MmNkN2RiMDgsIDB4NTY2NWY2ZGUsIDB4NGI5M2FlMDcsIDB4OTBiZjZlOTAsIDB4YTdhYWJlZDgsCi0JMHg4NThmZWJmNSwgMHg1OWQyOTAwMSwgMHhkZGJmZmFjMSwgMHhkYTlkZmU4YSwgMHhhNzE4MmRkNywgMHhjYmVkYjVkYiwKLQkweDg3ZWRhZjFjLCAweDNmMGQ0ZjliLCAweDkzYjJlZmJmLCAweDdjNjA5YmU5LCAweGJhN2NlY2IxLCAweDJmMDk4ZGY2LAotCTB4YWJmZWQzZDQsIDB4NjY5ODc3OWIsIDB4Mzc4MmYyZDMsIDB4ZmEwNTllZmYsIDB4YjMxMzZiYjAsIDB4OGVhNTNhNmIsCi0JMHg3YTdjZTFlNywgMHg4YmVkZDJjZCwgMHg0ZWU3OGEyNCwgMHg0MjY0OGExMCwgMHg0ZGYwZDQ3ZSwgMHgwOTE5OWNiZSwKLQkweDdmNDc3ZjJmLCAweGYxZjE3ZjUzLCAweDdjMThmZmRhLCAweDUzZWYxODA4LCAweDQ3Zjc2YWQ1LCAweGJmZWYzMDA5LAotCTB4ZTgwMWZjN2UsIDB4ZTQ2NmVkODEsIDB4OWZiZTY1NGIsIDB4ZWVkMWVhMDYsIDB4MGZiY2Q4YjgsIDB4ZmRjN2JjYzMsCi0JMHgwODViY2QyYiwgMHg1ZmRlNjdmNiwgMHhmYmQzOTNmZSwgMHhlMzg1YzkyMSwgMHg2ZjQxY2JkMywgMHgxZjc2ZGYzZSwKLQkweGJiYjI1ZmU2LCAweGU0ZmRiYzcxLCAweDdmYTY4MWY3LCAweGEyNmZiYTMxLCAweDdjNWM3Nzc0LCAweGU0ZmYzOWRlLAotCTB4ZWU5YmVlZjMsIDB4NzRlMmNmNmYsIDB4OGM3ZGUyNzcsIDB4ZTM4ZWZmMzcsIDB4ZWU3YWFlZmIsIDB4ZjNhMWZmZDYsCi0JMHhiMzczZWM1NywgMHg4ZjNkYTRhMSwgMHg2OTNhNmY4ZSwgMHgzMTYxODNiNCwgMHgyZjY3YTEyMywgMHg4Nzk5YzQ4NCwKLQkweDhjMDA2NWZjLCAweDhhZTdlMjU3LCAweDMzMmRmMWZhLCAweDA0OGZmZGIxLCAweDVmYjRjNmU3LCAweGY3YzA4YjcyLAotCTB4NzQzZjZjNzUsIDB4YWUxZmI3M2QsIDB4ZjY4NjVjMWYsIDB4NjYxZWY1ZTgsIDB4NDk2MzEzYWYsIDB4ODg1OGRlNDksCi0JMHg0NmUzOWFmZiwgMHgzZWM5MjczZiwgMHgyZGZjODVlYywgMHhiYjVlNzg5MywgMHgyMDU3N2MyZiwgMHhlM2RhODExZSwKLQkweGRhMmQwZmQ3LCAweDBkZTlmNjAzLCAweDMzNDE4ZDgzLCAweGZhNDA4ZjRiLCAweGNmN2Y4M2JlLCAweDY2NWZlZWQ1LAotCTB4ZGJmOWI1NzgsIDB4YjdmMzZiYTYsIDB4ODJiNzc4NzAsIDB4YmZmYjQ1NzEsIDB4ODNmMDQ0YjUsIDB4ZjIxYTUzNWYsCi0JMHgzOWY4MDI1NCwgMHgxMTEyYjlhNSwgMHhhOTEzODgwNCwgMHg4NGZiMGE1YiwgMHhlZGI0NGE1YiwgMHg3NjdlYzM2NywKLQkweGYzOGYxODVjLCAweGUxNTNiY2EzLCAweGE0NmEyMWZjLCAweDYxYjhmODgwLCAweDI0ZmE4ODg1LCAweGY4NDA1MzJhLAotCTB4YzYxMmI5MjUsIDB4Mjg2MjdlMTMsIDB4MTczYzAxYzksIDB4ZjM1ZjE5OGYsIDB4MGRjZTA2MzMsIDB4ZjFjZjlkZjMsCi0JMHhkMGVhNDY1NSwgMHhiZTE3MjFkZSwgMHgwZTYyNjZmOSwgMHhkYTA5NzNmOCwgMHg4NDNkZjM0YiwgMHhmNWVkNDc1YywKLQkweDMwNDI4OWIyLCAweDNjZTVjYTlhLCAweGIyNjM5MTIzLCAweDkwMjljZmMxLCAweGE3M2YxYWEzLCAweDFmYmYwZjM2LAotCTB4NWNlMTg2MjUsIDB4ZmM1ZjdlYWMsIDB4N2ZhNzQzZjgsIDB4MzQ3ZmZjYTYsIDB4OTBjZGRhODMsIDB4ZjMzYmI5ZTIsCi0JMHhhYWZiMjlkNywgMHgxZTE5NWIzYiwgMHg3ZjA0YWI2YiwgMHg1MDU1ZjIxYSwgMHg3YzUzOWY1MiwgMHg4NWZlNjI2ZCwKLQkweDA2MzgzZjNmLCAweGU3ZWYyYWU1LCAweDdlZDg2MmEzLCAweGNjZWQwMzJmLCAweGY2Njc2ZTVhLCAweGYwMThhZWM4LAotCTB4YTZiNGY0NmYsIDB4MDJiMWYzZjMsIDB4M2YwMjM3ODcsIDB4YWRmYmU3ZWYsIDB4M2VmOWMwM2YsIDB4MGIyNmJiNGQsCi0JMHhmZGQ4MjI4ZCwgMHg3OGZkMWJhNCwgMHg1OTBiNjRmMiwgMHhlZTBlMjExYiwgMHhhN2UyOTMwMywgMHgxZmZkYzNhOCwKLQkweGEwMWNjNGZjLCAweGEzY2RmYjIzLCAweDU0ZTI2MzRkLCAweGRkNzE1Yjc0LCAweDZmNTY2MzY5LCAweGE4ZWZjMDNhLAotCTB4MWZlODNjZWEsIDB4ZWZlYzJmYzUsIDB4MmRmYmFmMDAsIDB4MjI0YTUzMWQsIDB4OTcxY2Y3Y2MsIDB4ZmViN2UyZGYsCi0JMHg2ZWI1Zjc4YSwgMHgwMDk1NGQ2YSwgMHgxNjRkMzcyZiwgMHg5ZmE2ZTczNSwgMHg3NWJlZjg5OCwgMHhlMzAzMTkwYywKLQkweDFhZWI3ZTJhLCAweGNiYTAwNGM3LCAweGY3MGRkMTFlLCAweGNmNWI2YWIzLCAweGNlMTFiYzliLCAweDA0ZjhmNDhmLAotCTB4OTdkZmU4ZjgsIDB4Y2Y4MDY1ZGMsIDB4NDJjN2ZmNjMsIDB4OGZiNTlmNjAsIDB4NDI2NGU3OWYsIDB4NmUyNjc0YmMsCi0JMHg0ZmUwM2RlNSwgMHg3NWUzODJmYSwgMHg3NDg5ZDlhYSwgMHg0ZjM4YjliZSwgMHg2NmZkYTA0YSwgMHhjMzQ3M2IzNiwKLQkweGFmMzI1NjkxLCAweGFkMTYxNTNmLCAweGMxMWMxMDcxLCAweDkyZjUyOWRhLCAweDIzYmQ1OGFiLCAweGE0NGQ2NzI2LAotCTB4MTI4YTJmZjksIDB4ZmI4NTc5ZjgsIDB4OWZlMTVjYmUsIDB4M2Y3OTZlOGYsIDB4NjFmMzA3YjcsIDB4ZWVjYzk5M2QsCi0JMHg2YmU2ZjVkNSwgMHg1M2QxZjI4MiwgMHhkZjQxZjgyNCwgMHhmMzA5ZmVjMywgMHhlMDNlZWNjNSwgMHg5NzJiMDMzZSwKLQkweDU5N2E2MjZmLCAweDllM2Q3YmUxLCAweGNmMGNjZGQzLCAweDNjMDVmZjRhLCAweGYwY2NkMjNmLCAweGMxNTllMGEzLAotCTB4NGFiYzdlYWYsIDB4YWVhZmFhN2QsIDB4NmUyMWZiNTYsIDB4MzJmZDE5NjgsIDB4YWQzNTg3YWMsIDB4NDE0MGQzODIsCi0JMHg0YzNiMThkNSwgMHgyZGI1ODcyMCwgMHg2N2UwNGI4ZiwgMHg3MDYyZTE5ZiwgMHhhNTkwN2FlOSwgMHg2YTlkZDczZSwKLQkweDZkZWJlNzY2LCAweDAyY2Q1N2Q5LCAweDA1NmNmOTNlLCAweDdiNjg0YmI1LCAweDBlZjM5Y2NmLCAweDE5Zjc3NzU4LAotCTB4YmRjMWVmZGMsIDB4OTE1ZGY5NDksIDB4N2QxNmZkYWMsIDB4NzljZjgxZjUsIDB4MWFhMzY0ZWQsIDB4ZjM4ZTJhNmUsCi0JMHgwOTNjYWFlNiwgMHg1N2I3MjZkYywgMHhhYTA2OTBlZCwgMHgzOWFhNjlmOCwgMHhlZjk1Y2IwZSwgMHg2Y2FlNTVjOSwKLQkweGMzZmI0ZWY4LCAweDk5OGZjODcxLCAweDY3ODdjNDA5LCAweDNlZjFkYTA2LCAweGIxNzVlZGRhLCAweDAzY2IwZjhjLAotCTB4NGY5ODRjM2IsIDB4N2Y0YWZhYzUsIDB4Nzk3YTNmNGEsIDB4OGRhYzU2OWEsIDB4ZDA1ZDk5ZmIsIDB4NTJmMDE4MzEsCi0JMHhlM2RlMGU2YywgMHg5ZGE3YzA4ZSwgMHhiYmU0MGU5YywgMHhjYTFlMTNhZSwgMHg4YmZmNTliNywgMHg5NDdiODlkNiwKLQkweDJhNDNhMjc1LCAweDZjODljNTUxLCAweGE3M2QzMzM1LCAweDQ2MDYyNzVhLCAweGQ0MTYyNzVhLCAweDFkMDIwNmJiLAotCTB4MWY0YjZjMTYsIDB4ZTBiMjQyMDgsIDB4NDhjNGMyZWQsIDB4M2VmYmM0ZWIsIDB4ODg3ODVlNzYsIDB4OWFlY2RmZGYsCi0JMHgyYjg5ZDc0NiwgMHgzNGM0ZWI1NCwgMHhiZTg5ZjIwYiwgMHhjNGFjZGY5ZCwgMHg5ZDY0NWQ2MSwgMHg1ZmY2ZTg1MCwKLQkweDg3ZGU2ZmFjLCAweDdjODIyMjc1LCAweGQ3NmIzNjZmLCAweDRiNWI1Yjg5LCAweDc1Yjg5ZDcxLCAweDU3YjlhODlhLAotCTB4YjE3Y2RlYjEsIDB4NzEyZjIyNzUsIDB4YjcyNWU2MDYsIDB4YmNmZjAyMzUsIDB4NDNlMWVkY2YsIDB4ZmEwZWJlM2MsCi0JMHgzNGUyZjU4MSwgMHhkZTg0ZmZlOCwgMHg3YTVmNDZlYiwgMHhlYWZlYjFmZCwgMHgzYzI2ZmZmNSwgMHhjMTdkN2EyYiwKLQkweDc4MWVlYzJkLCAweGM4MjQzZTZmLCAweDUwNjYwYmNmLCAweDNmMDAyZWJkLCAweGUwYmViZDMyLCAweGQzMTdlZTBlLAotCTB4ZDAxMmQ5ZTksIDB4N2FkNTYzYjMsIDB4ZjFhZmI1OTYsIDB4YjZhMTc1YjIsIDB4MzMxN2Y1MjUsIDB4MWE0ZmY5NjksCi0JMHhhZDE0NzcyNSwgMHhkZWIwOTNmZiwgMHhkZGViNTFjZCwgMHgxMzc3YTBkMywgMHg3MmRkZTgyMiwgMHg2YjNmNzdhNiwKLQkweDUzZjY4MzFkLCAweDg4ZmJmMzVmLCAweGNmYWE1YmViLCAweGY4MTFkYzMyLCAweGFiNGNmYTYzLCAweGIxY2U5ZWU2LAotCTB4ZGNjYmJmZDEsIDB4NGZiMmYyMGMsIDB4NGZiYjczYzQsIDB4NzdiMDFkYjgsIDB4ODJjNmVmZjQsIDB4MTQ0YTdhOWYsCi0JMHhhNzFjNGYxYiwgMHg1YzhmYTc2NywgMHg4MWVhOTkzYiwgMHg5ZWNjMzk4MiwgMHgyMjIwZGVhZSwgMHg5OTlhNmFmZSwKLQkweDQ0NjRkN2ZjLCAweDNmMzQ1ZGZiLCAweDI2YWZmYjI1LCAweDYzNmU1N2M4LCAweDA2NzQ2ZmU3LCAweGZhMmE3OWM1LAotCTB4NjhlYmVlNTcsIDB4ZTU3MDNmMDAsIDB4MGZjZjAxNmEsIDB4ZjAxOWNlMjEsIDB4YjNlMzhmMzksIDB4ZmI4OTVkY2MsCi0JMHg4MGZjN2QxNSwgMHhlNmFkMTdlMiwgMHhhZWI3ZTZmNSwgMHgzZWE5ZmY0NiwgMHhlMzNhYTBhZSwgMHhhZmIwZDNkYSwKLQkweDNhMzMzNjI4LCAweGZjMTY2ZjE0LCAweDFjZTE1M2FiLCAweGZkY2Y1NzViLCAweDU0MWI5ZTMwLCAweGM3ZGZiNDA3LAotCTB4MTVjZWY5ZjAsIDB4NjE5Yjk5ODMsIDB4ZTg5ZWY1NWYsIDB4OGRjZWI0OGUsIDB4ZmNhNWUzZDEsIDB4N2VjYmM0MWYsCi0JMHhmZmIxOTc4YSwgMHgxN2QyZjFlZiwgMHg4ZjdkYTgxZSwgMHgzZTNkNjRmZSwgMHhiZDcxNDVjNiwgMHg4MmM2NGQ5MiwKLQkweGYwNjI3ZTFjLCAweGRmOTE1ZWEwLCAweDY0MmUzMTExLCAweDM1YzNlM2NlLCAweGEyMGJmZWY3LCAweDY3ZGFiZTk4LAotCTB4ZGM0MDM2ZjAsIDB4ZTJjMzVjYWUsIDB4ZGFhZGU2NDcsIDB4ZTY5MTJiYjgsIDB4NjhjODA2NjcsIDB4NWJjZjQ3NzAsCi0JMHg0Mzg3NWRhOSwgMHgwYmIzN2VlYiwgMHg3NTk5ZjVkNywgMHgxMzg4MDUxYiwgMHhmZGVmY2I5YywgMHhjNzFmZmI5NCwKLQkweDU4ZWUxMmY3LCAweDVhNzlkNzQ4LCAweGQ5YjY3NjdmLCAweGZiOWZlNzBiLCAweDM3YThkZDJkLCAweDEwNWRiZTE1LAotCTB4M2E5N2VjYzUsIDB4Yzk2MzhlM2UsIDB4N2Q3MTkzZGQsIDB4Mjg5YzExNmEsIDB4NWIwYjQxOGYsIDB4ZTA5ZDI4YWYsCi0JMHgwOWI2ODcxZCwgMHg3NGUxNGU1ZiwgMHgxNjg4N2U2MSwgMHg0YTVhYzc0NiwgMHgyOWU3OTAzNywgMHg4ZWJmM2NhZCwKLQkweDJiYjc4MWQ5LCAweDc3ZTA4MGY5LCAweDc3NTdhMDA5LCAweDA4NWRlYzQ4LCAweDljMGJjNDgxLCAweDExZjVhYTA4LAotCTB4MTJmMmQ1Y2UsIDB4NzZkZTc0NTUsIDB4NWFmZmYxODQsIDB4ZmMxZjhkYzEsIDB4NDNlZmJmZjQsIDB4OWVmOTNlZTcsCi0JMHhlNWZkMzFkOSwgMHgwYjRmMDU3NywgMHg2ZmRlNzQ3NCwgMHg4MzFlMmY2OSwgMHgxYjgyMzNlNywgMHg4ZDY4YzdkZiwKLQkweGUzODU3M2M1LCAweDA3OWRlYzhkLCAweGNiZDNiNzk5LCAweDVjM2JlYzA1LCAweDhkY2FiZjJhLCAweDFmODg3MDMwLAotCTB4OWM2MGIyMmQsIDB4YzY5YmY2MWUsIDB4YmRlZDMyZWMsIDB4ZDcxMzU5NDAsIDB4NGVlMzVkZjMsIDB4ZGEzYjQ5NmEsCi0JMHgzMTc4ZTE2MywgMHg4MDI2MzdlZiwgMHhiNTE4MjQ1NywgMHhjOGRkNWM3MSwgMHhmYzAwM2ZlNywgMHgwMmRmY2RkNywKLQkweDMxMzkyNDlmLCAweGE3NmVmNDZlLCAweGVlYzlkZGYyLCAweGRiN2NmMDZmLCAweDMzNDM5YzkwLCAweDViM2Y3ZTI5LAotCTB4ZGQ3OWUyMmUsIDB4YzFkNzA2NmQsIDB4MWU2ZmEwODksIDB4Y2JjODA4OTEsIDB4MGYyNTdiNjcsIDB4YjhhYzA3NWIsCi0JMHgzYmVlOTRlZSwgMHg0YTVlZjc4NiwgMHgyOTExZWM1OSwgMHgyZmFkODg3ZCwgMHhmZTc4ZjhjNywgMHgwZjZkZDc0NCwKLQkweDYwNDg0NGY4LCAweDRkZmJjNDFjLCAweDc0MjhlZjczLCAweGVjNjRkZjgxLCAweDJlNzBhNWZlLCAweGYzODE3Mzc2LAotCTB4ZTdhMDQxZTAsIDB4OTNiZGVjYzMsIDB4NzAwYmNiYTMsIDB4NGZmNzc2OWYsIDB4YzNiNzk0MDUsIDB4ZmVkMDZlOTQsCi0JMHgwN2E5Njk5NiwgMHhlZjdlZDIwZiwgMHhlNzgwOWU1OCwgMHgwOTNkMzM1YywgMHhkN2I5YzJiNywgMHhkYmEyYmRjYywKLQkweGJlY2RlYjQ1LCAweDczODM2ZWMxLCAweDQ1MjNhOWFmLCAweGU3ZTE1NWUyLCAweDdlOGVkMjBlLCAweDNmNzU5OTlhLAotCTB4NWRjNjA1YmQsIDB4MzE0M2Q3NGUsIDB4ODVmZGQyMTUsIDB4NGFiZjIxMDMsIDB4YjJiNWY2YzAsIDB4YjI5MDM0ZDcsCi0JMHhmM2NhZmI0ZSwgMHhmZmI0YjFhNiwgMHhkMDBmNWEzMiwgMHhkNThhYmI1ZSwgMHhkYzEyNmRhYiwgMHhkNjViN2ExMCwKLQkweGNiZWEzOGZhLCAweDFmMDEyNmIyLCAweGY2YTc2ODk2LCAweGViODMxNDZmLCAweGRiNzBhMjhmLCAweDM0ZjZkMTU3LAotCTB4MDNkYTBmM2YsIDB4NWJkOGE2ZGMsIDB4OTZhYjNjZTEsIDB4ZTdkYjEzOGUsIDB4NjQ3OWUzZDYsIDB4OGI0NzZkMTksCi0JMHg0ZmQzN2I0OSwgMHg1NWZjZGUxMSwgMHg0NDdiODEwMiwgMHg4ZmE5YjllNSwgMHhiZGJjMDJlNSwgMHgwZmNhMWI5MiwKLQkweGM2MjVmOGVkLCAweGZkYTJjYzhkLCAweDY3ZjBhMjBkLCAweGU4ODUxZDhiLCAweDcwNDA3YjU3LCAweDgzMjMzYmUyLAotCTB4NWQ3ZTkwMzMsIDB4NzA2ODYxMzAsIDB4NjRmZDBkM2MsIDB4NDJlOWQ3MTgsIDB4NzFkNTE4MzQsIDB4MTYxNmM5MDgsCi0JMHhiMGI2NWNkZiwgMHhkNWU2MDFiZSwgMHgxYWE0MjcyMSwgMHg5YmNlYWY5MCwgMHg0ZTNmMWQ2MCwgMHhmNmE1ZWRmMSwKLQkweDhiMTMzMWViLCAweDhmOTM2ODZmLCAweDdhNTQzYTk5LCAweDFkMjViYzc0LCAweDk2OWNkOGY1LCAweDlmMmYzYzNjLAotCTB4YmNmMDRhNGIsIDB4ZWNjZjViZGMsIDB4MmQ0YjIzOTEsIDB4MzBlYzAxN2UsIDB4YmUxNDM5YzksIDB4ZTMzNTJkYjcsCi0JMHhkODk3Y2VmNywgMHhhNDM5ZDNmYSwgMHgyN2ExZmQwMywgMHhlZTA0NDk1NywgMHg5NTVlMmQzOSwgMHhmMWQwMGNmZSwKLQkweGY5MDkwNmU0LCAweDQyNGU3YzRkLCAweDI1ZWYzNjNkLCAweDViNmIyN2U2LCAweGJjOWVlMGM1LCAweGNmZGVjNGM3LAotCTB4OWY5YTcyODEsIDB4ZmY2NTFiZjcsIDB4NjU2M2Q1YWIsIDB4NTNkNDBhYWUsIDB4MmJkNGJkN2EsIDB4N2FhOWVmZWUsCi0JMHgyZjZjYjAxMywgMHgxNGNmNzU3ZCwgMHg3NDE1NTdkNCwgMHhlYjQ2MDFkZCwgMHgzNzA2YWZhNSwgMHhhZjUyYmZhMCwKLQkweDRkODk2YWFmLCAweDEwZDk1M2QxLCAweDNkNWE1MjM3LCAweGUwNGFkNjY0LCAweGMwNTgzYmUzLCAweGI1ZjA3Yjc2LAotCTB4NzU4NjlmY2YsIDB4ZTA0ZWNhYjcsIDB4ZjlkMThkNGIsIDB4ODJmOGMwOGMsIDB4NmNjY2JjODAsIDB4YzgzOWY4ZGQsCi0JMHgwYjRjZjk0MSwgMHgwMjczYmJiZSwgMHhiMzcyMDBlOCwgMHg1OWM1OWUyMiwgMHhkZjExNGJmOSwgMHhiY2U1MWM0YSwKLQkweDU3M2U1YTk1LCAweDc4NjdiNWNlLCAweGFmNTFlMjQ1LCAweGUyNTZlNTVmLCAweGY0M2JkNTUxLCAweGRhNTdlNTEwLAotCTB4ODIyZDlkY2YsIDB4ZmU0MDIyZGYsIDB4Yzc3YmVlYzgsIDB4ZTM4OWRlNjIsIDB4ODNlZGM4NWEsIDB4ZTdlNDc2MTUsCi0JMHg1ZjlmZjc0MywgMHhlYjNhZmMwYSwgMHhiZDgwODE0MSwgMHgwMzZmNjQ0ZSwgMHgyYjM1ODdhYywgMHg2NWY4MTcwNSwKLQkweGRhYzgzZGU3LCAweDYxZWRhM2NmLCAweGM5N2U4N2RjLCAweGI3ZjI4YWY4LCAweDY2YmZmODBiLCAweGIxYmJlM2Q1LAotCTB4MDJlMDkzN2UsIDB4OTc1Njg3ZjgsIDB4MmU1MTNkYTIsIDB4OWJjYjA0OGIsIDB4ODFmZWUwOGUsIDB4NWYxODUzYWUsCi0JMHg4OThiMjZkNCwgMHg0YjM1ZmZjMCwgMHg5NTMwNGVjYywgMHhmODUyM2UxNCwgMHgxN2JmMDhmMiwgMHg1OWRjYTI0ZCwKLQkweDlmNzZkMzM3LCAweGRlODQ5MDAwLCAweDE3NGUyOGZjLCAweGYwMjllYjQyLCAweGY4Y2NhZDQ5LCAweDkyNGJjOGVjLAotCTB4ZTJlNmQ4MWIsIDB4YzNlZWM5N2MsIDB4YWJlYmU0OWUsIDB4NTMyZGRjZjgsIDB4ZDczY2MxMDYsIDB4YjY4NjM4YjIsCi0JMHhiMDI2MDU1NSwgMHgwNWZhNGUyMywgMHhjZGVmOGYzYywgMHhiNmE2YzQ5NywgMHg3Y2JlMTRhMywgMHhmYWZhNjA0ZSwKLQkweGJkYTg3MTYyLCAweGE1ZjM4ZWY4LCAweGE5OTQ3ZmMyLCAweGI1NTk1ZjcxLCAweDBmNzAyMjU3LCAweDVlOGZjZjU3LAotCTB4YzQyYjcwMjksIDB4NGNiZTk0MGIsIDB4NWJjNzQzZTcsIDB4ZGEzZjcwZDAsIDB4NjkxZTBhZWIsIDB4NjVmMjExM2UsCi0JMHhhMWVmMTY0NiwgMHg5MWI1NDNjOCwgMHhlNzdkMDVjNSwgMHgzN2ZhZTlmMSwgMHg3OTYxZWM1YiwgMHg0YWRjNTkxMCwKLQkweGJiZmJmNjkwLCAweDljNjAyZjBkLCAweDQ3ZjViOWRjLCAweGU2ZmI0N2FlLCAweDgwMDdjYTBkLCAweDEyNzYwZGZmLAotCTB4MWY4N2ZkYzQsIDB4YjM0NTUwZjUsIDB4NDIzOGMxZTgsIDB4NjZlNzMwNjMsIDB4ODk1ZGJlZDUsIDB4YzU3Y2E4OTcsCi0JMHhkOGFlZjg4ZSwgMHhkMzE3ZjY2NCwgMHg4ZjViMTVmNiwgMHhmNWY5ZTE2NSwgMHhlNzhjNmVhMiwgMHg2ODBiZDc5MCwKLQkweDIzYjkxMzFmLCAweDU0NmZlZTBiLCAweDg2ZGM1OTE4LCAweDY0NTgyZWRlLCAweGIzYWE3ZTYxLCAweDgzYTc1OWFmLAotCTB4NjNhYzI2ZGQsIDB4MDQ1NTY5ZWYsIDB4MmFjYzkzNmUsIDB4MTZmZGVlYmYsIDB4ZTc4N2E5NDksIDB4MzNhNTMyMjksCi0JMHhmMTg2OTNkYywgMHg1MjcxZGZhOSwgMHhmZWNlMzVlMiwgMHg0NTVmZjE4NiwgMHg1Y2Y2ODQ4YiwgMHg5ZDhkYmFjNSwKLQkweDcxNTc3ZjEwLCAweGRjZmI4Y2Q4LCAweDMxZTc3NWRhLCAweDk1ZTBiODllLCAweGFlMWRmMDk3LCAweDEzNTExNmRhLAotCTB4ZWUyYmQ1N2YsIDB4ZTc4ODlkNjksIDB4ZDVjZDM1MWIsIDB4ZjM0MWJmMTgsIDB4MTM1MWNlNzgsIDB4NzdmZjFjODgsCi0JMHhjYTljZjhiMSwgMHg5NTZkYjY1NywgMHgzNzJiMGEyOSwgMHhlZjgxZGFmZiwgMHg3NWFmYjU3MiwgMHg3NTkzYmRlMCwKLQkweGQ4NzcxZWRmLCAweGYwMjljZTJiLCAweDM5YzZiN2YwLCAweDUwN2Y4MTlkLCAweDQ1YWRmYWM2LCAweGQ2NDRlNzFiLAotCTB4Yzc0NmJkMzEsIDB4OWVlOTEzOTcsIDB4N2FkZWM4NDEsIDB4MjFlN2YzZTksIDB4YTZlY2Y3MGUsIDB4ZjE4NzlmNGYsCi0JMHg2N2U3ZmQ1NiwgMHgwNjFjNDNjZiwgMHg4MjcxNmVkOSwgMHhmZWJiNTIzZCwgMHg1NDYzOGM3ZCwgMHgzMGIyZWRkYSwKLQkweDM3ZjNhZmZiLCAweGNmZjhjNmJmLCAweGRkOWEzZmNlLCAweGRiNzNhZDAwLCAweDZmNjBhMWM5LCAweDZiZmM2ZTc0LAotCTB4ZGU3NWM0MjIsIDB4ZmQxMGFkYjMsIDB4Mjk2Y2Y3MzksIDB4ZjgyMjQ4MTgsIDB4ZjgxNDk0MGIsIDB4Zjg4ZmRmZDYsCi0JMHhkYWJkM2Q1MywgMHg1ZTMwZGI5YSwgMHgzN2E1MWNlNCwgMHhkYzUwODdlOCwgMHhjNTlhYTA1YSwgMHhiYzc4YmEwMSwKLQkweDcxYzg4NmRhLCAweGQzZTJiZGJlLCAweDYxYmU2ZjlhLCAweDY2YzVlODEyLCAweDM0NWMxNzY2LCAweGE1MDBlZDRlLAotCTB4YTBmZDE1ZTMsIDB4Yjk4Nzg2ZGYsIDB4YmY0Yzg5M2UsIDB4NGEwZmYwNzMsIDB4ZmEzYTYzYTcsIDB4ZjczY2RlN2QsCi0JMHg1OTQyY2Y1NywgMHg3MTlmN2M3MywgMHhlMDdlYzE2YSwgMHgwZTIzODk0ZCwgMHgxNjlkM2M1OCwgMHhiZjRkOWI5MCwKLQkweGEwNDBiOGM1LCAweGY0MGJiMTViLCAweGMxNDNlN2YzLCAweGVhNGE3YzJmLCAweGY3NDNmZjQ2LCAweDViZGUzMzM2LAotCTB4MDg3NmQ4YWIsIDB4Y2I3M2E3ZTUsIDB4MjVkMzhjN2UsIDB4OTNiNzllM2MsIDB4ZmUyYzdlODQsIDB4NmE3YWZiOTIsCi0JMHhiZTJjZWM5YiwgMHhlMjFmZTM4ZCwgMHhmYzBlNWNkZiwgMHgxOGRjZTNjZSwgMHg2ZmYxMmIxZiwgMHgwZGJkYzU3ZCwKLQkweGVmZTM0ZThmLCAweGJjZjhiMDJhLCAweDc4MGZhNmVhLCAweDVlOTg1OTFjLCAweGU5ZDAyZTQyLCAweDEzYzZiN2M4LAotCTB4MDI3MDc4MmEsIDB4ZTNhYmM2MWUsIDB4MTdjNzIzMzgsIDB4Mzk3ZGUyODYsIDB4YTA3ZTgwYmQsIDB4OWE3MTQzYTcsCi0JMHhlMjE4M2YzNCwgMHgyMWMyZmNmNiwgMHg3NDFmNDExMiwgMHg5ZmYxNjZhZSwgMHgxZWY2OTI5ZCwgMHgyYzNlOTg2OCwKLQkweGFkMTVkM2FlLCAweGZmN2Y1MzkzLCAweDM2MmYzOWUyLCAweDlmOGFlZmZlLCAweDI2OTc2OGQ4LCAweGQzYzE1MWFlLAotCTB4ZjU5MTBiZDksIDB4ZjBiNDQxNzgsIDB4OWE5M2RkOGYsIDB4MDVlZmU4MjMsIDB4YzAyNzQ3ZTQsIDB4MTMxMWY5NzksCi0JMHg3YzVlN2JjMSwgMHgzN2RjYTRmZiwgMHhiM2I0ZmVlMiwgMHgwYjhjNDVlYiwgMHhhMWI0MDg2YywgMHg4YmViZDcxZSwKLQkweGEyNGU3ZTFhLCAweGQxMmRlZjFmLCAweGI0ZDU0ZjRjLCAweGVjZTI3NWIwLCAweDQ2ZGZiYjI2LCAweGViN2Q5Y2UxLAotCTB4OWFlN2U0MzUsIDB4MzI0YzQ3MGQsIDB4ZGQ3YmI3ODUsIDB4MmI4YjEzNjYsIDB4ZWIwM2YyNjAsIDB4ZmUzNTVmODQsCi0JMHhjOGVmMmZiMywgMHhkZmNkYmQ0MiwgMHgzM2Y3ZDIxNSwgMHhkYjUzZjc5YiwgMHhkYTlmYjkxYSwgMHhmZDM1ZTcwZCwKLQkweDkzMDFjYTU0LCAweGZlZjE3NmQzLCAweGI3M2QxOGNlLCAweGVkMzNiYzAxLCAweDEzM2E1ZWNjLCAweGRkMjI4YjEwLAotCTB4MmQxMjk5OGIsIDB4MjM3M2ZkZjEsIDB4ZjVkMzczZjMsIDB4YjI1N2RmMTIsIDB4NDQ5NGY3YjMsIDB4NWZkYTM0NDcsCi0JMHgwZjczZDhmNywgMHhkNDgwMGNjNywgMHg4YjEyNzE4NCwgMHhjNTVjNzllYiwgMHhhMDI0ZWU0MywgMHhiNWZiNjJmNywKLQkweDE0YmJjNjA0LCAweGM3ZGFhYmYwLCAweDAxMmY0ZTRiLCAweDJhNGE0ZGJiLCAweDY3M2VhYjE5LCAweDFhNmZjNjUxLAotCTB4MTU3ZTIwNjAsIDB4MTdiMWVmZmQsIDB4MjdmZDg0MGQsIDB4NjE4M2NhMzEsIDB4N2RhN2Q3MWMsIDB4YWZmNTg0NjksCi0JMHhmN2ZjYzdkZCwgMHgwY2IxYzJlNCwgMHg3NDZlZGVmOCwgMHg3MGE3OGFlZSwgMHg2ZTBiMjdkYiwgMHhlNmY2YmQ3MCwKLQkweGU0M2YwNjdiLCAweGRmNjhmMDRmLCAweDdhNTg4NDg1LCAweGRiOGY1Zjk4LCAweGRkYTBmNjgwLCAweDJhZDI3NDEwLAotCTB4NGY2OTZlYzQsIDB4OGJhYzBkYzIsIDB4MTg4OThjYjgsIDB4ZTg3MThmMDIsIDB4YTZhMmY4OGYsIDB4MDczYWJkYzEsCi0JMHhkNDI5ZTZhMSwgMHhlZjM1MWI3MywgMHgxYWU0YzQyNCwgMHg5MDI2ZWY3NSwgMHhiZDc0MTkwMywgMHg1NTdlNzFiMSwKLQkweGY2NzY3MmZjLCAweDAzYjcwYTZmLCAweGNkODg2M2RmLCAweGJlYzBmNTI0LCAweGI0NWVlYzJiLCAweGVmZTQ5ZTFiLAotCTB4NDhkZmQwNTgsIDB4MjM4ODY3ODgsIDB4M2JmNTZlZDEsIDB4Y2Q1ZmI0MmUsIDB4NWZiNDEwZmIsIDB4YTNkNjNlNGQsCi0JMHgxOTE3YzdjZCwgMHg1ZjVhNDc4ZiwgMHhhNjM4ZjllMiwgMHg0M2M0MzY4OCwgMHhkOTQxYTE2YywgMHg0ZjBmMTVhZiwKLQkweDM2M2I4ZjBjLCAweDUwODNiODgxLCAweGUzMGQ5ZDdlLCAweGM5NzhhOWMwLCAweDZjZDg3OWVhLCAweGYxZDM3MWRhLAotCTB4NGM0NGY0NjksIDB4NjA2Yzg3NjYsIDB4Nzc3Y2Q0ZTMsIDB4ZjM4MDk3MTIsIDB4ZDNiZjY4ZjcsIDB4ZGJmMjZhZjEsCi0JMHhhYTNjNzlhMywgMHhkZjQxMTg5MSwgMHgwOWRhYTJkOSwgMHgwNjhmN2ZjNywgMHg3YjhjNGJkZiwgMHg3ZDAyMjQ4NywKLQkweGNiNTdkZjA4LCAweGM0MTFlZTA0LCAweGZlZDA3OWYwLCAweGUwOWRmNTM1LCAweDZiZmQ2MDFkLCAweDRlYzE5MGUxLAotCTB4MmJiZjdkZjUsIDB4Y2NiN2ZhZjgsIDB4ZTgxZWYyNWEsIDB4NzU2MTljOWIsIDB4MzEzYmM4MTgsIDB4YmRlMjY0ODksCi0JMHhhODAxZDZkNSwgMHhlNjE2ZDI5ZiwgMHgyZjM0NjM5MywgMHhjYWJlMzIzNCwgMHg2ZTUwNDE1OCwgMHg5YzU5YmEzMiwKLQkweDhkMTI1OTBhLCAweDhhMzlhOGY2LCAweGI4NmM5NmM4LCAweDI5NjQ0NGM3LCAweGYzZjE3YTFiLCAweDIyZDcyNWYzLAotCTB4NWM2NTA1MDMsIDB4YjY4ZDc5NGUsIDB4MzdjZWVkNmIsIDB4MDg0NGE1Y2MsIDB4YmY4NTExNDAsIDB4MzFmM2RhMzcsCi0JMHhhMzcwZGZmNCwgMHgxYTMwYzkzNywgMHg3NGI3ZGUzZSwgMHhkYTk0NjBlNywgMHg2ODIzYzE0YiwgMHhiNWRkZWUxMCwKLQkweGU5MGIwODY3LCAweDA4OWFmNzgxLCAweGYwMTc3N2I5LCAweDRmMjg2Mzc4LCAweGJhY2Y3MDgyLCAweGY3OTQzYTMxLAotCTB4ZGY3ZDUxNDQsIDB4NjdmMmM2OTgsIDB4YmE1ZGVmYTMsIDB4M2ZiYmMyOWMsIDB4MzQ2Y2U0YTYsIDB4NzljYTI3OGMsCi0JMHgwNTc3OWUxOSwgMHgxN2ZlNzBlMywgMHg3MTk0NWY1YiwgMHg5OGVhNmM4ZSwgMHhmOTk2M2QxMiwgMHhjZjFkZTE0ZCwKLQkweDNkZDBmNmUxLCAweGQ3ODc1YzZhLCAweDEwN2M5NGRhLCAweGNkMjUxMWY3LCAweDU1YWY1MWZiLCAweGI5NjNmNjA3LAotCTB4MWQzNGYyMDEsIDB4MjUzMWRmMTYsIDB4ZWIxMDk2MjUsIDB4OTMwYjRiYTMsIDB4ZmQ3ODg1MmUsIDB4OWQwMzI0ZDIsCi0JMHg5NzQ3ODBlNywgMHg2MGZiODJlZSwgMHhhMjNjM2M2MSwgMHhiMGQxODNjMSwgMHg0OTllZDc3YywgMHhkZjJjM2M2YSwKLQkweDdmNDg3NjA1LCAweGJhYzAzMGYxLCAweDg5ZjJlOTdjLCAweGU1Mzc5ZmZkLCAweGM0MmI3ODhiLCAweGYwMTllNDNiLAotCTB4ODdmMWE1ZGQsIDB4YTE1ZmU4NmQsIDB4NDdhZTBiM2YsIDB4M2VlYWNlMWMsIDB4ZmIyYWJmZWUsIDB4YzUyNzBhMTEsCi0JMHg1ZmNjMmUzYSwgMHhhZjg1M2I0YSwgMHg3NDliZTJmYSwgMHhiZDhjYmNlMiwgMHg5ZmU1YTdhZiwgMHgwMzI3YWI2MiwKLQkweDdhYjcwZGUwLCAweGUxYzZkOWY2LCAweGY2M2VmMWZjLCAweDNkZDdhZjU0LCAweGFmOTg0Yzc5LCAweDA2M2JjZDg5LAotCTB4YjMyZWY3ZWUsIDB4YWFjYTM1ZGUsIDB4Y2Q0ZWNiZjIsIDB4ZDFhNjIwNWIsIDB4MmM4MTY2ZjEsIDB4OTNlNzg0MjQsCi0JMHg4Y2I2NTBiMCwgMHhmMDRjZjNhMCwgMHg3YWNlMzAxOCwgMHgwNjNiZDU5OSwgMHhlZjRjNzFmYSwgMHg4NDk1ZDIwZSwKLQkweDMxZGUwMDlhLCAweDBiOTYxODgyLCAweDZkODZiZmE1LCAweDUwZGViZjZjLCAweDYyMmZmMDZhLCAweGMwMDJiZGU3LAotCTB4ODc0N2YzMGIsIDB4MTliYTNmOGUsIDB4NDExY2I0N2YsIDB4M2Q2OWE4ZmUsIDB4YTVhM2Y4YzIsIDB4MGJmODFmM2UsCi0JMHg5ZjYwY2RjZSwgMHg0N2JhNDhkZiwgMHg3OWFmZGQwMywgMHg0OGQwYTliNCwgMHhiNTk4N2ZmOSwgMHhmMjg1MjFiYiwKLQkweDE0ZDY0NDg1LCAweDc4OGE1ZjE2LCAweGFmOGMzMWZkLCAweGY4Zjg3ZDE3LCAweDQ1ZjU3OTk0LCAweDY5M2RjNmRmLAotCTB4N2VjMjY2OGYsIDB4Y2YwMWFmNzIsIDB4ODViYzE0YmIsIDB4OGIyYjA3ZWMsIDB4Zjc2NDFjMjMsIDB4NmE3ZTgzNGUsCi0JMHhjMzc2M2I3MywgMHhmOWVkMzdmNCwgMHg3MGRiOGMwZiwgMHgwNzY5YmRlYywgMHhhMzRjNzdiNCwgMHhmYjg1NzIxNCwKLQkweDA4YmJkYzZkLCAweGE0NmRjYmRmLCAweDMxOTAwMGYzLCAweDc1ODY1YmE0LCAweDMwN2M2ZmJkLCAweDAzZTEwOWY5LAotCTB4YzA0YzllZWMsIDB4OTc5NDExYzcsIDB4MTA5ZWZjZjUsIDB4ZmZiYzNiOTUsIDB4ZGVjYWNjM2EsIDB4NjU2Nzk4NjUsCi0JMHhhYzA3ZTdmYiwgMHgxZDk5NGYyMiwgMHhjN2I3YjA5NiwgMHhkYWFkZmIwNCwgMHg5ZmFjMDYyNSwgMHg3YWE2NjkwMCwKLQkweGRlYjA0YmZlLCAweDI2YTM1NjAzLCAweGE3YTE0ZTVlLCAweDkzNTQ0ZmMyLCAweDg3N2RlMTVhLCAweDNkZWY1ODhjLAotCTB4YjM4OWZlNWEsIDB4MjllMGE5YTYsIDB4MTFmMzFlZWQsIDB4NGEwYzljZjcsIDB4ZGQ3NzlkODcsIDB4ZTUyYWViMGQsCi0JMHhlZDM1MWI5ZiwgMHhjMDE2NDk0NiwgMHhmODFmNTI5YiwgMHg2ODdkMTIzMywgMHhhZThjNDViYiwgMHgxN2IwNTY3MSwKLQkweDIwNWNlZTM2LCAweDdmNDJmOWMyLCAweGVmMDM5YWU5LCAweDM5ZmFkMWM3LCAweDg5Yjc1MjU2LCAweGExODljZmI2LAotCTB4NzllM2U0MjksIDB4YTdjZjIwN2UsIDB4NDNmZDM0YjAsIDB4ZGZhMDQxYjcsIDB4ZWJiZjczNTcsIDB4MTcxZTU2YjMsCi0JMHgwNjVlNzQ2MCwgMHhjYjNjNTNlZiwgMHgyOTMxM2FmMSwgMHg0NTA1ZDcxYSwgMHg4MDY2YzE2ZSwgMHgzZjIzNmI3MywKLQkweDRlZWI0ZWJmLCAweDE0ZGQwMDMzLCAweDFiNzYzNjM5LCAweDY4YmE3NjgyLCAweDA2NWQxOWE1LCAweGM3Nzg2Mzg4LAotCTB4ZWM2ZGU3NDcsIDB4N2I1Y2VmNWIsIDB4YTdiZmJiMjksIDB4YTczMmZlZmYsIDB4YWZiNmY3ZjMsIDB4YWY3NWVhYmYsCi0JMHg0YmEwNjVmNywgMHg2M2M3NTQ3NSwgMHhjZDdjZDEzNywgMHhmOWUxOWZhNSwgMHhjZDZiMjJlMCwgMHgzYjczZWE1NSwKLQkweGZmMWZhYTdkLCAweDNhNGUxNzNiLCAweGZjZWMzZWMwLCAweGM5MTQ1Y2NhLCAweDMyYjBlZWNlLCAweDZmOGY3N2ZiLAotCTB4ZWM1M2I2M2EsIDB4ZTgxNTI0MmUsIDB4NDEzZGY1NjQsIDB4NTc2OGE2MzMsIDB4MWU1NTA4ZmQsIDB4YzYzNjUxZDAsCi0JMHg2NTZhZmFjMSwgMHg3NWFiYTRmZSwgMHgxNDdmMDNmNywgMHg0MmJkN2U2NCwgMHhmNDEyMzhkMiwgMHg1ZmQ1OGU2NCwKLQkweGU1YzM4YjhjLCAweDQ4MTcxOGU5LCAweDUxZjY2MmJlLCAweGNlMGZmZDE0LCAweDc5ZjkwYTk3LCAweDczYjBlNzk4LAotCTB4Mzk3ZjJjMjcsIDB4ZTM5MzhkMzEsIDB4MmE0YzdlYTAsIDB4ZGEyM2NmYzIsIDB4ZTI3MmI5ZjcsIDB4NWRlODIzNjUsCi0JMHhmMDhhOWU5MiwgMHhlNTc0YTIwYSwgMHhkMWRhMDkwMywgMHgzMGNiOTJlNCwgMHhhODkwYWI5ZSwgMHhiZTNhMzFlYywKLQkweDZmYzY3NDljLCAweGJhOTY0NzUzLCAweDlmZWZmMzI3LCAweDZjZmFmMzAxLCAweGQ2MTMxOWM0LCAweDY2YjhkN2YzLAotCTB4ZWM2YjI3YjgsIDB4ZTgzNzQ2OTQsIDB4NWRmZmRmZWQsIDB4M2M1MjMzYmMsIDB4ZTMxYjc4YzUsIDB4MTJiZTNkYzcsCi0JMHhlYjMzOWMzNywgMHgxMmVmOWFmMSwgMHhiZDVkZDg5NiwgMHg5ZmM3YWJmMSwgMHgzZTBhZGYxZSwgMHhmYmNiNzhmNSwKLQkweGNlMzkzZGQwLCAweDdhM2YxYmQ1LCAweDUwNzQyODdjLCAweGM3YzdhY2YwLCAweDhhNmZmMDNiLCAweGNkMzI3N2FmLAotCTB4M2JkYWNlZjgsIDB4NzdkZjg2NDYsIDB4ZGVjOGI5YTgsIDB4ZmRhMGY0NmQsIDB4NDNjN2M4NWEsIDB4NGZiNDU3ZWQsCi0JMHg2ZWVjMTIwYiwgMHhlMjllMWVjNiwgMHg3OGYwYzRjMiwgMHhlM2Q1NzhmNSwgMHhlM2JmODczMSwgMHg3YzQ0NjI0MiwKLQkweGUwMzc3NDQ3LCAweDAxNjFmMjhiLCAweDdlZDA0YzFjLCAweDcwOTliNjBiLCAweDU3ODI0OGZmLCAweDA2ZmM3NTEzLAotCTB4NDdiZTA2MWQsIDB4MTc5NzM1NzcsIDB4ZDYzOTJmMDUsIDB4MDBiMTlkYmEsIDB4ZTc4YTljY2YsIDB4YTU3ZjU3ZDcsCi0JMHg1YjBiNjdiNSwgMHg3ZjA2OWNhNywgMHg3NzhjNGU0MCwgMHg4OTQxZjgwOSwgMHg1ZjM4NGE5OCwgMHgxNWYyZDUxZCwKLQkweGQ1MzU5NzFmLCAweGE4ZWFmOWNmLCAweDkxOThhZjhlLCAweDBiY2FjZjEzLCAweDc0ZjJiYTlkLCAweDg1NTA3ZTgyLAotCTB4NTZmM2Y0ZWYsIDB4ZjgxNWViZjgsIDB4OWUzN2ExMzAsIDB4YjJjYWZlMTQsIDB4OTkzYmZiNzEsIDB4Mzg3YjA2MGMsCi0JMHgzMWIxYjVlYiwgMHg2YjQ5OWZhMCwgMHhjM2JmNDQ1YywgMHgyMTI1YzNmOCwgMHg5MTRmOWMzOCwgMHgwZGUyMDUwZiwKLQkweGZmYTY3NzdkLCAweDlkYWE3YTAzLCAweDNmMmE4MmFlLCAweDViZDEwY2MwLCAweGE3YTA4YjYwLCAweGM0OTkzZTE0LAotCTB4Yzg4OTM1ZTksIDB4MzQ3ZmMwM2IsIDB4MTJmZjE4ODksIDB4NTU1M2Y3YjIsIDB4OTllNjU3ZjMsIDB4OWU2MDUyNDIsCi0JMHg0YzVkNThhZiwgMHg4Njc5ZjNiZiwgMHg0N2NkNGRlNiwgMHhkZTQ0ZmJhMCwgMHgxYjI4YzRmZiwgMHhkZDIwYjdkZSwKLQkweGZjMjFiM2M2LCAweDMyYmJlMWE3LCAweDNjMmUyOWIyLCAweDI3ZDc4OTBlLCAweGIzMDhlYjQzLCAweDdiZTI2NmQ3LAotCTB4ZTQyZjE0YjYsIDB4MWM3ODZiMWIsIDB4YzQ2MDliNWUsIDB4MzhmODU2NzcsIDB4OTI4YmFkY2UsIDB4NzllZDRlMjEsCi0JMHhlYzA3M2JkMSwgMHhkZWMyYjNiOCwgMHgzMTlmOWMyYywgMHgzN2Q2MDIzOCwgMHgyZDY3Zjk3ZCwgMHg5Y2EwNmIzYiwKLQkweDdhYzMyYmQ2LCAweDIyOTVmYzdjLCAweDZmNzQyZmYzLCAweGE0ZDdmYjMzLCAweDUyODc2ZGY2LCAweDQwNzVjNjcxLAotCTB4NzA4OTlmOTEsIDB4OTAwYWYxNWYsIDB4OGMwYTYwYjcsIDB4Y2E1ODZhZmIsIDB4N2NmZGJhNjgsIDB4ZjJmYmVlMzksCi0JMHhkMDhkYjI1YSwgMHgyOTllYWVjZiwgMHg0ZjlmOTcxOCwgMHg1ZmIwNDYzYywgMHhlN2FmN2NmNSwgMHhlYjNmM2Q2ZiwKLQkweDhmZWMzN2Y5LCAweGZiMGExZWU4LCAweDJmY2FlZjkwLCAweGUyMTY5ZDhhLCAweDZmOTRjMzliLCAweGMyOWJlYjU0LAotCTB4MWU3Zjk0MmYsIDB4OGQ3NWJjMDUsIDB4MzAxOWU0ZmQsIDB4ZmQ4ZGY3YWIsIDB4MzdkNjExMmMsIDB4ZGIwZjBlYzUsCi0JMHhhMGM3OWUxYiwgMHhiOGY2NWY1ZSwgMHhiYmZmODc2MiwgMHhmMDM0ZmJjZCwgMHhjZjc0OTFhMywgMHgyMzY5ZjY4MiwKLQkweGVmYjgwNjVkLCAweGYzY2RiNmZlLCAweGVjNTc3YzBjLCAweDJiZWQ4YjkzLCAweGUxYmE0ZWM4LCAweDhiMzM3Y2E1LAotCTB4MjA2MDIxZDMsIDB4YmNhYmRlZjgsIDB4NzUzZDQwNDAsIDB4YTA5NmU5MDcsIDB4MjRlYTNiYmYsIDB4OTY3NWZlY2QsCi0JMHgwN2UzZmJhNSwgMHhmZWIwM2NlMCwgMHhmMjA3OGMxMiwgMHg4ODlhOTQ0MiwgMHg3MTVjNTllZCwgMHgzMWVmYmYwMywKLQkweGUwMDQ3YmIyLCAweGRhODVjZWY1LCAweDY0ZDhmOGY2LCAweGNkNWRmODRlLCAweGFmYjYwNThmLCAweDQ4ZTk2NTlmLAotCTB4YTViNDdiODAsIDB4YmViZWI2YjIsIDB4N2ExZTY1N2YsIDB4YjU3NmZhYjgsIDB4NzgyMTlkZmMsIDB4YjJhZGQ4YjcsCi0JMHgzMWI1NWUwYiwgMHhkZTM0MjYzYiwgMHgwM2JiZjg3NywgMHhmMDA2ZGYxNCwgMHhlYTVlYjRkNywgMHhmZjAyMjQ3ZiwKLQkweDJhMzdhOTJhLCAweGFmMThkMzJlLCAweDk5YjYyZmIyLCAweGZmN2E0N2E3LCAweGMxNDdlOTQzLCAweGFlZDI0Y2Y3LAotCTB4OTE2ZmYzZTAsIDB4ZTg5YTJmZGUsIDB4YzM3ZGZiNjUsIDB4NzljZDQxNTMsIDB4NzQ2NjkyYmIsIDB4MmViYjQ2NGYsCi0JMHgxZGEwMjAyMywgMHgzM2M4MTU1ZCwgMHhmM2Q4ZDZjYywgMHhjYmRiYmY2YywgMHgyOTc3ODc5ZSwgMHgwZWYzN2VhMCwKLQkweGVhMDdjZjY2LCAweGQ1NTA1ZjcxLCAweGFiMzdmNmNjLCAweDk5Mzk4Y2UxLCAweGVkMTMyNDBmLCAweDE1YmVkMGZjLAotCTB4ZTFhYWEwZTIsIDB4MWU1NjNmOWQsIDB4ZTllNmFiODQsIDB4ZDdmZWFjOGQsIDB4ODdhNjg1YjYsIDB4ZTlkZjYwMzMsCi0JMHgzNGRjOTI0ZCwgMHg4NmExZTJiZiwgMHg2YTNmYmEyOCwgMHg0MjE2MjU0OCwgMHg1ZDdmNDdmNywgMHgxNTk0ZDBmMSwKLQkweGUyY2E1NGI5LCAweGM1ODkwMjNjLCAweDQyNmQ4MzdjLCAweDVmYzlmN2ZmLCAweDAxYjA3OGFmLCAweDdmNzRjOWY2LAotCTB4ZWQ1MzYzZDUsIDB4OGY5MmZiNWIsIDB4ZTIxNzM2ZTMsIDB4ZWFmZGFmYjEsIDB4NWYyNTMxZmQsIDB4MDc3ZTU0ZGIsCi0JMHhhMjdiZmQzZCwgMHg3ZmMwMzE1YywgMHhmNDdkZjMwZiwgMHhjMmVmMGJiNSwgMHg5MmU1ODFmZCwgMHhkZTIxNDMwYiwKLQkweGJiYTcyMjZiLCAweGE5ZmRjZWQ5LCAweDNhY2Y3NjU2LCAweGVkOWFmNDVmLCAweDVkNmZkZjIwLCAweGUyN2UwMTE4LAotCTB4YzMxZTQ2NzcsIDB4N2YyYjU5N2QsIDB4YWZhZjcxNmYsIDB4ODUyM2VkMWMsIDB4NjY3NjcxOGUsIDB4Njk3YjVmZDcsCi0JMHgxNWY2MDM5YiwgMHgwM2ZiOGRkNywgMHg2NzNmMGZkZSwgMHg5ZDk5ZWY2NCwgMHhlYzY5MzVjZCwgMHg4NTZjODdkOCwKLQkweDQ5NWYwMDcxLCAweGQwNDRkYTI5LCAweGVlYzcxM2NiLCAweDdjZWIwYzNjLCAweDU4NDNlYjVmLCAweGQwMDQ3YmZmLAotCTB4ZmVjMmU0ZmYsIDB4NjlkZjNjNDQsIDB4YmYwMGU1ZGUsIDB4ZGY3ZTU5Y2QsIDB4NWI3MzVjZmMsIDB4YWQzNDVkZTIsCi0JMHgwNzA3ZjhkZSwgMHhmOWQyYTdlYywgMHhkYjE5Y2VmYywgMHhhYTliN2RmMSwgMHhjYmJlMjIyZCwgMHhiYzRkZmI0MCwKLQkweGNkYzdmYzFkLCAweDYxMWU3M2IzLCAweGQ3YTk0NGRkLCAweGQ1ZGZjMjNmLCAweDQ5YmZlYzUwLCAweGFmOWZiMjUxLAotCTB4MTJkZjhhODcsIDB4YmFiOGUxZGYsIDB4MWM1OGY0NTksIDB4NzNjMGVkYmQsIDB4MmM5ZWQyN2IsIDB4YzkxMDdhMDYsCi0JMHgxYTNlMWMzZCwgMHgwYmI0NGVjOSwgMHhmZDBkZjlmOSwgMHg3ZWY3ODRlZCwgMHg5YmNjZjNiNywgMHg3Y2RkOWZjZCwKLQkweDczOTEzMjE1LCAweGQ4MDJlNWM5LCAweGNjMDFkZTQ3LCAweGIwZjRjNzM5LCAweGZkNWRiZjYyLCAweGE5M2ZkNjk1LAotCTB4NWJmMzFmYjcsIDB4MjE0OTJmNDcsIDB4ZGVmNjBmODgsIDB4MWZjOWI3N2IsIDB4ZWMyZWNlYzksIDB4OWVkMTEyOWUsCi0JMHhjNDcxZTQyNCwgMHhmNDk2ZjY1NywgMHg0Y2ZlZjBhOSwgMHgyNzA2ZGJmNiwgMHhjZWM4M2JmNCwgMHhmOWI2YjFmOCwKLQkweGE1MWY3YzMzLCAweDg1NmYwNDg2LCAweGQxNjY5YWYyLCAweGE2ZGYyNDE5LCAweDFlZmM5NzlmLCAweDU3NTQ1ZWZlLAotCTB4YmUwMmU0YWIsIDB4MTVkZDZhZWQsIDB4MTZmOTA1OTUsIDB4YjU1ZGZkMTEsIDB4MGU1ZTI2ZmIsIDB4MmFkOWQ2N2MsCi0JMHhiNTIxM2JlMSwgMHg4MDcxM2VkYiwgMHhmN2Q2NTAxZSwgMHg3ZWY2NTZjZSwgMHgzMWViNTc0OCwgMHhlZGMwYWVmYywKLQkweDFjYmY4OTZjLCAweDA2OGQ5ZGQ2LCAweGI5ZGNiZmI2LCAweGQwNTY2ZmZiLCAweGU4NWU2ZjBiLCAweGFkN2RjNzg5LAotCTB4YjZmNzNlYjIsIDB4MDUyZjExN2YsIDB4YmZlNDMxNzYsIDB4NDRiZmRiNTUsIDB4ZTIwMDc4OWMsIDB4MjQ2MzBhOWYsCi0JMHgzYjYxMGEyMiwgMHhmY2ZhZDdiNSwgMHgyNzYyNTkyMSwgMHg3Y2U5ZDdiZCwgMHgwOGM1Zjc1OCwgMHgzN2M3MzVlYiwKLQkweGZjMDhjZmVkLCAweGVmYmY1ZmFlLCAweDZhN2I3M2I1LCAweGY3ODZjOTA4LCAweGM0MmU1YWY1LCAweGNkYmRlMjU3LAotCTB4MTE3M2FiNTYsIDB4NWQ5ODVmZmEsIDB4Y2NmM2I1ZDIsIDB4ZmJlMTUzMTMsIDB4ZGJkZDkxNWUsIDB4ZGYyMjIwYmYsCi0JMHg3MmJkYjViZiwgMHg4ZDRkODc1OCwgMHhkN2E0MDZmNywgMHg3N2NlODMxNywgMHg3ZmViNDFiZSwgMHhmOTlhMmJiMSwKLQkweGNiZWU4ZGEzLCAweGMyMDZmN2Q1LCAweDVmMWNmZGY1LCAweGFlNzY2NGMxLCAweGJiYzMyNzI1LCAweGVlZGJkZjM4LAotCTB4MmVmNWVlZWMsIDB4YjQ3NjEzZDUsIDB4ODBhN2JiM2IsIDB4ZWFiMTFkZmEsIDB4YzVmNDA5ODgsIDB4NTNjOTdiMjAsCi0JMHhhYzA0MGY0YywgMHhlNDk5MTc4MCwgMHg2ZmRhMTBhNywgMHgwN2M5MzQ3OSwgMHgyN2FlZWFmZSwgMHhkYmEzODg0ZSwKLQkweDAwNjBjN2IyLCAweDliNWQ4Y2JhLCAweGViMmVmMThhLCAweGZjZGZiOWY5LCAweDU1MjlhMzQwLCAweGYzZTY1ZmE1LAotCTB4OTI1M2EzNzMsIDB4ZjU0ZTM0M2MsIDB4ZjRjMWQ5M2QsIDB4MTU1ZGE5YzAsIDB4ZjkzZDQyYmYsIDB4MWUxOTMzNDcsCi0JMHgxYmZjNWQ2MSwgMHg0ZDliNjdkNywgMHg1MDBkZDRmMiwgMHhmNzAxYThlZiwgMHhiZjc3M2IxYiwgMHg2OWRlMWJiZSwKLQkweDM1ZDg3ZjliLCAweDAzOTlkNjFhLCAweDVlYjQwZjIwLCAweDBkZjVkZWNiLCAweGYyZGIyZjEwLCAweDZhZWY0MTIxLAotCTB4NjhhOTUzNGUsIDB4NDFiZWZkYTAsIDB4NzYwZmNjNWMsIDB4ZTBmYjgwYzAsIDB4Nzg5MGZmOTAsIDB4ZmI5ZTYxZTIsCi0JMHhmOWJmNmNlZCwgMHhlNjgzMWVjNiwgMHhmZTBkZTk5YywgMHg3NjViZTgzZSwgMHgzM2I3YzE4OSwgMHgzZGE2ZDQzZiwKLQkweGI3YTBmMWY5LCAweDZmYmRkOTA3LCAweDhmNmIxZTAwLCAweDVjMzgzNDc3LCAweDYyOTliZjYxLCAweGIwMzg0ZDI3LAotCTB4ZmEyOGVhNjksIDB4MGQ2NzA5Y2YsIDB4ZWJiNzIwNGUsIDB4ZTYxMTFhYzAsIDB4NDg0NTNhZWIsIDB4ZDk3YTQwYWMsCi0JMHgyZWRlMTQ0ZCwgMHhjZTM3YmMzNSwgMHgxYzc0NzgzMiwgMHgyYTljODE2ZiwgMHhlZjJiYTdmOCwgMHhmZjM0OTlhMywKLQkweDBlMzFiYjQ2LCAweGZjMTRhNGUyLCAweGZhNTBmMzJiLCAweDY3ODgwNTc3LCAweGM5NDUwZGI1LCAweGZjNWJlOWIzLAotCTB4ZTY5YzRhYjcsIDB4ZGU1MTI3MTgsIDB4OWNiZTQ3MjcsIDB4Y2ZiY2Y3NmEsIDB4M2I0NjQxZjgsIDB4NjhhZWQ0ZjYsCi0JMHhmMzM2NDdiNCwgMHg5NTI0OGM3NSwgMHgyOWZjMDMwZSwgMHhhNzgyZmE3NCwgMHhlYWZhNzhjYSwgMHgwNzVmM2NmZiwKLQkweGYyYmJmNDk0LCAweDI1Yzk3YWY1LCAweDc3ZjBkZjIzLCAweDMwNzI1Y2ZhLCAweGIxZTIxZDJhLCAweGVmZjFkMjVhLAotCTB4NTVlMmE4YTEsIDB4YTkzZTAzY2YsIDB4ODdmOGQ2MDIsIDB4MDYwYzNhNWEsIDB4YjM1NTRmYjgsIDB4NjdjNTg4NGQsCi0JMHhkNzY5ZmE0MiwgMHgxOGNjZjg4NiwgMHgzOTZiZmU0MCwgMHgyYjhlNTA0YywgMHhmOTk0ZmRkNiwgMHhlMWJlYThlZiwKLQkweDc5ZTE1N2VmLCAweDNmMGZjODM0LCAweGQwMjQxZTk3LCAweGVhZWI0Mjc0LCAweGRmODgyOWM1LCAweDJhZTQwM2EwLAotCTB4MzcyYTI3OGMsIDB4OWEzNWQ2OTAsIDB4ZGZlNzVmODAsIDB4ZmM3OWQyYzMsIDB4NGFmZTc3N2MsIDB4ZDk2N2NhMmYsCi0JMHg2N2E3MTYyYSwgMHgzOGUyYTQ3NSwgMHgyNTdlNzFjZSwgMHg4ODY0ZTg4NiwgMHgxYmIwNjhlMywgMHg0ZmM5ZjEzNCwKLQkweGRkM2RiZTcwLCAweGY0MWI2NGZjLCAweGQ2MmJmOTRiLCAweDZjYWZjYjQxLCAweDE4MTlmYzc5LCAweGE3YWZjMmFlLAotCTB4NTM4NDI0OWIsIDB4ZmYzZGFkMWUsIDB4NzgzMDc0NGUsIDB4N2UzMDBlNWIsIDB4ZTUyNGQwOWYsIDB4MTM0OWZiYzMsCi0JMHg3ZjA0ZTI2NCwgMHg2YjRkMWJmMCwgMHg2ZmRmZDA0NSwgMHgzMmE3M2YwMCwgMHhmZDc1ODczOSwgMHhhYzQ3YWVkNCwKLQkweGVlZjU4MzNmLCAweGRmODA4MTg4LCAweDk0ODliMzc5LCAweGM1Yzk1NDZmLCAweDZhYWZkNWNlLCAweDVkNjJiN2U0LAotCTB4NmZmNDU0ZmQsIDB4YTAwOWM0NzcsIDB4NTViOTE1ZTcsIDB4ZTRkOWJlZjAsIDB4ZmZlNTA2YmUsIDB4NGZmYzlkN2EsCi0JMHg0MThiZWQ2NiwgMHgyN2JkNjg1OCwgMHg1OTNmZmNiOSwgMHg3ZTlmZTU0NCwgMHgxNThhNmQ4YSwgMHg1MzY2Y2UwMCwKLQkweDI2YjRmN2U0LCAweGZmMWZiZTM5LCAweGYxZWFmNDg1LCAweDkyNzU3YTVlLCAweDFkZTdlZDgzLCAweDlhZmZiNGU5LAotCTB4M2Y3MDdhZWIsIDB4ZTcxZjFhMWYsIDB4MmIyNzI3OWIsIDB4MDAyYTkzN2MsIDB4MDUyOTFiZmUsIDB4MTQ1ZjAwMzMsCi0JMHg2OGNmYzBhZiwgMHhjZGJlODJiNywgMHg4Mjc3YzM0YiwgMHgyMmUzZjM3YSwgMHgyMzRkZGNlNSwgMHhhNmJkNjFiNywKLQkweDA2ZjdhZmM4LCAweGU0Y2U0ZjE4LCAweDVmNjBjNWJhLCAweGM4Y2IxN2M3LCAweGVmMDVhN2E3LCAweGFlYmEzOGIwLAotCTB4OGU3OTA2OWQsIDB4Mzk0NjE3YTAsIDB4NDJmOTFlOTgsIDB4MTFkZTZhZjIsIDB4OTIwZTNkZWYsIDB4NGU1ZDdjMGMsCi0JMHgyZjMwNmE3NywgMHgwMjcwNGFiMiwgMHhkNzcyOTQ3ZCwgMHhlMDlmYmUyYSwgMHg0YWVmOTRmMCwgMHhmZGUzN2JmZSwKLQkweGJkZmNiZDJmLCAweGI4NzE4ZTU1LCAweDY0MjA5OTllLCAweGFkOWY4NDczLCAweDQ3Yzg0NDY3LCAweDZiODYyMGI5LAotCTB4ZTZkZTQxOTMsIDB4MjdlYzc1ZDMsIDB4YjRlYzc1YWEsIDB4YWFmYzg4ZDQsIDB4Y2UzZWUxZTAsIDB4YjJjNDVmZWYsCi0JMHhmY2U3MGY3OSwgMHgzZjZjMGQzMSwgMHgxNzNmMzdjNCwgMHg4MTQ2OGMxMywgMHgzMDI4YjVjOSwgMHhmZTAxMTc3OSwKLQkweDVlNTc1ZGU5LCAweDVkN2Y3YzgzLCAweGRjYWZiZTY0LCAweDMzZjkxYWIwLCAweGY3ODljOGI2LCAweGJhMzQ5ZTQxLAotCTB4OTE5OWIxMmQsIDB4ZDMxZmIxZjQsIDB4ODE3ZjZiOWQsIDB4NjNlMDJiZmIsIDB4ZTRiZWZiOTAsIDB4ODBlNDFjYTAsCi0JMHgzZjdmZTA0NCwgMHhmZDE1N2ZlNSwgMHg3Y2EwM2UxNCwgMHhhNTQzODRmMSwgMHhhMTdjZjQyNywgMHg3ODI5ZGY5YywKLQkweGZmM2JhY2Q5LCAweGY1YzFjOGZiLCAweDdkNWQ0ZjNjLCAweGYzMjhhMWM0LCAweDNlNzRkZWY5LCAweGJmY2U4YmRiLAotCTB4Y2IwZTc0NjEsIDB4ZDE1YmQwMTcsIDB4OWM4MThmMTMsIDB4Y2U1YmViOGQsIDB4YWM0ZTMxNmMsIDB4NmNkMWYwZDcsCi0JMHhlNDY4ZmI4YywgMHhkZTAxNDBlNywgMHhlN2RkNjg1ZiwgMHgzOWQ3ZDlmYywgMHhmN2FiMzJjZSwgMHhlMGZlMzU3NSwKLQkweDE5OTVkMWJjLCAweDZlNDI4ZmU2LCAweDZiNTgyZWQ3LCAweDhkZjQ3M2M2LCAweGJjYjNjOTg0LCAweGJlYWZkYTMzLAotCTB4NTIzNGU5YTcsIDB4ZmFhMjk0MDMsIDB4MDllN2QwMWQsIDB4MjEwNzBhYjgsIDB4MjI2ODVhZWYsIDB4ZjgzZjc0MTksCi0JMHg0ZWU5NmE0NSwgMHg3MWY5YTc4OCwgMHg4YTNjNWNiYiwgMHg0OWEzNjNjZSwgMHhlZTFkNzY5ZSwgMHgwMGQ3ZGMwYiwKLQkweDBkOGE2YmZjLCAweDg4YWY4ODRlLCAweGYwMDUzOGY1LCAweDAwNGJhMDQzLCAweGViMmY3MGU0LCAweGZiYmE0YzY3LAotCTB4YmFhZmRjNzIsIDB4MWY0MDYzZGMsIDB4NTJmNGUwMWMsIDB4YTFlMGFiZTgsIDB4MmZhZWY1YWYsIDB4OTg2MmRhYmEsCi0JMHg3MmYwMjQ1YywgMHg5OTc5MWViZCwgMHg0ZjAzNGRjYiwgMHg2NDQ3YWUyZiwgMHg0MWM5ZTQxMSwgMHgxODQ0OGJiYywKLQkweDA3YTY0NGZmLCAweDIyNjQ3YTQzLCAweGNmYmU3M2MxLCAweGYzZTQ3YTc1LCAweDdjOGY1ZTFmLCAweGI5MjNkMWFlLAotCTB4MDhmNTExMWQsIDB4ZmY5NDQ1ZmQsIDB4NjhiOWE2ODQsIDB4OTFjMzkyY2YsIDB4ODYyOTU5ZWQsIDB4YjAwOWM3YWQsCi0JMHgwOTdhZDI4ZSwgMHhhMWZiZmIzMiwgMHg1MmRmMzgwNywgMHhjNDM4YzQ4ZSwgMHhjNjMzMjZjNiwgMHhjODdhMmI1ZCwKLQkweGMzZTQ4ZDMxLCAweGMwNzUzYmRmLCAweGE2YjUwYmJhLCAweDgyNGYwZjc5LCAweDkzMjRkN2YzLCAweDRmODNjZTBiLAotCTB4Zjc0OGRkNGIsIDB4ZGNjMzc0ZDMsIDB4MjI1MWZjODgsIDB4ZTgyM2JkMDAsIDB4MGI3ZTAyMjMsIDB4OTk4MzRmZjksCi0JMHg0NTZjNWRkZiwgMHg0ODUwNTkzOSwgMHhiOWRkMWQ3MCwgMHg1NWYyM2M3NiwgMHgwMDlhNzE3OSwgMHgyZWIxNWI3YywKLQkweGI4ZjI4MDU2LCAweGU4MDM0ZWM5LCAweGUzMWU2NTJiLCAweGM2NDgxYTE3LCAweDk0ODM5NDE4LCAweDhjMWM5NTE4LAotCTB4YzA0NGViOTcsIDB4NmY3OGIwZDcsIDB4Yzg0YjE0OTIsIDB4ZmY0ZjMxNjUsIDB4YjliN2VkNTgsIDB4N2VkNWU2ODQsCi0JMHhmNjVmOWExYiwgMHg5NzM2ZmM1ZCwgMHg2NWM5ZmNmZCwgMHg3M2M5YjdlMCwgMHg4Y2M2NDY3OCwgMHg2NWNkZmY0MywKLQkweGFjMGNlNjkwLCAweDZmNGE4OTEzLCAweGZiOGVjYzVkLCAweGNiNTJmY2JlLCAweDQwZTQ0M2ZkLCAweGFjZWM3ZjJmLAotCTB4YzdmNDJlNzUsIDB4ZDQ3YzAyNGUsIDB4MDY3ODlmMjQsIDB4MTUzYmUxYzAsIDB4MzY2ZWVkMTEsIDB4MmY1YzAxOGUsCi0JMHhkMjA5MGY5MCwgMHg5ZDQ5NDA2MywgMHg0NTEyZmUwOCwgMHg4NzAzNWNlZiwgMHgxZWQ0MjhhZSwgMHgxNDMzY2UwMSwKLQkweDg1YmQwMzc5LCAweGNlM2M2ZWU3LCAweDc2NTVmYzAxLCAweDkxZmJkN2Y0LCAweDkzMWYyMDhmLCAweDJiNDdkNjFkLAotCTB4ZGYxMTBkOGEsIDB4YzYzM2JlMTEsIDB4NjdlYTgzZjYsIDB4ZDZmNWZhZDIsIDB4ZjhmMGU1OWYsIDB4ZTllNTExNWYsCi0JMHgzZDk1MThjZSwgMHhkMWYxNjRmNCwgMHhjMTBlNzY0NCwgMHg5YmJiZTVkZSwgMHg0NWFiZjFmNywgMHgxOTJlZjdlZSwKLQkweDYxNWY3ZTEwLCAweDQzMjRkOWI0LCAweDEwZjEyOTNjLCAweDRmMTU1Mzk3LCAweDQxMGFiNDJjLCAweGZlYTdjNDNiLAotCTB4NzQ2ZTc2MGQsIDB4MDMzN2ZkYmYsIDB4YjdmYWJmYTYsIDB4YjA1NGEyOTIsIDB4NmUwYzViZTcsIDB4N2M0MTE5NmEsCi0JMHg3YjgzY2EwNSwgMHgyNjdiYzExOCwgMHg2MTZlZmUwMSwgMHgyM2NkOWI1ZSwgMHg4ODQzYmY4MSwgMHgzZGEwZjdlMiwKLQkweGRjOGRmM2RhLCAweDY4MWJhMWVlLCAweDMzNTZlMmY5LCAweGFlYmRjZGZlLCAweDFlZWZlNTNjLCAweGIyMWVmMWI4LAotCTB4N2RhY2RmODIsIDB4YjhjNDhlNGYsIDB4MWJhMzYzNGQsIDB4ODU4ZDZjZTQsIDB4NTE2MzVmYzEsIDB4NjA2MmJiZWEsCi0JMHgxY2ViZWViZCwgMHg2NGMyZTI3ZCwgMHhmZTI5ZjdmNCwgMHg0MWRkODljNSwgMHhkNjkyZjAxMSwgMHhlMGIwMzJlZCwKLQkweGIxOGZkNjM1LCAweDk1N2NlMDliLCAweGM3MDBmNWYzLCAweDliM2RlNmZiLCAweDczYzc1ODQ0LCAweDg2MmUzNzI2LAotCTB4NzY0YmNlZmQsIDB4ZjNjMDBhZWYsIDB4NzZiNTEzOTUsIDB4MGVhMTU4ZGUsIDB4YjkyNDZlZmYsIDB4NDkzZWUwODYsCi0JMHgwZWY4OGY5MSwgMHg5YTRjMDNiMiwgMHgxZTFkYzNkOCwgMHg5ZTU3M2Q1MCwgMHhmZDgwZWNmMiwgMHgxMTA5NGM2NCwKLQkweGFlMmE5ZTAwLCAweDVmMjAxN2U3LCAweGI4NDc4MDY0LCAweGJkZmMwMDZlLCAweDA4YjdmZTRlLCAweDdiY2Q5YzM5LAotCTB4Zjc5MDA1ZjIsIDB4MDU5M2VkMDEsIDB4ZmU2ZjY2NTcsIDB4ZWVmYjA5NWUsIDB4MDRmZTJjYjEsIDB4MDdlY2FhZTgsCi0JMHhiMmY2ZmQ4NywgMHg1MzRmZTBjOSwgMHg2MThkNmZlYSwgMHhhZjJhZmM3YSwgMHhjNDVjMDBiNywgMHg0MjJmM2U3NCwKLQkweGZiYTYxM2JmLCAweGE5MjllMGRiLCAweDliNzJlNWYxLCAweGNmOWFhNWM5LCAweDUyZjA4MjdjLCAweGM3OWM2NDNhLAotCTB4M2NkZWMzYTAsIDB4NjJkOWY3NDgsIDB4NGYyYmRmYjEsIDB4NjU2ZTMxMDUsIDB4NzBjMTFkNjAsIDB4MDdlZDIxOWUsCi0JMHg1MjFhN2VkMCwgMHgxZDAwMmVkNywgMHgwYjc5ZWYzNywgMHg3ZGI4M2JjNywgMHg1Y2I5NGIyNywgMHg4MGY2ZTI2ZCwKLQkweDM2N2RhZTMyLCAweGUzZWU1ZWI2LCAweGU3MGRkMWU3LCAweDdhZjk3YWQ4LCAweDkyZTMxNzhjLCAweGU0MzQ3OTk0LAotCTB4MjhlYTkzNzksIDB4NmYxMDk1ZmMsIDB4NzhlZmI2MzMsIDB4NDI2M2I3OWIsIDB4MDE2ZjM2ZjEsIDB4NzdhNzZhYmQsCi0JMHhkM2RlMDZlYywgMHhmNzEyMGRmYiwgMHgyNDdhNDUxZSwgMHhmMWRiNjQyZSwgMHgwODE3N2I5NSwgMHhjZTU2MjdhMCwKLQkweDUwMzdlYzhjLCAweGVlNGFjNWY0LCAweGI1YzU1NTc3LCAweDVhYTMxN2JjLCAweGM2OTZhNzJmLCAweGZhNTRkMzU5LAotCTB4NGNmNzY5NDgsIDB4MzM2NWFlMzgsIDB4NTM3OTZiOGYsIDB4NTJkNDZlZDMsIDB4MGNkM2YwMGIsIDB4OGMxMGU3OWIsCi0JMHgzZjdiZjk1YiwgMHhkMWRmZjllYiwgMHgwYWIxZjY1MSwgMHgwYzlkNTJiZSwgMHhkY2M3YWY1ZiwgMHg4ZGNlMGZiOCwKLQkweGNhNGU0ZjAwLCAweDkxMmRlYmM3LCAweDljMTNjM2UzLCAweDMwNmY2ZTA2LCAweDhjZWQyMTdlLCAweDZhMWU2MDVmLAotCTB4YjcwMmViYmIsIDB4NzhmMmFlM2IsIDB4NGY4YzhjMGIsIDB4YzkzZTQ1M2UsIDB4ZGYwMWI3ZjUsIDB4ZGI5MjJmOGUsCi0JMHgxMDg3ZmY4MCwgMHg4YzQ1MjdjZSwgMHgxZWZjZjQ0ZiwgMHg3Y2UzOGNlZCwgMHhlZjAwNGRkMiwgMHhiMWJkZTE2MywKLQkweDNmZjFmYTA4LCAweDA2N2NkODYzLCAweGZmMjNlN2I0LCAweDBhZjg3OTUwLCAweDNhOTQ5YmQ3LCAweDQ5MjNjMjUxLAotCTB4YzM4YzU0ZTcsIDB4N2U5OTU1ODQsIDB4NjllYjkzMWYsIDB4N2E3MzdlMDMsIDB4ZDM5ZTUwNGEsIDB4MDc2NjRlYWQsCi0JMHhhMGZlMzJhNSwgMHg0MjY3MDVlZCwgMHgyZmZlOWU1OCwgMHg0Zjg0MmNlNywgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGQ1NTQ3ODBiLCAweGIzZGFlOGI5LCAweDY0OTMyNjY3LCAweDZmMjY0YzkyLAotCTB4ODA4NDlhZjIsIDB4M2M4NzAxMDgsIDB4NGUzZDI4NzgsIDB4MGY3ODYwMWUsIDB4MDI0ODM1MDgsIDB4NDgwNDJiYzMsCi0JMHhkMmQwNDEzMiwgMHgyMDE5NmYxZSwgMHg4MzU0ODA4NiwgMHhhOTZhMWVhNSwgMHg1YWYxMWUwZSwgMHhkNTI4MzY4YSwKLQkweGYwOWQ4MzYwLCAweDQxZDA1ODJhLCAweDM5NmI0MmQxLCAweDBhOGEyMzQxLCAweGY0MWVhMDA5LCAweGZmZmRlM2QwLAotCTB4Y2NjZGFkN2YsIDB4MjI4ODk5ZGUsIDB4YjllZWZiZjYsIDB4NjJlY2ZkMzcsIDB4ZGFmNmJkZWQsIDB4OGZkZmZhZmYsCi0JMHhmYjBjZDdiNSwgMHgzM2Q2YzYwZiwgMHgyYTFkNzZjNiwgMHg4Y2I5NmM5NiwgMHg3OTRiZmJjNSwgMHhjNWEzOThjYiwKLQkweDhjZjNkOGNjLCAweGZmNDBiNTk1LCAweDlkYmJmYzJiLCAweDc0NjNjZmIxLCAweDE2MzAyNThjLCAweDJiMTg5MTZiLAotCTB4YTQ2ZmFjNjQsIDB4NTk4ZGZhODUsIDB4MTg3YWU0YWUsIDB4MTVkMjM2YmYsIDB4NzljMDQ5NmQsIDB4MjYwOTBlNzQsCi0JMHhlY2MyN2UxOSwgMHhmODc0MzA2NSwgMHg5OTk5N2FmMiwgMHhjNGJmNWU3MSwgMHhkNWFjYzY2NCwgMHhiYzIzMjI5NiwKLQkweDJlYzZiNTM3LCAweDdlZmU2MGI5LCAweDBiNzhjZTkxLCAweDBiMTcwM2NkLCAweDc5ZDIyZGEwLCAweDJkNzNjMGQ3LAotCTB4NjZhMzhlZDEsIDB4Njc5MmNmNzgsIDB4MjY5ZDJkYzIsIDB4YzE1ZjdmNDYsIDB4YjEyZGI1N2YsIDB4MzViYmJlYWEsCi0JMHgyMDM5ZDJjNSwgMHhmZjgyNWZkMCwgMHgwZWZmODE0OCwgMHhjNjFiMTMzMSwgMHhjNWJmMGQ1OCwgMHgyY2FlYzg5NiwKLQkweDZiNTdjYzBiLCAweDBlNjg3OGVhLCAweGYzN2VlYmY0LCAweDkyYzE5MWI5LCAweDgwNWViODZjLCAweDc5NDNmOWUzLAotCTB4ODFjZDczOTEsIDB4ZDYyYWRlZjUsIDB4NTVjMzliNzksIDB4Y2ZmMTg3YTIsIDB4YzY2ZWI5NDYsIDB4ZjA4ZTQ3ZTcsCi0JMHhhMWUxOTNlZSwgMHg3ZDllNjVlMSwgMHhhNDBiNjg3YSwgMHhiMDUxN2RmYSwgMHhkOTk2MzY1ZSwgMHhhZTNmNDFiNywKLQkweDQzNDdiNTgzLCAweDg3NDRmNjM3LCAweDQ3ZmExYTIzLCAweGE3ODRiMWNkLCAweGI0NzQzZjViLCAweDYyZmFjMmU3LAotCTB4ZTdjMjRjOWMsIDB4MzhmOTVmMDEsIDB4ZTU3NzhiMWYsIDB4ZGUyMzA3M2IsIDB4ZTAwY2NiOTYsIDB4NjFlOTAxNzgsCi0JMHg4ZTNkMzZiZSwgMHhkZjA0NzU5YSwgMHg1Mzg3MzM1MSwgMHg0ODg0YzNhMSwgMHg1ZDBiMjhjNywgMHg0ZjVlZjQ2NywKLQkweGQ3ODAxYjMxLCAweDk1ZDA0YzM3LCAweDU3OWU4Mzc5LCAweDRjYzVhNzVhLCAweGNmMWJhZWUzLCAweDMwN2QzMDlmLAotCTB4N2ZkYjU5OWUsIDB4ZTgxM2Y4YmQsIDB4MzJkZmYxYmIsIDB4ZjAyOWRkZTEsIDB4ZDYxN2RkMWUsIDB4ZWYwOWYzZmQsCi0JMHg5NWUwYmEyNiwgMHg2MWY3NTMzYSwgMHhkYjUxZjAwOSwgMHg1ODY0ZGIyNiwgMHg5NjY0YTBjMiwgMHhkOGM3MTlkYiwKLQkweDBlYWRmYjlhLCAweDVhMjc4M2U0LCAweDhjMTg3YjI0LCAweGIzNjYwZTY3LCAweDI1NjQzMjI0LCAweGRmZjlkNjIyLAotCTB4Yjc2MTBjYzcsIDB4YWMxNzBiNDAsIDB4NjI5M2NlMzAsIDB4ZGU0MzZlZjQsIDB4NDMzMzdmZDksIDB4MDJiMWRjMzgsCi0JMHhjM2U4MDY4ZSwgMHgwNTE2NWQ3MywgMHgwZGY1MDczMCwgMHg0NTlmZWFlYywgMHhmODYxZjE4MiwgMHg2YTRiOTgyZiwKLQkweDgwOTc2ZjY5LCAweDMwNDY2YjcwLCAweGRlZTAwMTk3LCAweDNmMTMyNmQ3LCAweGUxMThkMTNlLCAweDdmZjk4MzBkLAotCTB4ZTFlMmUzYmIsIDB4YjljZmQwOTksIDB4ODJjYjg3NWYsIDB4MzM5NjA5YmYsIDB4NDNhOGY4OTEsIDB4Mzk1YTBhZmEsCi0JMHgwZjQwMzRkYSwgMHg4NDcyZWRmNywgMHgyZGYxODY1ZCwgMHg1ODQzZDExMSwgMHhmYjQ1NjMwYywgMHg5YWQ5Zjk4OCwKLQkweGJjMGYzMDdlLCAweDA0N2I0ZDY3LCAweDNmNGQ2ZmFkLCAweGUyMmM4ZjkwLCAweGZmOTE3YjgzLCAweDU5MTk0N2Y3LAotCTB4MDRiZjVjMGEsIDB4ODZlMzgzNzIsIDB4NDYzNzhlYjMsIDB4NzRlODA1NjUsIDB4NTlkM2Y1YTksIDB4ZWVmZDYxN2IsCi0JMHhkNzZmM2U0OCwgMHg5MWZkMmJkZSwgMHhlM2ZiOTU3ZiwgMHg5N2I1Y2M1NiwgMHgyYzU2MzNlNiwgMHhmMzhhN2ViYiwKLQkweDFkNWZkNzI5LCAweGUyMzQ1ZWYwLCAweDgyMzRiMTliLCAweDA3MjdlODk3LCAweDM3OGFiYmUwLCAweDFjYWZjNzBiLAotCTB4NzQ3NWE3YTUsIDB4YWUzYjA4YjEsIDB4NjBlOGM1YmIsIDB4MjljZjI3NDgsIDB4NWUwYWRmY2UsIDB4NzQ2ZjA0ZWIsCi0JMHg3MDllMTViNSwgMHgzODllZmFjMSwgMHhlN2M3NjY5MSwgMHg4NTJmNWFiYiwgMHhiMzdkZTBlYiwgMHgyMzBmNWM2MywKLQkweGVlZjRlNWRkLCAweGUyMmU2NzY4LCAweDFkY2RkMmYzLCAweGU3NWViOGI5LCAweGQyZWY4NDQ2LCAweGFlYWNmNzkxLAotCTB4ZGY1YWViZGMsIDB4N2Q2NGRmNjMsIDB4NDliOWJkNmUsIDB4M2ZjOWU5OGEsIDB4ZGE5MDNlNWEsIDB4ODY5MGJmZGEsCi0JMHhkNDMwOWM5MCwgMHhlNjBjOWU1YiwgMHg2ZWViMDM1ZCwgMHg0OWI0M2MxYywgMHg2MzRmNDI0NiwgMHhjNjRmOTQzNiwKLQkweDA2NjcyYzJhLCAweDMxM2RlODA1LCAweDEyZGRiOWM2LCAweDE4OGU1ZjI0LCAweDJmNWMwZWU3LCAweDhmMzUyN2JlLAotCTB4ZGUxY2Y5ZDYsIDB4NWU3NDcyMWYsIDB4NWQ3NzQxYmUsIDB4ZjQyOTdjZWIsIDB4YWY0NDdkM2EsIDB4NWE5ZWIxNWEsCi0JMHgwMzI3ZDk5MywgMHhlMTk3NmNmYywgMHgzZTQ1MGU5MywgMHgwYmMyN2JiMywgMHhmMDhiZDhmNCwgMHgyN2VkOGE3OSwKLQkweGJmY2Y0ODVjLCAweDEwNmJlZDlhLCAweGM1YmY3YTFmLCAweGVmZjA0NTE5LCAweDExYjFmN2M3LCAweGJkNzE5MjczLAotCTB4ZmYxZDIzNmIsIDB4ZjZmZTg2NjUsIDB4ODNmMzhjNTUsIDB4MTI3ZjYxMTQsIDB4YmY3M2I3MTYsIDB4ZTRmNTAyMzUsCi0JMHg5ZmQ3MThjNCwgMHhiYTgxYmU3MSwgMHhkMDljYjM4YiwgMHg3NTNiZjAyZiwgMHg3ODFkYjk3MywgMHg5MmZiYWM0ZCwKLQkweDk3YThlMDllLCAweDU4ZWJmZTcxLCAweGFmNDI1ZmZmLCAweGZlMWQwN2JmLCAweDA1MDc0YzE2LCAweDdkMDRhMzNmLAotCTB4NTA3ZTIxNDcsIDB4M2ZlYjc3MjEsIDB4ZjAwNTMwZTksIDB4NGY1MjgxMjMsIDB4OGY5Y2Y2YjUsIDB4ODQwYzhlYjEsCi0JMHgwN2Y3N2RiNywgMHhiZTYwM2JmZCwgMHg5ODNlNTdiYSwgMHhmNzViZjI4NSwgMHhiNzExMTg3MiwgMHg2MzliZTVmNCwKLQkweDE3Y2Y4ZjkwLCAweDczMTZmMmIxLCAweGM5ZmE3ZDRmLCAweDNlYmI3YWNhLCAweDRiNGViMTg3LCAweDFhZDVlOTM2LAotCTB4YmViMjM3ZTYsIDB4ZGE5NzRmYTgsIDB4MTRmYTQxZjUsIDB4NDdmYmE2MjAsIDB4MzgwOWZlMGMsIDB4OTk0MjkxZmYsCi0JMHhiYmJlMDJhZCwgMHhjNDllMWY2NCwgMHhhNTY5ZTg0MiwgMHhiMzI1NmQ3ZCwgMHg3ZmQ4MDdjZiwgMHhmMDBlN2E4ZSwKLQkweDQxNzc2NDNmLCAweGNkYTVlMTBjLCAweDNiNThmYTRhLCAweDZhY2FjOGZlLCAweGVmNGU2OTdiLCAweDFhMTkxZGYzLAotCTB4YmI0NWVlNWUsIDB4YjA2NzMxMjEsIDB4ZTU4ODQ5N2QsIDB4YjQ1NzI1NzYsIDB4MDgxZDI4YTAsIDB4YTMxN2I5ZTcsCi0JMHg3NGI4MWViYywgMHg2OGFkZWYyZSwgMHhiNzNhNzgwNiwgMHgwZjdjY2RlYiwgMHhlNjM5Y2JmMCwgMHg5NDA3ZjY1ZiwKLQkweDZjY2Q0ZjlmLCAweGExYzc2YTFiLCAweDhhYWZlNTZmLCAweDBmZGJjODBhLCAweGZmYjVmMDQ2LCAweGQxYTNhNWUwLAotCTB4NjEzZjE4MzYsIDB4NGY3OGJlZTcsIDB4YzA3ZWZlMTAsIDB4ZTU1ZTlmZjQsIDB4MmY3YzJjZGYsIDB4N2QzMGZjMjMsCi0JMHgwN2E0N2Y0NywgMHg0NGQ5YzNmYiwgMHg3NjEzYjQxYiwgMHg3Y2U3ODgxZiwgMHgzYTQzYTg5MCwgMHhlYjdhMTcyZiwKLQkweDY0Njk3ODc3LCAweDJiMDliZTYwLCAweDk0OGY4OGVhLCAweDEzNjVlZDdlLCAweGY1MDVjNmYzLCAweDlhMjM3ZWY1LAotCTB4NjZjYmRhYmUsIDB4NWY3MTg1ZTYsIDB4NDllMmEyNTgsIDB4N2Q2MWY0N2YsIDB4NTM3YzdmNTAsIDB4MmJhZjY5YmMsCi0JMHhmNDMyM2I3OCwgMHhlZmRhMDY2YywgMHhmOWExZTFmMywgMHg3NzE4ODQ2NCwgMHgwOTMyM2VjOSwgMHg0NjA5YTNmZCwKLQkweGM0MjU4ZTVmLCAweDM0YmNjNjM4LCAweDU3YWViYjRlLCAweGE1ZWNiYTU3LCAweDFiZTFkZWZhLCAweDk2YWU2NDZmLAotCTB4ZjQzNDdjMTAsIDB4OTljMzdiZWEsIDB4ZDk3YWU0MDcsIDB4YTFkOTAzNTYsIDB4MzJmZTU3YTMsIDB4ZjdlODFmMmQsCi0JMHg2NTgzMTZjMSwgMHhmYWIzZTAzNSwgMHg3ZWQyZmJkNywgMHg4N2FiZjcwZSwgMHhlODI0NTk4NiwgMHhlNWYzNjA3ZiwKLQkweGZjMmYxZjIwLCAweDc1YzRlY2I1LCAweDU5NjViMDdmLCAweDNmNjgzY2UyLCAweDAxYWM3ZTA2LCAweDM1NmUxNjM4LAotCTB4YWRlYWY1ZDAsIDB4YjNmNWQyZjcsIDB4ZmUxNzRmODIsIDB4ZWExMDYxM2EsIDB4ZDdmYmEzZjksIDB4YWIzYWUyMjcsCi0JMHg4N2Y2YjFmZiwgMHgxYTc2MmZhOCwgMHg0Mjg2ODMyZCwgMHhiMjQzYjM1YiwgMHhjNWM5MDY5NywgMHg1NWMyYTdlMiwKLQkweDU2M2E5ZGZkLCAweGQ2NTBlYjhkLCAweGQ1ZDcyNGNkLCAweGE3ODAzNmZiLCAweGRkZjc1NjJhLCAweDZhZmQ5N2ZjLAotCTB4OTVmYzA1ZmYsIDB4ZjIwNGQ4YWEsIDB4MDlkZDI2NTcsIDB4YmMyYmFlZWIsIDB4YmVlMjdlNDQsIDB4Yzc2NDExODMsCi0JMHhjOTk2NjhmZiwgMHhmZDBkZjAxZiwgMHgwMmRmM2ZjZiwgMHhlODdmOTJmZCwgMHgwODQzZTRlZCwgMHhmNDJkMWYzZSwKLQkweGE0Yzk2MzMyLCAweGJjNGNhYTg3LCAweDRmNWJiMjVmLCAweDk0NDk0NGZlLCAweGYxODZmODRjLCAweGZmNzBkMWU2LAotCTB4MWY3OGM0NWYsIDB4MzdlNDBkZTgsIDB4MzRkYThmMjYsIDB4OGU4ZGM2MTIsIDB4MTNmNDMwMzEsIDB4NzhiN2M1ZmYsCi0JMHg3ZWZkMDMwMiwgMHhiYmZkNjVmYiwgMHgyOWViNDExZCwgMHhkMDAzY2Q2NiwgMHgwNjYyMjkxMSwgMHgxZTg3NzVjZCwKLQkweGQ0OTg5N2FmLCAweDhjZTc0N2Q3LCAweDZlNzY4YjNiLCAweDVkN2Q0NWI0LCAweDU4ODY5YjkxLCAweDAxNDFmZmUwLAotCTB4ZjA3N2RmZmUsIDB4YzNjNjQ3YTMsIDB4Yzg4ZWFhZmEsIDB4ODZiYjBmZGMsIDB4ZTEwZDc5N2UsIDB4NWY5ZDIzZDcsCi0JMHhjZjAxZDhhZCwgMHgzOTU4MTUxZCwgMHg4NjgzZTU3YSwgMHgxMWFiZTQxNCwgMHhmZDBkNWIxMiwgMHg5NTg0YWUwZiwKLQkweDBiODc5Mjg1LCAweGJjYTM2ZmU4LCAweDgwZWZhMDMzLCAweGRhMjc3ZDAwLCAweGEzZWQ1ZDE3LCAweGIxMWU0YzM4LAotCTB4ZTExZjZhZjQsIDB4ZWU3YWU2ZmYsIDB4MTFkMWU1ZWIsIDB4NmJmN2E0NmIsIDB4NmU1NmEwZjUsIDB4MzgzZDJmYmUsCi0JMHgwYzgxZTg2MSwgMHg0ZmI1MTQ0ZiwgMHg0ZWM5ZmI2MywgMHg3YWI0NWZhZSwgMHgxNGY3YWI1MSwgMHhkNmYwYjRiOCwKLQkweGY0YTlkNjVlLCAweDFiNThkMGRkLCAweDNkZTgwYjhkLCAweDFiYmRlOTIzLCAweDhkMWQ1ZjE4LCAweDgxNWYxMTBkLAotCTB4Nzk3YzI2NWQsIDB4YWUyOWU5ODYsIDB4MGRlMWJmMDMsIDB4YjY2Yjk3MWMsIDB4NDgwMTE1YzUsIDB4NDhlYzk2MGQsCi0JMHhjYzMzZTdkNCwgMHhlZTUwYjdhZSwgMHhiMDNiN2YzMiwgMHgxZWJkODE5NCwgMHg4NzU5YTNiNCwgMHhlMjRiYTM3YSwKLQkweDEwNmVkYWY0LCAweDAzNzNmNjJkLCAweDYyM2JjZmYxLCAweGJjYjFlZGZkLCAweGM1MGZmMTBmLCAweDhhMmJkOThkLAotCTB4ZmViMDdiZDksIDB4ODRmMzEzMzAsIDB4ZjdiZDkxZTcsIDB4ZjMwMmYyMTgsIDB4YTJlMzFjYmYsIDB4OGM0NThkNzEsCi0JMHhkY2IxOWRjNywgMHg2MDFlY2JlZiwgMHg3ZTYwNTlkMywgMHg4NzU5MjAzNiwgMHg3MDI2NWFmNCwgMHgyNWE1NzZiMSwKLQkweDdiZjgxM2I3LCAweDZhNjRjYWRkLCAweGU3YzQ1ZmQxLCAweDY4MjM3YjNjLCAweGNlNGJlZjVkLCAweDZiNzcyODIxLAotCTB4N2E1YTdjMDUsIDB4ZmUxNTViNjQsIDB4ZjYwZmY2NzYsIDB4ODcxNDE2ODcsIDB4NTZkMWQzZDYsIDB4ZThhN2FkM2QsCi0JMHhlODE5MTlkMSwgMHg3ZWRmYmM2ZiwgMHhjZmVhMDY3NywgMHgzZjVlMDFmNywgMHgzZGJkM2ZkYSwgMHg4NGZjZWJlNiwKLQkweDNlM2M4NTg3LCAweDhjNDRlYzI4LCAweDI2N2YyMzg4LCAweGM3ZDgwNGU0LCAweGI1ZmQxM2IxLCAweGJmYmE0ZTk1LAotCTB4YjUzOTY1NmUsIDB4YTBhZTU3MWIsIDB4NTliMWRkZmIsIDB4OTFlOGZlZjQsIDB4ODFiM2ZiY2YsIDB4NjQxYjlkN2UsCi0JMHg4YzBiMDNiMiwgMHhmMGIxZmVjZSwgMHg4ZTkzNGVkZSwgMHhlYWY3ZDFlMiwgMHhjY2JiNjVjZCwgMHg1YzUxOWQ3OCwKLQkweGYxZDFlMGIzLCAweDE0MmU1MGRiLCAweGY1NjNiYTM4LCAweGQ2ZGVlZWI0LCAweDNlYmQ2ZDk5LCAweDNhY2I1ZGZkLAotCTB4NWQxZWQxYTIsIDB4MDA3N2M3ZTUsIDB4N2UwMTg5M2IsIDB4MzJiYjIxOWMsIDB4YzcxODA5YWQsIDB4MzhlMjI0NzQsCi0JMHhiZmVmZTRiNywgMHhlZTgwODI4MywgMHg5NTZmZjQwYywgMHhlY2NhZmZmNywgMHg2MjE2YjZjOCwgMHhhMTA2YzM5YywKLQkweDcwNDRiNDVjLCAweDczODVhMzdiLCAweGQ5ZjM5NWEwLCAweGMxMzY5NWRhLCAweGZkYTgwMzA3LCAweGVmNjFmODU4LAotCTB4YTEwYTlkYTMsIDB4Y2YxMTZlNTcsIDB4NmUzYjM2MWQsIDB4NjYzMGY3YzEsIDB4ZDY5MzdmMjYsIDB4ZGEzYmZhODEsCi0JMHg0MjcwODc5MSwgMHhmNzgwNTBiYywgMHhjYmQ1MjU4NywgMHhkYmY5MDkwNiwgMHhmODBkZjVjMiwgMHg3NzFmZGNhNSwKLQkweDJjNzFjNDhlLCAweDA0NGQyMWRlLCAweGY5MTMwYzdhLCAweDA1ZjJkZTliLCAweGI0ZGUzODVhLCAweGU2ZDBmOTcyLAotCTB4Yzk1Njk0MTEsIDB4Zjk1YTk0MjMsIDB4NmIxNmZlN2EsIDB4NmM3N2U1NTEsIDB4MmExMWNjMmQsIDB4Y2FkNWIwN2YsCi0JMHhjM2IyNjZmNSwgMHg3YWRhNDcyMSwgMHhkNzAyYmI5NywgMHhmMzE5MWViYiwgMHhkZWNjZTUyNCwgMHg1MWE0OWEwZiwKLQkweDNmOThlZDJkLCAweGFlZjUyOTQ5LCAweDYzNGFmY2MyLCAweDNkMGU1NmFjLCAweGM5NTc5OGUxLCAweDNkMTJlOTc2LAotCTB4ZWZkMTJlMzAsIDB4MWMwMjMyMmEsIDB4ZTkxMjYyNWIsIDB4N2VhYzQ5N2QsIDB4YzBhYmQyMTUsIDB4MTc0NWEzYTUsCi0JMHg0YWYwOGZlYywgMHg0MzA3OTA0YSwgMHgwNDdlODVmMiwgMHg3OTQ3MGQwOSwgMHg5YWU1MWYxYiwgMHg1ZjlkZjg0MywKLQkweGMzNjhjNmJmLCAweDQ2NDc5M2ZjLCAweDAyNTY3MmZkLCAweDM4ZmUwMTNlLCAweGE0MjIyMDdiLCAweDIyOGY3NzNmLAotCTB4MWY3MTUyYjcsIDB4NGYwNWU5MzQsIDB4MDUwZjA4MTksIDB4MTY2MmZkNGYsIDB4ZDRmMDViYzIsIDB4MjgyOTdhMWQsCi0JMHg2YWM4N2Y0ZSwgMHgzZDlkZmMyMCwgMHhlMjkzMzhiMCwgMHhhYzYxOTNlNiwgMHg3OWNmNTY1ZiwgMHg1NDVmMDUxYiwKLQkweDYwYmY3YzA5LCAweGFiNzdjZDBjLCAweDViYWZmYmM1LCAweDdmODI3NzRmLCAweGQzZDJhODkzLCAweDgxMDlhZGFiLAotCTB4ZWQ1ZDRjN2MsIDB4YjNkM2QyNDUsIDB4ZmMzZWRjYWMsIDB4YjA3MmRmNGEsIDB4NTdmM2UwMGYsIDB4ZjExZDk5ZjMsCi0JMHhhZDk5ZjhiZSwgMHhjMTdiYTc5NCwgMHgwNzc2MzJkOCwgMHhjNzRlYTdhZSwgMHhmZmIwMGYzMCwgMHhmYjA3Y2JlMCwKLQkweGRmMzg3ZmEwLCAweDgzZmQxNDM2LCAweGQ5MWZjZmFiLCAweDdmZDc4OGRlLCAweDIyODZjZDU1LCAweDFiYmM1M2ZlLAotCTB4N2MwN2NjMjUsIDB4Zjg0Y2RlMWUsIDB4MTg1YjdjZmEsIDB4NWE0YjA1NWIsIDB4ZWM2NWFjNzQsIDB4YjliZmEwNGYsCi0JMHhhZjUwYzc0NiwgMHg2ZjBkZDc2OCwgMHhiMTkyZTgzMiwgMHgyMzc0MTlmNSwgMHhmZjUxZmQzOCwgMHhjNjA3NzQyOSwKLQkweDE0M2QyMjMyLCAweDUwZmUyMWJhLCAweGY2ZGZlZDlmLCAweGMwYWZjMTEyLCAweDQ2YzYyNWI1LCAweGNjZmM1YmY4LAotCTB4MjdjOGIxY2UsIDB4MTJhYzZhN2QsIDB4YjgxNDY3ZTYsIDB4Yjg5ZGFiYmUsIDB4ZjdmM2Y2ODEsIDB4M2Y2NjZmZDYsCi0JMHg2OWZhNDY1ZiwgMHg2ZWQ2YTdlZCwgMHhmNjNiMzBjZSwgMHg4NmJiZmU5MCwgMHhmODIzMWNmZCwgMHgwZjQyMzdmMCwKLQkweDQxZWQ5OGRiLCAweDIzYjI1M2NjLCAweDY4ZjdjYTNhLCAweGY4MmE1MmU5LCAweDdhMmYyODMxLCAweDc5MWQ3YWM0LAotCTB4MmI1NjYxZDEsIDB4MTc5YjU3YmQsIDB4N2FlNDZlZGQsIDB4NjZjYWQ5YjQsIDB4ODdlNTA5NGYsIDB4OWI3NTc4MDksCi0JMHgxNzY4OGRiYSwgMHg5MGE0ZGJlMywgMHg5OWE4ZTk3YSwgMHg5YmQwMjVlYiwgMHg5ZjcyNDFmZiwgMHg4NmFmNWExYSwKLQkweGM0MTllZmMwLCAweDdjM2JjZGRiLCAweDVlNTQ3MTdiLCAweGJhMjQ0ZTZjLCAweDBmY2Y4MDVkLCAweDc4MTRmODU0LAotCTB4ZTBhYWYwNTQsIDB4ODhhNjMxYjMsIDB4ZjBiYjY1ZjgsIDB4NzBjNGI3MzMsIDB4OTk3MDI5N2MsIDB4OGU3MTk0ZTMsCi0JMHg3YTVmMzgwYiwgMHgwYmZhZmEyZiwgMHhmZjgwNjc4MSwgMHhiZjFmYzIzMiwgMHhlYWYyYTk5YywgMHhiZTNkM2U0YSwKLQkweDBiMTkyM2RlLCAweGNhMzAyY2QwLCAweGI5YzY2NWJmLCAweDVjNjAxOTU2LCAweDdmNjY0OGY3LCAweDE1MzFmYTEyLAotCTB4NzdkNDIyOTYsIDB4M2I3YjZhZDYsIDB4Y2YxYmRkZTYsIDB4ZTM2NmJjZjEsIDB4NGQ1ZGU2NTIsIDB4N2ZmZTMwZjMsCi0JMHhhM2NhNmNhZSwgMHhlNjlkZGUyMiwgMHg1OTQxNzY5ZSwgMHg1MzJiZDgxZiwgMHgxNWMxMjE1YywgMHhmNjM1ZjcxMSwKLQkweDQ1Y2EwNmVhLCAweDkzMzdkYzcyLCAweDEwYjhmNDhiLCAweDczMWI3Yjc0LCAweGM3MjEwOTgwLCAweDQzNzljNWY3LAotCTB4YWYwNzM5ZDAsIDB4YjdjZThiNWYsIDB4ZTVlNTc4ODksIDB4Y2Q0NzI5OTgsIDB4MGNiNTZmYzIsIDB4NGI1ZGQwMDksCi0JMHhkZjkxYmVjZiwgMHhjNGY3OGY1MSwgMHgwOTcxNmRjYiwgMHg2MWIyZjEzZCwgMHgxZTgwNmU4MiwgMHhlYzIyYzlkNywKLQkweGE0Y2VlY2ExLCAweGRmM2RlZmI4LCAweDQ0MmUyOTNmLCAweDU0ZmUxZmJlLCAweGFiMTNmNGZlLCAweDg0ZGZhZmVkLAotCTB4NTMyNmJlNzAsIDB4NGZjNGY0OWMsIDB4Mjc5ODhjM2IsIDB4MGFkMmYyNTYsIDB4ODEyZmVlYmMsIDB4NzczZjQwYTMsCi0JMHg1NmEzYTk3ZCwgMHgyNmQ3NWViOSwgMHg1NWRjNjNlNSwgMHhmOTBhZWZiNCwgMHg1ZmVkNWRjNywgMHhhNWRjN2Y5MiwKLQkweGY3OTU4ZmYxLCAweDg5ZWMwM2RlLCAweDM2NWEzMWYyLCAweGRjNWZmZjEzLCAweDk5NzhlM2MyLCAweDE0NmRmZWQ5LAotCTB4NjQzZWUxYzAsIDB4ZjExYjVlNjAsIDB4YjQwZmY5MmYsIDB4YzQ1ZmU4NWUsIDB4NjMzZmM3MTYsIDB4ZTE2Zjc4YTQsCi0JMHhmOTg2MTdlMSwgMHgwOGNjNTJlMCwgMHhlMTA1YjMxZCwgMHhjMTExZDYyYiwgMHg4YWY4NDE2YywgMHhmYWFhYjMyYiwKLQkweGFhM2VjZTA5LCAweGQ5ZTU0OWYxLCAweGFlMjlmYmFhLCAweGE5ZmJhYTgxLCAweDdlYWE3OWQ1LCAweGFhYWRmZDdhLAotCTB4Yjc2MDk5ZjEsIDB4OWU1OWZiODIsIDB4N2RmMWFhNzEsIDB4ZmFhYWE2OWIsIDB4NTZlZjlhZmQsIDB4ODcxZTY3OGQsCi0JMHgzOWQ2MDczZiwgMHhhNmYzYWM1ZiwgMHhlMzU1NzNjZCwgMHg2MWYyNGY5OSwgMHgyMDgxNjQ3ZCwgMHhjN2RiYzdmMywKLQkweGM4ZmFjMjFjLCAweGI4OGY5MTdjLCAweDM1NThiYmQ5LCAweDc1NjY4MmRmLCAweDA4ZjA4MTVlLCAweDk1NmFhYjc4LAotCTB4Yjc4ODYzZDgsIDB4ZDVmYmVhY2QsIDB4NTMxYjFiNmQsIDB4NTVlNDVkYTEsIDB4NzU4YzVmNWYsIDB4NTNmOTA5MGYsCi0JMHgzYWY3ZmQ3ZCwgMHhlM2Y0MzJlNywgMHhjZWE3MTk3ZiwgMHhiZTkzNWRkMywgMHg0NWFlOWI5ZSwgMHhjNzBmYmI1ZiwKLQkweDdmMjI4OGVmLCAweDc5ZTFlMTY3LCAweGM5NjE0NzI0LCAweGRiODZmYTZhLCAweDdmMTZiZTIyLCAweDlhYWMwMzkxLAotCTB4YWZiZmYwZmIsIDB4NWQ5NDVmYzEsIDB4ZmM1YTBmY2QsIDB4YzFmNzU5ZTksIDB4Y2VhYjgwNTQsIDB4YWM3ZGQ5MmIsCi0JMHhiNTE2ZmUyNywgMHhiNTM4MjU2ZSwgMHhlZGUyZDNmOCwgMHhiY2VhNzE4ZiwgMHhkNzQ4ZGFjZSwgMHg5NzFiZDQ1ZSwKLQkweDBjY2I5NzVhLCAweGJjNjVmM2YzLCAweGY1YTk3OGZlLCAweDZjNDcyMWQzLCAweDdlZjk3OTQxLCAweDVmZTVlNmJkLAotCTB4OTc5MTBiOGQsIDB4Y2I3YWMyZWYsIDB4ZDQxYmVjMmQsIDB4ODE3ZGY2NWIsIDB4OGIwMzA4NzgsIDB4YjI3YTAwNjMsCi0JMHhkNWQzNzYxMSwgMHgyMDc4NGFmYSwgMHg1YmQ1YWYwZiwgMHhmYjdhMGI0YSwgMHhjZmE0NzE2ZiwgMHgzNWE5NzUwMywKLQkweDk4YjBmNGYwLCAweGFmMDg5ZGI3LCAweGVmMThiNzUyLCAweGI3YmMxMTcyLCAweGUxMjMyMDIwLCAweGE3NWYzMzNmLAotCTB4ZTFlMDBmMzIsIDB4N2M2NzljM2QsIDB4ZTMxMjM1OTEsIDB4ZWZmYjlkYTcsIDB4YjU4MDc4YTEsIDB4MDczZDczYzUsCi0JMHgxZjFlMGYyNCwgMHhmZTkyOTdlNCwgMHhhNjdmYzE2YywgMHg0OGZjM2Q5MCwgMHg3MDRmYzNkOCwgMHgzMjFlYzUzZSwKLQkweDU3YmY5NTlmLCAweGU2ZGVjM2Q4LCAweGJkMTZlYTUxLCAweDk5NWVkMmI1LCAweDU4ZGQyZmVhLCAweGNmYTEwOTdmLAotCTB4ZDFkZmYxOGQsIDB4MjNkMjdjYWUsIDB4MGY4YzY5ZmYsIDB4YmRlZTBmOGUsIDB4M2FmNTEwNzQsIDB4MWUzYzNkZTAsCi0JMHgwNTE1MTlkNiwgMHhkODBhNTJmNiwgMHg4YzhiN2ZjYiwgMHgzZWViNzkyNiwgMHg4MjZmN2IyYywgMHhiNjRkMTcwYiwKLQkweGEwNmU2YjE4LCAweDc3ODVhMmJlLCAweGFiOWFjOTk0LCAweDZkZTNkMjBmLCAweDM2NWVkYTkyLCAweDIzZmY3MWU2LAotCTB4MWRmYjllMzEsIDB4MmZkY2NjOTMsIDB4ZTlkNjJjMWQsIDB4ZWVlYmY4ZDYsIDB4ODI5NzFlMjYsIDB4MDViNzU0MzQsCi0JMHhlMzgzODFmOSwgMHgzYmZjNjhhMywgMHg3MTgzNDUxMSwgMHg1YzQ1NWIzZCwgMHhkMTI1OThkZiwgMHg4OTI1MWFmYiwKLQkweDMxMmRmYWVjLCAweDlkZmY3NGM1LCAweDZjNWNhMmI4LCAweDBlZjc4OWZiLCAweGRhMDg5ZjQ2LCAweDhmMGU2Y2U2LAotCTB4NTAxM2VjNGQsIDB4YzcxMGZmZTYsIDB4NGM1YjYyMTcsIDB4OGI3OGUwZWQsIDB4MDY1OGVmYzgsIDB4NDQ4ZmJkMjIsCi0JMHhhMzVlNjgzOCwgMHgyOWZjYWIyYywgMHhlNzhiY2RhNSwgMHg5OWE3NDQ3ZSwgMHgyYTkzN2UyOSwgMHhlODQ2M2M3ZiwKLQkweDg3MTdjYzMxLCAweDI2MzkzMDkxLCAweGU0MGM0ZThjLCAweGVhM2M5OThiLCAweGU0NWUzMWI4LCAweGRjN2EyNTg5LAotCTB4NWRiYzc0ODEsIDB4YmNiN2IxZDAsIDB4NjU4MDYzYjEsIDB4NDQzOWJjM2YsIDB4MWM5N2Q4ZGUsIDB4MWY2YzZmMzIsCi0JMHg3ODYzNzk0MywgMHhkMmViOGY1MiwgMHgwZTkxOGZlNiwgMHgzYzgwZDY5MSwgMHhhYWJmOGM0YywgMHhkZjUwZDI2ZiwKLQkweDNjNzU2NjM0LCAweGUzZjkxZTMyLCAweDEyN2Y2Y2E4LCAweDEzYzc3ZjQxLCAweGI2ZTAwNDM5LCAweDdjNzY3NWQ5LAotCTB4YjYxNmU0NjQsIDB4MGJmYTFjM2EsIDB4MmZjYTM2M2QsIDB4OGFmZTIwMTksIDB4ZWZjODBiY2EsIDB4NGUyY2Y4OTIsCi0JMHhkMzNlMTNmZiwgMHhmYzNmYjgxMCwgMHhlNjNiNjcxZCwgMHg2MzRmZmI5MywgMHhjZGZmNTQ1NiwgMHgxYTI0YjlhYywKLQkweDJjMmQ4OGZkLCAweDI1NTJiYzY0LCAweGQxN2M2NmY4LCAweDNjZTUxOTVlLCAweDI1ZjgxYmExLCAweGUyYWEzZDA0LAotCTB4YmRiZjhhNzUsIDB4YmMzNmU5MDAsIDB4ZjUwOTc1ZGIsIDB4NDgwN2EyODksIDB4YjQ1YzYxOTUsIDB4YjI3ZTQ3NWYsCi0JMHhlODk2ZjlmNiwgMHgwN2M0MjU5MiwgMHg5Mjc5ZDBkZSwgMHhlMzg3MzM0ZSwgMHgyOTczODQ0MiwgMHg1Nzc4M2ZjZSwKLQkweGNkZjUxMTg3LCAweGNlNmY0NTQyLCAweGQwM2QzMWQ3LCAweGJmNDE0ZWY3LCAweGJhZjBiNzNiLCAweGQ1ZjJiYjM0LAotCTB4NWZlMmIyNTcsIDB4YTE5ZjlhMzEsIDB4MmQzODU4M2UsIDB4ODc3OThiY2EsIDB4MWU1OTZkODUsIDB4NTEyOWNiODIsCi0JMHg3NmRkYzU1ZSwgMHg4NWZkODljYywgMHg4YzE2MDUwNSwgMHg2NTdmMWQ3MywgMHhlNDAxOTlkMiwgMHg3N2FlMzE5YSwKLQkweGEyOGNlY2Y0LCAweGM2N2VjODA3LCAweGFhNjI5ZDUzLCAweGIzNGVhYmUwLCAweGZkMDRlMDhkLCAweGU4MTIyMWJjLAotCTB4YWFjYjcwYjAsIDB4ZTEyZmI4YmQsIDB4NTQ2NzdmYWQsIDB4NzcyMTM4OGYsIDB4YTZjOWMzMGYsIDB4ZTQ1NjcyMDMsCi0JMHgxNTY3YWI2MSwgMHhhZjMwZjg3OSwgMHhmMzEzNGM3NywgMHhmNzg0YmU3OCwgMHg5ZGVmMDI5YSwgMHhkNjk4NzZkZSwKLQkweDNjYzBjMjczLCAweGFlOTdlMDI2LCAweGQwZDk3NzNkLCAweDMwNGM2ZDRmLCAweDQ1N2Y4OWQ5LCAweGVjOTRlYjlkLAotCTB4ODc4YzgwN2EsIDB4NDEwZWJiYmUsIDB4NjkxNmQxOWIsIDB4NThlYjBmNTksIDB4YWZkYzY0NjMsIDB4MTFkODQ1ZDUsCi0JMHgxZGNkMTNmZiwgMHhmODk3ZTI3YSwgMHhmMWUyM2Q2ZSwgMHhmNDY3NDEwZCwgMHg0ZmNmYzllZCwgMHgzOTI3NDQ2MCwKLQkweDk2ZTljNzU1LCAweDQ0ZmJlMzY5LCAweGJmZjlkNDcyLCAweGMxZGQwNDk3LCAweGViYzM0YzZiLCAweDU4ZGYyMzEzLAotCTB4N2NjZTAzNmUsIDB4YzcwZmQzNzYsIDB4ZGVhMjQ3ZTksIDB4MTY3OTYzN2IsIDB4ZGQzNjViZjQsIDB4ZmM4ZjRlMzUsCi0JMHhhN2M2ZmE5ZCwgMHhjZmVhMjA1OSwgMHhmN2U3MmE2ZiwgMHg2OWYxYmQwNywgMHg2ZDc3ZjQzNiwgMHhkZmVmYzE5YSwKLQkweDVlY2ZiYzQ2LCAweDM4Zjc3NGRjLCAweDc0YmZlYmNjLCAweGY5ZjAyZjU1LCAweDEyNDIyMDk3LCAweGMzOTViZmFlLAotCTB4ZTJhMWY1NzQsIDB4OTJiYzVmMGIsIDB4N2MwNjY2NWYsIDB4NGZlZGIzOGYsIDB4M2FjZWQwMjcsIDB4YzNiN2ZhOTUsCi0JMHgyMzdmYWFhMCwgMHhkZjgwOThjNywgMHg2MmJlMGJjNiwgMHgwNzY0ZDFmMSwgMHg4ZGZhMDljNiwgMHgzZjY4ZmJkNywKLQkweDIzZTRjZThjLCAweDFhYzRkZWZjLCAweDgwMzdjODJjLCAweGU1NWY0ZGFkLCAweGMwN2Y3Y2Y3LCAweDRiZjlhOWFlLAotCTB4MDJiNjMwNzIsIDB4MmNkOTJkZTgsIDB4NTY2YjI3YzQsIDB4ZGEzODU3MzAsIDB4NWRkZDQwZmQsIDB4Y2NlZWViYzcsCi0JMHhlMDU3ZWY4OSwgMHgwM2RmZGU1MSwgMHhkZWFkMjAyZSwgMHgxNmQ3MGMxYSwgMHhhYjgxNDc5YSwgMHgwNzk4Njg2YiwKLQkweDlmYjE0OWU1LCAweDUyNWQ1YzBhLCAweGY0OThlM2Y3LCAweDBmMmZkOWZlLCAweDc1YmE0MDRlLCAweDQ4Njc3NTQ1LAotCTB4NzA5MGRmZDAsIDB4OTVkOGU4OTAsIDB4NjRiOGZkZDAsIDB4MzgxYmVhMGYsIDB4NWE2Y2NmMWQsIDB4ZWYwM2NlMzYsCi0JMHhjZTNiMjhkOSwgMHgxOTg2ZGNhMCwgMHgyNjkyYmVmOSwgMHgzZGUwNTM4YywgMHgzY2I4MjYwZiwgMHhiZTAzY2Y1OCwKLQkweGVmOTBmYmIzLCAweDg3YTQ4ZGQyLCAweDc5ZDQwYjRhLCAweDY3YzE2ZTg5LCAweGRlYjgxM2NiLCAweDVjZDYxZDFmLAotCTB4ZDJmODBjN2YsIDB4YWI2MjRiYmQsIDB4Y2FmYmJjNjAsIDB4ODlkYTIzMjUsIDB4OGRhNzZkODksIDB4NzZlYjY4MGUsCi0JMHhiZWEyMzY5ZCwgMHhjYzNlYzNhYSwgMHgxOGM1Yjc1MywgMHgxMjc5NmY1MiwgMHhkNDNmNjE2NCwgMHhmNDgxZjA3ZSwKLQkweGUzYzQwZmZlLCAweDEyZjk4NWJlLCAweGQ5ZWVlMjU1LCAweGZiMWEzYjFkLCAweDU1YzFjY2Y3LCAweGE4Zjc3NjMyLAotCTB4NWQ5MWEzOWQsIDB4MGZlZDlkMmEsIDB4NzU5YjNiNjAsIDB4OWExNjQwMWMsIDB4N2U1NTkyZTEsIDB4NDhlYWNjZTksCi0JMHg1OTViNWY5NSwgMHhjZmVhYTcxZiwgMHg4MGVhMDY2ZSwgMHg5MTVlY2Y1YywgMHgxODFmOGVhYSwgMHhjZjAwYWJjNCwKLQkweDQzZjgxNjBjLCAweGU4MmU1NmZkLCAweDgzNzkyMzM4LCAweGNjYWRmNzFmLCAweDFkM2MxOTcwLCAweDZjNGRmMzQxLAotCTB4MjJiN2E1NWIsIDB4OWQ5MmY1ZGMsIDB4ZDk4N2FmZDQsIDB4N2M5OWI5ZjAsIDB4M2RlYWQwODUsIDB4ZDFiMGY1YzEsCi0JMHg1MTg5M2NhZCwgMHg3ZjIyNmU1NywgMHg4MGZiMDJiZiwgMHhkOTFhOGFkNywgMHgwZjEwOTM2YiwgMHg2ZWVmYmE0NiwKLQkweDViYmVlODk1LCAweDRiNTc3N2RjLCAweGVjOTYxZDRhLCAweGUzMDE2Y2VlLCAweDQ2YzczZGNjLCAweGUxMTBiNmQzLAotCTB4Y2VmMDJiZGYsIDB4NGIzYjJmMmUsIDB4N2FmYzI4ZmMsIDB4MzZlNTVkNjUsIDB4N2Q3MGIzYjAsIDB4MDZkYmZhNmQsCi0JMHg4ZmY2Nzc5YywgMHg0NTk3MTYyNCwgMHg1MGVjZWFlYiwgMHhhZmRkNTFlMSwgMHgxOWY3NTdhYywgMHg5ZTYwMzBlYiwKLQkweGY1MGFmNjdhLCAweGMyMDllMWY1LCAweDgzNjIwZTllLCAweDI1NDY5ZTUwLCAweDJmOTI3YTQ4LCAweGZkMjRmZmQxLAotCTB4MDA3Y2Q3ZWQsIDB4ZjNiMmUzZGYsIDB4ODNlMDA0ZjYsIDB4ZWE4ZmEzMWEsIDB4MmVjYjhmNTAsIDB4ZTFmNzJiZWEsCi0JMHhiOTIzMWQ3YSwgMHhlNDgwN2YwMywgMHg1Y2Y5MjI1OCwgMHg4YTU4NzA2MywgMHg5NWFlOGZkMCwgMHhiMjY3NmY4OCwKLQkweDJiMjE3ZjIwLCAweDcyZmE5ZTMwLCAweDA5M2RmZWNmLCAweDEzNWE1ZmRjLCAweGY1NGU1Y2VlLCAweDY1OTIzZGIwLAotCTB4ZDUyYTVjMWIsIDB4MDdlOGY0M2IsIDB4ZTc0MjkxYWUsIDB4NzAyNTk2NDMsIDB4NDE4ZDc4NzksIDB4ZjU3MDBlZjQsCi0JMHhiYjQ1MjY0NywgMHhkNzhjNjc3ZSwgMHhmZmVkZWYwMywgMHhmNDFlMzljNywgMHgwM2U3ZmJlZiwgMHhlZTUwZDgxZiwKLQkweDJmMTliZGI5LCAweGYwMjRjZGVjLCAweGViZmZkMTJmLCAweDkzOTRiNzJmLCAweDY4YzViZjdlLCAweGVjMmVmZDIxLAotCTB4MWMyZmEyOTAsIDB4YTFkYjUxYmYsIDB4Mjg4NzY5ZjEsIDB4NzliNDk4ZmUsIDB4OGJkNDA1YzMsIDB4NzkxZDdkMzksCi0JMHgwN2JlMDExYiwgMHgxZmZiZjljMywgMHg3MTc5MmRkYywgMHhlZTVkNGUxZiwgMHg0OTlmZDI0MSwgMHhkZWY4MWVjMCwKLQkweDQ3YTE2NGJhLCAweGFjZmJkNTViLCAweDIxYWY1MDkyLCAweGE1Yzg0Y2MzLCAweDE0OThhNmY3LCAweDFlOTA3NzZlLAotCTB4YmFjNTdjOTQsIDB4NDk3ZTgwYWYsIDB4NjlhOWJkZTIsIDB4ZTI1N2MyMzYsIDB4ZDcwOTE2ZTIsIDB4YWIzY2NlOWQsCi0JMHg0NWNmOGVkMCwgMHhiNDBjMmMyMSwgMHg5N2NmZWRkNywgMHhiZTdmNWE0YSwgMHhlNGY5ZmM5YiwgMHg3YmM1MjMwZSwKLQkweDlkZjhkYmFjLCAweGU3M2Q3M2YyLCAweGZjZDQzMmZmLCAweDUzYWE3Y2IwLCAweDJiZjJlMjA3LCAweGI5YTc5OGQxLAotCTB4YWZkZjRmNjcsIDB4OWIyNGRmZGQsIDB4YzFiNzcxZDQsIDB4YzdiYjhlYTIsIDB4OWZlYjUwMGYsIDB4ZGViNTc2ODksCi0JMHhhZmEyM2M5OSwgMHhjNzE0ZmVlYSwgMHgzYmZkZDUyMCwgMHhmZDU1ZjJjYiwgMHg1NGRiY2VlOSwgMHgyZjJhZWZlMywKLQkweDkyYzNmNTUxLCAweDAwZjI2OWM3LCAweGU0NGFiY2VhLCAweDI1NWU3NTAwLCAweGEzY2VhZWNhLCAweDdkZmUxZDg0LAotCTB4MzE3ODA0YjksIDB4MmUxZDNjOWEsIDB4YzgxMzQzYzAsIDB4YzA2YjA4YzYsIDB4MzY4YTBjOGUsIDB4MjIzNjcxNTEsCi0JMHg2ZDhjZGMzZiwgMHgxZjMwZDBkMywgMHgxZjUzNDlmMiwgMHgxZDg3ODcxZSwgMHgwN2Q5MzdiZSwgMHg3NjYyOThmMywKLQkweGYxMDRiMDk4LCAweDFjNWJjOTViLCAweDlhMDA3MzA3LCAweGYwM2E5ZWE4LCAweDM5YmZiNTdlLCAweDE3ZGI4NTMyLAotCTB4YjgyNWY1YTUsIDB4MzY4NDRmNWUsIDB4MmE1YjE5ZjcsIDB4MTRmZDY3ZjcsIDB4MTgyMjk4OWYsIDB4MzQ1ZThiZjcsCi0JMHhjNGE0NWY5MSwgMHhlOTNjY2FjOSwgMHg1MDA3NDU2OSwgMHhlZmRlZTQ3ZiwgMHg2YjA5YmFhMCwgMHgyN2NjMTY2NSwKLQkweDc5MTQ2OTNlLCAweGJlZjkxN2Q0LCAweDBlZDZkY2RiLCAweGJlNDgyMzlkLCAweGZhZTQ0Y2VmLCAweGUyY2UxN2UwLAotCTB4NWQ3ZjM4YjEsIDB4OTQ1OTU4MWIsIDB4MWFlZmNkYTcsIDB4ZDc1OTNlYjEsIDB4ZjY4ZDFlZDYsIDB4NWRmMzg4NmMsCi0JMHgwMmViZTYyMywgMHhkMzlkODVkNywgMHg1ZDYwNDc3NywgMHg3MjJkNzdlNSwgMHg3MmNhZmRjOCwgMHgxZmViY2YyMiwKLQkweGYyYmQ3YTE0LCAweDU0N2M0MGRlLCAweGFmYTAyYzM0LCAweGY1ZjI3NzJiLCAweDkyMzc0ZTU1LCAweDQ2YzJjMTNlLAotCTB4N2EwZGJkMjgsIDB4MmFkZTY3YmEsIDB4ZjI4YzFlZDgsIDB4MDNiYTgwM2UsIDB4ZGM2YWI3ZjQsIDB4MmUzYzY5ZWMsCi0JMHg4ZGJkMDBhYSwgMHg1Y2ZhMGM3MiwgMHg5MWFkM2Y3ZCwgMHg3M2U4MGJmNCwgMHgwMTBiZjVkNSwgMHgxNWZiOWU3ZCwKLQkweDE5YzI3NzNjLCAweGU4ZjY1ZjdhLCAweDNmMzc1ZTE0LCAweGZjMjEyYWUxLCAweDg4ZjAwMmZmLCAweDdhMmZmMjdlLAotCTB4ZjNlMzhkZTAsIDB4MTY3YWY4NWEsIDB4Mzc0NDFmNjksIDB4MjkyOWI4ZWQsIDB4YjY3YzdmZGMsIDB4NDMzZDdkMTcsCi0JMHhjOTQ5ZjVkMCwgMHhkNGNhODc5ZiwgMHhiZTIwOGNlZCwgMHg4ZDcyNjk5ZCwgMHg3YTQ3Y2NlZiwgMHhmNTg4ZGU3YywKLQkweDRiZGZjYTg5LCAweGRmZWNlZDBjLCAweDdlZDMwZmRhLCAweDAzY2VlMzNkLCAweGQyOGZiODg5LCAweDkxMjA3MmRkLAotCTB4MThkNWRmMDEsIDB4OGZkMGFiNmMsIDB4YTNiMGJlMDcsIDB4ZWFkNzUzZGYsIDB4NWI2YmY4MjMsIDB4N2FmMWRiZjIsCi0JMHg0NzY0YWI2ZCwgMHg3NWRlZWM1NSwgMHg5M2FkMGM2MSwgMHhiZDYyMzQ3NSwgMHhlMDVlYzllZiwgMHg3NmU0NGNjYSwKLQkweDhkYTI2MDY0LCAweDk4NWMwN2U3LCAweGMzZTdjMTEzLCAweGY5MDk1ZWJjLCAweGMyMTJmNDAwLCAweGNkNjI1YmI1LAotCTB4OWQ3MjdmZDAsIDB4Yjc5ZDY0MjksIDB4ZmY3YmUwNTIsIDB4NTdjNTIzM2EsIDB4YWUzY2YwMzUsIDB4NDFmYTYwZTMsCi0JMHg2OGY5MDlhMywgMHhjMjRiYWMyNywgMHgxZTliMWM3NSwgMHgzNzJmZjM4OSwgMHgxNDJmZjQzMCwgMHhmYmE1Y2VmOCwKLQkweDRmZmFlMTRmLCAweDA3MDA4N2NlLCAweDJmOTlhZmFlLCAweDJlNGZiZTEzLCAweDA1Yzg3OTE3LCAweDU4Y2ZlYTA2LAotCTB4ZGQ3ZTI0NjQsIDB4NDZiZGZmMzcsIDB4YWM5ZGVmY2MsIDB4NGJkY2ZiZTEsIDB4Zjk0NjdjMTYsIDB4MjQ4YjE5YmUsCi0JMHg4YTk5M2Y2NSwgMHhkNTdlMTU5ZiwgMHg3Zjk2YTdmMiwgMHhmNTY5ZjA3YiwgMHg5OGU5ZjFmNSwgMHgzYTdjYWJjNCwKLQkweGQwM2NlZDA0LCAweGYyMTI3NDdkLCAweGNlMjE4ZmNmLCAweGIyYjlmOTQ2LCAweGYwMDQ5MGNmLCAweGVjNWEzNzY2LAotCTB4YjA2YmFmYjgsIDB4MTEyMDdkZWMsIDB4N2UzZWM0ZjUsIDB4NTZjZDY4N2YsIDB4ZGIxYmViODksIDB4YTk4NzI4ZGQsCi0JMHgxZWI2NDY0ZCwgMHhhZTQ0Y2JmZCwgMHhiZDIwNjY5NywgMHhkZDY5NzEwYSwgMHg3YmM1MjQ1MiwgMHg0YmQ0NmNmZSwKLQkweDBlZjdjYTU5LCAweDEzYmU1NjA2LCAweGFlN2E3MWYzLCAweDk0YmYwNjZmLCAweDEwN2Q3NWJjLCAweDM5MTI5YWRmLAotCTB4NzA3YTJhYmYsIDB4NzZiOTkxOTAsIDB4YTViZmRlNTIsIDB4ZTc5ODE0Y2YsIDB4ZGJhZjAzNTksIDB4ZmFmOTg4NjQsCi0JMHgzMzFlZWRmNSwgMHgwODlmZGEwNSwgMHhlMDI3OTk3ZSwgMHgwYWY3ZmE1MCwgMHhjZDRmNjdmZSwgMHgzNDRlZmMyMCwKLQkweDViOGZiYzcxLCAweDc1YzBhYmUxLCAweDhiNWQxOTM0LCAweDg0ZmVlMTEyLCAweGQwNmJiNzhjLCAweGJmNjUzNWNlLAotCTB4NDJmOTRiOWEsIDB4YTczYjIzNjYsIDB4NDZmYmU3YzQsIDB4MTk2NWIwN2UsIDB4ZTZmYzM3YWMsIDB4Zjg2M2EyMDgsCi0JMHhlNDE2OGQ5ZSwgMHgwNTdlZjBlMywgMHg3YzEwYWU0OSwgMHhjYmVlYjRhNywgMHgzOTAyZTYzNiwgMHg0ZDljYmJhYSwKLQkweGIyOWZkMmFkLCAweGY2OTFhY2Y3LCAweDE4NWRiNzIxLCAweDM5NzI3MjQzLCAweGNmMmJhZTk5LCAweGY5MTE0YTJkLAotCTB4NTNkZmIxMmEsIDB4OWU4MjVmYzksIDB4MGJjODhmZDYsIDB4YzBmMDUzOGMsIDB4MjE1ZTE3NzAsIDB4ZDExNGYzYzIsCi0JMHgzNjUyZDk2YiwgMHgzN2QxYTc5NCwgMHhkNjY3ZmFkMiwgMHhjMGU2OTMxYywgMHgxYzE5NzczYywgMHhkNjE2NzMwNiwKLQkweDc3YzdjYWNmLCAweDUzN2VlMGU2LCAweDcxZmQ1Y2M2LCAweGI5ODk5ZDlmLCAweGNmZGZiODhjLCAweGNhZmY3ZDQyLAotCTB4YjFiZmVhNjQsIDB4NjNlZDQ2ZDIsIDB4ZDBjZmU3MjYsIDB4NWZkZjRjZGUsIDB4NGRmNjhmZGYsIDB4MmNlYTNmYTYsCi0JMHgxZDc0Zjc4NiwgMHhiNmJlMDgzMSwgMHgzYTk0YmUxMCwgMHg5OTM2YTVkMCwgMHhhNWZlZTA5OSwgMHgzNWQ1MTI1ZCwKLQkweDVkNjdmODE1LCAweDcxNWNjM2VlLCAweGRmMTVmZDhjLCAweDVkYTllZjA3LCAweDNiZTkyNmYxLCAweDMxODVmNTdiLAotCTB4YWQwZDE3MTgsIDB4N2Q4OGRkMzksIDB4YzZjZjhhZjcsIDB4MGE3MTNmYTAsIDB4ZjVmOTA3ZWMsIDB4NGIyN2RmZTAsCi0JMHgxOThlNDdhOCwgMHhjNTVkN2Y3MSwgMHhmM2NkMmI2NSwgMHgwYzdiYWVhYywgMHgxNWU3OTdjYSwgMHhhNzRkZWE4OSwKLQkweDkzMTgyZjVhLCAweDA4NjI3ZGI4LCAweDlmNTgxNmNhLCAweDE4OTVkNzAzLCAweGI3NzFmODRiLCAweGZhNzFkNTBkLAotCTB4NGFiOGYwZTYsIDB4YzBmYjQzZjAsIDB4MWU5MWEzMmYsIDB4ZDdiNjE1YTYsIDB4MGZlN2MzNmYsIDB4NzdlNTBjYzksCi0JMHhiNDc3NzE3ZCwgMHgzZGZlODQyNSwgMHhmZWIyZjMwMSwgMHg2YWQ4MWQ3YywgMHgzZDFiOTdlZiwgMHg1Y2YwZWNmZCwKLQkweGZlZjQyZWI5LCAweDlmMDU1N2E4LCAweDNlMjlhNjAyLCAweDExMjkzZmMwLCAweDU1ZmY5OWU1LCAweGFjNjI5MmMyLAotCTB4MjJmOGY3MTQsIDB4ZGIyYjhlNDAsIDB4YjFlYWNlNGEsIDB4YmJkODk3YWQsIDB4YmQ4Yzc4ZWEsIDB4ZjdiN2U0MWIsCi0JMHhiNGRmODdjNiwgMHhmNGY5YzNhZCwgMHhlMjAxZjY0MSwgMHgwN2U0MTY0NiwgMHg1NGM4ZGM2MSwgMHhiY2YwZjdlZiwKLQkweDkyNGU3YTUyLCAweGFmM2FjNDJiLCAweDFmNDc0MWNhLCAweGQ1N2EwMzY2LCAweGYzYmEwMTM1LCAweDUyMDdkZjkxLAotCTB4NWFmNzdlN2IsIDB4Mjk4ZmNhMWIsIDB4YjQ1MWZiYTIsIDB4OGViZmFjMTMsIDB4OGY1YThjZTIsIDB4OTNkOWZmZGEsCi0JMHg0Zjc4ZTVjYywgMHg3N2ViOTczMiwgMHgxMmYxZDUxMywgMHhhM2VmNDVjNCwgMHgxNDVjNDMxYywgMHhhMGRmODU4ZCwKLQkweDlkN2I0OTc4LCAweGNhMTMyNWUyLCAweDEwNzdiYzE1LCAweDEwZjllN2QwLCAweDJlNGUxZjcwLCAweDNkZjkwOGZlLAotCTB4OWYxMzM1ODMsIDB4ZTQ3M2UwMzMsIDB4M2YzYWVkMmYsIDB4OTE1M2Y2MTMsIDB4ZDcyODE5ZWIsIDB4NWNhZGJmYzgsCi0JMHgxZWYzYjVhZSwgMHgwY2ZhMmU0ZiwgMHhmYjg3NTllMSwgMHg4ZGU4NDJiNSwgMHg2YjNhYzU1NywgMHg5N2MyMzMzNywKLQkweGYwOTViMzdiLCAweDc2NmQ4ZTc0LCAweDllNWYwMzE2LCAweGZlYjAzODAzLCAweDQ2NzRlNWRmLCAweGM2N2Q2MmM2LAotCTB4OWFiNDhjZTUsIDB4NmVhMDdhMDMsIDB4YjczZDA0NzMsIDB4ZGM2YTY3MmUsIDB4MjQ0N2U4MWMsIDB4ZGYzZmJlNzEsCi0JMHgzYzQyNjI1YSwgMHhlNWNjZGFjZiwgMHgyOWRmNzk0ZiwgMHg5NDM4OGNkZiwgMHhiNzQzNDJhNywgMHhkM2Y3MGVkMSwKLQkweGEzNDc0ZWRhLCAweGZiYjg1N2RmLCAweGMzOTQzOGNlLCAweDQ3ZmNlMGRlLCAweGVkNzc1ZjEyLCAweGUzYzY3YjhhLAotCTB4ODdmODVkZjcsIDB4ZmVhNTRjZjksIDB4MzNlZDVlZTYsIDB4MDU3OGRkNTIsIDB4N2Y2ZGZlMjMsIDB4Mjg3NTZmZjEsCi0JMHgyMmRiZTdjNywgMHhjZjM3NjgyZCwgMHhhMGY0ODllZCwgMHgyNTdhZWZmZSwgMHgyODkzYWJjYywgMHg4MGM0ZjBlZSwKLQkweGU4NjczYjVlLCAweGU1ZmU0NDk4LCAweGZlODJkOTZlLCAweDhmOTVmYjlkLCAweDc0Nzk0NTFmLCAweDllODYxOGJmLAotCTB4YjZkMjViMWUsIDB4YmRkYTAyZjYsIDB4NjdiMWI2OWEsIDB4OWY2ODQzZjUsIDB4MWU1NTNmZjksIDB4NDdkYzU3NmEsCi0JMHhmZmQyOTE3ZSwgMHg4OWM5YTU3OCwgMHg5ZWJjZjQ3YSwgMHhhZDI1ODllYiwgMHhiYmJmOTAyZiwgMHgyMWE1Y2FlNCwKLQkweGI3M2VmNzU4LCAweGExODZiZmU3LCAweGYxZmY3MzVlLCAweDY3ZDQzMGQyLCAweDFhNWMzZmVlLCAweDJmZGRmNzg2LAotCTB4ZjI4N2Q2NDUsIDB4YzhhNTU2NTcsIDB4NWVjNTdmNDQsIDB4YWJkNzFkNjYsIDB4MGIxZjQzZjIsIDB4Njg2YWM4ZmUsCi0JMHg5YmZkYzMyZSwgMHhkOWE2Yzc4NSwgMHhkY2FiN2YzMSwgMHhhM2E3ZWMyZiwgMHg2Zjg1ZmFmZCwgMHgwODJkYzY5NSwKLQkweGFmYzFhZTdhLCAweDA1ZWJjMzJmLCAweGU3MjM0YWM3LCAweDQ3NjVmMTA3LCAweDJmYzk0MWIyLCAweDA3NWU1NzVlLAotCTB4MDU4N2VhZWYsIDB4M2FmYzcxZTUsIDB4NWI4YzM4NDcsIDB4N2RmM2Q3ZTcsIDB4MTc5MmQ1YjQsIDB4NWZmMDBiZTMsCi0JMHhkZjkxY2ZiNCwgMHhjZTI4YjVkNCwgMHgwNGZjOWViYiwgMHgwNWMxZjhlNywgMHg1ZjY3ZWZkOCwgMHg2MmI1NDM2ZiwKLQkweGU0MTM5MDNhLCAweGViZjBjZDI3LCAweDQ3YzA2MTdjLCAweDNlNjE2ZGU1LCAweGZhZmRlZmYyLCAweGZlMTdkNGQzLAotCTB4MWYwYmFjZDMsIDB4MjE0OTY1NDQsIDB4ZGUwMzMzZjIsIDB4NWM3YThkMTgsIDB4YmY4MWE3OWIsIDB4ZjE1Yjg0MjgsCi0JMHg1ZGVhMmFiNywgMHgzNmJmMDhlOSwgMHhmY2JiMzM3ZiwgMHg2OTBmY2EwZSwgMHg3ZTU5MzdmMywgMHgwMTYyNmViZCwKLQkweDRkNzllN2Q2LCAweDkzN2Y5ZDc0LCAweGYxNDVlNTA5LCAweGJiN2U5MTQzLCAweDY3ZmZjODQyLCAweDhhN2U5YzQ5LAotCTB4NzVmODM1NWMsIDB4N2YwNjk3NDQsIDB4ZGEwNzI5YjEsIDB4MmVmZWUyZjMsIDB4MWRmOGE3MzAsIDB4OWRkYjQzNDcsCi0JMHhkMDhmMzBkYiwgMHg0OGFlZTU3MCwgMHgxYzM1NWRhYywgMHgzYmYwY2E5ZiwgMHhiMTRiMmU4ZSwgMHg3NzNlMWZhOSwKLQkweGY0ZDMwZWU1LCAweDY4YmYwMGRjLCAweDg5MjdiN2RmLCAweDlmODBjYmViLCAweDNkZWVkYTEwLCAweDlmZjllNDI3LAotCTB4MjdiNmZmNjUsIDB4ZmZjZmNkNWQsIDB4MjBmZjZkNWYsIDB4OTQ5OWRmMGUsIDB4NGNmODcxNDAsIDB4NzFlMTI3OWUsCi0JMHgyODZlZDZiOCwgMHhmNzk5NThmYSwgMHg5ZWU3NDE1ZCwgMHhmOTJjZjhmYSwgMHg5MzJmMTAzNywgMHhjOTM3N2UzZSwKLQkweGRhZDJlMzQ2LCAweDFjNTFjNGE2LCAweDljNWE3YzdkLCAweGZlNzNkY2NkLCAweGNlYmI3YWJlLCAweDdlNzNkYjlhLAotCTB4N2I3MzhmYzUsIDB4MTg0YzA3MWMsIDB4M2VmODM4ZTcsIDB4ODkzNGY3MzEsIDB4N2UyYWQ1ZjYsIDB4OTEyOWRiOWYsCi0JMHgzMGFlZWUzZiwgMHgwMjljNzE3OCwgMHhjZjFhN2Y5NywgMHgxODc3NGVhYiwgMHhjMDUyZTFiYywgMHhjN2ZjNTQzZiwKLQkweDEyZWRmN2FiLCAweDQ5ZmM1N2RkLCAweDNiZjQ2ZmM1LCAweDVhNzcxZTc5LCAweDk4ZmZiZjAxLCAweDA5MzI3NWM5LAotCTB4NzBiZTQxZWIsIDB4OTIzODVlYmEsIDB4NzljYzY3NWYsIDB4NzdmYTE1MjAsIDB4MjQ2MjUwZmQsIDB4NTQ5ZmMyZmYsCi0JMHg2ZmViNTRmOCwgMHhmYmViNmM1ZSwgMHhiN2U0ZmJiNSwgMHhlNDU0ZmUwOCwgMHgxZjIzNDMyYywgMHgxMDhhZmQ4YSwKLQkweGZiNDNhYTc4LCAweGZiZjY4NzFkLCAweGFlNWY5NTBiLCAweGY3ZWMxNzlkLCAweDhlN2EyNGI5LCAweDZmMDVmM2QxLAotCTB4ZTJhMTlkZTksIDB4ZmU2Mjk1ZjMsIDB4YTBmZDIwN2YsIDB4MmZlZmYzNGQsIDB4OTlkMzc4NDIsIDB4ZjZiOWY2OWYsCi0JMHg4NWJiNTc2NiwgMHhmZGRiZDM3ZiwgMHhjZjI4NmY4OCwgMHhmODlkODQwMywgMHg0ZTczYzk2NywgMHg3OTBjZmZmMiwKLQkweGY2MTdlYWJlLCAweGUxZGQ5ZGYyLCAweGM5YzFhMmU0LCAweGRlYjk3ZjQ4LCAweGY3ZjI4NDVmLCAweGZhYzg0MzY3LAotCTB4N2Y4MTE1ZjQsIDB4N2M1NTczODgsIDB4YThkZDIwN2MsIDB4NWRjOGI4YzMsIDB4NGQwM2YzY2QsIDB4MjlkN2I2YjEsCi0JMHhkMzJjMzk3ZSwgMHgxMDI1ZWJmZSwgMHhiNmZmYTIwNywgMHhkYTg1YjJmOCwgMHhhMTkzZjQxYSwgMHgzMWNjZjk5ZCwKLQkweDk5OTdlYTAzLCAweDliZjg2YWQ1LCAweGNmOGI3NzMwLCAweGEyZjJjZDJmLCAweDRhYzk1Y2RmLCAweGQ5NTRhZjI5LAotCTB4ZmRjMTZiMTYsIDB4MmQwOTRkY2MsIDB4M2NhZTUxMDcsIDB4YjZkYjY0ZGIsIDB4MDZlYmYxZTAsIDB4OWUyNmYxOGEsCi0JMHhhNThlYWI2ZiwgMHhlMzRjOTNmZCwgMHg2YmQ2NTQwNywgMHg1ZmI1N2RmZCwgMHgxM2M4OWI3MCwgMHhmYzFmZTZmNSwKLQkweGViOWMzZGExLCAweGM5MzI0Mzk1LCAweDk3ZTYxZDc5LCAweGQ4Y2M2MTZlLCAweDdiODJmNWM2LCAweDRkZTUzODQ1LAotCTB4Yjg0MzVlMzAsIDB4NzkyMTVjM2UsIDB4YWQ3NzAwNGQsIDB4ZGVhMWY3MTgsIDB4YWEyN2Y5NGYsIDB4YjM5MGMxYTcsCi0JMHg1MTEzMWI2ZCwgMHg1ZDQzOTkyZSwgMHhlYTdkYWEzZiwgMHhkYTliZDIyZCwgMHg5Nzc1OTIzYSwgMHhhZDVkMGJhOCwKLQkweGIwOTMwZDFiLCAweDY0ZjEwYjVmLCAweDM2OTdmYTEyLCAweDNmYzQ2NGRiLCAweDQ3ZGFhN2MwLCAweDE3MDVmOGE2LAotCTB4ZjE0N2JkMGYsIDB4YmNkZGNjZTcsIDB4N2VhM2QzZmUsIDB4ZDc4ZTM0ZDQsIDB4MGQzZWM0OGYsIDB4NzY3MjFlNmQsCi0JMHhhOTAzYzFlNiwgMHg4ZGQ3NmJiNiwgMHgxOThmNWFlYSwgMHhlMWU4YWUzMCwgMHg4ZWZjNjg3ZiwgMHhmM2FiMjY5ZiwKLQkweDllN2E5OThjLCAweDkzNmNjZGM3LCAweGNhOWY5ODJjLCAweGJlMWM3ODE0LCAweGVhZmM4MjJlLCAweDFmOWY3ZjMxLAotCTB4YTE0MGZhODcsIDB4MWMyOWY5ZDMsIDB4N2U0ZmU3YWYsIDB4MDQ1YjQ0NWEsIDB4ODRiN2FlZmUsIDB4NzBmZWJhYzMsCi0JMHhhOTliZjk3MiwgMHhkOTMzNmZiYywgMHg5MWU1YjlmMCwgMHhkZmY0M2RmNCwgMHhiYzQ0ODllZiwgMHhkYzVhMDFmZSwKLQkweDA5ZDJmOTk3LCAweGE0N2NjODdkLCAweDFmZTVjMjk0LCAweDkzY2ZlMWVjLCAweDJmZGUxZWQxLCAweGIwN2FkMmYyLAotCTB4N2M4MTUxODcsIDB4OWIzOWY2OGUsIDB4YzIwOWFlNzgsIDB4ZWU2M2NhMTQsIDB4YTZmZGY1ZTYsIDB4ZWEzOGQ3MTQsCi0JMHg2ZDliMzJmZiwgMHg0MWQwZmYyMywgMHg4MDE3ZTc3OSwgMHgzNDVmMzFhZiwgMHhmNThiMTYwOCwgMHg1ODIyZTdlNywKLQkweDlhOGJkNjAzLCAweDkyYWY1YzEyLCAweDY3NTJmZDFjLCAweGU3ODIzOTQzLCAweGQ5ZTRjZWE5LCAweDg4ZmIyMzY5LAotCTB4Y2U3YWMzMjgsIDB4MjY0OWIwMTAsIDB4ZjdjMGQ3ZGEsIDB4NzQxNDBjNDcsIDB4MTYzODgxNGMsIDB4Y2QwMDQ5ZWIsCi0JMHgwZjM3YWMzNCwgMHgyMTlkNzUxMiwgMHhmMzhmNGMxMSwgMHhhZDcwNjgzZiwgMHg0OGViMTliZiwgMHgyYWZiN2FlZCwKLQkweGRjN2IwMjEyLCAweGY1OWVhODk0LCAweGViYzFjOTI1LCAweDQ5OWQ0YWUyLCAweDU2Zjc4ZmE5LCAweDNkZjA5MjY3LAotCTB4YWYwZTFmN2MsIDB4NzI3ZDg5MmIsIDB4ZmQ4OTNkNGEsIDB4YWU0NTQ5ZDAsIDB4MTllYTIzMzUsIDB4Njk0OWFkYzYsCi0JMHgwYmVkYmJlYywgMHhmOWU3NTllYiwgMHhkYWI5YzYzYiwgMHhjMDQ3Y2YzYSwgMHhhMTNmM2NlMywgMHgxZmFlMmJhZSwKLQkweGU5ZjEzY2YwLCAweDBlMjdhZGI3LCAweGI4Mzc2NjQ4LCAweGEzZjFjNWZlLCAweGY2MjBiYjg1LCAweDViYzUyMjYyLAotCTB4NjhjZmY4ZmYsIDB4OTc2ZGIzYjIsIDB4NzU3NjFlYzgsIDB4ZTUzZjMxODcsIDB4OWU3ODNiMWQsIDB4ZWY3ZjhkYmQsCi0JMHg1YjcxMDVkMywgMHhiZDlkOTA0MiwgMHg3YjViZjg0MywgMHhmZjg4NGFkYiwgMHgyMzRiZjk3NywgMHhiMGJkN2M3MSwKLQkweDRmOGVlYmUzLCAweGQzYmYxM2JiLCAweGI0ZjVmOGYyLCAweDFlMzE4NzJmLCAweGViZjJlZDg3LCAweGI5NmZkMTBiLAotCTB4MjJmOTc0ODEsIDB4Y2RmZDQ0MjksIDB4OTNlZGMxMTQsIDB4NGI5ZThlNTYsIDB4ZTdhNGY5ZTYsIDB4OTQ3ZjM5OTIsCi0JMHg5N2YxZTQ5YywgMHhhM2FmMzk3YiwgMHg3MDVlODQ1OCwgMHgwZjQ5MTk5NywgMHg5NDRmNGMxZSwgMHg1Mjc5ZmM5NCwKLQkweGVlY2IzYWE4LCAweDk1MWJiMjZlLCAweDNmZGEyNDhiLCAweDk2NzVkZDdiLCAweGI3NjE3NmQ2LCAweGIyZTlmOTM0LAotCTB4N2IzN2E0MzEsIDB4ZDUwNzViY2IsIDB4MzNmNzU1Y2QsIDB4ZTEzZWM0NTIsIDB4ZGQ3ZjNjYzEsIDB4ZjVhMTZjOWMsCi0JMHgxNjg3ZWI1YSwgMHhhY2E2NGJhMSwgMHhlMWQyMDZmZiwgMHg1YmY3Y2E2OCwgMHhmM2VhZWQ2NywgMHgyN2JmY2VmZCwKLQkweGRjOWM4NDIxLCAweGZiM2ZmOWMwLCAweDQzOTdlNzllLCAweDM4MWJhN2U5LCAweGVmYzRkZjdmLCAweGY5M2ZmZjE3LAotCTB4Zjc5ZmU3OWUsIDB4NjQ2N2UzM2QsIDB4ZmZmNDNkMjgsIDB4NmQwMDNlZWEsIDB4MmZiYjVmOWQsIDB4MGZlZjViNDAsCi0JMHg4M2MwYmMzYiwgMHgxYjRhZDZmNywgMHg5YWQwN2RiYSwgMHg5NzJjNWZhMiwgMHg2M2ViNTU0MCwgMHgxZGExMzI5ZiwKLQkweGQ3OTIzMDlkLCAweDlhOTVkNmMxLCAweGMwYTU1YmJjLCAweDVmMDUwMGZlLCAweDFjNzk1M2E3LCAweGUwYmRjOTYxLAotCTB4NjczYzAzODksIDB4NzFhNWZjMzgsIDB4YzkxYjI3OTgsIDB4MGFlZTBlMjgsIDB4YTYzMGY1ZTcsIDB4YTE0Y2E0YjcsCi0JMHg5NDk2ZjZmZCwgMHg5YjM3YTBhOSwgMHhlOTVlZjk3YSwgMHg2ZjVmMzE0MSwgMHhhZDNkMjQ3NiwgMHgyMTRhNzBlOCwKLQkweDk0M2M4ZWZmLCAweGVhMjU5NmJmLCAweGJlNTY5NjUyLCAweDZkZTk5NmRmLCAweGJkZTk1MzI5LCAweDg3ZjQxNGI2LAotCTB4ZWJmM2Y2NjIsIDB4ZDhlNjNlZDEsIDB4YjJkOTcwNGEsIDB4NjgzYzUyYTYsIDB4MWVmODQyY2IsIDB4ZWI1ZWY1MTEsCi0JMHg5ODU5ZmViOCwgMHg1ZjgyYjY4ZiwgMHg4ZGMwZjU4OCwgMHg3OGE0MTc1OCwgMHg5NGUzNDJkNiwgMHhjM2VjY2RmNywKLQkweGMwYzQ3ZGUxLCAweDdhZGZhYzI0LCAweDk5ZmJlNjZlLCAweDU1NDJmMzU4LCAweGMxODhlZjNkLCAweGEyNDczOWQ3LAotCTB4ZWEyNzVlN2EsIDB4NWYzYWEzZWIsIDB4ODI1OTkzZWUsIDB4YjliZjAxODksIDB4Njc1NDJjYmIsIDB4ZmZlNDZkN2MsCi0JMHg1YmJmYzAxZSwgMHg2NWJkZjVlMiwgMHgxZjY0M2UxNiwgMHhjNzAwY2RjNiwgMHhjNGY5M2RiMiwgMHg4ZWY3MzNiZiwKLQkweGM2MDU0YmZjLCAweDFjZmMzOTFkLCAweGE1NzExZTkwLCAweDEwOWMxN2M4LCAweDVmMjUwZWY5LCAweGRlYjVkNGEwLAotCTB4NTM5Mjc5MTEsIDB4YjY4MTdmOTgsIDB4ZDAyMWYzMDMsIDB4Mzc3NDdkNGEsIDB4YTE0OTNlZGEsIDB4MTIyM2M3ZWMsCi0JMHg4ZTc5MGZjZiwgMHhiZTUwZmNmMiwgMHg3ODM3ZGVkMSwgMHhjMGI0NjRkZiwgMHhhZjFmMWNlYiwgMHg5ZWY5Mjg1YiwKLQkweGY5M2Q2MmVkLCAweDYxN2Q5NjNmLCAweDM3ZTY5N2UwLCAweDlkYTIzNjBlLCAweDhmNGM2ZmNmLCAweGMzODg3NmMwLAotCTB4ZWYxMmMzYWIsIDB4NzUzYmY5OGMsIDB4ZjE0MmZkMGEsIDB4ZWUxZjcyNTEsIDB4ZDQzYmFjOGYsIDB4MTdiZDc1NGQsCi0JMHg5OWZlNzUzNCwgMHhmZjc0OGM3ZCwgMHg5OWM3ZTBiOCwgMHg5N2Y1MTg3ZCwgMHg0MWFmZDNmNSwgMHg5NDY2MzFmNywKLQkweDRmNTUwZTQ1LCAweDE4Yjg4NGFhLCAweGM0ZDM5Y2UxLCAweDVkZjA1NmUxLCAweGUwOTViM2U5LCAweGU4MWY0ZTdiLAotCTB4YWYzNmM0NmUsIDB4ZjI4NGFiM2EsIDB4MWExNzM1ZWQsIDB4NWY3MzdmZDEsIDB4NzZmMDc0YjksIDB4NmQxOTk3Y2EsCi0JMHhlYWNjNGYxOCwgMHgyZWRkZTc1MCwgMHg5NmZkZjJhNSwgMHg3YmZjNDgyZiwgMHgzZDU4Y2Y0YywgMHg2M2Y5YzdjNSwKLQkweGQ2M2ZjNGY1LCAweDVmOGE3MGNhLCAweDliMjYwNmFkLCAweGZiODUzZmIxLCAweGYxNjU3OTQ1LCAweGQzNjdkODI1LAotCTB4Y2MxZmM5NjIsIDB4NWQ4YjY0M2IsIDB4ODNjODFiOTAsIDB4NGYyZWM3NTksIDB4YWI1ZDNjNDAsIDB4ZDNlNGFhYmUsCi0JMHg0NjM5MzMxZSwgMHg2ZGJmM2QyMiwgMHhjOGY2YjU3ZCwgMHhhYTU3ZGE3MSwgMHg4YmMxNGJhYywgMHhhZGVkMjc1MiwKLQkweDczZWNhYWJlLCAweGFhN2Q5NzcwLCAweGQ2ZTE5N2RhLCAweGZjYzE4Zjc3LCAweGQzOWVmZTYzLCAweGQyY2ZiMTQ2LAotCTB4YTgxNTljOTIsIDB4YmVlZmU2YmYsIDB4YTU1Nzc1NDAsIDB4YmZhZWVhY2UsIDB4M2MzNTdlNDAsIDB4ZTQ5MGU3NDcsCi0JMHg0MDUzZjkwMywgMHhjOTVhZWU0ZiwgMHgwMjJmYWZlYiwgMHhjMmI2ZDgzYywgMHhkNzAwMWRmYSwgMHg2YzdlYjBjYiwKLQkweDc4ZmQ2MGRiLCAweDAzOTU5NWZkLCAweGI0YWRmNWE4LCAweGU1NzdiYjUzLCAweDZkZGQ2YTA4LCAweGViNWVhODE3LAotCTB4N2Y2M2QzZWEsIDB4MWVmM2Q1MjQsIDB4ZmFmMzlkOTcsIDB4NTI0N2Y3YTgsIDB4OTNlZjViNWYsIDB4YzZiZTc4MjMsCi0JMHhkZjQwYzg3ZCwgMHg5ODhmYjgyYiwgMHhiNTE3N2Y0OCwgMHhmOGM0YzljZCwgMHhhZTYzZjNlMCwgMHgwZWJiODQ0YywKLQkweDdjNDE2ZGViLCAweDBmNjFkZTcxLCAweGNlMzE3M2M3LCAweDU4ZTFlZDNiLCAweDNmNmZjYjY3LCAweDJmZmRjNDZiLAotCTB4MTFiZjdhNzUsIDB4NzEwMDYxZjMsIDB4NzQ0ZDZlMmEsIDB4ZjdjMGJhZWYsIDB4ODUxNWI2ZjcsIDB4NTlhZjdlMjMsCi0JMHhmZmZkNmIxNywgMHg1MzZmYjE3NSwgMHgyMDJhZmIxNywgMHhmMjQ3YTQ5ZiwgMHg1NmM3M2E5YywgMHhjMjM5MGY2YywKLQkweDg5ZTkwNDE3LCAweDRmNWU0ZTc1LCAweDRkOTM5NzU5LCAweDk5YzliODcyLCAweDY4M2YzYjFkLCAweDllMzI4NmJlLAotCTB4Y2Q4ZWIwYmYsIDB4M2ViZTBmMDksIDB4ZjM0MGNkMzUsIDB4YTA5Y2YxNWIsIDB4MTU2ZmVmMTAsIDB4ZWEwNmVjZmEsCi0JMHgyMTNlZDZlZCwgMHg0N2YzYjZmYywgMHg0OGRkZjQ0ZCwgMHg5OTg1ZWVmYiwgMHhlYTVmYzQxZCwgMHhiMmJhZGM3YywKLQkweGZkZjg5OWY5LCAweDE4NDRlN2JkLCAweDc1ZjNjN2ViLCAweGQzMWM3Y2FhLCAweGNiN2FlM2Q0LCAweGQzMmNjZGNiLAotCTB4Y2UyOWMyMzksIDB4YmI0MGNlZWEsIDB4MzE5YmNkYWQsIDB4YjcwNjc3N2QsIDB4N2U1NDhlZWIsIDB4OTUyNzgzNWUsCi0JMHhlYTNkNjA4ZCwgMHhkZTY1N2Y3MiwgMHhmYzYwNzJiNywgMHhkOTFkMzI4YywgMHg5NzNlYTUwYiwgMHgyYjY3YTY1NywKLQkweDU2ZjMzZjgxLCAweDk3NTRiYzE4LCAweGE2OWZkMzJiLCAweDZjNmUyMmZiLCAweDIyYTVlNGIwLCAweDYyM2E5ZjlmLAotCTB4NTdkYTg0YjQsIDB4YWE3YjJmNmQsIDB4Yjc5ZTFiMjksIDB4NWM3NjQ4ZDcsIDB4NzdlYWI1ZDYsIDB4YTNlZGFkOTUsCi0JMHgxNmZkNjk1MywgMHhmMTI0ZTUxOSwgMHg1M2VmYTMyMCwgMHhmOGYzZDY3YiwgMHhkNjNjZWY3ZSwgMHhlMzBhNTRkYywKLQkweDgyY2U4ZTU4LCAweDY3OWI1MWY2LCAweGJmNDMzZTQzLCAweGVmODc5YjQ0LCAweDRiYmJmNjEyLCAweDQ4YzFjZmQ4LAotCTB4OGY5YzA0ZGIsIDB4NzNjYTRiZmIsIDB4NGQyOWZlNWEsIDB4YWYzNmJlOTUsIDB4ZmRjYTkwNWYsIDB4YmNiMjg2YWEsCi0JMHhkZjQ4Mzk3NSwgMHhmNjg2M2EwOSwgMHhkOGFjYTFhNCwgMHg5ZjM0MTM5NCwgMHhlMzRmNTUyZSwgMHg2MGZhYzExZSwKLQkweDkwN2Q3MDdjLCAweDc1YjUwMWQ3LCAweGU1Y2Y0NTQxLCAweDA2MzE3ZmI3LCAweGY0MDliZGYxLCAweDc3MzFkYTM1LAotCTB4ZTQxZmFmMzIsIDB4MDg3NDUyYmYsIDB4NGUwMDQ2ZjUsIDB4Yzk0ZGJlYmUsIDB4OGViN2JmNTcsIDB4MGM1ZDdjNjUsCi0JMHhmNjc5Y2JmNywgMHhjYjlmOTQ0OCwgMHhkZWU5ZjA5YiwgMHgxMzlmYzQ0OCwgMHhiNWVhMWVlYywgMHhjYzZiMzkyMywKLQkweGU4MjY4ZmE4LCAweDFkZmJmMTBiLCAweDVhYmE1M2I3LCAweGQyN2FjMjY3LCAweDhmNTdhZjlkLCAweGYyMDllZmMzLAotCTB4ODYzZDBmYTcsIDB4NjE1ZTlmNzgsIDB4Nzc4MGZkYTAsIDB4MDYzZTVlYmUsIDB4MmZmNjJiYWYsIDB4ZDVkNmZhN2YsCi0JMHg4MDdmNzgxMSwgMHhlMWI3MGY2NCwgMHhiYzYyYjJmZCwgMHgwZjg3N2UzZiwgMHgyMjZjZTkzMywgMHhkY2ZhMDc0MiwKLQkweDhmNTNhNDdmLCAweGM5OThmMzcyLCAweGYwMGE5ZDk1LCAweDc1MTE0ZmU2LCAweGE3NmUwYWE2LCAweDMxNGRiN2E3LAotCTB4YWE0ZmVlMzAsIDB4ZjRiZWU2ZWMsIDB4NzQxZjI5Y2YsIDB4ZWE5ZjJkYTksIDB4ZWZiODcxNDcsIDB4YWY2MDM3MjEsCi0JMHgxZDgwZjdmMiwgMHhiMWQ4MGE4YiwgMHg0YWJmNmFlZiwgMHhjZjg0MmQ1MywgMHgyMThlYzA1YiwgMHhiYzI5ZDYzYywKLQkweGJmYTVhZjNlLCAweDM3YmZkMDRlLCAweDFlOWJkNGJiLCAweGU3ODNmYjQ2LCAweDRhN2NhMGE4LCAweGI4ZWQzZGM5LAotCTB4YzMzZWYzMGQsIDB4ZjA5NzVmZDEsIDB4Zjk1ZTk1OTAsIDB4NmZkMGE5NmYsIDB4NzNmOGJkYjEsIDB4N2FmODBhZjcsCi0JMHhmYWQ1MzdkZCwgMHgyZDMzYTljZiwgMHg1MjFmZmQ0ZCwgMHg5N2YxMTI2NywgMHhlMjUyNmY1MiwgMHg5ZTA0ZDdiNSwKLQkweGExNzVmNjk1LCAweDc3ZjNiZTM3LCAweDQzNWM2ODBjLCAweDBkNjBjNzdlLCAweGFjYzMxZGZkLCAweDQ0ODczYTE2LAotCTB4ODBlMThlZjksIDB4OGNlZDE1OTEsIDB4ZTJiM2ZkYzcsIDB4OTNhZjI2YmIsIDB4OGYwM2E0ZmMsIDB4MzdmMWI1ZmQsCi0JMHg5MzVkZjhmMSwgMHg4MDY3Mjc4NCwgMHg3NjQ2M2MzZCwgMHhhZThmMzk1ZSwgMHg5ZTYzZWRhZSwgMHhmYmUxNmQ2ZiwKLQkweDQzNWI2YmMwLCAweDk5MTJlYjlmLCAweDI5N2JlZGM2LCAweDMzZWE4N2FjLCAweDk4ZWQ3ZjYyLCAweGU0NGVhMjVkLAotCTB4NTk2ZDdhMzAsIDB4NGZiY2I3OTgsIDB4NzRiNzljMWYsIDB4Y2EwOWZjZGIsIDB4YzUyZjVkYmUsIDB4NjYzY2VhN2IsCi0JMHgzYWNiNzk2ZiwgMHg2YWZjM2JlNSwgMHhkMWRmOGVjOSwgMHhkMzFlNzc1YywgMHg3ZWUxZjdjMSwgMHg0YmU2M2NkYiwKLQkweGNlM2FlYWE5LCAweGFkMGIxNDgxLCAweGQxMjVkY2JmLCAweDlkMjY0Y2I5LCAweGU3ZjY4NmIzLCAweDQyNTkyMmJmLAotCTB4OWEzZWViZWQsIDB4YmM3NWU1Y2EsIDB4NmQzYzgzYTgsIDB4ZjRmMWZjZTQsIDB4OGJlZDEyYWQsIDB4OTBlZGVmYzcsCi0JMHhjMmJmNGZlZSwgMHgzYTc5YjdiZiwgMHhhMzZmN2Y4ZiwgMHhlZjk0M2RkNCwgMHhkNDBlNmU2OCwgMHgzYjNiZTgzZCwKLQkweGU1MWJmYmU1LCAweGZiZTUxYTdiLCAweDIzOWIyOWNkLCAweDA3ZTIzY2U4LCAweGRjYzkyZDBkLCAweDVmMTBmNWVmLAotCTB4ZjYxZTJiZmUsIDB4MzBkMGY1ODAsIDB4NWU0YTFmNTYsIDB4ZmQxNmE3NzcsIDB4YmI4ZDJhNmIsIDB4NDc2ZjcxZTEsCi0JMHgyOWZmMDg2YSwgMHg3ODQ4ZTMwOSwgMHg1ZWQ0OTljZiwgMHhhOWIzODVlMywgMHhmYTgxNzhlYSwgMHg0NmUxNzhkYSwKLQkweDRiZWUzZGQ1LCAweGRkN2EzNzY1LCAweDhkZjk0MjAzLCAweDJkZmU3MDM3LCAweDliZmNmM2RmLCAweDRkNmRkMTQzLAotCTB4MTVmM2U4NzgsIDB4MWQ0NGQzMmIsIDB4MzgwZTczNWQsIDB4MjQ1ZGYxZWIsIDB4OTI0ZGViYjcsIDB4NTFiNzJmZWQsCi0JMHhmNTQwZGQzZCwgMHgzNmFmNDU3NCwgMHg3M2Y5ZjE0NSwgMHg3YjRhN2NjNSwgMHhiM2Q3MWE0NywgMHhmOWQwODY0ZCwKLQkweGRjNjJhOWIyLCAweDI4MzFkOTQ2LCAweGNmNDFkYTBkLCAweDgzOTdmM2E4LCAweGNiZjlkNDViLCAweGU3ZDU1YTViLAotCTB4YTlmNTBjODUsIDB4M2ZjOTAzY2YsIDB4YTYxZjNlYTQsIDB4MWYzZWFmZDAsIDB4ZjUwOWY4NjYsIDB4M2IyMzMwZjksCi0JMHhkY2MzZTdkNCwgMHg3Y2ZhYTFmNiwgMHhhYjc0MWY5OCwgMHg1ZmI3OTdmMywgMHg1ZWY5YWE5ZSwgMHg3N2NmY2JkMywKLQkweDdlMGRjZTAyLCAweDRmMzRjNGFlLCAweDRlOGQyZTczLCAweDg0NGQyZTczLCAweGNkMWE1Y2U2LCAweGRlNjIyODM5LAotCTB4Y2QxZjRmMmMsIDB4ZjVlYTM0ZjksIDB4OTcxZWIxNTksIDB4YjhmNWZkN2IsIDB4NDRkOGZhNjcsIDB4Mzg2ZmFlM2QsCi0JMHg1OTQ4ZjczZSwgMHg2ZGZhMzg0ZSwgMHhmZmQzNzdjYSwgMHg5N2NjZjgyMSwgMHhmNDhiOWFlNiwgMHg1YjFlYWQ3MSwKLQkweGIxZDU3Yzg3LCAweGYzMDMyYzJhLCAweDI5ZDVhZTJlLCAweDgzZjAzYzcyLCAweGJlODkyMWViLCAweDlkNWUyZjliLAotCTB4ZTY3YmZiNDIsIDB4M2YyNTBjMzUsIDB4YzgzOThmMjksIDB4NjM4Y2FhNGYsIDB4NTg3M2NmMjEsIDB4ZDZmNWM2OWYsCi0JMHgzMzAzN2FkYywgMHg2Y2NiZTBjNiwgMHhkMGE4MWQ0NiwgMHg1YjEyNGQ3MywgMHg3OThkZWRjZiwgMHgzNTYxZjAyMiwKLQkweGJiNTg3Y2UzLCAweGQ1MzQ1OGVlLCAweDU5ZGQ4NWJkLCAweGFhYzE1MWM0LCAweGI5ZDIxN2ViLCAweDVkNzNkYTBkLAotCTB4MzE4YjU4NmEsIDB4YmM1OWU2MDUsIDB4NDFlNDlkYTEsIDB4NjI4YmNlN2IsIDB4OWU2MmRjODcsIDB4N2RmNTE2ZGEsCi0JMHg4MTcwZGIzNywgMHgxZDY3ODljZSwgMHhlZTMzYjQ0NiwgMHg4NmZkZjU1NiwgMHhiMzJmNTEzNCwgMHg4ZGNhM2IzMywKLQkweDEzMjhiZWViLCAweDAyYzU5N2ZhLCAweDQ4MzY3MzJmLCAweGNlMGZhYzE2LCAweGI4NGY2ODZiLCAweDBlZjNmYTBiLAotCTB4Mjk2ZjE0YzksIDB4Y2UzZDYxNzgsIDB4NzNhNWM5ZTEsIDB4ZWExZTJmZDIsIDB4NDVmM2ZlNDcsIDB4YzcwOTJkOWIsCi0JMHhiYzc5YTJiOSwgMHhjMzVkZTkyMCwgMHg5YzY1N2FmMSwgMHg1ZjllMzg2YiwgMHgwYTMyN2RkNiwgMHhhNzYxZjFiZiwKLQkweDVmYzhlYjJmLCAweDA4NjgxZjAwLCAweDM2MTY2ZGY5LCAweDNiY2YzODI0LCAweGM0NDk2MGM3LCAweGRkODc4YjNjLAotCTB4YTY3MTRjOTMsIDB4NzU5NTdiODgsIDB4YzcxMDRkYmIsIDB4ZTIxZjYzNDYsIDB4ZTkzZWJlNTQsIDB4NDZlODg5MmIsCi0JMHhmYzFiYWQyNiwgMHhmODBmN2MyMiwgMHg5YWM3MTQzZiwgMHhmYTE1Njk5OCwgMHhjZDZkNjczZiwgMHgzYWZhZTg4OSwKLQkweDVmOTAzMDFmLCAweDJjNDc3NzMxLCAweDFiNzMxNWY5LCAweGZlNzg4YzRhLCAweGIxNWRkY2MxLCAweDc5OTY3ZmI0LAotCTB4YWUzMWM3MWMsIDB4YmE3OGU4NTUsIDB4MzI2MGZmMjEsIDB4MjViNzNiY2MsIDB4ZTlhYjJlY2IsIDB4MTcxMzhhYTcsCi0JMHhlODU2OWQzNywgMHhiYTBkNzlkNiwgMHgxYmEyODY3NSwgMHhmZDc1NGJkMCwgMHgxN2UxMzRlNSwgMHhmYmIxN2EwOCwKLQkweGJkZmJlOGUzLCAweGZhMDdhNThhLCAweDYyZWZiZTYxLCAweDBlZmQzODdkLCAweGMwMzhjZjQ1LCAweDVhNjRmNWMzLAotCTB4MjlkZTJhYmMsIDB4OGUzNTczZWIsIDB4MmZiYTczYTMsIDB4YmEyNDI4NmQsIDB4ZjY1NWU5NjksIDB4ZTM4NmYzZGYsCi0JMHhhZmVjNTVmNywgMHg4ZGZkMGM1MSwgMHhmNjZjYmVjYSwgMHg1YjNlYjg1NCwgMHhiOTU1ZjJlMiwgMHhmYTE5NmM2NiwKLQkweDdkMGE2ZjM5LCAweDhiODhiYWY4LCAweDA0NWM2MThlLCAweDE4OWJmYzdlLCAweDJkZmY0MTE3LCAweDA1ZmQxNzExLAotCTB4NGY2ODIyZTMsIDB4NmQwNDVjNjIsIDB4NGZmZjM4YTcsIDB4MDA2MDMzOTEsIDB4NDI5M2Q3ZTIsIDB4ZDU1ZTRlYmUsCi0JMHgzMTkzY2JmMywgMHhkZmY2NTY5ZiwgMHg4MGVhMTY2ZiwgMHhiNTNjMTJlNywgMHgzM2E3NDY5MywgMHhmNmExZDkzNiwKLQkweGE5YTdjYmE3LCAweDgzMGVlOWZkLCAweGVkMzI0YzY1LCAweDgxZjVlMjZiLCAweDU0ZGJjZWI5LCAweDY2ZGU5OWUzLAotCTB4MWIwNzNjYzQsIDB4NGViODFmOTAsIDB4YzQ2NmM3ZjYsIDB4MDk4Y2M3M2MsIDB4M2ZmMWFhNzEsIDB4ZjU1NTRhNmMsCi0JMHgwYzVmYTAyZiwgMHhlYjI5NGRmMCwgMHg3NzdlYmFhYiwgMHg3ZjU1MjBjNSwgMHg0MjQwNjVjZSwgMHg5NWFmNzIzZSwKLQkweGUyMmNlNzlmLCAweDI3OTRjYTI0LCAweDlmMGRlYTA2LCAweGZhNGYwZmQ2LCAweGU5ZmJjMDExLCAweGQ3ZGQwMzExLAotCTB4ZWJhMTQzZDIsIDB4Y2EzYWNkZmMsIDB4MGNkYmNlZGYsIDB4M2I3OTgzNmIsIDB4NWM5MWU3OWIsIDB4OGEyMjdjN2QsCi0JMHhkYzY5ODdjZSwgMHgwOGRhZmY5MSwgMHg2MWRlOWZlOCwgMHhhNzY0ZmRhMCwgMHhjMjFlZTIxYiwgMHhlZjRmYWFmMywKLQkweGVmYzY4ODQ4LCAweDMyOGQ1Y2YyLCAweGI1OWU5MWYzLCAweGU2NTU5ZTkwLCAweDQ1NTg2OTJkLCAweGM3MzA3ZmJmLAotCTB4Zjk0NzY2MWIsIDB4ZjNkZmIzOWYsIDB4ZmRjN2QyYjgsIDB4MDY0NWI0MDEsIDB4ZWNiOGUzZTUsIDB4M2Y0NDQ5ZjUsCi0JMHg3Yjc3ZTEwNywgMHgzZmM1ZTUzOCwgMHgwNThmMzAzNCwgMHgxZDc5Y2JmYywgMHgyNTBmYWUxYywgMHhiM2ZkODBkNiwKLQkweGZmZjRlZmUxLCAweDZlNzFjMDExLCAweDBlOTU3MzYyLCAweDQ4ZjkyOGZkLCAweGU3Y2JlOTAyLCAweDViN2M4NjY1LAotCTB4ZTc0MGQ0YjEsIDB4NGI3YTJmMDksIDB4MjY3ZDhhZGUsIDB4N2E3MmE1ZTUsIDB4MWQzYmY0Y2IsIDB4Y2QxODdiNmMsCi0JMHg0MzgxYmFjZiwgMHhkZmYyZGM2MCwgMHg1ZWI5M2Q4NCwgMHhmZmE4YjllNCwgMHhmNWRlYzFmYiwgMHg4ZjkxM2Y4MiwKLQkweDhlNjU4YzNlLCAweGU3OTYwMjU4LCAweDk2M2EzZTFiLCAweDAwOWU3NTQwLCAweDcwNDNiZDNlLCAweDNiZDRiZmRkLAotCTB4YmQ4M2E1ZmIsIDB4M2JjYWE4ZmEsIDB4ZmRkYWY0ODQsIDB4NWE1NzI0MDksIDB4YjkxYTc3YmMsIDB4MWNhMGYyZGUsCi0JMHgxOTdkMDE0OCwgMHg5ZGZlMzM5MCwgMHgzZDgzM2NkNSwgMHhhYWZhNGVkMSwgMHg1NWY1MDUyMCwgMHhlNTAzMDZlNywKLQkweDExZGU5OTE1LCAweGNmNzBlYmNkLCAweGVmMmIxZjEzLCAweGM2ZGJkNGU5LCAweDRkOWQ3YzIwLCAweGUxMWRmNDU5LAotCTB4ZDkzMjBkZGMsIDB4M2UzZmU0M2IsIDB4ZWJlM2NiZGUsIDB4ZTMwYmIyOGQsIDB4ZTQ5MzRmNzUsIDB4Y2I1ZDc4YzIsCi0JMHgwZTk2Y2IzNywgMHg5ODE1ZGZhNywgMHhkOTE5Mzg4NSwgMHg0ZjljMGY1MywgMHhhNTA3NzVlMSwgMHgzZjBmNzhiZiwKLQkweDc0MTU5ZmQ3LCAweDBlMGRhN2U4LCAweDdmMDM0NzVlLCAweDVmOWYzMjVmLCAweDI2YmM3NzM5LCAweGYwYTc0ZmZiLAotCTB4ODc4YmE2NjgsIDB4ZjdlMGM2ZmEsIDB4Y2I4ZjY3MzgsIDB4YjM2NzY3YzQsIDB4MDMyNTg3OWIsIDB4ZWRkMTNmM2QsCi0JMHhlODIzZjYxZCwgMHg3M2QxM2M3ZiwgMHg3MGZkOGY0NiwgMHhlYmM0NTRkNywgMHgwYzg2ZGQxMiwgMHhhYmJhMWVmYywKLQkweDZlODdiZGVkLCAweDdhM2VlNzgzLCAweDMxMjc2MGQ2LCAweGZhNDA5MTVmLCAweDQ1ZjZmMTYzLCAweDdkZjc1Zjk5LAotCTB4M2VmMDU4MTAsIDB4NDhlOGNmM2MsIDB4NGI5ZjAwOTEsIDB4MzA2MzJkNmMsIDB4Mzk4MGIwN2YsIDB4ZjhlMjFkODUsCi0JMHg3OWUwZWRiMSwgMHg5ZTI2Y2IwYywgMHgzMGFmNzhkNywgMHg2N2VlM2Q2YSwgMHg1YmM5YTc5YiwgMHgxM2JlMjdiYywKLQkweGE5MmU5MDVjLCAweGEyZWQ4NGZjLCAweGY5Yzc0ZjNmLCAweGYzYzczZDliLCAweGQyYTdmMDU5LCAweGZiZjE2ZWZmLAotCTB4NTdkZThhMWUsIDB4NmIwZDc1ZjQsIDB4N2ZhOWYzYTYsIDB4ZjA0ZDllOTQsIDB4MzRiYzkyMmMsIDB4OWE0ZjBlYWUsCi0JMHg2NTU1MTUwNiwgMHhjZDZhZjFlMSwgMHg4YTVlNjEzMywgMHhlOTYwNmQ0NywgMHhkZDgwZmM4MiwgMHg2ZTdhMzZlOSwKLQkweDQ3ZDlmMWIxLCAweDMyMTc2ZDkxLCAweDY2OWY1ZjNmLCAweDZmMDY0N2RjLCAweGE3YWIzZjk1LCAweDZjYjJhOWJkLAotCTB4ZmNkMmIwNmQsIDB4NTdlZTNiMDYsIDB4YjRlNDI4NWMsIDB4ZmFmMjU5YjYsIDB4NmVjODNhZjgsIDB4MmNmMzEwMmUsCi0JMHg2YjUzNzYxMCwgMHgyM2Q4N2E5ZiwgMHhhMDVhMWQ4ZCwgMHg1OWFjYjNiMSwgMHg1ZTAxNTc2ZCwgMHg4MTViOTczYSwKLQkweDMzYTcwYjU3LCAweGIwZjA4YTMyLCAweGNmOWY5OWI4LCAweDFlZjJlNTUxLCAweDRiNzA0NDljLCAweDBmNjRhMDc2LAotCTB4NjczMjE2NzgsIDB4ZTNhZTJjNjksIDB4NmI4ZjFlMTksIDB4YWJhZWQzZTEsIDB4OWQ2MmJjMDcsIDB4ZWNhYmI4NWEsCi0JMHgwMTcyN2MxNywgMHhkYTBhM2RmZiwgMHg4NzU5YTlkZiwgMHhiZmFkMGY0MiwgMHhjYWE1ZDBhNiwgMHhkNTViZjFjMywKLQkweGRmM2QxMTI2LCAweDMyMDdlYWJmLCAweGYwYWEwN2RhLCAweGZmODE2YjBiLCAweDRlNzc5ZWE5LCAweDcwYjY3ZDQyLAotCTB4YWNkZmU4MTMsIDB4ZmMyOGZmMDAsIDB4NDRiNTk4YjQsIDB4MzFkNGJmMjMsIDB4ZDQ5NjIzNWYsIDB4N2U1YWZhY2YsCi0JMHhjZjBiMzIzOCwgMHhlNzQ2M2E2NSwgMHg3ZDU4NTU0NywgMHg4MGIxNzRmZCwgMHgxZmRmY2Y0MiwgMHg4MDQxZmIyYSwKLQkweGJlNzhiNWFmLCAweDE3YWY1ZDE2LCAweDExZDQ0YzZmLCAweGQzYzAzOWU4LCAweGZhNjRhNzgyLCAweDljNjgyN2FlLAotCTB4MjQzZDdmODgsIDB4OGYxZWQ1NGYsIDB4ZDVjYmViMTEsIDB4ZGMzZTdlN2EsIDB4ZWI3NGUwYjUsIDB4NWQyOWVmZjksCi0JMHhmYzVlZGUxMywgMHhmNzBhZWZhNCwgMHhmOWJkZTkwNywgMHg0MjYyZmQ1OSwgMHg5ZDY1MjllOSwgMHg3MmJkMDhlZiwKLQkweGI3YWVmYjRkLCAweGJlYzhjNWRmLCAweDhmOTg0ODI3LCAweDU3NWY0ZGU5LCAweDAwYmViYjA5LCAweDY3YjQzY2VkLAotCTB4ZTc0MGJmMzYsIDB4ZTliZmJlMmUsIDB4ZDU1ZjNhMDUsIDB4ZGEwMmVjZjgsIDB4ZjM2NjcwOTcsIDB4ZjdmMDg3YmMsCi0JMHg5OGVjY2UyMywgMHhlMTdkNzY0NywgMHg3NzVkOGE2MywgMHg4NWZkODMxOSwgMHg5ZTczY2Q5MiwgMHhhZmM4NWZmOCwKLQkweGRkNTM4NGNmLCAweDRiYmY2YWI4LCAweDQ3YTAzOWM0LCAweDMzNmQ5YzYxLCAweDEzNmM5YmQ3LCAweGQxMGJhM2Q3LAotCTB4ZmQ5MmU1ZmUsIDB4ZGRjNzA5YmIsIDB4MDliYWU1NTcsIDB4M2FlODNlZjksIDB4ZTZmYmM1ZDksIDB4MDdiNzdlYjksCi0JMHhiN2VmYmRlNiwgMHgyZDBmNzY5MSwgMHg3OWUzZTJkOSwgMHhlZDBmOGI2NywgMHg3ZjNkZWQ1ZiwgMHgwYmJmNDUzOSwKLQkweGViNzkxZjI1LCAweDg3YmQ4YWM3LCAweDU3N2FlZGVlLCAweDk3Y2EwNjQyLCAweGYyYjVmM2IwLCAweGZhMGIwY2Q2LAotCTB4ZmMyZWMyMDUsIDB4MTczZGYxYjMsIDB4MTRmZTRkZjEsIDB4NGRiYmY3YzcsIDB4NmRlZmNmMWMsIDB4ZGM2Zjc4ZTAsCi0JMHhkM2UyOTdkMSwgMHg5MmZhOWI3NywgMHg4ZWVlZjUxZiwgMHhmOWVmODQ3ZSwgMHhlNGRmMDFlYiwgMHg3ZWQ0ZGI0NywKLQkweDFiZTAxMzU0LCAweDM3YzQwNGUzLCAweGJmNzczNWMwLCAweGNlZGJlMDRkLCAweGYxYzRkZGYxLCAweDc2ZjAzNmNjLAotCTB4N2FiYzBmN2UsIDB4ZmJmNGZjZTgsIDB4OGVjYzNkZmUsIDB4ZTE4N2MxN2UsIDB4M2U5N2YyM2UsIDB4OTlkMzI5ZGMsCi0JMHhhNTlmOGE2NywgMHhiMTlmMzlmOCwgMHgxZmQxYzdlNiwgMHhhOGJkZjA1MywgMHhlYTA4N2ZiZiwgMHg3ZjhkOGE5NywKLQkweDJmYmM0NjhhLCAweDIzOTNjOWRhLCAweDFjY2RmMDNkLCAweDA3NmZlODQ5LCAweDJmZDU3ZmRlLCAweDA4NDhjYjJhLAotCTB4MjFiZThiZjIsIDB4OTM5OGVhNWQsIDB4ZTFkNzIzZjYsIDB4ODI0MzY0NzksIDB4YmYyYjNkZjYsIDB4ZTdkZGE2NWIsCi0JMHhjOGY5ZTM2YywgMHg5OTM3NjYzMCwgMHhlZDM0OWUxMCwgMHgxOGI5YWZlZiwgMHhiY2ZlN2JlZSwgMHhmNzU5ODVkZiwKLQkweGFiNzcxYzkwLCAweDEyNjM0ZjdlLCAweDljZjAxOWYzLCAweGQxMjJkNjAyLCAweGU1ZGE5NjdlLCAweDE4OGJhMzRiLAotCTB4NGY1YTNmOWUsIDB4ZTBjZGFjNzAsIDB4YmMyYmJkNzYsIDB4YjJmYzgzM2IsIDB4ZWYxYzYxM2QsIDB4ZjNhYWYxOWQsCi0JMHg2ZmRkMjc4OSwgMHhiNDU3Zjk4ZiwgMHhmOWY4NDdmYiwgMHg3NjNjOTNjNCwgMHgxYTRlNjdjYSwgMHgyYWI5MzQzMSwKLQkweDJlMGJhZTg4LCAweGFiODk3M2YzLCAweGYyZTYwMzJlLCAweGM2ZmRmN2YxLCAweDA1ODdiZWQyLCAweGNlYTg1M2NkLAotCTB4NDk2ZDA1NWYsIDB4YmU1ZWY4ZjAsIDB4YzE5YjViYmYsIDB4Yjg1MzliZTMsIDB4OTczYzNjYTYsIDB4OWQ3ZWZjNDksCi0JMHhlYThkMTczOCwgMHg1MzliODBiNCwgMHgzNzNhNGVlMSwgMHhjOTgyNTRlZiwgMHg4YmJhY2ZjZSwgMHhlZmZkZjNhMSwKLQkweGE2NzA3YTE2LCAweDEzZWQyMGY5LCAweGNjM2M3OTg3LCAweGJmZDZlNzhhLCAweGFiMDE0MDY5LCAweDhiM2M3NTMwLAotCTB4ZTRlY2YwMjEsIDB4ZTkzNWVlZjcsIDB4ODM3ZjZiNzAsIDB4Nzc3M2U0NDUsIDB4MTNkNzE1N2QsIDB4ZDUxZDAwOWUsCi0JMHgyM2I5YjllNywgMHg5YTNmZTc0MiwgMHg4NzI1NWUwNSwgMHg2MTBjZWE4MywgMHhiYzA0NzczMCwgMHgzNjE5ZTdmZiwKLQkweDZmZWM1ZDdlLCAweDllODA1YjY3LCAweDg1Y2YzZDUxLCAweDBmMzNhZTUzLCAweGE2YjYwZjNmLCAweDJiN2RmZTE4LAotCTB4N2E4NDhjZTMsIDB4ZmFhOWQ2NDMsIDB4N2Y3ZTQ2MzUsIDB4YzljNGM2N2IsIDB4ZjYzMTQ2OWIsIDB4ZjdhYzAzMDYsCi0JMHhmMTk0YmY0NSwgMHg4YzRlN2YzOCwgMHg0ZDc1ZjcxNywgMHhhY2EzNzNjNiwgMHhhZjg5ZWFkOCwgMHg0Nzk5ZWFhNiwKLQkweDMzMjZkYmM3LCAweDc5YzQzYmQ2LCAweGZlMDQ5MzUxLCAweGJlNjA4ZmE2LCAweGRmN2RlMDE4LCAweDg5YjlmNTYxLAotCTB4YmU3NGY5NzcsIDB4OTNhZjAwOWIsIDB4MjFiYTVjZjEsIDB4Y2Q5Y2ZlNzgsIDB4MzhmNzgxNjAsIDB4OGMzY2E0Y2IsCi0JMHg3ZjU2NmE0ZiwgMHg2NGY3NzgzMywgMHg5NGRlNGY5NCwgMHg4ZTlkN2QwNiwgMHg5ZTYzZjljMywgMHhmOTg5OTg4ZiwKLQkweDJjYzNjMDc5LCAweGU3MmZkYjNkLCAweDVlMjM3YTcxLCAweGVkMWI1NmRjLCAweDJhNWVlOGYzLCAweDI1MTQ3ZWQxLAotCTB4N2JkMGFmMmYsIDB4NGYyZjIwNjgsIDB4ZTAyOTljNzQsIDB4YTI5YTc5ODMsIDB4Njg2Mzc5ZjEsIDB4NTBjZTFkN2EsCi0JMHg4YTE2ZThlMiwgMHhmOTA4OTdhZiwgMHhlNWM4YTI1YywgMHg5ZTVjYjUwZSwgMHg3ZTgyM2E0NSwgMHhjODg5M2RjNiwKLQkweDBiNDUzMzU3LCAweDZiZjlhNGViLCAweDczOTQ3YmM0LCAweGYwNjRjZmQzLCAweDBjOTllOTdjLCAweGZlMzg3ZjVlLAotCTB4Y2NjN2RmMmQsIDB4NDU0NjljZmMsIDB4ZjhjMzZiM2UsIDB4MjdmYmNhZmMsIDB4YzMzM2I2OGIsIDB4ZjAyYmYzNGEsCi0JMHgxZmYxZjM2OCwgMHg3ZTQzNTk2YywgMHhjY2I3ZjU1MiwgMHgxYmU5MDdjNywgMHhjNjQ5N2JhYSwgMHg3YTg4ZjllZSwKLQkweDQ5YzI1ZmU5LCAweDViMWE2NmVlLCAweDdiOWJkNWZhLCAweDFkY2U1MzhlLCAweDAzN2U2MGFjLCAweDU1MzAwZmFmLAotCTB4NmNiNDc0MWQsIDB4MmIyYzczYTYsIDB4OWFmYmZlMjQsIDB4MWU1MTQ1NWQsIDB4NmJlNjBjNWQsIDB4OGFkYTQ0MGMsCi0JMHhlOTczZjMxZiwgMHhmYmU3MDlkZSwgMHhlZTYzMmIzYiwgMHg2MDdlODQ5YiwgMHg0ZjUxYjQ0NSwgMHg3ZjMxZWNlNywKLQkweDQwNTY1NjU0LCAweGM5MTYzNmVmLCAweDA0MjE0ZTc0LCAweDZlYjE5MzgyLCAweDdmZWIwNmI2LCAweDIzYjBmZmJjLAotCTB4YTI0YmIyOGQsIDB4NTFkN2IzZmYsIDB4MDJiYjRkMWYsIDB4NDNmZWE3ZjQsIDB4MGYxMDFkOTMsIDB4ZjcxMDFkNzUsCi0JMHg3Y2Y0YzNkOSwgMHg4ZjgyMDNkNywgMHhmZGU3M2YzZCwgMHgzN2Y3Mjg1ZiwgMHhlNTNhZmVmMywgMHhmZmRlMTZmZSwKLQkweGU4YmYzMjk5LCAweDVmZGNkNDZmLCAweDRiZmZiOWE1LCAweDYyN2M0ZmRlLCAweGZhMGY2NGNiLCAweGE1OWNjNWFmLAotCTB4ZTg5NTZlMmIsIDB4MDVjYTM1NzcsIDB4ZjZhYzU1OWYsIDB4NzQyYjdlMTEsIDB4Y2M1Yjc5N2IsIDB4NmI4MmJhN2MsCi0JMHg3NGNlMmI4ZiwgMHgyMTFmYTM5NiwgMHhhMTQ2NzU0NywgMHhlNTkwOWU5ZCwgMHg3NWJiNDcyOCwgMHgyYjJiYmE2YiwKLQkweDUzYzVkYTEzLCAweGQ2MTE4ZjI0LCAweGM5N2I4ZWNkLCAweDQ1ZWE0YzZlLCAweGJlMGI5NzFmLCAweGY5ZjFiMjJkLAotCTB4M2NjMzdjMTQsIDB4YmYwYjMzMDMsIDB4ODQ3ZTNjZmQsIDB4NGYzNTQxMmIsIDB4ZjNjMGY1ZmUsIDB4Nzk4ZjViNmIsCi0JMHgzY2NmNWQ0NiwgMHhiYWY1MmNiYSwgMHg4OWU4M2YxNCwgMHgzODVkYzc2YywgMHgyZTFlZDY5ZiwgMHgwNjNkYTlmOSwKLQkweDM1ZWM1MGYzLCAweGVhZTFmZGYxLCAweDk4N2M4Yzk2LCAweGJiNzNjOTdmLCAweGVmZDBhYTMzLCAweDFkNDBmZTEyLAotCTB4M2M3Y2MzZGEsIDB4YzNkYjgyZTcsIDB4ZjI0ZmRiOGYsIDB4ZGFiYjcwN2QsIDB4YmYzMDYzOGQsIDB4M2RiMDZkMGYsCi0JMHhjZTA1ZTlhYywgMHhkODlkNGM4YSwgMHhkNzkxYjA0NywgMHhhYjNiOWVjNSwgMHhkMTJlN2E0NywgMHgwYzc5OWNiNSwKLQkweDUyYWRmYmVkLCAweDExMjdkZmU4LCAweGU1ZWE5ZGNmLCAweDY2ZTY4ZTc3LCAweDkwZDQzZDcyLCAweGViODM5OGUzLAotCTB4MzQ2NGM5MmMsIDB4ZTg0ZDY0YmUsIDB4OWI3ZjlhNzMsIDB4ODU3MmVkYzksIDB4ODZmMzdiYjAsIDB4ODA2Yzk5NDUsCi0JMHhhZWUzYzJlNywgMHhhYWJmYjgzNSwgMHgxZTU2NGI2YSwgMHhhNTY3ODVlNiwgMHhmY2M5MmYxNywgMHgzNzZhYmNkYSwKLQkweGYxYjZhYmNmLCAweGQ1ODU2YWJjLCAweDM3OTQxY2JmLCAweGVkYjMzYTdiLCAweDYzM2E1MzYxLCAweDkxNGRmZmUzLAotCTB4Nzg1OTEwMzMsIDB4ZTk0YzJjYjYsIDB4NzRiOTM5YmYsIDB4NjE3YmNmMTQsIDB4NDcxM2RkN2YsIDB4MzliOTQ2MWUsCi0JMHhmZTYwZjA4NCwgMHgwOGUwZjg3YywgMHg1OTFkMGJkNCwgMHhlODBiM2E5MSwgMHg3MzY5NTk4YiwgMHhhY2ZlNDY5ZSwKLQkweGRhMDNmZTFjLCAweDE2MTQ1MzJmLCAweGNmMGU3ZmQ1LCAweGNjNWYxM2NmLCAweDQyYWU3MzRhLCAweGU2M2M3MTM4LAotCTB4NWY0NjVjNDMsIDB4MGViMDVkYzIsIDB4ZWQzMmFiZDcsIDB4ODkwZDc1NTMsIDB4NGVmYzg1NzQsIDB4ZTllMWUwNTksCi0JMHhlYmUxMGI0YywgMHhmZDE5OTAxMCwgMHhlNTBlMDUxNCwgMHgyZmU3ZTBmZCwgMHg5ZDdjYzNmNywgMHhlMjg2NTNhYiwKLQkweGI0YmU0ZTc3LCAweDg1OTk2ZGEyLCAweGQyZmJmNzgxLCAweGJmMDQ4ZjVjLCAweGZhYzc1M2JmLCAweDRkZjFhODYzLAotCTB4YzA1ODc4ZTEsIDB4MDZlOTBkYjEsIDB4Y2M5NDczYWQsIDB4ZGVmMTQxMWMsIDB4NTU0OGQyZDQsIDB4Mzg4NGRhN2YsCi0JMHhkN2NlMDhlNiwgMHhmNTU1NGI0ZSwgMHhhYWZhMmJjYiwgMHg3ZjNkZGZjNiwgMHhjNGZlZWE5MCwgMHg3ZDQxN2YzMCwKLQkweGJiZGJiZjkwLCAweGU3ZTFlNDlmLCAweDQ1NDU0NThmLCAweGJmYmNiZWUwLCAweDM2ZjY3ZGI3LCAweGQ3NzQ1ZWZlLAotCTB4N2QxZGIyNTMsIDB4YjY3YjQ1ZGEsIDB4MDM0NzhkYmQsIDB4YjM5ZmM0NWYsIDB4OGRhNDNjYTAsIDB4MWQxZjY2ZjIsCi0JMHhkNzNmMTk5MiwgMHhhZTBmYTFjMiwgMHhmZTYzOWQwZiwgMHgxMDc3ZjE0NywgMHgyOTA3YWI3YSwgMHhjYjEyZWVmMSwKLQkweDgwMWRmYTdlLCAweDNhMGY1ZDFiLCAweDQxZWEyOTk4LCAweGVkMGYyYzc5LCAweGI3ZmFjNWUxLCAweDY3NTc2ZjI4LAotCTB4YjczYmViZTYsIDB4OGI0ZjlmOWIsIDB4MDU3ZjUzZTcsIDB4M2UwNzdlZmMsIDB4NjVlMWZlODgsIDB4NGJiNWU1MGYsCi0JMHhmZDUzNGY1YSwgMHhlYjkzMmFhYywgMHhhNWI0YmFlOSwgMHhkZDhiZjQ3YSwgMHgxODFkYTJkMCwgMHgwNjJhZmEwMywKLQkweGNlZGZjNWY4LCAweDdkYzJlZjA2LCAweGRjNTE1OTZjLCAweDk1M2NiZjVmLCAweDJiZTQzOGIxLCAweDk0MzllNzllLAotCTB4NTNiZjRiMTgsIDB4OGNhOWE0YmMsIDB4OGU1ZGQ3YWUsIDB4OTc1ZmY5YTAsIDB4Y2Q0ZmI0ZmQsIDB4NzU0NDkyZjMsCi0JMHg5NWE5ODk4OCwgMHhjNmJmNzFhYiwgMHhlZTRmMDhhMSwgMHhjNGVmNzgzMiwgMHg4NjUxZGRkZiwgMHhjNWRiYWI3OCwKLQkweDk0NGM5MWY3LCAweDBhNTgyOGRmLCAweDE5NzM0ZDZkLCAweDY2NTEzZjNkLCAweDE3ZjAyNDg3LCAweGZiNzA5N2M2LAotCTB4YmU2ZDExM2IsIDB4NDZlMGY3MTUsIDB4MmJiYjQ3YWQsIDB4N2ZmZDdkMWIsIDB4MThjNjdhODUsIDB4ZTYyNjdhNDUsCi0JMHg3ZWY0ZGRmMiwgMHgzZDEzNjVmNywgMHg4OGY0MjVkZiwgMHgzNWMzODNhMSwgMHhhZTkzYjJmYSwgMHg1OWYwZmMyYiwKLQkweDc3ZWFiNjY2LCAweDRmMDkwYzdmLCAweDkxZjdmMWU5LCAweGM2OGMxZDBkLCAweDkwM2NiYjhmLCAweGFmYmQ2NTVhLAotCTB4ZmE3N2Y4MGUsIDB4YzI0MzViNWQsIDB4ZmE1ZmI0YTcsIDB4NDJjOTc4ZDUsIDB4MGY0Njg4NmUsIDB4MWUxZmFhNWYsCi0JMHhhOWU4NDJjMywgMHhmMTExZWZhYiwgMHg1ZmVhMTg0OCwgMHg3MmNjYmY2OCwgMHgzMDEyZGE0NCwgMHg2M2QwZTk5ZSwKLQkweDRkOTk4ODVkLCAweGZmZTQ0ZmI0LCAweDA1MzhjZDAwLCAweDAwODAwMDc2LCAweDAwMDAwMDAwLCAweDAwMDg4YjFmLAotCTB4MDAwMDAwMDAsIDB4N2RjNWZmMDAsIDB4ZDU1NDc4MGIsIDB4Mzk5ZWYwYjUsIDB4NjY0OTFlNjcsIDB4OTkyMTI3MjYsCi0JMHg0Y2UyMTAyNCwgMHhlMDEwMjQ1ZSwgMHgwZjA4MDQyNCwgMHg4NjAyNDBjYiwgMHgwODQwMTNhNywgMHhiYzgwZTgzNCwKLQkweDJiMTAxMDI1LCAweDAzMzdlOTVlLCAweDYwZDIyMDQ5LCAweDQ1NDA1MjgzLCAweDY4YjA1MDNiLCAweGFhZjhmZjZkLAotCTB4MDEzMWY1YTksIDB4ZTk0YTBmZTQsIDB4N2FiN2JkNjAsIDB4NTIwMzZiNmYsIDB4ZTA4ZDQ1MDQsIDB4YjE2ZGNmZWQsCi0JMHhiZGFkNmJmZSwgMHgzMjY3MzI0ZiwgMHhmZGVkZWQ0MSwgMHhiZTNlZjlmZiwgMHgzZWY2NzU5ZCwgMHg3YWY2YjFmYiwKLQkweGIzMGZiNWVmLCAweGNiNWQ4YWNhLCAweDBhZmIxODhiLCAweDkzMTgxMzdmLCAweGJiMzAyZThlLCAweGRhNjYzMjg2LAotCTB4YjFlY2M2N2QsIDB4YjI4MTY2MzEsIDB4OTZiZWEyM2MsIDB4MDQ2YjRmMzEsIDB4MmU0OTk1YWMsIDB4MTkyMzYzMjMsCi0JMHgzOTUwYjZmYywgMHhmYmMxZGIwYiwgMHg2MzFmNzdjYywgMHg1NzZlYzY0ZSwgMHg0YTZkZmYxOCwgMHhiMTgzMmM2NSwKLQkweGVkMDRkZmJmLCAweDBmZGU3YjUzLCAweDg1MmVhMDFiLCAweDk2OGJjMGIxLCAweGJiZjg2MWUwLCAweGM3MmZiNjVmLAotCTB4ODllMWY1MDUsIDB4ZWMzOWZhYWMsIDB4NTU2NzBlNDcsIDB4Y2RkZmExZDksIDB4ZGExNWIyOWQsIDB4Mzk1NTliMzEsCi0JMHg5ZmY4MDZlYywgMHg2ZjgyZmYzNCwgMHg4YmE3N2YzOSwgMHgxMmI3ZmZjZiwgMHhmZGZkODRkYiwgMHhiMDg0YzI3NiwKLQkweDdlZDVlNjA3LCAweDkyMTE4OGZmLCAweDMxZGZhN2FiLCAweDYzYjUzMzJlLCAweDU2NzVkNzRhLCAweGQ3YmFkOGNhLAotCTB4NjAzYjVjMTIsIDB4YzFmYjMzN2QsIDB4NWViYjgwMzMsIDB4YmEwZjA0YjUsIDB4YTQzMzM5ZTksIDB4NjgzOTY5NjAsCi0JMHg4ZTc1ZmE4MCwgMHg4YzJmN2NhZSwgMHg1YzdhZmU1ZiwgMHg3ZTgzMGQ4OCwgMHgxOTkzOGY1ZiwgMHhhZTUyZjM4YywKLQkweGE1ZTIwYzZmLCAweDE1NDFmNWZjLCAweGYyNGMwNzA2LCAweGEwY2M4YjE1LCAweDNjOWJhNGRkLCAweDVmNzlmMTYzLAotCTB4YWY1ZThkZjMsIDB4ZjljNjAyNTYsIDB4MThhN2NlZmMsIDB4YWRiYmJkZjEsIDB4NTUyOWI1ZmMsIDB4MjI2MjQwODYsCi0JMHhjOTU0ZDc3NCwgMHgxNmM2MDhkOCwgMHg5YjBkOWI1ZiwgMHg2YjkyZDhjMiwgMHg1YWZiMDRmMSwgMHg3NWFiZjNmOCwKLQkweGRmNzA1MzY5LCAweDQ5ODY2ZWFlLCAweDZjOTYzYWMzLCAweDAxN2QwYzM2LCAweDc2NWNjNWQ2LCAweDMwZjAwZjM1LAotCTB4YWRhMmMwNzMsIDB4NTMzOWU2MGMsIDB4Njc3YWQyMzIsIDB4ZDYwYTQ5MGUsIDB4NzFkYmQzNDMsIDB4NzNlMGM3YmYsCi0JMHg2NjQ4NjFkNiwgMHgzZGI5N2E2YywgMHhkNmYxODQ2MCwgMHhkZmE4NTM1YywgMHgxYTJlNmJkYSwgMHg2NGI1ZWQ2ZiwKLQkweGIzNWRkNzgyLCAweGRhZTRiOTUyLCAweGI5NmU3YTYwLCAweDgwMWU2NDY2LCAweDFjMDM1ZTk3LCAweGRiMjczYzAwLAotCTB4M2ZkNzBhYjcsIDB4NGE5NmZlYjMsIDB4MzViN2NmMWMsIDB4OGI2N2Q0YTMsIDB4ODJiMzE3YTQsIDB4OTJmNDA1NzQsCi0JMHhiM2Q2ZGNiZSwgMHgwNWY2ZmFmZSwgMHgyZmU4NTUzMCwgMHhiMmY0NGJjNSwgMHg4OGYyY2ExNCwgMHgwZTgyNjVmYSwKLQkweDU2YjZmMWEyLCAweGE1MzdmZmVjLCAweDVmNDExYTk3LCAweDNjYTE2YzRiLCAweDU0YzFlMDIzLCAweDg1NmVhNzE3LAotCTB4NzE0OTVjZjksIDB4NmNiYzQxNGQsIDB4NmZlMzgwNzgsIDB4NmU1YmM5ODMsIDB4Nzg2ZWY5ODcsIDB4Y2VjMmEwYzQsCi0JMHhkOTQ3M2JiMCwgMHgzMmYwMGNhZCwgMHhiMzNhZGRlYSwgMHgxNzZlODIyZiwgMHg1Y2M2MWI1YywgMHhkNzM5ZmViMCwKLQkweDdkYmNhOTcyLCAweGFlMzM2ZmEwLCAweDc5YjVmMTdmLCAweGE4YzM0ZjAyLCAweDIzNjRkNjY0LCAweDQ2ZDhjNTFiLAotCTB4NGUxNzU3ZGMsIDB4YjNlZjk5MjgsIDB4NzUxN2RmOTgsIDB4ODVlZWQzYTMsIDB4NjUzOGJmZjEsIDB4Yjg4YmZhYTIsCi0JMHg1NTMwMjUyZiwgMHg5YzA5ZTA0ZiwgMHg1MTY4Mjk5NywgMHgyZWJjYzAwZiwgMHg4MTQwNTg5YSwgMHg5ZjczYjhhZCwKLQkweGRmMDAwNTkxLCAweDQxZjRhMTRiLCAweGIwN2I1ZDA5LCAweDI5MWRlNTlkLCAweDkyZWQ4ZWQ4LCAweDA0YTkyNzk4LAotCTB4MmRlYjA5ZjEsIDB4MDU3YzYzZTAsIDB4YzIxOTJlZmYsIDB4ZmQ0MmY3ZjksIDB4OTY1YjMzMjcsIDB4ODFlMDczMWIsCi0JMHg4NjU1MmE3NCwgMHg5Y2YyN2U3NSwgMHhiZTc4MjRjNCwgMHg0ZTFiZmQ2YSwgMHg5NWFiMWU1OCwgMHg1MDI5NjQwZSwKLQkweGNjMTBkMWJmLCAweDNkOGM0OTM3LCAweGUyZjZmYjIyLCAweGQ4NWEzZWJhLCAweGQwNjU2ZmZhLCAweGYzY2I3Y2VlLAotCTB4MGQ1N2RjMGUsIDB4Mjg3MmFkYWYsIDB4MDU2OWZiMGYsIDB4ZWU2MDA2N2MsIDB4NjU1MmNkYWQsIDB4MjZjMzQ2ZDAsCi0JMHhhMWVkMGQ1NCwgMHhhMzllOGQ2ZiwgMHhiNWY1N2NlOSwgMHhhYmE3YTI2YywgMHgyZmExOTY3NSwgMHhkZDAzMWQyMCwKLQkweDQxNWFmM2UyLCAweGZkMjE3N2VmLCAweGFjZWE2OTQzLCAweGU5YzhmNDE0LCAweDVhZWJhMzVmLCAweDVhYWRjYjk5LAotCTB4MDAzMDYyNWIsIDB4YmZmOTliZjMsIDB4ZjUwMGZlODAsIDB4ZjJhODVmNmIsIDB4MmJiYTQ0NGUsIDB4NTA3OWE4MzAsCi0JMHgzMmZjMTFhYywgMHhlMGY4M2E1MywgMHhjZjgzZTQ1OCwgMHg3ODdhZDQ1MiwgMHg1NzlhZjkzZSwgMHhjMWYzZDczYywKLQkweGM2NzRmZTRiLCAweGJjNGIxOWYyLCAweGQ1YzY5MGI2LCAweGU4MjJkZmU4LCAweGRmZjQ4NGRkLCAweDJkODNkZThmLAotCTB4ZDlmZmZlMDUsIDB4NzdmZjllZGYsIDB4ZGI5MGYzZjgsIDB4NmJlMjE2ZjcsIDB4N2ZjYTFjOWEsIDB4M2I0YjA1MmMsCi0JMHg5NGU0ZDFkMSwgMHhlN2U5MTkyYSwgMHhiM2NmY2I5YiwgMHhkNTllN2U0MiwgMHg3ZGI1Y2ZjOSwgMHhiN2YwY2ZjOCwKLQkweDA0ZDc4N2U0LCAweGQ4NWE1NDNmLCAweDJlMjJkZTFkLCAweDdiZGI2N2RmLCAweDNkOTdlYmZhLCAweGVhMGI5Y2U5LAotCTB4NzgxOTc0M2YsIDB4ZjM0M2ZmN2YsIDB4Y2E1YmYwZmUsIDB4ODZmZDdmZmQsIDB4NDJhZmZmNzIsIDB4NzljYjQ3ZWUsCi0JMHg5Y2ExZmQwNiwgMHhjMmQ1ZWNmZiwgMHhmNzgxZWEyMCwgMHhkNDA1ZTgxOSwgMHhiODI0YWY3YiwgMHg0MDNkMGIwZSwKLQkweDMxM2UyMjdhLCAweGQwM2QyMzc4LCAweDVmZTc3YjkwLCAweDdmMDNkMGZiLCAweGEzZmRiYzQzLCAweDNmYTM0MDdhLAotCTB4ZmUzNDVmOGQsIDB4OWEyMWY4ZDAsIDB4OTg3ZTM0N2YsIDB4ZjEzNTAzZmUsIDB4NDAxZmRjNWUsIDB4MWZlNDYxY2MsCi0JMHhhZTBjZjAzOSwgMHg1MDk1ZDZhMywgMHhmMWE5N2M4YywgMHgwYzE3ZGFkMSwgMHhmNGJkNjdjNCwgMHgxZTliZTA4MywKLQkweDBiZWJkMTNlLCAweDNlMzQxZjhkLCAweDU2YTZmOGQxLCAweDI4YjJjM2YwLCAweGI1MjYzODdlLCAweGRlMTYzYzNlLAotCTB4MTVmNmVlZGIsIDB4Zjg3YjUzYjksIDB4ZDE3M2NkNjMsIDB4N2E0ZmExN2EsIDB4Y2I0ZjQ4NjIsIDB4ZDIxOGVhNTIsCi0JMHg5MTk0MmQ1MywgMHg4M2U5NjRmNCwgMHhkZmRkOGE5ZSwgMHgxMjZlOWU4ZSwgMHg5ZThlYmZlZCwgMHg2YTY2ZGMyYSwKLQkweDRmNDgzZmY3LCAweDMxOTFlZTE1LCAweGZiYjI2OWU5LCAweDVjNTc2ODlmLCAweGE5N2RmYmFkLCAweGI1NzNlNjBiLAotCTB4YmJhY2U0MTQsIDB4YmZhNmRlODcsIDB4OTBkZGI4YzUsIDB4N2U5MTU3NjMsIDB4M2FmOWUyM2EsIDB4ODMwM2NjM2IsCi0JMHgyYmVlZDhmNSwgMHhkNDc4ODc1NiwgMHg2N2RiNTJlOCwgMHg4NjU4MGVjZCwgMHhiNmU1MDA3NCwgMHg5YzJhZWY2YywKLQkweGEwN2M0NzZmLCAweDkzMzdmZDY4LCAweDk2Y2ZiNDc3LCAweDUzZDliMDk0LCAweGQ2MWRmYjg0LCAweGVjYmVmZmU5LAotCTB4NzJkZmI1YzUsIDB4ZGZkYzZiOWYsIDB4ZGRmODZlNGMsIDB4ZDE3Yjc0ZmYsIDB4MjcyZDhlZWYsIDB4N2Q5ZGZmMDIsCi0JMHg3ZjBlNTk5ZCwgMHg5NGYwNDdmNiwgMHhmNjFlMzNkNywgMHg2NjAyODdlNywgMHhjYmYyMmY2MSwgMHhmZWFkMzJiYywKLQkweDE5MWUyZDM3LCAweDNkZmMwM2U1LCAweDMwZjA0Njk2LCAweGMzODFlMTJiLCAweDBhZTFkMzgxLCAweDg3ZjRlNzk4LAotCTB4NTgwM2ViYmIsIDB4YTI3Yzc5M2YsIDB4MGM3OThmZTgsIDB4OGZmZGE3YWMsIDB4NmUxNWJjMGYsIDB4YzJkZWZkMjYsCi0JMHg5NGViZWZmMSwgMHhlMDIzNDNiZCwgMHgxMWVkODA1MiwgMHhiYzE0NTk3MCwgMHhjODc3Yjc5ZiwgMHg3ZWExNGM5ZCwKLQkweGEwYWY5YzgyLCAweGMyMDk0MzdmLCAweDdlODI3ZjVhLCAweDU1ZjhlNzk5LCAweGM1MmNmM2MwLCAweDNlYzA3NmMwLAotCTB4ZjAzOTRiYWQsIDB4NmI5NDU1YzYsIDB4NzA2NjA2NmQsIDB4ZmQ4MWUwNDUsIDB4MDRjOWViZGUsIDB4MjBjNTc4YmEsCi0JMHg3YjA4ZmZlMCwgMHhmODViMTk3MiwgMHhiODRmODcwMiwgMHhjODEyZDRmZiwgMHhiZTAyZmQxNSwgMHg5Yjc0MDhkNywKLQkweDA5MWUwZDVhLCAweDY2NTM1YmZhLCAweDdiYmI2NjA4LCAweDViODRmYmUzLCAweDdjZGFhYmQzLCAweGRmZWE1NTQwLAotCTB4NmY5NGU2NjcsIDB4NmQxYTNlZjcsIDB4YmQzNjdlZjQsIDB4OGI3Y2IyMWYsIDB4Njc4ZmU3ZjEsIDB4N2IwYzYwOWUsCi0JMHgxZjgyMGZmOCwgMHg2MzEzNGEyYSwgMHg0Yjc3OWZkNiwgMHgwMWQ3ZmYxYywgMHg0Nzg3YzZkNiwgMHhjMWZkNjA3MywKLQkweDU5NzVmYzE4LCAweDFhMzYxN2Y0LCAweGQ2ZmYzZTA1LCAweDM2MTY3NDgyLCAweDZiZmVmODZiLCAweDMyN2JlMjBiLAotCTB4ODI3NGRkNjMsIDB4MTNlMzAzNzQsIDB4N2ZkYzdmZmMsIDB4N2NjOTM2ZjUsIDB4N2MyODllYjksIDB4NmZiZDY4ZGQsCi0JMHgyMDU3YzBjNiwgMHgzNzJjYmY2YSwgMHg2ZWU5ZjdjMCwgMHhiZWYzZDBiOSwgMHhlODdlZmY0YiwgMHg0ZWY1ZmI0NiwKLQkweGRkMDVmMWFmLCAweGQ4ZThkNGFlLCAweDQ0ZjdhM2EzLCAweDk5ZjQ0YmQ5LCAweDAyNTA2Mjk4LCAweGJkNmI4ZjQwLAotCTB4MmZlOGNkNzEsIDB4YTlhN2YwZjQsIDB4OGUxNGYxMGEsIDB4ODdhOWUzZDMsIDB4MTU1NWNjZmYsIDB4NDQ4ZmIyMzYsCi0JMHhlNDJlZWI3YiwgMHhiYmIxYWY1ZiwgMHg2ZWM3ZTczZCwgMHgwMjllNjZiYSwgMHhkMjlhMmJjMCwgMHg0MWQyN2VmOCwKLQkweDhkODBhZWNiLCAweDA5ZWE4MmU4LCAweDc3OTg4ZGNlLCAweDQ2YjYzZjM0LCAweGY4YTNlM2MxLCAweGM5MWZmMDU3LAotCTB4ODAwN2Q0MGYsIDB4NmY5NDNjYTcsIDB4YWVjZDY3MjksIDB4YjM1MTNhMDgsIDB4MzEzZTllMzksIDB4YTc5NDZhYjAsCi0JMHg4ZWRjNDllMSwgMHhkMmYzNjcwYywgMHhmYWEwNmQ5YiwgMHgxZmJlNmNiMiwgMHhlMzg2NTExZSwgMHhhN2EwZjAyMywKLQkweDJiZmExMDlmLCAweDNjMjZlYjExLCAweGQ2ZDE0ODJkLCAweDAzMzU1MDVkLCAweGU2NGUxNWQ2LCAweDczYjJkM2Y1LAotCTB4N2IzMjA1NzcsIDB4NjZmZWU4ZTAsIDB4MDU1NDE3NjQsIDB4Y2ZmYjIyOGEsIDB4NWQ3ODgzM2YsIDB4Y2RlNmYwMjAsCi0JMHhlYjA2NzQxZSwgMHg0YjUwNzkzNSwgMHgxMWY0NDI4NCwgMHg4YjUwNzk0MCwgMHg0ZGU4NjFmNCwgMHhiZGQ5ZTkxZiwKLQkweGY1MTAzM2U4LCAweDgzNzRjN2JlLCAweGJmN2FiM2Y3LCAweDlmN2E4OWVmLCAweGNkYmU1Mjk5LCAweDY2ZGY2MmZiLAotCTB4NjU2YmVkNDQsIDB4NDQ1NmJlZDQsIDB4MWMxYTM1YzEsIDB4NGQ1ZmM5ZDQsIDB4ZGI2OTJmMmUsIDB4Nzk4NGU4ZDUsCi0JMHhlNDA0NzVkYywgMHhlN2E0OGIyYywgMHg3N2NmNDQ1MSwgMHg4ZWZkMWEyOSwgMHhiYjdhODMzZSwgMHgwOGNiOWU4NywKLQkweGY2MmFkZDllLCAweDE3NjYzMDJkLCAweDk0MmE5ZmVhLCAweGUwN2I2M2MzLCAweDA4ODcyODM5LCAweDE5ZTU1YjFlLAotCTB4YzZhZmE5MWUsIDB4M2RiOTQyZWQsIDB4M2Y2YjQ5YmYsIDB4NmMyZmRhOWUsIDB4OTliYmZhZDAsIDB4NjQ3ZGI1ZWEsCi0JMHhkMTU0ZWY4MSwgMHhjM2I5MGFiZSwgMHg2MGNlMTMwMiwgMHhmODU3ZWFmZCwgMHgzZDA3ZjVmYiwgMHgwZmM4NmU2NywKLQkweGQ5Nzg1MTJkLCAweGEyMDcwNTFmLCAweDFhZmVlZmRhLCAweGY1MTBkNmZkLCAweGZhYThlNmZlLCAweDVmNzgyOGU2LAotCTB4N2ZhNGRjMTQsIDB4MDM1MmYxN2YsIDB4YTA2MmUxZjEsIDB4Njg4OGRjMDcsIDB4OGZhNjhjYmUsIDB4ZWRiYmIzODcsCi0JMHg2ZTdkNmU5YywgMHhhNzdkOTFiMCwgMHhmNWU5YWJlMywgMHhlMGZjN2UxYywgMHhhMmE2YWFjYywgMHhkNmZiMzgwOCwKLQkweGRmZjcwMGFhLCAweDI2OTc0ODBkLCAweDczMjA3ZmM2LCAweDgzZDAxMjAzLCAweGY5YjkwZmE5LCAweGIyZThiZTgzLAotCTB4ZjNkZjVhMjAsIDB4OWZlMTNmZmEsIDB4MzMyZjY4MTksIDB4NGM3MjVkOWQsIDB4OTJlZGMzZDIsIDB4Njc0NWVmMzYsCi0JMHg0M2UxMTYzNiwgMHg0MmE5YWUwZCwgMHg1ZWZhN2E3ZiwgMHg5ZmMwYmFmZCwgMHhhYWMyZjAxNSwgMHhiYjA4Y2M4YSwKLQkweGNhYTBiMDI4LCAweGFkNGViMTEzLCAweGJmMmY5NGZkLCAweGU3YmM3MDkyLCAweDFkNTQxN2IzLCAweDQ5OWFmYTgyLAotCTB4OTgzYWJjYTEsIDB4MmYzMjRkNjcsIDB4YTg0YTVmNDEsIDB4Zjg4OWQ3YWYsIDB4MjU1Nzk0Y2QsIDB4OWFjYmVhMmYsCi0JMHg4NmRlNTBmOCwgMHhiMjc1ODhhMiwgMHg2NzVjN2NkNiwgMHhlZDEyZmRmYiwgMHhmNjFlYTA0ZiwgMHg5OGI0ZjAwNywKLQkweDhmMGEyMzgxLCAweDMzMWU2NGVlLCAweGM0ZmE4MWNiLCAweGMyNGY0ZGM0LCAweDk3ZWVjNzdiLCAweDdlOWVhMTM2LAotCTB4MjczZjUzN2YsIDB4MzljOTQzZmEsIDB4OTYzY2VlZGMsIDB4MTk3MzkzNzgsIDB4NzcwOWVkYzAsIDB4ZGY2ZGJjOTAsCi0JMHhhM2NhOTkzZSwgMHg5NzViNjc5MiwgMHhkOWRiZDhjMiwgMHg4NTZjYWFhYiwgMHg3ODQ4OWY1OCwgMHg2OTcwN2QzYSwKLQkweGVmYTAxNmQ1LCAweDdhMmVkOTMzLCAweDM4YWM5N2RmLCAweGRlZGVkMGRiLCAweDVkODc2MjYxLCAweGUyOTUyZjM4LAotCTB4NWE3NzhiNDgsIDB4N2NlMDc3OGEsIDB4YTI3MTBjYjYsIDB4NDdlNGI5ZmQsIDB4YTAzMjUzNTUsIDB4OTM0NjkyZGQsCi0JMHhhNzU0NzY4YSwgMHhmOWMyYzk1MSwgMHgzNjRjNzZmOSwgMHgwNmQyZmQ2MywgMHhhMTZlMDY1MSwgMHhmZmJmZjVmMiwKLQkweGVkMDFkZWE0LCAweGE4MzcxZWJiLCAweGNkZmRhMTA3LCAweDM1YmViNDVmLCAweDRkMTVlMDBjLCAweGQxNmUyYTM5LAotCTB4MjgwN2UwNmIsIDB4N2RiOWNlMzAsIDB4ZDAxMjgyODMsIDB4NzU3MTA3ZTUsIDB4ZjZmMTY2MjcsIDB4YjhhZmRiMGMsCi0JMHhhYjNkM2FlZSwgMHhjYTRiZGIxNCwgMHgwMTdmNjg1NiwgMHg3Y2ZkYTM5ZSwgMHhhMGU5MDFlMSwgMHhiMGU1ZTcwMSwKLQkweDQ5NjAxYmM3LCAweDE0NjRiZTE3LCAweDY4ZDBiOWNmLCAweGVlN2M2MjA5LCAweGZiNzdjZDljLCAweDlmNjcxYzNlLAotCTB4NzY3ZDJkMDksIDB4MTg3MmUwYzEsIDB4MWQ5ZjBmMDAsIDB4M2QyYWI3YmMsIDB4YzQ1YjlmMDMsIDB4YjQ5YmRlZmUsCi0JMHhkOGIwZjAxOCwgMHhhNDNmNGRkOCwgMHg3MTI3OTY0ZiwgMHg3YmVjYjNmOCwgMHgzYWMzMGVhYiwgMHg4ODMyM2MyZSwKLQkweDcyMmI1N2UyLCAweDgwZDk1ZDNjLCAweGNmNWNjMmFmLCAweDEwN2U1OGU3LCAweGViZDZmNWM3LCAweDQwZWU5NzdmLAotCTB4OTdkN2ZlM2IsIDB4YmU5MTM4OTcsIDB4ZDZmNDI2ZmUsIDB4Mzg5NmQ3NmIsIDB4NTVkODQ0OTcsIDB4ODk5MTNmY2IsCi0JMHhiYjM3NWUwZSwgMHg1ZjdjZTIzNiwgMHg0MDY4MWY4ZiwgMHhhMGU4MWIzZiwgMHg5N2M5YzYxZiwgMHhlODA1YmYwYSwKLQkweDMxZjNkMzc5LCAweGNkN2ZhYmVjLCAweGRhYmY2ODk2LCAweGRlM2E5MDdmLCAweDZkZWJhM2E1LCAweGRmYzhhN2E0LAotCTB4OTNmNmQ4MDAsIDB4YTAwMmJiYWQsIDB4MzY1YmNmZGIsIDB4OGU1MDBmYjEsIDB4NzE0N2VlNmQsIDB4Yzg0Y2E1ZGIsCi0JMHg4MmUyNjc4MSwgMHhmNGIxNTdlOCwgMHhmOGM4ZmNkNiwgMHg4YTFmMzc0ZCwgMHhkODBjN2ZmNiwgMHg4NDdmYWYwOSwKLQkweGZkZjdlOGY2LCAweDc2MWZmMDMxLCAweDdlZGRlYjY2LCAweDQwMWVjMzg1LCAweGJiNDNlMmUzLCAweDc4ZmRjNjVkLAotCTB4Yjg1ZmY2NWYsIDB4ZmU1YmRlMGYsIDB4YzBmNDg5YjgsIDB4Mzc1M2M3ZjIsIDB4NDBiOGUxNzcsIDB4OGI1NzE4MzcsCi0JMHgxYzgyZDc1ZSwgMHhmNDYzOGYxMywgMHg4NzgxOTdjNSwgMHhmZTc0MmFhYiwgMHhiZjI0YzNjYSwgMHhmY2NiZTJmYiwKLQkweDc1NTQzYzlmLCAweDVmMzdkNmM4LCAweDdjYjg1MGFlLCAweGM5YjhmMjlhLCAweDYyYjRmYzhiLCAweGEwNjY1ZGE0LAotCTB4ZmUzZDI2NGYsIDB4Y2ZjNDYxYzYsIDB4MjU3MWY1OGEsIDB4OGFmODk4MTYsIDB4NWZiNDJkYzcsIDB4NDA3Yjc2OWQsCi0JMHhjMzlmN2E4MSwgMHg1OTQxMjcyZSwgMHhkNmU1YzM5YSwgMHhlZDE3MWNiYywgMHg2NGM0Yjk3MywgMHgwZDk1MDk2YiwKLQkweDgyYmQ2ZjE4LCAweDJmODAwZGUxLCAweGNmNzg3YTZkLCAweDIzZTcxODY4LCAweDFhMzc5YzE2LCAweGMzYzU3N2YwLAotCTB4MGJjYWY0ZTksIDB4OTkxZGM1MTIsIDB4ODI2NzkxZWMsIDB4YjhjOTVjYmMsIDB4ZjkzZGE4OWMsIDB4ZmMyMjc5YmMsCi0JMHhjNTZlYjJiOSwgMHg1NzA3ZjQwYywgMHgzYWU3NGQwNSwgMHhmMThlMGY4NSwgMHhmOWFjNzVkOCwgMHhlYTE4Njk3MywKLQkweGEyNzNmZDU3LCAweGYzZDYyNzA0LCAweDQ5ZDYxYWRmLCAweDM1YjZhMzcyLCAweGRhZWJmYmY2LCAweGU0NjdjZmY0LAotCTB4MGMyZTUzZDgsIDB4MmU0MzE4NjEsIDB4MmJiMTBjMDEsIDB4MDY3Y2E2NzUsIDB4MDM2MTVjNGIsIDB4OTZmNTgyZmUsCi0JMHhiY2QwMzdlZiwgMHg4MjkyNmM1NywgMHg3OTc3OTgxNiwgMHgzZTJmMWUzZiwgMHgzN2ZkODdlZiwgMHgwYTAzYmFkMywKLQkweDczNzYyYmMwLCAweDE5ODJiM2JkLCAweGYzZjg1NjgyLCAweDI5ZWJmZDk2LCAweGM4NGM3OTdlLCAweGU2MDZjNTk5LAotCTB4MjBmZWZhNDUsIDB4M2Y0MmNkNGUsIDB4NzFlM2Y5N2YsIDB4NGYxNWRmODQsIDB4NDdiN2ZhYWMsIDB4MmRjZWJkZTAsCi0JMHhmZDIyNTMzMywgMHgxNzQ4MjVlYSwgMHg5YWNjYmYxYywgMHg4N2NmZDNkYywgMHg4NTlmYmU1YiwgMHg2M2ZlNWZmNCwKLQkweDNkNjE4ZmYwLCAweDJmZDg5MjJiLCAweGJmNzFiODE2LCAweGI2NWNiMjMyLCAweGI2MmI3NjllLCAweGRiY2Y5ZmRlLAotCTB4N2UwZDdmODEsIDB4MjQwN2UyZjQsIDB4ZDE3YjA3NWEsIDB4NzgxMDdhNDIsIDB4ZGJjNDg5NWQsIDB4NjY5Mzg2ZDIsCi0JMHg1YmZmMTE3MywgMHhkYWZiMGE3MSwgMHgzOWJjNzI4NSwgMHhlN2ZiYzEyYywgMHgxMWIyNWVhMCwgMHgxMTlkMDJmZSwKLQkweGIwM2JmMjcxLCAweDIzOTIwY2FmLCAweDhkNWY1YzNlLCAweDZjYzc3MGQxLCAweDhjY2JhN2VhLCAweDg3MzNiZDdjLAotCTB4NDQxYjQzYzcsIDB4YmQ0YjM4YjksIDB4MGZjZmUyOWQsIDB4NmVhZGQ0NWEsIDB4NGEzNDhmZGUsIDB4YmJmYzAzY2MsCi0JMHgzOTc4NjM1YSwgMHgyZmQ5ODFjNiwgMHg1OTU3MTQyZCwgMHg4OWU3MTBkNywgMHhlMjNmOTA3MywgMHg1ZGZhMGU3OSwKLQkweDljZDkzMzI3LCAweGZhNzJmZDhjLCAweDcyZTJlMzViLCAweDJiYmY5ZTAzLCAweDNiNWFmM2MzLCAweDQ5YjU4Yjk3LAotCTB4OTdhZTZmODAsIDB4ZmZlODQ2M2QsIDB4ODcyYmZjMzMsIDB4YWMzMTk3ZjcsIDB4ZjFlZWZkZTcsIDB4ODVmNTNkMGQsCi0JMHhmZDVmMTBjMywgMHgzY2UzNTVlNiwgMHhkZjExMmU3ZSwgMHgyYzFlMzIwMiwgMHhlN2VlZmI0MywgMHhhYmY0MDhkMiwKLQkweDZjNzAzZjE3LCAweGJiZDljYTBhLCAweGYwNTYyZDllLCAweGY4YmZjNWQ1LCAweGJiODllOTFkLCAweGEyNzczZWM0LAotCTB4MDM3YThmOWQsIDB4N2NhMTY3ZTAsIDB4NDVjYjg3MzIsIDB4NDJlM2M0OWYsIDB4Njg3YzBhNGYsIDB4ZDdkNWFkZmIsCi0JMHhmMWUyNjAzZSwgMHgyOGU3OTA3OSwgMHhmY2I3NmE0MCwgMHhiNWFkZmE5ZSwgMHg2NzI4OWQ4NywgMHg4ZDM0NWY2YiwKLQkweDk0ZmM3OTQyLCAweDJkOTJmZjk4LCAweDBiYmZjNzAzLCAweDk0YzRiM2Y0LCAweDVhNWVhMGE4LCAweDQ2Njk5ODEzLAotCTB4ODE4YjRkNzgsIDB4NTJmNzllZTAsIDB4M2YxZTkwYjMsIDB4ODFjOTc4NmUsIDB4NWM0MWYyNzQsIDB4NGZmNTBmMjgsCi0JMHhmNTM4ZmFkNywgMHhlMTQwMmUyMCwgMHgxYjhmYjk3MSwgMHhmYzYyMGVmMiwgMHhiNjEyYTk2NiwgMHhlOTdlYTAxYiwKLQkweDk0NjQ5Y2M2LCAweDIxMmJlZmQzLCAweGRmYmZkNjMzLCAweGVjMjIzNmVhLCAweDA4ZjE5NDUxLCAweDA0ZTFlNDdiLAotCTB4YWIyMjBjN2YsIDB4Y2EwZmQwNTUsIDB4YmUwNmI1OTksIDB4Mzk5ZTZiOWYsIDB4ZjE4NmNlNjYsIDB4ZmRjMzkzN2UsCi0JMHhmZTdlNGY5YiwgMHhmMzhjN2NiYiwgMHhmMzg1NjZkNCwgMHg3ZWMwN2Y1MSwgMHgzYzQwMGZlNywgMHhmZDIwNmQzZiwKLQkweGM5MTlmNmJiLCAweDY3YWMzNzEzLCAweDdlZTJkN2JmLCAweDE2YWQ3ZjAzLCAweDg1ZjZiY2ZiLCAweGJhNDVlZTk3LAotCTB4NWRmYjhiNWYsIDB4ODA1ZTliZDIsIDB4ZjNkMzhmNmUsIDB4NjE0YzBlZTcsIDB4NDhlM2ZkZmMsIDB4MDJiZTlhMTcsCi0JMHg4Yzk0YzFiOCwgMHg5ZjBlM2E3MSwgMHgwMmZjZTFjZSwgMHhmM2Y4MmJjZiwgMHg0YmM5MTE0MCwgMHg2NzY4MjM5MCwKLQkweDVmN2JkMzQ2LCAweGQ4YjFmYmZiLCAweDJjNWIyNWJmLCAweDE2M2Y1NzI0LCAweGMwZjlkYmZiLCAweGJmZGMwZThiLAotCTB4ZWM3ZTdlNGYsIDB4ZDRhMzllMDQsIDB4ZDhkYTA3M2UsIDB4MDVlZTgzMTUsIDB4ZmFlMWQ2M2UsIDB4YjI3ZjM0MWQsCi0JMHg3YWUxZDYyMywgMHhlZmViM2QxZCwgMHg2ZmMxNzNhNiwgMHg5ZjVmMThlYiwgMHhiMjc1ZGViNiwgMHgyZjU2YmY1OCwKLQkweGQ2MmNiZmRlLCAweDdjMDk4NmI5LCAweGYzODgzMGJkLCAweGU0MjdlMDk3LCAweGI0YzdiNDU3LCAweGY5OTJmOWY1LAotCTB4MjY3ZDFhZmIsIDB4ZmZiOTcyZTcsIDB4OTlmZjIxMzcsIDB4ZmM0MGVhZDIsIDB4OWNhMmZlZTAsIDB4OThmMWZhMDEsCi0JMHgwMWI5MDk0NywgMHgxNjc5M2U0ZCwgMHg1ZmIxMWZlNiwgMHg3M2IzZmNkYSwgMHhhZTQwM2NmOSwgMHg3YjkyOTI3OSwKLQkweGM4ZDNiMWY2LCAweGI3M2FjNjU2LCAweDc4ZTVjODRjLCAweDk2OThkYjNjLCAweGZiZjgwNmQ1LCAweDg5MmJmYzE4LAotCTB4MjM5NTdhNzEsIDB4NDZlOGQzYzYsIDB4NjdmY2FmMWIsIDB4ZGQ3MGQzNTUsIDB4ZmIwODdmZDAsIDB4M2Y3ZGM2ZDcsCi0JMHgzZjYzMjA5MCwgMHgxZmNlMzNlZiwgMHhiZTM1ZmNkYSwgMHgzNDVmYWYyYywgMHhlZDgxZDhhZCwgMHgxNGU3YjEzZSwKLQkweGRkMzliYWUxLCAweDU0MmFlNzY2LCAweDgwMmVkMDdhLCAweDA2NmQzZGY3LCAweDE1OWY0ZjhhLCAweGM2ZDlmY2ZlLAotCTB4OGE0YjFjOTcsIDB4MjVkZGU4N2EsIDB4ZDkzZjhkZTYsIDB4MWE5ZTdiZDksIDB4MzNkMDQ1ZmQsIDB4ZmI3Y2IzY2QsCi0JMHg2YjA4NjlmYywgMHg0YmE2OGRmMywgMHg3ZDFhNmYwZCwgMHg2NGE5Y2RiMiwgMHhlOWQzNDRhZiwgMHg2NmIzY2NiYSwKLQkweGI5ZmEyZjFjLCAweDgwN2NiNzY2LCAweGZmZTQxNWYxLCAweGYyZTNjNjU0LCAweDZlNzhlYzBkLCAweDlmODYzZTg0LAotCTB4ZDFlYThkOGQsIDB4ZDc5YzlhMGYsIDB4MTRiYWYzZjQsIDB4MmZjMjI1Y2YsIDB4NDM3MDNhMGIsIDB4NTM2NmU3MzYsCi0JMHhjNzI5NzdiZiwgMHhmZGUwMzliNywgMHg3NGMzZTczMSwgMHg4N2Q5YWJmZSwgMHg5MjExN2YzNywgMHhmNDhlMzExMiwKLQkweDUyMjRiYjgyLCAweDdjYjlhZGNmLCAweDk2YjZlODljLCAweGJmYTFiNzg1LCAweGRmODFmOGIzLCAweGY0OGQxY2NkLAotCTB4Y2U4OTk0ZjksIDB4NGUzNzE2NWIsIDB4YmRkZGEzMzYsIDB4YTM5ZGYwZWEsIDB4MzVjZmRmNzAsIDB4YTk3NjNkNzEsCi0JMHg2ODkzZTQ2MSwgMHg3YTZiOWYzNywgMHgxMTY3NzlkOCwgMHg2NTNlNTdiZSwgMHhiYzVmM2MyYywgMHhmNWY2OThhYiwKLQkweDRjZjBiODgzLCAweDkxZWViYjg0LCAweDZmNzg0MWQ4LCAweDliOTFlMWRjLCAweGNlM2MwMjE3LCAweGFlMTI1MzdlLAotCTB4NTI0M2ZkZWYsIDB4M2EwOGQ4YzUsIDB4Y2Q5NGNhNTgsIDB4OTM0ZWQxMGIsIDB4OGJlNDE1MTMsIDB4YWIzYzg1ZjcsCi0JMHg1YTdkZjEzNywgMHg1MTdmZTgyZSwgMHg0NWYzZTcyZSwgMHhlYmNiN2Y2MiwgMHg3Y2YxZjNlYiwgMHhjODAwZWJiYywKLQkweDhkNjNjMDUxLCAweGMyMWFkNWQ5LCAweDIzNGQ1ZjcxLCAweGQ4MWQ3ZmJiLCAweDc0YzllOTA4LCAweGQyNzY0ZDRlLAotCTB4NjZiMzMzNGEsIDB4NmI3M2QwOTQsIDB4NjkzZjNjMDYsIDB4ZWI4M2RmMGEsIDB4YmQ4Zjc5MzksIDB4NThlMjBiNzgsCi0JMHgwOTZhM2ViYSwgMHg1Zjg5NmZiNywgMHhmMWE1YWVjMCwgMHgzMTY4ZWRiYiwgMHgyZTgyNjU4ZiwgMHhkZWQzZmJhMywKLQkweDFlYmI0MGVmLCAweGZmOTg5ZWU1LCAweGU2YTc4NmE1LCAweDc0YmFiZWExLCAweGQ3MTkyZjI0LCAweDcxYWJlMWZmLAotCTB4N2NkZjY4NGQsIDB4NGM3MmUyNjgsIDB4YWVlYzFmZWIsIDB4MTFmNjkxZjMsIDB4MTgzYTViZDgsIDB4MGMxZDJhZWMsCi0JMHg2ZjVlNzVmNCwgMHhiYzI1NmQ4ZiwgMHhiN2FiOWJkYywgMHhhZDNhMzRhYiwgMHgxODk3OWY1OSwgMHhjYmQwMTc5OSwKLQkweDBhNDNmZWZlLCAweDljZjdmZjlkLCAweDY0NGU4Y2JmLCAweDc3NDJlNDMxLCAweDg4MGZkNWRjLCAweDNjNmM2N2NhLAotCTB4Y2YxOGZhZGEsIDB4ZjlmMmY4NGQsIDB4MmRkZmRhMzAsIDB4ZWIwMmM1MTYsIDB4OGU3NDhmM2MsIDB4NGEyZjRiZTcsCi0JMHg3MmI3ZWVkYywgMHhlMmZmM2ZiYSwgMHg3N2ZhMjA4OCwgMHhlMWMwZmZjYiwgMHgyMDg2YWRlNSwgMHhkZjFlZGQxZSwKLQkweGY2YzI1ZGI1LCAweDRiZWVjMGNiLCAweGIzZDg0NDMzLCAweDAzY2Q3N2JiLCAweDU0NTc2N2YyLCAweDY4MGNiNmRmLAotCTB4Y2YwOGU1N2YsIDB4NWI2YTgwNzcsIDB4MjI3YjFkOTQsIDB4MWRiN2Q1YzMsIDB4NWZiNmNmZmIsIDB4NjFjMGI4YjUsCi0JMHg1MzJhZGYwZCwgMHg5ZTFhZGYxMSwgMHg3NWU2N2YzNSwgMHg5MmIyODdhMCwgMHhlYTdkYmMxZSwgMHhlYmY2NDk1ZiwKLQkweGNhOGZiZjY1LCAweDFmNjcwY2NmLCAweDZjNzQ4NzFjLCAweDVmOTE1NDRmLCAweGIwZjZkZDdlLCAweGZiZjcwMDM0LAotCTB4ZThlYmUyODUsIDB4MjViNThlOTcsIDB4OWZiN2M4MmEsIDB4YjlkMTM3ZmEsIDB4MWQ3ZjY1ZTYsIDB4NmI3ZWRhOTUsCi0JMHg1ZjliYjE3MSwgMHgzZWY3YTc2OCwgMHhjYWYxMWI2ZCwgMHgzNWVmNzgzOCwgMHhkNzkwYTI1YiwgMHgzNWY3MzFjOSwKLQkweGVlZTNiZjNhLCAweGYwZDNhM2Y1LCAweDhmYWViNmI5LCAweGFiZmJlM2VlLCAweDIzYTNmYmNkLCAweDVkNzAzYTc3LAotCTB4N2JmNThmZWQsIDB4NmJlZTBjNjUsIDB4ZjY4MmEyNDIsIDB4ZGY5MTBhZDksIDB4OTcxZjYxNzEsIDB4ODlhZDE3MGYsCi0JMHhmZDgwY2U0ZiwgMHg4ZTdmYjhiZCwgMHg1YzljODE5MywgMHgxZTc3M2VkNiwgMHhhYWZlNWYzZSwgMHg1Y2ZiNDE0MSwKLQkweDgxY2FiNTdkLCAweGNiM2Y4ZGYxLCAweDRiMDUwZTlkLCAweGYzODQyZjc4LCAweGNhMTI4MzkxLCAweDZjOTViMWEzLAotCTB4MWIxZmI2MGUsIDB4ZmEwYjk5OTIsIDB4ZDM4MzMzMTksIDB4NzJjYjk4YzksIDB4M2U3ODBmMTAsIDB4YjcxNGU3ODYsCi0JMHg3MTRmMWViOCwgMHhjM2Y1ZjgwYiwgMHhiZjY1OGRmYywgMHgwZDBlZjFlMiwgMHgzNWRmOWFlZiwgMHgwNGRiYWM0ZSwKLQkweDJlNzQ0N2VjLCAweGYxOTc5NzllLCAweDdmZWUxZmU3LCAweDc3ZjYxNjdlLCAweGMxNDk5MGU5LCAweGM4N2E3Zjc5LAotCTB4MDZhZmZkNDQsIDB4ZTMwOGM5N2YsIDB4ZmRjMjNjNWQsIDB4ZGNlMzg0MTAsIDB4ZGZkY2M3YzgsIDB4ZmRjYWRkNTgsCi0JMHgyNmY1ZGE4ZCwgMHgzN2IxMzk4ZiwgMHhiNDQ3OTYzZCwgMHg5ZTBlYmY0MywgMHg1NWRjNzBiOSwgMHgzYTM0ZGU4MiwKLQkweGViZTFlZDVkLCAweDBkN2EwZDViLCAweGI3NGQxYmQ3LCAweDFiNzVhYzQ5LCAweGU4ZWJlOWUyLCAweGVkZDI5YmY3LAotCTB4MTM1ZTkwZGYsIDB4ZTg3Y2I3NTgsIDB4ZThiZWQ3YTYsIDB4ZjkxM2UwNDQsIDB4YTM1NWU5MWQsIDB4ZjhmYmQ1ODcsCi0JMHg2YjcyN2EzOSwgMHgzYmE0NDRmMSwgMHg3OTM0M2U4ZCwgMHgwYWM0OTgxMiwgMHg5YmQ2NmY1MCwgMHhkZGU2MDE1OSwKLQkweDJhZjE4YzA0LCAweDliMmE4MWNhLCAweDdmNzI4NGNiLCAweDA1Njc0YTRlLCAweDFlNDk2NWEyLCAweGI5NTJhNzk3LAotCTB4ZmQ0NDYzZDEsIDB4NzkyMTZmNTMsIDB4NTI2ZjJkMTEsIDB4ZGZmY2I4ZjIsIDB4ZWQwNzQ0ODMsIDB4MmExNGYyOGIsCi0JMHhmYzhlYWM0ZCwgMHg4NTg0YWQwNywgMHg1Y2ZkNDQwYywgMHg5ZmZjOTA5NSwgMHg1MzcyNjgyZSwgMHg2NWIzODNkZSwKLQkweGI4ZDU3Zjk4LCAweDU0NzI3YmU0LCAweGVkZTUwNmM2LCAweGU0ODhmMGU2LCAweDk3YTgyNjkxLCAweDVkOWExZmViLAotCTB4OWU0NTcwMDEsIDB4NDQ1ZTYwNjcsIDB4YTcwZTk3YmYsIDB4YzBmNWM0MGQsIDB4OGMxZTU3NzMsIDB4OTdjNTNkYmIsCi0JMHhiMzNhZTU4MywgMHg2N2Y3ZTQ4ZCwgMHg5YjYxYWU4NiwgMHhjZmVkM2RkYywgMHhmZjdmNmFiYywgMHhiODFlYWVkNywKLQkweGQ0YjJjNGQzLCAweGNkMTk4NDIyLCAweGNhZWYyYjViLCAweGUzZTYwY2YzLCAweDYxMmY5ZmU4LCAweGUyZjI5MWFjLAotCTB4NWRmYmZmMDIsIDB4ZTdlMDQzYjQsIDB4ZGVmZWMyYjUsIDB4ODk2OWU4MmEsIDB4ZmRjMjE2ZDUsIDB4Y2JhNjRkNjQsCi0JMHhhODA1NzZkZCwgMHhjYTI2YTY3ZSwgMHgwNGIzMDc0OCwgMHg4NzJhZGMxZCwgMHg0MmZkZjFkYSwgMHhiMDVjYTBkNiwKLQkweGZmYjNlOTkyLCAweDNhMzc3ZWFiLCAweDA1ZDk5NWE3LCAweDg3YTAzZmFkLCAweDNlYjA0Y2NmLCAweDkwMDM2N2EwLAotCTB4MTk2MDI2ZDcsIDB4MDZiMTIwMDMsIDB4OTVlMTk3ZTQsIDB4ZDg1ZmZkZmYsIDB4NzU4MDdkNmYsIDB4NmI5ZTExYzYsCi0JMHgwNjdiOTQxNCwgMHgwNTdlMzNlNiwgMHg2MzgyNmQ2NSwgMHgzYzMzYzYxOCwgMHgzNjQzZDkyZiwgMHgzZjBkYzdkOCwKLQkweDVmYmEyMDRmLCAweDUyMTdlYzI1LCAweGE2NWY5OGM2LCAweDc0YjBmNWYwLCAweDhmN2ZkZTdlLCAweGZkMGZiN2EwLAotCTB4NTgxNzM3MmMsIDB4ZjQ3NjEzZmIsIDB4YjFlNjE5NTMsIDB4MWIzN2NlMmEsIDB4NzhjNmJkZjEsIDB4MGI4MzZiMmEsCi0JMHg4MWRlYjRmOSwgMHhiZjI3YzU3NiwgMHgwOTE0NTQ5MCwgMHhjOGRkODQ2YiwgMHg3ZTBhYTUwZSwgMHhhMDEzNDI5NywKLQkweDc4NWRjM2JlLCAweDhkNGJmNTEwLCAweDZlY2I5N2EwLCAweDYwNmY3ZTQ2LCAweGZhZjI4NThiLCAweDU5NjNmNWQ4LAotCTB4OTk1YzAzZjcsIDB4ZmU4YThiN2QsIDB4Yjc2N2U1ZTQsIDB4N2Q4MzJlZTcsIDB4MGVkOGMwYjIsIDB4ZTg1NGU3NTgsCi0JMHg2YWE2MGNiMywgMHg3M2EyNTgwMiwgMHgwM2Y1MjBkZSwgMHgzYzA3MDFmNSwgMHgzODdlZTZkZiwgMHhmMzE5ZDM4YiwKLQkweGZkYjQ3YWUyLCAweDZiZGVmMGQxLCAweGI0Njg2MDNmLCAweDY2NTY4ZDJmLCAweDkwYjFmZjQyLCAweGZmOTA1N2VkLAotCTB4OGM5OTdkYjQsIDB4ZmZmMDNkY2UsIDB4OWM3OTE3ODYsIDB4NzU4MTgzNjMsIDB4ZjlhZjE4YzMsIDB4OGQ3ODBhZDAsCi0JMHg0ZjZhNWYyMSwgMHgyNjc2NDFiZSwgMHgyNzQwNWJiMCwgMHgxOWRmZjY1NywgMHgxZDk1ZmY1YiwgMHhmZmQ3NjMzMCwKLQkweDk4ZDgzZDZjLCAweDMxNWZmNDI3LCAweDAzN2IyNjJiLCAweGFkZmQwNjk3LCAweDRiMjY2ZDEwLCAweGQ3MTkyZTM1LAotCTB4OTE1NTZhOTMsIDB4OWUzYzM2MWUsIDB4MWQ4NjdhNDMsIDB4YTBmNDRkZDksIDB4ZmJmYjYzYjUsIDB4NzM2YzlkMTEsCi0JMHg1NWZmODQ0YiwgMHhjYzRjYjA2ZCwgMHg0ZmViNjlkMywgMHhkYTMzOGI3OSwgMHg1Yzc0YTk5MiwgMHg5N2U3YTc0YiwKLQkweDk0YWI3YzllLCAweDNmYmUxYmNiLCAweDM2OWE3ZjMzLCAweDdlODNmMjg5LCAweDZkNGE4ODNhLCAweGJkMDQxYjFlLAotCTB4ZTJiZTc4NjksIDB4YzkzZTc4MTUsIDB4YmIwNmQ1ZjUsIDB4Mzk3ZGZjOTksIDB4Nzk0ODk4NTAsIDB4MGIxMjFkOGMsCi0JMHhlNGY3M2MwMiwgMHg1N2UyMTMxYywgMHg2ZDc0ZTc4YSwgMHg1NzMyMzc0OSwgMHhjNDU5YmMwYywgMHhlMmI5YzQ3ZSwKLQkweGRlZDIyYjk5LCAweDY4YzI3ODBmLCAweGY1MTdjZmQ3LCAweDUxYzkwNTA5LCAweGU2ZGY3Y2Y1LCAweGI3Y2ZlNTg5LAotCTB4ZjM4MTljYWQsIDB4NzVmZGFiYjYsIDB4NGM3NzZjZTMsIDB4OTJiYTIwZTksIDB4NWYzOGNiMmUsIDB4ZWIwMzA0Y2IsCi0JMHgzNTJiZTc4NywgMHgzYjk4N2RmYSwgMHhjNjliMGY1NywgMHhkNWYyNGU3ZiwgMHhiZjdhM2UzNCwgMHg0ZGZkMDk5OSwKLQkweGZjZmY0NzhiLCAweDE3YTEzY2I1LCAweGU0NjE1OTBhLCAweDlmYzJmNjNlLCAweDBkN2M0YWNkLCAweDc4ZWY3OWRhLAotCTB4OTg3NWU3ODAsIDB4ZWRjNWQwNTgsIDB4YWZjN2I0MzUsIDB4Yjc0NDJjNzgsIDB4ZGUwNGUzZGIsIDB4MjFlOWE1MGMsCi0JMHhhNjU4OWY2OCwgMHg0NzkyNWZjNywgMHg5NTdlYWY4ZiwgMHg3YWE0ZmM3YSwgMHhhYjQ4NzhmNSwgMHg2N2Q1ZDZjZSwKLQkweGVhZWIwNmY4LCAweGQxMmNhYzA3LCAweGM2ZWIwM2MxLCAweGI0ZGZkYWVhLCAweDc2MGU5MjY5LCAweGRhZTlhNjA3LAotCTB4ZDZjZDM0ZTcsIDB4MGIyZDc5YzEsIDB4ZWQwN2VkNzUsIDB4MmZhYmEyNWIsIDB4ZDVkNmFlMGMsIDB4NDFiMjM5MGYsCi0JMHhmZDZkMGYwNywgMHhlMWZiNWQxNywgMHhmNTc1NWI2ZCwgMHhiYTFkYTFjNSwgMHgwZjFkMTFmYSwgMHhlMTkxZTBlOSwKLQkweDQ3ZWQ3NTQ3LCAweDU3NTA3YmJmLCAweDY5ZjNhNjNmLCAweDhiYjhmZDVkLCAweDliZTBlOWNmLCAweGI1ZDY1ZWJiLAotCTB4YThlZDcwOWYsIDB4ZGVjODllMGUsIDB4YjcyZmI1ZDIsIDB4NGYwNzRlZmUsIDB4ZDc0M2ZlNTYsIDB4MGZmNDk2ZmUsCi0JMHg1ZDUzZjU3NCwgMHhhN2VhZWIxZiwgMHhjMWQ1NWMxNywgMHgwOTdkOTg3NywgMHhlYTk3YzhmOSwgMHhjZGVmNzRkZiwKLQkweDhlMWZhZTYyLCAweDlmOWUzYTA3LCAweDAwNDM1NDYyLCAweGZjODVmM2RiLCAweDhjOTc3NDEwLCAweGRhZWQxM2ZhLAotCTB4NzQ4NTk2NWMsIDB4MWYxYTU5M2EsIDB4MzM2YmJhMjIsIDB4NDQ1N2U4YTgsIDB4NjNmOTI3ZWIsIDB4NjVlMzA3YWYsCi0JMHg4YTgzMjVlYywgMHhiMDQ0YWM3MSwgMHhmMTg4ZTRlYiwgMHg3MDU2M2M5MiwgMHg3ZWUwN2IwMCwgMHg0ZTBlOGE5NSwKLQkweGRhZWJhNmY1LCAweDc0YmI1NWE3LCAweDAyYmUxOWY1LCAweDk1ODBmZDVkLCAweDU4MWUwZWFhLCAweDdmNmJhNjU3LAotCTB4MGU4ZjI2ZDMsIDB4NzUyYTA3NzYsIDB4YmM5YTczZWQsIDB4YTVhZjM4M2EsIDB4ZDA3ZWQ3NWEsIDB4YmVhZTlmM2UsCi0JMHg1NzUyYjgzMCwgMHg5ZDQ4ZTQzZiwgMHhiYWRhMWUwZSwgMHg3ODdlZDc0OSwgMHg1ZjU3NDA1YiwgMHhkNWQyNmExYywKLQkweGQxNjhlODhmLCAweGZiYzMyM2MxLCAweGJmNDdlZDc0LCAweDhmZDVkNDFiLCAweGFiYTIzY2U5LCAweDU1YjE3NzFmLAotCTB4ZDVkY2RmMDcsIDB4ZTEzZjZiYTYsIDB4NGYwNzQ4NWEsIDB4ZWQ3NTI3NjQsIDB4NzQ2N2FkY2IsIDB4M2RlNTY0ZjAsCi0JMHhkMjViZmI1ZCwgMHhhN2VhZWFjZiwgMHhlYWU5MmViYSwgMHg3YTY0N2IzNSwgMHhlN2ZhZTdjMSwgMHhhOTk5M2VjMiwKLQkweGZkZWU5N2ZlLCAweDQzMGYyNGMwLCAweDY3M2MwOGZhLCAweGEwNWRlYjUwLCAweGI5YjNmMmZmLCAweDJkMTMwNzNlLAotCTB4YzY3YjQyNGUsIDB4Yzk0NWY5NGIsIDB4NzIwN2EwOTgsIDB4MjA2MDMxMmIsIDB4NWI5NTQyYmEsIDB4MTQ5ZWYxNDMsCi0JMHg1MmE0NTNkMiwgMHgwMzQ3OTg1YywgMHhkZTgxZGU3YSwgMHhmNjhkZGI5MywgMHg5ZDhmNDI2ZCwgMHg4OGQ1Zjk5NSwKLQkweDdkNjc2ZTZmLCAweDMwMzg3ZDFmLCAweDk0NGRiNjVkLCAweDBkZTU2M2FhLCAweGM3OWYzZjdlLCAweGZiZTUwZTM5LAotCTB4YTJhN2U0MzYsIDB4MTRlY2YxMWYsIDB4YjE1N2IzYjQsIDB4ZTc5YzM2YzAsIDB4YjEyOGE5NjQsIDB4NzFhOGUzMTMsCi0JMHg1Njg1MzhmYSwgMHg2NDVlYjU0ZSwgMHg3N2RkODQ3MiwgMHhiMzI1YWUzMiwgMHhmY2ZlMDZlNCwgMHgyNjY1ZWI1NCwKLQkweDU3ZTg4ODhmLCAweGIwMGMyZmM0LCAweGZkMTEwZGZlLCAweDgwN2UwODNmLCAweDhiN2YzZTBjLCAweDZjMGFmODFmLAotCTB4MGFmYzg3YTQsIDB4ZTlmZGJiYzEsIDB4YmJmMWVmMDQsIDB4MmZlN2RjYTgsIDB4YmY1MWYyYTAsIDB4ZmRmYmY1NGEsCi0JMHhlMTNmMDQ2NSwgMHhmNDFjMTBmNywgMHhkMDc5NTI1NywgMHg4N2U3YTVlZiwgMHgzZjA0ZDVmYywgMHg5NjMxN2UwOSwKLQkweGM2NGZjMDQ3LCAweDc3ZjA2OWYyLCAweGYwMTlmZWIxLCAweDg1ZmUxMTdmLCAweGFiNjU0MDNmLCAweDNmOWU4OWJmLAotCTB4ZjgyMTZmZTcsIDB4ODIzZWZmMDUsIDB4NTIwZmU5N2YsIDB4NDIzZmU2ZDksIDB4NTZmZWNiZTUsIDB4ZGZjNTdmYWEsCi0JMHhmZTZiZjA0NiwgMHg3ZjIxYzExMCwgMHhmZDQ3YzEwNywgMHhmYjhmODI2MSwgMHg4NGY4MjVkZiwgMHgwZWNhOTNiZiwKLQkweGRmMmE0NWZmLCAweGZkNTE3N2Y0LCAweDgyMzVmZjI5LCAweDZmNTNmNjdiLCAweGYzZTM0NmZmLCAweDY1NTcxMTIzLAotCTB4MjE1YzRlYzIsIDB4NzBhNTg3ZTgsIDB4MjczOTcwZmIsIDB4ZDA0MmI2MDUsIDB4YTgxMjY5YWQsIDB4ZmEzZmI0NTcsCi0JMHgzY2M0MWZlNywgMHg1NzQ4OTFkNiwgMHhhNzU3NDQwNSwgMHgxZWZkOGRiZSwgMHgyNTY5N2ZlZCwgMHg5YmY3MTlkMCwKLQkweDNjNzgxYmQ3LCAweDIyZWZkMzQ2LCAweGVmZDM0MDVmLCAweDdmNzBmNzM1LCAweGJiZDgxMTc1LCAweDQzZmZmZjE4LAotCTB4YWYzZmI3MWMsIDB4ZDAwYTk5ZDQsIDB4YzQzMWFiOGUsIDB4NWQyZjY4YWIsIDB4ZDkzM2ZiYTksIDB4YWZjZjBjNDcsCi0JMHg3OGVlNDU4MSwgMHg0NzYwNzJjNSwgMHgwMzU2ZGY4NCwgMHhmZGUxMWJlZiwgMHgxOGI0NTk5OSwgMHg0YzNhYzM1NiwKLQkweDMzMmEyZTc0LCAweDM1N2MwNDhmLCAweDM3ZWZhMDc2LCAweDBmNTYxZmE4LCAweDdmYzgwNjM0LCAweGQxZjMwNWI2LAotCTB4YTA3ZGJiNmYsIDB4N2VmNDhjMmYsIDB4MDlkOTZlYTUsIDB4ZDJhMjhmYzIsIDB4NGI0Y2UwYjksIDB4YzYzZTc1MjgsCi0JMHgxNDRhNGU0OSwgMHgxZjBiZWJkZiwgMHg3ODVlNDRlYiwgMHg1ZGFmZjU5ZiwgMHhiYzNiNDRjYSwgMHgwZjkyZWZmMiwKLQkweGM5YjRlN2Y3LCAweDgzNzE4ZDVlLCAweDFmYjlmMjBmLCAweDUxYmU0MWZhLCAweGU4MWU1ZTU3LCAweGZjZjM4NzNiLAotCTB4NzZlZWJkOGIsIDB4MmZmMGEwMjMsIDB4ZTRmZjU5ZGYsIDB4YmYxZWVlZGQsIDB4M2Q3NDU2ZjksIDB4NjJhZTVlYzEsCi0JMHgyOWU1MTMyZSwgMHg2ZTFiY2YzMiwgMHhlNjM2ZWFlOCwgMHgwYjNlNzgyMywgMHhhNjdiNzk1MCwgMHhkNzVjNjNlZiwKLQkweGQ4MjQxNjAyLCAweDE1OTJkNjM3LCAweGYzZDE1ZDZiLCAweDAzOTA4YmZhLCAweGVhMzdjOTdmLCAweGJlNTlmZWNhLAotCTB4ZjJmM2U0ZmYsIDB4OGY0ZWJjZDAsIDB4ZDcxZjI1YjksIDB4NjE2YmNkYTUsIDB4M2ZlNjhiOTYsIDB4ODEzZDc1OGIsCi0JMHhhYmNiZmJmMywgMHhlNDMwNWY5ZiwgMHhmZjhmYTZmNCwgMHg2MWIwYmEwMSwgMHgzMWRhMDU5OCwgMHhjN2E4ZGYzYywKLQkweGFmYTgxY2M0LCAweGY5NDBjZmJmLCAweGQ0NWQxYWQ5LCAweGRmMTA0MDYwLCAweGJjYTA2Y2RiLCAweDAxM2ExZWZkLAotCTB4MmJiZjQwZmEsIDB4ZjFlZThiYTUsIDB4MGYyNDlkMDEsIDB4MjMxOTNhNDIsIDB4NGY2MGNjMDUsIDB4ZjMwNjM2OWUsCi0JMHhiYzVlNzQwZCwgMHg4NDcxOGNjYywgMHgxZjQwMjkxNSwgMHhjMWQzN2RkOSwgMHg0MDlmNzE1YSwgMHg5NWY0MGU3YiwKLQkweGZhN2RmZDg5LCAweDg4MDVkMWFiLCAweDhkYWY3NWFmLCAweGVhYmUyMTcxLCAweGU4MGZiMDhkLCAweGE5MjliZTI3LAotCTB4OGI4NTFmM2MsIDB4NTBkYzY5N2UsIDB4NTkzMjU3OGEsIDB4MzRjZTMxNTUsIDB4ZGU1YjEyZDMsIDB4ZTljNDFmOGUsCi0JMHhhOWJhNzRlNywgMHhlOWZkNDgzMiwgMHgwNzRhNTVjZiwgMHgxZDJiN2RmMSwgMHhjMzczZjdjNCwgMHg0OGQ3MGZmYSwKLQkweDQ3ZDNlZjMwLCAweDk0N2RkMTJmLCAweGY0ZGZmMzVlLCAweGM0NmU2MTY2LCAweDlkYjVkN2JjLCAweDIxODllMjlkLAotCTB4ZmU4YmU3YmYsIDB4Y2M5MWJhMzQsIDB4NWIwMWRmNzYsIDB4ZTliYWJjZTQsIDB4ZmJhZTFjNzgsIDB4Yzc0MDQ5MmYsCi0JMHgxN2M3NDQzOSwgMHg5NjcwZmNmMCwgMHgxZjM4OTVjNSwgMHgwOTQwNGVjYSwgMHgxZmJlZTlkYSwgMHgyZGZmZTQyYiwKLQkweDRiOTUyYTYxLCAweDE1Y2E5Nzk5LCAweGI3NDhlZGIwLCAweDMzMmVjMGRlLCAweDZiMzU3YmUyLCAweGNiNmJlN2E1LAotCTB4MWQyMjc0ZWUsIDB4YzhmYTM3MmYsIDB4OTk4MzVlMmYsIDB4Y2I5ZTc4YjcsIDB4MDFkMjJhYmEsIDB4NmQzNWI3NmYsCi0JMHhkMDFkMjM3OSwgMHhkNzY1YTczNywgMHhjZWNmOGM2NCwgMHgwMzdlMmUwZSwgMHg4NjQzYWFjYiwgMHgwYTg3OTgwYiwKLQkweGU3MGIzMTdjLCAweDZiYTg2OWQ1LCAweDJmZTMwZmVjLCAweGUzNjI2NjdjLCAweDRiM2U3ODAwLCAweGRlYzFmYmUyLAotCTB4YzlhMWZiZTIsIDB4MDM3NWU4OGQsIDB4OTQxYmNjMWYsIDB4ZDBmMmViOGEsIDB4YTU0NzI0YmEsIDB4YjY2YTBmOGUsCi0JMHhhNTIxOGYzMiwgMHg5YmJlMWYyNywgMHhmYWVlY2EyZiwgMHg1Zjk0MDBkMywgMHgwN2M1MTc3MiwgMHg0OTY2YmRkNiwKLQkweGNkNWU3ZGM2LCAweGYwNjAzZGI4LCAweGNkMGZmMTY4LCAweGU3NDQ2MDBlLCAweDE1NzhiMTc3LCAweGU4MjQ3ZGRiLAotCTB4OGM4MWEzZmEsIDB4MDMyM2ZhZTgsIDB4M2QyNTg0MzgsIDB4ZjJjYjI5ZjYsIDB4ZjRlNDk3YTUsIDB4YzY3NWViZTgsCi0JMHg5ZTIxODY2NywgMHhlMmQ3OWY0MCwgMHhkMDdmNTc3YywgMHg4ZGQ4YWRiYSwgMHg4NTk4M2Y3MiwgMHg2OWU5ODlmNiwKLQkweGQ2ZWY1YThiLCAweDU1ZjYxNWU5LCAweGViNWM0ZjQyLCAweDNiOGYxMzQxLCAweDUwY2JjZjQ1LCAweGQwYmZlMjc2LAotCTB4NTk5OGIxMWUsIDB4ODAzOWNmMDAsIDB4ZTQyOGQ5YWYsIDB4ZTI2NmZlZTcsIDB4MmQ0NDdhYWIsIDB4NzkyNmM3YzYsCi0JMHg1NTdjZmM1ZCwgMHgzMTY5ZmZkZiwgMHhiOTJmOGVkZiwgMHhmNTgwMWMzZiwgMHhmN2E0OWM2MCwgMHg1OTRmNWMzOCwKLQkweDIxYzY3YmUyLCAweDM0NjRlMWI5LCAweDljNDFjZWNlLCAweDk4ZjFiNTdmLCAweGVkMTMzM2FkLCAweDdkZTNmYmY3LAotCTB4ZDVmZGMwM2YsIDB4M2Y5YTNkZTIsIDB4MzBmZWUxZDksIDB4OGQ5OWVlOTcsIDB4Zjc0MzU0YmQsIDB4ZTg1OGM2MzcsCi0JMHgyMmFkZGY3ZSwgMHgxOTZiNzYwZSwgMHhhYWRkODM4ZiwgMHg0N2M2YmRjNSwgMHhlMmEyYmRjNSwgMHhlYzdjNmMyZiwKLQkweDk3MjY5ODM4LCAweGVmYzk1MzE5LCAweGQwN2Y2NDJkLCAweDE3ZjE0ZmQ2LCAweGQyZjYwZTRkLCAweDMwOTBiMGFiLAotCTB4MTQ1ZGE1YzUsIDB4Y2I4ZWU4YWYsIDB4MWU3OTliMTQsIDB4YWQzMDZiOGQsIDB4ZTRlNDJjYzcsIDB4NGY5NzJmNGUsCi0JMHhkNTY5ZmJkYSwgMHhmY2U4YzJlMCwgMHhkNWNiMmIwOCwgMHgwZThhMTFmOSwgMHhhZTk3NTgxZSwgMHgyNmQzN2Y2YiwKLQkweDFkZGVhZTk3LCAweGU3ZDVkMDI4LCAweDM4M2FhOTM0LCAweGQ3NGNhNWFmLCAweDhmM2VkMDdlLCAweDU2MGMyZTBlLAotCTB4MzkwZmRhZWEsIDB4NDNjMWQ1ZTIsIDB4ZWQ3NWFiNWIsIDB4NzRmOWI3ODcsIDB4OTVhMWM1ZjUsIDB4MWQxMWZhYmEsCi0JMHg2NDc4M2E3NSwgMHhmZGFlOTM3OCwgMHhiYTAzNzdlOCwgMHg0ZDlkMzFmYSwgMHgxNzcxZmFiYSwgMHhjZGYwNzQ1YiwKLQkweGVkNzRmYjVkLCAweGVhMGI1YzI3LCAweGE3YjIyN2VhLCAweGQ2ZTVmNTc0LCAweDY0ZjA3NTY3LCAweGY2YmE1N2U1LAotCTB4NzRmZDBiOGYsIDB4ZWViYjdhNGIsIDB4NDlkNzU0ZjksIDB4MGJkMzdiZGQsIDB4YzdlMGU4Y2UsIDB4MGY5MTlmNzEsCi0JMHgwZjg5OTgxNiwgMHhlOWVmYWE2NiwgMHgxMGYyNjdkZSwgMHhlMzliOTM4YSwgMHgxZGZkYjNmOCwgMHgzY2EzMTQ2ZiwKLQkweDE3MGM2ZmRjLCAweDZlM2U5ZjIzLCAweGY5NjM3NGVjLCAweGI1YjVjMTg0LCAweGNlNDlkMDFmLCAweGQ2MTQ4OWY4LAotCTB4YmM1OGFiY2UsIDB4MzM0MWNiMTUsIDB4NWQ1MzE4YjYsIDB4MGY3MzFmYjAsIDB4MzkzZDQ1NmMsIDB4ZThkZGE2YTQsCi0JMHhkMmU4NzgwNCwgMHg4ODlkNWJiMywgMHgyOTA2MzVmNywgMHhkMWJkZjEwZCwgMHg4OGU1OGY1ZCwgMHg3NGE1MTNjZCwKLQkweGIwZDkxZmE4LCAweGU4ZTUxZWI4LCAweDhiMzNlNmU4LCAweDAwNzQ5NmQxLCAweGZlMzE4N2NmLCAweDNlODg3YjI1LAotCTB4NjkxODY2MzcsIDB4YzY0NzFiZGUsIDB4Y2VkY2RlNTMsIDB4OWQxOTM2YjEsIDB4OWMzYjlkOTYsIDB4ZGMwZjE4MGQsCi0JMHgwOWE0YTNiOSwgMHhiZjYwNmRjYiwgMHgzNThjY2QwNywgMHhlNThlZmQ4MSwgMHg4M2RmYjAwZSwgMHgzYzZjOGJlMCwKLQkweGU0MjRlN2YzLCAweDUzYTZlNTQ3LCAweGJmMmU3OGU5LCAweGFhNDdkMjdkLCAweDRhMTVjNTUxLCAweGJmNDM4ZjczLAotCTB4MjJmMWE5Y2QsIDB4M2I5YTUxNWYsIDB4NGVmYjc0MTEsIDB4ZGY4MDQ5ZTQsIDB4MTczMDkyM2YsIDB4ZTFhMzcwZjMsCi0JMHhhZDc4ODcxNywgMHg3MmY3YzgwNSwgMHhiYWVkMWI4YiwgMHhhYzA2ZmQ1ZSwgMHhmZTAxN2VmYSwgMHg5MjdhZmQ2NiwKLQkweDFlNzg1ZmIxLCAweGFkMjE2ZjMzLCAweGY3ZTFlYjgwLCAweGRlNWE4YzBiLCAweDcxNWJlNTNhLCAweGIwNGExYzUzLAotCTB4OWU0MTEyM2YsIDB4ZjBlOThmMzUsIDB4Y2FiYzAwYWQsIDB4ZWU4MTlkNGEsIDB4MjZmYjhiMDksIDB4ZjhhNmFhMTgsCi0JMHgyNmFmZjVlZSwgMHgyZTljMDNjNCwgMHhlNDUxZGJkZSwgMHhmZTgwMmJjYiwgMHg5Y2EwNjA2YywgMHhmNDk3YTA4YiwKLQkweGQwNDcwMGE1LCAweGVmYzA1ZWM3LCAweGY5OWVkY2I5LCAweDA2MzBlZTk4LCAweGE2MGI5MDY0LCAweDE1NTU3ODlmLAotCTB4NTE2Yzc5YzYsIDB4N2I5NzM5M2MsIDB4MjIzYjdhY2QsIDB4ZGM4ZGU0NGYsIDB4ZjcxNDYwNTcsIDB4NjhhOGU2NWYsCi0JMHhjMDU3ZGNmZiwgMHhmZTIzZGNmNSwgMHhlN2NmZjM4YiwgMHhmMzVkZmY2MiwgMHgzMjllMDNjZiwgMHgwZjk4ODY5NiwKLQkweGY1NGQ5OWU0LCAweDYxMWE5OGFhLCAweGIxNzU2N2FhLCAweGYxOWJjOGZjLCAweDZmYmMwNjEyLCAweGVlOTI3NjNhLAotCTB4NzAyYWFmYWYsIDB4ZDQzMjVlMTEsIDB4ZmY3NzVhMTYsIDB4NjQ2ZmQwYTUsIDB4MzNhZTRkOWMsIDB4ZGE0MDNlNjAsCi0JMHhjZTAzM2FlNiwgMHhhYWYxNGQyZiwgMHhhY2M3OGU3OCwgMHhiY2ZkZGQ0ZSwgMHg5OTdmNGRiNCwgMHhhN2U0MWU3ZiwKLQkweGIxNTVlZmM5LCAweDQ2YmE2OTlkLCAweDIyMmIyMThmLCAweDkyNWFhYWZiLCAweDQ3Y2M2MmM4LCAweGZjOWQ2ZDJiLAotCTB4N2FhZmE4ZmMsIDB4NzU5YmM5NDcsIDB4NjI1YTM3OTQsIDB4ZDExMWUxNzMsIDB4ZWFiNmM1ZTMsIDB4N2JmNjMxMDMsCi0JMHg2NmVmZDg5NSwgMHg5YjdjN2U4NywgMHhlNDIwM2U3NiwgMHg3MTg1NTVmNCwgMHhmN2Y4MjEzZCwgMHg2YjBlMjRlZSwKLQkweDVjNWRkY2ZkLCAweGY5YzM3NjkyLCAweGNlNzQ2M2VlLCAweDMwY2RjMWE5LCAweGY5YTllMjBlLCAweGQ3MTViYjdhLAotCTB4MGI3OThjZGYsIDB4ZTkxODJmYTQsIDB4NTQ3ZTI3ODksIDB4YTE4NzYwNzAsIDB4YTJmNjNlZjcsIDB4YzRmY2EwNDcsCi0JMHhjZThmYTQxMiwgMHg4M2YwM2Q2MCwgMHhhMmFjZDhiZCwgMHhkZWZiNjQ1ZCwgMHhkZWVhMDM3MiwgMHg4OTQ3NTY3NCwKLQkweDE1OTFiNjM3LCAweDFiYjBmMjFkLCAweDRmNWFhZmNjLCAweDNkM2U2OTg3LCAweDk3ZDkzMjlkLCAweDYyZmFmOTQxLAotCTB4MWMzZDM1MWYsIDB4YWZhNjZmYmQsIDB4Yzg3MmQyNzIsIDB4ZDk3OWUyZWUsIDB4NjdmZTRlMWIsIDB4ZWYwMjJmOWMsCi0JMHg1NTdjMTIzZiwgMHhlNDI0NWFjNiwgMHg5NWFjYjE5MywgMHg0YzJjZjFjYSwgMHgxNzU4NzdlNSwgMHhjOGE2MWU5NSwKLQkweDJhNjI0ZTU4LCAweDRiY2MxNTk1LCAweDQ3NTYxNGU1LCAweGExNmIyNTY1LCAweGE1NmIxYTcyLCAweDUzMGIwNjcyLAotCTB4OTUwYWZlMDksIDB4NWY5MGE2NWUsIDB4MzZmNDFiMzUsIDB4OTc5OTczOTYsIDB4OGVhYzc5Y2EsIDB4MWQyMjlmY2EsCi0JMHg1OWFiM2UwMywgMHg1OTBiYzEwYiwgMHhjMDZkOTUyYiwgMHhmYWE1Nzg3ZiwgMHg1ODZmOTA2NSwgMHgwZGYyMDJiZSwKLQkweGU5ZmNkN2NiLCAweDJlZmM4NjU0LCAweGJmNDdjYWU2LCAweGUzY2E4MGJmLCAweDEzY2E5NTdlLCAweDNiMmEzMmZlLAotCTB4Zjc2YTFlZmMsIDB4Y2E5MmJmYTYsIDB4OTUyZjdlNTMsIDB4NTRkNWZkYTcsIDB4NmEzZWZkODYsIDB4MjU3ZmI2ZjcsCi0JMHhlYmY4ZWY5NSwgMHhmZjM3ZmNhOCwgMHhmNWRmMmEyNiwgMHg3N2ZjYTgwNywgMHg3OTk1MTM3ZiwgMHgzOTc2NDY2NiwKLQkweGNmMTUwODJiLCAweDdlNjdmYzA2LCAweDYwYjhmNjYwLCAweDNjMGFhZjFmLCAweDUzMThmMzFlLCAweGZmNzA1MzBiLAotCTB4NGRmMTg2NjQsIDB4MjIzMWM1NWIsIDB4NDhjYjliMGEsIDB4NWM5YWRkZjcsIDB4Mjg5ZGQ5NDcsIDB4M2I3MzRmMDcsCi0JMHgyNzY2OWVjZCwgMHg3MmQ2ZDAzYiwgMHg2MTNlNjE5YywgMHg0YTUzYTE5YiwgMHg3OTNjYmQ4MCwgMHhkNmI5OGVlNCwKLQkweGFmOTNkMDQyLCAweDE1MDQ4NmIwLCAweGFkYmJhNWUxLCAweDMwOWUwN2EwLCAweDAyN2VlYjg1LCAweDk2MGJjN2Y1LAotCTB4Y2U4MmI1Y2MsIDB4ZmI3ZjZiMWEsIDB4NGMzOWE3ZTMsIDB4YjM4ZTYzZjUsIDB4ZGZlMDA1N2EsIDB4MWJiMTU5MWUsCi0JMHgzY2UxMzBhZiwgMHg1N2JlZGU1MCwgMHhlNjJlN2FiMCwgMHhmMjE1NWZlYiwgMHgwMGMzN2MwMiwgMHhiN2FkMmRlNSwKLQkweGIxNmYzMTA1LCAweDMxNjhlNWI4LCAweDc1MzFiNjJhLCAweDM3ZDQxMmI2LCAweDFlMjhlZDExLCAweGU4YmI1N2QwLAotCTB4YzdiZGVkN2EsIDB4ZTIxMjlkNmEsIDB4NjRjZmY5YTEsIDB4OWNjY2IzN2UsIDB4OWRjNjMxNTAsIDB4N2UzNWZiMjIsCi0JMHg3NDk5ZjFiMywgMHhkYjIzZjE4MywgMHhkZmQwNmUxOSwgMHg5ZmNmMjI4ZSwgMHhmZmZjY2Y1MCwgMHhmYTY4ZjNhNiwKLQkweGVjNzU3ZDM2LCAweDA2MmVmYTU5LCAweDdlNDM4YWViLCAweGU1YzQ5ODNlLCAweGE1ZDgxNzRkLCAweDBiMzRkZmU4LAotCTB4MzY0Yjc5YjgsIDB4YjUwN2E5ZDksIDB4Y2JlZmIzN2MsIDB4NWUzMDdmNTQsIDB4ZjA4MWQyYmQsIDB4Mzc4YTVjOTYsCi0JMHhlMjc5MjczNCwgMHg2MzdkYjEwYiwgMHhjYzlkYzkzNiwgMHg2Mzc5NDYwNCwgMHg4YTEzZDUzYiwgMHhlM2VmODIyYiwKLQkweGIyZmNiOTBiLCAweDcyODVmY2RkLCAweGVmZTVjYTI3LCAweGFlOGYwY2NiLCAweDNiZmVmYTZmLCAweGRlMDBiNzFkLAotCTB4MDU0NjhkNWMsIDB4ZTZmMTJkZjcsIDB4N2U1MTJhNzcsIDB4YTNjYjM3MDQsIDB4MThlMzIxMjQsIDB4MTI3OTJmZDUsCi0JMHhhYTlkYTZmZCwgMHhmNjFmM2UzOSwgMHgwZWEyMDBmNSwgMHgxYjI2YWNlZCwgMHhmZDk5NTlkOSwgMHhjMzc3YzU0MiwKLQkweGNmMzI4ZDc4LCAweDZmOTY4YWZmLCAweDljYjkwYmIzLCAweGMzNGJkYTM3LCAweGMwYjc2ZTc0LCAweDQ0NzhjMmVhLAotCTB4ZDliMGYyNWYsIDB4ZjNjMmNhZWYsIDB4NmZiYzY3NjQsIDB4Mjg3ZTAzMzEsIDB4NGE2NzZhN2MsIDB4YTc3MzI4MjMsCi0JMHhhMzEzZGI4MywgMHhmNjQ4M2E5ZiwgMHgyN2M4YjM0NCwgMHhkMjMxNGM2ZCwgMHgyNTZjNDlmNywgMHg0NDUyMDNjZSwKLQkweGM4NzMzNmJmLCAweDM2ZjhlNzg1LCAweGIxNjNlMGEzLCAweDMyMDdlNjllLCAweGY3Yjc1ZjI5LCAweGVmYmE1ZDNjLAotCTB4OTg1NWQ5MTUsIDB4NmUxYzg0NDcsIDB4ZWU4MTcxMTYsIDB4M2ZmNDQ2ZjEsIDB4Y2RjNDQ1MjAsIDB4NGE5MDk2NmMsCi0JMHg0YmZhNjllMywgMHgzZmM3NmYxYiwgMHg5MTRlZGUzNiwgMHg2NzhkYTkyNywgMHg5ZjVmYTUxZiwgMHhmNWE2MWNkZCwKLQkweGExZmQ4NWQ5LCAweGQ3MTNiNzhkLCAweGUzMGYyMzE3LCAweGY1YzNjNzZiLCAweDVhMzc4ZTQ1LCAweDI1YmIzZWJmLAotCTB4NGJiM2ViNGMsIDB4MWVlOTVlZGMsIDB4ZjFlYzQ3NmYsIDB4NGY2NzFhZmEsIDB4NTY5Y2ZlNTQsIDB4NzJlNDJmY2UsCi0JMHg3NjMyY2MxNSwgMHhkMzNmZjYwZSwgMHgwOWY5ZTljMiwgMHhkOWM1ZDMxMywgMHg3ZTdhMDkzNywgMHhhNjk3ODhiMiwKLQkweDk5MmU1YzA5LCAweGNmYmE2NjljLCAweDcxNzlkMTMzLCAweDZkYjVkMjE3LCAweDlkY2U5MWI3LCAweGM4MjcyOTZjLAotCTB4NGVkMzkyN2UsIDB4NDBmYzg5MzEsIDB4OWZjZjhhZDYsIDB4MDJmN2YwMzAsIDB4Nzk5OGU2YTksIDB4ZTFmYzdiMmIsCi0JMHg3MTExYjlmOSwgMHhjZWI1MzRlMywgMHgxMzRmZjk4MCwgMHhlMzBjMWQ5ZCwgMHgzMzE0YjZlYywgMHg2Mjk2ZGZhZCwKLQkweGZjYTFjNjBkLCAweGNkODA5OTU1LCAweGRiODAwNGMxLCAweDBiMWI3YzhiLCAweDk1NGUzZDYxLCAweGM1MzM4YmYzLAotCTB4OTJmMzAwN2MsIDB4ZGZhMWFhZDIsIDB4ODRmZjdkMDgsIDB4NzcyNjYzYTAsIDB4ZWUyMmFiYmEsIDB4YzQ1YjNjZDcsCi0JMHhhZjhkNDllZCwgMHg3MjM3ZTdhMywgMHg0MWZmNWYzMCwgMHg0ZjMxZTdmMCwgMHg4ZjBjNmJhNywgMHhkYzNlOWM5MywKLQkweDU5ODdmYzlmLCAweGQwN2JjNjBmLCAweGMwZmQzZThmLCAweDc3ODIwYWUwLCAweGY1ZjNhNThjLCAweDRlYzc4N2QzLAotCTB4ZDY2MjdmNDEsIDB4ODI0NjY5OGUsIDB4ZTMwM2FjMGQsIDB4MmM3NmIzMWYsIDB4Y2NmM2UyMzQsIDB4ZGZmYjQ2MWMsCi0JMHhmMjRjZDY3NSwgMHhkNThlZDY3NSwgMHg0Y2JmZmRhMiwgMHhjNjY1ZjZjMSwgMHg2ZTMwY2ZjMCwgMHg5MWVmNzY1MCwKLQkweDhjOGI4YzA0LCAweDAwMzczZmI1LCAweGNlYzZkM2NiLCAweGEwN2RmODhkLCAweDFiZjYxNTViLCAweDViYmNkNzM0LAotCTB4YjIyOGVkOTIsIDB4MzZjODFlYWIsIDB4NDRmNTlmYTEsIDB4OTliZjNmMjEsIDB4OWUyNjNjYzMsIDB4YmYyNWUxODcsCi0JMHhmMDkxZmM3ZSwgMHhmYmIyYmMzMSwgMHg3MmFlZDY5ZCwgMHhiNGY2YzYzYywgMHg5Y2IxYzcyOSwgMHhkYWYxNTIxNCwKLQkweGYwZThhYjMyLCAweDRhNzJjNzFlLCAweGNkMDJhZWI4LCAweDViNzdjYWQ5LCAweDMxNTk2MzhlLCAweGUyMDRmN2RjLAotCTB4NDZmN2YwZjcsIDB4YzYxNGZjOTUsIDB4NmU2ZmJhYzksIDB4ZDkzYmRhM2MsIDB4MGYyNzQzNWIsIDB4NDRkNjVjNTAsCi0JMHg5NGY2YzJmNywgMHgxODI0OWI3OSwgMHg2YmNiOGY2ZiwgMHgyN2I0M2Q0NSwgMHhmMjQ4ZGIyNSwgMHgyNTZlYTkzNSwKLQkweDNjNjA3M2FkLCAweDUxZWU3NWMzLCAweDQ1Yzk3MTdjLCAweGJlYzk3NzI0LCAweDExZWMxMzdmLCAweGU3ZWVmZmRjLAotCTB4MzNmOWZjZjEsIDB4MTUxYWZlODIsIDB4Zjg4OTM1YWYsIDB4MDI3Y2ExNDAsIDB4OWFjYmIwOWIsIDB4MTUxZDI3OTksCi0JMHgwNGY3NmNhMSwgMHhjN2I3MmUzMSwgMHhjMDc4ZTVjMywgMHg2YzUyZmRjNiwgMHg1OGVjMGRiZSwgMHhlYzY5OTJiYSwKLQkweDk1NTk0ZmQ5LCAweDYwYzc3OWY1LCAweGIyYmY2MGRlLCAweDEwYjI4NzY4LCAweGE2YmM1ZmVkLCAweDBmZTgzMDhhLAotCTB4YzYxZDVkZmUsIDB4ZTZkZGExZjUsIDB4MzZiZTM4YTQsIDB4ZmExNGI5N2YsIDB4OWMzM2EwOGIsIDB4Y2Y1YjZjZmYsCi0JMHg2N2I4ZGE3YiwgMHgyMzdlN2FjNCwgMHgxZjFlZjRlNCwgMHhlZjliNGZlZiwgMHg0NjM3MjhkYiwgMHg0NjVkYmNkMiwKLQkweGU2MjQ4ZjljLCAweDQ2MzBlYjAzLCAweDFkYTIyN2NjLCAweGRlN2JhZmFkLCAweGY3ZTc0ZDRjLCAweGRmOGMzZDRkLAotCTB4MzkyZTY1NDMsIDB4OGIwZWZkNjIsIDB4MWU5MTJhZDcsIDB4YmY0ODJhMzQsIDB4Zjk0OGQ1NzYsIDB4MmZkYjc2ZmMsCi0JMHg3YTNmMGYyOSwgMHg3OTBhMTcxZCwgMHg3Mjg3ZWFiYywgMHgzNjVmYTE4OCwgMHhlNDMwZjU0ZCwgMHgxZTJhMWZjYiwKLQkweDAxNjRhYmIyLCAweDBlZGMyOWNiLCAweDYyNGZjNzkzLCAweGNhZjU4OGE2LCAweGRkYTg5MzI5LCAweGYxOGY2ODM0LAotCTB4MDk2NTY5YzUsIDB4NzRlYmQyMmEsIDB4NzBhMGRhZDYsIDB4MmU3OGUwM2YsIDB4MzE4ZjJmY2MsIDB4MmNiNzVlNWQsCi0JMHg5ZmFhYzdlMCwgMHhmMGJiNzJhYiwgMHg3YjRiNTkyYSwgMHhmNzQ1ZGEwMSwgMHg5ZGJjYTcyYywgMHgzYWQzMGQ4NiwKLQkweDA1ZTliZTcwLCAweGExOTNkYmViLCAweGRmMzlmYmRlLCAweGUzY2M1Njc3LCAweGNiNzYwMzcyLCAweDhjZGZiY2JhLAotCTB4OWU0NzAwOTUsIDB4MzBmNGZiNWYsIDB4YmRhZTgzZDAsIDB4NDMzNjU3NDYsIDB4ODQ3NjgyYTUsIDB4YWVmYWUxMzEsCi0JMHhlY2JmOTgzYywgMHgyYzFiZmFlMCwgMHg0NjM3MzY1YywgMHg1ZDE3YmEzYywgMHhmYjZiZmMwOSwgMHg0YjljMWY2MywKLQkweDFjNmQ5NGY4LCAweGI1NGJhY2VmLCAweDg5ZjdjNmRlLCAweDg0ZmU4ZGU4LCAweDZkODFlYWYxLCAweGJlYmQxZjMxLAotCTB4N2RlMjBhNDIsIDB4N2I3NzdiNGEsIDB4MWFmYjhhOTYsIDB4OTZkOTRmYmQsIDB4Yjg3OTVkYWUsIDB4Y2E0Njc1ZmUsCi0JMHgyYmM2OGYwZiwgMHhiOWI3MTFkOCwgMHhhNGQ2Y2U5MSwgMHhhNzNjM2Q1MCwgMHhlOGNjNmY3YywgMHg4YTQ3ZWVlOSwKLQkweGUzZjdlYjA1LCAweGNhM2ZkYWViLCAweGJlNzhiYjgyLCAweDdhNzlmZWE5LCAweDA1OWJjOTRhLCAweDUwMDcxNGE1LAotCTB4ZWJlYjM2ZjksIDB4ZjdlYTM2ZjMsIDB4MjgzYTYzMTUsIDB4MTY1NGQzYzcsIDB4ZmRiZmI5MGMsIDB4Mzk0YjRlN2UsCi0JMHhiZDZjYzE1OCwgMHhiYmEzNTVmNywgMHhlNWIxN2VjYywgMHhjZTQyMWJmYywgMHhkMzI4MjY2NywgMHhhN2NlNTAwYSwKLQkweGYzZmVjOTFhLCAweDIzNTMxYWE2LCAweDgzMjlkZWZkLCAweGYwOWNmZWI5LCAweDM3ZTQ4ZDkyLCAweGY3NGFjMGZiLAotCTB4Mzg1MGQ0ZDYsIDB4NDljNGVkMDEsIDB4M2VjOTE4NWYsIDB4ZDFkNGUzN2YsIDB4Mzk0MWE3ODcsIDB4OWI0YjM3ZjksCi0JMHgwY2U0ZGRiMCwgMHg4NmVkMGU3OCwgMHhjNDdkNzRiZSwgMHg4NGI3NjQ5ZCwgMHg1ZjVmOTEwYiwgMHhlZDkzYTE2NiwKLQkweDRjM2IxZmE4LCAweDJkYTdiZGY0LCAweDI2NTM2YzlmLCAweDRjYWJmZWUxLCAweDZkMjlkY2M1LCAweGRjNjIxNWRjLAotCTB4NWUwMjliNWYsIDB4OTk2ZWE3OTIsIDB4NTFlN2U0MWQsIDB4ZjZkMmJmZDcsIDB4Mjg2NWM3ODksIDB4ZjAzNjU3N2YsCi0JMHhiYWQ1N2JiNSwgMHg5OTk3ZDIzYSwgMHhmMTQyY2M0NSwgMHhkMjJhZjBlZSwgMHgxOWUzMWJjNywgMHhhNTZjY2JmMiwKLQkweGNmMDhiYmY1LCAweDQ2NjRlY2JlLCAweGVhYjY2ZmU4LCAweGYzYzYyZDMyLCAweGNlNjc2MTE5LCAweDQ0ZDM1NDUxLAotCTB4M2Y5NTU1MmMsIDB4NzNlN2YyYjcsIDB4OWYzZDBmMTUsIDB4NzNmODdhYWIsIDB4NmZlZmY3MWIsIDB4M2Y2MTAyNTMsCi0JMHgyZDliNzdmNCwgMHhkZGZkODVkOSwgMHhmZDc5N2FhNiwgMHg5ZmQ1MGIzNSwgMHgxNzJmZmYwMiwgMHgxNzFhYzE1OCwKLQkweGI3YWU1MDUwLCAweGYzZjIzNDVjLCAweGQxM2M1ZjJmLCAweGE0YWRhMzdiLCAweDJiZjM4NWMzLCAweDM2ZmRkMjM1LAotCTB4M2VlODkzYjAsIDB4NGJjNTRlZjIsIDB4MzJmNzkxZjcsIDB4ZjgyMjA2NWYsIDB4NjRkOWQyZTUsIDB4NjI5Y2JmNDcsCi0JMHgyZjRiN2JhNCwgMHhiZjBjOGM3YiwgMHg5MWE4MTQwMywgMHg0MTQyM2RmOSwgMHg2NzU3MmY0NywgMHgzNjU0ZjlkMiwKLQkweGViZjcxMzIyLCAweDQzYjI1NmJiLCAweDBmYTBmMTFhLCAweGU3Zjc1N2RiLCAweGY2ZTY0MmZhLCAweDI5NTFiZWMzLAotCTB4NjE2MWRlZDQsIDB4MDc0ODk1YzksIDB4M2JjYTY1ODcsIDB4MWU3OGUxZmYsIDB4NjUwZjk0M2YsIDB4NzM1ZWQxMDcsCi0JMHg1ZGY5ZThkNiwgMHhlOWM0OWQyZSwgMHhmMjBhNjU0MSwgMHgyNTU1MGNjMSwgMHhjZGRmYWZiYSwgMHhmODhiYTM1NCwKLQkweDdkODdkZTllLCAweDJjZWU3NWE1LCAweDFmYTJiYjdkLCAweDU1NTQ2YmMyLCAweDkzYTE4Y2UyLCAweDZmYTVmNTE3LAotCTB4OGNmODNjNzMsIDB4YjNiZTQ3OTQsIDB4OWJlZmJjNTQsIDB4ZDdjNzA4NzQsIDB4ZTBiMDdjZjgsIDB4ZjRhZTRkNGYsCi0JMHhmNTJhNDM5NiwgMHhhNDlhNGY2MywgMHgzMDY4MDBlZSwgMHhiZmZjODAwYywgMHg1MWNmMGNjZiwgMHg3NGNiMjQyZSwKLQkweGE5NzA2YWRmLCAweGY1ODY1MjFjLCAweGU4ODY3ZGYwLCAweDRmZTBiMDc3LCAweGNmOWU4OGY5LCAweGUxZTkwZWYyLAotCTB4ZWVmZjA0NDcsIDB4MWZiOTIxNjMsIDB4ZThjMmRiZjYsIDB4OGI0MDZhNWMsIDB4M2U3ODFkYmUsIDB4ZDE2Mzk0MDYsCi0JMHgyMmFiZmM3YywgMHhkNDhmMTY4MywgMHg5ZTE3YTFlMSwgMHhkOWQ3YjE3ZCwgMHg1YzQwYWViMywgMHhjOGNiYWQzZSwKLQkweDVkZTQyNWQ3LCAweDNkMmI2ZGFlLCAweGQ1NjQ1NWNmLCAweDJkNjJmMzg1LCAweDA3ZmFlMzZmLCAweDQwYzE5MjFjLAotCTB4MzUyYWZkODUsIDB4NzgwMWNlY2UsIDB4NzEyNjQwNDYsIDB4NDk4NTkzMzcsIDB4YmFkZDdjNWUsIDB4MmI1YzQ1MWIsCi0JMHhlYmQxOWQ3YSwgMHg0NGIwNjViYiwgMHhmMWNjY2JlYiwgMHhjYTZlYzk3OSwgMHgzMjZlYzk5MCwgMHgxOGMyMDA2ZCwKLQkweGJkYjBkNzhlLCAweGEzNzE2ZTNiLCAweGQ0ZmIzYjNkLCAweGU2NDM5MDYwLCAweDE4MmI1NjdiLCAweGU0MjMzZTBmLAotCTB4ODkyYmU5OTIsIDB4NTZmZGQ3ZDMsIDB4ZGE1MzU3YTIsIDB4ZmJjODgyOGMsIDB4NGY4Njk3MmEsIDB4ZjMxODMzM2EsCi0JMHg3YWJhYmZiZCwgMHg0ZjhmMTA3MiwgMHhlNWEzZmUxMSwgMHg3ZjQ1NWZkYywgMHhmOWY1M2E2MywgMHhjNjJlZTM4NiwKLQkweGU5YzdlNTQ3LCAweDVjMjcwZGYzLCAweDFmOTUxZmViLCAweDFmOTUxMzk3LCAweDNmNTc0NDM3LCAweDk1MTExOTU5LAotCTB4MmEyZTM3MWYsIDB4MDc1Y2FlM2YsIDB4YWU5ODJmNGYsIDB4OWQ1MzNmNmIsIDB4MmQ2ZjgzYTMsIDB4N2RhZWFlZmIsCi0JMHg1ZDRlZTc5NSwgMHhiYmNhOWNmZCwgMHg3OWI3ZjU3NCwgMHhmM2MxZDZlZiwgMHhiNWQ3ZWZhYiwgMHhkN2FiZTA1ZiwKLQkweGU1Nzc3ZmQ1LCAweDIwZjU3NDBmLCAweDhiYzY2MjJmLCAweGY3NGEzYzMxLCAweDYxM2RkMzg2LCAweDMwMTZhMGZhLAotCTB4M2Q4NjM3YmMsIDB4NTc3MjI5MjAsIDB4ZjQ3MWZlYTQsIDB4MWU0YzVmZTEsIDB4NzFlM2Y3YzIsIDB4M2IwOTNmY2QsCi0JMHhjNDU5MWM3OCwgMHg4MzhiNTk1ZiwgMHg3YzVhYjFlMiwgMHg5YTc2MzQzNiwgMHhiNzIyZmQxNSwgMHhiZDQzNGQ0NSwKLQkweGY1Y2I3ZWNlLCAweDc0MzgwYjA2LCAweGRmODljYjcxLCAweDFiNzZhNGFiLCAweGZjZTliMjkyLCAweGIzYjA1MWUzLAotCTB4ZWYzMGY5N2QsIDB4ZTkyN2NmMjAsIDB4MWM2YjAwMWYsIDB4NTAwZGRiZTMsIDB4ZDdmZWJiNDIsIDB4MjIzN2NjY2MsCi0JMHg5ZTJjMWU2MiwgMHgzY2I1ODVjNywgMHhlNjRmMzEwNywgMHg4YmYzZTA0OSwgMHg2MWY3Y2ZlMywgMHhmZDFmMzEzYywKLQkweDBmOTUyYjM4LCAweDQxNzNiNTNhLCAweGY2YmY2MTk1LCAweGYyODA3MzMyLCAweGVkODM0YjExLCAweDAzNmY5ODY2LAotCTB4YzUxNDQ3YzgsIDB4Yzc0ZTVlMTIsIDB4YmQ0ZGI4MzgsIDB4N2FhYTNkZTEsIDB4YjNkZDNhN2YsIDB4MDUwZDJkYjEsCi0JMHgzYWE1ZDA0YywgMHgzZDFmZDFlNCwgMHg3Y2RiZWYwMiwgMHhlMzE0ZTI4YywgMHgxMWZmZWM4NywgMHg0MzNjZTFjNiwKLQkweGJiM2YzNDVjLCAweGY3YmNmMWNjLCAweDc0Yjk3ZmY2LCAweDkyNjVlNTE4LCAweDQ1ZjVlZTkzLCAweGIxZGRhN2Q3LAotCTB4NmUzN2YzZjksIDB4ZDE3N2JmNTAsIDB4NzY1YmRlZjcsIDB4ZGY2ZmY3YTMsIDB4YTIzMWI2NzQsIDB4Y2JmOWFmYmUsCi0JMHgxM2NjZmViNiwgMHg2NjU5MDc0MSwgMHhhZDU1ZmRmZCwgMHhmYWUxMGVmNCwgMHgzMzU4ZGQ3ZCwgMHg0OTI3MmZjNSwKLQkweDYwNDM5OWJlLCAweGZlYzZjZmJjLCAweGUxZGI3YmY1LCAweGJlMmI0ZmJkLCAweDNiZmQxZGI4LCAweGU3YzVlZTc4LAotCTB4ZmFmMDhlZDAsIDB4MmM5NWU2NjksIDB4MDQzOTllN2MsIDB4YjNkNDdmZWMsIDB4YmU2NjJjNzEsIDB4YWRkMDVmOWMsCi0JMHg0NWQzNTY5YywgMHg5OWFhNzlmZSwgMHg2YjRlNDNlMiwgMHhiMGYzZmNlNywgMHhmMTUxNmRlZiwgMHhjYmY0NjY4MiwKLQkweDQ0N2JhZjAxLCAweDhmOGI0NDdjLCAweDU5ZmEyZGRmLCAweGU5NDk0YTIxLCAweDY2MGU3M2E0LCAweDUyN2RkMDBkLAotCTB4YzVlYzVlY2QsIDB4ODYzMjhlMGYsIDB4OTM2Y2EzN2UsIDB4YzVjYTQ0MmYsIDB4YzUzMzU0ZjYsIDB4NGNjNTI0MDcsCi0JMHgzMjkyZTc3OSwgMHgyODIzYmU4YSwgMHhlNzhmYTM4MSwgMHg5ODViNzYzNywgMHhkNGY2OGNmYywgMHg5MDBmMTQ1MSwKLQkweGNlMjg2MzQyLCAweGE4ODViMzYwLCAweDJmYjZiZjNmLCAweDc3ZGZkZWFhLCAweGJjZDNjZjVhLCAweDc1OWZlZWZhLAotCTB4Yzc3MDRmM2YsIDB4MWU2YTI3MTgsIDB4NDdkNjFlMzgsIDB4Y2NjMDczOGYsIDB4ZGNiOWRmYjgsIDB4ZjFiZTMzMWEsCi0JMHgwZDg5OTBlMiwgMHg1ZjkxNTI0MywgMHg4MmRkNzczYiwgMHhkOGJiZmFmYywgMHgzMTJiNTk3MiwgMHg4MTE4M2U4ZiwKLQkweDY0ODY4NzlmLCAweGZlNjA1ZDEzLCAweDVjNjIzMDdjLCAweDg0OGY5N2NjLCAweGRlZTgwMjgxLCAweDZhYTBjMTA0LAotCTB4NzE0MjVhMDYsIDB4YTEzYzcwODMsIDB4NmFjZDlhMDcsIDB4YTA4N2Q5M2EsIDB4ZjcxZjcwZmUsIDB4MGE3ZTdlMDksCi0JMHg1MWZjOGQ2OCwgMHgwM2VmODdlMSwgMHg1MWYyYzYzZSwgMHhkYTc2NDJiZiwgMHg4NDNmZTA3ZSwgMHhhOGJiZjA5ZiwKLQkweGE4MGJmYTBjLCAweGE5NTdlODNjLCAweDhjYmY5MGZlLCAweDFlZmQyN2UwLCAweDJiZjg4ZjgyLCAweGVmZGE3Y2E5LAotCTB4ZjhjZmU3YTUsIDB4ODVmZTA5YWIsIDB4YWI2NTQ3ZGYsIDB4N2YzZDI1N2YsIDB4ZjA0NzVmY2UsIDB4MDQ0ZGZlMGIsCi0JMHg0MmVkMTJmZiwgMHg5YTI3Y2YxOSwgMHhkZmQ5N2NhOCwgMHhmOGFmZjU0MiwgMHg5YWZjMTFmNywgMHhjODY1NDgzZiwKLQkweDFmOWU4NDdmLCAweDdjMTJiN2Y1LCAweGYwNDZkZmRjLCAweGUwODg3ZjA5LCAweDk1MDc3ZjBlLCAweGY0YzNmYTZmLAotCTB4NWRmZjk0ZmMsIDB4Mjc1OGFmZGUsIDB4ZmM2NzIyNzgsIDB4NDViNDk3ODAsIDB4NzlkYTE3NDYsIDB4Y2M5NjhiNjksCi0JMHg2Zjc4MDBhZSwgMHg2ZGY3NGNiNSwgMHg0YmU0MGI5ZCwgMHgxZTJlODAwNywgMHhmN2YyNjU1NSwgMHg1MjM0YWVmNiwKLQkweDJiYjM0N2RjLCAweDQ4NmNkNmY3LCAweGI5ZmFhNzJhLCAweDE1OTJkZjU0LCAweGJlZDk3NjRmLCAweDc3YmE2NmE1LAotCTB4ZWRjNTViNmQsIDB4NDZjY2I2NTksIDB4MzJjNTZkZWQsIDB4NzJiYTNmZDUsIDB4Y2Q4ZGQ5MmUsIDB4YWUzMDA1MzgsCi0JMHgwNzgxOGMzMiwgMHgyNWJiNjMyNiwgMHhmYmRmOTI0NiwgMHhlZmJhZTJhMiwgMHg2Zjc5ZmQ4OSwgMHg0NWVmY2M4OCwKLQkweDIyNTM4OTFkLCAweDViNmIyMWNmLCAweGJhZjA3NDkzLCAweDdjZTUwY2I2LCAweDI1ZGNkZDA0LCAweDk4OWI2MWM2LAotCTB4YzQ5ZGY5MWMsIDB4MzNiZGY2NGYsIDB4NzlkNjAyYWYsIDB4MGY3YmU0OTcsIDB4ZmJhN2M4ZTUsIDB4MzQwM2NkY2YsCi0JMHhjYmI1YTMzMSwgMHhjOGU0ZmM4YywgMHhiZWE3YWQ4OSwgMHg0YjNmZTRkNCwgMHhkYmY4ODkzZiwgMHhiZjg0Y2FhYiwKLQkweDY5YzZlYWJkLCAweDJjNWZlOGI5LCAweDEzN2JlOTkyLCAweGNmZTQ4YjY5LCAweGJmZTk5ZmQxLCAweDk5N2JhNjQwLAotCTB4YzUzMjU1YjYsIDB4YTMyMmQ5MDMsIDB4NWE0NmM3YzAsIDB4NzMwNWZmNzcsIDB4ZTliOTVlYTksIDB4OWRkMWM1MTQsCi0JMHgyNzg3OGVhYiwgMHhmODAyZGRhMywgMHgzODdkYTNjYSwgMHg0ZmRmODQ5NCwgMHhkNzcxMTBjYSwgMHg5NGYxMjk3ZCwKLQkweDlmM2QxNjM3LCAweGY4YmJmZjJmLCAweDE5ZjgwY2Q5LCAweDVmM2YxMzE1LCAweGEzY2ZjMmM2LCAweDdmNzVmZWUyLAotCTB4Njg4NTdkZjEsIDB4MzFkZjY5M2MsIDB4Y2Y3YzU0N2QsIDB4Yzc5MWIwM2IsIDB4YTVkYmEzZWYsIDB4ZTYyYWI4ODgsCi0JMHg0ZmY3ZDE3NCwgMHgxZjkyNjU2YSwgMHg4MWYwNTlmYiwgMHhjNTlkODA3YywgMHg3ZGUzZGQzMiwgMHhiM2VhZDI2NCwKLQkweDczM2U2MDA3LCAweDExNGE3YzhhLCAweGM4NTUwMzllLCAweDI2YzY1MTQ3LCAweDZmZmVmMjU3LCAweDg5M2YyMzVhLAotCTB4YmFmNDA1NzQsIDB4Yjc2ODQ5ZWEsIDB4OTlmYTYxN2QsIDB4MDVmYjI4N2MsIDB4N2YxOGVkNWMsIDB4OWZkZThmYjUsCi0JMHg4ZGYzMTNlMSwgMHhjNWIyMTdhNSwgMHg0NDdiZjYzYywgMHg4MWU2MTRmYywgMHhhYWRiM2I3MSwgMHhmOWM3ODVkZCwKLQkweDUwNDU1OWI4LCAweDY1N2FjY2VmLCAweDc3ZmQ1ZTJhLCAweDk4MzJlZGNkLCAweDJjNWZlY2EwLCAweDJjZjFjN2FmLAotCTB4ODkzZjRkZGYsIDB4M2MwNmE1ZTMsIDB4MzhjNTc4ZGEsIDB4NTNjNTM3ZGUsIDB4NjkxNTdkZDYsIDB4Zjc1ZGVlYjEsCi0JMHg0ZWJmMGYyNSwgMHgxMjI4OGUwZSwgMHhiMDA2NzRmNywgMHgxZjA3MjgwMSwgMHg5YzUyNzUzMSwgMHhjYjg2NzAzYSwKLQkweGQzMjZhNjQxLCAweDcxZThiODdkLCAweDk4ZmJjYWZhLCAweDYxOTNmMDI4LCAweGQxMGRlN2UxLCAweGY2ZWI0ZGVmLAotCTB4ZWU1NDAyNWIsIDB4YTJhZmY0ZjcsIDB4YjJjOWE4M2MsIDB4MjMzZDBlZjgsIDB4YzRjMzdiN2YsIDB4MGRjYjY1NzgsCi0JMHg0MjFlNjNjZSwgMHgzNjg0MGJmOSwgMHg3ZTg5ODhiZSwgMHg3ZWYyYTczMiwgMHg5YjlmYmM4YywgMHgyNzgyN2FkOSwKLQkweDBkYzA5NGRhLCAweDhiNzYwMWNlLCAweDUxNTc1MDdlLCAweDk1YzJjNDVlLCAweDNkZTExYWJiLCAweGNhMjY1YmZiLAotCTB4YmU0YmIzNTUsIDB4N2U3NzI0NWQsIDB4ZTQ3ZjkxMmIsIDB4M2FhY2I2MzQsIDB4NjJkZmQxMTYsIDB4MWNlZDFlYjEsCi0JMHg4YTM1ZjMwMiwgMHg4OGYzOWVlNCwgMHg5MWYwMWFmNCwgMHhiZGFkZjAyMiwgMHhkMWM0NTBiNywgMHg2ZjdlYmIxZiwKLQkweDE0NDVlNTEyLCAweGZiNDM4YzZmLCAweDEyYjMyZjZmLCAweDIxNGNkODFkLCAweDdmMDIzOGE1LCAweDBlZmYwMzM2LAotCTB4ZWJmY2Y0NGUsIDB4MWU1YWNjOGIsIDB4MjhlMjZkODAsIDB4ZmM2NDQ3M2MsIDB4NTFjYTMwYmUsIDB4M2VhYmY3OTgsCi0JMHhkMWRlZmYwNywgMHgwZmE2NzdhMiwgMHgxN2ZjNzgwNywgMHgzODNmOWQzMiwgMHg3YmYzYzU5NywgMHg1MjM2N2ZkMCwKLQkweDIyNmJjZjdlLCAweGI1OWRmODVlLCAweDJjM2Y3NDE1LCAweDRmZjQ0YjFkLCAweDc4MDU0ZmQxLCAweDg2YTY2NmZjLAotCTB4OGQ5ZjdkZjAsIDB4YWY5YmMxZmMsIDB4ZWQyMmU3YzksIDB4ZWMxNTI0MTIsIDB4NDY0NWRjNmYsIDB4NWQ3MWU1ZjEsCi0JMHhkODNlZWViMiwgMHhmNmZhOGI5OCwgMHhmYTEyZmZiMCwgMHhmYTlkZTliNSwgMHhmZTQyNjk3NiwgMHhlOGRhNDczYiwKLQkweDFmNzY5ZDFlLCAweGRlZTVmOWNmLCAweDEzZDI3MmMyLCAweDFmZmYyNGYxLCAweGU3ZTI2NTUzLCAweDA3NmQ0YWM3LAotCTB4MmI3NmRkYjAsIDB4YTI3ZTg0YmIsIDB4NDE1NTgxN2QsIDB4OGNlZWQwMzksIDB4MWI2YWI5MjcsIDB4ZjNmNjRmMTEsCi0JMHhkNmEzY2NmNiwgMHg2NTlmYzA0ZSwgMHhkYTBhM2JlNCwgMHhiZTJkMDMyYiwgMHg3ZWJiMTgwMywgMHhiY2M2NjhiNCwKLQkweGM3MjQzMWY0LCAweDVjMDNiZTdiLCAweDJmMDc3YTA2LCAweDczM2MxMDM3LCAweGJkYTY5MjBmLCAweGU5ZGY0OGQ4LAotCTB4NjMzNDVmZGEsIDB4YjY4YzgwNGYsIDB4NWI5NzlhMTYsIDB4N2NmMzA2NTIsIDB4MzU3ODZlYzAsIDB4OWM3NjBkZGEsCi0JMHg2M2I0MThmYiwgMHhkMGUwMWVhMCwgMHg5NDAxZGY3MCwgMHg3NTI5ZTk0NywgMHhjZDU3NDhlZCwgMHgyOTJiYTNiNiwKLQkweDQyOWE1ZDBlLCAweGFiZTRkNTcyLCAweDY4OWNhMTBiLCAweDkxYWM0YjU2LCAweGM5ZjFhZGZjLCAweDFhZmJlNWI3LAotCTB4M2FmZWY3MTEsIDB4N2ViYWZmZmUsIDB4NGRmM2UyZmIsIDB4ZmFlZjljODUsIDB4N2U2ODAzOGEsIDB4OWE3Zjc0N2UsCi0JMHg2MGM2ZmY1ZiwgMHg5MGEzN2VmZSwgMHhlNmIzODFlNywgMHg3MGJmNzI5OCwgMHg2NTI3OTcyOCwgMHg1NjYxZWYyMiwKLQkweGFmN2QyNTRhLCAweDUzYTA1NjdkLCAweGExZDNmY2E2LCAweDliZDgwZmRjLCAweDg2N2NhNzZhLCAweGMyMTY2ZWJkLAotCTB4MDE2MDc5ZjgsIDB4MmJhNDBmZDcsIDB4MjliMjllODgsIDB4MDg2Y2Q1NGUsIDB4M2MxYzgxMmIsIDB4NzBiOTBkMGYsCi0JMHg5N2UwOWM1ZiwgMHhkMTdiZmZlMSwgMHhhNDE4ZDBiYywgMHg3ZDA1ZDhlZiwgMHgzOTNkZjg3MSwgMHgxN2U3NDdlOCwKLQkweGM1N2I0YWQ4LCAweGQ3N2VjOWFiLCAweDFmNzhkMGUyLCAweDQzOWJiZjFmLCAweGEwOTgyMGFlLCAweDdkMjM2YWY2LAotCTB4YmRmYTI2MWYsIDB4ZjBmNGJiOWIsIDB4Nzg3YTZiODQsIDB4ZTc3ZmQzMjIsIDB4ODdhYWRjYTUsIDB4Zjg3YTJiMjcsCi0JMHg2ZTQ3MjE1MywgMHg5ZjNmZDc0OSwgMHhmZGMzZDJlYSwgMHgzMzhjMWMxNywgMHgxNDE1ZmJmMiwgMHg4MjhlZDJhZiwKLQkweGM2MGVmN2UxLCAweDIwMDgwNmM1LCAweGZjYTE2YTQ3LCAweDZiOWQwMWEwLCAweDNmMzQxZTQ4LCAweGJmZjg4MzM4LAotCTB4N2M3ZDFhZmYsIDB4NmRkNTlkMzgsIDB4OWM2MDM2NDksIDB4NTlkY2ZmNWEsIDB4ZWZkNjg2NzQsIDB4MDczZmQxYWMsCi0JMHhmYzYwZTgzYywgMHg3ZGQyMDllYywgMHgzYzlmNzBjNSwgMHgzODdmZTYxNCwgMHhlNjU3ZTc5ZiwgMHg3ODY5ZGU0OCwKLQkweDVhMDI2M2U0LCAweGZkZjkxNWJiLCAweGRiOGZiZTc2LCAweGZlMGI1ZjY0LCAweDRhZGIxNmJmLCAweGEwYWYyODUzLAotCTB4YjVmN2MyY2MsIDB4Zjc3YzU4YWIsIDB4ZGY4NTI1YTYsIDB4YmNiMzVlZGIsIDB4YTY3ZjBkYzksIDB4ZmJhNmNjOGQsCi0JMHhmZWRkNmRkOCwgMHgyYmU0OGZiNSwgMHhlMjkxYmUzYiwgMHg2NDZiN2JmZiwgMHg4Njc2YWVmYSwgMHg4NWViNDAzNSwKLQkweGM1ZDE1Yzc1LCAweDVjYmEzNGE5LCAweDYwNDljZmMwLCAweDU4N2FiYTNkLCAweDNkM2QxNWNmLCAweGE4NzQ0NDNjLAotCTB4MzFmOTBiYWQsIDB4ZTQ1ZWIxMTAsIDB4ZmI0NDQwYzMsIDB4NzJmYjg2ZjcsIDB4OGZjOGRkNzEsIDB4NzJlM2NmOTEsCi0JMHgwZjc0NGQzYiwgMHgyZmE3YWM1OSwgMHg0MmU0ZDRiZSwgMHhkNjhmMzg5OSwgMHgxMGJlZDJmMiwgMHg2OTc5NmE2MywKLQkweDY5NWU0NTFiLCAweDg3OGY0MzliLCAweDUxMjdhYTJmLCAweGYwOGJlMTFjLCAweDBjNWY3ODljLCAweDBmYmU0NTNlLAotCTB4YzdiZTczZTQsIDB4ODdiYzNiNzIsIDB4ZmFlN2JkN2MsIDB4MWUzOGE5ZTIsIDB4YzQ0MDgxY2EsIDB4MDg0ZTFiZjcsCi0JMHhlZDg3ZmMzYSwgMHhiYjI4OTZjYSwgMHgzZmJmZWNmYiwgMHhhZWM4Y2Y1OSwgMHhlYjBhMWNhYywgMHg4ZTc4MWRhYywKLQkweGRmMTc0ZmRmLCAweGY0MjEzYWI3LCAweGU5YzA5NGJlLCAweGViYmNhZmE2LCAweDU2YmM5ZWZhLCAweDhhNWJhZTJiLAotCTB4MTJiYmUzY2EsIDB4MDIwZGFmODUsIDB4NTdmYmRhNWYsIDB4ZDNjMjZjOTQsIDB4NmI3MjhlOTUsIDB4NDI2Mjc4NWYsCi0JMHgxZjIxMzIzZSwgMHhiMzJhN2JmMSwgMHg0YzZlY2ZjYSwgMHgzYTViMTk1NSwgMHhmODc5YjlmNCwgMHg3NzU5ODg3ZCwKLQkweDAyY2QyZDlkLCAweGQ3ZDBmMzc4LCAweGIzZDNmYzM4LCAweGE2ODAwYzJmLCAweDJkZmNmZDFmLCAweGY2N2MzZjBlLAotCTB4ZjkxNTRjOGIsIDB4ZTFlNzNmZjIsIDB4ZTIxYzIzZjcsIDB4YWY5YjQ1ZGMsIDB4YTFmYWRlMzYsIDB4Yjc1OGRlZGMsCi0JMHgyMzhmMWNlOSwgMHhiZjNhNWVjOCwgMHhjOTdhNzdhYywgMHhhNTJjZmZjZiwgMHgwN2U3ODFjYiwgMHg5Y2JiNTJlYiwKLQkweGQ3MjA2ZTRiLCAweDQwYmE2ZGQ3LCAweGU5ODYwYzcxLCAweDVmMzBhMzUxLCAweDlmMTI5MTg4LCAweDU3YzdlNWFkLAotCTB4MWRlM2YzZWEsIDB4ZDdjNGQ1OGUsIDB4NTA1MDE2MTYsIDB4M2Q1OWM1ZGUsIDB4N2Q3ZTdlNzQsIDB4NzNlNjhiYTgsCi0JMHhmOWFiNTMxYiwgMHgwZjJiYjlmOSwgMHg1ZGQ2NjdmNywgMHg1ZmY2OTg4NiwgMHg4ZjkxNTBlMywgMHg2OGRmNDJjYSwKLQkweGYyZjIyNjVjLCAweDc2ODk5NGU3LCAweDcxMTdmOGNhLCAweDllOGNkYjljLCAweGZmZmJkNDQ2LCAweDJhNTE2NjNhLAotCTB4YmYyZDA5OGEsIDB4M2RjZjQ4NjksIDB4ZTZkZjQzYjcsIDB4MGZhY2U0ZmUsIDB4MjQ1NzVjMGMsIDB4NTNmMTc4ZjIsCi0JMHhjZjM0NWRjMywgMHhlYTAwMzhjOCwgMHhlNWY2YmU4NSwgMHgzZDUzZDA4OCwgMHgzOGExZTJmYiwgMHg4N2IyN2Q2NywKLQkweGU1ZDI4YmVmLCAweDkyZmI4MmQ4LCAweDVhZGNlNWQ0LCAweDdiZmFmN2Q0LCAweDNlMTQ0ZmVkLCAweGNkMzI4NzVhLAotCTB4N2U5MDk2N2UsIDB4ZGE3ZjBlYmYsIDB4NjA3OTY4ZmUsIDB4MWU1NzA2ZjUsIDB4ODcxNzJiZDksIDB4NjA5ZmUyZTgsCi0JMHhmNmJjYmJlOCwgMHg3MThkZjRkOCwgMHhhNzM2MGQ0YSwgMHg2NDhlMjk3YiwgMHgzMDBiNTE0YSwgMHhlZmZlYjg0ZiwKLQkweGU5YmNjYzUyLCAweGI3NGU4MjczLCAweGJlZTllMjM4LCAweDRjYzNiZDc1LCAweDFkZGFiZGY3LCAweDYxZGExODNiLAotCTB4YzIzNmRiNTYsIDB4ODlhMzg1NGIsIDB4ODM1YzllNjEsIDB4YjdkMmI1OWIsIDB4ODJmMmEyMGYsIDB4NzkwYmVjMWIsCi0JMHg2NTlmMmE3ZCwgMHg4ZTRkNTRjMywgMHhjNmQ2N2U3MSwgMHhkYzk0YWFiYiwgMHg3NzJhMmUzMCwgMHhhM2FmZmZmMiwKLQkweGYyNDc3YWFmLCAweGVjMWY5ZTM0LCAweGIwN2U1MzMwLCAweDhiYWU2ODk0LCAweDI2ZGMxZjk1LCAweDVjNzY4ZGVjLAotCTB4ODNhZTBhNTcsIDB4ZjViNGM5YzcsIDB4YWYzYzVkNTgsIDB4OWM2MzlmMTEsIDB4ZDFmMmVjY2MsIDB4YWRhMmUzZmYsCi0JMHg4N2VjNGRiYiwgMHhhYWUyZGVkNiwgMHgyNWVmMjg2MywgMHhmOTQyZWFiMywgMHhmZjczYzUyYSwgMHg0MTQ3ZjUxZCwKLQkweGM2ZDQ5Yzg0LCAweDg5YTg3ZTdmLCAweGFlMWIwYmRmLCAweDJiMzVmY2YwLCAweDdlYjMxN2Q3LCAweDdmMTk4ODZiLAotCTB4ZjM1NDNhYmYsIDB4YmYxOWJlYjcsIDB4ZGIzMmY0NjksIDB4MzQ2MWYzYzgsIDB4MzM2YjllYmUsIDB4OTgxZWQwN2IsCi0JMHg3Y2E3NGI2YiwgMHg4MDQwYjk5ZCwgMHhkYTIzOTMxNywgMHhiZjNlNjc3ZiwgMHhlOWFiMjliZiwgMHgxYmJmNDc0OCwKLQkweGRmYzVlMTM3LCAweDRjMzZmODAxLCAweGY2ZjRmMTE3LCAweDZiZGQxMzU0LCAweDNjYzBkYjdhLCAweGU3NDY1MmU4LAotCTB4NDliZDdhMjMsIDB4Yjc5YTcxOTMsIDB4ODBkYjM4Y2UsIDB4MzFkODc4NmMsIDB4Y2JlNTA0YmUsIDB4MTM3MjhlZTEsCi0JMHgzYjAwNjdkZSwgMHhjYTE4NmUyMSwgMHg0NmVlYTU5OSwgMHhiZjMwZWZiYywgMHg3ZmJlOThhNiwgMHhkNzdmYzVhMiwKLQkweDQ5MzAzZDA5LCAweGRkYjAzOWYyLCAweDlhM2Y2MzY3LCAweGRlNmM0MTU1LCAweDdmZGY0NTk1LCAweDg4ZGZmMTE0LAotCTB4YmI0NGZkNzYsIDB4YWNhMjZlZDMsIDB4YzAzZWZhMmUsIDB4NDVlOGU1MTUsIDB4ODNmNjhiOWYsIDB4ZjFhMjFhZjIsCi0JMHhmOTEyZmI4OSwgMHg3MjY5OGJmZiwgMHg4YjNiZjUwMiwgMHhlMTIzYjNiMiwgMHg5NDlkODllZCwgMHhhOWU5YWY2ZiwKLQkweGNkZjIzZWE2LCAweGYyMTMwZGI2LCAweDcxNGZlMzUxLCAweDdjYzcxMDllLCAweDY0OTNjNDU2LCAweGYzN2I3MmYwLAotCTB4M2Y0ZmQzYzgsIDB4MzdiMWVjZWQsIDB4YTQzZDA4NzcsIDB4ZDA1MDkzZjUsIDB4MjIwOTk1NGEsIDB4NzhhMGM0ZWYsCi0JMHgyNTY0ZmU4OCwgMHg3NTgwMWU5MCwgMHhmYjE5N2QzNiwgMHg2MWRjZjg5ZSwgMHg3MTZkOGU1YywgMHhmNmM3NGI2ZiwKLQkweDNhNmFiOTE1LCAweDc5ZDE0YmZhLCAweDUxZWVmNWRlLCAweGY1N2ZjOGU5LCAweGFhZmQzNTUzLCAweGFmZjkyMzVhLAotCTB4N2JmZjlkZGQsIDB4NzViNDJmM2MsIDB4YjllNDU4OTgsIDB4YzY2OTc0N2MsIDB4ZTQxYmI1NzMsIDB4ZmRjNTliZWQsCi0JMHhjNzQ3NmRjOCwgMHhiY2JlMzE1OCwgMHhjNjEyNTZjZCwgMHhiNjZkZDlmMywgMHhiYjcyMTI5NCwgMHg0NzhmM2M2YywKLQkweGYxYjM2ZjZiLCAweGNhOWIzYWJjLCAweDFiMzZkNWUzLCAweGYyZDM3YmNmLCAweDI3ZGRkYTZmLCAweGJiNWEwZjA4LAotCTB4ZmVmOGMzZTEsIDB4ZmY3ZTU0ZDksIDB4NTIwZDVlMjEsIDB4MWJkOTM4YmIsIDB4YjhhY2JjYzAsIDB4NjZmNjQ2MTQsCi0JMHhjNzdmOTU5YywgMHhjOGMwYTEyZiwgMHhmOWZjMzFhYywgMHhlYTI2NjE4MiwgMHg0OTY2NWI2NywgMHg5YjU0ZWM5OCwKLQkweGQ4NzY0MmVjLCAweDRlOTI1ZTk2LCAweDBkZjExMjcyLCAweGJiZGJkNmUzLCAweDE5Zjc0NWYxLCAweDZiN2MwODU2LAotCTB4ZjNiN2Q0ZmQsIDB4YTliZWRlNzUsIDB4MDhjNTZlNzIsIDB4OGJiZDEzYjQsIDB4ZDliNzRlOTAsIDB4YmYzMTU4OTYsCi0JMHhkZTk3YjI1NCwgMHhjM2Y1YmZiMCwgMHhjYTdjYmEwYywgMHg3OTk0ZmU5ZSwgMHhkODE1YmZhMiwgMHg1MTJmNjQ5ZiwKLQkweDhiMTMzZmIwLCAweGZhMGNmZmZkLCAweGJiZmViY2M1LCAweDgxOTgxNWU3LCAweDYwZTNkZjQ2LCAweDllNGZiYjRjLAotCTB4NjhjZjRiMWUsIDB4NDM5YzU1YTUsIDB4MGZmN2JmNDQsIDB4ZmFjZDk1ZGIsIDB4OTNkODI1NzgsIDB4NzU4MzBkMGYsCi0JMHgzYjllNjZkNSwgMHg3MDllOTEzMSwgMHg1ZTMxYjI3YiwgMHhkODQ5MTc3YywgMHhkYmMyYjI4NSwgMHgzZGY5MWEzNywKLQkweDYzN2JlZDRkLCAweDI3Mjg5ZDlhLCAweDczZDBmMWU5LCAweGMzZWY4YTdmLCAweDMxYzc4NTU1LCAweGM1MThkYWFlLAotCTB4ZjlmOWEyNTcsIDB4YmE2M2E5ZWEsIDB4NjdhODEwN2IsIDB4YzZkZWMyM2QsIDB4OGY0OGVkMTIsIDB4Mzg5NWNmMTksCi0JMHg4ZWZjNmI1ZiwgMHgzZjI4YmE3NywgMHhmNzdmOWFhYSwgMHgyOTE4YTZjNCwgMHhmNDAwYzI1ZiwgMHhkZGFkNzQ0YiwKLQkweDhhNGFmOWRmLCAweDExNWQ3ZjY5LCAweGFiNDg2YWZiLCAweDZkYmY4OTUxLCAweGEzMmM0MmExLCAweGYzYmY3YmY5LAotCTB4ZjNmMjIxNTQsIDB4ZmFkZDY5ZmUsIDB4NmQ3NWMxNTYsIDB4ZjdlNWNhNDgsIDB4NTY0ZTRmMTcsIDB4NWZjM2Q5NjIsCi0JMHg3MWMyNWY3NywgMHhhNGRkYzc2ZSwgMHhjZjVjOWQ2NywgMHgzZmJlYmZmZSwgMHhhZjM0ZThkMSwgMHg2NmRlYmQ0NCwKLQkweDk3ZjdmYmQwLCAweDUwZmRkYzg1LCAweDlhZmQ4ZmYwLCAweGRiYmNmNzRjLCAweDIyZWY3YzhiLCAweGRlOGM5OGJkLAotCTB4ZmIwN2Q0NmEsIDB4YmY5MzY2ZWIsIDB4NTAxZTAzMjQsIDB4MzBkZmVlZWYsIDB4YzBhZjJhMmQsIDB4MDhiMGZlZjcsCi0JMHgzMjZiMmU3ZSwgMHgxYWE2NzdkMywgMHhiZjIwOGZjMCwgMHhhMzFmNmEyZSwgMHhiN2VkYTdmMSwgMHhmOWFiZGIwNiwKLQkweGJmYjY5YTM5LCAweDIxNmNkMzEzLCAweDc2NGJiNzkxLCAweGI5NjUzMzg3LCAweGIzOThlNTAxLCAweGQ5ZjA2N2RhLAotCTB4ZWM5ODdkYjEsIDB4ZmRkYWJlOGQsIDB4YWQzYmM4NGMsIDB4YjdmYjBkYmQsIDB4M2M0YWZjZTEsIDB4OGM0YzdiZmMsCi0JMHg2YjI0YWVmMiwgMHhlYzdmZmZlYywgMHg4MTBmMGEzMCwgMHhjYmFjMmIxZiwgMHg4MmFhNzQ3MSwgMHhlZWMyNGFmZCwKLQkweGU4ZjkxNDZkLCAweGQ1YTk0YWY1LCAweDk0YmVmMTEzLCAweDE0OWQ2YTU0LCAweDdkZjUyZjQxLCAweDg3NGE4N2M0LAotCTB4OTQyYmRiNzcsIDB4ZmNlNWE3ZTcsIDB4NjBhZjY4NGIsIDB4YmU0ZDlmNWUsIDB4MjA0NzFkZGMsIDB4Njc1ZTIwZmYsCi0JMHg0N2UzNmEyZiwgMHg5Y2Y3YmI5ZiwgMHhiZTNhNzNiMywgMHhiZDkyOTRhYSwgMHhiYjAxOGYyOCwgMHg0MzA3ZWMwMCwKLQkweDQ4OWJkMmQyLCAweDNmN2M5YTNmLCAweDc0M2MwMzRlLCAweGZjYTE2N2JkLCAweDNmMDVmN2RiLCAweGVjN2UwYTc2LAotCTB4ZDgwNTZlNGIsIDB4YjdkY2JhNTEsIDB4NGJjNzFkOTUsIDB4MjUyNzQwMWUsIDB4ZjUyNzQ4ODksIDB4MzlkZDQ2OTksCi0JMHg4YjE2NTY4YywgMHg1ZmIwYzY3NSwgMHhmYzhmODdmMiwgMHg5MGNiZjY0NiwgMHgxN2VjMzFlMSwgMHhjZjIyNGZiNCwKLQkweGYxMmVkMWNmLCAweGI0NDVjODQ0LCAweGVjMzEzYzRiLCAweGYwYTM2Njk3LCAweGU3NzljNGRmLCAweGFkYWI5MzY5LAotCTB4ZmE3MGYwMTMsIDB4Y2VmYTQ0ZTYsIDB4ZGJiNDY5Y2QsIDB4ZmIzZWMwNGEsIDB4ZGM1Y2Q5ZTksIDB4ZWU4NjU5OTQsCi0JMHgzYjA4NTNlZiwgMHg3NjBjMTE5MSwgMHg1ZTcwNzdkYSwgMHgxYWJiY2M1NSwgMHgxY2Q2ZmZmZiwgMHg4ODNmMWJjOSwKLQkweGZmZDE5N2U3LCAweGZiNzVmMmFiLCAweDQwYjgwNzE5LCAweGZiYzc2Y2JjLCAweDFmNzQ0NTcwLCAweGY5ZDYzMmFlLAotCTB4ZTliYWY3ZGEsIDB4ODg5NzQ1MDQsIDB4NjAxZTExYzMsIDB4NWJlMjIyMTcsIDB4NTE3NmUyYmQsIDB4YTMwYzNhNzEsCi0JMHhlNmZkZTc3NCwgMHhmZGJmNmVmNCwgMHhkYWUyODFiYSwgMHg4ODJjN2QzYiwgMHhiNWJmYjlkZiwgMHg3YjU3MWY0YywKLQkweGVkOTllNDQzLCAweGNmODhjYTVjLCAweDg2YjQxNjc2LCAweDUzNDk1ZmQwLCAweGFiYzljNTE5LCAweDczZjZmYTNjLAotCTB4ZTNiZmEzMmEsIDB4ZGRiZjhmYWMsIDB4Y2Y0NTM1ZTYsIDB4ZDZlYmJlOTcsIDB4YzA2ZmFjNWYsIDB4OTcxNGQ1ZWUsCi0JMHg4YjhmMTVlYiwgMHhmYWQxYzM4YSwgMHhmMjk0M2Y1MCwgMHg0NmFkYmM3OCwgMHg2ZjY1NWY5ZiwgMHg3ZGRmNDE5ZSwKLQkweDEyYWVhYzY2LCAweDM0Y2NlN2Q3LCAweGRhOGY4YzMyLCAweGNmZjNhM2FiLCAweDFlY2YwMjAyLCAweDllMWE1YTEyLAotCTB4ZDg3OGVmYjUsIDB4N2JmYzhkOGEsIDB4NTQwOTgxYTQsIDB4ZTFjMWU1YWYsIDB4M2EyNzA1ZjcsIDB4NWI2NWQ2N2IsCi0JMHgyYzUzZTYyZiwgMHhkODgxYWNlMiwgMHhmMTg5ZGFlYiwgMHgyZTU3Y2M0NiwgMHg4M2M0ODMwYSwgMHgzMDJlNzBmZSwKLQkweGEzMGQ0NjRlLCAweGJhYzI5OWVmLCAweDg3MDVlNzc1LCAweGQwMzU2Zjc3LCAweDAzZTE0N2ZmLCAweDNjMjZlZDcxLAotCTB4OTgxM2NmZTgsIDB4NWFmYjQwY2YsIDB4ODA3ZjNmYTMsIDB4NjhlMGVhNzUsIDB4ZWNlYmZlYmIsIDB4YjNiYmMzZjksCi0JMHg1OGZmN2U2MywgMHg1MDM4YjUyYiwgMHg3NjEwZjhhZiwgMHgzODNhNDgwMCwgMHg2Y2E3N2M1YywgMHhmNjhhMWIyOCwKLQkweDIzNzhhZDhkLCAweDRjOTVjM2VkLCAweDBhY2FmNzllLCAweGExYmI5ZjYyLCAweDBkZGY4ZjlkLCAweDMyN2M4YTlhLAotCTB4YTY3OWZkMTIsIDB4ZjMwMmNlZmIsIDB4NmY5Zjk0YzgsIDB4MzU3M2UzMjgsIDB4YTY3MmYzZjQsIDB4ZDdjNDYyMmIsCi0JMHhiMTMwNzg5NiwgMHhiY2ZmZjA0YSwgMHgxZmEwZjc4YSwgMHg4YzAwYjE2NywgMHhkZjEwNjNkZiwgMHhiZGM0OTY5ZiwKLQkweDI2MDYyZGE0LCAweGQ1MTRjYzIzLCAweGI1ZTRmM2NhLCAweGU5MDQzY2VmLCAweDhkN2QwZjNiLCAweDhiMDc3ZGEzLAotCTB4ZGE3YmY4MDUsIDB4MzdkZmQxMzgsIDB4NzRmYmQxYmEsIDB4N2U4OTRkMWYsIDB4M2FlMjgyYmYsIDB4ZTE3ZGY4ZGEsCi0JMHgxN2VmYWZiZCwgMHg5ZGZjYjFmZCwgMHg5NTNlM2M5MSwgMHhjMzVhNzQ0OSwgMHhlYmE3MWZiNCwgMHgyYjc0ZGRjNSwKLQkweDUzYjgzYzkzLCAweDBmMGY0ZWFiLCAweDc3M2U3ZTQ1LCAweGY3NGE4MjRmLCAweDA0NzViNTZmLCAweDhlYjQ0YmE2LAotCTB4Zjc1ZmQ5NmYsIDB4NTk1ZGQyM2MsIDB4NTg4MWRlZmMsIDB4ZGJlZmU4OTcsIDB4MTE3ZThiYWUsIDB4OTMwMWFjZjIsCi0JMHgxYThlODE2ZiwgMHhjZjkxZWY4MSwgMHgyZTkzMjk2YywgMHhhMTBlNzRjOSwgMHhiZjhiY2ZiZiwgMHgzNWZkMTE3MywKLQkweGY5NDkzZDFjLCAweGJkYzQ3YjNiLCAweGE3NWM2ZDcwLCAweDhhMDQzM2VhLCAweDNjMTA3ZWYwLCAweGQwOGYxMThmLAotCTB4ZGY4Y2E1Y2EsIDB4ZjVlNmQyOGYsIDB4MzUwNDAxN2YsIDB4N2ZlMDVmNmEsIDB4MDAwMDdmZTAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweDQ1MTQ3ODBiLCAweDc0ZjU3MGI2LCAweDk5MjRjY2Y3LAorCTB4ZjIxMjRjOTksIDB4MDA0OTNkZTAsIDB4MjEwZTAzMTEsIDB4OTk3MGMwNDQsIDB4NDZhMmMwMjQsIDB4MTQxYTAyMGQsCisJMHg4NDkyMDI3NSwgMHg3ZTg4OTc5MCwgMHgzM2ZlYWVlYywgMHhhOGEwODkwMSwgMHgxN2FjYjlmMSwgMHgzNzYxNDFkZCwKKwkweDBjMDZlOGIyLCAweDYwZTAzNTE4LCAweGJhMmViMzAwLCAweGU3YzA0NWMxLCAweDM2YmM4MDI2LCAweGI5ZjA0MzI0LAorCTB4OWQ2ZjVlY2IsIDB4ZGQzM2Q1NTMsIDB4YzdjNDA5OWQsIDB4ZmZlZjdmZGUsIDB4YTU1ZjlmOGYsIDB4NzFlYmFhYmEsCisJMHhlOWQ0ZTdkZSwgMHgyNzhmMzI0MiwgMHhkZjIxMGE2NCwgMHg5Zjk2OGZjMSwgMHhmODkwODQ4YiwgMHgyMDZmNTk1MCwKKwkweDg4NDE5MjJlLCAweDZkZjQ2NmQ3LCAweDg4Y2ZhNjRjLCAweDY4ZTY3YTIzLCAweGQxMWQ5ODVhLCAweGVmNDM1ODM3LAorCTB4OWVkNWNiZTksIDB4MTg2OTM0YTQsIDB4MWM3OTBmMjEsIDB4MjNlMjEyNTgsIDB4NWFiNTRlODQsIDB4MTZmNTA1MjAsCisJMHhlMDkzM2JhOCwgMHgyMTNlM2E3ZCwgMHgwZmY4ZThmZCwgMHgzMGY4ZTI0NiwgMHgxYTE4OTkyZCwgMHhlMDMxMTA2NywKKwkweGY5YWQ1MzdiLCAweDQyMWViMDg5LCAweGMzZTY0NzZhLCAweDIxM2IxNmZjLCAweDlmOWY3YmZkLCAweGE3ZWI4ODhlLAorCTB4ZjdjMTBkZWYsIDB4YjU5ZWZhMjQsIDB4NjUyOWVmZWYsIDB4MTNmZDBlNTcsIDB4ZjY2ZGRmZjYsIDB4ZjEwODE0NmQsCisJMHg3MWM3ZmNlZiwgMHg4Njk5ZWY1OCwgMHg1ZDEzMGUzOSwgMHhkOWI3NzY2ZiwgMHhiZWVhMDUzZiwgMHhiNjg5OWY2YywKKwkweGMwZmI2ZWU3LCAweGU1ZmVkMTI2LCAweGRhMDk0NGRiLCAweGYwMjMzYjBkLCAweDgyNzVjZWZkLCAweGE2OTVlYTBmLAorCTB4YTRhZTQ3ZDYsIDB4OTEzNmMwZjUsIDB4ZjhkMzBmM2MsIDB4NDA5MjA2MmQsIDB4NjEzMzcxYzgsIDB4ZWIxNTg3M2YsCisJMHg1YWFjMTE0NSwgMHg2ZGQ3N2ViZSwgMHhhMzQ5NWYzMCwgMHhmN2QwNDQ4OSwgMHgyZTg4Mzc4ZiwgMHgyOGQ5MmZhOCwKKwkweGFmOWQwOGY4LCAweDhjMDdiNWZjLCAweGM1NzhlODAzLCAweGMyM2VhMTNlLCAweDFmMWJlYjQxLCAweDNlZTgzYTMzLAorCTB4ZDhmY2VmOTcsIDB4N2NlMTQ2ZDYsIDB4MGUyNjYzZGEsIDB4YTRhM2VlMjMsIDB4NTI5MDhkM2UsIDB4MDNlOTk2ZGYsCisJMHg5YmE1ZmJlOCwgMHhiZTgwMjcwNSwgMHg0ZWQ5ZGQ3NCwgMHg4MzY5NWY1OCwgMHhlM2E0NWMzYywgMHgyMjhiYWUyZCwKKwkweGVlNmM5MThlLCAweGQ3Y2MwOGVmLCAweGRiZTcxNDdjLCAweGY5ODMwZjI2LCAweDY1ZGZjZTRhLCAweDZlZTUyNDA0LAorCTB4Y2EyZTkxOTMsIDB4ZGY2MDNhZTksIDB4M2RhN2JjY2EsIDB4MDUzZTcxNmIsIDB4ZDIyZmU1OWUsIDB4OGFiZjY4ZjksCisJMHg2YzI3MDU5NywgMHhkYzQwYzJiMSwgMHhkN2NlOGViMCwgMHhiMDVlMGEyMiwgMHg4ZGFhZmVjMCwgMHg3ZGVhYWMyMywKKwkweDdkODc2ZTE0LCAweDFiZDZmYTk0LCAweDdkNjA1YmE3LCAweDY5NDU4ZGViLCAweGQ3MTZmMWExLCAweDdkNzZhN2ZkLAorCTB4ZGQxMzUzNmIsIDB4ZjNlM2JkNjksIDB4NzQ4Mjg3YjQsIDB4NGE1ZWE4NDQsIDB4NGZlOTBiODgsIDB4OGU4MTE5ZjIsCisJMHg4NWU3ZTc5NSwgMHhlMmY3YzQxOCwgMHhjYzM4OTEzYSwgMHgzYTE1ZjFhMSwgMHhlOWMwN2VmMCwgMHhmMTk1ODc3NCwKKwkweDEyZGJjNzAxLCAweDg0MmNlMDNiLCAweGM3M2I2ZWI3LCAweDU0YzgxNGEzLCAweDhmOTRhZjhmLCAweDdhZTgzZTAwLAorCTB4MmM3NjNkNmEsIDB4NjEyNGY3MWYsIDB4ODFjN2E0ZjksIDB4MzNkYTdiNzAsIDB4MWViNWNiMTIsIDB4YzY3ZjNlMjcsCisJMHg3NWNiMDEzMywgMHhjZjk2MTcxZSwgMHhlOTYwNjY3OSwgMHhiZjYzZTRmMywgMHg1ODA1M2RlNywgMHhmMWI4ZjA2ZSwKKwkweDI1M2Q2ZmY5LCAweGFhNzlkNjU4LCAweGNmMjZmOWYwLCAweDdiMzcyYzMyLCAweDY1ZmNmOGJjLCAweGViMmMyYWNmLAorCTB4NmU1OGI1M2QsIDB4YjJkMTdjMDUsIDB4N2VjM2UzYzEsIDB4NTg3NTNkZGIsIDB4ZjFlYTdhMzYsIDB4NDY5ZWViZjksCisJMHgzODcwZDcyYywgMHhiNjQ4YjJkYSwgMHg3MzYwZTE0NCwgMHgzYjQ1M2IxMSwgMHg2NTczY2Q4OSwgMHg5YjFlYjRjYiwKKwkweGYzMDllYWNmLCAweDVhNDZkOWJjLCAweDNhZDM3MDRmLCAweDMyODBjYjg1LCAweGQ2ODliNjdmLCAweGY2YjE1NDA3LAorCTB4MWM5MmY3MjEsIDB4ZjEwZmFkMzMsIDB4MzU5NGY2YjIsIDB4NWEwODljYWUsIDB4ZWQ2NWE5NGYsIDB4NzM3OWQ2MjMsCisJMHg4NDdkNjkyMiwgMHhkYThmYjU4ZiwgMHhhMjg5Y2ZlYywgMHhhY2Y1NTFmNSwgMHhjOTEzNGM3ZCwgMHgxOGZhZDBiNSwKKwkweGVmYTdhYjNmLCAweDY5NWFlNTczLCAweGQ1OTViZDNkLCAweGU2ZjEzZjMzLCAweGIzM2Q2OGRhLCAweGE5M2ZiZDhkLAorCTB4MmMzYTI3YzMsIDB4NTViMGYxM2QsIDB4MTQyMDJjNzYsIDB4YjlkZTRkNTcsIDB4OWJjYTg5MmUsIDB4NWRjNzQ2YWQsCisJMHg3YmM4NDljNCwgMHg4OTJlZjlkZSwgMHhkOTA2ODdjYSwgMHhkZTZkZWQ4NSwgMHg3NDZlYWNjNSwgMHg3N2I3N2I2MSwKKwkweDJlZGZmNjI5LCAweGFhNWRiMWJiLCAweGI3ZGIwZmJlLCAweDllZDhkZDFiLCAweGVkODM1ZDUwLCAweGRiMTdiMjhkLAorCTB4OGEzZjU2NDcsIDB4MmY0NjhkZWQsIDB4NWVhYTRmYjYsIDB4NjVkN2Y1OGIsIDB4NTVlN2I2MWYsIDB4YWZmZWM3YWYsCisJMHhmZWQ4N2QxYiwgMHg1YzliZmRmOCwgMHgwNWZkNjk1MywgMHhlNDFkYmRjMSwgMHg1ZGMxMGFkZSwgMHg5ZTgxNTI0MiwKKwkweGVlNDA5M2VhLCAweGY5Zjk3MGQ1LCAweDZkMWQxMDFjLCAweDQ0NmZlOWFmLCAweDZlZmFkYzNlLCAweGJmYzAwYmU2LAorCTB4ZjUwN2ViZjgsIDB4OTgzZWRmYTIsIDB4ODliY2UzOGMsIDB4MWM3NGM4ZTMsIDB4YTRlM2UyZjEsIDB4MzM0MTM3YmYsCisJMHgyNTdiZmE0ZSwgMHgzODJkMzhjYSwgMHhjNmRmNDQ0ZSwgMHgyNGRlZmFkOSwgMHgyYmRlN2FlZCwgMHgwZmQ5YzY1NSwKKwkweGRhYzJiNGZjLCAweGZmYTU3ZGI3LCAweDllYmI0YjM5LCAweGUzMjk5NzNmLCAweDg5ZWI4NDdjLCAweDFhN2FkYmU5LAorCTB4YTdjMmQwM2UsIDB4N2MyMDgzZTEsIDB4ZjEzOGUyOGUsIDB4YzY0ZjViN2QsIDB4MzI3YzJkNDEsIDB4ZDNlMTA2MGUsCisJMHhlZmY0ZTM4MSwgMHgwNzBkMzhkYiwgMHgzODY5ZjBiNSwgMHg5N2NmODQxOCwgMHg3ZGMxOWYwOCwgMHgyMWM2NTdkYiwKKwkweDBlMzI3YzJkLCAweDVmZjNlMTA1LCAweGJlZTQ5ZWI4LCAweDUzZmRiMzhkLCAweDdmYjY3YzJkLCAweDQ5OGY4NDFhLAorCTB4ZWYwY2Y1ODAsIDB4M2YzMmJlZGIsIDB4ZjMyN2MyZDMsIDB4ZWM3YzIwYjMsIDB4N2RhNWNlMzgsIDB4NjdmYjY3MWIsCisJMHhmZjZjZjg1YSwgMHhmZTlmMDgyYywgMHhiZWU4Y2UzOCwgMHhhZmYzMmJlZCwgMHhmZTY0Zjg1YSwgMHgxNDlmMDgzNSwKKwkweGI2MzNlMDAxLCAweGZjNjllYjZmLCAweGM2OWYwYjVjLCAweGI5ZjA4M2NmLCAweGRmMTljNzBjLCAweDM4NGNmNWI3LAorCTB4ODRjZjg1YWUsIDB4NjRmODQxZTMsIDB4ZjYyNmJlZTAsIDB4ZTNjNjljNmQsIDB4MWUzNGY4NWEsIDB4MzI2N2MyMGYsCisJMHg2ZmI5MzM4ZSwgMHg0MjcwOWFmYiwgMHgyNzA5OWYwYiwgMHg4ZTk5ZjA4MiwgMHhlYmJiNjRlMywgMHhjNzQ2NTE5OCwKKwkweGNlM2VmNmIxLCAweGYwYjQ2N2ViLCAweDEwNGNmZDc5LCAweDM4ZTNkNzNlLCAweGE5MzhlOGQzLCAweDUyNjcxZjE3LAorCTB4OTMzZTE2YTcsIDB4MjlmMDgzM2EsIDB4ZWFhZTcxYzAsIDB4NzdhZjM4ZGIsIDB4N2FmM2UxNmEsIDB4ODUzZTEwNjcsCisJMHg3ZGI1Y2UzOCwgMHgyZWE0ZDdkYiwgMHg3NTI2N2MyZCwgMHgzYjhjZjgzMSwgMHhhMzZiOTU1MCwgMHgzYTE3NTRlZCwKKwkweDk1Y2FmYTQ1LCAweDQwOTcyZTFkLCAweGQ1OWRhMmViLCAweDgwOTNiYjQ1LCAweGY2MmEyMjVkLCAweDg5NzU2OTA2LAorCTB4ZTZjYjdkZjQsIDB4ODkwN2Y0OTgsIDB4YjljOGVlZGEsIDB4NGFjN2U4MTMsIDB4ZGRiNTMxYWQsIDB4NTIyMTNkMTEsCisJMHhiOGM0ZTc2MywgMHhiOGY1MzU2MiwgMHhmZDM0MDMxOSwgMHgzNDUzZjNlMywgMHhhMzA1ODllZCwgMHhkZGZkZWQzNCwKKwkweGMwZmE5YWU5LCAweGZlOWE0OTkyLCAweDM0NzJhYjgzLCAweGFlY2JhMWY1LCAweGY2NGZmNGQ2LCAweGE3YTlhMGRlLAorCTB4ZDM1OWJhYWUsIDB4N2NlZDc4N2YsIDB4NmIyNWZiNGQsIDB4OTdlZDM1NGIsIDB4ZWE2ODk2ZmEsIDB4NDJmZGQ1OTcsCisJMHhmZDc0N2ZkMywgMHhlNWZiNGQ3MiwgMHhkYTZhMGY4ZCwgMHhkNzFmZmFjNywgMHgzY2I1YzdkNCwgMHhiZTNmZTlhMywKKwkweGZiNGQ3OWY1LCAweDY5Mzc4NzE1LCAweDZkYjYyN2RhLCAweDNjYWZkNGQ1LCAweGNlY2ViYWY5LCAweDVmOGZkOGIzLAorCTB4ZDAyMmViYzYsIDB4N2Y3NjYxM2QsIDB4ZjhmN2U2N2YsIDB4MWJhYzQ2YWQsIDB4OGVkMDU4MDcsIDB4NzIyZDY1ZGYsCisJMHgzNWY4YTMxYywgMHhkMWMwYjViZSwgMHg3MDE3ZTI4ZiwgMHhmNjQ1N2UwYSwgMHhkYTRiOTI4MCwgMHgyNjdiZjNlOCwKKwkweGQzYjEyZmI5LCAweGRkMThmN2U3LCAweGQ4YzNkYjk3LCAweDA0MWU5NGE3LCAweGMzYTUwNDkyLCAweGZkYmVhNTAwLAorCTB4NjNkMTk5MDEsIDB4MjNmM2MwY2UsIDB4OTVmYmU5ZGEsIDB4MTg4OGMwODYsIDB4YjMxMmNmNWEsIDB4Nzc3ZTgxMWIsCisJMHg4YTJmY2MwYSwgMHhmNDE1NDkxNCwgMHhmNDExMzQ4YiwgMHhjZTQ4MWUwYiwgMHhhMmFiYzE3YywgMHgyOTgzNTVkNywKKwkweDcxYTEwYTFmLCAweDI0ZWVjOTU3LCAweGFhZGUzM2IwLCAweDFkODJmNzZlLCAweGVlOTgzMzUyLCAweGNkMjEwMDZiLAorCTB4NGJkZmJiNDIsIDB4MDYwN2I0ZmQsIDB4ZTliOTI1MTcsIDB4YjUyMzI2NzgsIDB4MWJmM2Q1ZDMsIDB4Mzg2OWZjZTksCisJMHhlYmQwMGI3ZiwgMHg3YzdmMzA3YiwgMHgyOTRkZjljZiwgMHg5YmYzMzQxMywgMHhlNjY4OTQ4NywgMHhmY2U5MWIzNywKKwkweGFmZGU0Mjc2LCAweGE3ZTdjNTNlLCAweGM4NDQ5ODQ4LCAweDM4NTM4NDVmLCAweDA5NDg2OWJmLCAweDkxODBmZmNlLAorCTB4ZjllYTJiZmEsIDB4MWZmMzgzMjMsIDB4ZDY3ZmZkODYsIDB4MjY1M2ZlZGIsIDB4YTQzZmY3NjksIDB4MjM3ZmJiNTQsCisJMHhlYTkxZmZkYiwgMHg0OGZlN2NiMywgMHhlMTUxZmZkYywgMHg5MGZmZGIyYywgMHgxMzdmYjY1MiwgMHhiZjM4MzcxYiwKKwkweDkzZmYwODJkLCAweDJmNjc3ZjMwLCAweGIzNTI5YmYzLCAweDVhMWZmYmI0LCAweDg5YmZkZGE2LCAweGZkNWRkZmNkLAorCTB4ODJkZjlmMmQsIDB4YmUxMzlmZjMsIDB4NWExZmZiNjUsIDB4NGQxYmYzODYsIDB4OGZkMDI3NmUsIDB4OTU2NDYwNzEsCisJMHgxZDRmY2U4ZiwgMHgwNDQ5MDc2MSwgMHg0MGYzYTE3MiwgMHhmZDE2MzIzOSwgMHgxNDg0OTdlNCwgMHg5MTNkYzc1YywKKwkweDhhYmVkZThjLCAweGYyODZmNGE0LCAweDU4ZmNjYmM2LCAweDk5NmM5NTFmLCAweGI0ZTJlZmQ0LCAweGI2NzM3OGJlLAorCTB4YjYxMmU0MTEsIDB4MjE2NTdmNTMsIDB4OGQxZGVhNWYsIDB4NzkzN2QyMjIsIDB4NGUxYmU0ZDIsIDB4MjhkOWRiZDcsCisJMHhjNzdlYTE3YSwgMHgyMDdkOTM5MywgMHhlNDRkMmFmZiwgMHg0Zjc4N2NmNiwgMHhmZTc4N2UyMiwgMHg5ZmEzNTNmOSwKKwkweDVmNGJlZjU3LCAweDhmOTVhYzJlLCAweDJkZjhhOWI3LCAweDkwZTU0N2U4LCAweDk4MTY1NTkxLCAweDFmYTlhZWQ3LAorCTB4YTExMDdlYTEsIDB4ZDQyN2M1ZmUsIDB4MjQ5NDIwY2YsIDB4YmU2Y2NhOGYsIDB4MDRiZmE4Y2YsIDB4MmZlYTM2ZjUsCisJMHhkNTIxM2I0MSwgMHg3NWUyNWZiOCwgMHhhZThjMzA3ZCwgMHgzZjI4OWYzZiwgMHgyNmYzZWUxNywgMHg5ZTNhMjk2NCwKKwkweGM4ZjdmOGM0LCAweGY4MDdjMTFhLCAweDE0NTk3ZGI4LCAweDNkNjg3ZTA1LCAweDRkMzhkZTg1LCAweGZiMGZlZTlkLAorCTB4N2MxMmFlMDcsIDB4ODYzODBiY2YsIDB4OTMzM2UwMWIsIDB4YmQ2MDQ3OGYsIDB4Njc2MDVlYjQsIDB4ZThhMjFjZWYsCisJMHhiMDUxNGZlZiwgMHg4YTQwZDU2MCwgMHhiMzM4ZDA4YiwgMHhhNDRlNGI4OCwgMHg1YTU5Y2ZlZiwgMHhhMmU4NDMyOCwKKwkweDJmMDYxMDU1LCAweDIwNTlmYTAxLCAweGUwMTE5NzUzLCAweDY5Mjc4ZGU3LCAweDdhZTgzODljLCAweGYxYjNiNjZmLAorCTB4NjNlNGJhNjcsIDB4MTRmNWFhNmQsIDB4M2U1NzY2YzgsIDB4YTE0MTRmNWQsIDB4MzU5ZmViODgsIDB4ZDFmZWRiNDMsCisJMHg2MTk3MjhjZSwgMHgzZDU3MmQwYywgMHhjOWNjZjM4MSwgMHg1NGRmYjZkNywgMHg3NWNmYWRhMCwgMHhlZjU0ZWI2YiwKKwkweDZlZjdhMGM5LCAweGE3M2ZkMTI5LCAweDljZmJhMTYwLCAweDVkMmI4NDE3LCAweGFkZTc1ZDI4LCAweDU2YjcwZTFjLAorCTB4NWUwZDVlYzksIDB4ZGE1NTZkYzEsIDB4MjZlMGEwMjEsIDB4NWY3YzJmYjgsIDB4ZjZmZmQ5ZWMsIDB4YTE3YWRhNjUsCisJMHhiMDVmNWI1NywgMHhhNzNlMzc0YSwgMHhmZjFjZTM5YiwgMHg2ODNlODA0NywgMHg4M2U4MDI3OSwgMHhhNzE4ZjNjMiwKKwkweGQ1NWM5MDhmLCAweGMxOGRjN2QyLCAweDUwZmEzMDZkLCAweDYyNWM3MWY2LCAweDhlYmUzODI4LCAweGRhYzJjN2QxLAorCTB4NTBmNGYwYTgsIDB4OTcwN2E0MTgsIDB4N2ExNGJlOWEsIDB4YzNkMzhkYjgsIDB4OGExZTljYTcsIDB4NmFlOTZhZDcsCisJMHg0Y2FkZjEyZSwgMHhiMmRmZWZhMiwgMHhlOWUyMTc2NiwgMHhlOGM4NTBhMCwgMHgzZDBhOTdlMSwgMHhjMWU4NjliNCwKKwkweDhmNDFlOWNkLCAweDNkMzhkYmJmLCAweDQ2NzNmNmRjLCAweGI2N2M3YTBmLCAweDViNjg3YTcxLCAweDI5MjY0ZTdiLAorCTB4ZjE0YWYxM2QsIDB4M2M1M2E5YTAsIDB4Mzc2ZWYwZTgsIDB4N2M1MDNkMDIsIDB4Zjk4N2E1ODQsIDB4OGRkMzdkYzEsCisJMHhkZTAyZmFkMywgMHg5YzVmMDNkNiwgMHgwNTNkYjAxZSwgMHg0ZTEwNGVjMCwgMHhjZjZhN2VmOCwgMHg2ODRlNTRmZSwKKwkweGMzNmJjNWVhLCAweDMxYjJiZmUzLCAweDZhOThlZTNiLCAweDU3ZjVlNTVkLCAweGY1NTMxZGM1LCAweDUzMzc1YzViLAorCTB4OWJlNDVmNTMsIDB4YmM1ZmU5YWIsIDB4YmVkMzUwYjYsIDB4YTY5MTc2YjAsIDB4M2JhYWMxN2QsIDB4ZWY0MmY1MzUsCisJMHg2ZmZkMzVjZiwgMHg2OWFkNTY1ZiwgMHhiNTZhYjViZiwgMHg5Mjk2ZmRhNiwgMHhiOWY1MzRjNywgMHhmYTZiNWZlZSwKKwkweDVlYjA1NGRmLCAweGZmMjczZWQzLCAweGFjZmI0ZDQ1LCAweGY1MzQ1YjE5LCAweDM0ZDdhZTk5LCAweDJmM2IwZGZkLAorCTB4MzFlODFlYmQsIDB4YzA0OGEwZWIsIDB4NzFlNjM4ZmUsIDB4ZjcxZmRkMjAsIDB4YTRmMmM0OGMsIDB4NzE3Yzg5YzcsCisJMHhjYjAxMzNkYSwgMHg0ZmNkOGQ3ZCwgMHg3Y2JiNDk1YywgMHgyNjg4MjgxOSwgMHg5MTE2N2Y0YywgMHgyY2Y2NDIxOCwKKwkweGNhYWY1Nzc3LCAweDUwNGU3ZDAyLCAweDc5NzFmZWVmLCAweDEwNzdiNTUxLCAweDA3MDY1Mzk1LCAweGFkNmYzOWMyLAorCTB4MTFjN2Y4OTEsIDB4ZTI1MjgwMjIsIDB4NTBjNDA3ZjMsIDB4NmQxYjU2N2IsIDB4M2RiZGViOGYsIDB4YjYxNGFkNmYsCisJMHgwYTRkYWIzZCwgMHhlM2U1NmUzYiwgMHg2MWVkNDM4NSwgMHg3ZTIxMzNlMiwgMHgzZWMxMDMyNiwgMHhiOWY2ZTJlYSwKKwkweDIwNGNiZGJlLCAweDg0ZTdlYWY5LCAweDhmZmU0NzJjLCAweDVjZmQzMDMxLCAweGEyNzI2NDY2LCAweDFjZmY2YjZjLAorCTB4N2ZiYTgzNjIsIDB4ZTY4NWQ1NDQsIDB4OTVjY2E3YWIsIDB4YWE5MWY0MDgsIDB4YjVlMmUzZTEsIDB4M2NlNDY5OTcsCisJMHgzYzZkZTg4MSwgMHhjZDM4ZDlkMCwgMHg1Nzc1YzVmMywgMHhkOGViZGU2YSwgMHgyYmJhZTIyNSwgMHg3ZDUwODY0MCwKKwkweDA3ZTQ4YzNkLCAweGZkOTdhMDBjLCAweDhkNjY0M2NkLCAweGNlYmE3NTg2LCAweDM1NWU0MDFhLCAweGQ4ZmRhM2M2LAorCTB4NzcxMTk5ZTEsIDB4ZTYzYzAyNGMsIDB4NTNkMjc5NjMsIDB4OGY3MWU1ODAsIDB4OWU2M2NiMWIsIDB4Nzg4ZjJjMTIsCisJMHhmMzZjYjBhYSwgMHgzM2YyYzMyYywgMHg0ZmNiMTc4ZiwgMHhmY2IwYWIzYywgMHhlNThiNTNjOCwgMHgyYzVhY2Y2MSwKKwkweDU4N2M3YTBmLCAweDYxZDRmMDFlLCAweDFlYTdiZWY5LCAweDIzNGY1NmNiLCAweDE3MWU5ZDk2LCAweDI5YmYwYTk2LAorCTB4ZGRkM2QwZjAsIDB4NGZhN2FlNDksIDB4ODA1ZGZkMDMsIDB4MDdjNGUyY2UsIDB4MGEwZDU3YWEsIDB4OGFlMjU5ZDEsCisJMHg1OWJkYWI4NywgMHhkNmYzNzFhMSwgMHgyNDlkMzg5YSwgMHgwODYxZTg2OCwgMHg4MWUzNjRmOCwgMHg1ZTljNGM1ZSwKKwkweGFkZTdiN2MyLCAweDllZDgyZjk1LCAweDFkODcyNmQ1LCAweDdmZjlmMmJmLCAweGY5Y2RiZDBkLCAweGEyMTZmNDkxLAorCTB4N2EzYTgxYTcsIDB4M2QxOGJkNGEsIDB4ODdjNzEyNGQsIDB4YzE4ZTY5ZTgsIDB4YTcxZmY0Y2UsIDB4MWY2MDg3YTcsCisJMHg2MjhmZmM2MSwgMHhhYmM2ZWEzMCwgMHgxNDU3M2FlYywgMHg3M2YzNjc4YiwgMHhiMmQxNmEwNywgMHg3YjlmMzY3OCwKKwkweDE1YWUxZDA1LCAweDQ4ZGYzZmVkLCAweGM4Zjc3M2MwLCAweDc4ODA4ZmJmLCAweGFhNjFmNzdkLCAweGRmN2I5MzI4LAorCTB4N2E1ZTllOWYsIDB4ZmQwYmJiODcsIDB4NTUxZjIyYTAsIDB4YjY3YWUzYTIsIDB4YjgzMjQ0NDcsIDB4MGNjODE4NDYsCisJMHhlYWM4NGU5MiwgMHhjZTc1YmZlMSwgMHg0NGJhYzM0ZiwgMHg5ZjdkZTE2MiwgMHhmMzk4NjY3MywgMHg0ZjY3MDIyOCwKKwkweGViODcxNzg5LCAweDYzNTdlYjBhLCAweGNmZTNiYzYwLCAweGNhMTMyM2ZjLCAweGU2MTQ4NjM5LCAweDY4OGIzNGRmLAorCTB4MGJmZjEzZGYsIDB4NTA2ZjgwNGUsIDB4NDk5Yzk5MWYsIDB4MGMwZjA3MTAsIDB4M2VkMWRhMzcsIDB4ZjBiNDU5ZjAsCisJMHg2NjdhZDJmMywgMHgyOWFiN2UwOCwgMHhkZjUxNWE4YywgMHhmYzIxMjZkNywgMHhhMjM1N2Q4NiwgMHg3N2UwMWY3ZiwKKwkweDMxN2YzOTMxLCAweDBkZjdjZTc4LCAweGYzYzA5N2Y4LCAweDYyZjFmMjYyLCAweDFjYjg5MTcyLCAweGZkZDIzNzJmLAorCTB4OWQxY2VkNzcsIDB4ZTQwM2EwZmUsIDB4YWRlMTg1ZTAsIDB4ZDdlOTVmOWMsIDB4N2QyOGJjZjMsIDB4NGFlZTNhMmYsCisJMHg3NWI4ZTg1MCwgMHg4OGYzYTEwOCwgMHhlZmM3MWRhMiwgMHhjOTg0Yjg2ZSwgMHhkYmVlYzUyZiwgMHgwNWY1ZjI2NiwKKwkweGI1OTI2N2FmLCAweGY5YzUzZGUzLCAweGJiYWYxOTRmLCAweGY4MWIwNWU1LCAweDBjOTI0YjViLCAweGYwNjE2M2Y2LAorCTB4ZjVlNTk0YTAsIDB4ZGE4Yjc2YzksIDB4ZDZkNDZjZmUsIDB4MTk4NTZiYmIsIDB4M2EyNzY4ZjUsIDB4MDY4ZjY3YTIsCisJMHgxZmI3NjEzZCwgMHgzYjcyMDYxYiwgMHg5YzY1NGIwOSwgMHhmYjQ2NDkyNSwgMHg0ZWY3MmEzMSwgMHgzMzQ2YTVkNywKKwkweGU0YzdjZjNmLCAweDk0MThlNmMxLCAweDY2M2RhNzE3LCAweGFmNTNmZmVjLCAweDk0NzFiN2E3LCAweDQwZDIxMGY1LAorCTB4MWU0MTlhOGUsIDB4ZGVkNGI2ZDMsIDB4Y2Y0YWY3ZmIsIDB4M2M0NjE3ZDIsIDB4YmY5MjZkZjcsIDB4NGNkMGZiMDIsCisJMHhmYzBlZmZmZiwgMHg1ZDYxMjIwZCwgMHg1ZWIyYjcxOSwgMHg4NzJlOWFmNCwgMHhmMzM1OWJlNywgMHhjYTFjZjdkMSwKKwkweDI5NzdlYjE5LCAweDg5MWJlMjE3LCAweDk2ZTg1NzFjLCAweDVjNjM4YmVhLCAweDhiYWUyYzlmLCAweGNmZWQ2YmIwLAorCTB4YjJiZDRkMTgsIDB4NjM1ZGJmYjEsIDB4NTQxZmMyOGYsIDB4NDEyYTkyZmUsIDB4ZTMyOWZhMDIsIDB4NTkyNWQzZTQsCisJMHg3ZDc0MDk1NiwgMHgxMDkwNDI2ZiwgMHhmZDYwNTZlOCwgMHg0NjZkY2RjYSwgMHg5NWNlMDNiNywgMHg1YjdhZGUxOSwKKwkweDRjZGZjNTFmLCAweDg5N2M5Mjg5LCAweDYxY2YxNmI5LCAweDlkMmZlYTRiLCAweDRjZTY3YTBhLCAweDg4MDQ4YWMzLAorCTB4YmIxNjJjMWIsIDB4ZjMwZmM5ZWYsIDB4NzkzMTJjYmUsIDB4MDcyN2M4YmYsIDB4YTczZGY2YjQsIDB4NTVjNzQyMGYsCisJMHg5NDVjNjM5ZSwgMHhlYWFiOGU1OCwgMHg4ZjE2MDYxZCwgMHgwMDliOGZkMSwgMHgxYzVmYzZlMywgMHhmNzliMTUzZSwKKwkweDQxM2IwNzRmLCAweGM2OGFhNzBmLCAweGNhMzc0NmIzLCAweDY2NWZmYTQ1LCAweGZjMGE0ZTA4LCAweDEzZjMxNGRlLAorCTB4Njk3ZTNhMjQsIDB4MmRjNjNiNWQsIDB4MTFkZWNhNGUsIDB4YmM4MGJjYmYsIDB4NGIzZmI5ZWMsIDB4ZDUyOGYxZDIsCisJMHgxNWE0YmNiZSwgMHg4MTNmOTllNiwgMHgzNzFjNDQ0ZiwgMHhmOGU1NGM3ZCwgMHgwNGM5M2ZhOSwgMHg0ZjM5MTBlNCwKKwkweDQ4NjI2NTdiLCAweDA2M2JmYjg2LCAweGY5MGNjODYyLCAweDE2MWJmMzNiLCAweDRmYmMwMWU3LCAweGU1NDdiZjgxLAorCTB4ZGYyNDFkZTYsIDB4YjUyMDc4ODYsIDB4OWNkZmUwOTksIDB4MDAxOTg2MjEsIDB4N2RlNDMzYTcsIDB4MWUxNTM4ZGIsCisJMHg4NzIzMjU3MiwgMHg5NDgyOTUzMywgMHhmMWMxNGMxZSwgMHhlZmMxZmRkZCwgMHhiNGQ0MTUzMiwgMHhiOWUwNjM4YSwKKwkweGMyM2ZmOGE0LCAweDcyNDcxODc3LCAweDUwYjc5ODBiLCAweDg5N2I5ZWMwLCAweDk3ZTgxYWI5LCAweDNmMWE1MWZhLAorCTB4OWE1MWZhOGQsIDB4MzRhM2Y1M2EsIDB4NDM3MjIyZjUsIDB4MTQyNWU0MDIsIDB4OWYxMzI5M2QsIDB4YjRkMjcwODAsCisJMHg4OGVjOTI4ZiwgMHg1NTUyNjJjNywgMHhhZmQxZjYwMywgMHhiZTZkZmM3OSwgMHhlOTAzNDg5ZCwgMHg3ZDVmY2IzZSwKKwkweGVlOTBiMzM2LCAweGM1ODk2YWU3LCAweGY1NzM5NGZkLCAweDBlMGNiMTQ1LCAweGEzM2UyNWE1LCAweDdmNzNkMmNiLAorCTB4ZGRjNjFiNDcsIDB4OGMzZjI1NDgsIDB4NmZjZmNlYzcsIDB4MDUxZTYyMzYsIDB4ZGM5OTRhYjQsIDB4N2RlOTQ5ZjQsCisJMHhhMjBkODlmZiwgMHhmZDA2YzIyYiwgMHhiZDY1NzNlOCwgMHhmZjdmZGZjOSwgMHhmMjEyZmRmYSwgMHhiNGEzZWUzOCwKKwkweGZhMDEyNjZlLCAweGMwMjc5MWViLCAweDA5ZDcyM2Y3LCAweDdlMTg1ZjJlLCAweGFmNzRlNDJhLCAweDAxM2JhN2U4LAorCTB4ZjE0M2UzN2UsIDB4ZjU3NGZiYWMsIDB4NGFiZTFjZDUsIDB4ZmI1ZDI5ZmQsIDB4ZmQyZjk2MGYsIDB4YmNiZTQ2ODgsCisJMHg5M2VmYmEyOSwgMHgwMjc5MzNjNiwgMHgwMGE0MTdmMCwgMHgxZTBmZDdmMiwgMHhmOGM3YTkzZiwgMHg3ZjFmODFhYiwKKwkweDY5MDdmMWIyLCAweGZmOGU5ZWY5LCAweGZlYmE0ZmQ0LCAweGJmZDYzZDYxLCAweGNiZmFkYzNlLCAweGJiNjk3ZDVmLAorCTB4ZDI5N2VhOTcsIDB4MjM2NTNjM2YsIDB4NDk0ZWRmOTQsIDB4OGE0ZTA5YjUsIDB4MmI4ZGIyZjcsIDB4M2I5MDJlNmQsCisJMHg3YzA2ZDc5MiwgMHhjZTI3Y2E3MSwgMHg4NzBmNDcwOCwgMHgwNmE1N2NiOCwgMHg3ODgwNDU4OCwgMHhjNzQ5ZmMyYiwKKwkweGExZTliZDNmLCAweGY4OWVjMGViLCAweGM3NmNhMzZhLCAweGM5OWQ2YTM4LCAweDVjZjRhMjZmLCAweDhmMjhiMGQxLAorCTB4M2I3YWMxOGMsIDB4MTY3MDNmYWIsIDB4NTFiMmJmZTgsIDB4ZDNhNmEyM2UsIDB4OTUzZGRmZDIsIDB4OTQzNTc5MDAsCisJMHg5MjFhMDY1MiwgMHg3ZmEzZjRhMCwgMHhmM2UxYjE1MiwgMHg1NDZmNjBlOSwgMHhhYmYyMDA5MiwgMHhmZjk4M2RmZSwKKwkweDg3ZDQ1ODliLCAweDllZThjNjg1LCAweDQ5OTgxOGVkLCAweGFmZDlmNzgwLCAweGIzYTFlMWIyLCAweDZhZmUwZGEyLAorCTB4YmU5MDM4YzMsIDB4MzdmNzA5N2YsIDB4M2Y2YjI0NWEsIDB4ODJiOTI3M2MsIDB4NTRmMjAxNWMsIDB4MzFmMTA3ODEsCisJMHg4YmM1NjM3ZiwgMHg0ZWQzMWFiZiwgMHhlMWIxZDNkNywgMHgwNTQxMzY0ZiwgMHhlYTRmYzUyNywgMHg5YmYwNWZhZSwKKwkweGNiYmQxZGQ3LCAweDg3Y2E0ZWVmLCAweGQxNTZiYjZhLCAweGVlNDY4ZTRmLCAweGIyYjEzNTI3LCAweGFlZGJmNjRjLAorCTB4NmNhNGYyYTQsIDB4ZDJmNGVjYmQsIDB4YmQyZjY1YzcsIDB4MjA2N2RiZjAsIDB4YzlhMWZkN2UsIDB4YmY4ZTljMzksCisJMHgwNzNkYTVmOCwgMHhlMmZhZDEyNywgMHgzY2JmNzIyZCwgMHg5MDhiMGRiNiwgMHgyNTRiYzIxMCwgMHg3YTU5N2ZmZCwKKwkweGFmYTUwZjA4LCAweDQ2M2EzMWVjLCAweGM2ZjdlN2IzLCAweDc4YjFmMDg2LCAweDE5MjMyZWNiLCAweGI5MWUxM2RkLAorCTB4NmQ4Y2JiZjUsIDB4YTk3ODMwOTYsIDB4NzYwZTlmNmYsIDB4YmYxNzhhZGYsIDB4M2JiYzgyMzYsIDB4ODkyMDUzYjUsCisJMHhiOWUwNjFjOSwgMHg4NWRhMGY3ZSwgMHgyM2M0MjcwMCwgMHg2ZjEwNTNjNywgMHgxNDk1ZmViYSwgMHgxNDVmYTAyZiwKKwkweDM3ZGJlOTNjLCAweGUzMDI3OTcxLCAweDllOTBkMjM5LCAweGNlOWQ3ZTVmLCAweGM5OTFmMjVmLCAweDc5MmZmYjA5LAorCTB4ZWMxYjJlZjksIDB4YzU1NDg0ZTMsIDB4OTVkOWZhZTgsIDB4NGFkZjIwMDksIDB4MWQ4MjZmNjQsIDB4ZTRiY2Y2NGIsCisJMHhkZTkxYmJiOSwgMHg5ZGRmZjc4YSwgMHhhZTkyZTJjMCwgMHg5NWQ0MDZmZSwgMHhiZmIwZmVkZSwgMHhlMGU2ZWI4NSwKKwkweDFiODg4YWZlLCAweDU5ZTRhZWU5LCAweGNiNDdkZjMxLCAweDYzMzIyNTJmLCAweGI4YmUxODRiLCAweGYyNzI2NjU2LAorCTB4MjM1NGYzYzQsIDB4NTA5ZGZkZDAsIDB4MjJmYmMwZjQsIDB4NjI3NzAzZDcsIDB4YmU2ZWYzZGMsIDB4NjIzMTZhMTcsCisJMHhjMzMzNGJmZCwgMHhjMGQ5MzBkMywgMHgyYmQzMmNlNSwgMHhmMGRkN2E0MSwgMHhkMzhiZWEwMCwgMHg3MDg5NWQ4MywKKwkweGQyMTk1NmJlLCAweGM0MzdhODBmLCAweDE5MTJkM2ZkLCAweGMxOWU5ODdlLCAweGM5OWVhOGY3LCAweGJmZDBlNzg1LAorCTB4OGM0NTc2NTUsIDB4N2E4N2JjZDEsIDB4Mjk3Zjk5NDUsIDB4M2JhZTlmOWYsIDB4MTNiNWVjMTIsIDB4OGZmZGUxMDksCisJMHhkZjBhY2I5ZiwgMHg0NTQyYmI1MywgMHg2NmZlMmE1ZiwgMHgzNTYxYmVmYywgMHhkZjg1NmZlMywgMHg0MDY3MzM3ZCwKKwkweDE4MDcxN2ZiLCAweGEwN2JjMGZmLCAweGZjYmFlOTY3LCAweDZiYmVkODg5LCAweGMwZjI4MGI2LCAweGY4ZTFmYzQ0LAorCTB4ZjljYzgzN2EsIDB4ZDBhZWRiNWEsIDB4MjRiNzVkMDksIDB4MDVlOGFiNDQsIDB4Zjg0NThmYzYsIDB4N2EyZjVlYTMsCisJMHg5MmE3YmU5MiwgMHg5ZjMwOTU5NywgMHgwYTc4ZTdhZCwgMHhmZTczMTZkZiwgMHhmOTZiMjE5ZiwgMHhlZjhiYWM5ZiwKKwkweDk5NjUzZTUzLCAweDMzZWRmYmVjLCAweDNmOTRhZmMwLCAweDU3ZTAwZWJkLCAweGZkZjYxZjM5LCAweDA3Y2RjZGI3LAorCTB4ZmE3Y2E2NmYsIDB4NGY4NTdhYjcsIDB4Y2Y1M2YyYjUsIDB4ZWY1YjI1YTcsIDB4N2E5ZjQwMjYsIDB4YTBkYmZkM2UsCisJMHg0Zjk2MTIyYSwgMHg3Y2IwZjNlOSwgMHg3ZmVkYTgzYSwgMHhmMDJhN2U1NCwgMHg0NWY4MDJhYiwgMHhjOGE3ZTA4NSwKKwkweGE4ZTBkZWMzLCAweGQ5NTY4Nzk3LCAweGQyMWU1NjExLCAweGQ5OTIwMWRmLCAweGJhMTRmZTkzLCAweGY0YWRlODUzLAorCTB4NDE0M2U1ZjcsIDB4NTJlOTA0ZWUsIDB4NWQyMGJiYTEsIDB4ZGZhNzc0MmEsIDB4ZmE3ZTE2YWYsIDB4YzEzMjQ5ZjYsCisJMHgyNmJmZTU3NSwgMHhkNjVjZmZhMywgMHhlOTQyZjJjNCwgMHg2NjA3N2I3YiwgMHhhODVjOWMyMCwgMHhkZWVkNDhjNiwKKwkweDc1ZDRmZDgxLCAweGFmNWVhZTlmLCAweGQ1ZDJlZmViLCAweGRkZmQ3NWYzLCAweGE2OTU3YWJhLCAweGIzNjM1OTdmLAorCTB4ZmRmZTIwOTEsIDB4YjJlMjdlOWEsIDB4YjhkMWM4NjcsIDB4NjNlYWY0NzAsIDB4NTljMzU5N2UsIDB4YzJlODE3YTMsCisJMHhlNWY3YzAxMiwgMHg3OTBiYzRlNSwgMHgyMjFkODE4NiwgMHgyOGJhMDVjNiwgMHg3ZTIwNmI4YywgMHhlN2Q5MzliMSwKKwkweDY1NjM3MmE1LCAweDc0M2Y4YjA0LCAweDU4YjYwM2Q5LCAweDYxOGNhZTVhLCAweGIxYmM0MGY1LCAweGYyOWVlNDA2LAorCTB4ZTJjMTEwM2MsIDB4MDFmOTVkOGEsIDB4OWZjYThjNWIsIDB4NTExMjZmNmEsIDB4YzhmOWI3NmUsIDB4MTY3ZTcwOGMsCisJMHg0N2M4MjhkNSwgMHg3NmI3YTQ2ZCwgMHg0ZDM1ZWU3NiwgMHgwNjU5MGNiNCwgMHhkMTVhYTU3MSwgMHgxZGY4MzYwOSwKKwkweGUwZDkzN2Q1LCAweDI5YWJhOWRjLCAweGZhMDJmYWY1LCAweDQ1MWZlMTdjLCAweDhhZTk3YjRjLCAweDc1ODE4ZGI0LAorCTB4ZWE0YmFmMTEsIDB4NGU2ZmYyYWYsIDB4NTlkM2VmMTIsIDB4OWEwYjdmNzQsIDB4Yzc3MzlmOTgsIDB4NDIzZDlkMWEsCisJMHgxNTNkMjBkNiwgMHg0MTFhOTY1OSwgMHhlMjdmNTI5ZSwgMHg4NmJjZjY4OCwgMHgxZjI5NDVmMSwgMHhiNjlkNjRhZiwKKwkweGQyOWY3OTVkLCAweGE1ZjNmYTAxLCAweDZlZWRiNDFiLCAweGEwN2YwZmVlLCAweDMyNThjOWYwLCAweDJjYTNmYjk2LAorCTB4ZjJlNWMzMGUsIDB4ZmFlZDMxMzQsIDB4YWU4ZjhhMDIsIDB4Njg5ODkxMTYsIDB4NDQ0OWJiYmQsIDB4MTY2Zjc0N2MsCisJMHgyMzRmMTA3YywgMHhiN2U0NzhkZSwgMHg3OTQwMTIwYSwgMHgwM2E5YzBhOCwgMHhiYmQ4YzlmOCwgMHhmNmQ4ZWFiYywKKwkweDgxMmZlNjY5LCAweDNjN2ZiNjZlLCAweGQ5NjkzZmU2LCAweDExYzNmZGIxLCAweGQ1ZmQ0MDZmLCAweDI2M2U0MzQzLAorCTB4ZWVlN2ZiM2QsIDB4ZmY3M2MwOGMsIDB4YTQ1NjlkYWUsIDB4ZWYxZGFlZjcsIDB4ZDQyNWY5MGUsIDB4NjEzOTMzNWYsCisJMHhiZjNiNWQ5ZCwgMHhkM2Y0MDMxZSwgMHgwMjU0ZGNiNSwgMHgzMDZiYWVmMiwgMHhkOGFlYzc4YiwgMHgzNjk4ZjVmMSwKKwkweDMzZjdhZmQ0LCAweGZlNjQ2MWZkLCAweDNmZDM3NzYxLCAweDQxZmExMzNlLCAweDc2MDU3NzQ5LCAweGU0MjhjZWMzLAorCTB4MjNkN2NhYTcsIDB4NmJiYmRmMzAsIDB4NmU5OWQ3YzcsIDB4OWZiNzRmY2IsIDB4ZDFlNzllMGEsIDB4NWIwNTI1NjUsCisJMHgyYzMxN2Q2MSwgMHg4ZGYyYTE4ZiwgMHhkMzU0MmY4OSwgMHg3NjFiY2JmOSwgMHhmNmQwMTcxOSwgMHgzOWZmMzdkYywKKwkweGQ3NjhlNDA2LCAweDc1MGY2NjU2LCAweDQxY2Y2ZGNhLCAweGYxOTQ0MzFlLCAweGUyOTk3MmRjLCAweDhhOTgxM2FiLAorCTB4MzNiZmNkM2EsIDB4ZGYwMmU0NjYsIDB4M2ZjYjg0ZjQsIDB4NTdkNjNlMzEsIDB4YWZmY2E0NzgsIDB4NjJlMDg3ODEsCisJMHgzM2VhY2VmMiwgMHg2ZmVmYjAwYiwgMHhlMzE4ZmIzZiwgMHg0YmE0MjY5YSwgMHhhYjdmYmY2NSwgMHhlNTdiNDZhZiwKKwkweGZlY2VmYjYyLCAweDgyZGY2ZTdmLCAweDc2ZmIyZmJmLCAweGZiZWY5YmZmLCAweDdhYmJkNzM4LCAweGU3NDllODNlLAorCTB4ZmFjMWVlM2IsIDB4YWUyNzU2NGIsIDB4ZWVmNDhmYjcsIDB4ZmZjN2ZkODUsIDB4N2JmZmVlZmIsIDB4YzUyYjdkZTMsCisJMHhmYmUyZWRiYiwgMHg1YWZmY2RmZSwgMHgzNmYxZmZiYywgMHg3ZTNiNzc4ZSwgMHgzZmU2ZjNkNywgMHg1N2RmN2Q3MSwKKwkweDZmZjliZGNlLCAweGY2ZGVmNzhlLCAweGFkZjVkOGFmLCAweDA2N2IyYTg2LCAweGE5MDE1ZjVkLCAweDMxNjE4MmI1LAorCTB4OTJkYmJlMzcsIDB4ZDc2YzgwZTEsIDB4OGYzMGZkNzMsIDB4YzM0YmNlMGUsIDB4MjMwMTRkZjgsIDB4OTA0ZDBiZjMsCisJMHhmYjdlMDc0NywgMHgwYjg5NDExYywgMHgxZDc1MWZhMiwgMHgxYmFlMWZiNywgMHhjODc2ODI1NCwgMHg5OTg3YWU3NSwKKwkweGI1NTUyMGRkLCAweGFkZmVkMzY2LCAweDk4OWMwYjM5LCAweDBmZDI0OTczLCAweDdiM2VhMWJiLCAweGZkNmJhZjMyLAorCTB4ZTIwNGY3YzksIDB4N2YxZGE4MTIsIDB4MmQzNWNlNWQsIDB4ZWY1ZWQ3NjAsIDB4YTVlZWQxMTIsIDB4MWZiYmRhMjUsCisJMHg5ZWNlOTkwYywgMHgzZGZhZDA0ZiwgMHhmYWRhZGQ3MywgMHhmYWRhMDU0ZCwgMHg4ZGRlM2UxYywgMHhjNmZmYWQ4NCwKKwkweDcxMDdjMTdjLCAweDEzZjY1MzU1LCAweDM1NjcxMGYxLCAweDkwODk5NDJkLCAweDU1NDJmOTBjLCAweDk4YmZjMTJiLAorCTB4N2Y3ZGFmOTMsIDB4ZTNjMWY4MWYsIDB4NTMxYzNjN2YsIDB4OTcxYzBhNGQsIDB4YjY0ODVjMjAsIDB4ZmE0OGRjZTgsCisJMHhlZWJlNDcwMCwgMHg3ZDYzZDlkNiwgMHgyNDRjY2Y5MCwgMHg4ZGUzODMyNywgMHg4MzhjNGVlNSwgMHhlNjViN2Y3MywKKwkweDU1OTZjYmVmLCAweGIyY2ZjMGFkLCAweGZjNTZjZmNlLCAweDRkZTBkZWU1LCAweGUzOGRmZmI4LCAweDJmZTA4NGE0LAorCTB4YmZmNDQ0YmIsIDB4YWRmZjlkNjUsIDB4ZTJmYmU1ZTAsIDB4OGZlM2MxNDMsIDB4M2E5N2NiYzUsIDB4YjhiMjBjYmMsCisJMHhjY2FiZjAwOCwgMHgxNmE5ODVmZCwgMHhjYTBmYWIyNywgMHhjOGRlNzgyNywgMHg5ZmE5MDVmZCwgMHg0MmQzNzg4YiwKKwkweGNjOGJkZjc5LCAweDVmMzg2Y2U2LCAweDMwMTQ4ZjMzLCAweDFhZmQ3MWRlLCAweDM5ODNmNTExLCAweGU1NzVjMDRkLAorCTB4OGYzMTkwNGYsIDB4N2U0MzczZjgsIDB4NmYzYmUwMjYsIDB4YmYxNTE1ZGMsIDB4MDI3MGNiNjAsIDB4Yjg3MTE3M2MsCisJMHhiNDJhOTExNywgMHhlZmY5Yzk1ZiwgMHg4NGNhY2JiZSwgMHhmNjgyMDY3MywgMHgyMTE3MjJlZiwgMHhhZGJmNTJkNywKKwkweDQ3ZjA0YjI4LCAweDRiMTU3ODUyLCAweDBlOWQxYmM0LCAweDFjODE2ZjcxLCAweGI1YmRjNGQxLCAweDQ3ZmRmODc1LAorCTB4OGI5YzY4NDIsIDB4YmU0ZGVmZjUsIDB4NWZlNWQ0ZmMsIDB4MzIzYjNjYTksIDB4MWU0MWZhOGMsIDB4NTg0OWJiOWUsCisJMHhhZmYxNTZkYywgMHg3MDYyNmY2ZiwgMHg3YzEzMmNhYywgMHg3ZTc3NDgyOSwgMHhlZTc1NWYzOSwgMHg4M2U3MWNmOCwKKwkweDBlM2JkZWJmLCAweGEzZjY2NGU1LCAweGVmZDFhM2EzLCAweDZmZDAzOTc3LCAweDQzN2VlNGE4LCAweDBkMTFkN2I3LAorCTB4YTZlZWFlNzEsIDB4OWIzZTdlNTQsIDB4NTVjYjUzNmIsIDB4ZmRjZmRjYTUsIDB4N2U0MGJmZWUsIDB4YTZiYjJkMjEsCisJMHhmODIyYjUwYSwgMHhmMTgwMjQ3MSwgMHgwOGQ0ZWY1YywgMHhmZTRjMzFiMiwgMHgxOTMxZmZlYiwgMHg2MTU0ZmQzOCwKKwkweDYyN2UwMDFjLCAweGZkOTFlMDI2LCAweGQxYWJlOThhLCAweGFkYmMyYWIxLCAweDM0OTRmNmI5LCAweGUwMWUyN2E2LAorCTB4MGU3NTQ0NzcsIDB4MGJlMTYzZjksIDB4NzVjMDNlN2UsIDB4ZjRkYjQ0N2YsIDB4YWRmYjMwZmMsIDB4NTYzOGIxMzUsCisJMHhlMmRmNWJkZSwgMHgzNDM3OWM3NywgMHg5NzAwY2IyNSwgMHg5YThhYTYxYiwgMHgyNjU1ZmI3MywgMHgyMzhkOTdlZSwKKwkweDc5NWQ2MGUzLCAweDliNjU1ZDZmLCAweDExNjk3ODA4LCAweDY2ZGRmMDlkLCAweGEzNTlkMzY1LCAweGIwNzljYzNiLAorCTB4M2UzMDllMWUsIDB4Y2E4ZmQ1YzQsIDB4ZTc4MDIyY2UsIDB4MDgyMzg3ZDEsIDB4ZjJlZmQxZjgsIDB4ZjgzNGM2NzMsCisJMHg0MzBkMjI2ZSwgMHgyYjg4MmUzYSwgMHhiNWMzOWFmZSwgMHg3MmM3NjRkMywgMHgxY2I2NWU1NiwgMHg2YjRkZTc0ZiwKKwkweGEzODU4ZmIwLCAweDdmYmMwMWQ0LCAweGUzMjExODI3LCAweGJkODc4OTIxLCAweDUwMWJmNGE3LCAweDFiYjVmYWM2LAorCTB4ZjZlMTE1ZWQsIDB4ZWQ4MjNjM2YsIDB4ZWYzODk4YmYsIDB4ZmJmYzIwOTksIDB4NTFmYjJkZTEsIDB4ZWMwNzNmYWIsCisJMHhhZTNjYTk4MywgMHgwOWFlODNkMiwgMHgwY2Y3NDdmMiwgMHgxYmZhMDdjMSwgMHhlN2FjNjFmYywgMHhkZjg0ZWZiMSwKKwkweGJlYjNiZTU1LCAweDg1NTllOTgxLCAweGRlNzBmNWVlLCAweGNjYWNlMWNiLCAweGUyYzRkYzdmLCAweGZjZTI3ZmFmLAorCTB4ODE1OWMwYTUsIDB4NGFiZDdlYWYsIDB4YTZhZjJhN2YsIDB4ZDc1MWUzYTgsIDB4MTk3ZDhlMzcsIDB4MjY4YTliZWMsCisJMHg0M2EwNmVjMSwgMHg0NjZkNDg1NSwgMHhjNmNhYzNlMCwgMHg2ZjM4NjRjNywgMHhlMzYwZWI5OSwgMHg4YzdmMjkxMiwKKwkweGQzYTA5ZjNhLCAweDlhM2JmMmM0LCAweDBkYmNhZmQzLCAweDFhZGNlNGU4LCAweGUyNDJlODEzLCAweDBkYWNlM2JhLAorCTB4MDZiYmYwZTQsIDB4N2JlMTlmZTcsIDB4MjI3YmVmNmEsIDB4NzkwMTc4ZDksIDB4Y2VhN2IxZjUsIDB4OGY1MjU1MzUsCisJMHg5Y2ViOGM5YiwgMHg0MzJkOTY1NSwgMHhiMjk2ZWNmOCwgMHg4YWEyNzI1ZCwgMHhiMTRkM2E5ZSwgMHgxZjNjYWVkOCwKKwkweDg3NDhlNjUwLCAweDVjM2U3NGU3LCAweDEzMTFmNzg3LCAweGQyNDJlZjgxLCAweGZiZjE1YmVhLCAweDYyYWE1YmQ0LAorCTB4ZDQ5NjFkMTgsIDB4M2Q2MjMyZWYsIDB4ZjMyYmZiMTksIDB4ZjllOGYzMjksIDB4MzY5ZTc2NjksIDB4NmU0MTc4ZWYsCisJMHg0YjgwMjBkYiwgMHhkNGJmYzk5ZSwgMHgxZjRlODYxOSwgMHg4ZWU3MmIzMywgMHhiODRmNTNkZiwgMHhmOThlZGQyOCwKKwkweDJjNGY0OGZmLCAweDFiNDRmNDU1LCAweGVmMmJiOWU2LCAweDNlMzMzNWNmLCAweGM0ODllOTU3LCAweDQ5NjI3YTcwLAorCTB4ZjAxMTIzYjUsIDB4NmE0NzY0YjAsIDB4OTJjOTMwMjIsIDB4MDg0YjRlM2YsIDB4ZjAzZTI3YTcsIDB4NDNlMzczYjAsCisJMHhhZWVlYmJmYywgMHg1YzRmNTRkOSwgMHhiMzEzZDJhZSwgMHhmNDRlOTAyMywgMHg5NTlhZTVlZiwgMHhlODhiOGQ3MywKKwkweGZmNmYwNTA5LCAweDAzZTZmMmMzLCAweGY4NjExM2QwLCAweDU2YjM0NmZiLCAweDU0ZDhkYzRmLCAweGM2ZTI3YTg4LAorCTB4ZmJlNmEyZDksIDB4MTdjZDZiYWEsIDB4MDlkOTEzZDMsIDB4M2IyZWIxNzMsIDB4Y2ZkMGMyYTMsIDB4MzliZmRjMDcsCisJMHg2MWZiZjNjNCwgMHg2YjE3ZDAxZSwgMHg5Yjg0NzZjYywgMHgyNmY0NmY1ZSwgMHg1NWY2YzdkNywgMHg4MjVmZmZhZSwKKwkweDk3ZDcyMmIzLCAweDQzZjc2MWNjLCAweDgyNDNhNGY0LCAweDJlNjRiY2Y0LCAweGQwMDJlYjk1LCAweDRiZWI5MzIzLAorCTB4NGU3MWU1NmUsIDB4MDdjZDljOWQsIDB4OTZhMTliMzksIDB4MGFmZGVjYjMsIDB4OTUwYmQzMzcsIDB4OWFiZmM5OGQsCisJMHhhZTZmZGI0NywgMHhkYTY2OWQ5NSwgMHhkYzkwZTZmZiwgMHhkZGNiNTRjZCwgMHhlMTA5NjYzNSwgMHg5NmVlNDNkYywKKwkweGFlN2JiOTMwLCAweDRmZGExYzY5LCAweDUzZWZlZGJkLCAweDNjYTk2ZjJlLCAweDQzMGNlNjFiLCAweGEyZjMwNTFmLAorCTB4MWRkZmRmMzQsIDB4ZGE3NmZiMWQsIDB4ZWYyZmMwMmIsIDB4ZmI3ZTc4OGEsIDB4ZjYwM2I3MzksIDB4MDMzYjdkOGQsCisJMHg3YzUzZTllYywgMHhmY2I4ZGIzZCwgMHg1Y2Y4ZjRlYiwgMHhjODFjYTk1MywgMHhkM2Q5ODNiZCwgMHg4NDQ1OWJlNSwKKwkweGUzMDM0NTVmLCAweDkxNjE4YWZmLCAweDRmYWQwNzNlLCAweGNmMTZmZjRmLCAweDYwZWYxNzYxLCAweDA3NzRiMGU3LAorCTB4ZmMyYWQ5NzksIDB4YWRiNzdlMmYsIDB4MTYwNWNlMDYsIDB4MWNmMDE3YWYsIDB4MDA1ZmJlMTksIDB4Nzg3MzE2NzgsCisJMHhlMzE3MzkxNiwgMHhkYWYxNGEzOSwgMHhlNTNmZTdmMCwgMHhhNmEyZGZiYywgMHg1ZjBmMThmNSwgMHgyYmY2ZDNlNCwKKwkweDI5ZjU3NjFmLCAweDRjZjI0N2YwLCAweGFmNzkwZjBjLCAweGM5ZjViZTA4LCAweGViYTBjZjkwLCAweGU3OGQ1Y2U3LAorCTB4ZGFmNWU1NDcsIDB4N2VmOTA3ZTcsIDB4YjRmZThhMTcsIDB4ZTRmYmU4NTcsIDB4ZDNiZmNjY2YsIDB4MWVhMGZiYzMsCisJMHgxMjNmMjUyZSwgMHg1YzI5ZmIyZSwgMHg3MGY1ZmUzMiwgMHhkNDBlMGRlOSwgMHgwMWYzYzdiZSwgMHgyYjBlM2MzZCwKKwkweDY0OWQyNTcyLCAweDZlN2UxZjAwLCAweGYxNWNhMTcwLCAweDQyZTE0M2JlLCAweGIxZTNiYmU3LCAweDQwZmI5YWUxLAorCTB4YmNiODczOGUsIDB4ZjRkNzcwNmIsIDB4MDIxNTdlODcsIDB4Yjc1ZTJiZjYsIDB4YWQwMjRmNjUsIDB4NjMyN2FiY2YsCisJMHg3OGExNzhlMSwgMHgwNzBmNTZhZCwgMHgwMzgzN2VmNSwgMHhhYWJjZmFmNSwgMHhjN2U0MDIyZCwgMHhmYmRmZTQyZSwKKwkweGMzMWVmODk1LCAweDVkNmU1NDdiLCAweGVkM2NmNTQ2LCAweGU0ZGQyMGJmLCAweGZkZjA3Mzg2LCAweDliOTQwMTExLAorCTB4NDdjNmRkMGEsIDB4OGUyNWZiMzAsIDB4MDNhM2ExY2IsIDB4M2Y1MTUzMDIsIDB4ZTQ3NjBhMzUsIDB4ZDMwNDdmNDcsCisJMHg3MDRmMTQ1NywgMHhjNGYzNGJiZiwgMHhiYzczYTdhZiwgMHgyMzUyYjhiMCwgMHhjNTI1NjNjMywgMHhmNGYzZjAxYiwKKwkweDYzYWY1ZTI2LCAweDRhMmRlMDc2LCAweDM5ZjA1ZWJkLCAweGJiYWI5MDA0LCAweDhjNWY3NjY0LCAweDhlMDRlMjQwLAorCTB4ODQ3ZTk1MDQsIDB4MDRlY2Q1ZjMsIDB4YjQ3NzllMTUsIDB4MjhkZmZhMzMsIDB4OGY4MWYxMzgsIDB4ZjA0M2Y3ZmUsCisJMHgzM2RkMmJkYywgMHhmNGFmYTYzYiwgMHgzZTI5YzBhZSwgMHhmZGU3OGI0MiwgMHhlMzc5YWQxMSwgMHg5YmY5YzFmYSwKKwkweDczN2JjNGUwLCAweDljZjA2MjlhLCAweGJiMmQ1OGU4LCAweGJmOTUyNWZmLCAweGYwMGJlN2E3LCAweGQxZjdkNDNiLAorCTB4NDM4NTg0Y2MsIDB4MDg4Y2YzN2UsIDB4NzljNTBmY2MsIDB4YTY1ZDk4NTMsIDB4N2JmYTRmOTYsIDB4ZmU2ZmJlODAsCisJMHg0NTY5MjU1MSwgMHhjNzk0MmM3YiwgMHgwNGRlN2VlOCwgMHgzNDEwY2RlMywgMHgwOTEwNGVmOSwgMHgwOWZmM2EwMywKKwkweDdjZDViZmM2LCAweDkyNDlmMTgxLCAweGVmOTZmMzFkLCAweGVkY2YyYmIyLCAweDVlMmNiYmVjLCAweDc5OWMxZTZmLAorCTB4ZWY4NTFlNjgsIDB4MTNhMjU1YjksIDB4MGM5YmE4NWMsIDB4MjA1OTgzOGUsIDB4MDk5NDFlNmYsIDB4N2RiOWNiZjAsCisJMHg4MWU5OGJiMiwgMHg4NTNiZDQyOCwgMHhlZmM1MWVlZiwgMHgwZTU5MGFkOSwgMHg4ZmJjMjkxYSwgMHg3Y2EzOTdlOSwKKwkweGJkNTExZjNkLCAweDBhNTg4MmVkLCAweGY3MGYxZmE5LCAweGVlNzZjY2UwLCAweDc4ODBlNjlhLCAweDk1ZmVjNjRiLAorCTB4MmIzOWNlNzAsIDB4MjBmMDdlZDcsIDB4YmIzNTczZTAsIDB4YWFjOGU5MDcsIDB4ZWVkM2Y0NWMsIDB4N2U0MDUzYmEsCisJMHgwNmYxNGMzYiwgMHg5ZDk5Y2ZlZiwgMHg5ZDIwZjA3YywgMHhmMTU1ZDZmNywgMHhjZjM5NmU3OCwgMHg5YzIzN2YxNSwKKwkweDI3ZGJjZTYzLCAweGRmYjQxZDNhLCAweDE2YWRlYjgyLCAweDY2YmNjNzM4LCAweDJhZGM0OGE0LCAweDVhNGFkY2Y4LAorCTB4YWYzM2JlMzEsIDB4YjAzOWNlZWEsIDB4MGZhYTEyZWUsIDB4ZjcyODY0YzUsIDB4ZmE4NDRiNGYsIDB4YWZkZjAxM2EsCisJMHhmMDhkYmFmNCwgMHhkYWViNjZiZCwgMHgzYTBjYzZiMywgMHgwN2VkMTE3ZiwgMHhjNzVjYWY2MCwgMHgxMDZlNTVmYSwKKwkweDVkZmE5MDljLCAweGNhMThmNGQ0LCAweDAyMGRhMmNiLCAweDRhZDMzNDVlLCAweDFiMzM1ZmVkLCAweGUzYTY2N2Q3LAorCTB4ZWZhM2FlYjYsIDB4YmMzMTdhZDMsIDB4ODg2ZWUzMGYsIDB4MjdjZTExYjksIDB4ZjEzYWU5MmIsIDB4NzhkNTA5ZmQsCisJMHhkZjQ0NWQyZSwgMHg3NWE0Y2RhMywgMHhkZTM4OWRjMywgMHg4MTAyNzVhMiwgMHgyNjRiMDNlZiwgMHgwMTMyM2YyNCwKKwkweDNiMjdkYmM2LCAweGFlZDBmZGExLCAweGRkNjExYjVmLCAweGZhZjlkMWI3LCAweDg4MTdmMWQzLCAweDNmYTBkMzZkLAorCTB4Yzc2MGE1ZjksIDB4NDZlYTg3ZmIsIDB4MGJhZGRjNjAsIDB4NTQyZjBjMzYsIDB4ZTYzYWM3MGQsIDB4MGMxMDNiMTMsCisJMHg2NTFmM2E5MiwgMHg0ZWZiMDQ0NywgMHg3NTU5NjhiOCwgMHhjZGFiZWMwZCwgMHg0MDZjOWYxYiwgMHgwNDZiM2FiYSwKKwkweGMyOGM3ZTNkLCAweDNjODc0ZGRiLCAweDJlNzk2NDZhLCAweGM2YTNkZWNkLCAweGZkMWM5NTM2LCAweGRmMTUyMjI4LAorCTB4MWIzMWEzYmYsIDB4OTIxNjI2ZjMsIDB4NzA5YmNjN2MsIDB4YTQ3YjMzNTcsIDB4MGY4NDY1N2QsIDB4YjJlZDZhZTIsCisJMHg2ZjNjMDg3ZCwgMHhlN2MyNjk1ZSwgMHhmZDMxMmY5ZCwgMHgwZGI4MzlkMywgMHhkNjI3ZGJlMywgMHg1ZmJlMDRjOSwKKwkweGY1MmViMTVjLCAweDg5ZTNjMDY5LCAweDliZDIzMmNkLCAweDFiY2IyY2Y4LCAweGM1ODk3ZTI4LCAweGIxZDc5YWM5LAorCTB4MzUyYzRmNzEsIDB4YTBiNTdiYjIsIDB4NWY4YmQ2OWQsIDB4YjQwYWYyNTQsIDB4NTFjOGFjNzIsIDB4MmY0YTcyOGEsCisJMHg2YjcyZjQ5NywgMHg0NmQ1OTNkMSwgMHhmMjFlZDkyMCwgMHg5NDc0ZTk2YSwgMHhlZjU0YTU1NywgMHg5MGY1YTEwMCwKKwkweDMwNmE4MzU3LCAweDU3OTdhYTZlLCAweGM4YTJjNDk1LCAweDVmODg3NGE5LCAweGJlMGY5NjE2LCAweGYxZDAyZDZkLAorCTB4ODE4M2VjYWQsIDB4NWY2YmZmNTYsIDB4Yjc3YTA1M2UsIDB4NDllMDRhY2MsIDB4NWE3ZjY0ODUsIDB4ODA0MTc0NjAsCisJMHg2ZDM1ZTY1ZiwgMHhhMGY4MTJmOSwgMHhkZTA0NWU2NCwgMHhmMDFjNzVjNywgMHgyNmIzN2MwMCwgMHg4YmFmY2YwZSwKKwkweDZmMDg4NTdjLCAweDc4YjcyZjI1LCAweDk1Y2U5NmFkLCAweGI3NWNlM2Y4LCAweGZkNmE1YzQ4LCAweDVjNDUxMjU1LAorCTB4ZWU4NzdlYWEsIDB4ZTc0YWY0YTMsIDB4ZjA1MWJkYjksIDB4NzQzY2E4ODEsIDB4YmJkZWZiNWYsIDB4Yzc2ZWIwMzMsCisJMHhmNmUzMmQ3NSwgMHhkMjJiMWFjMSwgMHg5ZjlmYTFmMywgMHg3YWY0MDk1ZCwgMHgwMTAyYmRkYiwgMHhkZDc4OWQ3YiwKKwkweDJiMGZhMDM1LCAweDg4MGUwYWQ2LCAweGNiZGYxNzBmLCAweGVmYTYyZmRlLCAweGZkMGZiYWMzLCAweGE1MTVkMTlhLAorCTB4N2ZkMDA3NmYsIDB4ZjZjN2JhYzUsIDB4ODIwZGZmNjIsIDB4YjQzZmM2MDMsIDB4ODllZDEwYmUsIDB4YjA0OGFmMTIsCisJMHhmYTNiNDM3ZCwgMHg2MTRmNTQwZiwgMHg1N2IzNTk5ZSwgMHhhZmZhMDA0YywgMHgwNzY0ZGZiOCwgMHgyM2ExNDk1MywKKwkweGY5ZGIyZTg1LCAweGVjYzQwODdkLCAweGJlOGIzMzFjLCAweDE1MTYwYWI3LCAweGM1MWU5M2RmLCAweDRmYTgyMTAyLAorCTB4YmQyYTRlODEsIDB4NWZkYWNlOGMsIDB4MzY0MDlkOTIsIDB4ZjY0YmE3MTcsIDB4YWUwOWZjMWQsIDB4ZTc2N2M1NWYsCisJMHg3NGVmODc0YywgMHgwNDdlYTk4YSwgMHg5NzVlNmQzYSwgMHhlMjNiMDQ2YiwgMHhmY2MwNGY4NCwgMHg0OTc0OWU4YSwKKwkweDRhM2I2YTJjLCAweDA1NjdjYmExLCAweGQwN2JhZjI2LCAweDdiMGU4ZWEzLCAweDRiYTcxZGQwLCAweDUxMjhmZTg1LAorCTB4YjY1OTVmYTMsIDB4ZmRmMDI2NGYsIDB4ZGQxZTllYmQsIDB4OTA4ZGZkNzIsIDB4MzJmODUxZmYsIDB4NmY1ZDBmZGQsCisJMHhkMWNmY2Q2ZSwgMHg0OGUwNTc1ZSwgMHgyZjUwMDllYiwgMHg4ZmRlNTg5MiwgMHgxMmU1MGZjMiwgMHhkZWZiMGZjYiwKKwkweGJmY2RkM2ViLCAweDg3ZTc4MjI5LCAweDJjODgzZjAxLCAweGU3NGZjOTdmLCAweDBiZjM3YjdkLCAweDY2NzkyZjk4LAorCTB4Njg3NWZiNTMsIDB4ZTk0MWJjZGYsIDB4ZDliZmUwMDAsIDB4N2ZlOGZjNGEsIDB4OTUwZTUwZjgsIDB4NmY5ODg4MzYsCisJMHhlNjdmMjQ0ZCwgMHhhZWRmOTUyYywgMHhmZTJjYmZlNCwgMHg1ZGUxMTU4MywgMHhjYmU0ZDViYSwgMHg2ZTk3ZWZhMywKKwkweGYzMDYzYTNmLCAweDMwMDc5NjExLCAweDQ5YmJjN2JmLCAweGRlMWZlNzYwLCAweGZkZjAzMWI2LCAweGYyYzRhOTUwLAorCTB4YzE3NmY0NzAsIDB4ZTcxNjQ4ZjAsIDB4YWEyZDc4ZWEsIDB4YTEzNmVjMDAsIDB4NTdiM2RkOGUsIDB4NmM5MzdmNWEsCisJMHgwNzc1YzU1MiwgMHgyZjM4Y2E0NSwgMHg2M2U3ODdlZCwgMHhiODY3OGE1ZSwgMHhhN2Q2MDExZiwgMHhjOTRkZGZiZSwKKwkweDkxNzhlOWJmLCAweGEzNjk1ZmQxLCAweDY5NWNmNjhjLCAweGM4NGU5NmRkLCAweDZjM2QyY2MzLCAweGIyYjczZjQyLAorCTB4ZmMxMWFjZWUsIDB4YmMzZmRjZDgsIDB4NTVmM2Y3ODQsIDB4M2M5YThhMzYsIDB4NmZmOTFlYmMsIDB4MDRkZmEyNzUsCisJMHhlNTBkNWJmOSwgMHhlYjQzN2U3OCwgMHgwZmFmNThlZCwgMHhiMTdhMDc5ZiwgMHg3ZmM1YWQzYywgMHg0YmRkYjFkOCwKKwkweDk1ZjhiODQxLCAweGJlZjBkOWRmLCAweDM2OGRkNmJlLCAweGVlYTllZWZjLCAweDNkYTdmOWMyLCAweDU3ZWFkZGYyLAorCTB4ZWRkZjMwNWYsIDB4MDk0MWZjMzQsIDB4NWQ0OGJhZWIsIDB4OTMxZDYwYmUsIDB4OTk3ZDc0NmIsIDB4YzRlMjYxZjksCisJMHhhNWViN2I0MSwgMHg3YzgzOWYyZiwgMHg3ZmFkOGVlYywgMHg1YmQ2MGU3YiwgMHg5ZWU3NWZmNiwgMHhiMjFhYmM4MywKKwkweGY2MGVjMjMzLCAweDBmYTZlNTQ4LCAweDc5NTU5ZjMwLCAweGQ5OTIyNGFmLCAweGZlMmY5ZDdmLCAweDNiODBmMzBlLAorCTB4NjEzOTM0M2YsIDB4MjcxZGNlYjQsIDB4ZDFiZDgwODYsIDB4MDRkYmU1YjksIDB4YmE1ZGVmYzgsIDB4NzNjNjFhNjMsCisJMHg0ZGNiNmU5NiwgMHgwNWUyNjEyNCwgMHhlYjc0MDk0YSwgMHhiMjFlNDNlYiwgMHgwZGNkNWYxZSwgMHg3M2ZmOThjZCwKKwkweGU0MWJlMjg2LCAweGIxN2YzMDQzLCAweDgzZTU5Y2JlLCAweGUyZGU3ODNhLCAweGRlZjlmMGU2LCAweDFiMTRmMjNkLAorCTB4MTkzZjVkNjYsIDB4YjMwMzYyZTQsIDB4YWY5YTJlMGIsIDB4ZjFlMjgwNzgsIDB4NmZlMDNlZjIsIDB4NGYyZTZhZjMsCisJMHgwY2VmZTNjMiwgMHg1NGYxNDFmYywgMHg1N2NkYTkxMywgMHhlMTYxYjJmYywgMHhiNjgxOWU2ZiwgMHhmMzVlYjg4NiwKKwkweDgwN2RmZDE1LCAweDNlNGY5MjliLCAweDU4ZjVkMjJiLCAweGQ2Y2RmMDI0LCAweDI4N2U2M2RmLCAweDAxY2YyZGUwLAorCTB4MjFjYmY5ZjIsIDB4MjkzZTE3MTAsIDB4MTBmZTMwMDcsIDB4ZWZjMjYxZDgsIDB4MWM3NzRiMmMsIDB4ZGNlOWZlNDIsCisJMHhiNWYzMWZiNiwgMHhlZWViY2YwOSwgMHhjYjFmYzEyNCwgMHg5ZWIxZTVjMywgMHg5NjU2MGRjYSwgMHgwZmUxYzhlNywKKwkweDFiMGU5MDc5LCAweDhlZjllNzNlLCAweDNjOTU4ZThjLCAweDFmZjJkZWM4LCAweGY4NTMyMjViLCAweDRmMmMyYTdkLAorCTB4YzdjMzdjYjMsIDB4ODQzMGFmM2MsIDB4ZTAwMjYxMmYsIDB4Nzk4MmZkYTksIDB4ZWMxYzBhYTUsIDB4ZDQyYjg3MDAsCisJMHhmM2UxYmNmOSwgMHhkZjc5ODM0YywgMHgzZjgwNWYxYywgMHg3Y2MxZDM5MCwgMHgwNDFmNWE1ZCwgMHhlMTNlOWJmOSwKKwkweDBmMjMwOTEwLCAweDNjYjNkNzNhLCAweGZjMzk0ZWUwLCAweDdlNGFjY2Y3LCAweDRmOWViMzZmLCAweGViY2I3ZDdkLAorCTB4YmZmYWQ4YmQsIDB4MjIxYTdjMmYsIDB4MWVhZTM4MWQsIDB4YzNlNzFkNGUsIDB4OWNlM2YxY2IsIDB4ZjdmMDdmZWYsCisJMHhmZTgyNjUyMSwgMHg4MWNmOTNmYiwgMHhkYTFiY2IxZSwgMHg4OTlmNzg4ZCwgMHhmZGYxM2ZlMiwgMHg1YTc4ZjA3NiwKKwkweGYzMTEyNmM3LCAweDliZWE2YjNlLCAweGU1ZWI4ZTUxLCAweDI3M2YwNTQ1LCAweDFiZjdhZmQxLCAweDQ2OGFkZWJlLAorCTB4YjYzYTI3YTYsIDB4M2ExNjdkNWEsIDB4YWY1YmM3NGUsIDB4NmM1NzNkMjEsIDB4ZDNiY2M3NmUsIDB4MThhZjc1YmQsCisJMHhjYmU3NTRkYiwgMHhhYTdjMjdhMCwgMHhiY2JjNzdmNSwgMHg2ZGNhMGM2YiwgMHg3ZTk4YmY3ZSwgMHg5YjE0NjMxZSwKKwkweGZjMjliMmE3LCAweGNmOWI5NTNjLCAweGVjNTllNjZhLCAweDJkZGEzN2FkLCAweGI0ZWY5ZjE3LCAweGM2MDliYWU0LAorCTB4ZWNjYWRkM2IsIDB4ZTJmNWQzYTUsIDB4Zjk5ODVmMGMsIDB4NDliZDcxNGYsIDB4MGYzYjJkNDgsIDB4ZWYxMmZhYTUsCisJMHg3YmIyYjM1OSwgMHgyNDViNDRkNSwgMHhhZDRiNWZkYSwgMHhmNzQ3MGUxMywgMHg3OTg4ZDI4MywgMHg3OWFhMmIyZiwKKwkweGNlN2RjYzllLCAweDBhZjdjMDI0LCAweGQ2MDRkNWViLCAweGFiZTAxMmJiLCAweGJiNjVlM2YyLCAweDI2ZGQ4MDliLAorCTB4YTg2N2U1MjcsIDB4ZjU5NDU5Y2YsIDB4ODgxOWZiMWIsIDB4YTVmZjg1NGYsIDB4ZTA4OTE5ZDYsIDB4M2JjOTEyN2YsCisJMHg1ZDcxZDYwOCwgMHhlODEyZDdjYSwgMHg4YjBmNTZiZiwgMHg0N2YzOTNkZiwgMHg1NmYzYzE4NywgMHg4ZTI3YmVjOSwKKwkweDU1M2FkYjhlLCAweGI1ZTg0MjcwLCAweDM0ZmJkZDI3LCAweDJlOTk4NjcxLCAweGY4YjE3ZGVkLCAweDVmZGQxYzBkLAorCTB4ZjY4MGQzYjcsIDB4YjdlMGQ1YTAsIDB4MWFjNDJlZDMsIDB4MGU4NDlhZDEsIDB4YTQzODgzYWMsIDB4MDIxNGZjMDQsCisJMHhmNDFlMjFmMywgMHhmZGMxNjc5OCwgMHhjZDQyMzZjOCwgMHg5NGU3ZTg1MywgMHg0NDlmZjczNCwgMHhmNzc0OTA0ZiwKKwkweGMzMDM5MGExLCAweDM4NWFiZDI4LCAweDM5NzEyYWJkLCAweDhlOWJmYjJiLCAweGFjZjc4NmRiLCAweDZhOTFhNGM0LAorCTB4NTYzNWRmMjAsIDB4NGYwZGRhMzcsIDB4ZTg2OWZiZjAsIDB4NDFlNDI0NmYsIDB4YTc0ODkyYzQsIDB4M2EyNmZlZmEsCisJMHgzOGZiZTZhZiwgMHgxZWE2YWYzYSwgMHhlM2Q2ZDJlMywgMHhjMmM3NDg2NiwgMHhiZTM4OTdlOSwgMHgwNWEyZTk4ZSwKKwkweGNkMzMxMGUxLCAweDc5NmJmOGEwLCAweGViNDIxM2MzLCAweDRlMjc4OThlLCAweDZiNWZiNDNmLCAweDI4MDFlZmMxLAorCTB4ZmJkNTc5N2IsIDB4ZWJiNDU4YjAsIDB4YzhkM2ViYTYsIDB4MzZiNGU4ODksIDB4NTNhZDgxYWYsIDB4MWM0ZWRjZjMsCisJMHhhNWRmZWUwMiwgMHhhYmQ3NGU3ZCwgMHg3MTQ2MTdhOSwgMHgwOTExMjc3OSwgMHhkY2M1OWRlNCwgMHhiYmZjMzg0YSwKKwkweDVmYmVmMDM1LCAweDAxMzgzN2RhLCAweDVmYjg0M2YwLCAweGNmOTAyNWVkLCAweDQxZjdjZDEyLCAweGI3ZjRkN2U3LAorCTB4Y2Q4MDc0NDMsIDB4MGM4NzFkYWYsIDB4NDNiZmFiYjIsIDB4YmZlYjljYmQsIDB4MjVmYzk2NTEsIDB4MzI5ZTk0NTEsCisJMHg2MjYxNTY4NywgMHg0OTEyNTY3NiwgMHg5YmE1ZWZjMywgMHg0YTdjYTFmYSwgMHg3OTgzOTY1OSwgMHhhMzJkNDIyNywKKwkweDA4NmI2MWFiLCAweDAwYjBjZGYyLCAweDNmYmE5YmNmLCAweDkzNTFlZDEyLCAweGQyMjM3ODk5LCAweGUyMzY3YmUxLAorCTB4MTY2MWQzOTUsIDB4NzA0M2NmMWYsIDB4YTFkMDM3MmMsIDB4ZDY5NDU1YTQsIDB4ODE0ZDdiZTgsIDB4OGE0MmMzMWMsCisJMHhhMjY4N2E4NCwgMHhiOTQ2NTdlMywgMHg5ZjI4YTNhYSwgMHgyNzc0Y2NkNiwgMHhmNmMyYzYxOSwgMHgzYmI5NWVkZSwKKwkweDUyZjZiOTBiLCAweGFhMWEwODg4LCAweDE5NjllZWY3LCAweGVmMDQyMjhjLCAweGJkZGUyMGYxLCAweDZiYzY4MDdiLAorCTB4ZWMxNTNhOTUsIDB4NmQ3ZjlkZjAsIDB4MzJlZWIwNjQsIDB4OWI1Zjc5NTMsIDB4M2U4ZmVhYzIsIDB4ZGMyNTc3YjQsCisJMHhjZjZlOTMzNywgMHg0OWY2MTQ3ZiwgMHg3ODUxZjZjYywgMHhkNThmZTVkZSwgMHg5YmRkZjNkYywgMHgzOWQ2NTE3ZSwKKwkweDE3M2Y4MzcyLCAweDNhYmUwNWVlLCAweDFkZjVlZWMwLCAweDc3N2UwZDZlLCAweGEzNzg3YThmLCAweGQxZmJhOTQ1LAorCTB4ZDg2ZmM4OGYsIDB4YmNhZDcyOGYsIDB4MWJiNjNmN2UsIDB4YTFjYjRlYTAsIDB4ODFkY2ZlNzEsIDB4NDcyZjlmNzQsCisJMHg3NDk2OWExZCwgMHhhMWFmMWQyOSwgMHhkOTNlMDkzMCwgMHhkMGVhMzU3ZiwgMHgzMGVlZjgxZSwgMHg1NzhmODcwNCwKKwkweDgyMTQxZWVlLCAweGMzZmNiNDgzLCAweGQ1OTMyZDNkLCAweDBmNzBmODcwLCAweDg1N2QyMWQ4LCAweDdkMGZhYmMzLAorCTB4ZWJlODcwODgsIDB4NmM1ZDI5YmUsIDB4OTM1Y2JjMDcsIDB4ZDZmYmMwNmQsIDB4YzE2YzM4YWUsIDB4NDVmZDBhZjgsCisJMHhlM2UyM2VhMCwgMHhiYmU1ZWZhYywgMHhhMTFmYzU2YywgMHhkMzU0ZWNlMywgMHg0MjllZjI5NywgMHg0ZGQxYmQ1NywKKwkweDYyOGZiMTJhLCAweGU5NmE2Y2Y3LCAweGY1Y2EyYmE3LCAweDI1YWJhYzM2LCAweDM1OGY3NWNhLCAweGY3OGZmNzFlLAorCTB4NzZlMzVjMDAsIDB4MGI4ZWE3M2IsIDB4YjhiMTM1ZDEsIDB4ZWVmZGMxYzcsIDB4NWJmMzJjYTMsIDB4ZjJmMjU0YTMsCisJMHg2MjI1ZWM5YSwgMHg4MWM5YzQwYSwgMHhmYjQzZTIxNywgMHg4ZGU2NWY4OSwgMHgxOWY3NDExOCwgMHhkZTYwMzJlZiwKKwkweGZiOGIyOGZjLCAweDJiNjNjYzIwLCAweDc3MjFmODA4LCAweDFlZTIwYWVjLCAweGJlMjE4ODI3LCAweGQ5YWJlNjUwLAorCTB4OWFmNWZjYzEsIDB4Mzk2ZjgzNDIsIDB4NjAxNWVmM2IsIDB4YjQ3ZDEwYmMsIDB4YzAyM2U4ZTksIDB4MWRiMWEzZTgsCisJMHhhOWEyYTNlOSwgMHg2MzQ3ZDE5ZCwgMHgwNjY0NGU3NSwgMHgzZjAzMzczYiwgMHhjNjA0OTZiZiwgMHhhMjNiZGUwMiwKKwkweDUxMjY5YWJlLCAweDE1MWExZmZhLCAweDkxYmEwMWE4LCAweGU1YTZlN2JkLCAweDNkNzA4YTVkLCAweDdjM2YxNjFkLAorCTB4N2FiZWNhN2QsIDB4NGI2ZDZmYzMsIDB4ZTA2OTQzY2EsIDB4ZTAzM2VlNGYsIDB4MzcwMjk3NzksIDB4ODU4YzVmYTUsCisJMHg1OGI2YzVlNSwgMHhmYzAzNWZkZCwgMHhlZGI0MjcyYSwgMHg2ZDZmZWQ4NSwgMHgzNmYzMWY3OSwgMHhkODZlZmI2YywKKwkweDY2ZGJlZjA1LCAweDQyMzkwYzUzLCAweDViZWVkNmYzLCAweGQ3NjdmNzhlLCAweGQ4N2RkODA2LCAweDA1ZTAyNGQxLAorCTB4M2MzYmRlYmQsIDB4ZTEwNGZmMTgsIDB4MWE0Zjc2MDEsIDB4ZjkxZGEzYzAsIDB4NWVmZjEzNjUsIDB4NzA1MWFiMmMsCisJMHgxYTFmOWU4MSwgMHg4OTBkZWVjNSwgMHhlYmYzYjBiNCwgMHhkNzExMTYyMSwgMHhjZWMyYzQzOSwgMHhiZGY3ZTI1OSwKKwkweDk1YmY4MjI1LCAweGZiMDFiZjc1LCAweGE2OTk0M2M3LCAweGJjZmRmZmRlLCAweGFmODlhNGJmLCAweGU4NTRmODJiLAorCTB4MjhkMjRhODksIDB4NGNlNDdmYjgsIDB4YTJkMTNiOGMsIDB4YThkODlmYTEsIDB4Y2E3OGQ1MTQsIDB4ODg3ODhmN2IsCisJMHg0N2FhMGVmMywgMHhmZjNkZDhhZiwgMHg5NGFiZDAyZSwgMHhmYzAwYmU3ZSwgMHg5NjhkZmIwNCwgMHg0YTZlMDAyMywKKwkweDcwY2ZhMDdmLCAweDBkZWZhMWY4LCAweDFlNjBmOTg3LCAweGVjYjYxN2IwLCAweDNkZTIyMjVlLCAweDZiYzQ3ZDFhLAorCTB4NDkxYmRjMjYsIDB4OTE0NjY3ZmIsIDB4ZmRmNGFkYWEsIDB4NDI1YTY4Y2MsIDB4MTNkNzhlM2QsIDB4MmIyMDdkNzksCisJMHgxYTcxM2Y1MywgMHgzZDdjZmEwNCwgMHhiNjRlYmI4ZiwgMHhjOTMxZmNmMCwgMHhkMTg2ZWEzZSwgMHg1Yzc2Njc1MCwKKwkweGVhMjQ1MjU2LCAweGUxNmY4NTA1LCAweGI3MzgwODBlLCAweDc1ZjlmODk2LCAweDAwYzUyMDRhLCAweDU4Zjg1Mzc4LAorCTB4NTZmYzE4MGEsIDB4MjQ1MmI0YWEsIDB4MThmMjAxODcsIDB4N2RkMGYxZGUsIDB4OWRjYmJkNGIsIDB4ZGY2NTJmYWIsCisJMHhjZjlmZWE3MSwgMHhjMWY5ZWJlNCwgMHgzZDE3ZjVmNiwgMHgwOTllZWZiZSwgMHhiNzM3MmRmMCwgMHhhZDAzNzIzZCwKKwkweDBlN2E1YzU3LCAweDQ3OTcwN2NmLCAweGExNzk1YzU1LCAweGViZjQyZjdiLCAweGRiZmNlNzdmLCAweDRkODc0MDUxLAorCTB4N2VjMjk4ZGYsIDB4ZTFjMzU1MGYsIDB4YzAyOWUyZDYsIDB4YmRmOTMyZjcsIDB4Yzk1MTI0MmUsIDB4YjFlNTU2MzMsCisJMHhjYmI3MWI0MiwgMHhmODI5OTUxMCwgMHhmZmFjZWQxYywgMHhmODA4MTE0MCwgMHhmMGIxNGFmNCwgMHg5ZTMyNTQ3ZSwKKwkweGU1ZDE0ZTFmLCAweDlmODdmZWFkLCAweGMxMzJmOWM1LCAweDcxMjUwMDMwLCAweGNmMzYyOGM5LCAweDMyNGVjYzM3LAorCTB4OWNlMGZmZDMsIDB4MTczZjFhNjksIDB4YWY3MjQ3N2IsIDB4ZGVmMWQyYjAsIDB4MzU3Y2VjMjEsIDB4MTlhYWFlMzMsCisJMHhjNmM0YzRlYSwgMHhmYmRhMjZjZiwgMHg2YjEzMzIwYSwgMHhiOGMyYzZhNywgMHhkZjE4YzlkMSwgMHhkYWViMzVjYSwKKwkweGM4MTJiZDUzLCAweDhjOWE5MjY5LCAweDg4ZDM4OTc5LCAweDdhNjMzZWNhLCAweDA4ZWVlZDAzLCAweGUzOTAyZWJhLAorCTB4NzQyYzhjZDcsIDB4ZTdlZGU1NGUsIDB4NGQ0M2ZmZTgsIDB4MmE5OWY2ZTQsIDB4YzcyYWUzN2YsIDB4OGQ1NGU3NWMsCisJMHhmNzhiNTJmZCwgMHg5ZmU5ZmQwMSwgMHhmMmUxZWRlMiwgMHhmY2UzM2UyYywgMHg3N2M5ZTJkZiwgMHgxZWIzZjljMiwKKwkweGUxMGUzOTllLCAweDI3YTNhYjdlLCAweGQ0NzBmNWRjLCAweGFiODE1ZGMzLCAweDlmZDk4ZTFlLCAweDg2YzZhNzM4LAorCTB4MmUxZTkzODEsIDB4NDhlZDQ4ZDMsIDB4ZGMwYTYzZDAsIDB4Yzc3OTcwZjUsIDB4OWRlMmU4Y2MsIDB4YWJkZTEzMzQsCisJMHhlMGM0OGVmOCwgMHgyMzM1MGVmOCwgMHg5YmE0MWVhMSwgMHgwMWVmMTE2OCwgMHhmNWUyOGNjZSwgMHhiYWIwNDczNywKKwkweDY0YThlZjgyLCAweGFlMWViN2M0LCAweGM2NjYzODdhLCAweDU4ZTNmN2YxLCAweDJmMDBiZGZmLCAweGUyMDJlNTA5LAorCTB4Y2M5YmExNDcsIDB4MzFkZGFhZDQsIDB4ZWM1MDdhMmEsIDB4MmUxYzY5ZWIsIDB4ZmI0NmJlZDQsIDB4OGFkZTM3MzksCisJMHhhZmIwMjY3MSwgMHhlMDg0MjVhNywgMHhkNmNlNWI5NiwgMHhmMmRjM2I5NSwgMHhmNGE5ZjgzYywgMHg3MmJmYmM3NSwKKwkweGZmM2ZlMTBhLCAweGNhMmYzYzE0LCAweGNlMDU1NWU0LCAweGRhZDFiZTUzLCAweGE2OWFkM2M5LCAweGMzMzg4MjlmLAorCTB4N2VmYjkzNTAsIDB4MTA4MGNmYTAsIDB4MTQ3NWU3ODMsIDB4NzA3NDQ3ZWUsIDB4ZDc2N2JlZDcsIDB4Zjg3MGY1ZDYsCisJMHhiMTMxZmMwMywgMHgzYTE0YmMyNywgMHhlM2MyYzBmYiwgMHgyMGM4MDM0ZSwgMHhiY2M3OTdiMCwgMHhmMjBkMTE5NiwKKwkweDg2YzUzNDliLCAweDcxNWM0YjhkLCAweDBlMzgzZjM4LCAweDYzYTQ1N2E3LCAweGNmODNiODgxLCAweDQyM2ZhOWVkLAorCTB4NWFhM2VkOGUsIDB4MzZjNzI1NTIsIDB4OTZkM2VlOGIsIDB4NGM3MjllZjgsIDB4OGU2NGQzYzEsIDB4YmJjNGM5ODcsCisJMHg5MzRiZTIwYiwgMHhkMDQ1ZjQ4OSwgMHhlZDBlNDgxZiwgMHhlN2Q5NWJiZiwgMHhmNjEwMzI0MCwgMHhjMWM1ODM3OSwKKwkweDY3ZGYzZmU0LCAweGJjZDRkZjcwLCAweGY4YjNmOTg0LCAweDBiNjY1OWZjLCAweDAyNDM1ZjdlLCAweGNlMTA0NzUyLAorCTB4OTFkZjc4MjksIDB4NWExYjE4ZDcsIDB4NGZiZjkyODcsIDB4NjYxMTU0ODYsIDB4N2JjM2NkY2YsIDB4Yzg1YzI5YWUsCisJMHg3NWExNTE3NywgMHg4NDgyYWM5OCwgMHg3NWYwZmRmNywgMHg3YjMzYTk5YywgMHg1YmFkOGYyMSwgMHg5ZDgxNDc3NCwKKwkweDFiZWMyMWQ3LCAweGZjOTNmYjgzLCAweGU5ZmY0MDIzLCAweGVlMzVjZmRiLCAweGRhNzY4MGFlLCAweGYxZmIwOGFmLAorCTB4NTkxNjJmZjUsIDB4YzNiMDIxZmMsIDB4YjkzZTdiZTQsIDB4YjI5NTNiNzcsIDB4ODUwOWVhMzUsIDB4ZmJlMGIzN2UsCisJMHhkZTgxY2JkNCwgMHhkZDYxMDNmZCwgMHhkMWQ1NDA1MywgMHhmNjU5ZTc3MiwgMHg2Mzc2NDMxZCwgMHhlY2YzMDRiYSwKKwkweGZmNzk2NmU5LCAweDgxMjVjNDM5LCAweGRmYTdhYjdkLCAweGExYTc0YmVmLCAweDA4NjA0NTc4LCAweDVkOGEyOWY4LAorCTB4MWVlYWQ1MzYsIDB4NTdjZmE1NjksIDB4OWI2NmVmZjMsIDB4MDUxODhlY2UsIDB4ZjRjMWY5NzgsIDB4NGY0YjQwNzQsCisJMHhiYTUxMWQwYSwgMHhlY2YwMGYxYSwgMHg2OWZjZjhjYSwgMHhjZGRmYzczMCwgMHg3YTAwOTczOCwgMHg0M2RmYjE1MSwKKwkweDAyNmI4YTc2LCAweDNiMzdhN2FjLCAweDNkZDU4OTdlLCAweDNiMDE3YWM1LCAweDJlNjdiMTVlLCAweGRkOTA4N2U2LAorCTB4NzRhNjQxZDQsIDB4Y2JjNzFiNzQsIDB4Y2NhYjczM2MsIDB4NjAwZmNkZWUsIDB4NDhlYWZkZmUsIDB4NDczYjVlZTUsCisJMHhiNzkxZDgyNCwgMHg1NGQ5NGVhZCwgMHhkNTg2ZTcwNywgMHg2YjdlZmUyYywgMHg4M2YxYWM5NSwgMHg4NmRkOTBkZCwKKwkweDY2ZmJiM2VmLCAweDZkYTY1ZjZmLCAweGZlNjA0Y2ZmLCAweGZiNTdhMTdlLCAweDM0MTI1ODljLCAweDljZjZlZGY3LAorCTB4YzAzNWUwZDcsIDB4MzEyM2MzYmMsIDB4YWYzZjQxM2YsIDB4NzlmYTdmN2UsIDB4ZTZhZGYzZjUsIDB4NjM2YWQ1N2UsCisJMHhjYWE3NDhlZCwgMHg2NTYwNTkyZSwgMHhhYWY3NTBmNiwgMHhjYWUwZWJjNywgMHhlN2UwZGViYSwgMHg5MzQ4MGYzNiwKKwkweGI1YWJmNzU0LCAweDA4MmM4ZWFkLCAweDMyOGM2Zjc3LCAweDc5ZWYwMjllLCAweDAwZTJjZmM0LCAweGMzZGZmMjU1LAorCTB4ZTU5YjgzZGQsIDB4ZGU4MWYxNjYsIDB4OTgxNjFkZTYsIDB4ZTFhMDc2OGEsIDB4ZjYwOGJmNDksIDB4NDEwMGIwZmMsCisJMHhlMDJiM2JmYiwgMHhmOGQwMmMzMiwgMHhlZTRmY2MwMSwgMHhiZGMwMDdlMSwgMHhkNjVlYjQyNiwgMHgwMWY5OGJiMCwKKwkweDRmZThkNWY1LCAweDAyN2Y1MTk0LCAweDM4N2FjY2Y0LCAweDE3YzAxZTliLCAweDQxZmU4Njk0LCAweGZjODVkZmQwLAorCTB4Y2ZiODJjYTksIDB4MTJjM2ZiOTIsIDB4NWFkNDk3YTUsIDB4ZjVhMzdmZDYsIDB4MDk2YWUzNWQsIDB4OTI3NzU1ZmMsCisJMHhlMzYzMjk0YywgMHg5OGQ3ZWZjMywgMHg5MzU1NWZhOSwgMHhmNTA4MjI0YywgMHhmODc4NWVhYiwgMHhjMDZiZTlmZCwKKwkweDA5NzU4ZTVmLCAweGFkMjg3ZjcwLCAweGY3ZmE1OGQ3LCAweGY4ZGViZmRkLCAweGI4MWFmZWYwLCAweDY1ZmE5NDZmLAorCTB4N2YyYWFjZWIsIDB4NzhmZTM3YjcsIDB4MGI5MThjMDQsIDB4M2RiYTQ3ZjAsIDB4YTFmMDIzN2YsIDB4OGE2OGFmMTIsCisJMHgxMTFmN2NlMCwgMHg4MDY4YmJhNCwgMHg1NzI3NDI5NywgMHg3ZThmOWIyZiwgMHhlNzI1YzQ0NSwgMHg1ODllNDA4NywKKwkweDE2ZmZjNzE2LCAweDQ2YzM4ZjJiLCAweDEyOWZmN2IxLCAweGJmOTA1YmRkLCAweDAyM2YzYWRmLCAweDhjZWZjYmUyLAorCTB4NWNmZThhM2MsIDB4ZTdjNTk1OTMsIDB4ZDA0YTc5ZjcsIDB4YjlmMDUyN2UsIDB4M2Y3MDJhY2IsIDB4ZjgxMDNmYzksCisJMHhjZGYxZGFlZCwgMHg2NDk3ZTA3MSwgMHg0M2RlMDJjOSwgMHg5ZWZiMjRkYSwgMHg3OTAwY2Y0YywgMHg4MmJlZGIzNCwKKwkweGEyNmIyOTZlLCAweDZiMTNiZjExLCAweGJjMGZmMDhhLCAweDM1YTc2NTViLCAweDliNGNmYmYxLCAweGE4MWRlZWNlLAorCTB4NjYxZTYzY2UsIDB4NDU2NWRkY2QsIDB4MzA4YmYzZmEsIDB4ZWVjNjU2N2UsIDB4N2JlZmEwYzMsIDB4ZmQyMTJmZDMsCisJMHg3ZjQwMTJlMSwgMHgxM2ZiZjM5MCwgMHg2MWE4ZmNmMCwgMHg0MmUyMGQ4ZiwgMHg4MjdlZmMxZCwgMHgwOWNkMGQzMywKKwkweGJlNTk2OWYzLCAweGYwMzYyZmU1LCAweDcwZTdkZWQ3LCAweGUyYjUyMzM4LCAweGRiNjU0YTNkLCAweDgzZmZiYzQ0LAorCTB4MGI3MDliY2UsIDB4MTYxYmE3YzQsIDB4ZjdlZmIyNjQsIDB4OGE2Nzc3ZDgsIDB4NjdmZjRjZmUsIDB4MTY3Y2MwZjMsCisJMHhjOGVmYzQzNCwgMHhiMjcyN2IxNCwgMHhmNTgzZWJkOSwgMHgxODhiNTUzNSwgMHhiYmFjOWUyZiwgMHhiZjBhNmMzNywKKwkweDVmNmY0YzM3LCAweDcxMmFiNDllLCAweDg3Y2MwNGU5LCAweGYzNjc2YTVhLCAweDU5NGZjNmY0LCAweDlmMTJjNGRmLAorCTB4MjRiMmRmOGEsIDB4Y2ZlYjA4YmYsIDB4YzA4MTI2ZmEsIDB4NWE2Nzk3MTUsIDB4MDNjODllNTIsIDB4Y2VjODllM2YsCisJMHg0NGFjMzBlMSwgMHhjYWZkYTM3NiwgMHg2ZmU4OWZjZiwgMHhiZTQzZGMzNywgMHg2Y2RlNTc5MywgMHg0YWViMzczOCwKKwkweGZkZmI2NjI0LCAweDc3NjAwOTk3LCAweGUwYjFmYmI5LCAweDhhMDdkMzIyLCAweDFiZTUzNzdkLCAweDZmNTU3YzZkLAorCTB4OGQzNGU2ZTcsIDB4NDEyMDdmYmQsIDB4YTc3ZmIzNzgsIDB4NTVlZWMwMjIsIDB4MDZmZjYxZWIsIDB4N2JiNTg3YTYsCisJMHhlMTBjNzkwOSwgMHhmNTJkYmU5MCwgMHgyOTQ3YjgxYSwgMHgzYjA2OGZmZCwgMHg3YzAyZGJjYywgMHgzY2Y4MGYxMSwKKwkweDU0ZmNmNzg3LCAweGQwOGRmZjEwLCAweGRhMjBkMTVlLCAweDkyN2ViMGZkLCAweDk1ZjAxOTcxLCAweDcwMjgzNzYyLAorCTB4NmNkZjNjNjksIDB4OTFkNzQzMWUsIDB4NWY2MGQ2NzUsIDB4MzM3ODg3NGUsIDB4Y2ZmYTA1ZjAsIDB4MmZiY2ZlZTMsCisJMHg1MzU3ZjQwZSwgMHg4MjczYzI0MCwgMHhhM2JiYjNhYywgMHg2MGU0YTgxNiwgMHgzZTAzNzlkMywgMHg1YmZjZjM3ZiwKKwkweGQ4ODFlN2RhLCAweDJkYmRlMGNiLCAweGVmMTdlNjA2LCAweDI4ZjdmYmRlLCAweDllNmY0YjkwLCAweDgyZjFjNmVmLAorCTB4YmI0ZjQzNzYsIDB4NmI5MWUxMTgsIDB4Njc3MTgzMTUsIDB4YzQ0YzVkYjUsIDB4Yjc5MDAzYWMsIDB4YWE5YTJkMzUsCisJMHhiYjc3YTEzMSwgMHg3MjEzZmIzNywgMHhiNGY0OTViZiwgMHgxZWMwNzIxZiwgMHgxMWQ4YzMxMSwgMHgzZTc0Y2UxYywKKwkweDZmNDhmODA5LCAweGUzNmU1YzU3LCAweDI0YzFlNmYxLCAweDZjYTNlZTFkLCAweDE4YjcxZjNjLCAweDhhNmUxZmJmLAorCTB4N2Q0NzJmYjIsIDB4YWVhNWVjY2MsIDB4YmYxZmE3ZGQsIDB4MTNlZjllMDYsIDB4ZTcxMWZkZDksIDB4YjdhN2U0NDUsCisJMHhkYTFlMmU3NiwgMHgyYTViZTJhNiwgMHg1ZjRmMTEzOSwgMHhmOWRiM2ZmNSwgMHhkNWZmZWQwNiwgMHg0NzE2NDg5ZSwKKwkweGE5OTc5Yzk3LCAweGY1MDg3N2JmLCAweGY5Nzg3MWY3LCAweDM4ZjNiMDA3LCAweGQ3YjgwMGVmLCAweDJmZGIwN2U5LAorCTB4ZmFmYzNkMWQsIDB4YzNkYTFiM2MsIDB4MWVhMGU5ODEsIDB4Mzc2YmFjNDYsIDB4YWM1YmZlMDIsIDB4OTBkOWQ3ZjksCisJMHgwMGEzZWFkZiwgMHgzMzkyNWUyZSwgMHhmMzgwNGM5MCwgMHg3NDAzOTI3YSwgMHg3NjI2YTgxNSwgMHhiNWI2MjdmMCwKKwkweDk3ODAwYzE4LCAweDk4Yzk4ZDhjLCAweDlmODliM2E3LCAweGFmYWEyZTU3LCAweGU4YWIyNjM1LCAweGVmM2YxMTYyLAorCTB4ODc3YjI5M2EsIDB4MWY5ZWFhYzQsIDB4NzJmOTMxYjAsIDB4NmZlOTRmNzIsIDB4NDNlMzRmMzAsIDB4YzYxZTE5MTMsCisJMHgzMWIwNmNkZSwgMHhkMThhZmI3ZCwgMHhlODY2Y2Q3YiwgMHhkZjgwYzQ3NywgMHhmYmRlZWQwZCwgMHhjZmI4NWVmYSwKKwkweGM3NjFkMTc4LCAweDNkZmY4ODU4LCAweGJmNjA3MzYyLCAweDZhOWI3ZGM2LCAweGYxYjdjZjIwLCAweDU0NTJkMDEzLAorCTB4MTQyODZjYWYsIDB4MzdkZTc0MGQsIDB4ZWZjNTgzODgsIDB4MWZkMDE4MGUsIDB4ODkzZGM2MGYsIDB4ZjlmNjBlMmIsCisJMHgxYmNmNWYxMCwgMHhmOWNkMDYyZCwgMHhkZWZjMWJkOCwgMHgzMjZkN2JkZCwgMHg4OWIxMmZiNiwgMHgyZGFkYzc4OCwKKwkweDM3YTA3MTM5LCAweGJiZWVhYzVhLCAweDhlMmZhMDZkLCAweDEyYzBkNWI1LCAweDYyOWY3ODk0LCAweGIwM2M0ZGFmLAorCTB4ZjRkMTlhZjUsIDB4MDYxZDg5Y2YsIDB4NzFkYmEwM2IsIDB4ZjYxMTc5ZTAsIDB4NDg0OTM4ZWIsIDB4ZDg3YTQwOGMsCisJMHg4ZjNjNzQ2ZiwgMHgzYTM3YmM3YSwgMHgxZDc0NzhkOCwgMHgyYWJmMDE2ZiwgMHhmZjlhYTdmMCwgMHg3ZjVhMzRhMSwKKwkweDg1OGE1NWEzLCAweGZlMDUyZWZjLCAweGY5OTQzZWNhLCAweGI1YzRmNTFkLCAweGU0YWM4MmRlLCAweGI4ODE3YWRhLAorCTB4M2E1ZjkyYjMsIDB4N2Y5NDRlY2UsIDB4ZDJlOTAxMmYsIDB4NmEzZDczNjgsIDB4ZGEwZWY2NjMsIDB4MzBmNzI3ZDcsCisJMHhhZTE1ZThiYiwgMHhlMTUyNDk0NywgMHg4MjlmODA1MCwgMHg4YjFiN2FhNywgMHhlOWViMmEzMywgMHhkYmRmZmU2ZCwKKwkweGNhNTQ5ZTk4LCAweDliZDc0YmVmLCAweGU5MTc4NzY0LCAweDBmY2IxYjY2LCAweGU2ZmQ3ODc3LCAweDZiMjNjODU0LAorCTB4Y2Y3ZmM1NGMsIDB4ZmI2Nzk1NDksIDB4OTNlN2E0N2IsIDB4MWIwNTdiZGEsIDB4ZjgwNjBjZGIsIDB4ODc2MmFjMGUsCisJMHg2ZGU2ODMxMCwgMHgyMGViZWQxZiwgMHg0OGY1NDk5ZCwgMHgwOTg3OGQ3ZiwgMHhkZDY5NzFmMiwgMHg0OGVlMmM5ZCwKKwkweDdmYmYwZGU1LCAweDgxZDFjZjBkLCAweDdhNzlmODdmLCAweDEzOTY4MTdmLCAweDE4YWZkNjliLCAweGRiZjVmMDg4LAorCTB4NzA0MmFmODAsIDB4NjUwMzdjYTIsIDB4ZTgxMWFkNTUsIDB4NTY1MmQxNzUsIDB4ZTk3M2YzMTYsIDB4YzhkZDZiNDUsCisJMHg1OGViNDU5ZiwgMHg1YjFlZTE3ZSwgMHgwY2U3YWUzMiwgMHg4ODYyNTdhNywgMHgyN2Y5MDAxYywgMHg2NTdmMGUyZSwKKwkweDZlOWM3OWRkLCAweGQxM2MzNTRmLCAweGZhNTJmMzBjLCAweDczZTAxM2ZhLCAweDRmNjNlMzUyLCAweDdhMTU3MmMzLAorCTB4YzY0MWI1M2QsIDB4YjUyMjRhNzEsIDB4N2NhZGY2ZTcsIDB4MTgwNzZkYmMsIDB4MjBkYzRmYmQsIDB4NWZmZGMwZTcsCisJMHgwZWM0YmQxMywgMHgzNjM3ZWM3MSwgMHg3ZTQxMTQ2YywgMHg5Y2Y0MDFiZiwgMHhmNDFjZjhjYywgMHgwZjNkYzllZCwKKwkweGY0MDJmZDQ2LCAweDQwODFiYjVjLCAweDIzMTVmY2JjLCAweGUyYTJkOTI5LCAweDVmZWJkZDhiLCAweDY5NmZmMGQ1LAorCTB4MTgzNWY1NWQsIDB4MTU4YjZmOTcsIDB4N2MyYmNlNDAsIDB4MTVmZGMwYWIsIDB4ZTQyYWYzYTMsIDB4ZmM3NGViZmYsCisJMHgyZmJkOTUzZiwgMHhkZmIwM2I0NywgMHg5ZmZmOWMxMywgMHg5ZmY5NDE5OCwgMHgxMGQ5OGEzZSwgMHhhZjM4YzAyMywKKwkweDA3ZGZjMzE4LCAweGE0MGZmNWY3LCAweDZkNWNhMGJmLCAweGJmNTcyMWViLCAweGNkYjU3MjY2LCAweGFmZTc0YTk2LAorCTB4ZTMxYmI2YjgsIDB4NzFmNWMxMGMsIDB4YWE2Mjc5YmEsIDB4MDJjOTM3NDIsIDB4NjI5NmJmYzAsIDB4OGJjMDE4NzAsCisJMHg5OWU4MTVjMiwgMHhkZmI3Y2RkYSwgMHhkOTVjODY5MCwgMHgwZjM5ZTEyMiwgMHhmOWUyNDczZiwgMHgwMjc3Y2ExZiwKKwkweGU0ODZiZjBhLCAweDZlYjdjMjk5LCAweGQ1ZDgzNDczLCAweDgwNTZhYjUzLCAweGU3OTcxZjVkLCAweDI1M2NmYTQ1LAorCTB4NTJjNjg3YjgsIDB4ZjgwYTc2N2QsIDB4MzgzYzhjMzgsIDB4NTdjN2U1YzEsIDB4Zjc2MmZiYjIsIDB4N2EwMDBmZWUsCisJMHgyMjFlYTEyZSwgMHgxM2FjODdlYywgMHhhNTE3ODBlYywgMHhkZDhlYjFkZCwgMHg1YTNjM2FjMywgMHgyYmJmOWNkMCwKKwkweGVmMGMxZmY1LCAweDQxZmI4ZjQwLCAweDdjNjM0Nzg3LCAweDNjODQ2MDNhLCAweGE2M2UxMWQ1LCAweDgzOTA4OGM3LAorCTB4NTcwYzQwZmMsIDB4NWIzZTAwMGYsIDB4Y2RkN2Y1NDQsIDB4NGE3NWZkMmEsIDB4NTUzYTQ1YWUsIDB4MzQ3OTcwZTAsCisJMHhjNTVmNWY5MywgMHg5NWZmN2RiMCwgMHhlMjE1ODVkMywgMHgyZjczYWE4NSwgMHgwMjQ4OTBlYSwgMHg2MDUxNjdlMywKKwkweGY4YzIyZTdjLCAweGJhNGNmNmE3LCAweGRhZmRlOTBhLCAweDA3NmVmNGYwLCAweGZlMTYyYWZmLCAweDQ4ZjVhNzNkLAorCTB4ZWMzMzMxOWYsIDB4MTNjYjFkZjgsIDB4NDYyMjMzOTIsIDB4YjBmOTFmNjMsIDB4NTdmMWJkZGMsIDB4ZmQwMWQ3ZTgsCisJMHg0NmY3YmYwMiwgMHhmZjQwMjVmZiwgMHhmYmRkMGMyNCwgMHhmMGFiZGQyOCwgMHhhNTAxZDBhNywgMHg1NWEyNmI4YiwKKwkweDE3NGY0MWYyLCAweDAyYTM3OWNhLCAweGU3NzQ1Nzk3LCAweDMzNDc0Zjk1LCAweDk3ODBiMDc5LCAweDY2ZjI1ZThlLAorCTB4NjBmY2ZkOTQsIDB4ODFlYzlmM2MsIDB4Y2YwY2Y5ZTcsIDB4N2MwMmJlMjEsIDB4NjdlMWYyMmIsIDB4M2RhZmUxMTcsCisJMHhhZjZjNzZkMSwgMHhlNjAxNzRmOSwgMHg3M2YyZDRhOSwgMHg5ZjNlN2FhYiwgMHhkMWE1ZWViMiwgMHg0YjdjZTY4MiwKKwkweGNhMzRlZTdmLCAweDVhMmJiZWUyLCAweDQ4ZWEzZTc3LCAweDM0YzdkMTBiLCAweGQ5MmVjZjZlLCAweGZmNzNjMjY4LAorCTB4NzgwMmQwMmQsIDB4YmRmZWNkZGIsIDB4YmIzZGU1NmMsIDB4MGE0ZjBkNDQsIDB4NGNkMTE1ZWEsIDB4ZTFmNDJiOGUsCisJMHhjMzI0NjY1OCwgMHg1NWYyZmZhOCwgMHhjODZlZTE3MiwgMHhhYjU5ZjlmZiwgMHhkZDM0NmYzNywgMHg3N2EzMTZjNywKKwkweDA3ZThiNWY2LCAweGYxODJhZjM4LCAweGQ4MzNjYWFmLCAweGM2MjQxZjIxLCAweGRlMjAxNzY1LCAweDdjMGEyNDgxLAorCTB4MzNjZDhmYjgsIDB4MTk3OWQ1MmUsIDB4ZTcwZWM5ZmEsIDB4MGYwNzkwMzgsIDB4ZjgyOTdjNzMsIDB4OWJkMGUwNTUsCisJMHhhZjBkZWI5ZSwgMHhlMjdjMzg3YiwgMHg4ZTVlYmI3OSwgMHg5ZWZlNzMxNCwgMHg1YzVkZmJjMiwgMHhlMDQ1Nzg4ZSwKKwkweDJmNzExYjI3LCAweDU5ZmQ2MTE3LCAweGU1MDVmZTRjLCAweDczYzExNjQ4LCAweDcyNzU5N2M5LCAweDVlOWZlNWU0LAorCTB4OTFhY2JjOGUsIDB4YzJkYTEzMjMsIDB4MGJmYTExY2EsIDB4MWJmMWZmY2IsIDB4NGIxZGEyMTYsIDB4NjNiNzg3MGUsCisJMHgzZDMzNDY3NywgMHg5M2ZhMGYxYywgMHhiMmY3OGJmNiwgMHgzOTg3ZGVmMywgMHhjNDhhNTJkZCwgMHgwZGRhYzliYywKKwkweDU3MTNjYzI2LCAweDM2NmQ5MGU0LCAweGFmN2Y4MWM5LCAweDE2ZmEwNmQ5LCAweDFmNzZjZDdhLCAweGM1ZTcwYzllLAorCTB4OWMwNzQ2NDksIDB4MDM5MjlmNWYsIDB4ZDQ1M2Y3ODgsIDB4ZmE0NWFmMDEsIDB4YzdmYmM3YzgsIDB4MDIyM2M4YzMsCisJMHg0N2VmMTJmMSwgMHg5Y2VmZDA4MywgMHg5ZjIxMzYyNiwgMHg1MDQ2OTkyYywgMHg3OGRlZWU3ZiwgMHg0OTU1ZDIwNSwKKwkweDc0MDA4YTVlLCAweDIzMTc1YTViLCAweDU0ZWM3YjQwLCAweDk0ZTQwMWJiLCAweDk2MmI4ZmIyLCAweDcxYjBjODE5LAorCTB4ZDQwNzA3YzgsIDB4NmYwYWU0NzIsIDB4Y2RiYmZlMTUsIDB4NDlkY2UzNDMsIDB4NDcyMTBjNzIsIDB4MzNmYjNkMWYsCisJMHg4ZGE4YmM3NSwgMHgyMmYxZDVkNiwgMHhmYmUwN2Y1YSwgMHg0NjhlOGJjNCwgMHg3ODgwMWUwNywgMHhhZTZjM2ZkMSwKKwkweDk0Nzc5ODc2LCAweGVhMjhmZjI1LCAweDkxMmFjNGI3LCAweGM1ZDZlNGE4LCAweDRhMWZiN2VjLCAweDJlM2M5NTJmLAorCTB4MzRhOTVhNDUsIDB4ODFjNGQwNGUsIDB4NjA3M2FiNmYsIDB4NTgyYmY4MWMsIDB4ZTM4MGM1NGYsIDB4Nzg3MGMzNGYsCisJMHg3YjU4NDZhZiwgMHgxZmEzYWQ5YiwgMHgxM2U0MGI5NywgMHg5N2U4Zjg4MiwgMHhmYzQyMjU1ZiwgMHgwNjNiOTE0NSwKKwkweDJmZTJhYzdiLCAweGExOTc5MDBiLCAweDAzN2ZkYmYwLCAweGQ3YjU3ZDFjLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLAorCTB4MDAwMDAwMDAsIDB4N2RjZGZmMDAsIDB4ZDU5NDc4MDksIDB4ZTc3ZGYwZDUsIDB4MjRjYjJkOWQsIDB4NzY0MmM5OTMsCisJMHgwM2JiZWMyNiwgMHg0ZWIxYWIwOSwgMHgwNDkwNjAwOCwgMHg4ZDQ0MTAwNywgMHhiMDkwMDkzOCwgMHhkMjkxMDM2NCwKKwkweDIwODE5NmQ2LCAweDJiMTg4YTA2LCAweDBlYjE1NGI1LCAweDQ1NTFmYTE0LCAweGRiMWFiNjFiLCAweDFhNDAxM2EwLAorCTB4YWQ1NjM0MTQsIDB4NjFhNWFmZDgsIDB4ODA4OTFkOTEsIDB4ZTU4YWQzZmQsIDB4N2JkY2U3M2IsIDB4MjY0ZWYzMzMsCisJMHhlNzlmNmEwMiwgMHhjZGNmMGYwZiwgMHhjZjdiZGU1ZCwgMHg3NzNkZmIzZCwgMHg3OTYzMmQ0OSwgMHg5YjE5MjIzYiwKKwkweGVkNTBiMzkwLCAweGNjYzlhOTA2LCAweDgzMWIxNjNjLCAweDQzNjMyZjFmLCAweDA4N2EzZTc5LCAweDZiOTg1OWU2LAorCTB4ZjI2YjYzMjAsIDB4MDFkZTc5NzUsIDB4OWZjNzVkOGMsIDB4YTI2OWZkM2IsIDB4Njc4ZTNlMTUsIDB4MzBkNmZlNmMsCisJMHhiNTMzNDllYiwgMHg3ZmUxZDc2NywgMHgyNjhjNWQ3OSwgMHg2NDlmNTk1ZiwgMHg5ZmM3ZDkzZCwgMHgyNGJmOGY5ZiwKKwkweDRjMzNmZmMxLCAweDJiMTgxMmNmLCAweGUxYTdlMjYzLCAweDcwZmZkZmNiLCAweGRmYzdiNDE4LCAweDU0ZGVjNjU1LAorCTB4ODA1Njg5ZGQsIDB4MTJkY2RjYTcsIDB4ZDhjZWRkZDUsIDB4MTNjN2Y5MzMsIDB4NTJkNDkxZGMsIDB4MjIzZGRmODcsCisJMHhiOTcxNzhjNiwgMHg3MWRlYmRlMywgMHg1NWRlNzk4YywgMHgwZmM4MTZkOSwgMHg0YTNkMTkzNiwgMHg2NGUyZmMzNCwKKwkweGU4ODI2Yjc2LCAweDA2OTQ3ZTBmLCAweDA0MTk2N2M1LCAweDU1NDM3ZmY5LCAweGZlOTc2MzJjLCAweGM1ZjRhM2FkLAorCTB4MzJmMmI4OWYsIDB4N2E4YWZiZTAsIDB4YjQzOTYzOWQsIDB4MTg1MDY4YWIsIDB4ZDFjYzYyY2IsIDB4MTljZDc5OTUsCisJMHg0Nzg1ZDU4YywgMHg1ZmQwNjIwZCwgMHhhNzQ4YmVjZSwgMHgyOTJmY2EwMSwgMHg4MzI5YWY2NiwgMHg4NzA4MDBkMSwKKwkweGEyM2ZjMjQxLCAweGQ0MWI3ZDM1LCAweGQ4OTgzNzU3LCAweGNhNWVjODZhLCAweGUxMTlhYzYxLCAweGQ5YTIzYmQ1LAorCTB4MDc3ZTNmMDAsIDB4MGZhNjdlMWQsIDB4NmJjYTAwY2MsIDB4NjMwYjJlMWQsIDB4ZmY3OGMyOWIsIDB4N2I2NGMyOWIsCisJMHhiNDgzMzQ3YiwgMHhlY2QxOTJkYiwgMHhkN2E3YzAwNCwgMHhmNDBkMTYzMywgMHg2OTgzYzQ4MSwgMHgwMzZlOTJmNiwKKwkweDFmMzA5OWY0LCAweDgwMThmMzNkLCAweDNlYWRkOTRlLCAweGFkZDJmMTE1LCAweDkxNjNhZWQ1LCAweGFkZjQ3MWZlLAorCTB4NGRkYmU2OGMsIDB4NjAzOWQ3NmYsIDB4Zjc4MTNhZmMsIDB4NTQzYjRkOWQsIDB4ZDg3M2UwM2QsIDB4MTU2YWRhOTgsCisJMHhmNzI4ZDJkMiwgMHhhOGYzYzQ1OCwgMHgyYzZhYWFlYywgMHhhOGY3Y2Q4ZiwgMHhhNTlmNjg2ZSwgMHgwMGIzZWQ1NCwKKwkweGU2NzhkODVlLCAweGNjZTUwMmQ4LCAweDg0OGY4MzA3LCAweDE4ZDYxNmZhLCAweDIzOThkOTA1LCAweDI4MjhjZTJkLAorCTB4ZDljNjc1MWYsIDB4MWRlNjAwMzgsIDB4ZjYwYTYyZWQsIDB4MWEzMmQ4YzcsIDB4Y2JhNDVmYmYsIDB4MzhiMmZkODUsCisJMHhmZDAwNTJhNywgMHgyMzA3ZmIwYywgMHg3NjdlYzhiYywgMHhlYzU2OGQzNiwgMHhmMzVjNmYwMCwgMHhjMDFlYzUxOCwKKwkweGUyNGQzMDVmLCAweGZlY2NmNWFiLCAweDczZDdlYzUzLCAweGJhNDBlNzQ4LCAweDczOThlYmRhLCAweGZhZWZiNDIzLAorCTB4MmMzMWJmNzIsIDB4ZDJiZWRmY2EsIDB4Yjc3OGQwYWEsIDB4NDZiOWRkYmIsIDB4ZDg3OWYzNDYsIDB4OWM4ZmRmMGEsCisJMHgwMDY3ZGRlZSwgMHhmMWNmODY3OCwgMHgwM2RhMzNlYywgMHg1MTk3MzNlNiwgMHgxZTJkMjk3ZiwgMHgxMWQyNDc5YSwKKwkweDhiYTYwZTc3LCAweGNmZDQzMTJkLCAweGM2YmUzM2E4LCAweDRiYWVkMDAxLCAweGNhMDdjYzE1LCAweDU0M2Y5YWQzLAorCTB4NTU2OWFmMTAsIDB4NzFkMjBhY2QsIDB4ODI1ZWQzNjcsIDB4M2Y3OWI1MzcsIDB4ZWExMTgxNGYsIDB4NzIwMWRkMjAsCisJMHg4ZjMwMTc1NSwgMHhjZDFkMTZjNSwgMHhhMTQ1YjE2MywgMHg5OWM1ZTU3NCwgMHg3ZmE4MmU4OSwgMHg2YzVlZWFjNCwKKwkweGM3OWZlYTE5LCAweDYyNzcxY2NhLCAweGJlYmZmNDE1LCAweDdjZmI1YmE5LCAweGI3YmMwMjdiLCAweDI3ODg2N2MxLAorCTB4YWI3MmRmZDksIDB4YjI2OWZhOTEsIDB4ZjM4NDdmYjgsIDB4NzJkZTljYWIsIDB4NDc2Zjc5MDAsIDB4NDhhMzlmZDMsCisJMHg4OGUyMWEyZSwgMHg4ZTg3MDliZSwgMHg5NjEyM2QxMywgMHg3OGEwY2UwMCwgMHgwYTg1YTFmZCwgMHg4NWY1YWE4MywKKwkweDIzYTUzMzQwLCAweGRkYjgyNzllLCAweDg4OTkzMThlLCAweGY4OWY4MDZmLCAweDA5MzExYWM3LCAweDhjNjJmMmY4LAorCTB4OTFjNzA2YmIsIDB4ZDkxNDI3ZWQsIDB4YjQ1ZjUwMjIsIDB4Y2Y3N2M1ZTcsIDB4NTk4ZTY1MmUsIDB4ZmJjZjAwM2QsCisJMHg2ZWIyNzc4YiwgMHgxMmY3Nzc0OCwgMHhiYjdiN2JhNCwgMHgyMTg3OGY4MSwgMHhiMzhiMzEzZiwgMHhhNGJiZmIxNiwKKwkweGNlMzhlOWIwLCAweGY5NDI5ODRiLCAweDk3OWUwNjRiLCAweDk1YWJmYWY4LCAweGViMTFlYmUzLCAweDc4OTZjNWE0LAorCTB4ZjAyYjI3OGUsIDB4YmM2MTRiZjEsIDB4N2ExZWIwNWQsIDB4YjNiZmNhZDcsIDB4Y2Q2MTdlMGIsIDB4MWU3MDVmOWMsCisJMHhiYjY0YmZhOCwgMHhkYmRmYTJkZCwgMHgzZDVjZWU5ZCwgMHgwOGNkOTNlNywgMHhkZTExYzhlNywgMHhjM2I3Yzg3ZCwKKwkweDkwZmIzY2YzLCAweGUwOThkM2ZmLCAweDI3Y2UzYzkzLCAweGNmYmVmY2MxLCAweDQ2N2VhMzZhLCAweDg4NjU2OTlkLAorCTB4Yjk4NTJjZjcsIDB4ZDMyZWU5MDIsIDB4YTFhZTEwZDcsIDB4ODlhM2RmYzgsIDB4YjYxZTQwN2YsIDB4NTJjMzc4ZTMsCisJMHg4MDAzNTRhYSwgMHgxM2FjYzcxMiwgMHhkZWM2Nzc1OCwgMHg1ZGE5ZGFiNiwgMHgzZWU3MDhlNiwgMHhkM2FiMzdlNCwKKwkweDIwN2NmMjQ1LCAweDJiZTU0YWMyLCAweGMwN2YzODMzLCAweGZjNDA3ZmY3LCAweDJlZDNjYjA1LCAweDdlMDFhMzk0LAorCTB4N2U0MzhhMzksIDB4OGZjOGVjOGMsIDB4YmNmMDEzYmYsIDB4NjNhNWU0MmQsIDB4NjEzZmVlZmYsIDB4M2FjZDcxZmYsCisJMHgwYzlkMDJhNywgMHg2NWU5MTIzZiwgMHhhMmY4NzRkMCwgMHg4ZmUxMTUyYSwgMHgwMGZmYzA2MywgMHgzNThlNmRhMCwKKwkweGE1MmNlNTA3LCAweDVkMjBhMWNjLCAweDg3NWMyMjliLCAweDIzMGZkNGFkLCAweDQ3MzJiOWJkLCAweGVmODZhZGU3LAorCTB4ODkzYjQ2ZTYsIDB4M2VkOGRmN2UsIDB4MzY2NjY3ZWMsIDB4YzAxZjZmY2MsIDB4ZTExNWZjMWUsIDB4YjZiMDdiMDMsCisJMHg2ZmY0ZjUwOCwgMHgzZDQ0NjlmZiwgMHhkN2YyOTc2YSwgMHgzOGEyMjQzNCwgMHg0OGFlM2Y4MCwgMHhmN2E3ZTBiZCwKKwkweDQxMGJkMjcxLCAweDczZDYwZWY0LCAweGViZjZmNGMxLCAweDAzOWVhZDA1LCAweGY0ZTA1ZDdjLCAweDlmMjI2NzcwLAorCTB4NTIyZjM1YzUsIDB4ZWFkMDdlYjksIDB4ZDFlOGNlYjUsIDB4M2EwODNmNDEsIDB4N2U3MDhhNWMsIDB4MGM1Y2Y4ODEsCisJMHg3YWUzODgzMiwgMHg1ODNlYjM0NiwgMHgwZTFkOTlkZSwgMHg3NmE0ODk4YiwgMHgxYzNiNDVmZiwgMHhkMWRmMTMxNiwKKwkweGFkY2NlYjBlLCAweDQ3YzAxNTA3LCAweDU3NmE4Mzc5LCAweDhmZDUwYTYxLCAweGZmNDg5Y2Q5LCAweDg3MTRlYjE3LAorCTB4NDFhNGU1MDksIDB4NzE3ODdlMjUsIDB4NGJkOTM4NjUsIDB4YmI2N2VmMDksIDB4ZGJiMTA3YTMsIDB4Y2ZmMjE1MjAsCisJMHg4ZWM5ZGRkYywgMHhmMTg4YzY1NiwgMHhmMTg3OTBlZCwgMHhkNjc5NTkyZiwgMHhjNTI3NzU2OCwgMHgxNzkzZTgwNCwKKwkweDQzMDhiZTFiLCAweDY0NGZmNzNjLCAweDYyYzY0ZTAzLCAweDBlZDZhNzBiLCAweGYwMjkwODgzLCAweDUzN2YwOWJkLAorCTB4NmI4M2FmMTAsIDB4NjlhYzE0NTQsIDB4OTUyNjlkZWUsIDB4ZmIxZGQ2ZTgsIDB4ZmU1YWNlMWIsIDB4YmQ3MDBkOWMsCisJMHhjZWI0NmRiYywgMHhmNTM3YzgxZCwgMHgwNWVjNjc1NywgMHhiODIzMmJmOCwgMHhmN2I0YmU1ZCwgMHgzM2U0MmY1YSwKKwkweDkyZjc3ZjU5LCAweDNmN2JkMjYyLCAweDEzMTkyYjA3LCAweGVlZGYxZmEwLCAweDYxZWI4MjczLCAweGQ1M2Q2ODU2LAorCTB4MmE3Njg3MWYsIDB4ODUwMDIzZDcsIDB4N2EzZWU2NTEsIDB4NzBkNDI3ZjQsIDB4MjdmNWFhODcsIDB4N2JhYTM5ODgsCisJMHg3ZjEwN2UwMiwgMHhiZjg0ZTE4ZCwgMHg3NzIwOWVlYSwgMHg0OGU3MDQxOSwgMHhjNWJmN2ZlYywgMHhmY2EwOTJjOCwKKwkweGI2MjNjODBhLCAweDAzN2Y3MDkzLCAweGUyMDc0Nzc4LCAweGFhNmYwZmQxLCAweGUwODQ1NGY1LCAweDVmMGZkNTBiLAorCTB4MGU5MDVkM2IsIDB4ZDE2YWJmZDAsIDB4YjEyZTNjZDMsIDB4YjNkMjA3NzAsIDB4NDg2NGU4Y2UsIDB4ZTE1MWNmN2YsCisJMHg1NWJhMDgxZiwgMHhkNGJiOWUwOCwgMHgxYjg4ZjQzMCwgMHg5MWUyZjdlNiwgMHg3ZjdlMDc1NCwgMHg5ODRhZmVhOSwKKwkweDQ2ZmQxMjJlLCAweDk3OWMxNGY3LCAweDg1MWFkNjlhLCAweGMzNWY3MGY2LCAweDAzMmRiZTk1LCAweGM1NGRiZjQ4LAorCTB4NGU4NzJiZjIsIDB4YmUwM2RjZDgsIDB4ODQ2NmZjZDEsIDB4N2U3Njg3YTYsIDB4OWFjOGZhOTUsIDB4NjE1MGZmNDAsCisJMHg3Y2MxN2U3YywgMHhmZTM0MzRhNCwgMHhmMjQ0MTk0YiwgMHg3YTFmNTBjNywgMHgxYWI3OTlkMiwgMHhhMDcyYmRlNiwKKwkweDk5N2JhN2UwLCAweDk4M2VlNTFkLCAweGFiYWI0NmRlLCAweDZlNDAyNjIyLCAweGFhZWQxNWZmLCAweDljNzBiODQyLAorCTB4Y2YzNDIxOTQsIDB4NzQxZjk4ODUsIDB4NDFhNjY2NzgsIDB4YzMxYmYzODcsIDB4N2Y0YTZlZDAsIDB4YjBlZmZkMGYsCisJMHg0ZWZmN2UyMSwgMHhmZTdkYWZjZSwgMHgzYTBkYWYzZCwgMHgzZmJlNjhjNCwgMHhmODAwNzFjNiwgMHhhZjgwM2FlNSwKKwkweGVhYzE4YzEyLCAweGZiNzljMDhjLCAweDYyZTUxZTg4LCAweDQ4ZTZlNTdlLCAweDYxZjMwYTlmLCAweDVhMTcwY2JiLAorCTB4ZDZlODFlYTQsIDB4NGZhMDdlMTEsIDB4MTllN2MyMGQsIDB4NDZlMjM4ZWQsIDB4ZDIzNWZlZmEsIDB4ZDFmODhkNTEsCisJMHg1ZmQxNWIzNywgMHhjNmFjZjk4NSwgMHgyOGEyMzY3YSwgMHgyZmRmZTcxMSwgMHhmNTA1YjlkMiwgMHgxOGNiNGJmYywKKwkweDU3YTVmM2YxLCAweDRjMTM3Nzk4LCAweDFkN2VmYjc2LCAweGQ2NDZjYmYxLCAweDlmYmVmODhmLCAweDU3MGNmMmVlLAorCTB4M2FmM2M5MjQsIDB4YjlhYjNiODQsIDB4Yjc3YTg3NTYsIDB4NDNhZWQ3YTcsIDB4YjliN2RhN2QsIDB4M2UyM2E3NGUsCisJMHg4NjIyZmY3MCwgMHg1Nzk5ZTRmYywgMHhmZjVmMDBmNCwgMHgzN2VhNTU2ZCwgMHg2ODZmMDdlNCwgMHhhZjQwZWY3ZSwKKwkweDkyZjQ4MWNkLCAweDdjMTZjYjc4LCAweDQzNzg4ZDkwLCAweGJmYWFkMDgzLCAweGUzZjY2MmQwLCAweDUyYzNlODBkLAorCTB4NjNmYjFkNmMsIDB4ZjExZDI1YWMsIDB4ZTlmYWY4ZDQsIDB4NWZkMDJkNWUsIDB4NjdhNzFiYzUsIDB4ZmUyYTVlMjAsCisJMHgxODI2MjI2MCwgMHhkMWJlODdmMywgMHhlNTlmZWZjOCwgMHgyZTY3ZjY4NCwgMHhlODcyYWQyYywgMHgyNTdhOWZjMSwKKwkweDg1ZDkxYmE2LCAweDQ0NmNkNjMyLCAweDZlYmNhMTNmLCAweGEwMWY0MzgxLCAweDc2ZmZhNWNmLCAweDhmOWNkMGM4LAorCTB4YWExYTFmZmQsIDB4ZTc4MDY1YjIsIDB4NWRlMThlMmIsIDB4ZDEzYjA4NTgsIDB4YmZhMTJmZWUsIDB4NDcyZmIwMDYsCisJMHhhZmNmMTFkOCwgMHhmZjczNDU2NywgMHgyMGY2NDZkMSwgMHhhNWExZmRiOCwgMHg3YTYzMWM3MywgMHhhMWRmZGU3NCwKKwkweGJkZDM2MWMxLCAweDkwN2U3ZGYwLCAweDg2MzQ3NDFmLCAweDE4YjZiNWRiLCAweDIxNDE4NzZlLCAweDhiY2UxMTNiLAorCTB4M2Q3OGI3YmYsIDB4Yzg3MTc0NTAsIDB4ZmQwYzUxNDcsIDB4NjQxZjVkY2MsIDB4MmU4ZjgwN2EsIDB4ZmU0N2U2YjIsCisJMHgzNTc2NzI4OCwgMHhmOTcxZDY5MiwgMHg1Y2NhM2Y4MywgMHhlNWNiZjE2NiwgMHhkY2Y4MjMxZCwgMHg3MGVkNzhlZiwKKwkweGU3ZGExZDk0LCAweGU3MTdkZjZmLCAweDFkZGZjMDA5LCAweDlkYjU3ZjRjLCAweDVjNzAzM2FmLCAweDdkMzNlMzQ2LAorCTB4MDdhNDJmNGIsIDB4MDRkOWUzZmIsIDB4YWZmOWE0M2IsIDB4ZjljNzE1YmYsIDB4NzQ4NzQxMjAsIDB4ZGJmNDI0NWUsCisJMHhjMDI4YjBlZiwgMHg1MjVmY2VkZiwgMHhmMzI0N2M0MSwgMHhlNjY2NmRlNSwgMHhlYmM4MGQ4ZCwgMHgwNGI4OGQ5YiwKKwkweDY0OGI2ZjJlLCAweDM3Yjc2ODVlLCAweDdhNDcxMmM2LCAweGEzMjU5OTI2LCAweDVmMTRlOTllLCAweGUwY2Y4OTM3LAorCTB4NDNjZjg5NzIsIDB4YTNhNmNmODMsIDB4Mjc1OWYxNWYsIDB4MWI2ZjcwZmUsIDB4ZjdjZWQ3NmYsIDB4ZDc0ZmMxNGIsCisJMHg3Y2VmZjNmYiwgMHgwYWVjM2VhNSwgMHg4ZDg0NWRmMSwgMHg2MzhhZTlkMywgMHhmN2Y0MTc2NCwgMHgxZWJlOGRmMiwKKwkweGU0ZWQxMGQ2LCAweDRmMTgzMmZhLCAweDhkMmI1ZjZmLCAweGRmN2Y3ZWMwLCAweDA1MGJjYTY2LCAweGZiYTZkZTk3LAorCTB4MjFjYTdlNzYsIDB4MWZjMDJhODAsIDB4NTNiYWE2ZGMsIDB4OWMxZmMyNmQsIDB4YmU4YWY5MGMsIDB4YmFkMWM2NTcsCisJMHhkMDhiZjI1YSwgMHg0ZjMwNzc3YiwgMHgzMDZmY2EyMywgMHhmNzdhNDg3ZiwgMHhmYWRkMDFiMCwgMHgyOTY2NzJhMywKKwkweDMxOGJiNzQ4LCAweDQyMzdjZTc2LCAweDA0N2NhNDFlLCAweDlkMzgzMWUzLCAweDUwZWU2NDYwLCAweDYyYWY4MGViLAorCTB4OThjMzVlMjQsIDB4MjNlMWY0MDcsIDB4ZGY2NDBkMWIsIDB4ZjhmYjVmMGYsIDB4ZjdlMDRjZGUsIDB4ZDYwYzFiZDMsCisJMHg5Y2U0MzBlNSwgMHgzZWE1ZjYxNywgMHgwNjczZjUwMywgMHhlNDBhYWM5YiwgMHgzZDdkZGI0ZiwgMHg1ZjRiZWU1MCwKKwkweDBmYzg1ZDUwLCAweDkyM2MzN2E3LCAweGYzZDIxMzMwLCAweDAwNjViZjIwLCAweDAzNDZlOTQ3LCAweGY4ZDljZjk1LAorCTB4MTU5Zjk1MjgsIDB4NDJmYTVkNzIsIDB4OTdkNDdmN2MsIDB4NGVhZmY3ODcsIDB4ZjljZTNhNDAsIDB4NDg2OTg5ZWEsCisJMHg2YjQ2ZWQ5NywgMHg5NjkwYzFmZiwgMHg2MzFjNTM2ZCwgMHg2ZjNkZjAwMiwgMHhiZjI2OTg3MywgMHhlMGU2Yzc1ZCwKKwkweDk5NWQyNDNjLCAweDQ3YWY2ZWUyLCAweGE2ZDUzZjEzLCAweDFmNzE3NmZiLCAweDA0ZGZkNjlmLCAweGEwYWE3MmZmLAorCTB4MzAyOWM0ZTMsIDB4NTdhMThhZWYsIDB4NzdkZmFmYzgsIDB4YzllYzljMjAsIDB4ZjkyYTkxOWIsIDB4ZmZjMWJlOGYsCisJMHgyMGRiOWRlZiwgMHhkZTk1ZmI5ZiwgMHhhMDlkYmU0MSwgMHg2NzQxNThmMywgMHhiN2E0NWNiMCwgMHg5ZjNjY2M0YiwKKwkweGZjOWViYWZiLCAweDRhOGI1Y2NmLCAweDkxZjY4NmY4LCAweDdiZmVhMTYzLCAweGY0MGZiZGEyLCAweDUzMjFjYTJjLAorCTB4ODQ4ZGQ3YjMsIDB4MGRhMzYzNzYsIDB4ZjdkMGVkMGMsIDB4MTlmMmYzN2MsIDB4ZGIzYmM5ZDgsIDB4MDI1YmM3ZjQsCisJMHhkNTlhMzNlNiwgMHgzODdmNDFmNiwgMHhjYTgyMTk4NywgMHhjZjJjN2E5ZCwgMHhjN2NiNmIzNSwgMHgyY2ZiYjhmNiwKKwkweGFkNjMwZmZhLCAweDc3Yzk3MmRhLCAweGZhYjRkODhmLCAweDczODFkZjYyLCAweGYzMDA5YjNmLCAweDkyYTQzOTJiLAorCTB4N2QyMzdjZmYsIDB4YWZjMjJlZmMsIDB4NWRiZjNhNDcsIDB4M2JiZTBkYjgsIDB4Zjg3MmIwMmMsIDB4NDkxNWU5ZGEsCisJMHgxNDIzNTdjOCwgMHhkM2FjZjE4NiwgMHhlM2NiNDJkNywgMHg2NjVlYTQxZiwgMHg3ZTNlZGY0MCwgMHhlNjM4MTZmYSwKKwkweGRjNTFlN2I2LCAweGEwYjExOWVmLCAweGRmZjA4ZjNkLCAweDdhZmIxZWJjLCAweDhkOWI3NTNkLCAweGVkODIzM2M3LAorCTB4ZmNkY2IwNDYsIDB4ZmU0NmVjYjcsIDB4M2RkMmI3ZTAsIDB4ODM3ZjRhMTYsIDB4NWNlZDg1ZTksIDB4ODllYjA2ZWYsCisJMHhlMTIxM2I2MCwgMHhiY2I3ODYwYSwgMHgwZmIxYTc0ZCwgMHgxOTFlYTE1ZiwgMHg4YzI3NjgxYSwgMHhjM2JlMjc2NCwKKwkweDZkODM3MGY1LCAweDMwZjVjNzY4LCAweDJmODQzMWY4LCAweGFkM2QzMGNmLCAweDZhZGZjMWMzLCAweDIyMDM3NmM0LAorCTB4MDAzOWIxZWQsIDB4Yjc2YjBhZDIsIDB4MTY3ZmIyMDgsIDB4NDA1YjdlZjcsIDB4YjZmZmFhMWMsIDB4OGRlYTFkNWEsCisJMHg0MThjZjhmNiwgMHhlYjkxYTcxYiwgMHg5ZDg0NzdkNSwgMHgxY2ZhMTNhOCwgMHhjZWI0YWJkNiwgMHg0ZWVlMThkZiwKKwkweGM5YjhlM2Q0LCAweDhjOTZjNzQ2LCAweDQ4ZjlmODhlLCAweGNmY2NlZmI0LCAweGJlYWM3ZTk1LCAweDhmYjFmYjg2LAorCTB4Mzg5YTVkNTgsIDB4YTg5M2ViMTksIDB4NWZhMmZiODksIDB4ZDllZGYyOGUsIDB4ZmNmMzRlMWIsIDB4NDIwZDcxNTQsCisJMHhlNzMzZDQzOSwgMHhmNDAxNmRkZiwgMHhmODcwMzZhOSwgMHg4Zjg5ZTE4MywgMHgzMTkyNzZlNSwgMHhiMjA3ZjkxNywKKwkweGQwZThmNjdjLCAweGQ1ODk1YzdhLCAweDY3OWNmYjUzLCAweGZmNDc0ZmVmLCAweDA3YzZkM2VkLCAweDdlYmY1MWQyLAorCTB4ZWRlNzE0MWEsIDB4MTY5ZTFlNGMsIDB4YjBhNGZhZjIsIDB4MmUyMjMxMjMsIDB4MTFjYTE0ZjAsIDB4OWRkYTQxZTQsCisJMHg1NWZiZTFkYiwgMHg1NzI0NWQ0YiwgMHg5ZDNhNWQzZiwgMHgyZTk2NjdkMiwgMHhiNjEzZmFhMSwgMHg5YWRmMWEwYywKKwkweDc3NTc2N2YzLCAweDM1YzlkM2MwLCAweGQ5ODlkOTJhLCAweDE4YWY1NzQ2LCAweDU5YTRlZWY4LCAweDEzODVmMTQ3LAorCTB4YmI3OTkxNTUsIDB4ZDE5Y2IxMjIsIDB4YjNmNjcyN2EsIDB4MDI3OGI2MTMsIDB4NmMyNzdlZTIsIDB4Njc0M2EyN2EsCisJMHhmZDhmOGNmMywgMHg5Y2JkZmE2NiwgMHhiZGExNDRiNSwgMHgyM2Q3ZTc2YSwgMHgyZGI1ZWMxZCwgMHhhYzdmZTMxNiwKKwkweDU1ZGIwMTI1LCAweGI2YmRjZDJhLCAweGI3YzcxZDI5LCAweDJjN2M2NzMyLCAweGY1OTE5N2YyLCAweDBiYTliOTQ3LAorCTB4YjgyOGY2ZTcsIDB4ZTcyYzRhNWQsIDB4MWZhMWJmYzMsIDB4OGE3ZWZkMGIsIDB4OWU4NDJiNzYsIDB4MmYzYTBiYjEsCisJMHhiMWVkMzhiNCwgMHhjOTIyZWZhNCwgMHg4MWI4Mjc1ZiwgMHg3MjhjYmU1ZiwgMHg2MGI4NDc3NiwgMHhkMzEzZDY1ZCwKKwkweDdjNzg1ZDYxLCAweDJhYzViMTZlLCAweGYwYTljM2Y4LCAweDVmYWI4ZTc1LCAweDViZjg4ODZjLCAweDYwOWVmMTY3LAorCTB4NzgxMWRlMzgsIDB4YzkwMzhlMGQsIDB4ODY4MWM2NTQsIDB4YmNmOWYyYzYsIDB4ZTI2YWIzNmQsIDB4MGVmZjE4NDIsCisJMHg3OWY5ZmYxNSwgMHgxYmEzZDcyYywgMHgyYTNjNWJjMywgMHg3YzAzYzNjYSwgMHhkYjI1ZGUzZCwgMHgyYjdjNjBhMywKKwkweDA3MzZiZjI1LCAweGM1Nzc1ZmUzLCAweDJkYTViOGYyLCAweGViODg5ZGNmLCAweGEzNDRlNGY2LCAweDM3MzZlMzAzLAorCTB4ZWEwMzhmMmIsIDB4YzA1ZjdjOWMsIDB4ZDYzODIzYWQsIDB4N2FjMjdiMzcsIDB4Y2QwOTVjMDEsIDB4YTQyMzFjZWUsCisJMHgwZDMxNzE1MywgMHhhYWMyZWRmOCwgMHhhMGRkMjE5NiwgMHg2YjIzMjExZCwgMHg5MTU3Yjg3ZiwgMHg5MjY4NmM4YiwKKwkweDQwMjhmNDI5LCAweDY3NzI4NjFhLCAweDQ1NGY3MjhjLCAweDU1OWIwY2JhLCAweGZhNzE4ZDU1LCAweGZmYmUzMjk0LAorCTB4Nzc3MTU2NzAsIDB4OWM5ZjAxYjUsIDB4YTQzYzJiN2QsIDB4ZTgyMjVjM2YsIDB4YzlkMTk0Y2YsIDB4MzZiM2ZhNjgsCisJMHhhY2FlMDgxYiwgMHg4MTlmM2ZjZCwgMHhmOWI1OWY3YywgMHhhMDEyYmQyZSwgMHgxYWM3OTY4NywgMHhkZjY3ZmU2OCwKKwkweGUyOTVkNzlhLCAweDU4OTg5ZjE2LCAweGVhN2ExMGNmLCAweDFlNWY4Mjg3LCAweDY5ZDg3NDEwLCAweDhiN2ZjZDBjLAorCTB4YWM2ZmJiNDUsIDB4NTU0MDViY2YsIDB4ZTJmOWY1NjksIDB4NWIzODgwZDgsIDB4ZDI2NWY5NDUsIDB4ZWQ2MzkzZTcsCisJMHhmYWYzY2UzNCwgMHg4MGM5MDNiYSwgMHgzMTY3ZTdjZiwgMHhlNjhhMDc4NywgMHhmMTQ4ZGQ2ZCwgMHhiYWM2OWRkNywKKwkweGU0ZWZiOGYxLCAweGE0MzFkMGE5LCAweDdmMDNmZWZiLCAweDdlOGM5MDM4LCAweDYwZmIyY2U0LCAweGJmZGEyM2Y0LAorCTB4NGFkMmY0M2YsIDB4MGU3ZTdmMmMsIDB4NGZmODhjMWIsIDB4NjBhZDNlZjIsIDB4NjE5ZmU2M2MsIDB4N2ZhZjg0YjUsCisJMHg2NWIxMzE2ZSwgMHhiZjdkYjcxOCwgMHgyMTBmZmM2ZSwgMHhjNzRjYmViZiwgMHhjZjA0YmY1MCwgMHhlODMyNDYxYiwKKwkweDE5ZjUzMTEyLCAweGZkMzgyMzc0LCAweGJhNGEwZjUxLCAweDkxMTkwMzAzLCAweDg4NmU5MjFlLCAweGVlOTBlZGJmLAorCTB4YzExYWYyZGYsIDB4MmE5YWUxMmYsIDB4YjZmM2RlZTIsIDB4N2M4ZjFmNmUsIDB4NTM2NjVjOTIsIDB4ZTEyMDRlMzAsCisJMHg3OTNkOTFiYSwgMHhkOWRiZjYzMSwgMHgwZWQwZWY5MywgMHgyMjFiMTJiZiwgMHgwZWMyMWQyZSwgMHg2MTBkODhlZiwKKwkweDJmZWQ4Mzg3LCAweDYzNzczOGIzLCAweGUxZDkxYmJiLCAweDM2ZmY4MmUxLCAweDdmZWQwNmM2LCAweDA4NTk3ZWUwLAorCTB4ZWQ4ZDBkYmEsIDB4MWZkZjBmMTAsIDB4ZTNmZjYyMWIsIDB4ZGVmMGYxNDYsIDB4NDNmZjcyYjEsIDB4Yzk3ZjBmMWIsCisJMHhhZDZmZjVjOCwgMHgyOTNjM2Q4ZCwgMHgxMzc0YmM4NCwgMHhiNWQ2ZWJlMywgMHhjNjdlZDExYSwgMHhmNTIxMjgzNSwKKwkweDUxOGI2MmQ5LCAweDFjN2UxZmVlLCAweDEyNWZiMDFiLCAweGUwNDM4ZmFjLCAweGVmYjYyOGY3LCAweDE3YjdjZGJiLAorCTB4ZTk4OTBkNWIsIDB4NWJlZTgxMTEsIDB4ZGViMGViYmYsIDB4MjljZTMxMGQsIDB4MjJmYjNmODEsIDB4ZjZhNmZiNDYsCisJMHgwYWZhNDYyYSwgMHgxNDFlNWVmMiwgMHgzNzE0MjlmNCwgMHg5MzRmMzhiMCwgMHhiZWMxYmFkZCwgMHgxY2Q2OWRkNSwKKwkweDNlZTQ4M2YyLCAweGQ2YWI1NGQ1LCAweDkzOGI4YzRmLCAweDIzOWY5Y2VkLCAweGQ4OWQ2OTljLCAweDNjMDk3Zjg5LAorCTB4NzBkYmZjYzEsIDB4NGM0NWI4ZGMsIDB4ZjcyMzFmYjMsIDB4M2NhYWUyNjEsIDB4Y2QwYjMxOGEsIDB4NmFmOGEzMTEsCisJMHgzMmY3NThkNywgMHgxZDZiYjQwMywgMHgyMDliMWNjOSwgMHhjZDY4NWQxZiwgMHg5YjZhN2Q0MSwgMHhmZGM0NjhlMywKKwkweDc5MTc5NTlhLCAweDAyZTU3ZTNjLCAweGZkNGU1ZGU2LCAweDc3MzJmOWYwLCAweDE3Y2EyZjM3LCAweDJlMzAyZGQyLAorCTB4ZTFjNzExMTAsIDB4NzJlMzg4ODgsIDB4MWNkMjc2MDYsIDB4OGYwYWUxYzcsIDB4OTI5M2IwMGIsIDB4M2U3NWJhMWUsCisJMHgxYWRhZTg5NSwgMHhkMDA1NGVkYSwgMHg3N2RmNDZkNSwgMHg1MGVmZDc0MiwgMHgzNzcxZWQyZSwgMHg4Y2Y3MWZlNywKKwkweDE5YmUwNWJiLCAweDdjNzM3NzE4LCAweDRiNGMxNGYzLCAweDhmMDRkZmVjLCAweDBmZjM4OTk3LCAweDJjZjgwZjFlLAorCTB4ZjgyNmVlMmIsIDB4ZWUyZGVhZWMsIDB4NTA4ODFlOGYsIDB4YTVkYzVkYmUsIDB4YzQyNzVlMjMsIDB4NmI3N2QwODUsCisJMHg0ODdkNzVmMiwgMHg0NzcwYjM1ZiwgMHgyMzNhYmIyOCwgMHg3ZGJmZjIyZSwgMHhhMDg2NjQ1ZSwgMHgxNzlkMmRmNywKKwkweDJkMjdmMTc5LCAweGRjYjNhNDQ2LCAweDA2ZjA5MGY3LCAweGU1OTExMzlmLCAweDI2NGEwZDE1LCAweGY2NzMzZmFlLAorCTB4YzA3NWEzNWQsIDB4ZDM3ZmM2YTUsIDB4NzllM2EwM2EsIDB4NDJlZTNlMGYsIDB4Njc4MDAzZTQsIDB4Y2VhMDNhYWMsCisJMHg3OTc3ZjIwNywgMHhlYTU2OTE5YiwgMHgyMmZmYjMyYSwgMHg0ZGY2ZTMxYiwgMHg1M2I1ZTYwNiwgMHhlZmI2MzM3YiwKKwkweDdlZmI3OGM3LCAweDYzMzY1NmRiLCAweGQzMWZhYWRjLCAweDU0N2FjNDdiLCAweGE4ZmRjZWI5LCAweDdlZTM5NDY4LAorCTB4OGQ1YjJhNGQsIDB4YmViY2FkZjksIDB4NjE5Nzk5OGEsIDB4ODQ3YTNhNWMsIDB4ZjAwM2Q5OGUsIDB4NjcwY2UzMTksCisJMHhjNjdjMDBmNiwgMHg3OTM0ZDllNiwgMHgyZjllNGViOSwgMHgyNTc3OGRjNiwgMHgzMmVmYmU2YiwgMHg3ZGE2OWJiZCwKKwkweGE2OWZiYjkyLCAweDEwY2U2NTNlLCAweDZhYWQzZTRkLCAweDU3N2RhNjk0LCAweGY5ODFjZmIwLCAweDlhZGRjZjBjLAorCTB4MjY2YmRkZjYsIDB4NmIzZGYyNmIsIDB4M2ZiNGQwMWYsIDB4Y2Q5ZWFhY2QsIDB4OWM3YTc5YzYsIDB4Y2UwMDNkY2QsCisJMHhkZWNlMDI1OSwgMHhkZjM1OGJlYiwgMHgwZGQ1ZDdmNSwgMHhmOTIwYTFmMywgMHhmZmVlMWYxNCwgMHgzMjZjMTZjZCwKKwkweGZhNzNjNDRiLCAweGZhNjllNzdhLCAweDVlNmFmZjNkLCAweDlkZjgwMjkzLCAweDE5Mzg2YjVkLCAweDdjMjE5ZjE4LAorCTB4ZWE0YjdlMDAsIDB4OGMxY2Y2MTUsIDB4NWI1ZWJhNWIsIDB4ZTllMWE3M2YsIDB4Y2U5MDI5OTUsIDB4ZTdjYjZhZjUsCisJMHg4MjljYmVlMSwgMHhkZjJkYWRmYywgMHg4MjNkNzNhZCwgMHg3MWVkOWRlYiwgMHhlMjI4Y2UyMiwgMHg3ZjAzYWMzZCwKKwkweDk3YjhkMjQ0LCAweDk3NzhmMDM3LCAweGM0MWRlOWVhLCAweGIxM2E1YTFmLCAweDc2MmZjOTZmLCAweDQ0YTYyZmMxLAorCTB4ZDk4NGJmMmQsIDB4N2E1MmZjYjUsIDB4MWYzMGU3NzAsIDB4ODhmZjg4ZWIsIDB4ZTQ3YzQxM2UsIDB4NzgwMTdmODEsCisJMHhmODk1Zjg5NywgMHg3Y2I0MzhiNywgMHg5ZGUxNWRmNSwgMHhkYjkxYWYzMSwgMHgzZmY5NmQwZCwgMHhiNWYxYjRlMiwKKwkweGUzZWU5MTdlLCAweGQ0YWViN2E4LCAweGJmNzE1MjJmLCAweDdkZjFlNThkLCAweDU3ZjUyYmZiLCAweDZiYjIxZDA3LAorCTB4ZGIzYWQ3ZjYsIDB4MTcxNzNhNGYsIDB4ZmIxNzU3MTgsIDB4M2Y3MDk3NDksIDB4MTM3NjM2ZjEsIDB4ZmVmYjg5ZmIsCisJMHhkOTAwZjg4NSwgMHgxZjgwMWI3NywgMHhiOTg3MDhkOCwgMHhjYzMwZmY3ZCwgMHhhYzE0N2ZiZiwgMHg3NjBhNjUzNywKKwkweGIyMzhjYmUzLCAweGQ3N2RmZTI3LCAweDU4N2FmODZhLCAweDA4NWM1ZmY0LCAweDkzODdkY2FmLCAweGY5ZTQ3MmU3LAorCTB4ZTdjOTE2MjEsIDB4M2MwMWZiMjksIDB4ZjE0M2YxYTgsIDB4MDIyZDlmZmMsIDB4ZjdkYmFkZDcsIDB4OTZmNWE0MmYsCisJMHhjNGM0M2YzYywgMHg3ZTEwYmZiOSwgMHgzYWVmZTkzZiwgMHhmYzg5MzVmYywgMHg2ZTc4ZjA4MSwgMHg2ZDMxMjNjZiwKKwkweGY5YzQwN2Y3LCAweDNiY2Y2OTJlLCAweGI3ZWU0N2ViLCAweDdiMmE5Njc1LCAweDZjM2ZkYTU1LCAweDliMWRjMjU1LAorCTB4NWU5M2Q4NDIsIDB4ZmQ3MmRmZjEsIDB4MWM0M2E2NzUsIDB4ZTA3YzU3YmEsIDB4MmJkMWViZmEsIDB4MDBhZWQwMDcsCisJMHhiOTYyZmJkZSwgMHg1YWY2MDJjNSwgMHg1ZmViZGJmMSwgMHhiZjExNDQ0NCwgMHhiZDU0MWViNiwgMHhiMmUwYTFiZCwKKwkweDAzNmQxZWQ5LCAweDY5ODQzNjNjLCAweGFiNGM4OGVkLCAweGY0MDNjOWNjLCAweDNkYWY1OGIxLCAweDExZjcyN2U3LAorCTB4NjM2N2RiODMsIDB4MjdmZDgwZmIsIDB4OGZlMzRlZjgsIDB4ZmRjMjFjYWMsIDB4NmU3OGVjYjUsIDB4ZTQ4OGJmZGYsCisJMHg5MTE0YzFmZSwgMHgxNzVhMGNhZiwgMHhiZjcwZDY1NSwgMHhlOWY4MjM2YywgMHg0Y2ZkMDEwZCwgMHhmYjUwYjc4OSwKKwkweDUzMzkxMWE1LCAweGMwOGUyOWUyLCAweDMzMmJiYmQ3LCAweDU2MjdmMjE0LCAweDIxZjkwYTJhLCAweDUzNDdhMjY3LAorCTB4OWNiOGI1ZmQsIDB4NjIzZmM0YzksIDB4YmJlODI5OWMsIDB4NmVkYWZmYzEsIDB4MzhiYjFlMWMsIDB4MzdmYjIzOGYsCisJMHhlNmY2ZjNjNywgMHg0ZTk0ZDFmOCwgMHhiODhhYjc4OSwgMHhmMjFmYjViMywgMHg5Mzg0NjU0NywgMHhhMWFhMzVmYSwKKwkweGM3YTZhNWY3LCAweGI1YWQ3OWYzLCAweDZhMjdlOTMwLCAweDg0ZTNmZWUyLCAweGJmMzhjNGRlLCAweGY5YTNmYjg5LAorCTB4NzFmYzEzNjMsIDB4N2Y2NmE2N2UsIDB4ZjExMzhjNjgsIDB4NzczZTg1N2QsIDB4NTNiYTllYTIsIDB4NzhiM2JkZDAsCisJMHg3NThmYjNiZiwgMHg3NTI3NmUzZiwgMHgxMmZiZjc4YywgMHgxZGZiYzY0MywgMHgwZmRlMjhlMywgMHg1ZTcxZWE1ZiwKKwkweGE0N2Y3MWMxLCAweDJmY2Q4NDQzLCAweGI3YzQ4ZjNmLCAweGQ0NTQ4M2RiLCAweDc3NDZmNTRmLCAweDVhYmJhZTM1LAorCTB4MGVmZjgzNzcsIDB4MmRiYzdkYzUsIDB4ZjAzMDFmYjQsIDB4YWUwNzc3NTAsIDB4YjA2NjU2YWYsIDB4YjdlNDE2YmQsCisJMHg3ZmExOGM2NSwgMHg1YmEyZGY1ZiwgMHg2YmY1MDYxZSwgMHhmNThhY2MzYywgMHg3NWYwMzcyMywgMHhiYjdhZTk1YiwKKwkweDgwNjlhNzAzLCAweDg4NjViMDc1LCAweDhiYWMxZjVmLCAweGQ3YmMyMThmLCAweGM0NmU0Y2I3LCAweGY3MzU4MWZkLAorCTB4YTE5YTFiMzIsIDB4MWI5YjU2NWEsIDB4MDZkMGZlODUsIDB4ZjhkZDcyMTYsIDB4MDliMzkwOTQsIDB4ZDQ1NTdiMzksCisJMHhkZmU4ZjExNywgMHg1M2QzYTA4NywgMHgwZmEwNGU4MiwgMHg4NzlkMjJkNiwgMHhmMGFmYmFiNywgMHg0ZmFlMzhmZCwKKwkweGZhZTIyNTQ4LCAweDFiY2ViZjc0LCAweDM3M2YzZDZhLCAweGYyMWQ3NzNhLCAweGU4NmY0MGMxLCAweDBiNWFjM2Y1LAorCTB4MTE3NWI3ZTcsIDB4ZGRhOGU3YWUsIDB4YjVlZTdlMmUsIDB4NTlkZmVhNTQsIDB4YmEwN2E2M2EsIDB4OWQ3NDExNGYsCisJMHhkZjlmODFiMiwgMHg1ZmFlZDc2MCwgMHhjODlmYTU1NywgMHg3YTg2N2ZhOCwgMHg4YjVlZjRhNSwgMHhhNTQzZTMxNywKKwkweDgyMWUxOTBkLCAweDdhMzhhNWNiLCAweDc4NjhiZWEyLCAweGQyZjk4NWRmLCAweGM2MmIyY2FjLCAweDY1N2Y5YzIzLAorCTB4ZTQzZWE5Y2EsIDB4YmZhZTMyNjIsIDB4ZDQ5NGVjZjQsIDB4ZTNjNzY0MjcsIDB4YjI2OWRmNjgsIDB4MTZiNWI3ZTAsCisJMHgwZDQ3M2YzYiwgMHhmYzAwOGUyOCwgMHhiNjU4NmU5NywgMHg3Y2VmY2YxNywgMHhmYjQ2NmJmNCwgMHhkNmQ0NDc0YiwKKwkweDU0ZDlkODYxLCAweDIxOTJjZTQwLCAweDIxNTllYTk4LCAweGZlZjgyYmM1LCAweDFmYTJiZGQ1LCAweDVjNjFiZmNmLAorCTB4YTlkYzdmYjMsIDB4M2U2OTA3MGQsIDB4NjNjYzBjNDcsIDB4YjRiYTNlMDYsIDB4ZmEzYjNlZTcsIDB4Y2RlMzJiZGIsCisJMHhmYjkzYzcxNCwgMHhmNzU1NDdiMiwgMHhmNDg0NjRlMywgMHhkYTA4MTVhZCwgMHg1NjExMGRmZCwgMHg0M2ZjN2Y4YywKKwkweDgyNDY1ZGYwLCAweGM3ZDIxZjdiLCAweDA1N2M3Y2JkLCAweDY1OTZjMWRhLCAweGEzYzQ3NGE2LCAweDFhOTI3OTdiLAorCTB4ZDdiYTcwMDcsIDB4ZDFlZjM0MmEsIDB4Nzg4YzkzY2IsIDB4OGFlNjYxN2UsIDB4NGY1MGUzYzEsIDB4OTVjZTYxMGQsCisJMHgyODc5ZGYxOCwgMHhkMzk0ODU5NiwgMHg5ZDdjZjFmMywgMHg2MDY1NWM1OCwgMHg4NDlhNjhjNiwgMHgxNzJmZTMxMSwKKwkweGJmOGExNDZiLCAweDAxNWJmZWUwLCAweDk4OGU2N2QwLCAweGY3YWFmOTVmLCAweGVjM2Y4OGEzLCAweDFlMTg2ZmYwLAorCTB4NzMzZmU1Y2IsIDB4MWU0OTRhYWEsIDB4ZTQ2YmNlYzEsIDB4MTlkNThjYTcsIDB4Nzk5ZmEwOTMsIDB4ZGIzOTYwNmIsCisJMHhmMWZkZWM4ZCwgMHhjMDQzZmUwZSwgMHgzYWYyZWY3OSwgMHg1YjI1N2Q2ZCwgMHg3ZjlkMzlmMywgMHg1YmVmZTA2MSwKKwkweGViNjgyZWQwLCAweGU4ZjI5NTNmLCAweGFiYTQwZTYwLCAweDhjYzViMTdiLCAweDBiNDY4NGU3LCAweDUxYWQxNGJjLAorCTB4NjY1ZmE4YWMsIDB4YmY4YzY4YWUsIDB4OWIzM2YyMGYsIDB4YjRmMjA3NTQsIDB4ZThlYjBiYzQsIDB4OGYzOWQzZWYsCisJMHg2OTNkNGRjYiwgMHg2ZWQ5NzAzZCwgMHhkY2VkODJlZiwgMHgyYmZmNWM1MSwgMHgyYzcwZjc3YSwgMHgzZGQ2Mjg3ZiwKKwkweGFkZjFkNzFjLCAweDllMTg1ODlmLCAweDA2ZDYzOTliLCAweDFlYzYxOGZlLCAweGM1MTA2Y2NkLCAweGQwNmNhYzFmLAorCTB4NWEzYjAwYTQsIDB4NjAyNmIwNjQsIDB4MTZjM2RmYmMsIDB4YjdiZTMyMjYsIDB4Nzc5YzBlNjUsIDB4ZjkwZDc5YTUsCisJMHgwN2U4OTU4MSwgMHgxZjkxZjlmMiwgMHg2NzJjNTBmOCwgMHgxNWQ3ZDZkNSwgMHhlYWMzOWYzYSwgMHg5YTA3ZTQwZCwKKwkweGQ2NzgxZjg1LCAweGFlMDA5YjVlLCAweDZlM2Q3MzE3LCAweGRlMmQzOTIwLCAweDY4N2U0MzE2LCAweDIzNWM4YWYxLAorCTB4YWVmMTZmZjIsIDB4ZTA0M2QyMTgsIDB4NjNkODdlMDcsIDB4Yzc4ZTlmOTgsIDB4NDgxZTY0NTYsIDB4ZWI4YjdlODQsCisJMHg5NmFhMWMzMiwgMHhiOGZmNWE3ZSwgMHg1YmE0OThlNiwgMHg0YjRmYmY0NywgMHhlOGExOTNiNywgMHg5NGQyZjQwNiwKKwkweGZmMDgyNGE3LCAweDNkOGJkMDRlLCAweDQ3N2U0YjE2LCAweDdhYjc4MmUxLCAweGNiOWUwMTlhLCAweGVlNzQ2MTU1LAorCTB4ODNmZjMzYTgsIDB4YmVkMWM2YTUsIDB4ZTYxNzVjOWUsIDB4ZGZhZmI3MjUsIDB4Y2FmY2RmNjgsIDB4Yjc0NGExOWEsCisJMHhmZGU1N2E2MCwgMHhiNDcwZTY2NywgMHgxNmFmZWMyNywgMHhhMWVjN2E4NiwgMHhjOWUxZWNlZSwgMHhjMmIwZmU1MCwKKwkweGVhYTFlYmU1LCAweGE3Mjg3OWYxLCAweDZmNWMwOTU5LCAweDY2MTRiN2JlLCAweGZkZWM2NDY4LCAweGVjZTY2NmE1LAorCTB4NGIwN2Q4YzUsIDB4NjhmZjk0YWQsIDB4M2ZlNTIyNjksIDB4ZjRhNzZhNWUsIDB4Mjg3ZGE1OTMsIDB4NjhlMjI5M2QsCisJMHgwMTgwY2U1MiwgMHgyNTQ3NWY4OCwgMHg5NTFhZjk3MCwgMHg2Y2RlZTIyMCwgMHg4Y2FhMjI1MSwgMHgzMDdjZmZiYywKKwkweGExYzU2NzU0LCAweDRkOGMyN2QyLCAweDI3MWVlYzYzLCAweGRmYzAyMzIwLCAweDA0NmY3ZTk5LCAweGRmM2RiOTEyLAorCTB4NGI4ZWIwNjIsIDB4OTU3MWZmNDQsIDB4ZDhiZWZhNDIsIDB4M2RhNmJiNzUsIDB4M2M0NjI1ZjgsIDB4NjRmYWNkZmYsCisJMHg5Y2U5Y2JmYSwgMHgxOTM4ZGQ5OCwgMHhmY2ZlZjBmOCwgMHg2OWZiNGQ1OCwgMHhmYzlhMjkzNSwgMHhjZDNiMDRlNCwKKwkweDc3NWU1MjdiLCAweDg1MDNmOTRkLCAweGEyZjkzNWZkLCAweDllMDI0MDM2LCAweGY4ZGIzMDJmLCAweGI3ZDhhYWZlLAorCTB4ZDdjNmNjNjcsIDB4ZjZkZTU2ZWIsIDB4MmVmMGQ1NmEsIDB4YWY3ODA3ZGYsIDB4N2Q1MDMyMWUsIDB4NWQyNDNkMzAsCisJMHgzMWQ3YWQ2NywgMHg3MzM2ODAzNywgMHhmYTBkY2MzZCwgMHg5MzNiNTkzZCwgMHgxMWZjZWFlNCwgMHg5NWZkZDkwYiwKKwkweDFkZGYzMmRiLCAweGRiNjNmOTAxLCAweDdlYmZiNDBjLCAweDVhZWM0NTZjLCAweGI2M2UzZmRjLCAweDQxOGEzZTJkLAorCTB4MzJhOTVlZWEsIDB4N2FjMWZhMWYsIDB4ZTgwNTkxYWIsIDB4Y2IxNWRjYjcsIDB4OTE1NmZjZTgsIDB4Zjk0MGU0ZDcsCisJMHhmOWVmZGEyZiwgMHhkMWRiY2M5NSwgMHg1MTIwNDQxZiwgMHhiZDU0M2UzZSwgMHhlN2U4ODUzZSwgMHgxNGJlZmMyNCwKKwkweGY5MDJkZGU2LCAweGYxYWZhMDMzLCAweDE2Y2NmOGM4LCAweDg1MTlkNzBlLCAweGQ5ZmNjMGFkLCAweGZhZjViZmIwLAorCTB4YjE3MWMwM2UsIDB4ODc0NGI2YTAsIDB4NTBmNTAxZWIsIDB4MWRjYmU5M2MsIDB4MmRiZTQzMmEsIDB4ZmRhMDYwNWMsCisJMHhhOTFmYjliYiwgMHg5NGNmMzExYiwgMHhkZTljMjkyMSwgMHg2NDQ3OWQyYSwgMHg3ZmE4OTkyZiwgMHgwMjFjMGFkNiwKKwkweGQ2ZmQxNmVkLCAweDc3ZDY4OWI0LCAweDBmNzdlNDRjLCAweGZjMTZhZWY0LCAweDI2NzQ3Yzg5LCAweDA4NjMzOTg2LAorCTB4M2RlMDg1NTgsIDB4NDZmYzdlZjcsIDB4ZDNlM2Y3YWMsIDB4ZmRlNzA4M2IsIDB4MzJiNWRlYTUsIDB4NWNlYmY4MDEsCisJMHhlOTEwNzc4OSwgMHg0OWUyYzdiNSwgMHg3ZWYxODJhZSwgMHg5NmY1YzhkMiwgMHhmMTQwZTUwNywgMHg5Y2JmNGJlYiwKKwkweDlkM2UyNzJkLCAweDM4MjQ3MDY5LCAweDI1NjU1ZjQ4LCAweGI5M2FiZWExLCAweDk4ZTc0MGM2LCAweDM1MTlkZTk5LAorCTB4M2IzZmQ2ODksIDB4MzhlNThmODgsIDB4NzFmNmY1MjcsIDB4OWFjOWRmMDgsIDB4OTZmYjg2MGMsIDB4ZjI1NDZiYzUsCisJMHg3OGZmOTAwNywgMHhmZmU3MmY3YiwgMHgxYjM3NTVhNywgMHgyOGQ2ZmQwZSwgMHgyM2E1ZDY2ZSwgMHg2MGIyM2NkZiwKKwkweDlhNjM5ZDM4LCAweGMxNDFkNjIxLCAweDkwMzNlMDdhLCAweDdmMmY3NzU1LCAweDdlMWVkZTdlLCAweGI1NjU4NmNlLAorCTB4MTgxZGVmZTgsIDB4N2MxNThmMzgsIDB4YmZkZTQ0YmMsIDB4ZDY1MDA3M2MsIDB4ZDE0NzRmZWQsIDB4ZDRkY2JlZTUsCisJMHhmMGVkMWEzZCwgMHhlMjU1MGZkOSwgMHg2YWRkYjNiMywgMHgzZDAyMjU4NywgMHgwZWY2ZTgyZiwgMHhjZmU0M2VmYiwKKwkweGU5NGU3ODE3LCAweGI4NTRmZjIxLCAweGFlMDI2NzdiLCAweGQyNmI3NDU3LCAweDNlNzg2ZTk1LCAweGRiZGFjNGY2LAorCTB4YWY3M2JiZTEsIDB4ZTYyNDFjMTgsIDB4N2Y0OWUyNGIsIDB4NmU2OTdiY2MsIDB4OGVmM2MwZDcsIDB4MmY5N2Y1MWQsCisJMHgzOGJmZWY5OSwgMHhlN2MwMTQ5MywgMHgzOGRkN2I3YywgMHg3NzVjMDBlYiwgMHhlMjFkODRiYiwgMHhlNmUzYjFmOCwKKwkweGJhYzVlMDJhLCAweGMzNDNjMTRlLCAweGNiNTBjNGVjLCAweDNkNzczYzZhLCAweDMwMjRjNDEzLCAweGVjNDI3ODRlLAorCTB4N2ExMDFmOGYsIDB4MTEwOWZhNDUsIDB4YTY3ZTc4NWQsIDB4N2IzN2YzOGUsIDB4MGRiZjIxNTUsIDB4YmZmYTM0N2UsCisJMHg5NDRmOWM1MiwgMHhlYmVhNWY3YSwgMHhmYjRiNTYzMiwgMHhmODEyNDdjMSwgMHg4YWI5YzYzOSwgMHhlMDU1ZGE5NywKKwkweGE4YTgyZWNlLCAweDQyMGYyYjEyLCAweDc5MzU2ZDk3LCAweDk3ZDQxOWJkLCAweDQ4MGZkMDM1LCAweGZiZTc2MmVlLAorCTB4OWU1N2M2NDMsIDB4NjUyZGI2NDUsIDB4NDE3ZTdjY2QsIDB4YmMxOWNlZWQsIDB4MWQxOWNkMjUsIDB4NzU4OTRkZWQsCisJMHhmNTFiMGFlMywgMHhmYzYwNzA2ZiwgMHg2OWM4NTRhNCwgMHhmNWUyYWQ3OSwgMHhkZDkwNzlmMSwgMHhkOThhZjE5NCwKKwkweGRiMDY2ZWMyLCAweDI4ZjYwZWE3LCAweDBlY2QwZWM4LCAweDU2YWNiM2IyLCAweGRlMDE1NzZiLCAweGMyNDcxYzQ4LAorCTB4MmJhNzBjMWIsIDB4OTg3ODQyYzIsIDB4YmRhMTcwMDcsIDB4MGY3YjcxMmQsIDB4MTViODI0NGMsIDB4MDNiMjUwMDcsCisJMHgzNWNjYTUzYywgMHgwMWU3MDYyNiwgMHg0NzdiM2VmNSwgMHhkNWU3ODJmOCwgMHhjZjMxNWUwMSwgMHgxYzRiYjg2MCwKKwkweGZmNzBmYjlmLCAweDUxODdjZjE4LCAweDFlNjgyOWJjLCAweGZlYzExZTkyLCAweDg5NGJhNDlhLCAweGE0YjdlMzg3LAorCTB4N2U3YTIxNDEsIDB4MzIwN2VlZGEsIDB4N2U0OTFiOGEsIDB4OWQ1MDA1ODEsIDB4NDRkNzdiZjYsIDB4ZWJhNTY3ZDQsCisJMHhmODY2ZmY0MCwgMHhkM2YyNDdmOSwgMHg4NTE3NTYzYywgMHg3Y2MxNTJmYywgMHhiZTUwOTMyYiwgMHg0NmQzNzU3YywKKwkweGUxYmVkZmEyLCAweDQ5Y2EyMzdkLCAweDUzZDdjZGExLCAweDVjMjg4MzE3LCAweGI0YmNkM2ZiLCAweDEwNDRmNTgwLAorCTB4ZDc0NDZmOWUsIDB4OWMzNzhhNmYsIDB4YmRjNjVlOTUsIDB4MzdiMzRmMDAsIDB4NDFiMGNlYWIsIDB4MWNlMjc2OWEsCisJMHg2MGU0ODc5MSwgMHhjNDYzYzc4ZSwgMHhiMTFjYzZmOCwgMHg5YzExYmZlZSwgMHg2ZTdlN2E5NSwgMHg3NmYwODZmYywKKwkweDViN2QyN2UyLCAweDY4YmFmM2I4LCAweDlmYmY2MmZkLCAweDk0M2EzM2Q1LCAweGFmZjc2YTllLCAweGRmZmFlYzgyLAorCTB4MjE3ZTNjMGMsIDB4YmQ1NWYxZjUsIDB4NTAyNWUyOTMsIDB4MmFhZWZjMmUsIDB4MDc5YjhmMmIsIDB4MmNiNGYxZTksCisJMHhjMjI1ZTNkMiwgMHg0ZTcxY2JhZSwgMHhmMTQ5ZGZhZCwgMHhmNzY4ZDliNywgMHg1ZDNmY2EwMywgMHhmZWUyOTNiNywKKwkweDQ3NjY1N2M2LCAweDZhN2RmZmExLCAweDc4YjVjY2ZkLCAweGI2ZDRlYmJlLCAweDRiZTc2NDk5LCAweGRlNzY5MzlmLAorCTB4MWZmNDBjNmQsIDB4YmQxN2Q3NzIsIDB4ZGZlNDYzZjgsIDB4OWYxNDYxYWQsIDB4MTZlZmQ5MmYsIDB4YWJkMDFlZWIsCisJMHg5ZWJlY2VkMCwgMHg4ZWI2NTFlYiwgMHhiNDUyZDVlYiwgMHgxZWM4MDM4NywgMHg4Yjc2YzZmNiwgMHg1MWJkZGM0YiwKKwkweGM5Y2EwMjBlLCAweGU5OWUyZTRlLCAweGU4MWVkZGZlLCAweDExY2JmMTc3LCAweGMyYTEwZjBlLCAweGRmOTFkM2VhLAorCTB4M2RhMWY1NmUsIDB4ZjFmODVmMmMsIDB4MGVlNzNjNTEsIDB4MWZhM2ZmZjYsIDB4ZDkwZmZiNDgsIDB4OTJmNzdhOGQsCisJMHhjMjZmMjgyZSwgMHgxYmFiOTdlZSwgMHgyN2U4YWRkMywgMHg1ZmYxM2IwOCwgMHgzNDM5YmZjMCwgMHhmZTEwODdmZSwKKwkweDAxZmYxMThiLCAweDZiYzcyMGZiLCAweDA2Njc5ZTM4LCAweDFhYzRmZmUxLCAweGRiOTU5NzRlLCAweGZhZTE0N2JhLAorCTB4Nzc0ZDc4ZjEsIDB4NmY4ZWIzZjIsIDB4OWZmODQ5ZWIsIDB4Y2ZmMDFhYjUsIDB4M2Y1YTVmZTMsIDB4OGZmMDA2YWIsCisJMHgzZmM0MDhlYiwgMHhkZmJjNWJjMCwgMHhlMGVmZjAyZSwgMHg3OGUxYWZmOCwgMHgzYTc4NmI2NywgMHgzZDllMDNhYiwKKwkweGYxNjE4ZTc0LCAweGY0MGU0ZGFmLCAweGY5ODRjZTFiLCAweGIzM2E5ZmM4LCAweDAxZDU2NTVkLCAweDgzZjQ5ODdlLAorCTB4YmZiNTYwYmUsIDB4ZTI0ZDdmNDIsIDB4ZTZhZjZlN2YsIDB4MGE3ZmE4NDEsIDB4MTQ1M2ZlOWYsIDB4NzZlZTYxZDIsCisJMHg4MGVmYTQxZSwgMHg4MmVjZTY3ZiwgMHhmYzdmYjhmZSwgMHg5NWU5YmY3NiwgMHg3ZTAxZjEyZSwgMHhhOWQyNGRkMywKKwkweGQ5MThiOTgyLCAweDFkM2Y4NmM1LCAweGUyODM3NWMxLCAweDc4NmQ0Zjg0LCAweGQ3ZGM0NjhmLCAweGQ3ZGVkN2E4LAorCTB4ODUxOTMzYzAsIDB4MzgyZjhjMzYsIDB4Mjc4NDY2Y2MsIDB4OGExZWY4MzUsIDB4ZjkxYzYxOWIsIDB4OWYzZjNkOWYsCisJMHhiY2U0OTBiMSwgMHg2ZGJlNzM1NSwgMHhiYTE5ZjMyMiwgMHhhNzU4ZmZhMCwgMHhmMmM2ZmRkMCwgMHgzOTUxMzk0NSwKKwkweDU1ZDRlMzBjLCAweDJlZTljNzA0LCAweDc4ZmNlNjhhLCAweGZmMjNhYWI5LCAweGZkYzhjY2IxLCAweGY5M2ZiOTQ4LAorCTB4ZGUwZmYwYWUsIDB4MjVkN2MyZWQsIDB4ZDJiMTc1ZWYsIDB4MThjMjk3NzcsIDB4MTY0YjgxZDksIDB4MjNlZjE3YTMsCisJMHgxMTJhN2FjMCwgMHgzMWVjZjdjNywgMHgyMjhlZGQxMSwgMHhkNTdmODA0YywgMHg2MDM2ZTIyOCwgMHgxZjRmOTEwMiwKKwkweDFmNGY5YzY0LCAweDM4YTI2YzhjLCAweDVlNTRhYzM5LCAweGQwZjhiYjQwLCAweGZjODM5MzEyLCAweDhhNjhiOGRhLAorCTB4ZjQyMDNlZDcsIDB4MmI5MTgzZGQsIDB4MWUxZjY4NWQsIDB4MzEzYTM0OGEsIDB4NzgzZDdlODUsIDB4MWEzMGNlODgsCisJMHgwZGYxODc4NiwgMHhhZmJhNDZjOSwgMHg3OTZlNjg1MywgMHgwZmJlOTcwNSwgMHhkNDc4OWUyNywgMHgwNmRlYTAwYywKKwkweDU1YzYzN2VlLCAweGQ3NWRkN2UwLCAweGM1ZDIzYjYzLCAweDljNmQxZjRmLCAweDc0M2MzMmE3LCAweGUwNTVhM2RjLAorCTB4MjkzYTcxNGIsIDB4YmU4MjYzOWUsIDB4MmI4ZTAxYzMsIDB4ZGNiMTJmNjgsIDB4OWRmMWU1NmUsIDB4OGIyNzQwMGQsCisJMHhlNWMxYmU5ZiwgMHgwM2Y3YzNjYywgMHhlMzVjZjBjYSwgMHg2NDE5YzYyOCwgMHg5MzVmZTEwNCwgMHhmYWYyMzMyZiwKKwkweDI2YWZjNGYwLCAweGVjNjZjYmFjLCAweDEwM2VjY2NmLCAweDNhODY1NmU5LCAweDQ1ZjdkNzA0LCAweDk3OGM1ZWQxLAorCTB4MjVmMTgzZGYsIDB4ZTI3YWE2MWIsIDB4ZTY3YWM5OTcsIDB4MjZiNGYxZDEsIDB4ODljY2NmMTIsIDB4ODE0NGQzNzgsCisJMHg5ODIzYTljZiwgMHhlZWYwMWEyZiwgMHg3NzhkYTgzYiwgMHhmOWQzZTdkZCwgMHhlZjdlMDM3YSwgMHg5MTFhZmJkMSwKKwkweGJiNjY3NTNmLCAweGI4ZTMwYWMxLCAweGI4MjE5NGYyLCAweDdlNWIyOTJlLCAweDI1YTZmMDczLCAweGE1ZDdmMzlhLAorCTB4Y2ZjNzVlNDIsIDB4ODBmZWI1ODUsIDB4MDQxZTIxYzcsIDB4Y2RiYzQ1NjEsIDB4ZWFmZGIzZDAsIDB4ODgwN2NlMTAsCisJMHhkZDliNGE5NywgMHgyODE2ZWQ0MywgMHg3MTk1MGYxNCwgMHhjMWZmNDkzNiwgMHgxZDIwN2RkMCwgMHg0MWYwMTQxZiwKKwkweGY4NTEzNTNmLCAweGJkMzQzMWJkLCAweGY1Y2EyNmZhLCAweGFiYWQxZDczLCAweDliYjkwYmU3LCAweDliNmRlNTJmLAorCTB4MjdjNmRlNTYsIDB4ODJiZGE5ZGEsIDB4ZWRlMDMwN2UsIDB4MjY3NjkxNDEsIDB4ZmY0NGUzMTcsIDB4NWNiOTEyZTMsCisJMHg3OGUyZGQ2NCwgMHg5ZDM1YjIyYywgMHg3OTA4YjdjZSwgMHhmZWYxMzcyOSwgMHg4OGY3ZjhlNSwgMHg4ZGEyNGM3NCwKKwkweDAwZjA5NWZhLCAweDdlYzcxZWJmLCAweDkwMDFhMDc0LCAweDU2ZDY0ZjVmLCAweDg3MzQ3ZjkzLCAweDMzYjVjNDA1LAorCTB4NWYyNGVkZmMsIDB4ZWJiN2NjNzcsIDB4NGM3NWRkMTEsIDB4MTBiM2FkOGQsIDB4YzJmN2NhZjUsIDB4MWY0N2E4MWMsCisJMHhhY2Y1ZDYzNCwgMHg0ZWQ4ZWM4YSwgMHhiMjE0ZGJlZSwgMHgzZDIzMDM2NiwgMHhjMjYxZTIyOSwgMHgyMzU1OGNmZSwKKwkweGExNDA3Y2U5LCAweDVlMGZlZmMyLCAweDc0NzhiMWNhLCAweDMxYTcxOGQxLCAweDYzMGI2OTEwLCAweGYxM2YzYTE0LAorCTB4ZjI3ZmIxMzcsIDB4ODllMmY0NTAsIDB4NTE4NWQ3MjgsIDB4MzNhNjNkNDYsIDB4ZmJmNTJiNTgsIDB4ZThiNzZiNzcsCisJMHgzM2RlMThmYiwgMHgwZTc2MzE1NiwgMHg3N2M4OGYwMywgMHhhOGQ1YjhjMiwgMHg4ZDdlNzg3NywgMHg0YWEyOWIzMywKKwkweDIxYzc3ZjIyLCAweGRlZTFlMDI3LCAweGNhN2Y0MDZiLCAweDA5ZGYyZjdmLCAweDRiN2E1ZmZkLCAweGU5M2JiM2Q0LAorCTB4MGI4ZjRiZmIsIDB4ZjJlNGY2M2UsIDB4N2Q2NWNmZmMsIDB4OTJhZmNmMWUsIDB4ZmYzY2Y5ZjUsIDB4ZTQ1ZmVjYTQsCisJMHg1ZmFhMGU5ZiwgMHg0YmZmNTQxNiwgMHgzZWJjNWY5ZSwgMHg3ZTgzZGYzZiwgMHhkMmNlNjhlYiwgMHhkMjE0YTM4NSwKKwkweGJlODQ3YjUzLCAweDIzZWU1YzI4LCAweGY2ZWExNmZjLCAweGYzMzQ3NGYyLCAweGRjNmViMmU5LCAweDZiYTI1MzZlLAorCTB4ZDUxZmRhMGYsIDB4ZjY4MmQyNzIsIDB4Mjc2NGQ1ZjcsIDB4NzA0ZjlmZTUsIDB4NzVjNDRiMmYsIDB4NjNjNTI0ZDQsCisJMHhhMWZiN2Q0NCwgMHhjNGMxZWM5NywgMHhlZDFmY2U0ZSwgMHhmOGUzYzJlOSwgMHhiZmEwOTI5YiwgMHgwNWZiN2VhMSwKKwkweDhjNGVhY2ZkLCAweDFjN2VmNWJmLCAweDgwYWUxYzQ5LCAweDI2Zjk5ZTdlLCAweDIzYTdmY2YwLCAweDQ5YmUxYjNjLAorCTB4YjU5MmIzM2YsIDB4NDg3ZjQ4ZmQsIDB4ODZiZTc1NDksIDB4ZTMyNzYzZjMsIDB4ZTY0NWU3MzQsIDB4OGQxMWM0ZmYsCisJMHhlNzg2MjdmMSwgMHhmM2Y1MDA0NSwgMHg2N2E1ZDc5NywgMHg1ZmYzZmY0MiwgMHgwNGJkM2Q3ZCwgMHhlNzYxMjVmZCwKKwkweGNjNzRkYTJiLCAweGRiMzRmNzg5LCAweDFiZTdhNTE4LCAweDdkZTIzMTNmLCAweDhkNWQ4YWIzLCAweGFlZDA3MWM2LAorCTB4MDBkY2QyMTIsIDB4OWMwNGNhYjgsIDB4OTNmNGU3NjAsIDB4ODM3M2VjMDMsIDB4M2Q4YzFiZDAsIDB4NWYzN2Y3Y2QsCisJMHg3YTQ3YWIzZCwgMHg5ZGQ1ZDdjZSwgMHhmNmVkMGU3YSwgMHgzZWU0MjUyOCwgMHhkZGYxNjZjZCwgMHgxN2NlNGVkMSwKKwkweGU4N2ExNWVmLCAweDExYjM5YTZhLCAweDhjNmJmOWU3LCAweGI3M2U0MDIxLCAweDYwZmI5M2JhLCAweDg1NWYxYzQ5LAorCTB4MWNjZGVlYzIsIDB4MDFkYjMxNjYsIDB4ZTQzZjQzY2YsIDB4MWIyNTU0ZmIsIDB4M2M2MDg2MzIsIDB4ZDE4NGNkZjgsCisJMHg2ZDdlMjRlZiwgMHhjNzk1YjUzYywgMHgzYzc4MWI1MywgMHhiY2Q2ZDBiNSwgMHgzMzM3OTQwOCwgMHgzMWFkOTUyNiwKKwkweDg0ZDhjMWRmLCAweDAzMzk0ODVmLCAweGYzNmY4NTkxLCAweDlkNWYzMjRjLCAweGM3OWIyNjNmLCAweDc2N2YzMGJiLAorCTB4NTA2YjYzZmQsIDB4YjljMjlhNmUsIDB4ZjBkMGZiMWYsIDB4MTdhOGUxODEsIDB4NzQyMjMyNWEsIDB4MzdlNzkwNTYsCisJMHg0OThjOGJlMywgMHg4ZWZjYjE0MywgMHg2MzllNTg3MSwgMHgyMjJhZjRiMiwgMHg4YmUyMzJmYywgMHhjNzVkZTMzNywKKwkweDNkYjA1ZjkwLCAweDQ2ZGM0MWM2LCAweDMwN2RmYzVmLCAweDJhZGJmNzBmLCAweDBmNzVhNzlkLCAweGRhODc3MDhhLAorCTB4YzA4N2ZhNzcsIDB4NGFjOTMxYWIsIDB4MTk5MDEzNjksIDB4ODcwOTE3ZmQsIDB4ZjlmYzFmMWMsIDB4ZGZkMGNkNDUsCisJMHg4MzQ5ZTVjOSwgMHg5ZjcxZGI1NywgMHgzNDkwYzcyNSwgMHg0NjdlM2ZkNCwgMHhlMDcyZmI4MiwgMHhhYzc1MjdmOCwKKwkweDZlMjkyZTE3LCAweDAyNGI4ZTE2LCAweDVkZWUwMzBlLCAweGQ5NWRiZTAzLCAweGFjMDY3MzJhLCAweDg5OGYyNmYzLAorCTB4Y2RlZmU0ZDAsIDB4YzBjZTY1OGYsIDB4MjliZGVkMzgsIDB4YzJmNGZjOWEsIDB4MGZmNjlhZWUsIDB4YTlhZmVhY2MsCisJMHg2NzM1MzAyZiwgMHhiMWY4MDU1NSwgMHgxZTQ5ZmI5ZCwgMHg2MmQyYTc4MiwgMHhlZTdmNDcwOSwgMHhmYzVmMGRlZiwKKwkweGZmZjQ0MWU1LCAweGY0MGVhYjM2LCAweGQ5ZWVlNzU1LCAweGExZGI5N2YyLCAweDRlM2M2NWQ1LCAweDNiNDdmMTQ1LAorCTB4YzljZWNiYzUsIDB4YTc3YTI4ZjMsIDB4ZTg1ZjcwM2UsIDB4ZjNhNjZiMjIsIDB4MDNlZDlkM2UsIDB4N2NlZTc1YzksCisJMHg3NzNhN2VlYiwgMHgwM2VmNWRmNiwgMHhlYjEyNGFmNSwgMHgwODZjMjFkZCwgMHg1NWNiYzNkYSwgMHhhZWJjNTExZiwKKwkweGVmY2Y5MjIyLCAweDhjYzdlYmUyLCAweGZiOGEwZmI4LCAweGRmODFkNzhhLCAweGQxMGZjMmVmLCAweDUwZjM2YzNmLAorCTB4ZmViNzNiM2MsIDB4MWQ5YmVkMTgsIDB4YmE3YWU0NDgsIDB4MWU4MTc1MjIsIDB4NDI1NTFkZWYsIDB4MWM2ODc2OGEsCisJMHhlMDY4YWJlOCwgMHgzNjQ2ZTY5NywgMHhiYmVlMTc3MCwgMHgxZmI4NTg2NiwgMHhiMTk5MzZkZSwgMHgxZTJiZTQ1OCwKKwkweDg4NGE2OWRmLCAweGYzZDc3YmExLCAweGJjYThmMjZiLCAweGZhOWMyZGEyLCAweDFlNmQ0ZjdmLCAweDVmMDllNzQ3LAorCTB4YTFmZjY4NTMsIDB4ZTVhMWU1MjAsIDB4MjliODdlNzgsIDB4MTFlMDMzZGMsIDB4NzdlMGI3MTgsIDB4ZGUyMWU1NzcsCisJMHhmM2YxNzYyYSwgMHg5ZmVhMDViNSwgMHg1YTQwMTZiMywgMHhkZjQ3OWI1NiwgMHg0OWFjYTgxNywgMHg0MjYxN2YwMSwKKwkweDA1YmZiNzJlLCAweGFmMjFmMzY4LCAweDQ2YWNiMzBlLCAweDdkMWFhYmJiLCAweDNkNDc5ZWJkLCAweDllOTBiNDYzLAorCTB4ODA3YjZlODksIDB4MzM2Y2FmYzYsIDB4MjRmN2Y3ZDMsIDB4ZDBkNzdmNzEsIDB4ZGIxYWUxYzIsIDB4Yzk3MmEyZTYsCisJMHhiYTkzNTMwZiwgMHg4NjBmZDY2OSwgMHg3YzdhY2RmOCwgMHhjMmQwYzM5NywgMHg2ZGRkZmRhOCwgMHhmMzk1MjhmZCwKKwkweGFmY2ZiYjdkLCAweDIxYWUzZWU5LCAweDE0YjhlYWZlLCAweDcxZGJmNzk4LCAweDkwZGM5NThhLCAweGE1N2MzZDIwLAorCTB4MGIzNDc4NmEsIDB4YzdkYWE3YTEsIDB4ZjRlN2UzNjksIDB4ZGNmYzZkNGMsIDB4NzM4YTYxNWUsIDB4MzFjMDEyN2UsCisJMHgzZDE2YjFmMSwgMHg0OGIxMDdlZSwgMHgzNWYxMTViMywgMHg3YjYwYzQ3MSwgMHhhOTdjODA0OSwgMHgyMjM3ZWY3YiwKKwkweGRlZWIwYzdkLCAweDM2OWRhMjM3LCAweDUwMWI5YTQxLCAweDMzY2UyZTVmLCAweDA1ZTllYjA0LCAweDJmNGY1MjQ5LAorCTB4MWRkYTU0YTMsIDB4ZjkwNjc1NzYsIDB4ODJhYzMzYTksIDB4Y2NmYzg1MDEsIDB4N2U1NGZhMTAsIDB4MWE2YjRjZGYsCisJMHgxZTZlZTNhMCwgMHhjNTM0N2ZjNywgMHg0NWY1MDJiZCwgMHhiZTliMGU3MywgMHg3MzY2ZjQ4MywgMHg3Y2MzZWUzYSwKKwkweDlkMDNmMDU3LCAweDg5ZjkwYWNkLCAweDc1MWU3NDJkLCAweDBlYmIwOGUyLCAweDA0YWJmZmUzLCAweDZmOGU1MjVjLAorCTB4YTJjNThmMzQsIDB4NWIyYTdiZmQsIDB4NzdiZWZkODIsIDB4NGVjZDlkZTcsIDB4NDdmMWFmZTgsIDB4MGY2ODk5OTksCisJMHgyNWNmYjhlNCwgMHhjYzI5N2JmMSwgMHhkNzBkN2FkYSwgMHg0NDZmOTU4MywgMHgwYmRlNTFkOCwgMHhmYjg2MzE3MCwKKwkweGI0NGM3YjlkLCAweGRhNzI4MTRlLCAweGMzN2NhOGNmLCAweDg5ZWYwOWI0LCAweDdhYzE0NjU0LCAweDdkY2ZjNjE1LAorCTB4N2M4N2NjMzMsIDB4OTg2NmY4ZGMsIDB4ZWY0NmVkMWUsIDB4NDg3M2Y3NzQsIDB4N2IzN2RjY2YsIDB4YTFmNWMxOGYsCisJMHg2N2E0YzFiMywgMHg5ZjM4ZjdlNCwgMHgwOWRiM2QyNywgMHg1YmQyMzdiYywgMHhlNTI2N2NjMSwgMHhlNWMzNWRkMywKKwkweDY5ZjA0OGE1LCAweGI3M2Y5MGIxLCAweDU1MmJhMzkwLCAweGFmMGU0ODVkLCAweGUzNDAwNjNjLCAweGNhNjNlOTNlLAorCTB4MjdlODVkYzAsIDB4N2VmNDJkZDgsIDB4MDJjYjk0OTMsIDB4Nzk0MTBmNWMsIDB4M2ExOGZmNDEsIDB4OGRmZDJiZmYsCisJMHg2YjJjMzk2MCwgMHhlNWJmNTJiMywgMHhlZjIxNzY2ZCwgMHhiOTRiY2EzNiwgMHg2MzcyMTYyYiwgMHgyY2M2N2UxMiwKKwkweDUzYmJlN2MxLCAweDVlMjBlZmRjLCAweGVlNDFhYTBhLCAweDNmMWY2OGEzLCAweGNmYzllNTBiLCAweGYyMmI0NjM3LAorCTB4NjI0ZGYwMTcsIDB4NTRmYzgwNDksIDB4ZDBjZmRlMzcsIDB4YjljNTMxM2YsIDB4NDE2NjZmODgsIDB4Y2M5ZmU4MWEsCisJMHhhYzRmZjc2ZSwgMHhmZTAwMTJlMywgMHg3NDMyMmI4OSwgMHg5ZGE5ZGY3OCwgMHhlNmY5ZGI3ZiwgMHg4ZjdmZjhlNiwKKwkweDQ4ZTI5NzkwLCAweDY3ZjQ0ZjVmLCAweDBlNjE1NTBkLCAweDM5N2U4NzNjLCAweDJjZjdlZjhlLCAweGI4ZjFjNTVjLAorCTB4NDVjYWUwZDAsIDB4MmZlMTYyZmYsIDB4YTE5NzhhMTUsIDB4Njk3YTgxZGYsIDB4NjMyYTkxZDgsIDB4ZmVlNTFjNjAsCisJMHgwZWNjNDFiNiwgMHhkNmQyOTg3OCwgMHgxMzM3ZDI4MywgMHgwZjExNDdkYywgMHgwNGQzNmQ0NSwgMHhhMzdkMDZiZSwKKwkweDRlYTFjNWZkLCAweDc4MzI0NzFlLCAweDE5OGQ4ZTRkLCAweGFiNzI0NzE4LCAweDY5MzNlNzQ4LCAweGUwNGNmYWNjLAorCTB4MWQ3YWRlN2UsIDB4YmVlNGMzYzUsIDB4OTkyYjhjYTMsIDB4ODA3Y2JjZjAsIDB4NWY0MmZkMWQsIDB4MzdlZjRlOWIsCisJMHg3Mjk5YzcwNCwgMHhiMGJmZGRiOCwgMHhiZjc2NDBkOSwgMHhjM2NmZjFhYywgMHgyZTdmNTA3NCwgMHhlZDA1ZDljMywKKwkweDc3N2E5N2M5LCAweGJjZjVmMjFiLCAweDBkNTdkZWM5LCAweGU0ZmY5ZjkwLCAweDc2OTFhOGNlLCAweGY0ZWIzZTNmLAorCTB4NDc2ODllYmUsIDB4MTg4ZjAwZWIsIDB4YTM1YmFhZWYsIDB4YmZiOTc5ZTYsIDB4YzlmN2MxMTMsIDB4N2U0YjdmMzgsCisJMHg3OWYzZTYwZSwgMHg5Zjg4ZGQ2ZCwgMHhjODk5NTRhZSwgMHhiZTAxNWQwZSwgMHg0ODc2MDE2NSwgMHhlN2E5MWRkYSwKKwkweDdjOTFmZGE1LCAweGZhZTdhZTVkLCAweGRhMzIzY2FiLCAweGI0MDhjOWViLCAweDM5NWM5MzNiLCAweGY4N2Q3N2M4LAorCTB4ZGRiZjFhNzksIDB4MTQ3NmI0ZDksIDB4MzhhNWMxY2EsIDB4ZWQyOGI3M2EsIDB4YmMxY2IwNDYsIDB4ZDMxYzE0YjYsCisJMHg4ZWVkMWQ1ZSwgMHhjZjUyZWJkNCwgMHhmYTM1YmI0YiwgMHhmZTc3MmZlNSwgMHg4YTU1Y2QxNSwgMHhlMDMyNDA3YiwKKwkweGI3M2Q2ZWViLCAweDJkZWI3NzVmLCAweGUzNjMzZmM0LCAweDZmOTFlOTI2LCAweDFlOGY1ZTZlLCAweDk4ZjQ3YTEzLAorCTB4NzQ1NjhmNDYsIDB4MjcwNjA3NjIsIDB4NzQxYzlhZGYsIDB4NGNmM2VkMTUsIDB4M2Q0NDdmZGMsIDB4YTNkZmQ4MWYsCisJMHhlMGM3YTMyOSwgMHg3MzI3YzYzYywgMHhjMTVkZmIzYiwgMHgxZmZlOTlkZCwgMHhmYTZiN2M5ZiwgMHg4OGIyNTg3ZiwKKwkweGZmNDBkZGY3LCAweGZkNzMyNjE3LCAweDk5ZWZhYzFmLCAweDczYTdiZjk1LCAweDJmNWY0ZjY5LCAweDBjYTM4M2RhLAorCTB4YzFkYTAzZWMsIDB4MTZmYjA4ODYsIDB4NWVjODBmNjEsIDB4YmY3YjQ3ODQsIDB4NGQ1YzFlY2UsIDB4Nzg4ODU5OWIsCisJMHgxZTBmNjEwYSwgMHhmNjE2ZmU0YSwgMHg5NGExZjI0MCwgMHg1MjI3MjkxYiwgMHg0OGU1ODIyZSwgMHg5Zjg0YzVjYSwKKwkweGU5MTEzYWMyLCAweDU3YmYxZWY0LCAweDZjZjdhZTUwLCAweDdiNDZmZGEzLCAweGNmOTQ2MGM0LCAweDk3NmUzZjc2LAorCTB4YzFkNmYyNDIsIDB4ZjFmOTA4NGUsIDB4NmVkNjhiY2IsIDB4ZjI5MGI5NDgsIDB4NWNhN2U1MjIsIDB4MjBlY2M1YzgsCisJMHhkNmE3ZDhiOSwgMHhmNzBhMzMzZCwgMHg2YmRkOTJjYiwgMHg3MmZkZTM5MywgMHhkODIzYjY1MiwgMHg1N2NhNzQzZSwKKwkweGIzNjQ1OTE4LCAweGYyMThhYWUzLCAweDgxYTQzOTU1LCAweDQ0ZWE2NTdjLCAweGJlNDk5ZTFlLCAweGQ5NjhiZjM1LAorCTB4NmZkM2YyNGQsIDB4ZjRmY2ZiZmUsIDB4ZTlmODRlOWIsIDB4M2YwZGJlN2YsIDB4M2Y2M2Y0NzUsIDB4M2MwM2IyY2UsCisJMHhkZjQwYjI1NywgMHg2ZGY5Zjg2NiwgMHhmYjhjM2JjMiwgMHg3YWY5ZGQwZiwgMHgwNDk3ZDYwMCwgMHg4ZDMxOTM3NywKKwkweGFlMTMzZWUyLCAweDJmOGEyYWIzLCAweDc0OTRiZTBhLCAweDZjYzBmZTk2LCAweDkzMzg3NzExLCAweGUxMDc3YWUyLAorCTB4ODJjMGY1YzUsIDB4NDQ3YmQzOWIsIDB4YjM1YzUzNjcsIDB4YjMyN2Q3MTEsIDB4MDNmNDBkMjEsIDB4OWI3ZmYzM2EsCisJMHhiZGVmNTE2ZiwgMHgzZTc0OTM3MSwgMHhmYjlkZmM5NiwgMHg0MzkyYzc4ZCwgMHhiMWM3OGRmYiwgMHhiNWQyOWJmYywKKwkweGY4ODk5NzIwLCAweDMwMGI4ZmRlLCAweDI5ZTEzOGRlLCAweDBhY2I2NzkxLCAweDQ2ZDM4ZjEwLCAweDNjOWZmYWM4LAorCTB4ZmE4MWVjZTksIDB4MzhiOGM5ODEsIDB4NTNkZTM5YzUsIDB4ZjRiM2RlNDUsIDB4M2Y2ODE4ZjAsIDB4OGZlNjE5ZTEsCisJMHhkOGZkNDM5YiwgMHhiOGY2ZThlYywgMHhlZGZjYzI4OCwgMHgzYjFmZTc5NSwgMHg1MWU4ODZiYywgMHhkZGNjZTVjYiwKKwkweDNmZmJlN2EyLCAweDc5MDU5ZjIyLCAweDQ0N2U0MDRiLCAweDZmMDM3ZTUwLCAweDYxNmZhNTFmLCAweDkwNDVlNzgxLAorCTB4OWMyMTk0OWYsIDB4ZmYwMGFlY2UsIDB4N2ZkZjg2MDEsIDB4NTU4NWVkMDUsIDB4YThkNzE4NjEsIDB4ZDZmOGRiOGMsCisJMHhmNTZiZDQxNSwgMHhiNTQ1ZWQwYSwgMHgxNGQ1ODFlMywgMHhmYmM1NTMzOCwgMHg3MzVmOTRiOSwgMHhjMjNlMDlkOCwKKwkweGJlNzhiYjAzLCAweDkzZWQ0YTRmLCAweDM3ZThiZDFlLCAweGExYmRkY2UwLCAweGI5ZDI3MTRlLCAweGI3OGExMTgzLAorCTB4N2M0NzQ2NWIsIDB4ZGFkMTQ5ZjcsIDB4NmJkMWZjMjcsIDB4MWU3ODY3YmYsIDB4NmZiZTU2ZWYsIDB4OGRkNmNmYmYsCisJMHg2ZTk5ZjdiZSwgMHhiMmZiZmM2MSwgMHhmZTdmOWY0MywgMHhlZmU3MGE1ZSwgMHgyMWQxNTkzMSwgMHhhOGE1YzdlYiwKKwkweDM3MTExZmJjLCAweDY4YTFmMWEwLCAweDdiZTg1ZDRhLCAweGI4YzUxM2IwLCAweDQyNWZiOGNkLCAweDI0ZjZkY2Y4LAorCTB4MjhkOWI3ZTIsIDB4OTNmMmZkZjEsIDB4MTk2Mzc3YzgsIDB4NjBjZmM0ZDMsIDB4OWZkZmNhN2MsIDB4OGQ0MTcyZjIsCisJMHgxOWQ3NGY5ZSwgMHg5YmFmYWY4NCwgMHhhOTE0ODBlZiwgMHhmMmY4ZmRiZiwgMHhmNGNiZDEwNCwgMHg4NDc2ZjgzNSwKKwkweGZiNWRiN2MwLCAweGU4ZWJlZmJkLCAweGY3YzNhYzM1LCAweDQ4ZTc2ZjgyLCAweGY4NmE3NjNlLCAweDIyZWY1YTNkLAorCTB4NTM4ZThjZmUsIDB4NTc0N2U4YWMsIDB4ZTBkNmMyYjgsIDB4OWYyZmMxN2EsIDB4NmNiZTI3YmYsIDB4MWQwM2ZiOTYsCisJMHgwMmI1ZWZlNCwgMHg4OTBhYmY5NCwgMHg0ZmViY2Y0NywgMHg3NGJhZmNhMiwgMHgzY2I5ZWRlZCwgMHg3MzM1ZjNiNiwKKwkweDUyYmMwMWY2LCAweDdmYmUwZmM4LCAweDI3ZmFmOWU0LCAweDdjMDkyZTMxLCAweGQ3OTRmNTQxLCAweDJjMWRjMDA3LAorCTB4Zjk0MTc1OGYsIDB4MTVmOTIwZWMsIDB4MDNmYTQ3ZjIsIDB4YTllMDAxZWQsIDB4YjhiN2VhMjcsIDB4MDA3YjQ2NjMsCisJMHhkMDRjZmM5ZiwgMHgyN2I4YTJlOSwgMHhmYjlhM2NkYSwgMHg3OGRkY2Q5MywgMHhmYjg1MjNiYSwgMHg3YzA5Y2Y4ZiwKKwkweDliZWQxMjZlLCAweDkwZjAwM2MzLCAweDFmMWZlMWFhLCAweGU2MDI1YmFlLCAweDNmYmE3ODRkLCAweDkzZmJjZTRlLAorCTB4NjNkMDdjODIsIDB4YmY1ZTM2Y2QsIDB4MjdhM2U1MmQsIDB4N2NmZWQ5M2QsIDB4YTZhZjdmNzAsIDB4Nzg4MDUyN2MsCisJMHhmMWZmZjdmMSwgMHhlZTIzZjQ2MSwgMHg5MWRiNzgxNywgMHgyN2IwZTQ3MiwgMHhjMTM5ZDA1MiwgMHhmMDIxNGVmZiwKKwkweDUxNjNiZDA3LCAweDc0YTFmYzhlLCAweDc2MWY4ZmU0LCAweGQwNGY0ZmU0LCAweDc3NGVmNGY3LCAweDNhN2JkZjY3LAorCTB4ZmEwY2VmN2UsIDB4ZWEzZGUxOWUsIDB4ZDA1ZWZmOWIsIDB4YWU4ODNmMmQsIDB4MWQ3NDQxNzksIDB4OTQyZjk0MTMsCisJMHhmZjQ2YWY3OSwgMHg1YzVjYmQ0YSwgMHgwOWUzZjRmZiwgMHg1NGRmMTg3MSwgMHg5ZmJmMzhlOCwgMHhiZDkzNGY5ZiwKKwkweGZjOTU2Zjk5LCAweGYyMzBlNjdiLCAweGNmOWY5ZmFiLCAweGQ3Mjc5ZTEyLCAweGNlNzliYTA5LCAweDc4N2E4OTNkLAorCTB4NTFlMWVhMTIsIDB4ZDQxNGZjZmUsIDB4NWYzZjk0NDMsIDB4N2U2MWZiODAsIDB4ZWE4MTc1N2IsIDB4ZWQ5MWFiZWYsCisJMHg3YWZkOTIyZiwgMHhlZmVjODU2MCwgMHgzYTRiY2EzMywgMHhiMjI1Y2YzMiwgMHhiZDBiZjc3NywgMHhhNGFkM2NjMywKKwkweGYwMzVlN2Y3LCAweGZlN2QzZmVmLCAweDJiNWZjM2YzLCAweDc4NDFiNTBmLCAweGY3OTQxMGQ5LCAweDc3NWZiNTA0LAorCTB4MjJiNmZiMDMsIDB4ODJjN2ZiZTgsIDB4ZTUwNGQ3ZWEsIDB4NmJlNTA3ZDcsIDB4Y2QxN2RmYjQsIDB4OGIwZTQ4NTIsCisJMHhjOWZkZjA0NiwgMHhlNjBjYjk2MCwgMHhkYTUyMmY4ZiwgMHhmNmVkNjNlMywgMHhmZjI0ODk1YywgMHgxMzU3MjM0ZSwKKwkweGZhZmU3OWFhLCAweGE4MjlmZmYzLCAweGE3YzgwYzg5LCAweGIyMWU4OWIwLCAweGMwNWEzMGVmLCAweGI5ZDA0MWZkLAorCTB4YzFmODE1MWUsIDB4YmNkZTg5ZDAsIDB4ZWNkZTk5ZDgsIDB4NzllZjZjMTMsIDB4ZDdmMDNmZmQsIDB4ZDIyZmRhMjQsCisJMHg1NGZiMjVmOCwgMHg5NTUxYmU2ZCwgMHhiYmJkNDc3MCwgMHg1ZjYwMzIyOCwgMHhlMjI2NTk5NSwgMHhmZGYzYmFiYSwKKwkweDYzODk4ODliLCAweDIyZmMwMzUyLCAweDY3NDRmODRmLCAweGZiNjUzY2MwLCAweDU3NWQ1ZjcxLCAweGQ0ZjhiYzcxLAorCTB4NzE5Yjg5ZjAsIDB4ZDhiNDY4N2YsIDB4MTRmMWI0ZDcsIDB4ZjY4YWE1ZWMsIDB4NmZjNDUyYmEsIDB4NWQzOWUxYzYsCisJMHhlYmVlMTc2YywgMHgwZmQwMzBiOSwgMHg3MGJkNzU2MiwgMHg1MjNmOGQ5ZSwgMHhkNTUwYmJmOSwgMHg1M2MwMWY0MCwKKwkweDc5ZDNiMzExLCAweGVhNzg5OWQzLCAweDQ3ZDQzYmJlLCAweDBkZjkyZjQ3LCAweDQ3ZWZiNzdjLCAweGQzYjQxMmVhLAorCTB4ZDJjNDk3NDcsIDB4YTk0NWE2MzksIDB4MTdkY2VmZGMsIDB4MzY2MTM1ZGQsIDB4MWUyMzFiZTQsIDB4ZjhkYjdkMjYsCisJMHhmNzRhNThjNCwgMHhhZDk1Y2VhYSwgMHgzNTNhZTg1NiwgMHg1ZjY0NjI3OSwgMHgzYzI2OGZhYywgMHg0ZmM0MzYzOSwKKwkweDlkZmMwNjVjLCAweDM4Mjc2YTk5LCAweDQyNmIzNmRjLCAweGFiZGJmYTNkLCAweDA4NWZiNDBkLCAweGZjNDU3ZTJkLAorCTB4MzA2OWE0ZjMsIDB4OTY4YmI3YWUsIDB4YjBmZGE3ZjUsIDB4MWE0ZjlmZTIsIDB4OGFiMGY3ODcsIDB4M2VkMDM3MWYsCisJMHg0YWNlOGI0OSwgMHhlYWY3MjI3MSwgMHg2YTJlNzRiMSwgMHg3YTkxMGFkNiwgMHhjZGY0YTJlZSwgMHgxYWJhZmNmZiwKKwkweGJlYjU2OWVmLCAweDBlZmJkMGEwLCAweDdiYWQ1Yzc3LCAweDliOWUxMDY3LCAweGY3NGVlOWFjLCAweDc1ODBkZTJlLAorCTB4M2VmYjllMDAsIDB4MTdiN2JlYmUsIDB4MDg5ZjIxY2YsIDB4YTQ3M2EyYWIsIDB4OGJlZTllZDAsIDB4YmZiMzVlOTUsCisJMHhkYjBiMzEzYiwgMHhkMGU1ZDZhYiwgMHhhMzk0MTRmZSwgMHg5NTZhN2NmZiwgMHg0MWVmMDliYSwgMHhjMjU5NDUxNSwKKwkweGE5ZjZmY2YxLCAweDc1YzUxOGFmLCAweGEyNmUzZDRlLCAweDQ3OGUyMjc3LCAweDhmYWM2N2JhLCAweGU4YjhmYmEzLAorCTB4OGE1M2IzZTksIDB4M2MwMTRhM2QsIDB4NjdkMGRhNGMsIDB4OTYxMjYyNjIsIDB4ZmI3ZDA0OWIsIDB4MWUwMTE1NDQsCisJMHhmY2VkNzQ4YSwgMHgyNGE0ZjY0MywgMHhhNTI3ZTc4NiwgMHgwNWI4OTlmNiwgMHg5N2VhNzFlNiwgMHhkODdjZTliZCwKKwkweGU0ZTc1NGMxLCAweDJmZDdjMDU0LCAweDUyNTM5Y2QyLCAweDZlNWUxMWUzLCAweDBmZmNkZWI3LCAweGUzZmM4ZmRmLAorCTB4ZTQwNGUyODUsIDB4Mzk1Mjg3YWYsIDB4NTZkMWJmNWYsIDB4YmVmODEwOWMsIDB4M2Q0NWM5NzcsIDB4NDY5YmMxZjEsCisJMHgyNzdhMjJmYiwgMHhjMTRkM2MzMCwgMHg0MWYwMzY3NSwgMHg2N2NkYzYyYywgMHhmMDBiNzU4OSwgMHgyMTlkOTJmMywKKwkweGE5ZTFhYmZjLCAweGYxYWJkMTJhLCAweDQ4ZDlmMWE3LCAweDBmNWYzZjVmLCAweDE5ZjUxNzdmLCAweDVmMjAzN2FkLAorCTB4MmQ3MzIxYjEsIDB4YTY5M2I5ZGEsIDB4MGY0NGVjMjUsIDB4OTFmZTdlZDYsIDB4M2MyMzBiZWQsIDB4Nzk4NWI2MTksCisJMHg3ZTMwMzJjMywgMHhmYzg3MWNlYSwgMHg3YWViMTJjZCwgMHhjODA0YjY0ZCwgMHg3N2ZmNjhhMSwgMHhmYmU3M2YwZiwKKwkweGViOGY2ODc3LCAweGZlN2JiZmJlLCAweDlmYjgxMmQ3LCAweDQ2OTdkYjIxLCAweDVjZTgzYzU5LCAweGY0NThiNjljLAorCTB4ZmFhMzhmNDgsIDB4M2NmMGE3YTUsIDB4MDYwYmM5NWEsIDB4MmYyNTAzYjIsIDB4OGFkNjNmYzQsIDB4MDZmODA3ZmEsCisJMHhmM2MxNmJlMywgMHg4MWFhNjNmYSwgMHg5MzNhMzFjNywgMHhhZDE4Y2Y0YiwgMHgxMzMxYjI1YywgMHhjOTlkYmU3MSwKKwkweGRjODZjZDY1LCAweDNiMjM5Yjg5LCAweDJiNTJjYjk3LCAweDVlZTM0ZmQ3LCAweDk2NTFlZmUwLCAweDcxZThiNTBlLAorCTB4MGJmNDczN2YsIDB4N2JhMTZkNmYsIDB4ODZjMjBiNzQsIDB4ZDI4OWJkZTAsIDB4YWY0NDRjMTcsIDB4NjNjNThiMTYsCisJMHgxM2VmMGRiZCwgMHg5MDMxZjQ1OCwgMHhlZGNhOWIzZSwgMHg5ZjkwYmQ2OSwgMHhjZGU5OTU1YywgMHg3YmE1Mjg0MywKKwkweGYwZGY3MjEyLCAweDllNjc5MmVjLCAweGU3OTdlM2M1LCAweDcwZGE3Nzk4LCAweDI3NjVkZmMwLCAweGJiY2JkM2U3LAorCTB4MDYzZjhhNTQsIDB4MWY5NjIzZWYsIDB4NjFjYzY5ZGMsIDB4Nzg4ZmIxMzcsIDB4MzJjM2ZkODMsIDB4ZGZkZTIyZDYsCisJMHhmMDdkZmQwZCwgMHhhOWFiZTFmZSwgMHgwNjg3ZmJjMSwgMHgyYTVlNGZiYSwgMHgzNzczMGZmNiwgMHhlOTc3MDQyOCwKKwkweDNmY2Y3ZTEyLCAweDhkYzc5NjM3LCAweGZhMDUyZTRmLCAweDFlZGU2OTFiLCAweDBmM2MxMGViLCAweDI5NGVlZGNkLAorCTB4Zjg2NmJjNTMsIDB4MGIwZGFlZjUsIDB4MTNkOThlMjgsIDB4NmU3MTg0ZjEsIDB4ODllMjZlZjEsIDB4YWUzYTQ3MzAsCisJMHgwODVlNGJmMywgMHhmZTk2ZmMyMywgMHg3ZTVmZWU2YSwgMHhmYWY3ODU5OSwgMHhkNzAyZTIwYSwgMHgyZjkxZmJkNSwKKwkweGRlMTk3ZTM4LCAweDljZmQ5NDFmLCAweDdhNjNmNjVlLCAweDQ1ZjczMWE3LCAweDdjYzMxZjU4LCAweGFiZDg2MzRhLAorCTB4YmQyMDY3ZjcsIDB4OWY3MWQyOTIsIDB4NWQyYmI2NTMsIDB4YmM1ZWEzZmUsIDB4NjFhZmFjMWQsIDB4NGFiNDVkMWQsCisJMHhlY2M3ZWZlNSwgMHgwNDFkOTEzNiwgMHgwMTY0NGY1OSwgMHhhZDY3MmNmNywgMHg3MjM0NjgzOCwgMHg4NzEyYzYzYiwKKwkweGVlZGFmZjA5LCAweDFjNzY5ZmJmLCAweDZlZWFmMWVhLCAweDI2ODdiOGE1LCAweDUxZWYyN2YxLCAweGZiZjhlOTE1LAorCTB4ODUzYTg1NzQsIDB4MjY4MTU3ZWUsIDB4OTc0OTdiYTMsIDB4N2I1ZmI5NTMsIDB4Njc5Zjk1M2EsIDB4ZDA3NzRhMjgsCisJMHhiNWYyOWNmZCwgMHgwY2YyYzcyNiwgMHg3ZGZiNGZkZSwgMHg5NWRmNTg0ZiwgMHg2ODRiOWFlYiwgMHgyNmY3ZjMzZiwKKwkweGFlNTRhYjhhLCAweDQ1ODY3MzA4LCAweDNiMTdmM2YxLCAweDZhZjlkMDA2LCAweDUxZjAxMWJkLCAweGUyZmFlNzY2LAorCTB4YTU2Zjk4YjIsIDB4NzQ1ZGQyN2QsIDB4OGVjZjQxOWYsIDB4ZGNiZWExZTgsIDB4Nzk2M2Y1YzIsIDB4OTIzZGUwMGMsCisJMHgxODZlOGEzMywgMHhlOGM3NjdiZSwgMHg5YmY2MjRkYywgMHg3YzYwMjgzNCwgMHgzZjQzOTQ0NSwgMHhiZjdmMjhmNiwKKwkweDgzNTYzYTRkLCAweGRmNmMxYjcxLCAweDMxZTIxMDc3LCAweDg0NzRkYTc2LCAweGU0OTUxNWVmLCAweDc2YjQ5MDE5LAorCTB4YWY3ZGZhMDQsIDB4ZGViODk5YTgsIDB4NmZiNTVhMmUsIDB4ZjlkZmVhMWMsIDB4OGRlMzA3ZGIsIDB4ZWFmNDU2MDksCisJMHhlNjNmNjQwNywgMHg4OGI3ZmEwYiwgMHg5MGM1Njc3MywgMHgyMmI2NzdjNywgMHhiOTNjYjhkMiwgMHg4YTJmMWU1NSwKKwkweGVmMzQ1MzQ4LCAweGYyZmFjOTEwLCAweGJmMWUwNjU1LCAweDhhOGYzZDA3LCAweGM3ZDk3Y2E1LCAweGE1Yjk2ZmQ0LAorCTB4NmZmNTAxMzksIDB4MzBjMzZlZjksIDB4Njk1MWQzZDQsIDB4OTc4YjJlNWMsIDB4MDExZjY1YTUsIDB4NDQzNjJhYmUsCisJMHg2NTgzYmJkMywgMHhlNjIzMDI5ZSwgMHhjYTE1NmFjYiwgMHg0ZjhiYmZmYiwgMHhiZjNkM2U0NywgMHhlNDI4YjVlMiwKKwkweGJlNjExMzlmLCAweDVhOTc2ODllLCAweGU4Mzk4NDE3LCAweGM3OTVhMWRlLCAweGU4YWZjZWViLCAweDY2OTVmNzQ5LAorCTB4ZjgyZDliNTksIDB4NDVhY2MxOWUsIDB4YmZhODZkZGQsIDB4NDY3ZDVhOGYsIDB4OTc1YTNmYWMsIDB4ZDNiY2MzYTEsCisJMHhiY2M2Y2Q2YSwgMHhlNTFiN2Y1MywgMHgyZGYzOGJjZiwgMHhhNTdjODNmNCwgMHg2ZDk3M2E3MCwgMHhiZmM0NjdkYiwKKwkweGNjNDQzMjRmLCAweDFmMmJlMmY3LCAweDRmZjhjMmY0LCAweDJmNzM3YTc5LCAweDA3YzAyYmI0LCAweGNmMTA1MmJkLAorCTB4OTc2NDI5MmYsIDB4ZjNmMWI2MmIsIDB4MmEwZjkyZWUsIDB4ZWU0MDBmOTAsIDB4YTgzZTA5ZTYsIDB4ZjdkYWY1ZDgsCisJMHg5MDJhMWU1MSwgMHhmMjNhNDNmZSwgMHg3ZWYzZjAxMSwgMHg3MWIxZGYyYSwgMHhlZmRmZTMxYywgMHg3NjkxM2U0NywKKwkweDBjMmJmMjBjLCAweGYxZGY4YzM2LCAweGE3MWE2NjdjLCAweGUxOGY5NDNmLCAweGZjMDE5ZWU1LCAweDM5ZmI1ZDFjLAorCTB4NzQxYzhkMDQsIDB4MWE1NzVmNDYsIDB4Y2JjNTg3YjcsIDB4NWQ2ZmE0NGMsIDB4NWExZTVjNjksIDB4NDI4ZWVkNTYsCisJMHg2NTdjNWRmYSwgMHg2N2RjMDFkZiwgMHg1NjAxZGYyOSwgMHgxZTQyMWVkYSwgMHg3MTJhM2UwNCwgMHgzZjA0NTFmZSwKKwkweDM4OTUxN2Y5LCAweGZjZmYyOGRmLCAweGM4NWVmOWRiLCAweGYzZTMyNTYxLCAweGQ0YWRmMzkzLCAweDdhY2JmOThiLAorCTB4YzEyNGZkZjEsIDB4ZTA0YzY1MmYsIDB4MmU2ZjU3NmIsIDB4NTBjZTQyNzcsIDB4MGViZGU5OGUsIDB4NGRiNzNmMzEsCisJMHhmN2U1MGVmYiwgMHgyMmRjZmNjNSwgMHgyOGJhZDY2NSwgMHgxN2QyMGZjNCwgMHgxMDNlMGZmNSwgMHgwNGZhOTQ2OSwKKwkweGJlZGM1YzlhLCAweDRiZjFjZTkxLCAweDU3Zjg0OTdhLCAweGRmNDAzODA5LCAweDdlNmM2MzM5LCAweGYyNzRiNjNhLAorCTB4ZTA5NTY0NGUsIDB4Nzc4ZjYzOWIsIDB4ZmMwN2FmNDksIDB4Y2Y0YWRmOWQsIDB4ZWFiZjExNmMsIDB4N2M5M2M2MDMsCisJMHg3ZGNiYzcyMywgMHgzOGRkZDI3OSwgMHg4N2RmZTg2ZiwgMHg4ZjcxY2JmZCwgMHhkOGY0MjI3YSwgMHhlNWM2NTFjZiwKKwkweGU1MmZjMjQzLCAweGExZmFiNzMyLCAweDYxNDcwN2JiLCAweGVlOTY4YmJiLCAweDljZGU3MDAzLCAweGFjZDJhYjhlLAorCTB4ZmQxM2JkZjQsIDB4NTlkZWY4MDUsIDB4ZmFkYzUwYWYsIDB4MWZlNzU4OTgsIDB4YThiNWZjN2IsIDB4N2U3ZTAxZTIsCisJMHgyNzdjNDI3ZiwgMHgzMDdmMGNmOSwgMHg2ZGUxMjYzZSwgMHg3MDM4ZjFiMiwgMHgwZjUyZGMzMCwgMHg5ZjczYjg0OSwKKwkweDJjNmVlZmI4LCAweGJlZTNmMDk3LCAweDRhOWYyMDUxLCAweDk1N2U0YTNjLCAweGY5ODJmNWY3LCAweGRhNGU3ODk2LAorCTB4ZmU3M2I1NGYsIDB4NDYzZDRjYWUsIDB4OTQzYTc3ZTcsIDB4ZmMyN2Y3MDcsIDB4NWNlMjEzYTIsIDB4ZTMzYzZiNzksCisJMHg4OTE1ZmY3MSwgMHg4YWY3MzVmYiwgMHhiNDBjOGIxOCwgMHhjMDhlZDIzZiwgMHg4MDdkMWFjZiwgMHhhN2JmNjlmZCwKKwkweDhiM2NlNzE2LCAweGQ2OTBiYjc0LCAweGM3M2ZmYThkLCAweGQwMzk4Y2VhLCAweGU2OTlkOTZmLCAweDlkY2VmODcxLAorCTB4YjhlZjQzZjQsIDB4MzFhMzUzZWEsIDB4OWY4YmI1NWUsIDB4NTJmYzkzNzcsIDB4YzkzZjYxNzYsIDB4ZmZiOGI5NDEsCisJMHg4M2VhYjQ1NCwgMHhlZmM4ZTE4MiwgMHhiZWQwMzViZiwgMHg2M2UzZDE0ZSwgMHhjZmRmZTg4ZCwgMHgxODczMzJkZCwKKwkweDQxZWYwMWEyLCAweGJiM2Y1ZWEwLCAweGJmMjY2ODc5LCAweDk4NGQ2MDU5LCAweDM2MjFmNzg2LCAweDAxZWQzMzNmLAorCTB4YWY1NTlmMjgsIDB4ZDgwZGJiZDIsIDB4ZDE2ZmNhMGYsIDB4NWYxNDk5YTMsIDB4NTJkNjExM2QsIDB4ZjhmZDBhMzAsCisJMHhmNDU2YTgxZiwgMHgzMmRmNmZlMywgMHg3ZjZjMzFmNCwgMHgwYzZiYTViYiwgMHgzOWIxYjYzZCwgMHg3ZDRlZjI5NiwKKwkweGU5MDdkOTM0LCAweDgwNzNjYWY3LCAweGM3ZGVlMmQ1LCAweDNmZGU4NDVmLCAweGUyMmE5ZWRjLCAweDJmNzU1ZmZjLAorCTB4ZGQ2ZjhmZGMsIDB4YWNlZjQ2MTgsIDB4NzVlZDFhMTQsIDB4NGY2ZjFjM2UsIDB4NTQ2NzVhMTcsIDB4MjNlYWYxMWEsCisJMHhiZjI1NWJkZCwgMHg5OTkxOGU2YywgMHhiOTUwODY5MywgMHgwZmNhMDkzOSwgMHg0NTFmOWExYSwgMHg1MWYwNzIzYiwKKwkweDNmN2M2MGNiLCAweDg2ZDdhOTkyLCAweDlhN2Y3MzE1LCAweDZhYzYzYmVmLCAweDcwOTEyZGRmLCAweDBmYzYyNDdjLAorCTB4ZGY3ZTRmZWUsIDB4MWIwOGViODQsIDB4ZWZhNDRmZGQsIDB4ZWRmOGFlY2YsIDB4Njc4M2I0MzQsIDB4ZTFiNGY2YjcsCisJMHgwOWVmNGZiYywgMHhhNzAzZmJhMywgMHhjZjc3ZGEwZCwgMHg1N2RlZjU2ZSwgMHg3OTI5N2RmMCwgMHg5YTc0ZjU2ZiwKKwkweGZjOTM4ZmQ2LCAweDM3N2JjMzdlLCAweDgzOWVkMzdmLCAweGE1YjlkMWJjLCAweGRkMTk0YjBiLCAweDhkMzk3ZWZiLAorCTB4MjI2M2Y3ZDEsIDB4ZTc4OWRhYmUsIDB4NGQ2YTRiMDgsIDB4NzMwN2JjNTYsIDB4ZjcxZWY5MTIsIDB4ZmNhYjc2YjMsCisJMHhjYjk5YTVmZSwgMHg5OWRkYzljMSwgMHhlNGI3YmY3NCwgMHg1MjVmM2M2ZiwgMHgzZWYxNzhhNywgMHg5ZmE3ZmVmMiwKKwkweGIzMGFmM2EwLCAweGFiYzRjZmMxLCAweGYzZmVlZDA5LCAweGExYTdhN2JhLCAweGI4NzY1YzM4LCAweGZlN2RlMjU3LAorCTB4ZjlmOTViY2IsIDB4MzJlZjBlOGEsIDB4MjA3OWRjMWMsIDB4ZGZiOWRlYzksIDB4Y2JmYjVkZmMsIDB4OWYxMTBlMzIsCisJMHgyZmNmYmRhZSwgMHg0ZmQ3MmNmMSwgMHg4YzNmMDI2ZiwgMHhkYmM3ZTIxOCwgMHg5MGU3NGI2NywgMHhhOTYxN2NiZiwKKwkweGNhNGJkMjliLCAweDIzYjdiNWIxLCAweGU5YTI1YjFmLCAweGViMWZjMGJlLCAweGJkZjE1MTlmLCAweDgzNWRmMmE4LAorCTB4NzgzYWUxYWYsIDB4YmQzNDY0NTQsIDB4ZDJkOWYyOTMsIDB4N2E4ZmI0MjUsIDB4YTUxNTY5NjEsIDB4MGUzMmRlOTIsCisJMHg0NmFlYzc3NywgMHhmYWIzZWVmYSwgMHg5ZmJjMDZjYywgMHhiNDY0NDZmYiwgMHg5MGI2MDNiMCwgMHhkZWVjZWQ3NCwKKwkweGI5ZDc5Y2IxLCAweDRhZmE3MDFmLCAweDlkNmRjZmI4LCAweDZhZjM4NTE5LCAweDYxYjYzZTdjLCAweDIyMzVkMjI0LAorCTB4NWY3ZThhZGEsIDB4NzI0NzM4YTksIDB4YWJmNzNkNmEsIDB4N2ZhMzk4Y2YsIDB4M2RmNDBmOTMsIDB4MDI0YTYxYjMsCisJMHhiYjM3MzdiZSwgMHg1ODY5ZGVmMSwgMHhiMTQ3YjI1ZSwgMHhiMWMwN2FlMiwgMHhhZTE0NTI2NywgMHhiN2Q1M2VkYiwKKwkweGE4ZmRlMTQ0LCAweDdiY2JkNzRmLCAweDNiZmE1ZTU1LCAweGQ4ZjJhMzU0LCAweGNhM2Y2YzE0LCAweDBjZjY2N2E3LAorCTB4N2M4ZDc1YmUsIDB4OWU4MmYyMzIsIDB4ODc5ZWJmZWUsIDB4NWM5MzhhNzIsIDB4MDkzOGE3MGIsIDB4YjllMmM0ZmMsCisJMHhmM2FmZDk5MSwgMHgzYWZiNGFmOCwgMHg2ZWYzYWM1NywgMHgzNDdlZjMxNywgMHgzMWY3MjZkZCwgMHgwNDc3M2NhOCwKKwkweDYxYmQzZjJmLCAweGVmZWM0NGU3LCAweDE1ODM2NmVjLCAweGIzNmNmZWUxLCAweDA3OWZmYTgxLCAweGMwMWQzM2ViLAorCTB4NWYyYjY2N2IsIDB4ZDcxZTYwZjcsIDB4ZjJiNzY3Y2IsIDB4M2FiY2NkZjUsIDB4NWYyOWJlYmUsIDB4ZmJmMjcwNjAsCisJMHhjYzdlNWFhMiwgMHhlZjQ3NjgwZCwgMHg1ZWYyNzRmYiwgMHg5ZjI3M2NjOCwgMHg5N2IwM2NkZiwgMHhiZTYwZGYzOCwKKwkweDc0NzU2MThkLCAweDllOWJlYzhmLCAweGRiZTYwZDE3LCAweDg1NWY5MmY5LCAweGQ3ZTc2ODdlLCAweGUwNDRmOGNlLAorCTB4ZjkxZGU1MTMsIDB4YmNjM2YyNTUsIDB4ZGVkZjdjZjUsIDB4MDczODM3NTYsIDB4NDdmMjRlZjksIDB4ZDU1OTNiZjAsCisJMHg1N2RmYzY0NiwgMHg3YmQzODVkNCwgMHhlZDIyOTNiOCwgMHg1MzBmYjQwNiwgMHgyMGM2NWFlMiwgMHhlNzRlM2U1YSwKKwkweGFiOWE4MDdlLCAweDM3YmRlMjczLCAweGY5MGE2ZDU2LCAweDc0OGFjZWNlLCAweDc0NDU1N2VlLCAweGRlZWZjNDY1LAorCTB4Y2YzZjJiNzQsIDB4Yzk3ZmVlMjksIDB4ODY5MjI2MTQsIDB4ODQ1MjdiNzYsIDB4MzQzYjBiZWQsIDB4YWVmZDNhNzksCisJMHhjZmMwZjQ3YiwgMHgzZGI3NmU5MywgMHhkOGMxZGRkYSwgMHhlZTBiZDMyZiwgMHgyNjdjYzNkMSwgMHg3Nzc2ZGE2NSwKKwkweGJmZjNmYzgzLCAweGI3ZjNjMDlhLCAweDIwMWE4NmQ5LCAweDc4OTk0Y2JmLCAweGQ3YzgxOGNmLCAweDRhOWYzYmE3LAorCTB4ZWNlNzE4MGYsIDB4Mzg2OTJlOTYsIDB4MTlmZjI4M2YsIDB4YmJjNWQ3OTYsIDB4YTU2OThlN2YsIDB4NDk3NjBmYjgsCisJMHgyNGI0MWQ2OSwgMHhmZGZlZGZjMywgMHg3ZmEzOTYzZCwgMHgyZGYzZmJiNCwgMHgxOGVlOTYwNiwgMHg3ZjA5Nzk4MCwKKwkweGRkMjViNGU4LCAweGY4ZjRhYmY5LCAweDhjYzVlNThlLCAweGY1ZTc0ZTNkLCAweDBlMWVmYzNjLCAweDA5Y2NiOGZjLAorCTB4ZjM4YTRmNzgsIDB4OTdiY2IxNWIsIDB4MmY3NDEzNTMsIDB4OWZlZmMxYzcsIDB4ZjI1MmZiYzksIDB4ZmY1ZjU0M2UsCisJMHhiNzBkYjI3ZCwgMHg5MmVjOWY3MiwgMHgyYTFkZmY4MSwgMHgwZmJkYTljNSwgMHg4OWZjMzRhNiwgMHhmNmE5ZjlkZSwKKwkweGEyMzA5NmIwLCAweDRkOWVmNjgzLCAweDc3NTNiZTM5LCAweGEyMGJkZDFiLCAweDZmNGM4N2ZiLCAweDU3MzM3ZDI3LAorCTB4YWM2ODNiZmEsIDB4MjlkZmY5ODcsIDB4ZmNmYzg5NjAsIDB4MWY4MmEzYzEsIDB4M2Q2NTJmNGYsIDB4OWZlODgwN2EsCisJMHhjYTM5Yjc3ZiwgMHg5ODVjNzAwZSwgMHhmYTg1ZWJlOCwgMHhmZGRjMzIyMCwgMHhlOWQ3YzQyNywgMHgwYmE5ZDUwZCwKKwkweGFhMWVmMGUzLCAweGVkMGY5MWM5LCAweDdkZjk3OGNmLCAweGI3ZTEzMmNlLCAweDQyZjFjZGIyLCAweDNiYmVhODJmLAorCTB4NDY1MzVkYTEsIDB4ODc2ODRkZGYsIDB4NzU3YzE3ZGUsIDB4ZmU5N2MzMjEsIDB4MTkyYmQ0MjMsIDB4ZWQwNDlkN2MsCisJMHhkZTVkM2NlOCwgMHhiMWUyYmJmMiwgMHg0ZmVkODVkZCwgMHg3MDBkOThmNCwgMHhiYzA2MDA5YiwgMHhmYTFlMzVhNywKKwkweGY3YTM2MTFjLCAweGZiNGE5OGFhLCAweDdlZmU1ZWNmLCAweGEyNzk5ZTkyLCAweGQ1ZWVmODZjLCAweDNlZTJlOTMzLAorCTB4OTQxM2RkMTEsIDB4ZWZmODkyNzQsIDB4MWExODE3NDAsIDB4OTk5ZDU5ZmQsIDB4YmVlZTEwMTksIDB4ZmRmZDAzNmMsCisJMHhmOTFmNDkyZiwgMHhkZGMyZTJjZSwgMHg3NzQyZmUzYywgMHhlMzFlNDUyNCwgMHhlMmNkYTc0OCwgMHhiMDc1OWZlZiwKKwkweGJmOTE2ZjhiLCAweGQxZTk2MjBhLCAweDMzMGQ5ZmU4LCAweDExYzlkYjQzLCAweGY1ZDg4ZDFiLCAweGZmMmY2ZDc3LAorCTB4OTJmYzJlOWQsIDB4ZTA3MDZjYzEsIDB4YTJhNTkyM2IsIDB4ZDBiNTU4Y2QsIDB4MmQ1YmVmOGUsIDB4N2JkMzM3OGMsCisJMHhlODVmMGIyNSwgMHg5NmMxZmM0ZSwgMHhiNjA1OTBmYywgMHg4OTYyMWI2MywgMHhhODY2NTY1ZiwgMHhmNWI5ZmY4NCwKKwkweDJhMWRkZThjLCAweGYzYTY0ZmE4LCAweDM2ZjVmOTk0LCAweDEyZGFhMzRhLCAweDZmZWNmY2E5LCAweDdhZTJjOWRlLAorCTB4ZTBhN2QzODksIDB4YTY4Y2JhN2YsIDB4ZDNmZjRiNzMsIDB4ZDlkNjUyOWIsIDB4NjY5MWE3N2IsIDB4ZjBiYmNmYmEsCisJMHgwYjZiYjcyMCwgMHhjN2JmY2FhNywgMHhiYmFmZWZjMiwgMHhjOGFlMzgwNCwgMHhiOTBiOGExYSwgMHhlNzUzZGMzYSwKKwkweGYwYmE1N2VmLCAweGU3N2UwMGJlLCAweDY3N2Q1MDM0LCAweGZjNGE1N2VmLCAweDgyZGQwNDlhLCAweDdhOWNiM2RmLAorCTB4ZGU5MTMzMzAsIDB4NTllZjE0N2YsIDB4OWFlZDE3NGUsIDB4Y2ViM2JkYzUsIDB4NGZiY2I1ZGUsIDB4NmEyMjdiYjQsCisJMHhkZGYyMTM1YywgMHhjODY5Njc3NCwgMHg5ZWY1MmQ3NywgMHhjZmZhMDczMCwgMHg3YTQ4ZDQ4NiwgMHgzNzNlZTE0NywKKwkweGY1OWE5N2Y4LCAweGYxMWU4YjRjLCAweGJmOWIyZDMwLCAweGJhNzUzOTczLCAweGZkOTBkZWI2LCAweDQzNzNlOTM5LAorCTB4OTI3Nzg3NzYsIDB4NGQ4ZmE4MGMsIDB4ZWNmYjZkMmUsIDB4ZjUwZWMyYWUsIDB4ZjZiZjdkNjUsIDB4MjM1NGQxNWQsCisJMHhiZTNkNGZkOSwgMHg2OWY5MGIzYiwgMHhmNDUxNWRlMiwgMHhiZmZmZDEwZiwgMHhmZjEwYjRlYywgMHhiODNiYzQ5YiwKKwkweDExMmIyY2NkLCAweGJlYWRjMmY1LCAweGRiZmZmYjI3LCAweGVmYzFiMWZiLCAweDAzYmYwNmM0LCAweDQyZWI3ZmRiLAorCTB4ZGQ2MDdlNGQsIDB4NmZlZDM1MGYsIDB4YTlhZTVmYWIsIDB4YWQ1YmVjMWYsIDB4ZmE2Y2NmYTksIDB4YjQzZjI2OTksCisJMHhmYjRkMzlmOSwgMHg2OTM2NDdlMSwgMHhiY2I2NDdlYSwgMHhmZGJmYTlhNCwgMHhmZTRkMGVjYywgMHg2ODNmZDY4ZSwKKwkweGI2ZDlkZmRhLCAweDYxY2Y5MzU3LCAweGU3ZGE2OGVmLCAweGU0ZDAzZjlhLCAweDU3ZmY1YWM3LCAweGM0YWVmZWQzLAorCTB4ZjFmYTlhMTMsIDB4ZmE5YWYzZjYsIDB4NjhhZTdkMDksIDB4MmY4ZTA1ZjIsIDB4MzczZmVkMzUsIDB4NDU3NzU3YmEsCisJMHgwY2VhMjJiZiwgMHg0MzNhYWRmMSwgMHhmOTQ0Zjg2MSwgMHg2NjI5YTZlNSwgMHhiYTZiMDdkNCwgMHhmODI0N2QwYSwKKwkweGQzYjBiOTZmLCAweDdiYTMwN2FjLCAweDZjZDU2M2FjLCAweDNkNWZmMTFmLCAweGMxYTBiYmZmLCAweGRlN2Y0Zjc2LAorCTB4MWZmOGM0ZTUsIDB4NmJkZjhkN2IsIDB4NTI3ZjA2OGIsIDB4OGM3ZTMwMWYsIDB4ZmYwMmNjZDMsIDB4OWU2YzVkZWUsCisJMHg3NzhmOTM1NSwgMHg3N2RhNmEyNSwgMHhkNGQ3NmU5OSwgMHg2OGZiYjkyNywgMHgzOGU2NTNlYSwgMHhhYWI0ZjkzNCwKKwkweDVkZjY5YTExLCAweGY5MzUzODk3LCAweGE2OWU0ZjBjLCAweDk3MWFmNzdkLCAweDc2YjNkZjI2LCAweGVmN2RhNmJhLAorCTB4N2Q0ZDZlZjUsIDB4NGQxY2VmNWYsIDB4NTVhZGZmN2QsIDB4YmFjMGZjOWEsIDB4YjdmNjlhMjUsIDB4ZjUzNDdiZDUsCisJMHg5YTM1N2Q4MywgMHg1YWE2Y2NmYSwgMHhmMzY4N2U0ZCwgMHhlMWZiNGQ3YSwgMHhmYTlhYmM0NywgMHgzNTViMmQ5MSwKKwkweGE5OWZiN2Y1LCAweDY4ZWZlNGQzLCAweGJmYjRkN2FkLCAweGM5YTdjZGIzLCAweDlhODNiMGU3LCAweGY3ZTZiOWY2LAorCTB4ZDZiMWY5MzUsIDB4ZWZlZDM0NGYsIDB4YTlhNjNjNGEsIDB4YWIzZjZmMWYsIDB4Y2U3ZTk3YTksIDB4NmI5ZjNlODQsCisJMHg1M2RmODVjYiwgMHhlNjk3ZjhlMCwgMHg2ZWY3ZjZmYiwgMHgxZjc0Mjg3NywgMHg2ZWQ3NWNlYSwgMHg5NmM1N2RmMiwKKwkweDI0ZmQxNTMwLCAweDZjOTljNTE3LCAweGY1MTExMDc4LCAweGI3MjdkZTE1LCAweDg1MzlmM2YxLCAweDIzOGFhZjE0LAorCTB4OTQ0Yzg4N2YsIDB4ODEwYmNmMWQsIDB4YWI4NTEwZGYsIDB4ZjQwYzhjYjYsIDB4ZmVmYzIzYWIsIDB4Y2NmNWVhNWIsCisJMHhkYWRmZjc5YiwgMHhkNWRjZmY4NCwgMHhmMjg4YmVlZSwgMHhmYjZlYWYzMSwgMHg5ODlmN2EzOCwgMHgxYzIyNTY3OSwKKwkweDc3YmZmZGYyLCAweDk1NmRkZTgzLCAweDE5ZjM3OGU5LCAweDE3ZjAwZmE2LCAweGE2ZDU4NjBmLCAweDM4OWFmOTBlLAorCTB4MDVmMzc4YzEsIDB4YjZjMWVmODYsIDB4MjJlMjJiZjcsIDB4MTdiZGM3ZjgsIDB4MTZiZmY0MDYsIDB4ZjdmODE3ZDYsCisJMHg5YTk3NmIyMywgMHhmZmM3NmZlOSwgMHhmMjk1YTk2YywgMHg1MjI2OTZlYiwgMHgzYTAwZmZmZSwgMHgwMDQ3YmYyOSwKKwkweDAwMDA0N2JmLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweDQ1NTQ3ODBiLCAweGVlZGQ3MDk2LAorCTB4OWQyNDhmZGIsIDB4Nzc3NTc5ZDAsIDB4NDkzY2RjOWUsIDB4ZjA5ZDA4NDgsIDB4M2EzZTAwZDgsIDB4YzA0MDYwMjEsCisJMHg0OTA0MzVlNiwgMHg0MWE4YzFhNCwgMHhmODgxYmE0MywgMHhiYjc1NzQ0ZiwgMHhiMjAyMTAzMSwgMHgxMGQxOTFiMywKKwkweDAxODZjMTk1LCAweDA5OWQxOTY0LCAweDA5ZDFhMzJlLCAweGUwOWFmMDlhLCAweDFjNjA0YzNhLCAweDM3MTlkOWM1LAorCTB4OGVlMmEzYTAsIDB4Y2ZlMzFlMTAsIDB4N2ZjMzhmZWUsIDB4OTM3YmE5Y2UsIDB4MzgwZTlkYmUsIDB4ZjdmZjNhZmUsCisJMHhiNGZiZmEzZiwgMHhhYjc1NTUzOCwgMHg3MzlkNTU0ZSwgMHgyYWFhM2NlYSwgMHg4OTg5NWVhZCwgMHhkZTZkNjMyMiwKKwkweGYzOWY0YTFjLCAweGM5OTg5OWRhLCAweDMxNmYzNmQ4LCAweDBlYmRkYmMxLCAweDcyZGVmZDgyLCAweDlkN2E3NzRhLAorCTB4NWJjYmJmOTQsIDB4YWYxZWYwNDEsIDB4ZGViZGQyOGIsIDB4NzlmNzRhMWEsIDB4OTJmZTU0M2QsIDB4OWZlMDgxYjcsCisJMHhiNjk0N2Q3YSwgMHhmZjI5OWI3YiwgMHhjMTBiNmYxNSwgMHgwNDZkYmMwNywgMHg1M2Y1ZWFiZiwgMHg0YmRkZTFkYSwKKwkweDc2ZGUxYmU5LCAweDc2ZjRlZjJhLCAweGI3YTZmYzEwLCAweDZmMmVlMDhiLCAweGJjODdjMTBmLCAweGYxMWYwNGJkLAorCTB4OThmODI2OWUsIDB4MWVkMjhmYjcsIDB4YmU5NDY3ZWYsIDB4ZjJhN2VkZWQsIDB4MDk1N2JjNzcsIDB4ZGJiZjhlYmUsCisJMHhjZDJhZmMxOSwgMHgyNjMxZTQ5ZiwgMHg3YWU2OTczMCwgMHhjOWNjYzIxZSwgMHgwMGY2MzIyNiwgMHhmZjgyNGJmZSwKKwkweGNjODg0NmUyLCAweDhjZmRkOGMyLCAweGIwZDczZWZmLCAweDk0MTM3NjlhLCAweDNmZjJmZTc3LCAweDc0YzYwMjg1LAorCTB4MWY4ZDhjYTUsIDB4ZjY2MjY5MGYsIDB4YzYzNGM2Y2UsIDB4ZTY3NWIwMjYsIDB4ZDMxODcyNGYsIDB4NjNkNzU3NDAsCisJMHg0ZTA5ZmIwNywgMHhkNjE5MTMxOSwgMHgyZDc1ZGZjMywgMHg1OGM3ZGZmZSwgMHg5NGJmZmMzYywgMHg4MzRjNzhlNSwKKwkweDE0MDk1MzY5LCAweDU1YmVmYjQyLCAweDFhNzc3ZjgyLCAweDNlMjBkNzU1LCAweGJmMWM4ZGFiLCAweDk1MTM1YTY5LAorCTB4ZjgyYzNlNTcsIDB4NTU2MzAyMGQsIDB4OGJlOWYzMjIsIDB4NTg3ZGZiMTgsIDB4YzExYjAxNTQsIDB4MmU4ZjI1ZDgsCisJMHgyMTcyYzQ0NywgMHgwNDgzMGVkYywgMHg0NDNhOGZmOCwgMHgyYzVkN2UwZSwgMHg5ZGE1YjE4ZSwgMHhkMjliMWQ4NiwKKwkweDg0YWFmMTA2LCAweGZkZjAzNWVmLCAweDBjMWE1NjJiLCAweDNhM2Q2NGFiLCAweDFkZjIwM2M0LCAweDllYzYxOGRhLAorCTB4NGJhNmI4YjcsIDB4OGE2MGZmOTAsIDB4ZjY4N2E3YzYsIDB4ZWQ5ZmM5OTksIDB4MmRlYzY0OGMsIDB4ZTYwNjZiOGIsCisJMHg3N2RjZjI1ZiwgMHhjMDdmMWIwYywgMHg3ZWM2Y2Y2YywgMHhlMmJhMWI2NiwgMHhmZGZmNDExNywgMHg5ZGY2YjVjNywKKwkweGUxZjNmMGQyLCAweDZjNjcyOTZlLCAweGRmY2EwZGRjLCAweDAyZWM5NzNjLCAweGEyZmZjYTNjLCAweDlmZmNlMTc1LAorCTB4Zjg1NjQ1ZDAsIDB4NDkyZjAxZjMsIDB4MWE0YTc4ZTAsIDB4ZWFkYjNhNTUsIDB4N2NmODgyNWEsIDB4NDdiOWU5MTksCisJMHhlNWY4NTMwMywgMHhhY2Y2YWI2ZCwgMHhhZTU1MjE4MSwgMHg4MmUxMWFjYSwgMHgyNTgyZWVlZiwgMHhjZDhjMTk2MywKKwkweDQxOGU5MjY1LCAweDM4ZTY3Y2Y5LCAweDJkNGQwNjlhLCAweDE3ODIyZTY0LCAweDZmYTUxZjMxLCAweGIxYWFiYmM1LAorCTB4NGZjY2M1OWQsIDB4MjFiMjZiYjAsIDB4ODJiOGQ0MzUsIDB4NzhjYjcyZjEsIDB4OTQ3YzY1YjksIDB4YWJhYjcxZjQsCisJMHgyMGU1ZTM4ZSwgMHhiYTRjNGViYywgMHhhNWM3MWIyMywgMHg1NTk2ZjVlMCwgMHg1ODczN2FhMiwgMHhlZmM0NzZmZiwKKwkweDNmMTc4M2NiLCAweGQyODYzMjExLCAweDE3NDA3N2M3LCAweGViMWU2ODI2LCAweDczYWMzZDMxLCAweGY3ZDE4ZWEzLAorCTB4N2UwODhmOGQsIDB4MmU4NTZiYTQsIDB4Yjc5MTk5MmEsIDB4MGJlNDE4ZmIsIDB4ZjQwMjc0ODEsIDB4ZDJmYzg0NTEsCisJMHg5MjM3M2E5ZiwgMHgwOTQ5ZTRlOCwgMHg5MjcwN2MxYSwgMHgwYjFmYTdkNiwgMHhiM2Y4ZDRlMywgMHg4N2QxMmQwNSwKKwkweDFlZmMwMDVlLCAweDQ4ZmEwMzg4LCAweGVhMGU5ZTFmLCAweGUwMGQyMTlhLCAweDY3YWZhMDFmLCAweGFmZjNiZGIwLAorCTB4Y2UwZTVkZmYsIDB4NDljZGZiOTcsIDB4YTM1N2NlMTIsIDB4ZTgwMWQ2MDYsIDB4ZDZiNmY3ZDgsIDB4OTk5MjViYmUsCisJMHg5NGVkNjAxNCwgMHg2YmE0N2UzMSwgMHg3M2VkZGEyNiwgMHhiMTdhZTBjNywgMHhkZmE4NGVhNSwgMHhmYjBkNjVhZCwKKwkweGZiZjY4N2YzLCAweGI0MTdhZTJhLCAweDJiYTZjMjdmLCAweDljYmI1M2Y3LCAweDlmZjI5NWNmLCAweDYzYzVmYWUyLAorCTB4NWVhZGViY2EsIDB4MTZhZDY5ZjUsIDB4ZTg3MTNmZjAsIDB4MTMxYTVlOWMsIDB4NmYwZDFjNjIsIDB4ZTAwNjY2ZTcsCisJMHgzMzM4ZWVlZiwgMHhlNDQyNjFkZCwgMHg0NWU3ZjJmYSwgMHg5NDlmZTYwZSwgMHgxZmExNDRlOSwgMHhiNWQyM2VhZCwKKwkweDE3ODgxNGMzLCAweGY5ZTgxN2VmLCAweGQxMzc0NGU3LCAweDQ0MTljZjQwLCAweGUwZjg5ZmNmLCAweDY5MDYzOWQzLAorCTB4ZmI0ODIyYzQsIDB4MjBiYTZhNjAsIDB4ZDY2MGJkNzUsIDB4NjcyY2RkMjMsIDB4OTlhYjRhNzYsIDB4NjAwN2QyOTMsCisJMHg5ZDdlOTFmOSwgMHgzOGY0YTdiZSwgMHg3NmIyMGZlZiwgMHhiZTJiYWZjYSwgMHg3Y2Y0ODJkNywgMHg4YTk1YzZiZiwKKwkweGE1ZWIyZDcwLCAweDJmZWIzNzdjLCAweDJkZmNjMWIzLCAweGQ0N2I1ZTZjLCAweDZmY2Y1ODA2LCAweDAyNWE2YTc5LAorCTB4ZmYzY2VmY2MsIDB4Y2U5OGEzYjIsIDB4ZTI3YzI1ZGQsIDB4N2EzZjg4OTMsIDB4YzEzZWFmMTAsIDB4ZmExMTNlYjMsCisJMHg5MmE1ZmJiZiwgMHgzZjkwNDlmNSwgMHg4NWQ3Y2I0NywgMHgxNzVmMmJmZCwgMHg4ZjA0N2U0NSwgMHg5N2ExZjgxYiwKKwkweGUzNDFjYjhmLCAweGFiOTU0NmQyLCAweDA5ZjJhMWY4LCAweDlkYTAxMGU2LCAweGZmMDY4M2ZlLCAweGZlMDBiNGNlLAorCTB4ZGZlODdlMjgsIDB4ODk4ZTUwOTMsIDB4N2FlMGY3ZmQsIDB4YzQzNGRmYmIsIDB4MDgzZjdhZTAsIDB4MjljNzFiZTIsCisJMHg4MDZiMTgzOCwgMHgyYWQ2OTBmZSwgMHg4ODJhODg2MywgMHhlMTYyMWZkZSwgMHhiOWY3YWM3NiwgMHhhNzlmZGY0YywKKwkweGNmZWZhMjMwLCAweDQwNjBlNjA1LCAweGE2NzQxN2JmLCAweDVhZTUwMTY2LCAweDA0NTZjYmFhLCAweGJlNjBhY2Y4LAorCTB4NmVlNTA2MjYsIDB4MzgwNTRiY2QsIDB4ZDcyNTIzNGYsIDB4MWZkNzQ0YTcsIDB4YTYxNTM3YjUsIDB4YTdmN2ZjYTEsCisJMHhmN2ZmMjgwYSwgMHg2OThkZWMxOSwgMHg1ZDg0ZmRhYSwgMHhlMzIxNDA4ZiwgMHgzZjlmMzg2MSwgMHgwZWM3NzZjMCwKKwkweDNlMjg0YmM1LCAweDE0NDI5ZmY2LCAweGYzM2QwNjYzLCAweGJmODg4YjE5LCAweGViZTQ0NGQ5LCAweDU3ZjEzZDQ0LAorCTB4MDY2ZDRlMjMsIDB4M2M5NGUzZjYsIDB4OWZlZGExYTYsIDB4ZjllZGYxOTAsIDB4ZWY3NDRiNGEsIDB4MTZlY2YxODMsCisJMHhmN2MzZjU0MiwgMHg2MGY4NDMyYiwgMHgyYzNmMjQzZiwgMHhhN2QxZmE4YywgMHhmYTU2M2U3MSwgMHg2NGJlYTY2MywKKwkweDZhNzVkMDI3LCAweDg2OTc0Yjg0LCAweGM3MTZjMTgyLCAweGNiOTk4YmU1LCAweDRmYjQ5ZTk3LCAweGU2N2Q3MTMzLAorCTB4YzhhOGRlNGMsIDB4ZGQ4ZjZhNjUsIDB4MDlkMWU1YzYsIDB4Zjg0M2U0OWQsIDB4MWQ5YTQ5NDQsIDB4OWM4MGQ3MjQsCisJMHg5N2Y4YWJiZCwgMHhiYjhmMTFhNywgMHgyZDJlYTY4YywgMHhkZDE2ZWNhNCwgMHg3ZDk0ZmE5ZiwgMHhmZjcwN2QzMCwKKwkweDdmZDk0YmJkLCAweGVmZmJlMTZmLCAweGVmYjU5OTFjLCAweGYxYmFiYjEyLCAweDNhZWNjNjdiLCAweGZkOTcyZmM0LAorCTB4NmQ4Zjk5NWUsIDB4ZjIyYWRmYjgsIDB4MGI3ZWM4NzEsIDB4ZjljNWViMDMsIDB4ODMyYjI1MTMsIDB4YzdjMGI1NzQsCisJMHhkYzI1M2FiZiwgMHgzNmM0N2M4ZiwgMHhmNGY4ZDJlNywgMHhmZTBjZmNiMiwgMHg1OGMxNWFkZSwgMHgxM2M2NTFhNiwKKwkweDE5NzA0YmZlLCAweDIwY2U2NjU5LCAweDU2NjM1NDljLCAweDliMWUyOWMxLCAweDA2YzhmZWFhLCAweGU2OWU1NTQ5LAorCTB4Njc5NTUxY2IsIDB4NzA1NWRiMzQsIDB4YWFiMTRiNTYsIDB4ODczNmE4ZmUsIDB4OTdmNWNlMGEsIDB4ZWRlN2VhYWIsCisJMHgzMWUwYWE3NSwgMHhmYWFhMTVlZCwgMHhhYTVjM2I2MywgMHgxYWFlYzJmMiwgMHgxZWI4Zjk1NSwgMHhkMDllMGE4ZiwKKwkweGZmYWFhMGRiLCAweGFhN2RhNzc3LCAweGNkN2Q0OWYyLCAweDlmMjlmMmFhLCAweDViZTBhOGI1LCAweGY1NTRkYmZiLAorCTB4NTdlYWJmNmYsIDB4N2ZiMDk3OTUsIDB4MzU0Zjk1NTYsIDB4ZDNjMTU3ZWUsIDB4ZWFhYmFmY2MsIDB4MTZmYjgwYmYsCisJMHhiNjFkY2ZmMCwgMHgwY2ZlNTU2ZSwgMHhiYmVhYjhlOSwgMHhhYTRlNzMzYiwgMHg3NWU0MTdlMCwgMHgyNzBlMmRmNiwKKwkweGU3MmQ2OGJlLCAweGZiNmNkMWZiLCAweDU4NzZhYTA3LCAweGZlYmU2OGU3LCAweDdiNmYzYzYxLCAweDUxMGIxZmNmLAorCTB4ZjRkNzZlNGUsIDB4NGFkZDIxYTcsIDB4ZjIyMjczNWEsIDB4ZGNmMTY2NzEsIDB4MmM2NjQwNDMsIDB4MTRhYWIxZGIsCisJMHhmOTRlNWJjNSwgMHgxZDMwODc1MywgMHg4YTVmZGNlZCwgMHg3MTVmOTI2YywgMHgwNWE2MTBmMiwgMHhkMGE1OGJhZSwKKwkweDQ0ZDdiMzFjLCAweGM4YjRjNjFmLCAweDhhZDUzODUzLCAweDNkY2MzNGE4LCAweGRmNDRlOThjLCAweDU3MjhhOWFhLAorCTB4M2Y1Yzc4NWYsIDB4MmEyOGY5MWEsIDB4MDc0ZmExNDYsIDB4ODI3ZDY3ZDEsIDB4N2ViOWY4ODYsIDB4ZjI4ZmM5YjEsCisJMHgyNGM1MzJjNywgMHg5NjEzOTAzMiwgMHhiMWQ2NWExZiwgMHg5YThiNGMwMiwgMHgxYWY2NmQzMSwgMHhmYTBmNWY5OSwKKwkweGJhNTE5NzgwLCAweGZlNjY2YmM5LCAweGFmNjcyMDZjLCAweDkzZmFlMDhkLCAweDQzYTc5NWY3LCAweDQ0YWIyMzNiLAorCTB4ZTY5OWFhMzMsIDB4NDgyNThmNTEsIDB4ZTVmNWJlZDAsIDB4NzY1ZDljOTYsIDB4YjBlZGQ2YzYsIDB4NDJlNWQ3Y2YsCisJMHhjNTllMTlmZiwgMHg0ZTAxYTIzYiwgMHgzMDA1OGU2MywgMHgyMzk4MTY3ZiwgMHgyNWIxOTkzNiwgMHhmYTc2ZGYzYiwKKwkweDk3YzI4N2YyLCAweDI0NGQ5ZDMzLCAweDVjZjZjNDE3LCAweDc2OTRmZmQ0LCAweDZlN2U5NjM3LCAweGRmMjE5OGQ3LAorCTB4MTFlNzRiZjcsIDB4ZjFhZGY3OTgsIDB4YzIxZGY0ZTEsIDB4YTc1Zjk5MjUsIDB4YjYwYjQ3NWQsIDB4ZjY5ZWY5MGIsCisJMHg0Y2ZjN2MxMCwgMHg5NzdmZGYxYSwgMHgwYTdkNzNhNCwgMHg2NmViODQ4NywgMHhhY2M2Y2JlNSwgMHg4MDhjYTdhMCwKKwkweGE5M2FkY2I5LCAweGYwZWEwY2UxLCAweGEwMjdkOWEyLCAweGUwZDc2MjdjLCAweDg5MmI5MDdiLCAweGUwODMyOTU4LAorCTB4NGUwMWMzZGIsIDB4NmM2MjU4NDAsIDB4YzdlYjk2N2YsIDB4YzVkNWFmZDgsIDB4ZmEwMGQ5ZDgsIDB4YzM1MWE4NDksCisJMHhjZjllNjE1YiwgMHhhM2UyMGU2NiwgMHg4OWYxYWE1YiwgMHg4ZmRkMDYzMCwgMHhmNDNiNzY5ZCwgMHhjNjBhYWRiMywKKwkweDNkNTZmMDBiLCAweDdhOTQzN2Q3LCAweGY2OGMzNGEzLCAweGY4ZDMyZmY3LCAweGNkYWVjZTdlLCAweGY0OWVhM2I3LAorCTB4ZTc5ZTNjYTUsIDB4M2U4YmZkYmMsIDB4ZWI3YjQ0Y2UsIDB4MzU4OWE1MmEsIDB4ZjIwNWMxMWUsIDB4YjRlOTVhY2QsCisJMHhhZTllYTBmYiwgMHg4NDIzZTYxMSwgMHgzNDhiZjJkZSwgMHgxZGQ3YmU5MSwgMHhhMDkwNDQ3ZSwgMHgxMjY5YTdkZSwKKwkweDdlOTU4OWMxLCAweDBkNTI3NzFhLCAweGJmODAxYmI0LCAweDY2MDlmNDRkLCAweGU2M2RiN2M4LCAweDliM2YxMDEzLAorCTB4ZjA2NzY5ZDksIDB4ODg1YTMzMWQsIDB4M2NjOGQ3ZmUsIDB4Y2JmODZiNjEsIDB4MGY0MThmYTIsIDB4NzY5ZDc5ZDMsCisJMHgxM2JiYTdhYywgMHgyNzFmMzNlOCwgMHhiODY2NjNkNCwgMHg0N2UzYzk0ZSwgMHhhM2ViMTBiMCwgMHgwZDNlODZhNCwKKwkweDlmNDBkYzczLCAweGQ0N2Q0YThmLCAweGRkYzVmYjQzLCAweGU4MGIyOTI2LCAweGE2YzU4NWZiLCAweGRhMjExZDhhLAorCTB4OWY5ZTU0ZmIsIDB4ZmVlYTMxMGQsIDB4MWYzZTVhMmQsIDB4NmNiZWRjOGEsIDB4ZjBhOGViZTYsIDB4YTY2ODlhZjEsCisJMHg1MjZiZTM5MiwgMHg4NDZmNWJjNiwgMHhjOGNkYjVhZiwgMHg2ZWY4MDE1YywgMHhkMGNjN2U4NSwgMHg1NWFiZTFiZSwKKwkweGU4M2YxYzY2LCAweDRmZWE0ZWQwLCAweGM3NjRmMmU0LCAweDZlYzg3MjhmLCAweDIxYzc1ZTBhLCAweDNmOTQwOGY0LAorCTB4YTNlOTA4YTIsIDB4N2MwOGRmY2YsIDB4ZGJkMmE4NjgsIDB4ZmViMjZmNTEsIDB4N2I4MDkzNDMsIDB4MTE2YjIyNzMsCisJMHg1MzU4YmU1MCwgMHhkYzQ0N2FjYSwgMHhhZTU3NDRkNywgMHg3OTNlODQzMywgMHhkNjU0YmEzMywgMHg4MzlmZDk0ZiwKKwkweDNkNzc0YmQ3LCAweDljMTJmZGUzLCAweDMxZDU3ZmVmLCAweDFmNTZjN2Q0LCAweDA1NzE4ZjhmLCAweDNhNGM1M2QwLAorCTB4ZDY2MmNiYTcsIDB4OThmZTQ1YTIsIDB4YmQyOWRhY2MsIDB4N2E1MmY1ODUsIDB4ZDRhN2ViMWIsIDB4YTYyMmNjYzEsCisJMHg2OTRlY2NhNSwgMHgzYTUyNzMxOSwgMHgyZDI4Nzk5ZCwgMHhjZTk0MmQ2NywgMHhjZTk0ZWQ2NCwgMHg4Mjk0YmQ2MiwKKwkweDkzYTk0MzNkLCAweDlhZWVjOTk5LCAweGE2MzdmYjA3LCAweGQyOTM5ODBiLCAweGE1MGYzMWVmLCAweDdlOWNlOTk5LAorCTB4YzEwYjU4MmIsIDB4NGE3NmIzNzcsIDB4MjRlZjgwM2IsIDB4OGMwMWZhM2QsIDB4OWM4Mjc2OTQsIDB4OTA0ZGY0YzMsCisJMHg3OTc2OTg3MywgMHhhMzY1MjYyNSwgMHhkMjg3MjAxZiwgMHhhNTNiNWUyMywgMHg5NGM1YmNjNywgMHg1NDFkNzhmNiwKKwkweDM5NmY2ZGVmLCAweDlkNzhlZmE1LCAweDU2ZjA5ZTk0LCAweDc1ZWJkYTUwLCAweGRlNTNiZDUxLCAweGY1ZGY0YTFhLAorCTB4Y2Y3ZDI4N2EsIDB4NjllOTQwZGIsIDB4ZGZkMjhmYWYsIDB4MWQyOTliNzksIDB4YzY3ZTA3YTUsIDB4MmJlOWNkZjksCisJMHhmNTNlN2Q0NCwgMHgwMjQzYmQyMywgMHhlNTkxZWNmOSwgMHhlNjg3NjFkMiwgMHhiOGYxZGM5OSwgMHg0MDY2MWE2ZSwKKwkweDIzNWIyODNhLCAweDczNTlmZDIwLCAweGE0M2YwZTM0LCAweDBiNTY3MjliLCAweGUxYmE0MmY3LCAweDBjZGZkNzA0LAorCTB4MGZkMjQ4ZDYsIDB4ODJmNTZkYWQsIDB4MDg3NmVkMDQsIDB4NTgwOGRhN2QsIDB4YTllOWU5Y2IsIDB4OWYyMDhkNzMsCisJMHhiYWQ5M2E0YiwgMHgxOWMyM2IwOCwgMHhlZTgxMTk0ZiwgMHhmZDNjZTg3NiwgMHg2NGJjYTAzYiwgMHgwOGQ3MzRhNywKKwkweGM4ZTRkNjdiLCAweDhmYjFmZjUzLCAweGU5M2U1NGMzLCAweDAzMzQ2YjA4LCAweGZiM2QyYjNjLCAweGUzODEzOGE5LAorCTB4N2JlZmMyODEsIDB4YWVlNjczM2IsIDB4MjUzYzQ0Y2QsIDB4MzRjNWYzYzIsIDB4YmY1MTJjMzAsIDB4ZmE0NGM0N2UsCisJMHhkOWRiNjE3NSwgMHg5M2MwMGQ0MiwgMHg2ODQ1NGMxYSwgMHhlYmQ0MDYxNywgMHhhZTFmYmE0MiwgMHhmMmI5NzA1ZSwKKwkweDk2NTViNmRkLCAweDBkODc5YzQ2LCAweDBlNWE4MDlmLCAweDdkMTlhOTU5LCAweGQ1ZjNhYjg1LCAweDVlYmU2YWVkLAorCTB4ODM3YjRjZmYsIDB4MDllYjAzZmUsIDB4N2Y2ZjY4MzcsIDB4N2QzMmEzOTYsIDB4M2E3ZWZmYzIsIDB4ZGQ2ZmE2MGYsCisJMHg2YmY2OGZmNSwgMHg4ZTY0MGZjOCwgMHg1Nzc0ZmRjMSwgMHhmZDMzOTczNCwgMHgwNGVlOWZhMCwgMHhjOGM1NzdiYywKKwkweDFhNGNjNmYwLCAweDVjNDNjYTE3LCAweGQyOWIwZGI3LCAweDc3ODAzZWZkLCAweDFmNTczOTg1LCAweGQ0N2ZmMmM3LAorCTB4ZDE0Mjc3ZDgsIDB4YTZkNzcwYWUsIDB4YzkzMzgyNWMsIDB4YzYyMWIxM2YsIDB4OGY5MzEzOTMsIDB4OTdkZjNjZmEsCisJMHgwZDFmOTM1YSwgMHhiZmY4MDI5MywgMHhhZmNiOWQzOSwgMHhlOTVjYjdhZCwgMHg0NDc2ODFkZCwgMHhjMTY1ODZiMywKKwkweDk3OWIzYjc3LCAweDc2ODFjYzZmLCAweGY0MTliYzdlLCAweGRjNDc4MDA3LCAweDBiMzFiZDVhLCAweDZhMzdkM2NhLAorCTB4MTk2NTZhMjYsIDB4NzhmYzc4ODcsIDB4NGQ5ZWY1NzMsIDB4OGYyNTVmYTgsIDB4NzY4NmM5OGUsIDB4OTk3OTY0MzMsCisJMHhiODU3ZGIxYSwgMHg1NWJjZTgwNiwgMHg5NWE3YjZhZiwgMHg3ZTY0OWZmNCwgMHhjZTY2ODZhOSwgMHg5NTRkNmM4MiwKKwkweDNhMWRmNGVkLCAweGRmYjgxMTU2LCAweGVmYzY0Y2ZkLCAweGQ1M2M1OTU3LCAweDU3ZmRjZWRkLCAweGZlZTE5MTg2LAorCTB4MjVmYzYwMjcsIDB4YzNiZmI5MjMsIDB4ZmU0OGNlYjIsIDB4N2ZmMjRiMGUsIDB4Y2EwM2JjOWQsIDB4NzYzNGRiMmQsCisJMHg2YjQ0ZTk1NCwgMHhlYTFkNWFlZCwgMHgzYjU5OGJmYiwgMHg4MTBlZTNmMiwgMHhlMTRiZWY3ZiwgMHgwYTI4MjE3YSwKKwkweGVjMDM3M2U5LCAweGQzZGVhZGYyLCAweGZjMDMzMjhiLCAweDlmMGFiNjg0LCAweGM5N2JmNjgwLCAweDBmYTE1YWM4LAorCTB4MDdlNDlmZjcsIDB4MmRmYmI0MDUsIDB4MTVjMTJlMTUsIDB4ODc4MWY2ODksIDB4Yjk2NWNmY2EsIDB4ZjgwZTkyN2UsCisJMHhmYmUxMmFkOSwgMHhiOTkyZmQ0MCwgMHhhMTVkNzAxMiwgMHhkMjc2OGFkZiwgMHg2MDUxNThmMywgMHhmOGIzYTc3ZiwKKwkweDNiMDdhYzNjLCAweDc1ZDVmNDk5LCAweDc4MmJjMjdhLCAweDk3NjU0ZWJlLCAweDk1ZjZjMDFlLCAweGZmMmUwYzc1LAorCTB4YWJiNzA2N2UsIDB4NWQwMTNkNzcsIDB4ZTI0YzFmMjAsIDB4ZGQ4OWYzNzYsIDB4Y2UzZmE0ODksIDB4YTA3NzBkNjksCisJMHhhOWUyNzRmZCwgMHg2ZjA0NjVkMSwgMHgzZDQwZWM5OSwgMHhjOWVlYzRmMiwgMHhiMzlkMzFkMywgMHgzYmQ1MjY2NSwKKwkweGI0MWViMDIxLCAweGI5NmNlNzg3LCAweGQ0ZmNjNDViLCAweGRiMGJjMDBjLCAweDdhMjdhMzNiLCAweDQxZTViMzljLAorCTB4Y2I0N2ZiZjksIDB4ZTM1OGJjYjAsIDB4OTFkYTA5ZmIsIDB4MjJmYjhkYzUsIDB4MWM5ZTRlZDAsIDB4YTYxMjRhZjksCisJMHhmNTdkMzQyNywgMHg1ZGZmZDBkZCwgMHhkYzJiZjY2NiwgMHhlMzFiOWQ5ZSwgMHhmZTFjYjFmZSwgMHg3NGE5ZjczMSwKKwkweGJmZDdlYTFkLCAweGY1YTc0ZjRiLCAweGM0MWNjZjljLCAweGVjODM1MDA3LCAweGY2ZjY1YmJhLCAweDhhNGQwNjFlLAorCTB4M2ZkZWQ2ZGQsIDB4ZTY1Y2NjMTUsIDB4YzExZjMwZTgsIDB4NWVjYmI0YjQsIDB4ZDY1N2QzODYsIDB4ZTk4MjNjZTMsCisJMHgxOTRmNWVmNCwgMHhhN2U1MmZhYSwgMHhiYTYwOGU1YiwgMHgzYmY1ZDcyNCwgMHhmZjE3OWY5YywgMHhiY2FmN2JlMSwKKwkweGM3YzhmMDA4LCAweDA3YThjZGViLCAweDM3ZDEzZTY1LCAweGViZjkyNzYzLCAweDIxZjkwYzc0LCAweDQ1YTc5MjZiLAorCTB4NzQ2YzA0OGIsIDB4Nzg3Y2EwYzYsIDB4ODM1MTY5ZjYsIDB4YWQyMWI5ZmIsIDB4YzM2MTBjMjUsIDB4YjQxYWU5N2QsCisJMHhiNzQ1NzcwYiwgMHhiM2I4ZDBkNCwgMHhlM2NlMTljMiwgMHgyMTBmYjBkYiwgMHgzYjQ1NjQ1ZCwgMHg4MDlmOTA2MywKKwkweDNlMWQ2OTJmLCAweDEwZDNlOTkzLCAweDYzNDczMWVkLCAweDFmY2YxODdlLCAweGUxY2UxN2E4LCAweDVhZjUwM2YzLAorCTB4MjdlYTA0YzIsIDB4MTNmYjIwNDYsIDB4YmZkYzA2ZDQsIDB4ZGRmZWYyNmQsIDB4MzgwOTNjYzYsIDB4Y2Y0OGQ2MWYsCisJMHg2NGViZjQwZSwgMHg2N2ZlNzA5NSwgMHhiMDJlOWM5MSwgMHhmYTQ0ZDM3YSwgMHg5NmNkOWM4NCwgMHhiODlkY2YxNiwKKwkweGU4OTc1NjBlLCAweDNiYTQwYmViLCAweGY0MDcwNmQ4LCAweDE5ODI3NDkxLCAweDA1NWJkN2RhLCAweDIxOWM4MzBlLAorCTB4N2U4N2YwYmMsIDB4NDJjOThiMGMsIDB4YmY4MjhkN2EsIDB4MGJkYTAyYjUsIDB4MWM3MDMzZDAsIDB4ZGY4MzRjZjMsCisJMHg5YjE3NzQyOSwgMHg0MjM1YzdjMSwgMHg2NWFjYmZhNiwgMHhkZjA1M2RiYywgMHg5ZjJlMGNiOCwgMHg4MzQ5NmYwMSwKKwkweDdjNjU2OGY4LCAweDAwOWExYzYwLCAweGQxZWEwMjdjLCAweDY2ZjAwNmY4LCAweDA1ZDIxYjc2LCAweGE3ODE3YTQ4LAorCTB4YzcwMzEyNGMsIDB4ODQ3MWFkNWYsIDB4N2E2NDVkYTEsIDB4NGZlOGZiZjUsIDB4MDIzOTQyODksIDB4Zjc1M2ZlNzgsCisJMHg2OWYyMjMyNCwgMHgzMjcyMzhmMCwgMHg0NmRmMDhkMiwgMHg2ZjUxODdkMCwgMHhmY2UyZTk5ZiwgMHgxMWU5NThkYiwKKwkweDE4NDIzZWM4LCAweDNhMmM5ZmM3LCAweDM1NjgxZmQwLCAweDAxNzQxNmFkLCAweGYzMjZiNWUzLCAweGE1NjY3YTdkLAorCTB4Y2FlNTFiYTcsIDB4M2IwOGUyY2MsIDB4YWM5ZGY3ZDIsIDB4ZjM5OTlkN2QsIDB4YzA0YzkxZjcsIDB4ZjgxYjE0NmYsCisJMHg0MWM0ZDg5OSwgMHg0ZjQ3ZjBiZCwgMHg5NzEyN2JiZiwgMHg5N2I1OTkzNCwgMHhmOWZlZTJlNCwgMHg3MGIzZmRmOCwKKwkweDNhM2ViNmZkLCAweDRmZjEwN2IzLCAweDNiYWE3OWNjLCAweDVlNzQxYTA2LCAweDE5N2RkNzk0LCAweDZjYTRlYmY3LAorCTB4MWMwZTNmMTMsIDB4ZTAwNzkyNDcsIDB4OGQ0NGJmNDAsIDB4NDFlODFjYmEsIDB4NjU3NDJiMDUsIDB4NzFhMjFhMTMsCisJMHhlNDQ0ZDFiZiwgMHg3YTgxOWNjZiwgMHhlNDg2OTQ0YSwgMHg2MTI5YzgzYiwgMHgzM2ZkNDg0MSwgMHhmOWU0YWU4OCwKKwkweGFlZTdkNjU3LCAweDM3NWE0YzhjLCAweDAzYWY4OWFiLCAweDE3MWJiN2ViLCAweDU1ODNjYTQ2LCAweDZkZmEwOWQ2LAorCTB4MDExZjM2MDQsIDB4YTY1OGRmNzQsIDB4ZDc2ODBiZjUsIDB4YWMyOGZkNjIsIDB4OTE5ZGUyY2YsIDB4ODc2OWQ3NDMsCisJMHgwMzM5OWE0ZSwgMHgxYWMzZjRlNSwgMHg3NDM2NmVmMywgMHg3ZWRjODE1ZSwgMHhjM2VkN2E0YiwgMHhmOTBlNTQ3MSwKKwkweDdkZmM5MWEyLCAweDQzNmFmODAxLCAweGI4ZjVlYWMxLCAweGFjNmRmZDU5LCAweGI0OGNlZTZiLCAweGM5ODlmOWExLAorCTB4M2VlMjY2MGIsIDB4NjhjYjU4OWIsIDB4NDdjYjgzZmQsIDB4NTc1ZWE2M2QsIDB4YTNjNzM3YjIsIDB4YmJmOTg4ZmYsCisJMHhjZTdhYzFiZSwgMHg4NjU1ZGU0YywgMHhiYWYwN2NmYSwgMHgxYTk3NzQyYSwgMHgxMDVmN2ExYiwgMHhhNjVmMzkzMywKKwkweDk1NGZkODQ2LCAweDkyMjE1ZTkzLCAweDExNGNlMDllLCAweGEyZWQwM2UzLCAweDFmN2MxOTBkLCAweDEzMzVmZGJhLAorCTB4MjNlYzQzZWQsIDB4NWNiNzFmYTMsIDB4OTNlZjU3N2IsIDB4YTUwZWIwYjksIDB4YWU2ODM0NTcsIDB4MWNlZmEzYjAsCisJMHg0ODRjZTFmYSwgMHhkZGVhZmRhNywgMHhmNTBhZmZkNSwgMHgxYTY1N2RhNiwgMHhiMDZmZjk4NywgMHgxMGU4MTliZSwKKwkweDlkODBmNWYxLCAweDJmZGFmMDAxLCAweGEzYTBiNGY2LCAweGQ5OTJiMWE0LCAweGZhNTVkZjcxLCAweGYzZjcyM2Q5LAorCTB4NDlkZjlkMGIsIDB4NjQ1NzM1ZjIsIDB4ODIwZTQ5M2IsIDB4MmY0MDFlNjUsIDB4N2U4OTY5MDAsIDB4NTY3MzE5NzgsCisJMHg2OGRkOTBiNiwgMHg1OTA3Y2NjZCwgMHhmNmJkNmU4ZCwgMHhmZTVmYjQyNSwgMHhlZmQwY2Y0OSwgMHhkMjQyYWYzOCwKKwkweGU3ZjhjMDk1LCAweDY1YmE0YTU1LCAweDU5MTdjN2U4LCAweGYzMTFlYTM5LCAweDNmOTRlYzJiLCAweGYzY2VkMmJmLAorCTB4NDE3ZjNjOGQsIDB4MTdmMjgzODUsIDB4YmU3ODNhNTQsIDB4M2U2MWYyMDksIDB4N2JmODU2MTYsIDB4NDJlZWQwYmQsCisJMHg0MWE0OGM1MywgMHg5M2E1NzgzZiwgMHg1MDM1NWY5NywgMHgwZjYwM2JmOSwgMHg4N2M5MDI2NCwgMHhkZTQ5Zjk4NywKKwkweGUxYTY3Y2I3LCAweGI4NGYxMmYxLCAweDBkNWMwMDVmLCAweDEyM2Q0NTkxLCAweDFhN2RkZmNlLCAweDg2MjQxNjdiLAorCTB4MDE5OTkxMTQsIDB4ZTljMmI2N2UsIDB4ZjNmOTQyZDcsIDB4MTM4MDlmY2MsIDB4NmFmNTQ2ZjksIDB4YmZlNDM2NjcsCisJMHg3MTlhMmM5MSwgMHhjMDM4NmY3YywgMHhhYmY5YzY2ZSwgMHhlOWRlNjkxNSwgMHgzNTFiZjAwNywgMHhkOGNmMTRjOSwKKwkweDdkYWRmYjIxLCAweDY3ZTQ4YzJiLCAweGZjODc1ZDA1LCAweGEyNDU2Y2FjLCAweGYyZjBjN2FjLCAweDdlY2RjYjZkLAorCTB4MGU0MGM3ZDQsIDB4ZGZmNjNhZDIsIDB4MDAxZTkyMjcsIDB4MWNlZGYwZjIsIDB4Y2E1ZThiZDQsIDB4NDg0OTg3YjQsCisJMHhiMzdlNmFiNywgMHhhMTJmMmY1NCwgMHgxOTk5MmFmNiwgMHg5NTU5ZjJlZCwgMHg5N2M2YmRiYywgMHhlYTBkN2UzNCwKKwkweDMzNzlhNjU1LCAweGY3MWEwZTkxLCAweGFmZGEzYjMyLCAweDJhOWY1NmNmLCAweDliNzg0NThiLCAweDg3ZTVjZWRkLAorCTB4NTYzNDJlNWEsIDB4ZTEyZTM5NmYsIDB4NzMxYTNjNzgsIDB4N2VlN2Q1MTYsIDB4ZTk0ZjQ2YWQsIDB4YzgzMGFkMmUsCisJMHhkMmRlYjRjZiwgMHgyYTE4ZmNhMCwgMHhkODNkZWM2ZiwgMHhhOTU1NDI0ZSwgMHhiM2Q0MTM3ZCwgMHg4ZmQxMzhjMCwKKwkweGYzY2Y0ZGJkLCAweDE0ODhmNzdkLCAweDhiNTRiMDY3LCAweDQxODJlNjVkLCAweGE3OTE0ZWZlLCAweDE4N2M4MmQwLAorCTB4YzU0NWYyNDUsIDB4NTI1ZmEzNWYsIDB4Zjk5MjNmYzMsIDB4YzQ1ZGY4MTQsIDB4MzE3NmY5NzEsIDB4NWQ5NWM5M2IsCisJMHgyNzIwN2FlYSwgMHg1MmFmMjgzNSwgMHg2N2Y5ZDRkYSwgMHgyZmM1MDRiMiwgMHhlMDg3OWFhNSwgMHhiODdhYjY3OSwKKwkweGU3MWUwYmRjLCAweGMyYmFiOGUwLCAweDM0YjhkMTQ2LCAweGQ3Mjg1YzdjLCAweDc0ZDczZjIwLCAweDJiNzNmMjg4LAorCTB4YTEyNGJiNDUsIDB4ODUzZjZiYmMsIDB4OTJmNTFmZTMsIDB4OWUwMGJhYzgsIDB4MTMzNDVkNTUsIDB4NjZkNjY5ZTksCisJMHg2NjQzYjkwZCwgMHgwYjkyNWViMywgMHhlMmI3MWIzNywgMHg2NzFlMDhkZiwgMHg2NDM2ZjhmMCwgMHgxY2RmNjk2OCwKKwkweDFiZDcwN2QwLCAweDdkNmMxZjQ5LCAweGI4YzFhNGM0LCAweGUxNWJlODIyLCAweDk3Mzg1N2U4LCAweDA5OWUxYTU1LAorCTB4NTMyMjMwZjMsIDB4NmJhZmQ3ZDYsIDB4MzQ2OTNjYjksIDB4YWNlYTlkMTEsIDB4ZmEwNGU1OGYsIDB4YTVkMTg0MWYsCisJMHhlZWJlYjAyMywgMHg3MmJjZWM3YSwgMHg2OGU5MWI4YSwgMHhhYzcyYzFkYywgMHg5MzYzOTY1OCwgMHgyYTdjNjBmYSwKKwkweDkzMzg3M2ZmLCAweGQ2ZjdlNjAyLCAweDdjMTUxOGZlLCAweDU1NDRkNWZiLCAweDJlMTAxMmZkLCAweDhkNTNlNTgxLAorCTB4NjlmMmFhNzksIDB4ZjgyYTcxZTYsIDB4NTUxNGRiMGUsIDB4NTRkMjE5ZmQsIDB4Y2U2NzdjMTUsIDB4YjNmYWFhOWQsCisJMHhmMDU1ZjNlZCwgMHg1NDRiYzU1ZCwgMHhlZTNhZTdmNSwgMHgyZmNmOTU1NSwgMHhiZTU1NDg3ZiwgMHgwNTQ2YjlkMCwKKwkweDdiZjhhYTJmLCAweGFlYzVmZDU1LCAweDkyZjk1NTQ2LCAweGU1NTUyNzlhLCAweDkyOTNmNmMxLCAweDNmNzI2Njk2LAorCTB4ZTc5YjU2Y2YsIDB4OGJlNDgzYTQsIDB4MGU0NjcwNGIsIDB4MTRhOTY3YWQsIDB4M2RkNzAzZmIsIDB4NTNlYjgyMmEsCisJMHhlNTFhZjVjMSwgMHhlMDQxNzhmNSwgMHg0OGZlYjFmZCwgMHhlMjlkZjIwZCwgMHg5MWVkNjM3ZiwgMHhkNzVjZmYyYSwKKwkweDNlYzZjOWU0LCAweGVjNzJmYTEzLCAweGIyZGQyM2VmLCAweGM1MWZkYzEzLCAweGM1M2JmY2ZjLCAweDA0ZmRkNTdmLAorCTB4NTZmNjgzZDQsIDB4NzE1YmE2NDcsIDB4YWJiZjQzYmYsIDB4ZjlmZDBmNGIsIDB4YjdiZmU0MzUsIDB4YjQwYmQ3MzYsCisJMHhlN2FlNmUwZiwgMHg3YWFiOTU3ZSwgMHhjMDBkOGFlNiwgMHg3ZWYzODU4MywgMHg4MjhlNzhlNSwgMHg3MDQ0NzMyNywKKwkweGNmMTg2MGZmLCAweDk1ZmIyNmRmLCAweDUyYmY0MzllLCAweGIwM2Y2MzM2LCAweDE3Nzg3ZTI4LCAweGFjNTA5YmI1LAorCTB4NDY3ZmExZjcsIDB4N2EwOGY2YTgsIDB4NjYyZTViOTQsIDB4MDcyODQ4MzYsIDB4OTdmZjUzOTcsIDB4NTgyM2VjMmIsCisJMHhkMjU2Nzk4OCwgMHgzOThkYWY1NiwgMHhiZDViN2RhMCwgMHhjNjFlYWQ2ZiwgMHg2OTM5OTc1NiwgMHhiY2QwYjNjYiwKKwkweDFmYzhjM2NkLCAweDk0ZTY2OGYzLCAweGU3ODE2YjJkLCAweGEyNTMyMWZmLCAweGY5MTA0OTc1LCAweGY3NWYzZjNjLAorCTB4ZDAzZGI5YzYsIDB4YTU5NTZiNWYsIDB4NzA2YWU1MDgsIDB4ZjNiYjkyNzksIDB4OTQxYmIxZTIsIDB4ZDVmMmJmM2YsCisJMHhkMWJmZWUwZiwgMHg2NzFkNzVmNywgMHg4N2NhMDI5YSwgMHgyNDU2OGJmNSwgMHgxZDAwNDczMiwgMHg3ZWQwODY0OCwKKwkweDc0YzgxZmY5LCAweDI3YWM5ZWU1LCAweDVhMzNkNjNmLCAweGNmYzg5M2Q3LCAweGQ3ZmYyNjE3LCAweGRkZjBiZGM0LAorCTB4M2RjYWU5NzksIDB4ZmU0M2E3YTgsIDB4ZWExZjMwMGYsIDB4Y2Y5ZWJjZDEsIDB4MjllNzQ0YmMsIDB4YmY0MGYzNTIsCisJMHgyYzNiZmQ0NywgMHg5NDFlZGQzNCwgMHg5NWFkMTdkYiwgMHg1YTA3ZThmZCwgMHhkMDk3YTkxZCwgMHg3ZTMyNGZjZSwKKwkweDBlZWE3ZTQ2LCAweDgzYWJiNzFkLCAweDA3ZTdmN2VkLCAweGIyNzZlZGVjLCAweGVkY2JmN2JmLCAweGFkNTM5NmVjLAorCTB4OGNjZjdmOTksIDB4ZTQ1YTI2M2UsIDB4Zjk4ODQwZjgsIDB4MDliNTQ2ZDAsIDB4YWIxMmFmMjgsIDB4ZjkwMjRmYzUsCisJMHg0ZjUyM2JhMiwgMHg0OThiMDQ3ZSwgMHg2YTk4M2JmNiwgMHhjNTAxN2U1NCwgMHg3OTFkZDA2ZiwgMHg2Zjc0ODBiZiwKKwkweDdlNDE1YWU5LCAweDYwMTdmNDdhLCAweDc1ZTUwNzdiLCAweDI0MTdmNjA5LCAweGU4YjRmZjE5LCAweGI1MWJkOGUzLAorCTB4MjNmMjA2Y2YsIDB4MDRmZDEwODQsIDB4MjdmOGExZTEsIDB4YTNmMWZiODIsIDB4Y2NmYjgxM2UsIDB4MjdkMjcwY2EsCisJMHgzOTdkYzc4MiwgMHg2NjUwZTRiMywgMHhmZjQ4ZjIzYywgMHg3ZTUwM2JjOSwgMHg3ZWQxZDI5ZiwgMHg4NGJkMWMzOCwKKwkweDFmY2NlMTQ5LCAweDI2NmY3ZWQwLCAweDcyMjNlZmI3LCAweDkxZjk1NDYyLCAweDBmZTY0NGY2LCAweDY0YjM1ZmY0LAorCTB4MzIxMTI3ZjMsIDB4NDhjYzViMGMsIDB4NTFjNmRmN2QsIDB4YmNkYmRmZDgsIDB4YmIzYTEzYmYsIDB4ZDg0MWY0OGQsCisJMHg3YmZlZDBmNiwgMHhlZWU3ZTY0ZiwgMHhhYjY5NDY1YywgMHgwMWI3OTc2YywgMHg5Y2ZhNjMxZiwgMHhkOWZhNGNkNywKKwkweDg0M2ZlMDM2LCAweDRhMjU3YmI3LCAweDRhMWNkZWZkLCAweDU0ZWQ3YTc3LCAweDRjNWJjYmJlLCAweDgzYWYxZWYwLAorCTB4NzJkZWJkZTAsIDB4OWQ3OWY3NGEsIDB4Yjc5MmZmOTQsIDB4N2E5ZmUwODIsIDB4N2JiNjk0NWQsIDB4MTVmZjI4NmIsCisJMHgwM2UwODdhZiwgMHg1ZjgyMDZkZSwgMHg0NDUwN2Q0NSwgMHhhNTMzNzUzZiwgMHhhODViNzg2ZiwgMHg0NmRiZDNiYywKKwkweDNmNWU5YmYwLCAweGJkZGU1ZGE1LCAweGRiYzg3Zjk0LCAweDZmMTFmMDRlLCAweGJjYzdjMTA3LCAweDc4ZjcwNDVkLAorCTB4ZGI3ZDI4N2IsIDB4ZWZmOTRiZGIsIDB4ZGMxMzRmNzgsIDB4YjE5MzhmMmIsIDB4ZmEyZjVlZTYsIDB4ODRhMjVjMmIsCisJMHhhZWIzZGRmYSwgMHhkN2VhMzM2YSwgMHgzMzFhNjViNiwgMHg5NzM2ZjM4YSwgMHgzOWZhMDU2NiwgMHg3OGYyNTViNiwKKwkweDg2OTU2ZDlmLCAweDg3YTA0MGZjLCAweGIzOWY1MWZhLCAweGY4ZmE3YjJkLCAweDQwNWYyYTM0LCAweDQ5YjE1YmU1LAorCTB4YWJhYzRhMzAsIDB4NTZjYWZlYjgsIDB4MTU5ZWE5ZWEsIDB4NzdjMTAyMGYsIDB4ZmQyYjZhZGIsIDB4YjI1YjgwNWEsCisJMHhiYWRjYTljMywgMHhlZGJiMjQ0YSwgMHgzYTI3OGQ3OSwgMHgyNDVkZWI5YiwgMHhhZTNhYWRiZiwgMHgxMDc0MjgzZiwKKwkweDIyZTlmYjIxLCAweDk3NGE0NGIyLCAweGEzZmM3MzY1LCAweDIzZWY0MjMyLCAweGZjNGE1OTE5LCAweGM3MDdiOWE0LAorCTB4ZjE4MmFiNjcsIDB4ZjU1NWJlMjEsIDB4NWE1ZjhjNDYsIDB4NDlmMTgzZWYsIDB4M2FhZTNmYTQsIDB4YzMyNDc4MDQsCisJMHhjMDdmMTE3OCwgMHg2Y2MyZmM4NywgMHhhZDk3ZDcxOSwgMHhhZjA4ZWI1NSwgMHg5NGYzNjVlNCwgMHhkYTM0Njc3OCwKKwkweGZhOWU2ZGU5LCAweGE1NmY4NGI5LCAweDM2Y2Q3ZTQ4LCAweGZiZThhMWQ3LCAweGU3Y2E0ZTUwLCAweGUxZjFhYzdjLAorCTB4NTBmZTdmNGUsIDB4ZjA4MjMyN2MsIDB4ZGRiOGM2ZGYsIDB4ZDJmYTBjOTAsIDB4MDBlMzEwZmUsIDB4YzdhOTQ3OGIsCisJMHgxOThmNzhmZCwgMHgyNmYxZmE0MywgMHhiMjYyN2FjYiwgMHgzZDhmZjljMCwgMHg2ZGZmMTIyYywgMHhjMWY3YTA2NywKKwkweDdlODFjZjc3LCAweDUwMzk0M2U3LCAweGZhMTU2ZmJhLCAweDcyY2QxZWFiLCAweDNjMDJjYzRkLCAweDNmOGQyNDdlLAorCTB4NTMxYzAyMjQsIDB4YWY0ZmRiY2UsIDB4MWVhMGY3MTcsIDB4YWU3ZGViMGQsIDB4M2UzN2YyMDksIDB4YjY4OWQ5YjgsCisJMHg2OTY2ZWM3MSwgMHhkYjViYjIyZCwgMHhkMDEzNTdiMiwgMHhhODJjOTVmZiwgMHhjYjQ5NDdkNywgMHgzYmI2M2M2NSwKKwkweGQ1Y2Y3Yjc4LCAweGI2NGZlNDhiLCAweDc2OTAzYWFlLCAweDg2NWJmNzg0LCAweGZhOGUyNmZkLCAweDYxYmExODdkLAorCTB4MWE0ODE2MzIsIDB4NTVjOTE5MTQsIDB4MmZlYzQ1ZTIsIDB4ZTVjZGExZWMsIDB4NjZmYzVmZDgsIDB4MjE1ZmQyODcsCisJMHhlNzc1ZjdmNiwgMHg2NWUzZTQ2OSwgMHhiYzA4NTc1NiwgMHgzNzI3OTM4NiwgMHhiMzhiMjM5MywgMHg4ZTQ4ZTMyMiwKKwkweDk0MjRiMTI0LCAweGI4ZWJjZjIzLCAweGU0OWRmMmRjLCAweDg2MWQyNGZhLCAweDFmYjQzNDk5LCAweGM0YWU3ZTI1LAorCTB4ZThlMzgzZDMsIDB4MjQzZDMyMzUsIDB4NjFjNzQyMTksIDB4ZmRlODBkNTcsIDB4ZGRiN2FhM2UsIDB4ZTc0OWM5YjEsCisJMHgwYjNlMzA0YiwgMHg2Yzc1YWI0NSwgMHhlYWYzYWUwNSwgMHhkYWYzNzA5MiwgMHhhNGEwZjQxMCwgMHgwMThlNTA1YiwKKwkweDQ2OGJkZmRmLCAweGI5YjNiNTIzLCAweGUxYTNiNzljLCAweDU2Y2FkY2VkLCAweDMyNjI1YzExLCAweDZiYzg0MmZiLAorCTB4NmU1YTdkMjUsIDB4NGUyYzgxZTcsIDB4YmUwZjQ5YjcsIDB4YWUxOGYxYjQsIDB4M2EzYWRiZWYsIDB4YzY5Y2Y0MTMsCisJMHgwNGVkMTFiZiwgMHhjOTJkMDlkZiwgMHhmYjZkNDRkNywgMHg3ODAxM2Q4ZSwgMHg3OWUzY2IzNSwgMHhiNWNmZWY0ZSwKKwkweDdiNDBmZjIzLCAweDkxNTcyOGY5LCAweDdmYzlmMjVmLCAweGNjMDU2NmMxLCAweDVhZGRmMmJiLCAweGEzZmQ4ZmQ5LAorCTB4MjlhMjFiNmIsIDB4MmViNTVjYmUsIDB4MzZhM2Y1MGMsIDB4YjA3YTI0NjYsIDB4ODVkMTNjZWEsIDB4NDU2MGY0MDEsCisJMHgxZjQxMGNiYSwgMHg0YWY0YjJmYiwgMHgzMjU0ZDUzYywgMHg3YzMyZTMxMSwgMHg3MjhhOWU1ZiwgMHg1ODNlZjAwOSwKKwkweGUxZmI0NTFkLCAweGRlZWY2NWQ0LCAweDViZTAxNjM5LCAweGQ0NzY4OGFlLCAweGU1YWI5ZWNiLCAweGZkMjcxM2U3LAorCTB4MjZlNzQzNTEsIDB4ZGI5YzdjZGUsIDB4YjdmZGI3N2QsIDB4N2JmNDFlYjIsIDB4YjNlOWM4MjcsIDB4N2E0MWU3NjgsCisJMHg3N2IzMzM0YiwgMHg1MmRjYmFjMSwgMHhjZGZmMjI2ZCwgMHhiM2M1NTdhZCwgMHhiOTFhNzY4MSwgMHg3ZGEzYzdhNCwKKwkweDUzMzVmZGMxLCAweDgwM2NhMWZhLCAweGE2N2QyNmZlLCAweGFhMzMwZmFlLCAweGExMjMzZDQ1LCAweGFiNmY5ZDRmLAorCTB4MWE2NjcwM2EsIDB4Y2I1NmQzZjQsIDB4ZjZiYjZlM2YsIDB4N2Q4NDcxZmUsIDB4OTNmMjFhZjUsIDB4ZjQyOWY1MDAsCisJMHg0ZGZlNDA5MywgMHhlNzgwOTdkMSwgMHgxOTFhMzcxNiwgMHgzMmViNzNjOSwgMHg0MWU1MTlhMywgMHhlNDljMjViNywKKwkweDEzNjJkYjVmLCAweDMyMWJhMWU5LCAweDllYTE4NzU3LCAweDhmYWFhODZjLCAweGRlYTQ3NGM2LCAweGE3N2QwM2I3LAorCTB4N2RmZmJiZGQsIDB4ZTQ4MTJkOWUsIDB4ODE3ZjNmMmQsIDB4ZmEwYzU5ODQsIDB4YWU3YWJkYzAsIDB4YjZmYWY4ZTQsCisJMHg3OTQ0Y2I0YywgMHhjM2YyYTFhOSwgMHg4YjdkZmZiYiwgMHhhYzA3N2QwZiwgMHgzNDkwZjA4NSwgMHg3ZTBmOTEyYywKKwkweGUyOWJiZTAwLCAweDJmZGYwMmQ0LCAweDQ0NGU2NzQwLCAweGFiYWU3NGY4LCAweDQyNDNlNTA3LCAweDhiMWJhZjljLAorCTB4NTZjZTlhYjYsIDB4Y2FlMmY5ZDIsIDB4NWQzM2UyMzgsIDB4MzFlOTg3YjUsIDB4MThjOGIyYmYsIDB4OWYwYWU3YzgsCisJMHhmZmZjYjVmYywgMHhiYmU3MWNiNCwgMHg1OWI4MWM5OSwgMHhmN2UzMzdiYiwgMHhiZTczYTU5ZiwgMHgzNjllY2UxOSwKKwkweDE1NGYyMzBjLCAweDlhY2YxOGZiLCAweDRiNmM4YTYzLCAweDdkNTllYWZiLCAweGY2ZWFmZDQ4LCAweGM1NjdjZTZjLAorCTB4NjQzZTdlN2EsIDB4NzJmNGM1NGUsIDB4ZmFmOGMzOGEsIDB4OTZjNzNjNDQsIDB4YTlmOWNkOTMsIDB4NzE0OTEyY2QsCisJMHhkNjc0YjZlMiwgMHhkZjAzNzE4NSwgMHhmN2Y3MGQ3MiwgMHhkYWZmZjFjNCwgMHgzZmM5ZDMyYSwgMHhhMjc4MmFkNCwKKwkweDNlNzgxOTdkLCAweGViODY5NWMyLCAweDE0NzMwNmQ3LCAweGE2YjdmZDA5LCAweGZjY2ViOTcyLCAweGFiYzYzMzFlLAorCTB4NDA5YTlkYTEsIDB4ZjNkZWMxZmMsIDB4OTE5OGU5YTksIDB4MGJmZTRjM2UsIDB4YTQ5ZWYxMmQsIDB4YTNiN2YwMGYsCisJMHgxN2ZkMWM1ZiwgMHhkYWRkZGZjMSwgMHhiZjZmODZhZiwgMHg5ODRiODZhYSwgMHgzNTRmMDU0ZSwgMHg2NjY5ZTFhYSwKKwkweGU2Yzk2YzM1LCAweDM2MWRmYTdhLCAweDQ5MGNmZTc1LCAweDFjYTcyNzBkLCAweDczZjBkMzA5LCAweDdmMDFhNmVkLAorCTB4YmJmMDQ0YjMsIDB4YTA3ZTAxOTksIDB4MDE3NjlhMGQsIDB4YWZhNTI1ZTcsIDB4YWRiMmZjOTYsIDB4OTNkZmRjYTksCisJMHg3M2Y2YWY1YywgMHhiNTk2YjIyNCwgMHg2ZGY5MDIzMSwgMHhmY2I2Zjk1NCwgMHg3M2ZhMDI1NSwgMHg3Y2VhZDU2YywKKwkweDhjMTUwNzk4LCAweGJmZjQ4YWNiLCAweDlmOTVkNzI0LCAweDAyZTk3MThkLCAweDRiM2FlZTdlLCAweGM1Y2RlOWViLAorCTB4MjM4YjY4NzUsIDB4Y2Y5MzRhM2UsIDB4MWZkZDBkMDUsIDB4OTViOGQwYjcsIDB4N2MwZjkwNzYsIDB4ZmE0NWUzMDEsCisJMHhlNjJmODQwZiwgMHhjNzY3MjZiYSwgMHgwNWYwM2U3MywgMHg3ZGY5OTdlZSwgMHhhNTAzZTQzYSwgMHg0MWY4ZTFiZiwKKwkweDM5NjJjN2UxLCAweGFiOWNhMjZlLCAweGE1YjcyMmI5LCAweDk3YTlhYjljLCAweDA0NzVjN2NmLCAweDkyYjljNzlkLAorCTB4ODFlNzQ2NWMsIDB4MDlhZWY0YWUsIDB4Yzg3N2M1MGYsIDB4Y2U2Y2JlNjcsIDB4OTQ2ZTk4NzcsIDB4ZGYyMGQ3Y2YsCisJMHhlZjljZjRmOSwgMHhkNWYwZGYzMCwgMHhmZDI4NjcyYSwgMHhhZmJjYmNmMCwgMHhjYzM3YjQzYywgMHhmOGMwNzFmYywKKwkweGFiNDdiNjU2LCAweDgyNDc3NzYwLCAweGQzYmNmMDM5LCAweDc0MGZmODQzLCAweDNhMzMzN2JhLCAweDBmMmI1YTQ3LAorCTB4YmYzMzhiZTcsIDB4ZTkwOGQzZGIsIDB4MGI5NzVhNWIsIDB4ZDY2NTY3ZDcsIDB4MzM4ZjNkNTksIDB4ZmU1MWViZjUsCisJMHhkZmY3OTc5ZSwgMHgzOGRkODIwZCwgMHhkYjk0YzA1YSwgMHhiYjY2OGRhNSwgMHhjY2JkZmQxMSwgMHg1N2YyYTE5ZiwKKwkweGQ1ODc3ZTI4LCAweDMxYWNkMjJiLCAweDAxODhmZjgwLCAweDRjZDM4MjNmLCAweDMzZTM0ZGU3LCAweDM1MTE4ZmM5LAorCTB4MmIzNzcxZDUsIDB4Y2NmNzNjMDQsIDB4YTIwNDZmOTgsIDB4NTU0ZTg1ZGMsIDB4NjU4ZmM3OTAsIDB4OTdkMGZkOTcsCisJMHgwMzVlMzgzYywgMHhjZTAyYWJmYSwgMHgwZjQ0MTkyMywgMHgzNTczYjkyMywgMHhlNzAxNDk5NSwgMHhmZjY1NWJjYSwKKwkweDliMWYwMGM1LCAweDdmNjA5Nzk2LCAweDc4OTZjYzNmLCAweGQ2Nzk4NjNjLCAweGRhOWZmZjcyLCAweDZhYjg2NjVmLAorCTB4ZDgzM2I1NTMsIDB4ZGZhYWIyN2UsIDB4NzIyZmQ5NTYsIDB4ZmVkNWY2ZjMsIDB4ZjRkNWMzMzcsIDB4MGVjZmRhNjEsCisJMHhiMjFjZGY2YSwgMHhkNTc2YzFmZCwgMHgxMWFmYmM3ZSwgMHgzZTQzNmYxZiwgMHhiNWZmY2UxOCwgMHgxYmE3OTY1ZiwKKwkweGY0NWU5ZTZjLCAweGQ4MThlOTdmLCAweDA2MDcxNDk1LCAweDZhODg5OGZhLCAweGMzNjlmZjIzLCAweDVkNTM3OWY5LAorCTB4YTYwZmRhYjIsIDB4MWY5MjdlNjMsIDB4OTBkNjQ3Y2YsIDB4M2U2MDQ4ZmMsIDB4OTg1OWRmOGEsIDB4NDdkN2YyODcsCisJMHhiYmYxZTc0ZCwgMHgxMzcxYjk2MCwgMHg4Nzk4YzE3OSwgMHhmZDAwZGVhMSwgMHgzZjU3ZjJhOSwgMHg0NmQzZjdjMiwKKwkweDNjNDJlZWMxLCAweGZmZjNjNzgzLCAweDg5YWJkZDhhLCAweGZhNGJkZjFjLCAweDY0Yjg0YTczLCAweGRiZGU4MWI4LAorCTB4ZTMyNTc1ZWEsIDB4M2RjMjFiZjcsIDB4ZmVlYjE4MzUsIDB4NzYyZWJiM2MsIDB4MWIzZGU4M2QsIDB4N2MwOGM2MzAsCisJMHg3MWJiMzU3NiwgMHhmYjg0Y2ZiZSwgMHhmNThmYTcyNCwgMHgyN2EyMWE3MSwgMHgxZDk2ZGRjYiwgMHhiMjdhMDBkYSwKKwkweGE4Njk1ZGU4LCAweGYyMzQ1YWY3LCAweGExZmMyZjM5LCAweDY1YmQ2Y2JmLCAweGZkMTBhNmU3LCAweDAyOWJmYTJiLAorCTB4OGYwMDJiNWIsIDB4OTU2ZGJhMDAsIDB4ZmU4MWU2ZjUsIDB4ZDBlZTI0OTYsIDB4MzE2M2I0MDYsIDB4M2ZhOTBhYjgsCisJMHhkMmEzNWNlNSwgMHhlYjM3ZDM1ZiwgMHhmN2VjYWI2ZiwgMHhkZWIzZmE1MiwgMHg1NTlmMWVhMywgMHg1OWYxYTFlZiwKKwkweGU5NDdmZGU1LCAweDJmOGUyYjZmLCAweGI0ZGQ1ZjA0LCAweDFlOGVkOTNmLCAweDdhYTk2ZmU4LCAweDg3ODM1NjdjLAorCTB4NzJkNTY3YzYsIDB4N2Y0MGUxZmYsIDB4YmZhY2RmNGQsIDB4OTMxZWY5MzYsIDB4ZTFkM2U2NGQsIDB4MGUzN2ZkY2UsCisJMHgxYTc2YWI5YywgMHgyOWI0YWU1MSwgMHg3Zjc5NDBmZSwgMHhiZmI0MTRiYiwgMHgzN2Y3OTZhZCwgMHg3MTRiZmJlNSwKKwkweGJkZGZlNGU5LCAweDE4ZGYzM2Q0LCAweGZkYzM1ZjZhLCAweDI0N2FjOThjLCAweDI2NDhmNTkzLCAweGNmMDg5MWViLAorCTB4M2VhNjdhOTksIDB4ZjBiMGU4MWUsIDB4MjJmOWI2YzUsIDB4MWU3M2UzZWMsIDB4MTUzZTMzM2EsIDB4ZjYyZjE5ZTAsCisJMHg1ZjYxMTdjZiwgMHg5OWUyZjM5YSwgMHhjOWYwNDkwMywgMHhjY2JlMmZjYiwgMHhlNjc4N2ZjYiwgMHg5Yjk0MzI0YSwKKwkweDJmY2RlZjdjLCAweDk2MmEzODAzLCAweGRlMGFjN2VmLCAweDhkYjdiZjRhLCAweGJiYTM3YWUyLCAweGJmZWU3M2UxLAorCTB4ZmI4YWY5MDQsIDB4ODdhYTYzNTYsIDB4NDJmMTdmYTEsIDB4MzJkNDdmNzIsIDB4ZTk0ZWVmYTgsIDB4MzEwZjJjYjcsCisJMHg2ZWVhNGEyZiwgMHg0NjdlNGYzOCwgMHhmZjI4NzkxNCwgMHg0MGJmZTFlNiwgMHhlZTUzY2ZiNCwgMHhlZmFiOTQ2NywKKwkweDZkNDU0NDY3LCAweDhjMmZmZDIyLCAweGVmMjhjZGY5LCAweGJhMGU4YzIyLCAweDI4ZDZmODRmLCAweDY0MmMxZmJlLAorCTB4Mzc2ZTBhZjYsIDB4MzlmMjU5NDgsIDB4MzFjZmJhMGQsIDB4ZDc2ZTU4YmYsIDB4YjFjZmNiN2MsIDB4YjFjNmExN2MsCisJMHhkZmQ5ZWQxZSwgMHg0NzhhYWE0ZSwgMHgxNzM5NThmNSwgMHg3Zjc4Mzc5NywgMHgxYmY1ZDc3MiwgMHhiZTBlMWY5YywKKwkweDIzZTczOTNmLCAweDIzYzJlYjgxLCAweDNiYTViZmI4LCAweGI5ZjdlMjU3LCAweGE4ODZmYzAyLCAweDlmMzcwZWY3LAorCTB4N2RiOGEzYjUsIDB4MGU5ZjM4M2YsIDB4MGUzMTlmM2UsIDB4ZmVlNjlmM2UsIDB4ZmViMGI1YTgsIDB4Y2I3ZWU4ZWUsCisJMHg1ZDlmYzQxMywgMHhjODZiZTcyMSwgMHg1ZmNkMDZiYywgMHhkOGE2MjhmZCwgMHhiN2E0NWE3OSwgMHgzMmI3Y2Q5YiwKKwkweGMxZjljYWFmLCAweGEyY2E0MTQ2LCAweDc5NGZlYWZkLCAweDMxODNmZDJhLCAweDhlMmExNGJiLCAweGI4MTlmNDgzLAorCTB4NGU2ZGVhYmYsIDB4NWQxOWZlODYsIDB4Y2YwNzNkOWMsIDB4NDVmZTM3OTUsIDB4ZGU1Y2YyMWIsIDB4ZDYzZTc5NmUsCisJMHhiOWQzODU0NiwgMHgzZDI4YzZjZSwgMHg1MWRkZGJkOSwgMHg5N2ZhMTkzMywgMHg5YTc0ZDM0NSwgMHg3MmE4YjI5NywKKwkweDhkYTk2ZjNhLCAweDhmNjhlZDY1LCAweGQ3MjM5ZjA2LCAweGNlOWJiODhlLCAweDY4YWQ2OTAxLCAweDcwM2E0MDQxLAorCTB4YTQ2MWQ5MmUsIDB4ZThiOTg5ZjgsIDB4YzVjOGU3ODYsIDB4OGYyMzlkOWIsIDB4OTFjZmM5OTksIDB4NzQyNWU5NDcsCisJMHhlYTQ1YjQ1OSwgMHg3ZjIzOWU0MywgMHhmN2RmMTQ2YywgMHg3MTNjNzFiYiwgMHgyNzhjM2Y4OCwgMHhhMjFjNzA2ZCwKKwkweDMxZDFjNzk5LCAweGY1ZjIwMjNmLCAweDdmMjMxNzY2LCAweGM3ZGUzY2JhLCAweGVhNTA3NWU0LCAweDg2MWVjYzFiLAorCTB4YjdhYjQwZjIsIDB4NjhhN2E4NGIsIDB4NjEzZWY5YzMsIDB4NGU1ODY5YjAsIDB4ZjdjOGJmMDgsIDB4ZmJlOGU5NDcsCisJMHgzNGNkNzI0ZiwgMHhkNzIzMWFhZiwgMHg1YWZjZTdjYiwgMHg3YTRmZTkwOCwgMHg0ZmUyOTQ3NSwgMHhjMzY3NGQwYSwKKwkweDBkM2NjOWQxLCAweGYwYTc0NzNmLCAweDllOTMwMmUxLCAweDMwMmRmN2NlLCAweDBmZDE0YWQ5LCAweGVmMDgwMGIyLAorCTB4ZmE4MDk4YjMsIDB4ZjdlMjJkYjcsIDB4MGRiYjQ1ODEsIDB4NTMzN2U3ZTksIDB4NmZmOWZmNmUsIDB4YjlmOWJhMTgsCisJMHg0MzM1M2U3YywgMHg0ZWUzZjc0NywgMHg4ZjYxY2MwOSwgMHhkNTdlN2ExOSwgMHg4NjllOGNlOSwgMHg2NmJiOWE2ZSwKKwkweGVjODc1OTlkLCAweGVmZjJlMmY3LCAweDg2N2I2MTE1LCAweDE2NzU1M2UzLCAweDc3OWZlYzg5LCAweGE4NWNhMTQ2LAorCTB4MGYxZjViNGUsIDB4NDJjYWEyZjAsIDB4OTRkZmRkMWQsIDB4MDhlZTQ0ZTMsIDB4ZDE5ZmM3MmUsIDB4YTI4ZTRlYmEsCisJMHg1MWU3ZDE3OCwgMHg2MjQ3NDhhNSwgMHhhM2UyMmE3ZiwgMHhlYTAyODljNCwgMHg5ZTJhMzdiZCwgMHhkN2UxY2RlYSwKKwkweDE4ZGVhMGM1LCAweDdmNjdkMzk0LCAweDFlYjQ2MmVmLCAweDEyN2E1MGI2LCAweDMwMmM0ZmRhLCAweDA3Y2IyMzZlLAorCTB4ZjMwMmEzYjQsIDB4MDE2MjdlZDEsIDB4MmYyYzI3ZWIsIDB4OTA4NWY2YjYsIDB4NjA5YTRhMTcsIDB4MGQ1MjkyZGIsCisJMHhkMDkwOWU3YywgMHhmZjkyYTk0MiwgMHhlZTViNDNhYywgMHg1N2FlYjEwZiwgMHhjNmZkNzVlNSwgMHg2MDFiNGM3NiwKKwkweDhlZDA3MTNiLCAweDJhZTVmYjAxLCAweGQ1MTdkYmNlLCAweDYxZTMyY2E3LCAweDE3NjU3NTQ4LCAweGU5YjE4ZWM5LAorCTB4ODg5MzNlMTUsIDB4MWU2MTA2YmYsIDB4NDVmYjA0YWYsIDB4ZDViMGRlNzUsIDB4ZmJhMTRiZWIsIDB4NmQzOGYyZmUsCisJMHhhMzQ2ZDYyYiwgMHgxYzU1MDMxZCwgMHhiY2RiOWY0OCwgMHg5OTY1Mjk2ZCwgMHhjZWM4ZTM4MywgMHg4ZDEzZTk5MSwKKwkweDE3YTg4OWI2LCAweDVjNzI1ZmYzLCAweDk3ZjQwY2NiLCAweDc0MzQ5YjI0LCAweDUzMjYwMTNlLCAweDZlNjEyZjc1LAorCTB4MzhiNGY0NTksIDB4Y2NkZDQ1MzQsIDB4MmVkMDkyNmUsIDB4M2YzZDI1ZWYsIDB4Zjg5NmJhZTEsIDB4NjJmMGUxMjAsCisJMHhhNGFiNzE4NiwgMHhlZjAxNzZiOCwgMHgyM2Y0MGQwMywgMHg5N2FlNmZkZiwgMHg1YzU3YjllMywgMHgwNDhlMzQ2NSwKKwkweGNlZmVjMGViLCAweGYzOGQwZWM4LCAweDc0Nzk0NWNkLCAweDUxOGU2OWU1LCAweGU1ZDU4ZmMyLCAweGRjZmM3MWM5LAorCTB4ZTFkNWZkYzIsIDB4M2FlODA5N2UsIDB4NDA1N2I2YTksIDB4MzgwYzAxMzgsIDB4NWMyN2M1ZjQsIDB4NDI2YjRjNmYsCisJMHgwNDVhZjI3OSwgMHg2ZGI1OGJmOSwgMHhmMjA3Y2M5OSwgMHg0NTc0NTUyNywgMHhmYjNjZTBlNSwgMHhjOWE2ZmZhNSwKKwkweGRmMGIwNzkwLCAweDljMjA3Y2FkLCAweGExMzZiM2Y0LCAweDI1ZDkwNjY1LCAweDI4NTg2OWY3LCAweDFjOThjZjNmLAorCTB4YzgyOGM3ZWUsIDB4NjA5ZmZjZTEsIDB4MWVhOTRkNmIsIDB4NDRkM2U5ODcsIDB4Y2Y5NzVmMzcsIDB4MWRiMzkwNjcsCisJMHg5ZjExZDlmNCwgMHgxYzU4ZmEyZCwgMHg3NTlhN2JkNCwgMHg5YjczZTlhMSwgMHg3ZWMwZWZkYywgMHgxODVmY2YyMSwKKwkweDdmOTExOTczLCAweDNiOTM4MmI1LCAweGRiZWVmNzM5LCAweGNlODJjZmI3LCAweDU1ZTc0NjEzLCAweDhkN2FjOTM2LAorCTB4NGU0NDRlZDIsIDB4ZDg0NjE1M2IsIDB4NDVjZjBjMWQsIDB4ZGYwNzY2MGEsIDB4OWIzZWNjMDcsIDB4ZjlhYmQ2MGYsCisJMHg3YjQ4NmQyYiwgMHg3OTFjYzFlYiwgMHhiMjZiNDkxZiwgMHg0Y2IyZmQ2MSwgMHg5NGZkMGRiYiwgMHgxYTU1ZjdjMSwKKwkweDcwZGEyNmQzLCAweDBjNjcxYTdkLCAweDcwMzFhOWQwLCAweGNiNGVlODVmLCAweDUzY2YxZjdlLCAweDJjNzQ3YTk5LAorCTB4NzA1OTFjZjAsIDB4MjE3M2M3YWEsIDB4OTcyODM3YjEsIDB4MWQzNzk3Y2YsIDB4OWI0MmU3ZTIsIDB4NzhiZDQ1NGMsCisJMHgxNGM5YTEwZSwgMHhmZWM3NDQ1NywgMHhhOTljZmM0YywgMHgzYTY0ZGY1MiwgMHg2NGRlZjI0NiwgMHgxMzU2ZjFlNywKKwkweGEyMDIwZmVlLCAweDNiYTFlN2M3LCAweDgzY2QxOGVkLCAweDBlNWE2ZjUyLCAweDdiMjZhYjk3LCAweDViZmJjMzE3LAorCTB4ZDUzZjc2ZTEsIDB4M2U5ZDEzMGIsIDB4MTYxZmUwMGQsIDB4NGZmZWU4YzcsIDB4NTVmMzkxOTgsIDB4MzE4ZmFjMDQsCisJMHg3ZTk1ZWY4MCwgMHhkMWQxY2I2ZiwgMHgxNzI1MzViYywgMHg3ZTEwOTZmNSwgMHg2NzA0ZGUyMiwgMHgxYjIyYjY0ZCwKKwkweGRmMzhkYmVkLCAweGI0NjM2ZmQwLCAweGFmOWNkZjQyLCAweDViZTc5NzFmLCAweDNlNTFhNzY5LCAweDQzNGY3YWZmLAorCTB4NThiMmZjY2UsIDB4ZDczOTEzZjQsIDB4YTZiYjYwZTQsIDB4ODNiNDQ2ZTUsIDB4NmZlMzkxYjQsIDB4NjE4NmRlZDgsCisJMHgyODVlNmJkYiwgMHhmMjM4ZjdiNywgMHhjOGIyMzY4NSwgMHg1MGU5ZWQ4YywgMHhjM2EwODQ1ZSwgMHhmZTc2ZTQ2NywKKwkweDMwZWRlMzU3LCAweDk3ZGY3NGIzLCAweDlmMzA1YTYwLCAweGEzZGU5NDJkLCAweGEzOGM0NmE0LCAweGRkZmExYjhmLAorCTB4ZWJiZjk2MzcsIDB4OTAyNDdlZDQsIDB4ZmM3MTdiYmYsIDB4MWVjZjkzMmIsIDB4ZWUxY2ExMmIsIDB4ZGIyZWRhM2YsCisJMHg2MTlkOGEyNywgMHgyZWRlZGI5MSwgMHgzZWU4N2JmMCwgMHhlZjRlZGMyMSwgMHg4Nzc2YzgzNiwgMHgwZjNkNGMyNSwKKwkweGY5NDFmNzgzLCAweGUwYWU1YzNhLCAweGM3MmVlNmU3LCAweDA0NmI4YTMxLCAweDc3ZTVmM2YzLCAweGI0MGU4YTNlLAorCTB4NzNlZjUwNGYsIDB4MDRiYjczNjQsIDB4MWM0YmI0NTMsIDB4NjEwZDlmYjIsIDB4OWRhMDFiZjQsIDB4ODBmZGYwYTIsCisJMHhmYTQyYjc1ZiwgMHgzZjAwNWJhNywgMHgwZDZmYzgwMywgMHg3YjI0MmJiNCwgMHhjOTBkYmU4OCwgMHhlN2M4Njk3ZCwKKwkweDA1M2JmMmE5LCAweDVjZDdmNjQzLCAweDQ3ODVhNzJlLCAweGZlNDM0YjNmLCAweDRmZWI4YjJlLCAweGY5ODJlZmMwLAorCTB4YWU0Nzg1ZmMsIDB4NWU3OGUwMjYsIDB4Y2U3MDMxOTgsIDB4YWI0M2UyODYsIDB4N2JmM2E3MTcsIDB4MWNmZmM3ZDksCisJMHhmZWQxMGFlZCwgMHg0NTdmZWVjZCwgMHg4NmI0ZGQ5ZCwgMHg1Y2U1YzBmNCwgMHhkZjViZmMwZiwgMHg4Y2JlZGIwNywKKwkweDgyMWQ5ZGViLCAweGNkYTRlZmRhLCAweDVmZTc3YWU1LCAweDdhY2M3ZGU0LCAweDJkZjdhNDU1LCAweDJlYjk2NWNlLAorCTB4MGFiNjFmMjAsIDB4N2YyOGU1ZTYsIDB4ZTdlMTFmNTMsIDB4NWUzZjU2ZTYsIDB4MjEwM2Q5ZmYsIDB4ZWQxODQxZjgsCisJMHg4MDRlNzNmYSwgMHhhY2RjNWMzZCwgMHhhMzVhM2YyNywgMHg4ZGM0N2QyOSwgMHhhZmMzMWNlMiwgMHg3MWNiODdiMywKKwkweDFlNGI3ZDc5LCAweDI0ZjNmMjM1LCAweDViMTdhZTJlLCAweDM5ZDNmNzVjLCAweDIzZjNlMDk1LCAweDI0M2JkNWMzLAorCTB4YmVhNTNkY2IsIDB4Nzk0N2RiMDEsIDB4ZmU0NzlhNjIsIDB4MjM2ODRiODAsIDB4OTY0ZGJmYTAsIDB4NzY3OGMxN2IsCisJMHhmM2M4NjRlMiwgMHgxMmI5MDQ2MywgMHgxODQ1Njg3NSwgMHhlZDkzYWJiNiwgMHgzZjhhZWRiMSwgMHhlOGM4YTJhMywKKwkweGI3NWVmODA4LCAweDFhNThjOGI4LCAweDhjOGQyZjQwLCAweDZlMGRkZjlmLCAweDAxZGNjZWZmLCAweGFmYTU1YTdkLAorCTB4NDU5ZjcwZTgsIDB4Zjg5YzUwZGYsIDB4NDMzOTAxYTcsIDB4Y2FiODY1OGEsIDB4MGZmYTUxOGUsIDB4NzAxNjNmM2UsCisJMHhmMzhjMmM1ZSwgMHg1YTY3YjcyOSwgMHhlODE4ZGNmMSwgMHg5NjJiNmJiNywgMHg2ZGY5YzQ4ZiwgMHg1ODJmNWQxNSwKKwkweDNmZmExZTYxLCAweGU3MzlkMDMwLCAweGVjYmU2NTBmLCAweGI4NzJmOTkzLCAweDQzYjFmM2Y1LCAweGY2MzE4Y2EwLAorCTB4OTc4MjNiMDQsIDB4YzY0ZTgwZDYsIDB4NjhmZTQwOGYsIDB4ZmI5NGQ0Y2MsIDB4NWNiMzhjNDMsIDB4ZmQwODY3MWUsCisJMHhhZmRjZDZmYSwgMHhlNjk3NWZhNywgMHg1MWFmZDA4NiwgMHhjNTA0NzY3ZiwgMHhkNDYxMDIxZiwgMHhmNDIxMWQ5YiwKKwkweGVjODIxM2ViLCAweGVkY2Y5MDBmLCAweDFkNDlkMDljLCAweDI3MGYzMDdkLCAweDZmNjExZDZlLCAweDkxOWVlODk0LAorCTB4ZjYwNDVlYzMsIDB4MzI2NzhiYzMsIDB4MjM5ZjZmNTEsIDB4MjNjN2JjMGMsIDB4NjA4YzMxZGIsIDB4MjIxNjIzYjAsCisJMHg2Nzk5NzM1ZSwgMHhjNTAyMDNkZiwgMHg0OGVlNWE1MSwgMHg1YzA0ZWVhMywgMHhhN2FkOWI4ZiwgMHgzNzExZmIyNCwKKwkweGRjNjEzYWMyLCAweGIyZGFmNWExLCAweDBjZTJhMTE5LCAweDI3NDAzOGZmLCAweGVmMDJiYTI4LCAweDA0MmFjMDA3LAorCTB4YzQ4Njk1YzQsIDB4NjNlMjgyY2IsIDB4MzgxOTRlMTgsIDB4NWExZGFiZmYsIDB4NzU2MmFlZmYsIDB4MzVlMzZhZmMsCisJMHhhYzMwYmZlZSwgMHgwNDI3ZmU2MCwgMHgyZWFhMWYzYywgMHgwYmFlNWY5ZiwgMHhlMmE5Y2Y4ZSwgMHhiYTlkMGI1YSwKKwkweDg4N2M3YzYwLCAweDZmOGNiMjZmLCAweDI5MDdiNmNhLCAweDQ1MmQzZTBlLCAweDY0YWNmZGU0LCAweGM3MDdjZjY0LAorCTB4YmQ4NTBjYmQsIDB4YzNlYTJkMGUsIDB4ZjdmNDhjMTUsIDB4OWUzNjNmNjAsIDB4NWVmZjI1MTcsIDB4MDljZjYzMDUsCisJMHg3ZDVhZGU3NCwgMHg1OWU5ZTRkZiwgMHgxY2ZiZjhlNywgMHg4ZmQ4ZTUyZCwgMHg1MGMzNTMyZCwgMHhhZmJlMGUzZiwKKwkweGYwOWJjNGEwLCAweDdkZTA0Yzk4LCAweDIyZGRlNTY5LCAweGUxMGQ2MmNiLCAweDUzYjc3Y2M3LCAweDg3OTdlMmI5LAorCTB4NGIxMmE2ZmEsIDB4NTVlZWI5YzAsIDB4ZGQzZWEwNmMsIDB4MWU4NWYyYTMsIDB4NTlkNmQ2ZjcsIDB4MWM0ZmVmMTQsCisJMHg4MmVjMjllZiwgMHhhMzNiMjRhMiwgMHg2NmFhNDg3OSwgMHgzY2MwMDc2NCwgMHg4NmZhZTJhOCwgMHhjZTM0NWQ5NCwKKwkweGM1OGMzNTRiLCAweGFhYTAzOGYyLCAweDcwNzYwMTNjLCAweGJmMTg0ZmE0LCAweGUzMGZjZTJhLCAweDc2YzFjMTU0LAorCTB4NGRlY2NkZTcsIDB4MGRlNjRhNDMsIDB4ZmNjZGY5ZTUsIDB4NWUzOTA2OGQsIDB4NjQ2ZTQ2ZjgsIDB4NjMzYmU5MWMsCisJMHg3N2Q0MThkOCwgMHhhNjlmOGIyYywgMHhlYjA0YjhmNSwgMHgzNDU5N2U4MSwgMHgwM2M1NDI4NCwgMHg2OGZiNDMzNywKKwkweDVmOTBiYTA3LCAweGM0ZGZkMWUyLCAweDMwY2FlZjU0LCAweGM5Zjc0ODg3LCAweGIzOGU2Mjg0LCAweGYxZTRlYjEwLAorCTB4ZmM0NjdjZTEsIDB4OTUwNzA4NmQsIDB4OTg1OWY4MGIsIDB4YmNlMDcwNmMsIDB4YzMwMDBjMWIsIDB4MzMzZDA1OTAsCisJMHg1NmJlNDAyNiwgMHgxNWFmMzdmNiwgMHgzMzMwODg5OCwgMHg0ZmRjOGRkYiwgMHhlMzZiYmNhOCwgMHg4NjZkNzdhNywKKwkweGZmNzQwN2ViLCAweGNmZWMzMGJlLCAweGZhNTNiZmM3LCAweGRiOGVmMjE5LCAweGZiMjdiZTBkLCAweDdkZmMxY2NkLAorCTB4OTUxZGY5MTksIDB4ZmY5Yjg3ZmUsIDB4ZmI2ZGRlZTEsIDB4Mjc3N2Q0YzMsIDB4MzI2N2JmNzAsIDB4MjBlNTZiZDEsCisJMHg0Y2JjMTJiZCwgMHgxZWZjNDdhNiwgMHg0YWJkYzJlNSwgMHgwYzc3YWRiMSwgMHhmYjNjMzdkZSwgMHhmZDFkODQ3MCwKKwkweGYwZTMwM2UwLCAweGVmZTVhOWRkLCAweGVkNzVmZGQxLCAweDkzNjFlMDBkLCAweDhjMGZiZTQ4LCAweGFmZWY2ZTRiLAorCTB4MDJmZDE3MWQsIDB4YmMwNmRhZTQsIDB4NGZlNzg0MzQsIDB4Mjc5ZDE5MmEsIDB4Y2Y0YWI4YjAsIDB4MDAwZTc0ODksCisJMHgxMzkyYTBjNiwgMHg0MDEzZWYwMSwgMHhmMTBlMWI3YiwgMHhmMTViYWY3MywgMHhiMDcxMGI5ZCwgMHhkMDJiZDQ1ZiwKKwkweDQyNTViMDZlLCAweDQ4M2IwODdlLCAweGJmMTlhYjQ5LCAweGQ1ZTBhYzFmLCAweDFhM2QwN2E4LCAweGY1YzM1MmU5LAorCTB4M2VhNmQ5ZTgsIDB4ZTkzNWNmMTEsIDB4ZTQ0NWZhZTIsIDB4MmU2OGU3MWYsIDB4MzdlODA3YzcsIDB4MGJmOWQxOWUsCisJMHhjZTdjOTI2ZCwgMHhkZmM0YTQ3MSwgMHhmYmU0Y2I0ZCwgMHg4NGNmZDI5YiwgMHhmZTU5MWFkMSwgMHg0N2ZiZDJmNywKKwkweGQ1NGUyM2IzLCAweGYyYzY3NjRiLCAweDQ0MmZjNWY2LCAweDExZWNmY2ZmLCAweDAwZDNlYWE3LCAweGUxNjdkODJlLAorCTB4MmJhOWQyNzAsIDB4ZWNjNjY2NjksIDB4ZDEwYmFjZmIsIDB4ZWYzYjNmOWYsIDB4ODA3NDk1ZDQsIDB4NzhkOWY2OGIsCisJMHg0NjQ2MTRmOSwgMHgwOTdkZjhjZSwgMHgzMTlmZDEwYiwgMHhkNTU5YjQ2MSwgMHhkNzM4NWJmZSwgMHhkNTNjZGZmMSwKKwkweGNmMjEzNDFhLCAweDVhMzZkZjYzLCAweGU4Yzk0ZjM5LCAweGYzYjNhZDNlLCAweDJlMzFhNzk3LCAweDQ3ZjY1NGU5LAorCTB4ZGY0ODJlODcsIDB4ZGUwYjIyODEsIDB4NzE3ZjkzMjMsIDB4OWQwZjE0NTEsIDB4OWRkOWQzMjksIDB4MTQ1MmVlZjgsCisJMHg2OGJiMmRmYSwgMHhmYTBkNDc3ZSwgMHg2YmZlOWZlOSwgMHg0MzgyZjRmYywgMHhjY2NhOTc3OSwgMHgxYmZmODEyYSwKKwkweDJjMmI5ODFiLCAweDk5ZWU4MDIzLCAweDlmOWQ3MzQzLCAweDgxYjhhNjAzLCAweGZmZDI4ZjgyLCAweDY5NjBiYzEwLAorCTB4YmM0MDk4YzUsIDB4MGEzYjUxYjYsIDB4MGQwYTE3NWUsIDB4YzcwNTg3YTQsIDB4ZmQwODJlODcsIDB4NTQ5Y2YxZGIsCisJMHgyZmQ2Y2ZjNCwgMHgxMGJhNzVjMiwgMHgwMDJhOWZkOSwgMHg5ZWI3OWUxYywgMHg3YzQyZWRkNiwgMHgxZWMxNzZmZiwKKwkweDNhZjhlYjAwLCAweGEyMmJlZjU2LCAweGQ2YTNmYzc1LCAweDAyN2EzZDUxLCAweGRmYzVkYmJlLCAweGUzOTY2ODZmLAorCTB4YmJjNjRmNTAsIDB4MDE5ZjY4N2MsIDB4MzJiOWQxZGQsIDB4ZmM5ZThhNWYsIDB4MDVlMzY1NDgsIDB4YjAzZmEwNDcsCisJMHhjYmY3MzQ2ZSwgMHg2OWQzOTI1YywgMHg0OWNmMTY4NiwgMHgwMWY3NGJhMCwgMHhmYTg1YWQ4MSwgMHhmNTk3NmJlZSwKKwkweGVlY2M5ZmE4LCAweDNkNDdhMzNjLCAweDE5YzBlZWJhLCAweGFkNGJkZTNkLCAweGE5ZGExODQzLCAweDg0NzdhNmRiLAorCTB4MzJmZWZmZDIsIDB4OTdmMmFiNWEsIDB4ZDFkNzc2MjksIDB4ZThmNWVjOTQsIDB4MTZhYmFiNzcsIDB4ZWFkZTFlZTgsCisJMHg2ZTFmYjlkNywgMHgyNTFjMzJmNSwgMHhiMmRmNzc2MywgMHg1NWI4ZmM5ZiwgMHg5OGY1ZWVjZSwgMHg0NzdkNjUyZSwKKwkweGM1ODhkZGYxLCAweGRjZWFhZDJlLCAweDA4OWE5MmMwLCAweGNhYmUzYzU1LCAweDk3ODJhYjEzLCAweGMwZWFjMGI2LAorCTB4MjFiNGJiM2UsIDB4YzMxZGY1NDksIDB4ZWY4MmNmNWQsIDB4ZDBmZTBlMjgsIDB4ZDc5MGFmZmUsIDB4NzM2ZGIxNzEsCisJMHgxNmJiZmEyZiwgMHhjYzdhZDRiYiwgMHg2MmI1Y2VlYywgMHgxMWVkZTIwYywgMHhmZWNlMWFlYywgMHg4NGI3N2UxMiwKKwkweDAwZDIxMDhmLCAweDdkZTYwYWJkLCAweGEzZDcwNzVhLCAweDY0OGMyYWVhLCAweDBjMjI1NDlmLCAweGFiNTk1YWYzLAorCTB4NzM5M2UzZjUsIDB4NTRmNDUzNDcsIDB4YTgxMGVlZWUsIDB4YmI5NzJkZGMsIDB4NTc2ZTA0NmIsIDB4YTk3NWYyY2IsCisJMHg4MzkyZTM4YywgMHg3NWQxYTcyNywgMHgzN2EzOWY1MiwgMHhhNWRmMDAzMywgMHg4OGU3ZTUxNSwgMHg0MzdkNjUxZSwKKwkweGM0ODU1NzE5LCAweDI5MGQ4ZGY1LCAweGRkYjBlOWVmLCAweDU4MTdkZmE1LCAweDRiOGQxYTZjLCAweGE5MmQ0N2E1LAorCTB4MWU1NWMzNTEsIDB4ZDU5ZTkwNWQsIDB4YmRmOTQzYTcsIDB4ZmY5ZDQxYjQsIDB4YmVmMmQxZjMsIDB4OTBmMmM3OWUsCisJMHgyZDE4ZGU5ZiwgMHgwNzE4OWY4OCwgMHhiY2E1M2ZlMSwgMHg4MWVmMDI3NywgMHgwZjNhZDI1ZCwgMHhlYWQ2N2QyMiwKKwkweGRmNzAwYWJiLCAweDExNzVhNGJiLCAweDdlNDM5NGFjLCAweGI4YWZkZjFkLCAweGNlMDFhMmJlLCAweDc1MWJlZmMzLAorCTB4YTdkZTMzMGUsIDB4ODgxNGFkZjUsIDB4MDBiMDk3NmUsIDB4YjA2ZDI3YmQsIDB4YTFkYWMxM2UsIDB4NzcyMmJmNzAsCisJMHhlNGY1OWNjMywgMHg5ODI4M2QwZiwgMHgxMzI4NmY1MSwgMHg4M2RlMjIxZCwgMHg4ZmM2MWM2ZiwgMHg4M2U2NTE3ZSwKKwkweDFmMmZhYzEzLCAweDIyNDZjYWYxLCAweDllY2E3NTg1LCAweDk5ZjY4MjNmLCAweGY5OTZiN2VjLCAweDNkOTQ4ZTMwLAorCTB4YzRiZjIwNGUsIDB4NDM3MTgwOWQsIDB4YzkyMmE2MTEsIDB4MzdiMDM5OTEsIDB4YWQ5YTQxODQsIDB4ZjkyMGFmNmQsCisJMHhlNjZmNTYzZSwgMHg1OGRhNjJlZiwgMHhmYzcwYmNhMCwgMHhiZTcwMTMzMywgMHgwYmIyNzUxMCwgMHhmZGU4N2I5MywKKwkweDliNmQzOWJkLCAweGNjNWNhMjJmLCAweDNkMTQ3MGNjLCAweDE5M2RmODA1LCAweGYyN2ZmYmM2LCAweDE2YmZjMTc1LAorCTB4M2ZjYmE5ZGEsIDB4MGFkM2YyNDYsIDB4ZDZmZDgxZTQsIDB4ZGEzOTY0ZDksIDB4NWFjZmY2YTEsIDB4YzEyMWFlNTEsCisJMHg3ZWE3Y2FjYywgMHgzMmY4OTQxMywgMHhjM2VkMTVkMCwgMHg5ZmE0YTU1ZCwgMHg5ZjdlZTU1OCwgMHhkZGI4OTQyZCwKKwkweDJlN2NhMGZjLCAweGUyZDZmOThkLCAweGQxYmVmYWY5LCAweGY0OTVmMjhjLCAweGNhYWJmYjFiLCAweDVlMjgzMTA0LAorCTB4ZTYxYTM3NTAsIDB4NGZhZGE1NzksIDB4NWJlOWRlNzUsIDB4ZTkwMWJmNmMsIDB4MTg3ZGI4MmMsIDB4Mzk1ZTJhYmUsCisJMHg4YTJkN2I0ZCwgMHhjYzFkNzdlZSwgMHhmZWU4ZGViMCwgMHgzZWE4ZDY5NCwgMHg4NzMzYTRiNywgMHg1M2JiZGQwNywKKwkweGY2ZDk5ZmNiLCAweDc3N2JhMGE0LCAweGVlZjc0MTE5LCAweGRkZWU4MmYyLCAweDJkZjllZmE5LCAweGJhMDk0ZTc0LAorCTB4ZTdiZWE3NzcsIDB4NTRjZGIwNjcsIDB4ZTY5MzBmZDUsIDB4OWM4OGUwYTksIDB4MjNmNTU1YmIsIDB4ZTdkNWNiZWQsCisJMHhiY2ZmOGVhZSwgMHg3N2M3NDg0MiwgMHgyZTdkN2QwNiwgMHhlMDY2ODc5OCwgMHhjMTk4ZTI4ZCwgMHgwYTJmMjQ3ZCwKKwkweDNlMWE0MzJhLCAweDY5ODRjYzJlLCAweDBiYTFhMTczLCAweDkxMzlhNGU5LCAweGUzODZlN2RiLCAweGEwYmFkYjBmLAorCTB4OTc4OGUzMWQsIDB4ZmM2ZmU4OGMsIDB4NDUyZmUwODksIDB4OWYyOGM0ZmIsIDB4MThmZDE5NTMsIDB4YWYzM2VkNTMsCisJMHg1MmJlNzAxNSwgMHg1Y2YyZGJkMiwgMHg3ZDYxZjNiMywgMHg0OTRhZjdmMiwgMHhkZWUwMWRmYywgMHg0NjNlYjhkMSwKKwkweGY5MDM2YzdjLCAweGFmN2U1NWU2LCAweDQ3NmNhYzc4LCAweDVmM2NlZDI4LCAweDBmMzUzMjU4LCAweGNjN2ZjZmJlLAorCTB4ZWNlMjgzMzEsIDB4ZjA3ZWZjMWQsIDB4YTc4ZjNkNGUsIDB4ZTdlNTVlZjgsIDB4ZmEzYmYzNWIsIDB4ZmUwMDhlMzQsCisJMHhmNWM3OTkzZSwgMHhhNTljNjc5MCwgMHhlYmE5MWYxNCwgMHhmOTE2NWQ4NCwgMHgxZWFjZWRhOSwgMHg3NWQ0NjVlZiwKKwkweDdlZTE0Nzc2LCAweGFiM2NlMDU2LCAweDYwYzliZjQ3LCAweDg5Y2ZiY2JlLCAweGFmNjhlMWZkLCAweDc0M2RhY2ZmLAorCTB4OWU2ZDZkM2MsIDB4OThlM2Y4OWUsIDB4MWVhYmQ3MmMsIDB4OTFiYjcyZDYsIDB4YjllMTY2MzksIDB4NTc1ZTQ1NzEsCisJMHhhYmUzZTdlZCwgMHhlN2U3YTg1YSwgMHgxZDFhMzE2MCwgMHg5YzgzNmU0MiwgMHhjMzk2YWIzZSwgMHg3MDdlZjUwZSwKKwkweGNhM2Q3ZjhiLCAweGFhZGY5MDBlLCAweDRjMTc0YjdhLCAweDEyYjdiYjI3LCAweDMxZjIzNmU0LCAweDc5NzU3M2M4LAorCTB4MTdjOTEzNzIsIDB4N2NhYWU3OTAsIDB4M2M4MGRlNzcsIDB4ZGYwZWJmY2YsIDB4NDI2YTc2OWQsIDB4ODE3MGYzOGUsCisJMHhkYTc4ZjM0OCwgMHhmZmU2OTUzNSwgMHhmNDQ3OTgxOSwgMHg2NDMzM2RhNywgMHhkZTdjZjhkZSwgMHhjNjVlYmU2YywKKwkweGI3NTgwZmI1LCAweDJlYmY3YWUwLCAweGYyZjZlYmUwLCAweDdkZmFmMjMwLCAweDBhNzc1ZDc5LCAweDRjMjg0NWJkLAorCTB4YTI3MGNlZGQsIDB4NjM0NjI1ZGIsIDB4Mzg3YjllMDksIDB4MTM2NWYyOTYsIDB4N2VhYWUxYzYsIDB4ZmQzZGQwMmUsCisJMHg2ZTNlZWI3ZiwgMHhiZjVmZmQ0MSwgMHhmZDA1YThmZiwgMHhhM2Y2ZWU2MSwgMHg1OTRkYjAxNiwgMHg4YjVhNGVhZCwKKwkweDg1ZDAzYzdhLCAweGJhOWVmNTFkLCAweDdmYzIyZThlLCAweDZlYjhmYjY1LCAweDIxZDk1ZmNjLCAweGVlM2RmYmQwLAorCTB4ZDNhNzE3MDMsIDB4MTM1ZjU5MzgsIDB4MGU3NzBiYzYsIDB4ZjI4ZmQ3ODMsIDB4MzdiZWZlYjgsIDB4MzA3ZWUyNGYsCisJMHhmYjg5ZjQxNywgMHhkZjgzMDFmZCwgMHg4MDFkMjAyZiwgMHg1ZWJjNDI1YywgMHgzNWU1ZjAxNywgMHhiMWEzNzNiNiwKKwkweGY1MWU5NDIyLCAweDFmN2NmMjZmLCAweGU4NjdhOGQ5LCAweGVmODVhZmFmLCAweDUyYzcxYzcxLCAweDQ4OGRlOThlLAorCTB4YjIwNWZiNDcsIDB4MjdlZGRkYjUsIDB4ZmI2MDQ2MTcsIDB4ZmE4NjNhZjUsIDB4MTdkZjgyODUsIDB4ZTIxZmJkMjksCisJMHhkNmE4M2ZmOCwgMHgzNTgwYTdhMSwgMHhiZTY5NmI1NiwgMHg1MmQ3YTgzZiwgMHg3NGZiZGEzYiwgMHhjMTVlMmYwNCwKKwkweGFlMWM1NWNmLCAweDA5MjlhOGZlLCAweDU2YTBmZGRhLCAweDUzMGM3YmEwLCAweDMxZjNmYmVmLCAweGUwYWYxNzg0LAorCTB4M2QzMDVhZmEsIDB4NGMxYWY0MmIsIDB4M2JmNGMxOWYsIDB4YmU2YjRlODQsIDB4YzkxZTlkMTksIDB4ZTRkNWVmOTMsCisJMHhlN2RjMDJiMSwgMHg1OWE3ZGQ2MSwgMHhlMTFlN2U5MSwgMHhhZTJiZTNmNywgMHg3ZmExZDYxZCwgMHg2Y2M5YmQzMywKKwkweDMxZTAwMjdmLCAweDBiN2FmZjVhLCAweGJjYzM4OWNhLCAweDg3NzZiMGJjLCAweDc0OGRlNWMwLCAweDUyNjFmMjM3LAorCTB4YmRhMTllYjMsIDB4OTcxZTdlZmIsIDB4N2FlM2VmNGIsIDB4ZmFkMGUzYzUsIDB4MzFhZjhjMDUsIDB4ZTUxZDM3YjEsCisJMHg0ZjFjOWE1MiwgMHgyYWM3NDU3YSwgMHg5MDVjNTNmNiwgMHhhZjMxOWJjYiwgMHg5NmVmNTRkOSwgMHhiZDcxZTUzNywKKwkweDQwODM5MTQzLCAweGU0ZmRhZWU2LCAweGM0NGY2ZDk3LCAweGNiMmYxNDdiLCAweGU1NTM0MWU3LCAweGZhMzJiMmY2LAorCTB4ZjQ4NWNmYTcsIDB4NjcyZjRjYWEsIDB4ZjgxNDNjNjQsIDB4NmNmZjRjYjIsIDB4MWY2OGNmZGIsIDB4NTljNzJkOWYsCisJMHhkMTc0MzY2NiwgMHg4MzNjY2M3OSwgMHg4Nzk0NTNlYiwgMHhhYmRmNTJiMywgMHgzOWFlN2RjNSwgMHgzYTdjZWRmZCwKKwkweDI1Mzc4ZDY3LCAweGM5ZmJlMjI2LCAweGQyNzg3N2ZjLCAweDYwZDZkYmE3LCAweDljMzcyZmRjLCAweGUwZWMzMWQ2LAorCTB4MzgxZTc0NTMsIDB4MzViYzZiMmMsIDB4NDk0MzljNTQsIDB4N2EyNTU3ZGQsIDB4NmFlZWIwOGYsIDB4M2MwYWE1M2EsCisJMHg3ZDM5ZDBmNywgMHgxNzAxZDkxZiwgMHg1YzlmMTNhNywgMHgyZGRlYTliNSwgMHg3YmM2NTRmYywgMHg1ZDNlZjI4YywKKwkweDgwZjNmNzI3LCAweDhiOGIxNjljLCAweGYzMjllYjA2LCAweDFjNjU5ZTgwLCAweDJlZDY1ODZmLCAweGFiMzVhZjVhLAorCTB4NzVhOTIxNTgsIDB4Y2VmZTI5ZWMsIDB4MDE0OWVkNjYsIDB4YTQ1OGJkZGYsIDB4MzA0Y2U4NzMsIDB4NjA4ZGVmZGYsCisJMHhmYzhiMWYyNSwgMHgzNjU3MjQxZCwgMHg3NDhjNGRjNiwgMHhkNzg0ZmIyZiwgMHhkN2FmNzA0YywgMHhhZjI5ZjA0NiwKKwkweDYxYWRlOTQ0LCAweDY4N2M4OGNlLCAweDRmMTFlMTY3LCAweGUxZGJjZTE2LCAweGRlMjc1Njk0LCAweDhlZjBiYzU3LAorCTB4MzM2YmE2NGUsIDB4ZDMyZTJmYmYsIDB4MmQ0ZWU1ZGEsIDB4ZWI5YzYyMzMsIDB4YzJlM2U4MDAsIDB4NWNmN2ZlMjAsCisJMHhkZGZiYTQ0ZCwgMHhhMGZlYzNiZiwgMHhiZjBkOTU5ZiwgMHhhZjY3NzkyMSwgMHhlZDFkMzhiOSwgMHgzM2RhYzJhMiwKKwkweDFiYmIwODRkLCAweGY1MWQzY2ZlLCAweGZmNjEwZjg5LCAweGY0MWViZDIwLCAweDcyODA5YjdiLCAweGQzYmQyNGU0LAorCTB4ODYzNTc5NWQsIDB4ZDM1OTc5ZGEsIDB4Y2JmOTFkM2YsIDB4Zjc0MGE2ZjcsIDB4YjhlYzNlNmYsIDB4ZmRmMmI3YTgsCisJMHg3ODczZGM4OSwgMHhmMmZkMWMyZiwgMHhiOWEzZjJiMywgMHhkNDJjZTkxYywgMHgyNDNhZmFkMCwgMHhkZGViM2JkNSwKKwkweDBhMmJmZmEzLCAweDIwZDhjM2Q3LCAweDdlMGE3YWZkLCAweGM4NjVhM2RmLCAweGZiNGE5YmJmLCAweGU0MjFjY2EzLAorCTB4ZGZmNDY5ZWYsIDB4YjA3MWYzNjUsIDB4MTVlNWExZWMsIDB4OWUxNjVmN2EsIDB4ZTk5MGFjOTMsIDB4M2NiY2I4MzgsCisJMHhhMTNmYzA3ZiwgMHhlYmVmY2E3MywgMHhhMWZlMDEwOCwgMHgzZmRmYzYyYSwgMHgyYmE3YmIwNSwgMHhhYWI4ZjgxYywKKwkweDY3ZjkyYTczLCAweDBkYzIzY2FhLCAweGQxYzMzM2ZkLCAweGViNGRkN2UxLCAweDI4Y2ZmNzE4LCAweDgxOGRkYTMwLAorCTB4MWJiNDRkN2UsIDB4MWY3ZmFhOTksIDB4MjUyYjA3N2YsIDB4NzRmNzg2ZjMsIDB4MTQ4OTdkZGMsIDB4NjY2YmFmY2YsCisJMHg3OTVhZWYxNCwgMHhlN2E1MzQ3NSwgMHgyMTIwZGY1ZiwgMHhmYmMzMThmZiwgMHg2YjdlZTk1YiwgMHg4Y2VjODZiNiwKKwkweGZlYjUzZTk1LCAweGNiODBhNTMzLCAweDdjMDUyOTg1LCAweDYwZjk1Y2RlLCAweDAxYjBlNTJmLCAweGEyZWMwOTdiLAorCTB4NWRiOWYzN2IsIDB4YTk4ODc1MTQsIDB4N2NlMGE1ZWMsIDB4ZjI4Yzk3YjIsIDB4MTMxMDFkM2QsIDB4ZTA0MjU3YWUsCisJMHg2OTQxNDc3ZCwgMHhjYTk3N2UwZCwgMHhkOWNlODg1YSwgMHg3MmZlZmMzYiwgMHhlNGQ3MzhmMCwgMHhmODU1M2U3MywKKwkweDM1ZjIzMTdhLCAweGU3MDc2ZmQyLCAweGU3NzZlMGViLCAweDQxYWM5NDE1LCAweDRjMzhkYTNlLCAweGU2NWNhYjdjLAorCTB4OGM2ZDk1ZmIsIDB4MTZkZGNiZTYsIDB4MDVmNGYzNDMsIDB4MDI5NjczNmIsIDB4NzgwMTdlNWQsIDB4MGJkMjNkZTAsCisJMHgzNDQ0Njc0ZSwgMHhlNWMxN2Y3YywgMHgzZGYzYzA4YywgMHg2YmE4MWM4YSwgMHgzNmVmYTcwYiwgMHhjNThiY2U2NiwKKwkweDQ4Y2RhMzczLCAweGY5ZGVkMGY3LCAweDljNDZhOThlLCAweDM4ZGE3YmU3LCAweDdkZmQyOWZmLCAweDE2MzhiNWQ4LAorCTB4YWU4MjY5ZjksIDB4ZjI4NzZmNWYsIDB4NTEzM2NlZTQsIDB4Nzg0ZGY3YTgsIDB4ZjIyYzdlN2QsIDB4ZmU3ODcwZTEsCisJMHhjZjE5MThmZCwgMHgxZTEyYzQ4NiwgMHg3MGJkODc5NywgMHgwMDRmNmNhMiwgMHhiYTI3ZWU3ZSwgMHg4N2ZhOWRlOCwKKwkweDZmZDExODFhLCAweDU2ZmZhYmY3LCAweGJlN2M3Yzg3LCAweGZiOGNjMjMzLCAweDIzMDcxN2U2LCAweDBiY2FiZGU4LAorCTB4M2RlODFhNmYsIDB4N2RmOTVhOWEsIDB4N2Q3NDJmZDUsIDB4N2NiZjQ4NzMsIDB4MjJmNzRiNWQsIDB4NDdmZTZmZGQsCisJMHhmYmEzZjIyYiwgMHgzYjlkMDM1NSwgMHhjMzczYTg3YywgMHg2YWY3ZGM0NSwgMHhjMzljNjczYiwgMHg1ZjZiNTY3NywKKwkweGMzZjJkYmZhLCAweGQyNTQ4NmNhLCAweDNmZjgxNDhiLCAweGJlMjc0NmJjLCAweGU0NWU3YmYzLCAweDhlYTFlMjcyLAorCTB4Zjc3ZDIxN2YsIDB4MGI5NzZiYTEsIDB4MTdjYTdjZjAsIDB4NDRjN2ZmMDcsIDB4YjdlZTZiOTQsIDB4Nzk0NDRmMmUsCisJMHhlNWM1ZmVlNiwgMHg3ZWVlNTg4OSwgMHg0YTEzYzIyZCwgMHhjMDVlYjk1ZiwgMHg3ZWNhM2VmZCwgMHhhOGFlZjY5OSwKKwkweDkwYWQwZmYyLCAweDVkNmQyM2U5LCAweDNkMDdiZDBiLCAweDdiMDJlNGUxLCAweDEzMGZiYmUwLCAweGFjNGUzNGIyLAorCTB4NjViN2UxM2YsIDB4N2MwNWY3YjEsIDB4YTQ1N2FlYjcsIDB4OTNmOGUzMzgsIDB4MDFkNTExNjUsIDB4ODE0Zjc5NzQsCisJMHg3ZTJmZjE0ZSwgMHg5MzBlYmYyMywgMHhmMDE5YzdkZiwgMHg3N2YyZjRlMywgMHg4YWY2MzY3ZiwgMHgxYWEzN2RmYywKKwkweDgzYTFlZTgxLCAweDVlZTQzMmZlLCAweDhhZmZhZDFhLCAweDg4ZGY3YTU4LCAweGM3M2JjZTg5LCAweDhiMzg0NzhjLAorCTB4M2U2MjA1ZGUsIDB4MDBjY2QxZTMsIDB4YWY3MTY5M2QsIDB4NzQwMGNiYTYsIDB4ZTg2OWQxNTQsIDB4NTdiZWZkMjIsCisJMHhhY2IwNDMzYywgMHhmMTczZGQzZiwgMHgyMTM0YzhkMywgMHhlNzI2N2Y4NCwgMHhlMzk0MzRkNCwgMHhmODFhN2VjMSwKKwkweDhhZGUyMjQ1LCAweDcxZTk1NWJlLCAweGMxZmUyMGE1LCAweDE1YTU5YmZlLCAweDI4N2Y5MDc3LCAweGQ2OTM3ZmQ4LAorCTB4OGY2NjZhMmIsIDB4ZTlkZmY3YzcsIDB4Zjc4YzJmM2EsIDB4OGJmMjIzNjksIDB4ZmFlMjg3YTIsIDB4ZmZjMTA4MWQsCisJMHgzOTcwYzY2YiwgMHhiYWQ1ZjBhNiwgMHg1ZGZmMWU1ZSwgMHhjYzZhNWJkNywgMHhlNjU2YjQ4NCwgMHg5ZGIwMDNhYiwKKwkweDc1ZmRhMGZhLCAweGEzNzdmMzlkLCAweGI1ZGQ2MTFmLCAweDYwNjMxMTQ1LCAweDNiYmRkNmJlLCAweGZjODEzZDhmLAorCTB4NjYzNTJlNmYsIDB4ZWVkNzc3ZTEsIDB4MWZjYzJlMzAsIDB4ZmVlMDk3YTQsIDB4ZjJlMThjYTYsIDB4MTg0ZjQwNzIsCisJMHg5N2NiZGY2NiwgMHhlZDViZmFmMSwgMHhlNDYzMzk3ZiwgMHg4N2ZmNmNmMywgMHg4NzYwN2ZlZiwgMHhlZGMzMWQ4ZiwKKwkweDRmZGMyNWYwLCAweGUwZjBlZGMyLCAweGM3OTE0MzdkLCAweDc5MmViYjRhLCAweDYzY2E4NzlkLCAweGMwNDg3N2ZlLAorCTB4ZWM3OTI2NWUsIDB4YmQ1MTIzMWEsIDB4YjFiOWNlZTQsIDB4YmJiZjQ3NjQsIDB4MGQzMjU2MjAsIDB4YjQ0MzNmNmQsCisJMHg4N2YyNjI2YiwgMHg3MWU4YWZiNiwgMHhhOGUzOWY2ZSwgMHg4NzFjZWQxMSwgMHgxNzQ5ZmI5NiwgMHg5OWJlZjQwOCwKKwkweDlkYjlmN2EyLCAweGVlZTNlOTAyLCAweGViMWY5ZDRhLCAweDJlZjU3ODI5LCAweDg1ZDU3ZWUwLCAweDRjM2Y5ZDBlLAorCTB4MTUwZmQ0MTgsIDB4ZGNhMDcxZmQsIDB4YTJiOTUwMmUsIDB4NjM3YTJhNGYsIDB4NzFmYjkzYWYsIDB4ZTVlNzhjMTcsCisJMHgxNmI5ODZiNywgMHhkODdkN2NlMSwgMHgxM2Y5NDYxNSwgMHhjNjdjZjEyNiwgMHgwMDkzNDc5YywgMHg4MTNkZjQ1ZSwKKwkweGZhY2JmZjExLCAweGMxYTc0MmE0LCAweGNlYTVlNmZhLCAweGQ3YmUxYjhjLCAweDRmYTY0ZGIzLCAweDgzNTJjZjg1LAorCTB4YmZkOTQzZjgsIDB4ZGQzOWYzOWEsIDB4MWRmZWUxZDcsIDB4N2ZmN2ZiOGIsIDB4ZTBmMmY0YWEsIDB4N2VmZjYxNzYsCisJMHg0NjZmZjEwOCwgMHgxZmJlMTIxZCwgMHgxOWQxNWJmZiwgMHg0YWZmM2VjYSwgMHg1ZWZlMGJkNiwgMHgyM2RlYmY1OSwKKwkweDcyYWY4ODI1LCAweDdkYjg3NjRlLCAweDZmZDY0ZWI1LCAweGNlNmYyYjg2LCAweGJjZmM3YWZmLCAweGRmZGYxZTQ3LAorCTB4OGU3NzlmOGEsIDB4OWY0M2JmZjksIDB4ZjUwYmQwMWQsIDB4NDc3OWM3YTEsIDB4YzY0ZmM5NDEsIDB4NmI4NmJjYzAsCisJMHg3MzllNzQzZCwgMHgxZWNkZjdiOCwgMHhiMDU1ZjU5NSwgMHg3Yzc0NTU3MywgMHg0MWFmNDUzNCwgMHhjMzVkYzhiYiwKKwkweGQxY2QwM2ZkLCAweDdlYzlhZmQyLCAweGY3YTVhZTM5LCAweGVmOTIxZTU3LCAweGQ1NzgzZTczLCAweGVhMmQ2OTRjLAorCTB4ZDkyZTkwYzksIDB4ZDlkZTkyN2IsIDB4YzZhMzUyNWQsIDB4Yjc3ZDE5YmYsIDB4MzRhYWZkZjgsIDB4YjE1N2ViOGEsCisJMHg1NTJiZjIzMiwgMHhmMTliNDY3NSwgMHg3YzczN2ZiYywgMHgyYmU0MzFmYiwgMHhiNGFkNmVkZiwgMHhjNmZlYjAzYiwKKwkweDIzN2Q3MmQxLCAweDQ0ZDViN2Y3LCAweDYxOGZkZmQzLCAweDk1NDA3YTQxLCAweDU3ZGY1ODI3LCAweDY0NTMwNWViLAorCTB4ZmE3MGQxM2YsIDB4YzNiYTJmYzEsIDB4ZDFlOTVjYjgsIDB4MzlkNzlmMTIsIDB4ZDA1NWRmZjksIDB4ZTBiOTcyNzcsCisJMHhiZjIzMDg2ZSwgMHg4ODZiZGEwOSwgMHg4MjBkNjdkNywgMHg1ZjNkZGYxZiwgMHg0Y2ZiZDcyOSwgMHgxM2ZmMjVlYywKKwkweGNhYTBkM2M1LCAweDJjYTdjZWI5LCAweGQ0ZGZiMjBlLCAweGJiOTVhM2YxLCAweDMzNzI0YjdlLCAweDczMTQ4ZTM4LAorCTB4MGQwYjhlNDAsIDB4ZDIyNjhkYzQsIDB4NjA5NTkwNzksIDB4YmM5ZmUyNGYsIDB4NWRkMjRiNzIsIDB4MWY4MGZmMzgsCisJMHg3MWRjOTNmMywgMHg5NzMwZmNhOCwgMHhmYjIyM2U3YSwgMHgzY2ViYzk3MywgMHg3ZTI0MzNmZSwgMHhjNzkzM2NkNCwKKwkweDk1ZGRmMDhmLCAweGE1Yzg3ZTEwLCAweGM1MWQ4ZjIzLCAweGIzNzRhM2JmLCAweGM3NWQ1MWI4LCAweDMyNDdiYTQ5LAorCTB4ZDIwOGZmNDQsIDB4NTE4ZGFlM2IsIDB4OGE0NzE5ZmIsIDB4YjIzYjhmZGMsIDB4N2ZhMzMwNTMsIDB4OGYzY2E0NmEsCisJMHg5YzMxYjc3ZiwgMHg3ZmU5ZWFmNCwgMHg3OTQ1OGVhOCwgMHhmOWQzYWNhMCwgMHhjZjVlN2NiOSwgMHgwNGE1NzA3ZiwKKwkweDA3Zjg5YmJmLCAweGUzMDYxY2QxLCAweGY1MDdjNWZhLCAweGIwZTI0OWJmLCAweGJiZjA5NDY0LCAweDYzYjQwOGZhLAorCTB4NzU2MWZmY2UsIDB4MmZlYmNlMDQsIDB4MmZiZmM1MjAsIDB4MzE2OWRhZjEsIDB4MmJkMjNmYTQsIDB4MGZkODJkY2IsCisJMHhiZmM4MGJhMywgMHg0NWE1ZmIyYywgMHgwNzIzMGZkOCwgMHhkZmMxMzlmZCwgMHg2YmJmOTc2ZCwgMHhmYzg1MzMwNiwKKwkweGY4ZjNhZjk4LCAweDZiODI3MzdlLCAweGE2Y2ZjMTI2LCAweGE2MWVmZTMzLCAweGZmY2VmYzgzLCAweGZlOGQ3NDAyLAorCTB4MmMxODNjYTIsIDB4MWE3ZjlmYzYsIDB4YmM2MWQ2Y2UsIDB4ZjVkZTM5YTgsIDB4YjNkMWYxMzYsIDB4MDhmOTA5MWEsCisJMHg5MzM4YTdiZSwgMHhmYjQ0YmY2ZiwgMHhjNjE5NGUyMywgMHhmY2Y0MGE3MywgMHgwY2VhNDY1ZCwgMHhiY2I0NmJkNiwKKwkweGM3NjAwOThlLCAweGIwMDkzYzYyLCAweGU2ZjE4MDU5LCAweDUzYWUzOTNjLCAweDZjNDRjZTEwLCAweDZiOWQ0OWZmLAorCTB4Zjk5N2JlMTMsIDB4NWY2OGI3NjQsIDB4OGY2MDRjNGIsIDB4ODNiZjc3YzUsIDB4ODM4MjRiZTMsIDB4Mzg5NWM1YzcsCisJMHgxZjFmMTI5MywgMHg2MDI0Y2UyZSwgMHhlZTljMDUzZiwgMHg4NzE1YjlmOCwgMHgyNTczNzE4MCwgMHhlN2JlYzQ5ZSwKKwkweDYzNTcyMGE0LCAweGY3Y2U4N2IxLCAweDQ4Yzg1MzNmLCAweDcxOGI3ZmFlLCAweDIxZjkyNTllLCAweGM4MzU0OGUyLAorCTB4ZDVjZjI0NjMsIDB4Mzk0ZGM1NzEsIDB4ZmU5ZDEwYWYsIDB4M2RjNGYxYjUsIDB4MWNiN2Q4NjMsIDB4MTNmM2UyZmYsCisJMHhlOGY4Zjc4YywgMHhiN2IyMTY0YiwgMHg1MWVmZmFiZSwgMHg1ZTc2Y2ZiNCwgMHg0MmYwZmRhNiwgMHg4ZmJlNDFiZiwKKwkweGVjZmRjN2QwLCAweDJmZjIzYTlkLCAweDJkYmIwMDVjLCAweDNkOWY2MDNlLCAweDNkZGJjZjlhLCAweGU4OTUzOWQ0LAorCTB4NTk2ZjQwZmYsIDB4MmYzZmQ2MDQsIDB4Nzc3YzZmZTcsIDB4NDhkOWZjYzEsIDB4YmQyMmJkOTcsIDB4ZTNlNzhiMDcsCisJMHhkMDNiMGVkMCwgMHhiZDQwNGUyYiwgMHg5NzVjNWJlNSwgMHhiMTA5OGZlZiwgMHhkMGYwYzYyZSwgMHhjYmU0NGNlZiwKKwkweGMwNWY5NDdjLCAweDA3ZWE2M2U5LCAweGQ3NzJmZWRjLCAweDU5OGEzOGYzLCAweDcyZWUwYjk2LCAweDYzYzFjOTNkLAorCTB4ZjE0MTE2MjksIDB4YzU0MzViOWYsIDB4YTdlZjVlNTksIDB4ODU2YWEzN2QsIDB4YmUxY2Y3NDAsIDB4YTNhNTljNzEsCisJMHg4MmI3ZGU1YiwgMHhkM2U1ZDNmYywgMHhlNzBlNmU0OSwgMHg5Yjg4MGViNywgMHgxNWI3Y2FhYiwgMHgyMzg3OWMwYywKKwkweDgxNTQ3NWZmLCAweGUzMWRjNjk5LCAweGIzYzEyYzI5LCAweGJmZjhjYTg3LCAweDczYjg3NWM1LCAweGZiM2EwODZjLAorCTB4Njk1ZmRiMTYsIDB4OWZkYjZlZmYsIDB4YjZkZGY3OTIsIDB4NmUzYmU2YmYsIDB4NzdkZTZkN2YsIDB4ZjFkZWU3MWIsCisJMHhmNTdmZTMxZCwgMHhjY2ZmNmUzYiwgMHhhZjNmM2M3NywgMHg3M2ZmZmZlNSwgMHg3MDcwMDMwMCwgMHg1Y2Y4M2Y5YywKKwkweGRmYmM3MDQwLCAweDFmM2VmYzcwLCAweDM2MTA2ZDk2LCAweDZhNDE3N2Y3LCAweDQyYjU3YThjLCAweDQ2MmQ1MTAwLAorCTB4MDg3N2EyZWYsIDB4NzFlMjRkNjYsIDB4NDY2NThkYjAsIDB4ZjA2MTBlZmYsIDB4NWYzMjgwN2MsIDB4MWRiOTBiNGIsCisJMHhlOGJmY2U2MSwgMHg0ZTc5ODU4YiwgMHhjNTk2ZjQ3NSwgMHgxMjZjOWZhMiwgMHg4MmZkODc3ZiwgMHgxMzJhY2VmYywKKwkweDE4Y2VmNGNkLCAweGZiYzA0Y2Q0LCAweGExNjFjZGYxLCAweDcyNjFhYWUzLCAweDIzZWRjMzdiLCAweGRjOTYxN2NmLAorCTB4ZmU5ZTM2MzEsIDB4ZmJjODQzNmMsIDB4ZmVjODJmMWQsIDB4MjMwNzczNDcsIDB4YTUxMzI0YmYsIDB4YWZkNDc5ODQsCisJMHhkMGZhODA5NCwgMHgzZjNjMjM4OCwgMHg3NjM5OGJhYSwgMHhkYTUyNWUxMCwgMHhhNTA3YjIzYywgMHg4YjZmYzQzNCwKKwkweDk5OGRlZjFjLCAweGZlODY5ZDk5LCAweDBiZDAxOGU4LCAweDE0ZjgxZTMxLCAweDhlMjkwNWM2LCAweDRhN2FhNjY1LAorCTB4ZTU4YzFmN2YsIDB4MzFkMTZkZmQsIDB4ZTU1YmVlODEsIDB4YWM0Y2YzZjIsIDB4OWUyYWEwZjksIDB4ZWJhZThlZjcsCisJMHhjNTAyNjVlMywgMHhmZTIzOTZmMywgMHhlNTc0ZDJiZiwgMHg4OTkzNGNlZiwgMHhmZjM3ZTYxOCwgMHg4Y2UyOTk4MCwKKwkweDQ4YmQyNjI3LCAweDg5NTY3NzdmLCAweGYzMzFhZGVmLCAweDZlZDE4NzJhLCAweDFjZDYzYzA2LCAweGJiZjQ0NzFjLAorCTB4ZjdhNGQwZTQsIDB4NzczM2U5ZjEsIDB4NzUwZjY4YTYsIDB4MTdmMTUxNGYsIDB4MWRmZDk2OWMsIDB4ODk0MGJmOGEsCisJMHhmNjVlZmQ2YiwgMHhmZTg4N2M5MywgMHgyMjFmYmExNywgMHhhYjFkZWE1MSwgMHgyN2Y3YjZmOSwgMHhmYzEwZDhlZiwKKwkweGZlZTA0NWJmLCAweGI4YWZkZjIxLCAweGRlOWM2ODdmLCAweDZlNzgxMTllLCAweGFmM2NiMzcyLCAweGRjNzhiYWNiLAorCTB4ZWNmN2YxNDIsIDB4ZWUzM2M3OTMsIDB4MDE5NzZkMTEsIDB4NGQ3MWQyZjYsIDB4Y2ZiOGY0NjMsIDB4MDk0YTZiOGYsCisJMHhlMWMwYjRjNywgMHhmMDdkZTBkNywgMHgzNWZiZDVjNSwgMHhhMjg1ZmFjYSwgMHhiMmIxZDZhMywgMHg5ZmE3YTMxZiwKKwkweDEyZmY3YWUyLCAweDYwZmZlNzE0LCAweDMwYmYzZjJjLCAweGYxZTM5MGFmLCAweDA4MjRkODAxLCAweDFiMTJjOWFmLAorCTB4NzExYzdkNTEsIDB4MmExYjU5OGIsIDB4NzYwNTU0OWUsIDB4YWNiOWUyMzEsIDB4Y2NhZGUzOTksIDB4MzQ5NzU1NzcsCisJMHg3MzM5ZmIxNSwgMHhkMzA5YmZiNCwgMHhhOWI0OWFhMiwgMHhiZGFmNmZlNCwgMHg5YmZhODRkOCwgMHg2M2U1ZGFmYiwKKwkweDRjYmY5M2I3LCAweDcxM2RhMTJmLCAweGVmZGE5ZjRmLCAweGE1YTMwYWI2LCAweGZkMjc4NGYxLCAweDBjZGY1YTlkLAorCTB4NzFlM2VjOTEsIDB4OWZhMjQ0MzMsIDB4YjIzMGFhOTgsIDB4NGM3NDYzNWYsIDB4MmU3ODQyNmIsIDB4Y2E4YThiZDcsCisJMHhjYzIyYTZlMywgMHgzZTkzNDQxNiwgMHg0NTIzZDQ1OCwgMHhlODNmOTdkZiwgMHg1MTk5OGIwNywgMHg3NGYzOGYxZiwKKwkweGUyYWFmOGIzLCAweGNjMzViYjRmLCAweGU3YWUxYWYxLCAweDVkNWYxYjVmLCAweDc0YmJjZWY5LCAweDk3MTk1NGFlLAorCTB4OWM0YTJmMzIsIDB4YWFmOGI4NzQsIDB4NWRjMWNlNzIsIDB4MmU3NTQ1N2UsIDB4NGZmNjJkYzMsIDB4YjhlM2ZmNDcsCisJMHhmMmY0Njc4MywgMHhmZTMzNGIzOSwgMHhmZTI1NjExZCwgMHg4YmY1ZWUzYSwgMHhlMjU1NzcxNCwgMHg0NWNmNmVhYywKKwkweDNiZTFhYmQyLCAweDBlM2Y3ZTNkLCAweDA2MjEzZjk2LCAweGYxZTIxN2RmLCAweDllZjE1N2Q3LCAweGZmZWYxZTk0LAorCTB4ZDRiZWU5OTksIDB4YzVmZGYyMWIsIDB4ZTYzZjE4NGUsIDB4YTFjZGU5YmYsIDB4YTc2YmNiYjQsIDB4OThiNzkwZjQsCisJMHg0NWU3Nzc1MiwgMHgzODdlZDc4YSwgMHg1M2VmMWQ1NiwgMHhiNDk3NzllMiwgMHhkNTYzMzNjZSwgMHgwZTA5MjNlNywKKwkweGMzNjlmNzhlLCAweGRkYzZiZmI5LCAweDk3YmZhM2EzLCAweDQ4Yzc3ZWUxLCAweDczYTRiYmYyLCAweGZhZWJkZDE5LAorCTB4MjQ2YmE0ZjIsIDB4ZjE4NzVkZTIsIDB4MzhiYTAwYjYsIDB4ZTE4N2IwZWYsIDB4OWRlNzYxM2IsIDB4YjM4YzMwZjYsCisJMHhhNzNlZWI4ZCwgMHg3NTJmZjNjNywgMHhmZDFlYWY2MiwgMHgxMjcxODA2MSwgMHgxZjc0NGQxZSwgMHhmN2NmYzhiOCwKKwkweGRmZDA5Njc2LCAweDVjNjliYWUzLCAweDEzNmZlM2FjLCAweGU1OWZmYjE3LCAweDAwMjEwMTQxLCAweDAwMDAyMTAxLAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4MTdiNWZmMDAsIDB4Njc1MzRjNWQsIDB4YjdiNzdjZjQsIDB4MGJkZjk2ZTUsCisJMHg3MjIyM2YyYSwgMHhhMjk4NjJjMSwgMHhhNzQwYzJkYywgMHhhYzc0MTYzMSwgMHg0YThhNWMxMywgMHg2NmI1MDEwMiwKKwkweDJkMDk5MjJlLCAweGNiYzJjY2Q5LCAweDAxODkzYWQyLCAweGI4YjJjM2RkLCAweDI2YTlmMzY0LCAweDg3YjZlODgzLAorCTB4NmVhZDkzZmEsIDB4ODQwYjBiNTUsIDB4YzNlMjJlMjUsIDB4NTJjOTcxOWMsIDB4YmEzMzMzMGQsIDB4ZDhkYzYyODEsCisJMHhkZjM5ZDg1YywgMHhkOGJkYjViZCwgMHhhNGRhMmNiZCwgMHhkZjNmM2QzOSwgMHhmZmY5ZGYzOSwgMHgwNzMwMDAwYSwKKwkweGI5NTZlN2RhLCAweGY4NGNlNzA2LCAweGZmYzZjZmE1LCAweDRmYTQzZDBmLCAweGJkZGRlMzhjLCAweDE3MjZlYjRiLAorCTB4M2ViYmYxYzQsIDB4MDM2OTM1YzksIDB4Y2U5YzVkZjgsIDB4ZjYwMDJiOTQsIDB4MWM1YWNlODcsIDB4YWNjZjFmMDQsCisJMHhlZGZjMjE3NiwgMHg0YWI1ZGZjMiwgMHhkMmY3ODAzYSwgMHhlZTIwMmQ0YywgMHg5NmE2NjZmZCwgMHhkMmFmZGVmOCwKKwkweDRmZTkwMjdhLCAweDhlZDc3YmRiLCAweDcwMDQ1ZTk3LCAweDEwNmI0MTk2LCAweGMxMmU1NWY5LCAweGI4ZTA4MjcxLAorCTB4NDU0NmZhYzMsIDB4MjVjMDZlNWMsIDB4ODBmY2U5MzgsIDB4ZTg5YjM0YWQsIDB4ZDlhNTVjYzcsIDB4ZjVmNDEzN2IsCisJMHgwMDY3NDUzOSwgMHhkYWFmMzllOSwgMHgwOWY0ODlhYywgMHgwNmEwMTliYiwgMHhjMTVjMGNlOSwgMHg1NTZiZjYyNCwKKwkweDdmZGZkYjgxLCAweDRhNGYyYWQyLCAweGRiZjExYzdhLCAweGUwMzZjYzFkLCAweDNjODE1MGRlLCAweGY3YzcxZTU5LAorCTB4ZmMwMjhmZDMsIDB4ZDQyMjY2NmUsIDB4YjllOTc0MDIsIDB4ZDc3MjY0YjgsIDB4M2JhZmE4YWEsIDB4NTI4MTZhM2YsCisJMHg1YzViNGNhMiwgMHhkZjVlMzBhYiwgMHgxMmFjZmQ0YiwgMHhiZWZjZjg2MCwgMHgxNzA1NjhlMiwgMHhhMDE3MjA5NSwKKwkweGUwMzczZjRkLCAweGIxOWM1YmRjLCAweDNkN2ZjMDEwLCAweDQ2OThjYTA1LCAweDRhZGY5MTEzLCAweDJhOGUxNDNmLAorCTB4YTc2OWRhMjIsIDB4YjZlNTc4NWYsIDB4NGMyN2Y3ZmMsIDB4Y2RiYTExYWIsIDB4YmRjMjY4ZmUsIDB4YzM4MjlkZGEsCisJMHgyZWVkYzk5YSwgMHg3OTIwY2U2ZCwgMHgyMTJmY2UzMSwgMHhiNzRiZDNhNSwgMHg1MWNjMjJhZCwgMHhmNDEzZTQyOCwKKwkweDAyNWFjMjE3LCAweDM2YWRhOGQyLCAweDA0MDZlZjZlLCAweDdjYTFiMDdlLCAweGE0ODg1MzliLCAweDcwZDY5ZGEwLAorCTB4NmY1MDA0NGEsIDB4ZGYwNDUzOTUsIDB4Y2Q3YjA4OGIsIDB4N2M0NjEyODEsIDB4MmJlNzI2ZjEsIDB4YmYxMTM2NmYsCisJMHgwNDJhYWU0ZiwgMHhjYmU3ZTNmNCwgMHgwOTQxNzkxNiwgMHgzNDY0ZGZiZiwgMHhmM2FhOGUyMSwgMHgzYzUyZmVkMywKKwkweDk1MzE3NmFmLCAweDM0ZWY2YWRjLCAweDQxOTNmMWYyLCAweGUzZDZlZTdlLCAweGZjMzQzM2IyLCAweDVmZjcyMTcyLAorCTB4Y2I5ZTAxMzYsIDB4OGUzODAzMWQsIDB4MThmNjc3NzYsIDB4NzU2ZWVkY2YsIDB4M2Y3NDYxZGUsIDB4MzM3ZmEwZjgsCisJMHg5MDRkODFjYSwgMHg2YmRlODkwNywgMHgzYjNhYTM5NCwgMHgwMDFmZjE4ZCwgMHg0M2Q2MjY3MCwgMHgwZDQxZDUzNywKKwkweGU3ZTFjNjQxLCAweDQ1ZDUxM2U4LCAweDU4MmEwNjE1LCAweGJmMzczZjExLCAweGY5NzQ0NjdlLCAweGYwNjJmYWY5LAorCTB4NTExN2YxMGMsIDB4ZDgwZDU2N2QsIDB4MDI0ZGJmMjgsIDB4ZjVlMTAxOTQsIDB4OWY0MTJkOTIsIDB4OWViOTE1NWYsCisJMHhmYzAxNjUwZiwgMHhkZTE3ZDcyOCwgMHg3ZTMwYzgzZSwgMHg5MTVmOGY3ZCwgMHg0YTZlNTA1YSwgMHhkMmNhOTdhZSwKKwkweDMyZjdiOGUzLCAweDQwMTY1M2Q2LCAweDAzNmNmMGY1LCAweDk4NThmYmM1LCAweDc5NGQxNTgxLCAweDI4YmVmMWYzLAorCTB4NmViMTdkNTcsIDB4YmM0ZWFkOWMsIDB4MzFkZmU2YTcsIDB4M2E0NGY5Y2MsIDB4MGQ5YTgxZDUsIDB4NjEyMDVmOWEsCisJMHg1ODE3ZmNiYywgMHg1NWVkMTA2MCwgMHg0OTFjM2QzNSwgMHhiMmI5ZjhhMywgMHhlYzg1MzJkNSwgMHgyM2E1MGVkOCwKKwkweDZiMTI2ZGVlLCAweDNjMmVlMTE4LCAweDE2MGVmODQwLCAweGY2ZTdmMDkwLCAweDAwNWI5ZDJiLCAweGQ4Yjc1NGVkLAorCTB4NWJkYzUyYWYsIDB4MTVhYWNjM2EsIDB4NDBkYWRlODgsIDB4NTA1OTZiZjQsIDB4ZmYxMjI5MzcsIDB4YzRhOTdiYzQsCisJMHg1NWFhNjcyZiwgMHg5ZWIzYmUyMSwgMHg0NDVmOGRmOCwgMHhhZGU3YWE0NCwgMHg3ODY1YTUxNCwgMHg4ZDI4Y2JiNywKKwkweGVhYzFiMzdkLCAweDU1MWY1MDBlLCAweGY0MTFhMzM3LCAweDM1ODc0NzZmLCAweDg0YjVmZTQwLCAweGNlOTBjZDliLAorCTB4YmVhMDQxZWIsIDB4ZWRjZjViN2IsIDB4MzI4ZjQ1YjcsIDB4MDk5ZjQ4YTMsIDB4NWY5MTY3NTcsIDB4MTZkM2NjMGIsCisJMHhlYTM1NjExNSwgMHg3ODQxYzgyZSwgMHhiMDA1YmVlMSwgMHhiNGUyYmMxZiwgMHg3M2I5NDY0NSwgMHgwNWFjNGMzZSwKKwkweGM0OWY0YmUwLCAweDgzMjdjODYxLCAweGQ3YzAzOTYzLCAweGMzMGU3Y2JlLCAweDJmZDM4NTNlLCAweDhjMzljYWZhLAorCTB4NDcwZTU0ZjgsIDB4YTgzNTZiN2MsIDB4OTU5ZTNjY2EsIDB4ZGQwMmZiZTEsIDB4NzA1OWE3MjcsIDB4N2U2ZjliMjUsCisJMHhmOTYyM2ViZCwgMHgyOWVmMGJhYSwgMHhiYTNlN2JhNiwgMHg5Mzk2MmVlYSwgMHg1YTIwYzdjOCwgMHg2YWQ2MTQyYywKKwkweDY3MzBjOWZkLCAweDA2YzNlNzVlLCAweGU4ODFlM2IyLCAweDYwYTczYTYxLCAweDQ2MGQ2MWJlLCAweGVmMzA4NDIxLAorCTB4YWE2ZmViYmYsIDB4ZDk2ZjliNTIsIDB4ZjE5M2I4MDIsIDB4MDRmYWY0NjcsIDB4M2NkMDIyODcsIDB4ZmFkMjRiN2EsCisJMHg1ZmM1Nzg3ZiwgMHg0ODUyOWUzYywgMHhmMzFlYjJiOSwgMHg0MTM3MTllNiwgMHhkNDhmZDIwYSwgMHhiZTdmNzM2YiwKKwkweDRmMThlYjllLCAweGMwZGRiOGMwLCAweGNmOWMxMjc4LCAweGNiZjhiNTZmLCAweDc0YWQxZjI4LCAweGE3ZTcyNDhmLAorCTB4MGFjNGZhZjQsIDB4YjQzMmJiMzAsIDB4NGZiYzMyOWMsIDB4NjAwZTZjNDcsIDB4OGYzMGIyMjAsIDB4NDkxNjIxMWQsCisJMHgxOWRmM2VjNSwgMHgyNDQ3NzRkZSwgMHg5NmUwYzNkOCwgMHhkNzNjN2U3MSwgMHg0NmU2ZDg3ZCwgMHhiNmYzODlhNSwKKwkweGY5MjY4ZDMzLCAweGQ1NGE1YzEzLCAweDM0NTkyY2UyLCAweGY2ZDU2ZmQ4LCAweDhiNWQ5MzVhLCAweGI1NmUwYzczLAorCTB4OTQ3MTc1NmIsIDB4ZmJlYjA1OWEsIDB4MzgxNjc5ZTgsIDB4YTllN2ZkODgsIDB4NzM0ZWJiMTgsIDB4ZDAwMWNmMmMsCisJMHg5M2M3YzM4YiwgMHhkMTMxMWU5ZiwgMHhlZjk5MGYzYywgMHhkOGUzOTkzZCwgMHgwYzhhNzkxZiwgMHgzNzk0MzkxZCwKKwkweDQxZjYyNjBjLCAweDI0MDc3ZTgxLCAweDYzOTQ2ZGMwLCAweDZlNjExYzkxLCAweDE5MmRjYTI1LCAweDlmN2QyNTlmLAorCTB4MmY2ZTE1ZDgsIDB4MDE5MDU3NzcsIDB4ZmUwNDUwYmEsIDB4NDY1ZjM0ODMsIDB4MWE3NzUwMmQsIDB4NjM5ZDc3ZWQsCisJMHgzYmZhOTA3MCwgMHhmNzA1MDJlMCwgMHgxYmYxZThmZCwgMHhkZDIxNGY4NywgMHhiNGM5OGU3MywgMHg1NzgzYmE4ZSwKKwkweDE2ZWY5ZWY5LCAweDc4ZmY3ODI3LCAweGJjMmQ3N2MyLCAweDM1Mzc4MzFlLCAweDAyMzk4ODdhLCAweDQwM2FmMjQ5LAorCTB4NmVlZDFkZmIsIDB4NmU2ODdmNDYsIDB4MDUzMDFmNzQsIDB4YzM2ZWQwNTIsIDB4YmRhZmFkMzksIDB4NDE0MDRiMGUsCisJMHgxZGU4YWM3YywgMHhlNzlkZjA5MSwgMHgxY2QxZTQxOSwgMHhhNTE2MjY1MywgMHgxOTgwZmYxMSwgMHhhZmRjMjUwMiwKKwkweGZkODRiYWE2LCAweGZjODU1Zjg0LCAweGQ4Y2ZlZDhlLCAweGY0YzBmMWZlLCAweDZiZDUyMTU4LCAweDBhMjM1MzI3LAorCTB4OGNiNzNmZGYsIDB4OTIyZjA1ZmIsIDB4ZWQyZmRmMWIsIDB4Y2QzMzYxYTEsIDB4MDY0M2RjMWIsIDB4ODY4ZWRkYjksCisJMHg3MTNmMzQzYiwgMHg0YmU5MThjZiwgMHhmOWU3ZGYwZSwgMHg1M2FmMjg4MCwgMHg3ZTA2MmZkYywgMHhlMTYzM2Q4ZCwKKwkweDU4MDkyYzZkLCAweDM4NzMxNTA5LCAweGNhNTUzNmNmLCAweDZlYWRkZjNjLCAweDFmMThkY2M2LCAweDkxNzU3MDQ5LAorCTB4Yzk5MTcwOWYsIDB4YzdlNzZmMzQsIDB4ZjVhZWQxYWIsIDB4NDE5ZmEzNDEsIDB4Yzg3N2U2MmYsIDB4ZDBjN2Q1YTIsCisJMHhhM2YwMTYzYSwgMHg5NGEyMjM3YywgMHg3YjhiYTFmNywgMHgxY2ZkMGNmYywgMHg0MGFhNjJhYSwgMHg4YzIxMjBmMSwKKwkweDNlM2QxNmM3LCAweDZlMWY4MDJmLCAweDcwYTlmYzRiLCAweGUwMWFhZTZjLCAweDJiNjFhYzM1LCAweDVlYTM1M2Q2LAorCTB4NmUwMTAwMGYsIDB4ZDRlM2Y5YTcsIDB4OGUyM2JkMDgsIDB4MmFmOTgzOWEsIDB4ZjlmODk3N2YsIDB4ZTA1NTY3N2QsCisJMHhlODE0ZDRmYywgMHg2YmFmZDY0OSwgMHg2YWIzNzVlYywgMHhmMzNkYzkwZCwgMHg3YjJlZDNmNywgMHg0N2QzZjc5MiwKKwkweDNiMjI3NmY4LCAweDI0NGNlZDdiLCAweDJiYmUzMGJmLCAweDE1ZWZiZmE5LCAweDQxMWNjYjVkLCAweGI1Yzk4MWY0LAorCTB4NTk3NWNlOGYsIDB4YmVhOWFiMjIsIDB4MWNkYzk4MWYsIDB4ZWU5MWYxOGYsIDB4OGI4MmZkYTEsIDB4OTFmNTE2ZWYsCisJMHg4N2NmOGMwMCwgMHhjYzY3ZTUyMywgMHhhMjc2OTc5NCwgMHgxMjViZWVjNywgMHhlOWI4ZTM5NywgMHgwYWExZmM2OSwKKwkweGExZWZkYWNmLCAweGZkYTc5YWNhLCAweDE3ZmE4NjdlLCAweDdmNTdjZmFiLCAweDFkYmNiMjZlLCAweGE0OTdmOWEyLAorCTB4ZTdkMjdlN2UsIDB4OTkxMmMwMWYsIDB4Mzg5M2NiZjcsIDB4NjQ4N2I2ODMsIDB4YWEzYzc1ZTAsIDB4YTY3ZWY1ZWYsCisJMHhjODdiNDhmYywgMHgwNjE5OWRmZiwgMHhlZDVjZjg5NSwgMHg3ZmY0ZDBjZiwgMHhjMThiZWJhNiwgMHg5YmY2MWQ1MSwKKwkweGY2ZjliOTM1LCAweGZjMzlmNDI3LCAweDhhNzFjOThiLCAweGE0ZjJiZGVlLCAweGRmODI0YTAwLCAweGEwYTk4MmFiLAorCTB4MTk1ZGY4MjQsIDB4ZjZlMDMxY2EsIDB4N2M4MzYyYzgsIDB4ODFhOTc4ZjUsIDB4YzJiMTMzNWYsIDB4YmQ3MzVmYzAsCisJMHgxNGJmODBjYSwgMHg1ZjkwNjc1ZCwgMHgwMWJkNmJmZiwgMHhjNWJkMzBkZiwgMHhjZmYxYmYyMCwgMHhkNjNjMDY2ZCwKKwkweGI5NTg3NWJmLCAweDQ5MzZlNzg5LCAweDBhZTQxYmFmLCAweDE1N2U4ZDNiLCAweDJhZmQxOGY1LCAweDE1ZmEzNWVlLAorCTB4MzdlMjViZDMsIDB4ZGZhY2I3ZmEsIDB4ZjY0ZTVmZTgsIDB4ZGU4NTVjODMsIDB4OTFmY2ZmYTEsIDB4MjA2MGZiNDksCisJMHgzNGYzYzMzYywgMHgxMzAyOWQzNSwgMHhhOGM0NDczNCwgMHg2NmMyMWZiNiwgMHhmMGE2MTdiZSwgMHg4NGEyZTJmZiwKKwkweGQ3YTcyYzNjLCAweDA5MTlkYTNmLCAweGI5ZDJiMzJmLCAweDJiMzY5ZDBmLCAweDUxMmVkYmJkLCAweGZlM2U2MDBkLAorCTB4MmU3NmQ3MDUsIDB4MDAwZWUwMTcsIDB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgY3NlbV9pbnRfdGFibGVfZGF0YV9lMVtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4ZTczM2ZmMDAsIDB4NTFmODYwNjIsIDB4MzlmYmMxMGYsIDB4NzE2ZTE4MTksCi0JMHgwMTQzZjgyMiwgMHhkOTQzMzExNywgMHgxMDE3ZmE0MCwgMHg2MDY0NjNiZiwgMHhiYzQ4Y2Y3OCwgMHgwNDBlMzU3ZSwKLQkweDAzM2IyZjdiLCAweDNlMjAwYWMzLCAweGZlZjAzZWMwLCAweGM5NWM0ODFhLCAweDRlYmIzZjRkLCAweDYyMmVkMWQwLAotCTB4MDY3ZTJlZjAsIDB4MGMwMjNkODYsIDB4MTA4MjU5MGMsIDB4NTQ0MTdmZmUsIDB4MDhmY2RkZjksIDB4NjUxODk4YjYsCi0JMHhmNTAxMjk3NiwgMHg5MzMyMDAwMywgMHgwMzgwMDlkMywgMHgwMDAwMDM4MAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4ZTNlM2ZmMDAsIDB4NTFmODYwNjYsIDB4YjhkM2MxMGYsIDB4NzIzNjE4MTgsCisJMHgwMTQzZjgyMSwgMHg2ODQzMzNiNywgMHgwNjA2MTYzZSwgMHhjNzdlMjAwMSwgMHg5ZWYwYzBjOCwgMHgzODMzMDQ5MSwKKwkweDIwN2VlYzEwLCAweDI3ODgwYWJiLCAweDdkY2Y1MDcxLCAweGU1MmYxMTQzLCAweDVmNWQ5ZmExLCAweDE1M2Q3NmEwLAorCTB4ODM3Zjc4MTgsIDB4MDMxMDgzYjAsIDB4MDMzMDliODMsIDB4ODQwOGI0ODMsIDB4NTUwNDVmYmYsIDB4YzEwODUxZGUsCisJMHg5OTQxMmU3ZSwgMHhmYTgxOWY1ZCwgMHhiYmViOGQwMSwgMHgwMDAzODAzMSwgMHgwMDAwMDAwMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiBjc2VtX3ByYW1fZGF0YV9lMVtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RkNWZmMDAsIDB4YzU1NDdjMGIsIDB4YmRkY2Y4ZDUsIDB4ZWVjZGRkOGYsCi0JMHgyMTA3OWIyNiwgMHgwODZlM2MyMSwgMHg0YmM2MGEyMiwgMHg5YmFkZTEwMiwgMHg4OGI0NjIwNCwgMHg3ZDYwOGE4OSwKLQkweDg0MjAxODJkLCAweDk2ZDIyMjQ3LCAweGVkZjdlZDdlLCAweDVhYjExMDYyLCAweDY4ZGIxNTFiLCAweDM0MTA1ZGIxLAotCTB4MDYwYjI4ZGEsIDB4MmRmMDk4MGMsIDB4YWE1Njk0YTAsIDB4ZDFmNThkZjEsIDB4OTBjYmM4YTAsIDB4Zjg3ZTg3ODQsCi0JMHhjZTdmZWI2OSwgMHg3YmJiYjk5OSwgMHg3YzQ4NmVlZiwgMHhmZWZkZmJmNCwgMHg3MzBlY2ZlOSwgMHgzMzk5ZGVlNywKLQkweDljZTczNWU3LCAweGM5MmIzMzM5LCAweDIxMGNiMTAyLCAweGJiZjgxYmU0LCAweDIyYWQ5MDljLCAweGE0NmM2NDIxLAotCTB4ZTVhMjJhZWMsIDB4NzlmYzQyMTgsIDB4ODEyNmMwOGUsIDB4YWZhZWQwOTAsIDB4NDIzNDkwOGUsIDB4NTRjZDM2NGUsCi0JMHhlYzg0ZDlhZCwgMHgyZTg0NzNjZSwgMHgwMzI3ZWRhNywgMHg2ZDJiMDE4NSwgMHg3NmY2ZGUyZiwgMHg0YmViNDRhMiwKLQkweGI0MTI4OWI2LCAweGYxZDk3NjViLCAweDQyNzVjZWZiLCAweGQ2ZDVlYTAwLCAweGQxMjYwN2I2LCAweDkxMzZmNzdhLAotCTB4OTM1ZGEwNmMsIDB4ZDI0MmQzOTAsIDB4MjM2MjM5MDksIDB4NjE3NTRmZWMsIDB4NTU5ZGJlN2QsIDB4N2RkZmFjOTcsCi0JMHhkOTU3OGMyYiwgMHhmYTc2MjU2YywgMHhkMTI2OTFmZCwgMHg5YjY1ZjUwMywgMHhlM2ExMDA4NCwgMHg4ZjcxZDkyZCwKLQkweGI3ZjY4MDMyLCAweGVkMDQyMDIwLCAweDdhNmZhZDJhLCAweDg0NWQ1MTUwLCAweGZkZWJiNWRjLCAweDIxMjc3NmM0LAotCTB4YTIzNjdjMjcsIDB4Y2E4ZjM4MmEsIDB4YWE0MjI4ZTAsIDB4MDY0YTViMDIsIDB4MWFhYmVmZDAsIDB4ZmI0MmNkMDUsCi0JMHhhYTc3NWFhZiwgMHg2YWFiZTAxMywgMHg2OTEwMmY5MiwgMHgxYzFhOGI3ZiwgMHhjNmMxMWQ0NCwgMHg3OGMwODZmZSwKLQkweGJjNzAzYjdiLCAweDE4MzBmMjZkLCAweDNiZWJmMmFmLCAweDNjYzIyMjE1LCAweGI3N2MwZjY1LCAweGYzMDFjMjg0LAotCTB4ZTEzZGM3ZDYsIDB4NzRmMWM3YWIsIDB4OWE3OTJlN2MsIDB4NWJkZjQ3OGUsIDB4YzFhMDljZmEsIDB4ODg1YTk3MTQsCi0JMHhkY2U4ZTAxNywgMHg4NGZkOWY2MSwgMHg1MmI3ZTYxMywgMHg5ZThhZWUxOSwgMHgzMGVkOWNjNywgMHg3YWMwYWE4ZiwKLQkweGYwMDljNGE1LCAweDhmZTY1N2FkLCAweGE4YjdmNDhhLCAweGY4NDZmN2UxLCAweDdiZmE3M2VhLCAweGU1Y2RkYWEzLAotCTB4ZTk0NTFmMDksIDB4OGFiZDQ4ZjAsIDB4ZjY5MDRmMTAsIDB4NTI4MGE0NGIsIDB4ZjllNDQ5N2UsIDB4ZDIzMjQyMDcsCi0JMHg0ODgzNTE3YiwgMHg3ZmE0NWI1NCwgMHhmYTQyNzk0YSwgMHg5YjdmZmZkMSwgMHhjMWUyOTNmZSwgMHg2YzBhZWFkZiwKLQkweDZkZDA4ZWNhLCAweDE2NjgxYjk5LCAweDM3NjlkYmExLCAweDVkZDRhM2E3LCAweDVlYmZkZDEwLCAweGEwZjQwMDNlLAotCTB4ZGNmOWQ0ZjAsIDB4Y2JlNDNlNTgsIDB4NGZhZDcyYzAsIDB4ZDZmZGJjNDUsIDB4N2FjYjAyMzcsIDB4MWZjZjg2OWYsCi0JMHg3MmM3OGRmMywgMHhlNTgzY2Y5ZCwgMHg1OGE1N2MxZiwgMHhmODY1N2MwNiwgMHg2Y2RmMDZkZSwgMHhiY2ZhMzcyYywKLQkweDVmNDlmY2Y4LCAweGJlMGQ5NjI1LCAweDhjZmU3YzFhLCAweDhkOTYwNTZmLCAweDdmM2UzZjNlLCAweGNiMDZiN2NlLAotCTB4Y2IwZWFmYTAsIDB4NWEyZjQwYWQsIDB4ZjgwMmY5MzYsIDB4MDM1Zjc2ZGUsIDB4MjBiZWNkOTYsIDB4NmJlOWRmM2UsCi0JMHg4ZTdlZjJjNiwgMHhhNGM5YzRjNywgMHg0ODc4YTI1MCwgMHgyNTM3MTBmNCwgMHhlZTk5NDkzYiwgMHgzZDY5OTQyOSwKLQkweGQzZDU4Y2E1LCAweDJhMTdmNjZmLCAweGE1ZWU5ZWI0LCAweDAxOTc4YTc1LCAweDU2ODU0MzhiLCAweGMzNTAxZjVhLAotCTB4OTJmZjA3ZGEsIDB4N2Q2OGQ5MTQsIDB4MGZiNTlmYjAsIDB4NjQ1M2RmYmQsIDB4NzVhMWY1YTcsIDB4M2FmODdkYWMsCi0JMHhhZDAyNTE3ZiwgMHhmNmIwMGYwZiwgMHg0NTQzMWI4YiwgMHgzOGJmNWEwZSwgMHg1YjczZGFjOCwgMHhkNjkzYjE0OCwKLQkweDllYWM0MzczLCAweGVjNTNjMDc3LCAweDM2YmNmNWEyLCAweGMwZjgyZjU2LCAweGViNDg5YzVmLCAweGZiZWNlZDA1LAotCTB4NTEwMTFkODksIDB4NjFkMmM2NzUsIDB4NGVkZWFjYWIsIDB4ZjlkNmFkMjgsIDB4MTM0OGY0YWYsIDB4ZWY1MTVkNjgsCi0JMHg4ZmM1MWEyNCwgMHg5NDhmNWFmZiwgMHg3YjIxZjE0OSwgMHhiZmU0M2RiMCwgMHgxNDliZGIwOSwgMHhlMWJmYjYwZiwKLQkweDc2ZmFjMGFmLCAweDg3ZWQ4YmQ5LCAweDVkNTg0YmZkLCAweDE3ZmI2MmYxLCAweGJkNjI5ZmZlLCAweGJiNjNmNjU5LAotCTB4ZDU4ZmE1NmQsIDB4MGZiNjNmMTUsIDB4ZmIwNmI5NTgsIDB4YjAwNzI5ZGYsIDB4MDdjYWQ0N2QsIDB4MTJhNzdkYjEsCi0JMHg1Njg3ZjZjMCwgMHg0YTk5ZTYzZCwgMHhmNzgyYjVlYiwgMHhiNDhmYzBiNywgMHhjMDM5MjRhYywgMHgzMjhjYzE0ZiwKLQkweDA1YWI0ZmNhLCAweGY3ZjgxYjMyLCAweDI4ZTk4MGJmLCAweDU0Y2VhZTVmLCAweGZlYjcwZTUwLCAweDkwMDllMGFkLAotCTB4ODM0YmZjNWYsIDB4N2YyN2ZjZmEsIDB4ZmZkZjhkOTUsIDB4Njk5MWZiMTEsIDB4ZmRlZjYyM2YsIDB4ZGUzYWJkZTQsCi0JMHhhYmRlNGZkMCwgMHgwZDNmN2E5NSwgMHhiZGFkNWVmMCwgMHg3ZDZjZmQ2ZiwgMHg5ZTExYTI3NSwgMHg3ZWY0YWI1NywKLQkweGFlM2MyMGI2LCAweGVmMmJjZGJlLCAweDc4NDZjOWI1LCAweGY3YWM1YjVlLCAweDQ5ZTExM2IzLCAweDRkM2MxYmVlLAotCTB4ZDNmMTFiNmYsIDB4M2YxODc2ZjQsIDB4N2U5ZTExN2IsIDB4Y2M2NzgzN2QsIDB4OGNmYzQ2M2IsIDB4OWY4YzI3NzksCi0JMHg2NjRmZDgwMywgMHg3YTY5ZmFkZiwgMHhhNjlmODhjNywgMHg3OWY4YzI3NywgMHhhODM1ZTcxYiwgMHhmMzFhZjM2ZiwKLQkweDYzM2YxMWFlLCAweGU3ZTMwZGRlLCAweGJiMjc4NDIzLCAweGZmNmNmZDZmLCAweGVkOWY4OGQwLCAweDczZjE4NjFmLAotCTB4YTBiOWZiMTQsIDB4ZjgyYWYzNmYsIDB4ODI5Zjg4YzgsIDB4ZTlmOGMyOGYsIDB4ZWEyZTdlYzYsIDB4M2ZkYjNmNWIsCi0JMHhmYjY3ZTIzMiwgMHg3Y2ZjNjE0NywgMHhkMjVjZmQ4OSwgMHhmYzE1NzliNywgMHg4MjlmODhjMywgMHg2M2YxODQ3ZiwKLQkweGQxOWZhMDExLCAweGY5YTc4MzdkLCAweDlhN2UyMzUzLCAweGM3ZTMwZDNmLCAweGVkOGNmZDgxLCAweDhmZTMzYzFiLAotCTB4ZmUzM2YxMTgsIDB4NjkzZjE4NDgsIDB4NDI3ZGQwMDIsIDB4M2U2OWZhZGYsIDB4ZjM0ZmM0NjIsIDB4MDY3ZTMwOTEsCi0JMHhmYTUzM2Y2MSwgMHg0N2YxYWYzNiwgMHg3ZjE5Zjg4ZCwgMHhlMTlmOGMzNCwgMHgyYTQyYWYzOCwgMHhhMTBmMDBmNywKLQkweGVlN2FiOGZkLCAweDIzNDllNzY3LCAweDBjOWU3NjdlLCAweGVjNTJlN2UzLCAweDI3ZWQxYTY3LCAweDI2N2VmN2E3LAotCTB4MzNmMTFhNzYsIDB4OWY4YzMzYjEsIDB4OTVjZmQ4ZjEsIDB4Njc2N2ViN2QsIDB4M2IzZjExYTcsIDB4MjlmOGMzM2IsCi0JMHhkZDVjZmM0NCwgMHhlYzRkNzliNywgMHg2MjY3ZTIzMiwgMHhmZTRmYzMxNywgMHg4OWM1MzU1YiwgMHg4NWFlOWRiNCwKLQkweDk5M2Y0ODlhLCAweDA4ZjFlMWQ0LCAweDU5YmEyZWI0LCAweDA0NmI3NDVkLCAweGI3NTExMmVjLCAweDQ3OWI0ODM3LAotCTB4MWIzYmRmYTQsIDB4NDU3ZWYzOTMsIDB4YTI4ZWVkYTIsIDB4OGI5Nzk4NzIsIDB4NzZkMTYzNWEsIDB4MDRmOGQyNDcsCi0JMHhlYzkzOWQ4MywgMHg1M2Q0MzE0OSwgMHhkZTE4MDc0YiwgMHhkNDM2NTdlZiwgMHhmNjdmZGVkMCwgMHg0Y2Y2ODZjNSwKLQkweDllYTE5ZTZmLCAweGYwZDEzOTU1LCAweDIyOWFhMGZlLCAweDhhYzg3ZDQzLCAweDY3ZWYwY2FiLCAweGQ0MzVhZmZiLAotCTB4ZDhmY2Q2NzMsIDB4NzUwNWZlZjAsIDB4MTdlZDBkNzMsIDB4ZGExOTU3ZDYsIDB4MzMyYzBhMmYsIDB4ZmMzNjQ3ZDQsCi0JMHg0YmZkZTE4NywgMHhkYTE5Nzc4MiwgMHg5NWZlNmQyZiwgMHhlODc0N2RhMSwgMHg3ZjNkNDMyMSwgMHhmNzg2NjNmZiwKLQkweDMwNmRiNmM3LCAweGY4M2I4ZmI0LCAweDQyN2RhMThjLCAweDdkNDM1NmZiLCAweDI2OWRiMWQyLCAweDNlZTljZjNiLAotCTB4NDVkNzkyMzIsIDB4ZWNjMjdiZTAsIDB4ZWQwNTRjZmUsIDB4YzE0YjkwYmQsIDB4ODljMDMyYmEsIDB4ZDc2ZWZjNzYsCi0JMHhhNTMwZjU3YywgMHg3NmU3YjJhZiwgMHgxN2QyOGQzNSwgMHhiYWU4NGE2OCwgMHhmMmEwMzg1ZSwgMHhmY2ZhNzZjMiwKLQkweDE3YmQxM2E3LCAweDlmZjNlOWJhLCAweGRkNGJkZTJhLCAweGNhNTNlYzcxLCAweDgwYzkwMjBmLCAweDY5NDBiNTUyLAotCTB4NjY0N2JmNmUsIDB4ZjU5NDU4ZmMsIDB4ZjQ0M2YwZjUsIDB4Zjc0YjZhZmIsIDB4Yjc1YTY0ZjAsIDB4YzBmNTg1ODgsCi0JMHgyYzEwN2ZiZiwgMHgyMjA5YTdjOCwgMHgxMmY3ODFhOSwgMHg4MmZkMDRhYywgMHg5ZTBiYjI3YiwgMHhlYmYxNDdmMCwKLQkweDBlNTQ0MTlhLCAweDZiYmY0ODg1LCAweGQ4MDY2ZjY0LCAweGJlNTYxYjE5LCAweDY0M2IwN2VlLCAweGFmM2EyMGY1LAotCTB4MjEzYzg0MDEsIDB4MGZmMjFlYmMsIDB4OWEwZmRmYTMsIDB4ZmRhNWUxOWYsIDB4YTc2YTE1NTksIDB4ZDBhZjhmNDcsCi0JMHhmOGUxNDdmMSwgMHg3M2ZlMzAwZCwgMHgxZDZmOGMzZCwgMHhiZTMwZGUzYSwgMHg2MWE1NzA2ZCwgMHhjNzQyOWI3YywKLQkweDYwN2I1Mzc3LCAweDdjN2M3YmU1LCAweDg0ODk4NDRhLCAweDg3YmMyZjNjLCAweDU3MDc1YmUzLCAweDI4ZjdmOGUyLAotCTB4MWU4OTVmZDQsIDB4N2UzYzIxM2YsIDB4MmVjYmM4MzMsIDB4OWM2YzdmMTgsIDB4Njg5ZDBmZjksIDB4MmFlMGZmOWMsCi0JMHgzNjE1ZmNlMywgMHgwZjJiM2RmZiwgMHg3MDEzZjFmMSwgMHg0Mzg1N2JmZSwgMHhhYjgzZmU2YywgMHhhY2FkZmNkOCwKLQkweDg5ZjhmMGRmLCAweDg3ZWZmYzYxLCAweGQzZGFiZmY5LCAweDFiMjY3M2ZjLCAweGIxNjQzZmU3LCAweDM2NTZmZTcxLAotCTB4OGYyYjFiZmUsIDB4Mzg5ZGYxZjMsIDB4NzFjMjliZmUsIDB4OGIyMWZmMzYsIDB4ZWFjNTdjNzEsIDB4OTQ3ZjgwZDUsCi0JMHgwMDlhODRhYywgMHhhNDBjOWYxZCwgMHhiMDNmYTk4YSwgMHhjYTA3MWQwYiwgMHhhOTk0MjkxMSwgMHgzMGI1ZjkwOSwKLQkweDY5ZjhlMTE0LCAweDJmYjdlMzAyLCAweGExYmYyODEyLCAweDczZTNmMWJlLCAweGFkOWFhMDEyLCAweDljNWRmYTgwLAotCTB4MTYzNTE3ZDcsIDB4YjA5N2EwMmEsIDB4ZjMyYmZhOWQsIDB4Y2QxNWE4MzgsIDB4NTkzN2YyMjIsIDB4NDA1YzBkNmIsCi0JMHgxNjZjZWRlMSwgMHg1OGFmNTBmZCwgMHhmYTAwMjUzYiwgMHg2ZTRhZGFhZiwgMHgyNGVmODMyYiwgMHg5ZmU3ODIxMiwKLQkweDg2Yzk3MjNlLCAweGNiOTk3OWU4LCAweDkxZjI3NTc5LCAweDBiNzkyOGY2LCAweDY0NDU1MWZiLCAweDZmODUwZDQ0LAotCTB4ZDhjMTMwMWEsIDB4ZWE2M2ZkNDgsIDB4NWZlYTExMDcsIDB4MGNmZDQwN2MsIDB4MTNmMjU5NDIsIDB4MTFmNzhkOTksCi0JMHhkZWEwOTdmNSwgMHg2ODI1ZmQ0ZSwgMHg3ZTI1NjQyNywgMHgyYjdiYmI0NywgMHhjNjVmYzI4MywgMHg2MjU4ZmZlMSwKLQkweGNkZjFmYWYyLCAweGU1NGZjMDQyLCAweDhmOWY4YmYzLCAweGI2ZjUzZjQ2LCAweGY0OGEwZTE1LCAweGZjNzMxYzA4LAotCTB4OWQzYTg2YTksIDB4ZDRlODFmOTcsIDB4ZDgxYWMzYmQsIDB4NTU3ZTIwMjAsIDB4OGEzOTU3YzAsIDB4YWZiNzIxMjYsCi0JMHg4ZWI4YTJjOSwgMHgyNTJlZmZiYywgMHhmZDQ1MjY3YiwgMHhmNzIzYzQwZCwgMHhiMmRmZWZhNywgMHhhNmU0MTg1YywKLQkweDU4ZjRjZWUzLCAweGUxM2FkOGYzLCAweDVjYTBiMmM5LCAweDc4Y2IyYzkzLCAweDFhNmRhZTQyLCAweDQ4MWVkMzJkLAotCTB4YjhmZTQ3YjksIDB4ZWJkYzZhM2QsIDB4OTlmNThkNGEsIDB4YTc3YWM2NjUsIDB4MTQyZDkxZWMsIDB4ODE3MmNlYWUsCi0JMHhjZWZkYTdhYywgMHhkNzZjNmQ5YSwgMHg1MjVhNzFjNywgMHg3OGY5OWQxOCwgMHhiZTBjZTk2NSwgMHhjMWU2NTA1OSwKLQkweDc5ZDIzNzYzLCAweGFiN2Q5YmI2LCAweGJiN2Q1M2MzLCAweGEwNTg1ZDRjLCAweDAxMWZiZmE3LCAweGYwZDNmYWJhLAotCTB4ZDliYjFmYmQsIDB4Y2VmMGNkYmMsIDB4MzI5ZTZkOTYsIDB4NzNkOWNmM2EsIDB4YjdmMDAwYzQsIDB4ZWZiZmZlMTksCi0JMHhiOTJjNzg3MiwgMHhiMGYzNWNiNCwgMHhmM2IxMmM0YywgMHhhMzdmYzMzMSwgMHhhMDlmM2NkNywgMHg0ZGYwZWIwYywKLQkweDhjZTdlNjk1LCAweGZhNzA4ZTZmLCAweDQxZmMwYzdmLCAweDFmYzBhM2NiLCAweDljYzNmZTE0LCAweDk1N2EyMjNmLAotCTB4ZDViNTQ3ZjEsIDB4YTFmODAzM2IsIDB4MjA5MTUxZmIsIDB4ZGNiZjM5NWQsIDB4NWU2NWY5YzAsIDB4MDgyZjkxOWQsCi0JMHhjNzQwY2FmMSwgMHhiYzg1YjMwNSwgMHhjMWYxNDU1ZiwgMHgwYjA3Y2UyYywgMHg3MzdjOGRlYSwgMHg5OWNiZjEwYiwKLQkweGUzNzJlODcxLCAweDY3NzdmNWRhLCAweGZiZjNiMWE4LCAweDRkY2RmMzkwLCAweGZjNDZlZmY3LCAweGQxOTNjZWM0LAotCTB4YTc0ZTU2ZTksIDB4ZWQ4YzZhNWIsIDB4ZGViYTcwMzcsIDB4YmIzYWU5YzIsIDB4YTk5N2MxZmUsIDB4NTYzZjIwZmEsCi0JMHg3YmM4MzIwMywgMHg3YTc0MmZmNSwgMHhlOWU4MWJiNiwgMHhjMzM0ZjRlNSwgMHhlN2E3MmI3OSwgMHhmNDY3M2ZhZCwKLQkweGNlZGJjMzM0LCAweDdmNWVkOWU5LCAweDYzNDMyNjQ2LCAweDc3YzMzNWUxLCAweGY5OTg4YWRiLCAweDM5Y2Y0MDI4LAotCTB4YWNmNGY4ZmUsIDB4M2Q0YzJlNmUsIDB4NDk3Y2Y1MWMsIDB4YzNkNGNhZjAsIDB4YThiNjcyNTEsIDB4NWY1MGRjYTEsCi0JMHhmMGQxYjgxOCwgMHgzOWZhODJmZSwgMHg3NTc5ZjY4NiwgMHhiN2VkMGQwYiwgMHg1MGMzYjlhZiwgMHhiOWZmZTM5ZiwKLQkweDU2ZGJmZGUxLCAweGRmYjQzNGFjLCAweGExYWY3MzUyLCAweDA3Y2FhNmZkLCAweGJkMWJmNTBkLCAweDlmZGUxYThmLAotCTB4YTFiZDdiMzUsIDB4ZDNkOTY2N2QsIDB4NGFlYmY2ODYsIDB4ZTVlYTE4YjcsIDB4Zjc4NjFkOWUsIDB4ODcwYjVkODUsCi0JMHhlYWJhZTNiNCwgMHg4ODdmNjNmZCwgMHg0NTY3YmUyNywgMHgzYmViMzUzZSwgMHhmNjFlMmY1ZCwgMHg4OGZjZjhhOSwKLQkweGM3OTYwNDZmLCAweDNmM2UxYTdjLCAweGU1OGYxYmUxLCAweDc0ZGZkMDRhLCAweDYwZWNiMDVkLCAweDczNDNmNTY1LAotCTB4ZTJhM2I4ODYsIDB4ZGFjODlmMWUsIDB4YmRiM2QwNjAsIDB4N2RmZDQzZTksIDB4N2ZhM2RlYjMsIDB4MTRlY2YxNTksCi0JMHg5MDJjNWNiZCwgMHhiYjA3NTgzMiwgMHgzZmFkMWRiOCwgMHg0OWQ3YzUzZiwgMHhiOTQyZWU0MiwgMHhiOTMwYWM1YywKLQkweGIzMzViYzVkLCAweDNkNDIyNDg4LCAweDRlMjZiYzM0LCAweGNmMmMyNjdjLCAweDMzZTcwMTQxLCAweDAwYzcyZWFmLAotCTB4OTFmYTgyZTcsIDB4ZTAzNmY4MjYsIDB4ZjkwMzBiMzgsIDB4MWE4YmU3ODYsIDB4ZWJiZTE5MjYsIDB4N2MyMjJkZDgsCi0JMHgyN2M2NDE0YiwgMHhiNjU2NzJjMCwgMHg4NWYwMDJjNywgMHhlZWJlMGVmNiwgMHhiM2Q3ODAxMiwgMHg0YmViMDJkNywKLQkweGU3YjQzZjczLCAweGE5YTU3YzNhLCAweDczYzAyNTg3LCAweDdjYzc5NjE5LCAweGUyM2NiMWIzLCAweGQ4Nzk2MmYzLAotCTB4YzdlNTg5NTcsIDB4ZGIyYzFhYmUsIDB4ZmNiMDJiN2QsIDB4ZjJjN2U3YzgsIDB4MmMxYWRmMDMsIDB4YzNhYmVlZmYsCi0JMHgxZWFmYTBmMiwgMHgwMTdjNzdjYiwgMHgzNWYyZGYyYywgMHgyZjg2Zjk2MCwgMHhhZjliNjU4OCwgMHg5ZjRlY2IxOSwKLQkweDVlNWQ0YjA3LCAweDQ4NjVmOGEyLCAweGU4YmYxNDY2LCAweDhmZDc0ZmZhLCAweDljYmYzOGM3LCAweGM3ODk3ZTAwLAotCTB4N2M4YzFiMTcsIDB4NDFhZTU0NzEsIDB4NDNlYjMwYmUsIDB4ZmFjYzFkMzMsIDB4YzNmMmJiZWYsIDB4ZGJiMzBiNTgsCi0JMHg0NDNmMmZiZSwgMHhhMjY1OWRlOCwgMHhmNDZmNGU3NywgMHhiZDE0NjIyNiwgMHgwY2RjNWFjNywgMHhmYmVmNGUxZSwKLQkweGY2MzhkZTAwLCAweGI4YjAyNWZhLCAweDgzYjI4YmY3LCAweGZmMTYwZTNjLCAweDZhN2E3MWU1LCAweDJmZjhiMjAxLAotCTB4YmU5NmJiMWYsIDB4NTJmNjg2ZGIsIDB4ZTNlODA0NjAsIDB4NzdmZTIzZDMsIDB4NGZiN2M0MzgsIDB4Njc1MmI0MWYsCi0JMHg5OWY5ZTdhYSwgMHgxZTIzZDdlOSwgMHg4NmZkMDc4OCwgMHgyOGJhMDFmOSwgMHhkYmI2YzdlNCwgMHhlZDVlMTgxMywKLQkweGU4NGE1MjE2LCAweDA1ZWY3MTdhLCAweDQ3NzM2YTRmLCAweDI5MjI1ZDYxLCAweDJiNDA3ZGYwLCAweDk3ZTljNTc3LAotCTB4ZGY4MGEwZGEsIDB4ZWI1YWYwZGUsIDB4ZmExNzIyZmEsIDB4NTdkOGYyM2IsIDB4YjU4ZTUwMDUsIDB4NjEzNDNiMzAsCi0JMHgzMGY2ODhhZiwgMHgwMWExM2QwOSwgMHhkZWZhYzM3ZSwgMHhkYzQwNjVhYSwgMHhjNTAyZmJiOCwgMHhjMDcxZWI4ZCwKLQkweDlmOWZjNDY5LCAweGY4MjIwYmQ2LCAweGE4ZTI5N2JiLCAweGJhYjNkNzBkLCAweGIwZGZjNDBjLCAweGY2Njc4NjJmLAotCTB4ZTliZDdmMDEsIDB4MzlmMGRlYzksIDB4ZGZlMDMwMzcsIDB4ZjRkZWNmODIsIDB4OGI3YTZmNTcsIDB4OWFlN2Q0NzgsCi0JMHg3NmJiZmNlOSwgMHgyYmY3OTI1ZCwgMHg1MGQ0ZjQxNSwgMHg4MGY0ZmZlNiwgMHhjN2JmN2Q2ZiwgMHhmMDI1NGYwYywKLQkweGYzYmVkOGYxLCAweGNlYmE1NzcxLCAweDA5ODM2ZGM3LCAweDkwNmRlNzFkLCAweGU5ZmZkYTE3LCAweDgwOTMwYmE2LAotCTB4YjQxZmI0MmUsIDB4NzFiN2JiYmIsIDB4YmExN2I5ZmIsIDB4ZjYzNmNjOWUsIDB4MmZlNWNkNTcsIDB4NDI5MjVmZGMsCi0JMHhiOGU5NGI4NCwgMHg0OTIxNDUyZSwgMHhiZDE2MWQ3NCwgMHgxYmY0NDQyYiwgMHhmODNmNzZiNCwgMHg1YTFjYmJlMywKLQkweGQ4ZmUwYWFkLCAweDJhNDM1Nzg5LCAweGRiZjQ2OGY0LCAweDIyN2ZlZjRmLCAweDY1OWJmYzExLCAweGUxZjcxNjE5LAotCTB4Y2JkNDc0MzgsIDB4Yjc2Y2MxMjUsIDB4NjgwZmRhMzMsIDB4ZDc0ZmQ2MzYsIDB4ZjQ0MWE1MDksIDB4ZWJhNGQ0OTMsCi0JMHhjMDc1ODEyZiwgMHgwYzNjM2VlZCwgMHg5NjA2NzJmNCwgMHgzMmNiM2Y3YSwgMHg1NGUxZjcxNCwgMHgyM2QzM2ZhNCwKLQkweDY3YThjOThkLCAweGY4NmNmODRlLCAweDQ3MGQwZmRlLCAweGUwNDRmZDRmLCAweGQwOWYyMjY4LCAweGRmMTQ4MWVmLAotCTB4N2VmY2Y0ZTQsIDB4OWQyMDcyOGYsIDB4NDg1ZTIwNTUsIDB4YzAyZmU0NWEsIDB4ZmZkM2IzN2YsIDB4ZmQwYTE5YmUsCi0JMHhmYmQ3NTg0YSwgMHg3ZThhMGVhZCwgMHhiY2YwYTVlYiwgMHhmZDFlMzBkMSwgMHgzMmY3ZDU0ZSwgMHhlNTllYmJlMSwKLQkweDc0NDcyMjRkLCAweGRiNzRhNzdlLCAweDE3NWJmN2MyLCAweDQ2ZGRkODM1LCAweDUwZDkzMGJiLCAweDc0Y2U2ZWFmLAotCTB4Zjg0NGVjMWIsIDB4OTVjMjE4MDcsIDB4Yjc3YzA0ODIsIDB4OTc1ZGIzOTgsIDB4N2MwMzVjZTQsIDB4ZTMwNDNmNzQsCi0JMHhmNjA1ZGY4MCwgMHhiYjViMTJkZSwgMHg0YzUxNTVlMiwgMHhlNzJmODBkYSwgMHg1ZWY5ZDc4ZSwgMHhkNTNlZjU5ZCwKLQkweDkxNWZjNzRmLCAweGY5MTdjODA5LCAweDEwNTU0MjlhLCAweGEwYWU4ZmU5LCAweGI3ZWI0MmM0LCAweGE2ZGNkYWYzLAotCTB4YmQ2MWQzNDUsIDB4ZjY2MTZlM2EsIDB4NGIyOTA1NzgsIDB4OTJiMzdmMDQsIDB4N2M0MDE1ZDQsIDB4OTRiMTI0ZjIsCi0JMHgyNDllNWM4MiwgMHg0N2U2MjQ2ZiwgMHhhMmZiZTFjOSwgMHhiZWRjZjA4MiwgMHg1MzE3NjhjNiwgMHg1ZjUwZDk3ZiwKLQkweGNmYWM2ZjUwLCAweGMzYTZkNzI3LCAweGI1ZmNmMmJlLCAweGEwMDgwOTMyLCAweGFmZWQ4YzJmLCAweDE2OGU0Yzg4LAotCTB4YjBkNTlhOTAsIDB4ZDk5NWFmYmUsIDB4NGRkNzM2M2EsIDB4ZGYwYTJjYTQsIDB4MmYxZTE3OTIsIDB4MWZlYjQzOTgsCi0JMHhkMzFlY2M4YiwgMHhhNjE3NDVmNywgMHg4MmFiZjgzMCwgMHg2ZDBmMTVlYiwgMHhmZjI5YTRmZiwgMHhlODc5YWEwNiwKLQkweGIwZDU4MWY3LCAweDA5YjdmOTVlLCAweDk2MzUyNmRhLCAweDdlMTZkZjdlLCAweGZhZmFiYzMzLCAweGNiM2ZiMzFmLAotCTB4MjBkMjU4ZTEsIDB4ZWM3MTAyNzgsIDB4MGViZTZlODAsIDB4NGQyZTdhZWIsIDB4MDhlMjFiNzIsIDB4ZTJhM2Q0MmEsCi0JMHg5Zjk5ZGYwYywgMHg5ZjgxODhkMiwgMHgzNmJkMTdlZSwgMHgxZmUzMWZhOSwgMHhhOTA0YTdmMCwgMHg5ZjdlZjE1YiwKLQkweGZhNjIzM2ZlLCAweGZlYzY5MzRmLCAweGE0MGZmZDgwLCAweGZhMTgxN2ZkLCAweGY4NTA3ZjU3LCAweDNmYzBjNTg3LAotCTB4NGJmZjVlMmEsIDB4YmI3Njc4NWUsIDB4YWE5M2VhOWYsIDB4MTIyNDhmY2QsIDB4OTcxZTNlYmEsIDB4NGEzNWQyZWEsCi0JMHhlZTliYzVkZiwgMHgxZjNhMDQ0ZSwgMHhjMDg5ZmM5MywgMHg2MjAzYzdhZiwgMHg3YWNlMjA2OSwgMHhlOWQyNTczNSwKLQkweDEwMGE3MWVkLCAweGQyN2Y4MmM3LCAweDczM2M0ZmZlLCAweDVmZjdmYTFmLCAweDE4ZGQ5MjZjLCAweDg2YjA2YTlmLAotCTB4OTcxZTU0YWMsIDB4NGU5YzJkMzYsIDB4ODg3ZWIxNzIsIDB4MjUzOWVmZDUsIDB4YzhkOWJkNDIsIDB4M2Q0ZjU1N2YsCi0JMHgwYWY5MGU5MiwgMHhiYzc4NTM5NCwgMHhlY2Y2ODQyNiwgMHg5NjlmOGRkMiwgMHhiYTQ0YmFlMCwgMHhkZmNjOGU1MSwKLQkweDUyZTdmOGMxLCAweDUxY2RmZjUwLCAweDI5ZGI2MjkyLCAweDU3NzdlODljLCAweDM3NTRiYzczLCAweDRjNGE3N2RkLAotCTB4YTNiNTdmODQsIDB4YmY3ZTZjM2YsIDB4ZDdhNWRiOTIsIDB4MjNiNGFlNDksIDB4ZTMyNzA0ZDQsIDB4ODdkMDM4YzgsCi0JMHg4MDQ4M2UzYSwgMHgwYmUyYTVkOSwgMHgxYzQyZTc4ZiwgMHgyYmUzNjNiMiwgMHg5ZTE0NDI4OSwgMHgxZDNhMzk3NCwKLQkweDNiOGZmZGJjLCAweDZkZjU5ZWQ1LCAweDY4YjM5NTI3LCAweGFmNWY0N2ZiLCAweDRmNmU2NmQ0LCAweGIxNzJiMGI3LAotCTB4NDQ5YzRhMWMsIDB4ZjVlMmUwZjUsIDB4OGZhN2U2YjIsIDB4YzRmYjNmMTcsIDB4NWM0MThmOTMsIDB4NzZhYjNkZjAsCi0JMHhkMTdmZWQwMSwgMHgzM2JmMmZiMywgMHg2ZDE3ZDY5MSwgMHhiM2E2ZDM5MSwgMHhmNDg1Mzg2OSwgMHhlOWFhNWQwOCwKLQkweDIyZjIyYjdmLCAweGZlN2FhODc0LCAweDg0YmQ0NTY1LCAweDRhNjVmZjNkLCAweGI2OGIxZTg0LCAweDI1Yzg1NmVjLAotCTB4MGUyOGY4YjEsIDB4OWRkYTU2ZWUsIDB4M2MxMmU4NzEsIDB4ODFmNjAyNTQsIDB4MTUzZmMyZjgsIDB4NWRmMWZiYTAsCi0JMHgxZDlmZTkwMiwgMHg1ZmViOWYwNywgMHhmMDFmZjVjNiwgMHg3NGU0NzQ4NCwgMHhmNGNkZDMwYSwgMHgwYmE1MzU3ZSwKLQkweDRlOWQ2YmU4LCAweDVjYjFmNmU2LCAweGVhN2Y0MGJmLCAweGU3ZTdlNDI4LCAweDU0ZmM1Mjc2LCAweGMxYWFkZGZlLAotCTB4YmI5ZjJiZmMsIDB4NzFlNjExMzMsIDB4N2M2MWFhNTQsIDB4ZTlkZGY4ZmQsIDB4YTU2ZTNhMWUsIDB4NjM3NzRmZWMsCi0JMHhmZTU3OWVjOSwgMHg2ZmM4MjdlMSwgMHg0OWZmNWUwYiwgMHg4ODY3YzYzYSwgMHg2YjgyZDMyNywgMHhlNjEzM2Y4ZiwKLQkweDRjZGQ2ZjM3LCAweGUyN2NkZjljLCAweDdjYWJiZTQ1LCAweGZkMDMyYzVjLCAweDRhNDRiOWY3LCAweDhiOTFjNGI3LAotCTB4ZTNiMzEyODMsIDB4MDZhMDZlOGUsIDB4NTFkZjlkMTgsIDB4N2U2MGFjYmEsIDB4ZTYyMjFiY2EsIDB4MDc3MjExMjksCi0JMHgwOWZmZjkwMSwgMHgxMGI1MGI5ZiwgMHg4ZGI5ZmViMCwgMHhhNGIzNjlkMSwgMHhjYWQ0NjFmYiwgMHg4ZGQ3ZTY4YywKLQkweDdkMDFiNGY3LCAweGY0ZjIwYzRlLCAweDZhOGI3ZDg3LCAweDNlMzlmOTIyLCAweGJmNjg2Zjg0LCAweGZhZDNlYmUyLAotCTB4NTU1MGZhMzMsIDB4YTNiZmMwNWIsIDB4M2MzMTdjZWIsIDB4NjRkYmY3ODcsIDB4ZjBkNzNkOGYsIDB4M2IyNmY5MWQsCi0JMHgzZTcyZmUzMiwgMHgwMTNiODUzZSwgMHhlOWEzZTdkNiwgMHg0OTU0ZWRmMSwgMHhkYWY4NzQxNiwgMHg0NTdmMTQ0OCwKLQkweGY3OTMzN2M5LCAweGY5MzJmNzhkLCAweDUwM2RlNWQ2LCAweDY3ZWQwYTVlLCAweDAzZjI2MmRmLCAweDQ3ZmFjMWRmLAotCTB4YzdmNTBhZTEsIDB4MGJkN2RkZjYsIDB4MjRhYzBmYTgsIDB4MzdhZTRmMTQsIDB4OGRhZTVjY2EsIDB4NTA5ZjNhZWQsCi0JMHgyOTIxMjViOCwgMHhmZmEwNWY4YSwgMHhlZTNmYzQxNCwgMHg0YjVmY2M1NywgMHg5N2QyOGJiZiwgMHg2MjVlMzBkNSwKLQkweGRjYmE3ZjZjLCAweGZmZjJlMDJlLCAweGM4ZmZjODI2LCAweDc1OTNmYzg4LCAweGI2N2JlZTRjLCAweDE3YThmYzlmLAotCTB4Mjc4MWNiMTcsIDB4YTU3OTAzMWYsIDB4NDE1N2U5ZjIsIDB4OTgzMmU1NWUsIDB4N2I4ZDY3ZjcsIDB4OTUzMWY5ZGYsCi0JMHhiYTgyY2Y5MywgMHhhN2Y1MWE5YywgMHhiNzJiNGU1OSwgMHhlNGYxMjU4ZSwgMHg0NmE3MzNmNCwgMHg3ZDI5Y2FlMiwKLQkweDlkNGU1NzFlLCAweGZmYzdjOGVkLCAweGM3NTNmYTU3LCAweGZjMjY1N2RmLCAweDI3YjBmYWU5LCAweDYxZjU5YTNjLAotCTB4M2UyMmE0YmQsIDB4ZmU5MGZhY2QsIDB4NjIwYTQ1YmQsIDB4M2JlNzRmZjksIDB4ZmVhYWRmOWQsIDB4ZTgwODY0YjQsCi0JMHhlYTVmMzA5ZCwgMHg0YmU2MTc3YywgMHhlMjYyZWY5ZCwgMHg5OWZjMDZhMSwgMHgxODg2NWZkYiwgMHg4MTZiODUxMCwKLQkweGYwMzJmZWFkLCAweDgwOWE2YzIzLCAweDg3NjE3ZTcyLCAweDZjZWVmMzA1LCAweGJmZjQwNDYzLCAweDU4NGJkNDQ2LAotCTB4MWVlMmRkN2YsIDB4OGNlODc2MGIsIDB4ZjY3YzJmNDksIDB4ZWRlZGYyNzMsIDB4YmU1YWVmZmYsIDB4MzA3YjYzZTAsCi0JMHg4NjFjYTAzYiwgMHg3NGQxNGJlMCwgMHhlMGMyZDcxYywgMHgwMjQwM2VhYywgMHg3ODFmNTE0MywgMHg3ZjI4YjJjNCwKLQkweGY3OTcwZTc5LCAweDlhZDgzZTE3LCAweGVjMmM3ODBmLCAweDhlZDQ5NTFhLCAweGZhMzA3MjdhLCAweDZmNWNkNTkzLAotCTB4NDlhYmY2OWMsIDB4Yjc0ZjRmYTAsIDB4NzhiZmEwZTQsIDB4OGFlOGJmN2EsIDB4MzRmN2ZmOTcsIDB4MjA5ZmVmYTcsCi0JMHhhZWNiNDYzZSwgMHhhNDRlYTQ4ZCwgMHhiYTQ1ZDZmYywgMHg2ZmYwNmVkMSwgMHg3MTRkOTFiNCwgMHhjYmE2YWZmNiwKLQkweDVmN2UyZjRjLCAweDAxZmQwMDdjLCAweGRiZGI0ZjFmLCAweGQ4ZTJjYTRiLCAweGY5ZjJiN2IxLCAweDI1ZjNkOGNlLAotCTB4YjcxNzhmYWUsIDB4YmQ4MGI3YWMsIDB4OGI0NmYxNzQsIDB4NDFiZmVmYzEsIDB4NDc5ZDdjZTYsIDB4NjdhZjgwZjIsCi0JMHhjNmJiYjFlYywgMHg4YmY3MWUwMCwgMHg1NjQ5ZTQxYSwgMHhiYzUyOWNiNywgMHhmMzQyZmM3MSwgMHhiMDdmYTFmYywKLQkweGRkOTNlZWI3LCAweGNhMmY0ZmM4LCAweDBmMDFkYmMxLCAweDExYjQ5ZTJmLCAweGExZGIyZmQ4LCAweDA3OGEyZGQ0LAotCTB4ODMwYTlkZTcsIDB4NDY2MWM3NzMsIDB4MmYwYTFmOTcsIDB4NTBjZTVkODUsIDB4MzY3M2M0MTEsIDB4NThkYmU0MTIsCi0JMHhmM2U0MTMzYSwgMHhiMDI0MGRkMywgMHgyZGU4MWIzMiwgMHhjMTIzN2FiMiwgMHhjYTBhNTdiYywgMHg3N2MzMjdhZiwKLQkweGEzNWVkMzVmLCAweGU2YzJmM2U0LCAweGU4MTI3ZjJkLCAweDA0NWI0YjdiLCAweDJmYjY4NWI3LCAweGUwMTVkYTk1LAotCTB4NjRlNmVhOTcsIDB4NjhkOGY0MTEsIDB4NzRmZmNmNTUsIDB4MTQ3ZDcyNWYsIDB4NGIyN2RkZmYsIDB4MTNiZDk3ODgsCi0JMHhmMDA5YmM1ZiwgMHgyMTQzYTY3MiwgMHg3OWVmY2ZiMCwgMHg2OGYzMWJhOSwgMHgyM2U0YjRjZiwgMHhhZjM0ZjViZiwKLQkweGIyZTQ3ZGU3LCAweDQzZjQxMmE5LCAweDNhNjY1ZjEwLCAweDMwNGM2YThlLCAweDdiMTUyN2Q0LCAweDMzNWMwMDA3LAotCTB4YjVjYmVkYWMsIDB4MmJiNzc4MzgsIDB4YTFmZGVlY2MsIDB4YjJiN2IzZTQsIDB4OTZmYmYyY2YsIDB4YjE1ZWJmMmUsCi0JMHhmZWVmOGEyYywgMHhmZGJmMmIxZSwgMHhiMmVmYzllMywgMHg5ODdmNmE5NSwgMHg5Y2Q2YjJmNywgMHg2NWNmODBmZSwKLQkweGM1ZmI5MTdmLCAweDdkNjdhYmUzLCAweGNjZGMyZmNjLCAweDlhYmI2NWYzLCAweDFhNWVmY2E4LCAweDU0NGRiZjI1LAotCTB4MDFjNGUzN2UsIDB4ZTU4MWZhNWYsIDB4ZGY5MDU5ZjcsIDB4MmJiZGYwMzgsIDB4ZjJlOGZhMzMsIDB4MDg3MmRiOWIsCi0JMHhjOWI3MzdlNSwgMHg3OTMzYzg2MiwgMHg3ZDc2ZTY1NSwgMHhmNDJiZjI4ZiwgMHhlYTBkM2ViYiwgMHhhMzg4ZTZiMiwKLQkweDEwMGYwMWFmLCAweGUzY2NkY2M3LCAweGM4MGUzMGZjLCAweDcxYjhhNGIxLCAweDYzOTU3ZDllLCAweDhlNTliZmRmLAotCTB4OTgyMzZkOTcsIDB4NmY0YjEzMTcsIDB4NzZjYmM3MjYsIDB4ODAxNjM5NTAsIDB4OTc4ZTRjZWUsIDB4Y2UzOTUyYjUsCi0JMHgxMWRmOTU4ZSwgMHhiZWNiZjIzMSwgMHhkZjYyMWE1ZiwgMHhmZjY3Mzc1NywgMHg1ZTNhNjZlZSwgMHg2Y2Q2NDc5ZSwKLQkweDg4YmNmZGY0LCAweDk2OGQ4ZjNjLCAweDcwOTE0OTY3LCAweGJjZjIzMWJlLCAweGJjZjI2ZmJmLCAweDk1MzNjYjhkLAotCTB4MWM1YWExZDMsIDB4YzYyZDZhYmEsIDB4MjcxN2FjZmMsIDB4MWU3YzZkMWMsIDB4MjI2ZmYyZjgsIDB4NWJhZjQ5ZmEsCi0JMHhlYWZiNWQ5OCwgMHg4MDYzYTM4NCwgMHg3ODcwYTYyZiwgMHg3NDNhNzA4NiwgMHg3ZmQ4ZmNmYSwgMHhkMzQ3YzRjOSwKLQkweDVmOGE0ZTQxLCAweGU0MmRmYmFhLCAweDI4ZDkyZjM1LCAweDRiODdkMDEzLCAweDFmYTEwZTliLCAweGU4YWI4ZTZhLAotCTB4YmUzOTk1NzYsIDB4NzMxMWViYTIsIDB4ODM1MTY1OWMsIDB4YzdjNzllYjEsIDB4MTFkYjE3MmYsIDB4YTg5YWYyNWUsCi0JMHg3N2MzOGE2ZCwgMHhiOWMxM2Q3OSwgMHhlNzFkZWViZiwgMHhiZDljMDg5OCwgMHg3OWY0N2RjNSwgMHgzZTk3MDZmNCwKLQkweDk3MGEzMWFmLCAweDFmMjRkMTk3LCAweDhmMTQ4OWUyLCAweGJmZmUyZjI4LCAweDJhODcxODhhLCAweDkwYzBiYzJiLAotCTB4ZWI5MTNmZWYsIDB4YzJiYWZjYzksIDB4OTQ0YjA4NjIsIDB4ZjgwZTNlNDMsIDB4ZWM3N2Y1NTEsIDB4YjFiMjdkODMsCi0JMHgzMDNjZDUwNywgMHhiNDRkMjdhNywgMHg3YTlmYzE3YSwgMHhmMjhkZGVkYSwgMHgwOTY1ZDNhYywgMHhiYzBkY2JhNywKLQkweGQ0MDcxNzlmLCAweDU1YmYwMTE0LCAweDU4NmUwYjM3LCAweDVmNDNhYTc3LCAweGJkODZiOWUyLCAweDAyNTE3ZThmLAotCTB4NTViMGI0N2MsIDB4MGY5MTViNzAsIDB4ZTdlMDI5NGYsIDB4MTdmNWQwOTUsIDB4ZTViZjI5ZjgsIDB4MGJiZGRhMTQsCi0JMHhmODQ1MGI1YiwgMHgwMTBlZTE3ZSwgMHhjMzdiZDIxMywgMHhiNmU5NWY0ZiwgMHg1OWUzZDM4OCwgMHg3MDA5ZGY4MCwKLQkweDhkNzViMzc2LCAweDU3YjdhN2MzLCAweGZjMDM3ZTRiLCAweDViOWQ4ZmM1LCAweDU2ZTBjNTlkLCAweGRlMDQ2YWFkLAotCTB4ZTc3ODYxYjEsIDB4M2VhZjM4ODgsIDB4YmRlM2FiYzIsIDB4OTg5Nzc4MzcsIDB4ZTRkYWY4ZTgsIDB4MjIwZjE4MzMsCi0JMHhmMjdkYzkyZCwgMHg1YzZkYmU2YiwgMHhhMWI0OWFhYSwgMHhhN2M3YTY3ZiwgMHhmM2JkMTdlZSwgMHg5NTFiODg2NCwKLQkweDhlMzE5MjBhLCAweGVkZjE4ZGRiLCAweDhmZmZhMDFmLCAweGY4M2ZkN2NlLCAweDZlYmEyMTE3LCAweDA5ZjFiOWZkLAotCTB4NjdjOWY3YzQsIDB4YmEwMGNkMGUsIDB4MjQ1MTdhMmMsIDB4Y2U5NzRhMzYsIDB4ZTEwOTE3NDYsIDB4MDE0MDQ4M2UsCi0JMHg4OTM1NTQzYSwgMHg0OGY3OGMxZSwgMHg1Y2ViODJhMSwgMHg2NWE4ZjhkMSwgMHg0MmVjZDhmOCwgMHhkNWI1NTgzZCwKLQkweGJmNGU5ODFhLCAweDQ5ZmVkYWFmLCAweDlkMzNkODJlLCAweGNiZWY3NTc3LCAweDE5ZmZiZjAyLCAweGY4OThlNTAxLAotCTB4MWY2MTczZGIsIDB4ZmI2MjRhYTgsIDB4NmVmYzY2M2IsIDB4ZDhmYWQ4NTQsIDB4MWIzMWMzYjEsIDB4NjA2ODQxZTQsCi0JMHg4MmFhOGJlNywgMHg5NDZiNjRiMywgMHg0NTdiZmMzZCwgMHg3YmU5NzFjNiwgMHg3ZmU2ZDc5OCwgMHgzMGJjYzA1YSwKLQkweDVjZmEyZjgwLCAweGQzNmY5ZThiLCAweDRiZjMzNGYxLCAweDAwZTU5YWFhLCAweDZhYWE1MzljLCAweDcxMDlkMmQ4LAotCTB4NTY4M2FhOTIsIDB4MWJhYWQ3NWMsIDB4Yjc1YzYxNGUsIDB4YThiM2YzNzgsIDB4NDU5YmFiN2YsIDB4ZTMxYzlmODMsCi0JMHgyMTg4MzY5ZiwgMHg0ZDU3ZjgyYiwgMHg0ZWNlMzA0YiwgMHgxZWIwODdlYiwgMHhlOWE3MWY4YywgMHhiNDVhOGZjZCwKLQkweDFmYmI3NWI5LCAweGE3ZjllNGU0LCAweDUyOWNmMTEyLCAweGY0NDRhNmRiLCAweDFmY2UxYjUzLCAweDQ3ZjE4YTFmLAotCTB4ZDc5ZWY3ODMsIDB4ZjljMTNkMWYsIDB4MzE4YTZmZTMsIDB4NTIxYTQ3OWUsIDB4ZjBhNTRmZDEsIDB4YjFjNTk0MTUsCi0JMHhmZjdjYzNkNywgMHg4MDdmZTdlYywgMHhkNmM3Njk3OCwgMHhmMDAwZmVjZiwgMHg5OWQ3ZmUyZSwgMHhlMjgyZmMzZiwKLQkweGJiYjJlYzkxLCAweDNmNTVmZjQxLCAweDliYzYzNmYzLCAweDcyOGVlZmY0LCAweGY0ZjlkNWJkLCAweGViYTcxODUzLAotCTB4NDFhYWNmN2MsIDB4NDdhZDlkNmYsIDB4YWFiYzQzMDcsIDB4ZTk5N2NiNzMsIDB4NmYyYzlmNjAsIDB4ZDZmNjg2OWQsCi0JMHhmZGM1NmRmMiwgMHg0MGZiMWM0OSwgMHgwMzZmODEyZiwgMHg5YTEzODg3ZCwgMHg2OWI3YjVlOSwgMHhmMzgwNjBlZiwKLQkweDZjMzdhNTI0LCAweDBiZTM4NjA5LCAweDVlMmMyNWMxLCAweDQyYjhmMmEzLCAweDZjNzhmYzYzLCAweGU5YTExYzRjLAotCTB4OGNhNjZiYmEsIDB4NTRkNjUyODEsIDB4YzI3ODg3ZDIsIDB4OTc4ZTk0NWIsIDB4OGQ3ZTgxZjYsIDB4ODllZjZmY2MsCi0JMHgxZmUxMjc3ZSwgMHhkNWIyNGU5NCwgMHg5YmNmYmY0OCwgMHgzMWYxZmRlNiwgMHhlZDRhNmI2OCwgMHhlYTEwOWUzMSwKLQkweDc4ZjRkZTAzLCAweGM3OGExYmVmLCAweGRhZjkwNTZkLCAweGRmOGMyN2ZhLCAweGQzYTZkZDAwLCAweGZiM2U3Njg5LAotCTB4OTM4ODYwZjksIDB4NmZiYjkzMWYsIDB4NTZkNTdkYzUsIDB4NTc5N2VlMmIsIDB4ZjI4YmJlYjUsIDB4NzVlZGI5ZDMsCi0JMHg4ZjA5MzdiNCwgMHhmMDkyNzZiYiwgMHhmMTkzOGIxZiwgMHg4ZGVhZDNkYywgMHhlMDg3MTYyZSwgMHg4NTM4ODdmOCwKLQkweDc5Y2Y4ODlhLCAweGIxZjE4MjNjLCAweDI5ZThhNzFlLCAweDc1ODU3MTNlLCAweDY1MjNjZjI4LCAweDFiMjU5NDcxLAotCTB4Mjk4ODU3ZGYsIDB4OGY4YzIzZWUsIDB4ZDEzZGYzYWMsIDB4MWI4M2M3NDksIDB4M2EyZTMwZjAsIDB4MGUzZjE2ZGUsCi0JMHg3MmNiOGUxNCwgMHgyMGZkMDE3YSwgMHhhNzhlMTZjZSwgMHg4ODQwZmFkMSwgMHg3Nzg0MDRhZiwgMHhkMDdkMWM0OSwKLQkweGU5YzU5ZWI5LCAweGZlNjM2NTNhLCAweDJjM2U4NDQ5LCAweGEyNjQ1NmZlLCAweGRlY2YzZWIzLCAweGUwZGVhN2Q2LAotCTB4YzlmOGI2ZmYsIDB4NmM3OWM1ODcsIDB4YmUzYTllMmMsIDB4ZTdjN2FmOGUsIDB4YjdlZjg1NTksIDB4OTgyMTVhNWYsCi0JMHg4MDJhNmZmNywgMHgxZDM0OTcxZiwgMHg1MTNmMjA1MiwgMHhmOWY0Yzc1ZiwgMHhiYzNiNzA3NiwgMHhmMzExMTllMywKLQkweGY3MDc1NzZiLCAweGViMzcxZWEyLCAweGRlNzBhNThiLCAweDNmYmMwZTIxLCAweDZkMmVmMGUzLCAweGM3NDRlYjY2LAotCTB4NDljMDU3NTYsIDB4YjNkOGU5ZmIsIDB4Njk3OWY5MDMsIDB4NGZjNTIxZTMsIDB4ZjBkN2RiZmIsIDB4NDZmY2MyYmMsCi0JMHg0ZWIwM2YyNiwgMHhlZmUwYTIwNCwgMHgyZTc3NmU3OCwgMHhiYjMyMmY4YiwgMHhkZGNlM2NkZiwgMHhkM2E3OWU1NiwKLQkweGVhOWM3ZjEyLCAweDcxODY1M2M2LCAweDBhODNmOTE2LCAweGZmM2U5N2NiLCAweGNmMjQyNzc4LCAweDQ0ZWZlODJjLAotCTB4NWYyMDRjOWIsIDB4MmM1MDQ0ZjIsIDB4NTkzZmI3OGQsIDB4ZGM3OTk1NjksIDB4NzQ5NThlYmEsIDB4MjVmM2M0YmQsCi0JMHg0NDllNzYyZSwgMHhkZTMwNTE0YywgMHhmZTM1ZGNiMSwgMHg5NDFhNTI2MCwgMHg1MDdlMGE4YSwgMHg1ZmI2NGFlZCwKLQkweDVhOWZmYjViLCAweDM2YmJkMDA2LCAweGM3OGMwNmY5LCAweGViZjA5OWQ2LCAweGMyMTc3MzRlLCAweGQ0ZjcxMzM5LAotCTB4YWVjMDMxYjIsIDB4ZWM5MzdkNjYsIDB4NWZlMDE4YjEsIDB4YWZlZDJhZWUsIDB4ZDE1NzM4NTIsIDB4Mjc1Y2UwN2UsCi0JMHhlZjNjMzQ5MSwgMHg5NDk2MjYyMiwgMHhiNzQ0N2NjMiwgMHgxMzhmNmRjNSwgMHg2NTlkOTMwNywgMHgxNzg1MWJjNCwKLQkweDlmM2M2ZGQ5LCAweDU3Y2ViZTQyLCAweDlmN2QxZmExLCAweDZkYWRiMTc1LCAweDNkYmEzNjFmLCAweGM0OTVmMDAyLAotCTB4YWYwYmQ1ZjcsIDB4YmJiY2UzNzcsIDB4NTgwZDA1MWEsIDB4ZDU2M2FhOWMsIDB4MDVmMmNlOWQsIDB4ZGFlOGRkNjAsCi0JMHgyZTRiOTQ5YSwgMHg4Nzg5MGZjNSwgMHhmZTBlMjdhZSwgMHhiZGRjNjg1YywgMHhhYWQxZjQxYiwgMHhhNjQ5ZTI0NCwKLQkweGFhYjE0NjcyLCAweDRlNzAzOThhLCAweGM4NGRiNDY3LCAweGY1M2QzZTAxLCAweDVmYjQ4YmVhLCAweDYwNDg4YjdiLAotCTB4YTljYmJmOGIsIDB4OTI3OTBiZTcsIDB4ZTQxY2NlNDEsIDB4MDEwYmNjN2UsIDB4MzUyNmZlNTYsIDB4NWYzOWE3MDIsCi0JMHhlOTJiYzA4NCwgMHhkM2JjNzM5MSwgMHgzOWM2Mjc0NCwgMHhkMTEzYWY0ZSwgMHhjNWM5MTU5ZiwgMHhmY2NjOWJiZiwKLQkweGY4MDAxMjczLCAweDg4YjI3YWY5LCAweDRhMWE3OWMzLCAweGMxNDJiZjc4LCAweDdmMDVkYTNjLCAweDQ0MjBiZTc5LAotCTB4ZjFhMjFkMTgsIDB4ZjQ2YTVhOTUsIDB4ODllZGViMTcsIDB4NDM2ZmIwYjksIDB4YzgzNjllZmMsIDB4ZmRlMGFlNGIsCi0JMHg5ZTMzMmJmNSwgMHhlN2UyYTFmMywgMHhjZjUyZmIwNywgMHg3ZTZjZmZkMywgMHg3ZmQwN2VjOSwgMHhhOGY5ZGUxNSwKLQkweDM2Y2ZmYmQ3LCAweGRiMzIwMzllLCAweGU0MmYwOGVmLCAweDdiYjk1MDBkLCAweGU3YjU4ODRjLCAweDVjMWU1YjJiLAotCTB4YjFlMGY5MGQsIDB4MDQ2NGYzZmIsIDB4OTE1NDFiZTQsIDB4YTFmMjBkMDQsIDB4MDc3ZGY2Y2QsIDB4ZjFjODRkZTgsCi0JMHhlMDI3MTI3MSwgMHhkOTdkNjdiMSwgMHg4N2RiN2UwYiwgMHg5OGYyNmVmZiwgMHgwYjU3ZTJmMywgMHgyZThkZmJjMSwKLQkweGYwNThkZmRjLCAweDNmNTFkYjk3LCAweGY4OGMzMzU5LCAweGZjNDZhYmI1LCAweGYxOTg0NjNhLCAweDRiYjNjNDY4LAotCTB4YjI4ZGUyMzMsIDB4Nzg3Y2UwNzksIDB4M2M2ZjFhNGUsIDB4YjNjNjY1NWYsIDB4MGUxZGE4NDQsIDB4ZDA0MDRhZjYsCi0JMHhmOTMxZmU4MCwgMHgxMWViY2QwZiwgMHhhNmZjZGVlZSwgMHg4ZjVmMWIzNCwgMHg1ZmU5NWUzOCwgMHhhOTlkMmQ5OSwKLQkweDUzM2I4MDZjLCAweDk4NWNhMTBhLCAweDE5Y2IyOGU1LCAweDgzZGZlMDEyLCAweGYxMmIwMmQyLCAweDdlODVjZDJiLAotCTB4OGY5ZjA2NDksIDB4NzNiZWMxNTAsIDB4MDA4OTFjODAsIDB4MDQ3Mjg2YWYsIDB4Y2Y0MDI4MjcsIDB4NmUwN2M4M2IsCi0JMHg3Yzg1YTdhMCwgMHhkOTE5YmU0MiwgMHgyY2VmM2QzMywgMHg1Y2QwZTk3ZiwgMHhlMDNhZDVmYSwgMHhhZTUxNGJkZiwKLQkweDE0YTkzOWQ4LCAweDA2Y2RhODEyLCAweGIwZGNkNTM5LCAweDM2N2QwNzZlLCAweGYzODI0MmI1LCAweDE4YWQ0NGU2LAotCTB4ZGRjY2U3MDYsIDB4Yzc5MDNlNTgsIDB4NDUxYWVmZGUsIDB4MTgyYzVmMzAsIDB4ZmEwZTliM2EsIDB4MjkxZTdhYTksCi0JMHg4MGY3ZmQwMywgMHhmYzAzM2RkMiwgMHhjY2VkZmJkYiwgMHhhZWM4Yjk0ZiwgMHhhNWZmM2VhMCwgMHg5Y2FmZGY1ZCwKLQkweGE5Y2I5N2ZhLCAweGM4YjU3NjNjLCAweGViYzM5YzJhLCAweGJiNjRkOTZhLCAweDIyY2RlYTAwLCAweDRlYWVmNzllLAotCTB4YzYwOGJiYWUsIDB4MTk5MTZjZWYsIDB4YzBiNjE1NWMsIDB4YjdjN2UwMDUsIDB4NzQxZWI4Y2EsIDB4ZjNjNjRjNTYsCi0JMHhhZGJiNjEyYywgMHg3NjEzZWQ4NSwgMHg3ODkyN2NiNSwgMHhlZjNlOTQ3YiwgMHgyMmY4N2U2YywgMHg2YTNjMzM4OCwKLQkweDc5M2ZiZjg5LCAweDlkZjJjZGJkLCAweGZhZjBkNGZjLCAweDNmOTMxNGRiLCAweGU1OGRiZDcxLCAweDk0MzAzYzRmLAotCTB4Zjk2OTYzY2UsIDB4MzMwZWJlNjksIDB4ZTljNDk4NzksIDB4YWJmY2QyZmMsIDB4NWFkYmZlNzAsIDB4ZTc0ZjNmYTgsCi0JMHhmY2RlMjI1MSwgMHgzY2U4NGJhMywgMHgzMTJkYmMyNywgMHhkMzNjNGFmZCwgMHhhM2IzYTRlNywgMHgwZWZlZjAzYywKLQkweDNlMDA2NWEyLCAweDAyMjE0YzI2LCAweGY3ODRmM2M4LCAweDhmZWJlZTA4LCAweDdlOGY5OWE5LCAweDk0ODk4YmQ1LAotCTB4NGM1ZjI5Y2YsIDB4MGI3Y2ExNmQsIDB4ODljM2FlN2EsIDB4MzZkOGZiZjYsIDB4Yzk5N2MwYzksIDB4YzE3YmJkNTMsCi0JMHg5MDc3MWNjZiwgMHg3NzFkYmVhMCwgMHg5ZTNlZDhkMCwgMHhhNzFjNDQwNCwgMHhkMjdjZjhkZCwgMHhjNmJkNjMzMSwKLQkweDEyMzNmN2M2LCAweGY3ZjAzYTQ5LCAweDg0NDVhZmRhLCAweDY4OWJhYmFiLCAweGJiN2VkMTc3LCAweGZkZTAwNjJhLAotCTB4ZTE2NzVkMDIsIDB4YmYyZDE0OTQsIDB4YWRlMzRiMTYsIDB4OGM2ZDJiZjMsIDB4MDg1NTFlMmYsIDB4Y2U4ZjJmYWUsCi0JMHhjMTNlZTI3NywgMHg5ODU1Zjk5ZSwgMHhjZmM1ZmQyNywgMHg5ZGUyNDNiZCwgMHg0YmQyOGJiYiwgMHhkZGZmNmM0OSwKLQkweGE3ODE0NDkzLCAweDYwNGFiZDdjLCAweDhjY2JhZWY4LCAweDRiZDI5N2RlLCAweGJlNzU4ZjlkLCAweDczMzlmOWQ2LAotCTB4NWUzNzgyN2UsIDB4Y2VjMzhhZGUsIDB4ZjlhMjlkZWMsIDB4ZmMwNTA0MjMsIDB4MDEwMjVkYjIsIDB4ZTVkZTc2YmMsCi0JMHg5YjVmZTQzNSwgMHgyYmI5M2Y0YiwgMHg2ZWE5ZTAwYiwgMHhiNjc2ODMzZSwgMHgxZTdlMjVhZCwgMHgyMjViMDZkNCwKLQkweGYyZWVmYmYzLCAweDhkN2M4NGFmLCAweDA0YTE1MjlmLCAweGJmNzNkOGZkLCAweDVhYWZkMTZiLCAweDg4NTM0MTAzLAotCTB4ZTZlYWQ5ZWIsIDB4NzlhN2I5ZTAsIDB4ZTIwMWIyMzYsIDB4ZTY1ZDUyYjAsIDB4ZmJlMDJlYjUsIDB4NTM1NzJiZTIsCi0JMHhiMzJiMWY3OCwgMHg5NTFmOWQyMCwgMHhiZmRmODQzNSwgMHgyZjhjMTA4NCwgMHgwNzdlNGM0OCwgMHhhM2ViMjBjZSwKLQkweGRhMzU3ZmNmLCAweGI0NmQ5YjBhLCAweDFiOWI2NmRmLCAweDZhZjU0ZmZiLCAweGZkYWZjMDAyLCAweGMxMTI3ZmYzLAotCTB4NjczYWU5OWUsIDB4ZTAwZTNhNDUsIDB4ZGRmZThmZmUsIDB4YWY2NjM2OWIsIDB4NmNmNzYyZGQsIDB4OTUyN2ZlMDUsCi0JMHg5YTFmMjg2OSwgMHg0OGFkNTEzNywgMHgxNGEwNzM4NSwgMHg0ZmUyNzFlZiwgMHhlMjlhNWRiYSwgMHhjMjhkYmFhNSwKLQkweGUwYjRlMjkzLCAweDc4ZjExMGJlLCAweDk3OWViNzU0LCAweDUxN2JmODQwLCAweDAyNDI0MGYyLCAweDVkMDViYzgxLAotCTB4NDIyZDBhOWYsIDB4N2ZmOTQ1YzgsIDB4MDIxOWNkOGMsIDB4OTJhNTIzM2YsIDB4NjA4MjliY2UsIDB4NWZkNjM2MjcsCi0JMHgzZTExZDQ5YiwgMHg5MDc5ODZjNywgMHgyMDBiMmY5NCwgMHhkZTYwOWRmOSwgMHg0MTVhMjQwMywgMHhkNTllYmFmZiwKLQkweDY0YWFmM2Y1LCAweGQ1NjZmYTgyLCAweDk2YTA1MjgzLCAweDZhNGViM2Y2LCAweDI0ZmM0M2I3LCAweGMxMTZhM2RiLAotCTB4YTQ4YTczNTYsIDB4NDFiYWY5ZTIsIDB4MWQxZTRjOTUsIDB4ODcyNzhmMzksIDB4ZWMyYTE1ZWQsIDB4ZGUyNWZmYTMsCi0JMHhlZjhlMmYxNiwgMHg4Yjc1N2NlNiwgMHhlMDNlZmJkZCwgMHhmNzdmNzczYiwgMHgzNDZiMzAxZSwgMHg3YjRmMWIzYiwKLQkweDc5ZjY4NmQ5LCAweDNiNzA2ZjU4LCAweGJiYWY4NGFjLCAweGZiNjUzZTEzLCAweDM5NzQyNGM2LCAweDcxZTg2M2U2LAotCTB4YTBkZWIzN2EsIDB4MDhhNmYwNzIsIDB4NDRhOWY1NzIsIDB4ODc5NDNjZjAsIDB4NGY0MGFmZmUsIDB4MWZkMjg4YzksCi0JMHg2ODJjOWQ3YywgMHhiNjhiZDlhZSwgMHgyZjZhMzg5YiwgMHg1N2E0ZTNmMCwgMHg4YzczZWNmMCwgMHhjMDc3MTkxZSwKLQkweDdlZjAwYjViLCAweGU2NjFmZDU3LCAweDJhMjFkMTg3LCAweGEzM2U5YzhmLCAweGVjMTczODU0LCAweGZkYTFkNzBlLAotCTB4OTM3ZDI2NWYsIDB4M2ZhNjNlNTYsIDB4Y2Y5Y2I1ZGEsIDB4ZTVkNWY4Y2MsIDB4NzllZjJjZGEsIDB4NTZiZGI0MmIsCi0JMHg0ODgwMzVlYywgMHg4NDQzOGYzMCwgMHgwZTZhMWMwOCwgMHgyMjAzYTNlOCwgMHg4NTVkZjdkOCwgMHg1YzI4NWY5NCwKLQkweDI4ZWU0MTFiLCAweDBkOWYyNmJmLCAweGIzN2MwOTVjLCAweDNiMGFlNWI2LCAweDVlNzdjN2M4LCAweGViZjQ0MjNmLAotCTB4N2ZlM2I4YTgsIDB4NzY4MWRlODgsIDB4MDg5ODNmOTYsIDB4ZmJiYTU4NzgsIDB4NDIzZjVmMmMsIDB4NWQzMGU3NDgsCi0JMHhjNzQ0N2NhOSwgMHgzN2JlNzQ0MywgMHgxNzJlYjlmMywgMHgzOTQwNzBiNSwgMHgwMDliOWQ4NywgMHgxMDQyODhmYSwKLQkweGViMjU2YjA5LCAweGU4YTc2MGRjLCAweGQ4NmQ3NWY2LCAweDdjYzY0ZDllLCAweDM2NmVlNWVmLCAweGRiYWNhZDVlLAotCTB4ZTYwZDlhZTUsIDB4ZDQ1NWRjYmIsIDB4MmVmYjdjZmYsIDB4ZmZhOGU3ZDUsIDB4NWQyZjk1MTIsIDB4N2ZhMzc1MmQsCi0JMHgyMTRlN2Q1NiwgMHg4MWVmZDQ4MSwgMHg3YTNhMTZhZiwgMHg0NTVmMDFiYSwgMHhmOGIxN2VmNiwgMHhkNDcyMDgxYSwKLQkweGY5Y2JmZmVmLCAweGNmOWU2Y2RjLCAweDNlNjQ2YTNkLCAweGM1Zjc4ODkzLCAweDBhMTdhYTc2LCAweDY0Y2ZhY2VlLAotCTB4Y2FkZTQxN2MsIDB4N2UwYmU2ODgsIDB4ZjkyN2IxZGUsIDB4MWJlNTRmMWUsIDB4NzkxOGM3ZGMsIDB4ODRmMWM5MzYsCi0JMHg5NmM3MmExNiwgMHhlNGQ2Mzk1OCwgMHg0ODI3YmMzMiwgMHhiZWEwNzU2YiwgMHg1OWY1Y2IzMywgMHgwNzZhYWYzZSwKLQkweGEyNGRmYmMzLCAweDlmMzA2N2Y3LCAweDYwZjc0YjZhLCAweDk1NWNiYmUwLCAweGMwYTc0ZWE0LCAweGU4OGIzNmU2LAotCTB4NTRiNjkwMDcsIDB4YmIxMjNhYzMsIDB4ZGM1OWZiYmUsIDB4N2EwN2FmOGEsIDB4YTY2ODUyOWMsIDB4YjNlNzRkN2MsCi0JMHgwYmJkZWVjOSwgMHhjZGQ2YTVlNCwgMHg1ODM4NGFmYywgMHhhMzcwNzYwNCwgMHgzYzM3N2JjZCwgMHgxMmQ4NTA3NywKLQkweDg4Yzc1Y2UwLCAweDgzOGIzNjUwLCAweGQ0NzIwYzg0LCAweDRjMzhkYzkzLCAweDQ5MGMxMTcyLCAweGU5ZjkzZWI4LAotCTB4ZDA4MTc0ZmEsIDB4ZjZjNTNjMzMsIDB4ZDUyZjA2NjQsIDB4MGM3ZjYwMTYsIDB4YjA2YzIwMmMsIDB4ZjlmMzA0YTUsCi0JMHhmM2IyZTYwNiwgMHhkOGYzMDNmOCwgMHhkODRmNTlmZCwgMHg5MWI5YmFkOSwgMHhkOTdhMDdhZiwgMHgwNzViMmI2OCwKLQkweGUyMjU5Mzc4LCAweDc3N2RlNmI3LCAweDg4NTQwMWI4LCAweDdiYjI2ZTBiLCAweDZjZmU4MzFlLCAweDQ3OWMxZWE1LAotCTB4MDI2ODliOTYsIDB4MjkyY2EzZTUsIDB4NTNmZWMwMjgsIDB4NjA1NTYyY2EsIDB4ZDZjMjQwZjEsIDB4N2Y2OTI4MTMsCi0JMHg0MmQ1ZDM1OSwgMHgyMGIyOGY1OCwgMHgwN2RlMDA5NywgMHg5YzhlMjYzYiwgMHhlZmU1ZGFiNCwgMHg4ZTZhYzcxNywKLQkweGI5NWJhM2IxLCAweGU4NTNlYzFjLCAweGIzYTc1MzdjLCAweDNjNzBlNDNjLCAweGY4MGY4Mjg2LCAweDgwZGQ3NGVkLAotCTB4OWNmY2VkOTMsIDB4OTNmODM1ZTUsIDB4N2VjZDllMTksIDB4ZTYwYzEwMTUsIDB4ZGRmYWYxMjUsIDB4MjllYzkxMGEsCi0JMHgyZGY4ZjdlOCwgMHg4NmM1OWRmMCwgMHg2ODgzOGY3ZSwgMHgwNzhiZDA0MSwgMHhjZTVjZWNlZCwgMHgwMzViNDE2YSwKLQkweGRkNDhkZmY1LCAweDQwYjdiODM2LCAweDI2MDdlYmU3LCAweGY0NDlhYjVmLCAweGE3MjljNDk1LCAweGE1MTdjMTczLAotCTB4ZjAyNmZlN2MsIDB4ZDNlNGU3NWIsIDB4MGNlMTU3YzMsIDB4N2UzMzA3YmEsIDB4YmM4Njg4ZjMsIDB4Y2Q2ZTlkNDcsCi0JMHg3NjZlODFiMiwgMHhlYjQ0NzM4OCwgMHg3ZTgyOTc2MSwgMHhhMDkwYTc3YiwgMHhiOWQzOWY4MSwgMHgwYTcwNjA1MCwKLQkweDJhMTc5ZTM2LCAweDVjMmZlMzE5LCAweGZkZmFlOWNmLCAweGU5YmNkODJiLCAweDhmZjFmMzA3LCAweDZjNTY3YmM2LAotCTB4ZDFlMDBkOWEsIDB4MWI5ZjBmZTEsIDB4MzFlYjlkMzIsIDB4YzhjOWZiOWYsIDB4MzI2M2M3MDksIDB4NGNhYjRmMzEsCi0JMHhjODUyYmI4MSwgMHhkYTA3MTZlOSwgMHg0Yzg5ZDU1NSwgMHhkMGZjY2RhZSwgMHg3OWMyOTQxZiwgMHg3YzUwY2JjZSwKLQkweGVkZjQwOTdkLCAweDgzMjRkNzJmLCAweGNiN2ZlZDFlLCAweGFmYTA0NGUxLCAweDgyNWQwZjE5LCAweGQ4M2VmNDdmLAotCTB4MWM5YmZhYjcsIDB4MmY1YjdmNzcsIDB4OTQwNjMyMzMsIDB4OTE5OTlkODMsIDB4ZmVhNTgxOTksIDB4YzUyOWRlYmMsCi0JMHgyNmE1ZWY4ZCwgMHg2YmI4Y2Y3YywgMHg0NmRiZTU4MCwgMHgwMjZhNmJmMSwgMHhmN2E0ZWZlZCwgMHgyODNjNzc4ZCwKLQkweGY3MThkZGVlLCAweGY4NjA0ZmFlLCAweDNjNzQ1N2FlLCAweDY3MjA0OWFhLCAweGM0OTZiYTkxLCAweGIzMjc3OWNlLAotCTB4OGNkYzFjN2IsIDB4YjY3ZDZiOWUsIDB4N2U4YTQ5NzIsIDB4NDY3NjgzY2YsIDB4ZjJiOWUyM2YsIDB4NmIwMjUwNDYsCi0JMHhmOTA5YjI2NSwgMHhmNDY1YzU5YSwgMHhlOGFhNWM3YywgMHgxOTkyZmQxOCwgMHg4ZGY1YmY1YywgMHhmZjdkODcyZSwKLQkweDljNjQ4NGRjLCAweGQzYjVkOWVmLCAweDcyNzRiYzcwLCAweGM1Mzg3ZDk3LCAweDhiMzJmY2ViLCAweDkzOWFmMTA2LAotCTB4MDg5ZWZmNzMsIDB4NjZlNmZmNDcsIDB4M2MxMDE1YjUsIDB4MWFiMzVhNjIsIDB4MTZmZmFlZmMsIDB4OTQwOWI5YmQsCi0JMHg1NGY1Njk0ZSwgMHgzZTMyYTUxMSwgMHg3NGEzYjkwMCwgMHgxM2Y3MTJiOSwgMHhlNmUyNThlNywgMHg2MDRkOGRkZiwKLQkweDc2YTdmNTdlLCAweDkxOWI4ZTM3LCAweDIyYmNiODMxLCAweDEwM2ViYTNmLCAweDIzZjNhNGU5LCAweDhhY2NjMzk1LAotCTB4NjE3MzkxMzEsIDB4MjRhNjNmOTQsIDB4MmVhNzkxYzQsIDB4N2VjMzM0OTksIDB4ZDMwZmFlODAsIDB4N2Q3NWZlMzgsCi0JMHgxYTQzY2JhYywgMHhlZmVjMTljOCwgMHhhOGZkNTE5NSwgMHg3ZjI4NzNkMywgMHg5MGUzMWQzNSwgMHhmY2I0MjdmOCwKLQkweGYzYjA0YmY5LCAweGExMTRhNzEzLCAweGJmZjJhM2JlLCAweDA0NjVlNTA2LCAweGQwNzZkZmQzLCAweGM3ZjE1MWE3LAotCTB4MDc3N2Q2YWUsIDB4ODdkZWJlYzEsIDB4MDVjNjc5ZmYsIDB4OTBmZjNiZmIsIDB4M2ZhMDVkYmEsIDB4NGRmMmZkOGYsCi0JMHg3YzExZTQxNywgMHg4NzE2NGJmOCwgMHgxZmU0ZDViOCwgMHg5ZTk4MTM3OSwgMHhjZDk0MjYwZiwgMHhlNmRkNzk4MiwKLQkweDM3ODE2N2ZiLCAweDBhYzkyZjhhLCAweDkwYjE1ZmI2LCAweGYzYzZiYjJlLCAweGJjZjNjNjgzLCAweGYzZTY4MjRiLAotCTB4NzdlYzdlYmIsIDB4OGUzZjE0ODksIDB4YzNhNzA4ZmUsIDB4NGFmNWM2YzIsIDB4N2JlMzBhOTYsIDB4OGYzZDAyMTcsCi0JMHg1OGVmZmY3MSwgMHg0MzY3YmIxMywgMHhlMzZlNjc4NywgMHhhMjdjMDU2OCwgMHhmOTU4YjQ3ZiwgMHhjYzliNzZiZSwKLQkweDc0Y2YwNWQ2LCAweDcyZjJhN2Q4LCAweGRjZTE5OWJjLCAweGZkODFjYmI3LCAweDQ0NDQ3YmNkLCAweDFkMGU2NGJmLAotCTB4YWZkNTA1NmIsIDB4Njc5NjE2ZGUsIDB4YmNjNzllNmIsIDB4MzgxMmQ1MGYsIDB4NWVlZjNmMmYsIDB4Nzg1ZGZkMDEsCi0JMHg5ZDc0OTdmZiwgMHgwN2I4YWVmMiwgMHhmM2NjYjNmNywgMHg2MDNmZGYzNCwgMHhmYmE0YjczZSwgMHhmZDM4MGI0OSwKLQkweGU1MTc4ODJiLCAweGEyMGYyNjJmLCAweDliM2JlZDg1LCAweGY3YTc3YWUzLCAweGZlNjAzOGU3LCAweDNmNzAyNWY3LAotCTB4ODM4YzgwYTMsIDB4ZmJhZDg3N2MsIDB4MmY5ZDI2ODcsIDB4OWY4M2FhY2YsIDB4ZjNjMTNlZDcsIDB4MDhmOThmMzMsCi0JMHg1NDEyYjM5NiwgMHhlNWJhMmU3NiwgMHhhYmUwMTJmNSwgMHhmMDViY2RhNSwgMHhhYjZmOTZiZSwgMHgxY2I0OTY2ZiwKLQkweDg5MzFmYzRmLCAweDFmNmExZGU4LCAweDIxZmUwN2FlLCAweDM3NjBjMTVlLCAweDQ2N2Y1ZDJlLCAweGMzMmM3ZTYxLAotCTB4ZjlmY2NkYzMsIDB4ZGM1ZjMwY2QsIDB4NzJmNzY1MjcsIDB4M2U1OGJjZGMsIDB4Y2I5ZjdkMWIsIDB4N2NjNjA5ZDMsCi0JMHhmOWYwOGVlYiwgMHgyNThmMzY3MywgMHg5ZjQ4MWY3YywgMHg2NzlmOTk5ZiwgMHg1ZTc4YjAyNSwgMHhkNWYyYzZjNSwKLQkweDZiOTRlODAzLCAweGU2MGU4ZjViLCAweGRmMzAwYWU3LCAweDMzMTdlNzVhLCAweDY1MjAyYzNmLCAweDE0NDI5OTI1LAotCTB4OGQ3ZTViZGQsIDB4YTlmNGVhNzAsIDB4ZTdjMzliYTgsIDB4ZmJlMGNmZTMsIDB4ZTcxMDE5NmYsIDB4Y2MwZjhkZTksCi0JMHhkYjk0ZWVmNCwgMHg5YTdjODMwNywgMHhjM2Q5ZGRlOSwgMHgwOWFkZjBmOSwgMHg1MGFmZGQ2YywgMHhmZmEwMjUzZCwKLQkweGQ1YjI5MWU2LCAweGUzYmIyOGVlLCAweGVmYjc1NDk4LCAweDFiMzcyMDE3LCAweGFkNDZkZjE5LCAweDdiMzhjY2E3LAotCTB4NzlmNWM2NDUsIDB4MGZlZDRiOTksIDB4MWQyMTBjZjcsIDB4YmRmZWMwMjYsIDB4ZTllZjBmZDUsIDB4NzlmMTFjZTMsCi0JMHhlMDEyNjFiNCwgMHgxM2NiMTRiOSwgMHhkODZkMzJiZSwgMHhmY2ZiNDhiMCwgMHg0MjI0Y2Y0NywgMHgwNDZiYjUzYywKLQkweGE3NGI3OGMxLCAweGM3ZWYwOGNiLCAweGYzYzIyMjA5LCAweDYyYzNhNzMxLCAweGVmNWZlZGE5LCAweGQ4ZDljZTgzLAotCTB4NDcwOTc5ODYsIDB4OWFmMWU2YmUsIDB4ZjFhNWFkYWYsIDB4YmU0ZmY5ZTYsIDB4OWY3ZTExZmUsIDB4NmU1Y2FkY2EsCi0JMHgzNmUxZmY3NCwgMHg1YjViYjc0ZSwgMHhkY2YzYmVkOCwgMHgwZjQ4ZTU3NSwgMHgwNzIwZmRmMywgMHgxNjQ5NzcwNCwKLQkweDFjMWJjYWVkLCAweGNkZmQwMGFkLCAweDVkYTc5OWY0LCAweDZiZjQxYzcxLCAweGZkYzg5ZDBjLCAweDk4YmQyZjljLAotCTB4MmY1MTUzNGYsIDB4NGNjMjdjNjIsIDB4OWI4NzBhYmYsIDB4MzVhYmNkZTUsIDB4ZWEyZDZmZTgsIDB4ZTU1ZGNmNDEsCi0JMHhhZmFlN2E2MCwgMHg2M2NmMzFmMywgMHg3YTgwOTM0ZSwgMHg4MmZmMGNjZiwgMHgwZjU3MmI4ZCwgMHgzNjdmMzAyMCwKLQkweDg0NzlkOGJmLCAweGUxOWVhMjA2LCAweDU1ZTdkNGYzLCAweDQ3M2MzNDQxLCAweGQzOGZiMzFhLCAweGNlODkzOTdlLAotCTB4NzJkODVjYWIsIDB4MmVjMWU2M2IsIDB4MmMyN2YzYTUsIDB4MWJmMTgzZGUsIDB4NWUxZDdlMWQsIDB4YzQ0YTNjZjMsCi0JMHhmMTA2ZDkwZSwgMHgwNjgyMTVkNiwgMHhkZWY2MzZmYSwgMHg1ZWUxOGYxNiwgMHhiYjBkMzlhOCwgMHg4ZWZkMDIwNywKLQkweDIxYWJlZDQ4LCAweDJmYzQ3YmZlLCAweGY1ZDZmZmEwLCAweGI0NDVjMTAxLCAweGZiODA4ZDZiLCAweGFmZDIzZDVlLAotCTB4ZjRlZGU1ODUsIDB4MDUxYWM3NGMsIDB4NThhYTM5ZWUsIDB4ZTNhNWM0MjcsIDB4NmQ0MmZhODIsIDB4NTlkZTk0NTgsCi0JMHgxYjUyYjgxOCwgMHg4ODM3ODA2NiwgMHgxYThiMWM3OSwgMHhhN2NmMGRjYSwgMHhiOGZhOGMzOCwgMHgzNTIzNzkzNywKLQkweDc0ZDJmM2YxLCAweDRkZTVkMmY5LCAweDg3MGFiZjk3LCAweDUyZmZlMmNhLCAweDM2NTY1ZjYwLCAweGQxMDdlOWU4LAotCTB4ZjY3YWEwY2YsIDB4YzM4YjA3NmEsIDB4N2QyMzcwM2MsIDB4NjdhM2U5NjUsIDB4NzlmYzcxMGMsIDB4ZTY3ZDE5ZTMsCi0JMHg3OWYxZDM4OSwgMHhjNTAzZWI0ZiwgMHhjZWRmNDE4MywgMHhlZGY1MTg3MiwgMHgzZThmOWRmNywgMHhmNDJlNWQwZiwKLQkweGMyZTU5OWY5LCAweGZlM2Q3ZjhjLCAweDE5ODNhNjY1LCAweGQ4MTcwMGZmLCAweDFkNWEwN2ZiLCAweDkwMDRiYjgxLAotCTB4YmZhNzA2NzcsIDB4NzY3MDhlZDUsIDB4NzA2OTE0NjYsIDB4N2MwMGU1OWUsIDB4ZDJkY2Y1NDAsIDB4ZmQ2MzFmY2MsCi0JMHhiOTZjYjEyNiwgMHhlZTM0ZmQwMywgMHhmM2YxNjkwNywgMHgwZmY2YzI2ZCwgMHhmZWM0NjNiNywgMHgxZTMwMTE5NiwKLQkweGM4MzQxMzExLCAweDJjYjMxNzBiLCAweGJjZTk1YjM1LCAweDFjYjQyMWM0LCAweDlhYzFlOTA1LCAweGViOWZlNzA4LAotCTB4ZTExMzJmOGEsIDB4N2U1YTg2ZGUsIDB4YzJkNmJhM2UsIDB4ZmRlOTZkY2UsIDB4NzViMDcxYWQsIDB4Mzk3NzJmNDksCi0JMHg2ODNiNTZjYSwgMHg2YjVmMjdmZiwgMHg3OGIwNzAyYiwgMHgzODE5ZmEyZiwgMHg5M2VlMTE0ZiwgMHhkODMxN2VhNCwKLQkweGNjMTMyZmIzLCAweDIzNGJjZDRmLCAweDBlYmU4MTdiLCAweGYyMGYxOWUyLCAweDg1MjM4Y2ZkLCAweGZiNjU1ZjlmLAotCTB4MGIyZmY0NmMsIDB4Nzk2YWNkNGEsIDB4ZjkwOGQ1NWUsIDB4YTYwNzdkZmQsIDB4NWE3MDNkYzEsIDB4NmNjZWU1OTIsCi0JMHhmMWMyN2Y1YSwgMHg1OTY3YWIzYSwgMHhhOWJiNjRjZSwgMHg4Mzc4ZWRmZiwgMHhjZTVhNDdkNSwgMHhhN2Y1YTUwYywKLQkweDNhYjI2ZjFjLCAweDA1NTEwODZjLCAweGFkZTNiNGYzLCAweDMwNTFmZTY5LCAweDNmZGY5YjhlLCAweGYyMDkxOWUwLAotCTB4NWY5ODU5MjAsIDB4MzA1MWVkMmIsIDB4YTNlZmFjZmUsIDB4MmMwNmEyYWYsIDB4MDBjZmFmZjgsIDB4YmE5ZjgyZmYsCi0JMHgwZTRmZThiMiwgMHg3OTE1ZWY4OCwgMHhiZjFmZDg1NCwgMHhmZGI2ODIxZiwgMHhlM2E5N2JiZSwgMHhmMDU4NzQ1NSwKLQkweDAxMjgwYTVlLCAweDNlMzg1YmZmLCAweDI2OTBiYTc1LCAweDIzYzg0OGNmLCAweDQ4Y2Y0MTI0LCAweGU1ZDg3N2Q4LAotCTB4ZGQwMTM2ZjAsIDB4NWRiNDBmZjMsIDB4ZjRkNDcyMDYsIDB4ZjAwYmRmYzYsIDB4YWMyMWNjZmUsIDB4MjhjYTdjOWYsCi0JMHhjOWU2ZGY3MCwgMHg4ZmFkMDYxNywgMHhlNWRiYmZkZSwgMHhmNDAxZGMyOCwgMHgzYjQwNjRhMSwgMHhlNGRkNTA0MSwKLQkweGQ0MTc2YTY2LCAweGM5NWUzZjUyLCAweDY4YzQ3ZjAxLCAweDdlNzEzNzg3LCAweDZjYTEyZDdiLCAweGMwZDlmMjM3LAotCTB4OGUxZmQzMTAsIDB4OGZkMGJkYjIsIDB4MmRhNDU3MmUsIDB4YTc3YzRmYTUsIDB4NDExMGFlZTQsIDB4MzU2NGE2M2YsCi0JMHg3MjBiOWMxZiwgMHg5Y2VjZGZmOCwgMHg2MGYxZTBhYywgMHhmMGU2ZGJmZSwgMHgzZjZjMjBmZCwgMHhlOWZiMDFkZCwKLQkweDkyMzVhZmEwLCAweDcxZTc0ZmUxLCAweDIzOGYxNjA1LCAweGZlNTEwNTY5LCAweGZkMDc5ZjA1LCAweDM3ZGMyYTdlLAotCTB4ZjZjMWNlMzIsIDB4NDRiY2U5NWIsIDB4MTM0NjFmNTgsIDB4ODg3Y2NiMTUsIDB4NmEwMGU0MTMsIDB4NDlkZjU4YmQsCi0JMHg0MTdmMDc4MiwgMHhjZWM4N2ZmYiwgMHgwMzViNzRmYywgMHgyYzVkYzQzMSwgMHg1ZjdlYjY0ZSwgMHg3ZGQ5OTJlOCwKLQkweDVhZjA3MjJkLCAweGE3MDllM2QwLCAweDc4ZjQxYjg4LCAweDg0OGFlM2Q3LCAweGZiOTIxOGY5LCAweGIwOWZiODQ3LAotCTB4ZGUwMDQyY2YsIDB4MWI4MGU0YTcsIDB4MTdkZGQ5ZTIsIDB4MTIwNmVhNDksIDB4ZDM4YmFmZTksIDB4MjFmN2VmNWIsCi0JMHhlMjA4YmQ0NSwgMHhjYzVjYTMxZCwgMHg5MGFhNzhiZSwgMHhmNzY4ZmU2MCwgMHhmYjAwMjU3MSwgMHhiNjU5Mjk0YywKLQkweGZhYmY2ODlhLCAweGVmN2IwNzJiLCAweGNmYTJhNGQ2LCAweGQ2YzExZTgxLCAweDhmZTMwMjA0LCAweDQ0MGQ0NWRiLAotCTB4MzUzZjg3NGEsIDB4MWY4MWQ5ZTYsIDB4Mjg4ZTAzMzYsIDB4ZWVhYzUyMWUsIDB4OTRiZmEwM2IsIDB4NmNkZTE0MzMsCi0JMHhmYzQxZWU3YywgMHgyNGU4ZWE0YSwgMHg1Nzg5ZGY4YSwgMHhiZmI4NTUzOSwgMHhmMDdiMjllMSwgMHg3YjlmY2MyYSwKLQkweDI0Zjc4MmQ2LCAweDcyYjQ1NjZkLCAweGFkM2U2ZmE4LCAweGYzNWUyMWJhLCAweDAxMzA3NjU0LCAweDA1YWNmM2U3LAotCTB4YTEzOWIzZTcsIDB4MTQ2NWUyZmIsIDB4NjA4ZDVmZWUsIDB4MjBlNGJmN2UsIDB4ZTQwNTJkOTIsIDB4ODNiZDQ4YTgsCi0JMHgzMjcwNGYzZSwgMHhjMmNhYjg3ZCwgMHg5MzhhNjhlNCwgMHgwMjQzY2ZjOSwgMHhkZTBmM2YxZCwgMHhkMWY5NDQyYiwKLQkweGJhYmExYmYzLCAweDdlODg3OWQ5LCAweGMwODliN2Q3LCAweGJhZTUwOWM3LCAweGMxMTIxZTNmLCAweDQ2NWM5ZThmLAotCTB4ZWM5Y2ZkNzAsIDB4M2EyYTAzOTQsIDB4MWNlNzFlOWYsIDB4MDhjYmZmNGEsIDB4ZmIyZTFmNWIsIDB4NWZjNjMxNjAsCi0JMHg4MmRlMDUyOSwgMHhlYmQ4MGJkZiwgMHhmMDUyZjdlNCwgMHgzOWNiOTg3ZCwgMHhlZDIxNGM5ZiwgMHg1M2U3YWMyMiwKLQkweDQ0MmQxMWNlLCAweDljZmNiYmM3LCAweDlmM2Q3NzE0LCAweDUyN2RmYmM2LCAweDdkMTI1MjIwLCAweDJhYWNmMGFmLAotCTB4MTIxNWRmMDEsIDB4YWQzYjdhZTMsIDB4YzQzOGU0YmUsIDB4YTY2ZDhiN2IsIDB4MjM1ZWIwZTcsIDB4ZjQwOTFlM2MsCi0JMHhiMWI3MzRkNywgMHhhZjkzYTQ3ZCwgMHhlMGM5ODM0ZiwgMHgzZDFhYmNlOCwgMHgxYzRkM2U2ZSwgMHgwYmRhMjhmNSwKLQkweDc4MDY4YWE1LCAweGJjZjRlMmQ5LCAweDdlNDRmYjBiLCAweDJmOWUyNmVhLCAweDhmYTRmMzNlLCAweDM4OGQzZmU1LAotCTB4NzJmMTgwOTcsIDB4ZTA0ZTlmY2EsIDB4ZWJlYjhiOGIsIDB4ZWYzYTc2ZmMsIDB4ZmViMTg3OGIsIDB4YWY0MTBmODEsCi0JMHg1YTc4Zjg1YywgMHhmN2Y5ZTgyYSwgMHg0YmQxYmViOSwgMHhiZjgwZWY5ZCwgMHhiZjhjNDlkYywgMHhlNDQ2OTdkYywKLQkweGM0OTIxNGIzLCAweDBkZTQ0NmM2LCAweGQ5ZmEwZWY4LCAweDhhNmUwNzI5LCAweGE5MmY3ZTdiLCAweDBmZDlkNGE4LAotCTB4NGVkMDQxZTYsIDB4MzZkMzJmYmUsIDB4MWY0Y2U0MWIsIDB4ZTMyNzAxZTcsIDB4N2FiOTczNmIsIDB4MTBkZGIyZTUsCi0JMHhjZTdmZjcwNywgMHgwM2E5OGJkNiwgMHg1YTFlNjFjZSwgMHg2MjQ4OGZkOCwgMHhkNmFkNTY3YywgMHhmMjAzMzc1ZCwKLQkweGM2MzI5YzYyLCAweGY5ZjlkM2JiLCAweGM5N2U2OGFiLCAweDlkMTdlMjhjLCAweGNjOWQzYWVmLCAweGE3ZjlkNjhmLAotCTB4OTg5YmM3NzgsIDB4MzlmYzVmZGYsIDB4MTI2Y2VlMjEsIDB4ZmU3NTA3YjYsIDB4ZjhjZmNjYjksIDB4NmNmZGIyZjAsCi0JMHg3ZjhkZTg5ZCwgMHhhOWVlZGQzYywgMHhmODYzMWVhMCwgMHg5YmUzM2Y2NiwgMHhmODFmY2EyMiwgMHhmMDNkMTBmYiwKLQkweDk2NmY5OThmLCAweDVmMzdjYWY1LCAweDk2N2UwMjI3LCAweDc3OWYxNmI3LCAweDY3ZDlhNTlmLCAweDk3MzM5M2NjLAotCTB4ZjNmMTFjMTMsIDB4NjI0ZDlmMjgsIDB4YTk0M2IxZmMsIDB4ZTgyZTUxZmIsIDB4MWEyZGFiOGIsIDB4MTVjYTAzZTgsCi0JMHgzZTUyZDc1OSwgMHhkZmEwOTFkZiwgMHgwMzkzNWE3YiwgMHhkMzEyMmRmNSwgMHhhYzVhNWIzZiwgMHgzOGI2N2ZhOCwKLQkweDY3OGM1ZWJkLCAweDY4ZjNiMDY1LCAweDQzYjZmMjQ0LCAweGMwMzZiNDFlLCAweGYzZGY0NmE2LCAweDhkOTNhNTdjLAotCTB4MTM0Mzk0MTMsIDB4ZjQxZDgyOGUsIDB4ZjFmZjQ2MTcsIDB4OGRjMWU3NTcsIDB4ODJiMzI0MzAsIDB4MzFjYzYxZDEsCi0JMHgwZDk4YmQ2NSwgMHg4Zjg1M2JlOSwgMHgwMGJkN2YwMCwgMHg1NzdlODMzYSwgMHg3M2MxNTg3ZCwgMHgyYjBmNGJmZSwKLQkweGQ4NWYxN2E4LCAweGM0MDk3YWY1LCAweGNiN2NmNDhkLCAweDJmNWYzYjcxLCAweGVmMDUxYTI5LCAweDljN2IzZTMzLAotCTB4OGViZDYzZWIsIDB4MjdhMGU3YTksIDB4NGVhNmY3NGQsIDB4OTk3ZjRjMjAsIDB4MDMyZDNkZWYsIDB4YjQ4ZGM5ZmUsCi0JMHg5ZDAzZWY5YiwgMHhkNjFlNDU0NSwgMHhiNWRiNmI5ZCwgMHhjYzE2YTA2OSwgMHgwYWNlODFmNywgMHhmZmY2ODU1ZCwKLQkweDY5OWU4M2NjLCAweDdkY2UzNTJlLCAweDZlMWY5Y2EwLCAweGMxZGI2ZDIwLCAweDRmZGYzNTI1LCAweDZkZTdkNzQ5LAotCTB4YWY5M2ZmMzAsIDB4MmY4ODE0ODQsIDB4OTE5YTk1MDYsIDB4OWFlZWJlZWMsIDB4YmEzZmQwMWMsIDB4YzUxZmUxZGMsCi0JMHgxMWMzZjA1YiwgMHhiZjY4ZmI4NiwgMHg1ZmJlZjNlNCwgMHgwOGJkZDg5MywgMHhiZmVlMGFlZCwgMHhlZmIwOWFmYywKLQkweDdhZGQ3YzgyLCAweGRkZTJjOWQzLCAweGJiOWZjYjc5LCAweDdlNjFmNDA5LCAweGI5ZjcwN2E1LCAweDlmOTg5MzRhLAotCTB4YjIxMjFiZmMsIDB4MzRiZDAwZTUsIDB4NDFjOGUzMDksIDB4MmEzZTJkNTksIDB4NTIyM2RlNDQsIDB4MGYzODA4ZDksCi0JMHg0MjVmYjNiNSwgMHhiOWFmOGMzZSwgMHhjMTM4ZWZiYywgMHhmN2JhOTBhZSwgMHgyNmUzNzdjMywgMHhkZTgzZTVlNiwKLQkweDk1NWU4ZTc2LCAweDBlOThlYjBhLCAweDc0YWI4NTM3LCAweDg3MDIzMzkzLCAweGJlNWVkNzBlLCAweDM5YWU2OGNlLAotCTB4ZTFmY2MwZWYsIDB4Y2Q0M2QwM2IsIDB4ZTBkODhlODcsIDB4ODIwZjlkN2IsIDB4ZmQxOGE3YWQsIDB4ZTgwMWY4YTMsCi0JMHhlMTA3ZTExZiwgMHg3OGViYTgzNiwgMHg4N2U3MDdmOCwgMHhmYzZkZmYyZiwgMHhmMTU5ZmQ0MCwgMHhmZTAwZmMzYywKLQkweGUyZjdlMjYwLCAweGU2ODlmZjg3LCAweGZkYWY2YTA3LCAweGFmNjUxOWQzLCAweGE3OTYxNTA1LCAweDNlNzVkN2E1LAotCTB4YzQyOGU0NTgsIDB4NjA4NTM0ZjcsIDB4NjVkOTA1YmUsIDB4ZTJkZmJmNjcsIDB4ZjAzOGM2NGQsIDB4NDYzNjZlZjMsCi0JMHgwNjQ3ODdkNywgMHg3NmUyMmY4MywgMHhlMzc5MzBhNSwgMHgwZThmNWRmNywgMHg4ZTU3NjgwOSwgMHg2NmUxMGFhNiwKLQkweGEyMDZlM2I0LCAweGJlMzhkNDNlLCAweDgwNDExMWM4LCAweDE3MzBhYzdiLCAweGNiZWMwYjM3LCAweGM1YzgyYTUwLAotCTB4MTBmNGViNjgsIDB4Yzc1NmZmZjAsIDB4MWY2MDU5NjUsIDB4ZTcyNjM5ZTYsIDB4MWY2ZDdmMDAsIDB4NTgxNWZjYjEsCi0JMHhhODBmYjZiMiwgMHgxYWEzN2U3YywgMHhiZDc0OWZiMSwgMHhhYjc3OTdiNywgMHhjNWM0M2Y4ZiwgMHgwZjcyZTFmOCwKLQkweDdhMDE0ZjNiLCAweDVkMGUxYTNiLCAweDAwNTkwM2ZmLCAweGNiMzQyMTBlLCAweGY1MDM4ZGYyLCAweGU4M2I0Yjc1LAotCTB4ZTI4MzgwNzMsIDB4OWE0MGI3NzUsIDB4YjQyODNlYzAsIDB4YzE4YWQyNzgsIDB4OTIxN2ViY2UsIDB4ZDZhZWNlMDAsCi0JMHhiYzQzMDcyZiwgMHg5ZmNiN2E2OCwgMHhkM2JjMDIwZiwgMHhjZDI2N2RmNSwgMHhiNjY0Y2ZiOCwgMHg0NzdiNzVhMywKLQkweDdiNzQyYmY3LCAweGQwODhhMjQ4LCAweGI3NjgyNmVkLCAweGI4NmVlN2YwLCAweGFmZDYxYjFmLCAweDcxY2YwZDkwLAotCTB4YmQ1YTc0M2UsIDB4NTdlNWMzYzgsIDB4Y2U5OGYzYTIsIDB4NjkwZDcxZTcsIDB4ZDdjOGI4NDMsIDB4OTkzMzdjZGYsCi0JMHhjNzA2NjdkMiwgMHgyNGZkZjRjNywgMHhlZDBiOTA5NCwgMHhmMTRkNWM4NCwgMHhmYzQ0YjU3MCwgMHhhYjljNzQ0OSwKLQkweDFjN2M4MTM1LCAweDhjZDcyN2M1LCAweGVmZTFkNjM3LCAweDNmNDhmNGIyLCAweDVlNmZiZGJkLCAweGUyOTkyNjFmLAotCTB4ZGNiN2RmZjEsIDB4YWJlNzYzZWYsIDB4ZTc2M2VhZmYsIDB4MTUwZTI3NjcsIDB4YTgyYzEyZmQsIDB4YjlkOTMzZTMsCi0JMHhjM2MzMzc1OSwgMHg3YWZlMjU3ZSwgMHhjOThiODhmNSwgMHg3YjRiNDRmMSwgMHhkYzFiOWMyZSwgMHg1YzJiZjNiZCwKLQkweGZjZWNmNzFmLCAweDEzYjAxZGVhLCAweDA4OTcxYzI3LCAweDNjNGUwMWU0LCAweGY3MDkyNjNlLCAweGUwNjdjNzNkLAotCTB4NmZkZTlkM2UsIDB4MGU0ZGE3ZjUsIDB4ZmYyMzllYzIsIDB4ZWY4MmY3ZTgsIDB4MTQ3OGYwYTMsIDB4ZTU4NmNmODAsCi0JMHgzZDBmMWQ4YiwgMHgzZDlkZmQwYywgMHgzY2U4OTEyYywgMHgzYmM1MTJmMywgMHgyNTY5ZTIwYywgMHg3ZGY4N2VmYywKLQkweGY0OTdiMzAyLCAweDVlZmM3ZGY2LCAweDU5NzJmZmU2LCAweDliNmI3ZWY4LCAweDYyNWVmZGM0LCAweGQ1ZjNhMjhkLAotCTB4ZTUyNGYzNTQsIDB4ZjU3YWU4NDUsIDB4NTJlM2QyYjEsIDB4ZTA3ZDJjNmUsIDB4MGY5ZDYzZWYsIDB4ZGM2NzkzY2YsCi0JMHg1NzlmYTk1YiwgMHgyM2Y4ZTNhZSwgMHhmM2MzZGY3YiwgMHhkZDM0NTcwMCwgMHg3ZTdkODEyMSwgMHgzYzQ4ODY0NSwKLQkweGE5NWVlMzUxLCAweDJhM2UwZjUyLCAweDhiOGY3MWVlLCAweDc2ZWFlNWU3LCAweDFmYTdkZWNhLCAweGY3MDY5MTllLAotCTB4N2E5ODg4NTksIDB4ZTViMmRkNTUsIDB4YjdhODVjOTUsIDB4NzFjZjcxODksIDB4NDU3YmYxOWIsIDB4ZjAxMjFkY2IsCi0JMHgyNjJlMTdmZiwgMHgzZjhkYmQxZiwgMHgyN2NhNjJmMSwgMHgwOWRkMDI5NywgMHgwNDBhZjNiMywgMHg3ZDMzMjM5NCwKLQkweDdkZmNlY2Y3LCAweDllYThmYjZhLCAweGZkMTNkZGYxLCAweGIxNzg3NGNkLCAweDJmZjcwOGEzLCAweDk5ODdhMzdhLAotCTB4NzlkMTc3NmYsIDB4NDJmY2U5ZmEsIDB4NmE3ZTllNzQsIDB4YjlmMWVkOGYsIDB4MmY5MmZlYjEsIDB4YmYzYWViMDMsCi0JMHg5MTNlYjc1NiwgMHhjZTljZjYwYSwgMHgxOTUyZDNhNywgMHhmMWQ4NGNkZiwgMHg0NjcxMmE3MCwgMHhkYmM2NjVlOCwKLQkweDY2ZmQzOTVmLCAweDBjZTY2ZDExLCAweDgyNmRjZmZhLCAweGUxN2Q0MmU2LCAweGNmOTA2ZDI3LCAweDljNjFjNjUyLAotCTB4ZGEwOTU2ZjUsIDB4Y2ZlNzg0MWYsIDB4NTliMWQ3OWIsIDB4ZDdiYzI4ZTIsIDB4ZDk3YmQ3YmEsIDB4YTBjYTE1ODcsCi0JMHgxNWViY2Q2ZSwgMHg3YzBlMTdkYywgMHg0YWE3NWU2ZCwgMHg3MDQ5ZDQwZiwgMHhiNDg5NThhZCwgMHg2ZTMxZTk5YywKLQkweDk5NzBlYmE3LCAweDI5MzZmY2U5LCAweDA0ZjQ3OWMzLCAweGNjMGY5OWE3LCAweGI5ZjZlYWYwLCAweGM1Mzk0ZjdlLAotCTB4ZGExNGI0YzcsIDB4MjE2YWI1ZGYsIDB4MWQ2NjJmY2UsIDB4NjllOTc4ZTYsIDB4NWU2OWVkZmQsIDB4N2ZmYzRkNDcsCi0JMHhkN2Q0ZDhlNiwgMHhjOTNkYmQwMCwgMHhlNjZlOTk5YiwgMHg5NDdmNWQ3NiwgMHg1ODc5MDBjMCwgMHhmOTFlYzFmYSwKLQkweGY0OGU5NWMyLCAweDEwYTczOTJkLCAweDBmMWJlYzBmLCAweGEyNGY5M2I0LCAweDdkMzIyMWQ2LCAweDlkZGJmMjA4LAotCTB4MjdhY2Y2NmUsIDB4Y2U3YTViN2UsIDB4MTFhOWJjNDIsIDB4MWY5YjkzYmUsIDB4ZWRkZjAwNzQsIDB4YjAxY2VhOTAsCi0JMHg1OWM1MzNhZiwgMHhmMTQ0OWI1ZSwgMHhhMmQzZjUzNSwgMHg3NGJjZjFlYiwgMHhjODQwODViYiwgMHhhOWNiNWE2YywKLQkweGE4NDcxMGJkLCAweDlmMzA0ODNlLCAweDc3NjVhOGJhLCAweDRiZTlmMDMxLCAweDUxZmExYjUyLCAweDc5MDk2NzVkLAotCTB4NmNjZWNhMzAsIDB4ODA3NWE5NmUsIDB4YzY5Y2Q2MWQsIDB4NGJlZDAzY2UsIDB4Y2RiYzg2MjYsIDB4YmYxOTEyNDcsCi0JMHgzZDNlMWYzNiwgMHhmZGE3MTNjMywgMHg4ZWJmNmYwMCwgMHg3MTcyZDI3OCwgMHhmYzYxNzY1ZCwgMHgwNThkNjRhMywKLQkweGQwNTUzZmU3LCAweGJiMDM0ZTVlLCAweDBmNzY0NmU1LCAweGI4ZWI1NzYzLCAweGJjMjhkMzk3LCAweGEzMjRiNzlkLAotCTB4N2NkNjk5OWUsIDB4NGE2ZTFkY2YsIDB4ZjMzZmUwODgsIDB4MWNmNzc5ZjEsIDB4ZGY0MGRiNDEsIDB4YWMzNTUxMmIsCi0JMHhlMzY0NTQ5NywgMHg3ZmI4ZjhiZSwgMHgxZDM3NWVhNSwgMHhkMTk0YWZkYSwgMHgyZTI2OTliZiwgMHg3NTFlMjA5NiwKLQkweDAzYzg0MzMyLCAweGQwYTc3MTdmLCAweGE3N2UxMmJlLCAweGM2Y2U1ZmNkLCAweDJhN2Y2ZTIxLCAweDRjNmY5ZmY4LAotCTB4YmY4ZDFkNGYsIDB4ZjVlYWEyNmQsIDB4NmJmN2YwMGIsIDB4NWI0ZmM5ODgsIDB4NmVjY2VkYmUsIDB4M2U1ZjZkMmIsCi0JMHhjNzdjYzA1MywgMHhlMjJjZWU2OSwgMHg5MjlmZTI4ZiwgMHhmOTllOTQzNSwgMHhmYTViMmY5NCwgMHg1ZjVmMDExNywKLQkweDY3M2M2YTU3LCAweDQxY2NiMzM1LCAweDYzZjFkMTAyLCAweGMyYzMyZGMxLCAweGI1ZTc4ZmIzLCAweDdlZmMwYjc2LAotCTB4NTdlNzJlNTksIDB4MzU5ZjdlNzEsIDB4NWRmMGQ1M2IsIDB4NjY3NjYxMzksIDB4ZGQ5MTM2ZjUsIDB4N2VjODUyNTcsCi0JMHhhZjk3NTEyNywgMHhiYzM5NzExZiwgMHgzN2M3ZmI4YSwgMHg3MDBjYjM3YSwgMHgwZDI4ODc0YywgMHg2OTMzMzRmZCwKLQkweGQ3NWRkYTI4LCAweGU1Yzc2ZDljLCAweGUwZmM1Y2I5LCAweDc4ZTg5YmFkLCAweGYyNjExYTNmLCAweGFiYzVjNTZiLAotCTB4ZDgzMjJmOTAsIDB4Yzg0Y2NhN2UsIDB4NmY0MTEyMmUsIDB4NjZiYmRmMWEsIDB4NDcxZWIxYmMsIDB4MjdhYmNmOGUsCi0JMHhiMzMwN2Q3NCwgMHg5YmZkYzQ1NSwgMHhjZjE0ODU5OSwgMHhkM2IxODkwMiwgMHgxOGJlYWRiZiwgMHg4NjVlZDE2NywKLQkweGU3YjVkMDc4LCAweDA0YmJmODNjLCAweDgzZTJmYTMxLCAweDJmYTRlZmQyLCAweDM4MzJhMDVlLCAweGQyZjVjYTllLAotCTB4MGZkZmVlNDQsIDB4NmY0MDgzMjIsIDB4MWYxYjEzNGMsIDB4YTJlYTNlMDYsIDB4MGUzNWE2ZWIsIDB4OGVlYmU5MWYsCi0JMHg1MDk3ZWZlZSwgMHgyMWJlMDYzOSwgMHg4ZjE4NjkxZCwgMHgwMzJlNzY5ZCwgMHg3Zjc0NDlmMywgMHhhODQ3YWMzZiwKLQkweGIxYzVhMjVkLCAweGNjNGJlZTk3LCAweDEzMDdkYzMxLCAweDc2NTEyYmQ2LCAweGZkZjA1Yzg5LCAweGQ0Njk5MmVkLAotCTB4MDBmMjU1MWUsIDB4OWZjNDgxYmUsIDB4ZTMwY2ZhOGYsIDB4NzA5MDI1OTIsIDB4OGNjMWYxMDIsIDB4YTllNzE4NTMsCi0JMHg4YWZmYTg5NiwgMHg0YzEzZjNlYiwgMHgwOTdmZDFjZiwgMHgzMGY5MTEyOSwgMHg5YzdhMmJkYiwgMHhkYmE0OWFkOSwKLQkweDA5M2U0NjUzLCAweDk3YWYxYmM3LCAweGYzYTNlZTMxLCAweDEzZTAwOTQ5LCAweDExN2FmZmU0LCAweGYxYmQzYWUzLAotCTB4NmY3ZTNlOGQsIDB4ZmFhMjEyZmMsIDB4MGYzODQ5MjgsIDB4ZmJmOTcwYmYsIDB4YmNmMmZjYjYsIDB4YzhjMzI3Y2UsCi0JMHg4OWYwYmViMCwgMHhiZjNhMWZjZSwgMHhhNjA5ZDhjNCwgMHhlYjRmNTA3OCwgMHhlOTg5NGJjZCwgMHhkNjllZGY4OCwKLQkweGM4NDc5NzliLCAweGIzN2JkN2E4LCAweDMxMjY3NjZiLCAweDc0NGFlZTNkLCAweDVkNTc3ZjYzLCAweDc2MDlkMzM0LAotCTB4MTFlYjk1OGQsIDB4YzcwYWRkN2QsIDB4OWYxOWVhYjUsIDB4NTczZWRjYmMsIDB4NmFhM2ZkODIsIDB4MTFkOTFmZDAsCi0JMHg2MGYxZTgzYSwgMHhhZTk3MmY5ZCwgMHg5Y2ZmMTgyMSwgMHg2NzU2ZjVjZSwgMHg1NjA3OGIyYiwgMHg3MDAzMTU0ZiwKLQkweGU1YjhhMjg0LCAweDlkNTk4N2MxLCAweGQzYTJjYmRkLCAweDI3Y2U2YWY3LCAweDA5NmVkMjg1LCAweDFhZjM3NzdlLAotCTB4YmUyMGQwNGQsIDB4YzRmMWUxZTQsIDB4ODA5NGU3MTksIDB4YWZhYjFkOWEsIDB4Yzc1ZmJhNzQsIDB4MGJiZjA3YmYsCi0JMHgyM2M2YmZkZSwgMHgxYzRiYTgwNCwgMHgzYmFlY2ZhMywgMHgxODhhZWNjNywgMHhjZmJjMmE3YiwgMHg4OTFlNjJhYiwKLQkweGViNGU1Zjk5LCAweDg2NDIxZjc0LCAweDBhZWQzYmZjLCAweDc2ZmNlOTIxLCAweDZmN2RmZTg1LCAweDFlMDY0ZTc0LAotCTB4NjVlZTdhMDYsIDB4MWQ4MGFlZjcsIDB4ZTJiZTc0MGYsIDB4M2FmZDg0OWMsIDB4Y2NmMThjOTMsIDB4YmY3OTFkYjMsCi0JMHhiZjkzZGY0MSwgMHhjZGFmYmU2ZiwgMHhjNmRlOWYzYywgMHgxN2Y3NDZmZiwgMHg4ZmEwZmZiOCwgMHhjZWM0OTU3YiwKLQkweDI3ZDc5YmM3LCAweGQ3NWU5YzdkLCAweDk5YmRmZTIzLCAweGUyOTNjMzdlLCAweDNlYmE3ZGRiLCAweGQ3M2ZjMThlLAotCTB4YWZkMTNkZDcsIDB4ZWJhZDdkMzcsIDB4YmViNzdmYzUsIDB4ZDdkN2ZiZDYsIDB4YjM1YzdkMTMsIDB4OGZjOWVmMWUsCi0JMHhlYWYyZjVkNCwgMHhkZjhjMTZmNSwgMHhmYWZlZTE0YywgMHg5ZTJmMWUxNCwgMHg2Y2UyYzQ5OSwgMHhlZWRlYjhiMywKLQkweDAxNjZkY2ZhLCAweGIzMjgyZWJiLCAweDZlZmYzMGZkLCAweDM2YTFjNjI3LCAweGQwZjY2MmVmLCAweDcyNGUzYzliLAotCTB4OWM2MjIwYjcsIDB4MTZiMWVlZTQsIDB4MTdkNGRiZDQsIDB4NGI3OTg3Y2EsIDB4ODA4Yzg0NDUsIDB4MmMwMWRjZmQsCi0JMHg4NTI4ZGY0ZSwgMHg2YmVmNTBjYSwgMHg2ZjczODExMiwgMHhlZmRmZWFhZiwgMHhmZDA0ZGZmMSwgMHg3MGYxZmRkZiwKLQkweGEzYzYyZDRiLCAweGM3ZTA2ZDQzLCAweDcwOTNjYjhmLCAweGFhZDkyYzVmLCAweGIzYmFmYzYyLCAweDAzZjc4YWQ1LAotCTB4ZDlmOGVkNzUsIDB4ZjlmYTE5NmUsIDB4NWFlMDY4OWMsIDB4MGQ2YWQ0YmUsIDB4MWU4MTRiZWYsIDB4MTAxZTI2OTksCi0JMHhhYmEzM2YyMSwgMHg1OWZkZTA5YiwgMHg4YTg3Njc5MywgMHg0MjliM2ZjMSwgMHgwZTIxNmFkYSwgMHhmOTYxNTEzMCwKLQkweDNkM2M2NmU4LCAweGNjMzFmN2NhLCAweDdkZTExNGZiLCAweDlmNjY1Njg5LCAweDc2NDRiYjE1LCAweGZiNGY1ODBmLAotCTB4ZTYwYWNkMTIsIDB4MmZiNmY3NTcsIDB4YTA5Njc4NTEsIDB4MmZiMzE2OWQsIDB4ZDJmNGNjZDEsIDB4OTg5N2RkYjcsCi0JMHhkZjg3YjgwOCwgMHg5ZmY5ZDM2NywgMHhjM2QyMjdlYiwgMHg4NTY2YzRmZSwgMHhiZjc1NjdlZCwgMHhiZmIwMTMyZSwKLQkweGI4YjRiMWM5LCAweGY2ZGVhMzcxLCAweDRhZWM3NjI5LCAweDFkM2RjMGYwLCAweDRkZWZmOTliLCAweGMwMzVkOGVjLAotCTB4ZmNmNmU2YTMsIDB4Nzc3YjZlN2UsIDB4Y2RhNGE4MTEsIDB4OTg0YWQ3OGQsIDB4YjllM2M2ZjcsIDB4MTlhMGI4ZTEsCi0JMHg2NmZmMWNhZiwgMHhjODE1NmU3YywgMHgwN2M0MDcyYSwgMHhlMGE5YjQ1YiwgMHhiZmI4ZjUxNywgMHg3MWMxZWRkMywKLQkweDVkNDc4YWZhLCAweDQ5MWYzNjRlLCAweDZmOWYwMGYwLCAweDAzYzAzMjNlLCAweGZjMDAzZmUzLCAweGFiNTk3MTBhLAotCTB4OTNmMDE1ZmIsIDB4OWQzZTFjNzcsIDB4OGFiY2ZiODAsIDB4YTRiZjA1NDcsIDB4YjFhNmQ5M2IsIDB4ZWY4Yzg5NzMsCi0JMHgwM2MzOTk4MywgMHg5YWJkMGZiMCwgMHg4NGU2ZjlmMywgMHg0YzhlYmZlZSwgMHg2MWFmZGU4YiwgMHgzOWZhMzNmYiwKLQkweDYwODU1YWZmLCAweGMyZGY4ODNlLCAweDc4Y2M0MWYyLCAweGViNjZlNDFiLCAweGViYzRlNmI1LCAweGE2OWM4OWMzLAotCTB4MzVmMmYxOGEsIDB4N2Y5NjYyYjUsIDB4ODA3ZTdlNjAsIDB4ZjAzOTc3ZjMsIDB4NzE0N2VkMDEsIDB4ODk1NmI4MzMsCi0JMHhhZWZmODQ2NSwgMHhjZWY1ODEyOCwgMHhiZmU1YWY1YywgMHhjNjdiNDM4NywgMHgxY2Q1NjVkZiwgMHhlZDJhMzM5NiwKLQkweDY3ZDI3OGUzLCAweDQwZWZjMDU3LCAweDNiOTZmOTZiLCAweDJmNzBkYzczLCAweGYyY2E1MDgzLCAweGIyZjkyYzNjLAotCTB4YzQ5M2M4NDYsIDB4ZDY5NTNhNTIsIDB4MGVjYjkyMmIsIDB4Yjg4M2Y1MjYsIDB4ZTQwZDczYjEsIDB4NDc5ZTQzMzMsCi0JMHgyZjQ0NWE1ZSwgMHgwYWQ3NDdkYywgMHgyZTI0NWU1YiwgMHhiZjEyYjBlYiwgMHgzZDcwZWMxZCwgMHg3OWU3OWZjZiwKLQkweGZiZWJiNTJjLCAweDNlZWNlZGQxLCAweDg2ZmU4YWVhLCAweDg1MGU0ZTczLCAweGJmYmY0NzdlLCAweDlhM2RlYWRlLAotCTB4YTE0Y2Y5ODQsIDB4N2RkMjk1NDQsIDB4Nzg2OThlZjksIDB4NzZlMjkwN2YsIDB4M2U0NzdjZTMsIDB4ZjgwMzI5M2YsCi0JMHhkOWY1YzI4MSwgMHhmZjVjMzFmZiwgMHhjODJlMGYxYiwgMHgzYTcxODE2ZiwgMHgwNjJjOGViNiwgMHgwODcyMzFmZCwKLQkweGQwOGI1OTljLCAweDdjNDFhYTg3LCAweGJjMTIwZjZlLCAweDAxZmZmMTJmLCAweDUxMjgwOWMyLCAweDAwMDA4MDAwLAotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NWJiNWZmMDAsIDB4ZDU1NDc0MGQsIDB4NzliZmZmOWQsIDB4YmU0Y2RlZjMsCi0JMHgyMTI2NGNkZiwgMHgwMTJmMDg0MiwgMHgxYzQyNDI0MiwgMHg2MWYwODA2MiwgMHhjNDQ0M2UxZCwgMHg2MDJhMDMyMCwKLQkweDQzZTE5NmViLCAweDlhMWFmOTA5LCAweDdhYjc2ZWJhLCAweDI5MDQ5MzBlLCAweGI2OTNkYjAyLCAweGI2NTRlNTZlLAotCTB4MjhiYjU2MGUsIDB4ODI2MDlkODksIDB4MDRlYzI2ODEsIDB4NmViNTAzMTQsIDB4NWI2MDQwNDAsIDB4NmE0NDU0NzcsCi0JMHhiYjhkMzI0MywgMHhiMjllZWM1NCwgMHhmN2JkZmZmZiwgMHg2MGMzMzMyNSwgMHgzOTJkZDllOSwgMHhkZGY3MzczOSwKLQkweDdmZmRlZWZiLCAweGY3NWZmZWZjLCAweDU5NWMwMDNlLCAweGM5YTAwMzkyLCAweGU3YjczYWE2LCAweDAwMWFhODAyLAotCTB4NmRiY2RjNjQsIDB4YTA1NTYwNTIsIDB4MzI0ZTQwMTgsIDB4NjMyNDBhNmQsIDB4ZDRkYTY2OWIsIDB4NjY4YTZkODYsCi0JMHg5YWE5ZTM2MiwgMHg3MDgwNWFjZSwgMHg2YzE0YjJjZSwgMHhmMmNlNzBiNCwgMHhjNmVmYmMyOSwgMHhjMzRiOTY1NiwKLQkweGZkZWMzMmMxLCAweDQ1ZjM4YTVkLCAweGUxZDkwYTljLCAweGZlYzQ5ZTBmLCAweDM5MTQ4ZmZiLCAweDQyZmY2M2I3LAotCTB4YTQwOTZhNjIsIDB4ZTdmMmFjMDEsIDB4M2ZiMDg1MzUsIDB4MWIxZmUyZDUsIDB4NjljZWJhNDQsIDB4MWE2ZDJjOWUsCi0JMHhmZTJkZDdjMCwgMHg3YmUzMjA4OSwgMHg2ODUyOWJjOSwgMHhmMDA1Yzk3ZCwgMHhiYWI2M2IxZCwgMHgyMjk0OGYwNiwKLQkweGQ1ZDAyZTdkLCAweDYwYTMwMGYxLCAweDA4YTk3NmI3LCAweGViODJhOTAwLCAweDA1ZjZmMWU5LCAweDU4MDc0YzJiLAotCTB4OGVmZjEzMzksIDB4ZjE5MjE3ZDgsIDB4NTNkMjI2NzksIDB4NzQxYjlmY2UsIDB4YjQwNWZlZTAsIDB4MzBjZjQxYmYsCi0JMHg1ZGFkOTAxZCwgMHhlZmY2MDI0YSwgMHg5NmVmZjYzYSwgMHg4ZmI4MTg1MSwgMHhkZjkzMTNmNywgMHhiZjhiNjEyMiwKLQkweGEyZmQ3ZmQ0LCAweGJmYzNlZmM5LCAweGRiOWY2ODA3LCAweDc5MmJiNjY5LCAweGM0MzY3NGNkLCAweGViZjk5OWY2LAotCTB4ZWIxMTk5NDYsIDB4M2U3YzFmYzMsIDB4NjUwOTJmOGQsIDB4OTAxNWQ1OWQsIDB4ZjMzZWZkOGEsIDB4ZDhhYjIxNDcsCi0JMHhmNDY3N2YwNywgMHhlMzI3ZTY3YSwgMHg0NWNlMzM3YiwgMHg4MTc1YzczZiwgMHhkNjJkOWZlOCwgMHgwY2JmMDcyZCwKLQkweGExOTk4ZjI4LCAweDYxYjM3OWU4LCAweDVjNjQxZmU3LCAweGU4ZTVmNjc3LCAweDE0YjQwYmU3LCAweDM0NjdlMzA3LAotCTB4ZjhjZWJlOGMsIDB4YmQ3MGFhNDMsIDB4NmY1ZjJiN2EsIDB4MzRiYzlkZTgsIDB4Y2Q5YmZkNDAsIDB4YmI5NDUzMjgsCi0JMHg4ZTUwY2JhYSwgMHg3N2ZhNzVlZCwgMHg2NmZiNDAxNywgMHg3MDBmOTc5YywgMHhiNTk1YjM2MCwgMHhlYjZiNGU1MywKLQkweGNkY2VmZTg4LCAweGUwMTUyMDA4LCAweGQ2MmNlNmQwLCAweDk4YzY5YWFhLCAweDU2MWE3MjljLCAweDNlYzQ0OTQzLAotCTB4OTBjN2RmMWEsIDB4MmUzOWQwZTMsIDB4ODJhMWE5YzcsIDB4NWY2MGU2ZTcsIDB4YWZjMDU1ZTksIDB4NGIzOWYwOGYsCi0JMHhiODA4NjljOCwgMHg5NTM0ODc5YywgMHhmMWZhNzljOSwgMHhjNDExZGQ5ZiwgMHgxMzJjOTY0NywgMHgyNWZjMTFlOCwKLQkweDE3YTA4OWU4LCAweDBhOTNmNDhjLCAweGQ5N2Q1MWVjLCAweGQ1Y2Y4ZmQwLCAweGRmZWI4NTk3LCAweDcxNGZkNjIxLAotCTB4MDc1YThlOGUsIDB4YTExM2Y4ZmMsIDB4ODVmNjQzYmYsIDB4NzFmMjEyYmQsIDB4MDU2NTcyNDcsIDB4OWU1NjkzZjEsCi0JMHhkOTZlYjUxNywgMHg0MjdhYjEzYiwgMHhkM2NiZTFjMSwgMHgyMDlmYzg5MCwgMHhjNjlmYTY5ZSwgMHgzM2Y5ODhmMSwKLQkweDAwOTIzZTFjLCAweGZhMjZmZjk0LCAweDRjYjM0MDM5LCAweDYyZWIzNDc2LCAweDZmMjdmM2Y0LCAweGM5OWJiN2E2LAotCTB4OWI5ZTRhMTMsIDB4ZTVlYmY4ZTMsIDB4Y2I0NTczNjksIDB4YjQ1MTdkMzMsIDB4ZDFkYzMzM2MsIDB4MmFiNTFjZjIsCi0JMHg3OWI3NmU1YSwgMHhhNjMyZTVhMiwgMHhmOGQ0NzI3MiwgMHg1MWE1NGRkOCwgMHg5OWRmNzFmZCwgMHhkNzNmMzUxNSwKLQkweDNmYWEyZjM3LCAweGE4ZTJkYjdlLCAweDk3OWIxM2Y5LCAweGVkMjdmNTQ3LCAweGZjZDQ3YWZhLCAweGE4ZGFmZjQyLAotCTB4NTViZGEyZjEsIDB4MjlmZmE0YjcsIDB4NzlhOGZhODEsIDB4NTdkMzVlMjQsIDB4Y2VmNmZmZTgsIDB4ZjNlZDQ2ZWYsCi0JMHgyZmZmZDZiNywgMHg5YzdmZjQ2MywgMHhkMjM0ZDk3YywgMHhmNDQ3ZmExNywgMHhmMjRhODM4YiwgMHhkOTlmMDkzNiwKLQkweDkzZjI1NjkwLCAweGFmYjdhZWI2LCAweGJlOTc2ODQ5LCAweGU4OGZiYTc5LCAweDY3MDYyZGYwLCAweDJiM2Q4ZTEzLAotCTB4NmJmMjI1YmIsIDB4MjZkNDUwNjMsIDB4NGM1YjFiZjQsIDB4ZmVmZTQ5NTAsIDB4NmFkMzI2ZmIsIDB4OWQ4OGYyNzcsCi0JMHhiNjI0ZDcxZiwgMHg5ODJhZjNmZSwgMHhmM2QxZWMxMywgMHhjYzhmMTc5NiwgMHgxNGQzZGEzMywgMHhmODhkYTYxZiwKLQkweGY0NWJhZmQ5LCAweDNkZjIxMGE2LCAweDE0N2VlNjU1LCAweGYyNjllYmZkLCAweGE3YTQxN2FmLCAweDhhOTk3MjE0LAotCTB4OGE3OGE3YzMsIDB4ZWQ1OWJjNTksIDB4MGUwNmQ2YzYsIDB4YjRkYjFlYTksIDB4NWZhZWJmMTEsIDB4NTA1Y2U1NDcsCi0JMHg5OGZmMmZmZCwgMHgzYjIxM2ZlOCwgMHhkZmZhNDY1ZiwgMHg4NmRjODEyNSwgMHg4OWJiNTZiZiwgMHhjMzYxZjNlYywKLQkweDlhN2FlOTZmLCAweDIxYWU4MjJkLCAweDA0OGZhNWU0LCAweGQwZDNkNjZjLCAweGZhZDBjM2U3LCAweDlkYWZjY2YxLAotCTB4NDgwNWE2ZmYsIDB4Y2U1NWU3ZmYsIDB4YjJmZjMxOGYsIDB4MDk5ZjZiZjAsIDB4ZmU0ZmQ2YmYsIDB4YmM2NDdmMmMsCi0JMHg1MjhmY2Y3MiwgMHg3Y2U3NWM3NCwgMHg0NDBhMmMwMSwgMHhlNDJjMjljOCwgMHg1OGQwNjYwNCwgMHg3NWNkOTliYywKLQkweDg3NmFhMTc2LCAweGJmYWUxOGYyLCAweDQ0ZDg3ZGYyLCAweDEzZmNhY2ZiLCAweGVmN2M4YTZjLCAweGRlYzI5YWNmLAotCTB4YjMyNmIzZmIsIDB4NTkzNjA1NzYsIDB4MTgxNWU3MjgsIDB4YWNhNTZjY2IsIDB4NWRiMDk0MWYsIDB4ZTQwYTBiZGEsCi0JMHhlNGYzMmMwMSwgMHhmNzk0MjQyYSwgMHgwM2E2NzljMCwgMHhhMjkyYjRiNywgMHhjMTA3YmRmMSwgMHgzZmZmOTBhZCwKLQkweDE0ZGFjZGZiLCAweGNlYmMzNzlhLCAweDRmZGQ0ZmRiLCAweDhhODE1ZDM4LCAweDdkZmY2MWI2LCAweDQ0Yzk0ZjliLAotCTB4NTNiZTEwN2YsIDB4ZjcxMWYxNjIsIDB4Zjc3M2QyYjEsIDB4YTY5ZTYzMjMsIDB4M2MxNjczMzgsIDB4YmVhMGNlNTcsCi0JMHhhZDkzODM5NiwgMHg2MDBiYWM2NywgMHgxNzMzZjI4ZiwgMHhlM2E2MDg1NCwgMHgxNjBiYmUzYSwgMHg0NzQ4Y2JmZiwKLQkweDQ1NjFiMjNkLCAweDhmNzdkNGZkLCAweGIwNjQ3ZTYyLCAweDNmYWQ4ZmVhLCAweGM3YWI3OWM2LCAweDljNTJjNjg0LAotCTB4YTdmNTUwYmUsIDB4YzNmM2QyN2MsIDB4MjBhZmQwYmIsIDB4M2QxMjRiNmYsIDB4MTE4Y2I2MTksIDB4ZmY1ZjljMzksCi0JMHg2MzhkMGE3OSwgMHg4NjdhNjViYywgMHhjYmU3MTY3ZCwgMHhkOGZiN2U0YywgMHg3MWJjYzY3YiwgMHg2ZGEzYjliNiwKLQkweDVjNzJlNzI0LCAweGY4OGRlNjY0LCAweGIwMGE1YTMzLCAweGE5NTQ5Zjk0LCAweDE3N2U5ZmZlLCAweDBhMTM4NGU5LAotCTB4Y2JjMGNmNWIsIDB4ZmE5NzgxNDYsIDB4MjQ1NDdkNWMsIDB4ODY1M2VhNWUsIDB4ZjA4YTMyZjEsIDB4Y2NiMmZmNTIsCi0JMHgzYmJlYTZlYywgMHg5NzI4MGZjMSwgMHhkZTc3MDIzMywgMHhmYjVlZDc3ZCwgMHg5ZTFkNGVhZSwgMHhiODhjN2NlZiwKLQkweDlmMjcxMWQxLCAweDhjNzQ2ZTIwLCAweDZlMjI5ZjdiLCAweGQ5MGRmZmE4LCAweGZkZTg5NTNkLCAweGE5YzdlNzc4LAotCTB4YzFmNzVhMWUsIDB4NTA3YmEzNWIsIDB4MDZmZDlmMGEsIDB4YzczOGY3YzksIDB4OWQwYzEwZmIsIDB4YmRiYTdlNjUsCi0JMHgxZDIxZjc1MCwgMHgzYjVjMGZmMywgMHg1ZDVjZjk0YiwgMHg2MGI3NDViYiwgMHg3NDJkOGFmZiwgMHg3ZjlhNzllYywKLQkweDVmOWEwMjUwLCAweDRlNjA0YzE3LCAweGYyNWRhZWFiLCAweDU1NzhlMDI3LCAweDMxZDZkYjY3LCAweDU5NmFhZmQ4LAotCTB4YzM2MTQ2NTYsIDB4YmJjMTBhOWIsIDB4ZTRiZjdjNjgsIDB4NGJmMWM0NmYsIDB4MTcyNTgzOWIsIDB4ODdiYWUwMjcsCi0JMHg3NWEyNWRhZSwgMHg3NWYxMGUwNywgMHhlNjBlNmYyZiwgMHhiMDMwMGU1MywgMHhiNDA3Y2Q3ZiwgMHgwNWJiNGQ1ZSwKLQkweGIxYmYyODEyLCAweGI0MzFkNTA1LCAweGEwMTQ5YjVmLCAweDNmMDMyYWZkLCAweGNhZmQ2OTUwLCAweGEwNGQ5Njk3LAotCTB4NmY3YWE2ZjQsIDB4MTEwOWM0Y2YsIDB4YzBlMDZiN2UsIDB4Mzk0NzU1NDksIDB4NjBmZmI2NTUsIDB4YzY1Nzk4YTEsCi0JMHhlMTlmOTdjMywgMHhhMzdmZTBkNywgMHgxY2RmMjdiZiwgMHg2ZmYxM2ZlOSwgMHhmMDkzZDkxZiwgMHhmMjE2YmZiZiwKLQkweGJlMzVkNTVmLCAweDdlODljNDg5LCAweDg5NzllM2E1LCAweDg0ZDU5NWY5LCAweDViODcwYmE3LCAweGRhNGJmYjdmLAotCTB4NGViZmUwZWYsIDB4ZDk0MGRjMjQsIDB4ZGMxYmM5YWQsIDB4ZWIxNzE2M2UsIDB4Zjk3MDNlYzQsIDB4NDI5ZGQ1M2QsCi0JMHg0NTJlNTNmMiwgMHhmZjNlNzNmYiwgMHg0MzVkY2Q5MCwgMHgyYTk4NjFmYiwgMHhjNDg0NDRkOCwgMHhkMGRiODdlNCwKLQkweDkzZTQ4MDFlLCAweDQzZWNjODliLCAweDZiYWIwZTRlLCAweGQxZWY5ZTkwLCAweGFjYzdhNDA0LCAweGQ4YjVkNTg1LAotCTB4ZjMxNzY2ZGYsIDB4OTdmZWFjZjIsIDB4YWZhNDZmNzMsIDB4ZjI2NjY2YzMsIDB4Mjc4MWU2YjEsIDB4ZWQxODZmZDIsCi0JMHgzYTQ3MWE3ZSwgMHhhNjdkZTY4ZSwgMHg0ZWJjNzA4NiwgMHg2ZTEyYWNiZiwgMHg1M2JmODJlYiwgMHhkYmRmYTQ3NSwKLQkweDU3NDJlMWY5LCAweDM2MDJmNzljLCAweDkzMTRhZmVlLCAweGQ5NGY3MmJiLCAweDRiZDQ3ZDg4LCAweGYwODkyMThkLAotCTB4Y2U5MjcwN2UsIDB4MmY5YjU4ZjIsIDB4NDhlYmU4YzQsIDB4Zjk4Zjg5ZDAsIDB4M2QzNzdlMDcsIDB4ZWZkZWIxMTQsCi0JMHgyNjEzMWYxMSwgMHg3ZWViZjQ4YywgMHg0Mjg5NjFmMSwgMHhjM2ZkN2I3MiwgMHhjOGNhNzMxMiwgMHhlNGNjODFmMywKLQkweDNhNWM3ZjRhLCAweDNhNzhiYzc4LCAweGY2OTk3ZGQ1LCAweGQxNjAzZGFkLCAweDEzYmUxOTFiLCAweDc3YzI0MTljLAotCTB4M2QxMzkyNTcsIDB4NmQ1YmUxMzUsIDB4ZjdjNDhiMmMsIDB4YmFlZThjYzMsIDB4NDg4OWQ5MmUsIDB4NjVjZWJhODcsCi0JMHgzZjM2MDY5ZSwgMHg5MDZhNDljNSwgMHgwOGZhZTczYiwgMHg2NmU2YjI2NywgMHhjMWZmODQ3OCwgMHhhNTQ3MTBmZCwKLQkweGEzZmEzN2Y0LCAweGNmY2YzNjk1LCAweGU0ZTY3ZjQ5LCAweGJjNDhjNGUwLCAweDM5NDI5OWQ1LCAweGNmZTkxMjhkLAotCTB4YzIzNzNjZDMsIDB4OWY2NGU0ZmUsIDB4NzkyMGU4ZGUsIDB4N2Q2NTNiYTYsIDB4ODk4YTdmNDQsIDB4MGY0MDY1ZWIsCi0JMHg4ZTI5ZGFhNSwgMHg1MGY1YzY2ZCwgMHhkZmMxMDMxZSwgMHhiN2ZjOTJhNSwgMHg5MmIzYWU3NiwgMHhhNmM3N2ZkZCwKLQkweDU1NTkzZDMxLCAweGZmNjFhZTlmLCAweGJlNDdkNGRiLCAweDRhZWVhOWI3LCAweDk5NmRhYmIyLCAweDBkNzY0MDg5LAotCTB4ZWY4Njc2ZDksIDB4MDFkNzg0YmYsIDB4YmQ1NDU3YjIsIDB4YjhhMDFlMDIsIDB4MzZmMDIwM2EsIDB4ZmY5ODE2MzAsCi0JMHg3MDhmZGNhNSwgMHgzN2JlNTMyNiwgMHhhM2M4Y2M5ZSwgMHg2NzZmM2NkMSwgMHgwOGM1Yzk0ZiwgMHhhZTBlMDc3ZSwKLQkweDRhN2QxMjc0LCAweDMyMWY3ZjIyLCAweGY3NjM1ZTM5LCAweGMzODE0ZmZkLCAweDliNmI0ZGE3LCAweGUxYzQ0NmU3LAotCTB4MTViZjc5ZDgsIDB4MDBlNDM0NzgsIDB4YWIxNjVmNjYsIDB4OGNmMTMxMDcsIDB4ZGIzYWRmODcsIDB4MWZlNDMzYmMsCi0JMHgwYmJiYjY5ZiwgMHg4OTliMGZjOCwgMHhhZWEzYzIzMCwgMHhlNzAzYTVjNiwgMHhjZGU5MDdmZiwgMHhjODVjN2Y5OCwKLQkweDFhM2M1NTU1LCAweDIxNGRmNWM5LCAweDMzNzU0NTU3LCAweGViNjFhMzM5LCAweGZjYzNjNzY0LCAweGVkNzFhOWU1LAotCTB4ZGZjMTBiZWMsIDB4YmQ2OGRjYjYsIDB4MmFiYmNlYzcsIDB4YmU0YzUzZjgsIDB4ZTc0NGI1YWMsIDB4Y2RkOTk5NjEsCi0JMHhmYTY2MWVhMCwgMHgwNjBkZTYzNywgMHg3N2ZkNzFhZiwgMHg4YmJmN2U3ZCwgMHgwNTc3M2NlYywgMHhhZjY3ZTdjMywKLQkweDExY2E5NjE0LCAweGNkYjM4ZWViLCAweGZmZTIyZmZiLCAweDhhMGYwMzEzLCAweDBlZTg4YjJmLCAweGRlYjFmMGM1LAotCTB4Zjg5MmZlZTYsIDB4YzgzYmYyMzYsIDB4NGUxMmRjNzYsIDB4NGUwN2Q0NDAsIDB4M2ViMGVmMTEsIDB4YWJlMzMwMjgsCi0JMHgyNGU4OTA4MywgMHhmMjI2ZGVmZiwgMHgxOWI4MzM2MCwgMHhhOWMwOTI0ZSwgMHgwNWQ3N2FiMywgMHhmYzhkOWFiZiwKLQkweDYwOThmNTM1LCAweDliNTM3NjNiLCAweDgxMzljYTI0LCAweDljY2Q2MDhkLCAweDIyOGM5YjJhLCAweDUyYzU2NWMyLAotCTB4MGM4Yzg4YWYsIDB4ZjZlZDUzYzcsIDB4YmQyMGI3N2IsIDB4ZjMyN2MxMDcsIDB4ZmViYTM5YmEsIDB4OTJlNDk3MDUsCi0JMHgzN2RlZWIyMiwgMHhiZGQ3ZTJhYiwgMHg2NDRkM2RiYiwgMHhlZWE5N2ZkNywgMHhhZDM0MTk5ZCwgMHhmYWZlZDM1MSwKLQkweDFkODI3N2ZhLCAweDE4MjJlOGYzLCAweGRiMjdhM2NlLCAweGEwNTQ0Njc1LCAweDEwMmZlMzgwLCAweDdiMzNmNDRjLAotCTB4ZjA5ZjU0YzQsIDB4MWE3ZTRmZGIsIDB4OTIyYmY5ZTUsIDB4YTU1M2NlMjksIDB4MGRhYjAyODEsIDB4NzhlZWM0YTAsCi0JMHhkYTM2NWI2NiwgMHgzZmNlMDRkNywgMHhlZmU4OWJmNSwgMHgwYzY3OWU1ZSwgMHg0ZTZmZDNkNywgMHhmYTI3Nzk2NiwKLQkweDkzZDU5OTIxLCAweDQ2MjVhMDlhLCAweDFmOTg2NTZmLCAweGQ4OGQzYTQxLCAweGUwZjFlYWEzLCAweGM5NTMyZmIxLAotCTB4ZjVkYWI2ZWYsIDB4ODRiZDI3N2YsIDB4Zjk0MGNiOGYsIDB4YTQzOTgyNWIsIDB4ZDVkOGUyZGEsIDB4MzE2M2NhMDEsCi0JMHhjZWRjNzkwZiwgMHg5ZGFjNmJjZiwgMHhmYjhmY2I5MiwgMHg1MDE3NzU1YiwgMHhiNGQwNGY3YywgMHg3ZDg0NzJhOSwKLQkweDM2MjVkODE1LCAweDg1ZDhmNmFmLCAweGM3ZjMxNTFjLCAweDUyNzdhNjJiLCAweDlhZmQ3MThiLCAweDc0YTlmZDhlLAotCTB4ZmU3ZDUzYWMsIDB4ZWQ0YTc0ZDQsIDB4MGE5ZWNkOGIsIDB4NGNmYmNlM2IsIDB4YTU2ZjkzZGEsIDB4YmY5YjcwYmMsCi0JMHgwODEzZTQ4NCwgMHhiYzUxYTVlNiwgMHg5ZjA2NjI5ZCwgMHg3YTQ2ZjRiOSwgMHg1OTRhYmJiYywgMHhjYmI3NTU5MSwKLQkweDVkMjlkYWNlLCAweGJjYTA2Yzc3LCAweGZjZTQxYmQ0LCAweDBlMGExZWQyLCAweGViMDI3NjE1LCAweGQ5MzY3NDBmLAotCTB4YmZlZjNkNjksIDB4ZmYyNjhmNzUsIDB4NTYwMzJmYjQsIDB4ZjU3OGZmOTEsIDB4N2RmY2M5OGIsIDB4ZmU2OTk4MzMsCi0JMHhlMDRkYmIxYSwgMHhmM2EyNmZkYywgMHhkY2UyN2RhNywgMHgxMzBiZTA2YSwgMHgzZmVjNjc5YiwgMHhhY2FlNzNhNSwKLQkweDgzOGEwZTIxLCAweDBmYzg0N2NkLCAweDU4NTk3NDI0LCAweDEyZjA5NTFlLCAweDYxNzQ3OTcwLCAweDM4ZTc0NzdlLAotCTB4OGEwMWVmODcsIDB4NzAzNjgzNDMsIDB4OWFkZTM4NGEsIDB4NGY3OTY2MTgsIDB4YmZhMmRiYjgsIDB4OWFkYzkxMjgsCi0JMHg1NWJjZWM4MSwgMHgyMTRhZjVlNSwgMHhmMjdmNzIwMiwgMHhiZjYzNzNjOCwgMHhlOGU3YWU4NCwgMHhlMTcwODk4YywKLQkweDYwOTdiOGEyLCAweDkzM2I4NjZlLCAweGMyOWRlNTIzLCAweDczYjQ2ZWU4LCAweDA2MjZiNTNjLCAweDk3OTRjOTRkLAotCTB4OTE3ODA0NGYsIDB4Mjc0MjM1ZDEsIDB4M2EwZDdkYjAsIDB4NmY3Zjk5MGIsIDB4OWU5N2MzNTUsIDB4MzRiYTMwNzQsCi0JMHg3MDIxNDFjMiwgMHg5MjZiYTEzYSwgMHg0MTJkZmU0ZSwgMHgxMjNlMzE3MywgMHg5M2U5ZGQzNCwgMHg1YmNiYTQ2ZSwKLQkweGRhMTc4OTgyLCAweDYxMWJmN2NkLCAweGFlYzk4ZWQ4LCAweDdkMjM4OWJkLCAweDZiNDJkYTJiLCAweGY4MzVjNzFlLAotCTB4MjBiMzNlMTYsIDB4MGU0ZmEyM2IsIDB4ZmRlNDdjYTYsIDB4M2VmN2VjZTcsIDB4OWQ5YjI1YjMsIDB4NTQ2NGY5MTcsCi0JMHgyOWI2MTI3NSwgMHg2NzUzZTI3NiwgMHg3NGQ3YTI3YywgMHgzOTcyOTQ2NSwgMHg0OTRlNTEzOCwgMHgzYzNlM2U1NiwKLQkweDRjOWU3MTFmLCAweGNmM2U2NGZkLCAweDE2OTJkMTY5LCAweDAxN2IzMmU3LCAweDJmMjMxN2IyLCAweDVlMGE1YzdiLAotCTB4YjVlZDBiYmEsIDB4YjRlZTA3ZmYsIDB4ZGZhYmU0NjIsIDB4MTY4OWU0NzQsIDB4MzVmYmY3OWMsIDB4ZjYyMGZjODEsCi0JMHgxNzllYTk0ZiwgMHhmYzZmOWYwOSwgMHgyOThlZWQ2NiwgMHgxNTViNmZlNCwgMHg5ZGY5MDU2NywgMHgyYzg3ZWY5MCwKLQkweGQxNTU3ZGZmLCAweDFkZDg0N2I3LCAweDA5MzM4NzY0LCAweDc4ZmJiMWJmLCAweDkwZmUzN2NmLCAweDgzYzFkYmYyLAotCTB4YzlkNTZlOTIsIDB4ODg3Mzg2ZWYsIDB4NGZhZWJhZWUsIDB4ZGVlN2YyNTUsIDB4N2NiMjFmODMsIDB4ZTdiYTZlNzYsCi0JMHhhZmVhM2IzNSwgMHgzZTYxYjNiYywgMHgzNDI2NzVjOSwgMHgyZWJmOTEzNywgMHgyMDQxNzkxMiwgMHhhMTkzZmI4YiwKLQkweDM2MmZmOWQzLCAweGI0ZTFlODQ0LCAweDdiMDgzN2IwLCAweGVhN2M1MWM2LCAweDk4N2FmNjEyLCAweDNiNmM0ZWVhLAotCTB4NGYxZTFlN2EsIDB4YmE4ODc3ZWIsIDB4MDFhZjc4ZDgsIDB4YjkyMThjOGUsIDB4YWM5YmMyMzcsIDB4N2UzNzhlMWQsCi0JMHg1OWMyMjJmMywgMHg2YWViNTlkMSwgMHg3N2ZjYzQ1NywgMHg3YWJmM2NlZCwgMHhiZGYzY2VkNywgMHgzNzllZTlmNSwKLQkweDNkZDUzZTQ5LCAweGM0YTlhOTFmLCAweDBlNDBjNWU3LCAweGFjMDE5M2Q1LCAweDdlMzhiNThmLCAweDYzN2VkODY0LAotCTB4MGU2YmM5ZWMsIDB4N2JkZjM0YWIsIDB4NDE1Zjk4MTksIDB4NDM0OTZmN2QsIDB4ZGIzYmVkZmQsIDB4M2UwZDc5MzksCi0JMHhhNDlkNDBlZiwgMHg5ZTcwOWU1MSwgMHg4YTFkODdkNywgMHg2ZmNkMGM3YiwgMHg4NGI1NzMzOCwgMHgyMjAxZDhmYywKLQkweGRhYjllOTAyLCAweGU0OGUzZDVkLCAweDk3OWZmODg2LCAweDA2ZDY3NjQ4LCAweDc2MTlhZmNjLCAweDhhNzY0YzVhLAotCTB4ZmUxMzE3ZWYsIDB4Yzg1ZmE4Y2IsIDB4ZGFhYjcyZmMsIDB4NjVkOTk4YjcsIDB4MmVjODA5ODcsIDB4MWVjY2ZmMTEsCi0JMHhjNTFhZmYxMCwgMHhlZDBkNjJlMywgMHg4OTNmYmQ4MSwgMHg5ZjZiNzlkOSwgMHg1OGYyYzVjOSwgMHg1OTEzZWJmNCwKLQkweGQ0MDNkZTdmLCAweGEwNWJlZDZmLCAweDIxMzczYjMxLCAweDVlYzk0YjllLCAweDNhZDg0NzgzLCAweGE0ODk4MDAxLAotCTB4OTFkYzA5M2EsIDB4ZjYwNTAzZTcsIDB4YzMzN2E2NTQsIDB4ZjYxNzRlNWYsIDB4ZDNkMDI4MWIsIDB4OTI0N2M4OWMsCi0JMHg0N2Q5NDcyYywgMHg3ZGU0OWM0NCwgMHgzZjVkNDcxMSwgMHg5ZTY3YzdmYSwgMHhmYjRmODM5ZCwgMHg0NGQwOWM0NCwKLQkweGZkYzczYzdjLCAweGFjNDViN2ZlLCAweGQ2NmI3ZmFhLCAweGM3Y2ExNmQyLCAweGYxYjMyZDdmLCAweDIyN2NlMmMzLAotCTB4NDQ3MjcwMjgsIDB4ZGM1MDRmOWMsIDB4NmYzZjUxZDAsIDB4NjlkNzczOGEsIDB4MWZhMTc3ZDgsIDB4MzRkYWVlOWQsCi0JMHhmMmFhNzI5ZiwgMHhhOTQ3Y2Q0NSwgMHhjYzBlZTU5ZCwgMHhjZTcxNTRhNywgMHgwYWEzYmVhYSwgMHhjMjIyZjMzNywKLQkweDdiOTFmYjVmLCAweGY3ZTRjYzhiLCAweGFlZmFmM2NlLCAweDA3ZjBjYmZkLCAweDllMWNhMmFmLCAweDhmZjI4YzM4LAotCTB4MWQ5MGE3MTMsIDB4YWZjYzNmODYsIDB4OGRkNjQwYzYsIDB4ZTE5MjgzZTMsIDB4NGJkZTc2NDcsIDB4OTc2ODFjNzgsCi0JMHg0ODQ4ZmE0NywgMHhmYTliMDIxZCwgMHg5ZmRiZTkxOSwgMHg5ZmRmNjFmMSwgMHg0NzRhY2FlZSwgMHg3ODcxMWU3OSwKLQkweDllNTFkMmIyLCAweGNjYmYyNzgzLCAweDM4ZWNiMzI0LCAweDliYWIxMWZkLCAweDExNTc1NWRiLCAweDBmM2RhN2UxLAotCTB4MzgzOGNkNGIsIDB4NzNmM2E3MzUsIDB4ZjQ0YjMyOTQsIDB4Y2VkMThhZjksIDB4MzA3MWU3NGUsIDB4MjQzYjA3ZGYsCi0JMHg5YWNiMTc1NiwgMHg3NmU2ZWE5ZiwgMHhmZTYyYTVkOSwgMHgyYjdjMTk3MywgMHgxMWJmOTM2NiwgMHg4MjhmODFlNywKLQkweDFmYzJlN2Y4LCAweGEyNjNjZmQ0LCAweDJiZTUyOGZiLCAweDdiMWViNzE4LCAweGFmMzk4OTU2LCAweDNjMjI2NGRiLAotCTB4ZTA5MmU4NmQsIDB4ZTU3YmM4MjcsIDB4MTc3MWQ4ZWUsIDB4YzQ2YTViY2IsIDB4ZjczYjFiM2EsIDB4ZmE4MzFiMWMsCi0JMHg3YTI5N2FhYywgMHgyYmU1MGQ1ZSwgMHhjMDNjOWNlYywgMHgxNjlhY2ZlYSwgMHg0OTlmM2EyNSwgMHg3OGNiNzkxNywKLQkweDBiNzk0ZjE4LCAweDA3Zjk4OWUyLCAweDE2YmQwY2M1LCAweDg3NDVlZmM0LCAweDZiNGM5MGE3LCAweDA5Y2I4OTlmLAotCTB4Y2JiMzJhZmQsIDB4YjRiZjkxNDIsIDB4MjhmZWUzY2UsIDB4Y2NmYzA1N2MsIDB4OGUwNmY2NmUsIDB4YjNkZDIyYTYsCi0JMHhiNDlkNzI1YSwgMHgxZjMzMmNjNywgMHhjYjk5ZDU5ZiwgMHhmZDk4MGNlMiwgMHg0NDU0MzJmMiwgMHg5MGIzY2JiOSwKLQkweGQ3M2VkM2U1LCAweDQ3OTQyY2U5LCAweGEwOTNmMGE1LCAweDhkYWVmM2YxLCAweDkxNGFhZjgyLCAweDQ3ZjQ2ZGNmLAotCTB4ZmMxMzNkZDMsIDB4ODZjZmI0NGQsIDB4YTgzMzkyYmQsIDB4MTI4MGY5ZDMsIDB4OGFmM2FmMzcsIDB4OWQ3NjZhNzUsCi0JMHg3YmM3NDYzYywgMHg3OWU4ODFiNSwgMHg2ZjFmMjE1ZSwgMHhmZGYzZjQ2NywgMHhkNTgxMzZjMCwgMHgzNDdjZTJlOSwKLQkweGY5ZDg3MjA3LCAweGQ1YWRlZjc4LCAweDc4NTdiZjUzLCAweGFjNGE3MTdlLCAweDE2NmY4YzYzLCAweGYyNDNhOWI4LAotCTB4N2UzNWJmNDgsIDB4YTliODRmZDksIDB4M2NhOTdjOTQsIDB4MzVlNDg1YmYsIDB4MDMzYWY3NDgsIDB4YTBmZTNhMmYsCi0JMHhmOTBiZDYzYywgMHg2MTc4MTNhYywgMHhiNWZiZTE3YywgMHhkZDNmMjViYiwgMHgxOWRmYWQyYiwgMHg4MWEzZmY0ZCwKLQkweDBmMDkwYjM1LCAweDZjYWFiOGIxLCAweDViN2U1ODUxLCAweGNhNTQ5YjA1LCAweDU1NzE2MzZmLCAweDY2OTc4YzM1LAotCTB4MmM1OGUyOTUsIDB4ZDIzY2VhOWUsIDB4NzllNmU4NGQsIDB4ZWU5NWZmZjksIDB4Y2VjODI1NmEsIDB4NTlmZmFhN2QsCi0JMHhmZTg4ZmE3MiwgMHg3NGE5NmZmNiwgMHg3ZGEzNzhmZSwgMHgxOTU2ZmQ3MCwgMHhmZDdjMTEzOCwgMHg2ZjNjZmNiNSwKLQkweDRjMzI3ZmUwLCAweDk0NWRmYTY2LCAweDUwNzU4YjdlLCAweGE2ZGQzZTc0LCAweDMyMThmYjcyLCAweDAzNjJmM2YzLAotCTB4MmZlZmIxM2YsIDB4M2RmOGY5MTQsIDB4NTdiNTgwYmIsIDB4YTU0ZjNmM2EsIDB4YmVjMWRmZjMsIDB4YWQ2MDU0YTEsCi0JMHgzZmM1MTE2OSwgMHhmMDg4NGZlYSwgMHg3OWQyZmIzYiwgMHhlYjM1Yjg5ZCwgMHhiZTUzZWZlMywgMHhlMjliNGY3ZSwKLQkweDZhMGU0Y2M0LCAweDhhNmUyYWM2LCAweGRmNjMzNWQzLCAweDExMTA5Y2NhLCAweDc5ZDJkYTU3LCAweGRiNGY3OWZkLAotCTB4NzQwOThkYTMsIDB4ZTQ4YWYwY2UsIDB4ZWMxYmYzMjQsIDB4ZDQyM2ZiZmEsIDB4Y2U0OGI1ZjcsIDB4YjFmZWY4ODksCi0JMHg2Nzc3YTFiZSwgMHg5MmIyM2U5MywgMHhkZTdhZDNhNiwgMHg1YThiYmJlZSwgMHhjNWVjN2ZiMSwgMHg3NTkxOWMzYiwKLQkweGU3M2IzMWU1LCAweDBhYjE5ZWVmLCAweGEzZmQ5YjhiLCAweDQxNTY3ZTkzLCAweDNkYWU4MGU3LCAweDBmZmI4ZWNjLAotCTB4OWQ5MmFlYmQsIDB4OTA0YWI2MGYsIDB4Y2IxZDFiODUsIDB4OGY5YWZhM2EsIDB4MjcwMzljZWEsIDB4ZTdjNjRhNTUsCi0JMHg0MzU0OWZiNywgMHg1YzBmOTE1ZiwgMHhjODJiNzJjMSwgMHg1NTliNDljZSwgMHgxZGRjNmJhYSwgMHhjYTIxYTg5ZiwKLQkweDkwZmE1ZThmLCAweDc1NTUzZjlkLCAweDU0OGZjYzRhLCAweDNhZmQ5NmVkLCAweGZiYjQ3OWZlLCAweDU0NzA5NTBkLAotCTB4YThjMTIyZDcsIDB4ODU3MWM4ZGMsIDB4YTNiZjkzOGQsIDB4ZGMyZGE3ZmUsIDB4NWNmODFhN2YsIDB4ZTA2OGYwMmIsCi0JMHg1YWViYzBkMywgMHg2ZGQ2NjdlMSwgMHg2M2UzYzY4YiwgMHgxYTNhZGFlMCwgMHg2NWI0N2ZkZiwgMHhjZDc5NGE4ZCwKLQkweGZkZjFjZGEzLCAweDM2YWZlMThjLCAweGZlODhmZDUwLCAweGU4YWVjMzdmLCAweDcxODcxYjc5LCAweDM4N2U2M2U4LAotCTB4MWJmNTlmZDYsIDB4NDI4NDJjMzgsIDB4NzA1MGUxYzIsIDB4ZTIzMzM4ZWQsIDB4YWFjOWVhZmUsIDB4NWVlNzEwNzEsCi0JMHhiNzExMWRlNCwgMHgzMzc5Yjg4ZCwgMHg3ZTc0MGViOSwgMHhmM2JjNTJhZSwgMHg2ZWFjMmI2NiwgMHhiN2ZmNjZmMCwKLQkweGFiOTM4OTFhLCAweGJiMGIyNzAyLCAweDUzZjRjMGZlLCAweDgwYjNkNWQxLCAweDllMDI1YmY2LCAweDkyZWY5MjFhLAotCTB4ZjI4ZDI0YWUsIDB4YjcxMDhhZTAsIDB4MTY1ZGM1ZGIsIDB4ZmEyMjVmYmYsIDB4MmRjZTJjNGMsIDB4ZDIxNmMwODEsCi0JMHgwYjYxZTBmZiwgMHgyNDNjNzczZiwgMHg4NDA4N2NiMSwgMHhlNDIwZGIxZiwgMHg3N2M4NDFiZCwgMHg2MzU5ZDYwMywKLQkweGU2MmYyOTRhLCAweDgyYzZmNDc1LCAweGE1MjhjNzNkLCAweDZiY2YxM2FmLCAweDI1NGQxZjhlLCAweGVlMDYyZjM5LAotCTB4YjgwNzE2NjcsIDB4NjVmNDMxOWYsIDB4ZTMxYjg5YzQsIDB4YTQ5YmY4NjEsIDB4MGIyZWVhZWYsIDB4ZjcwOGY3ZDAsCi0JMHg1ZjczM2YwOSwgMHhlOTE5ZmEwYiwgMHhiYzFmYmI0NiwgMHhjNWUxODkyZCwgMHg4ZGU5YzFkNywgMHhlZDc1OGI4ZCwKLQkweDBlNGRmM2QxLCAweDg5MGU1ZjllLCAweDExY2YzNmJjLCAweDMwOGFhZmFkLCAweDdhZTMxNTI0LCAweGU5ZDk3NThiLAotCTB4OTlmNTZmNjcsIDB4MTJkZWZmNjksIDB4ZjVkM2RkODksIDB4M2NkM2UzZWEsIDB4OWMzOGY0NzEsIDB4ZGQ3YzhiNTcsCi0JMHhmM2E1MmZlOCwgMHhkMDFmOWMyZCwgMHhlYjIzOTM5YSwgMHg5ZTBlOWRmMSwgMHg5NGNkNTc3ZiwgMHg4OGZmMjQ3ZCwKLQkweDY5Njk2NWZhLCAweDY1ZmFkYzZlLCAweGJmZTcwM2E2LCAweGU3NmViZDlkLCAweGM1ZmFjOGQ0LCAweDcwOWYyN2I1LAotCTB4MWZhY2JkZjgsIDB4N2Y5Mjk0NTUsIDB4NjRmZWUxNjgsIDB4NGRkNzFjYTAsIDB4NTgxYzdjYTMsIDB4YjE2ZGViN2UsCi0JMHhmMGNlYTlmOCwgMHhlZjI4OGUyMiwgMHg0MjcwODdiYSwgMHhkZDI1ZDlmNiwgMHhmY2MxMzg0ZCwgMHhjZDEyNmVmZiwKLQkweDQzN2FiYTMyLCAweDYyNzU5N2ZlLCAweDk3ZTVjNjNjLCAweGMzMDNmODJkLCAweDljMDlmMWRkLCAweGE4ZGI5NDZmLAotCTB4NTE4MGY1NzgsIDB4YzE3ZGQ0MDcsIDB4NzllMzRkZjMsIDB4ZWFjNDM5OWQsIDB4ODkyZWJhODEsIDB4YzhmZGI2ZTEsCi0JMHhhNDVjOWNiNSwgMHg4ZmZiYjA3NywgMHhmZGIwNmIzOSwgMHhhMzhmMDcwNywgMHgxZjAyZjNlZCwgMHg1NzIwNzdkMSwKLQkweGYzNzFhZDViLCAweDJkYmY2MWNhLCAweDUyNzY2MTZkLCAweDU5MzI4NGE3LCAweGYzMTA3MWRlLCAweDNmNTgxOWJiLAotCTB4ZDU4Y2ZhOWMsIDB4MTI0N2VkMGYsIDB4ZjZiOWQzNTYsIDB4MzhjZjVhYzAsIDB4ZDRmNDJiZWQsIDB4M2YyYzhkMDAsCi0JMHhhYzJkODQ2ZCwgMHgzMjI1ZmNhNSwgMHhmMWEwZGI5ZiwgMHgxMzFlNGFlZiwgMHg0ZmZhOGVmMSwgMHhjMzFmYWUyMSwKLQkweDhkMmI1ZmI5LCAweDViN2MxN2U3LCAweGZhMzc0YjY3LCAweGQ0YWZjMzAzLCAweDE3NTdiYzBhLCAweDI5NGFkOWVmLAotCTB4NTM5ZTZjNTcsIDB4MzMwOGVjMmIsIDB4NjJkZjE2NzgsIDB4MGU5ZDliZjMsIDB4OWMwOGJmOTEsIDB4NjQ0YTljMzYsCi0JMHg3MWUwZWFmOSwgMHg1ZDMzYTM1OSwgMHg0NzRmZWI5NCwgMHg3OTg2ZmU1MywgMHg3MzljNWU3YSwgMHgyZTA0Y2ZjYywKLQkweDY1ZmRjNWZiLCAweGU0Y2NiOTQzLCAweDViYzk5YTY2LCAweGY5NDIxZjIzLCAweDllMGNiYzMxLCAweGJlNTNmNjRjLAotCTB4OGRmODc0NWYsIDB4ZjU3ZmQyM2MsIDB4NjkxNzljNWUsIDB4MGYzZmE4NzcsIDB4Y2ZjN2FlZmIsIDB4NDgxYjVjNzAsCi0JMHhjNjMyNzc2MiwgMHg2ZmMzYmVmOCwgMHgzNTljMjY0YywgMHg5ZjMyZmE5YywgMHhiZTVhZTVlYiwgMHg3ZDM5YjhlYSwKLQkweGJjNDkyYjQ2LCAweGJjNDkzNThlLCAweDg3MzBlZDhlLCAweGYyN2VhOTUyLCAweGZlZGQ5NDFlLCAweDdhMWE3ZDA4LAotCTB4NDc2MTE3ZmUsIDB4ZmFmNWU2NjAsIDB4ZmFjZTg3MWUsIDB4MTcxYzVkMGQsIDB4ZTJkZTZlYTYsIDB4NzlmODJiZmUsCi0JMHhiZmY2YzI4ZCwgMHhlMjFlN2M2MSwgMHgxYWUyMmJlNSwgMHg3YmE4NWQxMCwgMHhiODY2MTJhZiwgMHgzMTM0OWVmMywKLQkweDg3MjdiYzdhLCAweGJiZTMyMzMyLCAweDQ1MWRkNjhmLCAweDA2YTFhZjdlLCAweDAyNDkxZjk4LCAweGM3ZThiM2YyLAotCTB4ZGVmNzU0N2MsIDB4ZTU4MTJlNzcsIDB4NzZmMmM3NGIsIDB4OTViZjMwNTQsIDB4YWRmOTAzMjcsIDB4NGQ1NTRlMjcsCi0JMHhmOTBmOGM4YSwgMHgyN2U3OTkwZSwgMHhjYTJjODcyNCwgMHhmYmU1OWU1NiwgMHhjMjM0MzkwYiwgMHg3M2VmNTE3MiwKLQkweGNlOTJiZjFjLCAweDUyNzU4MGU1LCAweDZjNzFkOTM3LCAweGY5YWI3NDlkLCAweDA1Yjc0MzZlLCAweDdiZDgxY2U4LAotCTB4MTNiZWMyYzEsIDB4ODFiZGRhYjksIDB4ODVmMGUxZDUsIDB4MTlmOTEyNjcsIDB4YTc2ZTc4ZjAsIDB4MWJjMzg5ZjYsCi0JMHhhYmYzZDEyNiwgMHhjZWRlMzc4NywgMHhjNmE1MmZjZSwgMHgyM2U1ZjhhOCwgMHgyZjI4YjJmYSwgMHhlM2E5OTMzYSwKLQkweDk5Zjc2ZDc4LCAweGMyYWQ2MDRjLCAweDY0N2VhN2U4LCAweGMxZDc3YWZjLCAweDRmNjBkN2UzLCAweDkwYTczYjAyLAotCTB4MDBlMzhmMjAsIDB4NWJhZDQ0MjYsIDB4Y2IxNmZlZDMsIDB4NjUzYTZhMjMsIDB4OGMxZTI0NTcsIDB4ZjA3MDNlZjcsCi0JMHhjMjIzZWFmYywgMHg5MDEzZjEwMSwgMHg2ZGNmNGM1YywgMHg3Y2U5YWRiYywgMHhhZDUzZDE5ZCwgMHgxYjFlOTgwNCwKLQkweGRlM2UxNDVhLCAweDJmY2M1YmNhLCAweGIwM2UxZDE5LCAweDM2ZmU4OGZiLCAweGY3ZTZiZjNhLCAweDAyYmNlYzFhLAotCTB4MThmYjMyNjcsIDB4NmZmNDI4MmEsIDB4ZThhZmZlYzcsIDB4Yzg3NWNhMTEsIDB4ZGNmZTAyNmYsIDB4OWI4M2VlYzIsCi0JMHgxMWE3Yzc3YSwgMHg1ZjdhODdlZSwgMHgxNzhiYzQ3NywgMHgwODNkZDBlZiwgMHg5NzIyN2E5MiwgMHhlM2IxMTdkNywKLQkweDM5ZjgzMjdiLCAweGRjZjM4OWMyLCAweGViOTg5ZDhmLCAweDlmY2YxNDk5LCAweGFmMWU2MGY5LCAweGVmMjEyNWI3LAotCTB4YmM1MTY1NzYsIDB4MzIxN2I0ZmIsIDB4ZGVjZjM5ZjgsIDB4ZTIwOWRmNmMsIDB4ODEyZGJmYTcsIDB4ZGJmNWE3ZGQsCi0JMHhmY2U4YjlmOCwgMHhlOWNkYzdmZCwgMHhhNWRiNzcxNCwgMHhhYTNmMTQ2OSwgMHg0MDVmZGUwYiwgMHgyZmQ4ZjhmNywKLQkweDc4MmI3ZTYzLCAweGQ2MWJkZDkwLCAweDc0MmRiNGI2LCAweDJlYTNhMWM1LCAweGM1ZjFmYjgzLCAweGM4ZmJmYzZhLAotCTB4N2JmOGM1ZGIsIDB4ZjUxMGNjZTAsIDB4ZWUxMzBlZDEsIDB4YTI4NTVlZjcsIDB4ODY3OTY3NmQsIDB4ZjQzNmY5MmIsCi0JMHhmZjBiZjdiZiwgMHg4NTEyYzBmYiwgMHg4MWVmMjVlNSwgMHgwNzdiZjBhZSwgMHg1NGIwM2Y3ZSwgMHg4NWZiZDFmOCwKLQkweDFlNWE1ZTVmLCAweGVkOTcyN2VkLCAweDdlZTlhNzg2LCAweGJlMmI5OTYwLCAweGFjNDg3ZTFmLCAweDZjNWMxY2JmLAotCTB4NDUxNjA3ZGQsIDB4ZTQ0ODdiY2YsIDB4YTNiOTBmNzcsIDB4MTBjYTRmOWYsIDB4ZjIxZjM3ZmUsIDB4MzAwNmZmYzksCi0JMHhlYmJlOTAxZSwgMHg1YzU4MTMwYiwgMHhjNGNhNmZiZCwgMHhiMWMxNzliOCwgMHhmZGVlYzBjZCwgMHhiZmZkYzU3YiwKLQkweGMyODZmN2ExLCAweDNhYmM1OWY3LCAweDM1ZmU3M2QxLCAweDA5ZGJmMzFiLCAweDVlZTcxNzkwLCAweDE5NWUyNDZiLAotCTB4ZDcyMGZlZjYsIDB4YTgyZmI4YjcsIDB4ODY4ZDM4ZDUsIDB4ZTU2MGFmZGUsIDB4NjUyZTc5MTMsIDB4OTBiMTdkZTgsCi0JMHgwNGRlZjU3ZiwgMHhhZjllZjIyZCwgMHhlYThiNjAzNiwgMHhkMzZmM2I3YiwgMHhmOWY4NDYyZSwgMHhmNDZmODE2YSwKLQkweDczYzhlNmZkLCAweDY3YjI5ZDhhLCAweDBiZGQwNjcxLCAweDNlNTlmYjU4LCAweGI4YjAxYzhkLCAweDA4ZTU3Yzg1LAotCTB4MTEyYzcyYmUsIDB4NmRjYWU4ZjEsIDB4NzdlMmUyNmIsIDB4OGZiYjNmODQsIDB4NmIwNzdkZmIsIDB4Y2MyZDBhN2IsCi0JMHg5MjAzNmFlZSwgMHg2YWEzZWU5ZiwgMHhhYzllYmM4MywgMHhjOWViYzA1ZCwgMHg1NzllNzZmYywgMHhmMjUwNzhhZSwKLQkweGJlZTYyNGJiLCAweDA2N2QxMzRlLCAweDc5NWE5NjdlLCAweDMyNzAzNmZjLCAweDFmODEyZjJjLCAweDdlNzhhNzFhLAotCTB4YjFlNzg4YmYsIDB4N2QwNDlhMzgsIDB4Nzc5Y2U5MGIsIDB4ZDI3MjRiYTUsIDB4NzhiMTcxZjcsIDB4ZWE2YWJlNWEsCi0JMHg2ZjllZTQ1YiwgMHg5YmM0MWY4NiwgMHgxNjMyN2U0MiwgMHhmMGNmM2Y0NywgMHgxYTYzMmI3YywgMHg0YzU3MGJhYiwKLQkweDE0NGY3NWMxLCAweGI4NDM5YTdlLCAweGRkODliYmE5LCAweGRiN2ExNGVjLCAweDQxM2JlYzliLCAweGJmNjZiZWYxLAotCTB4NWZkZjA3YjgsIDB4NzkyMjE5ZDgsIDB4ZjdjYjAyZjQsIDB4NWI3ZDZkZmEsIDB4Y2MxZTc5ZWIsIDB4ODM2YmMxZWUsCi0JMHhkZWZhNGUwOSwgMHhjOTJiYjZiNSwgMHhmNmZkNDA5OSwgMHg1NGM5YzQ4NiwgMHhjZWM5NzYxZiwgMHhiNDU3ZWMyNCwKLQkweGYyNDA1YzlmLCAweGRmZTMyOGFjLCAweDYxYTlkNDY1LCAweGI0YWU2Zjk2LCAweDVlOTJiNjc5LCAweGEyN2IzODk3LAotCTB4M2EwZGJmZWUsIDB4NThmMzg2NmYsIDB4MDkwMmY2YmYsIDB4ZTc2ZmUzMjcsIDB4ZTBjODVlNmYsIDB4ZjhmZWFlZjEsCi0JMHg3MTkzOTllNywgMHhjZjM2ZTlhYiwgMHhmMDdiYTI2ZSwgMHhiYTU1NTdhZCwgMHg3ZTRlZjMyNiwgMHg0ZWJhNjE2MywKLQkweDZmMzY3NGYzLCAweDE2Y2Y0YjQ5LCAweGU4MzU3ZTNhLCAweGVlMzQzYjBmLCAweDM2N2YxNTVmLCAweDZmOGIyM2NiLAotCTB4ODY5MDdiZWQsIDB4NTA5NzZmODMsIDB4NzNkMDNjZGUsIDB4YzA4ZDQ0YmMsIDB4ZmEzZDdmNzcsIDB4NmJmYTM4ZTcsCi0JMHg1YmIwOTMwMCwgMHg2OTI1NmIzMywgMHhiODZmYzhiOSwgMHg4ZmJiN2IxZCwgMHg0MWI5ZDI2NiwgMHgzMTZmZDkzZiwKLQkweDI5NTI2N2I1LCAweGJkYjZkNjJlLCAweGYyOTEzYTk3LCAweDFhZGUwZThjLCAweDkyZTk1ZGViLCAweDg3MzAzY2Q5LAotCTB4ODk0YTFmZjIsIDB4NDY2OWVmYTQsIDB4NWYwMDk1ZGYsIDB4ZmY5NDIwMDcsIDB4ZjFjODk0YzAsIDB4ZmI2ZmZmYTYsCi0JMHhhZTM4NDEzZiwgMHhlY2EyODZiNSwgMHg1NjEzOTBkZiwgMHg0NzU2M2VlZCwgMHg3YmIwYjYxZSwgMHg4OTI3YmE3NSwKLQkweDkyZWE5ZWZjLCAweDJjMGNmNWMwLCAweDY3NGVjODZlLCAweDc4ZjBiZGQyLCAweGYwY2NjNTRhLCAweDEwY2RmNTA4LAotCTB4OWVlOWRiMzQsIDB4ZWZmMzI4MzYsIDB4ZmY5OWIyY2MsIDB4OWZmNjJlOWUsIDB4ZDBmNjBlNjEsIDB4YzUzMzk2ZjcsCi0JMHhlODJjZTJiZCwgMHgwNmJlZjM2MywgMHg0MGJhZDY2MSwgMHgwZjNiNTMzMywgMHhiNzJkYWM5YywgMHgzMmEzZWYwNiwKLQkweDkwMTAzOGFmLCAweDRjYzFmZjQ5LCAweDk1OTJlZGIzLCAweGYxMDA3ZjdkLCAweDM3MjIzZGY0LCAweGU0MzI1YzMzLAotCTB4MTNmZGQzMjEsIDB4OTYyZjVlZmYsIDB4OGYwMmViOWYsIDB4ZWZkYzVjMzMsIDB4ZGY0MTJhNTAsIDB4ODA0Mzk2NTksCi0JMHgwOWRmNzdkZCwgMHgxZGVmNzEyMSwgMHg1OGQ5OGY5ZiwgMHhkNzdkZDFhNywgMHg4OTNiNjg5ZCwgMHgzNjdlMWU0YywKLQkweDIzZjEwZTdmLCAweDc0MjdlM2M3LCAweDJjMzM1MzFmLCAweDI5M2U4OGQwLCAweDllYmE2OTk4LCAweDBjN2NlYjc0LAotCTB4Mzc1YjAyNjYsIDB4ZTA3ODVkNzUsIDB4ZmI5MWIyYzksIDB4ZGJkNzY3NDIsIDB4NTBiYmU4ZTcsIDB4ZGY2MmU1YzksCi0JMHhjOWFkM2E4ZCwgMHgwNDk3NTY0MSwgMHg3ZWMzZmRjZCwgMHgzOTIwMGYyYywgMHg2NjYyNmQ3MywgMHhmNzc3YzhjNiwKLQkweDNkZjYwMWUwLCAweGY3NzdlYzQ1LCAweGNjZTVlZWM0LCAweDhjYjRlZjkxLCAweGZhZjczZmVmLCAweGM0MjZlYjk3LAotCTB4ZDU4NzJhYzcsIDB4NGEzZTIzMjksIDB4ZDA3NzM5YWQsIDB4Y2QzOWUwZjksIDB4OGQzOTk4OTMsIDB4OTk2ZDAzYmUsCi0JMHhmYjMxMTZjOCwgMHg1M2JjYjFhNywgMHg1YzA5MmFlMCwgMHhlNGJmYzRlNSwgMHgwN2ZiYmUzMiwgMHgzODlmMTc4NiwKLQkweDgyNjVmNmJmLCAweDkyNTJhZTlmLCAweDkxNTg3YzMwLCAweDQzODgxZGFlLCAweDVmYTE5ZGFiLCAweGUxNTllZmE3LAotCTB4ZTUzYWY5YTksIDB4NTY2ZDViYjcsIDB4MTY2ZmU1MjcsIDB4ODQ2OTM3YTIsIDB4ZmYyYjI2ZGUsIDB4N2VmOGMxZWUsCi0JMHg0ZDhlNTYyYiwgMHg2NjNlODMyOCwgMHhjYjJiNGU3ZiwgMHg2MjhmZDc4YiwgMHg2YjhmMzRmNywgMHhiMjdmYmY5YywKLQkweGZkMTBhNjc4LCAweDFiY2NhNzhmLCAweGQxNmVmOTQ1LCAweGIxNjRlNjJmLCAweDMwZTUxYmZjLCAweGU5ODM5MGM3LAotCTB4ODBlN2ZmYzYsIDB4M2M5MTk3N2MsIDB4ODE3ZmZmNjMsIDB4ODAyYTJmYzEsIDB4NzIxMzQ2ODEsIDB4NDhkN2Y4MzQsCi0JMHg1YzZmMTQzZiwgMHhiZjQzMWZhOCwgMHhkOTcyMjM3OSwgMHg1N2Y5Yzg5MSwgMHhmMThmNGJlOCwgMHhlYzlkNWRlYywKLQkweDgzNmY5NjM0LCAweGNmMDVmZmJmLCAweDEwNzg1MDczLCAweDAwMTA3ODUwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHhkNTU0N2MwYiwgMHg3MzNlZjdiNSwgMHg5OTkzMzMxZSwKKwkweDQyMGYyNjRjLCAweDA4NGYwMDQyLCAweDIxODQyYTIwLCAweDM4ODgwODQwLCAweDhkMDY5MDA5LCAweDg4MDgwODlhLAorCTB4NDIwMTAwY2EsIDB4YTkxMTMyNDgsIDB4Njc2ZDVlOTcsIDB4NmFkMTE0MjIsIDB4YTM2ZDJkMWIsIDB4NDEwMWRhOTcsCisJMHgxODBkNDVhMywgMHgxZDAzNDBlOCwgMHg1YWJjNDE0YywgMHg1YjRhMGE4ZCwgMHgzYzMxNDFiNSwgMHhlODc4NDkwYSwKKwkweGVmNWJkNmM1LCAweDMzZWY2YjVlLCAweDQyNjY3Mzk5LCAweGZkZGZiNmEyLCAweDdmMTdkZmJlLCAweGVjZmIzNmZlLAorCTB4N2I1ZWY2NzMsIDB4N2I1YWZmYWQsIDB4MjMxZmI1ZWQsIDB4ZDMxM2M2NTksIDB4MDU3Yzg0MTUsIDB4NzIxM2Q3N2YsCisJMHhmNDg0MjQ0OCwgMHgwYjNiNGVlYiwgMHgxMDhlM2E2OCwgMHhiMDM5OGU3ZiwgMHhiNDI0MjA1NSwgMHgyNGVkZWZlZiwKKwkweDRkYjM5MDg1LCAweDI2NzM1NWIzLCAweDk4YzdmYjIxLCAweGYyZDNkNzQzLCAweDgwZmM4MWIzLCAweGRkNGY5Njk5LAorCTB4ZDEyMWM0NzksIDB4NTE0ZWQ1N2MsIDB4M2VkMzcyODIsIDB4YjFkZjdlMmIsIDB4ZGU0MDA4NTEsIDB4ZjFmZDZlNmIsCisJMHhiNWRmMzRiNSwgMHg2OTliMjQ1MywgMHgzNzY0MjRkNSwgMHhkYTQyNTQ5MSwgMHhhOWZkODQyZCwgMHg2YTVmOThmMSwKKwkweDRkYWFkOTY1LCAweGY2ODJlZmZiLCAweDYyNjY4M2NhLCAweDM3YjdkZmE1LCAweGFmYzg2ZTg5LCAweDA4MDQyYWRjLAorCTB4Zjc2YWFmNmQsIDB4NWEwMGNhODMsIDB4ZDA4MGIyZGYsIDB4N2U2OTU1NjgsIDB4MWE4YTYzZWIsIDB4ZmIwM2M4NGYsCisJMHhiMzY4ZWNmZSwgMHg2N2RhNzIxMywgMHhmZDgyYWEyMSwgMHg0OTFjNmYyOCwgMHg3YjYwNDU0OCwgMHg3ZGZhMDBlMSwKKwkweDY1YzEzNmM1LCAweDZjNTdmNWEyLCAweGY0MDFkNzNjLCAweGMzYzkzNDU1LCAweDhhZGY1YTQ0LCAweDQ3NTExYjA2LAorCTB4MjJiZmI2YjAsIDB4MDdjYjVlZDAsIDB4Nzk0ZWRlZDgsIDB4ZmU1N2I0MjgsIDB4MTEwYTNkZTUsIDB4MWJiMjlmYTEsCisJMHg3NGEyYWJiZSwgMHg3NmI1YmY0MCwgMHhiMWVhZmI0ZiwgMHg1NTlmOGQzZCwgMHhlOGY2ZDFjZiwgMHgwYTJmZDU3YiwKKwkweGI1NjJlODJlLCAweDhlODA3ODg5LCAweGI5ZDZkZDhlLCAweDdmYTFkYjRmLCAweGY4ZjBjYWI1LCAweGRjMmM3ZWM4LAorCTB4MDhhOGZkMDUsIDB4ZWQwYTUyNmMsIDB4NjUyNmRmNDAsIDB4ZmFlZWM4ZTksIDB4ODdmYzM0NTYsIDB4YWNmYWJlOWUsCisJMHg3Mjg4OWVmZSwgMHg0N2RhN2E2MywgMHgzYmJjM2E1OSwgMHhiYjg4NDE1ZiwgMHhhNDRiZDY5MSwgMHhhYTNhNTI4MCwKKwkweDQyMDdmOWZiLCAweGExZTMyMTIyLCAweDk2YTg5MTdlLCAweGU0YTlmYWVlLCAweDIzZmUwNzExLCAweDBmOTQ5ZmY0LAorCTB4ODFmMWJkZmUsIDB4NzJkZDk5YWQsIDB4OTkwNGU5NWIsIDB4YmNlZGNiNzUsIDB4ZWE1MWNiOTMsIDB4NWZhYzhkY2EsCisJMHhmMjBjN2Y0YiwgMHhmOWQ0ZjRhMCwgMHhlZTNlOTg5YywgMHg4Mzc0YzM0YiwgMHhmZGJlNDU0ZiwgMHhkMzAyMzdkYywKKwkweDlmMGI5ZjdhLCAweGMzY2JlOTNmLCAweDhkY2ZhMzc0LCAweDIyYmU1M2U5LCAweDEyYmUwMzRjLCAweDZmYjM2ZjdjLAorCTB4N2M1YmE2MmUsIDB4OGNmZTdjMWUsIDB4MDZkMzFjYWYsIDB4N2YzZTBkNWYsIDB4ZDMxYWI3ZGUsIDB4M2UzZjNlNmQsCisJMHgxZWI3ZDE3ZiwgMHgxZDVmNDZkMywgMHg1ZTQwM2JhNiwgMHgwNWYyNmQzNCwgMHhiZTVkYmRmMCwgMHhiZTgzNGMwNiwKKwkweGM3YmU3YzQ2LCAweDExZjRjNDE3LCAweDY0Yzc0N2NlLCAweDNlNTEyZjkyLCAweDQ5YzRkYzM4LCAweDhhOTI0ZWM1LAorCTB4Y2QzMmY5ZGQsIDB4N2NiMDk1MjcsIDB4N2NmZTFkZWEsIDB4M2Q1M2U2ODUsIDB4MzJmOTRmMzQsIDB4NmY5NDMyYTAsCisJMHgzNTAxZjlhNiwgMHhmZGYwN2NhYywgMHhmMzQyYzBhNCwgMHg3Y2FjZmQ4MywgMHgwMmVlMjNjOCwgMHhhOTBmY2QyYiwKKwkweDM3YzNlNTYzLCAweDY4ZTIwYmZhLCAweDk1ODA3ODdlLCAweDU0MmRiZDVmLCAweGFiZjlhMzYwLCAweDc2Nzk1OTFiLAorCTB4YTc2YTk5MzMsIDB4Y2IxMGVjZjksIDB4OWVlMWJjZTcsIDB4MzlmMzRmMWEsIDB4ZmI5ZjJjYWQsIDB4ODNhYTdmODEsCisJMHhkOGRiNzNlNiwgMHgwNGNlOTNmNywgMHgyZDFlZDU0NCwgMHhiYWIyMWQ4NywgMHg2ZDU5NTA5OCwgMHg0YjcwY2ZmNCwKKwkweDUxNWU2OTEzLCAweGNhMmUyMWVmLCAweDZlYWRmZjFmLCAweDQzZjI5ZDI5LCAweGM4Nzk2Mzc2LCAweDliY2IxZjNmLAorCTB4YmY5NjM3MTQsIDB4ZmNjMzJmZTMsIDB4ZTU4M2Q5MmUsIDB4MmM1NWZkYzcsIDB4ZmNiMDc4YWYsIDB4OThiZGZmNzMsCisJMHgyYzdlY2EwZiwgMHg1OGZhZDRiNywgMHhmOTYzZjE1ZSwgMHg1OGY1ZGE4MCwgMHg4MDM5MWVmZiwgMHgxZjZiMjNlNSwKKwkweDRhM2RmMmMzLCAweDVmMWZjYjAwLCAweDFhN2JhNGZiLCAweDNjMTFhZmNkLCAweGQyM2MwNzNmLCAweDAxNjQ5Y2I0LAorCTB4NGFkMzFhOWUsIDB4MDlkNjllMjgsIDB4ZjdlMDJlNjQsIDB4OGEzYTAwMDcsIDB4MGFlOTc1Y2IsIDB4M2Y4ZWUxZWEsCisJMHhmYTBkM2VlNCwgMHg5MDI5N2Y4YiwgMHhjM2NjZmE1ZiwgMHhhZmZkZjg5OSwgMHhkNjk5MWViMCwgMHg0ZjVlZjYyMywKKwkweGJhNzk5YmNlLCAweDJjZGU3MjdhLCAweDgwNjllYWQ3LCAweGZiNThkNmY3LCAweDM3OGVjZjU2LCAweDc5ZTllOTI3LAorCTB4NjdhYjQyYjMsIDB4ZGYxM2QyM2IsIDB4YmNlNTdlYjcsIDB4Y2Y0ZjU5MzUsIDB4M2Q1YTk1NWIsIDB4YzQ5ZTkwN2IsCisJMHg3NGQzZDFiZSwgMHhhNjlmY2Y0NCwgMHhiNGZlNjEyMywgMHhmYWZkM2QyMCwgMHhmN2I4Y2Y0NiwgMHhmNzE5ZmNmNCwKKwkweDZmM2Y5ODVlLCAweDdkZTkzZDYwLCAweDNkZTlhN2FiLCAweGRlOWE3ZjNkLCAweDA4ZTdmMzBiLCAweGRmNTA2YmY2LAorCTB4N2RlZTM1ZmEsIDB4YmRjNjdmM2QsIDB4NDdjZmU2MWYsIDB4ZGY2NjRmNDgsIDB4YTFmNWQ5ZWEsIDB4M2ViYjNmOWUsCisJMHgwNGU3ZjMwYywgMHg2ZmFjMzNkNiwgMHg0OGZkY2FmZCwgMHg4ZmRjOWZjZiwgMHhjMmU5ZmNjMiwgMHg1YmVhYWU3YSwKKwkweGQyM2ViYjNkLCAweDQ3ZDc2N2YzLCAweDgxN2NmZTYxLCAweDViZWE4Y2Y1LCAweGEyZmY3MmJmLCAweDVmZWU0ZmU3LAorCTB4MDkzMWZjYzIsIDB4YmU5OGNmNTAsIDB4NTRmYzEzZDEsIDB4YTdlMDlmY2YsIDB4YjBkOGZlNjEsIDB4YTM3ZGYxOWUsCisJMHhjZjVkYWYyNywgMHgzMGY2YmM5ZiwgMHg5MDA0NTI3ZiwgMHhkNWJlYzRmYiwgMHhmM2Q3NmMxMywgMHhlNjFlZDgyNywKKwkweGU3YWMyMGNmLCAweDJiZjViZWJhLCAweDNmOWU4NGVmLCAweGZjYzIyNzc5LCAweGNhZmQ4ZTE5LCAweGY0MGY3YWE3LAorCTB4N2M0ZjVhMTAsIDB4MzllY2Y1Y2YsIDB4OWVjZmU3YWIsIDB4OGNmZTYxYjMsIDB4ZDNhNjdhYzYsIDB4YWY3YWIyN2EsCisJMHg5ZTg3NTI2NywgMHhjMjNhOTMzZiwgMHg3YWMzYzlmYywgMHg5ZWFkZjQ2NiwgMHhmZTdhMWQzZCwgMHhmMzA4ZTllYywKKwkweDczZjkxZjI3LCAweDM1ZmFkZjUzLCAweDlmY2Y1M2E5LCAweDNmOGM5ZDQ5LCAweDRjZDcwZjYzLCAweDNhNzJkMDc1LAorCTB4ZmE0NGJhMTYsIDB4ZGM2N2I1YzksIDB4NDVlNjgxNmUsIDB4NGU4YmNiMjcsIDB4NDRiZjAxMTcsIDB4ZDIwZGZjZDQsCisJMHhmN2U5MTZlYSwgMHgzOTg5NmRmNiwgMHhiZjQ4OTMwZiwgMHhmYTE0YTBhMywgMHhiMWJkNGYxNSwgMHgyMTIzYmY0OCwKKwkweGU3ZTc0ZTJmLCAweDc0OTNiYTI0LCAweDAxYTJlNGY5LCAweDk1ZmJmN2JhLCAweGY3OTVkMTBjLCAweGFlYjU3YjlmLAorCTB4YTM5M2RkM2MsIDB4NGY5NDY3Y2IsIDB4YTgzZmJkZDIsIDB4YmY5NzQwYTYsIDB4YmEwZGY1NjIsIDB4YjdmZDMzZjcsCisJMHhlYjU5ZjJlYSwgMHgzZmJkZDc2ZiwgMHhhZTkxNmVhYywgMHgwYWZhY2FmYywgMHg4MTU1Zjk1ZCwgMHgzNWZjYmE5NSwKKwkweDdiYWVmZjBkLCAweDAzZTM1NDdmLCAweGMxZDFmMmJhLCAweDYzZTU3NTg3LCAweGYyZWI4ZjQyLCAweGE5M2QwZjYzLAorCTB4ZWI3YzdmN2IsIDB4ODRmOTVkNjYsIDB4Y2FlYmNmYTMsIDB4ZDBlZGI2MjcsIDB4YjkzZGFmZTUsIDB4ZDllN2UwYzcsCisJMHhmMGQ3ZWQ5ZCwgMHgyN2I4MDhiYywgMHg1NzRmZWZjYywgMHhjNTBiZGZkMCwgMHgwNjU3OTgyYiwgMHhkZjhmZDFkOCwKKwkweDNkNTRiZjFmLCAweGJjYWJlNTRlLCAweGExNGQ1OGIyLCAweDEyOTkwNWYyLCAweDBmZTdhZTNhLCAweDhkYjJiZjI4LAorCTB4OTI3N2JmM2UsIDB4N2QyNzRhZTcsIDB4MTllMmFmN2UsIDB4OWZlMThjZWQsIDB4MjQwODNjNTIsIDB4MDRkNTUyMGQsCisJMHg0MWZjYjFhOSwgMHgyMGIxZTE5OSwgMHhjN2UxY2JlMywgMHg1MzVlZjdlOCwgMHg5YTQ0ZjBkNywgMHhkN2U2MmZlZiwKKwkweDEyOWU1ZTAzLCAweDM4ZDM4ODRjLCAweDdiYzBkNDkxLCAweGYzODI2NjcxLCAweDczMzMwNzgyLCAweGUwNDdmNjlmLAorCTB4YWEyMGZkNzUsIDB4YmQ3NzQyODcsIDB4MWE0ZjY1ZWIsIDB4NmI5YjE5ZjgsIDB4MWY4M2Y2ZGYsIDB4ZWQxMDZlYjIsCisJMHg5ZTQyMDBkNywgMHhmOTBlZGUxNiwgMHgwN2VmZDI4NywgMHhkMGYzNGQyZCwgMHhmNTBhY2NmYSwgMHg1N2RiMjNkMywKKwkweGIxMjNmYjY4LCAweGZmNjgwNmZkLCAweDM3ZGExZWM1LCAweGI1ZDNjOTBmLCAweGFlNWMxOTZmLCAweGQwYTJkZjZiLAorCTB4MWZkNDlkZjYsIDB4NmYyM2ZkYTgsIDB4MTI2MTBhOWYsIDB4N2YwYjJmMjEsIDB4ODNjZGY2YzQsIDB4MDdmZGIxY2IsCisJMHg4OTVmM2ExNSwgMHhkYzJlM2Y2YywgMHg3N2Y0MTA3ZSwgMHgzZTNmYjQxZiwgMHg0Yzg3ZmY0NiwgMHg3MDdmZjdkMiwKKwkweDBhZmZiZTg1LCAweGI1MmJmZmViLCAweDcxZmI3OGM3LCAweGUxMTZmZmQ4LCAweGUwZmZlYjE4LCAweDMzN2ZkNjBhLAorCTB4YmVkYzM3YWIsIDB4NDNmZmNjMjMsIDB4N2IzN2ZmZDAsIDB4NjRkNjdmZWEsIDB4YThhZmZmN2QsIDB4Y2NkZmY3ZDQsCisJMHhmNmE3N2ZkYSwgMHg4ZWRmNmYxNCwgMHg5YzJiYmZlZCwgMHhhMmJmZmQ2MiwgMHhjYzU3ZGIxMiwgMHg0N2UwMTcxZSwKKwkweDA5YWI4OGM5LCAweDQwYzlmNmQwLCAweDAzZmE5ODZhLCAweDkwM2I2ODVjLCAweGEwYTI0ODhlLCAweDYxNTFlNDI2LAorCTB4NmY3MWQyMDgsIDB4ZTdkYmMzMWMsIDB4Njg2ZjE0NzEsIDB4OWNmOGZjNmYsIDB4Y2I2NWE4MDQsIDB4OGUyZWYzYTUsCisJMHhmMmRiMTVmNSwgMHg1ODRiYjAxNSwgMHg0YjJiZTc0ZSwgMHg0MTY1YTkzOCwgMHgzNjRkZjExMSwgMHgyOGMzMDM5OCwKKwkweGQxNDExZGJkLCAweDBkYjJmOTBmLCAweGZlYzAwNWQ3LCAweDQxNjRjZDc5LCAweDkxMjc3YzA5LCAweGY0ZmYzYzEwLAorCTB4NDczNmEzNjcsIDB4MmU5OGNiZjYsIDB4ZGJkYjkzYTksIDB4M2MyZGY0MjIsIDB4MjMyMDJhOGYsIDB4ZDM3ZDI4NmEsCisJMHhiYmUzMDQwMSwgMHg3OWQzMWZmMywgMHg4YmYzYTExMCwgMHg4MzNjZTgwZiwgMHgyMjdlNDg1MCwgMHhhMjNlZjZiMywKKwkweGI3YzgyNWYzLCAweDk0MTJmOWQxLCAweGRmOGI1MjEzLCAweGE3MGVlYWQxLCAweDM4NGJmYTUxLCAweDRjNGIxZmZkLAorCTB4NDNiZTNmNWYsIDB4N2VhOWY4MDgsIDB4MzFiZGZlN2UsIDB4YjA1ZDRmMzgsIDB4ZGU5OTQ2ZGEsIDB4N2Y0MmM3NGQsCisJMHhmYjRmMmViMiwgMHg3NTM5MDdlNSwgMHgzNjA3MzZlZCwgMHgxNTVmYzgwYiwgMHhhYThhNTVmOCwgMHhmNWUyYzg0OSwKKwkweGRkZDc5NDE5LCAweGM1NGZiZmVmLCAweDdmNTk0ZTllLCAweGZkY2I3MTFiLCAweGFlNzdmYmU5LCAweDY5MzkwNjEyLAorCTB4ZTZkZGIzYmIsIDB4Yjg0ZTM2MWMsIDB4ZDdhODRjMzMsIDB4NDc5NGMzMjQsIDB4NjM0ZGFkYzgsIDB4MjkwMzVhNjQsCisJMHhiNzFmY2I3NSwgMHhiMzNiYjQ0NSwgMHg1ZDlmOWY0OCwgMHhjODc3Y2ZhMiwgMHhlOTQ0ZDk2ZSwgMHhjODE1MjhlYSwKKwkweDljZWY1YTI2LCAweGFkNzJmYWI5LCAweDg5MjliYjFkLCAweDU3Yjc5OWM5LCAweDliZThjYTkyLCAweDNjMGU2OTAzLAorCTB4ZTc5Y2EyNzYsIDB4MWFiN2Q5M2EsIDB4MzJjNWRlM2QsIDB4M2M4MmMyOWQsIDB4YzgwOGZkZmQsIDB4ZWY4MjlmZDUsCisJMHhmZDY0ZWVkZCwgMHg1NzNiZDIzNiwgMHg2ODRiYjhiNiwgMHgxNDJlZTczZiwgMHgyMzZmODAwMywgMHg2N2RhN2ZmZCwKKwkweDY5YjI5YjczLCAweDMyYTdmZWJhLCAweGM3Zjc0NTMxLCAweDhmM2NmZjQ4LCAweDMyOGQzZmIxLCAweGNiZjNjMzhjLAorCTB4NmUxOWNmOGQsIDB4M2ZmY2I5ZGEsIDB4ZjRkMDdjMDYsIDB4ZDI4M2UwMDQsIDB4YTNlMzljN2YsIDB4N2MzMmFlZGIsCisJMHg5YjllY2Q3OCwgMHg0ZjVkMGYwMSwgMHhjYWU1MDQ4OCwgMHhjNzFiNzJmMSwgMHgzZDNhOTJjYiwgMHhjOGYxMDgyZSwKKwkweDczNjVjNzIwLCAweDIzODc5Yzg1LCAweGUzODczMDcwLCAweDFlYmQ1OTYwLCAweGJmMTI3NzM3LCAweDJlNDMxZTljLAorCTB4ZmE2YzM2ZjMsIDB4ZGQxYTlhNjEsIDB4NmUzOTBmYmYsIDB4MWZiMjNmZTYsIDB4NGZkZDEzZjksIDB4YjhiYmE3MjYsCisJMHhkMWFjZWU5YywgMHhlNWM2ZGY5NywgMHhlYjk3Mjc3YSwgMHgwZWM3ZmFkYywgMHg2ZTQxZjM1MCwgMHhlODMyMDM1NywKKwkweDRkM2VmN2JiLCAweDc5M2E2ZDllLCAweDhkM2NiODdhLCAweGU1YzVkZTc0LCAweDk4ZjdkNzc5LCAweGI2ZjQ4ZDNjLAorCTB4ZDViNjc5NzEsIDB4OTBjOTkwNWYsIDB4ZjQ4ZDdhNjgsIDB4ZDUxZDU4MmQsIDB4YjllNDA1MWYsIDB4OWU1YjFmZDAsCisJMHhmMjdlNjBkZSwgMHg1NWU3ODhmMSwgMHg4ZjkyMzM4ZCwgMHg4YWQ5ZTg0NywgMHg3ZTVkNTI4NiwgMHhlZTllNjA3OSwKKwkweDBiZjU2NWZkLCAweGVhNGJlNTc1LCAweDE3Y2FlYjk2LCAweDk3NWJiZmFmLCAweDllZmZlODVmLCAweGFiMDVmZGVlLAorCTB4NzdlNTc1NmIsIDB4MmJhNDNjZDYsIDB4OThmZTVmOWYsIDB4ZjNjZjNmMmUsIDB4MzlmZGVlODQsIDB4Y2FlOTM3NzMsCisJMHhhNzNjOTc2NywgMHhiNDU5OWYyYiwgMHg3NTJmOTc1ZCwgMHg2ZmJkZDZlZiwgMHgyZGQ1NzdkYSwgMHg4ZTM3Y2Y4MCwKKwkweDg5ZmMwNDg4LCAweDMwMjc1Y2NmLCAweDRiOTlmODJlLCAweGM3M2JjMTc2LCAweGJhZTIyYTdkLCAweGQzMDIzN2RkLAorCTB4ZTIxNzNlOTMsIDB4MGYyZmI0ZmUsIDB4OGI2MDhlZDMsIDB4M2EwOWM2MWQsIDB4ODkyNTJlMmUsIDB4NmU5YmNjZDQsCisJMHgxMDNmNWRhZSwgMHhlMzgyNjljNiwgMHhhY2QzMTZlOSwgMHg0MjY0ZmY1YSwgMHg5MTUyNmQ3ZSwgMHgwYWY1YzVkZiwKKwkweDQ0MjU4ZDA5LCAweGQzODZjMTgwLCAweDk0NDYyNWQxLCAweDVlNTJmNWI3LCAweDcyN2YwZDRmLCAweDViNzE3OTc0LAorCTB4YzdkZWU3ZWMsIDB4OGNlMTVlMTcsIDB4ZDZlOTc3MTEsIDB4N2UwMTkyNTMsIDB4YmJmNzI3NGYsIDB4MDI5NWU1OGQsCisJMHg0ZTdjODkyOSwgMHhkN2E4MDNjOCwgMHg1YmI4ZjhlNywgMHhhZmZkMzBhOSwgMHg0MDVlOTFkYywgMHgwZDBmOTAxYywKKwkweDdiNWNiOWFmLCAweGZkZTQxNDhkLCAweDNhNTkyNzAxLCAweDdmNTY1ZTNkLCAweDEzYmVjZThkLCAweDAzZjZjYTg4LAorCTB4M2RkNThkYmMsIDB4YWQ3MGQxNWYsIDB4ZmIzM2JiZWUsIDB4MWFiYmE0NDUsIDB4MTg0NGM1NmMsIDB4Mzc1ZTRiMTYsCisJMHhiNTBlMWQ4MSwgMHgwYTM5OWUwYywgMHg2MWJmNzRlOCwgMHhkODJhNzE4MiwgMHgzM2MyZmQwZiwgMHhlM2U0YTJiZSwKKwkweDA0YWZjODEyLCAweGI5YmU5M2QzLCAweDNjZmJiNjk4LCAweDk1ZjcxZTk4LCAweGFmYjFmYTYzLCAweGRmMzZkMzA2LAorCTB4ZjIzZjRjNmEsIDB4YzBmZDMxZjksIDB4M2ZkMzFlYjcsIDB4M2QzMGVhZjksIDB4ZjRjN2FiZWEsIDB4ZDMwMDVmM2QsCisJMHg0YzA2YmVjMywgMHg2MjM1ZjFkZiwgMHg2MjBiZWFkYSwgMHg2MzczZTFkYSwgMHg2ZjVkZTlhYSwgMHhjN2M5M2JiOCwKKwkweGJmODBkM2UxLCAweDc4ZWIzODE4LCAweGZhZWQ1NTYwLCAweDNiMzhkZGM5LCAweGQ2YWZiYTZmLCAweGNmOWJiMDNmLAorCTB4OGU2NmY1YzUsIDB4MWUxZDU0ODcsIDB4MzM2MDgwYmUsIDB4ZjI5N2FjZTIsIDB4YjBlMzk5N2EsIDB4OTc2M2VmYTcsCisJMHg2YmZmMzc3YiwgMHhjNGRlMzZmMCwgMHg4YTZmY2NmYywgMHg2NTNjNmViNywgMHhkNTk0ZjAxOCwgMHg4OWZhOWUxYiwKKwkweDM0ZjFiYmUzLCAweDdlNjRlNGRlLCAweDhmZDNjNzBmLCAweGU2MzExZmEwLCAweDg0ZTAwNTE1LCAweGQ3ZjA4YmY0LAorCTB4YTcxNjM2ZGMsIDB4ZDQwOWViZTYsIDB4NmE3MTY1NTMsIDB4ZmExYWY2ZGUsIDB4NzVmYTJiNmUsIDB4NmUzMDExODEsCisJMHhiN2YxMWY5YywgMHgzZjg3MTBlMSwgMHgyNzRjZDQ3ZiwgMHhjZmY3M2Q3ZCwgMHhmOTllOTM4OCwgMHhjZGY5YzZlZSwKKwkweGJjMWQwMGQyLCAweDViOTc0NmM2LCAweGFkNWYxOGUzLCAweGU4NDQ1MjI2LCAweGIwZDBmNmI4LCAweDQ2OGI1YzY3LAorCTB4NDkyMjVlNjIsIDB4NTVjMDdkZjAsIDB4NWVhMzFmMWEsIDB4N2YwMzJiZWEsIDB4OWFlYmUzN2IsIDB4YTFiM2NmZjgsCisJMHhmZjI3ZjZiZSwgMHg3OGU5MGI5ZSwgMHhlMzk3ZjMxMywgMHhkYmY0NDQ1YSwgMHgxNzY5ZTg0OSwgMHgyZTNjMzdmMCwKKwkweDEwNjk1ZDk5LCAweGE2MWFlZWRmLCAweDA4NmZkMTM4LCAweGYzZmNmNWQ4LCAweDM3NmU3Y2QzLCAweDNjYTIxZWZmLAorCTB4Yjc3MWM1NmEsIDB4MzdmOTBkMmUsIDB4ZTllMWYzZjQsIDB4NmY1ZmUwN2QsIDB4N2UzN2JkZjYsIDB4ZjgwYzBhMmUsCisJMHgzN2IzZjA5NywgMHg1ZDliZDhmYiwgMHhjNWY1NmUyNCwgMHhlNzdmZWQyMCwgMHgwZjM5NTFiZSwgMHg4NzA3NjBhYiwKKwkweDBmNWE3OWIwLCAweGE1ZDZkNmZjLCAweGZmN2NmNDhjLCAweDMzYjhlMjZiLCAweGViNzFjMzU1LCAweGY5ZGI0MjYwLAorCTB4ZjljYmViODgsIDB4NDAxMzJiYTYsIDB4OWMxZWI0MmUsIDB4ZTRlZDc0MWYsIDB4NzIyZjdlN2UsIDB4YWZhOTliM2QsCisJMHgyZmFjNmJjZiwgMHg2OGMyMjE0MSwgMHhhMmJjNmVkYSwgMHg2YTQyMDQ5MCwgMHgyMmEzY2Y0NCwgMHg2ZDVjNmZjZSwKKwkweGVjMWI4ODdlLCAweGE4ZDZiOWIzLCAweGZkM2M2ZjMwLCAweDFhODU0ODY2LCAweGYzODVmMWY1LCAweGMwNzY5ZTg3LAorCTB4OWE2NTZjM2MsIDB4ODYzYzc5YzksIDB4YWFiNGI1MWMsIDB4OGY2OWQzMzEsIDB4ZjUwNGFmOWMsIDB4NDI3NWYzZjksCisJMHhlN2NlMjM1MSwgMHhhMzU5ODRkNCwgMHgzYTcxOWM2MCwgMHhiYjA1MGY4ZiwgMHg1NmE5ODY5ZiwgMHhjNTM0Y2FjZiwKKwkweGRkZGE5Yzc5LCAweDA5NTkwZGQzLCAweDYwMTdmZTZjLCAweDIyNWI2NGY2LCAweDNlZDM5YmRhLCAweGNmZmZiZTBiLAorCTB4N2FhN2E3YTYsIDB4NjkwODdhMzQsIDB4YzA1ODlmMjIsIDB4YWNiMmQzOWUsIDB4NTFlZmRmOWUsIDB4MGE4YmE0MWYsCisJMHhiMzQ5MzdjNCwgMHgzN2NjMzlmYywgMHhhZmZmZjRhZCwgMHgxMmJkNDA4NiwgMHhiZDdhYjVlNiwgMHgzY2RmYTI4ZCwKKwkweGQzNmY5ZTFhLCAweDUzYmY0N2I1LCAweGY4NTdiNWI1LCAweDkzYmQ2N2FlLCAweDdiODZiYjQ4LCAweGY5NTdiZjJhLAorCTB4MDY4YWYwZmEsIDB4YzdlZjUzYWIsIDB4ZGVmMmVhMjYsIDB4ZTc1M2JhNjAsIDB4YzAzZmMyZDcsIDB4MjQxMWFmNzEsCisJMHg4NzI1NWZjMCwgMHg1ZjY0YTc1ZiwgMHgwY2RhNzgwZiwgMHhiZjk4NDNjMSwgMHgyYWJkZWMwOCwgMHg1MWUyOWI0YiwKKwkweDAxNWE1ZDUxLCAweDM0ZjI4YjlmLCAweGZlNzNhYmZjLCAweGE5ZDRlZDRjLCAweDdhMDI2NWQ3LCAweDU0YTRiZTQ2LAorCTB4MjBhOWYyZTUsIDB4NGM0NGNkZTIsIDB4YmY5OGJmMzQsIDB4NDU2OWE4YmQsIDB4YTc1YjhjMzEsIDB4NTBmZTZjNGMsCisJMHgzMDFjNGE0NiwgMHg3NTI3MmUzZiwgMHgzZDRmMTBiOSwgMHhhMDQ1NGM0YiwgMHgzYmM5Njc5ZiwgMHhmYTExYjE4ZSwKKwkweGIwNTQ0ZTc4LCAweGY1ZWJjNWQyLCAweGRmOWQzYzdlLCAweGVhY2JmMmViLCAweGU0YTVmOWY1LCAweDA3NTg1NGQ2LAorCTB4MjY0MWJhNWYsIDB4ODZlYzAxMDEsIDB4ZTg5OGZjYmUsIDB4OTE5NzdhYzQsIDB4NmUzMDc1OWEsIDB4YmJjNzljZmYsCisJMHg5NDg5MzkxNiwgMHhmYWFiZTk0MSwgMHgxNzczMmZjZCwgMHg4OTJlM2E1MiwgMHhkNmQ1ZmM2YywgMHgzMTI3OTc3MSwKKwkweDA1NjYyYmZhLCAweGZmN2QzNzE0LCAweGI3YjFhNjkzLCAweGJmNDQwYjUxLCAweDc1ODNhYzBmLCAweDcxMjk3ZjZkLAorCTB4ZjJkMTI1NmQsIDB4MWJmNGJhZmIsIDB4ODFmY2Q1ZTksIDB4NGU2NGY1YTgsIDB4ZTA4MzRhNDcsIDB4NjNiMGM0MGUsCisJMHgzZDMwMjQ4YSwgMHg2YWVlZjZlMywgMHg4MzhiYTljOSwgMHgyMjNlNDJlNCwgMHhmMThkZjIwZSwgMHg3ODc0NDI5NCwKKwkweDA2N2EyY2RhLCAweDdlMTllMzRiLCAweGQ0ODIwZjAwLCAweDRkYmU3OGE1LCAweGY1NTE2OWZkLCAweGZiZjUyZDVmLAorCTB4OTAzZmQ2MjcsIDB4YWJhYjlmZDYsIDB4NGE5ZmY3M2YsIDB4ZmEyOGQwZmYsIDB4NWZkNTYyMGIsIDB4NzYxNzliZjUsCisJMHhhOTNkYTlmOSwgMHgwZTY3ZTk3OCwgMHg1M2M5Yzc0MiwgMHg4YmFhNWQ1MiwgMHhlYjcyYjVjYSwgMHg5YTZlMWQwZiwKKwkweDBlZmM5NDllLCAweDgwYTllYmMwLCAweGRlNGIxNDU4LCAweDc2ZjJjM2FiLCAweGJiODgwNWRiLCAweGZkNjkzZmMxLAorCTB4MTFmZjlmYTcsIDB4ZGYzZTIzYzYsIDB4OWUzMTNiMmEsIDB4OTkwZTYwZDYsIDB4Mzc1NjNlYTksIDB4ZDkyNjJmMmQsCisJMHhmMmM2M2Y5OCwgMHgyMTEzOWUwZiwgMHhhZmUzZDQxZiwgMHhhNTlmZDllMiwgMHg4YTBhZmVjMiwgMHgwYTVmMWUxNCwKKwkweGJkNWIzZmExLCAweDFjNDJkM2U1LCAweGVhMTc0ODlmLCAweDY4M2JmMTkxLCAweGRhMTI1MmZmLCAweDQyNGE4NWJmLAorCTB4MTNhNTM5NzQsIDB4Y2U1ZTA0ZTMsIDB4OGZkMzZmMTcsIDB4ZjgwZTg5Y2UsIDB4ZGZjZTFiNTcsIDB4NzM5N2VmOGQsCisJMHgxNGI5NzRmZiwgMHhhMzZlZDI5ZiwgMHgyNjQwOWVmZiwgMHhmOGQ0M2Q4MCwgMHgzZmNjMDI0MSwgMHgyZmRjZjM1ZCwKKwkweDdhNTE4ZmIyLCAweGRkNzk2Y2NlLCAweDQ5ZjA0NDIxLCAweDhkZjNhM2QzLCAweDQ3YjU3ZjhiLCAweDc2ZGVkOWVkLAorCTB4ZjQ4YjNkNTAsIDB4NGFmMWI0ODMsIDB4YmFiZjcyMGQsIDB4NzI5NWE1OTksIDB4ZDUyZDcxYzgsIDB4YjI0ZGNhZmIsCisJMHg1NzFmNGZjYiwgMHgzM2Y0ZjBiZSwgMHhmMzFjNDI0ZiwgMHgzMGQ3NjY4ZiwgMHgxNzhhZmY1YSwgMHg4OTM3YmMwZSwKKwkweDk3NmM1N2U2LCAweDM3NTk4YTUzLCAweGI3NmE0MmVjLCAweGZmZjRiYzVjLCAweDcyZGQzOWQ1LCAweDgwZjk3OGE4LAorCTB4Y2Y2MjhlYTIsIDB4OTZlYTRmZWYsIDB4ZmJlZDhhYzcsIDB4OWEyYTMyMTUsIDB4ZjcxYjUzMWYsIDB4MThmNjZkMmIsCisJMHg1NjNjNjk3MiwgMHg5YWMyN2UwOCwgMHg4MTRiZmVlNywgMHg3ZGE5ZTJmOCwgMHgxOTlmZTkwMiwgMHgwZTliOWY4MywKKwkweDdjMDAxZmEwLCAweDM5NzIzOTQyLCAweDc4NjZlNTg1LCAweDAyZTU0YmRmLCAweDkzOTM1YWY2LCAweDZlNDZmY2IxLAorCTB4NzUzZWEwNGYsIDB4YzVmOWUyMjQsIDB4ZjJmZGI0M2QsIDB4ZDA1ZDk5M2YsIDB4ZWYxN2YyZmYsIDB4NGUzZjQwNzEsCisJMHhkNzBjMzU0OCwgMHgyYTYxZmNiZiwgMHhkOTcyYWZkOCwgMHg5NGM0ZWE5ZiwgMHhlYTdmMmYzZCwgMHg2NWI3ODhiYiwKKwkweDE1Mzc3ZjZmLCAweDlkYzQ0OWUzLCAweGM3YjFjMjZlLCAweDViZmQwZTlmLCAweGY2MzY3MWIyLCAweDIwZjEyOTZmLAorCTB4Mjk3ZmNhZWUsIDB4ZmE2ODA0OTYsIDB4YjY4YTQ0OTksIDB4MGU4YmQwYzcsIDB4MzYyNzE3YWUsIDB4ZjY4YzQ3NTMsCisJMHgxZmNjMDRlZiwgMHgyM2JmNWVjMSwgMHg0MjJhYmVlMiwgMHhmZmEwMjZlZSwgMHhhMTdkZTVkZiwgMHgzZmU2MDIxZSwKKwkweDFkMzkzMGIzLCAweGFmNWM0YzkwLCAweDg5MTliN2E4LCAweGI2MGYyZGQ3LCAweDBmNGU3YzgyLCAweDc1ODdmNzcyLAorCTB4ZmM5MTJmMTYsIDB4NTdjMjFmOWMsIDB4ZWRmMTVlYjQsIDB4N2M5OWZkZTksIDB4ZjJlNTJhODgsIDB4M2YzOGU4ZWYsCisJMHhmYmMzOWUxNSwgMHg5YWRiYjJhZCwgMHg3YzhlZmJhZCwgMHhmZWRkZDk5NSwgMHhhNTNlZGUyYSwgMHhlN2M2MGUzYiwKKwkweGZkYjFhOTEzLCAweGE2YjIwMWQ1LCAweDhlOWM3NGY3LCAweDdlODQ1N2MwLCAweGYyZGY3ZDMzLCAweDRkNmZkMzEwLAorCTB4NDVhNTAzZGYsIDB4MzBmMTdlNTAsIDB4MGVmODFmZDMsIDB4NTc0YTNmYzYsIDB4ZWY5NjNmYTgsIDB4M2RhMDI1OWYsCisJMHg1OGU2ZjNhMCwgMHhlNjQ1YmQ3YSwgMHhkNzJmYWQ3YSwgMHg5NmU5NDI3MCwgMHhiYzA4ODQ4NCwgMHhjODQ5ZmQ0MCwKKwkweDU5NWY1YzdmLCAweDE3N2U4MWJhLCAweGQwYmQyZjYxLCAweDNlYmEyMzllLCAweDcxOTc2ZjRkLCAweGZhMDUzZmZkLAorCTB4ZmViNzRkN2YsIDB4ZWY0YzhkOTMsIDB4ZmM5ZmY2N2IsIDB4MDcyMzZlMmMsIDB4ZjQxMjc5OWUsIDB4NWZhN2VhOTUsCisJMHg0Yjk1N2QwNSwgMHhkZDdmZGZhMCwgMHhlZGRlZjJkNiwgMHhkYWZmNGY1NCwgMHhkZWE5ZTlhOCwgMHhiNGY1MWE3ZSwKKwkweDEyNzhjNzdjLCAweDZhZmY0ZjRiLCAweDdhOTg5MTc3LCAweGQ0Yzc5ZjRhLCAweGUyMWI3YjUzLCAweGZkOTRmZmY4LAorCTB4Mjg5N2Y4ZDQsIDB4ZDlhN2Y5ZWIsIDB4NjhmODllYzMsIDB4NGEyZjg3YjQsIDB4NjhkM2YyMmEsIDB4NjFkZmU5MGYsCisJMHgzZjhkMWI5MiwgMHhkZTFhNzcwZCwgMHg3NTVkN2UyYSwgMHgzMDlkZDgwNSwgMHg4NWRjMzUyZSwgMHgyZWUxYTk3MSwKKwkweGUzYWI3ZTJhLCAweGNmZmNiMTlmLCAweDc0YTI2YjEwLCAweDRmZDRiN2NkLCAweGE1ODQ3OTgxLCAweDJiYmNlMDhiLAorCTB4ZWI4ODk2N2YsIDB4MDQ4Yjk2YTYsIDB4Yzg4MGJlZjUsIDB4N2RmMDZmYjgsIDB4ZjA3OGNkNTMsIDB4ZmRmY2E3NDMsCisJMHg1MmY3YjNiNiwgMHhiZjEzZTc3YSwgMHhlYmU1ZDZjYywgMHhiZmViZjQ2NCwgMHhjOWFiZWFmYywgMHg3M2I3M2ZiNCwKKwkweGVjYTdjZWZlLCAweDYzY2E4OWJlLCAweGUyODQyNGFlLCAweDI0ZjM5ZDI4LCAweDgyNDg0ZmUyLCAweDNlNDBhY2Y4LAorCTB4N2U2M2EwOGUsIDB4N2YwZjNlYjksIDB4ZWJiYjUyNTMsIDB4YWZmZGVkZTksIDB4YTZmOTBmM2IsIDB4YjYzZWRiZTksCisJMHhhNDJlZjU3NiwgMHgyOTc5YjE0MywgMHgyMGE1NGYxMiwgMHhlZjNmY2E1NywgMHgwNDMwMjEzOCwgMHg1NDliNTJlZCwKKwkweDdhYWYzMTEyLCAweGI3OWRkYjljLCAweDBmMWNjZGE3LCAweDljZmU0YmZlLCAweGU3MGMwOTUxLCAweGViN2U3MTgzLAorCTB4YmNlYmY2ZTUsIDB4YmIwMDRkNWYsIDB4MGIzOWJlN2UsIDB4MGZlN2FmZTcsIDB4YjU4ZjhlMmQsIDB4ZTM4NWIyNmYsCisJMHg1NzVmMDBlYywgMHg3NTBiYjRlOSwgMHgyNzdkYzUyMiwgMHhjNWZmNDJlOSwgMHhhZDkyYjc2ZiwgMHhiZWZkZDYzMSwKKwkweGU0Zjg5YjJmLCAweGZlOGRjYjgzLCAweDczNmU1NDg5LCAweGQxZTcwZTM5LCAweDIyNzIxMzRmLCAweGE2ZWIzNmU0LAorCTB4NWEyMzkyNTMsIDB4NzFmN2YwMGUsIDB4ZGJlYjNjYzQsIDB4MGQ3MDE3ZjIsIDB4YjZiMTZkZmMsIDB4ODhjNDk2MTUsCisJMHhmMzg0ZmRkNywgMHg1ZjJiY2E2ZiwgMHg2OWQ1ZmVlMCwgMHhmMDEyZjljZCwgMHhkNDVkOWE3MSwgMHhkNDFlMzljNSwKKwkweDE5MjQ3NWY0LCAweDc5NGQ3NDA5LCAweGUzYTNmOTY1LCAweDg3YmQ4ZTI5LCAweDU3ZWMxNzQ0LCAweDUzOWYzNmY1LAorCTB4YmJlNjMxM2MsIDB4ZmQ0MjdlNDYsIDB4OTAxZTQ3ZTAsIDB4MjNhZmM4OWQsIDB4ZTAxMmM5NzIsIDB4NTZkOTkxZWIsCisJMHhlZjk2ZWIwMiwgMHg1OGFhYWUyYSwgMHhiMzM3NGU3NCwgMHg1MjNjYzg3OCwgMHhlMTM4ZDlmMiwgMHhlNmZlM2VmZiwKKwkweDE1MGY4OWNmLCAweGI3OWM3ZTUwLCAweGQxYzBmZGIzLCAweDdmN2E2M2Y4LCAweDZhMDQyOWRlLCAweGM4YTFjMDA1LAorCTB4MDA0MjI5ZjIsIDB4YzQ4NTY0ZTIsIDB4MDE2NGU4ZjMsIDB4NDhmYWZkZjUsIDB4MmMxZjk1ZmIsIDB4ZDVmNjAxN2QsCisJMHg0ZTBiMzc1NCwgMHg5NmFmMmQxMywgMHhiMWMwMTRkYSwgMHgwMjVkYjgzNywgMHg5NTQ2ZmNmZiwgMHgyMGRlMzFiOCwKKwkweDE1OWE4Y2Q1LCAweDIwM2FkNzExLCAweDk2YWZjODRiLCAweDI3N2VkZGJmLCAweDJjYzJmN2YwLCAweGRjYmEwMTMzLAorCTB4NjAzOWNmMjMsIDB4M2NkMGJmZGMsIDB4YTdhMGY1MTYsIDB4NDdjMWZkN2UsIDB4YTA5MzRjYTYsIDB4MzBmODgyMWUsCisJMHhjNTMwYTFlMiwgMHg5ZWNmY2JhNiwgMHhhOGJhMDY0YSwgMHhkYjk4YTZkYywgMHg5MGM1NzFlZSwgMHhlMTg1MzJkZiwKKwkweGNkZjZjZmFjLCAweDdkOTlmZmYyLCAweDFiZWQ0YzliLCAweDY5MWNiNWMzLCAweDUxMmI0NmRmLCAweDJjN2ZhZGY2LAorCTB4NTZiMmI2ZmIsIDB4NThiODBmZWQsIDB4M2ZhYjM3YjksIDB4NmJlNTc1YzgsIDB4YjJjNWZhNGIsIDB4ZDhmYWFmNmYsCisJMHhiZTM1ZmRmYywgMHgyMDczYmIwZiwgMHgyM2EzNmZiNSwgMHg2YTQwZGJlYywgMHg2ZGM0NjJkZiwgMHhmZmNkMTVkMywKKwkweDU5YmVjNWVjLCAweGVmZjQ3N2ZlLCAweDMxNmZiMDU1LCAweGQxNTIzYmZhLCAweGU2YTJiN2RiLCAweDQ1NmZiNDVhLAorCTB4N2VkZDQ1MDMsIDB4Y2Y4NTJjYTgsIDB4NmZiNDdhZTcsIDB4MWIzNjdmMGIsIDB4MTZjYmIyZjMsIDB4NTdjMDNmMDMsCisJMHg3MWFmNmZiMCwgMHg4MGVkMDczYiwgMHgzOGE0NWI5ZCwgMHhkYWJlZmRiMSwgMHhkYWJlZDJiOSwgMHgzZTI1ZmZiOSwKKwkweGU1NmU3NjZiLCAweDIzOWU3NjIwLCAweGNlY2M4NzFhLCAweDc2NjRjY2FkLCAweDY2NWVlNTZlLCAweDYzMGU1NmU3LAorCTB4ZGY2OGNlNzYsIDB4MWJlY2EyMGEsIDB4MDQ3YWJlZmIsIDB4OGJlNzFlZmQsIDB4ODNiOGJmOTksIDB4OTVjZjE3OTYsCisJMHg3ZWZhMTY1ZCwgMHg1ZjlkYWFiMSwgMHg2OTFmMTlhOCwgMHgxMjI5MTZlZiwgMHhkZWNhMzlmMiwgMHgzOWUxY2ViOSwKKwkweGRkZWNkZTkwLCAweDg2ZWY2MDViLCAweDBhMWIxZGEyLCAweGM3YzQ2NDdhLCAweGJhNmQ0MzBkLCAweGJlNDc3MmZkLAorCTB4NGJmNWZmNjgsIDB4MTA3ZjJmYTAsIDB4YmVmZDllNzEsIDB4ZjY4YmNkODksIDB4MTYzZWQxN2QsIDB4YTczNzZlZjQsCisJMHhjOTg1NTFlNywgMHg0N2U3YzNiMywgMHgyNDc1M2E3YiwgMHg0M2FhZjdkMywgMHg1NDRlMzg3MSwgMHhiZmFjMDkzNywKKwkweDE1MDEwYmY3LCAweDVkYmY4MWM2LCAweDlkZjJmOWMyLCAweDc5N2NkOTdiLCAweDgzZjE5OThlLCAweGNlYzg5YmZjLAorCTB4MmMxNjUwNWQsIDB4ZGNjM2MwOGMsIDB4ZDcxODE1NGIsIDB4MGIxMTJiOWMsIDB4MGUwYmFmZjgsIDB4ZmMwYTcwZGQsCisJMHhkNjk3MDVkNiwgMHgwMGJiYmZhMywgMHg4OWJlYzM5ZSwgMHgzMmViNmRlZCwgMHgyZTc3YmI2OCwgMHhhMWRlNzAxNywKKwkweDE3OThlZmVkLCAweDNmN2E5N2I2LCAweGVjNzM3ZTc2LCAweDM4NTMxYTdkLCAweDEzZWU1MzNkLCAweGE3MmZiMDAyLAorCTB4MmYxMDdkYjcsIDB4MjM5YmZkNzIsIDB4YzhiZjIxYjYsIDB4ZjhjYzYyNWIsIDB4OTg1ZWY2YTQsIDB4OTdjNjJlNGYsCisJMHg2ZmNjNTVhYSwgMHhmMjg5ZjMwZSwgMHhmOWEyMTU0ZCwgMHhiYzVkMjU0NCwgMHgyZjliYjUzMCwgMHhmZGE0ZWU3NywKKwkweGJmYjllOTRkLCAweGY3YTJkZjFhLCAweDNlNzFiOGUxLCAweGQ3YmY4MGIzLCAweDNlMzQxZjEzLCAweGYzOWZmNTQ3LAorCTB4YjhhOWZhOWQsIDB4OGZjOGM3OWYsIDB4NWNjZWNkNDYsIDB4NWU4MTQ2NDMsIDB4M2NmMjZmYmUsIDB4ZjQ3MDFlM2EsCisJMHg5NDJmOTQ5ZiwgMHgwZGU2ZGJjZSwgMHhkOWU3OWRkMywgMHg5MzcyZjljNSwgMHg1NGI0ZDhlNywgMHg2YTQ4ZjgxNSwKKwkweDk3Yjc2NzAwLCAweDRhOTAzZjZmLCAweDNiOGI3N2ZiLCAweGU2NDIwNzMzLCAweDc4YTZmZmIzLCAweDYyZDBmZTIwLAorCTB4YTgzYjQyZWQsIDB4Y2NjZDMwZTEsIDB4OGU1N2Y4NzAsIDB4OWMwMzIzYzMsIDB4MDliYzcwZDMsIDB4YWZkNDRlMGEsCisJMHhmMWNlYzE5MCwgMHhjYTVlNjQ3ZCwgMHg2ZjVmZDA2NywgMHgxNDRmOGY5MCwgMHg4NTlmYTA5ZiwgMHg3MjA1NzhkYSwKKwkweGE5YmNmZmExLCAweDViYzVjOTk5LCAweDZlNWNhMDIzLCAweDgxMDc1ZDI2LCAweDgyMjlkNWVmLCAweDJhYWI0NDJiLAorCTB4MjFmZjZlMGMsIDB4ZDU3YWI3ZWMsIDB4OWU4MzlmNGEsIDB4Y2RhZTBiOTcsIDB4ZjRmNjFkOGMsIDB4OTYzODk4ZDQsCisJMHgzNzE4ZTE2MiwgMHg5YjhjNDYwOSwgMHgyNGJkZTAwYiwgMHhjNjY4YjdkOCwgMHgxZWZjZWZmNiwgMHgzZjQ2NDdiMywKKwkweGY1Yjk4YTY1LCAweGU1MzNkMDA4LCAweDA5YjI2NGRmLCAweDdmZTgwNjFlLCAweGZhMzAzODExLCAweGYwN2E1MTMxLAorCTB4YTRmZGY3MzUsIDB4MmFmZGZiNzIsIDB4ZmMwZWMxYzgsIDB4MWZjMDUyZWUsIDB4ZjhkODg2ZjIsIDB4MjU3Yjk1YTMsCisJMHg0ZGYyMWE3NSwgMHg4ZTkwNDM5MywgMHgxYzk4ZTMyZiwgMHhjOGRmYTk2MCwgMHgzY2I0NWJlNywgMHg2ZmRlMWZlMCwKKwkweDdlZjg2NDE2LCAweDMyNGY5NTA2LCAweGZhNmE5YTJkLCAweDc3ODZhMGUyLCAweDJmY2QxYWIzLCAweDQ3YTQyNzg4LAorCTB4NmZiMDBkZDgsIDB4ZDU5NmViOTEsIDB4NGY5MWI3YzEsIDB4ZWVhMmFjMzcsIDB4MjdjZDFhOTksIDB4MDc2MDNlNGQsCisJMHgyOGFmYzcyZiwgMHg4ZmVlMDlmZCwgMHg5YmVhN2ZiOSwgMHg1OTlhNGZlYSwgMHhhY2ZiM2ZhZiwgMHg4NjhmYWY1ZCwKKwkweDAxNWVkYTM4LCAweDRlNjkwYWVkLCAweGYyMGZjNWQ0LCAweGQ2NWU2Y2NjLCAweGNlMjBmNTYyLCAweDVkOTM1ZWJiLAorCTB4ZmI2OGQ1OWIsIDB4MGI5NzE1NzMsIDB4Y2YyMjU3Y2MsIDB4MGU4NTRkZWYsIDB4ZDNiMWJhYzEsIDB4ZmFkMTNlNGEsCisJMHgyY2UxODQzZCwgMHhkNTc4M2M3MiwgMHhmNWY5NDFlYSwgMHg1ZTA0ZmY1NCwgMHg5OGZlNGY3ZiwgMHhiNDBlZmY5NiwKKwkweDU1MTZmYjA3LCAweGYxYzY3YjdkLCAweGY1Mjc4YjQ4LCAweDY2NjlhZmQ2LCAweDY5YmUzZjY2LCAweGJlNzZiNGJmLAorCTB4OTc4M2JhZWUsIDB4NGRmYzYyYjQsIDB4MmNkODdmNWIsIDB4YzMyZTdlN2EsIDB4ZDA0OGI4ZmMsIDB4Y2E1MDczYWQsCisJMHg5ZmYyZmQ3MSwgMHhlNTU4ZmY1MCwgMHhmYzQzZjUzMiwgMHhmY2Y5NDQyOCwgMHgzMWE3YjZlYSwgMHhmOWY2N2Q1ZSwKKwkweGZlODMzNzYzLCAweDQ4YWRmOGFjLCAweDNhOWY1NDJjLCAweDEwOTNjNWI2LCAweDgwYTIwN2RiLCAweDI0ZDE1MDlmLAorCTB4OTExNjdhZTIsIDB4MjMzM2I5NDIsIDB4ZDY0MjBjZmMsIDB4MTRiYzdlMzAsIDB4NjJhNzc2OGYsIDB4NGM1MDM5ODcsCisJMHhmNWQ4YWZiZiwgMHhkZGM0MzY0OSwgMHhmNjYwMWUzYSwgMHhjNzNjZmZjZiwgMHgxYjJkYmZhMywgMHgyNDJiZmJkNiwKKwkweDk0NmY4ZWI2LCAweDlmMWNiZGNmLCAweGU2ZGI3NjY3LCAweDFhMTZmZDgyLCAweDhhZDc3OWQ4LCAweDM5YjIzOWM2LAorCTB4NjU1MGNlMjIsIDB4N2I1YzU5OTYsIDB4NTlmNzBkYjcsIDB4NzAxMzlmZmIsIDB4MTdkMDMyOWYsIDB4ZGI1MmNlNzksCisJMHgzOWU2NzlmZiwgMHg4MjJiOTc2NiwgMHhjZGNlMDA3MiwgMHhlZjZjMzQ1NiwgMHhjNTc4Mzg4MCwgMHhhZmZhMzM1MSwKKwkweDBhNzM4NmRlLCAweDVmNTNhN2Y4LCAweDIzZmQwMTdhLCAweGM1ZDQ1MDZmLCAweDhmZTJhMzQxLCAweDBjYzg2MjBkLAorCTB4MmFhNmIzZjEsIDB4N2YzNDAzYjQsIDB4YjE4ZGYzMGMsIDB4YzViZGYwZTMsIDB4YjRiYzU2YzksIDB4YjI5Zjk3NzcsCisJMHhjZmNiYzU3MCwgMHg2Y2RjZjAzYSwgMHhjNjA3NTZlYiwgMHgxZjJlMWIyMSwgMHgzNzhhOGZmZiwgMHhkOTc0M2UzNiwKKwkweDhlNjllMzc4LCAweGY1OTk1ZjhmLCAweDIxYTQzNWViLCAweDk0OTBlMzE5LCAweDE4OTJkY2JlLCAweGVlMzA4YjcxLAorCTB4MjllY2Y4NWYsIDB4YjMzYjBmNTgsIDB4MDE0ZmFmZTMsIDB4YjhmZjk1YmQsIDB4ZTA3ZGQ0ZjAsIDB4M2FiM2VkOGYsCisJMHgzZWY2YmM2MSwgMHgxM2Q3MDQ3ZiwgMHg3Mzc2ZWZiNCwgMHhlZTc4ZWYzZCwgMHhlOTg3NWM1OSwgMHgwNWQ5YTNmOCwKKwkweDNkZWM3NWI1LCAweDIzZDYxODMxLCAweDkxN2ZiNjNhLCAweDU1ZGI3MTBhLCAweDNjZTNhNzdiLCAweGE5Y2VkNTZkLAorCTB4Nzk4YzQ5ZmQsIDB4NmUwMjk2ODAsIDB4MDc1ODdkMDMsIDB4YTVhYmNhMzIsIDB4ZDAzMDY1YTksIDB4MWJjYTk2NzksCisJMHhmYzcwYjY1YywgMHhjNThhYjFiOCwgMHgzNzFlNTVlMywgMHhiZDdiMTZkZSwgMHhkYzRlMmEyZCwgMHhlYjk2ZjMzNCwKKwkweDkyNmVmYzYwLCAweDQzZTkyYTVkLCAweDk1MzBmOGJjLCAweGM4M2VlOGUzLCAweDlhNDNkYjZmLCAweGJmMjk4ZmJkLAorCTB4MmEwZmYwYjMsIDB4ZjIwZGY3YTcsIDB4Yzk2OWFjZmIsIDB4YjI4NDllYWYsIDB4ZTMxZWU0YTYsIDB4ZjAzZWExYzUsCisJMHhkYmNmNWI0ZCwgMHg2YzdmNzY2MiwgMHhmMWQ5YmQwNiwgMHg4M2NmOGM2YiwgMHg4MzVjZThkYywgMHhkOWYwYmM3NCwKKwkweDljYjM4ODYwLCAweGMyZWViYjk0LCAweGNkN2IzM2ZkLCAweDYyYWEyZmI4LCAweDNmYThmYmVmLCAweGM2ZGYzYjFkLAorCTB4ZDdjMjMyZjUsIDB4Zjg0ODNhZDUsIDB4ZjA4M2FkOGYsIDB4NGI3NzljMzksIDB4NzMzMzhiM2MsIDB4NWExYzQzZmUsCisJMHgxZTczZTA3NSwgMHhkNjM4NjY2ZiwgMHhjNTNkZDBlMiwgMHg2YzJkZDM5ZiwgMHhjZWI2OTEzZiwgMHhjZmU1YjU1OCwKKwkweGY1YzQzMTBhLCAweGQzOTAzYzg1LCAweDhiYWVjYmIxLCAweDAyNzA3YzZhLCAweGFlNDQyNjFmLCAweGYzOGVjNGE3LAorCTB4YjhkZGQ3ODcsIDB4ZTA3ZTQwYmMsIDB4NGJkNzg1N2YsIDB4YzQyMDdlNjgsIDB4ZmJjMjAzY2YsIDB4ZTgzZDg2MjQsCisJMHg2MWQ2YzRkOCwgMHhmYmQ4ZTQzYSwgMHg5NWY1YjUwZiwgMHg0ZjQxOGIxNCwgMHg1NzViN2QwMywgMHhhZmZlOGRlOSwKKwkweDI2MTkxZmNiLCAweGY5YTNlMzliLCAweGQ4Y2JlNjc0LCAweDQ1ODI3Yzc2LCAweDYxZmI3NmY4LCAweGY1YTg4NTJhLAorCTB4Y2ZhYzBiN2YsIDB4NjA1MzFkMzcsIDB4NjM4ZGExZmUsIDB4ZjBjZjdmNWEsIDB4ZTc5OWYyNzksIDB4YjFlZjNjNDUsCisJMHhlZDA1YjFhZSwgMHg1NDVlZDFiOCwgMHgzNDFmMTYxMywgMHhkMzgzM2JkMiwgMHhlMzY0MWQ1YiwgMHhmMTFkOTljNCwKKwkweGU3YWQzYjAxLCAweDExYmIyYmNjLCAweDhlZGJkNWNmLCAweGRmNWE3ZTI5LCAweDk1OTc4NmMxLCAweDUyZmQ4OGI2LAorCTB4MjIwNDRlMzAsIDB4ZTJmMzNmZTgsIDB4N2ViNjZjZmUsIDB4YzZlNWU2YzQsIDB4NzZmMGU2NzYsIDB4ZGJiMWNkYmMsCisJMHhhNzNiNmVmMSwgMHhiZjg1Njc2YiwgMHg3N2U3NjE1MSwgMHg2OWRlZGYyZSwgMHhlYTA3M2RjOSwgMHgxMzJhZGQzYiwKKwkweGJhN2ZiZmQ4LCAweGM0MGEyYzUxLCAweDQ1OTI3ZjY4LCAweDRjZjJlMmQ2LCAweDg5NzhlODZmLCAweGQ5ZTMxZGU3LAorCTB4NDkzMTQ2ZjksIDB4NTU3YWZmNDEsIDB4ODRkMWRlN2MsIDB4MTUxNTQ4MTQsIDB4NmE2YjE0ZTIsIDB4MzVkMmZlZDksCisJMHg4MWE1NzdkZiwgMHhkZTI0ZDdiYywgMHg3NTZkZWI4NiwgMHg1MzNhZmUwNiwgMHhiZjEwZjk5YywgMHgxOTJiNGU3MCwKKwkweGRhMzU3MDA3LCAweDQ5Yjc0NDliLCAweGY4YWFmZjQ3LCAweDFlNzBmZWEyLCAweGM3ZjcyZDdmLCAweGYzYzJlNDg4LAorCTB4YjBhM2EyOTcsIDB4M2EyM2ZhMDgsIDB4OGM2YjRlNGQsIDB4NWVkOTA1ZjUsIDB4N2MxMTNjNDIsIDB4ZjNmYTlkOTEsCisJMHhiMWNiZTQ5MiwgMHhlZGEzZDQyYSwgMHhiNGI0YTlhMywgMHhhNzQyYzQxZSwgMHg0YjBhYjcxYiwgMHhmY2RkZWM3OSwKKwkweDc3ZWM0ZTU5LCAweDRmM2UzNmU3LCAweDk5ZDUxMzcwLCAweGMxODNmNmNhLCAweDIzYjlkMWI4LCAweGM2OGM5YjIxLAorCTB4ZTI5Yjg5MGYsIDB4MGI5ZmM2ZDEsIDB4MDdlZmY2ZGIsIDB4NDFkNmI0N2IsIDB4Y2Y1NDg5ZGMsIDB4MzE1NTU3MjgsCisJMHg4ZThkY2UwYiwgMHg4MDU5MDhiMSwgMHhmZTZmNzNkMywgMHg2ZDZiZDY5NiwgMHhkMGZlNzExNiwgMHg4NWY2ZDc2OSwKKwkweGNmNDExM2JhLCAweGRjMTFlNDZjLCAweGZlNTAwN2ZmLCAweDRlOWJiOTJhLCAweDAyNDBiZWUzLCAweGRmNzZhNGFmLAorCTB4YjQ1ZDMxMmIsIDB4ZmNlN2JjZTMsIDB4MTAwNzE2NDYsIDB4OThiZmQ1YzksIDB4MjQ3MGUyY2MsIDB4ZjFmM2Y0MDAsCisJMHhmM2E3MDU2NCwgMHg3ZWYwYTQzYywgMHgzYWU3ODI5OSwgMHg3MmY2YmQ5NiwgMHgzOTMwODg2ZSwgMHhiOTJiZjI0NCwKKwkweGI0YmU3ZjQ4LCAweDg2YzhlYWRlLCAweDc3ZTI3OTc1LCAweDk5MzljMmI3LCAweGJmNWY1ZTMyLCAweDUzYjlmZDEyLAorCTB4ZDA3ZTdlYWEsIDB4NGY1YzI1ZDMsIDB4ZjBiNGJhZmYsIDB4MzJiZmQ4MTAsIDB4ZWJiNDUyY2YsIDB4Y2ZlYWU3ZmQsCisJMHg1OWY3MWFhNSwgMHgyZmIwYmQyMSwgMHg5M2RkZWE4YywgMHhhYmJlZjQ0MiwgMHhkNmM3ZTZmMiwgMHg3YTM5N2NjMSwKKwkweDAxMTkxNWZmLCAweDQ4MmFjOWZiLCAweGU3Y2UwYjljLCAweDk3ZDA2OGFjLCAweDc5YmIwM2VmLCAweGQ4OTNiMDE1LAorCTB4ZWJlZjE3MmYsIDB4YzM2ZGJmOTUsIDB4ZGM3OTMxN2YsIDB4MGFlYmY5NjUsIDB4ZTJkYmZiYzEsIDB4ZWNiMmFlMzEsCisJMHg5ZjY4YzViNSwgMHhmZTdhNjljYywgMHg3ZjNkNTU1YSwgMHg3YzhjMjM2ZCwgMHhkZTM5ZjNkNCwgMHgzNjliZTdhNSwKKwkweGNmODllY2ZmLCAweGYzZmE3OTA5LCAweDRiM2U0NmJlLCAweDAyMWJjNzg0LCAweGI1MTEwZTJjLCAweDA5YjgyZGJmLAorCTB4ZDlmMjM2ZTksIDB4MGI3NmQ3YzgsIDB4N2NlMmY3NWYsIDB4OTYyNTdmYTUsIDB4ODFiMjY2NTQsIDB4ODQyOTc0ZWUsCisJMHhhM2Q0NjE3YSwgMHg4MDQ4N2IwYywgMHgwOTRhMGY3ZiwgMHhhZTU3ZTJkNCwgMHg2OWVmYjQ3OCwgMHgxOTQyM2ZiYywKKwkweDdhMDZjZWZiLCAweDJlYmQwMjI0LCAweGQxMzgyM2Q0LCAweDQ2ZGU3NjA3LCAweDViYjY3MDNlLCAweDkwOWY1ODQxLAorCTB4NTllOWFlYWYsIDB4ZmU5NGY3OWUsIDB4ZmEyMmQ4ZmUsIDB4ZWZjMDQ2ZDUsIDB4NzYyYmQ0NjgsIDB4MDQ4OTM3NmUsCisJMHg5ZTgyNjRkNiwgMHg2ZTMwOWNiYSwgMHg2YTJjZmEzNywgMHg5ZmY3MDQ5OSwgMHgyODZjYjUxMCwgMHhjNGUyN2JkYywKKwkweDFmN2NjN2Y0LCAweDgyNDhlNzRhLCAweDQzMWI4MmZiLCAweDNlYzE1MzE3LCAweGViYTczOGZkLCAweGRlN2JiMDY2LAorCTB4ZWMwNGE0MjUsIDB4NmM3MWNkZTAsIDB4YTc5OGIyOWUsIDB4ZGMyYWI3N2YsIDB4ZWQ3YjRlYWUsIDB4NTliZWY4N2EsCisJMHg3ODVjZTE1NiwgMHhjYjU2ZjM2NywgMHg0NTA3YzgzMCwgMHg5YmM0N2ZiYywgMHhiNDE1Nzc1OCwgMHgzMzJjZDFkZiwKKwkweDgxMmNjYWJhLCAweGQ4YmYxMDYxLCAweDFkYmI2MzJiLCAweDdjZjE5MzY1LCAweDZiNmZkODY1LCAweDNhNDBmYjY2LAorCTB4MmM3MTNmOWIsIDB4MWRlN2IwOGUsIDB4MDU1ZTlmYzEsIDB4NGMyN2FjZjEsIDB4MGM5ZmY3YjEsIDB4ZmRmODlhYjcsCisJMHhmYzcwZGYzNSwgMHg3ZmRhOGM2ZCwgMHhmNmNhZGMzNywgMHgwODc4ZmRjNywgMHhlOTc1NDdlZCwgMHgzMzBlM2U3OSwKKwkweGNiOTZiODdkLCAweDZmNGJmN2Y5LCAweDZjZWZmZWMwLCAweDQ3MTg1NDE2LCAweDZlM2JjNTBhLCAweDM5ZmI0NTFjLAorCTB4ZTNjNDg4ZjEsIDB4MzkyZTJjMzAsIDB4OWJiZmJmOGUsIDB4MWY4MGQyYjgsIDB4MDIyM2FmMTMsIDB4M2ZjNGYzZTgsCisJMHgzNWI3ZGMxMiwgMHhjZTI5NjZhZSwgMHhhMGViN2VhYiwgMHg3NTg2Y2YzOCwgMHhiMDViOGE1MiwgMHhlOGVjNjc3MywKKwkweDk1NmY4ZmJmLCAweDljNGNiODc0LCAweDc5ODE2OWU2LCAweDA0YTM4NGU2LCAweGEzODRlZGVkLCAweDEyM2NmMmZhLAorCTB4MzY5ZGIxMTAsIDB4NGY2YmYzZmQsIDB4NTYwNWYzZWEsIDB4NDkwNzZmOGUsIDB4Zjg2ZjdjMDUsIDB4M2FiYTQ0NTIsCisJMHgwMWViODhiYiwgMHhkOTY3NmY1YSwgMHhhNmVmYmMwMCwgMHhkYTljMjJmMywgMHg2Mjk3ZTlhNSwgMHg3ZTcxYWM1MSwKKwkweGYyODFlMDI2LCAweGUwODUwOWViLCAweDUyYzRmMmY4LCAweDVmZWZjNjNiLCAweDA1NzE1YTU5LCAweDdmOWZlYjhjLAorCTB4YWM0NTczY2YsIDB4NzYxMWUwNzMsIDB4YWZlZDgxMjksIDB4ZTI1MDI3NzIsIDB4MGFkN2FlMjksIDB4ZTk3NWRmOGMsCisJMHhlYmY2MzEyNSwgMHg3MGQ2Mzg2YiwgMHg3ZDM5ZTFhZCwgMHhkNjI3OWM2OSwgMHhhZDBmYzRiZSwgMHg1ODI5MGZjYywKKwkweDYwNTA0MjNhLCAweDIwNGZiNjVlLCAweDA3OGVkN2MwLCAweDM3M2Q5NzNjLCAweDY0MGYyN2UzLCAweGUwZGUzZDAwLAorCTB4MmRiM2Y0MDUsIDB4OTYzYjgyY2QsIDB4ZWFjYWIxOWYsIDB4MDdiZWYzNjAsIDB4MWZiMGI1ZmMsIDB4OTRhYTVlZWYsCisJMHhhZTdiMWY2MCwgMHhhYmNlMDM3NywgMHgyYmEwODc2ZSwgMHg1YmE5Njc3YywgMHg5NzcwZTc4OCwgMHg4ODY2Yzg1OCwKKwkweGU5NzU0YjY3LCAweGVlMDNjNmI3LCAweDQ3NThjZWE3LCAweGM0YjI3ZGU5LCAweDQyN2U3Mjg0LCAweGZlZmQyMTc2LAorCTB4YmUzMDQyMmEsIDB4MDNiNWUzYzAsIDB4MjI5YjI2NmYsIDB4YzBmZjIzY2YsIDB4OTViMGZmOWEsIDB4ZDViMGZiZDYsCisJMHhmNjQ5NzI4OSwgMHhkZmEwMDRiOCwgMHhlNWZmZGZmNSwgMHhiY2VlYmQwMCwgMHgwZTM5NDY2NCwgMHhlZDFmZjNlMCwKKwkweDRmOWNhZGJiLCAweDZiZGNlM2EzLCAweDNjYTRmZjAxLCAweGU1YzNmNTA1LCAweGM5NjVhODcxLCAweGU1MDEyZjcwLAorCTB4NTQ3NThjN2IsIDB4ZjI0ZDJmY2QsIDB4ZTk0NmRiNTAsIDB4ZjA5YmIyNDksIDB4NzZlMjJlN2UsIDB4ZGY2ZDRlYWIsCisJMHg0NWVmZTExOSwgMHgwOTA5MDNlOCwgMHg2OWE1ZjYwNCwgMHgxNjY4NTRmNiwgMHhmZjE0ZjE0MiwgMHgxMGY2MmNlMywKKwkweGNhOTIzM2NjLCAweDA5MjliZjY5LCAweGY1NjE2MjU2LCAweGMyNjc0YWI1LCAweDlmNzFhYWU3LCAweDJlNjVjNTNiLAorCTB4YjgyMjZlMWMsIDB4ZDIzNjBkYWYsIDB4OWQ5YWZkNDIsIDB4ZGFmM2VjZDUsIDB4NjZmNjgyNDQsIDB4NjA1MjYzZWQsCisJMHhhMzY3YWQwZCwgMHhmODg1NjZkNCwgMHgyZDViYTY0OSwgMHg0OTQ0YWQ4MCwgMHhiZGU3OGE5MiwgMHg3ZDMzOTUwNywKKwkweDMyZmQ2NWI0LCAweDUwYWZlYzMxLCAweDBmZjMxZjY1LCAweGY1YWM0MTcxLCAweGZjYzM4ZmJhLCAweGZjMDBiY2YyLAorCTB4ZjVkNDNlY2EsIDB4MmUzNWI4MGEsIDB4NzVjZjZiMmIsIDB4NzlmZTgyYzAsIDB4M2Y3MDZlZDgsIDB4YmI4ZjkwYWMsCisJMHhiMTM1M2YxMywgMHhlYmExMDJmZCwgMHhiNjlkYmY3MSwgMHgxYmI0NjY4ZSwgMHgxNWRlMGY1NCwgMHg5NTNlYWY0MSwKKwkweDc1Y2Y5ZTA4LCAweGI1NzJmZmQzLCAweGY2MTE3NzJkLCAweGI5OTM4ZjgzLCAweGY0MTY5YWMxLCAweDJkOTFjNGRkLAorCTB4NWY2YmM3ODAsIDB4YTIzOGJiYzcsIDB4Mzc4NGM4ZWMsIDB4ZGU4MDZiM2MsIDB4OGMzZjZhNmYsIDB4YTIxMzE4NzgsCisJMHgzM2U1YzhmYSwgMHgyYTdiODU1MiwgMHg5NDNjZTE5YywgMHhmY2Y5NWFiNywgMHg5NDliZGI4ZSwgMHhkMWZkNzFkMiwKKwkweDMzMzhlNWFmLCAweDZiZDM1N2YyLCAweGFjZTdiZWEzLCAweGIxOThiNTc2LCAweGMxMzIwMGQ2LCAweGJhMTEwZWQ4LAorCTB4YzBiMzUwZTksIDB4ODIyMWJkMWUsIDB4NGY5OWRmN2YsIDB4YmFlOTQyZjEsIDB4ZmMwZWY0MTcsIDB4MTk4MThiZjMsCisJMHhjZDBkOWI4MCwgMHg3ZTgyYjFkZiwgMHhhM2YxZTM3YywgMHhiMTFkN2U5OSwgMHhhMjI3ZmFiZiwgMHhmNmNhYzNhNywKKwkweDBmODAzYjg3LCAweGYyMmZmYmQ1LCAweDcyODQyM2YxLCAweGVhOTVjYjBlLCAweDQ0M2M2NDQ3LCAweGU3MTFiZGMzLAorCTB4ODFhYzVlOWEsIDB4ZjBiMjMzMGIsIDB4ZjkwMTFjN2MsIDB4MGEyMzQyODgsIDB4M2EzNjRjZDYsIDB4N2Y5YWFmODEsCisJMHhjZmVjMjZiZCwgMHg5ZWI5ZTIyNiwgMHhkZWQ2NGU1NSwgMHhjYmYzNTkxYSwgMHhlZmU4MTY1ZCwgMHhmZTgyZjhhYSwKKwkweGY1MTc1Yjk3LCAweDk3ZjNhMjVlLCAweDVlMzBmMzg4LCAweDY3ZTcwYmE5LCAweDA5MGE0YmRlLCAweDdlMGI3ZjI0LAorCTB4YjllYjY5MDUsIDB4YzRhNTdlM2EsIDB4MDc1N2UwYzUsIDB4ZmZmOGQxZTgsIDB4NmQ5M2ZiMjcsIDB4NmE4M2NmZWMsCisJMHgyNWFlN2Y3NywgMHg1MWI2ZGY5ZSwgMHg0ZjdiOTBiYiwgMHgwNWMzM2E3ZCwgMHg4OTE2OWMzOSwgMHhkOTVlYmUwYiwKKwkweDUxZTc3ZTkzLCAweDJkZDcwNmZkLCAweDdhMGQ5ZjRhLCAweGVhOTliMTNjLCAweDhmNWEyOWIxLCAweGRlMDk3MjVkLAorCTB4NmJkYWU3NWIsIDB4ZDQ2NzdiNDMsIDB4NWZiYzhiZWIsIDB4N2JlMzFiNWUsIDB4MTE5OWU4OGQsIDB4NTM3MWYzMDcsCisJMHg1ZGMwNjBkNywgMHg4YjkyNGFiNiwgMHg0MWQ5YjEyOSwgMHhiNmFmYWQ5MSwgMHg5MWM2ZWIyNiwgMHg4ZmRkZjFlOCwKKwkweDJmZjM1Mjc2LCAweGY4ZDJiZjM1LCAweGU0YWZkODVlLCAweGNmMTY4NmUzLCAweGZmMTQ4MjE0LCAweGM3ZjdkZmI0LAorCTB4NWYwMWU2NzksIDB4ZmNkOTM4ZDcsIDB4ODI5YTBlMTMsIDB4YWIwM2ZjYmYsIDB4Y2ZhMDBlZTcsIDB4MDcxMGZiNDYsCisJMHg0MjIzMWFlYiwgMHgxMjVlMmM5OSwgMHg0ZjViZTlkMiwgMHhlODMzNjVmYSwgMHhjMjQ4NjM0ZiwgMHhjNzRmY2M3MSwKKwkweGNmNDI2MWIxLCAweDRiOGJmNGY0LCAweGFiNTJmNDY0LCAweGMwY2E3ZTAyLCAweGFiMWFjMjVjLCAweDdiYWZiODI2LAorCTB4NDdiYjM2NjAsIDB4YmIwZTYwNjYsIDB4ZTNkZmYxZjcsIDB4N2RjYzdhZDgsIDB4ZDBkYzZjNzEsIDB4NGI1ODFmZDIsCisJMHhjOTdlODFlZSwgMHg3MzliZjExMiwgMHg0MGRkMzliZSwgMHhlZjBmYzQyYSwgMHgwZGRmNzM4ZiwgMHhiOTE0YjBmYywKKwkweDRlMTkxZmIxLCAweGRlMjgxMmUyLCAweDAxNDZhNDMyLCAweDU1MjQzN2Y2LCAweDFiOGIwMmFhLCAweDQwZWUzNjEyLAorCTB4MjhjYmViNGEsIDB4ZGM2MWYzNTYsIDB4MTZiNmEwY2EsIDB4Y2QxOTIwZTIsIDB4NmNmNWNmYjEsIDB4NWRiZjkzODgsCisJMHhlYTI5YWJiYywgMHgzODg2Y2EzYywgMHg1NDFmNmZlNiwgMHg4YjkzN2Y2OCwgMHg3MDk0NzlkOSwgMHgwZjkyODZkYywKKwkweGJmODhlZGZjLCAweGYxZGIzYjBkLCAweGY1MGY1YjE5LCAweDFiM2UzMjI3LCAweDMwMjA1ZmU3LCAweGYzYzQ5N2U4LAorCTB4NjQ4ODU0M2YsIDB4OTFmOWMyNGQsIDB4OTlkZjA0ZGYsIDB4YjIzZjM4MmMsIDB4ZDgyMzU3MTEsIDB4NThlMjk3Y2YsCisJMHhlMDlkNzU1YywgMHg5ZmY5MGY1YSwgMHhiODE2NWQ0OCwgMHhmZmMzNDc2ZiwgMHhlYWRmMjc4ZiwgMHg4ZTJiZTg5MiwKKwkweGMzNjdjZWViLCAweGMzZWE5NTljLCAweDhlYWYyMGYzLCAweGFmODdlN2M5LCAweDBkNzQxZWM1LCAweDhiNzM3ODY2LAorCTB4OWFlZmZkYmEsIDB4NGViMjgyZGMsIDB4ODc4ODU2NmUsIDB4NzhlYmRhNDQsIDB4MWRmN2U3MDUsIDB4ZTYwYjljNDIsCisJMHgwNWNiMWQ0MywgMHhlMTYwYTc0NiwgMHg3ZDI0MDNlNywgMHg0M2RiODY5YywgMHgyNzc4MWM2ZCwgMHhiN2U5MTMyZSwKKwkweGJjMThmZjExLCAweGIyZTJjYzFmLCAweGZkMWEzZDAwLCAweDg2YTQ3M2UxLCAweDczYzY5ZTczLCAweGUxNTk2OWEwLAorCTB4ZWUzYTRkYjgsIDB4ZTA1MTJkOTMsIDB4YmU3MjJmOGUsIDB4OTdmZTg2ZDksIDB4ZGZmNGMxZDcsIDB4NjBmZTg3ODgsCisJMHg2ZTczMmUzYywgMHgxNWFiZjI5MiwgMHhhZTVmZGJlNCwgMHhkYjdiMDQ0OSwgMHgwZWUzY2VmZiwgMHgwZjkxYWY5MCwKKwkweGNjN2Y4MjlkLCAweGZhZGY1ODQxLCAweDlmNzMxYzgzLCAweGE1YTY5Njg4LCAweDdmMDUyODBkLCAweDBkM2QyZDM0LAorCTB4YmQ3OWVkNTMsIDB4MDcxOThhNWQsIDB4ZWVmNWNkM2MsIDB4OWViNWUzMWIsIDB4YzNmMzBjNTgsIDB4YjM5ZmQwZDMsCisJMHg3M2RlNzc5ZSwgMHg2MTc3YmFhMywgMHg4ZTNlYmM3YywgMHhkMTVlYmJmMSwgMHg4MDI2YThmOCwgMHg1ZGU3NzU5ZSwKKwkweDkyN2VlYzA5LCAweDkwZmY3NjQ0LCAweDgzNzNjOTkzLCAweDQ5MmE1MmNmLCAweGQxYjllZjkxLCAweGRjNDdlOTFmLAorCTB4MTE4MWU2MzMsIDB4YWQ5MzIwZDgsIDB4YmYxNjZiODgsIDB4NTA2NWNlZDEsIDB4OTdlNGM3NDMsIDB4YjlmYWU4YzgsCisJMHhlYzI5NGM2ZiwgMHhjYzZkOTE5ZiwgMHgzMGRjNWQyZSwgMHgyNTRiZGIxZCwgMHg1Mzg3NTgwZiwgMHgzMTJkMmViZSwKKwkweDczYWUyMGI5LCAweDFjOWZkMTc2LCAweDUxN2MxNDcwLCAweGUwMmU2YjQ2LCAweDkxZTg4OGZkLCAweGQ0MzFlMzZkLAorCTB4NjViN2YzOGQsIDB4ODg0MDk1NzMsIDB4OWVhNTJhNDIsIDB4OTcyNjI0MWEsIDB4YjhlZWI4MTksIDB4ZmY3MzE0ZDAsCisJMHhlNmM2ZGRiMywgMHg0ZTcxY2RkZiwgMHgwNmQyZDM0YywgMHg4ZDhkOTY5NywgMHgzOTQ0MGZjYywgMHg3YWE0Nzg2OSwKKwkweGFlMzY1ZTk4LCAweGM1MzA5Y2ZiLCAweDZmYjQwYTQ3LCAweDk5NGVhN2Q0LCAweDQwZGQ2MTA0LCAweDljMjk4N2IzLAorCTB4ZDYzZDlhZmYsIDB4ZjQwNTIxZjQsIDB4NGIwMWQ2MGMsIDB4ZTRkNDdkYTgsIDB4OWFiZjg0MzksIDB4ZmM0YWYxOGEsCisJMHhmZDVmOWExMywgMHg4ZTAzZTYwMiwgMHhkZWQwMGFlYiwgMHg4ZjVmZmQ1MSwgMHhkOTgyMzJmYSwgMHhkM2Q4MmI2ZiwKKwkweGU3NjUzODg4LCAweGMxMDdmN2RlLCAweGRmODdkZmZhLCAweGViMGYxMGJmLCAweGJhOTE3ZjQwLCAweDllN2VjMWUyLAorCTB4NzhkZGZmYmMsIDB4ZTFmNDM3MzgsIDB4NzE1ZTJjZmQsIDB4MzUxZTYxOTcsIDB4ZmFlY2M2YzEsIDB4NmM5MmI2YTMsCisJMHhkZjAyZDdlOCwgMHgyMjdhZTc3ZiwgMHhiMzU2NDk3MCwgMHgwMWU1OGQ3NSwgMHg1YzllNzBkMSwgMHg1NTRmMmY3ZiwKKwkweDllZTFiMjYzLCAweDViZDYzZjFlLCAweDMyZTdlZmM1LCAweGNiOTJhMWNhLCAweDRkYjZmOTYxLCAweGVkMGE4NjRhLAorCTB4N2ViNmRjN2IsIDB4YTA4ZjZlNzAsIDB4MTRkOTNjYmQsIDB4OGQxMWYzOGYsIDB4YzZkYjQ1OWUsIDB4ZmE3NzMwMjgsCisJMHhhZjk5YjM0YiwgMHg2Y2NhYjc3ZiwgMHhjMzE3NzA1YywgMHhmMzg3OTY3YSwgMHhjMWU3NDhjZCwgMHg2ZmFjMzY3ZCwKKwkweGZlZDhjZmM5LCAweGFkYjQ4NTk0LCAweDdhYmVkNGQ1LCAweDBiNzlkOTlhLCAweDdjOTYzZjYzLCAweGE3ZjYxNmE4LAorCTB4OTBmMjViYzIsIDB4Nzg2MmYzODAsIDB4NGUzYTdlZmYsIDB4ODgzZjU2NzksIDB4N2VjNjVlZWIsIDB4MzFjZGVmMWEsCisJMHhlNmQ1NWY5ZSwgMHhmY2I4Y2I1MywgMHhmNTA3ODhjYiwgMHg2YjVjZWEyZiwgMHgzNjlmNWIzMywgMHgxZmNlZmZjNiwKKwkweGZmNjFiMmNhLCAweDkxZmUzYzZkLCAweDc5YzAyNjRiLCAweDg2ODcxZGU4LCAweDNlZWU1YzI0LCAweDFlZmMzM2U1LAorCTB4MWE1N2I4MjYsIDB4ODIzZTkzZDIsIDB4NjU0ZGI2NjksIDB4YmYzNDY0ZjcsIDB4YWFlMDJmN2QsIDB4ZWYxZGI4M2EsCisJMHhmNmJhZmIxOSwgMHg5NGY5YWFhNiwgMHg2YjMwZjYwMywgMHg5MWZhODc3NiwgMHhhNDNmMDFhYiwgMHg5N2Y5ZDA0YywKKwkweDI4MmU5YmQ1LCAweGY4Y2JiZTZjLCAweDdlN2YwNzcwLCAweDFiMzdmNDA3LCAweDNmYWI1OWY2LCAweDdjZTU0YzlhLAorCTB4MzE3Y2E1NDcsIDB4YmYzMjFlZjIsIDB4YTZlZTdmNGQsIDB4ZmFkNWZkYWYsIDB4MmI1YmY1YTksIDB4ZDFmYmUyYWYsCisJMHhmODY5ZGY4YywgMHgyYzc4ZTZjZiwgMHg2ZWJhNTJkYiwgMHg5YWQxNjUwMCwgMHhmMzA2MjdiZCwgMHg0ZTc4NjhmMywKKwkweDExOTdjMzQ3LCAweDQ5NDhjYjNmLCAweDgxMTBiYTYxLCAweGIxNDdlNjkzLCAweGNiM2M5YTVmLCAweGZlZjIxNmVhLAorCTB4YmFmOGQzZmIsIDB4OGZjNDFhNWUsIDB4MTE4ZGMzN2EsIDB4ZGI3MjFkMWYsIDB4MjM2N2QwNjAsIDB4Yjg3YTNhM2UsCisJMHgzNjI3ZTQ1ZiwgMHhhOTk0MjdlNiwgMHg2Nzg4NDJlZSwgMHg5ZDc2Mzc1MSwgMHgzOTRmYzIzMywgMHhiYzFkZDUyOSwKKwkweDBiNmNmNDBmLCAweGY4YzQ3OWMzLCAweGQ3Yjk5Y2NiLCAweDU3Y2YxYzY1LCAweGUxZmRhYmM2LCAweGRiOTQzZDNlLAorCTB4NjAxN2Q4NDQsIDB4NWE3YmMzZjYsIDB4YjczZWVkM2IsIDB4N2MwNGE4NmIsIDB4YjRmNGMyMmYsIDB4NzQzNWM0YWYsCisJMHhkMmY5Nzc2OCwgMHhjMDM4MmUyNywgMHg0MTFjZWU4ZiwgMHgxMWQzOGUzMCwgMHg3N2Y3YTdhZiwgMHhmOWU5MTEzNiwKKwkweGE1NDM5NzFkLCAweDNmOGZmYWQ0LCAweGQyZGE4ZDgzLCAweGRhMWRmYjhhLCAweGEwNzFlNGJmLCAweGIxNDVjZDJmLAorCTB4ZmUyN2Y5ZmEsIDB4ODZmN2UxMWQsIDB4NGNmNWM1ZGQsIDB4ZTAyYzk3OWIsIDB4OTlhYmJiNzIsIDB4ZGEyZjY3YWQsCisJMHgzMGYyOGE1OCwgMHg0MzdhZDdlZSwgMHhkMDY2MTY3MCwgMHg2MzhkM2NhYSwgMHg1MWJmOTAxNCwgMHhkZjVjNGIzZSwKKwkweDUxNjA3ZGMxLCAweGYwOGYyMjcyLCAweGRjMWUwMTdkLCAweDJmNTY1M2E3LCAweDI4YzNkYzYyLCAweDkzYmI3Y2JmLAorCTB4NmI1N2EzOWQsIDB4NDJiNzFlNzAsIDB4NzkwZWJkOGEsIDB4YjVmNGRkYTUsIDB4YzdlYzYzZmEsIDB4ZWQwMTI2YzIsCisJMHg2NWZlOTFhNCwgMHgwZGQ3NmE1YiwgMHhkNjdmZDAyMCwgMHg4NDdlZThiZiwgMHhlMjVkYTIwNiwgMHg1NWZhZDRmZCwKKwkweGZmNzg1YzQ2LCAweDUwZmFkNDQwLCAweDcyMjRmNWRiLCAweGU2ZjJmNTNmLCAweGJmMmZiOGM1LCAweGIwOWZmNjlhLAorCTB4ODVjNjEyMzgsIDB4N2EzNWZhMzQsIDB4MTQyOGZkOGQsIDB4ODgxNmM4Y2YsIDB4NWMxNmFlZTMsIDB4ZWZhMzlmNjAsCisJMHhlZWViNzMyNywgMHhiMGQ4NWMzZiwgMHhhZmM4MjA3ZiwgMHg2NmZiNjI1ZCwgMHhjZTAyZmRkYiwgMHgyMDNmM2IwYiwKKwkweGJkNjA3ZDZjLCAweDNkNjllYjgwLCAweGVkOTlhZmNhLCAweDhlNTllYTA3LCAweGU3ZGMwYTM1LCAweDg4NTFiNjU3LAorCTB4ZjU2NWM3MjksIDB4MTFhMWFlZjksIDB4NjA3OTZhNzYsIDB4OGVhODZiODYsIDB4MWZkYzQ2ZGUsIDB4NTRhMWEyYjIsCisJMHg5ZDgwN2NmNywgMHhmZGI4OTNjNywgMHg0OGRmNGRlZSwgMHgzOGNjNjI0ZCwgMHg5YTVmYTY5MywgMHg5N2ZhNjliZSwKKwkweDNjZDk1NzZmLCAweGNjMWMwYTQ3LCAweGZlYmIwNGM4LCAweGE4NGJjZTE4LCAweGNlZGFiZTVkLCAweGQxZTYwN2Q3LAorCTB4Yjg5ZmFhNTcsIDB4NTgxZjViYTAsIDB4YjNlNGM3OTIsIDB4ZTdjNjJjNDQsIDB4Y2E1N2Q5M2QsIDB4MWU3ZDlkMDcsCisJMHg3ZmVmZDc2NywgMHhkMWZkYjZmOCwgMHg4NWU5YTFmYSwgMHg1ZWEzM2ZkNiwgMHhjNWFmZjkxOCwgMHgzMDcyOGNkNSwKKwkweDgyZTgxZmYyLCAweDdiMWJjMWY5LCAweDA0MDc4MTZkLCAweGE3NDY3N2QwLCAweGU5MTVhZjdmLCAweDcwMmI0OGVjLAorCTB4M2ZjODM5YzEsIDB4Y2U5NDA3YzAsIDB4MzFkYmY0ZWEsIDB4OTQ5NjIzNWYsIDB4Yzc1ZTcxZGEsIDB4ZmFlMzRkZTcsCisJMHhlMWM4M2YxNiwgMHhhYjRlZDY3ZSwgMHg0NzNiMmM3YiwgMHhiODBjOTI1NCwgMHgzNmRiNTI5OCwgMHhmOGE0ZTJkMywKKwkweDIxNzQ2NDdjLCAweGU1M2EyYmRjLCAweDEwOTliNmIxLCAweGM4ZjI1ZWZhLCAweDVmYjg0Mjk4LCAweGI2ZDZjYTdlLAorCTB4ZWEyZTJkNzcsIDB4MmQ4ZWQ1ZDcsIDB4NTdlNWZiODQsIDB4ZjY4MGRkODAsIDB4MTBkYjk2MDcsIDB4ODllNTNkNTcsCisJMHg5NTc5ZjJlNywgMHg1Y2NlM2ZiZCwgMHhjYmRkOWYzMiwgMHgyOTJiY2FjYywgMHgzYzc0MmQ4ZiwgMHhmYzNjM2NhYiwKKwkweDk1OWZhMGY3LCAweDEwNDVjNWFkLCAweDg4ODRhOWI3LCAweGFhY2YxZDM3LCAweDJkOTA4ZWRjLCAweDkzZTc4ZDliLAorCTB4NmNkYjdiZTgsIDB4ZjA3NjU1OWUsIDB4YzVhZDJlZWIsIDB4YjBmMmFkZjEsIDB4MGU0NGZhODQsIDB4NDRhOGI4YjEsCisJMHhkZmE1NmFmYiwgMHg3ZWEzOGRhZCwgMHhkYWVmZTUyZiwgMHhlNjBiOGIyNCwgMHgxZmI5ZjRhZiwgMHg5MzZiYjVlNiwKKwkweGYxMWFhYWRjLCAweDdjMWY5MzVjLCAweDM1YWM3NDA3LCAweGZkZmI3NWIxLCAweDY4NGYwZGFmLCAweGJmNzhjY2JiLAorCTB4YzMyNjQ3ZGYsIDB4NjdjNWE0M2MsIDB4OWU1OGQ0YzEsIDB4N2NmMTM4YWYsIDB4YzU4OWJlNDQsIDB4YmZlNThjMzUsCisJMHg1MTJjZWNkMiwgMHhkNTE3MDAzMywgMHhhZjE2MTQ4NywgMHg0ZmUwN2ZhNiwgMHgxN2E2MTE1NiwgMHhlYjlkODRkNSwKKwkweGYwNGMzYWFhLCAweGExZjU0YjFjLCAweDAyYzczYzQyLCAweGQ2M2ZmY2ZiLCAweDczNWZmMGUxLCAweDU3MWJhNThlLAorCTB4OTIwNTRmOGMsIDB4YzA4YTU5MzAsIDB4NTViYjM0ZjUsIDB4OWJmYjE3OTcsIDB4ODg3ZjQwNDYsIDB4NzM4MmU3MTgsCisJMHhhOTg2NjIxOCwgMHhiZmVkMDc2NiwgMHgyOTRkMDU3OCwgMHg0YmE3MjQzZiwgMHhlYTVhZmI4NCwgMHhlMTExNGVhNiwKKwkweDMyMzVhOWJlLCAweDYyNjIzZmRmLCAweGY2YjVjY2U3LCAweGI0N2YzODlhLCAweDY0YmRiNGY0LCAweGVjZmRjODA3LAorCTB4MzZiOWFkNWIsIDB4ZjM4MTdlYjYsIDB4NmJiZmFkNjEsIDB4NjAxMTM3MDQsIDB4ZTA4MDc1ZGUsIDB4MTQ5YzgwZjksCisJMHhiM2ZjMDJkMiwgMHhlMDFlNzcxMSwgMHgxMjdiM2RlZCwgMHgzNzViMzdlNywgMHg5MDE5N2ZhNiwgMHg5N2E2Y2NiYSwKKwkweDU3Zjc4YTU1LCAweGZhODQ1OTFmLCAweGRkMzA0YWUwLCAweDZmZjM0OTkzLCAweDdjYjE5N2Q5LCAweDI2NDJlOTg2LAorCTB4ZjZkYmYwODUsIDB4YzZiZjk2NzIsIDB4Y2QwODYxNzQsIDB4Y2U1ZjZiYmYsIDB4NDljMGIwZjIsIDB4ZjYyM2I2MDcsCisJMHg0OGZmNDI4YSwgMHg3ZGUzODc2OCwgMHhjMDFhZmI5YiwgMHhmMTYyNjRiNywgMHgwNTE1ZTkxNywgMHg3ZGI0NTNkNywKKwkweDQ0ZTk2YjIxLCAweDFlZjhmMDBiLCAweGE3ODg0ZGQ4LCAweGRhZmMxNmQ0LCAweDAyZWFmMTA2LCAweDNkZmIwYWI3LAorCTB4ODM3YmYzMzYsIDB4ZjFhYTY5YmUsIDB4NzA5OWI0NTUsIDB4ZjAyOTAzZmUsIDB4NGZjZTQzZmYsIDB4YzlhNDJlNGQsCisJMHg4YmVjMGQ3ZCwgMHg2YmVlOGQyNSwgMHhiNGVkMWQ2MCwgMHhmNjA2ZDNkZCwgMHhhZDFiZWM2NiwgMHgzNzdlYzA1MywKKwkweDVjYTdmM2JkLCAweDBhZmM5ZmJjLCAweDM3ZDhjZjU2LCAweGY2OTA5Y2U4LCAweDA2NmZlY2U3LCAweDhmNWM4YTZkLAorCTB4ZmZjZjZkM2UsIDB4NjJhM2JlMTQsIDB4NTA1NGZmNDAsIDB4YWEwZWU0OWQsIDB4NDRkYzZiODcsIDB4YmU2MGIyNTUsCisJMHgzNjJmOWZhYywgMHhiNjlmNjYxMSwgMHg4MmNlNGFkOSwgMHgxMGMwYzk1YywgMHhmNjQ1NWI4ZSwgMHg2YmM4NGU5MiwKKwkweDI2YjQ5Y2Y2LCAweDliNWY2OWY1LCAweDg0NWFiZDkyLCAweDIzMjkzOTcxLCAweGQ4MTE3NDc4LCAweDdiYjFkZmZmLAorCTB4MWJiNzA0M2QsIDB4MTRiZTczZjcsIDB4ZWQ4Y2Q3YmUsIDB4ZmVjMWIxMGYsIDB4MTc3ZmQwMTAsIDB4ZjJhN2YzNDksCisJMHgyZjhiMTdmOCwgMHg4OGRjOTQ5MywgMHgwN2VmMzA3OSwgMHhlYzFhN2VmZCwgMHg2MzYwOWYzNywgMHhiZjY4MDdmYiwKKwkweDYzYWJiMDQ0LCAweDU4ZTk4YTg4LCAweDgxNjU2Nzg4LCAweGRmOTgzZDI4LCAweGRlOGYxYTQzLCAweGRjN2ZlYjQ3LAorCTB4OTY0OWUyY2EsIDB4MGY4YmEyMDYsIDB4MzhiM2M3NjYsIDB4OGIwNzRjY2IsIDB4OGRjOWM2MGYsIDB4MTBmZjgyYjcsCisJMHhjMTM4OGU3NywgMHhhNWZjZTg3ZiwgMHgyMmZlZTEyMiwgMHhhZTIzNzljOSwgMHgxMTM0MWQ4ZiwgMHgzOTU5ZjdhMCwKKwkweDk5ZjU4NGUwLCAweDc1MjRhYmFlLCAweGFmYWVlOTMzLCAweGFiNWJjYjkzLCAweGJkNDU3MWY3LCAweDczNzJlMjBhLAorCTB4N2QzZmNjMWQsIDB4N2VlMDlmMzYsIDB4NGE1M2FlZTgsIDB4OTM0ZGQ2MDAsIDB4OTEzNTJjMzIsIDB4ZjkyYjlmZjEsCisJMHgwYjM5MGY3NywgMHhmZTIxZTMzMiwgMHg0MDhlMzdiYywgMHhjNWY2MTNmYiwgMHhiZjBlNDA5OSwgMHgwNTYzOTZkZSwKKwkweDNjMDRiYzNjLCAweDMyNDg3Y2EyLCAweGZhODZlZjNiLCAweDdhNTAyZTkyLCAweGRiMzlmMTMzLCAweDYzYTkyZjI3LAorCTB4Mjc3ZjI4MTIsIDB4ZTE1NzYwZGQsIDB4YWQ2N2E5YmUsIDB4N2VlMDM3OGQsIDB4Nzg0YzE3ZDAsIDB4OGE0YmVlYmYsCisJMHgyZmYyMTRhYiwgMHg2MDlkNTc5ZCwgMHg2Y2NkOWY3ZiwgMHhiY2ZlYzM4YywgMHhiY2ZlYzI2MCwgMHhmNTc1ZDcxNCwKKwkweGMzZjc0YTRhLCAweDRhN2M1ODIzLCAweGVjMDkxMWIyLCAweDUwMmE2NGIyLCAweDczY2ZhNmVmLCAweDQ5M2NkOWUzLAorCTB4ZTNjYmQzYjMsIDB4MmUzY2ZlOTksIDB4MjAwZjNjMTAsIDB4N2Y1MWYyOTksIDB4OWQzYWZkYjQsIDB4ZWJmNzA0NWQsCisJMHgyYWQ1OWJmNCwgMHg0YWUzOGUwMiwgMHg0ODUxYjhiNSwgMHhlNGNmNzg4NCwgMHhkYjdlODIxMiwgMHhlNzhjYmI2NCwKKwkweDMwN2Y2MDcyLCAweGMyOWIxYjljLCAweDBmOTRlZmVkLCAweDgxM2Q3MTJhLCAweGRjMzBlMDRhLCAweGU3NjJkOTdmLAorCTB4NzVmMTY4ZjcsIDB4NGUzOWViYzUsIDB4MjI2ZDIzYWUsIDB4NWRkNzkxZjgsIDB4MDc4ODJlMjIsIDB4OGE0OTdmNWQsCisJMHhlNzRlNDdlOSwgMHgxMDIzM2VmNSwgMHg5N2JlODEyOSwgMHgwMDk1NTE3ZiwgMHhlZjQ0Zjk3NywgMHgyZmFmNGRlNywKKwkweGUwZTMwNTNjLCAweDM5ZTE4YjU0LCAweDhmNDg4OWY4LCAweDRmZjdjZjFiLCAweDRmZWUxYTc3LCAweGQ2ZjNlNzhlLAorCTB4ZTQ3MDY0YzEsIDB4MWQ2ZDMxM2UsIDB4ZjIzOGJhNjgsIDB4OGI1M2Y0MDksIDB4NjVmMDE3MTQsIDB4M2VmZGRkYmIsCisJMHg1YmZhN2JhYywgMHgzOGI5NzI2NSwgMHhiNjNlMzNlMiwgMHhhNWM0NmY5ZiwgMHhhMWZmNWMzOCwgMHgyZTAzYjRmOCwKKwkweGYzYWZhZWFlLCAweGFmYmY2OTViLCAweDA3ZWFjYTFlLCAweGI5NWQ4MjFjLCAweGM5Mjk5N2YyLCAweGYxY2RlNzYwLAorCTB4YTk2OGRlY2MsIDB4OTdjMDNiODYsIDB4Y2JlMTgxMzMsIDB4M2Y1YmJhMzksIDB4ZTI2N2M1NTcsIDB4MDFiZTlhN2IsCisJMHgzZDllYTBlZSwgMHhhYzdlNjA3MiwgMHhkNzhhNjU3NSwgMHhlZGQ3ODA1NSwgMHhiM2YzODI3NiwgMHhlNjViYTUxZiwKKwkweGVkNjk5ZTgyLCAweGY4Njc4OWVjLCAweDZhZWJhNjM3LCAweDc1ODdlZTU3LCAweDZjNjdmZjFkLCAweGUwMzY5OGJjLAorCTB4ZGUzOTEyOTIsIDB4Mzg2NGU4N2YsIDB4MzM3NWFhZjMsIDB4ZjNmZGE2NmYsIDB4YmY1YzY1ZGEsIDB4OGJlN2U1NDksCisJMHgxZTkyZjEyMiwgMHg3NzBkMTc4MSwgMHhlZjE2NzYxZCwgMHg3NTMzZjBkMSwgMHgzYzIyYmJmNywgMHgyMTE5ZmE5ZiwKKwkweDllMTI0Y2NlLCAweDk5Zjg2ODg3LCAweDljMzg2N2UyLCAweDEzOGQ4ODcyLCAweGRkYzdlMWJkLCAweGU2MDY5Y2U1LAorCTB4ODczNzBhMzEsIDB4MjgwYTZlMTgsIDB4YjdmN2YwM2UsIDB4MTE4ZmMwN2EsIDB4OGFmNTRmMzcsIDB4M2NmMTJmOWIsCisJMHg1M2JkYWFmYywgMHgxODZlYmIyZiwgMHg3ZGY3ZTlmNCwgMHhiNjg5ZDMxYSwgMHg4ZjgyZmJkOCwgMHg1NmVmN2U3MiwKKwkweDA2Y2M2ZWVhLCAweDg5OTM3MTdiLCAweDQ4OTM3ZjlkLCAweGU3MTRhZGM2LCAweDdiYjRlM2JiLCAweDIwYjI2YmU1LAorCTB4ZjY2MjVkYmYsIDB4MTliMzdiNjcsIDB4YmI3NmNmZWQsIDB4ZDc3MTgzYzcsIDB4Y2I5ZTBiMzQsIDB4MGRhNzkyMjYsCisJMHgwNmJiZjVmNiwgMHhkZmM4ZDQ1OCwgMHhjNzJlZjhkMSwgMHg5YTFjYTM2MSwgMHhlZmZjMDI3OCwgMHhmM2ZjOThkNywKKwkweDFiODFjYTZlLCAweDE5N2E0OGVjLCAweDkzYjhjMzkzLCAweGUyMTEyNmNhLCAweGZkZmM4ZTQyLCAweGUwNGZhZjgwLAorCTB4YzNjMDJkNGUsIDB4MjVlZjA1NzEsIDB4YTBhZTNlYWEsIDB4YmVjZGZjNWQsIDB4YmUyMTBiYjcsIDB4OWUxZmVkYTksCisJMHhjMmVkZTdiMCwgMHgzZWYwOTE4MiwgMHhkYzZiZDljMywgMHgzYzc5NmFhZSwgMHhkMjc2MDE0YSwgMHhjNGZkMmY3MCwKKwkweGZkMjY3OWYwLCAweDgwMjVmMmJkLCAweDcyZWVlYzlmLCAweDczZWI3ZGUzLCAweDFkMTc4NGUwLCAweDczNmQ2ZTc3LAorCTB4NjBiMzA3NGQsIDB4NGU3ZDZmYmMsIDB4OWIxZjlkODgsIDB4MWQzZGQ0N2QsIDB4N2RkNDY1NGMsIDB4YjcwZjFjZWIsCisJMHg3MTVkZDY5MSwgMHhkZmZkZjQ2MiwgMHgxNjNlN2M3NCwgMHhkN2ZiZjEwZiwgMHhjMWM0MGE0MywgMHg2YjlhOTUxYiwKKwkweDI2YTI3Y2Q4LCAweGE2OGZlYzBiLCAweGY5NDdmODc3LCAweDA4ZTFmOGQ2LCAweGMzZmY3ZGRkLCAweDg4ZjNmOGY4LAorCTB4MzhmNzYyNGIsIDB4NGViODI5YjUsIDB4ZGY2MTI4ZjgsIDB4ZWI3MWYyMzUsIDB4MzlmN2FlMmIsIDB4MGY5YzVlYWIsCisJMHhiOTZjNzBmNiwgMHg1NzZkZDcxYiwgMHhmZTdjNDUzOSwgMHg2NGIyMTIxMywgMHgxMjVjYmM4MSwgMHhjYTM0NzdhZSwKKwkweDQyMTNkNGVhLCAweDJhNDQ3YmY3LCAweGU1YTc2MTE5LCAweDhkYzVmYTdiLCAweDcwZWZmNjg1LCAweGYwMGU0Yzc4LAorCTB4NDNhZWE0MmIsIDB4NDk4NGRkZjAsIDB4NmVjMTYzMzksIDB4NGRhY2M3ZGIsIDB4YTM0YzcxODYsIDB4YjQ1NWQyOWIsCisJMHg4NzRkZGVkNSwgMHhjNzI3NTc0NiwgMHg4NThlMWRjOSwgMHhmNjc4YzcyNiwgMHhlMGExZDgxZCwgMHg3YzBiNzZiMSwKKwkweDcxYTBlMWFmLCAweGZmMjYzOWVmLCAweGZjODAzYzA4LCAweDJjMjBmMWJiLCAweDA3YzZiYzgwLCAweGZjYjU0ZjFiLAorCTB4YTEwZjFmM2YsIDB4MWU5ZjIwODEsIDB4MDg3MTAwZjEsIDB4NDNjMmI3YzcsIDB4YzM1NWYwMTYsIDB4YWVkN2Y1MDMsCisJMHhmZTY4ZmUwMiwgMHhmNmMyYTM1YSwgMHgwZDc5NmExZCwgMHg3Y2Y2NDUwNywgMHgxMGE1Y2Y3YywgMHhmNjQ0M2ZkYywKKwkweDZkMzlkOTU5LCAweDU3YWUyMjRmLCAweDZkNjRlY2JjLCAweDNlZDg3ZTc0LCAweDY0OThiYTk4LCAweGViZjk4M2IyLAorCTB4OGM4OWVmZGEsIDB4NTdlODA5MDksIDB4ZTEwNmExOGUsIDB4MDZlM2Y0MGUsIDB4NzE3NDNkYTIsIDB4NDE3NjkxN2UsCisJMHg3MTM3N2I4MCwgMHhmODA2Nzk2ZiwgMHhkMDY0YTE5NywgMHhlMmU2MzE4YiwgMHg4NzdmZTAxMCwgMHhmODA2NGE2ZCwKKwkweGM5YjYzOTg3LCAweDVkYWY4MDU5LCAweDBlYmQ1NjIzLCAweDAxYWVkNjQzLCAweDUxNmYyZmU1LCAweGNkMjdmZGJiLAorCTB4NmFmMGI1ZWUsIDB4NzQ2ZmY2YjUsIDB4YmQ3NGZiMzAsIDB4MDIwZjlkOWIsIDB4ODc0OTFkYmIsIDB4MmM0MWZmNjYsCisJMHg5YTEwODc0MCwgMHg4NmNhZmE2MywgMHgwZGI5YmFmNiwgMHg0MWQwMzllYywgMHgyMDVmYmFmOSwgMHhlNDFmZTA0ZCwKKwkweDUzMjlkYzliLCAweDE3ZWJjZmMxLCAweGNlY2U4MDkyLCAweDg2MGM1ZmJkLCAweGYzNzE2NTM4LCAweGRlODE0N2FiLAorCTB4ZDQzZDZkNjIsIDB4MzUwZjVmYTUsIDB4YmY5YWQxZmEsIDB4MzQyYmNkYTMsIDB4Y2Y5YjQ4N2YsIDB4ZTUwNGRmODIsCisJMHhkM2I5ZmNkOSwgMHgyNmFkZDZjYywgMHg2ZTc4MmM4NywgMHhlYWYzZjFmOSwgMHhiZmFlNmU1NSwgMHgzMTQ3ZWQxMiwKKwkweGE0MmRjN2VmLCAweGVlZDJlOTE1LCAweGYzOTliOTFkLCAweDlkMTBmOGEzLCAweDM5NDM2Njg3LCAweDNlNTEzNzIxLAorCTB4MWRlZmM0ZGMsIDB4YmZhNWM5YjksIDB4YmM5NmUxNTcsIDB4Njg4ZWY3ZDgsIDB4YmVmNmY0ZjUsIDB4ZDZiODdjNzEsCisJMHg2ZGY0NmViMCwgMHg3NjNlNDNkMywgMHhmYTdmYzhjZiwgMHhkMjc3M2NkOCwgMHhjMTJmZDExMCwgMHhjZTk3OWE4MCwKKwkweDMyNzA2OWVlLCAweDYyNTIxYzNlLCAweGI5ZmI1NzhmLCAweGI1MzI0ZWZlLCAweGU1YjljMzY1LCAweDhlZmU3YmZkLAorCTB4N2IyYmUzZTMsIDB4ZjgxZWZlZmUsIDB4NDk0ZjEzODksIDB4NGViNWY2MDQsIDB4MDEyZTM1M2EsIDB4ZDJmM2U3ZDcsCisJMHhhYjU5M2Q3MCwgMHg5MzY5ZmJkNywgMHg4OGU3YjA4ZCwgMHg1Nzc3ZWQxZiwgMHhkYzdhNTIwZSwgMHhjMTY3ZDAwYSwKKwkweDFlNjdiN2Y0LCAweDc3ZDQyOWZmLCAweDIyNDRiOGYxLCAweDJhMTQ0ZGNmLCAweGM3MTBhMTllLCAweGJmYmZlNDJkLAorCTB4ZmU2MDUwNzMsIDB4OTA3ZTU2OTIsIDB4ZjNjNWVlZmYsIDB4MjFiMGI3MWMsIDB4YzQ4ZmJiNDIsIDB4OWJlNzIxMWMsCisJMHg5YTE5M2RmOCwgMHg1OTNhNmY1YywgMHg4ZWNhNGE3NCwgMHhmZGZjMGY5NiwgMHg1YTBiZTIzMywgMHhmMzk5YTE1YywKKwkweDExZmNiNDhmLCAweGE3N2NiN2NmLCAweGZjMDk2ZWU5LCAweDg5YTRlZmYzLCAweGVlZDExZGM0LCAweGUwY2U5NTBjLAorCTB4MmYxY2UyMjMsIDB4NGE3ZTBjM2IsIDB4YmQzZjczY2IsIDB4ZGUyYjhlOTksIDB4NGFkYzQ0MzcsIDB4ZmVkZTZkZTgsCisJMHg1YmU0MzY3YSwgMHg4ZmY3OThjNSwgMHg5ZGZiZjkxOCwgMHhmZWYxYmJlNiwgMHgyYTA5MjE5MSwgMHhmYjViZDNkMiwKKwkweDM4YTZhZTkzLCAweDI3NzIwZDE5LCAweDY1Y2JjZmNjLCAweGU1MTg3N2Y3LCAweGZmOWVjYWZiLCAweGQ5MWI2ZTQ4LAorCTB4OTI3YmJmMzMsIDB4YmYwZTUxYmYsIDB4ZWI4MDUzM2QsIDB4YzNjOWJkNGUsIDB4YjQ3ZGRiODgsIDB4YmZkYTdlOWYsCisJMHg5ZmE3ZWQxMCwgMHhmOGFmNjNmYSwgMHhiZGZmOTg5YywgMHgxYWYzMGQyZiwgMHg5ZjdiYmQ1ZSwgMHg0ZTdmMDY0ZSwKKwkweDY0ZjRlOWMzLCAweGJiODk5Yjg2LCAweGVjNGM5YTdmLCAweGYyMzJmMmRkLCAweGYzMDc3M2VkLCAweGQ3MTBlNjZiLAorCTB4M2ZlOTliZWMsIDB4NzhhZTBhNzcsIDB4ZDI3ZTE3YjQsIDB4NGFiM2ZiMGEsIDB4MGU3MzhkMzgsIDB4NDFmZmEyMTcsCisJMHhlMzEwNzlmOCwgMHgxYzQ3MzYzOCwgMHg3YmRlZTc4OSwgMHhhMTliZGRmZCwgMHg1Yjk4MzJmOSwgMHhiZjA1NzhlMywKKwkweDM2YjgwMmM3LCAweDZmNDU1MzhlLCAweGIyZTA0OWQ0LCAweDk4YWI0YTE1LCAweGJhN2VlMzFkLCAweGNlNTE5NzQ2LAorCTB4ZjYwOTQ4NDcsIDB4OGQzYTI3YTMsIDB4YWJkMjMwMzgsIDB4ZWZkYWU3ZjksIDB4NGM3ZTUwYzAsIDB4ZGRmNWEyNGYsCisJMHhmZjYzZTZhYSwgMHhjZTYxYzZhMiwgMHhkZmM2OWU5NywgMHg5Yzk1ZmE5ZSwgMHgxY2RlZTNjMCwgMHg0ZTRlMTdmZiwKKwkweGRiZDgwYjdiLCAweGU1MTliZTkzLCAweGVjZDcyYzY2LCAweDkwMzQyMTQ3LCAweGZjMWZhOTgzLCAweGE5MDkyMTkxLAorCTB4OTc4NTBmYTgsIDB4ZTNhNmUyMTQsIDB4M2ZhODE5MGMsIDB4YWY4YTRlZmYsIDB4ZTNkZGJjNDAsIDB4YzI3YWNmNjQsCisJMHgxMzI1ZjU1YiwgMHhlMzc3MjRmMSwgMHg2NjNlMGU0ZSwgMHg5NmVkZGMwMywgMHgxZjEwNmNlYSwgMHhiYTVlY2ViZCwKKwkweGRhNmY1NDA2LCAweGYwYjMwNWE3LCAweDEzMzY4NzllLCAweGY0ZDk5MDgxLCAweDEwMmQ3M2U2LCAweDI1MWVmMDQ3LAorCTB4YTBhMDNlNzgsIDB4YzA1NGZmNzksIDB4NTZhNWVmZTksIDB4NWU3NTQ3OWMsIDB4MDhiMWU0MjQsIDB4YmNkODMzM2YsCisJMHg1ODdlMDZjNiwgMHg2ZjlkODUzMCwgMHg3NDQ4OTgzYiwgMHgyN2Y3OTBmYiwgMHg4ZjA2YmMzMCwgMHgxZGQ5YmY5ZiwKKwkweDJmMTJmY2EzLCAweDI5ZGM0OTlmLCAweGM3MmUzOGQ5LCAweDcwYTNmYzYzLCAweDNmZmIwOWJkLCAweDQ4MWQ3MDRkLAorCTB4OWU2NWJmMDEsIDB4Y2U4NWYzODAsIDB4YTQwZTEzYmQsIDB4ZWUzYjdhNTAsIDB4MzMzYjQ0NGMsIDB4ZGRlMGY4M2QsCisJMHhjNjg4MmE0ZSwgMHhjZjhiMWVmZiwgMHg3ODBhMTZiYiwgMHhlYWExNDBjZiwgMHg1OTYxN2NjMiwgMHg5OGRmZWUyNiwKKwkweDk5ZTQ4ZmYwLCAweDQzM2U1MGM1LCAweDc0Y2RmOWM2LCAweDc4ODI1MmIxLCAweDIxMzRkOWQ0LCAweDdiOGJlNjA3LAorCTB4Zjg1YWI2ODQsIDB4Mjk3ZjVjMWQsIDB4ZmQzODg3NmIsIDB4N2NmZjMwYzksIDB4MGM3OTM4YTcsIDB4YWE5Yzc2ZmUsCisJMHhlZmUxODdlNSwgMHgzY2MzMTIwMywgMHgwYmNlZDU2ZCwgMHg3Y2I0Y2RmYiwgMHhmNzAxNmNkNSwgMHg2Njc3NGVlZiwKKwkweDdlMDQ3ZjEwLCAweDc5NTNkNzBhLCAweDZjYjhhNThlLCAweGI4MDA1ZmVlLCAweDNmYTQ1OTllLCAweGM0YmIzODM3LAorCTB4ZWI5MTAyNDYsIDB4ZWYxMzgyMTYsIDB4ZjdjODNiMjEsIDB4ZmMwOTc3NjksIDB4ZTdhZTdjNWUsIDB4Y2ZiYzcwMzcsCisJMHhmYmFjOWI5OSwgMHgzZjMwOTRhZSwgMHg2NDUzYmJkMywgMHhiM2U0NzFmNywgMHhmNGQ2YTFkZiwgMHg4N2FlNDZlYiwKKwkweGYxZjlmMDM3LCAweDhlODY0ZjNjLCAweGQyODg2MjhlLCAweDViM2Y0MDg4LCAweDYyZTViZTQ3LCAweGE1Y2YwZTFiLAorCTB4ZTc4NzA3ZTIsIDB4MWM2ZWY2ZDMsIDB4OGFkNzk4NjEsIDB4MTcxMTZiOTUsIDB4NmYxZDZjNjksIDB4MTM4MmVjMzYsCisJMHhkZmVhNmVjMSwgMHg5ZjRmMjViYiwgMHg5N2M3YTE4ZiwgMHgzZDlhMTNiNSwgMHhjNDU3YmQ5OCwgMHhmOWQ5YzM3NSwKKwkweDg5MDJjZjk0LCAweGFlYmZkM2YyLCAweDcyNjA5OGJkLCAweGQwNzg4MDFkLCAweDc4ZGM5N2FkLCAweGJkOTQ0ZThmLAorCTB4MWJlOGEwZjgsIDB4NTBkZjhiZDksIDB4N2FhM2NjMWQsIDB4MWYwMjY0ZmQsIDB4NDE5MTA3MzcsIDB4OGJhNjM3NjAsCisJMHgzODBhN2VkYiwgMHhhNmUzYTRlYSwgMHhiNDhlMDYzOSwgMHhlZjliNDc3MSwgMHgwNjNkNTIxNywgMHg2YzMzOTBkYywKKwkweGE1ZmE2NTlkLCAweGE0ZWZkYzM0LCAweDc2YzNmN2NkLCAweGFlMjVmYTg0LCAweDZmZDJmZTE4LCAweGY3NzRiMjEyLAorCTB4NGFlZDg0N2EsIDB4ZTcyMjVmODQsIDB4NjRiZjdiN2UsIDB4OTU0N2Y1M2EsIDB4MjA2ZmEwMWMsIDB4N2I0NThmZjEsCisJMHg0MmM5NzE4NiwgMHhmMTA1MThkOCwgMHgxODczYjRjMSwgMHg3NDRhZjFlNywgMHhmM2UzOGFmZSwgMHhiMDJmODhkMywKKwkweGI3NTI0MjdmLCAweDE1ZmQxODdlLCAweGQ2M2NjZTJkLCAweDdhNTNmOWE5LCAweDhkZTM4NDljLCAweGE1N2RkOGIzLAorCTB4ODEwYTRlMWEsIDB4YjNmZmEwOWYsIDB4ZjRlYjhjNDQsIDB4ZmRhZDFiODYsIDB4YTIxMmYwZGUsIDB4NTY0YzA4ZjYsCisJMHhmYWUxNzg4ZiwgMHhmMmYxNzVmNywgMHgxOTdjNmQxNywgMHgwNWY2ODY0YSwgMHgzNDNlMWEyNywgMHg5YmM3MThiYywKKwkweDgzYzQzNGZmLCAweGJhNmYxYTdhLCAweDBlNmYxOTdhLCAweGFlZDE5MDhjLCAweDdjZDdlNmY3LCAweGVhZjNlNGVhLAorCTB4MzdhNjI3MDQsIDB4N2YxYjM1NWMsIDB4ZDgyYzY4OTcsIDB4ZjkzN2YwMTEsIDB4NmI4ZTE1YjgsIDB4MWM5YzMzZDUsCisJMHhjMTI0NWI2OCwgMHhlYzE3OTFmYSwgMHgxY2I3NjY0NywgMHhmZmYwNzhiNCwgMHg4MWM0YzYwMCwgMHgwMDgwMDBkNSwKKwkweDAwMDAwMDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdjYmRmZjAwLCAweGQ1NTQ3YzBiLCAweDY3YjdlZmI5LAorCTB4MzMyNDc5ZWYsIDB4NDk5MjY2NDksIDB4MWQ4NDNjMzIsIDB4MDkyMTIxMDgsIDB4MTFiYzIxMGUsIDB4MTEwODQ5MzcsCisJMHg4OGE4MGNhMiwgMHgxZjAxZDY4ZiwgMHg0ZDA5MjA2MCwgMHg2ZjUzZDVhZCwgMHg1MjgxMjEzMywgMHhiZDU4M2Q2YywKKwkweGY0ZjQ3YmQ2LCAweDQxZWQ1ODM3LCAweDAxMDg3NTBkLCAweDI2NzAyNzgzLCAweGQwZjA5OGEwLCAweDdhYzBmODIwLAorCTB4NDUyOTY4ZGEsIDB4NWExODkyMWIsIDB4ZjVjZjZhMGYsIDB4ZjZiN2RmN2MsIDB4ODMyNjY2NGUsIDB4NzNkZWY3YTUsCisJMHhkNjJlOWY4NywgMHhmNWFmNmI1ZSwgMHg1ZmY5ZWZhZCwgMHg0YTliNWFkZiwgMHg1MDBhOWZjMCwgMHg5ODIwMTViMywKKwkweGUxZjk1MDA2LCAweDA2NDg0YTg2LCAweDAxMjAzYmU4LCAweDk2ZDQwMzE0LCAweGZlMWI0MWM5LCAweGIxZmRiNGI1LAorCTB4MGNkZDQ1YzcsIDB4NTFkZjg5NTYsIDB4ZjVjMDI2NjEsIDB4OTUwYjdlMjAsIDB4MDZlNmM1MGUsIDB4YmM5NWU2NTgsCisJMHhkNjgwMTY3MiwgMHhlMWJmZGUyZSwgMHg2MmE4MjU5MiwgMHhmOWFmN2FmZCwgMHhlODliMWVlMywgMHg1ZmZmMzVmYiwKKwkweGI4MDBjODAzLCAweDE5N2Y3ZjUxLCAweDJmZmIwZmZkLCAweDE4NjBhNGQzLCAweDNiMzY1ZDVmLCAweDk3OGRmZmJhLAorCTB4YTY5MTNmY2EsIDB4NjJkNzJjMDIsIDB4M2U0ZmMzOWUsIDB4MjJmMmE3OTMsIDB4YWMyNGJlY2MsIDB4OGZiNzQ0NTcsCisJMHhjZmI5MjY3MywgMHhlMzJmZjFkOSwgMHgzMmQ3ZmM2MSwgMHg2NWYzYzVjMCwgMHhhZmY3NTE2ZiwgMHhjOGVkNzdlOSwKKwkweDUyM2Q0OGYyLCAweGFjZTgwMTY2LCAweGRiMTk3MWI3LCAweDdmMDE2ZTVlLCAweDRkMjU4MWM4LCAweDAwNjVjNDUwLAorCTB4OWQwYTAxNTIsIDB4NTgxOTk4YjgsIDB4MGQwMTY0YmYsIDB4MTM2MzA4ZjksIDB4M2FiOWY3ZTAsIDB4ZGY4NjEzMWQsCisJMHgwN2UzODgzZiwgMHg4ZTMwZGM3MCwgMHgzODAxYzgxZiwgMHhmYWU0ZWY1NCwgMHhhZTFlZjU2YiwgMHgyZjgyOTM1ZiwKKwkweDg3N2ZlM2E0LCAweGI4YThiMGJmLCAweGRmZWRjNTllLCAweGRmMzhmYzUxLCAweDhmMGE0YmUyLCAweDkzZDY5YjNiLAorCTB4NzE4MzBiNGYsIDB4ZjczZjllYjQsIDB4MGRlM2ZkMTYsIDB4YjZiZmRjMzAsIDB4YmY4YjMzZmQsIDB4ZjllYmYyZjAsCisJMHhhN2U3ZjM1YiwgMHhjZDNmM2NhOCwgMHhjZjBjMTVhYiwgMHgxODAxNDRiYiwgMHg5YTVjZWI4MywgMHg2MzVmY2QxYiwKKwkweGM2Zjk1ODllLCAweGZlYjk2ZmNhLCAweDU2ZmNhYzdlLCAweDkwYzdhY2M0LCAweDMyYTJmNDBmLCAweGZmYzM4YThkLAorCTB4YTZkMDI2NGIsIDB4NDM3ZTVlNWYsIDB4YjNmOGIxZjIsIDB4ZGIyMzA1YmQsIDB4NzJjOTdlMDEsIDB4OTc0ZjFlMWEsCisJMHhiZTJiNzQxNywgMHgxOTk3NDE0MiwgMHhiNzUyYmFmNSwgMHg0MGVmZDQwYiwgMHhiMmI5Y2EwYSwgMHg0ODg5YzIxMywKKwkweDJiZTdmNWQ4LCAweGY0YTg1MTNlLCAweDk0NzFmMDRhLCAweDZjN2MwMzNlLCAweDFlMWU1YmM4LCAweGU0MjVkMTdmLAorCTB4YmNmMGRhNmIsIDB4Nzc2NDE0OGIsIDB4MGIxZjNkMTEsIDB4YThlYjM4ODEsIDB4ZWExNDcxYTEsIDB4NmMzOTYwMWYsCisJMHgxNTVhNjFkOSwgMHg2MzVjNzVjMiwgMHg1NDdkM2I4MSwgMHhlMDMyOGEyNiwgMHg5MzdkYjg5NCwgMHhmNmUzYzRkMywKKwkweDgyNjZjNWZmLCAweDNlNWUwMWFiLCAweDQ4MDI1OTk4LCAweDNjZWFkNzlmLCAweDQyMDExMzA2LCAweGJmZjdlMDY2LAorCTB4ZGZiOTUyNGUsIDB4MjQwODI0ZTYsIDB4NzRhMGZjZTAsIDB4OTQ1ZWM4ZGIsIDB4YjQ1YzgwMTIsIDB4MjViNDY1M2IsCisJMHgzNjQzODhkOCwgMHhkOTFmNjEyYiwgMHg4MTU3YmY2MSwgMHgyZmRiYjQwNiwgMHgwNTBlZjc4ZCwgMHhjOTE0MDc2ZSwKKwkweDRjNzM4ZmU2LCAweDdlZjQ1OThkLCAweGY2MWU3YmI4LCAweGE4YTQ1NTliLCAweGNiOGJiMGRiLCAweGRhODc3ZWFhLAorCTB4OWQ1ODBlZmIsIDB4ZmVmZjVlZjQsIDB4Njk5ODc3ZWYsIDB4MTc4MGJmOWMsIDB4MGVkNzg0MjksIDB4ZTdkYTgxNTgsCisJMHhmMjQxY2MzYiwgMHhlM2U0OGIxZiwgMHhmZGViMDliMiwgMHhlYzU2MDAwMywgMHhiODU1N2YzZiwgMHhkNzZlNTAxNCwKKwkweDEzYTM3NzQwLCAweGM3MjRiOWNiLCAweDhkN2JmMjM4LCAweGZlY2U5YmQ2LCAweGU1MGEzMWMzLCAweGQzOTc0MGI0LAorCTB4OTU2ZmRkMDIsIDB4OGZkOTkwMWUsIDB4NDFjOTI2OTQsIDB4NTNmNjFhYzgsIDB4NWEzMmVhZDcsIDB4M2EyNTZjODAsCisJMHg3YWUxYjQxNiwgMHg0YmRhZmRiMSwgMHhiNGJmNWM0YSwgMHhlMTc3MWY0OCwgMHg5MzIxNDE5ZiwgMHg3YWQxMDg1YywKKwkweGY4NGRhOGJiLCAweDE0ZDAxMmEzLCAweDZkNGIyOWMwLCAweDk3ZTRlZDMxLCAweGNlNDU5ZTkwLCAweGM5NzNlN2U4LAorCTB4ZWY1ZWEyNzcsIDB4Zjg0YmYxOGUsIDB4ZjdiY2QxMzMsIDB4OGJiY2M1M2IsIDB4ZjcyNmJmZTQsIDB4YjY1ZmZhZTAsCisJMHg0M2NkZWY2OCwgMHg5YTRlMDc3YSwgMHgwZTdjNTllMSwgMHg2NzMyYjFlNywgMHhkMGRhNWYyNCwgMHg5NzM5ODNhZSwKKwkweDA3ZmQ4YmI3LCAweGU5MTUzNTEzLCAweGM3ZjQ5OTc5LCAweDlhZDFmNTQxLCAweGZkZjJmNTNhLCAweDk0MGNmNmE3LAorCTB4Yjk3ODc3NjAsIDB4MTMwMjg1NzksIDB4N2I0ZjFkNTgsIDB4M2RmOTg2MzIsIDB4ZmYzYWFmODIsIDB4MjJkOWY5NjMsCisJMHhmOTFkOTM0MSwgMHg1YmRkYjBiYywgMHgwNDY1YWU0NiwgMHg4ZjkxM2IxZiwgMHg4MGM5NWVmOCwgMHgyOTVjZjNjNiwKKwkweDc4ZmIwZDFmLCAweDQ2YTI1Y2Y5LCAweGI5ZjJmZWZhLCAweGZmY2QxYWQxLCAweGZhNmJlOTJhLCAweDNmZWZmZWIwLAorCTB4ZmU0ODk4M2IsIDB4MmFhOGY5MTMsIDB4MmUwMzE3YTgsIDB4ZDY1OWY3OWIsIDB4YTFmN2ExNWYsIDB4NmRjMTM5NTEsCisJMHhmNWQxNmY1OCwgMHg4MWM0ZTVmYywgMHhlZmM0ZjlhMywgMHg2N2RlNGRlYiwgMHhlMzY1MWE2OSwgMHhlNDg1MTVjNCwKKwkweDljOTZiNzM3LCAweDBkMjQ3N2M1LCAweDdlZDEwN2E0LCAweDc3MDlkNTI0LCAweGZiNDAxOTYwLCAweGE0MGI3ZDIxLAorCTB4MTk5M2ViMDIsIDB4MzZmMzQwNDIsIDB4OTUzNGYwNmEsIDB4MjlhYmU2MGIsIDB4MWM0MWVmYzQsIDB4ZTM0MWRiYjMsCisJMHhlN2E0MjlhOSwgMHgzMzhiZDdmMCwgMHhmOTIzODU3ZCwgMHgwYThmNTJkZSwgMHhkNmI0ZjM4NSwgMHgxYjI1MzRkYiwKKwkweDkzYmQ1ZjYwLCAweDFlZjU2ZGViLCAweDU3YWQ1ZjJlLCAweDJjNzRkY2I5LCAweDhlMjBjMWY5LCAweDM0NTlhYjUzLAorCTB4N2RmODZkMjUsIDB4OGZiMGFhNTcsIDB4ODg2N2U4MDUsIDB4MDUyMDA1YWUsIDB4MGI3M2E4MDMsIDB4NWVmNWQ2MWUsCisJMHgyNDliODI5MSwgMHgyN2FlMTM5MiwgMHg5NzI4OWY4MiwgMHgwOGRjOWVjMSwgMHg0ZDI5MzZmZSwgMHgzNWIyNjY5MywKKwkweGYyOGJiY2IwLCAweDA2M2VmYzRkLCAweDU5ZjNlMGZmLCAweGRjYTNmYjIzLCAweDRiYWFlYWEzLCAweGJhZTY3ZTYyLAorCTB4OTYxNzI0YjQsIDB4NTJmODc0M2YsIDB4NmU5MTZjYTgsIDB4YjgwMTdjMzksIDB4NWJmNTEyZWUsIDB4ZmUzODBiZTUsCisJMHg3ODQyZjBmNCwgMHg3NGMzZTMxMCwgMHgxNWYxMGMxNCwgMHhmZDEzYjc3ZiwgMHg0MDJjM2EzMywgMHhjYTgwYzFmMiwKKwkweGQzYTQ1OTc2LCAweDQ5MmU3ZGEzLCAweDMyM2U3MGU3LCAweGUwYzdhZjlkLCAweDMwY2FkNjdiLCAweGU4M2VkMWU5LAorCTB4MTdiZTIzNDksIDB4YjQ3NjdjZGIsIDB4Yzg0M2E0MjgsIDB4ZjY2ZTkzNTUsIDB4OWNkZTM4NDgsIDB4MjY1NzhiNzQsCisJMHhhNmZhMjZkMiwgMHg3NWZlNDQ2ZiwgMHhkODg0ZTNhNCwgMHg2MzIzYTNiZiwgMHhhNmY2OGFhYywgMHg0ZmJjNmYyOSwKKwkweDFjZDlhZDc2LCAweGNjMmI4MTYxLCAweDcxMTEzZGJkLCAweDcxOWUxMzNjLCAweDlmMjJiYzUyLCAweGJkZjIzNWY2LAorCTB4MDFjOTc3ZjMsIDB4NzM4ODZiZjYsIDB4OWU3NThmYzgsIDB4NzE4NmY2NGEsIDB4ZDkyZTZiOWUsIDB4N2ZkMjU2YmMsCisJMHhmNWVkMTE3YSwgMHg1NGYyNjI2MCwgMHg1ZGQwY2ZmMiwgMHhkNmI4ZWJjNiwgMHg2ZjkxZDYyNiwgMHhkOGJiMTdmNiwKKwkweDlmMGY4NTlmLCAweDZkZmVmN2MwLCAweGU5ZmM4MDEwLCAweGNhMWZkZDM1LCAweDlhOTRmNDgwLCAweDkwN2IzMmYyLAorCTB4ZTRkMmMzY2UsIDB4ZmM5ZjJhMTQsIDB4OTcwMTcyNWQsIDB4ODk3YjkyYTcsIDB4NzY0ZDA3M2YsIDB4YTc3ZGU2OTUsCisJMHg0NmNlMmQ1ZSwgMHg3MmRlZDE3ZCwgMHhkNjFkMDA5OCwgMHgwYTFjYjc4MiwgMHhhMWVhMjc5NSwgMHhlNWY1MWIzOCwKKwkweDk3MWI3YWFkLCAweDVjOWRlYjI3LCAweDcwZjdhYTllLCAweDQ5ZGIxODc5LCAweDc2Yzc1ZTlmLCAweGIwMzdiN2QyLAorCTB4ZDg1ZGVhOWQsIDB4MWMzMWU1NGUsIDB4ZGJhMmNhOTcsIDB4OTZiYzc4OTMsIDB4YjQyYzkyZGIsIDB4ZDBjOTgzOGUsCisJMHhmYTRmY2M2YywgMHhiNzBjNGUxNCwgMHgzZmUwMTc4MiwgMHhhYjZhZmIxZSwgMHg5NzhjMmFlZCwgMHgzNGExN2Y1NiwKKwkweGIzZjRmOTBkLCAweGFjMTQyYWFmLCAweGVlM2M1YjFmLCAweGJiNjBiZmExLCAweDFmYTY2N2Y5LCAweDliZGU5MGRiLAorCTB4OGY1YTM5NGUsIDB4YWE5ZWRkNjMsIDB4ZmE0MWQ4ZmMsIDB4OWQxMTJjNzksIDB4YjliNTk5MjMsIDB4YTYzYTQzNGIsCisJMHhjZDFjNmY5MywgMHgzNjYwZDc2YywgMHg3YWY0ZDNkNiwgMHhkOTVkN2NjMCwgMHhhNTk1ODA3YywgMHg0MmUwZjkzZCwKKwkweGFmNTk3MTI1LCAweDU3N2YyMWIzLCAweGEzZGZmZGRhLCAweGFiYjAyNWJhLCAweGFhMmFlY2EyLCAweDdiMjQ4ODYzLAorCTB4YjY0MWNjOTcsIDB4N2I5MmIxZjcsIDB4OTViYmM2MDUsIDB4MTI3ZmZmMGUsIDB4ZDE3YjBkYmYsIDB4OTFhNDNmYTQsCisJMHg0OWE5OTg3ZiwgMHhiY2IzNzJlMCwgMHhlMWE0OTM4MywgMHg5NWJmNDZlNywgMHg0OWZmNDU4ZSwgMHgyNWRlYmFmYSwKKwkweDk4Y2Q3ZGIzLCAweGM3NDE2OTJmLCAweGZhMzVmYjQ4LCAweDk2YWIzOGNkLCAweDllNjZmYzkxLCAweDcyYTI2ZjJmLAorCTB4ZWI4Yjg1NTksIDB4OWFiMzU1YmUsIDB4MWNjYmZlYzgsIDB4OTRiZjdiOTcsIDB4NjVkMDdmZGYsIDB4NTEyZGJkNjYsCisJMHgzODljNWZiMCwgMHg4ZTliZjQ2OCwgMHg3YmI4NDY0YSwgMHhmODMxMmJhMCwgMHg2OWY1ZTkyYywgMHhkNjEyNjM3ZiwKKwkweDhhYjI3OTE3LCAweDAzMzdkZDY0LCAweGI2M2I1ZGQ3LCAweGViZTU3YjUxLCAweGRlNTc2Y2FkLCAweGYyZTEyZjI0LAorCTB4Njk5MGE4OTksIDB4MjFkMGJlZDgsIDB4MmE2NGMzNzksIDB4NGE2YTNmZjMsIDB4ZTRhNzc2YTMsIDB4ZDQyZGI2MjUsCisJMHhhNjI4OWRhNiwgMHhiYmQ5NmNmNiwgMHhkNWE3ZWE5MCwgMHhhNzUxMGEzMiwgMHgyZWYzODU5NCwgMHhiOWM1YmY2MCwKKwkweGJlMWI1ZTI5LCAweGQwZmMyYTc3LCAweDg1ZGZkMjQ1LCAweDA0ZGU0OWI5LCAweGYwNGFmM2YyLCAweDdiYWExYWU5LAorCTB4OTUwNmRlYWQsIDB4Njk1OGYxZDYsIDB4NGFhMzhkMzIsIDB4NWJkNjEzNWUsIDB4MWZmZDI4NmUsIDB4MmY4OTQ3NDQsCisJMHhkYTg5MjQwNSwgMHhkN2UxMGE1ZCwgMHhjM2Y3N2YyNywgMHg2YmY2MjczMiwgMHhkOTAxMjcxOSwgMHhkZTcwYTljZiwKKwkweDg1ZmU4ODlmLCAweDAyNmE4OTlkLCAweGIzOGI2OWY5LCAweGIxNmJkZThjLCAweDVjNGRjZTQ4LCAweGZmNTI5NWY3LAorCTB4N2Q1OThlNDAsIDB4N2UzZGM3MWUsIDB4NDFlMzlkOWIsIDB4OGMwNTViZTUsIDB4MzZkZjhlODMsIDB4ZTU0MmUzODYsCisJMHhhODRiZjM1YiwgMHg3ODEyNmUzYywgMHhjYWFkZjJiZCwgMHg0MTM3NmUwYSwgMHhlNTRhOWM5OCwgMHhmN2UyZGZlZCwKKwkweGIwZmU5N2I2LCAweDFmZTM4ZGNjLCAweGRmNjJlZjFiLCAweDU2MmE3MjgyLCAweGY2MjRmYzIyLCAweGJmZGU4OTA3LAorCTB4NzdmYjlhYmQsIDB4OWQwZjk5NDgsIDB4MGIxN2ZlYzUsIDB4MzhhYzhhNTIsIDB4MjEzYmI5N2YsIDB4NThjNTdmYWEsCisJMHg0OTdkNTQ1NywgMHgyNTYyYThmNiwgMHgxNjU2NGZjMiwgMHg2ZmQ1NDU2NCwgMHhiMzhhOTYyOCwgMHhlNmZiZmEyMywKKwkweDU3ZDU0NDI3LCAweGIzOGFiOTk0LCAweDU0ZGZmYTIzLCAweGJlYWEyYTM5LCAweGE4YWNhNmYyLCAweDFjZDM0MmZhLAorCTB4NjFlYTNmZTEsIDB4ZjNiMDk5N2UsIDB4MjBkOTY1ZjksIDB4YTlmYzg5OGMsIDB4MDM3ZGY0NTMsIDB4M2IyNmVmZGIsCisJMHhhOWY4MTJlZiwgMHgwOWY4ODVjOCwgMHg1NWQ2NTJlNSwgMHhkOGI5NzFjYywgMHgwMGFmZmJhZSwgMHg5MjY2N2I3NCwKKwkweDJlYmYxN2ZmLCAweDgzZGU4ZjFjLCAweDQ5OTlmZTIwLCAweDE2ZmM0ODc4LCAweDIwMWUyMzc2LCAweGRjNjBhNDdjLAorCTB4Y2NhN2EwOGUsIDB4MmJjNzFkMTEsIDB4ZmYyN2NkNDAsIDB4ODRiOWQxNWIsIDB4NjdiOTU0ZjEsIDB4MzE5YTE5NzksCisJMHhiZGZhMzFmMiwgMHg4MTYxZjkwYSwgMHgyZWU4NjI0MywgMHhhNWM3MzJlYSwgMHhmNDZjNjJiNywgMHhhYmFlMDZmYiwKKwkweDMxNmJlOWQwLCAweDA5NTI5YmY5LCAweDZlYjQwNThiLCAweDdhYzYzNWMyLCAweGI3MmUzYTBjLCAweDhlZjkwYTllLAorCTB4ZGZmZjE0MzIsIDB4ZmQyYzU3NWMsIDB4N2Y3OTFiMDAsIDB4YTBkNzRiMTEsIDB4ODg4MWM3NGIsIDB4NzYwNzE4YTcsCisJMHhjNDNlMzJhNiwgMHgzZTFlM2I5ZiwgMHgyNTRmNzAzMCwgMHhhNDU3MzdmYSwgMHhlZTQ4NzM3ZiwgMHhmNzk3ODVlNSwKKwkweDk3YjhjNjZmLCAweGI4YzY3YmMzLCAweDJjZDBmYmM2LCAweGZiYzZmY2YzLCAweDI5NTVjZjQzLCAweGQ4OWRmM2ZlLAorCTB4NzNjZTI5M2YsIDB4ZjlmZjE0YjcsIDB4MTdmZGQxNzMsIDB4MDNhMzZhMjgsIDB4NDgyOGY4ZWQsIDB4ZmJmMTAwZGUsCisJMHgyNDEwYWFiOCwgMHgzNWFkM2QyYiwgMHg0M2U4Yjk1MSwgMHg3NDc4NDJiZiwgMHgxMzQwZDlmMSwgMHg4MzdhZjM5NSwKKwkweGZlYjhhZGM3LCAweDk1NjU3MmViLCAweDFlMDYwZGYyLCAweDhjZDc1ZDhhLCAweDNhNGZiMTU0LCAweGFiYjU0OTdhLAorCTB4NTAxMmRlZDgsIDB4NjhiZmI0ZWQsIDB4ZDNiNTU4NzksIDB4ODM0NWFhM2UsIDB4NmEyZmRhMGEsIDB4NjkxYjRkMTMsCisJMHg2M2U1YTFiZiwgMHg1NDljZjU4OSwgMHg1MmYzZTdlMSwgMHhjYTMxOGUwNSwgMHg1ZTdmNjU2NywgMHhiNmQ1OTYyYSwKKwkweDhiMDk0NzllLCAweDYwMzE3Y2Q0LCAweDk0NzAzMDIxLCAweDQ4YzE1ZTcwLCAweDA5NTQ3NzljLCAweGEzYmU2ODNhLAorCTB4YmUxZDA3MGYsIDB4YTU3ZTNmMDgsIDB4MjkxNDZmMzgsIDB4YTdlOTNhNWIsIDB4OTFmYTQ1YTQsIDB4MTY4MjViNTIsCisJMHgzOTE2MzdlOSwgMHhhZmY1NTE1ZCwgMHhjN2Q4YWE5YywgMHhiZDQ1NDY3YiwgMHgxNTlhOWQ3NywgMHg2YmYxMGZkNSwKKwkweDQ2YTBlMTJlLCAweGU0MmFlNDBiLCAweDVlODk0ZDQ3LCAweDdjYjE3N2MyLCAweGZkN2QxN2ZjLCAweGUwOTM4NzVlLAorCTB4YWFkZDk4MTMsIDB4OTcxMzhmZWMsIDB4N2Y4MmE1YmMsIDB4YTQ1N2NmYjEsIDB4NmZlYTdkOGEsIDB4NmU1ODNkNjgsCisJMHgzNWY0MTU0ZiwgMHhlMjAxM2VjOSwgMHgzZTkzMzcxMCwgMHg0ZjcxZDZjNCwgMHhjM2M2OGFiYSwgMHg3N2E0M2Q5MSwKKwkweDIyZTliYjVlLCAweDRlZjg2ZjQyLCAweDI5ZDdkNWVhLCAweGU5ZGVjZmE4LCAweGM0NGVlZmE2LCAweDhiYTkyM2ZhLAorCTB4Njk5ZTdkNDQsIDB4ZmZhYzA0Y2YsIDB4ZDQ1Y2I1MzQsIDB4Mzc0ZDM2YWYsIDB4MDU3ZTAxN2IsIDB4YzMyYmFmOGIsCisJMHhlN2RiYmE3YSwgMHhmYjc5YzU0ZiwgMHgxMmFkOGVjZCwgMHgyNGM1MTllMiwgMHg3ODdiOTE0MSwgMHgwNTg4ZmJmZiwKKwkweDE2MGEyOWUzLCAweDIxNzM0Yzk1LCAweGQ4YWI3NmFkLCAweGEwMjRkNzJmLCAweDI1ZmVhM2ZmLCAweGFhZmM0YTlhLAorCTB4ZGNlNDMwNDksIDB4MWQ3MTQxOTMsIDB4OTEzNGNlZWUsIDB4NmZmNjMwYmYsIDB4ODdiZTBiNzYsIDB4ZmNkOGU3ZWYsCisJMHhjMjVmNDJiNSwgMHhhNWZhMmFjOSwgMHhjYTJmZjdmYiwgMHg5ZWQ4YmQyNCwgMHhlN2Y1ZTRlYSwgMHgyMWU3OTllZiwKKwkweDdkNzQ4NTdmLCAweDdmZmRmYTk3LCAweDNjNTM2YmE0LCAweDYyY2M5YWJhLCAweGZjOTZkZTllLCAweGY5YmI4YTUyLAorCTB4ZDIxYzUxZTMsIDB4YmI3MGJjYjAsIDB4NDIxM2NmY2YsIDB4Y2I4YzJiYTgsIDB4ZjU4NDhmMzUsIDB4NGJjNTk3NDYsCisJMHg5MGZiN2QzOCwgMHg2Y2FjYWY3YywgMHhiMjEzZjNkNCwgMHg5YzhkZTg1ZCwgMHgxYmI4ZGE2MiwgMHhmYWViOWZjYiwKKwkweDNiY2QxNGYyLCAweDE4MTllNjgzLCAweDAxZjUxY2I3LCAweDU2ZTMwMzljLCAweGU5M2E4YTE0LCAweDBkMTcyYzgzLAorCTB4ZjgxZWRlMTAsIDB4Zjc5NzkyNTYsIDB4N2UwNzYzYzcsIDB4YmZhYzAzZmIsIDB4OTdiZTQ3NzcsIDB4ODkwN2Y0NzAsCisJMHg4MmFiM2Y4MiwgMHhiMDdiMWExMywgMHhiYzFhY2QzZSwgMHgzZTc0OGMyYSwgMHg5NjdmZTY5NCwgMHg2YjM2ZTBmNCwKKwkweDliZWIxMjcwLCAweDhkMTI2MzYzLCAweGZiYzA2OTJmLCAweDg3N2Y2MzEwLCAweDMyZDUzOGZiLCAweDFmZWUyNDcxLAorCTB4ODhkODJmMzksIDB4MTFjY2I3Y2YsIDB4NDVlNjM2N2MsIDB4ZWUyOGRhOWUsIDB4M2M1YjM3YmMsIDB4ZjljMGU4MzcsCisJMHgwNmZmODg1YiwgMHhjMDc0NDMzZCwgMHgwM2M3Mjc1OCwgMHg0NWE0NzkxMCwgMHg2MWU0NDNiMiwgMHhiY2UyNjBmZiwKKwkweDFmMTkyZDQ5LCAweDM1OWNmN2Q2LCAweGNmYWViZWYxLCAweGU2ODA1N2Q4LCAweDliOTMzZDU4LCAweDI3Mzk5ZTc4LAorCTB4NmM0Y2M5MzYsIDB4ZDRjY2ZmMDAsIDB4YjZhZjQ4NTksIDB4ZmE3ZGU3YWQsIDB4N2RlOGVlOGMsIDB4N2Y0ZWFjZmEsCisJMHg5YmRmMDNhOSwgMHg3Y2ZjN2VmNSwgMHhkYzdkM2NjOCwgMHgyOTk0MTBkOSwgMHg4OWU5Y2Y1ZSwgMHhkZjRmMzdlZSwKKwkweDFmM2JjZmE3LCAweDU0Y2RmY2ZkLCAweDg2OGRiZTNkLCAweDhlNzk5MWQxLCAweDMzZmY3ZDNhLCAweDBhNDI3Yzc4LAorCTB4M2FmOTI5ZTksIDB4NTE2ZWY5MTksIDB4M2E5ZDk4NjUsIDB4ZWI1YTM3ZWMsIDB4ZjkwZTVmYjEsIDB4ODU5NzFiNDcsCisJMHgxMTc3OWRhNywgMHhhOGY1NmRmZCwgMHg5M2YyMTZkMCwgMHg3YjBkMmUxZSwgMHg3NzBkM2MyYSwgMHg3OTg4ZDRjMiwKKwkweGY4MzdiZDc0LCAweGUwYmVmODM4LCAweGRjOWViNGUzLCAweGJhYzdjZjlmLCAweDQxMGNkM2I5LCAweDczOWQ3ODc1LAorCTB4ODIwZDNlNzUsIDB4ZDNhMGYzZTAsIDB4ZDk5ZTdjYzIsIDB4NjFlOWNiZjUsIDB4OThmNTY0N2MsIDB4NWY1ODhkNDAsCisJMHg2YTA4OWE4MiwgMHhlN2I1M2Y4NCwgMHg2NWQ1NDZhNiwgMHhjZTNhM2U0MywgMHg5ZjhmYWU5OCwgMHgzNTFkMWRlNCwKKwkweDBjMzc4MThlLCAweDVhOWFiZGY5LCAweDY0Mzg0OWRlLCAweGUzMWQ2M2JhLCAweDEzZDk5NDhlLCAweDNlMmRjNmEyLAorCTB4NjQyNzJiMWUsIDB4MjQ3NmUxMWMsIDB4ZDcwODlmZjIsIDB4NzBhMjU2OWYsIDB4ODA3NzJjYzYsIDB4M2ZiMzAwMzgsCisJMHhjOTcwNjI1NCwgMHg2OGVjOTk3NiwgMHhlN2U4ZDllZSwgMHhjOGNiYjRlNiwgMHg4NGZjNzJlZCwgMHhlZjlmM2ZhOSwKKwkweGU5ZjlmYmZlLCAweDk5ZjlhMmQyLCAweGNmY2QxMTU2LCAweDNmMzQ1Zjc0LCAweGYzNDU1NzMzLCAweDlhM2Y5NDZkLAorCTB4NGRkNjYzMmYsIDB4NmFiZjZhODksIDB4N2Q1NDUxNjMsIDB4YTM3MzgzZmMsIDB4MDA2MTY3ZmEsIDB4ZGM0ZmFjOGMsCisJMHhmZmFhMjRiYSwgMHhhMjJiZWRhNCwgMHhiYTlmOTNlYSwgMHg1ZTdmYWEyZCwgMHg3YjU0NGQ3MCwgMHgyYmFhY2VmZSwKKwkweGE4NjE3ZjkyLCAweGIxMWZhYTJlLCAweGYyMGRmNGQ3LCAweDFmZWRiYWJmLCAweGVmZjllNmEyLCAweDM0YTJmZjk2LAorCTB4Y2JhZjJmM2QsIDB4NDM4ZTk5N2YsIDB4YzdmYTFhNWMsIDB4NDUzOGUxYTIsIDB4OTNmMjE1ZTksIDB4YmUzN2Y2YWUsCisJMHhhMDRiZmNhMCwgMHg1M2JjZTU0NCwgMHgxYjc4MDk2MCwgMHhkOTA5ZWRiMSwgMHgxYjVmOTEyNywgMHhhMTM2YWM4MywKKwkweGMxMzI2OGRmLCAweDhmZjdmMjNhLCAweDg3OWM0YzlhLCAweDJhYmNlYzM0LCAweGFhOGJlMDRkLCAweDlmZjdlMTM0LAorCTB4ZjhhNjliNDYsIDB4ZWNjZmYwNjYsIDB4Nzg0NDllZGUsIDB4YTA5OTM2NDMsIDB4ZTI5YWUyOWIsIDB4YzY3MWJmNjUsCisJMHg3MTZiZTEwMSwgMHg3MDM0NzkzZSwgMHg3OTM0YWI1ZSwgMHhhODk5YjJmNiwgMHgzMjliZjI4NywgMHhkMWU1MWZlZiwKKwkweDdkNzE1MDdlLCAweDNmMWZjNzhkLCAweDhiOWZmOTQxLCAweGZhNGE5YjBlLCAweDAzZmFhNzJhLCAweDdkNzBiNzE0LAorCTB4MjQ2MWU3YTEsIDB4M2VhZjc5NWUsIDB4NDlmNjg5M2MsIDB4Njc5NTdkNDYsIDB4YmZlYTY2ZTMsIDB4OTM4NThlZWEsCisJMHhmNDNhZmY2OCwgMHg0OThlOGVmYywgMHg4ODcyMTE2NSwgMHgzODhhZGY1YywgMHg2OTdiZThmOCwgMHhjNDY3M2YyMiwKKwkweDZhYWNkYjg3LCAweDZiY2EwZjYzLCAweDNmZmMyYzlhLCAweGE1ZWY4NWM2LCAweDkwM2ZmYWUxLCAweDljMGIzNjFlLAorCTB4YmFkMzMwMTUsIDB4ZGU3MjRlMzEsIDB4YmE4MDg1ZGYsIDB4ZTE5NGNiMGUsIDB4OGQ3ZWE0NzgsIDB4ODRjMWY1NGEsCisJMHgyNmY5ZGM2OCwgMHgwOGZiNDQxMSwgMHhmZmM3MmE1YiwgMHhiYjdmMGQ1YiwgMHgzNmY5OGYyZSwgMHgzZmVlODhlOCwKKwkweGMxNDRmNzc4LCAweGQ3MjM2ZmNmLCAweDJjNjdkZjkwLCAweGRkMDYxZDYyLCAweGZjM2Y3NWU3LCAweDdiODdlZWE5LAorCTB4ZTQ0NmZmYzksIDB4NzhlZGQ3OWIsIDB4ZjVmMDg5M2MsIDB4YTc4MTVjOTksIDB4ZThjZmU3OGQsIDB4NGQyNjdkNzIsCisJMHgzYmY1ZTllMCwgMHg3OTkxOWMxMywgMHgyYjkwZWFjNywgMHgzNmRiNWVhYSwgMHg0MjM2NzljYSwgMHhlYjFiZDcwZiwKKwkweGFkMGE0YmYwLCAweDNmNmU4MzYzLCAweGM5M2Q5ZGQ1LCAweGYxZTMwMWI3LCAweGRjNzBkM2E3LCAweGJmMTcxZDlhLAorCTB4MzdkZThmYmQsIDB4Mzg4ODY0MGQsIDB4NmVmOWUwMWEsIDB4ZDcxODBmNzksIDB4NDQxNWYyZGYsIDB4ZDI5N2QyZTEsCisJMHgyNWU1N2U0NCwgMHg5NWNiMGJhMiwgMHhkZjUxMzg1OCwgMHg3NzZjNjI1NiwgMHhmY2M2Zjk1MSwgMHg3YzNiYjI3MiwKKwkweGJlYjA5NjFlLCAweDg0Y2MxM2FjLCAweGIzZmI5NmQzLCAweDUzZjRjNGNjLCAweDJmNjc3ZGUwLCAweDlhNWY2ZDJlLAorCTB4MDRkY2YzY2EsIDB4YzVjNTMzM2UsIDB4OWQ1ZGJmNzcsIDB4YzY4NmZkNDQsIDB4NDMxOWM2MzMsIDB4MmJkNDU5YjksCisJMHg0MTljYzA1NywgMHgyNDZiOWFmOSwgMHg5ZjM4MGRjNiwgMHhlZWZiOWU4ZCwgMHhlMjk5YjMxOCwgMHhiYmRmMzFhZiwKKwkweDBlZjBiZmUwLCAweGYwMGFjNWVhLCAweGY4YzZiOGYyLCAweDdlNTFhOTAwLCAweDkwY2IwM2Y4LCAweGJmMjRlZDFjLAorCTB4OTg1MzJlYmEsIDB4Njc3NTM5ZjIsIDB4ZDFmZTdjYWMsIDB4ZWJmMDMwZGYsIDB4ZGZjZTkwMDcsIDB4NTdiMTdkNTUsCisJMHhiYjdmYmE0MiwgMHhmYjU3ZTA3YSwgMHg0ZmFkZjlmMCwgMHhiNWM1ZGZhMSwgMHg4N2ZkZGI2NiwgMHhjM2NlMjJkMywKKwkweDkxN2RkY2NlLCAweGM4ZjEwY2VkLCAweDMzOTI0ZmYzLCAweDI1ZWFjOTdhLCAweGVhYTBmOGZiLCAweGJjNDg5Y2E1LAorCTB4NjE2ZDIyN2YsIDB4YjMwN2JkMjcsIDB4NDc5ZWUyZDMsIDB4YWIyYmVlYzQsIDB4NmVkOTNmNDgsIDB4ODY5OWM2NTUsCisJMHhlYmE3ZGU1ZSwgMHg5MzBiZGQ2NSwgMHhkMjVkNzlmOSwgMHhmZDQ0N2FkMCwgMHg1N2YzOTk3OSwgMHhiY2FjMDc3NSwKKwkweGQ3NDc3ZmJmLCAweGJmMTdhYTg3LCAweDlmOTkxOTk4LCAweDU0YmQ0MTZiLCAweDcyNzRhODczLCAweDJhOWNlNzQ5LAorCTB4ZjFjZjY2ZjIsIDB4NmZkNGE5YzEsIDB4MjFlZmVjYTMsIDB4ZTk3ODM5M2QsIDB4ZWZhYTY0ZTMsIDB4NWU0YmYzNzksCisJMHg2NTc0ZGMwZiwgMHhmMzIzZjdmNCwgMHg5YjVjZjkyMiwgMHhmOTJlZjAzNCwgMHg1NjdkZWE5MywgMHhhNTUwZjI5NSwKKwkweGRkOGVmMmZiLCAweDRlOWFmNThlLCAweDllYjgzYmY0LCAweDIzOWVhZTBiLCAweDZhN2VkMzRmLCAweDk3OTQwNGJmLAorCTB4YjAyNzA5YWEsIDB4OTU2OWFmNzMsIDB4YWFjNzk0ODIsIDB4NjViZGRiNmEsIDB4OWFhYmQ2MGMsIDB4YmE5MzE3OTcsCisJMHgzZjBiMjZkNiwgMHgwNTIyZDM1NiwgMHhhN2YwM2M2OSwgMHg3NDhhN2YzMSwgMHgzNTdkMjhkYiwgMHhiMDBiMWZlZiwKKwkweDE4YThlZmJkLCAweDc4N2Q1Y2ZmLCAweDRmZjQ1OWVhLCAweDlkOWYyZDdkLCAweGI0MzYzYTIzLCAweDc2M2YzOTU5LAorCTB4MTk2YzI5MmUsIDB4ZDg1ZWYzODMsIDB4ZWEwMjg1MmQsIDB4YjlmNmRkYjAsIDB4NWQ2YTNlYzQsIDB4Y2QwYjMxZTgsCisJMHhlNWI5ZWViYiwgMHhmYjBmMDRkOSwgMHg5MGI0OWRmNiwgMHhmYWQ3NWM3ZiwgMHhiY2ZlYjk1OCwgMHgyMGZiODQ1OCwKKwkweDlkZmFjNWRiLCAweGYzMjI5MzFkLCAweGZjMjFmNzQ5LCAweDgxZjhjODgzLCAweGY3MDgwNWY0LCAweDA5ZTM5MDgyLAorCTB4ZGFhYjNlNWQsIDB4YmIxMjM2MjcsIDB4N2RlZGFmZDAsIDB4ZTZiZjYyNWEsIDB4M2JkZjkzNzQsIDB4ZmZkZmViYjgsCisJMHhmZmRkZTY5NSwgMHhmZjk4OTMyZiwgMHg3ZmM2NTdjNSwgMHg0ZjE4MDVmMCwgMHhjMGYzZThkNCwgMHhkYTE2NTNmOSwKKwkweDlhYjRkNjFmLCAweDE3M2JjNWNmLCAweDc3ZGJiZWZhLCAweGYwYzY3Yjk1LCAweDU3MTYzNmZlLCAweDM4ODBiMTZmLAorCTB4YzEwMDk5YjcsIDB4MzgxZTI5ZTcsIDB4OTFhYjJjMDYsIDB4MDc1MTFmOWUsIDB4MGU3MTQ3YTQsIDB4ZGQ2MGQ2NTgsCisJMHg3MTQ2NzY0NiwgMHhjNjA4ZTNjMiwgMHhiOWQ3MTdkYiwgMHhmNzBmOWUxNSwgMHg5ZGUzMWIwOCwgMHhlZGVhZDY1NywKKwkweDg1OGY2YWE1LCAweDllMzU3MGYyLCAweDc1ZTkwYjVlLCAweDcxMTNmODRkLCAweDUxZjZkZjVlLCAweGJmNjcxNmI5LAorCTB4N2UxNmVkNWMsIDB4YzMwM2QwZDMsIDB4YTdkMmViZGUsIDB4ODc5ODVkYjAsIDB4YzZjODYwZTIsIDB4NjZiODVmNzYsCisJMHhkZDUzZTI4MCwgMHhkYTBlZDQ3ZSwgMHgwM2ZjYjgxNywgMHg2ZjYwNzc0NCwgMHgyYmViNGE4MiwgMHhjY2M5ZjdkZCwKKwkweGZlNzk4ODllLCAweDUxODdkYmE0LCAweGEzZjk3OWFmLCAweGU3ZTI2NmE5LCAweDJhYTY4ZjllLCAweGZiY2ZjMzQ5LAorCTB4ZTJlYjFjMzIsIDB4ZGRhYTU1ZTUsIDB4NGU2ZjRlMjIsIDB4YjY4ZjlkZjYsIDB4MTg2ZjA0ODMsIDB4Yjc2OWFkZTcsCisJMHhkYTA3ZjlmMywgMHhlMjhlOTZjMSwgMHg3NWI4M2I0OCwgMHhmM2QyMGVkZCwgMHgxNjhiZDk3NiwgMHhjYjZkMzUwMSwKKwkweDNmZGMwZGZkLCAweDkxZTI0YmM5LCAweDQ4MDYxNmRiLCAweDhmYTc2NTBmLCAweDhhZmUxM2Y1LCAweGNmZDRjZGYzLAorCTB4YWU1MjI2N2QsIDB4ZTkxYjdmZGIsIDB4NGYwOGUyOTEsIDB4ZDQ2YmNjOGEsIDB4ZDE3ZTdhOTgsIDB4Yjc1YzkxMjEsCisJMHhhZjlhMjY2YiwgMHhjOTZmZDgwOCwgMHhlZjBmNWYwZSwgMHg1NDMzOGE5ZiwgMHg5ZTFlYzdkYSwgMHhhN2M0MGU1MSwKKwkweDM4OTAxZTlmLCAweGY1NGU2YjVmLCAweGY5MjJjZDZmLCAweGJmYjk5NTFlLCAweDAxMGJmMGU1LCAweDliZWU5NzNhLAorCTB4OWY0NGM1MDYsIDB4NGU5ZmRlYjEsIDB4ZTM4YzgzMGIsIDB4MmYwNDJlNmMsIDB4ZmY3OWJiNGQsIDB4ZGZkMjFlMmQsCisJMHg2MTFmYTY5ZiwgMHg4NmY3NjE3YywgMHgyMzRhZmM4MCwgMHhlN2NhMDZlMiwgMHg2MTQyMGJkOCwgMHhkNzIxMjcxYSwKKwkweDNjZTMyYzU3LCAweGYzMjc2ZTc5LCAweDdiZjU2MmNiLCAweDRkOTQxZjI5LCAweDRkODc1Yzc1LCAweGZhMjNhZGYxLAorCTB4YjE0NGVlNmMsIDB4NjU3YjFlOWYsIDB4YjIzZWJhNzksIDB4MWJjZTg1N2YsIDB4ZTkyZjljZmQsIDB4ZWQzZDBiMzMsCisJMHg1ZjE4MGFiYiwgMHgzOTlkMWRmMywgMHhiZTA5YTRkNCwgMHg2YjJlNzZjMSwgMHg0NmE2M2FkYiwgMHhmMDQ0ZGJjNiwKKwkweGRmNzllOGRiLCAweDQ0YmM1YmZlLCAweGQ3NTEzOWJmLCAweGI2NDQ4Y2Y3LCAweGZmZjlkODhiLCAweGU0OTlmNDk5LAorCTB4MzViMzVhNmUsIDB4N2M0Y2Y4OGIsIDB4N2JmNjQ3NTMsIDB4ZjA2N2VmNWEsIDB4MmU3ZjE0MDMsIDB4YWE5MjJiZDksCisJMHg4ZDBmY2JjNSwgMHg0ZTNjOTc3NywgMHhlYTljZGQ3MiwgMHhmMDE1NzVjYiwgMHhjMzAwYWNmMSwgMHg3NmI4YzQ5ZSwKKwkweDU3ZmZmZDg3LCAweGU5MWZmZjY0LCAweGY4YTJkY2ZjLCAweDRkZGZjNDZkLCAweGYxNmNkZDdhLCAweDdmYjY0ZWE5LAorCTB4MGZmMzRhOWYsIDB4ZmM3NDZmYWQsIDB4ZjZlOWI1ZjUsIDB4ZmY4MjY1YmEsIDB4NGZiN2Q3MWIsIDB4MTUzOTlmNWYsCisJMHg0YmM2OGRmNSwgMHg0ZTY3ZWUwNiwgMHhmZjQ4MDYwZSwgMHg3OGEwOTI5YSwgMHhlYzNlM2UxMywgMHhkZDkwZjcyYSwKKwkweGM1ZjQzOTZkLCAweGE2ZjdiMjM4LCAweDI4MDdhZjI0LCAweGQ2NjA3NWFmLCAweDJkZmJiMjJhLCAweGZkNjM2ZmEzLAorCTB4YmM4NWY0ZmYsIDB4OWU2MjM5MjIsIDB4YWQyNTY5MTMsIDB4Njk3ZWJmZTQsIDB4Y2ZlMmNiYWMsIDB4NDJmYzc1YTUsCisJMHg1ZDYzMjNkNywgMHhhYmRmNmVlOSwgMHgxMWJjODhlZSwgMHg5MTVmNzU4YywgMHg5ZmJlODBmZSwgMHgxN2YxZWFmMywKKwkweGZmOWM3M2Y3LCAweDJmNDQ4N2ViLCAweGQ2ZWUyNzlkLCAweDNlMDJiNzcxLCAweDc4M2IxYmQ2LCAweDFhNTVjNjU1LAorCTB4MWY3YmEzMWMsIDB4ZDgyNjFkOGQsIDB4ZTRhNmNiNDYsIDB4NWQzOWM0NTQsIDB4MzYzMjZjYjIsIDB4YjcwZDlhN2QsCisJMHg0YzZjNzRlNiwgMHhlYmJhNmZlZCwgMHhiZDIxMzQ5NiwgMHgwYjIwMjFmYiwgMHhhZjlkMTY3YywgMHhhNGQyNGQwMCwKKwkweDZiYzUzY2M4LCAweDE0ZjNmMTU1LCAweGM5MWJmOGNmLCAweDllNTZmZjJlLCAweGI0ZDg0ZTYyLCAweGY3ZjI5MmRhLAorCTB4YmFjZTJiZTcsIDB4OWYzZGY3YTMsIDB4MmEyNjU1YmEsIDB4MzFmNDJiOTQsIDB4OGEwYzRlMTQsIDB4YTc0YzE3YmMsCisJMHhmMTMzNTM3ZCwgMHgwNjdiZmYxMiwgMHgyZGY2Y2FkNywgMHg1Y2RhZTVmNSwgMHhmYmVlNGY2OCwgMHg4YjFkNmRiNywKKwkweGQ2MmQ5Nzc2LCAweGZhNDZmNTRmLCAweDNkYzBhNzdiLCAweGQ3OGZmOTQzLCAweDQ2ZWUzMGE2LCAweGZlZjMyNzNmLAorCTB4MTJkM2E5ZGYsIDB4YzQ2MmI3MjMsIDB4ODhmN2MwNmIsIDB4MjdmMmEzNTIsIDB4MjY1ZjIzZTEsIDB4NGFlZDdlOTMsCisJMHhiOTIyZGY1NSwgMHg3Y2M5NzQwYywgMHhlOTQxMjQ0ZiwgMHhkOGUyYjhiMSwgMHgwM2MyM2VkOSwgMHhkMzhiZjdlOCwKKwkweGQ2YzQzZWM1LCAweDZkMTdjZTI2LCAweDMxN2VjNmFhLCAweDI2OWNlOWMxLCAweDc5YzVkODQ3LCAweDU3OWZjOGI3LAorCTB4OWM2MGY5MWYsIDB4MDVkYzMxMDUsIDB4MDJlNGYxZDMsIDB4ZGVjMzdmMWMsIDB4YzM0YTY0OTYsIDB4ZjZmMzNmYWQsCisJMHg1MzkyYmE0YywgMHhlOTFkZjhhMiwgMHhhNTRmZmViOCwgMHhjMjM2MzkxZCwgMHg1MzgzNWJhOSwgMHhmMGExM2Y4OSwKKwkweDkzZjIxNDg0LCAweDk0MDQwYTg1LCAweGYxZjEzOGEyLCAweDE0ZGUyMmE5LCAweDg3YzUzY2Q3LCAweDNlZDg1MGZmLAorCTB4ZTVlMTJkN2QsIDB4MmY1OGIwZGEsIDB4YTZjNjYxY2QsIDB4N2FlMDM2YmMsIDB4MmE2MzViNWYsIDB4NmZmYjU3OGQsCisJMHhiZjkzNDYwNywgMHhlMDVkMjk3YSwgMHg0ZDJmMTc5YSwgMHhhMDJiZWYxMSwgMHg3NGFjZmY1MCwgMHg0MWU3YWU5NywKKwkweDVmMGJlNTEzLCAweDdkOGNmM2QyLCAweGNmZGM0Yzk3LCAweDZkYjBiZjk4LCAweDNkNDRlY2ExLCAweDNmNmYwODI4LAorCTB4NzZjZDc5YzQsIDB4NGRmMjRhYWIsIDB4M2YwNDBlNzgsIDB4NzcxODEzZGEsIDB4MGM1YzFlZDYsIDB4NWRmYWU3MTQsCisJMHg3ZGIwOTVlMCwgMHg2ZmMwZTI1NywgMHgwZTA2MWY0OSwgMHg3NzNhNTU1OCwgMHg4NzZlNzA0ZCwgMHg5NzdmMWM1NCwKKwkweDBmMmI0ZjdlLCAweDMxYzViMjE1LCAweDJmOThkY2ZjLCAweDk0ZTdmZGExLCAweGUwYmQyNDEzLCAweDY1MDRkZmYzLAorCTB4ODhlMzVjM2IsIDB4ZDMxMjc3ZTQsIDB4ZDVlYmEyNWQsIDB4ODliMGM0YWUsIDB4MjYwNjQ1Y2UsIDB4ZTk4NzVlZTEsCisJMHg3ODEzYTYxYSwgMHgzY2NlODM1ZSwgMHgyY2JiZmJmNiwgMHhlMDdlZTcwMywgMHhhNDljYmE2NiwgMHhlODIwNzkwNywKKwkweDJhYzlmNjg0LCAweGE3MDRkMWY5LCAweDcwNDhlYmM2LCAweDM0ODBkZWFhLCAweGE5ZGFhZTkyLCAweDZlZDBmYzA4LAorCTB4MzVlNzI1MWUsIDB4NmJhZWQ4NzcsIDB4MzZlYjg3MTMsIDB4MTM1ZDg1YjQsIDB4ZmY4ZjNmNDAsIDB4OGYzYTM2ZDUsCisJMHg4MzkzYWExZiwgMHhmZWZjM2Q5OSwgMHg2YzJmZTkyZCwgMHhmOWNiMWE2YiwgMHhhMjhjODBiZCwgMHg5NDk5NjNiNiwKKwkweDc5NTRlYjRhLCAweGI1NDVlODdkLCAweDA3YzEyMmY0LCAweGI3NjdhZmJhLCAweGZlYTFmNjg5LCAweGFhMGVlN2E4LAorCTB4YWYzZjQ0M2IsIDB4OTI1ZjY5ZDUsIDB4ODc0MmY2YzUsIDB4ZjA3ODQzZDcsIDB4ZWU3YzI5N2UsIDB4ZGVkN2I0NWEsCisJMHgwNTI5N2NjNywgMHhkMzVlYWViOCwgMHhiMTlhMDdhMSwgMHg4NzU2OWZkZiwgMHhlOTNlZTg3MiwgMHgxYWZmNTY3MywKKwkweDNlNTdjZmQyLCAweDIxNDhmMzVjLCAweDY2NWRkYmY5LCAweDlkZjkyNTZmLCAweDE4Y2ZjMDllLCAweDU2NjhiZjg3LAorCTB4MWRkODQ1YjcsIDB4ZTBjODFkOGMsIDB4ZjMzMTgwZmIsIDB4ZjRkOTllZDQsIDB4ZmRkN2MyMzMsIDB4Y2U5NTI1ZmIsCisJMHgwM2NkZmJiZCwgMHg5YWVlODhlMywgMHhlODVhM2ZmNiwgMHhmZWVkNjRiZSwgMHg0YjRmMTg4ZiwgMHg5YTFhZmUxOSwKKwkweDAzNWI3NjZmLCAweDAzOWI2YmRmLCAweDFiNWVmOWRiLCAweDlmYmU0M2ZhLCAweDdmMDhmMjE4LCAweGU3M2E3ODMyLAorCTB4MzkwODg2ZDksIDB4ZWMyZTkxM2MsIDB4ZTNmYzA2MGQsIDB4ZWJiNTVlMjksIDB4ZjY5MDdhZjYsIDB4ZWRlZTU4ZGQsCisJMHg4ZDIyNzViOCwgMHgwN2NmNTdiZiwgMHhjMDM1ZWYxOCwgMHhmN2M0MzFhMSwgMHg5NzFhZjA0ZCwgMHhhMGZlZjNjNiwKKwkweDk2N2E0MTUyLCAweDRlZWRhZWZmLCAweGEzZmZhMjJkLCAweDNkYmYwMmU5LCAweDY2NzAyZTlhLCAweDg5YmY4Njc2LAorCTB4ZjFkZjVkZTgsIDB4ZDY5OTI1YjEsIDB4OGUzNDM2NzksIDB4NDUyMWI5ZjYsIDB4ZjFjNjcxNGQsIDB4MWJmNjQzMjMsCisJMHhjYWI1NGY2MywgMHhkN2ZhODU4MCwgMHgyYmY2MDc5ZSwgMHgxNGE2ZWYyOCwgMHhlZjRiZGY5NCwgMHg4ZDU5NGRiNiwKKwkweDRjYTJmN2NmLCAweGUyYWUyODUyLCAweGVmZTI5NGZlLCAweDBjNmZiMzVlLCAweGU3Nzg2ZmY1LCAweGM3ZTRhOWYzLAorCTB4ZTc0ZjQ4MWUsIDB4NjA3ZTdmZjUsIDB4MWJlMjc4ZmQsIDB4MjI0OTdmZWEsIDB4NjA2ZWQ5ZDksIDB4NjlkODY2YmYsCisJMHhiZTI5ZDkwMSwgMHg1ZmZhNDA1ZiwgMHhmNjNjZjU0YywgMHhkZDJjYmJjYiwgMHhmNzJlZDg0YiwgMHgxMmVjODA5YSwKKwkweDAxZWQ5ZmY1LCAweGY4NDlkZmY1LCAweGY2ODljMGFlLCAweDY2NGZlZmMwLCAweDZkZDVkZjNiLCAweGEzMjcxOGQyLAorCTB4ZjVjNDlmNWYsIDB4YmVhOTFiOTIsIDB4YzljY2JiYWIsIDB4MDVmNzRlNzYsIDB4YzM1ZWM4OGEsIDB4MTA5Yzc4ODcsCisJMHg5ZDEyMjRjMCwgMHhmY2E4YmUwNCwgMHhlOTk5M2I4OCwgMHhlN2U1ZmMzNiwgMHg4NmUzZDA2ZSwgMHg3NWM1ZTI5YSwKKwkweGNhMzk2NWQ4LCAweGE0ZTIyMjNlLCAweGY0NzExYmE4LCAweDllZGIzM2M5LCAweGVlODE3YjQwLCAweDBmZGMyOGQ0LAorCTB4ZmZiZjBiZWYsIDB4ZDU1NjNkNWQsIDB4NTk3NzNlYmQsIDB4ZWViM2FlMzMsIDB4MDdlZGNjODQsIDB4NTg1ZTdkZjUsCisJMHg3YTQzOTNkNywgMHg4NmUyODY3ZSwgMHhlZmRjNWQzYSwgMHhiMDMzZTdhNSwgMHg2NzVkZjc0ZSwgMHgwOTRiMWI2YSwKKwkweGQ4YWVjZDYzLCAweGI5Y2E5ODdlLCAweDQxMjk1MGJlLCAweGJhYWJmOWM4LCAweDk5ODU5YjBmLCAweGI1ZmU5M2U3LAorCTB4OWYyZWJhMWUsIDB4OWZmNWNkZWUsIDB4OTIwMjQyYjEsIDB4YzBlNWZhZDgsIDB4YjVjNDVmNmYsIDB4ZjkxMDcwM2QsCisJMHhlMTRlMjcxZiwgMHgxMGZmNTg3MiwgMHhjZjAxOGQ2ZiwgMHhjOTdlZjZjOCwgMHg0YmJkMjNmMCwgMHg1YWZiMWY0OCwKKwkweDEyM2FlMWU1LCAweDRkOGE4MzUyLCAweDNmZDI3N2Y1LCAweGJhYzAxNmRkLCAweDlmN2I0MzNmLCAweDk5YzdlMjU0LAorCTB4M2Y0OWY3ZmUsIDB4OTk3ZTRmZmIsIDB4ZjdiOTY2NDEsIDB4YjdjN2Q4YjQsIDB4ZDI3Y2I0NWEsIDB4YjgwOWQ2OWYsCisJMHhhN2EzOGRiNSwgMHgzYzhiYTVhZiwgMHhlMjE1YjE0ZiwgMHhhNTdlNGI5ZSwgMHgwMDljYzFjNywgMHhmZWYxMjIzYywKKwkweDUxMDY3NjVjLCAweDY1NWExN2VlLCAweGU3Zjg4MmNkLCAweGNlNTYwNDNjLCAweGU3YTM3ZjIzLCAweGZkMDFlZjZmLAorCTB4OTQxZmUxYTcsIDB4ZjU3YWJkY2YsIDB4MTgyYmMyMWUsIDB4NjI3ZGVlYjcsIDB4ODliZmI5YzQsIDB4YmI2ZDY5ZjQsCisJMHg2Yjg0ZmYwNCwgMHhmYzRjZjc1ZiwgMHg1ZTQ2MDk3YiwgMHgxZGI2YmVlYiwgMHgzY2EwYzY0NywgMHhlZThiOWVhYiwKKwkweDllZTg2MWI3LCAweGJkZjc4ODdiLCAweGVmYTM5YTFiLCAweGFlOTU3YzFiLCAweDMwODk5NmUzLCAweGVhMGI3MDkxLAorCTB4YjMwN2ZiMTMsIDB4ZDQ1NjlkMDIsIDB4ZmQzMjU3ZGYsIDB4N2U1ZTEwOWYsIDB4ODRmODI0YzksIDB4ZjJlZDk1N2UsCisJMHg2NzFlYjcxMywgMHgxYTNmODQ0YSwgMHg4ZjdjMDBiOCwgMHhlODY3NmYyOCwgMHg5OWQ3ZGQzMCwgMHhhNWU1OWNkYiwKKwkweGEyMmFlNjM5LCAweDE2NWI2ZTdkLCAweDgyNTAxOWM3LCAweDk4MzdkZDMyLCAweDE5Y2JmOWFkLCAweGQzYjQwNzVmLAorCTB4OWQ2NDJmNzQsIDB4ODljMTI3ZWUsIDB4YTNiZjI4N2YsIDB4OGU5ZDZiYWYsIDB4NDYwYmVlZTcsIDB4ODIwNzNkZDMsCisJMHhkYWNmMzQ4ZCwgMHhkMWZlZTI5ZCwgMHhiZmYxOWRmYSwgMHhjN2Q1YTgxMywgMHhjOWQ0ZjBkOSwgMHhhYzBlOTQyMywKKwkweGFiZjc0NTBlLCAweGRiNTNmOWQ1LCAweDA1YmNmZDE2LCAweDlmMTgxMjc4LCAweGZjY2Y3ZDExLCAweGZjNDNlZjRhLAorCTB4YzVmMDJjYzksIDB4NDYzOGZhZGIsIDB4YzIxOWI1ZmIsIDB4NzkyMGQ2N2YsIDB4NDEwZGRmMjQsIDB4YjM3YTQ4MzksCisJMHgwYjI0MGE0ZSwgMHhkNThlMGI3YywgMHg4NjVkZjc0OCwgMHg2NWY3ZThiZSwgMHg3M2Y5ZDZlZiwgMHhiYzJmYWU5NywKKwkweGZhYmY3YzJlLCAweGU3NDgyOTE5LCAweDI0ZmY3NzgwLCAweDQyN2JmZTlhLCAweDFmNDljYmFiLCAweDVkNmFmNTYyLAorCTB4NmRmMTk5YjMsIDB4MTBiNDZjMTUsIDB4YWJkNThkYmUsIDB4ZDk3ZDIxYWEsIDB4MTYzOGExNmUsIDB4N2UzNTRmYWIsCisJMHgwYjc0MzJlOSwgMHg0YjdmZmU1YywgMHg5ODczN2FmNywgMHhmZmViNGNmMywgMHgzY2E1ZTRhNywgMHhkZmFkYmRkNCwKKwkweDc0NWU1MGIxLCAweGY5MDg3ZGE0LCAweGEyN2ExOTU2LCAweDVkZWZlYmFmLCAweDdjODZlZGNmLCAweDk2MTRjMGE3LAorCTB4MTVkYTQ1NmYsIDB4ZjFhMjgzZWUsIDB4NTBjYjZlZjQsIDB4N2NmMzkyOWUsIDB4MzgxMzlkODMsIDB4NTFlODZlM2YsCisJMHgzYWU1MzhlYywgMHgxNGZjNWYyZSwgMHhhZGExNzk3MCwgMHhhMmY4NGVkNCwgMHgyYmM5YjhmZiwgMHg0YzdmOWNhOSwKKwkweDRjM2U0NDJlLCAweGUxMDMyMDNmLCAweDg5ZjZmZThkLCAweGZlOTAwNzhmLCAweDM3YzUxM2EyLCAweGZhN2NiZTUyLAorCTB4ZDgzZjhjMDksIDB4ZjhiM2E3YmUsIDB4MTE1ZmU0NTcsIDB4N2Q5MWE0ZTEsIDB4NGVjYWVjMmYsIDB4Yzc4M2JkZmIsCisJMHg3ZmRkZjhlMSwgMHg0YWYxZThiYywgMHhjYmM3YzNmMiwgMHgwOTVjNjk4YSwgMHg3ODdlZTlkYiwgMHgxYTg3MWU5MSwKKwkweDdiZDkxNzhlLCAweGZkZDFlMjIyLCAweGJlZGYyMjE5LCAweDQ3ZmJmM2M1LCAweDc4YjA1ZjY5LCAweGY5NGJkOWI3LAorCTB4ZmY2NmM1OGUsIDB4YWZhNDA0YTYsIDB4ZGJjOTA1ZTgsIDB4ZTkxZGIzODAsIDB4OGQyNGY0M2UsIDB4NTJhNGY2OGIsCisJMHhlZWYxNjZiZSwgMHhmNmEyMWRlZiwgMHhkMzEyNWRkYSwgMHgyOGJlZGZkZiwgMHhjN2M1MTc3ZiwgMHhiOGE1ZWNhMCwKKwkweDU3N2VkZmQ3LCAweDczODRiZGMxLCAweDcwNTNkYzBlLCAweDQ3N2NjNDU3LCAweDU5NWY4NTUyLCAweGUzOTk5NTdjLAorCTB4ZmI2OGVmNzEsIDB4Y2YyOTJiMmYsIDB4ZmY2MGVkYTksIDB4MWVlYWZiZDAsIDB4YjA1NzdmMGIsIDB4YWUwZjAyNGIsCisJMHhmMGU3ODhmMywgMHhiZDBmODlhZiwgMHgwODVhNGVmYiwgMHg5ZWI2OTdlNCwgMHhmMWM0ZjRiNCwgMHgwMTc5NDZjZiwKKwkweGNlNjE3MWI3LCAweGYwYjc2ZWJmLCAweDdmYmRjYTNkLCAweDZiN2FkMGIwLCAweGYzODhmYjllLCAweDEyNmQ1NTY5LAorCTB4NjdhYWE3ZmIsIDB4Nzk0YWEwZTQsIDB4NThhZjAzOWUsIDB4OWE2YjNmNDgsIDB4OGFjY2M4MjUsIDB4M2I3MzM3NmMsCisJMHhmZmFhNTFmOSwgMHg2NWY4NTliMSwgMHhlOGQ3ZWY0MywgMHhiZGU4NmU3YSwgMHg3NDZiMDc2MSwgMHhkNmQ3NzVmZiwKKwkweDE3YmYzZDY4LCAweGYxYTMyZGI0LCAweDU3OWE3YmZkLCAweDdiYTAzZGYzLCAweDVmZjdjN2I2LCAweDRiNWMxZjg2LAorCTB4MmI4YzUyZmIsIDB4ZWU4YTlmNmIsIDB4N2U5MGRmNzcsIDB4YzdiZmQ4MDcsIDB4MzI1N2M5ZmEsIDB4M2NkOGYzZjQsCisJMHgxZWZkMjNjOCwgMHhhZjE5YWYwYywgMHg3ZTdkM2RhMCwgMHhjNDNjNmFiMiwgMHhkNzFlM2JjOSwgMHg4ZjExODBmMSwKKwkweDhlMjZjMzA3LCAweGZhZmRiMTY3LCAweDI4NWEyZWRhLCAweGZlNzZkNjhlLCAweDc5NmJmMTk5LCAweDg3MmM2N2ZiLAorCTB4YmUwZWY2Y2EsIDB4ZjgzZDdhYWYsIDB4YWYxZjEwMzcsIDB4MDkzYmI3NmYsIDB4MDhmNjU3NDcsIDB4NmVkMjVmYmIsCisJMHg2YTI1MDYwZCwgMHg3YzkxMzUwZiwgMHhlZjhhMGZmYiwgMHg0YWFmMDIzYiwgMHhmNzQwYTM4YywgMHg3ZTc1NmI3ZiwKKwkweGI3ZjlkNWFlLCAweDYzNjdmNzE2LCAweGJlOGFkZWU4LCAweDc3MmZiZWZmLCAweGUyYmExMWM3LCAweGRmM2ZhMzUxLAorCTB4OTkzODc1ZDAsIDB4ODQwNGI4ZjgsIDB4MTIxMjVhN2YsIDB4ODc5MGM5ZmUsIDB4YzY0NjVmMTEsIDB4OTM2ZjgxZDEsCisJMHg1YmI3ZDczYywgMHg1MmY4YmVmOSwgMHg2ZDJkM2ZkZCwgMHhjNTkzZGYxNiwgMHg1MWZlOGJmYSwgMHhkZGZmOTE3NiwKKwkweDhkOGRlODJiLCAweGQxYWQzNWE3LCAweGQyMzJiYmZkLCAweGVhMGZkZmQ5LCAweGMzMTNmODc4LCAweGE4ZjJlOGRmLAorCTB4ZTUzYjAwMWMsIDB4YjJhODk3ZTcsIDB4NzU2ZmM4MzcsIDB4ZTc3ZjM0MmIsIDB4NjNjZjg5NTQsIDB4Mjk4OWQ1M2IsCisJMHgxOTRiZWVmMSwgMHhjZTNhOWJlNSwgMHgyOGNiZWEzNywgMHg0M2ZkODY0ZiwgMHhjODhlZWRjZSwgMHg5OThkZmM3ZCwKKwkweGNkNTRhZjAyLCAweGNmMjQwMzkxLCAweGIyY2Y3ZDg4LCAweGZiYjhhY2EyLCAweGJhNDRjODFlLCAweGQ3N2IxOGRmLAorCTB4ZWU0NWE2NGYsIDB4MzkxZGI0N2IsIDB4ZjIzZjY3YTQsIDB4Zjc0OTVlM2MsIDB4ODU5YjZhOGMsIDB4OGQ5YmU4N2YsCisJMHg4ZTEwYTZlMywgMHhiNWM1YzYwNywgMHhlZDIwZDZjZCwgMHg0ZjUxNmE0ZiwgMHhkMjMwN2JmOCwgMHg3NmJmYjIwZiwKKwkweDA3ZTkxMTY5LCAweDk5MWMxYmVlLCAweDNhNzJjZjQ4LCAweDJmZjVjNGFhLCAweDhlMzhjMzZmLCAweGZiMmYyZmMzLAorCTB4MmJhYWY1OGMsIDB4ZjkxYmFjNWIsIDB4MWY2ZjE5OTYsIDB4NmExZmVjNjEsIDB4NmE5YzA5MmUsIDB4N2E1MWFmM2MsCisJMHhkMzUxMWY3OCwgMHhiNzQ5ZWUyZSwgMHg1YzYyZmExZSwgMHg3ZmRiZDIxNiwgMHhhZGM2M2ZlMCwgMHhhNjQxNzJjNiwKKwkweDI1YWRiZjg4LCAweGJlZTk4ZmExLCAweDZjYmJlN2NmLCAweDkwZThmMTcxLCAweGQ4OWE5N2JmLCAweDNkY2M2YTBlLAorCTB4ZjY1NzhjMTksIDB4ODU5YzJlMjMsIDB4NGZlZGYzN2UsIDB4N2FkMWRmNzksIDB4Y2E0ZWUxMjgsIDB4ZjFhZGY1YzcsCisJMHg4MzdlNzc4ZiwgMHgxMzYwMWE5YywgMHhkMDRkZGFlMywgMHg5ZWUxMjVjNCwgMHhkNmI4MWM0OCwgMHhkZDBmZWUyOSwKKwkweGFhNDljN2FiLCAweDdkN2E4YzNmLCAweDUwNWRmNjJmLCAweDAzZWVjZjE0LCAweDIzNDllNjViLCAweDFiZjBkZGVkLAorCTB4YWZiZWJhZDUsIDB4ODViMWQ4MmYsIDB4ZjE2M2UwOGUsIDB4NDc2ZWI1NTEsIDB4MmUzOWZjODgsIDB4MWJhMmUyYzYsCisJMHhiNGY1YTMzMywgMHhjNjQ0ZWRlMSwgMHhiMjVkZmRiOSwgMHhjOGM0NzI5MywgMHgyNjhjNWZkNywgMHg3ZWY4ODdkYywKKwkweGViM2M5YzQyLCAweGY2NWViYWE3LCAweDBkYmVlN2VhLCAweDliZTY2NWIzLCAweDBkMjg4ZTY5LCAweDYzZmM4NTFjLAorCTB4ZTkzZmU5N2QsIDB4Y2IxYzUyMDgsIDB4MDRjYWY4M2YsIDB4OWRmYWZmOTIsIDB4MjQ0NWU3ZDEsIDB4ZGZkZjNmM2YsCisJMHhhYWZjYjIwYSwgMHg0MzNlNzY0MywgMHgzYTVmZGEzMiwgMHhkMjE0Y2FmOCwgMHhiZmI3ODZiMywgMHhmOTcyMTFjYywKKwkweGJlZTJjNzIyLCAweDI5NDY3ZDNjLCAweDZiZmY2MjQ5LCAweDc3ZmVjNDkyLCAweDRjOTNkMmFmLCAweGZkZGFhZWZiLAorCTB4ZmVmMjJmYjIsIDB4YmJlNzIxYmMsIDB4NDUwMWZkNzUsIDB4NjVkN2YzZWMsIDB4Njg2ZjVjYWEsIDB4M2E2MTdhMTcsCisJMHg3ZjljNGEyMCwgMHg5OGYzYzhhNSwgMHhlZDExZmU3OSwgMHhkZjJmYTgyNSwgMHhlODgwYjcxMCwgMHg5YWQ3ZDk0MiwKKwkweDZhZWY1ODA3LCAweDllOTg5YTRmLCAweDE5ODM5M2RhLCAweDA1ZWYxMWQ5LCAweGYyNGNkYzY4LCAweDgwMWIwZDdiLAorCTB4YzgxZDg4ZmQsIDB4ZWZhNTJlYmYsIDB4ZjRiZWIxMGYsIDB4NTljNjA0ZmQsIDB4NTIzYzI2NDcsIDB4NjRhZGNlMjksCisJMHhjMGY1YmYyMCwgMHgyMzkzNTVkYiwgMHgzZDA1ZmZmZCwgMHhjMWYxMDNlZSwgMHgwOWU3Mjg0MywgMHg4N2NlYmYzMSwKKwkweGNmNDJiMDRkLCAweGFlM2QwODEzLCAweGVlMmM3MWQyLCAweDhlYzg5YWFmLCAweDU3NTdmNzYzLCAweDBlMWI5MzhhLAorCTB4YzdmMjgxNTgsIDB4Zjk1ODFmYjUsIDB4MDdlN2QwM2UsIDB4MWRmZWYyZDYsIDB4OTMyN2Y5MmUsIDB4ZmZiZjAxOWYsCisJMHgzODFmMmE2YSwgMHgzZDMyNzZiOCwgMHg3ZGUwZmNmZiwgMHg1M2RlNzM1NywgMHhhZjk1MTRkYSwgMHgxZTdkMTAwOCwKKwkweDc5N2Y1MWMyLCAweDk3YzI3NmY3LCAweDkwZTMwYTVkLCAweGVmZDNhZWEyLCAweDllZWFmOWQyLCAweDliN2YzMzU2LAorCTB4YzY3N2JkNTksIDB4YzIyNDgxZTMsIDB4ZTk0YjQ1NGYsIDB4OWQzZDlkYmIsIDB4ZTIxZmViMGEsIDB4ZDk0NzAzMmEsCisJMHgyODlkNDcxOSwgMHhlMzg1MWM2NiwgMHgxNjVjODJmOCwgMHg3MWE0YWIxZiwgMHg1MzE0OTQ0ZiwgMHhjOWRiMDkzNywKKwkweDFjMjc0ZDlmLCAweDU1YzYxOGU1LCAweDljZmYzZDA2LCAweGRmZDlmODI5LCAweDEzZjljMDkxLCAweDNkMDgyNjA5LAorCTB4YmEyOGVjODMsIDB4Y2ViZWI0MzcsIDB4OWI0MzY0MzgsIDB4ODZiZGY1MWMsIDB4NGNlZWRlZjEsIDB4ZDdiMGFlNzEsCisJMHhhNDkwYjNkMCwgMHgxNmVkMWViMSwgMHgzZGI2ODZlNSwgMHhmNThlYjQxOSwgMHg0OWViMTBlNiwgMHhiNDU5YjM0MywKKwkweGQwMjUxMmVmLCAweGZlMGNjZGY5LCAweGZjNDAzOGQ4LCAweDUwOGY0NjM5LCAweGMxMmM0YjJlLCAweDc3ZGI4NGIxLAorCTB4ZWEwNzlkMGYsIDB4ZTI4MjM5ZjcsIDB4ZTc2MzVkNWUsIDB4Njg2ZWZlNDQsIDB4M2I4ZjczYjAsIDB4NGUzOWZjNWUsCisJMHhkYTQ4MzNlNywgMHhjZmIxMmNkMSwgMHhmM2FmNmQ4OSwgMHhkMWM2N2M4OCwgMHgxZTJmYzIzMywgMHgxYzlmZTg1ZCwKKwkweGEwMDYzZmNmLCAweDI1ZmJlYzQ0LCAweGU2YWQ3ZTVkLCAweDg2ZTc3ODhhLCAweGRmMjIzZDFiLCAweGUwNmM3M2I0LAorCTB4ZWY3MWU5MjgsIDB4MzczZTA0ZWUsIDB4ZmM4OTc1ZWMsIDB4OTc0YjY5NmMsIDB4YWM5ZmRmNDIsIDB4NTA2Njk1NmYsCisJMHhmYjlmNWEzYywgMHg4MjlmN2YxZSwgMHg4M2Y2NjJmNSwgMHg2ZTdjZmRlMSwgMHhiYmJjZGQ1YSwgMHhjNzQzOGI1YywKKwkweDFmMTExZWI1LCAweDAxZGZlODk3LCAweGJkNTdkMDhmLCAweGQzNzgxNGZkLCAweDIzZGE3ZGY1LCAweGFhNzM1ZTc0LAorCTB4ZGYxNGVjZDIsIDB4NGFlZjg5OTksIDB4ZjlmZGQwNmYsIDB4MTk5YmQ3OGQsIDB4ZDUwMjlkMzcsIDB4YzQzZmNlMmMsCisJMHhkZDMyYzUzOSwgMHhmYmEwZGYyZiwgMHgzYmRmMTFmOSwgMHhlOTliMDMzZiwgMHg3YmY2MjI5YywgMHhkZmFmYzM2NywKKwkweDAyYmY4ZmFjLCAweGY2MzcxZTM0LCAweDc1OWJmNWJiLCAweDJmYjM3ODNjLCAweDRjYTVmOWZhLCAweDQwZTYwNzFkLAorCTB4MTBmM2Y5MGUsIDB4MWZiZTE3YzYsIDB4NzFjMDk3OTEsIDB4YTRlMTY5N2EsIDB4YmU4MzM4YjgsIDB4ZWZmNTU3MDMsCisJMHhlNDM0YTljMCwgMHgxZWY3OTBkZSwgMHgxZGEzYmZjNywgMHhkZmNkN2U2NywgMHg4MDQ5OWMxMywgMHhjNWNlNzEwOSwKKwkweGUxOWZlMzg2LCAweGYyMTI2ZTNmLCAweGFhMmRjZmQ2LCAweDQzNDY4MjlkLCAweDA3NzAxN2VlLCAweDMzMWY5OTE2LAorCTB4ZTc0NjNlZTQsIDB4M2RmMWZmZmYsIDB4MjI1MDVjYTAsIDB4Y2FjZjI1ZjMsIDB4M2ExZTMxZmUsIDB4MzJmNWIwOWYsCisJMHg3MDE1YzZmZSwgMHg4ZDc1YzQxYywgMHhjZTM1ZDdkMywgMHgyZWRmMTExYSwgMHg1NzFkNWE4YywgMHg5N2Q3ODc3ZiwKKwkweGM0NzExMDFhLCAweDllNDc2NWNkLCAweDc1NjI3MTk1LCAweGZiZWZlMjQ4LCAweDVmNjJjM2FhLCAweGY2MjY1ZDViLAorCTB4MDJhZDM5YjUsIDB4NDliY2FlYTcsIDB4YmIxMjZhMGEsIDB4OWY0NGQzYzMsIDB4NmNjYjNmYTEsIDB4N2ExODBmMDIsCisJMHg1ZDJmYzQzMiwgMHhmMDlkYTg3ZiwgMHgzZTNhMGRjMSwgMHhjOWEzZDU4OCwgMHhmOTRlNWRkMCwgMHhjOTM0NWJlNiwKKwkweDQ3MmFmNzRiLCAweDZhYmYzZjdjLCAweGVlZTRlYmRhLCAweGE4M2ZhNzJmLCAweDIyZWZmYzZmLCAweGY3ZDFlYWM0LAorCTB4MGYxMmZlM2QsIDB4MDdiYWQzZTUsIDB4YjhlMjE2NTcsIDB4MzhmZWYzNDcsIDB4ZTZhNmY0OGUsIDB4MmRmMzc2MzIsCisJMHgzYjEzODg4ZiwgMHg3Y2EzODExZCwgMHgzZjQ1YTRkZiwgMHg2YmM5NmZlZiwgMHg3NDdlMjFlYiwgMHg1ZWM3ZTMwMiwKKwkweDNhOTZmNzU3LCAweGJjZjlhYjgxLCAweGMwOWMzYWJmLCAweGI3NTY0M2RmLCAweGIwYmJmOWRiLCAweGM0ODZkNmVhLAorCTB4ZGI3ZmU0MjksIDB4ZWIxZGFmNjUsIDB4Y2IyN2FkOTUsIDB4YzU5NTlmODgsIDB4YWQ0YTNlZTIsIDB4YjM4YmRjNWQsCisJMHgxMGI3ZmRiOSwgMHgzYjdiZDc3ZCwgMHgyZGY5Y2ZhMiwgMHhmYmE4YmYzZCwgMHhmNThmM2QwNiwgMHhhMzA5MWI2YiwKKwkweGY5ZjdmZmE1LCAweDVmM2E4ZDliLCAweDY2MmViYWVhLCAweGZlYTljMTRjLCAweDI2YWZlNjkwLCAweGZkN2ZlYzdkLAorCTB4ZDcxZDBiNDUsIDB4YTU3OTRlZDUsIDB4NmQ4OGFlOWMsIDB4ZWZkY2E4ZjQsIDB4MjY4ZWU2ZmEsIDB4ZjQxYWYzNGEsCisJMHhmOTNhNjQ3NywgMHg3MDczNTFmOSwgMHg4MmQyZTMyYywgMHhkMzBmYmIyYiwgMHhhOThkZmZiMCwgMHgzYWZhYTcxNCwKKwkweDIyNWFhNmJhLCAweDBlYjdiYmY0LCAweGY5MWM3M2ZkLCAweGI3NDk4MDM1LCAweDQ5NGI4NTViLCAweDI1ZTNhMTVhLAorCTB4MDdiNWM3NjEsIDB4M2U1MDY3MGUsIDB4YjdlYzk3YTIsIDB4OTI3N2NhODAsIDB4ZGVhY2IxYjMsIDB4MTI3OTJhN2QsCisJMHhhMmJkOTZlMSwgMHhlZDE5YzIxYywgMHhhNTAzZjczMiwgMHhhNGU2ZTcyNywgMHgzMzM2ZmE0OCwgMHg2MjQyMTc3ZCwKKwkweDljOWU4MDFjLCAweGRiMjMwYjFiLCAweGRiNWZmZjFiLCAweDI3YTRkM2ZmLCAweDI4OWViNmQ1LCAweDg0ZjgzN2ZiLAorCTB4M2VmZTdjYmIsIDB4Y2FkMDcwMzcsIDB4YmNlODA4ZjcsIDB4YzcyMTE1YzYsIDB4MzQ3Zjc0NTcsIDB4NjQ0YjM3MGIsCisJMHg3Y2U4NzNhNywgMHgzYjQxMjI3YSwgMHhiYWEwZWUwNSwgMHg5NTI1NjEwMiwgMHhiMmMzOGJjZSwgMHg5NjM3N2ZiOCwKKwkweDdkNGNmN2ZkLCAweGI4NGE1OWZlLCAweGNlZTllZTgzLCAweGU3MzdjZmQxLCAweDViZjczNzQyLCAweDZhNWMwMzAwLAorCTB4OGJlZmU0ZTAsIDB4ZTVjYmMwNGIsIDB4Mjk3ODViNmMsIDB4NTA4MmYxYzEsIDB4MDk5ZmJmODgsIDB4NzNhZTI4NjcsCisJMHhlNjNiZmQzNiwgMHhlNjFlZjIzOCwgMHgwY2U3MDI5YiwgMHgwZTc0Yzg3ZSwgMHhjNTFiZWUyNiwgMHhkNzViYTdhZSwKKwkweGYwOWE1OWM3LCAweGU4MWQwNDNiLCAweDA4NmNlZTdlLCAweDM1ZmJiOWYxLCAweGJmOWZhM2QwLCAweDNjYzc1ZmM3LAorCTB4YjlkMWY3ZGMsIDB4M2I2ODM1ZGIsIDB4MjA4ZmNjODksIDB4ZWI0ZjlmZjcsIDB4YTdhZGUzOTEsIDB4MTk4YjI5NjcsCisJMHg5ZjQ0OWNjYSwgMHg3ZDMwY2UxNCwgMHg3NWYyYmY2ZCwgMHg0ZDZkZDNmNCwgMHgzNWRmNTdjYSwgMHhlMjgzZjdkMCwKKwkweDZmNGI3M2UxLCAweGQzZWYxYmZiLCAweGQzNDk2MjdkLCAweDk3YjFiZWY4LCAweDdkYTZjN2JlLCAweDFkZTk1ODRlLAorCTB4MDAxMzYzZjIsIDB4ZTZiM2RkZmUsIDB4YzY2ZjY0MzcsIDB4MDdlMDFhZjcsIDB4ZmIxMWU3YmUsIDB4ZjcyZDA2YmQsCisJMHgzZGYwYzY3YywgMHhlZGZlZTMzNSwgMHg5NTBhZTBjZSwgMHg3MmFjNmZlZSwgMHhhZGRmZjhkYiwgMHg5YjhkYjIyOSwKKwkweDg3Y2E3OTRlLCAweDIxYmZmY2QyLCAweDZhNDBmYWJkLCAweDI4ODNjNDllLCAweDYzOGMxOWMxLCAweDgzYjJiZDc1LAorCTB4MmZkNjliMzYsIDB4MjJmN2M2NjksIDB4ZjQzMmZhYzAsIDB4MDA2NDAxZWYsIDB4Yjc2M2I3N2YsIDB4MWU2OWVmOGEsCisJMHhhNWI0M2Q0MSwgMHg3NGFiZjZiMiwgMHgyZTFlMWEwZiwgMHg2ZjJmMDk1NSwgMHhmNGJjZDk3MSwgMHhlODk1YWU1ZCwKKwkweGRiZDMwZmI1LCAweDJmZjcxMzY4LCAweGIxNmJmYjhjLCAweDE5YjQ2YzdjLCAweDhkYWY0YTc5LCAweDc3Y2M3NjcxLAorCTB4ZmNkYTc3M2UsIDB4YmZlODliZmYsIDB4OTMyNGE5M2YsIDB4Y2JmZTYwNzAsIDB4M2Y3YzNkZjMsIDB4Nzc1OGMxMjksCisJMHhjM2ViOGQ4OSwgMHgzNzE5MWFmNywgMHg2YTdkZDEzNiwgMHgxZDMxYWJhNCwgMHhlMWUyMWVmOCwgMHhiYTE0OWNhNCwKKwkweDI1ZDhkNTFmLCAweGE2Mzc1M2VlLCAweDliN2ZkODA3LCAweGYzZmIxMmZkLCAweDRlZDJjZWM2LCAweDBlODMwNzhhLAorCTB4NmVhYmRmMGIsIDB4YWEzNGY5NzQsIDB4NDQyMWQyMDcsIDB4M2VmODlmZmUsIDB4NjliYmUwZGYsIDB4ZmQyMWVmOTgsCisJMHhlZDkxNTA1ZSwgMHhkZTUxNTdkNywgMHg0YTFiOWE3ZiwgMHg2MTY5YmRlOSwgMHhjMGYxMTI2ZCwgMHhlNTA2MWVmOCwKKwkweDRlOTUxOWUwLCAweDdiZWZhM2NmLCAweGZiZTRlMjgxLCAweDUwMWM4NjE3LCAweDlkOTk1ODMxLCAweGI5MGQ3Y2JhLAorCTB4ZjhlZjhkMzgsIDB4M2JlYTI1MzUsIDB4OGY1ZTQzN2UsIDB4OThiOTBhMjQsIDB4NDRjYzI2ZTksIDB4NzFhNTU3N2UsCisJMHhmMDYxZTU2MywgMHg4ZjAwYmZmZCwgMHgzMGIxYWU0MCwgMHgwMDMwYjFhZQogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB4c2VtX2ludF90YWJsZV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg5NGYzZmYwMCwgMHg1MWY4NjA2NiwgMHgyNTdiYzA4ZiwgMHg3OTljMTgxOSwKLQkweDg5NjhjNTUwLCAweDE4MTkzOTBiLCAweDBiZjEwMzBlLCAweGRhMDA1NjIwLCAweGMwYzVjYWViLCAweGZkYzQwNmUwLAotCTB4ODgwMTNjNDAsIDB4M2ViMTAwYmYsIDB4MDE4MzAzMzcsIDB4ZDkwMmE3MTAsIDB4NzM2ZTY4NTIsIDB4MTdiYTAyNjQsCi0JMHhkODgxNWQ4OCwgMHgzMmJmODgxZCwgMHg2MzdjMzAzMCwgMHg3NjdlZGUyMCwgMHg2MjNkYTAyMSwgMHgyMDM5ZmUwOCwKLQkweGZkMDRiMmZiLCAweGYwZDgzZmZjLCAweGRhZmE2NTVkLCAweGMwYzJhODE3LCAweDJhODNhMzEwLCAweDhmYzY4YjE2LAotCTB4NDY2ZmMxZDMsIDB4MDI3YzlhM2MsIDB4OGYxMTNmMWEsIDB4NTQ3MzcxN2UsIDB4MmEwMTlkN2UsIDB4ODE4OGM5M2YsCi0JMHg5YTkyMGY2MSwgMHg2ZWZjMDM3YSwgMHg4MWFmYzc0MSwgMHgzMTAwZGY3YSwgMHg3NDc2OWEwMCwgMHgwMDAzNjg1ZCwKLQkweDAwMDAwMDAwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHgyNDNiZmYwMCwgMHhhM2YwYzBjMywgMHg0YWVmODExZSwgMHhmMTMwMzAzMSwKKwkweDEyZDE4YWEyLCAweDYwNjRlM2VmLCAweDYwNjJlMDEwLCAweGZiZTIwNTMwLCAweDMzMGMwYzNjLCAweDIwNGNmNDgwLAorCTB4NjA2NmU1MTYsIDB4MWFlMjAzMTAsIDB4YzQwZGRlMjAsIDB4MTlmODgwN2IsIDB4MTAzOWZjNTAsIDB4MWJlMjAwZWYsCisJMHhiZWZkMTAzYywgMHhmZTBjMGM0YywgMHhjNDA4MWM0MCwgMHg5NWZjNDBjMSwgMHgxYmUxODE4MSwgMHg3M2Y2ZjEwMywKKwkweDRjMzAzMzBhLCAweDJmZjA0NzE1LCAweDI0OWZkOTAzLCAweGMxZmZlN2U5LCAweGU5MGM0Mzg2LCAweGEwNzFkZjZiLAorCTB4MTBhY2YzN2QsIDB4N2IyMDQ2N2MsIDB4OWFhYTE1YmUsIDB4Y2RmODU2MDUsIDB4YmYyNjg4NTgsIDB4MThiZjhkMDgsCisJMHgwMzcyZmU4ZiwgMHg0ZDVhZmU1NCwgMHg4MWI1YjMzNCwgMHhjZDQ5MDllOSwgMHg2ZWZjNGQzYSwgMHg0MGFhYzc0MSwKKwkweDMxMDFhOWZmLCAweDVmZjFhZDAwLCAweDAwMDM2OGNhLCAweDAwMDAwMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHhzZW1fcHJhbV9kYXRhX2UxW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHg0NTU0NzgwOSwgMHhiZWRkNzBiNiwgMHg0ZTlkZWY0YiwKLQkweDYyNTg1OTA4LCAweDgxNTExMDA3LCAweDA1ZTQyY2U5LCAweDYyZDliMWM0LCAweDk3MDYyMWY0LCAweDY2ODU0NjExLAotCTB4NDQ3NDllY2IsIDB4ZjlkMWMxYzYsIDB4MTUzNjEwZDMsIDB4YzcxMzMwOWQsIDB4NjBlYzQ0ZTAsIDB4ODFhMGQwNTAsCi0JMHg2MDI0MTAwOSwgMHgzY2MwZWEwMywgMHg2NGZmZTMxZCwgMHhiODMwNjZkYywgMHhjNWE0YzZiMCwgMHhmY2I4ZGYwZCwKLQkweDRkZDU0ZTc1LCAweDExZDM3YmRmLCAweDdmZWY5OTljLCAweGNhM2ZiZmYzLCAweGZiNWJhOTU3LCAweDUzOWNlYWQ5LAotCTB4MmM5MjJhYTcsIDB4NDIyMmU5MTAsIDB4YWI5ZjgzYmUsIDB4NDA5YmY5MDgsIDB4NGQxNzE5MDgsIDB4NjllNWE5MDksCi0JMHgyNGUwNTI5NSwgMHhiZmEyZTAyNCwgMHhlMTUyMTM2NiwgMHhkM2NiNDI1NCwgMHg0M2IyOTkwOSwgMHg0ODk1NWYwZSwKLQkweGM4NDI4ZGYzLCAweDdkYTZmMzRjLCAweDZlZWYyYzU2LCAweDUzYjBmOTYwLCAweGZlNWExMWYxLCAweGQzY2QxMzcxLAotCTB4OGVlNjAzM2UsIDB4ZTVhMGFlODcsIDB4ZDkyMjFkOTEsIDB4YjI4ZWRkMDgsIDB4MjExMjQ4OTksIDB4ZmQ4NDJkYzcsCi0JMHgwZTdjZDM2NCwgMHg5NjU2ODUyMSwgMHgzZmRjNjhhZCwgMHhiNzE3ZGEwNywgMHhmNjk1ODk5OSwgMHg2OGJiYjE1NywKLQkweDVmMzQxNWM2LCAweDUwMjY0ODc0LCAweDMyZDM2MmE1LCAweDk3Y2QxMDY1LCAweGM4MTY4NDg0LCAweGYzNjY0Y2Y3LAotCTB4NDMxNGVlMGIsIDB4MWVmZDY4OWIsIDB4Y2RkMjQ3NTcsIDB4NTc0ZTQyMGUsIDB4MjE0Nzg4NWIsIDB4OTFkOWM2YTQsCi0JMHg0MjY4ZDM3NCwgMHhmMmRiNDM0YSwgMHhiMzY5NWRhMCwgMHg1ODExMzVlMCwgMHg1Mzk3YTZjNywgMHgwNDViNWQ2MSwKLQkweDQ4NDNkOWFmLCAweGYxM2I2NmQ5LCAweGY4NzM2MjhjLCAweGRlM2JmZThlLCAweGEyYWY4NjJhLCAweDNhZTk4YmU1LAotCTB4ODhiN2VkMDksIDB4MTExMWU2ZDQsIDB4NzhhNzVmYzYsIDB4OWRmODUxOWMsIDB4MzhlMzc2YWUsIDB4MGI2MmJlNmEsCi0JMHhhYmI2ODcxZCwgMHhjMmYwNTY3YywgMHhjNDRkMmIxMiwgMHhlZmM3NDJkZiwgMHhmNTlkNmRkZSwgMHhiN2Q2MDM4NCwKLQkweDg0ZTkxOTRjLCAweGEwNTZhZDc1LCAweGRlNjg1MTVlLCAweGU2MDdhYjRlLCAweGQxZTRhOGQ3LCAweDQ2ODZkMmYyLAotCTB4YjQ3NDcwYTUsIDB4MDNjZGIyYmYsIDB4MWZhYWYzZjQsIDB4OTRkN2VjOWUsIDB4ZDVkM2QzMWIsIDB4NDY0Njc4ODQsCi0JMHhmODg0YTVmMywgMHg0NGJmNjg1YSwgMHhjNzMzMjkwYSwgMHg0MDdmYmY0NCwgMHgwODE5MDllMiwgMHg2M2M0OGJmZCwKLQkweDIxNGZmNjg5LCAweDQ3ODNkZjg5LCAweDVlMTRhZmU4LCAweDg0NGViZGMxLCAweGM1Yjc4YWFiLCAweDI3YmJmYTZlLAotCTB4NmViM2I3OGEsIDB4OTIyOTQ3OGUsIDB4NGQ1ZmVkYTMsIDB4ZDAzYzAyMWYsIDB4OWMwMmQ0ZjksIDB4Y2Y5NmJhNjgsCi0JMHg0YzkxMzVjZiwgMHgyZWZmNjg5MiwgMHhlOTAzNzExZiwgMHgzNTFlYjdmNSwgMHgzY2M5OTVhZCwgMHgxODVhYzc0MiwKLQkweGM2OTNlMzFjLCAweGVlNDJiY2QzLCAweDdlNDI1ZTIwLCAweDM3YzcyMmJkLCAweDI0MWZlNjk1LCAweDZmMzAzOWZlLAotCTB4MDYyZmU0ZDEsIDB4OTJkMjExM2MsIDB4NGFiYmY0MDIsIDB4ZmQ2MGIzMjAsIDB4ZDM0OTgxM2YsIDB4OTRhOTU1ZjIsCi0JMHg2YmRjMjkzZSwgMHgyMTNjZTVhNywgMHg4OWVlN2MwYSwgMHhmMjdjMmY5MCwgMHhhN2VjNzRmZSwgMHg2ODUxZmIwOCwKLQkweGRmY2ZjMzNmLCAweDU3MmYzYjhmLCAweGFmM2I4ZmQ3LCAweDBhYTdlZDU4LCAweDU4NWRiMWZiLCAweDEzNzliNTNmLAotCTB4MmJjOWYzZjQsIDB4MWJiOWZiNTUsIDB4ZDg1ZDcxZmIsIDB4NGY1N2RjYmEsIDB4ZWFlN2NmZDQsIDB4N2UyN2VjNzIsCi0JMHg2OWY4OTdhYSwgMHgwN2E1NTE3ZCwgMHg2OTEzZTFkMiwgMHgzZTM5YTNiOSwgMHhhNWEyN2VmMywgMHg4MTJiYzk4YiwKLQkweDRiOTQ5ZGZmLCAweDk3MTE3NGI0LCAweDYxZDFkMzZiLCAweDk3NDEyZmJjLCAweDhmYjkzZGE3LCAweDMwZjNjZTVmLAotCTB4N2M4MmNiODgsIDB4NTA1MjBjYTksIDB4NjQxYTRjMmUsIDB4MzVkY2Y5YzEsIDB4ZTE3MjgxYzgsIDB4NGJmZTA5YWUsCi0JMHgzMDFlNzRkYywgMHg3OWE1NDkzNiwgMHg3NzIzZmZjNSwgMHhmM2E2YmEwYywgMHhhNDBhNDgxNCwgMHhjNmE0MTMxZSwKLQkweDgzMzJkNWYyLCAweDVmYzFlNGMzLCAweGRiNDYzYzhmLCAweDkxOTE0YzA3LCAweDRlYmYzNGYxLCAweGFjMzhmNDk4LAotCTB4MjEzMTEzNjMsIDB4YTkyMjZjN2MsIDB4MzMzNjdhODIsIDB4M2FiNGY5NDEsIDB4YTA4OWU3M2QsIDB4ODY2YjRlMDYsCi0JMHhkMTBiZmM1MiwgMHhmZWM4ZDc3ZSwgMHgyZGFmYTAxNCwgMHhkMDIwZTZlNCwgMHg5NGExYWFkYiwgMHhmMjExMDdjOSwKLQkweDcwYTZmMDc0LCAweDg3ZWRhMjUwLCAweDNjMDBhNjE2LCAweDZmZTUwYWNkLCAweDFkMGFmOGVkLCAweGZmOGUzNDdmLAotCTB4MDNiZjhjMWMsIDB4NzdkNzFmYzYsIDB4NWNiMGYzN2MsIDB4YjQ5NmY4ZGQsIDB4MTZmOGRkNjIsIDB4ZTk0ZjhlODUsCi0JMHg5ZGI5Mzc3ZCwgMHgzN2UxNGY4ZiwgMHg4M2U3OTA4MSwgMHhlNmY4ZTFiNywgMHg3ZjFjNjJiNCwgMHg3NThhNDJiNSwKLQkweGM3N2FkYmUzLCAweGZkZDYwMTdmLCAweDFmZWI3ZjUyLCAweGZlYmY0MTM2LCAweGZhZmQ1MmI0LCAweGMzZmViNjE1LAotCTB4ZGYxZjExNjQsIDB4NjNmZmViODYsIDB4N2Y1YjIxNzAsIDB4YmY1YjI5NWEsIDB4M2JkYmY1OTksIDB4ZmUxN2FiYmUsCi0JMHg4ZmJhYzFhZiwgMHhlMWZlYjdmNCwgMHhiZmViZjUxMywgMHg3ZWJmNWNhOCwgMHg2ZGZmMWIzMywgMHg3N2M3YzE1MiwKLQkweDA0ZWZmOGUwLCAweDJmZmFkOWNiLCAweDE1ZjFjNzJhLCAweDc0MGJkZmIzLCAweDU1YjYwY2E0LCAweDY0ZjhlODg1LAotCTB4NjQ4ODY1MDgsIDB4NGMzZTUxOTQsIDB4NDIxMDI1NDcsIDB4NjE5MWQ3ZGIsIDB4NmNiYjg3MDgsIDB4YjBiZWVlOGMsCi0JMHg0NDczN2E1MSwgMHg1MTA5MWRlNSwgMHhhY2YyYTI4ZSwgMHg1OTdjZDM5MiwgMHhlNDA1MjRmMywgMHhiOTUzOTYyYywKLQkweDc1NGY4OGI3LCAweDc0ODg5YjYxLCAweGExY2NlYTRkLCAweGJiN2NlOThiLCAweGU0MjBjNGRiLCAweDE5NWRkNjE3LAotCTB4MjNiZjcxMTIsIDB4OWRhMDBiNzMsIDB4ZmRmMGMyNDQsIDB4NmNjNzg3YTMsIDB4OThjYmFlZDQsIDB4OGY5NWFhMmUsCi0JMHg4OGY4ZWE3NywgMHg5OTM4MjdjZCwgMHhmM2EyYWE4YywgMHgzMDQ0MDY5YiwgMHg0ZTNmOWEyZSwgMHhmMmExMjhlNSwKLQkweDQ3MmE3ZGYzLCAweGQzMjEzZDIxLCAweDBmZjdlOGYxLCAweDhhMjU5Y2E5LCAweGIxOTY2Zjk2LCAweGRlNDgzYzdkLAotCTB4NzIwNDk1MTgsIDB4OTcxY2ZkODIsIDB4MmY4ZmJjMTgsIDB4ZmYwMDQyMTEsIDB4YTFkZGQ2MmYsIDB4NTQ1YTdjODAsCi0JMHg4ZjQwYTc2YiwgMHhmMWMwMjNjZSwgMHgwZTZkZDkxNCwgMHg5ZTEwMTQ2ZCwgMHgyZGNmODAxZSwgMHhmYzg0OGFjOCwKLQkweDk1MzVhMjk1LCAweDdlYThiNjgyLCAweDZkZGRhZTgwLCAweDg1MzJiNDI0LCAweDc2YjA1ZmQ2LCAweDVkMzc1MGRlLAotCTB4Y2NiM2FkZmYsIDB4MWZlYzIyOTksIDB4ODRkODM3YzQsIDB4OWIwNjRjN2MsIDB4ZDU5OTA5NzIsIDB4NGMxZTRlYmEsCi0JMHg5MmNjYjczMywgMHhiNGQ0ZWZkZiwgMHhlN2Q3ZWQ5ZiwgMHhlN2Q2MmQ2ZiwgMHg2YzkwZTViYiwgMHg0NGEzN2QwMiwKLQkweGRmYjQ4ZDIwLCAweGU1ZjRhYmRiLCAweDQyZjEzOGVhLCAweDFmMmJjMzAyLCAweDZjNDkyN2VmLCAweDlhNDNiN2JlLAotCTB4ODhkZDlmMDksIDB4ZDY2ZTM5ZDcsIDB4ZTA0ZjlkNTYsIDB4NzE4NDk5MWUsIDB4NDgxY2VjYmYsIDB4YjEwM2ZmMTAsCi0JMHhkNmNkZGY5ZSwgMHgxY2VmOWM2ZCwgMHhhMDJiZTJkOSwgMHhiNzczOTlmMywgMHhjZTM0ZjA4OCwgMHhkZDlmNzNiZiwKLQkweGQzNGIxYTY3LCAweDIwNjU0ZmZhLCAweDhjN2FlMzQxLCAweGQ0YmI5ZmYzLCAweGVhMzcxZWI4LCAweGM2ODJmMzYxLAotCTB4OGM0ZThjZWYsIDB4OWI2ODE0ZjQsIDB4NGQ0M2UwMzQsIDB4NmI5NjhhYmQsIDB4YTFhODdjMDYsIDB4MzNjZGIyYWYsCi0JMHhkMDkyZjk3NSwgMHhhMmZkNWQ2YywgMHhmMmJhNzlmYSwgMHhiYTI1YjU0NSwgMHhlZTZiMDVmMiwgMHgwNWU3ZTVkMCwKLQkweDlmZDVkNmVmLCAweGFlOTk3NGJiLCAweGZiYWFmNmZjLCAweDE2YjdlNTc0LCAweDY3ZTVkM2FmLCAweGVhZWJkN2ZiLAotCTB4NTFhYjMyZGYsIDB4MmJlYzJlNTcsIDB4ZTUxM2E4YjksIDB4NTRhMmZmYWEsIDB4MzZkZjJiZDAsIDB4OTU0N2EwMTMsCi0JMHgzODdlNTVkZSwgMHhlOTgyOWQ1OSwgMHhhNjBmNmFlOSwgMHgyOTRmODBjYiwgMHhiMzc2OWJmZiwgMHhkZTcxYjAzNCwKLQkweDJhZWZjMDQ1LCAweDU1Yzg0ZTljLCAweDQ2NGZjMDY5LCAweGQzYzIzN2JhLCAweDY3ZjRkZjQ4LCAweDQ4N2RhYzcwLAotCTB4NTIwNWNiNGQsIDB4ODdhZTcyMDAsIDB4ZjdlYWNmZWYsIDB4MTIwZTVjNzMsIDB4NzJkMzFjYjIsIDB4Zjk2ZGYxODUsCi0JMHhjNGM5ZDRmNiwgMHhjOGYwZjkwNSwgMHhmZGZmNDcyYSwgMHhkNzAxMTY5MiwgMHgxZThiNDA0MSwgMHhkNGEzNzgwOCwKLQkweDcwZWJjM2FhLCAweGY2YmIzY2RkLCAweDI1N2UzODhiLCAweDAwNzhlZWYwLCAweDAxMzJjMTU1LCAweDMwN2MyMWY4LAotCTB4MzAzMWM2ZWQsIDB4Y2M3MmRmMWYsIDB4ZmRjNDBkYjcsIDB4N2YzYWFiYjcsIDB4YzAxMjg3YzAsIDB4OTNkMzAwYWYsCi0JMHgzZDMwYjNkNSwgMHhmNGM3ZWQ1ZSwgMHg0YzYyZWFjMywgMHhjMmFlYWZkZiwgMHgyOTdhYjNiNCwgMHg4M2FiNDdhNiwKLQkweDdhYTVmZTk4LCAweDU0ZWZhNjBkLCAweDU2ZmE2MmQ3LCAweDdmYTYzZDc1LCAweGRhNjEwZWFlLCAweDU0YzNlZDVkLAotCTB4Mzk1ZWRiYTUsIDB4NGFmNWM4OTksIDB4MWRkM2ZmYWUsIDB4Zjk2N2YzMDIsIDB4N2JmYTQ0NWEsIDB4MzdhM2YyMDcsCi0JMHhhY2YxZjgwNSwgMHhhMDkxOGJlMywgMHhjYjdkOWYzNywgMHhlZjJmNDA0YywgMHg3YTQ2NWUwZiwgMHhjNGFlMTdlOCwKLQkweDYxNDU3YTg3LCAweGFjODcwYTg4LCAweDFiNTZlNWJlLCAweDQ0ZDU5M2MzLCAweDFiOTUwOWYyLCAweGE0ZmM1ZGY3LAotCTB4Y2M2OGZlNzcsIDB4ZGEwMTI0NGIsIDB4OWQzM2JjODcsIDB4NDExZGZhMzEsIDB4YzNlNzVmMTAsIDB4YzY0NWYxMTMsCi0JMHg3MWYxNDBkZSwgMHhlNWJmZDFmYywgMHhmOGU3YmY0MCwgMHgyODNiNjUzZSwgMHhjMjQ5N2VlMiwgMHg1ZjAxNzg0ZiwKLQkweGZlZTFiODFhLCAweGU1YzFkOTEzLCAweGY3ZTA3OWYyLCAweDdlMTU0MGYxLCAweGE2ODQ2OTFkLCAweGQyMzcwNDEzLAotCTB4MzM1NmQ5ZGYsIDB4ZWQ4ZTAwOTEsIDB4ZmRhMTEwZjYsIDB4ODRmNDNkOWMsIDB4YzViYmY2MGIsIDB4ODdmNzI2MjksCi0JMHhhNmEwZTAzMSwgMHg2ZWU5MmQxNSwgMHg2ODlmNzY4NywgMHhkNmNmZTdkMywgMHgyODJkZjkwYSwgMHgzNzcxM2QzNywKLQkweDcyYmEwMThkLCAweDAxMWMzZmJiLCAweDU0YzE0ZmY4LCAweDhhNzE2N2VkLCAweDAwNzBmZWUyLCAweDQ1ZjE4ZmMyLAotCTB4MjlkMjNjNzMsIDB4ZGViMGRiYjUsIDB4ZmQxZTdiM2YsIDB4NDc5ZDEzZjUsIDB4YjY4MGY5MmIsIDB4Zjg2NDViNDcsCi0JMHgzZTkxZWRmOSwgMHg1MzNlOTZmOCwgMHhlZDRmMDAwYSwgMHg5ZmIwMTdmMiwgMHhlZmJmZThkYiwgMHgxMmJmNDE4NiwKLQkweDAzN2VkNWU2LCAweGZjZDA2MjJkLCAweGFjZGVmODIzLCAweGYzYjY4ZjFiLCAweGI0MzEzNmE4LCAweDI1NWU5ZmViLAotCTB4MjdhNTVjNzIsIDB4MGJmZWRhMmEsIDB4Y2UzYjQwM2EsIDB4ZmRjYmQ2ZWEsIDB4ZDAzZTVkNzgsIDB4ZWRkNmVhOTYsCi0JMHhlNTBiZjAwMywgMHg0ODJjNTI3YiwgMHg5Y2U1MmY0MCwgMHhjNzI0N2E3YSwgMHhlZmNlODExYSwgMHhmNDYxZTA4OCwKLQkweDE1N2FiMDI2LCAweGVmYzU0ZTk2LCAweDAwZWMzMjQxLCAweGFlN2U2MDNkLCAweDViOWU2ZjRhLCAweGY5NzJhNWRlLAotCTB4ZTRjODdmZDQsIDB4OWFmZjI4N2UsIDB4ZGEyNzJhY2UsIDB4YzRjMDk1MWYsIDB4NzgwYmYzNDQsIDB4ZDk2YjdlNmUsCi0JMHhhNzc3OTA3NCwgMHg1ZTFmNmM0YywgMHg2MDVjMGE0OCwgMHhkYTkzMTQ5NCwgMHgzZTQzZDAxYywgMHhhMDdjYTYyNiwKLQkweGZmYzk4ZmZiLCAweGVjNjk2NTc2LCAweDA1MjYxMTgxLCAweDhkNjBiM2U3LCAweGZhYTQxZjdlLCAweDU0NWYyZTkzLAotCTB4OTIxN2NmYWYsIDB4Y2U4MDkyMWIsIDB4MTI2NGViMGIsIDB4ZjUxZjgwMTIsIDB4YzYyNjg5ZTUsIDB4NmFhNDQ1MGYsCi0JMHgyYjBmZWMxNSwgMHhkZjMxM2RiOCwgMHg3NGMxYTQ0ZCwgMHgxZWJiMTU3ZSwgMHhlNzQ3OTljYiwgMHhjOTg5Yjk3MSwKLQkweDJlYmVkNTZmLCAweDJmZjM2MDQ5LCAweDdjNTQ2OTZkLCAweGQ2ODNmY2I0LCAweDQxNWM5ZmFjLCAweDE1Njg3ZGEwLAotCTB4M2I4MjE5ZjgsIDB4NGYyNmVmMDQsIDB4ZDBmZGZjNWYsIDB4YWJlNzFiZjksIDB4ZWM3ZDFmZWUsIDB4OGE4ZjNlN2MsCi0JMHgxNDJmODJjZCwgMHg2ZjE5MWY2MywgMHgxM2ZlZjgxMiwgMHgwMzVlMzg0NCwgMHg5OWU4ZDZlYiwgMHhhODM4NzMzNywKLQkweGYyODY3OWY5LCAweGVmZmU0MzBhLCAweGEyNDRiN2E2LCAweDgyMjNiN2EzLCAweDQwZDM2NmZmLCAweDVmYTA1ZjQ2LAotCTB4ZjE0NDUyMDksIDB4YTdmZDIzZmYsIDB4OWU3ZmU5ZjQsIDB4YjEzZmRjNjksIDB4ZmZiNDIxZmYsIDB4MTVmZjVkMWMsCi0JMHg0N2ZlZDRmZiwgMHhkZGZmOTlmNCwgMHhkOGFmZmFiMSwgMHg5MDY3NzViNSwgMHhlN2QyOWJjYSwgMHhiYTExNzYxZSwKLQkweDZhOTI5Y2ZmLCAweGZmMTRiYzkzLCAweGJhNTY5YmU1LCAweDRhNGUwZTgwLCAweGYzZDAxNzQxLCAweDFmOTg5MGE5LAotCTB4M2Y1NzYxOGEsIDB4M2UwZjRiZDcsIDB4MGY3NjAwODcsIDB4M2ZmYjRhZmMsIDB4MzMwM2Y0ZmQsIDB4NjJmOTdmNjAsCi0JMHg3YjQ2ZWM5MywgMHg2YzM5YjM2NiwgMHhkOTVhZmNhNiwgMHg4YzlkMzI1YSwgMHg5NjMxZmNjNSwgMHgwODg5ZmQ1ZiwKLQkweDdkM2QzNmY5LCAweDcwZjUzZTk2LCAweDI4YzdmODEyLCAweDNmN2Q3MGE1LCAweDY1NTJmYThjLCAweGIwNzk0N2QzLAotCTB4MDQ0ODA0ZmYsIDB4MGVkOGNjZjksIDB4ODA5NzNmYzYsIDB4MTI5ZTcxZjIsIDB4Y2U5Y2I3ZDcsIDB4MDBmMGY1MTMsCi0JMHhmNWEwNGI4NywgMHhmMDQ0NGY4MSwgMHhlNjRlOTI0ZCwgMHgyZmQ0MzRhNywgMHhjODRmN2FlNiwgMHg0ZTNjNGNlNCwKLQkweDZmZjIzYzU1LCAweDVlNDBkZmU0LCAweDIxMjBmMGFhLCAweGJiODhmN2E2LCAweDc2MGIxYjFlLCAweDdmZDM1NzZiLAotCTB4OWMwZDA0YjgsIDB4ZGIzYjNlNTQsIDB4ZTdmMWUwYjIsIDB4ZTNjYmZkM2QsIDB4NDU4NzZlNmUsIDB4OWRiMDg1ZGIsCi0JMHg2YmViOGRhNywgMHg5NzJkMmNlZCwgMHg2M2YwMmVjMywgMHhkZWNhMzc5NiwgMHhiZTVjZmQyMCwgMHgxZjI3ODlmNSwKLQkweDZkZjIzYjA1LCAweGRhNjJmN2IzLCAweDk3ZDZkOTdmLCAweGU2ODEzY2ZlLCAweDg5YzliNmNiLCAweDFjMzJkOWQzLAotCTB4MmYxNDUyNDIsIDB4Njk2ZmZhMDEsIDB4YTUwZjE0NjYsIDB4ZjE0OTdmYmYsIDB4ZWZkZjYxOGMsIDB4YTNlMjg4NGQsCi0JMHg4NTdlZGI2YywgMHg4ZjBiZTk4YywgMHg5NWZiMmQyOSwgMHhiYzBjNDc0ZSwgMHgwM2NiMWNiNCwgMHhmNWRjNGFiZCwKLQkweDNmNzgwMjhkLCAweGM5MjA0ZmI1LCAweGQ5ZTAzMWU5LCAweDA3ZWExMmY4LCAweDIzYzQyNzAwLCAweGRlMmY1M2M3LAotCTB4MTQwM2Y1MGMsIDB4NTVjZjIwMmYsIDB4OTdjYjE5M2MsIDB4ZmQwMzc5NzMsIDB4M2QyMzQ2NzksIDB4ZjgzY2ZiM2YsCi0JMHg3YjMxZGY3ZCwgMHhjZmM1ZmQ2MSwgMHg3NTgyZTlkZSwgMHgxOGFhOTA5YywgMHgzMmI2M2Y1ZCwgMHgyZGM3NDdjOSwKLQkweDZlNDk4Mzk2LCAweGUyZjdkOTRjLCAweDdhNDMzZjBkLCAweDY3ZmQ3YTJiLCAweGYzNWVjYzQ5LCAweDZmNzA5YWE1LAotCTB4ZmFjMmE2MGEsIDB4OGNkYzM1MTYsIDB4N2UyNDJiZWIsIDB4YzdlMmJiYTQsIDB4OGY5MDAyYzQsIDB4N2YyNDRiOWYsCi0JMHhiOGJlMGM1YiwgMHg3MTdjNjQ1OCwgMHhiNDU1MjM2MiwgMHhkMDRlZmFlOCwgMHhhMGZkMDc2ZCwgMHg2ZDBjNWJmZiwKLQkweDFkYzU3ZjQyLCAweDY3ZmZmODA0LCAweDJjOWFmZmFhLCAweDE2ZTdmY2M2LCAweDRkYWZhNzg2LCAweGI1NGY5ZWFhLAotCTB4MzZiZDJkM2MsIDB4ZmMwMGVlYWQsIDB4NGJlYTFlOWMsIDB4ODA1NzNmMDYsIDB4MGYwZTQxNDgsIDB4YWZkYTNiZTEsCi0JMHg2NGI0ZmFmOCwgMHg5MWUyMWY4NiwgMHhhYTNiNzg3MiwgMHhlZjgxNGMwNywgMHhmNjQzYmY1MCwgMHhkYWVhYzc1OSwKLQkweGEzZDJlZjkxLCAweGUzZTEyZmUzLCAweDYwZGI3OWQzLCAweDQ0OTEzZWZmLCAweGFjNjI1YjhhLCAweGYyYThhNjZmLAotCTB4MzVjN2RkM2QsIDB4NmZlMWE1ZjQsIDB4Zjc0ZGVmYzYsIDB4Zjk1NmZlMzEsIDB4MWYzMzM0M2QsIDB4ODM3YjNmY2EsCi0JMHg4M2I0MGZmMSwgMHgyYmNlOTFmZCwgMHhmYmU1OGM5YywgMHgxZTUwMTI2ZiwgMHgxNjM4NDk5OCwgMHg5Y2M5Mzc1ZiwKLQkweDJhZTVmNWFmLCAweDRiNzlkMDlkLCAweDVlODY5YzQyLCAweDg0MDRmZmEwLCAweDBhYjdmYTNmLCAweDhkM2I2OGViLAotCTB4NzhjMDBjYmMsIDB4YTlmZGJlYWUsIDB4ZjljNDViN2MsIDB4ZjllYTIzZGYsIDB4YmUzMDM0OWYsIDB4MGFiZjVmZWYsCi0JMHgyZTU3M2VlMiwgMHgxNDdjOWU4NywgMHg2N2YyOTVmOCwgMHgyYWZjMDNkMCwgMHhjZmJhYzAxNywgMHhmM2ZjMWYzNCwKLQkweDljOWYyOTRmLCAweDU0Zjk1MTY5LCAweDdjOGQzZjJmLCAweDVjN2RiYzVhLCAweGIzM2QzZTRjLCAweDlmMzYyMzM2LAotCTB4ZjkzMWVmZDIsIDB4ZDNlMzJkNzQsIDB4NTNmMjViZmYsIDB4YzAzZTVmODUsIDB4ZmMyOGYyZWYsIDB4MWZkODc5NTQsCi0JMHhmMGYyOGQxYywgMHhlMTA3OTMyMywgMHhmNDg3OTQ2OSwgMHhkMzkyMGRlNywgMHhiYTU0ZmU5NywgMHhmNGFkZTk1MywKLQkweDQwOGI4YTk5LCAweGE1ZDJmNGVlLCAweDc0YmQ3NzRhLCAweDFmNWRkMmE5LCAweDdlMGU4OGZmLCAweGEwMDRmMmM2LAotCTB4MDUyNzRhMDUsIDB4MGRlNDhmYmIsIDB4NmYyY2Y4YTYsIDB4YjQ0MGU3NjcsIDB4YTc5MGNiZGQsIDB4MzZlMWYyNzAsCi0JMHgxZTVmNmE0NiwgMHg4N2NkYTg5YywgMHg0MzE2ZjkwYywgMHg1ZjIxOWY3ZCwgMHgzN2VmYTg2MCwgMHhmNTBjYWJlNCwKLQkweGQwM2ZjYzQzLCAweDQ4MjE1MDc2LCAweDdkNWQ2MTA3LCAweDNhMDkzOTc5LCAweDU3YjcyZmMxLCAweDg3YWZmYjQ0LAotCTB4NmQxNTc5Y2UsIDB4MWU5Y2QzZGYsIDB4YjA3OTUyMGEsIDB4ZWFlY2NhZDIsIDB4MTU2NTQwYzgsIDB4NzcxZWFmYzgsCi0JMHg3OTAwOTVjNCwgMHg3YjZiZDMyYiwgMHg3OGFlMjIwYSwgMHhhYzc4N2U4ZCwgMHhkYmY5NDQ1ZCwgMHg1YWY5MjIxOSwKLQkweDFmOTQ0NTdmLCAweDlkN2YxMDZhLCAweGU2NzJiZmE0LCAweDNhMjY5YzY3LCAweDNkODI5NmQyLCAweGMxN2EyYjU5LAotCTB4ZWNiODVkNDQsIDB4M2NiODE3MTYsIDB4NWY4N2RhN2EsIDB4NWY3ZThiM2YsIDB4ZTNjNDU4NzQsIDB4NmI5YjFlOGIsCi0JMHgwNDhiY2MyYywgMHhjNmFhNTI3ZCwgMHg4MjQ5MzgyZSwgMHg3ZTA4OWRiZiwgMHgxZjY2NzZjMywgMHhkMDZiNWMyYywKLQkweGE0NWFjODJiLCAweDEyYzc0MjhiLCAweGQ1MjJlNDA1LCAweGZiZDdkZmU3LCAweDk3N2QxOTRkLCAweDFiOGFmZWYyLAotCTB4N2I2YWU1ZjQsIDB4M2IwMjM5MzgsIDB4NWY0OWI0YWQsIDB4Y2U3NmU3ZWUsIDB4NjdiZDJhOTMsIDB4MTc5NDBjOTAsCi0JMHg3ZDgwYzA2MCwgMHgzNGViZTVjZCwgMHhiM2Y1ZjQ3MSwgMHgwZTdiZmMyOCwgMHhlNWU4MDQ4OSwgMHhmMDg4YmI2YywKLQkweGNlY2NkYjNmLCAweDIwNzA0OTA5LCAweDg5MjU0ZGYyLCAweGUxNTM1Y2EwLCAweGExN2MwNWQ0LCAweGJhNzcyZmY0LAotCTB4ZTczNWZjNzYsIDB4N2NhNTVhMWUsIDB4N2Y2M2JiZTcsIDB4OWRhZWQzNDcsIDB4MDNkYzhmNmYsIDB4YTY2ZjVkZjksCi0JMHhkNmZhNGJiZCwgMHg4YWNmYjI5ZiwgMHg3ZDllZDlmZSwgMHhlOTRmM2M0ZSwgMHhkYTZhZmJkOSwgMHg2ZGRmOTAzZCwKLQkweDdiM2NjMmY2LCAweDE2Mzk3ZGY2LCAweGI5NjdhN2U4LCAweDU2ZTQxOGI5LCAweDdmOGE1MGNmLCAweGZkZWNkNjlhLAotCTB4ZWUyNzZjNzIsIDB4NmYxMDJiOTMsIDB4ZDMwYThiYWYsIDB4NzZmZmRhNzMsIDB4OTQ4NDQ4NTQsIDB4ZmZmNjBhYWUsCi0JMHgzM2Y0NzY3ZCwgMHhhMmI3OWUwNCwgMHhlZjY3YTA3ZiwgMHhjNzdlMzk5NywgMHg5NTNkNmYzZiwgMHhjN2E0ZGNmYywKLQkweDg3NmQ2NjQ5LCAweDdmMzNjNWY5LCAweGY4Y2Y2MDczLCAweGI5YzE5NjI3LCAweDY1N2VlYjZmLCAweGYyOWYyZDAxLAotCTB4NDE2MzM3YzIsIDB4Njc2Y2Y2MWUsIDB4ZGNiNzRkN2EsIDB4MDVjZTAxYjksIDB4ZWVmMzUyZmUsIDB4YjljMjk5MzIsCi0JMHgxMDYyOTgxYiwgMHg4NjJiYjk5NSwgMHg2MjNhMGU0YywgMHhmNDFiZTVjMSwgMHgzYzI4NWM3YiwgMHgwNjdmZmQzZSwKLQkweGY3OWUwMjFlLCAweDQzM2JiNzk1LCAweGZkZDYwMTE2LCAweDQxNzdkMWQ1LCAweDIzMzNlYzBlLCAweDNkZWJhYTVkLAotCTB4ZjUwY2IyZDMsIDB4M2JhZGYzOGUsIDB4ZjVmNjYyNDEsIDB4MGI3NTljZmYsIDB4Nzc1OTBiZTEsIDB4OGRhZmY0ODYsCi0JMHgwN2EyNWRlZiwgMHg4M2U0NjJmMSwgMHhmN2JlNzRiZSwgMHg3NTZmY2MyZSwgMHgxN2JlNzE3YSwgMHhmZjMzZWY0OCwKLQkweDgzZmZkN2M1LCAweGUyOWRiZWYxLCAweDc1ZmU3NWRkLCAweGFmOGJmZDU3LCAweDFmYmM3ZmJiLCAweGVlZjFjMzllLAotCTB4YzBmNTczODYsIDB4ZmNlMGRmMGIsIDB4YWI5Y2E4N2UsIDB4ZjdlNzE3ZmQsIDB4ZWFhZmQ2ZmUsIDB4NzkzMDdmZTcsCi0JMHhmNWEwYzhkZSwgMHgwM2FkNDlmMywgMHgyYTZiOGIxNCwgMHhhMGNlMWMwZSwgMHg3MjE4N2ZhNSwgMHgzYmU2MWUzMCwKLQkweDE4YzM5Zjk5LCAweDEyNWZiN2U3LCAweGMxNjRmZGIwLCAweDg5MWQ3Njg0LCAweGM3NWRiODE3LCAweDVjYzFhMWVjLAotCTB4YTRiYzE4N2YsIDB4YzE5MGY1MTAsIDB4N2E2NDFlNDMsIDB4ODNhOWU0ODMsIDB4YTQzZmJlNzMsIDB4Y2M2MmYwMmQsCi0JMHhjYjdjYzkwMiwgMHg5NWY3NzkwZiwgMHgwYmI3YWYzYywgMHgxZjEwMjc3ZiwgMHg0ZTBlNDExYywgMHhhMDQzZjdmYiwKLQkweDIyMTkwZTlmLCAweDUzNGFmZWEyLCAweDc0NWY1YmQ0LCAweGU1ZWZiM2U1LCAweGI5N2VjZThhLCAweDY3YjdhM2M2LAotCTB4NzZmNTEyZjIsIDB4ZGZkZTU0Y2YsIDB4M2ZlNmMyMzQsIDB4NDI4NDIxY2QsIDB4ODc5MzBlMTQsIDB4ZmMxMTI2ZmUsCi0JMHg5NjJmOTM5YywgMHg3OWYzNDA4OSwgMHhlYzAyYmZjNCwgMHg3ZDBlYTk4NCwgMHgxOWMxOGY3ZiwgMHg1ODBmYzY4YywKLQkweDE2YmI2OTY0LCAweGFmMTZkZmZjLCAweGQyNWRmZDgwLCAweDYyNzk0MjY1LCAweDBlOTAxNmM5LCAweDk4NGJkNTQ2LAotCTB4MWVlNGRkN2YsIDB4NzE5ZTcwMDcsIDB4NzczM2FlYzUsIDB4ZmE5N2YwMTMsIDB4NTI4ZjE2MTQsIDB4NWZkZWZjYzAsCi0JMHg0NGRkZjc3ZiwgMHhmMGUyZTM4OCwgMHhhZWZmYTIyYiwgMHgwMzZlZmYwMywgMHg3YWU4ZGIwOSwgMHgxODI0NDkxNywKLQkweDRlZmUwMDk3LCAweGYzYWZiYzgxLCAweGYwZjNlYTc3LCAweDY4YTRlM2YzLCAweGRmYWJlNzNmLCAweGIzZmUxZDFmLAotCTB4ZWU5NDVkZDMsIDB4ZGJiMGE3ZGYsIDB4MWMwOGU5MGQsIDB4NTNkYWQyNWUsIDB4ZTBjZWQ2ZmYsIDB4ODQ4NTc4MTUsCi0JMHg2ZWYzYjE4NiwgMHgyZTczNDBiMSwgMHhlY2NjYTk3NCwgMHhkOTdmNWRlZSwgMHhjY2Y2MDU5ZSwgMHg3MWQxOWVhNCwKLQkweGEwNDcxZjhjLCAweGZhZTAxOTdlLCAweDg5ZTI1OWU1LCAweDFmODAzYWYzLCAweDc5ZTFjNzg3LCAweDE5ZDEyMWQ3LAotCTB4MGI2YmRlMmIsIDB4ODE5ZWIzYjcsIDB4ZjY5YTUwNzMsIDB4MTE1YTkxMzQsIDB4NDExMjdkZjQsIDB4YzliMDVkZmYsCi0JMHg4OGM1MzY0MiwgMHg0ZDk0NDgzYiwgMHhlMzljNWNmYywgMHgzOTg4ZmU4ZCwgMHhlMzY3ODdlMCwgMHhlMzRkYTIyZiwKLQkweDlhZWI3OGI0LCAweGRiMWE0YTdlLCAweGYzZjAwZjE3LCAweGUyMWNlNmJlLCAweGQ4MmY4NTFmLCAweDJkZGYwMDc1LAotCTB4ODJiY2NlZDYsIDB4OTIzYjdjMTgsIDB4ODFjNjZmYzMsIDB4YmU5ZWQwYWYsIDB4MDRkMWJkYWMsIDB4OTM1OTdlN2MsCi0JMHg5NjllNzc0OSwgMHgzZGZkNzMyNiwgMHhiY2MyNjQ5MywgMHgzYWIwMWM2NiwgMHg4NzJmMDFiMywgMHhkOWM0MmY0NCwKLQkweDUxM2ZkYTA1LCAweDgzY2UzMWZjLCAweGZlODRmMDhjLCAweDliN2E4ZmMxLCAweGVkNzg0NmVjLCAweDAwMTY1YjkxLAotCTB4NmM3Y2Y3NWMsIDB4ZWQ2NzYwMjEsIDB4NjJjYjZhNTYsIDB4MGE0ZmYzY2QsIDB4ZDIyMmU3OWIsIDB4ZjRkOGU3NzIsCi0JMHg0ZWY4M2Q3ZiwgMHgyNzg0NzFlYSwgMHg0NGQyYmQ4MywgMHhkMmZiYWY5MCwgMHgzZTNhNDExZiwgMHg0MDg0OTliYiwKLQkweDAzN2Q4MzFlLCAweDMzNmNlMTcyLCAweDgyODBmZGMxLCAweGQzYjA0MWU0LCAweGE1NWZiZjI4LCAweDY5MmZkZmI1LAotCTB4ZWMwY2Y2ZGIsIDB4ODJlZDk1MjMsIDB4OTVjYjVjMWIsIDB4ZmUwMmE3NTIsIDB4YmM1YjQwYjksIDB4YzMzYjcyMDgsCi0JMHhiYTIxYzZhMywgMHhlMWE0ZGNjNywgMHgwOTY0ZGI4YiwgMHhjMjcwN2JlMSwgMHhkYzYxNWI5ZSwgMHgwMjE0YmI0ZiwKLQkweGM1ZWY5YWZiLCAweGZlZTQwYjg4LCAweGM4NTllZGE3LCAweGViYWRmZDA3LCAweGRhZTRkNWY3LCAweGMzZjQxMmE5LAotCTB4MWU5MTlhZTQsIDB4NzRkYjM3NDYsIDB4ZmY0NDJiZjksIDB4MTlhZmUwMjAsIDB4ZGUyNWNlZTYsIDB4OTZmYmY4MTgsCi0JMHhjYjA1ZDlkMywgMHg2N2ZmZDBiNywgMHg1NTBkZWRmMiwgMHgwMmM1ZjliZSwgMHgyY2JkMWYwZCwgMHgyMzU1N2RiMywKLQkweGM5NjM5MmRmLCAweDI3ODJjNWI3LCAweDc4YmVlMDE5LCAweGMwNjRmMGVmLCAweGYyYzNlMmViLCAweDZkZjI1OGMwLAotCTB4ZGYzYjM1NmIsIDB4OGZjNzhlN2EsIDB4Zjk1MmI0ZjYsIDB4N2M4ZDIzZjYsIDB4MmRmMmE1NmIsIDB4OGI3ZmY5YzYsCi0JMHhjZjVmZmFhYywgMHhmZjQyZGYyMywgMHgxNWI3ZmMzZCwgMHhmNThjNWJlNCwgMHg1M2YwZTQxZSwgMHhmNmQ4ZGJlNSwKLQkweGM2ZGYyODYzLCAweDcxNzQ5YWI2LCAweGRjY2JjZjk2LCAweDdjYWZkOTlmLCAweDA0ZGUwNjEzLCAweGQ5MjFkNGZhLAotCTB4M2Y0MThmNmIsIDB4ZjZmZWI5NWIsIDB4ODE5ZjhmMWMsIDB4N2RjZTQwNzEsIDB4ZGNlNTAzZjUsIDB4ZTcyYTE3M2IsCi0JMHhhY2UwOWJmZSwgMHgzYmM1YjljYSwgMHhmNjlmYzYwOCwgMHhlNzI2NDNhNSwgMHg3MmE2ZWYxNiwgMHg2NDdhMDA0ZSwKLQkweDVlZjE2ZTcyLCAweDA2MzhmY2MyLCAweDhmYWEzNmY5LCAweGJmNTgyMzdjLCAweDA3ZGFjYzMyLCAweGI5MWZkMmRhLAotCTB4ZTk5N2Y2OGQsIDB4NWExNmJkOTMsIDB4ZWYyYTMzM2YsIDB4ZGRlNTY5YzYsIDB4YmJjOWZkNTcsIDB4ZWYyNjE3NDMsCi0JMHg0Nzc5NzA3NiwgMHg5MDMwZDhlNSwgMHhmMGZhNDZhZiwgMHg3NGUzZWJiNiwgMHhkMTNmOGNmNywgMHg5N2UwN2JmYywKLQkweDY3M2M0NTU3LCAweGNlYzRkZDdhLCAweGZlMzRmZTA1LCAweDU3ZDAzNjQ0LCAweDMzZTZjMjgxLCAweGQ3ZjQ2MTQyLAotCTB4ZmVjNDFkNWQsIDB4ZDZjOGJjYTcsIDB4ZjE2MGUxNTcsIDB4NGNhZDk1YmIsIDB4MTY2Y2FjM2YsIDB4NmJmYTFlNDIsCi0JMHhmMGFmODRkZSwgMHhhZjY0YThiYywgMHg3ZTY5OTI0MCwgMHgyN2Q1OTlhNiwgMHgyNGU3YTk0ZiwgMHg4Njg2N2E2NCwKLQkweDk2ZTYxNjFlLCAweGExNzc3ZmExLCAweGJmZTAyYzQ0LCAweDlkZTQ3MzJkLCAweDJjYjYzZDAyLCAweGNiN2JmOTk3LAotCTB4YzM5MmY3ZjgsIDB4ZGZjMGFiOWQsIDB4YzA1ZWIyNTksIDB4ZWUzNTMyNzMsIDB4ZWNiZjhkNTAsIDB4YmVkZTVlNzMsCi0JMHhjNjgxZmQwYywgMHgzYzE5ZjM3MywgMHgzM2M2NjY0ZSwgMHhjNjMxYTg0MiwgMHg2NmQ5N2ZiOSwgMHhhNzFhN2U3ZCwKLQkweDI3NjI5OWU3LCAweDI2YmM4YmMyLCAweGUwYzUzNzdhLCAweDJmNWViNTFmLCAweDM4NzEwZTljLCAweDlmYjg4OTM1LAotCTB4YzI4OWMyZjYsIDB4MTdkZTkzY2QsIDB4ZDNkMzE0NGUsIDB4NzBhMjkyMzMsIDB4YWU5NTc5MjksIDB4ZjVmZmJiMzcsCi0JMHhhZTMzNzBhYSwgMHg5Njc3ZjU1YiwgMHg4M2ZhN2VmMSwgMHgzZWU3MGE4MywgMHgyNzcwZTdlYiwgMHhkMjcyODQyNCwKLQkweDk1YWI4ZjA4LCAweDE2NjgzZjVlLCAweGJhNTBhN2M0LCAweGZjMTMzOTQxLCAweDBkNzE4OGEzLCAweGQ2MmU5MzA1LAotCTB4OGViODQzZGQsIDB4ZWQ1NjRmZDMsIDB4OGM3MDI5YTQsIDB4N2RlMjEzM2QsIDB4ZmVhZGRjZTEsIDB4NmUyMTk3OGUsCi0JMHg5ZTViZGM2ZiwgMHhhZjRlZDg0YywgMHhjM2Y2NjA5OCwgMHg2YjE2ZGJmOSwgMHg0YWEwZTUwNCwgMHg4NzQwOGQ4NywKLQkweGYwZjdhZTE0LCAweGFhMGNmNjdlLCAweDYxNzY4YzlhLCAweDNkMDZlMDliLCAweDIyYjYxMDI0LCAweGFlMTQwMzVjLAotCTB4MjAyNDJmNzAsIDB4MjgwNmZjMzEsIDB4MWRmZjAyM2QsIDB4ODMwNWZmNWMsIDB4MDNjMTVlZTMsIDB4NzUzYzgwZmUsCi0JMHhkMGJjMDJiZiwgMHgwY2VkNTlmYSwgMHg4MDkwODEyZiwgMHgxMTI2Yzk3OCwgMHhkNjU3YmJmNCwgMHhjMDMwZGUwYiwKLQkweGUxMTFhZGFmLCAweGZhNjdjYWE3LCAweDQ5ZTJkMGUzLCAweDJjNTJiZjQzLCAweDlhNGFjNWZhLCAweGQ3OGNiMmZkLAotCTB4ZmRhZTYxOWIsIDB4OGNmM2QwMzMsIDB4ODhkMjY0YTcsIDB4N2RmZmE2ZTAsIDB4Mjc5ZjNkMWYsIDB4YTc4OGMzZmUsCi0JMHhiNmJjMzljNywgMHgwMDFkM2MwMiwgMHhiYmQzMDhiNywgMHgzZGUxNWZjMiwgMHgyMDNjYjUxNSwgMHg5Y2YwNzUwNSwKLQkweGVmYjllOGYyLCAweDE1MzhkNzg1LCAweDIwYzc0MDVlLCAweDg5ZTdkYWRmLCAweDEzNmMyZjkwLCAweGJlZjQ4MGM4LAotCTB4MzA3Mzg1ZWIsIDB4ZWM5N2JmMmQsIDB4N2ZmYWM2M2QsIDB4MTg5MmYwNGMsIDB4YmE2MGJlZWIsIDB4OGI5ZTg3ZWUsCi0JMHg3ZjgyZGQyOSwgMHgzNmJhM2ZiZCwgMHhlMTUxYTljMiwgMHhlN2E3MjZmYiwgMHhhZjIzNTkzZiwgMHhlZjNkMDE2NCwKLQkweDQ5Y2Y5MDE1LCAweDNjZWViYzdiLCAweGY0YzJiZjZiLCAweDRhNTYyZDg4LCAweDkxZGQ3NGY3LCAweGEzNzdiMmMzLAotCTB4ZDgzY2FmYTcsIDB4ZjYwYmUxY2UsIDB4ZDAxZWY2ODMsIDB4ODgxMGIwYTUsIDB4YzE2Y2RjMGYsIDB4Yzc5YzJmMzgsCi0JMHg2YTlmYTYzMCwgMHgyYjU2ZjNlNSwgMHg3NjUzNzgxOSwgMHg3OTg3ZmRmZiwgMHg0N2U5ZmRmZiwgMHg4YzBjN2U2YSwKLQkweDZkY2Q3MTA3LCAweGQxNTFiYzc0LCAweDgzZmI4Y2YxLCAweDZmOWZmNzZhLCAweDM5NzJhZjVkLCAweDRiYWVmN2Y3LAotCTB4YzY4N2U3MWQsIDB4MDc0ODA0YzEsIDB4ODc4ZDU1ZTIsIDB4YzdmODIyMzksIDB4ZTVjZmEwYzgsIDB4YWUzZTkyMGIsCi0JMHhkNmU1YzIyYywgMHgxZmZmZGMzZiwgMHg5MjdmYWZiZiwgMHg0ZTdiYzZlMiwgMHhlZmQ1YmE3NywgMHgwMmNmYTQ2ZSwKLQkweDQxZTdlMTM3LCAweDdkODRkZjEzLCAweDNiMWY1M2ZmLCAweDkxMzZjYWY3LCAweGZmNjExMzIzLCAweGEwMTMyYzk4LAotCTB4OTE1ZjRmYWIsIDB4ZTlmOTZmZDEsIDB4Nzk2NzE2NTQsIDB4MjUwN2FiZmQsIDB4Y2Y1Y2RkNzAsIDB4ZjVjOGExNjIsCi0JMHhiM2I0MDRlMywgMHhjN2FlODc1ZSwgMHgyMTZlMWU4MywgMHhiZjA4OTFiZSwgMHg5NTRmYjgyYywgMHhjNTNiNTRkMSwKLQkweDczM2FmOTQzLCAweDUyMDZhODczLCAweGUyNDg5NGVmLCAweDkzNmYwMDlmLCAweGViNzgwMjQ0LCAweGUyOTgwZGYwLAotCTB4M2YzYmY5YTAsIDB4MzJlMDE5MjIsIDB4YjYwMWZhYTMsIDB4MDY0NDNjY2YsIDB4YmUwOWJkNDIsIDB4OGNjNjY4ODEsCi0JMHg4ZGVjZmQ2ZiwgMHhjNjNjZTkxYiwgMHgzZDdhMjJiZiwgMHg4M2NjZGViNCwgMHhmYWExMDcwZSwgMHgxMzA2YThmNCwKLQkweDM1ZTA2YmYxLCAweGMwNmE4NDgxLCAweDQzZmUzNDZmLCAweGVmMzA4ZGRmLCAweDQwZWZhYTYyLCAweDdiNzE3ZWZjLAotCTB4ZjIwYjhkNjMsIDB4MGZiNjAyMGQsIDB4MmU3OWZkMDQsIDB4ZjVhZDllYmEsIDB4MGU1ZGU0OWYsIDB4ODNkNjgxNzIsCi0JMHhhYzBkMDI2ZSwgMHhmMDQ5YTA1ZSwgMHg2MTZhNDg0MiwgMHhlNTA1M2FmYiwgMHgxNzgwOTM0NiwgMHgwNDg2YjZiZCwKLQkweDg2ZmQ2MTYyLCAweGFkZGZiNDJjLCAweDM2N2RiNDBkLCAweDNkYjQ1ZmVjLCAweGM5ZjRkYmY0LCAweGRjODIzNzFiLAotCTB4ZjZjNGYzYTEsIDB4YjYzY2VjY2QsIDB4MDBmM2I2OTAsIDB4ODFkZDM0YmYsIDB4MDgzNDk1ZmQsIDB4MTQxOWVlMDQsCi0JMHhhOTdkYjMzNywgMHgwYmQ5MTVmOCwgMHhkN2ZiYWRlNSwgMHg5ZDNiN2VlMywgMHgwZTlhOTc4ZSwgMHgyYTc4NTBmYiwKLQkweDEyYzhkN2RlLCAweDZkOGY3OGRjLCAweDVmYzQ1MGZhLCAweDIzZjg2MTBmLCAweDFjOTg0Mzg5LCAweGRiOWU3ODEzLAotCTB4ZjdkZWFhM2QsIDB4ZTQzMGYzMmIsIDB4MzJlZjQyODMsIDB4ZTdlZDAwNjUsIDB4ZDMwM2I5NGYsIDB4OWY1NzQ4NGQsCi0JMHg3ZGE3YTAyOCwgMHhhN2VkZTE0OCwgMHhjNzlkN2VmMCwgMHhmZGNjMWMyOSwgMHhlY2Q0ZTk0MCwgMHhlMWU2Y2Q4YiwKLQkweGRiNjE3ZWQ4LCAweDVhN2Y4YzI0LCAweGZjZjAwYTQ0LCAweGE2NzhjNjdlLCAweGE1NzZiZTZmLCAweGJhZmUwNDM1LAotCTB4MTBjOGU0ZDcsIDB4NGFmMDdlZjgsIDB4ZGVlZjdlMzMsIDB4Zjc3MGU0Y2EsIDB4Y2ZmNDRlZDAsIDB4MDk5MDY4OWUsCi0JMHg2OWE4MmZkYywgMHg5YzVlNTExMCwgMHhiY2YxOTY2OCwgMHg0NjRjN2M1YSwgMHg5NWI0NWRiOSwgMHgxYjA3MWZlOSwKLQkweDQwMjdiZjU4LCAweDM5M2YwMzZmLCAweGQxN2NkMzk0LCAweGZiZGI4MTE2LCAweGY2YWI0ZTRjLCAweDlkOWJhMTY3LAotCTB4Yjc3MmFiYmIsIDB4Y2ZiYmFmODIsIDB4NGNiNzU0M2UsIDB4Y2EzNTkyMDEsIDB4OGYyZTBhZGIsIDB4MDJhNGE5NGIsCi0JMHhkZGNhMzM0MiwgMHg3NTc3MzgwYSwgMHhlMzFhNWYwMSwgMHgzYjUxMWM4MywgMHhmYzIwZTgwNiwgMHhlNTc1ZDIxNSwKLQkweDNiMDEzMjJiLCAweDJiYTBmODQ2LCAweDZhN2RlNjBmLCAweGVlN2U4MGFmLCAweDBmODJlZGYxLCAweGRmOGJiZGNlLAotCTB4ZmY1MDg3MzIsIDB4ZmI5YmNkMGUsIDB4ZGU1ZmQ4MGIsIDB4NTUwODEzMzYsIDB4YTA3ODBlM2QsIDB4MWNkNzJhNzIsCi0JMHhlODZmY2JmOSwgMHg1YmFmNTNmNywgMHhkMjg0MTIyMCwgMHhiYjg0M2NjZCwgMHhiZDk5ZGYxYSwgMHg2NDcxYzU4OSwKLQkweDA0OTc1ZWJmLCAweGQ0YzkyY2Y3LCAweDhhMDcyODAxLCAweGQ3ZTI0NWVhLCAweDgyNTM4OWM4LCAweGIyOWZjNmVmLAotCTB4OGRhZGMxZmQsIDB4NmE1NmNjZTMsIDB4M2Q3ZjYxMGIsIDB4ZDFmMjY2NmEsIDB4ZDg4NjQ5YjMsIDB4Y2NkMmIyMDgsCi0JMHgwZmI1MzRlNCwgMHg2NGIyZmUzMCwgMHg0NTI0YmFmNywgMHg3YjI1MDc0MywgMHhmNDg5MjVkNywgMHgwNzFlMmFmYiwKLQkweDJiZmIwMzUxLCAweGIwYTI1NzZkLCAweDA5ZjY0YTcxLCAweDM4Y2Q0NmVlLCAweGJmNmEzZjZhLCAweDZlZDY2ZWNhLAotCTB4ZjY5NjVlZjgsIDB4Y2MwOTdmZDcsIDB4YjlmOWQ3MGYsIDB4ZDhjMmYyMDIsIDB4ZmJmMTlmNGYsIDB4M2ZmNzI3ZTksCi0JMHg3NDA5ZDVjZiwgMHg4OWFmYjk1ZSwgMHhmYjljYTQxOCwgMHhkYWUxZjRjMSwgMHg1NTM1MDA3MywgMHhkZTcyMTVlMywKLQkweDA2OWYxMTMwLCAweGIxN2ZiOTdlLCAweGRmMDY5ZjExLCAweGRmMjhlM2FkLCAweGQ3NWRmYzUzLCAweDAyYWM4NDI2LAotCTB4MTUyOThmZTQsIDB4MDM3Nzk4ZDksIDB4ZmY3MjU3OWYsIDB4NzY1NGU1NzMsIDB4ZjE5YWQzYmUsIDB4ZmJlMDBhZmEsCi0JMHhkMjAyZDllOSwgMHg5NWZhMDkwMywgMHhhZmE4ODkwMSwgMHhiOGNlMjA3OSwgMHgyZmI1OWIyOCwgMHgxZjgxZWRhMiwKLQkweGZlMzNkNzViLCAweDAzYzI3MmE0LCAweDYxYjJhNDcyLCAweDZmZDYxZTVkLCAweDdmZDAzYzEyLCAweGQ0M2NlMzZiLAotCTB4NDU3MzhhNDcsIDB4Yzc0ZGU1ODIsIDB4NmUyYTNmNTAsIDB4N2MwODk2M2IsIDB4MGViNmY5NGMsIDB4ODljYTgxZjQsCi0JMHg3MWM4Mzc2NiwgMHhmZTU1MWY5NSwgMHgwNWM3OGQ3ZSwgMHgwYzdiOGIxMywgMHgwMDY3ZTNjNCwgMHhjYmVjMGRmMywKLQkweDRjMmJlMmQ3LCAweDE5OWEwN2FlLCAweDE5NzIwNjNmLCAweDU1YjZiZWJmLCAweDA4NWUxNTg2LCAweDlmM2YyMzdmLAotCTB4NTVmOGNjZDgsIDB4M2NlNmVjN2MsIDB4YjQ1Y2E3YjgsIDB4MWNhN2M1ODksIDB4ODBhMjk4NmMsIDB4MjQyMjdkM2UsCi0JMHg5N2QzN2VlMCwgMHg2YWRlOTliZiwgMHg4MTFhZWZlNCwgMHg1NDNmN2JlZCwgMHg1YmY5NTRiZiwgMHg3M2ZhNjNlNSwKLQkweDRlNTc4YzFkLCAweGI1ZWUxNGY5LCAweDg2N2FmOTE5LCAweDNiZTdmMmRjLCAweDdmYWY3Y2U5LCAweGNlODdhZTk2LAotCTB4ZWY4ZmNhNzcsIDB4ZTQ2YTc1NzYsIDB4NDEyN2NkMjQsIDB4NzE2MjUwYmUsIDB4YTk1Y2FhM2MsIDB4ZDdiYzU4OTAsCi0JMHg2MTlmOWUwZiwgMHg3YWNkMWJmYywgMHg3MzRhYzhmZiwgMHg2ZTZiOGIzYywgMHhjZmVlOTE5MiwgMHhmODdkOWZjNywKLQkweGYzZjkwMmVjLCAweDdjZWFmOTQyLCAweDJmOGVhOWZjLCAweGIzZjdkNWVlLCAweGIxOWJkMzkyLCAweGQ3MGE2ZWJmLAotCTB4MWZlYjg1MzAsIDB4YjhjMDlmOWEsIDB4M2U5ZjhmYjEsIDB4NTNmMDAzMzYsIDB4MzlkMjg3YjYsIDB4OTNiMzU3ZDAsCi0JMHg0OWNlNDE4NCwgMHg0YWFmZGMyMSwgMHhjNjFmNDU1YiwgMHg5Y2UxNGFiZiwgMHgzZTVhOWQxYiwgMHg2NTNlNzE2NiwKLQkweDllOTEzOWNmLCAweDQzOWJiNzRhLCAweGQyZmI2OWQzLCAweGM1OGMxZjlkLCAweDExZTU4YmI4LCAweDNlMGE0MzhjLAotCTB4NjBlNWY1Y2QsIDB4ODNlMDU4ZTcsIDB4MWJjNTg5NTIsIDB4MDBjMmU1MTksIDB4ZTg2NzNiMGIsIDB4MDU5ZjZkZGEsCi0JMHhiMzM2MTNlYiwgMHgyZGE1ZmQ3YiwgMHhjZDY2YzhiNywgMHgyMmNkODRiOSwgMHgxY2YwZjVhYiwgMHgxOGU5NDgzMCwKLQkweGZjYzI1NWVlLCAweGQ1YzlmN2I0LCAweDJkYWVhMzM4LCAweGI2OTQ0ZTRjLCAweDk2MDc2OGM5LCAweDBkZDZkZTZlLAotCTB4NmZhNWEzNzEsIDB4MTVkZmQxOTksIDB4YzYwOWZjZDgsIDB4NmU3OTRmYzEsIDB4MDI1M2ZhMmIsIDB4ZmNlZWEyNmQsCi0JMHhkZWJjNGZhYywgMHg4NjZjMzE2NiwgMHgwYWQ2YjM3OCwgMHhmOWEzZWYzYywgMHg4OTZmOTg2MywgMHhiZTdhYjcxZCwKLQkweGU3YjJiMmI4LCAweDUyMGNlZWY2LCAweGZlZmQ5NjEwLCAweDk3YzgxNzI5LCAweDVjOWIxZGQzLCAweGY5YjdiNzE4LAotCTB4ZmI2NWUzZmIsIDB4ZGNiNWU3YzQsIDB4NzlmMWJkZjcsIDB4Y2ExN2UxYTcsIDB4ODYyZDEzMzgsIDB4MDNjZGM2ZjgsCi0JMHhmM2E0OGY1MCwgMHg3MTg4MjljYiwgMHg5N2FiZDFjZSwgMHgwMzdjZmQ2ZiwgMHg2ZDc3OGZjNCwgMHhlNjAxYjMzZiwKLQkweGE3ZWRmZTViLCAweDg4N2UyMDFiLCAweDdlZTJiM2VjLCAweDA4ZmE3ODE3LCAweGVkYWFkZmM2LCAweDdlZTE2MjdlLAotCTB4NjE0ZjJkOGYsIDB4ZGJmNzcyZGMsIDB4ZDZmNDJmNjYsIDB4MWE0NGY3YmQsIDB4NmY3NThmYzQsIDB4ZmMwOTJhZmIsCi0JMHg0ZWY2NGI5NiwgMHg5MmVlYmY0MywgMHg0OTkyNTMxZCwgMHg0ZDQyZmQ4YywgMHgxNzQzNmU4MSwgMHhjNDZkMzcxMCwKLQkweDgzZDZjMWQ3LCAweDMxZjRlNzE4LCAweGJmYzgzN2M1LCAweDk2Y2I3OGRlLCAweGVhYmYxNjBhLCAweGNkOTY3MWUxLAotCTB4ZmJkM2UzYjEsIDB4ZGViNjU1YzQsIDB4MjA5NWZkNzgsIDB4ZmU5OTViZjcsIDB4Y2FmOGRlNzgsIDB4N2YxZTI4MzcsCi0JMHg2YmY4MDE3NCwgMHhiMTAyZmQ1NiwgMHhmYzMxZjdmMSwgMHg3NmUyMWUzMiwgMHhiY2ZiZjhmNSwgMHg4ZmUzZDE3NSwKLQkweDgwZWI1OTQyLCAweGMzMmJlMzdlLCAweDM1MzcwMDE3LCAweGM1OTI3ZGZlLCAweGJlMDE2ZDU3LCAweGM2MGNmZWQ5LAotCTB4YTZkZTAyYjMsIDB4ZjlmZjYwN2IsIDB4MGRlZTBkM2MsIDB4NzMyMzk0OWMsIDB4NWVkOTNlZjAsIDB4MDllMjFiYjMsCi0JMHg4OWJlZjc0YiwgMHhlM2JkZDNmYywgMHgxMzQzZjQ3NSwgMHg0ZGRlODcxZSwgMHhkYzU4N2Y3YSwgMHhkOWQ3YzBiMCwKLQkweDk5NzE2NGU0LCAweGI3MTBmZTFjLCAweDc3ZTE3MWU5LCAweGU4Yzk5ZjFlLCAweGVjZGI4ZDU4LCAweGE3NzM1ZTJmLAotCTB4NmFkOWU5ODUsIDB4ZDM0NTdlNWMsIDB4MzFmZTNjYmIsIDB4MTcyMTJmOGEsIDB4N2JlYzc0ZjAsIDB4NzBhODExZWYsCi0JMHgxYzM5NzM3MCwgMHgxZDhlM2Y4ZCwgMHhhNzFiZGIxNywgMHhmODA1ZjFjZSwgMHgzN2E4N2Q4MywgMHg4N2U2OThiZSwKLQkweGU4ZGZhMjY0LCAweDFlNDMxMjRkLCAweGI4YjIzNzc0LCAweDdmNTk2ZWU1LCAweDFmOGEzM2RmLCAweGNkYmM4ZjE2LAotCTB4MGJhMWE3YzgsIDB4ZGYzZTQzOGIsIDB4N2MyODdmZmMsIDB4MzNmMjgyMzYsIDB4YmE5YzJmYjAsIDB4YzcyZDhlYmUsCi0JMHhmZjdjZTBkZiwgMHg1OTY3ZGY3NywgMHhiM2VmMTgyOCwgMHg2M2QwMjdmYywgMHgwNTMxZWI0NSwgMHgzYjVlZTBlYywKLQkweDhiYjdhZjliLCAweDllYmJkNWZiLCAweDc1OWUzMTE2LCAweDk0NDFjYjU1LCAweDUxNzk0NmUzLCAweGM0NThlZjA5LAotCTB4MGI3MWVmOTgsIDB4ZDhkYmMzZDcsIDB4ZGRiNWQxM2UsIDB4N2VkMDcyMTksIDB4NDZlYzBlYmEsIDB4M2U2Y2FlN2EsCi0JMHhlMDljNDBhNiwgMHhhZjdmOWJjYiwgMHhjNjI5ZjNiMCwgMHg4NDRmYjAzZiwgMHg3YWVmZjMzNCwgMHgxNjU4ZmY3NiwKLQkweGY4ZmNjZDZmLCAweGUzM2U3MWM2LCAweDYzZGEwNGUzLCAweGZlNjgxMzhmLCAweDU5NGUzNzQ0LCAweDNiNzE0NWIwLAotCTB4NjlkZTNmY2UsIDB4ZjQwYjc3YzksIDB4ZTk4M2JhNzcsIDB4YzQ1YmE3ODMsIDB4YjlmNzU4ZmMsIDB4NjZmYmU0ZGUsCi0JMHg3NDNkN2JlZiwgMHg0MTc3YzRiZiwgMHgxMDFkZWM5YywgMHhmZDQzNjVkMSwgMHhmNzMzODk3MiwgMHg0ODQ0YjhhZCwKLQkweGE5ZWY4YzE1LCAweDgxZTNjNjU5LCAweDAxNGRlOTdlLCAweGFmMzhkNzdjLCAweDk1ZGYzMDI1LCAweDlmOGQ1ZjAwLAotCTB4MDlmYjc2NDcsIDB4NGE3MmE1ZTgsIDB4MTVmODM2NDEsIDB4NDk0NmYyOGMsIDB4MDY5MDkxMzQsIDB4Zjk5YzRiZmYsCi0JMHhlZjNjMWVjOSwgMHg3YzAxMGYwOCwgMHgyMTM4Y2QxZSwgMHgxOWVmYmY0MywgMHg0OWVmNTRmYywgMHg5ZDMyNTU2NCwKLQkweGMxNDE3YmRmLCAweDRiZjY4Y2JiLCAweDY4NjBmZWJlLCAweGZmNmZiMzgxLCAweGFmN2ZkZTZhLCAweDU1MmJmM2E4LAotCTB4YzE0NzIzOWEsIDB4NTgyZjIxMmUsIDB4ZGM0MWJlMzEsIDB4MTdmN2M1NjcsIDB4YjhhYzFiMDIsIDB4YmUzYjgzZGUsCi0JMHhlYmY1MTI3YywgMHg5ZDg0Y2RjNywgMHg4NWViNTBmYiwgMHg5YjkxNWZkMiwgMHhjNzYyNzFmNSwgMHgwNmZlMWI5NywKLQkweGE2MzQzM2ZhLCAweGEwNmQxN2UzLCAweDY4NmVjMWY1LCAweGQzOWRhM2I2LCAweDJjNmUzZGIzLCAweDVlOGE0NWY4LAotCTB4YzgwNjY3YjgsIDB4YTMzYjIyYjMsIDB4OTJlN2EyYzcsIDB4YmZiNDM1NDMsIDB4ZmU1OTAzZTMsIDB4NzhhMWQ2ZjgsCi0JMHhiYjZjYmZkZiwgMHgwZjBjZTMxMywgMHgwOTU1ZDhlZSwgMHg3M2Y3NTJmYiwgMHg1MmZiMDI3NiwgMHhjZjVjMGJmNywKLQkweDFmYmY4NjdmLCAweGI0N2IyZjU0LCAweDQ0MjVjNmYxLCAweDcxZWY2OGYyLCAweDk1OWU0MTk0LCAweGZjMTA3ZGUzLAotCTB4MDQ3Y2UxYzksIDB4MzhiNmFhZmUsIDB4ZjU0MWZmYmMsIDB4MWYzZjVkNWYsIDB4YmNiYjkxY2IsIDB4NDFjMWM3NDgsCi0JMHg3ODRiZGVlYywgMHg2MzAzYzgxMCwgMHg0YWZjYjUzZCwgMHg4ZjdlMzBlYiwgMHg0NDczYjY5OCwgMHg0ODk0MDdlYiwKLQkweDBlZDdjYjIxLCAweDAzYTRmMjYyLCAweDY1NmI1ZmViLCAweGY3OTZhZmZjLCAweGNmZDU5N2VkLCAweGQ1ZDMwZWI3LAotCTB4ZjI1N2RiNTMsIDB4ZjQ4YzQxZjcsIDB4ZTA1NWIzN2IsIDB4MmU2ZmMxZmUsIDB4NDVmZWY1ODksIDB4ZjdlM2Y5OGMsCi0JMHg2ODI0MDk5ZiwgMHg5YjY1M2QwMiwgMHg4MjI1ZGYxNSwgMHhkZjEwZjM3YiwgMHhlNzYxNTNiZSwgMHgzMGFlZTU1YSwKLQkweDg3YjIzZmJlLCAweDViNzJlM2NiLCAweDE5NDNkZjE4LCAweGY1MDFlN2M0LCAweDlkMmM0ZjIxLCAweDU2YmJlMmNmLAotCTB4ZGUwNGFjYmIsIDB4YzE3OGE5YzcsIDB4NTc3YzAzZTksIDB4ZjhmMmZjZWMsIDB4OGUyMWIyZWYsIDB4ZDQ3MThlY2QsCi0JMHgxY2ZjMmYxNSwgMHgxY2MyYTBlOSwgMHgxMGZjMDM5ZSwgMHgxYjI2NjZkOSwgMHgxZGI3Y2Y4MSwgMHhlZDdlMDM0ZSwKLQkweDA5NjljMzkyLCAweDU3NWU3M2RmLCAweGJjMzY2MmQxLCAweDcxZDZjMDFmLCAweDBhZmViYWJhLCAweGRlYWNlN2I4LAotCTB4NDdlZDJjYTcsIDB4NjU2YjNjY2UsIDB4NTg1ZmU4N2UsIDB4NzhhZDRiN2QsIDB4Njc3ZmFkYWUsIDB4YWNmNTc0ZTcsCi0JMHhhZjU3YjgyYywgMHhjNGI1MmZkNiwgMHhhZDZiOGI5NiwgMHg0Zjc2M2ZmMiwgMHg1ZWU3ZDFkOCwgMHg0MGViNWFlMiwKLQkweDkyM2E2M2QwLCAweDQ5NTNlZmMwLCAweGU3OTA2ZWY1LCAweDg3ZDM5YmE1LCAweDgwZTA5ZjgwLCAweGVlNzdiZDU1LAotCTB4ZThmZDgzODksIDB4N2I0MWVjODAsIDB4M2VlZDUyMWEsIDB4OWJkYWIyNzMsIDB4ZmYwMDhkMjUsIDB4ODkyY2E4Y2QsCi0JMHhmMWE3YTNhZSwgMHgwNDQxYzI5MywgMHhiM2FkMGVlMiwgMHgwZGJkYzk2MiwgMHhhM2MyM2I1NiwgMHhjNWY2NjJkNCwKLQkweDBjZjhkN2JhLCAweGMxMDdkN2E3LCAweGM2YzcxZmU4LCAweGM3NTBmZTAzLCAweDUwODcyMDNkLCAweDc5YjcwZjBlLAotCTB4MmVkNDNmNTgsIDB4OWI2NWVmODIsIDB4ZGVlOTY3NjcsIDB4YjE2YTkwYzUsIDB4ODQ1M2U1MWUsIDB4NTNhOTA5NjcsCi0JMHg1YmYyMzViMiwgMHg2OTY0YWYxZCwgMHgwNTk0OTY3NiwgMHhlYWZmYTVkZiwgMHg4YTMxNTdhNSwgMHg0NDRjMTI2NywKLQkweDMwZTI1MGJkLCAweGJhYTk3NTI2LCAweDVjOTIwNGZiLCAweDI5ZjgwMTYwLCAweDg5MmRjMGE0LCAweGM4YjUyYTQwLAotCTB4ODJkMjM2ZWYsIDB4NWJhYTgzYTksIDB4MmFhOGZkZWMsIDB4NjRmMjcyMDIsIDB4MDQxN2JiZWYsIDB4ZWViYzI4ZDMsCi0JMHgxYzFmYjk0NiwgMHhlOWM1Yzg0YSwgMHgxM2RmZmY3MCwgMHhhZmMwZDZlNywgMHhmOWMyZWFjZCwgMHhjMjJhYTU5OCwKLQkweDM3NzRjNWU0LCAweGQwNDIyM2U4LCAweGY0YTNiZTRmLCAweDlmOWQ1MzU0LCAweDdmNDhmNDA1LCAweDBjZmY3MDdjLAotCTB4M2YzYTBmNGQsIDB4YWZlNWZiOTcsIDB4NzRhMjBmNDAsIDB4ZmI1OWRlY2EsIDB4NTBkNTA5MzEsIDB4MjhmODQzMTAsCi0JMHgxMzI3NTVmYSwgMHg5YWQ4M2VmNiwgMHhkZWQ2ODhiNywgMHg2ZmU3MmJmOCwgMHg3MjhmZGMxMiwgMHgzZmEyNDFjYywKLQkweGIxMDc5YTExLCAweDI2YjZmMjBhLCAweDM4NWNkYmVlLCAweDQ5Yjg3NDQ3LCAweGJiNDJmNDE4LCAweDM0ZWQ4NDgzLAotCTB4NGU5NjhjNzUsIDB4OTVkZmY5NmIsIDB4M2ExYWYzNGQsIDB4OTdkNDRmNzUsIDB4Y2E4MmY5MWIsIDB4MmRiOGMzMzUsCi0JMHhlZmRhM2YwOCwgMHgzZjdlODY2NywgMHhkOWZiZjQzMywgMHhjMmFiZjVmNywgMHhlOGQ5NjAyOSwgMHg1NjA5Zjc4NSwKLQkweGI4NzAxNzU2LCAweDFjMmNmMWIxLCAweGEzM2UxNDZlLCAweDYyMzM3ZGUwLCAweDc5Zjk3OWIyLCAweGM2ZDVjMjM4LAotCTB4ZmE4NjYzNjcsIDB4NmM4M2FmMTQsIDB4MDdhNzA4ZTksIDB4MjA0NWY2ZTIsIDB4ZDYyNDk2NmUsIDB4NTc3YmIwMTMsCi0JMHhhNjlmNmMwOCwgMHg0ZDBlMDUzZiwgMHgyMGI2ZTIzYiwgMHhjN2M3ZGUxZiwgMHhmNDYzNjQxOSwgMHhlZjViZGVhZSwKLQkweGU3OGFkZjViLCAweDViZWE3ZDFhLCAweDhiNmZhYmZiLCAweGRmZDlkZjVkLCAweGU3MzFlYzdjLCAweDRjZTU0M2YzLAotCTB4ZmU2ZjBiZTUsIDB4N2I2MWNlMDksIDB4ODI5YjhkZTUsIDB4NmYyNzQ3MzIsIDB4OWMyOGQ5MDYsIDB4N2Y4ZmUyMmEsCi0JMHg5ODVmODlkYiwgMHhhMjE5NjhkZSwgMHhlODBkOWZjNywgMHg2ZDhmZDI5NSwgMHgxMWJiZmU4NCwgMHhjYmQxZmRlZiwKLQkweDlhMGViZTNjLCAweDc1ZDJhNDc3LCAweDNmOGY5NGZkLCAweDYzOWQ4OWI1LCAweGY5ODRiNmRmLCAweGU3YjlhOGRkLAotCTB4ZjJiN2ZhODMsIDB4MTRiNTNmZmEsIDB4MThlMGZmYTEsIDB4YjZlOTE3N2YsIDB4ZGUxN2E2N2EsIDB4ZTc4OGFmNzYsCi0JMHhmZGRlN2RjZCwgMHhmZjI4NWY4MSwgMHgwODU0YmVkYywgMHhiZDYzZDM4NSwgMHhlMDlhNDQ2MywgMHgzZTVjZDQ3ZSwKLQkweDIwNWRmMWJlLCAweGFkZTRmMTNmLCAweDBiYmQ2MzExLCAweGJkNGNlOGM0LCAweDZmN2M2NTU3LCAweGUwMjkyMTYwLAotCTB4YmZlOTNkZWYsIDB4OTFiYWIyNmYsIDB4ZDYxZTQxMGUsIDB4NGJlZThlOGUsIDB4OGU5NDc1YzEsIDB4NzRhNDlmNDEsCi0JMHg3MGVjZTcwYywgMHgzY2UzMDYzZCwgMHhmMzhiMGE1YywgMHhlNzhhMThlOCwgMHgzYjNjYWE2MywgMHhlMWM0ZjFlYiwKLQkweGQzNGRlYWZlLCAweDc4YjgxN2JkLCAweDVlMzkyN2JjLCAweDczYTVhZjIzLCAweDJiN2JkZDM2LCAweDA1MzdiMjM1LAotCTB4ZWU3Yzk1ZTQsIDB4YTZhMWUyMzIsIDB4MWU4ZDQyYWYsIDB4ZWE5Y2E2OGYsIDB4MTBjY2M4YTEsIDB4Mjc3Mjg0YTYsCi0JMHg5YzgxMGE0NSwgMHhhNDA1ZGM5MywgMHg5OTU4ZjQwOCwgMHg1ZjVhYTdkMSwgMHg1N2FjYmM0OSwgMHhmZThkN2M2ZiwKLQkweDg3ODgwMWJiLCAweDNiZTJlNWQyLCAweGQ3MjhjOTNjLCAweGUwMGIwNWVkLCAweGY1Y2FlODkzLCAweGU5N2QxZGZhLAotCTB4YWQ5NWI4MjEsIDB4OWRkNjA2YmIsIDB4MzUzZDc3ZGUsIDB4ZmE4YmQ3OGEsIDB4ZjdkZTg0ZjMsIDB4M2YzMDJjNjksCi0JMHhkMzc5ZWNkMSwgMHgwZmZiZjMwMywgMHhhNTFmODA5OSwgMHgyN2JjN2MyZiwgMHg2NzdlMTQ0MywgMHhkZTMxODM0MywKLQkweDNlOWI4YzQzLCAweGRmNTdjNjEyLCAweDlkNTM1YzQ1LCAweDJiYWRlNzgyLCAweDJiODk3YmY4LCAweGZlNjE0N2FhLAotCTB4ZTU5ZWZlN2UsIDB4YTYwZjZhYWEsIDB4ZGUyY2ZjMmEsIDB4Y2ZjNzdjNWEsIDB4NmZmNTgyMzIsIDB4MjRmYzczNzEsCi0JMHhmYzdjMzg5YSwgMHg1MjU5MmZhOCwgMHhkMDFjZjBhYSwgMHhjMzBhYWVlYSwgMHgwODY0NTlmYiwgMHhkYTYwMjdkZCwKLQkweDlmODQ1YWVlLCAweDg3ZTgyNmUyLCAweDZmMzFmNWE0LCAweGU1NGQzYzg2LCAweDBmODhkMWZhLCAweDhhNDU1ZGM5LAotCTB4ZGRiZTc5NjgsIDB4Y2RjMDIwZmYsIDB4N2JhNDE5ZWEsIDB4MzI5Y2QwMWYsIDB4MDNkZjdiZWMsIDB4ZjVhN2E1ZWMsCi0JMHg3MjI2MmU0YywgMHgyN2MyMzI3YSwgMHg2NWVmNjE1MSwgMHg5ZmQ0NzRhYSwgMHhlM2MzNTU1ZSwgMHhmNmFlMWY3NCwKLQkweGRmYzM1YTYyLCAweDc3ODFhYTgxLCAweDNkNDgxNDdmLCAweGVkYzgxZjk4LCAweDQ3MGExYWM0LCAweGRmMDhmZWY4LAotCTB4NzNhYTZiMzcsIDB4OTcyY2ZjYjEsIDB4YWFhNjg5NTcsIDB4MjVjMDMyZmQsIDB4NjZmZjMwODEsIDB4YzkwYzkwNjIsCi0JMHgxNDA0MmMyMSwgMHhjNDgyNTI3ZSwgMHg5Y2Y1NzkwMywgMHhlNmM2OWRkMCwgMHg3NDQxZTljZCwgMHhkYzc3ODY0YiwKLQkweDVlMDA4ZjNjLCAweDI2Y2IwZWVhLCAweDRiOGI5M2YwLCAweDY4MWYyNWFmLCAweGU1OWM1OWU4LCAweDk5YmYwNzhiLAotCTB4YjAwYmYwZTgsIDB4NzgwMDNkZmYsIDB4NDc1OWYzYTUsIDB4OTZlZjg1ZTcsIDB4Yzk1ODdhNzIsIDB4ZDM5YWJlZjEsCi0JMHgxZjQwN2RjMywgMHhkMzkwN2QzNCwgMHhmYWU4YWZjNSwgMHg2NWUzNWYyMSwgMHhlNmQ2MDFmNywgMHhjNGI3NzhiMywKLQkweGM3N2YxMzBjLCAweGYxYjQ0YzJjLCAweDE2ZGVmMTY0LCAweDIyNzVkMGEyLCAweGM1MzA3YThmLCAweDViYzhlYTc3LAotCTB4ZmIxN2E0NjYsIDB4YTExM2UyNjgsIDB4NDNiYmFkZmMsIDB4ODJjOTFkZWMsIDB4ZTMzN2Q4NTQsIDB4MjcyMzc3ZDUsCi0JMHhlMzY3ZTI3YSwgMHhjNGIwZDU0NSwgMHg5OTEzNzNkZiwgMHhmMzExZDFkZCwgMHhlZjFhYzY3ZCwgMHhlZmQ4MGIwMSwKLQkweGVlYzdjZGZkLCAweGE0YWZhNWY1LCAweGQ5ZWJkOWUzLCAweGZlMDFjNWJkLCAweDY4OGJkOTgyLCAweGY1NGY1MWRlLAotCTB4OGNlNTAyNmYsIDB4ZGU3NDFkMmUsIDB4YzY3ZDFhNDUsIDB4YmZmZDhmZGUsIDB4NTFjZDdlZDQsIDB4N2JlN2M1MWIsCi0JMHhlNDUxNDFiMCwgMHhiODdlYmFmZiwgMHg2MTRiZTAxNSwgMHhjNzNmMDFlZCwgMHgyYTQxNzJjMywgMHhmMWMzZmZmMCwKLQkweDg3MzVmZGIxLCAweDgzZDIzMjZkLCAweDFkMzJmYjJiLCAweDNlYzlkNzNkLCAweDk4OWVlNzZjLCAweDNhZmJhM2E5LAotCTB4YTYxMjc3MmUsIDB4NTc3ZGQwNGUsIDB4NmRlZmNjZTUsIDB4YjEyZWVmNGMsIDB4YmNjMmNmZmIsIDB4YzVkMWNlOTIsCi0JMHhiYzRhN2U1MSwgMHhhOWRjYjYyMSwgMHhkYzIwOTU5MSwgMHhjMzE5YWZkZiwgMHhhNjcwNWNlNCwgMHgzZWFiZjRjMiwKLQkweGE3Yzk4NDcyLCAweDZmMzJlNGIzLCAweDY0NWY0MzUwLCAweGYwM2Q0MTE0LCAweGVlOGE5OThiLCAweGMwMzVjMWRkLAotCTB4N2U1ZTk0MWYsIDB4MDU3ZWU5Y2QsIDB4YzU0ZDAxZjAsIDB4NGRkMjBhMTEsIDB4ZGExMzc0YzIsIDB4NWYzOGFiYTksCi0JMHg2OGY5Y2ZkZCwgMHg4N2EzZTcyZCwgMHhjMjQ2N2Y4MCwgMHhkZjhjYWUzYiwgMHgwNTFkZTIyNCwgMHg4YjhkNDhmYiwKLQkweGMwMjU4ZmJkLCAweDhkNDliNGZmLCAweGU4NWNmZTZkLCAweGIzMmRlNmFmLCAweDM1MGZlNzAwLCAweDExNzUyZjkyLAotCTB4OTc3ZTI5ZTQsIDB4ZWY4ZjMwN2IsIDB4ZWRlYjA2ZWEsIDB4YmJmMTU4OWUsIDB4OTI5M2VkNGIsIDB4Yzk1ZTE0ZWMsCi0JMHhkZmJmODY3NiwgMHhmZTIxNjdkNCwgMHgzMTZmNmUyYywgMHhkODcyNGJhYywgMHgxOWFmYWVkMCwgMHg2NThlMjk2OSwKLQkweGJkZWNkODFmLCAweDUzYjc0ZWYwLCAweDlmYzgwZjc4LCAweDgxN2Y2YmQwLCAweDY2NmVhMTdiLCAweDM3ZmRjMjBlLAotCTB4MDYzOTlmNzAsIDB4MzNiMThjZmQsIDB4MDQ4NjQwNzksIDB4ZmYwZDA4YzksIDB4ZGNmN2YxZDcsIDB4NDY0ODI3ODgsCi0JMHhmMmMwZTQ2OSwgMHhmODA4ZjM4YiwgMHg3ZmYyZmE3NywgMHgxMzZmZjIzZiwgMHgwMjM1N2Y5MywgMHg3ODBjNTdkZiwKLQkweDU1MzFmNzU1LCAweGQ3ODA0OWZlLCAweGI5ZTc3ZDAxLCAweGRkNWNhMmYyLCAweGNiOTk3YjNkLCAweDNjYmQ2MzZmLAotCTB4NGY5ZDlkYmIsIDB4MmZjNDZmMTEsIDB4NzBhNzJkZjQsIDB4Y2U2YmIzY2EsIDB4MDljNDk0OTUsIDB4NWQ5NWVmYmQsCi0JMHg0NjFkNjMxNSwgMHhmNjEyNzdiOSwgMHg5MjI1OTAzZiwgMHg1OTA1ZGYxZiwgMHgxOTFlNzhhOCwgMHg4ZmU0ZjIwZiwKLQkweDNmYTVmZTJjLCAweGFmMWQ0MGZkLCAweGVlMzE1Y2U4LCAweDcyZTc4NWYzLCAweGFlMjk5ZjcxLCAweDIwZmU0NWNmLAotCTB4ZDhkNzhkZTAsIDB4N2UxYTI3NDksIDB4OWRiYzAyZTYsIDB4YTNlN2U3YTgsIDB4ZTIwODcyMGQsIDB4YmM2ZmY2NTIsCi0JMHgxNGQ5YTFlNywgMHg4ODM3MGI5ZSwgMHhkN2ZlZmVlYywgMHg2YTI3N2RkZiwgMHhiNjQ4MWJlMiwgMHhmNTNhZjUwNywKLQkweGExMTNiNDNkLCAweDczZGE1ZDNiLCAweDU4ZGZjMmVjLCAweGY2MmZhMDdkLCAweDM2MTRjZmI3LCAweDZiZGZiNmM0LAotCTB4NTNkMDU3ZTAsIDB4MWU4MDFmMjksIDB4NDg4MWY1NGEsIDB4NWY4NWY0MTgsIDB4MDhiZGYxNWIsIDB4NjhkYzFmMzUsCi0JMHg1NDBlZjk4ZiwgMHgxOTVhN2RiZSwgMHhkZGJlNjdkMCwgMHhjNGE0Mjc3NywgMHhmYWZlODA5MSwgMHg4ZWExZTZmZSwKLQkweGE2N2MxYzdiLCAweDI4ZjY0ZTcwLCAweDcwYTViMzhmLCAweDlmZjNhOTlmLCAweGUzYjI3M2IxLCAweDJjNDIxZmRjLAotCTB4NzhkYjk0ZmQsIDB4NzI5ZmE3YjksIDB4MjE2NzhiMTcsIDB4ZWFlNWQ4ZWUsIDB4M2I3MTRlN2MsIDB4N2I0NmUxNzAsCi0JMHhmZDhjNzk2OCwgMHhlZmJmMjE3YywgMHg0NzlmOTBiNywgMHhkNTNmZjhhOCwgMHhiYTMxMzdhYiwgMHgzZjJmZmI1MSwKLQkweGRmZTE4YTM3LCAweDUzYzI2NzQwLCAweDNlYWU5MDYzLCAweDdmYTMyNDNkLCAweDRhZWE3ODRkLCAweGYyYTUyZjdjLAotCTB4OTdlYjA1OWMsIDB4NDE1ZmRlOGIsIDB4NGQ3OTE2MWMsIDB4ZjNiYmJhNDQsIDB4ODczYzM4ZjAsIDB4YzNiYzMyZWEsCi0JMHhiN2YzODdiOCwgMHgyYjllMTY5YSwgMHg4NTk5ZTlkNSwgMHhlYzBhMDVhMSwgMHgyYWU3ODVjYiwgMHhkZTIxMWU5MSwKLQkweDEzOTdlZTExLCAweDkzNGJmNmYyLCAweDEzNTc0ZTI0LCAweDY5OTFmZGEwLCAweGEyYmQ2OWNiLCAweDY0YmY0NjRlLAotCTB4ZmQxMmIwNjIsIDB4ZWY3NjhkODQsIDB4ZGFlNDMxZmQsIDB4ZTc0N2JiMWUsIDB4MmNlYTI4MzcsIDB4MjM4OWZlYzcsCi0JMHhlNzM1MTI0OCwgMHg3YmY5MGJmNSwgMHhkOGU3NDVlMSwgMHgxZGM0ODQ3YiwgMHhjZjQwMjkyNCwgMHhlOTQ0ZGU1YywKLQkweDZjNmVmZjUyLCAweGNiZTE4OTk3LCAweGY4NTdkZWI4LCAweDVkZTk1ZjNhLCAweGQ2N2U4NGVmLCAweDVlYjY2M2ZiLAotCTB4NzUxN2NmYmUsIDB4ZjVkNjFhZTYsIDB4ZDZiMWYxYmIsIDB4NDRjZjVkMTUsIDB4ZGZjZTVmNmMsIDB4MzEzNzJkZjksCi0JMHg5ZmU1YWJiYywgMHhmNGQ1ZjFmMywgMHhiODJjZjU3OCwgMHhmODRhNDM2MSwgMHhhMTg1OTAzYiwgMHhmZjc4MTUzYiwKLQkweDNlMjFiMGE4LCAweGIzYWNkMDQxLCAweDVkNTZmZWE4LCAweGZkNjE0OTVjLCAweGFhZmY3YzNjLCAweDMyOWU2MWE4LAotCTB4N2E0NzIzNWYsIDB4ZWNmYzE0ZjEsIDB4YTIyMzQ5YTUsIDB4ODFmY2ZhNzgsIDB4MWRjYjY5OWUsIDB4MWMxNGFmYjAsCi0JMHhmZTNiM2UwMywgMHhlNzljYzU2NCwgMHhmMGNiZjQwOSwgMHg4ZTA5NTI3NiwgMHg3MmI5NDJhZCwgMHgzZGQ2MmJhNywKLQkweDc4OGRjZjk0LCAweDFiNzhlN2FiLCAweDM1YTMyNDExLCAweDk3YzU0NjcyLCAweDRkZjFmZGIxLCAweGY5YzE3NzY1LAotCTB4ZWNmNWYxZjQsIDB4ZTVmZThmNzUsIDB4MWE3YzZjNGMsIDB4MzA3NmU4ZTEsIDB4NzFlOWE5ZjgsIDB4MmZmYjJmYmEsCi0JMHhlYjk3OGUwOCwgMHg4NWZhOWJlMiwgMHgwYWJmYzcyMywgMHhkNTNiZjUyNywgMHgxYzBlYWNhYiwgMHhhMzdiYjA5NywKLQkweDA0MTdiOWY1LCAweDhjZjhlOGJmLCAweGJlMmE0ZTNlLCAweDdlNDFlYjkxLCAweDdjMDkzOTUxLCAweDA3YzllYTdhLAotCTB4ZTVkYjZhYzYsIDB4ODQwZDI3ZGIsIDB4ODVlZDQ4NzEsIDB4NmZkZDhmOWQsIDB4ZmQ0MWE3ZjcsIDB4MjFlZjY0ZTAsCi0JMHhkMTViY2EwZiwgMHg1ZGQ3NDM1YiwgMHg3NzY4ZjcxMiwgMHhkZmFiNTcxOCwgMHg5MzU2NTZiZiwgMHg0YTVmYzEyYiwKLQkweGMxMmI4N2VkLCAweDA1YjU0MzZmLCAweGU2YThhM2Q0LCAweDg0N2QwNWUwLCAweDdhYzVmMTU2LCAweDgzOTI2YTE3LAotCTB4NTY1NmIzZjksIDB4OTViZmExNTcsIDB4MGRjNDgyNTgsIDB4ZjhjMjNkN2UsIDB4NDJjYzljOTIsIDB4ZDBlNDk3ZmYsCi0JMHhlYzhhMDFlYiwgMHg0ZGJmODM3NywgMHg2NTkxZjdlMSwgMHgzZDI2YmZjOSwgMHhjNGQ5ZWMxYiwgMHhiZTA2YTA4YywKLQkweGJjNTgzOTU3LCAweGM1OTRkYWM0LCAweGI3NDM4ODQxLCAweDM4NzE5ZjgwLCAweGVhY2UzN2ZhLCAweGE1MTdmYmVjLAotCTB4ZGQyODAzODUsIDB4ZGE3ZGNmYTksIDB4ZTVjYmU4NDYsIDB4ZmU4MjE2YzQsIDB4YmJmNGQxYjQsIDB4NzQ4OTFlNzYsCi0JMHg0YzdkYmFkZSwgMHhlMmM5MTcwZiwgMHg4OTBmNzNjMiwgMHg4NzE1YmY3MCwgMHg3MjgyZmQwNywgMHhjMzk3MzU3OCwKLQkweGRjMmVlZGNiLCAweDY0NWQ1NjdmLCAweDhlYTBmYjQyLCAweDBiN2VjM2ZiLCAweDhiODQzMDdlLCAweDg0MzI3Njg0LAotCTB4MjU3ZDQwZGQsIDB4YjBlYjg4MmUsIDB4ZDA0NDdhYzIsIDB4Nzc5OGMzZGIsIDB4MjIzMjhiYzIsIDB4NDAyNWIxM2UsCi0JMHgwNDc4OWUzZSwgMHhlMTIwMGZjOCwgMHhmNjg3YTA1NSwgMHgwYmJjZWE0YywgMHhmZDU4YTdiZSwgMHg1ZmJmMDFiMywKLQkweDE1MWM3NmE0LCAweGUwNWEwZmMwLCAweDVjZTAwNGJmLCAweDNjMzMwNjJmLCAweDYyZTNmZWI0LCAweGE1ZWEwMzI0LAotCTB4MTJiN2EyZDEsIDB4YzQxMTdhNTgsIDB4ZTczNWZiNDEsIDB4Y2UxZGVjMmIsIDB4OWJlYzVlNjgsIDB4NjRhOTY4YmYsCi0JMHhmYWY4NmYzOCwgMHgyZmY5NmQxMiwgMHgwNzYyYmVhYywgMHhmNjU2ZmJlYywgMHgwN2UyNGQ3ZSwgMHg5YWI5Y2EwMiwKLQkweDAxNzczZjVlLCAweDcxYTlkYmRlLCAweGQyM2Q3ZjMwLCAweDIxZDVkMDA1LCAweDk1OWY0ZmI2LCAweGU4MDk3MTNjLAotCTB4ZjU5NTFiM2YsIDB4NWUxZTZlYTIsIDB4NzZlMjVlNWQsIDB4NTNhNTEzNGQsIDB4ZjRhYjhiZjAsIDB4OTlmMjQyMzEsCi0JMHhhZTJlOGU4MCwgMHg3OGI1ZGZhNSwgMHhjMTVmYTE4YywgMHgzOWZhMjMzOCwgMHg0N2U3NTA0ZiwgMHgxNTdhNDVjNywKLQkweGZkYjBlNWNmLCAweDdiMGY0MGQ2LCAweGEwZmYzNjA0LCAweDBmZWNjZWQ1LCAweGFmMDExNDEyLCAweDkzYzI1NWIzLAotCTB4M2M3Y2IwNTYsIDB4ZGRmMDdmNTEsIDB4M2Y1NWI3Y2YsIDB4ZjJjMTU5MzcsIDB4Y2MwYjk2NmUsIDB4YzY2YWU3NjcsCi0JMHg1ZjZlY2NmOSwgMHhlNWZlMDFkZCwgMHgwYmE5ZWRkOSwgMHhiNjY1OWNlMCwgMHgyMDhmZjJlNSwgMHgwZTQ3MjNkZCwKLQkweGZjNGU0MWQ4LCAweGY5YTNiZDhjLCAweGNhMmYyM2QzLCAweGJjNzc4YTIwLCAweDQzZWYxMWIxLCAweDcxZjljZTNmLAotCTB4ODBjODg5MGUsIDB4MmI3MTNmN2YsIDB4YzIxZTRmY2MsIDB4NWUyN2NkZjUsIDB4YzE5MTZmOWUsIDB4MWMyZGJkN2UsCi0JMHg5YTNhZjliYSwgMHhkMGM1ZmRiYiwgMHhjZDVhNjA3NSwgMHgwOTc5MTQzOSwgMHg3MTZmZTZkMCwgMHg1YTJmYTFlNywKLQkweDdkZTZkNzZkLCAweGJiNTllNTk5LCAweGRmZjgxYzI4LCAweGI4MmM5MGMxLCAweDJkYmFlOGFlLCAweDlkNzUwNzA4LAotCTB4YTNlMjI2YjQsIDB4ZmRmYzRlMTcsIDB4YmQyZTE1MjAsIDB4N2FkZmI2ZWIsIDB4ZmIwYmY4MmQsIDB4MmRiMzZmOTMsCi0JMHg3MTYyM2U2MywgMHg0NjVlNmNiOSwgMHg0NTA2N2QzOCwgMHhjMzkxNWVmMCwgMHhmMmU4MDdiNywgMHgxZGFmODc2MSwKLQkweDEyZGNhNGY4LCAweDIxODY5MzQ5LCAweDVmMjE4NGRmLCAweDRhMmZmYTI5LCAweDc4Zjg3MGEyLCAweDgxOTJmZmE4LAotCTB4MDE4ZThmMDAsIDB4YmU2N2E0MTcsIDB4ZDVmY2U5Y2EsIDB4ODNmN2RlZjQsIDB4YmU5OWQxMTMsIDB4NjZjMWY5ODYsCi0JMHhiNTViN2E3MCwgMHg5YjhjNGRlMywgMHg3YjMwZjhmYywgMHhmNDQyYTkwZiwgMHhmYTBmN2Y1YywgMHg0YjEyNDRiZiwKLQkweDU3ZDM1NWVmLCAweDJkZTYxZmI5LCAweDlkMWY3YTg3LCAweGM0ODY3M2FkLCAweGQ1YTMzZGUwLCAweDY2N2FmNzhlLAotCTB4ZmQzYThiNjQsIDB4YzBiNjQ2N2IsIDB4YzYzYWQ3ZTMsIDB4NGJkM2E0ZGUsIDB4ZWViYTcwNTcsIDB4MTFjNDBmZGIsCi0JMHhiMDU5ZmIxOCwgMHg1NWRhMzI3NCwgMHgyNGY3MTUzYiwgMHgwZGMxZmY5MCwgMHg0YzE2Y2U4YywgMHg2NzEwODlmNSwKLQkweDgwOGQ2MTNjLCAweDFmZjE4OGZlLCAweDg3OTAxMjc2LCAweDA5ZTJlYTBiLCAweGI4MmY4MzljLCAweGJjMTY3MTdiLAotCTB4ZTFkOTUwOTcsIDB4MzkwNGViNjksIDB4ZTBiYzEyMTksIDB4ZWYxNjRiNDcsIDB4OWQyNWY4YzgsIDB4ZDgwN2MzZDcsCi0JMHgzYmY5MGMzZSwgMHg5ZjBlOWU2MCwgMHgyYmYxYTFjNywgMHgxOTU1Yzk3NywgMHhkYmViYTA2ZSwgMHgwYjkwM2UxZCwKLQkweGJkZjI2ZWYzLCAweDkyMmQ3ODBkLCAweDc2YjVmYmMyLCAweDNjZGJiY2M4LCAweGYzMWY0MGI5LCAweDRjM2VhYzVhLAotCTB4NTFiMjQ0MmQsIDB4MjI0ZjM2YjksIDB4MTU5MzQ4MTYsIDB4ZGYyMTU5MjIsIDB4ZWNlN2Q0ZmUsIDB4M2JhZDg2YjAsCi0JMHhlYzJjNDZkOSwgMHg4MGFmZTFmYiwgMHhhY2RmMmU0ZSwgMHhhNjNkZDZlOCwgMHg1MWZmOWY0NSwgMHgxMTlmM2U5YiwKLQkweDBlYjNlN2Q2LCAweDgwYjdmM2U5LCAweDg3ZDFhMzFhLCAweGU3NjVlYzBlLCAweGQ4Njc2NWRjLCAweDA1ZTdjMTNkLAotCTB4N2ZjMDgzZDgsIDB4MzdiOTQ2NmEsIDB4MDczZGFjYTUsIDB4M2NjZjRkY2UsIDB4Zjk0MTM0ZWIsIDB4ZmQ5ODZmOWUsCi0JMHhjNTYyZDkxNiwgMHhiZmY2Y2JmNywgMHg0NGI2MjM2MywgMHhiYWQ0Yzc3OCwgMHhkOGNmY2ExMSwgMHhmZmMwNzI1YSwKLQkweGZjNjNlYjQ0LCAweDQ3MzVkZDAzLCAweGYzYjFmZDgyLCAweDBjY2VkNTMyLCAweGNlYzQ5YzYxLCAweDdiOWM1OTZmLAotCTB4MDQzOThiNjQsIDB4NzY2N2IxZTcsIDB4ZDAyY2Y1M2YsIDB4ODMyZDk5ZGQsIDB4NWU3OWVmNTEsIDB4ZGZhMDlhMDgsCi0JMHhhZjBjN2RlMCwgMHg5ZDJlNmMxMywgMHhhY2RiMjlmYywgMHgzODQ2ZWJiNywgMHg3M2Q1M2U5OSwgMHhmMTBiOTk0YSwKLQkweGViZDQ5NzRmLCAweDQ4Njk3ZGQ3LCAweDY0ZWQxZjlmLCAweGQxM2U2N2YyLCAweDczODc0ZjdjLCAweDE0YWFjZjY2LAotCTB4NDgyNzhiYTAsIDB4NTk4M2ZiY2MsIDB4OWY3ZjI2NGUsIDB4ZWQ1MTVhN2UsIDB4MzNiZjkxNmMsIDB4ZDE0OTNjNDYsCi0JMHhhMjdiNGY3YiwgMHgwNjRiM2ZlNywgMHhjMDAwMWM0MywgMHg3YmY0NTg2MiwgMHhiNTVjNjE5OSwgMHg3Y2I5NmZmZiwKLQkweGZhN2VlNDRmLCAweGMyMjJhYmM4LCAweGIxNzU3NGU3LCAweDU3Yjg5Y2VlLCAweGE2ZjZhZDNmLCAweDMzZWNkNTRjLAotCTB4OTNmYmY1ODUsIDB4Yjg1ZWExZTYsIDB4ZDZiZTY5M2YsIDB4MzA3MmRiMmUsIDB4NzM4ODU2ZTksIDB4ZGZlMTJjZDksCi0JMHhmZDlmMmE0ZiwgMHgxMjEzNDNlNCwgMHgwMmQ4YmJlMSwgMHgxZjcyODVmMywgMHgyZjJkMWZkOCwgMHhkNTFlYTBiOSwKLQkweDcxYjUzMzNmLCAweGUzZjU0NTIzLCAweGY2NmFhNjUyLCAweDk3NGExZmQ3LCAweGJiNGFlZmJkLCAweGU1NzY3YzE5LAotCTB4MWQ3OGRjMTYsIDB4ODM1OTc3YzUsIDB4NjU2YTg1ZTgsIDB4ZmJmZjM3MmQsIDB4ODM3YjgwMTgsIDB4Y2I1Y2Y3OGMsCi0JMHhiZWY4YzliNywgMHgwYWYxYTA3OSwgMHgzNTk0MTNmNCwgMHhlZjg3OWViZiwgMHhlNzlmYWRlOCwgMHg0OGU1Nzk4NSwKLQkweDQ0Y2M0MGE0LCAweDkwNGRjMGQ3LCAweDgxZGY2YzllLCAweGZkOTVkNWVmLCAweDNjOTE0ZWI1LCAweDdkM2Q1ZjMwLAotCTB4M2Y0MzdhNTAsIDB4NzI4MGQ1MTcsIDB4ZjAxZTAwNmUsIDB4NTRmOGMzMmQsIDB4YWUxMWJiZjUsIDB4N2I3ZDIxMjUsCi0JMHgxN2ZlYmUyMywgMHgzM2ZhMzdhNywgMHg2Mzc3OGI0YSwgMHg4M2QzMDFiZCwgMHhjYTQ4NzdmOCwgMHhhM2I5NTI5NywKLQkweDNmY2EyZmIxLCAweDM4ZjhjNWFjLCAweDU0MjgzOGUzLCAweGIwZDBlNzM1LCAweDFmOTA3OTdmLCAweDI3MWY3Y2FkLAotCTB4Yzc4NzI1ODIsIDB4Nzk2NzBlOGYsIDB4ZTgwZjM3N2MsIDB4MTk3ZmQ2MGIsIDB4ZmI4MWVhOTksIDB4N2M5MDM3OGQsCi0JMHhjMjE3OWY0OCwgMHhlMzIyODkwZiwgMHg2YzNiZjQ2YiwgMHg3NzVmMjNiNSwgMHhmYzlmM2JiOSwgMHhmMzQzZDAxZCwKLQkweDE4YzczYzE4LCAweDc2N2JlZmM0LCAweGRlZjhjMjc5LCAweDBmZjdmYWEwLCAweDVmMmNkY2JhLCAweGY4YzU2ZWRhLAotCTB4MmIxZjMzOGEsIDB4NDE5NmNmMjgsIDB4N2ZkNDE3NWMsIDB4ZDEzMjZhZDYsIDB4YjZjY2U2N2QsIDB4NGUyMTkzMDEsCi0JMHhiZDg1YWJiMCwgMHg2NWJhN2IyZiwgMHg3YmU1NjRjMCwgMHhmZjIzNDdmNiwgMHgzMWQ2ZmJhYSwgMHg2ZmVlOTVmOCwKLQkweDFiN2QzODRmLCAweDE1ZGYwMDljLCAweDc5MzI4ZTJjLCAweDU1NDY1NTQwLCAweGVkYTkzYzBjLCAweDBjYWE5NTEyLAotCTB4YjcyMjFmYjAsIDB4OTkxYmJjM2IsIDB4NzIwZTkzYmUsIDB4MDUzZmFjZmYsIDB4ZGM3OWY5ZWQsIDB4YWUzN2IxN2YsCi0JMHhkN2U4MTllMCwgMHhlOGZhZWI0OSwgMHhlMjQzODRiZiwgMHgwZmFmYTA0NiwgMHhlZTVkZWY0NCwgMHhiNWYzZDFlMSwKLQkweGJjN2VkOTg1LCAweDMwNTY0YTRmLCAweDQ0ODE2NjNiLCAweDRmZDUxMmMyLCAweDFmYmM4MDE3LCAweDgzOTQ3OThiLAotCTB4OGMwNDFhMGIsIDB4NTZiODVhMmIsIDB4ZWY3ODFlYmYsIDB4MDM3N2ZiNTQsIDB4NWUyZmUxOGEsIDB4OTEzODg3MGQsCi0JMHgxYjhiNGMxNiwgMHhiMDI1ZTVmNCwgMHhmZTMwYjg3ZiwgMHg0YmNmY2YwMywgMHg3MGU1ZjQ5YiwgMHhiZGY0MTA5MywKLQkweGNjZWZlNmYyLCAweDM5ZjZlMGIxLCAweDdiZTdkNzUxLCAweDFmOTNhOWM5LCAweDhmOGZjYTMyLCAweDVmNWMwMmM0LAotCTB4OTA5YjU4MTksIDB4NzAyYWZkZjIsIDB4NDJjYTZlNzcsIDB4YTU5ZWUyMGEsIDB4NjYxNjUyMTMsIDB4MDQxODNiZTEsCi0JMHgxNjQ1YTdmNiwgMHhiMjY1NzQxMiwgMHg4MDAzYmMzYywgMHhjOWZjODNhYywgMHhmNTgyNWJkZSwgMHg5NDg3ZWY2OSwKLQkweGExZTEyNTRkLCAweDYxM2FlOGFlLCAweGYyNzJkYTdkLCAweDU5NjNjMzA2LCAweGUzMWUxMGJiLCAweDgyMzdkZThhLAotCTB4OTVlYjZhNzUsIDB4Mzc5N2Y1ZjMsIDB4ODM3ZTc1OWIsIDB4ODRmMzg4MGEsIDB4ZWZkNjk1MzgsIDB4Nzk3ZWJhY2MsCi0JMHgzN2RkMWNmYywgMHhlN2UyOTU4OSwgMHgxYmI5NWVlMSwgMHhmYzU2MzRiYSwgMHhhNzBlNTFmOSwgMHg0YzJlNmY4NywKLQkweDE1ZmNiZTA1LCAweDM4ODM4MWU4LCAweDNkYTk3MzIwLCAweDAyNzFjMjBhLCAweDhlODViODAzLCAweGNkZWFjYjYzLAotCTB4NzJjZTc5NjMsIDB4ZjlkNGZmOTYsIDB4MTBmZDVlNTUsIDB4N2VjOTM3NmEsIDB4MjA1ODU3M2MsIDB4ZjcwY2JjMTYsCi0JMHhmZGJhNjY5YSwgMHgxN2ZjMDI1ZiwgMHgxMjY5N2M5OCwgMHgyNDZmYTdmMiwgMHg2NTJlNDdjNiwgMHhiMzI0N2ZlYiwKLQkweDE4YWFkMmVhLCAweGM3OGFhOWY2LCAweDc4MmQwYWRmLCAweGNkZGMxN2JlLCAweDc2NjczZGY2LCAweDNiZmFkNjQ0LAotCTB4ZWU0YzVkZTMsIDB4YzRlODFkYzQsIDB4MGVjOGZlNzgsIDB4YWUxMWVmMDEsIDB4M2RlMThlMTcsIDB4NzhkN2Y1YmIsCi0JMHgyOWNmZDgwOCwgMHgxNzIwNmYxNCwgMHgwNTY0MGJkNywgMHhkZDk1NjNiYywgMHg5NzhlZjMzYSwgMHgzNmQ5N2YwMCwKLQkweDVhMmE3N2Q0LCAweDBlMTU4OTI3LCAweDc3ZDMzZjVjLCAweDcwOGQ1NWVjLCAweDc3M2M5OGNlLCAweDMzZDAyNjU0LAotCTB4MWJkY2Y3NWQsIDB4ODNjYmJiZTAsIDB4MTgzYWE1ZTMsIDB4MGYyY2E0MWQsIDB4MGQxZTJmYTYsIDB4ZjFkYzE3ZTMsCi0JMHgxOGRiZjAxMiwgMHg0ZDNmZGUxYiwgMHgyNjcyYjBhNiwgMHhmNDA2YmE2MCwgMHhiMTkyMTQ5NywgMHhjYTc3ZTQxZiwKLQkweGY4MjY0Zjc0LCAweGIxNzYxZjVhLCAweGM0OWEwNjcxLCAweGNmNDEzM2I5LCAweDg0Zjk2NGNhLCAweDQ2ZGYwNTdiLAotCTB4Yjg3NWFlMjQsIDB4YzkzMzY0ZmUsIDB4NzdjMmY5ODcsIDB4NjAyZDEzZDAsIDB4ODg3OTYzY2YsIDB4NTU0YTc5ZTEsCi0JMHgzYzlmOGMwNiwgMHg0YTg5YTU5YywgMHg1ZTgyZTMxOCwgMHhjZWRlZjE1MSwgMHhiODk2NzNlMiwgMHgyNWUzY2EwOSwKLQkweDRlNGE0ZDVmLCAweGU5NWZlZGEwLCAweDk1MmQ4NmEyLCAweDUxMGNhZjUzLCAweDAzYjBlMWY1LCAweDYyMzIxMGY0LAotCTB4ZjVjZmFiMTQsIDB4MmMxOTI1ZTEsIDB4NGQzMTNkZWUsIDB4YmQ1ODU3ZDUsIDB4OTcxN2Q5MWUsIDB4NzVmM2YyMDUsCi0JMHhlNjdmMTdhNiwgMHg5YzQxYzVmMCwgMHhlYzRhMTVkYSwgMHgxYzQ5ZGJiOCwgMHgzNjczODE0ZiwgMHhmZmY4ZDIxMiwKLQkweGMwYmViMzAzLCAweDczODExYzdiLCAweGVjZDIxMjJlLCAweDliMmVmMDA3LCAweGJjYjM3ZTM2LCAweDE3YmUwMGY4LAotCTB4MzAzYTQxNWMsIDB4NDVhMmI4MGUsIDB4ODU3YTZmMWYsIDB4MmFiOGY2MmQsIDB4OTljZTA3OWQsIDB4NDJlZDEwNDgsCi0JMHhjMDI3MWYwYSwgMHhjZTBhYjIyNywgMHgwNTdiODI3MSwgMHhjZTA2YWZmNCwgMHgxOWE4MjQyOSwgMHg0MTJlNzAzZiwKLQkweDY3OWRlZjlmLCAweGFkMTNmNjEyLCAweGRhZjVmNDQ3LCAweDI0N2FjNGJlLCAweGUzMDVkM2I3LCAweDcxM2JiYjc0LAotCTB4OTM5YzA4YmYsIDB4YWZiYTlkYjAsIDB4NDE0Yzg0ZjQsIDB4ZGQ2ZmVhOTksIDB4YzNkZTU2MWUsIDB4ZWI1NWEzZGYsCi0JMHhjZjc1ZmRhYiwgMHg5NzdkZjg1MiwgMHg1NWRiZjYwOCwgMHg4NTExMDU0ZCwgMHg5ZmVkYTNjYiwgMHhiY2IzOWZhMCwKLQkweDQ1YzIzZjdkLCAweDdjMjg4N2E1LCAweDgxYTgyNGVjLCAweDQ3NGQ1MjRmLCAweGZiNzk0NGQ4LCAweDU4NGQwZmU3LAotCTB4NGE1MmZhM2QsIDB4MWYzODA3NWEsIDB4ZjZhZTI3MDcsIDB4YTJlNWE0NGQsIDB4ZjZkN2M3NDksIDB4NDczZTVlZWMsCi0JMHg0OWIwZjJmMSwgMHgyYmM4ZmVlNCwgMHhhODlkNGY1NywgMHhiZGZhZjNjOSwgMHhiZTNmODNlZCwgMHg0N2IzY2ExYSwKLQkweDFlY2JmNmIzLCAweGNiMGZlYWJhLCAweGEyNWNhOGE1LCAweDcwMmI0OGViLCAweDQzMTZmMjZhLCAweDYzZjM0MWRlLAotCTB4YTFiNzc5MzQsIDB4OWU1MGQxM2MsIDB4NjEwZmM4NjIsIDB4ZTE5Y2JiZjUsIDB4Yzg0YmQxMzQsIDB4NWNhNjg3ZGEsCi0JMHgwM2RmYzEyZCwgMHg4MWNmMGQ0YSwgMHhjNTZiZmI5YiwgMHhlZmUxYWJiYywgMHhiMzY0NTYyYiwgMHhkOTU4MTdiZiwKLQkweDM4NTk3ODJlLCAweDY1NWY4MzEzLCAweGE3NmNmOWVmLCAweGMwMzQ2MGIyLCAweDkwNjVlM2ExLCAweDgyNmRlNTAzLAotCTB4NDc3MGY0MWIsIDB4ZTYzMGI2Y2IsIDB4ZDM0NzlkYTEsIDB4N2JkZDg1YWUsIDB4ODYzOTZmMmEsIDB4N2ZlZGZhZWQsCi0JMHhmOGY5MDk5NCwgMHg2M2VmNTFmZSwgMHgxNWM1ZjNiZCwgMHg3OGZhZTk5MSwgMHgxOWUyZmVmMywgMHgyNmZlMDg4ZiwKLQkweDNiZThiOGQ3LCAweGRlZGI1ZGJkLCAweDM3YmRmZThjLCAweDUzYmE0NzJhLCAweDhlNTEwNzdkLCAweDA2N2ZlZTFhLAotCTB4Mjg4ZTNlNjAsIDB4YmM3MGE4OWYsIDB4N2M1OWQ0N2YsIDB4MzFkZGYwYjcsIDB4ZGI2MDQ3ZWQsIDB4NjRmOTJmYjcsCi0JMHg3ZjkxZTgxOSwgMHgwZTMxMzhhZCwgMHhmYjc4MmFmNCwgMHhkZjhkZjYxMCwgMHg2MTRiYTEwYSwgMHhmODk0N2ExZiwKLQkweDZmNzE4NTJmLCAweDNmNzhiOGFmLCAweDU0N2Q5MTNjLCAweGRlMGM3Y2VlLCAweDg3Y2ZmZGI1LCAweDdmMGQ1ZWU2LAotCTB4YjNhOGVlZWYsIDB4YTlmYzI4NzMsIDB4NTJhZTIzOWUsIDB4ODFkMWM3YzQsIDB4NDI5MmY4OWQsIDB4Y2IxOTVjNjYsCi0JMHg2YTFjZWQwZiwgMHg1ZGI3ZjlhMiwgMHhlMmZlNTllYiwgMHgyZjIwYzdjZSwgMHhlZDYzMmRjNCwgMHgxNTBlNzRjNywKLQkweDJjMzI2MGRkLCAweDcyNmRmYzQ3LCAweDNmZjdlNmM3LCAweGNlYTMzOTcyLCAweGJlZTFlZWVmLCAweGE0MmUwMDk3LAotCTB4NzAzN2VkOWMsIDB4ZTU0MmQwYmQsIDB4ZDNkMjljZTksIDB4Nzg1MTM3NWIsIDB4MWQ4NWY5Y2MsIDB4YWVhNmRjZTUsCi0JMHhmYTY1YWYxYiwgMHhlMjAwYjA3MCwgMHhiYzM5OTI4ZCwgMHhiOTQ0M2Y3MSwgMHg5MGRlYTEyZSwgMHg0MjYwN2IwYSwKLQkweGI0Y2U5ZjE0LCAweDE3ZWUwZjBlLCAweDAzNmQ1NTk3LCAweGNlNzkyMDdkLCAweDFhMmZkYzY4LCAweGI4YWNiZTljLAotCTB4NDM3NGQxNzEsIDB4ZTJiMzRiMjIsIDB4OGJhZTRjZGMsIDB4OTYxZmJjMjYsIDB4ZjUxMzhmN2MsIDB4NzdmMTVmYTUsCi0JMHgyMWRmMjlhZSwgMHg1ZTM4Mzg3ZCwgMHhiYjMxNzNkZSwgMHhmMzE3M2RlYywgMHg0ZTc0MWMyYiwgMHgxMWRlN2VjMywKLQkweDIyMmRlYjdjLCAweDA1NjgyNGE0LCAweDUwZDg5NmJjLCAweDkxYjViOTBmLCAweGQ3MmExNWNhLCAweGViYmNmOGViLAotCTB4ZmU4YTVkZDYsIDB4NWZjMTViODIsIDB4ZmJiZTFhM2IsIDB4NDc0NjEzNTIsIDB4MGNiYWZjZjUsIDB4ZWQ0NDc3OWEsCi0JMHhiZTk5YmFiMCwgMHhkYTdiZWQ1NCwgMHg1Y2FjOGQ3NSwgMHhlOTc1NWI5NSwgMHg1ZmJhYmRhYywgMHg3MWIwZDcyNSwKLQkweGU5NzU3ZjkyLCAweDVkODc1ODQ2LCAweDhiZjVlNzYyLCAweGI4ZGM4ZDY2LCAweDFiZmZmNzBjLCAweDFmYzBlMmIyLAotCTB4ODJhNWYzZTIsIDB4Yzk2MWZjZGQsIDB4OWZlODEzMzAsIDB4ODYxYTdlMmEsIDB4ZDE3MmJlZmIsIDB4NzNmMjlmZjIsCi0JMHhiZDRmMTUxNiwgMHg1YjFjNjVmNiwgMHhlYTkxMDJmNywgMHgzZmJkNzQwZiwgMHhmZDcxZmI3MiwgMHhjYjE4OWY1NCwKLQkweDNlOTliMzBlLCAweDRjZDc0NTkxLCAweDUyMjVmMDM0LCAweGZlZjgzOGU3LCAweDY5NGUwODNmLCAweDE0N2ZlZWIwLAotCTB4YmM3NzdmNGUsIDB4ZjczZWY0ZjQsIDB4YmU2MTMyNWUsIDB4ZTg0ZjRiMTUsIDB4Yjg3MGJkZWYsIDB4Y2IwODU2ZmYsCi0JMHhmNzlhZDljOSwgMHhiMDc3ZTg0OCwgMHhmYTc2YmYzMywgMHhjZTY5YzdjNywgMHg1M2RjZTdlNywgMHhiYWE3N2E4MSwKLQkweDc3Y2ZmYjFlLCAweDY0ZGZjM2U1LCAweDUxYTdmMjM0LCAweDhlZmEzYzJmLCAweDNmZjgyZDY1LCAweDI4MmQyYThlLAotCTB4NGI1ZThmOGYsIDB4NTFjNWZlZjAsIDB4YWE5NDFlZmUsIDB4YTJmY2U2ZDcsIDB4ZDNiMDE1ZWMsIDB4NDg4OWM1MzYsCi0JMHhiZTA5ZjcxZiwgMHg3ZGM3ODA1NCwgMHhmZWUwMWU5NCwgMHhhMjhmMWFiNiwgMHhmMTc1YzdlZSwgMHg0MDg1ZjVhMSwKLQkweGM2OGYzNzBmLCAweDg4MWVlZjczLCAweDRiN2E4NDhjLCAweDJlYjhkZjk5LCAweGYwZWQxM2JlLCAweDM3MWVmMWJhLAotCTB4MDdkMDA5OWQsIDB4NWIzMjMxZTIsIDB4NWQ0ZmZmNDEsIDB4YmFiM2EzMDYsIDB4M2VmMGNiOTIsIDB4MjA5N2E1MDUsCi0JMHhlOGNkOWZiNiwgMHg0MTI2NmVhZSwgMHg3NjZlYTFiYiwgMHg5NTliZDIwYSwgMHg5ZjMwYWM4NCwgMHhhOTI3ZThmZSwKLQkweDEwYTNjNTg2LCAweDdiNTYzN2M5LCAweDYzOGMxZDZlLCAweDc2N2IxMTdlLCAweDQxMzc4ZWU3LCAweDQ1NmI1ZDhmLAotCTB4ODk1MDE2M2QsIDB4YzliNTFkZTcsIDB4MDc0YTVmMzgsIDB4YWE1NzQ4YzUsIDB4ZDQ5YmY2N2QsIDB4MGY2OGZkZDAsCi0JMHg1ZmVlZDE3YSwgMHhjM2NkZjRlZCwgMHhlZWQyZmZmOSwgMHg1ODM3Zjk4MSwgMHgyNjRiMWFjOSwgMHgwNTY0MzU5OCwKLQkweDFmM2U0OWNhLCAweGM2MDhmYjUyLCAweDdhZTVjYzJmLCAweDY3YzU3YmUxLCAweGZjN2ZhMDlkLCAweGZmNTA0ZTNjLAotCTB4ZWMwZmE1MmUsIDB4OTU4NGY5ZjAsIDB4N2VkN2JmY2YsIDB4ZjlhOWVjMGMsIDB4NjI3N2IyZjcsIDB4M2U2OTlhYzksCi0JMHg5ZDA1ZjlmZCwgMHhiOWY4MTI2YiwgMHhjNDdkNGZmOSwgMHg4N2UzNzQwOSwgMHhmZmU4MmU3NiwgMHhmZjcwOWNiZiwKLQkweGJiMmY3ZmM2LCAweGI0ODI0YWNmLCAweGZiNjhhOGZkLCAweGMxZGY4MWZiLCAweGY5YjIyZTVmLCAweDI3YmI2YTkzLAotCTB4ZjdhMGZiZDYsIDB4NDRiZjcxYzcsIDB4ZWQzZTIzZWQsIDB4YzYzOGVhNzgsIDB4ZjhiZGE5N2UsIDB4YzI4YmMwMDAsCi0JMHg4Y2Y3MGMzZCwgMHg3ZjY0YmYyMiwgMHhkZjM4YzA5NywgMHhhMGYyMjU0NCwgMHhhOWNmOTY5NSwgMHhlZmUxZTMxNiwKLQkweDNhOTdmYjg4LCAweDdjZWFiZDcxLCAweGFlNDcyNmU3LCAweGExODQ3ZjQ0LCAweGNhZjZlM2ZmLCAweGFiNjdmMDFjLAotCTB4NTdiOTBmZjYsIDB4NWMyMWVmNjMsIDB4ODQ1ZTY4OTQsIDB4YjQxMWY4N2IsIDB4ZTc3Y2ZhYTMsIDB4ZWVkMWIxZjYsCi0JMHhiMzViZTQyNCwgMHhkYzZmNWViNiwgMHhjYzMwNDdiZSwgMHg0Nzk1ZDM5ZiwgMHg3ZTZmMDA5MCwgMHgyOGFmMWU3ZSwKLQkweDVlZjgzOTkxLCAweDJhZGU2MTk0LCAweGJhNzM3NzNjLCAweDA4YzJlOTUzLCAweGMwZmRkZGVmLCAweDFjZTk1MTNiLAotCTB4OTdmYWZkMGEsIDB4YzY0ZTExOWEsIDB4ZjRmZGQ1ZmUsIDB4MWZlNTJiMTEsIDB4ODJmNTc3NGEsIDB4N2Y1YWY0ODAsCi0JMHhjN2Y3MWRiNywgMHg0OWU0NmIxZSwgMHhlZmI4ZDdiYywgMHg3Nzc3YzQ2YSwgMHg0MTAzY2Q4OSwgMHhiNTUyOGY1YSwKLQkweGY2MzNjZjFkLCAweDllOGNmM2IxLCAweDgxMjM5ZDkxLCAweDlhZTliYTlmLCAweGRkM2YxNDdkLCAweDQxOGQ4YWFmLAotCTB4ZDUwNDlkNDEsIDB4MzcxNTVlOGYsIDB4ZWY3N2ZkMDIsIDB4YjNmNTg2YmUsIDB4ODlkZWNlY2MsIDB4YmRjMzA4MDYsCi0JMHhhYWRmZTBjNCwgMHg4MWYzOWZjMSwgMHgwMDJmYmQ4OSwgMHg2YjQ1OGY3ZiwgMHhkMWJkYzM3NywgMHhiY2E4Y2NlMiwKLQkweDE4MDI4MWU4LCAweDU3M2Q0ZGJmLCAweDM4ZTA5N2YyLCAweDNkZjBkYWI3LCAweGUwOTM0YTgxLCAweGIyYWJiZDAzLAotCTB4NjdiYzMyZjQsIDB4ZDFkZmY4NDAsIDB4YTU2OGU1NTEsIDB4OTlhM2RhODksIDB4MzRhZmJlNTEsIDB4MzE3MjNmYmQsCi0JMHg0OTEyOTNmMywgMHhmNWEzNDdlMywgMHhiMDNiMDQ1ZSwgMHgwM2I2YjJkYywgMHg0OWJiNTFlZiwgMHg2ODQzZWZmNCwKLQkweDZiOTVhNWZjLCAweGYzMDM3Y2NmLCAweGY4MzU2Y2FmLCAweDgzZmUwYzExLCAweGE1M2QyZDUyLCAweGY1MDRlOTQ3LAotCTB4NTMxZjkwN2UsIDB4Nzc1YmRlMDksIDB4YmYzZGJjZjIsIDB4MDE4ZWZkMDMsIDB4ZjAzMGNlN2UsIDB4ZDZkNzdiMDAsCi0JMHhjMDQyZGQ5OSwgMHhjOTM4MWFhZiwgMHhlZDA5OTZmNCwgMHgwZWMxMDc4ZCwgMHgxOGVmY2Y4ZiwgMHg3MDBkY2IwYSwKLQkweDllZjE5ZjNmLCAweDc1ZjZmOGM5LCAweGFhOTVkODIyLCAweDZiYjFhM2JlLCAweDhjNjFiZDJmLCAweDRkZjc2NTM2LAotCTB4ZjE4NjRlYzEsIDB4ZjAxM2UxM2EsIDB4YzlmNmM0OGQsIDB4Zjc0ODAzZmYsIDB4ODAwMDIzYWQsIDB4MDAwMDgwMDAsCi0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGM1ZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZjBiNSwgMHg5OTkyYmNjZSwKLQkweDkyNjRjY2U0LCAweDA5MjdkZTRjLCAweDI3MDEwMDg0LCAweGQ0NTAwNDIxLCAweGU2YTJiYzIxLCAweGEyZDEwMWRhLAotCTB4M2MyNDM4YjUsIDB4YTA5OTIxMTIsIDB4ZjdhZDhiOTUsIDB4MjQ4NDQwMzIsIDB4MTExYTA4MDQsIDB4YTI4NGUwMjgsCi0JMHgxN2VkYWY2MiwgMHgwNGMwNjIyYywgMHgxNmM0NTQwNywgMHg2YjVlYzVmYiwgMHg0NmY3ZjZkNSwgMHg0ODVjYTAwOCwKLQkweDZjNWNiMDQ2LCAweGFkN2JmY2I1LCAweDY3MzI0ZmJkLCAweGRlOTUyODkyLCAweDFlOWY3Y2RlLCAweGVjZmJkOWY2LAotCTB4YWY2YjVhYzcsIDB4YTViM2RlZjcsIDB4OTBkNzRiMzIsIDB4NDRiNDQ4NDksIDB4Yzg0ODU0ODgsIDB4YmIxMWE2YzIsCi0JMHhmZTg0MDk1NywgMHg1YjY2NzNiOSwgMHg4NjJhNzkwOSwgMHg4M2M5ZTAzYywgMHgzM2M4YWJiMiwgMHg3MjU5OTA4NiwKLQkweDllM2M4YzcxLCAweGIxNzIyMzkwLCAweGY3ODc4ZTU5LCAweGRhMWU5MTgxLCAweDA4ZTNmODhlLCAweDU1Yzg0NDk5LAotCTB4ZTA3NWJiZjgsIDB4MjQyMDM2OTMsIDB4NjI1ZGJmYmUsIDB4OGQ3ZTRkNzYsIDB4MGU3NmU4NjUsIDB4ODNhN2ZkMDMsCi0JMHhkOGI2ZDA5MCwgMHg4Zjk4NmVjMCwgMHhkMTc5NjAyNCwgMHgwZDJkZjQ2ZiwgMHg2MTNhM2YzOCwgMHg3Njg3ZGYzYSwKLQkweGZlNjAwNjY2LCAweDQwYzlhNDE1LCAweDRhNTkwOWIyLCAweGQyMjIwNjAyLCAweDhmZTIyNjc2LCAweGRhNGZhMDI5LAotCTB4MTczZTk2MmMsIDB4MjUxMjM1NmYsIDB4NTVkZmUwOTcsIDB4NDA2NTVmZmEsIDB4NmNjZDI2NWIsIDB4ZTBhNTRiNWUsCi0JMHg5MDg2MjExMSwgMHhmYjEzYTQyNSwgMHhkYjU3YjI1OSwgMHgxMjM0ZTk2ZSwgMHgyYWZhZDJiNCwgMHhjMzQ2MDkxMywKLQkweDVmNWI1NWIzLCAweDBmMzg0MjRkLCAweGEzNTVkYjVmLCAweDQ0ZDI3ZmE2LCAweDM2ZGI4NTA4LCAweDNiNjYyMTMzLAotCTB4Zjk5ZGM5Y2MsIDB4ZTg3ZjlkMzgsIDB4Yjc2YmJkNmQsIDB4Njg2OWM4NDIsIDB4ODcwZmQ0OTIsIDB4MzhlMmQ4OGUsCi0JMHhhODk0NzM4MCwgMHg1Njg2NzVjMywgMHhkMzc2MDc0NSwgMHg0OGViNzY3NSwgMHhiNzBhM2VjNSwgMHhjMGYyMzY0ZCwKLQkweDU5ZWNmYTZjLCAweDBkODczOGE5LCAweDlkOGM3MDQzLCAweDNjMjA2NjNkLCAweDJiOTkwZTFiLCAweDZlN2YxNDAyLAotCTB4NTU3MDg3NTksIDB4ZDU4OTVmZGYsIDB4NDBjYmI5NjMsIDB4N2Q2OTVhMmEsIDB4NWZkYTZhZDEsIDB4ZjU3ZDdmNWUsCi0JMHg3YzJmMTYzZCwgMHg3MDE2NTMzNywgMHhiYmU3ODBkZSwgMHgwZDY0Y2YwMCwgMHgzZGVkMDc3ZSwgMHg3MWE4ZmM3NCwKLQkweDc3N2VhOWVjLCAweGNkZmI1ZjY3LCAweGZlMTRkZjBjLCAweDk1MmRmZjMwLCAweDI3ODAyZDUxLCAweDA0OTNiOTIyLAotCTB4MDQ3NTk0MDcsIDB4NjNjZjJlZTksIDB4MGZlZmQyZjAsIDB4ZmQ3ZTc0MDUsIDB4NTg0OWY0MGQsIDB4MzFhZDdmN2IsCi0JMHg5N2I2MmNmMCwgMHhlNWEwYWRlNywgMHhiOWU2OWY0MywgMHg0ODljMjgxYSwgMHhkMDNlN2JhZSwgMHg1MTczZDJjMSwKLQkweGYxYzFkMDBhLCAweGZmNWYzZjczLCAweGYxN2Y1YTViLCAweGE0NjI4MzUzLCAweDM2ODAwYmY1LCAweDA5MGYxZTI4LAotCTB4ZTc2ODRhZGUsIDB4M2M4YTM3YmYsIDB4MzUyZGRmNGIsIDB4YmI4YzM3MTAsIDB4ODA4OGMwZjQsIDB4ODA3YmY2OWYsCi0JMHhiMGZlYjE5NiwgMHgxYTU5YzcxNSwgMHg5MGI2ZGRlMywgMHhhNWY0YjNmNiwgMHg0MGE1MTc3OCwgMHhmMDNlYWFmMiwKLQkweGRmNTA3M2MyLCAweDRiM2Q3NjYxLCAweGM1MWE1ZGZiLCAweGExZTk3MWU4LCAweGJlN2VmYzE0LCAweGYwMTRiYmQ5LAotCTB4ZmMwYzZjOTMsIDB4N2JlOTJmYzcsIDB4ZjVkMTlhZjIsIDB4MjQ1YzdkMmMsIDB4ZmYzMDQ1YzEsIDB4MDE2NmFkOGIsCi0JMHg3NTg0OWRkYSwgMHhhZDI3ZDJjNSwgMHhlZDVkNjAxMywgMHhiZmI2M2M3NCwgMHhlZmQyMTY5MiwgMHhiMjI3ZDU0ZSwKLQkweDlkMzg3MTc1LCAweGU5MWEzMGRhLCAweDhkOWU4Yjc5LCAweDYwMjgzZmU3LCAweGNmN2E5M2ZiLCAweDNlNWEyNDhjLAotCTB4NmJiZTcyZjksIDB4ZjVlYWFkMTUsIDB4NGEwNjgyMTgsIDB4NGI0ZGJlN2YsIDB4ODRiMTkwNGUsIDB4NWQ5NGViOTQsCi0JMHgzODcyMjcwMCwgMHhlMmFiZTcxYSwgMHg3MTcxYjdjMywgMHgxZWZiZDQyOSwgMHgxMjRlZWM3YywgMHhmNGZlZjQzMywKLQkweDMxMDkxOWI1LCAweDBmNmJkM2Y1LCAweGZkMDNhNTA5LCAweDZhYzhhZjZmLCAweDdiNzFkMjBkLCAweDQ0YmE0N2RhLAotCTB4ZTQ1Mjc1YWMsIDB4NTk5MGZhNTMsIDB4ODMzZDZlZGIsIDB4OGY0M2E4NmIsIDB4ZmI1YWY0ZmIsIDB4YjQ0YWY1ODcsCi0JMHg1YmZjMWYxZiwgMHhmMGRkMjc4NCwgMHhiYzAxN2VlYSwgMHhjMWM1OTc4NywgMHg3NDdmMTRjYSwgMHg4OTQzYmViZCwKLQkweDdhYzhhZjA4LCAweDBiYmJkNWIzLCAweDEzZjU1M2Y4LCAweDBhZjFmM2ZmLCAweGY5MDg2Zjg0LCAweGM3OGE2OTE5LAotCTB4MWRlNzQ2N2QsIDB4YmJlZmQxMzQsIDB4NWY3MTU5YjcsIDB4YjRhNjNjNjUsIDB4Zjc3ZTAxNzUsIDB4YjY5ZDcwZGIsCi0JMHgwYWQxNmU2OSwgMHg1ODk5MWRlNSwgMHgzMTQ1NzFiZSwgMHg4NmM3MTUzOSwgMHhhZjk0MDkyNSwgMHhhNGZmYTQ0YywKLQkweDQ5MTIyZWZkLCAweGRmMDBhOWFkLCAweGVkYTM2Y2U3LCAweDg2OWNiY2NmLCAweDI0NjQ1Y2Y4LCAweGNmYmEyNjc1LAotCTB4ZWJjMzIzNDksIDB4YTdjYTE2OTksIDB4OGRjYTdjMjgsIDB4Yzk2N2M4NWQsIDB4ZTgwNDA4N2YsIDB4ODVhYmI2ODUsCi0JMHgyMGU5NGI3NiwgMHhlMTAzMDU0OSwgMHgwMzRiN2MwNiwgMHgzOTU4NDBiNywgMHhiNWFiY2U4YiwgMHhmZjc0MjQ0NSwKLQkweGZhYTdjYTEwLCAweGNmZDU5ZmQ2LCAweDY5M2Y4MGM3LCAweDMzN2YyN2JlLCAweDU3ZThlMTZhLCAweDYzZWUyZGY5LAotCTB4NTljNGE4YmEsIDB4NTFmOWZhNjMsIDB4MThlN2FjNDcsIDB4MTJjM2YzZTMsIDB4NDQ2NzdlMDEsIDB4ZjI5OTcyZWYsCi0JMHg4ZmM0YzViNywgMHgwNDkyYjFmYywgMHg0NzhlYTlmMSwgMHhiYmUzMmRmOSwgMHhlMTc3YzYyNiwgMHhmYzBkNzUxOSwKLQkweDhhZDI0MWY3LCAweDM4MGFiMzdjLCAweGY3N2M2MGQyLCAweGM3NzdjYTMxLCAweDA5NzdjZDBlLCAweGI4MDdjOWE5LAotCTB4YjhiN2VlZmEsIDB4ZjgwM2NlMDAsIDB4MmFlZmU3MmYsIDB4OGMwZDEzMWUsIDB4NThmOGRmMGYsIDB4ZmQ3OTI0NDAsCi0JMHhlYWRkNzg3MCwgMHhjZmEwZTczZSwgMHgwNmUyNDJlOCwgMHhjMGZiZTdmZSwgMHg4MDZlNTI2NCwgMHg1MTY0ODdiMiwKLQkweDRlYjBlY2Y4LCAweGFkMDI3ZWY5LCAweDBkYzQ0OWY3LCAweDkzYmEzMzdjLCAweGZiZTg1YmI4LCAweDg3ZTI2NjlkLAotCTB4MjgyNmE2ZmUsIDB4YzBkMzhmZDgsIDB4NzkyZjQyZTgsIDB4MmZhZDNlNDgsIDB4ZWEwY2VlMmEsIDB4MTNjNDlmNjAsCi0JMHhiNWJkZjgxOSwgMHhkM2JmZjU5MywgMHg4MDJiYmY0YSwgMHhhZWZjMDRlZiwgMHhhOTEzN2JlZiwgMHhiZWZiMGE4ZCwKLQkweGU5MTk5MGY4LCAweDZiNDFmMmU4LCAweGQwZjI4OGMwLCAweGZkYTM2MTliLCAweDQ4ZDFmYzI1LCAweDg3M2RiZDYwLAotCTB4N2JlN2M4YWMsIDB4MmI2ZTY0ZjQsIDB4NDkxMGVmNmQsIDB4NzNlMjJiNGQsIDB4ZDgyN2Y2MmQsIDB4MjdlOWYxMzIsCi0JMHg2ODA0MjljNSwgMHgwNTNkYjg1NywgMHhhYjIxMzJiNiwgMHg2NTU3NWY5MSwgMHhmMjgzZGU3NiwgMHg4MTUxOWY3NiwKLQkweGQ2ZDk3YzdkLCAweDc0Y2ExY2I1LCAweGU1YTdlMjNjLCAweGRiMDU2NTJmLCAweGNkNGZmNmY5LCAweGVmN2QwOWZmLAotCTB4MGM1YzU4ZjMsIDB4YTA3Y2RlYmEsIDB4YTNmOGEzMTcsIDB4NmYxNDRjN2IsIDB4NDJjN2M0MzMsIDB4NTY3OWQyOGYsCi0JMHhlMDY0NTlhNSwgMHhmZTMyZDNjNywgMHhiNGJkZmVmNCwgMHgzZDdlZDlmYywgMHg5ZmRlMDIzMSwgMHg2NDk3M2E5ZCwKLQkweDJhMjdjZDBkLCAweDVkOTNmYTAzLCAweDY0YmFmNDYxLCAweGQ1NWNiNmFmLCAweGRhZmIyZGFhLCAweDliNTRlNWI0LAotCTB4MWEyNjcxZDUsIDB4MmFlYmE2ZjcsIDB4YjFhMzI3YTUsIDB4M2ExNmQzZTYsIDB4NDZhYmUzNWYsIDB4OTY3ZjliZTQsCi0JMHhlMDM2OTliZCwgMHgzMWQwYmEwYiwgMHhlMzMxYTM4MCwgMHhlMDJmNThmYywgMHgwMTczZmRiOSwgMHgxYjRhNDY5ZSwKLQkweGJlMGM3OTlkLCAweDliMmVhZmIwLCAweDc5Yzg2N2U3LCAweGZlOTdjZjQzLCAweDQ3MDg3NDk5LCAweDkzYzE4OWI3LAotCTB4OWIxZjA3ZjEsIDB4ZWU1N2RkMTIsIDB4ZjVkMDhlY2YsIDB4MjUxZDlhMmYsIDB4ZWUzN2M2YWYsIDB4YTA0NWYxZDIsCi0JMHg4OTFjZTBhZiwgMHg5ZjZkZWI2ZiwgMHg1ZGIxNjMwOSwgMHg1OTg5ZjIyNSwgMHg1NzlkMWRiNCwgMHhiN2M2NTZjNSwKLQkweDE4Y2U5Mjk3LCAweDU0ZDUwZmQ4LCAweDE0NTEzMWFmLCAweDc4NjM2YzNlLCAweDJhMWI1MjU4LCAweDM2N2ZkMjBhLAotCTB4YzI0NjRiZGIsIDB4MjVhZmE1M2MsIDB4MWQ3ZmUwMGYsIDB4ODdhNjFiZjQsIDB4YjFkMzY2ZGQsIDB4NzJjZDdiZjYsCi0JMHgzNjhlMDZiNywgMHg5NmQ3ZDk0ZCwgMHhlZDg3NzcyNCwgMHhmZjdjMjU5NywgMHg2MDkwNDUxMywgMHg3YWY5NGIzZCwKLQkweDZmNzgyZjdlLCAweDk5NTVmODAzLCAweGU4NTMwY2JhLCAweGZkN2ViN2Y4LCAweGM1ZWZjYTA1LCAweDc1YzZjYTJiLAotCTB4ZGJkNzBiOGYsIDB4MTc1N2M4OGMsIDB4ZjdjNWVhM2YsIDB4Mzk5YjZmYWYsIDB4Y2RiN2Q3MWYsIDB4Y2ZkYzAwYWMsCi0JMHg5ZTkwMTRlYywgMHgwMjVhYTcxNywgMHg1YmNmZmEyNiwgMHg1YjlmNGM2ZCwgMHg4NDEzYmY0YywgMHg4NDhjNzA4MSwKLQkweDMzMWRkOWRiLCAweDY3NDc0MDlkLCAweGRmY2YxYjA5LCAweDU5ZTRlNGNhLCAweDliMmJjMjk5LCAweGNlZmU4MWI1LAotCTB4ZWJiZTMxYjYsIDB4MzNmMzNhZGIsIDB4Nzc4YjRmZTAsIDB4Njc5MDJlOGEsIDB4MWFlYWMzYTQsIDB4N2QzY2EwNGUsCi0JMHhmNDBiNDJlNCwgMHgwYTZlMjk3NywgMHg2YmJjZGY2ZCwgMHg3YmUyMmNiYSwgMHhmZDgwMTNkMSwgMHg2ZjNiYjkyMywKLQkweDVkYTVlZmE1LCAweDc4ZGY1MDEzLCAweGNkOTFhNzYzLCAweDBlN2E2NmQzLCAweGQ3ZWI3MWQ2LCAweDkyYzdlYTIyLAotCTB4MmY0MTc4OGUsIDB4NDdiODM2NmIsIDB4NzY1NTdlYzIsIDB4ZjAwMzNiM2MsIDB4YjI1Njc2NzIsIDB4NDJmZmRiMGUsCi0JMHhjM2MwMzIyMCwgMHhkZTAxMjJiNiwgMHgwZjI0MTYyZiwgMHhhZDhhY2ZlYywgMHg3MmUxYTU5NSwgMHgxMTEzNmNkOSwKLQkweDFlMzI1MzVmLCAweGUwYjJlODRiLCAweGU0MDdiYTdlLCAweGJhNGVkNTU0LCAweGQ5ZmM2MDdmLCAweGFmN2ZiZDFmLAotCTB4M2QzZjdjMjMsIDB4NjE3NDQ0NWMsIDB4YmZjNzc2NzIsIDB4NWZjMTNkMjAsIDB4MzRmODA4YjAsIDB4ZWVmNWM1ODMsCi0JMHhiYWI0NjMyYiwgMHg4MDcyNmEyZiwgMHg1ZDVlMmU1ZiwgMHhhMjBmMjM5MywgMHg4YmVkZjdiZiwgMHg4ZTFmNzQxZCwKLQkweDRkODM2NDI2LCAweGIwNzU1NzIwLCAweGZkMWFlZDMxLCAweGRmYmQyODc2LCAweDAzNzNhYjkyLCAweGUyMmU0ZGRjLAotCTB4MTMzZTk2N2UsIDB4YTBiZjU0OGQsIDB4YTAyNWYwN2MsIDB4MWE3ODc4OGYsIDB4OTdkMjNlMTAsIDB4ODc3ZGVkMGYsCi0JMHhjZDkyNmJhZSwgMHhjN2EwNTNmYiwgMHgwN2NlZTIwYywgMHhiOTIxMmJiYywgMHgwMDViYWE5OCwgMHhjODBmZDQ2MiwKLQkweGI3ZDMyMzBlLCAweDZkZWZhNjI0LCAweDgxY2YyNzg5LCAweGZiOGVhMGJlLCAweDFlMmZlODRiLCAweDFiMWVjMmY5LAotCTB4YzNlN2I3ZWQsIDB4NWMwMThlYWYsIDB4OGZjZmQzYWIsIDB4YmJlY2Y5MDUsIDB4YTE0MTg1ZjIsIDB4MGJiNGI1ZWIsCi0JMHgyZTJkYWZjOCwgMHhmMTdhMDEwZiwgMHgwYjIyY2ZiNSwgMHhhY2Y5ZmFmMiwgMHg0MGU0YzVjZiwgMHg2YWZlYmFlNCwKLQkweGNmYjY3YTYzLCAweDRlN2VjMjExLCAweDZkZmVkOWRiLCAweGRjZmEzMWI2LCAweDAwMmEyMmJlLCAweDIzYmI3NWZjLAotCTB4ZmY0OTg2NjAsIDB4N2M5NGZiYmQsIDB4YzUzOGE1NDUsIDB4ZTE4OWE1NzMsIDB4NTdlN2I0ZDksIDB4M2JlODExNmUsCi0JMHhhMWMzYzgyMCwgMHhkMWZkYjBhYywgMHgyMDJmMzE1YiwgMHhkYjNlNzFkMiwgMHhmMmM3ZWQ5MywgMHg5MTJlMjlmZSwKLQkweGZjZjY1OWQ2LCAweGUwMGIyZWFjLCAweDQxNzdhNmQ0LCAweDJiYWI4YjdiLCAweGQ5ZjdkNjA2LCAweGIwMzE1MzllLAotCTB4MjIzZDhhYmUsIDB4ZjAyMmJiYWUsIDB4YmNjMmMyNzksIDB4YmFmMGJlN2UsIDB4YzAwZGZkZTAsIDB4NGIwNDM4OGIsCi0JMHg2Y2Y4N2YzOCwgMHgwNTg0YTVjZiwgMHg5ODM5NTQxNiwgMHgxYzFjMmM3YywgMHgyOWU0NDcyZSwgMHg1YmI3ODA5ZCwKLQkweDM5Nzg2MTZmLCAweDAwNjMwYmY3LCAweDMzMzlkZWY4LCAweGZjNjE1Zjk1LCAweGM5OTU5Y2Y2LCAweDI2MzY5M2IzLAotCTB4NGQ2OTA5MWYsIDB4NTdkMzc5MDcsIDB4MDc1NzNmYmUsIDB4NjY0OGZmZTMsIDB4NWExODc3ZWIsIDB4ZmUzZjYxZDMsCi0JMHhlN2VkYTBiNywgMHgwOTFkM2FjMSwgMHg1OTVlZGU1MCwgMHhmOTQzNDE0NywgMHg1ZTE3YjlkMSwgMHhmZjdlMDc0OSwKLQkweGE0YWZiM2Q5LCAweDJmY2Q4NTk3LCAweDc5ZjUzYmYyLCAweDlhZWRjNmRlLCAweDI2ZGRhN2E2LCAweDUxMTk1ZTNhLAotCTB4YzJhNjBiYzcsIDB4ZTMyZTY1NzgsIDB4NDg1ZmMwMjcsIDB4ZGY3Nzc0ZGQsIDB4Y2Y2MmM5YmUsIDB4YWI2NGY2ZjAsCi0JMHhhZjYwZjkxYiwgMHgxZDAwYThjYiwgMHg1NmY1ZGZhYSwgMHg4MDRkYjk0NCwgMHhmZTQyNjIxNywgMHgwNjJlZDY1NywKLQkweGRiOWZkMDhkLCAweGZhMDFjYzNkLCAweDQ0N2RmYWI2LCAweDQ2MzhhZWZmLCAweDgwOWI0MjRmLCAweDVlNzQ2OTc2LAotCTB4NzdmMWY5MDgsIDB4MmQ0ZWY3ZTYsIDB4N2Y5ZTI5M2UsIDB4MzJhZTc4MDEsIDB4MTBhNThlODUsIDB4YzAwMzBmYTQsCi0JMHg5MTZkNTBjZCwgMHhhYzI1M2U0MCwgMHg3YTE1ZjQ2MSwgMHhiZmZhODc0NCwgMHgwMTY5ZDkyMSwgMHg0ZTZiNzY3ZSwKLQkweDZlOGVhZDU0LCAweGNjNTQ0NzQ0LCAweGE3ZjU0MjU4LCAweDZjNWNlNGI0LCAweDc0NjYyZmVmLCAweDgxMjA0ZmVmLAotCTB4NTkwYzAyMzUsIDB4OTZiZjIwMjMsIDB4M2E5YzVlOTksIDB4YjQwZGM4OTEsIDB4ZDMzYjNkZjgsIDB4YjVjNDljNTcsCi0JMHhiYzQ2Y2M1NSwgMHg1MDdmZTAwYiwgMHgwNWNhYTFlMSwgMHg4ZmUwMWZhMCwgMHhkMjEzMDRlNywgMHhhMDJlZDA4ZiwKLQkweDVhZWEyODllLCAweDQzYmY0MWU3LCAweDVkOWU1M2QxLCAweDNkMTk1M2I1LCAweDQ5ZmY5NWY1LCAweGU3NjQ1NGY0LAotCTB4OWU4MDNiZjQsIDB4OTNkMjBhYmMsIDB4M2QzODM0ZDMsIDB4YmJmOTAyMjksIDB4MDdiZjEzZGEsIDB4MGU0NGFjZWMsCi0JMHhlZjljNGRhZiwgMHgzMTMxMWU4NCwgMHgxOTA1MGFiZiwgMHhmNzk0YjdhYywgMHgwNGIyNmE1NywgMHgyZTFmOTA0NSwKLQkweDMwYWVmOWZkLCAweGQ1MDc2MjdiLCAweDQ5NGVjMTZmLCAweDNlOWU3ZDAyLCAweDU3Y2NkNjUzLCAweGIzYTQ2ZjEwLAotCTB4ZThkYWVjMGIsIDB4OGY5NDI2MDksIDB4OTk5ZDc1ZWIsIDB4OGUyNGFmYTAsIDB4NzQwN2Q5YWEsIDB4YWYyZjM4OTEsCi0JMHg2N2RhMGQ2MCwgMHgwNzkwMzZhOSwgMHhiZmQxNWIyMCwgMHhkM2Q4YTJiMCwgMHgyZmE2MTcxZCwgMHgyZmE4MDg3NCwKLQkweGM2ZWEzZjU0LCAweDk5ZGI1M2Y3LCAweDY2MWJlMDdlLCAweGQ3ZDc3ZDQwLCAweGNmMDFmODI2LCAweDAwNDMxZWQ1LAotCTB4ODE3YWEwZjQsIDB4MWJmYzAxZjksIDB4ZWZkODBhY2MsIDB4MTU2NTM2Y2QsIDB4YmZmMzRmZDAsIDB4NWQzZjJlMjksCi0JMHhmOTgwNmY0NywgMHhkNzQ5N2ExMywgMHhiZDAwOWZhZSwgMHgzZWQwNTg1NSwgMHhiNjA1YjY2ZiwgMHg3Nzc2ODIyZCwKLQkweDAzYmI2MWU3LCAweGY4ZDkxMzdmLCAweGRmOGUwOWMzLCAweDdhOGFkZjljLCAweDBhNmRmMzdhLCAweGZjNzAwM2YzLAotCTB4Mjc3MmNmMzUsIDB4YTgxZjQwZDksIDB4ZTZlN2VlZDMsIDB4OWQ5Mjc3MTYsIDB4NTJiNWVmYmUsIDB4Y2FmMWQwYzAsCi0JMHg4Nzg4Y2QxYSwgMHg5OWMxOTE2NCwgMHhmYzk4OWFjNCwgMHg0YzE3YzgxOSwgMHg4OTg0ZjcwMCwgMHg0ZjRkMzExYywKLQkweGI3ZDNiZWEzLCAweDgwYTcyOWNmLCAweDZmYWYzMjcyLCAweGQwZTNhNGNlLCAweDNjZjM1ODc5LCAweDlmNzlhMDk5LAotCTB4M2M3ZTVhNmEsIDB4MDI0ZmQyOGEsIDB4YzQ2ZTg3ZjgsIDB4ZWJkMDdlMjYsIDB4NTY0YzYxYTMsIDB4NGY3MGMzNzYsCi0JMHg5MjQ0ZThlOSwgMHg4NmNlZjZhMSwgMHhjYWMzOTM2OSwgMHhmN2ZmN2RiYywgMHg2OWY2ZWZmZiwgMHhmYjc3MjhhOSwKLQkweDU0ZGE2MWVhLCAweGI3NjVhYjFlLCAweDlkNmJjZTk5LCAweGEyNWViZmI1LCAweDRkYTlhZWZhLCAweGQ3ZmJkZjYwLAotCTB4OGE5ZDNlZGYsIDB4MWQ0MTVlZTgsIDB4Mzc3YWNlZmYsIDB4NDRjY2E5ZjgsIDB4ZmNmODVlMzMsIDB4ZjVmZTg4YTQsCi0JMHhhMjhiN2ZiNCwgMHgwMjU2NWZiNiwgMHhhMDU1M2RmZCwgMHg3M2FlZGY5NiwgMHhkMjZkZjlkMywgMHg5MDQzZmI2YiwKLQkweGEwYTFlZmYyLCAweDRmOGJlNzhlLCAweGRjOWM2ODZhLCAweDNkNTAxN2FmLCAweGRmMWY2MDIxLCAweGZiYWMxZmFmLAotCTB4MDZlOWI0YTgsIDB4N2NiNDU2M2EsIDB4NTc3MjAwYzksIDB4ODczZWYzOTUsIDB4ZTQ0N2ZhODAsIDB4ZWY4OTdkN2UsCi0JMHg1N2NjZWZkNywgMHhiYTNkNTE4NywgMHhiZjQ3YTM0OCwgMHhkYWJlNDc2NCwgMHgyNGI2MDMzNSwgMHg2ZjkwM2ZiNSwKLQkweDEwZjMxZWZiLCAweDNlYThlN2QwLCAweGZhOGVjMDcyLCAweDQ3MzNmOWM4LCAweGVjY2Y3ZDY4LCAweDUxNGIxY2JmLAotCTB4NzliMmRkYTAsIDB4YWVmYWY3YTAsIDB4YmViNzQ4NDgsIDB4YTA0MDYyYmQsIDB4ZmJlMjZiNzQsIDB4YzBmMWNhODUsCi0JMHg5ZTlmYTE3MCwgMHg5ZDM5OTQxZSwgMHgwNzQ0ZmNkYSwgMHg4YzIxZGY3NCwgMHhkNTdkMjNmNywgMHg3MTRkZGZhNCwKLQkweDNlZTcxMjk5LCAweGI3ZWY4ZjYyLCAweGZkZDcyMzFiLCAweDBmZDk5ZDkxLCAweDZkZTJkY2JlLCAweDFlZmZkMDM5LAotCTB4ZDA5ZTgwODEsIDB4NjEzMjdiOTAsIDB4OWY0ZGRhMDEsIDB4ZmIwYzJjMjQsIDB4MjllZGIyYWUsIDB4NWVlNTY3ODQsCi0JMHhmYzcwYTBmZCwgMHgxYzIyMmVjOCwgMHhlY2JlMGZhYiwgMHgyZTcxYmUwNiwgMHhhODRmMjAyMCwgMHgzN2Y1MDI5MCwKLQkweDg1NDU3MmQyLCAweDUyNDEzNDBlLCAweDJmN2Y5ODE4LCAweDM1Y2M4ZmFjLCAweDdkNzRlMTkwLCAweDQwOWJkMDQxLAotCTB4OTc3YmRhOGYsIDB4Mzc1ODQ2ZmYsIDB4YWZhMDRmZmQsIDB4YTExNjdiYjYsIDB4ZDczZWRkM2MsIDB4MzA5OTIxNjQsCi0JMHgwODY1YjJjZiwgMHgwZGNhMzkwNywgMHgyZGM4Njg3MCwgMHhhYTcxODI0ZSwgMHg0NTkwY2Q2NywgMHgxYzdhYTdhOCwKLQkweDdhM2Y1N2Q0LCAweGQzMGM0MDVmLCAweGY0ZGExYjAzLCAweDE0ZTdhMDI1LCAweDU3ZWU3ZDUxLCAweGY2NjlkZTc0LAotCTB4NzQ1YzRiZGIsIDB4ZmI4OGE3MWYsIDB4ZTVhNjFmZjIsIDB4ZjFmMDQzMmQsIDB4NmU0YzFjNDcsIDB4ZmYxZTBhZDQsCi0JMHg1ZmQxMGFmNywgMHg2ZmZkYzI0NywgMHg2ZjRjNmQxOSwgMHg2ODM3NjhiYywgMHhlZDE3YWZmYywgMHhkOTM3N2UxMiwKLQkweGM4MTUzOWRmLCAweDE1ZDRiMGU3LCAweDhmYjRmYTBkLCAweGZiMDczZmI4LCAweGNhMmM3ODk5LCAweGM2Mjc4OGIzLAotCTB4MTUyYjFjOGYsIDB4MWM5OTJiZjQsIDB4ODA2ZmViNWQsIDB4ZGExMmM5ZmEsIDB4N2FlYTQ0MmYsIDB4YTllZGM2MTIsCi0JMHgwODFhYjg3NywgMHg3ZTUwMDdkZiwgMHg5ZWVkMGYzNCwgMHhhYmRlNzFmOSwgMHg1YzQ1NDc0MCwgMHgzODM5ZWQ0ZiwKLQkweGFmMmNiZjMzLCAweDdmYWFlZjVmLCAweDBkNTgxYWQ2LCAweDNjYWFkNGZjLCAweGY0ZmMwMjUxLCAweDI0ZjkwOTRiLAotCTB4YTczYTg1MzEsIDB4ZmYyYTdlZDIsIDB4MWI3ZWM3NmEsIDB4NzE1MWJkYTIsIDB4ZTZmNWZlNzQsIDB4ODFkMDNkNDAsCi0JMHg3NmM0NDViZiwgMHgyMGE2ZDk4ZSwgMHg3M2Q5ZjNmNCwgMHgyZmQwMTZkNiwgMHgwMjI2OGVmNSwgMHgxNWNkNGM3NCwKLQkweDFjOTg4N2Y0LCAweGYyZDBhMjFlLCAweDQ5N2NmZjU0LCAweGExMTE3OTAwLCAweGJmMDU0Y2NmLCAweDBlMmJkYTExLAotCTB4ZjMxNjJiZjQsIDB4NTI5YzMxZmQsIDB4NmUxMzE5YzEsIDB4NzFhYmRhODUsIDB4ZjFjZGZhZmQsIDB4ZjA0OGU2YWYsCi0JMHg3NDdiZDU1MiwgMHg5ZGU3ZTYyNiwgMHhjMDhhMzczNiwgMHhlODZkNjRmOCwgMHhjYWZjMGU5OCwgMHg3YTAyNGU4ZSwKLQkweDgwYWI1NTcwLCAweGJlZTU1NGUzLCAweDY1YmIwMDY0LCAweGRmZGIyYjQ5LCAweDUwNjc2ZTNlLCAweDVlODNhNWY4LAotCTB4Y2QxNzFkOTEsIDB4NDY1YWNiZjUsIDB4NThmM2E0ZWYsIDB4NDVmOWMwMGEsIDB4Njg0MjRmODYsIDB4YmRiODZiM2IsCi0JMHhkNWQ5OGFiMiwgMHhmNzAzM2ZiYywgMHhiZjcxNTc4NywgMHg1ODg0OTUxMSwgMHhkNTRlMzYzZiwgMHg2N2YzNTYzMywKLQkweDcxZjI3YjEzLCAweDZlOWQwOGI3LCAweDJmOTllMDExLCAweGVhYjZmYzY4LCAweGUzMWM3YTczLCAweDQzNDdiMTNiLAotCTB4ODZmZjYwMzMsIDB4ZmY4MTdkMjgsIDB4NmIzMDliNjgsIDB4N2Q3NDliZDksIDB4NzI4ZmM2ZGIsIDB4YTRlNjBhODEsCi0JMHhjMDE2MjRlNCwgMHgxNDhhNGE3YiwgMHg5ZjZkODVlZSwgMHgyMWJhMDBjZiwgMHg2YmY3MDQyNSwgMHhiMTE0ZGI3NSwKLQkweDQwMGRjNzhhLCAweGFlOGM0ODVmLCAweGM0ZmE4MTY5LCAweDNlNTE3MjA3LCAweGZjMWYxZjgzLCAweGI4NzA3N2ZmLAotCTB4ZmY5ODU5MjYsIDB4OWZkYWI5Y2UsIDB4OGMxZTUwZjksIDB4MjZmNjU5ZWYsIDB4MGEyNjNmOGMsIDB4MTQ4OTE1ZTMsCi0JMHgzZTNiNTYzNywgMHhlNTdmYzBlYiwgMHg0MDQ3ZjkyNCwgMHg5NTRiM2FmZSwgMHgxYThmOTgwMiwgMHg4OWQ3OGEzNywKLQkweDQzY2FjYzBmLCAweGJiNjU4ZTNlLCAweGE2ZWY3MDRiLCAweDZjZTNiYmNmLCAweGRmNmEyZWI4LCAweGUxN2NjMDk1LAotCTB4MGRkYjgwN2QsIDB4NGUyNzQ3NjAsIDB4NzE4N2M5YWQsIDB4Y2YwNDRlMjEsIDB4ODRhMGE0OWUsIDB4Y2YyYTY4ZmUsCi0JMHg2ZDNhMDU5ZiwgMHhhZjAwY2EzMywgMHgzZWI3YjZkMiwgMHg2YTViNzkwMCwgMHhlODIyYWQyMiwgMHg0YjdhMTEzZiwKLQkweGYzNWRjYzU2LCAweDJmN2I2ZTgwLCAweDM4ZjVkOTljLCAweDAzZWVlYmNjLCAweDQ3ZTIyZjJlLCAweDdhZGM4ZmFiLAotCTB4Y2ZjYmQzMGIsIDB4ODBhZDFiM2QsIDB4ZjM5YmI5MWUsIDB4YjIzZmFhNmQsIDB4OTgyZmMxMzgsIDB4NDdhOTE5MWQsCi0JMHhiNWE3MTIzZSwgMHhmZmNhZmE0YiwgMHhjZDkyM2Q3MCwgMHhmN2U3NGZjZiwgMHhmNzdmMTg2YywgMHhiN2FmYmI3MSwKLQkweGM4MGM2MmUyLCAweGY0N2Q1NWFmLCAweDUxN2ZlNTQ2LCAweGI2NTI5ZWJmLCAweGQ4MTNmYTI3LCAweDQ1NzY3ZDY3LAotCTB4YjUyMjNlODQsIDB4ODQwNTM4YjAsIDB4ZGFlZjkwZDksIDB4ZTJmZTNjMGMsIDB4ZmYwN2NlNzYsIDB4ZjkwNzJkODcsCi0JMHhhMmU3ZjFjZiwgMHgxNzM3NDBmZCwgMHg5N2E4Y2Q1YiwgMHgxMDQzMzY0OSwgMHhiMmZiNTVlNiwgMHg4MDEzYTAzMSwKLQkweDc1Nzg3MjBmLCAweDgxOGFiOGYwLCAweDM5ZWM2YmM3LCAweDA3MTQyODBhLCAweGZiZTQxZTBjLCAweDJjZjQ5N2ZlLAotCTB4NzgxMzEyYWUsIDB4NWU1YTM5ZTEsIDB4Yzc4OTM4N2EsIDB4ZWZmNjA4NWQsIDB4ZjA4ZDE4M2YsIDB4YzRhNTFhNWUsCi0JMHg3ZjRiZmY0MiwgMHg5ZTIwNDcxZCwgMHgwM2M3NGJkMiwgMHg3YjM3Y2YzYywgMHg0ZDc4MGE3ZiwgMHhjOWZlYjIzNiwKLQkweGM1ODU0NjZiLCAweDM2Mzk4Mjc5LCAweDAwOTY4NzBhLCAweGU1NGVmZmQzLCAweGJhMDY4MmVhLCAweDE3ZDAxNmVlLAotCTB4MzU0NmRmYTAsIDB4ZDlkNmMyZmUsIDB4YzU4NTIxYmIsIDB4MDExOTQwMGYsIDB4ZmI5ZWFjYmIsIDB4Y2FiOGQ1ZTksCi0JMHgyYjg3ZTY2MSwgMHg1MzkzZjFlNywgMHgwMzNkMTdiMywgMHhhMTVhYjRhMSwgMHhiNGVjMDRhNiwgMHhkMDUzMGRjYiwKLQkweDg5ZmNiZDZmLCAweGFmMmNmODU5LCAweDE3ZGJmYWQzLCAweGFmN2MxYTkxLCAweDNmNTUyN2M2LCAweDE5NzExOTc3LAotCTB4ZWZkY2ZlOTgsIDB4N2Q1MWQ0M2YsIDB4OGE5M2E5NDYsIDB4MTI2NjdlNDEsIDB4MDNjODM1NzksIDB4MzdiMTRmYzUsCi0JMHhlOTZiM2U4MSwgMHg4MTc4OTQxMywgMHg5M2I2OTk0MiwgMHg4MDUxMWRlYSwgMHgzYWI1NzVlZiwgMHg1YWZlNWI5NCwKLQkweGE5ZGExYjlkLCAweDFjNTZmMmY0LCAweDU3ZmQyM2YzLCAweDUwOTdmMzFjLCAweDFjNjAwNzUwLCAweGU3YWI1OWY1LAotCTB4ZGZkZTdlZmUsIDB4YzIwYmEyMmEsIDB4ZTdiMDI3NTMsIDB4MTkyYTU5M2EsIDB4ZmRhYjdlNGMsIDB4NGM2YmVhZDUsCi0JMHg0ZTZmNDA1MywgMHhmYjNmYTFkMywgMHgxNzNkYzFiMiwgMHgxY2Y2YzVmZCwgMHhiNWFkNTNjNCwgMHhkNTg0YWVhNiwKLQkweDZjYmE1ZWUzLCAweGZlYjA3OTBlLCAweDk2Mjk4OTY2LCAweDNmMDNiMTQ0LCAweGZhNjM4OGVkLCAweDE2ZGMyNDQ1LAotCTB4OTFjYjY5MzYsIDB4ODBjYTkwNzEsIDB4YmM0ZTVjYjYsIDB4NTliMjkyMjMsIDB4N2RmYzIwZGMsIDB4OTc2N2U3MDcsCi0JMHhiYzM5MzIxYiwgMHhiYmUwMDY1ZCwgMHhhNTU3ZmFlYSwgMHhkMmU5YjgzMiwgMHhhZDJiMzNkOCwgMHg0MWQwMmU3OCwKLQkweDMyODVmODE2LCAweGFhZmNjOWUxLCAweGZmMzgyNTc0LCAweDAyMWQ5YmFjLCAweDdjYzQ0N2QyLCAweDllOGM2ZDZiLAotCTB4MGZjY2Y1ZmMsIDB4M2ZjZWY3ZjksIDB4ZTM2N2RlNzIsIDB4NzYzZWY4MTIsIDB4NTZiZTIxM2IsIDB4NWUzMDFiMmUsCi0JMHgxMmZlYWQ3YSwgMHhkZjZiNDM5MywgMHhmMWZmOTVmNiwgMHhlN2IzMmRmNiwgMHgyZmM2NDVlYiwgMHhhOTdjOGM4OCwKLQkweDM5NmI2NjRjLCAweDBiOWViODI1LCAweGQ1MGI3YmMyLCAweGY1MWQ2MDFiLCAweDkxZjAwMTYyLCAweDcwNTk3N2E5LAotCTB4Mjk4N2Q1MWQsIDB4NTVmNWExMWYsIDB4ODNhNTc1OGYsIDB4ZWUyZWFmNWMsIDB4ODBiYzgxY2EsIDB4NmNjMmY4NDgsCi0JMHhkMTlmOTUyNSwgMHg2YTBlNjU3NiwgMHg1MGRlODA4ZiwgMHgwZDg3OGRhNywgMHhkM2JhMDM4YywgMHhlZWMxZTMxYywKLQkweDJkZWZiNTM5LCAweGNjZmI1ZjkwLCAweGJmZThiZjI4LCAweGZmNjExODhlLCAweGJlNDRjYzFmLCAweDNiYzU4OWY2LAotCTB4YmUzZWUyMWMsIDB4ZTdhZWUwYTgsIDB4NjE4ZjQxMzMsIDB4YmI1NTU0N2EsIDB4YzRmNDA1YjEsIDB4ZjhiMGRhYjIsCi0JMHg1MWFmZmMxYSwgMHg3NTIzNmYxYiwgMHg5M2JiZjQ3NiwgMHg4YWZiZWQ2NiwgMHgwZGRmMTExZCwgMHgyMTM1YmY4OCwKLQkweGJjMThiNjVlLCAweDUzYmY2MTIzLCAweGYxZjE4NDM5LCAweDAyM2E5NTBiLCAweDVkMTcyZGY4LCAweDVkNDg0MDhiLAotCTB4ZjNmNTZiMzAsIDB4YWY4NjU2MGIsIDB4ZmU1NTBlNjksIDB4Y2YwMDcyYjgsIDB4NzgwMWU1N2QsIDB4OWUwMGU1NzYsCi0JMHgxYmM0NzVjYiwgMHhlMDE1NGZkZSwgMHgyOTc3ZTI5OSwgMHg5Nzg1ZjNjNywgMHg5ZTAwZTQyNywgMHg5MDliZWZjZiwKLQkweGEyZGU3ODAzLCAweGJlYzM3MjZmLCAweDRiN2IyNTk5LCAweGQzZGQ4ZTAwLCAweDQxNWZhODNkLCAweGQxZjYxM2JjLAotCTB4N2RlM2QyYjUsIDB4ZjQ2NGYzN2QsIDB4ZjM5MGRmNzgsIDB4NWJmOGM3ZmMsIDB4OGI4ZjkyODYsIDB4OTVhMWU2ZmEsCi0JMHg5MjgzMGU4ZiwgMHhjY2EwZmMwYSwgMHgzOTQ2ZmM2NCwgMHhmYTgzN2YwOSwgMHhmNDQ2NGNmMywgMHhlYWZlMWM3ZiwKLQkweDFiY2M0NmQyLCAweDNmNTExNzY4LCAweDJjM2JmYjUxLCAweDNmNDFiMzc5LCAweGQzODFmYzNhLCAweGVlODYxN2U1LAotCTB4OGFmYzBhZGYsIDB4ZTBmY2ZmYzUsIDB4MDJlZDUxNjcsIDB4ZTQ4Y2JmNTUsIDB4ZmJlNjNmYzcsIDB4ZmRjM2IzN2EsCi0JMHhkODNiZmQ5OSwgMHhiOGZmYWFhNywgMHgwNTMxYjc4MiwgMHg3N2JkMzEyZSwgMHhmZTYyZTA4ZiwgMHgyN2Y0NTZlMywKLQkweDk3Y2M3NzU3LCAweDY5ZmM1ZmMxLCAweGFiOGZmOTgwLCAweGZmNDdjZTVmLCAweGY1ZTA2NTcxLCAweGRmYzgwYTYwLAotCTB4N2IwNjQxNzYsIDB4MjdjZjcyYTQsIDB4ZmQyYzhiMzEsIDB4NzNiNTJmNzYsIDB4ODg2ZTgwOWIsIDB4ZmE0NzFiNDksCi0JMHhhNjJhNzAzNCwgMHgzZWYzODJkYywgMHg3NjhlZjMwZCwgMHhmNzQwMGM4NCwgMHgyM2ZlZDRkNSwgMHg1MmQ1NDk3NCwKLQkweDViZjQxOGU4LCAweDE3YTgyMGVkLCAweGVkNjliNjE0LCAweGI4MDU0YTQxLCAweDAzMWVlZGVlLCAweGVkZWRkZGYyLAotCTB4NzVmODAwNDIsIDB4OTk5YmMxODIsIDB4YTQ4ZDcyMGEsIDB4ZTQwNzE4Y2EsIDB4YzM5NzZjZmIsIDB4ZThmMzAxZGQsCi0JMHgwM2JiNmI4ZiwgMHhhMzNjYjA4ZSwgMHg0OGIxNmRhZSwgMHhlMjdhNWRiZiwgMHg2ZDlmODE5NiwgMHgyNjdlNzJiMywKLQkweGYzZmI3ZjIxLCAweDIxYTA1YjBlLCAweDczZjg2ZjRjLCAweDk1MDllOTgwLCAweDQ0OTFiZTZhLCAweGQ3YzUxMjgyLAotCTB4MGZlZTM5YTIsIDB4ZWZjMGRmMDEsIDB4M2VmYzExODMsIDB4YTNjNmFjYmMsIDB4M2NmYzQwOTcsIDB4ZGUxZGVlMjIsCi0JMHgxZjhlMmZhZSwgMHhmNGQ2ZjcxNiwgMHg5NWYyNmE0MywgMHg1YmRjNmQ0MiwgMHg3NjY3ZWY1YiwgMHgyYjBmZGQzMywKLQkweDU3ZTlmYTBhLCAweGJmNGE4M2M1LCAweGVkMWZkY2Q1LCAweDE2YjkzOGFiLCAweDI2ZDdkN2U4LCAweDJmNWY2MGM4LAotCTB4NWRmYTMxNzUsIDB4ZTMyZmVkNGEsIDB4OWRmYjgxZDgsIDB4MGRmYTUyYjQsIDB4ZWQ0Mzc3ZTMsIDB4ZTQyMjhmZmYsCi0JMHg3YmZmNDdkMSwgMHgzYjUwNjhmMiwgMHhmOGRmNzRmZCwgMHhlYmFiZGY2YywgMHg3ZGY3ZmQ1NywgMHhkODE3NmNlYiwKLQkweDU3NTg4Y2JlLCAweGU5MWFkZGE0LCAweGNlZWQ1Nzc3LCAweDVmODdlNTZiLCAweGFmYzNmMDQ1LCAweGExZjg4ZmZlLAotCTB4N2UyODdlMjksIDB4ZmM2YjhkYTgsIDB4N2ZmMGZjZGQsIDB4NGNmMWJlMzksIDB4M2EzMWQzYzcsIDB4MzMyYTJhY2EsCi0JMHhkN2E2NGVmZCwgMHhlMmYxMzViOSwgMHhjZGM1YTIxOSwgMHhjYjIyYTZlMiwgMHhiYjhjODg5NywgMHhkYzc4MzMyYiwKLQkweGQ3ZTdlZDlkLCAweDVmMTExNjVmLCAweDVjM2UzYzU1LCAweDQxNzU2MWQ1LCAweDYyY2IwYWQzLCAweGM2NDZjZjhjLAotCTB4ZmIyNDFmNGYsIDB4MjI4YTAwNjYsIDB4NjE0YmE4ZTMsIDB4N2I3ZjY3MWYsIDB4OWUzZjM1M2MsIDB4NWNlOTQ3YzUsCi0JMHhhMTRmMjEzMiwgMHhkZmNiNThhOCwgMHg4YTVjYjc1ZiwgMHhiYmUxODZmMywgMHgwMjFhOGYzOCwgMHg0OWI1ZDA4MywKLQkweGQ4N2IxM2YyLCAweDk5ZTM1YmZiLCAweGNmM2FmZDNlLCAweDQ4MWE3MWU3LCAweDZjYTFlNDFkLCAweGMxYmI0NmIyLAotCTB4NThlYTcxOGUsIDB4OWM0YTUxYmUsIDB4NzhmYzRhNjcsIDB4OWUxY2VmZTAsIDB4NzQ0ZmJmMDcsIDB4ZThjZjJlMTQsCi0JMHhmODlmOTE1YiwgMHhlMDJlMmNhYiwgMHg0NzFmYWE3ZiwgMHhmNzA3N2ZlZCwgMHg5ZDJiNWU4MywgMHhkZGFmMWJkZiwKLQkweDdmZTU3ZGY3LCAweDU3MmZiZWQyLCAweGUzN2JmYmM3LCAweDZjMjk1Yjc2LCAweDIwODFmYjM0LCAweDM4ODA5ZWZkLAotCTB4YmE0MGU2NTMsIDB4YTE5ZmFhMWQsIDB4YmM3OTc3ZTgsIDB4ZWUzYzU5NjcsIDB4Y2M1OGY3M2IsIDB4ZmU0NmJkOWYsCi0JMHgzYTE4NWQxMiwgMHhiMjIyZmUwNSwgMHg3ZjgwYThkZiwgMHgyODI1ZmMxMywgMHhiODkzMWIxNywgMHgwMjJhZWViZCwKLQkweDJlYmU0MzM4LCAweDBjN2Q2YmU0LCAweGI0MzQ5Y2ZmLCAweGI3ZDhkOGZlLCAweGQ4ZmU5OWZmLCAweGU5MDdmZTU3LAotCTB4OWVjODM3OGYsIDB4ZWVjZWIwOGQsIDB4OTAxY2VlMjksIDB4NzRhY2ViNmYsIDB4YmUxNzYwZmUsIDB4NzY4Y2YyYzAsCi0JMHhlZTdkMTk5OCwgMHg5MjVkMTgxMCwgMHhlNGQ3NzExNSwgMHhhZjEzZDk3NywgMHg4NjdiOWZlNSwgMHgyZWZmZjc5YywKLQkweGE3ZmQ2Y2ZmLCAweGM0YmZjZmYxLCAweGU4NzUxZjgwLCAweDJmMmNmYzdlLCAweGNkZDNiOGI3LCAweDc3NjQ2OWUzLAotCTB4MDdkYjdmOTgsIDB4ZmJmNDY2ZjksIDB4ZWFiZTdjMjMsIDB4MmU1YzlkZmIsIDB4NDdkYzEyNWEsIDB4ZmY5YzFmODEsCi0JMHhiMTIyNjRkMCwgMHg2NDI5ZTU1NCwgMHg2M2RhYjE3YywgMHg3NTQyZjhjMSwgMHhhOTdiY2IyYiwgMHhmZjIwOGM3ZSwKLQkweDY5ZmYwNmFlLCAweDY3MTVmODFlLCAweDI2ZjdkMDExLCAweDAwMjdiY2Q5LCAweGIyM2VlYmNmLCAweGYwNThjNWY4LAotCTB4YTAyNmNmYmIsIDB4Yzg3Y2Y1ZGYsIDB4YmQ5NjdmY2EsIDB4N2JlZjUwOWQsIDB4MTllMzBiYWMsIDB4NjFjZmIzY2QsCi0JMHhkNWQxNTVkZSwgMHgwYTRiNmI0YiwgMHg0N2U4YmU3MSwgMHg0ZDQ5MTg3MCwgMHgxYWZlOWUzOCwgMHhkNTk2ZjJjZiwKLQkweDc4M2U5NWU3LCAweDdmYWZkMWJiLCAweDExZTU4MmJlLCAweDE5NmUxY2ZiLCAweDVmYWExMWZjLCAweDQ0ZTk1YTNjLAotCTB4N2VmNTUzM2YsIDB4ODkxNWI0YTYsIDB4MjdlNDNkNmMsIDB4ZDU0ZjQ4YTksIDB4ODNlNGE3ZmIsIDB4OWFiNDk0ZmYsCi0JMHgyZGNmNDFmMywgMHhlZDA1YTNmYSwgMHgyNjhmZjNiZCwgMHhmY2M0OWU2MywgMHg5ODU5ZWYzOCwgMHg3MDMwYjVhZiwKLQkweDE5YTVlODFiLCAweDc3ZDAxYzc0LCAweDJkYmJlZmNmLCAweGYyYWRlNjFmLCAweDNmZTAyZGJmLCAweDU4YjdlZGE3LAotCTB4NjI3MTdlYjUsIDB4OTVkZGY5NjIsIDB4ZmVhOGE3Y2YsIDB4YjdmNDEwZjMsIDB4NjI0M2VmODUsIDB4MzU5YTJhNjksCi0JMHhmNzU3YmVjOCwgMHhjM2E4YTI3YiwgMHg2MDdmMTNmZSwgMHhjYWI5MzhjMiwgMHg4OWU4YjYwZiwgMHhjZmRkOTRkNywKLQkweGNmMTBmZTQ3LCAweDNjMWNmYmRlLCAweDE2N2RiMTVmLCAweDY1ZTE0ZmNiLCAweGYwYWE3ZjBiLCAweGZlOThlY2RjLAotCTB4MWZjNzk4MDcsIDB4Y2JlYmE1ZTIsIDB4NGIwNTkzMGIsIDB4NzVlYjNjNzgsIDB4Nzg4N2ZiYzEsIDB4ODAzMmNmMTYsCi0JMHg4YTMxNGU3ZCwgMHgyYmU4OTY3ZSwgMHg5MmNlN2Y0YywgMHg1NjQ3NDgwZCwgMHgzZTMwZGZiYSwgMHhmNDA4ZTk0MywKLQkweGNlYTFjOWY4LCAweDlkNzRiMWE5LCAweDkzODM5YWMzLCAweGFmODdiZTAxLCAweGQyNGYxMGU4LCAweDlmMTgxM2FjLAotCTB4NzhkODE1ODksIDB4ZjU1ZDhkZDksIDB4MjJmZmMwMjMsIDB4YTAzMzc3YmYsIDB4OGI5MjY5NTIsIDB4YzkzN2Q0MjEsCi0JMHg0MDRlNDllNiwgMHgyZTRkN2E3ZiwgMHg3YmZjNTc4YywgMHhlYzkzY2IzZCwgMHg0MmJmNDY4OCwgMHhjYzUyZmE3MywKLQkweGM4ZjllYzkzLCAweDQ4OWNmZTg4LCAweGZkM2VhMGY5LCAweDQ1ZTYzNTY0LCAweDI3ZmRiNTY2LCAweGZiYWMwOWM2LAotCTB4ZDRkYzBkMDUsIDB4MGIwNGY4ZTcsIDB4M2JmOTVmOGIsIDB4Y2Q2ZTYwNjcsIDB4NTdmMjA3NjQsIDB4MTg4ZmUzYTksCi0JMHgyNWVhOTY5ZiwgMHg1NmE0M2NlMCwgMHg4MTk5ZDZlZiwgMHhlODIyYWQ3ZiwgMHgyY2RlMWNlNywgMHgxOTVmMDBlYiwKLQkweGY3YTYyZjNjLCAweDdhYzc1ZmYwLCAweGUzNTE0ZWQxLCAweGQ3OTYwMTAyLCAweDBiNWFlZmE0LCAweGFhYjQ5N2Y2LAotCTB4ZTAzZjE2ZWIsIDB4NTc0ZGJmNjMsIDB4ODVmZDA3OWQsIDB4ZDJjZmQxYWEsIDB4Y2Y4MDRkMTEsIDB4YWY2NWI0NjcsCi0JMHgzMzk2ODliZSwgMHg4MzhjNjRlYSwgMHg5MjVhMWVmNSwgMHhiYTU1N2U4MSwgMHhhYzgzZTFjZSwgMHhlNTgxM2QzMywKLQkweDE4MTMzOTIxLCAweGQxMWQ0OGJkLCAweGQyNjc5MDNhLCAweGQxODJlMjY2LCAweDMyZGQ2YjMzLCAweGNiODc3OWY4LAotCTB4MjViOWQyMTIsIDB4NzAwMjViYzEsIDB4ODA3Y2U2OGQsIDB4YjhjMjg4YWMsIDB4N2U2MjU1YTIsIDB4OGY4YWViMTEsCi0JMHg0NGU3MDE3ZSwgMHgwM2YzZjE3NiwgMHg5ZThmMGY0NywgMHg3YWJkZmU4ZCwgMHg1ZmI4MDA0OSwgMHhjOWJjYjFiNiwKLQkweDczZGEwOTM5LCAweDNlZjBmZDA3LCAweDU5YTdmOThhLCAweGU0YzlmZjFkLCAweGZhMGIxZDE3LCAweDNlOGNmNDk3LAotCTB4MGI0NzdhYTQsIDB4NTg3NzExZjgsIDB4N2I2Zjk4YmQsIDB4YzQ1MDZkNzMsIDB4ZmRkYzk5MzgsIDB4NjYxMjg5NjQsCi0JMHhmMjY1NmNjZiwgMHhiMzJmN2FhNCwgMHg5N2VkMjNiZiwgMHg1NTIzOTM2ZiwgMHhkMjM5NWEwOSwgMHhlOTI3ZmU1NywKLQkweGFlMTIyYjI3LCAweDVhMjEyZWQzLCAweDRmNTIyZTdiLCAweDA2ZGZiNDg5LCAweGZkMTFkYmU4LCAweGE4YWZhNTBkLAotCTB4ZmRjNTI3NzksIDB4ZDliZDMwZTMsIDB4N2U0M2VhYWEsIDB4YjE0ZTVlNGQsIDB4NGM0YjhkODUsIDB4ZGIyN2ZlZGEsCi0JMHhjYzhmOTY2NSwgMHhkNjEyNzRmMywgMHg5MDI0YWIyOCwgMHhkMDQ2ZmY1NywgMHgwYmU2YTcyZiwgMHg1ZTU5OGJmOSwKLQkweGY5NDc1ZjhmLCAweDk3YzQyNjVmLCAweDI4NGYzMDlhLCAweDAxMDUwNDg1LCAweDA0NWQ2NmZkLCAweDdjODQ0YmJlLAotCTB4ZTNkZGZhMjEsIDB4ZWYzODU5MDksIDB4Mjc1NWM0OWQsIDB4MDQ1NDdmMjIsIDB4ZjIxOWI3OTgsIDB4MzUyZjMwNGMsCi0JMHg4YzExNmRiMCwgMHhjNzA1Yjc3MywgMHhjOTllNDMzMSwgMHg3MDE1NDgzOCwgMHgzYTdlMDM2ZiwgMHgxMWM1ODJiNSwKLQkweDA1ZGNhOTkyLCAweGM2MWU0ZGZhLCAweDk3M2NkMGU4LCAweGY5YTg5YmU1LCAweDg3ZmU2YTI0LCAweDBlNjI4NzBhLAotCTB4OGIxMWU0ZGYsIDB4ZDVlZjgxMzIsIDB4NDAxN2RlMGIsIDB4MTgxN2E5Y2YsIDB4OTgxYmZjN2MsIDB4NDZkOWExMWYsCi0JMHg2ZTVhNjhmNSwgMHhmOTg1MWNhZSwgMHhmNTg0YmQ3ZSwgMHgyMWQwYWZlZiwgMHg4MGY5YWE1ZCwgMHg3NjE1YzNjZCwKLQkweDIyNmZlNTNlLCAweGY5Y2RlZmVhLCAweDQwNjRiZjJjLCAweDVjMDQ0YTFlLCAweDZlOTQzY2Q1LCAweGY2MDNiN2FiLAotCTB4ZTRjOGIyNmQsIDB4YTIzNzlhYTgsIDB4ZmUxODQ5ZDIsIDB4ZGUzYTY2ZmMsIDB4YmZhNjBlZjYsIDB4NzAxODU3MTcsCi0JMHhiNzk1YmQxZCwgMHhiN2IxZmZhMywgMHhjZTQwNDc1MiwgMHgxOTFiYjcxNywgMHhiNzhjNDVkZCwgMHgwNDgxYWU3ZCwKLQkweDYwMjk1ZmExLCAweDhlNzlmY2M2LCAweDVmZDM2ZmZmLCAweGMxNzM1ZTI5LCAweDY1NzQ3YmJmLCAweDBhNmViOGM5LAotCTB4N2E1NjM3ZTMsIDB4MTY2YmQ5ZjAsIDB4ZDdjODQ1NWEsIDB4MDFlNjg3MzEsIDB4Zjg5Y2RhNDcsIDB4NDlhNDNiYTMsCi0JMHg0YTEzNTc5MCwgMHhlY2M5MjgxNywgMHg1NGEwZmU3MCwgMHgzN2EwNzJhMiwgMHg5NDMxZjQzZSwgMHg5YzdjNGM1ZiwKLQkweDc2ODc4Nzk1LCAweGQxZmRiNDA5LCAweGQ4YTUxZGE3LCAweDk5MzE2ODFlLCAweDk4MjUzZjkwLCAweGViOTZmZDRiLAotCTB4NDA2NDZmOTAsIDB4YzBhN2M2YmUsIDB4ZDc0OGFhODcsIDB4MGJmNDRlZGEsIDB4Yzg1NmY5NzEsIDB4NjY5OTIxZjgsCi0JMHg5NGJmMzAwYywgMHg3N2IxZmU4MiwgMHhlZTUxMzI5MywgMHhmNmIzNzI1YiwgMHhhYTdkNDI3NywgMHhiNDY5ZmQxMSwKLQkweGRkZmRlOTFlLCAweGJkNTg1M2UxLCAweDUyNGVmMGMyLCAweDgzNmYyY2FkLCAweDlmODFmOTc0LCAweDA1Mzk5YmJkLAotCTB4YjA1NWQyZmQsIDB4ZjRmZWE4MWYsIDB4MDU3YmM1YTYsIDB4ZTg0MTdhZjAsIDB4ZTBmYjBlNWMsIDB4OWFmZmU5ZGQsCi0JMHhlMTdkZjQwNywgMHgwMTg2NGZjMCwgMHhhMDY5OTliZiwgMHhmYzIwZjk3YSwgMHhlMzI3NzFlNSwgMHg0YjdhYmQyZiwKLQkweDc5ZmI0MDlkLCAweDEyMTVlMmRjLCAweGU4ODNmOTY5LCAweDk1MjAzMzc5LCAweDE0ZGM2ZTdjLCAweDIwMGQxYzAzLAotCTB4ZTA0NDE3ZmUsIDB4N2YxY2YxNzcsIDB4NWY0YzM5YjYsIDB4MDhmMzRkYjQsIDB4YzZiOWY3OTAsIDB4ZWYxMWU2Y2MsCi0JMHhiZmE4ZGM5NSwgMHg3NzA4ZTc3OCwgMHgxMWFmZjVkMywgMHg5NDQzM2ViOCwgMHgxNDNiYjQ1OCwgMHg4ZWVjMTYyNSwKLQkweGMyMWUyYmE1LCAweGVmOTE2ZmJjLCAweDliYWQ0OWU3LCAweDdmOTdkMDQ1LCAweDRkZjhmMmI3LCAweGU1YTFiMGQyLAotCTB4ZjYxMTVkZjAsIDB4MTI1NGZhODUsIDB4OGI2NjNhZDksIDB4OGZhMDE4Y2EsIDB4NmZlMzQyYjUsIDB4M2RlMDkzNGEsCi0JMHgzMWU5YjNhMywgMHg1ZjIxMGEyYiwgMHg0ZDc0NjY3YSwgMHgyMmNkYzYyMSwgMHhmN2QyYzdkZiwgMHgyMzY1NjE3OSwKLQkweDE0ZDRiNzZiLCAweDNkMjg5NzRhLCAweDYxZGVjZDNiLCAweGYzY2I5NzAwLCAweGZiMGU1OTNmLCAweGJiZjI3OTc3LAotCTB4YzJiZTQzMWYsIDB4ZDZlMjdhYmIsIDB4ZTI0ZDNlYzMsIDB4MWYyYTQzNzEsIDB4MzJjN2JmMDEsIDB4Mjg2ZTJjNmMsCi0JMHgwMzFhOWQ2ZiwgMHhlZjg2NmNlNSwgMHhlMzAwNDhkYiwgMHhkODczYTVkNCwgMHg0ODNiYzEzOSwgMHg2ZDE3NmQ2NywKLQkweDU3YTlkMzM3LCAweGVjZThjMmJhLCAweGJlNWI0NTM2LCAweDJlNWI1NzIzLCAweGZmMTE3OWU1LCAweGJmYmVkMmUyLAotCTB4YzAyNDg0OTMsIDB4N2UyNmY3ZmYsIDB4ZmRmYzIyM2QsIDB4MWJlZWNkOGYsIDB4MGFhZmZlNjEsIDB4M2ZkMjhmMmMsCi0JMHg4N2E4Yzg4OSwgMHhlODNmMDQzYSwgMHg0OTVmYTMwNSwgMHg1OTI2ZTdlNiwgMHhiOWNmZGZiZSwgMHg0NGNhZjMxZCwKLQkweDdiMDlmNTgyLCAweDBmMjFiYjRkLCAweDhiMDdmNTVmLCAweDkzYjQ3ZWJjLCAweGM4ZWMzMjk4LCAweDg0YWU1MDhmLAotCTB4ZTgzNzllMDQsIDB4MzkwOTE4YzAsIDB4N2U2NjRjYjAsIDB4NDBkNmRhNTEsIDB4NWYzMDM5ZmIsIDB4NTgyNGI4NDEsCi0JMHhhMDE2ZTQ3NCwgMHhkMjEzNDJlYiwgMHgyOThhNTE3NSwgMHgyOGUwZTgwYSwgMHgzZjFmMjNhNywgMHg1NWQyYTM4NywKLQkweDkwM2M0NDkxLCAweDllODc0MGJmLCAweGY1NzdjZjAzLCAweGZmZjAxMWYyLCAweDc4MjMzZmZhLCAweDI5OTA4YTRlLAotCTB4ZjIzMWU2MTIsIDB4ODU1OTA4YjEsIDB4YmQzOWE3ZTUsIDB4ZWRmOTU1MWUsIDB4NmZjODQ5YmYsIDB4NzAxYWI0ZGYsCi0JMHgxNmJmODk1ZiwgMHg0MzlmODA1YiwgMHg1ZmQ2OTkxYiwgMHhmMzg1MWM2YywgMHhkZDAzZjc1MywgMHgwOTFjYzNiZCwKLQkweGZkZTY3MmU4LCAweDQ0OTgzYTRhLCAweDJhY2FjY2FlLCAweDM4Zjg2MmJkLCAweDQxMGZlNDAxLCAweDczOGQ1MjNkLAotCTB4YmVmYTk5YTUsIDB4NDk3N2MzNzMsIDB4NzRiYjlmYmMsIDB4OGE0Y2RlMmMsIDB4ZGM5ZDFjNzgsIDB4M2Y3Y2M0NjUsCi0JMHhiZmI0MmY1ZSwgMHhmN2UwMjVmNSwgMHhkYzRjYzRmMSwgMHhiNzg4N2I3NCwgMHgzNDQ2ZTgwYiwgMHg0YmEwMTRiOCwKLQkweGRhZTVjZTk1LCAweDlkMjliZjQzLCAweDc5YzllYjA0LCAweGJiNzNkNzA0LCAweGU0ZjU4NjU1LCAweDZiOWMzMjUyLAotCTB4YWUzYmE3YzcsIDB4ZjQ2MWZhMDAsIDB4ZWZiMTQ2MmUsIDB4ZmI3OTJhZWYsIDB4M2U4YzI5MjYsIDB4ZWM1NWY3ZTgsCi0JMHhmN2VkNjhmYiwgMHgzZGJkZmE0ZSwgMHhmYTE4ZmJlYywgMHhlZmMwZGU3ZCwgMHg3MjIyMDkwOSwgMHhiZmYzZTc2ZSwKLQkweGVlODllNzlkLCAweGJhODI5YWIxLCAweDkxN2ZkMGIxLCAweDEzYmY0NWQyLCAweGMzZjdkODEzLCAweGUwN2JlODYyLAotCTB4N2NkYWI5ZmIsIDB4NjVkMTMyMGMsIDB4ODhkZTNjYzIsIDB4YzI5OThiZmMsIDB4ZDc0MDQ5NjMsIDB4ZGFhYTk5YjcsCi0JMHg2ZmZmNjhiYiwgMHhkNGNjZmM3MSwgMHhmMzgwYmY3OSwgMHhjYmNkNmY2NiwgMHg1N2ZjMDM3OSwgMHhiZmJhMjYyNSwKLQkweDA1NWY2MGIyLCAweDdhZDIwMmQ3LCAweGIxOWY3OGE3LCAweGRkZmVlMzY1LCAweDJkNWZmNDAxLCAweDY5ZDg0NzdhLAotCTB4NjliZTgyZjksIDB4ZGM0Y2IyZDgsIDB4ZTMxMzNiMTcsIDB4YzU1ZmNlMDcsIDB4YTAwZWJhYmYsIDB4M2VhN2EwMDMsCi0JMHhiNzk4ODgzYSwgMHg2NzcyMmY4YSwgMHhlZGFjMjYyYiwgMHgzYzA4N2FhNCwgMHg5MDg0YmQ1NSwgMHhhYzlmOTYxYSwKLQkweDhiYWZmNWE0LCAweDUzMGNjYjEyLCAweDBiZDAzMGNkLCAweGUzZjRhYWRlLCAweDdiNjk5ZGJlLCAweDllOTdmMzEyLAotCTB4MDRiZWYyNGYsIDB4YzM3YjlkZjMsIDB4MzQxMmU5ZTcsIDB4MDExZmNlNzYsIDB4ZGYzYTIwN2UsIDB4Y2U1ZmZkNWYsCi0JMHgwNmJmZDU1NywgMHg2NjdlZTdlNCwgMHgwZWU3ZTRkMCwgMHg3MWQ0N2ZiNSwgMHg4OTU3YTA3ZCwgMHg4MmRiYzc5MCwKLQkweDM5YmViNmY5LCAweGFiOWMxNzE2LCAweDY4YmU0MWYwLCAweDUwNzljNjIxLCAweDMwMjQzYWFmLCAweDk4MmZkNTdkLAotCTB4YWQ3NDFlYjgsIDB4ZTk4NGJjNzksIDB4ZmE3ZDU1NGIsIDB4YmQwZjI2OTIsIDB4YmJjZDlmMzksIDB4ZmE4Mjk5NzksCi0JMHg2YjAyYWJkNiwgMHg5ODRmOWZlZiwgMHhkNzhiMzYzZSwgMHg1ZWIxOTQyZiwgMHg2ZTZmNTdjZCwgMHhlNmI1ZmU2MSwKLQkweGQwMjg0Nzk3LCAweDUwYTNkNTJmLCAweGFlNTg5MzFlLCAweGZlMzI2NWE3LCAweDkxNDkzY2RhLCAweDQ0ZGMwY2ZkLAotCTB4YWZjZmU4NDgsIDB4ZmE2N2EyZGUsIDB4YWI5ZDc2ZGYsIDB4MGM0MWYzMDgsIDB4ZjE2MjNmNTQsIDB4ODY5ZmM2NWIsCi0JMHhmZDIzZjFiMywgMHhhYTI3NWY3MCwgMHhjM2YzMDA3NiwgMHg0MWZmOTVmNSwgMHhiMjU5Yjg3ZSwgMHg3ZjY5Mzg5NywKLQkweGU5ZGNmMzBiLCAweDE3OTgyY2ZhLCAweGZhNTFjN2YzLCAweDIwNDlkMWRjLCAweDE4NjZhYzRkLCAweDkxYjdjZGU4LAotCTB4ZDk3NGY3OWEsIDB4NjgwNjlmNDgsIDB4YTUzNDc3M2YsIDB4N2QwZDZjY2YsIDB4OGNmMTlkMWEsIDB4MjJiY2MyMWYsCi0JMHgxZDI0NDFmOSwgMHg2NTc4YzU2NiwgMHhkNmQ5YTdlOCwgMHhkMDZhYzdmYSwgMHgyZThkZGIzNywgMHhmMmNhN2Y5NiwKLQkweDQwZjkyMmU5LCAweDQ4MTY3Y2Q4LCAweDUxMGUzZTZjLCAweDA3MzhmOWM0LCAweGVjYjVjZjliLCAweDRjZmE3MDkzLAotCTB4MGMzZjZjMjQsIDB4MjUxMjVmYjUsIDB4ZjQxNmI3ZTIsIDB4OWIxZjk3ZWYsIDB4YmQ2MDIzYmQsIDB4MmQ2NmZiN2QsCi0JMHhjYzA2MmZiMywgMHg3ZDIwYjQ1YiwgMHg4YjJmNzNkZCwgMHg5OWEyZjgzNywgMHg0M2I4ODM1YywgMHgxNjdmMWQxMiwKLQkweDdhOWVmZjFmLCAweGZjZjc4NzQ2LCAweDRiNzQ4MGQwLCAweGY5ODQxZmE3LCAweGIzZjVlNmNmLCAweGRmMzBhYmRhLAotCTB4ZmQzNGY2NjgsIDB4ZmYwZDJlYzksIDB4ZTdiYzIzNzUsIDB4MWM3Mzc2ZjIsIDB4MDJkODdhZjksIDB4NzFiNTRhNzMsCi0JMHhiM2Y3Yjk4NSwgMHhhNGRkYzZiOCwgMHhiZGYzMGY0NiwgMHg5ZmI2OGU2NywgMHg3M2YxYTRiOSwgMHg3YjlhOWZjOCwKLQkweDU0ZmRmNmJmLCAweGM5YjlkZjY3LCAweDc4OGYxMDExLCAweGJkZTFkYjgzLCAweDdlYzBiZjc0LCAweGYxN2UzMzdhLAotCTB4N2U5NDY1OGUsIDB4YWYzNGZjNDcsIDB4ZDMwM2ZjMDAsIDB4NmNmNzJhMTMsIDB4YjdlN2U1YTYsIDB4OWJmMmMyOGYsCi0JMHhkMWY4M2YwOSwgMHgyYmJmNTBiYiwgMHgyMGQzY2IwNywgMHgwOGVjMGMxOSwgMHg2ZjIwOGZkOCwgMHgzZGJkZWU4YSwKLQkweDg2ZmI4ZTkzLCAweDhjYmJmNzk5LCAweGEzM2JkYmU1LCAweDY4YjNjZGJjLCAweDJjZDhlNzNiLCAweGM2OWMxYmNjLAotCTB4NDJlZjRkZjksIDB4MGRjNzdmNTYsIDB4ZmExYTk2NTYsIDB4Yjk3ZTgyODAsIDB4NzlhMTUxNjksIDB4ZjIyN2ZmNDAsCi0JMHg3OTAwNTBmZiwgMHg3OGIyZDNhYywgMHg1MWQ1ZTBiOSwgMHhmODQzN2U1MCwgMHg0ZGQ4MWU3YywgMHgwOTE2NTUzZCwKLQkweGNjOWQ1ZmUwLCAweDczYTM5OWZjLCAweDBhNDhlMDg1LCAweGRlNzY2OTk3LCAweDU3NWIxNTdmLCAweGM5MGJjMTY5LAotCTB4MTVhNjNmYjAsIDB4YmI0NjdlYjMsIDB4NDM2N2Q0YTYsIDB4MmM0NWRkM2IsIDB4NjI5YjI0ZjcsIDB4ZmJhYTFmODAsCi0JMHhmYjkzOTk2YywgMHhlNDllYjgwNywgMHgxNWZlZmJlMSwgMHg3MWI1MjdmNywgMHg0OThmNWZiNCwgMHgzZDEyYzE3MCwKLQkweGZiNDEzZjEzLCAweDM5ZDg1ODk0LCAweDUzM2I4ZjJjLCAweDU0ZTg3ZjAyLCAweGRjNzNjYjM3LCAweDAyYWM4YWJhLAotCTB4Y2RlYjY0N2QsIDB4YWQwZDY5NmUsIDB4N2EyMjZhOWYsIDB4Y2U5NDZiOTAsIDB4OWI3YTAxMWYsIDB4ZjRmM2UxM2IsCi0JMHg4YjJlMjAxOCwgMHgzYTU1Y2U5NiwgMHhmN2QyYTU5YSwgMHhkMzFkMmQzNCwgMHhlNzEzZjlmZCwgMHhjZmU3NmZmOCwKLQkweGY3MzYzYTFhLCAweDdhNTBmMWQzLCAweDFkNTc5ZDM5LCAweGI0OWJiZmVlLCAweDljNmZhYWYyLCAweDM5MTg3ZDg4LAotCTB4MDFmYzUwZWUsIDB4NjdmOWMyZmUsIDB4NzE1YWZjZmYsIDB4YjY0MmE1YmYsIDB4YzdlYzM2NTgsIDB4NmUzZjc1MjYsCi0JMHg3NDE4ZjgwMywgMHgyNGZlNzg5ZCwgMHhjMjhkNzA0MywgMHhlODQzOWIwMywgMHhkMmZjZWExNSwgMHgzMDU5MjdjMCwKLQkweDI3ZjA1ZTcwLCAweGZiMWQ3YWE5LCAweDliMWQ4MDczLCAweDc3ZTllYmNhLCAweDlmZWY2MjZlLCAweDA1ZmYxZDE3LAotCTB4ZDk2YjdmZTQsIDB4MzUwYTc2N2MsIDB4YmQ3MDlmOGMsIDB4YWI3ZmI1NWEsIDB4NjliNmY1ZDUsIDB4YzUxNDViZDcsCi0JMHhjMTNiN2JjZSwgMHhlOTNlODE0ZiwgMHhmMzdkNTFmYywgMHhhODNjMDZiZSwgMHgzOTcxZjFlYiwgMHhiMWU0YzczZCwKLQkweGVlZGFlODFhLCAweGZkMjM5NWI2LCAweDVmZjg5ZjdjLCAweGEwZTg3ZDA2LCAweGU2MTg3YmM1LCAweGVmZTc1NDc5LAotCTB4MjE2M2ZiMDAsIDB4OTI1YzYzNzEsIDB4Y2U2YmM3ZDIsIDB4OWQ0MmZkMzAsIDB4YWE5YzI0NmYsIDB4OTE5ZmUwODcsCi0JMHg0Zjg0ODllYiwgMHg1MTNhZGUzZiwgMHg3N2NmNTM5ZiwgMHgxYWY3YWRmNSwgMHgyMWVhYTlkNywgMHgzZmQ2ODMwZSwKLQkweDFjZmVlNzY0LCAweDAwZGZmNzNiLCAweDJlM2M4MTQ1LCAweGQwMmU1MTI1LCAweDA0YmFhN2ViLCAweDg5NGEyN2Q0LAotCTB4Njk3MGY5MDksIDB4NzZkZjkzMDksIDB4NTQzN2QzMGIsIDB4ZmVkNDNmMzksIDB4ODIxNmY1YjgsIDB4Mjk3NGE5ZmMsCi0JMHhkOGM5ZTdlMSwgMHgzMGU5MjJiYSwgMHg4MjNkNzQ5MSwgMHhkOTQ5OWU3NiwgMHgzOWY2MDBiNiwgMHhmZjRhMjVlOCwKLQkweGNjMmQ0YmZjLCAweGE5YzU3YmNmLCAweGYxYWVmNWNhLCAweGNhZmJkNzIwLCAweGQ3N2FlNDAzLCAweGYzMzdlMDc4LAotCTB4YTNmYzZkNDQsIDB4MmZmMzBhZjQsIDB4N2MxMGFmZGEsIDB4MTkzZWJhOTYsIDB4NWVkZDcyMGYsIDB4ZjgxZTM1ZDIsCi0JMHhlZWIxYWRkNiwgMHgxZjlmMDEyZiwgMHgzNjFmOThlYiwgMHgyNGZhOGUxMiwgMHhiYzVmZWE5ZCwgMHhkYzhjZmEyNiwKLQkweGU5NWM2YTNmLCAweDk0ZDc4YjRkLCAweDFmZGZiZTM0LCAweDJjZTg0MTcxLCAweDM4YWU0NjgyLCAweGNkZWZmNzk5LAotCTB4ZjRhNjNhMDQsIDB4ZjI4OTcyODgsIDB4YzE1N2FiYzcsIDB4ODM3ZjgzOTgsIDB4NTMyYzcyMWMsIDB4MDkyZDliZjksCi0JMHgyZTA4ZGJmOCwgMHg4ZjhjM2RjNywgMHhkYjc1OGI5YywgMHgwZDFjNTg5MywgMHg4NzEwZjJlMSwgMHg1NzJlNzRjYiwKLQkweGQxMTBlZTJmLCAweDlkY2QzZjlmLCAweGRjYjgzNGZiLCAweDI0ZjVjNzdkLCAweDhkZDdmYjgwLCAweDVmMDk3MTcyLAotCTB4YTUzYTQ1ZDcsIDB4ZDE3ZmI0MjAsIDB4ZTJjNjdhOGEsIDB4MWUzMWNiYjcsIDB4OGVhYjYyMzEsIDB4NzI3MjYxMjgsCi0JMHg3MzRhMjA2NCwgMHhiZGU4YzQ3ZiwgMHg0Yzc5NGQ3NiwgMHhmZGE2YjI2YiwgMHg5YTU5NmQwZCwgMHgyOGUwZmNmYSwKLQkweGUzYjhmZDRkLCAweGY4ZjI5YTA1LCAweGVkMzUxYmNlLCAweGFjNTA3YzI3LCAweGJhZWE0ZjI5LCAweGE2ZmVkMzVkLAotCTB4Y2E2YjY3NGYsIDB4YWMxMjMwMTQsIDB4MDI4M2I5ZmIsIDB4N2RkNzRlZDksIDB4Y2QzZWU4NzMsIDB4N2RiZGZmZjcsCi0JMHgwYjg4NzFjNiwgMHgzM2Y2ZTI5ZSwgMHg3MzNiYmJmMSwgMHhhODE2MWMyOSwgMHg0Y2E1N2M3NCwgMHgwODUwNWZkYiwKLQkweDA3YzA0NTBhLCAweDQ2ODJkZmQ4LCAweDg1M2NkNzk2LCAweGRmYmMyZTQyLCAweDdkNWE0ZDg1LCAweDZkNTZmMTYyLAotCTB4ZjM3ZGEyYjksIDB4MDM5NWUwNWEsIDB4OGE2YTIxZjMsIDB4NjQ2Yzg4ZTEsIDB4NzkzNGM0M2UsIDB4NzVlODBlYmUsCi0JMHgyZmQ1MTI3NiwgMHg5MWM2MzA0MCwgMHgxYWM3YzgzOCwgMHgxYjdmZGY2YSwgMHhiMGM4NzNmZSwgMHg2YjNmYzM2ZiwKLQkweDdhODBkNWJmLCAweDdmYjdlMmZkLCAweGFmYTQxNDU1LCAweGZlMmQ0ZThjLCAweGZmMTY4YWNkLCAweGZjNWFiOWQxLAotCTB4ZmM1YTVkNWIsIDB4ZTJkNDRlYzcsIDB4ZTJkNmU2ZGYsIDB4OGI0NGFlM2YsIDB4MTY4Zjc4ZmYsIDB4YjU3Mzg5ZmYsCi0JMHg2YWYyNGZmOCwgMHhhMTUyOWZmMSwgMHg4ZDVhN2ZjNSwgMHgyYjE5ZGYxNiwgMHhmNGNjZjhiNCwgMHhmZmJkYTgzZiwKLQkweDJhZmYwMjI0LCAweDdiYWVjY2ZmLCAweDE0OWVlMjI4LCAweGQxODVkMTFkLCAweDBiNDc0YTgxLCAweGU3OTgxNTNjLAotCTB4YzdlOWJjMzIsIDB4ZTkyMjcxOWEsIDB4M2E4ZGRhODEsIDB4ZGE4Yjg3YmMsIDB4NmI4NWRiNzEsIDB4YmRjYTBmYTcsCi0JMHg0OTFhNWZkMCwgMHhmMTI0NGYxZiwgMHhiMTNiMTgzYywgMHhlZWY5NDU1ZiwgMHg0MGY4MTI3ZSwgMHhmMmExNWVhNCwKLQkweDFlMzk3MGFkLCAweGM1MGVmZjZlLCAweDI3YzgwNmNmLCAweDI5MGYwZjZlLCAweDM2MWVjMDlmLCAweDQzYzNkYmY3LAotCTB4OTA4N2U5ZDEsIDB4NTNmYTgzOGQsIDB4ZWU4YmZhMjMsIDB4MmUzY2Q5OTUsIDB4ZTA0OWFiYzEsIDB4ZjIyNWZkNWYsCi0JMHgwNGU5MGZiYiwgMHg3ZWY5ZDIyNywgMHhlM2ExZWIwOCwgMHgxYTM1MTg3ZiwgMHgyMDNmMThmZCwgMHg3ZmNmZDQ0MSwKLQkweDc0ODcxOTA4LCAweDcxMjAwN2IwLCAweDEzZTczZTk5LCAweDVjZTU5ZjA1LCAweDdlZTQyZjVlLCAweGRiZDlhNzBlLAotCTB4MTZhOTcwMDYsIDB4MzAwOTE5YmQsIDB4OWUyNzZhNmUsIDB4ZTIyNzIyMWYsIDB4ODU1ZWU5YWUsIDB4OTc2ZmUwOTMsCi0JMHg3ZjA2ZTkwOCwgMHg5OGY2N2QzYiwgMHg1MTljN2QxOSwgMHgyODliODdmOSwgMHg5Njc4MzA4ZSwgMHg1MTcyMTU0ZCwKLQkweDMwYTMxNTdmLCAweGZiZWNhODBmLCAweGIyYTVjYTAyLCAweGNlY2Y2MWZmLCAweDQ3MDdhNjI0LCAweDUwYWNkNzNlLAotCTB4ZjVjNGQ5ZTEsIDB4ZmMwZmE2MDAsIDB4ZTNjMjkyNzcsIDB4NDE2YmM0MzMsIDB4ZTA2NGI5YjgsIDB4ZTYzZmI0ZmIsCi0JMHhmMzE5ZmVmZiwgMHg0OTI1ZDE5MywgMHhlYzc4ZWM1NywgMHhmODBjZjEwYSwgMHhhMjQxZjM4NiwgMHg4YzczY2Q4OSwKLQkweGU4NTc0YzQ0LCAweDhiYzRkMWZiLCAweDQ5YzdkZmZhLCAweDdhZWUzODU5LCAweGQ2MzJiMjg5LCAweGI3ZTgyOGVmLAotCTB4ZWZhM2M2MGIsIDB4MDQ1YzViYTcsIDB4ZDNhMmJkZmMsIDB4YWJmZmQwNDUsIDB4YzMyYjA5OTYsIDB4ZjU1YmFjMWYsCi0JMHg3YTcyYTVlYiwgMHhjYzI1NjNkOCwgMHhlN2UxMTU3ZiwgMHgyNzI5MTE0YiwgMHgzZDE1N2M4NSwgMHg5NGVkMGYzYiwKLQkweGYwYmIzMmI2LCAweDE4Y2VhYjk4LCAweDc5MmEyZWI2LCAweGVkN2U3MDZkLCAweGM4MWNmNGRiLCAweDk2MTMzZDJmLAotCTB4NWVlMTRlMGYsIDB4M2YxYzk4MzMsIDB4YThlMmNjOWUsIDB4NmU5YTU2NmIsIDB4MGY0OTc4ODYsIDB4YmUzZDA3OGYsCi0JMHhmODBjZGM5MiwgMHhlNjE3MjUxNCwgMHg0MTdkYzE4MSwgMHgwZGVmYjBiNiwgMHhiNjFmNWEwZSwgMHg0OThiMjRkZiwKLQkweDNjNWJkNjUzLCAweGRhYzY1OTc4LCAweDE3NDgzNTk1LCAweGQxYWY3ZTdhLCAweDY0ODdkNGJhLCAweDIxN2Y5ODZmLAotCTB4NGM0ZjhmOWEsIDB4MTAyNzIyN2UsIDB4YmZkMmYyYWUsIDB4NTgxMmE3NGYsIDB4Njc0YjI4YWYsIDB4OWZlYWY2MzQsCi0JMHhkYzAxNDZhZSwgMHhhOTNkMzhhYSwgMHhlOTNhMzVmMywgMHhkZWVkNjEzOCwgMHgyNTU3ZjRlMSwgMHhmZTYwMWE3NywKLQkweDc0MWM1MGVmLCAweGVhNDEzYzQyLCAweDU2YmRlMDc0LCAweGZmYjhlOTc1LCAweDM3ZjBlNGVmLCAweDkwODIxN2VlLAotCTB4ZTA5NDZmZjcsIDB4ZDJmNDI2OGMsIDB4ZDI4ZTNjZDksIDB4ZjQ3N2RhZTksIDB4NmIyNWUyMDQsIDB4N2U0NGNmYzcsCi0JMHhiOGQ3YjA2NiwgMHgxZTRmMDVhOCwgMHhlY2ExNjc3ZSwgMHhlYTllMDQxZCwgMHgyZTk0ZThkMywgMHg2MWEzZjM4NywKLQkweDllMGVkY2M5LCAweDNlMDAyNjQwLCAweGNhMGY5OTA2LCAweGY2NjU4N2E3LCAweDU5ZTNjM2NkLCAweDNmYzNjMWJlLAotCTB4NGM3Zjk4MjQsIDB4YTJiZmQwNTYsIDB4MTNjNGY4N2UsIDB4MWIxYmYyMTcsIDB4YzZjYmUxMDksIDB4NTAwMzc0OTUsCi0JMHhhNTYxYjcxYiwgMHhhODczNzg4OSwgMHhhODM1MjIxYywgMHgzNzEwMjUxZiwgMHhmZTYzNTFkMiwgMHhmZDM5NTcwOSwKLQkweGViZjA1MmNlLCAweDM3ODdiMDVjLCAweDBkNTNmZjhjLCAweDFmNDVhZDk0LCAweDYxYjk0MDU1LCAweDkwYWQ4YmU0LAotCTB4Yjk4MTY0MmIsIDB4MjNiZjMwMzgsIDB4YTJiNjY3MDAsIDB4ZWY3Y2ZkNDYsIDB4ZWYwNzY4NmEsIDB4NDI1ZjNlMjEsCi0JMHhhY2Y5ZDNkZiwgMHg4MjFlZDMxZiwgMHgwZjYzZDFmNiwgMHg1MWY1MGE3ZCwgMHg5YjI5YTA5NiwgMHgzZjc1MTc3ZSwKLQkweDQ1YjA0OTcxLCAweGIyNTM4NTVjLCAweDQ4NTZkM2U5LCAweDhlMjhhMTdiLCAweDRmNDdkZmU2LCAweGM2NDZmZDY0LAotCTB4YmIyZDEyMDMsIDB4OTMyMTdkZDksIDB4YjE2NzhmMDksIDB4MWZhYWVjNzMsIDB4YmJiMmRlM2UsIDB4YzZmODE4YTksCi0JMHg1M2ZkNmQzMCwgMHg5NjcxMWUxYywgMHg0MTY3OGU5NywgMHhlNzYxMmE3ZCwgMHg5M2ZkNzk1NywgMHg3OTY2ZGViYywKLQkweGU1OThiM2E5LCAweGRmYmU2ODFjLCAweGI1OGZmYmNjLCAweDUwYmYxOGU4LCAweGIxYjc4ZjA4LCAweGRlYmM0ZGZhLAotCTB4MDkzYmQ2YWMsIDB4ZmFiMWE3OGYsIDB4YjQ2ZjVlN2EsIDB4YmExMmZjYjAsIDB4YWZkZjM1YWQsIDB4ZGMyN2UzZTMsCi0JMHgzMGRlMjNhZiwgMHg4OWNjNzRmYSwgMHhmYTMwZGUyMiwgMHgzNWRhOTdiMCwgMHg5ZDg1YmQ2NSwgMHgyNWE3OTUyMywKLQkweGZiNTNiZTZiLCAweDFiOGY5YzdkLCAweGYzNGIzOTMzLCAweDI4ZDg2OTlkLCAweDM0Y2VmYjZkLCAweDcxMGYyMzk0LAotCTB4MGI1MjFiMzgsIDB4ZjllYWY1MzQsIDB4YjNhNzIyNmMsIDB4Mjc2YjMyNzYsIDB4ZjRkNDZlMzksIDB4NjI1MTUxN2IsCi0JMHg5OTlmZmY2MSwgMHhjYmFkZDJhNCwgMHg5MGZiNzQwNCwgMHhlMjExMmIzNSwgMHhiOTk1ODFiNCwgMHgxZjAxNDRhMCwKLQkweDNmOTk0ZmUxLCAweDY2NzQ3ODlkLCAweGNiMDU0YWNkLCAweGI4YmZkYzk5LCAweDJjNDRlNTY2LCAweDBiNzRhNmVmLAotCTB4NzRhY2NmZjUsIDB4MmQyNzc5NjEsIDB4NTNmOWY0MmIsIDB4NTg5NTBmZGEsIDB4MDdlZDFiNjQsIDB4N2VkMzRmY2EsCi0JMHhlZDE0ZjllMCwgMHhkMjRmOWUwNywgMHgzMzdlYTBmMSwgMHg5YmNhMGVmZCwgMHhkZTUwN2Y2OCwgMHhlNThkZDJiMCwKLQkweGIwNGIyYmY1LCAweDgzZDJiZjVjLCAweGU3MmI3NWU1LCAweDk1ZjFmM2UyLCAweDU5YWU3YzVlLCAweGJiZjU4MTU5LAotCTB4M2JlYjg1OTMsIDB4MjI0ODVmN2YsIDB4OTNiYmI5ZTMsIDB4ZGRlN2Y3YzcsIDB4MTZkY2YxYWIsIDB4ZDQ3NmUwYzMsCi0JMHgzMmZmY2UwMSwgMHg4OTg4ZTc4OCwgMHhhNWM2M2ZkMSwgMHg4ZjViMWFkMiwgMHhlNzE5YmQ4MCwgMHg2YTQ4Zjg2MSwKLQkweDViN2FjMWFjLCAweGZkNDcxYjA5LCAweDI0ZmMzODhlLCAweDMzMWQ4OGI1LCAweDU5NTBmYzY0LCAweDIzMGRmOThkLAotCTB4NzMxN2NiMDksIDB4YzQ1Mjg5ZmEsIDB4OWZjMjVmY2YsIDB4YmNmZjQyMTQsIDB4YWJlNWFiOTQsIDB4NzFmOTExOTksCi0JMHg5OTIzYjNlYSwgMHhiMGUyNzlkOSwgMHhjNzJjMzcxYSwgMHg4NDEzZDEzNCwgMHhjYjhiNWU3YywgMHgzM2IxZTc4YiwKLQkweGE5Y2VkMGFlLCAweGU1N2IxY2JkLCAweDVmODBhMjE2LCAweGJmYWI1NGJmLCAweDY4MTVhN2RhLCAweDRhZjE0NGY0LAotCTB4YTUzM2I2MzUsIDB4Njc2OWE3ZGUsIDB4ZGE2OTk0NzAsIDB4NWNjOTJkOTUsIDB4YTQ3ODA0ZWIsIDB4MWIxODc1YjAsCi0JMHhiZDEwMTE1NywgMHhlMzM3OWIwYiwgMHg5OTkzNjdiOCwgMHhlYmQ3NGJiZCwgMHgzZWZiZmY0NywgMHhlYjk3YWQ4MSwKLQkweDdjY2JjZjRkLCAweGU0NDZhNmJkLCAweGFjNmMyM2FiLCAweGQ3ZWIxMzk4LCAweGZmM2MzZjAxLCAweGFmZGM1OGFiLAotCTB4NDNhMzNkY2YsIDB4MTI0OGRmZmYsIDB4NDZiZTAxZDAsIDB4ZjUwY2YxNTMsIDB4OTYxNzQ4NjMsIDB4NGFlZTAwNmYsCi0JMHgxMTQ0ZjljYiwgMHg4NDhlM2NhMSwgMHg3YWE0YmVkMCwgMHhiMzI1N2ZkMywgMHg2NjMzZDBiOCwgMHg3OWE1MGI4OCwKLQkweDIzZjk2NzlmLCAweDM5MmI5NDQxLCAweGFhMzkxZjFjLCAweDhhNTViOGZlLCAweDRlOWRhN2Y0LCAweDdiNTZmYjQ2LAotCTB4NWI4ZDQ0OWUsIDB4MjUxNmIyYWUsIDB4MzNkMTNlODIsIDB4YjQ0ZjdlNDQsIDB4MTY5YmJlZjMsIDB4Mjc0NjM4NTAsCi0JMHhmYWE3YzVjZCwgMHgxYmEyYmQ3ZSwgMHg1NWU1N2NmNCwgMHg0Y2VmYWYwZSwgMHg3N2M2MDFlNywgMHg2YWZjZThjMiwKLQkweDBiYmZhNTMyLCAweDBjODNiZjc5LCAweDJjM2Q1MjE5LCAweDFhZjBmNjg0LCAweDk0MWZjYWJkLCAweGZkMGZlMDU4LAotCTB4ZTYyYzU3NjUsIDB4MjEyN2I0NzMsIDB4YzE5OTQ0N2MsIDB4ZGU5NWI5ZTcsIDB4N2ZhOTI0OWIsIDB4Zjk5N2UyOWQsCi0JMHhlNDliZTQzMiwgMHhiZGI2N2NmMCwgMHgzNGRkOTcyYiwgMHhjNzVmZWE0ZCwgMHg1ZmI2MTRlOCwgMHhmMjJiNDk3MywKLQkweGNlODc1Y2ZiLCAweGE3MzVlY2M1LCAweDBmMzNiZWM2LCAweDc5YzM3MjZiLCAweDcxMTQ3MTVmLCAweDQ4YzQyZTQxLAotCTB4NWVlNzg0ZDIsIDB4Yzg4OWJmYzUsIDB4YjdhM2M0N2YsIDB4MTdlYTg1MTEsIDB4NDA4MDcyNTEsIDB4MmZkYTg3M2UsCi0JMHg4ZmUyNzZlMSwgMHhjMmZjYmYzOCwgMHgyZGU3MGQzMiwgMHg5NGY3YWJhNiwgMHhmOWFmNTFiOSwgMHg5MGM5NzY0MiwKLQkweGIzNDVmMmNmLCAweDRmMTIzZjFlLCAweDY1NzNlYjZhLCAweDRhNWUwN2Q3LCAweDQ3ZjY4Yjk3LCAweDUxN2E2MGJiLAotCTB4NWY3ODRkYjksIDB4MjA0YmI4OWIsIDB4ODNjZTAyYTksIDB4OTlkOWE3ZTUsIDB4NWFkZmFhN2UsIDB4ZTBlM2ZjNDQsCi0JMHgyZTM3YWVkMCwgMHhhNWRhZTAwNSwgMHhjMmE5ZDAxYywgMHg4YWFiYjY5ZSwgMHgzZjA2ZWMzMywgMHgwYjgwMDhkNCwKLQkweDJlNTg3M2MwLCAweDVmMjE3MWMyLCAweGFiOTVkZWVmLCAweDE0ZWU0ZTEwLCAweDY5MzVlNzg2LCAweDdjZjlkYzJhLAotCTB4ZjcwZGRiODgsIDB4NTY2YTJkYmIsIDB4M2FlZDViZWQsIDB4N2YxNWU3ZDcsIDB4M2I2YmVhMGYsIDB4OGJkM2NjNDUsCi0JMHg5ODg1ZTc4NCwgMHgyODYyNjNmNywgMHgzMzQ2Y2JhMiwgMHhhNzlkMGNmZiwgMHhjMTI5ZTYxYiwgMHhiZTAwZTNiYywKLQkweDU4YjNkNzA0LCAweDVjZTAwNDM2LCAweDVhZDA4ZjY2LCAweDMxYTk3MTgyLCAweDk3MWUxMjNhLCAweDUzMzM5ZjUyLAotCTB4Mjc3YWZmMTgsIDB4YjQ2N2M2NTksIDB4MGI0ZGRlNzMsIDB4ZWY5Nzg1YzYsIDB4YzMxZWJhNDcsIDB4MTIyYzRmZDcsCi0JMHhiYjcwOTNjYiwgMHg1YWJmNzA5NSwgMHhmMDY3NmE4MywgMHgzZTI4ZWEzYywgMHhhMGZiYmVkZiwgMHgyZjNjYjE0NiwKLQkweDBhZGNlOTBiLCAweGQ5NDMxNzc5LCAweDYxNGMzZjExLCAweDNiN2VmMmYxLCAweGU4MDZhMjgyLCAweGYzMDliYzY3LAotCTB4N2NkNDFhMWIsIDB4MDU1ZGU1MTQsIDB4MTNlOTZiZjMsIDB4OWM0YzUxZjIsIDB4ZDk1OWQ3NGUsIDB4ZmFlYTA0M2QsCi0JMHhiZTMwYTY1NiwgMHhhM2UzOTJiOSwgMHgyMmVjYzRkNywgMHgyN2U0ZGI4OCwgMHg2ZjlmOWQ4NCwgMHg1OGZiNDcyZiwKLQkweGI2ZjRmMzhkLCAweGQ1NTJmY2IzLCAweDQ5Yzk1MGZmLCAweDA2MGRmN2EwLCAweDIyMWRkZTg3LCAweGRiMmE3N2M2LAotCTB4MGVmNzYwZWYsIDB4Zjc4OTNjNzYsIDB4MTRiZWQyMzUsIDB4ZGU3Mjg3YTAsIDB4NmI0ZWJjYmUsIDB4ZTNkODJmMGYsCi0JMHgwY2E1MWI1OSwgMHhjMTE3YmJiNCwgMHgwM2Q5YWI3ZCwgMHgzYjQ4ZWRlZCwgMHhhZTE0YjFmYiwgMHgzZTQ4YmFiZiwKLQkweDM1NGU3MWM0LCAweGEyOGIxZjY2LCAweDEyNjQzNWYzLCAweDIyOTdiZjNjLCAweDZlZjc4NGJlLCAweDA5YjNlZDUzLAotCTB4NzkyNDNiZWUsIDB4NDg4ZmJlZWMsIDB4NmE5MmJmYmMsIDB4MTVlZjM4NDAsIDB4NWE1YjhmMDgsIDB4OGVmN2ZlOTAsCi0JMHhlZjdmZmI2NywgMHgwZTc3OGI5MSwgMHg5M2RjZmRhNywgMHg3ZWE2ZTBjMSwgMHhjYjA2NGY3NywgMHgwNjA3ZGQzMywKLQkweDRhZGY3ZDE1LCAweGY5NjBjOTQ4LCAweGRjMzhiYjNjLCAweDliOWYzM2JmLCAweDU1NzNlNWFjLCAweGEyYzc1ZDZkLAotCTB4M2I3N2U0MTUsIDB4OGY3YmRlODEsIDB4MGYyNjI1ZmQsIDB4ZWYwODQ3ZjcsIDB4ODMzZjdmMmQsIDB4MGRlNjA3Y2QsCi0JMHg3NGZiZjQ3OSwgMHhhNzBiY2Y5ZiwgMHgxMjI5N2Q4MywgMHhmYWVlYjc5ZiwgMHhkYTY5OGNmNCwgMHg3YmM4NWQ3OSwKLQkweDM2NzZlMTJmLCAweDU3OTg1NmFmLCAweDQyNjRmMDRmLCAweDNhYjQ3ZTc4LCAweDgzYzU3ZGFmLCAweGZkN2NlZjlmLAotCTB4OTEzM2U3N2EsIDB4NTA2OGE3Y2UsIDB4MjZmZDFkMzgsIDB4MGMzM2VkMzgsIDB4ZjgwZjlmM2UsIDB4MGRlM2ZlN2MsCi0JMHhjMGMwZWY3NiwgMHhkM2Q0ZWJmYSwgMHhlZmMwNDQ3NiwgMHg4MDdiY2VjNSwgMHg3ZWY5ZDM1ZCwgMHg4NDdhMDI5MCwKLQkweDYzMDEzYmIzLCAweGFkN2UxYzRjLCAweDBiM2U5Yzg1LCAweGExNzFkZjM5LCAweDFmN2M0NDRkLCAweGE0YmNjMDRkLAotCTB4ZmJkNTg5NTYsIDB4YWIwMjhiZWMsIDB4OGViYWZkMjgsIDB4NzkwMGM4MmMsIDB4ODhkMGZkNjAsIDB4ODZmOGM1ZjcsCi0JMHg0YjhiMzdjOCwgMHg5N2Q4ZWI2NSwgMHg4NzBhMGMyYywgMHhlNDdmNWUxOCwgMHhiN2Y2MTk0NCwgMHgwMTIzMDNmZSwKLQkweGY1Y2I1MDdlLCAweGFiNzJmNWY0LCAweDU1MDFlZTA5LCAweDAyZTUwOGUxLCAweDQyMTlmNGZhLCAweDJlNTA1YzhiLAotCTB4NThhNGMyZmMsIDB4Yzc0ZjE5MDYsIDB4YjExNGRiYzYsIDB4ZDRmMWQ0NmYsIDB4OTczNTI5YTcsIDB4Mzc4NWRkZjksCi0JMHhkZWEzYzg0NCwgMHhiYzNkZjkzNCwgMHhhMTUzNjdhZiwgMHgzYmY3M2M4NCwgMHg0YjU5YmZjMywgMHhlZjgyMTcyZiwKLQkweGU4YzlkYzI1LCAweDdhMGE5NGM1LCAweGU2M2E3MDk0LCAweDEzZWNiNDdiLCAweDAzY2RiZjQyLCAweGI4YmMxOWY4LAotCTB4NDY0N2RmN2UsIDB4ODQwYzIyZDIsIDB4MmY0ZTI1ZDMsIDB4ZjVkNGZhZWEsIDB4ZGViNmYzYWIsIDB4ZDZmMzAwYmMsCi0JMHhmMTMwMWYwMSwgMHg3YTlkNTQ5OCwgMHhkNWYyMWUyZiwgMHg2MGY3MmU1OCwgMHgyNjI3Mjg1ZCwgMHg3ZDBmMmM0YiwKLQkweGRkNzg4NGJjLCAweDNjNDZmMTM0LCAweGM3OGZiMDI3LCAweDBjOTM0MzliLCAweDdlNDNkZTgzLCAweGZkN2YxZjBiLAotCTB4MDRlY2ZmOTUsIDB4YWVkZmQ1ZmIsIDB4NDRkOWYzYzcsIDB4NDVkZTcyZWEsIDB4OGVmN2M4ZTksIDB4NTJiZGY3ODQsCi0JMHhmYjgxMmE3YSwgMHhiODljOGU2NywgMHhkZDdhMDMxOCwgMHg4NDdhYTk0ZCwgMHgwZmMwNGRmMywgMHgxMTVjM2U0MSwKLQkweGZmN2YzMDRiLCAweDE4YjIxN2M0LCAweDUzOTNmZjQ2LCAweDc0OTdhZTQ1LCAweGZlNWU0Mjc2LCAweDk3OTYwMmM2LAotCTB4ODA3YWUxNmMsIDB4MDU3NzQ0ZTUsIDB4ZjEzMmRmY2MsIDB4NGMyMTQ2YzcsIDB4MWFhNWU2Y2UsIDB4ODY4ZGJiZjEsCi0JMHhmNjhiODI1MCwgMHg0OTEwZWJlNywgMHgyZTgxZjUxMCwgMHhlZmFiNDdiYywgMHhlMGNjOTFkYywgMHgwNTQ4NWQ1MCwKLQkweDQ3ZGMxZTRjLCAweDlhZDdlZWNhLCAweDNlMzBhYTljLCAweDgwN2RlNzRiLCAweGY5MWE4ZmJlLCAweGY1MGU1Yzg1LAotCTB4YWNiYzc0ODUsIDB4MzJhZGVmZmUsIDB4NzhkNDY3YzMsIDB4YTZjNTlmNzYsIDB4ZTE5M2JmYzksIDB4ODE1OGFlZmUsCi0JMHhhZmI0M2RlMCwgMHg3OTM1ZWFhNCwgMHhlODY0OWZmYSwgMHg5ZDlkYmY3OCwgMHg2NWY5YmZhMCwgMHg1YjA5ZjMwOSwKLQkweDQwOTkwZjgzLCAweGM1Zjc1N2FmLCAweDg2ZGQ1NGQzLCAweGZkZjhlYjc2LCAweGU2MjZlYmFhLCAweDgwNWNlMDA2LAotCTB4NGE3ZmM3NGEsIDB4NjE1MjdhZjUsIDB4YmM1Zjc0N2QsIDB4YTc1NzdhODQsIDB4NDdjMjJhNjcsIDB4Yzk3Yzg3Y2UsCi0JMHhlZjEzYTQzMSwgMHgwNjg1MjEwZCwgMHhhZTRiZTQxOSwgMHg2ZmQ5YTc0ZSwgMHhlYTZmMWMyZCwgMHhhOGE1ZWE5MywKLQkweDY5YzIzY2VmLCAweDYyZjc5NTU5LCAweDM5ZTA4OThiLCAweDYyYjMyYmEzLCAweGQzMTUyZjQxLCAweDI1Y2YzZDU0LAotCTB4NmNmZjFjMDMsIDB4ZTFmYTgzOTksIDB4OGQyZDM3ZDksIDB4ZjU3Y2YxZTEsIDB4YjNkYTlhNzksIDB4Nzk3ZjQzNDEsCi0JMHgwMzMzY2JhMSwgMHhkZTIyMmZkYSwgMHgyZThmYTBiNSwgMHhlNzM1MTY2YSwgMHg3ZGYyY2ZhZSwgMHgxNDRhZjBiZSwKLQkweGY1ZTk4NjA5LCAweDg3ZGUyNzBiLCAweDVlMTY0N2U3LCAweGFhNDEyMTg5LCAweGU3ZTU5ZDI3LCAweDNjZjJjZTdkLAotCTB4NjU0ZjdmOWYsIDB4YWY4MWIyZjIsIDB4NzVlYTRiNjcsIDB4MDhhZWZiZWEsIDB4MGZmM2I5N2UsIDB4N2UzMTk1Y2YsCi0JMHhmNzAwZWZmOSwgMHgwMGNiYTEyYSwgMHg4ZGUzNmU3YywgMHhmZTNjYzE3ZiwgMHgwZjRlZDRkMywgMHgzYWQzN2NlNiwKLQkweDZjMzA0OGUzLCAweDU3NzZiZTljLCAweDdlOWViODRjLCAweGZmMzgyOGJjLCAweDEwNWFmNWZlLCAweGZkYTlhNzBlLAotCTB4NGM3MGNkZmYsIDB4YmZiMWMwZDEsIDB4MWMwZDJjZmYsIDB4ODM5ZmY2MDcsIDB4OTk1ZTlmZTMsIDB4OGZmZDJkZmIsCi0JMHg0NTdmYTIxZSwgMHg3ZWZlZmYzMywgMHgzZGI4ZTE4NywgMHg4ZjllY2I0NywgMHg2OGU1ZmJhNiwgMHg1N2Y2ZjU3MCwKLQkweGIwZWQ1ZjIxLCAweDI3MmZlZjExLCAweDc4YzVhZDZkLCAweDA0MTdlODllLCAweDNmMmQ5OWNmLCAweDkwYzdlNWZjLAotCTB4Yjc3Y2I2ODcsIDB4ZjQ2MzA1YzEsIDB4NWNmMzQzZWEsIDB4NjE4N2M4ODMsIDB4N2RjM2Y2NDQsIDB4NmY3M2VhM2UsCi0JMHgyN2FlMzY2YSwgMHgwYTQ5YmRmMiwgMHg2NjZmOTBjOCwgMHg1NWU0OTVjYSwgMHg5ZDY1ZTgwYSwgMHgxZmI4ZDU4MSwKLQkweDU0OWZjODRjLCAweDZmZGFiODNmLCAweDllYTg4YTZkLCAweGFkN2RjNTY3LCAweDEwZDBkYmRlLCAweDdjMDBlZGVkLAotCTB4ZTZhNTE2N2YsIDB4ODIzN2Y5MWQsIDB4NjdmMmFkMWYsIDB4ODVlZWNjYTIsIDB4YTIxZGExYjMsIDB4ZTIyNWIxZmEsCi0JMHg5MWEzYmY0NSwgMHhlNWU0MDg3OCwgMHhkZjc4NjVlNywgMHg1M2ZlZmUwMCwgMHhhZmMwMDZjYSwgMHhlM2Q5OGUyZCwKLQkweGI3MjNmZjQ1LCAweDNiOTgzNmY3LCAweDdlMzBhZTlkLCAweGU5NTRmYmY3LCAweGQ2ZmNlNGZhLCAweGZlMzMzOTA4LAotCTB4NGM4MmU3ZmQsIDB4ZTYxZWZjY2UsIDB4ZmU3NjI1NTEsIDB4ZjIxMzJjYjIsIDB4YmRmOGJiMDgsIDB4ZTMwMThhM2QsCi0JMHhmMGM3ODUwNSwgMHhkNTMyYWZiZSwgMHg4YzhiYWY1ZSwgMHg0MGQ5YTc1ZiwgMHhlZWZkNTVmZiwgMHgwNDRmOTAzMSwKLQkweDk2NDZjMjNhLCAweGNkMWU1ZGJmLCAweDg5YmZlNWNhLCAweDkwNzU3M2MzLCAweGYwMDc5ZmMyLCAweGVjNWQxNTZlLAotCTB4ZTExOTM3OWUsIDB4YTFhZjkxN2EsIDB4MWQzMWI0ZDcsIDB4ZTFjYmQ5ZTAsIDB4NzVmZGIxN2EsIDB4NjJlZTU3YmMsCi0JMHg3ZmM0NzBkZCwgMHhjMTNmNmJmOSwgMHgyNWY2YTE3YiwgMHgwZWE3N2NmMywgMHg3MjlmY2EyYiwgMHhlZTA4YWJhMywKLQkweGNjOTdkYjJkLCAweDI5NTZjY2Y0LCAweGE2MTA1MzE4LCAweDJkNGJhZTc3LCAweGJlN2FiZTQ2LCAweGY0MGViODZlLAotCTB4N2ZhZTE1NzIsIDB4YTM2MGZjZTYsIDB4NDI5M2VmZWEsIDB4MmViYmYwNDUsIDB4YmY4MzBiZTcsIDB4ZGZiN2Y5NDUsCi0JMHhhMjY3YmY4YywgMHgxMTY1ZjAzYiwgMHhkMWI3NmZkZSwgMHgxNzgyZjc4OCwgMHg2NWI5MTgxZiwgMHhjYWFmYWQyZSwKLQkweGE1OWU2MWQxLCAweGU3MTk4MGVlLCAweGRkODFhMTczLCAweDgyZGYwM2FmLCAweDkwM2FhZTljLCAweDUyYzNiZjgyLAotCTB4M2NjMjFkMWUsIDB4NTcyOGFhYTksIDB4Y2E0MWM0MGUsIDB4Zjc4NGRjMGYsIDB4MzBkYTlmN2EsIDB4ZTVmODFkMzIsCi0JMHgxZDI1NzhjOSwgMHg0MGRkMzVlZiwgMHg3ZGQ3NGU4MSwgMHg3YjA0NjNiMiwgMHhjZjAxM2Y1ZiwgMHg0NjM3NTlhZCwKLQkweDVmZjMwNzdiLCAweGYyMjQ3MmE4LCAweGM5N2Q5ZWZlLCAweDAwNmQzZGY5LCAweGQ3MjY5MTlmLCAweDJkM2U1YTZlLAotCTB4ZWI5YzU4YjgsIDB4ODJiNjY4NzgsIDB4OWUxNzE2NzEsIDB4OWNiNzJiZGYsIDB4ZGJlZjFhZmIsIDB4N2VlNGZlNmEsCi0JMHg0ODFkZWY4MiwgMHgxNjFkYWFiNywgMHg5NzM5NWUzOSwgMHhhMTBjZmIzMywgMHgzODdiZjA3OSwgMHhkYzM4NmJlNSwKLQkweGFiOWYyYzBkLCAweDgzOWY5NzVjLCAweDhkZjcwZTY1LCAweGU2NWNmNzExLCAweGFiNzgzMWE1LCAweDI0Mjc1M2NmLAotCTB4Y2E4YzJmYmMsIDB4NjdjODc0ZmYsIDB4ODhkODc1M2UsIDB4ZTM2YTc2NzQsIDB4YWFhZjNjNjgsIDB4NjE0ZTU3OGUsCi0JMHg3OTdkZDMyMiwgMHgwNThjYWVkMiwgMHg2MzRiOGViYywgMHgwZDdjYWFmYywgMHhmN2Q1MmZiMywgMHgyNWNkYmFlNSwKLQkweDg3NTBlNzgwLCAweGJkMmJmOTg4LCAweGUyMDYyODcyLCAweGI1M2I2YTFjLCAweDc2OWViN2RjLCAweDY1ZDc3ZjExLAotCTB4YzQxMWYyNWYsIDB4MDIyN2E1MzcsIDB4Y2Q3YmE0ZjQsIDB4ZjdkNWYyOGEsIDB4ZTAzNzcxOWEsIDB4ZjEyMTdjZjMsCi0JMHhmZTVjODM0NywgMHhjZTRlZmQ4MCwgMHhlYTIzMGVkMSwgMHgzMjFmYmRiZCwgMHhmZGMwNzRiYiwgMHgzYTUwOTY0OSwKLQkweDdiZTgxZmRjLCAweDU4ZjkwNTJkLCAweDE3Njg1YTZmLCAweGVjY2Q5M2QzLCAweGJkNzdiNTVlLCAweDJjM2M3ODEzLAotCTB4OTY0N2RmODksIDB4ZTVkOWZhMDQsIDB4ZjQxMDczMGUsIDB4ZjhjNGZhMzMsIDB4NzFlYzlmODYsIDB4ZDFjM2ZiZTIsCi0JMHhmNDM2ZmMwNCwgMHg1Mzg1NDAxOSwgMHhkZmM0ZWZkOCwgMHhmYzRkMjA5NSwgMHg3ZWZjNGVmYiwgMHgwNDc3YmE3OSwKLQkweGQ5ZTVlNWYwLCAweDdjMGI3ZmI0LCAweDJlZWQ4ZGRmLCAweDgwNmY3OTY3LCAweGU2NGJmZDMyLCAweGJmNjMyNWUzLAotCTB4N2MwY2RlNjksIDB4NjRlMTdjMmYsIDB4YzRkMGE3YmYsIDB4ZGViMTNiZWIsIDB4YzA0ZWY0NjcsIDB4NGFkMWZjNzUsCi0JMHhlNzU5MDY1YSwgMHg1NWJiZGVmNSwgMHg3ODg3MTY5YywgMHhlMTRkZTc1NCwgMHgyNDVlZmE4YywgMHg5OGQyNmE1YywKLQkweDIzYzJhNDdlLCAweGYwZmIyZTkyLCAweDAzZjMyZGY5LCAweDk3YzAwOWJmLCAweDM2M2MzM2I0LCAweDNlMzAzNDhjLAotCTB4ZjUxYTNmNTIsIDB4YTUxYjUyNWEsIDB4ZDU1YTEzYzksIDB4Zjc2MWNlYzEsIDB4OWUyMmIwNmMsIDB4YTdlZWY1N2IsCi0JMHhkZTg1MWU0MSwgMHhhZjc2MTNkNSwgMHhjMDA4ZDUxNSwgMHhmMDcxMzBiZiwgMHhlNzhlNzJmZCwgMHhiM2Q2NTcwOSwKLQkweDJmNzNhMjdjLCAweDZmOWY0ZDljLCAweDY3OGFmMzgxLCAweDU1MTVlNzM1LCAweDI0ZWQxZjNmLCAweDE2MjhmYzA2LAotCTB4OTY1MzEyOTcsIDB4MTE2Y2Y0YzcsIDB4Mzc3ZWM3ZTcsIDB4YzE1ZWEzNjcsIDB4NmZmMjA3ZGYsIDB4ODQ3ZTg5MTgsCi0JMHgwMGU1MDY1MywgMHhjMzUxOGVmZSwgMHg1NWQwMWQxOCwgMHgxZWYxOGJiZCwgMHg5ZjViMTM3ZiwgMHg3YThlNWY3YSwKLQkweDdjMjQ0ZGVmLCAweGQ5YjJkMzVhLCAweGVmMTA5MWVmLCAweGYyODc3MDAzLCAweGYwMjRhMjQ5LCAweGZmZGUxYTYwLAotCTB4YTJmZjAxNTUsIDB4YTYxOGFmYTAsIDB4M2Y5MTliNzMsIDB4MTg1Y2EwZDQsIDB4ZTE5NmNmNzgsIDB4ZTgzZjdlNWIsCi0JMHgzZmJjYjZmZiwgMHhlYjNhZTA5ZCwgMHg5MDE4ZmU1ZCwgMHhjY2NhOWZhYiwgMHg1M2Q4YTNkZSwgMHg2YzhiYWU1MCwKLQkweDY5YTc3ODlkLCAweDRmNmJjODEyLCAweGQ2M2M1YTViLCAweDU0ZmMzZjIzLCAweDlmMmFmNTYwLCAweGEwN2ViMDFiLAotCTB4ZGEwN2U4MTcsIDB4YTc4ZWJlZDEsIDB4MzIxOWJmMzEsIDB4OGNhN2I4MDksIDB4OGY5MDBkZjgsIDB4OWYyN2NhYTYsCi0JMHgzY2UwZTkyMCwgMHg4OTRkYjc2ZCwgMHhhZWVjN2EwMSwgMHhiZDgzYjZjZiwgMHgxMjUzNjY1YywgMHhjMmU4YzIwYSwKLQkweDczYzEwNmY3LCAweDM3ZGMwYWE0LCAweDVmN2UwMTNjLCAweGZjMTYzZGMyLCAweDVhZWNmYjc1LCAweDdjZTQ0MTdmLAotCTB4MzVkMjlhNWUsIDB4NzdmZWJjMmYsIDB4ZWRmZjRjNjksIDB4OGEyOGZiZTIsIDB4ZGY5MDYzYzMsIDB4MmZiYzQyNzksCi0JMHg3N2FmNzhlNiwgMHhmYjQxNmY3OSwgMHhlMmRkYTIzMSwgMHgxZTljYjFhZCwgMHhiZDM3ZGUyMiwgMHhmNzk4YWZmYSwKLQkweDRmN2I0M2IxLCAweDc4ZjhjZmRjLCAweGY4MzcxZTlmLCAweDE5ZTAxYjg1LCAweDE1YmFmOTg1LCAweGFiOWYxOTliLAotCTB4ZTczNGJiNzgsIDB4ZjNjNjU2NTEsIDB4MWU1YTUzZDUsIDB4NThlM2RmYzcsIDB4MGU3YTdiYjAsIDB4ZjEwYjdjNjEsCi0JMHg4MmUzZDJhMCwgMHhlODBlNzc3NCwgMHhhMjZkYTE3MSwgMHg2MmEyZmIwYywgMHhhOWYzODhhYiwgMHhkYjRjOWE5NywKLQkweDViMzNmYmU4LCAweDU1ZGZhOGY1LCAweDQ5OWNmOWYwLCAweGRlMjBjNmY1LCAweDI4MTkyMjI0LCAweGRlNDhjZmRjLAotCTB4Yjc1ZmQ0MTgsIDB4ODkxZGRmZjEsIDB4Zjc2ZDA3NTgsIDB4MDgzMDU0OWUsIDB4Y2YwYzRjN2MsIDB4NDFlYzlmMDgsCi0JMHgxZDVkZTBlOCwgMHhmYzAxNjllMiwgMHhhM2NjMTk3ZSwgMHhlNGJmNDA0NSwgMHgwM2VmMzQ5OSwgMHg3NmE2ZWU1MCwKLQkweGRiZmZkZTNiLCAweDU5Zjc4OTU0LCAweDhjZmJjMjQ0LCAweGI5ZjQ4YmM5LCAweDg1NDdhZjk4LCAweDJhMzhlNDY3LAotCTB4OWUwMTdiM2MsIDB4ZGYxZDJmYTAsIDB4ZjdjZjcyOGUsIDB4NGIxNDA4OTQsIDB4NDI1ZmI0OGUsIDB4Yzc0YTdhN2IsCi0JMHg4MjZmOGZmNCwgMHhkZWE5OWJmNywgMHhjZDljODBhMiwgMHg0MDBmZWRmYSwgMHhmODg5ZDVjZSwgMHgxZDY1MjY3YiwKLQkweDQyMjQwOWQ5LCAweDU4ZGQ4MzVlLCAweDE4OWNjZWY2LCAweGFjOWM5ODVkLCAweDdlMzExNjZmLCAweDc2NmMzZjUyLAotCTB4N2Y2YzQyY2MsIDB4YWZhMDRlZjEsIDB4YTEyYjhhOTMsIDB4ZThkZGFjMjAsIDB4ODE3OGJlZjQsIDB4OWJlNTVmMDYsCi0JMHhlMzAzMWFmZiwgMHg3MWVhMzQ1NCwgMHg3YTVlMmE1ZCwgMHhmZjkwOWNlOSwgMHhiZmEzNDUzNiwgMHg4NDM1MzdhOCwKLQkweGVhNzhhYWZkLCAweDgzYzA2ZmEzLCAweGRkYjQ0ZjRhLCAweDFmMzJlOTVkLCAweGE4ZmM4ZmM3LCAweGU0NWJkMzNiLAotCTB4MTY0ZTg0MWEsIDB4ODVjNzQ5M2QsIDB4ZjE1YWI2ZmUsIDB4MWQ2YmMyZmUsIDB4MWY0Nzg1NTcsIDB4YzZiZWY5YmUsCi0JMHg1NzcxZTAzMiwgMHg3NWJmZmEyNiwgMHg0Yzk4NGFlZiwgMHg2NjY5YjI3ZCwgMHg3MmUzZWMzYSwgMHhkZmMwMmYyYSwKLQkweDNlODQyZTUwLCAweDNiMjQ3YmM2LCAweDZiMGY3ODhjLCAweDBmMjVlNmY5LCAweDFmZTU3OGMwLCAweGRmNTA3NTFhLAotCTB4NThlNjc4N2QsIDB4NWUwNDU3OWMsIDB4MDdkMjljMjksIDB4Y2NkZWY3YTMsIDB4MGMyYmJhNTAsIDB4YzA5ZjU0N2UsCi0JMHgyN2FlYWRmZCwgMHgwZjM4ZGU2YywgMHg3ZGUxNGY2YSwgMHgxNDk5YmQyNCwgMHg2MDdjNjE5ZiwgMHhiYmQzM2E3NiwKLQkweDgwZDk3YjY4LCAweGMzZWVjZGY0LCAweDFjYWY1YmU5LCAweDYyMzk1ZWIxLCAweGE0MTFlZmJkLCAweGUyZjJlMjZmLAotCTB4NjQ3YzE2N2EsIDB4MDVmYmMxZDQsIDB4MDM5MWRjNGYsIDB4ODZlZWI1ZmUsIDB4NmVhZWI4YTksIDB4ZWMyYzdiYmIsCi0JMHhkYTc0ZWVhZiwgMHg3MmZjMjBmZiwgMHg5ZDc0MTNjMSwgMHhjZWIwZGY3OSwgMHg2YmUyMzMyNiwgMHg0M2RhNzVjOCwKLQkweGFjMzdjOGJiLCAweDUwZTljN2QzLCAweDQ5NjllNzVkLCAweDJiZGZjMTg5LCAweGYwMTIyODNiLCAweDNjZDJmODk3LAotCTB4NjU2MjZmMWIsIDB4OWYyODlkZmMsIDB4NmY4M2QxOWUsIDB4MzFlNjM0NzMsIDB4ZmJiM2I0ZjYsIDB4NDAzZTU1YzksCi0JMHg3YTQ2YmJjNywgMHg3NDNkMjFkMCwgMHgyNjViMmIxNywgMHgxMDZkN2QwMiwgMHhlZDhiYzg2NSwgMHg1YmY3MTg2ZSwKLQkweGVlYWYxZGY4LCAweDdhMGNhMjhkLCAweDgzMzE3NzQyLCAweDI4MDdlNTFmLCAweDNkZDNiYmI3LCAweGIwZjk2Mjc3LAotCTB4ZWE4ZjdmMWUsIDB4ZGY1ZmQzNTQsIDB4MWRlMTczYzcsIDB4ZmFlMDg1N2EsIDB4NDJlNzFiM2MsIDB4ZjgxN2NlOTksCi0JMHgzZGNiODUxYSwgMHhlM2Q1NWY0YywgMHg5ZWViZWJmYSwgMHhmZjdhODNhYSwgMHhmY2YwMWJkNiwgMHhhY2Y5NDBjMywKLQkweGEzNDU3Mzg1LCAweDQ0ODdkOWE4LCAweGRmM2M3MDUyLCAweGFmNzgyOTEzLCAweGNhNjcwYTgzLCAweDFlYzA3MzYxLAotCTB4ZTUwMWUxNTIsIDB4ZTFmYTYzMzksIDB4YTBlN2UzZTIsIDB4Zjc2MDJmNDEsIDB4MDY3ZTcxMjAsIDB4NzI2MmM5ZjAsCi0JMHgwMDgxY2UwMiwgMHgyOGYzODMxZiwgMHg0OGFiYzk0MywgMHg0N2E5MTNmZSwgMHhhZjhmYmNmZCwgMHg2NTcxZjk2OCwKLQkweDNlMThlZmM0LCAweDEyNWU1MTE4LCAweDQ2OTYzN2MxLCAweGQ0NDU1N2Q0LCAweGU3N2NmOTUzLCAweGU0ZTdmZTYwLAotCTB4MmI1ZjJkMGMsIDB4ZmQ1NDcwZTMsIDB4MDQxYmJkYTAsIDB4MjRjYjQzYjQsIDB4Y2ZmNjAwYzUsIDB4N2M5ODUzNGIsCi0JMHhlOTg4OTcyZSwgMHhlYzk3ZGMxNiwgMHg0NDk5NGI3YywgMHhmMDA1OGQ2YSwgMHhiNzA4NjVkZSwgMHhiNTdmNjg5MywKLQkweDQ3MmQzYjQ2LCAweGRiNDQzZTMxLCAweGNhYzIxODk1LCAweGU3NTViZjJhLCAweDg3ODcwMWYzLCAweDdlY2VmY2ZhLAotCTB4ZTMyMWQyODEsIDB4OGZhNDFmMTUsIDB4MjhhZjE4MWYsIDB4NzU3ZWIzMTAsIDB4ODNhYmVjMDIsIDB4YmU5NWRhMjIsCi0JMHgyMWZjOTliNywgMHhmMmRhNWQ1ZiwgMHg5N2VlMDNhMiwgMHgzMGJjYzZjZCwgMHg3MDkxZmQ3NSwgMHgxNGJiNmRlYywKLQkweGQ3ZWJiZjAzLCAweGU3ODBkYzczLCAweGUzZGFjYjkzLCAweGIyZmVkMThhLCAweDdiODUwNjg3LCAweGRhOWY1ZjBmLAotCTB4MTVkNDhmNWYsIDB4NmY1YzJiMzMsIDB4ZTEzMTVkMjYsIDB4ZDY1YWEzYmYsIDB4ZDgyNTY5NzYsIDB4N2U3ZTE0YjMsCi0JMHg5ZjhmOGMzMSwgMHgwNjJmODhlYSwgMHhkN2ZjYjJiYiwgMHg3ZTcwYzVjOSwgMHhkYWExOTZkNiwgMHgxYWNmY2FmZCwKLQkweDM0MWNkZjYxLCAweGU3YTIzZmEyLCAweGY4M2FiOWVkLCAweDBhZWRlN2JlLCAweGY3OGU1Y2ZlLCAweDNlOWNmNWI4LAotCTB4YzdlMzBlOTUsIDB4ZmVlN2I0ZTgsIDB4NWI2ZmRjMGQsIDB4ZDc2NGZiYWUsIDB4MGZmZmMwY2QsIDB4MDlhZTY2MjUsCi0JMHhlYjk3MzdmMywgMHg3ZTFlZDAwYSwgMHgwNzlhMWY1MSwgMHg3ZTdhYTZmMywgMHhhYTU3ZTQxZCwgMHgxNDMyZDhmZCwKLQkweGYwNzFhZjk2LCAweDBmZTAyZWVjLCAweDE1YTYzNmE3LCAweDM5ZTk1YjAwLCAweGRmZWQwMjM4LCAweGU1YzcwZjllLAotCTB4MjQ3ZjY4YzgsIDB4YmMyZjgwYjksIDB4MzM5NjU3YTgsIDB4ZGFlYWM1N2IsIDB4MWZkZmQ5OWQsIDB4YzY3MTAzOGMsCi0JMHg4YTEzODM5ZSwgMHhmM2QwNWZjMCwgMHgyZDJmOWIyMSwgMHhiNjgwZmZhMywgMHhhNTFlNDNmMywgMHg0ZThjNmZkYSwKLQkweGRkNzkwNGQ5LCAweGI0N2FkN2U0LCAweDNhZmExZTIzLCAweGI5ZWUxMTNiLCAweDFlMGMzMTg4LCAweDQxYmIwMTlmLAotCTB4MWFiY2Q3OWIsIDB4YWJkZWFkZTcsIDB4MmM1NzY5MWQsIDB4NGY5NjFlMjAsIDB4YTk3ZjYxMWIsIDB4ZGE0NzczZjcsCi0JMHg2OWE0MTU4OSwgMHhkMDMwOTc2ZCwgMHhiODhhYTQ1ZSwgMHhmYjAwOWZjOSwgMHg0NTZiZmQ1YSwgMHhlZjY0YmY3OSwKLQkweGJlZjZhMzU1LCAweDlmZGYzZjYyLCAweDY1YzdlNDI2LCAweGEwMzYzZjc0LCAweGZjYzAyOWJmLCAweGEwZTI3NTdiLAotCTB4NjVlZmQ3NzEsIDB4OWUzYWUyNjQsIDB4YmNkYmZlOGUsIDB4OWViYzMwYWUsIDB4NDljOTExZDQsIDB4NDBkMjdhZTEsCi0JMHhjMTgyY2U0YywgMHhlOWNiYzZlYywgMHhiNDBkOWY2MCwgMHgxZmEyY2YxNywgMHhiZWZjM2NhMywgMHg2ZWQwMzIzMCwKLQkweGMwMWM1OTNjLCAweDBkOTNiZGJjLCAweGMwOWVmZTIyLCAweDkxOGRkYWY1LCAweDk3YmZhYmRmLCAweDJjMjBjOWUwLAotCTB4Njc3MjE5MWYsIDB4Mzc2NGRmZWQsIDB4YzJhYmU3NmIsIDB4Yzc3ZmNjZDMsIDB4ZTJmZGIyMjIsIDB4Y2EzNzE2MGMsCi0JMHg2ZTI0NWFmZCwgMHg3YTFkZjdkOCwgMHhkZDEzYmYzYywgMHgxZjk2YzVmMiwgMHhlYmI2N2QwMCwgMHhlMzA1NGNlNSwKLQkweDBiN2JmODJiLCAweGY5ODhhMGU0LCAweGE3ZWRiZDdmLCAweDM5MDQxZTYyLCAweDFlMWM3MDczLCAweGQ3OTNlYjIzLAotCTB4OTM4YzQ1MDcsIDB4NGE1ZGI0ZjQsIDB4ZWQwYTc4ODAsIDB4YmVjNmUzMDcsIDB4NDA1Y2E3OGUsIDB4ZTNjZDQzYmYsCi0JMHhmYWYxMGNkMSwgMHgwOGVlZjlmYywgMHgxZjhmMjhiZiwgMHhjOTljYjRmNywgMHhmOTRlZmUwMSwgMHhiMDE5YTNlMCwKLQkweGUyYmU3MzNmLCAweDE1NzU2Y2Y3LCAweGY5ZDFmZDAxLCAweDFiZGVmZWExLCAweGE1ZmE4Y2I4LCAweGY0MWM1ZGE5LAotCTB4MTlmNWFhZmUsIDB4Y2ZlM2ViODYsIDB4OGJmMjAzMjUsIDB4ZjdjNDY3ZDYsIDB4MDk1YWIzY2YsIDB4N2VjZTQwMTksCi0JMHhiNGM1MWU1YiwgMHhjMzU3MGI4MywgMHg0ZGJkMzNmZCwgMHhiNzdmMGI4MiwgMHhiOTQ0NWRiOSwgMHgzYTNkYTBiNSwKLQkweDRjYmM1MGEwLCAweDcyYzE2MTFiLCAweGVlNzY0ZWY5LCAweGY5Mzg4NjYzLCAweDJlNmZmMDdkLCAweDdmYTIyMGRlLAotCTB4ZjJjYjQ4ZjMsIDB4Njc5OGY1ZjcsIDB4ZTU4MzI3YTEsIDB4NWRlN2Y0NjEsIDB4YzYxNDdjM2MsIDB4ZGMxNGZjNTksCi0JMHhjNGZmNDMxMiwgMHg2ZmQwMGRmYiwgMHg4MTAyZDNlNSwgMHhjYzg4NGE5ZiwgMHg3Nzk4MThiZiwgMHgxNDRmMzVkMSwKLQkweGMwNWRlNjA3LCAweDY5MDdlNWY5LCAweDQ2NmQxNWJmLCAweDNjMGZhZmY0LCAweDFiYzg0MGVmLCAweDIxZjdmZDA5LAotCTB4YmM2ZjBlZTUsIDB4OWY2ZDI4ZWYsIDB4Zjk2MDYyZGIsIDB4M2UzNTY2N2YsIDB4MGVmNjg1ZDUsIDB4ZDBmM2IyMDksCi0JMHhhNzRmMDczZCwgMHg4NzdkMWUwMywgMHhiMWZkMDdmZSwgMHhkMjBmZWQ0MywgMHgwZTNjZjJjZSwgMHg1N2RmYjA2NiwKLQkweGQyZmFmZGNjLCAweGRhNDE5ZTlkLCAweDhiM2NmMjM3LCAweDMyN2Y3YWJkLCAweDViNDdiMWU4LCAweGU4M2YyMzJlLAotCTB4NmNmY2M4M2QsIDB4ZmM0ZmY2NDMsIDB4MGFlZmU2NjYsIDB4NTcwZmQxOWEsIDB4MGVkZjJhZDgsIDB4ODNlYTg0ZmIsCi0JMHhlZWRmNWViMCwgMHhkMzc3YjNiNSwgMHhiZDU1ZjliMiwgMHg2Zjk1YWEwMiwgMHgwYmY3MDViOCwgMHhkZmYwOGZlYywKLQkweGM5Zjc1MjAzLCAweDUzYTcxZTVlLCAweDc5MWE0N2YzLCAweDNmOWE4ZGJlLCAweDQ0OTNlNmEyLCAweDI3Y2Q0M2NlLAotCTB4N2M2MTRjNjksIDB4ZjNjMzJmMjMsIDB4OTQ1YmQwMDEsIDB4ZTc3ZWNmY2UsIDB4NjhjZjIyMzMsIDB4YzhhMWJjYTgsCi0JMHg3MTkxMDc3MywgMHg4YWUyNDE4MiwgMHg0NmMwYWYyYywgMHhjNmEwNmUzMCwgMHhiZTU0MGQxNywgMHgzMWQ2NDdjMywKLQkweGQwNjUzN2IzLCAweDIyN2JmZDdhLCAweGM1NDM0ZmRhLCAweDFjNzVkNTFiLCAweDc5ODY1MTM5LCAweDhiMmY1NTU2LAotCTB4YjBiZmFmZTgsIDB4YmNlM2NmNWYsIDB4ZTk0MzhjMjEsIDB4Yzg2MTdjNGYsIDB4N2VjZTdlNDQsIDB4Y2I0N2M5NWYsCi0JMHg1OTM3ZGVmMCwgMHhkMjhlZmNkMiwgMHhlNzFlMWM1NywgMHhkOWYwNzIzMywgMHg5NzhmYjkyMywgMHhlNDdiN2VkMiwKLQkweGY1ZTgwMzMyLCAweDRhMGIxM2ZhLCAweDlkZThkZTQwLCAweGQ3OTgwNjY1LCAweGE2YzUxMzkxLCAweDRkOWJjMDRjLAotCTB4YjZiMzdkYzIsIDB4NTNiNzFkNWQsIDB4M2ZmZmZlODYsIDB4MWYwMTJhODAsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHg3ZGI1ZmYwMCwgMHg1NTk0NWMwYiwgMHhlNzc5ZjhkYSwgMHgzODBjMmI5ZCwgMHhhNTExNzI4MCwKLQkweDM4MGEwZWUxLCAweGRiOTU5MDJhLCAweDk3ODQyNjhlLCAweDRkMzJkNDVhLCAweGU1NDUwNzU3LCAweGRiNjk4MDMyLAotCTB4Y2JiYWVlZTcsIDB4NWFjZDRkNzgsIDB4YjVhY2E4ZGQsIDB4YmNjMGMxYmUsIDB4MWExNjNiNjAsIDB4MjVhM2I2MTQsCi0JMHhiNjhiOTU5OSwgMHgzZjliNWI5OSwgMHgwMjg2ZjMyOCwgMHhmZmI5ZjU2MiwgMHhjZmZlYmY2ZCwgMHgzYWYzOWNmMywKLQkweDdlOTg4ZWYzLCAweGJmNjdkZmJiLCAweGRlNzM4NzdlLCAweDczY2U3ZDczLCAweDkzMzljZjNmLCAweDE5NmUzOWE2LAotCTB4OWViMTlmZDMsIDB4Y2FkYjJkMWMsIDB4Yzg3YjNiMTgsIDB4NjMwZDgxYmMsIDB4ZjdmYzA3ZWMsIDB4YWNmMmM2NTMsCi0JMHgxODAzNjMxMiwgMHgzMTlhYmFmYiwgMHgzZTU3ZGVhZiwgMHg3YzgxZmIzZiwgMHgwMmQ4YzE5NiwgMHgzMTYzNThlNiwKLQkweDMzMjM1YTQzLCAweGJmZDE5MWFmLCAweDFkMWZiMDFmLCAweGYyODFlZTliLCAweDk4ODM1N2Y5LCAweDVkYWZjMjM3LAotCTB4YjYzZDE0ZjQsIDB4OTQzNTdmOWIsIDB4M2Q0MjQ3NzksIDB4MzY3N2FmMTMsIDB4NGYyODUyMDQsIDB4MTg3MmYxYzAsCi0JMHg5ZGU5MTJjYiwgMHg2ZWRmMmQyMiwgMHhlYmY2OWNiMiwgMHhhNjEzYzJiZiwgMHhjNTM1NTdjYSwgMHhmOWE3NGU1OCwKLQkweDQ3ZjhlNWYyLCAweDYzNmZmYzBjLCAweDk4YzkxNjQ2LCAweDk3NjI3ZjkzLCAweGRiNzRmYzVlLCAweDkxM2Y0ODVjLAotCTB4NTg1NjA5MWMsIDB4OWVkNDg1NTcsIDB4YjEwYzBmN2YsIDB4ZWY1N2JhMjYsIDB4MmQzYWUzMzAsIDB4NjNmMjliY2MsCi0JMHg1ZTYwOGNlYiwgMHhkNWFlNzFiZiwgMHhmNWE0NmFiYiwgMHgyNTY2ZTBmOCwgMHg2YmQ2ZjliOCwgMHg1ZDdjMzgyNiwKLQkweDM4MTM3ZDFkLCAweGU4ZTBhYWM2LCAweDA1NDEzZmViLCAweDRmZmJlYmM3LCAweGFlYmZmMWExLCAweGZmNDliYjRlLAotCTB4YmZkMDZmNDMsIDB4NWY3ZjM1NTUsIDB4ZWUzNDQ5YmYsIDB4MGIwZDBjYWEsIDB4YTRmNDg2Y2QsIDB4NWUwMGNkYzEsCi0JMHhjYjIzNTUwMCwgMHgxZDgwY2M2NSwgMHg3OTU2NTRjMSwgMHg2NmFkMTljNywgMHg3NTI1N2I1ZiwgMHg2Y2IxNzFiMSwKLQkweDk0NmY3YzE0LCAweGZkZjBkYzBiLCAweDI1YWU2NTkyLCAweDk4NWQ1MjE5LCAweGExZGJiMTg2LCAweDcwNWVjZWJkLAotCTB4MDg2YmY0MTcsIDB4NDE3MDhmMGIsIDB4ODlhYzEzM2YsIDB4YzJlZmFlYjQsIDB4MjgzMDE1MTYsIDB4MDhmMDZlZmYsCi0JMHg4MzhmMTVkOSwgMHhmY2M0MmEyYywgMHhmMmM1NDFhYSwgMHhlMzdmMWM3YSwgMHhiNWY3MGM3MywgMHgwZmM3YzhjYSwKLQkweGZjMzMyZmQ5LCAweGJhMzBlZWNlLCAweDc3N2VhMTkzLCAweDc5OTZjN2NiLCAweDA2ZGZjZTMwLCAweDNlZTBlNjM5LAotCTB4YzkwOWYzMmIsIDB4M2VlMTk3NzksIDB4NmRjNzI2YjMsIDB4M2Q4YzIxODUsIDB4MGRhYzYxNmUsIDB4NTBmNmRhZjMsCi0JMHg3MjVlYWY1YywgMHg0MDVkZTdmYywgMHgwNmFmZWMwZiwgMHg3N2M5MGY1NiwgMHgyNWFhNDcyNiwgMHhjYWJlZDdjMywKLQkweDAxZjlhN2FhLCAweDY4YjJjNDM1LCAweGE1MGQ1ZjVjLCAweDA4NTc0ZDU1LCAweDg5MTZkNmNlLCAweGFmN2NhNWQ2LAotCTB4NzcwNDNkNjIsIDB4ODg1MWU1ODYsIDB4N2QyYjVhOTMsIDB4MTZhNDcyNmYsIDB4NzFlNmZhNjYsIDB4Y2NmN2ZmYWQsCi0JMHg5ZmQwMGQyZSwgMHg0MzNmZmY2MSwgMHhkYWRkOWUxMSwgMHg5MDZkZmI5ZSwgMHg2MGU0NWE3YSwgMHgxMWFlZjg3ZiwKLQkweGYwNzYzOTc0LCAweDUwZWQ1OTM3LCAweGZhZWQ4OTVlLCAweGRiZDhmNjMxLCAweGYzMGNhOWU1LCAweDljMmM5ZTg2LAotCTB4ZmZiN2MxZjcsIDB4ZTkwZWQ1OTEsIDB4NmZjYmZiNzcsIDB4NTBlZGYyYzMsIDB4NmVmOTBhZGYsIDB4Y2RhNTRmN2QsCi0JMHg2NjI0YmZhZiwgMHhmOTQ2Njk3MSwgMHgwZmIxNmFkMiwgMHhmN2RiZTU4MSwgMHhmMzg4MWNhZiwgMHhkY2MxZDA2OCwKLQkweGE1OWM2MWMzLCAweDQ3NGYyMzY1LCAweDlmZDgzYTIwLCAweGI1Yjg0NzhlLCAweGVjM2Q1OGU4LCAweDU0ZDM1NzQ3LAotCTB4ZTU0YWY5MTksIDB4NDMwNThjMjcsIDB4ZjYxOWJiM2UsIDB4ODNkOWYyMDcsIDB4ZmIwMzViOTksIDB4OTNmZmI5NTMsCi0JMHg5NTVmYjhlOSwgMHgwNjhiN2EzOSwgMHhiYzM0MTI5NiwgMHhiZTAyYmRjZCwgMHgyZDE4ZTUwNywgMHgyYzUzZTIxMiwKLQkweGVjY2Y1ZjFmLCAweGZiNjIyNThjLCAweGI3ZGMwOGJjLCAweDJhMzEwNjM3LCAweDQxZjk5N2ZmLCAweDZiZGJjNzFkLAotCTB4YmM3YmMwZmMsIDB4YWJjNjAxYjIsIDB4NDdlZmRiOTAsIDB4YTE3YzAwM2UsIDB4ZjJhNWYxMWUsIDB4NjY4ZTZmYTMsCi0JMHg0ZjQ2YjE1OCwgMHg3OGNmZWUyNCwgMHhkMGY4MTcxYywgMHgzNjlmYTJjNywgMHhhYzBlZTE2YiwgMHhmYmUwZmRkNywKLQkweDJkZThiMDZiLCAweGY1YzBlMWM5LCAweGI2OGM2MmI4LCAweDY4Y2ZjNDdhLCAweGJmMTRjMjc3LCAweGFhY2Q3ZDdkLAotCTB4NGZmMGY2YTEsIDB4MjIxZGJjNDIsIDB4YTA3YmJhZTYsIDB4MjI1ODcxNjcsIDB4NDcwZWU1ZmUsIDB4MzBkMmE4N2MsCi0JMHgzNjQzZjIwNywgMHgwNzdhODAwOSwgMHhlNjYxNjVlMiwgMHhlOWViY2M5NCwgMHhkNDE1YjE4YSwgMHg3YjU2ZGJkZiwKLQkweDU3YzczNWIzLCAweDMzNjk5M2ZmLCAweGQwN2QxZDMzLCAweGMxMmE2MjIxLCAweDA0NzllZjUzLCAweDYxNTNkOWU3LAotCTB4N2Q4NTZkYjYsIDB4ODI3ZTBiZjgsIDB4MzM0ZjJmNzYsIDB4NTg1MGU1NzgsIDB4NTZiY2NlOGYsIDB4MTkzYTNjMDIsCi0JMHgwMDc1YmIzYywgMHhkOWI1N2ZhYywgMHg3M2FlMWVmMSwgMHhkN2UzNDNmYSwgMHgxODNhNWU2MCwgMHg3ODhjNWQ2MSwKLQkweDhiOWVkNDU5LCAweDcyNmQxMmZiLCAweDNiZTM4MDdjLCAweDIyZGI4ZThkLCAweDA2OTc4OTYxLCAweGMxZmI1MjNiLAotCTB4MDhjMmIzNTYsIDB4OTg1NjZmMGUsIDB4ZmNlN2Q4NTksIDB4Nzk3YzdjZjksIDB4NTRiODQxYTYsIDB4MzZmNGI4MDgsCi0JMHg3YzQzZjYyNiwgMHg1ZmFkN2FlZCwgMHg3NGY5ODMxNiwgMHhjYTA5NTg2OSwgMHhkZjMxMmU4NywgMHg5ODhmMjA3MywKLQkweDcxMmU5ZjFmLCAweDQxMTdkMzFmLCAweDYzYmFkMmZkLCAweGViN2ViOWZhLCAweGVlY2M2MGFmLCAweGZjN2ViOGM5LAotCTB4MzAxZmI4OGIsIDB4ZmZkNzg1ZmUsIDB4YTFhZmRkZjgsIDB4Zjc2ZmNlYWIsIDB4YzAwNGIwYTUsIDB4YWQyMmU5MTMsCi0JMHhjNzFkYmJlYiwgMHg5ZGY1OGI2NiwgMHhkNjNmZjVjNSwgMHg4N2E3MTNkYiwgMHgwNzNkMzk3NSwgMHg4ODdmOWNmNCwKLQkweDUyN2I2OWY1LCAweDVkN2Q2YzdlLCAweGMyN2NiNjlhLCAweGE1OTI3ZDhiLCAweGFlZDdkZTNlLCAweDdlNThmMWEyLAotCTB4NDk3YmUwMmMsIDB4OTkwOGQ4NWQsIDB4ZTIwYTU5ZTMsIDB4MDYxYmE5NTksIDB4YTU1YmMzZjEsIDB4OGIzZTA1MWYsCi0JMHg1ZGViYmYwNSwgMHgxNDEzZTAyYSwgMHg1YWYyODU5YSwgMHhmZTMyOGY4MSwgMHhjY2Y4MDBhOSwgMHhlMWU0ZjZkNiwKLQkweDBiMmY2NjNjLCAweGVhN2U3MGQzLCAweGJlNTFmYzI2LCAweDFlYWE1OWNmLCAweDMwZTIyNTc3LCAweDFiZjVjZmNjLAotCTB4NjZmMzRkYzksIDB4MmI4NmZmM2MsIDB4ZjIxZWJkY2MsIDB4YmY5NWNkMDYsIDB4MjFiZDQ1NGMsIDB4YmQ0MzYzNTMsCi0JMHhmMDEwNGI2MSwgMHhmZDhjMTE4MCwgMHg4YmNmZWM1OSwgMHhlMThjMWZjMCwgMHhjYjE2YmU1NCwgMHhmYjc4ODNhMywKLQkweGVlMzU2N2U4LCAweDcwYmVkMDk1LCAweGUxZTEzMzZjLCAweDliNjY5NWNiLCAweDMxMTU2MzBjLCAweDg1MzBhYzYwLAotCTB4NDdhZWNjNzksIDB4ZTYzZDdmYjgsIDB4NjFkYmZiMWYsIDB4MWRlMjgzOWQsIDB4ZmViMGYxNTEsIDB4Yjg5YTExMzksCi0JMHgxYzNjZDBiZiwgMHg5YzAzMjc0MywgMHhjNzBlNjhkOCwgMHhjMjA3Yjg0MCwgMHhlOGIzMGE3ZiwgMHgzNmM2NWZiMCwKLQkweGE3ZWU5MDY4LCAweGU2NTJmODU4LCAweGE3OGU5YzRiLCAweGM3MGViYjMyLCAweGE4Mzk5MDdiLCAweGJkMmVmMWRlLAotCTB4MWMxZDAxOWQsIDB4MzA2MGY0MDcsIDB4OGI5ODg3ZWYsIDB4MzczMDY3Y2EsIDB4OTc5OTMzYTUsIDB4YjU5Y2ZmZWEsCi0JMHgwM2ExNWU1MywgMHhmZDM5ZmZjMCwgMHg4ZDlmZmUzOSwgMHhiMjZmMDk5MiwgMHhjN2JlMDFlMiwgMHgyZjA2YjM4MiwKLQkweDdlNGM3NTg1LCAweDYxOTkzNTJlLCAweDA4MDMzNTlmLCAweGY3OWIzNzNlLCAweGIxYzM4OTY0LCAweDFkYjhlYWNkLAotCTB4ZjA1YmRmZDcsIDB4ZDAzNTRiZWQsIDB4MjVlOGM2OGYsIDB4MjdjNmJiZmMsIDB4NzgxMDBkYzYsIDB4YTI3Y2UzZjgsCi0JMHgwOWUzOTdhZCwgMHgwNjM5ODM5MCwgMHhkOGFmNzBlMCwgMHhlNWVkN2JkMiwgMHg4Y2JkNzA5MywgMHhmZTllNDg1OSwKLQkweDllNWZkMDRjLCAweGIzZmQ2NjZjLCAweDZkZDk3YzcxLCAweGE1ZDhiOWMwLCAweGJlNDI0NjhmLCAweGQ2Y2M4YzYwLAotCTB4NWJkZTNjYzMsIDB4YmVkZTQ4Y2UsIDB4MTM3NjVjMzcsIDB4ODY5ZjIwYWUsIDB4N2U4YmY3ZjYsIDB4YmE5OThkMjcsCi0JMHhjYmQ0MWZhYSwgMHhkYjNkYmVmZiwgMHgyMGMxNjkwYiwgMHg3ZWVkOTdkZCwgMHg3ZmJlMzVmOCwgMHg0ODMwYWFlZCwKLQkweGNiYTkyNDI3LCAweDJkMzZiMjI3LCAweDA2NTI3NWMyLCAweGYzZjFmYjk0LCAweGY1ZDViM2ZiLCAweGUxOThlMDBlLAotCTB4MjMyOGRiOTgsIDB4MGY4Y2NkZmQsIDB4MTgyNjdmZTksIDB4OTBkODQzYjIsIDB4YmQxZjY0MWYsIDB4OWRlOWViMjgsCi0JMHgwZGRmNDU3NCwgMHhlZjEwZDhmMywgMHhiMmZiOGI5OCwgMHg2N2FmYmVmOCwgMHgyZDMzYmQyMywgMHhjYTI0NjhmYiwKLQkweDVkN2NhM2E5LCAweDAwZGQwMjVmLCAweGQ1ZDNiMjA2LCAweDdlODBkMTIwLCAweDg4M2U4MGNlLCAweGI3YTA3M2Y5LAotCTB4ZGFhMTdhNjEsIDB4ZDA0NWU5NGEsIDB4NTc3YmYwYjMsIDB4OWVmMjhkYjUsIDB4ZWM3MmMyZjgsIDB4Y2JkYWVlNzcsCi0JMHg0ZTA2NDc1YSwgMHg2ZGYwODUyYiwgMHgzNmI3YzA4OSwgMHg4YzEzNTc4ZCwgMHhiMjU1YjRmNCwgMHg2MjVjN2NhMSwKLQkweDBjMWIxYjZhLCAweDFmNTI1YmYwLCAweDY3MWQ4MzZmLCAweDU2OWU0ZDY1LCAweGI3YjE3ZTljLCAweDc1YjcxZjMwLAotCTB4YWQ0NWUxYzEsIDB4MDU1YzU2OTgsIDB4NmNiZDA3OGMsIDB4MWZmODVjYWUsIDB4N2Y1ZDA3ODgsIDB4N2RkYTcyZjksCi0JMHg3YWI2N2U1MCwgMHhiZTdmOGQxNCwgMHg3N2UzNGVkYSwgMHhmYTUwMTc1NiwgMHgzN2UzYmM3ZSwgMHg0YjdiMGYzOCwKLQkweDE1ODQ2YjQ3LCAweGUxMzJlNTc3LCAweDFkMGQ3ZGNiLCAweGU3Yzg1OGRhLCAweGQyM2IyNWQ5LCAweGU2NzZkZGUxLAotCTB4NmQzZDAzNzYsIDB4YjViOTcxZDYsIDB4ZDIxNmU0MTksIDB4MjljYzk4ZTUsIDB4NTBjYTNlMmYsIDB4YzcxZTM4YWUsCi0JMHg1MDljMWVmMSwgMHhkY2ZkODc5YSwgMHg4YjQ4YWEzZiwgMHg5ZWZhMWVmNSwgMHgxZjc4ODhiMSwgMHg4ZjBjZGRkZSwKLQkweGJmNWYwMDU5LCAweDc4NDRiNmY0LCAweGZkNjM0OTc4LCAweGFlNTllYTE5LCAweDBiZTkzMjIzLCAweDJhOTg1YWJkLAotCTB4NzI3YmRmZjQsIDB4N2IwNWRiODgsIDB4NjI2Zjc4YmIsIDB4YzViN2YyMTQsIDB4Yjg1NDZiM2EsIDB4MGNlYjVmMWYsCi0JMHhiYjlkNmJlMCwgMHg5N2Y2OGY2ZiwgMHg5ZWUxOWQ3NywgMHhiZTQzM2VlZiwgMHg0YmU3MDVmNCwgMHg1ZTY3MzNiMCwKLQkweDhlNjViZTQwLCAweDc2ZmVlMWI2LCAweGY0MDRiYjA5LCAweGNmOTQ2MGM5LCAweDQ3NDE3YTk1LCAweGRmMzA1N2MwLAotCTB4MTRlNmM0MTksIDB4ZDVmNzNlNDIsIDB4MTc0OGIxZDgsIDB4N2NhYTFlMzgsIDB4Nzk0OWRmMGEsIDB4NWY4NGI5ZjUsCi0JMHg2ZGUzN2Q1YiwgMHhlY2ZmY2NmNywgMHg3MjVmYzgwNSwgMHg5MDNhNWM2YiwgMHhhNzk4OTc1MywgMHg1NzVjNGRlYiwKLQkweGZhODZkOTlkLCAweDBkYTQ5YTYzLCAweGVhNzg0YTVhLCAweDkzNGMzYTI2LCAweGMwYTVkYWFjLCAweGZhYmM3NjU3LAotCTB4MzAzZmMwZTIsIDB4MWIxODFiZDQsIDB4ZGFkZmRmMDUsIDB4ZTc3YzRjMTQsIDB4ZDRlZDlkMmQsIDB4MjJmZjZjNTIsCi0JMHg1M2NhZmY2ZiwgMHgwOWIyZmNiZiwgMHg0NjJiMjdkMywgMHgzZWYxMTJmYywgMHg1YWUwOWMzZSwgMHgyMWQyZmJmYywKLQkweDYzNDM2Nzg4LCAweGJmYTAxYjYxLCAweDVlNDg2ZjVkLCAweDk5NjMxNjUzLCAweGM0NTYwNzM1LCAweDZkODY3Y2MwLAotCTB4ODQwY2QwZTksIDB4YjQ5ZDc4NzQsIDB4MjFhMWQzMTIsIDB4Zjg2NTg3MDUsIDB4OTViYzVlZmUsIDB4MjFiMjMxZTYsCi0JMHg3MjQ1OGU1ZSwgMHhlY2ZlZTgxOSwgMHhhODdmYTRhNywgMHg5YThjOTJmNSwgMHgzMjA3NjNjYiwgMHg0NDMyN2U5ZiwKLQkweDdkYzA1Y2YyLCAweDYyNzIxOTU5LCAweGI2M2ZjOTA0LCAweGRiZDlmYTkxLCAweDk5ZTNmNTMyLCAweDdjZDAwZWI0LAotCTB4N2E0NWRlNzAsIDB4YjcwYmM5MWIsIDB4ZWNmMTE2YWIsIDB4NDZjZDIzOTIsIDB4ZWJhMTdhZmEsIDB4NGJkZmRjNzksCi0JMHhjYTFiNDg4ZSwgMHg1NzFhN2Q4ZiwgMHhmZjU4OWRlOCwgMHhmOWQ2OTY5NCwgMHg1MGIxZGQ0NiwgMHgzNWZiZTQxZCwKLQkweGJlMDk5OGVhLCAweDIxZWYwYzU3LCAweGQ4MzE1OWI5LCAweGMxZGM3MGNhLCAweDgwNWJkZDJmLCAweGRjNmNhOWYwLAotCTB4MzhmZDRiNWIsIDB4ZWEwOTM2OGQsIDB4ZDJiZGVjOTUsIDB4OGQ5NDcyOGEsIDB4YzQ2NGI2NjcsIDB4N2Y5ZTQ2YWYsCi0JMHg4NmRkOWM2MiwgMHhmNmE0YjU3MiwgMHgyYjZmOWU1YiwgMHg1ODIxN2NhNCwgMHgzZmFjNWExMywgMHhjZjY5ZWI4ZiwKLQkweGRhYzUzOTA5LCAweDExN2Y4OGIzLCAweGZiN2Q1YWNhLCAweGM2N2MwNGY1LCAweDVkZTM5YmVmLCAweDNlY2M4YjMxLAotCTB4ZTk3MjA2ZjksIDB4OGM1OWQyMDIsIDB4MWI2ZmI3OWUsIDB4ZTA4ZTMzM2IsIDB4NDk3MjhiNzIsIDB4M2QzOWU3ZTksCi0JMHg0ZTUwOTk3MywgMHhhY2ZjYjllYSwgMHhmODgxN2UwNywgMHgxN2ZmZmQwMSwgMHhkMWM4YWZmNiwgMHg2Y2NhNTk1OCwKLQkweDNlYzc3NTg0LCAweGI0YWRiMDY3LCAweGQzMzhmYWRlLCAweDM5MjFhZGZiLCAweDU1NzVlOGFhLCAweDg5NTg1ZjQyLAotCTB4MzZmZGEwNTUsIDB4ODA0ZTQzYjMsIDB4YjkwYmU2NzEsIDB4MGNkNmI0Y2IsIDB4MzE5ZTQzZDQsIDB4YTQwOWI1ZGIsCi0JMHhhM2RlODFkNywgMHg0YzY2NzkyMSwgMHgwNjU4YmQ0MCwgMHg0ZmQxMmYzZCwgMHhkZjg3MzNjZiwgMHgzNjZiM2M5MiwKLQkweGZkYjE0M2RiLCAweDJmZWZkNmFkLCAweDMxNTdmOWU2LCAweDQ0NGI0MjRmLCAweDMxYzg1NzQ4LCAweGYyM2RlMDNiLAotCTB4YTEyNzc2NGUsIDB4ZWIwMzU3YWEsIDB4ZTc5MDcwMWIsIDB4NmRmYTEyMTMsIDB4N2FiYTA1NWEsIDB4ZmE5NTgyNTIsCi0JMHg3YzExZjgwMSwgMHhjYTE5ZTc2MSwgMHgyNDNjYTUwOSwgMHhiODQxZTM5YiwgMHg0N2ZhNDhjMywgMHhlMWEyYzQ1NCwKLQkweDlhZjBmYzhiLCAweDExMjNiZDY5LCAweDViZmZlYjBlLCAweGJmYTg0YWY2LCAweDFiYjMzZmZkLCAweGJlNzAyNWYxLAotCTB4M2ZkYzA5NDUsIDB4Yjk4OTBiZjEsIDB4OTc1Nzg4MzQsIDB4NDVhZjU0ZjUsIDB4OGZlYmJlZDcsIDB4MzRhNWFlZDAsCi0JMHhlZDc2ODZjMywgMHhkODIxZTQzZSwgMHhmNDllYTg0ZiwgMHhlNjEwOTZhOSwgMHg5OTY5N2E0MiwgMHg3ZDQ2ZTkxYywKLQkweGE3YjQyZGVjLCAweDg4NjYxZTkwLCAweDdjNDYyNmY2LCAweDQwYzY2NWJhLCAweDBkMDM4N2UyLCAweGYzNWMxODAwLAotCTB4YWY2ZjAzNGEsIDB4MjY0MWY0NWIsIDB4OTYzY2JmZjYsIDB4Yzk0YWM3ZTQsIDB4ZjQ4MTM2YmQsIDB4Y2JlNDk5MzUsCi0JMHg2YThmYzE0OSwgMHg2NTMzYmNjMiwgMHg5Y2I5YWYyOCwgMHg5MzljNzBjMiwgMHg2MTU2OTc2MCwgMHhhMjIwOTJiZCwKLQkweDdiMzA5YWJiLCAweDdkZDdmMjBjLCAweGRmMTMyZGZmLCAweDc5MGUxOWFiLCAweGYyMjVmMTMzLCAweGI2NGNkNGM3LAotCTB4ZmU0MTg0YzcsIDB4MzUxZmIxNjEsIDB4NjdmYWVlYjUsIDB4NjljOWJmYjEsIDB4MzI4MWFlYjQsIDB4ZTJmNTQ0NWIsCi0JMHhlOTlmM2Y3OSwgMHhmZGM3M2I3OCwgMHhkYmQ0NWFjMSwgMHgyMGM1MDI0MSwgMHg0ZTI4NWVmYywgMHgyYTA3Yzg2NiwKLQkweDQ0Y2VjNjEzLCAweGY3ZWM1MmJjLCAweDI4ZGY4MmU5LCAweDYzMDM2M2ZkLCAweGZjNjNlYTJlLCAweGY1Zjk4Y2RmLAotCTB4MDdhYmE0MjYsIDB4MjAxZDRjNGIsIDB4OTJjOWQ4MzksIDB4YmY2ODIxMTUsIDB4YmQ5MGU4M2UsIDB4MWU1YmQ0MDYsCi0JMHhkMzVmYjNjOCwgMHg3ZmIwMTIwYiwgMHhiM2MyNGNmYiwgMHhmMjdlYzU2MiwgMHhiZGI4NDNjZSwgMHhlYjY0NjNkZCwKLQkweDdkODQ3ZjQ5LCAweGRmMWViY2NkLCAweDIyNjMzYzJhLCAweDUyYzdlZGZjLCAweGYzOTdhNzAzLCAweGQ3NDgyZjM4LAotCTB4NzE0YTNiMDcsIDB4ZTM0ZDU1ZGUsIDB4Y2FlZGZjMjMsIDB4ODc1N2YzMTksIDB4ZjE4YmRkMTIsIDB4MjNkYjU2MmUsCi0JMHg1ZWExMjc0ZSwgMHgzMmE5NDA1MCwgMHhjMTRlMzI5ZSwgMHhlYTVkYTMxNCwgMHg4MThkZjY4ZiwgMHg0MjM5YWFmNCwKLQkweDc4MzJhZDBmLCAweDRkZmQyMWE3LCAweGEzMWUzOTM3LCAweDY0MmVjYTcxLCAweDdmZDhiZWExLCAweDljM2Y1YTRhLAotCTB4MzJmYmY3N2YsIDB4MjUzZDNjNDMsIDB4MzIxNGY1ZjYsIDB4NDVhN2M0NmMsIDB4NGMyZjg0MjEsIDB4OGViZjFkZTQsCi0JMHhmNDFjZmQyMCwgMHhjNzM3YzIxYSwgMHhkZTUyODZlZiwgMHhjY2M3YjdhMSwgMHgxYzVjZmM0NywgMHhjYTcxZjg0YywKLQkweDcyOWZiZmMyLCAweGNkN2UxMTg2LCAweDg3Zjk1ZGZhLCAweGFhN2JlMDBjLCAweDc4Nzg0ZjUwLCAweDNmMjY0NWFhLAotCTB4Y2E5NmRmY2YsIDB4YjljMDNkNWUsIDB4NjdkNWNhNmIsIDB4ZDc1ZGEwNTMsIDB4Mzc3MmFmYjIsIDB4ZTJiZWRhNDMsCi0JMHgzZjk0MzhmMywgMHg0YzU0NTZiMywgMHhjYWIzNzZjMiwgMHhmYzhmZGQ5NiwgMHgzZDc0NDZmOSwgMHg0NDEwNjljYiwKLQkweDM1YjZlMWNjLCAweGQ3MTFiZWMxLCAweGQ1Y2E3ZmQ5LCAweDAzY2JlNDdjLCAweGNmY2Y5ZGNiLCAweDA5ODNmMjg3LAotCTB4Y2Y4ODY3OGUsIDB4MTEyYmRiZTgsIDB4N2Q2Zjk1MWUsIDB4NzNmYTg3MTEsIDB4N2IyYmYzNzcsIDB4NmRmZDIxNWEsCi0JMHhmYTc5ZTM4OCwgMHhmOGRlZTJiZSwgMHhiMDk5ZDhkNSwgMHhiMGI1MmFiZiwgMHhiNzNmODA1ZiwgMHhjNDVlM2EyNywKLQkweGJjZTM1NWVmLCAweGEyZWVkODI5LCAweGUxMWYyZGFlLCAweDlhZGQ5NmM2LCAweGE1YTE3ZGRlLCAweDc2ODQ5ZjdlLAotCTB4MjU0YjUwNjAsIDB4MGIzYmIyYTUsIDB4NzkyOWQxZTcsIDB4ODQ0NGE1NDMsIDB4YjAwYmU4MjMsIDB4NmYxNjhiZWUsCi0JMHhiOWUyMTg2OCwgMHhiN2NiYzNkMCwgMHg1MzQ3ZDdhYiwgMHgwNzdlMTQ4YiwgMHg5MWVlNTc2OCwgMHhiM2QyMjZlZCwKLQkweDZmOWM3YWRkLCAweDI4NzJmZDYwLCAweDU4Yjc3YWE3LCAweGJjM2NjNjVlLCAweGE5ZTlhYzNjLCAweDdiN2VmOGJiLAotCTB4MTc5ZmIwYmQsIDB4YzU2ZjI0NzYsIDB4ZjdiNGJlZmQsIDB4M2I3ZjE0OTUsIDB4N2ViZDMwMzgsIDB4MTdmZDdjYmUsCi0JMHg4ZTAwYmYxMSwgMHg4NzQ0YTExNywgMHg1MDYwZDVmOCwgMHgzYjVkN2ZkOSwgMHhkNWY4NTQ2MiwgMHhiZGQ1MjNiNSwKLQkweDc2MmY4ZmRlLCAweDZjYzFiZTA5LCAweDg4YzlkYzllLCAweDJlNGY3NmY3LCAweDlmMGE1NWVhLCAweDE2NGY0NjYwLAotCTB4OWU2OTZmZDksIDB4MTQ1N2I0MmMsIDB4M2QwYWMzM2UsIDB4ZjZlZTU0MjksIDB4N2RmZDYwYTQsIDB4N2Q5YWNmNjgsCi0JMHg4YWVkOTZlMywgMHhmZGNmNWRhZCwgMHgzNjRkMmU4ZSwgMHhjNTZlODdlNiwgMHhjZGVmZDJiYywgMHg1OWJhOTdkNiwKLQkweGJiYTdjYWFmLCAweDA5ZDNmOWQ1LCAweDczYjY5ZmRjLCAweDgzYjE1ZWE3LCAweDMwNDc2MTY1LCAweDU2OGZiMmFiLAotCTB4NWMxMWFmYWUsIDB4ZTA1N2FhZmUsIDB4MmU2YzY4ZjIsIDB4YWZlMDBkZmEsIDB4ZTczNzlhMDQsIDB4ZGRiOTNiZTMsCi0JMHgyM2I4NmZiYywgMHg2MmE5ZjkxNiwgMHg4MzBiZWY5ZiwgMHg1MWNhMDY3YywgMHhhZjI1NmYzZSwgMHhkZTcwMjFjMCwKLQkweDIwYmFmZTJiLCAweDk2N2JmZDE2LCAweDRlNTA4ZDQ0LCAweDNmODg1MTZjLCAweDJmOWM0ZDJiLCAweGJlODFkNGFkLAotCTB4NDk3NjgxOWEsIDB4NWFkM2M4YzksIDB4ZDE2YzU3YjQsIDB4MWMxZjVhYzUsIDB4NmUxZTZjMTYsIDB4Yjg1ZDNhNDQsCi0JMHgxZmQxYjg2NSwgMHgxZjZlNTYxZiwgMHhmMzBhZDg3OSwgMHg2YjVkYjhiYywgMHhkNGFmMjljMywgMHg3ZDQyOWZiYSwKLQkweGQ5NzZlNTZjLCAweGRkZjQ2MmUzLCAweDE3ZmE4NzY4LCAweDYyOGYwN2NkLCAweGI4NWIwNWJkLCAweGJmNjk0MjlmLAotCTB4NzQ0ZTczNzAsIDB4ODczY2RmYjEsIDB4MzNjMzU3NmUsIDB4MGZjZWEzZDMsIDB4MDdlNzUyNmIsIDB4ZjM5MWFlYTIsCi0JMHhkYzM3NmYzZiwgMHgzYzhmY2VhYiwgMHhmZDlmY2VhYywgMHgxMGQzYTNjYiwgMHhkNzY0NGFlZCwgMHg4N2VhMzI1MywKLQkweDQ2MWZlNzlmLCAweGRmNmU3MWI5LCAweGRmZTRhMTFiLCAweDE1YjhhMmY5LCAweDliODVkZWY1LCAweDdkODY3MGQ1LAotCTB4NzAxZjUwOTMsIDB4MmU0ODkzNmQsIDB4ZTkwM2JhOTYsIDB4NjViYTZmYTMsIDB4ZDdlMmI5NmMsIDB4OTNjN2YzNGIsCi0JMHhkNTZhZTYzMiwgMHhiZjVmNWZjNiwgMHhkOWE2Nzk5MywgMHg3NGI0OGZkMSwgMHgyM2QzYzhmMSwgMHhlMWRlZmQ3ZCwKLQkweDdiNDdhNGQ5LCAweDFiZGM3MDI3LCAweGRiMzMyOWQxLCAweDE2NWY2OGFkLCAweGVlZGZlMjhkLCAweDdkOTYzYTVjLAotCTB4NmQ4ODIyMDUsIDB4Zjg4Zjk2MzgsIDB4NDQ4NGY0NTcsIDB4ZjVlOGI2ZjIsIDB4MmY5MTc3ZDQsIDB4MzE5OWVjNzcsCi0JMHgwNTY5ZDI4MSwgMHhjZmM1MGYwNCwgMHhmMjQ1YjBiMiwgMHgzMmRlNDA4NiwgMHhmY2VkZTM4YSwgMHhjMTliOTJjZCwKLQkweDMyYWVlN2JjLCAweGM1NDFmY2E4LCAweDU4ZjNkNDFiLCAweGJlZmVhMzUwLCAweGRmYzBlOWIwLCAweGM0YmZlODI1LAotCTB4ZTUxZTkyZjgsIDB4NDMxNmM5NTYsIDB4ZmRjYjFmODAsIDB4NjVlMWVhMGUsIDB4ZDlkOTE4ZTcsIDB4MTgzZjc1NjUsCi0JMHhjZDczZjJmYSwgMHhiYWUxZDY1NywgMHhiOGZhZTE5YiwgMHgwN2QzZTc4YSwgMHhmODA2NjM0ZiwgMHg4NTdlZmVmOCwKLQkweGZlYTExMjMzLCAweDMyYjUzNTlkLCAweDM5ODJhZGMyLCAweDkyMjRiMzFlLCAweDg2MGRlOTlkLCAweDdkMDAyYzc5LAotCTB4OTA2OWY1MDksIDB4MmJhZWI0YjcsIDB4MGRiOWZiOWIsIDB4NGNjZTU0ZjEsIDB4YjU4NTdlNTAsIDB4YmUxY2EyZTUsCi0JMHhlMzYyMThkMiwgMHg1Y2I2YjBmZSwgMHg0MjE3ZTQwYiwgMHhjMjU2ZTExZSwgMHg5YzdjMTIzNiwgMHg4ZTY1N2ZjOCwKLQkweGY5YmY3NjJmLCAweGU3ZjkzZWUyLCAweDhmYWU0NmQ5LCAweDAzZGViNTNiLCAweGQ2NzI4NzA4LCAweGZmNzBlZDRlLAotCTB4NjEzOWViZmMsIDB4NTFjMzI3NWQsIDB4Y2Y2ODA4ZGYsIDB4YWYwZmU0NmMsIDB4ZGY2OWViMzIsIDB4MzA3ZTlhYWEsCi0JMHhlYzU3N2ZmOCwgMHg1MTJlYzUwMCwgMHg1OWZmNmRmYywgMHhlMjEwNzBmNiwgMHhmZWM5NmFmNSwgMHhkNGM2NTFiYywKLQkweGYxMTVhN2JkLCAweDcyNGNkNGI4LCAweGNlNWFlMWZlLCAweGQ5ZDA2YmNmLCAweDZjZDdmZDAyLCAweGYzN2QyNzRhLAotCTB4ODI5ZWM5NjEsIDB4NGM5YjY1ZWIsIDB4MWU4MTA3NjQsIDB4ZGIzYWJmMTgsIDB4M2U4MWQ3YTcsIDB4OWZhMTMyZTgsCi0JMHhiZGM4MzRiOCwgMHhlNzBmYmYxNSwgMHg4Y2NkNzlmNiwgMHhkZTE3ZDIxNCwgMHhlNDVlM2M5MiwgMHgzODY3YWVjMywKLQkweGU2NGNkNGJkLCAweDY0ZjM1M2Y4LCAweDBjZmY3ZDBjLCAweGZhODMxYWE3LCAweDZhNGJkNzIyLCAweDNkNzJhNTM2LAotCTB4NjBmM2U2NTYsIDB4ZmUyMTBiYmYsIDB4ZTYyZjEzNTgsIDB4ZjM0YWMwMzUsIDB4YzlmNWY0NTIsIDB4ODk3M2M3MTYsCi0JMHg1ZTJjZWI3ZSwgMHhmNDI0N2EwMSwgMHg5OTViZmM1ZiwgMHg5NTgyOWZhMSwgMHgzYzkyZGM0NCwgMHhhYTcyMTdhZiwKLQkweDhkYzk5MzY3LCAweDUyZDNlZWZlLCAweDNmOWUyYjYxLCAweDEzZGZiMzVjLCAweDFkY2ZkZjM5LCAweGVhMjZkZjZiLAotCTB4NThiYzVmOTEsIDB4NGZmZDc5MzMsIDB4MzU2N2JjNzEsIDB4N2VmMTk1ZDYsIDB4NTNkYmI3ZjAsIDB4YmQzZmNmNTAsCi0JMHhmNzAyMzRjOSwgMHhjZTcwZDRlOSwgMHg3MmM3NzNiNywgMHgyNWQ4MDFiZiwgMHhlZTkwYWRmNiwgMHhmY2E4ZDQ0OSwKLQkweGI5MTI3YmFiLCAweGQxM2ZiMDlkLCAweDNjZTllOTRhLCAweGM5MGM0N2VlLCAweDBjZmYyNDJlLCAweGYxZjExNWVjLAotCTB4MTdlYzc1YzAsIDB4ODVmNThhZWQsIDB4YzdkMjdlNDcsIDB4YjBmODE0N2MsIDB4NGU3ZjdjNzEsIDB4NWM5MTIyM2YsCi0JMHg1OGE0ZjU4NCwgMHg3YmZiOWYyMCwgMHg0ZTc1ZjkxMywgMHhlY2EyZjkwYiwgMHgwZTUxZTAwYiwgMHhiZmMxNWJjOSwKLQkweDQ5ZmM0NTllLCAweDI3ZjAxNGM0LCAweDUxZmMyZmJiLCAweDYwYzNjN2UzLCAweDdmMTA5OGVmLCAweDFmNjgzZjAwLAotCTB4MzI3YWZjMTUsIDB4ZjAxMWY2OTMsIDB4ZTdhMWYwODcsIDB4ZjAwZGQzNDksIDB4Mjg1ZjZkNDcsIDB4ZTVhOWFkZWIsCi0JMHg1ZGEwNDdmNiwgMHgzMjcwZjgwMSwgMHhhMGJjZWZkMSwgMHgwNDI3YWMyNiwgMHgzYzE0YjdjZiwgMHg4ZTc3NWE2MCwKLQkweDIwNWEzOWZmLCAweGU2YzllNDFlLCAweDRiZWZlNDM0LCAweGVhMWIyMGE0LCAweDdmODQ0YmRkLCAweDQ2N2NjOTdiLAotCTB4OGI2NThkZjMsIDB4NjhkN2E0MjQsIDB4MGVjODk1ZTYsIDB4ZWMyNjZkNjYsIDB4MDAzZDI3ZWYsIDB4ZmMzYTNmNzMsCi0JMHhmMzIzNTVlOSwgMHg1ODYzN2I5NywgMHg4ZjdmMmE5OCwgMHgzZjU1NDYzMSwgMHhmYWFmMTJjZiwgMHhiYTc0NmY3ZSwKLQkweGViNzhmYmVhLCAweDYyN2U1NTcwLCAweGZhYWExZGRhLCAweGE4YzZkOWY3LCAweDM1MWIzZmYyLCAweGIyN2Y1NTVlLAotCTB4NmYyYWIyN2QsIDB4Y2UyZDE2NjcsIDB4NjBiYWE1YmYsIDB4NmYxZmRhMjQsIDB4NWU5MjE3NTcsIDB4ZDE5NzA4MTAsCi0JMHg1YmFmODM4NiwgMHhlYTQ2MjA2ZCwgMHgwMGI0NTNiNCwgMHgwZWZkZDFiZiwgMHg3Yzg3ODkyZSwgMHgxNGQzM2FmZiwKLQkweGU4YzdlMDJkLCAweGUyNTc4M2Q4LCAweGQ1YTI2MDJkLCAweDQzZWZmMTA1LCAweDgwNDk1ZTBmLCAweDMwNWQ3NDdjLAotCTB4YzhjNWRmY2YsIDB4Njc1ODFmMWUsIDB4OTMzMmUyOWUsIDB4MDkzNjMwYmYsIDB4ZWFlZDNjZTAsIDB4ZjY2ODQzYTIsCi0JMHhjYTdjYjI3ZCwgMHg3NWE0NzhmYywgMHgzZmYzMzI2NywgMHg3NTY2ZDhiNywgMHhlNTNkNjE4NCwgMHg1NDdmNTJiYiwKLQkweGVmYjUyMTUyLCAweGZjZjljY2JlLCAweDM5M2ZiODI3LCAweDc2MGE3YWZmLCAweGIxOGZjOTE3LCAweGFjNmMzNDFjLAotCTB4NWJlNzRjZDEsIDB4NzhiYmE4Y2MsIDB4N2MwY2FmY2QsIDB4ODYzM2IyNTMsIDB4NmE5NmI5ZmUsIDB4YzIyZDY3ZDgsCi0JMHhiN2E5NDhjYiwgMHhjMWU5NDJkYSwgMHhkZjRhNjhlYSwgMHg2MmIyYjZhZCwgMHg3NTZiNjc4MCwgMHhhYjg3YTUxYSwKLQkweGE0N2U1NDZkLCAweDFmYTUxNDdhLCAweDNkMjlkYjU2LCAweDY5NDA1ZDVhLCAweGE1MjE3NTViLCAweGIzNGYyODEyLAotCTB4YjM2YzZmOTAsIDB4M2MyMWQ1YWQsIDB4MzNiMGRhNWMsIDB4ZDlmZTNlMzAsIDB4ZTFmMmRmMTcsIDB4NTE5ZDk2YWQsCi0JMHhmZjJhMTVmNiwgMHg0ZGNmNjRjYSwgMHhiMjBkNzVhMiwgMHg5NDViOWY5MCwgMHhhOWZmZGExZiwgMHhlOGQxZjkxNSwKLQkweGY1ZTEyMzZjLCAweGQ1OWI3MzY4LCAweDQ4ZjNjZDk4LCAweDk5OTc3NTY3LCAweGViY2ExMzU3LCAweGY1ZWJmZDY5LAotCTB4ZmU0NzBjZjcsIDB4YTY2OWRhMzAsIDB4NTBiZDQ5N2EsIDB4YmRlYjBiMmYsIDB4ZjJjNWEzMTcsIDB4Y2ExYjdhNDUsCi0JMHgzZjA0ZTdjYiwgMHg5MDFjZDEwZSwgMHg1ZTkwOWM3MSwgMHhjODM0MzY3ZSwgMHgxNDRlZjljMCwgMHg1ZGY4NWZhOCwKLQkweGY1ZDVhM2YxLCAweDg3MDZmMWYyLCAweDlkZjNhMjJmLCAweGM0Y2RiM2MxLCAweDE1YjkxNDdmLCAweGMxOGRlMTFiLAotCTB4ZDEyZWM1ZjksIDB4ZTY4ODc5NTMsIDB4MmVmZDE1YjgsIDB4MDlkZWQ1NWQsIDB4ODRlM2FmODgsIDB4NjdhNzFmOWMsCi0JMHhhNjBmMzg2OSwgMHg5NGY5MjIwOSwgMHgxYWRmN2YyNywgMHhjZGM1ZjkwYiwgMHgzOThjNzBkMiwgMHhkYzI4NjcxOCwKLQkweDk2YTFmNjQyLCAweDZmZWIzMWQzLCAweGI2YjhmYWUyLCAweGE4MTVmNGFkLCAweGQ2MzIzYzc3LCAweDE1YTExZWI2LAotCTB4ODEyNThmYmQsIDB4NTU1Nzk1OWUsIDB4ZjI3MjgxOTAsIDB4ZjQ0OGRiMzgsIDB4MzFkNDNmM2QsIDB4NmE2ZGYxMGYsCi0JMHg0NmJkZDAwNiwgMHgxM2Y0MDkyMCwgMHhmYzRjMTA1ZCwgMHg2YTdmN2JiMywgMHg1M2NkZWEwZSwgMHgwY2JkZDYwYywKLQkweDI5MmNhMmU4LCAweDRhN2VmMDg3LCAweDY0OGU2YjNmLCAweDQ0NWRmY2MxLCAweGFjYTI1MzI3LCAweDllMWIyNTdiLAotCTB4MTk0Y2U0OWUsIDB4NzFiZmM3NzcsIDB4ZDI0OTNkMmUsIDB4N2NhOWM3ZmEsIDB4YzMxZTM5MjIsIDB4NWMxNDU1ZjksCi0JMHhmNWY5ZjNkMiwgMHhlYmY4OWU5MCwgMHhiM2YxMmIyNCwgMHhjOTE5MDcwMSwgMHgyMWYxOWVkZiwgMHg3ZmQxNWZjNCwKLQkweDYxZjkxOGI1LCAweGViMDczNTg2LCAweDQyN2FlOWM1LCAweGZiYTBlZTMxLCAweDVkYzUyZDdiLCAweDA3ZDBjZDQwLAotCTB4MmYxZWZjZmMsIDB4OGM3OGYwYjUsIDB4OWExYmJjNDAsIDB4NTU0ZGU1Y2MsIDB4YWEwMzhmMTIsIDB4MjkxYTM2OGMsCi0JMHhjZjljYjk2ZCwgMHgzMGEyNGUyOCwgMHhkMDM2ZWQwOSwgMHg1Nzk0ZmIxZSwgMHhkY2I5OTM4MywgMHhlN2EzNWY4YiwKLQkweDQ5NjQzYWZlLCAweDEwN2I2NTMwLCAweDhjMmVmMjUzLCAweDJjN2RhOTA3LCAweGVjZWU1MTQ4LCAweGM3YTY0ZTAwLAotCTB4ZTg3Zjk0NzYsIDB4NTQ5MmUzZjcsIDB4ZGY1OGVkZjUsIDB4MTFkOTlkZjcsIDB4OWRmYjRhOWMsIDB4YmY3ZTkzNzUsCi0JMHg0M2M2MmI0YSwgMHhkY2MwNTk3YywgMHg3ZTQwODRiOCwgMHhiODcyNDVmZSwgMHhmYjQxMWU3MiwgMHgxMzdmNjJmYywKLQkweDMyNDk5M2Q5LCAweDcxZTAzN2UwLCAweGZjODdiMDZjLCAweDhlMjY3NTdmLCAweDllMWE0OWVmLCAweDc3Zjg2OWQ2LAotCTB4OTNlODEwN2QsIDB4NzkwYzFmOTAsIDB4M2VmYTc3M2MsIDB4MWU0OWUxZDksIDB4MDU5OWVkNDAsIDB4YTg3YmNiZGIsCi0JMHhkMGYzMGM3ZCwgMHgyOGY3Y2E3OCwgMHg5ZDQzNWVmNCwgMHgzMDRmMjA0MSwgMHhmYTZiMmQxZCwgMHhlNDk4ZGI4NCwKLQkweDdkMjExZjMxLCAweGY5MWYwMTc3LCAweDc3NWY4ZmRhLCAweGY1MmU4NzA1LCAweDZjNGFhN2RmLCAweDM3NmZmNjZmLAotCTB4ZWQyOWRhOTYsIDB4ZDg2YTk2MmIsIDB4ZmZjNDExZDcsIDB4OTIyYTVmMDgsIDB4YjczNzc2MzQsIDB4NTA5NWRmMzcsCi0JMHg3YTZkNjA0ZiwgMHhiYjRhNmI5NCwgMHhiZWVmYzAxMywgMHgwNWZmNzgwNiwgMHgyN2E2MWZmOCwgMHhmOGUxZWY4MSwKLQkweGMzZGYwMTlmLCAweGY3YzA2ZmY0LCAweGYwMTRmY2IwLCAweDgxZGI0YzNkLCAweDk3Zjk2MWVmLCAweDlkMzBmN2MwLAotCTB4MWIyNDMzMzYsIDB4NjlhYWE0ZTksIDB4ODU1YWZiMGMsIDB4ZmY4NzNhZjcsIDB4MzE4OWRkZjksIDB4ZDljYmUzN2QsCi0JMHg5ZWQ3NmUyNCwgMHhmYmZiZWY4OCwgMHg3YzcxMjc3ZiwgMHhkZjM3NzEzYSwgMHhkNzkwNmViNywgMHhmZTAxOWZhOCwKLQkweGRmODRiMmFkLCAweDg3Nzc2ZTU4LCAweGVmOWU3M2YwLCAweGQ3N2ViOGQyLCAweDVmZjNjMzFkLCAweDNmYThlOTI2LAotCTB4YzY2ZDg2YmIsIDB4ZTlhNWRmZjYsIDB4ZTY0OWVmMjksIDB4Zjg1YmEzNzIsIDB4YThmZjAxMmYsIDB4YzMxZTY1N2YsCi0JMHg3YWFhNGE4NiwgMHg4MTRkMjRlZSwgMHhkZWY5OGZiYiwgMHgyM2M3Y2M5ZCwgMHgxYzNkNDRmYywgMHgwZmRlMzFmMSwKLQkweDg0YWQyYjNmLCAweGYxNzg4MTlmLCAweDI0OWJhMDg1LCAweDU4YmJjNzAzLCAweDI3YzhmMWU0LCAweGJlNzQ0Y2EzLAotCTB4ZTNiNWYzMGEsIDB4YzQ5ZDc0NzksIDB4ZmMzYWYxZjEsIDB4ZTc3YjcwZDQsIDB4N2U4NGZjM2EsIDB4ZTc4MDRlMDgsCi0JMHgwOTNmYTQxMiwgMHgzNTI1MWZjMCwgMHg0NWI3Nzk4OCwgMHhlMDgyZmM4NiwgMHhhMGIzYTJkYywgMHgzMjI3ZWZmZiwKLQkweDZiZGIxNjAwLCAweDg0Y2U4ZjdhLCAweDEwYzhkOGYyLCAweGU0MWQ5ZTJiLCAweGQ0NWU2ZTNkLCAweGViYjhmZjE3LAotCTB4MzVmZjVkZGYsIDB4ZmZhZjU0N2EsIDB4NzM4Yjc1YmEsIDB4Mzc1ZDViOTMsIDB4OTdlNDEzZjEsIDB4ZjA3ZDNmODgsCi0JMHgxZmM4MjE4NywgMHgzM2Y4N2M3MiwgMHg4NDllZDkyNiwgMHgyNjRiNzRmZCwgMHhiYjgxZmEyZCwgMHgwMjJmMWM0ZCwKLQkweDFhNWRmYmQ3LCAweDNmMDU1ZmM3LCAweDE4ZmM0MGJlLCAweGJhYzNmZDgwLCAweGI5ZWI3ZDEyLCAweDgwYTBmZjM2LAotCTB4MTQ2NDJkZjUsIDB4OGZiODExMGYsIDB4NWJmMTVmMGEsIDB4MzljOTFkZDcsIDB4MjYwMWI4M2UsIDB4MDQxZWZjOTIsCi0JMHg3MWZkMWJmMiwgMHhjNzBiNjQ5ZSwgMHg2NzY3MDFmMywgMHg4MWY5NDI2ZiwgMHhmZmVhMDI3MiwgMHhmYWZkYzM0MSwKLQkweDU2YmVkZjBhLCAweDI2NzNjOTJlLCAweDM5ZjhhODY3LCAweDY3YjA3YjQzLCAweGNiZTg4MWJmLCAweGFmMjU2MWFiLAotCTB4NDM4MjVkYTEsIDB4OGY1OWQ5ZjksIDB4ZjZmNWYzMjUsIDB4YTBkNjRmNGUsIDB4OWRmNWQ0ZGUsIDB4MjdmMTQ1ZDksCi0JMHhhMTRlN2IwMywgMHg1OWI1ZDY3ZCwgMHg2ZDNkYjhjNywgMHgzYzgxMjQ5ZiwgMHgwNTdlOGY5YiwgMHg4ZGM1ZmEyYiwKLQkweGExN2I2ZTc0LCAweGQ0M2Q5OTFhLCAweDg1M2U1Y2YzLCAweGYzZDU2MTc2LCAweGU4MDIzMzMyLCAweDlkYmZlN2U0LAotCTB4NjBiMmY4ODYsIDB4N2E4MmNlYmYsIDB4NGZjZGNhYzcsIDB4M2I3YzQ2MWYsIDB4NTE1OTI4ZDMsIDB4YzIzNTc3ZGUsCi0JMHg0NTdlYTFiMiwgMHgwNGRiODg0ZCwgMHg4ZjIxZjNmNSwgMHhmNTlhMTdmNSwgMHg4ZjFmMmI2ZSwgMHgxOGE3NGNmNCwKLQkweDY1NTM2YmVmLCAweGVmYTVmYTAyLCAweDcwNDc1ZTc5LCAweGM3ODNiMDVlLCAweDc5YjNiYzMxLCAweDlmNjM5ZDA5LAotCTB4MGEyYzRiNzEsIDB4Y2JjYmU1ZGEsIDB4OWZkMDYzNWEsIDB4MzM2NGEyZjgsIDB4MzlhNzNiNDAsIDB4ZWZkYTNjZmYsCi0JMHhjZDk4M2I2NSwgMHgzZDhhZmU4YiwgMHhiMmJlNzQyMSwgMHg3ZjFkNDZhMCwgMHhhNGRlZTI1MCwgMHg2NGEyN2Q0NywKLQkweGFjYmNiYThiLCAweDlkODc5ZDRlLCAweDZjZWI3ZTIxLCAweDNjMzNjNzUwLCAweDE1ZTIyYzkyLCAweGYyNzBkOWQyLAotCTB4OTM4NGQ2MzMsIDB4ZDNmMGEwMWUsIDB4ZjYzMWQ5MWIsIDB4MzI0ZjljYzUsIDB4ZmEyNDRkZjYsIDB4ZGZmZGU1NDksCi0JMHhlNjY5N2RjNiwgMHhkZjIyYzlmOSwgMHhkZjRiZjkwMSwgMHhlMDUxN2RmMiwgMHhiZjljYTk1MiwgMHg0ZjZjYjBjNywKLQkweDk5ZGZjNjM2LCAweDU1Yzc2ODJjLCAweGNhMTU3ZjM2LCAweGE4MmNlZTMwLCAweGNmYTI3ZWZkLCAweDUzOGE2NTM3LAotCTB4YmIyNGQ3NWEsIDB4MmQxNWJlMTAsIDB4M2UzMTk3YTYsIDB4MzFlZjcyYWYsIDB4ZTEwNDM1YmQsIDB4MDFlOTA4ZmUsCi0JMHgxYWQ3MzJmNywgMHgxYWJjYmZiNCwgMHgzYzIzNmIwZCwgMHgxNWZmMjM2YSwgMHgyMDJjZjdiMywgMHhjOWIzNzBiZiwKLQkweDZmM2RlNzQyLCAweDEzM2FkYTdlLCAweDY2MjU3YmYzLCAweGRjMWM3ZGMyLCAweGUwYjI3ODRlLCAweDc1Y2U5OTc5LAotCTB4YjkzZTZhMTksIDB4NzE5MTNjM2UsIDB4M2Q5ZjcxNWYsIDB4MTZiZjY4ZmQsIDB4M2VlM2JlZTIsIDB4M2VlM2JlYzMsCi0JMHhkODlmYjhjYiwgMHhlNmVmNDQzZSwgMHhjY2VkYzI3OCwgMHhmZWY5ZGIzMywgMHgyZjllZmIyYSwgMHhkZjkzZDA2ZiwKLQkweGYzZWY5NmI4LCAweDNmZDdjZjNkLCAweGEwNzg0NDFiLCAweDY4MGYwMjYzLCAweGUxNmNjZmRmLCAweGJmZGZhZWZiLAotCTB4ZjExMDNmNWEsIDB4MGYwMDM2YjcsIDB4ZjBkNzBkOWEsIDB4MWQ3N2U3MDAsIDB4N2ZlYzA0MWUsIDB4MDdjYmYwYTksCi0JMHhmZWUwNDFlMiwgMHg0NGY4MmJkZiwgMHgxMGZhM2M5ZSwgMHhmZTJjZDljNiwgMHhmMTU3MWYwNSwgMHhlZjBlY2Q3MywKLQkweGFhMDQ3OGFjLCAweDExZmYxYTljLCAweDM5MmNkZDlhLCAweDA0OTYzNWZhLCAweGI0MjFiZDcyLCAweGMwZjkwOWIwLAotCTB4ODZiYjA5ZjEsIDB4ZmMwOTljNTMsIDB4OWM1MjQ2MzMsIDB4ZGRlZmMxMWIsIDB4MDUzZGZkNWYsIDB4N2UzYmJmZTksCi0JMHhlMjM3OTZmMiwgMHg3MDNhZmY2OSwgMHhjMTYxZGQxZCwgMHg5NmVlN2U1YywgMHgxYjk1MTJkYywgMHg1MzgwMDZiYywKLQkweGE0NTFmMDFlLCAweDgxYjZmNjQzLCAweDA3YmE5MWNlLCAweDMxZThmNDNjLCAweDY5M2Y3N2M4LCAweDQ4ZjZlMWI2LAotCTB4OTUxZjZlNzYsIDB4MTI3N2JjYjcsIDB4MzFhYzg2ZmQsIDB4OWZiMmFlY2YsIDB4OGU1MzdkODQsIDB4NmY3ZTE1ZjYsCi0JMHhlZmNhZmIwMCwgMHg3Y2IyNGUzYywgMHg0ZjNlZWQ0NCwgMHhjYWY1YTA0ZSwgMHhiMjY2ZGIxYSwgMHg5NTk4ZWE4MywKLQkweGUzYWY2M2NlLCAweGJkZjg4Y2Y3LCAweGExYmEwN2UyLCAweGY3YzAxNjNlLCAweGViOWVmYzdkLCAweDI4MzVjYzYxLAotCTB4YjE0YmU5MGMsIDB4YjQ3ZTE0YjMsIDB4MGY0YmY4NTAsIDB4MWI0NDc2M2QsIDB4MDNhY2ViODEsIDB4YjViZWUzYjgsCi0JMHg4ZmVhMWYwMCwgMHhkYjlkM2Q3ZSwgMHg4ZGQxZjkyYSwgMHhmMTE2N2ZhOCwgMHhjZTc4ZTAwYSwgMHg0NjlmNjhiNSwKLQkweGQzMzJmYzQ2LCAweDBmMDI5ZDdjLCAweDYwNWYxMTJiLCAweDA3ZDk2NTlkLCAweDc3NWY1MTQyLCAweDZjZTFmZTBhLAotCTB4NDk3ZjIxMGUsIDB4OGY5OGRiMTksIDB4ZTMwNjU1ZjgsIDB4OWJjMGZiNzksIDB4NDg3YmVkYjIsIDB4ZGUxOWJmY2YsCi0JMHg2NTViZmEyOCwgMHgzZmRlYmFhMywgMHgyNTBjOWY5MCwgMHgwM2Y5OTI3ZSwgMHhmYzY5ZGZlMCwgMHgzN2M3YzczYiwKLQkweDdlOGNlNGYyLCAweGNiZGMwNzE4LCAweDZlOTBmZGFjLCAweDUyZDcyNDZmLCAweGZiMjkwMzM3LCAweDM2ZWU5YmY1LAotCTB4Y2ZjYWFkMzIsIDB4MzNlNTUxNmYsIDB4ZmFhYWQxM2QsIDB4YWFhYzlhYzMsIDB4NjliZGMzZWYsIDB4MGYyM2VmYWEsCi0JMHg5Y2Y5NTRkYiwgMHhmYWFhNTFiNiwgMHhhYmI0OWZiNywgMHgxN2I0NzdmMiwgMHg3NWRmZWFhOCwgMHhlZjk1NTBhZSwKLQkweGZjZjU4MGNkLCAweGJkZDczOWM4LCAweGZlYWE5MmQxLCAweGQ1NDlhYjc4LCAweDA0MmE2ODNmLCAweDYxNjk4OTlmLAotCTB4MzM1ZWYyYWEsIDB4ZmE4ZGQzODcsIDB4ZWVhNmNmYmQsIDB4N2Y2ZmIxNTcsIDB4ZmZkZDRhMzYsIDB4ZGZiYWJiNjQsCi0JMHg2ZDg3ZGQ1YiwgMHhhMGI1MjcyMCwgMHhiOTA3NmY2ZiwgMHhkMDRlZTk4OSwgMHg2ZmEwYjVjYiwgMHg4ZTVlODAzNywKLQkweDJmNDE1N2Y5LCAweDdhMDNkNGM3LCAweDA2YmY5NjM5LCAweDFiZTYzOTdhLCAweGZjYzcyZjQxLCAweDMwMjNiMDNlLAotCTB4NDA1ZDU0ZGYsIDB4ODVkNTliZTksIDB4NzgzMzdlNTQsIDB4MGY3MThhYjUsIDB4ODg4ZjcxOGIsIDB4YzRkYjE5NzEsCi0JMHhlMDRkZmVlNSwgMHg3ZjY4YTFmMiwgMHhjMzZmYjQ1NCwgMHgzYzNlNDlmNiwgMHhkNjQ4MjhhYywgMHgxZDNhMDU1YywKLQkweDhmNWU3ZTEzLCAweGM1ZjY1YWU3LCAweGQ3NjhmOWVkLCAweGIzMmZiY2Y3LCAweGNjMjc0MGFkLCAweGRkNWMzZWUxLAotCTB4MDQ1MmU1MWYsIDB4ZWMyZmFmM2YsIDB4MGVmZDAwZjksIDB4MmQxMzdiOTUsIDB4YWViMDZlNzgsIDB4ZjhhM2UzZTksCi0JMHhiNjUxYWJiZCwgMHg2YzFkZGQyMiwgMHhmYjE0MmFmYSwgMHgxNDE1NzhiOSwgMHg5ZTQyOTFiYywgMHg3N2Y5ZGU0MSwKLQkweGYwZjVmOTQ2LCAweGM3ZDVlMzFkLCAweDk2NDUwMWVmLCAweGU0ODc5NGU0LCAweDI1MjRjNWQ0LCAweDBlN2JhNmVmLAotCTB4ZjQ3YjBkODUsIDB4YjZmZTc0ZWQsIDB4ZWZiZmJlODcsIDB4NmZiZmE5ZDEsIDB4Yjc3ZDU1YWYsIDB4ZjczYzdkNjAsCi0JMHhjZWM5YmFkNSwgMHhmNGE0ZDBiZSwgMHhjZWZhYTVlNywgMHhmYThlYzkyNCwgMHhlZmVkODVmMSwgMHhiNzM4YzFhYywKLQkweDExNDUzZDhhLCAweGRlNTY3ZTc4LCAweGRlNzIyYzcwLCAweGQyZmZjMDhmLCAweGM4MTk1ZGJlLCAweGExOWEyYmQ3LAotCTB4YmZhZmIzM2YsIDB4Yzg5ZDY2OGEsIDB4OTMzYmY5ZjMsIDB4MjM4N2U0ZjYsIDB4MTg5MDZlZGYsIDB4NmM4YjkyOGEsCi0JMHg5NTBkYzUyMywgMHg5MTNiZDUzNywgMHhjZGE3OTUyZiwgMHg0ZTM5ZTFkNCwgMHhmNjE2NDdiNywgMHg3M2MzOGYzZiwKLQkweGM3ZDcxODVhLCAweGU3NDI1NzNjLCAweGYyN2ZiZjQxLCAweGUzMWZiYTFjLCAweGRlNWJiYTY5LCAweGJiNzFjNTA5LAotCTB4ZGY4NjllZjEsIDB4YzI5MTNlZmUsIDB4NTIyN2RhZjUsIDB4OGI4N2JkZjgsIDB4NjI4NGVmOGQsIDB4Y2YzYWM1ZmMsCi0JMHg1YWVlMWMzYiwgMHhhMGZmYWQyZiwgMHg0YTQzNzdjOCwgMHg2OTkyNmVmMCwgMHgzNTU3YTVmZCwgMHg3ZjRhMGZiNCwKLQkweGQ0YzhhNmNmLCAweGU0YTZmOGNmLCAweDcxZDc1YzEwLCAweDhkY2YxZjBmLCAweGNlMzAwNWMxLCAweDYyYTJhNGY4LAotCTB4ZTg5MWZmOWMsIDB4ZTkzMjM5MTksIDB4ZGM2ZmRjNzUsIDB4M2Q2MjY0M2QsIDB4OGU3ODEzZWEsIDB4ZjVkZDk3ZGUsCi0JMHg1NWI3ZTg5YSwgMHg5ZmJkZjdjNCwgMHhmMjJiN2FmNCwgMHgxMTA1MjNkYiwgMHg4ODA2NDljMywgMHhiODUzM2I3YSwKLQkweDc3YWY5MTlkLCAweDM4OWNhMTI0LCAweDFmOTJiNjZlLCAweDYyNDE0NTc5LCAweDQxZWZlZTA4LCAweGUwYmNiMTRjLAotCTB4OTdjYmYyNjUsIDB4OGVmMWYyMzUsIDB4MTE0MmRhNWIsIDB4OGUzNzhlZWYsIDB4NTE2ZjUxOTQsIDB4NzFjM2FiZmEsCi0JMHg2ZmFjZjhmZCwgMHg0ZmI0NWNkZiwgMHgzMzVhZWUyNSwgMHgzZmRiZTNmNiwgMHhiMTRlZWU1ZSwgMHhlZTIzYmI1MCwKLQkweDNmNTBkMzYzLCAweDRjMTY5ZTNhLCAweDllYWI0NWZhLCAweDM3OTc3YjlmLCAweDc4ZjZmZDcwLCAweGVjYWQ2YzRiLAotCTB4MTZlMTVlNzcsIDB4YTY5ZGQxZmIsIDB4NmFlZDdkYTEsIDB4MzM3YTg5ZDIsIDB4OWVhYTk5ZWIsIDB4OWQ1N2VmOGUsCi0JMHg3NzE2M2U3YSwgMHg1N2E4NTNjNywgMHhlOTk0NWYzYiwgMHhiNzUzOGVlZSwgMHg3ZmQ3MTIyOCwgMHg3ZTdhOGI3NiwKLQkweDRlY2UwMjI1LCAweGQyMzIzNzlkLCAweGNkOWQ1ZjBmLCAweDRjYzZlOGQ3LCAweGQwYWNkZTc4LCAweDUzZjY5NTg5LAotCTB4NjllM2M3ZDksIDB4MWUzYjJmNWMsIDB4MzkwYmVmY2QsIDB4NWUxM2Q0ZjcsIDB4NWI3ZGU0ZmIsIDB4YjExZGVhM2MsCi0JMHg0ZWUzYzFmZiwgMHgyYWQ3NjY2ZiwgMHg1ZDlmODBmYSwgMHhkM2FlZDBjNCwgMHg2OGU2MjQxNSwgMHgzZjcyN2MxMiwKLQkweDc5ZmVjNTJiLCAweDk3YjQwMGNhLCAweDA0MGVjOTBhLCAweDNmMjEwZjY0LCAweGZkYzNlYTA4LCAweGVkZmVmZjkwLAotCTB4YjdiNzFjNTksIDB4ZDQ0MGY0MTEsIDB4MTM0ZDhjODMsIDB4YWY0YWZlZjAsIDB4ZTYwNDA4MGQsIDB4ZTc0NWJiZGIsCi0JMHgxOThiZjYxNiwgMHg0MjA1ZDJmNSwgMHg3NTZiM2QyZiwgMHhiZTc4Y2FlNCwgMHhlYjQzNWNiOCwgMHg4MWRkODI3MiwKLQkweDgyNWQ4YTcxLCAweDEzZGE1ZGRmLCAweDA3ZDIzM2ZmLCAweGI0MTZjYjBlLCAweDcwZjFlZTY3LCAweGMwZDlkNjNkLAotCTB4NGY0YWQyZjUsIDB4YTM0NmVmZmMsIDB4YjNhMGRkZGUsIDB4NTM1YTA1NTksIDB4MmZkMGFjNWMsIDB4ZjViZDA4Y2UsCi0JMHgzZDFlZjJjYywgMHgyNWZiMjdkOSwgMHg1ZmY0MzRmNiwgMHhjZTg5YjRkMiwgMHg3ZTg0MmJhYiwgMHg5MDM3MjE1MSwKLQkweGIzNzBiMDllLCAweGJkMDAyZjVhLCAweGRmMmY5NTQ1LCAweDA4MzdhODFlLCAweDVkNDc5MDdmLCAweDcyNzdkOGFlLAotCTB4MjFmZDM1ZWEsIDB4ZDAxMWVkMWQsIDB4MGU5MGEzNGIsIDB4ZGNhZDUzYTIsIDB4OTNlYzI2NmYsIDB4MjhiNjk5MjUsCi0JMHg1YTc1ZjdhNCwgMHg0ZmM1MDRlYiwgMHhkYWFhZjA4MCwgMHhjZTI5N2FmZiwgMHhiMjBjZWRkYiwgMHhmNGIwYmQ5MSwKLQkweGY3NmI4MjRkLCAweGU5MGVkYzM3LCAweDhmMDQ2NjhlLCAweGRiZTFjNjZlLCAweGJiZjFjNGRkLCAweDhkYjkyNzRhLAotCTB4OTVkMDFlZDgsIDB4ZWU0YTMzZmEsIDB4YmE4N2E4ZTUsIDB4MmY4OTQzN2EsIDB4ZjQ4MDU2MzEsIDB4YjcwNjc4YjAsCi0JMHgwYmU4ZWQzNywgMHg4NTBiZjQ4NSwgMHgyOWY5MTQwZSwgMHg1YmJmYmE3MSwgMHhmOTg3MmVkYiwgMHg1NGU0ODdmMSwKLQkweDEzOGU3N2FlLCAweDQyNGIzYjcxLCAweDA2YmYyNDZjLCAweDlkOWViOTFhLCAweDhlMTllMjU3LCAweGVjMTAzMGY4LAotCTB4OWY5ZjgzNjgsIDB4MmRkOWEwN2EsIDB4NTJiYWJkNjEsIDB4ZTQ1NzE3ZWUsIDB4NDVhZDY0ZjMsIDB4N2UyYmZkODcsCi0JMHg0Y2ZjZTUyMiwgMHhiNzg5NWZlOSwgMHgxNmZmNjliZiwgMHhlYmVjZGZlOCwgMHgwZmRkZTAxZiwgMHhkYjI1N2RlMSwKLQkweDZlMzlmMjQ2LCAweDZkMmY3MmIyLCAweGIyYTNkMTExLCAweDZmODA4YjllLCAweDFmNDUxZmU4LCAweDczOWJlZTBhLAotCTB4N2U3YzgxY2IsIDB4Zjc0NmRkZmUsIDB4Zjk0M2YyY2MsIDB4NWM0NWYyM2MsIDB4NGYxMDdlNzMsIDB4YmY3MmE0YzcsCi0JMHgwZTU0Y2FjYywgMHgyYTkxNjZiNywgMHg1NDliZWI3YywgMHhjODU0ZDhmYiwgMHhmMjNhYTdiNywgMHg0MmRjYTk1MywKLQkweGRhZTRiOWY4LCAweGE4OGM4MDdkLCAweGVlZjgzZWY2LCAweGJkZjg4ZmUyLCAweDBmNDAyYmJiLCAweGJlN2U3ZmM4LAotCTB4YTkyNmIyNDgsIDB4ZTc4ZTIyZjQsIDB4ZTMwOGJjNTUsIDB4NDY4YzRlMWYsIDB4NmRlY2I4MzgsIDB4Y2U3ODkxNjksCi0JMHhjZTZiZTljZSwgMHhjOTM1OTM1MiwgMHhlYzJlNGZkZiwgMHhjNGRiMGMyZiwgMHhkMTUyOWM3MywgMHg0YTUyYzRiZSwKLQkweDRiMWMxNWY3LCAweGQ3ZThhZDIzLCAweDQ4N2E0MmFmLCAweDA3ZmUzOWI4LCAweGRiZmMzZGUyLCAweGM5NTZmODgyLAotCTB4ZGU3ZTM2MGMsIDB4YTZkZGY4MWUsIDB4NDE3YjNkNDUsIDB4MDljNDVkMDAsIDB4NDg3NWFkM2MsIDB4ZmI1OThlNzQsCi0JMHhiOWZiOTZiZCwgMHhkN2U0NDk2NiwgMHg3OTBhMTA3YSwgMHg1N2E4YjdiYywgMHhhM2UyODYzMiwgMHg5ZDJjODQxZSwKLQkweDE3ZjRkNTAzLCAweGU5ZmRhZmU3LCAweGIxMDFlYTdjLCAweGRjNDUwN2ZlLCAweDI3OWQyMWMwLCAweDg3MzBmZDFlLAotCTB4Y2RmOWY4MmEsIDB4NzNhMWU2MGMsIDB4OGRhYzU5ZTIsIDB4OTVjMTEzZDIsIDB4YjlkNGJkN2IsIDB4ZDFkYTMwNmIsCi0JMHhlNDBjM2E5ZiwgMHhiNTVkYTlmZiwgMHg2YmY5MDQzNSwgMHhjMTY1NWIxNiwgMHg5MzIwMjM3MywgMHhiYzhjM2ZlZCwKLQkweDc4MTE5ZWIxLCAweGJkYzRhNGJlLCAweDllZGNmYjJhLCAweGYxMWFiODVhLCAweDUxZWMxY2UwLCAweGRiZWI4OGY0LAotCTB4OTdiMjdmOTcsIDB4MWYzYTY5ZTIsIDB4NDNkYTdkN2QsIDB4MWU5YmVkMGMsIDB4NWIyODc3OGEsIDB4ZWU5YTNjMzQsCi0JMHg1YjU4Yjg1NSwgMHg3ZjZmYWU1YSwgMHhmNjU0ZmQ5NSwgMHhhYWFjY2EwZiwgMHgwY2I1ODU3ZCwgMHg2NzRjZjgwMiwKLQkweGU5NWViOTNkLCAweGMwYTlmYmU2LCAweDMzZDc0ZTM5LCAweGYyMDk0MTE1LCAweGUwNTBmODhiLCAweGFmNzAyYjNlLAotCTB4M2RjNDhiNjQsIDB4Njc0NzQ1YTAsIDB4NTc4N2ZkNDAsIDB4NGZhOGFjNjksIDB4MzdlZmI3NWUsIDB4ODlhZjFmZDksCi0JMHg0ODg2ZjI3ZiwgMHg2OGRlYTc2NCwgMHhmYTdkOTRiZiwgMHg3NDJmYjhiOSwgMHgzYmI3OGMzMiwgMHhmYzk5NzNmOSwKLQkweGZiZGJmZjdkLCAweDYzYWE0ZGY1LCAweDNiYzkyYTdmLCAweDFiNzQ5ZjRiLCAweGEyMzdhNzQ4LCAweDAzNGIzOWNiLAotCTB4NGU4MDM3ZTgsIDB4MGRhNWQxYWYsIDB4M2ZkYmYzZmUsIDB4YTI1MGQyYzcsIDB4OWQ3ZjY1NDcsIDB4NTE3ZmIwNTYsCi0JMHhkODg0YjVmZSwgMHhmZGZhZWNkYywgMHhlNzE2M2I0NCwgMHhiMTI4ZDY1MywgMHhhMTViYTQxNywgMHg3YmIyNzZkNywKLQkweDcwMGJmNzAzLCAweGUwZjI4ZWM1LCAweDU1M2EwMGYzLCAweDdjNDZmMWY2LCAweDI3N2JlMTRiLCAweGJiOWU1Y2Y0LAotCTB4ZmNlOTkzMWUsIDB4N2JjOTBiZjAsIDB4MmM3YzgyYzgsIDB4ZDdkZDM4ZmQsIDB4YjE3ZmVhNTIsIDB4MjNmMDZkYmMsCi0JMHg2MzE3Y2ZkMCwgMHhjZjQyN2E3OCwgMHhiYzk0ZjllMywgMHhlNWZiODgzZCwgMHhiODMxODhiZSwgMHg0ODVmZmQ3MCwKLQkweDllNTE2M2U5LCAweGM3ZmQyMTdmLCAweGE1MWYzY2ZkLCAweDQ2N2U2MmI3LCAweGU0MGI1OGQ0LCAweDNmMTRlODRmLAotCTB4ODdjMTBhZGUsIDB4M2M3ZmRjZGQsIDB4NTQ3MWY2ZTMsIDB4MzJlZjYyNGYsIDB4MmZmNWJmN2YsIDB4Y2Y1YmYyMjUsCi0JMHhmMzhlOTYwMSwgMHg1Y2ZiMWY4YiwgMHg5Zjk0MDI0MSwgMHg3MGUyNTVmYSwgMHhhYzViNWYzYSwgMHg2MmU1MGZlZSwKLQkweGI4ZmZmOTNjLCAweGQ1Zjc3NmRkLCAweDg2NTE1ZDFlLCAweGYyNmI5YzZmLCAweDVlNjVkYzZjLCAweGY2NGM5YzVlLAotCTB4YWQ4MDg5NDEsIDB4ZGI5ZDNjM2QsIDB4Y2Y3ZTZlYTksIDB4YmQzNzkxNTAsIDB4ZmIzNzVmODcsIDB4MGJjZjI3ZmIsCi0JMHg3Y2I1ZWU3ZiwgMHhmZTcxOTNmYSwgMHhiNmMwZWFmMiwgMHg5ZmIwNTIyNywgMHgwYjJiYmQxMiwgMHhhYjlmMWJlZiwKLQkweGNhMWM0M2ZkLCAweDhmNmQ5MmY1LCAweGI5OWU5MGE3LCAweGRhMGE1ZDZkLCAweDlmNWIyNTBiLCAweDNlNTNiMTQ4LAotCTB4OGFmNjQxZDgsIDB4NzNiYmFmOTYsIDB4YWYyZjFkZjcsIDB4ZWI2YmQzZjcsIDB4M2Y5ZWI5ZDMsIDB4MGYyMDc4Y2IsCi0JMHg0MzA5Y2RmNSwgMHgzZjQ2YWQyZiwgMHgyNGFmZjI3OCwgMHhkNmY0NGM4YiwgMHhlMGU1MWFiNiwgMHhlZjhlMzRlYywKLQkweDdjNDhjNmFjLCAweGEyZmRlMTk5LCAweGJlZmVkOGZlLCAweDQ3YzdlNDNhLCAweDE1ZDJiZWQyLCAweDM0ZWNiZDQzLAotCTB4MzY2M2MxMmQsIDB4ODI4ODZmNzMsIDB4NjRhZDZjZWYsIDB4ZjVmZTY3YTksIDB4NjEzOWQzMDcsIDB4MWY0OTJhZDEsCi0JMHg1YmU1MWZkZCwgMHhlM2I0NzBkOCwgMHg2OGMyZDNiMiwgMHgwZWQ3NzMxZSwgMHhkOWYyYzU2ZiwgMHgwNGY5NzhjYiwKLQkweDM4ZjFiYjgzLCAweDllOWNmM2Y2LCAweDgwNDA2N2UyLCAweDliYzdmODI1LCAweDNiNzFhNzY3LCAweDg5MDZjZTZhLAotCTB4OWM2NTZiZjQsIDB4NmIyMzY3ZTQsIDB4OWQ5OWQ3ZmQsIDB4MzlmM2U0MjYsIDB4ZTUyMWYxMzcsIDB4NjVhNGRiMWUsCi0JMHg4NjhkZGVjNywgMHgxZDZhMGY3ZSwgMHhmN2MxYTY3NywgMHg0OTljY2ZhMywgMHgyZTMzM2U0MiwgMHhkYTA2N2NmYywKLQkweGM3N2FjOTE5LCAweGVlYjhhNTBiLCAweGNiOGEwNmFkLCAweDk1OGFjZWNhLCAweDg4ZmVhMGEzLCAweDhkM2NjNzQ3LAotCTB4NDU2NTljZTksIDB4M2ZhMjk0MmYsIDB4Mzg3MWIzNzUsIDB4ZjNlNTZmMGYsIDB4MzU1OTJjNWIsIDB4NTNiZTNmNjgsCi0JMHg4NDVjZDBmYiwgMHg4YzY3YjlkYiwgMHhhZTJmMWZhNCwgMHgzZjYyOGQ0ZCwgMHgwMmJmZWY2MiwgMHg2MTRkNmZmYiwKLQkweGZiZDgwNzZjLCAweDdiMDJlZTk4LCAweGVkNGJlZjFmLCAweGZjYTY4ZWFlLCAweDk0YWRhYjFmLCAweGJmMWNlOWIyLAotCTB4MWYzODViMTYsIDB4MjM3ZjUxYjksIDB4MDJiNzhlYzEsIDB4MGI1ZWM5MWYsIDB4NzhmZTgxZmQsIDB4MTA3ZjZmNDYsCi0JMHhhNDNjOTlkNywgMHhiMTNhZWI2MiwgMHgzZjY4NjRhZSwgMHgwZjdmMTVkYywgMHhkZDdiMjFjMiwgMHg1YWE4YWQyMywKLQkweGU3ZTM0OThlLCAweDVmMWMxZjdhLCAweGYxZmE0NzFiLCAweDRhOTc4ZWIyLCAweGI0ODZmYmUxLCAweGRlZDhkOWMyLAotCTB4ZDkzMmU1YjgsIDB4M2YzNGVmZWYsIDB4NWRlMTFiM2UsIDB4ZDdjMGQ1YjIsIDB4ZWU3ZGQ2MjcsIDB4MTdhODk0OTksCi0JMHhmYmQ3N2ZhMCwgMHhhYmE3YjIzYSwgMHhiNGJjNzRiNiwgMHgxYjc5ZDIwZSwgMHhlM2ZiZDExZSwgMHg3N2FlYWRmYiwKLQkweGNkY2Y5ODk2LCAweDcwNDZlYWU4LCAweGQ1ZDM5ZmY4LCAweDNmNDQ3MTEzLCAweDMyYWU4MTViLCAweGFhYmE3NWZlLAotCTB4ZTA5Y2I2NWEsIDB4ZTE1YTVhZjcsIDB4OWZjODM0ZWEsIDB4OTBlMmI5ZDMsIDB4ZmZhNWNlOWUsIDB4YjVkY2YwODQsCi0JMHgyYmY4MjI1ZiwgMHhiZjY5NTVmYywgMHg5YmRiOGQzMiwgMHgwNmNmMWFlNSwgMHg3ZjA0ZWZkMiwgMHgzYTJjMTZmZCwKLQkweGU2ODFlZjg0LCAweGRmYTgyOWIzLCAweGUzMzRkYjdlLCAweGFmYmRkNzQ3LCAweGQyMzNiZjlhLCAweDdmZjVmMDA0LAotCTB4NzM0OTQyYzcsIDB4MWI0NDhlZjUsIDB4YzQ1NzJmYWMsIDB4ZGY3ZTA3ZGQsIDB4Y2U1MWE2OWQsIDB4ZTA1ZTQ4ZjEsCi0JMHhhZTJmYzkzZiwgMHhkNjI2MDJhMiwgMHg5MmU1MWMyZiwgMHg3YjQyMGRlNCwgMHhmM2RlZTlhYSwgMHgzNzk0NTBkYSwKLQkweGFkNTJmYjEyLCAweGZkMmZiMjFmLCAweGU2OGRlZGU0LCAweDEyYjRiMzdiLCAweGY4ZmFkMWZiLCAweDM1MjdlZGVlLAotCTB4ZWU0M2Y3YWEsIDB4YmQ1MjBmNjgsIDB4OGVjZDcxYzcsIDB4OWQzZDMyODAsIDB4MmFkNGM0YTMsIDB4YmYxOGY2ZjEsCi0JMHg0ZTljZDVkMywgMHhjNWU3ZmRmMSwgMHg3ZGFlYTI3ZCwgMHgzZjcxMmY2MCwgMHhkZWZkOTMwOSwgMHhkY2RmMzgzNSwKLQkweDM2N2M4NTk5LCAweDZmOTViZDcwLCAweDM4N2UxMjc2LCAweDRjYmYxZTliLCAweGY4ZDM2NGY2LCAweDliYWNkYWYzLAotCTB4YjZjMGZmYWYsIDB4ZTI2NzdhNGUsIDB4MTczZGFlYmMsIDB4N2QyZWEyZWQsIDB4NDNlZTE2N2IsIDB4OWY5YzViZTUsCi0JMHhhMGUxNGZmZiwgMHhkNWFlOTc5NCwgMHg2NDlkYmY3MywgMHg0ZjJlZmIyMSwgMHg3OWY2NDhiZSwgMHg5ZjZlNjFkNywKLQkweDRjYmYzNjU3LCAweDg1YjdiNGZjLCAweDM0YWE0N2ZiLCAweGU4NTFmOTZkLCAweGQxZDQ1ODRmLCAweDM3YWNmYzhhLAotCTB4OTU0YmRiOWEsIDB4ZThmZjllZTIsIDB4YjUwNzIxNDQsIDB4ZmY3ODcxM2QsIDB4OWYzODkyZTAsIDB4N2MzNGVjNTUsCi0JMHhiNWU5MDAzNywgMHg1MjcxZTM0YSwgMHgzMDU2NTBkYywgMHgwYjhmNzNjMywgMHgzZTUwY2Y0OCwgMHgxYWZjNjk3YiwKLQkweGVlNzNmM2M0LCAweDNmOTAyMzAxLCAweDhmZjU5MDdlLCAweGZkYTdmMjRhLCAweDkzMjJkODI5LCAweGUyYWIyOTdlLAotCTB4YzNhZGFmOWEsIDB4MTRjMGYzMmQsIDB4YzFhYmU4YTYsIDB4MmFkZWY4YWEsIDB4NjQ2N2Y1YmQsIDB4ZTdlMTFlZWYsCi0JMHgzODQzNTU1ZSwgMHgzOTM3YjEzZCwgMHgzYWFjNTUzZCwgMHhlYmY2OGZhMCwgMHg5ZTgyYWZlZiwgMHhjMjZmM2QxNCwKLQkweDc0NDFmZTlmLCAweGZiNjRjZmY5LCAweGEzM2YyMTdmLCAweDVmZDg2ZmZiLCAweDI0YjczZjc0LCAweGJlYjk3YTg5LAotCTB4OGI3MzNlNzMsIDB4NjQwYmFmYjAsIDB4MjRkNTVlZmEsIDB4NjJlZjNjMzMsIDB4MWU3NDIxZDEsIDB4NTIzNmMwNWYsCi0JMHhlNjA0ZTA5YywgMHhiMTdhNGQxOSwgMHg3YzI5ZmRiNiwgMHg5ZmUyNjU4NywgMHgzNzE4OTFlNCwgMHg5ZDJlN2EwNSwKLQkweDM5MDdlNzFiLCAweGU4YWUzMDkyLCAweDcwMTI0Njg0LCAweGY2NGY2NGY1LCAweGU5Mzk2NzkzLCAweDk2OGQ0ZTVjLAotCTB4M2Q2MzkyMjUsIDB4YTdhNGMxMzEsIDB4MzE1ZTlmOGMsIDB4ZmE3ZjVmY2IsIDB4NGZlZGM0ODcsIDB4MjZmNDg3ZTgsCi0JMHhmN2UxZWVlNiwgMHg1OTNkYmM0MCwgMHg0YzY0ZWZmZSwgMHgyMmYwNTNmYiwgMHg5M2NjOGI5MiwgMHg5YzZmY2QzZCwKLQkweGE3MWU3NGZjLCAweDlkY2YwNTcxLCAweDg5NTQ5ZjgxLCAweGY5M2NjZGYzLCAweDBlZDE2N2ZiLCAweDlmOWZiYzVhLAotCTB4YzRkMDlkZWIsIDB4Yzk3MTRhN2YsIDB4YzI1OGFmNzgsIDB4MWVmY2JiZmIsIDB4YmIzMDczMzcsIDB4NzMyN2U5MWQsCi0JMHhhOTVmZGQwMCwgMHg4YzMxMmRkYSwgMHgzNjZjYWIyZiwgMHg0ZDdmNDU2YywgMHgxMjNkYWVhNSwgMHhkMzVkNzlmMSwKLQkweGU3YzQ3YTI3LCAweGNjZWYzYzJhLCAweGI5N2ZmN2U0LCAweGY3NDJkYWZmLCAweDhjMmNhYmI5LCAweDUzNDU1N2U0LAotCTB4NDdlOGE3ZWEsIDB4YTVjYzM4YWIsIDB4MThmNjg1NjgsIDB4YjdjOGU5ZDksIDB4YzZmMmJjNzEsIDB4M2I5NzY0M2QsCi0JMHg3MmVjOTc5OSwgMHg2ZjFhODM2NywgMHhmNmZiYTM3YSwgMHg1YmE3ZTdhMywgMHg4YzYyZWY1NSwgMHg2M2U5Y2NkZiwKLQkweDlhYzNjNjFhLCAweDQzZjkzOWE5LCAweGQ1NDc0N2M3LCAweGM5YmJkZmZhLCAweGI1ZjBlNzRmLCAweDUxYWI5ZGNiLAotCTB4OTA0ZWU5OGYsIDB4NGE4ZWY4NmMsIDB4MTU2YjkwNzcsIDB4MTRhZTQ3ZWEsIDB4YmY3NGQ3YWUsIDB4MDE3YjJiYmQsCi0JMHhmNjc3MTdmMSwgMHgwNzdjNGNkNCwgMHhlM2IxZWI4NiwgMHhjYWQyNmVkNywgMHhkZjE5ZjM3ZSwgMHhkZDdmZmRjMiwKLQkweDFmNjRhYzQxLCAweDEwNjNiYmVkLCAweDI5ZmRjN2VlLCAweDM5ZTkwNTg1LCAweGQxY2M3ZWY0LCAweDIzNGZkMGJiLAotCTB4YWUwNGU5ZWUsIDB4OWYwYTY4ZTMsIDB4ZGZmNDExY2YsIDB4M2RlNmY4NjQsIDB4ZjM5NjM2MzEsIDB4M2MyNmU2MzMsCi0JMHg2MmY3MTU2YSwgMHhhNTE2Zjg5NCwgMHg1NzgxMTZmZCwgMHg4OTE3ZWNkNywgMHhjNDZlOWRmYiwgMHgwNGJjZjA1ZiwKLQkweGJjZjEzMmUzLCAweDIyOWRkMzA0LCAweDRiY2YxMzdlLCAweDg4YWFmZjMwLCAweDEyZjNjNGRmLCAweDEyZjNjNzJjLAotCTB4Zjg4YTM3Y2MsIDB4YzEyZjNjNGQsIDB4NjA5NzllM2MsIDB4ZGY4OGE2ZmEsIDB4YTU1MzgyM2MsIDB4MWFlNmIzYjgsCi0JMHhhNDU2OGJjNCwgMHhmY2JlODFiNSwgMHhmYzgwZjA4OSwgMHgxM2ZkNzU0MCwgMHgzZjNhOTJlMSwgMHg4YmZhYTI1MCwKLQkweDVjNmI5YmQyLCAweGI0YTdlODE5LCAweGZkYzU3OTA4LCAweDFkODNlYjk0LCAweDJhZjg0MGJmLCAweDE1Y2YwZWY3LAotCTB4ZTkwZmJkM2MsIDB4OGNmODVjNjgsIDB4YmQ1ZjQ4NTksIDB4ZjkwYzBkZmQsIDB4Yzc3NGFlZDAsIDB4Zjg3N2FjMzIsCi0JMHg5YjQ5M2RmMCwgMHhlODlhM2Y4OCwgMHhjM2M0ZjhmYywgMHgwNWY3NTU0MywgMHg1YzhkYTRjNywgMHgzMWY5MGQ5NSwKLQkweDZiZGM0OTY2LCAweDUwYWMzOGRlLCAweDVjZjBmYmIxLCAweDViMjhhNWJjLCAweDA1ODJmOWNiLCAweGQ5M2NlNGY1LAotCTB4MmNlMzhjNTksIDB4NDQ4ZDMxOGUsIDB4ZDUzYzNiZmUsIDB4MWZiYTc4ZjEsIDB4YjgxZmNlYmYsIDB4YTFmNTA5MzAsCi0JMHg1M2Y1OWQ1NiwgMHgzZWJhOTdmNCwgMHg5YmI0MzFkMiwgMHg1MjlhYmYxNCwgMHhlNjNhOTBjZiwgMHgzZTM3NmMxOSwKLQkweDA4ZDU3MTJkLCAweDBjODgxZmVjLCAweGNmNWQ5Y2Y5LCAweDc2N2U3MDFhLCAweGRmYzRiMDRkLCAweDkxNmFiMDhkLAotCTB4ZjYyMzNjMGYsIDB4ZWI5NWFjN2IsIDB4NTViZDVlYzUsIDB4NzY3NjhlMWIsIDB4NzhmZTk4ZDAsIDB4ZjYyYWRhN2UsCi0JMHhkZmQ4YjBmNywgMHhmMTdmNjIyMywgMHg5NjljNjliYywgMHg4YTYxMzc5ZiwgMHgyYTk4NGRlNywgMHhkMmM3NWE3MSwKLQkweDI3NGE1ZjBhLCAweDIxYzRmNmY4LCAweGRkYmYxNTdjLCAweDFhM2VlNTA0LCAweDllYTFjNGYzLCAweGQ3YzA5OWYwLAotCTB4OTE5ZjA0MDcsIDB4NzllYjBhZDIsIDB4MmZkZDBmM2IsIDB4YjRmZTE3MmMsIDB4YTBiZTcxNGUsIDB4ZTc2OTUzYWMsCi0JMHg5ZGM3Y2Y2YiwgMHg2N2YzOGMzMiwgMHgxM2RjNGZkNiwgMHgxODVjYzQxYiwgMHg4ZGU1M2FmNywgMHg3NTA3ZjIxOCwKLQkweGNlM2RmOWI5LCAweGM4ZGI0MDI5LCAweGZjMWJkOGJmLCAweDczNDU5ZGZjLCAweDdhZjI5OTNhLCAweDI5NWJkNTE0LAotCTB4ZTExNTlhZmMsIDB4MDcxODI5NmQsIDB4NDllODI1ZGYsIDB4NzZmNzJiYzksIDB4ZGU0MDQ2MmIsIDB4YWZhYjhiZWMsCi0JMHg4Mjk2ZDI5OCwgMHg5MjVkZjU3MSwgMHg1NDc4ODM0OSwgMHgzZjdmOTViMSwgMHgyMmFkZTgyZSwgMHhiY2E3ZjQ0MSwKLQkweGM0ZjQ2MDg3LCAweGVmNzQzZWUxLCAweGVmMGUyMzdmLCAweDdiMzdhZDg5LCAweGVmN2U3MDE3LCAweDk4ZjJmN2U1LAotCTB4ODRlMzA1MzcsIDB4MjljZjI1M2EsIDB4ZGZhZDg3OGMsIDB4OGM0MWY5MzksIDB4NzlkNGVkODcsIDB4OGVmY2MyNWUsCi0JMHhjNDFmNTM5ZCwgMHg2OTRlZDg3OCwgMHhmZjhiMjljZiwgMHgzODllMDFmNywgMHhkZmFkOTc4YywgMHhmN2U0NDUzOSwKLQkweGYzNjYxNGJjLCAweDNiNWVlYmNiLCAweDJiZjVkZjg1LCAweGYxODgzZWE2LCAweGVlMGQxM2IzLCAweDJmODhkNWMzLAotCTB4NjU3OGU0N2YsIDB4MGNmN2JkZGEsIDB4OTliY2E3YzIsIDB4Nzc2M2ViZWIsIDB4MWFmOGJkZWYsIDB4MjFiZGUzY2EsCi0JMHg1NWZmNmU3NCwgMHg3YmMxM2M3YSwgMHgxYjJiZjM2NSwgMHhmNmJhY2YxMCwgMHhkNjBlODhlOCwgMHhkMmYyN2MzNywKLQkweDgxOWVhOWFmLCAweDY4OWIyYjllLCAweDZiYTM2NGYwLCAweDk3OWRkNWU0LCAweDI3NzFjMDFmLCAweGMxYmU3YjA2LAotCTB4Y2M4NjlmZmMsIDB4OGM0Yzc5YTYsIDB4ZWVmYzc0ZTAsIDB4MzEwN2EyOTAsIDB4ZWY2YmJkOWUsIDB4ZWU5MGM3ZWUsCi0JMHhmYzYzZjYyNiwgMHgxMzJlZjVkZSwgMHhlYmQ5NGZlZCwgMHhhZWQwZTNlOSwgMHg5YjY5MGFlZiwgMHhlZTU3ZmQ4ZCwKLQkweGZkZjNmMDM0LCAweGJkZThhM2Q3LCAweGVlNzQ5ZTg4LCAweGIyMWQyZTZmLCAweGFiZTUwZTMxLCAweGRiMWRjZGU2LAotCTB4YzY3ZThkN2UsIDB4NmYzYTI2OWQsIDB4ZmFlNzBhYTksIDB4OWI1Yzk5NWQsIDB4ZGZlZDA4ZmIsIDB4ODBmZWRiY2IsCi0JMHhhMjYxZGVmMywgMHhmNDUyY2ZmMywgMHg3NGJlNDBhZCwgMHgxN2JmMzI1YiwgMHg2NmFmY2ZmZSwgMHhjOWU0M2VlMywKLQkweGNhN2VlODViLCAweDBkMjY3NTM3LCAweGRlYjhlMWMyLCAweDgzZWYwZmRlLCAweGM4ZWI4ZWI4LCAweGY5MTUyY2NlLAotCTB4N2MxMTEzZDIsIDB4ZjllZGMxM2UsIDB4MzdmZDdmYjQsIDB4MmQ3Y2ExYzYsIDB4ZmRlNWY4OGIsIDB4ZjI4OWVmMzgsCi0JMHhjZWQwOTdjNiwgMHhmN2YwYWY2MSwgMHgwMGVmY2VjZCwgMHhmM2JiNDFiOCwgMHgwZThhM2FmNSwgMHg0MjExZGFlZCwKLQkweGE1M2JiNmY3LCAweGRkZjFiMzhkLCAweGFmM2Q1NzBjLCAweDQ4ZGE2OWQ3LCAweGE3ZDU3NGYwLCAweDc2YmRmN2YyLAotCTB4YjBjM2E3NDAsIDB4Zjk1NTI2ZGUsIDB4YjI1N2ZhZjksIDB4YjBiZDBlZDAsIDB4YTNkOTIyNzMsIDB4ZjQyYjllMGEsCi0JMHg3ODE3NTY1MiwgMHhhZmRmOGMyZiwgMHgzMzdmMTMyYywgMHhmZDk5OGI4YiwgMHhmNjE3NGFmYywgMHgwMmY1ZGYzZCwKLQkweGQwYmZiNWYzLCAweGM4ZmJhM2EwLCAweDBhYjYwNmE1LCAweDdhMTU3MWUzLCAweGI3YmQ4YjI4LCAweGE2NTdkNzAwLAotCTB4N2Q0MTRkYTksIDB4ZmI2NDc0YTUsIDB4ZjM4YmE0NmMsIDB4ODY4YzY2MjYsIDB4MzkwODFmN2EsIDB4N2NiOGQ2NTUsCi0JMHgzN2JkZWEzMiwgMHg0MzFkY2Y5YSwgMHg1NmZhMWYzOCwgMHg0ZGI3ZTFkMCwgMHg3OWZmYjcyNiwgMHhiN2ZhNjA1ZiwKLQkweDUwZmQ2NjZhLCAweDdjZmZjYmViLCAweGRjOWVmYTkxLCAweDEzOGY3YTA3LCAweDcwY2FiM2VkLCAweDQxNGUzZmNlLAotCTB4NWZlMDA2ZmQsIDB4ZmNlMTBmYjcsIDB4NzU1MmNlNjIsIDB4M2MyMThjZmQsIDB4ZGY1MmIxMGUsIDB4NGVmMjgyOWUsCi0JMHg4ODdkM2ZlOSwgMHhkYTgzZWI4NSwgMHgyYTI3N2E3NiwgMHg1OTQ0ZGRiMCwgMHhmYzVkOWJmMCwgMHhhMzU5NjlkZSwKLQkweDFkZjc0MWQ0LCAweDNlOTFhNDEwLCAweDVkMTk5Njc4LCAweGU5ZDM4YzZlLCAweDczYTIxZjZiLCAweGJkZTAzZWM1LAotCTB4MzRmMTIxODIsIDB4ODk4MzU5NWUsIDB4MDc5NzJkZWUsIDB4N2VhMjg3YjUsIDB4MGY2OTBjZTQsIDB4ZWJhN2JkNDUsCi0JMHg4YmRlOTk0ZCwgMHhhZmViZWRjNCwgMHgxYmUwOWZmNCwgMHg5NjE3ZjE0ZiwgMHg1Mzc2NzQ3YSwgMHg3MmMxZTM1ZiwKLQkweDg4NWUyZWQwLCAweDNlMjgwMzdmLCAweGViNDA5MjFiLCAweGU2MGE2OTJlLCAweGVkMmRhNGY3LCAweGYwMzg2Zjc0LAotCTB4ZDNhZTIxMWUsIDB4NWQ4ZjQ3ZTIsIDB4ZmE0NzJmNGQsIDB4ODdiM2U3ZGIsIDB4NTdmZjBiYzQsIDB4Zjc0ZGQxMDcsCi0JMHg0MzhjYmYzZiwgMHhiMGQzMjgzYywgMHg3ODVlNzg1NSwgMHgxNWY3ZTI0MSwgMHgxNWY3NGYyMCwgMHhjNzczODgyZSwKLQkweDQxY2NlZmIyLCAweGJlMTczZjg4LCAweDc3MWQxMjc1LCAweGU3YzRlZDQ5LCAweDg4YWFiYmNjLCAweGRhZTk3NDNmLAotCTB4NDM0OWNmODksIDB4YWU3YzQxN2YsIDB4MzY3ZGFjMmIsIDB4ZDBmMzJkZjIsIDB4NGM3YmZjMzUsIDB4NGZiYzZjZmIsCi0JMHhjODg4NjE3MywgMHhmNzI0NjYwZiwgMHg0MGRhZWUwNywgMHhjY2EyNjRmYywgMHhjYmQ4MThlMywgMHgwYmY3MGIzYSwKLQkweDE0MmY3ODcxLCAweGVkNmM2MjcwLCAweDNiYjI2YTg5LCAweDhmZDQ1Njc0LCAweDQyNGE4NzYyLCAweGQ2ZmJkN2ZmLAotCTB4YTllOGZiMmYsIDB4Mzc3NzU5OGIsIDB4ZjA5NjdkMjIsIDB4OWY0MDYyNzcsIDB4ZjUwZDc4NmEsIDB4ZjQ5MTE5YmUsCi0JMHhkYzIwNGRjZSwgMHhmZWJlNzM5NCwgMHg4MDVmN2ZlMSwgMHg3MTBhNjRmYiwgMHhlNzgyMWNhYywgMHg2NGVkMTlkNSwKLQkweDkzYjYwMDU3LCAweGI2Zjk1ZWZlLCAweDZlY2JlYzgxLCAweGU0MzZjZjVkLCAweGM3NjYxZDVmLCAweGE5Y2Y1OGUzLAotCTB4MmQ5MzViNmYsIDB4ZjZmYTdkZTEsIDB4OWJkZjNjNTYsIDB4N2JlM2RjYTAsIDB4NTc1YmUzODUsIDB4OWVmY2NiYzYsCi0JMHg3YzI3Mzg4MiwgMHhiZTAzZWM0ZSwgMHhmODhiNTg4MSwgMHg3ZTdkZjEyMSwgMHgwZmY1ZTlhNywgMHhiNTc0ZGY5MSwKLQkweDBlOWYxMjI1LCAweDRkZjNhN2E0LCAweDBhN2JkMzRmLCAweGJiYWU0MTI3LCAweDkzZmZlY2ZjLCAweDc5ZDBhZjQ1LAotCTB4YzM4Yzc0ZmMsIDB4M2Y3ZjVmMzAsIDB4YTlmYmY3YjUsIDB4MGRiMjA3NjQsIDB4OGY4OGU1N2UsIDB4MjA3Y2VhMzUsCi0JMHhiZDJmMTA1YywgMHgxMTcwM2EyYSwgMHg1YmE3OGZkYywgMHg2M2EzYmJmOCwgMHg4MjFkZThkYiwgMHg5MDI5Zjk2YiwKLQkweDA3ZjJmZDk3LCAweGY1MDFmMjAzLCAweGVhM2I1ZWYxLCAweDJmNTFjNzBmLCAweGY2MGUzODQwLCAweDdkYmIyMDllLAotCTB4NWQ5MzhmMzcsIDB4ZjI4ZDcyMDksIDB4OWNlOTgzN2IsIDB4ZTQxYmIzNTgsIDB4YjcyZTdmNTYsIDB4ODc5NDVlNTAsCi0JMHhhYWJmOTFiNiwgMHhjZTgxYWY2YiwgMHg5ZjM0NTYzNywgMHgwM2Y1YzM4ZCwgMHhhNjVmOTIzZSwgMHg0ODhkZjliYywKLQkweDEyYmZlN2I0LCAweGM3YzgwMzc2LCAweGQ5NGI4YTQ4LCAweGY2ODkxY2RiLCAweGQ0ZWU1Mjg3LCAweDdjNDQ1Mjc4LAotCTB4MGZmMjE2N2MsIDB4ZjY0MmJjYTUsIDB4NTUzZGQwYTYsIDB4MzlkZThkYTksIDB4NGRlNzBhZjgsIDB4NjMyZjIxZjUsCi0JMHg5YzNhZDE5ZSwgMHhkNjdiYTcxMiwgMHgwYTZiZGZjYywgMHg4MjEzYjdkYywgMHhhMDdmMDE5ZiwgMHhiYzU3Mjc3NywKLQkweDBhMDVmZGM5LCAweDdjMTUyODNmLCAweDY3OTYyMGU1LCAweDI4YjdmYTcwLCAweGRlNzg0M2U3LCAweDA3ZGY3NDgzLAotCTB4ZTE0MDc4OWYsIDB4ZjkxMTZjN2IsIDB4YjEwZjhlNzMsIDB4ZjY4YWI4NzIsIDB4MzdmNzJmZDQsIDB4YjdiOGI4ZjEsCi0JMHgzMjEyYjMzYSwgMHhkYWY1OWRiMCwgMHhmYzZiOGY3ZCwgMHg1ZmM3ZDEyOCwgMHgxMzQ0MGY5MCwgMHg4YmExNTgxZiwKLQkweGJkOTU3NTg0LCAweDNhYmJkMTI0LCAweGU3OTZiM2E1LCAweDUwYjY3NTQzLCAweGU3YmQwOGZiLCAweGFlNzE4MjU5LAotCTB4MTVlN2ViZTYsIDB4NDMxNTQ3ODgsIDB4MzRjYTljMzgsIDB4ZGIyZWVlZGMsIDB4Y2YzOWQxMjYsIDB4M2YzZjFkMDUsCi0JMHg3MTQzN2UwMywgMHgyZGM3MGJmNCwgMHg5YmZhNDdjZiwgMHhlZjQyYmZkZiwgMHhhY2RmMWY2ZiwgMHg1YmVlZWJmZiwKLQkweDFmOWU1YTJmLCAweDk3OWQwN2Q1LCAweDNhZDRkZDJkLCAweDVmZGY1ZDgwLCAweDNmMzZhM2E5LCAweGI5N2Q3YWQyLAotCTB4MjYwYmVmMzIsIDB4NzU2MzllNjUsIDB4MzFlMWZjMDMsIDB4YmUzZTc5N2QsIDB4ZjhkMGI4ZmIsIDB4YWY4M2MyYWYsCi0JMHhjMWIzNDJmYiwgMHhlMDE3NzI4YiwgMHg3N2I1ZTc0YiwgMHhmMmE0NWQ1ZiwgMHhiZmFjZGVhYiwgMHg3M2E2ZTY1MiwKLQkweDNmY2QxYjhmLCAweGRlNGE3NTMwLCAweDBhZDcxNDEzLCAweDc0NGY1NWY0LCAweDM3ZTM3NDA2LCAweDAyNDM2M2RlLAotCTB4NDUyNTExZmMsIDB4MTU3YmQxYjcsIDB4ZmNkYmEyOGUsIDB4Mjk4MTExZmQsIDB4MWE4MWNhMzAsIDB4NTE3MGQ5OGEsCi0JMHhkYjM4NzQwYSwgMHg5NDNjMDdkNiwgMHhiOTQzODlmYSwgMHg4MTMxZjU1ZiwgMHg5NjI3MDNjNywgMHgyMzFhZmYzZiwKLQkweGU4NmQ4ZTNmLCAweGM3ZGYxYjgwLCAweGZmZjA0M2I4LCAweDcxOGZiZTViLCAweGI3YWYzMDRmLCAweDU3NDE2NGRmLAotCTB4YmZmZWY3NGIsIDB4N2JiODNmOTMsIDB4M2YzYTc5YjUsIDB4MThiMzMwNjcsIDB4OWQxYWRlZjgsIDB4ZWZkZmQ1YjksCi0JMHhiN2I4ODlmYiwgMHhlOTk2Zjc4MCwgMHhlZTlhNzlmZSwgMHgxOTQ5ZmRjNywgMHg0OWZjZDcyMSwgMHgwNDY0NmZhNCwKLQkweDU3NGFmOWQzLCAweDZmOTIxNWQzLCAweDE2MzkyZGRkLCAweDZhZTkwNzNjLCAweGRlOTE5YjczLCAweDVmZjlmZWFhLAotCTB4YmI4NzI4OTEsIDB4YjhhNmJlNWEsIDB4Y2ZlZmFlYjAsIDB4M2FkOGJjNTIsIDB4YjA3N2I3MTEsIDB4YjU1YmM0NDksCi0JMHhiY2IwNDM1OSwgMHg3Y2FiZTBiYiwgMHhhNDVlYjdhYywgMHhmNzAyN2YzZSwgMHhlMmE5MmJhNywgMHg5ZjdiZjAyZiwKLQkweDFjZDBkNjY3LCAweGRkNmIzZjdjLCAweDNlMzBkOTUzLCAweDQ1Y2M2ZTMzLCAweDczNzYwMDdlLCAweDlmMGRjYTM4LAotCTB4ZjUxYWMxMWYsIDB4ZTg4YmYxNjMsIDB4NzJkMjQ4NDcsIDB4ZThhNjAyM2YsIDB4ZTI0YTQ4NDcsIDB4YTNjYzA0N2UsCi0JMHhmNDUzMDExZiwgMHhmYTM5NjAyMywgMHg3ZThmMzAxMSwgMHgxZmEzY2MwNCwgMHg0N2U4ZjMwMSwgMHgwOGZkMTRjMCwKLQkweGI4OGRmZTU4LCAweDhjMGRkMTJmLCAweGNkMzlmYjhiLCAweDYwOTdmN2M0LCAweDZmYzAzMGZjLCAweDc4YmY3ODg5LAotCTB4Nzc3ZjNkNDksIDB4YTA0YmVmMDcsIDB4N2UyZWJiZmMsIDB4Y2ZjNDUxYTYsIDB4ZjlkMTM2NzgsIDB4ZDk1ZWQ1NWYsCi0JMHhmNzg0NWI4NiwgMHgxODI5NWMyYSwgMHgwODczZDM0NywgMHg3YjU1M2ZmZCwgMHgyYjcyZGIyNCwgMHg3OWE3NGY5NiwKLQkweGY5Yzk2YmFjLCAweGQ3OTYxNjc0LCAweDVlZjg2Y2ViLCAweGRmMTNlMDE2LCAweGUyODk1YWNmLCAweGVhNWFjYTk4LAotCTB4MmUzNTVmYzksIDB4Y2RjNTNmNmEsIDB4MGM0ODM1NTcsIDB4MGNkM2FjZmQsIDB4OTBhZTRlZGMsIDB4OWQwNDc0YTEsCi0JMHg1ZDFlOTI5NywgMHhmYjIzNjg2MSwgMHg2NGJiN2NhNSwgMHg1YzlmYmZmNSwgMHhmMTMyZWEzNSwgMHg3OGRjZTUwOSwKLQkweDJhYzRmZjAxLCAweGIxNmIyNjNjLCAweDc5ZGFjZTRhLCAweDY5ZmUxM2ZjLCAweDkxMzdjNWY1LCAweDE3YTdlMjFlLAotCTB4NjRmM2MwMmQsIDB4YTdiZjk3MmMsIDB4NjAxNTFiN2IsIDB4Mzc0ODQ2ZTAsIDB4NmIyYTdmOGYsIDB4ZTMwNmIzZDksCi0JMHgwZTM1NmVhNiwgMHhlMmExZTVlYSwgMHhiZjM4NzhmYywgMHg0Y2YwNTE4ZiwgMHgzMGJkZWVmMSwgMHgwMzQ2ZWY1ZSwKLQkweGQyYmIyOWU5LCAweGJmMTEzYjFkLCAweGU0ZWNlOTBlLCAweGRmYjQzOTZmLCAweGU5ZDY3NjQ0LCAweDdmMmFhOTRkLAotCTB4ODgzYzllNGIsIDB4NzU4YjFkZmMsIDB4ZTFlZmM5MTIsIDB4YjYwZjBlYTksIDB4MWU2MGE3YmIsIDB4ODllZTU5ZjksCi0JMHg1NjNhMjEwZSwgMHg1YTkwZDBmMCwgMHg4MWYyMWFmOCwgMHhmMjU2OTljNSwgMHhkODE5ZTU2ZiwgMHgxMTNmYTgyZiwKLQkweDUzZWNhNTU3LCAweGRlODk0YWRlLCAweDM2NjIyZTRkLCAweGM3MzA1ZmJhLCAweDUzODlkZmNlLCAweGMzOWI3NWRlLAotCTB4ODI4MzljNzgsIDB4NDkzNzhiNTcsIDB4MzY0ZWRkZmMsIDB4NWIzY2UwODgsIDB4Y2I0ZTczYzAsIDB4Yzc0ZWY0N2IsCi0JMHg1Nzc4ODMzYywgMHhiZmNmYzM0ZSwgMHg3OGYzZDc2MywgMHhjMmY4Zjk4NiwgMHg4MTc3YmUxMSwgMHg3YzkzMjdkOCwKLQkweGNhMWRiYjdkLCAweGUyODNjMTFkLCAweDhkNmY3ZWI4LCAweDhlOGJmZWMyLCAweDM3M2UyOGU4LCAweDE0YmVlYTJmLAotCTB4NzFmOWM5MDcsIDB4NzkyMGM3MTQsIDB4MGMzZmNhNjcsIDB4YTlmZTMxZmQsIDB4YTQzODYzOGUsIDB4ZWI4NDFjMmIsCi0JMHgyNTNjNDU2ZSwgMHhkMjgzOGVmZiwgMHg5NDI1ZDUyMywgMHgyNTFjN2UyYSwgMHhmZjdiYjA2ZSwgMHhmYzcwN2IxYiwKLQkweDZlZmUyYWJjLCAweGM1ZWYwZGVjLCAweDNmN2RmNTA1LCAweGYwMjdiOTRjLCAweDBlMjljNjE5LCAweDFmMWZmNWMwLAotCTB4YzRkYmVmODksIDB4ZTFiNjY3N2UsIDB4ZjZhMmYzZmEsIDB4NDRhYWJkZDMsIDB4OTMzZmZmZDEsIDB4ZmVlMGNmMGIsCi0JMHgwYjk5NDNkOCwgMHhjYzM5ZTFkYiwgMHgzZTY3ODA0NiwgMHgzZjQyNDAyZSwgMHhmNzhlYzdiOSwgMHg0YmY2N2E1MywKLQkweGJlNWY4YTE2LCAweDVhNmU2ZjhlLCAweDU1MjFmMThkLCAweDZiYmQxMjQ5LCAweDMxYjQxZjlkLCAweGNmZmExMjJmLAotCTB4MjFiNzg4NGYsIDB4ZTI2YWFlZGYsIDB4NDgyZWQ2N2UsIDB4ZTVkZmJlZjksIDB4MThhYWY3YTYsIDB4ODI2YTNmN2YsCi0JMHg1M2ZiYjdkOCwgMHgzYTFmN2YxYywgMHg1MTNlNTdjMCwgMHhjYjc3NTVkMCwgMHg3YmI3MWUxNSwgMHgxZDZjM2Y3MywKLQkweGY4YzczZmJkLCAweDBmZjQxZjdiLCAweGU4NzEzNWU2LCAweDJhYzdmMjYwLCAweDEwZGJkMzc4LCAweDI2ZjExNWI1LAotCTB4OWJiNzgzMjQsIDB4MGU5OGViMzUsIDB4Y2QyOTA2ZjUsIDB4ZmM4MGNjNjEsIDB4YWJjYmUyZWMsIDB4N2Q5ZDY5MjMsCi0JMHhmODk0YzVmYiwgMHg5OGJmNDBmNiwgMHhiZmZkN2YzZiwgMHhiMGZmNmI4OCwgMHg0N2E1MTE3YSwgMHhkYTUyOTdhYiwKLQkweGVmYTJlZDU2LCAweGNiNmUxNzIwLCAweDZhN2YzNWI4LCAweGZlMWY0NjRhLCAweGY2YjQ2NjU0LCAweGY0MGFiOTIzLAotCTB4MDFkNmZkY2QsIDB4NmJhMDUzZmUsIDB4ZGY1ZDFmOGQsIDB4NzczNjEyZDMsIDB4MzUxZGVhMmQsIDB4MTI4ZjdhN2EsCi0JMHg5ODk3OGNlMywgMHgzMmQ4MGY4OSwgMHgyYWEzZjRmYSwgMHhkZjkzMzM3MCwgMHg0Njk5OTdiNSwgMHhhNmM3ZmMyMCwKLQkweGYwMzU2YTI1LCAweDQ5MGNjZWZkLCAweDc0ODY1ZTc1LCAweDNhNDNlYjgyLCAweDQ0ZTkxNGMxLCAweDdjZWZlN2ViLAotCTB4OWMyNDBmNTEsIDB4MTcwMGY1Y2QsIDB4ZGEyNjAxZTksIDB4ODFjYjM1ZDcsIDB4ZWVmODQ4N2YsIDB4M2ZjNTQ1OGYsCi0JMHgwZmYwMDYyZSwgMHhhNjFlNTgzMCwgMHgwNjJkNTVmYiwgMHg4OTQ2ODc3YSwgMHhjOTBiMWNiNywgMHhmMDdkMTFkNSwKLQkweDI3ZTcwZjEzLCAweDNiM2M4MzgzLCAweDY1N2ZiZWU4LCAweDFlZjNjNTEwLCAweDNhZmM3MWQyLCAweGM5Yzc4ZWI0LAotCTB4ZmU0MmIzMTUsIDB4N2NmNWQwZGUsIDB4Y2NjYmVlODUsIDB4ZjUzOWU4OGIsIDB4ZWYzZmE4MDcsIDB4MzNlOTMzMDksCi0JMHhlNDE2NjI2YiwgMHgyNTdjM2JmZSwgMHhlMDEwNjUwNywgMHg0YjJjNmI5ZCwgMHg5YmUwYjhjMywgMHgwM2JiY2FhNSwKLQkweGQwMjFkZWQ3LCAweDI3MWNmNzhiLCAweGFhNmE3N2YwLCAweDU5NTNmZTg0LCAweDU0ZmEyMTZjLCAweDZhNTY2MWVlLAotCTB4YjA2YjFkM2QsIDB4MWUxMGZmNWUsIDB4ZjQ2NWExZWYsIDB4Y2Q3MWM4Y2UsIDB4YTllZWZlNDAsIDB4MTNlM2IzYTAsCi0JMHgxYjlmYzkxMiwgMHhjNWUzZDJiOSwgMHg5M2VlN2I3ZSwgMHg3MWRhN2RlOCwgMHg4MzFkZmNjMSwgMHhmM2ExNGQzYywKLQkweGFlZmVmODE1LCAweDdkNDdkZjg2LCAweDkwMjlkZjExLCAweDVmYjk1ZjcxLCAweDkzZWY3N2M0LCAweDA1YjE2OWViLAotCTB4N2ZiOTViMjEsIDB4YjNmYmJmOTgsIDB4MDBmZTEyNTIsIDB4Yjc0YjZlZjEsIDB4MWZkZGUwM2IsIDB4Mzc0YWVlZjEsCi0JMHgwOGY1OWMyYiwgMHhjYWU5ODFmMiwgMHgyN2Q2OGZmYiwgMHhhNmEwN2NmMSwgMHhmNzc4ODg3NCwgMHhjZjdmZTM4NywKLQkweGY5MGRhMzY0LCAweDNlNzBjZDU5LCAweDA0ZDI5YWZmLCAweGFjOTQ4ZmVlLCAweGI5OGU1MWNiLCAweDFjNjhjMzdlLAotCTB4ODMzZmJiZGYsIDB4MWZiMmJiZTksIDB4YTcyZTNiY2EsIDB4NDNiZjFjNDMsIDB4OWVmODExYmUsIDB4ZTE1MmIzY2IsCi0JMHg0ZmQ4Zjk4YywgMHgyN2FmOWYyNiwgMHg0M2UzZjM5OSwgMHhiOTNjODYzMywgMHhjODM4ZTEwZCwgMHhmODdhODM5YSwKLQkweGI5NjE1MWRjLCAweGFjNDdlMDEyLCAweDgwMGNiOTk2LCAweGE2OWJlODdmLCAweDY5ZDY2ZTc3LCAweGJjNjAyYmRkLAotCTB4MmY3MTVhNDEsIDB4M2RmODJiNWYsIDB4ODIzNDE5NzQsIDB4OTBmNWRiZWEsIDB4MjE3YTdhMmYsIDB4OGFiY2EzYjMsCi0JMHg2YzVlZjQ2NSwgMHg4NzlmOTE5MiwgMHgyOTg2M2I0MywgMHg5NDY0NjliYSwgMHg4NWZiOGM4MywgMHhmZWYxZmE4YSwKLQkweDdiOThhMjhiLCAweGQ5ZmQ0NDg1LCAweDY3M2M0YTM1LCAweDAyMGVmZTJlLCAweGI2MTczZjIzLCAweGVkNDExZDBmLAotCTB4ZGVkZTFhNWQsIDB4YjZmNDg1YWUsIDB4NTFkZWZlNDQsIDB4OWQwMzZhY2YsIDB4M2UzZDE2ODMsIDB4YTRlM2U0OTgsCi0JMHhlZGZiZWFiMSwgMHgzOGYwNjdkZiwgMHg5ODVkMjUwNSwgMHhmOWQxNTU2OSwgMHg3NGU5NTVkYywgMHhkNTc3Mzg5ZSwKLQkweDQzZDQwYThjLCAweDc0YzEwZDFjLCAweDgxZjNhZjFmLCAweDlkZjBiYjk3LCAweGJkZDk3MmYxLCAweDZiYjQxM2UwLAotCTB4MjE2ZjFkMzIsIDB4NTkyMGI5NWYsIDB4MGE4NWVmNjcsIDB4NDc3YzFmNzMsIDB4MGUzMTcxOGYsIDB4NmY0YmU0Y2YsCi0JMHhlZDcwZGNhMiwgMHhiYWVmOGEzOSwgMHg0YzgwZmZkZCwgMHhmYzY3ZWZlZCwgMHg4YWI2NjQ3ZCwgMHg5Zjc5MDNiZiwKLQkweDFhMzZiMmViLCAweGI0NmZiZmZhLCAweDBlZjI3ZTQ0LCAweGY1MGUyNTkzLCAweDVmYjEyMmJhLCAweDE0ZmY4MmFkLAotCTB4ODI5YzE5YWQsIDB4Nzg3ZGY1NzYsIDB4OWM4N2RlY2UsIDB4M2Q3OTMyOTEsIDB4Zjc2ZGZiZTUsIDB4NjM1ZDk1MzAsCi0JMHg5OTBkZGYxMCwgMHgyNWI3YmQ3YywgMHg2YmM1ZWZmMiwgMHhhMTg5MWQwZCwgMHhhOWJjZWE5OCwgMHg4ZDg2ZGE5MCwKLQkweDY1ZjExOGZkLCAweGRmY2IwMjUyLCAweDI1ZmM3MDhjLCAweDk4NzYzM2Y3LCAweDk3Y2U5Nzk4LCAweGFlMDkzM2ViLAotCTB4ZjFkM2Q2MGUsIDB4NmVhM2FlMzgsIDB4NjNhM2FkMjgsIDB4ZGU4ZTI1OGMsIDB4OGFlZjEwYmYsIDB4ZmU3MGI3Y2UsCi0JMHg4Zjg2MzFkNCwgMHgxZWQyY2E3MywgMHhlOWMxOWUxMiwgMHg5ZDE3ZGYwNywgMHhlYmY0YjYyNywgMHhiYTlmMmJhNSwKLQkweDViY2RlYTFkLCAweDkyN2JhNDY2LCAweDRhOTk5ZmYzLCAweDFhYmNjYTc2LCAweGIyNDdlZTk5LCAweDQ1ZjdlYTBkLAotCTB4ZTI3NDllNDEsIDB4MGJkZjAyZmMsIDB4MTQxNzdjMGQsIDB4YTBmMTFjZjcsIDB4Nzg0NDgzNzgsIDB4OWI0YWRiNzQsCi0JMHg3YmRmY2YxZSwgMHgwMDllODEzNiwgMHhkZWNkOGJkZiwgMHg4YTBiZDQyNCwgMHgwYWRiMjY2ZCwgMHg0Mzc3OGZhOSwKLQkweGU1YjgwN2JmLCAweDhjY2JiYmUyLCAweDU5MjEyNmZjLCAweDZlMzhhYjhlLCAweDdhMjJjNmQxLCAweGMzMzgzM2E3LAotCTB4ZGJiMGZlNDEsIDB4ZmQ0NDFlYzAsIDB4NGU0YzhlZTcsIDB4YmMwMDkzM2YsIDB4YjY4M2NlZjQsIDB4OWZlZDA2M2QsCi0JMHhhZjFjMTkzZCwgMHg1MjViODUyNiwgMHgyNjk3ODRjYywgMHgzYmJiZjc4NiwgMHg5YzE0OTY3NCwgMHg5MzZhYzc1ZiwKLQkweDQ5OWVmNTA2LCAweDAyN2UzODJiLCAweDIzYjUxOGRkLCAweDA1OWZiZTMwLCAweDExMWVmZDIxLCAweGQ3MmQ2N2VkLAotCTB4N2U0MmQ2MTYsIDB4OTBlZDg4MTAsIDB4ZTE5YmM0NzAsIDB4MGU4ZjlmODQsIDB4ZjExOWZjNzMsIDB4ZDg2ZmRjZWYsCi0JMHhmMzlmZTQyOCwgMHhmM2UyNmMzNiwgMHhiNGNmZmIxMiwgMHg5ZWYwZTM2ZCwgMHhmOGZhYjllNSwgMHhhMDU3MTgxMSwKLQkweGMzYTNjM2UwLCAweGZkMzI1YWM2LCAweDg5MDFlMGYxLCAweDczZDYxZmY2LCAweDZkOGRlNTE4LCAweGNjYzhkY2Q4LAotCTB4MDA3ZTU0MDEsIDB4NThkMjYzZjEsIDB4ZTQyMWM1MmYsIDB4ZTc4NjRlYzksIDB4OGNkMWJkZjgsIDB4MTk3YmU5ZTIsCi0JMHhiNWRlZDdhNywgMHgwYTZmZTI1YSwgMHgwMWY4NTA5ZiwgMHhlZjFkODNlMCwgMHhhZGZiMmFjNywgMHgyYmZmODVmMCwKLQkweDQzZTAwNDNkLCAweDFiZTE0NTdjLCAweGYwNTE3ZjBhLCAweDgxMzNlMTRiLCAweGMwMWIzNTc4LCAweDZhMDhmNzdjLAotCTB4ZTE0Y2ZjNGYsIDB4Y2QwZWI4NjMsIDB4NTE3ZjFmMDgsIDB4NzZiNzU5ZjYsIDB4YWRmYzg2OGMsIDB4ZTRmMzlmNjIsCi0JMHg0MGRmYmI4YiwgMHg0OTk4OTQzOCwgMHgxNzA2Yjk2ZiwgMHgxMmUwOTFiMywgMHhmODRkNjdhNywgMHg0N2NhZWEzZSwKLQkweDQwMmNmNzBhLCAweDQxNmRmYzdjLCAweDMzMWZlYTNjLCAweDE4ZjdkNDRiLCAweDdkNDhiZTdmLCAweDUyY2U3MTdmLAotCTB4NTljNWZkZjUsIDB4ODQzZTNmNGIsIDB4NTA4NmE3N2UsIDB4YmZkYzA0YzcsIDB4ZjMzZGJmNTMsIDB4ZmU1MGE3ZTIsCi0JMHg5MGJkYmY5ZiwgMHg4YmVjZWRjYywgMHhiOGUxY2ZmNSwgMHgzY2M0ODJjYiwgMHg5NmJjZjlkYSwgMHhkY2JlNDllOSwKLQkweGZjMzBmNDI2LCAweDk3MzJmYjg3LCAweDhhMmQzYTcxLCAweGYyOGEzYjBmLCAweDI5YzIyZTZmLCAweDYxMWZkZjBiLAotCTB4ODliZmNmMDQsIDB4ZjYyNTM5ZmQsIDB4ZjczNTY4YTcsIDB4MjRiODc0M2IsIDB4NWRjYzQzZjIsIDB4YWQ3NGU4MjUsCi0JMHg5N2YyNWVmYSwgMHgzODNkYWMzMSwgMHhmOTdmNzdkMSwgMHhjNGE0ZGZjYiwgMHhmNzJiNWQyMSwgMHhmOTZiMWQ5NSwKLQkweGU5Njk2NjdkLCAweDFjNWZkMjYxLCAweGFlNTBmYmNhLCAweDk2YTFmNzgwLCAweGNmN2JmMmI2LCAweGM0ZmJlYWVkLAotCTB4M2Q3NmQ5YzEsIDB4YjcxODI5ZjksIDB4MWRhNmU2YTMsIDB4MWIzNWYxZTQsIDB4YjI4YTBiMjUsIDB4YmM1ZTUxNjIsCi0JMHg1N2RkNTI1NiwgMHhkZjkzMjQ3YiwgMHhkMGNjNmIxNywgMHhmYTBiYmY3MiwgMHgxZjM4OTQ5YywgMHg3YzA0YmUzZiwKLQkweDE1Y2ZlZTgzLCAweDVmYWUxYzZmLCAweGU3NDdjN2UwLCAweDY5NzlmMjhhLCAweGYyOTU0YTFhLCAweDU3MWUwY2M2LAotCTB4MDM0NDhjMWEsIDB4NGI0ZmFlZmQsIDB4N2UyN2NmZDAsIDB4YThiZjI1NjcsIDB4ZGE2ZTdmNTIsIDB4MzdlODM1ODgsCi0JMHg3ZjAxYmI5OCwgMHhmZWQ3Yzc5ZCwgMHg2YTVhOTkzNywgMHgyNmY0MjhkZiwgMHhmY2Y4MGRlNywgMHhmYzJhMzhiNSwKLQkweDM3OWEwZWYzLCAweGFmNjVkM2Q5LCAweGRmMTU3YWVlLCAweGRjZmIyZmJkLCAweDZjYTY3MjQwLCAweGNmNWYzODk4LAotCTB4YTU0ZWU3NzAsIDB4OWY3ZTYzZjMsIDB4ZjdlYzUyYWEsIDB4ODQ1ZjVkYjgsIDB4ZDU1MDlkYTIsIDB4ODY3MWRmYzgsCi0JMHhjYWQzMDNiNCwgMHhlZjY0MjU2NSwgMHgxZTgwZGE1NywgMHhmNzhmYWZjMiwgMHhjZmQ1Zjc3ZSwgMHhkOTVmYjk0MywKLQkweDlmNDFhYjE1LCAweGE1OWRmODg4LCAweGM4YWZjNmNhLCAweGRlZmNhMGVmLCAweDJhYmI2MDUyLCAweDZlNTBmYmU5LAotCTB4ZmY5ODVhYmYsIDB4ZWRlNDExZWYsIDB4NTQ5ZDExZDcsIDB4Yjk3YjczMzUsIDB4ZjIxNWVmNmEsIDB4NWZlZDU3OWIsCi0JMHg2M2U4ZTkxZCwgMHgxM2RmZDdmZCwgMHhlOGUyYWJiMSwgMHhjYjg2ZDhhYiwgMHgwNmZlMGY3NCwgMHg0YzllZWFmMSwKLQkweGVkYzNlZWYxLCAweDUzOGE3NmVjLCAweDJiOGEzMmQ3LCAweDJlYmJmNmJhLCAweDhkMWZlNGVlLCAweGFjZGFhYzhmLAotCTB4NWVhMDc4YTEsIDB4OWUxZmI1YWQsIDB4ZmI4Yjc1YzcsIDB4YmVmNTgxNTEsIDB4ZDc3NmU0Y2QsIDB4N2MyM2EwMjUsCi0JMHg0MWJiYTM3NywgMHhlZTlkZjNhNiwgMHhhYmJmZWUwNiwgMHgxNWJhNzg2YywgMHg4MjU2YTVlZiwgMHg1ZWMzMGNlMSwKLQkweGQ5NTQzZmJiLCAweDdmYTMzMzI4LCAweDFmYzYxYWRjLCAweDllNzhkYzQ1LCAweGU4NDJiYmU1LCAweDhmNTI5ODFkLAotCTB4Zjk4N2FmNjQsIDB4MzRiZDgyZjQsIDB4YzczZTZmYzAsIDB4MWI5NTVlMDUsIDB4MmZiNGI5M2MsIDB4MDM4N2ZlNjIsCi0JMHg5NmQyOWRmNCwgMHgyYjllZTlhNywgMHhmZDIyZWJkNCwgMHg4Y2MxOGZlNCwgMHgxY2Y1OTM5ZiwgMHg2ZTc2NzljNSwKLQkweDVhZTc0OTE5LCAweDk1M2Q5ZWE1LCAweDA4NmM3N2U0LCAweDBiOTU3OGE2LCAweGU5YmRmNTNhLCAweDUzYmM2MjUzLAotCTB4YWZlZTNjOTksIDB4YjEyNGUzMTMsIDB4ZTkzMmFiZmQsIDB4YTQ0ZjM4YTcsIDB4M2E5MjBiYzcsIDB4NjhiNGUzOGUsCi0JMHg2ZGMwNWE3NywgMHhhNTRiYTA5ZCwgMHgyM2E3YTk3ZSwgMHg5ZmVhMDkzNCwgMHhkMjk4ZmE2ZCwgMHhkNGJmNTEyZSwKLQkweDcyODU5NmRjLCAweDMwNjM2Y2YzLCAweGRiM2Q2M2RkLCAweGI3ZmM4N2Y4LCAweDllNGJiYzYwLCAweDNmMjVmZDMxLAotCTB4NzRiMjkyZmEsIDB4ODhiNjNmN2MsIDB4MDhlZWI4ZmIsIDB4NDNjNGNmNzEsIDB4ODg2Y2U5ZWIsIDB4YWNiZWQwOTUsCi0JMHg5ZDVlZjExMCwgMHg2YTg3YWY4ZCwgMHhmZjVkN2U4OCwgMHg0ZDVkZWZkZSwgMHhiMTVkZWViZiwgMHhmZWEwNDZlZiwKLQkweGJkNTc2YzYyLCAweGQ1YmZmNjJiLCAweGZmMjhhNTdmLCAweGUzMTQyYTQ0LCAweGI5YzVlOGY0LCAweDEwMWRmZjMwLAotCTB4ZTEzYmEwOGIsIDB4Y2MzZDlkOGYsIDB4N2ZkZTEwZmEsIDB4ZGZmMDFmNjUsIDB4ZmZiZDAzMGQsIDB4NjY4ZmI0MzksCi0JMHhlYzgyMzlmZiwgMHgwZmZkZmM0ZiwgMHgyMWYzN2ZjYywgMHgzZDliMmYzZiwgMHhlODk1ZjA1MiwgMHhkN2Y0MWNmNiwKLQkweGZkNzNjNDc3LCAweDI4MTZiOWMxLCAweDBlNWE0MDExLCAweGY4MDJlNWY4LCAweGU2MWFkZDM5LCAweDJjZDBmYzgwLAotCTB4MDI3NTNmNmUsIDB4ZTE4N2ViZmUsIDB4ZTU4ZTNjYzgsIDB4Zjg3N2Q4MTQsIDB4MzVlYjhjOWUsIDB4NGNlYzhlN2UsCi0JMHhiZGUwYTZmMCwgMHg0ZjExNGViZSwgMHhhNmY3MGNlMCwgMHgxN2JmNDA0NCwgMHhhNzM4OWUwNSwgMHhkZmZjNTM3OCwKLQkweGY1NmU3NGE5LCAweDQ1Y2QzYzUyLCAweGRmODczZjExLCAweDFjZTc5ZmQxLCAweGM0NzVlYmMxLCAweGRlZThiYTViLAotCTB4ODYxMGRlYzYsIDB4OGRlNmFhZmEsIDB4OGFjM2MyMTAsIDB4MGQ1YjRjNTcsIDB4YThkMjc2N2UsIDB4NWYwZmFlMmMsCi0JMHhhZDc3ZjNkNCwgMHg3Y2Y4ZGI1ZCwgMHg1MjM3NDM0YSwgMHg3ZTA1MTczZiwgMHhhNDZkMDY5NywgMHhmNzEyOWRmOSwKLQkweDNjZjU0YjgzLCAweGY0NjNhMWRmLCAweDBlY2Y3YzllLCAweDg1Y2Y2ZWZlLCAweDM4N2RiNjk4LCAweGU5MWQ4NWNlLAotCTB4MTFkYTY3MTQsIDB4NDRkMDVlZWYsIDB4NDk3Yzc5ZGYsIDB4MTc4MzRlZDksIDB4NDc3ZTc1ZTcsIDB4MmEwM2RkMDgsCi0JMHgzYTY2ZWRmOCwgMHgzM2FkZWM1ZiwgMHhjZWZmYzg0OCwgMHhjZjc0NjAwZiwgMHgwMGZkN2NlMSwgMHgyNWU3ZDc5MiwKLQkweGNmMzdmOTJiLCAweGZkNDExZmJmLCAweGE1MmY1NTk1LCAweGMwNjUyY2ZiLCAweDg0ZWY1MDI2LCAweGI1ZjUwMGI0LAotCTB4YzdjZmY1ZjMsIDB4N2U0MmZkMjEsIDB4NmMxZGU2MmQsIDB4MjE1ZmVjZTMsIDB4MjYwZjZlOWQsIDB4Y2VjMmYzM2IsCi0JMHg5ZmZiYTQ3ZiwgMHhlMDY5MjhmNywgMHg5ZmIyODliOSwgMHg1OWU5ZjdjYSwgMHgyZTk4NmVkYywgMHhjYjJiMzRlMCwKLQkweDgzMmRjZmMyLCAweGQwMjZjZjNkLCAweDAzN2QzOGZhLCAweDAwMmVjOTljLCAweDcxNzdhMjdhLCAweDIzOWE3OTRlLAotCTB4ZWNhN2U4MjUsIDB4Y2EzYjEwOGQsIDB4Mzc5ZDBlZjcsIDB4ODcwNDBmZTUsIDB4MzBiYmYxNjAsIDB4ZjNjMmVjOGMsCi0JMHgyZWM4MjJkYiwgMHhmYTlhMmQwNywgMHg5MzJkYmYzOSwgMHgzODk1NDNlMiwgMHhhYmE4NDk5MywgMHgxMjY2M2VkMSwKLQkweDJkZTRmMzdjLCAweDcwNmVmNDU5LCAweGUxYzUzMDVkLCAweGJiN2UzZDk0LCAweDY0NGVlMjg2LCAweGJkOTc3N2FlLAotCTB4Yzg5MjZmM2EsIDB4YTY5Y2YxZGIsIDB4NTZiZjU3ZWMsIDB4NDlmZTQ1ZTAsIDB4MjlkNDhlMjUsIDB4ZTNjNTY4ZjgsCi0JMHhiOGMzZjU3NywgMHg5OTY3ZjY1YiwgMHg2OGFlZTNlMiwgMHgyMDYzOWM3OSwgMHgwOTY0NzY1YywgMHg0NWVmYmEzZSwKLQkweGUwMjc1YmEyLCAweDUwMmVmZTM5LCAweDJmMDM4OGI5LCAweDJjZmRjOWRmLCAweDdhZWU2YmU1LCAweDUxZTNmODhlLAotCTB4ZGYzOGMzMWQsIDB4NDNhNzllOGIsIDB4YjRmZWUxZmQsIDB4ZGVkN2M3ZTgsIDB4YTFjYmY1NDYsIDB4NDFmZjZmM2UsCi0JMHg5YjY3Y2QyOCwgMHgwMzkyZTI4ZSwgMHhkYjk2ZWJmNywgMHhhNWZmOTRlZiwgMHhkMDFlNjVmNiwgMHgwNzM4ZmEwMywKLQkweDFlZGFjMmJlLCAweDQwZjkxY2ZiLCAweGEyZTZjOTgzLCAweGQ3YjcxZTUyLCAweGUwMmNmM2E5LCAweGM0NGMxOWY3LAotCTB4YzRjMzNhMWYsIDB4ZjM1Njg5ZWYsIDB4MzVmMjgxZjgsIDB4NzE0NzdmMTMsIDB4ZDJhN2M3MGEsIDB4ZWU4NWE2MWQsCi0JMHgzNmU5Y2ZiZSwgMHgxMTVjZmUwYiwgMHg3NDg3ZWI2MSwgMHg0MWZiMDE1OCwgMHhiZjFmMDlmNywgMHhiMzc1ZWU4YiwKLQkweDdkYThlYjNmLCAweDEzMWU3YWUwLCAweGUxZDFhZWVkLCAweGRjZmYxZTZlLCAweDRiZWY5MDM5LCAweDI0YTlhYmU3LAotCTB4MzhjMjNhNzcsIDB4Yzk3Y2MzNWUsIDB4ZTMwY2VkNGUsIDB4NjA0ODA1MjksIDB4ZTM4NThkZGMsIDB4MGYxOGU3NDMsCi0JMHhkMjlkZGZkOSwgMHg3NDNiNGExZSwgMHg1MmQ5NWRiYywgMHg1ZTE3N2JmMSwgMHg0NGUyMzcxZSwgMHg3N2M0NGQ5YywKLQkweGExYjQzNjc3LCAweDM4ZmM4MWJlLCAweDVlYTUwNDc3LCAweGVmZjVmODQzLCAweDkzMWUwMzg2LCAweGM1OTNkNzdkLAotCTB4N2YxMjliZTUsIDB4OTNkNmVmNDMsIDB4NDdhM2QzNWYsIDB4N2ExMGVhN2UsIDB4ZmFlMWIzOWYsIDB4N2JhMDMzZGYsCi0JMHhjNTEyMGRlZiwgMHhlOTU5ZmYxZCwgMHg5NGZmYzQ0NywgMHhjYWNmMGU3MywgMHhlMzlkMTI1ZCwgMHhhNDdhYWY5NywKLQkweDdjYmVmMTE0LCAweDQ4OTlhNmQxLCAweGNhM2FjYTBmLCAweGVkMDBhY2I1LCAweGE2NDkwZWFmLCAweDNmNWQ4MGY5LAotCTB4ZjVjNjRhNjcsIDB4ZmRmMDI5ZTMsIDB4NTEzZmQwNGMsIDB4ODA2NzIyOGUsIDB4NTk2NTRlZDYsIDB4NmQ5NTNkMTUsCi0JMHhhYjljZmU4NCwgMHg0ZTM0MGRhNCwgMHhmMjc3NjJiYywgMHhjMjcwMjlmNSwgMHg2MzhjMWY3MywgMHgzNzAxZmM1NCwKLQkweGNmMzJiZjVhLCAweDU3YTdjZDFiLCAweDc4OGVhMWYwLCAweGUzNDZlZmViLCAweDEzMjQ3ZjdlLCAweGZkZjJiOTNmLAotCTB4M2ZlMTdlYzgsIDB4MmZkMWI3YTIsIDB4ZTFmZDJhNTksIDB4MTFkNDEyN2QsIDB4Yzg4MzlmYTEsIDB4MDQ2ZTMwY2YsCi0JMHgzY2MwYmI2ZiwgMHg4MDg3ZTg1MywgMHhkNWE2ZTM3YywgMHgxYTQzZjNhOSwgMHg0NjhjZjlkNCwgMHg0NWFiM2U3NSwKLQkweGFiYmRiNzlkLCAweGUzMTU5ZmNlLCAweDNiNDI3MDJhLCAweDZjM2RlZjE4LCAweGQwMWZmNzE3LCAweDRiZmJjNjBlLAotCTB4MWU2MzA3NjgsIDB4ZDE0YzYwZWQsIDB4YjQ3MmM2MGUsIDB4NzY4ZjMxODMsIDB4MGVkMWU2MzAsIDB4MWRiOWVhYjYsCi0JMHhjMWRhMjk4YywgMHg4YzM1OWU1OCwgMHhjYjU5YzljMywgMHgwZmIwOTBmZCwgMHg5ZjhmM2E3NiwgMHgwMjZlZmNhMSwKLQkweDhmYTg4NWQ4LCAweGJkMjIwZTk2LCAweGE4YmU3ZDBlLCAweGVkZmZmNDM3LCAweDQ3ODgwNWQ1LCAweGQ0NDcxMGE2LAotCTB4YzM4YzFjYjAsIDB4ODMxMzViNmEsIDB4OTNlMjAzZjUsIDB4NjY0YzIzOWMsIDB4YWZiNDM3ZjQsIDB4ZDUwNmJiM2UsCi0JMHg2M2IzMGU5MCwgMHhlMjU3ZDYxMCwgMHhiZTk2MmE5NiwgMHhkNmVmYmY0MywgMHhlN2ZhZGNiZSwgMHgyMjdkZjI5ZiwKLQkweGZiZjI4N2JmLCAweGJlZjg2NTQzLCAweDJlN2U0Y2JiLCAweDM5MWRmZjIzLCAweGY3YWZiMTliLCAweDhjZTMwM2EzLAotCTB4MjJmODk1ZmUsIDB4MzY4ZThhYmIsIDB4NTNmZTVjMTIsIDB4N2M4MzEzZDcsIDB4NDYxZGFiZmUsIDB4MmJmNTY3N2EsCi0JMHg0ZDkzMWY3MSwgMHhlNzdlYThiNywgMHhkZTc5ZGFmMSwgMHhjYjlkMTI5MywgMHg5YzJjM2RkYywgMHgwNjFlZjdkYSwKLQkweDc5MGZiYmZkLCAweGQwZjNhNGFhLCAweDlmNzdlZjU5LCAweDQ5MDZkZTc4LCAweGE2ZGNlMzgzLCAweDI3NjQ3MGU3LAotCTB4MWM2ZjExNjQsIDB4NGVhNzdmY2EsIDB4ZjUxNTMxY2MsIDB4YTdmOWJmNzMsIDB4Zjg1NDgzYmIsIDB4Nzg3Yjc0MzMsCi0JMHgwYzM1ZWZjMCwgMHhkNjFmZDU1NCwgMHg3YmYwMTA5NCwgMHhiZmQ0NDMwZCwgMHhmMmMwZjAyMywgMHg0ZjY3NjgwMywKLQkweDU1NTIzMGRkLCAweDZiZDIwYWVmLCAweDI4ZDVjYTM2LCAweDg1YzU5N2UyLCAweDI3YzQwNTc3LCAweDRmN2VhYTg2LAotCTB4YTdhZTg5NmYsIDB4YmZhODcxZTMsIDB4YzkwYzZmNjQsIDB4Yjc5ODYyODMsIDB4ZjM4OGE0N2QsIDB4NDljN2E1ODEsCi0JMHhiN2M0MzVhZSwgMHgzZGZhMjU2YiwgMHhkZTQyNzliMiwgMHhmOTZhYTViMCwgMHhlN2U1YTI1YiwgMHgzNjQ2Zjg3YSwKLQkweGJkY2U4M2VhLCAweDg0ZmVmNDUxLCAweDE2MjU4ZjgyLCAweDgxMWIwZjY2LCAweDU5NmRiY2YxLCAweGRlMWZiNDVlLAotCTB4ZjExNzM5N2YsIDB4OGRhZTQyYWEsIDB4NzgxYmRmYzMsIDB4YzM2ZjcyNTQsIDB4YzIxN2E3OGIsIDB4MDFkZTQ0ZjcsCi0JMHgzOGQ2M2ZkZiwgMHgyZjBmMTEyYSwgMHgzYTM5Y2UxZSwgMHhiMTdjZTAwYSwgMHg0YjdiYTY0MSwgMHhlNDZmM2E3MSwKLQkweGZmMGZiMzA4LCAweDIwOTY3NGUyLCAweDhkZGFmZmRjLCAweGY0MWJmZGZjLCAweDNlZTFjOTViLCAweDE4ZGRhOGZjLAotCTB4ZjY2NDk0MTEsIDB4ODdjMTViYWQsIDB4NDFkZWY0ZGIsIDB4YWY1ZDcwNGIsIDB4MDJhZjQ4OTksIDB4ZDNlNDlhM2QsCi0JMHhlOTMyYzM5NSwgMHgyNDYzMjU2ZiwgMHg2MmI5ZTkxNywgMHg0YjdkY2E5ZCwgMHg4NWE3M2Q2NSwgMHg3OGQyYzgzZCwKLQkweGVmOGE4ZmJmLCAweDY0MGZkMzE3LCAweGNlMWQ2MTU5LCAweDE5MzhhNmVhLCAweDYxYTZiOGY5LCAweDYzYTQwYzViLAotCTB4YzM3NThlOGMsIDB4YThlZmUwMDYsIDB4ZWY4YTdmMjUsIDB4MjI3ZDk0OTcsIDB4ZjhlZjhjMzMsIDB4ZDA5ZWU2YmEsCi0JMHhkY2NmNTAzYiwgMHg4MjRkYjNhZCwgMHg1ZjFiZTNmYywgMHg2NTk1ZmJhNiwgMHhlZDFlYjc1YSwgMHhiNTFkOTJkMiwKLQkweDVlZTY4Zjc0LCAweDgyZDI2ZWYxLCAweDlmNjQ0NWVkLCAweGM4OGI2NDJmLCAweGM0YTczY2NlLCAweDk0NzgwYjlkLAotCTB4NThiNjk1OGMsIDB4ODIzZGRlNjAsIDB4Nzc4ODk0NmYsIDB4ZjFmNzk0MmIsIDB4ZWZlNzZjYWUsIDB4Yjg1MDNmM2UsCi0JMHhmNWU3N2U4NywgMHg5MDJmNTE2NSwgMHg5YzNmN2E1ZSwgMHhmZDAwMzc5YSwgMHhmNmM5MWU0ZCwgMHgxZjRjZjc2MywKLQkweGMwM2ZhMGM0LCAweGFkNTdhOTg3LCAweDc1NzAzZTk0LCAweDlmYjlkOTA4LCAweGExODRhZmUwLCAweGIwMDhjOGJjLAotCTB4ZjFlNDNmNzcsIDB4YmJmOGJkMTksIDB4ZWY3OGYxNDgsIDB4MmE3ZmRiZDIsIDB4M2FkYmMzZWUsIDB4YzAwYTg3ZGEsCi0JMHg3ODIzNTE5ZiwgMHg5MDlkYzMzYywgMHhkZjU2OGUxNiwgMHgxNzFhYTlmNywgMHhlOWY3YzJhYywgMHhhMDhlOGZjYywKLQkweDdjMTg2OWJmLCAweDYwN2Y5N2VlLCAweGZlYWFhMjUyLCAweDBkMGMwZjQzLCAweGJlMTE4N2EwLCAweDc0MmU3NGVmLAotCTB4YjQ0ZTJhYTcsIDB4NGFjYjk5NjIsIDB4ZTRmMWY0ZjcsIDB4ZDIxY2JmY2UsIDB4MTM2Nzg0NjUsIDB4ZDgyYmVkNTQsCi0JMHg3OGJkNWYxNCwgMHg0NWJhM2JmZSwgMHg3YTZkN2Y4NCwgMHgzNDRhOTdiNCwgMHhiYTdkNmUzYywgMHhiNzk0NDNhMywKLQkweDQ0MmMzOTUzLCAweDI1Yjc5NzQ1LCAweDcyZTUzZWRhLCAweDgzZTNjNzUxLCAweDNhN2IxZjg1LCAweDk3ZDg5ZGZlLAotCTB4MTY4ZDg0NWMsIDB4YzllZmUyZTMsIDB4YTFjMWZmYTEsIDB4NTRkYTNiZDYsIDB4M2ZjMjIyNzEsIDB4ZmRjNjkxNTQsCi0JMHgzNmFlMTU0MywgMHgwMWRmOWUzZCwgMHgwMGIxYjVmYywgMHhmYzhkY2E5MiwgMHg2ZmE4MDg1ZCwgMHhmOWU3MGQ4YywKLQkweDdmYWUyMzY1LCAweGMzZmIwZjJmLCAweDBmMmFjODc3LCAweDJmNDg0NWNiLCAweGYxMmJkZjgxLCAweDBmOWMwMjdkLAotCTB4ZTk0MjczZmEsIDB4YmZkZTcxOWQsIDB4Y2ZjMTU3ZTgsIDB4YzA5NDM4YzAsIDB4YjVmMWIyN2UsIDB4ZGY3YTFjOWYsCi0JMHg5YWEzZGU4ZiwgMHg4OWVmYzg1YSwgMHhmOTkzM2QzYiwgMHgzYzAwZmJiZCwgMHgxNWZkZjg1MywgMHhmZDEyY2Y3YywKLQkweDQzYmUxZmRiLCAweDVkYmJkNjc4LCAweDAwYjc2MzY3LCAweGY3M2I0YThmLCAweGRmZTIwNjc3LCAweGJlMGY1ODAyLAotCTB4NTFhMGI4NmYsIDB4NWUyNWI5YjIsIDB4ZmZmMmUxMGYsIDB4ZjQ4MmRjMDEsIDB4MDA4MDAwMzYsIDB4MDAwMDAwMDAsCi0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1YmNkZmYwMCwgMHg2NTk1NTgwZCwgMHhmM2JlN2U5YSwgMHg3MDBlMDFjNywKLQkweDA0MjdlNTQwLCAweDA5NGE4ODBmLCAweDQ0MTAxZGY2LCAweDE4MjkzYjUzLCAweDU0ZGExNTk1LCAweDAyMWY0NGEyLAotCTB4OWEyODI0ZmUsIDB4MmVkYjUyZWQsIDB4NGM3MzUwYzcsIDB4NGE5NzY4NjcsIDB4NTdhM2FiMWIsIDB4YjVhY2NkMzksCi0JMHg4Y2NlOWE5OCwgMHg3ZTkyN2JiYiwgMHhhNzcyYjI2OCwgMHhhOWFlYWU2OSwgMHg2NmI2NjNiNSwgMHgzYjQ0OGRhZSwKLQkweGI1YjRkNDVkLCAweGRmYmVmZGNmLCAweDIzYmVmOWM3LCAweGI1Y2NlZDRjLCAweGQ3MTc1YzNmLCAweGZmZjc5ZTczLAotCTB4ZTdkZWZlN2QsIDB4YmJmNzllN2QsIDB4Yzg5MTMyYTMsIDB4MWJlZmUyNGQsIDB4ZmZlNTZmZmUsIDB4ZDVhMjEyZWMsCi0JMHg0NDFmOWQwNywgMHhhYmU1YTMwYSwgMHhhZTBkZWNmYiwgMHg2MGZkNjVjYiwgMHhjYmY1YzVkYSwgMHhjMzJhNjNmMSwKLQkweDljMjg0YTIzLCAweGQ3MDc3MGM3LCAweDRkNWRjNjliLCAweDI3YjUzZWRiLCAweDk3ZjFjYTAzLCAweDM0NjNmYzY5LAotCTB4Mjg0YTgzYzMsIDB4MWUzYzVjYTQsIDB4Y2E4ZDkwNTUsIDB4MGM2MWQ2ODksIDB4ZjFjMGQxMWYsIDB4M2Y2ODVkM2IsCi0JMHhhZjIxNGJiMCwgMHhhMDlkOWEyMiwgMHhkNDFlYjk3NCwgMHg2MmJiZGViNywgMHhjODYxNGQzZSwgMHhmNWU2Y2M2MywKLQkweDExNzQxYzJkLCAweDFiOGQxMjk1LCAweGU2ZTVjMjdmLCAweDE0ODdmZDdlLCAweGJiZjcwZjc1LCAweGNhMjFkMDY1LAotCTB4MTBlNDFkNWIsIDB4NmEyMWFjZmIsIDB4ZjliZGY4NjcsIDB4OWRjMWQxMTcsIDB4ZWZlYjI2OWQsIDB4NjBmMzc4NjUsCi0JMHhiYjE3ZThiYSwgMHhlODdhMjFjZSwgMHg2ZTg4YjlmNCwgMHg3NjQ1YzI3NCwgMHg3OThkZmVkMywgMHhhMjJmZjFmNSwKLQkweDcxZmY0YzUzLCAweDFhZjZlOWUzLCAweDBhMjc1MTBmLCAweDdmMGNiOGIyLCAweDhmYjkwMjU3LCAweDg2Njg4Y2E4LAotCTB4Y2NmYTM0OWEsIDB4YjJlZmMyNjQsIDB4ZjIxZTc4NmYsIDB4YTNkM2EwZjAsIDB4NTEyMTYyZWQsIDB4OGYwYzY4OTAsCi0JMHhjN2FkMjJlYiwgMHhkMjU5M2MwMywgMHhiOGU5MmJkOSwgMHg0OGNiZTljZSwgMHg5OWRmZTIyZCwgMHgzYmZhNTZjOSwKLQkweDM3MjgyOTdjLCAweDYxZDg2OWM2LCAweGEzZDMxZjIzLCAweDNkMzYzZWNhLCAweDhjNjhlM2MyLCAweGM4YjQzZTgzLAotCTB4MzQ1ZjAzNmIsIDB4MWJjZGJjN2QsIDB4NGM0NmU3YzcsIDB4Y2U0ZGI0ZmQsIDB4YjlmNmUyNzQsIDB4ZDgwOTQ2MWIsCi0JMHg1NzRkZWYxMCwgMHg4MzYxYmViOSwgMHhmMGM0MjZiZCwgMHhhNDY3ZWY4MywgMHg3ZDFjYjA1NywgMHg3YTM5YzliMCwKLQkweGMxZjEwZjNlLCAweGE5NzM1M2RkLCAweDgwOTU3ODE4LCAweDViOGMxZmE3LCAweGJjNWNmMjE0LCAweDI2ZDUwNmFmLAotCTB4MzdmYWQxZTgsIDB4ZjlkYWU0ZWYsIDB4ZTNiNjI3ZTcsIDB4ZmU3ODhiYzksIDB4OTI4NzRkOTYsIDB4NTU5Yzc4MmIsCi0JMHhmNzJhZGU5YiwgMHg2ZGRkMTNlNiwgMHhkZTU0ZGFkMywgMHhmNzY1MzlmZiwgMHhlNWU4MmY1ZSwgMHg4NmE1M2RkZCwKLQkweDUyMDE1ZGM3LCAweGQ4ZWU1ZjMwLCAweGRjNDE5NTU0LCAweGRlZWJlNWFlLCAweDc5ZTNiZGM3LCAweGU5OWMxYmJkLAotCTB4OGY5Zjk2MzYsIDB4M2IyNzZkN2YsIDB4Mjc1OWNmY2IsIDB4ZTI0Y2JkMDUsIDB4N2U1MmYxYjMsIDB4MTg5NTNlY2YsCi0JMHgzZjc5NjRlYSwgMHg5ZTIwNTBhYiwgMHg1ZmRhNTdjYiwgMHg1YjcxODI5OCwgMHg3NTg4OGUzYSwgMHhiZDFkYjJhYywKLQkweGI1ZmZmMzA1LCAweGMzMmRlNzliLCAweDk5YmRhMWJjLCAweDRlMGQ1Nzk4LCAweDg2ZGFiY2M0LCAweGQxNWEyOTA5LAotCTB4YjM1YWZjYzgsIDB4NzVkMDQ0YTMsIDB4OTlmNzA3NmYsIDB4YTg4MTc0NDgsIDB4YmE3YjdjMWEsIDB4OWZmMDJkYzMsCi0JMHg1OWExMzA3NiwgMHg2NDc1ZjdkNCwgMHgwZWQ5ZmMwYSwgMHgxZDNkODA5ZiwgMHhiYmJjYTI4NSwgMHhkZGY5MmJjOCwKLQkweGM3NWZlZmQ5LCAweDUwZTcwNGYzLCAweDdjMDc5YjYxLCAweDc4M2ExNGYzLCAweDA5MmE3N2ZkLCAweGE4MDI5YzZhLAotCTB4ZjdjMTc4NjYsIDB4ZmYwNGIzMjcsIDB4NWQ4ODc5MGMsIDB4YTI3ZWFjY2YsIDB4NWU3YzkzMjYsIDB4MjZhNmU4MzksCi0JMHg0NTVlZmM5MywgMHhhZTdjMTZhOSwgMHhiZWQyY2IzYiwgMHhhOTY3OWJjYSwgMHg1MmYzM2FiZiwgMHgzZTM1ZmQ0YiwKLQkweGFlYmYwNWJmLCAweGZkYTViYTcwLCAweDE2NTVlYWY1LCAweDZiOGFjNmZjLCAweDA0MTdlZDJjLCAweDliZjA1ODE2LAotCTB4ZWQyZDZiYWEsIDB4YjA2OWFlNmYsIDB4NjhiYWRmZDQsIDB4NTZiZWE1YTUsIDB4OTdjMTZiNWIsIDB4ZDJkYmI4YWMsCi0JMHgwZGI2YjZmZSwgMHg3OTAwZmE5NiwgMHg3MjcyYzQxZCwgMHg2M2UzZjk5NCwgMHhmMzEzZmZiYSwgMHhkN2NlZjAwNSwKLQkweDdjY2M3ODI3LCAweGQ2ZDczOTlkLCAweGRjOGMzM2Q2LCAweDMyZGM4NjFlLCAweDA3ZjVkZTdmLCAweGU0N2M4MzllLAotCTB4MzIxY2E0ZDgsIDB4NTNjYjEwMGMsIDB4ZjUxM2VhYWYsIDB4MzA1NjE0ZDksIDB4MmNiZDliMGYsIDB4YmI2YzRkYzgsCi0JMHg4OTk5ZmFkOCwgMHgzMWYzM2VjNywgMHg3ZmZkNzMwZiwgMHhmNmMxYzhiMSwgMHg2M2I0ZTY2MCwgMHhiZjE5ZTNhNSwKLQkweDkxNmZiZmM5LCAweGNjYzhlZDgzLCAweDA2N2Q4ZTJiLCAweDE5ZmYwZGZjLCAweDVkYzRkZjg5LCAweGY2ZmVmMDY3LAotCTB4ZjIwYTJjMzcsIDB4OTk1ZTY3M2EsIDB4M2Q2NTRkYmYsIDB4ZWE5ZDM3YTQsIDB4N2NiMjM0NTMsIDB4MGU0ZGRmNjIsCi0JMHgzMGMwNmZiOSwgMHgzMWUwMjNjYiwgMHgxN2MwNDc5NiwgMHgwYTliMWU1OSwgMHg3OTY2NWU4OCwgMHg1MGViZWMwNCwKLQkweDNiMmZmOTQ1LCAweGRlM2MwNDJhLCAweDhkZjAxMDExLCAweDRmMDE2YThlLCAweGY4MDhkNDc0LCAweDAyNDU4ZWFiLAotCTB4MTM0M2JhZmUsIDB4YjFkMzdlZmQsIDB4M2E3N2MwNDIsIDB4NmZmOTQ0ZGEsIDB4N2MwNWRhM2IsIDB4Y2EyODIzYWYsCi0JMHhhMTE1NTdkZiwgMHg4MjAyYmNmZiwgMHgwMzM5YzJkZCwgMHhmNmVkNWRmOSwgMHgyZTdjZWQ4NCwgMHhmOWU3MTFkMCwKLQkweGZhY2FiYjIxLCAweGVlZDgwNGFkLCAweGRmMTRkZDMzLCAweGQ4NjNhYTY4LCAweDQ0OTE0NmQ5LCAweDkxYzQ2NWU4LAotCTB4OGJmOTg2N2EsIDB4MzdlZGMzOWYsIDB4NzQxZDQ3NmEsIDB4MWI4ZjE4YzYsIDB4MzgxZjEzZGYsIDB4MzQ0MmJiMDcsCi0JMHgzMTI2N2JkNiwgMHgxZmMwN2U1YSwgMHgwM2U1MDRmOCwgMHgyNTM5ZjUwNSwgMHgzZWJkOWZjYywgMHhmOWYwNTNlZCwKLQkweDRkYzY5MmU2LCAweGFlMzc2YzI5LCAweDA5Y2RhYWZjLCAweDQ2ZGI3OTM5LCAweDhmOTM4NjJiLCAweGIyM2U1ZDVlLAotCTB4NjM4YzE0MWQsIDB4MjliODE3N2UsIDB4ZjAyNjkyOTgsIDB4MGU2MThiODAsIDB4ODhlZWMzOTcsIDB4MDE3N2RlM2YsCi0JMHg4MWU0M2U2MCwgMHhiOTYzZTUwOCwgMHhiNjcwY2RkZSwgMHhmMTBhNzkzYiwgMHhlNWMzOTRmOSwgMHgxNDJmMjE3NiwKLQkweGMyN2FjODcwLCAweGI0MWU1Yzc4LCAweGE5ZTc0NWE1LCAweGRmNjEyNDFhLCAweDg0NzE2ZDY2LCAweDFjOTIxZjYwLAotCTB4Yzg5NWI2MTQsIDB4NzIyNWM5ZjYsIDB4ZGNiM2UwNWUsIDB4ZTU4NTdlM2QsIDB4NDc4YjU2NjQsIDB4MzI3ZWYyMGQsCi0JMHgyMjU1ZGViOCwgMHgwY2VjMDdkYSwgMHhmNzNkZmM5ZiwgMHg1MTRjMjI5YiwgMHhkNDQ0YTEzMCwgMHhiZDcyZjU4YiwKLQkweGEwZDU0NzU4LCAweGNmZjQwMTQ2LCAweGVmNGUzNTI0LCAweDQxZjU5NmVmLCAweDZiYzU5ZmY0LCAweDMwYzE1ZjgwLAotCTB4OWM3OWYxODQsIDB4NzY4OWQ2MDAsIDB4MTg1ZGIyODksIDB4Y2U3YzE0ZTMsIDB4ZjQ5YjI0ZjMsIDB4OTY0MmZlYzUsCi0JMHhkZjY1ZmI4MywgMHg5ZjYxNTJlOSwgMHhlNDRlZDI3MywgMHgzZjMxZWVjMSwgMHhmZWI5ZjljNiwgMHhkYmQ5ZDRhNiwKLQkweDlhOWZjYzIzLCAweDI2YmZlZjM4LCAweGYzNGE1ZjMyLCAweGZmOTQwMmI0LCAweGMxM2YxOTRhLCAweDRjMTdlNjBmLAotCTB4YzQ5MzUzMTksIDB4ZTdjNmM0ZjYsIDB4MzlmNjMwZTQsIDB4M2YwNjJmOTYsIDB4ZjQxYmJhMGMsIDB4NDhkYmU1OGQsCi0JMHg0Zjg5MWFmYywgMHgxYWE5ZmNiMSwgMHhmNDFiZDI4YywgMHg1MTJmOTkxYSwgMHhmZjk1MDVmZSwgMHg3NTRjYmU3YiwKLQkweDdhYzZlY2Y0LCAweDJhZGM1YWUyLCAweDdjNmRmM2Q2LCAweGU2OWZiZGJhLCAweDg2OTM3MGE1LCAweDgwY2JkZjQxLAotCTB4NWViNGYyNjcsIDB4NWQyMzUxZTgsIDB4OWEwYmNmMzUsIDB4ZTBjNWVkNzksIDB4MGJiYjZjNGYsIDB4MDNlM2I0MjMsCi0JMHg3NzljNTZmNywgMHg2ZDI3M2U3ZCwgMHg4YjVmZjllNSwgMHhhMGE3M2E2NywgMHgzM2YxZTAzYywgMHhmNmVhZTYxZiwKLQkweDg0ZGE4ZmEyLCAweDI5Mzc2NzNkLCAweGVhNTRmZTA4LCAweGI0NWI5YWFjLCAweDk1OTdmODVjLCAweDM2YmZhYjFlLAotCTB4OGQ5YWFiZWYsIDB4ZThkZTc3OTgsIDB4Y2Q5NWZmMTgsIDB4NmJkMWNlMzIsIDB4YTZhZjcxZjUsIDB4ZjU2ZTMxMmUsCi0JMHg2YmJiNmI1OCwgMHhkYWYwYmY3NSwgMHg1ZGY5NmIwMiwgMHhjYmFmZGQ3ZSwgMHg5MWQ4M2NhMywgMHhiYWU1NTI0YSwKLQkweGNiZjA5YjY4LCAweGRjNzJiZDJhLCAweGUzYWY5ZDZjLCAweDA5OWE3NjdkLCAweDgwZTY5MWJlLCAweDc3ZjE3YWYxLAotCTB4N2JkNjAwYWUsIDB4N2UwNTA1MzUsIDB4YmMwNDg1MGQsIDB4OWM2MmMyOGUsIDB4MDFkMGQ5ZWIsIDB4MDljODkxYmYsCi0JMHg5ZmRkYzViYywgMHg1ZTkxNjJlYiwgMHg4N2RlZDc2ZCwgMHg4ZTQ5ZjNkZiwgMHhlYjg1MjkzNiwgMHhmYmI1ZTMzMywKLQkweDg5YmQxN2ExLCAweGUxYWRkNDM3LCAweGNlOTZlNmY5LCAweDYzYmY0MDJkLCAweDJmZTEzZTk1LCAweDE3OGY3MzFjLAotCTB4ZGZlNDBiZmUsIDB4OGZkNTE2OTksIDB4MTdmZWQ5NTcsIDB4Zjk3YWRhZjAsIDB4ODk3YzAwN2MsIDB4MTYwMjg3Y2YsCi0JMHg3Y2Y4NTdmNiwgMHhlMTZkN2UwMCwgMHg3OWJmNDIwNiwgMHhhNjFjODUzZSwgMHhhZmZkMWI3ZCwgMHg0NzIxY2VmMywKLQkweGY3ZjZjOGU5LCAweDFiM2YyOWJhLCAweGJjOWNiMWFiLCAweDkyYTkzYTk2LCAweDU1YTcwMTkyLCAweGE1YWZiZjYyLAotCTB4OGMyNGQ4NjYsIDB4N2M1ODA5NzMsIDB4ZmYzODYwYjgsIDB4ZThiZjkwY2EsIDB4MzFjOGYzN2MsIDB4MWIzYTY0NmEsCi0JMHhhN2E1OGQ3NCwgMHg4MTNmZTc0MSwgMHg0NzBkY2ZhZSwgMHhjNDk1NWVkNywgMHgzZWUwMzYzOSwgMHgzMTNkOWFiMCwKLQkweGY2OTQ0ZDZhLCAweDg5Mzg3MDIwLCAweGQ3N2U1OTMyLCAweGEwODdiMjFkLCAweDg5NjMxZjhmLCAweGQyNWYxODU5LAotCTB4YmZhNTBhODksIDB4ZWY1ZjVlYmUsIDB4MTYzNDFkNDcsIDB4NTNhN2E2ZjQsIDB4YmE1ZGY5NDQsIDB4Y2ZiNzM2Y2MsCi0JMHhkNjVjZmIxMCwgMHg3ZGZhMjE1ZSwgMHg4OGJkYTcxOSwgMHgwOTJmOWM3NSwgMHg4MjBmNjQ0ZiwgMHg5OWQ1ZGEzZSwKLQkweGY5ZTc4MzNjLCAweDBhYmI1OWU0LCAweGVlYzViYmZmLCAweGQ3NDJhNmRiLCAweDRmYWJiMzVmLCAweDU1ZjRiOGYxLAotCTB4ZTg0MmVlNmYsIDB4ODZhMzkzZDMsIDB4YjhiNDY3YmQsIDB4N2I4ZDFkMjUsIDB4MzU3OTU3YzYsIDB4YzhlZjM4YmQsCi0JMHhmNTI5OWE1YiwgMHg4NWU4MTQ5MCwgMHg4ZDhmM2U3MSwgMHhmMmMyYmI2MywgMHhlMTI1Y2JiYiwgMHg3OTc1ZTc0OCwKLQkweDEyYTdkYjAyLCAweDQ5ZDg1ZWQxLCAweDRmZGM3ZjgzLCAweDRlM2NkOWUwLCAweDBmYzhlYzM5LCAweDdlM2Y4NDEzLAotCTB4OWVmMDI1MmUsIDB4OTI1NmYzMWYsIDB4YmY2NTlmYzUsIDB4ODFhZGQ4NTcsIDB4YjM4ZTkyZDEsIDB4MzMyM2UyNjksCi0JMHg3M2VjYWYxOSwgMHgwN2ViODg1MiwgMHgxYjVkYTUyYSwgMHhkZDg1YjhmMCwgMHhkMWI1N2FhYywgMHhhOWRjZmIwMSwKLQkweDRjYjg4YmRiLCAweGY0OThmN2JlLCAweDQwOTdkZTNmLCAweDI2ZmM5MzNlLCAweGYwNTlhNjE2LCAweDRiMTJmNTI0LAotCTB4N2M4YTk0ZmIsIDB4ZTA2YTdkNGIsIDB4YThmZDRiMzIsIDB4M2UwYjEyZWEsIDB4YTU4NjY2YTYsIDB4MzlhMmM2N2QsCi0JMHhiYjRiM2MxNiwgMHg3YjNlZDJkNiwgMHg2ZTBiNDJjNSwgMHg1OTZjYTFkOCwgMHg4YjZkMzk0NCwgMHhiNWM3ZmQyZCwKLQkweGNmYjRiNTJmLCAweGE5NjFkZTBiLCAweDQ0ZTA2MGE3LCAweGQ2YWZmNzIxLCAweGIyZGY4ZmZiLCAweGU0Y2Y1YWNlLAotCTB4MmY0Mzk1YjUsIDB4OTI4ZmRmZTQsIDB4ZTYxNGZiYWIsIDB4ZDk2N2I1NWYsIDB4ODRlNWU4N2MsIDB4ZWJhYzdiYWUsCi0JMHhjNzY1N2ZiMSwgMHhhMjlkOTAzOSwgMHhmZmE2MjhkMCwgMHhkZGFiM2VkNSwgMHhlMmI0Y2FhYiwgMHg4YmZmNWU5NSwKLQkweGFmNWNkZDYwLCAweDlmYjJlZWQ1LCAweGIyOWU0MGE3LCAweGYyOTYxY2RiLCAweGRkYmEyNWIxLCAweGM0NTM0MjljLAotCTB4ZjhkYmY4N2QsIDB4ZTE2NjVkYWYsIDB4MmViZDJjN2YsIDB4ZmUwMzg3OTYsIDB4YjQ5YmI3MzAsIDB4OTcwNzJhYzMsCi0JMHgzMDcyYWM4NiwgMHgxY2FiNjlmOSwgMHhlNTU4ZjcxNCwgMHg1NjIzZjJlMCwgMHhhZDg3ZjAzOSwgMHg2N2RhNTA3MiwKLQkweDEzYjI4Mzk1LCAweGY2OTgzOTU2LCAweDBjMGU1NThlLCAweGQ3ZTU4Y2Y5LCAweDNlNTU4OGY0LCAweGU1MzQ1MzQ4LAotCTB4OGFlYmYwOGYsIDB4ODlmOTU2YjMsIDB4YmY1MTBmZTUsIDB4OGYzY2RmZTAsIDB4ZmRlNjhmNDIsIDB4MTg1YWZjZjksCi0JMHhmZTIxYWZjMywgMHg3N2UxYmQzMCwgMHg0ZTRmMGVjZSwgMHg2N2Q1NWUwMSwgMHhmN2NmMTBhNywgMHhhYmNmYmU5OCwKLQkweGYyNzliNzI3LCAweDc0ZWU5ZWQ5LCAweGQwMjU3NTY4LCAweDNhYWU1ZDczLCAweDBkNWNhNGIzLCAweDg3ODgxZGY0LAotCTB4MTk4ZmFmZGQsIDB4NWE1OWM3ZmYsIDB4MWEyZmRhMDMsIDB4MGJhZTU5ZjUsIDB4NGRhZmQxZjIsIDB4MzllOTdkYzIsCi0JMHgxZGRkODQ5NSwgMHhlN2M3MjA5NywgMHg0NzU4YjI3YiwgMHhhODdiMWVmMCwgMHhkMjcxZDc5MywgMHgzZWMwYTVkNiwKLQkweDJiNmIyNzM3LCAweGEyZjZmZmQxLCAweDA3NzA4NTM2LCAweGZlODJhMGEzLCAweDk3MWNmZmY1LCAweDFjN2ViYzBiLAotCTB4MTUxZTdiODksIDB4MjQxNmNhNDUsIDB4N2Q2MmVkNDUsIDB4N2FmMzk3MzYsIDB4ZjdlODk2ZDYsIDB4YjllYjk1MTQsCi0JMHgxOTEyZmFkZiwgMHhiZDUyNDhiNywgMHgyOTBmMTEyZSwgMHgyMGUyMDBhMiwgMHhhZGM4YmQ3YywgMHg4ZTNkMDYyZiwKLQkweDNkMDI0ZmM3LCAweDliMmE2ZGJhLCAweDdkMzg4YTM4LCAweGYwNjdkODI5LCAweGE1M2QzYjU1LCAweGZlMTEzZjQ4LAotCTB4N2ZlZThlNWUsIDB4NGVmZjUzNjUsIDB4MGVkMjczYWMsIDB4OTdhYjljYjIsIDB4MzBlNGRjODYsIDB4ZDNmMjdkZDEsCi0JMHhkYzVlMGI1ZSwgMHg3ZjY5Njk5MywgMHhhNTlmMTFmOSwgMHhiNDJlMWZkZSwgMHhhOWY2OTdkNCwgMHg0NGVjYmMxNiwKLQkweGI0ZmRhNTg1LCAweDdjMTYwMjc3LCAweGQyZGFhNDdhLCAweDM1YjM4YWZlLCAweDIyOWM3YzE2LCAweDVmN2ZhZmVmLAotCTB4ZTNlOTJmOTIsIDB4N2RlNDQ1NjMsIDB4YmE5ZmRmZDYsIDB4Zjc4OGFiN2IsIDB4ZTFhZDdiYzksIDB4MjNkNzUzNGYsCi0JMHg0Y2UyMzcwMSwgMHhkZWM3MWNiYSwgMHg0MDRjNWM4NywgMHhmZWM1Y2ZmMCwgMHhiMTgzY2UyZiwgMHg2YjQ3ZTk2ZSwKLQkweDI5NGZiYWY3LCAweGRkM2Y1MWM5LCAweGZmMGRiM2YwLCAweDAxNTU4Mjk1LCAweGZkYzNiOWYzLCAweGZiYTJmOWU0LAotCTB4NmQ3Zjg2ZjMsIDB4OGJkM2NkZjgsIDB4NzIxY2UyN2QsIDB4MjZjYWJjNmUsIDB4YzkxMWMxZTQsIDB4YzdkNzljODIsCi0JMHhmZGY3YjBkMSwgMHhiZGU0NGJlNywgMHhjNmZkNzYyMSwgMHg5ZmU3NjJiYSwgMHhlZDk1ZWM1ZSwgMHg3MjlmNzFmNSwKLQkweGMzMzVlZGQzLCAweDVjYmEzM2Y5LCAweDczNWYxYzJkLCAweGI4ZjlmMjE0LCAweDc5Njc3ZDUzLCAweDllN2Y3ZmRlLAotCTB4YjNjZmE0Y2UsIDB4MmU1Y2RlODQsIDB4YjM2NzVmZDcsIDB4MzFhM2Y4ODksIDB4NTJhOTkxY2YsIDB4N2YzODBkNWUsCi0JMHg3ZTNiZmIwZSwgMHhlMzdkZWVhMiwgMHgxZmQ4Nzg3NiwgMHgyMWRkYmM3OSwgMHg5ZmM3MDhlMiwgMHgyYzFiNTE1YiwKLQkweDAxNDQzZjgwLCAweGVmOGUzMzhjLCAweDdjMGZlMDAzLCAweGFlMWZkYzBhLCAweGZkMTc2YTk5LCAweGJkNDg5N2NmLAotCTB4MTI2NWRhOGIsIDB4MjQ4MDc5NzYsIDB4NWRkYTA3ZmYsIDB4MGMzMTdlZTIsIDB4MTgxYzg1YmYsIDB4Y2M3YzQxZmIsCi0JMHg2MmUzMjA1MSwgMHgzOThiODg4MCwgMHgwNjJlMzIxYywgMHg0MDMxNzExYywgMHhmZTUwYzVjNCwgMHhmMDJhODc1YywKLQkweDAyMTUxZDgzLCAweDIwMjNiZTdmLCAweGQ1MWQyM2YwLCAweGEzYmNmZTAyLCAweDcyMWI5NDQ2LCAweGUzMmY0YjEzLAotCTB4MWZmMDY2M2UsIDB4YTM3Mzg4NmEsIDB4ZTcxZTQ2MjAsIDB4ZTVmOTI3ZGYsIDB4ZDlhY2ViNWIsIDB4NmY5YzViYzMsCi0JMHgyNGE1NmFhMywgMHhhNmRiY2Y0YSwgMHgyZGM4Nzk0YSwgMHgzYjQwNzQ5NSwgMHhlZDQ4ZmZlOCwgMHgyOTQ1ZWNhYSwKLQkweDkwMGVhNzg4LCAweDQ3ZmJjNTJmLCAweDUzZmY4NmUyLCAweDZlZTgzMGY0LCAweGZhYTM1N2RjLCAweDI0NjFmNTI2LAotCTB4YmZlZTM0YmQsIDB4ZDBhY2ZiYTYsIDB4OGM3ZDU4YmIsIDB4YmE1OGRiZDUsIDB4YmRlYjNmOGIsIDB4OGQ3YmRlNTksCi0JMHhhN2FlODVmOCwgMHhiZDBjNWYwNiwgMHgxNmE0NTI3NiwgMHg2MDU0MjVmNiwgMHhlZjdkMDZhYiwgMHhkMWVhYjI0ZiwKLQkweGJlOTJhNWY1LCAweDg2MjNkMDAzLCAweDc0ZGU3Y2E3LCAweDc2ODdjZTFiLCAweDU2MDdmMGFmLCAweDkwY2NiNmU4LAotCTB4ZWM4N2U2ZDMsIDB4ZjNlMjdjZTIsIDB4ZWQzN2UzZDYsIDB4N2RiNzc5YjcsIDB4NmVlZjllYTgsIDB4ZTIxNWJmYmMsCi0JMHgyMDFkOWQ1YywgMHhkYTVmMWY3MSwgMHg3Mzc2ODRhNSwgMHhmNWEwODZiZiwgMHgyNTIxMTQ3YywgMHhmYWU0NmZhZSwKLQkweGUzNWZiODE3LCAweDMzZjNkODk2LCAweGYyMjFkNjIwLCAweGU2YjViYzJjLCAweDcyZmQ2YjJlLCAweDMzYzkxZWZkLAotCTB4NjMyNzYwYmEsIDB4OTY1NzBhZjMsIDB4NGFhMGU3ZWEsIDB4NWY3MjM3ZWEsIDB4ZGQxMDVlZTIsIDB4YTE1NzJlOTcsCi0JMHg4NzM4MjlmMSwgMHhjYmI0YWY3MCwgMHhjZTM4NDZiOCwgMHgyMWYzYWY3NCwgMHg4YTJhM2ZjZSwgMHgwYTEzM2QzMywKLQkweDc0NmU0ZTcxLCAweDE3N2MxM2E4LCAweGNmNDFhMWNiLCAweDllODMzY2ExLCAweGVhZTcxODRmLCAweGUyM2Y3NTNmLAotCTB4OGJjN2NmOGIsIDB4N2ZjZjA1N2IsIDB4YmU3NmU4MjMsIDB4ZmY0MGFlY2YsIDB4N2EwOGYyODcsIDB4M2I0MWYzZmIsCi0JMHhlNzNlOTlkOSwgMHhiYTA5YzYwZiwgMHg3ZTNiNjI3ZSwgMHg5NGNmYmU0YiwgMHg1ZjI4Yjg3NywgMHhiMDE1Yzk0MSwKLQkweGE4YzZmYjFmLCAweDY1ZDY2MWMxLCAweGZiMjIyZDQwLCAweGUxYmY1ODhmLCAweDk5ZWUzMjUwLCAweGZjYzhjZjJkLAotCTB4YmQzM2NiNDQsIDB4N2IyNjA1ZTksIDB4MTBlYTVjZDgsIDB4YTZkYmJiZmIsIDB4ZmYyMjk0YjUsIDB4OGI5ZGRmNjAsCi0JMHg1ZjFkZGU3YiwgMHhjZTAwYTY4NiwgMHhiMTJkZTNkNywgMHg3N2IyMTlmYiwgMHg0NzIxMTUzMywgMHg2MTNmYmMwMywKLQkweGIxMTVhYWVmLCAweDA0OTdiNjNmLCAweDk4OWI3YjNkLCAweDAyY2UzYzliLCAweDM0MDY4ZjBhLCAweDk2ZGEwMGYyLAotCTB4MjMwN2MxMGEsIDB4YWUxMGQwMGYsIDB4YjliOGZiMTAsIDB4ODEzM2I5NzMsIDB4ZGU3NjQ0OWIsIDB4OGJlMDk1NWIsCi0JMHgzOTIyMDdlNiwgMHhjN2ZlMDhiNCwgMHg5YjgyNzk0OCwgMHhkZTMxNTUwNiwgMHg4ODY3MDZmNywgMHhjZDI4MWU3MSwKLQkweGM2ZDBmZTkzLCAweDFmZTE2YmVkLCAweDM5MzRmNjVlLCAweDUzODg4NzQxLCAweGE3NGIxMzhlLCAweGYzY2E5NDNmLAotCTB4MWQzYzEzMjAsIDB4YmFkZmRkMTMsIDB4ZTdiMDhhMGQsIDB4YzAyYmEwZWIsIDB4OWVjMjJiYjcsIDB4NWQ2N2Y4MWIsCi0JMHhmMTI1NWUzYSwgMHgzYzQ5MzczYiwgMHg1MTZjZjRlMiwgMHgxMTdlZTQ1MiwgMHgwMTNlYzAyZiwgMHg2YmRjMWZiMSwKLQkweDA1ZjFlOWY3LCAweGZiMTAwM2VjLCAweDE4ZWMzOTQwLCAweGUwMzFkODcwLCAweDYxYzA2M2IwLCAweGM3NjEwMGM3LAotCTB4NmE5NGJlNTAsIDB4NDNlNzExNzIsIDB4YWNkMmEzM2UsIDB4YWE2ZTgzMjcsIDB4YzgyNWY5MzQsIDB4ZTQ3MTk4NjcsCi0JMHg5MWVkY2MzMywgMHgyM2Q3MzBjZiwgMHg0N2FlNjE5ZiwgMHgyMzhjYzMzZSwgMHg4ZjZlNjE5ZiwgMHg0NzE5ODY3YywKLQkweDFlZGNjMzNlLCAweDhlMzMwY2Y5LCAweDNkYjk4NjdjLCAweDdhZTYxOWYyLCAweGY1Y2MzM2U0LCAweDcxOTg2N2M4LAotCTB4ZWRjYzMzZTQsIDB4ZDczMGNmOTEsIDB4NThhZWRlZGYsIDB4YjNiNzFkZjIsIDB4MzVkYzg2ZjksIDB4ZjIxMzQ4ZWUsCi0JMHhhNmFmMzYzMSwgMHg3ZWZlNzIwZiwgMHgzOTc3ZDdlMiwgMHhhM2U3YzFmMywgMHhlYmI3MjEyYiwgMHhjOTU0MTM1YSwKLQkweGM5NmFhZWU3LCAweDNlNDkxYjc3LCAweDNlMGFkN2Y3LCAweDc4OTJlYmRmLCAweDFkZTE5YTk1LCAweDFlNDIyZmM2LAotCTB4ZTY0MGIyYTEsIDB4NDc5MTAwMTEsIDB4MDExZTQ0MDAsIDB4NGE4NDc5MTAsIDB4MDAyM2NjODcsIDB4NzI4MDhmMjIsCi0JMHg5MTAwMTFlNCwgMHgxZTQ0MDA0NywgMHgwNDc5MTAwMSwgMHgwMDExZTQ0MCwgMHgzZjQwNDc5MSwgMHg5MTAwMTFlNCwKLQkweGYyMzk0MDQ3LCAweDIzYzg4MDA4LCAweGFmMjRmY2EwLCAweDYzMDRmOTAzLCAweDBiYTNmMDVkLCAweDk2M2NmNzJjLAotCTB4Y2YzZGNiNDMsIDB4NDdlMWMxNmIsIDB4OGZjM2RiOWIsIDB4OGZjM2Q3MzYsIDB4OGZjM2Q3MzYsIDB4YTNmMGUzMzYsCi0JMHg0N2UxZWRjZCwgMHhhOTU3NzE5YiwgMHhmYzE3ZTg0ZiwgMHhmODNmNzM2OSwgMHhiOGJjNjZkMywgMHg2MjEyZjgyYiwKLQkweGZhZWZkNzQ0LCAweDkxODA4YmRkLCAweGM1NzFlNTI0LCAweDQxZWM2N2NiLCAweDRmN2M4YzVhLCAweDRkYzk1ZTI0LAotCTB4NTQ1Y2Y5NTUsIDB4MTkyYjhiNWMsIDB4ODQ0YjA2ZDcsIDB4N2VhMTRmZGUsIDB4ZjIyZGY4MWIsIDB4MmQzN2NjYjcsCi0JMHhjZGU0MjE0YywgMHgxNGM4YmY4YiwgMHg1MTNlNDZmNSwgMHhmZGRmMzFmYywgMHhlN2Y4NDkwNywgMHg1ZDcyNDVkZCwKLQkweGJjOTU3ZjQ2LCAweDdkYTM0MDc2LCAweDVkYmUxZjE0LCAweDNiNDZmY2VjLCAweGViNGQyZjYxLCAweDFmOWIwYmUwLAotCTB4YmRmZjdjZjksIDB4MmNhZDkyOWUsIDB4OGE2ZDdiNGYsIDB4YjJmNzRmZjAsIDB4MTg3MGI1OWYsIDB4Zjc0YjM0YmIsCi0JMHhmNmRhZjY5YiwgMHg3ZWUwNGIxZiwgMHhiYThhMGRmZCwgMHhlODllODc4NywgMHgwOTY3M2VhMCwgMHgwMjU2ZDRlOCwKLQkweGQ0YzI2MjNmLCAweGQ0N2YzZDU0LCAweDcxNjE2MzM2LCAweDNjNDZkZDc0LCAweDAwNDRlZDhmLCAweGZkOTllNzc5LAotCTB4NzllMjZhZTQsIDB4YjkwN2ZkNjYsIDB4YjljZmUxOWEsIDB4N2U4MTFmYTQsIDB4MGU0ZGNmYjgsIDB4MjYzZDgxMmEsCi0JMHhhYTdjYmVmOSwgMHhlMGI0ZmYzYywgMHg1YzRkMTlkYSwgMHhkYjVmNzkzZSwgMHg3N2Y4NjY4YywgMHg4ZmRmYjIwOSwKLQkweDc0MTY0ODlmLCAweGIyYTM2MWJjLCAweDk5ZmJjZWM3LCAweGJiMDI4ZmI5LCAweGJlODU1ZGI5LCAweGJjZmJjOWVlLAotCTB4YWYzMTI2YWUsIDB4Y2U2Y2Q1ZDcsIDB4NzVjYWVmYmYsIDB4YTQ1ZjcwZjksIDB4ODhhNjY1NDgsIDB4M2M4NDJiYzUsCi0JMHhkZTM3NDE5ZCwgMHgxZmQ4OGJkZiwgMHhjNDNlZjg5YiwgMHgxZDNkNTc2NSwgMHgyNGQwZmRlZiwgMHhhOTNkYWQxZiwKLQkweDkxY2Q3YzE2LCAweDI2ODdlZjJjLCAweDFmODU1YjM5LCAweGVlYzQxNzJjLCAweDE2YWRjZTIxLCAweGY1YWJlNTlkLAotCTB4OWE5NWI3ZjIsIDB4OWU3ODRiY2YsIDB4MGJiZjc3NTYsIDB4MzUzNTliZjQsIDB4NmMzNDZhYjUsIDB4Mjc1MjUxZmYsCi0JMHgzNmE2ZWU0MCwgMHhlYmMzMWE2YywgMHhkNTAxNDJkMiwgMHhkYWJkMDNlZSwgMHg5M2Y4MTI1ZSwgMHhlMjE3MDIzNSwKLQkweDI3ZDYyZTUzLCAweDQxNDljM2NlLCAweGE0Yzg5YzI1LCAweGRiYjgyMWI4LCAweGViZjE5YTM2LCAweGU5OWMxYjgzLAotCTB4NTQ4ZmJmNjgsIDB4Zjg5MzAzYjgsIDB4NzQ0OTc2N2YsIDB4YzI3NDQ1NWYsIDB4NWU0MGFmMTYsIDB4NDk5NDc3YTgsCi0JMHg3YzcyZDhmZSwgMHg1N2UyZjIwZiwgMHg1OGY5MDQ5ZCwgMHg2MTNhZjBlMCwgMHg4ZGZkNjI2ZiwgMHhlYzBmNzdkOCwKLQkweGVjMmFkYzdmLCAweDIxZDM5ZjU0LCAweDNmZGQzYWZjLCAweGI1Y2FmMDZhLCAweDI5ZDFiNjdlLCAweDQzODY4ZmZjLAotCTB4M2VhMDdmZWMsIDB4ZGUzMGRmYzYsIDB4YTFkZmIwNDMsIDB4MWY4ZTcxODYsIDB4NzIwZDRlYmMsIDB4YjdkYWNiNTUsCi0JMHg3MzgzYmJjNSwgMHhhOWJkYTE3OSwgMHhmMmU3ZDcyYywgMHgwMTUyZGZmNywgMHgwYWVkOTBiZiwgMHgwZGZiMjllYywKLQkweGI5NjU0ZTc3LCAweDUyZjRkODZiLCAweDkxNWRlZTMyLCAweDZmZTEwMWUwLCAweGExZjFiNjdjLCAweDkwNWYxOTY0LAotCTB4OWQyNjg5ZjksIDB4YTZmYzQ2NGUsIDB4OTM0N2U3NTksIDB4MDNlNWVlZmUsIDB4YTk2YzViYjYsIDB4ZjE4NmVlNzEsCi0JMHgyYmQ3ODE1ZSwgMHgzZjU4OGFmYywgMHg5YmZiYzg5MSwgMHg4MmJmNWM5OSwgMHhiMTk1YjNmNywgMHgzNjFhZGJlNSwKLQkweGZlYzVkMjY3LCAweGFlNmZlMWEyLCAweGI5NWRlN2QyLCAweGI3ZGUyOWQxLCAweDM4OTBhMGFjLCAweGFjODY1NjBmLAotCTB4ZmVlOTU3ZWQsIDB4YWRhN2FhZTcsIDB4Y2E5ODNmZTUsIDB4YTFmMjI3N2UsIDB4ZGZhOWRmODYsIDB4ZGJkNGVlOTMsCi0JMHg3YmRlYmMzNCwgMHhkYTdiZjBiMywgMHg1MDc1Yzg5YywgMHgwN2U5MDZkZCwgMHg0ZDBhN2VkMSwgMHhiNWNmODA1MCwKLQkweDc3NWUzM2M1LCAweGMzMmFhMDI4LCAweGJhOWJjZGM4LCAweDkzMWYzNDNmLCAweDBjMTczZDMyLCAweGIyM2IwODI2LAotCTB4ODExMmYwNzAsIDB4Mjk5ODMyZGYsIDB4ODU4M2FkZTAsIDB4MTliMTFjYjIsIDB4NGFhNDczZTYsIDB4ZTNjN2RkMDksCi0JMHg0MWZiYTViZiwgMHgyNjVlMGYzNywgMHgxOTgyMDdlYSwgMHg1ODA3OGU0MiwgMHgxNGM1MzE4ZSwgMHgxNjVkM2VkZCwKLQkweGQ2MTE3YTUwLCAweDM2ZDRlZjllLCAweGY5ZmFlMThkLCAweDk1Zjg0OWJiLCAweGUyNWZjM2Q3LCAweDlmZjA0NThhLAotCTB4NzkwN2ExNGEsIDB4NmY5ZjE4NTUsIDB4MGYyMTM0NmYsIDB4OTc1NmIwN2EsIDB4MTIwM2Q2N2IsIDB4ZWMyMDIzNzYsCi0JMHgxMDgyZTU1OSwgMHhkMjJjOTNkZSwgMHg2ZmMwZGJmNiwgMHhlMGI1ZmU0MywgMHhlYmYwMDcyOSwgMHg1N2NiOGE4MywKLQkweGUyMTVlZTI0LCAweDc3Yzg2Y2ZlLCAweDI3ZDQxZWFjLCAweDhmMjZmMWVhLCAweGM1MGQyNzhjLCAweDVlNThiMDliLAotCTB4YzViNTA1MWEsIDB4NDdhZmFlMDEsIDB4OWQxMmYwNmMsIDB4YTRhYTRjYjEsIDB4NzdkZjU5MjIsIDB4OTFiYzViNTAsCi0JMHgzNTNmYmRjZiwgMHhiMzY3NTExZSwgMHhiM2Y1N2UwOSwgMHg4YTA3Yjc5ZiwgMHgzMmFhMjc0YSwgMHg5NGRiMjdhMCwKLQkweGU4YmVhZDkyLCAweDlmMjg5ZTdhLCAweGJhNjY1MDMzLCAweGY1ZDUyZjI3LCAweDAzMmVmNThhLCAweGRmNzU4ZWY3LAotCTB4YzM0MTkwOWYsIDB4NmMwNjA1ZjgsIDB4YmY0MzNhNjQsIDB4NzcyMjUzZWEsIDB4ZmVlYTRjMjksIDB4NjRhODE0YTksCi0JMHhiZTkyZDZkNiwgMHg3OWZlMjQ0ZiwgMHgzYzc1OGI5ZCwgMHhkZmY2ZDBmNywgMHhmYTA4ZjE2ZSwgMHhkNGZjZmMwOCwKLQkweDQ1ODM4YjM1LCAweGFjMWQ4NjdmLCAweDc3ZDAxYzUzLCAweGFkYmUwZWMzLCAweGI3YTBlNzY4LCAweDNjYzhlZWFkLAotCTB4YThiMTM1ZjAsIDB4YzViZTA1ZGYsIDB4NmRiNmU3ZDIsIDB4MzEyN2RiM2QsIDB4MjRjYjcyMWQsIDB4NWQ1Y2VhZmYsCi0JMHg4MGI4ZjE0ZSwgMHhkM2RjNGU0MiwgMHhiOWU0OGIxYSwgMHhlZTVmMGU0MiwgMHhmMTFmOTExMiwgMHhiMTlmYjg4OSwKLQkweDZmZTAwZmVmLCAweGY0OTc0MzBmLCAweGMzNmZlOTMyLCAweGE0YjlmNjNmLCAweGZmMDgwYzdmLCAweGUwNGZlZjE4LAotCTB4N2Y4NzAzMWYsIDB4MThmZjA4MGMsIDB4ODE4ZmYwZTUsIDB4MGUwNjNmYzMsIDB4ZmMzODE4ZmYsIDB4YzdmODQwNjMsCi0JMHgxNmQ4N2YyOCwgMHhmMzNmNzUzOCwgMHg2ODViNTFmMywgMHhkMzk2NjFmZiwgMHhlZTZiNDdjNywgMHg1MWVmOWUzMiwKLQkweDIzOGY5MmVhLCAweDYzZmIxMzQ4LCAweDYyNzYxMWI5LCAweDdjYjEzZWM4LCAweDcyYTNjYmI5LCAweGY0ZmRiNGI0LAotCTB4NTQ3ZTViMjEsIDB4N2NiNjlhOWUsIDB4ZGMyOWYzYmEsIDB4ODQxZmQ5ODMsIDB4OTQ1YjZiM2UsIDB4OTE5NGRjNzAsCi0JMHgzYjg5ZWNlNSwgMHgzY2JlODQxMiwgMHhkODRiOGY3MSwgMHg4OWQ3M2FkZCwgMHg1MTc5ZGM5NywgMHhmZWRiYmU3YSwKLQkweDI3Njk0ZWI3LCAweDNjN2MxM2MzLCAweDc4YjZlMmVlLCAweDg5ZmY3NjE1LCAweGFjMWM5YWYyLCAweDE1NDhiMTM3LAotCTB4ZDljMDE5N2MsIDB4YjI1NmY4OGUsIDB4YTVmMjg3OTYsIDB4NGNlNWUyNzQsIDB4NTdmZjU3NmUsIDB4N2VhMmU3YWYsCi0JMHgxNzNjZDFjZCwgMHgxMWMzNmZlYywgMHgxZjRjZTZmZiwgMHgyMTEzNmJmYSwgMHhhZjFlMGRhZiwgMHhlYWM1ZmUwYiwKLQkweGJjZTJhOThkLCAweDcxOTBjZmFkLCAweDkxNDA5NjVjLCAweDMxZjgzMzA3LCAweGRmYzY0Y2JiLCAweDgwZWY3OWZhLAotCTB4MTI3YmY0MTcsIDB4YzBiOWM4MTMsIDB4MmRmMjRlZDIsIDB4Yjg4Y2RmNTYsIDB4MmI1YzZjNjIsIDB4NzI3OTVmMWEsCi0JMHgyMmUyM2U0YiwgMHhmNGVkNDlhMywgMHhjNDJmNGM1ZCwgMHhkMTI1NWMzZCwgMHhmYzZjNGFiOCwgMHg1ZDVmNDg2MywKLQkweDE5ZTc4OTY0LCAweDdlOTk0ZDcwLCAweGE5ZWZkNzRmLCAweGQ0Zjc0M2NkLCAweGYwMTk3OWEyLCAweGJjNTQxZmU3LAotCTB4NzkzNzNmODgsIDB4Njc0ZWI3N2MsIDB4ODljZmE5YmMsIDB4M2YzNDg4MTcsIDB4NjJjYWU3Y2QsIDB4OGFmYmZmYmMsCi0JMHhiZGY4MGY3NywgMHg1NmVjMmZkZSwgMHhlYmMyNzgxZCwgMHgyMTUxZGE2OSwgMHhjNDI5YjZmNCwgMHhmYWM4ZDQ3MCwKLQkweGRlYzFlNGJkLCAweDVmNjE5ZjljLCAweGViMGI4MGUxLCAweDVjMDZmMjZjLCAweGE3N2YyNjY5LCAweDk4MDk0YmIxLAotCTB4ZjgxOWZkZGYsIDB4OGUzMjY1ZWQsIDB4MDdkN2M3NTgsIDB4ZjViNmVmZDAsIDB4ODhhNWFlNzksIDB4ODNkYmIyNWIsCi0JMHg3NDZiNmVmNywgMHg3MWZhMzEzOSwgMHg2MjVlZjEzYiwgMHgwY2JkM2U3ZSwgMHg3ZGU3ZWFiOSwgMHhiZTYxNmVjMSwKLQkweDRiZjhkMzEyLCAweDdlNjliZTMxLCAweGI1ZmMyZjZlLCAweDYyNDk2NTk1LCAweGVmMmYwNmJjLCAweDJiZDAwZjNiLAotCTB4MTA3NGM5ZDYsIDB4Y2VkZmVhNzQsIDB4M2NjNGY5ZTMsIDB4ZTE4ZGVlODIsIDB4N2FjNTUzOTAsIDB4ZjE4MzRlZjAsCi0JMHgxMzkwZGVjNSwgMHhlOGRkMmNmMywgMHg2ZDdlZjExNywgMHhkYjQ3OWM5YiwgMHg4NjJhZWE5MiwgMHhiYWYwZTczZiwKLQkweDFlN2VjYzcyLCAweGIyZTQxZGNiLCAweGQxZmE5NzBlLCAweDBmYzJiZDYyLCAweGE1M2E2MjZlLCAweDYzNGNmZmMxLAotCTB4MzE3M2Q3YmYsIDB4ZjVmNDFhYmQsIDB4NWFhNTc1MzcsIDB4MDdhZWM2ZmQsIDB4YWQ0ZmUwOWQsIDB4ZjJjNGFlN2UsCi0JMHg4ZTVkMzFlMSwgMHhjYWJjNmU5NywgMHgwOGVmZTg0NSwgMHg1MzNlZjBiOCwgMHg2ZmZkZTlkMywgMHgyMmI3ZTM2YiwKLQkweGZkZGI1MjNmLCAweGYxOGYzMzg4LCAweDRmZDI2NWVkLCAweDQ2NzQwYzdkLCAweDNjM2YzODNjLCAweGZhNTNlZjAxLAotCTB4Zjc4YmM2ZDcsIDB4MmVkZWI1YjYsIDB4N2EyMWRmYjEsIDB4ODFmNGM0M2YsIDB4MTFhZGUyNWYsIDB4MDkzOTY2ZjQsCi0JMHg1MzVhZmRlMiwgMHhkMWJmOTViNywgMHg3MTg5MjRmNSwgMHg4NDFiYmE5YiwgMHg2ODczMmRmZSwgMHgxZDc5YWYyZSwKLQkweGEwOTg1ZTNiLCAweDU5NmE1ZDMwLCAweDNmOWMxNWVmLCAweGYyMTcyZDVlLCAweDViYTFlNjczLCAweDc5M2VjNTczLAotCTB4OTI3M2EwOWQsIDB4ZDg4NzliZWEsIDB4OTA4ZGNiMDQsIDB4ZWE3ZTQzNmIsIDB4MWIzZWE1NGIsIDB4OTMyYzFkZjMsCi0JMHg2NTgzOWNmMSwgMHhiZmU5YzdjMywgMHhiNjliNGY0ZCwgMHg3MTAwNTAzNSwgMHgxNTUyNGNiYywgMHhkNGY1ZGJlNSwKLQkweDVmNDM0ZmQwLCAweDY1MzhmNTZiLCAweGE0MDViNmUzLCAweDlmMGRlYzk5LCAweDBkY2Y2ZGRmLCAweGRkMDE5ZjQzLAotCTB4ZjlkNjJjOWUsIDB4OTE3Y2Y0YzksIDB4ZjdiYWYxNGMsIDB4ZTVkNjdlNzQsIDB4ZTMxZWY1NWIsIDB4NzU1N2RjNjEsCi0JMHgxMzliYWZiZCwgMHgyOGI2YjA5ZSwgMHhiNzk4ZGVkYSwgMHg4M2Y2NGQyZSwgMHg1ZWNlNDNmYywgMHhmNjgyZTlkNSwKLQkweGRkN2I0NGViLCAweGEzNzZlOTllLCAweGVjNmVjODcxLCAweGJiMGU5NGRiLCAweDc5MTE1ZmIxLCAweGE1ZGI3NWFiLAotCTB4OTllZWI3NWYsIDB4ZmFkZjExMjQsIDB4ZGY4Nzc1ZjcsIDB4OWRkYjg1YjgsIDB4M2Q3Nzc4N2IsIDB4YWJhYzZiZjYsCi0JMHg0NGVkMmMyOSwgMHhiMDUzZmIzMywgMHg3M2Y0Y2IxYiwgMHg3YjU4YjNiZiwgMHhjN2E0Y2NhNywgMHhjY2Y3N2Y0ZCwKLQkweGUyYzVlODQ0LCAweGRmOTlmZjFlLCAweDE4NzdkODkyLCAweDY3YmRlNmY2LCAweDBjZjZmMTdlLCAweDM1N2NmNDVmLAotCTB4Y2I3NGIxZjYsIDB4M2MxYjM4YmYsIDB4N2RjOWJhNjYsIDB4MmE1YzJkNmUsIDB4NWY4MTM5ZGUsIDB4NmUzNTdmYjgsCi0JMHg4MWRlNDQ1NCwgMHhmZmMyNWRkYSwgMHgyYjFkZjgzNCwgMHhiZmFjMGQwNywgMHgxY2E4OWU4ZCwgMHhjOTFmZmMxOCwKLQkweGU1MGQ3MjZmLCAweDBkZmYyNGU3LCAweDYwNzIxYjdlLCAweDEzZTBkYmYwLCAweGY5MzU5Y2UxLCAweGZmYmFjNmZkLAotCTB4YjE3YmFmYTAsIDB4ZWI1ZmJmMmUsIDB4NDU3OGI3N2EsIDB4ZDA5OTZiOWUsIDB4MjM1NzNjZjcsIDB4YWZhZjVlZTQsCi0JMHgwZjk2YjI2ZCwgMHg2NDNiYzlmMSwgMHgyZjQzMzdkZiwgMHg5ZjI0N2EwNiwgMHg2NTM5YjYwNiwgMHg0NWRmNzIxYywKLQkweGI5YzVjYTdjLCAweGI5NjNhYzZmLCAweGQ2NmM2ZjFlLCAweDc0Y2I4NmUzLCAweDk0Zjk5ODNmLCAweDZhNjY1ZTU0LAotCTB4NTNlNDg0ZjcsIDB4ZmZhZmIzZTMsIDB4NjI3ZGNmZWIsIDB4NmQ4ZWQyN2YsIDB4ZTJmZTEzOGYsIDB4ODJmZDllZDIsCi0JMHgxZTViYjU1ZiwgMHhiYjcxZTY3NCwgMHg3NzE5NzI5YywgMHg2ZGYzYjIxYywgMHhlN2UyMmY3ZSwgMHg3NmVjYjc4YiwKLQkweGNhNzNmZjQyLCAweGU1NjJkZDI1LCAweDA3N2Y0ZWJkLCAweGU3MTVkMDZiLCAweGY3M2E2MjhmLCAweDdiYjBmNjhjLAotCTB4ZjU5ZTc5ZmIsIDB4ZjE5M2UzNmIsIDB4Njc5OGM2YWUsIDB4ZTM5NGI5NWUsIDB4MzRkNGI2YzYsIDB4ZDZkOGQ3Y2MsCi0JMHhhYmRjMDNmMCwgMHhhYjFmYmIwYywgMHhhNWUzYTc3NywgMHhmMWU1MmMzZSwgMHhhZmE3OTdhMCwgMHgxNWQ3NzM1MiwKLQkweDMzMmY5YzVkLCAweGM5NzJhY2UwLCAweDc5MzExZmI3LCAweDNiMjU4ZWYxLCAweGUyMjdlN2IxLCAweDA0OWFjNDFkLAotCTB4ODJlNWY5MTUsIDB4ZjMwODQ4ODIsIDB4NmViMThlNDIsIDB4YmM0NWRiMTcsIDB4ODk2ODI5ODcsIDB4MTQ3NThhN2MsCi0JMHgwMmZmN2M5MCwgMHhmMzI2OTQ5OCwgMHhlZjhjZTkxZiwgMHgzMDU3NjVlMSwgMHhkODRiYjdjYywgMHgyMTA3ZDNhOCwKLQkweGU4ZDNkNDM0LCAweDFmZjYxOTQ4LCAweGYyNDZiNzZiLCAweDM0ZjkwYzJiLCAweDUzYjU4OWM2LCAweGM5NmZlZDIzLAotCTB4ZTlkZmRjNzcsIDB4NTI1ZTNkM2MsIDB4NzliYWU2YTgsIDB4NGUxZmZhZGUsIDB4ZmEzZjExNTIsIDB4MTJiYTdkYjYsCi0JMHg2ODY5YmU2NCwgMHgxNWFjMmNiZiwgMHhiN2VjYzM2OSwgMHg0NjgzZGU0MCwgMHg1NTc3NmZkZSwgMHhiZGZiMzBmYSwKLQkweGViYWMwZjI4LCAweDdiZDZmMTg5LCAweDI1ZDIzZjI4LCAweDE1YTcyM2YzLCAweGRmYjhiNzNlLCAweGUyZjFiNWU5LAotCTB4MmZiMTk5YmQsIDB4NWRmZjNlMjMsIDB4OTQ3N2U3ZGYsIDB4OGI3MWU5YTcsIDB4YzlmYzEyNDgsIDB4ZmY1ZDA0YmEsCi0JMHhmOTQ3MTJjMywgMHg3MWI5NTMwMiwgMHg0NmY0OWZkZSwgMHhmNjRjZDI5MiwgMHhmZDM2YzNmOSwgMHg3NmM4YTQzYywKLQkweDFmNmY4MzExLCAweDljNzM4ODRmLCAweDY0OWQzYWVjLCAweGNhN2M4MjJiLCAweGQ2ZmQxOWY1LCAweGVkOTNkNTNiLAotCTB4ZTI5YjczYjAsIDB4ZjY2ZWZiYzQsIDB4OGUyMzM2OWIsIDB4MTU0YzFjZDQsIDB4ZGFkYjk5ZjEsIDB4ZTBlY2NmNGIsCi0JMHg5OGRiNmU3MSwgMHg1ZWJmMGFhZCwgMHhlOTk3ZjNmNywgMHg3ZDcxMmZmNiwgMHg2ODY5ZTZjMywgMHgwYmNmMjNiZiwKLQkweDUzZDliZTNmLCAweDJkZmM0MmUzLCAweDJiODE3YmIxLCAweGYyYmRmODVmLCAweGFiZTQ2MDFlLCAweDAzNTQyYmQ2LAotCTB4ZmIwZTViZmQsIDB4YmRiMmJkMDgsIDB4NjZmMzgwNTAsIDB4ZmZlOTBlZjksIDB4MTZkMWI3Y2YsIDB4NzVjNzNiZTQsCi0JMHg4MmNiY2NkNiwgMHhhOGE5ZDg3ZCwgMHgxNzY5MjdmMCwgMHg3ZWUzNTFkYiwgMHg2OTIzYjZjNiwgMHg3MmNlY2Q0YSwKLQkweDk2MmJlYmQwLCAweDMyZmYxZTNiLCAweGVjNzZiMTljLCAweDdiODAyN2E3LCAweDgxN2ZiMTI3LCAweGEwM2Q2MGZkLAotCTB4YjRiOTU2NGIsIDB4NGZiYjI3OGYsIDB4YTI4YWY5MjUsIDB4YmY1M2ZjZjQsIDB4YzJlNDMxN2YsIDB4MjMzNTliYzgsCi0JMHhmMjBhMzNlZSwgMHhmOTBlOTc1MSwgMHg2M2YzZDI2OCwgMHgwYWU3YmI5YiwgMHg0ZGY3NzliYywgMHg0ZTk3M2JlMiwKLQkweDY0N2JlNjM0LCAweDBmNTU4M2QzLCAweDczM2U1OTA3LCAweGI1MzQ3YTc1LCAweDdlMDFiZGNlLCAweDcxM2Q4YWQxLAotCTB4ZTM1ZWUyYTksIDB4ZmQ5YWU2MGMsIDB4ZjdkZGE2ZDAsIDB4Y2U1ZWVmOGIsIDB4ZGYxNzhlZWUsIDB4MTc3YTU0YmQsCi0JMHgzZWYyYTY1NCwgMHhmNTRhZWQ5NywgMHhjMmU3NGRkYiwgMHhkZGZlYmEyYiwgMHhmMmQ3M2FkMSwgMHg4ZjMzNGFmZCwKLQkweDdmZjFlNWU5LCAweGRlMjg5M2RmLCAweGE1ZGYxOTJmLCAweDhlZDZlNTVjLCAweGZiZTM0ZWMxLCAweGY5M2VlOTk0LAotCTB4Njg5NjRhNWQsIDB4M2UzNjFiZWYsIDB4MWQzM2MwNmYsIDB4ZDMwNzNiZjIsIDB4ZDQzNzM2NzcsIDB4ZDY5NmZmNzIsCi0JMHg2NzE4YzkwMywgMHg5NTZmNDNkNSwgMHhkNzEwODUzMywgMHgxYTdjMDM3YSwgMHg4NzY2Y2VmYSwgMHhmOWE2Y2VmYywKLQkweDc3YmZlMWExLCAweDNlNDM1YzgxLCAweDRiMjExYzU3LCAweDUwYjZmMTdlLCAweGI1NDNmMDhhLCAweGVmOTBiOTMwLAotCTB4ZmMyNGJjZDYsIDB4NmE3NmIzZGMsIDB4Zjg2ZWI5YzcsIDB4NDQ3OTQ2MjUsIDB4OTRkOWMzYTcsIDB4N2ZmMDVjYWUsCi0JMHg3MjQ3ZGVlNSwgMHg5YzdjNmU3MSwgMHhiZGJhZjEyNCwgMHg3NjEyZmViNywgMHg0ZTMyN2I0OCwgMHgxMjBlZGZmYSwKLQkweDUwNjM2ZGZlLCAweGY3YzZjYmZhLCAweDFiYWE0NDUzLCAweGU1NzNmMGY3LCAweDk1YmM2Mjg5LCAweGM2Mzg3N2ZhLAotCTB4MTBiZmQ4YmEsIDB4YTgzYjFmZTUsIDB4ZjdjMGViMWEsIDB4NzdlNzkwMzUsIDB4ZjA2NmUxMWQsIDB4NDdmNjVkZjMsCi0JMHg0NTc4ZWY5MSwgMHhiYjc3YmY5NywgMHg3YmM0ZjNlYywgMHhmODA0NTYyMiwgMHgxZDc2ZWYxNSwgMHhkMTFlNDI0OCwKLQkweGVjYWFjM2YwLCAweGYwZWMwNWVmLCAweDdlMjkwZTk3LCAweDQ1ODljMzljLCAweDg2M2RjNDI3LCAweDZhYzk3OGY0LAotCTB4NzViNzk0YWYsIDB4Y2JjZTczM2YsIDB4MmFmYzJkMWUsIDB4MDhlMmQyNTEsIDB4ZDdlMzg2YmIsIDB4MzRkZmJhMWQsCi0JMHgyZmRjMWY4NCwgMHhmYjJkNjVlZSwgMHhkMmQwNWZhNCwgMHgwNWY4NGE3MywgMHg3YzYxOWY4NiwgMHhkZjZhYjc0NywKLQkweDE4MjdlMTI5LCAweDk0MWY1NmZkLCAweDI4M2Q2OTc0LCAweDZkMGExYmNiLCAweGEwMjViYzQ2LCAweGFjYmVlMDE0LAotCTB4ZDk3MjdjMDgsIDB4MzgzNjRiZmQsIDB4MjVlNmY4Y2MsIDB4YmQwMDBhMWIsIDB4NWZhNDNjN2EsIDB4MGI1YmU1ZjgsCi0JMHgzM2VlMjU3ZiwgMHg3MWY1MWJhZCwgMHhlNjlhNzcxOSwgMHg0NjM2OTk0YiwgMHhlNWM1Yzc3ZSwgMHhlZmU4M2RlMywKLQkweDVhZGZkY2IzLCAweDUwZmJjYTBmLCAweDhiNjEzNWI4LCAweGRhYmIxNzc4LCAweDZjZWMwMGUzLCAweDdjZjM4OGY1LAotCTB4MTBhZDliNTcsIDB4NGEwM2M5ZWYsIDB4OGVlN2YwODIsIDB4YzZiOWVmZWEsIDB4M2M0ZGZhYWMsIDB4ZDQ1OTA0ZTIsCi0JMHgxM2NiNmJkZiwgMHhhN2YyYjhlZiwgMHgxNDE5M2NmMSwgMHg4Y2JhZWYxNCwgMHhmYzJlNjdlZiwgMHgxOGE1NDdlMywKLQkweGU0NWM3NjdmLCAweDk3ODAyMjAwLCAweDA5NmM3YjRlLCAweDUzYjMyNWYyLCAweGY4YTBhNTIyLCAweDk1MWY4N2E1LAotCTB4MDBlNDQ2NzgsIDB4NjBkZTUwZTIsIDB4ZTljYTkyZjcsIDB4Njk1YzQ2N2YsIDB4YWY4OTYyYmUsIDB4NjU2OGFkYmYsCi0JMHhlMGViNDEyMCwgMHg2YjhjOTc3OSwgMHhmZTdjOGJmNCwgMHg4ZTUyNjk4YywgMHg3YmUzMWNjNiwgMHg1ZjUxZWUyNCwKLQkweDMwM2RjNDc4LCAweGY4OWI1NDYzLCAweDIyOGE4YmFlLCAweDE0Nzc2OGE1LCAweDgyM2U1ODdkLCAweGYwODQyNjVmLAotCTB4YzkzYzhjM2UsIDB4OTgzY2NmMzIsIDB4YThlZjEyMWYsIDB4MzBkZjMyZGMsIDB4ZjAyZTlmZDAsIDB4YjQzMWNlMzAsCi0JMHhkYTJkZDRmZiwgMHg1ZGQxY2FjNywgMHhhMGZkZTRkMywgMHg2M2U2NGUyNiwgMHgzOTljNTQ2ZiwgMHg5YjkzMDBmZiwKLQkweGZhMGI1ZGE3LCAweDhiZGJlNGQ1LCAweGRlZjFlM2ZkLCAweGJmMDNiZTRlLCAweDBkNmRlN2EwLCAweGJlOGU3OTdmLAotCTB4OWVmZDFjYWYsIDB4ZDMyNGJhZTcsIDB4MDI1M2ZkMDMsIDB4ZTVkZGYxMDEsIDB4MWFjNzQ1N2QsIDB4ZmQwM2ZmMzEsCi0JMHhkMGZlNDI2ZSwgMHhhNzM4Yzc3OCwgMHhhYmRlNDEzZiwgMHhlNzE2YTkyZSwgMHg1MDczZTJhYiwgMHg1NjNmYjcxZCwKLQkweDFkZTMwYjY0LCAweDE2ZTQwM2ZmLCAweGM3NzI2NTc5LCAweDc4YjZkOWY4LCAweDM5NWIxZWYxLCAweDM4MTdjYWZhLAotCTB4OWZlZGIyNjcsIDB4ZmVmMGE2ZjYsIDB4NTE1MmZmYjMsIDB4MDdlYjgzNjEsIDB4MjZmNjNjY2UsIDB4M2RjMWJhYzMsCi0JMHg3ZDhmYjFmYiwgMHhmNjIzNWFjOSwgMHhmYWEwNzI3MSwgMHg3ZTI0YzY5NCwgMHg1NmUzZGJjMCwgMHhlNjQ1ZjllNSwKLQkweGZiYmQxZmY1LCAweDViMzRlNDhiLCAweGZhMTc1ZDc0LCAweDc4NzMzY2NmLCAweGM0NWJhMDJhLCAweGI1MWNlN2E1LAotCTB4Y2M1NjM4Y2IsIDB4ZmE2NDJlN2EsIDB4NmU3MGJiYzQsIDB4YzE3ZWU4MjcsIDB4NWVlMTBiNjMsIDB4ZWY2OGU3MzgsCi0JMHgxY2RmNTgzYiwgMHg3ZGM2NzdiYywgMHg2ZjNjZWRjMSwgMHg5N2M4ZTczZSwgMHgxYWY3OGE5MywgMHg2NGRmOWQzMCwKLQkweDFhYzBlZDQ3LCAweGVmNGEzY2ZkLCAweDA1NzliZGY0LCAweGVkNTdjOWNlLCAweDczMDM3ODg0LCAweDk2M2ZmMDUyLAotCTB4MWZjMTZmN2YsIDB4Njk5Y2UzYzEsIDB4MmEzNmRlZjIsIDB4NGQzODI2YmYsIDB4MDcyODYzZTgsIDB4M2VkMzM4ZmEsCi0JMHhkMGI1M2JmYywgMHg2MzhmNDUzNCwgMHhmYzFhN2U0OSwgMHhmMDYzZjgzMiwgMHhkZDMzYTBjMywgMHgxNGE1ZTI3MCwKLQkweGY4YjdkMDQ1LCAweDNmYWU5Mjg3LCAweGUyZmQ3NDEwLCAweDRiNTYyNmY4LCAweGQ3MGZlNGJhLCAweDdmZmVmYTBhLAotCTB4ZmJjOGViYTMsIDB4MGQ4NWRmOTMsIDB4ZGUxZWVmZWQsIDB4N2Y2NTllNWYsIDB4ZGE1ZmZkM2YsIDB4ZWZmN2QwOWYsCi0JMHhkNjEzYmZiYywgMHg4Njc3YTVmZCwgMHg0ZTQxMjdlMywgMHg3ZjA5YjIxZSwgMHgyOGJkZjYyYSwgMHg5N2IwOTIxNSwKLQkweDExMDRmNmY1LCAweGU0MTJkNTM3LCAweDI3NmMwNmY3LCAweDM0OWQ4MjVmLCAweGVhYjhlM2VjLCAweDhhZmMzMTQ4LAotCTB4NjM4ZjQ0OTMsIDB4OGY1YjExNWQsIDB4NWE3OGZmMjgsIDB4YjE5MzkwYmUsIDB4N2M0YjIyNzQsIDB4OTQ4OGUxMzcsCi0JMHg1NGVkNmZjMSwgMHg3NmRkM2IwMiwgMHg4NzMzYzhjMCwgMHg3YTU2NWY2MSwgMHg0MmVkZGU0NCwgMHhmMjc0MTZjOCwKLQkweGExYTlkZGY4LCAweGRlNzhjYjlkLCAweDQ0OGI5YmVlLCAweGQxMDJlNTFlLCAweDFmMzgyMzk0LCAweDdmMDgyNDU3LAotCTB4ODQ5NTNiYjQsIDB4OWRhZWVhZGQsIDB4ZTc5NmZjMjgsIDB4YzJlN2I2YmYsIDB4NGRhZmVkNWYsIDB4NmVkYmY5MTAsCi0JMHhmYzNiNjQ3ZiwgMHgzZTA5ZWVjZiwgMHg3ZjRkYzgzNSwgMHhmODQ0ZDBhMSwgMHg2ZTA1YzFhYiwgMHgwMmY3NGYzMSwKLQkweGI3YmIwNzY5LCAweDgzZjdjOGU3LCAweGYyMDlmYTE0LCAweDQ4YWU4ZjQ4LCAweGVlYzE3OTEwLCAweGM0MmM4MWRkLAotCTB4ZDI0YzNlY2YsIDB4MmUxZjQzNGUsIDB4Yjg3M2NiYjEsIDB4MTljYjhmM2IsIDB4ZDRkNGFjM2UsIDB4NjJiYzYzMzYsCi0JMHg2ZDQ4ZWViOSwgMHg3OTdiYjNjMiwgMHgzNjAyZjg5NCwgMHhiMjdlNWM5OSwgMHg2YmU0NDkzZCwgMHhlMjMxN2QwZCwKLQkweGE3ODJlM2Q1LCAweGM2NGU4Mjc2LCAweGViZWZiNjc3LCAweDVkZDA2NWYyLCAweDBlZWZjODA5LCAweDcyMWJmYTBkLAotCTB4YmJhNzVhMzYsIDB4Yjc5NGFmNzIsIDB4YWJjN2Y3YTEsIDB4MWUzZmJjNDksIDB4NzdjMDRiY2IsIDB4YWE3MWY1NmEsCi0JMHgzMmJlNzQwZiwgMHhlYjEyZmI0NSwgMHg3Y2NiNWNlZSwgMHg5MmZkNjNiMSwgMHgxZGYxMjdmZSwgMHg5NWZlMzBlMSwKLQkweGQzOGY0MmIzLCAweGQ0NWZkZmU4LCAweGY1MjNiNDkzLCAweGVkMTZmN2M2LCAweDI4MmRlZmQ2LCAweDc5MTUzNjMyLAotCTB4ZGM0NzIxM2IsIDB4OWFiZWY3ZmYsIDB4OGRkODBhYjgsIDB4YzEyNWRmODIsIDB4NGZmZjFjNmUsIDB4ODBlZmIwZmIsCi0JMHhiY2YyMTViYywgMHgyOTZiYzRmMCwgMHhmZGZlYmRhMiwgMHgxZjVmZTE4OSwgMHg4Mzk0N2ZmNywgMHhkZGU0ZTI3MywKLQkweGZjMDU4Y2FmLCAweGFkMjZhOTJhLCAweDcwZjVkNzgyLCAweDcwZjNlN2VkLCAweDE1OWZiZDc0LCAweGJjY2RkZjExLAotCTB4OGU2NWZiNWYsIDB4ZmJkZmI3ODgsIDB4ZWZmNzkwOGEsIDB4MDJmZmNlYmEsIDB4YjM4YjdhNWYsIDB4MDAwMDQwZDAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweGQ1OTQ3ODA5LCAweGU3N2RmMGQ1LCAweDk5MjY2NjVkLAorCTB4NmM4MWJjOTksIDB4NDRkODRlYWMsIDB4NDI0Mjc0MGIsIDB4NjFkYjEwMWEsIDB4ODMxMTY4OGIsIDB4OTgxNzA1NGIsCisJMHgyNjRmNjQwOCwgMHhkYWM3ZjUyMCwgMHgwMDQwY2ZlZiwgMHg4YjQzNTE1MSwgMHgwM2I0NWEzNSwgMHgzNDFiMDUwNCwKKwkweDAyNDE4MGQ4LCAweDJkODJlMDBlLCAweDVkNmFkOGQ1LCAweGM4YTBkMmRhLCAweDFiODA5MzFhLCAweGNlZmM1ZGZlLAorCTB4YzliZWY3MzksIDB4ODIyNjRlZmIsIDB4ZjVmZmZmYjUsIDB4ZjhmOGZlZmIsIDB4Zjc3YmVlNWMsIDB4Y2U3M2RkYjMsCisJMHhlMjhlZjczZCwgMHg4Yjk0YzcxOCwgMHhmZjEyZmIxOCwgMHhkZDk4YzdiZSwgMHhkNzFiMThjNiwgMHgyMzU2MzI5ZCwKKwkweGNmMmQ0YWQyLCAweDAzZDA1OGNkLCAweGFjNjJjY2ZmLCAweDk3ODVhZGRjLCAweDY1MzYzM2E3LCAweDVlZjkxYTg3LAorCTB4NDgzN2U0MTIsIDB4NmRlNDNiNjEsIDB4ZGU1NDlkN2IsIDB4MjNlNzllYmUsIDB4YTBjZmNkNmUsIDB4YzgzYWEzZmMsCisJMHhkZWRlZDA0YiwgMHg1MDY1YzBmMiwgMHg2NjQzYjlkZSwgMHg5MWRiYjExYiwgMHhjMjk2MzY3MSwgMHhlMzA3MzFkOCwKKwkweGNmOTA1OTdmLCAweGM5YzBhYzY2LCAweGY2MWJlNWIzLCAweDQ1ZjZjNWNkLCAweDg0ZTY3NjRkLCAweDE1NzdjYWZlLAorCTB4ZjIwY2JjY2UsIDB4ODY1NTA3ODUsIDB4MmYzN2NhNTUsIDB4YmU0M2ZhZDMsIDB4NjAzNTJjMzgsIDB4OWYzMjYzYmUsCisJMHgxY2E3Njg1ZiwgMHgzYmY1MGNkZSwgMHgzNzI5MmQzYywgMHg1NTNiMThiOCwgMHg4ZDVlNjBlNSwgMHg0Yjc3NmFiMSwKKwkweDE4YTNmNWNhLCAweGNmNmYwOTJiLCAweGY1MjU3NmM1LCAweDNhOTcwZjkyLCAweDk3ZTZjNzY1LCAweGI2YmFlMWZiLAorCTB4OTdiYjNlNGEsIDB4ZjEyZGQyYjEsIDB4Y2Y5MjNiY2MsIDB4ZmZmODRiZTEsIDB4ZjkxY2EzNTgsIDB4ODYyZjk0MWUsCisJMHhiN2U4MzI3NSwgMHgzMmU0ZDU5MCwgMHhhYjVmYzcxOSwgMHhmMGRkZGQ3OSwgMHhkM2E1NTUzYiwgMHg3Y2JlNDYzOCwKKwkweGVkMDM4YzJiLCAweDdjOTY5ZTJhLCAweDFiMGFjNGI4LCAweGY4YzAzNDBiLCAweGIzOWNiYmVkLCAweDdkNzBiOTM3LAorCTB4NmUxMWI0Y2IsIDB4MWFkZGQ3NWMsIDB4ZTcwYzJiZDYsIDB4NzE3YTc0ZWYsIDB4NWNiNDFiN2UsIDB4YmY1OTJmMjgsCisJMHhkNTE4MmI0MSwgMHg5NmU5NWZkZCwgMHhkNTc5ZDZiZSwgMHg5ODBkNGQwZSwgMHg1M2QzYTNjYSwgMHg0Nzc5OGM1NSwKKwkweDE4NGJlNzc0LCAweGJmNDAzN2YzLCAweGIzNmIwOTRjLCAweGZmN2Y3NzQ2LCAweDk2MzIyNTgwLCAweGNjY2JmZDhjLAorCTB4MWZlZWU4ZWIsIDB4NDNkZjQ5MjAsIDB4MDEzZmMxNmYsIDB4NmUzZGExNWUsIDB4Yjc4MWFiODIsIDB4ZGJmYzNhYzUsCisJMHhiM2I3OGRkYiwgMHhkMmEzYzBiYSwgMHhkZmVlNmQ5OSwgMHgzYzQwMWY0OCwgMHgxMDZhN2NjMCwgMHgxMWFlOTA0ZSwKKwkweDY0NGNmM2YzLCAweGRmZTgxNDkzLCAweGM0YmE2N2UzLCAweDkxOGY1ZjdhLCAweDlmMmNhOGQ2LCAweDQyMGI1OGMxLAorCTB4NzhjYWZkYTMsIDB4MTE2YzZiYzgsIDB4OTNmNjMxZjMsIDB4YTlmZWQ5MTUsIDB4MDU5ZmJmOTAsIDB4NTdiY2UyZTYsCisJMHhjNDIyODE0OCwgMHg2OTBkNjMxMywgMHgyNGFiYmY0OCwgMHhmZmQ3MWIzNiwgMHg5NDM0OWMwMywgMHhmNDA3ZWFhZiwKKwkweDk5YWY3MDA5LCAweDk2NDliZDk2LCAweDMwOTNkY2M0LCAweGJkYzRmMDVmLCAweDIxNGZkNGU5LCAweDNmNDJhM2Y1LAorCTB4OGZkZmNmNDMsIDB4ZTk2MzliOWUsIDB4MzIyZGNmNDcsIDB4N2VhNGE5ZmEsIDB4NGZkNjE3OWMsIDB4ZWIwNGVlNGQsCisJMHg4YzRiNzI3YywgMHg3ZWE0ZWU3ZSwgMHgyZWI2MTdkYywgMHhkNjg5OGFmZCwgMHg0NjUxNWNmOSwgMHhmNTRlMjRmZCwKKwkweDk3ZDQwMGIxLCAweDJkNjA3YTBkLCAweDVkY2ExOTdlLCAweGVmNjM4OWY1LCAweDk4YmE2NjY1LCAweGRmZjkxMmJjLAorCTB4YTY2MjVjMGQsIDB4Mzg5Yzg0OGIsIDB4ZmEyNjFkMGIsIDB4ZDBmMjU4ZmIsIDB4NWJlYzdlOTMsIDB4NDQ4MzBmMjIsCisJMHg1ZjFhMzUxMiwgMHg1YzkxYWZlYiwgMHg0MWRmZDQ5OCwgMHhiYmZhM2JmOSwgMHgzMWRjMmU0OCwgMHgwZWIxNzAyMSwKKwkweDU5YjFjMGYzLCAweDgxNmJjODNmLCAweGU4MzFlYjZmLCAweGIxMjllNjFhLCAweDM2YmQ0YzM0LCAweGVmY2JhMzRjLAorCTB4MjYxYzM5NTYsIDB4ODhkYmY4MGYsIDB4NjgzZWQwMjMsIDB4MDg5MTFjZWIsIDB4YTRkMmY1ZjksIDB4MzY1YzIwNWYsCisJMHgyN2MxMWIzMywgMHg1ODk1NjY0ZSwgMHg0OGNlY2UyZiwgMHg5ZTlkZGQzZSwgMHg4MjY0MjliZCwgMHg4MDQxZWFkMywKKwkweGRmYmJhOTdmLCAweDBkMjA2YWQ1LCAweGJiMmI2YmU5LCAweGI2ZjQ4NDIxLCAweGE3YWMxMDZhLCAweDg1NGY2MzNmLAorCTB4MTQ4NDhmYWUsIDB4MjBhODNmNjgsIDB4ZDc2OWUxMGQsIDB4ZTNjZGJmODAsIDB4MjhmZTMwNmIsIDB4MWMxOWZmMWEsCisJMHgzZjhlMDc3NywgMHhmNmY4ZTdhZSwgMHhmMTk2MzkyMSwgMHgyYzhiODMxZCwgMHgxODM0M2JlMywgMHgxNzdkZTgxZiwKKwkweDBmOGM1NWJiLCAweGQ4YzA5YmYwLCAweDY4NWJhMWYzLCAweDIyZTBmYjdjLCAweDhkNmVmZjFhLCAweDhmYzY1OTE1LAorCTB4MDVmZjFhZWIsIDB4ZGVhNWY3MWMsIDB4ODI2NDNmZDYsIDB4NGI4M2ZkNzUsIDB4ZjhkN2ViYWMsIDB4MGI2NTVmZmEsCisJMHhiNDcxZjhjNSwgMHgxNjg3NWZmZSwgMHgyZTBmZjVmMCwgMHhmM2I3ZWJlMSwgMHhmN2M2YmI3ZSwgMHg3NWZmYzE3NCwKKwkweGRlYWRmNzFjLCAweGEyNzQzZmQ2LCAweDk1MTdmZDc1LCAweGU3NmZkNzU5LCAweGNhY2JiZmUzLCAweDFhMmVmOGM1LAorCTB4MTk1MGJkZmYsIDB4NjU0NWZmNWYsIDB4MGY2NmJlMzQsIDB4YjQ4ZTkwZjgsIDB4NjE5NTcxMDEsIDB4MDQwZDlmMTgsCisJMHgxOTI1NDg4NiwgMHg2NDc0YTdlNSwgMHhmZGEwYzYxZiwgMHhlMDg0MzYzYSwgMHhhNzFjNDc3MCwgMHg4MGUyY2ZiYiwKKwkweGYyZGQ1Y2RlLCAweGEzODE4NThlLCAweDA4NTU5ZTQwLCAweDlmYWQyZjlhLCAweGE1OWNhMWE0LCAweDBiN2I5MDcyLAorCTB4MzQxNzU0YzUsIDB4YjBkZmI0YzksIDB4NzBmMGY2NzUsIDB4OTM3YjZmOTgsIDB4ODJmY2MyMWMsIDB4NjU4Nzk3NzUsCisJMHhiY2Q4ZWZkYSwgMHhiMGE3NmMzYywgMHhmMGZmN2UwOCwgMHhjZDFiZDFhMSwgMHgxNzRlOGFlYiwgMHg1YWM3YThkNiwKKwkweGU3YzQ3YzJkLCAweDQ2Y2M5YTEzLCAweGE2ZmNjMjU2LCAweGViOGMxMTIxLCAweDM5MDMxZmNlLCAweGJlN2U0MGNhLAorCTB4ZDMxNDcyMGYsIDB4MDc4YzJhZTMsIDB4OWM4MjhmZGYsIDB4NmY5OTlhNjUsIDB4M2M3ZGYxOTYsIDB4OTkxY2RlYzQsCisJMHhmZjgyNzI4MiwgMHhiYzM4NTMxZCwgMHhjMjkxMmQ4ZiwgMHhkNmNmZmYwOCwgMHgzZTUwZDIyZSwgMHgwNzg5YWMyZCwKKwkweDIzY2Y3N2EwLCAweGI5ZDRmMDI4LCAweDI4ZGUxZWNiLCAweDA4YmQzYzExLCAweDE1ODkxYjlmLCAweGEwMzNmYjE5LAorCTB4YjY4MDFmYjUsIDB4YTVhZmI2YjAsIDB4YmMyYzJkZGQsIDB4Y2ZlYTBkMzIsIDB4NDgzZjkzNWYsIDB4M2NkZmY1ODcsCisJMHhjNjU2M2VkYiwgMHgwN2Y5ODNmZCwgMHhkOThmODhkOCwgMHg2MzBlNWIwMCwgMHhhYWQ3MWJiMywgMHhlMzczMjAwMywKKwkweDU2ZmRmNTZjLCAweDAxMzlmYjUzLCAweDIyZTZmZTZiLCAweDBkNWRiZTZiLCAweDM3ZDQzNmFiLCAweDAxYjYyNThhLAorCTB4ZDJiNWJkZmEsIDB4OTM4YzZlNWEsIDB4NzhlMWY1MjgsIDB4MjBmZGUzMTUsIDB4NTZmN2NmODUsIDB4NjdlMmM3NGMsCisJMHg1NzNhZjA5ZCwgMHhmOThkNmRlNywgMHg1OTUyZWYwNCwgMHhkNmNiZjY4NCwgMHg0ZmY4NDY2NCwgMHg5ZDAxN2FhNiwKKwkweGJlN2EzYmFmLCAweDNmODc1NTczLCAweGY3MzNlNjBmLCAweDE5ZTA5OTRlLCAweGJkZDZmZjNkLCAweDE4ZGI3ZWYxLAorCTB4NTYzZjZiNDgsIDB4ZDdhMzA0OTEsIDB4NzlmZjNkMTMsIDB4YTNkN2EzNGIsIDB4MWY5NjFlOTMsIDB4ZTljZWZlOGEsCisJMHg4MjllOWEyNCwgMHgxZWZhOTM0ZCwgMHg2ZjJiZDUzNSwgMHg1MWVmYjJiOCwgMHg2ZTk1N2QxMywgMHgxN2M5NjU5OSwKKwkweGVhNThlNzg3LCAweDViZTZkNjE3LCAweDE0ZDYxN2NhLCAweGFmZTdjYTViLCAweGU3Yzk2NDVlLCAweGQ0YjRlZTg3LAorCTB4OTk3NGI3OWYsIDB4Y2FkNmZjYTUsIDB4MzdlNTJjN2IsIDB4ZTRiNWFkMTcsIDB4YjExZTA0ZTcsIDB4ZjY3MWJmZDQsCisJMHg2ZGI5NGIwNiwgMHgyMGQ3MjVlZiwgMHgyNWJmNTUxZiwgMHgzZTM3ZGMzMywgMHgwMDdiMWQ3NSwgMHg1ZDRmYzFmNSwKKwkweDcxZjEwZjhhLCAweGY4OGQyYWEyLCAweDk3OTU1NGUwLCAweDRjYTZmNmQyLCAweGMxY2I4MDQ3LCAweDE2NzE1NDAyLAorCTB4YWQwODZiMmUsIDB4OTk3Mjg4OWUsIDB4NWUyY2ZjOTEsIDB4MWExNDMzYjYsIDB4ZTRhZGRhMDgsIDB4YjVjOWY4MjUsCisJMHgwOTAwOGIxYSwgMHgxNzRmYWM0YiwgMHhhNmNhNzcxZCwgMHg5NGYzZDZmMiwgMHg2N2EzMDJkNywgMHg1Yjk3MmNmNiwKKwkweDZlMGY3ZjYzLCAweGU1MDhiZmNjLCAweDAwZjI2ZjRlLCAweDNlZTAwNmZlLCAweGY3ZjYyMWQ3LCAweDg5MzJmMmU4LAorCTB4MzNiZjk5ZTUsIDB4ZmNmODljYjYsIDB4NjViMzkwOWMsIDB4NjUwNzk3MWEsIDB4Y2M5YmY2Y2YsIDB4OGM4Zjk4M2MsCisJMHhmMWFhZmNhOCwgMHgyOGE4MDAxYSwgMHg0ZjNiNTEyNywgMHgyZTAwN2E0NiwgMHg1MGNiZDBiMCwgMHhlZGI3N2YwYiwKKwkweDE1NWU2OTkzLCAweGEzYzYxMzI4LCAweDIzNWJjOWM4LCAweDFjODk5Y2ExLCAweDY4ZGQ3YzE4LCAweDdlZmY4NzljLAorCTB4MjlhZWY5MDksIDB4YjZmNWY2OTksIDB4OGY3ZGU5YWEsIDB4M2M5Zjg4MmEsIDB4Y2Q1NDRmNGEsIDB4NTU1OGY0YTYsCisJMHg1NWEzZDI4MCwgMHg1ZmJlOTQ0NSwgMHg2YjY5NDk1NSwgMHgwZjRhNTJkNSwgMHhmZDI4ODU1NywgMHg0YTZhZDU1MywKKwkweGExYWFhYmRmLCAweDVhYWE5ZGY0LCAweDE1NTBmZjRhLCAweGNhYmRiNGE2LCAweDBmYzFhOTRmLCAweDQ5MzdmMjVkLAorCTB4YWVjMmFiZTgsIDB4ZjI4NzlkODAsIDB4NTY1YWM1NjcsIDB4ZTIxNmRkNDAsIDB4ZjIxYTVmNzMsIDB4NjdkNzU5ZjksCisJMHgzZjFmNTAyMywgMHhhMTlkOGVmYiwgMHhiYzFiZGZiZSwgMHg3N2FkZTlhMiwgMHg1ZjQ5ZmEzYywgMHhmZTAzMDgyOSwKKwkweDNiOTY3YjMzLCAweDljOWUzOGUzLCAweDgxOWQzNjM2LCAweGY4NjdiYTNjLCAweDQ2ZGJiZTEzLCAweDkyNDE1ZTUxLAorCTB4MzdjOTBkODEsIDB4ZGZhMzFkY2IsIDB4NzVmMDhjNjEsIDB4N2YzMTNjM2UsIDB4MDE2Yjk4ZTcsIDB4ZmQxZWM3MWYsCisJMHg3YmY2MzY2YiwgMHg3MTdmZWM0ZSwgMHg4N2RhNjQwNywgMHgwZjkzNjQ1OSwgMHgxYjgyNjVmMSwgMHgzYjlkNmJlZCwKKwkweDBmM2ZiYzg0LCAweDgyZWEzZWZjLCAweDA2NjBjYjVmLCAweDI3NDkwNGU5LCAweDY4ZGIzYmZhLCAweGIxYzIwYTY3LAorCTB4YzQwYzNlMzksIDB4ZGMxZWNlY2YsIDB4NWM3ZTQxZTQsIDB4OGZkMzY2OWMsIDB4OTE4MzgwYzYsIDB4ZWJhNDM3OTYsCisJMHhkM2ZlZjMyZSwgMHhhZDlmY2Q2NCwgMHg5MDM3YTY5MSwgMHg1YzI2ZjYzYywgMHg0YWU5MWEzZiwgMHg0MzBlOGZkNywKKwkweDZhNTFhN2ZjLCAweDRkMzhiM2Y0LCAweGJmMDI4ZmQzLCAweDM0MzJkYTllLCAweDYxZGZlZjgxLCAweDI3ZDYwZmJlLAorCTB4NWQ4MmJkMTIsIDB4ZDVmZmY1NDgsIDB4MWZhZGU5ZjMsIDB4MzU4YzNlNjMsIDB4MjgxYzBmYjIsIDB4ZTg2Y2EwMGYsCisJMHgxZTlkZWRmOSwgMHhkMTNlNTc3OCwgMHhjZDVmMTBmMiwgMHgyZmE4NjdlYSwgMHg1ZmZmYzFjNCwgMHgxNTdlYzEwZSwKKwkweDA2ZmQxYmNhLCAweGZkOTBlNDFiLCAweGRlYmRmOGRiLCAweGYzYjQxZTMyLCAweGI2MzczNjFhLCAweDE1NmU5ZGViLAorCTB4MmJhMGNjNzYsIDB4MWExYTU3OTAsIDB4M2EyNzY0Y2IsIDB4OTJiZWViNzUsIDB4OWIwN2M5NjgsIDB4N2Q5NmU5ZmEsCisJMHhmYzAxZmYwNiwgMHg0MTUyODIwZiwgMHg1NDEzMjliYSwgMHg1NmI4YTFkNCwgMHgyM2JmMzA0YiwgMHgyZjAxM2YyOCwKKwkweDJiZDc4OTQxLCAweDAxNmFiNDc3LCAweDBiNjM5MTJmLCAweGU1YjcxOWVhLCAweGJkZTc3NDE4LCAweGVmMjA4ZmYxLAorCTB4NjU0NmZlNGYsIDB4ZGZmOTYyZjcsIDB4YWU1MDU2NjAsIDB4ZjcyMGM1MWEsIDB4MmY5ZjkwNmMsIDB4OTYzNWI3NzIsCisJMHg3N2I5NDBjZSwgMHhmOWY3YzZkMiwgMHg4M2NmMmMwNSwgMHhhYjExNGY0NiwgMHhlNzNkNDZjOSwgMHg4ZTliNjYyMywKKwkweGZiMTFmZmY0LCAweDY0ZDMyNzlkLCAweDFhNmNmODZmLCAweDZhZmU3M2FkLCAweGZhMGIzZWViLCAweDU4NWYyNTk5LAorCTB4YjAxN2NkNmIsIDB4ZGU5MDUzNmIsIDB4MmNhOWQ2MGIsIDB4NWE1ZjIxMmMsIDB4OWQzNmJkY2IsIDB4OTU2NDJkZmEsCisJMHg0MWRlYzhhYiwgMHhiZGM2MDU3YiwgMHgwMGNhNjc0ZCwgMHg3M2Y5NWY5OCwgMHg0M2U3NjU4ZiwgMHhhZTM2M2JmZSwKKwkweDdiZjYxYmE3LCAweGZmM2UxZjcxLCAweGU2YjBhNDkyLCAweDFhMGZmMjg3LCAweDE5NzA3ZjMzLCAweDU1ZTFmNmMzLAorCTB4NmU0MmE3MjgsIDB4N2FjY2RiZTYsIDB4Y2VlYmVmZTIsIDB4YzZiZTdhM2YsIDB4OGZjM2QyN2UsIDB4NmYyMWU2MjAsCisJMHgxOGUxZmM5MSwgMHg5YjM0ZGE3NiwgMHgxMGFkZjQyNCwgMHhiYWUwMzdhNSwgMHhiZTZiN2E0ZCwgMHgyZjkxODM4MCwKKwkweDE5ZGZjYThmLCAweGU5YTdmZjk1LCAweGU4NTk4OTJkLCAweGM4MTQ4OGVkLCAweGZhNzMyNWI3LCAweDUyNDE3ZDQyLAorCTB4MzdjMGI1M2EsIDB4NDdhZDNmZTksIDB4ZDJmZmU1ZmYsIDB4ZmY0MjA3ZmUsIDB4ZWZmZTk2ZDksIDB4M2ZmNjk3ZmMsCisJMHg1N2ZjYzdhYywgMHhmY2JmZWFjNiwgMHg0MzNiNmRiOSwgMHg5ZTRhNmYyMCwgMHg2MGMzYzg3OSwgMHhkNGE5M2ExZiwKKwkweGVmMDBmOGE0LCAweDdhNTc5YjY1LCAweDI4NGUwZTkwLCAweGYzZDIwZjIxLCAweDNkM2NiMGM5LCAweDQ2ZWMzZDE2LAorCTB4YTIzZjIwN2EsIDB4NWRhMTI1ZGYsIDB4ZmU4NGZmODUsIDB4ZGY3NTNkNGYsIDB4M2U2N2RjNGMsIDB4NjRlYWFjZGIsCisJMHg0N2IxNmQyZiwgMHgxNWFmYzBlYywgMHhkODMzYzU4ZCwgMHhlMTFmY2ExOCwgMHhjOGNmYmJmOSwgMHhkMmIyNmY5OCwKKwkweDBmOTNjOTY3LCAweDBkZmZhMGE1LCAweDEzZDg0NTI4LCAweDJhOTdkMjExLCAweGM1Y2MzZWVhLCAweDNhYzgyODdkLAorCTB4ZGJhMmNmODksIDB4ZmFlN2Y4ZTEsIDB4ZDdjYzdjOTAsIDB4YzM5NjdhMTIsIDB4MGZjZjQ5M2MsIDB4MWIwNGI4MGEsCisJMHhhMzIzM2JlZiwgMHg3MmI1OTNlZiwgMHhmZDU0NjgzZiwgMHhkNGZmYTEyMiwgMHhjNzQ5ZGNkYiwgMHhkZjYyNzRjMCwKKwkweDc5NDFkZjYxLCAweDg1ODNjMDY5LCAweGJkNTNmZWI5LCAweDQ3MzFlMWY1LCAweDc1NmQzZTYwLCAweDI2NDhmMWJmLAorCTB4NzY3YzE5MzgsIDB4MmZmZTYxYjYsIDB4MmVmNmY3OWUsIDB4OWQ4NWRiOGYsIDB4NGMyZWRkZDcsIDB4NDI0ZGJjZWQsCisJMHg2OWU2NmI2ZiwgMHhhMGYxMWE5OSwgMHg0MWI2NWM1ZSwgMHg3M2UwODVmNSwgMHg0ZjRkYjZkOSwgMHhlYTc2OGEzYywKKwkweDcwZGY3NmJiLCAweGRiNzRiZmU4LCAweDAwOTg3ZjRiLCAweDZhZWRkMmY5LCAweDBjYmUwY2QyLCAweDhkZDI5NDk3LAorCTB4YmZmYzIwOTcsIDB4MWUzNzZjNzQsIDB4OTJmNTdlNGEsIDB4YmZjZDFkZTYsIDB4Mzc0ZmI4ZmYsIDB4ZWZiNzRhM2UsCisJMHg5ZWU4ZDhkMywgMHhiMGQyOThmMCwgMHhjNTc1NmI0ZiwgMHg5MWMzNGJjMCwgMHhhYWFmZDQ1YywgMHhhMWFlN2ViNywKKwkweGFmNzI3OTNkLCAweDYzZDM1MmM0LCAweDRiYzM3M2MwLCAweDljMjAyN2E0LCAweDRmMDI4ZjA4LCAweGFhOGI3ODVkLAorCTB4YTBiYzA0MWYsIDB4MTRmMDM3M2MsIDB4OTA4MGZlNWQsIDB4Nzc5ZmQ4M2YsIDB4ZDNmM2QxMTQsIDB4Zjk1ZmEzY2YsCisJMHhkNzBmYmIzZCwgMHhlZGY0ZjQ1ZiwgMHg3MWM3NWMxZSwgMHhmNWQzOTJhNSwgMHhmYzUzMmI2MywgMHgxYTkxNmUzMCwKKwkweGU1MjlkMTRhLCAweGZmMWU4YmRmLCAweGUxNWJkMTIxLCAweGUxNGMzZjFiLCAweDlmYmZhMGY2LCAweDUwYTZmNjhkLAorCTB4YzJkZjVjM2YsIDB4ZmFkMDM3ZjUsIDB4ZTg4MDU4MGEsIDB4MzkzMWU4YWUsIDB4YTdlOTBjMmYsIDB4M2RiZTliMGEsCisJMHhjODY0NWYwNiwgMHg2ZjhlMmY5YywgMHhkNjBiODUwNCwgMHgxMmVkMWM3NywgMHg0ZWZlYjNmNCwgMHg3ZjI2NmYwZSwKKwkweGZjODYyMmM4LCAweDNmYzM0M2ZmLCAweGZlNTMxNmNlLCAweDkzYzcwNzUzLCAweGJlMDliNjQzLCAweDRjY2Y2ZDAyLAorCTB4Yjc3Nzc1YWYsIDB4MGQ0ZTdlMjAsIDB4MWZhMmE3ZjIsIDB4OTA5NGM4MmQsIDB4MjVmNDg3ODAsIDB4MzFiZjJiZjQsCisJMHg4N2UzOTUyZCwgMHhkMTZjOTU3OSwgMHgyOTgwZjQwZSwgMHhiN2ViMWRmOCwgMHgxOGU3N2VhOCwgMHg2NWY2M2I0YiwKKwkweDRiZjhmNzdhLCAweGVmMzBmOGM0LCAweDhmYmZkYzM4LCAweDg2YTJiMGE3LCAweDU1YmJlYjE4LCAweGY2MWVmODM2LAorCTB4OTk3ZDEzNzEsIDB4N2JmMzliZjgsIDB4YmY5YzNkZGQsIDB4Y2YwZjdlMGQsIDB4OWZlNThlOWEsIDB4MDdmOWM5YmMsCisJMHgwOGZlZTFkYiwgMHg1MmE0OGFmMywgMHgyNWViYmVmOSwgMHgxNjc2MDc5MiwgMHg3NWQ3YzU4OSwgMHg2YjZiZTBhYSwKKwkweDMwMjc0MWI5LCAweDMwNGE0NTZmLCAweGRmZjYwYmQxLCAweGZlNGZlMDg3LCAweGQwNzU4MmIzLCAweDgzMmYyNGNlLAorCTB4NjdhNzllMzgsIDB4MTZkZjA2N2YsIDB4MjUxZmZlMGEsIDB4YWQ5ZmY5NWIsIDB4YmJkZjdjZTcsIDB4N2RhMjE1N2UsCisJMHgzZjBkNGNhZSwgMHgyYmYyMjhmMSwgMHg4YmM4NjdmMCwgMHhlMWU2YWFmYywgMHgxZmQ3NGZiYSwgMHhjMDRkYzNmOCwKKwkweDBjMWJhN2E3LCAweGNmY2FiNTNlLCAweDdhMmQzZTY4LCAweGY0ODRiMzc2LCAweGE3YTdjZDE5LCAweDg5MWI0MDhiLAorCTB4M2RmMGE3YzUsIDB4YjUxNjlmMjYsIDB4OWY5NTNmZmUsIDB4OGZhZWZjMDYsIDB4MGYyMTlmODIsIDB4YjQ2MzgzN2IsCisJMHhmMzYzM2MzYywgMHhlNWEzM2MxMiwgMHhjOWJkZmMyMSwgMHg5ZmQyN2JiMiwgMHhiZDA2Nzc0MSwgMHhmY2IyZmM5NSwKKwkweDE4MTdmMjIyLCAweDVkZDA2OTc0LCAweDc0MWE1ZDE3LCAweDYyZmZjM2Q3LCAweGY5NzQ1ZjgxLCAweGEwMDVhNDYwLAorCTB4MmE1ZGJjOTMsIDB4Y2Q2NTU1ZDksIDB4ZGEwYzNjZmMsIDB4OGIyMDNjYmQsIDB4NmRhN2U0ZTAsIDB4M2NiY2Q1OGMsCisJMHgwZjljYzkyMCwgMHhhMjFiZTU0NywgMHhmMmEzZmJlYSwgMHgwM2Y1NTE3OSwgMHg0YjRhZjk1MSwgMHgwM2E2YjJmZCwKKwkweDQ3ZmMyMzFhLCAweDRiZWNmNTJjLCAweGM0MWY2NTFmLCAweGZkOGM4N2IwLCAweDQ2NzhkODI2LCAweDBjNWQyMTBiLAorCTB4ZGU1MGQ0ZWMsIDB4MDU0MWNiYTksIDB4MWVlMGZmNDUsIDB4MGVjNWVjOTksIDB4MTgyYWYxODAsIDB4M2QzZWEzYTcsCisJMHhiMWI5MDIxYywgMHhmMGVkYzlkMiwgMHhkM2QzYmQwZSwgMHg4OTk1ZDIwNywgMHhhYzk5ZGYzYywgMHg2N2I5NDJhZCwKKwkweDcyNzRlZjdjLCAweDVlNDc0NzNmLCAweGU0ZDEyN2E3LCAweDJjZDIzOGE3LCAweDBkNmVkYzkzLCAweGZjYjFlOWIzLAorCTB4MTBhM2IwMjAsIDB4NmY1OTViZGUsIDB4MzlmZmRjZTUsIDB4NWUwZDc2NGQsIDB4OGQ2OGY2OGEsIDB4NzcxMzQzZWMsCisJMHgzZDFiYjJjMSwgMHg2OGU5MmFlOCwgMHg2Y2NkN2ExZSwgMHg1NWYwYmVmOCwgMHgzYTU1OGU5OSwgMHg3MDYzM2NlMiwKKwkweDU3ZTQyYzVlLCAweDg5ZWM5OWZhLCAweGIzZjQyYzEzLCAweDZjY2ZlODg5LCAweDgyYzU3NmU2LCAweDA4ZmE1MTM1LAorCTB4NTRmNDQzNWIsIDB4YTFhMjVhZTAsIDB4ZTAzYjA1M2MsIDB4OTczZmFiN2QsIDB4ZTg4OTQ1ZjMsIDB4YjViZDY4YWYsCisJMHgyNzhmNjhkYywgMHg5NWRmNjg1YSwgMHgwM2NiNTlkNCwgMHg2NWRhM2VjMiwgMHhjYjA2NDlmMCwgMHg4NjgzMzkyMCwKKwkweDQyZTdkYTBmLCAweDQ3OTM0ZjJlLCAweGYwMWIzMzVkLCAweDY2NTA3MWQxLCAweGI2Nzk5ZTc4LCAweDljN2MyNjU5LAorCTB4OTdlN2U3YWQsIDB4ZmM0Yzk0MmMsIDB4NDkzYWMxNTYsIDB4NmE3MDFhMWUsIDB4N2FkMjdlNDMsIDB4M2I2ZDU3OTcsCisJMHgxNzdkOWNmZSwgMHgzZmNlY2RkMiwgMHhhNDM5Zjk4ZSwgMHgxZGRmM2I2ZCwgMHhjZmYzMWJiMSwgMHg4ZmY4M2RiZCwKKwkweDI5ZmQ2N2FjLCAweDM3ZTQ5ZDdiLCAweDI2ZWJkOGVlLCAweGYzZDhlZjdhLCAweDYxNzdjMWRiLCAweGZjOWQ5NzdlLAorCTB4M2Y3YjFkNzUsIDB4ZDdmNDgzMWYsIDB4ODQ1ZWRjYjEsIDB4MTA2M2FlZjIsIDB4ZjdhYTg3YjcsIDB4OTVhNjNlN2MsCisJMHg4NDE1ZDdmNiwgMHhjNmIyYTNiNywgMHhiZmU2YTNmNSwgMHgzMDkyOTYxZSwgMHhkZWExNTU4NSwgMHhmODllMzdiMCwKKwkweDkzYmNmODI5LCAweDdiMWQwYmZjLCAweGI4MGVjZjNlLCAweGE5ZWI3NWZlLCAweDFkMzllNzEwLCAweDU5ZmIzNjZlLAorCTB4ZjcyMjVmOWMsIDB4OGY3NzA3ODMsIDB4Y2YwY2I0ZGYsIDB4NjlmNzFiYTMsIDB4Y2E3Y2ExZjMsIDB4ODMxZjdmMGIsCisJMHg1OWUzYjQ3MiwgMHhhYmI1MGZhZSwgMHg3OWUzOGZhZCwgMHhlMWZjODc0NSwgMHhkY2UwMTUzMiwgMHg5ZmQ1NGM4ZSwKKwkweDExOTRmYmIxLCAweDYyYTM0MzkzLCAweGU0ZWZlNWMxLCAweDc4NTBiOTM3LCAweDRmYjcwYTY4LCAweDIxZTFmZGZmLAorCTB4NzNiY2I5ZjksIDB4YWUxMjFkODcsIDB4N2ZjMzhiZmIsIDB4ZDdiMGI5NDQsIDB4YWM2OTc0NGUsIDB4MzJjMzc0ZjcsCisJMHhiN2NlNTdkMiwgMHg3ZmNhZTFlZSwgMHhkMGI4M2ExNywgMHgwYjkxNGI3NSwgMHg3ZmQ0Zjc1OSwgMHg1YWZmN2M3MywKKwkweGEyZmNkMmY2LCAweDlkMjdhMGY5LCAweGYyODNiOWVmLCAweDlhM2VkY2RiLCAweGZiZDIwNWVmLCAweDc4NjlmZjgyLAorCTB4ZWVmMDE2N2YsIDB4YWJiYWZmMzksIDB4ZGRkN2NkZmYsIDB4OWQ1ZmRlM2IsIDB4ZTNhZWYwMmIsIDB4ODVmMDdmNzksCisJMHhiZWZjZDNiZiwgMHhmNGRiOWNhZSwgMHgwZGVlOTRkZiwgMHg5YjE1ZmViZCwgMHhhODBjY2RmNywgMHhiOGQ1OWQzZiwKKwkweGIyYjhiMTUwLCAweDE5YWJmZjdjLCAweGMwY2FmYTUwLCAweGRmMzg4OTAzLCAweDM3ZTc1MWM5LCAweGMyYTZmYTQ2LAorCTB4OTJjOWE2ZWQsIDB4OTY0MWVjOGQsIDB4OTA3YjA5MjgsIDB4ODQwMzUxZGIsIDB4NDk2MDMwZmUsIDB4MDMyMWU5MDEsCisJMHhmNWNmZGUwNiwgMHgwZWJiYzUwNiwgMHgxOTVmMWZjZiwgMHhiMTQ3ZGYzYywgMHgzYmVjNmMxNCwgMHg5N2ViY2MwMSwKKwkweDllZDViYzhiLCAweGZjYzRiOWZjLCAweDYwM2EzNDc4LCAweGEyMGZmN2YwLCAweGEwNzAzYjVlLCAweGE0MmY3YTRjLAorCTB4ZThiZWVmYTQsIDB4OTdiZmNlOTksIDB4ZTdiYjE2NjksIDB4MGVkNWFmNGEsIDB4ZGFiMjRkY2EsIDB4N2Y0NTUzNGIsCisJMHhmZjlmMThkMywgMHgwZTE0OTczNCwgMHgwZjI2MWMwMywgMHhmYTEyNjlmYSwgMHg1NzBmMjc0NywgMHg1Y2Y5MDQ5OSwKKwkweGY2ODE1ODE2LCAweGI1OTc1NGM1LCAweGMzM2MwNmJmLCAweGUxY2RmNzE5LCAweDM4MGQ1NzY4LCAweDg3OTc1OTBlLAorCTB4OTMyNDFjNzAsIDB4NzBiY2Y0OWYsIDB4ZGMxMzc5YzQsIDB4MmYxOGMyMzIsIDB4ODcxZjE0YzMsIDB4MWY3MjlmNjMsCisJMHhiZDg1OWRmOSwgMHg5MDRkNDc0ZCwgMHg1YWFiNWM1NywgMHhiNDE1OWY5MCwgMHhjODFjMzk5NywgMHhlNWVjMzZjZSwKKwkweDg0Y2RlMGRlLCAweDIxODhhZGZkLCAweDAzMmJmODBkLCAweGRhZDNiZjY1LCAweDA2ZGZkOTFmLCAweDNlMmViZTVlLAorCTB4NTM3ZTNjMGMsIDB4ODUxYmJjYmMsIDB4NDVhZTgxOTcsIDB4NzRlYmYyMGEsIDB4NjJmYTE3YjQsIDB4MWY5ZTBjZmQsCisJMHhkY2U4NTIxOCwgMHg1NzBiZDg0ZCwgMHhhNDI5MTc3OCwgMHg1MGNjMGNmNywgMHg4ZTg1NWYxMCwgMHgxY2YwYWJhNiwKKwkweDY4OTNlMWM0LCAweGQ5YjcxNzFlLCAweDY0NzA3ZjY4LCAweDkxZjcwNDQ5LCAweGRmZTUwYWI1LCAweDEwZTNlOWIwLAorCTB4N2IyZjMzZGYsIDB4MGM5ZGY0ZWUsIDB4OGQ3ZWU2ZmQsIDB4ZjFlNTNkYzcsIDB4N2RiZjhmZjMsIDB4OGM0NGU1ZjksCisJMHgyYzc4MTQxNywgMHg0NmFmZmY4NCwgMHgxNjdhZmYzZiwgMHgyZDM4MDM4OSwgMHhhMTI4NTg1NCwgMHgyNWJkZmEwZiwKKwkweGVmYzViZWY2LCAweGRmZTNjZDZkLCAweGZiYmE1Mzc3LCAweGRlZmQ1ZjM5LCAweDNhYmZjYWU0LCAweGQ4ZTQwZTdkLAorCTB4NWRmMzAwZmIsIDB4ZTFhMzBlOTgsIDB4ZmQ1ZGIzMTUsIDB4YWYwZTY2OWQsIDB4MWUxNjIxZTAsIDB4ZTQyYWUzYzIsCisJMHhlMTM5ZDMzYywgMHg5ZmZlODIxZCwgMHg5OWIzZDNmYiwgMHhlYTRlZDc2OCwgMHhlNWMwOTUxOCwgMHgxN2IyMzBlYiwKKwkweDM4NWVjMjgyLCAweDNlMDliY2NiLCAweGExZDdjYTE3LCAweDc5ZmU3NDA5LCAweDhhYzc3NjUwLCAweGVjMmFkYzJiLAorCTB4N2M2MjVmZWQsIDB4NzUxZGE0MDksIDB4ZmI0NjQ2YWMsIDB4MWY5Mjc1OGQsIDB4NjBlNzU0MzcsIDB4YjdjNDYzOWIsCisJMHg5Zjg2YWJlNCwgMHhmZTBkZTA0YSwgMHg4ZjNjNmNlNCwgMHg4NDJmZTNlMSwgMHhiYzY2MDlhNiwgMHhhOTM4Y2RiNSwKKwkweDA3ODllOThjLCAweDc0ZGY3YmZjLCAweGUxNGRmNTFlLCAweGMyM2RmNjhiLCAweDM1YjNhYjc3LCAweGZjODYyZjM3LAorCTB4NmZjMDVkYjgsIDB4YzgyZmZlZTYsIDB4ZjM2OTc5ZmYsIDB4ZWZkMjFiMDYsIDB4Y2IzNjc1YTUsIDB4MmFhOTZhZjksCisJMHg2Y2IxYjFlYywgMHhlNjZiY2UyYywgMHgwYjNiYTc3ZSwgMHhmNjUwNzJmMSwgMHhiMDY3M2M2MSwgMHg4ODE2OGNmOSwKKwkweDBkMTgyZTcxLCAweGZkMWZlYzRmLCAweDlkNTU1YmU5LCAweGRhYjc2YmY4LCAweGJhZTExZjMwLCAweDQzMDcyM2ZiLAorCTB4NTY5NzdhM2IsIDB4OWU2YjFhNTMsIDB4OWU3Y2VjMDMsIDB4ZWRjMzU5MGIsIDB4ZmRmZmQyNjMsIDB4YzNhOTNiZTAsCisJMHhmNjhjOTkxNSwgMHg3ZTEzMWQ2NywgMHg2M2ZhNjg4ZiwgMHhiNzY3Yzc0NCwgMHhhZmVlMzBiMCwgMHg1Y2EyYWY2OCwKKwkweDY4Y2Y1YjM4LCAweGRjOTAwNzdmLCAweGYwMzc3NjhmLCAweDdlY2NmN2ZiLCAweGI2OWI4YjljLCAweDgyZjUxMmZmLAorCTB4Yzc0OTY2OGEsIDB4YTUwYTg2MjMsIDB4NmQzZjQzNTUsIDB4YzY1MTI5YjAsIDB4NmJjMzM4N2QsIDB4YTNlYWJiYzQsCisJMHhjNWYxMzdhZiwgMHhmODIxNTU1NiwgMHhmYmIwOTgxZSwgMHhlM2Y3MWM2NiwgMHg5ZWExOGQzNiwgMHhkM2IxN2ZlMiwKKwkweGM3ZjhmYjgzLCAweDA3YzQ5OWNkLCAweDU3ZWJhZGJkLCAweGE5YWFlYzU1LCAweDk3MmEzNzQ4LCAweDMwZjRkMTg3LAorCTB4OTJjZTNlYWEsIDB4ZjQwZTRjYmYsIDB4Njk5YWZlNDcsIDB4OGJlMjVkNmYsIDB4NmJlZmJmODEsIDB4YmMxNzM4OTIsCisJMHhmZTE2Zjk0MCwgMHhiZGJlNGNmZiwgMHg4MGI3Yzg2OSwgMHhhM2UyNjc5YywgMHhmOTBmNWFiZSwgMHhiZTRiMWE5NiwKKwkweGE5YmM5NjJkLCAweDdiYzVmNzA4LCAweDVlMjJhNjg2LCAweDI2YWFiZjE3LCAweGRiNmY5MmM3LCAweGU3MzlmOGFhLAorCTB4Yjk0ZTIyMzMsIDB4ZGJlNDExYTMsIDB4YWRmMjRkYjcsIDB4OGM1YmU0MTEsIDB4NWZiZjkwNzgsIDB4ZmYwYjdjYTgsCisJMHgzNmRmZjBkNywgMHhkNjMxNmY5NCwgMHhmOTU2NmJhYiwgMHgwOGY5YTYzNiwgMHg4ZDMxYjdjOSwgMHhhZjNjNGIzNiwKKwkweDdjOWYzYjVkLCAweDQ3YWY5MjkzLCAweGVhYTBmOGZkLCAweDNmNDE4ZjhiLCAweGZlM2U4NGRiLCAweGM0NGI4ODhjLAorCTB4ZTVjZTUwNzEsIDB4N2Y4ZDNhNmEsIDB4ZTJlZTcyYTEsIDB4ZmY3Mzk1MGIsIDB4ZTQzNjcwNDUsIDB4OGMxZGUyZGMsCisJMHhkMjdiOWNlMiwgMHg4YjczOTcyMSwgMHg5MzljODE3NywgMHg5Y2I5MWU5MCwgMHg3MTg3YmM1YiwgMHg3Yzk0NWNiZiwKKwkweGJlNDNkOTFiLCAweDExNWZhYTMxLCAweDRkODNlZGUxLCAweDAyZGYwZmU5LCAweGFiZjU4ZGZkLCAweDFmZDQwNzNlLAorCTB4YzZlZjJkZGIsIDB4YWU1ZGU1OTksIDB4N2FkYzEwYTYsIDB4MTc4M2JiYzgsIDB4MDg3NmVmMjYsIDB4NmM3MjA3NzksCisJMHg2OGQ3Y2EwOCwgMHg1YjM1ZjBmYSwgMHg4Zjc3YzFlMywgMHgyYmZmNWUzZiwgMHhjYWRmOTdlNCwgMHg4NmY4ZGU3NCwKKwkweGJkMGY5ZjhkLCAweDE2NzhmZTM2LCAweDYyNjNkN2QyLCAweGRjODQ4YjNlLCAweDUxMGFhZjZiLCAweGU0NWU1M2ZmLAorCTB4ZjE3NzJiZWIsIDB4NDY4YWYxMzgsIDB4ZDQ1NjFmYWUsIDB4ZmMyZjYxNGIsIDB4MTdjMjc3MzMsIDB4NzhiZmNlMWEsCisJMHgyMTUyYzQ4ZiwgMHhlYmNlY2IzZiwgMHhmMzhkMjdiMywgMHhjMzIzMzYzMiwgMHg3MjBiMGY0NCwgMHhiZmNmYzk0YSwKKwkweGY0MGU2MTQwLCAweDcyYmE5N2UzLCAweDViZmVhMjRmLCAweGZlZmRjMzlhLCAweGYxN2JlMmE1LCAweGQwYWJhZGFiLAorCTB4ODhmYzVkZmYsIDB4NDZhNWU3NDQsIDB4ZTcxMWFiN2MsIDB4YTI2ZTIzZGIsIDB4NzdmOTE5NzksIDB4NjYyN2UzYTMsCisJMHg5OWE5Yjg4YSwgMHgxYmMyOTRiZiwgMHg5NDdmYzQ2MiwgMHg3ZmU2YjE2ZSwgMHg5NjZmZjgyMiwgMHg2MmYwNGFkYywKKwkweGUzMzFjYmFmLCAweDVkN2E4YzM4LCAweGUwMjgzYTcwLCAweDdlZDMyNzU0LCAweDgwMjcwNWRhLCAweDI3YmQzNzliLAorCTB4MzNkMzAwOWMsIDB4ZTFiYTUyMzIsIDB4NTg1YmZjNTIsIDB4ZWJlZjU2NmYsIDB4YmQxNmUwMzUsIDB4NWQ3ZmMzNmUsCisJMHgwZGU5ZmEyYSwgMHg3YjljMDYwZSwgMHgxZGMwNWZhYywgMHg5MzkyMDJlYywgMHhhNzU4ZjBkMSwgMHgzM2I1Zjk3NSwKKwkweGU4MDk0ZTMxLCAweGU4NGNlNDg2LCAweDE4MTcwMGQ3LCAweDcwZDI2ZjJmLCAweDQ3OTc3ZGNiLCAweGQ2NjRmZDA1LAorCTB4ZTE4MjlhNGMsIDB4YWUzMGIzMGMsIDB4NmEwYmNhMWMsIDB4MGZkY2JkMTcsIDB4MWRlZTMxZTAsIDB4NGVkYzU4ZWYsCisJMHgwZjYwOWIyZiwgMHg1NmVjMzllMCwgMHg0MWM5Mjc2NywgMHgzNWRiMGU4MywgMHgxNDFjMDdhZSwgMHhiZmRkZGRmMCwKKwkweGY5ZDkzMjcyLCAweDdhOGU5MjRkLCAweDI0ZTIzMDQ4LCAweGFlMDEwNmI4LCAweGE4MjhmZjc4LCAweDgxMDZmYzcwLAorCTB4MGVmZjkxMWUsIDB4ODcxOWYyM2MsIDB4OGJjOTFlZTMsIDB4NjM1YzlkZmUsIDB4NDBiYzQyYmYsIDB4OGU2NmNjZmQsCisJMHgyMjU4NjA5NywgMHg0ZWIxNjRiYywgMHhhOGE5N2YzYSwgMHg4NDExN2M5NSwgMHg4MjA2ZDM1ZiwgMHhlMTlmMjE5ZiwKKwkweDkzYzY2NWNmLCAweDU4OTU3ZTg5LCAweDRjOTU0YmY0LCAweGE4YTk2NWZiLCAweGYzNWVkMzM3LCAweDk5ZTdhNDA3LAorCTB4MDM2Y2FhNGYsIDB4ZmJmZTFiODEsIDB4NGYzZTdhMmEsIDB4OWUzNDUwMWMsIDB4YjZiYzA0ZGEsIDB4MDg1ZDNjMjEsCisJMHg3N2FlNGViNywgMHhmYmEwYmU0NSwgMHg1MDc5NDY1MCwgMHgzOWUwNTkwOSwgMHg1ZjczZDFlNSwgMHgwNjcxYWYwOSwKKwkweDUxOGU5MGJjLCAweGNiZTczNWJlLCAweDkyNjgyZjk4LCAweDllZjRkZjU4LCAweDUwZjNjNWViLCAweGVmMTdiZjMzLAorCTB4N2ZmYmMyMzksIDB4MThiMWYyNGMsIDB4YmE2MGJlZWIsIDB4OGI5ZTg1ZWUsIDB4YmNmMTZlODAsIDB4OGViYTM3YTQsCisJMHhkMjNiNTM4NiwgMHhlOWJhYjdmMywgMHhlNzY3MzVmOSwgMHhlN2E0NGNhMSwgMHg0M2Y3MTIzZCwgMHhjZTVhMjczNCwKKwkweDFlNzYzZDM1LCAweDA5ZDViNWY3LCAweGVlZWIwZjc0LCAweDZkZjU1NTdjLCAweGNiOTBjNmY0LCAweDdlZDFlZTgyLAorCTB4YmIzN2RmMzAsIDB4ZjE4MjE3MDQsIDB4MTQxYzViYTIsIDB4MThmMzQ3ZWYsIDB4YjM1M2Y1YzIsIDB4NjRlNmRlN2MsCisJMHhmNTY3ZDdjOSwgMHgyZWRiYmZkZSwgMHgzNzI3OGNjNSwgMHgzZjIzMjNmNCwgMHhmOGMzYzcxYSwgMHg2ZjE4MjZmOSwKKwkweGQxNzhmNzY0LCAweDJmZTE4M2ZiLCAweGZhYmFkZjM4LCAweGJhZDliZmRiLCAweDZlYmU3MThjLCAweGI1OTA1NDNjLAorCTB4Yjg4ZDVlMTAsIDB4ZTA1MjIzYTgsIDB4NzNlYTJhNDcsIDB4ZmM0YjI1ZDMsIDB4Yzg1Y2NjMTUsIDB4N2ZkYzZmYWQsCisJMHg3YmRjOTZhYSwgMHhhNzRkMmNmZiwgMHhlYmI3NzRmYiwgMHhlODlkNzdjNiwgMHhlMjY3NGYzMywgMHhkYmUyNmY3YywKKwkweGVjN2ZlZmI4LCAweDU5OThlN2U3LCAweDQ0ZDZmNjM2LCAweGFiMjYzZmRjLCAweGUzZWFlOTBjLCAweGExZjkyYTQzLAorCTB4ZTNjYTllM2YsIDB4ZWRmOWFmNmUsIDB4M2U1ZDA1MDEsIDB4Mzg5OGYwZDcsIDB4ODkzOGNkNzYsIDB4YjAzN2FjZWMsCisJMHg4N2E4ZjFlYiwgMHgwNDdmOTgzYiwgMHhlZjEzMmZjMSwgMHhkNWQ0NjVlZCwgMHg1ZjAyZjE0YywgMHhhZTEyZGQ4ZiwKKwkweGE1MzdkNGM2LCAweGM0MzVlOTMzLCAweDIxOTkyNGRiLCAweDdkZmM1YWRlLCAweDdmMjBiOGE3LCAweDAzMmM4N2ZiLAorCTB4MWZhMGEwNWQsIDB4MDdiMWZiNTAsIDB4OWJkNjMyNTksIDB4MzMyNjRmZTAsIDB4MjdlMzdjNjYsIDB4ZjMwNzVlNmYsCisJMHhmNjQ4N2YxOCwgMHhhY2RlYTE3OSwgMHgwMzE3MmUwMywgMHg3YWU0N2E3ZCwgMHhlMDk4MGIxYiwgMHhhYjg1ODEzNSwKKwkweGZlMzRkZmQxLCAweDljM2FmZmE4LCAweDNiZTgxMTc3LCAweGE4YTQ0Zjc4LCAweDA3YjU0Mzc5LCAweDZhMjVlYmYzLAorCTB4NzIwNTBjMWYsIDB4NmQ5ZWIwM2QsIDB4YmY3MjY3YjUsIDB4ZWEwMTcyODUsIDB4ZjVjMTM3NjEsIDB4NGViMDVlYmMsCisJMHg3Mjg4NjFmMiwgMHg4YTVhZjM0MSwgMHg5M2E4MmEyZiwgMHhiNmUxNDJlOCwgMHhiYzFjYzRiMCwgMHhmYTAzYjBkZiwKKwkweGRhMWViNmRkLCAweDA1ZmVlMTY3LCAweGJhZGZiMWVkLCAweDg3NWU2ZjMzLCAweDQ5ZTYwNzcyLCAweGI5ZjllYmVkLAorCTB4ZjNiNDAxN2MsIDB4MmRkNGJmMjIsIDB4ZDc4YWZlYTIsIDB4YjNlZjBjNGIsIDB4N2RmM2Q1MTQsIDB4ZWE5MGU4YTksCisJMHg3ZGM2ZjJjMywgMHgzYjdlZDA4ZiwgMHg5N2ViYzYwMywgMHg2NDUwZmI4ZSwgMHhjYTBiZGQyYSwgMHgyZmJhNzQ5NCwKKwkweGY4NGMxYTE5LCAweDdmMWM2MGViLCAweGYyMjBmYTZjLCAweGFiYmM1MjBiLCAweDk4YTBjMDk3LCAweDY0ZmU2M2UzLAorCTB4YjNmMjQyMWYsIDB4ZWI0Y2I3YzAsIDB4OTZiY2ZkMGIsIDB4MjM2ZTljOTMsIDB4ZTc0MzNhYmEsIDB4ZGUwMTQ3ZWQsCisJMHgxYmY3ODAwMSwgMHg0MGU1NWUyMiwgMHhhYjVhMDdjZSwgMHhjMmZjNWY2OSwgMHg5YjlmOTQzZSwgMHgzOGEyNGQzNCwKKwkweDhmMmM4NThlLCAweDhlNjYzOGUyLCAweGViZTZmYWU3LCAweGU4YzMzYjk3LCAweGVkNWQ3YmU3LCAweDBmZGY4ODFjLAorCTB4ZWZhNzZlNWMsIDB4MWNiOGRiZWQsIDB4NGFkNDFmNmUsIDB4ZWJlM2Y2ZmUsIDB4NThmNzg2NTUsIDB4MjRjYmQ3YWEsCisJMHhhYmQ3OGUyZiwgMHg3ZTU2M2Y3NCwgMHgxNDMxYzc4YywgMHhjN2ZhZTM2ZSwgMHhkZmJjZjU4MSwgMHhlMWI3YThlMywKKwkweDQzOTYwN2I5LCAweDExYWI3MGJlLCAweGI0ZTVjMGU3LCAweGU4MTY3ZjYxLCAweDkwYzJmZTNjLCAweGRkNjJlNWJiLAorCTB4NzVhMWY2M2QsIDB4ZDkyNDM0Y2IsIDB4MmU1Yjc5NjgsIDB4OGIwOTcxZTQsIDB4MmQxY2JkOTAsIDB4MWNmMWNiNzcsCisJMHgxOTdjODNkZCwgMHhlYWU2MjcxZCwgMHgwZTkwNjNiNiwgMHg1ZDEwNWYyMiwgMHgxOTUyMWM1NywgMHgwN2QyMzFkYSwKKwkweDk3MTRiOTZkLCAweDczYTI0N2I2LCAweDkyY2RmMThiLCAweDhhMWFlMzFmLCAweDQ5ODdiMWRlLCAweGNmZTcwZWZmLAorCTB4MmZlZTExZmIsIDB4ODYxOWRhZWYsIDB4M2M0MzFmMmMsIDB4YjFjYTljODAsIDB4YTdlOWZlNzcsIDB4MWJlNGZkZjAsCisJMHgwMjA4OGMwZSwgMHhiODI3YzliYSwgMHg1OWJlNzExYiwgMHg0ZjNjNzk5YiwgMHg1MmViMWJkNiwgMHg5YjJmM2VmMCwKKwkweDQwZTQ5N2RhLCAweDAyY2NhZDYxLCAweDUyNzEzOTI2LCAweDEzNzc1ZmYyLCAweGQ0NzQxZmRmLCAweDY2N2MwYzc3LAorCTB4YjgwNTM1NjksIDB4YzFjYjdlYmYsIDB4NjZlZjU1ZjcsIDB4ZDg2NDYzMTUsIDB4MDQzZDg0ZWYsIDB4ZjUxZjgxZjYsCisJMHg2YjVkZTI5YiwgMHgxZDEzMzQ1MywgMHg5YjU5ZWYxNCwgMHg1NWY3YzMyMiwgMHgxYWE2MWUyMiwgMHg1NzY4NTdmNywKKwkweDhhNzFmMWFjLCAweDA2ZmE0YWY3LCAweDNmNDYzOGQzLCAweDJlZGFiZjQ2LCAweDFlZTg2ZWRlLCAweDdmZDZmNjllLAorCTB4ZDY4ZmNlMzEsIDB4ZjI4NmE5ZjksIDB4MWU5ZmJhMjIsIDB4NGZkMmY3ZTMsIDB4YWRjZmVmY2UsIDB4Mzk1ZTYwOTMsCisJMHhhYzE0Y2JhZiwgMHg4Y2MxZjM5ZSwgMHgxZDczZTZhMSwgMHhjYWZjMzUyMywgMHg5OGRhNmZkOSwgMHg5Y2JmMDRkZiwKKwkweGJmMzFjNTNmLCAweGUzOGRkZjA5LCAweDdmMDFlZjgwLCAweDYxNDkzNzU3LCAweDIzZjk4NGE3LCAweGU1MTY3OTVhLAorCTB4MGFmM2U0NzUsIDB4OThhZTdmZTEsIDB4MWFlYmNmY2EsIDB4ODE1OGRlMzMsIDB4NGIyMzNmN2MsIDB4YTE2MDdhMjIsCisJMHg4OTM3ZDY4MCwgMHhmYTJmMzVmNCwgMHg3OGIzMGJmZCwgMHg4ZjY4NDJmYiwgMHgwOGY4ZDhmYywgMHgxMzkwNGZlNywKKwkweDE1MjM5NDVlLCAweDUyZTZkN2ViLCAweDhiYzkzYWZkLCAweGM4NmUzN2ZkLCAweDI4YTQ3ZDI3LCAweDVlNTQ2NjQ3LAorCTB4YTNmNDg0NzcsIDB4NDkyM2E2YTIsIDB4YjdjMGM3YzgsIDB4YTgxZjUwZWIsIDB4NTFkNzY4OTgsIDB4NjhmYzFiOGUsCisJMHhlMmViZjdmMCwgMHhlODczMmIzZSwgMHhjNjdlZjFhMywgMHg4YmU2NDZmZiwgMHgyMWYyZDdjMSwgMHhmNTgzZDcyZSwKKwkweDM5ODMxZjljLCAweGRmNWY1ZjljLCAweDJmMGFlMmE2LCAweDlmODliZjg0LCAweGZjZTE2ZjhmLCAweDQzNzYzZjJhLAorCTB4MmY4N2RlMmUsIDB4YzNlZmNjZGMsIDB4NDUzZjU4MWYsIDB4NzhmYTdkNDMsIDB4YTZmZGEyNTgsIDB4YmQ3MzdmMjcsCisJMHhhYmJmOWEzNSwgMHg3ZGVmYmUyNSwgMHhlMGQyZmQ1ZCwgMHhlMThmODM2ZiwgMHhhZjFjNmFlZiwgMHhlZjE0ZjgwYywKKwkweGY1ZjM0NjRmLCAweDBmZTFiNTRjLCAweGFmN2NjM2I3LCAweDAzZDYxYTc5LCAweGRkZjI5ZGYzLCAweDI2YWQzZDNiLAorCTB4MTRmOTA5MzksIDB4M2MyODE3Y2MsIDB4MmI5MGNiOWUsIDB4ZmI4ZjBhZTUsIDB4OGJmM2RhZmIsIDB4Yjc2YzNmMWEsCisJMHg2NzdlNDdmYSwgMHhlYmYxZTQ0ZiwgMHhmZGQxMmE3NSwgMHgwN2IzZjhmOSwgMHg3ZjIwNWQ5ZiwgMHg5ZDVmMjg1ZSwKKwkweGYxOGQzZjhmLCAweDdlZDYzZGU1LCAweDJkZTgyNzdlLCAweDgwNzZiZmJhLCAweGZhZTAwNDZiLCAweDhhMjZmZDRhLAorCTB4YTllOGZkZjMsIDB4M2YxMTMzMjMsIDB4Y2U4MWJiYTUsIDB4ZGRlYWJlOTEsIDB4NGU3MjgyMmMsIDB4NTU3ZWQzMDksCisJMHgzZGQzMjhkMiwgMHhiMjQ0YTYwMSwgMHhmOTliNzNhZiwgMHg5NTZkYzc5OCwgMHg3YTI2ZTMzZSwgMHgxZWQ2NzkyYSwKKwkweDRiZWQwMTllLCAweDg2MzA3ZTc2LCAweDc3OTY2OGUyLCAweGU4NWE1YzUyLCAweDg3MmZhMTI5LCAweDFmMjBjNzVhLAorCTB4N2UzYzI4OTQsIDB4MDQyZTVhMmMsIDB4ZDcwZmRjMWMsIDB4MzY3ZTJiYjYsIDB4YzJkYTRmYWUsIDB4NjkyODhmZGYsCisJMHg5YmI1NTFiOCwgMHg3NDZlMjVjZSwgMHgzYTNkNDZhOCwgMHgxZDAxMGRkNywgMHg5YzVkZmRlMywgMHgwMmRkZjk5ZiwKKwkweDZkYWM2ZTIzLCAweDI1MTM5NzJiLCAweDgxZDkyYTRkLCAweGI3YjY1YjI1LCAweGM5NzBmYzYzLCAweDc3ZjI3NjNiLAorCTB4YTE5Y2I3MDUsIDB4OWU1MzEwZmIsIDB4OTRmZTQ2ZDksIDB4Mzk2YzkzNjAsIDB4YjcxMWViN2YsIDB4ZDg4ZTQ1YjksCisJMHhiMWIwZWUzMSwgMHgyMTFkY2U5YywgMHgwZGYyODQ3ZiwgMHhjZjk3ZTNiMSwgMHhmYTU4NWYxNywgMHgyMTlkOWVjYywKKwkweGFmZTk2MTAwLCAweDdjYTBmNDllLCAweGQ5YjJkNTM5LCAweDdlODc3MDgzLCAweGJhNmUzMmJmLCAweGMzNjY5YzQ3LAorCTB4YTcxOTVmM2QsIDB4MDFmZjBhNzksIDB4NDM4ZjczOGMsIDB4OWM0NjM1ZDgsIDB4YTRiZTk2ZWIsIDB4YjJmY2MyNDcsCisJMHg3MzljNjJmMywgMHhkYmU1ZTk3NCwgMHhlZjFjN2QzZSwgMHg3YjNkYjQxMSwgMHg2ZjljNzFmYSwgMHg3ZTNlM2ZkOSwKKwkweGQ4YzFlMzFjLCAweDc3ZWQyNzVlLCAweGEyZGVhN2MxLCAweGRkYTM2YzM4LCAweGI1ZGZiMTI2LCAweGUyOTI3ZDZmLAorCTB4YjVkZmRiZDcsIDB4ZjZiN2IwZmIsIDB4NjMwN2M3M2QsIDB4ZjZmYjYwM2MsIDB4NmZkMDUyMmYsIDB4MzRjZjY0YjksCisJMHhkOTJlZWJmMiwgMHhjNTk1MjUzMSwgMHgxNDhjMmZkOCwgMHgwMTdjMzZlOSwgMHhmOGQxZjNmMSwgMHg4MDc4ZDAzYSwKKwkweDAyM2VkNmUyLCAweGViZmNhMzdjLCAweDI4NmRiYjhhLCAweDVlY2M3MWU3LCAweDFmNWI2ZjExLCAweDhmNDI5ZWZiLAorCTB4ZWJjNmRhZjgsIDB4ZTUxY2I5YWUsIDB4MWZkNzIzN2UsIDB4ZmI2NzFiY2YsIDB4ZGJmMWUwMjYsIDB4N2FiZjgwMTcsCisJMHgxYjEwMmZjMywgMHgzZmUxMWY3ZiwgMHhhMmZiNGYwMCwgMHhlMzY5ZjdmMCwgMHg4YTNjNWZjMiwgMHg3YjdkOGQ2NSwKKwkweDVjOGRiMzhkLCAweDdiOGNkYzAwLCAweGZjMzgwZjEwLCAweDg4YzkxYzg3LCAweDVjNTI1ZmU3LCAweDg2NmRlMjMzLAorCTB4NGY5ZmY3MTcsIDB4OTFmZGUzMDcsIDB4NWNlNzZhMTMsIDB4YzdiODVmYmEsIDB4NjhiYzYzYWUsIDB4ODliNzllYzksCisJMHhiYzc3ZGE3ZiwgMHgyNjY4N2U0MSwgMHhiM2I0MjNlZSwgMHgzZjFlM2ZhZSwgMHhkNjc1ODkyZSwgMHhhZTdjNzliOSwKKwkweGVmYzYzZjgwLCAweDVkZjQzZDdhLCAweDNhNzJlOWM0LCAweDdiNzdlMjM2LCAweDlkOTVkYjhiLCAweGVlMzZjZjVjLAorCTB4ZmRkNzk0NjcsIDB4NzZjM2M0NTEsIDB4NDFjYTRiZTMsIDB4Y2FmOTFkM2MsIDB4MGUwMzY4NzgsIDB4ZGRjMzkwYmEsCisJMHhlM2IxZTg3MSwgMHgyYmVlYmJhMywgMHhmZTIxN2MwOCwgMHg4YWVhMWY3MCwgMHhjMGZjODczMywgMHg3YTM3ZTRiMSwKKwkweDA3OTBjNTliLCAweGZjNzgxYmVkLCAweGZiMWFiYjdhLCAweDk3MTFiMDVlLCAweDNlNjg4ZmZlLCAweDNjNTg1ZjBkLAorCTB4ZmZlNmY5ZmEsIDB4ODFkM2UxNzUsIDB4NGY3MjRmY2EsIDB4MmRmZGI1MzgsIDB4Nzc0ZjFjYjYsIDB4OWVlY2RmNGEsCisJMHg3ZDE0OTk2MSwgMHgxY2ViY2E2ZiwgMHg0NzNiNzE4NywgMHhiYjgzYjQzNCwgMHhkZWIxNmNlYywgMHg2ZjU3ZTEzNiwKKwkweDc4YTY0YTdiLCAweDA3MGQ1NWU1LCAweGNiNDc4ZTQ4LCAweDJmN2MwYThiLCAweDMzN2NjNjI1LCAweDlhMmI3Y2M1LAorCTB4ZjZkMTNlZjgsIDB4ODJlYzNiYWMsIDB4ZWZmNmRhN2UsIDB4YThhZTdhMjIsIDB4ZDJmMTQyM2YsIDB4OTVmOTZmMmYsCisJMHg4YjhhNmFkNiwgMHg2YzIyN2RjMCwgMHhkM2RiN2Y5YSwgMHhkYzkwYzZmYiwgMHg0NGIyZWYxNiwgMHg4YzQ5MzM4ZiwKKwkweDNkOGU2YzEzLCAweDhjZmViMDRlLCAweDUwZDI5YzY1LCAweGNlYmJhNjgzLCAweGM1MjlkZTNmLCAweDc3ZjYyMzdmLAorCTB4ODNlYjg1YWEsIDB4ZTllNDFhYTcsIDB4MGZlMzE4ZTEsIDB4NzdkNmFhNzMsIDB4YTRiZjYwYTEsIDB4ZmNkYzY3ZjcsCisJMHgxM2Q5MTliZCwgMHgxMmU1ZmE0NywgMHgwOTNiY2U3NywgMHgxNDZhOTg0OSwgMHg0Y2JkNTVhZiwgMHg4N2ZkNzdjNCwKKwkweDVkZjEwZDJmLCAweGUxOGFiZWVkLCAweDdjMjI1NzdjLCAweDU1MWU3ZTRkLCAweDRiZDQzMDBmLCAweDJjYmNiNGQ1LAorCTB4Y2I0NDJiZjQsIDB4YzZjOTJkMWIsIDB4MmZmYzI2YzIsIDB4ZjU0ZjRmNzEsIDB4NjQ0Nzc5ZDIsIDB4NzBmM2UyMjAsCisJMHhmYjE1NzFjNiwgMHg5Zjk0NGJmZCwgMHg1YjBhMmZlYSwgMHhmYmYzMGE5NSwgMHgyZGYyNDg0YiwgMHhkZmQ5N2U4MywKKwkweGU3OTQxODNlLCAweDk3N2ZkOWVlLCAweGQ5NjNmMTFlLCAweGIwYWE1N2UyLCAweGJiNDYxZTc3LCAweGE0ZTBiZDg0LAorCTB4YWY3OTA2ZjgsIDB4MDhmOWRlOTMsIDB4ZjVhNGVlM2UsIDB4ZjlmMWQ4MWUsIDB4ZmY1ZmE0MTMsIDB4YjlmOGNlYzIsCisJMHgyMDJmNTgwZiwgMHhkZTc1MGFhZiwgMHg5ZjFkZjFjNywgMHhkNDU3ZmUzZiwgMHg4YzMxYjE5ZiwgMHhkNDM4Zjg1ZiwKKwkweDNlYTFiYjQ3LCAweDhlOWNlYzllLCAweGEwYzYxMzY3LCAweDg1ZjBhNDVmLCAweDNjYTI2NmJiLCAweGY0ZTc4YzJiLAorCTB4NmE0Y2Y4NTgsIDB4M2JmYTFhYjgsIDB4YzdmM2NjOTYsIDB4NzdhMjBkYjYsIDB4NzU5ZjRhMjUsIDB4ODFlOGRjNTMsCisJMHhlMDU1Y2YxZCwgMHg0Y2ZlZDRiZSwgMHhhOTdkYzMzYywgMHhlN2ExMDVmZCwgMHg1M2JjNTJmZiwgMHhjZDdhYWI1NSwKKwkweDRjYzVlM2YxLCAweGYzZWY5YWYxLCAweDEyZGU2Mjk0LCAweDJmYzhjNGFmLCAweGZlODQ3YzQxLCAweGJhMDRhNmFhLAorCTB4YWZmYTA0MDcsIDB4ZDQ4ZjlmYTUsIDB4NDQ3YzNiY2UsIDB4ZmNmZWExYzcsIDB4M2ZhNDUzZmUsIDB4N2FlODgzY2EsCisJMHhjZWJkZjk0NiwgMHgzOTVlZTIyMSwgMHhkNzc1NzNiNCwgMHgwNTlkNmEwZiwgMHg5ZmQzNWYzYywgMHhhYTE2OTNjYiwKKwkweGY4NTNiMGZmLCAweGNmNzk0NThmLCAweDg3ZmQ3OTdlLCAweGVlZWVmYzg0LCAweDEwYWZiNzg3LCAweGQzNDRkMGVmLAorCTB4NmZkMTQ2ZWYsIDB4NWZiZjk2ZTksIDB4OTU5ZGViMWMsIDB4ZWZhN2YzMTgsIDB4Yzg1ODk0M2YsIDB4NzZjYTdhODYsCisJMHg4NTdmYmQyNywgMHg3ZGUwMjhlZiwgMHgzZjFhOWQ4NSwgMHg0NGYzMmFkNywgMHhkZDliOWRlOCwgMHhjNTk3MWU0MiwKKwkweDlkZGRlODQ1LCAweDU4MWU2MmZlLCAweGQxY2NmMzFmLCAweDlmYmQzNGZhLCAweDYxOTM5Y2Y2LCAweDBiZjk1OTVjLAorCTB4YmJlMjNmNmUsIDB4YzdlN2U3N2MsIDB4NzE4NTllN2UsIDB4MTcxNGYxODksIDB4ZmZjMmZlNWYsIDB4YjcyODNhMjIsCisJMHgzZjIyZTY0NywgMHhiM2I3NmU3NCwgMHhkYmU3Yzg4ZCwgMHhmYzhjMWQ1ZiwgMHgwNjQ2YTZkYSwgMHhmMzhhZjlmNywKKwkweGJiMDZmMmJhLCAweDU4YmZmZWY1LCAweGRhYWFhOWM3LCAweGJiYmVmMGNiLCAweGE0YjZhZjcxLCAweDU3ZjMzOTE3LAorCTB4NWZhM2Q3MjcsIDB4NzI1ZmZhNzEsIDB4ZGY1YmJmMTIsIDB4MzU1NTNhNzMsIDB4NTlkZjEzM2IsIDB4Mzg5N2VhMzAsCisJMHg3N2M1Y2I2MiwgMHgxMzdjNWU1MSwgMHg3MWVhZWUzOSwgMHg5YzVkZjUzZiwgMHgyNWFjNDdjZiwgMHgxNTNlZmQwNSwKKwkweDNjYTM3N2EwLCAweDNlOTJkOTJmLCAweGZiMDRmZDEwLCAweDA0M2JjNjlkLCAweDhmZGMwNGRlLCAweGIyNWVhYmY2LAorCTB4ZWYzNTMxYTcsIDB4N2NhYTI3MzMsIDB4ZjQzMGNhOTksIDB4NTRjYzhjZGYsIDB4MWIxZDFkNjAsIDB4NjdmNDE0Y2UsCisJMHg5Y2VhNDcxOCwgMHg5ZGVlNGIxZCwgMHgzYWQzYzY3NiwgMHg5OGY2MWM0YSwgMHgwOWNmOWRmNywgMHg4ZDBmN2FiYSwKKwkweDFlM2U2NGZlLCAweGVlMzE4N2YyLCAweDcyNGMzNTdlLCAweDJmMzg4ZWY4LCAweGJiMDEyYmQ1LCAweDZlOTdiZjA4LAorCTB4Nzk2OTkzOTksIDB4YTFhOTQ1N2YsIDB4MDRhN2MwN2EsIDB4NGViNjYyY2YsIDB4NmZjOTMyY2IsIDB4YTVlMmJjNjMsCisJMHgyNjRhOTk1OSwgMHg0ZmZlNTc3ZSwgMHhkZGNhYmQxNywgMHgyNGExNjY3OCwgMHgwMTE1MGJkMiwgMHg5ZmFlYjY2MywKKwkweGEyODg3ZWU1LCAweDdlMTAzOWU2LCAweDE1ZDNjYjFhLCAweDg2YTU0OTE5LCAweDM1OGUzZGY4LCAweDc1MDJlYTUwLAorCTB4NTY1M2JmOGIsIDB4OWU0ZTUwYzksIDB4ZThmNmU3MTAsIDB4MWJiNGMyZWYsIDB4ZGM5Mjc3NWUsIDB4NmM2MjBkMGYsCisJMHgwN2JlM2E3OCwgMHg0ZGQwNGRlMSwgMHgxMGYxNTNmMCwgMHg1NzYzZTYxZSwgMHgxNzk3MTkyYSwgMHg5M2I0NzQzMywKKwkweDdkODA1MGE1LCAweDVkNTRmNDA5LCAweGU5MTMzZDM1LCAweDE4ZmNmZTExLCAweDA3YTY0OTA3LCAweGJmYTNjZmNjLAorCTB4NDFlYTA1ZmMsIDB4M2RmY2E3NDAsIDB4NzBiMmVmYmYsIDB4YzMxODgwMzUsIDB4M2FhZmM5ODEsIDB4ZTg3N2YxOTksCisJMHhjY2MzYmY1NiwgMHg3MWE1YzZmNiwgMHg2OGU3Nzg5MiwgMHgxNzMxYzkxZiwgMHg4NGViZmVlYiwgMHg5NDU1OGEzYywKKwkweGZmMDlkNWI3LCAweDQ0NzNjMWM4LCAweGE4MjJjZTk3LCAweDU4YmJjNjE3LCAweGQ3NTIxZTI0LCAweDk5OTRlNTI4LAorCTB4OTA1OTNkZmYsIDB4M2VhOWQxMzcsIDB4Y2QxZTVhZDEsIDB4YTJkNzIwMTcsIDB4ZjgyMDZkYzYsIDB4NDQ5ZmJmNDEsCisJMHg1NDQ5ZmJmNSwgMHg1NTdjOWZiZiwgMHg4MjljMDZiZiwgMHg3YzNlOGQ4ZSwgMHg1NTY1NjJhNywgMHgxZjFiODA5ZSwKKwkweDA2ZTAyMWNmLCAweGVmODkxOWYwLCAweDljNWIzMWU4LCAweDEzODc5YzRmLCAweDZjYzRlMzVjLCAweGYwMWY1OGVjLAorCTB4NGU5NzFlNWEsIDB4NjEyZmI5NzgsIDB4NDFjNjI3NmYsIDB4ODY1YWE0YjMsIDB4ODkwYWVmNzYsIDB4OTdmMGQzZWYsCisJMHg2M2I1MzJlNywgMHhmMGY4ODNiYSwgMHhiOTRlMzExZSwgMHhjMzBhZjM4MCwgMHhiZWEzZDUzZiwgMHgxZWFmZjQ5MywKKwkweGQ1YmQ5ZGY1LCAweGRmNWQ4YjhmLCAweGUyN2NkYmRkLCAweGIxMjdjZjYzLCAweGUyNmJmZTk3LCAweDc1ZmZmNjYzLAorCTB4MGJjNTUyZTUsIDB4ZTc4NmJmNmYsIDB4NDlmMjVkYjYsIDB4ZjU1YmQwMDcsIDB4ZDQzOGYyY2MsIDB4ZmQ4ZjEzMzMsCisJMHg3MGJlOTVhMywgMHhkMDMxZDMzZCwgMHhhNDM4ZWY4YSwgMHhiOGI3YTA2ZiwgMHhkMWVmZDY2MSwgMHg3ZDFiZDI3NCwKKwkweDQwNzU4YmU1LCAweGUwMGZkNWRlLCAweDdmMTg5MzcwLCAweGY3M2YxZDZhLCAweGY3MDk2NWJlLCAweGU4Nzk4MWQzLAorCTB4OGIzN2ZhYzcsIDB4MGEzOTM3ZmEsIDB4YzQ3MGRmYzksIDB4YmFiZmRmYzYsIDB4OTFlYjk2YTUsIDB4YTY1OGZjYjcsCisJMHhlZjFlZTlmMywgMHg4MDNmZTE1MSwgMHgyYTVkNmVkZiwgMHhiMWU5MjM4NSwgMHg3NTYyZDdkZSwgMHg5ZTZlM2Y3OCwKKwkweGJkZmEzZjE4LCAweGU2ZjMwMGFhLCAweGJkNjM5NmFlLCAweGQyZTljNTU3LCAweGZkMTc1N2I4LCAweDk2MDJjNTRlLAorCTB4YjMyMWRlMjcsIDB4ZDRlYjNmN2UsIDB4Y2Q2N2U0YmIsIDB4MmM3ZGVlYTgsIDB4MWVlODE2YjQsIDB4N2JhMDRmZjUsCisJMHhlYmM3OTczYywgMHhlMjE3MTQ2MiwgMHg0ODVjNzhkMSwgMHg0ZjNhMjBjYiwgMHhkOWRmZTQzMywgMHhkYzA0ZGU5MSwKKwkweDMwN2Y5OWFmLCAweGVmZjNhZWZmLCAweGE2ZjRhZjhiLCAweDJhMWRlZjlhLCAweGVmMmNlMmU3LCAweGJlYWI1NGY1LAorCTB4ZWE2Zjk0MzQsIDB4YzE1ZmQwMzksIDB4MGRjZWQ2NTQsIDB4Mzk1MzVlNjEsIDB4ZmNjNGFkZTgsIDB4NzI0OWJlMTgsCisJMHhhMzA5NGQyYSwgMHgzY2Y0NTQ1YywgMHhhZjdhODg1NiwgMHhhOGMzZWY3OCwgMHhkNTVkMjVhZiwgMHgwZWJlNjdhNSwKKwkweDRiOGU2ZmZmLCAweGJjNWNiZTI2LCAweGI2Zjc0YmQ2LCAweGRiY2Y4YjNmLCAweDdiMjRmNDg5LCAweDU3MDE3YzcyLAorCTB4ZWQwODdhNGYsIDB4YzZhZWViZTAsIDB4NWNmN2E3NzUsIDB4ZjNlNmI1NGYsIDB4MTU3ZGJlOTEsIDB4NmZmYzgwODAsCisJMHg0ZmNlMDczZSwgMHhmNmRmN2JiNiwgMHhhMzdlZmNlMiwgMHhmNGJiZjQzMiwgMHg0NGVmOGY4NCwgMHg4NmNmY2ExOCwKKwkweDg4N2M1MDA3LCAweDA0NjMzMDljLCAweGJjNDZiZjhlLCAweDZhYmFiYTZmLCAweGFhMmJhNTI0LCAweGJjNzk0ODk4LAorCTB4YWYyYThhZGMsIDB4ZWE0NDczNDgsIDB4YWE3NGU5MTcsIDB4MWE1NTZmNzcsIDB4Zjk1NTU3ZTUsIDB4ZWJlMDM1MjgsCisJMHhmYmQwZDVmMCwgMHg3YzYxOGU5MywgMHhmMDJlODc3YywgMHhmMDEzNjQ5NywgMHhlNWZlOTAwYiwgMHg3M2E0YWI0OCwKKwkweDE5NWVhNzQ1LCAweGQ4ZGY3N2MxLCAweDcwNzdkODQwLCAweGMxMGQ3YTU5LCAweGY5MTlkMzU3LCAweGU1M2VhMTM1LAorCTB4NTQ4Nzk4ZWQsIDB4Zjg0MTlkYWQsIDB4NTY0YWY0NTIsIDB4YzU2ZmU1MDgsIDB4NWMyMjhlMDcsIDB4MmQ0YmRlOWQsCisJMHhkM2RhNWFlZiwgMHg3ZmJkNDZjNiwgMHg4MzZmMDUxYSwgMHhiODcxYjZkZSwgMHg3YTcxMmZkZiwgMHhmZGZiODY4YiwKKwkweGUzMTc4YjZhLCAweGIyYmZlZTIyLCAweDgyMjk1ZGViLCAweDFjNDM5ODNiLCAweGU3ZTZiZmVlLCAweGRlZTEzZGI0LAorCTB4MDliZTdiMzIsIDB4ZTllY2VlZWUsIDB4MDRmYmY3MDQsIDB4NzAxNmVmOWMsIDB4YTg3ODE2YWQsIDB4NDZhY2YwMTYsCisJMHhhNDdlNTNiOCwgMHgzYTQ0ZmJjOCwgMHhjNDdiZDI5ZCwgMHgxMTJiYjdmYiwgMHgwOGNhOTAxZiwgMHg3ZDg3ODA3NywKKwkweDMwYzk4ODU0LCAweGYxNzliYTFlLCAweDc0MTJlZWNmLCAweDFmYzhkYmFiLCAweGZjZjJiYjJhLCAweDEyN2I3NzA4LAorCTB4MDVjM2JiODcsIDB4MDZiYTIwNzgsIDB4M2NiMTdiYjgsIDB4NWQ1NGYwNDQsIDB4OWY1MGNlMWMsIDB4MTVlNDQxZTMsCisJMHg3ZTI2N2I4NCwgMHhiODAwZjhlNywgMHg4NzFmOGRmNywgMHgwNTgyNzBmMiwgMHhlNGQyNWFjZSwgMHgyM2ZiODMwYiwKKwkweDEyNGI3ZjdjLCAweGJmMGQxZTdjLCAweGFmYmY4ZDI0LCAweDZmNzdmMDZiLCAweDg4YjU3MWZhLCAweGVmMTZhZWI3LAorCTB4NTExYzIyMjcsIDB4ZTAwODc5YWYsIDB4NGYwZTM0YzMsIDB4YzhhNDdkZmUsIDB4MTY0ZDI4ZmIsIDB4ZTAzNTdmZjYsCisJMHgxNjFmY2IwMSwgMHgxOWMyMTBmYSwgMHg3M2M1MWZkMywgMHg1NmM5M2NmYiwgMHgzODQ1NGZiOSwgMHhmMmVmZTFmNSwKKwkweDFiMTBhNGIwLCAweDY4NzhjZDk4LCAweDg1YTVmZTJmLCAweGM2ZjMxNzk4LCAweDRhZDdhZmY5LCAweDQ0YWViMjNmLAorCTB4N2RlOTAzYmQsIDB4ZGQ2ZGU5MTgsIDB4Y2YwZGFhYWIsIDB4NTdhNWU0M2YsIDB4Y2I2N2VlNTksIDB4NWU4OWZkYjMsCisJMHg0MjQwN2Y4MiwgMHhjMTNlZTZiZCwgMHg1ZTkxNmI4NywgMHgxZWRjN2U2OCwgMHhlMGU4Mjk1ZSwgMHhlZWZlZjE2ZSwKKwkweGVlN2U4MjNkLCAweGEwZmNmYzE3LCAweDdlM2UzNzQxLCAweDc0Y2Q2NDNmLCAweDk0OThjNzFlLCAweDIwZWYxMzYxLAorCTB4NGUzOTk4NDYsIDB4YzBkN2QxMzAsIDB4ZDkxNzk4MzQsIDB4ZTk0YTVlMzYsIDB4OGVmNjRiOWQsIDB4N2UzNmY4OWQsCisJMHg3ZDIzZjMxNCwgMHg2NzczYmUyNSwgMHg5YjQzYmY5OCwgMHhhMWY1MGZkNywgMHhkOWRkZTM0NCwgMHgzOWM0ZGU4OSwKKwkweGEyM2QzMTc0LCAweDY1MjBmNzg4LCAweGM0YjY0ZjZlLCAweGRhYjVkZjdjLCAweDdlODFkZmI3LCAweDEzZTZkZTk5LAorCTB4YWZhN2YzZWYsIDB4NmJlMmYxODQsIDB4ZjU0NzY0ZGQsIDB4NTljZGU0MGQsIDB4MmQ1Nzc5MDgsIDB4Y2IwYzU1ZDgsCisJMHhjMTcwN2NiOSwgMHhmNDRkMGJiYywgMHg1ZjhiZGYxMSwgMHg1OTVkNzU0NywgMHhmNjRhZjQ4MCwgMHhhOTNmYTQzOCwKKwkweGY4NDRlYTFkLCAweGU4YmRhYzAyLCAweGNkNDg3YWJmLCAweGMxZmI4N2ViLCAweGZkYjE4OTQzLCAweGI5ZTJiMzcwLAorCTB4NzU5M2M0YmYsIDB4YjA5ZmM1YTksIDB4M2I1M2Y1NGUsIDB4ZGU1NWEyN2QsIDB4NDNmYjEzYWMsIDB4ZmU1NmE5OWYsCisJMHhjYjgzZjYzMCwgMHhjNTlmN2Y0NCwgMHgwZjE0N2UwNywgMHg2ZTcyOTY3NCwgMHhhNGNmYzkyYSwgMHgwZmVmNjM2YiwKKwkweGMyMTZhYWQ1LCAweDQ3YWEzOWY3LCAweGU1MGViZTczLCAweGVlNmY1YzZiLCAweDlkMTg3NzIxLCAweDhjMGQ5YzgzLAorCTB4MmZmZTg4ZDgsIDB4MzM5NmJlODMsIDB4OGM0MmU3MmUsIDB4YmFjNjkzZWIsIDB4M2VmNDg2N2UsIDB4OWQwMWY3MDIsCisJMHgwMWY3MWVlOCwgMHgzNGMzY2JjYywgMHg1Yjk0OWJhMiwgMHg1ODdmZTQ2YywgMHg1ZWVjZjgyNSwgMHgwNDZiNWZjMSwKKwkweDdjODAzZDVmLCAweDgxZGYwMjM1LCAweDEzZmE1MWY2LCAweDkwZWI0ZmMxLCAweDEyZGQyMGZmLCAweDc4ZjVjZTlmLAorCTB4NjE5N2JlZjEsIDB4OGM3NzJjYzcsIDB4YWIxY2Y3YTUsIDB4MGZkYTM2NWQsIDB4NjFlZDc3OTQsIDB4ZmIwNWRhMTcsCisJMHhmN2U4ZWJjNiwgMHg3YTU5ZGQ5MSwgMHg1OWU1OGRjMCwgMHg0M2MwM2YwZSwgMHg5MWQyY2M0YSwgMHgyZjczM2U1ZSwKKwkweGUyYWJlOGI4LCAweGY0ZmQwMTViLCAweDcyYTJiMGFlLCAweDk0OWVhNDdmLCAweDQ1MWZkZWM3LCAweDllZjQ1M2E3LAorCTB4Y2I1ZmFhODAsIDB4NzBmZDNmZDAsIDB4ZTExM2E1NTIsIDB4OGYzYzcwZmMsIDB4Y2ZjZGFhZDMsIDB4M2UwM2I4MjYsCisJMHhlMjliYzViNiwgMHg1ZjY3NTJhNSwgMHgxZjFlZjVkNSwgMHgyZjcwZmY3NiwgMHgxMmVjMTJlZiwgMHgwYzBkODJmMiwKKwkweGY5MjY2MWIxLCAweDdiZGUyYjUwLCAweDFiMTBkZTY0LCAweGNiMTM5MjY5LCAweGY0MzJlNzg3LCAweDBmOTRmNWViLAorCTB4Y2RjYmM4YmQsIDB4OTBhZTVlNWMsIDB4NDM0YmNiNjIsIDB4NjVlNDM3N2YsIDB4ZDIzMTVjYjQsIDB4Yjc0ZDE3OTUsCisJMHg1ZDU0YTdkYywgMHg2NmYyNDYzZSwgMHhjMWZmNmM2NCwgMHhmY2VkZTNlZiwgMHhmM2U2NmExZCwgMHgyY2Y3YTdlNSwKKwkweGRlZmQ3ODA3LCAweDgzZDQyZjBjLCAweGY3YzU3ZjBjLCAweDVhMjdhYzYyLCAweGNhYjg5ZTNlLCAweGY0MDM1N2Q4LAorCTB4Y2QwMmQwM2UsIDB4YWZmOGYwZmIsIDB4ZmJhZDU3ZGMsIDB4ZDViOWUxNDEsIDB4OWMxNDBmYTQsIDB4YThiNGExY2IsCisJMHgxMWYxM2E3NiwgMHg5MzE4ZDNjMywgMHhmZDdjN2M5ZCwgMHhkZjg4M2QwZiwgMHg3Y2UyYjVlMywgMHhjNjFhYmQ3YywKKwkweDFiN2RhNGI4LCAweDBlNjA3YWVmLCAweGUzYzE3NWMwLCAweGUzOGY5ZDMyLCAweDE0ZDkwZDNkLCAweGJjYjJjMmRmLAorCTB4ZWYxYmE3YTQsIDB4ZGYwZjFlMjMsIDB4MzFjNzMxZWUsIDB4ZTlkNGZjMTQsIDB4MzdiZmZkNDcsIDB4MWY1ODJjN2EsCisJMHg4ZDUzN2ZkYiwgMHg4M2JiNDRmZiwgMHg1ZGEyNDZmOSwgMHg2NzVkZmEwMSwgMHg5ZmJmZjUwNCwgMHgxOGRkZTkzOCwKKwkweDE4ZGExZjIzLCAweDhmYzczM2VmLCAweGYxNWJlOTE4LCAweGRjMjFjZWQzLCAweDMzZjc4YWRmLCAweGFiOWRkMjE3LAorCTB4ZjRkNzlkMGYsIDB4ZGM3YzE3Y2UsIDB4YzczM2U4NjMsIDB4NDU0N2QyNzMsIDB4N2RjMDM1OWMsIDB4Y2E3ZmM1OTYsCisJMHgwOThmNDljZiwgMHhmNDczMTg3ZiwgMHhjYTI3MWU1MiwgMHg3Yjk0YmRiZCwgMHhkMzEzM2M3OCwgMHhkM2ZmOTc2MywKKwkweDNkNTFhNDdlLCAweGI4MjFiNGVjLCAweGQzZGFmMmZlLCAweDJmYTVkZWFiLCAweDYyODBmM2Q2LCAweDYwYmRjNzExLAorCTB4Nzk3ODdjNjMsIDB4MjA1OWJlMGMsIDB4MTAyZjA3ZWUsIDB4N2QwNjVkZTcsIDB4ZDBkZjdmMTUsIDB4NDY1ZDM5YjMsCisJMHhkNGY0YWRkMywgMHgxZmE3NDQyNSwgMHg1ZmM5NTQxZiwgMHg4N2Y0MDE1YiwgMHhkNGY0OTg3YSwgMHg2OThmN2E3OCwKKwkweDNkOTcxM2Q5LCAweGY5YzAwYjc4LCAweDk1MzI0MzkzLCAweDEwNzM5ZDk3LCAweDg3ZmZiNjVkLCAweDNiZmNlMjhmLAorCTB4ZWZkMmFiN2YsIDB4NzA3MjdjMjYsIDB4YjdlYmM1MWEsIDB4YmI5ZWY3OGIsIDB4ZWRjNWNlZjgsIDB4NWM1YzFiZGEsCisJMHhiYjljMTRhZSwgMHg4YmJiZTg5NywgMHgzNWYzYzJhZSwgMHg3MzgyZGJlNCwgMHg1NjVlOTAwZiwgMHg0ZWJkZWY4MCwKKwkweDc4OGY3NWMwLCAweGU4MjI5Mjc5LCAweDFmYjYwMjc3LCAweGVhMWNiYjkyLCAweDNlNzJiNjE1LCAweDE1NDMxMzYxLAorCTB4MTBkZThmZTQsIDB4MDYzN2JiZWYsIDB4ZjJlMGRmM2YsIDB4MGI0NWUyNWEsIDB4ZmY1MGQ3NWIsIDB4MjRjM2Y0MGMsCisJMHgwMmM4NWM1MywgMHg4NTA3ZmJmMSwgMHhlNTg0Yjg3OCwgMHgyMWE1ODg3YSwgMHhkNmY5MDhkZiwgMHg3N2Q2ZmY0ZCwKKwkweGQ2OWRkYmIwLCAweGMyZTkxYTc1LCAweGIwNGU3NWFlLCAweGViZGQ2MWQ4LCAweDczZTcyZWZjLCAweGI2MTQ2ZmExLAorCTB4NzU3OWYwZTYsIDB4ZTNlN2U3YWQsIDB4N2JhN2FkNjMsIDB4N2RhOTEzMWQsIDB4ZjFlYzYyN2IsIDB4MWZlMzE3ZWYsCisJMHg5YmMyMmFhYiwgMHhiYzQ0YWM1YiwgMHhiZTEwNWJiNywgMHhkNWY3YzM1ZCwgMHhmNjI3ZDYwYSwgMHgyYWViNGM5MSwKKwkweGM0YjUyZGFjLCAweGU2ZDQxNTJiLCAweDg1N2FmYmQzLCAweGRiYjVmM2ViLCAweDE3NTNmYjRjLCAweDk3ZmU0MjVlLAorCTB4YzZlYjBkMjcsIDB4MmU2YmZkY2IsIDB4YWVhOGJjMjMsIDB4N2U5MTNiYmMsIDB4N2M1NTNkOGYsIDB4ZWM1ZTdiYzcsCisJMHg4NGU5ZTM5NywgMHg0OTUzMWExNiwgMHg0Zjc2ZWFmMiwgMHhmNzRkZmJhYywgMHg1NmE5ZTM0NywgMHg4MGVjMDllMCwKKwkweDBjOWUxMzJjLCAweDNmYjc0NGZjLCAweDhlZmNiOWI2LCAweGUyMWNmMGY3LCAweDUwOWFmZTExLCAweDBhMmJmMmVmLAorCTB4ZTFiMWU5N2YsIDB4ZDdhMGE0ZjcsIDB4MDQwZmEwNjMsIDB4ZGY3ZTA4MmUsIDB4ZjVjYmM0YjIsIDB4NmY4MTNmMGEsCisJMHg3N2M2M2UwMywgMHgwOGMyZTdkMCwgMHgzNzkxMjdiNywgMHg0ZTNmYjE5MywgMHg1YjgzZTcwZiwgMHgxZTgyZjhmNywKKwkweGNmNWVjNTI2LCAweDU5ZWI1ZDZiLCAweGM3YTA0MmNhLCAweDNlYjhkNDljLCAweGVlN2FmYmQxLCAweDA1YzcyMTYyLAorCTB4NGY4YmE3YWMsIDB4ZmE3YzJkZjMsIDB4Mzg1YjlhZGEsIDB4OWZmYzBhOWYsIDB4ZDEwZjdmZGMsIDB4YmM3MGIxZjUsCisJMHg3YTU0ZTMwZiwgMHg0ODZiY2Y1YiwgMHhkMDYyZTMwNywgMHgxYjEwYjBjMSwgMHg4ZjdmZmQ5NSwgMHhmZTY4NGUwZSwKKwkweDNlZTA4ZjExLCAweGVlMTVmYjAyLCAweGRlNGZjNWQzLCAweGJmM2NjNjNmLCAweGZkMjdlMmI3LCAweDlhYTVmNjllLAorCTB4MGVhNzNiMGIsIDB4ZjQxZGY2NGQsIDB4ZmIyNzdlZDIsIDB4NDM0OTYxYWEsIDB4NjMzZjgxNWQsIDB4YTNjZjEyZmIsCisJMHg2ZTlmYTE5ZiwgMHhjNmNmZTI0NSwgMHg1NzhiZDJjNCwgMHhjNzJlMDU1NiwgMHhhYWVhOGJmMywgMHg4ZmQxY2JhMiwKKwkweDk3M2QwYWFhLCAweGNlOWI5ZWExLCAweGQ2MjMxNzdmLCAweGNkY2M3ZDdiLCAweGFhYjJiYmYxLCAweDk4M2ZjZTkyLAorCTB4OTRmNGM0MjMsIDB4ZDgwMDc3ZWUsIDB4NDdmMjRjODksIDB4N2VhYjJlMmIsIDB4MWQwMWE5YTYsIDB4Nzg5YWRmZmQsCisJMHgwMjU1NDBhNywgMHhkMGIzZDNhYiwgMHgxMTk0OTQ1ZiwgMHgxZmVmYzEzMiwgMHhiMmVlN2UyZSwgMHg4ZWJmNmQyNiwKKwkweGU4NzYxYWU3LCAweDhlNjBmZDFmLCAweDhiNTljYTgxLCAweDY1NDVlY2ZmLCAweDkzYzA1ZjQxLCAweDFjNzMxY2YxLAorCTB4MTI0YmYwNmIsIDB4NDZjZjEzZjksIDB4NWFjZjEzZjksIDB4ZjMwNDkxZTYsIDB4NWIzYjBhZmUsIDB4MWNlODc4NzEsCisJMHg4ZmMyNjE1MiwgMHg1ZjAxZTAyYywgMHg1YmJiMWY2OCwgMHgxZTVjZWJlNywgMHg2MDdkMjFlZiwgMHhiMjM2NDVkNSwKKwkweGZmMDlkNmViLCAweDJmZDBjZmY0LCAweGU4NTE3MDRkLCAweGUwYzMwMWJjLCAweGMwOTZiZWIwLCAweDczYzRlMWQ3LAorCTB4YWRlZDE5MGMsIDB4ZjhkZGU1MDgsIDB4NGY0Yzk3NjIsIDB4NGY5ODRhMWYsIDB4ZjMwOTVlNjQsIDB4MTU2NDU5N2QsCisJMHg5MzFkMGZkYSwgMHgzZjIwZWY1YSwgMHhlNjkwMzNhMCwgMHhkNjdlYmMwNiwgMHg4NGIwZTVhZiwgMHg4MTc5MTJlNywKKwkweGI1Y2UxMThiLCAweDBiYzMyODcyLCAweDc3MjE3ZmY1LCAweGMxYmQ2MDY2LCAweDFmNGVmNDUwLCAweGY3ODQ1ZTllLAorCTB4ZjNhNjAyMTIsIDB4OGViNDIxY2UsIDB4MzNkY2JjZWUsIDB4MjU1MmQxN2YsIDB4NmZlZmZjZWEsIDB4NWZjYjliMTcsCisJMHhjNjJmZmE3MSwgMHhmOTNiNTQ3OSwgMHgxZjQ5NjBmYiwgMHg1N2JlNzQ0OCwgMHg5NGVlNzVkZCwgMHg2NGYyZmI0NywKKwkweGQxMjNjNzM3LCAweDQxZDVkMjA1LCAweDU1OWQzN2FlLCAweGM4N2QwOWJjLCAweGYzMzIzZDlmLCAweDdjM2NjYjQ1LAorCTB4ZWMyMmJjOTYsIDB4NTNhMDNhZDEsIDB4ZTgzMmE3M2MsIDB4YjdlMjk4NjMsIDB4YWYwZDFkMjEsIDB4M2M2NmVmODEsCisJMHhmYjc3ZDBjNiwgMHhmMDc5ZThiOCwgMHgzMWI5ZmE5OCwgMHhlODk3MTgzZiwgMHhjYjk3M2U1NSwgMHg3YTI4ZTNmNywKKwkweGY5ZjEyZGQ4LCAweGRjZWQ4YTg3LCAweDE5MjE2NDZlLCAweDIwYzczYWYxLCAweGNmMDU2NTNjLCAweDhmZTMzMjI3LAorCTB4OGQ3N2I1ZWMsIDB4ODJiNjI3NzMsIDB4MGI5ZTc1ZTcsIDB4YjljZmM2ZGUsIDB4YTczM2U3YTMsIDB4M2MxNmVlZjksCisJMHhkY2QzOTllZiwgMHg3YjllM2U2ZiwgMHhmOGJhMjljZSwgMHhhYjc3NGM0MywgMHg1MWUzZmI5ZCwgMHgyMjUwZmM1ZSwKKwkweGI3YTZmNjdkLCAweDIxZTM1NDVlLCAweDQ2ZTZmMWRkLCAweGFlNjA5ZjdhLCAweDczYmZlZjliLCAweGY4OGFhNzU5LAorCTB4ZTM1ZDMwMGYsIDB4NWE2MTU2ZTcsIDB4MjdjYzZkZGYsIDB4ZmEyYTBkZjIsIDB4ODQ4OTZlMWQsIDB4NzIxYWI4NmYsCisJMHhiZTE4YmViNywgMHhiOWJkZDUxYSwgMHg0MjVmM2IwNywgMHhmNDFhMDViNCwgMHgzMjFiM2E1YywgMHg1ZWY5MzVkYSwKKwkweGFlZGU3OWU2LCAweGYxNGUwZTBiLCAweDgzOGE0N2ZiLCAweDZlYmRkNWQ2LCAweDU4YzFjMTA3LCAweDdjMjRkNDI3LAorCTB4YmM0OWMxNzQsIDB4YTVjMDY2Y2YsIDB4MzdmMWRkNmIsIDB4ZjhmZTg1NWYsIDB4MWNkY2U0ZGUsIDB4NzkwZmU4YzcsCisJMHg1NzlmM2M5YywgMHhjMTNlOWMzNCwgMHgwYjkzOTAyMiwgMHhiOTFmZmVkZCwgMHhiNzdhZmNhMSwgMHhjYjRjMmVmZiwKKwkweDk1ODM5ZDFjLCAweDU1MzdjNDIxLCAweDAzOTBhZjk4LCAweDFjMDBhNTE3LCAweGI4MTQxYTNlLCAweGQxZTExOTM4LAorCTB4ZjQ4MmY3ZDIsIDB4MmU0ZWMzZmUsIDB4MWJhNzBlMGYsIDB4MWJhYjZkN2EsIDB4YzhiZDliZTksIDB4ZjdlMzVhZjUsCisJMHgzOGVkNTYzMiwgMHgwMDhkZmY3ZSwgMHhlNTVlOGY5ZiwgMHhjYjk1Y2RlZiwgMHgyMmVlNmJkZSwgMHg2MmNjYjJmZiwKKwkweDdhNDYyMWQ5LCAweDFlMGRmODU4LCAweDdiYzRkYjc2LCAweGYzOWQ3Y2QxLCAweDc5ZWYwZTE0LCAweGNmNzRmMThkLAorCTB4ZDk1MmRlNmUsIDB4YmNmZGJlZjIsIDB4OTU3ZTNjYTUsIDB4YWU2MzJkMjksIDB4MmIwOWQ4YjcsIDB4ZWNmNzVkMDQsCisJMHhkMTFhZmQwNywgMHgzYTVmY2NmZCwgMHhkOTJkZGU5OSwgMHhjODkzZTlhOSwgMHhhNzM4ZjFjZiwgMHhmZDUzZjliMywKKwkweDRmZmRjNjMyLCAweDFmOTEyZDU4LCAweDZmNTFmYzY5LCAweGU3ZTQyYjUzLCAweGM4N2QxMzg3LCAweDVjZWZmM2FlLAorCTB4OTdlZjg5OWMsIDB4M2Y3MGI0NTQsIDB4MjhiY2FhNjcsIDB4N2QyMDNmZTMsIDB4ZWZkZjNmNjgsIDB4ZTEwOGJmMzEsCisJMHg1ZDdiZjJlNCwgMHgzNjlhZjNhNiwgMHg0NzQzMzJiNSwgMHhlNWQ1YmU3YSwgMHg3ZjkwNzk0NywgMHhjNDVkZmZiZCwKKwkweDMwZTdlMWE3LCAweDQwZTdkZGY2LCAweGNlMzhjMDBmLCAweDM5YmM1YmZjLCAweDBkZjkxZjQ4LCAweDBlYTUzZjRlLAorCTB4NWM4MWM0YTYsIDB4MDM5ODU3Y2IsIDB4Mjk4ZDU0ZDMsIDB4OThlMzRjNGUsIDB4ZTVlY2QzMDMsIDB4OWRhYTdmNDIsCisJMHgyNzgzZmE0NSwgMHhmN2MzNGYyNywgMHg5ZjliZjNjNCwgMHgxN2RiMTRmYywgMHg5MjdkOTEyYSwgMHg5YmYyOWU4OSwKKwkweGVlODJmZDVmLCAweDI4ZjNmOWMzLCAweDViNWJmNzRlLCAweDM5ZGQ4YjM0LCAweGZmOWFjMWJhLCAweDlmMzU5Mzc2LAorCTB4MzNlNmIxMTEsIDB4MDNmMzVhMGYsIDB4N2QyNjZkNzAsIDB4MWUxZWZmNzMsIDB4OWE3YTUyOWYsIDB4MWU3ZGVmZGYsCisJMHgzYzIyYTA2MCwgMHgzZTQ5ZDliNiwgMHhjZTZkMjk0ZSwgMHhkMzg3NzhjNiwgMHg1ODZkYmI0ZiwgMHhkY2VmZmJiZSwKKwkweGVhZGNlZWVlLCAweGY3MjU3N2E0LCAweGUyYzcxN2JkLCAweDZhMWRmMDkyLCAweDNmMmM0NmU3LCAweDhkOTBkNzFkLAorCTB4NGZhODQ1ZmUsIDB4YmJiMDRiNzEsIDB4NzFiYjQwOGUsIDB4YmQwNmE1ZTcsIDB4NjliZTI5ODYsIDB4ZmRmODNmZTcsCisJMHhmNmFkY2U5NCwgMHg5YzUxYzYzMCwgMHhkM2U0ZjVkZSwgMHhiN2E3OWY0OCwgMHhlYzdkMjAwZSwgMHhjMzY0Mjk3OSwKKwkweDcwZjc0MzdlLCAweGYzODg0ZmZjLCAweGU5NTRlNDU4LCAweDdlM2RhYjE2LCAweDFkMDFlODQyLCAweGU4NzliNTI3LAorCTB4ZDZiOGJhMTcsIDB4YzI0YmVlYmEsIDB4YThhNzdjZDYsIDB4N2QzMzFiN2YsIDB4MTBmOGM3NGYsIDB4ZGMzNGFhZWYsCisJMHg3ZWM1Mzc2NywgMHhjMTczZmRiZiwgMHhhNTNkNGYxNywgMHg4YjJiNzQxOSwgMHgzNzk5MWVmNywgMHhlMmJlZmJhNSwKKwkweGRiNzNlZWVlLCAweDhlODAwMzI1LCAweDQzMTYxMTRhLCAweDQ2OTdiZmJhLCAweDBmODVkYjhkLCAweDM4OTI3ZmQxLAorCTB4YWRmY2ViMmYsIDB4NTUzOWYwNGMsIDB4ZWY4OTY0NTUsIDB4YWFmYmQyZTgsIDB4NGQ1MzY5N2MsIDB4ZWQ0MTUxZmIsCisJMHhkMjdjOTRiZSwgMHhkY2E1Zjc1NywgMHhjYTY3ZGE2NiwgMHhiOTQ4MWViNiwgMHhkYjZiZmExOSwgMHhlYmVmZDBhMiwKKwkweGUyNzljZDk1LCAweGY4NDkwOTgxLCAweGY5YzA2ZTVkLCAweGU3ZmEzOTYyLCAweGYyNWUxYWRhLCAweDhiZDAzZDYwLAorCTB4YmRlMzlhYzcsIDB4YTVjNzZiMGEsIDB4ZTlmMTM1NGQsIDB4ODM0YmE1ZDcsIDB4MGU3NGNhOWYsIDB4NWE3MmU3OWYsCisJMHg0NjFlZjE3MiwgMHgxZGZmMmQ2OSwgMHgxYjg2ZDJiZSwgMHhlMTFhYmJhZSwgMHg0ZmRmOWViZSwgMHg5ZTU4NTZjZiwKKwkweGI2NTNmYzBjLCAweDhmZWY4NmZkLCAweGM3YzFlZjg2LCAweDNlNzBmOWM2LCAweDJkMjRmOGQ5LCAweDNmYWRiYmRlLAorCTB4ZWU3NmY3NDMsIDB4NDRmZjcxYjUsIDB4N2I0NjVjMzQsIDB4ZmRlZjdlMzgsIDB4ZTUwOGFiODEsIDB4YTJmN2Y0MTIsCisJMHgzZmI1MmM2ZCwgMHhlNDdkMDM2OCwgMHg2YmQwZTRjNCwgMHhkMzk1NDMzNywgMHg1NzBmZTFhYywgMHg5NTk2NWM1MywKKwkweDI1M2U4MDllLCAweDM3M2FiN2Q0LCAweGY0OGRiZTRiLCAweGI1ZjY3OTc1LCAweDk3ZmI1YWE4LCAweDk0M2EzYzUxLAorCTB4OGEzN2I0YzcsIDB4YTI3ZWQ2YzMsIDB4NDdhNTdjZjEsIDB4NjhmNzdlMzIsIDB4YTI1ZTk5YTQsIDB4MTE5ZGY1ZWIsCisJMHgyYWI3ZGZhMiwgMHhjZDcyMGE1YiwgMHgxZDk3ZWZhNCwgMHhkODc4YTFhZCwgMHgxOWM4NzFlOCwgMHhjMTNiOGE2OCwKKwkweDdjNGJkMWZkLCAweDAyN2ExNGVjLCAweDIyZDkxYzkzLCAweGNmMjg3YzVlLCAweDQ4YTdiYmQzLCAweGE1MTA0MDk3LAorCTB4NWVhOWIyOTcsIDB4NmNiNWViODQsIDB4NGJjZmE2M2EsIDB4OTk2NDA3OTEsIDB4MzNmMjAzY2IsIDB4NzkyNzhiNmQsCisJMHgzZWI3YTZkMCwgMHhhM2E0NzNmMSwgMHgxZTc0ZDFmYSwgMHhlZmRjNWZkNiwgMHhlODQ2ZjM2ZSwgMHg3N2UzNThiZCwKKwkweDllNzRkYTcxLCAweDUyNzY2OTJmLCAweDhmZTlkNTNjLCAweGNiOTc5MjM0LCAweGViMTM4ZTMwLCAweGQ5YjRlZDNmLAorCTB4YmQzYjVmNDAsIDB4OGM2NGVmYmQsIDB4ZTA2YjZlMGIsIDB4NmE5ZjhhZWYsIDB4ZmI1OTNiZTgsIDB4OWEzN2ZkOGEsCisJMHhmMTdkOGRlZiwgMHhkZjEzZmUwOCwgMHg4YmY4ZjU0ZiwgMHhhY2RmYjgzZCwgMHhhOWQzNzFlMCwgMHgyYTMzMmI3ZCwKKwkweDY4YzllMDYzLCAweDY2NTVhNDk3LCAweDc5ZDJiZGEwLCAweDkxYjdjYmFiLCAweDBhZTk1M2ViLCAweGM4ZDNkZGY5LAorCTB4ZmMyZjkyYWYsIDB4NzllOWY3NDksIDB4YmVhMDc4NzcsIDB4ZTFmYWVhMWIsIDB4ZTUwNzNlZmYsIDB4ZmM3N2U4OGQsCisJMHhhMWRkZjY0MCwgMHgxZjNlZWQwZiwgMHhhMDE1OTA1ZiwgMHgwM2Y0ZTNmYiwgMHg3Y2ZlMzAzNiwgMHhhMDE0NDU4NSwKKwkweGFmYjhmOWI3LCAweGM5M2NhMThjLCAweDI1ZWJmOWNmLCAweGIwNWMyMzhhLCAweDdjMWViYWM2LCAweDFmYmNkYWU3LAorCTB4MjkyZmUxMTYsIDB4YjBiOGM1MGUsIDB4ZDY4YjRhMDYsIDB4NzE4YmNiNWIsIDB4YmM1MGYwZmYsIDB4OTRjYmM1MTcsCisJMHgxOWNiNTlkNCwgMHhhZDFmOTA4YiwgMHg3YjRiZmVhYywgMHhjYTdkYjgyYywgMHg2YmY5ZjU4YywgMHhhM2I5MTYzYywKKwkweDUwZjlkYzkyLCAweDk1ZjVhM2NlLCAweGQyMDAzN2EyLCAweDFjZmVjNDliLCAweDZkMjczM2JjLCAweDRiMWRhNDAxLAorCTB4YzgyZGE0MjcsIDB4N2NlZTdiYzQsIDB4OGVkMzIzMWYsIDB4OGZiZjk4ZjgsIDB4NDU5NTNhNTcsIDB4NzE3N2YxMDYsCisJMHhhNThmZWUxOCwgMHgzNDY0NTJjZCwgMHhlNDJjMWRlNiwgMHhlM2JmY2IxOSwgMHg2ZWI4MjBmYiwgMHg2MzMxM2RmMywKKwkweGYzNWViOGRkLCAweGM3MjZmNjc3LCAweDEwY2Y3MWFiLCAweDJmMmU2YmQ3LCAweGFiMjg3MDEzLCAweDNhZmM1YmI3LAorCTB4OTBhNWVhMTMsIDB4N2Y3OGRiZmIsIDB4NTVkYTk1YTksIDB4Yjc2OTdlMzQsIDB4NWZmNjJiZjQsIDB4MTM5OWI3ZDgsCisJMHg2OGExMzVmMCwgMHg3OThiOGM4MywgMHg4NzhlNGJhOCwgMHgwZjc1ODkyZiwgMHhkZjgwYjBlNSwgMHhmNDE0Mzc0MywKKwkweDEwN2Q3ZTQzLCAweDAyZmVjZmY1LCAweDlmMjQzOWMwLCAweDQ1ODA5Zjg0LCAweDVjNWUzMDFjLCAweGNhOWU1NzY2LAorCTB4ZmNmMzk3YjMsIDB4OGFlMDRmM2UsIDB4YWY2MDgxZGEsIDB4ODczYTAxYTksIDB4YmRlNzJmOWEsIDB4NDcxYmY3OGMsCisJMHg0MjVlMDYyNiwgMHhmOWI3Y2NiYywgMHhiN2M0MmIwNywgMHgxN2U0MTFmZSwgMHhmMGUxY2E1ZCwgMHg0YmNhZDhmMCwKKwkweGM1ZDk2MzJhLCAweDkzM2ZiZjAyLCAweDNlNWNlODFhLCAweGEzZWY4YmI0LCAweGQ1NGVhY2VlLCAweDhiZmVmN2VjLAorCTB4ZmIwOTQ3OTAsIDB4NGY1ZWU5NWIsIDB4ZWU4OTBlZTcsIDB4MWQyMjNmMTMsIDB4OGZiNmZiYTEsIDB4Njg2NWU5NWMsCisJMHg5ZTAxYTdjNywgMHgyMjNlZWU1MCwgMHg1ZWY4MTViMSwgMHhhY2UzNTY1ZSwgMHg5ZTIxMmY0NSwgMHg3ODdjZTJiMywKKwkweDM4ZGU1ZmRlLCAweGQxNzcyZTQ5LCAweDE1YmViOWZhLCAweGNmMDFiOTVmLCAweDhkZTc1MjgzLCAweDBlNzQ4YjFjLAorCTB4MmQ3NzllZWIsIDB4ZTNkMGZmN2MsIDB4YjlmYWYxYTUsIDB4OTZkM2RlMzgsIDB4OGYxN2QyODcsIDB4MTZmM2YxYzIsCisJMHgzODdjODRiZCwgMHhhMWVlOGUzYSwgMHhkY2FjMDJhNywgMHg4ZDVkMjg3ZCwgMHhjYjFhNTQ3YSwgMHg2MGZhODdkOCwKKwkweDU4ZWYwY2RhLCAweGU0M2ZiOWY0LCAweGRiMjRlM2UxLCAweDUwYjM3OWU0LCAweGYzY2IxYmNmLCAweGY5MmM3ZTdkLAorCTB4YWUxMTEyMzcsIDB4ZWQ1MjcxYTUsIDB4MTdjZTNhNmMsIDB4ZTg1ZWEzYmYsIDB4Y2I4MjNmNDAsIDB4OTUyOWVmODQsCisJMHhlYTdlMzgxOSwgMHg2OTI2OWU1MCwgMHgzYzBmOGExMSwgMHg5OWJkZTA2NCwgMHhkMTJkZTljNywgMHgyNWU5YzkxOSwKKwkweDQ1NGE0YzVmLCAweDFiNTBlZTNiLCAweGJmMjBkNDE4LCAweGVjMzQwZDBlLCAweGY0OGI4OGNjLCAweDc5MjM2MWYwLAorCTB4MmRmNzYxN2QsIDB4NWZmN2UwYzksIDB4ZmExYjA2OTIsIDB4YTFkN2FmMGYsIDB4NTEzMjEzZmEsIDB4ZjVjMWJlYWUsCisJMHg3ZTVjNGZmMSwgMHhhNjVmNTdmMiwgMHg0ZmJmOGVjNSwgMHgwYTc4ZTA0OCwgMHg2MTYzOGI5ZSwgMHgzODM4ZmY5MywKKwkweDEzZDIzM2ZiLCAweDJjM2NlNzgzLCAweGYwMjdkYTZjLCAweDFjNzM0ZGJkLCAweDdlZDE1OTc3LCAweDcyODQxZGZhLAorCTB4MDFmNzQyZDYsIDB4NzFhYzFiY2EsIDB4YzVjNTk3ZTcsIDB4ZjNhMGQ3MWUsIDB4MGIxYjM5ZTAsIDB4MWUzMjI1ZjUsCisJMHgyMWQ3ZjY4OCwgMHhjMmQ1NzNhOSwgMHg0YjE3YmEyNCwgMHg3M2MxM2JlNywgMHhjNjk5MGIxYSwgMHg2M2ViOWUwZiwKKwkweDMzY2Q3N2NkLCAweGFlZTlmYTg1LCAweDlhZjVhY2M3LCAweDJjN2FhNzNlLCAweGUzODNkNWE3LCAweGI0YWRlYmI0LAorCTB4MjljZjA0OGYsIDB4NmZkOGNlZDQsIDB4OTBiNmMyM2EsIDB4ZWVkY2ZjMGEsIDB4ZTIxZGU1ZTUsIDB4NmZhOGNmM2MsCisJMHg1YjNlZDdmNCwgMHhmOGRlZjcxMywgMHg1NTZkZThiYiwgMHgyZTAwNzgyMCwgMHgyMTlmMzY4ZiwgMHhmMzU5NzQ3ZiwKKwkweDQxOGI4MjNlLCAweDg5ZjBkZDBmLCAweDdjMTMyMTY3LCAweDIyNWJhYTUyLCAweDY5ZWRlMDM2LCAweDdiYjg2ZTBmLAorCTB4Yzk5MGQ4MTQsIDB4ODcxZjA1ZmIsIDB4OWZlZGRkMzYsIDB4YmJmOGU1MDgsIDB4OGViZTI2MGYsIDB4NzNlMmVhY2YsCisJMHhkOTBmMzMxMiwgMHg0MjE3MmU2NCwgMHg5ZDRmNzc3NSwgMHhmYThiY2E2OCwgMHg5YjQzZWQ1ZCwgMHgzNDBhOThhZiwKKwkweGI3OGEzNTk1LCAweDI3YzFlNmJmLCAweDRlNGU1OTVlLCAweGRmMTExYThiLCAweGNmMzgzOWRmLCAweGEyM2JjYTZkLAorCTB4OGZjODJlZjIsIDB4YThmNWU1MzYsIDB4ZjJhOGE0ZjIsIDB4NDBmY2E4YjQsIDB4MWRjZGJmNWUsIDB4NDBmYjJjMTksCisJMHhkNGY4M2ZkZSwgMHg5ZWZiZjgxNSwgMHg3MzIyZmQ2ZCwgMHgzNThmMDVmMSwgMHhmMDJiYjZmMiwgMHhiM2NiN2NmNywKKwkweDU2ZDNlZmY4LCAweGM5M2U0YjM0LCAweGJhMmIzZjI0LCAweGI1NWJmM2NlLCAweDBlMTBhM2Y5LCAweDFjYTMyZjJkLAorCTB4NzQ5MjZiMjgsIDB4MGQ1ZGViZDQsIDB4Yzc5NDIzZGIsIDB4YmI1MzVlNzYsIDB4OTYzZjZlMDYsIDB4NzZhMTFjMzUsCisJMHhkMjNmZjZiZCwgMHhlZjdjN2M0NiwgMHhkZWE5ZjdjOCwgMHhkODlmY2VmOSwgMHg1YmVmZWIwYywgMHg3NTFlNzZmNSwKKwkweDRlMmMwYTQ0LCAweDdmN2VlZTQ4LCAweGRiZmI2ZGJkLCAweDBhMmZiZmRkLCAweGY5ZmJkYmRmLCAweDhkMWM5MDBmLAorCTB4YzQxZTA3YmEsIDB4ZjliYWI4ZjksIDB4YmRlMzgwYzQsIDB4N2JkMmNmMjMsIDB4ZGQxYzdmYjQsIDB4MDNhYTE2ZmMsCisJMHgyY2NlNGJmMSwgMHg5ZmRkYTA1MywgMHg0MzhmOGZjYiwgMHhiNGRmMGI3ZCwgMHg2N2UzN2RjNSwgMHhkYzEyZjg1MiwKKwkweDgxNjUxZThmLCAweDViZGM3MDRiLCAweGMzZWY4N2NiLCAweGFjMzg0YzlmLCAweGVmODYzZWI2LCAweGYwNzg2Zjk1LAorCTB4OTgxNDJiZTUsIDB4ZWI3NzYxZGYsIDB4YjcwOWZjMjAsIDB4ZjA2ZjA5NGQsIDB4N2YyYjcyN2MsIDB4MWRmZjQ1NTEsCisJMHhhMGYwZTdlMSwgMHhjODM2NDFkNiwgMHhhNmMwOTkzZiwgMHhlYjc4N2U1MywgMHgzZDdmOTg2MywgMHgzZmFmMDRlMSwKKwkweGFjOTA3NWJhLCAweGYyNzIwOWEzLCAweGRmOTBhOThhLCAweGY3ZTZjN2FjLCAweDM3YWUwNGRhLCAweDM2OWJmMzFiLAorCTB4ODQ1M2ZmZGMsIDB4ZmJlMzJiMGIsIDB4NzYzMzVlMGQsIDB4NWI5ZDNjODAsIDB4NjZkYjZhNzIsIDB4MWZkY2M3ODAsCisJMHhkYjljOTNjNSwgMHg1NWRkNzZkYywgMHg1MDg3MDQ3OSwgMHhhNjExYzYxZSwgMHg3ZWQzNzgwYSwgMHgyMTVkNzI0OCwKKwkweGVlMWZhMjdkLCAweGYxYmE3ZDgxLCAweGUyZGMxZWU5LCAweGQyZTJmZGE1LCAweDM3YThlZGNhLCAweDQ1MWRjZWE0LAorCTB4YzdhMTQ1ZmIsIDB4ZGRjOWU5MmYsIDB4NTIxOTM4NjksIDB4M2FlOTJmYTgsIDB4OGRiMmViOTcsIDB4ZWY1MjIzZTIsCisJMHhmNTFlOTM3MiwgMHgwMzNkZjhhMCwgMHgwZmEyM2JlMCwgMHgzNmNiYzA5NywgMHgwOTZkOWViMSwgMHg4MGY2YmZkYywKKwkweGYzZjUxYTY3LCAweGM0N2ZlNDllLCAweDQyY2E2MzIxLCAweGM1YTdmMjRlLCAweGYzNzJiZTkxLCAweDIwMmI5MDA2LAorCTB4Nzk4OWQ3ZDcsIDB4MDk3YjViYWYsIDB4NDY2ZTI5ZjksIDB4ZmMyOGYxM2YsIDB4NjdkN2VmZWUsIDB4YmZmZWI3NTQsCisJMHhhZWYyMDMyZSwgMHhkZDZlYmI2ZSwgMHhmMzNmN2YyYywgMHgwZGJhZjZiOSwgMHg1YjkwZGNiYywgMHg3Yjc5ZDJlYiwKKwkweGFkNGFiZjYzLCAweDNlYTRlM2U2LCAweDVjNDZjOTc4LCAweDI4YzJiYzQ3LCAweGVjZTE3YjdlLCAweGQxOTcxYjExLAorCTB4YWQyZDdmZmUsIDB4ZmRmZGY5OWYsIDB4NWEzZjBlZDAsIDB4N2E4NmM0M2MsIDB4YzI5ZjgxYTksIDB4MTI1N2ZlZTEsCisJMHg4OTM3M2Q2MCwgMHhmMDM1ZWZkZiwgMHhiNzRmOGM2NCwgMHg5MDdmNTFlMiwgMHgzYjQwN2Y0MSwgMHhlYjQwMzEzNSwKKwkweDBjNjI3ZDA3LCAweGZhZTA2ZTBmLCAweDMzMTZkMjA0LCAweGFkMjk5N2MxLCAweGZmZmJmMGUzLCAweGZkYjUzODIwLAorCTB4NGZmNGUwMmIsIDB4Yzk0Nzc3OWYsIDB4MGMzNzkwMjEsIDB4N2E1ZjJmZmIsIDB4ZWRmZjcyZGMsIDB4MjNkMTAxM2YsCisJMHg4MDAwNzAyYSwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGM1ZmYwMCwgMHhkNTU0NzgwYiwKKwkweDczM2VmMGI1LCAweDk5OTJiY2NlLCAweDkyNGMyNjY0LCAweDg0ZTNjODQ5LCAweDcxMTAwODQwLCAweGYwNDQ0MzEyLAorCTB4NTE4ODg0MzEsIDB4ZDQ1MDNiNjksIDB4MjA3MTdhZDgsIDB4OTkyNjAyM2MsIDB4NGI2MmQ1YTgsIDB4NzkxMjBjZmYsCisJMHgyMjM0MTgwOSwgMHgwMjgxYzE1MCwgMHgwNmY1NWJjNSwgMHg3MDFhOGM0NSwgMHhhZjdhOGE0NCwgMHhiN2FkOGVmNiwKKwkweGZmN2Y2YzU3LCAweDRhOGY4ODA4LCAweGQyZjVhMjMyLCAweDVhZDdmZDk3LCAweGNlNjRlZjdiLCAweGI2YjRhOTI0LAorCTB4ZGMzZWY5YmQsIDB4ZDljZmIzZWUsIDB4ZDdiNWVkN2IsIDB4ZjZiNWFmNmIsIDB4NGNmNWE2MWUsIDB4ZDhjMDVjMGEsCisJMHhjZTZhMjU2NiwgMHg3YzJjNjRhZSwgMHg2MWVkZjE0OCwgMHg2N2NmMDdmMCwgMHhmN2ZiMTkzYiwgMHg5NWQ1YTBiNCwKKwkweGYxOWZkOGM5LCAweGU2YzYwYWVmLCAweDI3MjliZjdlLCAweDhkZWQwNjU4LCAweDYxY2IxODIzLCAweGNmYmJmNTJjLAorCTB4ZDUwMGRlZDQsIDB4N2EzZjRiYjksIDB4M2Y3YzBmN2MsIDB4OGNhOTdiZjcsIDB4NDNlZjAzZTksIDB4ZjdjMThjOGYsCisJMHg1YjZkYmNlZiwgMHhkMjg0MmVjZiwgMHg3OTM1MTlkMiwgMHhmOTg2YmNhMCwgMHhlZjdiYzA1NiwgMHgyNzQzNTg5OCwKKwkweGJlMGVmN2Y0LCAweDU1NjMwOTdhLCAweDM1ZTViYmRmLCAweGRiYjE5MTM2LCAweDkzNjMyYTVkLCAweGY4YWI1YjE4LAorCTB4MjU4YTk4NzMsIDB4YmJlMGRiMGIsIDB4NjQ0YjJjZjAsIDB4N2Q2MzExNGYsIDB4MGNkODUzMTEsIDB4MjNiODc1ZmQsCisJMHhiOGMxMTc1YiwgMHhmOTk1ZDcxZCwgMHgxZjVmZDBjMiwgMHhlZjg2N2U2MywgMHhmN2E1NGIyZCwgMHg0YzNkZGMzYSwKKwkweDc0NGJmNmMzLCAweDBlYzI0MDE3LCAweDE5ZmFhMTdlLCAweDVhMzdlM2Q0LCAweDc4MTRiYjIyLCAweDc2YzJjZTVlLAorCTB4M2UzMjVmNmMsIDB4ZjNmYTg2MTIsIDB4N2Y3ZDBlMzAsIDB4MGY2NDRhNjMsIDB4OGY4MmNmYjYsIDB4YTM3MWRlYTAsCisJMHhmZTg2MTIzNywgMHg0NzYyMmNlYywgMHhmYTc2M2E3OCwgMHg4YzFjMzI3MywgMHgwNWFjYWFlNSwgMHg4MjI4ZWZlMSwKKwkweDJiNTk5NDNhLCAweDA3MDFjZGQ5LCAweDcxM2ZjZmUyLCAweDBmMDA3Mzk2LCAweDY4OTk3NzVmLCAweDNkOTVhOTNlLAorCTB4ZjQzN2ZmNGYsIDB4N2RkYmQ2YzcsIDB4ZTFiMGEwNjMsIDB4Y2Y2ZjU4YWIsIDB4M2I5OTc4MjYsIDB4NjZmODg1NTgsCisJMHhiODAzZmMxYSwgMHg4OWM4MWZlYSwgMHhjY2U3YzNhYywgMHhiMWViODU1NywgMHg0NzlmZTlkYSwgMHg1NTIwZmZmMCwKKwkweGI2MWZmODQ3LCAweDBhYjYzNWIzLCAweDY2ZDYxNTI4LCAweDBiZmMwMGNiLCAweDQzZmI1ODc4LCAweDM3NjMwYzAwLAorCTB4OTc4MDAwZTMsIDB4ZDY3MGQ3ZmYsIDB4MmJmM2MzYTksIDB4MDdhZDBhNWQsIDB4NTU2ZGY5ZmMsIDB4YmM2N2NkOGMsCisJMHhkNGYyZmU3ZCwgMHg1ODg5OTU3NywgMHgxYTZiNTFhYSwgMHhhNTczNWIzYywgMHhlZjQ2YzdiZiwgMHhlMjhmM2ZiMSwKKwkweDBiZmEwZGE1LCAweDI1YjdmMTMyLCAweDA5YmE0NGVlLCAweGQ4Njk3N2UyLCAweGJhOWRlZmZmLCAweGZkZjBlYjAzLAorCTB4Zjg3NjVjNDQsIDB4ZmJlMDc0YmUsIDB4ZjlhMzE3M2EsIDB4ZmMzOTU1Y2YsIDB4NDc1NTM1YWMsIDB4YzhmYzRhZmMsCisJMHhkN2MyNGViMiwgMHg3MTNmOTBmZSwgMHg3MjRlMzkzYywgMHhmY2JhZjdiZiwgMHgwMGJlMjIzNywgMHgwZjc0ZDFlZiwKKwkweDc1YTU0NWUyLCAweDYzZDc4NjRkLCAweDQzYjA2Zjg5LCAweGQ1NTZkY2ZiLCAweDMzZTAzNzdkLCAweGYzNDljY2I4LAorCTB4OWNkZWYwOTUsIDB4MTU4Y2JmMWQsIDB4NzRmZmVlMGYsIDB4ODY5NTczNmEsIDB4ZTljNjVmZjMsIDB4MDJiNzJkOWQsCisJMHg2MmYxMTJlMiwgMHg1ZDAzYTgxOSwgMHg2M2YxNjQyYywgMHhlNzg4NjUyNiwgMHg4NDQ1ZjQ1YSwgMHhjMjQ3NTE3ZiwKKwkweDJmZGZmNGY3LCAweDQ5ZWY4OWFjLCAweDkyYmE2MTdlLCAweDJiYTBiZjA0LCAweGRkNzBkMTVkLCAweDM3NWYwYTgyLAorCTB4MzczZTI1OGIsIDB4NmUxODM2NTAsIDB4ODJkNWNmODksIDB4MjQ1ZDI0ZWUsIDB4ZTIzNTdiZTMsIDB4N2M2MGQyN2IsCisJMHhmOTNkMmM3YiwgMHg5OTcwNmZkOCwgMHhkYzk0ZjA5NSwgMHhmYTExNjMzZiwgMHhmMDNiMjFlZSwgMHgxNmRkZDAwZiwKKwkweGRkN2EyMTQ1LCAweDY0NmE1NzcyLCAweDNkYTdmMjI1LCAweDE5ZjExN2JlLCAweGFkMTU3YzNhLCAweDE0OTJlZjc3LAorCTB4ZGIyYmMxOWQsIDB4OTQ0MTMwMmMsIDB4OWM5ZDg3MzMsIDB4NGE3YTRiOGYsIDB4NjE3YTlmOTAsIDB4OWY1ODdlY2UsCisJMHg5ZGQ1ZDdkZSwgMHhjMTAyNDU2MSwgMHhlYWViZjM1OCwgMHhkZWZmYTQyZSwgMHhmZGU2YWY2NywgMHgxOWQ1NDhhYywKKwkweDYxODg0M2Q0LCAweGZlMTQzNzE4LCAweGJjMDMyYjQzLCAweDJjYzUzNDllLCAweGUwMTc1ZTM0LCAweGZmMDljMjU3LAorCTB4NDM1ZmUxN2EsIDB4ZThiYzgwYzUsIDB4YmYxYzA2YzMsIDB4OTgwN2NiOGIsIDB4ZTcxYTEyZTEsIDB4MWQ2YzI5ZGIsCisJMHg1MjZjZGI4YywgMHg2ZjY4MjZmYywgMHhiMjNlM2E1ZSwgMHg0MzYxYzM5MiwgMHgyMDE0NmEzZSwgMHg5YjU4OWIzNSwKKwkweGY3YzAzMTUyLCAweDI1MTNhNmNkLCAweDM2ZjE5NWI3LCAweDg1YmJkZTBkLCAweGY3ODE3NWYxLCAweDVmMDAyYThlLAorCTB4NGM3ZDZkYTMsIDB4ZmE0NWJhNDUsIDB4ZDhhNWY2ODcsIDB4ZmY4MDM0NWUsIDB4ZjliZmY1ZTYsIDB4N2NkZmMyMTMsCisJMHg4ZDE3NDhjMCwgMHhiMWU3MTk4ZiwgMHg4YTllOTEzNCwgMHhiNTI0ZTgwNiwgMHhkNTg5ZTM5MiwgMHg4MDE4YzhiMCwKKwkweGE5ZWEyOWQ3LCAweDhhODhiMWI1LCAweGNkNTY1YTc4LCAweDY2ZTkwMjRlLCAweDgxOTllOTFlLCAweGVjYWNlM2Y0LAorCTB4MGNhMWYzNjQsIDB4MTFmY2MwN2QsIDB4Zjc0YTdiODAsIDB4YzI0Njk3Y2UsIDB4NThkYWVlZmIsIDB4YjQzNzRlM2UsCisJMHg0ZThiYjZlYywgMHhiZWIwMzQ1ZCwgMHhiYTRiY2UxMiwgMHg0MWNjYTkzNywgMHgwMDc3ZDFlMywgMHg4M2JmN2Y4YSwKKwkweGZiMzcxYmRlLCAweDZlZjJjNDgyLCAweGE0ZDMyZWZhLCAweGUwZjZiZDEyLCAweGNkMWJlNDIzLCAweDM4YzBhMzlmLAorCTB4MzI4Yzk3OWIsIDB4ODJhNjdhZTEsIDB4YmNiOTQzN2MsIDB4YWVlYzdkYjAsIDB4N2Y2Nzg0MTUsIDB4MDdiN2NhMDksCisJMHgwOWNlODBkMywgMHg5NDJhYmU5ZiwgMHhlYWVlYTUyZiwgMHhiZmEwYmI1ZiwgMHhmZmQ1ZGNhNywgMHgxMzhlMjU4ZCwKKwkweDQ3ZjRlMjcwLCAweGE2NDhiZTkwLCAweDIzYmQ2NGU3LCAweDZlMmVjYmRmLCAweDBjNzE2ZjI5LCAweDE3ZjAxZWZmLAorCTB4MzViZTJkZTEsIDB4NGQwZmNiOWQsIDB4ZmZhMmZhYTEsIDB4NDc1Y2VmMzAsIDB4Mzc0NDY5ZjAsIDB4MjIyZjZkYjcsCisJMHhkYWMwZGM3OSwgMHg1OTFhZGU4OSwgMHhiYmY0ODJjNCwgMHg2OWMyYzZjOCwgMHhlMDhiMTc0MCwgMHgxNzI4NzRiNSwKKwkweDNkMzJiMTZmLCAweDQ0OTZmZDYxLCAweDIxNDZmNThjLCAweDMxNjE2ZTBmLCAweDdkOTZmZWZhLCAweDJjMzVlZDQ5LAorCTB4MjZmNjg0ZWEsIDB4NjJhNjhiMWIsIDB4NmY2YzY5ZDksIDB4ZWY0MTcxNjYsIDB4M2UyNmI2N2YsIDB4YmU3YzFkNjcsCisJMHg3Nzc1OGIzNywgMHgyMGQ0NDRkNywgMHgxZGFiN2JjYywgMHhiZTA2NTc3NCwgMHgzM2ViNGVkMCwgMHg1YTRlZjk2NSwKKwkweDdmMGFmNGNmLCAweDRmYTgzZGQxLCAweDc2ZmIzNTVlLCAweDI3YmVkZDAxLCAweGU3ZTI0YmQ2LCAweGJiZjU1NzVlLAorCTB4ZDUxNGY3ODgsIDB4ZGY4ZmYzNDQsIDB4OWNmYzI1NjMsIDB4ZWI4ZGJkMDIsIDB4ZGQ5YjlmN2YsIDB4ZGVjYTFiM2MsCisJMHg3YTNiZGQ1NiwgMHg1NWM5YTIzNCwgMHgxODM5ZGIzMCwgMHhiMzllZWJjZiwgMHhiOGRkMjAzNywgMHhiN2MyMjZkZCwKKwkweDY1Y2M3ZTdjLCAweGRkZDU3YWE2LCAweDUyMmJmZjAyLCAweDA4OGFiYjIzLCAweDllOTExM2RkLCAweDdkNDk0NmFhLAorCTB4ODJjZTI2Y2EsIDB4NTY2NmJiZmEsIDB4ZTZmNTA5ZDcsIDB4ZWM0MTFkZWIsIDB4MDdlZDA3YWYsIDB4YjliODE3YTgsCisJMHg1YjcwMjhkZSwgMHgyZWIyN2U2OCwgMHgwNmU5MmJlNywgMHg1MmZlYTFjNiwgMHg4NGE1ZTIyZSwgMHhjODViOGM2MywKKwkweDdmODliNjQxLCAweGU2ZWZmNDI3LCAweDQ5M2IyOTI1LCAweGFmZDNmNmZmLCAweDk2ZmQxMTg5LCAweGQ3ODgyYzA1LAorCTB4Nzk1Yzg0ZTcsIDB4MzY5NWNhNGUsIDB4OWEyYjk3MmIsIDB4YTgzMmVlNmIsIDB4OTk0MWY3M2YsIDB4OTVlMDFkNmYsCisJMHg4M2RlODI5NSwgMHg0YTNmMWJlZiwgMHg1ZTllOTFkMSwgMHhlZjVmZThmOSwgMHg5ZmI0MTlmZCwgMHg1YmEyYzBmZCwKKwkweGQyMDE3ZGExLCAweDczZGJhYzE4LCAweDYwNDc5NzBhLCAweDhmZDQzMDdmLCAweDM4ZjZjMDhkLCAweGIxYzFlMzZlLAorCTB4YjQxYzdmNjQsIDB4Yzg0NmZiMDgsIDB4ZTBiNGM2Y2YsIDB4NGZkMDg1ZDYsIDB4M2U5OTkzZTMsIDB4YmNmNjY0YTAsCisJMHg1ZWU4ZjIzOSwgMHhmNzY0M2Y2YywgMHgxYjdlODFlZCwgMHgxYjVlMzg1MywgMHhkZjQ5MWI5ZiwgMHg0ZTBmNjEzZiwKKwkweDczM2NjMzc3LCAweDNjOWY5MWFkLCAweDA1ZTM3MjgxLCAweDY3N2JkOTJiLCAweGMyMTE3NDU5LCAweGFlZDNiNjdmLAorCTB4NzAyNzdiZTAsIDB4NDI1MGU5NWUsIDB4ZWFmMzgyOWIsIDB4MDQzZDkyNzYsIDB4MTBiMzlhN2MsIDB4MzZiOTNiYmUsCisJMHhlMDRiY2Y5YiwgMHgwOTg2ZTRlOSwgMHhjZDliMTdjNCwgMHhiM2YwYmM3YywgMHhjMjdmYmQwYSwgMHgwMzkxOTgxYywKKwkweDk3NGYxM2Y1LCAweDUzNDA1NmZiLCAweGI1MTJjMDVmLCAweGVlODczZDAwLCAweGJkNWU3NmUzLCAweDc4ODFkZjQ5LAorCTB4MDk1Mzg3NjIsIDB4YTExZWI5NWUsIDB4NjI2NzhiOGQsIDB4ZjJlOTY4N2IsIDB4MWM3Y2EzYWYsIDB4ZGU1MWNmOGUsCisJMHhkOWI5MDRiMywgMHhjODA1ZTJjYiwgMHg0NjFhZGI0ZiwgMHg5ZjUxNDY3NSwgMHg5MWYzOGY3NCwgMHg1ODVlNjU1YSwKKwkweDE3MWJhMDdjLCAweDk5OTRmNzdmLCAweGM4N2UzNWUzLCAweGJlN2NmNDRjLCAweGI1N2NlM2ZkLCAweDcwN2ZhZTJhLAorCTB4NjVjODEwOWMsIDB4ZTQ4ZmY5MjYsIDB4MWQ1ZDQyNzIsIDB4ZmVjOGNlYWEsIDB4MmQ5NzNkMGMsIDB4ZmI2MzNhZWMsCisJMHgxZGUwY2VlYiwgMHhlNmJmYTA2ZSwgMHg5ZGU3ZmZmYiwgMHgzOGRmODQ2NSwgMHg5ZWQ2NDVjOSwgMHhjYTc5N2M0OSwKKwkweDc0OGI5ZmVjLCAweDVhODlhZWViLCAweGYzZTgyN2U2LCAweGVhYWY4MjBkLCAweDYzZmVjMmFkLCAweDFmMjI0YjUxLAorCTB4NmFhYWY2Y2EsIDB4NzJjYmRkMjMsIDB4Njc3ZmEwYmQsIDB4YzFmN2NiOGMsIDB4MWZjMTI2ZWQsIDB4MWVhMmI0ZGYsCisJMHg2NjQxYzI5YiwgMHgxYzQ3YTg4NSwgMHhmZDRlYmZkOCwgMHg2YTIwZjk0ZiwgMHhlMTdhODdhOSwgMHg5MTY1YThmMiwKKwkweDAwNGY5MTI4LCAweGNjMWI1MWRmLCAweDI3NTZkNGZiLCAweDAzNDA2ZmU3LCAweDMyNjhiM2Y2LCAweDQ4Yjk3ZDIzLAorCTB4MDJiNWZiMDUsIDB4M2Q1ZGViOWYsIDB4OWZhNzJlYjAsIDB4ZmFmYTczNzYsIDB4ZjAwNTYwMjMsIDB4Zjc4OThmM2QsCisJMHg4MmVmNjBhYywgMHg0ZGE2N2IxYywgMHg2MDdlZTI4OSwgMHgyZWViMTZkZSwgMHhiNWYyMTE3YiwgMHg3YWUyNzU1ZiwKKwkweDhlNDg1NzZlLCAweDU2OWI2YmNkLCAweDRiZWExNWIyLCAweGViNDA1YzBmLCAweGQzOTkzNjlmLCAweDliODhkMmU1LAorCTB4MjExNGUyZjQsIDB4MTFhZGViMWYsIDB4M2ZkZmQ5MGIsIDB4MDFmMjE4NTEsIDB4NzQ3NjRmZjQsIDB4NTM5NDdjMjMsCisJMHgyODBmMTgzMSwgMHgxMGY0MGRkNywgMHg1ZDgzYTg0OSwgMHhjYjkzYTUzNCwgMHg5Y2YyMDY1NSwgMHg1MjRiZDgyNSwKKwkweDY3MWNhM2RlLCAweDkxOWZmNjQ5LCAweDFmNTJjMjNlLCAweGY0YzdiOTcxLCAweDUyN2I5NDZjLCAweDBhZWJkZjJlLAorCTB4YWU0OWI5NzQsIDB4ZjVjNmNlOGQsIDB4NzJlNGY1ODUsIDB4Nzg0MmJmNzMsIDB4YTQyZDYyNmQsIDB4ZTgxZWE0NGYsCisJMHg5MWU4NTcxZiwgMHhlYjk4NmFkMywgMHgyYTI2ZWIyYiwgMHhkMTE3Nzc1ZiwgMHgyNzU5NGI3OCwgMHg1N2E5MTNlOSwKKwkweGQ3ODNhMzg2LCAweDdlMGU4NGJmLCAweGVkMDA3NDg2LCAweGU4YjAxZjhkLCAweGUzNWUzMDY1LCAweDlhNmQxNjcyLAorCTB4NDRlNzRiYzgsIDB4NGY1YzhmZDIsIDB4YzQ5ZWI4ZGEsIDB4ZjQzY2U1MzIsIDB4NGM3ZWIyNjUsIDB4N2FjOTg3ZDYsCisJMHhmNWMyZGIzMCwgMHg2OTY3NWM5ZCwgMHhlNzRmNjRjZiwgMHhlNTk0YzA3NiwgMHhmY2MxOTUxMSwgMHgzZmY5YTYzNiwKKwkweDYwMzQ5Y2NlLCAweGIyZGU4NGQ3LCAweGIxMGJmNGQ5LCAweGUwYTM2MDFlLCAweGQzNjljNWJkLCAweGY2ODZjYTZlLAorCTB4YzhmY2M2OTAsIDB4OTc4MGE5NTcsIDB4YmI3Y2YwOWQsIDB4YjM2YjdiYjAsIDB4MmQ3YmRkMzksIDB4NWFjZDdlOWMsCisJMHg3MDNiOTU4MCwgMHhjZmI0NjI1ZCwgMHgxNzMyNjc4ZCwgMHhlN2M0YTNkMiwgMHg1NzdjMjc3NiwgMHhmZDcxZGY4MSwKKwkweDhkYmRmZmQ0LCAweDdjMjRhNWI1LCAweDlkOWNmZDVmLCAweGNmZTdlYWU0LCAweGIyNTYyMzNhLCAweDZlODU4MjQ3LAorCTB4NTdlYjJmZTgsIDB4N2I1M2IyNTYsIDB4M2U5MjczOWYsIDB4ZDBmYTE1ZWQsIDB4ZDEyOGY2ODMsIDB4NWZhZTJhY2IsCisJMHgyMTI3NWQ3MSwgMHg2NDhmNTUzNSwgMHgzNWNhZmI0OCwgMHg0YTA0NTEyMywgMHhjZGM5YWNmYiwgMHhmNmMxYWNlZCwKKwkweDhhMmY2ODkwLCAweGNhZTljZjVkLCAweGNmY2NmYjRhLCAweDYyNzczZGRkLCAweDY4NjFlMDFkLCAweDU4OGZmZjlmLAorCTB4ZTk4MWQwZTcsIDB4ZTc4N2RmZTUsIDB4YzdjMzgwYTEsIDB4NDcyYzFmYjEsIDB4ZGZhYWI1N2EsIDB4ZjQwNmRlYjksCisJMHgxZTVkNDMzNSwgMHhkMWU2MGJiZiwgMHhhMTcwZWY5NCwgMHhmYzI5YWI5ZSwgMHg4NDZmMmZmNSwgMHhjYzA3ODdmYSwKKwkweGJjZWI4YWNjLCAweDFiMWQ3YTY3LCAweDVkZmNiYzM1LCAweGU4OWYzMTEyLCAweDViOTdlMDQ5LCAweDRkZWIxOWY2LAorCTB4YTg3YWM2OWQsIDB4YzgyZjU4Y2IsIDB4NGY0ZTdhNzAsIDB4ZmJlMWQ5MjAsIDB4ZDViNWQwMzMsIDB4NGVjMWYyZGEsCisJMHhiY2ZhZDc4MCwgMHhhN2QxZjQ5NSwgMHgwNjcxNjBlZSwgMHhmYzUzNWJjYSwgMHg1YWQ5ZTIxOCwgMHhmNDQ0ZjFmOCwKKwkweDNmYmE4NDZmLCAweDAyYjRiMDUxLCAweDM4Y2FjNGVkLCAweDNmYWY5MWZlLCAweDc0MmJjZmI3LCAweDAxYjc4MTBkLAorCTB4ODk5YjMxZmMsIDB4M2FkNjBjZjAsIDB4ODVjZTQ5MmYsIDB4MmM3ODlmMDQsIDB4ODQ1ZjBmZmUsIDB4OWQ5YTJmZjksCisJMHg5ZTliYmFlMiwgMHhhYTRlNjdmOCwgMHg2MDkyN2I0MiwgMHg1NzJkYTE2NCwgMHgyZGZiODg3ZiwgMHhhZTA5NmY3OCwKKwkweGYwNTllOWZmLCAweGIwZDVjMDFlLCAweDQ2YzNlYjg1LCAweGJlNDM0YjE2LCAweGQzYmIwNjZkLCAweDQ3N2M0YjA2LAorCTB4NWI4NzVmMDYsIDB4NTE1NWUyZGEsIDB4OGM4ZWRmZjgsIDB4YTcwODcxZGEsIDB4ODAyZDI3ZjYsIDB4ZmIxYWIxZjQsCisJMHhhZjkzYjA0ZCwgMHhlMDdhZTBjZCwgMHhkNzc2N2Q5NiwgMHhkZDFlMDMyOSwgMHgyYmE4N2E4NiwgMHg5MTJhNzVjNywKKwkweDYxZmM4NGZmLCAweGI4OTY4YTc5LCAweDA5NTc3YTFmLCAweDZiZjg4YjVlLCAweGE2NThmNWIyLCAweGZjNTdmOGMxLAorCTB4Zjc5MjMzZTksIDB4YTdjZDk3OGIsIDB4NWQ4MGM0N2QsIDB4YjRmOTI1NmQsIDB4M2QyMGFlZjgsIDB4ZGYyYjY5N2YsCisJMHg2YWRlOWUxNywgMHhhN2VmMTFkNywgMHhlM2ZkZjNiNywgMHhjNDQ3M2NlMiwgMHg4NTdiZmYwNiwgMHg4YmRiZGI5YiwKKwkweDE5NDUzYmUxLCAweGJjNjRjNzhjLCAweDU1ZjBmZmJkLCAweGY3YTNhNDVlLCAweGRjMmYxZjE5LCAweGY3OGZlZGM5LAorCTB4NjJhZjgwNWQsIDB4ZjdmNjBlZmUsIDB4ZWZkODE3N2UsIDB4YWFmOWUyMGEsIDB4MmUyZTUxMGYsIDB4ZDBmYWFlZGUsCisJMHg5Yzg3NjA0ZSwgMHhiYzU5OGZlNCwgMHgwYjcxY2FmZCwgMHhhN2RmZDgxZCwgMHg1ZmExYTYyMywgMHhlODk1Yzc2OCwKKwkweDAyZjdjMjg5LCAweDg5ZDdlZTExLCAweGI1Y2YwMTVkLCAweDFkOTMxNzFkLCAweDk1YmI3NDc3LCAweGVkYjZlOWMzLAorCTB4ZjE1Yzc5YzUsIDB4NGFmODk1MjcsIDB4ZGEyMGIxMzMsIDB4ZmYxNjFkYzcsIDB4ZmQ2N2U0MzgsIDB4NzAzMzNkZTEsCisJMHg5NTlmZGU1ZCwgMHgxZmY3YTI2YiwgMHhmMTBiOTg1NywgMHg4NTk2NWVlMSwgMHg1YTJiMTdjZiwgMHg2MWI3ZjkwMCwKKwkweDg5OTk5MmNiLCAweDg2NmE0ZWY2LCAweGFkMzVlYjRhLCAweDhmNTY3OTcwLCAweDdhZTlmODgzLCAweGRiNGRhM2Q0LAorCTB4ZmM3MDdmODEsIDB4ZjJmZjZmZDksIDB4M2YyMjRmNDYsIDB4NGNjNTVlZGQsIDB4YzNjYmY2MDksIDB4YzI3YTIzNWYsCisJMHg2YmUwMjhiZiwgMHg1N2Q3YzBiMSwgMHhhYTZiMmJlNSwgMHgxMjk2OGJlNCwgMHhlZjhiYTM5NCwgMHgwZDcxMjk2ZSwKKwkweGYzZjQ1NzYxLCAweDBmOWNjM2M1LCAweGI4NTBjYmVmLCAweGMzMmYyMGZmLCAweDZlMThjZmIwLCAweDM1MjhlNjVmLAorCTB4ZjliMTVlOTEsIDB4OTQwZjdmOTgsIDB4YzYyZGIwZDksIDB4MGM4MWY3ZmQsIDB4NjQwZmRhOGQsIDB4ZmI1ZjdiNzAsCisJMHg1ZWZiNmRkZCwgMHhjZDRkNzk4NywgMHg4MGNmNmUwOCwgMHg5N2YzMjE3YSwgMHg3MWViYmFlMywgMHhiMTk4MzU1NywKKwkweGJiYjI2Mjg4LCAweDZlNTZjM2Q4LCAweDhlZGM2YWM3LCAweGY2Yzk5Y2RlLCAweDhmZDg0YmFlLCAweDk5N2Y2Mjc3LAorCTB4NjJmNjE3MjQsIDB4ZmZjN2JkM2YsIDB4ZGFmMTBjNzgsIDB4NDRmMWYwNWMsIDB4ZTc0MjBmYjQsIDB4MWZhMGIzM2UsCisJMHg5MGFkZDFjZCwgMHgwMmY4NzczYywgMHhkNDI1ZTkwYywgMHgyODJkOGIzZCwgMHgyMWMzOTAxYiwgMHhjOTEzZDcxZiwKKwkweDA2NTNmYWYzLCAweDNjODRlZmRmLCAweGZkZTdlYTcxLCAweDNiN2Y5YzExLCAweGI3M2U5Y2RjLCAweDNmMjE0YjJkLAorCTB4YzQ0ZjM2ZTQsIDB4YjVmZjQwOGUsIDB4YTVlZDJhN2MsIDB4NjdlZmMyMjUsIDB4NWY5NGZkZGIsIDB4Mjg4ZWZhNDUsCisJMHhkNzU4MzFhZSwgMHgzNWY0N2YzOSwgMHgzMGE4OGRjYywgMHg4YmJiODdjZSwgMHg3N2Q5ZGZjOSwgMHg4NTRmOWE2MCwKKwkweDFmZWVjNzM2LCAweDc4ODUxOWFkLCAweGYwZmIzMmVhLCAweDI3YWY4NzdkLCAweGUxZjdlNzBkLCAweDM4Njk5M2VlLAorCTB4MmFkZDg2YmYsIDB4ZjIyMWJiY2QsIDB4YjJjMmQ2NDksIDB4MzNmMGI5MDEsIDB4Y2EzYWY4MjUsIDB4MWM1MmU2MDEsCisJMHgwZjk0YmUzOCwgMHgzNGZlZWUxZiwgMHhmYjgzODE2YiwgMHg1NjdmNDgwYiwgMHhhNzk3OGQwZSwgMHg4ZTdlZDNkYywKKwkweDM5NzE1ZmRmLCAweDFlOGY5NzVmLCAweGVlNTA0NmI3LCAweGZkMDc2NDdkLCAweDNmNmYyMDk2LCAweDc3N2Q3MjcyLAorCTB4ZWZlZTQzMmEsIDB4ZGY1MDBiM2EsIDB4MmE2ZmQ3ZjQsIDB4Zjg5Y2ExMzUsIDB4ZGZjZjhiOGUsIDB4NDAyY2U5NjMsCisJMHg2MjhkZmM3ZSwgMHgxYWU5NjdlYywgMHg2YzgwOGIxMywgMHg1MDA2YjI1ZiwgMHhhM2U4ZjIwMywgMHg0MDI5OWY0NywKKwkweDllZTFmZjc5LCAweDI3ZTYwYTY3LCAweDlkZmM5N2MwLCAweDc4ZTU3YjJjLCAweGZkMjY2ZmMyLCAweDM0NGIxZWE4LAorCTB4ZWY5YmM3MGYsIDB4ZTU3ZjcyYjMsIDB4Zjk1NDdlMzAsIDB4ZmRjMmRiM2UsIDB4YWIzZTdkYTEsIDB4YmYyODc0OGUsCisJMHhmMTQ4NmJlYiwgMHhjN2RiN2RhMywgMHhlNmZmMjQ2YywgMHhhY2JmMGI3NywgMHg4M2RhM2ZkZiwgMHg3ZGY5MThmYiwKKwkweDFlMTVmZjUyLCAweDk3NGE0ZjRlLCAweGQ0ODNmZTQyLCAweGUzYzkzOGIyLCAweDdiZGU1OWJmLCAweGU0MTMzZDYwLAorCTB4YmZmM2FjM2QsIDB4ZDkzNDVmMjEsIDB4MzI0NmM3ZTIsIDB4ZTIwYjBmYTIsIDB4ZDBlY2QyY2QsIDB4YWQ2NTNmNTAsCisJMHhiZjE1ZjRlNCwgMHgyYWZiNDRjMywgMHg4MWQ3YWU0YiwgMHg5MjhhZWNmMiwgMHgzMDEzMzY5NCwgMHg2ZDI1MjdhMiwKKwkweGYyMDFjNjIyLCAweGZkZTk0YjczLCAweGZiYTczNTcwLCAweDdmMjMxNjcwLCAweDUxNmIwZTViLCAweGI4YmI1ZTQ4LAorCTB4MzI2ZjNlZGYsIDB4ZWE4M2FkNzMsIDB4OWVkYzExYWMsIDB4MTZkZjMyZjEsIDB4NWRkNjk4YjUsIDB4YzQ5MGZmNDEsCisJMHg0ODBiZDQ4NywgMHgzZjFmMjgzZiwgMHgzZjQ0NmM1MiwgMHg3NjQyYjc0YSwgMHg5Y2VhNmFhNywgMHg0NzBlZmQ4YiwKKwkweGM4NDcxMzRmLCAweGE3YTczZmZkLCAweDg5M2ZmYWZlLCAweDE4OGYyNjllLCAweDNhODI5ZThlLCAweDM2ZDc5M2QxLAorCTB4M2YwOTNkMzQsIDB4Y2ZiZjc5ZjEsIDB4YmZkYzAxYzIsIDB4ZGQ3YzBiNjYsIDB4ZmM0ZWU0MjcsIDB4OWJmNDliMGUsCisJMHg5OWRmMzgyYiwgMHgzNjk5YmZhMiwgMHhmZDQ1NTQ0NywgMHg5YzdmMzNlMSwgMHgxODdkZmZlOCwgMHgyN2RjNWZlYywKKwkweDBlZmRhMGU1LCAweGYzOTVjOGU1LCAweDE2Mzc1YTc0LCAweDQxN2Y0MWViLCAweGQyMzZjNWVhLCAweDYyOWFmNzhmLAorCTB4NjRhZjY4NDUsIDB4OGZkOTZmOGYsIDB4YjczZDkxNzQsIDB4ZWQyNTYyYWMsIDB4YThkY2YyZmYsIDB4OTJiNzUwMGYsCisJMHg3NTU5NzQxZiwgMHgwNDg4ZDRlMCwgMHhkZjEwZTE3YiwgMHhlNWRmMzRjZiwgMHhiYmQzZTdhNywgMHgxYTEwN2RiOSwKKwkweDM4N2IyMTZkLCAweDcxODRhNWQ0LCAweDk2MDM5YjlkLCAweDZiNDFkYTA4LCAweDA5NWZlZTE1LCAweDNjZWJiMDZmLAorCTB4YTBhZmEzZWUsIDB4NzQwZmNmYjgsIDB4NDg4YTE3MWUsIDB4OGVjZjZmZmYsIDB4MzViZDIzZWYsIDB4OTFlZmM4MzgsCisJMHhmODNhM2YxYywgMHgxZmM3Y2E4NSwgMHg4ZWZjNjhjMywgMHhlYWFmMWU3MiwgMHhmZWU3NWFiOCwgMHgxZDdlYjExNSwKKwkweDZlMzlmY2IzLCAweDE4ZDYwN2I0LCAweDg1YzY1OWY5LCAweDE4ODA5Y2ZhLCAweDdhZmU2ZjE4LCAweGFlNDNhZDNiLAorCTB4ZDJjY2YxY2EsIDB4MGNmZjVjNmQsIDB4NjdlNDBiOTYsIDB4MTYyYzlhY2UsIDB4ZmE2ZmM0NDYsIDB4MDUyNDFjZjksCisJMHhiYjQ1NzNkNiwgMHhjYjM5Mzc4YywgMHg3OTY4NDUwMiwgMHhiN2U5YmJiZiwgMHhiZDAwYTRhZiwgMHg4ZTlmYTE2NiwKKwkweDY4YzJjYTZmLCAweDk4N2Y5M2Y3LCAweGZjN2RjOWQ3LCAweGM5MDAwOWEwLCAweDVjZmZkNmM1LCAweDQyNjk3MzU3LAorCTB4ZjAzZmJjNWQsIDB4NmI2YmRjZmQsIDB4ZjZlZjQ4ZjIsIDB4YTBkODIzYjcsIDB4NmZkZDY1OGYsIDB4MzUxZTMxZDcsCisJMHhiZDgxYWVkMCwgMHhmODUyZWI2YiwgMHhiNWM3NjFmNywgMHgzYzA2OGU1NywgMHhmZmZjNzIyOCwgMHg3ZjQ3ZWI1YywKKwkweGM2MTk5ZGExLCAweDRiNGY4NDRiLCAweGZkMGNkZmVhLCAweDdlZjk3NDNiLCAweDc4NGFmNmJjLCAweDU5MGFjMWUxLAorCTB4MWZhZDY2YmYsIDB4NmNjZmJiZTAsIDB4MmE1MDhmZWMsIDB4MWM4YWM3YmUsIDB4NmRhY2Q2ZWYsIDB4MGRlN2Q2ZWIsCisJMHgyNzYwMDVkOCwgMHgzOTkxMWFlYywgMHg3ZWFjMWY2MCwgMHg4NWZiNjY3YiwgMHhlYmFhNTYzMCwgMHg1ZGVhMGI1MywKKwkweDFlNDNlN2E5LCAweDY0OGZlYzg1LCAweGU0MjAzZDdlLCAweDU3MmNkZmMzLCAweGY0NzY0MWY1LCAweDU3MjQxMTgxLAorCTB4NGIyMDY2N2IsIDB4ZTQ4M2ZlYzIsIDB4ODA3OTY4NzYsIDB4ZjYwNzNkYTEsIDB4ZGJjMjE3NDgsIDB4ZDNlM2ZjN2IsCisJMHhlZjdiNDIyZiwgMHgxYjFmZGZlYywgMHhiNzdiZTNhOSwgMHgzN2JiNDVjZSwgMHhiYTIzNGU3NCwgMHgyMzUzZWQwZCwKKwkweDRkYWRkMDBhLCAweDcxZTgwYmYwLCAweDdhNDgwYjhhLCAweDc0MTJlYTVhLCAweDhjMzMwZWVhLCAweDUyMWM3NDczLAorCTB4YmU4OTg1MjYsIDB4ODNhZTBhNWEsIDB4ZjhmN2NjYjUsIDB4ZTQzODQyNWYsIDB4ZGU3OTMyYmUsIDB4ZjdjMTFlYmYsCisJMHhlYWQyYTEwZiwgMHhmZmQ4MjVhZCwgMHg5ZGExODU2ZSwgMHg0NGY0YWViMCwgMHgzN2RhMDJkNiwgMHgzMGI1OWJiZCwKKwkweDVkMjViYmUxLCAweDk3M2UxMjBmLCAweDg5MGYzM2VjLCAweGUwOGY1ZmM3LCAweDY3ZTZkZTcxLCAweGRjYTNmNjlmLAorCTB4OTBhMjI4ZjgsIDB4MjJkMDY4NGMsIDB4YmQ0MGE3NmIsIDB4OTY4NGMxYTEsIDB4Y2M4Y2FiMjAsIDB4MWNlMjkxYmIsCisJMHgwNjM2MTY3NSwgMHhlZDA0NzdlNiwgMHhkZjYzODQyNiwgMHg3MDUzYzMzNywgMHg4MTRmZjBkZSwgMHg4YjAyZGI0NywKKwkweGFiNmU5ZjQ4LCAweDRlMjgzOWIzLCAweDU2ZmYzYTU0LCAweGM1MmI4M2MyLCAweDU3NTg3ODhmLCAweGUzODM5ZDVhLAorCTB4ZTE5YWNmMzQsIDB4ZDgwOGY4YTIsIDB4N2NkZWQ4NzEsIDB4MmZjOGI3ZDcsIDB4ZDc1YWUxMjQsIDB4M2I0NWFlNjUsCisJMHhiOWVjMGFhNywgMHhmY2VlMDBhNywgMHg3ZDZhNmI4YywgMHhkNTIzYzdjMCwgMHgzYmI3ZTVmZCwgMHhiNDNlNWUzMCwKKwkweDI2NmVmZjFjLCAweDI1MzY4YmE3LCAweDI1NDZmZTEwLCAweGEyNTk0MWY5LCAweDhiYjBiMzVmLCAweDhkOWY4ZGRiLAorCTB4MmJlMjE4YjAsIDB4ZjZlMDhkOWYsIDB4ZDhlMWE1ZWMsIDB4YzM5ZjI0NzQsIDB4ZGEyYTRmNWEsIDB4ZmZlNjIxZDMsCisJMHgyY2NmZjcwNCwgMHhkMGY3ZDBlMCwgMHhlNDc5NzEzYSwgMHgzZmM5ZDU2OSwgMHhkY2Y0ZjM2NiwgMHg1ZmI2MjE3YiwKKwkweDg1ZmVkMWFhLCAweGUwMGYzZDY5LCAweDNkNmJiZGI4LCAweGYwNGM3NWJlLCAweDJhZWZkNjAxLCAweGJkNGY3ZGEzLAorCTB4MzI3OGE4MjcsIDB4N2Q3MGJjZjksIDB4YWFiZDlmN2IsIDB4ZDI4OGZkMWMsIDB4YThmYjVhZWUsIDB4NWFlNmY0OWQsCisJMHgyZDdmN2VhNywgMHg2OWRmZDNjYSwgMHgxNmMwMWYzYywgMHg3ZTg3NGQ4ZiwgMHg4MzNlZmU5NiwgMHg4ZjZiNWRjNiwKKwkweDBmZjVjNWFjLCAweGJkYTk1NGVmLCAweDYwNzQxMWQ4LCAweGI5YmU0YmJmLCAweDJiZDIyMjY1LCAweDUwNGE0NDczLAorCTB4ZWQzZDlhOGYsIDB4YjYxOGU5MGMsIDB4YjEyZmU0MmIsIDB4ZTMwYzAyNzksIDB4ZjNjM2QzYzQsIDB4NDVmNTA1MzQsCisJMHgxZDMzM2Q5MiwgMHg1ZmI0NTVmZCwgMHhiNmJmOTBmMSwgMHgxOGM3ZjA1YSwgMHgzNmQzODJhMCwgMHgzZmI2ODU2MiwKKwkweDZmYjAxODhmLCAweDFjZTNmOTVlLCAweGJiNGExZjBkLCAweGZlZTM2NGM3LCAweDE0YmE5YWYzLCAweDViMmRmNjg2LAorCTB4NDI2NjNmMTUsIDB4YzYyN2JkN2YsIDB4ZWE2ZTBlZDAsIDB4YTY5YzY4NTQsIDB4YjgyZDI3ZDIsIDB4OTNhNWI5NmYsCisJMHhlYzQ4NzdmMywgMHgwNTdmMDAzMywgMHhmMThjNTc2OCwgMHhhMDdiMGFhNCwgMHg1ODM5ZmI4ZCwgMHhjNDQ4ZDhlYywKKwkweDNkN2M2M2YzLCAweDEyZjc4MzE5LCAweGFkOGNhYmZjLCAweGY0NDBmMmUwLCAweDg2NzExMTY3LCAweDAyNTdlMTI2LAorCTB4M2VlZDQ4NGQsIDB4ZWY1YmI0OGYsIDB4ZjNiN2ZkMTYsIDB4NTliYjhjNTIsIDB4YzQ1NWY5ODksIDB4ZjA2MmI5NmIsCisJMHgyYWYyY2I4NywgMHg5MWZhN2RmMSwgMHhkZmU0MGNmOCwgMHhmYTE3ZDAzOCwgMHhiMzJhYjY5NywgMHhjYzI5ZmQ2ZSwKKwkweGYxYTRlYjZmLCAweGJjYzEzNDNlLCAweDA1NmE0ZTQwLCAweDA0NTIwNzNlLCAweDdkNzY1N2JjLCAweDg2ZTkwMzMyLAorCTB4ZDdlMjMyZDUsIDB4NmE2OWFlZTYsIDB4NmZjNzgzOTMsIDB4NGVjODVlZDAsIDB4ZWQ4OWQ5NmQsIDB4OTI5NzM3ZDksCisJMHhjOGY4YzY3ZSwgMHgzNWZlNzg2YywgMHgxY2IzZTcwZiwgMHg3OWQ3ZjcwNywgMHg2MTE3MGVlZiwgMHg0OGZkMzNiYywKKwkweGUyOWZkNmUwLCAweDkwYTQxN2Y4LCAweGQ2MWIzNWJmLCAweGU1NDE5OWM2LCAweDc5NmZmNDFhLCAweGE4OGJmOTU5LAorCTB4ZjUzM2JkN2YsIDB4YzY0Nzg0MGEsIDB4MzgyZTMwZjUsIDB4MzhlNDhjYWIsIDB4OGE3YzMzZDUsIDB4Mzc5NDE3N2YsCisJMHgwZTM0ZGM3OCwgMHgxMTZhZWZlYywgMHg3MTFlN2M1ZSwgMHhkMTE5YzQwYywgMHg2MmUzODc2ZiwgMHhkZWNiMGYxYywKKwkweDdlNDZhODljLCAweDdiZTdkMDdlLCAweGFjYmI0ZTkwLCAweGNjZDdjNDJlLCAweDQyZGY5N2FlLCAweGM2ZDMzYjdkLAorCTB4OWFlZTI5M2EsIDB4ZDNjNGI3NjQsIDB4M2E0NDE5YmUsIDB4N2E3MzNiZWQsIDB4ZDcwODNkYzcsIDB4OTQ3ZDA3NzUsCisJMHg4ZjY0OTJjZiwgMHhiNzM5NzE1YywgMHg5M2RhM2ZjYiwgMHhlYzNmMjNhYSwgMHhlYzFiNzIxMiwgMHg3OTdmMWU0NywKKwkweDkzMjNlZjljLCAweGY2ZWZjOGVkLCAweDIzYjcyZmFmLCAweDc3N2ZlYmZiLCAweDE3YzM5MjNiLCAweDI4ZjNjM2RlLAorCTB4ODkwZjdjYTQsIDB4YzM1ZjVmN2QsIDB4NWZkNDM0ZDksIDB4YWVkMjNkMmIsIDB4ZDhmN2NhNGQsIDB4YmEzZGYyMmQsCisJMHhkMGY3Y2U4NywgMHgwZmY4ZjI3NiwgMHhlZTQ5NDE4NiwgMHhhZTIyMmRiYSwgMHg0M2NlZjdlNSwgMHg4NGJiODdmZiwKKwkweDdiMmJjMGU0LCAweDM3NDhjMzUzLCAweDY0ZWQzYjY3LCAweDRiNmU2OTk3LCAweDdiNmFlMTE0LCAweDNjYzExYWRhLAorCTB4ZTA0NTM2ODgsIDB4NTc4ODkwZWIsIDB4MmMxYzQ0NTksIDB4ODM0NzQ0YTMsIDB4NDAyNWEwZTIsIDB4YTRmYzNmNzIsCisJMHhkMmFiYzc5OSwgMHg4NWVlOGYyMiwgMHgxY2UxZTM3YSwgMHhkNDYyY2YxMSwgMHg1NGQ5Zjg3ZiwgMHg4YTYzNzdjMiwKKwkweDM3ZmQ4ZTllLCAweDg2MDhmYmZlLCAweDE4M2VhYTcxLCAweDA5ZjlkNzBmLCAweDg3YmI3MDdiLCAweDdmYmM1YWUyLAorCTB4ZTc1NTgyZjYsIDB4ODk2OGIzZjEsIDB4MzNiMGYwMWIsIDB4OTNiZmVkYzIsIDB4MDVhOGE2YTUsIDB4ODk5M2JkZTYsCisJMHgzMmY1OWYzYywgMHhkOWU3YzVhZSwgMHg4ZjI0NjFiNywgMHg4MjMxYTBjYiwgMHhkY2I1YjJmYiwgMHhlMzJmNTQ1ZiwKKwkweDFmYjk4NzU1LCAweGE1YzQ1ZWFlLCAweGY0NWVjZTRlLCAweGI0NThhNjA4LCAweGI4YjUyZDI5LCAweGRkN2NmYjRmLAorCTB4ZGY5ZmYyMzQsIDB4MmEyY2ZmNzksIDB4ZmQxOGQ3ZWIsIDB4M2ZkMDhiZmQsIDB4M2YxMDNjNWYsIDB4ZjlmNzdlOTYsCisJMHhmNmUxNjdjYywgMHhkMGZmODBmMywgMHhiZThjZjYwNCwgMHhmZDQ2YWI0NiwgMHg3NzVjYzQ1OSwgMHhjM2QwM2VhMywKKwkweDQzMTc3YWIwLCAweDFhMjUwNmQ5LCAweDE5NjAwYWYxLCAweDdhZDZkM2RlLCAweDU3YmQ3MDUyLCAweDZmNDg5OWI3LAorCTB4N2U0Y2RiODUsIDB4Y2JkMjRmN2MsIDB4NjdhZTFlYWIsIDB4YmQ3MGY1ZGYsIDB4ZTA4ZWE4MDMsIDB4MzM2Y2IyMzgsCisJMHhlODgzNzg4YiwgMHg0NTMzMDU2ZiwgMHhiYzI5MzRiMSwgMHg2YWQyZWQ1YywgMHhiMmRmZDI4NywgMHg4YjczMzZiZiwKKwkweGNkZGExYTZkLCAweDc3ZjIyNmY5LCAweGQ3ZjE2ZTdmLCAweGEzMzhiZjkxLCAweGNkYTlkNjg0LCAweDk2YTZiMmQ5LAorCTB4N2QyZjEzYjcsIDB4YTgwNzhmNmUsIDB4MWI4ZDMyZmQsIDB4NDBjZjRjOTYsIDB4ODc4MmZhNzksIDB4ZjE5MjE3YzcsCisJMHg1OGRkYjBiNiwgMHgyY2MzOGU0ZiwgMHhmNWViMTg4OSwgMHhhNzM2MzgyYywgMHgxMjBkYzc5OCwgMHhmNDIwYmY5ZiwKKwkweDhhZWJlN2M0LCAweDE2N2RiZTA0LCAweGZlNzJiYjk0LCAweGRlMzhmMjJiLCAweDFjYmNmOTRjLCAweDg3NWQ1Zjk1LAorCTB4ZTMwYTMwNzQsIDB4NzI1ODQ1Y2EsIDB4ODRjYzJhYmYsIDB4OTk3NTFmZTAsIDB4NDhmYTIxNDcsIDB4Y2RjZGI3ODIsCisJMHg5NmJjMjllOSwgMHg1YWZmMjFmYiwgMHhmZWUxOTNmOCwgMHhmODI1OTNkMCwgMHhiOGM1ZWZkOCwgMHg0MmNiYmQ2NSwKKwkweGY1ZjNlODcxLCAweDFhNjRhNDk3LCAweGY1ZmRiN2Y3LCAweDk2ZmVmZmJmLCAweGFhZDdlN2VmLCAweDQ1YzZiZjIyLAorCTB4OGJiZTY5NzIsIDB4ZTJhNGU1Y2YsIDB4ZTdjNTFiZGIsIDB4NzAxZmIwMGUsIDB4MGFkNTZiMWUsIDB4YmZkMzIzOTQsCisJMHgzNDc5YTBlOSwgMHg4MjM5MDYxZiwgMHgzZGU1YWM3MSwgMHg5YmQ3YTgwNSwgMHgzMDRhN2JhYiwgMHg1ZjhjOTM1ZSwKKwkweGYyOTM1Njg0LCAweGVmOWJkZTBjLCAweGRhMDhmZDgxLCAweGYxOGM2YjBkLCAweDU1ZjFjMWI4LCAweDI2NjY2MTdmLAorCTB4ZWU0ZTdiZWUsIDB4ZDdmNTE5N2YsIDB4MmZlOTNiN2UsIDB4YWQxN2JmZjgsIDB4MTZjZmZmYzgsIDB4Mzg4YjVjOTEsCisJMHgyZTMxNjM4MywgMHhlZTg5NGExNCwgMHhkYTExNzFmOCwgMHg2YThlZGMzMSwgMHg0NGVlYjZlYSwgMHg1YjdlNzEzYiwKKwkweGZmMGY3YzQyLCAweGVmMThkZWIzLCAweGM4MzI2YjYzLCAweDhjM2FjZWVmLCAweDRlMWUxYmNmLCAweGZjNTA2ZWZhLAorCTB4NjVkNjlkYWYsIDB4MGUzODI1YjMsIDB4MTBmNDFkZjksIDB4NTk5YzFkZTUsIDB4YmViODYyNjIsIDB4MTE2ZmFhZjUsCisJMHg3NjMzYTkyYSwgMHhjNjdlN2RhMywgMHg0NjZiZDdjOSwgMHgzZTNmZDRhNiwgMHhlYmZhYmZiMiwgMHg1N2Q5ZDY4MywKKwkweDZmNWNlYjgyLCAweDdlYzRjMTYyLCAweDYxOWQ3MDlhLCAweDNhYzUxYjdkLCAweGUyZmE3OTlmLCAweDhmZTc1YzEyLAorCTB4ODI1YzVmZjcsIDB4ZGNkOWJjZWIsIDB4MjliZTQ3ZWUsIDB4NDFhZjA3NzUsIDB4MzJiYTljZmMsIDB4ZTYxNWY2NDAsCisJMHg5ZDFmMjBlZiwgMHg5NGRlM2QyZiwgMHhmZDM3OGY0NCwgMHgyZWIxZThlMywgMHg1OTMyMWYzMSwgMHhlM2Y0MzYzZiwKKwkweDNkMWZhOGNiLCAweGU1MGYzZDE2LCAweGY1OWI3Y2MxLCAweGZjNDllYTJmLCAweDY3OWZkMjFiLCAweGUzZmY5MmIzLAorCTB4ZGQzZjFmZjAsIDB4ZGQxOGY5NDgsIDB4YjIyN2Q5MmEsIDB4YjA1YWMzYmYsIDB4YzNhM2VkMTgsIDB4NjE3ZDc5NmYsCisJMHhkM2ZlZjg2NSwgMHhiNWU1ZmQ4NSwgMHg1OWZhMzBiMSwgMHhkYTQwYmVlNCwgMHg3OGYyYzk5NywgMHgwM2NmOThiOSwKKwkweDhjZGZmZTk5LCAweDNjZTIxYmY4LCAweDIwZGM3ZmQyLCAweDNlNDViMWRlLCAweDZlZWY3NmU1LCAweGM3ZmRjN2M1LAorCTB4NmU0ZmU0OWQsIDB4ODVjZjM0M2UsIDB4MjIwZmUyZmUsIDB4ZmNkYzdmZGMsIDB4OGZmOTM5NzQsIDB4OGE1ZTQ0OTcsCisJMHhlYjE5M2U2MiwgMHgxZmI4NWM1NiwgMHhkZGZiYjI1OSwgMHg5MDAzY2MzNCwgMHhlN2Q4NWVmYiwgMHhmOTQ5OWZkZSwKKwkweGVmZmRjNjM1LCAweDY5OTM5MTA3LCAweDcwMDAzNzk4LCAweGE3NzA4ZmJmLCAweGE0MTZlMjdhLCAweGZmZDg2NmZiLAorCTB4YjM2MGRlNjEsIDB4ZmQ4NjNmMTYsIDB4ZDkxODdiMzYsIDB4YzY1ZDk1MDUsIDB4ZWY4Y2EwZmQsIDB4NDg1ODBiNmUsCisJMHg1NmViNmVlZSwgMHhiM2FmMjgyMiwgMHgzY2EyYzEyYywgMHhjZjJjNmJkNCwgMHg4MDc1M2E3NSwgMHhmZTk5MjJjZiwKKwkweDA3N2U5MDE3LCAweDVkZmVlYWUyLCAweGE3ZmU5NzU4LCAweDQ0ZTlhZDllLCAweGU2NjYzZGJmLCAweGRiM2NhMTc3LAorCTB4NGNmMjE0ZWEsIDB4ZGJmNmY5MjMsIDB4NzU5MWRkODcsIDB4NmZjMzc2MDksIDB4NTg0ZWRjMjMsIDB4MzRjMWYzMjIsCisJMHhiZDYwZDUxNiwgMHgxZmYxY2QxNiwgMHg3OTQ2ZjVjNywgMHhmNzkyNGQxZiwgMHhhZjE5NzU4OSwgMHg0OTQ1ODViZiwKKwkweDllYjEzNTJmLCAweGM0YjBiY2ZlLCAweGY5ZTM5MmY3LCAweGY0MzcwNzE4LCAweDc1Y2E1YWMzLCAweGU0ZGQ5M2Y0LAorCTB4YWI5YzUxZjAsIDB4NjM1NmNmZWIsIDB4OWJlZjk4N2IsIDB4NTU5NjFmODEsIDB4NWNhZmQwMGMsIDB4Y2RiZjQ5MDcsCisJMHg2YTFkMWZjMiwgMHhlOTBhYjEzOCwgMHhiOGE1ZDQzNywgMHhlOGRkN2Y3MCwgMHgwOGRiZjRlMywgMHg5YmNjMmZmYiwKKwkweGQ2NzdlNjRkLCAweDFkMTNjYzY5LCAweGRkN2ZmZjhlLCAweGZmOWM3N2NmLCAweDljYWMzZDdmLCAweDViZjhjN2ZhLAorCTB4M2Y5N2VmZGYsIDB4ZmNlNWVmOWMsIDB4N2ZiZWZmYTUsIDB4ZTcwYWRkOWUsIDB4MjU3OWE0Y2IsIDB4ZmQ5MzViZWYsCisJMHg3OWRmNzJlZSwgMHg4YmYwZjJiZSwgMHhmMTdjN2MyNCwgMHg3MGM3YzYwZiwgMHg2YjI1MzBmMiwgMHg3MjQyZmRlOCwKKwkweDk2YWZlMzVjLCAweGY4ZTBmZjg3LCAweDFlODcyM2M2LCAweGE4ODEzMzRhLCAweGY2MTQ1MjU4LCAweDZmY2ViYjcyLAorCTB4NTBjZjE3ODgsIDB4MzcxZTdlMWQsIDB4NDUzZTc5NTUsIDB4OWY1ZGRjNzIsIDB4OWNlZWUyMjEsIDB4NWE3YTVmOWYsCisJMHgxMjZhZjVhNSwgMHg0M2E2ZTFmMSwgMHhkYWJlMWY0ZSwgMHhmMTRjNThlMCwgMHhlOWY4ZTRkOSwgMHgwNjdmYjY1MiwKKwkweDFjNzI1MTJlLCAweGI4ZjkxMWI1LCAweGE5ZTNjYmY4LCAweDNkMzk2NTE3LCAweDU2NzQ5ZjI0LCAweGM5MGE3OTg0LAorCTB4MzkyZjVhNzksIDB4NGMxMTFkM2UsIDB4MzJlYWVmNTgsIDB4NDEwYzA4ZDgsIDB4Y2MyZDM2ZDcsIDB4NGY5ZTEyMzIsCisJMHhmNGY2ZTJjYiwgMHhjODlmMjI0YiwgMHgwNWU3ZTE2YiwgMHhmYWE2NzNlZSwgMHgzNWUzMWY3MSwgMHg3Y2E3N2NmMSwKKwkweGQ2N2E2MDRmLCAweDAyZWY5NDI0LCAweGMwZGVjZjlmLCAweDQ3OTc4MDRjLCAweDRmMjQ5ZGNjLCAweDFmMGU0ZGMyLAorCTB4YzdlOTNmY2EsIDB4MTBlZmZkOTEsIDB4YTVmMzhiNzEsIDB4MTk2NzZmZjMsIDB4ZmViZmJjZTksIDB4ODVmYmUyNGYsCisJMHhkYWZmYmU5MiwgMHhjMDE2ZGRiOCwgMHgxODFmODE4ZCwgMHgxODZiZWZkMSwgMHg0YzFhMmE2NywgMHgzM2Y1YzNiNywKKwkweGNiMmVmZDFjLCAweDQ1OWVkYzBhLCAweGE0NGZmMTc4LCAweDk0ZjNlNmZjLCAweGYxOTVhOTJmLCAweDYyMmZlODkzLAorCTB4ZmEzYWFjMDcsIDB4ZmNlMjZkMzcsIDB4MjM5ZjViMGIsIDB4YWFiZWViZjYsIDB4Y2Q5Nzk0NTksIDB4NzNjODhmY2YsCisJMHg4ZmQ5YzMzNiwgMHg5ZmY5ZmIxYiwgMHhmNWZkOGZkYiwgMHhjOGZkOTNiZiwgMHg5Yzc2ODFkYywgMHg3ZTY5YTllNywKKwkweGVkNWZmYmNhLCAweDVmNzFmODA0LCAweGM4NzVhOGY4LCAweGRjZjIyY2YzLCAweDVkZjk5N2M1LCAweGNkYzNmNmY2LAorCTB4YjBlZjZhZTksIDB4ZTU2M2ZmNzAsIDB4MzRmZjkzZTcsIDB4MzRmYmY5ZjksIDB4ZGYwZWEzZjQsIDB4N2JlNDU4NGYsCisJMHg5ZTIyZmNjNiwgMHhmODI1NzZjNiwgMHg5ZTMxNDNiNywgMHg4MDkyZjdhZiwgMHg0NDdmM2U1NywgMHg2Y2Y0YzVlOCwKKwkweGE3NWM1MWZmLCAweDZjZGI4ZjhmLCAweDllNGMxZDJjLCAweDliMTcyZTRhLCAweDJmOGEwZTAzLCAweGJjZjI3NzM0LAorCTB4OGNlNWU2OTcsIDB4ZmEzMzc3ZTQsIDB4YWZkMGNiNGYsIDB4YmRhMThiMzgsIDB4ZjgyMzM1MzcsIDB4ZjU3ZWZjMzMsCisJMHg5YWIwOGVkYiwgMHhkOWY3N2U4ZSwgMHhkZWJiZWQwYywgMHhhOWZlYmNlMywgMHg2YzczZjgzYiwgMHhhMWVmMmQwZiwKKwkweGVjYzc0Njc4LCAweGFhZWYyODhmLCAweGFlOWZjZmVhLCAweDc4MjRhZGFhLCAweGIxZTA4ZmM5LCAweDdjYWRjZjFhLAorCTB4MGZlM2M1OTEsIDB4YmY0M2ZjYjIsIDB4NWY5M2YxM2MsIDB4OWUwNmUzZmYsIDB4ZjhmMjFkOWYsIDB4OTA4ZmU4NWQsCisJMHgzZDU0ZjE3ZSwgMHhlNmE2N2U0NiwgMHhhYjY4ZGMwMywgMHhkODdjZjk1MiwgMHg5ZTg4ZjNmNywgMHgyYjRjMGY5YSwKKwkweGViMjlmZjQ3LCAweDlkYTM5N2I0LCAweDA3MmJmNTViLCAweGJlM2VmN2VkLCAweDI0ZjI5NzJiLCAweDBmYzEzZGVhLAorCTB4MmIzYTNlNTEsIDB4NWRhMzU3MjMsIDB4YTBlMzA4NWEsIDB4ZmVmMWZiYmQsIDB4NmUxMWNiYWIsIDB4YTMzNmZmMjksCisJMHhkZmM2MWNmZiwgMHhjN2ZhMzRlYywgMHhkOWU3OGQ5OSwgMHg0ZjliZGQyZiwgMHg0NzYyY2JmYiwgMHg2ZmVjNTNmMCwKKwkweDExYzM5ZGIzLCAweGEzY2UyM2RlLCAweDMyNzliZjA4LCAweGNmYmU0YmZmLCAweDRlMzQ0ZDU2LCAweDE0NmRiN2Y2LAorCTB4NjE3Mjk3MmYsIDB4NmQwNTk5YjMsIDB4ZTRmMjAzYzUsIDB4ZjIyZTk2NzgsIDB4NjM1ZTQ0NGMsIDB4YTc5ZTJjZjcsCisJMHg4ZjBlZWEyMiwgMHg4MWYzYmYzMSwgMHgyMzhmMmJjYywgMHhiNGIzYzczYywgMHhlNjFmOTZhZiwgMHg0MDJmOTQxOCwKKwkweDE4N2U2MmZkLCAweDljNTgwNWM1LCAweGU3YTkyZGZjLCAweGNhM2QxZGI4LCAweDcyN2EyMTY1LCAweDljNTFkZjAyLAorCTB4ZWQwOWU4MDYsIDB4YjFlMzRiZjksIDB4NmI5ZTc4ZTksIDB4NTJmNDQ3NzQsIDB4NzNlMWYzYzQsIDB4MzY5M2MyMjYsCisJMHhkMzhhMzVlYiwgMHhiYzdjMmJhNCwgMHg2YjNkZjVlMiwgMHhjNjFmYTJjNywgMHhiODY1ZTZmNSwgMHhhYmJiN2FhNCwKKwkweDM1M2E1MTFhLCAweDRkOWY5MDIzLCAweDUyOTY4Y2ZiLCAweGJmZmFhZjFjLCAweGYyOWYzY2NjLCAweDE3ZjkyYTUwLAorCTB4MjkxYTBhM2EsIDB4NmRmN2IyOWYsIDB4NGUzY2UxYWIsIDB4Nzc2NjE5NzIsIDB4YThlNGZlNTMsIDB4YmM1MDVmYWUsCisJMHgxOTQwNzljMCwgMHg3Mjc2MmYzMiwgMHhkNmYwODNiNiwgMHhhMGNkOGUxYywgMHgzZDRiOWIxYywgMHg0M2I1NjcyNCwKKwkweGI1MzhhMmJmLCAweDA5NDM1NmI2LCAweDdlY2NkYWM0LCAweDBiNDM5ZTEzLCAweGVmZTQ2MGFmLCAweDMyZTFkMzFjLAorCTB4OGExNTdhZTEsIDB4YzNiZTk4ZmMsIDB4YTQxODk4N2YsIDB4MGY4YzhhZmQsIDB4OTM3ZTc4NDQsIDB4ZWUxNTY3YjksCisJMHgzZDE1YjRjMywgMHgzZDcxODc5NywgMHhjZDRkYjgwZSwgMHhiYzVmZDg2NSwgMHg4NzJkZmM5OSwgMHg0ZmQyMTk1MiwKKwkweGRkZjE1NzYxLCAweGI4NWVhMTUzLCAweGIwZjE0NWM2LCAweDI5NmVlN2JlLCAweGNjMmFmZjI0LCAweGYzMTBjYzczLAorCTB4ZjMzNmNhMmMsIDB4OWFhNTBmZmUsIDB4OWI2OTlmNTAsIDB4ZDU0NzBmOTgsIDB4MDRkNTU5ZGMsIDB4ODc1MDgzZjcsCisJMHgzYzhhNDY3ZSwgMHg0NTNmMTk1NSwgMHhhOWVhMTQzZiwgMHhkN2UwZWNmNCwgMHhmZmI2M2YzMCwgMHgxNGIyZDIxYywKKwkweGUzNDkwZTdlLCAweGIyZTcxMmZlLCAweGYzYzcxZmI3LCAweGZjMmMzYjNkLCAweGMzOTFlNzljLCAweGRmOTM2NjEzLAorCTB4ZTBhNmFkNmYsIDB4ZTZlZTdjM2EsIDB4NjYzNzk0ZjksIDB4NDJlNzBjOWIsIDB4ODQ3ZmYwMDYsIDB4MWQ0NzU2ZjIsCisJMHg2YmQ3MDVmYSwgMHhhZmY2MTYzMCwgMHg2OGJkMzk5OSwgMHhkMTNiM2Q2YiwgMHgyZDM4YjhiZiwgMHg5N2JhNzk0OCwKKwkweDhhNTU0NWI1LCAweDNkNGViOTlmLCAweGVjMjdhYjUwLCAweDNkNzBiNjczLCAweGVmOGZiY2QzLCAweDM1Zjc5M2NiLAorCTB4NmU1ZmE2NWYsIDB4MmRkYTM2Y2IsIDB4OTI3ZmY1ZmQsIDB4ZmU4M2YyZGQsIDB4ZmRjNmZmZjEsIDB4ZjNlZTMzMGEsCisJMHhlNDk3ZWQ5MiwgMHgzYjIwZGQ3ZCwgMHhlMWJmYTkzYywgMHg4Zjk5MThlYywgMHgwZTMwM2Q1MiwgMHhkMjlkYTdiNywKKwkweGYyMWIwYTRlLCAweGUyMWRhYTc1LCAweGQ4Y2RhMTdjLCAweDVjMjNlNWZmLCAweGJmOTk1ZjM0LCAweDVmNTJiNTkzLAorCTB4ZjFmYTc5ODEsIDB4ZDdmMjMwMWYsIDB4NzBhMjNjYzksIDB4MDlmN2NmMzUsIDB4ZWU3NDZjOWIsIDB4MjlkYWNiZDAsCisJMHg4YjI0Njg3ZiwgMHhkM2Y5MGEyYSwgMHg2ZDdjZTg3YSwgMHhjMTExZTYzNiwgMHg0N2IyZWI3NywgMHg5OWRiYmY1MSwKKwkweGYyNGE4ZDZmLCAweDZlMTA1NzUyLCAweDUwOWZlNjNiLCAweGViNjQ2YWJlLCAweDNhZTcxYzIyLCAweGM3NjM4ZDA3LAorCTB4MzA4YjkzZmMsIDB4MTViZmMwODUsIDB4MDZmNGViZTUsIDB4MDVjODVmMWUsIDB4OWJmNDhjN2QsIDB4YTFkMzlhM2IsCisJMHhhMWU3OGViZCwgMHg5OTEzM2NjOCwgMHg1MGYxMjIxNywgMHgzYjliZjAyZCwgMHhjYTExNTE3NiwgMHhmMDRhYjVjMSwKKwkweDk5YWU3MTUxLCAweDRlMGRmZmNiLCAweGVjMTk1ZTcxLCAweDc5YzBjZjZiLCAweGZiYzYzZWU0LCAweGY4OTgzNzBmLAorCTB4YWYzNzY0NzksIDB4ZjlkMThjNzcsIDB4ZjgyZmEwNzksIDB4NzI4ZWJiMzksIDB4MjgzMjc3OWUsIDB4YWYwOTI1M2YsCisJMHhjOWU1M2YzMiwgMHhlNDExZTBiNCwgMHhjYmYzZTQ5NywgMHhkNjEyNGU5MiwgMHg2ZjQ3Y2U4ZiwgMHhmYWVkYzQzYiwKKwkweGNkMGIwNmVhLCAweDM1Yzk2ZmEzLCAweDViZWM5N2U0LCAweGZmYTg2MjYyLCAweDljYWRiYmFiLCAweGRiYzY5MmVlLAorCTB4NTE2MTY3NTYsIDB4ZDg4YjU3ZWMsIDB4ZjVjYTdlNTEsIDB4MTZiYjMyZmYsIDB4ZmQxNGI1ZDYsIDB4NmI1YTQ3YmUsCisJMHgzODA1M2EyZiwgMHhhMDFhZGEzZSwgMHg3NGFlY2ZiMiwgMHhmOWQyMTdhYSwgMHhhOTI4YjlkMiwgMHhmOWYyZDg5ZSwKKwkweGU2MGU1YWI1LCAweDE0MGJjNGRiLCAweGI3ZTc5OTIwLCAweGVhOTMzNDdlLCAweGIwNzdmMTk5LCAweGNmMTZlYWZlLAorCTB4YzM5MDM0ZDcsIDB4M2JlMjYzN2QsIDB4ZmZmZjc4MTQsIDB4ZGJjNDdmNzksIDB4MTk3MzE2OTEsIDB4ODdhMWY3N2IsCisJMHg1ZjFkODY2NiwgMHg5MWZkZGY0MSwgMHg5YzcxZTcyNSwgMHhjNGQzYmQ0MSwgMHhjOGM1NTY3YSwgMHg1ZGY0MjQ1ZiwKKwkweDVlODc5NzI1LCAweDI1ZWM4NTg3LCAweDY1M2ZjOGFmLCAweDE1MWYyMjM1LCAweDVmNTAzYjIzLCAweDcxNGU1Mzk5LAorCTB4MGZkMzA3N2IsIDB4OGYzZGIwYzQsIDB4NzY4MmNmOWYsIDB4NjM5NWZmYTIsIDB4MjZkYTdmYjgsIDB4NDllNTgyZTgsCisJMHgxODRmNTRiZiwgMHgyMmNhZGJlNSwgMHgyZmRmN2QzNywgMHgyMzU4MGY4ZiwgMHhjN2M2M2ZkYywgMHgwYmU5ZTM3ZiwKKwkweGYzMjViZTI4LCAweGU1NzMxOTZhLCAweGYyODBiOWNmLCAweGZiZjUwYzZjLCAweGE2MWNlMmVjLCAweDczYzdjYWU2LAorCTB4YzJjZDJiZWMsIDB4MzZmNTE1ZWUsIDB4OGJjNTMwNjcsIDB4MDQzZTQ0ZjMsIDB4MmI4ZGVlN2IsIDB4N2M4NjViYmYsCisJMHhmN2UwZTY3NCwgMHhiYjVjYTM0NywgMHg4MmZiMDJjYSwgMHhlZWQ4ZTQyMSwgMHhmYWM3MmUxYywgMHgwYTM1OGVjYywKKwkweDBjZTM1NzdjLCAweGZhYzJmMDhlLCAweDc3M2E5NWJmLCAweGE4MjkxZTA2LCAweDgyY2QzMTFiLCAweGY4NTgxNzQ3LAorCTB4OWFmMTE1NTEsIDB4M2RjNGU4MjksIDB4YWVlN2MzODcsIDB4Nzc5ODI4MDksIDB4YzdjZWQyYmEsIDB4N2U2YTBjY2QsCisJMHg5YzEwZjczYSwgMHg3MDA3NWNhMywgMHhiY2I4NTRhZiwgMHhjOWQyOGY4NiwgMHhkM2Q1MmE4ZSwgMHhhMzYxMWNmMSwKKwkweDBhYWFkNzM4LCAweGU3NDk3MWI5LCAweGY1ZWQxNTI2LCAweDM1YmViNzlmLCAweGUwMDZkMzU1LCAweDg3ODg4NWZiLAorCTB4NzhjOGEyZmYsIDB4Y2JkY2EyM2UsIDB4Y2U1OTYyZWQsIDB4OTAwYmY1NTYsIDB4ZjBhZDU2ZmUsIDB4MTJmMzM2YmMsCisJMHhmOGU5Y2U3YywgMHg5NTY1YjRjYSwgMHg1NTdkYTc5OCwgMHhmYTI1NGI2YSwgMHg0ZjNkMDc2OSwgMHgwOTY1ZTc4NywKKwkweGFmN2YyYjc1LCAweGMwMmYxNmQxLCAweGVkMGJlNjczLCAweDhmODg0OWMxLCAweDdiYmRlN2NmLCAweDNiODdjYTI3LAorCTB4MDc3OGRmNzMsIDB4MzBkZTI0ZjMsIDB4YWY5MTM5MGIsIDB4OThlZWY1ODgsIDB4NzllYjA2OWUsIDB4ZjIyZGQ4YWMsCisJMHgwZjQ0NmMzYywgMHgzZjcyYzZjNywgMHhkYjFlN2Y2NCwgMHhmYWYyODUzOCwgMHhlN2UxY2U2NiwgMHhiMTY1YWY0OSwKKwkweDllZjgxZWI2LCAweDNlZDAxNTljLCAweGQ5MTE3MjYzLCAweGRlNDUzMzkxLCAweDAyYjc4Y2M1LCAweDk4MTdlODY5LAorCTB4NDM1YzQzNzEsIDB4NWQ5YzNhMzksIDB4YWNkNzk1NzQsIDB4YzNmMDI0ZjcsIDB4N2ViMWJhZDUsIDB4ZmViMWE5NmQsCisJMHhmZWIxOWYzNSwgMHgxYTdmYzk4ZCwgMHhkOTdmNTg5YiwgMHhmNDhkOWZlZSwgMHhmM2MyYmNmNCwgMHgzMDk3YzMzZSwKKwkweDQ3YmRkMTE3LCAweDMyZmRhMzA5LCAweDcxNWM5OWUxLCAweDI3ZTc5NzBlLCAweDc3ZDhhYmZlLCAweDUxOTkzMzNkLAorCTB4ZGIzZWQ2N2IsIDB4MjAzNzNjMmUsIDB4NjhhYWQ3ZmQsIDB4YjY2NWUwOWYsIDB4ZWY3ZTBjYzIsIDB4YjhiYmVhMDMsCisJMHgzZDFjZjIyMiwgMHgwNzYxZDMxNCwgMHgzZjcxNzU2ZiwgMHg4MTZiYmMyZSwgMHhkM2NlMGU3ZSwgMHg0NmFhM2Y4OSwKKwkweDRlOTA1MmRhLCAweDc2MjYxY2IyLCAweGE1NTJmMjM5LCAweDIzOWFlYzhkLCAweGI5ZTRlZTgyLCAweDA1OGQyYWVhLAorCTB4ODYwMmNmMzAsIDB4MWJlNTgzOWMsIDB4ZTg4YmQ3NjYsIDB4Yzg3ZjBlYTcsIDB4NjlkYmU3MTgsIDB4OGE1YmU1MWEsCisJMHg0MTViMTgzMSwgMHg1ZDA0ODdmNSwgMHhmZmYyOTExZiwgMHg1NzU4OWEwNywgMHhlZjE4NDBlMCwgMHgxZTVjZmFlYywKKwkweDc0NjUyZTg3LCAweDY1NmNmZTVlLCAweGRkMjVkNTA5LCAweGFlMDFmZTRiLCAweDQxYTE4ZDFlLCAweGU5MjdmNDQ1LAorCTB4MGI0ZWE3ZjksIDB4YmY3YTgzZDEsIDB4MzRiYmY4NDksIDB4ZWE1OTAyMTMsIDB4Yjg4MDcwOTIsIDB4YzkzZDQyYzksCisJMHg3MTk1ZmVjOCwgMHg2YzliN2NiYSwgMHg3ZWY4ZmNkNywgMHg3ZTc1OTMwZSwgMHhkNDRiMmJkZSwgMHhhYTZhMjlhMSwKKwkweGYyZmNmZDQwLCAweDNiN2Y0OGVmLCAweDg3OWM0MTdjLCAweGU3NDZjZDI1LCAweGEzZTM4NjkzLCAweDc2N2Y4MjVkLAorCTB4NGI5MWYxMjUsIDB4ZThmODlhYmIsIDB4M2I5MmNlYTcsIDB4OWM2YmVlMDgsIDB4YTVhZmQ0MmUsIDB4MGNiYTk3MzAsCisJMHgyYTIzZmQyYSwgMHg0ZmNlM2JmMCwgMHg0NzRmOGE2YSwgMHhlZDY2ZjliZSwgMHg4MjVhYTlmMSwgMHg5YmVmODY5YywKKwkweGM2YTlmN2Y4LCAweDdkZjBiZGVmLCAweDY5ZjdjMjQ2LCAweGUwZDk3ZGYwLCAweDZkM2I3N2VmLCAweGVjNDRkMzUxLAorCTB4MjFlZjRhYTcsIDB4YzlhNTE4N2QsIDB4YWRlNjIzNWUsIDB4YWVlZmYxNjYsIDB4YTNiMTc5MTEsIDB4ZDQ3ZGUwZDMsCisJMHgzY2M2YTU1YiwgMHg2N2Q5MzYxMywgMHhhNGU0ZmNhMywgMHg5NGFiOTJiYywgMHg1N2M4MzllNSwgMHhiYTlhZGI1NywKKwkweDk3YmZhMDdiLCAweDY1NWUzYWM1LCAweDgyZTY3ZTBhLCAweDJkY2YyZmU3LCAweDU3ZmM4YTM5LCAweDk4Njg4YjZiLAorCTB4OGIyZDc3ZDcsIDB4ZWRjNWMyYWUsIDB4YzQ3YzE2OWIsIDB4ZTFmMjRjNWQsIDB4NjY5M2U0NTksIDB4MDMzNjM4MzUsCisJMHhlZGNjNjdlYSwgMHgyMjJkNmZhMywgMHg5YmNlNzlmZSwgMHg0OTVlMTgzOSwgMHhhNDVlMTIyNywgMHg0OTNmYTQxNywKKwkweGY3NzBjOTJmLCAweDNiZDdlN2FmLCAweDNiNmYxMTI5LCAweDRhNTg1MWQ4LCAweDE2YjE4YWJiLCAweGU3YWQ3NzllLAorCTB4ODgwYmNjMGYsIDB4NjVhZDg2NjgsIDB4MmYzNWRhMzQsIDB4ZGM5MzA5MmYsIDB4MDBmZGNhYjgsIDB4OWNiZDY1ZTUsCisJMHg5NDRmZmMxYiwgMHg3ZTE3NzU2NywgMHhjYmUxYTA1MiwgMHg3MTYzNzlkZSwgMHhjNmYwMDBkZiwgMHg5NWUxMzdmZSwKKwkweGJjYTBlM2Y2LCAweDg2MmQwZmUzLCAweGY4ZTFlM2JjLCAweDQyMWI4ZTRjLCAweGZjYzU1MGJiLCAweDQ3OTQ5ZGU0LAorCTB4ZjBlMzlhMWMsIDB4MTA5MTc5ZTEsIDB4NTI1NmMxZTYsIDB4YzJlYzhhZmMsIDB4NmY2ZTE0ZTcsIDB4YjA5YjE1ODcsCisJMHgzZjM3Y2VlMywgMHhhZjdiNzE5OSwgMHgzM2RlZGZhOSwgMHg5NDc3ZDdlNCwgMHg2ZTNiYjg3MywgMHgzNWZkZTVkNSwKKwkweGM3OWM1ZWRjLCAweDRiMzkzZGI4LCAweDUxNzQyZmI0LCAweGVmYzNjY2JiLCAweDg2ZmRjOWQ4LCAweGQ1OGY0ZjFkLAorCTB4MDNiMDVmYjEsIDB4ZTk2MDdlYzksIDB4MzIyY2NlYzIsIDB4N2Y4MzliZGUsIDB4ZGU0MGQ2NGEsIDB4YjczMzY2ZjgsCisJMHg3Yzk5Yjc1ZiwgMHg2MmU3OTQ1NSwgMHg5Y2UyZjdlMSwgMHgzMThjZmU5MSwgMHhmZjY0ZmM3YywgMHg2MjhlNmU2MiwKKwkweGQ3Zjc0Zjg4LCAweGM1ZmU0ZWZmLCAweDNmMzA3NzUyLCAweDU4NWJmYTA3LCAweDRjNTAyZmU2LCAweDMzZjcxNzA4LAorCTB4MWMzZTdkMDIsIDB4ZDZmZTk4NjMsIDB4ZmVlZDFhMzIsIDB4OWJjYjU5YWIsIDB4Y2ZhMjYyYTYsIDB4Y2ZhNDFjZTIsCisJMHhjNTlmNDAwOSwgMHg5ZDFjZmEwNiwgMHgyNGU1Yzk5MywgMHhiM2U5MjVjMiwgMHg5MzRiMmU5ZiwgMHgxNzgyY2FmMywKKwkweGVlMWQzZjYwLCAweGEzMzU1ZmNlLCAweGY1NmRkY2JkLCAweDllNWFiY2YxLCAweDA3MmM5ODI3LCAweGEwNTllMDEyLAorCTB4YWEzYzc4NzEsIDB4YzI0Y2YwNGEsIDB4MzllMTkzNzEsIDB4YTQ0OTNlMWYsIDB4ZjljNjZjY2YsIDB4Yzk3ZTM4NjEsCisJMHg1OWQ4NThkNiwgMHgyZjJmYzAzMSwgMHgwODM1ODNkYiwgMHhhY2RmM2Y3ZiwgMHg0MWEzZmJlMiwgMHhhMjBlYWI3MCwKKwkweGU0NmZlYmFmLCAweDJhNTA5NDcxLCAweDRmMTg0N2Q3LCAweDY3ZjE4MWM5LCAweDVmYWZmMTg5LCAweGZhZjBlOWNiLAorCTB4ZGQxMGIxN2YsIDB4ODQ1MWY4MDIsIDB4OWY2OGI2N2YsIDB4Nzk0NGRkZDUsIDB4Y2M2YmIzNTQsIDB4MDBlZDEyMjcsCisJMHgxM2E5YjcxOSwgMHg5NGYxY2RlZiwgMHhlNjA1OTE5YiwgMHg0YmM2MzRjYywgMHhmMWUyNmVlYSwgMHg4YjU4ZWI5YSwKKwkweDdlYmRlMTE5LCAweDNhOWZiMThlLCAweGNjMTNmZWI2LCAweGM5YmJhYjBiLCAweGQzOTgzY2Y4LCAweDhiMTk2NzFmLAorCTB4YzJhMzk2NzEsIDB4ZmMwN2QwOGYsIDB4ZDNmNGZjODIsIDB4ZGYwZmM1Y2MsIDB4ZjYzYmY0MGEsIDB4ZTgxNTY1ODcsCisJMHg2YjMyYmE3NywgMHg1MDRkZWVjOSwgMHhmMWI2ZjFmZiwgMHhkNjY5ZmY1NCwgMHgwNmYzYmZiNywgMHhhMTI4ZWZiNiwKKwkweGI5MjYwZDdhLCAweGY5MDgzZWUxLCAweGQ1NGRmNTExLCAweGMxMTRkNzhkLCAweGEyZWQ0N2I4LCAweDM5Zjk1YmRmLAorCTB4YjA0YTZmMDIsIDB4ZTdiYzE2NjMsIDB4ZjI4YTM4OWQsIDB4YmM4NDZiMjEsIDB4ZGJjODViZTksIDB4YzlkMGJkYWYsCisJMHhkNjZmNWU1MywgMHg5MzU4ZGZjOSwgMHg3OWY1ZWZjMiwgMHgyYmJmZmNhZCwgMHg2NmI3M2YzMCwgMHgzYzU3YTg5NCwKKwkweDQ3ZWIxZTNmLCAweDFlZTg0Zjk1LCAweDg3MjZkZTgwLCAweGNlNmZmODg2LCAweDA5ZGE3ZWU1LCAweDFjNzQ0YWE1LAorCTB4NDMyNmE1ZTAsIDB4ZTdjNGRmZjQsIDB4ZDFlMmIzMzUsIDB4OWE4ZmU0NWMsIDB4MDRjZmRlNmEsIDB4YzViNWI0ZGYsCisJMHgyY2U5OWVmOCwgMHg2ZDczN2JkNSwgMHgyNTBmMjg2OSwgMHg3MGU3YjU5ZiwgMHhhOWVkMmNmZCwgMHg2N2ZiZTA4MCwKKwkweDhkYjZlZmZjLCAweDM2MDM3ZTgwLCAweDBjNTM4N2M1LCAweGRmOTc3ZTRjLCAweGU3ZTBlNTVmLCAweDIyZmUwMmNiLAorCTB4ZDNiY2ZkMGQsIDB4YjM3ZjNjZmQsIDB4MDcyMmI2ZGEsIDB4MGY1ZmU3ZjcsIDB4NWU3MTJhNWEsIDB4NTFmOTViMmUsCisJMHgyN2QyNmZiNCwgMHhmOTQ0OWI0ZiwgMHg0NjY2MzZiZSwgMHhkZjc0MDczZCwgMHhmMTc4N2M0MSwgMHg0ODY5MDUyNywKKwkweGRkMjMwZTZjLCAweDI1OWFiYTRiLCAweDQ4YzZiZGU5LCAweGRiYWZjMGQ3LCAweDVjYmYzMjcyLCAweGRhZTgxYjVlLAorCTB4YzNkNzQwM2UsIDB4ZDcwMGI5ZDksIDB4YTlhZTA5OGYsIDB4M2ZkNWZkNDYsIDB4MjY1ZjEyNGUsIDB4YmM5YzNiOGYsCisJMHg3OTQ0YmZjMCwgMHgyNzVmMDAzYSwgMHg2NjFlNWZmMSwgMHg3ZjIzMTVjNSwgMHhlY2ZlNGJiNiwgMHhhNjJjMzg0MiwKKwkweDI5YjM5ZDE4LCAweGU5ZTM3YzU0LCAweDc2MzBlYTYwLCAweDFmMmY4NDg2LCAweDgzMTVhZTdkLCAweDRkM2ZjMmUxLAorCTB4Y2ZmYzdmZGEsIDB4M2NmMmZiODMsIDB4ZjlkZjBlZDEsIDB4NWMwMGM2NTksIDB4MjQyYmZlMzAsIDB4Nzg3MTU3MGYsCisJMHg1YzJkMmJiNiwgMHg1YzdiMDhiZSwgMHhlNTliZTdlZSwgMHhmMzhjYmI3YywgMHhlN2UxNGFhZCwgMHg3N2U4YmRkZSwKKwkweGY5N2JkZjIxLCAweGNmYjg3ZWY4LCAweDdjZTQxZDYzLCAweGNmNmY0MjQyLCAweDE2OWMwNWIxLCAweGVlNzVkYjk4LAorCTB4MWI5ZmEyN2EsIDB4YjQ2OWY4NTgsIDB4ODMzOTk2OGYsIDB4NzRmMTE3ZmYsIDB4ODQzZTE0YzQsIDB4Y2M4NTljZmIsCisJMHhhMDU3ZjE0ZiwgMHgxMjcyNzc4ZiwgMHg2ZjA5MGRlYywgMHg4NzlhOWUzMiwgMHhmM2M5YTc5MSwgMHhjMGNmYzY0OSwKKwkweGJlYzhjNWJhLCAweGZhZDhlNzkzLCAweGYzOWU3YmU3LCAweGM3ODk3Njk0LCAweDY1NzdmNDYyLCAweDg2NTRmZjA4LAorCTB4NDUyMTQ3ZjAsIDB4Yzk5ZTdlYTEsIDB4MmZiODdjNTIsIDB4Yzg1M2VlOTgsIDB4NmNjOTk4YmUsIDB4ZDY2Nzk3MjQsCisJMHhlMTllN2Q3MiwgMHhkNDg3ZjZlMCwgMHhjN2YxYzNmYiwgMHg5MjMzOTcxNSwgMHg5OTFiMzM1NywgMHhlN2M3MzczOCwKKwkweGQ5ODc0Yzk1LCAweDJjMGVlN2FjLCAweGFkZjRkYTY3LCAweGQxZWY5MDBiLCAweGUwMDdkMTRlLCAweDdlZTBlOTlmLAorCTB4MjE1Y2VjZWMsIDB4MjRjZjU4M2YsIDB4ZjVmZGYzZDQsIDB4NjdiZTdhNDEsIDB4ZTQ5ZmNhMTIsIDB4OWU2NmM5ZmIsCisJMHg4Y2QyZmVlMywgMHg5OWNhOGM3MywgMHhhMTI3NzdiZSwgMHhlZGE4Y2Y5ZSwgMHhjYzcyODQ5OSwgMHg3MzdiZjJlOSwKKwkweDFmZGMwZDI3LCAweGQxYzc4Yzk4LCAweDg3MTkyNmI5LCAweDRjZmEyZjNiLCAweDNmMTkxZmU2LCAweGM3MDY3MzZiLAorCTB4Y2ZkMjM4ZTIsIDB4NTU4OTQ2NzEsIDB4MWUxNTRiZTEsIDB4NTgzZmU4OTcsIDB4NzZlYzc0ODQsIDB4ZmY0MzRkMTUsCisJMHhlODFiMWNjNSwgMHhjYmJhMTgyMywgMHgxNzMwYmMxNSwgMHgwMDhmZWRlOSwgMHhmMTBlNmUwZiwgMHg3NWUzYzA1NSwKKwkweDM0N2JjMTM1LCAweGUxZTEyYzNlLCAweDJiODc4MTM2LCAweGZiM2Q1ZTg1LCAweDg5ZjE0YWIwLCAweDQzZTk3ZjFhLAorCTB4YmQwODQyMTgsIDB4ZTIxMTY2NjIsIDB4NDVlOTNmNTcsIDB4NTlkOGJmNzksIDB4ZjhhMmEwMzAsIDB4YjI0ZTYzZmUsCisJMHg1YWJmMTYzMywgMHhiMTk1ZjE0ZiwgMHg0ZjRjNGM1YiwgMHgyMmUzOTNkMCwgMHgzMjdiODYyOSwgMHgzMGNiZWMyNiwKKwkweGNjZTgyZmQ0LCAweDYxN2ZiYzM1LCAweDdiNDMyOGQ3LCAweGExYmM3NDc5LCAweDJhNTdhMmZkLCAweGIxNDlmNTBjLAorCTB4MmZmNzg2MjksIDB4NTBkYWFiN2UsIDB4MWFlN2E0YmYsIDB4M2Y1M2ZiYzMsIDB4ODNhODZkOTgsIDB4ZGU3MGQwYzYsCisJMHhkODU1OWY3YiwgMHg2NWY3OTgzNiwgMHhiZTE5NmZmMSwgMHgxOWI2Y2RmZiwgMHhmM2JjNjBhZiwgMHhiMmY3ZDhhNCwKKwkweDBhNTYzZmIwLCAweGU5MjA1ODc4LCAweDYzN2NkY2Y2LCAweGFhMjU1MTdmLCAweGYzZGYyMTU0LCAweDc5ZWIwNWJmLAorCTB4YzAzNGY2YmUsIDB4MGJiZjYyNWMsIDB4YzRmNjhkZGIsIDB4N2FjNjJkZTIsIDB4NTVhNmY3NDMsIDB4ZTcwNzFiMjgsCisJMHhlMzU0YjQ3OSwgMHg3OWM5Mzk1NSwgMHg3OWFlMzUxZSwgMHg1MGNmYTQyNiwgMHhlMzE3ZDgyZSwgMHg2MmVjMTExMCwKKwkweDhlMWIzM2NjLCAweGZkNmNiZmNmLCAweDJmZThkODRiLCAweGZlZmU3ZjViLCAweGY1ZDkwYjE2LCAweGFhN2Q1ZjhiLAorCTB4YWM4ZjBhMmEsIDB4ZGJmYWUzNWUsIDB4YTdmYWUzNzUsIDB4ZGZkNzFhOTYsIDB4N2ZhZTMzZTksIDB4ZmFlMzY0ZmEsCisJMHhmNWM2ZmRiYiwgMHg1YzZiNTExZiwgMHg3MTgwY2NmZiwgMHg4Y2ViYjNmZCwgMHgzNDEzOWZlYiwgMHgwNmM4ZmZhZSwKKwkweGI3ZTdmYWUzLCAweDcwYmJkNzE4LCAweDhiM2Q3MTk5LCAweGVkMGQ0YmMyLCAweGU1MmZlYmM5LCAweGRiOWFmMTY1LAorCTB4N2EwMWVmOGMsIDB4MjA3NDA5NGQsIDB4YTA0MTY4ZTksIDB4YzY3N2YyODEsIDB4MzBjZjdmYjQsIDB4YzAzZDMyNGUsCisJMHhmNzQ0ZDFiZSwgMHg2ZTNlYzFiZiwgMHhmNGZlNzI5YiwgMHhmYzhhZDIwMSwgMHhmMWY0YzliZCwgMHhlZWMyYjk2ZiwKKwkweGZhMDE3NDE0LCAweDBhZTUxM2E4LCAweDYxNGYxN2Q4LCAweGQ4NTYzNzU5LCAweGVkYTE4MWZiLCAweDEyYmYyOTBiLAorCTB4YmVlMjc5ZjUsIDB4MzZiOTM4NzgsIDB4N2Q4OTRmNDgsIDB4MGE3YWIwZjIsIDB4ODFmNmM5ZjcsIDB4ZjQ3MGYyN2QsCisJMHg4ZmIzMWM3YiwgMHg0ZjVhOGVjOCwgMHg1ZDFiYTU3ZSwgMHhmMTRmOGUxYywgMHhjZmU4MjVkMSwgMHhmMmY0ODI3ZCwKKwkweDMyNzAwMDcxLCAweGU3MWM3YmMwLCAweDRmMWZlMzAzLCAweDhkZmU0MDk5LCAweGQ5MjhiMzZmLCAweDE5ODJmZmVkLAorCTB4Y2RkODMwOTYsIDB4ZTJhZGE4OTgsIDB4OTUzYTRmM2QsIDB4MmY2ZjQyZjUsIDB4ODU4ZmZlMTQsIDB4Yjk1YmUwZjYsCisJMHg5ODUxZWZkYywgMHhjNWU2ZTM4NSwgMHg3YjE0YmNlOCwgMHhkZDc5YzQ2ZCwgMHhlMzAyNzEyMywgMHg0Zjc4MjAwOCwKKwkweGNhMDExYzYxLCAweDliYTczYjVlLCAweGY4YWU1MmQzLCAweGMwNDllZTk5LCAweDRhZTlmY2U3LCAweDZhYjVkOTI5LAorCTB4Y2QzZGU1MGEsIDB4ZmQyMTQxYmYsIDB4Nzg3ZmZmMzQsIDB4MmNmYTE3MTksIDB4NGNiOTVjYjksIDB4ZDg1ZGIzZTIsCisJMHg0ODJlZGMwMywgMHgxNDlhYzNjNywgMHgwNzQxNjI3NywgMHhjMmU3Y2RlMSwgMHhiOGZlODY3NSwgMHhmYzQ3ZmYxZiwKKwkweDBhZTNjZDdjLCAweGQwNjcyNmQzLCAweDY3NWEzMzMxLCAweDBmM2M2ZjVjLCAweDljMzhkYWE1LCAweDBkOTk5YjhmLAorCTB4MDU4MTM5ZjEsIDB4NTdiYzBlYzksIDB4ZmJjNmQxMDMsIDB4N2JmYmNmMWIsIDB4ZDNmYTE0NjMsIDB4N2NmZmY1NTQsCisJMHhjZmUzMDZhZCwgMHg5ZmZhMmUzOCwgMHhmZTg2M2UxZCwgMHg2M2ViZDU2NiwgMHhmNDFhYmZlOCwgMHhiYTE0YzBmYywKKwkweGNlYmZhMzI0LCAweDg3Zjg3YmY4LCAweGMyN2U5MTc4LCAweGJiMmY0MTNjLCAweGJkZmI4YzlkLCAweDIzODZmYzkyLAorCTB4OThjMDkwNTUsIDB4ZTdlNjYzYmYsIDB4MTZkYWJkYzMsIDB4ZTYzYzlmYmUsIDB4OTg0ZDYzNWIsIDB4Mzc2NjYzMzcsCisJMHgzMmZiZTc5ZSwgMHg2ZGYzMDg3YiwgMHhjN2U0Mjc0ZiwgMHg3OTBjYmFjMywgMHgzY2I0ZTk4ZiwgMHhiNjU3ZWZhZSwKKwkweDcxODY1YzM2LCAweDA3MTE1ZWEyLCAweDc4MzVhN2JiLCAweGFhYjdhZTE5LCAweDBlMmYyOGY5LCAweDI3NzI1N2VmLAorCTB4NDBmMTZmN2MsIDB4NmE5ZjAyN2IsIDB4ZGQ0MzA2OGUsIDB4NWUxMDA4ZWMsIDB4MTBiNmI1NTYsIDB4M2RjNTk4ZGQsCisJMHg2ZWYzYWI1MCwgMHhmYzEzMDU3MywgMHgxNDhlMTcxMiwgMHhjYzJkODZmNiwgMHg5ODRjNTk1YywgMHhjMWY3ZjBjNiwKKwkweDU1ZjM4Njc0LCAweGM0ZTlkYTVkLCAweDBiZDVhODdkLCAweDJiY2EyNWZkLCAweGZhMjU5MGFkLCAweGI2YjRkN2FkLAorCTB4OTRhYmRjMTAsIDB4YjMzYjEwNjAsIDB4M2I1MTY2OGUsIDB4ZTFhYWRiZTAsIDB4YmU3ODU0NTksIDB4Njc5MjJhZjUsCisJMHgzZTZkZTcxNiwgMHgzODY3ZjdiYywgMHhkYWJkNTlmYywgMHhjODcyODllNywgMHg4NzI4ZDIzZiwgMHg1ZGI1NmZlZSwKKwkweGQ5NWFmODhlLCAweDkzYzY4Y2JhLCAweDc1NmY2Yjc4LCAweDhkZjU4ZTVkLCAweGJlZDE1ZWFkLCAweGI1NGRkYTgyLAorCTB4NzFmNDgyYmEsIDB4ODYyMTY4MWEsIDB4YzdhZDE2NzEsIDB4YjAzZDcxODksIDB4MDNjNjE5MzMsIDB4MDQ1YjVlY2QsCisJMHhlMWVhYzg5OSwgMHgwNWEzYjJmMCwgMHg1ZDczMWY0NCwgMHg4ZGY0MDYxYywgMHhiYzdkMDNlNSwgMHhmYjRjY2NiMywKKwkweDFkZjNkYmQzLCAweGFmZWRmZWY0LCAweDBmZDE3OThmLCAweDFlMDE2MDdjLCAweGY5OGFmZjUxLCAweGYwMjM4ZmY0LAorCTB4ODg3MjExNjcsIDB4ZjIwMGMxNjksIDB4MjM1NzI1OTUsIDB4NmI4Njc0N2YsIDB4ZGZlM2FkMzYsIDB4YmJjNDlmZGEsCisJMHgxZjI4Y2VjNSwgMHgyMGVmOTJkNCwgMHhlMTdjZWJiYiwgMHhmNzE0OGQwYywgMHgyN2JjMDk1MCwgMHg0NGYwMGZlMywKKwkweDgxNzZmNDcyLCAweGUyZWZkYmE3LCAweGVmZGJiZTdlLCAweGNlYzc5NDYwLCAweGQ1NWZjMTk2LCAweDE0OGQ1ZDAwLAorCTB4MDU5YjI1ZjIsIDB4MDU2ZjZjYTgsIDB4ZWI4MjUyYzEsIDB4MGI0MTYzNjUsIDB4NDlkNjc1ZTgsIDB4YmZkMWRiMmYsCisJMHhjZDdlZWQ4MywgMHg0ZGVhYTE4ZCwgMHg1ODU5OWUzNSwgMHhhYTdjOWM2ZSwgMHhiZWYxZDkxZCwgMHg2MThiM2Y0YiwKKwkweGM0NzRiZTg5LCAweDQ1ODFhYjk3LCAweGM1MWZjY2YwLCAweDFkNzgzZDhlLCAweDg5YTdhZjM1LCAweDVlM2FiNGY2LAorCTB4ZTllZDE3NGYsIDB4ZjdjZjVlMDEsIDB4MjBkNGE5M2YsIDB4OTdmMTQ5NjAsIDB4ZDVjNjQ3N2MsIDB4MmRiZTUxYTMsCisJMHhiMjdjZmM2MCwgMHgzYjYwZTdiOCwgMHg5MWMyZjIxMywgMHhkYjA2YWIzMSwgMHhiZTc0NjI2ZiwgMHg1MGZmYjY0MCwKKwkweDRlMzhlN2I0LCAweDM5NDYyOWFjLCAweGZkZjhjNzNjLCAweDZjODc4MTU2LCAweGU5ZjY4OWM3LCAweGI2MzE5ZjE0LAorCTB4YTY0YWY4Y2IsIDB4ZjQyYmVjZTMsIDB4ZmRiMTk5N2QsIDB4ZDNiZGYxNDEsIDB4MWQzNjM2NzEsIDB4YzcxYjQ3ZGIsCisJMHg1M2RhMjBkZiwgMHgwOGVmM2MxZCwgMHg0NzNmMjFjNCwgMHgxNWVmZGEyZiwgMHhjNzZjNzZlZCwgMHhlZDhkNGJmMSwKKwkweDJiZjhjNTZiLCAweDQzYWQwMDk1LCAweGY4ODk5ZjNmLCAweDlkNTY4ZWU0LCAweGY2N2NjOWVhLCAweDdlMGNjOGVhLAorCTB4OTlmMDU5OGUsIDB4ZjIxYjE5NmIsIDB4MjNhYmZjZGMsIDB4OWE0Y2JlNzksIDB4MGZmN2UzZGUsIDB4N2I2NTBmMjEsCisJMHhiOGEzNGI4NiwgMHgxMGI1ZWFhZiwgMHg0MjFkNTkxZCwgMHhlYzNlMDg4ZSwgMHg4YjRhMjM5NywgMHhmNzE3MTM4ZiwKKwkweDNkMTk3Zjk3LCAweDhlN2VlMTAzLCAweGZlMDBhY2YyLCAweGJlZjM5ZTkwLCAweDA0YzE2MjYzLCAweDk4ZGI5Njc5LAorCTB4ZWYwOTgyYzIsIDB4MTg2NDE3N2IsIDB4ZTUzNzU5ZWEsIDB4Y2NmN2RlMWEsIDB4Nzc2ODY1MTksIDB4YjQzNzhlNTQsCisJMHhmMTNlNThiMywgMHhhZTgyNmRjNywgMHgwYzJhY2E1MiwgMHgwMmJlZjJlZCwgMHg5MjNlNzNhNiwgMHhmNDc5YjU3NiwKKwkweDY3N2JjMzE0LCAweGE0NzRmNTRiLCAweGNiNTdkM2VkLCAweDM2N2NhYmZiLCAweDM5YjcwYjk0LCAweDFmMjM2NTQ3LAorCTB4MzI3NWE0ZmUsIDB4ZWYyMGRmMWEsIDB4ODk3NGEyNmMsIDB4Yzk0NzRiZDIsIDB4YTJlYWI2NTYsIDB4YzdmNTRhNWUsCisJMHg3YWFmM2NkYywgMHhkNzhmYWI2NSwgMHg2ZjlkMTg4YiwgMHg0YjVhZDk1ZSwgMHgyZjgxYzdmNSwgMHg1NmQ3ZmNiMSwKKwkweGEwN2I5NTNmLCAweGZiMGUxNjBlLCAweDQzYWZmNDExLCAweDdmYTEzYjNmLCAweGZkMDIzZmFjLCAweGZhMWRiOTYzLAorCTB4ZDA4N2YyYzcsIDB4ODU2ZmI2M2YsIDB4MTBmZWIxN2UsIDB4ODNlNTg1YzAsIDB4N2YzZTBmZDAsIDB4ZmFjN2ZhMDAsCisJMHhkNTAwZDZhNiwgMHhhM2FkNmJlZiwgMHgyMGQ2ODZmYSwgMHgzNmI2Zjc5NSwgMHhhZGI1ZjNkMCwgMHhkZDVmNTQyZCwKKwkweDdiY2E4Y2JhLCAweGFlNTRjMzVhLCAweGVkNDM1ZDZjLCAweDFmMzdhMTE2LCAweDFmMWZlNzEzLCAweDdkY2ZjNjliLAorCTB4NDY3ZmFmMjcsIDB4ZWVkNWYyOWUsIDB4NDUwNGE4YmIsIDB4OTNjODY1NWUsIDB4N2RjM2M4YzgsIDB4MmYzMWE3NzUsCisJMHg3MDQ3ZjExMCwgMHg5MzFlMzlkOCwgMHhlMDJiMThlMSwgMHgyYjYyY2YxOCwgMHhhMGRjYjk1MiwgMHgyZTk4ZWIzOCwKKwkweGMwYTlkZGRmLCAweGY4NWIyM2E3LCAweGM1NzUxN2JhLCAweDgxYTczZGE5LCAweGNjNTYzNzhmLCAweDJjYzI3OTkzLAorCTB4ZWYxZjhhYWYsIDB4OTU3YWY3YzUsIDB4OGYyYTc1NTgsIDB4ODMxZjkzMzcsIDB4NTUzZjAxNzksIDB4OTEzM2RjZTIsCisJMHg3MDg0YzQ3OSwgMHg3ZjQxOTM2OSwgMHgxZmIzY2MyNywgMHgyNzBlNmU1ZiwgMHg3ODI4NmRlMiwgMHg3Yzc4ZjIyYiwKKwkweGU0ZWNhZDQzLCAweGI2ZDQ5YmY3LCAweDUyY2Q5MTQ3LCAweGJmNzQyZGZjLCAweDEwMmVhZDg5LCAweDA0ZjRhMGQ1LAorCTB4YzI0Zjc0ODIsIDB4NjAzMzczZjgsIDB4ZWQ3MjA1OTMsIDB4ODc0Y2U1ZGMsIDB4YjhkMWFmMzIsIDB4NTA1ZGNhZmYsCisJMHhhOGU3ZDg2MSwgMHhmZDMyMzZlNywgMHhjY2I3ZTgyMiwgMHgxOTRhNGZiOCwgMHgzYmUxOWI3ZCwgMHgwY2Y3ZGU1YiwKKwkweGRkY2YxNmVkLCAweGI3ZjlmNjg2LCAweDIyZjJhZDE0LCAweDhhMzI0NzNlLCAweGFmZDc1OTNiLCAweGQ3MDAzOTYwLAorCTB4MDQ0ZDhlYzIsIDB4YmRlMDUwNTcsIDB4ZmRmOWQxNTcsIDB4ZWZjNWZiZWQsIDB4ZmZmYjA4NDQsIDB4MmY4MTJlYzcsCisJMHhkN2RhN2FkYiwgMHg2YWYzNzU4ZSwgMHg4NGQ4N2E0OSwgMHhhN2UzZTdmYSwgMHhlZThlNDlkMiwgMHhmZTQ0YzQ3ZCwKKwkweDYyMmM3MWVkLCAweDAxMzM3OTQyLCAweGJmNmM0OGNjLCAweDU2NzI2ZjAwLCAweDE1MWNjYWU5LCAweDU3NGNlNWViLAorCTB4OGIxMTdlYjEsIDB4ZWMwOGJlZDMsIDB4MTdhNDNhZmYsIDB4YjExZmZmYjAsIDB4N2U0Y2ZkNDMsIDB4YmYzY2M3ZjAsCisJMHhiYTdhNGEyYiwgMHg4OTY3YWM0NCwgMHhkMTZkMDdkYywgMHg3M2MzZmQ5MiwgMHg2MzVmYzhmMywgMHgyNmQ2MDczYywKKwkweGRjMmIwMWY2LCAweGVmMThkOTU1LCAweGZmMjYxZGVkLCAweGQ2ZmRlOWNlLCAweDFlYjAwNWQ0LCAweDJhM2E5Y2NlLAorCTB4YmEwZGYzZTUsIDB4ZDE3M2M4NjksIDB4YmYyYWJlY2IsIDB4NjIzZDAxNmMsIDB4MDg2NTk3ZTQsIDB4OWZjYTk5ZmYsCisJMHhhYWJiYTE2NywgMHhmODljNzQ3OSwgMHhlNTJjY2RhNiwgMHg3MjhlOWU5OCwgMHg0YmVlYTA2YywgMHgzYmEyYmIyNywKKwkweDg5YTNmMDg3LCAweDFhZGJkOWY1LCAweDM5MDBmY2E0LCAweGQzNzdlZDRmLCAweDU2MGY5ODVjLCAweGY3NGZmMjIyLAorCTB4YjUzYWRlYjUsIDB4NjYxZjIxMjYsIDB4NTJkZmEwYjcsIDB4M2Q0NWFiMTYsIDB4ZjI2NjVhNWEsIDB4YWYyN2E4NDUsCisJMHgxZjYxN2ZjMSwgMHg3M2M3ZWVkZCwgMHhmMzA1NWFmYSwgMHhjNzFlMThhMSwgMHhiYWJjZTlkYSwgMHg3OTRhODVmNiwKKwkweDRiOTFkYTQwLCAweGIwNzYwZTk4LCAweGUxNjUxMWMzLCAweDk5N2U4MWIyLCAweDQ3N2M4M2YwLCAweDVjY2ZmNWM4LAorCTB4YWQwZjM0MzUsIDB4M2U0N2RhNDAsIDB4MzNlY2RkZDQsIDB4NzQ4NjNmODcsIDB4OTk4NzU5ZjcsIDB4NjMwOWU1YjMsCisJMHg5MTgzYTk3YiwgMHg2YTU0NWI5ZSwgMHhhNjBhZTg4OSwgMHgzZGQzYjQyMywgMHg4NTBlZGE4YiwgMHgxYzIxMTVlNSwKKwkweDUwZjNiZGQzLCAweDI1NGMxZjhmLCAweDUyZGQ0ZGJhLCAweDdiYzM1NzQ1LCAweDc5ZjVjMTRjLCAweDFlOTljNzAwLAorCTB4MWE0OWEwZmQsIDB4ZDM1ZWYwNTcsIDB4YjQyZWNiMDQsIDB4NWUyMmM3MWIsIDB4YTVkMTljNzAsIDB4NjI4NWM3ODQsCisJMHg1NzVhZmJiZSwgMHgxNTllOWUxMCwgMHhlZmNiNjhmMywgMHg4Nzg3M2JjNywgMHhjZjc4ZmNmOSwgMHhlOTBlYTJlOSwKKwkweDczY2UzMWJmLCAweDM3ZjU2NTQzLCAweDk1YzZkZWYwLCAweDc0ZDg1NTMxLCAweDMzYWU3YzQ2LCAweDUzY2UyNmM3LAorCTB4MzgwMmUwMDYsIDB4NTUzODQ1OWYsIDB4YmZmYzliODQsIDB4OGY0ZDdlN2MsIDB4YzgxOWJmNzAsIDB4YmI4YTVhYjEsCisJMHhjNGIxMzI0ZSwgMHhhMzJjYWJiOCwgMHhjOGNkZmU0MiwgMHg0ZWJjMTE3MywgMHgwYmE5ZGNlZiwgMHhkZmFjNGEyZSwKKwkweGI4ZmQ3NDQ0LCAweDc2MWZlN2MyLCAweGNkMmYzYzZhLCAweGZkMTNkN2VmLCAweDdlZTRlYmM0LCAweDQ4N2Y5YzU5LAorCTB4ZGZmNmYwMTEsIDB4ZTc5ZTM2ZTMsIDB4NmM1ODNhNjEsIDB4MGQyZGU2MGIsIDB4MjVmZTFmYjcsIDB4YzRhNGNhMmUsCisJMHgxOGU4MzBmZCwgMHg2NDlkNTcxOCwgMHg3NTlmM2NhMywgMHg3ZjRiOGYzMiwgMHgzMzdjYzc0MywgMHg4YWZjZjEyYywKKwkweDZhZTlkMDRkLCAweGU0YWYzMWE3LCAweDc3YjcxZTVjLCAweGU4ZjU4OWNlLCAweGM2YmU3MWIzLCAweDU2Nzk2NGI4LAorCTB4ZGQxN2JkYzIsIDB4OTFmZmU0ZjUsIDB4NmViZWNjNzEsIDB4ZmQyZTBmOWUsIDB4MDkwNDRiNmIsIDB4NzhlNTFkZjQsCisJMHhhNTU4N2JlOCwgMHhlZTkyZTVmOCwgMHhhMTdkZjk2YiwgMHg3YmEwMWU4NywgMHgxZDJmYTE1NiwgMHhiYzVlYTFlOSwKKwkweGU4YzZiZjVmLCAweDNiYjA1OWVmLCAweDFmNDUyYWIwLCAweGM0NWE1N2VjLCAweDQ4ZDdlNGMyLCAweGZiMjUyN2Y2LAorCTB4Mjc5YjdlOTEsIDB4NTYzZTY5ZjYsIDB4OTNjYTcxOGUsIDB4YTU4ZjhiZWIsIDB4ODhhNjdlZTAsIDB4OTFkYmI5ZDEsCisJMHg4Zjc0OTNlYSwgMHhlZGZiNTgzMSwgMHgyYjI5NGY3OCwgMHgyNGY0ZjdlMywgMHgwNTI1ZmJhZiwgMHgzZWYzYzIxNiwKKwkweDFjNjNhZWI5LCAweDM3ZDg2N2U0LCAweGJlZmZmMzg5LCAweDdkN2VjZjE3LCAweDk2ZjNmNDBjLCAweDgxY2UxOGFlLAorCTB4MDk5YmE1YmMsIDB4YWU4MWUzOGYsIDB4YWM2NGVjYjEsIDB4YTBmYmE4NzYsIDB4NWY0ZGYzYjIsIDB4YTVjMGJjZWQsCisJMHg2OGQ3ZGZjNiwgMHg5NjM5ZWFlYSwgMHhjYmJjOTNhYSwgMHhmYTc4MDdjYSwgMHhhZDNlZmQ4ZSwgMHg0ZTI3Zjg4YywKKwkweDU3NTEwN2JmLCAweGI4NDFlMWM0LCAweDdlY2JmY2YxLCAweDEzNzMyN2QzLCAweGJlN2M2MGU5LCAweDdjODNlZGM2LAorCTB4YmY5MzU3ZDMsIDB4Y2ViODQ2MzUsIDB4NzU5OWJkOTQsIDB4MWM2Yjg3MGQsIDB4M2QxYmQ1YzIsIDB4Yjc2ODk1OTEsCisJMHgwZmY2Yjg0OCwgMHhhNWZhYmY3MywgMHg5MzRmMTU1ZiwgMHgwMTIwZmE4ZCwgMHgxMmZmNTM0ZiwgMHg4NjViZjY5ZSwKKwkweGMwOTY2Nzg2LCAweGYyOGU0ZmNmLCAweGI3MDY0MmZiLCAweGQ1ZmQ0NTdmLCAweGNjZjc4NDYxLCAweDUxZWJiMTYzLAorCTB4YjNiYzAyM2MsIDB4NTNkZTdmMDgsIDB4MTUzMzE0NTksIDB4MTRhY2ViZjgsIDB4ZTQyOTU5ZjQsIDB4YThjZThmOGUsCisJMHgxN2RiZDBiMCwgMHhhNzVlN2U1MywgMHg3NzQzZGJjNiwgMHg3OWUwOGEyZSwgMHgwYjhiZGYwMiwgMHhlMGRmZDEwYSwKKwkweDdiYTU2ZTNjLCAweDc5NDk0MjllLCAweDJmNWNiMjIyLCAweDU3M2ZiMWU2LCAweGFiMGYxMjE5LCAweDc4YmNiOWYzLAorCTB4ZDRmOWI1ZjEsIDB4NTk2ZmJkZGYsIDB4ZWQ4M2NhMTksIDB4NWVmNWRmMjIsIDB4ZWYwZGE3NTcsIDB4YzQ3ODk1ZWYsCisJMHgyMTk0MDU3YSwgMHgyYTExN2M0YiwgMHgzZjJiN2JiYSwgMHgyMThlZTliMywgMHhmMWYxMzNjNiwgMHgxYmUyNGJlZSwKKwkweDU3MmM5ZTM5LCAweGJiNzI5N2U0LCAweGUyYWEzOTU0LCAweDJlZmI4NzM5LCAweGQ5ZWU5MzdkLCAweDIzNTJhZmJhLAorCTB4ZTMzN2ZiOTksIDB4ZmUxMjdkN2YsIDB4N2Q2NjZmYTMsIDB4OGFjYmQzOWQsIDB4MmFhM2Y0N2MsIDB4MDM3ZGE1ZWYsCisJMHhmZTI1MjFlYSwgMHg5ZmM0MzJiMywgMHgwZmYzNDgyNSwgMHgzYjY1NmRiZCwgMHg2YTc4YzE5NSwgMHhlNzJiZjQxNCwKKwkweGUxMmZlNzI3LCAweDgwYjY1ZTc2LCAweDdhZTA5OWNlLCAweGM1YWJlMDIwLCAweGE0NGY1MmZiLCAweGYzODdiZDBiLAorCTB4YTk3MTNkMjIsIDB4NGM4OWNmYzYsIDB4ZWY1ZDY4ZDIsIDB4Y2U4NTNjOWIsIDB4ZjkxN2VjZjUsIDB4MmM0YmYxMTQsCisJMHhjMzJlZmU0MywgMHhmNzZmMDIzMywgMHgwYzQ1ZmI5ZSwgMHg3NzBkYTllZiwgMHgwNTVlZTk5YiwgMHhiZjc4ZjVhNiwKKwkweDdhMTQ3NDA5LCAweDlhN2JhMzVkLCAweGYxNmE5ZTgxLCAweDVmMTdhOGRlLCAweGZiODY5YjNiLCAweDY2ZjkwM2U4LAorCTB4M2U0MGZiODIsIDB4ZTc3ZDg3OTcsIDB4NmYzYTVhZDQsIDB4MmU2N2RhZjMsIDB4OWZmZTgxMzUsIDB4NWQ4NTU3Y2UsCisJMHgzOWUxOGIxMiwgMHhmYzE1OGQ5YSwgMHhkODQzODBkYywgMHg0ZWQ3OGUwMSwgMHg4ZWZjMjAzNSwgMHgyYWIzZGZjOSwKKwkweDRmNzY3YTA5LCAweGRiYmU5NWJlLCAweGY5Njc4OTY4LCAweDQ4NzQwZTMwLCAweGRmZWU1MTY1LCAweGZhZWZmYmExLAorCTB4MzhiYTBiY2YsIDB4OGYyYjlhMWUsIDB4ZThlMDlkOTIsIDB4M2RlMmY3ZTYsIDB4NWMxM2FmOWQsIDB4Nzg0MWY3MDgsCisJMHgzM2VlMzI5ZSwgMHg1N2I2M2Q1NywgMHgwNmEzNzhjMiwgMHhmOGJhNzdiZSwgMHhlMjRjYTY3YSwgMHg3N2RjZDBmNywKKwkweDc4NWRjZmU5LCAweGMyYmE1ZWVmLCAweDRiZThmZWU4LCAweDM5MDZjYzBhLCAweGQ3YzQ1ZjVlLCAweDE2MzJiM2ExLAorCTB4ZTVmYzg1MWIsIDB4YjZhZjI4ZDIsIDB4MGQ5YjdhMzMsIDB4MTdjOTdhZWQsIDB4ZjRhOTQ3YTMsIDB4OTc5MTZhZGQsCisJMHgyOTcyN2FiZSwgMHhlM2E0OTlmMSwgMHg1N2MxMDViOSwgMHgwMjM2NmU5MSwgMHg3NjQ5M2M1ZiwgMHg5ZDMwMmM0ZSwKKwkweGM3MmFlM2YwLCAweDk1YzdlM2ZjLCAweDNmYjcxZDU4LCAweDJmZDQyZTJjLCAweDgxOTMyNmE1LCAweDM4MGI4YWRmLAorCTB4ZWMxMmM4ZGQsIDB4ZWU3N2IyNTIsIDB4ZjUyY2I0MTAsIDB4YzZjNDViN2QsIDB4YjdmZmJmMzAsIDB4YTNhNTY2ZTcsCisJMHgyNzk2ZGE1ZCwgMHgwZGJmM2NlZCwgMHgwOTVkYjVmMSwgMHgzOGUxMTdhNCwgMHhiZWQyYTVmZiwgMHg0ZWQ3YzVlZiwKKwkweDZkYjhlMDM0LCAweGRiZTQyZjMwLCAweDU4ZWE3ZTdiLCAweDliNDlmNjhmLCAweDJhN2M0ZmNiLCAweDI2ZGNkN2M3LAorCTB4OWZiYzFlYjEsIDB4MmJmZjE2ZmQsIDB4YmI4YzZmZTgsIDB4NDc0NDdkZjksIDB4NDM2MzVjYTYsIDB4NGNmNzg3ZmEsCisJMHhhZDdiY2ZkOCwgMHhkODFhMGJmOCwgMHgwN2Y5MGQ0ZiwgMHhjZjY2YmExNiwgMHhiMTE2ZWZjMCwgMHg2YmI0MmFlMCwKKwkweDg2YTg3NTE3LCAweDExZWUxNzdiLCAweGI5ZTE2MmYyLCAweGQ4NGQxNjE0LCAweGZjOWMyYzFmLCAweGI2MzczYTJkLAorCTB4OGIxYTVjZjAsIDB4OGY3NWJkODIsIDB4OGY3ZDE3MzgsIDB4MGFjNDU3MzgsIDB4NDQzYjNkMzgsIDB4ZGZlNTE1ZTksCisJMHgyNGJlZjdjYywgMHhjYmY5OTViZCwgMHhkZjM5ZjNiZCwgMHhiN2U4MDJiMywgMHgxNGIxZTk0OSwgMHhhNzFiMTBjMSwKKwkweGViY2U5ZWZjLCAweDYyZWFkN2JjLCAweDc4MDQ5MmQxLCAweDA0NzNjZDA3LCAweGQzOGMyNjhiLCAweDFiMzlkZWZmLAorCTB4N2Q2MDY3Y2QsIDB4Y2MwZWZkMzksIDB4Nzg3ODQxZDcsIDB4Nzg0YmQ1YWYsIDB4OTFmZmJlMWMsIDB4ZjQwZTNjMDYsCisJMHhjNzgwY2EzZiwgMHhkMDk3ZmRjMSwgMHg5NmI1ZWZmOCwgMHgxM2ZmNDk3ZSwgMHgzNzVmZTk4NiwgMHhlZmQwM2ZjMCwKKwkweGY3YjcxYTY4LCAweGE3MWZmY2M4LCAweDg5MWRkZjAyLCAweGY5ZWRiZGRlLCAweDMzMWRmYzRhLCAweDAxN2VmZDJiLAorCTB4YTZhY2VhZWIsIDB4MzM4Zjg0NzMsIDB4ZTc3YTY3M2EsIDB4ODNiZGRmZTEsIDB4ZWU3NzlhZjksIDB4OGM3MGY4YjIsCisJMHhhZTdjNzMzZSwgMHgzMzNkMDg2ZiwgMHg3OGMyYjk5YSwgMHhjNzJjOTc5ZiwgMHg3Y2QzMTQxNywgMHhiNGRiOWY5MiwKKwkweDMyZjMwYjg4LCAweDBiOWFhNTZkLCAweGM2ZDExZjdmLCAweDcxYmI5MTYyLCAweDIzNjk1MmRmLCAweDQyZTMyNzM5LAorCTB4ZTUzZmRmYjIsIDB4M2IzY2YyYTksIDB4NmY3OTA3YzksIDB4OTc5MTEyY2IsIDB4NWUwOGVjNTcsIDB4ZDRiZWViODEsCisJMHgxM2ZjZGVkNCwgMHhkMjgzZjZmOCwgMHhjYzM3M2EzNiwgMHgzM2Y2OWI5OCwgMHhlMWEzNmUzMiwgMHhhMzE1YmYyZiwKKwkweGYwYzAzMDVmLCAweDdhMTNjZGZjLCAweGY3N2UwNjcwLCAweDE4MjcxMDQzLCAweGQ4MmY1MWM3LCAweGI1YmNjNDFkLAorCTB4YjhkZjYyMGQsIDB4ZmFmMzFlYzEsIDB4MGRlNmU0MTIsIDB4YjM1N2RhMDUsIDB4ZTg5M2RhMTcsIDB4ZjcyZmQyNzYsCisJMHhkZWRkMzk0NiwgMHgyMjdlODA1MCwgMHhmY2M0ZjYzNSwgMHhlZGI3Y2MyMiwgMHhlOTc2ZjcxMSwgMHg1NTc3OGExNiwKKwkweGZlZmJhMzFlLCAweGZmN2RjYmU2LCAweDhlYmNlNDlhLCAweGQxZGEzNzdjLCAweDg2OTRjZTMyLCAweDZiNjg3Nzc5LAorCTB4YmVmN2U0NmMsIDB4N2FmMmE3ZDUsIDB4YTA4YzdmZmQsIDB4ZmZiMDEwNzMsIDB4Zjk0MzJkNDksIDB4ZmVlNTVmYjIsCisJMHgzYWRmMTEyMCwgMHg2N2QwZTYyYiwgMHhmOTQwNThkYiwgMHhlNDFmMjJmNywgMHg3NDRiZjc2YywgMHgzNWQ5ZTRhZiwKKwkweGViZmQ2ODYzLCAweGRkM2VmODVmLCAweDk3M2ZiNzBiLCAweDQzYmViMWViLCAweGY1NjNkMjRlLCAweGRlMTU1ZjU2LAorCTB4OTczZmI4NWIsIDB4NWE5ZGFiZGIsIDB4YzEyMmFkMzQsIDB4NTc5ZDVkN2UsIDB4ZTNmOWYyNGQsIDB4ODk0YzYzMzUsCisJMHgwYWVmOGZmMSwgMHhmYTUxYjA3OSwgMHgxNTc4YjUzNywgMHhiOGY5Njc5ZSwgMHhkMjMzZmEzMiwgMHhmNGVjMDdhMywKKwkweDgzYTY1MTNiLCAweGZiYTJhYmJmLCAweGU5NWEzNzJkLCAweDBmYWEwMTc3LCAweDg3NWNkYjhlLCAweDhkMzRjM2ZiLAorCTB4MDc0ZDkxZjIsIDB4OTljZjA0ZWQsIDB4MmQ3ZWZjNzUsIDB4NWRlNTE2ZmMsIDB4ZjQ5MWMxZDMsIDB4YTlmNTU2ZmIsCisJMHg2YzI3Y2E3MSwgMHg2MDk1ZjE0YSwgMHhlMGZlYWZkYywgMHhmZmQ3YmE1NCwgMHgwNTcxODZlNCwgMHg2NDRlZmYyOCwKKwkweGFmNzQwNWVhLCAweGY0M2MwNmYxLCAweDYzNDNmNTA5LCAweDE3YjVmM2Y5LCAweGU3NTU3OWQzLCAweDUwZTBkNGM2LAorCTB4OGZhOTEwN2UsIDB4ZGFlZmVmOTIsIDB4ZGJkZTViOWYsIDB4NjcxOWY4ODUsIDB4N2RmY2ExZjMsIDB4YjhmMWYxNGYsCisJMHhkOWYxMmJlZiwgMHhmOTE1YzUzYSwgMHhkNzdhZDJmOSwgMHhiYzdkZmE2OSwgMHg2Zjc3OGVmYSwgMHg0M2RjZjQ2MiwKKwkweDczZjcyYjc0LCAweDBiZDVlM2M5LCAweDEyZGZiNTdkLCAweDRiYmY4YjlmLCAweGUwNTJiZjU2LCAweDYyNGVmYzVkLAorCTB4N2U5Y2E5YmQsIDB4N2RlMjRmYWYsIDB4YjczZGQyNjMsIDB4MjRmZDA4NGYsIDB4NjlhZjkzY2IsIDB4ZDgyMDVmNzQsCisJMHgxZmU4MDUxMSwgMHg0YWQ4NzkzYSwgMHhlMzcyNzY3NCwgMHgyZWFmM2EwNCwgMHg5YzA3YWJjNywgMHg0ZjJmODBiOCwKKwkweDcxMTNlODY0LCAweGYyMTY5ZjVkLCAweGRmMjU3ZWFhLCAweDMwZTdjYWE3LCAweGU3N2YwYzdlLCAweGE1NDg3ZTMwLAorCTB4NTczZWFlYmMsIDB4OTJlMzBkM2MsIDB4ZWY1OTNkZjIsIDB4NGFiNzRmOWYsIDB4M2ZiNTk3YmYsIDB4NmY1YTQ1ZjcsCisJMHhmNDg2MjdhMCwgMHg0OWMxN2E2NCwgMHg4MmY0M2E3YSwgMHhlN2FlMTc3NSwgMHg4YzJjOTVjNywgMHg1YmYwY2ZmZSwKKwkweDhlYzdmN2ZjLCAweGZkOTJiMjFjLCAweGVmOWM3N2RjLCAweDlmZGQwNzZmLCAweGUwMTc4OGU2LCAweDE3YTFhMWZkLAorCTB4ZWIxYzkyNDYsIDB4ZTBlZjhmY2IsIDB4ZGY5ZGI2ZjYsIDB4ZjA0NmY4YWIsIDB4Y2RmZjExNjIsIDB4ZTYxMWY3MTEsCisJMHhmOWY3OWRhMCwgMHhlZDE0N2IyMSwgMHg5ZTI5MjgzYywgMHhiZGJiNjYxMCwgMHgyYTcwZmNmNCwgMHg5NDBmZmY0MywKKwkweGNhNjNjZjE0LCAweGVlZmQyZjAxLCAweGRmMTc2YjBjLCAweDNiZmJlOGM3LCAweDUxNjM4MjBiLCAweDBjNTlkZjJlLAorCTB4ZmJmMDNiZmQsIDB4ZTdkZWY0NTMsIDB4NTIxNzgyYTMsIDB4NWNiMThhMGMsIDB4ZjUyZTVlMzEsIDB4YTQyYzFmOWIsCisJMHg1ZTY3Y2FlNywgMHhlZDJhN2JmZSwgMHhlZDQ2M2RhMiwgMHg2MmYwNmIyMSwgMHg5Y2FmYzc5YSwgMHhmMzEwZTc2YywKKwkweGVlZjdhYWZjLCAweDQxMTgyZDFkLCAweDA2ZTEyOGViLCAweDk4ZGQ5MzNjLCAweDA1YjM5NzhjLCAweDNiN2JmMTI2LAorCTB4NzRjOTFmMWMsIDB4NWY5ZWJmZDksIDB4NWZmYTFmMDIsIDB4MjFmNmJjZTgsIDB4YzZlYjhlYmUsIDB4NTkxY2I4NTksCisJMHg2M2VjODEzYiwgMHhjODYyOTZkNiwgMHg4ODcxNWI5ZiwgMHhiYmQwYzNkZiwgMHhkY2ViNDljMSwgMHg4NDNmZjY2NywKKwkweDg2ZmUyOGZhLCAweGVkN2JmMTk5LCAweDNmNDAyMmMwLCAweGY5YTFlNGM1LCAweDRmOTEyM2U1LCAweGNmMmQ2NGJmLAorCTB4ZDFlOGZiYjMsIDB4MzllNjBiZjcsIDB4ZmJmMjVjZjAsIDB4ZDJjOTczODYsIDB4YTQ5ZDA4NWYsIDB4ZTFjNjNmYTEsCisJMHg5N2U2ZDNkMywgMHgyNTVkN2I3MSwgMHg3YWVmZjhmOCwgMHhmNGViMzQ2ZCwgMHgwZGUxNmJiYiwgMHg3MTFmYzhlMywKKwkweGE0MWZhMmQyLCAweDc3NWI4N2RmLCAweDRhZTkwOTgxLCAweDc3ZjIxNzJkLCAweGJjOWY5ZjEzLCAweDdiZGU0YjJmLAorCTB4OGE5ZjhjOTUsIDB4N2Y5MjYyYzIsIDB4MzM3ODJjNGQsIDB4ODI3ZWExZGUsIDB4NjFjMjU5ZTksIDB4OTFmZmY3NDYsCisJMHg2OTg0ZGY3YiwgMHhlMjlmOWE4OCwgMHhmNDg1YWNiNiwgMHhmNjdiZTBjMiwgMHhiYmYyNWYyYywgMHhmNWJiZmY2YywKKwkweGY0MmI1YzJhLCAweGQzODc5NWVmLCAweGUwN2VhZjUwLCAweDNhNDZmYmUyLCAweDVkN2E4ZjdkLCAweGMzNmNmM2U1LAorCTB4ODNhZjMwMGYsIDB4NGUxNGE2MDUsIDB4ODc5Mjc2YTIsIDB4NWRiYzI4MWYsIDB4ZjM0MWI5Y2EsIDB4N2VjMTdhNDcsCisJMHhlYmU4M2RmMCwgMHg3ZmVlNDI5YSwgMHg3MTBjYWU2MywgMHhjMTZjMmJjOCwgMHg5ZmE5NGQzYywgMHhjMjY2OGE0MiwKKwkweGRjYTdmMzczLCAweGUzZDIxYTdhLCAweDE5YzViNWE5LCAweGM2MGYzMDJiLCAweGRhMjU2N2FkLCAweDhjYTNhMWQ1LAorCTB4NzhlYjhiY2UsIDB4ZjhjNWY4ZGYsIDB4ODlmZTMyZmIsIDB4OWZkYmY3ZTgsIDB4MjQzYmY0NjEsIDB4YjRlNGYzYzMsCisJMHhlZDg5Yjk5ZSwgMHg5ZWI5MGE3MywgMHhmNjI4NWY5YiwgMHhlNDRjODU5OSwgMHg4ZGUzMjY1NywgMHhiMTYyZmJhZiwKKwkweGYwNzk2YWVlLCAweDI2ODdkYTcyLCAweDRiNzhiN2JkLCAweGE0ODdhMGJhLCAweDdmY2ZlZGU3LCAweDFlYTBmMjk3LAorCTB4NDkxM2RlMzYsIDB4ZWYxODVmYjEsIDB4NjEyYzU3ODMsIDB4NTMyYzQyZTUsIDB4NjFiZGFmMjgsIDB4MGQ3Mzk3MTMsCisJMHhiOTJjY2VhZiwgMHg1ZWU5ZDc4YiwgMHhlZjNiNjk4NSwgMHg1OWUzZGZhMSwgMHgxMmNhZWJiMCwgMHhhZDE2ZTVjNiwKKwkweDA1YzdhNDgzLCAweGI0MTJmZTA1LCAweDU1NWJlMmUzLCAweGMzNDVmMjE3LCAweDUxZTA5NTE2LCAweDU2ZDczZWNkLAorCTB4OGI3YTdlNzgsIDB4MDZiYmVjOTksIDB4YmNlOWNmMDEsIDB4OWJhZDFhNjAsIDB4ZTAwYjM0YzYsIDB4NGMxNmI0ZmQsCisJMHhhYjc1ZmIyMywgMHhhNGExZGRmOCwgMHg2ZjdiYzA3OSwgMHhlMDQzMTU2YSwgMHg5OWQ3YzZjNywgMHgwNDNjNTNmMCwKKwkweGEyNjFiYzFkLCAweGJmODA1YTc1LCAweGVjNzA4OTBiLCAweDc5YmZjODU0LCAweDMzNzgzZjNhLCAweGZlYzE0ZmQ2LAorCTB4YWJlOWNmMWYsIDB4N2RkMDk2OWIsIDB4M2VmOGM5MzYsIDB4N2QxMjBiNmQsIDB4OTFmMzE2MmUsIDB4NDcxZTRjZjgsCisJMHhmMTBmYjNlMiwgMHgyYmQyZjY4OSwgMHg4NWVmNDg1MywgMHg2MjkxNTQxZSwgMHg5ZmRkOGJkOSwgMHhkYTdjYmVkMiwKKwkweDk5ZGYyYmExLCAweDgxMzdjZjhhLCAweDllYTNhMmRkLCAweDZmYjNmNTFkLCAweGEzNWI5ZWEzLCAweGZlN2E4YzUyLAorCTB4OTYyY2UyYTEsIDB4ZmY3MWFmYTQsIDB4MzlmNWZmMzksIDB4M2QwNGE2NjksIDB4ZjFjODNlYTksIDB4YTRlNzNhYTQsCisJMHhjZmY3YTQyZCwgMHhlYmU5MWQ3ZSwgMHhhYWNiZWU4NCwgMHhmMWVmNzg0OCwgMHg4M2I4ZmVjMiwgMHgzN2VhYmQ2MSwKKwkweGM3MGQyMWZkLCAweGE2NmY1ODY5LCAweGU5NzVjOTc5LCAweDdjYTA3OWMzLCAweDIwOGQ0ZjZiLCAweGM1ZTVmN2ZkLAorCTB4NGViOTVmYTksIDB4ZWI4ZGY0ZmQsIDB4ZGUwOWU5MjAsIDB4OTc0MmFmZmIsIDB4ZjI0YzI3MTgsIDB4YjA1MTU0ZTgsCisJMHg5ZDA0MzdjYSwgMHhjNjAwN2EyYywgMHgzOGI2ZmVjNSwgMHhmM2QyZmVlOSwgMHhhM2UyNTcxZCwgMHg1ZjA1YmQ3ZiwKKwkweDcxZDcxZDUzLCAweGQxZjkxMTQ3LCAweDc0Njg2ZjRkLCAweGZiNDRlMGM4LCAweGM3YzgwNTU1LCAweGQwMmZhMGY1LAorCTB4YzRhZjUxNmYsIDB4NjQ3YmExZGYsIDB4MWVlOTU5MGYsIDB4Yjc0ZGZhZTYsIDB4ZDVlMzhjZGMsIDB4YjA5YWI3MWYsCisJMHhhYmUxZDRmZCwgMHg0OTVjMTIyNiwgMHgyYTc4MGFlYiwgMHhmYmRlOGExOCwgMHhiZTA1ZTI4YSwgMHgzZDgxZmMwNCwKKwkweGU3MmRmYzQxLCAweGMxMzcwMDkzLCAweGJhMjlmYjAxLCAweDA4YWZhODhmLCAweDBlNDEzM2Q2LCAweGVkYzg1OWJjLAorCTB4NjVkZjc4MmUsIDB4ZjdlNmZhMjEsIDB4ZDdjZmY1NjEsIDB4NTc1ZjM0OTUsIDB4NjRkZjdjZDIsIDB4MTdjY2RmNDQsCisJMHg3ODJjZjlhNCwgMHhlN2MyNmFkYiwgMHhiNmJmZWUwYiwgMHhhNzNkZjcwNCwgMHg3OWE3NGRkNiwgMHg0ZmYwY2E5ZCwKKwkweDU1M2FmZTQ0LCAweDIxMGZmZDAwLCAweDBmZGMxNzJmLCAweDBiZmIyY2YzLCAweGQzYjc2Y2YzLCAweGNmM2IwZDdhLAorCTB4ZjYwZWY4OGMsIDB4ODlmOWU2MTcsIDB4Y2YzOTQzYTAsIDB4MGQzZDM0ZjcsIDB4Y2Y0M2Y5ZjMsIDB4MmVmZDBjYWEsCisJMHhjNmMwZmNhMSwgMHhiZjRlYmNhOSwgMHg3MzMyMTcxMywgMHg0YTZkMDg3YSwgMHhkZWRmN2NhNSwgMHgwNGZiZmU2ZSwKKwkweDc4YzAwZTUyLCAweDI2MGY0OWU3LCAweGQ1NTM4N2EyLCAweGQwYzllNmZhLCAweDNmMDdmZmRmLCAweDAwYjcxNzM3LAorCTB4MDAwMGI3MTcsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RjZGZmMDAsIDB4ZDU1NDc4MGIsIDB4NzMzZWZmYjUsCisJMHg2NDkzMjY2NiwgMHgwODEyNGM5MiwgMHgzYzk4NDA4MSwgMHg0OTg0OTAwOSwgMHg3NjhhODgwMiwgMHgwMmQxMDQ3OCwKKwkweDg5Nzk0ZjBkLCAweDQyMTAwNzkzLCAweDY5YjVhMDVlLCAweDAyNDBjZDZiLCAweDM1MGQ0NWEyLCAweDAxZDQ1YTJhLAorCTB4MGRhMmEyODEsIDB4YmMxNTBhMGEsIDB4NDU2MjJhMDMsIDB4YjY4YjU3YzUsIDB4NTE0MDI2ZTUsIDB4NWVhMGM2NzksCisJMHhmZmQ3YjVhZSwgMHg0ZTdkYWRmYSwgMHg1NDkwY2U3MiwgMHg3ZGZiZGVkYiwgMHhkZjFmN2NmZiwgMHg1YWZkOWY2NiwKKwkweGQ3YjVlZDdiLCAweGU3YmRhZjVlLCAweGNiYWEzZGMyLCAweGU0ZTIxNmVmLCAweGZmNmYwNWRkLCAweGY3YTUxN2JjLAorCTB4ZmM4MTJlYWEsIDB4MDJjZGRmNTgsIDB4MmNjMzhmZjksIDB4OTM0YTE0ZmUsIDB4ZmU3MGE2OGIsIDB4YTU2YjliNjUsCisJMHhhNjg5YzQyMiwgMHhhMTQxZmRiZiwgMHgzNjdkODVmYywgMHgwYmYyYTBiNywgMHhjZWY3NDUyOSwgMHhlYThmN2U0NiwKKwkweDJmZWQ0MTVhLCAweDI1OWY2ODBjLCAweGQ4Yjk3Mzg2LCAweDVkZWFlNTQ0LCAweDJlNTA5YTIzLCAweGNhZTYxZTFlLAorCTB4MGRmMmYyYTAsIDB4MDk2NDQyNjEsIDB4Njg1NmZiZmUsIDB4M2JlOTIzN2YsIDB4NmJhNTBiNTIsIDB4MzQ3ODZmNTUsCisJMHhmZDJmNGRhNSwgMHg2ZmE1Yzk0NCwgMHg1NzhmMzc1NiwgMHhmNzI0YWJmMywgMHhiOTdlMzRkZCwgMHhmOWVkNTg1NSwKKwkweDM5OWVkY2E4LCAweGYzODg0NzJkLCAweDAzMTM2ZDdiLCAweDIzM2YzMmQ5LCAweGIwM2ZjYjg3LCAweDVkOGQ3OTUyLAorCTB4N2JmODVhZjgsIDB4MGU2YTdkYWQsIDB4ZDJiNmUyOGYsIDB4MGZhOThiMzgsIDB4ZmFlOTRhOTEsIDB4ZWE2MGVmMTgsCisJMHg5MzhkMzE3ZiwgMHg4YjdkZTM0MiwgMHgwZTVjMWZiZiwgMHhlN2NiMGVkZiwgMHg5ZmE4OGEwYiwgMHhmNjYyNmQ3YiwKKwkweGY1NWRkOTczLCAweDRkZGIzNGY0LCAweDZkNDZmNjFkLCAweDU1M2I1NzdiLCAweDNjYzYyNTg4LCAweDI0MjJhMWUxLAorCTB4NDc3OTE0YmYsIDB4YTQzMmJlNTcsIDB4N2NhNDJhYmMsIDB4YTdjZmJmNDcsIDB4MWYyZjM5MTQsIDB4MWZjNjAzN2YsCisJMHgxMmM3ODVkMSwgMHgyYzNiOGYwZCwgMHg3MmViMWRmNCwgMHg0NGQ4MTI4ZiwgMHhiYWIxMmRmZiwgMHhmZTA5Y2JlZCwKKwkweDliODhjNmU3LCAweDU1YTk0ZmQxLCAweDQ3Y2RhZTM4LCAweDVmOWUwZWJkLCAweDg2MzQ1NTg5LCAweDg3YmJlM2U1LAorCTB4YTZmM2U5ZWIsIDB4ZTJjMzFhZmUsIDB4Y2VkMTFmMjgsIDB4ODliZDUzZTMsIDB4ZGE5ZTQzNzYsIDB4YWI5YWUwOWIsCisJMHg0YmE3YTNjMSwgMHg0ZWJiODViNywgMHg3ZmEwZjNlYSwgMHhhNmIxMmQ1NSwgMHhiZWVlY2Q3YywgMHg3YzA2OTNhZSwKKwkweGZhN2ZjNTJmLCAweDM0NDliZmQyLCAweDhiYzA5MWZiLCAweGRkZGFhYmZjLCAweGU4OTIzMDdhLCAweGNkZjE0ZGE3LAorCTB4MTdiZjUzNzUsIDB4OWQxZDdlMGUsIDB4MWY3NWU2ZWQsIDB4OWJlYjQ0NTksIDB4N2YzZWE2YWYsIDB4YmVkYmU2OTgsCisJMHg0MjZjZjU0NywgMHhmZGQ4NmZiZiwgMHhlN2ZkMGM0YSwgMHg2ZTBmOGI5YiwgMHgyZmQ1ZWZhNywgMHhkZGJiODlhNywKKwkweGM1MGZmMzVkLCAweDE3ZGQ4NWUzLCAweGZiZTk1M2EzLCAweDA4ZjY0M2Y5LCAweGI5ZTY4YzMxLCAweDlkYWM3ZTM3LAorCTB4NWM0NzYyZTgsIDB4YWY3OGI3N2IsIDB4ZWY1ZGQ2ZDUsIDB4MzViNWJjZWYsIDB4ZGVhMWFhN2EsIDB4M2QxYWQxNzksCisJMHgyNTJmNDBjZCwgMHg4YmQ2MmZiYiwgMHg1ZjlmYzY1YywgMHhlZmMyZWZjZCwgMHhjN2JkN2Q4OSwgMHhmNGJkZjRhYSwKKwkweDVhYzZmZGY3LCAweGMzNWZiZDI4LCAweGY3MzZiZGRiLCAweDZlMDk2YjEzLCAweGNmMzA5ZWZmLCAweGZjZmI4MjE2LAorCTB4NjgyZGIzMWIsIDB4NzI4ZGZlN2YsIDB4Y2JjZGJkMmQsIDB4MjQ0ZjVmZTksIDB4OGI2OGZjNjMsIDB4YmM3ZDc3YTQsCisJMHhmNzBiNmUzNSwgMHg3YjY5NmE1MywgMHg4ZmRhMWFlYywgMHg5M2ViYmZhNSwgMHg1NWQyOTBkMiwgMHhjZmM5NmE1ZSwKKwkweGI3NmYzYWM0LCAweGRjMDAyZmI1LCAweDQ2YjExNWU3LCAweGU3ZWFlYjg5LCAweGRiOWJiNzdlLCAweGM5ZjNkZjlmLAorCTB4MjcwZmUwNjMsIDB4NGY5MDFkZWUsIDB4NDFmOTRkNjQsIDB4M2YyYTNlYjksIDB4YTY0MTUxZmYsIDB4N2YzZGZhOGIsCisJMHhmODBmNWY0ZiwgMHhmYjliNzZjMiwgMHhiYmI3YTYzNiwgMHhmN2Q4M2NhMiwgMHhhNzE4N2Y3YSwgMHhiOWVmZmQxNiwKKwkweGU5MGZhNDYyLCAweGNhNWUxMjQ3LCAweGI4ZTRmYWU3LCAweGFiYmYyNTdlLCAweGZiOGI2OGRmLCAweDE3ZTBkMWJlLAorCTB4YjY3OWI3YmYsIDB4ZWZmY2IyNTAsIDB4MzE2MjdkNjksIDB4NmVlN2VjM2YsIDB4NGQ3NGExZDYsIDB4Zjg5YjcwOTgsCisJMHhiYjg2NGFjOSwgMHgyMmVjNzg0NCwgMHgwMzBiOTY0ZCwgMHgyMjg5OTViZCwgMHhjOWIwYmVmZSwgMHhmMTExN2RmYywKKwkweGJjNWY3YzA5LCAweDVjYmRmY2RlLCAweGE1NmVhZDM0LCAweDk4MDkyZGY5LCAweDNmZGEwYmJmLCAweDZiZWMwNGZlLAorCTB4NWVjNWFmZmQsIDB4ZmY3YTA1MTQsIDB4NGY1NGNjMzYsIDB4NDBmZTM1ZjgsIDB4MjU1ZjA5MWYsIDB4YzdjMTFmYjQsCisJMHg4MTAyNTE5ZSwgMHhiYmRmNTg5NSwgMHhlODY3OWU1NCwgMHhhNzc1ZGViYywgMHgyMjg3YmI3MCwgMHhhYjQxNjdmZiwKKwkweDViOGY1ZDYxLCAweGYwOTEzNTg0LCAweDFjMmVkYzdhLCAweDQ3ZThmOTg5LCAweGY1ZmE4NTA4LCAweDZjMGIwYmVmLAorCTB4MGY3NzI2YTEsIDB4MDRiOTJhZmUsIDB4YzIzMWFmN2MsIDB4NWJiZTA4MjIsIDB4NDI3Y2UwNWQsIDB4NDlmN2Q4YWMsCisJMHg1ZDI5ZmEzMiwgMHgzNTZkZTg1MywgMHhlNmMxNzdjMCwgMHhkNGU3ZTg3ZCwgMHhlMjVkZmRiZSwgMHhmOGVmNTRkNywKKwkweDU4ZDM0MGQ4LCAweGRkZjhlYjgyLCAweDFiYTFhN2FhLCAweGIxYWY0ZWI4LCAweGUxMDE0MDg4LCAweDAyMjEyZWUzLAorCTB4ZjI3Zjk0ZjEsIDB4NWE2MmU0OTMsIDB4N2NiNmNmOTcsIDB4YTQ2MjVjOTIsIDB4MzZjYzQ1N2YsIDB4MTI5ZWEzZDIsCisJMHhlZjNlYmMyNCwgMHhmY2QyZWY2MSwgMHgzMDVjZDM4ZSwgMHg1ZDdhZDA5ZiwgMHg1Nzg2NmJlYiwgMHgyYWI4NjdjNywKKwkweDg3YTNiYjZhLCAweDU0Zjc0MGNmLCAweDU1NzdmNTllLCAweGY3ZWZiMTc4LCAweGNmYTAwMmQ5LCAweDNjNWY4ZGM4LAorCTB4YjlmNDBmMzgsIDB4YTE0YWU2ZDcsIDB4YTlmNjZiYjEsIDB4MmRlNjk1NWUsIDB4MGM4MWE4ZjYsIDB4NGY3YjYzOWMsCisJMHg5Y2UwNTc0NCwgMHg1MmUwNTNkOSwgMHhkOWFlZjMwZCwgMHg3Y2UxMTZhMywgMHg2MmZiYmYzOSwgMHhmNzM2Njk0MiwKKwkweDQ0ZWRjNTMzLCAweGEwM2MwN2ZiLCAweGY4ZTA5ZWRmLCAweGY3ZmQ1YjliLCAweGNjZDc5ZmY4LCAweDdmNjVjZWZmLAorCTB4ZjgwMzcwOTAsIDB4OTk1M2M2YzAsIDB4MDdjNGVmZTAsIDB4NzlhNmU2ZmYsIDB4YzZmY2NmOWUsIDB4YWQxMGJjOGUsCisJMHgwNDdmNDEyMywgMHhlMDliYjQ1ZiwgMHgyYWY4MTBiYywgMHg4ZTVjMTA1YSwgMHhkMDM3YWFiZCwgMHhhNTQ0M2FjZCwKKwkweGZmNGYxOWQ4LCAweDA5MTM3YzMyLCAweGY4MmU4NGJlLCAweDk0YTg5ZTA4LCAweDU2NzA1ZDExLCAweDM4ZWRkYmJiLAorCTB4YTIzODJmNjcsIDB4Njk0ZmMxNzMsIDB4MTJmMjkzNDIsIDB4MGRjOWYzYjQsIDB4NDkzYTVhZmUsIDB4YmYxZDdmMTAsCisJMHg3MGNhZTE2NywgMHg4YTRkMGJjOCwgMHg5N2JlOGMyNywgMHhkY2Y5NTVlZCwgMHgxOTFiZGIyYSwgMHgzZjE4MTZjMCwKKwkweGQyZjljOWM4LCAweDE4NDBkNTQ3LCAweGEzYTgyN2U1LCAweGVhOWIzMGZmLCAweGY1NDdiZTJmLCAweGZiMTQ4ZWQwLAorCTB4MDdmNmRlMzcsIDB4ODM3NWQ2MWIsIDB4ODgxY2EwNGQsIDB4MzQ0YjVjMDMsIDB4ZmRlYzk2YjgsIDB4OGQwYTY3ZTEsCisJMHgyZGRmNzhiMywgMHhlMmNlMzAwNywgMHgxNzBmMTQwNywgMHhlOGVkZjNhOCwgMHg4YTQzYzk3NywgMHg2NzQwNTc4OCwKKwkweDNhNDZlM2I2LCAweGNlNjRkODViLCAweDBiYWQxMjJmLCAweGMxZmMxNTU0LCAweDllZjA5ZGZjLCAweDk2ZmQ0MTVjLAorCTB4ZGQ3MzBlZWYsIDB4YTEwMmYxOGQsIDB4NGFiYzQyZTUsIDB4ZmY2OGQ0ZjAsIDB4M2I1OGNhY2YsIDB4Y2ZkNTAwZjcsCisJMHgzYzY3NjhkYSwgMHhlMjE3MGY5YywgMHhiNWFiZjYwOCwgMHgwZDIwNDEzNSwgMHgxZDYzMjZiNiwgMHg2YmY5ZWZjZiwKKwkweGU2YjFkNjMyLCAweDI5OTVmZjc3LCAweGNlYmY1OWJhLCAweGFhMzdiNGZkLCAweDIxNDhhOWQ3LCAweGM0NTE0ZWFlLAorCTB4ZmJhMGE5YjcsIDB4YmE4YTUzOGIsIDB4MjAxYjZmYTksIDB4OWIzNmM1ZjcsIDB4Y2E4NzlmYmYsIDB4OGFmYzZjMGYsCisJMHgzZDg1YzFmOSwgMHg2ZWFlODFiZSwgMHhiZjZiYjdlOCwgMHg4OTJkYzNmYSwgMHgwMmUxODM0OCwgMHhkNzE2ZjBlOSwKKwkweDI0MjdkODBkLCAweDM1YmU2MjBmLCAweGRiNGY1NjliLCAweDk3ZjBmOTQ0LCAweDQ0YjkzODZjLCAweGY3OTM4NjRkLAorCTB4NDJjN2Y2MGIsIDB4M2VmYWJmNDMsIDB4ODBiZTA2ZDksIDB4MGZlNDg0NzQsIDB4MWNmMjAxYjYsIDB4N2I5ZGFhM2QsCisJMHg0Yzc3ZjZkYiwgMHg5ZTA2ZThjOSwgMHhkNzFiNmVhMywgMHg1YzEwMGRiMywgMHhkMTc3NTllZiwgMHg4NDViZDA1YywKKwkweGJlMGQxZmM1LCAweDc3NWViYzJkLCAweGEyYjNjMjJmLCAweDVkNDM1N2QxLCAweDg5ZWY4MmFkLCAweGZlZDM4OWEyLAorCTB4NDdkMzg1YTIsIDB4NTEzOWYwODUsIDB4YzA1Yzc4NWYsIDB4NjIwMzEwYjMsIDB4ZjNkZTNmODEsIDB4Y2NiZWNmOGMsCisJMHhhZGFjN2YzNywgMHhlODM1NzgyMSwgMHgwMjJiMWZjNCwgMHhlYWZmZTg1YiwgMHg2MzUwODc0NiwgMHg0NmI1ZWQyMCwKKwkweGNlNTQ1MWEzLCAweDUyMDZmYmI0LCAweGQ1MDNlZGI5LCAweDFkZGU0MGEyLCAweGM3YTdhZmEwLCAweGE1ZjdmZDg1LAorCTB4NzE4YzQ2NzMsIDB4MmUxZmY2ZmQsIDB4YWFmZTg4OTksIDB4OGMyMmE5NzYsIDB4ZDNiNzNiZmEsIDB4ZDQ0ZTgyMjYsCisJMHg3YzAyZmRhNywgMHg5ZWMyZmUxYywgMHg1N2I0YmUwMiwgMHg2Yjk3OTAxMSwgMHgzNWVmOGYyOCwgMHg4MGRlYWRhMywKKwkweGE0NzcyZjAxLCAweGQ1MGYxOGQ4LCAweDljZjI5OTI5LCAweDRkMGY3YWI2LCAweGJiY2Y3ZWEyLCAweGViOTBlYzRhLAorCTB4MjZjYjg3NmQsIDB4MjViMWJjZTIsIDB4ZDcwMWQ4OTYsIDB4MWQ2M2MzZmUsIDB4NThiNzU4MjksIDB4ZDU5YmVmMmIsCisJMHg4ZjcxZjU3YiwgMHg1NDdmZDBiOCwgMHg2ZjBjMDdlYywgMHg0NDQ1YjY2MywgMHhhM2M2YmI1MywgMHhhNjQ2MDE2MSwKKwkweDMwYTFmMjQzLCAweGMxOGRhZjBkLCAweDM3NzcwZWYxLCAweGUzMTdlM2ViLCAweDJhMjhjNDkzLCAweDA0NGVhOWRmLAorCTB4MjU1Y2U3OWMsIDB4MmRhM2FjMmUsIDB4MGFlZWU4OTYsIDB4NGVmMzZmNmEsIDB4MGRmYTlhYmMsIDB4MDc4YjhkOGIsCisJMHhkMjUyNmI3YywgMHg4YWJmM2Q3OCwgMHhiZjM4NjVhZCwgMHhjZmMyZjEyMiwgMHgwOGI2YjdmYiwgMHg2NWZlYzZmOSwKKwkweGU5YmVlMzJhLCAweDM1Y2ZkZTIxLCAweGQ0N2UzOTBlLCAweDUxY2Y5NTNlLCAweGUzNDNhNTcxLCAweDRhYmJlZmRiLAorCTB4YzkwNTljNjksIDB4MGY0MTQ3YmUsIDB4YzQ2ZGZjOWQsIDB4MzlmYzAyYWIsIDB4Zjk2MTYyY2IsIDB4ZTczNWYxYWMsCisJMHhiZDIxZjA1YSwgMHhhNDhhNmNmYywgMHg1NjNkN2QzNywgMHhjMGJhYjJmNSwgMHhlOGQ1MWUzZiwgMHhjOGFiOTU3MywKKwkweGE3OTg2ZjkxLCAweGMzNDViN2FkLCAweDc4MDM5MTU3LCAweDNhMmY2MWRhLCAweDlkYTVmMzg0LCAweDNjZGNlM2JlLAorCTB4MDFjZDM4OTAsIDB4NTllYTg1M2QsIDB4N2FhOWNmZDAsIDB4ZjQ3NjMxZGEsIDB4ZmMwMWMzM2IsIDB4MzI1NWVhMmUsCisJMHg4YjE2ZWQwMSwgMHg2ZmQ4ZDVkYSwgMHgyMmFiZDc4YiwgMHg4ZGFiZTA2OCwgMHhhMmVlMzkzNiwgMHgxODIyMTE0YiwKKwkweDIyZWUzNWRmLCAweDdmNmUzZjVhLCAweGU5MDQ1YTI5LCAweDk3MGM2ZGRjLCAweGU0YTMxYWY1LCAweDQ1MjM3OWZlLAorCTB4YjUwZjlmZWUsIDB4Zjk2OWI0ZjksIDB4N2JhZjk5N2YsIDB4NWNmZDdjY2MsIDB4OTZiNjFmZWMsIDB4NDZmZWZlNDgsCisJMHhhNTViZjUwYSwgMHhhMTQ4NGViNCwgMHhlYzRlYWRmOSwgMHhhN2JmMDNiMCwgMHg5ODIyNWRlYSwgMHhiMmY3ODA2OSwKKwkweGEwOGJjNjc5LCAweDdhY2VkYzYxLCAweDlmM2MxYzk3LCAweDMzNzBmNWFlLCAweDc1ZjM1ZGZjLCAweGQ1NGUxZTMyLAorCTB4N2IxZTMyMjcsIDB4ODRjOTNmZWUsIDB4NTNmZWFlYzcsIDB4YmNiYzc4NGQsIDB4ZmYxZTRjZmYsIDB4NzdkNjdkNTQsCisJMHg4N2I0M2ZmNCwgMHhmODI2ZGRmZSwgMHhlNzRkZmFiYiwgMHhkZjZlYzU3MSwgMHgzYjk3ZjA0MCwgMHg5ODBmYzQ1ZCwKKwkweDUwNWY4ODZlLCAweDNkZjE1ZGI5LCAweGRiZTQzNTdlLCAweGU0MDRjMjhmLCAweDdkYzJhZmJlLCAweGZlMDY1YzgzLAorCTB4NjVjZTBkZjAsIDB4NDk4MmU3ZDYsIDB4ZDE3ZWI3ZTAsIDB4ZWVjZDY5Y2MsIDB4ZGVkMDEzOGIsIDB4ZmIwMTdjNGQsCisJMHgxMWFmMmY0OSwgMHhmODI3MGNlZCwgMHgzNTgzZTg4NSwgMHg3Y2I5YmFiNCwgMHhmNDEwNmZiNywgMHg0ZThlMWQyMiwKKwkweGE3NzVlNjc5LCAweDIwZmI0MmRmLCAweGEzZGZkZjZjLCAweDU4MmY4ZmIxLCAweDI4NzhhN2RiLCAweDQ2YWJkOTZkLAorCTB4N2M3NWY3MWEsIDB4YjFhN2E0YWEsIDB4NmRjOGJlMDMsIDB4NjhkNWVmYTUsIDB4YjZlZjdjNDcsIDB4MDIwZTk3OTcsCisJMHhkYWMzYWE3ZSwgMHg4MWY3MDE3MywgMHg4Yjk2ZmY5NywgMHg3ZGFiZTQ3MywgMHhmYmUyMDc0YiwgMHhmMmNmYWEzNiwKKwkweGRhYmRiZDg3LCAweDVkMmZlODYzLCAweDUxOTZmY2I4LCAweDU1MzNhOTVkLCAweGVmZDBmZmVlLCAweGY0MzVmNmRiLAorCTB4ODlkYjFjMDMsIDB4MGI5MjA5YmQsIDB4MGEyYWViYWIsIDB4MGQ4M2M2NGUsIDB4ZmYwN2VmNzksIDB4NThiN2M0MTIsCisJMHg1ZDNkZGExZiwgMHhlZWY5MDMxZCwgMHgyODc5OTI0MywgMHg5NDhmN2MzZiwgMHgxMDBmODYxYiwgMHhlNDBhNGIwMSwKKwkweDgzNjcwZmJlLCAweGIwOGY1NDRmLCAweDQ3MGFhMGJiLCAweDc5NjExZGU0LCAweGMzODQ2MjNiLCAweGJmZmQ1MGE1LAorCTB4ZGJlMzk3ZjcsIDB4YTFhNDJmMjEsIDB4ZTgzYzYxN2QsIDB4ZjE2NGNhZjksIDB4MWI2ZGM5ZWYsIDB4ZjA0ZmY2NDIsCisJMHgzNGVkZWFiZCwgMHgzYWRhOTU1ZSwgMHhmYmMyOWM2NSwgMHg3YzE1M2YyOCwgMHhkZTJmYWRmYiwgMHgwNGQ3ZjRkNiwKKwkweDljMDFjZmFjLCAweGZiY2YwNDZiLCAweGE5NjUzZjVhLCAweGNmNTAyYmJlLCAweGU3YmQ2OGU3LCAweDczMzdhYTBhLAorCTB4ZTg2NGRmNTYsIDB4N2U5YWM1NDcsIDB4NTIxMTI2MjYsIDB4OTQ3ZTY0YWUsIDB4ZTVjODNiMDMsIDB4ODNkNGI2ZTcsCisJMHgzZTdjNTI1ZSwgMHhkN2RmYzFlMCwgMHgzNWY5YzFlMSwgMHhmYTM4NDkzNCwgMHg2MjQ1NWUxMiwgMHg4ZDFhNzUyMCwKKwkweGEyZDUyMTNiLCAweGMwMTQwZmRiLCAweGUzOWI0NDNkLCAweDk2NWFmZDMzLCAweDE5MzlmMmM3LCAweGZkMWQwMzg4LAorCTB4NGI0ZWUzYjMsIDB4ZmMwNjRlZjUsIDB4NjcwZmZkN2EsIDB4NzVmMWNiY2QsIDB4ZjJlODZlNzMsIDB4YjJkZWRkYmMsCisJMHg1N2I2NzAwYywgMHhmYzdmNTkzOSwgMHhlZWQ0NDUwMCwgMHg0MTYxNTk4OSwgMHg4YTdhMWEzNSwgMHhmOWY0MGQ3MywKKwkweDBlMGI5MWEzLCAweDhjN2MyNmY2LCAweDQzY2RmMjhmLCAweGJjNmZiM2ZmLCAweGNhZjIzNTdlLCAweDcyZjc3ODgxLAorCTB4ZWI3MTczZDAsIDB4YzJlZmQ2NDgsIDB4YmNhMzM3N2QsIDB4OTgxYmUxZDIsIDB4MzczYzUzNDAsIDB4MDYyODM3YzAsCisJMHhiYzUxN2M4NywgMHg5NDUxMjc1YywgMHhmYzJkZDQ1MywgMHg0NTYyOWUxMiwgMHhlNTE4ZGY4ZSwgMHhjNTNmNDcyYiwKKwkweDVkOGYyMzk2LCAweDIzZDY2ZjgxLCAweDhkMTA2ZjZjLCAweDczOWZiOWJkLCAweDlkZGU1MTc2LCAweGUxZTNhZmZjLAorCTB4ZmQ4ZjM2OTgsIDB4MjVlZDcxMzYsIDB4NzVmZWRmOWEsIDB4ODIwNjllMzEsIDB4MWJjZWVjYjcsIDB4YmE1MGQ0MTcsCisJMHgxMDk0NTJkMCwgMHhkZjcwNGQ1NCwgMHg1NzVkNGE5NiwgMHhmNjA3OGJmYSwgMHg5Y2VlNzkyNSwgMHg0ZWJiODM0ZCwKKwkweGNhZWFkYjgzLCAweDUwZTdlZTM0LCAweDc5NzQxYmI4LCAweGViMGExN2U1LCAweGY5NDdmYzgzLCAweDgxYjFmZDE3LAorCTB4NjYxZjI5YmIsIDB4NzRjMWY4YjksIDB4MTYzOTViOWMsIDB4ODg2YzkzYjYsIDB4N2E0NWJkYTAsIDB4OWMxYTNiZTQsCisJMHg3M2JlZDI4ZiwgMHgzNWY3ZjFjNCwgMHgyMTE4OWVmOCwgMHg2ODNlMjdkYiwgMHg1MDdlYzAwOSwgMHhhZjBmNzYzNCwKKwkweDRlZDUxM2QzLCAweDE1NjM0YThmLCAweDcyMWRiNzBiLCAweGIyZjBhOTUwLCAweDMxZDdmY2ZlLCAweDRhZDdkYjdmLAorCTB4ZjU0ZTZhZjMsIDB4ZGRiYzA3ZGQsIDB4ZmU0OTZmMWMsIDB4MGRmMGUxODAsIDB4NmI3OTBhOWQsIDB4M2ZjNzljYjQsCisJMHgxZTc5Mzc5MCwgMHhjNmNiODRkMywgMHg2YjU4OTk0MiwgMHhjZDMxZmM4MSwgMHg1MGIyYTcyNSwgMHhiYTYzZmI5MSwKKwkweGRlMzBkYWYwLCAweDdhZTNlMTRjLCAweDdiYjc5ZGVmLCAweDA3YmM0ZmExLCAweGJlZTA4ODVkLCAweGZiZjlmODUxLAorCTB4NzRlMDExMWMsIDB4ZmQ3MjA4OWUsIDB4ZTcyYjQ0OWIsIDB4N2QxMzdjNzUsIDB4ZDI0YmRjZGMsIDB4NTQ3ZDI3YzcsCisJMHhjMDU2ZmZjNiwgMHhlZTY0NmVmZCwgMHhjNzlhM2E4MCwgMHg2NTA2ODdkNCwgMHhkY2Q1N2ViMCwgMHg1ZGYzZjE5YiwKKwkweGU4ZDU0ZjcwLCAweDZmZWZmNjg2LCAweGJmZDg4ZWIxLCAweDY5OWZhODMzLCAweGRmZWM4NDM3LCAweGY1ZjViZGYxLAorCTB4ZmI0N2Y4Y2MsIDB4YTc0NzQ4ZTgsIDB4NGJlY2U0ZmUsIDB4NWI0ZWI4NzgsIDB4NGJiY2ViZDIsIDB4YzIxMjdmNTksCisJMHg4ZmQxZjJjNSwgMHhhODViN2RiNCwgMHg1YTJmNDUzYSwgMHhkMjZlMjM5ZiwgMHg4OTk2MDg5NywgMHg2MjI1OTY2MywKKwkweDEwYWZhZmJlLCAweDNhZDAxNTZmLCAweDE1NDYzZWJlLCAweGNiZDM1YzBkLCAweGZkNjhhNmVkLCAweGUxM2ZlOTRkLAorCTB4MGY1YmQ4MzMsIDB4ZTFhZjYwOGIsIDB4OTJmMGFlZDQsIDB4ODIxOGQ1ZWYsIDB4YmRiYThhN2IsIDB4MjdjYTk2MzEsCisJMHhjNmJkMjdmNiwgMHhlZmFlZWZjMCwgMHhmZDBhYzNiNSwgMHhmMzc0ODZlZSwgMHg2NmQ5NDlmNywgMHg2OGIyNjdmZCwKKwkweDk0ZmUzMTUyLCAweGZiN2FlNmUxLCAweGIzYTIyNzgxLCAweGZlYTU1M2Y3LCAweDIxODg4NjIyLCAweDBiN2FmMmRmLAorCTB4MWQzZTcxOGIsIDB4MmZkYTJlOTMsIDB4NjkxMTFjMTAsIDB4MmViMThmYmUsIDB4NzVmZjI3Y2IsIDB4NTYxNWM2MDEsCisJMHhiN2VhOWYzOSwgMHgxZGViYjY1NSwgMHgyODhiNzkyNywgMHhhN2FjOWM1MCwgMHhjYTUzMjI5MywgMHg0YTdmYzgyNSwKKwkweGQzZDIwM2YyLCAweGNmNGU2ZWY1LCAweGYyOGY3OWQyLCAweGNlMWVmNWYzLCAweDlkMTVhNDE3LCAweDZiMjViZjQwLAorCTB4N2Q2MmI3M2UsIDB4Zjg5NzBjZWUsIDB4OWE2OTZmMmUsIDB4NzYyYWIwMDAsIDB4NWE0NDFjYjcsIDB4ODA5YTJjMTYsCisJMHhhMWQxNzY2MywgMHhlZjQ4ODNkYSwgMHg2YWRiZDRlYywgMHhlMWQzYmU1OSwgMHhkM2EzNDViZSwgMHhmZGE2YTI1YiwKKwkweGUxZDY4NzMwLCAweDg3YWEzZDk2LCAweDRkYTYwM2YzLCAweDc5MGJkYzlmLCAweGEyN2JlNzFiLCAweDQ0NGJhYWEzLAorCTB4NTQ1NzI0MzMsIDB4MDEyZmRlYWIsIDB4ZGI2Zjc3OTcsIDB4ZGY5YTc4YzEsIDB4MThhM2Y1MjcsIDB4YmRlYWNmZWUsCisJMHhmYTk5ZjcwYywgMHg0YTRlOWM4OSwgMHhlODFiZmEyYiwgMHg2NzNlMmJjYywgMHhmNmYyNmM3OSwgMHhkNTEyNmIzNiwKKwkweDVlMmFmNDJmLCAweGJkNmJkYmVjLCAweGZkYTAxMDIyLCAweGNmMjZkZWI3LCAweDBlNzRmNTgxLCAweGM5OGYxZjYwLAorCTB4YWRlOGY2OTksIDB4NjdkYTdjMDIsIDB4NjY3MWEzNGIsIDB4MTBhNGIwZGUsIDB4NTUxOTRjZTMsIDB4MWJiZDQ1NmMsCisJMHgyMDE5MjFiZiwgMHhiZjRlOGJhNSwgMHhmOWY1ZWU4YiwgMHg3NmViNjk1NywgMHhmMTg1NjVlZSwgMHgyZDMzYjFkOCwKKwkweGYyYzE3MjA2LCAweDkwN2Q2OTVkLCAweGY1ZDRiZjEyLCAweGFkZTA0OGRkLCAweGUxODU5MmUzLCAweGMxMWEzOGVjLAorCTB4NmVkZTg2ZmEsIDB4ZTY0OGFlZjksIDB4ZDgwN2NiM2IsIDB4Yjc2MGMyMDMsIDB4MmNlYjQzM2MsIDB4OTllNmYyMGMsCisJMHgzNmUyN2U2NywgMHhlMjY3MmI5ZSwgMHgxOGZhYmU1YSwgMHg5MjJmZWRmYywgMHg3MzY0OTFiZiwgMHhiZmYwMTFlYSwKKwkweGEwM2NmZGZlLCAweDljOWFmMzkzLCAweDI0NDY3YTRkLCAweGNkNmFiZmNlLCAweDg0ZmUwOGFlLCAweDY5MDg5OWZjLAorCTB4NmNmOTFkY2YsIDB4MmZlYzU4ZDIsIDB4NGUxYzQ3OGMsIDB4ZjMyYmZjZTgsIDB4N2Y1Mjg3ZDksIDB4NmYxYWVlZWUsCisJMHg4ZmMyY2I1YiwgMHhiOWZjYTExZiwgMHhhMzZmYzU4MCwgMHg2ODljZTlmMywgMHhmMDNiZmYzOSwgMHhiNjRlY2RkZiwKKwkweDEwYTlkZGViLCAweGI3N2YzODNjLCAweDk2N2NlM2Y0LCAweGMzYTg4ZDYyLCAweGJjMDIyYmY5LCAweGI3MTRiM2JmLAorCTB4NTVmODhlYjUsIDB4ZjcwZjczZTUsIDB4NDRiZGZkMDMsIDB4ZTU0NTE4MzgsIDB4NjQ4YmFkMmYsIDB4Y2Q5MmY2N2UsCisJMHhmZDBlYWM3MywgMHhmYmZiMmEzZCwgMHgzZDNmYmRjZCwgMHgzZGU5MWJiZSwgMHhjNTNmZjk1NSwgMHgzMWM1YTRmMiwKKwkweGI1N2VjYmZlLCAweGQzZGEwODY0LCAweDUyZmEyZWY5LCAweGE4YmY0ZjdmLCAweDNmNjljMzA0LCAweDVmZWYzNGU3LAorCTB4MWJlMDk3ZDksIDB4ZDJjZGExYjYsIDB4Y2RiY2QyOGYsIDB4YTFkMjAzNGEsIDB4MDQzODZlMDMsIDB4NjkwZGYzYmIsCisJMHhiMDVmNmU2ZSwgMHhjMjRkNDUzZCwgMHhmODE3ZWMzNiwgMHhlZTdjMDdmOCwgMHhlYzgxZTU5YiwgMHhmNmM3Y2ZlNiwKKwkweGMxNzI1ZDEzLCAweGY0ZTVhNTEwLCAweDJjMzU4MjQ2LCAweDhmYmU2OGY5LCAweGYzYzRkN2YxLCAweGZhNzdiNWQ5LAorCTB4ZTYwNGYzZmIsIDB4ZTAwNzEyNDEsIDB4Zjg3YmI2MmUsIDB4MzdmODBhMWMsIDB4ZjljZjNkNjIsIDB4ZDdhYzNjYjIsCisJMHgwNjFmZjkxNSwgMHgyNWYzOWQ5ZCwgMHhiZDJlNzA3OCwgMHg1NWZjN2E0MCwgMHhjYWNjN2ZhOCwgMHhmMzcxN2NmMywKKwkweGViYjBkMWJiLCAweDFjN2U5MGM0LCAweDVlNDg3ZjBlLCAweGFmZDQwNGZiLCAweDdlMTZlMDFhLCAweGIxZTAzZjZhLAorCTB4M2YwMjI2ZWIsIDB4NmQ3NzNiZDUsIDB4MWQyYTdlZTQsIDB4ZTViOWU4MWUsIDB4NGMxZTJlYmIsIDB4YmQ3ODljODIsCisJMHgwZTgwNjRmMCwgMHgyZmZjY2E3NywgMHgyYTNkN2JjNywgMHhlMzdjYjU0ZCwgMHhhNDdmMzI5NywgMHhhNDQ1ZjM4OCwKKwkweGJmNTE1YTc1LCAweDBmNDdjYTU0LCAweDY4OWZlNzY5LCAweGM4ZmU2NWNkLCAweDVhZWVlZGE0LCAweDMxNTI1ZmFmLAorCTB4ZjhhN2Q3Y2EsIDB4YWRhZWMyZmIsIDB4ZGU3NDliOWYsIDB4YWI2MWE1NTUsIDB4MjNmYjY1ZDgsIDB4MzMyNWU3NjMsCisJMHg3OWU3YmU1ZSwgMHgyZGNlZDc2NywgMHhlYzg3YmZiZCwgMHhmZDRlMWZjMiwgMHgzYjAzNmNjMCwgMHgzY2JiMDZmYSwKKwkweDdmMTBiN2E3LCAweGU3ZThiZDAxLCAweDBiZmI4ZDM0LCAweGVmNmE1ZmVjLCAweDUyNGQzZjA1LCAweDg0OWQ5Yzk1LAorCTB4YzI4N2E0OGYsIDB4YmVmOGNlNTgsIDB4NTk4ZWNmZTMsIDB4MmViNmU3Y2QsIDB4NDg0NGQ1NjcsIDB4MDU2N2M4M2UsCisJMHhlNTE4NWZiNSwgMHg1YmYzMGJiYiwgMHhjMmYzOWRhOCwgMHgxYzg2Y2VlYSwgMHg3YmNhMjMzMiwgMHgzYTU3YmUzNywKKwkweDA3MzE5M2RhLCAweDQ1ZWYzZjNhLCAweGI5MjU1YWJlLCAweDc3MjBjZDJiLCAweGQ3YmVlMzM5LCAweGU1MTc1OWY5LAorCTB4YmU3Y2M2NmQsIDB4OTFiMWZkNmYsIDB4NTIwYzY3MDQsIDB4YWQyMmNmNWQsIDB4OWM3ZTViYTMsIDB4ZmMwNWJkYmEsCisJMHhjOTMwODFmOCwgMHg5ODBhYTM4ZiwgMHgwYmYzZTkxZiwgMHhkYTE1ZmZlZCwgMHgzM2UyM2VmNywgMHhlMjc5ZDFhZiwKKwkweDczOGZkYzIzLCAweDdhZjJiMThlLCAweDNjYTk2YWJlLCAweGExNzBlNzQ4LCAweDZjODQwMTFjLCAweDc5Y2UxZDhkLAorCTB4NmZlMTE0NmYsIDB4YmUxNTUzYmMsIDB4M2Q0NWY0NmUsIDB4MWU3YWY1YTUsIDB4MmJkMDk5ZjgsIDB4YjBhZjU0ZDIsCisJMHhmYjFkYWM1NywgMHg1YmNlZmJmNywgMHg4ZDQ3ZDZkNSwgMHhiYmE5ZjlkMCwgMHgzNzc2NzA5NywgMHg1YmNmMzk2ZiwKKwkweDAxZjQ0N2MyLCAweGRmMmFjNjVlLCAweDViMGViZTZmLCAweGMzYWM0MWQxLCAweDlmMWU2NzM4LCAweDUzOWNlMzhiLAorCTB4YzMwNGY5OGYsIDB4NDNkZjE4N2YsIDB4MWYzYTE5ZTcsIDB4ZjI3ZWY4ZTEsIDB4ZTExNThmZDIsIDB4N2RmZjYwYjcsCisJMHhkYWZiNjc2ZSwgMHhkM2ViNWI1ZSwgMHhlZTdjMjViZiwgMHg4MWVkOTI1ZCwgMHhmMDA1ZTg5ZCwgMHg2OGNmZjA1ZSwKKwkweDdiYjNjYjNiLCAweDdjMWY4NGEzLCAweDg0ZDRlZjY1LCAweDJmNDVlYzAwLCAweGRmMDQ0ZjQxLCAweDc5NjQyZGU4LAorCTB4NzdiZmFjYjgsIDB4N2Y1Mzk1MGUsIDB4NWY2OGMyZmQsIDB4MmYzNDVlYzAsIDB4MDY5ZmViNDIsIDB4N2QxNWZiNDYsCisJMHg1MjgzN2RiOCwgMHhkYTBlNjZmYiwgMHhiZTY0ODhhZiwgMHhmOTIwMzQ3MywgMHg3MDZjNzM3OCwgMHg5YmRmNGE5ZSwKKwkweGE4MTRjZjNmLCAweGQ2MDQ1NDc3LCAweGVkZGVhMmE0LCAweGU1NDM1ZmQyLCAweDZmZDQzNTQ5LCAweDEyMjE5MmYzLAorCTB4Zjk1MWZmY2UsIDB4ZjNjZTY4ZGMsIDB4MzI3MzhkZjYsIDB4NGNmYjY3MWYsIDB4NWY2ZjU0ZjMsIDB4Njk3YWFmZjgsCisJMHg1MWJjZDVlYiwgMHgzZDgzZjc5NiwgMHg5NDI5ZTUxNCwgMHg5YjYzZjRhNywgMHhhYjU3M2ZhYywgMHg5NzQ2OTFmNywKKwkweDBmOTljZmI0LCAweDVhNDRhNmY4LCAweGQyZmRlNzQxLCAweDk5ZDJjMjRiLCAweGMyZmI3OTI5LCAweDU5NDhmM2VmLAorCTB4ZTcyOGRiMDYsIDB4YzI5ZjVjNTYsIDB4Y2JkOWEzZjQsIDB4NWI3YzZiNjYsIDB4MWMwZDBmZWYsIDB4Y2IyZjIxMjMsCisJMHhiNzBiMzliZiwgMHg2NzllODM4NCwgMHg0MWI3ODc5NiwgMHhiZTVhM2JlZSwgMHhmYjdhMGEzMiwgMHgwYzFhOWY0YywKKwkweGEzMzk1YzgzLCAweGFmMjlkYmQwLCAweGFmNWM2MmE1LCAweGQ3NGNiNzFjLCAweGMwYTU4MmZmLCAweDBlZWRjYmViLAorCTB4ZjdjYjM3NzEsIDB4M2VhMzAyYzEsIDB4NTU2ZmFmYTUsIDB4YTM3ODk4Y2IsIDB4Mjc2MTVjZGUsIDB4MmNmMDQyZmUsCisJMHg5YTZkZjZkMSwgMHg3ZDNiZDdkMywgMHhlYmU5ZjQwNCwgMHhmNGZhOGRlMywgMHhlNDBmNjVhNywgMHhjNmQyZmVmMiwKKwkweDhkZWY1YjNiLCAweGI5MGU5OTNmLCAweGZhYTcyMjZkLCAweDBmN2E5ZDc4LCAweDU3ZTc0ZGQ2LCAweDI1ZGI5N2EwLAorCTB4ZmI2YjA4YmQsIDB4ZGYyOThiNDcsIDB4MDc4ODdiMzAsIDB4ZDM4OWVhZjYsIDB4MWQ2ZjRjMWMsIDB4MWYyY2UxMmQsCisJMHhmMDhlY2MzNywgMHhiMGQ3NmVjMiwgMHgwNmVkOGMyYiwgMHg4M2ZiNmIzNywgMHgxYmE2MjhmNCwgMHhlZTI4YmVmZiwKKwkweGYzMmVkMmE3LCAweDMwNjVjZjk1LCAweDBmNjBiY2RkLCAweGU1MTViOTNjLCAweDdmYjM4NzJmLCAweDhlNWEzMmI2LAorCTB4MjRiYmY5NWIsIDB4MjliZDJlOGQsIDB4NWZiMTdhYWIsIDB4MzJhNWU5OGUsIDB4ZTVjMzFkYzIsIDB4N2E2NzhmYmYsCisJMHg1N2RjMzY3YSwgMHg3ZDEyN2MwMCwgMHhkMmJjNWRiMiwgMHgyNThjY2MxZSwgMHhlOGQzMWZmYywgMHhmYjIzN2EwZiwKKwkweDk4YTM2YWY1LCAweGY3OTY4NTZlLCAweGY1OWUzY2ZkLCAweDc5N2Y5MjM4LCAweDQzN2RkZjNjLCAweDdiYjNlZjM5LAorCTB4M2VjNDJlZmIsIDB4ZjBjOTFlNWEsIDB4ZjJjOTczMWMsIDB4YmNiMTk1NjMsIDB4YjdkZmU2MGYsIDB4YzVmYzMwZjQsCisJMHhiY2VjOGFjNywgMHg1NWVkOGU1ZiwgMHg3M2ZhZGU1OSwgMHg5Zjg0MWE5ZCwgMHg5YWNmYTc1YiwgMHg4NmRmYzcyNSwKKwkweGUxYmFhOGY5LCAweGQ0ZGRlNGEzLCAweDU1OTVmY2NmLCAweDdlNmVkMDkzLCAweDcwNTNlZGM1LCAweGY2OWFmNmRlLAorCTB4NDM2OWZiMjksIDB4NGFmY2YzZjcsIDB4OTdkNDdmYjMsIDB4Zjk4YzlkZWUsIDB4NzYwNzY0ZDUsIDB4MWU3ZWE0MWMsCisJMHgxMTZhNzM5YywgMHhlZTlmZDNkNiwgMHgzZWY1ODY5YiwgMHhlMTdkNmY2ZiwgMHhlYjc3MDQ0ZiwgMHg1ZWIyM2Y4YSwKKwkweDZmYjQ3ZDc0LCAweGQ4NWZiZTI2LCAweDVmYWUxYmYzLCAweDE2YmZmMmJkLCAweGI2YWZjZTQxLCAweGNmZDE3YTRhLAorCTB4N2U4ZDFhZTMsIDB4MWU2Zjg2NDUsIDB4N2NhZTU3ZWEsIDB4Yzg4MWY1OWQsIDB4N2Y5MjIzZWMsIDB4ZjhmZGZlZGUsCisJMHg1YmJkZTljZSwgMHhkZGE4NTA1ZSwgMHhkNWJkODhkMiwgMHg1YzgxYWE5YywgMHg5NDY3NmI5YywgMHgwNjkyYjQ2MCwKKwkweGVkM2Q0YTdjLCAweDhkMTgyYmFjLCAweGE0NTlmMTc1LCAweDViNzRiODljLCAweDRiMTgxZjg4LCAweDdmZDlhMDkxLAorCTB4MTZkMmRkYTgsIDB4ZjI0MmJmMTksIDB4MTlmNDFkODIsIDB4N2QyOTdmNWEsIDB4ZjNkZjdhZTcsIDB4OTE2ODg1N2IsCisJMHhkZjc3NjNkZiwgMHhmNzVjYjU3YiwgMHhmYzM4NzA2MCwgMHhiMDliMTlhZSwgMHhmZDc2ZTdlZSwgMHg3N2U4ZDMyNiwKKwkweDg3MmY0ZDBkLCAweGFjZmZjZTU3LCAweGVhY2U1ZmI2LCAweGJkYjY2NWZiLCAweGI5MDA1ZWQzLCAweDdkMzNmY2ViLAorCTB4ZmU3Njc0NGMsIDB4M2Y5Y2MxYzksIDB4MTEyYmI0YWQsIDB4NTc3Zjk3NGEsIDB4NzI0NjVhNzgsIDB4NjViNzhkN2MsCisJMHgwN2U3ZTQyNCwgMHhlMzRiZWZiNSwgMHhhZjgyNDY1YiwgMHgzODRlN2NlOSwgMHhmZjU5NzI1YSwgMHg4NWM5NmFjZiwKKwkweDQ3ZjNhYmJlLCAweGM5OTJkNDUxLCAweDk5MmQwM2RmLCAweDQ1ODJmZjY4LCAweDhmZjg1M2RhLCAweDNhNzhhOGUwLAorCTB4ZDJkZGUzNjksIDB4MGNiN2UxMGYsIDB4MjZlODdlNDcsIDB4MWE3MWY1ZTQsIDB4ZTkxZjI1YzIsIDB4YTU4ZmJlNjksCisJMHhmOWU2M2I0YiwgMHhiZDliZjYzOSwgMHg3YWQwN2Y1NCwgMHg3MDdjYTliYiwgMHg5YWRmOWNjMCwgMHgwM2U3ZWQyZSwKKwkweGZhNmZlMjQzLCAweGMzZmJlZGE5LCAweDIxM2M4ZTcwLCAweDNmZDdmNWJhLCAweGQ0ZjM4ZGEzLCAweDNjNzE5ZDUzLAorCTB4MGFjZmE2YWEsIDB4NmUxZjRlYjcsIDB4ODBkYmRmMjksIDB4ZjEzYThmZWYsIDB4ZjExMjZiN2QsIDB4NjM5OGE1ZTUsCisJMHg5ZTVmY2YyYSwgMHhmYjQ5NGY2NywgMHhiZTc5MGJjZCwgMHhlNzE3OWMyNCwgMHhmZjgyMTc4MSwgMHg2N2NhNTg4NSwKKwkweDc4OTJiZTQzLCAweDNlM2FmM2Q1LCAweGYyYmZlNzQzLCAweGIwNDk0NWEzLCAweGFlOTQ3ZWRmLCAweDdkM2NmOWRiLAorCTB4ZGUzYTk3NDAsIDB4ZWZhNDZjMWEsIDB4MmUzZjQzNjQsIDB4ODU2OTM4MmYsIDB4MmM0OWVjZGUsIDB4ZGFlYzFhYjMsCisJMHhkODFjZjNlYiwgMHhlNDM3OGI1NywgMHhkNjc0OGMzOSwgMHgxMGUwYWRiMCwgMHhlY2UyMWM0OSwgMHgyMDA3YWIzNiwKKwkweGY3MDM1ODM3LCAweGQ4NmY3ZTQyLCAweDA1ZjhiNmE2LCAweDU0YmMzYjk3LCAweGMwZjNhY2ZmLCAweDY4YjdhOGRiLAorCTB4ZTQzZTZjNDMsIDB4ZTJmZGJkNmQsIDB4Y2IxMjIzZjUsIDB4ZGQwZTcwMGMsIDB4OWM4NzVlNjYsIDB4ZDg3ZTczMTYsCisJMHgwNGZlNzM2ZSwgMHhmZmRlODBjZSwgMHhhMGJjYmI3YywgMHhjODcwNWYzOSwgMHg4M2U0ZmY5YywgMHg5YzgxNjc1YiwKKwkweGJkZmY1NWNiLCAweDNmODlmNDJhLCAweGYzODQzODRkLCAweDVlMTdkM2YxLCAweDJjZmFjNjhjLCAweDQxZDk0YmZkLAorCTB4NzFhMTQ5ZTgsIDB4MGE2ZWI0MjIsIDB4NTZmZjA4ZjQsIDB4YjJlM2U5ODUsIDB4ZjgxZTkxNzgsIDB4ODEwZjFlODEsCisJMHg5M2E0NjE5ZCwgMHg2ODNmZTEwYSwgMHhmZWJjYjk0ZCwgMHhjYjMyZDExOSwgMHg1OTU1NzQ0YiwgMHg2NGUwYmNiNywKKwkweDU3YmY1NzQxLCAweDQzYjNhY2I2LCAweGI3MWQwYmNlLCAweDljMmZmZGE3LCAweDZhZWMzNzVlLCAweGQ5NjRhM2M1LAorCTB4YzU2Mzc1NTUsIDB4ZDYyZGY4MDksIDB4ZjQwMTNiYmUsIDB4ODU0YmZjNTcsIDB4ZTdlMjhhZTUsIDB4YmUwYWJkMDcsCisJMHhjZTYzYjZkZiwgMHg5YWNlOWMwZCwgMHhlZGQwZjhjOCwgMHgyYWY3OGI3ZCwgMHhiYmNhMjhjMSwgMHg1ZGJhNDk0NiwKKwkweDdkNjE1ZWI4LCAweDFjZDFhNGJkLCAweDM2YjY1NzQ3LCAweGQ5YTZkZTI0LCAweGY3NzhiZTVjLCAweDlmODZmZmZlLAorCTB4MThmMWRjYmUsIDB4MWU1YzMzYzcsIDB4MDU3ODE4MjcsIDB4YTdjNTViN2EsIDB4MTUzZGVkODIsIDB4MzMwZGJmOWIsCisJMHgyZDc5Y2I5NywgMHhiZmUxZTdkNCwgMHhhZWUxZTM5NiwgMHhjZjNhNTU5MiwgMHhkMGM4OTNiNywgMHg1NzRiZjBmOSwKKwkweGUxMDY2YTUxLCAweDhkZTZhYWZkLCAweGJkOWI5NGFhLCAweDc1OTdlY2M1LCAweGIwY2UzOWRhLCAweDkxODIyMWNhLAorCTB4MjhhMWNmMDQsIDB4ZGY0NWQ3YmIsIDB4NjI4ZmFlMmYsIDB4MTg1MTYxNzksIDB4OWNmOTlmYzksIDB4NDM4ZTcwOGEsCisJMHhkZGEwYzRmNCwgMHg5NjU0NzdhOSwgMHgyNWUyYWE4MywgMHg1NzFlYWExZSwgMHg1NmM1YjAwMiwgMHhmYzhhNDhjMSwKKwkweDA0YmYzMjEzLCAweGQyNTUyNmRlLCAweDNmMDBkNzhmLCAweDE3OThjZGQ2LCAweGFiNmY1MjRkLCAweDAzZjcwNmI0LAorCTB4YzBlNzlkMmYsIDB4NGFiZDczMzYsIDB4MzhkMWU3OWEsIDB4ZWZlNjU5YzgsIDB4ZWI5ZGEyZDUsIDB4MzZmZWVjZDcsCisJMHg2MGRkZjhjYywgMHg1MjdkNjVkZiwgMHhjODU1NmJkNywgMHg3YWE3MDQzMywgMHhiM2NiMDQ0NywgMHg0MDIzOThjNCwKKwkweGVmMTRhYjU3LCAweDI5MTUwZWMzLCAweGVmYTBlMzlkLCAweDJmOTY0ZTI1LCAweGU3OTQ2ZWU2LCAweDgzOGMzMzQ3LAorCTB4MGRkNzgzOTAsIDB4YWU2N2I5NjYsIDB4YmUwNGNkZTIsIDB4ZDY3MGJhYzQsIDB4MWZkY2E5YTcsIDB4NjRlNThiZGUsCisJMHg0ZTQ4NDM5NiwgMHg3ZGFhMzk2NiwgMHgxMmUzOWQ4ZSwgMHg4MjVhZjM5YiwgMHgxZjlhYzc5MCwgMHgwYWQwZjE0OCwKKwkweGYzZTQ3ZjMyLCAweDk2NzA5ZWU4LCAweDRhYTc5YTdiLCAweDVkNzlhN2I5LCAweDMxZmY2ZTFmLCAweDM5MGJlYjQwLAorCTB4ZjliOWUyNWEsIDB4YjcxZTFjOWUsIDB4ODlkYjJhOWYsIDB4MjAwZjUyM2UsIDB4N2ExMzNhYjksIDB4NDFlNWMxMDIsCisJMHg2NzQ3MmViOSwgMHhiMDRhZmFjNSwgMHg5YmZjZmFlZSwgMHhlMGEzZGI2MywgMHhmMWU1MTJjNywgMHhkODZlNGJkZiwKKwkweGVkODc5ZGEyLCAweGYwMDNjMmViLCAweDhhNTQ5YzUzLCAweGY2MGM1YTBlLCAweGU0MzI1YmE5LCAweGFjNzIzMWY5LAorCTB4OGY1NmFiNzcsIDB4OTY2NTE5ZmQsIDB4ODBmZjc3YTksIDB4ZDA3YjI5ZTAsIDB4ZTk0ODZlZTIsIDB4ZjVlMTA3NWEsCisJMHgyN2ZlNjI2NiwgMHg4M2U3ODVkNywgMHg5NThlNDZlZSwgMHg3OTYzYTdmNiwgMHgwZTQ3OWY5MiwgMHg3M2JmMWMxNywKKwkweGVkZWZkNmJiLCAweDlhNTMxNjE5LCAweDQ4ZjQ0MTE4LCAweDk0MmM5Y2ZkLCAweGUxYThlZGY2LCAweGE0MDc2YzQ1LAorCTB4YmJiOWJhMzUsIDB4MTkzNTkwMzgsIDB4YjMyYTljZjIsIDB4OWFmZWZkMTcsIDB4YTRlOWUwNmUsIDB4ZGU1MmYxOGIsCisJMHhkOTRjYjkzZCwgMHg3MmYyZTEyNCwgMHg1ZmM4ZGZiYywgMHhmMGZkYjM4NSwgMHhlOGRlNzZhNCwgMHgzNDc0NDFlYiwKKwkweDhkNzFjZjgyLCAweGU4ZDNhZDlmLCAweDc0Y2Y1ZDY2LCAweGI5OGJhMjYzLCAweDM3NDFiNzkwLCAweGQ4YjllNDczLAorCTB4ZmFkYTU3NDksIDB4N2FmMGRkMTIsIDB4NDg1ZDEzYjcsIDB4NmJlMjExYmEsIDB4NGI3NDJmYjQsIDB4ZGY0NDNiNzksCisJMHg3YmI3ZDRlYSwgMHgwZTg4YjdkMCwgMHg2ZGU4Yzg5ZSwgMHgwNzQyMTdhOCwgMHhmMTE4MWFjMiwgMHgyNTJjZmM4ZiwKKwkweDJhNDc2MmEzLCAweDU2NDkwNGI0LCAweDJjZGM0N2UxLCAweGQ3YzY0NmNlLCAweDRhYzBkNjVkLCAweDU1YmZhNzgyLAorCTB4YWIwMGNiYWUsIDB4NjUzYTNiYTQsIDB4NWNmOTExZmMsIDB4ZDlmODhiZGYsIDB4MGIxN2ZiZTIsIDB4NGUyZmQ1MmYsCisJMHg0YWI3NmMxMiwgMHgyNjI2ZjkyNywgMHhhNDA5ZGI4ZSwgMHhiMGFhMDc3MCwgMHhmNjhhNTBlNywgMHhmZmIyMzFjNSwKKwkweGM0NmZhMjYyLCAweDVlN2Y1MWIzLCAweGRjYzY5YzRiLCAweDJhN2ZjMjQ2LCAweGZiNDA3ZTU4LCAweGVmNmU3Y2U4LAorCTB4NWVmNmM4YjcsIDB4ZDMwM2E1MmIsIDB4NWY2YTNlZTQsIDB4MmJmOGM2MTUsIDB4MjY0MDczYmUsIDB4NThkMjY0ZTgsCisJMHg2NjI0OWQzMywgMHg0ZjQxMzk0YSwgMHhiYWRkMzMxYiwgMHg3ZTA4OTBkYywgMHg5ODM4ZDI1MCwgMHhmMDg2OTljZiwKKwkweGQ4NWRhYWEyLCAweDdkNDhjZmE3LCAweDRkZjU3OGEzLCAweGJlMDA0NzkzLCAweGQ4M2RlMzY3LCAweGVjYTdhN2MyLAorCTB4NDk0YWZmNjAsIDB4N2YxZjljZTMsIDB4NWI2NTNkMDgsIDB4OThkZjdmMzgsIDB4NzgwZjdiZTksIDB4MTdiOGFkM2YsCisJMHgyNTBmYTJlYywgMHgyN2IxNWYzMywgMHhjYjVmN2I1MiwgMHhhM2JmNzNkNCwgMHhjNzdmOGE3NCwgMHhhNjIzOTBkYiwKKwkweGZlYjk1MGNjLCAweGI5ZWQyMTE0LCAweDMzOGU1MWEyLCAweDM1YjlmZmQ5LCAweDNjOWJmYTkxLCAweDk0ZjBlMTVhLAorCTB4ZjI1NzcwYjYsIDB4YjQ1NWY4MzIsIDB4ZDFhNjNkZjUsIDB4OThiODQzNzcsIDB4NzAxMzljZmQsIDB4Y2Q0Y2M4MGQsCisJMHgyNDgyMWY4NiwgMHhlNGU0NmVkNCwgMHhmZDVhOTkwMSwgMHhjODA2Y2EzMSwgMHhjOWM3MDM0MywgMHg0N2Q3YTdmZCwKKwkweDJkMzdlODNmLCAweGNmYjdlZTUzLCAweGU3YTc3ZGI0LCAweGJmNWNhZjA5LCAweDViNTg0ZDZjLCAweDViNTIzNDVhLAorCTB4ZjNhNTEwNzAsIDB4MDM5ZWM2YjIsIDB4MmE5NDk5OWYsIDB4ZGUwN2FjMjYsIDB4NGQ4YWFhN2YsIDB4MzE3YjZmMGMsCisJMHg0Y2E4ODVmMywgMHg4ZjgyZjgzNywgMHhmYmE2NTkxNCwgMHhlZTk5ODM2ZCwgMHhiN2I0YzZkYiwgMHhiNmY5NDlkZCwKKwkweDdlZDIzOTJkLCAweDBiZjNlOWE3LCAweDgyZTU4MjVkLCAweGVmOTIzMWI2LCAweDY0ODk2ZmI1LCAweGQ1Y2M3M2ZlLAorCTB4ZWQyNzE1MWEsIDB4OTdkZmFjNWQsIDB4ZDdmMTI0NmEsIDB4ZTE3Yjg2YmEsIDB4ZGE3NTJlMzcsIDB4MmM3ZTcwZGIsCisJMHhmYjNhNjA3YywgMHg0OTliNGJmYiwgMHhmZDVjNDdiZiwgMHg0ZjdlYjM1YSwgMHg2NjU4Nzg3YSwgMHhhODdhZmEzNywKKwkweDAxOWEwZTVlLCAweDU1YWQ5NTFkLCAweDM2MDcwZTk4LCAweDk5N2RlYzc4LCAweGNjMmUyOWNmLCAweDRjMTljY2FmLAorCTB4ZjMyZmZmMDcsIDB4ZjA1YzczODQsIDB4MzdmYjdhNjUsIDB4YjA5MWY3ODQsIDB4YmEwZTBiMWYsIDB4ZDdjODNhMWEsCisJMHgzNzE2ZTMwYiwgMHgxYTdlYjMxNSwgMHhmZTYzZWQ5OSwgMHhiYzI1NTAzNSwgMHhkNGNmMWQxMCwgMHhlYzEyNmZlOCwKKwkweGQ2NGJlMGEwLCAweDk3ZDhiZWQ2LCAweGRmNjg2NWFmLCAweDRlOTk1Y2UzLCAweGJlNzBlYmE2LCAweDczNjZkMDZmLAorCTB4YjZiZTAyNjUsIDB4OWMxNmUxNTUsIDB4NGE1NjkzYjcsIDB4ZTc3ZGE2ZmEsIDB4YmI4MGJkYzAsIDB4ZmMwMjIyYWMsCisJMHg3ZWQ2YjhlMCwgMHhkMTZiMGFmZSwgMHg3N2Y3Y2E0NiwgMHgxYzU0NmIwOCwgMHhlOThmMmJlOCwgMHhmYmU1OTAzYiwKKwkweGU5ZjdlYjBjLCAweGM4MjhjNDJmLCAweGQ3NmJhNTBkLCAweGZhMzRiODQ5LCAweGUzMjNkNjEwLCAweDRmOWM2OWUzLAorCTB4YzNlNGE0YjcsIDB4NTNkM2EwYWUsIDB4NzY2YzZiMjAsIDB4NWQwMzA4ZTYsIDB4MWU5ODUwY2MsIDB4NjA4NzNlNjgsCisJMHg1NTk3OWQ5ZiwgMHhmYTcyOGY5MiwgMHgzMmY0MWZiZSwgMHgxZDMwNmM2OSwgMHg2YTg1ZDg3MSwgMHg3NmFiYzcyNSwKKwkweGUyMGYwYTI0LCAweDNiNDQzYTg3LCAweDI0MWQyM2NiLCAweGVhM2Y4MDhmLCAweDI3ZTc0NjdjLCAweDQ3NWUxNzQ0LAorCTB4ZWI3YWQ3NDIsIDB4M2Q2YjY1N2MsIDB4ZGU3ODQ2ODEsIDB4ZjRlMGVmNTYsIDB4YjA5NzdhYTksIDB4NWVkODRmMTIsCisJMHg2N2Y5Yzg5ZiwgMHhiNjljZGRlYiwgMHhmN2YxNjdkNCwgMHg5YzNkZWFlNywgMHg4YTNmNTlkZiwgMHg3YmQ0MmZmMywKKwkweDdlYmJiZjM5LCAweGFiYmZhNzIyLCAweDg0ZWZlMjJmLCAweDNhNGJlNjFmLCAweDkzZjlkMWRmLCAweDlmM2E1ZjRlLAorCTB4MDVhYmE1MGEsIDB4MzNkYzY2ODQsIDB4MGZjY2Y2YTAsIDB4Nzk4ODNlNzUsIDB4ZjhiYmYyNTgsIDB4YTljZWJlOTMsCisJMHgxMTNmOTE0YSwgMHhjZWI0NTBmYywgMHg1NDI4ZmYwMSwgMHgyMmYzM2VjZiwgMHhkY2EzYjllMSwgMHgxZGExZjFjOSwKKwkweDBlYzFmMjQyLCAweDhkY2Y4M2E3LCAweDBkZDhiYjY0LCAweDMyYzM0MGZiLCAweDg2OWRkYjZmLCAweGI5NWU3ODczLAorCTB4YmEwNmFjMjIsIDB4NWMzNmE5YmQsIDB4N2Q3NDBkNTgsIDB4MjlhYzVkNzMsIDB4ZmRlZWJmM2YsIDB4ZmY1MGZhZDcsCisJMHgyZGYxOGIzZiwgMHhiYjFjZmFjMiwgMHg3ZmEzZDRlMywgMHhkZjhmZWZhNCwgMHhlYjAzM2E3MSwgMHg3OTZjNzA0ZSwKKwkweDFlZGVlMzA4LCAweDJhZDFjMWExLCAweGNlZGRiYWUxLCAweDA4YzBkMmYyLCAweGNmZTE0ZmE5LCAweDJkNzM4ODYxLAorCTB4ZmI3ZDg5NGUsIDB4MzFlNzA0MzcsIDB4ZGEwNjFkNmQsIDB4YzE0NmIzNWQsIDB4NzU0YWIzMmUsIDB4MWYyYWE0YWQsCisJMHhmYmU4YmQ2MywgMHgyYWY1YjU5ZiwgMHg3YzYzMGJhOSwgMHhmYjZhMzQ5NiwgMHg0Y2ZmMThkNCwgMHg1N2RlM2NmOCwKKwkweDc4YTc1Y2IwLCAweGU5MWY4MDg1LCAweDQxZWMyZmY4LCAweDcxYzQxMTkyLCAweDY4NTAxMWM1LCAweGFkOTQ4NTFjLAorCTB4YWUxN2IwZjksIDB4ZTQyOGZkNzksIDB4MTBlZWE1NzQsIDB4ODczZWQ1Y2IsIDB4ODQyOGUzOTMsIDB4ZDhkNjc2ZGYsCisJMHg5MDc3NTI5ZiwgMHhmZWQ2ODllYiwgMHhjOGM4MzhhNiwgMHhmODNiNWVlMSwgMHhlYjFiNjgwNSwgMHg0MDc1OTI1NiwKKwkweDI2OGI5ZjYwLCAweDk0ZjFlZjg1LCAweGQ2Y2JkZjY5LCAweGUyZjhhNjI4LCAweGU2NTUzMzdiLCAweGFjMzI4NzhiLAorCTB4MTRjYTBlOWMsIDB4ODlhNTEzOWEsIDB4NWU5ZDI5Y2YsIDB4M2M3MDdmODksIDB4OWU1MzU5NjMsIDB4MmY4MTkxN2QsCisJMHg0YmRmNjg5NywgMHg3OGE2MmNiMywgMHgzMjE5NDNjNywgMHg5ODEwNmEyZSwgMHg2Nzc3YTUwNSwgMHgzMjE3ZGFhNSwKKwkweGRjNzM3M2RmLCAweDI0YmY1ZWJkLCAweGVhNzU3ZjJiLCAweGU4ODNmNDcwLCAweDhmZjZhZWEwLCAweGRkYjk1YTY0LAorCTB4ODQ5NzBjYTEsIDB4NTllNzQxYzcsIDB4NzRlOWM3MTQsIDB4NzJlODJlN2IsIDB4ZWZmOGE3Y2MsIDB4ZWIzZjBjOTUsCisJMHgzZWNmMTU1OSwgMHg3YmZjMmNmZCwgMHhlMzBhN2YxNSwgMHg5ODYyYTlmMywgMHgwZWM4ZGY2NiwgMHhmMmNlOWM4YywKKwkweDhjYTlkNzhmLCAweGQ3MmRmYzg0LCAweDdmZDNmYzdmLCAweDU0N2M0Njg5LCAweDU3Njk0ZWNkLCAweDY5MGRiNGE1LAorCTB4NmNlNWVkZjUsIDB4ZDBmNmFiNTcsIDB4OWYwMzg4ZmUsIDB4NWZjZGZiMzUsIDB4ZDE0ZmY2N2QsIDB4Zjg5N2FjYWQsCisJMHg1YmY4YjQ5MywgMHhkZWFhZjc4ZSwgMHhjMGUzODI3OSwgMHhkMGFmYjhmNCwgMHgzN2NhMzU3NiwgMHg3MWVhYTdhYywKKwkweGI2M2ZiYTAxLCAweGY3OGQ5ZjcwLCAweDg1MWVjZDRkLCAweDVkOWE5OGY1LCAweGU3YzAxMzE3LCAweDRhYWRmNjZhLAorCTB4MjcyZTJlZTgsIDB4NWUzZDVmYjQsIDB4ZDViZmI3NDAsIDB4YzM5ZmI1ODgsIDB4YzM4NDQ4N2YsIDB4ZmZhZDBmZjgsCisJMHhhZjU0NjY3NiwgMHg2MjA1NDM1MywgMHgzYjYwYWVkNSwgMHgxYzcwNTU4OCwgMHg4ZTJkNzJjNywgMHhjMTkwMjNiMywKKwkweGU0OWVlMTdlLCAweGM0ZjU5YWVkLCAweGVkYmY0OWYwLCAweDEwNjNiYWIwLCAweDg4NDE3Y2FmLCAweDUzYWRkZDg5LAorCTB4N2U3OTIwZmMsIDB4MDQ3ZGEzOWYsIDB4ZWQ4NWYwYmYsIDB4MTc5MWNiMmEsIDB4N2VmMTQ3YjYsIDB4ZmY3ZWRlYTgsCisJMHg1NWRiYzQ0MSwgMHg4ZGQ4NTY2ZiwgMHgzMDhlMjU1NywgMHhhYTc3YWFkZSwgMHgwZmUwNjFjMiwgMHhjNTBiYjAzNSwKKwkweGQyZTcwY2Y3LCAweDQxNmFhM2E3LCAweDE0NWE0YjVmLCAweGFkZjgxNmVmLCAweGRlOThlZTFkLCAweDM1ZGE3ODA2LAorCTB4ZDYxYTVhZmEsIDB4NDVkNzkyMzIsIDB4ZjgxNGZmODMsIDB4NWNjZTQxOWEsIDB4OGU3ZWY3YjIsIDB4ZTc3YWE0MTMsCisJMHg2ZGY5YWU1OSwgMHg1MWIzYzcyNCwgMHhjZTAzNmYwZiwgMHhkODBhMWIzMywgMHg2NWE0YmQ0ZiwgMHgwNWNiMzU0NywKKwkweDEwNWQyM2RiLCAweGNjZGI0ZTY5LCAweGQxYmUyOWY3LCAweDkzNDZmYmM2LCAweDRmYzBjZWQzLCAweGFhY2ZmNjgyLAorCTB4NGUwMzBmMmMsIDB4NWFkM2NiZWMsIDB4Y2VkZWFiM2MsIDB4YjNiNjQ4MzIsIDB4MGRmYjc4NjgsIDB4YWU4OGU3ZjYsCisJMHhkYTVhNGJmYSwgMHhmZWE5ZDNhMiwgMHhlN2RmYmIyNywgMHhlZTQ4MzlkNCwgMHgyM2NlMjVlMywgMHgzZjQ3MzhiOSwKKwkweGY3YzkxOWQ5LCAweGY5ZDkzZWVkLCAweGQxMmYwOWViLCAweGM2NWFlNzc4LCAweGZiMGM1MmY0LCAweDFiMjBlMDZjLAorCTB4NDFiNzNmZDcsIDB4MjVmMzAxYzYsIDB4NWEwZmQ2MTEsIDB4YjY2NzNlNzgsIDB4MjdhYzI5MjcsIDB4OWY4NGRmMDMsCisJMHg4ZjlmM2IzMywgMHhmNjNlZjBiNiwgMHhhYjcxN2JmZiwgMHhjODZiMTViMywgMHhiMmViODQ3ZCwgMHg1YmZlODA0NywKKwkweGVkMTFmYmI1LCAweDdmZTVmZDlhLCAweGVkNmFmZmE3LCAweGE0NTI5YjdiLCAweDNiZWYyMzhkLCAweGMyMGUzZDA4LAorCTB4ZDUzYmVkYTUsIDB4Nzk2ZWZiYzksIDB4MmZlZjlkOTQsIDB4YmVlNjE4MmMsIDB4ZThmODFlNzEsIDB4NTE4ZTMyOWIsCisJMHgwNDNmNzdmNCwgMHgzYmMxNmZmZCwgMHg1OTZmNmNmMSwgMHg0MWY3NzM2ZSwgMHgzNmMzOGJmZSwgMHgyODJjMTNmNiwKKwkweGExZjUxY2YwLCAweGVkOWQ4YzdlLCAweDc1YjEyMjRhLCAweDZkYWRlYzA0LCAweGE4YmU1MjI5LCAweDkzM2I0MzVjLAorCTB4ZTg4ZmRjNTAsIDB4YWNmODRmY2QsIDB4OGY4NDU4MGMsIDB4YTUwNzkzZjIsIDB4NTIzZWJhZjIsIDB4ZDlkYWYxNmUsCisJMHhmYmU0MTNmZiwgMHhjMmVjYzc5MiwgMHhmZTJmN2I4ZiwgMHg1ZDdlYTRlNywgMHgwZWZkMmE5OSwgMHg1MTdmNjA4ZiwKKwkweGNjMTcxOTVhLCAweDRlZGQ4NzhjLCAweDY5Y2E5YmEzLCAweDlmYTA2ZTU0LCAweDRjYzE0ZGNhLCAweGVkNjc0ZmM4LAorCTB4NzI4OTFlZDIsIDB4Zjk5NTRkZTgsIDB4NDY4MzVlYjIsIDB4ZmQwN2U4YTcsIDB4Y2ViOGE1YjYsIDB4MmJiYmJjYjMsCisJMHhiMGVmNDA0YSwgMHhlZDI1MThiYywgMHhkZjA5YmYyMSwgMHhhZjM4NjYxNCwgMHhlOTI0MWE2ZiwgMHgwN2YzNDFiOCwKKwkweGY4NDhiN2ZhLCAweGY4ZTQxNzAwLCAweDRjYTZmNjI1LCAweGI4ZmFiOWM4LCAweDc4OWJhMjRiLCAweDc4ZGFiM2JjLAorCTB4YTQ5YTIyNGIsIDB4Yzc4YjQ0ZmYsIDB4ZGYxZTdkNDMsIDB4ZDNiZmQ4MjYsIDB4Y2IxODY0ZmUsIDB4MWVmYmE3Y2IsCisJMHg5ZmUzMDE3OSwgMHhjNzMwNzI3ZSwgMHgwNGE1YjQxMSwgMHhmMmU2ZWQxNiwgMHhhZWUzOGU3MCwgMHgwODJjMmE3OCwKKwkweDMyN2IzZjc4LCAweDlmNThlZDhhLCAweGY2MWNhNGQ5LCAweGNiMDI1NDU5LCAweDFlYTI4NzYxLCAweDNhZmU4MDVjLAorCTB4ZTAyOTg3MzYsIDB4YzIyOTlmYTMsIDB4MmRmMjg4OWUsIDB4YTgwZTU5YmQsIDB4M2Y2M2FmYTgsIDB4MTdiMTA1NDksCisJMHg0ZTk0YWZjOCwgMHhkOWY3ZGM4NCwgMHgyNzZjYzE5NiwgMHg5NTBkZWNmYSwgMHhmN2QwMjkyZiwgMHgxM2VlZjgzNSwKKwkweGM2N2UwYjRkLCAweDNmZjRiZmYyLCAweDZmZWE3ZTllLCAweGFmZjNiYjgzLCAweGRiMzY2YzU0LCAweGQ3ZjVmNGMzLAorCTB4MjQxOGVmY2IsIDB4MGM3NzAzZWQsIDB4Y2FjOTdhOTIsIDB4N2ZlOTJlNDEsIDB4MzA3OTZjOGIsIDB4ZjkyOWU3OTUsCisJMHhlYjAzYWQwMywgMHgxMzFmYjQ3ZiwgMHhkNjNmNmY2MCwgMHg3MTQxMjdiMiwgMHhjY2MxY2YwMiwgMHhkYmVmMDM1ZiwKKwkweDdhNzU5ZWE0LCAweDQyZmQ4ZGJiLCAweDc5NDYyZjE1LCAweGU3NzRmZWQ5LCAweGIwZWY3YzE1LCAweDc4NzI5NTQyLAorCTB4ZGJkZTQ1ODUsIDB4OTllZWQwYWIsIDB4YjI2NzQ0NTYsIDB4Y2RmMDhiN2QsIDB4MTZmYjZkN2EsIDB4OGU0NzFiNTUsCisJMHgwMWQ2ZDlmYiwgMHhkNDEwOWZkMiwgMHhmMGU0MmZmMiwgMHg3MTQ5YjgzZCwgMHgyYzY5ZTZlMiwgMHgwNWM4NmQ1ZiwKKwkweDhlNmUyZjVlLCAweDFhNzlmOGU0LCAweDg3Yjg4YmM3LCAweDVjZmQ5ZjhhLCAweDExNjYzM2UyLCAweGFlNzQwN2ViLAorCTB4ZDRhZTdmMzEsIDB4OWRkNTczZjgsIDB4NWVlMGM3NTcsIDB4ZTU0Nzc4ODEsIDB4YWQxNzEyZmIsIDB4YmZlMDNlOWUsCisJMHg0ZjdhZjhhMSwgMHg1ZjRiNjNlMywgMHg0MWY5OTQ3OCwgMHhjNDE3ZWQyNSwgMHhmY2Q1MmQ1OSwgMHg1MjlmNGJjYiwKKwkweGJhNWM5ZTU4LCAweDk4ODdlYWZhLCAweDEzNmRiZWVmLCAweGI2NzA1ZmI4LCAweGUzNjhmZWU1LCAweGY4ZDVlYzdhLAorCTB4MGY3YjU3NjcsIDB4ZjU0YTVmZDcsIDB4YTMzN2ZiNjUsIDB4MzZhZDllMTksIDB4NWQwOWUwMGYsIDB4ZmVkZGVmYzcsCisJMHg2YTVmZjUyOSwgMHhmMjQyZDE1ZiwgMHhmM2U1ZWU0NSwgMHhkYzhlMjhiZiwgMHg5NWYwMjdmNiwgMHg2NzZjZTFlZCwKKwkweDdiZTdmNWEzLCAweDJkNmM2NzQ2LCAweDMzZmYzMDhiLCAweGJmMzM4NGNmLCAweGY3MmIxMzM5LCAweDllNzQyN2ZkLAorCTB4ZTc4MGVkZmEsIDB4NWRiMWY3ODcsIDB4MDJlOWJkZWQsIDB4ODBlMmQwZTcsIDB4YWUxZDVmYjksIDB4YWZkZjFhZmQsCisJMHhjMGM0Zjc4YSwgMHhlYjQ1NTM0ZiwgMHg3ZDY4ZmU4MSwgMHhkZmVkYzQ3ZSwgMHhkMGZiNzFiMSwgMHg3NjhlM2NmOSwKKwkweGY0ZmIwYzIzLCAweDliYTY0ODk5LCAweGJhZTRmZDMzLCAweDEwNzY3OTljLCAweGIxNmQ2NzlmLCAweGRlMDlkZTkyLAorCTB4Njc0YmU4NjQsIDB4MWI4YTY1NjIsIDB4MGE4N2EwM2UsIDB4MzM4N2E0OTcsIDB4MWVkODVhNjMsIDB4YzFkOTQ2NzAsCisJMHhiNjRkOWI2OSwgMHhmY2QzYThhYiwgMHg4OTdmNDRkYSwgMHgyNmQwMWZhMCwgMHhiNThlYTllYywgMHg4MGM3MjA0NywKKwkweGU3Y2M4ZmNmLCAweGNlZmI4ODM0LCAweGQwNzM3NmExLCAweGJlYmZjZTI5LCAweDg0ZGNmMjU5LCAweGNmM2UwNTc4LAorCTB4ZTNmNjFiN2UsIDB4NzMzZGYwYjQsIDB4NTY0ZjI2OWYsIDB4NGZkY2JmNmUsIDB4ZGNhYTc1ODgsIDB4ZWIzZmIwYWUsCisJMHgwMmZlNzY5MiwgMHhkZGJhNWVlYSwgMHhhOTcyZTg5ZiwgMHg2ZTIyZjE1ZiwgMHhiMmUzNjk2YiwgMHhhNWZiYTAyNSwKKwkweDgxZTZlYmI1LCAweDJjNzlmNWVlLCAweGI3NWZlZWQ1LCAweGQzYzMyYTI5LCAweDI3ZmI0ZTE2LCAweDc0ZjFmMmZiLAorCTB4OGE1OWFhZmMsIDB4NWMyNzlmMWUsIDB4N2I0NWY5ZmEsIDB4MmRjYjJjMzgsIDB4NGRiMjg4ZTksIDB4YTM2NTVmZDQsCisJMHg0OWM3OTZiMiwgMHgzOTViZjVkMSwgMHhiODRmMWQzZiwgMHg1ZWZiMDJjZCwgMHhiOWRmNzY5YiwgMHg3MGViZjlhNywKKwkweDUyNGYwNGY2LCAweDZkNGZlNDk2LCAweDZmOWVmMjI5LCAweGJlZjI1YmZiLCAweDBhNmZjNWY2LCAweDgxZmVlMjYyLAorCTB4ZmE5MWM4M2MsIDB4N2YwNDdmN2EsIDB4NzIxMDY4MTYsIDB4OTZlN2M2OGYsIDB4NzA0ZWFlYzIsIDB4ZmIzMDZlNjYsCisJMHg5YjM2YjI3MywgMHg5YmI2NDNmMywgMHhjZDNiZDlmMywgMHhlNmJkZGNmOSwgMHg3MzU1ZTdiYywgMHg3YjcxODVkZSwKKwkweGZhMDllMTc3LCAweGExMDNlMjM2LCAweGJlODUyMzZmLCAweGZhOTRjZWVkLCAweGI3ZDBmMjM2LCAweGM2ZGY0MjkxLAorCTB4YzhkYmU4NzcsIDB4MWU0NmRmNDMsIDB4ZDBmMjM2ZmEsIDB4ZGY0MjkxYjcsIDB4MWEzOWY3YzYsIDB4N2IzNTJhOWUsCisJMHhlMzgxZDYyOSwgMHhlYjg0ZjZkNCwgMHg1ZmJjMDBmMSwgMHg2MDQ5Y2MyZSwgMHg1MmFjMmEzZSwgMHgyNGIwYmQxZiwKKwkweDRlYzdlNTliLCAweDA3NTRkMzNiLCAweDM4ZjQ5OWRiLCAweDdjYTJiN2E3LCAweGMzN2FiMmUzLCAweDc1NjQ3YjdmLAorCTB4Yzc2ZTE0ZGYsIDB4ZGY5YWU3ZjYsIDB4NjU3M2ZiNDksIDB4ZjYxM2I4N2UsIDB4OWY1NWQ2OGUsIDB4MTNkODg2YWMsCisJMHg0NDRkZjI4OCwgMHhmNmI2MGJmZCwgMHg1NTZmYzBhZCwgMHg2ZmVjMmJkZCwgMHg3ZWUxNWQ2ZiwgMHhmZDcyMDdlNywKKwkweGM3YTJlZWQ4LCAweGRjZTMxNTJkLCAweDdkMjZkZjAzLCAweDdiNmZjNjQ5LCAweDZhM2I0NjFjLCAweGFjNDg1ZmE4LAorCTB4M2YyMWU0MzUsIDB4YTFmMzliMzUsIDB4MzVmMDIwN2UsIDB4MzU1ZjY5YWYsIDB4NmUzYzFkMzEsIDB4YmUwYmVmNmIsCisJMHgwNzQ5ZTI3ZiwgMHhhMTNhZjNkZiwgMHg2Y2M0ZWRkOSwgMHhiYTYzY2IxNywgMHg4ZjI5ZGYzYywgMHhjMjZjYTNkZCwKKwkweDJiMjRiZGY5LCAweDFjNzdkYjhlLCAweGQzZGQzMGNhLCAweDJmNGI0ZDBiLCAweGRhYmNiM2U1LCAweDU4YWI1Zjk5LAorCTB4OGNkOTRlMzAsIDB4YWY1OWZiMTUsIDB4NzNlNjhjNGUsIDB4YjYwZDE2ZTksIDB4MGRmZjkwNDEsIDB4NDQwZTBmNzAsCisJMHhlODY4ZTg5OCwgMHhiZjEwYjhiNiwgMHhmZDUzM2Y2NSwgMHg0MzUzYmI2MSwgMHg0YzQzOTZmYywgMHgxNmQ3ZDNlNSwKKwkweDE3YjVlZjk4LCAweDFmMmE2ZDVkLCAweDg3OGNlZjY4LCAweDk2ZmY0ODczLCAweGQ2NGI5ZjA2LCAweGU3Y2NlOGI5LAorCTB4NGJkNjg2ZjksIDB4ODQ3ZjNjNTYsIDB4MjViYzU2YmYsIDB4OWEzMmQzZTUsIDB4N2I0MGI3ODcsIDB4ZmUxZjIzOWYsCisJMHhlMDE0ZWYzOSwgMHgxNmM1YmNhZiwgMHg1NGJlZjM4YiwgMHg5ZDQ0ODczYiwgMHhiNzJlNWNmOSwgMHhhZTJiYmYwYSwKKwkweDVkY2FlZThiLCAweGVkNGIxYmMyLCAweDI1MzZiNGJmLCAweDcxZGQxZDMzLCAweDE0MjU1OTM0LCAweDI0NzIxOTJkLAorCTB4ZTU3ZDA4MzcsIDB4ODI0NjI3OGQsIDB4OGRkNGFhYWUsIDB4YmYyYTJlYzksIDB4YzU2YzA5NTUsIDB4NzFkM2VjNDUsCisJMHhhNGFlMTIzYiwgMHhmOGI0ZmZmMiwgMHg3NWEyYzkxZSwgMHhlZjA1YjY0YSwgMHhiYTNlMGY5ZCwgMHhiZGUwNGQyMywKKwkweDlmNmIxMzkxLCAweDNjYjhlNjhmLCAweDZkOTJmZThkLCAweGMxZDAwOGFlLCAweGY1OTUyNmM2LCAweGQ0Y2RkODE0LAorCTB4ZDkzYTJlYjgsIDB4MDExZjE0ZDgsIDB4OGM3Y2E2YmQsIDB4NzE3Mjk3ZTIsIDB4MGJkZjQ5YjQsIDB4OWFhMTQ3YzUsCisJMHhlNjliOGVmZCwgMHgyYTkwZjE3YiwgMHhmMzZhNDBlZiwgMHhmNTkyZWU1YywgMHhhZjZjYmE0NSwgMHhlN2Q3YjNkZiwKKwkweDQ3ZDM1MjdiLCAweDk2YmUzNjJiLCAweDNmN2QwYjc5LCAweDJlN2Y3ODNiLCAweGQ2NTc4NGFlLCAweDJmNzllNmVmLAorCTB4ZGFkZjZjYjUsIDB4MWQ3YmQyOTcsIDB4ZDc5ODVkYmUsIDB4NDVjNmI3ZjIsIDB4N2NlMzQ5NWYsIDB4ODdjNjVkYjksCisJMHg4OWY5YjVmZiwgMHg0ZmM0ZmNjNywgMHhjMjdhNmNlZiwgMHg4NTQxZmIwZSwgMHgxZTg3NjAzNSwgMHg0NmU0ZmU1YywKKwkweGFlMThlMjNiLCAweGJmOTFiNmRiLCAweGNjNTZkYTJmLCAweGJlZmQwMGY2LCAweDdjN2FhN2RhLCAweGYyOGY4NmIzLAorCTB4MTcwNmNhYjEsIDB4NjBmZmIzY2QsIDB4MjNjYTRmYzksIDB4YTE0YjFjNjQsIDB4ZGMzNWZhM2EsIDB4NGRiOGI4MTMsCisJMHg2NmJjYzNjOSwgMHhlM2IwZWQxNCwgMHgxYTNiZmYxZSwgMHgzN2RkMDlkZiwgMHgxN2E3ODcxZCwgMHhhYmJkODZmNiwKKwkweGRmMjBmMTQ1LCAweDg5OTkzZWQzLCAweDBmNDQ3MmNiLCAweDM5YjkyZmQzLCAweDA4Njk3MTlkLCAweDBhMWZkNWViLAorCTB4OGU3MGJlZDIsIDB4ZDdlODg3NjQsIDB4Y2Y2OTU1ODcsIDB4YWQxMjNjNDMsIDB4ZDgzZGI5NzMsIDB4ODVlNDNhNmIsCisJMHgwZmZiZTU5NywgMHg4ZDBlNzQ1NSwgMHgyZWRlODdjYSwgMHgxNjk0NTVjNCwgMHg3NDRkNTY4ZCwgMHhkMjNlMzM1ZSwKKwkweDBiNjYwZmI0LCAweGZlYTJiZWMzLCAweGE2N2U4OTY2LCAweDY5NDk4Y2ZjLCAweGNlMzdmYWE2LCAweDY3ZTIxYTE4LAorCTB4NjcyYWVmY2UsIDB4ZTk5NTc1ZmUsIDB4ZGJhYTk3NWQsIDB4ZTM4NTZlZmQsIDB4YmY5YWM2N2IsIDB4ZDMzYjdhNTMsCisJMHhmNmE2MGRkOSwgMHhlOTlhNjI1NSwgMHg5YjI1OTc1ZCwgMHgxMzNjNjVkZiwgMHg4ZmExZDk5NSwgMHg0MWY3NmI5NSwKKwkweGI0ZGFmYjY2LCAweDlkZmNhZGVmLCAweGFmZGE2MjI2LCAweDdmM2NkMzAzLCAweDhkYTVlNzk0LCAweDFkYmEwOGZkLAorCTB4OWZmZTM2N2QsIDB4MTk3OWRkZDYsIDB4ODk4ZjE5ZDEsIDB4M2JkODViZjgsIDB4ZTQ3OTY2N2MsIDB4NDJhOWViMDgsCisJMHg2Njk1NDNhZSwgMHg5MmNhYWE4ZiwgMHhmZjJhYThmNiwgMHg5YmUyM2IxMSwgMHgyNGQ2ZmYwOSwgMHg5Mzc1NDk0MiwKKwkweGFhNDZmNmMyLCAweDkzOGE0OGVmLCAweDdkZjFkYmY5LCAweDA3NWVmOWE3LCAweGYyODRiYmZhLCAweGY2MzE2YTQzLAorCTB4MzU3OTY4NTcsIDB4NDJlNzFiY2QsIDB4YjA0N2VjMzUsIDB4NmJmZGU5ODMsIDB4MTlmNGVhZmQsIDB4YjQzZWNmN2EsCisJMHgzNzYwZGYxZiwgMHg2ZDhhZTdlZiwgMHgyM2Y2MGUzYiwgMHg4YTJmNGNiYywgMHg0OTdjNDNjZCwgMHg1YjU0Y2I2NSwKKwkweDc0ZTVmNjcxLCAweDhiZmRmM2E2LCAweDdmYjYxNmU1LCAweDg1N2UxYzc1LCAweGRjYTNhY2U5LCAweGRkZjE5MWVhLAorCTB4ZDUxZjE4ZmYsIDB4MGQ2ZjY5NWUsIDB4MzQ0NWJmYTUsIDB4MTc5OWY4MWYsIDB4MDEzYzU0ZWQsIDB4NWUwM2Q2NDUsCisJMHg0MzJlODFmYSwgMHgwZGQ0OTJmMCwgMHg3NTNjNzRiZSwgMHg3Y2E0MmRlMiwgMHgxYzMzZmUzMSwgMHgwMDRhMTFmMSwKKwkweGJjMzJmMjdjLCAweGZhZDQ3OGU4LCAweDJjMTNlNDVmLCAweDAxM2MxMjY3LCAweDNmYTQyNzg2LCAweGZmNzQyYTMxLAorCTB4MjBlZmMyZGQsIDB4ODQ1MDZjNzQsIDB4M2M2ZWY5NGIsIDB4ZWQyNGJiNGMsIDB4ZTRkMzAzMzYsIDB4Mjk3N2RiYmMsCisJMHhiM2ViYzgxZSwgMHg3YmY5NTkyZSwgMHhjOTE0YmQyNywgMHg5MzE5ZjUzOCwgMHg5M2IzZmJjYywgMHg3ZWU0OGE3ZSwKKwkweDgxMjk3OTk5LCAweGQzNmZmZGRiLCAweDhmZDE3N2QxLCAweDhkMDk5ZmVlLCAweDVkZWZkNmZmLCAweGRkYWMxYTJkLAorCTB4NDYyMTFhNGIsIDB4YzQ0ZmZiN2MsIDB4NDA3MmViYWYsIDB4ZTc0OWU3NGYsIDB4ZjBkMmUzNzksIDB4ZjZlZDRjZWYsCisJMHg5NTFlNWUxYywgMHgzZWRhZjFjYSwgMHhmM2E4OGVjZCwgMHg0ZWQ2OWY2MywgMHhjYTk4YjcxZiwgMHhlZmEwMDVkZCwKKwkweDE3YjAwOWZlLCAweDRiNGM2ZWFmLCAweGUzMTdiZTM2LCAweDNiNjM2NTViLCAweDc4OGFmMjZmLCAweDVkYzM4YjRlLAorCTB4OGE0NzM4MDksIDB4NGQ3N2M4NTcsIDB4MjdkNWRmOGUsIDB4ZTM4OGZlMDEsIDB4MjZiZDZjYWIsIDB4N2ZjN2Q3NTEsCisJMHhlNDU5M2MzYSwgMHhlOWM4NWYyMCwgMHhiMzYxNzU4OSwgMHgzZDc4NzY4ZCwgMHhlZDJjMWE2ZCwgMHg3ZTM5ZmEzNSwKKwkweDdhMzg3MmNlLCAweGFhZGZmNjM2LCAweDA1MDhkMTVkLCAweGZkZWFiYTVhLCAweGNmM2EyZTkxLCAweDhmN2M1OTU3LAorCTB4ZWY3ZjY2MGYsIDB4ODVjZjNlNDYsIDB4ZWMyZTYzNmIsIDB4NTEzY2JhNzAsIDB4MGZiMGFhYjEsIDB4ZmZjYWZkY2UsCisJMHg5YzMxZTU3OSwgMHhiNjE1YmVmYiwgMHg5ZmEzYzgwNCwgMHg4NDBhYTA3ZCwgMHhjNjc5ZDBjZSwgMHhlMWE3YzQ3MiwKKwkweGRkM2ZhZTkyLCAweDEwZjdjOTEyLCAweDE3ODQ1NTNmLCAweGVhMjVhNmZlLCAweGU5OTc1Y2ZlLCAweDBiM2JkZDVjLAorCTB4NDFkZWZmZTMsIDB4YjhjMDhlZTMsIDB4MTg4OWFkODEsIDB4YzRjZmUzZDcsIDB4MTkxNWJlYjgsIDB4NTdkOWRkMzEsCisJMHhiZDY2YjRmNCwgMHhlYWI2ZjM5NCwgMHhlZWNkNjRmNiwgMHg3OTFlZjkwYywgMHg2MjcwZjdjOCwgMHgxZTQ3YmU0MSwKKwkweGM4NTIzZGYyLCAweDRkYmVmOGY3LCAweDZjMGMyZmYzLCAweDdlODNjZjY4LCAweGIyMmIxZmVhLCAweDc1YmNmOTZhLAorCTB4YmY3ZTQxNjYsIDB4ODBmMDg5NDUsIDB4NzhhMmRjZmYsIDB4YzFiYzcwZmEsIDB4YzRkZWY5NjYsIDB4ZDU3NTkwZjIsCisJMHg0OWRhNmJkMywgMHhlZGQwMzMwNiwgMHg4NDM5MmUwZiwgMHg4YzZlNmUzMSwgMHhjN2U1MzU4OCwgMHhlYTlhZmEzOSwKKwkweDRjNTJiYTE3LCAweDBlMjVkN2U1LCAweGVmNWY5NTM2LCAweDdmZTUzM2NlLCAweGE5YTU3NTk4LCAweDE4Y2Y2NGZlLAorCTB4YTM0N2ZlNTMsIDB4OWZkNTM3YWUsIDB4Y2E2YTlkZWEsIDB4YzczODlmNGYsIDB4NTE2NjdmNTQsIDB4YzZmY2E5YjEsCisJMHhlNTRjNGJkOSwgMHg0Y2NiN2M3MywgMHgzZmU1NzlmOSwgMHhhOWJmZDUzNSwgMHhkY2E5ODU3NiwgMHg5YzU2NWMyYiwKKwkweDc3YTE3Yjc3LCAweDg2NWZkZTExLCAweDJkZTk0NWRlLCAweDhkMzg2NTZmLCAweDljN2EzYWViLCAweDc5NzdkYmE1LAorCTB4NTA3MjY5NGUsIDB4MzZkZWExYmYsIDB4ZDdlZTI1ZDAsIDB4NjgwNzBlODAsIDB4YzBiZTY3ZjcsIDB4N2UxYmQyYjksCisJMHhmNTIyYTBjOSwgMHg0MTdkMjNkZSwgMHg0MmY1YTEzNywgMHgxZTQ3NDdjYiwgMHgzNWE2ZThiOCwgMHg3YTJhN2EyYywKKwkweGM0Zjg5NWE2LCAweDE0MGUyYmU4LCAweGY1N2U1MWE0LCAweGFkMzM4NTUzLCAweDVmNDY1ZmM0LCAweDU0ZjllMDdkLAorCTB4YjUzZDM3Y2EsIDB4M2IwZjk2NGEsIDB4NTFlNTExNzAsIDB4ZjMyMGRmNGYsIDB4MWE4YjA1ZDMsIDB4N2FmOTBjOGYsCisJMHgzMWU2OWY4NiwgMHg2YmE5MDdmYSwgMHhkMjZlZDIzZCwgMHhhNzY5YmM2ZCwgMHg4MGYwODgzZCwgMHgwMWUwNGQ3OCwKKwkweDEzZTg5MDY5LCAweDRmYTIwMWU5LCAweDdkMTJhZmE0LCAweDcxMGJhNTk2LCAweGU5MTNlODkwLCAweGYxM2ZkMjIxLAorCTB4N2ZhNGY3ZmQsIDB4ZmE0YzNkMjIsIDB4NDliN2QyMjcsIDB4ODQ3YTQ0ZmYsIDB4ZWZhNDRmZjQsIDB4ZjRlNmNmZDUsCisJMHhiNzFmN2E4MywgMHgzOTdkNDNmYiwgMHg2YmViNDdhNywgMHhmNWM3ZmJmOSwgMHhiOWZlOWM3NSwgMHg1ZGRmY2ZkZSwKKwkweDQzM2I3NDQzLCAweGJhMzFlZDkwLCAweDdlMWFhYmZmLCAweDc2ZWRkODQ3LCAweGZkMWFjZWRiLCAweDllNTc4YWMyLAorCTB4YjJiZmJhYTcsIDB4NDZiNDU2YTEsIDB4NWFiNjlmNjIsIDB4YmEzOTRmNjMsIDB4ZjMzZDkwZmMsIDB4NjUzOGFiNWIsCisJMHgwZjVlYmY5MCwgMHhlMTBkMjZmNywgMHg5OGJiZmJmMSwgMHg4ZmRmNmI2ZiwgMHhmMjAzZTk4OSwgMHg1MjBhOWQ2OSwKKwkweDlmMjgyOTdkLCAweDJhYmE1Zjk5LCAweDBmYzdmODg2LCAweDgxYjVhOWJlLCAweDc0YjQzZTVlLCAweDBiZmI3ZjdmLAorCTB4ODdkYTRlOGQsIDB4OGM4NzMzNzgsIDB4ZWJiYmYyZTgsIDB4ZjhjZWVmN2UsIDB4MWU1ZjgzMWEsIDB4OGUzZDZjZmUsCisJMHhmM2M3Zjc0NywgMHg0NzNlMjE5ZiwgMHhmMWViOTNmNywgMHhlZjZhZDc0MSwgMHg3MDdlZTkyMywgMHhlZjQ3ZmUzZCwKKwkweDYwOTJmMGI3LCAweDFhY2Q3N2JlLCAweDUxMmRjYjJiLCAweDM4YzQxMTU2LCAweDM1Y2Y5YzdhLCAweGM0M2M5NjhlLAorCTB4ZTk1MzVjM2IsIDB4M2ViNzM4ZTQsIDB4MjNlZjFkZjQsIDB4ZGUyZjNkNTIsIDB4MjVmY2RiOTksIDB4ZjJlZGNmZDUsCisJMHhlNmQxZjdiYiwgMHg4ZjNjZTU0MSwgMHhiNjNlNGJjMiwgMHhjNWEzNWVkNywgMHg0M2JkYTAxZCwgMHg3NTNiZjM5NiwKKwkweGZjODMxMTg4LCAweGUxZGIyOTQxLCAweDdkYTg1NTFlLCAweDAwMWM1NzdlLCAweGZhY2E0N2VhLCAweGZlOTdmNDQxLAorCTB4ZGQxNzhkMTUsIDB4YzQwNjhmYjUsIDB4NmUyMWU0YjUsIDB4OTNiNTQwNmMsIDB4OGMzNmM2ZTMsIDB4YjliZGYyMDksCisJMHhkZWQ3YjFlOSwgMHg0ZTIyYWFkMywgMHhkOGM3ZTYzOCwgMHhmYWE3NGY0NywgMHhlZmNmMDI2NiwgMHhmMDBmNzNlZSwKKwkweDVjNWE3ZTUwLCAweDUzYTQ2ZjVhLCAweGViYjVkZTQzLCAweDYyZTY3ZDY2LCAweGU5N2M3NTVkLCAweDRiZDdkNzc4LAorCTB4OWUyMWI3YzcsIDB4NWRmY2YxOGEsIDB4NmViYTE3ZWIsIDB4YWZhNWViYTEsIDB4MmVhNWUxNTMsIDB4OTc3ZjAzZmMsCisJMHhmYWQ3NGZhZiwgMHhmZmZiM2VjMSwgMHhiNzBjZmFjYiwgMHhjYzdkZjBiNiwgMHgwNzg3NGFiMCwgMHg3YWQ3N2Q3MCwKKwkweDI2MmVkY2RkLCAweGYxNzgzZWUwLCAweGE0NDFmNzI1LCAweDVmN2NkMjRiLCAweDhhOTY3ZjgwLCAweGMwNWMxMzMxLAorCTB4ODFjZDRiOTEsIDB4ZGViNDI3OWQsIDB4ZWY1OWVmZjIsIDB4MDc3YTkwZTEsIDB4N2NkNjBhZTIsIDB4YmQ3OTc2OWQsCisJMHgxYWY1MjFkZCwgMHg3ZWQ2MGI2MiwgMHgzNzRjZWQyZCwgMHhlNDNkN2NlMiwgMHhlZDFmYjFiNiwgMHgxZTNkNzBjZCwKKwkweGEzY2NlYmMzLCAweGYxYTcxYzc1LCAweDk2YTI0M2EzLCAweGQ3MTIwZmNmLCAweGYxZGY1OGZjLCAweGNiOGY1MmRhLAorCTB4ZWU3MmNjNWUsIDB4NmU1OWE3NzgsIDB4NTE0ZGYwOWMsIDB4ZDA5ZGM2MjMsIDB4ZDY4ZTQ0MmIsIDB4NjgzN2UxZmMsCisJMHg5YTI3NWVmZCwgMHg3YmQwZGZiOCwgMHhmMjY4MzdmMiwgMHhmOTNkZTg2OSwgMHhmMjY4ODZlNywgMHgwMTQ4OGE2NSwKKwkweDNjMmYxYTlmLCAweGJkZWQyZTEyLCAweGQ5MmVmMTgzLCAweDJmNDY5MjZmLCAweDhjNTU2ZTY5LCAweDlmMDgzZDA2LAorCTB4NTVmMWNjMTUsIDB4OGI5MDc3YmMsIDB4YmY5Y2ZkNzEsIDB4ZmQzODA0NWUsIDB4M2Y3MjA4YTEsIDB4MjI5MTg5OTMsCisJMHg2YzIxMjNmZiwgMHg3OTAzOWRmMiwgMHhmNTVhYjMzZiwgMHgyY2U0MjdmZCwgMHhjMmU2NWVmZCwgMHhkOGFiZGY3MCwKKwkweDRlNDRhZjc3LCAweDI4Zjc4Zjk5LCAweDRiOGMxNWM2LCAweGUzMDNiYjQ3LCAweDFjOWYyY2RkLCAweGJjYjFhNDcwLAorCTB4OGI2NTdkODQsIDB4NmY3ZmRhZWIsIDB4NmU5MmY5ZDAsIDB4OTEwNmY3OTUsIDB4M2E2MGRlZTIsIDB4ZTlkNzk2NmQsCisJMHg4NmZlNDFmYywgMHhlZDAyMTVhYywgMHg3MWNkYjgyNiwgMHgxZmZiN2EzOCwgMHg2YjBhYzZiYSwgMHhmZGZjY2Y0MSwKKwkweGZhN2JiOTg3LCAweDY2ZjNhZWMzLCAweGIwZjFhMGVjLCAweDdiMTliZjgzLCAweGY3Y2M3OGM1LCAweDE2M2VkOGNkLAorCTB4MzlkOTg2OTksIDB4YmQzMTc5Y2QsIDB4YTc0ZTc5M2IsIDB4MjZmMWFlZTcsIDB4Y2Y3YzZiMDgsIDB4MWFmMWQ2NzgsCisJMHhjZjFkNGY4YSwgMHgyZjVlMDJmZiwgMHgyZmQ3ODc3NCwgMHgzNzI5MGIwNiwgMHhhMjNlNGE0NywgMHhhYzJhYjdlMywKKwkweDFmNjcxZWYzLCAweGE1NDQ1YzYzLCAweDMzZTllMjQzLCAweGI4N2I4YzgwLCAweDNjZjE1Nzc1LCAweGZkMTdhOTNlLAorCTB4NzU0NWVmODEsIDB4ZDQzY2I4YTMsIDB4YzczNjI1MGUsIDB4Yzc3ZjVlNzAsIDB4ZWY4M2NjZWMsIDB4N2MxMjI3NDYsCisJMHhlYTdjMzlkNywgMHhkOWNiYzI1MCwgMHg0OTI2NjBmYywgMHgwZDkzZTIzMCwgMHhmYWVmN2MwZCwgMHgwN2FhYjNkYywKKwkweGVhYTU3ZmYyLCAweDRmMDFlYjVlLCAweDNmNjU1Mzc5LCAweDk1ZTZmOGEwLCAweGM1MDlmODY0LCAweGEzZTNlZWU2LAorCTB4YWYxMjFkMmIsIDB4MzJiM2ZlYmEsIDB4YTdmNzg4YWQsIDB4Y2EyNDE1NzAsIDB4M2RlNGQ1ZjcsIDB4ZTgxZTVkNzIsCisJMHg4YmUzMjYxZiwgMHgzZGNjZmJmNSwgMHgyMzIzMDdjOSwgMHgxZmViMWYyNCwgMHhiZWFlZjkyNiwgMHhmMzhlZDQ5ZSwKKwkweDQ4Y2ZkNDQ5LCAweGY3NDk1M2UyLCAweGIwM2ViMDQ1LCAweDFhNGRlNWRiLCAweDc4Y2E3ZjBhLCAweDc1YTc5MjYxLAorCTB4OTdhM2JmYmQsIDB4NWFmMDNmN2MsIDB4NjhkMGY5OTEsIDB4NjQzZjhmY2EsIDB4ZWYyYTAxMTMsIDB4ZjE0YzJmMTgsCisJMHg5NDZmODU2NCwgMHhmYTE2YmJmMiwgMHg0NGIwOThmZCwgMHhmYzBjYWZkMiwgMHg2MTFkZGMyMCwgMHgzMjM0NmY3YSwKKwkweDhmOTRjZTJiLCAweGQ1MzNmNGYyLCAweDZhOTUxOThmLCAweDBlZjU4ZjJhLCAweDRmYzc5NTMxLCAweDdiZTUzN2NjLAorCTB4YWE2NTVkMTcsIDB4NThmNjY3ZGYsIDB4ZWZhZmJlNTMsIDB4YTRmZDUzMDYsIDB4YmNhNjY5ZjIsIDB4ZTQ5Mjk3Y2UsCisJMHg3NmEwMzEyNywgMHhjMGZkYTlhZSwgMHhmZDUzMTJiYSwgMHhmOTg1N2YxNCwgMHhmN2JmNTRmZCwgMHg5ZTAyNTY0OCwKKwkweDY5N2Y5NDc3LCAweGJjODc5NjZiLCAweDk2MTE2YWFmLCAweDkwZWY1ZDkxLCAweGRlNWEzYWZjLCAweDVjZTg5OTA3LAorCTB4NjQ5MWVmYzQsIDB4MGNjY2ZkMzQsIDB4OGE4ZGZhOGYsIDB4NDYyOTI2NzMsIDB4YWUyNGY3ZTEsIDB4NjBmOTliNzMsCisJMHgzZjM5YTI2MSwgMHgyYWY3OTVkZSwgMHgyYjljNmU5NiwgMHhhODI4ZmUzNCwgMHg2YTkyOWU4MCwgMHhmM2VmYTZhZCwKKwkweDM0N2M2YTg2LCAweDllYjJlNDU3LCAweGVmZWI1ZGZlLCAweGZmNWE2MjFiLCAweDRlNWQ3YzUwLCAweDA1ZTdjZjBmLAorCTB4NmY5ZWQyZGQsIDB4ZjllYzE3OWMsIDB4OWVjMGJjNDYsIDB4OWVjM2NjNmYsIDB4N2IwZmFjNmYsIDB4ZjYxY2IxYmUsCisJMHhjMTc5NjM3YywgMHg4YzFkMzMyMSwgMHg4M2E2NjIzOCwgMHhlOTlhOGUyYiwgMHhkMGNmYTc0MCwgMHhkNWIyYmFmNSwKKwkweGE3YzIxZjRjLCAweGIwN2Y5NGY4LCAweDZhN2Y1NzVlLCAweGY1ZDA5ZmE2LCAweGQ3OGIwOTIxLCAweDExNTM4MjZmLAorCTB4ZmJmY2E0OGYsIDB4NjQyZWI1ZWIsIDB4ODdkNzNhYmQsIDB4ZjZmOTBkZjAsIDB4YmU1MGUwZGEsIDB4NDg3ODViMjcsCisJMHhlNGI3NzgxNSwgMHhkNzllNmQ1MSwgMHgyN2U1YWQwZCwgMHg3ZDViYjZjMywgMHhhZTdkZTZiZiwgMHg1ZjQzNTVkMSwKKwkweDg3MWQ1NzQ5LCAweDFmMDcwZjllLCAweGZmYTQzNDdkLCAweDAyZjlmYmQ3LCAweGZlM2IzZmE4LCAweGY0MWRiMjYyLAorCTB4NDVkZjJlZDEsIDB4ZWUxZjAzNmIsIDB4NDliNzE1ZGQsIDB4NzdiY2JhN2EsIDB4ZTM5NTMzZjIsIDB4OWE1OThlMTgsCisJMHg4MmViZjAxNCwgMHhmMDM2ZGYxOCwgMHg2YmIzOWJjYiwgMHgxMzY3ZjgxNSwgMHg0NThlZDE0NSwgMHg4ZmY5Y2I4OCwKKwkweDE3ZTQ2NGIwLCAweDc3Zjc5NDBjLCAweGRmMmI3NjQ1LCAweGUyZjlkMDdmLCAweDE3MTkyNDgyLCAweGYzNTQzMmQ4LAorCTB4ZGM2NDdhZjMsIDB4YTU0M2YzY2UsIDB4ZTNjYTI0ZGQsIDB4ZTJlMzM4ZTIsIDB4ODNiZjc5NmMsIDB4MDVlNDk5ZDQsCisJMHhlMWM3YzAzOSwgMHg0N2MwNDFmMCwgMHg2OWRmODViMywgMHgzOWI5YjU2YywgMHg4NmZmYzQ2ZSwgMHg4M2Y3ZTAyYSwKKwkweDcyZjkwYjFjLCAweDM1ZGYyNjgwLCAweDAwNzBlNDdjLCAweDg1ZWI0MWZlLCAweDFjMWQ5Y2U5LCAweDViZTI5ODcwLAorCTB4OTk3MzZlODcsIDB4ODkyZDM5ZjIsIDB4NzZjM2ZhYTYsIDB4NzllNTRkYmIsIDB4Nzk1MzJjYzEsIDB4Mjk4ZjIxYzEsCisJMHgyOGM4ZTIzZiwgMHg4ZTJiZmQ1MywgMHgyYmY5NGQ3YSwgMHhlYTlhMjc1YiwgMHg5MTY5ZmQ1ZiwgMHhkYTI0OWYyOSwKKwkweDA3N2UwNjFmLCAweDNlOGY1MjJhLCAweGUyNTUzNDMzLCAweDdlMzgyZGM5LCAweGIxOWRjMTZmLCAweGE2YTdkZWYyLAorCTB4YmE3MmViNWYsIDB4ZDNlY2Y3MWUsIDB4ZGU1NDM5ZTgsIDB4NzFmNzY4MWYsIDB4NWY0Mzc1MWMsIDB4MTg3YmUxZTEsCisJMHgxMjlmNGQwZSwgMHhhN2MwM2Q2NiwgMHhkZTc3MmRjNSwgMHhlMzliZjBhMywgMHhlNTc4ZjU5NiwgMHhkMzQxN2Q0ZSwKKwkweGRkMzk3NDBmLCAweDM1ZWNhZjEwLCAweDA4MmYyYmM2LCAweGUwM2RmZWViLCAweDNkZDZkMmZmLCAweDc2ODFmZTE0LAorCTB4OWY4NmRmMzksIDB4ODhkZWY5ZGEsIDB4M2MyODU3MGUsIDB4ZGEzOGI1MzMsIDB4ZWZlZThlMmQsIDB4MjViMmQ4ZjUsCisJMHgxNDY1MjU5ZCwgMHhmZWY0MWRmZCwgMHhjYWQzY2Q5OCwgMHgzNjVmZGQ2ZiwgMHg0ZmQ1YTc5ZSwgMHgwYmYwZDVmNCwKKwkweGZiYTU2N2JiLCAweDMwNWJjN2JiLCAweGJlNjdjZTRjLCAweGQ0ZjM3MmM1LCAweDMyY2Y4ZTZjLCAweDNiZGY4M2JkLAorCTB4NTFmZGVhNWIsIDB4ZjNiNzRhYjksIDB4ZTMyMzEwNWIsIDB4ZGQ4YzQ0YTcsIDB4NzllZGZhMGQsIDB4NDRjZjg5M2MsCisJMHhmYmU0NjhiYiwgMHhmZjljNWE0NywgMHhlZTViNmI0ZCwgMHhmMzQ1NDQxOSwgMHg3YmRhNGRlZCwgMHhlODFiMDE2MCwKKwkweDkyNThkMjYxLCAweGQ4ODRmMmMzLCAweGIzNTc2NWI2LCAweGM3YTJlNDkzLCAweDNmNmNhY2VhLCAweDM1ZGRiZmU5LAorCTB4Y2ViODI0OGIsIDB4NDkwMzFiZmIsIDB4NDA3ZDAxZWYsIDB4YjRiZTgxYjYsIDB4NzFlNTQ3MjEsIDB4MWI5ZWMxYWUsCisJMHg0ZGY2ZmQ4MSwgMHhmYjNkOWM2NywgMHhjZWQwODQwNSwgMHg3NTRmYTkwYiwgMHg4NzRjNmY0MywgMHhhZmZlM2NmYSwKKwkweGYxNDNlZGUzLCAweDQyYWRlYmE0LCAweGQ3NGMzMzhiLCAweGQ3ZjFkMmUwLCAweGYwZDA3NzY5LCAweDcwN2ZkZmE3LAorCTB4NmQxNWIzMmYsIDB4OGEzZGYyNzIsIDB4ZDJkYjg4ODksIDB4NDcyNWFmZDcsIDB4ODZhZDY1ZDIsIDB4M2YwM2Q0MGYsCisJMHhhMTVlYTllYSwgMHhmYjAzMWQ5YSwgMHhjNzcwODc3MiwgMHg0M2ExYmFiOCwgMHhjMmJmZmQzZCwgMHg5ZWZmOGU4YiwKKwkweGM0ZjU1N2VlLCAweGMyZjk0MjFmLCAweGVhYjdkZDc3LCAweGQ5ZmY0ZTg5LCAweDNlMDY1NzdiLCAweGI0NjhlMzIxLAorCTB4NWJhNDA5NzUsIDB4Njc3ZDNmZDgsIDB4NmYzZjc5OTQsIDB4OGQ3Njk2Y2MsIDB4YTJiZWRhNzEsIDB4Njc5OWRkZjMsCisJMHhmNjAyMTdlNiwgMHhhYTU1ODZmMSwgMHgzOWU0MmZjNiwgMHhjNDUyOWM1ZSwgMHgzYThiMTFlZiwgMHhlNTMzY2IxNywKKwkweGNmZDYyZjFhLCAweGM4MGY4NWQ3LCAweGY1YWVlMGY3LCAweDQ1NWMyNTE2LCAweDliNjY5MmY5LCAweDE1YTA0OGQ4LAorCTB4ZjM4ZmJiZmIsIDB4MWI5M2JmNjYsIDB4NDQ5ZWZlNzEsIDB4MzcyNmNkYzAsIDB4NDliNGI3MWEsIDB4Yjk0ZmVjMDksCisJMHhjNWVjYmRmYywgMHg1YzdlZjk0ZSwgMHg4YmQ5YmJlOCwgMHgyZjE3ZmQzNSwgMHg4NmRmNjAyYSwgMHhjZmVlNjVmYSwKKwkweDhmNmJjZWQ2LCAweGUxMmI3Y2YwLCAweDBiYTViZDY3LCAweDAyZGU4ZDdlLCAweGU4MzExZGYyLCAweGYzYjRhYWMzLAorCTB4OGU5NjljNzAsIDB4MjRmYzM3MzcsIDB4YzI3OTVkZjEsIDB4Y2UxNjQ0NmYsIDB4Yjc2YjQ2ZjMsIDB4Zjg5ZDc0NzEsCisJMHg5ZDJhZmRkNSwgMHgxY2MzYzI3ZSwgMHgxNzFhMWZhZiwgMHg0YWZmZDY3MCwgMHgxYTdlNzc3NCwgMHhkM2QzN2ZkZCwKKwkweGRmZjRlODNlLCAweGE4NWY4NzdjLCAweDFlODk2OWMzLCAweGZmMDQzZTA1LCAweDU3ZThkYmJmLCAweDgyNDhmM2Y5LAorCTB4MzEyN2ZkOTAsIDB4NmFiNDhmZjAsIDB4Yjk4ZDg5ZmQsIDB4ZjQ0ZmRkZGQsIDB4ZjFjNWQ4YWQsIDB4YmUyY2FiMTAsCisJMHhmMjVjNDBmZiwgMHhlZjFmZWExOSwgMHgzY2U1ZGViMCwgMHhmOGZiODA5MCwgMHhkM2JiMzQ5MywgMHhlNGQ2ZjNlNSwKKwkweDdlZjJkMWIwLCAweGU1NWY4NzQwLCAweDI4OThlZWY1LCAweDFmMTM3M2VmLCAweGJhNzdkODE1LCAweDA4YWE3ZjFmLAorCTB4ZmJhYTQyZjYsIDB4NDY2YjdjNDksIDB4M2Y3NWZlMzEsIDB4MTQ3MDcxNDksIDB4NjFiMzM5YzMsIDB4NDg0ZjBkYjEsCisJMHg3YjdjM2ViNiwgMHhjYmJiODQ2MSwgMHg0MDNhZDI3ZiwgMHhlNGY0ZTdjNiwgMHhjOTdlOTk0NywgMHhiOGNkZmRjMywKKwkweDczZjcxNTc0LCAweGNhNDUzYjJjLCAweDJjZjc4ZDZiLCAweGQ5MGQ5ZDAzLCAweDY3OTg2YzI2LCAweGRmZmJhZGFiLAorCTB4MjM5Mjk4MTksIDB4Zjg1MmQxZjcsIDB4ZTIxYjdiZDIsIDB4YWMyODU2N2UsIDB4ODQ1NzJjMDcsIDB4N2NjNDA3MWUsCisJMHg2YzVmY2Y1ZSwgMHgzMjg1ZjJkMiwgMHg5OTJhY2I3ZiwgMHhjNWRlZDU2ZiwgMHgzYmQ5YWFkYSwgMHg5OGE0NGYzMCwKKwkweGVkZjBmNDBmLCAweGYzMDQzZDlhLCAweGUwNzk4YTQwLCAweGYyMWFmODNiLCAweDgzYzg2YmUwLCAweGJlMGYyMWFmLAorCTB4MGQ3YzE0ODYsIDB4NTE0NDRiZGYsIDB4ZmQyYTllNzIsIDB4ZmIwZGUzM2QsIDB4ZjE5ZWZlMDMsIDB4ZmUwOWI5MDYsCisJMHhmZTFlNjMxZSwgMHhmODdkNjMxZSwgMHhmMGU1OGM3YiwgMHhlMWNiMThmNywgMHhlMWU2MzFlZiwgMHg4N2Q2MzFlZiwKKwkweDg3OThjN2JmLCAweDFmNThjN2JmLCAweDFlNjMxZWZlLCAweDdkNjMxZWZlLCAweGU1OGM3YmY4LCAweGNiMThmN2YwLAorCTB4ZTYzMWVmZTEsIDB4ZDYzMWVmZTEsIDB4NThjN2JmODcsIDB4NjI5ZDczN2UsIDB4YWNkZDA3ZjIsIDB4YmE1MDNiYmQsCisJMHhhM2U5OGUzZSwgMHgyOTI4YjUzOSwgMHgzZmY3ZDY4NywgMHhjN2U3ZmYyMywgMHhmM2FjNTRiNiwgMHg2ZWZjMjVkZSwKKwkweDQ3ODQ1NTYwLCAweDQ0ZDM3M2FlLCAweDIxMTZlZWI5LCAweDBlN2RiOWQ3LCAweDc2ZWRmM2FmLCAweGYxOTQyZjk5LAorCTB4MDNmNGExYzIsIDB4NzRmOGNhYmYsIDB4MGE0MTU3ZTksIDB4Zjg1MjBhYmYsIDB4YWZjMjkwNTUsIDB4ZmQyYWRlMzIsCisJMHg1N2UxNDgyYSwgMHg1NWY4NzdjMSwgMHg4MmFmYzI5MCwgMHhhNDE1N2UxNCwgMHg4NTIwYWJmMCwgMHhmYzI5MDU1ZiwKKwkweGJmMDc2ODJhLCAweDU1Zjg1MjBhLCAweDE1N2UxZGYwLCAweGUwYWJmMGE0LCAweDAzODIzMWZiLCAweDJlMWQxNWZlLAorCTB4MjZlOWY5YzgsIDB4ZDBlODk0M2QsIDB4NGNiYTg3YTQsIDB4YzZmOWM4NzksIDB4OGRmMzkwZmEsIDB4OGRmMzkwZTUsCisJMHg4ZGYzOTBlNSwgMHhjNmY5Yzg3OSwgMHg4ZGYzOTBmYSwgMHg4OGYxMWJmOSwgMHhlZjI5NmY3MSwgMHhkZTQxZGIxYiwKKwkweDlhNzNlNjM3LCAweDg2YzFhZmZjLCAweGY5YzM3OTM1LCAweDQ2YjY5MTU3LCAweDJlMjk4ZjI5LCAweDllNzJlYjkyLAorCTB4NThmZjA1OWEsIDB4MWM5MmI4NmIsIDB4NzYzOTIxZWIsIDB4OGQ2NzZmYzUsIDB4ODlmODkyYmYsIDB4MmI5NzZmMTYsCisJMHg2ZjU4MmRkYSwgMHhiYWQzN2JmNiwgMHhlMzgyODJmOSwgMHgzYmZlNzM4MywgMHg3Zjc1Y2I5MSwgMHhiYWQxZmYyYiwKKwkweGFjMTRlZGU3LCAweDkwY2I2YzM3LCAweDNkZWRlOTcwLCAweGQ1MjJhNWMyLCAweGJiZTU3N2ViLCAweGJlM2ExN2FmLAorCTB4YTVmOThmNWUsIDB4Mjg1MjBlMDEsIDB4OTEwNzEwZjMsIDB4MWYzM2JiNzcsIDB4MmQ1YmVkZjEsIDB4NWQwYjhjOGEsCisJMHg0MzcyZTMyOSwgMHhlMzQ5YWFlOSwgMHgzYjJkNWI0YiwgMHhiYjUwNDQwZSwgMHg4M2M1NjJmNiwgMHg1Njk5MDc3YiwKKwkweDBmOTZjODcxLCAweDQzZTZkNTNjLCAweDg5Y2JhODllLCAweDZiODNlMmQ1LCAweDkwM2M0MmFmLCAweDdmNmViNzBlLAorCTB4ZjdjMTNlMjQsIDB4MGJiNzQ2ZGQsIDB4NzM4ZDE5N2IsIDB4OGVjMjE3Y2QsIDB4NjQ5ODViZGYsIDB4ZGEwNGYyOTcsCisJMHhlYTFjZGY0MSwgMHgwYzliYmM1NywgMHg0NzMyYmRmNCwgMHhmZjNlN2I5ZSwgMHhlOGNhYWJiMiwgMHhiNWVkZDBmYiwKKwkweGRkMWVlMTU3LCAweGVlZDkwOGE0LCAweDMzNDc4ZjM3LCAweDJhMzRhNzFlLCAweGM5ZmVmMDliLCAweDhiYzJlZGU4LAorCTB4ZDRiZmIxZmIsIDB4ZGRiYTFlZTAsIDB4NzFlMzJmNjUsIDB4NGVmZjdjNWQsIDB4NDM3OGI3ZWYsIDB4MmMxN2RmMzIsCisJMHgxM2UzYWQxNiwgMHhmMGExMjdkOSwgMHhkZTNhZTZmYiwgMHg2MmFmN2U2OCwgMHgwZmUyYzQ3ZSwgMHgyZmZjOGVjMSwKKwkweDcxMjFjM2RmLCAweGMzZGNmYmYxLCAweDZjNzg2NmI5LCAweGM0ZGJlMjIxLCAweGU0MGVmOTVlLCAweGFiYzVlMWU0LAorCTB4YmU1YzEzN2EsIDB4ZjIwNzdjODAsIDB4NWY2YTJmOWEsIDB4Zjk2NmZjZTMsIDB4Y2Y5MzI0MGUsIDB4Y2Y4Zjg2NDgsCisJMHg4NTdlNDFjMywgMHhlMjk4ZmZkZiwgMHhlNWU5NjhkZiwgMHgxNWUwYmRjNiwgMHhkZmQ0MDRiNiwgMHgwYjUwM2MyZSwKKwkweGFmNzkwOTA2LCAweGI2NTc5ZjU1LCAweDU3MDk2MjM4LCAweDk1ZTIyZjQwLCAweDExZmQwMzc4LCAweDdhMDE5OGU3LAorCTB4ZjhkOGYzYzksIDB4NTZhOTkwN2QsIDB4NDZmYzBkOTcsIDB4NWQ4YTczOTcsIDB4NzU0MmVjNzIsIDB4ZjdkZjBjNzQsCisJMHgyZTEzOTEwYiwgMHhiOGU2ZjYzNiwgMHg4ZTNkN2Y4ZCwgMHg5M2VmODNhNCwgMHhjZTE1ZGYyZiwgMHhmODhmODU3MiwKKwkweGI5ZTZmODA3LCAweDU5NzcxOTNjLCAweDkxYzNlY2I5LCAweDM4YWVkNDk2LCAweDgxMjlkMzkyLCAweGYzZGY3OGFkLAorCTB4ZTg4ZWVhNzQsIDB4MTFjYjBhNTEsIDB4ZGI1ZmMwODcsIDB4N2JlNzlmMWEsIDB4NWVhYmM1ODIsIDB4MTcxMGZiZTMsCisJMHg5Njg4MWYxYiwgMHg3ZmE0YWFmNywgMHg5YmMzNGNhNSwgMHhhODVhNmY2ZSwgMHgxNjk5NGZhZCwgMHg1ZWJjNzQzZiwKKwkweGU3NGJjZmJlLCAweDcxZjdiZjMwLCAweDcyYzZkMWIxLCAweDI4YmNhODQ2LCAweDg4MGZlYjg0LCAweGI0NmYyYjczLAorCTB4YzVkM2RkZjEsIDB4Mjc1NzhiNmIsIDB4Nzc3ZWVlOGEsIDB4Y2ZlMzJiYzUsIDB4MzQ5NzcxYjUsIDB4YTg0ZTM4ZGEsCisJMHgyYjQ3N2I1YywgMHg5NjU4NzdmNCwgMHhkMmU4NzI2YSwgMHgyN2VmZTY2ZCwgMHg0ZmU0NDI3MiwgMHhhZDQ0ZmRmZCwKKwkweGFmNWJmMTRlLCAweGE4Mzk2NGNjLCAweGVlNzFjNmQ2LCAweGI5NDg1N2YzLCAweDAxMTBlYzQ4LCAweGJmOTg2N2RjLAorCTB4ZWYwNTljNjIsIDB4ZTVkZmNjNTgsIDB4ZDBkZDI4ZjUsIDB4N2M5YTNiZDEsIDB4MTI4MzA5MzQsIDB4OGE1ZWE3ZGUsCisJMHhlZDMyYmU2MCwgMHhjZmNlM2Y1MiwgMHhlOWM4OTRiYSwgMHhlNGIyOTc4ZCwgMHhkMTFkYWM3NywgMHhiY2ExNmI0YiwKKwkweDI2YmVmZjVmLCAweDFjNDRjZDE3LCAweGIyZTQwMTY1LCAweDFkZDc0YzNlLCAweDIyMThkNzQ0LCAweDQzNTdlMzU3LAorCTB4MzAyYmNhYmMsIDB4ZjliMjRmYzMsIDB4NzM0ZTIxNTYsIDB4ZjdjMTQ2ZDIsIDB4N2U0MzI2OTEsIDB4OTBkOTgyYTIsCisJMHgyZmIwMGFhNywgMHgzZWY5MGE1MiwgMHhlZjg1NDRjNiwgMHhiZTFlNGNiNywgMHhiNDA3ZGI0YywgMHgxMWYzMDQyZiwKKwkweDM3YzNmNzdlLCAweGYxMDA2YTdlLCAweDNiN2RiMzM3LCAweDdkNzc1ODJjLCAweDZkZmNmODNmLCAweDY0ZTYwZWZjLAorCTB4N2JjNzYyYmYsIDB4Y2Y0ZDNlODEsIDB4NzQzZGU5ZDYsIDB4ZDQ4ODJjNWYsIDB4Njk0ZTYzZWMsIDB4OGZiNGVhZmYsCisJMHg5YzdlNTgwMSwgMHhjNDQ2ZjIyNywgMHgyZDgwMmViMywgMHhiMGI2OWZiMywgMHg2Y2E4YWE4NCwgMHgxYjljOWU1OSwKKwkweDk0MjM2Mzc5LCAweDZlZDM3ZmFjLCAweDkxNjJkZjMyLCAweGZlNDg5ZmY3LCAweDcxNzU3OGUzLCAweGU1MGZiMGE0LAorCTB4ZjkyYWQ3OGIsIDB4ZTFkNzk3ODgsIDB4ZDhkODdhZmEsIDB4Nzc3YWMzNDksIDB4ZTc0OTQxZDEsIDB4MDNlZWNjZmUsCisJMHg1ZGY5NjBiZCwgMHg0Y2ZmMjYxOSwgMHhmODRhNWE2OCwgMHgxMDVhM2VjNiwgMHhmYzYzZmFkMywgMHg1Yzg0ZDBkMiwKKwkweDg4OWYxZGUxLCAweGY5ZjVjODc3LCAweDAyZTIyMDhhLCAweGRiZjk2YWU3LCAweDhmZjJiZDllLCAweDI3OGM5YzZiLAorCTB4ZWRjZDhmY2UsIDB4M2ZlMjIzNzcsIDB4MzhmZTY1ZmUsIDB4N2YxYWIxNWYsIDB4ZjE0ZGFhMzcsIDB4M2RlNTczNzksCisJMHhkZjU4MDljOCwgMHg3ZTc2ZWNjOCwgMHhhNjY2NjBjNywgMHgyMTJmOWU0YiwgMHg3MmRiOTY3NiwgMHg4NDVkZjJkZCwKKwkweDY5NGI3YjEwLCAweDg0NmYzY2I2LCAweDhmM2M5ZGQ1LCAweGI2NmUzYWZkLCAweDNlZjNlYTU3LCAweDMzZGYzMzZlLAorCTB4NWNlYWQzZDUsIDB4YmZmODM3NjksIDB4YTBmMTI3YmEsIDB4N2ZmYmRlNDUsIDB4ZjFkODEyYzQsIDB4YTA2YmQxMjIsCisJMHhlNjAxNmZiNywgMHhiZGUyMDhmYiwgMHhjZjFmN2UxOSwgMHhhMzQ3N2Y0ZiwgMHhlZjY5NGY5MywgMHg3NGY0ZTg2NSwKKwkweGRmMjJlZWFjLCAweGRhNzEyODk3LCAweDllODFhYWRkLCAweDdjMjhkNmNhLCAweDRlYTRiMTFmLCAweGFkZjYyN2RlLAorCTB4ZmNiZGU0NTEsIDB4OGY1N2VjMWUsIDB4ZGY5YWY5Y2YsIDB4MTdmYzdhNTEsIDB4YzM1MGIyMTEsIDB4OTFmYjdjZWYsCisJMHg1ZDI5MWNkNywgMHhkZDUzZmRmOCwgMHg3ZjkyNmNhZiwgMHg2ZjEwMzMwNiwgMHg5YzM2YjczZiwgMHg3YWZlNDFkZiwKKwkweDAxOGZkMTU4LCAweDg3YjY2NDdmLCAweGYxMTI2OWQ3LCAweDFhOWZkNDM0LCAweGJlMjlmYmUzLCAweDA3MjM4ODk3LAorCTB4ZjA1YzZmNjEsIDB4N2RmOGI3ZjMsIDB4MjliZDlhZTEsIDB4ZjE2MWVlZmMsIDB4NzhkNWJjZWUsIDB4NjFlYmU1NDcsCisJMHg4OTcyM2JiZSwgMHgyZTlkOGI3ZSwgMHhlYTkwZTQzYiwgMHg5NzNlNThjNiwgMHhlZWQxZjQxNywgMHhmNjc2OGJhOSwKKwkweGYzZWJlOWU3LCAweDA3OTRhZTYwLCAweDljNzIzYzhhLCAweDQ1M2U5YTBiLCAweDM1NGRiMzA4LCAweDdmZTc5M2Q1LAorCTB4ZWRkNDNlZTgsIDB4OTVmNmExYTIsIDB4YmUyYWY3ZDAsIDB4N2IwMjllY2IsIDB4NTc2MGRkODksIDB4YjYzMWVkZDUsCisJMHg3MDczZTNhYywgMHg3N2I3Y2Y5ZSwgMHhhZjhkYmJmZiwgMHg0ZDQ3NzZlYiwgMHhhOWQ4NWQ5ZiwgMHhlODRmNjZjZiwKKwkweDlkN2ZiOTAzLCAweGJkMWQ4MmUyLCAweDExYmVlOWNjLCAweDg3NjVmNWYxLCAweDE0ZjA4ODZjLCAweGYyZGNlMjkzLAorCTB4ZTRiYjkyZGQsIDB4YjcyNTI1YmIsIDB4OWIzZjMxZTYsIDB4YzdjOTM1OGYsIDB4YmM1MTg3YmQsIDB4OTQwMmNiOGYsCisJMHhkZmJjZjdjNiwgMHg2NTdiYWRlNywgMHg1M2QwMWVjMCwgMHhlMGY3Y2JkMCwgMHg3YjVlNWNjYiwgMHgyYTJlNDE5YywKKwkweGVmNGM1MjZkLCAweDE3ZjllODE4LCAweDcyMWRhNTczLCAweGMwMTlhOTNlLCAweGE2Yjc0ZGRmLCAweGQwODZmMWQ4LAorCTB4MTA4ZjEyN2MsIDB4NDZiYWY4MzcsIDB4YWEzYjdhMjcsIDB4OTMyNTcxYzcsIDB4Zjk0MWM1NTIsIDB4OWRjMTE0YWUsCisJMHhmZTMzYzcyMiwgMHg5MzQ5NTE0ZSwgMHhhYTA2M2RmOSwgMHhmZWRkNzJjZiwgMHhhZmVlMjhkYywgMHg0ZWYzNDVkOCwKKwkweDM4NjJlYTQxLCAweGE3OGMwZjA5LCAweDNmYTg3YmY2LCAweGViYzM4ZjM3LCAweGQ4MGMxYTUxLCAweDhmOTgzNzYwLAorCTB4Y2ZjYTE2NzgsIDB4MTg2YzA1NzUsIDB4YmU1MWE0YTcsIDB4MmI1YmUyOGYsIDB4ODlhZGYxYzcsIDB4MmU0MGU3YjUsCisJMHgwM2VjYmFiMCwgMHhhMzYwZjI4YywgMHhiZTc4Y2Y3YywgMHgwNDExZmJmNiwgMHg2NWNiY2IyZiwgMHhmM2RjMjc4NCwKKwkweDg2N2RlZmQyLCAweDgzNThhYmUyLCAweGQ2MjlhY2JmLCAweGFkMzY1ZjJjLCAweGU2N2Q2MWIzLCAweGMzNWVmMGY0LAorCTB4OTcxZDFhOTcsIDB4ZmJlMThlMzQsIDB4MmY1NjY1ZjUsIDB4NjlmMDk3ZGYsIDB4YjJlYmZlZjgsIDB4MjdlMWJiZjAsCisJMHg5MGZjZDM5OSwgMHg4ZDc5MDUyZCwgMHgzYzA5N2QyZiwgMHg4MjllMDZmNywgMHhkMjNlZmMxOSwgMHg2NzhlNzBiMiwKKwkweGUyNmFlMzllLCAweGZiZTI3NmY5LCAweGU0MGZjMjAxLCAweGUzMTE1NzE1LCAweDhmYzRlODliLCAweDY2YjJjMDM4LAorCTB4YzE3NmZhZjMsIDB4NjVkZjI1MTMsIDB4ZmRlNjJlNmYsIDB4YjNlYWM4YjcsIDB4YWM3MDhjYmIsIDB4ZmI4MTlmZGYsCisJMHhkZjY4NzM1YiwgMHhlMTI3ZmRlMywgMHhjYzdkZjFmMiwgMHhjOGRjMGY1MywgMHgzODA2ZmJiZiwgMHg4ZjI4ZTc4MSwKKwkweDNiZGUwMjdiLCAweGJhNjFiYTIyLCAweDQxNjdlOWQ2LCAweGZhY2ZkYzgxLCAweGFjYzM1MTc4LCAweGVjM2YwZWQyLAorCTB4ZjdhOWY2YmIsIDB4MDZmM2U0MjAsIDB4ZmZkODZmNWEsIDB4NzZhN2RhN2IsIDB4NzFhNDAwNWMsIDB4ZGRmMjY1ZWQsCisJMHhhYjdkZDBiYSwgMHg5ZjdkNTdlZiwgMHhkZjU2ZmJlYSwgMHg4YWQ5OGZjZiwgMHgxNzRhODk4MiwgMHhiZGYzYTFkZiwKKwkweGYwNmViOWY2LCAweDc3ODM0OTM0LCAweDg0YWViNmFlLCAweGMxODU1N2Q3LCAweDk4NjIzN2FlLCAweDUzZjNkZmRjLAorCTB4ZmQxZmZiY2QsIDB4YmQ1NGRmYTEsIDB4MDMzMDZjN2MsIDB4ZmFmNTNkZjcsIDB4ZTNmM2I4ZmEsIDB4MDNlYzNiNjQsCisJMHgzMGVhNWJkMCwgMHhlNWZkNjc0YiwgMHhlMjYyZGY1YywgMHhmYzlkYTUxZiwgMHgwNGFhZmI2MywgMHgwYTFkOGZmMCwKKwkweGRmOTZlMWZiLCAweGU1YmVlNTIzLCAweGUxN2JjOGNmLCAweGY4YmY5NjY3LCAweDc3YWEyY2Y2LCAweDBiOGRjMWZhLAorCTB4Y2EyZmY3OGMsIDB4MmM1ZjkyODIsIDB4ZmMwYjc5MjQsIDB4MGYyNjkxNjMsIDB4ZTVmNGNjNmMsIDB4ZTdlYzMzMGQsCisJMHhjOTlmZmJiMiwgMHhkYjk4ZmVjNCwgMHg2ZjBhNzc5MiwgMHhmOWJjZDFhOCwgMHgzZjNmYTNiZCwgMHg1Nzg3ZDJmMywKKwkweDVkY2ViYmI5LCAweDZiMjUxZTdkLCAweDNiMTViNWRlLCAweGY0OTM3ODhkLCAweDA3NTY3NzdlLCAweDM4YTU1YjlmLAorCTB4Njk1M2U4YjcsIDB4NjFmMzMxNjMsIDB4OGY3YTQ4OTEsIDB4YTFlZWI1ZDIsIDB4YThkYzUwZjQsIDB4NWE1NzljYjAsCisJMHhmZWEwMzIzNywgMHhkMmViZjIyZiwgMHg4ZGY5NTNiNSwgMHhmNGJkN2QyOCwgMHg3M2Y0NWY3NywgMHhhNjdmODc1NywKKwkweDM1NzM0ZWI2LCAweDRjM2Q5ZTdhLCAweGU1YjljM2VlLCAweGJjNDVmNjI5LCAweGY4ZWM1M2ZmLCAweDVhMzljZGJkLAorCTB4ZjMzMjljZjksIDB4NzJmNWNlZjcsIDB4ZDVmYmYyNzUsIDB4OWZiODI3ZDgsIDB4NThlYWY1ODQsIDB4Y2JmNjkzNmIsCisJMHg1N2FkOTdlZCwgMHgxZDAyZTQzMiwgMHg5ZDlhYzU4ZSwgMHg2ZjY2YTE3MiwgMHhjYmM5YTQ1YywgMHg4ZDhiNWViNCwKKwkweDcxZjhiNWViLCAweGNmYTU1ZWI5LCAweGJjMTdmNWJlLCAweGQzZjM0NjUzLCAweGVmOTNhM2RlLCAweGVjYjQ5NDBhLAorCTB4YjM5Yjc1ZTAsIDB4ODUyZDlkNjYsIDB4NTg2NGZkZWEsIDB4YThmZTI5OGEsIDB4MDVjZjM2YjQsIDB4MzVkY2ZkM2IsCisJMHgwN2UwNmQxYiwgMHhmMTI2MTkzZiwgMHhmM2Y3NGExNiwgMHgxZDYyZjhiNSwgMHgxNDhmMzhhZiwgMHhhZjQ3M2Y4MywKKwkweDgzYjgzZTBmLCAweDU5NzViOWM2LCAweDc3ZjFiNDc4LCAweDNkMWEwMmVkLCAweGM2YzZkNjk3LCAweGRhZDJiYzYxLAorCTB4N2ZhMTdiZTIsIDB4ZTg0MGU3ZTksIDB4MmUxMTNiZmUsIDB4ZjUwOTQ1ZjcsIDB4NjI3OWZkODcsIDB4NTVlZjg3OGMsCisJMHgzNzdlZDdjZiwgMHg0M2ZlYjQyZiwgMHhkYWZkZGQxYSwgMHg0Y2JmZGYyNiwgMHg5Mjc5NmM4YSwgMHgyMjZhM2JlMywKKwkweGU5MTNlMDNjLCAweDhjMDFhZGU5LCAweGRjMDY3YTBiLCAweDJmN2M4Yjc2LCAweGY1YjJiZDMzLCAweGEyNDFjMDczLAorCTB4MjBmNWM3M2MsIDB4MTA1YjdiYzUsIDB4YmYyODEzZWQsIDB4NzllZjIyYzksIDB4ZGQzMmFhYTUsIDB4YTYwN2UxYTcsCisJMHg1ZThiOTQzNywgMHg1ZjFlZmNhZCwgMHgyMTUxYmJlNywgMHg5YjE3NmFmNCwgMHgxZmRkZTBkNywgMHhlZmMxMmY3YiwKKwkweGE5ZjRlOWE2LCAweGE3ZDNhM2Y3LCAweGNkM2RiZjRlLCAweDljZjdkNzZmLCAweGNkMTQ4OWRmLCAweDQ5ZTU5MmNlLAorCTB4MGJiOGQwNzYsIDB4YmZjNDFiZWUsIDB4ZjM1ZGYxNmIsIDB4MzVlZjZiYjQsIDB4NGMzN2NlNzYsIDB4NjVjN2RlZmUsCisJMHhmYTk3NGRmMywgMHg2ZGYzY2Y1MiwgMHg2NmU4NGMyZSwgMHhkNGYzYTFiZSwgMHg0MzFlODlmNywgMHg2OTRmZTlkZiwKKwkweDEzOTRmZTkyLCAweGQ0NjM5ZDBhLCAweDcwYjJjNGVlLCAweGU3ZDNhYjhlLCAweGJmZjVkYmE1LCAweDhmODdiZGVmLAorCTB4ZjY2OWM1ODYsIDB4YzgyOGQ2YWEsIDB4ZGZiNWYzOTcsIDB4OTk0MTExNTEsIDB4ODZhOWY3YzcsIDB4YWZmOWZhZWYsCisJMHhmM2E3NWZiZiwgMHhkYWI1OTNlOSwgMHhlZjVhMjhmOSwgMHg3NTE2N2VjMSwgMHhmNTBmN2M2OSwgMHgyODg5ZDM1OCwKKwkweDYyNzMxM2JjLCAweDZmNGY4NDhjLCAweGRlNGRhYjc3LCAweDc2NTExNjczLCAweGJiY2ZkZTM3LCAweGZlM2NkNmU5LAorCTB4OGQ4NTk0YmQsIDB4YmQ5ZjU4N2QsIDB4Zjk4ZDJlYTksIDB4NTg3ZTRkYzIsIDB4MWVhNzQ1MTcsIDB4ODNlMzQ4YjAsCisJMHhhZjE2Yjc5MSwgMHhkN2Y1MDJiZSwgMHhjMmVmZjBhNywgMHg0ZTdhNzQyZCwgMHg0M2Y2ZTdhZCwgMHgyMzEzOTAzZCwKKwkweDUzZGFhNzliLCAweGZhOTYxZTU5LCAweGJiMTdlZTgyLCAweDdjNDUxMTU1LCAweDEyN2MwZDRmLCAweDNmYjJjYmZiLAorCTB4ZTJjZmU3MWQsIDB4OTgzZjUyZjUsIDB4ZTA2YjExNjQsIDB4NTBkODFkM2YsIDB4ZjgyZmExMzQsIDB4ZmM4YWMzYzQsCisJMHhlNjBkOWEzZCwgMHgwZTg2YmNmNywgMHg3YzAyZmEyYSwgMHhiYzVkZjQyNiwgMHg1ZTJkNmQ1YiwgMHhlNDgyYTdlOCwKKwkweDE2ZDFkODBlLCAweDllNTg4YjNhLCAweDkzZTM0NWJmLCAweGY4ZGI5YWM3LCAweGFmMWQ3ZWJkLCAweDc4YmZlMDhmLAorCTB4N2VjNDJhYTcsIDB4MWEyNzZhMTQsIDB4ZmYwN2Q5YTgsIDB4N2I4ZmFmMWYsIDB4MDA4MDAwM2QsIDB4MDAwMDAwMDAsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3Y2I1ZmYwMCwgMHg2NTU0NWMwYiwgMHhjZTdiZjhkYSwgMHhjMGNjMmI5OSwKKwkweDEyNDVjODgwLCAweDg1ODQ4Yjg3LCAweGQ3ODBjMDM0LCAweDUwODE1MWRhLCAweGI5YmJhMGJiLCAweDY1OGUyMWJhLAorCTB4NTAwNjY1Y2EsIDB4ZDc3NzVkZGIsIDB4YTZhMThjZmUsIDB4NDVmYTdkNjYsIDB4ODBlZDY1YTYsIDB4NzZjMzZhOTcsCisJMHhhODI4MzQ0OCwgMHg1OTk5MGJjOSwgMHg2YTM3NjI3ZiwgMHg1YjYzYjkyZiwgMHhiYTQwMmRlNiwgMHg2ZGJmZWRmYywKKwkweGJjZjNjZjdkLCAweDUxMTczMGU3LCAweDZmYmVmZGRiLCAweDc5N2JmOWZjLCAweDlmNWVmM2RmLCAweGNmYmNmM2ZiLAorCTB4OGMzNDYzMzksIDB4NjMxODFiNzUsIDB4NDE4ZThiMmEsIDB4ODk0ODY4MzksIDB4OGQ4Yzk5NjQsIDB4NjE1ZjY5MDksCisJMHhmNmMzODk0YywgMHhjNjQ1ZGIyNSwgMHg3Y2ZiNDA0NiwgMHgxOTYyYzg5MywgMHhmYTMxZDcyYiwgMHgxZmJmOGY3ZCwKKwkweDNjMWY3NjMxLCAweDQyZjNjMzM3LCAweDA3ZDYzNGE5LCAweGNjMzdkN2ZkLCAweGQ2Yzk3MmEwLCAweGYxYWU2ZGMyLAorCTB4MjUwOTI1OGMsIDB4NjA2MzkzYjEsIDB4YjY2YWUzYzAsIDB4Y2UyNThhMDcsIDB4MmIzMDc3MTksIDB4OGRhNGQzY2MsCisJMHg3M2MzMjVkMiwgMHhjNzI5MmJiNSwgMHg0OTZmOWZlMCwgMHgwYzQ5NDNlMywgMHhkNDY5OWRjNiwgMHg3YjQzNzdjZiwKKwkweDQxNGU2OTgxLCAweGJhNWY4YzE0LCAweDMyNWIyYTMzLCAweDZmNWRmYmZiLCAweGM5MWIxODExLCAweDQ2NzNhNTU4LAorCTB4Y2M2MTRiMWMsIDB4NjdlMWRkZjEsIDB4MWZiMGE5NGMsIDB4ZjMwNGQzOTgsIDB4NzcwOWU1N2YsIDB4YTM4YmEwYmIsCisJMHg4MjQ5MmRhZSwgMHhiM2FhM2MyMywgMHg3ZmEwNThhNywgMHg2ZjMxZDg5NSwgMHg0ZTczY2MxMiwgMHhhMDRkZWY3MCwKKwkweDUzMzhlNmZlLCAweGU1YTFmYWMwLCAweGNjYzYzYWU5LCAweGZmMzk4Y2U5LCAweGNmMzQ4N2NmLCAweDNiODllMmU3LAorCTB4ODc3OGMwMTYsIDB4Y2UwNDdmNzMsIDB4MWZmOGY1NTMsIDB4NmMzMjAxZjIsIDB4YjJjZjY4OWQsIDB4OGRiY2UxZTQsCisJMHgxYzEyNGQ3YiwgMHg1NjYzN2I3NCwgMHhiZWUzOWMwOSwgMHhkYTQ2YzdjNywgMHhmNzlmMmYzMywgMHhhOGI2NjhiNiwKKwkweGRiY2JkYTA0LCAweDY5NTdjMTE4LCAweGQ0OGVlODVmLCAweDVlZWRkYzIwLCAweDY5NjEzMWE2LCAweDI4Njg5YTYyLAorCTB4OTU2YzQ4Y2YsIDB4NTJkYmNhMDcsIDB4MDZiOWEyZDgsIDB4ZTEwZGJiN2YsIDB4ODk5ZWViMDAsIDB4MDI1NDkyZGMsCisJMHg5ZjdiMTVlZCwgMHg3OTQzMzI0OCwgMHhhNWViYzhkNiwgMHg5YzdhN2Y3YiwgMHhkZGZmNDA0NSwgMHhkNWUyMGQ1YSwKKwkweDBiMWE2MmFlLCAweDI1ZDdiYjhjLCAweGIyNTBkY2Q4LCAweDEyYzY2OGYyLCAweDdkNmVhMzEwLCAweDU5YjE5MTk5LAorCTB4YWY5YTcwOTYsIDB4NjMwZTdiNjIsIDB4YzE3ZGZlYjksIDB4YWIzZjZhNzMsIDB4OGZiOGM1NjIsIDB4ZDkwM2Y1MzEsCisJMHg4YmZjYTFjYiwgMHhlMjFmN2JjYSwgMHg3YWI1MmZmMywgMHhmMTE5MmI4YiwgMHhmY2JjMjY2MiwgMHg4NDU0OGI2NSwKKwkweDA1ZmJhZWVkLCAweGZhYzA1NjM2LCAweGFjMWE2MzdlLCAweDZhYzkxNjVmLCAweGY0YTE3YzcxLCAweGNmMDQ5YjU3LAorCTB4YjIxMDFjNTcsIDB4Nzg3YjMwYjUsIDB4MWVlNmI3NjYsIDB4ZDExNjkxMDMsIDB4ZDM4OWI1NTksIDB4NzU3NjhhZDksCisJMHg3ZmUwMjI1MSwgMHgyZDQwOGI0NSwgMHgzMzU3OTUwZSwgMHgyZjJhYmUxYywgMHg4MGU2NjY0ZCwgMHhiNmI2NTZmZCwKKwkweDhlYjBjYzY4LCAweDA5Y2UxOWEzLCAweDUzOWUxZGZkLCAweDVlNzhhNTlhLCAweDdjYjE4NWI2LCAweDg5ZmUyN2MwLAorCTB4YTUzZTZiZjgsIDB4M2YwMDM3YjksIDB4MmUxY2FkZDUsIDB4YmVkZTU2Y2UsIDB4M2I5MDAzMzgsIDB4MTM2MmI2OTksCisJMHgyNmRlYTBkMiwgMHg2YjNlYmQ1MCwgMHhhYTM1ZmNjMiwgMHhmY2ZlN2FjMCwgMHg5YTU4NjkzNSwgMHgzNTRjNGUwOCwKKwkweGYwMDI1NDkwLCAweGEzZDE5NGRjLCAweGQ3M2JmYzQxLCAweDVkNDJmM2NhLCAweDBkNWViMDFkLCAweGRlNDhlNTEyLAorCTB4ZjFjMDZhOWUsIDB4M2NhZjFhNjYsIDB4ZDE0NmI2NzcsIDB4NmMzM2FmNzgsIDB4MzYwOWJiMDMsIDB4NjE1MDZkNTEsCisJMHg0NDM0ZWY1OSwgMHg1NmIzYjk2MCwgMHg3MTU5NTBjYywgMHgwOTE2NjE3MywgMHgxNjExZGZlMCwgMHg2MTIyYzU5MSwKKwkweDNkNWVhYWNhLCAweDNiNTAxMjQwLCAweGY2ODQ1ODcwLCAweDgzZmI0OGRjLCAweDBjNzE5ZjQ4LCAweDMzZTgwMmI4LAorCTB4MDYwNTc5OTEsIDB4ZjlkZmRmZjQsIDB4N2ZjZTJlNTksIDB4MTdkZjE4Y2IsIDB4NWVhZWI2MGMsIDB4MDE3ZTdkMzMsCisJMHg4YjI2YzNkMCwgMHg1ZjRjOGU3YywgMHhjOGYxZDIyZSwgMHhiMGFmNDA0MywgMHg2Y2Q1YTdiZiwgMHhjZjA3M2U4MywKKwkweDQyZTZjMjU3LCAweDA4YzJjYzNiLCAweGI5ODRkZmNmLCAweGFmZGZjMGY3LCAweGNlMjI2ZjMxLCAweDU0ZGU3NGNmLAorCTB4Y2M5YWY3MWMsIDB4YzM1YTI1YTcsIDB4ZjVmNjAxMDYsIDB4NjNmYjE0OWIsIDB4MDUzYjhmYjgsIDB4MTE2Y2Y4ZjUsCisJMHhjNThkMjA3MSwgMHhmZTZhZmQ3ZSwgMHhjMjc5NmQ5YywgMHg0ZmZjMDNhNiwgMHhhMzY3ZThlNywgMHg0MDYyZTY0NSwKKwkweGYxNTE5YWEyLCAweGMxNjNhNDA2LCAweDYwYWI2MzY2LCAweDBmMzMwN2ZkLCAweDJlODBjYmRkLCAweDMxZDAxZTFlLAorCTB4NWVhZjljMmQsIDB4N2QzZGNmY2YsIDB4MDA5NGVjMjAsIDB4MmE4ZjQ2ZmQsIDB4ZjQxNjU5MTYsIDB4Mjk1OGFiMzcsCisJMHgyOTk0M2ZmNCwgMHg5ZmQ4NTU3YSwgMHg5ZmQ4ZGNlOSwgMHhiZTZkMGFlOSwgMHg4MTk2NTkwYywgMHg3YTg4ZDBmYywKKwkweDc4ZWZmNTFiLCAweGNhMDExYmYzLCAweGUxZTJlOTQ0LCAweGUyNTczODQ4LCAweDNkNGIwNTJmLCAweDNjMWIyOWY0LAorCTB4ODVmZmY0ZmQsIDB4NTM1MmY0YjIsIDB4ZmNhMWVmY2IsIDB4MTliZGE0NzUsIDB4YjA3Mjc3NTEsIDB4NTAxZDk0ZjgsCisJMHhhM2M5YjBmNiwgMHhmOWYyNjRiMywgMHhmMWRmZjcwMiwgMHhhMjIyNmZhYiwgMHhmYWJlZmY0NSwgMHg3YmVmNGUwNywKKwkweGNlYTU4YWQ5LCAweGU5YjhjMDIyLCAweDliNTc5MjFkLCAweGZhN2VmOTc1LCAweGE5ZTM2MWUzLCAweDM5ZTE4ZmQ0LAorCTB4NWJhMjBkZmIsIDB4ZTFmZmIwMTAsIDB4ZDM3ZjcxMGYsIDB4MTRhZjA2NzUsIDB4MTdkNGUzODEsIDB4MzhmZjNhN2MsCisJMHg3NTFkMWU2NiwgMHgyODQ2NDZmYSwgMHhiMTkxM2VmOCwgMHg4YzNjZGM1OCwgMHg3MDY4YjgxZiwgMHg2ZmI5YzEzNywKKwkweGExNGZmOTkxLCAweDQ4OGIxZWFmLCAweGYxOTFlOWY4LCAweGU5OTFjMGE0LCAweDdlOTEyMmIyLCAweDVlOGFkNWViLAorCTB4NGNiMzg1ZjAsIDB4ZThkNjdmM2YsIDB4NWUwY2ZmMzgsIDB4ZmYzODZkMTIsIDB4Y2RkNmI5NjAsIDB4OGVjMThhNjAsCisJMHg1NzI3ZDI1NCwgMHgwMDdmYTc5MiwgMHhkNzQwY2E3OSwgMHhmYjZhOTdiYywgMHhmOTBmYzIzMywgMHg3OGZjMDc0YSwKKwkweGMwMmYwYzk3LCAweDI1ZjljMzNmLCAweDY0YmJmZTc5LCAweDEwNjVkZGI4LCAweDEyN2U5YzM5LCAweDZlOTkyNzAyLAorCTB4ZjY1MGJhMTQsIDB4NTg2Mzk4MmYsIDB4OWYxZmI0NjksIDB4NDdkZGQ3ZWMsIDB4OGYwOTkzMjMsIDB4ZTM4M2ZmZTMsCisJMHhkZmMyMTNlZiwgMHgwMWQ2MjczNywgMHhmZjUxYjExYiwgMHhmYzc4NDU5OCwgMHg1NzlmYzA1ZiwgMHhmODBiZmViNCwKKwkweDlmYzUwZWViLCAweGUyM2Q3ZjU3LCAweGQyZDE3MWVmLCAweDA4ODBmYzg0LCAweDI2ZDJhMWM4LCAweDA2NThmOWMyLAorCTB4OTMyZmZlMjMsIDB4ZTA5YjJjYzIsIDB4ZmZlNDc2N2MsIDB4OGZlZjg4OWIsIDB4ZmMyYmRmMjIsIDB4MzdkOGE2M2UsCisJMHg0OWU0ZjUxZSwgMHg3ZGMxOWVjNiwgMHhiNTBmNDRmOSwgMHgxMGE3NjZhNywgMHhiYWM3NWY5ZiwgMHhmMDFkYjAxMywKKwkweGYxMTczNzljLCAweGU4NzZkODJlLCAweGZiN2QyYzI0LCAweDVkZjU4NjVlLCAweDFlY2IwNjE1LCAweDViYmY2ZjM4LAorCTB4ZmU2MWE5NzQsIDB4OGVmNzI4ODYsIDB4YzM2ZWIwYTUsIDB4MTcxNjk5NWQsIDB4ZDU5NjMzYjYsIDB4M2NhMDcyODYsCisJMHhiZTdhODJjYywgMHg4NWNiOGEyMSwgMHhhNGU5MDU4NiwgMHgyNzdlMGY4NywgMHg3M2MyYWQyNSwgMHgzNGIzMDgyYywKKwkweDZjODZmZjQxLCAweGEwMTMyM2RmLCAweDZjZDYzMGRlLCAweDU3ZDc0MTcxLCAweDFkYmU5NjA1LCAweGQxZDFjZmM3LAorCTB4Mzg3MzBkM2EsIDB4MzIzYzM2ZGQsIDB4MDU3YThkZGEsIDB4N2FmM2NmZjQsIDB4MWU1OTNmYTgsIDB4MGQ5Y2YwYzYsCisJMHg2ODg0YjY4ZCwgMHgyMjk3Y2JhMCwgMHg2MWIzYTNlYywgMHg0ZTI0YTNmZiwgMHhkMGM5MGRkNywgMHhhMTM2ZTUwZSwKKwkweDM4N2RjMTY0LCAweDZmYmU3OGRmLCAweDE3YjA4MmRmLCAweGZhMmNjMmY3LCAweGQwNTkxMDM0LCAweGIxOTU3MjdlLAorCTB4NDJhNWU1MDksIDB4NzNhNTc3OTcsIDB4NzVjNjM3NzksIDB4YzljMjA3NmEsIDB4ZDQ2NTlkMzUsIDB4OTM3ZmZjYzIsCisJMHhiYjgxNGJlOSwgMHg1NTZjNjM2MCwgMHgwYWZlMWZiNCwgMHg3MGM4YzU5ZCwgMHg3YTczNTYxNywgMHhlNTk3NGQ3MywKKwkweGQ3NzMzNTYyLCAweGU2NWYwODBiLCAweDk2ZjgwNzBiLCAweDQyNDE0MTY5LCAweGFkZDkzNDY5LCAweGU1ZmFlZmI4LAorCTB4ZjcwOTE3ODAsIDB4NTI3ZmUxY2YsIDB4NjE5ZWU1NjQsIDB4Mjg0N2U3ZjgsIDB4NGM4OGYzMmMsIDB4MzI4ZmU0MDQsCisJMHgwY2EzZjljNiwgMHg2ZmU5MDhlOSwgMHgwMDUxZDAxNSwgMHg3NWRmMzFmZCwgMHg2NWMzYTc1MSwgMHg2YmYxODIzYSwKKwkweDcwZDMyNThkLCAweDNmODVjZmJkLCAweDg5ZTM2M2U0LCAweDg3ZjM0YTdmLCAweDM2NTY2NzViLCAweGY0MGIwMzk3LAorCTB4OWZkODk5ZjYsIDB4NTExNDhlZWQsIDB4ZjEzMGFlNWYsIDB4N2Y2NDRlZjUsIDB4YzVmNTFhMzYsIDB4NzliZDVmYzksCisJMHgyM2M3OTYxZCwgMHg4NmNiNmU0YSwgMHg3YzE2ZGJmZSwgMHhmY2UyODQ1ZCwgMHgzNTNlMDk2ZiwgMHgwYjZmZTM5ZSwKKwkweGI0NjhmZmZlLCAweGJmNTZjYTQzLCAweDQzZmVmNDQ5LCAweDE5Mjg1OWY3LCAweGFmNGU1MDMyLCAweDE1YTY3ZDA0LAorCTB4YjA3NGU0YjAsIDB4NzQ0NjNlZjIsIDB4ODk2YWM4OTAsIDB4ZmQ2NWUzNmUsIDB4NDdhMzBjMDUsIDB4MDBmMzc1MzksCisJMHhiY2NhOGVkOCwgMHg5NzQ3ZmZmMCwgMHhjZTg5NmM3NCwgMHhhMmM2OWY1ZiwgMHg3NDMzZWE4MiwgMHgwYmZkNDEwOSwKKwkweGNmNDFjOTRkLCAweDE3MWY4ZDZmLCAweDM5YTY3Y2Y0LCAweDNiM2VhODNiLCAweGZmNTA1MjYzLCAweDgyZDMyZGRiLAorCTB4OWM0ZTc3ZWEsIDB4OGU3ZmQ0MTksIDB4ZGQ1MDRlNmQsIDB4MWYyNDRjYzYsIDB4NzM4YWVhM2EsIDB4ZTFiYjAxM2YsCisJMHhkYzkyYmFiNSwgMHhlMzk3NTQ0ZiwgMHhkMGY2YWE2MywgMHhlODA1YjM3ZSwgMHg1ZjNiZGIyNCwgMHg5MWVhMDkzNSwKKwkweDQzMjY1Njg3LCAweDExY2I1MzdkLCAweGY0M2M0ZjVlLCAweDY2ZTAzMjQ1LCAweGY5ZDFjYjczLCAweDUzZGJkMDJhLAorCTB4NDVmNDNjNmYsIDB4NmQxZmQ0MGEsIDB4YTdjZmUyZTksIDB4NDBhMzYyYzAsIDB4MzliY2I2YWMsIDB4OWFmODA1ZGYsCisJMHg4YWRmNjI5YiwgMHhhOTc3OWFmOCwgMHhmOThhMjhmNiwgMHhiZGNjZDdmNywgMHhiOTQyNTkyZiwgMHgwNjc0NjczMCwKKwkweGM1MzcyN2VjLCAweGJmM2UxMGZlLCAweDc1OWVmNjJiLCAweDFmZmIwMDkxLCAweDQ2YWI1YjdkLCAweDVkOThiZjNjLAorCTB4YTFlOTE1YjIsIDB4ZjNhNzIyZmYsIDB4OTE5Nzg4NTMsIDB4OTYwOTdlZmYsIDB4OGE2MWQ5MDMsIDB4M2M5MmJkOWMsCisJMHgwM2FkZjg1NCwgMHgxNTEyYzZmNCwgMHhhNTQ3NDljMiwgMHhlNTQ0Y2ViNywgMHgyYTc4YmFhMSwgMHhkOTk5ZDQ4ZiwKKwkweDU3NjM4MDEyLCAweGM3OTUwNjVkLCAweDdlZDQyY2VhLCAweDk1MjI2ZWJjLCAweDU0NmNlYTI3LCAweDRjNTc1YmJlLAorCTB4MDk1ZDc3NjUsIDB4YjJmZjBhOTUsIDB4NmEwZDk2YmQsIDB4MmE5NzQyMjQsIDB4NGZjZWI0ZWEsIDB4NjNkMjU3OGYsCisJMHg2OWQ5MjgyMCwgMHhmOWQwOWYwNSwgMHgzOWFkYmQ0ZCwgMHg5ZDc1Y2U5YiwgMHg2OTU5ZTkwOSwgMHg4MWY5ZGEzZiwKKwkweDlkZmEwNDU5LCAweDNkMTFkNTZhLCAweDliNzQzNTRmLCAweDQ3NWU1Njc1LCAweDIyZmJiOGI5LCAweGJjMTE4YWYzLAorCTB4NWZiMDJhOWYsIDB4ZmQxYjI3OGMsIDB4MDMwZWE5OTgsIDB4ODQxYjRiZjUsIDB4ZWZkODU5N2UsIDB4Zjc5NDA0Y2QsCisJMHgxNjM1NmI1MywgMHg1MDllNjNiNCwgMHhmNjFlOTczMywgMHg5MGRmMTQ2ZiwgMHgyMGUzMWQ3MCwgMHgwNWQ4NmNjYSwKKwkweDkwM2FkNTE4LCAweDZiYTA3MTU3LCAweDYzZjQzOWYxLCAweDBmNzcyODNhLCAweDQ3NDZmNWYyLCAweGY5NDcyZWQ3LAorCTB4NjBjY2JhMzQsIDB4OTVmMmU3YTksIDB4MDhlMjRiZTQsIDB4MmZlZTAyNmYsIDB4ZGE4NmE1NzEsIDB4MTk4ZjYyOGQsCisJMHg5ZDVmNjBlNSwgMHg2OWQyMTY3NywgMHgwYWU3MmM4MSwgMHgzMGVmNWMzNCwgMHg4MGJkZTQxMSwgMHg1NzZkZmI3YywKKwkweGVkZjNkYTIyLCAweGQwMmY5ZWRjLCAweGZhNDRlYzk2LCAweGZlNzE1NmFlLCAweGY3N2EzMTY1LCAweGQ1NDc1YzFlLAorCTB4ZjQyY2YxNWQsIDB4YjQ0ZDg5ZWIsIDB4YzU2ODQyNmMsIDB4NjA2OTY0MWYsIDB4MTRkNjE3YjcsIDB4ZWRkY2EyNjcsCisJMHhhZjg4NWI2MSwgMHgxM2ZkNWVjMSwgMHgzMzhmZGJkMiwgMHg5OTQ1ZGY4MSwgMHhmODllNjA0OCwgMHg0ZGE2ZjBlMiwKKwkweGQ3YWRkYTAyLCAweGNlNWQyMWU3LCAweDMwMGY5YWQ1LCAweGY2NWYwN2UwLCAweGRjZmJkMTAwLCAweDdhMWU3MzQ4LAorCTB4YWZlY2JlMGEsIDB4N2NjZTNkNzksIDB4MjZlNzgwNDAsIDB4MDBiZjMwMzYsIDB4ZTljZjU1ZWEsIDB4ZjAwNDlmNGQsCisJMHgxNTEzZDNhOSwgMHg0YjY5YWY1NCwgMHhjMDEyN2QzMCwgMHgwN2Y4NTVhNywgMHgwOWI3NDdmYSwgMHgwZWJiOTQyYSwKKwkweDA0YTcyYjc5LCAweGI3YzQwNWZiLCAweDBkNzNmOGIzLCAweDA2ODBkZmRmLCAweGQ5OGJkOGVkLCAweGIwNmZhMjY2LAorCTB4MGZlZjQ5OTcsIDB4OWJiYTM0Y2MsIDB4MjM3MWJmNjAsIDB4YTA1N2IzNmEsIDB4Y2U2OTk0ZmQsIDB4ZWE0OTdlYzMsCisJMHg2M2Y0MDg4MSwgMHgxNTU1YmZmYSwgMHgxOWVmYzliYiwgMHg3OGM5Zjg4OCwgMHhkMzNkN2QzZiwgMHgyODdiNTEyMSwKKwkweDcwZTZiNWRkLCAweGNkMjZhZjdmLCAweDUwZjExOWIwLCAweDUxZDNhZjFkLCAweDg4YjE3MWQ5LCAweDkyNTY5ZDkxLAorCTB4NGRiOTc2ODYsIDB4ZDBjYmZkYzMsIDB4Yjg3MzdiZjEsIDB4YWY1ZTQ5MWUsIDB4YTI0MGI5MjEsIDB4MGI2Y2I2MDgsCisJMHhjNWRkNGE2MywgMHhmOGQ2MzIyNiwgMHhiZjIxYjA4YiwgMHgzNGM5YzAwNywgMHhjODNmNjU2MywgMHg0MTQ3NjIzNSwKKwkweDFiN2Y1MDVhLCAweDhlN2ExZmY2LCAweDhmZjMxY2Y2LCAweGJiNDk3OTRmLCAweDVlNGFhZDYzLCAweDI5NjVlOTBmLAorCTB4MTgzZmEzNzMsIDB4NzJhYmM3MmEsIDB4YzBiOTY1YTMsIDB4OGM3NGZjZjEsIDB4OWNmMTExYmUsIDB4ZTc3ZDAxMjYsCisJMHg1MDRjYzk1MCwgMHhiMjMzODYyNiwgMHhkNzVmMTMzNywgMHg3NzNlOTFiYiwgMHhhN2ZkMzllYiwgMHgyZGRjYmM4OSwKKwkweDMwOWFmZWYyLCAweDU3N2E0MmU2LCAweGI5NGQ4N2ZjLCAweDc5YjkyOWY2LCAweGU2OTc4ZjM0LCAweDkxYjI1YTkxLAorCTB4ODc5ODEzYWUsIDB4MjRlYzU3ZDYsIDB4NDNkODFmYTUsIDB4YWEwMjEyN2EsIDB4ZDdjNDc0ODEsIDB4MTYxYzQ5NTQsCisJMHhhNjcyMjc5ZSwgMHg0NDhjZTUxNSwgMHg0ZmIxYjBmZSwgMHg1Zjc3ZTQwMywgMHg0MGFhYzQ3OCwgMHg3OGUzNTVmYywKKwkweGU5YjhlMDQzLCAweGVmMTk0ZTM0LCAweDRmYjIyNTVjLCAweDI0NWM5MDQ3LCAweDg5YTY3MjNhLCAweDRiNTYyZmU0LAorCTB4ZmU4MDg4ZWMsIDB4YTBkNmViMTYsIDB4ZjVjNjUzOWUsIDB4MTRmYzFjODIsIDB4OTA0N2YwZjAsIDB4MDg3ZTU4OGIsCisJMHhmZmQ3MTBmMiwgMHgyYzQzYzgzMywgMHgxMGYyMGFmZiwgMHgzYzgyNGZkYiwgMHhmMjA3ZDJjNCwgMHgwNjNmZGIxMCwKKwkweGJjZTU4ODc5LCAweGU0NTY4ZGJiLCAweDY5YjY5YTlmLCAweDdlMjBkM2VjLCAweDAxN2RkYjUwLCAweGMzNjlkZWY1LAorCTB4YTY0MzkxZDMsIDB4ZTFlNGRlYTMsIDB4ZTFjYmFmOWYsIDB4MmRlZjQ1N2UsIDB4YTBmZDlmMWMsIDB4MDBmZmQxYmYsCisJMHg4YTZiNWNiYSwgMHhlZjFlYjJiZSwgMHgxZWY5YjIzNywgMHg3Y2I2ZDM4MCwgMHgyN2Y0ODc2ZSwgMHgxY2QyZmFmMCwKKwkweDIyNmRkNTM1LCAweGI3ZTM4ZWRiLCAweGZhZjg2YmU1LCAweDNlMzk2MjI5LCAweDc5ZjM0NWI3LCAweGIyNDVkMzdiLAorCTB4OWU0ZWE2OWYsIDB4OWUwNzI0YjYsIDB4M2RhMTYyZGIsIDB4YmRlZjVmYzcsIDB4OGRiNzNmODEsIDB4N2E0M2VkZTIsCisJMHgyNTNlN2U1NiwgMHhlZmY4YTRkNywgMHg2NTJmZGNlOSwgMHhiZDAxMjc2NCwgMHhmZjRhZmNkMywgMHgzZTcyMjZmNywKKwkweDRlZWZlZDBjLCAweGMzZGQ4YjEzLCAweDk5MmRlM2MwLCAweGQwMmY4OTZmLCAweDQ4M2U0NjllLCAweDZhOGJlMDBlLAorCTB4NDI4NWYxMzMsIDB4NTVmZDBhODcsIDB4YTczODcyZTUsIDB4MDczYTY1NjksIDB4NDNmMDQyZGQsIDB4M2E3MjgzMWQsCisJMHgyNWY2NGY0ZSwgMHhlMGM2YzVjMCwgMHg5OTA1YmIzYywgMHgwMWY5NDI1ZiwgMHgwYTA3ZDQ0YSwgMHhhMDdjMjgzZiwKKwkweGYwMjI3YmQwLCAweDNmZWQxMDk5LCAweGY0MjFjZGM3LCAweGNhOGY5NGFhLCAweDM1OGVlOGU3LCAweGRhZjA5Y2ZlLAorCTB4ZGZhMTM2YTEsIDB4ODdjYzMzNzcsIDB4YzFjNTEzZTMsIDB4ZmU0NmVmNzcsIDB4ZDE5YTM1OGMsIDB4Yzg3YzJjZjUsCisJMHgxYzljM2I1MCwgMHhjMmVmZmFlYiwgMHg1NzBiOTE0MywgMHg3MDY1Yzc4MCwgMHg1ZmYyZjBkMCwgMHgzOWM5MDM4NSwKKwkweGJmNDhlMzk0LCAweGZkYWRjOGMzLCAweDVkYjJkMTM5LCAweDQ0ZjdlOWNlLCAweGQyMWY2ZDhlLCAweDU3YTBiZjUxLAorCTB4YWZkMGRmYTEsIDB4ZDlkYWMzNjcsIDB4N2YzOWYyZGIsIDB4MDU1NDc0MjgsIDB4ODllYjEwM2EsIDB4Y2JkNGNlNzgsCisJMHg5ZTcyOWVlNSwgMHg2MzJlNzNhMSwgMHhjMmQyZmYyNCwgMHg5ZTI4N2I3OCwgMHhjODA1NzM5NSwgMHgwMTM5YzNiZiwKKwkweGI4YzYxZmYxLCAweGQ4MWQ3MTdkLCAweDRkNGZlODE3LCAweDNlZDMzNWM5LCAweDU2N2U0N2ZhLCAweGNmZjk5NWI2LAorCTB4NmYwZTQ3N2YsIDB4ODg5NDRhN2YsIDB4MzJmZDE0MWUsIDB4OGI0ODJlZDQsIDB4ZTkwNjY0ZTYsIDB4M2Y0MjY2MWQsCisJMHhmYzRiNTNhZiwgMHhlNjdmMDVlZSwgMHgzZTg3MTgyNSwgMHgzZmU0OWIyMSwgMHg3MWUzMjBiZiwgMHgxMTU4ZmU3MCwKKwkweGFmYmViYmVkLCAweDYzZDQyZTBkLCAweDRlMDZhMzdkLCAweDZmYmUzMDBhLCAweDY0MzYxODNiLCAweDEzNmVkODk3LAorCTB4MDdkZWVmNDAsIDB4ZDRmNTA2M2EsIDB4MmM3YjkwMDUsIDB4NzI3M2IxOWQsIDB4NzNjZmExMWMsIDB4NzNmYTI0ZjEsCisJMHhhNjI0M2IzNSwgMHgzYjRhNTAwMywgMHhmNDg3OWFiZSwgMHg2ZDUzYjRiNCwgMHhmNmQwYjhhMiwgMHgzZDIxOGVjNywKKwkweGNjMTU2ZTllLCAweGI1ZjQ5NzY4LCAweGJmYTFmMWMyLCAweGQ2ZThjMWIzLCAweGE4MjJmZjQzLCAweDA2NjVmZjYzLAorCTB4ZDdjY2RiOGQsIDB4NDM4M2Y4YTMsIDB4N2Q1M2VmNWUsIDB4ODVjNjBhNzUsIDB4MTM1MGVjNjYsIDB4MmYzZTk3ZGMsCisJMHgzYjNlZDFiOSwgMHgwYWE1N2RiYywgMHgwMmRkYTdlYiwgMHg0NTcxODM4YiwgMHgwNGFlZWFkMiwgMHgyZDNlNTdhOCwKKwkweGNlMzBiNDU4LCAweDhiM2EyODYxLCAweGU3Y2E4MmYxLCAweGYzMGJjNTk5LCAweGM5MThiNjU3LCAweGEwZGE1ZGNmLAorCTB4NjAxN2Q4ZmUsIDB4YjdiYjk0NWYsIDB4MjllZWQwNmEsIDB4NWVkYzE5ZGYsIDB4MGViODNiYjksIDB4ZWZmOTIyZjgsCisJMHgwMGY2ODY2OCwgMHg4ZTZkZmNmOSwgMHhjZGVjODYzMSwgMHhlZDFiMmM3MSwgMHhlM2MwZDY0ZCwgMHhiZjdjOGFiOSwKKwkweDcxNzU2ZWRjLCAweGNiODJiYTM5LCAweDhjYmVjNjZkLCAweGVhNWY3ZjQ1LCAweDYzZTkyYWZjLCAweDkxY2ZhZjAzLAorCTB4ZmVhMGE3ZWIsIDB4MmYxYzU3ZjksIDB4ZTVhYTVjMGEsIDB4NjA0ZjNmYjUsIDB4Yjc5YzBmNTYsIDB4NDI2ZjUzYmEsCisJMHhmZGJhYmZmZiwgMHhiNzE4MTFlZiwgMHg1MWYzMDlhZiwgMHgyMmJkOWY3YywgMHhkYmRlZDA5OSwgMHgxMGI5MjZkOCwKKwkweGZkMGVjZWJlLCAweDU2ZTAxMTJlLCAweDhkM2RlMDdkLCAweDVmNzA4OGQ5LCAweGFkY2FmNjRlLCAweGUzMWViNWNjLAorCTB4NjQ1MTVlZGMsIDB4ZGQ0NzQ0ZGQsIDB4YjY2NmE3MTQsIDB4NGYzOGE1ODEsIDB4ODRkZWJiNWYsIDB4MmJmNTQwNzYsCisJMHg4ZGRkNzQxZiwgMHhkMzAyMDNmNSwgMHhmYjQ3MWUyMywgMHhlZTk2NGU4OCwgMHgyZGE1ODY0MCwgMHhmYmU0MjZkZCwKKwkweGJjNDI0NGU5LCAweDkxM2Q5ZTIyLCAweDg4NjVhZjg0LCAweGUwMzNjNDc3LCAweDIxMmNmMTFkLCAweDUxYmM3MTNlLAorCTB4MjI3NGU2ZTMsIDB4NzNmNGZkNTEsIDB4ZGUwYWJmMWMsIDB4MWFjZGE0OGIsIDB4ZTQ2Y2FmNmMsIDB4NjNiMTllNzgsCisJMHhhMjMwYjZjZiwgMHhlOTkzMzUwMywgMHg3YTdlZjA4MCwgMHhhNmJiYzcyNywgMHgxNDY2OWQ3MywgMHgwODYzNmZkMiwKKwkweDg3NmJiNDFkLCAweDc3ZjcwMGU4LCAweGUwODQxZDE5LCAweDhkZjAwMmJmLCAweDBlOTQyMDcyLCAweDkzZGZmMTQyLAorCTB4ZDgwNmU1YzMsIDB4NDI5ZmE3ZGYsIDB4N2UwOGRiZmIsIDB4MjNjN2YzMDEsIDB4MWVmNTU2NDYsIDB4Y2FmNTgxOGQsCisJMHg5NzNiY2ZhMiwgMHhmOGQ4ZmI0MywgMHgwOGRhNTg5NywgMHhlNDE1N2Y4YSwgMHhlNjZiZmM2MiwgMHg1ZDEwZWIzYiwKKwkweGM4NWViMzNkLCAweDU3YTk3YTQ2LCAweDgxM2NmNmZiLCAweDcwYTg4YjcxLCAweDI3ZjRlMzhhLCAweDMyZjlkOWNmLAorCTB4ZmEyMGJiOWMsIDB4ZDgxNmE0OWIsIDB4NWE2YmNkN2YsIDB4YzkyOGRlYmEsIDB4MzVlYzg3MTUsIDB4ZjEyOTk3OGMsCisJMHhjNTMzYzA3NCwgMHg1YTFkOWNjOSwgMHgyZDZiMTcxZSwgMHg3M2ZhMDViNCwgMHg1Y2ZjMDlmZCwgMHhiMjgxOWE4NSwKKwkweGMwMTdlOGU1LCAweDYwOGViODdjLCAweDU1NWU3ZWUzLCAweDI4MTc4ZjA3LCAweDEyOTU1OTdlLCAweDhlMGU2ODM3LAorCTB4NzdhNjA4MWIsIDB4MmU0NTVmYTgsIDB4YzZhNTVmOGYsIDB4M2I0NjZjZGQsIDB4YjMwMTdlYmMsIDB4NGQ1ZWE1ODcsCisJMHhjYzc4ZjAzZiwgMHg3NGRmYjJkMywgMHgwYWYxZmI0NSwgMHgxYmIxNDI3YSwgMHg2ZTM4MmI5OSwgMHg2NWE5YzhhMSwKKwkweDhmMWVmOTEzLCAweDZhYjhlMmZlLCAweDc2ZmRjNjA0LCAweDhhOGY4NDBiLCAweDcwNGY5MDBlLCAweGRhYjcwYWRlLAorCTB4ZjgwMjE2NmQsIDB4MTlmZmVlNDksIDB4ZWRjMDFiZDIsIDB4YTBmNmFiOGMsIDB4MTlkZDIxMjgsIDB4OTkwZWJmNjgsCisJMHg4ZTkxYWIzZSwgMHhkNjk1YmNlMCwgMHg5Y2YwMjIzNywgMHgzOGFlNTkwZSwgMHg3ZjE0OGRkYSwgMHg4YTViNjRhYiwKKwkweDYxMmFlZTkwLCAweGY0MzBlZjNkLCAweDBiNWNmOTU0LCAweGEyZDcyOWY5LCAweGFjY2VjNTI3LCAweGI3ZWUwZDZlLAorCTB4Y2U0ODc3MzEsIDB4ZTAxZWZmOGMsIDB4Mzk2NDAxYmIsIDB4OTkyZTdiZDcsIDB4ZjEyMzMyZmUsIDB4OTk5MDZmZGUsCisJMHg4NzlmOTEyMywgMHhlZGMwOWZmNCwgMHg1Y2ZlNDUzNywgMHgzYzU4MWRiZiwgMHg2ZTcxZGU2MCwgMHhhYzA1NTMxZCwKKwkweGE2NzNlMzdmLCAweDRmNzhmYWEwLCAweDliZmY1MDdjLCAweGNmNDFjY2RhLCAweDQxMTliZGIzLCAweDU5OGY3M2NmLAorCTB4ZGQ3OWVhODIsIDB4NGZmYTgzMTMsIDB4NTQxNmQwZjgsIDB4MGUyYmU0OWYsIDB4NGNlNTNmZWEsIDB4MzA3ZDUwNDksCisJMHg5NTczY2UxMywgMHhlMzViYzFmYiwgMHgzM2ZlYTA4NSwgMHhmOWEwZmFjZCwgMHgwNTQ0Njc2NywgMHgzMjBkMDdkNSwKKwkweDUyYmI2NDdjLCAweGNlNWY3N2IxLCAweDY4NmVmNmU1LCAweDc2ZjdjMGE5LCAweDhhM2FmMDRiLCAweGM0ZTc3ZWJmLAorCTB4ZDhlNmY1ZTAsIDB4YTFmYmQ3ODIsIDB4ZmEwYmQ5NzgsIDB4YzI3ZTA1NTQsIDB4YjE1ZmEwNzMsIDB4MTNmODFkZmMsCisJMHg5YTEzZjAyYSwgMHhmYWMwOWZjMSwgMHg2MDRmZTA4YiwgMHgwMjdmMDFlOSwgMHg3ZjAyNWZkYiwgMHhlMGFkZWIwMiwKKwkweDIwZmQ2MDRmLCAweDZmNTgzZmY4LCAweGYyYTYyYmFiLCAweDZhMTJiYTk1LCAweGJhZmMxNmJmLCAweGM5OGY3NWU0LAorCTB4ZDc5NzFlZWIsIDB4NzRlMTc3ZmQsIDB4NWRlZjllNDIsIDB4OWM2ZWJlNzksIDB4ZGNmZmNkMmYsIDB4YmM1NjNjNTksCisJMHgyZDNjZmMwNCwgMHg4N2M2YWNmYSwgMHg1ZjBhYzM3ZSwgMHgwNjJkYzYxMSwgMHhjNjE4OTJkZSwgMHg3ZGRkOTlhNSwKKwkweGY1MDYyZWFjLCAweDMzOGEwOGQ5LCAweGI3ODE5MmIzLCAweDdkNTJhZTMxLCAweGM5YjRkNTIwLCAweDBmZWNmYThjLAorCTB4YmVmM2UyZWYsIDB4N2M4Y2M5NTYsIDB4ZWZlZGE4NzksIDB4ODVjZjM4MTEsIDB4NWY3NDYxNGIsIDB4ZWYxMDdhNGEsCisJMHg1NDYxYmYxYiwgMHgzMWNmMDRkZiwgMHgwNWIzM2EwZSwgMHgzN2U5MDgwNCwgMHgwYmI3ZTkwZiwgMHg0ZGRkNGE2OSwKKwkweGNkMjViZGY3LCAweDUzYzQxYTJkLCAweDNjMjlmMjE1LCAweDBlYTNjYjdmLCAweDYzNWNmZTdlLCAweGY2MTM3M2QwLAorCTB4ZTU0YWIyODcsIDB4YjljMjM4YTYsIDB4MmYzZTY1MzYsIDB4ZjFhNDc3ZjUsIDB4Y2Y3M2NmN2IsIDB4MDUzZjVlMWQsCisJMHhlMmNiNmZmNSwgMHg1ZTdmNzgxMSwgMHhlYzVlZmNkNSwgMHhjN2MxNTdiZCwgMHhjODVmMDdlNywgMHg3NmNhZmJhNCwKKwkweDlmZTBjZjk4LCAweDk2YWVkOWNmLCAweDhlZmY3Y2ViLCAweDY4YTI5NmI0LCAweDAyY2QxYzU0LCAweDA1YzUwYjFiLAorCTB4NWZlZTg1YjYsIDB4MzhmNmRhYWEsIDB4NjU1NTZlNTAsIDB4MDA2NmFkZGMsIDB4MjQ4ZjdlOWYsIDB4YmRmODM3YzcsCisJMHhiOGM0YzM5MSwgMHgyMmY5ZTcxZCwgMHg1ZjU3ZWYwMiwgMHhjM2JkMWNmNywgMHgzOGVkZjg4NiwgMHhmNmViODExYywKKwkweGZlNDE0YWI3LCAweGI3MmI2OGQzLCAweDM1NWI0NzhmLCAweGFkMGJiZjg0LCAweDVlZjAyMzg3LCAweDMwZTdhMzc3LAorCTB4NGJjYWJiODcsIDB4ZDcyNDNmZTcsIDB4NzgyNGExZmIsIDB4ZmU3NDQ5YjcsIDB4ZDA2MjRiOGEsIDB4NTU4Njc2M2QsCisJMHhiNjY2NzlhMiwgMHhiOWUyMzU4ZCwgMHhiZDdjM2M3YSwgMHhiNzk5YWIxYywgMHg4MjVlMmRhNywgMHhiZjFlM2ZmYiwKKwkweDdiMjI0ZjIwLCAweGNhMzUwNDEwLCAweGVmNjYxYmYxLCAweGNhYTQzYjQxLCAweGYzODZkOTIzLCAweDc5ZTQwYWVmLAorCTB4NGU5Y2Q0YmIsIDB4ZGZkYjRhZGYsIDB4NzhmOGYyODUsIDB4ZDI2Yzg4ZjEsIDB4Njk5ZjhhMTEsIDB4OTE2Zjc2ZTUsCisJMHg3YTg2OWVjNiwgMHgzNjYwYzdhNCwgMHg1ODNmOWQyMiwgMHhmYzQ0NmE5YywgMHhkYjEyYzIxZSwgMHhlYzY5Nzc4YiwKKwkweGU2YzdiYzA2LCAweGJhOThmNWViLCAweDdhZWU5MDIzLCAweGI0MjU3MzVhLCAweGYyZjk5NDc3LCAweGU4ODc3NWU1LAorCTB4MmU2ZjA4N2IsIDB4YmJiOTUzYzIsIDB4ZjhmMzgwZDEsIDB4NzNkYmM3ZjEsIDB4N2ZlYTI2YWMsIDB4M2NkZWZkZGMsCisJMHgzMjdhYWJiNCwgMHhlOTJlYzljMiwgMHhhN2YyMzBkMiwgMHg1ZGI5OWFhYiwgMHhkODkxZDNkYywgMHg5MjRmNzgxOCwKKwkweGYyZmQ5NTYzLCAweGRhZjA5MTBjLCAweGZiOTZhNmQ3LCAweDA1ODdiZGRkLCAweDM5ZDM1M2Y1LCAweGRlMGVlYzJmLAorCTB4ZWE3ZGM5OGYsIDB4MWRjN2I0NTEsIDB4ZjUwYzRiNGYsIDB4MWI1ZDQzYTIsIDB4NmNmZmU3OGIsIDB4Y2FmZWYwNjcsCisJMHhkNDNiMzg2NSwgMHgwMGQ4ZDhkZSwgMHgwZmI0NzU3YSwgMHhlODgxOGRmMSwgMHgxM2UxNWRiYywgMHhjMTUzZTEzMywKKwkweGI3MDY0ZjYzLCAweGY5ZTI3YWU3LCAweDY1YTNhNGJkLCAweGU1ZjVkMTBmLCAweDY0ZWVhNGYxLCAweDdmMTIxZmY0LAorCTB4ZTc3OGEzYTksIDB4YzU2N2ZjYjUsIDB4YWZmMDA4NmUsIDB4ZWE4YmZhMTgsIDB4MzEzY2Q0ZTIsIDB4YmMxZjZmYzUsCisJMHhiNmFiNmI5NiwgMHhhYmJmNDQ4ZSwgMHgxZWNhZmM4NCwgMHhhYzJjZjYwNiwgMHgzYTdiNDRlOSwgMHhiNjFmZjI5MiwKKwkweGFkODNiYWUxLCAweDc2YmZiYTZhLCAweDdkNjZkYWVhLCAweGEwZDk3NjAyLCAweGY2MDUxODA1LCAweDJkNTNiODNkLAorCTB4MGNkOTdiZGYsIDB4OTUyZWQ3NjgsIDB4Y2NjZmRhZWQsIDB4ZjQwOTdjZjYsIDB4NDg4ZDczYWYsIDB4ODY2NDczZTcsCisJMHgyN2QzMWY5MSwgMHg1YmNmYmRjYiwgMHhiYjI0ZWY5MiwgMHg0MjY0OThlMSwgMHg4Nzg2Njg3ZiwgMHg2NjhlYzFkYiwKKwkweDdiNTZkNzZlLCAweDJhNjNmZjkyLCAweDZhY2RlZGRhLCAweDhhNjBkNGNjLCAweGVkOTRlMjFkLCAweGRkYjJkMzkwLAorCTB4ODBjZDdhN2IsIDB4NGU5YmZjODYsIDB4OGM5NjNkODEsIDB4YmI1YjJhNzksIDB4MzNiOWUxMTIsIDB4YjNkOTE2NzMsCisJMHhlYzk5YTk0ZSwgMHg4M2RiNjU4OSwgMHg2ZmIwMDdlZCwgMHhjZjU1ZWE4MiwgMHg3MjE3ZGE4NSwgMHhkYzEzY2I3YywKKwkweGRiODdmOGFlLCAweGM2NzY0M2FjLCAweDBhNjdmNDM4LCAweGM4NzFhOWE1LCAweDc4YzgyZjBmLCAweDk1OWJmYzU1LAorCTB4Yjc5NDJkZTMsIDB4OWU2NTUxYjMsIDB4MTAyMWM0YTUsIDB4ZmI5ZDM1NWUsIDB4NmVkZjcwMmIsIDB4ZmM4NTk4NDcsCisJMHgxMGFmNTU4ZCwgMHhlNGJmZmI1YywgMHgzYzdmNGM3ZSwgMHgzM2Y0NzgyMywgMHgzNmZlZGYwZSwgMHg2YTM1ZTc0ZSwKKwkweDQ4Zjk4ZGMxLCAweDM0YjY0MDM1LCAweGFmNzA0ZTlmLCAweDZiYjMzOGMxLCAweDEzZTQ4MjMwLCAweDE3YzhjNTYzLAorCTB4N2Y3MDE2MmIsIDB4NWYzMTg2ZDUsIDB4N2UxNTZiMjgsIDB4YjdhYmQxMDgsIDB4NTQ1MjdjYTgsIDB4YjM2ODljODAsCisJMHgwMmJmNTBhNiwgMHgzZWEzYjMwZCwgMHg5MGI0Njk1YiwgMHhlM2EzMWI3ZSwgMHg2YWUxN2E3NiwgMHhjM2QyMzY0ZiwKKwkweGI1YzdmMDE4LCAweDMxZjhmMTAxLCAweGZiMDEwMTg2LCAweGM3ODA3ZWVkLCAweGMyNzg5NWZmLCAweDFkNDk5NTFjLAorCTB4MTkxZmEwMTUsIDB4OTVmZDQzNWIsIDB4ZjBhMjQxZjksIDB4ZGY5YWQ3ZjEsIDB4ZmMxYmYzMDQsIDB4MjNiYzAzZjMsCisJMHg1ODVmZGUxMSwgMHg5M2I3YTQyZCwgMHhmZmY3MjhlNiwgMHhjYTk3YzRiNSwgMHhiZDAwMmU3OSwgMHg2MzE4MWM2MSwKKwkweGM3Mzc4ODM0LCAweDlmYzgzN2NlLCAweGY1ZWViMjczLCAweDgyMjhhZTM4LCAweGY3MDhhM2VmLCAweDVlMzBmNTgzLAorCTB4ZTc5NjUxZmUsIDB4YmNiYzc5YjEsIDB4ZjkxNTJlNGQsIDB4N2I2NzkwZDUsIDB4OTVmNTBhZGYsIDB4NTkzZmY2NzksCisJMHg4ODk5YWU0OSwgMHhiNGNhNTczZSwgMHg5YzRjZjYwMiwgMHhiYmY5MTg2ZiwgMHhmMDg5MWRlMiwgMHgwM2YwMDVmYSwKKwkweDVhYzJmYmYyLCAweDY0MTY5Y2MxLCAweGFmM2E3MTJmLCAweDNjZWM0ZGUxLCAweDQ1NGVmNGYzLCAweGRkNmNiODM4LAorCTB4YzZkNzk4MTksIDB4NWEyZDdmMzgsIDB4MDVhNzM3YTUsIDB4YmQyMDA3ZGUsIDB4MDI1MWZmYTMsIDB4MmZkMWYyZmYsCisJMHg1MzcyYmZlMywgMHg1Nzk0NmRjNSwgMHg4Y2Q2MmFiNSwgMHhjODM1MTdmNywgMHhhNmQ3MjkwZiwgMHg4N2JhNTBmZiwKKwkweGI3YTQ0ZWRmLCAweGEwYjVhNjZhLCAweDBiNjlhOTdlLCAweGExNTE2ZTdkLCAweDA4NGRmZTNkLCAweDc0YzkyNDVmLAorCTB4ZTgxNzY4ZGEsIDB4NWJmMWJkN2UsIDB4OTVhMzhmMTUsIDB4YmIzNzE0MGEsIDB4NGU5MTFhMGIsIDB4Y2FmZDg3ZTksCisJMHg3ZTcxYjlhNywgMHhmYmEwYjNjYywgMHgzOTE4ODZhZSwgMHhlZTg2MmJlZiwgMHg5ZjIyN2VlMSwgMHhmNzk1MmVmZiwKKwkweGEzZWZlNDBkLCAweGM2MzI0ZjZhLCAweGY5M2E4ZTcxLCAweGU2MDJkNTNkLCAweDUyZGQ3YmExLCAweDZmNjU0ZGQ2LAorCTB4MmYwMWY1NzgsIDB4OGQxYWVlNGQsIDB4NzYwN2Y4N2UsIDB4MWE5MWM1MmQsIDB4NTExOTM2ZDcsIDB4YjViMTY2Y2UsCisJMHgwMzFmYmMyNiwgMHhmYmVlNzkzNiwgMHgxYmRiMmJkYywgMHg5NDY4ZjdhMSwgMHhjN2U3OTU5ZiwgMHg5MmJjY2FmMywKKwkweDgzYTAzY2Y4LCAweGY4YTM4MDMzLCAweDU3YzdjYjljLCAweDAyMjA3ZmJkLCAweGZlZmU3ZWUxLCAweGNhN2VmM2ZkLAorCTB4YjkwMjBmZDAsIDB4ZDY1NGYzMDUsIDB4YmRkMDY0YjYsIDB4Njc3NThiOGMsIDB4YWJmMWZiZTQsIDB4MWZjMTUzZTAsCisJMHhmMDgzOTliNCwgMHgwZWI5NjcwYSwgMHgwZDlmMzNlMCwgMHhkMzZlNjNlNCwgMHhjMGE5ZjBiNSwgMHhmMDNkNDkzOSwKKwkweGU4MjUwNDYzLCAweGExNDM5MjMxLCAweDVlZTA1Njc4LCAweDNjZDU2YWNkLCAweGVlZmI1NmZlLCAweGIzZmZlODAyLAorCTB4ZWQxOWEyYjUsIDB4N2VmMGNiY2EsIDB4ZjU3OGZjMGQsIDB4MjhkNzkxZmMsIDB4MjU3YjNmOTAsIDB4NWE3ODI5N2MsCisJMHhmZjU0YmNjOCwgMHhmYjhmOGEzMCwgMHhmMTQ0YTE3MCwgMHg3YzY5ZmZjMywgMHg0YmQ5ZTQzNSwgMHhiN2MyYWVmMiwKKwkweDI1N2E3Y2ExLCAweDJhYjQ1Y2JlLCAweGY4NDM3Zjg0LCAweDJkMmY4ODc0LCAweDdmMDAyZmYwLCAweGM0MTE1NWY2LAorCTB4MWQ3ZTBhOGYsIDB4NTE5M2YwNjYsIDB4MmQxODc1ZmYsIDB4M2UzOTc2NmUsIDB4ZmRjNWRmZDEsIDB4ZWMwYWI2NTQsCisJMHhmMDg3ZTE0OSwgMHhlM2ZjOGZhYiwgMHhhZDAxN2M1MCwgMHg1NDFmNTBkOCwgMHhhOWYzMDVlNywgMHhjOTJiYzc4MiwKKwkweDdkZWU0NTJkLCAweDRkNDdiY2M0LCAweDcwNjdkZDAyLCAweDk2ODVmZTNlLCAweGZiOTRlOWYyLCAweGUyZGVlNTBjLAorCTB4NmZhZTNjZDEsIDB4YzA4ZmNiNDIsIDB4YTI3YmMxNmUsIDB4MjMzZDE5NGQsIDB4ZDVlYmRlZDEsIDB4N2JmMGYzMjgsCisJMHg3NGQ2OGZkNywgMHhjZDdjYzY4ZiwgMHhiMmYxYTY4ZiwgMHg0Y2YzYzM1NywgMHg4YzJkYmE5NCwgMHg0YTNmMDNjNywKKwkweDZlMTBiYWQwLCAweGE2ZTMwOTFmLCAweDkxZjAxZGEzLCAweDc4M2JjYmYwLCAweGM2NjM0ZTNkLCAweGU5Yjg4MmZhLAorCTB4YWFmN2E4MjYsIDB4ODNlMWY4OTUsIDB4NTM3NmZjYjIsIDB4MDk4MmQxZjksIDB4NjA0ZmQ0MDUsIDB4NjYxZTEwNDcsCisJMHgzYWQwOTU4MSwgMHgwYzVkMTA4MiwgMHhlN2U4ZjlmYiwgMHg1ZWYwNzM2MywgMHgwM2ZmMzk0MCwgMHhmNDhlM2M3OSwKKwkweDQzMWNmOTFiLCAweDA5NWZmNmYxLCAweDA0NWY2ZjE0LCAweGY3ODRjM2FhLCAweDI4OWZkMzAyLCAweDkzZjY4MTRlLAorCTB4YTZjZDRlYmYsIDB4YzExNWNhZmIsIDB4NGRmZWEzZWIsIDB4NTZlNTM4YTYsIDB4NGI5NmU3OWEsIDB4OTljNWVhMDMsCisJMHhlOTBkN2RmZSwgMHhiYzhiODJjZCwgMHhhMGQ4Yzk3ZCwgMHhmNDViNjY3YywgMHhiYjI3ZWUzOCwgMHg4ZjUxMjM1MywKKwkweGYwNmQ3YTI5LCAweDYwNDM3ZWQ4LCAweDFjYWNmNTFjLCAweDhmYWExZTc3LCAweDUwMjkyNDdiLCAweGY3YjFiZTJmLAorCTB4YTc5Yzc0ZTEsIDB4YjJjYWUzNWMsIDB4Zjk4ZjMwMTgsIDB4MWZiNDI0YTksIDB4OTQzZWY3Y2EsIDB4ZGVlZDc2NGUsCisJMHg5ZmU4ZTk4ZCwgMHg5YzNkMzc5NCwgMHhiODdhYTM2ZSwgMHgxNTIzZmM5ZCwgMHg3ZGY5ZjczZiwgMHgwYTZkNzY5MywKKwkweDlkNmZhM2IwLCAweDUyZmJlZGMwLCAweDY4ODUxYmRkLCAweGYxYmFjZWRmLCAweGI3MTg3NWYzLCAweDgxNmJmYjFmLAorCTB4NTkwYjcwZTIsIDB4YjdkNDNhZjcsIDB4YWY5YzE5NjUsIDB4ZTQ4ZTgzNTgsIDB4Zjc0N2NjM2YsIDB4ZGRjNjdiYTQsCisJMHhmZWU1MWJiZSwgMHhhYmJmOGNmMSwgMHhjZGZlYTA5NywgMHg2NTdjZDE1MywgMHgwZTM5YmRjYywgMHgwNDFiNmZlMywKKwkweGZiZjliZjhhLCAweGQ3N2JhNjhmLCAweDRkMDU2YmM1LCAweDUxZWEwYzdjLCAweGM3ZmQ3NzllLCAweGUzODIyOGJjLAorCTB4YmJiMjFiM2QsIDB4MzU2Y2JkYjAsIDB4NzVhNTlmNmYsIDB4M2NlMGY2YjcsIDB4Y2YyODY4NGYsIDB4NGE2NTE0MGEsCisJMHhmNjNkYzA0OSwgMHgzZGY4ZjMxZiwgMHg3MmNkYTJkZCwgMHhjZWJjYjFiZSwgMHg4ZGIxNmRkOCwgMHhhM2ZjZTc4MSwKKwkweGZlNTY3ZjhjLCAweDNiODNjOTAxLCAweGI2ZGNiYzY1LCAweGYxMjNiZGZhLCAweGRhYTQ2ZjMwLCAweDJiOTQ2N2ZlLAorCTB4M2E3ZTNlZWYsIDB4NDE1OWU1MGQsIDB4YTQ0Y2Q5ZjQsIDB4ZmIxYWIxZjMsIDB4ZWU3ODE1OTMsIDB4MmJjNTJkMjYsCisJMHg1Mjg5NTlhZCwgMHhiOWNmZjQxYywgMHg1ODYzZGE3ZiwgMHhmOGJkNWEyZSwgMHhmYjhjMGFjOSwgMHgxZjkxZDc2ZSwKKwkweDg1NmZlY2E2LCAweDVmZDExNjYwLCAweGQzZjhkYzNkLCAweDY3NmUxMDdiLCAweGE0NzllNzFlLCAweDhmYWYxYTJiLAorCTB4ZTJmZTVhYmIsIDB4MWYzYzc1YjMsIDB4MWQzYWY5ZmMsIDB4OTlkNDJmOTUsIDB4Yjg4ZTE5OTgsIDB4ZWE5ZTJlYWYsCisJMHg1MzMzYWZiZiwgMHhmYTczZTZjOSwgMHhhZWE2ZjI1MiwgMHhhNWVlNWYzNCwgMHhiNjViY2EzMCwgMHgxZTUxZDA2ZSwKKwkweGY2ZDZhZTdkLCAweDZiYzAxZTU1LCAweGE2Y2UwZGVjLCAweGM2YjlmMjhkLCAweDU3NmNmOGMyLCAweDgzODQwY2YyLAorCTB4MmVmMmUzNzUsIDB4ZTU0ZjYxMzQsIDB4ZWRlYWZmNzEsIDB4NjQ0OTBkOWUsIDB4ZjUzZWFmODcsIDB4Y2YzYzA1NGMsCisJMHgwZWY5MmZjYywgMHg1ZTc2ZWJjNywgMHhlMWMxNzhhNCwgMHgxMGNhODdmNiwgMHg1YTRkZTVkZSwgMHhkY2Y5M2U3ZSwKKwkweDhmNGYxZTY3LCAweGJjZTMxMjdiLCAweDdmYzlhOTZmLCAweGVhNzlkOWFmLCAweGRlNTA4ZDk5LCAweDI2Yjk3OWJiLAorCTB4ZTg3ZmRlOTAsIDB4Zjc5NWJmNzksIDB4YmFiZTJkNzMsIDB4NzVmZTFjMTIsIDB4ODkzODdhYmUsIDB4ZjgwOWE3ZjgsCisJMHhlN2RmZjMyYSwgMHg2YmQ1OWFhYiwgMHhmMzczN2UwOCwgMHhjM2U2YzY0YiwgMHg1ZGE4Y2ZmZSwgMHg2NzRmYzg0OSwKKwkweDc0NGNkZGM2LCAweDA4MTRlYWVlLCAweDU3MWM4YWZlLCAweGYzZTZhN2M2LCAweGQxMmFlOGZiLCAweDQ4ZWM5OWIzLAorCTB4MDU3ZjhlNTksIDB4ZjdjMjIzOWUsIDB4ZDJjZmY2OGQsIDB4YWFmZThlZDEsIDB4Y2Y1NWMxNmQsIDB4M2QwZWIwN2QsCisJMHhlOTliOGMyMiwgMHg5ZTdkMGNhOCwgMHg2MmE3YjFhZiwgMHhjOGJlNzE1ZSwgMHhlN2QwZTdlZCwgMHg3MTJiZTdiNywKKwkweGM1YjcxZTc4LCAweGE3OTAxMDlmLCAweDQ1OGQ4NGUyLCAweDEzZmVhMzQ2LCAweDk3MjA2MWJjLCAweDllYjc2ZDlkLAorCTB4MDZmZmExNTUsIDB4YzFjN2UxN2UsIDB4MzhmYjI4NzYsIDB4Njk1ZmFmNDAsIDB4YWIyYWQ3YmYsIDB4NWY5NTFlNzEsCisJMHg1MGY4NGVlZSwgMHgzZDAwZGU2NCwgMHhjNjE3YzkzZSwgMHgwZWViMDFiYywgMHhhNmQwMmJmOSwgMHgwNDllZmJhMSwKKwkweDM3ODgwYjkyLCAweDZiZWE4N2NjLCAweGY1ODRkNzFmLCAweGM3OGUxYWIzLCAweDk3ZTA4M2JlLCAweDkzMGNiOGYxLAorCTB4M2NlN2ZkZjIsIDB4MGIzZTdlZGIsIDB4NzllODZjZTUsIDB4NGYzOTVmYWIsIDB4N2I2OGUxZjQsIDB4ZTc0MGEyZTgsCisJMHg5NTU2Nzk5ZiwgMHhiZmYzZWQ3NSwgMHgxNjdjZjdiMSwgMHhkYWFjZWZlMiwgMHg1N2ZlOGY5NywgMHg4NTk3YzY5ZiwKKwkweDk1N2VhODc4LCAweDE1N2ZmM2NiLCAweGM1N2I0YTBlLCAweDEzOGYwZDA2LCAweDIzZjIyNjBhLCAweDE0MGJhNTBiLAorCTB4YzYzYmU4MDcsIDB4ZWRkNTAwZTMsIDB4MGU5ZTQ4YmIsIDB4NGM3OGYwNzYsIDB4MTQ1ZGQ4OGQsIDB4ZGE4YmYxODcsCisJMHhjZjI4NWQ1MywgMHg1ZmI5ZTMwNiwgMHgyOGRiZjMwNiwgMHhkNjU1MjFjZiwgMHhhNDgxYWE4MywgMHgxZWQ3MjAzOSwKKwkweGVlMDdhMjE5LCAweGZlNDE5ZTBmLCAweDFlM2NlMGQ1LCAweDY1NjFlNTA3LCAweDJiYjQzMzg1LCAweDQzM2YyMWNlLAorCTB4ZTRhYWQ5N2IsIDB4NjdlNzQ4ZjUsIDB4NTA3MzIzZGMsIDB4ZjU5ZGJlM2UsIDB4ZGY4YTZhOGYsIDB4OTI2ZTFlYmQsCisJMHgzMDk1OGVjOCwgMHg0ZTA4NzhjNywgMHg0YjcwZTc0MywgMHgyOTg3ZDEzYywgMHhiMzM4NzE3NiwgMHhkMWFiZjQwNSwKKwkweGJmMjRlZjk4LCAweDlmYmYzOGZhLCAweGYzODFiOWFiLCAweGYzODU3YjEzLCAweDFiZWQ3MzkzLCAweGY5ODBmODlhLAorCTB4OTNmMzI1N2UsIDB4N2FjZTRmNjIsIDB4OTdjNDFmZmQsIDB4OWVkYWU3MGYsIDB4NDcwY2JlNDAsIDB4YzVmMzg4NTksCisJMHhiNTFlNTI0NywgMHg3Mjg3MWVmMiwgMHg5MGU4NjkxZiwgMHg4OTYyZjhmZCwgMHg0OWI0ZDc5ZSwgMHg1OGU1ZWYwYywKKwkweDBhZjI5MWJjLCAweGNhMTZkOThhLCAweDNjYzU5Y2I3LCAweDhmNWU3OTUzLCAweGYwMjlkMWVmLCAweDUyZWJmNjdjLAorCTB4ODFhMWU2MmUsIDB4ZGJmNzRkM2QsIDB4MzRmNjYxNDUsIDB4MTVlYWQzY2MsIDB4MWVhZTE5MDUsIDB4N2QwMDljZWIsCisJMHhmNzNlN2VmNiwgMHgwMjRhYTc1NywgMHg4NDgxYjFlOSwgMHg2NjUzYjI3MCwgMHhlMjk2NzdjZSwgMHg1YTdlOTU3ZSwKKwkweDk4MzNlYjkxLCAweGU2MmNlYzg3LCAweDdiYzJjODFlLCAweGM4MWRlNjU1LCAweGE1NTZmYmMyLCAweGMzZDdiY2RmLAorCTB4MzIyZjQ5NmIsIDB4YzA1ZTc1OGYsIDB4NzlmM2E3M2EsIDB4YmMwYmYzYmMsIDB4NTI3OTA3MWYsIDB4MTZjM2RmMjMsCisJMHg0MzZlZGY0YSwgMHgyNzQ1NmI3ZiwgMHgxNWVjN2ZiZiwgMHgzY2MwM2Y5MywgMHgxOWMwMTczMywgMHhmMDFlN2FmMSwKKwkweDYzZmQ0MzZhLCAweGYyMWIzNjY3LCAweDZlOTFmOGNmLCAweDdkOWE5ZmU0LCAweGJkN2NjMzAyLCAweDEzNmQ3NmVhLAorCTB4ZDVhYTg1YzYsIDB4ZTdhNDU4YmUsIDB4NmJlZjZkOGQsIDB4ZjA2YjllOTAsIDB4OGUzYzc2NWUsIDB4ZGNiYzcyNjcsCisJMHgzNWJmNzk0NCwgMHhmNWVmYzYyNiwgMHgwMGZmYWVkYSwgMHg2M2NlNzZlMywgMHg1NTNhOGI1YywgMHgwMDNjNTFlZiwKKwkweDU3YWUzNmU1LCAweGZlNDJkYWQ1LCAweGM5Nzk4M2JmLCAweDA3MzQ3N2ZmLCAweDNjNjBjZGQzLCAweGYyODdlNzhmLAorCTB4NzM3Y2U5YzksIDB4ZGNjYzdmMTAsIDB4MWU2M2Y5Y2UsIDB4NjgxYjczZTYsIDB4Njc1ZmM1MzgsIDB4NWQ5MWM3YzYsCisJMHhmMWM3MWZlMiwgMHhhZmNlOTM2MCwgMHgzZmE2M2I0MywgMHhmYzdjYTA0NSwgMHg1YWQ3MzBmZSwgMHhlOTVjOGZiNCwKKwkweDdmZTlhZWRjLCAweGJkMmIwNWVkLCAweDViNzNhM2Y3LCAweDNjZjk4YzdmLCAweDczM2JkZGIyLCAweDE0OTU1NmMzLAorCTB4MWQ5OTlmYjAsIDB4MWZkOGRlM2MsIDB4MTIwZmNhYzYsIDB4MjFkN2VkZGUsIDB4MjViOTdjM2UsIDB4YmUzMWYyNjcsCisJMHg3Nzc4MTlhMywgMHg0NDgzYzYwYSwgMHgzZDBkMWYxZSwgMHg2YjhlNWQ4NywgMHhmZGZjNjcxYywgMHhiM2RmNjUyOCwKKwkweDNjYjkxMzEzLCAweGEzYTI2ZTYzLCAweDViYmYzOTJlLCAweGM2NTFkN2M5LCAweDUwNDEzMmRmLCAweDlmYjhkMWVlLAorCTB4ZmFhZTU4MjQsIDB4ZDdkZTFhNWUsIDB4ZGUyYjllNjAsIDB4M2JmOTYwZDcsIDB4ZWYxNjFmMzksIDB4YTJmZWIwNmIsCisJMHhmNzhiMGY5YywgMHhmNzhlZDgzNSwgMHg5NTZmNTgzNSwgMHhiZWYxNjFmMywgMHg1Zjc4ZWIwNiwgMHg3MjJiZTU4MywKKwkweGRjNzFlYzNlLCAweDZkZjFlNTJhLCAweGEyZTkwYTdjLCAweDk0NmQ3OTBiLCAweDFkMWJkZWJmLCAweGRjMTUxZjUyLAorCTB4MDg1YTM3YmYsIDB4YTgxMjhmYWUsIDB4YzZjMjY5YmYsIDB4NzhmZjMwYTcsIDB4YzUyZjkyOTMsIDB4YzNiNDQ2Y2MsCisJMHhmYmY5YzIyYSwgMHg3YjA2YTkxYSwgMHhmM2Y0MDRlYywgMHg0NWVkNzc4YiwgMHg5YmY4MWU3ZiwgMHg4ODJiOWZkZSwKKwkweGVmNGE1MDVlLCAweDE5NjhjNDk3LCAweDI3ZGJhM2NhLCAweDgwNGY0N2Q4LCAweGNkOGVjN2YxLCAweDcyNGFkYjQ4LAorCTB4ZWNmNzRmNTIsIDB4MzFiYjNmYmQsIDB4NmY3YWUyOTIsIDB4MjU4MjRjNDksIDB4YWVlNDY1YTcsIDB4OWE3ZDQyYjUsCisJMHg4NWZhMjA0MSwgMHg1MTJhNmVmOSwgMHg2Nzk4NGNmYywgMHhhYjYyYzc0NiwgMHgxMzA3Y2I4YSwgMHg5Mjg1Y2JkYSwKKwkweGIzYWUwOTYzLCAweDhiOWY0MTIyLCAweGQ1ODhmODcyLCAweDUxZmI4MTllLCAweDZhMzQ1ZGUwLCAweDQ1ZGExYTU5LAorCTB4MDdmMzZhNWQsIDB4YmQ3NTlmMTgsIDB4NTdlODY2YTMsIDB4YTUzYzcxMjksIDB4NjlkNjkzZGYsIDB4OTliZmI4ZjksCisJMHg3MzZiYTkxOSwgMHgzNjYwN2U3MCwgMHgwZDM2Nzc5NCwgMHhkOWZkYzY2YiwgMHg5ZWExNzBjNCwgMHg4NTU5OTdlNCwKKwkweDAyN2YyMGYyLCAweDY2ZTk5YmE3LCAweDM1N2IxZjZlLCAweGZhMzQ1NTY2LCAweDYyZDM2MWY1LCAweDRiYjc1ZWYwLAorCTB4MTkzMWYzYzYsIDB4M2M2NWM3Y2YsIDB4ODE1NzNkZTMsIDB4NjE3M2RmOGEsIDB4NTg1Y2Y3ODksIDB4MmRhM2U2ODYsCisJMHg0ZGIxMmZjZiwgMHgyNDBmNzgyMCwgMHhjZGIzZTYwNSwgMHgwMDk3ZGY5MiwgMHhkNGY3YTEwYSwgMHhmMzFjNzI5YywKKwkweDM0ZWU1OTRiLCAweGNhZGM5NWU2LCAweDllNjg3OWM3LCAweDc3OGUzOTJhLCAweDZmN2MxZDVlLCAweDhmZjM4Y2E4LAorCTB4YmRjZTU0NjcsIDB4MTY2YmNiODksIDB4YmY3OWUxYTksIDB4ZTYxNzMxZDcsIDB4Mzk3ZGNmMTUsIDB4N2Q1MGUyODEsCisJMHgwNmE1ZDE2ZSwgMHg1ZTA1Y2ZiYywgMHg1ZWM2Nzk0NywgMHg4YjJlZmVlNiwgMHg3NzMzN2NlNywgMHhhYmY1MWM3ZiwKKwkweGNlYTllMzk3LCAweDdjNzRlZWU4LCAweGU2NGZhM2FmLCAweGYwN2VhNTJmLCAweGU0OTc5ZTNiLCAweDgxYmE4MWNjLAorCTB4ZjNhMTIzZGUsIDB4YTc3NmU3MzksIDB4NGZiZDQxNDcsIDB4NWY0ODhiZDAsIDB4YmNmZTI2Y2UsIDB4NjczZmU2NDcsCisJMHg3YzlmM2M4YSwgMHgyNGYzYTYxZSwgMHgzYmZhM2UyMSwgMHhmN2MyNGU1ZiwgMHhiYzE5MzcxMCwgMHhmN2ZjYjk0YiwKKwkweDY2ZGM5M2E2LCAweDZmY2M3NGRlLCAweDRlNzgyZjNhLCAweGFkZjFiZTYyLCAweDk4YTUyOTZkLCAweGVkNWU3ZjZmLAorCTB4YjNlYjA2NzksIDB4NWQ3OGQyZGIsIDB4MGE2OTM5NjgsIDB4OTNkMjNlN2MsIDB4YjdjOGY5ODQsIDB4NjI5NmE1YjYsCisJMHg5MWY5ZjIzZSwgMHg1OTQ0Y2YyZCwgMHg5N2VhZWEwMiwgMHhjZDczZTI0ZSwgMHg5OGE1Njk4MywgMHhlYjViM2M5ZiwKKwkweDc0ODc1NjNlLCAweDVmNGU3YmYzLCAweDRlMDc3ZGZhLCAweGRhYWE3YzIzLCAweDdkM2VmZGI5LCAweDJmMGI4MWRmLAorCTB4NjAzZTdlYTEsIDB4NzU4MmJjYTQsIDB4ZGYwOTkyMTMsIDB4NmVjZmVkZjUsIDB4NmJlYjdhNDYsIDB4NmMzZjEzNTEsCisJMHg5OWZmN2U2YSwgMHgyZDNmNTBkZiwgMHg2YjY2NTk4NSwgMHhjOTBjNTYzZCwgMHhiYTFkYjQ5NCwgMHgzYjM1ZjcxYiwKKwkweGQ2MjVmM2RjLCAweDg5YmM0ZjE3LCAweDA0N2IzMWY2LCAweDEzYTVlYmU3LCAweDRmOTE0YTczLCAweGZiZWMwZWZiLAorCTB4ZDliM2VhMDUsIDB4ZTJkODYwOTEsIDB4MTNkMDVlN2UsIDB4OGZmNzJhN2UsIDB4NDBiOGMwMmIsIDB4MGNiYmIxOWYsCisJMHg5ZGZlYWZlNywgMHhlYzFmZTc5NiwgMHg3MThlOWI4ZiwgMHhjMDljZmY4MiwgMHg2ZTJhMzFmMywgMHhmYTg0OTJkOCwKKwkweGY5ZTU3YzU2LCAweGY4YzFiZmJkLCAweDc0ZjRlZmU2LCAweGNkMTM1M2RmLCAweGE5NGFiZGVkLCAweGUxMzk3ZjMxLAorCTB4Y2M1ZWQ3NmYsIDB4NWU3YmU5NWIsIDB4MTVhZmY3NGYsIDB4ZTJiMzkzMTgsIDB4Mjk2M2FjN2IsIDB4M2ZlYWZmM2UsCisJMHg3ODg2NWVmZiwgMHhlZTc2OTQyOCwgMHg3NzJmZjZjNSwgMHg0Mzg0NDVlYiwgMHg3OTE2YzY4ZiwgMHg4ZjYxZjIzMywKKwkweDBhY2VmYzlhLCAweDNiZDE1ZWI5LCAweGRjMjdlZjgyLCAweDhiZjg0NDU3LCAweGZhODQ5MmQ5LCAweGFmYzQ3MmI2LAorCTB4Y2Y3ZGMwZWUsIDB4ODMzY2I2OTYsIDB4NTY3YjBmN2UsIDB4NjcwZTc3NGIsIDB4YzFiODA3OWYsIDB4ZDQ3YmIzYjgsCisJMHhmYjAzNDk5OCwgMHg1ZTkwYWEzMCwgMHhjYTViMGJjZSwgMHhmN2Y5YzQ5ZSwgMHhmNWU3N2VmMCwgMHhhZTllMDg1YiwKKwkweDVjMzNkNzNkLCAweGQ0MzFmYTBmLCAweGFkODVlN2M3LCAweGY3NjdlZDQxLCAweDdlODU5YjNjLCAweGNkZGZiOWU5LAorCTB4YTE1NGZmMjYsIDB4MmE1Zjg1NzMsIDB4ZjQ4MzZiNzcsIDB4NTg4MjQ5MjIsIDB4M2ZjYTViOGMsIDB4MDIxOThiOTMsCisJMHgwZWU3NTllMiwgMHg5MjdiZThlZSwgMHg2YjlmYzdmOSwgMHgwMDM1N2I1NiwgMHg1YjJkMGFhMywgMHgwYWNkZjk4YiwKKwkweGRlMjY1NDNmLCAweGFiZTc4YzVhLCAweGQxZDMxYjE0LCAweGY1YzhhOTdlLCAweDljNWYyMTk1LCAweDNjNWQzM2Q1LAorCTB4ZDY1YjdiZjQsIDB4NmJhZDk1NWIsIDB4N2MxZGEwZTYsIDB4NDVmY2ZkYTUsIDB4Yzk1ZjQ3OTYsIDB4OWI1NWY4N2MsCisJMHhkZjc4MWRkZSwgMHhiNWZlNWExOCwgMHhhODRmOTk4ZSwgMHhiNTg1ZjVmYywgMHg5NWU1YjI1YSwgMHg3OGQ2ZGVmOSwKKwkweDU1YWZlODFjLCAweDcxZjk3MzQ3LCAweDgzMzdmYTEyLCAweGFjOTNmYjFjLCAweDBhYWQxNmVmLCAweDA0ZWVmZmVlLAorCTB4YWQ1OTRmOWUsIDB4ZmVhM2E1ZjEsIDB4N2I3ZmU2NTMsIDB4ODdkYjg5ODIsIDB4Y2EzYTVmMmEsIDB4YjM3MWQwYWIsCisJMHhiY2RlNTkyNSwgMHhhOWJjOTAyMCwgMHhkMTRlMTU2YywgMHhkMjA4MjRmYiwgMHgyYjNjM2Y1OCwgMHhlNjM3MmU3NSwKKwkweDg3ODcwZDEzLCAweDBmMTk3Y2Y4LCAweDcwZjFlNjEyLCAweGQ2NmNhYWJlLCAweDRmMzBmNGRiLCAweDAyMmY5ODU1LAorCTB4ZDE4NzI1ZWQsIDB4NTA3NjgxMTcsIDB4NmIxMjJiZGYsIDB4YTMxN2QxOTIsIDB4NWZlMjlmY2MsIDB4NTY1Mzg5NGYsCisJMHhmZDM2ZDQ3OCwgMHg3MWMxZWI3MCwgMHg4NjVlNGZkMCwgMHg1NjI4MDM3ZiwgMHg1MzdjZTQ0ZiwgMHhlYjRlMTZkZSwKKwkweDFmMmY5MzMxLCAweDY3N2NiNmU5LCAweGE3M2MzOGYwLCAweGZiMWY4MDI5LCAweDA2YzU3NmRhLCAweGY3MGNlYmZhLAorCTB4YTc1MWY3NGQsIDB4ZmZmYTZmODgsIDB4MDdiZDMxZjksIDB4YjViMjI5NWUsIDB4NGU3OTRmNzgsIDB4NDA4M2VmZTAsCisJMHgzOTA3ZGU5ZCwgMHg1Njc3ZGYyNywgMHg0MzA4NmQ3ZSwgMHg5NWY3MzlmYSwgMHg0ZmI4Zjg4MywgMHg3YjljOTFmMCwKKwkweDcyNDZjZGIxLCAweDIzZWQ0ZmFjLCAweDYyNmJiNzM5LCAweGY5NDdhZjExLCAweGJkNmU1MGNhLCAweDI0YTdmMTM4LAorCTB4N2MxMmZhM2YsIDB4ZDI5ZWY4NjUsIDB4MmY4ZWE1NjYsIDB4ZDAxZDgxY2MsIDB4ZTQ5MGI2ZDEsIDB4ZTc4OTZjYzksCisJMHg2YTVkYjA1MSwgMHg3MTEzOGYxMywgMHhlMTkzMmY3OCwgMHhkZTg2ZDhjNCwgMHhkNDQzZjIzYSwgMHgzYTk3YjQ2NiwKKwkweDQyZjcyYTI3LCAweDI1ZjlmZjFhLCAweDMxZjUzZjNmLCAweGU0NTZiZWYzLCAweGM1MDM3MmNmLCAweDZhYmVjMDdkLAorCTB4YzBlZDA5N2UsIDB4OGMxNmIxMDUsIDB4NGRjMjg3YTcsIDB4ODk4YzVmYjksIDB4ZTIyOTY2ZmUsIDB4N2RhMzFkZTksCisJMHhiYzNjYzRlYywgMHg5ZjkxZjRjZiwgMHhmNjRlZDQwMSwgMHg1YTZiZjU3YywgMHhkNWZiMzdmMiwgMHg3ZTUxN2IwMywKKwkweDcxZjY4ZGI5LCAweDBlOWUwMTEzLCAweDU0N2FmNzRkLCAweGJlZDQxNzcxLCAweDY3ZWQzNDJlLCAweDFjOTFiZDIxLAorCTB4OTdkNmY0ZTEsIDB4MDdiZjhiYjksIDB4NGU0ZmRmMjIsIDB4ZmEwMGYxOTIsIDB4N2QyMjM1OGMsIDB4ODdjZjFjMDgsCisJMHg0MDlmZjZkYiwgMHg5ZGQ3ZDM3OSwgMHg5NDNhNzI0YSwgMHgzZGI2Y2U5ZiwgMHhlMzcyODExNiwgMHhhZWVmZDA0MywKKwkweDg3YzA3ODgwLCAweDdjYTU5ZjhiLCAweDA3OThmOTgwLCAweDZiM2RlNTAyLCAweGY4MzdjZjgzLCAweDJmYzk4ZmVkLAorCTB4ZGEwMzliNjQsIDB4ODIxYjFlOTEsIDB4NDE3MGExZWIsIDB4ZjEwNmY0YmEsIDB4N2RmNjhiODEsIDB4YzAxYmYyM2YsCisJMHg3NzdhNmFhNywgMHhhODYxYzIzNSwgMHg1MmVhMTczZSwgMHg0ODUwZmQ0MCwgMHgyYjNmYTQzZCwgMHhmZGMzZjZlMSwKKwkweGViY2QxODEzLCAweDI1ZWRlZDE4LCAweGNmMWY3ZTNmLCAweGJkMDdhZGVmLCAweGUxMDNmNTQ2LCAweGVlMmQzZjc0LAorCTB4YzMxNWJkMDMsIDB4OGJlYTE2ZjUsIDB4OGE2ZTg4YWEsIDB4ZDAxZGY1NWYsIDB4ODNjYWJkZDIsIDB4ZTEyNTlmZWQsCisJMHgyOTFlODFmOSwgMHhmZWQ1NTM0ZSwgMHhmN2ZhMmM3MiwgMHg2OTk4MjZlYiwgMHhiMThmZDA3ZSwgMHhhMDczMTc5NCwKKwkweDExZmQxNjNkLCAweDdhMjFkZGE1LCAweDBjZjdlNWQyLCAweDI4N2U1MGIyLCAweDliYzk0ZWVkLCAweDQyZTU3OTRlLAorCTB4NWYzZTE2NzcsIDB4ODcxOWNiMjcsIDB4ZWIwOTc1MDgsIDB4MTBlMWNlOGMsIDB4NzZiM2RmMzgsIDB4Mjg3Y2U0ODksCisJMHhmNGM5NTZkZSwgMHg4YjIxZjIwYSwgMHhlMTVlMzlmMiwgMHgxZTQ1MDNmMSwgMHhlNTcyYzg1NCwgMHg3MjY3YjYxMCwKKwkweGY3MjkzN2ZlLCAweDg0Y2Y3ODUyLCAweDljOGMzZjdjLCAweDIzODE1YWY4LCAweGNlZjhhNWFiLCAweGJjY2QxM2ZkLAorCTB4NzlhNzhmMmUsIDB4ZTc4OWZjNzksIDB4M2U3YWJkZWQsIDB4YzcxMzI1MmIsIDB4NDVmNzk1OTksIDB4ZDUyOGYyZmQsCisJMHgwZTUwNWYyZiwgMHg3ODFjOTNjNCwgMHhlNzBiMWQ1MCwgMHhiMDQ2N2NhYSwgMHg4YTkwYzNkNCwgMHhkMDQ1MzVkMiwKKwkweDJkNTMyZDlkLCAweDFhYjhhMjJmLCAweDJlMWFlN2U2LCAweDFkMjg1N2RmLCAweGY4ZTQ0ZTQ1LCAweDFmYjkxNGFkLAorCTB4YTA1N2I5NWUsIDB4NmE3M2E1ZmIsIDB4ZjIwNzZmN2UsIDB4NTgwZmRlODYsIDB4MDhhNmIwNTYsIDB4MThiZWVmZjksCisJMHg1ZmQwMjZhNywgMHg0YmZjZDZiZSwgMHhjYmViODIxYiwgMHhjNTE0ZDc2YSwgMHg5NWU3YzMwZCwgMHg4ZDc2YjZhYiwKKwkweDU3Y2Y5NzY0LCAweDhhMmM2ZjYxLCAweGFlZGU1ZjM1LCAweDVlOWNmYmVjLCAweGY1NzRlN2Q5LCAweGNjNzg0MGM4LAorCTB4MTIzNDUzNWYsIDB4N2ZiYTY1Y2EsIDB4ZGNmYzFlMTcsIDB4NWViNWRhZTcsIDB4NWQyZDU3Y2EsIDB4YjdjNGY3NDMsCisJMHg4YTBkYWE1YywgMHhiZTZiNWViMywgMHg3YmE2ZTYwYSwgMHgzZmVkMmI5MCwgMHhkZTA4NzRiNCwgMHgzMTJiOGM1ZSwKKwkweGM0M2RhZmUwLCAweDAxMzdjMDY3LCAweGY0Y2JjNWViLCAweDI4OWYxNDNhLCAweGZkMDYzYzVmLCAweDNjNWY2NjUzLAorCTB4MTEzZTMwMjYsIDB4MzM5YmUyNWEsIDB4Yjg4YWU1MjIsIDB4MmMzZTA0YTgsIDB4MGYwMzBjYjMsIDB4ODlkMWZmYTUsCisJMHgzZjFhY2UzYywgMHhhOGYxZDM5MSwgMHg1ZTNiNTVkOSwgMHhlOWQ3MTQ2MiwgMHhhNTdiZjk0MSwgMHgyMmZlNGNmNywKKwkweGJmMDdlZmVmLCAweDljMjMzMjY3LCAweDliZDRlYmY3LCAweGRmZDNmZTMwLCAweDg3YzUwZGY5LCAweGU2MTlkN2ZiLAorCTB4MDMwNzdiZjMsIDB4NWRlNzgwNGIsIDB4MDI5YmUzZjEsIDB4MjZhYmMwZTMsIDB4ZGMyNDNiNzEsIDB4OWE5ZGVkY2EsCisJMHhlM2Q1ZjUwYywgMHhhMWM2OTk0YiwgMHgxYmQ5MTJmOCwgMHhkZjc0ZTE5OSwgMHgwNWY2ZDdkMiwgMHg4ZWZlYjdlOSwKKwkweDhiZGUxMzNjLCAweDBkYmI3NWY0LCAweGZmMzU2ZmM4LCAweGE4YjE3ZmZjLCAweDNlM2FmYjg3LCAweGJlYjRiY2E1LAorCTB4N2NhMzNmNmYsIDB4ZGU3MjhkYjUsIDB4MzkzNmExZTAsIDB4NmNkYmFiZGYsIDB4ZTJmZWY2YzQsIDB4YmY2MTE3YmYsCisJMHg4ZmU5NzI0ZCwgMHg5OGY4ZjAyZiwgMHg4M2YxMmE1MiwgMHgzYmY5ZmYwMCwgMHg0YzdiNTNkNCwgMHg1NGM1MWYxYiwKKwkweDJkYjBjYTk5LCAweDdmYzBiZjI0LCAweGUxYmQ0NjhlLCAweGUzOTgyYjhmLCAweDA0YzM4Yjg2LCAweDU0ZDIxNWM2LAorCTB4MjU4MGFlM2MsIDB4ZDJkMjE1YzYsIDB4ZWIwMTVjNzgsIDB4MTJjMDU3MTgsIDB4OGVkODBhZTMsIDB4NjNhYzA1NzEsCisJMHgxOGViMDE1YywgMHhjNjNhYzA1NywgMHhiOGM0YjAxNSwgMHgyOTdmYjYwMiwgMHgwZmQxZTdiZiwgMHgzZGM3OGI4MiwKKwkweDU3ZjcyNDBkLCAweGMwMzM3ZTYyLCAweGJmMjc2NTZmLCAweDQ3Yjk1YWJmLCAweDdjNjE3YmEyLCAweGRmZjUwM2NmLAorCTB4YWQzYjc5NjUsIDB4Njc4ZWRlNzIsIDB4ZDYwN2RkMmIsIDB4ODgyYzkwMWMsIDB4YzQxZjdjMjIsIDB4M2JmOThlOTUsCisJMHgxZTMxNDcwMywgMHg1ODIyZDM1NCwgMHg3ZGIxOThkNiwgMHg2MzYzZWQzZSwgMHhhNTA3ZGU0NywgMHg2ZDQ3YmVkOCwKKwkweDRmNDRjZDExLCAweDgyOGQ5ZjFjLCAweGQ1N2M4ZjViLCAweDU3ZTI4N2IxLCAweDk0OWQ3MTA1LCAweDJjZDM1ZmVmLAorCTB4Y2ViYjhjMzAsIDB4ZDkzZjcyZDMsIDB4MGU2YjQxMjksIDB4MWQ5MmFiZGQsIDB4OTM3NmQ0ZWQsIDB4OWNmNTUyZmYsCisJMHhlZjdjMGU2MCwgMHg0NWUyNjZiYiwgMHg3ZGNhMTM5MiwgMHg4OGZlNTJmNSwgMHhmMzdhM2QzOSwgMHg2YjNkMjA5MiwKKwkweGY4NTc3OWUzLCAweDI5YzdlYzI3LCAweDFkOTM3N2U3LCAweDJkMTc2MDEyLCAweDZjNmM3YmM1LCAweGY3YTViZTk3LAorCTB4ZTBlMDljNGQsIDB4OWRhZTEwOGUsIDB4ZDFkOTU1NzcsIDB4YjVmMzFlYjIsIDB4NTVmZTY4N2UsIDB4ZGVmOTI0ZTEsCisJMHg0N2JmOWIzYSwgMHg5MmY4ZmM1MiwgMHhiZDYwMDc3ZCwgMHhiMjVhMmRjMSwgMHg2MDlmNmU1MywgMHgxZTUyNmRiZiwKKwkweDI4ZDgxOWU2LCAweDUzYjQ3MmVlLCAweDI3ZDY3ZTRmLCAweDhhMGZhZjViLCAweGQ3NGExNGJiLCAweDg1NjNkYzUxLAorCTB4N2RmZDIwNWEsIDB4M2I5ZjZhYzQsIDB4NDY3MmU4MDksIDB4NmYxNGJkZjEsIDB4MjQ2ZjExOTksIDB4ZjBlODU2M2UsCisJMHg0ZmM5NmI0OSwgMHhlMzE1ZGU3MCwgMHgwYTk4NzdmOSwgMHgzNGU3ZWNiNSwgMHhhNWNmOWM5ZiwgMHg1ZWIwYTllMCwKKwkweDJjZjdlMzcwLCAweGJkMGIzMzE2LCAweGMwMDhiMDNmLCAweGU1NTE3MTg3LCAweDE4OGIxZmZiLCAweGU4NTBhZmNmLAorCTB4ODE1NmM1NmEsIDB4YmNiZThhZTgsIDB4ODRiZGYwMTAsIDB4MTAzZGY4NDUsIDB4NmFmNzdmZDAsIDB4Mjg5YmZkYjksCisJMHhjNGYyN2JmMiwgMHhlMjhmM2M0ZCwgMHhmY2E3NjYzZSwgMHg3ZDQ4NjU5MSwgMHhkN2Q3ZTkxMiwgMHgwZjZlZDA3YywKKwkweGRiODkyZWJmLCAweDljMzhlNmY3LCAweDM1NzFmMTdmLCAweGM2MTcwN2U1LCAweDI3NmU5ZWRkLCAweGY5NDA1ZjNkLAorCTB4NmVmNzgyMTMsIDB4YWYxYmZiZTksIDB4ZjM4MzNmMjYsIDB4YjlhYThlMjcsIDB4OTI3ODAxZGMsIDB4ZjQ4NWQ1OWYsCisJMHgzYjFlZjE0YSwgMHhjYWViYzc5NSwgMHhiZjIyOWNhOSwgMHg1ZWZhMTYxZiwgMHhjYmU3N2Y0MywgMHhiMGJlMzgyZCwKKwkweGY4NDE2MGM2LCAweGMwM2RmMTVmLCAweGZmYmZhYmIwLCAweGViZjM5NGU2LCAweDVjOWVjNTEyLCAweDZiZTNjMjMzLAorCTB4NTFlMTA1ODMsIDB4ZWY0OWQ3MTgsIDB4ZjNjYWE1ODksIDB4YjI1YjljM2YsIDB4OGI2OWYxMDksIDB4MWY1YzJlNjAsCisJMHgwMGI2NjllZiwgMHg0MGYwOGI3YywgMHgzZGQxYzYwMiwgMHg2NmNmN2MzNiwgMHg1MTMwNTNhMCwgMHg3MjY1ZjUzZSwKKwkweGNjM2FlYjc0LCAweDEzNDlhOTUzLCAweDJkYWYxODRjLCAweDE4NTJkYjBhLCAweGE1MTdmMzBiLCAweDc2NzdkMzI0LAorCTB4MWM3OGRhNmEsIDB4NGU0YTBmYjYsIDB4OTJkYzUzMDcsIDB4NjJhYWM3YzAsIDB4ZjFjZjdlMzEsIDB4M2ZiNWNiZTgsCisJMHhkZmNmMjkzZCwgMHhiM2U2NWIzZSwgMHg3ODJmOGVmZSwgMHhlM2I1ZjExZSwgMHhmYmU5YmJiNCwgMHhlZjRmNGMxYywKKwkweGY2MGZkM2FmLCAweGQxYzZmYjM1LCAweGU4NTVhZjE0LCAweGFlMzliMDY4LCAweDQ1YThlOTA5LCAweGE1YTUxM2Q2LAorCTB4OGVkMWE5ZWYsIDB4MzdiM2NjNjgsIDB4OTZjYTFjMjMsIDB4NGIxNzVjNWMsIDB4NGUzZTFjZTcsIDB4ODdkZmU0YTYsCisJMHhlNTAyYzljNiwgMHhkZTQ2ZmZlZCwgMHg1YWJhODlmZCwgMHg1YmFkZGYyYSwgMHg5ZDc3NjU0NSwgMHhlODA3OWU4YiwKKwkweGJmMDgyMzhiLCAweDdkNmYxMDFmLCAweGYxMzBkMjdiLCAweDQ3MzNhNjU2LCAweGJlMDViZTkyLCAweDkwZWRmMWU3LAorCTB4YmJmMDJhZjgsIDB4MzNlZmMwMTgsIDB4ZDllZWEyM2EsIDB4ODM0OGY2ODAsIDB4Y2RmNzgyYzYsIDB4ZDJiY2ZmOTgsCisJMHhmZGUxZjI0MCwgMHg1OWM2YzM0OSwgMHgyODE5ZjgxNSwgMHhmNGM4M2IyZSwgMHhlOTg3ODgzOSwgMHgxMTJhYTkxOSwKKwkweDkyNmRmZjllLCAweDQ0ZTcxNDEwLCAweDIyNzNjMWJlLCAweDdjODk2MGRmLCAweGY5Zjk1MmEzLCAweGEzMGQ2OWU2LAorCTB4N2RhMTk0ZWYsIDB4NDBmYjIyZTAsIDB4YmY1ZGY4NGYsIDB4ZDQwYWU0MDYsIDB4MjBhNjY1ZWYsIDB4NDQyMTcyYjksCisJMHhmMzIzODBhZSwgMHhhYzVmN2EzMywgMHgwOTM2Y2I0MywgMHhlOWNmZmNmZSwgMHgxOWNhNWM1MCwgMHhiODc4Y2U0NiwKKwkweGU2MWQxOTljLCAweGIzYmU5ZTc5LCAweGY5NDYxZDUwLCAweDQ0ZWZjMGM1LCAweGYyMzc0NzY3LCAweGFjMjViZGJjLAorCTB4NDYxZGQ2ODQsIDB4M2U3YmQwZGUsIDB4MzgxODhlZjcsIDB4YmZmNDE0ZjksIDB4ZDkwMzYxZjcsIDB4OTYxM2ViMzksCisJMHhlNDc3ZmZlNiwgMHg3MTI3OWZjZCwgMHhkZjgxM2M3OCwgMHhlZDVkNTA3MywgMHgwNTliMGU3YiwgMHhiMTVkOGZiYywKKwkweGJlMjM2NTkwLCAweGM0MzllZjk1LCAweDdiZjIxOGMxLCAweDM5ZWZmNWZmLCAweDEyM2M5ODhjLCAweDBhZTBlN2JmLAorCTB4ZGM0MzllZmEsIDB4MzBlN2JlMTUsIDB4NjE3MWIyNmEsIDB4NDYxY2Y3ZTAsIDB4MzBiMTFlNGQsIDB4YzYwZTdiZjgsCisJMHhiMjlkZjg4NSwgMHgzOWVmYzFmZiwgMHhiYmNlNGZhNCwgMHgzNzBlN2JmYywgMHhhMGZmMzY0ZSwgMHgzZDgwMzllZiwKKwkweDRmZTM4OTliLCAweDYzYzZkOGU0LCAweDNiOWYyODk5LCAweGUzZTVmZGY0LCAweDk3NjQzZGYyLCAweGIyYzUyZjY4LAorCTB4YTJhNWMyMjgsIDB4YzU2ZGQxNzYsIDB4NzNkMTZkZjIsIDB4NWYwM2I2M2YsIDB4MTU3ODQ0NGMsIDB4MDM3ZDk2M2QsCisJMHg1MTI1OTc3ZSwgMHhmMmJjYTFlYiwgMHg0OWI2YWQyNywgMHhiOTZiZmYzOCwgMHgzY2Y4YzliNiwgMHgyZjVmZGUzNCwKKwkweDczZjYwZjlmLCAweGNkMGJmNjBiLCAweGUyZTg1MzFmLCAweDBlNWNjOWFlLCAweGE5Y2I5M2NkLCAweGM3YmZjM2Y1LAorCTB4YmYzMjZmM2YsIDB4YmVkNmJlNGYsIDB4ZTA3N2JmNjEsIDB4ZDlmZWNhN2EsIDB4ZGM1NmM1OTYsIDB4NGVmN2VjMGYsCisJMHhiN2VjMjdkYywgMHg4ODY2NGIwNCwgMHhmODBmN2EwZSwgMHhjOTc1N2E3MiwgMHgyZTc0NjJmYiwgMHgzZmIzOGY5MCwKKwkweDk1MjhmNmUxLCAweDE0NzcyYWU5LCAweDFlYTMwZGRhLCAweDdlZTE0NzcwLCAweGU4MGUzNTQ3LCAweGRmOTA3ZGYxLAorCTB4NjhmNDA2YmEsIDB4ZjU3NmZjM2YsIDB4N2ZkYjFlODAsIDB4ZGFmOWUzNmIsIDB4OWY2ZmYzYTEsIDB4ZjQ5MWZkY2MsCisJMHg3ZTM0MDNhOSwgMHg0ZGRkZmMwYywgMHgxNDQwYzFmZSwgMHhlNWU5NmRkYSwgMHgxNGFlMzQ0NywgMHhmNjZkNGY3YSwKKwkweDkzNzY0MTI3LCAweDhjN2JmODk5LCAweDAxZTYzNmRjLCAweDhjM2QyMTkxLCAweDFlNzhjMWQ5LCAweGU5MGM0MTYzLAorCTB4ZWYxZDRhYjksIDB4ZmRjMGY5NWEsIDB4MzhkMWQyMjIsIDB4ODAzYmVjMzcsIDB4YWVkZmFlZmUsIDB4YWY3ZTBjMWEsCisJMHhhYWUzNGJkNywgMHg1ZWMwMjVlNCwgMHg2NGVlN2EwYiwgMHg5NDc0YmYzYywgMHg1ZWQwOGYyYywgMHgzOWQ5ZWZjNCwKKwkweDc3ZDA4ZmNiLCAweDBiOGVjMGE2LCAweDc5YmU4Zjk5LCAweDU5NGY5NDMwLCAweGU2YmZiM2FkLCAweDYyYmU1MzMzLAorCTB4NzdhNWJmNTAsIDB4ZmEzZDY2ZmYsIDB4NWJhNWU1YjUsIDB4MmYxN2U0MzUsIDB4YTU4ZjU5NjksIDB4MjY5ZWYxYzMsCisJMHgxOTdkOTE4ZSwgMHhjYmVjMWZkNCwgMHhmYjY1ZmFhMCwgMHhmNTQ3ZDkwYywgMHhjN2Q3MTdmZCwgMHhkMDJlYjMwZCwKKwkweDEzYTQ1NmMxLCAweGFhOGUwZTg1LCAweDRmZDBlMzNkLCAweGIzMGNlYTNkLCAweDNjMWRmN2YwLCAweDI2OWE1ZGY0LAorCTB4NWRmNGJkZjksIDB4Y2FkZDM5ZmYsIDB4NWQzOTY1ZjMsIDB4M2YxZGY4YzAsIDB4YTllYThlOGMsIDB4YWYxZGYyYmYsCisJMHgxYzhhOTU2YiwgMHg4ZGNlZmExYywgMHg1ZTI4Yjk4NiwgMHg3MjQ4Y2IzOSwgMHhmZmY2NDZhZSwgMHhjODk4OTdhYSwKKwkweGJhZjg1MTFlLCAweGI1MzllNTVhLCAweDE4YzVmYjFlLCAweDhhOWJmZTc5LCAweDdhYWJmN2QxLCAweGNmOTQ1MWM0LAorCTB4Y2ZhYzNmNGQsIDB4YWNmYmE1NGEsIDB4MTc4ZjdhZDgsIDB4NWRiODFkZTcsIDB4MTViOWVmYTAsIDB4NWFiOTczODQsCisJMHg5ZTM4OTYyOCwgMHg0NDQ3ZTc4NSwgMHhhNzgxNWRmZSwgMHg5ODQ4N2U1MSwgMHgzN2JmYzE0NywgMHhiZjk3MjUzMCwKKwkweGY4Y2YxMDNmLCAweGNhOThkYjc3LCAweDM2OWRmMjFjLCAweGVkN2ExZTM5LCAweGVmZjFiNGVmLCAweGY3ZTdjZDkyLAorCTB4MjU1MTBkNzIsIDB4ZjlmMWNiYTUsIDB4ZjllODFiODIsIDB4MWY1MmVmYzEsIDB4MmFmZWUyYjEsIDB4NzFiNGVmOTQsCisJMHg0ZTYxYmY3YiwgMHg1NTdmM2QwNiwgMHgzZDQxYWYzMCwgMHg1ZDgwN2FlMSwgMHg3YTZkM2JlOSwgMHhlZjgwZmJlNCwKKwkweGY4ODdiZGIzLCAweGQ5ZjdkNmJhLCAweDFjMGZlZjk0LCAweDIzYzM3MDVkLCAweGJkMWMzOTdiLCAweDMzNTVlZjc4LAorCTB4YWZlNDE4Y2IsIDB4M2MzMTE3ZmYsIDB4NTZjMGQyOWUsIDB4MDAwMDU2YzAKIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgdHNlbV9pbnRfdGFibGVfZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDMzYjNhZjhhLCAweDIxNzE2ODMwLAotCTB4OWYwMTQzZjgsIDB4Mzg2MDY2NjQsIDB4ODE2N2M0MGQsIDB4ODE4NTk3OTgsIDB4ODE4OTk3YzEsIDB4Nzg4OThmYzEsCi0JMHgxMGM1MzNmZCwgMHgwNjExNDE2YywgMHg1ZTIwM2IwNiwgMHhmMGMwYzQyZSwgMHhjZTIxMDQ0ZSwgMHgxMGMwY2UyOCwKLQkweDIwYzBjYTJkLCAweGFmZTEwYTJiLCAweDYyNjZkMjA0LCAweDQwZmY3MWQ0LCAweDRjMTk0NjYzLCAweDA4OTIwN2IxLAotCTB4NzkxNjEzMzYsIDB4MjY4Y2NjNjQsIDB4Y2E4NTIwZWYsIDB4N2ZhMDIxNjcsIDB4MjUxN2YxYTAsIDB4MjJhY2JlNTQsCi0JMHg4YTg0NmU4NCwgMHg5NzkzNDU3ZiwgMHg0MzJiY2E4MywgMHgwOTRkZjVmZCwgMHg1MDJhYjliYiwgMHgxYWEwMDA3OSwKLQkweDAzNjA1ZjgyLCAweDAwMDAwMzYwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1MWZiZmYwMCwgMHgwM2YwYzBjZiwgMHgzMzcwMjc4YSwgMHg0NWUzOWMzMCwKKwkweDgzODFlOWYwLCAweDVmZDMyOTE4LCAweDUwYzBjZWM2LCAweDQwNTVjNDAxLCAweDNmODgwYmJjLCAweDdjMzAzMmIxLAorCTB4ZmY1ZTI1NjYsIDB4ZGIwNDI5MzUsIDB4MjE4MTgyNDgsIDB4ODhkNzg4MWUsIDB4NDlhODMwMzEsIDB4YTQxZGM0MjIsCisJMHgwMzI2MTgxOSwgMHhiMTUwYTFmOSwgMHg1ZjNhNDA0NywgMHgwZjc3MzI4YSwgMHg4MGE2OWMxNiwgMHg4NzJhZTYyOSwKKwkweDkxNjNhNzYwLCAweDY4MTljNjQ3LCAweDUwZTU0YmYyLCAweGY0MDQ5OWY5LCAweGEyYmUzNDBmLCAweGEyZmZjYThlLAorCTB4YTAxM2ExMGEsIDB4ZTRkMTU3ZTIsIDB4M2JlNTQyYmYsIDB4YTZiYWZlYTAsIDB4NGVkY2RkOGUsIDB4YzM1ZGZkMzIsCisJMHhmYzAxYTEwMiwgMHg5ODQ3YjA5OSwgMHgwMDk4NDdiMAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB0c2VtX3ByYW1fZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweGQ1NTQ3ODBkLCAweDczM2VlOGI1LCAweDQ5OTk5Y2NlLAotCTB4MjEyNjRjY2UsIDB4NjEwMjEzMDksIDB4NDBhMDIwOTIsIDB4MjAwYzdlMTgsIDB4ZjdmMDlkNzgsIDB4ODAzYWE1NjgsCi0JMHgwNzUxNWE1NiwgMHg0M2YyMTA4MSwgMHhiZDFmNTIwMiwgMHgyNDI2NmJlZCwgMHgxYmQ1NjhjMSwgMHhhYjQ1YThmYSwKLQkweDY4YTkwMDc2LCAweDYyMzQ4ZWQxLCAweGE4MDc0MGE4LCAweDBkYjZhODVjLCAweGM3ZjQyYWQ2LCAweGM0MDVhZDFiLAotCTB4OTZhYTQ0OTAsIDB4NmJiOTRhYmUsIDB4ZTY0ZmJkYWQsIDB4NDAxOTkzOWMsIDB4NmY1ZmI3YmQsIDB4NmZkNjk3YmYsCi0JMHg2N2Q5Y2ZiMywgMHhkZmQ3YjVlZiwgMHhiNWVkNmI1ZSwgMHg4OTc2MjhmNywgMHhlYzY1MGVlNSwgMHhjNzVkZmUwMiwKLQkweDMxOTkwMmQ4LCAweGY0YTI3NTc2LCAweDBkMGViYmMxLCAweDA3ZjhhZGZlLCAweGNjZGQyODMyLCAweDI4NjJiMTJmLAotCTB4MmY2ZTJjZmQsIDB4ZmM3MDcyODEsIDB4ZDY1ZTk2MTgsIDB4ZjM3ZTE4YzksIDB4OTU5OTA1ZjEsIDB4MzI3MWU2MzIsCi0JMHhiMDk0MTdmMSwgMHhkYWYyZjVlZSwgMHg2ZDg3YjJiNywgMHhkNWIyODQyOCwgMHg2Y2M2NTNmNywgMHg2N2FhZWQ4YywKLQkweDQ0ZjY2MTgxLCAweGZmNTc4NzNiLCAweDkxYzE3ZTJlLCAweGZhNDg3MGNiLCAweDg3NzU2MGNiLCAweGJiODdjMTg3LAotCTB4YjZlMmU3YTQsIDB4OGVmNThjODksIDB4N2UyZDgxNjEsIDB4NWRkZTA3MTgsIDB4Y2ZmZDA1OWIsIDB4MzE2ZGVjNjEsCi0JMHg3MDQ2MDVlNiwgMHg4YTUwYjg1YywgMHg0YjgyMzFkZiwgMHhlNzNhZjhmYiwgMHgwZWU3Njg0MiwgMHgwMGM1NWZhZCwKLQkweDczMzRjZjVlLCAweGI5YTI2ZDdiLCAweGY1MGQxOGVlLCAweGE1ZmE4OTkxLCAweDZjYTYwM2RhLCAweDg4MWRlMDBjLAotCTB4ZWQ1YzAzZjAsIDB4ZDc5YTRlZjUsIDB4ODFiZGViOGYsIDB4YjYzMDU3NjEsIDB4ZjU0N2RlYTcsIDB4MmE3ZWY1N2QsCi0JMHhlOTIzZjVlMywgMHgwMGZhODFmOSwgMHhiMDU4NzNkNSwgMHhlYWM3ZjA5MCwgMHg2NmNhMmMzNiwgMHg4NTM2ZjFhYywKLQkweDc0MTJjN2RkLCAweDhjM2Q2NmY5LCAweGZlYTI0NTc3LCAweDIyMmNkMWE3LCAweGE0ZmVlNGMzLCAweDAwNDIzYmIwLAotCTB4MTMyYmMzNmIsIDB4YmNhMTNhMzIsIDB4N2Y0MWRiMWYsIDB4MjgwMThkMGYsIDB4M2ZkYTI2YzYsIDB4ZGNlNWY2YmMsCi0JMHhjYjE4MTM5OSwgMHhkYzkxZWFmYiwgMHhiZGUwMDM5OSwgMHg0NmM2MTZjNCwgMHhkMmFkNzhlMywgMHg5ZGYwMzFiYywKLQkweGRiZDFmYmNhLCAweGViNjMyNWViLCAweGVkOWEwZjg4LCAweDY1YWZkZmM5LCAweGYyY2YwMjEyLCAweDdlNjBhYzBlLAotCTB4MGY2YmY0MzcsIDB4MDcwMTNiZTcsIDB4MDRjNjQ0YjcsIDB4YjhjMzA2NWIsIDB4MTg2YmVjNDgsIDB4MTExYjMyZmIsCi0JMHgzNzBlMDA4OSwgMHg4Yzc5OTc2MSwgMHhmMzQyZDBlZCwgMHg1ZjFjYmJmMCwgMHg5MTIzMGE0OCwgMHgyOTljNDBjMywKLQkweDJjYWI2NThjLCAweDQ3MGE0YjFjLCAweDJiNzFjMTAzLCAweDRiMDczM2ZlLCAweDBmNGJkNTNmLCAweDdlZjU3MWYyLAotCTB4ZTcxMWIyZjQsIDB4Y2VlNGU1MDcsIDB4ZGUyYzViMzAsIDB4NzdmYmUxOTcsIDB4ZTg2MmQyNDIsIDB4ZTdjNWQ5YmYsCi0JMHg3MzYzMDJmMywgMHgxMjQ5YmM3MCwgMHgxMmI5NjEwYiwgMHgyZGZhMTI5OSwgMHgzMTI3MzJjNywgMHhlNWM2MGFlZSwKLQkweDYxNzNiYWUxLCAweDU0N2U4NDE2LCAweGM3ODU5ODVmLCAweGZjODM3ZWYwLCAweDZjOGNhNmZiLCAweDFiN2Y5YjlhLAotCTB4ZGE5NDQzZjEsIDB4NDc0ZGRiMWIsIDB4ODhiNmZjYjgsIDB4ZWRjNzAzM2QsIDB4MjNlZDg4M2QsIDB4ZjZjMzE2M2UsCi0JMHgzOWI2NjgyZiwgMHgzYjQ0YjQ1YiwgMHg2ZTQ5OWUxZCwgMHg5NjhiNjg1YiwgMHgxNmM4MmZlOCwgMHhlNWQzZmE5YiwKLQkweGJlNzI3NjRkLCAweDgxZGVmOWQzLCAweGRhOWM4MDlmLCAweGMyMjhmYmUxLCAweDM3MDU5ODNiLCAweGJkZWJjMTI3LAotCTB4MDdhNWJlNjIsIDB4M2MwNjQxNWQsIDB4YTM1NDJlYWQsIDB4YWZhOTI0MmUsIDB4MzllYjBjYjUsIDB4MDY0MDU5NGIsCi0JMHhlNWViNGUxYSwgMHgwNzAzYjhmMywgMHgzYmNjNDljOSwgMHgzN2MwMDNlNywgMHhmZWMwMWQ5NCwgMHgwOGUzZTYwYywKLQkweGRhMDNhOGIwLCAweDgyNmI3OWFiLCAweDFmNGY1MDY1LCAweDFiMDJkNWNjLCAweDM2NzI2MzFjLCAweGNkYzQ3M2M5LAotCTB4OTdhMWMzZmEsIDB4ZmMxM2M3ZGEsIDB4MDBkZjE3NDgsIDB4MDYwNGVmNWQsIDB4NDFkYmE4MzIsIDB4NzgwMjBjYTEsCi0JMHhhODNiOGYxYSwgMHhlNWRjOGZmZiwgMHhmZDMzYjE0MywgMHhmMWY1NTNiYiwgMHgzZTQxNGI3MSwgMHhhNjFmZDc0ZSwKLQkweDgzYmVhYmIyLCAweDYzZmFlZWNhLCAweDBmMWFhNjU0LCAweDI2YzZkMTI0LCAweDYwZGY4YzAzLCAweDVkY2EyNzQxLAotCTB4MDc1ZDEyYTEsIDB4ZmZlZTM3ZmQsIDB4MjE4ZmYzMmEsIDB4ODc4ODIzZjgsIDB4MmQxNmNkNzQsIDB4NGU2NjVlNDIsCi0JMHhmODE1Y2Q1OSwgMHhlMTJiN2M0NSwgMHg4ZTZlZjliYywgMHhiZGIzYzQ1ZiwgMHg4NjZkMDk1MCwgMHgyYWQ5Y2YzMiwKLQkweDc4NmQxYWFkLCAweGZjNDA3NDBlLCAweGI4N2MxZTk3LCAweDJlYTRmMTAxLCAweDg1NWNlMzY1LCAweDRmOWMyZjI4LAotCTB4OTdjODlmMTEsIDB4NWYzODFhYmIsIDB4Mjg0ZWZkNjIsIDB4MDI5NTM5YWYsIDB4ZWYxYzVkZWYsIDB4NTNhOWRhZGEsCi0JMHhjMDYwOTlkZiwgMHg1YzgyYzI5ZiwgMHgyOGJmMzlhZSwgMHg3OGM3N2ZmMCwgMHg3YjM0M2E4MCwgMHhiZGU4MjY0NSwKLQkweGJjMDc3ZmJjLCAweDllN2QyNjhlLCAweDkwNmI5NWMxLCAweDllMmFkZWExLCAweDMwZGRlYmFjLCAweGFiZDI3ZTIzLAotCTB4NTA3OWVkYzAsIDB4OTdjZmFjMWYsIDB4Zjg4OTdmZjksIDB4ZmEwNGRjZDgsIDB4ZDU3ZWViMDksIDB4MjFmYmMyYWYsCi0JMHg3MGUwZjVhMiwgMHhjYTU0NWNjNSwgMHgxZWU3Y2I1YiwgMHg2MmJjNjA5MiwgMHhhOGZkZTNmOSwgMHgyOWQ0ODdkZSwKLQkweGY0MWE3NzZmLCAweDYwNDJjMTY1LCAweDg2YzYyMmJjLCAweDJmM2YzNWFlLCAweDMwZWI5ODhjLCAweGYzMDQyZDgwLAotCTB4M2YzMTZlMmYsIDB4ZDlkY2NlM2YsIDB4MmUxOWQyMjcsIDB4ODA5MDZlNDgsIDB4YmQ1YWYzN2UsIDB4ODQ5YTQ1ZWMsCi0JMHhmNThkZGU5NSwgMHgwZGQ5YWUyYywgMHhmNDI3YTE3NSwgMHhkYzk5ZTRiYSwgMHhhZGY5ODExOSwgMHg5MDA1OTJiZSwKLQkweDQ0OTI2OWM2LCAweGVmYzU2Yzc4LCAweDE0MWU4ZjgwLCAweDdlOTZmZGU1LCAweGFjOTk1MmY0LCAweDAyZWY1MGQ5LAotCTB4ZjRjOTgzZGUsIDB4ZDY1NGJlNTgsIDB4NTZiYzc0OGIsIDB4ZmQ4YmRlOWEsIDB4ZTYzMTJiYTYsIDB4NTRiZjkwZDUsCi0JMHhmYjZiMTNlMiwgMHhmMWExNDkzNCwgMHhhMDhlOTRkMywgMHgxNGRlZWI4YywgMHhiNmFkZWViZSwgMHg5ZTUxYzZmNywKLQkweDAzZjk5NzU2LCAweDAyOGY1YzExLCAweDRjZGY5MjUxLCAweDVlNTBiMzU4LCAweDM2M2MwMTNmLCAweDkzNjNjMzg5LAotCTB4ZjUxODljNjgsIDB4ZGIyYmViMDMsIDB4YmMzOGUxMjIsIDB4ZmE1N2Q1ZGYsIDB4MGQ0YTQ0NTksIDB4MmQxOTFmZTcsCi0JMHgxNjk4ZWM2MiwgMHgzY2ZlYzRjZSwgMHg3MDljYTQ5MiwgMHg1OGQzZTgyNiwgMHhiMzZmZjQ1MSwgMHhjMzcyZWFhMSwKLQkweDc1MTNhYmZiLCAweDdjNzM5ZGRmLCAweDQzNzljN2M4LCAweDc3MmJmNGNkLCAweDdmMjAxNWQ2LCAweGIzNjI4NjU0LAotCTB4N2E0ZTdmOTEsIDB4MGVkZWJhN2UsIDB4ZjYwMmRlZjMsIDB4OWZmODAyODIsIDB4NjFlNTBjZTQsIDB4ZWE4YjM1M2YsCi0JMHhmMzBhYTM4NiwgMHhlMzAzYTJlMywgMHgxZWI3YjI2ZSwgMHgzOTgyNGIwNywgMHg1ZmY0ODg1OSwgMHgwMTc1Y2NjYiwKLQkweDY3ZGJkZTA1LCAweGYwM2I3MTJhLCAweDAxZjI3ZGE1LCAweGFjNWM1N2IyLCAweGM5YzdlYjhlLCAweDA3YjQzMjkxLAotCTB4ZWY4MzIzOWMsIDB4NDU1ZWYwY2EsIDB4ZGVlNzgwNzksIDB4NzVjMzJiNjAsIDB4YmNjYzM5YzQsIDB4OWIzYzgzY2UsCi0JMHhiOWI2NGFlYSwgMHg1Y2NmNGE5ZSwgMHhmOGNhNWNhYSwgMHg4NDA2OWVmYSwgMHhiMjY3ZmMyMiwgMHg5OTVmZTIyOCwKLQkweGY4NDEyODFjLCAweGYzZTZiYzFlLCAweGFhNjc4NDdlLCAweDg0YTVkN2M0LCAweGRlNzJlMmZlLCAweGJmYjVlZjQ3LAotCTB4MDAzNjFkYzgsIDB4Zjk3MmI3OWYsIDB4ZWU0YWZiNWYsIDB4OGY4ODA5YjAsIDB4NzM5NzlhNTYsIDB4MGI5MjZhYzYsCi0JMHg3MzIzZjExNSwgMHgxM2I5MGZmOSwgMHhmODc4ZWJkZiwgMHg5NjFiY2Y3YiwgMHhmNDk3OWEwNSwgMHg1MDI3ZjM5MywKLQkweDZmM2UzNjNmLCAweDlmOWVhM2Y3LCAweDdlM2RiY2YxLCAweDM2NmJkNDFkLCAweDZkZjdhNDRiLCAweDlmODQ1Y2ZiLAotCTB4M2Q3OTQ3ZWUsIDB4ZDg4MzU2ZWUsIDB4NTAxM2NjZmUsIDB4M2FkNTdjMDcsIDB4OGE5YzFlM2EsIDB4NjY1ZTdiZjgsCi0JMHgwYjNkMDg1YiwgMHg0ZWNmYTg2ZCwgMHgzYjY4ZjZlOCwgMHg3OGJiOTdhZiwgMHhmZWYzNjZiNSwgMHg4YWZiZjFkYiwKLQkweDdkNDMwNzc2LCAweGY5N2JiMzVjLCAweGJlYTE1MzBkLCAweDYxOWRiMGZjLCAweDBkNmQ5YTkzLCAweGFmYTgyMGVhLAotCTB4YWMzMTRhODgsIDB4ZjRlNzRjZjcsIDB4YTM5MmVjODksIDB4OGY3ZGEwZGIsIDB4NjZmNzIzYTcsIDB4MjcxZGQ3MGQsCi0JMHhiODAwOGZmMywgMHgzN2I5MWRkZCwgMHg0NjU3MWYwMSwgMHhkZjhkOWI5ZiwgMHgwMjkwZWU1NSwgMHhjNzk4MzE0MCwKLQkweGYwNzk0M2I2LCAweDUyNTNjZDVkLCAweDVjN2MwMWMwLCAweGY5OWQzZGI1LCAweDg5ZTVmNjBkLCAweDFkN2UzOTM2LAotCTB4OTNjYzE5Y2EsIDB4NTljYmJmNDEsIDB4NGZhNDZjZWIsIDB4YWEwZGI2Y2QsIDB4ZDM5ZjQwZGYsIDB4ZGY5OTIzZjUsCi0JMHgzY2Q3YTg5MSwgMHg3N2MwZTMwNSwgMHgwMjk1OWYyYiwgMHgzNjk1YzUzOCwgMHhlZjc1M2Y2ZSwgMHhhYWRjMmQ3NiwKLQkweGQ0MWFmY2UxLCAweGQ3OWM2ZWUxLCAweDViYjYyYTNkLCAweGNiYmM1ZDFlLCAweDM2Zjg0N2U1LCAweDdkZTFiM2FiLAotCTB4ZDU5YmEzZTUsIDB4YTg1ZTgzNzIsIDB4NjQwYTNlZGEsIDB4YTZkNzAwYzksIDB4MjRlMTgxZTIsIDB4MGYwMTIzN2EsCi0JMHg4OTUzYzEzMywgMHhlZGQ2ODY3YSwgMHhhNTc2OGFhOCwgMHgyZGFhN2NmZSwgMHg2YWIxZjg5MywgMHg1ZmVhNmNiYiwKLQkweGQ3ZTQ3YmE3LCAweGM4ODdlYzhjLCAweDU1ZTEzNzVlLCAweDJmNmFkYmE3LCAweGEwOGVlYmUzLCAweGEwYWY1OWRiLAotCTB4NmE1YmQyYTMsIDB4MWYyZjVmZWMsIDB4NTAzODNhNDQsIDB4ZmNhOTdiNWYsIDB4Y2E4ZmJkNTYsIDB4YTI3ZWY1OGQsCi0JMHhiZjg4NDNjZiwgMHhjNjRlZGMxMSwgMHg5N2Q3NjBlNywgMHg4MjdiMmYyMSwgMHhjM2VjMGJjYywgMHhjYjA2ZTZiMiwKLQkweDBhY2Y1MGVjLCAweGEyZWU3YWYxLCAweGM4YmZlNGIwLCAweGVjMTJmNWZjLCAweDA0ZTBjNWRlLCAweDdhZmRmYWMxLAotCTB4ZjYzYjAxNTAsIDB4OGFiYzM1MjEsIDB4YTZmYzYwMDUsIDB4MDRjZTA4ZmYsIDB4NTI4ZmY3N2IsIDB4NGFmYTg2MzgsCi0JMHhiODJiODViNiwgMHgyODdjYzVkYywgMHhmYWM1ZWI3NywgMHgxM2YyNWRiMywgMHhhOWU3ZDYxZSwgMHhiYTFmNmZhNCwKLQkweDJjYWI3NGFkLCAweDYzNjZiOTg5LCAweGY3ZmJmY2JkLCAweGJiM2Y1MjE1LCAweGZhMTUxZmE5LCAweDNmNzRiZTI5LAotCTB4MzY0ZmI3YjksIDB4N2I3YjkzZjUsIDB4MDFjZmRlODUsIDB4ZjJlZDI3ZWEsIDB4ZjZlODc5ZmEsIDB4ZGNmMGNjNmIsCi0JMHhmM2Y3YTk1ZSwgMHhiOWUzZjUzMiwgMHhkZWU1NzliYywgMHhjZjBjY2QzMSwgMHhjZmQ0ZDUxZCwgMHhkMjAxNDVjMCwKLQkweDNmY2ViMmI3LCAweGI0M2JkNjBjLCAweDhlNjQ3NzE3LCAweDUzNDFmYTM3LCAweGMwZGZkMzZkLCAweDUyMGRjNWY1LAotCTB4OGNhM2U0NjUsIDB4NzkyNjY5YzksIDB4OTk2NjBjY2EsIDB4MGNlNjAzZWEsIDB4MDljZmI1MzIsIDB4MGZkZTk5MTUsCi0JMHg4NTk1Nzg1YywgMHg4OWVmMzUyZiwgMHg0MDhlYTI1MSwgMHhmNjhiNDNhMSwgMHhmNDk1MjBmMSwgMHgyNzIwZDk0ZSwKLQkweDIwZjc3ZmMxLCAweGRkY2VmNDhkLCAweGUwNDc4NGQ3LCAweGEyYjA4ZTNhLCAweDFhYjc3MzdmLCAweGVhNGRlYjFlLAotCTB4Y2M0ODc0YzcsIDB4ODZkZmE1ODcsIDB4M2RmZGY1YTUsIDB4OWU5YzFlYzIsIDB4YjdmMGYxZmYsIDB4NWI1YWZiZTAsCi0JMHhhODRjZjBlZiwgMHhmYjJiNmJiZiwgMHhiY2Y5ZTIzMywgMHgzMjY5ZmZkMCwgMHg2OTc2YzNhYiwgMHhlZmZhNDYwZSwKLQkweGFkZDJjMjllLCAweDViNWUwMzExLCAweDQ4YmYwMDg2LCAweGVjNWI3ZTg5LCAweGEzZjIxZjYxLCAweDkwMWE5MzY0LAotCTB4NTEwZmQ3M2YsIDB4ZmEwNDFiMTksIDB4MWZkYjFkNzQsIDB4OWVlNzM1ODEsIDB4YzQzZWU1MjEsIDB4MmZmZDAzYmYsCi0JMHg4YzJhZjhlMywgMHg3N2M2OWEzZiwgMHhiNzdjNjBkOCwgMHg4ZWY4ZjkyZCwgMHhmMWE2YzlhMiwgMHhhNjE1MDU5ZCwKLQkweDhjMmE5ZGYxLCAweDY5OTFmMjBmLCAweDlkZjE4OTczLCAweGFkNjYxN2U0LCAweDhlZjhkMjczLCAweGZmMWEwYTgyLAotCTB4OTg1NTk1MWUsIDB4MWJlYjRmYzYsIDB4YzYwZGEwN2YsIDB4ZmVlMzYyMWQsIDB4MTdmOWJmNGEsIDB4N2Y5ZTYzNWQsCi0JMHhmZTc5YTU0MSwgMHhhMTdmOWYyYSwgMHg5ZjhjNTMyZCwgMHg1YTJmZjM0NiwgMHgyZmYzZTVlNywgMHg3N2YzZTRhOCwKLQkweGM2ZmI3ZWYwLCAweDdmZTFmNGY3LCAweDI2M2Y4ZTA0LCAweGUyOGVmOGM1LCAweDBmZjllNjY5LCAweGRmY2YzNmFkLAotCTB4NjcxZmM3YzEsIDB4NmJlMzEzY2IsIDB4NzVmOGZlMzQsIDB4YTFmZjNlM2UsIDB4ZWFiZTM0ZDUsIDB4OGY5MDA3MDgsCi0JMHhiYWI0ZmNkNCwgMHg4MzQzZGEyOCwgMHgyNDBkZmI0MSwgMHg3MmE0MTgxZCwgMHhiYjkzZjcyNCwgMHhlMzgyMjJhNCwKLQkweDc3Y2UzNGVlLCAweGJmMDFhNTFmLCAweGNhN2QwOTY5LCAweDllMjllYmEyLCAweDc0ZjA1MmIyLCAweDM1MzI4ZWQ1LAotCTB4MDdiYzVhM2MsIDB4MDA5OTdmN2IsIDB4NGNiYjY5NzUsIDB4M2EzNmNkN2MsIDB4YmMwMDU3YTIsIDB4ZjkzMmVkZGQsCi0JMHg1ZTM3NGIzYiwgMHgzZDY5OTUxYiwgMHgxODA4ZmVlNSwgMHhmZTdjNzE5MCwgMHhkOThmNmZjNywgMHhiNTk3OWM2MiwKLQkweDNmNmFkNjVjLCAweGFiOTA2OWQxLCAweDlkM2VmZDNlLCAweGY4MDNhYzhkLCAweDUzNWU0ODM2LCAweDY5ZTgwNGZkLAotCTB4MDZkZWE2NzQsIDB4NDllNThjN2QsIDB4ZjNjMDMzOGMsIDB4YjM4ZjQwNzcsIDB4N2ZmZGZkMTEsIDB4ZDFiNWVlZTgsCi0JMHgwYTJmYWYzMCwgMHgxYzI4NGZmOCwgMHg0OGQ2MjdkZiwgMHg0N2ZmYzQ1MSwgMHhhOGE5NTYxYiwgMHhhNmI1OTZjZiwKLQkweDA3ZDNkMWEzLCAweDUzYTBhZDQ3LCAweGQ5MDc2ZWVmLCAweDNmNGY4MDU1LCAweDEyMTZlN2UyLCAweGJmN2VjNjQ1LAotCTB4MjQ4NzBiZWYsIDB4NmY5NjdiYjAsIDB4NmVmYTYwMWEsIDB4ZmIzNjhiMTEsIDB4ZmI5MmZkYTAsIDB4YzJmMTBmMTcsCi0JMHhlODVkNmZmYywgMHgxZjkzMmYxOCwgMHg5MWI3Y2MxOCwgMHgxYjdjYjMxYywgMHhkYjBiNGVmOCwgMHhhMWYzZDgzNiwKLQkweGJiNDJjYjcyLCAweDUyZjk0ZmM5LCAweGI1YmY1Y2Q4LCAweGI2ZWY1Y2MyLCAweGNmMThlZDQ3LCAweGIxMjE1ZWVhLAotCTB4NmRlZmQwY2QsIDB4ZmY4Yjc2NzUsIDB4NjE1OWM3YzMsIDB4MDhmMTEyY2IsIDB4ODExN2RlM2UsIDB4ZThmMDc5ODYsCi0JMHhlM2M3MmMzNiwgMHhmNWQxMmY2MywgMHg1NmZmMmY3NiwgMHg2YmY2YTc4NywgMHg5MDU0NzA3NiwgMHhlODM5OWQ3ZSwKLQkweDBlNDhiMzQ3LCAweDJmNjE3N2Y5LCAweGRlMTViNzlmLCAweDYwY2VlZGRiLCAweGZkYjllMDA4LCAweGQzZTEzMmFiLAotCTB4YmVlNzdmMGEsIDB4ZWMwZGEwZjQsIDB4N2Y0ZGNlZDEsIDB4NmU3ZGEzYjIsIDB4ZmUxNThmOWQsIDB4ZTc1YWQ2M2IsCi0JMHg3ZDcxNTVlMywgMHgzZWIxMWM1OCwgMHg1YWVjOTg4ZiwgMHgyZjZkYWNiZCwgMHg4MThlZmFkYiwgMHg5ZjYyNmE5ZiwKLQkweGUxOGVmYWRiLCAweGYzZWRhYWJiLCAweGQxMTVmNTRjLCAweDJmZGE5OTJmLCAweGY0ZDhiNGRmLCAweDBhZWI1OTdlLAotCTB4MmQyNWZiZDMsIDB4YzVmNTRjYWIsIDB4ZGE5YWFmOTEsIDB4YzFiNmIxZGYsIDB4YmFiNmZlZjQsIDB4NmZlZjRkN2IsCi0JMHhhYTYwZDhhZCwgMHhiMGZjMjk3ZiwgMHgwYjJkZmRhOSwgMHg0YmRlOWIzNywgMHhlZDBjNTZmYiwgMHgxZTFhYmQyNCwKLQkweGViNzY4NzlhLCAweDU5ZjkwNzcxLCAweGYyZWJiZjNhLCAweDE2ZWMwYTcwLCAweGRkODM0ZjJjLCAweGNhMDM2NTgyLAotCTB4NmRiZmM4MjksIDB4Yjc2YjJmMzcsIDB4MzVlYTFlMmMsIDB4ZWQyNzYxZjgsIDB4NGYyODA1NzUsIDB4ZTJiN2JlNTYsCi0JMHhmMGRmY2FkMywgMHgxZDZjOWY5NywgMHg4YzZhY2JkMiwgMHgzZGJmNDE0MywgMHgyNDM5M2YxNiwgMHgxZjFlYTBmNCwKLQkweGRjYjk1NmFjLCAweDliY2NlZjU2LCAweGI1N2ZmZThlLCAweDk3NWUxZjFhLCAweDkzZWM0ZmM0LCAweGYzNDQ5OGU3LAotCTB4ZTdhNTY4NjAsIDB4NWI4MGRkMjAsIDB4ZGFhYjc4MGQsIDB4YjM4MjZjNWUsIDB4ZTM0Y2JmNmIsIDB4MDVkOTQ0YWYsCi0JMHgwYTVmMzdmZCwgMHg4OGY1YzcxZCwgMHgyYzE2MGZjNSwgMHgwNGYwODMxOCwgMHhmNmY1NDM3ZiwgMHhiYjdmNWExYywKLQkweDdkNmNlN2VhLCAweDBiZjg4ZWM3LCAweDdlYWE3OTUxLCAweGVhMjc5NTIxLCAweDUzYmU1NGMzLCAweGRiZTU0MTVmLAotCTB4NzY1NDc1ZjUsIDB4ZjJhNWFmZDYsIDB4OTUwOGZhY2QsIDB4YTE2ZmFiYmYsIDB4YWRmNTM3ZjIsIDB4ZGZhYjFlNTQsCi0JMHhmNWViZTU0NCwgMHhlYmJiMmE1MSwgMHg3Y2VhNTQ4MywgMHg0MzI3YTdkYiwgMHhmZTE1NmVjMiwgMHhiNzIyNDgwNSwKLQkweGU0NWNjNTViLCAweDk2YjhiZWRjLCAweGFjZjFlNTBmLCAweGI0NzBkMWY2LCAweDAzMWVjZmNiLCAweGM2YTYxNzIyLAotCTB4NTIxZjk1OTcsIDB4YzkwNTk1ZTIsIDB4MDI4ZjI4YWUsIDB4N2ZmNDA3OWQsIDB4NzRlMzRhZWYsIDB4MWNkOGQ5NzIsCi0JMHhkZWUzN2EwNiwgMHhjMDFmYmUyYiwgMHgxNWQ0MTMzOCwgMHg0N2RmODU5NiwgMHg0OWRjZjMwMywgMHgxMDdmMDVmYSwKLQkweDNhMjk3NWU5LCAweGM5NmY2MGIxLCAweDg5YzdhMDdjLCAweDhhNWFmZTQ3LCAweDQ1NmM4NmZkLCAweDI4Mzg1ZWRjLAotCTB4ZTJjOTdhZDMsIDB4YWY0ODAzNWIsIDB4ZTkzNzhhNGYsIDB4NDAyZmJmMjcsIDB4YTM5MzM5YjksIDB4MDBhM2FmZTMsCi0JMHhiMmRmMDRlMywgMHhiMzlmYTk3OSwgMHgyMGE2MGU2ZCwgMHg0N2E0ZjcxZSwgMHhmNjdkMjQzMSwgMHhhZTBmNTZmMCwKLQkweDcyN2RhYjc3LCAweGIzMWYxOGQ0LCAweGMyYjEzNTk2LCAweDRmOTg2NmE4LCAweDdlYjliYjZkLCAweGMzOWE1NWI2LAotCTB4OGNmZTY5ZTMsIDB4NWYyMGM2OWIsIDB4NTBlZmEzNzksIDB4YTU0N2QxNWMsIDB4OWY2YWNmZGUsIDB4ZmVlOGUzNGEsCi0JMHg0OTkxZGIzOCwgMHgyMTdlMGE3YywgMHg4NmFmZmJiNSwgMHgwOTNmNTUyMywgMHgxZmQ4ZGEzOCwgMHgyZTI4NzcwMCwKLQkweGI5M2Y4YTE3LCAweDBmOTRjZTVmLCAweGIxYmI4YzU0LCAweDcwOGZmNjNkLCAweDdmYzA3NzNkLCAweDY1OTFkMDE3LAotCTB4N2VmNWQ1MGEsIDB4YzQ3MjYzNmIsIDB4ZWY5ZjE2MzEsIDB4ZGYwNzhkMzAsIDB4ZmI5Zjc1ZjksIDB4ZjhjNWQxNDIsCi0JMHhmNDI3NjE1NSwgMHg5YjZhODI3OSwgMHgwZTQ0M2U4ZiwgMHg2YTJiOTVmMiwgMHhhNjk5ZmJkNiwgMHg1ZTdiNmQ3YSwKLQkweGUwMGViNGQ0LCAweDU5ZWU0MDNmLCAweDNhZTBhNDg1LCAweGE4YjgyZDU4LCAweDI0NWFkMTQ3LCAweGVjOGM2ZjgwLAotCTB4ZjEyNmZjZTcsIDB4NGVjZTM1NzYsIDB4YmU0N2VjMzUsIDB4NTRlMmZjNjksIDB4YTU2Y2I2M2YsIDB4M2JlMTVhZjksCi0JMHhhYmQ4N2Y1ZCwgMHg1YzdlMjQ1YywgMHgzYmJkOWYyNSwgMHhmZmM4YmVkOSwgMHg0OGJlZjk5NiwgMHhkM2RiOGRiNSwKLQkweGEwZjExOWNjLCAweDExN2NjYWJmLCAweGUxOGJjNjBmLCAweDBmYzNlYjRmLCAweDhlMzA0ZGY5LCAweGIzZjdhZWExLAotCTB4NGRlZjZhMjIsIDB4ZDk3NjRlYjYsIDB4MWQ2YzlkYjgsIDB4N2I4YzQ1YjcsIDB4ZGNhZGZjMjksIDB4Y2UzNjc0NzEsCi0JMHg5NWM3OGFkYiwgMHhiNGFiZWZlZCwgMHhmZmMwYTMxZiwgMHhkNDc4MTM0YSwgMHgwZTQ2M2JmMSwgMHhkZmMwYzhiNSwKLQkweDIyZGZkYjk1LCAweDNkOTRmMjdiLCAweDE3NmJmYzMyLCAweGUxZmQ1YmQxLCAweGI3MTQ3Y2Q3LCAweDYxMWRlN2Q1LAotCTB4OWRjZTM4MWQsIDB4ZmY2N2YxN2QsIDB4NzU4NWJmMmQsIDB4ZWQ5N2RkZjEsIDB4ZjYyY2JlM2MsIDB4NzAzODc0MzcsCi0JMHhmNTA2ZDBkMywgMHg2Nzc2YTIyNSwgMHg5YmM1MTU1YiwgMHgzZDc1ZGRkZiwgMHg1OTRiNmZkOSwgMHg2NDRlODNjOCwKLQkweDQ1MmQ2YjA1LCAweGIzMGNmMDNiLCAweDlkM2M0MWNkLCAweDI2N2FhZjYxLCAweDQzYjRlODE4LCAweDk3NGU0OTU2LAotCTB4MTBlZDk4YjQsIDB4ZjU0ZDVmYjAsIDB4ZjVjYzliZTUsIDB4MTczZjM2NzIsIDB4NDZmOTRjZjUsIDB4MzQ0YThiM2IsCi0JMHg0N2ZiZDMzZiwgMHg3ZmUxMmY2NSwgMHg4ZjViYWIzOSwgMHg5ZGEzNzNlYiwgMHhlOWRkYjNlZiwgMHhlODNlNGE2NSwKLQkweDFlMTc5YWRiLCAweGZmMzhjNTJiLCAweDdlYmU2NDhmLCAweDE1OTNmMWVhLCAweGFiOGVkYzU5LCAweDMxNTY2ZDhjLAotCTB4YjY4N2ZmYmUsIDB4Y2E5YzVmMDksIDB4N2FlOGZiZjAsIDB4Y2YyMjFmNWMsIDB4ZmU2ZDgxNGIsIDB4YTRmZGY4ZmUsCi0JMHhkNWUxNWJmMCwgMHg3MTdlZWZkNywgMHhjZDQ3MDExYywgMHhiYzY5Mjk3NiwgMHg4OTJjYmY3NywgMHg2M2YzOWZmNSwKLQkweGJhYTVlMjg2LCAweDViZTdkNzZlLCAweDIyYzlhZmVhLCAweDE5MzMyYzFlLCAweGViYzY3ZWU5LCAweGU4MzJkODhjLAotCTB4ZjM4ZTIwN2QsIDB4MzQwOGU5ZGIsIDB4NzJjMmZjYzIsIDB4ZjY0Yzk4ZTgsIDB4MTk4NGJjNDQsIDB4MzBlNTg1ZGEsCi0JMHg1ZTkyZWYzZCwgMHg5M2JiNDcyOSwgMHhiNDEyZjEyOSwgMHgyMWVkNjEyMywgMHgzZjA1NTUzZSwgMHgxMjllNjljOCwKLQkweDMxYmI3NzhjLCAweDY3NzE4YmJlLCAweGQ2MGI2Nzk3LCAweGU2MmJiYmQ3LCAweDE2YjUxYzYyLCAweGY3ZjQwMWY1LAotCTB4NjFmNjY3ODAsIDB4YjI3MDlmZGMsIDB4ZjgxMDc4ZDYsIDB4ZWYzM2UxZDcsIDB4ZTZmY2I4MmYsIDB4NzVlYTNhN2EsCi0JMHgwMGY4NzdkNCwgMHg4YzAyZjlmNywgMHgyM2U5NTRlMiwgMHgwMWRjZWRjZCwgMHgxZjZjZmQ3MywgMHg1ZjdjZTI5ZSwKLQkweGY3MWM1ODljLCAweDBjYjhiNWM3LCAweDRhYzliM2UzLCAweDU0YmY5ZjU3LCAweDg3MWFmZTg0LCAweDVhNjRlYzFmLAotCTB4Nzk3OGQ2ZmYsIDB4N2UyMjk1ZmIsIDB4ZjRmOGU2YmYsIDB4ODkxNzU5ODEsIDB4OTM5ZWQ1NDcsIDB4Y2ViMGQ0NTgsCi0JMHgyYWJkMmFkNCwgMHgzOWVkNjFmMiwgMHg2YTdmOWU4NSwgMHhkNTg3ZWFiZCwgMHhmMzU3YTBkNiwgMHg5MjlhNzBlNSwKLQkweGMyMjhmNWMzLCAweDYxMzhjMTI3LCAweGUzODA5ZjAzLCAweGY5Y2EzNWVhLCAweDdjM2YwYjA4LCAweDk5YjIzODZhLAotCTB4OTE4ZmJmNDksIDB4ZTBjOWY5YzMsIDB4ZmJmZGQ0ZjgsIDB4ZTIzZmY1ZmEsIDB4NjFmZmI0YmYsIDB4OTA5ZmZhZmQsCi0JMHgxNzlhZmZhYywgMHg4MTE1ZDk5ZSwgMHg4N2YyYTJmNSwgMHgzMzAwZjZkZiwgMHhkNjk1NzdiMywgMHhiZGQwMDBkYywKLQkweDA3YjM1YjdhLCAweDEyOTRmMmU1LCAweGRmNWQyMGYxLCAweGEyNzNjYThkLCAweDUyYTFmODQ5LCAweGE4MmVmOWQxLAotCTB4M2ZjNGE1NDksIDB4OWZhNzQ3YzQsIDB4ZTgwZGU2ZmUsIDB4Y2RiNDdmYzcsIDB4N2VmZjI1ZWUsIDB4MDBlZTIzYmIsCi0JMHhiNmQ5NWNhNiwgMHg3NmM3Y2I4MiwgMHg3ZWJjNWJjNywgMHg5ZmM4ZmJjZiwgMHg3ZDY2ZWRiNSwgMHhiN2U0Zjk1MSwKLQkweDdlYjRmZDczLCAweDFiZmY4NDQ1LCAweGU1NjFmZjI3LCAweDhkOWM3ZjEzLCAweGViMmQ1OGY2LCAweGZkNjdiZDI1LAotCTB4OTczZmM3MGUsIDB4NjJjMmY2NDUsIDB4N2JmZmEzMzUsIDB4NTZiMjFmN2QsIDB4ZWRiNmE1ZTAsIDB4M2VlM2VmOWIsCi0JMHhlN2RiNmQ0NCwgMHhlOWExNzI0ZSwgMHhmYWQxYmYyNCwgMHgwN2YwODU1ZCwgMHhkOWRjNTU2ZSwgMHhjNDliYWYxNCwKLQkweGU5YmYyMTI2LCAweGVlNTE2MTc4LCAweDNjMmZjODBmLCAweDljZjE4MjU2LCAweGY2NWUyN2FlLCAweDdjOGRhMzQ4LAotCTB4ZDlkZmY1Y2EsIDB4ZmRlZjkyZDgsIDB4YWU1YTlmZDgsIDB4MWEzZjQxYmEsIDB4Y2VkZDZlZWQsIDB4M2YwYmI3ZjMsCi0JMHhhYjJmMGY2NiwgMHhlZTBmNzFlZCwgMHhiNjZmNTQxZiwgMHhmNTVjYmVkMywgMHhmZmJmNWIzMywgMHg4ZTU3YzYwOCwKLQkweDQwNTcwMjNiLCAweGJjY2Y1NWZmLCAweDUwMzVmYWY0LCAweDllY2U3YWFmLCAweDQzNGY5NzNkLCAweGY0MTM3MjkzLAotCTB4ZDZmZjg1YTksIDB4YTNkMDRmOGUsIDB4YTkyZjQ3ZjIsIDB4Y2Y4ZDBmYjgsIDB4YTA5NTllYmYsIDB4ZmI3M2Q1NGIsCi0JMHgzZmE2MzY1NSwgMHhmNmM0NjYzZSwgMHgxMjVhOWRhYiwgMHg5YWRlYzRmYSwgMHhmYzg2ZmU4ZCwgMHhlOTE1NzljMiwKLQkweDg5M2VlZWZmLCAweDgyNGMyYzBkLCAweDkxMmZjZGNmLCAweDIyNzg4Y2RkLCAweGY1N2EwYTdhLCAweGJlZDJjZmQxLAotCTB4N2E0MmU4MTYsIDB4NmIyZjQyZDEsIDB4ZmU0MjY5YmIsIDB4YTc4YzVmYjEsIDB4ZmIzZjdmMDMsIDB4Zjk3N2RjNjMsCi0JMHg3ODgwMjM4ZCwgMHgyZWY2NzhhOCwgMHhhNGU3Y2UwZiwgMHhmY2Y5Yzc1MiwgMHhjYzVjZTZiMSwgMHg0N2IwYThiMywKLQkweGYyNTRiZDcyLCAweDdmOGYxNWU3LCAweGY5NmZmODg1LCAweDUyZTRhZmQxLCAweGYzMDU4MzNjLCAweDQ0M2I2NDZjLAotCTB4Y2I5ZTcwZjIsIDB4ZTY5OWJkMWUsIDB4YzRjMmNlNTksIDB4Yzk4ZjE1ODcsIDB4YTFmMGZmOTQsIDB4OTczY2U2YzIsCi0JMHgxNmRlNGU0NCwgMHg4YjcyNzI3MiwgMHg0ZTg1OTI4MywgMHhmYjgyNDJlMiwgMHhkMWNhYWYxMCwgMHg1YmNmMTQ2ZCwKLQkweGFmOTJmMTQ1LCAweDZjNDdmYmU4LCAweDc0M2ZkNTM1LCAweDJiYjU3YTcyLCAweDRiMGMxZmJhLCAweDlmN2Y5MTg5LAotCTB4ZTkwM2E3YjgsIDB4NzA0ODdhNzQsIDB4NmI4MWM2MjAsIDB4ZjgxMTEyOTksIDB4YmY0MDJlOTAsIDB4MDM1OWQxZjIsCi0JMHg1Zjk4OWQzOSwgMHg4MWRmMTUyOSwgMHhjZjgxOWZmZSwgMHgzZDg3N2RiMSwgMHg3ZDMxMmFlOCwgMHgyNjE0MmVjNywKLQkweGM2MjM1ZmM2LCAweGQwZDNiODA3LCAweDBiOTkzZGJlLCAweGY5OTI2MGY2LCAweDNkMjVkODY1LCAweDBjYzFkNDZlLAotCTB4Nzc5MDY2N2MsIDB4ZGM0ZmZmMmUsIDB4OTc1ZGU1Y2IsIDB4MzliY2U4ZmYsIDB4ZDc4M2ZlZjgsIDB4NzdlMTFjYjgsCi0JMHg1YzAwYmY2OCwgMHg3ZWY0ODFmMSwgMHhlOTEyNGRmZiwgMHgyNzhiMDcwNywgMHhlYzI3ZjM5MywgMHhlZmNkY2U0MiwKLQkweGYwMDJmY2FkLCAweGY3MWViODJiLCAweDkzOGUwZGYxLCAweGZiMjA3NDQ1LCAweDdjMjM3Y2I2LCAweDM4YWJkNDZmLAotCTB4YmY3ZmE3YWUsIDB4MTcyZjFjYmEsIDB4OGFmN2UwZmEsIDB4ZmExMDBmYzgsIDB4ZjVjYTNkODAsIDB4MjQzZjZhNDAsCi0JMHg3Yjc1ZWRjMiwgMHhhMDhmZmJmNCwgMHg0NmJjODJmYywgMHhmNmJmMjhmYywgMHhiZGZmY2UxMCwgMHhmZjVmMDcxZCwKLQkweDdiY2RjODMyLCAweGNkNmU1ZDMxLCAweGI3MmFkNTdhLCAweDY2YWYzYjE1LCAweDNkZjZlNGM5LCAweGNhOTJjMDJkLAotCTB4MmE0ZjNjMmQsIDB4ZjEyNzVhYjcsIDB4YWY1YmRmZjMsIDB4ZWQ1NDc4ZWEsIDB4ZWJhYWJkNjYsIDB4YjRmODU0YzksCi0JMHg4YWNkYzllYSwgMHhkNTZhZjA5ZiwgMHgxYWY3ZjA5MywgMHg4ZmNmZWQyYiwgMHhmY2VhMWYzYSwgMHg5YTgzZjk1NywKLQkweGZhOGZhOGExLCAweGMzZTc1NGY4LCAweGY5ZDUzZTNlLCAweGQxM2M1ZmIwLCAweGZiZWI0Nzg0LCAweDE4ZGM2MDVmLAotCTB4ZmJiNDI1ZjgsIDB4ODFmM2IzZDcsIDB4Zjg3YmQ1YWUsIDB4Nzc3YzJjYmUsIDB4YWY4MGViMDgsIDB4NWFkMzc3MjAsCi0JMHgxYjY3ZTUwZiwgMHgzZDRiNTFlYiwgMHhiNDFmNjk2NiwgMHhmNjk2NDNkNCwgMHhjZWJkNGI2MSwgMHhlM2NhM2VkMiwKLQkweDU1MDdlZDY5LCAweDM3MTM5ZjllLCAweDYzYWZiN2I1LCAweGIxYzYzNzExLCAweGM3MTRjYWY3LCAweGQ3OTgwMWVlLAotCTB4M2IzZGY3YzMsIDB4YzI5MWEzMGEsIDB4NmY1YjVlNDQsIDB4ZjUxZWJhOGUsIDB4ZDdiNzhmNTksIDB4YWY2MmY2ODMsCi0JMHg3YWVmYzc4YiwgMHg0YzllYmQ0MiwgMHhkNmY2OWQ4MywgMHg3MWY0OTkxZSwgMHg0OWNkOTQ2NywgMHgwNTgyNGZlNiwKLQkweDY0ZWJmNDRkLCAweGI4ZjNkZWE5LCAweGRkZGEwZjdjLCAweDU5MmNkZTMwLCAweDcxOGI1ODJiLCAweGYyOTk1Njk4LAotCTB4ZGMzNjk2NjcsIDB4OGNmY2MxZTIsIDB4MzdjNTNkOWUsIDB4Y2JlNzg0MmUsIDB4OWI3Y2M4OGUsIDB4ZjI1NDEyMzAsCi0JMHgyOWRjN2UwYywgMHg5YTY4NzkxNiwgMHhmN2M3ZmI4NCwgMHhlYzk3ZmQxMywgMHhkMmRkN2VlMSwgMHg3M2YzOTNmYiwKLQkweDVjYWVmOGE1LCAweGRlYTJhMzViLCAweDZkZWM3ZjA0LCAweGRlODNiZWUzLCAweDk2YTNjNTRmLCAweDE3YWU3YmU3LAotCTB4ZmRmZGNmN2MsIDB4ZWZjYzI3Y2EsIDB4YjAzZTIyYzMsIDB4NzFmYmU3NGMsIDB4Y2ZmNzFjNmMsIDB4YWU3N2U1MTksCi0JMHg5Njc3N2ExNiwgMHg4NWM2ZmEzYywgMHhjMzllODc0MCwgMHgzOWJlNDMzMiwgMHgzYTI2NDdiYiwgMHhmN2MxZGQ5YywKLQkweDNlY2UyOWVmLCAweDk3YjVmOTA1LCAweGFmOGU5ZGY0LCAweDExOGY5NDJlLCAweGQ3NTBmNWE5LCAweGZkMmZiZmYzLAotCTB4ZGVhOTM0MWEsIDB4ZWY5MmRiZjUsIDB4ZWJiNWQ5NDIsIDB4YjExN2YwZjgsIDB4MDUxYmMyZmUsIDB4ZGJmZDY1YmYsCi0JMHhhMmU3ZDhjZiwgMHg3ZDllOGQ3ZCwgMHhlYzg3ZGE2ZSwgMHg4MmYzZmJkOSwgMHhiNzdkNjFhZiwgMHhmNjcwODAyMywKLQkweDA5NzNmYmVjLCAweDNhY2Y1MWYyLCAweGIxZWEwNTQ3LCAweDFmZGMyMTllLCAweGU3ZmJkYzZkLCAweDNmNWE0ZTkyLAotCTB4OTM3ZTc4OWIsIDB4NjdjM2ZiOWQsIDB4NGRmNWZjZjcsIDB4OTg0YjFiMjksIDB4ZmIwN2RhMTUsIDB4YTg3ZjY5ZDIsCi0JMHg4YTJlYzdmNiwgMHhmZGVjZjVhYiwgMHhjZWQxYTk3MywgMHg1OWYzYWNmZiwgMHg3YjFiZjYyOSwgMHg0ZWUxNmNkYywKLQkweGVmOTMyZjg0LCAweDM4YmVkNGQzLCAweGU2MDM2YjY1LCAweDU3ZWRiNDYzLCAweDE5ZmJjMDk3LCAweDgyNWYzOTNmLAotCTB4Mjc2N2IxZmEsIDB4ZWRiYTdiYjcsIDB4N2VlMzhmOWQsIDB4MmZlZDc3ZGEsIDB4YmQwM2IzYWUsIDB4MDYzODUxYmEsCi0JMHgzZjUyOWE4MSwgMHg5MmQxMWU5ZSwgMHhjNTNjZTVlMSwgMHgxZjE3MmYwYiwgMHhlMGM3ZmYzYiwgMHhmNTdkYTI0MywKLQkweGE4ZWUzZGVhLCAweGZmNzljMjUzLCAweGEyZGZjZGU1LCAweDIwZTdkODNlLCAweGZiZTdkNGJlLCAweGVjODFhYzVlLAotCTB4ZmJjZDRiOTEsIDB4YmNkZDNmZTgsIDB4Y2NlNWY4YTUsIDB4N2MxZmY3YmIsIDB4ZjI2Mzc3ZGUsIDB4ZTVmZGQ1ZGIsCi0JMHhlZjlmM2ZhMCwgMHhjZmVhOWJiZCwgMHhlZjA0MDNiOCwgMHg1N2JiZjI2NSwgMHhmZDFjNzk1NSwgMHg5ZmZlNzQxZiwKLQkweDgxM2JlZTk4LCAweGNmNGI5ZWVlLCAweGY4M2ZlYzdiLCAweGZkZDM1M2JjLCAweGVlODJlZGM4LCAweGE5NDdjYzVlLAotCTB4ODI3OWM5ZmQsIDB4YjllYTkzZWYsIDB4Y2U4N2ZmMWIsIDB4ZWZkN2I3NWYsIDB4MzE1YTA1YjMsIDB4YmQxZDNiMmYsCi0JMHhlMWU3M2MwMSwgMHhlMTgyZGY5ZSwgMHhjZTQ2ZmJjMSwgMHgyOGRkYTJmNywgMHgyYjRiZmQ4YiwgMHhmYjk1MTE3YywKLQkweGYzYzRiMjdkLCAweDFlMTBkOWQ2LCAweDRmYzI2M2NmLCAweGQ3MTBmMzQyLCAweDI3MmI0NTRmLCAweGQ2ZDE1NGJiLAotCTB4OTRjY2RkOTMsIDB4ZjAxMDQ3NDAsIDB4Nzc1NWRmNzIsIDB4ODdkNzI4MDYsIDB4YzYxNjNmOGQsIDB4MDE2OWUwZmEsCi0JMHhmYzViNTc4YSwgMHgwNTg5MjZjNSwgMHg5NTU3YjAyNSwgMHgxODdmM2VhYiwgMHg0OGZiMTZmZCwgMHg0MjUxZGM1YiwKLQkweGRlNTg1YmU1LCAweDc2OTBlMjIzLCAweDY3ZjI2YWFmLCAweGJhZTZkMWI0LCAweDNiYWU2ZmNiLCAweGM2NGU3ZjQ0LAotCTB4NThmYTc3ZTEsIDB4ZjJkMWUzMTQsIDB4OThiYzA3OTUsIDB4NTM4ZjI2Y2YsIDB4YmIyZWE2MTgsIDB4ZmQwNDZiNTgsCi0JMHhmY2NmODcwNiwgMHg3M2Y0MjJmZCwgMHhiNDViZjEwZCwgMHhiMDYwZTNkYiwgMHhhZDhlZmJmZCwgMHhmMzM4M2YxNCwKLQkweDYwMzc1YmY0LCAweGNhMmY1NWJmLCAweGU5NzgwOWNjLCAweDcxNjZlMWRlLCAweGFhMjUxYmU0LCAweGQ5NTIzZmEyLAotCTB4YmUyOTA3MjYsIDB4MTc0YmM0YTIsIDB4NzUwYmY2MTgsIDB4ODdlYWIxN2IsIDB4NzJhYjgyNmUsIDB4MTczYTIzYTcsCi0JMHhmNWRjYWZiZSwgMHhiNzVhMTI4NywgMHgzZDkyZjVkNywgMHgwYTVhNzkxYiwgMHgzYmUxYTM2YywgMHhiMDNmNzA0YiwKLQkweGJlN2U0OTUyLCAweGU3OTUxMWU0LCAweDRlZWQ3NTFiLCAweGJjN2U4ODVmLCAweDZiZTc5ZGI0LCAweGIxNmVjNjU2LAotCTB4Mjg3OTBjM2IsIDB4ZGViYjU0MWIsIDB4ZjIyOGY4OGUsIDB4MmNmOTQ0OTQsIDB4NGYzMTlmMDgsIDB4YmI1N2I3NTAsCi0JMHg3YzM4OTI5ZSwgMHhlNjI4ZjZlZCwgMHg3ZjZlNTY3ZCwgMHgxMWUzMWJhZSwgMHgwMTFjYzc5NSwgMHhiNzZiMWI3NCwKLQkweGVmZjE0ZmJmLCAweGM2N2MzZjE5LCAweDk3N2U0OWQzLCAweGZiNDNmMjZjLCAweDY1ZGI3ZmY5LCAweGI2Y2FlYmEyLAotCTB4YTE1YmIyMWEsIDB4MTk1ZGY0NGUsIDB4MjdkNmZlMTMsIDB4N2VhYTRmZjQsIDB4MWUxNzc3YjgsIDB4ZDFmYWE4OTQsCi0JMHg3NzhjMWU5MywgMHhlNmQ4ZWU5YywgMHhmYjcwM2YyMSwgMHhmZDMxZTNjNSwgMHhiZGQ4YmRmYywgMHhjMmZiZGZjMiwKLQkweDU0ZTNlNDQ5LCAweGZjNjlkZWZlLCAweDNmNTFkODA3LCAweGYzN2UyZDU1LCAweGM3NjQwMWY2LCAweGM5YTU5YzAyLAotCTB4ZmU3NGM3ZjYsIDB4YzNlNjdhYTksIDB4ZDk1ZTMxYzcsIDB4YzdiZGYzYjUsIDB4YmZlYWVlMTEsIDB4YjQ3MWU5ZmQsCi0JMHg5NzNlZDk0MywgMHg2YTJkZjcxNywgMHhjNTM1ZmU5ZiwgMHhkZWVmZjQ3NywgMHhhMjVjNzk1NCwgMHgyOTI3YTlmYiwKLQkweGZlMGRkNjNlLCAweGJkZDZmNjM2LCAweGZhMDE2NGY3LCAweGZkY2ZkZDIzLCAweGU3ZmQxNzI1LCAweGQxNjc3YjM1LAotCTB4Y2YzNThmZjksIDB4OTJjODE4Y2YsIDB4MjI1ZWIxYzgsIDB4MjMyZjQ2ZmYsIDB4ZGJhNTY3M2UsIDB4NjQ4M2I2YzEsCi0JMHhiYTAxOWYyZiwgMHhlN2QyYmZhMywgMHg3ODZhYzdjNywgMHhmYzJmYzQ3YywgMHhlM2M5MWRmNywgMHhmNWZjZmRhMSwKLQkweDVlMzcwNWI2LCAweDZkYjhmOThiLCAweDgzYWEwMGY2LCAweGFmZWRmYTRiLCAweDVlYzczZDAxLCAweDg4NzcxZDA2LAotCTB4MGJlYzRjZjgsIDB4Y2ZkYmY1MTcsIDB4NWU4MDNmZTAsIDB4ZmM3NDJkZTcsIDB4ZjdkOTZkYjAsIDB4NmQ3N2MxMWUsCi0JMHhlZGZhNTIwMywgMHg5ZmMwY2JmMSwgMHhhMjNkNmYxZSwgMHg5NDBlOWQwNiwgMHhhMDNmOWRiNywgMHg2ZmQyMDk3OCwKLQkweGZiYjg0YzJlLCAweDMwMGIwZjk5LCAweGRlY2E3ZDVlLCAweGIxZTUzYjdiLCAweGQxNzg3NWVmLCAweGZiZGNhZDRmLAotCTB4Zjc1M2M5MDYsIDB4OWUyOTQ3ZjMsIDB4YjNkYzQ0YzksIDB4ZjFmZGY1OWIsIDB4YTFjODk0ZjgsIDB4Y2RjMjdkYWIsCi0JMHgwNzQxN2RmZCwgMHgzZGY4MDc4YywgMHhmZGY4NWNmNCwgMHg3OGY1YWY5YywgMHg0MDM4YWE0MCwgMHhlNGYzYzFkMCwKLQkweGNkNzAzOGY0LCAweDdlMTViZjEzLCAweGQyNmU4Mjc1LCAweDViZDdhNDY0LCAweGViNWY4ZDE3LCAweDFlMjJmMDc4LAotCTB4NWNlMzE5MjYsIDB4N2QyZWUzYzksIDB4ZGQwYjJlNzEsIDB4NWY1NmY4ZjQsIDB4ODNlYTBiMWMsIDB4OTUxMTllMzEsCi0JMHgzNzE2NDhkZSwgMHhlM2NjZGVlZCwgMHg3Mzc2ZGQ2MywgMHg0ZTgyNGRmZSwgMHhkNTM1ZWUzYywgMHhlOGQzOGU2MSwKLQkweDJmMjU0ZGYzLCAweDZhNWVkY2JhLCAweDRmMTQ5ZjFlLCAweGJiMDhkMGEzLCAweGJhYmUzZmJhLCAweGRmYWU0ZTNlLAotCTB4ZGU1Yzc3NmYsIDB4ZmRjYTc1N2UsIDB4NzU5MmE1OTQsIDB4YzczNmU1M2YsIDB4YmMzZjY4ZDUsIDB4NTdjYTMyYTUsCi0JMHgwYzc5ZTVlOCwgMHhjOGI5YmVmYSwgMHg1YTdhZWMxNywgMHhmYWM5NzhhNiwgMHhlZmQyNDFkOCwgMHhlZmExZmQ1NiwKLQkweGFkZTE1OWI3LCAweDZjYWVmMDEzLCAweGQ3NDdlYmU3LCAweDgzNTQ3NzRlLCAweGVjMGViYTdlLCAweGI5NWViZTI2LAotCTB4ZmQxNTJkZTMsIDB4N2ZkYjQzY2YsIDB4OGIzYjcyYTQsIDB4MWZhZTExY2IsIDB4YmE3Y2MzNTEsIDB4YzI1ZmRkOWUsCi0JMHhkZjNjN2FlMywgMHgzN2NlM2FkOSwgMHhhOTNlZGMxYywgMHg5YzdjOTNkZCwgMHg5YmVmMWRkYSwgMHhjNDhhYTljNiwKLQkweDc5ZmY5ZTU0LCAweDJiNGVmMWYxLCAweGJmYjA1YmMxLCAweDNhNzYxZGQzLCAweDI2M2E3M2NmLCAweGJmYjY0OWNmLAotCTB4MTc2MWQ4YmIsIDB4MmYyYjQxZjYsIDB4YmNhNTFkNjEsIDB4YmNmY2EzZWUsIDB4ZDM1N2M0YzUsIDB4Y2Q3YTBmMjgsCi0JMHhjNWJmMzlkMSwgMHg0MDZiOGM3MywgMHg2YzRlZDFhYywgMHhkYTdjZTA2YiwgMHhmOTgyN2ZmNiwgMHhhM2I2ZWY0OCwKLQkweGZkNzE5NjVmLCAweDM1Zjg4NWRhLCAweGFmYTU4YmQ4LCAweDgzNzBjZGQ1LCAweDVkZmQyODdlLCAweGFiYjIyMjY4LAotCTB4M2E0Y2VmNTUsIDB4MGZjMTMzNjYsIDB4NzVjNDBjZTMsIDB4YzFmYTA5YTEsIDB4OWZjYzdkZmMsIDB4Y2Y2NDc4NDIsCi0JMHg4ZjA4MzllYywgMHg1ZDc5YjVlYywgMHhlZDUyZjI0OSwgMHhjYWYyODg1YSwgMHg1ZWVkN2VmNSwgMHhjMzM4ZGU3MywKLQkweDRmZDA4NmYzLCAweDVlN2E5NWY3LCAweGYxMDMyODUxLCAweGNkYzc2MWY0LCAweDMyODY3NGJjLCAweDc3NTkxN2JjLAotCTB4ZDliZDA5NGUsIDB4ZjE2MDFmNTUsIDB4MDgxY2ZjMTEsIDB4N2U0NTZiZDYsIDB4ODM5ZWM1NzAsIDB4NTYwZjUxYjMsCi0JMHgyZmU2MjRjNCwgMHhhZGE0NzNjNCwgMHg3NjNmMzcyNCwgMHhhNTczZjI2NCwgMHg1MTVkYjM1MSwgMHhkNDU3ZTdiOSwKLQkweGI3OGRiMmJlLCAweDZhMzE2MmFmLCAweDhjNDVlNzhmLCAweDZjNGQ1YmY2LCAweGUxMWVjNTgyLCAweGYyMjNkZGZjLAotCTB4OTVjZmFhNDIsIDB4ZmYyMWI4YjIsIDB4OWY4MjY3ZWIsIDB4MjZiZGVhYmEsIDB4ZjA4ZDVmM2QsIDB4ZDYxYWZiNDEsCi0JMHhjNGQ0ZTM0MSwgMHhkMWM2OTgwNiwgMHg5YjljZDVkYiwgMHg0NmFmZWE2YSwgMHhhYjdlMjBlOSwgMHhmNDJmZjczOSwKLQkweGVhYmU0ZmJjLCAweGQ0ODc4NDdkLCAweGUwOWJlN2ZkLCAweDg1M2ZmNDRlLCAweGViMjQyN2M1LCAweGI3M2QxYTdmLAotCTB4ZTZmYTg3ZTYsIDB4ZGU2Mzc4ZjMsIDB4ODgyY2JkMDIsIDB4ZTg4Y2ZlYTIsIDB4ZDNjYTczZTcsIDB4YmY4MDhkYTIsCi0JMHgzZmY4NWEyMywgMHhkY2Y4MWY1MCwgMHg2MjVmMGIxYiwgMHgzMjZjZGU3OCwgMHg3MDlmNTllNSwgMHgwZjA0N2M4OCwKLQkweDA0N2NmMGYzLCAweDc1ODM2MjJkLCAweGNiNmQxMWY4LCAweGYyOGM2OTg2LCAweDhjM2I0ZTBkLCAweDVlMmMwNmY5LAotCTB4NmY0NDdhODIsIDB4MjViZGVmZDcsIDB4N2UzMDYxMWYsIDB4MTY1MGFhMDIsIDB4ZGU2MzE2NzAsIDB4OGQwN2FjM2YsCi0JMHhiMDViM2NmMywgMHg5ZjliYThmZSwgMHhiZDYwMmM5MywgMHg2MGZmMzFmYiwgMHgwYTAzZjBhYiwgMHhkYzU4Y2UzMSwKLQkweGE3ZTRiY2ZmLCAweDNkOTkyNzNkLCAweGQwZDU2Y2EzLCAweDljYjM2MzAwLCAweGEwMmE2NzIzLCAweDI5NmZiMzJmLAotCTB4MGJkZjJlN2IsIDB4M2Q5YjE5NjYsIDB4YjNkMGYzMTMsIDB4OTcxYjJjOWYsIDB4NGI1OGY1MDcsIDB4Y2JmZjdmMjcsCi0JMHg1MDA1NzFiMiwgMHhlMmVhZTYzZiwgMHhjYTI0YWJlZiwgMHhiZTViNTdkMywgMHg3ZGEyMzMzYiwgMHgxMzdkM2QwNiwKLQkweGE0ZDRhNjYwLCAweDQwOWNiM2E3LCAweGRmYTEzM2NmLCAweDFmOTk3MTdkLCAweDU1N2ExZWYzLCAweGMyMTY2NzhlLAotCTB4NzMyNjQzNzYsIDB4N2VkNjBkZmMsIDB4NzVmYTFjZjcsIDB4MGQ5ZDZkNDMsIDB4YjdiZTVmYTgsIDB4NzQ5OWNmZjcsCi0JMHgyM2YzMGZkZSwgMHg2YjFlOWNmMCwgMHhlMTFkMjJmMiwgMHgxNzBiZTRkMSwgMHhlNmIzYWZjOSwgMHg3NGZjZTk5OSwKLQkweGVjNWMzYjk1LCAweGRmMzYzYTA0LCAweDIzY2U5MjM5LCAweGRlMzE1MjNlLCAweDI2ZTM3ZTg5LCAweDcwZjNiNzkxLAotCTB4M2YyMWJlNWYsIDB4OTNiNTc4OTcsIDB4NDRmOWY3ZWYsIDB4MGZkOWQ3NWUsIDB4MmViMjMzMGEsIDB4N2Q2YTFmYTIsCi0JMHgwNjI4Mjc4YiwgMHg1ZTk0N2FiOCwgMHhmOWVmYjdkYSwgMHgzMWRiYWRmOCwgMHg5OWViMTMwZiwgMHhjNDk5ZDY0OSwKLQkweDdiZTk0YmY3LCAweGYzMDUzZTZiLCAweDJkOWYxMzY2LCAweDc4ODY3YzE1LCAweGZhZjIxYTczLCAweDk1MTFjYjk3LAotCTB4YzU1YmRhMDcsIDB4OGJkMzM3ZmEsIDB4ZDUyMjk3ZjMsIDB4OWY1MTg1ZjIsIDB4YjRjNzRmMWMsIDB4ZDNjNDVjZjAsCi0JMHhjZjI5OWNlNywgMHg3YTQ1Y2U3NSwgMHg2Njc1Y2Y1YSwgMHhlMDM3NDMzOSwgMHhlN2U1Nzk3NywgMHhmYWVlNTAwYSwKLQkweGFkNGE2OWNlLCAweGViM2Y0ODc5LCAweGY0YTY0ZmI5LCAweDE5Zjk5MmRhLCAweGNmYjljNDViLCAweDcxMGY3MDU0LAotCTB4NzFjMzZmODUsIDB4ZGZlMjdlOGEsIDB4N2ZlNDE4NzksIDB4ODAzNTUyZWMsIDB4ZDc2M2E0YTksIDB4YTQyODBjNGUsCi0JMHg0NWRlNzg5ZiwgMHgzYzJiZTBhZCwgMHgxZWU3NGVhZSwgMHhjZmI0NjZlZSwgMHg4MjkwZTNkYiwgMHhkY2Y3ZDdlOCwKLQkweDYwYmIyNWU1LCAweGU0YjlkMmYwLCAweDE3YTRmNzVmLCAweGE5M2YzMGM2LCAweGRhN2U2YmU3LCAweDQyN2IwNDBmLAotCTB4YjIxZjM5NDIsIDB4ZjJlZTIzMjcsIDB4NjQ3ZTljOTAsIDB4Y2M4ZmQzOTEsIDB4YjcxZTY5NzIsIDB4YmRiZjgyZTcsCi0JMHg4YWYzZmE5MywgMHhjZmQwYzBmZSwgMHhlZTlmOWM0ZCwgMHhkZjdhZjk5MSwgMHgzODI3ZWY1MywgMHg3ZWM4YjA4NiwKLQkweDc3MmYxZmI0LCAweDg1M2JhZmJjLCAweDAzZTgyODFkLCAweDExODZmZmY4LCAweDY2Yzc0MGZmLCAweDNhNDNhZmFjLAotCTB4Yzc0YTRjOGUsIDB4YjQ3NDY0ZTYsIDB4ZTQ5ZGM3OWUsIDB4ZmQ4N2RmMGMsIDB4NDQzZjJjOWMsIDB4ZTdhZDcyZTcsCi0JMHhjOTEyOTk3MCwgMHhlOTU5M2M0MywgMHgzZWI0YWI1YiwgMHhiOWQyNWI4YywgMHgzYjI3ZGU3YiwgMHhkOGRmYTc0NiwKLQkweDRlODhlM2I1LCAweDg0M2U3YTA2LCAweGYzZGQ4YzcwLCAweGQ2ZTEwZGJlLCAweDI5MWRmOGU5LCAweGMxNGMxZGI5LAotCTB4OGZmYmFiYzAsIDB4ZDNiMGJiOTcsIDB4YmVkMjRlMTYsIDB4ZjUyOTZkNjQsIDB4ODJkOWY4MDcsIDB4ZjNmMDE4ZTMsCi0JMHg5ZmJmZDYxNCwgMHhlMTRmM2YxYSwgMHgzZjAzMmZiYywgMHg3ZTBlNWVjZiwgMHg0YWFmM2Y3NCwgMHhlZTE1NzFjOCwKLQkweGZmOWQwMTViLCAweDViOWY5ZmU4LCAweDk2Y2VlMzA0LCAweDE1ZDNlMjM1LCAweGVmOGE2NGRiLCAweDc5YjlmYjQyLAotCTB4NWZiOTA5YjksIDB4M2Y2ZWE1MzEsIDB4ZjE1YzU3OWUsIDB4YjRmYzQ0OTgsIDB4N2ZiZjljNTQsIDB4YjdiZjljNGYsCi0JMHgyZjk2MDNlNiwgMHhiZDllOTA4YywgMHg5NDYwNWU3NCwgMHg3NmQ1NDZmNCwgMHgwOWMzZjNmMywgMHgzY2EwMmFmZSwKLQkweDg5ZWY3MTVmLCAweDE1ODA1ZjdlLCAweDIxMzU2N2ZmLCAweDM2NWQ0YmQ3LCAweGZkMDJiZGUzLCAweDY2Y2ViN2U0LAotCTB4OWJjZjJiY2EsIDB4ZjkwZmQ3ZDEsIDB4ZmY5YjNlZmQsIDB4ZmRkMzhhMGQsIDB4NmUzMGNlY2MsIDB4MjdiMjU0MTQsCi0JMHgxMzFmMTFjNiwgMHg2ZmQ4OTlhNSwgMHhiZDJmOTA5OSwgMHhjZDZiYTFiZiwgMHhjNDYxNWU3NiwgMHhiOGIwM2U3YywKLQkweGYwM2U3Y2M1LCAweGY5ZjM1NjhhLCAweGNjOWIxMWMwLCAweDhjYWYwM2U3LCAweDhlMDdjZjlhLCAweDU0ZGUzZWRhLAotCTB4YzZiYjEzMWYsIDB4ZmI2YzdlZDQsIDB4NWM3ZDUzNzQsIDB4ZjZhNmYzZmMsIDB4MzdjZjBlMTMsIDB4ZjhlZWFmZDUsCi0JMHhhNGZkYTliMiwgMHhkZTlhNzc2MywgMHgzNGFjZTk0ZiwgMHg2YTdhOWZiZCwgMHg2ZDdlYTliNSwgMHhkYTlhYmZlZiwKLQkweGZkNzE5N2M3LCAweGU0N2VhMDc1LCAweGZhOWU2MzU0LCAweGNkYWE1NTgxLCAweDBkNTdjZjhiLCAweDhjNGI3OWI3LAotCTB4ZmU4MzczY2YsIDB4ODM0YjJjMTIsIDB4ZDJhNzY3ZTgsIDB4NTc5YzMzYjMsIDB4ZjdhZTM1NGUsIDB4ZDI2ZWNjNjUsCi0JMHhlNjljMzMzZiwgMHhlMjI1YzdiYSwgMHgyZmMwMDUxMCwgMHgyZTAxZmM0MCwgMHhiYzgxNWNiMywgMHgxZTQwYmFlNSwKLQkweGI1YTZlYmYyLCAweDgzYzc4NzBjLCAweDQwY2IwYzU2LCAweGNiMzkwMjc5LCAweDljOWU1ZDc1LCAweDkzYmI2M2U1LAotCTB4YjFlYmUzMmIsIDB4MDAzZWVjOWUsIDB4MmVmOTEwYjUsIDB4YjI5YmY5NDIsIDB4ZTMyZmY3MzgsIDB4ZmUzMjE3M2QsCi0JMHhjMmE1NDQzZiwgMHg1ZTRhMTEyMiwgMHg3Yzg2MDE2NywgMHhmNWY3NWQ2ZiwgMHg4ZjhhZGVmNSwgMHgyN2M3OGI4MCwKLQkweDA0ZjBmZTFkLCAweGRjM2YyY2M1LCAweDRjNTVmMGRmLCAweDkyZjgwYzUwLCAweDc2YTY3NWJkLCAweDQ5OWNmZjBlLAotCTB4ZWY4OWY3YzYsIDB4ZGZjYzkzNDIsIDB4YTVkNTM0MmQsIDB4N2YyOTczZTUsIDB4NzY1YzE1MjgsIDB4NGY1MTkyZGYsCi0JMHhlN2IzN2U4MCwgMHg3ZjUyYTYyZCwgMHg5NmQwYmNkZSwgMHgwNmYwNWYzNCwgMHhjM2Y0NjdkNywgMHhjOWZmM2NhMywKLQkweDgwZGRkZjYwLCAweGZkOTMzOTc0LCAweGY3OTg0M2VhLCAweDJmNTE3MmI2LCAweDBlNzllM2Y5LCAweGQ0NDg3ZWIzLAotCTB4M2EyZjNkZjksIDB4YjNkNjhmM2MsIDB4ZWJkZWI4ZDEsIDB4NDE5NmRhZTcsIDB4OWE2ZGQ2MjEsIDB4ZjNlM2IyZWYsCi0JMHg2MWFmMzE3MywgMHhmZDNmMGE3MCwgMHhjNzlmMzEwMSwgMHg5NmEzMjNlYiwgMHhhNzMwNjMyMiwgMHg0MTc5M2NlOSwKLQkweGRhMzY3NmJjLCAweDllNDU0MzYxLCAweGU0YjY0M2Y2LCAweDJlNTU1M2Y5LCAweDQ0MGNhZWJlLCAweDgyZjY4ZDQ1LAotCTB4YzEzZWQyYTYsIDB4NzlkZmYyOTksIDB4NTVhYmY1MzAsIDB4ZmYyMTU3MGUsIDB4YTNiNjM5ZGUsIDB4MGVhMzlmOTQsCi0JMHgzZjdlNzhmOCwgMHg3N2Q3NWI4NywgMHgyMWU4NWEwNSwgMHg2MDA1NWZkNCwgMHhmYjBiZjliNiwgMHg1MTcwMzNjMywKLQkweGJjMjE0ZTY4LCAweDA1YjJjYTZmLCAweDRhZjdhYTM0LCAweGViZjhkZTc0LCAweGJlZDAzMzIwLCAweGMxMzI2ZmU5LAotCTB4MGE2MDc0ZDcsIDB4NWFhOTE1ZTUsIDB4Mjc0NjQ1OTgsIDB4N2U0NGM5ZTYsIDB4ZjBlZmJlODIsIDB4ZTQ0ZGY2NjEsCi0JMHhkNTVkMzZiZiwgMHg5MTg4ZGU3NywgMHgzYTg1YWIzZiwgMHgzNzBmZGZiMCwgMHhhNmRjNjlkYSwgMHg3ZGU5OTJlOSwKLQkweGVhYmFkNjgxLCAweGRlNTFjMDEwLCAweDRiZjE0ZTk2LCAweGU0MGRkMzY1LCAweDBlM2VhOTdmLCAweDEyZTNkMzRmLAotCTB4M2MxMTJjMWIsIDB4ZTFlZWNlM2MsIDB4N2MzYzAwZjgsIDB4MjY3MGYxMDUsIDB4NGQ5MWY4NTgsIDB4YWZiYzM0OWYsCi0JMHhiY2U5NTBjOSwgMHg3MTE0OTBlOCwgMHhmYzNhNmQ4ZSwgMHgzYTI2OTFjMSwgMHhjMzMwOGRlNywgMHhmNmZjNmYyZCwKLQkweDNmOTg0M2FhLCAweDgwN2E3Y2YyLCAweDJlM2VhNGE0LCAweDc3OWU2YWU4LCAweDFiZmNmNjczLCAweDFhZWQwNGJmLAotCTB4MWUxOTkzNWYsIDB4YzI3N2YwZjksIDB4OTFmMzRmMWEsIDB4NzgyNGQxYTMsIDB4ZjAwNmU5ZDcsIDB4OTU3ZTQzNmYsCi0JMHhmOWE2Y2QzNywgMHgyZjdhMGExNiwgMHgzYWUzN2EwNywgMHhlNjg1YjNlMywgMHg2ZDczZmQxMCwgMHg5ZDZiZTcwYywKLQkweDA3YTEwZWM3LCAweDg1Nzk3MTllLCAweGY5NzM5NmZjLCAweGY1MWQyZGYzLCAweDczZDIwNGM0LCAweDczZmZkODZkLAotCTB4NzNmNjk0YWUsIDB4ZGQ4OTJiOWIsIDB4NTE3YmE5NzUsIDB4MWM3NjE3YWEsIDB4Y2EwZTUyYzIsIDB4ZDQyN2VlMDEsCi0JMHhjZmRhMzcwZCwgMHhlMjdmMWZhMCwgMHg3MmNkZjgzMiwgMHhiMDRiZDdjNiwgMHhlMWQ5NGJkZiwgMHg2NWEwNGFiNSwKLQkweGVkYTVlMTc4LCAweDkwY2ZiNDM0LCAweDBjZmI3NTBmLCAweGU3MTQ3OWU2LCAweDllOGIwYmY5LCAweGEzZjVlODM3LAotCTB4NDQ5OWU2YzksIDB4ZWQ4ZWJmYWYsIDB4OWUzOTdlNGUsIDB4YmQwMjdlZDQsIDB4OGU2NDc2NGUsIDB4NjVmZjVjOWEsCi0JMHhkNDdhNzFhNCwgMHhmOTQ2NTU3YSwgMHg5N2Y2Mjk4NSwgMHhlZGM5Njk2YywgMHhkZmViNTRjNiwgMHhhMjkwZmNhNSwKLQkweGMwN2VlNjgxLCAweDg0N2YyMTZlLCAweGRmYjRhYjk1LCAweGNkODNmNjc1LCAweDNjYzcwZWY3LCAweGYyODhhZDIxLAotCTB4OTNmNTUzODMsIDB4MDRjOTc2YmYsIDB4MjJiZmNmODEsIDB4OWRmYzc0MWUsIDB4ZjAxNWUwYjMsIDB4ZWJhNGQ3ZjksCi0JMHhkM2UwMzU2NCwgMHg0YjI3YzI2NiwgMHhmNDdiMGNiYiwgMHgzMmJiOWZkMywgMHgxNmVhMTc5ZiwgMHhlMDc1ODc3OCwKLQkweDE2MDc1YTJkLCAweGYxOGE1OWJjLCAweDdmMzc5NTk3LCAweGE3YzBlYjQ0LCAweDM5YTE2NzFlLCAweDBmYzdhMDhlLAotCTB4MjFkZjljNjAsIDB4ZmMxN2JhOWUsIDB4M2I3ZGM0NGQsIDB4ZjhkOTVlMjksIDB4MTdiYTA4ZmMsIDB4YWViYTY2YWYsCi0JMHg3NDljZWE0ZiwgMHgxMTcwNzJlZSwgMHgyZWNjZTdkMSwgMHgzY2UxMTA0NywgMHg2NmUzYzU5MywgMHgzYTRkNzY2NywKLQkweGY3OTlmMTg0LCAweDE5NjcwZmVhLCAweGQ5ZTY3Y2U5LCAweGU4NzZhNWEzLCAweGEzY2VjY2VmLCAweGY3ZTkwYWE1LAotCTB4OWRkZWU5YTgsIDB4MmFiZjBiOWEsIDB4M2Y1ZTdmNDUsIDB4NzdjN2QwZGYsIDB4ZDNlYmU0Y2UsIDB4M2YzZjgyNzUsCi0JMHg1ZTMwMWUyOSwgMHgwYTUxZmI0ZiwgMHhiYmVkMTg3YiwgMHg5YjU0YmMzZSwgMHg0OTljMTVjZiwgMHhmMTE0YjM3ZiwKLQkweDBlYjk3ODAwLCAweDQzZDNhZWU5LCAweDMzMmI4NzhmLCAweGRjNjA2NjNhLCAweGZjMGJmN2I2LCAweDJlOGRhOTNlLAotCTB4ZTM1MmE3MWUsIDB4Y2Q3Njk4NzUsIDB4ZTM1Yjg3OWMsIDB4YzQ3NWE2NTgsIDB4M2I1MGVmMjgsIDB4ZDJjNzExZDYsCi0JMHhjNDFiZDlkMywgMHg3Njc2YTdlZCwgMHg1ZmIxZTdlNywgMHg3ZWVmMjllZiwgMHgwNmY1NjdhYywgMHhkMGM3ODczZSwKLQkweDA2YWZlNzY1LCAweGJiN2MwM2JkLCAweDcxZmFkZTcxLCAweGY3ZTk0ZmU4LCAweGQ5OGFmOTZiLCAweGUwYjFjMmM4LAotCTB4ZTI1ZTYxYmYsIDB4MmRjYjhhNTgsIDB4ZTYwN2VmYzAsIDB4NzFjNDFlZGEsIDB4ZjM3MzI1YTUsIDB4NmM1YzgxOTYsCi0JMHg4Nzk0YThmMiwgMHgxYzA4Y2NhOSwgMHhmMzdjMjNmNiwgMHhlY2VmODIxNCwgMHgxN2RmOTk2MSwgMHg4NWI5Y2YzMiwKLQkweGZjNjdiZjlmLCAweGZkOWI5MjFlLCAweGE3ZDRiZWI0LCAweGMzZTNlN2U5LCAweDJhZmViODg1LCAweDFhNTE2Y2FjLAotCTB4ODVhNzA3ZDQsIDB4ZDczMmMwZWYsIDB4MTBmYzMxZDYsIDB4ZjYzYWU3N2MsIDB4NjA5YzAyOWIsIDB4ZDBiZmMxZTksCi0JMHhjYWJiM2FiZCwgMHgzZjcxZmI0MiwgMHhlNGI3NzdiYSwgMHhjN2ZhYzJkZiwgMHg3ZTg1ZWJmZCwgMHg0OGVmY2JkMCwKLQkweGVmMzFjNzc1LCAweGViYmVmZWFjLCAweGVjN2M2MTY2LCAweGJhM2FhZTNiLCAweDgyZmUwNWY3LCAweGU3ZjQxZjRlLAotCTB4MzJjYWRmMGEsIDB4NmE2OTFjNjEsIDB4YTE2YjljZjMsIDB4ZTNmNzg3NmUsIDB4Y2Q2OWZiZjAsIDB4NTc3ZWQwNGQsCi0JMHhhZjFmMzg2NiwgMHg1MzRiNzFjMiwgMHhjMTBmMGY5YSwgMHhiNWJjYTMzYSwgMHhjZDI5YjRmYSwgMHhmZTY2MzAxMSwKLQkweGUzY2JjZDM1LCAweDEwYjg1YWVkLCAweGY3NTdkNGU5LCAweGE4NmRkZDQyLCAweDg1NzUyZDNiLCAweGQ1NzlmNWQ3LAotCTB4ZTUwYmZjMWMsIDB4YzNkY2FlOTUsIDB4ZDljYTJkZWYsIDB4MWJkZjhmMzMsIDB4ZWU4ZjNlZDcsIDB4MTM0ZTZiOGQsCi0JMHg5YTYzNDQ3YSwgMHg1ODU2M2NmMSwgMHhmODhiZGYwZSwgMHgxOTVlOTJlYSwgMHg4ZjQ4ZTVjZSwgMHgyZjc4YTY3YiwKLQkweDU5YzM5ZWUyLCAweDA2ZTNjNTFkLCAweDYyZWVjMWUxLCAweGJjNzhjYmI0LCAweDUyZjU4MGIzLCAweDhhZWJjN2E5LAotCTB4NjFjYTgwNTgsIDB4NDhlNTQ0MmMsIDB4NTVlNTRhZDYsIDB4NjhlNTQ2MmMsIDB4MDk2NTQxZDYsIDB4YzAzMmE1ZWIsCi0JMHhlMzk2MzJiYywgMHg2Y2NhODA1OSwgMHg1OWQxZGQ1YiwgMHg2NjdmNGZhOCwgMHg3YzNhN2QyNywgMHg4MzAzYWFmYiwKLQkweDQ0ZGU5MTE4LCAweGM3OGQ2NmI3LCAweDY1NmJkNmU5LCAweGRjYmMxYWQ5LCAweDNmNTBmODI4LCAweDM0OGQ1NTU3LAotCTB4ZGI2MmJlMDMsIDB4ZTg3ZWM4ZjMsIDB4ZGVmNjMyMTIsIDB4ZjcwNDViMjYsIDB4ZjlhM2Q5NjMsIDB4OWM1YWJjZjQsCi0JMHg3ZTNlYWU0NywgMHhmN2NkZWM4MCwgMHg2MGYzYzk4MiwgMHhiYjhiYzA1ZiwgMHg5NjNlZDMzZSwgMHgzZWQ2N2Y1OSwKLQkweDQxYmUxMWFhLCAweDM5NDA1ZjdlLCAweDQxNzA4OTU5LCAweGEwZWNlNmRkLCAweDc1ZjY5NzczLCAweDNlZTkwN2IxLAotCTB4YjRlYzY3YjgsIDB4MTg1NTVhYmYsIDB4YmQ0M2IzMmEsIDB4YTA2MTc3NmEsIDB4N2E4NzIwYzEsIDB4NjY1NTcwM2UsCi0JMHg5NmJjNzcyYywgMHhmNTg4OGYzOCwgMHhkZjgyNWE3MSwgMHgyODZmYjY1NywgMHg3N2ZiN2RjMCwgMHhmNWE3MWZmNywKLQkweDg1ZTk4N2ZlLCAweGI2OWE5ZjM0LCAweDRkZDg2YWEzLCAweGNhMmE3ZWZiLCAweDdkMzliYmNkLCAweDk3ZDkzYWY2LAotCTB4MDY0MGFlY2QsIDB4ZmRlOTc3OWUsIDB4NGI2ZmJmMzksIDB4OTRmN2RmYzcsIDB4ZGY3MTk3NWUsIDB4MjgzZDcwZTQsCi0JMHg1ZWU5YjA0MiwgMHhmOTUxZjdhOSwgMHg5NTNmN2E4YiwgMHhiMmY3YWIzZiwgMHg0NzAwZjgyMCwgMHgwNGRhOWRlYywKLQkweDMwY2U0ZjljLCAweDdiZmJjYTJmLCAweDQzMmJkOGRlLCAweDdjYmU2MjI3LCAweGU2MDFiZjkxLCAweGNlZmQ5OGQ3LAotCTB4ZGVkMDEzZmQsIDB4NzQwMWM4MGMsIDB4NzVlZWVjMGIsIDB4ZjNiNDI1MTMsIDB4Y2YyOWYzN2MsIDB4YmM2ZDFlZTUsCi0JMHg0ZjAwOGZmMywgMHhlNjcwMTJhMywgMHg2YjJmYjhjMCwgMHhhMDJiYjUzYiwgMHgyNGZjZmViYywgMHhlNWZmY2UyNywKLQkweDBmY2QzNmVjLCAweGRkYzYxYmY1LCAweDI0N2RjNWVjLCAweDAyZTM2ZmU4LCAweGZhMmVjZmVhLCAweGY2YzRlZjFiLAotCTB4NWEzZjYyZjcsIDB4YTJmZDlmYTIsIDB4Njc3YmJkN2UsIDB4NTQzZmJlMzYsIDB4ZWJlZTA4Y2YsIDB4YjFiMmRhNzMsCi0JMHhiZDFmN2ZiZiwgMHgxM2YxOTVlYywgMHhiYTQ3N2VlOSwgMHgxN2NhY2EyZiwgMHg2NmNiOWZkNywgMHhlNmNiYjA0MSwKLQkweDQxNjAyYjllLCAweGQzOTNjN2EwLCAweGY5NDJhZWViLCAweGQxYmZkMzU3LCAweGEwZmQwNGVjLCAweGEyNTVkNjE0LAotCTB4YjdhNmYwYmUsIDB4MWY0MTNiMzQsIDB4OWQwMWIwNmMsIDB4YTU5ZjU0YmMsIDB4Y2M3MDA5NWQsIDB4YjE4MWZhZTQsCi0JMHhhNDMyZTY5NiwgMHhjNjJiYjAzYiwgMHhhZThmZTFlMywgMHhmYTgyMzk5YiwgMHg3ZWZlMWFlMywgMHhkNzkxNjBlNiwKLQkweGY3ZTNlZDAwLCAweGVkMGIzMWJkLCAweDkxOGE2YWIyLCAweDY2ZTZiNjMwLCAweGE0NzlmNzQ2LCAweGNlMmEzN2IyLAotCTB4YzFhOGIzYTUsIDB4YmE2MWZiYWUsIDB4NDJhN2U0OWYsIDB4NGMzZWQwODksIDB4YmQwZjM5YzUsIDB4NWNmZWZjYmYsCi0JMHhmZDg4NzNhNiwgMHhmZGU4ZDNmYiwgMHg3ZTc0YWJlMSwgMHg2NzljNTIwYSwgMHhkZjIyNzNjZCwgMHg4ODFjMTVjMywKLQkweGQ3NjNiZWVkLCAweGI4ZjYwZmU3LCAweDU3ZDVmMTEzLCAweGNjM2UyODhmLCAweGZmZTdkMDQzLCAweDQ5ZmZjZDI4LAotCTB4ZWYxZWYxMzUsIDB4ZjdkODFjZjUsIDB4N2ZkMTA1OWUsIDB4ZWEyNjkyM2UsIDB4Yjc5MjI3OTEsIDB4MmZiNGIzNGYsCi0JMHgzNGNmZWJkMiwgMHgxZmQ2OWNjZiwgMHgxMmI4ZWY5ZSwgMHg1N2I0Mjc3NSwgMHhlYWZhM2JjZSwgMHg5YjA2ZGYwOCwKLQkweDdkMmNiZmE1LCAweGZjNjllN2ZjLCAweGI0NTk0MmFhLCAweDUwNTJmN2RmLCAweDcyM2JkMDMxLCAweGFiZWYxOWE4LAotCTB4NzhlZjQ1NGQsIDB4OWI5YjJmZGEsIDB4YWUyM2ZiZTAsIDB4NWZhZDE5NTAsIDB4YmY1YTMzMzcsIDB4MDYwMmVlNTAsCi0JMHhlMzRmMTgzZCwgMHhiOWM1NTVmZSwgMHgyNDdhMjY1MSwgMHg3YTYyNTBlOCwgMHhkMmU0MTI3ZSwgMHg3Y2JiNGZiOCwKLQkweGZlNzQ1ZGM3LCAweGU3ZTY5ZTI0LCAweDNmMDhiMGZkLCAweGIxNjhmNTU3LCAweGZmZjY3ZjY5LCAweGUxNjlmMWMzLAotCTB4YzcwMTRiMjgsIDB4MWMzM2JmY2MsIDB4M2ZlNDlhNTcsIDB4ZDM2OGM3MDEsIDB4Mzg3ZWZmZjMsIDB4NjM4MGE0NjYsCi0JMHgxYzE1M2ZmNiwgMHgyZjQ1N2I1NiwgMHgyYmRhMmZmZiwgMHhjYWJkYTM1NywgMHg5ZDZjNDFlMywgMHhmN2ZkY2U4ZCwKLQkweGU1MmEyYTY0LCAweGM5OTM2OWVmLCAweGUxOTUyMDRlLCAweGRmNjhlZWE3LCAweGNkNzc5ZjJmLCAweDhiMWM3YmZjLAotCTB4NjE1ZjlkYjEsIDB4ZDQ3OGNhMmQsIDB4MTE2NzExNTcsIDB4ODU3Zjg3ZWUsIDB4MGZjZjAzZjcsIDB4ODY4M2EwMmIsCi0JMHgxZjY5M2E2NCwgMHg1NDM0YmZkYiwgMHhmZTA1ZmI4NSwgMHg1NDM1ZTU4NSwgMHg1NDZlZWI3YSwgMHg1ODdhNWY3MCwKLQkweGVmYjQzOGVmLCAweDRmZDk2YjM2LCAweGRlOTMzMzM3LCAweDJmYmFkMDhiLCAweGI2YmIyMmFkLCAweDliMjc5YmUzLAotCTB4NjA3OGRmNzEsIDB4NjhjM2RkNWEsIDB4OTM5MTRiMDcsIDB4MjRhNzg3Y2QsIDB4ZDZmNWNmN2IsIDB4ZDE0ZmQzMmYsCi0JMHhjZTlkMTRiYSwgMHgyOTNmNDJhZSwgMHgwZWM2OGFlYSwgMHhiNTlhM2QyMCwgMHhmMGEzZDIwMCwgMHgyMjk2ZDE5YiwKLQkweGRhZjcyYmE4LCAweGFmMDAwZDAyLCAweGJlZGQxOTkyLCAweDFlNTdlMDA1LCAweDRkNzY0ZTE4LCAweGI2MWZmNTE0LAotCTB4NmU4OTQwN2YsIDB4ZmE5ZGZjYzEsIDB4MWJiN2M1MDAsIDB4YTViNDdkODUsIDB4ZjMxN2FlNjksIDB4MzA5OWVkOTgsCi0JMHg3YWU1MjA0YiwgMHhkMDk3ZGQ3YiwgMHg3NTM0ZDc1ZSwgMHhhZTBhNzNiZCwgMHgwMTk2ODEwNywgMHgwMWY3NWU1ZSwKLQkweGIxMTY0ZjVjLCAweDc4YTY2NzIyLCAweGI0NmZlYjBmLCAweDFhZjIwZDgxLCAweDZmZTk3ZWVhLCAweGJhYjc5ZjMyLAotCTB4ZDcwZDM4M2UsIDB4OGM5NWQ1ZjksIDB4ZjcwODdmN2YsIDB4ZDJjYzllODksIDB4ZmJkZmMyZjEsIDB4NGY1Yzc1MGQsCi0JMHg3ZDQ0ODY5NCwgMHhlYjdiY2MyNiwgMHhmN2RmNWM2MywgMHhkMWViYWJhNiwgMHg0NGY5ODdkZSwgMHhjMzFiOGVjOCwKLQkweDYzMGU5M2U3LCAweGY0ZmUwMDdiLCAweGJlYjQ0NTcxLCAweGYxN2Q2MTQ2LCAweDBhNzFmYmUwLCAweGY3ZDJmNzlkLAotCTB4NmM2MzljODMsIDB4ZWQ4NDFmYjQsIDB4YzJlYTdlZTksIDB4NzQyZmRhMjIsIDB4Mzg4MTYzY2UsIDB4NjllNzAzZTYsCi0JMHgwOTUxN2Y3YywgMHgzYjNjYzRjZSwgMHgwNGJmMWY3NywgMHg4YWE2Y2UyOSwgMHhhMjZkMTJmZCwgMHhhZDIwNWYzOSwKLQkweDk5YjQ1YmU5LCAweGZjZGEzNjllLCAweDVjY2MzOWRjLCAweDlkYzBiMDc3LCAweDYwZWM4Zjc0LCAweDI2ODFiZTRiLAotCTB4YjAwNjg3ZjYsIDB4MTQ1N2U4NDEsIDB4NmMzNjIyZGIsIDB4Y2E4NWRhMDcsIDB4NzZkZjc4NTEsIDB4ZWM4MTFlMzEsCi0JMHgwYzU4ZmFhNCwgMHgzMWUzMTY5MSwgMHgwYzFkM2YyYiwgMHgzMjgyYzA5YiwgMHg2NDg2YTM4ZiwgMHg2OThlM2JmNCwKLQkweDA3OTQ3Y2UxLCAweDY2ZTIyNjlmLCAweDhkYmY3ODgzLCAweDM2ZmY2MWExLCAweDhmZjE0ZmNiLCAweGY1ZWZiNDdjLAotCTB4YjM3OWM2ZmEsIDB4NGE5MWZlMjksIDB4ODg5YTIyYmUsIDB4ZWMzNmRlZTcsIDB4Y2U5YWY3YTIsIDB4MTkxMDA3MzgsCi0JMHhjNjhlNmZmNCwgMHg2ZjZiODFmMywgMHhkNzc5ZjdlMiwgMHg5NDdlZTFlZSwgMHhlOGIyN2VmZSwgMHg5YzQ1MzZiNywKLQkweDMyN2FlNDEzLCAweGQ2M2RmOWMyLCAweDQ4NWVkYjM5LCAweDBlN2NhY2Y3LCAweDc1ZjM1NmU5LCAweDZiNGZjMzFiLAotCTB4ZGZiOWM3ZTIsIDB4NTNiN2IxNjYsIDB4MTU4ZGExZTUsIDB4NWY5ZjRkZmUsIDB4ZjIxOGZjMjMsIDB4YzJjZTkwMmQsCi0JMHhkMmVhNTk3ZiwgMHg0ZmJlNmVlOSwgMHhhMjQ3YmY0MiwgMHg0ZjRkYzg0NywgMHhhOGM0NGFiOSwgMHhlYTA5ODM0NSwKLQkweGU5ODUzNzM5LCAweDMxNzI4MjFlLCAweDY1NGRmMjlmLCAweDJjMWZlOGI5LCAweDgyMjVmZmRkLCAweDc5YzZkOTczLAotCTB4NWU0YmRlMmEsIDB4ZTEzMTcxYmUsIDB4NTJlYmM3NDUsIDB4YTdmMDdmOGIsIDB4OGQxNzA5ZDYsIDB4YjRmNmU5YTcsCi0JMHhmZWU4MWZlZSwgMHg0ODRmZDU4MCwgMHg0N2U3ZmRmNSwgMHhjYzNhMjdlZSwgMHgzZWQxOTVmNiwgMHgzYzFhZmZlZiwKLQkweGUwNzU4NmNmLCAweDY3ZGUyMGI2LCAweDQ3M2ZmYmE1LCAweGY5OGVlY2VjLCAweDczNjU1Y2Y4LCAweDJlYzNmOWYwLAotCTB4NTQ1NjBmN2UsIDB4ZDg3NTgzZGMsIDB4ZGY4NTljNWYsIDB4N2YzZTI5Y2QsIDB4M2IyZjk2MjUsIDB4ZWRlYTFhNjMsCi0JMHg3YTNlM2Y5NywgMHg0YTBmZjkwMywgMHg4ZDNjYzM0YywgMHhmZmY3MGEzMywgMHhlNzYzM2FmNCwgMHgwYmYzOGE2NCwKLQkweDdlZWY1ZmJjLCAweGI4NjdlZTk1LCAweDc0ZjdmMGJlLCAweGZkYzZiZDNlLCAweDNmNjM5ZDJhLCAweDNjYTc2NmQzLAotCTB4YjE1ZGViYmIsIDB4MWRmZGUzNmMsIDB4Y2RlZTE3ZDcsIDB4NzQ3ZTE4YmUsIDB4ODA4OGUxZmYsIDB4N2JkMTcwZjcsCi0JMHg1NzFhNjEwNSwgMHhiNzA0NzNlNCwgMHg1M2QyMTc0YSwgMHhlN2NkNmY3ZiwgMHgzZTk4ZWNkOCwgMHhhNjY5ZTUxMywKLQkweDJmZjllOTI2LCAweGNkOTdjODhkLCAweGZjOTM4N2YzLCAweGU4OWJjZjY0LCAweGYzOWJmZGU0LCAweGM3OTFiMjRkLAotCTB4NDdjZmVlYWUsIDB4ZWY1OWZmM2EsIDB4ZjEyMzU5MjUsIDB4ZTBhOWVmNzMsIDB4MTliNDA1YWEsIDB4M2RjNGQxZDcsCi0JMHhlZjNkMmEyNSwgMHgwZTg2ZjExNiwgMHg1NGY2ZmIxZiwgMHhhYzc5OTc5MCwgMHg3NWZiNGVjZSwgMHhmZDE3N2VlMiwKLQkweDQxNzk5NzVlLCAweDIyNDJmZGNiLCAweGQ2MjQyYWZmLCAweDVlNDQzN2MzLCAweGE3ZTYzY2Q1LCAweDM3NjgxN2VmLAotCTB4NzViZjUxZDksIDB4NmU2MGZiODgsIDB4ZjFiYjYxNjIsIDB4NDI1ZWE2N2MsIDB4YjZiZDI2YmYsIDB4N2ViOThlNjAsCi0JMHhiNzVjYzg3MywgMHhlN2E4YTNkZSwgMHhkZWI0ZmNjZCwgMHg4OWVmMTUzZiwgMHg5OTlkZmJkMywgMHhkM2VjM2Y0MiwKLQkweGIwM2M1ZDNlLCAweDY3NTA3ZTJmLCAweDcxZTgxZjhlLCAweDQzY2MxYWJmLCAweDFlMThmZGE2LCAweGU0ZTU5YmY3LAotCTB4YmI4ZjRmZTMsIDB4NTZhMzdmNjgsIDB4MTZlMzM3NTMsIDB4YzViM2VhMGMsIDB4YzY5NjdjZjAsIDB4OGJjNjBkZjUsCi0JMHg1OWEyOWVmMCwgMHg2ZjFmN2U4YSwgMHg4MGU3YmY1NCwgMHhmOTA5Y2JiZSwgMHgwZGRjNjMzNiwgMHg1ZWU5MzBmMywKLQkweGRmMWU3MGFiLCAweGEwNzIxMTU3LCAweDBlY2UxOWM3LCAweDVlNjQ2N2YzLCAweDRkYjViZjg0LCAweGJhOWVlOWIyLAotCTB4MTNiODk1ZmIsIDB4MDBmZWUwZjksIDB4ZjA0YWMzY2YsIDB4NmYxNGQ0NzEsIDB4NDlhOTM2ZDUsIDB4ZWJlYmI3ZWYsCi0JMHg5ZTBhZjQwNywgMHgzZWUwNzI0ZiwgMHgwMWY3ZDAyZiwgMHhjNjM1ZTgyNSwgMHg4ODdiMzQyMywgMHhmNGY3NzZlYSwKLQkweGYyZjIzZjBlLCAweGUzNjYxYjAzLCAweDk4OGQxMDU1LCAweGNhNzYwYzFmLCAweDY5NTdkYTNiLCAweDAzZGI3NjdkLAotCTB4NjIxZWYxODcsIDB4YzdlNmRiYjcsIDB4YjM0MWI4ZjUsIDB4YTM1N2JlZDEsIDB4ZWZlYjQ5Y2YsIDB4OGJkYWE5N2EsCi0JMHhlYmY3YTRmYywgMHhhZTA4NTRlZSwgMHgwNjUxNWFiMywgMHhhYmZmMDhiYiwgMHhkYTMzNGZlMCwgMHg4N2RmMzFhZiwKLQkweDllMzdkZmY1LCAweGRkZmFlZDQ2LCAweDBhNzA3NWJmLCAweDEzMWQ1OWM1LCAweDE3YmMwMTZkLCAweGIxYWMxZDVjLAotCTB4Y2ZjOTI0M2YsIDB4OTM2ZjFiZWMsIDB4NTQ5ZmI0OTIsIDB4Nzc0OTRmZjgsIDB4ZjUwN2E3N2IsIDB4N2M5NmI3NDMsCi0JMHgyZGM4YmEzZiwgMHgzZmMyZmI4OSwgMHhiMjJjM2NhNSwgMHg1ZjMzYzNjNCwgMHhlZmM3MWUxZiwgMHg4YTFiY2VhNSwKLQkweDhhM2U0OTBiLCAweDJiNmYyMGRjLCAweGNjZjU5ZGM3LCAweGU0N2M5M2YwLCAweDJlMWM3Y2YyLCAweGFiZGE4ZGI3LAotCTB4NmMzNzllNGUsIDB4MTUyZGE3YmUsIDB4NDk3OGVhM2YsIDB4YzhlNTA3ODUsIDB4MzdlNzhjNWQsIDB4N2Y3MTk5ODYsCi0JMHg0M2M1MmRjZSwgMHg0ZTMyZDc5NCwgMHhiOGFmYmE0OSwgMHg1MWExZTA1NiwgMHhjYWJmMTAwOSwgMHhiODljODZkNywKLQkweDRmNjQzNDBlLCAweDdmZmVlMjc3LCAweDI4Y2ZlMmIzLCAweDg4ZjBmYjQ0LCAweGQ2NmUzMGNjLCAweDhkY2IzNWU0LAotCTB4ZmI4OGI2NWUsIDB4NmRiYWU3NDUsIDB4NzU1OWVmNDksIDB4ZWVmZjkyZGEsIDB4YmU2ZTVkY2UsIDB4OWZlY2I0NGUsCi0JMHg1MmRlZTc0MiwgMHhkNDY4MDlmMSwgMHhhNWE1ZDkxMCwgMHhmM2VmMTc4YSwgMHg1ZTFjZWQ5NiwgMHgwNGZjOGE1NywKLQkweGZjNTRkZmJkLCAweDE3N2VlZjcxLCAweDYxOTkzZGZmLCAweDY1OWYzYTRlLCAweDljNDlhZjFkLCAweDc4MDI2YmMzLAotCTB4MWE2ZGNlZDAsIDB4NmM3ODQxZGMsIDB4ZDE3OGE4OWEsIDB4ZDNmOTc2OGUsIDB4NWVkMGQzOTgsIDB4ZWY0ODljYzksCi0JMHg3OGQ5NmFjZiwgMHhhNTM1OTAyNiwgMHg0ZjFkM2JlMCwgMHg5ZjZkYjlkNywgMHgxNmMyZmY4ZCwgMHgwZGY5Y2JmZSwKLQkweGZjMGRjYmM1LCAweGZmMTkzYWI3LCAweDk4M2M4NzVkLCAweGRlMzdlMWMzLCAweGYyNjRhOWFiLCAweGJjMmIzZmZkLAotCTB4ZGUzZTdlN2EsIDB4OWZjYzZlODcsIDB4ODQ1ZjA1MmEsIDB4MWM4ZThkYzcsIDB4ZWMwYzNlOWEsIDB4MzAzYWJlZGQsCi0JMHg4NmQ3OGMzOCwgMHg3M2ZiOGU3YSwgMHhkMTMzYTc3MSwgMHg2NDdkZDFiZSwgMHg3NTQyOTM3NiwgMHhkZjA3ZGYzYSwKLQkweDZjZjdmMTA1LCAweDM5ZmRjNGRhLCAweGMxZjNhODM1LCAweDQ1YmVhYThmLCAweDlmNTg1ZTYzLCAweGJiMmNjYWVmLAotCTB4ZGE1MWU3MTcsIDB4YWI5ZjgwNzEsIDB4ZjlhMWNiNjksIDB4YWRlZjhiNTcsIDB4OWMzZGM2ZjAsIDB4MmYxZWUzOWYsCi0JMHg4MmM3MTk5NSwgMHg3N2RmYzAzZiwgMHhmMzQ4ZWI2OCwgMHgyZGI3MWM2MywgMHhkNjM5ZGI4YiwgMHhmNWJiY2VlZiwKLQkweGIxNTY4NzNjLCAweGZiNDlkMWRmLCAweGY4MzMzOTEyLCAweDNiYmJkNDdhLCAweGZlYTNmYzlkLCAweGY3ZTA2OWY4LAotCTB4OGRlYzU4NjksIDB4OTQzNjdiYmUsIDB4ZDUxZGQ5MzgsIDB4YzdkMGVlYzIsIDB4ODJjNDVkMmYsIDB4MmY0YmJiZjgsCi0JMHgyNzE2YjFhNSwgMHg4NDNiODdkOCwgMHgyZGY2MzIxYywgMHg3ODBhNWZiMSwgMHg3YzZmYjgwNCwgMHgzZmVkMTQ3MSwKLQkweDA0YmRmZGU5LCAweGNmYjYxMmNiLCAweDkxMmNlZGNkLCAweDNmYzBjZmU0LCAweDZmYmE2NjMxLCAweDM5ZDljNmFkLAotCTB4YmU0N2Y1MWMsIDB4NDZlZGRlMWMsIDB4Njc1OGUzM2YsIDB4NWVkYmQ2MmUsIDB4ZTBmNjRkM2QsIDB4NzNmMGYwYTUsCi0JMHg1MWMyYmY4MSwgMHg1NzFlN2RiYSwgMHgzNWQ2NzE4ZCwgMHhmNDVkOTVjZiwgMHhjNjM1NWQ3YywgMHg1MGZlMGM0MywKLQkweGU5YjM2ZjAyLCAweGExN2ViZjc5LCAweDFmZThiZjNmLCAweDhkMzkyYmUzLCAweGEwOWFlOWM5LCAweDRjOGIzZTRmLAotCTB4MGE3ZDE4YjgsIDB4MjVkMjNkZTgsIDB4MWZkMzlhM2EsIDB4ZGU2MGY5ZjcsIDB4NjA3ZmQ3NjQsIDB4MDllZjI3ZDEsCi0JMHg5ZjRmZmQ3YSwgMHhhZTI2MzY2ZiwgMHg0MGU1M2YwMSwgMHhmMTg4ZTc4OSwgMHg5ZmJjNWJkZSwgMHg2ZmM3OTRmNywKLQkweDE1YjI3ZjVhLCAweGNiMzU1M2Y2LCAweDJjNjk4N2MwLCAweDhkZmE4NGUyLCAweGQxNjdjZThlLCAweGZhZWJkM2ZlLAotCTB4YzdjMTFiZmIsIDB4MzlmZDhjOWEsIDB4ZjJlOTFjYjksIDB4YjkyOGJkNWIsIDB4ZWRjYjdlZGMsIDB4M2MwZWZjMjEsCi0JMHhiZWUwZjcxNiwgMHhmYzYyOGJjNywgMHhlODFmZDhiNiwgMHg3NmI2YjNiZSwgMHgzZDRmZTE5OSwgMHg5NjE0NWMwYywKLQkweDRlODI1YWMzLCAweGViZTFmYmZkLCAweDYwZmYyZThmLCAweDBiNzI4ZTRlLCAweDRhMzk0N2Y5LCAweDZiZmRjYjVmLAotCTB4ZGZlOGNmNWQsIDB4Y2ZiNDc5MTUsIDB4ZWU4ZjFmNjYsIDB4YzhhYzRlNzcsIDB4NzU3MjQzOTMsIDB4MDVmNDQzMDgsCi0JMHg3YmJkZjk2YiwgMHhhMmZmMGI2ZiwgMHhkMzlmZGM1YSwgMHgxOGM3ZGZhNSwgMHhkZTMzNjkxYywgMHg1YTc2ZjViYiwKLQkweDg3ZmQxNDQxLCAweGU1Zjc4N2I3LCAweGVkMWFlNjA5LCAweGYwNTc2YWFmLCAweDFiYmVmMGRmLCAweDdjYTY1NDc2LAotCTB4YzFiYzBmZDUsIDB4OWEyZmVlMGMsIDB4NzEyZWE3ZmQsIDB4M2ZlZThlYWYsIDB4ZmZkZjhiMzUsIDB4N2YzOTgzNjIsCi0JMHgxZGQyNGIzNywgMHg5MWZmYjBmMywgMHg3MmFmNzQ5ZCwgMHhhNzVmMmU2ZSwgMHhjYzdmNzNmNSwgMHhmNjQyNTlkNywKLQkweDU0YWJlMGI3LCAweDBmMzlmNzdjLCAweDgzZDQwZjk3LCAweGFkN2NhNDkxLCAweDBkYmY5ZTlhLCAweDcwYzQ2MGViLAotCTB4NTNjZWU4NGUsIDB4Y2YxY2U4YzMsIDB4NzhhMDE2MTIsIDB4NzQ5NjkyZTYsIDB4YmRlMDMxMTYsIDB4ZjllNGYxZWQsCi0JMHhiZTg0OGIzNSwgMHg0ZWY3MTM2ZiwgMHg1ZTdjZDFiMywgMHhmM2U3YmUwOSwgMHgxYzk3NWI2OCwgMHhiZTBjOWVlZSwKLQkweGZiODliNzBlLCAweDYwOTRkYmM1LCAweGQ1MjllMjNhLCAweDA3OGZhMTNhLCAweDNjYTc0YjA0LCAweDZmMDdmMzg3LAotCTB4ZTZmZDcxYTAsIDB4ZmEyNTdmNzEsIDB4YjI2ZmYxN2QsIDB4YzAwMzdkZjgsIDB4ZDgyN2QwYTMsIDB4OWIxZTFiZmUsCi0JMHhlMmJlYmU0OSwgMHhiM2ZhYWNmOSwgMHgyNGZlYjRjYywgMHg5ZTkzM2VmMCwgMHg5MjdkNzY3ZiwgMHg5MjdkMDk3OSwKLQkweGYyNTFlZjRkLCAweDNhNzhjZWQwLCAweDdiNzVlZmM2LCAweGNlNmRiMGZhLCAweGRiNzQyNDk2LCAweGFhZjRlNDI0LAotCTB4M2ZlZTg1MWMsIDB4NzZlNzE1MWIsIDB4Yjk3NmFhNDAsIDB4NjM5ZWUyNTksIDB4N2MyYjQ3ODEsIDB4ZjljOWM1ZDksCi0JMHhmZTBjYTVlMywgMHg3ZTc0ZjU3ZCwgMHgxYmRlMzM0ZiwgMHhiMjg1ZjM4ZiwgMHg3NWZkMDAyMCwgMHhmNDIyZDc0ZCwKLQkweDZmZTI1ZmZjLCAweDdhYjQ5YzYyLCAweGJmOGZjM2E3LCAweGQzYjVkN2NmLCAweGEyN2E4MTU1LCAweDYyYTNhNzZiLAotCTB4N2U5ZmQ2OGIsIDB4M2I2NjNjYmIsIDB4NGNjZjk5ZjcsIDB4ZjU4YzdmYmYsIDB4NzA1MTc0YTAsIDB4NWZkMWNmYzIsCi0JMHgzZWU5OTc2OCwgMHg5MjdmNmI0OSwgMHhlY2YzNGRjNywgMHhlYzI5ZTdkMywgMHhiOWI5YWZiMCwgMHhlNzRlY2QzZSwKLQkweGYxMTdiMTc0LCAweDU3MmFkNDc1LCAweDFkM2M4NTQ3LCAweDJkOTBmMjE1LCAweDc1ODc2YmVlLCAweDkyZWI4OWM5LAotCTB4MDIxN2VlZGUsIDB4MmNjMzkzZGYsIDB4ZTdjMTdkZTksIDB4YjEyZTAyZGQsIDB4NzZiYzNjMmUsIDB4MDRjM2ZiMDYsCi0JMHgwOGNlN2RmYywgMHg3ZWRhMTljNSwgMHg3ZWMwMmYxMywgMHhkYzc4Y2FiYiwgMHgxNmZkZmFjMCwgMHg5OThjNjdjMSwKLQkweDMzNDllYWVkLCAweGI5ZTYxMmZkLCAweGM1ZTQ5OGIwLCAweGZkYmQ3YzdkLCAweGI3YmYxOGE0LCAweGQzYjlmZmY4LAotCTB4ZGJjNWVjZmIsIDB4ODA3YmJmYzgsIDB4ZjQ5YTJlZmYsIDB4ODFlYjhhNTMsIDB4NjFiNDE3MGQsIDB4YzE4ZmQxNWUsCi0JMHg1ZmY4MzM4ZSwgMHgxZGU4YjJiZiwgMHgwYmFmM2MyYiwgMHhlZmM0ZGE3OCwgMHhlYjhkMzI4NywgMHhmNTVkMmI2MSwKLQkweDc3OWY0Yzc1LCAweDFjYjMwMGY2LCAweGQ3ZmY4MmM4LCAweDk2NDczMjhhLCAweGI5NzQzYzY4LCAweDdkN2M1OTFjLAotCTB4NWNjNGY5ZTYsIDB4NDlkMmUyNGYsIDB4MWU1ODU5Y2YsIDB4YmNhZjcwMDMsIDB4OTBlNmZjNDMsIDB4OTVkY2VmODgsCi0JMHgzMWVmM2UxOSwgMHhlOWRhM2RmMCwgMHhiYjA5N2ViNCwgMHg2ZmRjNGRiYywgMHhhODg5ZGJhOSwgMHg0NjZiYzc0ZiwKLQkweDBlMDIyM2I4LCAweDRhZDdkNzFiLCAweGYzMGQ3ZDcyLCAweGUyYTdiZjEwLCAweGY2MTI3ZWE2LCAweDI2MmJiNzA2LAotCTB4MTY2ZGZjMGEsIDB4YjI1ZjUxZTcsIDB4M2ZiMjI2YjEsIDB4Mzk3NDllMDQsIDB4OTY2MTk1MWQsIDB4N2Y4Y2EyZDMsCi0JMHhhY2RkMzkwZSwgMHhhNDcyN2NmMiwgMHg3ODdkMzI1ZiwgMHg5NDI3ZWQxZSwgMHg3MWMxNjM4NywgMHg0NTcyYzc5OCwKLQkweDVmYTAwYjQ4LCAweGZmMzFkYTVhLCAweDBjZjFlNjAwLCAweDk0M2Y4M2RmLCAweGUxZTM5MDkzLCAweGJmYjE5ZjgyLAotCTB4MmRmYzA2NDUsIDB4ZjA5YjcwYzgsIDB4N2Y4Y2Y5ZjcsIDB4Zjg3N2JiMGUsIDB4ZGYzN2Q2MzEsIDB4N2Q3YTBjZGIsCi0JMHhlNWM2ODY1NSwgMHg5NDJmZmMwMCwgMHg5YTdmOGE4MywgMHhlMDBlODZmOSwgMHhhMDZhYWUzOSwgMHg5ZDBjYWEzYiwKLQkweDhiNjJkYTNmLCAweDNlZDBiOWQ3LCAweDY4MDJjNjNlLCAweDE2Yzc3NzVmLCAweDdmMDBjNmRiLCAweGY2ZTI2Zjc0LAotCTB4ZGY5ZTlmNjMsIDB4N2EwNWYxYzgsIDB4Zjk3YTg2MzksIDB4ZjRjMTYzOGEsIDB4Mjc1ZjUwZDEsIDB4NDU4YWUzZjgsCi0JMHgxNGU3ZGY4YywgMHhjZmQxNDc3MywgMHhjZTQ0ZjVkNiwgMHg3MDMzYmQ0ZCwgMHg3YTY1NzdkZiwgMHhmMGNiODM1ZCwKLQkweDNiN2RhZmJjLCAweGU4NGMyZmI0LCAweDM3ZDQ2YTliLCAweDdkZjZkNGZlLCAweDhkM2E0NjZiLCAweGUyMDllYjg3LAotCTB4NzMzYTU2NjUsIDB4OTc5ZTAwYmEsIDB4ZWUzMjIzMGEsIDB4NDU3NGJlNmIsIDB4ZTdiYzc4ZTEsIDB4Nzg1YTUwZmQsCi0JMHg3ZWY4NmFmNCwgMHgwZTNlMWNkMiwgMHhhZjQ0Nzc2YiwgMHhkMmZmMTI0OCwgMHg4OGFlNzVmNSwgMHg3YzhhZTU0ZiwKLQkweDVlMzRkY2VmLCAweDQ1ZjQyYzdlLCAweGMxZjM5NzgzLCAweDllYmNiZGFmLCAweGNmMWU0OWViLCAweDE3ZWYxMWVhLAotCTB4ZGNlZjVjYzgsIDB4MmVkYzk2NTcsIDB4YzY3YzY1ODksIDB4YjI0MDYzZjgsIDB4MTk2M2UzYzYsIDB4NmY5ZWUyMzksCi0JMHhlYjVmNDI1YiwgMHg3YzQyNzNmYywgMHgyZWRmOGZhNywgMHg5Y2ZjYjVlNiwgMHhlNTlmZTI2NCwgMHhjZGYxMWQ0YSwKLQkweDNkMGE3M2YyLCAweDE1MjJlNWQ3LCAweDc5ZmJlOWZmLCAweDc4ZTExZDliLCAweGJlN2JkNDA2LCAweGM2MDk2MWZlLAotCTB4ZTllZjBhMGQsIDB4Zjg0OGZiZTIsIDB4NTI1MzQwN2IsIDB4MWViZTg3Y2IsIDB4M2QwNmY0ZTgsIDB4MGRmMTg2ZGYsCi0JMHgyNzEzZjNkMCwgMHgxOGY0M2FkMywgMHg5Yzg1OTc1ZiwgMHgxZmY0ZWMxYSwgMHhiNjU5ZWZlMCwgMHhkNDU1NWM3NSwKLQkweGRmNmJhMDYwLCAweGZlZTAxOTdhLCAweGQ5NWQ3NThjLCAweDU3YzRjOTgwLCAweDg5ZDc5ZWE3LCAweGEzZWYyY2NmLAotCTB4MjVlMWQ4NTIsIDB4YmMzYjU3N2YsIDB4YzkzYzYzYjQsIDB4NTc4MTEyZWQsIDB4YzdhNmRlM2QsIDB4NTA3YjE4YjUsCi0JMHgxM2Y3MzFmOCwgMHhlNGNkMjc3ZSwgMHhkZmY4MGRmMiwgMHg5YTNmZjAyMSwgMHg3ZGJiZmZlMywgMHhlYzk1YmZmOCwKLQkweDJmMmU1Njg0LCAweGE1MmI5ZGI5LCAweGZhMmY5MjYyLCAweGE0ZGRmZjRlLCAweDUyYWZkM2MyLCAweDJmNzhlNzdlLAotCTB4MTNmZmU3ZjcsIDB4Yzk1NTUwODQsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RkNWZmMDAsCi0JMHhkNWQ0N2M3OSwgMHhjZWZkZjhiNSwgMHgzMzI0YjY3NywgMHg1ZjY0Y2NjOSwgMHgyNTg0OTMwOCwgMHgyMTI2MTI2YSwKLQkweDI2NTA0MTA5LCAweGM1MTE2MTA5LCAweGZiMDk0MDQ5LCAweDUxNTk4M2IwLCAweDJmYjU2OTZjLCAweDRhNDQ0MTAzLAotCTB4NTA1ZDhiZGYsIDB4ZDEwMWRhOTQsIDB4MTAxYWM1NWEsIDB4ODNiMDYwMzQsIDB4Njc5NTYyMmMsIDB4MDViMDU0YTQsCi0JMHgyMTA4ZWUzYiwgMHhmMTZiNDNjOSwgMHgzZGRlNWE1NywgMHg5OTliZGVlNywgMHgwMDY2NzdlZiwgMHg3ZTdlYmU3ZCwKLQkweGRlYjhmZjBmLCAweGRlZjdjYmI5LCAweGZiM2RjZTczLCAweDNhYjNjOWJkLCAweDIxMDk0YjI1LCAweDBiNjJhMjFiLAotCTB4OTk5NDFjNDgsIDB4Yzg0YjEyNWUsIDB4YmQzZTA5ODgsIDB4ZTkwODQ0ZGQsIDB4OTUyNDI0NDgsIDB4YTQyM2FlZmUsCi0JMHg0NzVhZWEwYiwgMHgyNDIzYzkzMiwgMHhiZDM4OWVhZCwgMHhiZWQxOWViNCwgMHhmYWQyZDI1ZiwgMHg4NjM3Zjg2NSwKLQkweGM5NGFkMzEwLCAweGZlOWUzMGI5LCAweGQzYjY5NGJlLCAweDNhMTY2ZGRmLCAweDllZDAzMTMwLCAweDE2MDllYmNjLAotCTB4ZDAyNTIxM2IsIDB4ODIwZDI3Y2YsIDB4OTM2ZjM2ZjksIDB4YjRiZTc0YjQsIDB4NjI5MDg5NzYsIDB4MmYxMzM2NWEsCi0JMHg0YjhjMGFjOSwgMHg5OWVmYjA3MywgMHgwMTY5NWUxYywgMHhiYjQ4ZGZlZCwgMHhhYzg0OTE5MSwgMHg1OWU3NTRkMywKLQkweDE0OTk2ODEyLCAweGJmYTU2OGUzLCAweDA3YmFiMDZkLCAweDRmZWE3ZWMwLCAweGRhNjY3Y2Y5LCAweDJlYTljNDY1LAotCTB4N2I4ZTliYWQsIDB4YjRjY2VhYzIsIDB4NjNmNjA2MjQsIDB4MjQ2OTJkOTcsIDB4NTM5ODkwODcsIDB4MzY2ZDlkNmMsCi0JMHhmYjA1ZDczMiwgMHgxNzRjZmUyMywgMHhjNjNmMjQwYywgMHgxNWIyMTFmNSwgMHg5MzI4OWJkNywgMHhhYjQ2YzQyMywKLQkweDJmN2U4N2QwLCAweGQ2ZWU3NTY5LCAweDdkNjA1MmY1LCAweDZlZTIzNjQ5LCAweDQ5NDk2ZGE3LCAweDg0ZDNiZGM0LAotCTB4MjI5MWQ3ZmQsIDB4NzA0OGQ3ZGEsIDB4ODdhYjQ5M2YsIDB4MDU5ZjVkNmMsIDB4ZGU3MTc5ZjMsIDB4MzZkNzFjYWEsCi0JMHhmOTJhYmRmOCwgMHhmYTU2YTJiYSwgMHg5ZjA2Y2U3YiwgMHhiNzFkM2U3NiwgMHgwMjY2YjM3NywgMHgyYmNjNTNlYywKLQkweDA5MTZkMWNhLCAweDhjN2RkMWM3LCAweDdkODlmZDgwLCAweDkyODlmYmE4LCAweDViYWUwZjEwLCAweGIzNDVkM2Y0LAotCTB4NWJmNjg1ZmQsIDB4NGNjNmYzODUsIDB4NmQwZGYwNjAsIDB4MmY2Yzc3ZmYsIDB4MGNjMjY1ZmYsIDB4MWFmZDZmNTgsCi0JMHgwMTQ4MzEzZCwgMHg3NTYxM2ZmOCwgMHg0ZDcwMDJkZCwgMHgwMTIyZGY2YiwgMHhhNjhjM2U2YywgMHhmMDJjMzQ3NCwKLQkweDI5YTMwZmRkLCAweDc2YjAxNTNkLCAweDg3ZjM4NTNiLCAweDc5NDc0YTdhLCAweGI0OGEzYTAxLCAweGIyOTVmYWZlLAotCTB4YTBmMGUxNzMsIDB4ZTIzZDFhZmEsIDB4MmM5ZThiNjksIDB4NWUwYmNmNmQsIDB4ZGY1YzZhZGYsIDB4Y2IwNjhiMjIsCi0JMHgyY2Q3NTZhMywgMHhjNzYzNGY4MCwgMHhmYmMwN2FjMywgMHhlODFmNmRiMiwgMHhjZWY4NTdkZCwgMHhlZTkxYzJiNSwKLQkweGUyOTY5NTdmLCAweGIyNWRhZWJkLCAweDRhZTkyODE4LCAweGU4MTM5MmVkLCAweGU4ZDZiZWEwLCAweDZmZDQ3ODA1LAotCTB4ZDY0Yjc0NjcsIDB4YTE4M2JkZTgsIDB4YTdjM2JlZGUsIDB4ZjdlOWVkYTEsIDB4ZmQzMjFkM2IsIDB4MGVmYjZlYjksCi0JMHg3YzEwNTE2OSwgMHgxMmJkZWJkMywgMHg1OWE4NmJhYywgMHgxZTlmMmI5YywgMHhmZThhOTVjZiwgMHg0NTc4NTEwZiwKLQkweDFjM2JiYTUxLCAweDVhNDYzYzQ1LCAweDNjOWI5Nzc2LCAweGI3NmY4NTEyLCAweGZkMGY1ZGNlLCAweDFjNjM1M2JhLAotCTB4ZjVlZmRhMWUsIDB4NDg4ZmUzMWQsIDB4Nzc5YWRjZjQsIDB4YWU1MDdjMWEsIDB4MzE0ZDZjZDMsIDB4ZDc3NWY2ZDIsCi0JMHg0MWFkMWRlYiwgMHhiYWQzNjc3NCwgMHg2YjM4YzE3NiwgMHg4YWIxZDk4MiwgMHgyMDZlY2E3ZSwgMHg5YzEzMTY0NSwKLQkweDQ3ZmUyNTc3LCAweGM1Y2VjZmRjLCAweGEzMmM0YjZlLCAweGUwOGE0MjIzLCAweDMxNmUzYzVjLCAweDgyODkzZDYzLAotCTB4ZjdkMjhjYmIsIDB4ZDc1YjFkNjEsIDB4ZTFlOGMyNGUsIDB4ODM2YjljNTIsIDB4MjNlM2JmMDUsIDB4M2FkZTNhMGUsCi0JMHgzYTk3OWQ4MSwgMHg3ZTg5MWZiYSwgMHgyZWYzNmVhZiwgMHg2MjM5MjdkYywgMHg2ZmE3Yjg0MywgMHg3NWJiZjA5NywKLQkweGI5ZTBiN2RiLCAweDczYmIzYWNlLCAweDJmZmExZWJmLCAweDI0NTFhNTI1LCAweDFiOWNjZTk4LCAweGQ1ZWZjZjgzLAotCTB4NDI2MjM1ZjAsIDB4YWRlODFlYmIsIDB4ZjJhMWYzOGUsIDB4M2U5MzZlNWYsIDB4YWZkZmRhMGEsIDB4YTNjMjMyMmQsCi0JMHhmZGI2ZjM2ZSwgMHg2NDdiZjQ2OSwgMHhiNjBjYjEyOSwgMHgxM2ZkYmY2MywgMHgwNmI1ZjdkOSwgMHg2MDdmYzQxMiwKLQkweDlkNmM3OTlkLCAweDhmZjg4MjhiLCAweDNlMTg3ZmQ4LCAweGFmNTg1YmY0LCAweDQxZDc1NGU5LCAweDQ4N2M4N2M2LAotCTB4NmFmZDYyOGYsIDB4N2U3MDc2YmMsIDB4M2M0ZjRlMzgsIDB4OTNkZWJiZjgsIDB4MWRmM2E3NmIsIDB4ZjljNjhlY2UsCi0JMHg3MzgwNWYwNCwgMHhhNWY5YzM1YywgMHg2MjEzZDY4NiwgMHg1YTBlYjllOCwgMHg5ZTZmNTg4ZiwgMHg4MmQzYTJiNSwKLQkweDM4NDJlODcwLCAweGUyZDY2YzM0LCAweGFlZjRhYmZhLCAweGNlODNjYjQxLCAweGI5ZjllZmMzLCAweGZiZGE2ZDc5LAotCTB4ZmRmZDNmN2EsIDB4ODNiZjJmZTcsIDB4OTM2ODY5ZjgsIDB4NDhjZmMwOWMsIDB4M2JmYTNiZGIsIDB4YmZhYzAxZjIsCi0JMHgyMTEyNDk5MSwgMHhiN2ZiMDg5MywgMHg3YTNiZjc3MSwgMHhkMjdkZmQzYiwgMHg4NmJmODYyZSwgMHgwYmI0M2I1ZCwKLQkweGNjZmEwMTRjLCAweDFjZGFmYjNhLCAweDc2ODZiM2EwLCAweDAwOTI4OTAzLCAweDU4MmVlZTdmLCAweDA1NGU5YThmLAotCTB4OGRkZjA0M2MsIDB4MDk5OGNmODQsIDB4MGYxMjhmOGMsIDB4Y2Y0ODVmM2QsIDB4NzMxYWFjZWUsIDB4OGE1ZjZmODAsCi0JMHgzNTNhMzBkMywgMHgyZGJiZGZiMSwgMHgxZmEwMWVhYywgMHg5NzQwMDdmNywgMHhkNzhlZDE1NSwgMHgxNTU0NWNlMCwKLQkweDAyNTY4ZTQ5LCAweGZiODYzY2ViLCAweDcwNjRhODQ4LCAweDc1NGY1ZTBjLCAweDk5N2U2NDdlLCAweDg1ZTVjZjE4LAotCTB4NjM1OTlmZDYsIDB4N2VhZjljMGUsIDB4ZjdjN2NmYmUsIDB4ZmM5OTVlMDIsIDB4NDlkZmIxZjAsIDB4YjAzZjJiYjYsCi0JMHhkMmRlMzU2ZSwgMHgwZmY2MTJhZCwgMHgwMTE3NGY0MywgMHgyNmI5NmE3ZSwgMHhlM2U4MmZkNiwgMHgwYWI1OWJkNywKLQkweGVhYjA2MWY5LCAweDU1ODMzZTcxLCAweDA4ZGJlYjhiLCAweDdlNzJhMWY4LCAweGNiOWQ4ZWEzLCAweDVlOGNhYjhkLAotCTB4YzdkMzFmZTQsIDB4OWYyODkxMWQsIDB4ZmJkMGNmMzYsIDB4OTlhNDNjYTAsIDB4ODdlZDBmNWYsIDB4ZDdmN2Q4ZDIsCi0JMHg0Mzc3MzQ2OSwgMHgxMzZhZGQ3ZCwgMHgzYTdjNDU2OSwgMHhhMDQ0ZDY4ZCwgMHg0YmM0NTg5YiwgMHg2YmRlYWQ3ZCwKLQkweGZjZmNmM2EwLCAweGVhYmZjNjQ1LCAweDAxMmYyNjNkLCAweGJhOWVlODNlLCAweDg0OTFjNjEwLCAweDgwNTNjNzI4LAotCTB4ZmQ0MWY3MzcsIDB4N2E1MGU2MWQsIDB4NmY2M2QzYjIsIDB4NmE0ZmJmYTcsIDB4ZTA0Y2U3NjcsIDB4YTQ1MWYyODEsCi0JMHgwNGJmMjEyYiwgMHhmNGYwMDM1YywgMHhjMDhkY2UyYSwgMHgwYjM4YTVjNywgMHgyY2VlNWJlNywgMHgzM2RkNzc4MCwKLQkweDczOGZkZTUxLCAweDEzMmViN2Q5LCAweGEyYWI0YmEwLCAweGVhOTFkNGRlLCAweGE4MThkOGZkLCAweDAwZmZjMWQ3LAotCTB4NTJhNzZjMWQsIDB4ODNhZTk0YWQsIDB4NzY1ZDMzYWYsIDB4NmVmYjA3NWYsIDB4ZWIwZmZhMzAsIDB4NGY0YjZhMjgsCi0JMHg4ZWI5ZTFmNiwgMHgyYjc1Yjc0NCwgMHg5OGZiNGNkZiwgMHhhNTc3NDNlYSwgMHgzOGE1ODFiYywgMHhhNTZjYmFhZiwKLQkweDc4ZTUyZTNjLCAweDliY2JjMDFmLCAweGQ0MWY4Y2FjLCAweDc5ZTNiNzE1LCAweDE5YjhmYmFjLCAweDAyNjliMWNmLAotCTB4NTNhNjY3ZTMsIDB4Yzg0ZDdlNGEsIDB4YjJiZWI4NGYsIDB4YzU1N2M3MDEsIDB4Mjk5MzhmYjQsIDB4MjU3ZWFiZGMsCi0JMHg2NDQ5NWE1OSwgMHgyMjQ0Yjk3ZSwgMHg5ZmE3OTAyZSwgMHgzYjEwM2U2ZCwgMHhlOTdiZTAwZiwgMHg4ZGZiOGNiMiwKLQkweDZjOWRmYjYyLCAweGZiYThlNzY1LCAweGE0NzAwYTE5LCAweDA5M2Q2NmY3LCAweDlkNmJkZmIzLCAweDRiOGVmODhmLAotCTB4MGUzYWY3ODAsIDB4OTVlZGVlZWIsIDB4ZjRhMTNmMjMsIDB4Y2UyNjc5ZTIsIDB4ZGNmN2ZjMDEsIDB4ZjgzZjI5ZjYsCi0JMHg3YmJiYWU4NCwgMHg5Yjk0MThkYiwgMHhhNDJlYWQwOSwgMHgyOGM0YmU5ZiwgMHgzZjRhNTZjNywgMHgyMDk5MzIwOSwKLQkweDZhYWZiYzUxLCAweDhhM2IxMDNmLCAweGI5ZmNmYjhlLCAweDhmMjA0NTYxLCAweDllNzVmMTE3LCAweDA5NWU1MTdkLAotCTB4ZWJmZDU5NzAsIDB4ZjY4NjZlMTcsIDB4MGYxNGFmM2EsIDB4OTlmYmJjN2MsIDB4ZjgxM2ZkNWYsIDB4NGQ2ZGQyZmMsCi0JMHhkNjkxNDlhMCwgMHhmN2E3N2VlNywgMHhlZjFhN2VkMywgMHgzM2ZiZjYxNiwgMHhmN2U4MTY3MSwgMHhkZjBmOTNmOSwKLQkweDZkNmVmMDBjLCAweGIzZjZjNTZmLCAweGZhYzE2ZTRmLCAweGUxN2ViZjZiLCAweGYyMDdmZmQ1LCAweDgwZWIxNWRlLAotCTB4ZGM1ZjY3N2UsIDB4NzdhOTc4OGYsIDB4ZGZiMDlkNmIsIDB4NzFiZDc0NDgsIDB4MjdjNjdlYzcsIDB4MzljM2FlNDEsCi0JMHg0YmZjNjVhOCwgMHhkZmEwYjVkMCwgMHg3NzNkN2ZjZiwgMHhhODdjYjA2NCwgMHgxMjE5NWQ5NywgMHgzODM2NGZmNCwKLQkweDVlNTA5MjllLCAweDE0Mzg5Y2EwLCAweDc0NTFiNDQ1LCAweGQyZDNhZmZmLCAweDc5MmFjYjQ4LCAweGUwMWQ3ZWY5LAotCTB4MzNmMTg3MzksIDB4NzkwOTIxYWEsIDB4N2Y0MzFiZWQsIDB4Y2M0YzdkYmYsIDB4MmYzYmQ0MTYsIDB4Y2YwODMzZGQsCi0JMHgzYmEzMGM0ZCwgMHhjZjkxOGYzYSwgMHg4ODc5ODQ2MywgMHhmMzNlYTA5NiwgMHhhODc1ZTY3NiwgMHhjZDI5NTJkNywKLQkweGNlMTI0OWZhLCAweDFiYTZlODczLCAweDE3YjljMmI2LCAweDZhZjk4NWViLCAweDNhYmRhMWYyLCAweGY4ODllNDAzLAotCTB4ZTc1ZjFkN2QsIDB4ZGYyNjY4YmEsIDB4NTM3ZTcxY2UsIDB4MDc1YTYxNTcsIDB4YTNlN2I5ZTUsIDB4OGQzZjAxNmEsCi0JMHgyYjEwZmY3YSwgMHhkMThmMmZjMCwgMHgyNjU2NDNmMSwgMHg5N2RiZWE4NywgMHgzODRkMWFlYiwgMHg5Nzc5ZTcxZSwKLQkweGYzMjgyOWYyLCAweDk0ZmE3OWU5LCAweDZiZGE1NzllLCAweGYwZTFlNWRiLCAweDNlMzJkZmJkLCAweDYwY2E0ZDE5LAotCTB4N2Q2NmQzMWYsIDB4NjJmYzAxMjAsIDB4NzU3NTlhZjIsIDB4NThlN2Q3MDgsIDB4NzA1MmM1M2IsIDB4NzYwYWU5N2IsCi0JMHhmYjc0ZDQ3ZSwgMHhjZmM0ZDVhNCwgMHg2OWI3M2IwZiwgMHhlYzMzYWFiYiwgMHg4ZTBjYjdjOCwgMHg1M2ZhNDFjMSwKLQkweGFiNzc1MmRhLCAweGNiN2VmZTk5LCAweGE2NDNiNzBhLCAweGNjZjdiNzc0LCAweGI0ZTk3MWIxLCAweDY5NWNlYmZlLAotCTB4MmNhYmQyMzgsIDB4MzFlYzc5MzEsIDB4NTYxYTc3ZTEsIDB4ZTg4ZjkyNTYsIDB4Y2ZjOWRmYjksIDB4Njg4NTkyNzUsCi0JMHhlMDBhMmM2ZiwgMHhiNDRiNGFhOSwgMHgxZjdmODQyNiwgMHg3NTg2YjVmMiwgMHg2MzZmNWU1YywgMHhiZWM2MjRlYiwKLQkweDFjNjYyOWNjLCAweDE2ZDFiYTY3LCAweDY3MWQwNzU4LCAweDJmYmQ2MTMyLCAweDkwN2NjZWYzLCAweDk0NWE5ZThmLAotCTB4YWUzZDc2OGYsIDB4NWZlMGFjZjcsIDB4M2IzMDUzYzQsIDB4YTgxZmMwM2YsIDB4N2EwNmU2ZGUsIDB4N2IzM2QyNGQsCi0JMHhiNTYzZjgwNSwgMHhmMmU2ZjQxOSwgMHg0MDkyZDYyMywgMHhkYWNkMTQ5OSwgMHg2ZDkyNzBkNSwgMHgzYmFlOWRiNCwKLQkweDdlYzRlNmRmLCAweDg1Nzg5OWU0LCAweDA3YzQ4YWZjLCAweDM3ZmUzOTFiLCAweDQwYzVmZTRhLCAweDUxM2Q5ZTY3LAotCTB4YzZlYmEwMTYsIDB4MTQ0M2ZkOWIsIDB4NTM4NzA5NzYsIDB4OWU5YmE3MGYsIDB4MGU1ZThjM2QsIDB4ZDgxZTM0NjksCi0JMHgzN2FkYTFkZiwgMHg0Mjk1Njk2YywgMHhhZTUwZjFlNSwgMHg0ODc1YTc5ZiwgMHhkYTRiYzAxNiwgMHhmZTA1MWFlNiwKLQkweDBhYjc1ZWE4LCAweDVjODZjYWY0LCAweGY3ZjUxNGE5LCAweGJmYmZlNThlLCAweDI5MWJkNjhlLCAweGI4ZGVhMGRlLAotCTB4YWE0ZjlmOGIsIDB4YzZmZjQyYTcsIDB4ZjA4NWVhOGUsIDB4ODk4NGY0YmQsIDB4ZmQ0MjU5MGUsIDB4YWQzYTVjNjgsCi0JMHgxMjkzZDYzNywgMHgwNzFiZmYzOCwgMHhlM2E0ZjczOCwgMHg5NGYyMjQzZSwgMHhkNTI5ZTQxZCwgMHgyNjllNDFhYiwKLQkweGRlM2VhM2U2LCAweGZhODZkZWU4LCAweDczZDVjOTM3LCAweGY1MTBiN2I5LCAweDk5OTRjNmY1LCAweDIxNWYzODBlLAotCTB4MmFjZjYyN2MsIDB4ZWQxYWY3ZDQsIDB4ZGEyODhlZDEsIDB4NzQ4NzUyN2YsIDB4NGM3N2QzMzcsIDB4NzI0N2FkODQsCi0JMHg3NzkyN2Q0MiwgMHg3M2Q2MTc5NCwgMHg5NDQ3YzA1ZSwgMHhmMDM5YWViYSwgMHgwNmRkOWVmZCwgMHhhZmVkYTFlMiwKLQkweGYyOGYxOWVmLCAweGY5OGJkMDVjLCAweDc1Y2EwMzI1LCAweDgxMjJkNjliLCAweGM1YWU3ZTVlLCAweDRjMWEzZTQ5LAotCTB4OWNiODFmYzgsIDB4ZGJhY2YwMTEsIDB4NzM4MWE1OWUsIDB4YzNiNzllNzIsIDB4OTcxMjdiM2YsIDB4YzM2YmI0ODcsCi0JMHg2N2QyMWY0MiwgMHgxM2RiZDczZCwgMHg3YmMyY2UwYywgMHhmNDI3ZjA4MiwgMHg2NDFkMzUyOCwgMHhkMzVlMThkYiwKLQkweGUwOTQxZjM2LCAweDczZjFhYjEwLCAweDZiZTI1MmNiLCAweDY1YmJlYmEyLCAweGE2MzdjNmIzLCAweDE5YWJmNTAwLAotCTB4ZTk1N2Y3YzgsIDB4NzQyOTU2YzksIDB4YzYzNjIxYmUsIDB4NWRlMmFhMmYsIDB4YWIyN2MwODUsIDB4YzExYzk5YTYsCi0JMHhkYTJhYTlmYywgMHhkMjBhODlhOSwgMHgxNTcxMDhmMywgMHgyNjc2M2Q4MywgMHhjZmYwOGNjOSwgMHhlYWMzZDliNywKLQkweDc5ZjZhMTY1LCAweGI3NGZkYTE0LCAweDQ4MGE3OWI2LCAweDE1NWQ2ZDM2LCAweDkyZTcwYjVkLCAweGYyMTM2M2YyLAotCTB4MGYxZDBiNGQsIDB4NTFkNmZkZjYsIDB4YmVmYjMyNGYsIDB4YjE0ZGU3MTUsIDB4OGVmOWQ4NTksIDB4ODMzNzE1NzcsCi0JMHhiNWM3MjAzZiwgMHhiMzMxYzk4MiwgMHg4ZTdlZGMyMywgMHgzZTFlODU1YSwgMHg3NDAzNTBhNywgMHgwMGU0ZDUzMiwKLQkweGFmZTdmMmJiLCAweDZlOTFmMzQ4LCAweGMyNjA1NDNjLCAweDM4YWY3MTc5LCAweDJiZDk5MTM2LCAweGUyM2JhMDBlLAotCTB4ZDViZWEyZDYsIDB4ODZmMmVjZDgsIDB4Yzc0NjJiYTcsIDB4MDJmZjU0OGQsIDB4MTVkMjljM2QsIDB4ODNiMWFkZTIsCi0JMHhmNzYxMWZjOSwgMHhkNjA4OWYwMywgMHgxMmI5YzU3NywgMHgzNWY4MTZlNywgMHgzN2EwOGRkMCwgMHhmNWFmNmU3MSwKLQkweGYzZjBmNjdjLCAweDFmZjc0M2QxLCAweGJkZTY5ZjRjLCAweGFmZDcyZThjLCAweGZiNDM5N2IyLCAweDA5NjIyYWZhLAotCTB4NzZkNTU3YjYsIDB4MWYwZTFkOTAsIDB4OGM5ZmRiYWQsIDB4ODIzY2MyZjEsIDB4YmFiMDZkY2YsIDB4YmQ2MGRhNjYsCi0JMHhhYjU4ZGY1YiwgMHhkNGJlMDEyNSwgMHgyMWExZjdiOCwgMHg4Y2NmZDI1NywgMHhkMTlmMzY1YSwgMHhhNjBkZTMxYiwKLQkweGI3MDUyMzFmLCAweDBmNGIwOGI5LCAweDk1OThlN2YwLCAweGY3MjNmZGUxLCAweGNmNGM0Y2RhLCAweDY1ZmFiNmZiLAotCTB4N2MwNWE0OWUsIDB4NWYzMmZkMDksIDB4ZTM2YmRmNzYsIDB4MDhhNTI1ZmEsIDB4ZTk5MmI5OTIsIDB4ZWJjMDQ5OTcsCi0JMHg4ZDZjMWY4MSwgMHgxMTNmMDJmMSwgMHg3YWY1MjY3ZSwgMHgwOTljZmNkYywgMHgyMzNiMGFiYywgMHg3ZmY1OTYyOSwKLQkweDM1OWI5Zjk4LCAweGJjNjNkZmJjLCAweGYwNWZiMjBjLCAweGVlMzVkODNjLCAweDU5MWM4ODBmLCAweGRmNzE4ODBlLAotCTB4N2M0YmRmOTUsIDB4MzUyM2M4NDcsIDB4NDFmYWMwZmQsIDB4YWE3ZWMxNmUsIDB4NmJmNzIyZjMsIDB4MzhlZGNmZGIsCi0JMHhlMWVmM2QxNSwgMHhlMDE2YWJlNywgMHhiYzYyN2EwOCwgMHhlNzAwZWZmYiwgMHgxOWM0NzE1OSwgMHhlYjNmZjE0ZiwKLQkweDI3YTQwNjc3LCAweDA0MzdkYjkyLCAweDJkM2FkMGVjLCAweDgwNmMxOGYxLCAweDFmZDc5ZDU3LCAweDc4YTZiNzg0LAotCTB4NmNkN2JlMzYsIDB4MWNmNGM4ZjQsIDB4NmY3NzhhNWMsIDB4MTUzYzc5ODcsIDB4M2QwM2UxYzQsIDB4NWY5NDg3ZjYsCi0JMHhiZTI0YjljMCwgMHg0ZDI3ZTAxMiwgMHg3MDBiMWZjNCwgMHhkYmJhYzViNCwgMHhhZWU1M2U5MSwgMHgzYjUzYTg0YywKLQkweGYzYmUwMGE2LCAweDlmYjMwYzQ4LCAweGJkOTBkZWZhLCAweDJlM2MyOTQzLCAweDNlZmZmZDE4LCAweGMyZTdhZThhLAotCTB4ODc4NzFjOGEsIDB4ZWY3YTczY2UsIDB4OTlmZjc3OWYsIDB4ZmJiZjNlZjYsIDB4N2VjMTAxYjMsIDB4ZWNhMzQ2YWMsCi0JMHhlYTA3YzZkMiwgMHg2ZGE5MTIzZCwgMHhiYjc3YzMwZiwgMHg5ODZmY2M2YywgMHhiYmYwODM3NSwgMHhiYWRlYTFmNSwKLQkweDBjOTljYTIyLCAweGZiMTU5ZjdlLCAweGE0YWY5M2NhLCAweGFjNWQzN2NmLCAweDNmMjBkZTI0LCAweDBmMWQxMzVjLAotCTB4OGUyZTlhZTMsIDB4ZTY0M2RmYzMsIDB4N2M4MWYzYTUsIDB4NGU5OGJhNjgsIDB4NzdkOWMzM2MsIDB4MzBmYzZmODAsCi0JMHhjMGRiZjE5ZSwgMHgzZjZjNGNmOCwgMHhmM2ZhNTFhZCwgMHgzYzQ1ZTVmYSwgMHg0MjJlZDdjMywgMHgxZjZiODQyNiwKLQkweGI1ZjZjZjFhLCAweGRmOWQ5YjJiLCAweDE3OTI0ZGJlLCAweDJiYzU4M2VjLCAweDgyOTkzZWNjLCAweDE5ZmQzMTc0LAotCTB4MTZjNWE1ZjQsIDB4MGIxMzRmOGYsIDB4YjFmMjg3ZmMsIDB4YTljNjg4NjEsIDB4Y2M4ZjZhNDYsIDB4ZjY4Y2YyZTMsCi0JMHg3YTA2OGVkMywgMHgxY2YwNThmNSwgMHg5YzM5ZjliYSwgMHhkN2ZhZjFkNywgMHhhYzU4OWZlMCwgMHg3NGQxYzYyNSwKLQkweGM3NDZmOTllLCAweGZiZmE3NGUxLCAweGIxYjFhNjI3LCAweGRlMTYyNjIwLCAweGU0MDkyNTNiLCAweDY2YWNmMjU4LAotCTB4MzIxMjJmZjQsIDB4YTlmYTAyZDYsIDB4OTdjYjQ2NDQsIDB4MGZhNGFlNjMsIDB4NDU4ZjUxNjksIDB4ZjA3NGEyN2EsCi0JMHgyZmFlZjE2ZiwgMHgxZDAyMWQwNCwgMHhmMTg3YmFjYywgMHg0OWZmZDEzNSwgMHgxN2YzODY5YiwgMHgxZmJlMWQyNSwKLQkweGM2ZWZkZjAxLCAweGU4MGFmYzU3LCAweGQ3MzhjMWVjLCAweDdiZGU3MDNmLCAweDVmZjgyYmNlLCAweGZhN2ZlNDhmLAotCTB4ZTVkM2EwNzEsIDB4MjQ1M2M3NjYsIDB4YzM4OWJjNzQsIDB4NGJiMGI3YmQsIDB4ZGVmMWZlMGYsIDB4NDRjOGZmZTUsCi0JMHhmNWYzYjQ3ZCwgMHgxYmE3YzA5MywgMHgwYzlmMjY4YywgMHg1ZDJlYzU3YSwgMHgwM2VjNWZiNywgMHgzMzljNjJlNCwKLQkweGYzOGU5ZTNhLCAweGZhZGEzODNjLCAweDkyMDlhNTI5LCAweGZkYzc3ZjRjLCAweGRlMTQ0ZWQyLCAweGJjMTkxYjc3LAotCTB4NWI3NzhkZGYsIDB4ZWU5MTEzZTMsIDB4NzU3ZDgyZTcsIDB4YjM4ZjY4YzEsIDB4ZmJlOGJkMDEsIDB4MjYzMmUzZjEsCi0JMHgzMjQzZjAwNSwgMHg3NGJjNGFjYywgMHg5OTc4ODFiZSwgMHgwMWVhNzQ2ZiwgMHgyZTljMGJmZSwgMHgzOGFjZTc1YywKLQkweDgxNDU4OTVmLCAweGYyZjkzYzg3LCAweDA3OGVkNzBkLCAweGQzZWI5Zjk5LCAweDczMGU1ZmUwLCAweGI4NzI4NjFlLAotCTB4ZDFmYTEwZmMsIDB4YTMxYTc0ZjIsIDB4NjQ5OWQzZGIsIDB4YWYyODRlZTksIDB4NzcxZDI1YTcsIDB4OGJkNzliM2EsCi0JMHhlZjA4N2Q3OCwgMHgzN2VhYzQ5NywgMHg1ZDNkYmE3MiwgMHhiZmE5ZmFjMCwgMHhjZWZmMjc3MywgMHg2MmNlZjFiYiwKLQkweGU3MWQxMzgwLCAweDVlYmUwM2QzLCAweGJlODJmMjhkLCAweDhkZDZmOTRjLCAweDdjNWU4Y2YxLCAweDU1YmU2MGQ2LAotCTB4ZjgwNDM3ZGMsIDB4YzUwOTZmNjEsIDB4ZmFjZmRkMWIsIDB4MTNjY2JlZjIsIDB4MTlmNjU3YzAsIDB4NTdlZDViMmMsCi0JMHhiZTY0ZGZjNywgMHhjNzJkNmZhZSwgMHg5NThlNTQxYywgMHhlNGQ4ZTQyYSwgMHgxMGM3MjY3OCwgMHg3YTI1NzQ0ZiwKLQkweDQyMGQ1ZmE2LCAweGM4N2QyMGZjLCAweDFiOWY4ZWQ3LCAweGU5ZGMxOWEyLCAweDQ3OGRhOTc5LCAweDc3Y2JlNTc5LAotCTB4ODZmN2YxMDUsIDB4MDQ0ZTc2NzgsIDB4YWQxZDM5M2YsIDB4MzhkZmUzYzQsIDB4ZmJjNzljMWYsIDB4NjYxNmYxYzksCi0JMHgzMmZhMzllZiwgMHhiNmQzOWU2MSwgMHhiYmZmNzhmMCwgMHg4YjFmMWZhZCwgMHgxOTY3YmU4MSwgMHg1M2M0ZTZmYSwKLQkweGVhOTNiYjdhLCAweGM0MjJmYTBkLCAweDA5ZWIwYzg3LCAweDdjZjM0ZmIxLCAweGRjZjM4NTdmLCAweDgwOTliNzc0LAotCTB4ZWY4NjZiZmMsIDB4NTg5ZTIyMjUsIDB4N2Q5NzI5N2MsIDB4M2Q0ZjcyOTcsIDB4MWY4NmFmZDQsIDB4NTJhN2Q1ZjAsCi0JMHhmNGM5MjQzZSwgMHg1NjNjMzY0MywgMHgxYWE3MTY3NiwgMHgxNmYzYzE2ZCwgMHhlZTRmY2ZkNSwgMHhmYThmODYwZiwKLQkweGJlMzhhN2JiLCAweGRhNGJjNmQ2LCAweDBlOGYwMTRmLCAweDczNzE4MGUyLCAweDNjYzJmOWRlLCAweDc5YzlkMjliLAotCTB4YTFhM2QxOGIsIDB4YmIyZGNkNzIsIDB4YmI3ZWMzZDcsIDB4ZWEwNmYwN2YsIDB4YmVmNGE3YmQsIDB4MzBhNjZkMjEsCi0JMHgxM2RmN2FlZCwgMHhmNjgxNDg4ZiwgMHgzZDkxYmZiOSwgMHg3NzhlN2E3YSwgMHg2MmZmNzU3NSwgMHhiYmJmZGQxYSwKLQkweDM5YzA3NjRiLCAweGQ3ZmZkZjc2LCAweDdmNDAyM2EzLCAweGMwMzlkMmU5LCAweDc1ZjJhMGFjLCAweGQxZjYxNjgzLAotCTB4NTNiNGY0Y2MsIDB4Y2ZmYzI1MWEsIDB4NDc2OTRmN2QsIDB4NDZmMWMzM2MsIDB4MzNhNDBhZjUsIDB4ZjE0ZTBmYzEsCi0JMHg2MjEyZTViOCwgMHgxNTlmYmE0MSwgMHhlYTE1YmIxZCwgMHg2ZTRiZTVmZSwgMHg3Y2U2Mzg4NSwgMHhhNGVjMzhlMiwKLQkweGVlZWNmZmYwLCAweDVlNzdlODg5LCAweDJmYzg5YzQ0LCAweDFmNzQ3OWU2LCAweDA1ZDNmMzA2LCAweDQ1ZjU5NGViLAotCTB4ZmQzYWNhNmQsIDB4OTJlZmQyMjIsIDB4NzNiZmQ1NDcsIDB4Zjg2NTcwN2YsIDB4NzhkMWRhZjgsIDB4ZDM5ZDI3YTYsCi0JMHhjZmRmNmY4NywgMHg3Y2JkYmZkYiwgMHg4Mzc4ODFiZSwgMHg3YzgwODBmNCwgMHhkNWRmYzAyZCwgMHgzOTAyMWVmMywKLQkweGQzOTAxMjVjLCAweDVkMzczZTQyLCAweDhmMzA4YThjLCAweGI3M2Y3ZjA5LCAweGRmZmFmYzM4LCAweGU5YTM3Y2U2LAotCTB4NzllNTE1YTIsIDB4ZmMwNGY4ZTgsIDB4ZDg2NjZhOWQsIDB4ZTliNWUwNGYsIDB4YzRmMTJhNjIsIDB4M2Y0MmVhMDcsCi0JMHhjMGNiOGMwYywgMHgyYzAwMmE3NiwgMHhmODA0YzY5ZiwgMHgwYjAzZjA4MCwgMHgyMjQwZmUzYSwgMHhkZmI0NTRjNiwKLQkweGFjN2FlNjFlLCAweDUyZmMwMGE1LCAweGE3YmM4MDFmLCAweDI3OGY3NmY4LCAweDEyZTlmYWFmLCAweDNhOTdkZGU3LAotCTB4YTAxZDliNDQsIDB4MjgzZWY1NzMsIDB4MDdmNTljM2QsIDB4ZTI0ZmI5ZjEsIDB4YWU3ODA5Y2QsIDB4ZjA2MTkxODYsCi0JMHg3M2E3NDE1ZCwgMHgwNzE1NTA3ZSwgMHhmNzJmZmVmMiwgMHhlYjA3MjY1NywgMHgwZTdlZmQ2MywgMHhhODk3YjMzZCwKLQkweDJkYzg1NTI0LCAweGYzNmI5MmEyLCAweDJiMWNhODNhLCAweDA4NjJiZDQwLCAweGY2OGY4ZDMwLCAweGI5M2U0NzRkLAotCTB4ODA5MjM4OTAsIDB4MTlmNzdiOGUsIDB4ZjgxZmQxMzIsIDB4NTg5OWU1MmQsIDB4M2NjZjE0Y2YsIDB4MTMzN2QzMWQsCi0JMHhmMGQ3MGU1MCwgMHg2NGU5NGZlZiwgMHhlOGM2OGRmYSwgMHhlMmZlYTFkNCwgMHgxMjRiNzYyNCwgMHhlZTRjOTg5YSwKLQkweGE1YTJhMTUyLCAweDFkNDQ5YmY1LCAweDQ3ZDY4Nzg4LCAweDMwNDhjZGYzLCAweDI2ZmZhZTllLCAweGVlZjk5MjVlLAotCTB4MDY1NzM4MTQsIDB4ZWMwY2FlZjgsIDB4NjUwMjliYzgsIDB4MWQ4NzQ4ZWIsIDB4NGI5MjMxY2EsIDB4ZjBjMWQ2Y2IsCi0JMHg2NzM0OGUzYywgMHhkMThkN2Y0MCwgMHg4OWZkMzMyZiwgMHhjNjA5MjBhZSwgMHhiYWIxZWY4YiwgMHg0Y2Q3ZDc5OSwKLQkweDExNjczMGJkLCAweGUzMzI2ZWZjLCAweDc1ZjNkN2Y5LCAweDdjYTA0OTBjLCAweDI0NmRmNjBjLCAweGMxYjdkODQ2LAotCTB4ZTMxY2ZiZTQsIDB4NTRmNGJjNGIsIDB4ZjUyZWQxZDgsIDB4MDNmNDEzNjQsIDB4MDI3NjkzNDQsIDB4Y2U5OTM1ZGYsCi0JMHgxNmIzNjA3YiwgMHgxZWEwOTE2MiwgMHhiYmUwYjk2NSwgMHgzMzdmMDA4ZiwgMHg5MGMzMzQ3OSwgMHgwMDlmNWRiZiwKLQkweGFkZTk2ZjdlLCAweDI4ZmZjMGM1LCAweGYzODAyZDNmLCAweGViNWRiMTFmLCAweGYwNWU3ZDQzLCAweDVmNWYxYjI3LAotCTB4YTk0ZmU3MmIsIDB4ZmVjMjQwNTQsIDB4N2U5ZmNlNjUsIDB4ZmM4YzVlNmEsIDB4ZjZiODgxMjksIDB4MTRkYTdmMDMsCi0JMHg1M2Y5MDEzYiwgMHg3YWUzNzEzMiwgMHgxNTY4MjdlMiwgMHhhNWQxMjY3YywgMHg2YWQ3MjdhYywgMHgyM2M4N2M1NSwKLQkweGRkNTJmYWMxLCAweGU0OGRkZmNhLCAweGM5MDdjYTE0LCAweDFjYjk0YWU3LCAweDJlNGE3NjhmLCAweDE1NzQyM2Y4LAotCTB4NDRmNTFjZWMsIDB4YjRmZDc4YjEsIDB4OWFjZWI2NjgsIDB4YmZmMzFiMDQsIDB4ZmRiOGIxNDUsIDB4MjEwMWY0ZDUsCi0JMHgwMTdhZDVmZiwgMHhiNWRhNTYyOSwgMHg0MTNkMzY4ZCwgMHhiNTEyNTUzZiwgMHg3ZWExODdhOCwgMHhmNGMwOTM1MCwKLQkweGQwM2RmNzgzLCAweDVmMjFmNzJlLCAweDBiZmRjMTNlLCAweGFhYjgyNzUzLCAweDc3ZGYxNGI0LCAweDRlYTM5MWU2LAotCTB4NzI0YjJlNWEsIDB4YmE1MDI2ZDcsIDB4YjlhNDdlOTksIDB4NmJkNjllYTEsIDB4M2VmOTIyZGYsIDB4YjE4ZTE2NWEsCi0JMHhmOGE3NmRkNCwgMHhlY2RiM2I1ZCwgMHg2YmViNGQ1OCwgMHgzZGQ0OGNjZCwgMHg5N2Q0MDY4OSwgMHhkYTY5YzgwOCwKLQkweDgyOTM0NWJlLCAweGYwMjY5MWZlLCAweGI0N2U1MmM3LCAweDQwMTFlMjE2LCAweGRhMDk4MzE3LCAweDU5M2Y1NGQzLAotCTB4YjZlM2E0NmIsIDB4ZDY1OGI3YWMsIDB4ZDU4ZmMxZGIsIDB4ODVmYzBlMzcsIDB4NjU4ODhiN2QsIDB4M2U3MzA5MmIsCi0JMHg0NzczZDEyZSwgMHhkNDI0ZmNmMSwgMHg0ZTI1NWUyOSwgMHg2ZGY3ZTI2ZiwgMHhhYjBlN2JmMCwgMHgzYjA1Mjk4ZiwKLQkweGU5Y2JmZDkwLCAweGZjMGIwY2E0LCAweDRmMmNiOTM3LCAweDVjYjNhOWEwLCAweDM5ZWI0ODk3LCAweDRmZTgxZDYzLAotCTB4OGM0ZjljMjYsIDB4ZTdlMWRmMTAsIDB4NWNlMDU0NzAsIDB4YWYyMTdiNjAsIDB4Yjg3Y2VhMGYsIDB4Y2JlNjA5MmEsCi0JMHhhZWVlMGUyMywgMHg1ODIzOWMwYiwgMHg1MGZlODVhYywgMHhlMGYxY2NjYSwgMHgwOTIzN2M3MywgMHgyYWY5ODNmYywKLQkweGRlMjNmMzAzLCAweDQzYjZmMmM2LCAweDc2YmM1OWIzLCAweDFmYjdkNjg0LCAweDVlMjhmOWNlLCAweGQzMzJmMjE2LAotCTB4NDNiZTU1MjUsIDB4ZThjOGJmZTksIDB4MGVkYmIwMzgsIDB4YjBjOTc1MjAsIDB4NDNjYjUyZWYsIDB4OTFmZGYwYWQsCi0JMHg4MWUyNzdhZSwgMHg1MjM2OGRhZiwgMHhkNmNiNDBmZSwgMHg5MmMzODczMiwgMHg4MGQ2ZmI4MywgMHgyNzQ3YTlmZiwKLQkweDBlMzM5M2U0LCAweDExNjA2YjczLCAweDljZDVmYmY0LCAweDk2ZDZhNjk2LCAweGZiMGM1ZWRmLCAweGVjMDk5MmViLAotCTB4NWMxY2EyMmYsIDB4YzEzNTkzMjksIDB4OGJlNzg3ZjIsIDB4MDlmYmZhODgsIDB4MjA3ZmJmY2MsIDB4MjEzNzljNjEsCi0JMHg3NGY4MmUyOCwgMHg3MjgzZDcwMiwgMHg4ZmYwMmU0OSwgMHgyY2ZkZjNhMCwgMHhmOTc3NWJkMCwgMHhiZmNlOTE5YiwKLQkweGZmOWY5ZGIyLCAweDc1YzM5YzNiLCAweDNlNzJlZmE4LCAweDhiYWRmODIwLCAweDI3NGNjNWU3LCAweGE3YzAxZDRlLAotCTB4MDFmMjhhMmIsIDB4YmU1NjNmNWEsIDB4MzRjMGY5MGMsIDB4ZGZkZmM2ZTIsIDB4YTZmMDYwYWIsIDB4N2NjMWQ3ODgsCi0JMHhmNTI4MjY1MywgMHhjYTVjM2I4ZCwgMHhiNTVhYjRmYSwgMHg5ZWJmNDIzZSwgMHg3NGVlZjgxNCwgMHg0NmJkYjJiNywKLQkweDk0MTM5N2U4LCAweGVmYWNlNWZhLCAweDljYTJiMjVmLCAweGUxYmE3ZTRkLCAweDk3ZjA0MGYyLCAweDgyMjVkNTRmLAotCTB4ZTc5M2IwZGYsIDB4MTg0YTc0YmIsIDB4ZjllMjZhMWYsIDB4OTIxZDRkMmUsIDB4YTlhNWRmMjIsIDB4ODkwM2RlNzMsCi0JMHg4ZDJlZjk0MSwgMHg3N2NiNTcxZCwgMHgwOWM4ZmE2MSwgMHhmODNmNzc5ZCwgMHhhMzJjNGZkNSwgMHgzOWRmYTYzYiwKLQkweDBlMjJmM2MwLCAweDUxNDQ1ZTQyLCAweDczY2NmZTgwLCAweDUyOTA5Zjk4LCAweDMzZDFmYTMzLCAweGQwMGUzMTJjLAotCTB4OGE2OWQ3YWIsIDB4MmViOGFmZDAsIDB4ZmZmMGFjZDYsIDB4YWNlNTVmYWUsIDB4OWZjMjdlODIsIDB4YTY1Y2YyMjgsCi0JMHgzYjczNDgxOSwgMHg2NDFkNTNmMywgMHg4ZmNjNWNmOSwgMHhiNGY2ZTVlNCwgMHg3ZTEyNDEzNywgMHhjN2U4MzVlMSwKLQkweGM0ZGY5ZDUyLCAweDI0ZjI4Mjc4LCAweGZhMmU2NjcxLCAweDBiM2I2YjBiLCAweDRiNWZjMThiLCAweGIxZmExMmU1LAotCTB4MWM3NjA5YmQsIDB4NDQyZWViNWYsIDB4YTYyZGQ3M2YsIDB4NjgzZjE4ZTksIDB4NWRhMmRjZWEsIDB4Y2ZkMDBhNjgsCi0JMHhjNWRkMDU1ZiwgMHhiYmEwMTg5MCwgMHg0ZWQxZmY3ZSwgMHhkYzhmZmEwMywgMHhhMDZiZWJiMiwgMHhhZmJkN2FhZiwKLQkweDEyZTkyODgwLCAweDc3MjQ4ZjdmLCAweGViYmM3MDk2LCAweDE3ZDM1YzJhLCAweDFlZjRiODUxLCAweGZlYzAzYmQ1LAotCTB4ZTIwNThhYTMsIDB4NTYzZGM1ZWIsIDB4MWFkYTgzZTQsIDB4NGQ3ZWZjODIsIDB4ZDk3ZTQxMzksIDB4NGZmOTg1YmIsCi0JMHhiZDJlYjMzZSwgMHg5YWZlZjgxNSwgMHhhYTcyODI2YSwgMHhlMTBlMzZjNywgMHgwZjc4OGNiZiwgMHhhNWI4ZTkzYiwKLQkweDA1M2QyOTliLCAweGI2YmJmZmYxLCAweGE0ZjVlYjI5LCAweGZkNzhmOTFkLCAweDQ0YmExMGY2LCAweDU2ZjgyNGJlLAotCTB4M2FjYmIxMDMsIDB4NTJlYzZiODgsIDB4OTg4MzI3OGUsIDB4Nzg3MDc3N2MsIDB4M2FiZTcyMTcsIDB4YWRiMThlZmMsCi0JMHhhZTFmNmYxMCwgMHgyYzg1ZmM2MSwgMHhhMGQ3YTQ3NCwgMHhmMmNiMzRmZCwgMHhiYWIwMTQ2OSwgMHhlOTJiYTVhNywKLQkweDMzZTZiZDQ3LCAweDhjYzczYjMyLCAweGY5ZjA5NjdmLCAweDg0YmQ3Y2Q1LCAweDZiMzc0NWViLCAweDE0NTBhMWE5LAotCTB4N2Y2ODczZDAsIDB4NzRkNDFmYWMsIDB4YzA5YTI5Y2EsIDB4MzhmOThiM2EsIDB4YmUwOTVmYTEsIDB4NWU1NWYwMmEsCi0JMHhhNTE5NDg0NiwgMHgzOTEzOWJiMywgMHgzNjQ5YjNiZSwgMHg4ZmNlOWJlMCwgMHg0NjQxMmU3NCwgMHhmN2U3MGQ4YiwKLQkweDhhMzQzZDgwLCAweDgzZDI4ZjdmLCAweGEzY2FlODA3LCAweDdlODE3YTMxLCAweDI4Y2Q0YWQ3LCAweDQ3YTA4YzRmLAotCTB4ZTRiZDcyZDMsIDB4ZjJmYWZlNDYsIDB4ZjQwYzhmNTIsIDB4NGYzNDkyMzEsIDB4ZjgwYjM1YjksIDB4ZjAwYzU3NmMsCi0JMHgxNTI3NGExZiwgMHhmYTAxODk4OSwgMHhjY2JlMjU2OSwgMHg4ZTgyOTIxZCwgMHhmYWRiYmRiMCwgMHgxMjNhNTg2NiwKLQkweDFlZjdkZmZjLCAweDExMjYwYmQzLCAweGVmZDFiZmFhLCAweGY0YzRmZjNhLCAweDEyZDI4Mzk3LCAweGM3YWExM2E0LAotCTB4ZTVmZDA0MWQsIDB4YWZiMzBkNGQsIDB4NDA2ZGQyMjYsIDB4MTI4YjJhYmYsIDB4OTQ1M2UzZmYsIDB4MTBmNjg5ZjUsCi0JMHgwMTNjYzBmYSwgMHhiZDNjM2Y2NywgMHhhNGNmNTg1YSwgMHhhNzNmNjU1YywgMHhjOTQ0NWZlMCwgMHgyNWM4YjJiZiwKLQkweDc0M2YwNzY2LCAweGJmYjA1ZWY4LCAweDVjOTI1NjYzLCAweDhkNTIwNzg4LCAweDRjMzgzMWNmLCAweGYxM2VhNWJjLAotCTB4ZDdkYmY3M2IsIDB4ZGJmMTg2MjcsIDB4M2RiOGVhZjcsIDB4YzZiM2EyYTAsIDB4NmNlNzY3YzMsIDB4MTQ3YTAxMjAsCi0JMHhkMjQ2ZTJlNywgMHhmODUwYTcyYywgMHhmMTYzYmY0OSwgMHgwZTgxMWI5MSwgMHgxOTk0NWQyOSwgMHgzYmU4MWU0OSwKLQkweGMzZjk5OGE0LCAweDc0MTBmOWM0LCAweDFiNmJjYTU3LCAweDI0MGQ5ZDA0LCAweDZlY2U4MTAzLCAweDdmNDI4OGVhLAotCTB4NmY0MDhkZTgsIDB4ZjkwYjdlOTQsIDB4MGI5ZTQyYmMsIDB4MmNiNWJkYmQsIDB4YTRiMmJlODQsIDB4MzllYjk0MWMsCi0JMHhhZTQyNGY0MCwgMHg4ZjFjOTcwZiwgMHg3YTA1OTdkZiwgMHhmNmY1MDdiYiwgMHg0MzZhN2EyMCwgMHgzZDI4OTI3YSwKLQkweDQ0MjdiZmExLCAweDU1ZGIyYTVlLCAweDdlZjAyNmY0LCAweGU1YTNlYjljLCAweDg1ZWQxOWE0LCAweDRlNGNkMWE5LAotCTB4M2Q5OWFhZmEsIDB4ZDIyNGQ5NGYsIDB4OGMzNWViZGIsIDB4MTM4OGFhZGUsIDB4Mjg5Y2FkZTksIDB4YThkMmE0ZTksCi0JMHg5MWU5YWJhYywgMHhhNGEzNTE3ZSwgMHg5YmQyMzczNywgMHhkMTIzNGU5YSwgMHgzN2EwNDBkYiwgMHhhZmUzMmYyMSwKLQkweDEzN2I2ZjRlLCAweGZmMzNmZjRkLCAweGVkYmQyODVhLCAweDc2YjkyYzRkLCAweDZjN2MxMzdhLCAweGQyYTU5NDQ3LAotCTB4YTk3YzcyMDQsIDB4Zjg2MTcyODQsIDB4NTBhZDQxZDEsIDB4ODU5MGRhMWYsIDB4YWIwZWU3ZmEsIDB4MzdiNjAwZTMsCi0JMHgyZWUyZjZiMywgMHgwZWY5MGNhNywgMHg3Yjc4MmIzOSwgMHhlYTEyYWI5NiwgMHgzYjY5MmI0ZCwgMHgzOGU0YmE5ZCwKLQkweDc0MTg4N2NiLCAweDVjMmY2YjNmLCAweDBjYzA3Y2RkLCAweDFiMGYyZjdlLCAweGI1ZjNmN2JmLCAweGY3NmQyYzcyLAotCTB4Y2JlM2U1YWUsIDB4ZGVhMTJhZGIsIDB4ZmY4ZDhlYjQsIDB4YzMyOGUyMGMsIDB4ZGJjYThmMjAsIDB4Yjc1ZmJmMGEsCi0JMHhjY2MxY2IyMSwgMHg4ZWY3YTY1NywgMHgyMWRkZmJlMSwgMHhlMzgwM2NlZCwgMHgyNWI4ZDhkYSwgMHgwNGQxOGQ4NywKLQkweGNmYTY2Y2VkLCAweDM5ZjdjY2RlLCAweDY3ZGIzMzY2LCAweDRjYjc0N2MyLCAweGE3YmY4M2IwLCAweGQ4ZmE4M2NmLAotCTB4NTJmYTlhYTcsIDB4ZWMxMTczZTQsIDB4MmRhOTcyZDQsIDB4YzBmMWNhMDMsIDB4YmJjMDY0YmYsIDB4Y2Q5YzlkNjMsCi0JMHhlOTViNjhlMiwgMHg2NDRhYmUyNywgMHg3ZjExMGU3ZSwgMHg3NTc3Mzg4MiwgMHg1NWYzN2U5MCwgMHg4YTEzZjMyMiwKLQkweDgyMzY0OTdlLCAweGNjNzkxMmZhLCAweDg4ODg3NjhjLCAweDIxMWVmOThmLCAweGQ4NGY5YzEyLCAweDE0OGI4YzIzLAotCTB4ZDM5ZjFiMmYsIDB4ZjhjM2ZhOGMsIDB4ZTY0ZTIyODEsIDB4ZGZhN2NlZDcsIDB4YzVmY2JjMmQsIDB4OTg3ZTcwYjgsCi0JMHhiZDMyMjQ3ZiwgMHhkYjhmMGNlNSwgMHg3YTk3ZGY4YiwgMHgwNzdmM2M1OSwgMHhjMDFhNDkxMCwgMHhkNjI2Zjc1NSwKLQkweDJiMDg0NGFkLCAweGJjMDMyOTBmLCAweDQ2Y2M3YWIyLCAweGE4ZWJjN2U5LCAweGQzNDRiZjkxLCAweDcwODBmNWFjLAotCTB4ZmYzMDk0Y2IsIDB4ZjExNzcyNjgsIDB4YWU4NmM1YzUsIDB4Zjg5NmJjN2YsIDB4MDg3ZjJjZjQsIDB4NTViOGJmZDcsCi0JMHg4NDQzZjk4ZiwgMHgzODNiYjVmMywgMHhjMWU4YzhmZSwgMHg3MmE3Y2U3OCwgMHg3MTI0YTUzYywgMHgxOTM4N2RiYiwKLQkweDBlZWE3YzBlLCAweDhkM2JiNzhlLCAweGE3MjYzYWNkLCAweGZlMmE3NGRiLCAweDdhMDQ5MTkxLCAweGZhODhhNmNmLAotCTB4YzU1ZGIyYjgsIDB4ZWZmMjk2NWYsIDB4Zjg3YWU2MmUsIDB4ZmU4N2QyMzIsIDB4MWViOTRmYzIsIDB4ZDMxMzY2N2UsCi0JMHhlZDIyZWZjMywgMHg3ZGVjMmZlOCwgMHgwZDlkZTk4YywgMHgyZjQwN2I3NCwgMHhiZTRhYmNjYiwgMHhiMjhjZjc1MCwKLQkweGFjYWVkMGRlLCAweDBlYjE1MjM3LCAweGE4NzUzN2YzLCAweGYzMWU0ZWY4LCAweDZhNmVmNmMzLCAweGRiZmYwNTI4LAotCTB4YTI4ZjQ3ZDIsIDB4ZTBhOTc3ZGYsIDB4OWYyNTVlMzMsIDB4YzY3ZWU0MjEsIDB4MWViOTFlNjcsIDB4N2I2YTNmZmQsCi0JMHhkNGU5ZDg1ZCwgMHgwOTI5YmUzZSwgMHg5OTk2OTBlMywgMHhjYzM3YTBmNSwgMHgwZjc5NjE4OSwgMHhmOTFmMjliMiwKLQkweGY2ODhkOTgyLCAweGEwYmUyNDcyLCAweDVlODQ4M2I2LCAweDdmMGZhZTQyLCAweDMyMDRhODVlLCAweGUwODIzZWMyLAotCTB4NWZlZjgyZWYsIDB4YjY1MjVlYzEsIDB4ZWMyM2YwYWIsIDB4M2YxYzE5OTUsIDB4ZTFmZTI4NTMsIDB4NzYxMjdmM2IsCi0JMHg5Zjg2MzJkMiwgMHgwODc1YzRhOSwgMHg1ZGRlZjNmMCwgMHg2ZWMyM2YwYywgMHg5Mjc2ZTZmYSwgMHg5M2I2MGU1MywKLQkweGFkNzViZDg0LCAweGVmZGE5MmY2LCAweGNmNWJjZTJlLCAweGRhY2Y2MTAwLCAweDAyNmQ5ZWQxLCAweGRkZmU1MzQwLAotCTB4MTNjNGY3YjAsIDB4ZWZkMDI0NTUsIDB4Njg3MTBiNTgsIDB4NzJmNTQxNzUsIDB4NjZiNTdmYTUsIDB4Yzg1MmU5ZDIsCi0JMHhhZTg4Y2M5ZiwgMHg0NmUwMTdiOCwgMHhmZmQxMTMzYSwgMHhlYzJjOTBkOCwgMHgzNGZmMzYyNywgMHhlMTc1Y2Y5ZSwKLQkweGRiMzhhY2NiLCAweDI5YzRmYzk1LCAweDgzNmI4NmYzLCAweDZkNWVlM2VjLCAweDQzZDgyYzVmLCAweGZjMjQ5N2JkLAotCTB4NjFhZGQ0MmUsIDB4ZjE4MTUxZTIsIDB4ZTg3YzcxMGIsIDB4ZjdiZWJiZjcsIDB4NGY3M2UwNjcsIDB4ZjEzYzYwYzQsCi0JMHgyZWNjOTdjMiwgMHgyODc5YjBiYywgMHhlMzlmMTVlNiwgMHg4NzAxNTc3MSwgMHg3OTlmODcyNSwgMHg3MGU3MGZkNSwKLQkweDEwZTE4MmU1LCAweGJjOTNhZWJmLCAweDZkYTZlZDVmLCAweDlmZWU4YzIzLCAweGQzYWRmOWMzLCAweGJlOGNmNGY4LAotCTB4ZWM0NDVjNTgsIDB4ZDNkZmIyM2IsIDB4ZmY0ZjdjODMsIDB4N2RiZjkzMWEsIDB4ODllNjM0NTIsIDB4MDQ4N2RmZDIsCi0JMHgyNzM2ODdjNywgMHhmMDgxZjhiMywgMHhmOTM5MDljNywgMHhlNTZmNWU0NywgMHhhMzVhOWVmNywgMHgzZjk4ZmVjNCwKLQkweGYzYmM1MmUyLCAweDFmZmY4MDI5LCAweDU3ZTBmZDYxLCAweGZjODc0NzdhLCAweDEwZTZmYzFjLCAweDk5NTJhNGI3LAotCTB4ZDc0MmRiYTQsIDB4NmRmOWYxMDUsIDB4ZGY5ZjEwZDcsIDB4YzVlNGM0OTksIDB4YjA4YjRhMzksIDB4ZTczNjQ1YmUsCi0JMHgzM2JkZjA4YiwgMHg4Njc5MGUzYywgMHhjNGNlYjFjNywgMHhiZWQ2YjhiMiwgMHg3Y2FjZmVmZSwgMHgyMjY3OTc5YiwKLQkweGJmNDVkMWM0LCAweGFlOGM1YjhmLCAweDNlZGU5NDM1LCAweDM1YWUyMTZjLCAweDFmZDgzZTU0LCAweGRlNjMzNDMxLAotCTB4YWZiNjJjY2YsIDB4Y2M1NjNkZGUsIDB4ZmVlMzE1MTMsIDB4MGU3ZTU0OTQsIDB4ZDVhY2YxZDYsIDB4ODVjYTE4NzUsCi0JMHgzNDdiY2E2ZCwgMHhkNDFmYjBiZCwgMHg3YWJlZDgzNywgMHhiZTI5NThhMywgMHhlYWE0YTdmNywgMHhkZWNmODA3MywKLQkweDY3YzQ3ZWU5LCAweGE4YTQ3ZDdmLCAweGRlZmU3MGJiLCAweDVmYzhmYzliLCAweDM0NWJmNzA5LCAweDI5MThmM2YwLAotCTB4ZjhiNTc2MGUsIDB4M2M4ZTNhOTcsIDB4MWU2ZjljNWIsIDB4YTZjNTllNDcsIDB4MWM3OWIzMjIsIDB4YWM5MThlNzksCi0JMHg3M2VkYTc0ZCwgMHhmZmQxOTMzYiwgMHgzM2Q2MzRiZSwgMHhmNjQ3MTE0NCwgMHg3OGEzN2NjNCwgMHhkZWM3YTBiZSwKLQkweGVjMzg4MTAxLCAweDBlMjBkZjYzLCAweDNiZTkzOTdiLCAweDRlNWVjMzhmLCAweDU1ODcxMzBhLCAweDAyNWZlOWM3LAotCTB4YzAxNzQxYmQsIDB4MDYxNmRkYzMsIDB4YmViOTJhYjcsIDB4MTdhMGZjMTIsIDB4OGZjYzEyMTYsIDB4OGZkOTI0MmUsCi0JMHhlYzNkMDY4YywgMHg5MTc4OGU4OCwgMHhmYTNkMzI2ZiwgMHg3NDRiNzg2YSwgMHhlMTVkODg2OSwgMHhmNjI2OGViZiwKLQkweGJhYTRmZGEwLCAweDZhM2E4YTZkLCAweDg3Nzk0MWU2LCAweDE0ZDM0YmU5LCAweDY3MzQwN2UzLCAweDVjMGZmYTJiLAotCTB4M2RhMmJkNzksIDB4YThhNDUzY2IsIDB4NTFiYmFjZTcsIDB4NWI3MDdmZDEsIDB4ZjQzZWEyODUsIDB4ZmQxNDViZDEsCi0JMHgyOGQ2ZjNhZiwgMHg3ZmUwMTdlYSwgMHhjOGM5YWY5MCwgMHg2Njc4NmVkNywgMHg5MmZjNjI4NiwgMHhmNTJjNWUzNywKLQkweDdjYjliNmMxLCAweDhiNzJlNTZlLCAweDc5NWQ5Yzc4LCAweDAyZmRjY2E1LCAweDlmNmZjOGZiLCAweGY4OTc5OGFmLAotCTB4MGE1NDlmMjQsIDB4ZWZmNjQ5NzEsIDB4ODdiYjJjNWMsIDB4YzU4YmIwYjEsIDB4ZGM3NTg2MDcsIDB4Njg0ZWY4YTUsCi0JMHhhMzJlZDI1YywgMHg5MTIxZDVkZSwgMHhmOGQwYTRjNywgMHg4N2NlZDJlNCwgMHg4YWRlNDJkNywgMHhmZmExN2Y1YSwKLQkweGEwYzViNTcyLCAweDNlNjM0NGVmLCAweGE5OWY1YWE0LCAweGEwMjczNjRhLCAweGQyNDY5MWRlLCAweGU5YWI1ZDE4LAotCTB4MGYwZmQ0YzIsIDB4NDg1MWY3YjgsIDB4YmEzMjNjODYsIDB4MGExNzQxNTgsIDB4YTFmODUxZmMsIDB4NzZjMmViN2YsCi0JMHgyZDM1ZTYzMywgMHhkMjAxNjM3OSwgMHg0OTQ1MjFhMywgMHgyNTc2NTExNywgMHgyYWU0YzQ1ZCwgMHg1MGVjYzJlOSwKLQkweDk5NWM0MWQyLCAweGYwZDQwZTkyLCAweDc0OTUzYWI2LCAweGJmZjRmYzQxLCAweDdlM2JjMDJiLCAweGQ0NmU5MjgyLAotCTB4N2QyMjJlZjAsIDB4ZDgwZjMxODcsIDB4ZGYwMDM5MmIsIDB4ZWIyZjc4NmEsIDB4YmFmYjgyZDgsIDB4M2NiOGJlOWEsCi0JMHgzOTE3Yzc5OSwgMHg3NDFmODc3YywgMHg2ZTEwOWFiNiwgMHhmODQ5M2YyYywgMHhlZWRjMGMwMywgMHhiZjRhMDkyNiwKLQkweDU2YWJkMDk4LCAweDhkYmQ3MzI1LCAweGYyZmMyM2NmLCAweGRhMGYyNTZiLCAweGI4NzFmZGYxLCAweDJmYTY1ZjMyLAotCTB4NjZmOWVjMGIsIDB4YWU0M2ZjYzIsIDB4YzMxMzkyMDcsIDB4ZjdmMTE3ZmEsIDB4MDE0NWZlNDgsIDB4ZmY1Y2E5ZDcsCi0JMHhmZjJjMjNhYywgMHhmMzE0NzhlNiwgMHhiZDVjN2QwYiwgMHg4YjQyZmQwYywgMHhkMWVhMzM0OSwgMHg3M2M2NmFlNywKLQkweGZiMDdhMWZmLCAweDAyMTllMWE5LCAweDUyOWQzNTNmLCAweGY5MDQ5NTdkLCAweDFhYTJlZjVmLCAweDE0MjcyNmIyLAotCTB4ZTRhNzUyOWUsIDB4NTMzZGMzMzMsIDB4ODFlNDI5ZDIsIDB4NTAxM2RkOWIsIDB4ODRlODU3ZmEsIDB4MTJiZjMwNTIsCi0JMHg1Zjk4YjBmYSwgMHgzMWYwNGZjMCwgMHhmYzAxYWYzMSwgMHg1NDBlNzAzMiwgMHgyYWU0OGQ3YywgMHhjN2Y2YTJmMSwKLQkweDk2MzAzMWMwLCAweGVjNWJjNzA2LCAweGEzM2UzODI0LCAweGZjMDRjM2Y2LCAweDg0ZmVkNDJmLCAweGFjYzBlMTc4LAotCTB4M2EwN2I4NTYsIDB4M2Y0NGUyZGMsIDB4OWFlOTA5NWYsIDB4ZmYwYmJmMDksIDB4YWUyMWZhMGIsIDB4ODg3ZWZkMjMsCi0JMHgyYWVhNzI4OCwgMHgxZTI5ZGRmMSwgMHg1Njc4ZmZjOSwgMHhjNDU3NWM2OCwgMHgzZTE4Mjk4OSwgMHgzYzFkMzNmYSwKLQkweDgwMGZiMjVhLCAweDFkZWNkNDc1LCAweDE0NzQwODlhLCAweDljNzQ5N2VhLCAweDIzY2U4NTdjLCAweGExZTJmYTZiLAotCTB4MjgyNDE1NWYsIDB4NWY3ZGM1MDcsIDB4OWZiOGZjOTcsIDB4ODFmMzg5M2IsIDB4OGRkZGZiZTAsIDB4NGNkYzdkYTQsCi0JMHhmOTUzMDdmNCwgMHhmMzI1MGIxOCwgMHhiNTBlOTE1YiwgMHg3ZjQ1YWRkZSwgMHgwNGVlODZiMSwgMHgwNDhlYmRlOCwKLQkweDAyYjMzYmM1LCAweDQzOTc1OGVkLCAweDQ3OWFkN2ViLCAweGMyYzUzOTMzLCAweDNlNTgwOWYzLCAweDRmZmNlMTI4LAotCTB4ZWQ5MTkxZDgsIDB4MTZmYWU1MzUsIDB4NDk2NjE2OTgsIDB4YzEwNWY3ZjQsIDB4NzU4NmI4ZWIsIDB4YjgwOTdjOGEsCi0JMHg5MDcxMGEyNywgMHhkNzA0Mjk4MSwgMHhjNzZjOTVkMywgMHg0ZmEyMWJkZiwgMHg2ZTg0ZWJiZCwgMHhjMTk5NWRjNSwKLQkweDllOTM2ZTdhLCAweGI3NjAzNjFhLCAweDcxNjA2NGJmLCAweGZlYTU3NmNkLCAweGY0YzI5ZDFjLCAweGUwNzBjOGUwLAotCTB4YmIyYTU5ZjksIDB4OGY3YTZhZTYsIDB4NGFlYWNmYzgsIDB4ZjdkNjI4YjYsIDB4MzYyYjljNjAsIDB4YzA2ZjdlODUsCi0JMHg5MmE3ZmY0OSwgMHg0YWJlMzAyNiwgMHhjNDNjYzZlZSwgMHhkZTMyMWQwYiwgMHg4OWJjNmFhNywgMHgzZGM2ODdmMSwKLQkweDllYTExZTMyLCAweDE3ZGUwMzRlLCAweDAwNzFkYTVlLCAweDE2ZWVhNWY1LCAweDdlYTg4MGNhLCAweDdlODViNjcyLAotCTB4ZTAxNWYwNzksIDB4MjQ2ZmRhYWYsIDB4MzFlNDQxN2IsIDB4N2VlMTQ5MGQsIDB4MTA1MjAyODgsIDB4ZjEwNTA3OWMsCi0JMHhmMWIwOTRmZCwgMHgyN2ZjZmVmZiwgMHg5M2U3M2I2NSwgMHgxYzVlNzI1NSwgMHhjZmVkYTNkYywgMHg2NWY2ZDE2YiwKLQkweDQ3ZTEwNGQ2LCAweGI4YWY4ZmJkLCAweDczYWE1MjVkLCAweDcwYTE0ZjBkLCAweDYzMmJhMGZiLCAweDI1NTdjYzIzLAotCTB4MDM0ZTFlNzcsIDB4MWM5MGFjZjgsIDB4NjMxYjdmMTAsIDB4MGQxYmY3NjAsIDB4NzM0NzcyZjIsIDB4ZjQzNzlkOTAsCi0JMHg3MTA1ZDk1ZSwgMHhlZTJiZDNjZSwgMHg2OWZkYzFiMSwgMHg0OTUwZWYzMSwgMHhhOGYwZjc4MywgMHgwZmZlZjE4NSwKLQkweDM2ZWUyMThiLCAweGQ2OWViMWNiLCAweDlkOTgxYjY2LCAweDE4YmRmNTk5LCAweDVmM2QwZTVmLCAweGZiYjNkM2JmLAotCTB4NjZlY2JhNWYsIDB4NjdkMDU3YmMsIDB4OTc2ZmQxOTUsIDB4NDBiMTkzMjAsIDB4ZTJiZDYyMTcsIDB4MWRmOGEyZGUsCi0JMHhmZTQzNTNlZSwgMHg0YzdkZjhhNiwgMHhiYmYwZGY2YiwgMHhiMTRhNjk2OSwgMHgxODdiZGUyYiwgMHhiYzM3ZDk1MywKLQkweGJiODAxNGQ5LCAweDRjNmFkN2M4LCAweGZkMDVhZmQ0LCAweGVhYzhjN2E4LCAweDdhOGI5OWM0LCAweDNiMjMwYWU0LAotCTB4M2RiOGE3NWYsIDB4YjBiMDZhNzYsIDB4ZTBlNjdkYTcsIDB4MjhjNmE4M2MsIDB4OTNlNjFjNjcsIDB4YjAxMzIzYmQsCi0JMHgzOGI0YmYzYiwgMHg1ZmI4YWNlMywgMHhjMmM3OWIwYiwgMHhmOWUxZTllNiwgMHhhYmRlMmJjMywgMHhiMTJkN2I0MCwKLQkweDUzMWU3YzM1LCAweGJiZDMwYTQzLCAweDhhY2EyZmViLCAweGFkN2FhNjNjLCAweGVhOTFmMzBmLCAweGJmMTVlYTJmLAotCTB4ZTJlMTQ4N2YsIDB4ZjNlYTA0MzEsIDB4MDcxYTBjY2YsIDB4MWM0MDViZWIsIDB4ODJmZmExNmIsIDB4MTNjNDMxNzUsCi0JMHgzYzg4OTdhNCwgMHg3YzNkMzU2NiwgMHg2OGRmZjFjZCwgMHgzMGVkMTJkNSwgMHhiYWVjMGZiYywgMHhmZTU3YmY1MiwKLQkweDVmYmQ4NzI5LCAweDQ2OGE0OGYzLCAweDFlNjFhMWU0LCAweDMwMzdiNTMxLCAweGY3ZWVhNzllLCAweDdjZWEyOWVmLAotCTB4ZTdkZTNmMzMsIDB4ZGIzN2NmZWMsIDB4NzdjNTdlNTMsIDB4OTYyZjFhMTksIDB4MWJjMWYyMmIsIDB4ZDcxODc4ZTksCi0JMHgyYWFjNzE3OCwgMHg0YmNmOWMxZiwgMHgwMjliYjNlNywgMHhlMDkxNjY3OSwgMHg1YjMyNzVmZiwgMHg5MWU0MjM1NywKLQkweGNlZmYwN2M1LCAweDlkZjAyOWU4LCAweGU2MTc5ZTA0LCAweGY4ZjM4NThmLCAweGY3OGM4NzZjLCAweGEyM2Q5ZjlkLAotCTB4Y2MzNWIwOTksIDB4NWMzOTNiYmEsIDB4ZTJkNDRmYWUsIDB4NDdjMWI5MzksIDB4N2NjMjViOWMsIDB4ZjcxM2Y0NWYsCi0JMHgzYzdkYzQxOSwgMHg1NTc2ZmFmNSwgMHhmYWMwZTdmOCwgMHg3ZTY1OGM0NywgMHgyZjNjZjU2MSwgMHg3NThhZjg3MCwKLQkweDdjMzFiMmVmLCAweGYxNGFiZTM0LCAweDJjMjhmOTgxLCAweGNkOTc3NzRmLCAweDgzZjkxOGJmLCAweDRmZTc4OTQ1LAotCTB4NzYzYWQ5OTIsIDB4YzRjZmUyZGQsIDB4Y2M4OTljZmMsIDB4MGY0NDhlYWUsIDB4N2ZkZDU4ZjcsIDB4OWE2ZTNkNDUsCi0JMHg0OGQ1NzIwOSwgMHhiMjU5YjZhOSwgMHhhYmI3OWQwNCwgMHhlZTAwNDNkMSwgMHhhMWFmMDJiMiwgMHhiYjYzZDc3MCwKLQkweDYzZjNmNzk4LCAweDdlN2VkY2VjLCAweDYxNTM5ZDhjLCAweGE4ZmU3YzBmLCAweGY0MDFmOThjLCAweGEwYTQ5YjQwLAotCTB4MDljZmZiM2MsIDB4ZGU3YzBiOGIsIDB4M2ZmZWExMjYsIDB4NGFjODRkZGYsIDB4NmRlNjc3Y2EsIDB4ZTJmYTYzYWIsCi0JMHg3NTMxYzM1MywgMHg5ZmJmN2UwNywgMHg1NDc5OTdmMiwgMHhjYjRjZGRkZSwgMHhmMTU0NmJmOSwgMHgwODU3NmU2MSwKLQkweDgzNzBiYzM5LCAweDFiMjFkZWNhLCAweDNjYzY0YmZlLCAweDI3OTQ2NmNmLCAweDFjYWU3ZjhiLCAweGE0ZGI3NGJmLAotCTB4ZWE3YmUwY2YsIDB4NGFmYTM2MzgsIDB4NzFmY2ZkYTksIDB4NGJjYmQ3MGEsIDB4ODNjODI5NDksIDB4NDJmYTlmYmIsCi0JMHg3YzhmNmIxZiwgMHg3ZTUwY2UxZSwgMHhmMDMwNjgzYiwgMHhkZDk2MjM1ZCwgMHgyZjJjMTYyZCwgMHg0MWJiMzhhNiwKLQkweGRkNTNlODNlLCAweDdiZDdjMGJkLCAweGJhZjA2MWRmLCAweGM5ODE3ZjUwLCAweDM5YmNiODBiLCAweDg0YjlmODEyLAotCTB4OTMzMGNlZjIsIDB4ODQxZjc5YzUsIDB4MmUxNGVjN2IsIDB4ZmI5MzAzMDYsIDB4MzVmZGRjNzIsIDB4NWU5NTcxOTMsCi0JMHg3ZTExOGJhNCwgMHhjYTJiMWNjYiwgMHhkMDBhNDcyMywgMHhlMzczYzI3ZiwgMHgxM2ZjMDAyNywgMHhjMjcxOGI5ZiwKLQkweDdiOTdkNmJlLCAweGMzN2YwNjlmLCAweGU4ZDE1NWZhLCAweDU4MWEzNWZmLCAweDdiNjczOTljLCAweGMwZWMwNmI5LAotCTB4ZmI0OTc2ZWIsIDB4ZDRkMWRmYzEsIDB4ZGUxNzJhYjksIDB4YTNkOTMwMTcsIDB4YWUyMTNmMzEsIDB4OTMxNjVlNzMsCi0JMHgwOTNiZWM3MywgMHg4MDFkYWVhZCwgMHg1N2I4MDRjZiwgMHgzZWI1ZDc0NywgMHhmOGMyOWJjYiwgMHgxYTgzZDMzOCwKLQkweDI1N2JjYzM5LCAweDNkYzA3ZmZiLCAweDMyMWJjZjZiLCAweGEwYmM4M2RlLCAweGQ3ZmNmOTY1LCAweDkxNWY4NjEzLAotCTB4MGVkZjA1MGYsIDB4MjliYWY3ZDYsIDB4NDBkMGM4ZGMsIDB4Yzk3NmZhZmQsIDB4NzdjNThiYTcsIDB4NTE1ZTMwMjQsCi0JMHgzNDk3ZGFiZiwgMHg2ZmQxZTQxMywgMHhlOWVmMThiNCwgMHg1MmVmZDc1ZiwgMHgyM2FlMjAyYiwgMHhjOTRjZDBlNCwKLQkweDVjNDdmY2MyLCAweGM0NGU5ZDlmLCAweGFhMTcxNjNmLCAweDlkMzI3NGU1LCAweDYzMzNiMWViLCAweDEzZTc3YzE4LAotCTB4OWI4YzI2NDcsIDB4MWFiMTI0NjEsIDB4NTY2Njk0N2EsIDB4ZmVlMDk3YjYsIDB4ZDA1Njc0ZWEsIDB4MjM3YzQ0MDcsCi0JMHhkZTExMWViMiwgMHhiNGY4ZDNlZiwgMHg5NGM3ZGQ5OSwgMHgyNGMwODZmYSwgMHg3MmE3YzE2NywgMHgzYTM3ZjM4NSwKLQkweGM2OWRjOTk1LCAweDRiOGZjYzIxLCAweGM0MjcxMTA2LCAweDFkNWYxYWQzLCAweDcyZWMwNWJhLCAweGRiOGIzNDQzLAotCTB4ODQ2NGJlNTIsIDB4ODEwZTU2ZjcsIDB4NWVmYmE2YmMsIDB4N2IxNDRhZjYsIDB4YzdkYzQzM2YsIDB4ZTEwYjM4YjYsCi0JMHg0ZDUzNjM3ZSwgMHhiN2RlMTE0NiwgMHhlZjg3ZDkzYSwgMHhmY2U4ZjQyMCwgMHgyOTdlNzg5OSwgMHg0Y2E4OTFiZiwKLQkweGI2ZDM3M2JjLCAweGNlOTRiNTViLCAweDNlYThkMzFiLCAweDM2NmJlYjQ2LCAweDBiNTViY2VkLCAweGZkYjJlNGY3LAotCTB4ZmViNDM1OGIsIDB4NThiN2E2ZmMsIDB4NGZmZWY1ZmIsIDB4YTZmMmZlYTEsIDB4YzhiZGFjMTMsIDB4ZjVhNjU4YmYsCi0JMHg2MTNlOWI2MywgMHhhNGQwNjBlZCwgMHg0ZDk3ZjIxMSwgMHhlODdhYjdkZCwgMHg1Y2FkNjdmYywgMHhmMWY4NzFkZiwKLQkweGRlZTM2YTFlLCAweDdmNjA5YWExLCAweDhjYTk5YmUyLCAweDYyOGQ5ZDVmLCAweDkxNjZjZWZkLCAweGVmMDAzNWI5LAotCTB4NWZmZGYwZGMsIDB4MjRmMGQ1NDgsIDB4YzUyYzM2OGQsIDB4OTI3OGM1N2UsIDB4MjJkYzdlMTIsIDB4YmYxOTZlM2UsCi0JMHg4NjI2M2E4NywgMHhmMTYyOGJhYywgMHhjNTJjNGYyOSwgMHhhMWNlYzFjMywgMHg5ODliNWYxOCwgMHhmMzcwZTM2YSwKLQkweDYyMjUzYmUzLCAweDMxNGYwMTFlLCAweDVkZWVmODlmLCAweGJlNTk5NzIwLCAweDllNzA2ZDVhLCAweDdmMWNkZGZhLAotCTB4ZjA2YjNiZjQsIDB4ZWM5YzgzM2IsIDB4NDY0ZDY2ZmUsIDB4ZTI4ZmUwMjEsIDB4YTZmMWNiNGQsIDB4N2I4OWJjMDUsCi0JMHhiNWFmMzBkZiwgMHg3MGZmZjkwMCwgMHhiYzFmNWJmMCwgMHgwNTY3ZmI0NCwgMHg5M2E2YWRkNiwgMHhhN2M2NTQ5NiwKLQkweGI4YjJiNTk3LCAweDA3MzU5ZjYyLCAweDBjNGM2OWU5LCAweDU4YTJmNzdmLCAweDFjNjM4ZmI5LCAweDVhYTY2ZjBlLAotCTB4MDEwNzNkZjksIDB4YmYwOTY0YWYsIDB4OThlMWNhZDMsIDB4OTM1MjFmZTEsIDB4ZmRmN2NkZmYsIDB4NzdjZjVmMzAsCi0JMHg3YzIwZWZiZCwgMHg4YWZkZTEzOSwgMHg2ZGQ3MWQ4MywgMHhiMWIxZmI2NSwgMHhjZjRhNTRiYywgMHgxZWYzZDQzNiwKLQkweDc2NzdjYzU2LCAweDE5N2M2YTk1LCAweDVmYjA5MDNkLCAweDdmOGUwZTViLCAweDIwNzdiZjkwLCAweDcxODJmM2RlLAotCTB4M2Y0YzA1NTksIDB4ZGM1NWJkMDUsIDB4OWI5ZTI3ZDMsIDB4YjRmZmIwNDksIDB4M2I3ZTNlZmYsIDB4ZDgxYjM3YmIsCi0JMHg3Y2M1YWRlNywgMHg0ZmJlMTY5ZiwgMHg1N2E3ZGIwYiwgMHg3OGU0YWY0MSwgMHg3MzU0ZTY1ZiwgMHhjM2Y3MWQyOCwKLQkweGJjYmU3ZmJmLCAweGUyOWYzZTIyLCAweDBmOWI4NzljLCAweGJjMjQ3NWNlLCAweGYxYWVmYzFjLCAweDgyYTlkNjIyLAotCTB4NTU5YzNmNjcsIDB4ODRmMDEzZWIsIDB4ZjJlMzhkZjMsIDB4ZDYyOTc0OTQsIDB4ZjNhNDcyZjksIDB4YmYyZGY1OWQsCi0JMHgzNWM2Y2U1NywgMHhmN2U1ODBmYywgMHhhZTkyYmIxMiwgMHg2OTY1NzYxYiwgMHhjNjJlN2UyMCwgMHgyZWNmMDNlNSwKLQkweDNlYmRmODA5LCAweDYwNzZlNTRiLCAweDkwODhjOTA2LCAweDM1MmU3NzhmLCAweDdmMGNiZmJjLCAweGJkODFkYjU3LAotCTB4YWNlZjk2NTYsIDB4MjZmNDA3ZjYsIDB4MTA5Y2JhM2EsIDB4ZWVjZjNhNDcsIDB4Zjk1MjhmNmYsIDB4YjI5ZTIwMmYsCi0JMHgxNzE4MTRkMywgMHhmYWNhMmY5MCwgMHhiZjA2MzRjOCwgMHgxZjRiZmY1MCwgMHgzNjJkMmZkZSwgMHg3NzY4YmM1NCwKLQkweDMxZWViYjUwLCAweGJmYzA2ZGNkLCAweGVlMmFlMzhiLCAweDk4ZjVhMmM5LCAweGMwNmRkZDM0LCAweDJiZDM4YmJmLAotCTB4ZmNhMmM4YmUsIDB4NjdhNjljZGMsIDB4YmUyYTFiZjUsIDB4NjNmYTg2YzgsIDB4OGM3ZmQ2N2EsIDB4ZjdlMDQ1ZjMsCi0JMHg2ZGJmYTNjNCwgMHg4ZjQwNmE2YywgMHhiM2IzNGQ4OCwgMHgxYTk1NTNmYiwgMHg1ZmFiZmY3YywgMHgwMTlkZjk3ZiwKLQkweGQ3MDExN2Y1LCAweDQxYjE2NTQ4LCAweDRlMmUxY2QzLCAweGU4MjY5Yzk1LCAweGNhMTNjNTgxLCAweDkwZWQ3ZmUwLAotCTB4N2NlZGM0ZjcsIDB4ZTc2MTU2YmYsIDB4ZmJiMmM2ZjcsIDB4ZmVmYmJkYjcsIDB4YjIyN2Y3ODYsIDB4NjkxOWRjZDMsCi0JMHgzMTRkNWQ3NCwgMHg2OGIyNzNkZCwgMHhmYmNjNzU3ZCwgMHg5YzkyYWYxOCwgMHgzZjAxMGY1NCwgMHg2NjQyZGQ4NywKLQkweGRkNGFmNWQxLCAweDJmYTA1ZGViLCAweDQ2MWNiYjkxLCAweGZiOTVjMjJkLCAweDMxNGRlMDdkLCAweDVlNTdiZjBhLAotCTB4ZTk3ZGNkZmQsIDB4NTgyZTMzZWMsIDB4MDdjZTQ4YzcsIDB4ZmFmZDVlOWEsIDB4MzY3Mzg4MmIsIDB4YzAzOTM1OWQsCi0JMHg3M2IyM2UyZCwgMHg2ZmEwM2RkMywgMHhmMzdjZWM4ZCwgMHhkOTg3MjY2YiwgMHhlZWIxMGY3ZCwgMHhhM2Q3ZTA5MSwKLQkweDE4NzU5N2JmLCAweDNiMjNmZDcwLCAweGZkMDQ1YmFmLCAweDMzYTFmZDQ3LCAweGE2ZTRlODA3LCAweDYwNTZiZTUzLAotCTB4NWVmYmJkMGIsIDB4MWZkZTU3NGUsIDB4Nzk4YWVjZmQsIDB4NGRlMzExOGMsIDB4ZTg5ZjFlMDIsIDB4MTQ5OWU4MDksCi0JMHg3ODMzMzcxZSwgMHhhYjdjYzI1YywgMHg2YjYzYzQ5ZSwgMHgyYjk3YThmZCwgMHhiZDUwZDNlZiwgMHgxN2E2ZTMxZCwKLQkweGZjMDNiNDQ4LCAweGIzNWVlMmY4LCAweGIyNzg1ZmRhLCAweGZlOGZlZTlhLCAweDVkMWY1MzdlLCAweDNjZGU5MDQxLAotCTB4MzI5MWEyZTYsIDB4OWNiZDQwOTIsIDB4NGFmNTE1NTgsIDB4N2ZhMmFhNjMsIDB4ZDE0YjI1OTUsIDB4M2FlNTNlM2UsCi0JMHg3YjQ0ZmI0NSwgMHgyOTNlYTJhMSwgMHhmZmEyYTQ3NywgMHg0NTcyOGU2ZCwgMHg4OWIyZjZmZCwgMHhjZWQ1ZmU4YSwKLQkweGQwYmQ0NTZhLCAweDNmZThhZWQ3LCAweGIyODc0OGZjLCAweDAxOTEzOGZkLCAweDFkMjc0NTBmLCAweGY5MmNhMDA3LAotCTB4Yzc2ZTg5ZDgsIDB4MDdjZDMzZDIsIDB4MjVmOTFjYTAsIDB4NWZkYTg3MDMsIDB4ZjZjNWUzN2EsIDB4ZjBiYmYwMDMsCi0JMHhjN2VmYWE5NywgMHgzNGU5ZmYwOCwgMHg4N2Q1ZTRkOSwgMHg2OGE2OTNmNywgMHhmMjVlNzk2OSwgMHgzNTkxM2YyMywKLQkweDJkOGM3ZWVjLCAweGUwMmY3ZGQ2LCAweDE5OGZkYzRkLCAweDhhNTJmZTAzLCAweGU3YjlhYTg0LCAweDU5ZjBiZGQ5LAotCTB4MTI3NjVmY2MsIDB4NjlmYzAzMTAsIDB4N2NmZDE5YmEsIDB4Y2ZjZDc1MjcsIDB4YmRjNTk5ZmYsIDB4YmJkZjAwMDcsCi0JMHhiMTU2YWZhOSwgMHhkZDE3MzFlZiwgMHg5Mzk3N2Q4YSwgMHgyZDNjMmE2NSwgMHgyY2FiZDQ1NywgMHgxZmY0NTAzZiwKLQkweGQxNGFiMjlmLCAweDkwZmVkMTNlLCAweDJiMGY0ZjBhLCAweDM2MzliN2VhLCAweDQ1YjRmMGE5LCAweDI4ZGZhNzg1LAotCTB4NzBlZGZiZGEsIDB4MTU3YWJmZWUsIDB4MWNiNDRlZmMsIDB4MDRhYWVmZWQsIDB4YTY3Y2RjM2MsIDB4ZDY1MWYxMGYsCi0JMHg3ODA5NTZkNSwgMHgzYjY0ZjFiYSwgMHhlN2Q4YWJlMiwgMHg1OTc2MDRhYSwgMHgwMGY5YTQ3YSwgMHg3ZjZhM2U5NCwKLQkweDVhZDdiOGMxLCAweGQ4M2NiMDUyLCAweGQ1ZmY0NzYyLCAweDJjNWM5NmUxLCAweGYwMzhiNDhmLCAweDk0YjdkZmY3LAotCTB4OGI1NmY5NjEsIDB4NmNmZmNiMTMsIDB4NTc2NTgwOTksIDB4ZjZjYjBiOGIsIDB4YmZlYzc2OTYsIDB4Zjk4M2E1YjMsCi0JMHhkZmZiZTJiZiwgMHg3ZTAwMTgxNSwgMHhiZjhkMWU4MSwgMHgzYzU2ZWUxMSwgMHhlNDM0ZDhmNywgMHhmZWQxM2Q5ZiwKLQkweDI2YWZhODFlLCAweDk2MzZkZTc3LCAweDgxZTc4ZDMyLCAweGNjOWQ4MDg5LCAweGNlZTlhM2NiLCAweGJmOTRlOWQxLAotCTB4YWMxYzg1ZWQsIDB4NDFmZTQwOTIsIDB4MDg1OWM2YmIsIDB4YjRlMWY4N2EsIDB4MGVkMTNmMDUsIDB4NTU4MWU0MjAsCi0JMHg5NThiMTRhZSwgMHg4ZWI0OGRkNSwgMHg2NDMxODZjOCwgMHgxOTljNGZjMSwgMHgyNTEwNWU3NCwgMHg3MDU4NGMxOCwKLQkweGEzN2JkNDFiLCAweGI0ZGVmYjU4LCAweGYyNzliNzA1LCAweDYzNzEwN2ZlLCAweGUxN2U0ODY3LCAweDcxMzBiNGUxLAotCTB4ZDhjZmU3ZTMsIDB4MzljZmUwY2QsIDB4MTlhODY5NzYsIDB4ZmI4YzcxZTAsIDB4NTBhNDljYjUsIDB4ZTU5NjhmMzcsCi0JMHhjODFkNDJkYSwgMHhiZDJhOTNkOSwgMHhlNDUzOTQ0NCwgMHhkZTYxYjdmMiwgMHgwZWUzOGQ3NiwgMHg0NWJlNmZjYywKLQkweDZiN2U4MDQ3LCAweDhhZWY2NjI0LCAweDk5ZDNkYjdlLCAweDliN2JkMGJkLCAweGUzYTllZDAxLCAweGJjMjJlNzFhLAotCTB4M2RmNTI3MTcsIDB4NDllZTcwMDEsIDB4YTljYTNlZmIsIDB4MjY1ZjczNWUsIDB4ZWQzYmFmYzAsIDB4ZDg5ZWFjN2IsCi0JMHgwOGU0ODRmNywgMHg3YzE4ZWJhYSwgMHhmN2JiNGZkZSwgMHhkOWNmODZiYiwgMHhmODUwOTJiNCwgMHg1ODU5YTZmNCwKLQkweDFjZTdjMGRjLCAweGFmMDA3YTgwLCAweDM2NzZhZjFmLCAweGRjYWM5YzYwLCAweDcxZjYxODM5LCAweGU3NjA2NWNjLAotCTB4ZmJjNjY1ZDcsIDB4MmNlYjQ0MTMsIDB4YmZjODIzYjksIDB4YzNhZTk3NTMsIDB4YTJlMTUzNzEsIDB4NjczOWY4MWIsCi0JMHhkNWNlNzhjOCwgMHg5ZDI4N2NmMCwgMHgyNzQ4MWZkOSwgMHg4ZjRlNjc2MCwgMHhiOGUwYmI0MSwgMHg1NzM3ZGQ4NiwKLQkweDlkMjY3ZmY3LCAweDExNzNkOWM5LCAweDBkZmQ4M2RlLCAweDk0YzU3Yjg3LCAweGQzNzdlNzg2LCAweDQ0NTc3YWY5LAotCTB4YWViZGQ0ZTEsIDB4ZjU4ZmE4YTEsIDB4OWY3ODRiMzYsIDB4ZjM0Y2Y3YjcsIDB4NzA2ZWQ2NzksIDB4ZGM2MDkwNzAsCi0JMHgxZmZjMjY3MiwgMHhmM2JlN2Y2ZCwgMHg5MWZlYmY5ZSwgMHg0NTdmN2ZmNiwgMHg4ODY1MDM4YywgMHhkZjg0N2FlNSwKLQkweDc2NzlkZTBjLCAweGE3ZjUxMWJjLCAweDJhMDMzNWQ5LCAweGU0Y2UyZTQwLCAweDY2MzliMDcxLCAweGMzODYxMjZkLAotCTB4M2MzZDU2YjQsIDB4NTRkMGI4OWQsIDB4OTA0Mjk2YjgsIDB4ZDZhODRlMmMsIDB4NGI0NTUzYzMsIDB4ODVhZjk2MzMsCi0JMHgwZjQxYWVmMiwgMHg5ZjA5ZTFlYiwgMHg2YjFkYmNmYSwgMHhhMDZkOGQ0MSwgMHhmOTA0Yjg0NywgMHgwYjY4ZmY5ZiwKLQkweDk1ZGNkNzVkLCAweDczZDk5ZGIyLCAweGViM2FhZTVjLCAweDg3MWU1MWJlLCAweDNjZTNkZmEwLCAweDAxMDI4NmFmLAotCTB4ZDM2N2Q1ZWQsIDB4ZmI3Zjg1MjUsIDB4NjFhZjBlNTksIDB4Y2M3ZjVjZTksIDB4MWVlY2Y5MjcsIDB4NjA5YzdmNTEsCi0JMHhlZWZiOWMzOCwgMHg0NDg3NDdkOSwgMHhkYjI4MjM4OCwgMHgyZWY4ZmViOSwgMHhmZDU2ZTc3ZiwgMHhlZWY4ODNlZSwKLQkweGM3ZWYxYzczLCAweDQxMzI5NGY1LCAweGU0YzE5YzlmLCAweDE3ZWQ0MTQwLCAweGZlZTg0YmFiLCAweDFhMmQzYTBiLAotCTB4NmRjZmQzOGMsIDB4Yjg3ODBkZDgsIDB4YThmMWMxZDAsIDB4OWU3MDFkMjMsIDB4YmRlNjc4YTYsIDB4YWE0ZDM5OGYsCi0JMHg5MzU3YTE3YiwgMHg0YjJlOGU5NywgMHgyY2JjYjA2NSwgMHg4MzJhYmJmNiwgMHg1ZjU5NjVlNSwgMHg0NWM4MjU1YiwKLQkweDJkN2QxZjIxLCAweDZlM2YzOTRiLCAweGIwN2EzZTQ2LCAweDBmZDYyNTY1LCAweDNjYjA3OGI3LCAweGYzOGViMmQyLAotCTB4N2Y2YzM2ZTMsIDB4Y2U1MWU1YWIsIDB4MWY5Y2JkOGYsIDB4NzdiZjgzM2YsIDB4Zjk2MmQ0YjYsIDB4Y2IxYjhiNmEsCi0JMHgzM2RjZTMwNywgMHgzZTIyNmUwMCwgMHhjNmU4ZDUzOSwgMHg5YjQzZDFiYywgMHg1ZmUyMDQwYywgMHg5ODBkM2ExNywKLQkweGM0NGY0MDk3LCAweDQwMjc4ZjEzLCAweGVmMDE4ZGRlLCAweDZmZjNhOWY1LCAweDlmYmU3Y2Q0LCAweGI3ZGY0MjFlLAotCTB4MTg5ZTljNTgsIDB4ZmEwMzM3OTQsIDB4ZjRjOGMwZTIsIDB4Y2RkODhjNzQsIDB4ZWRmZTk3YzAsIDB4MGY5MDU3ZjEsCi0JMHhjZGRiYjMxZCwgMHhhNGI3NGZhMCwgMHgzOGJjYTI3NywgMHg3NTliYjRlNiwgMHhiYzc5ZWViNCwgMHhlZGJiYjU5MywKLQkweGFmYWQwMzY2LCAweGRhYzdkZjRhLCAweDE0NzM3NjNkLCAweDdjN2VhZmFkLCAweDEyZjc2YjFmLCAweGY4M2YyMjBjLAotCTB4YzdjODZiZjgsIDB4MTA3NDg5Y2EsIDB4MzFhNTQ3Y2UsIDB4MTcxNTJjNmIsIDB4MWY5NzVlNTQsIDB4M2UzMTczODQsCi0JMHgzODU4ZGU2NSwgMHgzZDcyNWYxNywgMHhkNTdkYTI3ZCwgMHhjYTRmYTg0MSwgMHhhYjg1YTJkZCwgMHhlMTUzNGVkZiwKLQkweDkxNTcxODFhLCAweDcxODVhZDUwLCAweGFmOTYzMzYzLCAweDA2ZTM3MTgxLCAweDFlMGRhYzNkLCAweGM3NmYyMTM3LAotCTB4ZWFkZmE4MWEsIDB4ZmQwNWEyZDgsIDB4YzdjZTRiZjQsIDB4MmVhMjNjYzQsIDB4MTY5ZjA1ZGEsIDB4M2FjMzYwZjksCi0JMHgwYTBmMjg1ZCwgMHgwZjI4NWMzYSwgMHhhNjJhNWMwNCwgMHg3ZTAwM2Y1NiwgMHhjOTBlYTZjNywgMHhhNjNhYzEyMiwKLQkweDcxYzFmZDRhLCAweDg0NmJhNWM4LCAweGJmMjkyMmY3LCAweDhlZmU5OGRlLCAweGQ3MWQxNTc5LCAweGIxMWJmNTA0LAotCTB4YTY1NTkzZmUsIDB4NmY3Zjk0ZWYsIDB4ZGYyMzBmNGQsIDB4MGVmM2YwNGUsIDB4YmJmMjFlZjIsIDB4M2JkOWU4NGYsCi0JMHg1YzAzNWYxZCwgMHg5YjllZjA0YSwgMHgyNGI1ZGYxOSwgMHhlM2ZhMzM2ZSwgMHgzZDgzMzY0MSwgMHhiNjllNzIwNCwKLQkweDE5NjVlNzBmLCAweDY0NTNmYjk3LCAweGNlZjg3NmU3LCAweGMzZjk5MThiLCAweGFiZmNmY2NiLCAweDY4NDQ0ZGVlLAotCTB4NGY2MWZjZTcsIDB4NGJkOTg1YmEsIDB4MDY4NzVkZmMsIDB4ZDA3ZTg2ZDIsIDB4YTk5N2U1YWIsIDB4ZjlkNWExZjMsCi0JMHg1OWZmMjIxNiwgMHg0ZjUxNWY5ZCwgMHhhMTMwN2JkOCwgMHhkZWVjY2U3OSwgMHhiMzllNDg2ZSwgMHgxOWEyYWJiMCwKLQkweDVlMDVhZDNmLCAweDc4ZjhlOTQzLCAweDA5NTdjZjNhLCAweGFiYzljMzg1LCAweDM4NjRlMWMwLCAweDg3ZWM4NDM4LAotCTB4MmVlZjMxNzgsIDB4NzRjNmZmMjQsIDB4ZGVhY2YxMWMsIDB4YjIyNzcxMTcsIDB4M2Y4OTM2ZjcsIDB4NWQwNGZlZWMsCi0JMHg4ZGFmZWU4NCwgMHhlMGNiNWZjMSwgMHhiM2JiZjU0ZiwgMHhiOWFhZTc4MCwgMHhhYjdlMDI2NiwgMHhjN2YzZmU2MCwKLQkweDM1MWZmMDJiLCAweGY4YWVmYjVmLCAweDBkYjliNGU1LCAweDUwODBmZGVjLCAweDFjMzk3NjNlLCAweGMyZjcxMzFmLAotCTB4NTNkMGE1ZDUsIDB4ZTQxYTNlZTEsIDB4MzQzYmMyMDEsIDB4NGJlZmU3NjAsIDB4ODA2NzQ3NzYsIDB4ZjdkMTU2N2UsCi0JMHhkMGVjMDY5NSwgMHhmMzdlZjYwNCwgMHg5Y2RiOWIyMiwgMHhlOTIyZTE0MSwgMHhjODgxN2U1OSwgMHhmMWEzM2RjMywKLQkweGI2ZjQxNmZjLCAweGM5ZTZjZGI0LCAweGIwODMyZmE4LCAweDRhYzc2N2EwLCAweDdlM2ZlMGViLCAweDg3OGFlYWQ2LAotCTB4YWZkNzI0NzEsIDB4M2EwNzdlMGYsIDB4N2E2OTllNTIsIDB4YTE3ZjkzMDYsIDB4NWZlNDUxMjUsIDB4ZmFmOTZlZjYsCi0JMHg4YTJmZGU5YSwgMHg3OTJhOGYwNCwgMHg0MWVlMWZiNCwgMHg0MThiMjg1YywgMHgxMTJkZDlmOSwgMHhkYjNmYmMxZiwKLQkweDdhODQ5ZTVkLCAweGJkMDBmNzRiLCAweGRhZWZjYTE2LCAweDMwMWVlZTJlLCAweGRiNTdlNzA0LCAweDY1YTlkZGM3LAotCTB4NzFkZGY2NDYsIDB4ZDBlY2EwMTMsIDB4MDc5ZDFmYmIsIDB4MDY5MWUwZmUsIDB4Y2RiYzkzOGMsIDB4YzcyNzBmZjMsCi0JMHhiN2MzZmNiMCwgMHhjOTgwZmRmOSwgMHgwMDRhNWUxZiwgMHhmNjU5MzhmOSwgMHhhMTQ4MTUyNSwgMHgxYmY3NzY3NiwKLQkweDA1ZWMyYWIzLCAweGRkMzZmNmExLCAweGVmZDg1OGVmLCAweDk3NmVlY2Q1LCAweDYwMDZjYmIxLCAweGY1ZGZkYjU1LAotCTB4OTAyMmJmMmIsIDB4ZTU2YTNkZTcsIDB4ZTNmOTAyMjUsIDB4YmM3YjczZmYsIDB4YTRmNTEzMmIsIDB4OTUzM2U0YWIsCi0JMHg0MTViNzlmNSwgMHg4OTczMThmZiwgMHgyMjhlMzllNSwgMHg5NTI1Y2UyYywgMHg5YmYyYzliZCwgMHhkYmI2YTk3OCwKLQkweGJkYTg2OGU3LCAweGE3NmExZDllLCAweGE1ZmQ5MmNmLCAweGQ0MjFlZjUwLCAweGQ4MDljZjVlLCAweDM3NGVjMmViLAotCTB4NDViZjk2MTAsIDB4MzgwNmY3ZWQsIDB4ZGRiOWU3MTcsIDB4OGYxMzMxNGUsIDB4N2MzZjIxNzksIDB4Yzg3ZGNlNmYsCi0JMHg5ZjMwYTIxNywgMHg4ZjhlZjllMywgMHg3ZmFkNjExMiwgMHhjNWZjNGFlOSwgMHhiZDAwZjYyYiwgMHgyMmJlNTkzNywKLQkweGY1ZmE3OWMxLCAweGMxMjBiZjJiLCAweDczNzViY2VmLCAweDhlOWI3NzNmLCAweGZmYWE0M2RkLCAweDhhNzI4Y2E3LAotCTB4ODA3NWI1Y2EsIDB4OWFmMjdhYTcsIDB4NzkyMGVlZmUsIDB4YWJmZmRhNGIsIDB4MjhjM2RlMWYsIDB4MzU4NmFiZmYsCi0JMHhiNGY1YmM4MSwgMHg3ZWQyNzY0YywgMHgyMjNlZGNkNSwgMHhhYzc2ZjkxZSwgMHgzMjkyN2I3MywgMHgyODllZDY0NiwKLQkweGVhY2JiZmZhLCAweDEzZmY0NDAzLCAweGJiZjQ5ZDkzLCAweDlkYTJhOWQ1LCAweGQ3OGViZjhmLCAweDZjNzZlZTg5LAotCTB4MGRmMzEyY2YsIDB4NmIzMzc1NjUsIDB4NzJmOGNiNmYsIDB4ODIzMWU4MzIsIDB4ZTBjYzZmYmYsIDB4NDdiZjkxZjIsCi0JMHg2M2ZkZjk0NCwgMHhjYzU3ODkxOSwgMHg3M2I2NTFiZiwgMHgxZmRlMjA3OSwgMHhjNGUxZmFhYSwgMHg2ZTcwYTM5OCwKLQkweGI1Y2MyNWRiLCAweDg3NWZiZmFiLCAweGI2NzNmYmZlLCAweGY3ZTA4MmY2LCAweDhlOWU0NTRhLCAweDc5OGNkMmFiLAotCTB4MGQyZjBkNTMsIDB4MjI3NDBhZGQsIDB4ODEyNzhmOWIsIDB4ZTNjNWQyZGUsIDB4MDliMjU1ZjEsIDB4MzYxNzJlZTMsCi0JMHg0OTFlYmUzMCwgMHhmMmJjNWJlZiwgMHg0MmJlMDUxNSwgMHhjMGZiZjlkYSwgMHhkZmE0OTgxOCwgMHg2NDkzZmYzYiwKLQkweGEwZjMzZWY2LCAweGU4MGJjYzJlLCAweGRlMGM3Y2UwLCAweGMzN2I4NDdiLCAweDIxMmJmZjIyLCAweDVlYzEzODg3LAotCTB4OGEzOTc4NGUsIDB4NzFmOTUzYmQsIDB4YzVkYmYyMTcsIDB4NzY3ZjMzMmYsIDB4MjgwM2E2YzMsIDB4NzZjYmU2ZGYsCi0JMHhjODlkMjdmNCwgMHhmMDBhYmY3NiwgMHgwZDc3MzFlOSwgMHhjYWY4MzhjMSwgMHgzZjVkNzE1NywgMHhkYzc4NWJiMiwKLQkweDE4MmYyZmFiLCAweGUxNDM4NzllLCAweGMwYWJmYmZmLCAweDRhZmZmN2ZmLCAweGZjODJlZmY4LCAweGJiNzNlMDMyLAotCTB4NGRiZWQwYTMsIDB4MGVmNWZhZDYsIDB4NjQ5ZTZiODgsIDB4ZTc5ZTVjZWYsIDB4ZmFlZDJiNzAsIDB4ZjgxNWRmMTAsCi0JMHhkM2IzMDY2NywgMHhkYzU4M2FlMiwgMHg4OTY1ZTQ0NiwgMHhjMzMzZmVlZiwgMHgxZTc0ZWNjYywgMHg3OWE4NjkxZiwKLQkweDQ3YzQzNDZiLCAweGM0YzZmZTA0LCAweDc3ZjA3NjkwLCAweDM4MzgzYzUzLCAweDA3ODAxYzFlLCAweDljNDBlZjAxLAotCTB4MGFjYjhlODQsIDB4YjBhZWQ3OWUsIDB4MjNkYzA1MGYsIDB4N2QzNTYzOWQsIDB4ZTNhYjc1ODgsIDB4MGU5OTc3MDYsCi0JMHhlZjdlMDA5NiwgMHg4NDc5ODZmYSwgMHhiMGI0Y2ZkZiwgMHhjYzdlYjRmOSwgMHhmMDExZmMxMywgMHgxZTAwYzRjYSwKLQkweGVmOTQwMzc1LCAweDQ2YmM1MTgwLCAweDIyYjkyODBkLCAweGZmZWQ5NWRlLCAweGMzNTc3OGNiLCAweGYzZDY1ZDRkLAotCTB4ZjdmYTk4MzgsIDB4ZmYzNDAzYTEsIDB4YmZmYzcwYWIsIDB4ZGQ5ZDVmZTYsIDB4M2VkMTVmYmMsIDB4ZDcxYmU1NzcsCi0JMHg3ZTE1N2ZlNCwgMHgxZjk1N2ZkMSwgMHhmNWZmOTIzNiwgMHgxNmVlOTkyZiwgMHgyZmM5YmJhMCwgMHhmYzQwZDEyZSwKLQkweGZmYmRmNmU2LCAweDhiMDEzYmM4LCAweDVlMzAzYmY3LCAweGNiZGYwZjc0LCAweGY2ZmZhMzE3LCAweDllOTQ3ZGZlLAotCTB4N2U2NjY4YmUsIDB4M2ZmYjUzYTksIDB4NDNmM2Q5ZDcsIDB4NDVmNjYzZTksIDB4ZTg4MzM4OTksIDB4NzdjYWY2NmEsCi0JMHg2NjlmMjA3NCwgMHg1YzIyY2Q1MywgMHhhNzBkNmE3YywgMHhhMTI3Y2MyNywgMHg0OGQ2YTA3YywgMHhmY2Y0MDk3NCwKLQkweGY3YjJkNmQ3LCAweDEwMjE2YmE1LCAweGU3ZDJjMzYzLCAweGI1OTNlZGE2LCAweGM3ZWYwN2M0LCAweDNlYjQ5YjU2LAotCTB4OTQ4N2M2MDMsIDB4ZmMwZDYxZjcsIDB4Njg2YTU5N2QsIDB4Y2FjNWVlMmEsIDB4OWVmMzE5NGUsIDB4NzE2MzI4ZWUsCi0JMHg3NmE2MTlhNSwgMHhmZDM4ZGZiYywgMHhmN2YzZWFjOCwgMHhlMzVkZDljMSwgMHhiYTc5NjEyOSwgMHg5ZmQyN2VlMiwKLQkweDVlMjRkZjM0LCAweDM3ZTQwNmI0LCAweDFlMjU5ZmY4LCAweGMzYWU1Yzg3LCAweDVjN2FhNDM4LCAweGZlNzYwMGVkLAotCTB4Y2IxMmNiMjYsIDB4ZjJjM2Q4MzcsIDB4YTQ3OWM0ZDcsIDB4Mjg2MjNiZmIsIDB4ZjBmMzc5NjIsIDB4YjM3NTZhY2UsCi0JMHgwMGI0MzdjZSwgMHhhOGZkOGZmNCwgMHhhZDk1MzQ3ZiwgMHgzNTNjMDAyYSwgMHgzMDNlOTU4ZCwgMHhjMGY0MDQxNCwKLQkweGEyNWY5NWE2LCAweGM3ZTZhMzdlLCAweGZkNWFmMmVhLCAweDFjYjdlZjUwLCAweGZhMTE3YTQxLCAweDFmMTZhOWUyLAotCTB4YTk3ZWQ1ZDYsIDB4OGM3ZTYzNTksIDB4NWY5MTljNzEsIDB4ZDQ3MGJkMzIsIDB4MTE4OWU3MjUsIDB4NmY2ZjZmZjYsCi0JMHhkODRiM2IwOSwgMHg0ZTNiNmE1ZCwgMHg1ZWYxMGJmMCwgMHgwYjAwZmI1YywgMHg3N2M2YmI5MywgMHg1YThmZmJkOCwKLQkweDQwMzRiZTU2LCAweDVmMDU3NzI5LCAweGVmNzY3Y2E1LCAweDRhNWZlNDAwLCAweDg3YzQxYmZlLCAweGM1NWZmZGIxLAotCTB4ZGY3NDAzODcsIDB4NGRmZjAwZWMsIDB4NmY3YjA2NmQsIDB4ZjVmNzRkNWQsIDB4YWE3ZTRjMjksIDB4OTRhZTVkZTksCi0JMHhkMzUxOWY1MSwgMHgzYmYzYTBiYiwgMHg3ZmQwNWI5ZCwgMHhkMmM2MGIzNywgMHg5MjZhY2M3NSwgMHhjOWQ1OWVmMCwKLQkweGQ3YmMxZTk3LCAweGRkZDA5NzQ4LCAweGUyOWQzM2ZlLCAweDQ4NmZiYzNkLCAweGUwNzJhMWY3LCAweGJlMjNiNDYzLAotCTB4NWQyMDFjYjUsIDB4MzNmZWVjZDEsIDB4YTg0ZjQ3YzMsIDB4YzBhMGJkMWMsIDB4YmQxY2E4NGYsIDB4NWZjNGFmZjAsCi0JMHhmOWNmZmQ5OCwgMHhmMDkwNzI3NiwgMHhjOGJiN2YzYywgMHg2YjIzOWZmMywgMHgyNmRjZjdkOCwgMHg3OTBhMDc5NiwKLQkweDc2NWViZDY4LCAweDU2Njk2YzJmLCAweDRkN2ZiZTFiLCAweGUwNThiMjBkLCAweGM5ZjZjYjIzLCAweDc3OGIzZDY0LAotCTB4ZGU4MzUzNjgsIDB4YmUyNmVhMmIsIDB4ZTA0OTQ3NzcsIDB4OWJmOTYyNGYsIDB4ZjdiMzQ2NGIsIDB4OWE3OWQ0M2UsCi0JMHg5MWIzZmYyMiwgMHhiNGNiYmI4ZiwgMHg1NDc4OGY0YiwgMHhlNjI0NDNiZCwgMHhkNDQzYmY1MSwgMHg2N2ZjN2EzOCwKLQkweGY3ZTdmZjE4LCAweDBmZWZkNThiLCAweGY5ZTRjYTBkLCAweDg4YTQ0NTlmLCAweGNjYWZjN2M1LCAweDVlNDA3YWE3LAotCTB4N2I4ZGY5MDYsIDB4YmRhMGI1MmUsIDB4ZjQzOTk3OTMsIDB4MDExOTNjM2YsIDB4ODY2NTE3N2MsIDB4OTlhNWQ3ZTgsCi0JMHg5NGIzZDY1NywgMHhmYTYyZmZlZCwgMHhmMGRiY2Q5MCwgMHg0YTZmOTEzZCwgMHhlNzJjODYxZiwgMHgzOGI3NTgyNCwKLQkweGY5ZTdmZDI3LCAweDY3OWUwMzE1LCAweGVmNzEzZWYxLCAweGJkZjFlN2YyLCAweDA5YWZkZThmLCAweGU2YWU4N2M2LAotCTB4Y2RkMzE5OWYsIDB4ZjRkZDAzYWUsIDB4NGNkNWI3YjEsIDB4OTRlYTNlZjEsIDB4MjMwNGZkMDcsIDB4ZGVmMWJiOGYsCi0JMHg5Y2I3ODhkYywgMHgwYTRjODE5MCwgMHg1ODY0YmEwZiwgMHg4NDFiZDBiNywgMHgwYmUwMTExZSwgMHhjZjBiN2VmYywKLQkweGZlNTZiOGY3LCAweGRjNGJmZmYxLCAweGU5YjNkYzQzLCAweDRlNGFmOWQxLCAweDEzZGVmYzgwLCAweGVmMWRmNjE1LAotCTB4MmI5YTk5ZDUsIDB4NjBmOWZmYmUsIDB4ZTAzNTdiOWMsIDB4YmZlNzBhNjksIDB4MmFkMDFkZTIsIDB4N2JkYmJkOTksCi0JMHgzZjQ2NGJhMSwgMHhmZDFmOGFjNSwgMHhkYjhmYjdlMSwgMHhlYjU3ZTc0MywgMHgyZjk2NGQ2NywgMHhkMjQ3YWU1MCwKLQkweDJjMzQ5YmQ3LCAweGQyYThiZWFmLCAweDYwNWFmOThlLCAweDQyZGY4MGZmLCAweGZkZDQzMWY4LCAweDdlMmJkOTBmLAotCTB4Zjc3Njg5OWUsIDB4YWMyNzJlZTgsIDB4OWViNjUxZTcsIDB4NWE2YWY4NDgsIDB4YmYwYTVmZjksIDB4MzdlZmE0NDksCi0JMHhjY2IxMmJlZCwgMHg3ZjFmM2EwZiwgMHhmZDA0OTRjYywgMHgwNjM1M2U1YiwgMHg3NGFkN2RmMCwgMHgwZWNkN2ZmMSwKLQkweDhmMTMyYzk4LCAweGJlNzBlNTQ0LCAweDI1N2E2NWU0LCAweDJjZTVmYTYxLCAweDFjZTU4NWQyLCAweDliYTU4N2QyLAotCTB4ZjllYWJjYjAsIDB4NDJlNTgxYzQsIDB4NjVkM2NmN2UsIDB4MDk5MWJmNzcsIDB4MWY1ZDU1ZmUsIDB4ZmU3YjUzYmUsCi0JMHhlMWU3YmZhNSwgMHg4ZjM3NTAzYiwgMHhhOTVjODM2YSwgMHhhZDlmY2FlZiwgMHgwYjdhYWZkNiwgMHgwZDM4ZmVmYiwKLQkweGJmZWVjN2Y4LCAweDBmNTFkYTY3LCAweGIzNzdiNmI4LCAweGQzY2U3MWJkLCAweGRkZmM2MTk5LCAweGIzMmU1OWZmLAotCTB4ZWU5NzE1N2IsIDB4NWE0ZGVmNjUsIDB4MzYzMjE4ZDgsIDB4MjU3NGZiMTEsIDB4MDlmOWUxNjcsIDB4MmRlNGNkZjAsCi0JMHg1YzQyNmY4MiwgMHgwZDAzZmYyYiwgMHg5MzJmY2I4YiwgMHg3NTA1ZWZmMCwgMHhjNDc4MzVmOCwgMHg3OTY1MTdmMiwKLQkweDYyZWZhODY1LCAweDU2MGRmOWVkLCAweDcxNzkwNGFmLCAweGZiNThhMzIzLCAweDVkZmUyYjcyLCAweDhmYzRkOWNmLAotCTB4M2MyZTcyZTcsIDB4M2RjMzJiNjUsIDB4MGI5NjNiMDksIDB4NTRkNGZiZjgsIDB4ZTg5NmNlZTMsIDB4NDY5ZDQ1ZjgsCi0JMHhmYzRkY2Y5NiwgMHgwNWJmNjA4MywgMHhiMTg0OWY2MCwgMHhmMjA2Y2I3NywgMHhlMzM2NzQzOCwgMHg1NDJhYzNmNywKLQkweDBmY2UwNWZlLCAweDMzMTVlYzFhLCAweGUxNzJkMjA2LCAweDQ4MTkyNzQwLCAweGFkOTg3ZWU5LCAweDIwY2ZmZDZiLAotCTB4ODZiNzYwNmYsIDB4Y2ZhZmJkYzAsIDB4ZTMwMGZlNDYsIDB4MmZkYzYyMmIsIDB4ZTgzYTE1ZWMsIDB4ZjJjNDgyZjcsCi0JMHgwY2ZiM2Q4ZSwgMHhhNGQ0YmRlMiwgMHhjYmJkM2Y2MCwgMHhmZDAzMTk1ZSwgMHhhOGI2MTQ2YywgMHgyYjgwNDUxZiwKLQkweDU3MmFiZGZjLCAweGU0NGM3YjE4LCAweDFkMDMwZGIxLCAweDA0ODVmZDExLCAweDQxN2EyNWRmLCAweDgxOWNmNTYyLAotCTB4NGQ3ZGJlM2YsIDB4M2QzMGZhMWUsIDB4YzJmZTg3YTAsIDB4N2Q4MGNlZWUsIDB4NjIxM2QzMGMsIDB4OTJmZmY1ODIsCi0JMHhjZDIxYWZkZiwgMHg1ZjBmMTA5OSwgMHgwMzQxODRmMiwgMHg1NDdiYzY3YSwgMHg4MzNkYzMxYywgMHgxNjdiNTMzZiwKLQkweDJlZDRkM2NhLCAweGQ0MmZmMjg1LCAweDAzZjI4NTJlLCAweGY5NDI5NzZhLCAweGExNGJiNTExLCAweDEwYjE3NDVjLAotCTB4YmUyMjI0ZGUsIDB4ZDg2MmNlODEsIDB4YTgzYjg4OGYsIDB4OTAzZjliZDcsIDB4YmIwNmNkYzksIDB4MWQ2Mjg2N2IsCi0JMHg4ZWI4ZjRmYiwgMHgzZjVkYWMxNywgMHhjNzVkMTlmZCwgMHg2OTA3YmIwYiwgMHgyNDRiYmVlMCwgMHhmYmVlZjQ3OCwKLQkweGZlOTVlNjViLCAweDdmODg4ZDNlLCAweGYxMDdkYmE4LCAweGQyZWMxN2VmLCAweGU4MmZkY2EyLCAweDBlMmVjN2YwLAotCTB4NTAzMTU3ZWEsIDB4NzdmM2UzOGYsIDB4ZjMwYjFjN2YsIDB4ZTFmYTU4ZjcsIDB4NTZlODk0ZWEsIDB4YmQ1ODZiMjcsCi0JMHg4NDVlNTdlMiwgMHgzOWRkODM2YiwgMHhjZjRiZjYwMywgMHg0ZmQ4MzhmNywgMHg3ZTFmYzc0MSwgMHhlODNhZjcwYSwKLQkweGVkYTcxOGZjLCAweDgyMzZmYTk1LCAweDg3ZGVhNjdlLCAweDVmNjJkZjdhLCAweDYxZWJmZjc0LCAweGIzYmIwYmZjLAotCTB4ZGY5NDI3NjEsIDB4ZjY1ZTc2MTAsIDB4NDM3OTc3YjEsIDB4ZjcwYWJiZjcsIDB4YWZhMWJiNzMsIDB4ZGMyYmVlMTgsCi0JMHg5YjBlNTk3ZSwgMHgyZjYwZGEyNywgMHhjNTdmNzg0NywgMHgzOGZlZDBmNSwgMHg4MTJiYTcxYywgMHhhZTdiNmZhZiwKLQkweGYxMTFmM2Q1LCAweDUwZjAwMWVlLCAweDRiYTNjODNiLCAweDU2MGZhMGIxLCAweGM3NjY3OGYzLCAweGUzNmY0MWFlLAotCTB4MzIyMzk3ZmQsIDB4Mzg1ZmJmODEsIDB4NzczY2E2Y2MsIDB4MTI3OGUxM2YsIDB4YmQzZWZlNjUsIDB4YzJmNWYwMGIsCi0JMHhjMTA3NGZiZSwgMHgzZjE0YTA3YiwgMHhjOWVmZTA4MywgMHg2MGUwNjhmZSwgMHhmZTdkZmU0NSwgMHgwMzFmYWZjOCwKLQkweGYxZmRhMWZhLCAweDI3NGUxNWVmLCAweDZlMjBhYTViLCAweGZmYjhkMzNmLCAweGI2Njk2YzEwLCAweDg4MmE4M2U1LAotCTB4OTE0ZGNmZGIsIDB4Y2YzOTQzMGUsIDB4ZTIwZTM1OWUsIDB4NzlkZjIyZjUsIDB4NjFmOTZlNDEsIDB4M2FiNzRhMzgsCi0JMHgyYjhmNTFhYSwgMHgyNDEyZTYwNywgMHgzMThkMmExNywgMHgyMTYwNTFmYywgMHhmNTE1ZTI4NywgMHg4YWU5MjlmMSwKLQkweDM5ZWQxM2ZlLCAweGI5NDlmNjhhLCAweGZiZGEyODM3LCAweDg2MzhhMWVmLCAweDA2Y2Y3ZTA3LCAweDQzNjVmNDc4LAotCTB4ODNlZThkMWMsIDB4YTdiNTdkZmQsIDB4Y2E3N2NjNjQsIDB4OTZmYzdkZGYsIDB4ZjI3ZDY4MWIsIDB4N2JlMDc3ZDMsCi0JMHhmNmYwMmY2ZiwgMHhmMTJiM2JjOSwgMHg1MmY1OWJlZiwgMHgyMmE5ZWE3OCwgMHhhMWVjYTY3NSwgMHhjOTgzM2Y4ZCwKLQkweGZkNDJmNjU0LCAweGMzMGYyN2JlLCAweGQ4ZGZkMGJiLCAweDI3NjA4ODVlLCAweDk3YTYxMWQ0LCAweGQ0MTdiMjQ2LAotCTB4OWJlNTAyNzYsIDB4MzliZTA1M2YsIDB4MTZhOWE1ZWMsIDB4NjE3ZjBmYzgsIDB4MjA2OWQ3ZTQsIDB4ZTQwZmI2OTcsCi0JMHhmYjcwNjZlZiwgMHhmNGZkMTIyMSwgMHhmZWM5MTM5ZiwgMHgyOWZkZjA3NiwgMHhiZjg4ZmQzNSwgMHhjOWNhMmQ2ZiwKLQkweGExM2RkOGM3LCAweDNlZDdjYTZmLCAweDc2ODZiZTAxLCAweGFmZGI4N2I5LCAweGNmZjk1NGJjLCAweDZmMWRlOTg2LAotCTB4OWVmZTAzZGYsIDB4OTRkYzMyYTMsIDB4YjViZmJmZTgsIDB4MGU1ZmZlMTgsIDB4Yjg1OTNkZDAsIDB4MDRkNDgxZTUsCi0JMHhmYTAzZGRmYywgMHhhN2Y3MjM3MCwgMHhlYjkwMzY3ZCwgMHgxZmZiZjU1MywgMHhiNDBlMmQ0OCwgMHgyODFmMTU5MywKLQkweGE1ZmI5M2ZhLCAweDlhZmE4YWI1LCAweDQzN2Q2NTJjLCAweGYxZTBkYWY5LCAweGM1YjFmNDkxLCAweGJiZDNjZThmLAotCTB4OWY5ZWUxZjMsIDB4M2FlZmY2MTQsIDB4ODEyN2FmZjYsIDB4NGI3ZDg3ZjMsIDB4YmE3ZWRmOTAsIDB4YmRmZTE5N2YsCi0JMHg0NmZmNzU1OSwgMHgwMWY4MWYzYSwgMHhiMzkwNDcxNywgMHg5NzRkNGY4MiwgMHhlYWMyM2JkOSwgMHhlZjhhYmZmNiwKLQkweGVmZGJiZTM5LCAweDhmNjE0N2JkLCAweDMzMmY1ZTc5LCAweDljNWVmYmY5LCAweDEzYTBhZjViLCAweGY5ZWVmYjNiLAotCTB4ZThmZjBmNGQsIDB4ZWQyYjg4MmIsIDB4NzlkNTc2NjEsIDB4MDUxZjkzMmIsIDB4YzBkMzNlYmIsIDB4MTYxZThiZGYsCi0JMHhjMGFiZThjZCwgMHgzZGMwZDdlMiwgMHg3ZTA2ZmY5YSwgMHgwMDMzNGMyYiwgMHgwMDAwMzM0YywgMHgwMDA4OGIxZiwKLQkweDAwMDAwMDAwLCAweDE4YWRmZjAwLCAweGY1MTQ3MDdiLCAweDdiZGJkYmY5LCAweDc5NzI0YjkyLCAweDcxMjExMjQwLAotCTB4YzIyMDU3MmYsIDB4NDg0OWFjOTEsIDB4OTJlYTQ5MDMsIDB4ZjAzZWE0MTAsIDB4YTJhMjE5MDAsIDB4Nzk5ZTBmYWUsCi0JMHgyYTkzYTg0YSwgMHgwMjhkMzYxZCwgMHhkNmQzNmQ1MiwgMHg0ZjRlMmEyYSwgMHhkMTk1NGEyYywgMHgyNTYyYmMzNCwKLQkweDQwNTY5NDc4LCAweDJmMmE3YjFkLCAweDQxOWNjYTY5LCAweGVlNDIxOTIzLCAweDhjYzM4YThjLCAweGJmN2RmYTFkLAotCTB4NWVkZGNkZGQsIDB4YzlhNzU1MDIsIDB4ZjZmYmJmMWYsIDB4Y2ZkZWY4ZjcsIDB4MDUwNDhhZjAsIDB4NTcxYTAxOTIsCi0JMHgwMmE2MmEyNiwgMHhjOGRjODI4MCwgMHgwMGI1ZmI3MSwgMHhiYjRjNjE3NiwgMHg5NGUwMGIzZCwgMHgxNTcwMDRjOSwKLQkweGE1MDI5ZmQwLCAweDMwMjc2MTAwLCAweGYwZWZkZDM4LCAweGJkYmY0MjNkLCAweDIyNWYxYzkxLCAweDllNWVlZjdlLAotCTB4NzdkYzIzMjMsIDB4NDA1NWE1NjAsIDB4NWRmZDEyZjgsIDB4MzYxYjVkMTcsIDB4NzA5NTYzZGYsIDB4ZDQ4MDE5N2YsCi0JMHgwZmI5MWNlMSwgMHgxZDMwMGFkMCwgMHhlN2YwMTVkZiwgMHgzMmEzYTQ1OCwgMHhlNzg0ZGI5MiwgMHhmNzE2ZmFlZSwKLQkweDI0MTJmYzU1LCAweDgyOGY5ZDIwLCAweDc2MDQ4ZjRlLCAweDE1Nzk4ZjgwLCAweDA2MjQyNzllLCAweDhkZjNjNDlmLAotCTB4MjJiMDc4NDcsIDB4MzgxMDAzM2YsIDB4OGVjNzA3N2UsIDB4MDA0YWIzMzksIDB4ODE0ZmQzOTYsIDB4ODE1ODc3YmUsCi0JMHhjMDA1YmY2NywgMHhlZmI0MmJlZiwgMHhkZjk3Y2JjYiwgMHg2ZjA4NDkwNCwgMHhmMjg2ZjRiMSwgMHg0OTcwZmJkOCwKLQkweDkwZTMwMzQzLCAweGFhZGNlZDdlLCAweDlkNWJiN2JmLCAweDc4YzlmZWI0LCAweGZmMWUwMWFlLCAweGI1ZmJjNzgyLAotCTB4ZDdlZjY0MTAsIDB4N2I3ZGMwZWQsIDB4ZjVmOTdlY2MsIDB4MGRmYmQzOWYsIDB4MGFmNzhjYmIsIDB4YmVmNGM0ODUsCi0JMHgwYTAzZjRhOSwgMHhiM2VjZjEyZiwgMHhiNmFkZjA4OSwgMHhmOWFhZjhhYiwgMHhiMWJjM2Y2ZiwgMHg4MzdhZjkxOCwKLQkweDY5Zjg2ZDE3LCAweDY0YzRkZjY4LCAweGQ5OGZlMmYwLCAweDkxYWNhNDI4LCAweDhjZGM2YzcyLCAweGUxNDVhNDhmLAotCTB4NWNmYzdkYzEsIDB4NDczNzlkM2YsIDB4MWI0ZmU2NzIsIDB4NDQ5MDZmMjksIDB4YjU2MWM5MTMsIDB4YmFiN2M1NGIsCi0JMHg4MDA1OWJlMiwgMHg5Yjc3NTZmOCwgMHhlMDJiYjgwMSwgMHgxMDgzYzhkOSwgMHhkYmEwYTc4MywgMHhhMzNiZjNlNiwKLQkweDJhNWQ4N2Y0LCAweDVmZGQwNThmLCAweGFhZjJjZWE3LCAweDAxZDEyYjZiLCAweDQwNWUyYWVkLCAweGE2N2E0MWJiLAotCTB4NDc0OTYwNzEsIDB4MTM5ZjMwN2MsIDB4YWM3MmUxYjcsIDB4ZTQ5MmEzM2IsIDB4ODA4MzhjNzQsIDB4Yjg5ZWM4NTAsCi0JMHgyZGY0OGVkNSwgMHhlZmEzOWY1NCwgMHgxZmM1NDg0ZSwgMHhjMjY2Nzk5OSwgMHhjYmQzNDBiMywgMHgyZjc3ZDJjMiwKLQkweDUxNmY3ODcyLCAweDQ4ODlhMmY3LCAweDc1ZGYxYzAxLCAweDFjZDQzMWVmLCAweDBjM2MxNTJjLCAweDJjNTA2MmRmLAotCTB4Mjk2Mzk3YTQsIDB4YTQ2NmVjYmUsIDB4ZGRjZjFlNzMsIDB4MWMxMmYzZWQsIDB4ZmYxMGUwMTksIDB4YWUwNDhhYjEsCi0JMHgzZmVmNjM4ZCwgMHg3Y2ViZWY0MiwgMHhiMmY4YjMxZCwgMHhiMzVmMTg5YiwgMHgzN2E4N2Q1ZCwgMHg1ZmMyOWE0ZSwKLQkweDhmMjkxODRhLCAweGQwY2Q1Y2E4LCAweDU3OTdlYmE3LCAweDU5ZWM4NmRkLCAweGQ3ZTZhZmRmLCAweDFkMzFiYWNlLAotCTB4NWMwNGI4ZjUsIDB4MTZmYmE0MzYsIDB4NjEwYzBkMWUsIDB4ZGZlNmNiNzgsIDB4ZTAzMTI2ZTYsIDB4NWYyODE5ZWYsCi0JMHhmNDRhOTgyZSwgMHgyZDA1ODRmYSwgMHg2OGNmZGUwMiwgMHhkMzk4MzVmOSwgMHg1NjY3ZTQ2MiwgMHg4ZmQ3NGVmZCwKLQkweGY0OTFjZjJlLCAweGY5YWJmOGE4LCAweDdjODRhMGYyLCAweDk4ZTc2ZDBlLCAweGFhODgzNTFkLCAweDlmOTQzNjlkLAotCTB4YzQ2MmMzZmIsIDB4NDVlNDEwZGYsIDB4ZWZhOWU5MGUsIDB4ZTQ5MjcwM2EsIDB4MDNhZWIxZDgsIDB4Y2U4MDE2Y2MsCi0JMHhhZDZjNWQ3NSwgMHg3YzAzM2JiNywgMHhkOThmZTMzZSwgMHg4MzhkMDlhZiwgMHhjMWE1NWJmOCwgMHg3NDc3NWY4YywKLQkweDFjN2ZjYTNmLCAweDMwMzJjYmJjLCAweGY4MDJlNzBjLCAweDEzYmY3ZDkzLCAweGJmMzU5ZjkwLCAweDYyZDhmMmY4LAotCTB4Nzk0Mzc2YTIsIDB4YjIwN2YzMGEsIDB4ZjRhM2FiYjksIDB4OWMwMTU4MTcsIDB4NWI2NDdmNDgsIDB4YzMyYjdmODIsCi0JMHhhMjdlYWEyMywgMHhmZWZmNmRkOSwgMHg3MTlhMjc0OSwgMHgwYjFkZmZiZiwgMHgxNTgzZGIzMywgMHgxY2ZlMGY0ZiwKLQkweDEyZGIzNWUxLCAweDUzZmI5Yzk4LCAweGZkYTJjOTQxLCAweDBhZmQ5M2FkLCAweDhhNmU1ODFlLCAweGRjOTMzNGY0LAotCTB4NmRjNTEzM2IsIDB4ZjNmOWZmYjgsIDB4ODFkZDVmOTMsIDB4Mjc1N2NhZjAsIDB4ZjkyNjQ0OGEsIDB4ZGY4NDUwOTEsCi0JMHhlZmEwMTFiMywgMHgzZGQ4YjMzYiwgMHhjYmJjNTU5MCwgMHg1ZmU0ZmYzNCwgMHg3MjliZjY5ZSwgMHg0ZDM5N2ZkYSwKLQkweGZlYmEzYzI0LCAweDkwZWYzZWNlLCAweDM1ZjVlNTAwLCAweDY4NWRmMjA0LCAweGE1MzhlNzgyLCAweGQ3MGY4NGNmLAotCTB4ZTY5Yzc2OWEsIDB4MzZhZDNlZDAsIDB4NzVlOTI3NzksIDB4Mzk3ZmIzZDUsIDB4NTRmYzg2NWUsIDB4ZDNmMzdjYmQsCi0JMHg5NWJlOTAzMywgMHg3YTA1OGQxZiwgMHgxMWQ3YWEyNywgMHhlNDI5MjBmMSwgMHg1MWUwMzhhNSwgMHg5ZjI2ODBlMywKLQkweGZmMGVlZGRhLCAweGE1NzEzMWE3LCAweDAwYzUyM2JlLCAweGY5NjU3NjM3LCAweDQ3ODk4ZDNmLCAweDE4Y2FhMGI1LAotCTB4MWY5OGU3ZWUsIDB4MzVmZTY5ZDUsIDB4MjBkZjk3OGQsIDB4NDg0M2Q0N2QsIDB4YjExMDkzOGQsIDB4ZjIxNTVkOTIsCi0JMHgyMTcxNDQ5YywgMHhjOThkODRmMiwgMHgzZWNlZGUzZiwgMHgyZWNjNGMxMCwgMHg1MzIwNGNlYiwgMHgwMzRjMmY3YywKLQkweGFmZjkyNjdiLCAweGZjMmZjYWFjLCAweDliYWRlNGM0LCAweDQyZmQzNjUwLCAweDkzZmZlZWFhLCAweGI1OGI0YzE2LAotCTB4Mzc4NjllY2YsIDB4ZGIzNzNlYzksIDB4MzgwZTdkOTgsIDB4M2M2N2Y5ODAsIDB4MjkwYjdmOWUsIDB4ZmIzMmZjZWMsCi0JMHg4NjFmY2M1NywgMHg0NWNiNGJmMywgMHhjMGM1MTczMCwgMHhlZTI4OTA1ZSwgMHg0NTA5YjYxNSwgMHhhY2RhZTAwZiwKLQkweDk2NGE2NWU5LCAweGFkZmM0NDJmLCAweDllZWRmOGVhLCAweGI3M2M5OGY3LCAweGYwOGE3ODNjLCAweGZkMzI3NjFlLAotCTB4ZGNhYTdiYzEsIDB4YzRkNDFjYzMsIDB4ZjY2NWE5ZTYsIDB4N2JmZjM0MmYsIDB4N2RjZmUwYzEsIDB4OTdjODljY2YsCi0JMHhkZGJlZmRmMSwgMHhlZDAxZjM1MywgMHhkODNlNWVmOSwgMHg2N2NhMWNmNywgMHhmYTc4MzEzMCwgMHgwZjNiNWM2MSwKLQkweGYyOGUzODdmLCAweDc1YmQzYzYyLCAweGUwMWE1ZjJkLCAweDQ3OGQ0ZTAxLCAweDdlMDdjNDc1LCAweGJiZWI5MTNmLAotCTB4ZTE4MWY2NDAsIDB4ZGU4N2M1ODQsIDB4ZmM5OGQzNGQsIDB4MzI2Zjc5YWEsIDB4NmZkYzNmZTksIDB4NGU5ZTJmYTQsCi0JMHgzZTlkN2RmZCwgMHg5Y2ZkN2RmZCwgMHhlYmVhYWRkOSwgMHg5Zjk4MzViYywgMHhjYzlmZGY4YSwgMHhlZmFjMTgxMSwKLQkweGU2MGE0ZjlmLCAweGJiZTkzOGE3LCAweDhhOTczZDRiLCAweGQ1YmQ4YzcwLCAweDZmZDQ0ZmQwLCAweDM3ZTMxZDhkLAotCTB4YzM1MzU3ZDIsIDB4YmVjMDZkODksIDB4NzEzZjE0MmIsIDB4NWZiOGM4MGQsIDB4MjZhNmY5OTcsIDB4ZDFkOWYwMzcsCi0JMHg3NjY5MTZjZSwgMHg2NjY5ZTkwNiwgMHg4MmI3M2JjYSwgMHhiNDhiZDc2YSwgMHg3NDNiN2RmOCwgMHhlNWZkMDA1OCwKLQkweDY3ZjVhOWE0LCAweDNhMDc1Yzc2LCAweDYzOTE2ZjdlLCAweGNhNzJhZmUzLCAweGY3ZWE2OTc0LCAweDI1NGFiZjhmLAotCTB4M2YxYzUxZTQsIDB4M2FiMjcyZWYsIDB4MzM5YmEyNjcsIDB4OTBkOTczYjMsIDB4NWY3MGU3NGQsIDB4MjgxZGEwMGMsCi0JMHgwZGIxMzY5ZCwgMHhkZjc5OTFlOSwgMHg1N2JjNmUzNSwgMHg5M2U0MGQ2NywgMHg2NGY3ZTgxZiwgMHgwN2RmNjY1ZSwKLQkweDkxOTZmN2I4LCAweGM4MWNjMWJlLCAweDhhNGZmNTY3LCAweDNiYWMzODE1LCAweGEwYzU2M2MyLCAweGJlNTBmMjg0LAotCTB4ZTI1NzE2MDYsIDB4MDJkODY1ZTMsIDB4NDc0ODlkMzUsIDB4ZmRkNzdkMDUsIDB4YjhhNGVkMTEsIDB4ZTlkNGQ0Y2EsCi0JMHhjNjVlMjUxYywgMHhiZDM0MDdjMSwgMHg5YTk5YTcxNSwgMHg4ZmYxNDYzYSwgMHhlOTFmNjhkYiwgMHg1ZTBlODM2YiwKLQkweDdmMzU1ZmY1LCAweGM2NzI2OTk2LCAweGQ2YzdjZjg0LCAweDVjNWEwZDMzLCAweDE1ZDkyNzBmLCAweGRiMmZlOTFlLAotCTB4Yjg0MDdhODcsIDB4NDAzODFjY2MsIDB4YjQzZDdhMmIsIDB4NDI2NzNlYTAsIDB4Y2JhZjdkNDAsIDB4NjcyOWJmMTgsCi0JMHg3OGY5NjEyYywgMHgzMzIzOGIyYSwgMHhlN2FlZjUzNSwgMHg2OGY0ODA5YSwgMHhlYjg1N2NhNywgMHhkM2M4MmUyNiwKLQkweGIwODgxM2ZhLCAweDk5OTcwMjU1LCAweDViM2IxNDU2LCAweGFkOGY4MzY3LCAweGFkODlhMDczLCAweGFkOWRhMTczLAotCTB4NWIwNzQwMzcsIDB4NWIyMDgyNmYsIDB4MGRhMDRhNjEsIDB4ZWI1ZmZjNTgsIDB4MGMzY2MzZWEsIDB4YTI2ZTVkM2YsCi0JMHgxOGJjNWM3YywgMHg4N2YzNDY5YSwgMHgyZWJjOWFiNSwgMHhlYThjMGYyZiwgMHgxZTVjM2YyNSwgMHg2NGNlNDA3MywKLQkweDJlNGU1ZDc0LCAweDlkOThmMjEzLCAweDkxYjE3MmViLCAweDA3M2RlMjNkLCAweGFkNjkzM2Y4LCAweDg3N2IxMDgwLAotCTB4OTlkZTkyNWMsIDB4ZTA5OTgyMDUsIDB4NWMxODkwMmEsIDB4NTFlNTFkZmQsIDB4YjJjZDkyMWEsIDB4NTRiOTE0NzcsCi0JMHg4ZjI3NmU4ZCwgMHg5MTcxNzI2YSwgMHhlYThkOGYwZCwgMHg2MDViYWY2YiwgMHhjYzM3YWViMCwgMHhmZjE0OTlkMCwKLQkweDcyMTNlYTQ3LCAweDg0ZTJjZTg4LCAweDBjMDUyZmNhLCAweDIxZjc3ZTExLCAweDZiZTMxOTlmLCAweGIzNjU1MTcxLAotCTB4Zjc0ZWUxMDcsIDB4ZTMxOTlmNDksIDB4NjU1OTcxNjgsIDB4NmFjNDQ1OTEsIDB4ZGY2M2Y1YjMsIDB4NDc2NTg0NmMsCi0JMHgxZmEwM2U1MiwgMHgzYmM4MzFkOSwgMHg4N2JjM2U1MCwgMHhmYTU0ZDI4NywgMHg3Y2E3ZTM5ZSwgMHgxMDFmZTM2OSwKLQkweDA3NjU0ZmM5LCAweGFkZDU5MDQwLCAweDE3ZTQ1NTY4LCAweGFlZWYzNTdlLCAweGJhN2FhOTcxLCAweDRiM2YyNmQ5LAotCTB4MGY2ZjU4N2UsIDB4YzNjODA5MjQsIDB4MGNlYWQ2OWEsIDB4YWMxYjg3Y2EsIDB4OGM5ZmJiZWEsIDB4ODliZWE2MTUsCi0JMHgxZTIxYjE3MiwgMHgyZjk0NjE3YiwgMHgwODFjNTdkYywgMHhiOWExMzg4NywgMHg0N2E1MWRjNSwgMHhmMDFkZmZjNywKLQkweDc4NGFmOWZlLCAweGFmY2E2NTBmLCAweDA5YmYyOWI5LCAweGM2MWJlYjIyLCAweGIzYmI3OTZiLCAweDk3YzQ0Y2IzLAotCTB4YTMxNzBlOTAsIDB4YTkzODk0MjMsIDB4MjZkYzg1YjksIDB4ZGU5N2I3Y2IsIDB4ZjZhYTI3MGIsIDB4N2I2Yzk3YjYsCi0JMHg3NWVkNzQ3YSwgMHhkM2RkYmI0YiwgMHhiNzBmN2U0NywgMHg4MDI3YjM3ZSwgMHg0MzNmODZlZiwgMHg1ZGVmNzhjNCwKLQkweGNlOGZiY2I3LCAweDM5NDI5YTM1LCAweDVmOTdhODQ1LCAweDkyYjY5YzI2LCAweGNhZjZlODNkLCAweDIwOTY5MmExLAotCTB4ZjgxMjZkZGYsIDB4Y2EwZmNjYWQsIDB4OTY3NWMzNWQsIDB4ZTFlZjZhMjcsIDB4Y2ExZWY4YTUsIDB4YWJlN2Q4YTMsCi0JMHg0YTBmYjJjMiwgMHhkMjBlOWE2YSwgMHg1N2I3MmE1YSwgMHgzOWUxMGVlMSwgMHhmMjM2ZjQ0MiwgMHhmZmE0NjU5MSwKLQkweGFjOGY5NGMxLCAweDljN2YzMTlmLCAweDE2OWRkYWEwLCAweDFmZjdiYWE3LCAweDBhYmM3ODc5LCAweGRmYzYyMGZhLAotCTB4YmM1ZmY3MWEsIDB4OGY4YzJmZjAsIDB4OTE0ZTQzOGQsIDB4N2JlZDk3OGUsIDB4N2RlYTk5YTYsIDB4Y2FiMGNmZGQsCi0JMHhkZDExYzQzMywgMHhkOTc2NjZlZiwgMHg3NzNiM2MwMiwgMHg1ZjNhNTJjZCwgMHg4NzhmNTFmMSwgMHgzZDc1ZWZlMiwKLQkweDgzMmEzNmExLCAweGM2MjdkZGMzLCAweGQ3YWZmNmFiLCAweDNmNzBkZmU5LCAweDZlN2M0ZjI0LCAweGE2NDg3YjQ3LAotCTB4YTdjYThiM2MsIDB4ZWYzNzY4M2UsIDB4YWI3ZjIxYjcsIDB4NjBkMDdlYTksIDB4ZjZhYmYxODUsIDB4NThmZjdhOTUsCi0JMHg1NjFmZTQ3ZiwgMHgxOWYwM2JlYSwgMHhhOTVkZjg4NSwgMHhjYjYyYmZkMSwgMHg1ZDkxMzc3ZCwgMHhmYjFiZjRhZCwKLQkweDZjYWZiZDQxLCAweGY2ZDVjZWQ0LCAweDFmMTNkN2Y4LCAweGU3OGRkYmI1LCAweGNjYWZhOTFhLCAweGViMGNmYWE3LAotCTB4NzVkNTBmMzEsIDB4YWE1YmZiNzEsIDB4ZDhkOTVmNTgsIDB4MWZmZWZjNjUsIDB4MjQ5NWY2MzcsIDB4ODFiZjJkNjAsCi0JMHhkNzJlNDc1NiwgMHg0ZTdmMTBjZSwgMHhmZDU5ZTdkNiwgMHhmNTZkZTQzNiwgMHg4YmEyY2RmMywgMHhjOGE3NmNlMCwKLQkweGY1ZDFlYmUyLCAweGI2MWU3YjEwLCAweGQxNWIzMWE0LCAweDQ2ZTU3NWZkLCAweGMzYzdkNThlLCAweDM2NGJkZmZkLAotCTB4NzgyOGU4ODksIDB4YmRkNTgzMjksIDB4N2FiM2FmNTgsIDB4ZDk4ODFkMDMsIDB4ODZjYTAxNmIsIDB4M2Q3YmZiNDMsCi0JMHg0MjZiOTIyNSwgMHhlNzc3YWYzYywgMHhmZjRmNTQ4OSwgMHg2NzA0OWQ3NSwgMHhmNGZhNTEyYywgMHhkZjlhYmU3YSwKLQkweDNlYTU2NTUxLCAweDkzZWM3ZWU5LCAweGVmMjEwZWM4LCAweDM3YmM3MmU5LCAweGZjMDViMGZkLCAweGFhMDQzZmI4LAotCTB4OWFjZTg2M2UsIDB4ZjMzZTVkNTgsIDB4ZTQ5ZTRlYzgsIDB4ZmQ1MThmY2YsIDB4MDI2OTk2ZDksIDB4MGUxZTQ2MjEsCi0JMHhhMzA4MGM2MSwgMHg0ZDM2ZjVmNCwgMHhhOTc5MDk3ZiwgMHhmMTQ0ZmQ4NiwgMHhlNGZkYzMyYSwgMHg3ZWMzNWNkMiwKLQkweDJiNjkyMzliLCAweDBhNDUwMWUxLCAweDhlMjg0YjdhLCAweDQ4YTRlZmFiLCAweDIwZjcwYzUzLCAweDVmYjhmZjg0LAotCTB4NDM3MTg5YWUsIDB4NjRjMzljZDIsIDB4MTVjZTE1Y2YsIDB4MzY5MGRlNmMsIDB4OWU3OGQwYjcsIDB4NWYxM2NiNWYsCi0JMHg4N2I4MzNiNiwgMHg2NTdmOTU3YywgMHhlNjc1ZTgzNiwgMHg3ZTllMTE4MCwgMHgxMDkyMWRiNCwgMHgzOWE4ZTNhZiwKLQkweDAwYTE2ZTZlLCAweGMxMzYyNWQ1LCAweGQ1Y2E1ZGY4LCAweDRjMDI2MmVjLCAweDg2MWJjYzMwLCAweDk2MWNlZWU1LAotCTB4MDk0NWQ5MmIsIDB4ZjcyMGM4ZmMsIDB4MWVhMWI5NzgsIDB4MzQzNGRkNTgsIDB4NDIyYTI5YzEsIDB4N2Q2MzBmNTQsCi0JMHhkNDY3Zjk0NiwgMHgyNTlmZTUxOCwgMHg3ZTNkZTUxYiwgMHhkOWRlNTE4NSwgMHg1Zjc5NDY0ZCwgMHhhYjk0NjJkZCwKLQkweGNkY2EzMTViLCAweGUxYTY3MWIzLCAweDRhZjZjNGZjLCAweGYzNzkzYzAzLCAweGQ3ZjM4NjBkLCAweGUwMTgxN2Y4LAotCTB4Mzc2ZmRiYTksIDB4NzFkNjlmOWMsIDB4YTBiZjYxYWYsIDB4NWY2MTk1NmIsIDB4ZDljYmIzYjcsIDB4ZDU4MWI1YzEsCi0JMHgwMjY2ZjY3MSwgMHhhMGVjMTVkMywgMHgwNjQzZjBlOCwgMHhmZjdhZjE3YywgMHgxMmFhZjgzMSwgMHg0N2E1Y2U1MSwKLQkweDQ4YzJkZTUxLCAweDE0ODQ3MDNiLCAweDZmMTg3OGEwLCAweDU3ZmFmMTA3LCAweGFhZGZmNGUyLCAweDkzZjc5M2U1LAotCTB4ZWU0ZTNlY2UsIDB4OGY0MTJmM2EsIDB4YTBiY2RhN2YsIDB4YjFmYWMyZGMsIDB4NTU2OTBhN2YsIDB4Y2I1Njc0ODksCi0JMHhhZjJkM2U2YiwgMHg2NDRkZjZjMSwgMHhhOTczZTAyNCwgMHgwZjE0MThiMCwgMHgzYzJiMWM1MiwgMHhiYjIyYWJlOSwKLQkweDFkMzUwZTJjLCAweGU0YTBmNjQ0LCAweDMyNTU3YjZjLCAweDcwNDA5NzlkLCAweDRiNDc1MzhkLCAweDUyOTZmZTc0LAotCTB4NzJiMWNjMGUsIDB4OGYzNjY3NDIsIDB4YTE3MWNhOGIsIDB4ZTMyN2NhZDIsIDB4ZmQ2ZmIyZTEsIDB4NTRlY2M5NmQsCi0JMHhjZmE3YzMzYSwgMHgzNTUyYjg3ZCwgMHgxYzk3Y2M2ZiwgMHg0NzkxOGU2MCwgMHg0ZjllYTk0NSwgMHg1ZDVlOGNiYywKLQkweDA4OWNmYWVlLCAweDUyYjA3ZGViLCAweGZiYjI2ZmJkLCAweGQ1YTNkY2RiLCAweDllNjZlMjM3LCAweGFiMzI1ZmQ1LAotCTB4MzI3MTBlYzcsIDB4NmFkZDFmOWIsIDB4N2Q5MGU2MGYsIDB4NWY5MGM5OWYsIDB4MzE3Y2M1YzksIDB4NTYwNTEyNjgsCi0JMHgzNmExNzFiZiwgMHg4YzRjMmE2MiwgMHg2ZTUyZjI1MSwgMHg5ZjUxMmY5YiwgMHhjZDJhZWQ4NiwgMHg4YmYyMTcyNywKLQkweDQ2NWUyYmU3LCAweGEyNTQyYmJlLCAweGI3ZjRjNWI2LCAweDk5ZGU1NzI3LCAweDczOWU3OTRiLCAweGJiYzIyZmFkLAotCTB4OTczY2NmZWYsIDB4OWZjYzc5NDMsIDB4ZjdhMmVkMmMsIDB4MTkyMWU3ODcsIDB4ZDljNjE3YzgsIDB4NDg1MDQ5OTAsCi0JMHgxYzQzY2EwNCwgMHhkMWNlMmZlYiwgMHhmYzYyMzMyMywgMHhlNTg1YTM3NiwgMHhhZGZhZDAyYiwgMHhlOTM5MzUzYiwKLQkweDBkMTJkNmZkLCAweGIxM2UyZjZmLCAweDlkZjhlMzAyLCAweDNjOTg4NzVkLCAweGI0MDczMzZhLCAweDc0NDlhZDNlLAotCTB4NGRmN2ZiZTEsIDB4YmY1MjE2NzAsIDB4YTg5MTUyMDksIDB4ZmY3YWU5ZjYsIDB4M2VmZjllMzUsIDB4NTdlZjU1NzksCi0JMHgzNmJlNzcyZiwgMHgwN2QwZGZiMywgMHg1MWI0OGVjMywgMHhmM2YxOGRlNywgMHhlYWRmMjhhYywgMHgyNThmYmRmYiwKLQkweGZiZDNmY2IwLCAweDFmOWIzNjU4LCAweDY0MWZkZjQ2LCAweDliM2I4MTczLCAweGM3ZDgzMDNlLCAweDFiMWYyZGRkLAotCTB4ZTUxZWVlZWMsIDB4Mjg3ZWMzMTMsIDB4OGYxOTYyM2QsIDB4NjRmNjg3ZmMsIDB4ZTUwM2I5Y2QsIDB4YWRiNzdlNzcsCi0JMHhkNDUwZmE4NCwgMHg0YzZlN2Y1NywgMHg2MjdhMWM5ZiwgMHhmN2MyNmNmMiwgMHhjNzNjZjliZiwgMHgxNzU5ZThlOCwKLQkweDlkMzRmMzY0LCAweDRlZWJkM2NmLCAweDJlYjQzODMyLCAweDNlNzhkNmM0LCAweDVmNTViZWY1LCAweDNjODM3ZmFkLAotCTB4YzIyN2VhMzMsIDB4OWI0NzExOGQsIDB4ZDQ3OWQ0YzMsIDB4ZDY2N2JlYmEsIDB4YzNjYTRhYjgsIDB4YjM1NmQ5M2QsCi0JMHhlMTUyNGViYSwgMHgwYWJiNTJhYywgMHg2YjRiOTljZiwgMHg0OGRjZTJkOCwgMHgwNzBmNmI3ZCwgMHhkMGY2ODcxMiwKLQkweDk3ODVkNTdiLCAweDc3NDRmOGFjLCAweDUwZjU2Yzg2LCAweGI5MTk1YTVkLCAweDQ4MmI3MzQwLCAweGUzNzliMTBmLAotCTB4NDFkOTU0ZDIsIDB4MDYyYzM5ZGYsIDB4OWQxOTUyYjMsIDB4MzgzZmE4OTMsIDB4MDM1ZTUyNmIsIDB4MmYyNTAxOGMsCi0JMHhmNTNlNzFmZSwgMHhhYTQ5ODMwMSwgMHhmOGJlMjdkZCwgMHhlOTA1N2NkYywgMHg5N2M1MjU3ZSwgMHgwYTQwZjc0YywKLQkweDk0ZTc2MzU5LCAweGZhODU5Y2ZhLCAweGMyNTNlYTYyLCAweGYwY2Q3NTBlLCAweGNjOGY4YzcwLCAweDQ3OGE3NWI4LAotCTB4ZDNkNzU3OGQsIDB4OWFmNWVmOGEsIDB4ZTQ3MTI2ZGEsIDB4ODBkYWNmMGYsIDB4MDdlOGE3ZTYsIDB4NDMxN2Q1MTIsCi0JMHgxZmFhNmNmYiwgMHg3MDkyMDE5OCwgMHhkYjZlY2NmZiwgMHhlM2NmNjQwYiwgMHg1ZmFhNjY5MCwgMHg3ZDYzNWFiMCwKLQkweGI2NWJlMTQxLCAweDdkMDljNTAwLCAweDExZWU5MzNlLCAweGZiYzVlNTdlLCAweDZjMmQ3YmU5LCAweDI4OTgzMDBlLAotCTB4ZDc3ZjkwOTQsIDB4ZjU2MDFkMjcsIDB4NTk1Yzg5ZDcsIDB4MTVmOWIwZjIsIDB4N2EzZjE0NDgsIDB4NmViNmQ4ZjcsCi0JMHgzOTkxZTc1MiwgMHhhZmZmMTIwYiwgMHgwZjEyYjg3MywgMHg2YTQyMzNlYiwgMHhlMWNkYTk1ZCwgMHhmOWFiYmU3NCwKLQkweDQzZGYxOWM3LCAweDdjNDA2ZDliLCAweDdjMWE1ZjllLCAweDRlZTZjYmNhLCAweGQ5ZDEwZTYyLCAweGQ2ZTk1MjZiLAotCTB4ZDNmOWQ1ZTksIDB4NzNiZTg4ZjksIDB4ZTdkNWJiNjUsIDB4ZDc3OWQxNDksIDB4MDdlNDQ5ODYsIDB4Y2U3NTQ3MjgsCi0JMHgyZjc3NzNjNywgMHg3ZGZlZTUxOCwgMHg3Y2IyYmViYSwgMHg1NThmODhmMywgMHgyZGJjZWE0ZCwgMHgwN2Y2ZjdhYSwKLQkweDhlZGU5MTRmLCAweGJiMWM1OTM4LCAweDNlNzhmZGRjLCAweDYxMWZmN2ViLCAweGVmM2U0MGYyLCAweGY4NjJmZTIyLAotCTB4OTk4OWUyNWMsIDB4M2VlZjllMGIsIDB4Zjg1Nzk0ZjEsIDB4YjM4NWZjZTEsIDB4Zjg3OGY5ZDUsIDB4MDIzOThiODUsCi0JMHg3N2RmYWZkZSwgMHhjOWQ5MjRlOCwgMHg2ZTNjMWNmMCwgMHg4MzFiNmQ4ZSwgMHg2OGVhNjU3ZCwgMHgwYWNjNmJmMywKLQkweDRkOTJmNTMxLCAweDZjYzEzZmJmLCAweDlmMjE4ZmJjLCAweGZjOGJhY2ZjLCAweDVkODllYjExLCAweGY5NDIxZjVhLAotCTB4OWViNmUyOTIsIDB4YjFkOTc3MmYsIDB4ZTJkZjQ1NGYsIDB4YjhiMzZmNDIsIDB4OGVjOTc4NGQsIDB4Y2IwYTczZDcsCi0JMHhhMTVjZmE1YiwgMHg0NGJjYzM4ZCwgMHg1OTliOTYzYSwgMHg3NmFmZTczYywgMHhiYmE3NjQ4YSwgMHhkNDgyZjZkMCwKLQkweDA0YTU5YWQ3LCAweGViOGUzZjM2LCAweGU0ZGJkNzZmLCAweGQ2NWVjOTQ3LCAweDQxOTk1MDdjLCAweDNiZTc2ZmZkLAotCTB4OTU3ZDY4MzcsIDB4NmJhNjRmOWEsIDB4ZjA5ZDM5ZjYsIDB4NjRkZTFmMTMsIDB4MzU4YTU3OTYsIDB4NGRlYzRhZmEsCi0JMHgzMzIxZDUzYywgMHhmOWQ1ZTE0MCwgMHg3ODhmMzY4MSwgMHg4ZmQ2NmRlYywgMHg3NzU3MTdmZCwgMHgxYzcwZWE5OSwKLQkweDAwMDAxYzcwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHhkNTU0NzgwYiwgMHg3MzNlZjBiNSwgMHg3OTkzMzMxZSwKKwkweDMxZTQyNGU0LCAweDFlNGUxMDgxLCAweDAzMDg2ODIwLCAweGI3OGE4ODg0LCAweGY2MzAxMDI3LCAweGQ1Nzg3NmQyLAorCTB4YWYwZTJkNTgsIDB4NmI4NmYyMTAsIDB4N2ZiNmJkMmQsIDB4Nzg0OTA4MDYsIDB4MTExZmMxYTgsIDB4MjllMWQ1YWQsCisJMHgzMTFkODJmNiwgMHgwMzg4YjYyMiwgMHhiZGFiZDIyOCwgMHg1NTdjNTgzNywgMHgwYmQxMWZlYiwgMHgyYTQ0OTA4YSwKKwkweGU1YjVlZjZhLCAweDNlZjZiNWVlLCAweDA5OTM5Y2M5LCAweGFmZGI3YjA0LCAweDdjZmRmZmZmLCAweGM3ZWNlZTlmLAorCTB4ZjVlZDdiZDksIDB4ZmRhZDZiZGEsIDB4ODEzMWM5MTgsIDB4ZTQyMzBkYTQsIDB4MDZmYmZjMjIsIDB4MTA5ZDkyMjEsCisJMHg5ZDM3YTEzMiwgMHhkNzIxMjBlMywgMHg2NjkyNDIxOCwgMHg5MmRkZmQyZiwgMHhiYWRjNDIxNCwgMHhhMzQ5YmZlMiwKKwkweGU0ZmViYmE5LCAweDVmNWY5YTFhLCAweGE0YWZmMGVjLCAweDRkMWY1YjRkLCAweDJkMDk2YTc4LCAweDJmYTFlZmJmLAorCTB4N2NkMDRmYzMsIDB4YWQ3OWVjZmEsIDB4Y2U3ZWI0YzUsIDB4NWQwZmM5MjQsIDB4MTBhYjFhMWQsIDB4ZDhlN2VkMDIsCisJMHg1MjAxNzZjMiwgMHg5MDk3ZTU4MSwgMHg5MjdmYTEzMCwgMHg0NWY4ZThhZiwgMHg5ZmU4Yjg4NCwgMHgzN2ZlOTcyNCwKKwkweGE1YjIxYzg5LCAweGQxZTQzZTYwLCAweDk5MDI5ZWEwLCAweDMxMzY0ODQ2LCAweDdlNjA1NWZlLCAweGY1MDlmYzM2LAorCTB4ZDA2Nzc3NDQsIDB4Nzc5ZTc1ZWYsIDB4N2ZlYzEzZTUsIDB4ZGIwYTVmOGUsIDB4ZjI3MzQ3ZTksIDB4NGRjODcyMDMsCisJMHg2ZDA4YzZkMywgMHhmYjFkYzc0OSwgMHhmOTA4Mzk1ZCwgMHhlNDk5MGNjMCwgMHhkOGI2ODc2MywgMHgwZmNhNmZmZSwKKwkweGQyMTQ3NTRjLCAweDA4MGI2N2ZlLCAweDQ5ZDlmOWZmLCAweGNjODJkYTM2LCAweDNiZTFlZGE2LCAweDFhMWY0ZTIyLAorCTB4ZDk5ZjY3Y2MsIDB4ZTBkZmI4ZTgsIDB4NDBkZmRkZGYsIDB4NWZjMGE3ZmYsIDB4ZTVhMTA5NGIsIDB4OWUwYzFjY2IsCisJMHhjNWQ5ZDllNCwgMHgxOTg5Y2UzMCwgMHhiZjQzMTZkNywgMHgzMjEzYTY3MywgMHg5ZDRkNTY4OCwgMHg0NDkwZjYzZCwKKwkweDg5MWFlYmYzLCAweGNkZGI0ZWRmLCAweGNmMWMwZDI5LCAweGNiZjhkOTgxLCAweGU4MDI5M2E3LCAweDYwZWU4ZTk3LAorCTB4ZmZjNDVmN2QsIDB4NjRlZjM4ZWIsIDB4Y2MzZmRlM2UsIDB4ZmExMDJiMWUsIDB4OGE5N2Y2NDEsIDB4YTA3MjVkYTksCisJMHg0YmQxNTNmOSwgMHgyZDA1NmE0OCwgMHhlZTUzMTkxZiwgMHhkMDlhNzY5ZiwgMHhlNmU5ZTRmMiwgMHg3MjEzNDBmNiwKKwkweGM0MjUyMTFkLCAweDFhZWE3MjkzLCAweGM5MTY3N2ZhLCAweGFkNDIyOGJhLCAweGVlOGMwYjZhLCAweDRhNmIwZmU1LAorCTB4MjJmOWZkZmYsIDB4MTJmYTAxZDAsIDB4NmExZmQ2ZmIsIDB4YTBlOWU5OWMsIDB4N2IzNzVhZjgsIDB4ZjRkMDg3OTYsCisJMHgwZjJjYzBmNSwgMHhkOWY1ZWZlMCwgMHhkNjhmMTBiMywgMHg2NzY2NzNmNiwgMHhmYjVlMDIyNywgMHgwNmZlZWYxYiwKKwkweGZhMDhkMDNhLCAweGI1YjNjNzNkLCAweGVhNDg5MDdlLCAweDM5ZmJmNDIzLCAweDMxYzNkMTNhLCAweDkzMDFkZmZkLAorCTB4MDk2NDI1NGQsIDB4YjM0ZDFiMzAsIDB4ZDJhNmQ1MjUsIDB4ZTg4ZDZjZmEsIDB4OTVlMzM4OTEsIDB4M2I2OWIxMDIsCisJMHgyODk5NDk5MiwgMHgwZmYzNTJlMywgMHgyNjM3YmI2MSwgMHg3MWMzNGFkOSwgMHhlZjA3NzNlNiwgMHhiODFhNTVjNywKKwkweDZmYTUwZTY3LCAweDc1MTI3NGQ2LCAweDI5MTJiYTUxLCAweDc1ZTJjNmFhLCAweDFhNTQ4YTVkLCAweGRkYzcwMzhlLAorCTB4Njg0MjVlMWMsIDB4ZTFjMGNmN2IsIDB4MDJkODY1NzEsIDB4NDczMjlmZDAsIDB4ZjVjMmM0MGMsIDB4NDI2NzgwMDMsCisJMHg0Y2EyNGE2ZiwgMHgxOGY4ZTZlZSwgMHhmYmJmNzJmZCwgMHgzMzhmNTA2YywgMHg4ZTAwYmI4ZiwgMHhlY2FhOTAwOSwKKwkweDBjOGYwZTNiLCAweGIyMDE5MzdjLCAweDQzZmM4Mjk2LCAweGUwMjQ2M2MyLCAweGI5MWVjY2ZiLCAweGU1MDcwMTI0LAorCTB4MTdmMGExOGYsIDB4YTQyZGFlMTUsIDB4MTQxMmQ0N2IsIDB4NDdlYzU2YjIsIDB4MDMyNGE0ZjQsIDB4ZGUxMTU3YmQsCisJMHg0ZjUxMjkwZiwgMHg0MjE1N2U1MSwgMHhkNzhiODRhYiwgMHgxMjllNmE1YywgMHgzNWYwNjUzOSwgMHgxOTNiYTlmMCwKKwkweDVlMWNiZmM3LCAweGU1MThhMDQ4LCAweDg4ZDQzMTUyLCAweGUzMDdjMDc4LCAweGVkNGRmOTJiLCAweGJhY2JhNTAyLAorCTB4OTQ3ZWU1ZDEsIDB4OTAyMThhNmYsIDB4ZTE3ZTQzMzMsIDB4M2JmNDU3ZGYsIDB4YmRjY2ZmMzcsIDB4Y2E5MWQyOWMsCisJMHhkMzM5NmI5MSwgMHgyY2RmOGE4ZiwgMHg4ZTkyZWI2NywgMHhjODIwMDhiNSwgMHgwZjQ5Yjk2NCwgMHg0MDI0MTIxMCwKKwkweGViNmYwMzc3LCAweGJjNzhhMmJlLCAweGZiNWJiZjA0LCAweGU3Yzg2ZmRkLCAweGM5OTgzMjYwLCAweDA1M2Y5MzI3LAorCTB4NzliZDA3ZmEsIDB4ZjAwNzdlZDMsIDB4NWVkZjNhZjUsIDB4NWQ2YmNjMDcsIDB4N2E4MjVlZmUsIDB4ZThjN2QzOGEsCisJMHg1ZGFmOTVkNywgMHg4MWQ2Y2U1MiwgMHhlZTgwOGQ3YywgMHg5ZWE3NDhjMywgMHhjNmE3ZDFmMiwgMHhhNjc2N2UwMiwKKwkweDc0OGJmNzJhLCAweDA4OTMzYjdlLCAweDZiNzVkOWVhLCAweGQwMmI3ODQ4LCAweGI1ZTU5NGI1LCAweGI1ZTE2OTZmLAorCTB4OWQzYjhlNzQsIDB4ZDY5OGJlYmMsIDB4ZWQwNmJjZDMsIDB4M2FkYmJlYTksIDB4Njg4NzBiNDksIDB4OGQ4YjZiN2UsCisJMHg4NWFiMWZiNSwgMHgzMTFmOWE0NSwgMHg4YTE0ODQ5MSwgMHhjMmM1NmQ0ZiwgMHhiZTVhNGU5NSwgMHgxN2VhYTM3NSwKKwkweDM0ZmQ1ZWI1LCAweDJkNjcyNWEyLCAweGRlYjJkZmI0LCAweGJkZjAwYWE2LCAweDNiMjNhZDhmLCAweDQ0Mzg0OWYzLAorCTB4MzliMWRmYzcsIDB4NjkyMzliZjksIDB4ZjliMjE0M2UsIDB4ZjI0ZmQzODcsIDB4ZDk0NWZhZjgsIDB4MDIyODQ0YTUsCisJMHg5YzNhMzFiNCwgMHhhZTVjNzkyMSwgMHhhOWU1MDIwNCwgMHg3ZWNiN2NiYywgMHhhNDhlYmZmZiwgMHg1ZDM2M2RmMCwKKwkweDQ1YTBhZmYyLCAweDRjY2ZkNjNiLCAweDc2OWUyOGQwLCAweDNmMDQ4MTY4LCAweGMwZjA3ZjRkLCAweGNjZWZjYzdjLAorCTB4ZGQwMDI2MGMsIDB4OWY5YzZlNzYsIDB4YzBmMTRjMDAsIDB4NDYxYjk5ZTYsIDB4ZDI2MTdiNDEsIDB4NmNlOTFkNjEsCisJMHgxZjQ3ZmZkNiwgMHgwMGVjM2EyOCwgMHg5ZTk5NGIzOCwgMHg3ZTBkNmE0ZiwgMHhiY2Y5YTI1MywgMHg4OWI5MTI0OSwKKwkweGFkY2YyMTRlLCAweDFmZGJkYzIxLCAweDRmNTgxMWIyLCAweDhiNmRlOGZiLCAweGNkZDQ0ZWJlLCAweGI0ZWI1Nzc5LAorCTB4NWQ3ZjgxOGYsIDB4MjAwOTE2MGYsIDB4ODYzNTNiZGEsIDB4OTIzNzQxZTcsIDB4YmVlYzhhZjAsIDB4Yzg1Y2VmZTMsCisJMHg1ZDI5MTNlYSwgMHhiZjJlMGU4MCwgMHg5NjY3NTk2MiwgMHg0NzU2Zjg1YSwgMHgzYzcxNzA3OSwgMHgxYzc1NWFiOSwKKwkweDg5N2E0ODhmLCAweDU3OGJkNjkwLCAweDYyNDY5ZmZhLCAweGYwN2FlOWYwLCAweGU5ZjU4MTI4LCAweDgxNjNlNzhhLAorCTB4N2NhMDVkMjcsIDB4OWNhYjgzMGYsIDB4MWMxZWI5ZWYsIDB4NjM1N2NhZjcsIDB4MjFiMWYxZTMsIDB4N2ZhMDFlZWYsCisJMHg2MTc3YzUyMiwgMHg1MGViMDQyNCwgMHgwYTI0NjE3YSwgMHg1N2M5ZTJmYywgMHg5YTBiYjAzNCwgMHhjNWM5MzEwOSwKKwkweDdjZmJkMWExLCAweDEzMzcyMDFkLCAweGFmNTgzZTIyLCAweDgzN2U4ZGQ3LCAweDgxNTY4ZmM5LCAweDZmZTYzMGY4LAorCTB4YjdlNGY3YjQsIDB4YzFmYjU4OTMsIDB4Zjg3Mjg3YTgsIDB4Njk3ODUzY2UsIDB4Y2I4N2JiMzksIDB4ODQ3ZjRmNTksCisJMHg3MzI0NDdhZCwgMHg0Zjc1YzIxYywgMHg1ZTc1NjFlMSwgMHhjODRjN2QxYywgMHg5N2NiOTQwYSwgMHg4MTdhZTA0OSwKKwkweGVkY2RkZWE2LCAweDZjMDZhNzUxLCAweDc5MDBkZmFlLCAweDkxMDI0MGI3LCAweDEzNGRkZjM4LCAweDQyZDI3YWQ4LAorCTB4ZTlhMDVkNzQsIDB4MTYyZjQ0YTMsIDB4NjY0YjlkNzAsIDB4MmViMmQ3ZmEsIDB4YmM5ZmQxZjUsIDB4MTZlOTE2NWQsCisJMHhkNDY4ZGY0MCwgMHg4NzM0ODAzZSwgMHgyM2NkMzFmOCwgMHg5MjQ3NGMwMSwgMHgyNmFmNGM1NiwgMHg0OWYzNGMxMSwKKwkweGE0MDVhNjNiLCAweGFmNDM1MzFiLCAweDQyMmE4OWY4LCAweGZhYzRjNDdlLCAweGE0ZTcyMGM5LCAweGU1OGI2M2RhLAorCTB4MzI2NGQwYmIsIDB4M2NjZTNlYjIsIDB4NzM3ODJkOWEsIDB4ZjhlYmY4OTAsIDB4ZTc1ZjAyMWQsIDB4ZmM4YWE2NDgsCisJMHhmMTdhZjg0MywgMHhlODE4YjA2ZSwgMHhmYzI4NTRjNSwgMHhlZmNjZGJiYiwgMHgwZWJlMjRlMiwgMHg2OTNkZWEzOCwKKwkweGRkMzM1NzgwLCAweGNkNTQ1NDhkLCAweGYwNmQ1YTdjLCAweDFjMjQ0NGE5LCAweGM0MWYzMmM3LCAweGQ2YjhjYzYzLAorCTB4ZmI3MzU2ZmUsIDB4OWM5Zjk4YzYsIDB4NDkxZjIzYTIsIDB4NTBjZjY2NmUsIDB4NzFiZGY0MzgsIDB4MDgyOGQxZjAsCisJMHhhYjQxOWU3YywgMHgyOWIyM2FkYywgMHhiNjQ5NGJiZiwgMHg2YjlhNWFjOCwgMHhlODc2NGY3NCwgMHg4OTNmMmYzOCwKKwkweDdjZWI2NzQ3LCAweGJlMmFmMGFjLCAweGE5YjNjMTgxLCAweGNiMGE5ZTA3LCAweGMyOTdmYTNhLCAweGZlYTY0ZmYzLAorCTB4MWRiMjRjYTQsIDB4ODZhMjBiZDYsIDB4YmM1NmRlNzAsIDB4NDJkZWY5ZjYsIDB4ZDJlNGZlOGYsIDB4NTdkNjY5OTEsCisJMHgwMmQ3OGE0YSwgMHgwNjlmODU4NywgMHhlMzdjN2Y2OCwgMHhlNDdmZWE0YiwgMHgyMTFiZmFjMywgMHhhOWVjMmE0MSwKKwkweGU2MDEwMWY5LCAweDFhNDBhZDdmLCAweGM4NWUyOTEzLCAweGEwZWRhMjY4LCAweDZhZjVjZDcwLCAweDY5OGI4ZWNjLAorCTB4OTFmNDE5MzcsIDB4NzRjOTBiNjYsIDB4ZWU5MmNmYmUsIDB4ZTQzZWQwMjMsIDB4ZjQxZDkxMjcsIDB4NmRmMzY3YjMsCisJMHg3ZDY5NWJhNSwgMHg2M2I2OWZhYSwgMHgxZTQwMDVmZCwgMHgwYjZkMWRhZSwgMHg5ZmQxYjk0MCwgMHhmNTMyOWU0ZSwKKwkweDExMmVmZDQ3LCAweGU4MzZlMWYwLCAweGU0YzNmMTYzLCAweDFmYjQzNmIxLCAweDZmYTI3Yzk1LCAweGM3NWYyMzg5LAorCTB4MWQxNTdjYjksIDB4OWViMGVhNzEsIDB4YjA5NGNhYjgsIDB4OGZmYTFiMzMsIDB4YjUzZTQzMTQsIDB4NWQ2MWY4OWEsCisJMHhlNmNkZDQ5ZiwgMHgzMGUxYzY1MSwgMHg1OWZhOWRlNiwgMHg2YTdlMDA0MCwgMHhjMDNiMzFmNywgMHgzZmQwNDg1NSwKKwkweDc0ZGEzMjU0LCAweGI0ZGQxZmYwLCAweDdlNDJmNTBlLCAweDUwNTMxNzU0LCAweGQ4M2ZhMjNmLCAweDVmM2Q5ZTFmLAorCTB4ZDAwYmVkM2QsIDB4YjlkNDdkN2UsIDB4OTJiZTA3NmEsIDB4OWZhMGU5ZmMsIDB4Yzg1NjhmNTcsIDB4ZjhiZGZhNjAsCisJMHhmZmY2M2IzYiwgMHgxODYyYTdiOSwgMHg0N2NmOTk4OSwgMHgwYmIxZDEwZCwgMHhhNjcwYzFhOSwgMHg2N2E2MThlMSwKKwkweGVkMzFkYTFiLCAweGQzMGI3ODZjLCAweDU5NGFlOWZlLCAweGViY2VkYThlLCAweGMwZDdlMjdlLCAweDNmMGYxMDFlLAorCTB4YzAwZjM0NDcsIDB4NWM3NWQ1MWQsIDB4MTJhMjFjMTcsIDB4ODI4MDJlYjMsIDB4ZDM2ZmZmMDYsIDB4ZGFmMGJjZDgsCisJMHgwODZiYzQ2YywgMHg2N2Q1NGRlNiwgMHhlMDM2Nzg3OCwgMHg5ZTAwMGE1YiwgMHhjMjIyMzg4NywgMHg3Nzg2N2NkMiwKKwkweDAxZDAzZmMwLCAweDNjOGU4YmNhLCAweDVjZjEwMmI3LCAweDllMDJjNjRkLCAweDBjYTRjOTM3LCAweDEzZTAzY2Y0LAorCTB4ODI3ZDg5ZDYsIDB4MDM4MDBlZWQsIDB4ZmU2OWYzZjIsIDB4YzFmYThmZmEsIDB4Zjc4NjU5ZmIsIDB4OWUyOTk3OGMsCisJMHg0YjQ5NGUwMCwgMHg4ZWFkYzY2NCwgMHg5MTNiOTVmMiwgMHgyN2Q3MTIwYiwgMHhmOTkyN2FiZCwgMHhiZGY2YmRkOSwKKwkweGNmMDBlZmY2LCAweGFjODk0Njk2LCAweDY4YTZiYzg1LCAweGY3YjcxMTRhLCAweDE1ODI0YTQxLCAweGRjZGZjMWQzLAorCTB4MjhmZDNlNTYsIDB4ZTJiOTBiZDgsIDB4NWE2NDg3NTcsIDB4M2E1ZWI0M2UsIDB4NGYyMzExZDksIDB4ZmQ3NDY1NTksCisJMHhiMGMyNzZhNCwgMHhlY2YyZTZlNSwgMHgwNzRmMzk5MCwgMHhiNzM0N2Y0MCwgMHhjNDNlNWNjNSwgMHg4N2FlZjVjNiwKKwkweGFkMWU0MDc4LCAweGU4YjY1YWYzLCAweGQzZmQ3MTU3LCAweGVhMjQwZDU1LCAweDAyZjI2Mzk2LCAweDE3OTFhN2MzLAorCTB4NDIzYjEzYmMsIDB4NDZjYjdlNzQsIDB4NGMwMzhjMTEsIDB4YjNmNWIxYjcsIDB4N2NhM2JlMTUsIDB4ZDc0ZjJmNzEsCisJMHg1MjMxZmE1YiwgMHg0NmRiYTI2OSwgMHgxOTNkMzBjNiwgMHhkZGJhN2Q2ZiwgMHg0NmNlM2M1NiwgMHg0ZGIwNmJmYiwKKwkweDcyYTM2NzFlLCAweDA0MjI5MmU0LCAweDViOTc3N2VjLCAweDkzZjllM2QxLCAweDhlMTI2ZGQzLCAweGViYjUyMDlmLAorCTB4ZmJhYjg1MjIsIDB4NGFkZmUyM2EsIDB4ZWU0Y2JlZjEsIDB4MmM3YzgyOGUsIDB4MjFmY2Q2MmIsIDB4MzBmZTQ3NTAsCisJMHhkNTEyNjNjYSwgMHgxNWY2NjI2MSwgMHg3MDAyNTNjMSwgMHg2YzRhNzg1MCwgMHhmYjA0NGUzOCwgMHgwNzM4YTZlOSwKKwkweGNjOTk3ZGZiLCAweDRhMzY1ZGZhLCAweGY2Mzc2ODIzLCAweDM2NTVlNzAzLCAweGQ4MGNlMTE5LCAweDM0ZmQwOTA0LAorCTB4MTU1NTk3NGUsIDB4YTM0ZGY3MzksIDB4OWY1NTRlZDksIDB4MjY2N2ZkMDUsIDB4NzhjMTY3MDUsIDB4N2U2ZmI5NDYsCisJMHgxOTYzZmEyOSwgMHgyYmY0Y2NjMywgMHgwMTY3ZDQ3NywgMHgyMjA2NTQ3ZiwgMHg0ZTdmODBkMywgMHg5MjZjNWY3YiwKKwkweDM2YjdiY2U5LCAweGYxNDRiZjEwLCAweDcwMmI5ZWZmLCAweDczNTdmNDFiLCAweGIwMDhmZDdiLCAweDVlMDZkZjdmLAorCTB4M2IyYTAwOTgsIDB4YTVhYzdhODAsIDB4YTI1ZmE1NjQsIDB4MTQ4OTcyZTUsIDB4Y2EzZjI5OTUsIDB4MjViZjBmMTMsCisJMHgyYTFhNDAxNywgMHg5MzhiMzg4NiwgMHg0NzdkMzNkNCwgMHgzNTIyNGJmNSwgMHhmNTIzMWNiZCwgMHhhMjdlMjE4ZiwKKwkweDcyZDAzYzgwLCAweDYwMjU2ZjU1LCAweGRiYTgzODBmLCAweGVmODYzMjcwLCAweDFlNzM0Yzk0LCAweDdjZDhmYTZjLAorCTB4NzJlMzdhN2YsIDB4MjdlNzk4MjksIDB4MDlmZTAzODcsIDB4NDlkZGU5ZGEsIDB4MjY5MjdmY2MsIDB4ZGUwMDBiZmEsCisJMHhhNmZmYWY3YiwgMHhjNGZjZjAwNiwgMHg2N2Y5MzM2NiwgMHg1YTRkN2Y1NiwgMHg3OTY5NmZmZSwgMHhmZWUyNjgxMCwKKwkweGQ1ZmNiNGI2LCAweDgwZjFiY2I0LCAweDk3OWM1Njk3LCAweDk0MzJjYTYzLCAweDI0ZjAwNTBiLCAweGJmMDdmOTMyLAorCTB4ZTQxZDY3YmUsIDB4Y2Y1YmY4NzgsIDB4NTcyZjU4ZGIsIDB4ZjgzNWJjMzcsIDB4YTcyMGUxYzMsIDB4YTQzZjgzMWQsCisJMHgwNTJkNTljNCwgMHgzZTQyZmY5MSwgMHgxYzI4YjVmMCwgMHgwOThmOTk5MiwgMHg2MjEzNGY3OCwgMHgxODE3NmU1MiwKKwkweDVhOWM5YmY2LCAweGRjOTQ3NDg4LCAweDk4OGVhOWQyLCAweDhmYzBkZGY1LCAweGMxZGRmY2IyLCAweGY0ODc4ZTFmLAorCTB4NzhhZDRjNmQsIDB4MDEyMGE0NTUsIDB4ZDc2OGQwM2YsIDB4ZTAxOGI3MTMsIDB4ZTIzNGVmZmEsIDB4MWZjNDc5YTksCisJMHhhNDczMzhhNSwgMHg3YTZhNzhiMCwgMHhmMzBhMjg1ZSwgMHgwOWZkNTI3MiwgMHgyMzNkZDNlYiwgMHhmMGM1NmI1ZiwKKwkweDNiMGZjNTgxLCAweDNmMjBhZDk0LCAweDYxYjY4Y2I0LCAweDc4NjViMzVjLCAweGY5MDI5MGU0LCAweGQxNDA2YTBjLAorCTB4NWRjYTY3N2EsIDB4NGM2ZDg4MjEsIDB4ZTM3YzYzY2QsIDB4ZDRmNWIzZjQsIDB4N2U4YzNjMzUsIDB4YmRiZmExOTgsCisJMHhhZDVlMWYxYywgMHg2N2IzZjUxYywgMHgzMWRlZDlhMiwgMHgyYjI3MDFkNiwgMHhkYjM2ZjRhMiwgMHhhNjk0Y2U1MSwKKwkweGJlODJjNTRmLCAweDliNTM5YTdlLCAweDY5ZTUxYTc2LCAweDIzM2ZiOWE0LCAweGUzNmVkMWRlLCAweGM5NmI4YmYxLAorCTB4NTkzNzY4YjUsIDB4ZTFmZDEyZTIsIDB4NzFmODZiY2QsIDB4ZGNiY2Q5MTMsIDB4ZmMxODQ5ZDMsIDB4NTE4OWY0ZTYsCisJMHhjZmQ3OWJjNCwgMHg5YmQ4NjZmMCwgMHg5YmJmM2UxZSwgMHhmYzA0MjM0YSwgMHhmM2Y4OWViZSwgMHhlYjZmMGNjZCwKKwkweDdmYTI4YmFmLCAweDI5ZWM3ZWI3LCAweDg1YmQ2N2I0LCAweGNlM2YyNjFkLCAweGExY2ExZWY4LCAweDc2YzRmY2ZlLAorCTB4MThmNmExYTgsIDB4MjM3MTFiY2IsIDB4MTllOWE3OGEsIDB4NjFlYmJkNjksIDB4YWRkYmI3MmIsIDB4OTIyNzUzNzQsCisJMHg0NzYzZDA2MiwgMHg4MzE1YTc0NywgMHg4NGI3YmVkZSwgMHgzY2FiNGVjMiwgMHg2Mjk3NTg3YSwgMHg3ZWYyYWRmMCwKKwkweGRmODY3Y2Q0LCAweDdjZDhjYjdiLCAweGQzZjQ3YjY5LCAweDkzOTg5ZGVmLCAweGYyNjZlMzA0LCAweDdmMTFiMGY4LAorCTB4ZWJjYmYxZWUsIDB4Mjg0Zjc4Y2QsIDB4MmQ4NWM0YjQsIDB4NjdlYWI3N2UsIDB4Y2M0YjUyZjQsIDB4NWYzOWFiZTUsCisJMHg1N2E3MjIyYiwgMHhlOGNlMTkyYSwgMHg0ZjNlMzAzNSwgMHg4NGJjZjgzMiwgMHhkZjMyNzlmMSwgMHhkMTJmNDgzNywKKwkweDkyMWQwMTBlLCAweDRkZmY5OTRhLCAweDRkZjM3ZTJjLCAweDVlOGMxZDI5LCAweDAwYzg4ZjM3LCAweGE5ZmVmYzNmLAorCTB4OTc2NjNlZGQsIDB4NzEyNmJhMzAsIDB4YzZlZmJjN2UsIDB4NzFjODAyMTEsIDB4NDAyNjg5NzIsIDB4YzMzZTcyN2QsCisJMHgxM2M1MzI1MywgMHhhNWM5NzdhYywgMHg0ZWY2ZWZjYywgMHg1MjVkYjBkNCwgMHgwYjViYTMwOSwgMHg1ZmUxNGM3YywKKwkweDg5OGE3NDAzLCAweDViNGIzYjFmLCAweDZiN2ZhMDc1LCAweDc0MWQ0ZWYxLCAweGUxYzUzMjU5LCAweGQ0Y2YwYTIwLAorCTB4ZDgxYjBhNTIsIDB4ODA1ZmI0OWQsIDB4YzUxODUzZDcsIDB4NDk1MjVhYjgsIDB4ZmNhNWQ4NzAsIDB4ODJhMjQyN2EsCisJMHgxMGY4ODdjZCwgMHhlOTRiNjg2YywgMHg3ZTU4MjUzYywgMHgyMGIyNjI2OCwgMHhhN2VmN2VkMCwgMHg4MGYxYzA3YywKKwkweDhmMTczYzcxLCAweDc4NWZkZmEzLCAweGZkZGNmNTEyLCAweGM4MzY0ZGYwLCAweDFjZWJmNmE5LCAweDM2YTUyNzlhLAorCTB4ZjcwN2Y4M2YsIDB4ZjEwOGU2OTcsIDB4YmNjNmU3ZTIsIDB4MmFjYjgzZmIsIDB4MzVmODEyYzcsIDB4OTU3MmZjMzEsCisJMHgxNmRlZTNjOCwgMHgyMjQ3NWRmZSwgMHg1N2M4MmU2YSwgMHhhNWY3NmY0OCwgMHg4MzBmZWFmNSwgMHg2NWU0N2FmZiwKKwkweGZlY2JlMzEyLCAweDg3YTE4OWY0LCAweGIyMTgyNGRkLCAweDFmZDVmNzY1LCAweGRlZjhjZTkyLCAweDc5NDAxNzllLAorCTB4MjRlZjAzZWIsIDB4OGE1MmFmYzYsIDB4OTEzNmZjYjksIDB4NWU4NjdmZGIsIDB4MTQwNzkyZDEsIDB4MDBhMTI3MjcsCisJMHhkNzIyNzdhZSwgMHgwMmRhNGY0ZiwgMHhmMDU0YzUwYiwgMHg0ZWI4YzNiYiwgMHhhZTc0YzhiOCwgMHhjYTlmMTkzNywKKwkweGU2YTZmZjljLCAweDRhZTJiZDMzLCAweDk3NzZiMDg5LCAweDkwM2FhNzhkLCAweGE4MzRkNmRmLCAweGM2NWExZmE4LAorCTB4NDM5ZWQ1ZGUsIDB4Nzg2NmIwZjEsIDB4NzNiZTFmOTMsIDB4YjkxOTZiOGMsIDB4M2NkYmY2OGQsIDB4MmI3MDc5N2MsCisJMHgzMGZkYzAwYywgMHhhYzIyYmZkNCwgMHg4ZDVmOGM4MywgMHgwZTAzMzA3ZCwgMHg2MWQyMTk5MiwgMHg3ZTA5Y2M5ZiwKKwkweDI0NjdlMDExLCAweDI0OTA1ZmRiLCAweGViOGZiNTEyLCAweDQ3OTVkZjFkLCAweDY5NjdjZGUxLCAweDBkYzE5ZjI4LAorCTB4YjZlYmM5ZmUsIDB4NmY5YzJhZTAsIDB4YTI5NDZiN2UsIDB4Yzk5YmNlOWIsIDB4NDIyMTZhY2IsIDB4ZWJjYzIyNWMsCisJMHhiMjFlN2M3MiwgMHg5ZjhlYmUzMSwgMHgwMjVkZjdmNiwgMHhlMWM0ZDNlYywgMHhkYjIyZGRkZiwgMHg0NzJkNTlhNywKKwkweDdlMDg1MDg4LCAweGYyODllZDFiLCAweDZhNmNlYWM5LCAweGEzODFjNzk3LCAweGQ1NmJmMzkxLCAweGMzZjg2NzJlLAorCTB4ODlhYjdlMTgsIDB4NzVmMjk5MjQsIDB4MWZjMjMzZmIsIDB4NzcxMWZhYzYsIDB4NTE0ZmI4MGEsIDB4NDM1OGQxY2QsCisJMHhjZjAwYjIzYSwgMHhmNjFhMjllZiwgMHg0OGViNmI1NywgMHhlOTE3N2M4MywgMHg3ODAyNWI0ZSwgMHg4YjhmMDMxMCwKKwkweDUyNzdmZDc0LCAweDkwYjhjNGJlLCAweGQ2ZWI2MDdiLCAweDgxYTdmMGU1LCAweDQwODVkMTBjLCAweDBmYTllNGNiLAorCTB4MTc4ZTk4NzksIDB4NjllMzA3ZGMsIDB4ZDJiZjJiMmEsIDB4ZjVmMGUzNzEsIDB4NGQ3Y2IxMGIsIDB4NmE1OTU3YzQsCisJMHgxNDdmNmJlNSwgMHgxMjlkZGFmOSwgMHg5ZmI3N2FjNSwgMHg4ZmMxYjVmMSwgMHhhZDFmOWM4OSwgMHhiZjhjNjg3YywKKwkweGQ2YWZjNzllLCAweDMzNWYzZTcyLCAweDcwODU0OWExLCAweDliNTFkYWRmLCAweDJjZTY5ZTMwLCAweDdjMDE1Y2RhLAorCTB4MjVhYTMyZGUsIDB4NjRkZTdjMGMsIDB4MTdkZjM1ZjAsIDB4ZGIyZWZlYTEsIDB4YTM1YWQzMWYsIDB4NzIyNjRlYjAsCisJMHhlZWQ0NTZiZSwgMHhlYjdiOTAwNiwgMHgzODkzNWQ3YywgMHhiZTA1MzRiYywgMHg1ZjM5YjgwNiwgMHg5M2Y4MDdiZiwKKwkweGFlMDhkZGZkLCAweDA3NmJkN2MxLCAweDQ1YmFkN2NjLCAweGZlZDM5YjZmLCAweGMyZDkyN2ZjLCAweGYxODkxZWQ3LAorCTB4ZDdjMDY3ZTcsIDB4YjMwYTRmMDAsIDB4OTYzZWRjNjMsIDB4ZGZlYTdlY2EsIDB4MDZlN2U5YzcsIDB4NmI5OWY5ODksCisJMHhlNWFjMWNiOSwgMHgxZmI2YjA3MiwgMHgyMjNmZjgzOSwgMHg5YWZlMDNmMywgMHhjOThiMzA3MiwgMHhlNWEyNDM4MSwKKwkweDhjYWU5Mzg5LCAweGQzYjAyNTFmLCAweDllN2JjOGUzLCAweGUxYjVmYzI0LCAweGJjNDMzNGRlLCAweDI3ZmUzYzcyLAorCTB4YmU4NGNkMzAsIDB4Y2ZkMjM0ZjQsIDB4ZTRjMGU3NDQsIDB4NzNjOThmM2IsIDB4NzZiZTcyN2YsIDB4ZmUzODdjNjgsCisJMHhhN2Y0NjQ1MywgMHgyNjkyMmVmOCwgMHhmZmJlMzk1YywgMHg3MjE1NzA1YSwgMHg0M2YwMzY3ZSwgMHhiNzI4YzU4MiwKKwkweDNhNjY3YTMxLCAweDg2YTkyYmMwLCAweGQzMDQ3OTllLCAweDI4YWQ3OWE5LCAweDgxYmU4NmE3LCAweDJiZmEwYTU4LAorCTB4M2JjNjJiNmEsIDB4NjhhZDk5OWMsIDB4OThmMzM5OWYsIDB4MjRmYzMxYmUsIDB4Yjg4ZDdjZWIsIDB4MzNkNzEzNzgsCisJMHgwMjIxNzk0OSwgMHg4NTNkOWZlYiwgMHg5ZWFhM2Y3MCwgMHhjYzk5NTFmOSwgMHhkNWUyMzAxZiwgMHgxOGE4ZmQ4NiwKKwkweGJiZDBkNDdlLCAweDc5YTc5ZjcwLCAweDk3ZGEzZDc4LCAweDNiZDYzN2NkLCAweDM2YzNlZGUyLCAweGYwNzdlZWZiLAorCTB4M2VkMzVmNGQsIDB4MGU1YTFhZWIsIDB4YmJjOWFlZmQsIDB4YzNiM2M0OWYsIDB4ZmIxODc5OGMsIDB4NmUzZTRlNDYsCisJMHhhOGI1MWU3MywgMHgzMmRmNWM2MCwgMHhjNzZhZGVmYywgMHhmZWIyNjczNCwgMHg3YWU3YmU3YSwgMHhiYmQxZWU1NywKKwkweDU0NzY4ZjJjLCAweDZmOWY4YzZlLCAweDAzZTBjN2U5LCAweGEzNDNlODg1LCAweGU0MTgzNzEwLCAweDRjZTcwOTFlLAorCTB4M2YwNDg0OWEsIDB4OTI0ZGM3ZDgsIDB4OTA3MjlkMjAsIDB4NWFhOTdiMWUsIDB4ZmY0MDE2ODksIDB4OWNiYzY2MjcsCisJMHgzZGIyZjY4NSwgMHhiY2U0MDZiOCwgMHgwMzgwYWJlOSwgMHg1M2FiYTllMiwgMHg5NmM2ZjM1ZSwgMHhlNmYxOWQ5ZiwKKwkweGE1NmNjMWI3LCAweDdlZTJkNWRmLCAweGIxNDg4MzhlLCAweGRjMjc2M2ZiLCAweDRiN2VkMWRiLCAweGU5YzczN2M4LAorCTB4MDlhZTE0OWMsIDB4Y2MxM2M0MDIsIDB4YmY4ZjBhZTUsIDB4NzJlNjk5MjgsIDB4YTQ1ZmM3OTksIDB4ZTczOTRiMTQsCisJMHhiZTM0YjkwZiwgMHhlYjkzNzk1ZSwgMHg3NjAyZGYxNSwgMHgxY2M0ZTc0ZSwgMHg3MTNiZDcxNiwgMHgzMDY3NGYyYiwKKwkweGRiYzczZWZlLCAweGMyMzRmMzc1LCAweDUzNWZlZWY1LCAweGY2ZTUyNTFmLCAweGUyOWJlZmMyLCAweDk5MjJmOGM3LAorCTB4M2ViYjQ3NjUsIDB4MmI5ZDg1MmIsIDB4MjZlN2IxMjAsIDB4YTI2YjVmZTAsIDB4Y2NmYzYyNDQsIDB4ZmY5NzgxYTEsCisJMHg2MWQ0ZjEwOCwgMHgwNmNhYmUwYiwgMHhlYTE1NmIzYywgMHhkYjQ2NTg2MSwgMHhjNzljNmNhNSwgMHgyOGY3NDI2MywKKwkweDNhZTZjZjE4LCAweDAyZjVmYjhiLCAweDZhNzJlMzQ1LCAweGRiZjQwYjEyLCAweGVmODUyMWRiLCAweDNhNTJjMGJkLAorCTB4OTEwNTdiOGYsIDB4MzdjMGVjYmYsIDB4OGMyOWQwMjIsIDB4YjE0NDhiYTksIDB4MzAzYTQzZGUsIDB4ZTYxYjA4OWYsCisJMHg1MTg3ZTBiOSwgMHgzM2M0NGJiZiwgMHhjNjFiNjE0YywgMHhmNmNjN2U4ZCwgMHg3ODg4ZDY0MywgMHgwM2E4ODM2ZSwKKwkweGVkYzliZmI0LCAweDQyOTdmODJhLCAweDFhZTc3ZTg4LCAweDQwYmU3N2Y4LCAweGM0YzgzMTZiLCAweGM2MDhiMmUwLAorCTB4N2NlZGFkOTMsIDB4YTAzOWQ4NTMsIDB4YWZmYjdhM2UsIDB4NTIzN2RmNGYsIDB4NTQ4ZjgxNzMsIDB4MWNlODM3MmMsCisJMHg2OTRlZjUxNCwgMHg1ZmYyZGY0MiwgMHgxMmYzODE4OSwgMHhkYzU4YWJjNiwgMHgyYTVmNWFjZCwgMHhkZTQwMTdlOSwKKwkweDBiYzJlNWFjLCAweDdlMDUzYTdmLCAweDY0NjdhYWY0LCAweDNjYTdhM2Y0LCAweDQxYmY0NzIzLCAweDA0NWIzNWYzLAorCTB4MDc2ZDUzZjQsIDB4NzcwZmU4OWQsIDB4NTFmMmMyM2UsIDB4ZmI0M2EyOGYsIDB4OGMwNWRiNzMsIDB4ZGJkOWQ1MDcsCisJMHhlMjAxYmRlZiwgMHgwNDg4Y2Y4YSwgMHgxOTcwOGRmZCwgMHhlMjlkOGJlZSwgMHg1OWZiMjY3MywgMHg4MDA3OWNiZSwKKwkweDlhMWNiNjZhLCAweGVjNTdkZjBiLCAweDc3ZDgxM2I3LCAweGYxNmU3OWE4LCAweGY5YTA2ZmI3LCAweGY0NjRjN2M1LAorCTB4YWM3NjZhNTEsIDB4NjU3ZjYwNTAsIDB4NDA4ODU4NDksIDB4YzEzMjZiYmUsIDB4YzRmYjQzZjEsIDB4YmVkYTBlZjAsCisJMHgzNjllZGJjYiwgMHgyYmZiMGRjNywgMHg0NTVkYTIwZSwgMHhhN2I0ZjZlMSwgMHhhOWY0YTZjZCwgMHgwZDM1M2YwYywKKwkweDJkZGNhYmJlLCAweDk4ZmZjMWY4LCAweGEzOGVjY2YyLCAweDlhYmJmNDE5LCAweGE3M2MwNDI3LCAweDQ1Y2JiNTUwLAorCTB4OWNiYTE4YjQsIDB4ZGZhMzEzNmEsIDB4OWQzM2Y4ODAsIDB4OGJjNWY4MjcsIDB4YzAzNGViNDksIDB4MGQ4ZWNkN2IsCisJMHhiNzEzMTY4YSwgMHg5MjMwZDMzYywgMHg3Y2RlZjY2OCwgMHgxYzc0MTNjZCwgMHg5M2VkNWRmYSwgMHg1OGE2MWY4MiwKKwkweGUwNDEyMzZiLCAweDljZTdjZThmLCAweDMwZGNkYjY1LCAweDA4Y2ExNWJmLCAweDU5YWJjYzBmLCAweGMzOGI3NjgxLAorCTB4N2VjMWY2ZjMsIDB4OGI3ODY1N2EsIDB4NTdkNjhkMzIsIDB4Mjk0NWIyM2UsIDB4YWFhN2UxOGYsIDB4MmQxMGQ3NWQsCisJMHg2ZDRlM2Y4NiwgMHhkNGJmNGRjZSwgMHhhZTg2N2I3YSwgMHg1NGYwYjE1YiwgMHg4OGI3YTYxMiwgMHhjNDY2NTYxNCwKKwkweGM4NzY3YmVjLCAweDQ1M2Y5YzQ5LCAweGRmMDZmZjUzLCAweDE4Mjc1ZTg3LCAweGVmM2QwYWM3LCAweDc0MWFiYzQxLAorCTB4YmQzMmE2NWIsIDB4YmNlZGQwNjAsIDB4NzUyOGU5Y2EsIDB4YjM4OGNkMTcsIDB4ZDAyZjdhYWYsIDB4MmFmMTBlYzEsCisJMHgxYmZiZDMxNSwgMHg2YzZlOTg3YywgMHg5YjNlOTBkMCwgMHhlMTU3N2YwMCwgMHg3Yjk2MDZiZSwgMHg4ODYyOTEyNywKKwkweGEyNzU3ODhiLCAweDNjOWY1MmMyLCAweDIxOTYyZjVkLCAweGY5NjAxMjRlLCAweDgyODNkYmI0LCAweDFiZjk4OTc2LAorCTB4MzgzOTI2ZTksIDB4Yjc1YzgyMGYsIDB4OTY0YzRmYzksIDB4NDliZWJhZTgsIDB4N2UyNTJlMDksIDB4NzdiNGJlM2EsCisJMHg2MDc1Yzk3MiwgMHhjOGU3MDVhNywgMHgxZDlmYjBhOSwgMHhlOGYxNjBhYywgMHhhMmU0MGY4OCwgMHg3Y2NiZWY4OSwKKwkweGQ2ZjI2NjRiLCAweDdjNjBhMTk0LCAweDhiZjdkMzY0LCAweDQxZWRhMWI2LCAweDdkMzY1ZTE4LCAweGVjMjc3Y2JmLAorCTB4ZTY3ZWQxYWIsIDB4MWFhZTU0Y2EsIDB4ZWU0ZmRhNjUsIDB4OWI0OWZiZTUsIDB4NGZkNGQxM2IsIDB4YTMwYWRjZGEsCisJMHg4ZmQ4YzU5ZiwgMHg2Y2ZkNjA3MywgMHgxOWJkN2I5YSwgMHg0Njk1Yjk5ZSwgMHg4ZmQ4ZjUzZiwgMHg0YWYzNjA2NywKKwkweDE5OTI2M2JiLCAweGIxYWEzYjllLCAweGZkZGJmNDlmLCAweDA2ODgxZjY4LCAweGRjNzY5MGZmLCAweDRlZWY3NTE3LAorCTB4YzQ5NmI3MWEsIDB4MWZlNGQxZjIsIDB4MmExZTc4YzMsIDB4OTQ3Y2IxNTUsIDB4MjRjMTMxMzgsIDB4YjI3YTQ5NGYsCisJMHg3NGE4M2YyOSwgMHg2YTdkYTliMCwgMHg5ZjU0YzcyMCwgMHg4NWI1NzY1ZSwgMHhiZmE4ZGQyZiwgMHg4YTgxNGYzMSwKKwkweGFiMzhiMTI2LCAweGJkNDE1ODMyLCAweDgxZDgzYzUzLCAweGJiMDZiYmY5LCAweDc1ZGNlZjUxLCAweGIwMmFmMDdkLAorCTB4ZDA1NjAwZjcsIDB4YzEyOTc3ZjMsIDB4YmUxYzZhMzEsIDB4MDgxMmYzYTEsIDB4MWIzNGNmYzYsIDB4MzJlYzdkYTQsCisJMHg3OTM5ZWZiZSwgMHhkZTIzNTdjOCwgMHhkOWQ3ZGZhNywgMHhkMTI0NDdiYSwgMHhmMTRhNDNmYywgMHhhZGVmMzAyMywKKwkweDhkZTNiMzMyLCAweDlkODI0MzM4LCAweGNlNmJmZWEwLCAweDhhMTZkYTJlLCAweDUwY2I2YmMxLCAweDZmNDIyZmNhLAorCTB4ZDA3MjJkYmYsIDB4NzNiOGZjMDcsIDB4NGE1NzZmZjUsIDB4YTFhNmJlMTQsIDB4N2E2ZTFlMGEsIDB4ZTFlZGZlNWMsCisJMHg5Yjk5YjUxMCwgMHgwMGZiOTY4NywgMHhlYTg1NzZmZiwgMHgxNWYxZDg4ZiwgMHg4ZTNlN2UzYSwgMHhkZmM2MWJiZiwKKwkweGQ5M2IzMzJiLCAweDY3M2RiZTNhLCAweDQ3N2M2OWEyLCAweDdjNjk4NTU2LCAweGE3Yzc0Mjg3LCAweGY1NmZiMWYyLAorCTB4OGE3YzdjM2IsIDB4NzkwOWViYmYsIDB4YzcwNzdlNTYsIDB4ZTA1NTY3YjcsIDB4YTkwYWNkZjgsIDB4ZDA5ZjhkMzAsCisJMHg5MDAxZmUzMywgMHhjZGZkYzM5ZiwgMHhmMzdhZTczZiwgMHhjZDJhYjNmYywgMHhmY2Q4NTdmMywgMHg4MGZlYWU4ZiwKKwkweGYzODA5ZjhmLCAweDgwZmU1OTdmLCAweDkyYWIzZmNkLCAweGZhY2VkZmNkLCAweGRiZGYxOWVkLCAweDYxNTdmZjgzLAorCTB4MzdmNWFmZmUsIDB4ZTY0OWRjZmYsIDB4MzZhYjBmZjksIDB4YzZjZWRmY2YsIDB4MjdmNTYzN2YsIDB4OGUzNzdjN2MsCisJMHgwOWZjYTZmZiwgMHg2YWIwZmY5YiwgMHgwN2IxNWYxYywgMHhjYTQ3YzBmZCwgMHhmMDdhODQ5MCwgMHhhNDYxYTk5ZiwKKwkweGEzNWQ0MDYxLCAweDkyM2E0MGUzLCAweGM4MzdhOWM1LCAweDVkYzcwODM5LCAweDNlZWY4YzA5LCAweGU2ZmNhMDRmLAorCTB4MjRhN2Q1ZWUsIDB4ZWE5MDI1NGMsIDB4ZDNjZTVhY2IsIDB4MTU4YmJiNTUsIDB4ZDA4NDJmZTYsIDB4NDFjNDU4NWYsCisJMHhjNDVmYjg1ZCwgMHhiNDZjOGNmNSwgMHg3ODUzODc4NywgMHgyMThiZjczYiwgMHg3OGRjMmZjOCwgMHhhYzViOWUyMywKKwkweDc3ZGMxM2IzLCAweGZhMzA1NmE3LCAweGMwZjFmZjFmLCAweGYzYjFhZGU4LCAweDVhOGJhNmIyLCAweDEzZmVjYjY1LAorCTB4ZWYzOGM3ODMsIDB4YTZhYjI0NTQsIDB4YTc4ODI5ZmMsIDB4MTI3YzNkNTAsIDB4OWU5YTFmZmMsIDB4YjQ3OGU5OTYsCisJMHg4M2YwNDNmYywgMHgxYjk1OGFhZSwgMHg3NjhjMmU3NiwgMHhjZTlmMjI3NywgMHhmZTFjYmJlYiwgMHhmN2MzMTI1MywKKwkweGRjMDUzYmE5LCAweGMzN2NmODQ3LCAweGQ5ZjQwNTUyLCAweGM5OTc1NmEyLCAweDc0ZTNhODZmLCAweDhlY2U3ZWVhLAorCTB4NzljNjhkZmIsIDB4MTQ1MDViYmUsIDB4YzFmZGY5MDksIDB4YmIwNTFkNmYsIDB4NDFlNmYxNzEsIDB4Mjc2ZWVmYTYsCisJMHgxNDcwZDVlMSwgMHg3OWZhYzE3MywgMHhmZjNhNTU0MywgMHhlM2VjY2FkYiwgMHhlYjZiOGM0NCwgMHg5YzFjNTg0MywKKwkweDQ5Yjg4MTBjLCAweDc5MDZkYjU5LCAweDUyZGNjZDA4LCAweGY5ZWM5YjI2LCAweGZjZTY4MzViLCAweDdjZTYxNTZkLAorCTB4NmQ5NjFjYTcsIDB4MTEyY2NmNjAsIDB4ZWZkYTE2YzgsIDB4Y2I2NWViZjcsIDB4OGUzNjAwYjksIDB4NzZlNjQ5NTcsCisJMHhiYmVmMWIyNSwgMHhiNDE5ODY5NCwgMHg4ZTkwZmJlOCwgMHhlOTE1NjI4MywgMHhkZjY1NTczYSwgMHhkZGQ0ZjAxYSwKKwkweGFlMjg5MzJkLCAweGI4YTkxZGM3LCAweDQ1NGExNDBmLCAweGIyYTgyZGJmLCAweDlkZTE1Yjc5LCAweDAwZjQzYjJiLAorCTB4OGZlZTY3ODUsIDB4MTVhN2M0NDQsIDB4MmU4MzhlZmUsIDB4ZjNlZDQ2ZGQsIDB4OTA3ZmNkOGUsIDB4OWQ2YzdlMjEsCisJMHgzYmZlMTU4ZiwgMHhhM2U3NWI5NiwgMHhjYzNlYjAyYSwgMHgxOWNiNTkwYiwgMHhhOWY5NTg5ZiwgMHgzNmYxN2Y2ZSwKKwkweGYzN2IzZGIzLCAweGI1ZmI1OGI2LCAweDUzMGNkNzZhLCAweDU2Zjg0OTdlLCAweDliYzVmYjUzLCAweDE3ZWE5OWU3LAorCTB4ZDUzMTJlYjUsIDB4NmE1OTY4MmYsIDB4ZmQwYmNmY2EsIDB4OGVmZWQ0YzgsIDB4ZjU0YzJiZTUsIDB4NjM1ZmFmZGYsCisJMHg2MmFkYmZhYSwgMHg2YjdmMjk4MywgMHhmYjUzMjFmMCwgMHg5OGI2Y2E1YiwgMHg0NzA3NmRlYSwgMHg2OGU0MDc3ZCwKKwkweDllMjJlYmQ1LCAweDNlZTBiZGZkLCAweDliZDgyZjc1LCAweGVlMTJkYzE3LCAweGVkNDQ3ZTczLCAweDMzODM5MDE1LAorCTB4YjQ4MTVlZDQsIDB4ZjQ3OGZmNzMsIDB4MmMxZWE5YTcsIDB4ZjlhMjRkODcsIDB4MmQ1NTk4Y2EsIDB4MDk5N2EwOTksCisJMHg2NTcyY2ZlYSwgMHgyNGQwYWFjMiwgMHhkN2IwMTc4YSwgMHg5Yjg4N2NhOSwgMHgwNDFkMTIxNSwgMHgwZjcyNGNjZSwKKwkweDMxOGI3NzFmLCAweGE5OTcxZGY1LCAweDdkMDU0Y2RmLCAweGIxN2FkZjdjLCAweGRkNzk3ZTIzLCAweGQ0YzM3OWQ2LAorCTB4YWY2YTdlMzgsIDB4YjAyMTkyZGMsIDB4Y2U1OTc1Y2UsIDB4YjU2OTE4OWYsIDB4YjFhNzNjZTUsIDB4ZWI4MTdkYmYsCisJMHhlOTg1NmFkOSwgMHgxOWJkZWE4MywgMHg4NjczNjE5MywgMHhlMjIzZTVmYSwgMHhmOWVjOWI5ZCwgMHgwZGIwMjIzZSwKKwkweDUzZmViMDQ4LCAweDk4ODYxZjgxLCAweDc2YWE2YmY2LCAweGZiZTQ5YWU1LCAweGUxMTEyMWVjLCAweDQwOWQwNWFhLAorCTB4NTIxN2VhZjUsIDB4NzIwMjhkNjAsIDB4MzU5MjNkMTYsIDB4YTFjMDM0NmIsIDB4ZWY0MDU1YWYsIDB4NzVjNTRmZWMsCisJMHhlOTQzNmNmZCwgMHgzZmFmZDgzNiwgMHhmNGMwMTBkMywgMHg0YzMyODZhMywgMHgzMTA0MzU0ZiwgMHgwMmExYjBmZCwKKwkweGY1MGQ5M2QzLCAweDJjMzQ3Njk4LCAweDg2YmRmNGM3LCAweDM2ZWZhNjEwLCAweGJiZmE2MGI0LCAweGRmNGM1Njg2LAorCTB4ZTk4Y2Q4NmEsIDB4NGM2MTBkMWIsIDB4NGM3NDFiM2IsIDB4ZDFlODc5MGQsIDB4MGY2ZTAxYmYsIDB4ODRkNzFiMWIsCisJMHgyZTdjYzNkYiwgMHhlNzNkYTk4ZCwgMHhmN2ZmNzBjMiwgMHgxMWYzZmJiYywgMHg3ZjlmZWY2MCwgMHg2Y2ZiOGVjYiwKKwkweGNhY2JlMWZkLCAweDUxZDNmZDZmLCAweDNjYTU3YjQ3LCAweDYzOWQwODNjLCAweDgxMzNiZDZiLCAweDIzNjljOWQxLAorCTB4ZWMxYzY0YTUsIDB4Y2ZmNGVjZmYsIDB4YzRiY2M3Y2YsIDB4ZmQ4NGY1MmUsIDB4ZmE3MTNjMzMsIDB4ZmE1ZDc4ODUsCisJMHhmNDQ0ZTllNSwgMHg5NDk5ODJlZSwgMHhmZTFlYTcxZSwgMHhmN2U4MjJhZiwgMHg2MDdmYWMwMiwgMHg3MTExMWMwNywKKwkweDZkZDEyNjFkLCAweDk1ZDdhMDdlLCAweGUxNzg0ZGUyLCAweDJmMTA1OWY3LCAweGJmODNkNzNiLCAweDhiODgyY2Y2LAorCTB4ZDhhOGFiNWQsIDB4M2IzNmY5ZmYsIDB4ZjlkMmY4ODEsIDB4Y2ZiYzJlMDMsIDB4MzZkOGZlNzUsIDB4MzJlM2M4MmYsCisJMHgzZDhlMTg5ZiwgMHg2YjRkNjE0NywgMHhiNzYxZDkyMiwgMHhlNzM2ZWZjOSwgMHhhNTBhYjdjZiwgMHg2ODlhMWU3OCwKKwkweDAzNDdiMzg5LCAweDM4NjFhOTVmLCAweGUwZDlkMjBmLCAweDY3ZThkNGMzLCAweDcxYzE0Zjk5LCAweDY1Y2FlY2NlLAorCTB4NWU3ZTMzNzEsIDB4NDI0ZWVjODMsIDB4Mjc3ZWE1N2UsIDB4ODY5ZmZmYjYsIDB4MGM3ZWJmYTcsIDB4MjM2OTA4NzgsCisJMHg1ZTA4MzgxZiwgMHhkYjk4YmI3MSwgMHhmOTdlZmI3ZiwgMHg4MTRjZmE0OSwgMHgyMDM5MmFmOCwgMHg4MmY2MGU3ZiwKKwkweDExNzdmZTlkLCAweDYxMjI2NTFjLCAweDJlYjdlOGRlLCAweDYzZWM4NjIyLCAweDY5Yjc3Y2EwLCAweDY2OWRmYTNjLAorCTB4NzMxN2Y0ZjgsIDB4ZTZiN2M1MmUsIDB4MDQyMjM0ZmIsIDB4OWM0NmJmNjgsIDB4ODBmZTBhYTQsIDB4MDJmNTMwZjMsCisJMHg3ODhjYWJjNiwgMHg2ZWU0OTc0OSwgMHhjNmY0YzYxMSwgMHhiYzc4ZWE0YiwgMHhhMWQxYzZiOCwgMHhiOWQxNjkwNCwKKwkweGVlNGJkY2I2LCAweDM4Njk5ZTlmLCAweGFmMzljMmE2LCAweDAyYWI0NzBhLCAweDY0NDU0ZmNlLCAweGI5ZTgwOTU0LAorCTB4ZDJhYjZkNzMsIDB4MTJhYzFlYzAsIDB4MmYxNWRmY2YsIDB4Njc2NzliN2UsIDB4NjEyNWJkNzEsIDB4OGViY2RiYjksCisJMHhiNDIwZmU3MiwgMHgxZDljYTM1ZiwgMHg4YTlmNzQ3MiwgMHgzMWI1OWZjOSwgMHhlZmRhZGIzYiwgMHhmNmMwZmIwNCwKKwkweDFmNzc2YTJkLCAweGQ2ODM3NjlmLCAweGZiYjU0ZjE3LCAweDNlMzA1NTNmLCAweDVjNTMxMTJlLCAweDdiZGZjMGM5LAorCTB4OWQ4MjYwNGEsIDB4ZDc3MmE5ZTIsIDB4N2U4ZjY4ZmIsIDB4ZGM0Njg3MjQsIDB4ZDRmZDA5N2QsIDB4OWY2ZTdlNzcsCisJMHg4ODcyN2NlOSwgMHhmMzM4YzNiNCwgMHg4ODgxZjIyNywgMHg3NDNiY2I3NiwgMHgxNWY4ZmQzZCwgMHhlNGRiOWQ5OSwKKwkweGY2N2I4MGU3LCAweGZlYmVmOTk1LCAweGRmOWI5ZTAyLCAweDg0ZTc4NTU2LCAweDhmZjdkZTNlLCAweDI0MmRmZjY4LAorCTB4ODFkMjJmMDEsIDB4MWQ4MTE2YjQsIDB4NGFkODhlNzksIDB4YzhlNzRmMDEsIDB4MzFmMWRlNmIsIDB4M2E5NWI4NzQsCisJMHgwNWVmNDA0YSwgMHg4NjNiNjYyZCwgMHhmY2E2YmZkYSwgMHg3Y2U2Y2RlMiwgMHgwNjk5OTkzOSwgMHhhMzdjYTRmYSwKKwkweGNlMDJjMjRjLCAweGIzN2Y1NGNmLCAweDE3N2VjNTVkLCAweDU4MjZmYTkzLCAweDhmZWUyNTU3LCAweDM0ODk1N2NjLAorCTB4OWFkNWVhODQsIDB4MzQ1NjdmNjcsIDB4YjQxMWMyOGYsIDB4ODhjODNmMzMsIDB4NjY0OTJjYmYsIDB4NGE2NTYwNzYsCisJMHhjMjdkODE1OCwgMHg3ZmM2ZGEwZiwgMHg4MzIwMDZmNywgMHg3MTA0ZGMzZCwgMHhmYzQ4OTIyOCwgMHhmYzVmNDgzYiwKKwkweDU2ZmMyOTVlLCAweGJhZjU4ZDc4LCAweGMzODgxYzRmLCAweGUyMTJlZTIxLCAweGRhZDYwM2VlLCAweDg2Y2Y2ZTA1LAorCTB4ZTdjMDNkMzAsIDB4YzcwNWY4NmQsIDB4NzYxNWY5MmMsIDB4MjQ1MmRlN2UsIDB4OWNmZGQwMjIsIDB4MTJkOTA4ZWEsCisJMHg4NTFmZGViMSwgMHhiYjVlZGM3OCwgMHg3MTA2OTU3ZiwgMHg3YjZhYzBmYywgMHhkZmRjNmY2YSwgMHgwZjY0OTc2OCwKKwkweGUxNTlmOTYyLCAweGY3M2M3MmQ1LCAweGYwMGI0NTIwLCAweGVmOGYyMWRlLCAweGM0MWY5YzJiLCAweDljMDE2ZjA0LAorCTB4ZGM0MGY1MjMsIDB4M2E3NWNlMWUsIDB4ZGYyMTViYmQsIDB4ZjNjMGE5ZTQsIDB4ZWYyMDc1MWYsIDB4YmM3YmJmYjQsCisJMHg5YzQxOGVkMywgMHhhMzVhNDFkYSwgMHhiYjVmZTUzYSwgMHhhMDFmYjJjZiwgMHg5MDJlZjM5OSwgMHg1MDY3ZDA0YiwKKwkweDA5YTJlNzgwLCAweDIzNWNiOWM2LCAweDdlM2NlZGNkLCAweDJlMzFmZTczLCAweDQzODE3NDhmLCAweGRmMzllZTNlLAorCTB4ZTE0NzcwZTYsIDB4Mjg5OTA5M2MsIDB4YjdmMWVkOWQsIDB4NjNkZmMwNzIsIDB4NTZmZGMzZjAsIDB4Y2FhNzdmNjgsCisJMHg3ZGYyZDdkYSwgMHg5ZWRmM2JkZCwgMHgwOTdjOWU5YywgMHhhNWY3NTQ3ZCwgMHhlYjMxYzI0MCwgMHhhZGQ0OWQ0OCwKKwkweDdkZDYxZjAwLCAweGQ3Zjk2MTI5LCAweDVkMWE5YmQ2LCAweGU2ZjQ2MzU1LCAweDU5ZjA0YTJiLCAweDI3YTYwNGZiLAorCTB4OGU4MTNlMDEsIDB4NjRkZmJiMTMsIDB4MDI3MDg3YmQsIDB4MmY0MjYxZjgsIDB4Mzg2ZDdjM2YsIDB4N2Y0OTg4NTIsCisJMHg4ZjA0YTdiZiwgMHg2YmUzODNjNSwgMHhkM2ViZWZmNywgMHhiYmUwMDlmZiwgMHhmM2ZlYjFmZiwgMHgxMWRmZjRmYSwKKwkweDY3OWFmZTBmLCAweGQxMGJlY2Y3LCAweDE3ZjJiNWY1LCAweDEwZTE3ODBmLCAweDZiNTJjN2QzLCAweGFjZWY5YzFhLAorCTB4MGJkYWIxZGUsIDB4MTQ5MWY5NzIsIDB4M2Y1ZDAyZjIsIDB4ZWY3MThiMGUsIDB4MGMzYmE2ZTcsIDB4NzBkZGQzYmUsCisJMHhmMzk2YjA4ZiwgMHhhZjlmOTlkZCwgMHgyZmY4MzZmYiwgMHg1NTkwZWY5ZiwgMHhiMmVjMGY4YywgMHgyOTk0ZWQ0NywKKwkweDMwOTZkYjZiLCAweDdmNjVkOGY5LCAweGYxOWJlNTlmLCAweDdlZGQ1M2JjLCAweDdjYThiZWIzLCAweDBkMzQ4MWZjLAorCTB4Yjg4NTU1MGYsIDB4ZmY0NTFjZmYsIDB4N2ZmYjc2YTAsIDB4YWJiYjAzNGMsIDB4ZGVhMzc0OGUsIDB4ZTMwNzdlYjMsCisJMHhmNjhjOTk3ZiwgMHhiMTI1M2NjMCwgMHgwZTcxYmQ2ZiwgMHhhNWUzOGVhYiwgMHhkZTFkNmRhZSwgMHhiYjZiYWYxMywKKwkweDlhMTMzNGY5LCAweGFkM2JmNDBlLCAweGJiNzA1NWRmLCAweDlmMzBlMWRmLCAweDQyZjAzNGRmLCAweDVmZWVjY2MyLAorCTB4MDU4M2M0ZjUsIDB4Y2ViODUzZWYsIDB4MmJjNTdmNmUsIDB4MjlmMmM3ZTQsIDB4MjNlNzdmZDMsIDB4YTVmYjFlMGIsCisJMHg3NTVjYmZkNiwgMHg2YjE4ZmQ1MiwgMHhiNGViMWI1ZiwgMHgyYmZiOWZiNiwgMHgyZDVhNTgwNywgMHgwZmUwYmQ0NywKKwkweGYxOTE2ZjU2LCAweDllZjU3YmJjLCAweDg2MWYzYjZkLCAweDc2ZGJjY2Y4LCAweDdmZGE3MGZmLCAweGRlOTc5ZWQ1LAorCTB4YWJlNjllYjgsIDB4YTY1MzkyOWUsIDB4ZTFiODY5YjMsIDB4OWY0MWEyOWUsIDB4ZjJkZmZhM2EsIDB4YThmNGJkNzEsCisJMHg0NTI1ZmE3YywgMHg3ZmNhY2QxYiwgMHg5NzRiZGM5YywgMHgyOTBlYTdhYSwgMHg3YzVmNzQ2NCwgMHg1MjFjODk0YywKKwkweDg1YjY3ZWQ4LCAweGE3Zjc5MTNlLCAweGVhYjE1ZjgxLCAweGQwMTQyZjg5LCAweDE0MWYxZjVmLCAweDFjNzY3YTQ4LAorCTB4MDk3OTZlN2MsIDB4MTNjMDYzZWQsIDB4YWJkMzkzZDIsIDB4ZjY5NjdlODcsIDB4YTgyZTk0NzUsIDB4YjJmNDJkMTcsCisJMHhhZjk4ZmJiNiwgMHhjNDJmZDAwNywgMHgzZjdmMjllMywgMHhiN2Q4NGJmOSwgMHgwZmRkOWRmOSwgMHhmMjc4YTg3OCwKKwkweDlmMzBiYzlmLCAweGUzM2Q1MmQzLCAweDRlYWQ5ZmYzLCAweDE1MjBmYjgzLCAweGM1NGQyODcyLCAweDNjNTc5NTk0LAorCTB4YmZlNDAzZmEsIDB4OTA3ZmM3YzUsIDB4ZWFjNWNlYzYsIDB4NTc1Y2ZjMTksIDB4ZDE3M2NjMDYsIDB4OWU3MDczMjMsCisJMHg3Yzg4MjRlNSwgMHg3NjMzZjE1OCwgMHg0NDgyZmNjZiwgMHgyMzhhOWY0YSwgMHhkODM5ZjcyNywgMHhhYjdhNzYzYSwKKwkweDRmMTEzNzFkLCAweGZiMDI0MmMzLCAweGUxODlhZjE4LCAweDY0MGYxODFkLCAweDYwN2YwZGU3LCAweDY1OTEzZmVjLAorCTB4NjBlMGJmOTgsIDB4MzBlNDVhZjQsIDB4YTVkMWYxZWUsIDB4Yjc3Zjk2MjQsIDB4OWQwM2I3MzcsIDB4ZDNkNTBjY2UsCisJMHg0NzVjOGUyMSwgMHg4N2M3MTBhNCwgMHgyYmY2OTE3MCwgMHhjZTlhOWYxZSwgMHg1MjY4MWRjZiwgMHhlYThlZmYxMSwKKwkweDBlNTAyOWZmLCAweGRkNjVkYmVkLCAweDhlZmE2MDU5LCAweDFkZWVjYzVjLCAweDNlM2U0ZWZmLCAweGVjMDEzYjg1LAorCTB4ZDQ2OWQzZDcsIDB4YmYzMzhjMWUsIDB4OWQ2MzBlMDMsIDB4MGM1Njc2YTYsIDB4M2JjOGM1OWYsIDB4NmJlZGZmOTMsCisJMHhmMjFiYmM5OCwgMHgwYTUxOWUxZiwgMHg2MDlkOWZmNSwgMHg4MWRmMDQ3MiwgMHg4YWUxNDJmZCwgMHhhMWZkNjNhNiwKKwkweDA3ZWEwMmQ5LCAweDkzYzY4OTNiLCAweDk3MzJlZGYzLCAweDk1YmQ3MzczLCAweDEyZmMyODVmLCAweDdjM2RjN2FjLAorCTB4MjMyNGUzMDMsIDB4MmRiZWQwMWQsIDB4OGZiZjQ4ZGYsIDB4YWUzMGFiZDUsIDB4ODZiZjZmYjcsIDB4ZmFlNjJmMWMsCisJMHgxZjQ1YWQ2MCwgMHgwNzUyNDc5MCwgMHgyZDViN2ZiNCwgMHgwYzNlNzc4NywgMHgzNWU1NGJmMiwgMHhjYWZjODFhNCwKKwkweDI3YzE1ZWY4LCAweGYxYmM4ZmJiLCAweDlmYjcyYTNkLCAweDM1YjkwYzQ0LCAweGRjYWI1NWViLCAweDQwOWRlYzU2LAorCTB4MjdlZGM5ZTIsIDB4MmI4OTNmNmUsIDB4YWUzY2I0YjcsIDB4OTAzYmJhZGMsIDB4N2FkNmZmOWYsIDB4ZDNlM2MwZDUsCisJMHg3YTFhM2MxNiwgMHg1YTdjM2ZiMiwgMHgxZGI3ZTRmNSwgMHg0OTNkNWM1YSwgMHg0NTIwOWRmZiwgMHhlMGQxZjk3ZCwKKwkweDJhZmY4MzQzLCAweGNmMDZhNWZmLCAweGE5ZjBmNTBiLCAweDdjM2Q4N2MxLCAweDlmNjFmMDZhLCAweDhmMDlhNDc4LAorCTB4ZTFiYmZhZDYsIDB4YzA4NTNhNmYsIDB4Y2ZjNjMyNzMsIDB4ZmRiMDBmYWIsIDB4ZDFkZGZhNjcsIDB4MmY4ODg1MjEsCisJMHhkMjM5OTcxZCwgMHg0YTQ4NzQ3YSwgMHhjOTZjM2U2YywgMHg3NWVkMmM0NywgMHg2OTYwM2U0YiwgMHhlYmU0YjQxZiwKKwkweGY3YWJlZDRkLCAweGI5ZDg1MTFmLCAweDlkYTlhODllLCAweGU0YTdmY2I4LCAweDAxZjEzODgzLCAweDZiYWExZDYzLAorCTB4MDEwOTU0ZmIsIDB4ZjFiYmI4N2YsIDB4MDkyNTc5N2IsIDB4ZmU1ZTIwNzksIDB4ZjJmMTg4YmMsIDB4MjZlMzhhMmUsCisJMHhlZWQ3NGUzYSwgMHg2MDhmN2M2YywgMHg1N2M1OTNiNSwgMHgyZjZlZDRiYSwgMHg5M2FiOTNkOCwgMHg1NTNiYmU1OCwKKwkweDY4M2QwMjY5LCAweDU5M2I3Nzk0LCAweGQwMmJhZmRjLCAweGIxOGE0ZGVkLCAweDIwM2ZkZWVmLCAweDA4ZWYxZWEyLAorCTB4N2U3OGQyOTMsIDB4YTE0MGRlMjgsIDB4ZmQyMGVkZjgsIDB4ODBmZGIzZDUsIDB4NjFkN2IwMmUsIDB4MzBhYzg0YmMsCisJMHhkMTU0ZTNmMCwgMHhlMjFjYjU5ZCwgMHhkZTIyYWQzNSwgMHhlMmI4NWI2YiwgMHgyMzljMmYxNiwgMHhmYjkwM2FlOSwKKwkweGJlNWEzMjlkLCAweGRiMjJkN2U4LCAweDUyZTkwY2E2LCAweGY4MWY4YzQ2LCAweDlhNmQwOTExLCAweGY1ZmVjMDI0LAorCTB4MDU5ZmU0N2EsIDB4Yjg1Zjk4MDcsIDB4Nzk3YzdkNzAsIDB4OTVkZmU0YTgsIDB4NDA1NGVmYmIsIDB4ZWU3ZjUyZWYsCisJMHg4N2JlZWM2NCwgMHgyM2M1NGZkMSwgMHhmZjAzZjI5NiwgMHgxNWE2ZTVjOCwgMHhkYjk1MWZlMywgMHgxZTQxZjVjZCwKKwkweGU0ZWMxODNmLCAweDkyYzdiZWU3LCAweGI3N2ZkY2IxLCAweDllMGZkZWM1LCAweGE3N2ZlNjJhLCAweGViYTdkMjhjLAorCTB4M2NlMDQ4OTgsIDB4MjIwM2Y5YzEsIDB4NmVmY2U3ZDIsIDB4ZTMwMDdlNzYsIDB4YmYwMWQ3ZmMsIDB4ZTdiMTJiNzcsCisJMHg3YzgyY2VhOSwgMHgxZWJmZDU1ZCwgMHhlZmNjZmIzYiwgMHgzZTA2ZWU4YiwgMHhjMTRlZjdkYSwgMHg3NjdhNjk0ZiwKKwkweDdlMjNkYmRmLCAweGRmNjdmOTA1LCAweGY0ODc3YWNjLCAweGEwZTUzZjZkLCAweGJhNTVmNzEzLCAweGZmOTA3YTBlLAorCTB4NGRmZjllYmIsIDB4N2Y5MGRkZDYsIDB4ZWNmMThlY2UsIDB4MTQ1ZjgzYWUsIDB4YWQ3NTNmMDAsIDB4MWU4MDU3YjQsCisJMHhlZmU3ZTJlYywgMHg0NWZmM2Q1NiwgMHhiZmFlMDc0MSwgMHhhOWM3NDg4ZCwgMHg5ZjRmZTY0ZSwgMHhlZjVmZjAzZiwKKwkweGYzODFmZGMxLCAweGMwYWNlODA3LCAweDQyZTgzOGJlLCAweGE1ZmJhYWY5LCAweDVkNmZlMzEzLCAweDE0NTE3ZmNmLAorCTB4YTVmYzI3ZWIsIDB4ZmJlNWE5ZjMsIDB4NTIxZTVkOWQsIDB4NGJlMDE3YjYsIDB4NzU0NGZiNjIsIDB4MWI2ZWJhYmYsCisJMHhkMzUxMmZiYywgMHg0MDU5NDg3NiwgMHhmMGJjYTdlYiwgMHhhZmQwMDJhNywgMHhkZDk5N2I1ZCwgMHgzYzc3MjlkNCwKKwkweDgxNzlmYjBhLCAweGNhMzQwZjM1LCAweDIwOWQ1ZTk0LCAweGZmNjk4MzY0LCAweDAxMjhkZTZiLCAweDk3OGJlYTM5LAorCTB4NzE1YzYxM2YsIDB4ZmM1OGY4YTAsIDB4MDQzZTBkN2YsIDB4NGYzZmU5OWQsIDB4Mjk4NTRjMTgsIDB4ZGVmOGZmMDcsCisJMHgwZTI3YTAzYiwgMHg4ZDJmOTFkYSwgMHg1OTEyN2VmOSwgMHhlNWNjZjY4MSwgMHhmZmY0ZGRlNiwgMHhlODg1YmNkYywKKwkweDAzYmRlNjQwLCAweGVmZTEzZGU2LCAweGMwZDdkZTc3LCAweGJlZDRhMWExLCAweGNmOTdkMDcyLCAweGYzMGJiZjlmLAorCTB4ODQ3ZTNjN2IsIDB4ZmVmYzgwNzcsIDB4ZmNmOWRmZDIsIDB4N2JlZTk4YWYsIDB4OTdiZGRkMjksIDB4N2Y4N2Y3OWYsCisJMHg5ZmVlZjNlNywgMHhjYjllYmZlZSwgMHg3OWMyYWVlOSwgMHhmZTE3YmE5OCwgMHhhOTVkZjA4NCwgMHhmZTEyOTM5ZSwKKwkweGJmYmRlNWJlLCAweGZlZjYxYmY5LCAweDM1YmY5YjVhLCAweDkzY2YxYjI3LCAweDcwYjBjMDNhLCAweDQwYjY2NjdiLAorCTB4YzhlZDcxNzgsIDB4OWRkODJhOTksIDB4ZDVlZjNmNjIsIDB4N2U2MDQ4NGMsIDB4ZjdiMDI4OTUsIDB4MTY1MGM4MjEsCisJMHhjZmRjMjQwZiwgMHhmODBkNjM4MiwgMHhkZDliODgwZSwgMHg0ZGRjOTMzYiwgMHhjOTEzNzc2OCwgMHhiYzUzYWVkZiwKKwkweGJlN2FiZGFjLCAweDkxMWFjZjFmLCAweDIxMDU2ZjcxLCAweDhmYzkzOTlmLCAweGJmOGI2ZWYxLCAweDVkMTAyOGQ5LAorCTB4NzRhZWY2YTAsIDB4ODE4ZjM3ZjUsIDB4YjQ4ZjIzZGYsIDB4OTgwNWVkNDUsIDB4MzM2OTBmYmUsIDB4YWFjYTYzOGYsCisJMHhkYzg3ZjI2MiwgMHg1M2JjZTZmOSwgMHhiY2VkZTczMywgMHhmMDYxMDczZiwgMHgwYzI0N2MzYiwgMHhkNDcxNmNmMSwKKwkweGQzY2UxNTYxLCAweDAyMjU2Mzg5LCAweDQ5MzhhNTRmLCAweDBlZmMwODZiLCAweDdkZmNjZmJiLCAweDdlZTEwMjUyLAorCTB4Yzc4NjVmZWYsIDB4YTcxNjA0OGEsIDB4ZWQ3MTg1MTIsIDB4OTQ3MWUwM2EsIDB4NzhkY2UzMGQsIDB4ZTJmMTFiNDgsCisJMHgwOGJhZjdjNywgMHhmMTdiYWZmNywgMHhmODBlZDRkYSwgMHg2NjNmYzA5NCwgMHhkNWZhMTdmNiwgMHgxMmQzZmI4NCwKKwkweDY5MWE0MmVmLCAweDc2ZTY5ZGQzLCAweDJjYmU4ZmRjLCAweGIyNWQxODlkLCAweDk2OWQzOWFhLCAweGQwNjJlODk5LAorCTB4NGM3ZDBlMjEsIDB4N2NmMDMxNzQsIDB4ZDJiMWY0YTUsIDB4ZWJmZjhhYzUsIDB4Zjc1ZjE4MTMsIDB4MmU4MzJmNDcsCisJMHhlZjFkNmU5OSwgMHg3ZmRjYzlkNywgMHgxMzNmMDEyOCwgMHg4MjAxOTlmMiwgMHg3ZmRjYWJmYiwgMHhiYzc0NTI5MCwKKwkweDdlYWEyNGE3LCAweDdlMDA5N2JjLCAweGUwMWE5NDVjLCAweDg2ZGVlZjJmLCAweDNmNzNhNGYxLCAweDAwZGJmZjdmLAorCTB4NDRhZmQ1NGYsIDB4ZWJmOGEwZTIsIDB4NTEyMWVkZGMsIDB4MmIwYTVlZjgsIDB4YjY1NjlmZTAsIDB4NDA0ZmI4ODksCisJMHhhY2QxNjhhNCwgMHhjMzYyN2Q5OCwgMHg4NWZhYTgwZiwgMHhiOTUzZTcwNywgMHg0ZTllMWVkNywgMHhmN2RjYWZiZiwKKwkweDYxZGEwMTQxLCAweGNmZDFiYjJiLCAweDYwNWNmZDA5LCAweDE0NzUwZjc0LCAweGE1NzAzZWMwLCAweDJiMTFmY2M0LAorCTB4NjA0OWFjYmYsIDB4Y2ZiMzk2ZjEsIDB4YWUyMGNhYjksIDB4ZTc2MmVjMjMsIDB4YjcyMzJiN2YsIDB4NzM5OGY2YzgsCisJMHg5OTA0YTE0ZCwgMHg3MzllOWJjNSwgMHgzZDA4NWVhMSwgMHgyOGY5ZTAyMSwgMHhkY2Y2MmY4MCwgMHg5Yzg3ZTFhOSwKKwkweGYwNjA0MjdkLCAweDlkZjE5N2VkLCAweDRmNWRjYTk4LCAweGFhN2M0Mjc1LCAweDFmYmIyZGYyLCAweDVkYmFmOGNjLAorCTB4Yzg3ZWUyOWYsIDB4ZjFlYzVmOTQsIDB4MmUxZmEwNzYsIDB4N2QxMmUyOWEsIDB4NDRiYjAxZTIsIDB4YjZkYThmZTQsCisJMHg2ODQzZjQxYSwgMHgzNmEyZjkxZSwgMHgyYmVmZmRjMiwgMHg3ZWFiNTdmNCwgMHhiODNlZmNmMSwgMHhmNGY1NTY3MCwKKwkweDdmODg1ZWUzLCAweGUxZGY2OTlkLCAweGFlYzBiOGM1LCAweGZhZTdjNzRiLCAweDM1OTFmZmY4LCAweGQ2ZmZmZmRjLAorCTB4M2I0Zjc2NjksIDB4MDY3ZmZmYmUsIDB4ZjE3NmEwZmUsIDB4ZmI5NjA5ZDMsIDB4YjEwNmJiYWIsIDB4YjQ0OTE0ZjcsCisJMHg3MWVmNTJlOCwgMHhmMGI5ZWQ1NSwgMHhjZmFmYzQyOCwgMHg1MWU0ZmRlZSwgMHhjZmZhYmI4MCwgMHhmYzE0Nzg3ZiwKKwkweGE5ZDA3MjBhLCAweGJhODI3ZGMyLCAweGYxOGViZjlmLCAweGRmYmJlMzNlLCAweGY5ZDAzZDcwLCAweDJmMThlM2M0LAorCTB4ZmE5YjdjZWQsIDB4ZTc1ZmY0MWYsIDB4YzBiM2E3ZjMsIDB4ZWE3Y2VjY2YsIDB4NGYxMDY5OGYsIDB4YTlmOWYzYjksCisJMHg5ZGNlNmVmOCwgMHgyNzQ5NGNjZiwgMHg5MTg5ZjQ3MSwgMHgwNzg2ZmYwMiwgMHhkMmI1YWYxMCwgMHgxMWRiNDhlZCwKKwkweDUxY2U3ZmY0LCAweGQ5ZmY4M2JhLCAweGQ0ODlkNzEzLCAweGM2OTk3OGIwLCAweGUzYmIzOWUzLCAweGM0ZmJjN2M3LAorCTB4N2Q2NmRhNmYsIDB4NDg0MmM2ZTcsIDB4MDY0NmJmNjUsIDB4NDEzOWM3MTAsIDB4MDA2NjM5ZTksIDB4ZTNjZGRjNzQsCisJMHg1ZDZmOTE3NSwgMHgwZTczOGUzMiwgMHgzYWY0YTBmZSwgMHg4NWUzYTE2YiwgMHgzZDhmNDViNiwgMHg4MzZkNzUwYywKKwkweDQ0ZTM4ZGZhLCAweDIzM2Y4MDA3LCAweDQxM2ZiZWZlLCAweGU0MDEyMmZmLCAweDYwYmZlZjY4LCAweDM3ZTgwY2ZjLAorCTB4NzNiODRlOWQsIDB4ZDgyYzg1Y2YsIDB4ZWU0OGY4YmYsIDB4ODVlZjhiOWUsIDB4MjE1NzZmM2MsIDB4ZmNmOTUxMWUsCisJMHg5ZDRmMjg5YiwgMHhmOGM3MWNjZiwgMHhmMDcxZTEzNiwgMHg4ZmYzZDI0ZSwgMHg5OWY5MmJjNSwgMHgxZWVkYmFjYywKKwkweDc0ZTFmZjE2LCAweGU2OTBmODgwLCAweDA3MWU3MmM1LCAweGM0NmQ3YzYyLCAweDBiOGJmYTg3LCAweDczYjE3MThkLAorCTB4NDBiZWM2MjcsIDB4Nzg3N2Y2Y2QsIDB4NmU5N2E1YmMsIDB4ZDdhMDQ0YzIsIDB4Y2ZkYzk3ZmIsIDB4MDJhMGYwMzAsCisJMHg4ZDhkYWUxZSwgMHhjMzhmYzY3YiwgMHgyZDNkYzRmNSwgMHg0MjdhMDM3NCwgMHhhZTI3YjNiYywgMHg3YjEzZDg0OSwKKwkweGNkZTE2MTc1LCAweGNlZjQ3MTc4LCAweGRhNWUyYzJkLCAweDhmM2ZjNzI5LCAweGFmNDFjNDY1LCAweDlmZTI1OTc2LAorCTB4M2ZjNTgxZTEsIDB4MmI4ZjM3MmYsIDB4OTc2MGQzYzUsIDB4ZjE1YWZkODYsIDB4ZjhhYmY2NzUsIDB4YWU1YmZkZmEsCisJMHhlODVmOWQ4MSwgMHhkYWFkN2Y3NywgMHgzZGU2MWY3YywgMHgwNWRkMzgyNSwgMHhlZjZkNmJmYiwgMHhhN2NmMDQyYiwKKwkweDJiNzNiMzc0LCAweGY5NjdiZTdjLCAweDNmYjNkM2Y5LCAweGQ2MmUzMTE3LCAweGZhODIzOTE0LCAweDhjM2ZhYWRkLAorCTB4YmMyYjU3ZmQsIDB4NmI3ODcwNzcsIDB4ZTNmNWIzZjcsIDB4ZDg0ZjVlZWMsIDB4N2IzOWZiNGQsIDB4ZWJlNDM5ZjgsCisJMHg2M2VmZGRkYSwgMHhhZWU4ZWU1YywgMHg5ODhlOTVhNywgMHg4ZmQ2MTZmNSwgMHhjZTdjY2M3MCwgMHg4MGE4NzkzZSwKKwkweGRmZTM3OWM1LCAweDMxNzFhYjFiLCAweDQwZWViMzdiLCAweDc2ZWE3MWZjLCAweGE3MWE2YTdmLCAweDk4NTExNDJhLAorCTB4ZjFlOTcwMWQsIDB4MmRmYTQ4Y2UsIDB4NzY5OWRmZDAsIDB4M2E0ZGRmMTksIDB4YmVlMzExMTMsIDB4Yzk3MDFjMTcsCisJMHg5NWExMWY3YywgMHg0NzVkMGZjOSwgMHg3MWMwOWVmMSwgMHhmMGE3N2Y3NiwgMHg1NzNjMDRiNSwgMHhkMmYxZTc3ZiwKKwkweGI3ZmRlMDc3LCAweDgzNThhOTNiLCAweDgyYjZkZmRkLCAweDRmZGI2OWYxLCAweGVmNDAyMWY0LCAweDEzZGZlM2I2LAorCTB4MDdkYWZkNjEsIDB4ZmZiMThkZjgsIDB4NGZkNDRlOGIsIDB4NTBmZDUwZjEsIDB4MTBhMDZlZjQsIDB4NzdhYWQ1ZDgsCisJMHg2NmNiN2RhZSwgMHg5MzhlOWY4MiwgMHgyMzQyZWIwZSwgMHg4M2VlMDdlZCwgMHhiYzM5YjljMCwgMHg1NjlkZWU1NywKKwkweGFhODhmMDBhLCAweDdkMGE3NTRkLCAweGY5YmIyMWU3LCAweGFmZGU1NTdkLCAweDIxZWY5YWFjLCAweDZiYzZhZjkwLAorCTB4MjY2ZjhmZDAsIDB4Y2M2NjRiOGIsIDB4OWYxNjUyMzIsIDB4ODdmNzE5MGMsIDB4YWJjMjEzY2EsIDB4YWY3ZjdjZTgsCisJMHgyOGJiMzcwNiwgMHg4ZDllN2M1ZSwgMHg3ODExMmZkOSwgMHgwNmEyNmEyNywgMHgyZTYzZDNmNiwgMHg0YmMxZGU3ZSwKKwkweDgzYmNlY2JjLCAweDdhYTM2NDNiLCAweGY2ZmY2MWZkLCAweDllMDg5MzBkLCAweDdjMDZkODY3LCAweDgxOWU3M2Q5LAorCTB4MmY4MDBiNDQsIDB4ZWE3ZDc2OGQsIDB4MzIxZGU3MmQsIDB4NWEyYTEzZTEsIDB4MTczMzg3MjIsIDB4ZmQ1MDI1ZWUsCisJMHg3Nzg2NmFiMiwgMHhmMTFmZTQyYiwgMHhiMmNkZjdiMCwgMHgzODIxZjc0OCwgMHhkYjhkYjBkZiwgMHgxNTYwZDlhMywKKwkweGU3N2RmNmU3LCAweDZmYmVlYmVjLCAweDc4YTUzMjk2LCAweDg1M2YzMGU5LCAweDUzNWZmNWQzLCAweGNhN2M1Y2UxLAorCTB4MGQ0ZmM1MmQsIDB4MmQ4NTY5NTEsIDB4YTNkYzFhNjMsIDB4NzhiYzc5NDksIDB4Y2ZjZDA2NmMsIDB4MzRmNGZmNWYsCisJMHhlMmY3ZmZhYywgMHhmZjM0NTliMSwgMHhiMjBlN2I5MywgMHhjZjAxMmFmYSwgMHhhZWIwYmVjMSwgMHhlZmYwMWE3NiwKKwkweGQ5ZmI5NmQ3LCAweGI5NjYzMzE0LCAweDc3ZjAwNTdmLCAweDc3ZWVmMDJlLCAweGFlNzA2OTE3LCAweGVmZTE1YmEyLAorCTB4ZGRhMDA0NjUsIDB4N2YwYzg5ZDAsIDB4OWY3N2VlOTksIDB4OTg2NTdmMDIsIDB4ZjAwNTYzYWQsIDB4N2ZjZjYzZWIsCisJMHgxNmY3ODQ5MSwgMHgyYWExZmJmOSwgMHhkY2UxNTQ2OSwgMHg3ODlhMmQxNSwgMHhmM2U3MTJmMSwgMHhjY2ZiYmNmYSwKKwkweDQ5OGRjYmY1LCAweDNmODE3N2MxLCAweGJjOGRlNzlhLCAweGVmMWQxYTZmLCAweDBlNzE4YWUxLCAweGYyZDAwZTc2LAorCTB4ODI5YWEzNGUsIDB4ZTljODVkNzQsIDB4Y2IzZGY4NGEsIDB4OGIzZTdjNDUsIDB4MDJjMjkwYzUsIDB4N2Y1Y2FkZGYsCisJMHg1NzUxZWYxOSwgMHgxZWY0NTc4YiwgMHhkYmFiODczNSwgMHg2N2ZiZWZkNSwgMHgzMzc4MDA3ZiwgMHgwMDdmODI5MywKKwkweDNmZGY1OWZjLCAweGI4MTVjNTdiLCAweGU1MTlmNTAwLCAweDVjN2RlMjVmLCAweGViMzMzZGUzLCAweGVhNDQ2OGJiLAorCTB4ZmIzZWZiOGUsIDB4NWEyZWZlNTYsIDB4OWJmZWYwN2YsIDB4NjliYTI4M2IsIDB4NjgyZjM5ZmYsIDB4Mzk1MThmN2IsCisJMHhmMTUwYjMxYiwgMHgzMWNmZDFjMywgMHhkMmZkMGJjYiwgMHgwNDI2YzIyMCwgMHgxZmE3MTA3NiwgMHhmNzg4Y2YzYywKKwkweGI4MjJlZTFmLCAweDE3NjVkYjVmLCAweGJiYWZmMDc0LCAweDdkNDU0OWZlLCAweDNhNzBiOTllLCAweGFlNWQ1ZmZhLAorCTB4MzM5YzA4ZWMsIDB4YzM1YmJhZWEsIDB4MDE4YTNkN2QsIDB4ZTg2OWU0MDEsIDB4ZjgyOGM0ODEsIDB4M2UxZTU0ODcsCisJMHhlN2MzYzhiNywgMHg4ZjM3ZmU2NiwgMHhkYjUxNzVkYiwgMHhhOWZkODFkZiwgMHhhMDZhM2ZiYywgMHhlZDhiZGNjNSwKKwkweGVlOWU5OTEyLCAweDhlMTBkMDZhLCAweDA4NzQyNGExLCAweDhlODFmZGQ2LCAweGViZTZlMzk3LCAweDQ2Y2ZhNzM3LAorCTB4OWVlYjllOWIsIDB4ZWUxZmY4ODAsIDB4MjhmZmMxOGUsIDB4Y2M3NGJmNzcsIDB4ZTYzYTMzNzcsIDB4ZDFkMGUzYmIsCisJMHg3YmRkNmVmYSwgMHg2ODU4ZTBhZSwgMHgyOGZjYmE3NywgMHg3ZDY3NWZiZSwgMHhkZjRhY2VhZiwgMHgyMWY1YTkzYSwKKwkweGVkMmIzYjc4LCAweGZlYjhhN2MwLCAweGIzMWJmNDE4LCAweDI5ZDIyYzdjLCAweDAwOTM5ZTg2LCAweDNlMDczMThlLAorCTB4MDZiYzAxYjUsIDB4ZTdlYzFmMWQsIDB4OWJhOTc5M2MsIDB4ZjFkNjczYWQsIDB4MDYzYWNhZDIsIDB4OWZiNGUzMDcsCisJMHhmNzRjZDZlNSwgMHg0NTFjMGEwZSwgMHg2OWNhODk3ZSwgMHg4N2M1OGRiYSwgMHhiN2VmYjZmYSwgMHg5ZDRiOWNmZiwKKwkweDU5NTAyY2YzLCAweDczZmYxNGJmLCAweGZlMDY0ZjAwLCAweGZiZjM3NTZmLCAweDdmZjE3ZGVhLCAweGY4YTNiNDNiLAorCTB4M2ZlNjFkYmYsIDB4YmJjZmZjMDAsIDB4ZmIwZGZlMTQsIDB4ODdlYjhhYmYsIDB4YTI5ZmQ4MmEsIDB4ZGExZmY0N2MsCisJMHgzYTFjYjRjYywgMHg4ZGQxMzRlZSwgMHg4NzY0YjA3MiwgMHhkOTMxZjdjOCwgMHgzZTg2NWZmYiwgMHhmZDVkNzI1OSwKKwkweGI5MTdiODIxLCAweGYyMDI2N2U0LCAweGZlZmU0MmViLCAweGZkZmMyN2U1LCAweGMxYjllYjRiLCAweGVhMTBiMmYyLAorCTB4MWY5ZmNiY2IsIDB4YWEzZWEzMGMsIDB4ZmYyZTY1ZGEsIDB4YmJjZjc3NjcsIDB4ZGU3ODU5OTcsIDB4YWQzNTI0MTcsCisJMHgyYjRlYmRmNywgMHhiOWJiY2ZmZSwgMHhiNGU4NThkZSwgMHhkNzJmN2JjNSwgMHhkYmQ2ODc0OCwgMHgzM2NjZTc0YywKKwkweDgzZjRmNGE2LCAweGE2Y2ZhMGZlLCAweGI4ZjE4OWJkLCAweGM0MDk5NTdmLCAweGE1Mjk3NDEzLCAweDIwMTlkZTEwLAorCTB4ZjQwOTQyODUsIDB4ZDdlNWNjNWIsIDB4NzJkODZmZTgsIDB4MWQ5ZmZhZjMsIDB4Y2M0M2RmMzIsIDB4NDNkZjMxNmQsCisJMHhiZTZhZGUxYywgMHg2NmQ1Nzg4NywgMHg1MWM0M2RmMywgMHhjNDNkZjM2MSwgMHgzMzhkNzY2YiwgMHhhZTQ3NDdlNSwKKwkweGIzMWZiNTM3LCAweDNmMjliMjdmLCAweDUzNGRmYTM2LCAweDY2YzdmMWZiLCAweGRhMTNmMjlhLCAweDdmNmE2N2JmLAorCTB4NGRmMzViZWQsIDB4NTQ3NWQ3ZjUsIDB4Zjg2ZmVhOWEsIDB4N2YyOTk5NjgsIDB4OWIzZmY3NjMsIDB4MzExNzQ3ZGEsCisJMHg2MWI4NzhmZCwgMHg1YmRjMTE3OSwgMHg3ODcyZjAzMCwgMHhhMTUzNjJhOSwgMHg5YjA4ZTk3YywgMHg5ZTViMTA1YSwKKwkweDkwMDU2YmE2LCAweDdmZTBlOTE2LCAweDUzMmYyN2Y1LCAweDhhMmEzZjFjLCAweDg5OGJhNzVkLCAweDUzNmZkMjZjLAorCTB4ZDQ3Y2U2MWMsIDB4OGY3ZGZlNmQsIDB4MzU3MjJjOTcsIDB4Y2I1MjdlYTQsIDB4YmMxZDlhMDgsIDB4NjNjZjBmMjQsCisJMHhjNjNhZjk1MywgMHgwMWIxZGJmNSwgMHhhMGRmYjdlYSwgMHg5YjQ2ZDU3YywgMHgyZjk1NmYyMCwgMHg5YTAxYmRlMywKKwkweGFkOGZkODg2LCAweDFmOWY3N2IwLCAweGQ0Zjk5YTcyLCAweGY5NWU4ZmQ3LCAweDA3MzhkYjlkLCAweDUzZmFjYWQ0LAorCTB4MjY0YmM2Y2IsIDB4M2ZjYTMxMzksIDB4MTcyZDhjMmEsIDB4NzNjNzRmMTYsIDB4YWJmNWZkNDAsIDB4YjM1YzE2ZjgsCisJMHgzYmJjMTA3ZCwgMHhhMzUzMGYzYywgMHgxNmNjYTliYywgMHg2N2RmZGNmNywgMHg3ZmQwYmZlZSwgMHg4ZWM3ZGNkYSwKKwkweDdjZjAwY2ZhLCAweDI2ZGFmN2NlLCAweDdiNTZiZjM4LCAweDUxZmEzNzdiLCAweDVlMzM3NjE5LCAweDVkZWNmMzdhLAorCTB4NDc5ZTAzNjMsIDB4YWMzZTQ4MWEsIDB4YjZmZGM2ZjcsIDB4ZWJlMTM0NDUsIDB4ZDE3N2NlMzYsIDB4ZTBkMzMzZGIsCisJMHgzZjY2NDE5YywgMHg4N2ExNTVmZSwgMHgxYjQ3ZWJlOSwgMHgwNDJjZDc0MiwgMHhlOTg3MTFjMiwgMHhiNDU2Nzk1ZSwKKwkweDM5ZjgxYTZlLCAweGViNzlmOGMzLCAweGU3ZjhiNjRkLCAweDBjM2M5MmEwLCAweDQ4YTBlOTJmLCAweGRkNTA1ZWMxLAorCTB4MmI5YzJmNjgsIDB4NGYwYmQ3N2YsIDB4MGY2OGRjYzcsIDB4MzhlODc5MjYsIDB4MTdiNGM3ZjMsIDB4YmFkNGZiYjEsCisJMHg1ZWU4ZTY3ZiwgMHg5NDdkMGRiOCwgMHgwMjZjMGVlNSwgMHg5M2U1OTJmZCwgMHgxN2RkOTY4OCwgMHg4M2RiZjQ5ZSwKKwkweDc4OGVmMDJkLCAweGVmY2RiMjYzLCAweDAwYjc3Y2M2LCAweDRjN2ZkOWUzLCAweDVlM2EyMGM4LCAweDg0NDU5ZmUzLAorCTB4NzVmMGYxYWYsIDB4ZWVjODNlNzgsIDB4YWJiOGM3YWUsIDB4Y2ZjMjRmMzEsIDB4ZTY3MTE4MDksIDB4ODlkOWJlMGIsCisJMHhhYmM2Y2Y4MCwgMHhlMTA3ZWU3YiwgMHhkYzE3OTA3YiwgMHhmN2U4NzZjMSwgMHhjNzE5NDZjMiwgMHg5ODJjOWM2ZCwKKwkweDRiNzk4ZGVhLCAweGY3OGRiZjliLCAweDZjZGNiMmJlLCAweGRlNzRlNWRlLCAweDkzM2RiNzAwLCAweGE4ZjhkNWMxLAorCTB4YWUxMTMyNDAsIDB4MjhmNGJkZmYsIDB4NWNmYjM1ZjgsIDB4YzUwN2RlZjgsIDB4YzdjMDEwYzcsIDB4NzNmYjNkMzksCisJMHgzYTc5MzE5YiwgMHhlZTQxOWFhZiwgMHg5ZWQxNmJhZCwgMHg0ZWE3ZWY4OSwgMHg4ZmExZTYzNywgMHhlMzNiZDEzNCwKKwkweGUyZmMzMzJhLCAweGM2ZmQxOTQ2LCAweDNjNmU0OTQ1LCAweDg4NmUxMGVmLCAweGU3OWFmYTcyLCAweGY5OWJlNGRmLAorCTB4NWMyOTViOWQsIDB4Zjg4ODRlYWIsIDB4ZDFkNmI2ZGUsIDB4ZmQyOGY0YmEsIDB4ZTVjZGJjYWUsIDB4ZjE3ZDZiMGYsCisJMHhmMDYzNGU3ZiwgMHg3YmE3Zjg1MiwgMHg0ZjM2ZGU0MCwgMHg3OWUzZjljMywgMHgzMWZmODA2YSwgMHgwZDljM2M4MSwKKwkweDQ1MmMxN2ZjLCAweDIzNmMxODNlLCAweGM3ZDM2ZmIwLCAweDc5MzBmMDRlLCAweGQ5NTFlZDllLCAweDcyYmUzNTdiLAorCTB4ODViZTg3MjYsIDB4ZmRhNzZjZDcsIDB4NWRmYTc5OTUsIDB4YjBmMzZmZjcsIDB4NGYzNmZmNzUsIDB4NzJmZjc1OWMsCisJMHg5NzU3MDdlZiwgMHg1NDg1MWZiNSwgMHgzN2I0NDVkNCwgMHgxMTFmYTkwOCwgMHgzZDUzNDc2YiwgMHgxYmZkMGU1NiwKKwkweGM3ZjEzMTc5LCAweGZmNmZkMDA1LCAweDY1YmY5YTc2LCAweGVkZTVmNjQ0LCAweDgwY2ZiMDM0LCAweGVjZmIwZDBmLAorCTB4YWVkOThmNGUsIDB4M2ZiYmQxOGMsIDB4ZmJiZDMwZjQsIDB4ZjRjMGNmNDMsIDB4ZmRhMThmZWUsIDB4ZTM0NWVmZTksCisJMHg0YWE5MzVkYSwgMHhiNGY3YmQ3YywgMHhhYzFmZGQ4NywgMHhlNzgyMTU1MywgMHgwZmQ5ZmIwMywgMHhkYWU1YzlkOCwKKwkweGQ2ZmVlZjNhLCAweDFmZjljYmE1LCAweDRmODMyZTM5LCAweGZjZmVmYWNkLCAweGY0MTEyZDMxLCAweDQyMDdjYTU0LAorCTB4ODZiNzc3ZGMsIDB4M2M2ZGJmMmMsIDB4YWQ5YjZiZDAsIDB4ZjdjYzMzNzgsIDB4NzhmZTE2NjcsIDB4ZjU5ZjRkNjgsCisJMHgxOGYxY2MyYiwgMHg2YWM3OGI4ZSwgMHgwOTliNDc4YSwgMHg5NzNjM2I4ZiwgMHhiNmJmMGZiMCwgMHhkZjMwYWZiZSwKKwkweGY4ZTRlOWYzLCAweDA5YmY3YWE2LCAweGViMzczYmM2LCAweDZiODgyMmJkLCAweDFjZjljZWQ0LCAweDFlZDdmZWY1LAorCTB4YWViY2NjYTcsIDB4MWQzOTdlMTgsIDB4YTFlMDA1NjcsIDB4Nzk5ZmQ2NzMsIDB4ZTMwM2FlN2MsIDB4Yjk5ZWFiNGEsCisJMHg1OGUyMTEyYSwgMHg3YTBkOTMzNSwgMHhhYTdkZjA0NCwgMHg0ODM5ZjlmMywgMHhlY2ZiNzM5NywgMHgyZTc5YzAzYSwKKwkweDNkMTM5ZDk5LCAweGEzZGFlZmI3LCAweGE0ZjhmNzEwLCAweDJjNzI1OGUxLCAweDc5M2RjZjdkLCAweGZkYTY0OGJjLAorCTB4YmM3YmRiOWQsIDB4NzcwM2MyNDgsIDB4ZDQzYmQzNjEsIDB4NWI3ZjE3MzUsIDB4ZGVmNzcwMTQsIDB4MzdlMWU4NGIsCisJMHgzNjhmNWIwNywgMHhlNTdjNTkzYSwgMHgzNzE3Mzg0MSwgMHg2YWJmZGE4NiwgMHg3YTY1ZjIxMiwgMHgyODVlZWQ5YSwKKwkweDFkYmYxZDE3LCAweDM5NWMyMWZjLCAweGE2MmZlNjNmLCAweGQwNGFiMjU5LCAweDdlYzExNjMzLCAweGVlMzczY2QzLAorCTB4Yzk3MmY5NjcsIDB4OWRmYTZjYzgsIDB4ZTM4N2FkMTIsIDB4NmFmOWM0Y2MsIDB4MDRlZmMwOTgsIDB4ZjE0NDRlYjgsCisJMHhlZjNjMDJmNywgMHgzZWY4NjA3NiwgMHgwMmIyNDNmMSwgMHhiZGZmYzI5ZSwgMHg3ODA5M2MxYSwgMHgwOWFiM2E0ZiwKKwkweDc3YzQxYTg5LCAweDQ3MWU2ZThhLCAweGQzMGE2OTUzLCAweDNhYjdkZGJmLCAweDg0OGNmN2YwLCAweDUzYWFhZjA1LAorCTB4M2NkYWZlYTgsIDB4ZGQ4ZWZkOTMsIDB4OTIwYjYzZjksIDB4NTU2OTFmYzAsIDB4MGRmMmRlOTksIDB4YjQ2M2UxZWIsCisJMHg2YmU3MDc4YiwgMHhlNjIzMTczNywgMHg0MDU3N2M3NSwgMHg5MjFkMTk1NSwgMHg4YTZiNmMzMywgMHhmOWM3OGMzNSwKKwkweDI1ZmU5OGYzLCAweDNkZmYxYTUyLCAweDFlYjdjYTI5LCAweDFjNDNhNmNkLCAweGM1Y2VmOGQ4LCAweGZjNTIyYmJmLAorCTB4NzgwM2NlYmYsIDB4ZjBmY2RiNDYsIDB4YWJmYjhmNGUsIDB4OTJjYTM4NmYsIDB4MjhjY2ZiNjksIDB4OTQ1ZTVmYmUsCisJMHhjMzlkZTFjMCwgMHhmYmVmMDdkZSwgMHhkMzQ1ZTM0ZSwgMHhkNGI1MTg3ZCwgMHgyN2I3NGVmYywgMHhlMjE0YjRkMCwKKwkweDZkZWZkMGZjLCAweDhiY2VmOGM5LCAweDM4YTI5ZWI5LCAweDBiYmI5NjkxLCAweDBhYWVlNWNkLCAweDQ3ZTE4ZjlhLAorCTB4ZjZkNjc3ZWIsIDB4YWU5MjVmODYsIDB4MzdmNjM4MzIsIDB4YmYwZjEwMzgsIDB4NzlmZDUwNmMsIDB4MzQwZThmOTQsCisJMHhiMDdmMzBmOCwgMHhkYTM0YzM0MSwgMHgwZmNiMTIzMCwgMHgyZjMxZjgzNywgMHg5ODZjZjRkYSwgMHg3ZmFmZmE0ZiwKKwkweGVlYmIxNDkwLCAweDlkNTRlZmMyLCAweDc1YzNlMThjLCAweGY5YWRlNDcyLCAweDg4ZGY4ZjgwLCAweGFmMTVhZjg4LAorCTB4ZGVmZTQ3OGUsIDB4M2E4ZTlhMzQsIDB4NzM2N2JkODYsIDB4ZmVmZWM2MzIsIDB4ZDI1N2YyZTksIDB4MGQ1ZjI4NGEsCisJMHhkM2FmZDFmOSwgMHhlZmMzYzY0YSwgMHgxN2YzYjA5NiwgMHhmNjNhNDE3MCwgMHgyNTdhZWUxZSwgMHhlMDkzZjlhMCwKKwkweDM0YzYzNDc3LCAweGZiYzI4NjNiLCAweGM5NWJjMWE0LCAweGZkMjM5NDU4LCAweGJiZjA4OWM1LCAweDZjMzM3YjBiLAorCTB4OTQ5YTdlYjQsIDB4MDdmOGVjZDcsIDB4NjRkZWFiODAsIDB4ZTdlN2FmZTcsIDB4NmM5ZjFmMzMsIDB4YmNlM2FmZDYsCisJMHgwYTY2ZmY0YywgMHg3MWJjZTNjNSwgMHg1MzdlMDlmOCwgMHgzOWFjZmQwMCwgMHgzMzA3YjljNiwgMHhiZjU0ODkxZSwKKwkweGViOGE3NmUxLCAweGRmYjNlZmU2LCAweGM3NTQ0ODVmLCAweGY3YmRlMWZiLCAweGNlYzM1ZWNkLCAweGJlYzVmN2E5LAorCTB4ZmY5OWJlZTcsIDB4ZTFlMjQ0MGUsIDB4MjkxNzY4MjUsIDB4MTAzYmY2M2UsIDB4MGY3YjBhMjksIDB4NGQ5MzA0ODksCisJMHhlNWNkZWRlZiwgMHgwNjA2Y2NmZCwgMHgxZjU3ZDA5YSwgMHgxNWZkZTZjZiwgMHhmYjBlNzkxZCwgMHg4ODk3ZGY4MywKKwkweGYwODdlZmY1LCAweGNjZDhjM2RmLCAweDM1NzRkM2Y1LCAweGVkNGRlYzUwLCAweDViZDQ2NzZkLCAweDc3NTllYmJmLAorCTB4MGJkMTIxNmQsIDB4ODkwMTQzZjYsIDB4ZWQwNGJkODAsIDB4ZDRiYjY5OGEsIDB4ZGMwMjAzMGYsIDB4ZDdjZTMzZWYsCisJMHhjZGY4MGIzZSwgMHg5M2RkZmRlZiwgMHhlYmMzMDI3ZCwgMHg4YTdkM2M5MywgMHhkNDQ5NGVmZiwgMHhlMzA3OTgxMywKKwkweDEyM2MxNmZiLCAweGNhNzYwM2RhLCAweDYyMDZiYjNlLCAweDhmZTQ3NDUyLCAweGY4OTQ3ZWY4LCAweGU3MDFjNTNiLAorCTB4YmMwZjUzZmMsIDB4ZDllNWVlY2YsIDB4YmYzODE0M2EsIDB4N2M1YmQyYjgsIDB4NDU1MWM0MTMsIDB4ZjMwMzNlYTUsCisJMHg4MTZmNGVmNywgMHhmYTllODNmYywgMHhkZGEzZDg4NywgMHgxZjAxMzdjNSwgMHgwNmY3ZjNhNCwgMHgwMTAwMDQwOCwKKwkweGUxYWEwODBlLCAweDQzZmQ2MzhmLCAweDY0NjU0ZWIzLCAweDJiZjJjYzlmLCAweDg3MzYzN2JkLCAweDNmNWYyMTMyLAorCTB4ZjIwOGY4MGYsIDB4N2RiZmI0OGQsIDB4YzAyMWMxNDksIDB4ODZlMTZlNDcsIDB4NDIzNzYzZTYsIDB4MDM3ZjY4ZGUsCisJMHg1Nzg5ZmZiNiwgMHgzYjhmZmU2NSwgMHg0YWY2MGQ5OCwgMHg3OWE1NWU0ZiwgMHg2MjVlNGM0ZiwgMHhhOTYwZTI3OSwKKwkweDIzOWFiZjMxLCAweGQwNzNjNDdmLCAweDNiZDgwN2I1LCAweDY2MDdhOTVkLCAweGQ0Y2YzMDA4LCAweGZmMTAzM2ZkLAorCTB4YmNiN2Q1ZTcsIDB4ODc4YzM0MmIsIDB4MDRlYjYwOGYsIDB4ZjQxYjk3OGIsIDB4YTZlMWVlMzAsIDB4NzlmNzgzZDksCisJMHg5ZDYxZjg2MywgMHhjNGM3NmNkNywgMHgwZmJjMjdkYywgMHgxZmQzZGRmMCwgMHgzNmNiYWY4ZiwgMHhmNzRhOWVmNiwKKwkweGM2ZWZkODhmLCAweDU0N2IwMzBkLCAweDg2YjliODg0LCAweGEzZGMyZTY5LCAweDcwYzFmZWE3LCAweDk4Mzk1YzEyLAorCTB4Y2RlMzVmZDYsIDB4YjU1ZTNhNDEsIDB4YTljZGZiM2IsIDB4YTc1ZjJmNWEsIDB4ODA3NzI5NjQsIDB4ZjhiNTRlM2UsCisJMHgzZjVjZDkzNSwgMHg3ZjhiNTA4ZiwgMHgzNzJiNDg5MywgMHhmMGI1YzEwYSwgMHg4ZjY4NmM5ZSwgMHg5MzdkZTJhYywKKwkweDQ3MjgxOTVkLCAweDIyOGViOTY3LCAweDVmMzE4M2Y1LCAweGNiYmZlZmNkLCAweDQ3NmI4MzJiLCAweGM0NTkxZTgxLAorCTB4NzY1NTZlZjQsIDB4ZGZhNjU4YTAsIDB4OGQ5NzNkNTcsIDB4ZjA2NzBiYmYsIDB4MjQ1MjU1NWQsIDB4ZjdiYjljNmQsCisJMHgzNzkxYjc1YywgMHgyMWU0NDc3ZSwgMHhlZjA5ZDViNSwgMHg1YWZiMThmMiwgMHg2NDM3ZmJiNSwgMHhjN2ZkM2VjMSwKKwkweDNiNDZkZTg3LCAweDM2NjI0OTcxLCAweDc2ZDM1OWMyLCAweDY5ZGY4MTVjLCAweDdjYTM2ZGE5LCAweGQ4ZmJiZjQ3LAorCTB4YTNjNzYzZDksIDB4Yzg4N2YyNWYsIDB4YmUwMjZmYTAsIDB4YzM2OGQwZmUsIDB4ZDlmZGRkY2IsIDB4ZmQ1MjJmNTUsCisJMHhlYTg1ZDNhNiwgMHhkMzAzODM2OCwgMHhkNWZkN2E5ZCwgMHhmMDljMGFlMCwgMHg0OWM5YjgyZSwgMHgxY2YxZTlmOSwKKwkweGVhZmUwNTVkLCAweGY1MWViN2JjLCAweDNhOGFlM2Q4LCAweGQzYWZmODBhLCAweGUwNjZjM2ZiLCAweDkxMjRhYWU3LAorCTB4NWYwZmViZjMsIDB4N2VmOGYzZDYsIDB4YjllZmNkM2QsIDB4YmZhNmVkYjcsIDB4YTE2MGRmNjgsIDB4N2JhOWZlZDksCisJMHg0MWZjOGRjNCwgMHgwMmRmOTJlZCwgMHhiNjZlZDUxZiwgMHhiM2ZkNjA4NSwgMHhiZWYxZGEzOSwgMHgxYmU4Mjc3MywKKwkweGZiZTY1ZmQ0LCAweGE2MDUxYjk5LCAweDU4NzM0MzBmLCAweGY3NzJmYTFjLCAweDc0YmUyYjM0LCAweGZkOGM3MDkxLAorCTB4ZTk5MTI0YmQsIDB4ODQyOTBhYWIsIDB4NWYxNTc2ZmIsIDB4MmZmZWIxN2EsIDB4YmE2OWM3MWYsIDB4MWM3N2RhMGYsCisJMHhlMzFiZDYzNywgMHg4MzhlZjc1NCwgMHhmNmZkNTI3YywgMHg1ZmNmZjQ2MSwgMHhhZmIwZGFiYywgMHg3N2ZmZDQ3NSwKKwkweDYxY2ZjNTNlLCAweGU4NzRmNTM4LCAweGQwZDk0MWU3LCAweGE0Y2ZkNDI3LCAweDFlZTc4Njc4LCAweGY5MjQzZTc5LAorCTB4NDdhOTc5MDgsIDB4MmU2ZGFjZmYsIDB4ZjZmYTA0YzksIDB4N2ViMzEzZDYsIDB4Yjc0YTI1ZDIsIDB4M2U3ODEyOTcsCisJMHhjOTczN2Y3NCwgMHgxM2VkMzhhNCwgMHg4YzczZWQyYywgMHg3ZmIxNGZmYywgMHgzYTBmM2MyYiwgMHhkYTBlZjM3YiwKKwkweGJkOTNmYTVlLCAweDZkZjAwZjI3LCAweDRiZmE1OWIwLCAweDg2ZGZjNjM2LCAweGI3ZmMxOWZkLCAweDY1ZmJiYmM3LAorCTB4YTVlOWVmNzgsIDB4MTBmMTQwYTQsIDB4MjA2OGRmNjYsIDB4MTUyNDViODcsIDB4YzBkMTg3N2YsIDB4M2ViZTFlZjMsCisJMHg4ZDc5N2M1NSwgMHg3OGJkZmYwOSwgMHg5Zjk1MzAyZiwgMHhmYjRjZDA2ZSwgMHgyZTE3OGJhMSwgMHg3YjNmN2JjMywKKwkweDQxNTYzYWY4LCAweGRiM2VlYzQyLCAweDdkYTZiOTIzLCAweGM3MGZmZmQwLCAweGI4YTM4NWQ3LCAweGZlNGEzODFmLAorCTB4MzI4YzcwYzYsIDB4Mzg1ZTgxZTksIDB4NWZlNTRkZjIsIDB4NjkzMTBlMTcsIDB4ZWMzNjY5NzYsIDB4YTFiMWFkNTMsCisJMHgwYjY2OTA5ZiwgMHg2ZWMwNzIzOSwgMHhmN2VjNWZmYiwgMHgwNzM0MjAxYSwgMHg2MWE4OTllNywgMHhjZTU3ZGE2YywKKwkweDA3OWY2MDM5LCAweDQ0OGU3OWM2LCAweDQwZTM0OThlLCAweDA1NmQ3NDllLCAweDkxM2Y1M2FjLCAweGU1YTFhZmQwLAorCTB4ODYxOTM5MGUsIDB4ZmRlMWQ1NmUsIDB4ZDg5NTJhMmIsIDB4YjA3NTRlNWYsIDB4ZTZmNTE5ODYsIDB4YWI4NzYyNzcsCisJMHhlNWEyNThhNCwgMHhiODc5ZDVlMywgMHhkZDk0ZTVlZSwgMHhmZGY2MDc1NSwgMHhjZmUxNzczNiwgMHhiYzkzMTM1NywKKwkweDVhYjI3ZGEyLCAweGM3ZjY4YTU4LCAweDliMTdjNDlhLCAweDNkMzhkZjYxLCAweDAyMzNkOTgxLCAweDU4ZjliMTc5LAorCTB4MjY3YWJjNDYsIDB4YmRmNzJkYWYsIDB4MzFjNDEzNzgsIDB4YWVkNGFlYjYsIDB4YWI2ZTdmMDYsIDB4MGMzOTFjMzMsCisJMHg2ZTNkZjllYiwgMHhkY2FhM2RmYywgMHhmODE2ZTE3NSwgMHg4MzcxMGFiZCwgMHgzMTRiZDcwZCwgMHgyYjZiYmMyOSwKKwkweDYwNzgxNzljLCAweDhiZWMxZjg0LCAweDQwZDc2MGFkLCAweDVjNmUzNWZiLCAweDQyMWE1YmZmLCAweGUyYWYyZjY4LAorCTB4ZjVmNmMwZWIsIDB4ZTczODU0OTMsIDB4OTI5NmU4ZGMsIDB4OTE2YmJkNjEsIDB4YjgwNTZmZWIsIDB4NjRlZmJhNWUsCisJMHhkMDNhZTNiMywgMHg0MTk2ZmU2MywgMHg4MGNiZWYzYywgMHg3MWNiNGQ3NSwgMHgxNGY1ZTU4YywgMHg2ODU3NWIxOSwKKwkweDM0ODVjMTgzLCAweDQ0ZmZjM2YyLCAweDMzZDQxMmFkLCAweDZiMGVkMTI3LCAweDA0YWIyZjc0LCAweGJmZDY4ZTNiLAorCTB4N2E3OGEwZWMsIDB4ODVlMzk5M2MsIDB4ZThmNGU3ZDcsIDB4YTBjZDkzYTUsIDB4YmQxNWM1MDcsIDB4ZWYzYTEyZjksCisJMHg3YTYzM2YxZCwgMHgzZmRhMDllYSwgMHhlNzQ1MmJiYywgMHgxODc3ODIxMywgMHhlODQ5NDdiYiwgMHhjMTI0MjU4NywKKwkweDc0ZDBjNzZmLCAweDlkZmIwZTc0LCAweGJkMTdhYTViLCAweDM4NDljN2U4LCAweDQ5MWY2MzVmLCAweDBmN2VjNTE5LAorCTB4N2FjM2RhMWQsIDB4ODM5MTkwOTMsIDB4MGNjYTk4ZmIsIDB4ZTI4MzVlZjYsIDB4NjZmZGUzNzEsIDB4ZGQ1Njc3ZTMsCisJMHhiM2E3ZjhjNCwgMHg2N2RmMjk3OCwgMHg0M2RlNTk3MSwgMHg4OTVmYWU3MCwgMHg3ODRlZTk5YiwgMHg0Zjg2MjEzNywKKwkweDBiN2JjYjE1LCAweDA3Y2MwOTEyLCAweGNkNTQ0YjdiLCAweGU0NDliZmU1LCAweGQ4ODM0YWZiLCAweGI3MGVhZGVmLAorCTB4YTMyZWQwODUsIDB4MzVlOTg0NTIsIDB4ZDlmNjhhMjQsIDB4Zjk4MWQyNjgsIDB4ZTY2ZGUwMzEsIDB4MGQyYzM1YzIsCisJMHgyNzhkOGUyZiwgMHhiYmUyYzhiYSwgMHhjN2VjMTEwMSwgMHg3ODhkNWJiNCwgMHg0NGY1ZjA0YywgMHg5NmJmZGViYSwKKwkweGZjMzZlM2M4LCAweDY2NTM4Yzc3LCAweDdkN2VlMjE0LCAweDVmYWIxMjY2LCAweDBmYmJjODE1LCAweDMzOGRiY2VjLAorCTB4YzY5YzYxYTYsIDB4ZjU4Y2VmYjAsIDB4MTZkZmIwZDIsIDB4YWI1Nzk4NzIsIDB4YzE3YjVjNDIsIDB4M2ExNmViYjAsCisJMHhiNjc1M2U1OSwgMHg4ODY4ZTBmZSwgMHgwYjUzYjY2YiwgMHgyZmVlMWIzNCwgMHhmOTZhZjhiMywgMHhiMDM0ZTJlNiwKKwkweGJhMWUxNmNiLCAweDRjZTRlZDE1LCAweDhiNjVkOTk1LCAweDgyNTBjZTM2LCAweGRhZGVlMWEzLCAweDhhMDdmNDNjLAorCTB4ODQ0ODRjMzcsIDB4NGVkNTg0N2QsIDB4ODU3NWUyN2YsIDB4ZmJlMjY3ZTgsIDB4YzdiNTAzYjksIDB4MzU1ZGE2YjYsCisJMHhhYjcxZTQxOSwgMHhjYTkwMTI4ZCwgMHhlZWIyNGJmYiwgMHhiMTdjMGIxZSwgMHhjY2VkMGYyMSwgMHhjNmMxMDlhZCwKKwkweGQ2ZWZkYTI0LCAweGFiZmNkNjdmLCAweDRlYTdmZTY4LCAweDhjMzhmMGJkLCAweGQ1ODEzYWIzLCAweGMwNTFiYmMzLAorCTB4MTJlNzNkOWIsIDB4YzliYmUxYjYsIDB4M2Q2ZjhkZmQsIDB4MTI1MmYwOTcsIDB4YThjYTdmN2IsIDB4N2U1MzZmZmYsCisJMHg4MDAwN2Q3YywgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGJkZmYwMCwgMHhkNTk0N2MwYiwKKwkweDY2ZmRmODk1LCAweDY2NjU3OWJlLCAweGYyNjNjOTkyLCAweGMyMTMwOTIyLCAweDllNGU1ZTRiLCAweDEyNGMyMjgwLAorCTB4NGNiNDQzYzIsIDB4ZTgyMDJhMTAsIDB4YTc5MDM0ZjAsIDB4YmFkYzVkNDgsIDB4MzAwNDBjZmYsIDB4NTcwNmI2NTAsCisJMHg4NGVhMmIxMSwgMHhiYmFhYzU2MiwgMHgzNTFiYTM0MSwgMHhiODgwODBlYSwgMHhkYTQ0NmRkNiwgMHg4ZmZkMTZkMiwKKwkweDQ4MTAxNTRhLCAweGZlZDJiNThhLCAweDM5Y2Y2NWRkLCAweDdjY2NkZWY3LCAweGI1ZjAxOTkzLCAweDNlZmViNGZmLAorCTB4ZTdkZGY3ZWUsIDB4Y2U3M2RmNzksIDB4MTJlOTczYmQsIDB4MmM2MTRkZmMsIDB4NTYzMGE0OTQsIDB4NTFjMWQ4Y2EsCisJMHg2MThjZjU4YywgMHgyNGRlYTk4YywgMHgwNjRkY2YwNiwgMHgzNGUyZDI2ZiwgMHhhMzdlZmFjNiwgMHhmNWUxYmI2NywKKwkweDkyNmY2NjE3LCAweDI1ZDhjNmMzLCAweDc5ZmEyZWQxLCAweGEwYjE5OWFhLCAweGNkYjNiMTg5LCAweGMxMWMxNjZlLAorCTB4MzM2Njk5ZDgsIDB4MWY5NjZiOTUsIDB4OWZhMGM2OTgsIDB4Yjk4NTBlOWEsIDB4YzU1YjE5ZjIsIDB4M2Y2MzM2ZGEsCisJMHg2OTkyM2JhZiwgMHgzZDAxNTVkYywgMHhmNDY0OGUwYiwgMHg1YmZlMDk3NywgMHhkNTI4ZmNiZCwgMHhlYmM5ZGQ1ZiwKKwkweGFhMGViMmQ3LCAweDRmMzE5MmJmLCAweGY3NmIzYzA3LCAweDFjZDA1OTVhLCAweDUxZGY1ZmFlLCAweDRhMWY2OWFjLAorCTB4ZDdiZjUxZDIsIDB4M2IwNmZiMjUsIDB4NWJkZDhjOWMsIDB4MmFiZWZjM2QsIDB4NWQ1NjlmNzgsIDB4ZmFlMWY2NjIsCisJMHgxM2UzOGU1OCwgMHg4N2FmYThhYiwgMHhlYmU2M2FmNywgMHg3N2FlYjE4OCwgMHg0OWRlNWMwNCwgMHhhYzRlOGE4MiwKKwkweDMyYjFkMGVkLCAweGUwM2FkNmM2LCAweDFlYzYyZTlmLCAweDZjN2NkODUwLCAweDE1ZjdmNmI3LCAweGMyNjMyOTE5LAorCTB4OWUyYWQ2ZWQsIDB4Zjg5OGM3MGMsIDB4YThiYzZhNzAsIDB4ODhkNDgxNjcsIDB4YzQ2N2RhYjIsIDB4MzQ1ZTM1ZjUsCisJMHgwZWYzZmJkMiwgMHg2MzA3NWZiMywgMHgzZmY0YzkxZSwgMHg3ZmFjMmQ3MCwgMHgxOTUzZWIyNiwgMHg5MDlmNTNjYywKKwkweGNkNWQ4ZTM4LCAweDcxMjU4YjU4LCAweGJhNjczZTM3LCAweDA4YTE3ZDBjLCAweDUzMzMzMDM4LCAweGY4MzM3ZTcxLAorCTB4YzRlYmY2MmIsIDB4NzE5NDQ3NjksIDB4ZWQ0MDNlZDgsIDB4YTk4ZWQ5NjcsIDB4YzQ3MzQwMGMsIDB4ODMwMzczNWUsCisJMHg5MGIwMzdmNywgMHhjZTA2MGFjYSwgMHgyOGZkZmEwZiwgMHgyMzU5ZGZiMiwgMHhkZDFiZTViNSwgMHgwOWVjZjJkYSwKKwkweDdlNjMzMmRhLCAweDlhNGZkNzgyLCAweDFhNGVjYTliLCAweDA0ZmVmZGMyLCAweDAzMTFkNmE2LCAweDU4MDJiNzJlLAorCTB4NWVlZDdlYjEsIDB4MDQ2NGUwNGIsIDB4OTIzYmViMWUsIDB4YWVjNmU1MzUsIDB4ODhjOWMwYWMsIDB4MWZmMTZhNzEsCisJMHgxMzVmZjA1OSwgMHg1ODlkNzc1ZiwgMHhkZjQ2MDdmNywgMHg1YmMwMGVhZCwgMHg3MTE5MGIzZCwgMHg0NmMxNDBkZCwKKwkweGFjYzY1OGVmLCAweDdjNDVlNjE2LCAweGYxNmZkODFkLCAweGNmZTgxMmIwLCAweDAwYjc2ZTY2LCAweGFiYmIxYjdjLAorCTB4ZGVmMDI1OTUsIDB4MzBlZjg3NmEsIDB4ZTE5NjI3M2YsIDB4ZmFmMDM1NjksIDB4MGU4ODA1OGMsIDB4MzlkYThmZTAsCisJMHg1YmVkOTliZCwgMHhiNzEzZTQxNSwgMHhjZGZlZGFhYiwgMHhmZjAwZGRlNywgMHg0ZjAyOTNkZCwgMHgyNGFjM2Q5NSwKKwkweDBlYTNhYzQ2LCAweDVlMWU5MWQ2LCAweDA3ZWIzOWM3LCAweDU4MmY4ODY1LCAweGE1ZWM2ZmNmLCAweGE2NDYxNzQ4LAorCTB4ZjNkNzg1MjQsIDB4NWNiNWUxYWQsIDB4NWRjNmFmMGIsIDB4MTgzN2EyMzYsIDB4MTg0NGJkZTcsIDB4Y2VhNzYxYTcsCisJMHhjZWIyODQ2ZiwgMHg3ZTQ0NjNkYywgMHgzY2U5MTdiOSwgMHgxYzcyZGUwNiwgMHg2ZjNjNGM0YSwgMHhlMGM3M2M0MywKKwkweGZjYWNlZGE3LCAweDFjYzdlNDNlLCAweGM3MTgxZmU0LCAweDY1MjdlZWI2LCAweDhmODE4YjI3LCAweGZhMTczN2FhLAorCTB4MDU0ZGJlYTAsIDB4NTQ3MTg2ZmUsIDB4MDhhOWJmZjgsIDB4NmQzYmQ5YzgsIDB4ZTlkMDMyNTUsIDB4YzNlNzNiMjksCisJMHg3YTJlODkwZCwgMHgwYWJjNTBlZSwgMHhlNzVkMzVlMiwgMHhkNWZhNDdjOSwgMHhjYzQzYjgyNywgMHg2NmEzZjFjMSwKKwkweGNiNjAxOTQyLCAweGY5NjJjMWFlLCAweGVmZTgxZWJkLCAweGNiMWI5ODIxLCAweGYwMDk4NDE2LCAweGNiYzJjODc4LAorCTB4ZWZjYTM5MmYsIDB4NmVlMzA4ZGQsIDB4MGRlNWU2NGEsIDB4ZDViOWJkM2YsIDB4MTZjYTA5M2YsIDB4ZTU0MzllNTksCisJMHg0MTZkMGM4NywgMHhmZmRkZTAzZCwgMHg0NGY1Yzk4MiwgMHgyOGY3YjUzZSwgMHgzMjMwNWU1OCwgMHg0ZDRjMDRmMCwKKwkweDIzNjU4NDNmLCAweDQyMjZhNjVlLCAweGY0YjcyMGU3LCAweDliNzY5YTJmLCAweGVlZDA1ZWEwLCAweGE3ODQyN2ZiLAorCTB4ZmIzOWZmNWMsIDB4MjYzNjNjZjEsIDB4NGQ3ZTdmNjYsIDB4YWNkZjc5N2YsIDB4NTNiZjE4M2YsIDB4ZmJmODc1NzcsCisJMHg0MTlkYzRkNCwgMHhjMmU3NmYzZCwgMHhlN2E3MmM3NiwgMHg5ZmY0M2YwMywgMHg2ZDg5YTJmZSwgMHgwNjIzZTI4NSwKKwkweGRhMTc5Yjc2LCAweDYzMmM1ZGQ1LCAweGQ0MzkwOGMxLCAweGI2NzlmMDIzLCAweDViNzI0MWQ5LCAweGY5NDNhZmJlLAorCTB4YTlmOTA2M2QsIDB4N2Q3MGU0ODcsIDB4ZmU0NmFhNDcsIDB4N2Y1Y2I5NGEsIDB4N2Y0ZDVhZjEsIDB4YzI3YzhlMzksCisJMHg0M2RhYmQ1NywgMHhlMmZlYWRmMiwgMHgxMjFlZmE2NCwgMHg3MzZjZjRmMiwgMHhmODg5ZTkyNiwgMHhjOGQyMGNlMywKKwkweDEzMzhmMGY1LCAweDcyZjhiMDU5LCAweGVmYTI0Y2UzLCAweGNiZTYxYzcyLCAweDA2YmRiOTIyLCAweGE0MjQwY2U3LAorCTB4ODdiYzgyMzcsIDB4NzUwYzJlNzEsIDB4NDY1ZjI1MjUsIDB4MDI3NmQ5OWYsIDB4NjdhYzQ1OTEsIDB4NjMzNDFhOWIsCisJMHgwN2RjZGJmZiwgMHhmYzE4YmUxYywgMHhiODQ0ZTUyMCwgMHgxZWRiNTFiZCwgMHg4MTFiMjNmNCwgMHg0ODYzZWRmNCwKKwkweDdhYWNmZmI3LCAweGQ0ZmE5MWNjLCAweDUwMzhmMDY2LCAweDhhZjZhODZmLCAweDM0MzcyZTIzLCAweDg2NjQ3ZTRkLAorCTB4NTE2OTI4MGEsIDB4ZDk3ZjNkMzksIDB4ZDFlODgxYjYsIDB4NDExZjcwNmUsIDB4M2FlZGRhZmMsIDB4YWZiZTFmOTcsCisJMHg0ODNjZTliNywgMHg3MzBlMmQyNywgMHg1MWJkZjEwMCwgMHg3MjgxYzFiOSwgMHgwNzZiZjY0MywgMHhiOGYzOGYzMSwKKwkweDdhNDIxYjYwLCAweGQ1N2FkZTNkLCAweDBmNTQ4OThiLCAweGE5MTk5MjY2LCAweGM2ZjdmZjFmLCAweDBmMTdjNTgzLAorCTB4MzFiZDhmMWMsIDB4ZmEwYjg4ZjEsIDB4NmU3NDRiNTcsIDB4OTEwYmUwMGIsIDB4MWQwNDcxZmEsIDB4ZGY2M2Y3NDQsCisJMHg3NzljYzZhOSwgMHhmZjA5M2Q3NCwgMHg4NDM2ZjhiOCwgMHhlN2ZlMTExMiwgMHg4MTE5YmE2ZCwgMHg0ZDJlZjMxOCwKKwkweDllOWJiZTU2LCAweGRmMjUxNDVhLCAweDNjM2I3ZjkzLCAweGQwOTVlZDg4LCAweDQ5ZjIwYTBmLCAweGEzMjY5NmZlLAorCTB4OTBiYzJkZmMsIDB4MzkyMmU5NTgsIDB4NzNiNWVlOWYsIDB4YjZlMzg1YjEsIDB4N2Q5YThlZDgsIDB4ZWQ5ODhmYTQsCisJMHgzZWJmZDkxMywgMHhiODQ5ZmQzZSwgMHg2NGFhZGUxOCwgMHgwNDYwMWY4OCwgMHg0YWUzN2E4NiwgMHg0MTJiYjA3MCwKKwkweDE1OTdlMjJmLCAweGQzZTUwY2FhLCAweGE3NmYzYTQwLCAweDc3ZDdmNGY5LCAweGViMTFlNzQzLCAweDBlZGQ1MTZmLAorCTB4NzVmZDZiYTQsIDB4OTljYTMzMWUsIDB4ZTYzOThlZjUsIDB4YWEzNzk0MTAsIDB4MjBmOWQ5YWUsIDB4MDJkZWZhODcsCisJMHhiN2Q2MTI3YiwgMHgxY2M4YWQyOSwgMHhjMTVhOGY4YiwgMHgyZGY5YzQ2ZSwgMHhkNjY5ZDY0ZCwgMHgxZDY2OWYyMywKKwkweGY3ZThkZmU3LCAweDllYjk5MjViLCAweGIxM2ZkZDY4LCAweDlmMTI1M2M3LCAweDc5ZDI0MDdlLCAweGNiOWI4ZjUxLAorCTB4NTg1NmM3NTQsIDB4ZTdjMGRlOWYsIDB4MDc2Mzg5NmIsIDB4YzFlMzdlY2EsIDB4MGI3ZWNiNmIsIDB4YTg3NTY5YzksCisJMHg0NGY2ODAzOSwgMHg1NDliNzhmNCwgMHhiZTA3OGY3NywgMHhmOGY5ODI2ZiwgMHhjN2MzOWNiMSwgMHgzYWEyNTRkZiwKKwkweDE2ZDc0Mzc2LCAweDQ3MzMwMjU3LCAweDRiMzgzN2Q0LCAweDZjMTdmZTA4LCAweGRmMGY0YzY5LCAweGM2M2QyMTM3LAorCTB4ZDM4NDk3OTgsIDB4NjhlZmU0YmMsIDB4ZThhMmY5M2YsIDB4YzNiN2Y3MzIsIDB4NWQwZDEwZDksIDB4Y2JhMmM2YjYsCisJMHg0YjM3YTg3OSwgMHgzOTk5ZmNmOSwgMHg5MzQzZmU3MiwgMHg4YzdjOGViZSwgMHg0OWIyOWJhNiwgMHg5NzdjODNjYywKKwkweDU4NzZjZjAxLCAweDY2Y2FhNzZmLCAweDgwN2Q0M2VjLCAweDk4NDRkNmI2LCAweGU2MzZjZGRmLCAweDM5M2U5OTAwLAorCTB4MzI2NzdjYjUsIDB4ZTdhY2I3YWMsIDB4M2YyMTkxODAsIDB4MWQ2OTNhNzQsIDB4ZjQ3ZGEyNzUsIDB4OGUxNGE2YjgsCisJMHg4MzhhNTMzZiwgMHgzZGM3NDk5ZSwgMHhmODAxNGY0ZiwgMHhiODI0ZjY3NiwgMHg5OWQ0ZjgxNCwgMHgwNjMwZmEwMiwKKwkweGJjMDg4ZjdjLCAweDlmYzZkNjMzLCAweGYyMWM2ODZhLCAweGI2NWZhYzhmLCAweGMzNzY3OTg4LCAweDZiMDI1MGYzLAorCTB4YjJiZDgzMzUsIDB4YzYwN2M4NGYsIDB4MTU0ZmU3ZWUsIDB4OTljNjE3MTgsIDB4ZGRlOGNhZmQsIDB4ZjU4YTJmNjQsCisJMHg4MGI1MDIxZiwgMHg0M2QzZDNmNSwgMHg3N2ZkMTRlMywgMHg1ODVlZGJjMCwgMHhlYWRlMDQ3ZCwgMHhkYmMyMjFjZCwKKwkweDZiZGY0NmRiLCAweGUzYzY5ZjA4LCAweDc3MmM3NGExLCAweDg3OTMzZDFlLCAweDcwYjY3MGY4LCAweDI1ZWZiNWZiLAorCTB4NmVlOTAwNmIsIDB4ZDNkNjdlMjAsIDB4MGUyZWVhZmMsIDB4ODFlMmZlNjIsIDB4ODM1M2FiNzgsIDB4MmVlYjVmYTQsCisJMHg1ODc3ZDFlNiwgMHgxMjljZGZiNywgMHg2YzFiM2VmZSwgMHgyZWIwMDk4NiwgMHg0MjcwZTY2NiwgMHg0N2MyYzRmOCwKKwkweDg5NmJlMGJiLCAweGEzZWI1MDBmLCAweDA4MWYwMmVkLCAweDNlYzQ4ZmE3LCAweDRlZWYxZmE3LCAweDc4MDY2NmUzLAorCTB4ZWZlNjZiM2YsIDB4ZGYyNDY3OTksIDB4ZmU3ZDA5ODcsIDB4MDA1ZTQyNTEsIDB4MGQxZjMzZjcsIDB4N2E0NmNlMDcsCisJMHg5MWU5NWQ1MCwgMHhlMmNlYTc3YSwgMHhhYzNlNmZiOSwgMHg2N2FiYmQ5YiwgMHg1OTYzYzA0ZiwgMHhlZDE1YWRhNSwKKwkweDRmMjY2NWFiLCAweGNiNWRkYTEyLCAweGViMmJkM2RlLCAweGM0ODQwOWYzLCAweDNjMDQyYjA3LCAweDVkZjczMmNmLAorCTB4MzZmZjNmODgsIDB4YzIwOWUzOGIsIDB4OTdmZjc2OWYsIDB4ZjhiY2EzYmYsIDB4YTJiZjY4MWQsIDB4OTM0NmVmNGIsCisJMHhjZGE1Njk3MSwgMHhmNTk2ZmQ4ZiwgMHg4NzZkM2M1NCwgMHhhZDViMmJmNywgMHgyZWZkMDYyZSwgMHgwNGZlZTI5YiwKKwkweGY3NjViZGVkLCAweGYyMWI1YzU5LCAweGE0MzhiZjcxLCAweDVkZmEwYjNjLCAweDAzYmU2MGZiLCAweDlkNzU4MWU1LAorCTB4MDZlY2QzMzcsIDB4ZWI3ZWUwOTMsIDB4NmRlMDJiNGMsIDB4ODk2NGIyOTMsIDB4N2RhYzA4NTIsIDB4MTUxNmNhN2YsCisJMHg1N2ZlYWNmMCwgMHgyODE2NjdlNSwgMHhjMTdmNzU1ZiwgMHg4Yzc1ZjMxNiwgMHgxY2IyODJiZCwgMHhkMGZmNTllZCwKKwkweGZlZGY2ODk5LCAweGY2NDZhNzEyLCAweDdmNmZiNzJlLCAweGNhMjc0NDc5LCAweDgyYTY1YmM1LCAweGVjZTUxODBhLAorCTB4Y2U2MGQ5ZDQsIDB4Yjc4YTUzMmIsIDB4ZjRmYzYxOTgsIDB4MGVhMTRmMTQsIDB4MzI5MzViYzYsIDB4YjdmNjI2NjEsCisJMHg3ZmIxYmVmNCwgMHg3N2RmMDlkZCwgMHhhOTlhY2NhNCwgMHg0NGRlMTNlNiwgMHhjYWNjZWY3YiwgMHg5MjZlZDBhMSwKKwkweDU0YjNjZjJjLCAweDU2Njk3ZjQyLCAweDI3YTdiNjE2LCAweDA5MGZiZjAwLCAweDc3ZjY4ZjhmLCAweGJkZmRiZjY3LAorCTB4MWNkNGU2NjAsIDB4NTM0NTRiYzAsIDB4YmZmZDBhYTUsIDB4OTZkYjcyOWUsIDB4MzYzMTU3MzEsIDB4ODc3MjgxZmUsCisJMHg5ODNmYzYwNywgMHgxNWE2NjRiMiwgMHg5NDY5ZGZmMCwgMHhmMTZkOTdmNSwgMHhjYzlkNThjMCwgMHhiZTAxODZmNywKKwkweGJhZmVmMWZmLCAweDlmYTg2Njk5LCAweDc0MmRlYTk2LCAweGNkNTNmYWMwLCAweDkxOTk2ZmY3LCAweDY1ZjgxZGZiLAorCTB4NGZiZDEyYTQsIDB4MTI3MTQ4MmMsIDB4OTA0NjFjZGYsIDB4MzNlYmFkZTYsIDB4ZjgyYWZkNzIsIDB4NzFkMzg3M2QsCisJMHg5NDI0Nzk3ZiwgMHg0Y2U1MTFlZCwgMHgxMGRjZWU1ZSwgMHg0ZTljN2U1YiwgMHgzM2I5NzJlNSwgMHg4Zjc3ZjYyMSwKKwkweGVmMDA0YjkwLCAweGIzZTkwZWEwLCAweDk2MTgxYWNiLCAweGMwMjc5NjFmLCAweGM0MDllNjRmLCAweDNjYjlkYjVmLAorCTB4NjM5YWJlMDEsIDB4ZDk4ZTNlMjcsIDB4NWZlNTM3ZGYsIDB4ZDNmNTNiODAsIDB4ZThhYzdhYTksIDB4MGQ3MjkwYmYsCisJMHg3MWM1NjY2NiwgMHg2OTc2NGNiZSwgMHhjZjU5NzVlNCwgMHhiZmI3OTI1MiwgMHhlYjdjMTU0YSwgMHg1NjcxZjBlMiwKKwkweDMzMGFlNTZhLCAweGI4NDcwY2Y3LCAweGM1OGI3NmM4LCAweDRiNDdmMzNhLCAweDg4ZDA1MmZmLCAweGUyZDZiOWZjLAorCTB4YWNmOWMwYzksIDB4YzE5ZTU3ZGQsIDB4ZDc4NzYzMmUsIDB4ZjhkNzJjNWQsIDB4OThlYmMyNGIsIDB4ZjQwN2VmNGEsCisJMHg0NGI5ZmQwYiwgMHg1ZjMxZWVmZiwgMHg1N2M5NWUwNywgMHg3ZDFhNTc4MCwgMHhjMzNhZDJiZiwgMHgzYmZkNjlmZCwKKwkweDdlZTNmYjAzLCAweGM1N2EwMTllLCAweDFiOWU3YjE4LCAweDQxNWViODUzLCAweGU0MjJlYmY4LCAweDVmMjE0YWRhLAorCTB4M2Q5MTZhNDEsIDB4YWJjNWZlN2UsIDB4OGZjZDZmNzYsIDB4ZjUwMzc3MWMsIDB4N2E3ZGY4MGYsIDB4NDEyZmVlMGEsCisJMHgyYjFjYTJiZSwgMHhiMGIzM2Q1MywgMHg4YTRmNTk3ZSwgMHhhMDc5ZWQwMywgMHhkZTgyOGRiNywgMHg4OTM3YTQ1NCwKKwkweGE2OTRjZWU3LCAweDc2ZWY1YTcyLCAweDg2M2JiMWM1LCAweDM5MTNmODFkLCAweDgzYzUzNmFmLCAweDIyYzY0OWY2LAorCTB4YzQ0OTdlOWYsIDB4ODdmY2E0ZmMsIDB4ZmY0NTNiZmUsIDB4MWY5ZTljMjUsIDB4YzVlN2E3ZWQsIDB4MmZjMjNmYzgsCisJMHhkZjQwZGNjNCwgMHg1ZmNlMDc2MywgMHgwOGNlMzZjMSwgMHgyNTgyZjVmZCwgMHg3MDkxZjM4MCwgMHgyZmY0YjZmYiwKKwkweGI4YmE4N2VkLCAweGRhOTEyYTdhLCAweDI2MGYxYzY1LCAweDIxOWVhMGJhLCAweGI5ZjljNWM1LCAweDZiYzRlM2UzLAorCTB4ZTk3NTVmNTEsIDB4ZWJlMmUyOTksIDB4MjY1MWI5NDYsIDB4ZTdiZmE0ZTUsIDB4NzY0YTg1NDgsIDB4YmIyZTU4NGMsCisJMHg3MjkxOWVjOCwgMHg4NzM2NjgzMywgMHhiZGJmZGZlYiwgMHg5NDQ2YzY2NywgMHgyZmJlMjZhYiwgMHgxNDgzZDM0ZiwKKwkweGUzY2YwYTJmLCAweDJmYWUxNGU1LCAweDI3OThmODI3LCAweDI0NzgxZDk2LCAweDA4ZTUyZWQ5LCAweDc1ZTFlM2FkLAorCTB4NTg2M2VjOTUsIDB4ZDdlODVkOWYsIDB4ZjkzZjIxMDksIDB4NjY0YzllYjMsIDB4ZjBlMTNlYzIsIDB4YjY3YmZhOTAsCisJMHhkY2FmZjQyOSwgMHg0N2E1YTY0ZiwgMHhhNTNiMDY1OSwgMHhlZTEwNTc0MSwgMHg4OWNmYmYxZiwgMHg4MjYzZmJhMCwKKwkweGYzZjFhMjBlLCAweGMwMTNlNTVkLCAweDQ4NzA4ZmMxLCAweGM4NzJlMTRkLCAweGVkMDU2NTA5LCAweDE3ZjQxNTBiLAorCTB4YjU1Y2ZmYzAsIDB4M2YzNWJkY2QsIDB4MmUzNmRlNjIsIDB4MWQ3YTlkOGYsIDB4ZTA1NzYzOTcsIDB4ZmU1NGI0OGIsCisJMHgzYjI1ZWZiZCwgMHgxZTE4NzNmMSwgMHgyZmY5OGVkYywgMHgxZDc2ZjcwMSwgMHhjMTdkYzFhYiwgMHgwOWYwMWQyMSwKKwkweGFmOGRhMmQyLCAweDU5OGJmY2YzLCAweDI5ZTdlZmQ0LCAweGVmZmViOTNhLCAweDFiYjcyZTQ1LCAweGQ3Y2UzYzYxLAorCTB4YmZkNjNmNjQsIDB4M2I1ZGE4M2MsIDB4ZGNkZmRlN2YsIDB4NjU4ZjRlNTQsIDB4Njg4NTNkYzcsIDB4ZGFmMzBjYzcsCisJMHgyODVmYjhkYywgMHhjMDczOTllYiwgMHhkZGUxZTUwMCwgMHg0YjZiMDM4YSwgMHhjMWRlMWYzYSwgMHg0YmE4MTRmOSwKKwkweDY3YWRlNWMwLCAweGE1YjVmYjIyLCAweGJlZmEzYTcyLCAweDM4ZmMzMWQ2LCAweGNiYzQ1N2E3LCAweGNkM2UwOGUyLAorCTB4Nzg3MWI1NGQsIDB4MDg0Y2ZhYzEsIDB4NDcyYjU1NGYsIDB4OWJmYmYzZTUsIDB4MDE4MGY3ODcsIDB4ZjAwNzViZDYsCisJMHhlMTJkYjE0MCwgMHg2NGIxZDlkNiwgMHhmOGY5MDU4MywgMHgxZjIzNzMzOCwgMHhhMjU4ZWY5ZiwgMHhkZDc4OGIxYiwKKwkweGViYmVjOGM5LCAweGYwMGYwZjk3LCAweDE0N2I0ODc1LCAweGU5MDNiMmU4LCAweDVjZDRlYWYyLCAweDcxZDg2ZjFhLAorCTB4N2MwYzc1OGYsIDB4MTM3Njg2MWYsIDB4ZWMzYjk1ZmEsIDB4NGM1N2RjMDEsIDB4NGRjZGY1NGUsIDB4ZWRjZTc4NDUsCisJMHg0YTIwNjRhYiwgMHhlYjRkYWMxYSwgMHhmYmVmMTEyZCwgMHg3ZDQxNzdlYiwgMHg3ZTlmNjNhMiwgMHgzNmYzY2UyYywKKwkweGMyYmFiNmM2LCAweGZhYTk4MWViLCAweDZmNWExZmQxLCAweGEwMmQzZTA0LCAweGQ2ZTExMDcyLCAweGZiZjVlNDY5LAorCTB4Y2Y4YTMzMTYsIDB4OGNmYmU4MzQsIDB4ZjdmNDFkZjgsIDB4YTNjZmEyMmMsIDB4MmZjNDE0YmEsIDB4NmVkMDliZWUsCisJMHg3MzdiZDNhZSwgMHg2N2Q3ZGMxNCwgMHgwN2E4ZGM5OCwgMHhmNDQyMWY2MCwgMHg1NGMyYzg3ZSwgMHgyNmZmZjQwYiwKKwkweDU3NGU1MTNjLCAweDhmZDhlZmU5LCAweDUwMmFhYWYwLCAweGFlMjQyZGRjLCAweDYwZGM4NWRhLCAweGNkMzdkYzQxLAorCTB4N2EyNTYyOWUsIDB4MzlkZDVmNjQsIDB4YmZmNTFhYjQsIDB4ZmEwOWUzOTUsIDB4Y2M3ZThiMzEsIDB4ZmYzMGEyZTYsCisJMHgyYWVmM2FmZCwgMHhmZDQ4ZmZkYSwgMHhhODUxNDg3NiwgMHg4ZGQ3NDM5ZiwgMHhiMTEyZGRkZSwgMHg1MGZlYzIyZiwKKwkweGFhNTIxZmZlLCAweGZhNDBlZTczLCAweGIyM2FmYjE3LCAweDdhYzJkMzBmLCAweDIyOTVlZDE3LCAweGZkZGUyNDViLAorCTB4M2NhMTdlNjIsIDB4N2I0OGEzYTQsIDB4N2VkM2VkMTQsIDB4YjFkZmQ2N2IsIDB4ZDljODNhNjUsIDB4ODIzYTMzZjEsCisJMHhkMTUyMDczYSwgMHgwMWZmMzNmMywgMHhmNjA1NTFkNiwgMHg3MGUwMDVhYywgMHgzMzk3MmE1YiwgMHhmYWZkZjI4NywKKwkweDMwZGY5YzQ0LCAweDNhYmMzZjU4LCAweGQzMWJlMDljLCAweDkzOGYwYjY0LCAweGU5MGZmYzJlLCAweDQ4MmZlZTQ2LAorCTB4YmZjZmUwNGYsIDB4ZTczYjcyYTcsIDB4MWU1YzY5MjcsIDB4OTc4ZDIxZmUsIDB4ZmI2MzEzZDMsIDB4ZjUxMGJlMmIsCisJMHgxZjk3MTM1NCwgMHhmY2I5Y2I1YiwgMHg0MWI3YWU4ZiwgMHhlZGFkZmJmNCwgMHg2NjhhMzFkZSwgMHhlZjc2MGY3ZiwKKwkweGY3NmU1NDg2LCAweDg4NWZiOTFhLCAweDBhOTYxM2M3LCAweDg3M2IwNmZhLCAweGFiYjYxNGYwLCAweGRhNTAzYzc4LAorCTB4Y2NmNDVmYTEsIDB4ZjM3MmYyYTMsIDB4YmZlOGQ5N2IsIDB4ZTY5ZmVkYmYsIDB4YjZmNDg3ZGQsIDB4ZjI3YTM3ZjIsCisJMHhmMTE0OWM1NywgMHhiZWM5OTU4MiwgMHhiZmRjNjRmNCwgMHhhYmY2YzQyNywgMHg3NWQ2MjczYywgMHgxZjkxOTliYSwKKwkweDFiOGM1M2Y4LCAweDg5M2RlYzgyLCAweGFmMjg0MzcxLCAweDM0ZTBmOWRhLCAweDJjZDViZmU0LCAweGU1ZTBmZTQwLAorCTB4NWM1MTM3M2IsIDB4NjE0MDc5NzAsIDB4NjlmNzA1MmUsIDB4MTYyN2VlNWUsIDB4NDdiZDU4ZjgsIDB4ZGY0YmYxYWYsCisJMHg5MzE5MzZhZSwgMHg3N2U5ODRjNywgMHg2ZTM2OWI0NSwgMHg1OGFiYjM1OCwgMHhmNmY2ZmU1MywgMHg0NDBiMjU2OSwKKwkweGZjYjBhMWM4LCAweGEzZWY0Njk5LCAweDFlZjQ5NWZiLCAweGQ0N2VhNzZkLCAweGMzZjhkMmVjLCAweDQ2MWNlZTk3LAorCTB4OTdmNTk3ZWIsIDB4NzdhZDM3MzEsIDB4NjY4MTZiNTksIDB4ZjM5NWFjZGUsIDB4NDlmOWJjNDksIDB4ZDRiYjQ1YmEsCisJMHg0NjllNzMxZiwgMHgwMDhmZmJjZCwgMHhmZjA4ZmVmZSwgMHg0MzUzZDJmZiwgMHhhOTJkMWU2OSwgMHhiYTQwZmZiZSwKKwkweGNhYzNjZjA5LCAweGRhYmYxYWZjLCAweGIwMjdjNzI0LCAweDdlZTE2NjU2LCAweGZmMjNhMDQ5LCAweDUwODFlY2U1LAorCTB4NmZmZmE3MmEsIDB4NzFkMWY3MGYsIDB4ZmVlMzA1ZjYsIDB4Y2EwYmVlYmYsIDB4Y2MzOTcxMjYsIDB4MGMzNjE0ZGEsCisJMHg2YWE3ZTMxZSwgMHhhMGJmYjRlZCwgMHhhN2M1MmJiZSwgMHg2MTZiZWI5NSwgMHhhNDVmMmQ0NywgMHhkNDUxNzdhZCwKKwkweDVkZWEyOGJiLCAweDY5MTJiZmM5LCAweDI4MDUyOTlmLCAweDBkN2Y3OGQ3LCAweGNmZjM4ZjgyLCAweGEwYmEzNTFjLAorCTB4NmUzNGY4ZGUsIDB4M2QzOTE2YzcsIDB4NmNlZjUwOTcsIDB4NDM4ZTI0YjMsIDB4NGIzNmNhN2YsIDB4NTJmNTAwNWUsCisJMHgzOGJhZmFmZiwgMHg0ODMzNmQxZCwgMHgwMzNiOGEzZiwgMHg1ZmZlZDZlMSwgMHg4OGE4YjY3NywgMHgwZmIwN2RjNywKKwkweGZlNTg3OTAwLCAweDhhMTY0MWU4LCAweGFlMzc1MzkwLCAweDAxY2IzYzUzLCAweGVmMjE3NmRlLCAweDdkN2NkY2VhLAorCTB4NzFhMGVlNzUsIDB4NWQ5M2Y0MjgsIDB4ZDM5NWU3YzcsIDB4MjM1MTVmYjEsIDB4MDhkNGU1ZGEsIDB4NDE5YTVmN2YsCisJMHhjMWNjY2ZiMywgMHg4ZDI1NGUzMiwgMHg5YTljZTNjYiwgMHhlYTE0MzJhMCwgMHhhM2RhZWY2NSwgMHg4NzVmZDhhOCwKKwkweGJiMzM3YTQyLCAweDQxMTMwMDA5LCAweGRjMjVkOTU3LCAweGE0YjFiOWJlLCAweDI2MzY1OTVkLCAweDVkNTY4NzBjLAorCTB4ZTAwNzE4ZjUsIDB4ZWFkZDM1YTcsIDB4OGY3MzdkNDYsIDB4MGQyNDM3ZDMsIDB4MTgyMjc5ZTcsIDB4ZjhmY2VkYzQsCisJMHhkYTJhM2QxMywgMHg3YTc1M2ZlZiwgMHg2MTljZDIwYSwgMHg4ZWY0YjgzOCwgMHhkNmE3ZDQ2YywgMHg2ZDllN2MxMywKKwkweGFlNjNmYmZkLCAweDRkYTIyODY3LCAweGRjZGRhYmZlLCAweDIzYjNkMTllLCAweGE0ODdkYjhjLCAweDhjMzdkMmFmLAorCTB4ZTcyN2JkMjQsIDB4ZjQyMjllOTcsIDB4M2RmMzNhNDUsIDB4YWRmYWEzNjcsIDB4NjhjOWYwOGMsIDB4ODYxYmU5M2QsCisJMHgyY2Y2ZTZlZiwgMHg4MTU1NzdjNywgMHhhZmJlMGY3NywgMHhhOGFhYjhjYSwgMHg2YzE3ZGUwNSwgMHhhMTRiYWEwYiwKKwkweDYyYmJjYmRkLCAweDg1Y2I4M2ZiLCAweDRjNzU4MTNlLCAweDc1YzlmNWMyLCAweGM4MmU0OTVjLCAweDdlMzg4NjdhLAorCTB4ZDYwZmM5MGEsIDB4MWZmN2IxMTksIDB4MmY3ZDIyMzAsIDB4MjE2ZDM0N2YsIDB4YTM2ZWI3Y2UsIDB4MzA5NDk5OTEsCisJMHhmNGVhN2ZmYywgMHg2NGY5YzZjZSwgMHgwODJiYjQ3NywgMHg5M2RmZTkxYiwgMHgxZGZmNGFlMywgMHhmY2ZlNDc3ZSwKKwkweDk2ZjkyOGM4LCAweGZlNWM1ZmQzLCAweDJjZjdhNzVmLCAweDFiNjc5NDhmLCAweDY5Mjc4NDhkLCAweGM3ZTc4NzNmLAorCTB4NjlkNWZkZWQsIDB4ZWFiZWNmNWMsIDB4ZjljMTJlZjQsIDB4Mjc2ZDc0MzQsIDB4M2RhYWNmN2YsIDB4Zjk2MzFhMWYsCisJMHhlMmY5YTNhYiwgMHg2YTU0NzA0YSwgMHg2ZWEwYmVmOCwgMHhlYjgwMzliZSwgMHgyNTU0N2YyZiwgMHg2OGRkYTgzYSwKKwkweGRkNTkzOGE0LCAweDlmYjhmYjMzLCAweDQ2ZTYxZWU3LCAweGIxZDc1MTM5LCAweGUzMGU1OTRmLCAweDRmYjMzZWQ2LAorCTB4ZDcwMTExNTksIDB4MDUwMTc1NDEsIDB4MmVjMjMzZTcsIDB4YWZjYjkwZjksIDB4M2Y0N2JhNjgsIDB4ODcyZGRhMzIsCisJMHg5YzRlNWMyZCwgMHgxNWY5YjcyZCwgMHg4MzU5ZWI4MCwgMHg5ZGViMGVhZiwgMHhmZGJhYjJjZCwgMHhiYzNjNjFmOSwKKwkweDExZmE2ZmI5LCAweDNmYjAzN2NjLCAweGIzZTIwYTY3LCAweGQzM2JiNzU1LCAweDQ3NWFmNTBjLCAweDVmNDhkZDE5LAorCTB4MzZmYTc1M2YsIDB4NTQ1MjVjMjMsIDB4NGZiNjI3NmYsIDB4ZDdiYmIzNGUsIDB4ODk5NzViNDMsIDB4ZmJiY2ExMTUsCisJMHgxZjE4NzBiYSwgMHhlZmUzMjc0NSwgMHg4NWQzZmNlMSwgMHg5MWRiODg3MiwgMHg4MTNmYzg0NSwgMHhhN2I0YmIzNCwKKwkweDM2MWRhZTQ4LCAweGM3M2M3NWYwLCAweDllZmY3Y2Y4LCAweGU4OTA3OWVhLCAweDhkMGE0OGY4LCAweDU0MTc1ZDliLAorCTB4N2Y5ZDlmZDAsIDB4NmI5MjM5ZTYsIDB4OWQzMGZmYjIsIDB4ZTQ4OTFlNzksIDB4YjNjZjJiZGYsIDB4NTZmNDg4YzMsCisJMHhmOTUwZTQyYiwgMHg4Zjk0N2JhMywgMHg0YmZkZTYyMywgMHg2ZTkxZjQzMCwgMHhiYTAxOWZiMiwgMHhmZGY3ZDFiNCwKKwkweDNlYThkMzMzLCAweGJkZjBiOTMzLCAweGUxNmFlZDQyLCAweDc5MDg4YWZiLCAweDQzMTFkNzIzLCAweGY1YzNlY2VlLAorCTB4MWNmNDRlZDgsIDB4YzgyNzcyZTQsIDB4YmU2MjhkZmQsIDB4MTU3Y2Y4ZDEsIDB4OWE3YzFmZTUsIDB4ZGU5OWVhMDYsCisJMHgzMTIzZmQxYiwgMHg0ODc4N2EyZSwgMHhlNTI3ZjUwMiwgMHhiZWRmMzQ0MCwgMHhlNTFjZTgyYSwgMHhmZTQ2Y2VhNSwKKwkweGU1MmJiMjVhLCAweDIyYmQ2NGZjLCAweDM0ZmVjNTY3LCAweGMxMGY0MzgyLCAweDRhOTc3ZWExLCAweDdhMzJhOWViLAorCTB4YzExMWRlODcsIDB4ZmQxNmJmMGYsIDB4MDNmOWI4MWQsIDB4MDdmZGNhMjMsIDB4YTI1ZGZkZmUsIDB4ODUzNmZhYzcsCisJMHhlZGFjZjFlMiwgMHhkNDNjZTM1ZCwgMHhmNGE3ZmU0NywgMHhlMmNlNjc2OCwgMHhmMWRiMDEyNiwgMHhhNzg0YmJjMiwKKwkweDJlNWM5ZDU5LCAweDUzZWU3N2Q3LCAweDc0YzJkOTk3LCAweGMwZTY3ZjlhLCAweGY1Njc0OGFkLCAweGZiODYyNjFkLAorCTB4ZGZiZmEwMjIsIDB4ZTlhMjdjMjAsIDB4Y2E0N2MyNTQsIDB4YjRmODc4ZGQsIDB4OTQ3MmUwY2UsIDB4NDdlNDhkZjksCisJMHgzZTU0ZmQ4NSwgMHhkY2E0MjlmYSwgMHg0ZWFhN2JmZSwgMHhmYmY4MDlmOCwgMHgxY2JjNjkwYiwgMHhhN2RmMWZhNiwKKwkweGRjYjA4ZjA4LCAweGU0NWYxMGI1LCAweDYwM2EyOTlmLCAweDViYjg3ZGM2LCAweDVhN2YzZjIxLCAweGU0Njc4NzI1LAorCTB4YzZjN2FhYmMsIDB4NTRjZTliOTcsIDB4NTBkNDM3YTEsIDB4NTg3YjFjZGUsIDB4N2ZjYmY3YmUsIDB4ODEwYmZlZDEsCisJMHhlNDFmNzg2ZiwgMHhkNDEwZDllZiwgMHhkMWZlNzJmMywgMHg3Mjc3Y2JmOCwgMHhjZTgzMWI3ZCwgMHgxMWQ3MWJmZSwKKwkweDNkYTRkZmFkLCAweGM5ZTZlOTIwLCAweDhmNDZhYTVkLCAweGVhNDY5ZGQ4LCAweDczMWIwZWNmLCAweDcyOGVjNzljLAorCTB4NjFkOGNmMWUsIDB4Yzc2Y2ZhZTAsIDB4ZTUwMDczN2EsIDB4NzgwYjliYzksIDB4YTE3ZDk5NWUsIDB4NDNjZjg4MzEsCisJMHhmODc1YTViYSwgMHgxZjM2NTBmZCwgMHg1YmE3NTViZiwgMHgwZGQ2ZTU4MywgMHg3ODQyZDYzNiwgMHg0YjNhMjRmNSwKKwkweDE5MTI3ZTkxLCAweDFlNWM4Zjk3LCAweDk3M2NmMDNlLCAweDViN2U3NTY3LCAweGViM2ZjMTgwLCAweDUzOTc3MzdjLAorCTB4ZTJjZDM5ZGMsIDB4ZjMzM2I4YzYsIDB4YjNjZTM0MWQsIDB4ZDcyYmE0MGYsIDB4MmU4ZGZiNzMsIDB4ODNhYjNmNzgsCisJMHgwM2M0OWZmMywgMHgyZmEyNTNjOCwgMHhhZTEyMGZjOSwgMHhiODcyNzg2MSwgMHhmODkyN2U0YiwgMHg2N2Y0YmJmOCwKKwkweGE3N2NiZDAzLCAweGRhM2RhYWJjLCAweDQ2ZGJkYzc4LCAweGJlNGVkNWRmLCAweDcwNmMzYWNmLCAweGM3ODY5ZmExLAorCTB4NmZkMWUyMTcsIDB4YjNiN2JhZWQsIDB4YjUxZDgyNGYsIDB4N2EyZGYzM2EsIDB4ZmQ4NWJlNGEsIDB4MjdiZjg2YWMsCisJMHgzODE3YmMwOSwgMHg3NGFmYmViOSwgMHgyZGE5YmE3MiwgMHhhY2JlMjBlOSwgMHhmYzQ0ZDkzZCwgMHhlNWMxOWI2YywKKwkweDU2ODRlZDlhLCAweGNmZjYzMzFlLCAweGE4ZGJiZDYyLCAweDYzYjU5NTVkLCAweDU0NzdlNjFhLCAweDcwMzhhZTNkLAorCTB4NmU0ZjFmYmYsIDB4ZmNmMGFlZGUsIDB4YmQ3NzRmYjgsIDB4NzJmOTg4OTEsIDB4ZjJiMDJiZWMsIDB4ZTE2MjllMzEsCisJMHhlNGViOWRlYiwgMHg1ZWVjZTI3MiwgMHg3YmQxMzgwMCwgMHhmNjcyZjE5MywgMHg2M2ZhOTVmYiwgMHhjMjBhNjNjMSwKKwkweGZhYzA1NmIzLCAweDEzOTUzM2VjLCAweGVjN2U4NGZmLCAweDYxZWU0OWJkLCAweDllY2ZlNGIwLCAweDNmZWVlOWI5LAorCTB4ZWVjZmJjYzEsIDB4Zjc0NmUyOTksIDB4OTc4YjVhNjUsIDB4NjljZmE3ZTgsIDB4MDM3ZWUzNzEsIDB4ZjQwY2Y3YzQsCisJMHg3OGVmYWUxNywgMHg2ODVhZjEyMywgMHhhYmU5ZmE3NywgMHhkNzZlNTA4YiwgMHg3OTllNzk4YSwgMHhlMTBlYmY1ZSwKKwkweDdmYzllMWIyLCAweDZiZGY4YzliLCAweDA5YWE0YTAzLCAweGY4ZmJkOWM3LCAweGJlNjM2NzdmLCAweGYyNDY5ZWVhLAorCTB4ZmQzY2I1MTcsIDB4MTdmMzExYmEsIDB4ZmU3NjgxNzQsIDB4MDM5MjZmN2UsIDB4ZjlmZTlkZWIsIDB4ZWYwOGM5ZjYsCisJMHhmYTE2OGU5NiwgMHhlZGU3ZTY3ZSwgMHhlNGYwM2U1NCwgMHg3N2Y2YmRiZiwgMHgxMzc4ZTNmNCwgMHhjY2VmNThkZCwKKwkweDJmMDlmYmYzLCAweGYyOTUzZTc1LCAweGY1ZDFlMmRiLCAweGI5ZmI3ZDhlLCAweDhmM2Q0NGJjLCAweGNiOWYzMDdjLAorCTB4OTJkNzQ5MzEsIDB4NzkzZjRmN2UsIDB4YmQ0OGM0ZGIsIDB4MGFiN2RmMjEsIDB4MDI2YjRlN2YsIDB4MDk5ZjIzZDcsCisJMHhlMGFkYWRmZSwgMHg5ZWNmY2VmMSwgMHhmZGE3Y2NiNSwgMHgxYzM0MzE4MSwgMHg2Mzc1YzVmNywgMHgyZGRjNWQzOCwKKwkweDcxZDc1MWUwLCAweDQ2YzFhMTg3LCAweGRmOWZhOWVkLCAweDczZTNkZjAyLCAweDI3ZTdkMDJjLCAweDY0ODUyOTIzLAorCTB4ZDdjYTI1Y2YsIDB4MGZhYTU3ZjksIDB4YmZhMDI2ZjUsIDB4MWY0NWU2ZTcsIDB4ZWIxZjM4MmEsIDB4MmQ0MzI2OTgsCisJMHhmZTY5ZjNjZCwgMHhmOTFkNTYxZCwgMHg2YzZkNmNiZCwgMHgzOGJmZmIzZiwgMHhlMDJlYzI2ZCwgMHg1OWRkOTA3YywKKwkweDM5MjJlMzlkLCAweDhiMGY3MjYwLCAweDZiYjM4N2IwLCAweDI3MTgyZDdjLCAweGNmYWQ3ZWJlLCAweGJlM2MwN2FkLAorCTB4YjRlOGVhN2MsIDB4NzI3ZTUwNDEsIDB4Zjg0YzUyYTQsIDB4Y2Y1YzJiZDcsIDB4NGUzNDZkZjksIDB4ODFjMWZhM2QsCisJMHgzZTBiNzY4ZiwgMHhmNTMwNzc0OSwgMHhkYzAzOTIxYSwgMHgzMmE1NTAxZiwgMHhhYTdlNDZkNSwgMHhmNTEzOTIzZSwKKwkweGVlMGY0MmFkLCAweDczNmU3ZTExLCAweDc2NGRkZTVmLCAweDI2YmI2NzZhLCAweGVkMDYxZjYyLCAweGY3MmEzNjZjLAorCTB4ZjMxMGZkZTUsIDB4ZTdmODY3NGEsIDB4MTk3MWRlOTMsIDB4YTQ2N2JlNjksIDB4ZjI3ZTYwM2MsIDB4OGI3ZTRhN2IsCisJMHhiY2ExMWJmNiwgMHg1N2QxZmNjMSwgMHgyODVkZTU5ZCwgMHgzZDMzZTUxZiwgMHhlZmU0YmY4ZSwgMHg3NGI4ZmJlMiwKKwkweDE1Y2ExNzRmLCAweGEzNTUzN2I2LCAweDk1YzllMjBmLCAweGU3OWYzNzAzLCAweDBmOTVmYjdhLCAweDkwMWIwZTg5LAorCTB4ZGY3YzcxMGUsIDB4NWVkZThkNDksIDB4ZTgxNWMyNGUsIDB4ODkwZmE1ZjAsIDB4NzE3Nzk3MGUsIDB4NTVkMGRhZjksCisJMHhkNGZkYzQ2ZSwgMHg2OWQ3ZTEwZSwgMHg3NDg0ZjQxMCwgMHhiZmU4ZmI4NCwgMHg5YzY5OTMzYSwgMHhlMWExYzk4NiwKKwkweDBiY2VhNzI4LCAweDEyZmYzYmJhLCAweDNhNDNiN2E3LCAweDBlMDFmOTFkLCAweGRlZGQxZWVkLCAweDhmZDQwY2EyLAorCTB4ZjA5NzhkNGEsIDB4ZTZmODAwZGQsIDB4YTNkYWYzNzYsIDB4ZDdkNTY3NjgsIDB4NmJmMjM3MzAsIDB4MDdlMGE3NDMsCisJMHhiZTExN2JiMCwgMHhjYmQ1NWQwZCwgMHg2OTQxYmZiMSwgMHgwZGRmYzkzMywgMHg0MWI0Yzk3NiwgMHg2M2E4NmU1MCwKKwkweGQ5NmZjOGE1LCAweDQyNWUyYWJiLCAweDdjNWQ2MGJhLCAweDAzNWQ5ZTNmLCAweDRkZDIyY2Y2LCAweDlmNWJiZDVhLAorCTB4ZGI4ZjdhOGYsIDB4MmM4ZmQ3YmQsIDB4NzIzYmY2YTMsIDB4ZjJlNzE0NWQsIDB4ZjM4YTMxNTcsIDB4MTlmYjQwZWYsCisJMHg2OGQ2NWRmNSwgMHgzNmZiM2Y2ZSwgMHg1Y2M1ZGQ5MiwgMHg2NTM3ZTQwOSwgMHhkNjBkNzUzZSwgMHg2MjJmZjA2ZiwKKwkweGNkMTFkNzk0LCAweGI0MjkyZmM3LCAweDU4MDg2ODBmLCAweDU2NjgxZjI5LCAweDFhN2ZiNzE3LCAweDlmMWYzOGJhLAorCTB4NGY5MWYwOTMsIDB4ZTRhZGNmNDMsIDB4YzRjMTdmOGYsIDB4ZDBmZTExZmMsIDB4Y2U5YTVmMzcsIDB4MjY4YmVjZjUsCisJMHgzNTlmYjNkMiwgMHhiMGM3ZDg3YiwgMHhiYzg1YjdhMCwgMHg2ZGFjNzA5NywgMHhkZDIxZDdjYiwgMHgwOTkzNzYzMiwKKwkweGNjNGNiMWU3LCAweGY1YzBjZGEzLCAweDAzZDBiMjQ2LCAweDNjZjhkYjA1LCAweDc3ZTE3NGQ0LCAweGE3ODlkNzRjLAorCTB4ZTJlNzliNTEsIDB4ZTE3ZjkzZjAsIDB4Yzg4ZjE4OWMsIDB4MzllODVkMjIsIDB4Nzk3ZWJhMTgsIDB4ZWVhNGY4OTAsCisJMHg5YTVmZGUxOSwgMHg2Nzc4NTNjOSwgMHhmYjRhYmQwNCwgMHgwYjFlOWEyOCwgMHhiYmQ5YjhjNCwgMHg0YzI4MmEwZSwKKwkweGQxY2Q3N2IyLCAweDM1ZjVmOWYwLCAweGViMDhkODJjLCAweDJlOTc3ZWJjLCAweGQ5MWM2NTM4LCAweDllNDkwYjRkLAorCTB4NThiMjM3YWYsIDB4ZDIyMzJhZjksIDB4OTU1NmZkYjksIDB4YmY0NDJkZWEsIDB4MzZjZGQ1NzYsIDB4YjkzZmE0NzcsCisJMHhiM2EzYzEyYSwgMHgyNDU3MWRhMCwgMHgxMmRlZDhmZCwgMHg0YTlkMWI4YywgMHg2ZjExYmJiNywgMHhkMjVkZDJlMywKKwkweDViZDhkMzBlLCAweGRjZGZmNzAzLCAweGNkYTFiYzBlLCAweDFmZjcwZTNmLCAweGYzMDlmNTgxLCAweGRhMDlhZTI5LAorCTB4MGVkY2ZjOGQsIDB4ZjdmYjhmNjgsIDB4OWNmZWQ3ZGQsIDB4Yjg1YmRmZWYsIDB4MDcwNDAyZmYsIDB4NmY1NDk5YzksCisJMHg5ZDhmZmEwOSwgMHg1Y2I1ZGUwNSwgMHhiMWRkZDkzZiwgMHg5M2FhZjNkNiwgMHhjZGMwZTdhZiwgMHgzZWUyMTZiNywKKwkweDhkYWU2MWIxLCAweDU3ODFlMWY4LCAweGRlOWNhNTk0LCAweGJlZTIxMTQwLCAweDgzZjljN2RhLCAweGUxM2M3ZjAxLAorCTB4M2IyNDdhMjIsIDB4MWJjOWExYWEsIDB4OWM4ZjRkODgsIDB4YWVjMDFhNWYsIDB4ZTgxYjNiNDIsIDB4OTNiNzBkNzEsCisJMHgxM2YzOGM2ZCwgMHhiZmI5NGJhNywgMHg2OTE1Yjk0NywgMHg4ZDNlNGFjZiwgMHhiZjQ5N2JlNiwgMHgzNWZmN2NmZCwKKwkweDgxYmNmZGY5LCAweDgwNzllM2YzLCAweDNmN2JkMjAzLCAweGU5Y2NiZjlkLCAweGUwN2FlYjdjLCAweDE1YmVmODQ3LAorCTB4NDIyNWIxZjgsIDB4N2ZlZjQ3ZmUsIDB4MWZiODllNzAsIDB4MWVmNmYyOTAsIDB4M2E1MTc3YTcsIDB4NmZkZGExY2EsCisJMHhhYjUwYzY2ZCwgMHgyZjBkOGY5NCwgMHgzOTdlMTk2ZiwgMHg5NThjY2JiYiwgMHhmMDMzNWZhMSwgMHg2MGZkMjQ2YiwKKwkweDQ0NWVkNjhjLCAweDA5ZWEzZjRmLCAweGZlZDhiYWViLCAweDZkZDJiYjhmLCAweDNmM2ZjZGRmLCAweGFlZTUyZjMwLAorCTB4Nzk4MWQyZjQsIDB4NzNhOGU5MjksIDB4YWRiYjZmMTAsIDB4YTU4ZmI0MDEsIDB4M2U3YTI5MWYsIDB4NDk5ZjA0NGIsCisJMHgwM2ZkY2E3YywgMHhmZWIwMjFjNiwgMHgzN2VmODJmZCwgMHg4ODhmN2E4OSwgMHg4NGJlYzQ2NywgMHhmM2E1YzFmOCwKKwkweGY2Nzk0ODdkLCAweDZjOTFmNDcxLCAweGI1Zjk3ZGY3LCAweDJmNTIzOGU0LCAweDhjOGRkMzQ2LCAweGFhN2FlMGEzLAorCTB4ZDdhZmM0YzcsIDB4Y2ZlYzVmYjYsIDB4MjlmOGU4YTIsIDB4ODAwYjVmYzEsIDB4NmRkZTcwMzcsIDB4YzQxN2UwODYsCisJMHgxOWQ4Nzc4ZiwgMHg5OWY4MTNlNSwgMHg3MWUzMTUyNywgMHg3Y2UwOGRhZiwgMHgzODZmYjIzNCwgMHhmYTY2YjdiNiwKKwkweDkyYmE0NGJlLCAweDhmN2M1ZDdlLCAweDExNWFhYTcxLCAweDZiZGRhY2JmLCAweDdmOWU0NDA4LCAweGQxODMzN2I5LAorCTB4YjM3NmJkMzgsIDB4OTFmYzBmNWYsIDB4ODdkYmU5OWIsIDB4Y2MxNWZkZWQsIDB4ZjMzZDQ0MWQsIDB4MmI4YTE2OGYsCisJMHg4YTViODE4MSwgMHg4NTkxYTZmMiwgMHhlZmNlMTExMiwgMHgyMDVlZmIyNSwgMHgwY2Y3ZDVmYSwgMHgzOWUzYmY0NywKKwkweGRmMGUzNDI1LCAweGRhZmUxMDlmLCAweGZiNWZjMjEzLCAweGNmN2JkNzdlLCAweDE3YWQwMmJlLCAweGYxNmU3MmJmLAorCTB4NWVjZTkxOGYsIDB4N2QyMWU0YjQsIDB4ZTdmNGIwOWMsIDB4ZGRhMTI1YmYsIDB4OTJiOTgxN2QsIDB4NjkwZTc3MmUsCisJMHg1NWVmNTk5MSwgMHgyNzY3ZmMyMywgMHg3ZmZkYjFlYywgMHgzNzNjMGI2ZiwgMHg1MzJiNzg4YSwgMHhiN2MzZWQxOSwKKwkweDE5Zjk3MDY3LCAweGUzYzRiZjNlLCAweGI0ZWJlZmFkLCAweDFjZjkzN2ZlLCAweGRmZTFjMTkzLCAweDUwMWNlNzE5LAorCTB4ZDdkZjA2NjEsIDB4ZmNlMTBlNzQsIDB4NTBhZWQ3ZDgsIDB4ZGQ2NmFmYmMsIDB4NDFlYjNmZmEsIDB4YjVhY2Q0MmUsCisJMHg5ZjA5ZTkwNywgMHg3MWFiOGVkMSwgMHgyODNhODNmOCwgMHhiOTcwMzA5ZiwgMHhjZDczN2YwNCwgMHgwN2ZkNjE2NSwKKwkweGM4NDlkNGY1LCAweGM1MDc3ZTMzLCAweGZkMGE5NmJmLCAweGNkZTlhY2I1LCAweGExNWZhMWJmLCAweDQ5ZTY2NTQ2LAorCTB4ZjJjNzE4NDUsIDB4OWYwNDFlMWUsIDB4NGYyZGI1M2UsIDB4ZjJiZmYxNDQsIDB4YTNhNjc3NDcsIDB4ZDQ1OGNhN2UsCisJMHhhNmMxZjIyNiwgMHg1NWZlZDAzYSwgMHgyZmU4MzczYywgMHg2ZjY3MmY1OSwgMHgxMzI3NjRhOSwgMHgxZWRlMDAxZCwKKwkweDIyZjZmMGNjLCAweGUyNGEyZjFmLCAweDc3NDVjMTdlLCAweDA4ZmUwMzVhLCAweGYwNTdiODc5LCAweDdjZmQzNDYxLAorCTB4Y2RiY2U3MTAsIDB4MDExNTE5OTcsIDB4YWE2MTZmZWMsIDB4ZWZkNDZmZjcsIDB4NzIzNGU3OWQsIDB4ZmExMmJjZWQsCisJMHg1ZjQ4MjNjNSwgMHg0ZmRkZDg3NywgMHgyMmYyZWVmMCwgMHgwNWQyNjNmMywgMHgwZTMxNmJmYywgMHhiN2IxYTIwNCwKKwkweGJhZjg2N2IwLCAweGJlZTNhNDdjLCAweDVmYTFkZmJjLCAweGYwZTRkYmFiLCAweDkxYmJmMGJiLCAweGYxNzZjYmJlLAorCTB4ZTNmMTQxZTIsIDB4ZDIyMzJlNDAsIDB4ODU0NWMzNDcsIDB4Zjc2OTYxZTgsIDB4YWU1MWM3OWIsIDB4YTIyMWE4MzcsCisJMHgxYjY2YTU5MywgMHhhMmUxYjFlMSwgMHhkNWE5ZTljYSwgMHhkYjI0MzY3MCwgMHhhNGQ3ZWUwMywgMHg2MDMyZDI3YSwKKwkweDI3N2JmZTllLCAweDA5M2M1MzI1LCAweDE3YzM4OWY4LCAweGUzOWM0NTJhLCAweDM3YzMzMmY4LCAweGY3ZTAwMzI4LAorCTB4MzZmMTM1OTAsIDB4MzA1ZDdmZGMsIDB4OGYzMDkyYmIsIDB4ZjQwOGQxYWQsIDB4ZTc3NTM1NzAsIDB4NDNkODQ3MzUsCisJMHhhNWFlYzcyYywgMHhmZWI3ZWU4MywgMHg2ZTVhZjM4NiwgMHhhZjUxMTlmNiwgMHhkMTM0ZjBhZiwgMHg0OTQ1YjE3OSwKKwkweDk4Yzc1MmMxLCAweGQyNGZiYzQ4LCAweGY1ZmQxYTVmLCAweGM4NDk3ZWYxLCAweDNjOGRmNzk3LCAweDlkMjA2NDZmLAorCTB4Y2Y2YzNjNzMsIDB4MzliMmY1MTAsIDB4Yzc5ZmJjYmYsIDB4ZTdjMzllNmEsIDB4YmI0Mjc4MjgsIDB4NzI4ODg3ZjcsCisJMHgxNzBmMjg5MSwgMHg3OTc5ZDJmNSwgMHhmNzk3ZTA5YSwgMHhkMTdhZjFjNywgMHhlMzE1MmNlMywgMHg5OWUxOTk3YywKKwkweDc2ODI3MDhjLCAweGM3ZDIyMzQxLCAweDY3M2ExNjZiLCAweGZlNDA0YWM0LCAweDkzNWJiY2ExLCAweGM4MmM3NjRiLAorCTB4NzcwODY5YjksIDB4NGM5ODI3MTgsIDB4NjdhNDRjZjUsIDB4NDFjODEzNTgsIDB4YTk2ZjY3YzAsIDB4YjViM2UwOGIsCisJMHhlMzA1ZTgxYywgMHgyODlhYWY0MSwgMHgyYmYxMjQxZSwgMHhjZjhkMWFmMSwgMHg3N2NhMTk4NSwgMHgxODFmNGZjYiwKKwkweDUxOTg1ZWJmLCAweGNkN2UzMDNhLCAweDE3YzI1MGQ4LCAweGYzOGM0YmQxLCAweGY1ZjBmMTFmLCAweDAzYzczYjZiLAorCTB4MGNmMmViZjAsIDB4YjFjMTgzZDIsIDB4NDliMzdjOTEsIDB4YjVjYTUxYzAsIDB4NzhiNDEzZjcsIDB4ZTM5ZDNjZmQsCisJMHhiYmQ0NWVhMSwgMHhkYTFmNzY4NCwgMHhlMjNlZWVkMSwgMHg3ODUzZjdiZiwgMHhhZTAyYjRmZCwgMHhmZTVkYTQ5NywKKwkweDVmMmUwMjRmLCAweDUyOWY2YmE2LCAweGQxZmI0NGNmLCAweGUyZjIxNGJmLCAweDQ3ZWU3NGNiLCAweDhkZGViYzA3LAorCTB4MDlmYTk1ZjMsIDB4MTkzMDRjZTQsIDB4ZWJkMTc4ZjgsIDB4NmMzMzkyMjYsIDB4ZDVlNTFmNjMsIDB4ODNmZmJkNDAsCisJMHhlYTY0NWFmMCwgMHhmNDE1MzViYiwgMHhkZWMxMGZjYSwgMHhiYjUxMTYzMSwgMHgwNjQ3Mjg0YiwgMHg0OGM3ZWZlYywKKwkweGQ0MzNiMGJhLCAweDBlMTlhZGRiLCAweGY0OTQxZjZlLCAweDQ4ZDdiOGYxLCAweDBjYTVhZWJlLCAweDY1NzI4N2U0LAorCTB4MjEwYzYzZmMsIDB4NmJmMGU0MGIsIDB4YzE0MmJmMjIsIDB4NjIxNGFlYmMsIDB4MDdmNjE3NjcsIDB4OGM5N2ZmNzAsCisJMHhhM2RjMzBkMiwgMHhlODIxM2JjNywgMHg0NTBjZDFlMCwgMHhiMjE1YmMyNSwgMHhhZGRiYzQ0MiwgMHg1ZjZlN2VlZiwKKwkweDEzOWU1ZDBjLCAweDRkOTM2NWU3LCAweGU3ZWM3NmJlLCAweDkxNmZkZGVjLCAweDE4YzI3ZTlkLCAweDhiNjZkZTFjLAorCTB4N2MxOGRkZjEsIDB4ZmMyNTIxZWMsIDB4ZjRhN2I2ZmQsIDB4OThkNWUzN2UsIDB4YzFmNjdlN2YsIDB4NGJkZDYxOWIsCisJMHgxYzZlZjQ3YiwgMHg1ZjNkZTk3MiwgMHhlZDFlMzNiYywgMHhjNTAzMWVlYywgMHg2ZmRmNDA2YiwgMHg0ZGRlNzE1MywKKwkweGExM2NhZWRjLCAweDY3YzFkMmQzLCAweDNkZjc2OTc3LCAweDkwN2EwYmFmLCAweGRjYTU3MmU3LCAweDE1N2NmYTkxLAorCTB4OTM3OTczNzMsIDB4Y2IxYmI4OTAsIDB4M2I3MWRkMWYsIDB4Y2U1ZGNiOWQsIDB4MDAzZDg3YmMsIDB4NjY2YmQzZjcsCisJMHgzYjdjNWQ5MiwgMHhjZjVlNTFmMywgMHgzOWVkNTZiMiwgMHhkYTZkMTVkYiwgMHgwNzNiZWRmMiwgMHgzOTI1YzM5YywKKwkweGZkMTAyYWJjLCAweDJiYTVmODVlLCAweGYzZmJlYjYzLCAweDMzM2YyZTgyLCAweDdhZmRmODhhLCAweGZkZjhjYzUzLAorCTB4MDlmYzg1ZWYsIDB4YjRmYmQ5YzcsIDB4MmY1N2ZiZjEsIDB4OGM2ZmJmMWYsIDB4ZWQ4N2RmOGEsIDB4M2RmOGU4ODgsCisJMHg2MTEzZjdlZiwgMHg5MWJmNjA2ZiwgMHgyYWNmZmM3MSwgMHhhM2UzYWY2MiwgMHg1OGI3NjkwYywgMHg5ZjE5ZjkzNSwKKwkweDEyNWJiMDBjLCAweDQ1ZTM3YmU5LCAweGQ4Zjk5YzRiLCAweDJiNjdmZGU4LCAweGQ3ZDM4ZjYzLCAweDVmMzY4ZTNmLAorCTB4ZTc5ZWRjMjAsIDB4YjVmZGM4MDksIDB4OGJjNjkzYTQsIDB4NjU2N2E0NTksIDB4ZTFjN2RhNTksIDB4M2RmNDM5NzYsCisJMHhmNGJhYmNmYSwgMHhmOGJlNGI2ZiwgMHgyY2U2NjE1OCwgMHgxNzZkNDdmMiwgMHhmMjliYmM3NiwgMHhiYjQ2M2YzMywKKwkweGJhNzJmOTA4LCAweDRjMTBiNWViLCAweDI3OGZkOTcxLCAweDg0ODc1NzBlLCAweDFkN2EyNmY5LCAweDQyNjc1ZjQwLAorCTB4OThkOGYyMTEsIDB4ZmQyMzRmNjksIDB4M2E2ZTY2ZWIsIDB4ZmVlODI3OTcsIDB4ZThhYmJiZDYsIDB4YmRmZmNmN2MsCisJMHgzMjIzMzJhNywgMHg1M2Y3MmE2ZSwgMHg4ZjY5NDYwZCwgMHg5NmZhMzRkOSwgMHg2NWUzZTk0NSwgMHgxZDkxNmY1ZCwKKwkweDcwZDdmNjA2LCAweDdhN2YzZTE0LCAweGMzZDI2ZWY1LCAweDFkMzc5OTJiLCAweGQ1ZjdiZGU5LCAweGU1NmU3NDExLAorCTB4Mzk2MWVhZGIsIDB4NGJmYzliOWYsIDB4MzViZjNjMGMsIDB4Mzk4N2VjOGQsIDB4NzUzNzNlNjIsIDB4Njc1MDNiNzMsCisJMHgxYzY4MThmNiwgMHhkMjM5NzMwZiwgMHhlN2NkOGI2OSwgMHg4NTU0NDIwYiwgMHhmM2ZkNzVmMiwgMHg2MzFkZTc0NywKKwkweDE1ZmNjNDkzLCAweGJkZjAwZjZjLCAweDUyZDkzYzRlLCAweGRiY2UyNjVmLCAweDMxZWFlMzg0LCAweDg5OTAyNjBkLAorCTB4NmU4OTk2Y2YsIDB4MjhhNzNlMTcsIDB4ODNjZjk1NWUsIDB4NmIxYTc5ZTMsIDB4M2FmYWMxY2EsIDB4ZDdjZjQ4NzMsCisJMHhjNzQ4MzMwOSwgMHhhMmYwZmRmNiwgMHgzNzk0NWRiMiwgMHhlYjcwYmRjZSwgMHhiMzZmN2MwYSwgMHg4YTMxM2M5MywKKwkweDA0Y2Y0Yzc5LCAweDZkZmM4OGI5LCAweGI3NWM2NjY2LCAweDRkM2MxNmM5LCAweGY0ZjEzM2YxLCAweDhmODhiODU3LAorCTB4ZjkxODQzZmQsIDB4MDc1ODEyNDEsIDB4ZDliNTNmOWQsIDB4YjE3MWY5Y2UsIDB4YjA1MGU2MGUsIDB4MDg1YzcxNmMsCisJMHg5Y2UyN2VlMiwgMHhmM2M3ZTZjMywgMHg2NzJmMjBjNCwgMHg1ZjNmYTI2NSwgMHhjNDRhZDVmOSwgMHhlZTY3YzgwYiwKKwkweDVkZjc4YTE3LCAweDExZjNmMjBkLCAweDg4YTVkZTQyLCAweDc5MDhiNWY5LCAweDhhZGNjNTk3LCAweGU0ODBjN2I4LAorCTB4OTVmNmZkZGQsIDB4MjY3ZWUwMzcsIDB4YTNmNzc5OGQsIDB4NzEzODdiYmMsIDB4MzJmZGM1MDYsIDB4OTNlNjhmOTgsCisJMHhjOGQ1NDMzYSwgMHg1YjU3YTcyZCwgMHg0NmFmOThjZSwgMHhlNzA1M2JjYiwgMHhiZWQzZTU5NywgMHg5NDEzYjMzNywKKwkweGJkMDRhNDk3LCAweDY5NTI5Nzk5LCAweGZkMTIzNjFmLCAweDM3MjEwNjMxLCAweDNlNzg1OThlLCAweGNmMzE2NmMyLAorCTB4ODg1MzMzM2IsIDB4Nzg1OThlNmUsIDB4YjZiN2MyNWUsIDB4N2RkYWRjNWIsIDB4M2YwYTQzN2QsIDB4ZGQzZTdmYmYsCisJMHhjMGYxYzY2YywgMHhlMTEzYjk4ZSwgMHgwN2NjNzYwNywgMHhkZmNlMTY3ZSwgMHg0MWQyOWMyYywgMHg2ZjliMDI3OSwKKwkweGUwMWJkYzU0LCAweDZiYmI2NmZkLCAweGViYTQwYWJkLCAweDdmNzBhOTlmLCAweGM3MjhlYThmLCAweDNjZjY5YzdjLAorCTB4NDRmMzFiODcsIDB4ZjdiZTQ1MWIsIDB4ZjZhMzhiNjYsIDB4OWE2M2YyMTksIDB4YjdkNjNkNzgsIDB4ZWQ5NmUzMTksCisJMHhhYzBlMWQ1YiwgMHgzN2Q5NTY5NywgMHhhYWZiODhjZCwgMHg5YmIxY2MxNSwgMHhhZmY3YTBjNSwgMHhiZTYwOGY4MCwKKwkweGUwMzJjNzNmLCAweDYzZjQxMTQ5LCAweDg1YmFlMjNkLCAweGVmYmUyMGQ2LCAweGYwMTc3ZmMxLCAweGRjMzI5NGYyLAorCTB4ODJiZmYyYmYsIDB4NzczYTQyZWUsIDB4ZDI3YTNjYzksIDB4ODVkZDhkOTcsIDB4YmM2MGQ4NmYsIDB4ZTQ4NWI5ODIsCisJMHhmMjU2ZjdhZiwgMHg3MjEzMmZiOCwgMHg1NzFjYmM2MCwgMHg2MWI1ZDlmMCwgMHg4NWVmYTdiYSwgMHg1YmI0M2NhMiwKKwkweDRjZDM3ZmY4LCAweDgwZWJhZTNjLCAweDkxYzRjYTIxLCAweGM2OWZhYzQzLCAweGU0Y2RjMWY5LCAweDZiZDNlNzFmLAorCTB4ZmIwZmY4NTgsIDB4NGZmNzBjYWIsIDB4Zjg2YTY5NzIsIDB4NjBlZjk4NzMsIDB4YmJiMzIyYTgsIDB4OGRlYTBlYTUsCisJMHg5MWZiODM1NywgMHhjZjE1YWZhZiwgMHg1NDNjZjE0MiwgMHhlNWU5MjM3ZSwgMHg2NWNkOWQxZSwgMHgzNzNlNzFkNCwKKwkweGMzYWJhMDE3LCAweDk0Yjg0N2FiLCAweDYwYjRiNjM5LCAweDQxMjlkNzNmLCAweGQ4Y2RlNjdhLCAweDlmZDM4MmRlLAorCTB4Yzk0Y2ZjMjMsIDB4OWUwMGM2OTksIDB4MDA5OTZiMzcsIDB4YzhiZjI2NzgsIDB4ZmZhMzBmOWYsIDB4YWMyZmZmNWEsCisJMHhjYzc0ZjExOCwgMHgyNzllZjUyMCwgMHhiOWZmZTc4OSwgMHgwZWQ1M2Q2OCwgMHhjZTk3NTkzZSwgMHhjMjJlN2IzMywKKwkweGNmM2YyOGY5LCAweDhiNzRkMGM2LCAweGE5OTdmZWY4LCAweGQ3OTc0OTU1LCAweDMwMGYzY2JiLCAweGU1Y2Y0YjI1LAorCTB4ODcxZTBjZTMsIDB4YTY2ZjljNmQsIDB4NzE0NmU1YmMsIDB4N2Q1MzAzMGYsIDB4ZjA4YzNmZjksIDB4YzViOGM4YWYsCisJMHg3ZjM2MDZiYiwgMHg0NmZkOGM1ZiwgMHgwN2I3MTY0YSwgMHhmZGMwZGNlNiwgMHgxZjIyOGRjMiwgMHhjYzRmN2U0NywKKwkweGJmYjI3ZWUyLCAweDM3N2I0ZTY0LCAweDFlM2RlYzkzLCAweDk0OWRmZDZmLCAweDQ4ZDkyMzVmLCAweGYyMTE1Zjk0LAorCTB4NWYyNDhmZTUsIDB4Mjc4ZWRmY2EsIDB4ODVkZmI0N2YsIDB4MjllNzk5ZmMsIDB4NDBiZWQwMzYsIDB4ZWYyOTIxYzgsCisJMHg2OGVmMjJiZCwgMHgxMDE4ZjMwMSwgMHgxZWUyM2Q0ZiwgMHhhYmU1YTM5NSwgMHhjY2RkMGU0OCwgMHhmN2ZlZjQ3YywKKwkweDAwZmYzYzE1LCAweGZkODBkMzA4LCAweDZiNDMzNGRkLCAweDZhZjNjZDNmLCAweDhmY2YzN2NiLCAweDNlMzhhZmI2LAorCTB4N2MwYmI4ZTQsIDB4YTQ3M2VmZGEsIDB4NmI0MzNjOWQsIDB4ODdmYTJmMjcsIDB4Y2Y0OTkyYWYsIDB4ZmVhMmZjNjcsCisJMHgzZTcwZTBkMiwgMHgzZTU0NjM1MSwgMHgyN2M4ODM1MSwgMHgzYzJhZWM2YSwgMHg0ZjkxMTY5NCwgMHhmM2NkZDhkNCwKKwkweGFlYmExYTg5LCAweGVkYzQ0Zjk0LCAweGIwMjlhZjI5LCAweGRlMjRlMzFmLCAweGVjOTRkMjVhLCAweDcyN2Y5MTBkLAorCTB4OGE0ZmYzMTAsIDB4YWY2ZTc0YzIsIDB4MGMzY2YzYjAsIDB4YTJiY2ExZTYsIDB4Y2U5NTg3MWMsIDB4OGFlYWI0NWQsCisJMHg5YWRiOGZjOCwgMHhkZGY4ZDc2OCwgMHg1NTc3YWViNywgMHhiZmU5M2Q2MSwgMHg0ODQzZjk5NSwgMHhjM2Y2YjEzNywKKwkweDVmN2M1OWQ5LCAweDdlZTE0M2IzLCAweDMzMDJmZjc0LCAweDA1OWQzYmVkLCAweGMxNWM0ZDVlLCAweGQxYzc2N2E5LAorCTB4YTY2ZWY4YWYsIDB4M2YyN2Q2NGIsIDB4MmY4MzBlYzksIDB4MDE5ZTE4YWIsIDB4ODk3OWQxODUsIDB4YjY3YWY2ZmUsCisJMHg1MTkwZmM5MSwgMHhlYTk5Y2E3MiwgMHgzMzgwMzhhNiwgMHhmNWY5MmM2OSwgMHg5MjE3NzVlNywgMHgyY2Q5OTIzZiwKKwkweGI4NGE2MWVlLCAweGRiNzM3OWZmLCAweDY5ZWJjYzU1LCAweDk3NTc2ZWVjLCAweDM3NzRjMmRiLCAweDQzZWM0YjM2LAorCTB4ZjQ4YWNjYWMsIDB4N2JkN2VmZGEsIDB4YmQ3ZTQ0Y2UsIDB4MzBiNzkzNjQsIDB4MTlkN2RhMGIsIDB4OGJiZmU0ODMsCisJMHgxZjdhNTdhMCwgMHgyZWRlNWY0ZiwgMHhlMTUwYzVlOCwgMHhlNjAyYjA1ZCwgMHhkMThlZmJkNywgMHgwYTZiZmI4ZCwKKwkweGNmZmY0MWNjLCAweDdlNGM5NGJmLCAweDIzMGU3NTQ5LCAweDljYjFiNTNkLCAweGY0NWU5M2NiLCAweDNlM2FjMTkzLAorCTB4ZmFmN2U2NGQsIDB4YTQ2NmFjNmMsIDB4NGNhN2NmNWYsIDB4YzU1ZTNhMjMsIDB4ZTgzZDg3MDIsIDB4NzQwNWRiNDcsCisJMHhkMmNmNzkxOCwgMHg4ZWI5NmQxZSwgMHhhOWZlOTA3NSwgMHgzZDAwNjY3YiwgMHhmMjk0N2M5MywgMHhmNGI5OWViOCwKKwkweDc0MWI4YzA2LCAweGExYjNkYjZhLCAweDI4NWMzOTVhLCAweGJjZjE0N2Y0LCAweGZmOTgyZGE5LCAweGYyZTNhYzUwLAorCTB4MGY3NzJkOTEsIDB4ZjVmYjQzOWEsIDB4MmM0ZjhlNDUsIDB4YTE3ZjcyMjgsIDB4ZWJhZWNlNWMsIDB4NzNkMjlmYjUsCisJMHhhMTdhZTdmZSwgMHhhZDFmZjQ1NCwgMHgzZDg1NGFiZiwgMHgxN2U0MTkzNywgMHg3ZGE1NmZlZSwgMHg3Y2E5ZjUwNiwKKwkweGNmYWRkNzUwLCAweDU5ZTc4NWQ0LCAweGJiNDlkYTIyLCAweDg5MGJlYTUwLCAweDhjMDlmMmFmLCAweGJiYjU3OWUxLAorCTB4MWE3Yzg0YjIsIDB4YmUyMDg2YzIsIDB4MTNlMjdmYTEsIDB4Mjk1ODM3MDUsIDB4ZjcxZmJmZDQsIDB4ZjE4YWQ3ODUsCisJMHhhOGZjMWU4MCwgMHg3MzNhZmRiZiwgMHhiMzZiZTkwMCwgMHhkMmZhNDRkMiwgMHgzYzNmZjY4YywgMHhkMjNlMmFiNywKKwkweGUzNWVmZjBiLCAweDRjN2QyM2Q3LCAweGRkMzc0ZDY0LCAweDk5MjZmNTAwLCAweGI3MjhhYzdiLCAweDMxZmU0ZTgwLAorCTB4NTg1YTdlOTIsIDB4YTI5ZjZmMzAsIDB4N2VmYTIzYTEsIDB4OThlZGY5MzYsIDB4NWFmNTI0NzQsIDB4OWVkY2Y3ZjAsCisJMHg3NGJjYzU5OSwgMHgwZmU3OTNjZiwgMHhhODNhZWVkYywgMHhkODI2N2RmMCwgMHhlZWQxMDc5ZiwgMHg5MzM3NWI3YSwKKwkweDJjMjY2NGU4LCAweDM5NTVlYjAzLCAweDllOWZmOGI0LCAweGRmNDcyZGE5LCAweDVhZDBjNTBmLCAweDQ4NzQ0MzI4LAorCTB4OWM1NDA2NzgsIDB4NTFiZGY0NGYsIDB4OThmNzI5MWUsIDB4YjNlNWVlNTYsIDB4ZjhkZTc4YWYsIDB4NDIzZmMzOTYsCisJMHgxZDc1ODNmZiwgMHgwZWY2ODkxYiwgMHg4ZmM0YWE1OCwgMHgyN2IwZjRkMSwgMHhiNzhmN2JlYiwgMHgxMThhYzllYywKKwkweDdlMTVlOTZmLCAweDY4NTg2YmU1LCAweDQwY2EzM2U1LCAweDY4N2YzYjdhLCAweDgyMzMzZTlkLCAweGJjN2YyNTJlLAorCTB4MTM3OWUwNmMsIDB4YWUzY2ViY2EsIDB4YzZjY2MxMzUsIDB4MjUyZTExMDQsIDB4ZjkyOGZmZGMsIDB4ZDNhNDFhZTMsCisJMHg5NWZkMzA5NCwgMHhhNDg3Zjc4OSwgMHgwNmNjMTk3YywgMHhkNzVkYmQyMywgMHgwMWVhMDk2NSwgMHhiZmEyODUzZiwKKwkweDhhZmU5MDZiLCAweGRjODlmNmMyLCAweDE4NGNiNDc3LCAweDk4Zjk2NzQwLCAweDRjZjYwZTE3LCAweGI0OTVkMjAxLAorCTB4OGU5NThhNGYsIDB4ZmRlNzNjMTYsIDB4YjZmNzRiZmMsIDB4ZTgyMzdjZTAsIDB4YzM4NDJkZWEsIDB4OGFlODA1NTksCisJMHhmNDAzNmFmYywgMHgxNDdiZjZhZCwgMHg0YmZjNDlkZCwgMHgzNTljYmE3YiwgMHg2ZTY3N2VkMSwgMHhjMWIzZDcwMiwKKwkweGNmNDlkYmVhLCAweGJhMjRiODgyLCAweGE3MGU3MzdiLCAweDIxZTYyYWJiLCAweDVhNjcyYmJhLCAweDZiMzRhOTdhLAorCTB4MDk3NGQxY2IsIDB4NzRiNGVhMjMsIDB4OGJiYTIzZTcsIDB4NzQ3OGQ3YTYsIDB4NGVlOTE4MzcsIDB4MmJkNGRiZWEsCisJMHg0OGU3ZGRkMywgMHg4ZmM1ZGY3NywgMHgzZWVlOTAzOSwgMHhhN2M2NzJjZiwgMHg5MzdhNjhiYiwgMHhjNTlmNmNmMiwKKwkweDc1NzY4OTUxLCAweGZhNDI4ZDYzLCAweGExOWRmOGExLCAweDUxMWU1ODJkLCAweGY2NzY0ZjlmLCAweGQ5Mzc2NGJlLAorCTB4ZmM0ZDhkZGQsIDB4NDc4ZjQ5N2IsIDB4MDUzMzc5OGYsIDB4N2NmN2M1NmIsIDB4MWI5NjI1NmYsIDB4ZTg3N2MxZDcsCisJMHhjZjE4ZjRiYSwgMHgwZjdhMTlhYiwgMHhhMWI4NWVmZiwgMHhiZmJjMGRlOSwgMHhkYmNmZDFhMCwgMHgzMzdhN2NiZiwKKwkweDZjMGE4NzlkLCAweGRiY2JlZDE2LCAweGQ4ZGNiMTJhLCAweDhhN2ZkYmNhLCAweDMxYWJhZTcxLCAweDgyZDAyZGJmLAorCTB4OTZkYWFmZWYsIDB4NmZkYmU2ZWYsIDB4MTE0ZmQ3NmUsIDB4M2NhN2RkZWIsIDB4NmJiNTA2ZjcsIDB4M2Y2ZWVkZTMsCisJMHhlNDYwNGU2YywgMHhmYWY2ZTAyNywgMHgyOWNlYjE2NCwgMHhkMzNhZjhiYiwgMHg4NjdlYmUzZSwgMHg0NTYzZTgwYiwKKwkweGI5ZWM5ZjlmLCAweDY1NzU3NDRmLCAweGVjZTJlZjI0LCAweGI2OTVjYmIzLCAweDQ3NGU3YzFjLCAweGJjNDdhNjM5LAorCTB4NDNmNTViYmIsIDB4Mzc3NDFjNzgsIDB4MzY3NTcxMGMsIDB4ZjhjOGQzZjcsIDB4NTQyOWU2MjEsIDB4NTcxN2Q4NDcsCisJMHg0NDNiNzM2NywgMHg2MTRmNGJkNiwgMHhmZDhkN2U3NCwgMHg3MmZlNGVjYywgMHgzZTBjZGYxOSwgMHgwN2Q0MTRjNCwKKwkweDk3NjE0NmI4LCAweDRlNzc4Y2M0LCAweGJiMjI2ODJmLCAweDE5NjBmYTYyLCAweDRiYTkwY2U3LCAweDRiYzJkYzYxLAorCTB4ZTU4YjRmOWYsIDB4ZTZjYjJhNDcsIDB4OTEyOWYzZjYsIDB4ZDdkZjIxNzcsIDB4NDg3NWYyMDQsIDB4NDg5MGZiMTcsCisJMHg5MGYwZmNlOCwgMHhkYjllZDA3NywgMHhlNzM0Y2M5NywgMHhmM2U1ZjZkYywgMHhiY2VjZDRmMiwgMHgwMWNkNmU3ZiwKKwkweDU0OWFlYWY4LCAweGU1OGJmN2JjLCAweGYyYjc5NDI5LCAweDRjMTYxZTgzLCAweGZmMzgxYzRhLCAweDFhMGIyYWU5LAorCTB4Y2Y4YTBmMjksIDB4NTE4YjY1N2YsIDB4ZTVjMjU3ZGMsIDB4M2Y4MTNjZGEsIDB4ZDExODY5MzYsIDB4YTc4MTVjZWYsCisJMHgxN2ExNmNlYSwgMHhjYTMxNTk4YiwgMHg2ZjAyNzlhOSwgMHgxOTM3MzQzZiwgMHgzMzZlYmViOCwgMHg3OThmYzk0NCwKKwkweDFlM2YyOGQ5LCAweDZiY2Y2YjhlLCAweDk3Yzk0N2JmLCAweDRhZWUzMTFhLCAweDYyYWZjNzYxLCAweGZkM2ZlNDdkLAorCTB4YTdmMWQ4NDQsIDB4ZmM3NmU2MWUsIDB4ZmU0MWQ2NmEsIDB4NzE5ZmRlZDMsIDB4OTYxZWJlM2IsIDB4ZWQxMmY0ODcsCisJMHhhYmRkYWQwNywgMHg2ODc3ZDcyZCwgMHhkZWEwMGRjYiwgMHhhZWM2ZmZiMSwgMHg4NjMzYjkyOCwgMHgxZjdiYTVmYiwKKwkweDNmNDMyZmFlLCAweDc3Y2VjZDY0LCAweDIzNWRmZmM4LCAweDJiNDA0Y2U1LCAweGU3NDBjMDY3LCAweDUxYTFlNjcyLAorCTB4ZDZmYWJmZTQsIDB4ZDgxOWUzZjIsIDB4ZjI2OTk1ZDUsIDB4NzZjOWVmNGIsIDB4NWU3N2Y4NDYsIDB4MGQyZTc5ZTQsCisJMHg3YTExZmI4YywgMHhjMTZmMjNlZCwgMHhkMjhiMmM3ZCwgMHhhNTcyZDE0ZiwgMHhlOTE1Yzg1MCwgMHg1YmYyOTBmZiwKKwkweGM2NDI5YmNhLCAweDc3ZWMxNGY1LCAweDliNjBmMWRmLCAweGUxZWYzYjI4LCAweGM0YWZhMTZjLCAweDRkZmE0ZGZlLAorCTB4ODg1NDdkYTQsIDB4ZDdkMjExZjYsIDB4YmEyMjI2YTgsIDB4YmY3MjdlYjAsIDB4ZTg0N2QyNmQsIDB4NjYyNTA1YTUsCisJMHgxOTkxN2JjNCwgMHhhNmUxMWJmOCwgMHhkOWY1OGRiNywgMHg2OGYxZjQzNCwgMHg4M2Y3ZTVmNiwgMHhmNDUxZWZkYSwKKwkweDBiNjNmNzIzLCAweDg0ZGNmZDA1LCAweGZmMTgxODkxLCAweGI4MWY3MjBmLCAweDVjY2ZkMzhhLCAweGY0ODQzZGU2LAorCTB4OWNkNWZiZjMsIDB4ZjBiZWU0N2UsIDB4M2QwM2VmOWIsIDB4YTA3ZGM4ZmEsIDB4ZGQ3ZTRmZGMsIDB4ZGQzZjYwZmQsCisJMHg4NjNlYzA1OCwgMHhlOTVjYjFlNywgMHhmZGYxZTAxNywgMHg0NWQzODU0NiwgMHgzZGRmOWNmZCwgMHhmMmMyYzU1NiwKKwkweDczMzM2OGUyLCAweGI5NzA4NmFiLCAweDhjYzlhNjY1LCAweDAzMTY5NzdlLCAweDk5Y2QyZmRmLCAweGQyZDk3ZWY1LAorCTB4YjQxM2Y5MDgsIDB4Yjg0MDFmOTcsIDB4ZjkyNzZlYjEsIDB4ZGFhZGViNzcsIDB4M2QyYjM2NzEsIDB4ZjcxMWZkNzcsCisJMHhjOTVhOGY1NSwgMHgwOGUxNzRhZiwgMHhjMmU1OTMyMywgMHgwZjk0MTFhZSwgMHhjNzgxOTlmZSwgMHg2ZTdjZTU1YiwKKwkweGI1ZjdiYzNmLCAweGI5NWJkNDEwLCAweGNjNjI5NmVlLCAweDAyNTVhODJmLCAweGI3YzFkNjJmLCAweDc3YmVhYzBmLAorCTB4NzU2YmJmOTEsIDB4NjcyZjcxNDEsIDB4ZTQyN2M1MGYsIDB4YmFmZGYxYjgsIDB4YzZjNzkyN2UsIDB4ZjczZjVjMDMsCisJMHhkZjk0MDkyOSwgMHg0Nzg3ZWYwYiwgMHgzOGZlZTljNiwgMHhkY2VmY2I4OCwgMHhiODA3ZGY0YywgMHg1YjQ3YTkxZSwKKwkweGY4MjdmM2ZhLCAweDFiMzBiNDEzLCAweGE3Y2UxMjk0LCAweDcwNGRlNzA4LCAweDk4NWZjYjdmLCAweDEzNzk4YWU3LAorCTB4MDRlMjIzMWIsIDB4YmU2NjNlZDAsIDB4Y2YyMTc5ZGIsIDB4MDE3MjYxNDcsIDB4YmE2NTY3Y2MsIDB4N2ZkNzE3YTcsCisJMHg0Zjg1YzQ0YSwgMHhhOWUyMzg4OSwgMHhmYzU3MWU0NCwgMHhmZTdkN2Y3YiwgMHg3YWUyMGRiNCwgMHgzYjg4OTRlOCwKKwkweGM2ZDE0YTllLCAweDQ0YmQ2NDliLCAweDZjZDkzY2YxLCAweDYwMzQ2ZWY2LCAweDM3Nzk5ZWJjLCAweDNkNzBmZTgyLAorCTB4N2NhMjZhNjQsIDB4NWYxYzQ1OTUsIDB4NmIyNTJmYmQsIDB4MWFjODExZWUsIDB4MTA2YTNlNTQsIDB4ZDM5OWZiYjQsCisJMHhlMzA0MWZhYiwgMHg5ZWQzNmYyYywgMHhmNzE1ZWE4MywgMHhiYTBhZjZkYiwgMHhhN2YwYjVlOSwgMHg1MDZiMzcxYywKKwkweGQ3NmMyOGY1LCAweGIzZGY4MGJiLCAweDI4OWU1ZmRhLCAweGJmZWE1ZWNiLCAweGM5MTBiYWY3LCAweDhmZjJmZWEzLAorCTB4M2E5Y2UyNDIsIDB4ZjhjODkzZjcsIDB4NjFmOGJjNDAsIDB4ZmEzMGJjNzQsIDB4YmM3NDY5OWMsIDB4MzdlNGIxN2YsCisJMHgyNDVmZWYxMSwgMHg2ZWUyZDRlNCwgMHhkNWI4NmYxZSwgMHg4MjBmMzZjYywgMHg2Nzc1YjdlZiwgMHgyNmI4ZmM1MCwKKwkweDEzNWMzZmQxLCAweGJmNWJmN2VmLCAweGE0ODc5ZTUxLCAweDllZGNkZWNmLCAweGNmZjhmOGZlLCAweGY1ZTNlMjIyLAorCTB4MmY1YTNlMjIsIDB4NWRhOWQ3ZDcsIDB4Y2YwMTY0ZGYsIDB4M2UzZTMxZWYsIDB4NjA3MzkwNzksIDB4OWYzYTNjN2MsCisJMHgzM2I0NDVlMiwgMHhhYzNjNjEwYywgMHg1NWI4NzA3MSwgMHhkMTJhZWJlOSwgMHgzOTYxN2M0ZiwgMHgzNWY3M2NhMywKKwkweDQxNmIyZDZmLCAweDJkOWFmMjNmLCAweDYxNTU5NmUyLCAweDM4MGJkNzc3LCAweGQzOTc1YmM3LCAweDhkMmU2M2FiLAorCTB4Yjk4MTNlYmYsIDB4ZTU5M2Q2MjIsIDB4Yzk5NGQxNGIsIDB4MzNjODhmOTIsIDB4YWQ5MzU0MWQsIDB4MzRkYjlmNjksCisJMHhmMDdmNTM0NCwgMHhlZjlhNTFiYSwgMHg0ZDIyZmVmOSwgMHgxYWY1YTBiOSwgMHg2ZDYxZmQ0ZCwgMHg4OGYyOWExNSwKKwkweGVhNmJkNzlkLCAweDQ5MjFiMjE3LCAweGEyM2I2ZmU0LCAweGJiMTI1ZjQ3LCAweGYzNDczMDJhLCAweDg1ZGVmNDdkLAorCTB4YjI5ZmY2OWEsIDB4YTA5MzFkYTYsIDB4N2I0NWE3NWUsIDB4N2JmMzMzMmYsIDB4ODU5NGM2N2EsIDB4NzZjN2E5ZjMsCisJMHhjM2Y0ZDUyYywgMHgyOTUwNGE4MiwgMHhmNjMzZGYwYiwgMHg3OWE3Yjg5OSwgMHg4NzhmMGY3OSwgMHg1YWI1ZGQ1YywKKwkweGJlYWQ0ZTMzLCAweDFkMThmMDhlLCAweDdkNjIyZGVmLCAweDA4NmUzN2U0LCAweDFiMjBlZTI4LCAweGQ1NWRmZjE4LAorCTB4YWVlZDRlZDUsIDB4NzhjOGY3NjQsIDB4MjI0MWM2YzgsIDB4YjJjZDk3ZGUsIDB4ZDM0NzVkMzksIDB4YzNlYzhkODUsCisJMHhlNGY0YmIwYiwgMHhjMzY0MmM3ZiwgMHhmMDQ0OWExZiwgMHg2YjgwYjAzMiwgMHgzMDJlZmUyMCwgMHhmMGJiMTdlZSwKKwkweDc5OGRkZDhjLCAweGI1YmZiNzQ1LCAweGNhNjNlNjhjLCAweGRlMDVkMmQ0LCAweDVlYjkxODFmLCAweDVkMmQ0OGViLAorCTB4M2E1YWRkZDgsIDB4YTVhMDlhNDgsIDB4Mjc3ODY4ODMsIDB4YzE3NGI0N2IsIDB4Y2JiZmYwNDIsIDB4ODY3NTNiYzAsCisJMHhiN2ZlNmU5NiwgMHhmMDgxZGNlMCwgMHg1YmUxODZiNSwgMHg2MmQzZDA3YywgMHhiY2YxYjgyMywgMHg5OTlmNjkzNSwKKwkweDFkMTQzZDg0LCAweDRlNzY5MGQ3LCAweGJiYjA5MDcwLCAweDJlMzIzZjQ1LCAweDkzZjE1OWIxLCAweDc3MWZkNTVkLAorCTB4MGJjYzEwOWMsIDB4ZDUzZGEzZTYsIDB4Yzk1ZmI4YzQsIDB4NmZlNTEwN2IsIDB4YmQyNGJmMGMsIDB4OTQ5N2U3OGYsCisJMHhjMDliOWQ3MCwgMHhmMzJkNjdmNSwgMHg2NjNlZmM5MiwgMHg5M2E0ZmVlMSwgMHg5ZmM4YWJkNSwgMHg5MTM1OTJiNCwKKwkweDljZDlmZGRkLCAweGU4ZWZjMmU5LCAweGNhNTc3YWE3LCAweDlmOTAxODUzLCAweDhiMjlmNjAwLCAweDA2YWVkN2YwLAorCTB4MWZlZjFhOGIsIDB4ZDJhNzg2OGEsIDB4NzhlZDA0YWQsIDB4NGI3NTk4NmUsIDB4ZmNhM2UwN2QsIDB4ZWRkZTBmMTUsCisJMHg2OGZmODlhOSwgMHg1MWU2NWZlZCwgMHhiNDk3ZTUyMiwgMHgxMjc4ZTU4NywgMHhjOWFlNTI5ZSwgMHg0OWFjNGM3MSwKKwkweDExN2M4OTlmLCAweGM4ZDhlNzI1LCAweGQ2OTNmOGU4LCAweDQxZmQyMzlmLCAweGUzMjM4ZTMyLCAweDliZmVkMTRjLAorCTB4NTViOGJiMDgsIDB4YzFkMjcxOGYsIDB4Y2U3ODJkZjksIDB4MjFlMWQ4YjcsIDB4ZWIyOTYxM2YsIDB4NGZkZjA1YjksCisJMHhhOGI0NzczMCwgMHhiOGJmZTEyZSwgMHgyZmZiZjU4YSwgMHgyYmFiZWFlMiwgMHhmMjZmYjVjNCwgMHhmMjQ3YTEyYiwKKwkweDY1YjNjNjA3LCAweGZmOTYxYzdjLCAweGYxYTExZmYxLCAweDhiOTVjNTI0LCAweGYyZjM5OGYzLCAweGQzZDIyNzA4LAorCTB4ZmJhNmJmNDAsIDB4OGZkMDJiZjgsIDB4OGE5N2Q3NWUsIDB4MzEzMGFhZjUsIDB4ZmRkZTIyM2QsIDB4ZjVhMjEyYTYsCisJMHgzNjc5OTBmYywgMHg2ZmRiOWU0NSwgMHg2ZWQzMWQ2MCwgMHhlODMyN2YyMSwgMHhhNzI3YmM0OSwgMHg1OGJiZmI5MywKKwkweGFjM2RiNDU3LCAweDA3NTliZjkyLCAweGFmYmE0MTJiLCAweGRlNzExMTY1LCAweDJhNzdmMGZjLCAweDY1OTYwN2ViLAorCTB4ZWM5NWQyMWUsIDB4ODJmMWE3ODksIDB4ZTBhM2NhNzIsIDB4Yzg0YzUzZjksIDB4OGNmZmI5NDEsIDB4Zjk5M2NmYjcsCisJMHg0ZjdlZjIxOCwgMHg5NDU0Nzc5OSwgMHgxYzc1ZjgyMywgMHgwM2ZkODcxYiwgMHg5NGU1OTViZiwgMHhmODAxN2ZhMiwKKwkweGM3ZTQ4OTUzLCAweGZhMjUzY2ZlLCAweGEzMWY4MDNlLCAweDMxZjMyZmQ2LCAweGYyMTJmNmY0LCAweDVjOGIyZDFiLAorCTB4ODc4MGQ3ZWYsIDB4OWM3ZTViYjQsIDB4YzhlOWU4YzMsIDB4M2ViM2QxNzEsIDB4M2Q2ZmM0ZTEsIDB4NDdhNGI5ZjgsCisJMHg2OGRhM2Y5MywgMHhmYTBkMGQ4NCwgMHg3OTE0NWUxMywgMHhiYjVhMWQ4MSwgMHg5ZDFjOTZmZCwgMHhmN2RmMWI4MCwKKwkweGYxNWUwOTVjLCAweGY4ZjIyMWYxLCAweGFlYmUzZTA0LCAweGY4ZjMyNjFkLCAweDBjOTcxYzI0LCAweDBkMGFmYjg0LAorCTB4OGZmN2ZiNWMsIDB4MTE1ZjcwZmQsIDB4MmUxMmVlMGIsIDB4N2U3YjRhZTcsIDB4ZGJkMmY4ODEsIDB4YmMyM2E1OGYsCisJMHg1NzdhYTYxNywgMHhlM2RjZmQ2MywgMHg1ZDE0NGZhMSwgMHhmYTU1NWU3OCwgMHg3Yjg3OTRiMywgMHhlNzRmNGJhMSwKKwkweGUzYWUxYWZmLCAweDI1ZTFiMDcyLCAweGYzODY4OTNkLCAweGIzOGEyNmRkLCAweDQxYmQ3NGQ2LCAweDY2ZDllMTc2LAorCTB4ZmMwNmI0MTAsIDB4NzIxODBjYmQsIDB4MDhmYzY1ZDgsIDB4Yjc4ZWYwNTEsIDB4ZDllYjkyNGYsIDB4ZTVmNjIzOTAsCisJMHhlZjMyZmQ2MiwgMHgzOWI5ZDYwNywgMHg0NzVlNjYyNywgMHhkZmI0MWMzZiwgMHhmNGFhMWMwNSwgMHgxY2YwOTI2MywKKwkweDkyYmU3ZjU5LCAweDc5MTc5N2RhLCAweDNhZjQ1ZjVmLCAweGZlNzg3MjJhLCAweGY3YjMyOWRiLCAweGMzZWZlYzNlLAorCTB4ZDgxZDljOWUsIDB4ZmJiZTk1NWYsIDB4NjdjMjM2NzAsIDB4YmJlNzQyYWQsIDB4NzlmODk4YTYsIDB4NWU3MTJjZGMsCisJMHhjOWE4NDI2ZiwgMHgzMzk5ZTc4ZCwgMHg2NjdkZjg3MywgMHhmN2E0N2UyMywgMHhmZGY5MWM2MiwgMHhlMGE2NzdiNSwKKwkweGZmZDkzNDM5LCAweGU3NDc0NTA4LCAweGVlN2IxOTQ3LCAweGMxMmM3ZjgzLCAweDM3MjJlNmY4LCAweGQ4YmY2ZmRlLAorCTB4YmEyZmVlMjQsIDB4MDAyYzFhY2IsIDB4OTFiYWYyMzksIDB4MTg2NTQ3ZGYsIDB4NjZlNzQ0ZDIsIDB4ZTRmNTkyZmEsCisJMHhiM2QzNGNkNywgMHg3Mjc3NDhhOSwgMHhhZGJjZjJkZSwgMHgwMWY3OGY3YywgMHg3Y2IxNWU2MCwgMHhhZmE1YTUzZiwKKwkweDdiZmEwZDc4LCAweDc1YzgzZDA0LCAweDJiZWNhOTRmLCAweGUxODViMjZlLCAweGEzM2NmMzJmLCAweGY4MjU1M2UxLAorCTB4MWI0M2VlNDMsIDB4ZDA1YjVlZjAsIDB4YmNjZGU3YmYsIDB4NmRhZjdkMWMsIDB4NTg3NGZlZmYsIDB4ZjYzNjNkZmYsCisJMHg4MzdlYjhjOCwgMHgxZTM0OTNjNSwgMHg2YmRjNTFmOSwgMHgyNzg3MTdmYiwgMHhhNDc3ZGY4OSwgMHhiY2Y2YTdiZCwKKwkweGJmOTdiN2M4LCAweGRlZWYxMjUzLCAweDUxY2NmZjliLCAweDgyN2I5N2JlLCAweGNiODVlNWUyLCAweDcwNzhmZmJjLAorCTB4OTk1NjQ4NjksIDB4NzM5ZDM1N2EsIDB4ZGVhZTVlZjcsIDB4OGZhZGZmMmIsIDB4MjhiZWRmYjksIDB4ZDNkZmY3YmUsCisJMHhiY2VjNmFmOSwgMHhjZWIxNWVjNSwgMHg4ODYxN2U3MCwgMHhlN2Y3MjljZSwgMHg3ZTU0YmUyZCwgMHgxYTQ3N2JkOSwKKwkweDA4ZDIzZWYwLCAweGY2YmNjODM4LCAweGI0OGZiYzA2LCAweGQwYmY0NjM4LCAweGU1NzZjYjlmLCAweGM0YWE4NzdiLAorCTB4OGYzMDFhYmMsIDB4M2RmMjM1MzAsIDB4MzhmMGI3YTcsIDB4MzAyZjIyNjksIDB4ZmI3Yzg4OTQsIDB4OWQzZDJlY2IsCisJMHgxMWU1ZmZlMywgMHgzMWRkOGNkZCwgMHhjYjliOWRlNiwgMHhhOWNhMzJlMSwgMHgwZThkMWYxMiwgMHhlM2I1ZmJmMiwKKwkweDc5ZTc5M2Q1LCAweGU4ZDhiOWU0LCAweDg0NTY3NWY5LCAweDYzZjljNTZlLCAweGYxYWM3MjllLCAweDNmN2NiOTFjLAorCTB4OTlkZGU3MmIsIDB4ZjBkMWYxYzIsIDB4OWJkZjg5OWEsIDB4ZjI3Y2YyYWEsIDB4NGFkMDk0Y2UsIDB4MTY4NzEzZTIsCisJMHgxZTA0YzNjZiwgMHhlNTBmYWYzYiwgMHg5OWIyYjlkMSwgMHg4ZjEwZWZkYywgMHhmYWE3MjYxZSwgMHhjOGJlNTFjYSwKKwkweGQ0Y2FlZTdiLCAweGMxMTFjNTI2LCAweDg3YTI1NzhmLCAweDFhZjVkYzMwLCAweGJiODQwZWJjLCAweDdlY2JiZTkxLAorCTB4N2MxNTFmNGYsIDB4ZGMzNjNjY2IsIDB4ZmExMTJkY2YsIDB4NWE5ZWM5NmUsIDB4N2VlNTg3YjIsIDB4M2Q0ZWY0ZTksCisJMHg2NjljNmZlNSwgMHhiYTcyYWUzYywgMHhkMGZkYTE0ZCwgMHhlYjYzMWY1MiwgMHg3Y2FkMmU0MCwgMHhhYTMzNzhhMiwKKwkweGIwOTkyNWFlLCAweDFlZmUxNDk2LCAweGU5NjYxZjdmLCAweGJhZjhhOGM2LCAweGJkNDk1ZmQ4LCAweGJlNWZjNzJhLAorCTB4ZDcxNzZiNGQsIDB4NDY3ZjZkYjAsIDB4NTFmNGU5ZmIsIDB4YjA1NjNmMmUsIDB4MmIzZmQyMjYsIDB4NTdmNmQwMWYsCisJMHhhN2Q2NjdiMywgMHhiY2U4Y2YzOCwgMHg4ZmMyMTE4MCwgMHhlYzU3MmQzNywgMHgxOTU4Y2E1NywgMHg0ZjM1OGZlYSwKKwkweDlmYzQ2ZTdjLCAweDE3Yzc4OTYwLCAweDQzNGZmYmY4LCAweDdkZGZmMTg3LCAweDhlZmUyN2MyLCAweGM5NmYzZTA4LAorCTB4MTcyMGZjZjUsIDB4ZjJlZjNlZmQsIDB4ZjVjZWFlZjksIDB4N2Y0NWM5Y2QsIDB4N2U3Y2JiYzksIDB4NzAyZWVhMTcsCisJMHg4ZDJiYjMzZCwgMHhmZDhiNWJmNCwgMHhmYWZmOTIyZSwgMHhkZmZlNWNjMSwgMHgwMDM1Zjc4YiwgMHg3MTI2NGM5YywKKwkweDQ5YWViYTZmLCAweDRkZjY0ODlmLCAweDQzZWNlODgwLCAweDdlNzMxZGU3LCAweDI2Nzc2NTQwLCAweGQzZGE0M2YyLAorCTB4YmY2MDY3ZDMsIDB4MWVhZGE3Y2UsIDB4NzJkNmRmNWMsIDB4MmZmYTIxNGYsIDB4ZjNmMzU2YjYsIDB4OGYxMzY2YTEsCisJMHgzOTdlMDdkZiwgMHg1Mzg2MDBmMSwgMHhhZjZjNzY4NiwgMHhhMzlkMTc0MCwgMHhmZDEwN2Y3YiwgMHgzZmJhYWQ0MiwKKwkweDk4YmNjNjFmLCAweDVmM2NjOWQ2LCAweGRhMTc1ZDMyLCAweDNjNjIyODNmLCAweDg5OTAzNWE3LCAweDY4ZTc3ZGYxLAorCTB4OWE0ZTZmN2UsIDB4Y2I5MGJjYmUsIDB4MzYyNzZlN2YsIDB4ZTg1YzVjMDgsIDB4NjI3ZjIwMmEsIDB4MTdmYTQxYWYsCisJMHgyZTc0MmMzYiwgMHgyZWZmOGVhYiwgMHhmMWM2MjhjNiwgMHg3MGVhZjMyZiwgMHhmMTc2OTEwZSwgMHhmOWE2NjZkOSwKKwkweDFkNTE4NjlkLCAweDQ4OTBkMDRhLCAweDNjNTBhOGY3LCAweDMwNDM2ZWE4LCAweDY3ZDQxNmZkLCAweDRmMTRhOTRmLAorCTB4N2I0YmYzOTMsIDB4ZTMwMmFiM2QsIDB4ZGQ4ZjUyNjYsIDB4YmZiODM4YTIsIDB4MGJmZGQ4NGQsIDB4NzFlM2ZjOTgsCisJMHg5ZTgyZjliNywgMHhmZjdiMDgxNiwgMHhmNzg3MmIxNiwgMHhjM2NlZTY1MiwgMHgyY2NkMGI3NiwgMHg3NmFjMDc1MSwKKwkweDI5NDc2NTRiLCAweDkwZDZiM2FkLCAweDhjODU3NjhjLCAweDQ3YjdjNTFmLCAweDFhYzlmYjYyLCAweGU3ZTc2MTdlLAorCTB4ZTFiZTk1OWUsIDB4ZjQxOWM5ZDgsIDB4M2Y4NjVkNDEsIDB4NjkzYzg1ZGIsIDB4ZmZjZmNlMTgsIDB4ODNjY2ExYjEsCisJMHhkNzg2Y2FmMSwgMHgzMGVmZDA0NiwgMHgzYzc4MTI5OSwgMHgxOTk2ZTQxYywgMHg4NDNhMTFlZiwgMHhiZGQ2MWVmYSwKKwkweGM4OGIxNWVhLCAweDczODgwYTViLCAweGQ4ZGVmY2NkLCAweDQ1MzkzOWM2LCAweDc4ZjExZTc0LCAweDcxZmZkZDFmLAorCTB4MjNjYTEwZGUsIDB4ODQ3OTA2ZmUsIDB4OTJiZWE2MzcsIDB4ZTAxZmJiZmIsIDB4ZDkwZGViYmQsIDB4Zjk0MWQ3NjAsCisJMHg3ODlmZWU3NCwgMHgyNTY4NDg3OSwgMHg5Mjk5MWJkZSwgMHg0Nzk3ODk3NywgMHg3MmMxM2U4NSwgMHg2Y2MyNWU0ZSwKKwkweDU2ODUxNzJhLCAweDNlM2NhMWVhLCAweDcxOTc5MzJmLCAweDM2MDQwYTAzLCAweDZjZjA2ZjM1LCAweGM5MmRkYTNmLAorCTB4ODc3MDJlYzIsIDB4YzM3N2JjZTgsIDB4OTE3NDIzY2IsIDB4MWU3NzU4ZmUsIDB4ODQ2NzY3OTcsIDB4M2U0Y2Y5M2YsCisJMHhjMjBlNmRiYiwgMHhmYWVjNjQ3YiwgMHhkZWQyNzk2OSwgMHhjOWY1YTM2ZSwgMHgyY2Y2Y2FmNSwgMHhmZmJiNzYzMywKKwkweDk1N2U3MjEwLCAweGM1M2RhNzM4LCAweDNjMmQ1YWNhLCAweDA0NGZlN2ZlLCAweDFlZWMxYzNjLCAweDdmY2JmMTQxLAorCTB4ZmRlMTRkY2QsIDB4NGY3NDQyM2IsIDB4ZmEyN2VjOGYsIDB4YjhlNDFjNzcsIDB4N2JmZTE1YWIsIDB4ZjJhM2U3NTksCisJMHhjYjk3N2ViYywgMHhiMzhjMmJlNSwgMHhlYTE5YzY5MSwgMHhlNzliZTdlMSwgMHhmZTIyMTRlNCwgMHhjMGFhNmYwMCwKKwkweGM5ZjdjYTliLCAweGQwN2U3Y2VkLCAweDEzZmVmZTJmLCAweGY0NjI4N2U4LCAweDBhZmMxZmZiLCAweGU3ODdlN2VhLAorCTB4MjcyNzRkMWQsIDB4NWFhYjM4YzUsIDB4MmZiNmRjNzgsIDB4NjllODgwYjksIDB4ZjdkYzU1OGEsIDB4Yzc1ZGEyNTIsCisJMHg5ZjZlM2NmOCwgMHhjNTkyZjNiYSwgMHhhZjA5MWQ3OSwgMHg2OWM2ODUwYywgMHgwOWNjNzAxMSwgMHhmNjMzOWYwZCwKKwkweGFmZmJhZjliLCAweDhlZWI0YmZmLCAweGVmMDc5N2MwLCAweGM1ZDgzOTZkLCAweDlmMWUzN2VmLCAweGY0ODVmMWM3LAorCTB4ZTA3NjQyOWMsIDB4Njc3ZjRkNzYsIDB4OWZiNTQ3ZDYsIDB4YWU1ZjI4YzAsIDB4ZGE4MGE1MjEsIDB4NmZlZTJiZGYsCisJMHg2MWQ5Zjc5NSwgMHhkYzcxZmNiYiwgMHg1N2JiNDViZSwgMHhmY2MxYTdkZSwgMHgxYzY0NTk5MywgMHg4Y2RlZmZiMiwKKwkweDcwYmY3MTBlLCAweDI4NmYzYWZmLCAweDg4NzRlYjExLCAweGVmMjIzYTc1LCAweGNmZTdlYzMzLCAweDczNzk3ZDYzLAorCTB4YjhlOTAzZWQsIDB4ZmRmZGZlMWYsIDB4ZmQxMjI5OGQsIDB4NTYzY2Y4NjksIDB4ZjFkN2M4N2YsIDB4MWU1NTcyZjAsCisJMHgxYmRmMjc5NywgMHhhMzNjZTQ1ZSwgMHhlNzBmZDllMCwgMHg3ODQ5ZjlhOCwgMHhiYjUzN2YyMiwgMHg5NGJhNWEzMSwKKwkweGY0MTFjY2YzLCAweGYzYmY4MDM5LCAweGUyNzhlNWJmLCAweGJiZmFkOTdlLCAweDczMzhiZTc5LCAweGJlYmFlOTY5LAorCTB4Zjk4NzVmMzMsIDB4MDdkZGIyMDksIDB4MzRhMGMwNzgsIDB4MjFiYzI3ZWMsIDB4NzMyN2VjNGYsIDB4YmM5YzRlNTgsCisJMHgzMzllNmY0NywgMHhkZTkxN2ZhNiwgMHg3YjI3ZWY0NywgMHhkOWVmZTU5MywgMHhiZDFhZmQ2OSwgMHgzOTdiZmU0ZSwKKwkweDdlZmM3M2ZlLCAweGZjYTM2YjgzLCAweDdhOGYxODNjLCAweDE3NmUxNmNlLCAweGYyZGEyZmQ2LCAweDAzN2UwMjYzLAorCTB4Nzk3ZDU0ZmQsIDB4NTMxMmJmMzgsIDB4M2JmOGYzYzUsIDB4NGFmM2FiNWIsIDB4Nzc2MGFiNjcsIDB4ZGM1NTI0OTQsCisJMHhhNmU1MGY5OSwgMHhmYzkzYzZjNywgMHhmMTU0MTkyZSwgMHhmM2M4M2U3OSwgMHhlMDRkOGYzNSwgMHg3YzU3NDdkZiwKKwkweDc5Y2IwNDNlLCAweDhhNzk3OTEzLCAweGY3OTQ3OWU3LCAweDllY2NiNDYwLCAweDJiYjYxNTlhLCAweGQxNzNjY2VlLAorCTB4MWQ0YWZhYjgsIDB4NDI2NzZiZGQsIDB4NjNkNjA2MjMsIDB4Zjk0NGRkN2EsIDB4ZjFhZTEyODAsIDB4NWQyNjI1OWUsCisJMHhiZmYzYWM1MywgMHgwM2QzZjRmNywgMHhjMDRjYmY4ZiwgMHgxZmQwYmE3ZiwgMHgyMTA1ZmMyOCwgMHhlODJmZTM1NSwKKwkweGNmZTdlNDRkLCAweDkyZmQ1ZjdiLCAweDliZGNkN2NlLCAweDA3OWY1YmU3LCAweDY3YWQxYmVkLCAweGYyODdjZDZmLAorCTB4MTQwN2ViMDYsIDB4NjAzYzUzZWYsIDB4YzYxZmEwODcsIDB4NjA4YjYwZTUsIDB4YWRkOWNhYmUsIDB4ZDg5ZmI0NWUsCisJMHgyNTU5Yjc2YSwgMHgxOGZmMGFiOCwgMHhmMDA3YTlkZSwgMHhhN2I1ZTU3YiwgMHgwZjg4M2M3ZSwgMHg0Yzc5YzVlMywKKwkweGYxYTA3MjE0LCAweDE1ZmRiZmI1LCAweDY3OGRjNGUzLCAweDFiMzQ2ZTZjLCAweDdjM2Y3NjI3LCAweDEzNWZkYTI3LAorCTB4MWJmZWRmYmIsIDB4M2NmY2MzZDcsIDB4NDRmNzljOTAsIDB4ZmJjMjdmZjQsIDB4OWEyNjVkMDksIDB4YWJlZWM0ZmYsCisJMHg2YmZkNjA1NiwgMHg0MDJlZWJkZiwgMHg0NGVlYjkzYSwgMHg0MmM1MDViMCwgMHgzZWZmYWJlZiwgMHg4ODBlNzM0OCwKKwkweDdjZDk3YTdkLCAweDM5ZjFiOGQxLCAweDAxM2Y4ZjA5LCAweDFlMDg5M2EwLCAweGY4ZjBlNzNmLCAweGNlZDlmMjhhLAorCTB4MGU2ZThmM2IsIDB4N2I1NDkzOTEsIDB4NzhlYzBhZGUsIDB4NjA1ZjNiOGEsIDB4N2I4YzZlMDksIDB4ZDFmZDczYzgsCisJMHhkNWUzZDU3ZSwgMHg3Zjc4M2ViMCwgMHgyMGNjMWY1ZCwgMHg3MjllOWVjMiwgMHgyNDgyMGNkMSwgMHhjOTY3MmU1YywKKwkweDM5YTU3MjlhLCAweGNhYmY1MzRiLCAweDNlZjlhZjkxLCAweGNkMmFmMzNkLCAweDQyYWU5OWY3LCAweGM4ZDY3OTRkLAorCTB4MzdmYTlhODksIDB4ZTUzNWNiYmEsIDB4NmE2NjEzZDksIDB4YWE3YjU3ZWEsIDB4NjBjMmU1MzUsIDB4ZjE3ZWE2ODcsCisJMHhmN2VkMmU5MSwgMHg3ODhmNGM2MywgMHg3ZWVlM2EyOCwgMHgyN2E1OWYwMywgMHgyZDllZTQzZCwgMHgwNmY0ZDUzYiwKKwkweDg1ZmUyNzNlLCAweGFmZGEyMzgzLCAweDhlYzVjZDdjLCAweGY0YmRmMDM3LCAweDlmOWY0NzJiLCAweDliZTY3ZTkyLAorCTB4MzE4MGI2ZjUsIDB4NTMzOTNmYjYsIDB4ODNkZjA4MmQsIDB4ZjNmMWQ3YTAsIDB4ZmIyNWVmNTMsIDB4OTM3ODgwZmUsCisJMHhhMGE2YTdlNywgMHg1MDkwMTk1ZiwgMHg5ZmI5ZGI3NSwgMHg1YzMyZWZlMiwgMHg2ZWZkYzQ1OCwgMHg5NDMxMTFjNywKKwkweDdmMjc2ZTRmLCAweGQzNDM3MWU1LCAweDc5ZTQ3ZmIzLCAweGY3MjhiOTAzLCAweGFmOWJlYmFlLCAweDhiOTRmNzU5LAorCTB4Y2JiYWNkM2UsIDB4M2MyOGFhZDksIDB4NTcyOWExZGQsIDB4ZDRkNmVlMzksIDB4NWViOTllOWYsIDB4NmJhNjdkZjMsCisJMHhiNjllMTQ0YiwgMHhiYTM3Y2E2YiwgMHg1M2MyOGUxZiwgMHg5ZTllMTQ3YiwgMHhmNDk3N2NkMiwgMHg1ZmZjMmRkZCwKKwkweDBhZGZhMWFmLCAweDNkNDI5MzllLCAweGM5ODc4ODk1LCAweDFmMDhmYWE3LCAweDJhZGE3YTEzLCAweDFjZDc0ZjExLAorCTB4OTU3YzIwZWYsIDB4Mjg5NWJkMDQsIDB4MzQ4ZWNiMmUsIDB4MjBjZjgxYmQsIDB4ZGRiMGNiZWMsIDB4N2E0Y2U2ODEsCisJMHg5MTc2NmMxZSwgMHhmMzcwZWJmZiwgMHg2OTFlN2E0OCwgMHhmZmZiZDM3NiwgMHhjZjQwOWU2OCwgMHhlODdiMzU1ZiwKKwkweDMzY2Q5ZmY5LCAweGVjZDNkOWU4LCAweDczNDc2N2E1LCAweGFlN2ZkNTA3LCAweGNmZmI4YmI5LCAweGRkZWZmYjUyLAorCTB4YzFiZjQ1YzgsIDB4MDFhODVkNzksIDB4YzE4ZWM2MjMsIDB4OWU5ZTQ5NWIsIDB4Yzc5ZDA4NGYsIDB4ZWI3ZjA2ZjIsCisJMHgzNDIwYTllYywgMHg5MDFkNjdmMCwgMHg5ZTIwN2YyZiwgMHhmYjRmMmU0NSwgMHgxZTBlNzg2MCwgMHgxOWZkZjhjYywKKwkweDQzYTM3ZjIyLCAweDNiNDQyOWU3LCAweDBmZTNmNDdjLCAweDMyZTZhN2RlLCAweDM3YmQ2OWI2LCAweDE4M2E3ZjEzLAorCTB4MTMyODY2Y2IsIDB4OTBmN2U5YjIsIDB4OTNjZmJjMWUsIDB4YThiM2Q4YzMsIDB4ZjdiZWU4NGEsIDB4Yjk2MzY3MDcsCisJMHhlNzllZmM1NywgMHgyNDFmYzdlMCwgMHhjNzViZmMzYiwgMHhlMjAzM2RkOSwgMHhjNzA3YTNlYywgMHg3YjNmYjM4OCwKKwkweDdmNDc2NWNhLCAweDQ2YWZkMWNmLCAweDQ3MWUxMWQ4LCAweGMzY2JkZjg1LCAweDNiZjgwZDBhLCAweGExNmFlNTFjLAorCTB4ZjFlY2Y1MDEsIDB4NTQyMWU3MzgsIDB4ZTBjOTc5NTMsIDB4N2JiNzVjNTIsIDB4NWY5MWU1MWUsIDB4ZTFkZmEwNmYsCisJMHhmZGYwYTM5YiwgMHhlYzk3YWNhZiwgMHhmN2EwZmFlMiwgMHhhN2VkMTM0NiwgMHgyYjNjZTk4ZSwgMHg5NTdhM2Y5MCwKKwkweGNlMTBjN2JlLCAweDE0ZmUzZDM3LCAweDdiNWVhOWU5LCAweGFmYzIxZTVmLCAweGJjYmRmMWZhLCAweDRjN2JlY2VjLAorCTB4MGQ5NDQ3NzEsIDB4OGY5NTNlMWMsIDB4NmZkYjM5M2YsIDB4MzNlMTVlZmIsIDB4MGQxMWQ3MWIsIDB4MWQ4M2I5OWYsCisJMHhmNDExNWY3YywgMHgyMDFkYTJlNCwgMHgzZGFhYzdjYiwgMHgyYzU3MTRmNSwgMHg3NWMzMGNmNywgMHgzODlhZjUxYywKKwkweDgxZWQ3YWZmLCAweGYyMzdlNDYxLCAweGYwOGJjZTk0LCAweDM2MGNmNGZmLCAweGEyZTdmYWQwLCAweGU4M2Y0NGRlLAorCTB4ZDYyMDdkNDIsIDB4MWY5ZTE1ZWYsIDB4YTIzZGVkY2MsIDB4MmU2N2RjMTMsIDB4ZTBiZWQyYjAsIDB4YTNkZjhlOTgsCisJMHhlZWRmNWQxMCwgMHhjZmEzZmJlMiwgMHg5Yzg3ZGNlMiwgMHhkYzU3YmUyOCwgMHgwYmVjZmY1NCwgMHg1YWVmNWZkMCwKKwkweGViZGQ3NTBiLCAweDU4ZjY0MTFkLCAweDE3NDAxMzZmLCAweDU0ZjdiYTY4LCAweGRkZmUzOWQzLCAweGExMjAxNmU0LAorCTB4ZjgyZGVmMzgsIDB4NmNmZWY4MmYsIDB4ZmM1ZjlkZjcsIDB4YjA3ZmVhMDYsIDB4MWQyNmVhZDYsIDB4ZjA0NTE4ZTIsCisJMHgyZjJhMjg1YiwgMHhmZDkzMzU0ZSwgMHg2ZTRlNzhiNCwgMHg1YmM1ZWEwNSwgMHg1NmYwYmM0NCwgMHg2MTRlOWFiYiwKKwkweGU4ZDkzNTQzLCAweGRiOTY3ZTgwLCAweDA0MDMzNzBhLCAweDZhYjRjYWQ5LCAweDUzNjRmZTIzLCAweDliMWRjZTRkLAorCTB4ZTg3YWI5ZjEsIDB4NThmMjIzNzYsIDB4OWI3ZDk4ZGQsIDB4MDdhZDhjZDEsIDB4ZjkyNTJlMTYsIDB4MTlhNzdhMTcsCisJMHgzYWRiNzVlNiwgMHhlN2VmOGJiZCwgMHhkYWRhZjllNCwgMHgyMmY3OTQ2ZiwgMHhjODk4ZjdlOSwgMHhkMDIwMDI0ZiwKKwkweGE1YzkzNTdlLCAweDQ5NDlmNjY4LCAweDE4MWY0ZTgyLCAweDYzMzFlMjJjLCAweGRhNGJkOGQ5LCAweGU0NGVkNzc4LAorCTB4ZGY4YmIzYTMsIDB4MWUyNzFlMTksIDB4ZWMyZWZkYTEsIDB4N2I4YWRmYzcsIDB4NGZlZmEzOWUsIDB4NWMzYWUzOTEsCisJMHhjYzc1ZmY3YywgMHhmNjg5OTQwOCwgMHgwN2FlNDJlNCwgMHg3Y2ZmY2RjNiwgMHg3ZmFjMjk0MywgMHg0NzQzYjc1YywKKwkweGQ1YjcwZDc5LCAweGI4Nzg4MGJmLCAweDY4ZjAyNWQwLCAweDRmYzg1ZDYwLCAweDdjOTdmOTM3LCAweDRjNDIxYmYwLAorCTB4ZjBkY2U2OWEsIDB4YmJhNWY0OTUsIDB4YTkxOTUxYzcsIDB4ZGU0MjRiMmYsIDB4Mzk3ZDQ4Y2EsIDB4MTJhZGFmYTEsCisJMHg4ZmQ0YTJmNSwgMHgyMTFhZTZjMSwgMHg4ZTQ4OWI4ZiwgMHg0NzVlNmMxZSwgMHg3ZWNkYzNlNSwgMHg2ZTY5MWU3YSwKKwkweDhkYjhmMjE1LCAweDc5YWFmZmJlLCAweDAxYzc5MGE3LCAweGQyZjc4ZjIxLCAweGY5ZTZlZWZiLCAweGQ5YWQ3Y2Y0LAorCTB4YTk4NWNmNDcsIDB4NmUxMWQ3YmUsIDB4ZDczYjhlMzIsIDB4ZGNiY2EzZWMsIDB4MTg5YjBmNDMsIDB4NzQyZWYxYzYsCisJMHgwMzhmMjg5YiwgMHg0N2IxZTIzOCwgMHhjOTRmMzBkMiwgMHhhMzQ0ZTc0NCwgMHhlNWEyOTVmMywgMHg3NDNkM2Y3YywKKwkweGU1YjdiODBlLCAweGZlZjdlNDZkLCAweDE3YjQyMzNjLCAweGE3YTdjNzA3LCAweDQ3NjVjY2EzLCAweGUwZjFmNGI5LAorCTB4OGU4NzI0ZjMsIDB4YjQ3NjVjYmEsIDB4MmUzZTRmYTcsIDB4ZGQ5NzFlY2EsIDB4MGQzZmU1MDAsIDB4NzFmZDI1ZWUsCisJMHg5YmIyZTdkNCwgMHhlM2M5ZmNhMCwgMHhkZmJiZmNiZCwgMHhmOTQwYjc2NSwgMHhmYzdkYzFkMywgMHhkMDUxODA3YiwKKwkweDJmZTBlY2ZmLCAweDMzOTU4ZTQ4LCAweDQ3ZjIyMGU1LCAweDJhN2YzOWE1LCAweGQ3ZDAwYmE4LCAweDJmOTEwN2U1LAorCTB4OTkyZTY3YTYsIDB4NjBiMTdjOGEsIDB4NzJlODhiYjAsIDB4NDFmZDZiYTYsIDB4ZDkxYWNmMmMsIDB4MTUxNWUyYWUsCisJMHg0NmUxNWIxZSwgMHg1NjkxNTc2YywgMHhhOWJiNjJhZCwgMHhjNDZjNzczOSwgMHg2ZTg2ZDM3NiwgMHhjZGRiMjM1NywKKwkweDIzNmZiMzE4LCAweGI3NzA2Zjk2LCAweDJlOWY2OGFiLCAweDFhNTYzOTQwLCAweGU1OTY0N2VlLCAweDY1YTcyOTc3LAorCTB4ZGRkNWRkM2UsIDB4ZTMwN2QyNWUsIDB4MGZhNGJjYmEsIDB4ZTYyYTVjMjQsIDB4ZmY0MjZmNTYsIDB4ZTI5NzYzNjcsCisJMHhhOWE1ZGZjMCwgMHgyN2Y0YWI5OCwgMHg2MmVlNjAzMywgMHgwYTkzZGUwMywgMHgzZGZmZmFmMiwgMHg4N2FjNzdhZSwKKwkweGY5NjIzNjc1LCAweGFkYjcyYTFhLCAweGVkZmEwNmZmLCAweGUyZjYwMDdmLCAweDgwMDBlODMxLCAweDAwMDA4MDAwLAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4M2NkNWZmMDAsIDB4ZTU1NDc4MDksIDB4OWRjZWU3YjUsIDB4NGM5MjY0MmQsCisJMHhlMjQyMDgzNiwgMHg5NjI0OTk2NCwgMHgyNmI2NDMyYywgMHgwYzQ4NjQxMCwgMHhmOTAxMzBlZSwgMHgxMDE5NjU0NCwKKwkweDA0NDgxNmMyLCAweDdlYWIxN2ViLCAweGUwMTcxYTE5LCAweGQxNmI4ZDY5LCAweGI1YzQ2ZmFhLCAweDYxZTRiNmFmLAorCTB4MWQwOTU4ZDQsIDB4ODdkMjUyYWEsIDB4YjQxMDU1M2EsIDB4ODhhNDc0NzksIDB4MTE5MDk5ZjAsIDB4YzdkMjc4ZGMsCisJMHhmN2ZjZTczYiwgMHgyNGNlZTY2NiwgMHhiZWZkMTQ4MCwgMHhmZjkzODYwNywgMHhjZmQ5ZmJmZSwgMHgwMDVmZmZmOSwKKwkweGIzZjg1MzgwLCAweDM0NjA3ZjAyLCAweDNkMjUzOGZlLCAweDA0NjgwNDhjLCAweGQxYmY2N2YxLCAweDAzOTViMjZkLAorCTB4OGMwNzM0YWMsIDB4NDEyZmEzYTAsIDB4NjAxMGFiYTMsIDB4NzY5NjBlYWYsIDB4MjRhNDAwMTQsIDB4MGI3YWZjYzMsCisJMHg3NGIwOGQ5NiwgMHg1ZGU3OTYwYiwgMHgwNTQ4MDM2OCwgMHgyMGJhZGE2OCwgMHhkYTg1ODE2ZSwgMHg2MDY2ZTNiYiwKKwkweGUyMTc0NWZiLCAweDUyY2UzOGFmLCAweGUwNTQ2ZTA1LCAweDliZDQwYTkzLCAweDRmMzQ4OTljLCAweDFmZDI0ZDlhLAorCTB4ODU2ZmM3Y2EsIDB4MDY0YTc4NTAsIDB4M2Q5YWI3ZTgsIDB4NDQ4MDA0YmEsIDB4MGRhYzdiOTMsIDB4ZmI5YmVkYzcsCisJMHg4NzU4ODM0ZSwgMHgzMWQ2ODhhZiwgMHhlYjFlYmQ2YywgMHg2YzMyMDBlMywgMHhjYTFmMWU1NiwgMHg1ZTU0MTk4MiwKKwkweGM4NDZlZDA5LCAweGNmZjViODQ2LCAweGRhMjJhNGZiLCAweDIzMjdjNTk3LCAweDVmNDM0ZTg0LCAweGY5ZWM1ZjIwLAorCTB4NjNmZTE2NTQsIDB4ZTA1NDNkMDYsIDB4NmUwM2U5N2EsIDB4NzBkNzk5NjksIDB4ZWE1NjYwMjAsIDB4NzQzOTY3ZjEsCisJMHgyMjY2NzBlYywgMHg3ZWQ0NWVkZSwgMHgxOGJmMDQ2ZiwgMHg3ZGZiNDNiZiwgMHhiZThkZTIxNSwgMHhiZjY5NzUzNywKKwkweDBmNWI1NDAzLCAweDAyMzA0MzhkLCAweGQ5ZGZiOGNiLCAweDg1NWVmZTEyLCAweDg3OGYwZGZmLCAweGMzYzA2NzQ5LAorCTB4MTBmMGExYTQsIDB4MWFmMDFmYjUsIDB4ZDdkZThlNDEsIDB4YTY2ZWNiMGEsIDB4YzBiZWU0NzMsIDB4ZDFmY2NhOWQsCisJMHhmNzIxODEwOCwgMHhmNDQ1ZjJhNywgMHhmZTA1ZGFmZSwgMHgyNWZmMDJmNSwgMHg1YTc0ZTczNiwgMHgzOGZjZGQ1ZiwKKwkweDhlMDA1MzkwLCAweDRkNzkzNTZkLCAweGE5ZmZkYzk5LCAweDE3NDQyOTNkLCAweDJkODM3NTkzLCAweDViNWIzZTlhLAorCTB4MDBkZTgzNjcsIDB4Y2RkNWFkYjAsIDB4MTRiYWQ3ZDAsIDB4M2Y4MDc2ZjQsIDB4Zjk3MzM2YjUsIDB4MmUxNmQ2YWQsCisJMHgzMGY1NjhlZiwgMHg4ZWJhZDlkYywgMHhkYjVhNWZlMSwgMHhlYjU3N2ViOSwgMHhkYmJmMmU0NiwgMHg2ZmU4NjVlYSwKKwkweDVmYmY5MTdkLCAweDg2NjU3ZjNiLCAweGZmNGQxMmRiLCAweDQ1Y2VjOWQ1LCAweDdiOWU4ZmM0LCAweDNlOTkxM2FhLAorCTB4Yzg1M2Y3YjgsIDB4YzgxYTllYWIsIDB4YzM0NGI2NmYsIDB4OWQ2NTgzMDEsIDB4OGY2NWMwOTQsIDB4ZDllMWY3MTEsCisJMHhjMzZkZTMxNiwgMHg4YzczZmQ3ZCwgMHgxOWM2ODliYiwgMHhhZDdlMDlhOCwgMHg0YTQzN2M0MywgMHgzMGQwZjE4MCwKKwkweGJlOWFiZGQyLCAweDNhMWM0NjRiLCAweGU0ZjU2Njg5LCAweGViMGVmZTEyLCAweDY0MDdiZjNjLCAweGQzOWI1NmQ5LAorCTB4MzgzZTQ3YTUsIDB4MTc1NThmMWEsIDB4NjU4MmRjMDAsIDB4NzhmM2NlMGYsIDB4ZmE4NWFiYWEsIDB4NDhjMDdlNDEsCisJMHgzZmEyOWNlMywgMHgwOTdjNzE5MywgMHgzYWYwNzc2NiwgMHgwZTFjYTIxMCwgMHhiMWU4MDhjNCwgMHhkMThmMmM0OSwKKwkweDQwZGRjODUwLCAweDYwZjk5ZmJhLCAweDE5MTNlOWUwLCAweGNiMzM4MmI2LCAweGE4Zjg3MGM1LCAweDllMDNhYjkzLAorCTB4NjU2N2E0MzIsIDB4ZDU4NGMzYWMsIDB4YTRmODEyN2QsIDB4NDY1Mzg0MTIsIDB4ZDM4ZTAwZDYsIDB4MTNkNDZlOTcsCisJMHg1NjQ0MTQ5YywgMHg5ZmMzYzc1MCwgMHg2MzIyZGZjOSwgMHgxNGNiZjE4NiwgMHg2Yjk0ZDQ0OCwgMHhlZDM1YTNjZCwKKwkweDlhOTlhY2ViLCAweDVjZjRiZWZhLCAweGI0ZDJmZjFlLCAweGZhZWQzNDhiLCAweGM1OWE1NzQ2LCAweDIzMmY1M2JjLAorCTB4NmY3NDY1ZDgsIDB4MDk3NDgwNWMsIDB4OWIxYzk5NTYsIDB4OThiZGZlYjAsIDB4MDYyODIyZjgsIDB4YmYxYjE2OTgsCisJMHgzMTdiZTA4OSwgMHgzNzZhNWUxOSwgMHgxNGM5YzBlZCwgMHg5MzRlN2RjMCwgMHgxMDhiMjM3ZCwgMHhjNmRiOTc1NSwKKwkweDk5ZWRjNzZiLCAweDc2YzM2MzUzLCAweDY5NTdlNjU3LCAweDI1YzEyMWQ3LCAweDFkYWJkZmI0LCAweGE3ZGYzNDUzLAorCTB4ZTlhZTVlNTcsIDB4OTNmYjMyZWYsIDB4Y2VmNWFkMDgsIDB4YzZmN2NkN2EsIDB4OWY0MWFmOTYsIDB4ZTViMTMwMGMsCisJMHgwMTRiZTgyNCwgMHgzNDNhZmJjNiwgMHhlY2VlOTRlMywgMHhiZjFmYjRkMiwgMHhlYjEyNjQxYiwgMHgzNzhlN2Q5MiwKKwkweDc0MWY5NjA5LCAweDE1MmFjNGNhLCAweDI0ZGY5Yjg3LCAweDNmYTVmNTU4LCAweDRlMDFmNjgzLCAweDlmNTE1OWIwLAorCTB4ODNkYzhhNGIsIDB4OTYzZDAyNDcsIDB4Y2FlNTI5MjcsIDB4ODEyZGI3YTAsIDB4ZjIxMjcwZTgsIDB4ODliZjQ4ZjUsCisJMHg2MzIxYzIzMCwgMHhiZmYyYTk2MywgMHg0YzFmMTA0ZSwgMHgzMjAwMjA1MiwgMHgxNmFiZjYwNywgMHgzYTc5ODA0YiwKKwkweDQ1OThkNzhiLCAweDFiZTUwNTZhLCAweGM5MDZjMWY1LCAweDM4NDdhNjkxLCAweDUwNTQwZTQ3LCAweDhhMDQyOGY5LAorCTB4OTczYWNhMDgsIDB4MmE2YmY4OWUsIDB4YjJhNThmMzQsIDB4MDQ2OWRjMDksIDB4YmY3NDQ4M2YsIDB4MmZkYzdjNGYsCisJMHhlMmM0ZGEwNSwgMHhjZmM0Yzk4MiwgMHg2OGZmM2Y3NSwgMHgxN2FjNmRkZSwgMHg1YzI2MWM2MiwgMHhmZWJhZWZkZiwKKwkweGZkNmI0YTkxLCAweDkxZjUzZmJiLCAweDdlMjE2YzM3LCAweGNkN2ViMjZmLCAweDhkY2I1Mjc4LCAweDdmMTljNzJkLAorCTB4MmQ2ZmI5NmEsIDB4OTJlMTc3Y2MsIDB4OWY2ODBkZGIsIDB4YWZmZTM2MTAsIDB4ZWQwYTc2Y2MsIDB4NTNhMjNhZGEsCisJMHhiOGM5ZmMyMywgMHgxZWQ0MjBiYSwgMHhjNDE4YmUzYSwgMHhiZmVhMzE3NywgMHgwNGQzNWE3YSwgMHg1ZGRmZDdjMiwKKwkweDZmNTc2YzRlLCAweDllMDg3MjEwLCAweDFjNGVmNTQ1LCAweDI5NDYzZWE3LCAweGE3ZDQ0ZjgzLCAweGIyYTFlZDJhLAorCTB4NmFlOWNiOWUsIDB4NmY2ODk1N2QsIDB4NTg3YmM3NTcsIDB4OTZhZDFmYjQsIDB4NTIyZWYxOTUsIDB4OWNhMmNkY2IsCisJMHhhMGY3Y2VhOSwgMHhlNWFhMTcyOCwgMHgzOTcxNzBmZiwgMHg2MTNmYjQ0ZSwgMHgyOWVmNTU5YiwgMHg1M2ZmZTkwOCwKKwkweDBmMThkZGFhLCAweGEwNmVjOWUzLCAweGM5MzM5MDNkLCAweDFhYmI0ODFlLCAweGVkYTIxZjk4LCAweGIxNWViNjg1LAorCTB4MjM3ZmYzMTcsIDB4NDRjNThjN2IsIDB4ZGY2M2NiOGYsIDB4OTBlZWI5MjEsIDB4ZjFiYWU0ODAsIDB4OGJkMzgzNzYsCisJMHhkNDllN2ZmMywgMHgxMmM2YjQ1MSwgMHhiN2U3ZGZjMiwgMHg2YWJiN2MwOCwgMHhiNjMyOWNlMywgMHhkZTZhZjk1ZiwKKwkweDM5MjNlMjI2LCAweDg1YzhmNzZlLCAweDU2M2FkZGY4LCAweDRlYTc3YWM3LCAweGU4ODEzOGI2LCAweGZiZDBhZjdiLAorCTB4ZDg0OGZmNmEsIDB4ODY4NmYyZDAsIDB4YjJmNTUxOWUsIDB4NmNjMWYzYzQsIDB4ZmFmOWMxZmMsIDB4ZjRmNTFiZWYsCisJMHg4ZTU5YzIwNiwgMHg5MzcwOTczZiwgMHhkY2Y0Mjk5OSwgMHg5NWFkZDQ0OCwgMHhlYTM2ZjNmOCwgMHgzZGQyMzM1OSwKKwkweDNhOWMxYjI1LCAweDFhZjI5ZjZjLCAweGYxYTI2N2VhLCAweGM3ZDBiZjQxLCAweDI0ZjhjNWFmLCAweDhmOTU5YzE0LAorCTB4NmZmNmM5YmQsIDB4OGU1MjhjYTEsIDB4Y2YyZDdiZjgsIDB4N2M4OTk3OWQsIDB4OWZjZTM0N2EsIDB4ZDBkYjdjNGIsCisJMHg3NWQ3OGRiMiwgMHhlM2NhZGQ4ZCwgMHgxMDU4MzU4MywgMHhjY2UyY2Y4ZSwgMHg5ZTk3ZmMyOCwgMHgzZmE1ZmYwMSwKKwkweDgyNzFmZTI2LCAweDc1Y2ZhNDAzLCAweGJlYjQ3NDI4LCAweDc4Yjc5NmU1LCAweGVmOTVjYmJmLCAweDQzMzI1ZmFjLAorCTB4NDcyY2I4ZWQsIDB4MzljNjhmOTcsIDB4MGUxZjA4MzIsIDB4NzQwNzRlODUsIDB4NWYwNTBhYjYsIDB4ZmFiZTEzNTcsCisJMHgxMzczZmIxNywgMHhmOWYwZWNiMSwgMHgzZWQ5YmE0NywgMHg4ODk3MmFlYywgMHg0MDcxY2RlZSwgMHhmOTJhM2Y3NCwKKwkweDQxMGVmNjhiLCAweDBlZDY4ZWZmLCAweDVhNWJjYmI2LCAweDg0YmUxOGJiLCAweDU1YmFkMDczLCAweDhkMTBkZDdjLAorCTB4YzA2N2Y5ZGYsIDB4MTMxZmZjZWYsIDB4MDFmNGEzYmYsIDB4YWRmYjAzYTMsIDB4NGUzYzA3ZGEsIDB4MTE4MGZmODUsCisJMHgyYjRjZjRjMiwgMHgyN2UyMjVmMSwgMHhmYWUyNGJhMSwgMHgyMTIwYjkzYSwgMHgxMzhmYTlhMCwgMHg3MzhlNTJmZSwKKwkweGNhZTlmMTNjLCAweDM3YWFiYjE5LCAweDk4NzkyMTQ4LCAweDMxMWQwYjFjLCAweDBlZDdjYzQ5LCAweGM0MWRhZjg1LAorCTB4MjJmZjJhZDcsIDB4MTFlYTk2M2YsIDB4YzQ5ZDZmY2YsIDB4MzdlMDQzN2UsIDB4ZjNjMGJmYzQsIDB4M2JiYTc4YTgsCisJMHg4ODFiYWYxYSwgMHhhYmMxYTc4ZSwgMHhjNjA3ZmViNiwgMHhjN2ZhMjc2YiwgMHhhZjgyMzdhNCwgMHg2NTM3NzhjNCwKKwkweDc3ZjllMzQ2LCAweDdjNTU1ZTBhLCAweDdmZTQ1MzZmLCAweDIzNmYzYzM4LCAweDdmOWVhNzNjLCAweGI0Y2I2ZjNjLAorCTB4Zjg5MWI4ZjEsIDB4NDUzZWNlMWUsIDB4Zjc1ZDQ3ZDIsIDB4N2U1YTcyMTAsIDB4MmQzYTcyMmUsIDB4ZGZmOGFhZGIsCisJMHg0NjE2NzdlOCwgMHhhMjZkZmRkMywgMHhmNzQzNTliYiwgMHg1M2M4MzM5ZSwgMHg0ZjI5OGZjZiwgMHg4NDhiNzg5MSwKKwkweDNhYjgxMjhkLCAweDNmZGZkMTJjLCAweGRmNTYxY2NiLCAweDRlM2MxNzlkLCAweGY4ZDZjZTBhLCAweDc1YmY5MzY3LAorCTB4MjliM2ZjNmIsIDB4ZmQ2OTYxMTgsIDB4ZTUzNDliZDgsIDB4OWFhZGViM2EsIDB4YWRhNjk3ZjYsIDB4NmU1ZmQ0ZDUsCisJMHhiZmE5YWY1YiwgMHg0ZDAxZmYzMiwgMHg2M2M3NmFmOSwgMHhkM2U2N2UxMSwgMHhlNzdhZmE5YSwgMHg3M2Y1MzQ2ZiwKKwkweGVhNmJiNzliLCAweDY4ZjRiN2U3LCAweGZlNzgxN2VhLCAweDc4YWIyOWFhLCAweDFjMGFkYWRjLCAweDM1NmI2ZDJmLAorCTB4NjVkM2YxMmIsIDB4ZmUwM2FiMGMsIDB4OGI4MzEyNWEsIDB4ZGZkOTA3MGYsIDB4ZDdiN2Y0YWMsIDB4YWZiMjRiYjIsCisJMHgzMmQxZmQ4MywgMHhjMjk2YWI5ZiwgMHhjZDlkOGFhYSwgMHhiNWY0MTI2ZiwgMHgyZDc4OTU1YSwgMHhhZDViZTE4ZCwKKwkweDNiZWZkNjM2LCAweGVlMTlmMzVhLCAweGYxMjg3NTZjLCAweDVkYzMyNTVhLCAweDRlMjU0ZWFkLCAweGI0OGMzMTczLAorCTB4YmI2NmFmMGIsIDB4M2QyMTY0YTcsIDB4NDRiY2JkYTYsIDB4ZTk4MGI4MDcsIDB4YzE2N2Y4N2YsIDB4NzdiYzVhNWUsCisJMHhkY2UyOGViYywgMHg4ZTVlY2EzNSwgMHhmZmIzN2Y1NywgMHhlM2FmZTQzNiwgMHg5NTA3MjZjZCwgMHgzMTFmYjc3YiwKKwkweGY5YTMwYWQ4LCAweDMyYjdlZTY1LCAweDZjZjhjMzM4LCAweDBkNWZjYjZlLCAweDQ1Y2Q2N2U0LCAweDA4NjNiYTBmLAorCTB4YTU5YTlkMzksIDB4ZjcyMDdlNjMsIDB4Y2MyZjUwMDMsIDB4MDUyMTgzMzYsIDB4ZDllY2MxZjUsIDB4ZjgwZGEzOTIsCisJMHgxODkyMDdiYiwgMHgzZjU4ZGNmYSwgMHgxMzNlMGY0ZCwgMHg3YTJkZWI5NiwgMHg5NzllMjk5ZiwgMHgzZmEzMzJlNiwKKwkweDEzMmM0YjNkLCAweDUwZjA3YTRjLCAweDczMjRhNDNkLCAweDdkMGQ3ZTljLCAweDM4M2NhMWI0LCAweGJmMThiODY1LAorCTB4MWMzZjIyY2YsIDB4ZTk2ZjVkZmIsIDB4YmRkZDkwMzAsIDB4ZmEyZmU3NmUsIDB4Yjg3YWMzNmYsIDB4ZjFjZTUzZDMsCisJMHgyNTYyNWMzZCwgMHgzZTc5MmRmZCwgMHgzNzFhOWRkNiwgMHgzNTIwYmNiYywgMHg1ZjE4NTBlMSwgMHg0ZTE5MjU0ZiwKKwkweGUxZDFmOGE1LCAweDdhZGM1Mjc3LCAweDljZjFjMTkzLCAweDA1ZGZiYTJkLCAweGM5YTc3ZWNhLCAweGMxNmZmYjEyLAorCTB4NGRkZTRkZDcsIDB4NzEzZTQ4NTIsIDB4Yjg0ZDNiN2YsIDB4MDFlMjI2Y2YsIDB4YzFiMzY3ZGEsIDB4N2U0NDU3OTcsCisJMHhiM2Y2NzZmNiwgMHgxNmQ3MmE5YiwgMHgyZTlhOWQxMSwgMHgxNTMxM2U5MSwgMHhhNjlkZTI4NSwgMHg4ZmQ5MmY5NiwKKwkweDkxY2ZkNDhmLCAweDkwZjE0Y2YwLCAweGZlNjU2ZmMzLCAweDkzYmFkZmRiLCAweDhiOGQ0NWY5LCAweDVjN2Q1YjdhLAorCTB4NmFiODBiMmUsIDB4MzlhM2UzYzMsIDB4YTY0ZGZmOTMsIDB4NGJlYWE3YjgsIDB4M2M0Y2ZmMTEsIDB4NTNmYmRjZTksCisJMHhkNWEwNzdkYywgMHgxN2U1MmZmZiwgMHg5YTgyYmNkNCwgMHg1YmNjODg2NywgMHhkZTY0N2FhOCwgMHg2ZTA5NzVhZCwKKwkweDJjOWFlZmRjLCAweDk0ZjMwNjUxLCAweDVlYTNhNjc0LCAweGRlZGY1NTQwLCAweDk3NjUxNTlhLCAweGJkM2FjOGVmLAorCTB4ZmZkNmQ2N2UsIDB4NmNmOWZhYzAsIDB4NGQzMWJmZjksIDB4YmU0OGQ1ZDgsIDB4MDVlMzM3ZGYsIDB4ZTU1M2FkMDMsCisJMHg5ZmZlNDhlZiwgMHhmZTcwN2Q0MywgMHhkNzkyNGQzOSwgMHhmNjdhN2E4MywgMHg0NGMzNzY5MiwgMHg3ZGY5ZGNlOSwKKwkweDg4YTBlNWI5LCAweGMyZWQyMzhiLCAweDM2MDdiNmY3LCAweDJiNWM5YmE2LCAweDkyNjE3YzczLCAweDFlNTA3MjZmLAorCTB4NDc0M2E1NDQsIDB4Y2YzYWRkMzQsIDB4MWZjZWI3NDAsIDB4NzZkMTZlOTMsIDB4NzNiY2UwZjEsIDB4ZjFhMDhiYjMsCisJMHg4YWNiZGZjZiwgMHhjODNlMjdmMiwgMHhhOTFmYmQzYSwgMHhmNzgxZmZhZCwgMHg2MzZiMWQ2ZCwgMHhlZjQ0NzJiOCwKKwkweGVhMjc1OTNjLCAweDAxNjI3YzQ1LCAweDgwZWZmMjFkLCAweDc0YjhlNjU3LCAweDNjN2I2NjY5LCAweDE5NTAzM2M1LAorCTB4Yjc3ZDI3OGMsIDB4ZjIwNjViYWMsIDB4ZDRlZjQxMGYsIDB4NWNmZTQ2OGYsIDB4MWY2N2YwYTIsIDB4N2UyNDNlZjgsCisJMHg3ZWY3MDU1YywgMHgyNTk4MDk0MSwgMHgyMmFlNGJkNSwgMHgwOWY0YjczZCwgMHhmYzRmMDg0MywgMHgyN2YzOTNhZiwKKwkweGNiN2U5NGFiLCAweGRhNDY5ZDJkLCAweGI1NjdmMmVmLCAweDFhNzFkNGVkLCAweDFmYzg4YTVmLCAweDE5ZmE1ZjU3LAorCTB4NzNmMGRkYjAsIDB4YTc1NTZmZGUsIDB4NTk3N2RmYjYsIDB4NjI4NzI5NzEsIDB4MDg0YjE2NTksIDB4YTdkMjY3ZWYsCisJMHgxYmFlYzk0NywgMHg1YjI3Y2FjMiwgMHgzZjIwYmYzOSwgMHg5ZTAzZTBmMywgMHhjNGZhMjFiMSwgMHg3MWYxNDc2NCwKKwkweGY5ZTlmNjVjLCAweDIzZmY1YjU4LCAweGY3MWNiMWYzLCAweGY5ZTg5MWFjLCAweGJmNzhmOTdkLCAweGViNDU5OWRkLAorCTB4YTBmM2Y1NTYsIDB4YzRjMzc5ZGUsIDB4ZGNhMDY3N2EsIDB4MzdhNGYyMjYsIDB4OWUyZGFlZmQsIDB4MzgwNGU0ZjgsCisJMHgyYTE2MWQ4OCwgMHg2YTg1ZDJmOSwgMHgzNjlkNzRiZSwgMHhjZmI5M2E1ZiwgMHg0OWI5NzljNywgMHg3MTZkYmQwNywKKwkweGJkODlmNzQ4LCAweDU1ZGJjZTFlLCAweDU5Yjc3NmVkLCAweDVkZDNmY2IwLCAweGEzZmM5OTRlLCAweDY0Yjk2ZmYxLAorCTB4ZGZlYWI3NWEsIDB4NDg0ZWZlYTgsIDB4YmViMGU1OGYsIDB4ZjY2YmJjZTMsIDB4ZDUzYmViZDksIDB4MzBmNmFhMmUsCisJMHgwNjU2MGVkMiwgMHhmZWM5NmJkYiwgMHhlM2I2Zjg0ZCwgMHgyYmU3ODI0ZCwgMHhmNzY5MWVhZiwgMHg3YTEzOGJkZSwKKwkweDU3YzFhOGUyLCAweDhjZmM5N2JlLCAweGNmMWM2M2Q3LCAweGFmZmFmNDQxLCAweGM2N2UxNmNiLCAweDAzMDJjZjRjLAorCTB4MWYwOTFmY2IsIDB4NDUwY2RiY2EsIDB4NzY0ZmFlNmUsIDB4ZjU0ZDk3NWYsIDB4OTlkMGJkOGEsIDB4YTNiMjA2OWQsCisJMHgyM2RmNzI3NSwgMHhmOTVmMTJkNywgMHhkZTFiY2U2NSwgMHhiZjA3Yzc3YywgMHhjY2VkYjVmZiwgMHhlYjI2ODVmOSwKKwkweDg2M2ZmNjcxLCAweDc0OWEzMzhiLCAweGEyZjhhNmUwLCAweDRhNTZkNmE0LCAweDZkYzUwYzdlLCAweGYzNTQ0Nzk0LAorCTB4OWZlZDkxOGEsIDB4YzhhY2Q3YjAsIDB4YjU1NzNjZTYsIDB4ZDllYjQ5ZGYsIDB4MWMzM2Q2MjgsIDB4YmU1YTlhYmQsCisJMHg4NzMxZTRkMCwgMHhiYmE5YmY5YiwgMHg0YzMwYmFkYywgMHgxNmNhNWUzZSwgMHhkYmQyMmVmMSwgMHhhMjFjYzg3YSwKKwkweGM1ZjJkOWY3LCAweDY1ZjhiN2ZmLCAweDA5MWUwYzlhLCAweGU0YTE2Y2VkLCAweDA4MmZmZTE1LCAweGY4MGU3ODNmLAorCTB4MjA4M2NlMTksIDB4Zjk1ODM3NDMsIDB4MzgyMTZhN2MsIDB4MTcwMjJlMTgsIDB4ZGJiYjdjYzMsIDB4NjAzMzdjNGIsCisJMHhiZTI0OGUwOCwgMHhiYmY1N2ZlYSwgMHhmZTliZTIwMiwgMHg1N2I2Mjc4YiwgMHg1ZjNiZjljMSwgMHgwNmZmZjQ4YSwKKwkweGZlNzhkYmM2LCAweGRiYmU1NzgxLCAweDcwMzlmYzQzLCAweGY0YWNlMTg3LCAweDY3NjRlYWM2LCAweGU0NTFmMTI3LAorCTB4NTNiYmNiNzksIDB4MDFkNzNlNjQsIDB4OGI5NjdhZmQsIDB4MDNlOGFiN2EsIDB4MWI3MmE0OTcsIDB4ZTY0Y2Q4ZWIsCisJMHgxY2RlOTA4YiwgMHgzN2FhYjRmNSwgMHhjMmJmNjAxNywgMHhkN2FjNzQ0ZiwgMHhiNWU0OTk2MCwgMHg4MGFlZDM2MywKKwkweDcwYWM0NThlLCAweGE2NTdhNjcxLCAweDJmYThhNzcyLCAweDk1ZTg5OTVjLCAweDE1NTg1Y2IwLCAweDRhNmZlYTIzLAorCTB4YzUyNjQyZjQsIDB4Y2I5NjAxNDMsIDB4MGZhYzAwZjksIDB4OGJkMDgwMTcsIDB4Zjc5MzgyMzcsIDB4OTY0MTkxODksCisJMHg2ZjE3ZmQ4NCwgMHgzZTcwOTczNSwgMHhhNDM5MDIxNiwgMHg4ZTI4OGJmZiwgMHhiNzRlMjIxYSwgMHgyZjc5MDhlNiwKKwkweGJlZmExMmNlLCAweDE3OWI0NmI4LCAweGM5NWIzMGY5LCAweDRhNmJkYjFiLCAweGU3NTYxMDcyLCAweDFkMTJmNzM4LAorCTB4MWJmYzkzOGIsIDB4N2NhMzJhMWUsIDB4YTEzNjBlOTAsIDB4NzU1NjdkN2MsIDB4YWE3NzlmMmIsIDB4MzVlZDFhZmQsCisJMHhjZGJmODRiZCwgMHhlMmJjNzAxMiwgMHg5Zjc5MzZlOSwgMHgyMzhjZTcxMywgMHhmMmNkY2ZjMywgMHhhODA3YjVlZCwKKwkweDdiNWExMWRkLCAweGM1NzhmMGY5LCAweDQ3ZjcxYzdlLCAweGQ3ODc5NWNiLCAweDFiYjE0YzU3LCAweDQzZjFmYmU3LAorCTB4ZTVjYmNmMjUsIDB4ZWJlNjc5ZmYsIDB4ZjgwYjNiZmEsIDB4N2U0M2MxNGMsIDB4N2RkZGEzNzIsIDB4MDQ2ZmQ3OWMsCisJMHg5ZmZhZDBiMCwgMHg0MDE0NzExNCwgMHg0N2U1MDY3MywgMHhkMjY1M2M5NywgMHgxMWYxOWY5MSwgMHgwM2M4NjM5YSwKKwkweGRkYzYxYmY4LCAweGUzMWJmZjA0LCAweGM3N2Y4MjY3LCAweDI3ZTA5OWY4LCAweGZjMTMzZjE4LCAweDA0Y2ZjNjA3LAorCTB4MWUzYjdmMTcsIDB4OGQ4MDIyODMsIDB4NGU0YjRlMzksIDB4MzAxY2U4NzksIDB4MWM4NmJkNzIsIDB4ZjljMWNmODEsCisJMHg3ZjNjOGRiYiwgMHhmOGNkZGQ5ZCwgMHhlYmY3YTQxZCwgMHg5OTczYTVlMCwgMHgwYmMxODljZCwgMHg2ZmMzNGU5MiwKKwkweGYwZGZkZDAzLCAweDc4NzBlOWY5LCAweDIzMjVjZjUxLCAweGU4NTNiZmViLCAweDY3YTlkNDVhLCAweDE1ZDQ1ZmZiLAorCTB4NmIwODZmODgsIDB4OTE4ZTQxNzcsIDB4Mzk1ZjBiZWIsIDB4MWZlMzRmMTgsIDB4ZDdlMjBlYjUsIDB4YTc5NmUxMjksCisJMHg4MmY5NDRlOSwgMHgwODMzMmQ2NywgMHg2Nzc2NzViZiwgMHhlNTFiZWQwOSwgMHg1MWY2ODMzYywgMHg4M2MxZjVkNCwKKwkweDdjNzhjYjEzLCAweDc1YTM2NGFiLCAweGI4ZTUxZjA0LCAweDkxMWY2MjIxLCAweGI1Zjc1MDc4LCAweDgxYmZkMTM5LAorCTB4MjU3ZTZmZmEsIDB4N2E4Mjc2OGIsIDB4MTBkYzg0MDcsIDB4ZWQ0MzQ5MWYsIDB4Y2ZmMzJkNzcsIDB4Y2NiMDUzNzQsCisJMHg3ZTlkZWI4YSwgMHgwYTFlNmU0YSwgMHgyOWY2NzVmZiwgMHg1NDc3ZTc4YywgMHhjN2NmNTM3ZSwgMHhlOTUyZmUxNSwKKwkweDFkZjJhZTc2LCAweDZiOTAxZTM5LCAweDZhZTc3ZTg0LCAweGIyMzZhNWQyLCAweGM5ZTMyNzRiLCAweGVlNTdhYzJmLAorCTB4ZTY3NTc0MTksIDB4ZjRmYjQ3YmMsIDB4NmVjMTk0ZWMsIDB4YzhkNjNlNjMsIDB4NWY4NTYyZGYsIDB4NmRkODU4NTQsCisJMHgzNmJkMTE3NCwgMHg1OWNhMWY3NywgMHhlNGZhNjE2NCwgMHhiM2Y2YzYyYywgMHhiYzlhZWM3MiwgMHg4OWQ1NjE2NywKKwkweGUxNGExZmM3LCAweGVhOWE1NmY2LCAweGNlYmE3ODNhLCAweDYwZGZlMzhhLCAweDZkMzZmZWRlLCAweDkzZjVhZTY5LAorCTB4Y2YyYzQ0YmEsIDB4MTA3NjkzNGYsIDB4OWNjYjYwNWMsIDB4ZTVhMzY0OWEsIDB4MzdmZDc5N2EsIDB4NDFkOTRmZTYsCisJMHhhMzk1NzUyMiwgMHgyOWI5ZmQ5ZSwgMHhlY2MyNjRhNCwgMHg5NjM5YWQ0MywgMHhjYjA3MWYwZSwgMHg0ZDY0ZDY3NSwKKwkweDMxYjRkMmY5LCAweGRiOTdmNjlhLCAweDU3ZjUzNWIyLCAweGQ0ZDM4ZmU2LCAweGU1NWVmM2FiLCAweDJiYjRkNTI4LAorCTB4NTE2NjBhNGUsIDB4NjBmYjg3NWMsIDB4NjRlNzgwYjksIDB4N2RhMjVkYWYsIDB4MWM2MmJlZWYsIDB4M2YzZGE3OTYsCisJMHhjYTZlNDFjYiwgMHhkYTdlYTU2NiwgMHhkMTJmNWE5NiwgMHg2OWYxMDA2MywgMHg3MGVhODc0NCwgMHgxZjQ3ZmFlNSwKKwkweGUyMjJjMWEyLCAweDY3ZWVjNjg2LCAweGU3NmQzODc2LCAweDEzMGMzNzEwLCAweDcxMDBhYzJmLCAweGRjNWMzZjhlLAorCTB4YTAyZjE5MTAsIDB4ZjQ5MDdjZmUsIDB4ZDdhYmYxNjcsIDB4ZGM3MGRiNTgsIDB4MmUyNzU1Y2QsIDB4ZWYzZWUxYjAsCisJMHg4MjM4YzFjYywgMHg0NzEyOGRlYywgMHg4MzNmYzcwYywgMHgwNGQ5MjI3MiwgMHhmMGM4ZjRmZiwgMHgwM2ZjMTBkYywKKwkweDFmODUwYmYwLCAweDNlZjY5YzA1LCAweGRmMDUzM2ZhLCAweDRhN2RiZjVmLCAweDA3ZjM4ZGZhLCAweDU3ZWZjNTFlLAorCTB4YWZiZTQ0NjAsIDB4NmY3OGU4ZDgsIDB4ZGVhN2U1MGQsIDB4ZjljZTgxOTEsIDB4MDNhZTI0ZTEsIDB4NzdlODFiZWIsCisJMHhiMGY3YzQzOSwgMHg0NmJiZTllOCwgMHgwZjc3ZjBhNywgMHg5NGFiYTZiOSwgMHg3MzFmZGZmYywgMHg3MWFhYmYxNCwKKwkweGNiYTM1ZGZiLCAweGYzNzBmNTQyLCAweDcwZjY5YTI3LCAweGE2Yjc3NGJiLCAweGI2YTY2NzdjLCAweGJiOTRlZjdjLAorCTB4ZTcwZmZiYzMsIDB4NWM2YzM1OTcsIDB4OWNhMzc0NjAsIDB4MzkyYzNjMzYsIDB4OGJlODQzYmQsIDB4MjhhNGY1YzEsCisJMHgwOTdiYTFmYSwgMHhkYjQzZGJlYiwgMHg3MTZkMTk5NywgMHhlMTU3ZWRkMSwgMHg2Y2I3OTQ3OCwgMHhhYWRlYzYxOCwKKwkweDE5M2FlYTdhLCAweDdmYWE4NzlhLCAweDcxY2Y5ZDQ3LCAweDA4ZmJlNzdlLCAweGNkZjY0ZjcxLCAweGMzYjA5YWYzLAorCTB4OGRiODI1MWYsIDB4MmZiMjdjZTEsIDB4ZjQ3YjljNDcsIDB4MWRjMGY2M2YsIDB4ZWU3OWQzNWYsIDB4ZWFiZTIyZWIsCisJMHhhM2Y2MTQ0ZiwgMHg5ZDMzZjNhOCwgMHgwOGYxNjEwZSwgMHhkNjQ1NWZjMSwgMHhkMmVjOGU4MCwgMHgwZjU4ZDJjMCwKKwkweDJkMzU5Y2EwLCAweDhhZThmMzhiLCAweDdlMDg4ZmM5LCAweDVlNGYxZTY4LCAweDlhMGYyZGM3LCAweGViMWZjZTkxLAorCTB4M2NiYjFhNzQsIDB4OTYxNmMxNDAsIDB4ZDlmZDllZmIsIDB4ZjdlOTNiOGMsIDB4ZTkyZjcxMDIsIDB4MmZiM2VkN2MsCisJMHhhZDdkODQwNywgMHgxZTYzN2ExMSwgMHhiNzYyOWZmMSwgMHhkMzU2NTUwMCwgMHhjNzY4MzA1ZCwgMHg1ZTEwY2Y0OCwKKwkweGJmNmI5Y2E4LCAweGM5ODdmZGY1LCAweDdhMTFlZmNmLCAweDM3MGFmMjgzLCAweGI0ZTA1ZmIwLCAweDFkMGRmMzY4LAorCTB4YmJmOGU3MmMsIDB4ZDczZWZjMmQsIDB4Yjc4ZmViNTksIDB4ZjM5NjhkZGEsIDB4ZDg0NjQ3YTgsIDB4MjE4Nzc5YjUsCisJMHg1N2ZiYzVmNCwgMHg1ZTliM2QyMiwgMHhkMDVlZjk5NywgMHgwNGY2YWRiMSwgMHg5MTFmZDMwOCwgMHgyOGRhNmM3OCwKKwkweGU1YWI5Y2IzLCAweGNiZTU1YmEzLCAweDgzMGY2Y2JjLCAweGQxODVmNTE5LCAweDgzYTcwNmY4LCAweDU1YjU3ZmU1LAorCTB4ZDI3YWI3Y2MsIDB4NGVjODMzMzcsIDB4OGJkNmVlYWYsIDB4Y2RjMzJmNGIsIDB4NWIwNjRlYjMsIDB4Yjc5YjNjZDgsCisJMHg1ZDkyOTY5OSwgMHg2MDNmZDc1MywgMHhmNzQ5ZjQ1NSwgMHgwYTUzNDk1NywgMHg4NDNiNWMwNCwgMHhjMGJmNDU3ZCwKKwkweDQxN2U0MjkwLCAweGVjZjFjNGJkLCAweDM1NTFlZTllLCAweDEyM2RhNzg0LCAweDNjMjU2Y2Y4LCAweDVjNjYzNWM0LAorCTB4MWMzMTRjZGYsIDB4NWU1MGI3N2QsIDB4ZjlmMmQyMTQsIDB4ZDcxYWE1OWUsIDB4YWNlY2YxYWEsIDB4ZjI3NjU5ZWUsCisJMHg1Y2VjM2Y2MywgMHgwNzI5MDdiOCwgMHhjY2Q5ZWM5MywgMHg4NzgyZDc0ZiwgMHg4OTNkZWVmZCwgMHg5M2NhNzRhZSwKKwkweDNmZWU1MzRjLCAweGY2MGM0OWVjLCAweDY3YmRiZjkxLCAweGY3NDRhYzUyLCAweDNiZmM3MDE5LCAweDVmNzU3YzY5LAorCTB4ZjRhZTBjN2IsIDB4OTI5N2RlNjYsIDB4NDRmZTc1MmYsIDB4ZjY3YjE1M2UsIDB4NjdhYWEyNzEsIDB4YTdkYmU0ZWIsCisJMHhmN2U3NDk1YywgMHhmMTRhYzA3MywgMHhmODU5NzRlYywgMHgyMTQ3ZjBkNSwgMHg2ZDVlYWFjZiwgMHg2YzQ5ZmM5MiwKKwkweGE2MzNlZGFhLCAweGEzNGYxMWRiLCAweGU0YTk3ZTVhLCAweGY3MzVkYjdkLCAweGFmZDZjZjAwLCAweDVmYTM4YzFlLAorCTB4NTY3Zjk4OTQsIDB4YjFiYzQ0MzksIDB4NDdmM2ZhYWEsIDB4NTdmOWM1YWUsIDB4ZmU0ZmJjNjEsIDB4ZWRhZWMyZGQsCisJMHg5MTdmMDhmYiwgMHg3YzYwZmRmMSwgMHg3YmU2MmZmNSwgMHhkNzMzZTNhMywgMHhjZGRmZGEzMiwgMHg3M2RmMWM3NywKKwkweDY5Yzc0NDJkLCAweGVhODE3MTgzLCAweGNiMTczZTVmLCAweDU4YThkNmU3LCAweGZjMjg3Yzg1LCAweGVlNWI2NDdhLAorCTB4N2Y1ODM1ZGUsIDB4NjYwNjJmZTQsIDB4ZmQyNzM3ZDcsIDB4NThhZGU4ZWEsIDB4NThiOWY5YmUsIDB4MjQ5MWYzYzYsCisJMHgzOTFkOTBmMCwgMHhlYmNmMjliMiwgMHg3NDRiMDZjMSwgMHg2ZmIyNWVjMSwgMHhjZjhlMjViMCwgMHgzMjdiM2U2OSwKKwkweDUxMmZiN2VmLCAweDc2YjdmMjdlLCAweDdlNDg0M2Y2LCAweDdjYzJlODZjLCAweGU4OGZmNzQ2LCAweGI5YTNjYmZiLAorCTB4YmNjNWI4MWYsIDB4Y2E1YzhhMGQsIDB4NWZkZTE0MmYsIDB4MjQyZmY1NGQsIDB4YTU0MjdlNzMsIDB4NjMyN2UxZGYsCisJMHg3ZGFjMTQ5YywgMHgyYjIyYmUwNSwgMHg5MmU3ZGViMiwgMHg1YmRkMTBlNywgMHg2OTdiYTE1YywgMHhmOTdjODRiZiwKKwkweDA2ZjcwOGQ1LCAweGM3ZjJmN2RhLCAweDg5YzNmM2ZmLCAweDE3ZGE5ZmI4LCAweDE1NTVmZWFlLCAweDA3ZDk2ZmFlLAorCTB4ODRlMzQwYTksIDB4ZGZiNDNhZTgsIDB4YjY2YjZjNzAsIDB4M2YwNTdmOTAsIDB4ZjE4YzVlMmIsIDB4MjdkMzBjMWUsCisJMHgzNTEyM2IyYiwgMHhkMWFlYTZlNSwgMHg3YTYxODNkZSwgMHg3MjllZjA2OCwgMHgwNGU3YzRhMywgMHhlZDVjOGE4ZCwKKwkweGVkZGJiYTM3LCAweGZiYTVkNzk0LCAweDcxM2Y0Y2E5LCAweGNlODRiNTFmLCAweGY3ZmYwOGFiLCAweDkxZmYxODk5LAorCTB4NWRhMmY2N2MsIDB4ZjM1NjY3MzksIDB4NGU2MGM5M2MsIDB4MGI3NWI5MjMsIDB4OTdkYzBkZmMsIDB4MzFlMjg5YjcsCisJMHhmMTQ5M2Q5ZiwgMHgzM2I5ODIzYiwgMHhiM2Y5YzMwYSwgMHg5YzFiZDU3NywgMHg3Yjg5MzFlNywgMHg5ZjQzMzE4ZiwKKwkweDEzZGE3N2ViLCAweGY5ODM3ZGI5LCAweDY5OWU0ZDRiLCAweDRkMDljYjU1LCAweDAxNTU2N2ZlLCAweGQyNTAxZmIwLAorCTB4ODliZDJiNjYsIDB4YmExNDg3Y2UsIDB4N2FlZTlmZGMsIDB4ZjFkZWYxOGQsIDB4MThiYmFiYzAsIDB4ZjJkYzRmOWYsCisJMHhkM2JiY2QzMSwgMHg1ZDgzZjRjMiwgMHgxMTE2M2M0YSwgMHhiZjk4MzU2ZiwgMHg2OWVmZTQ1MCwgMHhlODdlN2Y4ZCwKKwkweDk0NDViZGIxLCAweGNhZjQzOGZmLCAweGQzY2EyMmI4LCAweDg3ZmQ5NDJlLCAweGY3Yzk5ZDdlLCAweDg2ZGZmNjljLAorCTB4ZjdjZWNiNzAsIDB4YjkxZTJmMzksIDB4MGM3YmE4ZGUsIDB4OGQ0M2QwOTIsIDB4YmE2NDhmYjQsIDB4Yzc3YWUzZmYsCisJMHhmNDJlNzJjZSwgMHg4NTBkODFjMywgMHgxZjM1M2Y4YywgMHhlODY0NzAzZCwgMHhhNzVkNTA3OCwgMHgzZWJhYmUzYSwKKwkweGRkYjU3Yzc1LCAweDVmMjJlY2RmLCAweDE3ZjQ2ZmQwLCAweDQxNWZmZDkxLCAweGZiNjEzMGU3LCAweDE3Zjc4ZmVhLAorCTB4YmJlODVhMjUsIDB4NDkxM2Y4NTUsIDB4YjdlMzBlNTgsIDB4MmFiY2Y1N2YsIDB4ZjA2YTdjZjIsIDB4NDdjOTU2NWMsCisJMHhmZGFkZDNlZCwgMHhhZmY5MTE5OSwgMHg4MzIxZTNhZiwgMHg3ZWVmNWMzYiwgMHg3NTJhNzNjZiwgMHhkYWZkZWFiZCwKKwkweGZkODVhYjdlLCAweDI1NzY5MzliLCAweGU5MGU5ZjFmLCAweDFkZWIwZWQ0LCAweGI3YmZmMjNlLCAweGM3ZTQxYzk4LAorCTB4OTA1YzlhMjcsIDB4MzQ2OWY4OGIsIDB4OWFmZWY4ZmEsIDB4ZTRkMTJmZGEsIDB4Nzk5MWVmZTYsIDB4MjM0NDgxZjksCisJMHg4MWU1YmRkMCwgMHhmN2ZjZTU1NCwgMHg0MmJkNjAyYiwgMHg5YzE2ZTg3MSwgMHhkNzU2YWNiNywgMHhkMjEyYzViYywKKwkweDJjZmVhYTg3LCAweDBiZGY4NzFiLCAweDNlYTkxZWU4LCAweGRmMjAyN2U0LCAweGRiNmIxNTk0LCAweDJkYTNmNjg3LAorCTB4YTBhZTdiZmYsIDB4NmViMjU5NjMsIDB4MjRiOTM4YzgsIDB4MWI2NWM4NTcsIDB4OWU0MmM4NzQsIDB4YTg5ZDFkODUsCisJMHhiZjBkMWRlMCwgMHhhY2Q3ZWUxYywgMHg0MGZjZjQ1MiwgMHgwNzQzZDliYywgMHg4YWI3MTNiYiwgMHhmNTEzYWI3YiwKKwkweDUxMDRlZGJlLCAweDEyNGI0MDBiLCAweDg5ZjQ5OTVkLCAweGZhYjRiYWYxLCAweDFjYzg2YzljLCAweGQ4ZTNjYmI2LAorCTB4Yzg1MDRmMmUsIDB4Y2NkNGI3N2QsIDB4Zjc0MzViZjcsIDB4YzEzMmZkNWMsIDB4ZDBjODIxOGIsIDB4NDEzZDU2MDksCisJMHg0YmMzMDMyNCwgMHgyYTcwYzVjMCwgMHgwY2JjMzMzNCwgMHgwMTVlMTlkYSwgMHgwMmFmMGMxZCwgMHg4OWY4NDMzZiwKKwkweDFlZDgwZGFmLCAweGZmNjU2ZWRjLCAweDNhMjVmMmU5LCAweGQ3NjVjYmIyLCAweGNmOTdlZDBlLCAweDNjMzVmMDUyLAorCTB4NTdjYjUwM2UsIDB4YTYzZTNiOWMsIDB4ODc3MmY3MmEsIDB4N2NkOGNiYzUsIDB4MmYxNTdiZTYsIDB4ZWM0ZmUyMjYsCisJMHgzNGRlMDMxNywgMHhjMDIwOTM4MiwgMHg0NjI2NGNlMywgMHhkZDc4YTZjZSwgMHg2YjdlZjdjNiwgMHhiYWU1YzljMSwKKwkweDY1NDdjNGIzLCAweDE3NzdhZGMwLCAweGRhOTc4MTBjLCAweDllNjRmOWExLCAweGI5MDMyN2MyLCAweGU5NTFmOGMwLAorCTB4OGRhZTQ4ZjUsIDB4MzBkZDJhY2IsIDB4N2IyMzRjNTAsIDB4Yzg0ZjRkMTAsIDB4YzU5Njc1YTAsIDB4YTdhNzFjZDYsCisJMHg1ZjNmYjcyMiwgMHg3YThmNTMzNiwgMHg2NmI0YWNiNCwgMHg1ZjkwYTkwZCwgMHhlNTE1NGVlNiwgMHhkMzJmMzU4OSwKKwkweGYzZmI3ZDUxLCAweDcxNzI4YTk3LCAweDgxYzFhOTRkLCAweGNiZGFlODVlLCAweGZhODI1ZTY2LCAweDI3ZGNhZGQ5LAorCTB4YTAxMWEzMzcsIDB4YjY3MjYzN2IsIDB4MmI3NjE3MzgsIDB4NzI0ZGNhZjcsIDB4MmZiYTVhZTYsIDB4NTgwZGJhNjYsCisJMHgwMDYzYjhkZiwgMHgyMmQ3ZWNmYywgMHhiOGJjOTFiNywgMHhiMzdiMWM0NSwgMHgzYWFmZDA1NSwgMHgyZTRiN2RkNiwKKwkweDJmYjMzM2Q5LCAweGI4NzQ4NmRlLCAweDI4ZGQ2ZDc5LCAweDE4Zjc5YmIyLCAweGE0OWZmOGM1LCAweDgxYmRjNmRhLAorCTB4YzQ5OTMyZjgsIDB4YmY3NTU2YmQsIDB4YzE4OWVmNTgsIDB4YWRiMjQwNzIsIDB4YWQwY2M5NjksIDB4NTljNzVkNGIsCisJMHhlOWQ3N2JjYywgMHg3NzRmY2RlNiwgMHgwMjNkMjA2ZiwgMHgxNWM3MDczNiwgMHhiZWZiMTQ2MywgMHgzNGM0Y2I2NSwKKwkweDFkNzAzMGY0LCAweDIwNDc1ZTU2LCAweDBiNGQ3NzJlLCAweGVlOTFkZDU2LCAweDFiYzY4NDdhLCAweGY4N2MxMzg4LAorCTB4NzUyOWQxMDgsIDB4NzVjYmU4NzgsIDB4YzQzYjk0M2UsIDB4ZGZiNTgxZjcsIDB4YmQyM2VhYmMsIDB4MDQyZTI5ZjQsCisJMHhhZTRkZjljNywgMHg0NzVhNzFmYiwgMHg1MTkwMmU5MywgMHg0NWZiZjQ4YSwgMHgwNTAwN2EyYywgMHg5MDk2YmUyMSwKKwkweDBmMTA3Mzk4LCAweDFhZjA0ZTZkLCAweDc3OTQ1ZTU5LCAweDk5ZjljYTM2LCAweDhiMDMxNzJhLCAweDRmYzQzYzcxLAorCTB4OGI1NWNiOTksIDB4Y2M1NDIyZWUsIDB4NjA5MzdlNmUsIDB4MTZiZGJiYTUsIDB4MTc5ZTY4NmIsIDB4NzI0ZDNkNjgsCisJMHhlNGY4ODFiMCwgMHhjNjA3ZTI2OCwgMHhjNzZlNTk0ZiwgMHhmNDU0ZmUwYSwgMHg5ZWI2Zjc1OSwgMHhhMjg4YzZkYiwKKwkweGIyZTRjMjBiLCAweGFmODlkYjY5LCAweDZmNzQ4NmZmLCAweDUwNzE2NjNhLCAweDNlM2M5MGYzLCAweGU3OWM0NmI2LAorCTB4NDZmYTM0NWEsIDB4NWQwOWQzOTUsIDB4OWMzODNlMjYsIDB4YzVhMmY1YjgsIDB4MDdkMjZlZDQsIDB4YjdhNGQ5YmQsCisJMHhkYTA2ZjcyNywgMHhlODFlN2RjOCwgMHhjODQ2M2JkZSwgMHg3ZmQ3ZWE4OSwgMHg3ZDhiOWQyMywgMHhmYzhjY2NmOSwKKwkweGY5MTA0MDkxLCAweDgzOWM1ZTIzLCAweDhhZjRmYzczLCAweGFkNWYwNzM4LCAweGVjYTkzZGU0LCAweDc4OGI3ZGUxLAorCTB4NTczYjhkNTQsIDB4ZGUyZGJjZjYsIDB4NmZmMDc5ODUsIDB4MTIyYmJkMDUsIDB4NzEzZTk2N2YsIDB4NmZjNDU1ZTMsCisJMHhkNDhiZWY5MSwgMHg2OTQ5YjQ3OCwgMHg3YmQ3YTJiNywgMHhmMjI3ZWQzNywgMHhjNTEzNTFiZCwgMHhiZmMzNDVhMywKKwkweGEyN2E2YTM3LCAweGM4ZDFlMzk2LCAweGI5YmQ0NmY3LCAweGIxNGFmZTRhLCAweGExZjhhMDhmLCAweGI0MzY5NDRiLAorCTB4ODdjNzBiM2YsIDB4ZjcwOWFmNDYsIDB4MzVjOWZhYjYsIDB4ZDM5NTJiMGUsIDB4YzdkNjBlMmQsIDB4ZTEwZTNkNTcsCisJMHg2NDg5ZTFlZCwgMHg5ZTU1MTllNiwgMHhkODkzYWQ5NywgMHg1YWYxNTZiZiwgMHg0OWM5YmNmYywgMHg3ZTdlMjhlYiwKKwkweGU4Y2RmYjE0LCAweGU5N2I4YmVmLCAweGRlOTEzZTRhLCAweDgzN2JkMDEyLCAweDJjYzE4OWNkLCAweGI5YmE2N2JhLAorCTB4ZmU0MWRmM2IsIDB4OWQ1YTFmZjgsIDB4Njg0MzBmZjAsIDB4NTAzYzZhN2QsIDB4NGI1NGJmMjcsIDB4MmQ4ZTg3ZWYsCisJMHgzZjBiMzhjMiwgMHhhNjc5ZWVhZCwgMHhkNWU1OGNjZCwgMHgxMDU1ZTllYiwgMHgxM2YzODRhNSwgMHhkZjJhYWZjOCwKKwkweGM2OTc4MzI5LCAweGQ1NDNlZjAxLCAweDM5MTUzYjA4LCAweGMwZTlhNTM3LCAweDE4OGY4NjE2LCAweDBkYjAwOGRiLAorCTB4MjkzMDBmOTEsIDB4NGZjZDhiZjQsIDB4MzljN2Q0ZDIsIDB4NGZmNGQwMmUsIDB4ZDRkMmNjYTgsIDB4Zjc4OGM1YjcsCisJMHhmYTcxZTAzMiwgMHhlZjQyMmEwYiwgMHgzZjlkMTI0OCwgMHgwMDgzZjRkMSwgMHhiZDA4YWRmZSwgMHg3ZTI3YjkxNywKKwkweDRmN2U0ZWVhLCAweDNjZTA2ZmUyLCAweDI1NjVmMjQ1LCAweDc5MjZmNjlhLCAweDVkZmM0Y2FiLCAweDQzNWVhNWZkLAorCTB4YTY1MjlmY2YsIDB4Yjk1NmYxMWIsIDB4OWMxY2ZkMWIsIDB4YjY5ZjQyNjcsIDB4MDFlMDI2M2UsIDB4NWJiMzE3ZWEsCisJMHg5ODRiYzlhZiwgMHg4NWYyZGE2YywgMHg2MjllNGE3OSwgMHhlNGQ1OGMyYywgMHgyZWYxMDYyOSwgMHg2MWQ4ZmVmOCwKKwkweDA1NDVmMzFkLCAweGJhYWFmY2U0LCAweDAwNmNmMDhjLCAweDZmMWEyZGFmLCAweDVkZjg0MGM3LCAweDFjNWFjNmM3LAorCTB4NDI2YTk2ZjQsIDB4YzkzMmNiY2YsIDB4OGI0YmFhNDEsIDB4YjViMzUxZmYsIDB4ZDZlZDFmZjgsIDB4NTJjYzdiZTIsCisJMHg5YmQzYmUyZCwgMHhiMGJlZjhiNSwgMHg0Y2Q3OGI0NSwgMHhkOTZmMTY4ZiwgMHhkYTY4MjZlYiwgMHgzNDZiZGJkYiwKKwkweDU3OGRiY2U1LCAweGU0NWZkYTY4LCAweDhmMjlhMTlkLCAweDRkN2FmMTdiLCAweDg1OGVjMmZiLCAweGFlZTJmYTlhLAorCTB4OTU3YTlhZTUsIDB4ODNlMzg2Y2YsIDB4MTFkNWJlZjEsIDB4ZGQwM2E2ZmMsIDB4NzRhMGY4NjksIDB4ZjMzNWNmZTcsCisJMHg5ZmY0NTBmZCwgMHgwNWU4YTc5ZiwgMHgyYmQ3ZmU4NSwgMHhmOGRkZTU3NiwgMHhiODkyZjdjMywgMHg3YTE1OGI0ZSwKKwkweDUwZGYzMDcwLCAweGVlNzhlMDZkLCAweDZkNzI1YjNkLCAweGM1MDVlOTFjLCAweDdiMTRiOWRlLCAweDg5NGYzOTA3LAorCTB4MWQ5NDU1YjIsIDB4YTJiZjcxN2UsIDB4MzZhYjlmNjQsIDB4MmNmNzQ2ZGUsIDB4OGE4YWZkYzQsIDB4MDliNWVkYzMsCisJMHgxZGUyM2VkNCwgMHg0OTRhZjRkNiwgMHhmOTFkZGU3MywgMHg2N2E2NmIyZSwgMHhkMTIwOWNhZCwgMHgzZjcxNDRiZCwKKwkweDg0MWVmMjMxLCAweGRlYWIzZWZhLCAweDI3MzlhMzE5LCAweDk2YmRlZTFmLCAweDc4YzI1ZjlhLCAweDJmMTQ4YzAxLAorCTB4M2VmY2NjZTgsIDB4NzIxZmRhMzEsIDB4NWZkOTk0NmMsIDB4ZjZmZmIzNzMsIDB4NzljZGM5NjcsIDB4ZmVjYzZiYTcsCisJMHhlY2VmZTIwYywgMHg3OWY1ZWViMSwgMHgzYWEzYjc4OCwgMHgzZGZkOGQ4NywgMHgwMGQ2ZmRlNSwgMHgyZmRmOGM2ZCwKKwkweDNjYTRjY2Y1LCAweGJiODYwMGU5LCAweGRmZDRkNzk0LCAweGJkMjY2M2IzLCAweDViZTVjNDViLCAweGFjMjIxNTAzLAorCTB4ZTY4ZjNmYTYsIDB4NzFhNDFmYjksIDB4YmJkNjQ4MGUsIDB4YmJlZmIxNGIsIDB4MjBjZjNlMTMsIDB4NzNhMjY2N2IsCisJMHhmZjNlMTJmZSwgMHhmYzJmMzg3ZSwgMHhlZTE0N2JmYywgMHg0MDZkZjUwZiwgMHg3OWYwZjM2NywgMHg4ZTI1Y2ZlZSwKKwkweGMxYTczZTUzLCAweDc3ZTRjMmFhLCAweDRmNzk0MTlkLCAweGI5YjZlMjJhLCAweGI4ZDRiZTBhLCAweGZmMzI4ZTZkLAorCTB4Mjk2MjFjMDEsIDB4NWRiOWYzZWEsIDB4YWNiYzY2N2YsIDB4ZTI1M2ViNDgsIDB4MTU4NzY2YmQsIDB4YWM3MWJmYzcsCisJMHg3YmVmODRhNSwgMHgyMjFkNGIzOSwgMHhiOGUzNTdkZSwgMHhiMWY3ZjIzMSwgMHg4N2JhNjdiMywgMHg4OGVkMjJiNSwKKwkweDk3ODY5ZTI2LCAweDU3Y2M4NzkyLCAweDQyYzVlNjQ2LCAweDFmZTMxNmZiLCAweDc2Y2IxZjU4LCAweDc0ZmFjMGU4LAorCTB4YzY4NjNmY2UsIDB4ODVmOWNhM2YsIDB4ZmJkYWNkYjksIDB4M2U1YmYzZGQsIDB4MDJkZmYwZDIsIDB4ZmE5YTI3Y2YsCisJMHgzMGQwNGE0MCwgMHg3ODFmZjcwNiwgMHgxYmQ0ZjQ3NSwgMHhhZmZkN2YxMCwgMHg5ZTI4MmE5OCwgMHhlNGY1YmE0NSwKKwkweDBmYzY4Nzk1LCAweDg5Nzc5N2RjLCAweGI0Y2UxYmYwLCAweDFkNzljZmNmLCAweDVhZmRjYWJkLCAweDViZmI5Zjc1LAorCTB4ZDAzOTcxZjcsIDB4ZWZiODg4MWEsIDB4YmZjNGQxZTQsIDB4MDlmZTM0MmEsIDB4MGU4ZmM5ZjIsIDB4NDMxYzIzNGEsCisJMHhlNzY2NzNlNSwgMHg1N2E5Mzg4YiwgMHhhYmRhNzc3OSwgMHg1NWVkM2JiYywgMHgyYWY2ODlkZSwgMHg5NTdiNDJlZiwKKwkweGJiZWFhMTc3LCAweDljMDk1ZWRkLCAweDhlNjRiZjc0LCAweDgxNmE3YWU0LCAweDBmNzZlZmM0LCAweDk2OWIzZWQxLAorCTB4NWRlODhiMDcsIDB4NjA3MTUzNjMsIDB4YmJmMzI0OWUsIDB4N2RmNDIzZGQsIDB4NDViYjc3ODgsIDB4NjlmNDk1OTIsCisJMHg2ZWY0MzVlYSwgMHhjZjA4ZjBmNywgMHhkOWQ4YjI1MSwgMHg1MGQ3ODlmOSwgMHgyOGQ4NzBiYywgMHhjNWY0YTNlNCwKKwkweDdiZDI2NjZmLCAweGRkNTNjN2JkLCAweDNmYmY4OWM3LCAweGYzMWY2NDk1LCAweDlmMTJlYmYzLCAweDYwMzM4MzJiLAorCTB4ZWYxNjcxOWMsIDB4MTNjYmJmN2EsIDB4ZjMyNzM0ZTcsIDB4MGE4OWI5YzQsIDB4YmQwYmU2NDcsIDB4OWNiMDRhNTYsCisJMHgyZTZmNzJlOCwgMHg2OGRhYmJiZiwgMHgzODU3NzdlMiwgMHg3NjE3NTM5ZiwgMHg3ZGYyMjIxZiwgMHg0ZDFmYzk1YywKKwkweDZhMWZkMjNlLCAweDVmMjEyN2RlLCAweGJiZDMzNzljLCAweGNhNjc1YTM5LCAweDZlZjEyNmZkLCAweGEwY2ZlMDJlLAorCTB4MGY3NDc2NzcsIDB4YmRmMjQ1Y2EsIDB4MWRlMjljMWIsIDB4ZjBhNmRlNWUsIDB4ZjkwOTMwZjcsIDB4NDViZDNkY2EsCisJMHhiN2E3NzlhMCwgMHg3ZWMwZTdiMiwgMHhlNWFmMjdkMiwgMHg1M2YzOTNiOSwgMHg1NmM3ZWY0MywgMHg3ZjY3NmZjNiwKKwkweGM2ZGYyMGFmLCAweDc5N2FlMmYzLCAweGVlMTdhOGZmLCAweGM3OWNmYTI0LCAweDdlNTY2MTdjLCAweGQ3ZmZmNDc5LAorCTB4ZjViYzM4NjAsIDB4NWEzZmY2MmYsIDB4Zjc3YTE5OTAsIDB4YWRkZWY2MTYsIDB4YWYyYzNmMjAsIDB4MzQzZmFlYTcsCisJMHg0MmU1ZTljZSwgMHhlNWE5N2JjZCwgMHg5M2RkOGY0MywgMHg3NDg2NzI0YiwgMHg1OTQ4ZjkxMSwgMHg4ODYzM2Y5YSwKKwkweDA1ZjNkM2ZlLCAweDc3NGZlZmZkLCAweDk3ZjlhMDRkLCAweDYwYmM4YjM3LCAweDZmZGE2Zjg4LCAweGRjZTg5OGY5LAorCTB4M2VmMjE5NjMsIDB4NzIzZmRhYmYsIDB4ZjViNzJiOWYsIDB4OWY3MDNlMzAsIDB4NjE3ZjY4ZjMsIDB4ZjA4Y2JjZmIsCisJMHhiZmIzZWVhNSwgMHgwNWEzZWY3YiwgMHhkZmRmNzNiNiwgMHg2ZTc3N2RmNywgMHg2ZDcxODExYSwgMHg3Njc5NTBkMiwKKwkweDdlNjEzZWI0LCAweDNmZWQ0OTk5LCAweDhmZWRhZjU2LCAweGIxZTUzOTBlLCAweGQxZGU0OGJiLCAweGUyNTRlOTZmLAorCTB4YzRjYmIyMWUsIDB4ZWU1ZGFhMTcsIDB4MjkyMGUyNTQsIDB4MDJlZDgzYjAsIDB4NzE3MjRiY2QsIDB4ZmI2MWU0YjcsCisJMHhkYTNiZTZhOCwgMHg5NDdmYjQyNCwgMHg2MWFmNzA1NywgMHg2ODVmMjE3YiwgMHg3NzVmMTA3MSwgMHg0OWY5ZWYyMiwKKwkweDU4Y2VmNDFlLCAweGM0NDc3M2NlLCAweDc1OGIzZmQ3LCAweGJjNzg0NGRmLCAweGEzMzVhZmY5LCAweGYyZGVmZTI4LAorCTB4Mzg5NDJiOTcsIDB4NzJhYmQ4NGUsIDB4NjljYjNmODUsIDB4NDE0N2RhN2UsIDB4OTk2ZGYzMDIsIDB4NzMwYWJlYjIsCisJMHg1NWM5ZmIzMywgMHg1ZTQ1OTFlMCwgMHhhYzkzYzk0MywgMHhkZmYxYzFkZiwgMHgxNDFhMDFmZiwgMHg0M2QwYWFhZiwKKwkweDAwMDA0M2QwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHVzZW1faW50X3RhYmxlX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg1MWZiZmYwMCwgMHgwM2YwYzBjZiwgMHgzM2E5OGY4YSwgMHgzMmU4ZjQzMCwKLQkweDMxZThhNDMwLCAweDQzZDRkYzMwLCAweGNmMTJkMzg4LCAweGJmNGNhMmUxLCAweDgzMDMwYjMwLCAweDAzOGIxMDI4LAotCTB4N2YxMDI0YjEsIDB4Zjg2MDY0NjMsIDB4N2ViYzQ4Y2UsIDB4YmIwNDExNWUsIDB4ODE4MTgwNDUsIDB4MDcwZmM4MGYsCi0JMHgxOTA1ZmZkMiwgMHgzMzBiM2UxOCwgMHhmOTAzZjAzMCwgMHg2ZGZjODBiMywgMHg4ODA4N2M0MCwgMHgzNzYyODBjMywKLQkweDIwNjdmNDgwLCAweDAyYzQwZmJlLCAweDE3Y2RmODIyLCAweDQxN2YyMDI0LCAweDA3ZmY5NTA4LCAweDEwNDJmZjhkLAotCTB4NjE2MzdlYmYsIDB4MDQ5NmYyZmMsIDB4NGRlMWIxZTQsIDB4MGY4Y2RjMDQsIDB4ZWY0MGE3N2YsIDB4NmE4N2UwNDAsCi0JMHg1NTdkN2NhOCwgMHhhMDJiMDYwNiwgMHg4NDNhODc1OCwgMHg3ZTQ5MDhmZiwgMHg0MGNjNTAxNiwgMHg5M2U2YzIxNSwKLQkweDA1NTA2MDY3LCAweDYxYWIxZmYyLCAweDI4MWY5NzM3LCAweDVmOTQwNmFmLCAweDAwMDczNTA2LCAweDE1ZTVhYzZmLAotCTB4MDAwMDAzNjgKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDUxZmJmZjAwLCAweDAzZjBjMGNmLCAweDE4OTQ3MzhhLCAweDE4MzU3YTE4LAorCTB4MzI2YjM2MTgsIDB4MzE2ODY4MzAsIDB4MjAzMTg4MzAsIDB4YWY4NTY4ZTQsIDB4OWZhNjUzNzEsIDB4ODE4MTk1OWIsCisJMHg4MWY5ODgxNywgMHhkNzg4MTA1OCwgMHg2YzMwMzEzMywgMHhmZjVlMjI2MCwgMHhmYjA0NTExMSwgMHhjMzAzMjA5ZSwKKwkweDE5N2YyMDUxLCAweDY2MTRlZTkwLCAweDY0MDU1ODYwLCAweDJmZTIwMzFmLCAweDEwODBiZTQwLCAweDEwMGM4MzAzLAorCTB4NjA2MTE1ZmYsIDB4YzFkMjA1MzAsIDB4YzQwMzZjNDAsIDB4OWJmMTQ1YzcsIDB4N2M4MDgyN2YsIDB4YmYyYTA4YmMsCisJMHgyNzlmOGQxYiwgMHgyNWZmNWY4YywgMHgwZmYyZmMxMSwgMHhjMzYzYzgwOCwgMHhjN2U0MTYzMiwgMHg3YTA1MjI0NywKKwkweDI5MzcwMjA3LCAweGNhOGZmMmEyLCAweDU0M2MzMDMzLCAweDUxZDA2MDYwLCAweDkxOWJmMDgyLCAweDYyODBlZGU0LAorCTB4ZWMyMWU0YzcsIDB4YjhjMDkyMjksIDB4MjhiNWNhMDcsIDB4MmE3NzM3NjIsIDB4NTAwNGZlNTAsIDB4MzQ4OTRiY2UsCisJMHg0MWQzZGNmNywgMHg4NDM0YWZlNSwgMHgzZWJjMDBkMCwgMHgwM2E4ZTQxNCwgMHgwMDAwMDNhOAogfTsKIAogc3RhdGljIGNvbnN0IHUzMiB1c2VtX3ByYW1fZGF0YV9lMWhbXSA9IHsKLQkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZWRmZjAwLCAweDQ1MTQ3ODA5LCAweGY0ZjU3MGRhLCAweDczMjY0Y2Y0LAotCTB4MTA5MDkyNjQsIDB4YTcwOTMwYWUsIDB4ZTE1YzM4MGEsIDB4MTA4NGNhMzAsIDB4YThlYTI0MTYsIDB4MTM4OGE4ODgsCi0JMHgyZTQyMTA4MSwgMHhmNTcxNzVkMSwgMHgxMWMzYTdmYiwgMHg5ZTM3NTk0MSwgMHgxZDQ3ZmFjYiwgMHhhMjJjZGMxMCwKLQkweDYwMTg4ODA2LCAweGIyMDBjMWMwLCAweDE3NjFiYjhhLCAweGMzNjNkNzE1LCAweDAxOTIxYTBkLCAweGU1YzU4ZjE1LAotCTB4ZWFhZGY3YWIsIDB4NDRjZWVlOTksIDB4ZWZmM2ViYTIsIDB4ZTNmZGZiN2UsIDB4NTc1NDUzZTMsIDB4ZWY1NTViZjUsCi0JMHg1ZGJkNmY1ZCwgMHg3MTAyNGEzMSwgMHgwMmU0MjZmNiwgMHhmMjExYzZmYywgMHg0OTA4NDg4YywgMHhlMzZkOTY4OSwKLQkweDE3NDljN2MzLCAweDkyY2RlNDQyLCAweDg4NDBhZDZiLCAweDM0M2RiYWYwLCAweGZiMjEwNDZlLCAweDMzMDEwOTU2LAotCTB4NTg3Njg3YWQsIDB4ZDNmNWExMDksIDB4Y2MwN2Q3MzUsIDB4ZDQzZWI0MTksIDB4OWFmYWMxZWMsIDB4YmVlN2FjMWMsCi0JMHg0OGMzYWVmYSwgMHg4YWFmYTVlYiwgMHg3NjFiYTg0NiwgMHhkYjM0NzI5YywgMHgzNzM3MjkwOCwgMHg3ZDA1NzIzZCwKLQkweDI0NTU3ZTFlLCAweGM0NTBlOWFiLCAweGIyNDBjNTM1LCAweDQ3MWUzOTA4LCAweGFkMTk2ZmQ4LCAweDY4NTIxMmE3LAotCTB4NTVkMmQ1NjEsIDB4M2NjMjY3M2IsIDB4YzRjYzFhOGEsIDB4NmU5NGUxNDIsIDB4MTVlZDdiOTksIDB4YWY3NzNlYjQsCi0JMHhlOTRiYTA0NCwgMHg3NzUzNGFkYSwgMHgxMDE3OWY1YSwgMHg2OGJlYTBlYSwgMHg0ZTM4ODdjNywgMHg1NDUyNzhkYiwKLQkweDRmOTA4ODM3LCAweDM1YzQ3MWZkLCAweDRkMWRkNjgwLCAweGU3ZDEzN2E5LCAweDEzMGQ4MWM1LCAweDdhZjE3ZmExLAotCTB4ZmRhMDZkYzEsIDB4N2U3NjZiOGIsIDB4ZWI4YmYwMDQsIDB4ODUyMmJlYTUsIDB4NGFkNmJmM2YsIDB4ZDhkOTAzNWMsCi0JMHg2M2FjMDgxNywgMHhkZjMwYjVjZSwgMHhjNDQ4M2ZkMiwgMHhlNzQ1ZWI0YywgMHhjMDExMzZlZiwgMHhlNGRhYjE5MSwKLQkweDhmZjhjM2I1LCAweDE4NzY1YzlhLCAweDUxYzcxNmE3LCAweDdiZmE1OWYwLCAweGFmN2QwZTNhLCAweDBkYzE2NWVjLAotCTB4MTAzMzJiNGIsIDB4NzVhN2NjMWYsIDB4ZjNmYTY1OGIsIDB4YTU1NzU4MzYsIDB4YmZiYzNmYTksIDB4ZjQxMzQxZTUsCi0JMHhkODI4MWI5YiwgMHhmY2MxNzE2YywgMHhjMjI2OTk1NiwgMHg5OTU2NmIzYywgMHhlMTQ1MDcwYSwgMHg1MTdkYWZjZCwKLQkweDJiZTNhZjMzLCAweGE5ZjU3NGZiLCAweGE3ZTVmNWRhLCAweDczNWE4YTdlLCAweDg4NGM1ZWI0LCAweGYzMDZjZWE3LAotCTB4MWZhZTk4MGUsIDB4NTQ3ZTdkMWMsIDB4Y2Y3YTQ0NDgsIDB4MmI4OTE1YWYsIDB4NTI5ZjBhMmUsIDB4ZWZjYjlmMWUsCi0JMHgxZjAyN2ZkMiwgMHhkNjA3Yjc2YywgMHhiNWU5NDQ2NiwgMHg4ZWZmMDljMCwgMHg5M2FjZWJkMiwgMHhjZTE4Y2ZkMywKLQkweGNhNTdjMzUyLCAweDc0MGU4MDQ3LCAweDI3N2VkNTNlLCAweGQzZjk4Zjk2LCAweGVmYzI3Y2IwLCAweGU1M2RiYzQyLAotCTB4NGFlNTg4MWYsIDB4M2Y5ZjFiYmYsIDB4NjU4ZDFmZWQsIDB4ZTU4M2RmOGQsIDB4NTg0OWZlYjMsIDB4ZWM1ZWZjMDYsCi0JMHgxZDNmZGFiNywgMHgxZjdlMzVjYiwgMHg1ZmMxN2YzZSwgMHhiZmFkNjU4NCwgMHhmM2FmOWYwMiwgMHhiZDcyYzQyZiwKLQkweDJmZTdjNjVmLCAweDU5NjE5N2ZiLCAweDcyYzZhZmU3LCAweDk2MjU3ZmEzLCAweGY2MDBmZWY1LCAweGQ3ZTljY2RiLAotCTB4ZTdjM2FmZTAsIDB4NTgwZGZkNWIsIDB4MmMyMWZkMDYsIDB4NjJmN2Y4NzcsIDB4ZDVlMzgyYjksIDB4OGM3MjRkOTEsCi0JMHgwZjBlMmYxNCwgMHgyMDcxNTI3MSwgMHgxYzllZjk0OSwgMHhiYzkzZDY4OSwgMHg0MzNhOWVhYywgMHg3YWQxMzFjZSwKLQkweDI5ZDY4ZmFhLCAweDg0OTdiYTllLCAweGRlYjRjYzcyLCAweGE3YjU4MmJkLCAweGM3YzY0MDNmLCAweGNjYmE3YWQxLAotCTB4Nzg1NzMzZGEsIDB4M2Q2ODViYzYsIDB4ZjdiNTlhYjMsIDB4YzdjNzkxYWYsIDB4MDBmZjdhZDMsIDB4N2Q3NGJmNmIsCi0JMHhkNjk1YmM2OCwgMHhlZDYzYWQyZiwgMHhkNzI0ODI0MywgMHg0MjQzZWI0NiwgMHg5ZjZjM2VhYywgMHhlYjRlZDcyNywKLQkweDNkNTg5YWMzLCAweGQ3MzkyM2ViLCAweGNkNTllYjQxLCAweDJkYjFmZGVjLCAweDVhMDRkY2ExLCAweGVkNjYxYjFmLAotCTB4MTY2ZjlkNTcsIDB4NjdmODMxNWQsIDB4NDU5YmU0YjMsIDB4ZjIwMzJkMjgsIDB4MWJiMThmMTQsIDB4Nzc3YzliYWQsCi0JMHg5N2M1MzcxMywgMHgxYzYzZDUzYywgMHhjOTIzZjE0MywgMHhiZTRiYmVkOCwgMHg0YzFiZGIxZCwgMHgyN2JmYjYzMiwKLQkweDU2ZmI2MjE3LCAweDI3ZWQ4MDI5LCAweGRmNmM3MmU1LCAweGZiNjAwYTZhLCAweGFjNDJmMmI3LCAweGI2MTBhNTA3LAotCTB4YjEyYjJhZGIsIDB4YzIxNGQwN2YsIDB4ODdjYWY0ZjYsIDB4ZDQ4NzdkYjAsIDB4Y2FlZWVkOGMsIDB4ODc3ZGIxYzcsCi0JMHgxZmRiMTlhOSwgMHg5OWUzNTI1YiwgMHgwYjBmZWI0MCwgMHgyZjgxYTdiZSwgMHgyMmJlMGIxNywgMHhhZGY4MDdkMiwKLQkweGY5NGJjZDJlLCAweGQzMjA0YWFkLCAweDAxMTdiZjgxLCAweGFhZjZkMjUzLCAweDQ3ZDQyNjZlLCAweDdhY2UzZjliLAotCTB4NmYzODE0NWUsIDB4ZTE3YTgxNzYsIDB4MjA2NTBmMGIsIDB4OGUxMWU3OWMsIDB4MTc4OGUxNDQsIDB4YzlmNTkzODcsCi0JMHhhYzljMGQ2OCwgMHgzODE0OGE0ZiwgMHhhNThlMTFlYiwgMHg3ZjM2NzA3MywgMHg5ZjNiNTYzMiwgMHgzODE1OGE0ZiwKLQkweDE0OTE5MmFmLCAweGViNzNiZDhlLCAweGI2NWJmYWNhLCAweDJiN2YzZTc2LCAweGMwZWNlMDUxLCAweDZlNzYyNGY5LAotCTB4YjRjNzBkM2UsIDB4MTYzODY5ZjgsIDB4Mzg5YmNmYzEsIDB4Y2RjZTk0OWYsIDB4MmQ3MWY0NjcsIDB4OGYxZjQ2N2UsCi0JMHhlMTA5YTdlMCwgMHg5YzFjZWI3NCwgMHhmYzVhZTM4NiwgMHhlMDhmMWMzNCwgMHhkMzg0MDNlNywgMHgxYWViNzNhYiwKLQkweDlmOGI0MjdkLCAweGY4MjIyN2QxLCAweGM5Zjg4YzM5LCAweGFkOWMxY2U4LCAweGQ5ZjhiNWE3LCAweDlmODIzYTdhLAotCTB4YmY0ZTEwY2YsIDB4NmM2YmFkY2UsIDB4NjMzZjE2YWIsIDB4ZjlmODIzNWIsIDB4NDk3NWQ3MDIsIDB4NmQ2Y2UwZTcsCi0JMHg2YjY3ZTJkNSwgMHhkZjNmMDQ2YiwgMHg5ZGMxOWMyMSwgMHgzNmQ4ZDc1YiwgMHhiNmM2N2UyZCwgMHgxMjYzZjA0NSwKLQkweGNlZDBjZTAwLCAweGE1ZjgyN2NkLCAweDJmYzEzZjE2LCAweDQwNDlmODIzLCAweDM3M2IyMzM4LCAweDVhNzNlYzlmLAotCTB4OGI5ZjY0ZmMsIDB4ZTEwZDI3ZTAsIDB4OWMxY2U5OGMsIDB4N2UyZDM5ZTAsIDB4ZjgyMmU3ODIsIDB4NTczODQwYzksCi0JMHhkOTVkNmU3NiwgMHg5M2YxNjk1ZiwgMHgzZjA0NTVmZCwgMHhmNzQwMGE5NywgMHg0MjFmM2UxYywgMHg4NjNiZDhlMSwKLQkweDJkM2JlM2IzLCAweDE3N2M3NjdlLCAweDljNzBjZmMxLCAweGNmOWYxZTRmLCAweGY1NWNlMDQ1LCAweGFlN2UyZDBmLAotCTB4M2YwNDQ3ZmEsIDB4NzI2NzA4ZDksIDB4ZjhlY2UwZTcsIDB4M2IzZjE2ODcsIDB4NGZjMTExZmUsIDB4OWFlYmFlMWUsCi0JMHhhYWViYWRjZSwgMHg1Y2ZjNWEwYiwgMHg2N2UxODE3NSwgMHhkY2JhZDFkNCwgMHg2ZDRlZGEwNCwgMHhhZmE0NWJhMywKLQkweGYxZWYzYjhjLCAweDNhMmViNDA4LCAweGJhNzQ1ZDU5LCAweGEyMmRmODA5LCAweDI2OTA4ZmUyLCAweGI3ZGY0ODhmLAotCTB4ZjYxYzRmYWQsIDB4MjVmYjUxMTAsIDB4NzU4MjZmZTMsIDB4YTY5N2E5ZDksIDB4NDYxMjRiZjYsIDB4YTBmYzZiYzcsCi0JMHhhNjkyNGY0NCwgMHhiYmE5M2M5ZSwgMHgzNzhhN2ZhNiwgMHg3NWRlZDM1MywgMHhmNjlhYTVmYSwgMHg5YTYxYmU2ZSwKLQkweGIxYTI4ZjdhLCAweDJhYmRmZTlhLCAweGJkZWE2YmM2LCAweGU5YWQ1ZTE3LCAweGEwZGYyMTlmLCAweDc2NTlmN2E5LAotCTB4YmY3ZmE2YWIsIDB4ZWQzNTNiZWEsIDB4NmIxNjU2MDMsIDB4MmMwOTJmZGEsIDB4YWIyZmQ0ZDAsIDB4ZmZhNmE1ZmQsCi0JMHg5YTQ1YmFlMCwgMHgxZTFiY2JmNiwgMHgwZDBmYjRkMiwgMHgwZmE5YTYzZCwgMHhhNmI0ZmJkZiwgMHhkNWE2YzhmZiwKLQkweDA3NTFmNjlhLCAweGM3ZGE2OWQ3LCAweGQ0ZDQ2ZjM0LCAweDU1YjkzOGFmLCAweGYwY2FmZmQzLCAweGI4ZmE5YTFiLAotCTB4ZjRkMmRmYWYsIDB4MWU3Mzk0YTcsIDB4NDVkNzhjYmYsIDB4ZmI4MjBiOTAsIDB4MDk5YmI5MDIsIDB4ZGQ5MGM1ZmQsCi0JMHg3NzUzNzU4NCwgMHhkODI3ZGIxYiwgMHgyOTQ3NWQwYiwgMHg5ZjA2NGRkZCwgMHg4MTJkMGJhYiwgMHhmZGRhODRlNiwKLQkweDAzNDVlZTljLCAweGRjNWYyOTlhLCAweGMwMzdkNjNiLCAweDZiZGY5ZjQ5LCAweDhjZWU1ZGYyLCAweDdlNTA5ZmUxLAotCTB4OTQxYTQ4MTEsIDB4ZmE5NDAzMmUsIDB4YzYyNTA3ZjYsIDB4OWM3YmUzYWYsIDB4YmU4ODdmZWYsIDB4ZjcwODZlNWYsCi0JMHhiZmY1YTQ0ZiwgMHhjMDAyNzIxYiwgMHhkNDA4MmZkZiwgMHgxNTdjYTdlYiwgMHhlODBhOTIyZiwgMHgxZTI2NmYxNywKLQkweDMzMDdkZmUwLCAweDU1OTc5ZWIyLCAweDE3YWNiY2ZjLCAweDBhMjE1Mzk1LCAweDRiZTQ5OTc3LCAweDVkNjQzZjAzLAotCTB4ZjgzMmJiZTUsIDB4ZThiZDU1MjksIDB4ZjIxM2JhYmEsIDB4NDg2ZWYwYTIsIDB4ZWZkZjRiZWUsIDB4YTNlNjk4NTUsCi0JMHhlYTI2Y2NmMCwgMHgzN2M3YWJlNywgMHhlMTA3ZjFkMSwgMHhjZmMwNzVmOCwgMHg5NGZjNjE5YiwgMHgzMzliZTNmNiwKLQkweDhmYzY2YjQ3LCAweDhjZDIyZjRiLCAweGUzYTI2NzFmLCAweGFmYmVhOTNiLCAweDRmOGY5OGZjLCAweDkwOTYzMjg5LAotCTB4MzhjN2MyNmQsIDB4MDhiZDM5YmUsIDB4NDRkMDdmYzcsIDB4ZjFlYTNkZjcsIDB4ODdlMzIzZTMsIDB4M2E3YmZkNjAsCi0JMHg1OGU2N2Y1YSwgMHg4YmQzZmFlZCwgMHhiMTM3ZWJiNSwgMHg3OTU1YmZmNSwgMHg4ZjFmOGY4YywgMHgzODViN2ZlYiwKLQkweDVlOWZkNmM2LCAweDY2NmZkNmNjLCAweDNiZTMyMzcwLCAweDgyNmZmODIyLCAweGQxZDdiZmY1LCAweDZiNjRmYmZhLAotCTB4NDRiYmRmZDcsIDB4MWIzMzdlYmIsIDB4YTc5NWFmZmYsIDB4MWMzNmY4ZjksIDB4MzRlMTQzZmYsIDB4MTJlZjdmNWIsCi0JMHhmNjY0ZGYxYywgMHg0YzdmODFiOSwgMHgwMjJiZTIzZCwgMHg5M2QyN2M3NCwgMHhjMGFlYWUyYSwgMHgyODFjNzQyZSwKLQkweGE2NTEyNjA3LCAweDIxNDllNDI3LCAweDZmNzFlNzEzLCAweDczYjdlMzNjLCAweDUwZGY5NGYxLCAweDljZjhjOTFmLAotCTB4YTNlNmE4MDQsIDB4Y2UzMjljZmIsIDB4ZTdkN2YzZmIsIDB4NjE2ZjQwOTgsIDB4Y2NlZmRkM2IsIDB4ZGQ5ZDUzZTEsCi0JMHg5MzdmMjIyMCwgMHg3ZTgxY2MyNywgMHgwZGFkYmU3NCwgMHhkOWY1MGNhMiwgMHgwMDE5NWM0ZiwgMHgyNjZlNThmZCwKLQkweDNkZTE3ODc3LCAweGYzYzEwOTIzLCAweDVlMGU0ZjYzLCAweGJlOTc1ZWFkLCAweDFkMmQ1MzljLCAweDE3YzhkNjZmLAotCTB4OWUzYzhmOWIsIDB4ZjNhMGFjMGMsIDB4MTgyNjAzY2IsIDB4YTcxZmFkMTksIDB4OThkODI5ZmIsIDB4MTJmYmE2MWUsCi0JMHg3NDQ4NGYyOCwgMHgyOGZjZmEzYywgMHgwMTkxNmZkZCwgMHhjNGE5Yjk2YSwgMHg3OWVjODhmNywgMHhmZjlkMmZiNywKLQkweDNjZmNhMjM0LCAweDUxZGJjZWI4LCAweDIzM2MyOGE0LCAweDFhZjFmZmMzLCAweDk4ZjQwMDIxLCAweGY5Zjc0ZDUzLAotCTB4MzcyZmY5MmEsIDB4MTcwZWY5MzMsIDB4MDJkNTgxMDgsIDB4ZmY3ZDJiYzcsIDB4ODEzZWZlNjYsIDB4MzNmODUxZjksCi0JMHg4ZjlkZWM5ZCwgMHg0N2IzNWM3NywgMHhlZGZkZDA3MCwgMHg5YzBkNjRjYSwgMHg2OTYwNDg1YiwgMHhiNmZmN2QxYSwKLQkweDYyMjUzYjE1LCAweGU4MjhiZTAwLCAweGU1ZjgwMGI1LCAweDcwODQ4OTdlLCAweDQyOWNkYTlmLCAweGEwNjY3MTA2LAotCTB4MDY0ZTdkZjAsIDB4ZDJlOWU2ZmYsIDB4OWMxNTY2ZDEsIDB4Yzc5YzUyOTksIDB4ZjMzM2U3NGIsIDB4N2JlNzExM2UsCi0JMHhkZWRiNGY4YiwgMHgzMWVhYzNiYywgMHhjYWU1YTEwYywgMHg0OTQyMjVjZiwgMHhiNjkxNWI3ZSwgMHg2ZDBhZjZmZCwKLQkweGRhODU4ZWZkLCAweGVlMGY1ZDNhLCAweGZkNjQwYmYzLCAweGJhMWNiYTczLCAweGViMjMzYmNlLCAweGY1YTcwYmE2LAotCTB4ZDY2ZGJjNTksIDB4ZDBkNjQ5MzIsIDB4NGQ3MzZlOTEsIDB4MTMzZGJjNTksIDB4NGYxMDRlZDAsIDB4ZjY5ZjdlZjgsCi0JMHg2ODFmMjlmZCwgMHhlYTU3NzNlYSwgMHhmOGJlNzFlMCwgMHhkZmZmZjRmZiwgMHg4NmYyZmY0ZCwgMHg1NTQ3YzU5YywKLQkweDliYWQyYWYzLCAweGFhYThmOGJjLCAweGViZGFmY2RmLCAweDgxNzlmNTM1LCAweGU3ZmQzNDViLCAweGI0ZDAyY2FlLAotCTB4YTc5ZWE5Y2YsIDB4ZWNiNTlmNjksIDB4NDBiZDRkMmUsIDB4ZmZkMzRmYmUsIDB4OWE5NTg1OGUsIDB4OTYyYmRiZjYsCi0JMHgyYjZmZGE2YiwgMHhiZjUzNTQ3YSwgMHg0ZDViZjdjNSwgMHhhZmE3OWJmZiwgMHgzYjBiYjRkMiwgMHg0NjZlZjVlNiwKLQkweGRkZWJlOWJiLCAweGY0ZmU5MjhkLCAweDdjMDI2NjA3LCAweGMyYjNmMGE2LCAweDY5ZmQyN2VmLCAweDc3ZWE3ZTU4LAotCTB4N2EwOTU5NjEsIDB4YzM3N2VhOTgsIDB4YWY5NjU2MTYsIDB4ZmEwZGU4MmUsIDB4MTNmZmUxNWMsIDB4ZTgzYTQ1NTIsCi0JMHhlYjNmM2Q0YiwgMHg0ZjllYWZmNSwgMHgyYzQ3YWZlOSwgMHg0YjI5NDMzZiwgMHgzYjA1ZTIwNCwgMHg2NGZkYzZkNiwKLQkweGRjMzdmOWU1LCAweDBjZTc4MmNlLCAweGM5ODk4OTY1LCAweDZlYzZjOTY1LCAweGVhMDM4OWUzLCAweGI2MTVmZWExLAotCTB4M2E5MmUxOGUsIDB4MjA0MWQ3MDEsIDB4NzQwMjlhNGEsIDB4OTc2ZDQxZWIsIDB4MzQ3ZGFlOWEsIDB4MjlkOTZjZjMsCi0JMHgyMDY1ZjhlMiwgMHhkY2MwNjM5MywgMHg2MDE4Nzc3OCwgMHhmYTYzNTBmYywgMHgzZTYxODM4ZCwgMHhkZWIxZDc5ZSwKLQkweDU2ZmU4MjkwLCAweGUyZDI3ZjhiLCAweDdmMDBmZGEzLCAweGZhNGYyYzVlLCAweGRjNzk2M2E3LCAweGE4ZjJjM2VmLAotCTB4YzNjYjA4YmYsIDB4OWIyYzBhZmUsIDB4ZmNiMTBiZmQsIDB4Zjk2MzJmYzQsIDB4OTYxOTdmOTEsIDB4NjM1N2Y1N2YsCi0JMHgxMmJmZDA3OSwgMHgwMWZjZjdjYiwgMHgxZWZkNWIyYywgMHhmZDNlMTUyYywgMHgxOGViYTE0ZiwgMHhhZTljYmZjMywKLQkweDNhZTlhOGRmLCAweGYzNjRlMGM2LCAweDE4N2Q3NGUxLCAweDZmYzMxYmU2LCAweGM4Y2UwZmVlLCAweGUyM2Y5NTQ4LAotCTB4ZGI3MThjOTksIDB4NGVjZTNjMDUsIDB4YzcxNjI0YzgsIDB4YTYyZjYzZTUsIDB4NmZkMDlhZTAsIDB4M2QwNDBjMDksCi0JMHhiN2UwNzY3YywgMHg3ZDRlMjFmZCwgMHg0YTI1MjBmNiwgMHhkM2ViYzc0NiwgMHgzYzQzYWZkMywgMHhlZmZhMGYxMCwKLQkweDk3NGEwMTg1LCAweDk2ZWRmNmU0LCAweDhiNTc4Njc4LCAweGMzMjI0YzgxLCAweGVmZGU1OTA4LCAweDgzOWRmNzA1LAotCTB4NDkyNDZlYjAsIDB4N2RjMDdlZjAsIDB4NWMwNjNkYmQsIDB4N2UwMjBiZWEsIDB4YzVkNzg2MmYsIDB4MDA0MzczZjYsCi0JMHhmZmE3ZjFkZSwgMHgxOGU1MDU5ZSwgMHhlMzA3ZjMwMywgMHg0YmY0NDUxYiwgMHgzNzc5ZTg0OSwgMHg2N2EyMzdlMCwKLQkweDg4MzRlZWNkLCAweDk5ZmI4NmY3LCAweDlhZjc2ODljLCAweDRmZTJkNmFlLCAweGJmODM1YWJlLCAweDU1ZmMxMWU1LAotCTB4ZmFmZTIxYTcsIDB4YzI4ZmZiOWUsIDB4ODc4NGYxMWYsIDB4OGEzODMwZGMsIDB4ZWY4NDZmYmYsIDB4MWU3MjlmYzcsCi0JMHgzNmVmMWZhMywgMHhmODgzZjhkMSwgMHhjMTU1MmRiMiwgMHhhMTNhNTM2YiwgMHhmODExZmNlMywgMHg1YjNmYzI5ZiwKLQkweGYwMDEyMDNmLCAweDExNzM4MTFjLCAweDdmYWYwOGZhLCAweGU4ZmEwZTljLCAweDE2YzlkMDM0LCAweDBlOWY3Nzg1LAotCTB4Y2ZiZGQ5ZGUsIDB4NWZlZmMwM2IsIDB4NDdjYTI2OTAsIDB4Mjk1OWUwNjMsIDB4NjQzMmViNGIsIDB4NmE0ZmRhOWIsCi0JMHg1NmNmZDZkMCwgMHhkMGVhOTMwYiwgMHg0YzI1NzE5ZiwgMHhkN2ZhMGMxZCwgMHg0MDk1MWYyOSwgMHhhOTYxYTY0ZiwKLQkweDY2OTA1OWMwLCAweDdkMjg3MWMyLCAweDRmYWY1Yzk4LCAweGQ0ZmZiOTQ0LCAweDdlZmQ4NzFmLCAweDA0NzQ3OWVhLAotCTB4N2E4ZjNhMjcsIDB4MGZiZTg0NzIsIDB4NGZhMTdmMmMsIDB4ZTQzYmZkYzcsIDB4MjYxN2UzNTMsIDB4YTA5MWIzODgsCi0JMHg5N2ZjMGU3NCwgMHgwNWZmZmEzOCwgMHg0NjIzNzgzOCwgMHhjYjcwMmJhYywgMHg3Y2Q5NDRlYiwgMHhhZjVmM2MzOSwKLQkweGU3YmU4ZjE5LCAweDJmMDZjZTUyLCAweDNjOWY3ZTY0LCAweDg1NzFjOTE4LCAweGE4YTlhOTVmLCAweDQ4ZDYxODgxLAotCTB4YWM4YjViZTAsIDB4MzUxMjhmZjUsIDB4NmU4NmYyZjUsIDB4ODI1ZmM2YjIsIDB4NGEzZDUwN2YsIDB4ZjAyMzA0OGEsCi0JMHg5ZjY3MDk0YiwgMHg5OTZkYTMzNiwgMHgwYmY3ZTc0MCwgMHgzZTgxNjIwOCwgMHhkMmJmNTgxMCwgMHhjZjkzNjZiOCwKLQkweDc4YjJmYzA1LCAweGU4MmUxNWRhLCAweGQ1ZWI4ZDU5LCAweDJmZDI4ZmNmLCAweDNjNzUyOGMzLCAweGQ5ZTJmOWZmLAotCTB4ZTQzMWJkN2IsIDB4ZGJkNzI3NjMsIDB4NTcxNjA2MjUsIDB4MDNiMjcxMjAsIDB4OWE0OGQ3Y2UsIDB4OGVjMWI4ZWMsCi0JMHhmMDQ1YjM1MywgMHgzYTNiNzE4MywgMHgwYTBmMGE4ZSwgMHgyOTAxNzk5YywgMHg5OTVmZjVhYywgMHg1ODE4YjY1YywKLQkweGVlM2Y0MGJjLCAweDk0ZGM2MTlmLCAweDZjYWZlMzhiLCAweGIwODlmZWZkLCAweGNiMWUzZDZlLCAweDdjOThjZTFhLAotCTB4YmZmNDU3MjgsIDB4MTUxZTI4YWMsIDB4ZjQ0MmZlZmMsIDB4ZWJhNDU5ZmUsIDB4ODQzZGFlMmEsIDB4OTI5M2VhZmIsCi0JMHhlZmZlZmZkYywgMHhlN2VkOGJkMSwgMHg2ZTNiNGI2ZiwgMHgyNjViYWQ1NSwgMHg5ZGNlMzA0ZCwgMHhjNDQwZjlhMywKLQkweDU0ODdmMzc1LCAweDViN2E5ZjVmLCAweDVkMDEwZjIyLCAweGFhNWVkM2NlLCAweDgyOGY1MDc5LCAweGZlYTJiMjE4LAotCTB4ZjNmNTlkZmEsIDB4OWY3ZWMxZjMsIDB4ZjcwNTNjZGEsIDB4ZDc4OWIzMmIsIDB4MjJjYTQxMDEsIDB4ZmUwNTlkNTIsCi0JMHg5ODYyNjlmOSwgMHg0ZDNhNzgwNCwgMHhhZTE4ZWNmZSwgMHhkMTM5ZDNhMiwgMHhmZWExZjQ4NCwgMHhmY2Y1NjFmYiwKLQkweGE5YWVmZmE4LCAweDUzNWRmZjUzLCAweGE0MzcyNDJmLCAweGUxNzhmOWMyLCAweDA4MDkxMjEzLCAweGZiNGQzZWI4LAotCTB4NzA4OWQxNzEsIDB4MmE4YTkyZTcsIDB4NGIxNjc3ZjAsIDB4ZTlkZmFlY2MsIDB4NTQxZWM2MjQsIDB4ZjZiZTk3OWYsCi0JMHhhZDAxNTY0YywgMHg3ZjMyMjc3ZiwgMHg5ZGVmMzk0NCwgMHgzNzdiNzU0NywgMHhiNzVjNWVkYSwgMHhlZGExZTRjYSwKLQkweDRmODdlYTQ3LCAweGZiYzA4MmJiLCAweDNmYjAyYTgxLCAweDdiODJhYmYyLCAweDdlM2RhYmFkLCAweGY1ZmNlODdmLAotCTB4YTFmYzU1ZjMsIDB4N2NjZWU3NzYsIDB4ODJiNWE1MWUsIDB4Y2Y4MzEwMjcsIDB4NjdjNjQ2YWMsIDB4MzBmNjNmMGEsCi0JMHg4ZGYxMzUzYSwgMHg3MGZhYmEwMSwgMHhhZTljN2Q1ZCwgMHhiZGU1YTNmZSwgMHhmYmM4ZDEwYiwgMHgwMGRmNDQyZiwKLQkweDZmOTMwYTYzLCAweGM2MDlkZmQ4LCAweDhmZjNmMjMwLCAweDBlZDY5Zjg2LCAweDE0OWZmMGZlLCAweDljYWQ0ZjdlLAotCTB4N2VlM2Y4NTEsIDB4ZGI3ZGY4NTIsIDB4MmM0YTdmY2QsIDB4YmRhZmE1ZjgsIDB4ZmFhNjU5YjQsIDB4Mjc5NWY4YTksCi0JMHhhN2VhODQxZCwgMHg1NGVhYzY1MywgMHhjOTdmYTUzNywgMHhlMDBlYTVkYSwgMHhkOTQ2OTM4MywgMHgyYTdjZmMwMSwKLQkweGM0MGE0ZTIwLCAweDhjOGI3N2QwLCAweDNkYWZmNzAyLCAweDZmZTIwMTM2LCAweGZmMGE0ZmYwLCAweDVmMGY3NWQzLAotCTB4NzM4NzcxMGIsIDB4YzYyNzI1NmIsIDB4MjFjZDZhZDUsIDB4YjJkMzk1MzMsIDB4NjRmOTc5ZmEsIDB4YjEwZmQ2MDgsCi0JMHg0NDY3ODNmYSwgMHhmOTY4MzdhOCwgMHg0Zjc3ZjhiMywgMHg1ZjUwYmFhNiwgMHgxODBjM2RjYSwgMHhmZmExMGUzZiwKLQkweGQ4ZTZiNjVmLCAweGU1ZmJiMDQ0LCAweGE2NzI4YzI0LCAweGZmYzYwZjdmLCAweDUzZWQwOTNhLCAweDdkYTEyOTgxLAotCTB4NTNlNDZlM2IsIDB4MmJmNjdkZTEsIDB4OGNmODdmYWYsIDB4ZjI3MjgwZTgsIDB4NzQyN2QwMDksIDB4MDNmMTg0ZTcsCi0JMHhkYzQ1N2JmZCwgMHg2OGRiYmY5ZiwgMHhmM2YxODJlZiwgMHhlODE0NjQ1MSwgMHgyNDJmMDUzMSwgMHhmMTc5ZmNjMCwKLQkweDQwODY2N2I1LCAweGNkNjViNTFjLCAweDg1NDEwZWRiLCAweGNlZGU0NTJmLCAweDZlN2FjZGQ2LCAweGJkNjNhYmFiLAotCTB4NTFlNTRhZDksIDB4N2UyYTQ3ZWQsIDB4ZWY4MWFiODUsIDB4MmNhYzgyNDMsIDB4YzgwZTQyOTEsIDB4MjU1OTI5YWIsCi0JMHhiOGZhNjViOSwgMHg1ZmU3YTVlNCwgMHg5YWUyMWE3OCwgMHhmZGRkOTgxZiwgMHgyZmY5ZmMyOCwgMHgyYzZmN2VlZCwKLQkweDIwZGZjZmFkLCAweGNiNjdjOTc1LCAweDUxYTkwOWIwLCAweGZmZDM5NGZhLCAweGQyOGIwZTE3LCAweDZlZDM3OGEzLAotCTB4N2IzMDZiOTMsIDB4OTQ1MjQwZmUsIDB4ZWMzN2YzMmUsIDB4ZWRjMTkxMzQsIDB4Yjc1YjkxZjEsIDB4OGI2Y2Q0ZDMsCi0JMHg0M2JhOWY0MSwgMHgxMzBmYzExMywgMHgwNGNlZmI1ZiwgMHg0M2I1M2ZmNCwgMHg2MjMzNWQyMCwgMHg2ZWQ1NzNlMCwKLQkweDRmMDBkM2Y0LCAweGFmNGU0ZjQ4LCAweGZkNzRmZDA4LCAweDQwNWQyOWNiLCAweGE1ZTllYmFmLCAweGY0MTUzN2VmLAotCTB4MGI4MzBhNGIsIDB4YmY5NDEyZjksIDB4ZjkwYWRlNWYsIDB4YmIzNTdmNDgsIDB4MmY0NTBmMDEsIDB4ZjU4MGVkZGYsCi0JMHgzMDU2MzA5YywgMHg2OTY2N2YzZSwgMHg1ZjhlODdhYSwgMHg0ZWE5YzkyNCwgMHhhMmYzZDkyYywgMHhmYzhlN2Y2NywKLQkweGNmZmY3NzM3LCAweGNiNWM1OTUzLCAweGI2ODBjZGQzLCAweGViMDZlZTRhLCAweDEzNzM1MzljLCAweGY4OTBiM2FlLAotCTB4OWU4YjBmOTAsIDB4MmZhMGJkMTEsIDB4NDk5MjM0YmYsIDB4YzljODYyMWIsIDB4NGU0ZTVjYjcsIDB4YTVjNGE2YWMsCi0JMHhjZDQxM2NlYiwgMHhmY2U5ZTYxMCwgMHhjNWFjMGM1OSwgMHgxODVkZmEzOCwgMHg1ZjM5ZmIzNywgMHhiMGU4ZjUwYiwKLQkweGEzMWM2NWZlLCAweGMwZDE5MzU3LCAweGVhZjUyZWY1LCAweGU2YmJmY2Q1LCAweGQzYTAyNmMxLCAweDVkM2NiZGE3LAotCTB4OWNhNWZjZTEsIDB4MGY4ZTY1MTgsIDB4MmI4NTAyZTEsIDB4Y2FlYmNmZWUsIDB4YzY1YzQ0ZTgsIDB4ZjUxZWZlMmMsCi0JMHgzOWUxNzJjYiwgMHgzYzkyNmZmNCwgMHhmNzlhMjE5NiwgMHhlODhjODVjOCwgMHhmMWYwZjdmOCwgMHhjMWUzYmNlOSwKLQkweDFhOTEzYTlmLCAweDQwMzA1ZjdiLCAweGI1MDJlYzUyLCAweDUzM2UyYWViLCAweGZmOTMzYmM5LCAweGJjOTljYjM1LAotCTB4YjgxZmYyMmIsIDB4N2ZiNDEyN2UsIDB4MTFjOTgwNzEsIDB4OTJmNjA3YmMsIDB4MTVkNDJiY2UsIDB4MTU0ZTc3ZGIsCi0JMHg0OTk4M2Y1MCwgMHhhZjljOTYyOCwgMHg2YjljYjg5MSwgMHg0MmZjZjVkYiwgMHgxMjE0NmZlNywgMHhlMzAzN2M1NCwKLQkweGQwMWQyMTI0LCAweDgyN2MyYTlmLCAweGEzZDJhZmJlLCAweGEzYWUzMGU1LCAweDhlNDU1YzNkLCAweGYwN2Q3MmU3LAotCTB4NmIwM2U4MjUsIDB4MWE5MDFmNTQsIDB4ZjYzYTA3YTYsIDB4NTNjNDY1N2IsIDB4ZTE3ODE0ODksIDB4MmE1ZjkwNjksCi0JMHhlNDBiYjJhZiwgMHhmYWMyZjI1NywgMHhmOGRmNWIzZiwgMHg2ZTU0YWRkZSwgMHhlNDUzYWIzZSwgMHhmNTU3YWI1NiwKLQkweGYxYjQ1YjcyLCAweDU0ZjgwNGU3LCAweGY1OWZiNzJmLCAweGU1MzEyMGFjLCAweDI5OGYzZTk2LCAweGZmOWIzZGI3LAotCTB4YzE1NTdhMjUsIDB4ZDVhNGJhNjMsIDB4ZWM5ZThhYWIsIDB4M2Q3YTlmMDgsIDB4NDJlOGM1YjksIDB4MjRmNWVhYmMsCi0JMHg1OTIwMWRmZCwgMHhlMTUxZjllZCwgMHg4YWZmODU0MywgMHgwZGVkMmM1ZiwgMHhhN2MyMjhmYSwgMHhmODQ2MWYwYSwKLQkweGZkNDNlMTU0LCAweGQ0NzhiNWJhLCAweDllN2M2M2I3LCAweGNiNzc4YmYyLCAweDUwN2IxM2JiLCAweDA1MDQ5NmJhLAotCTB4ZWY4NWQ5YjcsIDB4YzUzYTgxZWQsIDB4MGI2ZDg3OTcsIDB4ZThmNGY3YWEsIDB4NzQwN2FlYTIsIDB4N2Y1ZDNhZjUsCi0JMHhkNWVlYWU4ZiwgMHhlYWU5ZjdmNSwgMHgwMWZlYmExNSwgMHg2ODY5NGZiNiwgMHg4N2U0MTEzNCwgMHhiNGJmYTY5MCwKLQkweDlmOTBjODg4LCAweGUyMmVkZTE2LCAweDlkMWI0MWI5LCAweGJmN2QxNTczLCAweDQwNDY3ZDZkLCAweGE5NjFmYWE2LAotCTB4YzNkYmVkODUsIDB4ZDAyYWE2MjksIDB4YjBjZTZkNjcsIDB4MTZlYTA5MjMsIDB4ZjM2YjdmMTYsIDB4MmE4OTFkODYsCi0JMHg1MDUwZjFmZiwgMHgxY2RjN2Q0NCwgMHhlZDYyOTMyMCwgMHg4YmM3YTg1ZiwgMHgxZDI2NmJmNCwgMHg5MGYzYjNiNSwKLQkweDEwYzc3OGI2LCAweGI0NGYyZjE4LCAweGY4ODQyZmE1LCAweDg2ZThiNTRjLCAweDk1ZDk4ZTIzLCAweDVjZTAzYjM3LAotCTB4ZTdkODJkYTIsIDB4ZjlmNGU5YmEsIDB4MmM4ODNmOWMsIDB4MThmNjQyMmQsIDB4MGRmNmE5YmIsIDB4NTRmYzg5MjcsCi0JMHg5NWY5MDBiNiwgMHhiM2ZlOTAyYiwgMHgzMTFmNmM4MiwgMHg3ZTZjNDU3YiwgMHgxNWVmZTYyZSwgMHg4MTMxZWVkYSwKLQkweGZmZmVhNGRlLCAweDVmNWM3NTYxLCAweGEzNTQ1MzgxLCAweGMyOWMxZTdiLCAweDJmZWQ5ZWY5LCAweGRiNjhkNzhiLAotCTB4ZmEzZjdjN2QsIDB4MGZkZjBhNWYsIDB4N2VkOTQzMjUsIDB4MDgzOGIwOTAsIDB4ZTI3OWJiZDcsIDB4NTNhNmViYTAsCi0JMHgxNWVkYjQzYSwgMHhkOWNkZjAwOSwgMHgzODc0ODhhMCwgMHg0MDA4NWViYiwgMHgyOWM4OGE1YywgMHgyNDY1M2YyOCwKLQkweGMxNGVmYThjLCAweGM3YzgwYjU3LCAweDUwZjU4ZTgwLCAweDY3MWZhYmNiLCAweDk0YmI0ZmRkLCAweGM4NzBmZTZjLAotCTB4Y2I2NWE1ZmYsIDB4NmZmYTBmZTYsIDB4ZWY2YmZhODMsIDB4ZGE0ODdmYTcsIDB4NjFkZGNmZjcsIDB4YjZkZjczYzEsCi0JMHgyN2NjNzYxZCwgMHg0ZWZlZGI2ZSwgMHhkZjUwZmRmYSwgMHgzY2MzNzY2MiwgMHgzNTdjNzZkYiwgMHg2ZGE4ZjgwNCwKLQkweGY0MDhiOTkxLCAweGI2MmY1YjU4LCAweGZkYmM1OWZmLCAweDY4Y2QyMWFiLCAweGZkMjA5NzNmLCAweDhiMTMyNTZhLAotCTB4ZmVmZjA0ZDcsIDB4NGEwNWQwODksIDB4MGZmMDJhYmEsIDB4Zjk3MjdlNzgsIDB4MjA4MDRiNTYsIDB4N2NiMmFmZmMsCi0JMHgzZDZlOWZiNiwgMHhiZjljZmM2NSwgMHg2ZmE2NGVjZCwgMHhiMjI1Zjk4NCwgMHg2ZGYyZWM3MywgMHhhNGFmOWU2MywKLQkweGVmZDY5N2UzLCAweGVkYTJjZDM0LCAweDM3N2ZhZmI5LCAweDM3OTFmMzA0LCAweDU1YTdiZjMyLCAweGNlMTY3ZTZhLAotCTB4NmY0OTM3YjEsIDB4OWUyODkyMmUsIDB4YmEzODQxNWIsIDB4Mjk5ZDcyMTMsIDB4YzViNjU3MmUsIDB4MTg3N2NiYzIsCi0JMHgzZTJjZWE5NywgMHg3ZWQ4OTJkZSwgMHgxZjFmZGZmNCwgMHg5NTExZTYwMiwgMHgzODgxZWQwNCwgMHhjZGZkZDYwMSwKLQkweDNlODIxZjI3LCAweGJlNDY2MWQ4LCAweDU5ZmJkNjU0LCAweDIzZmEyNTVkLCAweGE5Zjc1YjE3LCAweGQwN2MzMWZmLAotCTB4YTEwYjc1ZDksIDB4Y2UzYmFjY2UsIDB4ZWViZGVmZjQsIDB4Y2UxNzI0NDcsIDB4ZWQwNzJmNGYsIDB4YmRmYjdjZjksCi0JMHhlZWM5N2Y1OCwgMHg5Mjc2ZjljNiwgMHhmZTlhMDdkZiwgMHgyMzdkZjhjMywgMHhlMmUzYmJhNSwgMHhiZmQ5ZmVlYiwKLQkweGE2M2JiYWY5LCAweDcyNjYxZmZiLCAweDFmMjEzYmJhLCAweGVmZjVmY2FjLCAweDU0M2Y3ZTcwLCAweDFmZmRjZGNmLAotCTB4YmY4YWY3Y2EsIDB4OWI3ODM2NmUsIDB4YTZmY2U4NzIsIDB4MzgzYjZhOTMsIDB4OWNhNGI3MTYsIDB4NzNhOTA3ZGQsCi0JMHg3NDVmNWVlNiwgMHhmYzRhZjk4MSwgMHhiZjNmNTFmYywgMHhlZmI2MjY5NSwgMHg5OTdjZTA5MywgMHgxMjZlNGI4ZSwKLQkweGVkOGY3ZWY4LCAweGZlZTVhZTkzLCAweDBiM2RiNWM1LCAweGQ2YmQyZmQxLCAweDYyNzdmY2MzLCAweDQ2NzM3YWY0LAotCTB4NmNkODllNDAsIDB4Yzk0M2M2MzcsIDB4YTgzZTgzYjAsIDB4YWYyNTc0ZGYsIDB4N2Y4YmY3NmIsIDB4YTA0Nzg4MTQsCi0JMHhlOWI1ZjlmZSwgMHg5ZjgyZjY5MywgMHg2MzRmNWQ3YSwgMHg0M2NhY2NjOCwgMHhlMGViYmU1MCwgMHhmNzZiNDdjZiwKLQkweGI0ZjhiNzMzLCAweDZiYTc5YmY1LCAweDc4NzEzN2ViLCAweGEyYjljMGQzLCAweDBhZjM0ZmUzLCAweDRhN2Y4ODAxLAotCTB4ODE0ODllYmQsIDB4NDczNGE4NzgsIDB4ZjkwMDgyMjIsIDB4NjE0YjE1MjQsIDB4NTc5MzcwZGYsIDB4YjAzZGZlZmIsCi0JMHhjNTE5MWRjZiwgMHg4MmI4YmNlMywgMHgxMTRlNzBmOSwgMHg3YzQwNTAzNywgMHg0NDQyYjc1YywgMHg0ODM3MTI3ZCwKLQkweGQxZGVmODQwLCAweDFlMWRlNjEyLCAweDAwYjM3ODMzLCAweDQ3YzNmOWNmLCAweDgxOTJmZDk1LCAweGU3N2FjMzczLAotCTB4OTIxNTdjNzEsIDB4Yzg3N2Y0MGEsIDB4YjIxNzBiZjksIDB4NGJlZTIwYjMsIDB4ZTc5YTVmZDAsIDB4ZWExYWU0MjEsCi0JMHgwYjY2MTdiNywgMHg2M2M4NzhhMSwgMHg2MTM5MTIzMSwgMHgwNTQzYzQxOCwgMHgwZjEzNTg3MiwgMHg3N2UxZDZkNSwKLQkweGNlMTQ2YTU1LCAweGM0NzdmYWM1LCAweGY5NzUzZjhmLCAweDg3ZmZjYTM3LCAweDQzM2ZlYTI1LCAweDJjZjNlNzg5LAotCTB4YjNlY2E3YWUsIDB4M2MzMjA4ZWUsIDB4ODEwODk3OTYsIDB4OTBhYmU0NGMsIDB4YjBjZjNlYTQsIDB4ZmRmZjE5OTksCi0JMHgyOGUxODFlZCwgMHgxZWJmMzk1NywgMHg3ZmY2YzA5YywgMHhhMGJiZjAyMywgMHg5ZTY3ZWU3MiwgMHgxMDA5NWQ5NSwKLQkweGVjMWIzOGY3LCAweDcyZDFjZmMzLCAweGZjMThiZTFkLCAweGJiZWY5ZmJjLCAweDAwNzkwMmZlLCAweDIwOWI2Y2I0LAotCTB4ZmZlMDhiNTQsIDB4ZmJjNjMwOTMsIDB4YjIxNjA5ZTQsIDB4NWNiZTQ2MzYsIDB4ODczOTQ5OGIsIDB4MjA3ZGMwYWYsCi0JMHhhMDJjYzRmYywgMHhhNWNkZmIyMywgMHhhOTI0MjZhZiwgMHg5YWUyYjZlOCwgMHhlZDIxYzY1MywgMHhjM2JmMDBlOSwKLQkweDdlNGJjZTMxLCAweDNjZmIwOTZjLCAweDRiN2VlYmMwLCAweDhjNmY0NGYzLCAweGNiODNmZWY1LCAweGRmMWJmZTZmLAotCTB4Mzc2Mzc3ZTAsIDB4YzAyNDMzMDQsIDB4NDQxMzBkY2IsIDB4MzllYWY5Y2QsIDB4ODdlM2Y3MTMsIDB4YWYzMGUxOTMsCi0JMHgzYjI2MzdmYywgMHhmNjVkMDBjNiwgMHg0ZWY4NmU4YSwgMHhjNjc4M2NhYywgMHhjZTcxOGJlNCwgMHhjMDI3YzdhNCwKLQkweGM5MDA3M2M3LCAweDNjZjgwODVkLCAweDgxMGIyYmYyLCAweGZjM2JkNmZkLCAweGU0MTA2N2RjLCAweGFkYzIwZjYxLAotCTB4NGNlMjA3YmQsIDB4MGI4YjMzNjYsIDB4NzEzYjMwY2QsIDB4ZTdlNjM3OWUsIDB4ZGM3NDI5NDgsIDB4YTFjZWY1NDEsCi0JMHg5ZGQ1ZjQ3MCwgMHg0NjAxOWZmNywgMHg1MTI0MjQ2YiwgMHg3ZTk0ZjdiMCwgMHhiZjU4NGJkZCwgMHg1OTY3MjY0MywKLQkweDExM2ZmNWFjLCAweDczM2FlMmM3LCAweGQxZGVmYjg5LCAweGRkMWZiZmMyLCAweDBmNmQ3ZTcyLCAweDMyN2IwNzhkLAotCTB4ZDhlNzdkODEsIDB4Y2EwOWFmOWUsIDB4NDI0OWQ5YzcsIDB4ZWMzZGY0MDAsIDB4MmY5ZWIwOWYsIDB4Yzc3OWJkYTAsCi0JMHgxYmU1ZGFjMCwgMHhmODU2NWU5OCwgMHgxMWU3OGY1ZSwgMHhmOGNhY2YxYywgMHgwYzdkNzk1MywgMHhjZjA1MmY5NywKLQkweGYzZjU3ZTBhLCAweDdkNTNmYTU1LCAweDhmMWQ0ZTM1LCAweGU4NjFhZWI4LCAweGNiMGY2MGNiLCAweDQwZDM4MjgyLAotCTB4OWIxOTk1NDEsIDB4ZTU4NzIwNGQsIDB4MTA0YThmMGQsIDB4YzVjNWJmOGYsIDB4MzA3YjUyZTAsIDB4M2JmZTdkNDQsCi0JMHhlMWNlY2NjMywgMHgzMTVkODcxYiwgMHhmM2U0ZjgxMywgMHhhMTJmZDQxNSwgMHg5ZjY2N2JlZiwgMHg3ZGRkODA3MSwKLQkweDEzZmVlMGM3LCAweGZmMjkwNzdjLCAweGJmNmIyNDUxLCAweGU4N2Q1ZjQ3LCAweDkwNGYxNjc3LCAweDcwMzM3MGQ0LAotCTB4ZTQ5NjM3OWUsIDB4YjkzZTEwNDgsIDB4ZDRhNzY0YWQsIDB4MzM0ZmM1NTUsIDB4YWVkODQ5Y2MsIDB4ZTI1ZWVmM2MsCi0JMHhlOWNmMDYxYSwgMHhmOTBmMzg3OCwgMHgzYzgxMzMxMSwgMHg0ZDc1NDFmMiwgMHg2ZGRiZmRmOCwgMHgwZjhjODkxNSwKLQkweDlhNzZlYThiLCAweGZkODE5ZWIwLCAweDcxOTRmMTk1LCAweDM1MzRmMmY0LCAweDM0MWY5YjVmLCAweDI3YjliNzJiLAotCTB4MWNkZjI1ZTAsIDB4ODMxZGM3YmEsIDB4OTU5ODJmNGYsIDB4NjgxZjg4NzMsIDB4NmY5NDNjMjcsIDB4YjIyZmZjODcsCi0JMHg3NjI4ZjcxMywgMHhhYWYyNTlhMiwgMHgzNGRlNDlmMiwgMHhkOTU3MzkzMywgMHhlY2IxYWU4OSwgMHg1NzRhODJjNCwKLQkweDgyYzNhMDU3LCAweDgyYmE3ZGVkLCAweDQzZjgyYzkwLCAweDNiMmM2YTVlLCAweDlkOWZhZWYxLCAweGJmY2ZiZTJiLAotCTB4NGE5YjZkMjMsIDB4MmFlNWM0ZWQsIDB4ODJkNTMxM2IsIDB4NmY3ZmEyN2MsIDB4NzY5M2I5ODMsIDB4ZmZkYmExNDIsCi0JMHgyZWYzN2Q2MywgMHhmMjE4ODlkOCwgMHg0ZmUzOGJiZCwgMHg4MmQzMTNiMSwgMHhhNjI3NjgwNSwgMHhkZjM1MTU0ZCwKLQkweGYzMzM2YzVmLCAweDc2ODc3MTc4LCAweDE2ZjUyNzIyLCAweDZiNmU0YmFjLCAweDk3NzlmZTBjLCAweGYzZWZjM2ZiLAotCTB4MDcxODNjM2MsIDB4NWNiN2M1ZWMsIDB4NDZlZGViZmYsIDB4MzcxZDdhNDcsIDB4YTEzYjIzMzUsIDB4Nzg0NWZmZDcsCi0JMHgwMmZhZjQ1NiwgMHgzMzliMmZlYSwgMHg0MTIxZjE2MiwgMHgwYjcwNWU3ZSwgMHhmMDAyZWJkNSwgMHgwYmViZDMyMywKLQkweDMxNzFlNzZlLCAweDgyZjU5ZTlkLCAweGQ2YTExZDllLCAweDMyZmRlY2IzLCAweGU1MGJiMzFmLCAweDk5YmYxOTBkLAotCTB4YWQ2ZmRiNDEsIDB4YjQ3MWRjOTYsIDB4YmQ1MWFkZmYsIDB4YmJkNmE1OWIsIDB4NzdhNDc2ZGYsIDB4ZmRkZTk4OGIsCi0JMHhmZDFjMzgzYywgMHhmN2Q2OGVhNywgMHg1NGI3ZDczMSwgMHhjNzc1ZjU5ZiwgMHgzM2U5OGZlMCwgMHg3N2VmOWFhYywKLQkweDczN2QwYzhlLCAweDk3OTAyNmQwLCAweGQ3M2M0NDc3LCAweDgwZmRjNjNiLCAweDFjZGY0MzdkLCAweGU5ZWFmMTAxLAotCTB4YmJlNDQ2NzEsIDB4YWQ5ZTljYmUsIDB4ODEzYzUyN2UsIDB4MzY3NzJmZTIsIDB4ZDc0YmE3ZjMsIDB4YjJiZjg4OGIsCi0JMHg2NWZmMjY3YSwgMHg0NWMwNDJiNSwgMHg3ZDg3MTNlYiwgMHhmY2ZhODI2MywgMHg4ZTdjZWNlZCwgMHg0NzNmMjBhZSwKLQkweGVmZjlmZjQ1LCAweDNjNDE1NzM0LCAweDAxMmFmZTc4LCAweDFmMjExN2NmLCAweDk3MzlmMDFhLCAweDNkZDBiM2UzLAotCTB4ZmEyYmY3MWYsIDB4ZjFlNTgzM2MsIDB4NzJlNGQ1OGUsIDB4ZDNmMTg3ODQsIDB4ZGYzZmRlNTIsIDB4NzJmOGM2MWMsCi0JMHhmNzA0ZWZmZSwgMHgxZjNlZDIyYSwgMHhkNWVmYjRhMSwgMHgzMTlmNjBhNywgMHhkY2Y3NTZiZiwgMHgxMWNmMWNiZCwKLQkweDcxOGI1ZmE4LCAweDZkM2FkMmQ0LCAweDRmZjcxZTdiLCAweDQxYTE4OGU2LCAweGY1N2Y2MDliLCAweGNiMWRkMTI3LAotCTB4MjJmZDI5ZGUsIDB4MjdmYTI5ZjgsIDB4ZTI5ZmIzZjEsIDB4ODc0ZmM0NjcsIDB4OWRjMTc5OWYsIDB4YTFmZTVmMTgsCi0JMHhlM2UzZDE3OCwgMHhiZjVjNzE2NywgMHg0MDIzMjMwYywgMHgzYzE5OGYxZSwgMHhiN2U0NWZhOCwgMHg5OTIzY2M0NCwKLQkweGNkM2Y2OGZkLCAweDcxMzcwNDNkLCAweGUwYzc3OWJlLCAweDVmM2M4MmFiLCAweDliZTU4Y2I5LCAweGIwZDlhZGNjLAotCTB4NjdkNjk1M2IsIDB4MTBhMTkxZDQsIDB4NTJiYjllOTYsIDB4ZjYyMzhmNmIsIDB4ZmNjNWRlYmYsIDB4MDIwZDhhODIsCi0JMHhlMWNlMTVlNCwgMHgwNTE1MDlkZiwgMHgxYjdiYzUxZSwgMHhlZDQ4NWY2ZSwgMHg2YjNmZWQzZCwgMHhlNzA3ZDk5OCwKLQkweDYxMmRmYmEzLCAweGZmMGE5ZmQ0LCAweGYyNjM4OTJlLCAweGUzY2Y4OGI0LCAweDA0ZjBmNzQ4LCAweDgyMGQ1M2I0LAotCTB4NjQzMmU1MTMsIDB4ZDI4Yjc2NjEsIDB4Njg5M2VlMDksIDB4NDRkNWYzMWMsIDB4OGYxNjE3NGUsIDB4MmM3NDYwNjgsCi0JMHhiOTAzNzRhNywgMHhmNWU0MTg5ZSwgMHhkZTBmZTYzYSwgMHhjZWMzM2MxNiwgMHgyNTNiODJiNSwgMHg0MDg1MmY3NiwKLQkweGI5ZGY1MTkyLCAweGQ4YWNmZjcxLCAweGNiNjczODQ3LCAweDc3ZDE1NTQ5LCAweGZmYzYyMWZiLCAweDNlMzcwNTZiLAotCTB4ZmVmZmQwMDgsIDB4NDA3NmZhMTksIDB4ZTk5ZmM1NTcsIDB4M2MxNTdkMmMsIDB4NzlkMWQxMmQsIDB4N2YyOWE1YmYsCi0JMHgwOGQ3OWUzOCwgMHgyM2E3YmM2ZSwgMHgwYmU3ODg5OCwgMHhiZGQ5YWI0NywgMHhmZTcxOGYxMywgMHhlYzA1Y2JkNywKLQkweDYwZjdkNDNmLCAweDg3MTMwZjVjLCAweDE2NDlkMzdjLCAweDcxYzNlYmNjLCAweGE2N2Y5OTMzLCAweGQ2NTA4ZWZkLAotCTB4ZDBmZDAxZTQsIDB4ZDI3Mjk1M2MsIDB4MzQ1OTdlODQsIDB4MzRlN2NjYmYsIDB4MjQ5ZmRkODMsIDB4NWY3OWI1MTgsCi0JMHg5ZmZiOTQ2MSwgMHhkZmRiZmUwMCwgMHhjNWE0OWYwNywgMHhkYmI5N2RhMSwgMHhmNjM2OWVjOSwgMHhmNDE5MTEzMiwKLQkweGY5MDkzMmZiLCAweGViODM2NmU4LCAweDJmZDA2Y2JkLCAweGU0MDQ0OTBmLCAweDIzN2RmM2UzLCAweDA1ZDE5ZmRmLAotCTB4OGZlNDQ1ZGEsIDB4OTc4Njc3ODIsIDB4ODBhNDg4NDEsIDB4ODI5MTI2ZTUsIDB4M2E1ZDk4ZmIsIDB4MmJmZmM3YzIsCi0JMHgwMTllZDdiNSwgMHg4M2YwNDg3YywgMHhmODAxODlmZCwgMHg3YmFhNmNhZSwgMHhlMjBiOWU2NywgMHgyZmY2MjMyNiwKLQkweDFiYjFmMzg1LCAweGJkZWY5ZDczLCAweGNlNWM3NDA3LCAweGJjMzk1YmVlLCAweDY5ZjcxNzJjLCAweGEwMjVkZjc3LAotCTB4ZjRhNDFkOWMsIDB4NGQzNzM4MDIsIDB4M2RlZjc4Y2QsIDB4OTdkYmJmM2EsIDB4ZDczOWUwYTUsIDB4MzRjYTRmMGMsCi0JMHhiMTlhZjczOCwgMHg2OGJiNzQ0ZiwgMHhkOWQ3NTliZiwgMHgzNjRlNzA2ZCwgMHg3YzQ4YTA2NSwgMHg0ZWRjYmMyYSwKLQkweDMzNGUzMDlhLCAweDliYWVlMmEzLCAweGE4OGE0ZTQwLCAweDU0N2I4NDNkLCAweGYzZmI4MjhhLCAweDQ2YmQ0MmJhLAotCTB4NjVjYmY3YzAsIDB4OWQyYmE5OWYsIDB4MzNjYWQzNWYsIDB4ZmM3NDExYTYsIDB4ZDAwZmRhNDIsIDB4ZmFjMzVlNWQsCi0JMHhkYzExYWY5NSwgMHgxODViYWE5MCwgMHg2NGY1MTQ3YywgMHgyZjAxMWFlMSwgMHhmZWEyNjhhYSwgMHgxYjgzMWM2ZiwKLQkweDliNzBhMzg4LCAweGI0ZmJlODZhLCAweDA3ZGUxNzNlLCAweGE3MTI2YmI4LCAweDM5NTY3OWMxLCAweDNmYmUyNzlkLAotCTB4MjVjZjEyYmEsIDB4YjQ3YmU5MGIsIDB4YjlhZDM0OTksIDB4YWJjZGUxMGIsIDB4NmY3YzA4MTEsIDB4ZTMzYTM0NTQsCi0JMHg2ZjAwZDE5MSwgMHhmNjg2ZTQ5ZiwgMHgxNmZlNzdmNywgMHhkMjY2NGFmMywgMHhmODUxYmFmMSwgMHgzY2U2YzRiMywKLQkweDJmZGRhYjhjLCAweDkzYmVmMTM4LCAweGVlNTE3ZGQ5LCAweDkxZGNiOGRhLCAweGI5ZDg3ZDgxLCAweGVmOTQ0MGI0LAotCTB4ZmNlYThjN2UsIDB4OTYxNjQxODQsIDB4YjBiODVkMDcsIDB4ZDVkNjBhYjIsIDB4MTg2NGE3MmMsIDB4OThjZTlmOTAsCi0JMHhhNTFmOGVjMCwgMHhmZjUxZjZmOCwgMHhlNTg5ODhmNSwgMHg0N2NhMzQzZCwgMHhmZDJhY2Q0YywgMHgwN2QyZDkzOSwKLQkweDQzNzY3MWU1LCAweDM5OTllYTBlLCAweGU3ZTc4YmM0LCAweDhmZTY0YWJlLCAweDA5NmE1YTFjLCAweDQ5ODdlMDA4LAotCTB4ZGU3ODc0Y2UsIDB4Y2Y4Y2Q0YjgsIDB4NzY2MjVmNWIsIDB4MzM1N2I1YTcsIDB4ZDQ0ZjQzYzYsIDB4ODdiZTA0NDgsCi0JMHhlN2QzNWM1YSwgMHg4OWUzYTAyOSwgMHgxMzllMTJmNSwgMHhhODQ4Y2Y4YiwgMHhjNGJlZTZjZiwgMHgzNThkNjRlMiwKLQkweDVhODllZTBjLCAweDlmNzJkZmE2LCAweGU4MjI2OWI5LCAweDk1NmJiOWVkLCAweDFlYWQ2NTczLCAweGEzMTU3NDJiLAotCTB4YzJjNjdhOWUsIDB4NWY1ZTkyZjQsIDB4NTE1NGY1ZTksIDB4NzZkOGFhZjUsIDB4YjE4OTllZTgsIDB4MmFjZjUwZWQsCi0JMHhjMGVjYWYxNiwgMHg5YjEzOTczZSwgMHg0MTg2YTdhMiwgMHg2OTQxNDk1ZSwgMHg4MTJiOTlhZiwgMHg4OTY3NmY5ZiwKLQkweDJkYTE0ZGRlLCAweDc2MDkzZTVmLCAweGY3OGVjNGI3LCAweDlkMTk5NTAzLCAweDNmOGMwOTRmLCAweDE5ZmZlODA4LAotCTB4ODI1ZjBkYzEsIDB4YjBjZDE0M2MsIDB4YzczZmZkZTAsIDB4NDcyMDFlODEsIDB4ZGNmMTkyMmIsIDB4ODA1MDMwYjMsCi0JMHgyZWYyNTc3OCwgMHhmMmQ0YWVlNywgMHg3ZGNlNzJiYiwgMHgxZTI0NGY4YiwgMHhiMjJhZmRiNSwgMHhkZmFhOGYxMiwKLQkweGY5NDVmZmZiLCAweDQ3NzM4ZTk2LCAweDA4YjAxMDgzLCAweGU3YjQzZjUwLCAweGVlYjAyM2U3LCAweGU0MmQ3OWM0LAotCTB4M2IwYWMxZmUsIDB4ZjdmYmY1ZjIsIDB4N2MwYTU5OWQsIDB4ODEwMWYzM2IsIDB4NjQ0ZWRmODAsIDB4YzNkODE1NWYsCi0JMHgwYjgyOTViMiwgMHgxZjczYjNlMiwgMHhhNWNmZWY2MCwgMHhkZmJjYzNlZiwgMHgyZmUzMmRmZiwgMHg5MDJlZTdjYSwKLQkweDQ3OWFiMjgzLCAweDM1ZmY2MGY3LCAweGJmZTAwYjgyLCAweGZkMDBhYWJmLCAweDI0NTkyMjg5LCAweDEwZTZiZWQ4LAotCTB4YmRhODIzZWUsIDB4NDZhM2ZjYzIsIDB4MzkwNTRjNTksIDB4NzY2MjViMjgsIDB4YzJiNzc5YzIsIDB4MWU3ZjBhNGYsCi0JMHg5MzUxZGZlMiwgMHgxYjkwZjczOCwgMHgwMGU3N2JlOSwgMHgxNGJlMGM0OCwgMHg3YjExMGJhNywgMHgyZTUzZmMwYSwKLQkweGY0M2I3ZTMzLCAweDExMDZlNDkyLCAweGIyN2YzOGI5LCAweGZlMTU2N2VmLCAweDQ2ZmY4MTEzLCAweGIxYWZmOTQ0LAotCTB4ZmMwNGQ3MjYsIDB4ZTAyMDIyNzgsIDB4ZjAyZTdjYjksIDB4ZWZlN2YwMmYsIDB4YjEwY2Y4OTUsIDB4OGJhOGZkYTksCi0JMHgwZjllYTdmMSwgMHhlNTFmZjFkYiwgMHgwYWYzZDAzYiwgMHhhOGZjMmE3ZiwgMHg0NmMzYzNlNywgMHg3ZGU2MGQzMiwKLQkweGFlMGI1MmY3LCAweGNiNmFiNzIzLCAweGNlNGM4NWI0LCAweGI3MjczY2YwLCAweDkwNTRiZWVhLCAweGNiMjM0MmViLAotCTB4NWFmMDUwZmIsIDB4NDI3OTY0NmEsIDB4NDRmNWU2ZWQsIDB4Njc1YmE5YTUsIDB4NDc5YmE3ZTYsIDB4MmEzZDhiMzcsCi0JMHg2M2NiMjIwZiwgMHhkZTcxZDEwOSwgMHhlNjNjZmY1YywgMHg3NzVlOWRkMywgMHg2ZmY0NWFlOCwgMHgwMDNlNTFiNiwKLQkweDkzYjdhZmZjLCAweDAyNDNlZTEwLCAweGViOGE4ZmE4LCAweDFiZTYwZjQ1LCAweDM3NTk0MzFhLCAweDRhZWZmNmFhLAotCTB4NTdmY2M0ZmUsIDB4ZTJlZjg4ZWMsIDB4M2U0MGU2OGQsIDB4ZjM3OGJmN2QsIDB4OGU3ODIxOTEsIDB4ZGZmOTg4YmQsCi0JMHhmZDAxM2FmMiwgMHgwZjM3MjI2MywgMHg4YTNkZWY4MSwgMHg0MzhmMmM4ZCwgMHg2MTNjMTdlZiwgMHg5NmYwZmI2MSwKLQkweGUwZTlkNjJkLCAweGVjYjUwOWI3LCAweGJhZTJhZjVlLCAweDJhYjMyNTliLCAweDQ1YjBmYmJlLCAweGI5ZTFmYTUyLAotCTB4MGNlOTRjOGEsIDB4ZmNjMzU1ZGYsIDB4Mjk0YWY3ZDQsIDB4YmYyZDFiZjksIDB4ZGM1N2ZjNjcsIDB4NTczZmExMjAsCi0JMHgxNWExYmI1YywgMHgwZjhhZjNmMiwgMHg1YmJmNzE5YSwgMHhmMzA2N2I1ZSwgMHg3OTVmNzM4ZiwgMHhkNjNmZGQ4OSwKLQkweGIyZjI2YTIwLCAweGQ1NDNlNWRhLCAweDUxY2U3ODhhLCAweDc5OGE1ZjU2LCAweGU3OGViNDFjLCAweDNjNzU2NTFkLAotCTB4ZTYwN2U4ZmYsIDB4NjU3ZmNjZWIsIDB4YTI5OTY2ZmIsIDB4ZGZhNmZlNzAsIDB4YjA5ZWYwMzksIDB4ZmMwZWI1YTYsCi0JMHhmYmY2YTU0ZSwgMHhlNWRiMTNmMywgMHhlNzJkZDUzZiwgMHg5Y2Q3NGZmOSwgMHg2MzFmYTgyMCwgMHgwYTdkM2ZlNywKLQkweDk0N2I4MGZmLCAweDI3ZmNkYTJjLCAweDFiZjRjYjUyLCAweGFjNTY2NzlkLCAweDdlMjIxM2VmLCAweDNlNWY0YmQ3LAotCTB4MmRiYmY5MGIsIDB4MTY3YjNmMWIsIDB4OGZmMjVkZTYsIDB4YmM4NTlmY2YsIDB4MDlkMDBhMGMsIDB4YmFmOTRhN2UsCi0JMHg1MWRmMzE3NywgMHg4NWEwZWY3OSwgMHhmZjdlODNlZiwgMHg2ZDE3Y2MzYiwgMHgwNmVjYzBmZCwgMHg0ZmRiYWQ2OCwKLQkweGQxZmY4M2E0LCAweDU0OWJlMWJhLCAweDY3YmQwM2M4LCAweDc3YzYxZTdiLCAweGI3MzU3OWVlLCAweDZmMTU4OTJiLAotCTB4NmZmMDI1ZTMsIDB4YWFmOTEzYTAsIDB4ZDYzNWJhN2EsIDB4YzhmZTYyMzcsIDB4ZDA3NzRhNjksIDB4YjZiYzkxMTMsCi0JMHgyZjk2NTJiYSwgMHg2Y2Y5ZTJlOCwgMHgwN2U3NjNlYiwgMHhhYjVmY2JiNywgMHgyYmJhZjFiZiwgMHgzM2Q2M2Y0MSwKLQkweDc5YTJlMTNmLCAweDNkMjgwNzZjLCAweDFkMDRlZjJmLCAweGM1N2NmM2Q3LCAweDM3YmU2YmJhLCAweGZjMzRlZDhmLAotCTB4MmJlYmQyODMsIDB4ZjAxZjM2OGIsIDB4Y2YzOWZhY2IsIDB4ZjU2ZDBkM2QsIDB4YjFlNjFkYzksIDB4M2Y4MTNhODUsCi0JMHhkMWI4ZmYyNSwgMHg4M2M0MzFlMiwgMHgxMTdjNmQxYywgMHg3ZTgxMDdmMywgMHhkN2QwMmVmOSwgMHhiYzQzYTY1ZiwKLQkweGM2MTRhNGY4LCAweGJiNzg0NGI4LCAweDJiN2JiZjE5LCAweGNhM2VmZWRlLCAweGZiYWJlYjUzLCAweGYwOTdiZjMxLAotCTB4MTI1NmUwM2MsIDB4NGQ3Y2IxZjksIDB4NWYyYTAzMWUsIDB4NmZmOTY3NjMsIDB4MWY5MDBlOWMsIDB4NzNlMDcyZTcsCi0JMHhmOGM3MDc5ZSwgMHhlYjhmYzk1YSwgMHg2YzZlMmYyOCwgMHhlMzhiMjY3YywgMHhkMmU4YmNmMSwgMHgzY2YyMWYzNSwKLQkweDg0ZGQyOGIzLCAweDQzYWY0MGQxLCAweGE4Nzc5YmRmLCAweDc4MDljMWUwLCAweGZiY2VhNTE4LCAweDE4ODc5ZDhjLAotCTB4ZDFkNGZiYzksIDB4N2EwOWU4MGQsIDB4NDlkNzkyM2MsIDB4YmYyMTNkZWIsIDB4MWZiYzIwMmYsIDB4NzViODhmMmIsCi0JMHg2ZDE3Y2IxNSwgMHg5M2RmYjQ5NSwgMHhmMmM0ZTk0NiwgMHhlYmM2NDc0MCwgMHhiOWQwMzZlNCwgMHhhZDhiY2ZmYywKLQkweGE5ZTI4N2UzLCAweGMzNGJiYzVmLCAweDVhYmUwYTM3LCAweGVmZDZjN2NlLCAweDdmODVlM2QzLCAweGQ5YWI3YmVlLAotCTB4ODJmYmZlODIsIDB4ZmJlMWUzOWIsIDB4MjY0M2ZhODIsIDB4ZjE4YmRmODIsIDB4ZGRmMjk1N2QsIDB4YjViNzhmMTIsCi0JMHg3ZjMxMTNhYywgMHgxMWFlYWFiMCwgMHg3ZjVlYmJmNSwgMHgxNDczZjE5NCwgMHhlMzhiN2NmZCwgMHg2YjJhZGU5OSwKLQkweDY1YTNmNjYwLCAweGEzNjAzZGEzLCAweGQ4ZGU1YTcwLCAweGI2NWQ3YzgyLCAweGYyMDk5MGZlLCAweDZlZDRmNmIxLAotCTB4MDNiY2IxMzIsIDB4M2Y2MDQ3MjYsIDB4YjdmOWFhMDIsIDB4MDg3M2JjYmMsIDB4OWY3ZTczZWEsIDB4ODU5YzdlOTEsCi0JMHg2MGYyOWM3YywgMHhkN2NhNzFlYywgMHgzMzhjZDE5ZiwgMHgzOTMzYWU1ZiwgMHhlZjFmMTc2ZCwgMHg2NmU3YTM1MywKLQkweDEzNjlmNzgwLCAweGFkM2VhM2YzLCAweGZhYzUyNzEzLCAweDc4YjZlNmJlLCAweGFiYWJlZjg5LCAweDNiNTBmYzk5LAotCTB4ZDkzYWY3OGEsIDB4YTI0ZTNkZDksIDB4YjJmZDFlMjMsIDB4MGZhM2VjN2IsIDB4Zjc4MGZkYzIsIDB4NDc5ODRkZDgsCi0JMHhlNzkyYjhiMSwgMHgzYjk3ZmM1ZCwgMHhkOGJkZTgwZCwgMHhmOTgxMzU3ZSwgMHhhYWZjMDUyZSwgMHhkMzkyZjdmNiwKLQkweDkzOWZjMDQ3LCAweGQ0MjNiY2QyLCAweGZjY2EzMGU3LCAweDI0MGM1ZDRkLCAweGI3YmYzZWEwLCAweGZiMGFlYTRmLAotCTB4N2I5NDYyNTMsIDB4Y2RhZTNjYzIsIDB4NzYwOGNhZmMsIDB4ZTJjZmM5YjEsIDB4OTFmY2U0ZmIsIDB4YzliY2YwYmUsCi0JMHg0YzlkZGNlOCwgMHgxMDRkMzZlMSwgMHg2ZDlhMTBkYywgMHg3ZTBjZjdjZiwgMHhkMWUwY2UyNCwgMHgzOTA5NWZkZSwKLQkweGIzYmViMGY4LCAweDg5ZmEwMzZlLCAweDQ5Yzg0Mzc2LCAweGE1YmIxMGJiLCAweGI4MzcwZDI5LCAweGE2MzJlMjJlLAotCTB4ZTYzY2VhNjIsIDB4OGZlNDNmYWYsIDB4ZTdkZjBiZWIsIDB4NWI3NTA4MzksIDB4YThkYjlmYTEsIDB4NjEyMTZmYjksCi0JMHhmZjc3NTFiNCwgMHg5N2QwMzkwMiwgMHhlNzFiMWZkYSwgMHg2NzVlMjU1NywgMHg3MGE2ZmY2NywgMHg4NzVlZjE5YiwKLQkweDEyYTQ0MWM0LCAweGRkODU3N2Q4LCAweGUzYzRmZTg3LCAweDVmN2UwZjBlLCAweDIxMDM3ZjQ2LCAweGM0ODkyMWRmLAotCTB4YzFmN2Q1YmIsIDB4ZjczNTcxZDAsIDB4MzU3MWQwNGMsIDB4YjY4ZjQ0ZjUsIDB4NzhjOTNjOWUsIDB4NDliZDk2MzQsCi0JMHgyODk4ZjNlNiwgMHg4OTBmMTBkYSwgMHgyZmVlMDY3OSwgMHhhNWZiZjI3YiwgMHg5ODlkZTc0NiwgMHg2ODIxZGM0MiwKLQkweDc5ODZjNmJmLCAweDY0YmM1NGUzLCAweDM2NmMzYWY1LCAweGZjZTliY2VkLCAweDYxMjI3YTM0LCAweDYwNmNiMzUwLAotCTB4NzczY2Q0ZjMsIDB4ZWI4MDk3MTIsIDB4ZDM5ZjY4ZjcsIDB4N2ZlYTZhZjksIDB4Y2RmNmU3ODksIDB4ZWZhMDhjNDgsCi0JMHg4NDRkNzE2YywgMHgwNmFjZmZlMywgMHhkZThjNGJkZiwgMHg0Y2MyNTRhNCwgMHg0ZTkzY2MyNiwgMHg0ODNmYmUxMywKLQkweGUzYTBlYmUwLCAweDIxM2JmYTZiLCAweGQ3YzZjMDdhLCAweDlkM2QyMWMyLCAweDJmMDZlZmVhLCAweGM2YjA3NmU3LAotCTB4ZmEwYTNkZWEsIDB4MDU3N2FiMjYsIDB4YTc2NmZhMjYsIDB4YzNhMzllMDksIDB4MGJiMDViNjksIDB4ODVjY2E3ZWEsCi0JMHhhZDA4ZTRiOSwgMHhhZjhjZDUwYiwgMHgyODIwYWVmYSwgMHgyY2MzN2QzNywgMHg4OTJjODU4ZiwgMHgxY2Q1M2Y0NywKLQkweDMwY2I2NDQ3LCAweGM4OGExZWY4LCAweDI1MTgzMGQyLCAweDVjOWZjZmMwLCAweDk0MTQwYzhiLCAweDM1ZTUxOTcxLAotCTB4M2MzMDVlZmEsIDB4MTI4NzMwZGUsIDB4Mjg5YTBlYTEsIDB4OWVmMTQzZmMsIDB4YWFmYzYxY2YsIDB4ODY2OTdkZWIsCi0JMHg3OTNjYjBhMSwgMHg5NDZjYWVlOSwgMHg2MjIwNGJkYSwgMHhlZmY0YTg2OCwgMHg0YjI1N2JkZSwgMHg5ZjdiODFmOSwKLQkweDBkZGZlYzg4LCAweGE5NWFiODc2LCAweGRmMGVjNTUzLCAweDQ3Yzc1NzZiLCAweGFhMzg5ZWVhLCAweDU5MzNhYmVmLAotCTB4YmZkODc4NWQsIDB4NDI0ZjU5NzQsIDB4MGFmMDRiMWUsIDB4NzEwN2QwNTYsIDB4M2NmMTRiY2UsIDB4ZWI4NDk0MmMsCi0JMHg1MTdkOThiZiwgMHg0ZDcwMzllNiwgMHgxMWY4YzRmMywgMHhmNzBhOWUyYywgMHg0N2IzZjY4YSwgMHg3YjQ2YzdiZSwKLQkweGQ0YTZkNmJjLCAweGYwYmZiODQzLCAweGJkNDdlZmQ2LCAweDFmYjc1YTU2LCAweGE3NTAwZGRiLCAweGU2ZTRlZjY1LAotCTB4MjkxMjNkODksIDB4NzlkNWFjNTYsIDB4NWY4MDk3NjksIDB4YTA2NjkwNWIsIDB4NWFjNGJjZWIsIDB4YzFhOGRiYmQsCi0JMHgzYzFhMTNjMywgMHhhNjNkMTcxOCwgMHgzZjYzYzNjMywgMHgzYzk3MGYwOCwgMHhhMWUyMThmYywgMHg3Y2E2ZWJiMywKLQkweGU5NGFkMDMxLCAweDgwYzcyNTM3LCAweDNhOGQzN2Y3LCAweDBiZjhjMzY4LCAweDFlZDA1OWZkLCAweDNhYWIzODcxLAotCTB4ZDk1NjhlZjgsIDB4NmUzODUwYTcsIDB4OTdmMGEzODAsIDB4NTdjMjllZjIsIDB4MWY0ZGYxMWQsIDB4ZGQ5NGJjZTIsCi0JMHg5ZmU1YTdlYiwgMHgwYzY3YWIwMiwgMHhmNTZiMWJjMCwgMHhlMGE1YjMxYywgMHhlZWJiZjFmYSwgMHhlZjAyYmUyOSwKLQkweDVmMjhlNDg0LCAweDM4NmY5YjEzLCAweDYzNWMyNzdjLCAweDU1YmM3M2JkLCAweDkyOWRhZjE1LCAweGE0Y2M0MGIzLAotCTB4NTkwNWNkZjMsIDB4NGY1ZDE5MTgsIDB4ZDJkOTQyY2EsIDB4YzUzM2FlOWYsIDB4ZWMzY2MwNjMsIDB4MTI2ZmFiMWEsCi0JMHgxZTk4ZTM4YywgMHg0OGY1NTEwZSwgMHg3MGRmMDA1ZCwgMHhhMzhlOGM0MSwgMHg3NmQ1NDdjOCwgMHgyYWFmOGZiNiwKLQkweGIxMTYwNDMwLCAweGUwMDE2MGYzLCAweDU5YTNmOTQ1LCAweGM2NjExZmM3LCAweDkwODcwZDFmLCAweDg3ODJjYTNmLAotCTB4NTQzNDdmMTgsIDB4ZTdlNzhmOGUsIDB4YWU4ZmIwNmEsIDB4NDBhMWUxMjYsIDB4NTdkNjk5ZjcsIDB4MjhiZDhjZjIsCi0JMHg1NWMzNThkZiwgMHg0ODVmMjgzZCwgMHhmY2JjZmFmMiwgMHgzM2FmMTA0YiwgMHhjZjg3ZDI2MiwgMHg0NzU3NTk0YiwKLQkweDliZGVhZGY0LCAweGQ4MjBmMGY5LCAweGUwMzNlZTY3LCAweDM3ODI5ODc5LCAweDJiNjJkZmE1LCAweDY2MWNiM2NiLAotCTB4ZmMwM2NkZjcsIDB4ZGU2ZThmOTUsIDB4YjhkYmU0MDMsIDB4ZDc5OGNmZjcsIDB4YzM3N2Q4ZTEsIDB4MzFkZjc4NGUsCi0JMHgxNWM4NTI5NSwgMHhkZjdhYjcxZCwgMHhiN2JmYmMyMiwgMHg0MDAzYWU5YSwgMHgwY2IwOTAyNiwgMHg3YzYzYmQ3NiwKLQkweGUwODlmOTMwLCAweDQxOWVmYzAzLCAweDI4NDM4ZjgwLCAweDc3ZjhlYjJmLCAweGYwZWU1NDQ1LCAweDU2ZGVkYTNiLAotCTB4MDNjM2JmNzYsIDB4NTIwNzk2NTYsIDB4Yzk3OTE1NmQsIDB4N2Q5NGIwZmMsIDB4ZmZiMDRkNjcsIDB4YzA2MjVmMmEsCi0JMHgwZTUwMjlmZSwgMHgwOTdmYWY1MiwgMHgxYWI2YWJmNiwgMHgwYTc0ZjkzNSwgMHhhMjdlMTU1ZCwgMHhmNzBhZDQ5YSwKLQkweGU4OTU1YzQ0LCAweDlmZTVhZTViLCAweDBhYTY2YjI0LCAweDIzZGVmMjllLCAweDRkOWRlMjdlLCAweGFlZDQ2NTE5LAotCTB4YmIwNmVmM2IsIDB4ZDBhN2Y5NGEsIDB4NTNkM2IyYWEsIDB4YzAxNjRiMDYsIDB4Mjg3Zjg0NWIsIDB4MGZhMmM2N2YsCi0JMHgzMDM3ZWY3ZCwgMHhmZTAzOGMxZSwgMHgwYjVkODZjMiwgMHhlODc3Mzg0NCwgMHhlMGIzNWQyYywgMHgzZmRhM2ExZSwKLQkweDM2MmE0YWNiLCAweDEyYjNmN2QyLCAweDY0ZjUwOTY4LCAweGViY2FlZjVlLCAweGU3ZDk1ODNkLCAweGEwNDFiNzIzLAotCTB4YjhmMTU3Y2YsIDB4OWU1NjJiZWMsIDB4NWU3NDYwMzcsIDB4YmM1Y2Y3MGEsIDB4OWQ5YWYxYzIsIDB4YTBiYjQ1NjYsCi0JMHhhMjkxYWRjOCwgMHg4ZGI1Y2UwZiwgMHgzMzNiN2NmYywgMHhiYTAwNjk5YywgMHgwYzZjNzIyOSwgMHg2YTc2NDIxYiwKLQkweDJlOGQzMmI0LCAweGJjMzllNDAzLCAweGUxNzlmN2U1LCAweGJkMjNiMGJjLCAweGVjMjVmNTczLCAweGYzZmQzZmJiLAotCTB4MWY5ZjNlNDYsIDB4ZGQ3ZjVmZWQsIDB4NDZlMGZiZWUsIDB4NWM2OTZmYzAsIDB4ZDAzNzIzZjMsIDB4OWYyNWQ5N2EsCi0JMHg5MTc2OWM2MywgMHhmNTBhZWNiNSwgMHhkNGJlOWU3OSwgMHhmM2FkZmZjZiwgMHgxZmUwMWMyNywgMHg5ZTZkN2ViNiwKLQkweGZlY2ZjYjE0LCAweGRmZmNjYWNhLCAweGY4ZTlmZWJkLCAweDIxNzdlMjllLCAweGFiMjc0MGE5LCAweDYzMzQyZmJmLAotCTB4NTVkNTdlODksIDB4OGU4MGYyYTgsIDB4ZWMwOTMxYjIsIDB4OTljNTk1YWIsIDB4MmJiZWU5YzYsIDB4YWVjN2NlNTQsCi0JMHg1ZmI4YjEwYSwgMHhlODMzZTgxNiwgMHhkZDgzMzVkZiwgMHhmMzM1ZmU1NywgMHg3ZmU4ZTI4ZiwgMHhjNzk0ZWU3MCwKLQkweDMyZGVjOWNmLCAweDY5ZGIxNmZhLCAweDNiMDhiN2JmLCAweGE4NGFjZDZmLCAweDkzZWY4NDY4LCAweGNmMDMzOTg4LAotCTB4ZjY4ODczMmIsIDB4ZTRhY2FmYmUsIDB4OGYzODA5ZWEsIDB4NDc5YzBjODQsIDB4YmRhZTljNmUsIDB4NDAzNDZjYWIsCi0JMHhjYzBjOWY3YiwgMHgyYTIzY2M1NywgMHgyM2NlOGNiZiwgMHg3OGMxMGZhYiwgMHgyOTcwMTkxNiwgMHgxOTRkODVlNiwKLQkweGI3OWZmOTQ4LCAweGVjY2MwZTdmLCAweDQyNjcxMWI3LCAweDc2NGZlZjU0LCAweGEwOWRlMmRkLCAweGRkYWE1YmYxLAotCTB4ZmVkZmM3YTAsIDB4NTYyM2JjNGUsIDB4MzY3NWM1ZmUsIDB4ZmQ3YjlmYzYsIDB4MDNlNDJmNWUsIDB4ZGUzY2YxZTgsCi0JMHhiYmIxMmMyNSwgMHg4ZjViZTNkYSwgMHgxNWZlM2Q0ZiwgMHg5OGYxZWFiYywgMHg0MjdiOTFmMywgMHhlOTNjMGM1MiwKLQkweGJmM2QxMmYxLCAweGJhMDBhYzBjLCAweGQxMTQwZGU0LCAweGQwNzQyOTdlLCAweGNiZjY4OWUzLCAweDVmNmY3ZTg3LAotCTB4ZjljMWZiNDIsIDB4MDhjMmI4YWIsIDB4NDMzNzJmNzYsIDB4NDU3ZmRjMjAsIDB4YzIyZjM2ZmYsIDB4MjU3ZmNjMWYsCi0JMHgzNzQ4ZWQ1ZCwgMHhlM2RiNWUzZCwgMHg5NzlmOTNkMSwgMHgxZWRmNWQxYSwgMHgzN2U2MTdjMCwgMHgzZTQwMGZiOSwKLQkweGMyNGRhMzU5LCAweDFjNjg0OTcxLCAweGJjN2JlNzUxLCAweDA0ZTRmMTAyLCAweGJiZWYxZTFjLCAweGFhNDBjNzFiLAotCTB4NTc2MmFlZjgsIDB4ZmYyODg4ZTIsIDB4ZWI1YWZiOGMsIDB4MjcwNWU2ZTcsIDB4MzlmZjAyOWUsIDB4MDRiN2MxMmIsCi0JMHhjYzQ0YTZlMiwgMHg4YTNhM2NjMCwgMHgzZTVhYzNiZiwgMHhjZDZiZmNlMywgMHhmOGExM2U0MCwgMHgwYzQzYjZkNCwKLQkweDY2NGZkZTA3LCAweDVkNGU3OWVkLCAweGY0Y2Y4ZWJiLCAweGVjZjg1N2ViLCAweGE2MzA3ODE1LCAweDNlMTRiZTNkLAotCTB4N2VlMzY4OWIsIDB4MTNkMjc3NzksIDB4NWIyMWU0ZmMsIDB4ZGU4MDI0NDYsIDB4OThhNGMxMjYsIDB4MDc1MTg4ZjEsCi0JMHg5YzM4MTFiZCwgMHgwNTFmOTE1ZiwgMHg3NzNjOGJlMiwgMHhmNDI3ZjlmNiwgMHg4ZWI1MTM1NywgMHgxY2MwZjhhYSwKLQkweDJkOWI3N2QxLCAweGY4NTJmZTg2LCAweGI3NGU0YWUzLCAweDEzYmM4OTJiLCAweDEyNTc0YmUyLCAweDdkOTExN2UzLAotCTB4ZmQ3NDQ2NDAsIDB4ZGUzYzZjYjMsIDB4ODBmNDgzZDIsIDB4YmFiMmVlNzUsIDB4YWY5OTdlZDgsIDB4ZWE2ZWIyMzMsCi0JMHhiM2RkMDI1NiwgMHg3MWQ5ZjhmOSwgMHg4MzRlZmMzNiwgMHgxMTJkOGQ4NCwgMHhiZGUyNjdmYywgMHgyOTI5YjIzNSwKLQkweGY3ODkwZjNhLCAweDg0MTVlOTI3LCAweGYwMzM3MWY5LCAweDE3OGE1Y2JlLCAweDlkMWFjMTcyLCAweDYwOWI0MmM3LAotCTB4Zjg1YzdiYzQsIDB4YzZkNzRlM2MsIDB4YjZkZjkwYzksIDB4MDAzZGY0NGUsIDB4ZjYxMTZjZWIsIDB4MTlmNWMxMGQsCi0JMHhlZWMxZmQ0MywgMHg2ZjNmZGJlOSwgMHhlZDA2NTVkOCwgMHhmNjIxNWZiNCwgMHgyZjlmZjNlMywgMHg3ODQzYjhiMiwKLQkweDNhYjAzOWJiLCAweDk0ZmY2M2EzLCAweDA3ZGEzNThhLCAweGUxYjIyZTQ1LCAweDQxY2JjOGJiLCAweGNjMjJjMmNlLAotCTB4NTNjZmM4M2IsIDB4YzIyOTljNzYsIDB4Mzg4N2EwZmQsIDB4ZTE0NjVjOTcsIDB4MTEzYjNlZWQsIDB4YTk3M2Y5ZjMsCi0JMHg3YTdlODFiYSwgMHhiN2YzZDdiZSwgMHg5MDI3OWY5ZSwgMHg0Zjc4NGNmMCwgMHgzNjNmYzdjZiwgMHhkZmYxNDAwZiwKLQkweDkwNzM3YzIyLCAweGVlY2E4ZGYyLCAweGY5NDJmYzI5LCAweDVkMWI3OWU3LCAweDYzODhkYjc3LCAweGZkYmI4MTRmLAotCTB4NTNjZjg4Y2UsIDB4ZmUyOWVlYzEsIDB4ZjEwZmQ0NzksIDB4M2FmZDAwYmMsIDB4ZmYxNWQzZjIsIDB4ZjdjZDkzN2MsCi0JMHhjMjMzZjQxMiwgMHg5OWZiZTg3YSwgMHhmODA2NWQwMywgMHhjZDkwZmU3ZSwgMHg1NzNjMzJmMywgMHhlZDhiOTZmYywKLQkweDIzMmVjODM3LCAweDNiZTc0ODE5LCAweGNlYTFkMzkzLCAweDU5M2VmMDQwLCAweGY2ODA4MTc5LCAweDk2MTI3NmVjLAotCTB4MmJkYmJjNjAsIDB4NzZiZWNkMjQsIDB4YzlmYzI1YTYsIDB4NTg3ZTcwZmQsIDB4OTllZDAwMzksIDB4MTRmYWJlMGYsCi0JMHg4Zjk2N2RmMSwgMHgxM2JmYzU1YywgMHgwZmVlMTgxOSwgMHgxNjNiYmVmYiwgMHg0M2M3ZGY2YSwgMHhiZGU4YWNjMiwKLQkweGJlZDA5ZjlkLCAweDZlMDA5MmRkLCAweDg3N2MwYTczLCAweGZiNmIyMDViLCAweGQ2NTdjN2ViLCAweDdmYWI4N2ExLAotCTB4NjNkZjljYWYsIDB4YmIyMmY3MDQsIDB4OWZjMmZlNTUsIDB4OGQ4ZmNjNmMsIDB4N2UyZGY3Y2MsIDB4MzdjNTAxOGYsCi0JMHhjMWIzZDVkOCwgMHhjNTBmMDI0YiwgMHhmNGE1NWZlMCwgMHg4YzdiMjVjNSwgMHhlNmY1YTNjMywgMHhiMWU5ZTZlZCwKLQkweGM2NTExN2VlLCAweDgzM2RmMDUxLCAweGZjZjgyOTM0LCAweDY1ZmYxNjM2LCAweGMwMWM1OGZiLCAweDczNDg0NGYwLAotCTB4N2Q5NGFmNGUsIDB4ZGZkMDEzYzMsIDB4YTAyNzViZWIsIDB4OTc1MjVkN2YsIDB4ZjFhNTk4NjMsIDB4YjgzZWQ5ZjMsCi0JMHhmNzBmOWY5ZCwgMHhmYWZmNDA1ZCwgMHhhZmNmY2M5ZCwgMHg0MmZkYzRhYiwgMHhmN2RiM2Q0OSwgMHg1Y2VmODJhYywKLQkweDBjODlmM2JhLCAweGIyM2ZmZjQyLCAweGE5YmM4NTlmLCAweDkwNDdiODUyLCAweDUzZTA4N2I1LCAweGFjZDUzZWY1LAotCTB4ODk3ZGIyN2YsIDB4ZjYxMWI5NjksIDB4YzkzNGJlYTMsIDB4NWFiZmViNGQsIDB4Zjc0NzE1NWUsIDB4YzQxOTU1NGQsCi0JMHgyOWJlZTg0MiwgMHgyN2NiNTdmMSwgMHhiNTRkMThhZSwgMHgyMDQ3OTI3MywgMHhiMmFmNTg4OSwgMHhmZWZjZTk4ZCwKLQkweGNiNTdmOTM5LCAweGUzNjU5NmFhLCAweGFlZGUyYmJlLCAweDI0NzZjZmRhLCAweDJlNmRlNzFmLCAweGZiNDc2M2M0LAotCTB4YmMxMmM3ZDgsIDB4M2M1NTc2YzksIDB4YjNmZjRmNDIsIDB4ZTAwNGFlNzEsIDB4N2Y3Y2U1YmYsIDB4NTljMmY1N2QsCi0JMHgwY2IwNmZiOCwgMHhmOTBlOWYzOCwgMHhlZTljZDk2MSwgMHhiMzhmM2IyZSwgMHhkY2Y3ZDk1YSwgMHgwMGY0ZDZlNSwKLQkweDQ1NmJhOWU4LCAweGQ5ZTYwYjlmLCAweGZlZjljNmY2LCAweDZiN2U0NzEwLCAweGI3ZGMxMWUwLCAweDhlYmRmOTA1LAotCTB4NWU0NWZjZmIsIDB4NjVmYWJlNzUsIDB4NWY2N2U2NzYsIDB4MDNhMzQ5N2QsIDB4OGNkNzFkZjYsIDB4Njc3ZTBiZmMsCi0JMHhlZWM4ZGE3ZSwgMHg2ZDE5NmI0ZCwgMHg0ZmI5ZjhkMiwgMHgwMzJlZjJkYSwgMHhkMTQ5NGFmOCwgMHhjZTdlODIyNywKLQkweDIwZWJiMTFlLCAweGVjOGVmYmQ4LCAweDc4MGVkNDQ0LCAweGU0MDNiMDA0LCAweDNjNTRmZWZjLCAweGVkZGZhYTA3LAotCTB4MGI2NWQ4ODAsIDB4NzRmZDZlZmYsIDB4OWRlYTYzN2QsIDB4ZjBkZDJjYjQsIDB4YjdlYzA3MTcsIDB4Y2ZjY2VkYjIsCi0JMHhjMjZjNmQzYiwgMHg1ZTRhNzQ3YiwgMHgwNzllZjExNSwgMHg2ZGVhNmUzYSwgMHg5ZmFlNWYxMCwgMHgxYjEwZjU5NSwKLQkweDA3NmQ0ZTI2LCAweDQzYWZiZjA5LCAweDhjYWYwN2YxLCAweDJlZGMwMzkzLCAweGJjNGQ3MTJhLCAweGJkNWM2M2RmLAotCTB4ZGEzOGIxZTgsIDB4ZjdhNzg1ZmIsIDB4MGY5ZTNlNjYsIDB4MWI5MjIxNzQsIDB4ZDkyMzI1ZGQsIDB4M2YyMjdlODUsCi0JMHg1ZGJmYTFlNywgMHgwZWYwYWY3MCwgMHhmZWJkNzk1ZSwgMHg0MGFmMWJmMywgMHg0Mjc2YTI2NiwgMHhkN2M5M2YwMCwKLQkweDk4ZWYwNTg1LCAweGI3ZmM1NjNlLCAweGUzNmI1ZjcxLCAweDUyN2Y3YTk3LCAweDgzZTMzYmIxLCAweDIwZjQ5NzQzLAotCTB4OGRkNzE3ODAsIDB4NWVjMjFkZjgsIDB4ZTk0ZGU2MjMsIDB4ZjBiY2NkZmQsIDB4Y2FmYzBlYzQsIDB4MzYzZjkxNDcsCi0JMHgwMmIxZjdkNiwgMHgxOWQ5ODczZCwgMHg3ZmQ3OTY1ZiwgMHg5NGFlZjc4ZSwgMHhiODM0ZDA5MSwgMHg1ZWFjYTZmZiwKLQkweGY3Yzg4Njc0LCAweDZmMjVlOWU5LCAweDZhYzFkZmMzLCAweGUwMmU0YTBiLCAweGVlZTBiNmRmLCAweDZmNTAyMWI4LAotCTB4NTYxZTMxMTAsIDB4NjVmNjRlZmUsIDB4NDFhZDY3YzAsIDB4MjkxZmVmMDksIDB4MDFjYzdlZGYsIDB4ZjNiMTQwZmEsCi0JMHgyZjc2NDFhZCwgMHgwOGYwNWI0OSwgMHhiNmUwNTczZSwgMHgwNjVmMjQzNiwgMHg4MTgzNjdmNiwgMHhlZDc3M2ZlZCwKLQkweGZhMGFkNmY5LCAweDY3ZjNmNWUxLCAweGFiZGY3MTkzLCAweGZmOWQ2OWQ4LCAweDczNzdjNGFiLCAweGJlMjQ2MmVkLAotCTB4ODk2ZmY2YWIsIDB4ZjIwMDdkOTgsIDB4MjQxMmYyYTcsIDB4N2Y1MTBhMjIsIDB4ZmU5ZDlkYjUsIDB4OTNiMTJjODgsCi0JMHg4MjNhZjZmNiwgMHg4MjMxZTI3ZiwgMHg3N2VkZWI5YywgMHhmYjNhZGYwNCwgMHhmYjlkODhmZCwgMHgzMGM4YmQ4ZiwKLQkweGUxYWZjN2I4LCAweGZjN2NmMjdjLCAweDc1NjgzM2VlLCAweDBjZjhjMjJlLCAweDc2ZGE0ZmYzLCAweDE0ZDhmYTdkLAotCTB4NjQ0ZmJlNzgsIDB4MTc5ZmZkZGYsIDB4ZDhkZmVmOTEsIDB4YjM3N2JmMzEsIDB4MmFmNzhkNGQsIDB4NmViOWQ3YTQsCi0JMHhkMWI3NWE2NywgMHhjNzc2ZTdmZSwgMHhkMWI1NzhiMywgMHhiYmZhOTk3ZCwgMHgwMGZmNjg4MywgMHgzYmE4NTdjNywKLQkweGJiOTJmNzNiLCAweDNmM2I3ZGMzLCAweGI3MGNmZmRhLCAweDQ1ZWFmZmJiLCAweGI4ZDJmNzkwLCAweGMzNTA0NGYwLAotCTB4OTkwZTZiZmQsIDB4YjMwYzVmNDAsIDB4N2E2MjVmN2IsIDB4N2EwYWNlYTAsIDB4N2JlMzI2NDAsIDB4NTE2ZTNhMTAsCi0JMHhmYzBmMTkzYywgMHg0ZTI0YWUxNSwgMHg3NTdiYzNjOCwgMHg3NDAwYzFhZiwgMHgwMzM2YjExOSwgMHhmMWQ2NjRmMywKLQkweDc1NzljMTczLCAweDk1MGNhNmQ1LCAweGNmYzc5OTdlLCAweDcyNGE0ZTk1LCAweGY5ZWE5MjdhLCAweDAzZDMwNzcwLAotCTB4M2YxNzc3MjcsIDB4MDNmMmZhODcsIDB4YzMxN2U5MzMsIDB4OTgzYjI2M2UsIDB4OTI2NGRiYmQsIDB4N2U4N2FjYTcsCi0JMHhlZmI4MGQ4NywgMHhlYjY3YjVkOCwgMHg2ZTBmYjgxZSwgMHg1MGQ3NDFkZSwgMHg0MWE3MzdiMCwgMHg4NmJjMjgxZSwKLQkweDIwYWFlYjdkLCAweDIzZTFiNmNmLCAweGJmNTQxNmIwLCAweDBkMTAyOWFmLCAweGM0NmRkYzc0LCAweDA3NjRlMmM1LAotCTB4OGRmZmI4MGMsIDB4Mjc4OTE3YzQsIDB4MjlmOWQ2MTksIDB4ZjZkYmJmZDcsIDB4NTBlNzM0MWEsIDB4YTQzZGY4ZGIsCi0JMHgzOWQ5ZGExZiwgMHg4YjNiN2VkNCwgMHgzYmRjNmQ1MywgMHg5NDRlZjkzZSwgMHhkMDAxZGY0MywgMHg5YjQ3ZTVmZiwKLQkweDY4YWUxY2FiLCAweDk3ZjE0ZDVjLCAweDM4ZDgxY2M2LCAweGU3ZmQzMDY1LCAweDEzODMxNjk4LCAweGIwM2FlZGM4LAotCTB4YmFmNTg0NWEsIDB4MjVkYjUyNGUsIDB4MTNmZTc2OTAsIDB4MWE4OWY3ODUsIDB4MDYxNmI2ZGUsIDB4MGRlM2NlOGYsCi0JMHhmZjA1NTM5MCwgMHgzYzNmMDJkNCwgMHgzNWI3ZDY4OCwgMHhiZjIwOTMxOSwgMHhiMmJmYzE0YSwgMHg1NzdjNjUwZSwKLQkweGIyYWNmMTFkLCAweDM2NzkyOGExLCAweDU3N2M0ZjdlLCAweGI4N2NmN2I5LCAweGEwZjcyODkzLCAweGI2Y2U1ZjIzLAotCTB4M2YxOTVhN2IsIDB4M2Y1MGU5YzgsIDB4ZmQxZTNiYjksIDB4OWVkYzRkOTIsIDB4ZGU4MmI0OTEsIDB4NGU4NTNmODAsCi0JMHg3ZjY2MGUwOSwgMHgzNDc0Zjk5NCwgMHhiZmE3M2M3ZSwgMHhiZTUwZmU1MiwgMHg2NGI5Mjc1ZSwgMHgxZjdlMWJlNCwKLQkweGM1MGU0YmEwLCAweGFlM2M4MWY1LCAweDc3ZjgzZTg2LCAweGFlNzk1NDVhLCAweDQ3YzAwZWYxLCAweGQ0N2UzNjhiLAotCTB4YzAzMDZjZDAsIDB4ZGI2NTU4ZjcsIDB4NjZiYzQ0ODUsIDB4NmRmZTkzYTQsIDB4NzU4Y2NmODQsIDB4MDcwZDdmYzgsCi0JMHg3MTcxY2EwOSwgMHhiZTJjNWRlZCwgMHhmODNkNDI0NywgMHg1ZTc4NThiZCwgMHhjZmMzZjIwZCwgMHhiNDA5YmJhZCwKLQkweGI1NWMxMzFjLCAweDM3ZTIwN2I4LCAweDhhYjkwMGU0LCAweDBkY2E4OWUyLCAweDI2ZDUxNTk0LCAweGY3NzlkN2UwLAotCTB4M2YyZTcyYjAsIDB4ZDJiNzlkZmYsIDB4NTg1OWYyODcsIDB4ZmFmYmYyYzMsIDB4N2NkODMyM2EsIDB4NDMxMmJmMzgsCi0JMHhmYmM4Nzc3YywgMHg3ZmRiOGU3OCwgMHgwMjJmZGU2NSwgMHhhOWZhZDJkZiwgMHg2MTFiYzdmYSwgMHg5NzVmY2E1YywKLQkweGRlZWUyMDNhLCAweDMwNTNlOGYwLCAweDRmNWY4NTVkLCAweDRlMTA5MWFkLCAweDdjZjZiYzUxLCAweGQ3NGU3MmZjLAotCTB4N2UzMDBmNTcsIDB4MWE0NmIzMWYsIDB4OGQzMWY3MGYsIDB4ZTIxMzg5OTEsIDB4YWNkNmRiYzUsIDB4NmY3ZjQxMTUsCi0JMHg2MGNlN2UwMywgMHhmZDc2MGU3MiwgMHhhYzg3ZWVlNCwgMHg3NzNiMDRiZiwgMHgyZTIwNDBjOCwgMHg4YTQ0YzliZCwKLQkweDYyZTRhODM2LCAweDM0ZDdhYWQ3LCAweDViNWM1YmYyLCAweGRmZTMwNTM5LCAweGU4MDI0OWNkLCAweDE1NmU0NTc5LAotCTB4YjkzMjZmYmMsIDB4NWZmY2EzMjcsIDB4MDlmZjkzYWIsIDB4MGUzOWZkZWMsIDB4YjljNzk3NDYsIDB4ODkzZTNmZmMsCi0JMHg5NDdkM2ZjYSwgMHgwMDUxMjZiOCwgMHhiMTRjOWIzOCwgMHhmNjlhZTllZiwgMHhhMjJmZjkyMywgMHhkM2I2OGY1NywKLQkweDZjMWNkM2FiLCAweDQzZThlZjVmLCAweGU2YmIyZmM3LCAweDIzZWJlZTJjLCAweGYzN2NlM2YzLCAweDZmODUwNGY4LAotCTB4N2ZjMDA0MzIsIDB4NWY2MGE1MzUsIDB4MmJjNTE3YzAsIDB4YWZmYTMzZjAsIDB4MzI3MzZmYTAsIDB4ZjZhMWJlZjEsCi0JMHgzOTQ4YjhmYywgMHg2ZGM4ZDM5NywgMHhmMjI5YWY1NCwgMHg3YTAyMmJlYiwgMHg1OGE4NGQ2NywgMHg3Mjc2N2UwYywKLQkweDdhN2M4Y2JlLCAweDRlZjVmMDRhLCAweDE0ZWQ3NmEyLCAweGJkMGM3M2M4LCAweGY0YzFkMTMwLCAweGE3YzkzOWM4LAotCTB4ZmRiY2FmYjksIDB4ZTA3NzQ4M2MsIDB4NjNiYTIyZWIsIDB4MWE5MTc1ODMsIDB4NTFmNDA5YzEsIDB4NmMzNTVkZGEsCi0JMHhjMzk0YjE1ZiwgMHhmNTJiOWU1MywgMHgyZmY3OGQxZiwgMHg5NzgzYzVkYSwgMHgzMzNkOTgzYSwgMHg3ZmIwNTZjMSwKLQkweDIyMzNkOTgwLCAweDIwYjk0NzhjLCAweDgzYmJhYjg2LCAweDc2YTNjZGJjLCAweDFkOTU1NmVjLCAweDIzNTUyNTNiLAotCTB4Zjg3ODJhYmYsIDB4NzNmN2U3MzUsIDB4NTdkZDZjODksIDB4ODI5Njc5ZjEsIDB4NjczYWE3ZWYsIDB4YTMwNDFiYTIsCi0JMHgxNDVhZTRjMCwgMHgwMDhiYmM5OCwgMHhiMWVlZDRmZiwgMHhhZmVmOTE5MywgMHhmM2Y3Y2Q4OSwgMHhmZTQyYWZkNywKLQkweGM0ZTQ5YzRjLCAweDM3MWU0OGVmLCAweDgzODkyZGJhLCAweDAwZTNlOTYyLCAweGZlZDZiYjk2LCAweGMwNTlmNzA2LAotCTB4MWRmNzIwYzcsIDB4YzgxMTQxYzksIDB4ZmZjMTg5MDEsIDB4MmFmZmNhMDEsIDB4NDA3YzI5ZmEsIDB4ODc0NWUyZjksCi0JMHhmOWU4NGY0YSwgMHg1M2RmMzk0MiwgMHg3NzQ5YjJmMCwgMHhlYjhlNzgzZSwgMHhiYTVlNDZmOSwgMHg1MTUzYzgzYSwKLQkweGU5YTNmM2Q2LCAweGNlOGVkMmRjLCAweDQ3M2EzMDZmLCAweGFkZTgwYmU1LCAweDgxZGY4OWU4LCAweDJjNzRhNTljLAotCTB4OWMxMmZkNjcsIDB4OGZhYTlmMzgsIDB4NDg1ZTYxNjcsIDB4YWEyNzNmMzUsIDB4ZjMyOWUzZTMsIDB4NDJmNWMwM2UsCi0JMHgzNTNjZTc0NywgMHgxYzVmZGY1NiwgMHhkNzQ4ZjNiYSwgMHhlNDdmMjhhMCwgMHhjMTc2YmY3MSwgMHhiMzllMzM1YSwKLQkweDllNGMyMDZmLCAweDAxZjE1ZGU1LCAweDRlOWU3N2Y1LCAweDI5NGM3NTIzLCAweDNlODA4ZmFhLCAweDM4NTY4OTFmLAotCTB4NDJkNzc1MDQsIDB4Yzc0YmU5MTMsIDB4YjA1MTk3M2QsIDB4N2U2ZGYyMGIsIDB4MGZlNzI0ZDYsIDB4NjBkOGViYTYsCi0JMHg4MzVlYTc5MiwgMHg2NGY3MDFmYiwgMHhkZjM5M2Y4MCwgMHg2Zjc4ODRlMCwgMHg0MDI5YzdhMiwgMHgwMzQzMDIzYywKLQkweGQ4ZmI4NzIwLCAweGI4ZmJjMzM4LCAweGFiN2RjMzJmLCAweGY0MWMzZGNiLCAweDJmNGU2OWMxLCAweDFlMGFiZTg1LAotCTB4MWQ3N2IyM2EsIDB4MDI1ZmI1ZDEsIDB4ZWRlM2E3M2YsIDB4MjZmMjNkN2EsIDB4MzhlNzliOTcsIDB4NDdhZTJmMWUsCi0JMHhjOWU0MTE2NCwgMHg0NDhiN2M0MSwgMHhkMzM2N2Y5OCwgMHg5MjNkMTE4MywgMHhkMDFjZjA0ZCwgMHg5ZTU1YzdjMSwKLQkweDUwOWZmNTJiLCAweDUyMTIzODhmLCAweDc0NjQ3YTU0LCAweDQyM2Q0YzczLCAweDNmZTUzMTdmLCAweGY0MWNjZDY1LAotCTB4ZDhjMWM5NjcsIDB4MDI3YTZjZmUsIDB4NjAyOWM3YjMsIDB4MTRiZjY5NDcsIDB4ZDMzZGZkOTksIDB4NTAzZWRjZDMsCi0JMHhjNTdjYzQ4ZSwgMHg4YzY2MzVlYSwgMHhjODdhMmJlMywgMHg4NzhjOTUzMSwgMHgwMGVhY2ZiZiwgMHhhNmJkMGJiYiwKLQkweDA5NWUwZWZhLCAweDI2NjliM2U3LCAweDlmMTc5YzE3LCAweGY3NDhjMjkyLCAweDVjYzM3NDUzLCAweDE1ZTFmYzhkLAotCTB4ZjQzMWRlODAsIDB4ODVmODgxMTEsIDB4MmM5ZWQ3ZmMsIDB4NTEwNjJlZmUsIDB4MTFlNDE2NGUsIDB4ZDZiYmEzYjQsCi0JMHgyYWJlNDI4ZSwgMHg4MDE0Y2ZjYSwgMHgxMzZiOGI2ZiwgMHg5YTRmNjgwNSwgMHhiZTgwMzRlMCwgMHg2YTMxZDY1MiwKLQkweDQ5ZmM4OGExLCAweDgyNDQ2MGU1LCAweGU0YTMxZThhLCAweGQ1ZjAxMTBhLCAweDI2OTdkOTNiLCAweGQ2ZmRkMjI1LAotCTB4NGNmZDU3YWYsIDB4ZDBmMWJmMWQsIDB4NjhiNDhhZmEsIDB4MWZkNjg2ZmMsIDB4N2NlYjc1YjQsIDB4MjEzNzI2ZmMsCi0JMHgzZmU0MjBmMCwgMHhlNGYwZWFkYywgMHg1NjM1YjhjMCwgMHg1OTk0MmU2ZiwgMHhjZTMwMmI1ZCwgMHg4OGJjZDlkYiwKLQkweGU1MmZjYjFmLCAweDBlNDQ0ZTNjLCAweGNlY2I4YmI0LCAweDVjNjE3NWFjLCAweGE3Y2MxYTc2LCAweGE3ZjFmYmFjLAotCTB4NzNkZTFjMDAsIDB4NjZlZmQzMTEsIDB4ZjVjMmU4ZjMsIDB4MjA4OGY5MDIsIDB4MmI3OGJhM2QsIDB4Mjg5Nzg4NDQsCi0JMHgzODRlZTc3YSwgMHhmNmExNDU5NCwgMHhhMWFlNzAwOCwgMHgyZGU4MWJjOCwgMHgzYzk1YTdmMCwgMHhkOTViODgwOCwKLQkweDQwMWY2ZTMxLCAweGMyN2E4MjNlLCAweDVhM2VhOGIwLCAweDc5ODg2ZjkxLCAweDA0YzJmMTVmLCAweDlmYWE0ZmRiLAotCTB4OWJlZmYwNDksIDB4NDc3Y2E5N2YsIDB4MmQzY2EyMjgsIDB4ZWJlOTUwNGMsIDB4YTcwZmYzYzcsIDB4NzYwOGYzYjIsCi0JMHg3Y2RkZGZhZiwgMHhiOTE2ZTc4YywgMHg0YmEwMzRmZiwgMHhhMTg2N2VmNCwgMHhmOTBjOTM2NiwgMHg1YzQzYzRhNiwKLQkweGIxZmU1NTRlLCAweDc2NDIxNDEwLCAweDU2ZmQ2M2M4LCAweDg3NGExZTIwLCAweDJjNDU2ZmI2LCAweGRlM2ZmYjlmLAotCTB4Y2ZlMDE5NDksIDB4ZDRkYzE4MzcsIDB4MGJmYzgyMzMsIDB4NmY3NzA3OTQsIDB4ZDRhN2RmODIsIDB4NzMxMjdiZjEsCi0JMHgwOTFlNmQxYSwgMHgxYzQyMWRlMiwgMHhhM2RhOGVmZiwgMHgxZDE4ZTczZCwgMHhkYjRmNWY0ZSwgMHhmOGNkMDcxNywKLQkweDcyZGFmZGI3LCAweGUwYWZiZjk0LCAweDE1OThlZmM2LCAweGU3NzkwZWZjLCAweGQ3OTg4MWYxLCAweDgzNzZhYzY5LAotCTB4MzBiNmFkOWMsIDB4MmMyZGFiZjgsIDB4YTJkYWI3NmUsIDB4MDA0YWU3YmMsIDB4NzlkMWRkYmIsIDB4MWVjMmY2N2IsCi0JMHhlMjUzZmYxOCwgMHg5MGUxZDk4ZCwgMHgwY2M5ZjgwOCwgMHhjOTJjMGNiYiwgMHgwYzY3OGQ4ZCwgMHg3MmI3NWMxMywKLQkweGYxYzc1ZjBlLCAweDQ2ZWY2OWJmLCAweGQ2NzllYzExLCAweGIwYzVlYTg0LCAweGY3NjNkOWVmLCAweDZiZmEwMGJkLAotCTB4ZGZkNmI2NmMsIDB4ZjNmMDIxMWIsIDB4ZjcwNGM5ZTEsIDB4MjQ5YzhhNGIsIDB4ZTA5ZDkzMzcsIDB4NmMxZTI0ZGEsCi0JMHgxYTBhODBmNiwgMHgxM2IzZDI3YiwgMHg1ZTA5OTVmNiwgMHg1NTNjMDAyMiwgMHg4MDA2Y2ZmZSwgMHg4NDc4YmE0YiwKLQkweGRmYzBiYTZiLCAweGZiN2ZlNWViLCAweGI0ZDljMzkwLCAweDcyMDBiYzc3LCAweDgyNjlhNWRmLCAweDllZDQxYWUwLAotCTB4ZmVjMjU3Y2YsIDB4NTNjYjA0N2IsIDB4ZmIyYWZhMDEsIDB4NWUyZmRlYzIsIDB4YTVmMDAxM2EsIDB4ZmFlMjZmZjQsCi0JMHgyZjlmMGFmYywgMHg3NGM2NDIxNywgMHg3NzE4MjEzZCwgMHgyMzQwZjRjYywgMHhhYTM1NDk1YywgMHhiOTM0NmU0OCwKLQkweDQ3OTllYjU0LCAweDY2OGY1ZTEwLCAweGVkZDFkNzE5LCAweGNhMDcyZmEwLCAweDFjNDRiNjYzLCAweDEwYzllYzc3LAotCTB4YWQ3NGI3ZTYsIDB4NDNmNjkwMjAsIDB4NDAxZDM1N2EsIDB4NDU1N2FhM2YsIDB4ZGNmNDAwOTMsIDB4OWMwZGY3YjQsCi0JMHg1ZGE2Y2Y2ZiwgMHhiNWYyZTRhYywgMHhjYTA1ZmI5MSwgMHg5OGQ5OGViYywgMHhjZmM2M2NkZCwgMHgzMzRlYWJhOSwKLQkweGMxMjA3OWJiLCAweGNhNGJmOTg3LCAweDdjNzJhYTNhLCAweGZlMTQxNTY5LCAweDE5Y2JjODRhLCAweGNlNWU3MWQxLAotCTB4YjI5MzA0OTEsIDB4ZDYwOGZmZGYsIDB4NzliZDNlNTcsIDB4M2VhMGYwMGYsIDB4ZWZiYTkwN2UsIDB4NzUyM2QyMzAsCi0JMHhhZjk2ZGIyMSwgMHgwMDQwYjdkYywgMHg0NjcyYjE3ZCwgMHhhMjgxZjhlYywgMHhmOGYyNTYzNywgMHhlNWZmMmFhYiwKLQkweDRmNGY1YTk0LCAweDY2YjI0ODI5LCAweGYyOTJmNGFhLCAweGZjZDE1M2RlLCAweGZmM2M0ZDk3LCAweDdiY2QwM2U1LAotCTB4ODA1YTk3ODMsIDB4NzliMmVlOWYsIDB4ZTU3M2MwY2UsIDB4ZTNhZDBiZWYsIDB4ZDk0N2I3N2YsIDB4YmFmODJhY2YsCi0JMHg4MGZjYzljMiwgMHgxZmQ3MDkwMywgMHhjMDI0NzM4MywgMHhmMWYyOTM5MywgMHgzY2VjNGIzYSwgMHgwNjlkY2JmMiwKLQkweDdlMzA3N2VlLCAweDVmOGM0ZDIxLCAweGZmNmExZDYwLCAweGIwMDFiZmViLCAweDAwZDc0MzJmLCAweDAwMDBkNzQzLAotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlZGZmMDAsIDB4ZDU1NDc4MGIsIDB4NzMzZWYwYjUsIDB4YzkzMzI2NjYsCi0JMHhlNGNjOTkyNCwgMHg0MDI3NWU0OSwgMHgyMWM0MGEzMCwgMHhlYjE0MTAyMSwgMHhlZjBjMDEyNCwgMHgwMjQxNTA0MSwKLQkweDgwNDIxMjBjLCAweDJhOTQxMzI0LCAweDgwNjViZDZkLCAweDhkNTIwMzE4LCAweDhiZDRiNDVlLCAweGQ3YTU3ODNhLAotCTB4Mjk0MWI2MjIsIDB4ODRlYzFhODYsIDB4M2EwYmMxNTcsIDB4OTRiNjJhMjgsIDB4YWE1NDE0MWIsIDB4YTVhYzQwOTAsCi0JMHhkN2Y5N2I5NiwgMHg2NjFmN2I1YSwgMHg5NjIyNjRjZSwgMHhiZmVmYmY2MiwgMHg3NjdlOWZmZiwgMHg2N2Q5Y2ZiMywKLQkweGZiZDdiNTlmLCAweDY0OWVjZmIxLCAweDEyNThjNGFiLCAweGRkM2IzNzYzLCAweGQ4YzY3YTY1LCAweGMxYjc1OGJlLAotCTB4ODhkOGM0NWEsIDB4NTk2ZWRmNjIsIDB4Yjk3ODZjNjEsIDB4ZGExZWI3NzcsIDB4M2JiZjU2NGMsIDB4OTQwNjExMzYsCi0JMHg2ODI2YzczMywgMHgzZGFjMWRlYywgMHhhMzg0ZGEwZSwgMHhiODM4Y2UxZCwgMHhhMzZhZGZkZiwgMHhhY2ZhNmU3OSwKLQkweDhjMmRiOThiLCAweGFiOTg5NTBkLCAweDk3NjMxMDY1LCAweDYwZDZlZmYwLCAweDMxZDU2YTliLCAweDA2MjdmMzA2LAotCTB4ZTMwNjI1NGEsIDB4NmNiOGM0MzYsIDB4ZTk2MWJlZjgsIDB4NDAwMWIyZjUsIDB4ZjFkNjY0NDksIDB4MDM2MzFmYWMsCi0JMHgyYjhkMGFhZCwgMHg5NmVlNzYyYywgMHhhNzU2M2RlMSwgMHg4Yjc5YzY0YiwgMHg5ZWY0YWM2MywgMHg2YTc3MWNjNiwKLQkweDFkM2U3ZjNkLCAweDRlODk2NzlmLCAweDM3YzAyMjY5LCAweDViMThiZmVjLCAweGZiNmRkZDAzLCAweDEwNjUyNTRiLAotCTB4NmYxNDY3YmUsIDB4YzBiNjczMTksIDB4MDU2MDU3ZjgsIDB4MTE1OTcwYTEsIDB4OWY3YzI0OWUsIDB4MzllYmVmNDQsCi0JMHg0YWNmM2JiZiwgMHgxMjljZWFmMCwgMHhhOGZjMzI0YywgMHhlODYwYzdjNSwgMHgzMmY1YTVmMCwgMHgwMmM4OWZjMiwKLQkweDZkMDAwMzEyLCAweDIzMTJkNmQ1LCAweGM2YmQzN2JjLCAweGZlNjFiOTIxLCAweGY5NWM2MjliLCAweDBlNjM1Y2Y4LAotCTB4NmQwYTFjNWMsIDB4MGFiN2NlODksIDB4ZTcxMDNiOWUsIDB4Zjk4MTY1M2MsIDB4ZjY2OGJmMTcsIDB4ZmEzMTM0OWUsCi0JMHhkNWZmMDRiYiwgMHhmYTY4MjRiNiwgMHhlZjM0ZDY5ZSwgMHg3ZjYwYmNjOSwgMHgwZDIzZmUzMSwgMHg0Y2NmZGJmZSwKLQkweDM1NjMxODZjLCAweDQwN2IxNmZjLCAweGVmOGNkZjc2LCAweDNjNzUzNWE5LCAweDc1ZmExNzNhLCAweGM4Y2FmOGJmLAotCTB4YWUwYTQ5NjAsIDB4NjU3OGUwMTcsIDB4M2RjYzQxN2YsIDB4YTc3YWUwOTYsIDB4OTk3N2E0ZjUsIDB4YmQyN2E5MzUsCi0JMHhkZTgyNGE4NywgMHg0YWRlODE2MywgMHhiMjlmN2E0ZiwgMHgzYjdhMDgyNCwgMHhmYWMxMDdkYiwgMHhjMjRjNWRlMiwKLQkweDEzNWYwMWU3LCAweDg1ZGMzZDM5LCAweGI3ODhjMWFlLCAweDM4MDMzMmE1LCAweDU4N2E0NTVlLCAweDUzOGY0Y2FlLAotCTB4YTcxZmNlMTYsIDB4MmExZTljMmMsIDB4MzhjNmU2MWQsIDB4NzVkMmI0ZWYsIDB4OTZmNWVmNDYsIDB4YmViYzNjYjIsCi0JMHhkY2FlODI3NiwgMHgxNmNmODExNywgMHhlZTM0MmQ1OSwgMHgwNWZjZjFhYSwgMHg5OWUyODdkMywgMHhmYjZkZmRiNSwKLQkweGMxZWZhMTBmLCAweGY3ODRjYjdmLCAweGMwMzc4ODQ1LCAweDU4M2Y1YzdiLCAweGY4NGViZmY3LCAweDUzZjkxOTI4LAotCTB4MjAzYWVhNjcsIDB4ZGI2YTNlMDEsIDB4MjU4NjQ1NjQsIDB4OWM5NTRjMGMsIDB4NWIxOTBiMjcsIDB4ODljZGEwZjUsCi0JMHg4YjVjZjA3YywgMHhmMTgyODhlNCwgMHg2YjE0YzljYywgMHgyMjU2NDMzMiwgMHg3NWZkOWQ2MiwgMHgxMWJiM2U3YywKLQkweDgzNjBiODVhLCAweGEzMzRkZTcxLCAweGNlZjIxMzZmLCAweDhjMzNjMDFlLCAweDM4MDgyNGYzLCAweDAwMWZlMDFhLAotCTB4MDU1NWE3NDcsIDB4MGRmNzQ5Y2MsIDB4NTU5ZmYyZWMsIDB4Zjg1MWZiODIsIDB4NmE0Yjk4MmYsIDB4ODA5NzZmNjksCi0JMHg5OThhYWI3MCwgMHhlZjcwMDBkYiwgMHgxZjg5OTM2ZSwgMHhmNjhjNmI5ZiwgMHgyZmZjYzE0NSwgMHg2MDdmMzk2ZCwKLQkweDNmZmJmNDI2LCAweGMxNjVjM2E4LCAweDI3ZWIwNGRmLCAweDUzYThmODMxLCAweDFjYWQwNGJhLCAweGMzZDNjYTY3LAotCTB4ZWQxYzg3N2QsIDB4NGI3YzYxOTAsIDB4OGIzZTVjNzQsIDB4Mzc2NGFjNjcsIDB4OTU1YjNmMzEsIDB4N2JjMGYzMGIsCi0JMHhkMzQ3YjU1NiwgMHg4MmU1NTZmYSwgMHgxZjEwZTQ3YywgMHhkOWY4ODYzYywgMHg2OTY0NmIxMywgMHhlNDFiYmQ3MCwKLQkweDY3MGRjNzA2LCAweGNjOGNlZjFkLCAweGJiYTlkMjA5LCAweGJiZDljYmY1LCAweDE4OWVmZDYwLCAweDI2MjdhZjNlLAotCTB4ZGUwMGM3Y2IsIDB4MDcxNzVkY2UsIDB4NWI4ZjFmMjAsIDB4Y2EzNWNmMzYsIDB4ZDkyNGQ4Y2UsIDB4YWZlOTFlYmQsCi0JMHhkZTY2ZjczZSwgMHg2Zjg4NzFjNywgMHg1ZTA4MzJjNiwgMHg4NDFjOWZhMiwgMHhhY2RlMzJlZiwgMHhhYzcyYmYxYywKLQkweGM5ZDFkNjllLCAweGVlYjgxZGEyLCAweDIxOTNhMzE2LCAweDM5YzdiYzlkLCAweGFkNzhhYjdmLCAweGQ5ZDFiYzEzLAotCTB4MGRkNDc0NTYsIDB4NjhlZTdiZWIsIDB4ZWY5ZjAzODYsIDB4ZWIzNmVkNmMsIDB4ZTJjYjdkZTAsIDB4NzVjMGJmZGQsCi0JMHg3MTVkOTljOSwgMHhjZjg4NDFhZSwgMHgwNjNiZWJlZSwgMHgwOTdhMWU5MSwgMHhmYzFmNzdhZiwgMHg3NDFlZTZkOCwKLQkweDg2ZGJlYjU1LCAweDdkNjk1ZmNmLCAweDQ5YTViZDFlLCAweDNmYzllZjhhLCAweGI1MjA3Y2UxLCAweGNhNTVmZmI1LAotCTB4YTg2MTM5MjcsIDB4Y2M1OWJjYjcsIDB4ZGRkNjBhYjcsIDB4OTM0ODc4MzgsIDB4YzY5ZTg0OGMsIDB4YzY0Zjk0MTQsCi0JMHgwYzlmYWMyYSwgMHgyYWJiZDIwYywgMHhmMTA3YjVkZSwgMHg4Y2Q3Y2FhYywgMHg4NDNlZDc3OCwgMHg1ZTkzZGYwYiwKLQkweDhmZGNlYjQwLCAweGYzNDNmY2ZkLCAweGFiYmEwZDBhLCAweGM4ZTFlNzVhLCAweGZlMTNmNGViLCAweDZhN2FjNTZiLAotCTB4MGNiZjE2NGQsIDB4ODY2ZGIzZjAsIDB4Zjk1NDNhMmYsIDB4NWUxM2RiZWMsIDB4MGUzMWM3YTAsIDB4MWJhOGUzYWYsCi0JMHg4YjdiZjllOSwgMHg0M2UyMTU2MywgMHg2MmJhYjAxZiwgMHhmOGUzZmUwOSwgMHgzNzNjNTYzZSwgMHgyMWJiZDcxNSwKLQkweDg1OGY2OWM2LCAweDMwNTc5YmYxLCAweGI0NTIwZmNlLCAweGRjNTg3OWUzLCAweDY4YjYzZGQ2LCAweGYxNTU5M2Q0LAotCTB4ZGYzODUzZWUsIDB4YjNmM2JhMGQsIDB4MDJjNzY4NWQsIDB4ZGMzZGRkMmUsIDB4ZDc4NjdjMGUsIDB4N2FkZGRkNjEsCi0JMHhjNjVlYTM4MiwgMHhmZDYyYWZmOSwgMHg3MWYzMjJlNywgMHhkOWZjM2EwZiwgMHg1NGU3YTIxYSwgMHhmNDE0OGNmYywKLQkweDQxZjg4OTFkLCAweGZmYTVkYzg1LCAweGM0MTRjM2EyLCAweDNkNGEwNDhmLCAweDNlNzNkNmRkLCAweDEwYjIzYWM2LAotCTB4OWYxZGY2ZGUsIDB4Zjk4MGU4MGUsIDB4NzRmOGRlZWEsIDB4ZGQ2ZmNhMzYsIDB4Yjg4OGEyNmYsIDB4N2Q3MzdlYTMsCi0JMHhkOWYxZjIzYywgMHhjNWJkMzYxMiwgMHg3ZTlmNTNkMiwgMHhhNWRlYmNiMSwgMHgxZmZhZTYwNywgMHhjYmQyNWY2YiwKLQkweDQ0NjAyYzM1LCAweGIyZGI1ZDNiLCAweGQxMGZhNWM0LCAweGU5MzEwMGE3LCAweGMwODY4M2RkLCAweDYwZmY5YzA0LAotCTB4MDA1NmNjOTEsIDB4ODYzYjc1ZGYsIDB4N2EwOGIwYTcsIDB4NWFkZjZkNWEsIDB4Yjk5NTVjY2UsIDB4ZjUxMmZkOGMsCi0JMHg4ZWQ3ZjIxYywgMHg5Nzg0ZjFhMSwgMHhlM2U5MWIzNiwgMHg5NzA3ZjFmMCwgMHgxOTQ2YmI1NywgMHhlMGVmOWY3YSwKLQkweDFmNzRmMzEwLCAweGNjMjEzZjNjLCAweDgxMzFiOTBmLCAweGEyMzE5NWRiLCAweDQ0ZTk0NTA1LCAweDhmNmNjZjM4LAotCTB4ZDJlMTc5ZjUsIDB4ZTJmNzgyOTksIDB4Y2NlOWUwMTgsIDB4YmQwYjc3YjYsIDB4NTg2NzJmYzAsIDB4NTFkN2JlZTAsCi0JMHgzMGI0YmU3ZSwgMHgwYzI2N2JmNCwgMHg0NTcwYWY3OSwgMHg2ZWRlNTA2YywgMHhiZjZiZTYyOSwgMHg3MTQzYjVlNSwKLQkweGIwOWY4YzBhLCAweDM3YTI3Nzc1LCAweDMwYjc3ZjA0LCAweGY5OTc5N2ZkLCAweGNiZGYwNzM3LCAweDFkZjRjN2Q3LAotCTB4ZWMxZTkwMDMsIDB4MGFjOWQzZjUsIDB4ZWM3NjEzYjQsIDB4YTA3Y2U0NGQsIDB4NGJjZTkwZTgsIDB4MTVmYWRlODUsCi0JMHg5YzExMWE1ZSwgMHgzYWIyYzI2ZiwgMHg2MGMyYThkNywgMHg5OTgyZjZiZiwgMHhmYWZiNDJmOSwgMHg1ZjRkMTE4MCwKLQkweDVkMGIwNWVkLCAweDI2YzQyN2I3LCAweGMzZThmZTkyLCAweGY4ZmVhMGZhLCAweGJmMGI3OGI2LCAweGUwZWRlMmFlLAotCTB4Njg1OWQzOTAsIDB4MjM5YWNmYmYsIDB4NjJlZGM5ZjMsIDB4NDQ2M2I3NWMsIDB4MTM0N2ZhMGEsIDB4ZDZmZWZlOGMsCi0JMHhmMzE4ZTMwOCwgMHg3NWYwYjhkMSwgMHhlZGRjYjliZCwgMHgzYmRiOTUxYSwgMHhjYzhkZTM3YywgMHgxY2FmYzkxZCwKLQkweDlhZmRjMDlmLCAweDc5OTk4NzZlLCAweGRiZWZhZTQxLCAweDc0M2IyMDY4LCAweGQzMDdlMmU4LCAweDlmN2U4MTBhLAotCTB4NTc1ODMwNmUsIDB4OWZhYjNlMDIsIDB4YWZmMTlkZDksIDB4NDg3YWJmNzAsIDB4ZmU4MjU1OTQsIDB4M2ZiZjhhYTcsCi0JMHg2NzgyZjFmMiwgMHhmYmFlMTc2NCwgMHgyNWY3MGRkMywgMHg3M2Y2ODNjZiwgMHg4MDFhYzdlMCwgMHgwMzQ2YzE2MywKLQkweGY4ZGVhZjVkLCAweDVhN2ViYTdkLCAweDY3ODJlOWYwLCAweDllYTIwNjkyLCAweDRkNjdiNDNmLCAweGZhYjNhZTMyLAotCTB4MTNiZTFmYmYsIDB4YTM1NmM1ZjUsIDB4NjgxMGUwNzUsIDB4YWU0OGI2NmIsIDB4YjE3MjIxNTEsIDB4YTZiMzA1ZTgsCi0JMHhhYWM3NTViZiwgMHhiYWVhMWQ3MSwgMHg3Y2JlZTQ5OSwgMHhiYzc4MDE1ZiwgMHhiYTBmZGMwOSwgMHg4ZjY1ZmY2YSwKLQkweDdmMDE3ZmQ2LCAweGZkYzA5YmM1LCAweDYxNTM0OTk1LCAweGRkNDU3NWRkLCAweGRlZWUyN2U0LCAweGZjNzY0ZDE3LAotCTB4ZmM5OTE2YjcsIDB4YmY5MGZmMDEsIDB4ZDA4ZGU3ZmMsIDB4YmQ2ZmZiMmYsIDB4YzEwODdjODMsIDB4NWU4NWEzZTcsCi0JMHhmNDhmMmM2NiwgMHhmNzg5OTU1MCwgMHhjOWU4NzZjYiwgMHg5NThiMjg5ZiwgMHhkMDdlZGYwOSwgMHgwOGM4YTMxMywKLQkweDYxYTMyZDM5LCAweGU3ZDRmN2RjLCAweDQ2ZWI5MWU0LCAweGYxZDFiOGMwLCAweGUyN2U4NjA2LCAweDI2OGJmY2Y3LAotCTB4YjdlZmQwMzAsIDB4ZDQ3ZmQwNWUsIDB4NTI5ZWIyMTEsIDB4MjNhM2Q0ZTYsIDB4OWEwY2MyNTIsIDB4ZTNhM2FiZWIsCi0JMHgwOGZmNDc5ZSwgMHgxZWEzZDMyNiwgMHhlZjY5MzMyZiwgMHhlZTNmZWU4ZiwgMHhkMWJiZGEzNCwgMHg1NTc1ZWQ1NiwKLQkweDM5NDM5ZTdlLCAweDgzOTQxODE4LCAweGY0ZmVmYmRkLCAweDY3NTg3OGM0LCAweGZiOTk0MWQ1LCAweDMzZDA1NzYzLAotCTB4NzJiYWUxNmYsIDB4NTY2ZmRlOTEsIDB4MGVlNzgxNmMsIDB4YmExY2VjMDksIDB4MWE0MzY5ZjgsIDB4YzRiMTU3ZjIsCi0JMHhkM2ZmNDI1NiwgMHg5MWU1NTE4YiwgMHhkNTQ2MjJlNCwgMHg5Y2U4MGMzNywgMHg0NGYzYTQxNywgMHg3ZGNiYzJjNywKLQkweGM1Yzk4YjE0LCAweDExZjcyZTRiLCAweGVmYWY2ZmZlLCAweGVmMmU1OWJlLCAweGZiZDIzMDRlLCAweGI4NjFmNWMzLAotCTB4ZmE1NzdjZmMsIDB4YmQ5MGMyNzAsIDB4NmE1OGRlNTksIDB4MTdlZDhlN2YsIDB4MDk5ZWI5NWIsIDB4ZmFlMThmZDcsCi0JMHgxYzJiODU0ZiwgMHhiMjBiZGFkZSwgMHg0ZjhkZWY0NiwgMHg1MDVjNjg1MCwgMHhmZWU5MTlmZiwgMHgzZWIzOGMzNSwKLQkweDY3MTA4ODRiLCAweDdjMjY3ZDgxLCAweDI5ZTk4Nzc5LCAweGUxZmYwM2JlLCAweDY0MWI4ZTBjLCAweDAwMjVlYzUxLAotCTB4NmZiNTgzNTIsIDB4MjVmNWVhMGMsIDB4NWUxNzc3MTYsIDB4ODZlOTdlY2YsIDB4MGMxN2U4NTEsIDB4NDNhY2QyZGMsCi0JMHg3MTI5ZDFmZCwgMHg4ODM2NmQ3YSwgMHg4MjgzZmIxNiwgMHgwNDVmZDA3MSwgMHhmYTEzMWNkZiwgMHg1M2EwZTIwMCwKLQkweDJlZmI2ODE2LCAweGMzMWY2MzJiLCAweGNjNGNhMmZhLCAweGJiMjAyZTZiLCAweDA0MTQzNWVmLCAweDdlMDIzZmU3LAotCTB4OGQ5OWM2MGMsIDB4OWZjNzhjMjUsIDB4ZWJmZmRjMDksIDB4YWNlOGE3OWIsIDB4Y2JjM2ZmMzAsIDB4YzA5M2NlYWQsCi0JMHhhNzk3YWJjZiwgMHhmMmYyY2I1MiwgMHhmYmJmNDg3NCwgMHg2ZmQwNmUwNCwgMHhiYmJjZTdjNCwgMHhhNzVkNjlhMiwKLQkweGNhM2U1NzI0LCAweGJlMDJjM2U1LCAweDYyZGM3YTcwLCAweDM1ZGJmOTUzLCAweDlhMmZkNDIwLCAweDVmNTkxYTVmLAotCTB4ZDNkMzZmNWYsIDB4NjZhNzkyZjgsIDB4NzFkZmExNjQsIDB4MmNlZWZkYWEsIDB4MDBhN2EzZDQsIDB4NDFkYTAwZGUsCi0JMHg5YmZlMjNiZCwgMHg4NGM3ODVmYywgMHhlYzIyM2UzYywgMHgyNzg4YmM0NSwgMHgwNGU0MjI3ZiwgMHhkNWI5YzdkOCwKLQkweGQxNzRlYjgyLCAweGE3Y2JkNWZkLCAweGYyZjhmYjUzLCAweGM2M2Y3NDY1LCAweDEyZmM0Mzk2LCAweDQwOTVlMjM3LAotCTB4YzlkZmEwNWYsIDB4ODNkOTMyYjUsIDB4ODBkNzQ2ZjksIDB4NDllZjc4MDQsIDB4ZDJlMjhlOTMsIDB4ZTUyZGViOGYsCi0JMHg5ZDc4MmNkYiwgMHhmZjMzN2M1MSwgMHg1MDliZjFhOSwgMHhiNWNiMmUyZSwgMHhlYjZmNDc1OCwgMHg3NTc2YzViYywKLQkweDc1OTZiYzdhLCAweGJhNWRhMWM0LCAweDAwYzc4ZmNjLCAweDdlNDFjOTNiLCAweDZmYmIyZjljLCAweDNjNjExNWIyLAotCTB4ZTM4YzkxZDMsIDB4YzA2MDUyM2MsIDB4YmEwNjBhMTYsIDB4YWEzZjUwYjIsIDB4ZTJkNTdmZWYsIDB4ODQ5NmM1YmMsCi0JMHg4ODFiMGVmMSwgMHhjZDEyZDE3MiwgMHg5YzM4NGVlZCwgMHgxZWZkMDVhMywgMHhiZTA4YWU1ZSwgMHg4OGQ2YTNjOCwKLQkweGRkYzYyNGJlLCAweGU4MjJhZjY4LCAweGI5ZTI3MTk1LCAweDM4ZTcxNjEzLCAweDQyZGZkMTFiLCAweDAzYWQyNzdlLAotCTB4MzhlZWU1ZjgsIDB4MGViYzQ0ZTcsIDB4NmM2NGMzNzEsIDB4M2NmMGE1ODcsIDB4NTU4YjI5Y2YsIDB4ZTI1MzhiZjAsCi0JMHg5YTZiYjk3ZSwgMHhhNzFlNDIyZCwgMHgzODQxYmNiNywgMHgzYzZkNjcxYywgMHg0ZjllMTM4ZiwgMHg5ZjM1NWI1MCwKLQkweGU3YWM0NzMwLCAweDI2YWIwNGFiLCAweDMwYjRhM2NmLCAweDQyM2NhNDY3LCAweGUzNDhjZDliLCAweDM5NGU5ZDUyLAotCTB4ZWU1ZGU5NDYsIDB4ZjIzZmJhODYsIDB4OTkyZjk4Y2EsIDB4NGUyODFjY2UsIDB4ZGE1YjIzMjksIDB4MzY5MjhmMzEsCi0JMHhmMzAyYjdjYSwgMHhlMTA5OGQyYywgMHg2MzM1ZTg3MiwgMHg1YmFmYTU3ZSwgMHg3MTg1ZWM5NywgMHg4OTc3MDFjOSwKLQkweDFlZDhlMDExLCAweGE1ZjA0YzlmLCAweDQ4MTVmYWIwLCAweDFkNmVhMWFmLCAweDllZTg3YTJkLCAweDA2YTQ5ZjY4LAotCTB4NTBhNDMwN2IsIDB4NTA5MDQ3ZTgsIDB4NjU1YmNhMzMsIDB4YTQ0MWZiYWMsIDB4ZmFjYWIwZjMsIDB4ZjMwNTQ2NTUsCi0JMHhmNTE5NWU1MCwgMHg5ZGM5NjljYiwgMHgzOGZlMDM2ZCwgMHhhMjNhMzdiZCwgMHg5YjEzZjc1ZiwgMHg2OTUyZmJkMCwKLQkweGVmMGE5NjFmLCAweDc4NDBjMTc5LCAweDkzYzJmYTE4LCAweGExZGUxMWIzLCAweDk3YTZkYzJmLCAweDVmZjVlMjQyLAotCTB4ZGYwNDBjZDgsIDB4YjI4YmJkZTksIDB4MzBmZTdlMjksIDB4ZjRlNmU1OGEsIDB4ZTBhMzc3OWMsIDB4ZGYwMjE1OGIsCi0JMHhmMzIzMWFhZiwgMHhkYzYyMzNkZCwgMHg5M2U5ZWI1NSwgMHg2YjI0ZTdlMCwgMHhiNjMzZjRmNCwgMHg1ZDRjYmM5MCwKLQkweGQzZDI3OWVkLCAweGY0MjliMDNmLCAweGI3ZDM3ZjllLCAweGY4MDNlYmVjLCAweGU2NGFiN2ZjLCAweDdhMmZiYzQwLAotCTB4ZWJlNTIzNzEsIDB4OGNiNjM1NWUsIDB4YTllYjgyZGQsIDB4MDdjYzMxZDMsIDB4OWJmN2Q5ZWMsIDB4NGZkMDdkN2QsCi0JMHhhMDg2NTRhYywgMHhmOWY5NzA3ZiwgMHhmMTFiOWI4MywgMHhiMzU1YmZmYSwgMHgzNGZmODgyMSwgMHhlNjEyZTNkZiwKLQkweDM3MzJiZTA1LCAweGRhYmViZTEzLCAweGMwNTZjNTE0LCAweDZlMWUxNjkyLCAweGU4NDNmYjE5LCAweDMxZDFhZmFmLAotCTB4ZWJlMTJiZDQsIDB4NzQxOTM3ODYsIDB4MGRmYWQ4YTksIDB4N2Y0ZTYyYmEsIDB4ZGQyYTdmZDQsIDB4NDg4Y2IxODEsCi0JMHg4ODZlOTUwZiwgMHg3YjY3ZDQzZiwgMHhmMDQ2YmQzNiwgMHg4ZjZkNzBhYiwgMHg3YTJkNzBlNywgMHhlNDU4ZWI3MSwKLQkweDM2MzUzZTkzLCAweDJhMzRmMzA5LCAweDlkYThmZjVjLCAweDMzZjY4NmI4LCAweDI1NzJlODIwLCAweDhlMWVmOWZiLAotCTB4ZTE5ZmI3MGIsIDB4YzU4OTczNzYsIDB4NWRjNzE0NzksIDB4MTVjZTdlYzksIDB4ZTg0N2I1ZmMsIDB4OGYyOTg1NjEsCi0JMHgxZDkyYmU2MCwgMHgyN2RlNTFkNCwgMHg2YzczMmU5YywgMHg5ZmEzZjIzZCwgMHgzZjIyYWVkYSwgMHg4YjY2YzUzYSwKLQkweDZjZGQxZjk4LCAweGQ5YjQ3YWU0LCAweDg5NGNlNmM2LCAweDA0MTMwZjIwLCAweDVkNzViYWJjLCAweDg5OGJiNDQ2LAotCTB4YmQ0NDUyNmQsIDB4ZjVjMmNhNzQsIDB4YWZjZGU4MTIsIDB4MjNkM2VlNDksIDB4ZjgwOGQ1ZWIsIDB4ZmY3MGVjOTUsCi0JMHg1ZGZlMmRmYSwgMHhhMTIwYWEzOCwgMHg1ZGJhMGM3ZiwgMHgzZDlkNGY4MCwgMHg4ZjAyOWYxNCwgMHg3YzU1NWUyYSwKLQkweDg4NGJlMmZhLCAweDNmMGIzNjVmLCAweGE0YmM3YjczLCAweGIzYWVlMzg5LCAweDE2OWNlM2FiLCAweDJmNjY0ZjdjLAotCTB4Y2VkMTNhZmEsIDB4ZWRmODAzOWYsIDB4YTVjNGRlZjgsIDB4NTc1ZjkzNGMsIDB4ZjU4OWVhZjMsIDB4MTQzOGM5NWUsCi0JMHgzY2EzMDJjZCwgMHhiZGRkYjY1YywgMHhiYWUzMDBjMiwgMHhmM2M3MzA0NiwgMHhiMGFmOGZkMCwgMHhiM2JlYTA5NiwKLQkweDMxZGEzYjU1LCAweDg2NzhkZWZmLCAweDk3MWIzN2U3LCAweDlhNGFkZjMwLCAweDczZmZmMTg3LCAweDJhN2NhNWY3LAotCTB4ZTk2NWRkZTIsIDB4ZjVkNDE3NjksIDB4NjdlYWJkODEsIDB4MjJlNTcwZTcsIDB4YWJkOWJkNWMsIDB4ODUxNzI4NmIsCi0JMHgxNzI3NmZmNiwgMHhkNmU4OTFjNSwgMHg2YmY1Y2YxNSwgMHhlYmRmZjE4NCwgMHhlMmI3Y2U4NSwgMHhmOWQxMmJmNSwKLQkweDM5MGY1MTBlLCAweGZjODUzZjEyLCAweDZiM2Y5NDRkLCAweGUxZWU5MDdlLCAweDkxOGUyY2Y0LCAweDdiN2NiMWZlLAotCTB4MTlkY2JjNGYsIDB4Mjc2YjJmMDksIDB4YjhmNGYyZTgsIDB4ODhlZDE2NGUsIDB4ZGExNjc3NjQsIDB4ZmZiY2YzYmYsCi0JMHhjZjUyN2I0MiwgMHg2OWZjM2ZiYywgMHg1NmU3ZTdmYywgMHgwZWJlZGUzYSwgMHhhNjRiN2NlMSwgMHgxZmI5ZTkzOCwKLQkweDVmMzExODc3LCAweDU1YTdlNmFjLCAweDRiNWYzZDc4LCAweGI5ZmEwOWNjLCAweDVhOTk2YmYzLCAweDliNWQ3YWY1LAotCTB4NTc3MTg4NTQsIDB4ZTQ4YmVlYzksIDB4N2ZiNjc3MWYsIDB4Njc3MWZlNGQsIDB4YmVhYzdmOTgsIDB4NGY2MDVlZjcsCi0JMHhiMmQxOGY5NCwgMHhmY2ZmZjg4NSwgMHhjYmNmMWUwNiwgMHg0OGU5Zjk0YywgMHhkZmIzYzM4MCwgMHhmMTBhN2NjMCwKLQkweGI0MGZmOTJmLCAweDY3OWZlODVlLCAweGYxYzdlMWNjLCAweDFlYzk2MjViLCAweDhmMzAzODJlLCAweGFjNWYxY2YwLAotCTB4YmUwODRhNjMsIDB4NGNkMTljMTIsIDB4YmQ5N2MxMDksIDB4MjdlOWE2ZGMsIDB4YzY2OGZhYjksIDB4YWJlZjRjYTcsCi0JMHhiZWU2OWZiOSwgMHhiZDNmNzM0MSwgMHhjZmQzNDBiYSwgMHgzMzQ5YmZhYywgMHhhOTU5N2IzZSwgMHgxZGUzOWZhNiwKLQkweGFmZGYxOWE3LCAweDNmNGQ3NmU5LCAweGNkNmVmOWI3LCAweGI4ZTZjZGY4LCAweGUwMGVhOWU3LCAweGMzZmEwNjc1LAotCTB4N2FjNTJiN2EsIDB4OGY3ZjViYWYsIDB4OTdlNjM5ZTYsIDB4OTkyZjU4ZmMsIDB4ZjlmZGM4MmYsIDB4YjFmYjMxZTYsCi0JMHhmMjI5NTI1ZSwgMHgxNmZiZDcxMywgMHhkZjlkZTY2OSwgMHhlODJmY2RhYywgMHg3NGJlZDc1OSwgMHg0ZjlkNWZjMCwKLQkweGJmYTFmODcyLCAweGZlZjZiZDYwLCAweDg0OGRkNmMyLCAweGVkM2U4NWNmLCAweDZhMmZjNWY1LCAweGE2ODdmOWZiLAotCTB4NGM3MWM0MGUsIDB4N2Y0NDJhZWYsIDB4NmQ3NmQ3ZWUsIDB4NzQ4YWUyYmUsIDB4NTU3NzVlZjYsIDB4ZDU0YThlNzQsCi0JMHg2OGFjZDlkMiwgMHhiZjhlMWNlOSwgMHhkODViM2M5OCwgMHgzN2RmZjg3ZCwgMHhhMWQ2MmZlMCwgMHgwYWVmOGJlNSwKLQkweDZiYjA3ZjdmLCAweDYyMWI5Y2YzLCAweGNmNTFjN2RjLCAweDk1MmViNzc1LCAweGNiZWJlNjE5LCAweGJiYjIzZDc5LAotCTB4ODNmY2NiZjUsIDB4N2QzYzg0NGEsIDB4ZmQzYzhmNmUsIDB4YmIxMGY2MjcsIDB4M2JlOWU2YTYsIDB4MjM3MmZlYjEsCi0JMHg5N2Y1MTZmYiwgMHgzYzQ1N2ZkZCwgMHgzMWU1ODE0NCwgMHg4YWNkZmY4MCwgMHhmNWNiYTYxZCwgMHgyZjMwNzMxNiwKLQkweGQ0YmZhZTFmLCAweDVmZjdmNDE2LCAweDgzZDdhNGVjLCAweGYwNTVhYTc1LCAweGY3ZjhiMGY0LCAweDVhYTcwODVkLAotCTB4OWVlZjE4YzcsIDB4ODhkZWYwNGIsIDB4ZmY4MDhjODAsIDB4ZWE5ZDdjMmMsIDB4NGI4NzgwM2MsIDB4MTJmOGNmMzgsCi0JMHg1MWM2MGM1YiwgMHg0YmRjZjc1YiwgMHg0YjZiMDE3MSwgMHg0ODBlZmFlNCwgMHhjNDNlM2ExZSwgMHhkYTNkMjUzZiwKLQkweDIzNGNmZjgyLCAweGU0NGM2OGJiLCAweDE4OTRkMTc2LCAweGJmMzFjNzEyLCAweGQ4NTdiZjhkLCAweDUxZTZkZWM1LAotCTB4YjViZDE4ZWIsIDB4ZWE5OTJlZDIsIDB4OGY1ODVkMzEsIDB4ZmJkN2EwODksIDB4ZjY4M2ZlMjYsIDB4ZjkxZThiZTUsCi0JMHg0NTg5YmVkMCwgMHhmN2MyNzEyMSwgMHg3ZWExZjdiYiwgMHgyNmU3YmMwNywgMHg2MzYyN2JjMiwgMHg0MTRhNmVjMSwKLQkweDk4ZDNmOWJiLCAweGFlYjc5MjM4LCAweDNhZWZiMjAzLCAweGE0ZGU3MGI4LCAweDA1MDZkYmM0LCAweGYwZTEyZGViLAotCTB4OWRkOTM0OGUsIDB4ZGU3ZDEwZmEsIDB4NjZlZDY5MjYsIDB4NDNmNzAxNjMsIDB4OWRiOTEyMGEsIDB4ZjhmMGIyYWQsCi0JMHg3YmU4YWM3NSwgMHg0Zjc2ZmNjMiwgMHg0MTRmOGYxMywgMHg0MmRiYWExYSwgMHg4OWIxYzFmYywgMHg1Y2ZlMzRiMSwKLQkweDVjNThjOTc0LCAweGRmMTE0NmNmLCAweGY0NDhlNjM3LCAweDIyNDk0NmJlLCAweDVmMWU1ZWZiLCAweDc1ZDcxNjNhLAotCTB4OGU1MjVlYzEsIDB4M2UwNDRhZTMsIDB4MDQ2ZmEyYzcsIDB4MGU1ZjczNmQsIDB4MGRmNjIyOGYsIDB4MTNlYmYzYTgsCi0JMHhiNjEyN2M2MSwgMHg0ZDhlZDRhNSwgMHhjODNmMGFiNCwgMHhmYmQyMDM3YSwgMHhkZTkzYjQ0NCwgMHg4ZDY1OTQ2YiwKLQkweDkzYjZhNTVmLCAweDJlYmFmOTEyLCAweDBhMmFjZGEyLCAweDIxNjhjOWNhLCAweDFlODQ2MzM3LCAweDE0NzFmY2MzLAotCTB4YzI3MzkzMDksIDB4ZGU0ZDY0ZTgsIDB4NTEzMTg4ZjgsIDB4N2EyNThkZTQsIDB4YmM3NDg5ZGMsIDB4YjdiMWQwNTUsCi0JMHhjZjMzYjIzYywgMHg2OWQ1MDdiYSwgMHhhZDc5MWU3OCwgMHhkNTkxZTc5OSwgMHgzYzhmNzMzYywgMHhjNDRjNjNiMiwKLQkweDIxZDIzMjNjLCAweDg3OTQxNmM2LCAweGY1OTc4OTg1LCAweDliZWEwNjczLCAweDI3OGU5Y2M2LCAweDFjN2YyM2M2LAotCTB4MjNjZjFkOTIsIDB4MzFiY2M3ZTgsIDB4ZTJiNzAwZjksIDB4OTFmMDM5ZDAsIDB4NGFkODFiMTEsIDB4NzgxN2Y0MzMsCi0JMHgxOTMzY2ExNSwgMHgyZDhiMGUyMCwgMHhjM2VmY2EwOCwgMHg5Zjg0Mzk4OSwgMHhhNmZkNDdjMSwgMHhmYzNmYjg3YywKLQkweGYzMWRhYjk4LCAweDMxYTYwM2NhLCAweDY2ZmZhYTFiLCAweDg3MTY1Y2Q2LCAweDE2MDZjNGZlLCAweDI5NTk2ZTMxLAotCTB4NjRiZTM5ZTgsIDB4OWU3MjhjOTcsIDB4MTJmYzA1ZDQsIDB4MDUyYjFlODEsIDB4NTc4ZTQwM2QsIDB4Nzc4NzNkMjAsCi0JMHhlZWM5YmJiOSwgMHhhYTQwM2QwOCwgMHgzZGEzZTMwYywgMHhjMzk3ZjIzYSwgMHg1NzEwM2Y5ZiwgMHg3YmQyMzBmNiwKLQkweGJlNzIyZmIwLCAweGMzODVhMmU0LCAweGZkNzE4YzYxLCAweGJjMWZlNzA0LCAweGZhODhjM2FkLCAweDM3YWE4MTY2LAotCTB4MGY0Yzc1MmIsIDB4ZTgyYTlkZjQsIDB4YWYwMzc1MzcsIDB4OTc4YmIzNTMsIDB4OWZhYWM5MmUsIDB4ODY3ZTY4YzUsCi0JMHhiNGMxNjBmYSwgMHgxZmU2MWY1OCwgMHg3OGU1YjQxNiwgMHg0NDk3MmUwOSwgMHhkYjRmMTVmOSwgMHgxN2Y2MTc2MSwKLQkweGM1NmExZDBjLCAweDdiZjlkNzc4LCAweDQ3OTI3ZDI2LCAweDdhZTMxYTJlLCAweDUxM2VjZjQ3LCAweGNmZDkwMGY1LAotCTB4ZGM1YmFhNDQsIDB4YTJlYWY4MmUsIDB4NDEzODIxNDUsIDB4MDE4ZGFmM2YsIDB4YjBkODJjM2EsIDB4NTNlZTE3NjIsCi0JMHgxOWRmZWY3OCwgMHhjYThlMjdkNSwgMHhiMjcwYzM1ZCwgMHhjYjM5MDAzYiwgMHhiM2Q1YjAwYSwgMHgzODdjMDI4YSwKLQkweDI2OTllNjk1LCAweDBkN2VmMWU2LCAweGRmMDUzNWVmLCAweDAxZGI0NzdiLCAweDAzNTFjZjVhLCAweDVmODA5YWYzLAotCTB4YTVkZTc3M2EsIDB4OThkYWJmYTAsIDB4ZmYxMDcyNjQsIDB4NzFkN2JhOGEsIDB4MTkxMGZkZDksIDB4MWQ1NzdkMGYsCi0JMHgyZGEzMzY4MiwgMHhkNjA2YmFjNiwgMHhiOGM4Y2FiMSwgMHg3NjhiYWI3ZiwgMHg1YTI3ZmUyMCwgMHgyZmM0ZjQzYSwKLQkweGM0N2E1ZDg5LCAweDY3NDE1OWUzLCAweGRmYzlmMWY0LCAweDI3NDQ2MjRmLCAweGU5Yzc1ZDM5LCAweDdkZjBhZDk2LAotCTB4NzliNWZkMjMsIDB4NzUxMzc3YzAsIDB4MTkwMmZlNDIsIDB4Y2M2MjdkNzgsIDB4ZTAxNTRiM2IsIDB4MmFlYjAzY2MsCi0JMHg3ZjQxZTljNywgMHg2NzdmOGM0ZiwgMHgwZmY0MGU2OSwgMHg0ZTNmOWJhZSwgMHgzMTNkZmMwZiwgMHg3MzJmOWRmZCwKLQkweDVhZGZkNDQwLCAweDBmZWZjNTU3LCAweGJlY2JlNzdjLCAweDViYWMwZmQwLCAweDRjZGZlZmMwLCAweDU5ZGVjZmJjLAotCTB4ZjMwZTNkNTcsIDB4ZDY1ZWVmZmIsIDB4MDdmZTdjMGIsIDB4NTdlZjJlNjQsIDB4YmE1MWNhZGIsIDB4YzY3MTQ4ZmEsCi0JMHhjZjM1NDRiMSwgMHgxZWY4MGNjYywgMHg4ZWVmZGI1NywgMHhhOTc1OWRhMiwgMHg0MWE3NzBmNSwgMHg4ZTQ3MGY1MywKLQkweDhkYmYwMTMxLCAweDEyYzU3YzE3LCAweDhjMGVjOGUzLCAweGFmMWJmNDEzLCAweDE4ZmVkM2Y3LCAweGY4NGZjOTlkLAotCTB4NTgzNThlYmQsIDB4NWIwMDZmOTEsIDB4ZjYxNTJlZWIsIDB4YWVkMDdmN2MsIDB4NzI0YmY5NjksIDB4ZTgwY2I2MzIsCi0JMHhlMjU2MjkyZCwgMHg5OGNiNTU5MywgMHgzZjc2OGNkYiwgMHhmMWQ3ODc1OCwgMHhlMTczM2MzYSwgMHhkNDc4NTVmYiwKLQkweDBiODBmN2Y3LCAweDg1YjdhYjQ4LCAweGU2ODFiNWMyLCAweDFjZWFlMTUxLCAweDc5NDVlNTEyLCAweDBhYTdlZDUyLAotCTB4ZjVkNGE3NTcsIDB4YjdiZjI2MmMsIDB4MDEzZmJkYTQsIDB4ZGIxOWQ2ZTksIDB4ZmY0MTI1OTUsIDB4NDQyM2E0YzUsCi0JMHhhZWE0Y2VjNywgMHg0ODQ3MjU2NywgMHhhOGU5YzBkZiwgMHgzOGM1NzI3YiwgMHgxOWU3YmMyZiwgMHgwMjRiYTlkOSwKLQkweGY5MTk0NmZjLCAweDhjMjY5MzNlLCAweDhmM2RlMDU3LCAweDU4YmRiOTI0LCAweDczYmUwM2RmLCAweDMyZWY5MWY4LAotCTB4NDY4N2E0OGQsIDB4MjdlNmQ1MGQsIDB4Y2Y5YzQ5MmMsIDB4M2EzYjQ1OWEsIDB4MzBmZWI5YWEsIDB4OWI2N2E1ZjAsCi0JMHg3OGMwNTZjNCwgMHgyMzZlYzVjZiwgMHg2ZDg5ODlkYSwgMHg2ODRlOGMyNywgMHgzMDlkYjZlYiwgMHhjM2FhYmVhMiwKLQkweGI3NTNjYzNlLCAweDZmNTExOGMxLCAweDc5OTI0ODZkLCAweDBmY2MzMjllLCAweGUwMzk5YmRlLCAweGM3ZGM0NGExLAotCTB4NDU1MTI5NTAsIDB4MDkxZGRlZWUsIDB4ZWY3ZmIxYTMsIDB4ZjgyNTVjNWMsIDB4OGViNzIzMmQsIDB4Yjk2NmM3YzYsCi0JMHg3NmMyMWZkYSwgMHg4YmQ4ZWIwZSwgMHgyZGMzMzQyYywgMHg5OWQyZmM2YiwgMHhiZjFhMzFkNSwgMHg1ZGJkNTY3NiwKLQkweDBjZDM5ZmQzLCAweDllYjkwMWQ0LCAweDFiNWQyY2IzLCAweDViODgzMDNmLCAweDJjMTk5ZTAxLCAweDZkZmE4N2Y4LAotCTB4OGNlM2EwYmEsIDB4ZGMwMWI1ZDQsIDB4NmRjMzMyYzcsIDB4Y2M4NDc2ZjAsIDB4ODU2ZGIxMzcsIDB4ZDc3MDg2ZGUsCi0JMHhiZjUyMGU0YiwgMHg3M2UwYTY1ZSwgMHhhMTBhZjkzMywgMHhlYjQzN2JkNSwgMHg3OTViYTM2MiwgMHg4NmFlYTMzMiwKLQkweGQ4MTVmYmZiLCAweDU0NTZiYzA3LCAweDQyNDUzZTRiLCAweGJlZTkxODNjLCAweGZiYTI1NWE3LCAweDQ3YzdkNjllLAotCTB4Y2YzMjNlZTEsIDB4MjZmMjg5NTIsIDB4M2M0NDdkYzksIDB4MWNlZmVjMjQsIDB4NTFlODJiMDEsIDB4ZjMzM2NlMDMsCi0JMHhhM2IzMTJmYiwgMHhiZWZlMTBkZSwgMHhlOTljZmYwYSwgMHgzZjg5YTdlNSwgMHhhZWFmOWY4NSwgMHg3NjAyYmE3MywKLQkweGM5Y2ZhZTE3LCAweGZlODBjNGZlLCAweDY0ZWZhYzM1LCAweGRhOWYwNjg3LCAweDZkN2FhY2ZlLCAweDZkMzJjZTdmLAotCTB4ZjA5MjZhN2YsIDB4ODFiMjA3ZGYsIDB4OTNkMzRmMjgsIDB4NTVlYTNkMjQsIDB4ZTY0NWZmYjUsIDB4MDFmOTZmZmIsCi0JMHg2YmIyY2Q5ZSwgMHg4ZDY3ZjIyNiwgMHhhOGY1NGZkMSwgMHhmYTliYjJjZCwgMHg1ZWI4N2RlYSwgMHhjMGVlNDhjNywKLQkweDk2MzkyMDFmLCAweDE5NTczZTQ4LCAweGY0MTJkNjljLCAweGUyMjU2YmEzLCAweGM0MmM5OWRiLCAweDhlMDljODVmLAotCTB4YjNkY2JlYTcsIDB4ZDcxMjY4ZmYsIDB4YWVjY2FiM2IsIDB4ZGIxNzU0YTUsIDB4YzEzNzU5MjksIDB4YTc3YTUxYTUsCi0JMHg1NWMwZmQxZSwgMHhjOGJjZTQ1MiwgMHhkZWRjNDk2MywgMHg4YTIwYzViZSwgMHgyMDA2YjgwNywgMHg5ZjVkYTI5MywKLQkweGMyZjNlZjFhLCAweDc2ZmMwNzdiLCAweGZiZmQxN2FlLCAweDA3YzA4NTAxLCAweGI3M2RjYTBhLCAweGJkODVlMzM3LAotCTB4MjVmZTA0OTksIDB4ZTQwMzdmZmEsIDB4ZGZhNGU5OTYsIDB4NDk1YTM0NmYsIDB4YTQzYjBiYmYsIDB4MmZlNzBiZWEsCi0JMHg3YzY4NzZiNCwgMHgzZjhhN2VjNiwgMHg3YjVmYWQyNiwgMHhmZjYyZjUwZSwgMHhjNzgyY2U3ZSwgMHhjYzQ3YmUwMSwKLQkweGVjOGZmZGZjLCAweDJmYjg3YzkwLCAweDNlZDA2ZWE3LCAweGMwMjk5ZmQyLCAweGJhZGVmODE2LCAweDViNDdhMTU0LAotCTB4NTJhZWZiYjUsIDB4MmU2MWFmNTAsIDB4N2EyMGMyN2YsIDB4ZTU0OTlhNmYsIDB4NDFlOTI3NzYsIDB4YmJhYTVmYzksCi0JMHg0NTI5ZmEwNCwgMHgwY2E2ZjdiYywgMHhiYzk1ZjA4NSwgMHg3NWMyNDVhOCwgMHgwYWVmMzI2NywgMHg0NjNmZTNiNCwKLQkweGI2MGE0YzIxLCAweDhmY2ZlZDU3LCAweDc5ZmRjMjkyLCAweDY1ZTYxMjRiLCAweDE0OGMzYjUyLCAweGUzMmViMWVmLAotCTB4ZWJhNzk0M2YsIDB4ZjIzMjdmMzksIDB4YjBmY2Y4NTksIDB4MDc1N2FhN2MsIDB4NzE4YmYyZTMsIDB4NzdiOWFmOTgsCi0JMHhkYzZmYmY2NywgMHhiNDliMjRlZiwgMHhhYWMxYjc3MSwgMHhlN2M3YmI4ZCwgMHg0NGNmZjU2OSwgMHg0Y2VmNTY4NywKLQkweGI5YTdlZTJlLCAweDUwMzljNTNmLCAweDc5NmE3ZjczLCAweDg3N2ZhNmExLCAweGY4Y2Q2NmViLCAweDY5OTdhNmJiLAotCTB4ZTNhOTUxZmEsIDB4ZGEwMGYyYzIsIDB4OWU0YzRhZmMsIDB4ZWIxMmJmMzYsIDB4YTI1MWU2ZDAsIDB4YmE3YWZjMGUsCi0JMHg5YTMxNzgwNCwgMHhjMDZlMWRiYywgMHg0NmM4MTM0MywgMHg0NzY4MmRiMSwgMHhhODk5YzYwNiwgMHg2ODVkMWI0OCwKLQkweDM0ZGI2MGI2LCAweDdjOGZjYTI0LCAweGM3ODdkNGQyLCAweGJlMDc1MWUxLCAweDc5ODdlYTlmLCAweDRjNWJmMTRjLAotCTB4NDk3ODhhNTgsIDB4OGE2Mjk1ZjIsIDB4NzU0NGQwMTgsIDB4ZDQxZTFiZDUsIDB4ZDNkMzliZmEsIDB4ZWRhOTVjYjgsCi0JMHg5OWY3MjRiMSwgMHhiYzFiYWM2NCwgMHg3ZjczYTRhOCwgMHg4OWYxNDAzNiwgMHhiZjcxOWEyOSwgMHhmYzg5YmI2OCwKLQkweGJlNGUzNTIyLCAweDk0NjVhNzFjLCAweDBlYmE0MDljLCAweGY1NDlkMDdhLCAweGFjY2FkNjEzLCAweGRlN2M1Nzk4LAotCTB4ZGJhOWYyMjgsIDB4NDFkYzNlZjksIDB4NjczYTFkYWQsIDB4NDkyZjdjODgsIDB4NDllMGZhZTYsIDB4OWM1OGU5NTcsCi0JMHhhYzBkYWViZiwgMHhmYWQzY2EyYywgMHhhNzU4OGM4ZiwgMHg4ZjZiNmJhYywgMHhlZjk2N2I0MywgMHg3OTg4YzhmYSwKLQkweDYxNzVlMGJiLCAweGQxNWRmNGU3LCAweDU1Zjk1ZjU4LCAweGZmNzExYzhiLCAweGY3Y2M5MmIyLCAweDdhMTNlYzZiLAotCTB4ODNmN2Q2N2QsIDB4YjBjOTUxZjEsIDB4YjU5ZTdlYTAsIDB4YzMyZmNiYjUsIDB4NWU4MTY3ZmIsIDB4NGE2YmYyZjMsCi0JMHhmYTBkM2QyNCwgMHgzY2NmMTM1OSwgMHhhN2VlYTY5OSwgMHhjMWVjNmE3MSwgMHgwMzdlYzVkZCwgMHhlZDZhOWZkOSwKLQkweDc4ZDMzOWY4LCAweDVjN2EwNDVjLCAweDkxYTMzZDdiLCAweDFkNjMwYmY0LCAweDgxNWJjYzA2LCAweDhmZGNkNzVlLAotCTB4ZDI3MTE2NGIsIDB4MTJlODM2NDAsIDB4YWVhMzgxZTgsIDB4MmJiNWZiYzgsIDB4Yzc0NGY0ZDMsIDB4YTIzMmVlYTMsCi0JMHg0ZjgwOTNjMywgMHhlYzlmOTdmNCwgMHhkNzhlM2Y4MSwgMHg2NWVkZTEyYiwgMHhmYTEwODFlNCwgMHg0ZmFiOGY4NSwKLQkweGNiZjQ3ZWUzLCAweDA3ZWRlOGJkLCAweDk3OWY3ZDA0LCAweDU0YTgwNTAyLCAweGUyNjhhZTNkLCAweGI5YTY5OWRmLAotCTB4ZjczZjcxOGIsIDB4MWFhZmNjYmUsIDB4ZWIzMTVlYjEsIDB4N2I0MzEyZDcsIDB4MDNmNjg3ZmIsIDB4YjhjZjhmYjQsCi0JMHhlZTMyNmY3NSwgMHhlY2I0ZjRhZiwgMHg3ZmMwNjY0ZCwgMHgwNTY1MDYzNSwgMHgxZmMwZjNmYSwgMHhlYTdmZjQwZSwKLQkweDdmMDRmZDVhLCAweDNiNjE0YjZkLCAweDk1NmRhZjVlLCAweDNkOTJhODFjLCAweGExOGRjZWRiLCAweDQ2OGViMjc1LAotCTB4ZGYzZGZmYWMsIDB4OTMyMzVjMGIsIDB4NWI3NTVmYjksIDB4MDRmM2MyYjIsIDB4ZGEyNzc4NmUsIDB4M2U1MTZkZmQsCi0JMHgwMGZjODQ5ZiwgMHhkYWUxMDlmYSwgMHhlODY2YjEyMSwgMHgxNGRhYmYzZiwgMHhhMGZiZWViMSwgMHhkNTllZjdjMCwKLQkweDZhYjM4YTQ2LCAweGM3NWM3OWUwLCAweDQ2N2RjY2JlLCAweDU2ZDNmMjEzLCAweGViODQ5NzU4LCAweDBjNDc3YzM4LAotCTB4YzBkNGJmY2UsIDB4ZTE1MGNmZDAsIDB4MzgxOTkzM2IsIDB4YjBmZmViOGUsIDB4YjgxZDAyMTIsIDB4MjY1MmFhYmUsCi0JMHg1NGI4N2Y3YywgMHg5ZmU3MjNlNCwgMHhiOGM3NGM2YSwgMHg3N2VmOTZhNiwgMHg0ZGQ5NWRkZiwgMHhhYjBmYmU3OSwKLQkweDM2NTY5ZmI5LCAweDM5NzI0MGRmLCAweDU3ZjcwOTYzLCAweGU1NWFmOWMyLCAweDlmMDVhN2RiLCAweDM4NmZmMzg2LAotCTB4ZDdlMGY2ZGYsIDB4ZDdlM2FiZWEsIDB4ZTZiZjIwY2EsIDB4ZmEwN2RkYTMsIDB4M2U0MTRlOGYsIDB4ZWVmZjAxZmEsCi0JMHhkZGM1ZmE2NSwgMHhiYjgwMTQ4NiwgMHg4MWQ1YTM2ZiwgMHhjYjA2YmRmYiwgMHg1MTkyODdiZSwgMHhmN2U2ZWM2ZiwKLQkweDk0NmNkNDg3LCAweGVlNTFmZWI4LCAweDM3YTVmNWM2LCAweDA5MWFkOTE5LCAweGVkZDM4OWY5LCAweDg1Mzc0MTAxLAotCTB4MTQzMTQ5NzUsIDB4YTJmYTA1ZmYsIDB4YmY1MWNhOWUsIDB4ZTliMDMwODcsIDB4YTczZjMxNWIsIDB4ZjA2N2ZhZTcsCi0JMHhkNzFiYTk2YiwgMHg2ZTZmZjA4NCwgMHg1NTViZTczMiwgMHgzMjM0MGUyZiwgMHgwN2FhNTZmNywgMHgwMjk5ZjRiNCwKLQkweGUwNmNiY2YzLCAweDMxMmM5Y2Y1LCAweGFlYmY2ZTVmLCAweDVkYTA1MzMxLCAweGU0ZjVjYzlmLCAweGRhODcwMTBhLAotCTB4ODBlNDI3NWYsIDB4Zjg0ZGRjNjUsIDB4ZjhlMjY4OWMsIDB4NWZjY2I3MWYsIDB4OTlmOGViODEsIDB4ZWEzMGZkZDEsCi0JMHhlZjU5MDlkNSwgMHg2YmRkYTBkNywgMHgyMGU2ZmJlYSwgMHgwNzMyMWZjYSwgMHhiYzZhZTFmOSwgMHhhN2M0N2JiZSwKLQkweGY1ODNlZTFiLCAweDI2OGZhZjlhLCAweDNlNzc5YWZhLCAweDM2N2U0NTZlLCAweDcxNGQwZWU3LCAweGI1M2ZlMDQ3LAotCTB4NjFjODVjZjUsIDB4ZDVmMDNiNmUsIDB4YWFkNDdlODUsIDB4NGViYjI5ZmQsIDB4NzI5ZjY5MWIsIDB4MjQzMWI5ZGIsCi0JMHhlOGQyMTcyZiwgMHg1MzVjZmFiYSwgMHhjMWNmOTcxYSwgMHg5YWE4M2Y2MiwgMHhhZGJkMDRjZiwgMHg4ZTA4MmUyZiwKLQkweDcwYzBmMTUzLCAweGMyMTE1ZTc3LCAweGViZDEwMmYzLCAweDA4NmMyNWJlLCAweDRlM2ZhYjRmLCAweDczNTk5ZmViLAotCTB4ZjMwYjlhNTgsIDB4MWE3MDY1ZGMsIDB4ZjdlZjgwMmMsIDB4YzYyZmE3ZTMsIDB4MmU2ZjJmZmQsIDB4ODUxZGNjNjcsCi0JMHhjYzRjZWZmYiwgMHgwM2VlMWQ3ZCwgMHhiMDNmNTJiNCwgMHhlZmZhOTUzYywgMHhkZGE4NTcyYywgMHg4NGJkNzI2MiwKLQkweDRmNjNiYTc4LCAweGFiZWQyZTdkLCAweDU1Y2E3Y2NjLCAweDNjZTllZjBhLCAweDA1M2IxMDY4LCAweGE4MjdlNDRkLAotCTB4MzZlZWExZjUsIDB4N2VlMDk5OTksIDB4ZWE4OTM2ZjcsIDB4YjNmYzJhOWQsIDB4MzczM2E0MmYsIDB4ZTNkZjk3ZTgsCi0JMHhkYWMxZTBmYiwgMHhkZTkyZWY2NSwgMHgxYjlmNTQ3MywgMHg5MGQyNzE4MywgMHhkODhkMTM5YSwgMHhmM2ZiMmNmNywKLQkweDhlMmZmNDE4LCAweDNlNDEzZDgzLCAweGE1OWZiZjAzLCAweDBlNGZhODRhLCAweDVkZGY3MTFiLCAweGNkM2IwNWM1LAotCTB4NmJhZWIyZjMsIDB4Zjc5ZGNhMGMsIDB4NTBlYTg5MGQsIDB4MTljZjViYzcsIDB4NjJiZGI4NTMsIDB4NTgwNmNhMDgsCi0JMHhmZmUwMTM5ZiwgMHhlYjgxMzkyMiwgMHgzYTIxYjY5MywgMHhkY2ExZGY0ZSwgMHhkMGZjMTFhZiwgMHg3MWQ3YzM3ZSwKLQkweDMyZDMwZjQ4LCAweGYxOWJlZGU1LCAweDQzMzJmZGY5LCAweGRhNTM1ZWI5LCAweGEwOGQ2NzE1LCAweGJjYzI4Zjg3LAotCTB4NzVjMTVjOTgsIDB4N2Y3ZTFiNjAsIDB4ZWI5YmQxYmEsIDB4ZWJhNmU3ODAsIDB4ZmE5YmVmMjIsIDB4YmU3MmY5MmMsCi0JMHhmZjE0ZTQ4MiwgMHgwYWI3ZTAyNCwgMHg2MGIzNmZjMSwgMHg4YTM2ZjE0OSwgMHgyMGQxZmM4MywgMHhjYWRhYjNjZiwKLQkweGFkYjFlYjRlLCAweGRhNDdkODk3LCAweDE0N2Q4Y2Y4LCAweGM2ZjdjN2UyLCAweGFkYjZkZjg3LCAweDgzNzJmOWMzLAotCTB4NTkyMzhjN2QsIDB4NzE4NDVmODgsIDB4ZGZiY2QzMjQsIDB4OTk0Y2YzY2IsIDB4MTFkYzUzZmQsIDB4MGU1OTc5ZDYsCi0JMHgwM2JmYzAzYSwgMHhlMzgxZDU3YSwgMHhkZjkxZDhhNCwgMHg3NjdiNTIwNywgMHhjYTBhYzNjNywgMHhlYmJhMjk4ZiwKLQkweDZjMTdiNDI5LCAweDhlZTI4ZTgwLCAweDFmZDZhZjVhLCAweGU1Y2E5NjNhLCAweGMwYWE1OGUxLCAweDdlMzY4YTViLAotCTB4NGU0OTM4ODIsIDB4MWM1MjcxZTEsIDB4ZTI0Mzg0MTYsIDB4MTRlYmYwYTcsIDB4YWU1MDk5M2YsIDB4ODEwM2JkZTAsCi0JMHhhMjQ0YWYzZSwgMHgyOWE5NmE0ZiwgMHhhYmU1MDkyNSwgMHgwMTljZjg5OSwgMHg4NTdmMjM5ZiwgMHgyMjllZDNhZiwKLQkweGFlNDJkOWYyLCAweDIzNWNhMDY3LCAweGI5NzJiNmZmLCAweDNiYjc5ZjBlLCAweGYzOGVjNGI1LCAweDVjN2RjNmFlLAotCTB4NjljNmY0MTEsIDB4ZjVkYWNlYjEsIDB4YjNjYmUxMTIsIDB4M2E3ODRlZGUsIDB4NGFiYmQ2YzMsIDB4MDBjZjJmODEsCi0JMHhhMDJmYjgxYywgMHg0OThhZTVkMywgMHhkYjhkN2FjMCwgMHgwNGIzNjMxNSwgMHhmYWRkNDBmNSwgMHg3NTZlN2ExOCwKLQkweDczZWRkYmZmLCAweGMyOTc5ZmExLCAweDZiNmNmZWY5LCAweDNjZjEwOTk5LCAweDNmOTczZDdiLCAweGZkYzc3ZGY1LAotCTB4NGYyOGVjMzMsIDB4YTMyZTg2NDUsIDB4YjQ2N2VlMDMsIDB4M2Y0Mzg4OWQsIDB4NTRjNzY4YjAsIDB4NmY2MWNhM2IsCi0JMHg3MGE4NjY3MCwgMHhmMTZmYmIyZSwgMHgwN2U3M2I0OSwgMHhmNWFhNmZjYywgMHhiZjRhY2YzOCwgMHg3OGJmZjExMSwKLQkweDZkZmUyMzE5LCAweDNhODdmZWRmLCAweDZkYjNlMzk0LCAweDg3YjQ1NjMxLCAweDc4YzY3NjY3LCAweGJlNzdmZjUxLAotCTB4NDlkM2U1MTEsIDB4ZTM3ODg3MTQsIDB4MzE5ZGFmNDEsIDB4N2YyMjRjNzQsIDB4YzU2Yzg3NzMsIDB4YzZmM2QxZjgsCi0JMHgzY2ExNGZlNywgMHhhMTQ3YjY3YSwgMHhiNzE2YzdlNywgMHhlZDBlN2MzZCwgMHhkOGRiNGQ1ZSwgMHhkYTdjZmFkMywKLQkweDk1NGZmZTg3LCAweGY3NjVkYTg3LCAweGZlZDU3YWQzLCAweDBhNGRjYmU3LCAweDdhYjNkMWVhLCAweGI3MTYyN2FlLAotCTB4ZWZmZTRhYmUsIDB4ZjlkZDhiZTIsIDB4YjMzZjBmNTgsIDB4NTBjMzZmZjMsIDB4ZGI3ZTc5YWYsIDB4OTlmNTBjM2QsCi0JMHg2MWVlZjVlNywgMHg1YWYzZGY3OCwgMHhiZjI0N2Q0YywgMHhmM2M2OTdjNSwgMHhjY2JkYWE0MCwgMHhlNGQ3YTIzOSwKLQkweDVkODVhMjhiLCAweDJlNjg2OWM4LCAweDQ1OWQ3ZGM3LCAweDMwMzlhNzg3LCAweDJmZGVhYjlmLCAweDdlZDFkNWNhLAotCTB4NDZmN2EyZmUsIDB4M2M4N2U3ZDksIDB4OTdkMDEwZDcsIDB4ODdhMWY1ZTMsIDB4ODY1NGM1NDcsIDB4NDFhYTY1ZjIsCi0JMHg1NTVlMzdjZCwgMHhlYWVmMDc5ZSwgMHg3NWU0ODU4NywgMHgxOWE3M2EwMiwgMHhlODBlYWRjNiwgMHg2YWRhZmVmOSwKLQkweDA2ZjE4N2M5LCAweGNmZTEyZmY4LCAweGI5ZDUzZjkxLCAweDQzNWJlZWQwLCAweGZjNmI4MjdlLCAweGNmZDhhMWUwLAotCTB4NTA1MWFjNzUsIDB4ZjZmNjk4YWQsIDB4NjY5N2YxMGYsIDB4MjhmZTc0MDQsIDB4NmRlOWEzZTAsIDB4ZjdmMjdlNTEsCi0JMHhkNDEzZmEwMywgMHhlY2Q0N2UxNywgMHhlNmM2OWY3MywgMHgzNGYyMTE0OCwgMHg0NjhjZWY3OSwgMHhhZjllMWUzZCwKLQkweDg0NThiZjgxLCAweGRlYWZmNTViLCAweGEzZjllMzRmLCAweDBlYWI3YThjLCAweDM0NTY2N2Y3LCAweGI1ZTIyYjMwLAotCTB4ZmE2NzVlNDcsIDB4MGEyZjk0NmQsIDB4ODEyOGVmY2YsIDB4NGU3YzI2NzUsIDB4MjJiM2FmZTksIDB4OGE1ZmFhYmMsCi0JMHg0MTE2ZGM3NCwgMHg3MmE2MjQwZiwgMHhhZjk1NDRiZiwgMHhlODhlODA4NiwgMHgzNTI4MTBkMywgMHg1NjM2ODdmNSwKLQkweGFiMzZkN2M4LCAweDY4ZjdiZThlLCAweDA5YmE5YjY4LCAweDE3MGQwYmYzLCAweDBjMTk4YWVmLCAweDcyMzg2OWVmLAotCTB4M2RlZmMzM2IsIDB4YTZhNWFkM2EsIDB4ZTJlZTdjNWMsIDB4MDYzYmE2NmQsIDB4ZmMyNmY5MDUsIDB4Yjg1MmM3N2QsCi0JMHgwYmZhMGNkZSwgMHgyMWRmZWQ5MSwgMHg1OWZlY2ZhMSwgMHg4YTQwZjA3NiwgMHhmZjNkZTQ0ZSwgMHgxMDgzYjZlZiwKLQkweDc4NTIwNzlmLCAweGU3OTMzZTdjLCAweDFlN2M3ODRmLCAweGJkNTQzZjZlLCAweDA5MmJjZWFjLCAweGNiZDRmNzNhLAotCTB4ODFjZmM5YTcsIDB4YjJmNDlhMzgsIDB4YjhkMGFhOTQsIDB4NzYyOWI2OGMsIDB4NGM4ZmFmOGEsIDB4OWU5NjJiYjMsCi0JMHgzYmQzZjdmMywgMHgzZDQxYjY3NCwgMHgzOWZkNTdlNywgMHhkN2I5ZDc4ZiwgMHg5MzhmNzE4NCwgMHg0Y2YzMjNlZiwKLQkweGFkZGY2ODkzLCAweDVjNzlmZmVhLCAweDllZTVmOTEyLCAweGM3MGY4MzBhLCAweGE2MDU3MGE5LCAweDFkZWM3Y2YxLAotCTB4MmNjZjgzNGUsIDB4ZDU0NGZkMDUsIDB4ZGY3Y2JjOGYsIDB4ZDU3ZGQxMjEsIDB4YzdmZDU0YWYsIDB4NzdlNzhiODAsCi0JMHhmN2U1MGRhNywgMHgxN2RjOThiNywgMHhmNzFmMmVkMCwgMHhkMTdhZTk5YiwgMHgzMTlkN2UwOCwgMHhhYjhjNWVkNywKLQkweDYyNTNiYWVlLCAweDVmODQwN2E0LCAweGI4NjlmMmE5LCAweGFkYmU3OWRmLCAweGEzZWUzN2RmLCAweDUzZjgyMGRmLAotCTB4MzBhY2IzOTUsIDB4NThlZDUwZjksIDB4Yzc5NzBhNWUsIDB4ODVlM2I0M2EsIDB4YWFmZmM3NjgsIDB4ZTdjM2NmZjEsCi0JMHg0OTZlM2IwNSwgMHgzZDE4ZTdhNSwgMHhiZDNkZjQzZiwgMHhmZWJjNTIyYiwgMHgwY2E3OTBhYywgMHgzZDgxN2U5NSwKLQkweDI2NmYwODI1LCAweGQ4M2VkMDBiLCAweDdjNmJlY2RlLCAweGRlZDc5NzFhLCAweGI5MDllN2VlLCAweGRmM2M5MmI5LAotCTB4M2ZjY2Y0MjYsIDB4NTJjYjllNGIsIDB4YjVmODc3ZmYsIDB4NWVjM2ZkOTcsIDB4MmNmYmM3YmUsIDB4MmE0MjY0YjUsCi0JMHhhZTVhMzVlMCwgMHhmY2EwOTQwZiwgMHg2MjIxYTdmZCwgMHhkODVkM2FkZCwgMHgzNTc3ODg2YiwgMHg2OTliZDlmNCwKLQkweGU0N2M2MWQ0LCAweDgzZjllNmE5LCAweDZkZTUwNGE2LCAweGM4MGU2MzhhLCAweDMxN2IzZmI0LCAweGM3ZTg4M2M0LAotCTB4NDA5MGJhMmQsIDB4Y2JmYTBkNmQsIDB4ZjE3Y2NlZDAsIDB4NjYyM2Q1MzAsIDB4NmZlMTZiNTYsIDB4M2UyZTljYzIsCi0JMHg4N2M3MjRiZiwgMHgzNjJjZjNmZSwgMHhiMzRjZjI4YSwgMHhiOGFjMTJkYSwgMHhhOTI5YjlkZiwgMHg5NWNhMWY2NSwKLQkweDZjYWM5Mzc3LCAweDUwYmYxZDBhLCAweDc5ZTI2ZjFkLCAweGI0Njk2NWI4LCAweGY5ODU5MmJmLCAweGMzZWFiMzAzLAotCTB4N2ZhZDdlZmQsIDB4MWJjOGIzNzAsIDB4YmMyN2U2ZjUsIDB4N2FlNjZlZGUsIDB4NzI0Y2JmNjUsIDB4YTZmOTg3NWUsCi0JMHhiNjMzMTkxYiwgMHg1OWUwYmQ3MSwgMHg3NTI0ZjNjNiwgMHg3YmU4MmI2ZCwgMHhmZjcxNWFhYywgMHhmMjgwN2QzMywKLQkweDgzNWY1NDUwLCAweDFlZGJhN2ExLCAweDY0Nzk0NjRmLCAweGE5M2Q2ZDRlLCAweDQ4Zjc4NWY2LCAweDk1ZDc4NjVmLAotCTB4NWViOGRiNmMsIDB4YTJjOGQ0ZjIsIDB4YzI0YzM0OGUsIDB4OTNjNDJkN2UsIDB4MmE1ZmU4MjksIDB4M2JjNDY0Y2EsCi0JMHg1N2Q5YTVjMCwgMHhjZjA1ZmFhNiwgMHhmOWQyYmE4YiwgMHgxYzUzMWZmZCwgMHgyZjQ3NzMzYSwgMHg3MWE2YTQ3NSwKLQkweGY2MjQ4ZWJjLCAweDIzYWNmNDZmLCAweGFlOWJkYmVkLCAweDU0OGViOTVjLCAweDgwZDg3YWQ3LCAweGVhOTVjNWYxLAotCTB4NWVhNGNmNDksIDB4ZGU1MTI3YWUsIDB4ZjNjZjViMzEsIDB4OTI2ZGQ5YmIsIDB4ZDk1NWYzMTUsIDB4YzNkZDdjNmQsCi0JMHg3ZjkzNDc1NywgMHg5NThmZTYzZCwgMHgyYTA3ZDQ3NiwgMHhlMTRlY2U5ZCwgMHhlMWZiM2RmOCwgMHg3NWI0MjU5NywKLQkweGFiN2E4ZmUwLCAweGZhZjVkNjE5LCAweDRkZGY0Yjg3LCAweGE0YzU3ZGU3LCAweDYzNGI3M2UwLCAweDNmZTliYmU4LAotCTB4Zjg4MzFiZGUsIDB4YTQ1YTFkN2QsIDB4ZjU0NzZiY2YsIDB4YzE5M2YzOTEsIDB4YTkyYmY1N2MsIDB4ZjkxNjc3OTQsCi0JMHhjM2Q4M2Q2YSwgMHgyNzVlNjBkOCwgMHg4NTViYjlmYywgMHg3MDgyNmJiZSwgMHgzYjlhZjI4NSwgMHgyOWJmZGQ3OCwKLQkweGZhOGUzZGNkLCAweDM2Y2JlYjNmLCAweGE0ZTg5ZjkxLCAweGMwYWJmNDdjLCAweDFhMzc5OGQ3LCAweGJhYzU4YjA4LAotCTB4NTlhMzJmZjQsIDB4OWE5MWQ2MDMsIDB4OTI2ZmRjOTIsIDB4YTc0Y2ZkMWMsIDB4ZjNjMTFjYTAsIDB4NmVmMjdmNTQsCi0JMHg2MjNlYzg1NSwgMHgzY2ViMGJlYSwgMHg4NTgwNDZmOSwgMHg3ZGYwM2JmNiwgMHgzYTA4MzcxMywgMHg4YjNjNDFhNiwKLQkweDMzNDAyNTcxLCAweDAzZDBlYjBkLCAweDNmMjdiZDQ1LCAweGZlNzFlOTlhLCAweDM1ZWUwYzQ3LCAweGE5N2Q2M2Q3LAotCTB4NDE1OGVmNWQsIDB4NGZiMGUwNDIsIDB4Nzc1OWVkODksIDB4NWViYzljOTIsIDB4ZDQ5ZmQ2YWUsIDB4ZjU2Zjc5YmEsCi0JMHg5M2RmMDkyNywgMHhlYThmZjljZiwgMHg5Y2ZmNjI0ZCwgMHg3NzYyNjc1YSwgMHhiNWY4YThiYSwgMHg2MTllYjhhYSwKLQkweDgzMmMzYWZjLCAweGQyZmFlYjVkLCAweGQ0MjM5MmRmLCAweDRjMjk0YzdmLCAweDdhZGE2N2Y4LCAweDU3YmM5YWUzLAotCTB4ZGVmZjRmODgsIDB4YTk2ZGUzM2EsIDB4MWVmYjFmZWMsIDB4MGFkYzA3YTYsIDB4MGMzMjJlZmYsIDB4ZTcwOWExZWUsCi0JMHhmYWVlMjk5MywgMHg5MWM0YmZlZiwgMHgyNmViNmQ5ZCwgMHgxNWQ5ZDg3YiwgMHg3Zjk0MDJjNSwgMHhmNzc5ZTBlYywKLQkweDUwM2RmZTM2LCAweDQ5NmZjNDI3LCAweDdlNzY3NjIxLCAweDU3Nzc5ZjBhLCAweGZmZjExOTViLCAweDE4YThjMGI2LAotCTB4MGE1OGZmMWMsIDB4MjNlYWM3YTcsIDB4YmZhMmE2ZDMsIDB4NjllODBkZWYsIDB4M2M2MzBlYmYsIDB4ZDAxNmRiMWUsCi0JMHg3MmRmYTExNywgMHg5YTkyZTkwZCwgMHhkMTJlODkxYSwgMHhjYjg1M2VkYywgMHg3ZjYxMjFkMSwgMHhiYTcyYTUwZiwKLQkweGUzYzg3ZDk1LCAweDVlNTJjZjMwLCAweGJkMGFiMTVmLCAweDc1ZTdhOWUwLCAweGM5OTk3ZGY1LCAweDRmNGY5YTkyLAotCTB4ZDk3ZjU0ODksIDB4NjM3NjQ1ZDEsIDB4ZjY4OTQyZDYsIDB4ZmFkYjdlZDUsIDB4OTE2OTEzY2IsIDB4NWIzM2YxZWIsCi0JMHhiZmFlNDQ0ZiwgMHhmZDIxOGY5NCwgMHgzYjNlNWJkOSwgMHg0YjdkOGYzYywgMHgwZjYzYzg5YSwgMHg1ZmVjNzllNiwKLQkweGJkNjk1YWE1LCAweDI1MjFmYWI2LCAweGZhZWFiMmM4LCAweGJlMWQyMWFmLCAweDg3NDA4YjQ4LCAweDVjN2YzODZiLAotCTB4ZGY1Yjc3ZmEsIDB4N2Q1MjMwZmQsIDB4NmZjZTFhZjcsIDB4ZTE2ZWZlNGIsIDB4YTdlOTIyNTcsIDB4ZjNiZjM4NmIsCi0JMHhmZDdmOWUzYiwgMHg4YWZmM2M3NywgMHg3N2ZmMThlZiwgMHhmZjk4NDRhNSwgMHgwMWZkZDVmZiwgMHhmMGZmZjVlMSwKLQkweGZiZTEwMmZkLCAweGNjMGVhMjAwLCAweDg3YmRlMmY3LCAweDdlNWRiNWE1LCAweGRiNzE0ZDY4LCAweDA3YTA0YmE3LAotCTB4OTgyZjA5ZjUsIDB4MTg0ZThlZDAsIDB4YWI2MWViYzEsIDB4MWI3Yzk5NDcsIDB4MDFiZWUwYTUsIDB4ODMyYzVmMTUsCi0JMHg0MWQ2MTFjNywgMHhjMDc2YmNlNywgMHgzMDMzOTY3MywgMHhiMmY5OGVjYSwgMHhlMGUyOGMxMSwgMHg4YmFmMzM0ZSwKLQkweDZkMzViZDMxLCAweGI3YzNlZDBhLCAweDdlMGVkZGE2LCAweGRmMmY1MzQ5LCAweDE3NGU2ZDMzLCAweDc2MmY2MTcxLAotCTB4Yzk0NjY0NjQsIDB4YWNlZmE4NjcsIDB4ZDVhNWZiNjEsIDB4NmFlYTI5ZDYsIDB4MGZiZTU2ZDYsIDB4YjQ5NWU5OTcsCi0JMHg0YWJkZTlkYiwgMHhmMTQzZmExYSwgMHgzOGY1Zjg3YiwgMHgyNDZlNzMzZiwgMHhkYjljOTRiOCwgMHg3MjU0MWUyOSwKLQkweDQ0MjdiZTEwLCAweDZlMzZkN2ZkLCAweGE1ZTYwZTQwLCAweDYyMTdlMDZkLCAweGFjNzFmMDVkLCAweDZiM2M1MjBmLAotCTB4ZmJlYTcxYTUsIDB4YmY4N2Q4N2UsIDB4OTMwMzA5ZWYsIDB4YmRlYjllYjAsIDB4NjI3M2VmOWUsIDB4NWQ0ZDZhOTYsCi0JMHg3ZmMxYTBlZiwgMHg3NTQ0YWU3MiwgMHg4YzBmYjkzZCwgMHgwZmYzYTQzZiwgMHgzMDQ3M2U3YSwgMHhkMDc3ZTAzMSwKLQkweDFiZDUyYjM2LCAweDFmZjExYWRmLCAweDI2YmJmYzc5LCAweGNmYmJlNzVlLCAweGM2ZWM4N2NhLCAweGI4ZTAxOWI4LAotCTB4ZjEyMTY3NmYsIDB4MjM1ZGNjZWYsIDB4ZjhjMGE4M2UsIDB4MmYzZjNmYTMsIDB4Mjk1YzQ3YTQsIDB4NDU0NzA1ZjIsCi0JMHgxN2NkNDNiZSwgMHg2M2FkZjVhOCwgMHgxYzcyNGYyMiwgMHg3NmQwMmZmMywgMHg1YTA0M2U2MCwgMHg1YWVlOGZhNSwKLQkweDRmYTUyN2RiLCAweDg0ZjJmZDA0LCAweGRlNDNmM2M0LCAweDU0M2YzYzQzLCAweDBiZjQ3NDY4LCAweGI4Mzk0ZmRkLAotCTB4YjlhYmU3MGYsIDB4NTBiZjVlN2UsIDB4YzU5YjNkZjMsIDB4MjA3ZjBhN2EsIDB4MmZjMGEzZmIsIDB4NmMxYzZjMmQsCi0JMHhkODVmM2I0NCwgMHg2ZDhkMTk5OCwgMHhjM2E3ZDNiZSwgMHhjYThjZWY1MiwgMHg3ZTk1M2FhZCwgMHhiODY4Zjg5MSwKLQkweGZkZWFlNzU4LCAweDdiZGY1NDVkLCAweGZmZWVhYzM1LCAweDNmN2MzZWMzLCAweGM3ZTBiNzQzLCAweGQ0NjFmNjFmLAotCTB4YmY1NzJmYmYsIDB4ZjhjN2RkMGEsIDB4NTIzOTU2OTEsIDB4YzQxNjY5NWQsIDB4ZGNlNzA4YzUsIDB4OGFiNzBlMjYsCi0JMHhhNTdlNTllZiwgMHg2MjczZGYwYywgMHhiNjIzNTc2ZiwgMHg2NTM5ZDUwNSwgMHgzOWFmNzc5NCwgMHg5YmZlODhkNywKLQkweGJlZjc2MmU3LCAweDY2NWYyOTViLCAweDk4OWUzMDU0LCAweGJiY2RhMWRkLCAweGZlNzgzMmQ5LCAweDdmODk1NWZkLAotCTB4YWIxZGU5YWYsIDB4NzBiOGY4YTcsIDB4YzdmODllYWMsIDB4ZjE0Y2NiMzYsIDB4NjRjMGNkYWIsIDB4NzBhN2Y2MGIsCi0JMHgzY2EwYThiZiwgMHg2Y2ZiMGNiMSwgMHg4M2Y5MDI1YSwgMHg4NDk1ZmIwNSwgMHg3OTgyODNmOSwgMHhhNWQ4ZGIzMCwKLQkweDJiYTc4ODQ5LCAweDdjZDU1OWQ1LCAweDczOTMxNmRhLCAweGVmZjNkMjNhLCAweDFlZDZiM2FkLCAweDRkZmI0MjNjLAotCTB4NzhhOTc1ZDUsIDB4YmRhNWViNTEsIDB4N2RkNTU5ZDUsIDB4MmZmMjllMGYsIDB4M2MzNGZiMzUsIDB4OTgzMWFlZmEsCi0JMHg3OWRjMmM3ZiwgMHg1ZmY2MjhjMiwgMHg4MjczNTM1YSwgMHgxZGMyZDg3NSwgMHhhYWZlYThlNywgMHhmNTNkNWJkNiwKLQkweDg2YWZjOGU3LCAweDkyOWNlOGU3LCAweGZkNzljYjZkLCAweDgxYzAzYjc1LCAweGRiYWMyYjZkLCAweDA2ZmNmMDA5LAotCTB4MWI2ZDhkZDYsIDB4YmZhZjFiYWMsIDB4NWE4ZjNjYjEsIDB4YjUwNzcyZmYsIDB4NTMxNzk2YmIsIDB4OTNlYzA4NWIsCi0JMHhlZGJhYzM2NiwgMHgyZWRiYWEzOSwgMHhkZjYzZDNlZiwgMHgzNmY1ZDUyNCwgMHgyODk1YWVjYiwgMHgzZjc1MjFlZiwKLQkweGZkZDc4N2VhLCAweGFmOWU2OGU0LCAweGQwMzdlY2YxLCAweDgzOWUwYzc3LCAweDI1ZGZkMjI2LCAweDMxYjM3MzZkLAotCTB4YjBlYWY4M2UsIDB4YWVlMTFiM2IsIDB4MDg1YmJhYzMsIDB4M2E3NTljNWYsIDB4YzY2ZTc4Y2MsIDB4OGNjMzk3NTksCi0JMHhmNmMyYjZmNSwgMHgwZmRjNDZkMywgMHgxODBmYTc1MywgMHg5MDA2MWYzMSwgMHg0NTk2ZTNhNywgMHg3YzczYjZjZiwKLQkweDg5NWI2ZmRmLCAweGM1N2JmMTE5LCAweGZmZWI1OGZhLCAweDNkZmQ4ZmFmLCAweGEwYWNiMWY1LCAweDI5MWU5MjdjLAotCTB4MWI5Y2U5NzAsIDB4MzRlZmRkYjEsIDB4MTNkMTBmY2YsIDB4OWViYzVkYWIsIDB4NWY3ZmJhYjIsIDB4YWU3NWMzOTIsCi0JMHgyMTk1MDliZSwgMHhmMzk0MzVmMywgMHg2YzZkODVmYywgMHhmNWU4NzM3ZiwgMHgxZTA2MTkyNSwgMHg0MjM5ZTA0NywKLQkweDQxZmZkZTExLCAweDhlMzVkZDFmLCAweGY0MWZkZDVmLCAweDlkNTdlMDg5LCAweGVmYTI2NDNkLCAweDJjNzdkYTQ5LAotCTB4YzQxOGVlYzgsIDB4MWYzNDNmMDUsIDB4MzJiY2JhYjcsIDB4ZjdjZmJmMWIsIDB4Yjk2MjhkMWUsIDB4YzlhNzVmM2MsCi0JMHhiYWIwYjFjNywgMHhiOTc5NmY1YywgMHhhNzNhZTU5OSwgMHg3NTBiZjY5OSwgMHgwZWRkYTE2NSwgMHg3ZDMxOWZjZiwKLQkweGViYjcxNjU3LCAweDllN2U3NGNlLCAweDE1OWQzNzgzLCAweGI5ZjUxZWIzLCAweDdiZGYzM2RmLCAweDhjZmM2MWZkLAotCTB4MGJkOTFkNzIsIDB4NTA1NzRlYjUsIDB4ODFjYjY3YWUsIDB4MTk5NjBiM2YsIDB4MmI5ZjU0N2MsIDB4ZmJhMDlmZDcsCi0JMHhiMDZjNmUyMiwgMHg5ZjIzYTQxNiwgMHhiNDY4M2YxZiwgMHgzYzJkNWU2MiwgMHg3ZjI4ZTYzZiwgMHgzYzJmYTlhMSwKLQkweDFjOTFhOGVmLCAweGQ1MmJhY2I4LCAweGUwN2RkNGYxLCAweDQ3ZGI1YWIzLCAweDA4NmRiZTYzLCAweDA1MWE2ZTZiLAotCTB4YWZlOTBmY2YsIDB4ZTlmZWUyYjMsIDB4YmUzY2Y1OWUsIDB4Zjg0MGJiZmYsIDB4MzY3OWUxMzksIDB4NGJmNDMzZTQsCi0JMHg3MWYwZjNjMiwgMHhlMjBmOWNlOSwgMHg5Y2ZkYjlkMiwgMHgwYTJkYjQ4MCwgMHgxNzNlYTNjZSwgMHhkMmYzM2ZjZSwKLQkweGYwYmY3NWI1LCAweGZkYzU1M2ZiLCAweGQ1ODJmMjg2LCAweDEzYmU5MWZkLCAweDQ5ZWQwYzc0LCAweGE5YTk3OTQzLAotCTB4Mzk3Y2M4N2YsIDB4ZGI3ZjdjZTksIDB4NGMxZjU4MTMsIDB4ZjIwZmFkMGMsIDB4NWQ3ODYwM2EsIDB4ODU3M2Q1NTAsCi0JMHg4MzFkN2ZlZCwgMHhmYTA3NWVmOCwgMHgyNzk4ZWQxYSwgMHgwYTBmZDc5NSwgMHg4ZmQ5MjhkZiwgMHhhNzA4MjM3YSwKLQkweDdhOTUzZmQ4LCAweDA0ZWM3YmY5LCAweDcwYzVkN2M2LCAweGE3Nzc5Y2ZmLCAweDgyYjlmOTQ0LCAweDhhZWU1ZjA5LAotCTB4ODE3MzNlODEsIDB4NzZiZDQzZGQsIDB4MGIyYWZmYjAsIDB4ZmEwOWEzZWEsIDB4YzdhZWZjMjIsIDB4ZDcyZTkyZTMsCi0JMHgzNDllYjA5OSwgMHg3MWVhZWRmNSwgMHhlMTQxOWRmOCwgMHgyMzBlNDMxZCwgMHgzMGE4ZWU1ZCwgMHhkNTQwZmVkMCwKLQkweDdiN2Q0ZGVlLCAweDdmN2UxOGZhLCAweGJjNjhjYWUzLCAweGNjMzkyNzlmLCAweDJmMmY1ZTBhLCAweGI3ZTNlYmM1LAotCTB4Y2U5MzMxZjgsIDB4YTA3NDIyMjYsIDB4NGYwNzAzY2YsIDB4YjY2ZTUxZWEsIDB4MTgyNWRjOTgsIDB4MTE0ZTE3M2YsCi0JMHg2ZTBhYTY3NSwgMHg5YjY4ZWZhNywgMHhlN2U0NjA2MiwgMHhlZWU2ZWQ2OSwgMHgxZjI4YWZjYywgMHg0ODU2ZGRkNCwKLQkweGVlM2IyM2Y1LCAweGI0MTQxODdmLCAweGMxM2I4NTM3LCAweDNiNWVjNThlLCAweGRkMmYzNjNiLCAweDExYmNmODRhLAotCTB4NjNjMjE4ZWMsIDB4ZjRlYmMyOWIsIDB4MTFjZmY0ZTEsIDB4MmVjZGVmZjQsIDB4ZDE4N2E2ZjUsIDB4MmIzOWUwZmUsCi0JMHg2YTUyOWYyOCwgMHg2MGFlM2I0ZiwgMHhmYTM4NjdkZSwgMHhjMjFlMTJlYiwgMHgzNWZmMmJkMiwgMHhkMDk2ZmQwYiwKLQkweDRlYjczZjhiLCAweGZiYWY3YmYwLCAweDM5ZmY1YWE3LCAweGY0ZTZhNjc1LCAweDYzNzUxZGZmLCAweGViNTJmZTM1LAotCTB4NzZiYzZhNGQsIDB4ZGE4MWYwNDYsIDB4M2ZlZDE1OWUsIDB4MWEwMzdkZmMsIDB4MzdkZjg4ZDcsIDB4ZGY3ZjIyZDgsCi0JMHhjZTg1YmIzMCwgMHg2ZmJmNTEyOSwgMHgyNTY0NmJkOCwgMHgzZjcxMTM1YiwgMHhjOWRlZjhhZCwgMHhhNGZjODUzNywKLQkweGJlZmY0ZmJkLCAweGY4ODkxN2YxLCAweDI3ODQ5M2JkLCAweDNjM2Q4MDZiLCAweDNkNWU3NjRjLCAweGVkYWVhZWFmLAotCTB4NmQ2ZjllNzMsIDB4NmJjM2ZiZTEsIDB4ZmI5ZjIzNWIsIDB4NzdkYTAzNzIsIDB4MjcyOGVmNzgsIDB4MmI1MWJkMjMsCi0JMHhkOThlZGJmNiwgMHg5NzQ0ZWEyNiwgMHhlYmY3OTZmMywgMHgxZTk2ZjM0MywgMHhlZWE0OTAyNSwgMHhiYzUxZjVlMywKLQkweGY2NjNjZGE3LCAweDUzYWNiNzk2LCAweDk2YWZjZmJmLCAweGFlMWY2ODFjLCAweDU5YjcwZmI0LCAweDM1ZWRkN2VjLAotCTB4ZTZmY2U5OGYsIDB4NzllMWI5N2QsIDB4YjVkM2Y3Y2MsIDB4Njk5MzljNzUsIDB4NzRmZjVhNTYsIDB4MzZlNzQ0YjcsCi0JMHgxYWFlNzQ5OSwgMHg4NmZmYjdkYSwgMHhjZmI0OGQ2NCwgMHg4NzYxMGJmYiwgMHhjODNhOGJjNiwgMHgzZjljOGRjZiwKLQkweDQ0OTM3ZTdlLCAweDc3ZTBkZmRmLCAweDlmZjc0ODc4LCAweGMzYmZjMWJmLCAweGZmMDE3OWY5LCAweDdiYWQ0NzBlLAotCTB4NWNkN2RmYTgsIDB4ZDA3YmFjMWYsIDB4NzdlYTc3ZjcsIDB4MzY3N2VhMzksIDB4NTM5ZDc3ZWEsIDB4YjlkMzQ3ZDYsCi0JMHg1YTE4OGZjNSwgMHhlYmRmYjk1MiwgMHgzYTdjYmUyNSwgMHhlOGZkZDE5ZCwgMHg0OTFmNTYyOCwgMHg5N2E2OGY1ZSwKLQkweDg0NWU5ZDNjLCAweGRjNzlhZWUzLCAweDQyM2QyOTdiLCAweGUzMGMzYmRjLCAweDIxOGY3ODQ4LCAweDNjODVlMjAzLAotCTB4MzA1ZTI5MTYsIDB4ZTI2OTE0NjUsIDB4Yzc4N2VhMDUsIDB4ZWVhYWQ3MGIsIDB4Y2ZjMGE0ZjEsIDB4NmRmNzVjMzUsCi0JMHg2YmM2ZmM5MSwgMHhkZmViZmYzOCwgMHg0NWFmZmNmMSwgMHg3MzJhZGJhMiwgMHgxZjE3ZjNlNCwgMHhiZTg0OTBjYywKLQkweGNlMTc5ZWQ3LCAweGM5MmY3YzdhLCAweGE0OTM3YWVkLCAweGQ1MzM3MDdjLCAweDRmNTQwZGQzLCAweDUzNmFmNTU3LAotCTB4YmM3ZjlmMmMsIDB4NmRhOWE3YzgsIDB4MGM5YjY4OTUsIDB4NGI2NWYzOTEsIDB4NjQ2N2ZkYzQsIDB4OTNlNDM4ZTcsCi0JMHhmMzZhMmY4MSwgMHhiNDViODM5NywgMHg1YjFiY2JmOSwgMHgwYzg4ZTdiNSwgMHgwOWNmNmJmMSwgMHgzZGFmZGMyOSwKLQkweGEwMjhhNjNmLCAweGY4NjYzZjNkLCAweDMxZjllZDUxLCAweGU3YjQzYTIzLCAweDk5ZmNkY2M3LCAweDViOThmY2Y2LAotCTB4Y2JmOWI0YmEsIDB4MWVkYzJmNWIsIDB4OGZhNzFkZjYsIDB4OWMwOTQ3OWYsIDB4OTk1Y2ZhMWIsIDB4YjlkODVlNjksCi0JMHg3M2IwYmEzNSwgMHhjZWMzYTI2YiwgMHgxZjNiMDlhZCwgMHhlMzliY2M0NSwgMHg3ZTc2MTNlZCwgMHgzNjdkNzY4ZCwKLQkweGJhMGRjN2FjLCAweGVmZGM3YWZhLCAweDFlYTIyOGZhLCAweGNmOGNjZmQ3LCAweGRmZGU1MTNkLCAweGZhOWI3ZThjLAotCTB4MDk3ZmY1M2QsIDB4ZTE5MTNiM2UsIDB4NzFmNDgxNWUsIDB4ODc1YjFjYWYsIDB4MjJiMWQ1N2MsIDB4MmVmMzBiMmEsCi0JMHg3MjY5OTVlZSwgMHhmYjgzZjAyMiwgMHhhN2JlODk1MSwgMHg0Njk5NWQyZiwgMHgzNWU2N2JmYiwgMHhhOTNmMjEwYywKLQkweDRmYzkzOTgwLCAweDExNjc2NTlhLCAweDljZDg3OWNmLCAweDNkZWNmNWMxLCAweDhjNjYwNmY1LCAweDQ2Mjk5N2M3LAotCTB4MzNkMGE4MWQsIDB4YzM1YjEyNGQsIDB4MjI2NThkZWQsIDB4ZTMzNTYxZjAsIDB4ZmFiYjU4N2MsIDB4YmRkNTFjNzAsCi0JMHhjODU5ZGQ4NSwgMHhlYmFhYzE1MSwgMHgwZTc5ZDAxNywgMHhhOGJkZTdlMSwgMHhjNjIzYzY3NiwgMHg2MzE2YjBkNSwKLQkweDY4YmJjYzFhLCAweDQ3YzkzYjZkLCAweDFlMzA3OWY4LCAweGVhMWNmNmI2LCAweGIwOTZkYWUxLCAweDdkYjdmNWViLAotCTB4MWZmN2Y4Y2EsIDB4M2M4YmY0NDYsIDB4MmZmYmRhYWQsIDB4OTliYTg4NjQsIDB4N2U1MDM5ODMsIDB4OWFjN2Y3ZGMsCi0JMHgxNTJjY2ZkMCwgMHg1NmJiOTlmOCwgMHg3MDlkNjJiMiwgMHhkMjdiNDM1ZSwgMHhiNzlmZDA1ZCwgMHg0YmI4YTY1ZiwKLQkweDcxZWIwZmM1LCAweDNhMjBjZjRlLCAweGZlZmNmZDU3LCAweGNmYTNmMjVjLCAweDhlMGE0YTJiLCAweGI4ZjFjNzczLAotCTB4ODdiYmQyNDEsIDB4NzY1OWY1ZTMsIDB4ZTczYzcwZjcsIDB4NThjM2ViYWMsIDB4OWQ4N2Y2ZmMsIDB4ZGY5MzIwYjgsCi0JMHgzZTUwYmUwMCwgMHg5NjU2NmZmOSwgMHg5ZGVmOWExZiwgMHg2MzI2YjA2YiwgMHhlZWNiYzViZSwgMHg1Mzc4YTU0ZCwKLQkweDdlMmFiZmM0LCAweDY3ODgyNjNjLCAweGYxMGZiMGUzLCAweDc0OWY1ZjJhLCAweDkxZmEyMjQ5LCAweGZmMDJlYjY5LAotCTB4N2UwM2RmMDgsIDB4MjZiM2M1MTAsIDB4N2U4MTVhNjYsIDB4MzlhNTY5ZDAsIDB4ZDc2MDVkMTksIDB4MmZmMjA2NDMsCi0JMHg0MDkyZDllZSwgMHgwZDNkYzVmZSwgMHgxZjNjNDY2NSwgMHgwOTZkOWVlMSwgMHg3OTk2OWZiNCwgMHhiZTMwNDc5ZCwKLQkweGEyNzllOTU1LCAweDJhNWY3MGExLCAweDRiNGY3YmNjLCAweGQyZDY0MzhlLCAweGQxMzdlNGYxLCAweDA5ZDM1MTcxLAotCTB4N2IyNzdlOTUsIDB4NDhjOWRmYTEsIDB4NjliYTAzZjQsIDB4NDMyMWZmYWUsIDB4NmU4MjA5ZjgsIDB4N2QzYjQxZWMsCi0JMHg2NGIxNTdlNywgMHhmZmU2MmU2ZiwgMHhlOTliZDdjZSwgMHhjNjdhMmJmNywgMHgzN2FlNWUwNSwgMHhjNGQyNmYyYiwKLQkweDJlN2RlNTNmLCAweGJlNzQ3NWM3LCAweDIyZGFmNzc3LCAweGRkMzg1ZmEyLCAweGRlNjdmZmNhLCAweDhhZmVmYzcwLAotCTB4YTE5NjNlZmQsIDB4MWZhYjMxZmYsIDB4YzYzYjczOWIsIDB4Yjc5NzEyYzksIDB4OTZjNmFiNTksIDB4YTVmM2JmYTMsCi0JMHg4YjZmY2ZkMCwgMHhjNjMwZTkzOCwgMHhiZmQ3ZTA0OSwgMHhmNDEyNzE4YiwgMHhkMjcxMTNkZiwgMHg0MTI3MTgwNywKLQkweDQ5YzYyMWZiLCAweGU3MTQ5ZWQwLCAweDA3NzJhYTA1LCAweGZiN2M0MDhjLCAweGFmYjc5MGI1LCAweDYzNzhkNDMzLAotCTB4ZDdlNjJhNjksIDB4ZGRlN2ZmY2EsIDB4NWYxNTlkMjIsIDB4YTM0OWUzZjUsIDB4ZWM5YjE5MzMsIDB4ZDNkN2ZhZDQsCi0JMHhlYmZkNjlhNywgMHg0Yzc1ODMwZSwgMHhkNTgxZGEyYSwgMHg4ZjcwNWViYywgMHg3OGNkNjZlYiwgMHg5ODhjNTdhNiwKLQkweDg1Nzk2MGY3LCAweDhmNjRlYmMxLCAweDNkZTYyMzE0LCAweDZiYjA0YzY2LCAweDk0ZDlkZmM2LCAweDMyZGJlOWFlLAotCTB4OTRmNzVhMTUsIDB4ZWI5YTdlZjIsIDB4ZDQwYzU3NzcsIDB4MDA1ZWU3ZjQsIDB4NWRmOTBjYzcsIDB4NTlmOTI2MjksCi0JMHhjNjI2ZTIyYSwgMHhhYzVkMzk4YSwgMHhmNTk3ZWM3YywgMHgwMDFlNTNjMywgMHg2ODNjYmY3OCwgMHhmNGUxZmJhMCwKLQkweGI5NWFlOTUwLCAweGVlN2NhNjVlLCAweGYzMTJmNWJjLCAweDliMjc4ODAyLCAweDdkN2M5MWU3LCAweGNlOTYzNDdlLAotCTB4NTJkYzY5OTEsIDB4ZjQzMTU2ZjgsIDB4ZDAzMTZjNGYsIDB4MGQxM2IyZmUsIDB4N2NmMTQ3ZjYsIDB4OTI1YjEzZWIsCi0JMHgzZGJiZjBlMiwgMHhmY2NjYTM3NywgMHhhNGFkNzdhNCwgMHhjYjc5ZDU3NywgMHhlZmQwNTYxYSwgMHg0NWY1Y2MyNiwKLQkweGNjMGY1MDM5LCAweDU2N2RlM2RkLCAweDRkZGZhM2VkLCAweDRlNTA2NjViLCAweGJmM2VjODhlLCAweDEyNzNmNDQ0LAotCTB4Mjk5YjM3N2UsIDB4ODE5OWZlNGYsIDB4OTJhN2YxNzksIDB4Yjg3MDc1ZTYsIDB4MDM1ODkzM2UsIDB4OGY5YjRmZjYsCi0JMHhlMDAwNzgwZCwgMHhiOWIxMzMzOCwgMHg5NTdlODc0YSwgMHhmNDg5MzA3YywgMHg0MzMyMmJlNywgMHg2MjU4YWRiZSwKLQkweDE3ODdmM2EwLCAweGM0NmYyN2JlLCAweGQyMGE5MzNlLCAweGZhNjViZDM5LCAweDM5YjYwZjdkLCAweDVkNjdlNjhhLAotCTB4NmUzMDIxYzAsIDB4OWVhMjJmZTksIDB4NWVmMjIzNWYsIDB4NjBmNWZmZDQsIDB4OWZjMTFhZGYsIDB4MjU5ZjQ3YzgsCi0JMHgwMTAyNjczMCwgMHg3ZjBmZjNjYiwgMHg3NTQ0OWMzYSwgMHg3ZDNlMjA5ZiwgMHhmZmVlYjhmOSwgMHg2NGM2YmJkMCwKLQkweDU0ZmVmZDAyLCAweGZkMjdjYmU1LCAweGM5MTI2MGY2LCAweDRmZGUzODU1LCAweGYyZmViOTFhLCAweDQxNDgxY2EyLAotCTB4MzM5NDE5YmQsIDB4M2NkNWZkZmUsIDB4NDFkOTIzODMsIDB4MWE2ODZiN2EsIDB4NmI5M2FkZWEsIDB4NjQ2Nzk0MGQsCi0JMHhhZjFjNjc3YSwgMHg3YzQyYmRjYiwgMHhhNGU3YmVhYywgMHhmMDgzMTk1ZSwgMHhhMWNhNmM5ZCwgMHg1OWVmMGNlZiwKLQkweDQzZmQ5MzJiLCAweDdkZTNlM2ZlLCAweDk3MWZmZjljLCAweDdiYmYxOGRkLCAweGM2MzcyNDliLCAweDczN2NlMWVmLAotCTB4ZjRlMTkyZGYsIDB4MTFiMzA0N2IsIDB4ZWE3YTIzMjcsIDB4YmM2OWIzODEsIDB4MTdmNmExMGUsIDB4MDdiZmU0ZWQsCi0JMHhlODc2ODZjMCwgMHg1ZDBlMGRhNywgMHg5ZjdmMDM0NywgMHg0ZTczNThiYiwgMHhkZmRmNGQ3OSwgMHg5YzIzYzcxZCwKLQkweDE3ZWZlZmNlLCAweDljZTlkZjhmLCAweDlmMTMyMjNlLCAweDNjZGJlZTlkLCAweGY5ZTgxNTJjLCAweGIwZDc2ZTg1LAotCTB4ZjlmZmEwMDcsIDB4N2EyN2VmNDQsIDB4ZmJiNDZmYTQsIDB4NjJlYmM0M2UsIDB4ZmMyY2RhZGQsIDB4ZWRiM2JhNmUsCi0JMHg4NjZmNDdlMywgMHhiMmY0ZmVlNywgMHhiZTYyNDFjMSwgMHhjN2Y0ODkyYywgMHhiMzBiY2RhMiwgMHgyMWJiZTliZiwKLQkweDc4N2RmY2M2LCAweDI2OTlkMWRlLCAweDJiMTczZTAxLCAweDlmMzA2MzJkLCAweDg0Yjk5ZjMwLCAweDUxZjhlMjNkLAotCTB4ODZiY2YwYjYsIDB4NzNjZjFkNzUsIDB4YmIxNDVjN2MsIDB4NzliNGUzMDYsIDB4OGY4Yzc5NjEsIDB4OGQ4M2Y3YzUsCi0JMHg2ZmM2OTI5OSwgMHhmNWM5OTgzOCwgMHhlNzFkM2NkNywgMHgzOGI3ODg2ZiwgMHhiMWE2MzFiZiwgMHg1ZWRlYWEwMywKLQkweDIyMGZiZjhjLCAweGFhODBlZDA3LCAweDMzNTg2YmI3LCAweGIzZmQ2YjlkLCAweGZmMzRiZWNjLCAweGJmNDdjOTQyLAotCTB4Mjc4NzUyMjMsIDB4MmFmOGMzNTQsIDB4NmI2MzhmMmIsIDB4NTFmMjhjNWUsIDB4ZTU4MGFhOWMsIDB4OGUwZmYxMGIsCi0JMHhlNzgxM2VhMSwgMHg3ZTVmMTkxNiwgMHgwMTc3ZDkwYSwgMHg4Njc1ZjAwYiwgMHhjMTkzZmI4ZCwgMHhlOWM4MTU1NywKLQkweGFjYWE3ZjY5LCAweDM0NmMxYjFiLCAweGZiODFjMWJmLCAweDc5MDgxNzE5LCAweDdjOTY2ZGFkLCAweDI1MDc1ZTdlLAotCTB4Y2M1ZjNhM2IsIDB4ZDFkODVmMzMsIDB4YzNkNGZiNzAsIDB4YTNkOTg1MmUsIDB4OTc3NjYxZjksIDB4MmNlZDZiMzUsCi0JMHg3OWU3NGJjMCwgMHhjMzg2ZjBhYiwgMHgyNTg5OGFlOSwgMHhlNjZhMmMzYywgMHhkY2FiM2VmYiwgMHgwODkzN2RiZSwKLQkweDE0MDFjOTZlLCAweDAyY2YwMWVkLCAweDgwOTUxYWU2LCAweGM3OTE3OGViLCAweDg1ZjBlMWU5LCAweGJjMDdhYmFmLAotCTB4NzBlMTlkNjIsIDB4ZDFjZTM5NTcsIDB4NWIzNWU1ZjcsIDB4Zjg1N2MyMjQsIDB4ODQ3YTU0M2EsIDB4NWQyYTcxZmIsCi0JMHhiZjFjYmNhYSwgMHhkMTEyNmQ1NSwgMHhmZjY1ZDRmMywgMHg1MGZlZDE5MCwgMHgwYjU4NmY5NSwgMHg3OWU0MmZmYywKLQkweDVkNjA4Zjk1LCAweDJkYmY1MDkzLCAweDM4ZmEwNzU4LCAweDJkM2YyN2E3LCAweGM4NzEyZDYyLCAweGRmY2M3NTM3LAotCTB4ZDNmNzI1ODgsIDB4NDczYjk2ZmUsIDB4NGU3OWUwZTQsIDB4YTlkY2U5ODcsIDB4NTczZjliMGEsIDB4ZWNhODgwOTcsCi0JMHg5NmZjYjQ3YywgMHhlMzg3OWYyMCwgMHhiZGY0NGFmYiwgMHg1MTMxZmM1YSwgMHgwMGU3YTA2NywgMHg5MDVmZjM1ZiwKLQkweDkwOWZmYmU5LCAweGY2M2UyMjcxLCAweDdiNTU3YzkyLCAweDNmYWM0NmJkLCAweGI5ZjllYjU3LCAweGQzODI1NzcyLAotCTB4Y2JiZmU3YTMsIDB4MDU3ODQ1NzQsIDB4ZGMzNWFmM2UsIDB4N2Y1YTU5ZDEsIDB4ZTU3N2U4MzksIDB4NWJkMjQ3YzYsCi0JMHgwOThmM2FlYSwgMHg3YjQ1NzMzZCwgMHhjNWRjNzdhZiwgMHg0OTI3ZGVjOCwgMHg0ZGU5YWY5OCwgMHgzYjA5NTc3ZiwKLQkweDNlZWQxZjNmLCAweDdmYWM5ZmI0LCAweDNjNmJjZTk1LCAweDNhNTVlZWI1LCAweGYyZjhkNTlmLCAweGYwYjdkYTdjLAotCTB4OGY3OWZhYzksIDB4N2M0ZmVmZTIsIDB4ZDkxZTY1YjIsIDB4YWI0ZjA1ZjksIDB4MGM2ZGRlNzYsIDB4ZDZjYTFmZjUsCi0JMHg1ZmVlN2RjZiwgMHgzNDVmNmY5MCwgMHg2YWI5NWQ1MywgMHg0MWM0NWI4ZiwgMHg5YzYxNTdhMCwgMHg1MWViOWViMiwKLQkweGQ1ZWI4ZWI2LCAweDA3MGY2ODA1LCAweDBlYmMzZDkxLCAweGU1NWZkZGM3LCAweDNmZjkwZWJlLCAweGM5ZDkzYWU0LAotCTB4N2ZiOWU3ZmIsIDB4YmRlNjEzYjUsIDB4ODcxOGE1ZmYsIDB4ZjU2Yzk2OTcsIDB4ZDViNGJjZjMsIDB4ZjZiMGY2OGYsCi0JMHhkMzhlMGZkZSwgMHgwN2M5NGJlZiwgMHg2YTgxZmJkZiwgMHgxMzllMTlmZiwgMHg0MmNlMmVlNSwgMHhiZjc2MTMzOSwKLQkweDY1OThkZTU2LCAweGVjMjIzYjQ1LCAweGRmMWIzZmM0LCAweGM5YmUyMGY3LCAweGZlZjhlMmJmLCAweGY5ZTM4OWE4LAotCTB4ZWYxY2I1ZTMsIDB4NTFmYTViOGQsIDB4NTM1MWZhZmMsIDB4M2VhYmYyM2YsIDB4Zjg0YjkyZGEsIDB4ZjgwMzVjYWUsCi0JMHhkMTVhYmYyNiwgMHg4MDRkNTVmYSwgMHgxMDFmOGM2ZiwgMHgzZGQ3MDBkZiwgMHg2ZjgxMTQ3YiwgMHgxMzc3YzcwNywKLQkweGNiNWIzM2M3LCAweDc4MWVjYWRiLCAweGViZjlkMmY1LCAweDk0N2JmZmY3LCAweGNmODRmZDAzLCAweDlmZjI3ZWNjLAotCTB4ZDMyYWRiM2UsIDB4ZGZhYTY5NTksIDB4N2YzZGZhYTUsIDB4YTJjZmNkNjYsIDB4N2JlMmE2N2YsIDB4M2U0MDgwZTEsCi0JMHhjNzhhOTdlYSwgMHg3ODg3MTc3ZiwgMHgyNzk1Yjg1ZiwgMHg5YmUwN2E0ZiwgMHhiY2U4NTMzOSwgMHhiZmVmY2JmZCwKLQkweGNlMmQyN2VjLCAweGJlOTNmNTBhLCAweDk4ZWE1ZDI1LCAweGQ3MmJmNjhiLCAweGY5NjYzOWUxLCAweGQ1YTJmYjIxLAotCTB4ZGYwYjNmZGYsIDB4N2NmMGFkMDcsIDB4OTg3MzE0NjUsIDB4NDY0ZjA4NGMsIDB4YjliOGVmZjgsIDB4ZmU4YmVlMTksCi0JMHhlY2RjZjcyYSwgMHhiYjhlNDk3YiwgMHgzMWM3YmYzNCwgMHg3ODBkZjk4OSwgMHg5MTZiMDE5ZSwgMHhlZDRiYmY2OCwKLQkweDI1NzEyNWQyLCAweGFkMmRjZjBjLCAweDY3MzYzODI3LCAweDY5ZGYzYjcxLCAweDNmMjJjYWVlLCAweGM3MTQ2NzZkLAotCTB4MzU5YmE4ZmIsIDB4MDdhNGQxZjEsIDB4NDIzZmYxMWQsIDB4M2YyMGUwM2YsIDB4ZDc5Mjc4ZGYsIDB4NDljZWY5NDEsCi0JMHhhYjUyNDNjNSwgMHhmZjNhZTg0MiwgMHhiOGQ3M2YwMiwgMHg5Y2M0ODJlYSwgMHhjMDlkZmM3NiwgMHg2MjJmYjRiMSwKLQkweGRhMTRmMzdlLCAweDZkMDU1MDA3LCAweDVlZjhlODU5LCAweDljZGJjZmJlLCAweGM3YTJmM2M1LCAweDc4MDU0ZDcxLAotCTB4MWRmODkzOWUsIDB4MWE5ZTcxM2MsIDB4MzcwMTcxZDUsIDB4M2EyZWNkYzcsIDB4OTI3OGVmNmYsIDB4YzhjZmMxYzksCi0JMHgwN2RmYTc4YiwgMHhjMWU4NWJiOCwgMHhiNDdkOTY5OSwgMHhmMWU2MWM4ZiwgMHg3YjllMWIzMiwgMHgwNTAxYWVmZiwKLQkweGYxZDRjMmFjLCAweDczYzY4NjMyLCAweGJlZmUzZjUyLCAweGZmNWI4NzQ5LCAweGRmMjJhYzFiLCAweGJkOTJlZGJiLAotCTB4M2E0MTNjMjcsIDB4ZjM4MWNmNmEsIDB4OGZjZTQ3NDQsIDB4ZmRjNTlhYmMsIDB4YTRlOWM5MjksIDB4Y2MxNDQ0M2EsCi0JMHhkZmVmMGQxZCwgMHhlYmYwYTU5ZSwgMHhkYjNiZmY2MiwgMHhlZDhjZjQwMCwgMHg3YTljOWU3OSwgMHgzOWY5Nzk5ZCwKLQkweGYwYTUzNWIyLCAweDY3MTg5YmVmLCAweGIyMWJkNDI0LCAweDMxYWZkMzRlLCAweDllODdmYmYyLCAweDVkNzkzZDlkLAotCTB4MzBlZjYzMDYsIDB4ZjQzZjdhYzAsIDB4ZmY4ZjE5NTMsIDB4NzBmYmM2ZTcsIDB4M2M2NGQ3ZGYsIDB4YWQ4NmNhNmYsCi0JMHg3NmVhZjg5ZSwgMHg3OGVhZjMzZCwgMHg3YWMxNjRkYiwgMHg2YTY3Mzg4OCwgMHgxZGRmYzA5MiwgMHgwZjFmY2NjNSwKLQkweGEwM2ZlZmJjLCAweDJlZjE2ZjNkLCAweDFkN2ZjZWJmLCAweDllMzI3NWUwLCAweGU3OGY5NzY3LCAweDJiMDYyOWQ2LAotCTB4MmU1NWM3YmMsIDB4NTJiYzYwMTUsIDB4YzFkYmYyYjMsIDB4YzJlY2YxZGIsIDB4NDI0NmViYzksIDB4NzBlM2E3NWYsCi0JMHgyOWU3ODBmZSwgMHgxZWZlNjI2NiwgMHhjZjViMzBmMCwgMHg5YzA1YzhmNiwgMHg4ZjE3ODhkZSwgMHgyMDdkYTE0ZCwKLQkweGRhMjQ0YjVkLCAweGVkZTZhMmFmLCAweDA5MGY3YTU1LCAweDhlODllZGU2LCAweDMwN2MwNTMzLCAweDNlMWM1MzRmLAotCTB4YWY0YzhjNmYsIDB4YjhkNGIyMmYsIDB4ZWRlMjg1YmEsIDB4MTczZTQyYzUsIDB4NDViOTcyYWIsIDB4NmM5Njk3MmIsCi0JMHg4ZmY0NDc0MSwgMHg0NTMzNmYwMSwgMHhmOWE0ZWIwYiwgMHhkNDdiYzQ2YiwgMHhkOWNkZDc3MywgMHgzNjczN2U3YywKLQkweGYyZmZlMzhmLCAweDU5OGZiZTc3LCAweGFhOGVmOWY4LCAweGYxNDZkNjdjLCAweDRmZjdkNWY5LCAweGI2NTQ2ZDE2LAotCTB4ZTE1NWU2OGQsIDB4N2ZkN2NmMDksIDB4ZjkxNTYxYmEsIDB4Njc3ZmQ1NDksIDB4ZGY0NDNlYmUsIDB4MzI0YzVkNTAsCi0JMHhlYTIyNTU3NiwgMHg0OTk5ZWZhNSwgMHg1YjFhNjZlZSwgMHgzZDJkZWI3MiwgMHgxNWU3YTljNywgMHg4MTgwYjA1NiwKLQkweGJlNDQwZmQ3LCAweGQxYTNkODRjLCAweGJmY2U4NWIyLCAweGVmZjg5MGFjLCAweGM0OTY3Njc0LCAweGU3MjA3NTdhLAotCTB4YmY3Y2NjYzcsIDB4MWZmMDc5ZTcsIDB4YzAxNTNkZjEsIDB4ZWYzMWY4MTcsIDB4MjdmYmY4YWMsIDB4MTE1ODNmYTEsCi0JMHg3YjYzZDQ2NywgMHg3M2NmY2NjYywgMHhiMTAyYzM5ZSwgMHhmZDQxMzkzOSwgMHhkMzIyNThkYiwgMHhmYmNjODczOSwKLQkweGFmYWM2NGY0LCAweDIxM2FjMmFkLCAweGNjZTYzZmVmLCAweGU4OTRhY2EwLCAweGVhMzZmNzNmLCAweDgxMTc2OWE1LAotCTB4OWJlZmE4MGYsIDB4YTkzODg0ZWMsIDB4Y2ZiOGFmNzMsIDB4OWRmM2QyMzYsIDB4ZjY3ZTA5MGYsIDB4MjdmZGUyNmUsCi0JMHgyNzliZmJkNSwgMHhhYjlkZjNlMywgMHhlNGJmZmJkNSwgMHhmM2E4OWZmZCwgMHg2MWUzZmU4YiwgMHhkZDg0NTdmNywKLQkweGRmZWYxOWZmLCAweDI3MmZkY2Y0LCAweDJkOGZkMTdiLCAweDcxNWRhY2U1LCAweGNmYmY0NDkzLCAweDFiZDQyM2YxLAotCTB4NTYyYjBmYTAsIDB4MTVjZjA5ZmEsIDB4MmRiYzVkYmEsIDB4ZDBkZDdlNjUsIDB4Y2FhYjhmMmIsIDB4ZWQwOGZkNzYsCi0JMHgzMjdiMWM5NSwgMHg5MmY1ZWQxNiwgMHg2N2Y1MjcxYywgMHg2NzQ3YmE2NiwgMHg4YTY4YmI0MywgMHhiYWMyMzVlNCwKLQkweGQ5MWYxMWQ5LCAweGU4YmQ0OThmLCAweGJkMDkxZmU1LCAweGY5ZjBhNTVjLCAweDNjYzM3YzU0LCAweGZlOGJiMjkzLAotCTB4OWNmZTc5ZmUsIDB4YmI5ZTYzZGQsIDB4NWQ5ZTA2YWUsIDB4NjY5MTRmMDgsIDB4YzBkNWY3MWUsIDB4NzY4ZTVkNzMsCi0JMHhkYTFmZDUxZSwgMHgyM2Y5ZDdkMywgMHgyZWRjMmI4NCwgMHgyM2IxZmUyZSwgMHhlYzUzZjMxZSwgMHhlMjlkZjEyZCwKLQkweDQyYWM5NmNhLCAweDJmZjE3Zjk4LCAweGExNTU2NDc3LCAweDgyZmMyNWZmLCAweDc2OGJiNDNhLCAweGRiODMxNzNjLAotCTB4M2ZkYmNmYzUsIDB4YjZlNWZiZTQsIDB4NjBjNzFiYjUsIDB4NTBkYTAwMWQsIDB4MGJkMzU4YmIsIDB4YjU2Y2RlOWMsCi0JMHhhZjM4ZmZjZSwgMHhiNGYyZmUxYiwgMHg1OGI5ZTkxZSwgMHhkM2M5ZjJkNywgMHg5MjZmZTc2OCwgMHg1OTc3N2UyMiwKLQkweGRlM2I5ZTJkLCAweDM1MjVlZmNiLCAweGUwM2Y3MzY2LCAweDg3Y2VmZWE1LCAweGIyMGI2ZjEwLCAweGIyOTFlOTE5LAotCTB4NzljZjkxNTUsIDB4YjFlODViN2UsIDB4ZTZmZjYxMGEsIDB4MjkzNThiMGQsIDB4MjNhMmU3ODAsIDB4MGZiODU1ZWUsCi0JMHg0ZTQzNmFhYiwgMHg5NzhkZTYwMSwgMHg5NjNlOTY2NywgMHhkNmY5OGRmZCwgMHg2ZDZmOWUyZSwgMHgwYWQ2ZjllMywKLQkweDI4Mjk2MDViLCAweGY2NjZmNjcxLCAweDMyOTk4ZjViLCAweGE5ZmUwZmMxLCAweGIyMjA2NzJhLCAweDk0Nzk2Y2YwLAotCTB4NzkzNTNmZGEsIDB4MGY5ZTQ4ZDQsIDB4Y2ZjYmZlYzMsIDB4ZTUwYzdmMWQsIDB4ODNjMjNmNjYsIDB4ODNlMWY1ZjksCi0JMHg3NDNmNTFhMywgMHhhY2U4YzRlNCwgMHgyNWZlNDdhMCwgMHgwODliZWU2MywgMHhiN2UxYWNjNywgMHg5MjlhN2VkMCwKLQkweDczMDFkOGE4LCAweGY4OWVmZTc5LCAweDVjMzI1ZmUyLCAweDM4ZGQ3MDliLCAweDZlMjRmMzFlLCAweDJlZTkzZmEzLAotCTB4NGRmYjg3NTgsIDB4YmFiM2Y2OTksIDB4OTFkYzYzZjMsIDB4MmVmZmYzZWEsIDB4YjY2NmYwZjAsIDB4M2FmZGRhOTUsCi0JMHgwODIwYjM4MCwgMHhmMDdlZmE4NywgMHg2MDA2OTdmNywgMHhkMzJiOTNiZSwgMHg1MGY3ZTA4NiwgMHgwZTRhMzIyNywKLQkweGRmMDUxNzY0LCAweGJkYzMyMjdmLCAweGRmNTNlMTFkLCAweDA2Yzc1MjdmLCAweDZkZjFjODYwLCAweGQwNTU3OGUxLAotCTB4MGRkMjAwZjcsIDB4ZTA0OGQ3NWEsIDB4ZWZiODkwYjcsIDB4OWEzMTUxZjYsIDB4NzYwOWI0ZmUsIDB4ZTNjZDBjZTYsCi0JMHhmNGQ3NGI0ZSwgMHhkM2Y0NTdhNywgMHg3MmJiYmY4YywgMHhjNGZlZTZhMCwgMHhmYWQwYzBhOCwgMHg3N2I3YmYxMCwKLQkweGY3Y2JjOTdmLCAweDQ2YzZjNGVmLCAweDNmYmRmZWUzLCAweDdkZjlmZGI2LCAweGNlZTlmZGZjLCAweGZhMDc2NDE3LAotCTB4NmU3NzBiYjYsIDB4MTY4ZjFmN2EsIDB4YjVmNDBmM2UsIDB4YTE1MjdlNTMsIDB4ZjY5ZmRhN2MsIDB4ODM5ZjhjY2IsCi0JMHhkNjg3ZDRlMSwgMHhjMGIwY2U5MSwgMHg2MGE1MjM1MywgMHhlYjZkZmI3YywgMHg3YmFkOGI0NywgMHhhZTA1NzdlOCwKLQkweGYzZThkZDU1LCAweDI4N2Y1MTZjLCAweDFmNjgwNTYwLCAweDQ3YmZkN2NmLCAweDBiM2FiZDc5LCAweDFkOTllNzVmLAotCTB4M2M1YjljZmMsIDB4ZjAxMmZhZTcsIDB4MjBmODZkZmQsIDB4NDAxNzhiZmEsIDB4OTdmYzgzZjEsIDB4N2FhMDllYjUsCi0JMHhhZTZjOWFkYiwgMHg5NjMyZWJhZiwgMHhmNjRmZDFlOCwgMHg2NWY2OGI0MCwgMHg3OGFkZTgwYywgMHgzYjQwOWJlMCwKLQkweGY3MGRiYzFiLCAweDcyYzRlNWJkLCAweDU0YzJmZGZmLCAweDhmZWY5YmNhLCAweGZkOWZmOWU2LCAweGZiZjQwOWM5LAotCTB4YzY5YjhiYzcsIDB4MGJiYWY1ZDIsIDB4ZGJmZjM0MzEsIDB4YjVmNjgwNzIsIDB4YTg5MzVmNzksIDB4N2QzMTMxNGUsCi0JMHhjZjVjNGFkNiwgMHhkZjQ0MDFmZiwgMHg4MDAwNmRhMCwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwKLQkweDdkY2RmZjAwLCAweGQ1NTQ3ODBiLCAweDM5OWVmMGI1LCAweDY3MDkxZTY3LCAweDk5MjEyNzI2LCAweGU0YzIxMDI0LAotCTB4NGUwMTAyNDksIDB4YWFmMDgwNDIsIDB4OWUxODA5MDMsIDB4NjgzMTAwNGUsIDB4MGNmZGUxZDAsIDB4YWY0YTg4MDksCi0JMHgwNDgxOWJmNCwgMHhhODZjMTgwOCwgMHgzYmQxNTAxNCwgMHg2YWQ0ODBhNCwgMHhhNmEzZWE2ZiwgMHhkMDA0YzdkNiwKLQkweGEwZDI5NDFiLCAweGRlZjZiN2ZlLCAweDIyYzAxYjViLCAweGRhMDQ2YTI4LCAweGZhZDJkZTlmLCAweDNlZjZiNWFmLAotCTB4ODI0OTljYzksIDB4YmY3YjdiNzIsIDB4ZGJlM2VmOWYsIDB4YjNlZjY3NTksIDB4ZDdiZGViMWYsIDB4NmI0Y2ZiNWUsCi0JMHg3ZWVmMjA3NCwgMHhmZjk5YjE4NSwgMHgxYjI5N2I3MiwgMHg5N2RhZDhjNiwgMHgxZTYwOWU0YywgMHg4NTdiZDJjMCwKLQkweGQzNWNhMGViLCAweGJlYjE5NTMwLCAweDUzNTZiMzA4LCAweGQ3MzE2MzFjLCAweDA0NmM2MWVmLCAweDJjMDE4Y2MxLAotCTB4NjRlYzcyOGQsIDB4NDM1YTUwMzEsIDB4YzNjNjRmZDksIDB4M2I0M2FiMzMsIDB4ZWFhYzY2ZWMsIDB4MzdiZDE0N2EsCi0JMHgzMDExZDhiZCwgMHhkYmJjN2Q0MywgMHhjNjQ4ZDhjNCwgMHhlOTUzZWQyYywgMHhjYmQ3YzlmZCwgMHhmYzZiZmVhOCwKLQkweGZkNjMxYjc3LCAweGFmNTRlOWRjLCAweDQzODQ5NmMzLCAweGRiMDUyMmYyLCAweGI0ZmRhODliLCAweGFjYTg0M2ViLAotCTB4Y2E4NzNlYmMsIDB4MTQ3ZTcyNzcsIDB4ODRmYWMzZWYsIDB4MTdmYTUzNmIsIDB4NTI2ZjFjMDIsIDB4NjRhYzRhNzEsCi0JMHg2MjhkOTk5YywgMHhhMzNiN2VlYywgMHg0N2FiNTc3ZiwgMHhhYmE1MzBjNywgMHg3MmQyYzhkZiwgMHhlODFlNjI1ZCwKLQkweDQ0ZGQ3NmNmLCAweDhmNzRjMGU1LCAweDZjNjA0ZWU2LCAweGQ5NzZhNmQ2LCAweGVjNTFlYjhlLCAweDgwMzRlMWVhLAotCTB4Y2JkZGYyOGIsIDB4OTNkZWJhZjIsIDB4YmFiN2NkOGUsIDB4N2JmYmMyODcsIDB4ZDAzZDU4Y2UsIDB4ZTJjYTBkYmYsCi0JMHhjNjRhZmFiMCwgMHhkZDc5NGQzYywgMHgzNmU1MWJjNywgMHhkYjE5M2FkMywgMHg2YzJjZTU0YywgMHhjYmIzZWYwNywKLQkweGVmMzg2NWRmLCAweDZmM2U1NTdiLCAweDkxMjYxMWI2LCAweGI2MDY1OGNjLCAweGJmN2FlODRmLCAweDYwYzFkMDBkLAotCTB4NmQ5NzgxNWUsIDB4NzdmMGMzYzEsIDB4ZDRhZmJhNTEsIDB4NGRiNGZkMGQsIDB4NjAyZmU1NjQsIDB4NmE1YjcyM2YsCi0JMHgzNzFmZTM5OSwgMHgzOGI3OTlmZiwgMHhmZTYyNzFmZiwgMHg0NmQ4OTZiZiwgMHhiN2Q3ZWZlYywgMHg4MWU2ZDZkZCwKLQkweDNjM2NiNTc5LCAweGVlZTQ4NDYyLCAweGI3NWVmN2VhLCAweDc2YWJmNzk1LCAweGNmNDA2MGRjLCAweGI4ZmEzN2FhLAotCTB4NjZmYWMyNzcsIDB4ZGMyMDhmMDIsIDB4ZDgyZGJhZjEsIDB4OTljZjQ2OTgsIDB4NWI0YjFlMjksIDB4YWJlYTA5YTMsCi0JMHg1ZWQ5MWQ5YywgMHhjZGY4YmYxOCwgMHg2ZmYyMTBhOCwgMHgzMjUxOWJjYiwgMHg5ZjdlNzE4MywgMHhlOTE3YmJlOSwKLQkweGEwZTZmYzU4LCAweDI2MTM5MzEyLCAweDQ2NGQ5YWY5LCAweGQwMzY1ODNlLCAweGVmM2UxZjczLCAweGYxYmRiZTZkLAotCTB4ZDY5YzYwMDksIDB4NTM1ZmM5MTEsIDB4MTg4MTRjY2EsIDB4MWQ1ZjZmZTAsIDB4ODI4NTkzOTcsIDB4ZWY1ZDE3M2YsCi0JMHhjODRmYjA0MywgMHhjNGVhZDVjZiwgMHhhYmI3NDgyOSwgMHhiMGQyNjA5YiwgMHg0YzliNDU4ZSwgMHg3NTgyNWY0MywKLQkweGNiNDNiNzMxLCAweGVjY2MzYzAyLCAweDczMGI2MGJmLCAweDY5OTk1Y2EyLCAweGM0ODczM2JkLCAweGU5YTA2YjA2LAotCTB4MDZiMWViOWEsIDB4OWViY2FiZjksIDB4YmRhZmZkNDYsIDB4ZWI5ZTk3ZGUsIDB4Yzg0OGI2NzIsIDB4MTlmOTBkODcsCi0JMHg5ZjgyMjVlMCwgMHgxOTdlNDVlZiwgMHgxYjg3MjVkMywgMHhlMjhmN2RkMywgMHg4MGQ2NjdmYSwgMHhiZTc4YzNiYywKLQkweDI4ODVjOTJkLCAweDYyZmM1ZDQ3LCAweDgwYWY5MTU1LCAweDg1OTY5MjVmLCAweGNiNGQ0ZGM5LCAweGY0MmE5ODdjLAotCTB4N2UyNWVmMWYsIDB4NzE2NTAyNTksIDB4YzE1MmZkNTgsIDB4N2I3ODkxMDcsIDB4NjVmOTE2ZWMsIDB4NDhiZjY4YjMsCi0JMHgwMTk5NjUwOSwgMHgyOGVhOTYwZiwgMHhlN2NjMGI2ZCwgMHgwYTdiYmM0YSwgMHgwZWZkNjVlMiwgMHgxNmY1YmY4ZSwKLQkweGU2MDNiMTZmLCAweDkzNzFmZWJiLCAweDhiNjE5NDA2LCAweGE4ZWMzOTQ3LCAweDU4N2Q0Njg3LCAweGYxODVmNTZkLAotCTB4YzNlYmZjZWQsIDB4MzBmMDFiOTgsIDB4OTUyNjdhZTcsIDB4ODNiZTAxZmUsIDB4ZDc4NWZlYjgsIDB4MGQzYTA5ZTcsCi0JMHg4YmI5OTJhMywgMHhkOGM1Y2NjYywgMHgxYmFiYTQwNiwgMHhlOWM0NTQyNywgMHhhZDc3ZTYyYywgMHg0M2UyNzQ3YSwKLQkweDUzYjVmZTMwLCAweDg4YmZhYTE2LCAweGE5ODAyZDc4LCAweGUzNGYwMjdhLCAweDliNDEyY2JjLCAweDc1ZTYxMDc2LAotCTB4MmEwMmMyZDEsIDB4N2VmMTY5ZDAsIDB4ZGZhMDA1ODksIDB4NDZmYTUwMjUsIDB4ZDgzZDUyZDAsIDB4MTQ4MWY2Y2UsCi0JMHhiMTc2YzE2YywgMHg4MDViMTNjYywgMHhlNmY1ODRmOCwgMHg4NmJlMzFmMCwgMHg2ZDRjOTdmZiwgMHhmZDQxMGZkOSwKLQkweDk2MWIzM2U3LCAweDgxZTAzMzk5LCAweDg2NDEyYTc0LCAweDgyZmU3ZTc1LCAweGJlNzgyNGM0LCAweDJlNWJkZDcyLAotCTB4OTRhYjFlNTgsIDB4NTBhYWE2MGUsIDB4Y2MxNGMxYmYsIDB4N2JlMjgwYjYsIDB4ODZiZGY2NDYsIDB4YmJkM2UwN2EsCi0JMHgwOGFkZmU5YiwgMHhmMGRjN2RkYSwgMHhhYWU5MTNhMiwgMHgwZTQ5YjVlMywgMHg0ZDNmNjE2NSwgMHhjYzAwY2Y4MCwKLQkweDJhNWVhOWJkLCAweDZjMzQyYTBkLCAweDVkYTFiMjlmLCAweDczZjNhZGZjLCAweGJhYWY5ZjI0LCAweGJhNzg0MTllLAotCTB4ZmExYjZkNWEsIDB4ZjAzMWYyMTIsIDB4ZjVkNzNlMmQsIDB4YWUzYWVhZjEsIDB4YmVmZDc1ZDcsIDB4Y2ViZmYwNTYsCi0JMHhkNzMyOTVkNywgMHg0YzRhOTU1YiwgMHg2ZTE2OTAzMCwgMHgxM2JjY2E2ZiwgMHg0YzcyZWY5MSwgMHhiNzBiMTY1YSwKLQkweDhlOGY4ZDM3LCAweDMyZjgzOTQ1LCAweDVkNjFhYjVlLCAweDgzOTc0MmY2LCAweDgwNDlmYzU3LCAweGE0N2IyZWJjLAotCTB4YzdhZTgxY2IsIDB4ZjNhZWJkNzUsIDB4MjZhZjZlYmQsIDB4MmYyZmU0ZmQsIDB4NzlmYzNiZmUsIDB4ODFkN2NkMzIsCi0JMHhlNjRkMzA3YywgMHhlYzlhNmI3NiwgMHgxYzlhM2UyMCwgMHhmZjIzMjY1ZiwgMHg3OWZkN2I3YywgMHhiM2NmZTg1NiwKLQkweGI2YjlmZDA2LCAweGM3ZjlmZDE3LCAweGYzODc5NDViLCAweGRhOTY3ZjQyLCAweDNjZGU3ZGQ4LCAweDNiNjdkZmFlLAotCTB4NGEyYmZhYmEsIDB4ODM0YjY0OWYsIDB4MTMzNDk0N2UsIDB4Y2Q0N2ZiYjUsIDB4ZjNlMzQ5NWIsIDB4ZmVmM2I2ZjgsCi0JMHg2ZmNlYjEyZiwgMHhkMzAzZmJkMiwgMHhhNDZmZDRhYywgMHgxZmQwNjc5ZSwgMHg1ZjJmZjllYSwgMHgxZGEyMGRjZiwKLQkweDVkODE4OGY4LCAweDVhZjdiYjQwLCAweDYxNjFmNzFmLCAweDQ0NGVjODA3LCAweDY2NmYwNGM3LCAweGI5OTI3ZTA3LAotCTB4YTdlMjIwNzgsIDB4NGVlMDNiMDcsIDB4ODBlYzNiZmIsIDB4YmNiYTU3Y2UsIDB4Y2JhMWYyZTgsIDB4ZThmY2E0NDMsCi0JMHgxMWZkMzBmMiwgMHhhNDIxZTYyZCwgMHgzMGU2MjAwZiwgMHg3ODFjOGZjYSwgMHhlOTUxZDcwZSwgMHg3MjhmOTNlZSwKLQkweGY4MTFjYmE5LCAweGRkNjcyNDYxLCAweDliOTA4M2VjLCAweGRhMzEzOTJlLCAweDc0MmU1ZDBiLCAweGE2ZTVkMTM5LAotCTB4NTJjNWM4NTIsIDB4M2NiYTE3MjEsIDB4MWU5YTk3MWMsIDB4M2RlZjBiMWIsIDB4NDMyYmU2OTcsIDB4YjFmMmU4N2MsCi0JMHhiYjQ4ODVlNiwgMHgzMTNmMmJkMCwgMHhmMWE1YTdlNCwgMHhhOWY5MGNkNSwgMHg3ZTcwY2ExMiwgMHg0ZmMyZjViMiwKLQkweDlmOTE2ZWYzLCAweDlkYmVkMjRhLCAweDhkMzJiMTFmLCAweDQwZmYxMWZiLCAweGQ2OTk1YTdlLCAweDBhYjE1ZmIzLAotCTB4Y2E3ZmVjZjksIDB4ZmQ1YWI4YWYsIDB4Y2MzNzQyOWIsIDB4ZTgyMTZhZTcsIDB4N2UyZWI0ZDksIDB4ZTMyZWZlOWIsCi0JMHhmODA2NDM3ZSwgMHg0NmI0NTBkOSwgMHg1YWI2NzVmMywgMHhiMDZiMDQwNywgMHgxYWFjZDdkZCwgMHgwMWZiYThmMSwKLQkweDdkZWU5MTRiLCAweDI3ZjRmOGJiLCAweGZlNzFmZjYwLCAweGMxNWJmZDNhLCAweGVkZjc1ZmZmLCAweGQ5ZDExZGY0LAotCTB4ZjU2NmRmMTYsIDB4ZGJiZDIxZTQsIDB4MzdiZmY2MGMsIDB4NWJiMWYxN2YsIDB4NmZlNmYzYTQsIDB4NDI0M2U3NDksCi0JMHhmYTBmZmM2ZiwgMHhkMTdhODc4YiwgMHgxZWZmODcxMywgMHg4NjJjY2ViYSwgMHhmYzIxZmIzZiwgMHgzYzY3YWY3YiwKLQkweDAyZmJlN2QwLCAweGEyZjM5YzBlLCAweGQyMmJjY2JjLCAweDNjMWJkYmViLCAweGUwMWZhODk5LCAweDgyMzRiMWNmLAotCTB4MGYwOWQ5ODcsIDB4NTZkYjNlMDIsIDB4ZmU5Y2YzMDIsIDB4MDA3ZDY3NTgsIDB4OGY4ZjI3ZWIsIDB4OGYzM2VmMTEsCi0JMHgzZmI1NzU4OSwgMHg1YjUxZjY5MSwgMHhkNjBiZGEzZCwgMHhhZjhkZWRjMCwgMHgwZDBlZjY1ZCwgMHg3NjAxMGI4MywKLQkweDExNDVjMTg0LCAweGRlZGUwMWYwLCAweDk1MzNiNzI5LCAweDk3MjA4NGZjLCAweDU0ZGZlODJiLCAweGZkMTVmMzQwLAotCTB4OWU2NWZlMDksIDB4Y2YwMTU3MTMsIDB4ZGIxMzU0YjMsIDB4OGFhYTc0MDksIDB4NTVkNmY4M2YsIDB4MjZjZDZiZDQsCi0JMHhlMTg3NzI2NiwgMHhlYmM5NzAyMSwgMHhmNmZkMDE0OSwgMHg5ZmMwNDk5YSwgMHgzN2MwNzliNywgMHgwZTI1ZmJiOCwKLQkweGFiZjA3NjdmLCAweGZhMmM4MDg2LCAweDhkNmM3ZjA1LCAweGM5YTViNzQwLCAweGJmYTA5MWU0LCAweDYwYTY0NTM1LAotCTB4N2M3NzVhN2EsIDB4NjdjOWQ2N2YsIDB4NTRjMDdjZmEsIDB4ZDY2N2RmMWEsIDB4MWY3YjViZjgsIDB4YTdlZjRkZTksCi0JMHhkYjIxZmJkMywgMHhkNzdmOGMyZCwgMHhmNjA5ZTY3OCwgMHhkMjliMGZlMCwgMHgyOTJjNWRiOSwgMHgzZWIxZTk4YywKLQkweGY4ZTI1ZDJhLCAweDNlYjAwMWJmLCAweGQzOWEzYzNlLCAweDkxZTVmN2M0LCAweGY5ZDM2M2VkLCAweGIzNjY2ZGI4LAotCTB4Mzc2M2E3YzAsIDB4NTU5YjU5ZjIsIDB4MWJiMmI3YzcsIDB4YjE5OTNkZjEsIDB4YmU0MTNlNGUsIDB4NGUwOWYxODEsCi0JMHhlYWNhNTQ2OSwgMHg0ZjVjYmU2NCwgMHhiNjZlYmUwNCwgMHg3NGQzMmZkZSwgMHg1ZjBiYTYzZiwgMHhkOTdhMDg4MSwKLQkweGFiZWY4MjZlLCAweDZkZGJlMDNkLCAweDMzNzQzZjdjLCAweGRiYjlmZDdhLCAweDU3NmY4MmZiLCAweDMxZWM3Y2U4LAotCTB4ZWM4YzdiZjAsIDB4ODk4Y2ZlMjUsIDB4ZTAwMWE5MzcsIDB4YThkZWI1YzcsIDB4NzQyZmRjN2EsIDB4MTk1MjY3YzksCi0JMHg4OGNhMmRlMSwgMHg0YmY5MmVhNywgMHhjODUxMmIyZSwgMHhmZGY1MTIzZiwgMHg3YWZjYTM3NywgMHhiOWVkOWRjZCwKLQkweDBkN2NlYTNjLCAweDVlMDBlN2VmLCAweGY3YzY5NWQxLCAweGRiZjdhNTQ3LCAweGJlMjNjODFkLCAweGU1ODI3YWEwLAotCTB4Y2E0Nzc5YjAsIDB4M2MwNDUzNjMsIDB4ODU3ZTQyM2UsIDB4NDBmZTkxZmMsIDB4Y2E3ODAwN2IsIDB4N2YxNmZkNDIsCi0JMHhlMzBlZWFkNiwgMHg3ZjA1M2I5MywgMHhlNTYyNmU3YywgMHgyNmRiNGZhOCwgMHgyZGIyM2Y3MSwgMHhhNDBmOTc5ZCwKLQkweDAyY2NiOGYzLCAweDc1NGI5N2MxLCAweGMzMGU4YTdlLCAweDQyN2Y5MTgzLCAweDViMDk1ZmI4LCAweDdlNjllMTM3LAotCTB4NjNjZjJlYmMsIDB4YmFjMDY2Y2IsIDB4N2Q3OGUyZGEsIDB4ZGRhOGUzNTUsIDB4MzgyZTk0ODEsIDB4OGQ3NWJmYjIsCi0JMHgyZjEwY2I2MywgMHg4YTA3ZmQ5ZCwgMHg5OTdkYTBjZSwgMHg0MGY2ZjAyZiwgMHg4MTMzOThlMywgMHgxNzY3NDEzYywKLQkweDdmZGExOWQ5LCAweDUwMDQ3ZjAxLCAweDdmMjI1NDFmLCAweGM3ZjNiYTk4LCAweGZjNmVmNDg0LCAweGRmNzg4ODE5LAotCTB4ZmJjOWI5NjMsIDB4ZjdkZmRkYzUsIDB4MmNjZmJjNDQsIDB4YmVmMmI3ZjEsIDB4MDg4Y2RiYTAsIDB4ZDA0Njk2YmEsCi0JMHhhZTAyMjRiNSwgMHg0MWEwZTFkMCwgMHg3OTdhZWFmZiwgMHhhZGVlZjM1MSwgMHhlYWM3OTgyZSwgMHg1OTY3YTBhMywKLQkweDJkNGYzZjM4LCAweGFkNWZiOTQzLCAweGVkM2JmY2VhLCAweDE3NmJmMjBjLCAweDNjMjc0ZjNmLCAweGY5ZDI2ZWNmLAotCTB4ZDQ2ZWM2NzUsIDB4ODdhODY1YzMsIDB4NzNjMTc2YzcsIDB4M2MxMTBmNTAsIDB4MTMxM2NjYjMsIDB4ZWQ2NmFmNmUsCi0JMHg1Nzc1N2I0NiwgMHgwZWZlZGU5ZCwgMHhhZDc3N2Y2YSwgMHhlYTk3OWZkZSwgMHhjZjQyM2E3NSwgMHg0MmQ3NDQ2NSwKLQkweDNlY2Q1ZWRkLCAweDVlYWJmNTgzLCAweDRkMWZlZmUzLCAweDkwMjY3MzlmLCAweDY4NzkxMzc5LCAweDgxY2JjMDg4LAotCTB4ZDExMDM4MDgsIDB4ZDgzN2NmN2UsIDB4Zjc4OGRhYjcsIDB4ZDdkNDQ1MzcsIDB4MjNmYmMwNDcsIDB4ZmJlMzNhZTAsCi0JMHg0ODk4OTcwYiwgMHgzZjAyMTcwZSwgMHhlNTIyMjEyMCwgMHg5YTNmOTIzMiwgMHg5Y2ZkM2JkMywgMHg1MjZlN2I0ZSwKLQkweGM4MzNiZmM4LCAweDBlMWFmNGQ1LCAweDk1Zjc0YjFmLCAweDcwNjEyOWQ1LCAweDJlMzJjMmUzLCAweGYwMWEzMDE3LAotCTB4N2ZmMTg1YTUsIDB4MTIwMzczYTAsIDB4MTdhNTgzZjAsIDB4MWJkNGQ5YmQsIDB4ZGE0NGU2NWYsIDB4N2JmZjVlN2IsCi0JMHhmZDE5MzNmYywgMHg0YmYwNjY2NSwgMHhiODQ2NGI4ZSwgMHgwZWYzMTI0NSwgMHg5MGQ5OWQ1NCwgMHg3ODc1MGY4NywKLQkweGE3ZWUxOTZkLCAweGFlMzNlZmE3LCAweGEyYjNmNjBiLCAweDQ5NTk0ZDdlLCAweGQ2YzQ1ZmI4LCAweGQ2YzI3OTk0LAotCTB4ZjI5ZmI3YTksIDB4MWMyNWFmZDcsIDB4ZDVjNmMzZWYsIDB4YmVhMDg3NjUsIDB4YWIyODUyNjIsIDB4NWUzOGNiMWEsCi0JMHhkMDk0YmQ4MiwgMHhmODg5NTc1ZSwgMHgyNWQ3OTRjZCwgMHg4YWNiZGEyZiwgMHhmYWQ2NTBlOCwgMHgzNTg4M2Y3MCwKLQkweDViM2FlMzY1LCAweDNlODg5NjFlLCAweDBmYTAxYTgxLCAweDczMjE2OWUwLCAweDJlY2VkMTViLCAweDgzMmIxZTY2LAotCTB4NGM0YjVjYWQsIDB4ZjAyM2M2Y2MsIDB4YTU4N2YxZGUsIDB4M2ZhNzY4OGQsIDB4ODVkN2Q4ZGEsIDB4MTlkMWExZmIsCi0JMHgzYzcxN2Y3YywgMHgyOTZiYTA2NiwgMHhlZTdkMmRjMCwgMHhiMmRiN2QyMywgMHhjNzk1MzI3ZCwgMHgwZWI2Y2YyNCwKLQkweGRiZmZiMTk1LCAweDkyOTk3MGY4LCAweDg0MzFmNThiLCAweDBmZTlhYmE3LCAweGY5MDY2ZDk1LCAweDliYmE1M2Y4LAotCTB4NTM4YmVhZjAsIDB4NmZlOGNkNWQsIDB4OGMzMGI0ZWYsIDB4NTFhNjMzOTcsIDB4MmVlMTY5MWMsIDB4OWM0ZWZlNWIsCi0JMHgyZTIxZTZjZiwgMHhmZDE3M2ZmNCwgMHgzMjRhNmNiMCwgMHhkNWI0NWJiNCwgMHhkNTFmYTFhMiwgMHg3MTUzNTY2ZSwKLQkweDkzOWRiZTdlLCAweGE0YmY1OGFkLCAweGRiODE5NDU2LCAweDZmZjM3Y2E5LCAweDQyNzFhYTNmLCAweDRjYTc4ZWZiLAotCTB4OWZiNDIzNWEsIDB4ZGRlOWFkNzAsIDB4YWYyZjAwNjEsIDB4NDQ5MGQwY2IsIDB4MzMzNzVjNmYsIDB4YjczOWM2MTUsCi0JMHgwMjUwNTA3ZiwgMHg1NTFmM2NiZSwgMHhkZTJjZjZmZCwgMHhlNWZiNjE5ZSwgMHg2N2E3ZGMzNywgMHg0OTdiNjIxNSwKLQkweDJmZWQwMmRkLCAweDlmZjQ3M2MwLCAweDFhOTBlYzJmLCAweGE3MmYzODRkLCAweDRiMDRkYTIzLCAweDQ2NTdmMGJhLAotCTB4NWIwYjljZjEsIDB4Y2Y4YzQxNmQsIDB4Zjc3YzUzOWQsIDB4ZjY3MWM3ZWUsIDB4NjdkM2QwNWIsIDB4YTc2ZTRjMTcsCi0JMHg5ZjEwZjAwOSwgMHgyOTJjYjNiMSwgMHgwNGRiOWYxOSwgMHgyZWM2NzczZCwgMHg2ODVmMzkwNCwgMHhiMjFmZTRlZSwKLQkweDM5NjJjYjI3LCAweDFkYTNmZjFjLCAweDFkNjE4NzY1LCAweDQ0MWYxZTE3LCAweDE5NWRhYmYxLCAweGMwMGM4NDllLAotCTB4MWU5OTFkZjcsIDB4YTNlNzk2MTcsIDB4ZjM3YWRkYjgsIDB4ZTg3ZGQyNmYsIDB4ZjJmMmZmYzcsIDB4OTdmMjE3MjIsCi0JMHhkM2NiODMzYiwgMHhiOTE3ZDcxYiwgMHg1NWY5ODUxNiwgMHg4OTk3M2VjYiwgMHhiYWI0ZGUwZiwgMHhkZjdjZTAzNywKLQkweGMyNjAxZThjLCAweDQxZjAzNjdkLCAweDJmOTM4YzVmLCAweGUwMTZmYjExLCAweGY2MmY4ZGU3LCAweDk3ZmQ1ZmUwLAotCTB4MWU1YWM3ZjAsIDB4MzZlZjE4NDksIDB4ZDI3ZWY1ZjAsIDB4MDBkZmI0OWYsIDB4ODdlMzNmMzgsIDB4YzdjMDAzYmIsCi0JMHhiMjM2ZGIxZiwgMHg5YjhjMjhmMywgMHg3NWRjNTJmYSwgMHhlMDdhMTMwOSwgMHhlZTIwYThiOSwgMHg1MzUyNThhYiwKLQkweGE2ZmM3ODc2LCAweGZiNDUwZTUzLCAweDg0MWMwNWRmLCAweDdiNDFkZmQ3LCAweDJlZmRmN2RjLCAweGYwOGUxZmYwLAotCTB4ZmRiZDBiZjMsIDB4ODAyM2E3NzIsIDB4MGUyN2M1Y2UsIDB4ZjhmNDhjODcsIDB4Zjg1ZmY2NDgsIDB4ZWNiN2JjMmUsCi0JMHg4MWQ5MGIyOSwgMHg2YzI1NGY2NSwgMHg4MTcxYzBlYSwgMHgxNmFlMzA2ZiwgMHg4NjdmMmViOSwgMHhhYmQ1ZDY4NSwKLQkweDY1MjNiMjVjLCAweGZiZTEyOTI1LCAweGJmYTRjMzk1LCAweGU5Y2I5MzdiLCAweDBlY2I4NzE5LCAweDk3MmVmNWU1LAotCTB4OWZhZTU1Y2IsIDB4ZjE2NTNjYTYsIDB4MWYyZDNjYTIsIDB4NzBkOTkwZTksIDB4ZjUzZDI2YzYsIDB4Y2ZjNDYxZDYsCi0JMHgwNTUxNzVmMiwgMHhmMmY4OTgzNiwgMHhhZjQ0NmNhNywgMHhhMDIzODc3NiwgMHhlOWNmYmQ0MiwgMHg5Y2ExNjM5MCwKLQkweGQ2ZjVjMTlmLCAweDNmMmUwY2E2LCAweGVkOTMxMmM1LCAweDYyZDY1NDA1LCAweGNjMGFmNWJjLCAweDk3YzAyZmE3LAotCTB4NzdiNjNlMzYsIDB4MjlmMzhjMzQsIDB4MGQxYmNlMGIsIDB4ZTFlMmJiZjgsIDB4MjVlNTdhN2MsIDB4NGM4ZWUyODksCi0JMHg0MTMzYzhmNiwgMHg1YzYwYWU1ZiwgMHg3YzllNTQ0ZiwgMHhmZTExM2FkMSwgMHg1ZmY1NjJhYywgMHg1YzFmYjA0OSwKLQkweDA2N2NiZDUxLCAweDA2NTcwYmVlLCAweGM1ZGFlNzJkLCAweGIxNmJmYzVlLCAweDU1YjNkNDVjLCAweDViZDgxMWZjLAotCTB4ZmVmZWJkNjMsIDB4ZmE0ZWQ2MWEsIDB4YTIyOWIyYTMsIDB4NGZmNmZhYmUsIDB4ZDU1MzdlMzAsIDB4M2ViZTdjNmMsCi0JMHhhMTdmMTFjMywgMHg3MjU4YzMwZiwgMHg1ZDhhNjAwMSwgMHgzMzY0YjZhOSwgMHgwNTcyZWE1OCwgMHg1ZGQ2MGNlNCwKLQkweGYzNDRjMDdjLCAweDBhNTFiZTVmLCAweGM1ZmU2MGRhLCAweGY4ZGM3OTdkLCAweGMxZjAzZjYzLCAweDQwN2Y1YTIwLAotCTB4MWVmOTc4MDUsIDB4MzM5NjdmNmUsIDB4N2YwZWQwNTMsIDB4MWQ2MDdlZGUsIDB4MGEyZjMxYzUsIDB4YzRkMGIzN2QsCi0JMHhlN2U3YzhiYywgMHhkYzU0YjRhMywgMHgyYTdiMmZlZiwgMHhmY2JjZjA4YSwgMHhmNmZmOTVlOSwgMHhiZWQ3YmMzOCwKLQkweGY4N2M2Njc5LCAweGY5MGViYWZlLCAweGQ5OTllMzgzLCAweGY5ZmFiYWUzLCAweDUyZjdmMzY0LCAweGZmOGEwZTUxLAotCTB4YjBjOWY2MTksIDB4ZWNiMWU1ZGUsIDB4OTBkM2YzYTcsIDB4NmVhOWM5NmUsIDB4ZjJkZGFiYTUsIDB4ZjM2NzBmMmQsCi0JMHg4NmNmYjA3NiwgMHgyMWRjMmY3NSwgMHhjYmQ4M2FkMSwgMHgyMDg3YjIzNiwgMHgzZTM4NmFmMywgMHhiNDllZDQ5NywKLQkweDYzM2RiOTVhLCAweGQ5Zjg0YmFhLCAweGY1ZTdkNDZlLCAweDdmYmMxMjZkLCAweDg1MjVlYTBlLCAweDBmNjgxN2YwLAotCTB4ODdkZjk3OGIsIDB4M2U5MzI1N2QsIDB4MmFmYWUxZjEsIDB4NjZmYmE2Y2MsIDB4NTYxZDNmNTMsIDB4MzMxN2VmOTQsCi0JMHhkOWY0NWM3OCwgMHgyZWU3ZWUwYywgMHhhNWVlZDU0YywgMHgzNmEzZjQzOCwgMHhlZjFhNGI2ZCwgMHhlNjI1MWE0NywKLQkweDRhYmNmYjAxLCAweDNhMzJkYjczLCAweDhkYjlmY2M3LCAweGI1NTUyYmUyLCAweDI3Mjg5ZTUxLCAweDJmM2M0YmVkLAotCTB4MzI1NWJmNDAsIDB4ZDg3MWFkOTMsIDB4MWFlNzVmMmYsIDB4ZjAxZmQ3MzcsIDB4Y2YxOTQzZmMsIDB4M2Y1YzFjNjcsCi0JMHhiZTAyYzY1NiwgMHg2NjM4Y2UxNSwgMHhmYzRiZmZlOCwgMHg5N2Y3ODMyYiwgMHhmZGViYWMzYywgMHg1ZDRkZjFjZSwKLQkweDEwYzNiOWY1LCAweDk1ZTc3ZDVmLCAweDk3OWUzY2UzLCAweDE5MDE3ZTQ4LCAweDlmYTExNjhmLCAweDAyMzRiY2Y3LAotCTB4NzcwYmQ3ZjcsIDB4ZmE4MjlmMWMsIDB4ZjJjZmY1NzYsIDB4ZTE3NTdjNTUsIDB4N2IyN2RmNGYsIDB4YjlkMDVhYjEsCi0JMHhiNDdkZmQxZCwgMHgwY2ZmMDAxZiwgMHg3ZTQyNTNjYSwgMHgwZjhmMTI3YywgMHhkMGY4MTI5ZCwgMHg1N2Q3YWRlOSwKLQkweDM4ZjBiMGVlLCAweDU0NzVlODNkLCAweDdmOWI5NTI0LCAweDNhNTZmZDQzLCAweDZmYTg1Y2RhLCAweDhjYjY1ZjJiLAotCTB4NmJmY2JkNDIsIDB4NWZiNDNmOWMsIDB4ZjhjMDc5YjQsIDB4MTY3ZjgxMGYsIDB4YjQ1NDYyNTksIDB4MzMwMjZiNGYsCi0JMHg2OWFmMDhhZCwgMHhmNWRjMTEzMCwgMHhmMjJhNDI1ZSwgMHhhZmI1NjdlMywgMHhjZTRmOTEzOCwgMHhkMGIyODU0NywKLQkweDhiYWM3NTBlLCAweDAxNzExYWQyLCAweDdkY2Y4ZjJhLCAweDg4ZDU5YjU2LCAweDZhMjU5YzcxLCAweGY1MDRjMzliLAotCTB4YzQ2NDM2NGIsIDB4NDhmZWJlYTEsIDB4ZmViMTU5MGQsIDB4MzMzNGE2YTMsIDB4MWQ1NTFlYzIsIDB4MWU0N2IwOGYsCi0JMHhhMDY3ZjA0ZSwgMHhmZjA0OWFiYSwgMHg2YjU5YmVhMCwgMHhmMzVjZjRlMiwgMHgzYTZiNzFkYywgMHhhYzU1Nzc4YywKLQkweGRmZTdmM2Y3LCAweDRmNzhjNmNmLCAweDM2NWI2YTY1LCAweDc3YTAxMWRhLCAweGYzYzQ3Zjc2LCAweGMzYjIyNmIzLAotCTB4M2M5MzlmNmIsIDB4ZThiYWMzNTEsIDB4MGRlOTE2YmQsIDB4ZDA0YWI1ZjIsIDB4YWY0YmVkNzksIDB4YmY3Yzg0M2MsCi0JMHhkMDVkZTkxNiwgMHg2ZjgwNWY5ZCwgMHgxN2YzZDA0ZiwgMHhmYzYxNGUwZSwgMHgxN2M4MTNmZCwgMHhiODAyZGRiYSwKLQkweDM3NzE4MmQ2LCAweDA5YWY4NzJiLCAweDI1ZTc4MDNlLCAweDhmMjA3OWZjLCAweDExZTgyNmY0LCAweGY5MjMzN2Y0LAotCTB4YzZmYTM3YmQsIDB4YjdmYjcyNjYsIDB4ZjQ4ZGIzNjgsIDB4ZTcyNjZjNmIsIDB4MmYxZGY2ZmIsIDB4OWY3ZTkxM2IsCi0JMHg2ZGZjN2YzZiwgMHg3Y2E5NGYzYywgMHhiYmIyYWMwMSwgMHhmODE3YmUwNywgMHgzYmY1YzJhOCwgMHg0ZmU0ZmU2OSwKLQkweDlkN2FlMTU0LCAweGU0ZWZlYjVkLCAweDU1NmYyMTczLCAweDVmNGZhZjhjLCAweGQ2MmM5NTZmLCAweGY3OGJkN2FmLAotCTB4YmM4NTMyZTMsIDB4OTdhZjgxMzAsIDB4MTJmOTcxMDYsIDB4OGFmMjg0ZjIsIDB4M2ViZTk5N2UsIDB4NWY3ZjFjNWYsCi0JMHg0Y2EyY2ZlNywgMHg2MjY5OWZjZSwgMHg3MjZkNGM5ZCwgMHhiZTkwN2UyMiwgMHg3ZjgwNjdhOCwgMHg0MjUxZDYzYywKLQkweGNmOTM0MDZmLCAweDBmZjMwNjdmLCAweGZmM2U5N2EzLCAweGQwMGYzMTUyLCAweGI4ZDg5ZTZiLCAweDliYjYzYTJlLAotCTB4Y2U5ZThhZDksIDB4MzkzM2YzMmYsIDB4OWFkZDljZGYsIDB4ZjgwY2RhOTgsIDB4NTlmNjBjZmIsIDB4ZmMwMDY3OTQsCi0JMHhhNzhkODcyYSwgMHg1ZTNlOGRmMywgMHhhNmNhNGZmMSwgMHhmZmExYmFlMSwgMHg4ZmFmZjYxMCwgMHg4ZmEwNTFmYiwKLQkweGM0N2NmZDhjLCAweGYzZTg3Y2I4LCAweGI4YjJlNWQ3LCAweDdjYjRjMTY2LCAweGRjZmJiNjI3LCAweGViODc5MTkxLAotCTB4NjY5N2UzZTYsIDB4MDdiZWY0YWEsIDB4ZGY3ODAzZmQsIDB4MzhhMjZjZDMsIDB4YWZiMTU5ZjUsIDB4MTVmNWJiM2YsCi0JMHgyZWJjYTJlNywgMHhkZTIyOWY3ZSwgMHhhYmIyN2ZjMywgMHhmZTc1M2NmYiwgMHg5YTY3ZTMwYiwgMHhiYmY2ZjE2NywKLQkweGNmYWMyMWE2LCAweDc1MmY5MjM3LCAweGM5ZmNlOWJjLCAweGRmOTAyNTM2LCAweDU1YTdjOTEyLCAweDM4YWQ2NzI5LAotCTB4ZGQ3M2U0NWUsIDB4NzE4ZjM5N2YsIDB4NWZmZjk0MTYsIDB4ZmYyNDgyOTgsIDB4NjY0NGVjYjUsIDB4N2Y4NjVkOTgsCi0JMHg2NWQ1MWIwYSwgMHhiM2FmMzYxZiwgMHg1MWNiN2I1MSwgMHhiZDc1MDc2ZSwgMHhhYWViZGJhZiwgMHhjNDI1Y2Y3OCwKLQkweDc5MzI4ZmY3LCAweGY1NmFjOTFlLCAweGY0MjczNmM0LCAweDM2ZTNlNjMzLCAweGZkZDYwZjNhLCAweDQyZDcwOWM1LAotCTB4OTVjNjBjNTIsIDB4MDgyYjRhNWUsIDB4MmU2Yjc3YjcsIDB4YWRmZTIwOWYsIDB4NzBkYjZkNjQsIDB4Yzc3MGIzZmYsCi0JMHgyMzQ3MzNmYiwgMHg0MmQ4ZmU5ZiwgMHhiNzBiMmZlNywgMHgxZmEyYjY0ZSwgMHhlMmYwZjJiZSwgMHg3M2ZmNDg1MSwKLQkweDVkOWVkYzc1LCAweDA0NzkxZGFhLCAweDc1NzNlOGZkLCAweGU3MTZiOThmLCAweDUzYzU3YmUxLCAweDg1ZjNjMmM2LAotCTB4YmU4OWYzYmIsIDB4NjZkYWEzZTcsIDB4ODBmMWRjMjIsIDB4YmRlMTFhYzQsIDB4NmU0Nzg3NzEsIDB4NzFlMDFiYmEsCi0JMHhiOGIxODE4ZSwgMHg0OTBlOGZjZSwgMHhmOGMzNjMyNSwgMHgzNzUzMDk2MSwgMHg5YjdlOGRkZCwgMHg3Y2EyYTMxYywKLQkweDVhZjQyNDdjLCAweDZiZDM4NThkLCAweGRhZmZlMDk3LCAweDc5Y2I5MmNlLCAweDM2NGQ0ZDcxLCAweDFjNzc5NzllLAotCTB4ZjgwYTdkMDQsIDB4OWJiYWIwYTksIDB4ZWJlZTM4NDIsIDB4YTgwZmI0ODksIDB4NTI0YjZkODIsIDB4OTM1YjlkMWMsCi0JMHhjYWMyYjRkZiwgMHhmNDA1YzllYywgMHhjZjBjOWVkYywgMHgxZWRhNWE0ZiwgMHg3YzljZjVjMCwgMHgxOWJmOTFjMCwKLQkweDE4ZGQyYjcxLCAweGJiZmI4OGI1LCAweGU3ZTAzNzI0LCAweGJlM2FmOGQyLCAweDBiZDQ3OWY0LCAweDRmZWM4YjNlLAotCTB4ZmQxNWJmN2YsIDB4NjI3ZmQ0N2MsIDB4N2Y2YTk3ZmUsIDB4ZDZlZDBmM2MsIDB4NzE1OWEzYTUsIDB4NWU0ZmZlYjgsCi0JMHgzZjQzYWE4ZiwgMHhkNzBiMTNlNywgMHhlMGZmN2E2NywgMHhlZTFjN2Q3ZiwgMHg2NWJmODEyNywgMHgzMmJmYzE4MCwKLQkweDFmNjdjMGMwLCAweDJkYjVmZDFiLCAweDMzYTdhZjM0LCAweGNlOTVmZThkLCAweGIyZWIxNWFmLCAweDA0ZjNjMjYyLAotCTB4OTllM2Y5YmEsIDB4NzQ0Nzk2YjcsIDB4MDI4ODBmZDksIDB4MzE4YzVkMTYsIDB4ZjZlZjhjMGMsIDB4NmQ4YmViZjksCi0JMHhkODM3OGZlOCwgMHhmM2FjMWI1NCwgMHgzYzc3ZTQ2MywgMHhlMjU5N2E2ZiwgMHhlNzNiMDBmYiwgMHgxZTVmOGZmZiwKLQkweGRlZmRjNDExLCAweGYwZTRmZmIyLCAweDEwNTMyNmIyLCAweGVjNGVhNTUzLCAweGZiNjEyZWRlLCAweDI1ZmZlMGE1LAotCTB4ZGJmY2MyOWEsIDB4MDFlN2JiM2QsIDB4OWEyYmIzZGIsIDB4YjQzMjViNmYsIDB4ZTc5NDcyYmYsIDB4MTJiNTQwM2YsCi0JMHg5ZGJlZDdlMSwgMHhmN2RmZmVlYywgMHhjMTc4ZjU2NywgMHg2YmJjNzRhZiwgMHhlYmJjNDM0YywgMHgzOWY3ZDZmOCwKLQkweDE0NWYwMjZmLCAweGVmZTE3NDE1LCAweGYyMGFmZjBiLCAweDdkZmIyZjY3LCAweDNhNjk3ZTU0LCAweGU0MzhlOGZiLAotCTB4ODY4YzQ3NjcsIDB4ZTZjYmYzNzIsIDB4NDhmZWE0YzcsIDB4NmZmMjk3ZjcsIDB4YWM3NTdlZTAsIDB4ZmNhMmEzMTIsCi0JMHg0OGRmZTE3ZSwgMHhmZDk3OGM4NywgMHg3NGVhNTRkNSwgMHgxMzY1ZTNkNywgMHhmN2ExNmE1ZSwgMHhmMTFlNjhiZSwKLQkweGVmNzgzOGRhLCAweGViODYyNTBkLCAweGY3Y2YwZjZmLCAweDY0NmZhNDg4LCAweGViZmRjN2RlLCAweDczZTIyNzQ2LAotCTB4N2U5ZjVkN2QsIDB4OWY1OWQzOTcsIDB4MTc0N2E3ZjcsIDB4MmQ1ZDcxM2IsIDB4NmQ3ZGY2NGYsIDB4NGZiN2QyMGMsCi0JMHhkYWZlOGE4YywgMHg3MWY3OTE3MiwgMHgxM2Q3M2Y2MSwgMHg0NzMxZWQxNywgMHgyZjlkMDA2NiwgMHg2MmUzOTgxZSwKLQkweGI2OTczN2EwLCAweGNmODc5ZGNjLCAweDUyNmViZDk3LCAweDVlZDc1ZmQxLCAweGZlZTI3MzJmLCAweGJiNzIwZmVhLAotCTB4ZGUxMmM1NTMsIDB4ZTQ3Y2UxMGIsIDB4Njk3YTg0YTAsIDB4ODM5YjI5NmMsIDB4NjQ4NmM3ZWQsIDB4YzY3ZTg2ZTYsCi0JMHgzMmZjZTBjYywgMHhjNDFjYjJlNiwgMHhlMGNmOWY4MywgMHg2ZTMzYzUzOSwgMHgwMzNjNTM0NCwgMHhiY2M1ZjVmZSwKLQkweGUwYmZhNThlLCAweGVmMWQxMDcxLCAweDljNmM3ZWZhLCAweDEwMzBmNzU4LCAweGYxNzdlMjQzLCAweDNmODhiOGJjLAotCTB4OGJjMGU0ZmYsIDB4NGJiZmIwYjMsIDB4Y2UyYTJjODcsIDB4MTY0MzhiZmIsIDB4ZWMxNTdmZWEsIDB4ZGUzMGNjYTMsCi0JMHg1ZjdjYTNjNSwgMHgxYTU0NzA4MiwgMHg3ZmRmMzNjYSwgMHhmYmUyNmFhYywgMHgxNjc1Y2E4ZiwgMHgzYmE2MzU4ZiwKLQkweGI1ODcxNjVmLCAweDNjMWVmZGMzLCAweDJiYjhlMzczLCAweGZjZWExZjA1LCAweGQ3YzNjYWJhLCAweDFjZWMwYWI3LAotCTB4Zjg5YmY3YWUsIDB4NmQzNTk2MzcsIDB4YzZmNWJjNDMsIDB4N2Y5NmRmYzcsIDB4ZmE4Y2IzMzMsIDB4N2I2ZjkzYTIsCi0JMHg1NzgxMTdlMywgMHg1YmU0N2Y5NCwgMHhlZDU2MmY5ZCwgMHg3MWVjZTdlNywgMHg5MTEzZjk0ZCwgMHhkMTNlNzRmZiwKLQkweDEyNjA0YmY1LCAweDVhN2I0MWNiLCAweDk4Mzk2NTYzLCAweDQ3MzAxMzk3LCAweGNhMTdhODZiLCAweGVkMDViNzE0LAotCTB4ZjZmODljYzAsIDB4MjNjZjQ0MTIsIDB4NGFiZjVjNTksIDB4MTk4ZjY2YzUsIDB4OGQ4ZDUxZWQsIDB4NzhiNzQ3ZjQsCi0JMHhjN2Q3MTY3NywgMHgyODNlNjQyMSwgMHg3OTUyY2NlZiwgMHhhNmFiMjViZSwgMHg4MjVlODU3ZCwgMHhlZDAwMzJlMywKLQkweGI4OWY1OTc2LCAweDQ5YTFiYTNmLCAweGQ5YzZlMWU5LCAweGQ5NzVmMDMyLCAweDMyMDdiOGI4LCAweDg3YmNjNjM0LAotCTB4NDQ3ODcyOGYsIDB4ZDQwYjQ4ZGMsIDB4YjMzM2QyY2IsIDB4Y2NhZTAwNGIsIDB4MGFjOTRjZjIsIDB4ZTFkMmY3ZWIsCi0JMHgxZWI4MDFjNCwgMHg5ZjE1M2U3OCwgMHgzN2RlMjhmZiwgMHhlYTI0NmIyMywgMHhmOWY0ODU3ZiwgMHg2MThlYTY5NywKLQkweGRhYmFkMzFiLCAweGYxZGQ3OTlmLCAweDVkZGQyZmQxLCAweGE1ODViYjcwLCAweGViMDg3OTZhLCAweDllZTVlNWYzLAotCTB4ZWMxY2NmMmMsIDB4MjJmOWYyMjcsIDB4ZGU1MmI2YzYsIDB4M2Y1ZmUwNWMsIDB4ZmUwNGZmNDQsIDB4OGY0MGVkNzksCi0JMHgyZDVmMDQzYiwgMHhhNDIxMmJiMiwgMHg1Y2IzYWIzMywgMHhjMDM3ZjRlZSwgMHg4YzVhNjAxNSwgMHgyNTliNzQ4YywKLQkweDM5MGVlNGY4LCAweGU3ZWY4MmQ0LCAweDgyZjU1YWIyLCAweDAzYTI1YzlkLCAweDVkZWRmNzVmLCAweGQ4MDYwM2FmLAotCTB4ZTAzZmJkMDUsIDB4YjAyZDJmODcsIDB4MTM2YmUwM2UsIDB4MTA0NmRmYjAsIDB4YjEyMDEzMWQsIDB4ZTk5OGY0MDIsCi0JMHgzM2ZkN2ZiNSwgMHg2MDEzNWJmNiwgMHhlNzg0NTFlZCwgMHgxMGMyZjUwYSwgMHhjY2ZhY2UwYywgMHhkOTU5NDM1ZiwKLQkweGUzMGMzOWM3LCAweDFjNTc5ZTFkLCAweGI4ZTgwNTIxLCAweGM0M2VmOWZlLCAweDFmODUyYmZmLCAweGM0NDU3Y2MzLAotCTB4YmU1NDFiY2YsIDB4NGIxYmU2MWUsIDB4ZTA4MGY2ZmMsIDB4YWNmYzRmYjcsIDB4ZjA0NDEzM2EsIDB4MGJlYzc2NzMsCi0JMHg3MGYxZTYxOSwgMHhjNDYxZWY5NCwgMHhhOWYzMWFmYiwgMHg5NDZlZjVkNCwgMHhmYTI3MWFkNywgMHg1NGZmOWYxOSwKLQkweGFjMzU1MGQyLCAweDNiMjRmZTExLCAweDVlZTQyMDk0LCAweGY1MDZkZDBhLCAweDhkYjk2OWFkLCAweDBhYjY2ZjY4LAotCTB4YzY5Y2I5N2UsIDB4ZDgxYzNmNjgsIDB4M2ZiY2EzNmMsIDB4ZWE3OGUzNzYsIDB4YTY5NzAwYzMsIDB4M2VlMWFlZGYsCi0JMHhiNmNmZjJmMywgMHgzYTA1MmU2NywgMHgzOGJkNDBkOSwgMHhhMTUzOWQ2MSwgMHhiNzU4MjJjZiwgMHhjZTg5NjAwNSwKLQkweDRmNDQ4MzgxLCAweGUxMzgwZmE4LCAweGM3YjRiNmY5LCAweDMxOWYzOTUyLCAweDRlYjVjYTJmLCAweGRkZWYxZDFmLAotCTB4YTM0MzAxZTgsIDB4MzNiNjY5ZGYsIDB4NzMyYmVlMGIsIDB4ZTUxNTAxZDksIDB4MjdjYmE3NGYsIDB4ZTAxYmMwNzYsCi0JMHhmZTZlMzI3YiwgMHg3ZmFjMWY0MSwgMHhlYjdmZmI5OSwgMHhhNjEzYWM0ZCwgMHhmYjM3NGViOCwgMHg5ZmY5MTZmNywKLQkweDgzMDE2ZTIwLCAweGY4YjAzOTdlLCAweGEyYzNkOWRiLCAweGUyMWM1NjgzLCAweDgxZTJlZDk2LCAweGNhZjUxZWUyLAotCTB4MjU3YWU4YmYsIDB4MWY5M2U1OWYsIDB4ZjE4NDRiODIsIDB4OTMzNjhiOTYsIDB4OGNiNzBhYTUsIDB4NmJiMDQ5ZWIsCi0JMHg5ZmViMTdjOCwgMHhjM2JiMjBjYSwgMHg4NTkwZmM2NiwgMHhmYTA3NjNiNywgMHg0YjZjYmYxMiwgMHgyYjBlODg5MywKLQkweGQ3OTQ0ZDliLCAweDNmYjliMzM4LCAweDhjZDU0MzczLCAweDNhNTRiZWU2LCAweGYzZDMyN2FmLCAweDJkZGU0NzRiLAotCTB4ZDM4NzdhZTQsIDB4ODkzM2U2NjksIDB4ZTg4ZjI4OTMsIDB4ZWE1NDQxOTksIDB4ZjgyZjU4ZjMsIDB4MTVmM2M3NGUsCi0JMHgxY2IzYzcyZiwgMHgxZTM3ZGRjOCwgMHgyZDVhMTNjZiwgMHgzZjI2ZTgyYywgMHgzNWNmZDc4NCwgMHhiNGFmZGUxMSwKLQkweDdmOTE5NzllLCAweGIxMzA0ZWU2LCAweGQxNGIwMGJlLCAweDQ5NmRjZjljLCAweDAxZWVlNjY2LCAweDlmNDEzNmJmLAotCTB4NzMzNDc3MjgsIDB4NmEwYmVkODcsIDB4Zjg4ZDljYTIsIDB4ZGE3ODBiMWUsIDB4OTc3MDFmNzAsIDB4MjcyN2Q3NjgsCi0JMHhhNzRlZDBjZSwgMHg4ZTgxM2NlNywgMHgzMzE1OTRiYiwgMHg5ZGRiMWQ3MCwgMHhiZjkxNWE1MywgMHhjMzNmNWExYywKLQkweGIxNDkzNmI4LCAweGFiY2MxZjIwLCAweGVlNjNkMjMwLCAweDE5NmMyMzVjLCAweDViZTkxNWZmLCAweDczZTM3OGNiLAotCTB4NWYwOGM3OWIsIDB4Y2I5OGU5ZDQsIDB4MThlOWMzNzIsIDB4ZmEwZjNmODYsIDB4MzYzYzU3ZTEsIDB4ZGVlNjNmOGUsCi0JMHg3OWUwMWUzNywgMHg3Y2MzZjg2MSwgMHgzMjI5MmI5NiwgMHgxNDdiNmZlMSwgMHhhZGUwMTdjNywgMHhhNjNjZjkxMSwKLQkweDU4Yjc4OGM4LCAweDdkNGYxMThmLCAweDQ4Zjg4ZDRiLCAweDliZDcxYWYwLCAweGE4NmU5ZTU4LCAweDM2MGRmNjRmLAotCTB4NTE1ZmY3ZDQsIDB4NTQwNzgwNjAsIDB4MWZiNDM1OGYsIDB4MDE5MjcxYjgsIDB4MzM0YzBiNGUsIDB4OWJhOGNmYjQsCi0JMHgxYWIzODA2ZCwgMHgxZmI0MzZlZSwgMHhhMTkxN2ZiNCwgMHhjYWI4MzczZSwgMHhlOGU0M2Y1MCwgMHhiNDNjMDM3YSwKLQkweGVkMGM5ZmU5LCAweDMxNmYzNzg3LCAweDc2ODdlN2Q0LCAweGI0NDdlYTFhLCAweDhmMDBjMGZlLCAweGQwYzI3YjZjLAotCTB4OGQ4N2Y0N2UsIDB4ZWQzMWZhODYsIDB4YzdlYTFhY2YsIDB4MDBjMTdjNWQsIDB4ZDU3OGU4NGYsIDB4ZWJiNmZlZDAsCi0JMHg0NGYwMGNjNywgMHg3ZGExYWVmNiwgMHgwMzdkZmRiMSwgMHgwZmZkNTkzYywgMHg5M2RiZmI0MywgMHhhN2VhMWJjZSwKLQkweGQ0MzMzZmJhLCAweDZhYjljZjRmLCAweDdmNmE2NzgwLCAweGI2YWZiNDMxLCAweGEzNjU0NmZhLCAweDI2NWQyYWZmLAotCTB4YzA1OWFhYjksIDB4ZWI0YWVhZTUsIDB4NzFjYTNiMWMsIDB4ZGZmMDM2NTEsIDB4N2ZjOWQ2MTAsIDB4ZDI5ZWQwZTMsCi0JMHg2MmE1ODU3ZSwgMHgzNGIyNjRmYywgMHhkOWYyNDQzZSwgMHhkZjcwZDI2YywgMHhlNGFmNjkxMSwgMHg4YzFlYmNjZiwKLQkweDRjNTdiMWFiLCAweDA2MjM0Zjc0LCAweDM2MWM4ZWNjLCAweDBlYzdhYzdlLCAweGI4MmVjNDFiLCAweDgwNmFhOTZmLAotCTB4ODY0OWJjMTMsIDB4NmVlNTg5ZjYsIDB4MmZiMjdkNDMsIDB4N2ZkZjUwYzcsIDB4MDc4MDY2ODUsIDB4ZGExOTE3NTQsCi0JMHgzMWU4ZGMwZiwgMHg1MjgxNjljMCwgMHgzYThjZmI0MywgMHg2YWNlMDFhZiwgMHgxZmI0MzcyOCwgMHhhODY3ZGZiNCwKLQkweDMwYWUwZGNmLCAweDVhMzkwZmQ0LCAweDM2ODc4MDZkLCAweDFmYjQzNDZkLCAweGQ0MzAxY2RlLCAweDBjZWE4N2U3LAotCTB4MWI1YTIzZjUsIDB4YjZjOGYwMGMsIDB4YTNmNjg2ZmQsIDB4ZWExYTBjM2YsIDB4MzUxZmI0YzcsIDB4ZDhiYjhmZDQsCi0JMHg3NDI3ODA2NCwgMHhkZmRhMWIzNCwgMHg4MDY0M2Q3NiwgMHg4NjkzYjIyNywgMHgzM2Y2YzVmNiwgMHhmYWIyNzgwNiwKLQkweGRiZmI0MzViLCAweGVhMWFjZTkzLCAweDE5MmZiYWE3LCAweDY0ZmY3NWVhLCAweGM2NTdjZTdhLCAweDk5NWZjMmU3LAotCTB4ZjBkOWZkYTksIDB4ODc5MjYwN2UsIDB4NWUwNDdmMjEsIDB4NmUzNTY5MzAsIDB4YTc2NmY2YzYsIDB4ZGU4MTdmMTMsCi0JMHhkMDkyOGY2ZSwgMHgzZTUyZjFiZiwgMHhmNDI2MWM1MiwgMHgwNGM2NWYwMSwgMHhlODU3YzQ0YywgMHg1YzUwNTdlYSwKLQkweGFmZTI5ZTI4LCAweDk4ZGM1YTY0LCAweDFmNzYwMzc3LCAweGI0ZTY3ZmUzLCAweGZiNzdmNDM0LCAweDI5NWRmOTc0LAotCTB4ZjZmODhmNWYsIDB4NmNkMWQ3N2UsIDB4ZGI2YmY2NDYsIDB4YTdiY2E5NDQsIDB4ZDlhM2MzM2MsIDB4ZWJmMjBlM2MsCi0JMHhkOTUzZGY2YywgMHhmOGJmYjgwOSwgMHhiYmY0MTRkOSwgMHgzNmMwYjI1NywgMHgyOTY0ZTc5YywgMHhkZTFkYTYyZiwKLQkweDhjNjUxZDNiLCAweDU0ZTVlODYzLCAweDZjMmRlMDNiLCAweDFhYTMyNzNlLCAweGIyNmUwYTUyLCAweGJmNmE5ZmRmLAotCTB4ZmIzYmVkNGMsIDB4MTMwZGYxMTUsIDB4NTg3ZDdmYWMsIDB4YmVjMjhmZmYsIDB4YWRiZjA2NDAsIDB4MDU3MjBmYzEsCi0JMHhmYzBmZWNiZSwgMHhmYzdiYzEyYSwgMHhmNWVmMDQ0OSwgMHhlZmRjYTliYiwgMHgwOWYyYTFjZiwgMHgwN2Y1NDZiZiwKLQkweDNmMDQ0NWZjLCAweDFjMTBmN2VkLCAweGQ5NTI5N2Y0LCAweGYzZDJmN2U4LCAweDgyNzJmZTQzLCAweDE5N2VjMDhmLAotCTB4N2ZiMGEzY2IsIDB4ZDg1OWYyYzYsIDB4NzNmZDYzMDcsIDB4Zjg0NjJmYjAsIDB4OTUwMGZlYTcsIDB4N2EzYWZlNGQsCi0JMHg4MWJmODJmZSwgMHhmYmZjOTdlMCwgMHgzZmI5ZmUwOSwgMHhmZmIzNjU0OCwgMHhmYWFmOTUyOCwgMHgzNWZlYTg5YiwKLQkweDZmYzEzMzdmLCAweDg3MDQ0M2Y4LCAweDFmMDRhZGZjLCAweDdjMTFiN2YzLCAweGMxMjFmZmMyLCAweGE5ZGJmYjZmLAotCTB4YTQ1ZmY1NmMsIDB4MDc3ZjFkZjIsIDB4NWZmMjlmZDUsIDB4OWU4YmI4MjcsIDB4MTIzODdmNDYsIDB4Zjg4YTlmOWYsCi0JMHhlMzdlMTMyYiwgMHgyYzNmYzE3MiwgMHhjYjhiZmI5ZSwgMHhlNWIwMmIzOCwgMHg5MzJkNmY4MiwgMHg3OGMxMGRjMCwKLQkweDQ2ZWNiZjYwLCAweDg5MWQ3YmNjLCAweDdjNDM5NTdjLCAweGZjNTZlYTc1LCAweDk4ZmRjOGY5LCAweGYxOWYwMjVlLAotCTB4MTMzYWY0ZmQsIDB4NzZlOGQ3OGYsIDB4ZTgxN2U0NWUsIDB4MDNjNTUyN2UsIDB4MDBiYjFmN2MsIDB4MjczYzVmZmMsCi0JMHhlZTI4Y2ZmOCwgMHhiNmE5NWVhZiwgMHg1NzNmYTBlNCwgMHhmMGQ2OGE2MSwgMHhmNTRhZTUxYywgMHg2MTBmYzgxZiwKLQkweDIyMGRkZTc4LCAweGI2NmJkZjcyLCAweGY2YzMzYjgzLCAweGJlZjAxNTcxLCAweDRlYWZkZTE5LCAweDU0ZjlhMzRkLAotCTB4OWQwYjU2YjAsIDB4MjNjY2NhYTMsIDB4MzNkZDVjODEsIDB4Zjg5ZDc3YzAsIDB4NDAzOTgwN2EsIDB4OTgyNTZhZmIsCi0JMHhmZjM4ZmI4ZCwgMHhmMDVmZGYwMCwgMHhhNWVhOTVmOSwgMHg1NDdlMTM2ZiwgMHg2NzBmY2U4ZCwgMHg3NzA5NDJkYSwKLQkweGE0ZTRmYzYxLCAweGRlYmZmMTQ0LCAweGYyMjU1MWYwLCAweDdmYWQ3YmM4LCAweGZhMGE1MmUzLCAweDkzN2ZhNWU1LAotCTB4ZDM5ZjQ4N2MsIDB4YzYzOTQ3MTYsIDB4Zjg4MzljMTMsIDB4YzgzOWQ0YmUsIDB4NTI2MzI4NmMsIDB4MzA0MThlN2QsCi0JMHhhYTM5M2Y5ZiwgMHgwYTAzMzVlZiwgMHg3NTlkZjRmZiwgMHhlYjRmZWU0NywgMHg4MWRmNDdkYSwgMHg5YmYwNTE1YiwKLQkweDQyZGI5OGNiLCAweGYzY2M4ZDc5LCAweGI4NWQ1ZTE2LCAweGJlMDhmOTkzLCAweGZjYTgwNThiLCAweDM1Y2Y4YTVlLAotCTB4MGZlNjI0NjgsIDB4OGRmNjA5MDUsIDB4YjRmNmE1YjUsIDB4YTU3OWM4YWUsIDB4MjA3YWUyMGQsIDB4NTBkOTkwNmQsCi0JMHhiOWY1NDg0ZSwgMHgzOTNmYmZiMSwgMHhkM2FmMzQzYywgMHhjNmNmNmU2MywgMHhmYWYzZTk3NSwgMHhkZjliYWE1ZSwKLQkweDRmMWQ2MDlmLCAweGY0ZmVmY2UzLCAweDRjMTc1N2ZhLCAweGUzZjlkZDE5LCAweDBhMTdjMDFmLCAweGM3Njg2ZjlhLAotCTB4MDZhNDFjZjAsIDB4YWZkZjA3NjQsIDB4ZjI4OWFlZjksIDB4YThiZTc1YjksIDB4YmUyMTgwYzAsIDB4Nzk0NGM5YjcsCi0JMHgwMjdjNWRmZSwgMHhiMGZiODFmYywgMHhmN2JhMGVmOCwgMHgwMTMyN2MwNywgMHg4YzZhYjlkNywgMHg1ZjgyYjAxNCwKLQkweGNjMWNkYTc5LCAweGYyYjlkMTM2LCAweDE1YzYyYjUyLCAweDdmMDNjNzk2LCAweDA3Y2VmN2E0LCAweDAzZmRjNTZiLAotCTB4ZDdmMDM5ZmQsIDB4MmZjZjQ4ZWQsIDB4MDczYTMxN2UsIDB4YzZmNTU1ZjEsIDB4YWJlMjM3MTgsIDB4YzA3NDBjYzYsCi0JMHg5MjNiZTM3ZCwgMHhiODU3ZjNjNiwgMHgwZGM2OTdlYSwgMHg5MzI2NzhhNSwgMHg0ZmUzMGQzNSwgMHhlYjNkNmQzMywKLQkweDdmODJlNWRiLCAweDRhNTkyNzRlLCAweGYxOWZkNDgzLCAweDQxM2VlNWZjLCAweDNkMDRmYmI3LCAweDY0ZmJhZmQ3LAotCTB4M2VmMzA0OGQsIDB4ZGQxMmVjN2QsIDB4ZmYzNmU5NWYsIDB4OTgzYzhmOGQsIDB4NTVjN2M2MTksIDB4NzhhNzY3Y2QsCi0JMHg1YmRmZDA3YSwgMHhkZjNhN2Y0NCwgMHhlZjg3NTY0OCwgMHhhZjNlMTJhMCwgMHg0NjVlM2U0ZSwgMHg3YzBiMTJmYywKLQkweDdjN2M0MTljLCAweDY3MTljZjAxLCAweDc3MzFkY2Q5LCAweDI4MGVkOTQxLCAweGZiZTk0MTA5LCAweDgxZjY5NTY3LAotCTB4ZTU0Njk4OGIsIDB4NzJhNWU2MTIsIDB4ZjkxZDkwMzksIDB4NmRkODFiZDYsIDB4NjJhZjdjNDUsIDB4NmQ3Y2Y0NGQsCi0JMHhmMjE3NjJkMSwgMHg4ZmIzMzJmMSwgMHgzMDZiYzlmNiwgMHg3ZGNmMTc1MywgMHgxMjQ5NDc1OSwgMHgzNmVhNGJjNiwKLQkweGU4MDQ5NWJmLCAweDdiYjBkMzliLCAweDY3NmZjNjMyLCAweDg1YmUxNzA3LCAweGQzMjFkOTY1LCAweDA1NWJjYzA1LAotCTB4Y2UyZWY4YjksIDB4YmQ1NGRkYWIsIDB4N2Y4YzFmYjUsIDB4YjcxMzczZjcsIDB4YjNlNzg3ZjYsIDB4ZjYwZjRlMjQsCi0JMHhhZTg3YTcyZSwgMHgwZGQ3MjIzNywgMHhlNDk5YjA3MiwgMHhlYjQzZDYzMywgMHgwNmE1OWM5MiwgMHhjMmQ4YTgzOSwKLQkweGFlZjhhNjNjLCAweGI5NGVmOWZjLCAweGZiZmQ1YTI4LCAweGU0YmZhOGZlLCAweDU0MTc4YTBlLCAweDQzOGI2MWJkLAotCTB4ZGM2MmFmM2EsIDB4ZjQ3OTMwMWYsIDB4MDdlZTg4NzgsIDB4ZDVmM2UyMzAsIDB4NzZjMzVhMmMsIDB4ZmViZTBhOWYsCi0JMHhiZTIzMDA3NCwgMHgxYjA0ZDRmZSwgMHhmZjJlODJjMiwgMHg5MmZhYTU5NCwgMHhlY2JhMzIwYSwgMHhiOWY5OTU3NSwKLQkweGIwMjc4ODYxLCAweDlmODlmYmU3LCAweGNiNmQzN2NmLCAweDFmYmQ0MzRmLCAweGM0ZmY0NTRjLCAweGFiNGRhY2YyLAotCTB4MTVkODMzNDksIDB4YWU5Zjc1ZjYsIDB4MTZhM2Q3MzgsIDB4OWM4YTg3MWUsIDB4ZWRlOGE5OTcsIDB4NjIzZmEzM2YsCi0JMHg5ZTAwYjJiMywgMHhiMzVjODA4MywgMHhmZGNmMjg1MSwgMHgzNTU3MjRhYywgMHg5NzhjNWE4OCwgMHhmOWJhZjI0ZCwKLQkweGZmYjFhYzM5LCAweGFkYmU2MmQzLCAweGRkNzFlNTdmLCAweGUzMDdhYzAwLCAweGUxYzdkZDI2LCAweGRkMTZjYTc2LAotCTB4MGRlOTBlMzUsIDB4OWE3MWEzMTcsIDB4ZWFkMTkxMDcsIDB4ZWQyOThmMWMsIDB4MzdiZmU4MjksIDB4OGU3ZWZiNDQsCi0JMHgzZmUzZDFmNCwgMHgzNWIyYmVmYSwgMHhiYTRjOTNlZCwgMHg1MmY2MzY5NywgMHgxOGY3ZGQwNSwgMHg4MGZiYTM2MywKLQkweGQ4Yjg4ODc3LCAweDJlM2M0NTFkLCAweDA3MWU4Nzc2LCAweDA3MTExZjFiLCAweGIwYzc4ODhiLCAweGM1YzczZGYxLAotCTB4OThjY2JkNzQsIDB4ZTRmOWMxNjYsIDB4ZDdkNGZmYjIsIDB4NWQxOGYxNGYsIDB4YWJiMzc2MGYsIDB4OGEzNjkwYjAsCi0JMHg2ZTI5YmI1NywgMHhjOTlmMTlkMSwgMHg0Y2Y4ZjJiNywgMHhkNWM1MzI0OSwgMHhlZTRmNDJhZCwgMHhhNGZkNzJmMiwKLQkweDBlNTg5ZmJmLCAweDNlYzMxODViLCAweDBkMzJjZWMyLCAweDAwZDUwOGZiLCAweDMyNGVhODBmLCAweGQxYjgxZmI0LAotCTB4MGI0ZmE4NmQsIDB4MzNlYTE4ZTQsIDB4OWMwMzM0ZWEsIDB4Njg2NDUwZDUsIDB4YzdiZjY4M2YsIDB4NGIwNmU3MDAsCi0JMHgxYzg3ZWQwZCwgMHhhMWUwMWFmNSwgMHhmNjg2ZTU0ZCwgMHg4NjdkOWJjMywgMHgwYWQwZmNmYSwgMHhkNjg4ZmQ0MywKLQkweGIyM2MwMzZhLCAweGZkYTFhMzZkLCAweDg2MDMwZmU4LCAweDc1ZWQzMWZhLCAweDE3NzFmYTg2LCAweDg0ZjAwYzFiLAotCTB4ZjY4NmZkOGUsIDB4MWEwZjVkYjcsIDB4MWZiMjI3ZWEsIDB4ZWQ4YmVhMWIsIDB4OTNjMDMzM2YsIDB4ZGExODVmZDUsCi0JMHhkM2VjMjUzZiwgMHg4NjJkNDllZCwgMHg1YzQ0MDdlNywgMHhhNGZiYWE2MiwgMHgzOWU5ZmRlMSwgMHg1M2YwMGM2NywKLQkweDg3OTQ2ZjQ4LCAweDg3OTI1NmY5LCAweGY3ODNmNTk2LCAweDA3ZmQwMDU1LCAweDE4NmIzN2FjLCAweGZkYTk5OWYzLAotCTB4YWIyZmQwZDYsIDB4NmRmYzQ3ZWUsIDB4NTJjZmUyOGQsIDB4OTQ3Y2I2YTQsIDB4ZWRjY2E3ZGIsIDB4NmQzZTU4NjksCi0JMHg3ZGMxNmY3MiwgMHg4OWY4YzY2ZiwgMHgyYWNlZjYxNCwgMHhjYjA1Yjg1OSwgMHg5YjM2MzM0MSwgMHg5ZjQwZGMxMywKLQkweGEwYjcwN2I5LCAweDY4YTkwYzk4LCAweDFlMDBiYjMxLCAweDE2ZWNlNGJhLCAweDhkNjFkMjE3LCAweGZjNDQ0YTQ5LAotCTB4YzFhYjQ4NmYsIDB4ODlhNmM0NzIsIDB4OGZkNDEyNTIsIDB4ODM1ODVkYWMsIDB4ZmQ3MTc1N2EsIDB4NjFjYjg1OTksCi0JMHhkODM3YTM1ZSwgMHhhMDlkY2Q4OSwgMHgzZTMwZGEwYiwgMHg2Zjg4N2IyNiwgMHhlMjliMDAzNywgMHg4YzhjMzYzYSwKLQkweDVkYmJmY2E2LCAweDM3MTkxNTYzLCAweGJhNzZiYjMzLCAweGI4NmUzMTZhLCAweDFkNDE2NzZiLCAweGFmYzBkYjk2LAotCTB4YWM2MjBlMGYsIDB4MmM3YWZjMGUsIDB4MWY1ZjgyNzcsIDB4Mzg2ZTg1ODQsIDB4OTQ1ODg3ZjMsIDB4YTllMDc1NTMsCi0JMHhkZmQ3M2MyNCwgMHhjZDUzZTkzZSwgMHhmYjBhZTFhYywgMHhlMzAxM2RjZCwgMHg4YjQ0MjdkNiwgMHg3MzdlYzdiYywKLQkweDdmNDI2NjI3LCAweDBmMDBhYjI4LCAweGRjZmE3MWY4LCAweGJlMWRkMjgwLCAweDJhM2JjNDM2LCAweDM3MmExNzA3LAotCTB4ZDdiZmExYTQsIDB4YzBjMGRmYWQsIDB4YzNlMjI3YjksIDB4YTI3ODA1ZmEsIDB4ZjVmYTZkZmMsIDB4Nzg1ZmIwNzgsCi0JMHhjM2RlNjNkZSwgMHg5ZjZlMWNlNCwgMHhmNTlhZTQwNywgMHhkN2NhMDIzYywgMHg5NDNhMmVlMiwgMHg4MGM0OTdlMCwKLQkweGQzMWZhYjllLCAweGY4MGU1YmVhLCAweDEzNmFkNTk1LCAweGY3MTYzN2RkLCAweDRkYTQzMDU2LCAweDVmMWJlMDcxLAotCTB4NzAwZjE2ZGYsIDB4NjRlZjc4OTIsIDB4OGUwZTZmOWUsIDB4NzJlMzgwYWIsIDB4OTI3ZjhjMmUsIDB4YzYxYzAwOTYsCi0JMHhiZjAwZmIxZiwgMHhmMzVkMmNlNywgMHgwZTY3ZGNiMSwgMHgyYzJmYTBjOCwgMHgwNjlhNjVjNSwgMHgyMGI5M2NlMywKLQkweGZiOWQzNjlhLCAweDIyZmY0NmFjLCAweGZjOWRlNDRiLCAweGZiY2M0NzNjLCAweGZkMGQxY2M2LCAweGY1OGI5ZmEyLAotCTB4OGRmN2VlM2MsIDB4ZmQ4MmQ4ZmUsIDB4NzkzMmEwYWYsIDB4NDBmOTg4NDksIDB4NTc5YTI5Y2YsIDB4Y2IwYWQ0YzMsCi0JMHg4Y2RhM2ZkNywgMHgwN2MwNGVmNywgMHg4YTNiNDI2YSwgMHhmOTg3MzdjZiwgMHhiODczMmIxYiwgMHg1YWY5NjI1ZiwKLQkweGE1YmFmOGEyLCAweDg1YzVhYmM2LCAweDRjOTE2ZjhkLCAweDRmZWQzZGQ1LCAweDEwNjVlMjM3LCAweDUxODZhZjdjLAotCTB4NDlmOGU1YmQsIDB4YWM5ZjRmYmEsIDB4NTI5Njk4MzUsIDB4ZTc4NjIxM2YsIDB4M2Y4ODRhMjEsIDB4NGQwNWE3ZWYsCi0JMHg5MjNlMDA0YiwgMHhmZjdjMzZlMywgMHg5ODEyZGZhMSwgMHg0ZmJjNzg3ZiwgMHhiZTYxMzZhZSwgMHg2YWE2ZTI0MiwKLQkweDUxMjFlMjEzLCAweGJlNzg2YWY1LCAweGMzNWVkY2M4LCAweGM2ZTI3NWY5LCAweDFlM2ZhM2I1LCAweDZhZjZmMzgxLAotCTB4OTk2MTA3OTgsIDB4Yzg3ZGYzYWUsIDB4OWNiNTQ0OGUsIDB4NzAzMjYyZDcsIDB4ZWE1ZWUyZGQsIDB4MTMxNmI3NTUsCi0JMHhmNDNhYzNkZiwgMHhlN2U3Njk1MiwgMHgzYmQ1YmQ1YiwgMHhhNmE5ZGUwYiwgMHhjNTAyZDdiYywgMHg0ZjU4NDc4ZCwKLQkweDA3ZTUyYmU1LCAweDIzYjNlMDdiLCAweGE5MmZkYzM5LCAweGEzZTcxYTc3LCAweGMyMTdlN2U4LCAweDE5NTU1YzZlLAotCTB4NmY0MjViYjcsIDB4NjFjYjFmZGMsIDB4ZjNmYjlmYmQsIDB4Y2RkOTEyMGIsIDB4NDRkZmJiZTYsIDB4NWMzYWIxZTcsCi0JMHhkZTIwZTMwZiwgMHhkOGI0NmZlYSwgMHg5OGY1NmYxMSwgMHg4YmY2NDE2NywgMHhmYTdhZGQ5MSwgMHg3NzA3Mzk4NywKLQkweDRmZjNiYTlhLCAweDg5MDAzOTM3LCAweGJlNDAyOThiLCAweDAxYWMxYjNjLCAweGFkZjIzOWZjLCAweGNhNjlmYTFhLAotCTB4ZTg0Y2NiODMsIDB4NmFiMTI0MGIsIDB4NDY1MjE4NGEsIDB4YzNjYWI0OTYsIDB4NzJiZjMyNmUsIDB4ZmEyN2ZmMjMsCi0JMHg2NGMxZjI4YywgMHgzN2RkMzI1ZiwgMHhmZGQ1NzQxMCwgMHg3NDc0ZWU4MiwgMHhkZTIwNjYyNywgMHhlNTc5ZTVkZiwKLQkweDg5ZGNkM2ViLCAweDVmOWQ0NzQ4LCAweDYzZmM5ZmQ3LCAweDBlOGMyZjk0LCAweDJlN2UwODFmLCAweGNhMTIwZDYyLAotCTB4NDRkNjU4ZWIsIDB4NDZkNjc4ZTUsIDB4MDc1ODc3ZTUsIDB4Y2FhNjFlOTUsIDB4MWE2MjRlNTgsIDB4NGJjYzI1OTUsCi0JMHg0ZDU2MTRlNSwgMHhhMDZiMjk2NSwgMHhhMjZiMWE3MiwgMHhhMzZiMDY3MiwgMHg1NDUzZjYxMiwgMHhmYjRhOTk3YSwKLQkweDU3ZTBkOWJlLCAweDc5OTczOTYwLCAweGFhYzc5Y2E5LCAweDdjODBiY2E5LCAweDY3MmRmODBlLCAweGNkZGYwNDBkLAotCTB4MDY2Y2E4OWEsIDB4ODQxZWUwM2QsIDB4OTUzYjA5NzEsIDB4YzU5ZTgxYWYsIDB4MTI3ZjBkZjIsIDB4OWJiZjIxOTUsCi0JMHg5NzE4NmRiOSwgMHg4NGYyYTFjOCwgMHg2ZGYyYTM1ZiwgMHhhZDk1MTE3ZiwgMHg3YmI1MGY3ZSwgMHhlNTRhNWZjNywKLQkweGNhOTdiZjI5LCAweDJhNzJmZWQzLCAweDZhM2VmY2RiLCAweDA1N2Y5ZWY3LCAweGFiZjgxZjk1LCAweGZmMzdmY2E5LAotCTB4ZjQzZjJhNDYsIDB4NzdmY2E4MDcsIDB4NTk5NTFkN2YsIDB4MDZmYjQ2NTYsIDB4OWZjYTEzOTYsIDB4Mzk0OGY0MGQsCi0JMHg4MWI4ZjU2ZiwgMHgxY2I5MDVhZSwgMHhlNjNkYzc4ZiwgMHhhNDc4ZGM4NCwgMHhmZTMwY2NhNywgMHgyNzFjOTRhYSwKLQkweDY2ZGM1MTI2LCAweGU3NTdiZmJhLCAweGEzMTZjNjNlLCAweGZkY2QzZTNlLCAweDgzYTI0NzQ4LCAweGUxYTU1NGZjLAotCTB4YzhiY2MzMDQsIDB4ZDRiYjUzNjYsIDB4Y2Y2YjY4MDcsIDB4ZTdiNWNmZjUsIDB4OGQ3ZjFkODIsIDB4MTBkMWY2ZDUsCi0JMHgwNzYzZGRhZSwgMHhhNWI0ZjQ3YiwgMHg1MDQ3ZmFhZCwgMHhmMzc4ZmQyZiwgMHhjZWQ4M2I1YywgMHgzZWY3OGViMSwKLQkweDU0YzM5NjdiLCAweGFiMDRlNjNmLCAweGU2NzYwMTUxLCAweDU3ODNkZjZlLCAweGE4MWU3MGIyLCAweGJjN2U5M2Y3LAotCTB4NGNlNmVlNjMsIDB4MjdkNzI3OWMsIDB4NTAwZDc3YjAsIDB4ODUzYWQ1ZmUsIDB4MWJmMmFmZjIsIDB4YTFhM2U1OGUsCi0JMHgxNGFkNTMxZCwgMHg2YjBiZGRhMCwgMHhkZThhZjE0NywgMHhlYmQ2NDVkYSwgMHhlOTU5M2RlZiwgMHhmNTBmMTA5MiwKLQkweDAxZWRhMDdmLCAweGU1MDhjOTRiLCAweGJjMmM1YzYzLCAweDFiYjdmMzVmLCAweDE5Mzc0OTlmLCAweGU5OWRiYzNmLAotCTB4Y2M5ZGZkMjYsIDB4ZmVlNmE0ZjMsIDB4OTFlN2MwN2YsIDB4ZmFmOTZkZmMsIDB4M2JlOGNmZjgsIDB4MGEyM2FjMWYsCi0JMHg5NjMxYmJlNSwgMHhmMDBlOWZlYiwgMHg1NWZmNzE5YiwgMHhjZGZhZTAyZiwgMHgzNzQ3ZTRlOSwgMHhkZjczNzllYSwKLQkweDMxYmVhOTkzLCAweDhhZDJiYjVhLCAweDhhNGNlNmYwLCAweDdhYzdkNDg3LCAweGZkYjE3M2EyLCAweDQzZDI3NGQ2LAotCTB4ZTUxODdkMjksIDB4ZGVkMmVkYmQsIDB4NzI2MWRkNTYsIDB4ZWI5NzM1M2YsIDB4MzVjMjY1NWQsIDB4OGJlYTMxNzUsCi0JMHg4ZjBjYzllZiwgMHhlZjdlMDdkYSwgMHgwMWRiZDY4MywgMHg2NmFkZWU2ZiwgMHhjYzUyOWVmYSwgMHhkMTRhMGY4NCwKLQkweGM5MzcwNDJlLCAweGYzYTEyNGEzLCAweDNhMmZkNTE4LCAweDVkYmFmYjgyLCAweDFiM2EzNTlhLCAweDUxMTA3YWU4LAotCTB4OWQ1ZmZlODcsIDB4NGE1ZmZlNDIsIDB4N2UzZTUwZGYsIDB4Y2NhYjZhNTcsIDB4ZjUyMmQ3ZjMsIDB4YmUzMTZlZGQsCi0JMHg4NmQ4NTFkOSwgMHg2ZjlmYWRlZiwgMHhhNGJjNjM3NywgMHhlZjU4ZmQzNywgMHhmOWUzZTQwZiwgMHhiN2RhMmJiNywKLQkweGFjM2M4MTkwLCAweDdlM2U3ZGM4LCAweDJlMTUzODJiLCAweDFlNmJmNzI3LCAweDE3MzYzZGNjLCAweDhiZDU0M2VmLAotCTB4ZjFhZGQ4YmMsIDB4OGFkZWZhNjYsIDB4MjgzYWUwNTIsIDB4NThhYmY1ODUsIDB4YjNiMjZlNDMsIDB4NjJjNzIxNjYsCi0JMHg1MjNiZjUzZCwgMHhmYmI4ZWYyOCwgMHhkN2Y2OGQzYywgMHhjMjNjYzFhMSwgMHg4OGJkNzRmNCwgMHgzNzhlNzQ1YiwKLQkweDI5NDFkZmEyLCAweGQ4YTdhZTJjLCAweGE3OGQxYTQyLCAweGJjN2QzM2RiLCAweGYxYmRmZjlkLCAweDRmN2M4OTc2LAotCTB4MjhjNzNjN2QsIDB4ZDYxY2ZhZTMsIDB4NDM5ZjVhMzYsIDB4NzhmYTQxZjgsIDB4M2Q3ZDcwYmIsIDB4ZTM3YzhkZTQsCi0JMHhmMGJlYjg3OCwgMHhkNzFiNDZmMSwgMHhkMWI1YjBlNywgMHhmNzEyMWNmYSwgMHhkYmM3M2E2YiwgMHhiZDc4ZjNkOSwKLQkweDIyMzdiMzhkLCAweGY3MmY0ZmZmLCAweGRjMTNmZjBhLCAweDE4MGU3NjQzLCAweGY5YzZjNTM0LCAweDMzMGI2OWY5LAotCTB4OTJiYzAzOWMsIDB4MWZmM2VkY2IsIDB4NTk1ZjM4ZjIsIDB4Yzk3YWUzNmUsIDB4ZmRkMmIyZTIsIDB4OGJhZTg5YTQsCi0JMHg5NWFmOTFiYiwgMHgxNzNhNjYzZCwgMHgyNmRmZTI1MywgMHgzYzRlNGIzZiwgMHhhN2RhMjRjNSwgMHhmZTdjMjZiMiwKLQkweDE3YmY4OWI0LCAweDk4ZjZiMDQ4LCAweDVmZDdiMzY3LCAweDJjMzMzYTM0LCAweDU1YTg5ZGFlLCAweDZiNmYzMDliLAotCTB4ZTE5NWFiYTIsIDB4NmYxMjgwMzksIDB4ZjEyYmY1YTUsIDB4ZWExNDYwZjYsIDB4ZDgwOThkNWYsIDB4ZmU4M2VjMWEsCi0JMHg4YmRmNTBjNCwgMHg5NzRmMzBiOSwgMHgxNWM1ZTVjNiwgMHhmOTg4M2Q2ZiwgMHhkMGU1ODk1NCwgMHg5ZTNlMTg2ZiwKLQkweGU0Y2M3YzE2LCAweGIwYjJiNGY2LCAweDc5MWQ0MmZiLCAweDVjYmExZjFjLCAweGMzNmZjZTQ3LCAweGM2ODc4ZTYwLAotCTB4ZWEyYWYwNDksIDB4OGUzYzMxY2QsIDB4M2Y3MGZhNzMsIDB4N2FjY2M3ZGEsIDB4ZmI4M2RhMzQsIDB4MDYzYmQzZmMsCi0JMHg3M2JjMTA5NywgMHg5YzAxZTUyYywgMHgwYTc2M2MzZSwgMHhlZDY2NmJlZSwgMHhkODI2NjY5YywgMHgzZTMxNWFjNCwKLQkweGRkZTc2YjMzLCAweDkyOWU3YzY2LCAweDFkZmU4OGMxLCAweDVmYTRhZDY3LCAweDI1NWNlZDY3LCAweDE0ZDNmZmRhLAotCTB4MGU2NDVmNmMsIDB4MWFlMzA0ZmMsIDB4ZWQxZDBmNDUsIDB4YjE5YjcxODMsIDB4NjNmYTE3OGUsIDB4YmVkY2RhNzksCi0JMHg3NDc3YmYwMSwgMHg4NTdlY2E4NywgMHg3Mzc3OWJlZSwgMHg3ZDRkMDM5YywgMHgwYjc0OGVkOSwgMHg5NzdlYzVjNiwKLQkweGU2OTdjZmNiLCAweGU3ODU4ZjMwLCAweGVlMjk3ODhkLCAweGRiNjhmZTMwLCAweGZjODJiYzcxLCAweDYyOGVhNjlkLAotCTB4MzRmNzZlM2MsIDB4OWNiMDI3YWIsIDB4Yzg0YWQyMTQsIDB4OWVmNTZjMmQsIDB4NWI0YTcyYzAsIDB4YmJiYTA5NzUsCi0JMHg5YzM2MWZhNSwgMHhiODYxYjJjMCwgMHhkZjg4NzdlZiwgMHgyYThlMGZjMywgMHg0OWM2MDY3OCwgMHg2OGRjZWVmZCwKLQkweGI3ZDI3N2Y0LCAweGE0MWU0ZTg0LCAweGVlODViMWI4LCAweGYyMmRlZGI5LCAweGRlMzA0OWQ2LCAweDhlZDdiNzVlLAotCTB4N2M2ZjY4NzYsIDB4NmJmNDk5YmEsIDB4NWEwYWY1NmMsIDB4ODY2ODgwZTcsIDB4ZmFhYmRjZWIsIDB4NmZiZmQwYTIsCi0JMHhlZjQ2ZTcxNCwgMHgyYzQ3MzFmOCwgMHg3ZjM0NzllYywgMHhiZmUwOTlmZSwgMHgxZWQ3YWFhZCwgMHg1MmEwNzI0YiwKLQkweGZjMjI4M2JlLCAweDQ5ZTY3YWI0LCAweDNiMjg0MzQyLCAweDFiOGM0MTNjLCAweDNkNzBmNWVlLCAweDdlZjg1MDFlLAotCTB4MDM2ZjliMTksIDB4OThhZThlYmYsIDB4MjllOGJiOWEsIDB4N2YzMWIyNmIsIDB4ZWMxYmRjMWEsIDB4NTBlZDE2NTcsCi0JMHg4ODNmYTIxNywgMHgwNjExNmVkNywgMHgxM2JmYzFmYiwgMHg3NDNkYjhjNCwgMHg2NzNhMmUyOCwgMHgxNzJmZTdkMCwKLQkweDdjNjE3ZjQyLCAweGFkOWZmMzg2LCAweDhmYTdiZDc0LCAweGY2MTYwZWFiLCAweDVlZDNmMDQxLCAweDlmNGZlZjFmLAotCTB4Yjc2MGVjNmYsIDB4NzMxYjVlZjgsIDB4OTIzZTcxOWIsIDB4YzNhYzBmOTgsIDB4YjA5ZjM2MWMsIDB4Y2ViZWI0NzYsCi0JMHg4OTJkMzM3OSwgMHgzMGY1OWZkZiwgMHhiOTk2YWY3ZSwgMHgzYmY1YjBlNSwgMHg0NGJiNWU2ZCwgMHgyMmFjZDA3NiwKLQkweDMzMzQzYWZmLCAweDI4NzA0YmRkLCAweDA0ZmJhNzNmLCAweDFhYzhlYjkxLCAweGRmNjllM2NjLCAweDA1MWY2MTk3LAotCTB4NzlhNjk5ZWIsIDB4ZjdlNWNhMTgsIDB4NTVmOTBmNTUsIDB4NzhlNTgwYjIsIDB4ZTNjOTg3ZWUsIDB4ZDg0YjMxMjcsCi0JMHg0OWY4ZTU3YSwgMHhiNDFhNmVkNCwgMHhiNGU3ZjhjNywgMHhmMjFhM2VhMiwgMHg1NGQ2NzRlYiwgMHhjMTdkZjJhYiwKLQkweDVmOTg0Yzg5LCAweGZjODY2MzE2LCAweDRmYzA1OTc0LCAweDk2NTBiZjk2LCAweDcxYWJjNmU2LCAweGU4MzkyZDBkLAotCTB4OGNiMDNkMTcsIDB4ZDc2YThjZjIsIDB4ZjljNTZiNGYsIDB4NmJhY2U1MjYsIDB4ZWY3YTgzODksIDB4MmNlZTljNTcsCi0JMHhmYjBkYzc5ZiwgMHg3OTBkOTFlZiwgMHgwMDJiYzljYiwgMHhmNzVmM2YwZSwgMHgwN2UwNjExOSwgMHhhZjlkN2I0MywKLQkweDhhYTk1MzE0LCAweGNmYjk4NDdlLCAweDMwNTlkZDhkLCAweGVkYzlkOTdmLCAweDZjYjg3ODM3LCAweGYyZjEwZjZlLAotCTB4ZjAyNTdjNmUsIDB4YzY2N2QzYWYsIDB4YTdjMjRjZTAsIDB4YjNiYzcwYWMsIDB4Mjc3ZWNkMGUsIDB4MWJmMTEzYTcsCi0JMHhkNWUzMDlmZCwgMHgzZTYyZDg4MCwgMHgxNDg5NGQ3ZCwgMHg4ZWExZmJjNCwgMHgwMTJjZjZjZSwgMHhhNzQ5MWFlOSwKLQkweGVlYzc1Yjc0LCAweDk1N2Y1YzJjLCAweDIzZGJmMjk5LCAweGM0N2UwYWYxLCAweDY3Yzg2OTlkLCAweDFlYTllMjZiLAotCTB4M2FiZTUzOWUsIDB4ZjY3NTIyNjYsIDB4MWIwNGY1MjMsIDB4ZWQ0ZGYxZTksIDB4ZGRjMTYwOWYsIDB4ZjhkNjRmM2MsCi0JMHhlMGJlMjkzYywgMHg4YTQyOWM5ZCwgMHhjYzljNjg0NywgMHgwZGFjZmFjNiwgMHg4YzYyYmE0NiwgMHhhMjc4ZjUwOSwKLQkweGI0YTE4MmM2LCAweGI0ZTdhNzViLCAweGE2MTJjNmY4LCAweGNlYWJhNzc0LCAweDdiN2QyOTc3LCAweDEwZjJmM2Q2LAotCTB4ZWEwM2IwOTMsIDB4ZjNkNDFjYjQsIDB4ZmZmMjY2MDksIDB4ODRlNjA5YmMsIDB4ZDZmMDdkZjAsIDB4NzI1ZjdjYzEsCi0JMHhlOTBhMmJkYiwgMHg0ZWRlNzY2ZiwgMHg1MGI0ZWZmNywgMHgxM2Y0MWY1YiwgMHg5MzMzNWQyNywgMHhhOWQ2ZmU3ZiwKLQkweDgzNGQ4ZjYzLCAweDk2YWZmMjcyLCAweGM5YmI2MWQ0LCAweGJmNDZlZGIwLCAweDM3MmJlODYyLCAweGJmMjYyYzQ2LAotCTB4ZTUxNzJkYTUsIDB4M2ExNjU1ZjUsIDB4YjFmNjgyZDksIDB4ODI3MTQyZDUsIDB4NTM2ZjlmY2QsIDB4MzVmZDIxMjcsCi0JMHg3ZDNlNzE0NiwgMHhiOTgzMjNkYywgMHgyNWE1ZmE5ZCwgMHg5YTdkMjVlMCwgMHg3ZTQ2YjMyNiwgMHg2YmUzNzY1ZSwKLQkweDNlM2M0ZTlkLCAweGIyYzc3OTQ0LCAweGFiZGRhZjg5LCAweGJkOTM1NzU1LCAweDM2NjNjOTRjLCAweGFkYjdjNzhhLAotCTB4MjFiYzdiMjQsIDB4Y2NiY2ExOWEsIDB4NDFlZTliNTYsIDB4MTc2NWY2NzgsIDB4YjM3ZjQzMzMsIDB4MjE2NWI3MzUsCi0JMHgzZjA5MWY5ZSwgMHg1OWFhOGU3MywgMHg2OWE5NjIyNiwgMHgzZjlkYjlmYywgMHhlODdhYWI5ZiwgMHhjM2NkNWNmOSwKLQkweGJmN2MyYjlmLCAweDY4MWFhNzdmLCAweDc3N2Y0M2YzLCAweGVjNmU3MTJhLCAweGNiY2Q0ZWVmLCAweGE4ZGJhZmViLAotCTB4ZmZlYzE0ZmUsIDB4NDdiNGVmZDAsIDB4ZWJkNDU0MDUsIDB4ZmNjZDE3MGQsIDB4NGQxN2NlN2MsIDB4Mjk1NWJlZmMsCi0JMHhmY2UzNzU2OCwgMHg0Zjc0Y2QwYSwgMHhiYTI0ZmMwZiwgMHhmNTRiYmQ1ZiwgMHg3ZGVhZmRkMiwgMHgwODhjOTdjYywKLQkweDM2NzBiNTdlLCAweGM2YWZkMWY5LCAweGQ1ZmVlOTliLCAweGU1MzMxZWFiLCAweDY0MmEwNTgxLCAweGYwNTIxZjdlLAotCTB4MjllNWFiZDEsIDB4OGU5NjdlNzQsIDB4ZGQ3YTQ0YzgsIDB4NjQzZjI3NjMsIDB4NjI0NDFlMmIsIDB4ZGM3ZWYyZmIsCi0JMHg3ZmRjYzg1ZSwgMHg5ZTJhM2ZkOCwgMHgyYzZkM2JkYSwgMHhlMGY5MTRhZSwgMHhmMmY5NGNiMCwgMHhlM2NmMWZkZiwKLQkweGY0YTFmMjk4LCAweGFlNmJmYTIwLCAweGNiYmNhMzBhLCAweDNmMzg5Mzg1LCAweDM5NDU0YzY4LCAweGM0NjlhMTk4LAotCTB4OTg3YjM1ZjcsIDB4ZGM5Mzc2NjYsIDB4NTc0MGZiZDMsIDB4YzJhZWU3NWEsIDB4MjJmYTRhZjcsIDB4MjRkMzQ2YmMsCi0JMHg3ZDA2MTgyZSwgMHgxZWY4NTM1MSwgMHg0Y2NmODNjNywgMHgwYWJiZWZmOSwgMHg0OWJlZmJjNSwgMHg1ZDdjNzA4NywKLQkweGY5MGIwN2NlLCAweDc3NGFmNWQ0LCAweDNmNTFhNDNkLCAweGRhNDlkODhlLCAweGMzMDY4MDRlLCAweGZiZmYyODAwLAotCTB4ZjUxY2YwYWQsIDB4Zjc0YzljNDIsIDB4Y2ExNzA2YzYsIDB4OTc1ODc1MjEsIDB4N2U4YjI3ZGMsIDB4OTRmOTBiMDcsCi0JMHgyY2U1MWE4ZiwgMHg3ZTExOTBlYiwgMHg3ZWVmYzg1YywgMHg2MmZiOTIxNiwgMHhjZThjMGRiZiwgMHgxODM3ZmFjZCwKLQkweGM3Y2VjMWRiLCAweDUyMmM3YTg0LCAweDNmMGJhZjhlLCAweGRkMGYxMjMzLCAweDc5ZWJlY2YwLCAweDBhZWI1ZDlkLAotCTB4YmFkMzY1NDQsIDB4NDI1ZDdjY2MsIDB4NWIyYTY1ZGYsIDB4MmFhNjc5ZTgsIDB4MTc5YzZlNmIsIDB4ZDcwZjc4NmIsCi0JMHgwYzkwZmZkZiwgMHhhYmQwMmEwZSwgMHhlMzFiM2NkMCwgMHgzMjAyMzMzYywgMHhhYzk5YmJhOSwgMHgzN2M1ZjQ4ZCwKLQkweDg4YWI3YmFkLCAweDMzYWU0NTczLCAweDA2ZGI3ZDcyLCAweDY0YmY1YzRiLCAweDM3ZTRiY2Y4LCAweDM3ZTRjYjI1LAotCTB4NjMwM2Q2NTksIDB4ZTU2YmM3MGMsIDB4MjNiNzlkZGUsIDB4ZWVjZTg3NWQsIDB4NTlkYTA0MzMsIDB4NjJhNTU4MWYsCi0JMHg3YTE1NWE1YywgMHhjNGI1ZjJjOSwgMHgzYjYxZWJmOSwgMHg3MTI1YWJmMSwgMHg3ZGY4NGU0NiwgMHgyNGRhOTE5YiwKLQkweDUxYzUwODc1LCAweDg0MWM5ZWFmLCAweDJkNzdjNzcxLCAweDNkNDhmZjg0LCAweGM3MDg2NjM3LCAweDYzNzY5OGYzLAotCTB4OGJiOGU0NWUsIDB4N2M3OTExZDEsIDB4ZGJjOGJjYzYsIDB4Yzg4YmY3YWUsIDB4Yzg4OGNiZTMsIDB4YTg2MjFiZTMsCi0JMHg4ODhlYWM5ZiwgMHgxNzFiZTNjOCwgMHg2YzU3Yzc5MSwgMHg0Y2U3YTc4MCwgMHg5YmUzYzg4ZiwgMHgyOGVmODA2MywKLQkweGJlZDBjN2JhLCAweDUwZDhiM2NjLCAweGI1NzRhNzNmLCAweGVmNGVmZWExLCAweGFlZjgwNmZkLCAweGVkMGQ4N2YyLAotCTB4MGM2YWZiZTcsIDB4NzhhY2Y3ZjUsIDB4ZmEwZjUwYzQsIDB4NzNiOGM3YTIsIDB4ODdhZTEwZjEsIDB4NmQzYzkzNmIsCi0JMHgxMDMwODFmNCwgMHhmZTBmNmY3OCwgMHgxZGNhYTQ4MCwgMHhkOWM3ZjZlMSwgMHg1NmEyZmVjYiwgMHg3ZDI5ZTNkMCwKLQkweGUyNDgxMjdmLCAweDhmMTE2NjcxLCAweDEwYzQ3NzA1LCAweDlkOGQwZGFmLCAweDUxN2RjNzY2LCAweDQ0NGI0ZDlhLAotCTB4Y2Q3ZWNlYmIsIDB4NTg1ODA2ZWQsIDB4YzRlNmY5YzMsIDB4ZGRhOTRiMDcsIDB4M2E3NGQ4ZmEsIDB4ZmMwMjc5ODcsCi0JMHhjMGU4MWY2YywgMHg3N2NmMjBkYSwgMHg2ZjAwMTdlOSwgMHhhYmY3OWUxYywgMHhmNWRhMTI4NSwgMHg3OGE1NmViYiwKLQkweDU4M2NlNzZlLCAweDU1NzdmNTI5LCAweGYzZWEyZjljLCAweDQzZjE4ZmRjLCAweGVjZGJlZTFiLCAweDU0Y2YzMjU0LAotCTB4ZTI4ZTNmMWUsIDB4ZTk3NTFlZWQsIDB4YzMxYTk2ZTcsIDB4ZDY0NTFkN2UsIDB4MTY0YmU1MDAsIDB4MzBhYzViMDYsCi0JMHg4ZmQwNWFkZiwgMHg5Nzg0OWFmOCwgMHg1NWRkYTFlYywgMHgzZGU5YmI0NSwgMHgxMjdmMWFiMCwgMHg5NjUyMGZkZCwKLQkweGU4MTYwMjg0LCAweGJmMjdlYWIyLCAweGYwZTNlMWY4LCAweDE0NjNlMmJlLCAweDI3Zjg3OGE3LCAweDdlMjFmY2JmLAotCTB4YzQzZmM0MDcsIDB4Yzg3MTc0NGQsIDB4ZWVmYmNmMWMsIDB4ODc0YmE3ZmQsIDB4YmFjNjVmNTEsIDB4NjQ2MjVlZTgsCi0JMHg5YjdkZTI3ZCwgMHgyNmViN2FiZSwgMHgzYzE2ZmJmNSwgMHgzN2E1ZGJmOCwgMHg4ZGRlZmY3YiwgMHhkNTg2Yjc2NywKLQkweDU5N2YzNmY3LCAweDYxM2NjN2U5LCAweDM1NmE5MDdjLCAweGNiZDVjM2RlLCAweGFhYmUwYmVmLCAweGY4YTU2YjFhLAotCTB4NTdjOTJjZTUsIDB4ZTVmY2YyOGYsIDB4NzA3YWZmZDgsIDB4NDVmN2JjM2IsIDB4NzE3YmI1YzksIDB4YmZjZjA3N2YsCi0JMHgxZGExY2Y4ZiwgMHg5NDhiZjVlMSwgMHgzY2Y4YTkyYiwgMHhmZmY4MDg2NSwgMHg1OGEzNjc2OCwgMHg2ZjdjZjk4ZiwKLQkweDhiN2VlMTBjLCAweDQxZDE1ODljLCAweDJiMDRmM2ZiLCAweGY2NWM4N2M1LCAweGVlM2ZhM2Y5LCAweDQ0NzM1OGNiLAotCTB4ZjcxZWEwYmMsIDB4ZjdhNzYwZTUsIDB4MWU4OGY4OGEsIDB4ZjQ0MTdmMmYsIDB4OTI5NDQ0NzMsIDB4NDFjZTlmM2EsCi0JMHhmNzQwM2Q5OCwgMHhiMTdmNzU2MiwgMHg4YjM4M2M5YiwgMHg2NTFiZWUxOCwgMHhhZTEwYmU0NSwgMHhhYzEyNWIxNywKLQkweDU0OTAxZjE0LCAweDRiNzdlNTJiLCAweDJlZmEyOGVhLCAweDdkMWIwNGEyLCAweDI4NzI0NzNjLCAweDY4Y2ZiNDZkLAotCTB4ZjE0NTE4NDksIDB4ODYzNDI5MDAsIDB4MTI4YTBjZTIsIDB4NDBkZWZlYTIsIDB4N2VlMDI0YmEsIDB4NzdkZmI4YzYsCi0JMHg1ZDY4MmJkOSwgMHgzYWNmZjdiZCwgMHhlYjQ5Zjc5ZiwgMHg3OTg4OWM2MSwgMHgxZjU4NzhlMCwgMHhmYzQxY2UzOSwKLQkweDliZGExYzJlLCAweGUzMWVmNjY1LCAweDRjODZkNzFiLCAweDRhZjQ4ZTNjLCAweGJlZWZiNWIzLCAweGZkZjVlNTFkLAotCTB4NWViMmY1OWUsIDB4MzA3ZjllNjIsIDB4ODY2NzNmMGMsIDB4NjA1ZjEzYTQsIDB4NmMzMDdmN2UsIDB4MGZlM2NjNWMsCi0JMHhlODAzODE4NywgMHg2MGMxMDc5ZSwgMHg0MmQ4MDY2YSwgMHhiOWY4ODM1MSwgMHg2ZjU3OGQwNSwgMHgzZmM4OTJkNSwKLQkweDc0ODdmMzA0LCAweGU3OTA4ZGZjLCAweDYxYWYwMjNmLCAweGMzZWM1N2I5LCAweDYzNWM4M2Y3LCAweDI1NWY4NGY5LAotCTB4YzgwMGVkM2YsIDB4ZmI0ZmMyMWYsIDB4ZmQwNjU0ZGQsIDB4ZmEzNjU0MzksIDB4ZTQzZmFhMzUsIDB4ODhmODIyMmYsCi0JMHg1MWYwNDNkZiwgMHhjZjk1Mjk3ZiwgMHhmY2Y0YmRmYSwgMHhjMTM5N2YzOSwgMHhhOGZiZjUzZiwgMHhhMGFmZjI2YywKLQkweGFiZjgyZmU3LCAweGJmYzk3ZTA5LCAweGEzOWZlMDkxLCAweGU3ODU5ODVmLCAweGJlNTQ3NTEzLCAweGZhYTA2ZmVhLAotCTB4MDlmYmZjZDcsIDB4YTQxZmMzN2UsIDB4NGEzZmU0MzIsIDB4OWJmOThmY2YsIDB4NmZlMTNlMDgsIDB4N2Y2ZGY4MjYsCi0JMHg3ZjU2ZTA4OCwgMHhmOGVmOTUyYiwgMHgyOWY5ZThkYiwgMHhhMzA0ODdmZiwgMHg0NWZlZTIzYSwgMHhlMDNmMTlkMiwKLQkweGQ5ODE3MTI1LCAweGUyNWU3ZThkLCAweDRiYjM0NTgyLCAweDJlNTdkZTAwLCAweGQ3NjE3ZGQzLCAweDQxZDJmOTdjLAotCTB4MzQyNzhiZTAsIDB4ZmI3YmY2OTksIDB4ZWUyOTk4NTYsIDB4ZmI5NWZiYTMsIDB4MTZjN2Q2MmEsIDB4YWE1Y2ZkNTMsCi0JMHgyNjhkNDg2ZiwgMHgxMmZmNmNiZiwgMHg1NzFmZGQyYiwgMHg5NjdmNzI1NiwgMHhiZGE4NTUyZCwgMHhmZDUzMmY5MiwKLQkweDkyZTYyYjEzLCAweDUzOGY1OGRmLCAweGQ5MmFlNzAwLCAweDE5MzFkODFjLCAweDkzMzIyZGRiLCAweDExMWZkZWZlLAotCTB4ZTNjYTRkZDcsIDB4NGYyOTNmNzYsIDB4OGZhZmY3ZTYsIDB4Y2ZjMjA1NDYsIDB4NjI5YjJiMjksIDB4NzM1NTcwMGQsCi0JMHgzMGUzZTA3MiwgMHhjNjJkNTliZSwgMHgxYzk5MWI2MSwgMHhjZmM3ZGRmZSwgMHhhZjMwN2ZmNywgMHg5MGY5ZDYwNCwKLQkweDAzY2E0YmU0LCAweGUwNzE3YzdjLCAweDk5ZDgzY2RjLCAweGMzYmRiMzMyLCAweGNjZTRmMjhhLCAweDhkNGVkOWU4LAotCTB4ZWJjZmQzY2YsIDB4ZmUyMjRlOTIsIDB4ZTEzMjY5ZjYsIDB4NjFiNjlmNmYsIDB4MmZlZTI2NWEsIDB4ZGRmNGM4MTYsCi0JMHhmMjA1YzQ4YywgMHhlOTlmYjg1NywgMHhmYmE2NWYzNywgMHg5OTRhY2FhNCwgMHg4MTZjODFlMiwgMHgwMzYzZTA1OSwKLQkweGZjZGZiYmFkLCAweDBlYWY1NGI5LCAweDc0NzE0NTNjLCAweDZkMTNjYWQ3LCAweDAxNmZkMTkzLCAweDFkMTE2NTdjLAotCTB4MzllMmM1MGUsIDB4YmI4OGIyNmUsIDB4YTY4ZjhmZWUsIDB4ZjljOGI2YmMsIDB4ZjE3YmZmOGMsIDB4MzNmMDA5YjMsCi0JMHg4Y2ZjNDdhYSwgMHg0ZjNmMDllZiwgMHhmZGUzZmI4OCwgMHgyMjIyNzdjNCwgMHg5NzdmYTRmMSwgMHg3ZGYxMDlmNSwKLQkweDFlMDZjMGYyLCAweDM3NmM4ZmJmLCAweDczMWZjYzQ3LCAweDJlM2JlOGNlLCAweDhmZTkzMjk1LCAweDIzYjgyYzAzLAotCTB4Zjk5OGUzMWIsIDB4N2U0M2RkMzIsIDB4YjNhYWQyN2MsIDB4M2YzZTYxMDcsIDB4OTFkZGYzYzgsIDB4MmM5ZmVkMDcsCi0JMHg4ZWExOGY5MSwgMHhmZGU1MmI4ZCwgMHgxZjIzNWMwZiwgMHg3ZTAyYmU0MSwgMHhkYTA0Nzk1ZCwgMHhlOTNiYmY2ZCwKLQkweDdkOTQzNjRjLCAweDhjMTZlZTAzLCAweDFmNDYzYWJmLCAweGY5ODlmNjQ4LCAweDE2MTc2NGY2LCAweDgwZmJiZjBhLAotCTB4MmI0ZmM0NDcsIDB4NjUxYTNkZjksIDB4MTNkYzllZTUsIDB4MzgwNWRjN2MsIDB4YjVmNTJiYWUsIDB4MDMwOWY4YTksCi0JMHg5MzBlZGNmNywgMHhmOTdlY2EwNSwgMHhjZjFjM2FmMiwgMHg0OWQyNGY3NiwgMHhlMDIxMmYxYywgMHhjN2NiYzdkMSwKLQkweDllMmRiZWYxLCAweDkyNWJiZjUyLCAweGYxYmRkM2Q4LCAweDM3ZTFmNGRlLCAweDc5ZjVjMWU5LCAweDdmNTEzZWUyLAotCTB4ZTBmNTFmZDYsIDB4OGE3Njk2ZTMsIDB4NzBjZTA3NTMsIDB4MzhiNGM4M2QsIDB4MzkxN2JmYmEsIDB4MjdmOTZmNGUsCi0JMHg2NDlmODEwMSwgMHg4ODZmM2YxYiwgMHhlNzQ3NmY3YywgMHhmMDIwMjViZSwgMHhmMjhjYWZkOCwgMHhlMmNiMjZiNCwKLQkweGY2OGNmYWJiLCAweDQ2MjdlYmRiLCAweDcyNmY5YmFiLCAweGQ0MDNmMzFlLCAweDFlYWZhMGJmLCAweDlmYTI2M2NlLAotCTB4MWZiY2E5OTQsIDB4MDI2N2VmMzMsIDB4NDRmMDQ3NWIsIDB4ZTRkYzBkNDUsIDB4ZTg4ZjYwMWMsIDB4MDBmZDhmYzcsCi0JMHg3YmJmMWY3ZSwgMHgxOGFkZWVjNSwgMHg0MmQ3N2NiNywgMHhjOTBlNzRiOSwgMHhjZWY0OWJiNywgMHgxZmRhMjVhZiwKLQkweDJiMGRjY2I5LCAweDE3ZjU4NzhmLCAweDlmYTk3YzE0LCAweDQ4ZGU2MDQzLCAweDc5ZDc1NjVlLCAweGVjMDU1MjQ0LAotCTB4YWRmMGMyOTEsIDB4ODhiOGY3YmYsIDB4ZTM3OTNmYTMsIDB4OWJjYTU4YTEsIDB4ODUxMGRmYzgsIDB4NjYzZWRmZmUsCi0JMHgyYzUwM2UyNywgMHgwYzNmMzUyMSwgMHg3Zjg5OGE3ZiwgMHhmZTcyMjdjZiwgMHg3YWFjZjJjNywgMHg3MTMyODA1ZSwKLQkweDMyMjM5ZTE0LCAweGY1MTljZjdlLCAweDc1ZmJjYzI4LCAweGI3N2Y5MzlmLCAweGQzMDdjMTY5LCAweGZlM2MwMzg3LAotCTB4MGZlNzRjOWEsIDB4ZmNkMWE1YWUsIDB4Y2MxZmY2ZmUsIDB4ODZmNDY3OTQsIDB4Njc3ZTE3ODgsIDB4NjNkZDA5NmQsCi0JMHhmNzEyYzI0YiwgMHgwNTRmYjhhNywgMHhhNjI2ZmM3OCwgMHg5ZjdkZjA4NSwgMHgwOWMxZmI0MiwgMHhlMTczZTVkNywKLQkweDBhYjIwOTdlLCAweDIyZWUzN2Y2LCAweGI4ZjJmOGEzLCAweDZmNzBkOTBlLCAweDYzNDVjYzZkLCAweDg0YmZhMDdiLAotCTB4NzZhNGRhZmIsIDB4YTE0NGJiNjMsIDB4MTUyMzVkZmYsIDB4N2U4ZmZlZmEsIDB4ZDdmNWQwNmYsIDB4NjRjNWI5N2QsCi0JMHhmZjQ5YTIyNywgMHgyNGM5YTkzZiwgMHgyYTE2NGZjZiwgMHg3NmRkYjEwNywgMHhmYjg0YmIzYiwgMHhiYjdjYzc0NCwKLQkweGM1YTA3YThhLCAweDU1N2E0ZDE1LCAweGZlNGQxMTE5LCAweDYzOTRmNmYzLCAweDlmYzA3NmY2LCAweDJhMDdlNDZkLAotCTB4NmMwMzJiZmEsIDB4YmIxODgzYmUsIDB4YWI3M2VkZmUsIDB4MjE4ZDI1ZTcsIDB4NWRmNWRlM2QsIDB4M2JiMDIyZTMsCi0JMHhmMjgyZjk3OCwgMHg5ZGVjZDY5OSwgMHgxNTc5ODk5YywgMHhkOGVlZmE2NiwgMHg3YWI3M2M3ZiwgMHgyMjc3Zjg2ZiwKLQkweDMwNzUyNGQzLCAweDg0ZWM1N2NmLCAweGUwZGZhMTU3LCAweDQxOGZiOWMwLCAweDMzZWEwNjNmLCAweGQ3YzYxY2YwLAotCTB4MjkyMTdhOGUsIDB4ZjkwNWJhYmUsIDB4YjYzOTVlYWEsIDB4ODVkMGUyODIsIDB4MmQ1N2E0ZjEsIDB4ZWExMGVhYmUsCi0JMHhjMGFkN2E4OSwgMHhiYWRmMmUxZSwgMHhkY2FhZGM5YywgMHhkNWNlMjkzZiwgMHhiZmZlNDliZSwgMHhlNGRlZGZhOSwKLQkweDJlNWM5NWZjLCAweDAxYzViZDc3LCAweGI3N2U3ZGY0LCAweDVlYmVjNGZlLCAweGRmZGZjMjFlLCAweGUwNzlmNDJhLAotCTB4YmQ0N2I1YWMsIDB4ZDcyODY2YmYsIDB4ZWYyMjQ1MTcsIDB4Mjk3YzU2NjEsIDB4NTY3ZTdmN2QsIDB4M2NjNjVkYTAsCi0JMHgyZTUwY2Y1MCwgMHgxYzEyZmI0NywgMHgyZmIwY2Y5NCwgMHg3ZTMwODU4ZCwgMHhlZGNmOTgxZSwgMHhlMjBhZDkwMywKLQkweDUzOGE3NGE3LCAweGQ0ZGE5YmQ1LCAweDBhNDNkMjAwLCAweDJlMmU5MWI5LCAweGVmZTE4N2Q4LCAweDZkZGZkNDc4LAotCTB4Zjk3N2QyMGUsIDB4ZmMyOGJlODIsIDB4NjNmNDFlM2UsIDB4ODUyODE3ZDgsIDB4ZTRkNWUyZGQsIDB4Njg3MWViYmYsCi0JMHg3ZTAwOGVmYywgMHg4MmI2ODdmZiwgMHhjYTNhODJlMCwgMHg5YjlkZjRjZCwgMHg3NDI2ZjdjOCwgMHhhZWRiZTExOCwKLQkweGNjODllMTFiLCAweDYyOWFiZGY4LCAweGFjOWUxMWJiLCAweDQzYTFlMTFhLCAweGY2ZTJiZWY5LCAweGE5ZjNlMzI0LAotCTB4NmZkYzIzNmUsIDB4OTk5NDYzN2UsIDB4NzhhMGZmZGYsIDB4MGMxNDdlOTUsIDB4YjhjMDNlZmYsIDB4NjQwMTdmNTgsCi0JMHg2MGY3ZTIwYywgMHgyMWFmYjdmYiwgMHhlOGZmNTA3ZCwgMHg3ZWZmOTIwYywgMHhjYWUyMjI2YiwgMHg4MTk1YjAwYywKLQkweGYzZTM2YTcxLCAweDJkODU5Y2M0LCAweGFhZWQ3ZTk4LCAweDg3YmUyMzkwLCAweDJjZTc0NmQyLCAweDczYzMwZjgwLAotCTB4ZjIwYjdjZmMsIDB4OWU2Y2UxZmYsIDB4ZGMzMGQ5ZmYsIDB4YzhlODc5MzcsIDB4ZGUxYzc5YWUsIDB4Y2ZjZTliMzMsCi0JMHgwMzVmNTYyYywgMHgyOGM3NGVmZCwgMHgzNmQyZWM5OSwgMHg5Yjc1ZDM5OSwgMHgzNWJhNzJhNiwgMHg1Nzc5ZDMyNywKLQkweDYwYjQ0YWEyLCAweDVkNWYzNjQ1LCAweDQ3MjNjNjFhLCAweGM5MWUyOTlhLCAweDNkZjllMjFhLCAweGQzZmFlN2Y0LAotCTB4MmM2MjQxZjksIDB4ZTc3MzQzOWYsIDB4ZmE0N2RiZmUsIDB4NDBkODlkOTcsIDB4MmFmYjAzZTcsIDB4Nzg4ZWZhNjQsCi0JMHhmOTQwM2RiMiwgMHgyYmNlYjA1MywgMHhjZTk2Mzg4NiwgMHgzOWY5ZjNiNywgMHg1MGQ3YWMwYSwgMHg2MmJjZWIwZiwKLQkweDEwMWY5N2U0LCAweGEyZjVmNDlkLCAweGYwYzIwNmJjLCAweDA4MWE3MjgwLCAweGJlNjk5YjhmLCAweDk0MDc4OGU1LAotCTB4NTFlN2YwZDcsIDB4YmExNmVkOTksIDB4ZDNkNjJkNGYsIDB4N2FlYWRjOWIsIDB4NTc5YzQ4YTMsIDB4ZDc2Yzc5ZWIsCi0JMHgxZTdhOThjNCwgMHhmZjkxMDZkYiwgMHhlMjM0ZWNkYSwgMHgyNGY5NWFlMSwgMHg2YjVjMzM4YSwgMHhlYmVkMTM5YiwKLQkweDJmNDE4ZTQ5LCAweDJmNWM2YzA0LCAweGRlMWRiOTYwLCAweDdiZGZiOTQzLCAweDFjNTRlMTYzLCAweDIwNDRmNTBmLAotCTB4MTYxNDdiZWMsIDB4NmRmZmE3YzEsIDB4YzIyMWIzYmYsIDB4ZWZmYjNmMmYsIDB4ZjkxODZhNDcsIDB4OWUyMDhmOWQsCi0JMHhlMzljMDcyYSwgMHg3N2M1ZWRmNywgMHhiNjc4MmNiYywgMHgzZWE1Y2YwNywgMHhjYjdhYWY5YywgMHhjYWU5YWYxYiwKLQkweGJhZTNiNWJmLCAweGJmYmM4OGE1LCAweDVhZjgxMTJiLCAweGJmYTVmMDJmLCAweDI3NGQ0NTdmLCAweDJkNjk1ZDNjLAotCTB4Mjc4NmY3YjYsIDB4MTMyN2Y0MjYsIDB4MzMyZjEzZmEsIDB4YmIzZTJhY2UsIDB4ZWM2MzQxMjEsIDB4OWZkZmU3OTksCi0JMHg2NzFkMDMyNywgMHg5ODViM2VhZCwgMHhjZjliZjAwYSwgMHhjZmMzOWVmZiwgMHgzZmE5N2Q5YywgMHhlYzM2MWQzNCwKLQkweDNkZjg3OWYzLCAweDlkOGY1OThjLCAweGExYTI5NmJkLCAweDg1ZGUyNmRjLCAweDhhNzBjM2RmLCAweGJlN2QxOTczLAotCTB4MDkyZjc4ZmEsIDB4ZjFiNTU5N2QsIDB4OTA2NzFlMWUsIDB4MzU3NzI0YmQsIDB4MDFjNTJmMmUsIDB4NzBlZjhjYmUsCi0JMHg1NTQyZjllMiwgMHhkMTZiODc0MiwgMHhkNTdlZjQ0ZCwgMHhmYmY5N2JjNiwgMHgwYTM1M2U5OCwgMHg1Y2I4ODlmMywKLQkweGZiZjNkNmNkLCAweGZkZjk4ZDRiLCAweGQyMmFlNzRlLCAweDUwMTYzNjdiLCAweGQ5NDQyZjUxLCAweGVlYmU3NDNkLAotCTB4M2EyNmU2MTksIDB4NzJiNGM5ZGMsIDB4Y2VlZWJlN2UsIDB4NWFjY2ZhNDIsIDB4M2ZkMWVhNmQsIDB4ZTdhYTFkNmMsCi0JMHhkNWJlODZmYiwgMHgyYmRjNGNiOCwgMHhkYTI0NTM5OCwgMHhjNjVmZTNhOSwgMHg3YjM0ZWU3MSwgMHhmMDVmYTJiNiwKLQkweDQ4MmNjNjdmLCAweGNmNDFiNzQwLCAweDc1ZDIxYTdmLCAweGFkZDBlZjRmLCAweDc1OWNmZmRjLCAweDQ5NmRjNGRlLAotCTB4ZmYyNzhmMGMsIDB4NTc1ZjM4NzEsIDB4ZWQwMDljNzgsIDB4Zjk3NDZmNDYsIDB4M2M1ZDFiYWMsIDB4ODlhZDA3MTQsCi0JMHhhOGJhNzBmMywgMHg0OGNkY2UxZCwgMHhkNzBlZDg5NywgMHhkN2RlYmM5NiwgMHgxMTNlOGRkZiwgMHhmODJhYjhmOCwKLQkweGU0MmJmZDFlLCAweDlmYzI2ZmQ3LCAweDRmM2QxZjRlLCAweGNlZTRjNmFjLCAweDQwZTY3ZjIyLCAweDE0N2M0MzdmLAotCTB4YWY2ZTAyMzYsIDB4NzZmZTY3YTMsIDB4Yzg4ZjdkODcsIDB4MzhhNWU0OWEsIDB4Y2I1ZTI1OTMsIDB4OWFlNjdjYzEsCi0JMHhlNjNkNDliZiwgMHhlMzBmNjc3NywgMHg2NzY2ZjM3ZSwgMHhhZjE3ZGQzNCwgMHhiZWU5NWE3MSwgMHgyNzczOGI1YSwKLQkweGFlY2QzZjQzLCAweDk0YmMyMzZjLCAweGU2MThlYjM4LCAweGIzYTZkNWQxLCAweDA2ZWRmZTI2LCAweGFkNzE1ZTYzLAotCTB4ZWY1ZTZlZjMsIDB4OWRhY2IzZTIsIDB4MmUzMWViYTYsIDB4YjRlN2I1Y2YsIDB4ODEwM2I0MTgsIDB4YWYyZWRmZDMsCi0JMHhiZmU3NmU1OCwgMHhiZDViZDI1YiwgMHhjZjFhNmUzMywgMHgyOTVhNzYyYiwgMHhiMThhNThhZiwgMHg1Nzk0Zjc1NiwKLQkweGM3YzExN2ZjLCAweDc4YmViODJkLCAweGE3OGYwZjVjLCAweGJiYjJlYmU5LCAweDNlMjNmZTc5LCAweGQ1OWE3OGM3LAotCTB4YWZkZmEzZWQsIDB4OTdmZmQ3ZDEsIDB4N2EyZTljYTEsIDB4OWFiYjliN2IsIDB4YWM5N2RlYTEsIDB4YWNmNTFiOWEsCi0JMHg4ODRmYmUyNCwgMHg0YzI3MjQ3NiwgMHhmZmUzZWE1ZiwgMHhlZjg1YTg2OSwgMHg0YTk1MzU5NywgMHg4ZGRiOWRiMywKLQkweDM5ZWViZjU5LCAweDMwZjQ3YzNmLCAweDlkYzkyZGQzLCAweGNkYjMzN2NlLCAweDk3NDY2ZjNjLCAweGQ1OGFiOWVmLAotCTB4NWNjMzdlODMsIDB4N2FmMjg5MjUsIDB4MmZlYTAyZTYsIDB4ZmZiNTg1YzYsIDB4MWVmYzVkY2UsIDB4MjEyNWFjYWEsCi0JMHhlZTNmYmQzZiwgMHgwN2RmOTdiNiwgMHgyZTk4M2RmMCwgMHhhOWJkZTllMiwgMHhmNTlmYmExNiwgMHg3MDc5ODk5ZSwKLQkweGI3OTkxOWViLCAweDRlYzZmNWU4LCAweDFkZTNlZGM2LCAweGEyZDZjZTMzLCAweDYyMGM2NjM4LCAweGIwZTQzZjc0LAotCTB4NzhlNzYyYjMsIDB4Y2NjM2ZlNDYsIDB4YWU2MGQwNjEsIDB4ZGUzMjZjYWYsIDB4OWU1ZDk4YzcsIDB4YWZiNjE2ZmYsCi0JMHg4ZjQwNzYxMiwgMHg0OWY1NTcxNywgMHg5MWZlNTIwZCwgMHg2YzMzOWJlNCwgMHgzZjhkYzYyNCwgMHg2MjQyNTU5ZCwKLQkweGRmNGE5MWRmLCAweDRmNmFlY2JkLCAweGY2YjBlMzcxLCAweGQzZmI0NWYzLCAweDFkNzFjNDY5LCAweDJiODNkZGY0LAotCTB4M2U4YmIxZWEsIDB4ZjI4N2QxMzcsIDB4OGJmMTIyMjEsIDB4OWRmZjBhNzQsIDB4YTA3ZjVkMzUsIDB4ZmUxMTY3ZGQsCi0JMHg0OGZjMzg3OSwgMHgxM2RkMzk0YywgMHhiZDU3ZWRkMCwgMHhmNTc4ZTdhNSwgMHhiZDA5ODZhZiwgMHgzOGFkY2JhOSwKLQkweDFmMzNiMDg3LCAweDRjOTEzNDVkLCAweDFlYTdlZTVlLCAweDY3ZDlmNjdkLCAweGVhN2U1ZDVkLCAweGY0OWY2MTBlLAotCTB4ODMzM2EyN2UsIDB4Zjk4ZDE5NTQsIDB4NTQ5YTUwMmEsIDB4YWNhM2YxMGYsIDB4NjAwNTI3NTYsIDB4ZGFmZmRiOWQsCi0JMHgyN2Y3ZmRmMywgMHhmMDFlNzk3NSwgMHgyZmI2MTI2MCwgMHhiMDcyZmI3MSwgMHhkZjE3Y2M4YywgMHgwNzJjYmE5NiwKLQkweDM0ZGI3MmU1LCAweDk0NmFlZWRkLCAweDljZWRiZTM3LCAweGJlNzQzN2ZiLCAweDFiY2YwZWZhLCAweDlkOTAxOTZmLAotCTB4NGE1MTc5ODgsIDB4NTliZTQ1YWIsIDB4ZTQxNWE2NWUsIDB4M2QxMzdkZDUsIDB4M2ZmNzE1NmUsIDB4NjMxYjFkYjcsCi0JMHgzNmY0ZjhjNywgMHhjZjBkYTBhNSwgMHhmMTI5Yjc3NywgMHg1MzZkYjQwNSwgMHhkZTkwMWU3OCwgMHg1ZTc4NTE1ZSwKLQkweDc4ZjFhMjllLCAweGJjZjBhMmI3LCAweGE3N2YzZDM5LCAweDg0ZGJjMDY1LCAweDAzZGRiZDBmLCAweDhkMTVhZjgyLAotCTB4ZDI4OGUzZGYsIDB4NWQ5ZGE4MWEsIDB4YjJmN2QyZjYsIDB4ZTI4Y2YxZWMsIDB4ZmY5NTc2NTIsIDB4YTY3NDUwZWUsCi0JMHg5MDdiZDk5OSwgMHgyY2MzYjVkNywgMHhlNWI2MWY2NCwgMHhhMjRkYjQxNSwgMHgxNDZlYzlmOSwgMHgwNTQ5NmQ5MywKLQkweDExNDdhNDQ5LCAweDhkN2VmMGVmLCAweDMxNmYxM2EzLCAweDBhOWZjNzg4LCAweGQ0ZmRlYmJjLCAweGRlNzVmMGI0LAotCTB4NDE3NzcxYmIsIDB4MjNmNDVmNDksIDB4NWY5MDg3YmQsIDB4ZWM4YjI5YjcsIDB4NzI0NmVmNzgsIDB4YmZiNGRlMTQsCi0JMHg0MzI2NjFlNiwgMHg3ZjU3NjYzZSwgMHg3ZjQ1MGE5NywgMHgyNGZlYzUzZiwgMHhmZDhhODE0NywgMHhiZmNmNTg1OSwKLQkweGU4YjZmOGJiLCAweGVmM2RlZmU3LCAweGZhMzYwY2MwLCAweDIyNjMwOGRlLCAweGQ0OTQyNjhmLCAweDI3NjFmOWQzLAotCTB4NjMxY2YwZmQsIDB4ZmVmN2Y3NDQsIDB4YmQ2NzdlZGIsIDB4ZmUwOWRlMzEsIDB4YmY1MTZmZTYsIDB4N2I5ZGU2NTQsCi0JMHhlMTNkMTI3YiwgMHg2OGQ2ZTZmZSwgMHhiZjc0MmZhZSwgMHhmYjc5NTY1MSwgMHgwZjdlNjZhZCwgMHg5YWJlZmY1NSwKLQkweGIxY2E0N2VlLCAweGRkNzQzYzQ2LCAweGI4NzRlMzAzLCAweGM4MzhmMmFhLCAweDdjNTE4NTU1LCAweGFmYWU1MjI2LAotCTB4Yjg2ZTNhOWUsIDB4ZDg3NjgxNDcsIDB4MmM3MWZjMjMsIDB4MGNmNGNmZDEsIDB4MmUyOTczYzIsIDB4YTNkY2JhZGYsCi0JMHhlYmZkNDQ0ZSwgMHgxZjdmNzcyOCwgMHhhOGE0YWJiZiwgMHgzMGI3Y2E2NiwgMHg1ZjEyZmYwMSwgMHg5MjQzZGU3NywKLQkweGM2Y2ZmNDdhLCAweDM1NzRlNzBkLCAweDI0Njg1NjI1LCAweGI3Mjg0YWU3LCAweGUwM2YzOTI3LCAweDcyOGI5NTNhLAotCTB4MWVjYmEwN2QsIDB4MDNhZWI4YWIsIDB4MTM4OWRjZTcsIDB4YmY1Y2U0YzMsIDB4YmZmN2EyMWYsIDB4MzU2NGU0ZmUsCi0JMHg3NGRmNWQ3YywgMHg2ZTc5YzJmZiwgMHg4ZjY0ZmRlNywgMHhmZjFlZGM1ZCwgMHhkOGM3ZGY2ZiwgMHg0MGFlYjJlYSwKLQkweDMyNmNkZmZiLCAweGMzOTFlNWVhLCAweDg2ZDYzZWI5LCAweDc1ZTBmODhiLCAweGIzYjdlZTk5LCAweGUxYjRiZWExLAotCTB4ZDk4YjNmODAsIDB4Zjk3YThlNWIsIDB4ZGZkZjM1NDAsIDB4MTQ5OWIxY2EsIDB4N2ViMDM5ODcsIDB4ODI5ZTQ0NWEsCi0JMHgzMGYwZDA2ZiwgMHhiM2FhMmM3OSwgMHg4NWFiYmU5MiwgMHgwM2VkMDc3ZCwgMHg0OTFhZTgyMywgMHgzYWZlOWQyZiwKLQkweGU3ZTcyOGVjLCAweDI3YmQzYTcyLCAweDkxMjEyYTI2LCAweDg5ZmU0YzA3LCAweDA5OTk3ZTJiLCAweGRjYWI5YWY1LAotCTB4YjAzOWYyNjcsIDB4ODFkOTFiN2QsIDB4MTE1ZGRhZGUsIDB4YWY2ZjRmZmEsIDB4Y2UwYWZmNjAsIDB4NzNlMjgwYWYsCi0JMHhhMGU3NTA1NywgMHhmY2Y2YTQ5ZiwgMHg1MTk3NmNmYiwgMHhlYzdlMDQ5OCwgMHhiMWU3MmViMCwgMHgyYmY2MmFhOSwKLQkweGFiNzkzZjA5LCAweDUxYWY2ZmM4LCAweGIwOWVlZDBiLCAweDQyZDhhNWY3LCAweDNlMzBhNGZiLCAweGRlMjVlOWE5LAotCTB4YzdhZTFmZTQsIDB4ZWZiNDQzOWIsIDB4NDgxMGVmZDcsIDB4OWU2MGQ3ZTgsIDB4ZWU1ZjIyYTAsIDB4N2VkMDQ3OGMsCi0JMHg5ZGYwZDRhMiwgMHhkZWZjN2Q0NSwgMHg1ZjM5ZWRjZiwgMHg2OTBiNTU1ZiwgMHgwMThmMjgxZiwgMHgwYmZjMDE3ZiwKLQkweDgxOTJlYzUzLCAweGJlMmQzNzY0LCAweGZjYzQ0ZTdmLCAweDI4ZGFkZjk1LCAweDIxMjNmNzlmLCAweDNlNDJlZDlmLAotCTB4MDE2M2QzN2IsIDB4MmQyZThjNzYsIDB4ZjAyNzYxNmUsIDB4NDlmMDA4ZDIsIDB4NDlmMjBjNDEsIDB4NzBkOThhNGQsCi0JMHg5Yjk3YTNhZSwgMHhlMjZmM2FjNCwgMHhiZjBmNTRlNywgMHhjMWU3M2YzNSwgMHgzOWY4M2RlMSwgMHg5Zjg0YzdlOCwKLQkweGUyZmZhM2NmLCAweGU4OWJkMzA5LCAweGYwN2E3OGJmLCAweDYyY2RlYTczLCAweDUzY2UyN2ZmLCAweGNkZGM1YjRmLAotCTB4ZDM5NzgwZWQsIDB4M2JlODYyMTMsIDB4Zjg3ZDE5M2YsIDB4ZThkM2RmM2QsIDB4N2Y4MDE1ZjcsIDB4NGNkOWNjZjcsCi0JMHg1MzJjZDYyNCwgMHg4NDNhNzdlNywgMHgwNjA4Yzk5ZiwgMHhjYTI3NmYzZiwgMHhhZWYzMTk0NSwgMHhkNWJkZGZjMiwKLQkweGRmODk4OGU1LCAweDNhMjZmOWEzLCAweGUwZGMwNmNmLCAweDNkZTNiNmJjLCAweDg3YmEzY2JjLCAweDM5ZDNkYTU3LAotCTB4ZmU0ZWIxZGUsIDB4YzdhNjEzMDEsIDB4NDAxZjA4ZmIsIDB4NWEzOGIwOWQsIDB4NDQ2MGY4YjcsIDB4MzFjMzEwM2MsCi0JMHgxOWM1Zjk5ZCwgMHhiZjZmZGJkZCwgMHhmOWY4YTI2MSwgMHhlMjBiMWYyZSwgMHg1MWRjMDJlZiwgMHhiZGRmOGM2NCwKLQkweDc2ZDlmMjI1LCAweDdmMjQ2MTJkLCAweDQyOWE3MmJiLCAweDZhMjQ1ZmU4LCAweDY1ZjFlMjhjLCAweDM5ZmI2MzFlLAotCTB4YmRkZjkxYTUsIDB4ZWVmOWM2MzYsIDB4ZTcyMjVhZjQsIDB4ZWJiNWRmNGIsIDB4N2ZkN2Q2MjcsIDB4ZmY4YTJhY2YsCi0JMHgyMmZkYzY0NSwgMHgzZWI0N2RlMywgMHgzYzg1MjNiNCwgMHgxODU0YWZlZSwgMHhmNTFjYjhmMywgMHhkOGJiZTgzMywKLQkweDcxNGFmODYwLCAweDMzMTRhZTdkLCAweGEzYWMzOGMzLCAweDJkY2YzMjNjLCAweDIxZWNmMDIwLCAweDU5ZTNhNjY1LAotCTB4OTI4OTllZmYsIDB4NmJkZmU2NmYsIDB4ZjU0NmRjMGQsIDB4N2UxZGJlN2EsIDB4YWJhMjcxNzcsIDB4M2FjYTVkNmIsCi0JMHgxMTdjOWYzMSwgMHhiY2Y0MGRjZiwgMHhkNzE4NWRhZSwgMHhiY2U4YmNjNCwgMHhkMDg0ZDAzNiwgMHhjNjA1Y2UxZiwKLQkweGY0NjBhZTQ5LCAweGI3NTg1N2JkLCAweGYwZTI1Y2UxLCAweGZhMjYyZDllLCAweGEzMWYwZjFkLCAweDFlMDFhMWVmLAotCTB4Y2MxNmU3OGMsIDB4NTg1MGYxNDcsIDB4MDM5Y2UxYmYsIDB4MjM4MDY5ZDYsIDB4ZTRkZjAxZjcsIDB4OTNkZTFmZmYsCi0JMHhhMjc3ZTNkZSwgMHgyNzhmNTJmNSwgMHg2MTMzOGI3NSwgMHgyZmE0ODAwNywgMHhiZGYzOGI4NiwgMHhmYTI4NmNhMSwKLQkweDA2ZmU0YTQxLCAweDE0OTVjM2EyLCAweDcyY2I1ZjllLCAweGRiZGYzZTdhLCAweGY3ZTFmZDA5LCAweDcyODg3ZTkzLAotCTB4MDE3MTgwOTIsIDB4MDRkZWY4NjYsIDB4MGY3NGM4ZjMsIDB4ZTdjNDU0YzAsIDB4ZTVlYmVhNmEsIDB4NDhjNzk3NDIsCi0JMHhjY2QxNmRiZSwgMHhhNjg0Nzk4ZSwgMHhlYTBmNjg4MiwgMHg2MDBkOWIxMywgMHhmODg1MmVmYywgMHhlZTI0Yjc0ZSwKLQkweDI4M2ZmZDNmLCAweDAwODEyYmQ0LCAweDAwMDA4MTJiLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDkwOTVmZjAwLAotCTB4NTBjMzRiMzEsIDB4OTdiZjg1MTQsIDB4NGEzNmFjNDYsIDB4MTA1NmRhYzEsIDB4YTg1MDhhMDksIDB4NzU1YTUwOTUsCi0JMHg5NzM3NTQzMywgMHgyMjFkMGU4YywgMHgzOGJhMzgzYSwgMHhmYzVkMjUxYiwgMHgwOWY5Y2UwMSwgMHhlNmUyODRmZSwKLQkweDQ4MmFlMGU2LCAweDIyYmY4MjkwLCAweDI2YTY5N2RlLCAweGNiYmQwODIwLCAweDc3ZGRlNzc5LCAweGRkZjczZGNlLAotCTB4MmU4ZGNjMmIsIDB4NWVjYTc1NTAsIDB4NzU2MTkwNDcsIDB4NDQ0NTA2ZDIsIDB4OWFlYTExNTIsIDB4NDdlMTc1MzYsCi0JMHgzY2Q2YTVhNCwgMHg3YzIyYzEyOCwgMHg0YzEyMDkyZSwgMHhlY2JiYWE3NSwgMHhmYmQ0NWFiMiwgMHg1ZmZlZDI0NiwKLQkweDczZTRlYzZmLCAweDc1NjlmZDczLCAweDI3ZTdjYWQyLCAweDIyZmY4ZWJhLCAweGJhNzdlODk4LCAweDAwODM5ZDEyLAotCTB4ZTRlM2UxZDYsIDB4NjVmNjhmYmQsIDB4Yzg3NzNkMTMsIDB4NWY5NGRjYWMsIDB4ZDUzZGEzZTgsIDB4Mzk3MDA3OWIsCi0JMHgzYWRmMzc2YiwgMHhkYmUyMGQ0NiwgMHgwYWE4ZjM4YSwgMHhhNTY3MDQ3YiwgMHhmZDM5OGY3NCwgMHhlZDM0NzM3ZSwKLQkweGIwYTU2ZjJkLCAweGVmMzdlNjU3LCAweGJmODk2OTVlLCAweGMyMWI3MWE1LCAweGMxZWM4NDgxLCAweGM4MTQ0N2E4LAotCTB4YmUwZGFhZDEsIDB4Yjk0MTdkY2QsIDB4M2U5OWNiOGIsIDB4YmYwNWM1OTMsIDB4NjdlYjgxZjAsIDB4ZjNiYTc5MzEsCi0JMHg4NDE2YmYwZiwgMHhjYjYyYmNiZiwgMHg1ZjFkZDdmZiwgMHg3Zjc0ZjY4ZCwgMHg2YjdkMjM4YywgMHhiYjkyZjcyYywKLQkweDUwYThkY2UxLCAweGQ5ZjY5NWY4LCAweGY0MTEyZWQ1LCAweDczOGRiY2YzLCAweGYzZTU2OWYxLCAweDc0MmIwMDdlLAotCTB4MDI1MDU3NDcsIDB4MDAwMDAyNTAKKwkweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDdkZTVmZjAwLCAweGM1NTQ3YzBiLCAweDNkOWNmOGI5LCAweDkyNmVlY2U3LAorCTB4MjEyNmNkZGQsIDB4MjZjMmJjMjEsIDB4YjgwZDQ0MDEsIDB4NDFhMDBjNDAsIDB4OTQ1MjBmMzcsIDB4YTJhMWUxYTgsCisJMHgyNDc4NmMyMiwgMHhmNjIyZWYyMSwgMHhkZGJmMWY2MiwgMHg1MmM0ODhmMCwgMHhkNGM1MWYxYiwgMHhiMDUxNzY4YiwKKwkweDQwMzY4YmQxLCAweDVjMTc1OGQwLCAweDZkOGI0NTllLCAweGQ1YTA0NWU4LCAweDVlNDAxMzdhLCAweGE1NDBiMjA2LAorCTB4Y2ZmZDQ1YjYsIDB4ZGQ5Y2NkZjcsIDB4MjYzNjRlNzMsIDB4ZjZmZmVmNmEsIDB4OWZkYmZmZmUsIDB4Y2NjY2U2MWQsCisJMHg3Y2RmMzMzNywgMHg5YmU2YmRmMywgMHg5MWJlNjQ4OSwgMHhmMjEzODdkOCwgMHgyNTZlZmMyNSwgMHgxMDg5NTFlNCwKKwkweDliNGUxODkyLCAweDlmYzY5MzNjLCAweGVkYjEwOTk0LCAweDNiZWEyNDdlLCAweDllMGM4NDk5LCAweGQxNDY3MDZiLAorCTB4NjQwODVmYTIsIDB4MjEwNjRiNGUsIDB4NzU4ZDY1YzksIDB4NzkzZGZhNDYsIDB4ZThiYzdkOTEsIDB4OTgxOWMzMDgsCisJMHhiZGJhZTQ3YywgMHg3MjBjODQwOSwgMHg4MjY2ZjZkMywgMHg3ZmU5MmZiZiwgMHhjNjM3YjczZiwgMHg3OWM4NzQ5MSwKKwkweGUxMzFhMjg1LCAweGJjOWE0YWZhLCAweDg3N2JmYTQ4LCAweDE0OWJiZWFhLCAweDQ4ZGRhNjc1LCAweGZkNTFmYmZiLAorCTB4OTA4NWI3MjAsIDB4NDY3OGMzMWYsIDB4NDBjYmE5NDIsIDB4NzhiOGU4YjIsIDB4ZmQyZTZmNWQsIDB4YWYwZTNhM2YsCisJMHgyOTViZThjZCwgMHgxYzFhMjIxMCwgMHgyNDI0NDRiMSwgMHhhMDQ4MjMyNiwgMHg2NzlmYmU5ZCwgMHg0OWQ3ZWQzYywKKwkweGFhMzZhNzA4LCAweDQ5ZTc0YWM4LCAweDA4OTZiNGM4LCAweDgwODk3MmY1LCAweDc2Y2Q4ODc4LCAweDc4ZTk3YjI1LAorCTB4ZTIyZTdkNTcsIDB4MjIwZDU3YmMsIDB4MjdkNjlkYTQsIDB4Njg0ZWQzOTIsIDB4NjFjNDk1M2EsIDB4MjMyZGM3YmQsCisJMHhkNTdlNDIwNiwgMHgwNzEyM2ZhZSwgMHgxOTliMWI4NSwgMHhkYzE1NWUyNCwgMHgwZTIxMGYwNiwgMHhjN2FmYzUxMywKKwkweDhmMmFlOThjLCAweGM0YzlhNzlkLCAweGFiMjEwZDcxLCAweDU3NGMwZTNkLCAweGZhNjM0Njc5LCAweGRiMjdkMGQ4LAorCTB4ZjlkMDA2NzMsIDB4ZTlkODMyMGMsIDB4NjM4MzQ4NDgsIDB4MTE5MWRkYTYsIDB4MmRjNzI3ODYsIDB4MDkzOGU3MzAsCisJMHhhZTI5MjZjOSwgMHgyZjVhNTRjNCwgMHg0ZGM4NDBkMSwgMHhmMzQyZGM4NCwgMHgxOTA4MjM3NSwgMHg1MDg0ZWM0OSwKKwkweGJjOTMzZGZjLCAweDAxOWRjYTJjLCAweDQ1ZTYwNzc5LCAweDdjYzM3MTAzLCAweDJlMDMzMjYzLCAweGM2MmRlMjkxLAorCTB4MWM5NWNmNjksIDB4MWJmOGVmZTEsIDB4Nzg1ZmRmODAsIDB4YzFkNjE1MmMsIDB4ZWZjYzFiN2QsIDB4ZjBlY2UyMTksCisJMHg0NmRkOWUwMiwgMHg3ZjVhMjZlNywgMHg1ZTRjZWNhNSwgMHg0NjhhZTE0YSwgMHhhZDgzMmVkYSwgMHgxZTEwOTRiYiwKKwkweDFmYzA0Y2RmLCAweGM5Y2M4ZmVkLCAweDMwZDdhY2Q1LCAweGI0MjI0NzE4LCAweGViMDVkYzczLCAweDc1YjI3MTY0LAorCTB4MTU3NDA5NWEsIDB4ZjJlNjFkNjEsIDB4Nzc2NTU4NzUsIDB4MzhmZDE5ZDksIDB4MTFmYTI0NDksIDB4YjFmYTVhZWQsCisJMHg4ZmU5Njg2NCwgMHhiYTlmYjE3ZSwgMHhiZjY5ZTc5ZSwgMHgzYmVkNDI0ZCwgMHhiZDNjZTk1MywgMHg0ZGNlMGM0YiwKKwkweGExNjBkYmY0LCAweDBhZjgwMDUxLCAweDgwYzQyNWJjLCAweDQxZjkyYWZkLCAweDYzYTA1MjY1LCAweDE3OWUxYWI0LAorCTB4ZjZmN2U5Y2IsIDB4ZWZjZjczMGUsIDB4NTJlMjA2MmQsIDB4MmE1MzcyZTgsIDB4Y2VjNDc3N2MsIDB4NjYyNmUzYTAsCisJMHg2YjRjZWM0NywgMHhlOTg3ZjFjZiwgMHhjOTI1ZDkyNCwgMHg0YzBlZWY0MCwgMHhhYzQ3MDQxYiwgMHg0NzdjZTMwMCwKKwkweDljMDQ5YjI0LCAweGY2YTQ3MjdmLCAweDA4ZWRkM2ZmLCAweDM3N2FlMWYxLCAweGRhNTQ3NWYwLCAweDNkMjAzYzUxLAorCTB4NDY4YjFmNzksIDB4MzQ1MDg4M2MsIDB4MTdlNzBjMzksIDB4YWQxN2NmMWMsIDB4NGE0MzRmNDUsIDB4NTg2OGUzNDgsCisJMHg4NzVmOWE1ZiwgMHg3OWE2NjNmNCwgMHhiMDliZTYyYiwgMHgzZmNhMWVkYywgMHhhY2M5ZTU4YiwgMHhiYTVlNWQzZSwKKwkweDU1ZTNiZDE4LCAweDZlZGExNzU5LCAweDQyOTFjMjAzLCAweDM4NDQ1ZTcwLCAweDliYmY1MDk2LCAweDk0MjAzZjMwLAorCTB4MWZkNjI1ZmYsIDB4YjdmN2VhY2EsIDB4Y2VlZDI1MWYsIDB4ZjljMjllMGQsIDB4MDAzYjJlYmYsIDB4ZDZkYmMyOWYsCisJMHgyZTk0YWRjMCwgMHg3YzEwNmUwZSwgMHhlYzBmOWEyNiwgMHg3NWZlNDE4YywgMHg5ZjBjZmQ3ZSwgMHhkNzY3ZTI4OSwKKwkweGVhMGI5MzM4LCAweDgzOThkZjlmLCAweGVmZWRiY2Y5LCAweDVlNWEyNGRiLCAweDIwOTQ1ZGI1LCAweGQ2NzlkODZmLAorCTB4NWJmMTQxZDYsIDB4ZmM3ZjZhNjMsIDB4YjgzZGZhNjYsIDB4NjAyZjI0NWQsIDB4OWY3MWQzNzcsIDB4NDhiNGUyOWQsCisJMHg5MmY5NjMzZSwgMHhkYWFkOTYyOCwgMHhjMDFlNmJiMCwgMHg5MTMzNmIyZCwgMHhlYWE3MGEyOCwgMHg2ZjNiZDJjZCwKKwkweDAzZDJmOWE2LCAweDU1MmE4MTMyLCAweDgzOGNlYTliLCAweDRmODk3ZTY5LCAweDhhZmM4MTY4LCAweDNmNjAxZjlkLAorCTB4MGNhNGI5ZGQsIDB4ZTAzOWY3ZjYsIDB4NzUyZjk0NWIsIDB4ZWU5M2RhZGIsIDB4N2RjYmRmYTYsIDB4N2VhMDBhNWIsCisJMHgwOWMxNjZmOSwgMHg3ZWJlNWM0YiwgMHhiZjAwODdkNywgMHgyMTFlNTViYywgMHhjZDE1Zjg1MiwgMHhkYWExYzQzMSwKKwkweDE3ZGI3OTJmLCAweGFkZTMwOWRmLCAweDk0MjY0NzdhLCAweGFiYjI5MWVkLCAweDE4OTExOTBmLCAweGUwMjM0NmE0LAorCTB4MTNkMzZhYjUsIDB4ZTc5YmUwNDYsIDB4MWZiMDA3M2MsIDB4MmY1NTlmMDUsIDB4YmI2ODdlZDMsIDB4MjcwNGQ3ZWEsCisJMHhjMGRhYWQ0YywgMHgzNzg1Y2RmOCwgMHg2OGJjZTZhMywgMHgxOWQ1Nzk4MSwgMHgzN2ZiNDE0NywgMHhiZDQyMzUxZiwKKwkweGViZjE1ZjUyLCAweGRmMTgwZTUxLCAweDhjMDE2MzA2LCAweDYzMDZmZDczLCAweDU2NmY4YTg5LCAweDMzNTZmZjM0LAorCTB4ZTk0ZDUzYWUsIDB4YmQxOWRkMDMsIDB4Y2UzOWU3YWYsIDB4Mzk3Yzk1YjcsIDB4ZGY0ODQwMTUsIDB4NDMzOGNmOTIsCisJMHgzMzllODdjNSwgMHg1N2ZkMjFjNCwgMHgxMWM0OGIzNCwgMHhkZjc4MWY4MSwgMHg4NzYwZmJlNywgMHhiZTAzZjE5NSwKKwkweGMwZWQ0YjVlLCAweDc1ZWJjMjFhLCAweDRmZDdjZWM5LCAweDg4Y2Q2NjBhLCAweGU3MWVlN2MwLCAweGNiOTFhM2YyLAorCTB4N2U0MTI3OGYsIDB4MmU2OWY0ZDAsIDB4Zjk3MWQ2M2YsIDB4ZTI3MWU0ZDEsIDB4OTMzZDY3ZjcsIDB4NzFlZjVkMzAsCisJMHg2N2JjZmE2MSwgMHg0ZjNlYTYxYSwgMHhjMTdiZDYxMSwgMHg4ZGQzMDczMywgMHg3ZjdlMzcxZSwgMHg2OTg2NTNjOSwKKwkweGJmMTZhN2IzLCAweDhlNTllMmJmLCAweDE3OGY2NmU5LCAweDU5ZTZiZmJmLCAweGE3OGI2OTgzLCAweDllYWRkMzExLAorCTB4M2Q1YjRjMjYsIDB4YmFmN2FjM2UsIDB4MzZkMzE5YTcsIDB4ZmY3ZTBiNGYsIDB4NTMwZGE3YjUsIDB4ZTk4MDI3YmYsCisJMHg5YTVmNTg0ZSwgMHg5OGVkM2MwNiwgMHhjMzFjZjZlZSwgMHgwM2E3YWY3NCwgMHg5Y2Y3ZWRkYiwgMHhjNzJkNzRjMSwKKwkweGU0OWIyZGJiLCAweDM2NmYxNDQ4LCAweDE4Mzk0MTE3LCAweDkxY2FlODVmLCAweDg4YmUzZTY5LCAweDdhZTY5M2U1LAorCTB4OWYzNDhjNzMsIDB4OGE3OWE2ZTQsIDB4ODE5NWMxYzcsIDB4MGZjZDEzMWMsIDB4MjllNTY1YWUsIDB4NjZiOTI0M2YsCisJMHhiMmYxNGY5YSwgMHhhZWI1YjRmMiwgMHg0ZjlhMjhkYywgMHhhM2U1NjQ2YiwgMHhhMzczN2JkNiwgMHg4Zjk0N2U2OSwKKwkweDM5Yjc1Zjk1LCAweGYzNDMxYjkwLCAweGYyYjBiNWQ3LCAweDY3OTI3ZWIxLCAweDAxYjFmOWExLCAweGQwN2YxZjk2LAorCTB4ZjlhNTY3OTUsIDB4OWYyY2VkZjEsIDB4Y2YzN2ExZjUsIDB4MWQ1OWYzNDYsIDB4NWQ0ZGZkYWMsIDB4OWE1OGJjODEsCisJMHhjYWM4MjliZiwgMHhmMjRhYjk2ZiwgMHgyZTQwMDNlZCwgMHhiNWNmOTgwYiwgMHhkMWM3ZTRlNCwgMHhlNTlkYWU3YywKKwkweDRiMTY4NjBiLCAweGI3ZjQwODhlLCAweDA4NThlZTUzLCAweGIwODY3YzIyLCAweDdlNTEyNWQxLCAweGYxZDhkM2IzLAorCTB4NjQ3ZDE1MTAsIDB4NGJhYWYwYTEsIDB4MjAzM2ZjYTIsIDB4ZmU1MDQ1OTMsIDB4OTYzYWYwYjAsIDB4MTk2NDhjMDcsCisJMHhiYzJhM2Y5NCwgMHg2NWJiZTU4ZCwgMHg1Y2ZmOTYwNywgMHg0NmYyYzAzOCwgMHg4N2ZmOTYwNywgMHg3YmYzMDg3MCwKKwkweGVmOTYxNzY1LCAweGYyYzRmZTEwLCAweGZmOTYxNzQ2LCAweGY5ODEzODVlLCAweGNiMWJiMmZkLCAweDk2MmU4NTNiLAorCTB4ZmNiMWJhMzcsIDB4NTc1M2U5NDksIDB4ZGYyZmVkM2UsIDB4ZGMyZTllZTAsIDB4NWRkYjcyMDgsIDB4NmE1OTcyODYsCisJMHg1OTdlMDY0OSwgMHgwNGZmZjljZiwgMHhhZjJkMDY0MCwgMHgzOTQ0NjQxZiwgMHhhY2YzZjNiOCwgMHhkMzgxNDUxNywKKwkweDk3YzgwMGY2LCAweDA1ZmEwNGJjLCAweDQ4NWIzMzg1LCAweGMyODI3ZDA0LCAweDczODZmYjExLCAweDM0OTMxN2NiLAorCTB4YTJmOTZlNzAsIDB4MjBmMzgxNGMsIDB4MWZlYTg5YzIsIDB4ZGM1ZjlkOWMsIDB4MTdjZjFkYTQsIDB4MTI5YzBhZTUsCisJMHg3ZmI1OTc5YywgMHhjYmU1YmFmMywgMHhiZTc4ZWQ2YywgMHhkNGUwNTRhYywgMHhmZWI4OWMyMCwgMHg0ZjIwMjc4ZCwKKwkweGM4MDljMGQ0LCAweGU1OWMwYWE1LCAweDdmYjEyNzA4LCAweDI3MTk3MWUzLCAweDhjYjhlMDZiLCAweDc1MzgxNDRiLAorCTB4ZmY1MDY3MDgsIDB4Mzc4YzA0ZTAsIDB4YWM2M2M3NmIsIDB4ODYzY2UwNTAsIDB4YmZkNjFlNzgsIDB4NTM0Y2I5NzksCisJMHg1NTMxZTNiNCwgMHhjMjllNzAyOSwgMHgwZmY2YTRmMSwgMHgxNmFiNmVjZSwgMHgyMWFkYmIzZiwgMHgzODQ3YWNmYywKKwkweGFmMzdmYjIzLCAweDNmMTY5YjVjLCAweDdlMTBiNmI5LCAweDZiOWMyMTM2LCAweGI3NjcwN2ZiLCAweGRkOWY4YjRkLAorCTB4NWU3ZTEwYjYsIDB4ZTk4Y2ZjNDMsIDB4NjM3MmJjZGYsIDB4OGRjOWY4YjUsIDB4MGRlN2UxMGQsIDB4ZmViOGNmMWMsCisJMHhhMjZmNjc4ZCwgMHgxMzdiM2YxNiwgMHgyMDA5Zjg0MywgMHgzN2ZiMWI5YywgMHgyZDI0ZmM5ZSwgMHg0MjkzZjI3ZSwKKwkweGUxMDc3OWY4LCAweDljMWZlZTRjLCAweGZjNWE0OWJkLCAweGUxMGE0ZGVjLCAweDY3MDgwZmU3LCAweDk1ZTZmZjRhLAorCTB4OWY4YjUwM2YsIDB4ZmMyMTgxZmMsIDB4NzI3MDgwN2MsIDB4YTk0Y2NkZGMsIDB4YmRhYzcwYTQsIDB4NGMzZmQ5YzMsCisJMHhjM2ZkOWY4YiwgMHg4OTM5Zjg0MiwgMHgzODUyYTY3MCwgMHgyOWMzN2RlOSwgMHhhN2UyZDE0OCwgMHg5Zjg0MjUyMCwKKwkweGI2ZTcwOGYzLCAweDlmZDljMWZlLCAweGZlY2ZjNWEyLCAweGFlN2UxMDk0LCAweGZhM2I5YzIwLCAweGUxODJhZjM3LAorCTB4MGMxNGZjNWEsIDB4NTViOWY4NjcsIDB4ODY3Mjg3MWEsIDB4ZDgyNzRlY2EsIDB4OWExOWRmZTcsIDB4YzEzMjEyZTMsCisJMHhkMTc5NjI0ZSwgMHhmN2EwMjRlZSwgMHg0MzNlOGE4OCwgMHhhZDIyNWRkYSwgMHgzNzFjZDk2ZiwgMHhkNmEyMzFmZSwKKwkweDA2OGQ3MjZiLCAweGFhNTZjZjRhLCAweDlhZjVhOWU1LCAweDFhZDE0OWQ4LCAweDE1Y2UyYTNkLCAweDRjMjdjOWFmLAorCTB4OWZhOWFjMWIsIDB4MjlhNjk0NTgsIDB4M2FlNzM4MWYsIDB4ZjcyMGY5NGQsIDB4NDg3ZTRkNzgsIDB4ZmE5YTRkZDksCisJMHgzNTczNmFjMywgMHg2ZmNiZTFmOSwgMHhmNTRmZDRkNywgMHhkM2U0ZDRjZSwgMHhhOWFmZGNkNywgMHg4MTcxYjIzZiwKKwkweGE2OWFmY2E2LCAweGI1Zjk0ZDcyLCAweGZjOWFhNWJlLCAweGQ3ZGZjZGY1LCAweGIyZDMxZmQ0LCAweDQzN2U1MzQyLAorCTB4ZjI5YTYzZGIsIDB4MzUyNzgxNzEsIDB4OWUwNzA5ZjksIDB4YjFiZmQ0ZDUsIDB4Zjk0ZDA1ZmQsIDB4NjhhZjYzYzQsCisJMHg2Yzc3MjdjYSwgMHgzZTZmZTRkNSwgMHhmZDRkNmJmMywgMHg5YWRkYzEyOSwgMHhiZDlmYWRmYywgMHg0MzlmYTlhYiwKKwkweDZmYWI1M2ZlLCAweGQ0ZDAzZjliLCAweGExM2Y2YTlmLCAweGYyNGVmZjI5LCAweDU1M2QzYTI3LCAweGNjYWYxZjZiLAorCTB4MzJhZmNjMjEsIDB4MDFhZmQ5ODgsIDB4YzZmMzExYWIsIDB4YTc2NjE2YzEsIDB4MjcxYzRiNTgsIDB4NzcxOGZkMjksCisJMHhhMDBjNzQyZiwgMHgwMzM0MDNmNCwgMHhlMGNlNTE3NiwgMHhlODNhNmJiMiwgMHhlNGRkZWZmNywgMHhiZjRlYzZiZSwKKwkweGJlZThjZjdmLCAweGJmNDExZWMxLCAweDkwMjZmNGExLCAweDA2MWQ0ODY0LCAweDhmZTVmNTQ4LCAweDczZGU4Y2NhLAorCTB4ZDUxZDVjODcsIDB4MThkN2RiNDksIDB4NjhlMmEzODIsIDB4ZTczMTIzZmUsIDB4ZjljN2EwM2UsIDB4ODNlZTAzMDYsCisJMHg0MmQ0OTE2OCwgMHg0MTEzNjhiZCwgMHhkNGQxZTliYiwgMHhhYWJkMTdhYywgMHgxODY2YjBmZCwgMHgzMDg0MzNkNSwKKwkweDNiYjIzNWRjLCAweGMzMjhmNTE5LCAweDliZDAzYWY4LCAweDc5ZDE4N2VhLCAweGQxNjQyNjBkLCAweGJjYmI3MThhLAorCTB4NjFmYjY4MjMsIDB4OGZlMGM5MjUsIDB4M2Y5OTE5MzAsIDB4OTFiZmQ0MjQsIDB4ZmQ4MTlmZjYsIDB4NmJmZTgxMmYsCisJMHg5NGRmZTk3YSwgMHhiZmQzNDkzNiwgMHhkMzRjYTUzOSwgMHhmYjQ4ZDliZiwgMHg5MGYyMTNiNywgMHhiZmRlMjZlMSwKKwkweGNiMzZmZDE5LCAweGZlYzY0YzU2LCAweGQ4NjUyOTRkLCAweDZhNDZhM2ZmLCAweDhmZmJhOTc3LCAweDg4ZmZmNTBlLAorCTB4MzFlYmY2ODEsIDB4YzdiOWJiMzAsIDB4ZDI2ZWQzZmMsIDB4NWNhNTNmY2UsIDB4OWIyMzdmM2IsIDB4MmU0MzRhZmYsCisJMHhlNzFhM2ZlZiwgMHgwZTQ1NmFiZiwgMHgzOTRhN2Y5YiwgMHhjMTg5YmY5YiwgMHgwYjZmZjUwZCwgMHhmYTAxYmZlMSwKKwkweGZkMmY2OWZmLCAweGI1YjNkMjliLCAweGE5NWUxZmYzLCAweGY1ODliZjlkLCAweDc2ZTE5NGZmLCAweGZiMDViZmRlLAorCTB4NmRjNTdhN2YsIDB4MmJjM2ZlNmMsIDB4YzlhMzdmYjEsIDB4MzFmYTA0ZWQsIDB4ZjVhZTg5MGUsIDB4NTBjOWZlZDEsCisJMHgwNDBkMjU2YSwgMHg0MGZkYTE3MiwgMHhmZDFlM2EzYSwgMHhkMjFhNzcwOCwgMHg4YmRmMWM3MCwgMHgyNTc2ZjQ2NiwKKwkweGYyMWJkMjlhLCAweGMzYjMyZjMzLCAweDUyNzM5NDdkLCAweGQzOWFhYWJiLCAweDFjZTZjNTdhLCAweDJjM2RmMDIzLAorCTB4MzE2NDIyNGYsIDB4MzZhMmVhMWYsIDB4M2M5YmU5MTEsIDB4YTQ4ZGYyNmQsIDB4MjZkMGJkZTMsIDB4ZThiZjIxN2EsCisJMHhlMDNlMjllOSwgMHgzMjI2MzVhZiwgMHg0OWRhMDhiZiwgMHgzZmRmMDAyNCwgMHgxNzk4ZDlmZSwgMHhhN2QyZjNkNCwKKwkweDUzZTUxYjhiLCAweGRlNDVmYzkxLCAweDk2YmEzMjVjLCAweDEwMDJlZjhlLCAweDljN2YyYTgxLCAweDE4NjA3MWRhLAorCTB4MWVlZDQ4N2YsIDB4MTM5ZmVkNDIsIDB4MjNlZmViMzIsIDB4YmU0MWVmNmEsIDB4Njg3YmRhODMsIDB4ZTYzYTkzMzgsCisJMHhkZWJhZjM1NywgMHg1ZmM3NDExZiwgMHgwYjlmOTQ0NCwgMHg2ZTJmNzllNywgMHg2MjRmMGEyOSwgMHg1YWY4ZjdmYiwKKwkweDMxZWIwN2MxLCAweDQ1MGM3OTdmLCAweGM1M2M3ODdlLCAweGJlNGQwNGRlLCAweDA3ZWFjNGM2LCAweDJmN2MxMzZmLAorCTB4MGRjMzA4MDgsIDB4ZTFjMTk5ZjgsIDB4Y2QyZjE4MTEsIDB4MzZiM2IxY2YsIDB4YjFkZTc3NDcsIDB4N2RkMWIwNWYsCisJMHg1ZDA4NjZiNCwgMHg1OTljMzA4YiwgMHhhNDBmMjVjNCwgMHg1NjVlZWZlZCwgMHhhNzZiODMyYywgMHg4MTg2MTA1ZCwKKwkweGExNjZiMDlmLCAweDM3NjgwMjRjLCAweDA2NDkxMzdiLCAweGRlM2EwZTI3LCAweGZlMGNlZGZiLCAweDUyN2M5NzBjLAorCTB4MjM5YjQ3ZWQsIDB4NzQ0NTVkOWIsIDB4NDU4YTczM2MsIDB4NjlhY2ZmMWMsIDB4ZWQzZmYyZGEsIDB4YzYxOTcxOGMsCisJMHg1M2NkNzRkMiwgMHg0NWRkY2ZkOCwgMHhlNzdiZjJkYSwgMHhiOWY3ZjM2OCwgMHg1NzJhNzliNSwgMHgwZmFiOTA2NSwKKwkweDUzYmZlOTk0LCAweGRmODEyNGI0LCAweDAwMWJmNDMxLCAweGUzOTA3Y2UzLCAweGQ5NWFjMWUxLCAweDZhNTc1OWFiLAorCTB4NzI5NTFiNzYsIDB4MDliODg0NzAsIDB4OGJkYjBiY2UsIDB4NWZjZmViM2QsIDB4N2IxN2NkYWUsIDB4NmI4NWY5YjUsCisJMHhkZDM5ZjA3NCwgMHg3ZmViZTI5YywgMHhhNjgzZTgxYywgMHgyODNlODFhNywgMHhmYTcyNGYzZSwgMHgyZDU1ZjMwOCwKKwkweDlhMTNkYzdkLCAweDY1MGZhMzA2LCAweGI2MjRhNzFlLCAweDMzZDZhNzA0LCAweDE4ZGM1OGZhLCAweDhhMWU5OTEzLAorCTB4NTJlMGY0NDMsIDB4MGY0Mjk3ZDMsIDB4ZmMzZDM4ZjMsIDB4Njk0M2QzOTksIDB4ZWVhZTk2OTMsIDB4YzlkNWJlMjMsCisJMHg2YjAzZmRiNCwgMHgxZDNhZTE3NywgMHgzZDE5OGExMSwgMHg4N2ExNDBmYywgMHhiODNkMGQwZSwgMHhkN2U4M2QzOSwKKwkweDg3YTcxZTZmLCAweDdhMzA4Zjc5LCAweDA3NjdhZmQwLCAweGE2OGU4N2E3LCAweGViNDkzMmNiLCAweDFkNzRhZWI5LAorCTB4MGViYTc5MzQsIDB4YTNiNzc1YmEsIDB4NDdhZThhMWYsIDB4MTA1ODdhNDQsIDB4Mzg5ZDM3OWEsIDB4NjVlNDJmY2QsCisJMHhkMzhiZDYzZCwgMHgwMWE3OTYwMywgMHgwOWUyMDlkYSwgMHhhY2Y3YTdkYiwgMHgyNjg0Zjk0ZiwgMHg3OTE0ZGE1ZiwKKwkweDM2ZGE2YmZkLCAweGZhYTkzZGFjLCAweGYyZjJkNTVlLCAweGJiN2ZiNTVhLCAweDI2OGI3OWEyLCAweGE2ZjdjNGJmLAorCTB4ZDM2OTdlYTYsIDB4NzE3ZTRkMmUsIDB4ZmE5YTNiZTMsIDB4ZDIxY2Q3MGIsIDB4N2ZiZDhiZTQsIDB4YmY5ZmQ0ZDQsCisJMHhmZTUzNTNiYywgMHg0ZDU5ZWQ2MCwgMHgxNzY1MDNmOSwgMHhkY2ZiZjkzNSwgMHhiZmQ0ZDM3ZiwgMHgxM2YwOGU3NywKKwkweGEyZWVmZTc1LCAweGViYTg5ZmE4LCAweGE3MTY5YWNmLCAweDBkNzBjZmM5LCAweGVjMzdkNGQyLCAweGEwMmVmNmJjLAorCTB4OGJlZjgzYzcsIDB4NGY4ZmY0MDQsIDB4ZmZkMWE3OWQsIDB4NzY1M2E5ZjksIDB4MWU5MzlkNDIsIDB4NTM4M2VlMDcsCisJMHg5ZTk4ZDE5ZSwgMHg5ZjcxMzhmMSwgMHhjMjRjZjM5YywgMHgxZWRiNDJmNCwgMHgyYTE1YzgwYiwgMHhjOGUwNGI0NywKKwkweDk2ZTU3NGE2LCAweDIwZDkzNWJhLCAweGRmY2EwOWQ3LCAweGQ0NmY5NThhLCAweGIyMTI4Nzc5LCAweDhhNjM5NDE0LAorCTB4MjMyNmMyZWYsIDB4NDQyMDRjMDksIDB4YzdjNGUxMDAsIDB4ZTU1NTE0MTUsIDB4Mzc5NDdkMWQsIDB4ZDA5MTQxNTEsCisJMHgyM2IwYmNiMywgMHgyNzlhZjdmMiwgMHgyM2RiODc4YiwgMHhmNzg0N2Y5YywgMHg3YTAyMTkzNSwgMHhlNzJmNzc1MiwKKwkweDI5MDI5NTI0LCAweDY0Mjc3ZjUyLCAweGFkODFmMjA1LCAweDM0YTk0ZjVjLCAweGI5NTE3ZTMyLCAweGIxMmU1MDc1LAorCTB4YWEzMDNlNDEsIDB4NmJmYWFiZjYsIDB4MjA2YzliYTEsIDB4NjZiYTQ5ZDAsIDB4NWQzNjk3M2YsIDB4MDRmN2UxYWYsCisJMHg0MDg5Y2ZiYywgMHhkZjM0MTM2ZiwgMHhkNjZmOWEyYiwgMHgyNWRhZWJiNCwgMHg4MWFiYjhlMiwgMHhmZGI5NTA5NywKKwkweDUyN2EyOTJhLCAweGQ4MTUzZTA0LCAweDBjNmIzMjkzLCAweDE0ZjVkMzhjLCAweDUxMTJkYmU2LCAweDM0ZjJlYzhmLAorCTB4YzdmMzg1YWYsIDB4NGMxNjllNzMsIDB4MzBkYTc4Y2YsIDB4YWMwOWU1M2QsIDB4OTNjMDczODUsIDB4MWU5ODAzOWUsCisJMHhkYTYzYjRmNywgMHhlOTg2MzllMSwgMHg0YzBlOWU0NywgMHhjMTljZjQzZiwgMHgyMDllNGZmNCwgMHg5ZjNjYzdhNiwKKwkweDQzYzQ3YTYxLCAweDBlNzAwMjdlLCAweGZlOThjYzdiLCAweGI0Yzc2M2MxLCAweGU5OGM5M2RkLCAweGZiMGY4ZjA1LAorCTB4NWY1ZGY2NTEsIDB4Y2I4Njc3NzQsIDB4N2Y0MDczZWQsIDB4YmI2Y2U4MTEsIDB4Y2Q2ZWFjNzgsIDB4YmQ5ZDMwZDAsCisJMHhhNDIzZjJiOSwgMHg4NWNmMDUzMywgMHgwZjRlMjY0ZCwgMHgwODdhMWE0OSwgMHgyMzc3ZWQ4MCwgMHhlNTFmNGJkMCwKKwkweGMzYTczMjRkLCAweDJlNDdkYWRlLCAweGJmZTE3OWFmLCAweDdjYWVkZTg3LCAweGQzMGI3YTRiLCAweDNkMWQxMGQzLAorCTB4NGY0NWY3YTUsIDB4ZTllOWFhMWYsIDB4ZTRjZWMxOGEsIDB4MWZhN2E3MjAsIDB4N2Q2YjczZjMsIDB4M2IxMjUxYmYsCisJMHg3N2U5MGNhNywgMHg4MDBjZGJhZSwgMHhkY2ZjYTVhYSwgMHg5ODY5OTA4NCwgMHg1ZWZiYzRiZiwgMHhhM2I1YzE0OSwKKwkweDBkMWJlODFlLCAweGU4ZDJlYjcyLCAweDczODI4ZmJmLCAweGU4Yzc0Yjg3LCAweDNlZjZhN2UyLCAweGY0OWQzZDNmLAorCTB4ZGExNzc3OGUsIDB4YmEzZTI1NDMsIDB4YzYxMTA5ZTgsIDB4MWFmMGNkMWIsIDB4YzhkMzIwNjUsIDB4NDYxYTQyNzgsCisJMHg5MDVjZTRiZSwgMHhjNDg5Nzk4MSwgMHg3MzlmN2I0MywgMHgzYWYzODQ0NiwgMHhjMDZiNzU0MiwgMHg1ZDc4NWY2ZiwKKwkweDE2MzJiZDY5LCAweGY2N2E5ZGUwLCAweDVlOTA1OTFmLCAweGY0NzVmYWUxLCAweDdjZjUxMTFlLCAweDA5ZDE3ODEyLAorCTB4MjVjOTBkZjgsIDB4ZmMxOTMzOTMsIDB4NDY5MWMxZjMsIDB4NjQwOWVhM2IsIDB4ZGU3ZjE2YmEsIDB4NmJmODM1ZGIsCisJMHhjZmNlNTU0OCwgMHg3ZjExOTMxYiwgMHgxYThjYWUyMywgMHhmNWZjMGZkNCwgMHhjMmZiZGZjNSwgMHhmNzk4MDJlNywKKwkweGZiM2UwMzdmLCAweGYxN2Q4ZmUyLCAweGJjNzJlMjQ1LCAweGRmZTc0NmQ2LCAweGY4Y2M3M2JkLCAweDA3YzAxY2M3LAorCTB4Y2FkZjFhYmYsIDB4M2M3ZTljNzksIDB4YjVmNDkyZjksIDB4NDkzYmI4ZTgsIDB4MTRmNmUzYTEsIDB4MjRkODViODgsCisJMHhhNWZlMTFkYSwgMHg2MTYyNmJkNiwgMHhmYTcwNDI1ZCwgMHhlZGUxNGY1OCwgMHhiZDgwYTczZiwgMHgwYjU1M2U3ZiwKKwkweGVmMDc0YjJmLCAweDZkMTc4MWQyLCAweDRkMmQ3NzYwLCAweDMyNzBkODVlLCAweDY5MjgzYWMyLCAweDgzNWQ0YjU1LAorCTB4YjY4N2FkNDUsIDB4MWE5N2YzNjksIDB4MzgyZDY5ODUsIDB4ZWNlYzQ3MmUsIDB4NmEyNzIwMzEsIDB4NWVkZjE4MWIsCisJMHg2NzAyYTk4ZSwgMHhmNjA5NzI2OSwgMHgzZDM5YWU3MywgMHgzZTdiZDk5NiwgMHhjNzM2MGZjNiwgMHhlNzM4YmYyMSwKKwkweGZmZmFjMzI5LCAweDA2ZjRmMWVjLCAweDIxMGYxOTQ3LCAweDE5ODRlNGFkLCAweDRiMmQzMWY4LCAweGFmN2ViZGVmLAorCTB4YzVmZDJjZjQsIDB4N2VkZGU3ODgsIDB4ODllODBhZjksIDB4OTdkZmZhNjYsIDB4MDkxMDc3NjAsIDB4OWFkYzBhZjMsCisJMHhiYTZiZDExNiwgMHhkNjZmYmUwMSwgMHgzOWRiNDdmNCwgMHgyZmUyMzM5NCwgMHhkZjZhYmVkMywgMHg0Mjk0ZTQ0OCwKKwkweGQ0NWU1NGI3LCAweGU3ODBiZDgzLCAweGQ0MWE0YjliLCAweGNiNTU1OTdhLCAweDlhZjkzNTc3LCAweGQ0MWE0N2I2LAorCTB4ZmMwNTVjN2EsIDB4NTI1ZmYyODMsIDB4Mzc0MDQ4MmIsIDB4YmE4YzljOTUsIDB4ODExYWNiMjUsIDB4ODIxOGFmOGUsCisJMHgwODhmODA0ZiwgMHhiOTk1NWVhYywgMHg5ZmE2ZThjMywgMHg3NWIyYjdjZSwgMHhlNzdjNmRlYiwgMHg4ODU0ZTYzYywKKwkweDM3MzMyODNiLCAweDU5NzIzOWUyLCAweDIwZjliNWNiLCAweGFlYjdjZTY3LCAweDViZjkwMjRjLCAweDVlZmE1ZTIxLAorCTB4YmZmNjg0NTEsIDB4NWYyZTA0OTQsIDB4Y2Y1NmEwZTQsIDB4Mjg0MWY0ZTcsIDB4ZTliY2Q1NWMsIDB4MTdjMjEyY2YsCisJMHg5ODE5NzdjZCwgMHhiNzBmNDY1ZiwgMHhiZTkxY2I4ZCwgMHhmOWJkNTNmMCwgMHg4ZWNkYzE1MCwgMHg2ZWFhNzg5ZSwKKwkweDIzNzQ2OGJiLCAweGNiZmZhNDVmLCAweGMxNDllMzBhLCAweGQ0NTRiMTVmLCAweDk3NzFkMTI2LCAweGZmYTI3NzM3LAorCTB4MWRlYzhjZTIsIDB4ZTBhZjgzZjUsIDB4NjdlNzNkOTcsIDB4YTMxNTNlNDksIDB4YjQ5Nzk3OWEsIDB4MjYwYjNmNDMsCisJMHhlMzg4OGVmMSwgMHgxZjI4MGZkZSwgMHg5OTViZmIzZiwgMHg1NzIyMWYwMCwgMHg3NDJjYWQ2OSwgMHhjN2JiNzBjZCwKKwkweDYxNTkwYzQwLCAweDZiNDE2N2JiLCAweGZiZTAyMTQ1LCAweGQxZDNlYmVjLCAweDhhNDQ1YmVlLCAweGE0MGViODZjLAorCTB4OWNlYzBiMzEsIDB4NzE4MGM0ZjMsIDB4MWZjOWU3NTUsIDB4ZWI1NDEzNmMsIDB4ZTQ2NGIxZjAsIDB4MzA1Y2E2NzgsCisJMHgxMDM0YmI4OSwgMHhkODEwN2JiZSwgMHhmNTM5YTY1ZiwgMHhmODU4ZTJlZCwgMHg5MDc2MjkyZSwgMHgxNWNhMjVmMCwKKwkweDE3ZjE4MGI3LCAweDJmNzdkODczLCAweGZkMDFkNzMxLCAweDYzNGE3YjUyLCAweDRhN2I1MWFmLCAweDk0ZjZhNzkzLAorCTB4NjY0MjVmMjYsIDB4NDUzYzQxMjYsIDB4ZjEzMmQzYzksIDB4NGQyNzg4MDksIDB4OGVjOTQxZjksIDB4YjUyNTJiZTMsCisJMHhmZDFmYTBmNSwgMHgxNmUxZmI5YywgMHg4NDM0ODlkOCwgMHgzN2FhODdjYSwgMHhhNjJhY2I5ZSwgMHg5ODkyZTlmMywKKwkweDBmODk0YmZmLCAweGM1NjU0MjU4LCAweDVlNWU1YTIwLCAweDJjYmEzM2U2LCAweGEyNzdlNzNkLCAweDk0M2RjMjc1LAorCTB4MTYzYzAzZjMsIDB4ZDFiZjcwMDcsIDB4ODg2YmUyYzcsIDB4YWFlMmNhNDMsIDB4ZjNlZjVhNGYsIDB4YmEyYWQ4MWYsCisJMHg4ZjUwNmNhMiwgMHg5YmM2NTc3ZSwgMHhhZmU3ZjVmYSwgMHg0ZjIxMmY5ZiwgMHg5YmNhM2NlMiwgMHg1NjFjNjA2NywKKwkweDNlMDc3ODhmLCAweDcwNTliOTFmLCAweDI3ZWMyMmY5LCAweGYxMzQxNjUxLCAweGMzMzIwOTJlLCAweDFhZDdlMjlmLAorCTB4MGY1ZmNiYWUsIDB4NmJkZjk1NzksIDB4MWJmY2FlYTIsIDB4NDQwMTk3ZjMsIDB4MjU4YTVmYzMsIDB4OTEzOTcwZjcsCisJMHhiZmMwMTNmMSwgMHg3ZjcxMDUyMCwgMHhjOWY4NjM3ZCwgMHgyZjVmZTAzZCwgMHg4NDRmZjhkZiwgMHhlZmJiNTQzZiwKKwkweGZmODlmYzI5LCAweGU4OGZmMWQ0LCAweDQ4YmNmZTMxLCAweDc4ZGVhYmYwLCAweDc3ODg3NWY1LCAweGNmZDVmZjJjLAorCTB4YjdlZTg0NmMsIDB4OTI2MzUyYjMsIDB4ZTU3YmFlOTMsIDB4MTczNmQ1YTYsIDB4NmJjOTFkZjAsIDB4ZDY3MTdkODMsCisJMHg0NDhiNGUyNywgMHg3OTk3ZGYwZiwgMHg1OTcxMWZkYywgMHhjMmJiZjAwNCwgMHg3M2ZjMjkzZiwgMHg0ZWY4ZmNhZiwKKwkweDZjYWVhM2IwLCAweDRmZThlZDkyLCAweDRjMDUzNjZkLCAweDViYWI5ZTk0LCAweGIxOTIxNDk3LCAweGY5NjRlZjk4LAorCTB4ZmQwMjJmNDcsIDB4YzdjOWI0ZDcsIDB4ZmU1YTc0ZDUsIDB4NDEyNTlmY2IsIDB4OTRhNTEwN2MsIDB4NDg2NDg2MjEsCisJMHg1NDlmNjgwMywgMHgwMGI4ZmM2ZiwgMHgxMjFhOGRmNCwgMHg2ZmFhZmRjNCwgMHgxNjdmZmQwNywgMHhkOGIwZjI4ZiwKKwkweDFjYjNkYjE4LCAweGQwNDkzNDFkLCAweDVhNmFmZDllLCAweGI0NTE3YzdmLCAweDY5ZGI3YTQxLCAweGIyZDQ2ZmUwLAorCTB4YmU5MGJmNDQsIDB4M2JiNzE5NWQsIDB4MDBlYjY0MmEsIDB4YzkxM2FiZTQsIDB4MGFhYmUwNDQsIDB4ZDk4Zjg4NWUsCisJMHg3ZTVmMmIxZCwgMHgxZDI3NmM2NiwgMHhkZmM2ZDc1NywgMHhiZTE1MDRkYSwgMHg1MmU5N2IxNCwgMHhmYzVmYzJjYiwKKwkweDFmM2JkMWRhLCAweGEzZjc0MGJmLCAweGU0NTViZjVhLCAweGRiOGRhMzk0LCAweDU2OTY3ZTRiLCAweGM0MWIwMWNhLAorCTB4OTA2ZTU1NzMsIDB4YjlmYTVlOWQsIDB4NWYxN2Q1ZjIsIDB4ZDlmYzE2N2EsIDB4NDczOTM0N2YsIDB4YWYxNWY4NTIsCisJMHgxMzcyM2JlZSwgMHg5MTZjNTdjZCwgMHg2OWIyMTQwNywgMHhmMGE0ODQ1OCwgMHhmZmQwZDRmYSwgMHhhZjBmOGY5NiwKKwkweDdkYjZmOTQ3LCAweGY2MThjNzQ2LCAweGUxZjE4N2ZkLCAweGIyZDhhOTc1LCAweGY0YzY0OGNiLCAweGNiNWU0N2M0LAorCTB4MjU4NzYzMmUsIDB4NzRiNGZhYzIsIDB4YjdmZTgwMTYsIDB4MWFiZmU1ZjIsIDB4ZGQ5ZGVmODEsIDB4YTk4MTkwMjksCisJMHg2MWI5ZjAxMSwgMHg4MDg3ZWExZiwgMHhiZTRmNWMyNywgMHhkM2Y1YTE1ZSwgMHhlYmExYWZkNSwgMHhiZjQ2NzIwMiwKKwkweDg1N2FmYTVlLCAweDVjMDBiZjljLCAweGY0YTFiMzg4LCAweDIxYWZkYWZkLCAweDI2NGZlZTBlLCAweGVjYTFlMDI3LAorCTB4MzA2Yzg3YjUsIDB4MmQ1MmQzOWYsIDB4NTZlN2YzYTMsIDB4MmJiZjAxMjcsIDB4NzY0OWJkOTMsIDB4YjJmN2Q5NGMsCisJMHhmYTQ2MWZlNywgMHg3MGY0M2QyYiwgMHhiYTU3ZjMxMiwgMHg3NjUwMTkwNiwgMHgzY2MxMDc3YSwgMHgxYmJmYWYxNywKKwkweGRjNDI1OWU3LCAweGNmNjU4NzQ4LCAweDlhM2U0NTg5LCAweDY5OTEyYTdlLCAweDkzZWMyMjViLCAweDljOWY3YzRiLAorCTB4MmUyZTgxN2UsIDB4NDU2OWU3OWQsIDB4ZTQ0MWZjMmUsIDB4ZThiYmUxNzIsIDB4Y2Y5ODdkMGYsIDB4OTg5MDZhODUsCisJMHhkNmNjZDRmZiwgMHhkMDZjODBlYiwgMHhmZDEwZDFjOCwgMHhlNTE0N2M2ZSwgMHhhZTYxYjljNywgMHg1NmVlNzA4MSwKKwkweDI4MTc5NjEzLCAweDUzNDNjNDQ3LCAweDYyNzViMjA3LCAweDUxZGIwNzcyLCAweGRmMDc5M2I5LCAweGVjYmI3ZWExLAorCTB4NjlhYjFhOGEsIDB4ZTk0NjcyODcsIDB4OWZlZjE5N2YsIDB4ZjQxYTNiOGUsIDB4OTE0OWQzYjcsIDB4NDZlMTkxZWQsCisJMHgzZDUwMGY4NSwgMHhhYTY3NDU0MywgMHhmZmY2Y2VmZCwgMHhkZmI2MDZjNiwgMHg5YmVmZmQ5NSwgMHhmZmNhMGQzMSwKKwkweDIzZWQ5ODcyLCAweDk3NzIwNzY4LCAweDEwMzAyYjhlLCAweDE2Y2Q3N2NiLCAweDQ4OTgzZjkwLCAweGRmM2VkMjIwLAorCTB4YWU3ZGYzMjgsIDB4MGJkM2Q3MmQsIDB4YzQyNGJmMWQsIDB4ZmEwNmU4YWEsIDB4NDA3NWM3ODksIDB4MzRmMjVmNzksCisJMHhhM2UyYWY2ZCwgMHhhZGFmZDAzNSwgMHgxZjY1NWMyNywgMHg3MDdlNzI5NywgMHhmNWMxZjgxZSwgMHhkNjQwN2U2MSwKKwkweDVlMmJmNjI3LCAweGJkZjY1MmI0LCAweDVmZWMyY2Y0LCAweDBlYmQ1ZmJhLCAweDExNzJiZmQ4LCAweGNkOTNmZmNjLAorCTB4NGZkYzhlN2IsIDB4MmQyN2VkZjcsIDB4ZjJkNWJlY2EsIDB4MmRiZWZkNTUsIDB4YzYzMGZhZGIsIDB4ZWRmN2ViOWYsCisJMHg0OTZiNDMyNywgMHhiZjRiN2RjNCwgMHg0M2I3ZGM0NywgMHhmODQ3ZmUzYiwgMHgyNGM3ODJhYSwgMHgyYWFmOTZhMywKKwkweDdjMzdiMjdjLCAweDE2ZTRmOWVhLCAweGQ1Nzg4MWQ5LCAweDNiZmE0OWYzLCAweGQyN2FiMjRjLCAweDBhODc0MmEzLAorCTB4NDdmZjk1ZmQsIDB4NDdlMDcwZDUsIDB4ZTg1NTNhMjEsIDB4MGFhNzQ0MzAsIDB4YWRlN2VhMWQsIDB4ZmNiZWEzYzUsCisJMHg1MjJkZjAyMywgMHg1MzdhMjk3YSwgMHg0YTk1ZjNjNiwgMHhhNjAzOGIzZiwgMHhjOTBmZjZlZCwgMHg1MGI5N2M0NCwKKwkweGZkYzY5MWNjLCAweGYzYTgwNjQzLCAweDQ1YmU1ZDNlLCAweGNiYTVkZjU3LCAweGJiZWFlOTE3LCAweDRkNWFmOTc1LAorCTB4M2RiNmNhZmQsIDB4MTA3NDgyNDYsIDB4OTcxM2Q0ZDAsIDB4MzEzOTNiZmYsIDB4ZmFkZDEyMjEsIDB4ZjVhMWJmOTgsCisJMHgzOWVlMTFhMiwgMHhkODgyNThkNCwgMHhiYzQxNWU1ZSwgMHhkYzE5MWYxMCwgMHg1MWI5ZTIyMSwgMHgzZDcxYzUzNywKKwkweGE3MzYzN2Y4LCAweDhmOTRiY2ZhLCAweDdlNjI4ZWFjLCAweGQwN2I2ZTg1LCAweGQ1ZDM0ZjE2LCAweDRjMWYyYzcxLAorCTB4MWYwM2Q2MzQsIDB4YTMwN2JlNTQsIDB4YmJiMWRmOTgsIDB4NTM4YjY4MjgsIDB4N2U5ZDViZDksIDB4ODc3OGY5MTEsCisJMHgwZGJkZjIyZiwgMHhkZDcwNjkyYSwgMHhkN2I5N2EzYiwgMHg3NThmOWNhMSwgMHg2MmM2ZGI0NywgMHgzZTI5ZDE3ZiwKKwkweGEyYTljN2EwLCAweGY4Mzk2NTI1LCAweDI3NDUxYWExLCAweGVhOGJlY2U4LCAweDc5YzFiNWVlLCAweGZkM2ZiNzU1LAorCTB4ZmJmNDM5YWUsIDB4MTY0NDc3ZTIsIDB4NDk3NWUzOGUsIDB4ZDA3NjU0ODMsIDB4OTc1ZGUyMTksIDB4ZjA1YzQwMmQsCisJMHg4NTlmYTQ1YSwgMHgyZDE3NjY3ZSwgMHgzZjc5MWI1YSwgMHgyNTc2ZjM5NCwgMHhlMDQ2NjU5NiwgMHgzOTBlZDRiYiwKKwkweDUxZWYzZWFlLCAweGQ3YWQ5NGUwLCAweGU3NGZmNzdkLCAweGVkMTFhNmZiLCAweGRhOGRmMmZmLCAweDlmYjczNzcyLAorCTB4ZmNlNDY0N2YsIDB4YzcxOTFjNjcsIDB4YmZlNjU3ZWQsIDB4YWE3YjdjZTEsIDB4MWNkNzcxOTgsIDB4MDdkZDNlYmEsCisJMHhmOWEyNjI0NCwgMHhkNzExN2U0YiwgMHhjMTY2ZDJlNywgMHhlMjM3ZmUwNywgMHg1N2ZkYzQ0ZCwgMHhmNTQ2ODI0ZCwKKwkweGQ4MmU4ODdkLCAweGNlZjRkNzVmLCAweGZmYjZiYWM3LCAweDQwMDdlYjM5LCAweDMwN2ZhZjQ3LCAweGRhNjlkZmY2LAorCTB4NDcxZmZhZjUsIDB4MzdmOTA1YmQsIDB4NDA3Y2E2OGUsIDB4ZGJjZmQ2N2EsIDB4MDJmMTg1MTksIDB4NDhhZDNiZGQsCisJMHhkZTNiZGRmZiwgMHhlNDAxZjk0YiwgMHg2MTM5MzRkZiwgMHhmZjNiZGQ5YywgMHhhOWU4MTYzYSwgMHgwY2E5ODU3YiwKKwkweDMwZjc2MGY4LCAweGI5NWRiZmU2LCAweDNiNjNhZmUzLCAweGMyYWVmZTUwLCAweDFhMzY2Yzc1LCAweGZmYzk5Zjk5LAorCTB4ZGVlMDhmOGYsIDB4OWQzZjI1YzIsIDB4M2MxN2U4MTUsIDB4ZDdlNmJlYWUsIDB4ZjA4MjNlNTEsIDB4YmVhNTlhZmYsCisJMHhlNzZkZjQwZiwgMHg0M2UzY2Q1MywgMHhjZTY0YWRiYSwgMHgxYzVmMTg1NiwgMHg3OWE4N2Y4YiwgMHg3NThiZjI2YiwKKwkweGQ2YWFmZmI0LCAweGI0ODVjNjVkLCAweGNmZWRlZjNjLCAweGZkMWM2MmM3LCAweDVkMzdhNjU2LCAweDg3OWUzYjkwLAorCTB4YzY2ZDg3ZjgsIDB4Mjk5NGFjZWYsIDB4MjZjMDJmOWUsIDB4NWRmNjQ2YTMsIDB4YjA3OTM1YTYsIDB4ZTVlMjdhOGYsCisJMHhmNWE3ZjQ3MywgMHgxYWVmMWYxNywgMHhhZmZkN2Q5OSwgMHhjNWMxMGY4ZiwgMHg2N2Q1OWZmOCwgMHg3ZmRlNjAxNiwKKwkweGY0MDNlOGZiLCAweDJlOTA5YTgzLCAweGQyN2VmOTk1LCAweDRjZmE4NzUyLCAweGZiM2VmMzVmLCAweGZhMGU4NmJmLAorCTB4ZDAyMTZmM2IsIDB4NGQ5Yjc5OWYsIDB4ZmRlYmRhZmYsIDB4ZWI4MWQxYjgsIDB4M2QwN2RmYTIsIDB4ZjdjNzdjZTksCisJMHhkNWFhZmYzMCwgMHgyN2VkZTM4OSwgMHhmZDM2OGZiZCwgMHg1YmVlYjYzZiwgMHhmYWRiYmFlOSwgMHhmZTc3Zjc5ZSwKKwkweGZiZGRlN2M1LCAweDhmMzNiZmJhLCAweGNlMWRiYmFmLCAweGZlZGU2YjUzLCAweDc1ZjdjNzFjLCAweGZmZTk1Y2Y5LAorCTB4ZjQ1N2JhNTIsIDB4YWQ0Mzc2ZmQsIDB4NmY4ZTkzM2QsIDB4ODJiNDY5MGUsIDB4ZTI1ZjcxNjIsIDB4MDNhNjRiMjUsCisJMHgwZjJmNzBhMiwgMHgzODNiZjhjMCwgMHg1NzYwOGQ1ZiwgMHhiZjk4OTkzNSwgMHg1ODE4MjRjZCwgMHg4MmRkZGFiYywKKwkweDNiNDQ0N2UyLCAweDVmYWU0ZWViLCAweDBjYjQzOWRjLCAweDVkM2I5MGY1LCAweDgyN2Q0MTNmLCAweDM5ZWRiNTQ4LAorCTB4ZWU3YjdlYjQsIDB4NmFjNjI3NDIsIDB4ZGNjN2YxOTIsIDB4ODUzZDlmOTAsIDB4ZTZmNmI1ZTcsIDB4MTJlMjA0ZWYsCisJMHg2NzdmN2VhOCwgMHhhMDAzZjRlZSwgMHgxMmU1ZGVlNywgMHgyOWE2MGY1MSwgMHhhN2VmYmZlYSwgMHg5M2VmYjAxNCwKKwkweDdkZDBmNmI0LCAweGRlZmU2ZDZlLCAweGRkZmNkYTM5LCAweDg0M2RkZTFjLCAweDIyOWVmZjhkLCAweDU4N2UwN2MxLAorCTB4ODk1M2NlNTMsIDB4MmQzNTk3ZTAsIDB4MGE5MDg5OTYsIDB4YWJiNTQ2NzEsIDB4YmJiOGVlYzEsIDB4MTk3ZWRiNDgsCisJMHg3ZjJhNjcyOCwgMHhlM2M1MzdlMywgMHg1Yzc4NDM2ZiwgMHgzOTIxNzg4YSwgMHhlZDAzZGUyMiwgMHhkYzdjOGYxMywKKwkweGY5YzdiM2VkLCAweDQ4OWFjZTIwLCAweDdiYzc4NjRlLCAweDM3ZTg5Y2FhLCAweGNjYjhmNmU3LCAweDM1OTZjYmRiLAorCTB4NjU5ZmIwZWQsIDB4ZDhhZTFkOWQsIDB4OWJlMWJkZDMsIDB4ZTExY2ZiNzAsIDB4MmZmMTg1YTQsIDB4Y2ZiNDQ0YmIsCisJMHhhZTdkOWQ2NSwgMHg1ZGQ3Y2JhYywgMHhiZjFkNjUwZiwgMHgwNzNjYmFlZCwgMHg3ODYzNzJlYiwgMHg1YzVhODY1ZCwKKwkweGNjYWJmNjA0LCAweDhiN2M4N2VkLCAweDE2ODdlNTkzLCAweGU4YWU3NjExLCAweDAwZDJmYWMzLCAweDg0NjZmMTE3LAorCTB4OTg5N2QxZTMsIDB4OWNlMDJiOGIsIDB4NDA1YTNjY2MsIDB4NmI1ZGM4N2YsIDB4ZTYwZjk0NDUsIDB4NTVjNzAxMGMsCisJMHhmOGM2NDkzNCwgMHg0NTBkOGZlMywgMHg4NWRlYjA1OSwgMHg3ZjU2MjYxMywgMHgwOWMzMGQ5ZiwgMHhmMWMyNWNmOCwKKwkweDUxNmE0MjVlLCAweGJmNTcyNTdmLCAweDBiM2IzMmZjLCAweGVhMDgyNWNlLCAweDg0NWM0YmJmLCAweGI4ZWQ0MWRjLAorCTB4MTAyMTZjOTIsIDB4MTI2YWYxMGQsIDB4MDc4ZWM2ZjEsIDB4OGU0MGI5M2YsIDB4ZGFlNGZjNmIsIDB4NDk2ZWZjM2MsCisJMHhhYmU5YzMwYSwgMHhlNWZjNmY3ZSwgMHgxN2ZlOWQ5ZiwgMHgyOWM3NjdlNSwgMHgzYTQyNzQ5MSwgMHhkNDk3YmIxMiwKKwkweDNmN2NmNzc2LCAweGE1NGQ2M2MzLCAweGJhNDM0YmUwLCAweGZiZWFjODBiLCAweGI2NjYwNWQzLCAweDg3ZWJmZTBmLAorCTB4ZTY0ZjkwMTMsIDB4MmM0Yzc0ZmMsIDB4ZTI2NDA3ZjMsIDB4NmUxYWM0N2QsIDB4M2FmMjVjMzcsIDB4NzYwZmMxNjIsCisJMHhjZmNlOWZjOSwgMHg2YTZjZjM3MywgMHg4N2E0YWFiZSwgMHg5ZmZlMWRiOCwgMHhkMzQ4OTcxMCwgMHg1MWExN2NlZSwKKwkweDA0OGIzYjA0LCAweGNkZWJmZmQxLCAweGM1N2JjMjhmLCAweGNjYTM3NmZhLCAweDZiYWZiZTA2LCAweDNmMDAyZmQxLAorCTB4ZjJhZmVlMTEsIDB4YTZkMjk0NzksIDB4NzVhYWYxYjEsIDB4NTljNzdiNWIsIDB4NzVjZjZjNjksIDB4ZDU3MWRmODAsCisJMHhjNWI3ZGRmOSwgMHg4MGZkZDgyZiwgMHgxZDUxNDNkNywgMHhlNjExNDUwNSwgMHhhZmUzODkzYiwgMHhmMGRmZjc3MCwKKwkweDdmNGNlYWZlLCAweDk5NzgwY2FhLCAweGNlNmEyZjk5LCAweGVlNjY5ZGY5LCAweDI2NDA5OGNmLCAweDc3MGFiOGMwLAorCTB4MGM5YjY2ZGYsIDB4NzQ0MDcyZWIsIDB4MWFkNTdkYzIsIDB4M2JhMzQ1ZmYsIDB4MWViMWY5YzIsIDB4ZmMxZjAwOWYsCisJMHg2NzY0MjdmMCwgMHhjNGYzZTAwOSwgMHhkODA4YTI0ZiwgMHg3M2YxZWZkNSwgMHhjZmI4MGNjOSwgMHgxZWFlODE5MSwKKwkweDczMWRmODE3LCAweGI4NGZjY2NjLCAweDc0Yzc2Y2NlLCAweDljOGU2MTU2LCAweDY4Y2RmYjQ4LCAweDUwODM4ZmI1LAorCTB4ZmViY2MxYjUsIDB4Y2IwM2IzM2EsIDB4NGE3NmYwODcsIDB4YWM5NWMxYmQsIDB4NWVkMWE3NWUsIDB4YmZmZTY5MWQsCisJMHg3OWY4MTI4YiwgMHg5MzdiZjM5OSwgMHg3NWJkN2Y4NCwgMHgzNWE5ZjljYiwgMHg0MWZhMGI5MCwgMHhkMTY3ZTJiZSwKKwkweGZkYzEzNWQzLCAweGUwOWE2OTcxLCAweGY2MGRmOTAzLCAweDA1MGJlNjMwLCAweDUzZGUxZmQ0LCAweDY0Y2ZhZmVlLAorCTB4N2JhMTU2NzIsIDB4Y2RhYjllM2QsIDB4MWUwMmY3ZGEsIDB4ODg3Zjc4ZTcsIDB4Njc4Mjg3ZDMsIDB4ZjFmYWJmMDUsCisJMHhiZjI5ZjUyYSwgMHg5ZmVkNTViYSwgMHhkYzZkYWJiYSwgMHg1NGRmYTA2YiwgMHg4MWJiMDVmYiwgMHgzYTk2YWE4MiwKKwkweDZiMGZiMDhjLCAweGUxOTA5ZWRhLCAweDA3M2VlNjdjLCAweGEyYTQ0YjgzLCAweDgzZjhlYWIxLCAweDBmMTY2Njc1LAorCTB4Y2RmYzY3YjIsIDB4MmU0ZTgwZjMsIDB4MmM4MTM1YWYsIDB4MTc0NWFlMjQsIDB4ZGY4N2MwNmQsIDB4MGY3ZjM4MzMsCisJMHhkZmRlNmM3MSwgMHg1N2QzNjQ4OSwgMHgzYzBmYWJmMCwgMHg1OTdjZjJmNiwgMHhlNzE1MzcwZCwgMHg0NzMyYWIzMywKKwkweDAzZGE3NzA2LCAweDgxZTRiYjk1LCAweDY3NWE3YTJhLCAweGU1NzJjNzhlLCAweDA3NGFlMGZiLCAweGZiNDIwZmJlLAorCTB4MWY3ODcxYzMsIDB4NGZiODExMzcsIDB4OGVkMmQxOTIsIDB4YTgxZjZjZjcsIDB4NTg3NDYzOGQsIDB4ODhjYmIyZDYsCisJMHg3YmNkNTRmOSwgMHhmYTNmNGEyMiwgMHg1MGJiMzRmZCwgMHgzMGJjYWYxYiwgMHhlMDI4NjNhZiwgMHg1ODE0ZDBhNSwKKwkweGE3NDA4Y2U2LCAweDczOTRhMzkzLCAweDI3MjlhZmNhLCAweGM3NmU5NDVjLCAweDI3MjQ3ZmZlLCAweGEyNzIyOTk2LAorCTB4OTVlM2UzMDMsIDB4ZTdkZjAyZjYsIDB4MzAzMTM5MmEsIDB4NWE1ODljOTIsIDB4ZWIwODE4ZTcsIDB4ZmE0Nzc0YjAsCisJMHg0YjI0ZDg0MCwgMHgxNDlhOTlkZiwgMHhlZmJjNGU0OSwgMHg0N2NjZTc2MSwgMHhlZWY2N2RmOSwgMHhkYzRlNTRkOSwKKwkweGIzMTM5MmEwLCAweGY0NGU5MGEzLCAweGY2NTEzZWVkLCAweDQyNzI1ZjQ5LCAweGNiZmZiNzU5LCAweDkwN2RlNmZjLAorCTB4ZjdmNjExMTMsIDB4NzEzOTNhMTcsIDB4ZTUxOGJmOGYsIDB4NDViMzNkYzQsIDB4NGZhY2JkY2QsIDB4MzkxMzk0ZmIsCisJMHg1ZTYxZjc0OSwgMHhhMDQ0YzY3NiwgMHg3ZGI5Zjc5ZiwgMHgwYmRmOTQ3MywgMHg1ZTQwN2U4MCwgMHgxMWQ5NDY2NCwKKwkweGQxYjk3YTZmLCAweDUzZmY1ZjFiLCAweGZmZmFmOTdmLCAweGJlMTU5ZTEwLCAweDNmZGE5NGJlLCAweDc0NDhkNGE2LAorCTB4OTc5ZTkwNDgsIDB4YmFmOTQ3ZGUsIDB4ZjhjOGY0MDAsIDB4YjkwN2QyZmEsIDB4NjdjNzUzOWYsIDB4NjZjZjgwOGIsCisJMHg2YjJjZjlhYSwgMHg3MjY2ZWQ1ZiwgMHhmNTJkYTZhMSwgMHhmY2I0Yjk5OSwgMHgwOWQ5NDZmZSwgMHgzMGZlZjJhMiwKKwkweGYzNTJjZGRmLCAweDVlYThjY2RkLCAweGUzMTk2ZWY4LCAweDEzZmQ5N2JiLCAweDZkZWE3ZjUwLCAweGZjZTY3ZjdlLAorCTB4MTFiM2YyOTYsIDB4MzFmNDA4Y2UsIDB4ZTY4YzZlNjcsIDB4NzE4OWRlZGUsIDB4MDZkOGM5YmYsIDB4MTEzZGU1ZmIsCisJMHhlNjNmNzljZiwgMHg3MWMxYzA3YSwgMHg3ZDA0YzliZiwgMHg5ZTNlNDlmYSwgMHgyZjNkN2M3OSwgMHgzZTc5NDg3OCwKKwkweDIyZGU1ZmM1LCAweDZkNTc0ZmE2LCAweGQ1N2YxMTE2LCAweDU3ZmY2Y2FkLCAweDA3M2UwYjM3LCAweGZmOGMxN2NkLAorCTB4NTZkNzllMWIsIDB4YjVlNzYwZWMsIDB4Mzk4NTA2NzQsIDB4NzhhZmY1YWEsIDB4Y2UxZWEzYWYsIDB4MDgzNjJhMDksCisJMHhmNzBjZGU3OCwgMHhhNTlmMDAxZSwgMHhjZTI1OWYxYywgMHgyOTU3M2MwYSwgMHhjMWZhZDI2ZCwgMHgyZjZkYTIxYiwKKwkweDFlMTAxYjkwLCAweDc4YWJjM2ZhLCAweDEwNTM0MmZkLCAweDdmMGExZGNmLCAweDIwMzczODI5LCAweGFiYjZkNDlmLAorCTB4NTlmYjcxMWEsIDB4OWEyYTRmYjAsIDB4MGQ5ZGRmNzUsIDB4MzcwNGFlNzgsIDB4YWRhZjQxZDQsIDB4N2I5NmQxNmEsCisJMHg4YjE3YmNmOCwgMHgxNDZkOGM4MSwgMHhiMzNkZjkzZSwgMHhmNzc4ZjRmMywgMHhmNjUzZjFlOCwgMHg4ODczZjEyZCwKKwkweDlmZjMyN2UyLCAweGZlMjU5Zjg3LCAweGYwNWU3ODVkLCAweGM3YTJmMTc1LCAweDNmMTQ1ZDQ3LCAweDMyNGYxODFmLAorCTB4NmM3ZTNmNjEsIDB4ZjE3ZjIxNzAsIDB4YmJlMjJiYmUsIDB4MTg5ZThiNGUsIDB4ZTUwZjc5YTksIDB4ZWYyZjFjYTcsCisJMHg4M2Y1ZGMxOSwgMHg4MGI1NWVhMCwgMHg2ZmQ3NGFmNSwgMHhmMzQ0OTdkOSwgMHgzOGM4NWI3MywgMHg2ZDI4NjYzOCwKKwkweDkwZTNjYWQyLCAweGEwNzU2ZmZjLCAweGJiNWI5ZjdjLCAweGRhYjg4MDQ1LCAweDYwYmVmY2M1LCAweDdjMDllZjk5LAorCTB4ZTVjMWU2M2YsIDB4ZmFkM2RlNTQsIDB4ZGM5YmM3MGIsIDB4Mjg3ZTVlNzAsIDB4NTNmYzg4MmEsIDB4NDA5ZGRmYTEsCisJMHhmYTZmOTRiZiwgMHgwYzRlMzhmOSwgMHg5Y2EzZTYwZSwgMHhiOGVjMTM2YSwgMHg0YzUxMDMyZiwgMHg4Mjc1ZDE2ZSwKKwkweDRjZjY2ZDc3LCAweDVmMDE2YmZlLCAweDZhNWZlNjE3LCAweDQzNThlYjYzLCAweDc1ZjYwZGQ3LCAweDViZTc5ZjgxLAorCTB4ODBmODNlOTgsIDB4ZTczYjIyZmYsIDB4ZDk5MmVmZjQsIDB4NDkwMjM4ZmIsIDB4NDRlNzdlNDAsIDB4OGY5MTVjZmIsCisJMHg5MzlhZWU3MCwgMHgxZGRmNWFhNCwgMHgzN2ZlOGM5ZCwgMHhlMGZjNGUwOSwgMHgzNmZiZmZhMywgMHhiYWNiZGJlYiwKKwkweDdmNGNmYTJhLCAweGQzYzE1N2Q3LCAweDFmM2FkZDRlLCAweDljMmY2YThhLCAweDgyNzJlNzgwLCAweGYyMGJkZjEzLAorCTB4ZDE3OWUxYzcsIDB4ZmVmNjQ2YzksIDB4MWZhZTQxY2QsIDB4ZDgwNWY3ZTksIDB4NzhmN2VhMWYsIDB4MjFjMGMwNjYsCisJMHgxNDVhN2EyZSwgMHhiZjYyOTVjNiwgMHg1MzNmNGM2OSwgMHgzYmZkMjlmMywgMHg2ZTM3NWY0OCwgMHhhM2I0ODZhOSwKKwkweDdmOGUxNjVlLCAweDA2NmVkZjc0LCAweGQwNGQzZmI5LCAweDE5ZDE0OWM0LCAweDI3ZmZiZWUxLCAweGJlYTM5N2MwLAorCTB4MzY0OTNlMDIsIDB4Yzg3OTdjYTMsIDB4MTllZWJlY2UsIDB4MWVmMDI0NjYsIDB4MzIzNWU1ZGEsIDB4MDZiZGQxZDIsCisJMHhlMDZjOTFjNywgMHgwNGM5OGYyZiwgMHg4M2U1YzdmNiwgMHgzYjlkMWUzNywgMHhhNDQ1Y2EwMCwgMHgyNmY3ZTI4ZiwKKwkweGE1NmI4MzU0LCAweDkxYWFjNTk4LCAweDVjOTg0N2UyLCAweGZmZmJjMTNhLCAweGFlZDc5NTEzLCAweGEwOTc3ODZiLAorCTB4N2NlMjdiMDcsIDB4YjY3NGJmNzAsIDB4MDc1NGQ3NzMsIDB4MGYzMjViZjgsIDB4Y2Y3Mzg2YWQsIDB4MjNmNjc5NTksCisJMHgxYjFkNjA0NywgMHhjNzRmYmJkOCwgMHg5ZGExZTRkNywgMHgwNTc3ZDBmNiwgMHhlOGM3NjdkYywgMHhiYjljMDE3YSwKKwkweDM5MWVhNzY3LCAweGUwZjdjNzQyLCAweGI3M2M0NDlhLCAweGJjNGFlYjljLCAweGU3MzFjZTA3LCAweDBlOWQxNDFlLAorCTB4NWRlMTZmNWEsIDB4N2Y5YzBiNTYsIDB4MTIyZDFmNGUsIDB4MGYyZjBhYjcsIDB4ZWZmNDc2OTIsIDB4ZWVmZGFkY2MsCisJMHhjYTRmYjBkZCwgMHhmNzg0M2NhOCwgMHg4N2ZjY2E5YywgMHhmYzg0MGVhNiwgMHhkN2RiMDE3YSwgMHhiODQ2ZGQ3OCwKKwkweDc0ZGVkOWU3LCAweGZiNDk5OGQxLCAweDAwZjVhMTJmLCAweDU5ZWIzNWRkLCAweDAyOGQ5YWJkLCAweGUyNTgxN2JlLAorCTB4NjRmOTAyN2YsIDB4MWYwMTQ2YzksIDB4ZmFhNzY5YzQsIDB4ZjVjMTk5YWYsIDB4YmVkMTI5ODEsIDB4ZjlhN2I2OWUsCisJMHg3MDBmNjg1MiwgMHgwM2RkYzYzNywgMHg3NDM1OTNlNywgMHg1MjdlZDg5YywgMHg5NzUzOWUxZCwgMHg5OGI0NzZkMCwKKwkweDJlZmM2ZmI0LCAweDVlYjI1YmMyLCAweGIwYWY3MDIwLCAweGUzZWE1MjZjLCAweDQxZGUwMDkzLCAweDQ3ZTUwOWQ5LAorCTB4MDhkY2ZkNzcsIDB4ZmI0NzllZTMsIDB4MmZlMTQ0MWIsIDB4NDJhNjNiMTQsIDB4YzEwM2YyN2QsIDB4MTUyZWVmOGUsCisJMHhiYWZiOGI1ZSwgMHg2MjNiZWY5YiwgMHgxNGUyY2QxZiwgMHhlZmRjYTIwNCwgMHgyYWYxZDQ5MywgMHhiODY5ZDEyNSwKKwkweGQ3OTY0YTlmLCAweDNhYmNjM2Q1LCAweDA2YTk4OWJjLCAweDQ2OGJhN2E0LCAweDI5MjdlMzkwLCAweDdmNTRkZGJlLAorCTB4NzE2NDYxM2QsIDB4MjdiYzdiMzAsIDB4ZmUyYTFkOGMsIDB4MWQzYTMyYjksIDB4Y2I2YTJmZGIsIDB4OThiMzNlNDEsCisJMHg4NTNjNjExNCwgMHgyM2U5OGViYiwgMHg3Y2EzYWI5ZCwgMHg5NGViNTdlMCwgMHg3ZGYwMjllZCwgMHg3ZTEzNmFjZiwKKwkweDkzMmFmMGJmLCAweDc1ODYxNzNiLCAweGY0ZmI3ZmEwLCAweGJkYzA5OTdhLCAweGQzZWI5NWM3LCAweDllM2FjMWQ3LAorCTB4ZTEzYjJjZGUsIDB4OGU3YzQwZGMsIDB4YmU5NDExYzUsIDB4N2I2NGZjY2EsIDB4YTdiODMzZDYsIDB4Y2I3ZjE5OWIsCisJMHgwMmVlZWU3YiwgMHg5NGE1ZGJlMCwgMHg3ZTcwOTk0ZiwgMHhlMjU2M2U1YSwgMHhmNTNlNDcyOCwgMHg0YmUzMTQ1YywKKwkweGU3YTU3ZTdhLCAweDFiOGQ2NTUzLCAweDY1YTFjYjIyLCAweGQwZTU5MTA1LCAweDM3ZWU3YWQwLCAweDZiOWYyYzhkLAorCTB4YmJlOTg1ODgsIDB4ZjA3OGM5ZTMsIDB4MGQ1NzE2NjMsIDB4ZjQwNGQ3OWIsIDB4NzBiYjIwZmMsIDB4ZjM3ODFlZDAsCisJMHhkYzgxOWZkMywgMHgzYmUyYjRhZCwgMHg3ZDkyZDU2NSwgMHg4M2U4YzA5ZCwgMHhlYjlmZmYwMCwgMHhlYzI5ZjJkZiwKKwkweDUxYjliMjg3LCAweDI5ZDkwZWY4LCAweDQ3ZDgwZjU4LCAweDFjZjAxMzZiLCAweDhjNTdjNGJiLCAweDc5ZTI1Nzc4LAorCTB4ZjRiNDliNGIsIDB4ZWYyMWY4YWUsIDB4YTVjNDhiNzMsIDB4MzE2NTVmOTYsIDB4NzdhYWE1YzQsIDB4NmU5NDQ3ZjQsCisJMHhkYmYzM2Y2OSwgMHhjYWIwMWYwNCwgMHhkY2VhM2ZhMywgMHhlNjI2NzBmZiwgMHhlNWFlMzhlZCwgMHg2YjU4M2Y1YywKKwkweGZhM2ViYTQ1LCAweDQwZDVjNWM4LCAweDI4N2VmM2I3LCAweDg5ZGJkMDEwLCAweGYyMGY1ZGQ3LCAweDcwNDliYWIwLAorCTB4ZjRiODlmODAsIDB4Mjk3ZGFjODcsIDB4M2VlMzBmNmQsIDB4NWY0NjczZmEsIDB4YjAxZGNlOTQsIDB4M2ZkN2FhMGYsCisJMHg2ZmViMWZiMSwgMHhmZjAwMWMxNCwgMHhkNDYyODZlOCwgMHgyMmJjY2EyNywgMHg5ZDhkZjJjMSwgMHg3OTUwNDc2OCwKKwkweDdiNjhmMTg1LCAweGVjMTI2MmJjLCAweDI2NTVlYTgzLCAweDE1NjJiODNiLCAweGIzZTg1MjdhLCAweDQwYTdiZjkzLAorCTB4YjNiMWNlY2MsIDB4YjQ2NzNiNjgsIDB4OWViMmY5MDMsIDB4NDIzOWM1MmUsIDB4ZmQwMjllNDgsIDB4YmQxOTc4ZDQsCisJMHgzYjJhYmU3NSwgMHg0ZGY0OGI2MSwgMHhiZDFlZWM5ZiwgMHhkMDIyN2Y0MiwgMHhmZTk4NjY1ZiwgMHgzM2NmYWNmNiwKKwkweGY2OWUzZDAyLCAweDkxNjcxODA5LCAweGY0MGJmNDA3LCAweDlmZTJiMmY5LCAweDFlYjUxNjIxLCAweGVhN2QxN2Q1LAorCTB4ZmQwN2IwZTksIDB4ZTk1OGNiYzEsIDB4ZTg1NGZhNjEsIDB4Yzc4NzRmNTEsIDB4OGMwZjcyMjUsIDB4NTFkNWExZmIsCisJMHhmYWJjOGYzOCwgMHhjZTU5ZWYzNywgMHhjZjllMTlmNiwgMHg5MjNmZDVlNSwgMHg0NGJhZmIwNCwgMHgwYTQwNzE2MiwKKwkweDE2MjRhYjVlLCAweDVjNjNkNjM3LCAweDA3MTlkNzRmLCAweGJhN2M2N2Y1LCAweDBlOGFjYzcxLCAweDIwZjFlZGM5LAorCTB4NGEzZWE5YjcsIDB4ZGY5ZmI0MDIsIDB4ZTMxMTdlNmMsIDB4ZDJiZmNmMmIsIDB4MzdlYTI3NzksIDB4MDAzYTUxNmYsCisJMHg5MmI2NmZmYywgMHgzZTIxZGEwMCwgMHhhZGU1NDdlNCwgMHgxMzY5YzYyMiwgMHg0YjM1OTAyOSwgMHg3MTJiYmY2NSwKKwkweGIyYmYxNTMxLCAweGI3Y2JiZTIyLCAweGI0ODU3YzlhLCAweDI3ZWJmOTdkLCAweGMyNWM2MmM2LCAweDdiN2ZhNjBhLAorCTB4MzlkODExNWYsIDB4MmM2M2I3ODgsIDB4OTcyYTNiZGMsIDB4NWU4ZTdjNTgsIDB4MzQ1ZGY4MmYsIDB4ZGViYmMzYjMsCisJMHg3YTAzOTk4YywgMHhkZWNjZDA5YiwgMHhiOTZmMmMxNywgMHhmY2E5MzY1NywgMHg2NWEyZmJiYiwgMHg5MzllMWVhNSwKKwkweGMzM2FlOTc5LCAweDNlMzAwYWZiLCAweDRhNzZmYmY1LCAweGNiZDc0ZTVjLCAweGRiY2FmZThjLCAweGNhZTdkNDY0LAorCTB4ODA1Y2I3OWIsIDB4NjNmMmNkNzgsIDB4NmI3N2I0MjYsIDB4YzExYTJmOWEsIDB4ZDVmYmNkOWUsIDB4YzQxZGVjYWIsCisJMHhhNzEzNTEzNiwgMHhhZTNlMjNkNywgMHgyMDk4MGM1OSwgMHgwYWI1YWJhZSwgMHhiZTY4NzFjZiwgMHgzYzJkZjMxMywKKwkweGM2NmJlZDFlLCAweDZhZmM1NTZmLCAweDhhNWVlYmM3LCAweGJmNmQ4YWMyLCAweDg1N2JlMWI0LCAweDc4NmM5YmVkLAorCTB4YWJmOWFhNWYsIDB4YzQ3YjU1ZTMsIDB4ZjAzNGI1YzMsIDB4NGUzYmI4NzgsIDB4OTE4ZmU0MTMsIDB4YzFjZWUxZTMsCisJMHg3ZDIxMjgzZiwgMHg4NzhkYWQxNiwgMHhiZjhjY2QyMywgMHg0NTY2NzFkMSwgMHhhNDM1MGY3YSwgMHhlOWZhYmQ3NywKKwkweGRkY2YxMGYzLCAweGU3OTNmNWI1LCAweDVmOTVkYzYxLCAweGUyMWU3ZTVjLCAweDY4ODJhODZjLCAweGU2YTUzZDA3LAorCTB4ZmUzMWY3OTUsIDB4MWYxNzY5NTUsIDB4OTdhMGVkYzMsIDB4YzNmMTg5N2YsIDB4NzI2OGZlMTcsIDB4M2IwYmI0MDIsCisJMHhmZTgwYTc0ZSwgMHhkZmNiNjE3MSwgMHg3ODJlMjA5MiwgMHhlOGE5OGVkOSwgMHgzZGI2NTlkZiwgMHhlZGJkZGYwZiwKKwkweGZhMDU5ZWNkLCAweDdlMjNmNWY1LCAweDdiNmViZjU5LCAweDNjNjBmNzVhLCAweGVlYmE3OWQwLCAweDcxNDIyN2MwLAorCTB4MmM1NTJkOGUsIDB4ZTNjMWQ0N2UsIDB4OGU0NzM3MWIsIDB4Y2YxMWVmMTcsIDB4YWVlYjNhZDgsIDB4NWIxZmMwMjksCisJMHg2N2QwOWU5OSwgMHhiYTYxZTM1YywgMHg2M2Y0Mzc5ZSwgMHhmOGYzMzcxZCwgMHhiZTNiOTZkNSwgMHgzY2YxYWUzMiwKKwkweGQ3YWU4M2ZjLCAweDdjNmQxOGI4LCAweDhiYWRhN2U4LCAweDk0MmNmMTdmLCAweDFhZjQyNmI1LCAweDA3ZTgxOGQ3LAorCTB4ZjQ3ODk0ZmUsIDB4ZDk1ZGEzY2YsIDB4ZGViMDg5MzEsIDB4YTRmMTgxZmYsIDB4MGU4NTdlYjAsIDB4YTY5ZmQ3ZTAsCisJMHg4Y2Y4YmY4MCwgMHg0NGJmNDQxYywgMHhlZjA5ODc3MCwgMHgzOGVmOTY2YiwgMHhjMmU5ZmI4YSwgMHhlZjE4NDNmNiwKKwkweGY4NWM3ODRkLCAweGIxZmExMjA1LCAweDAzZWU1ZGY4LCAweDY1NjhkOWFhLCAweDFkN2M5MGYxLCAweDYxZDI1ZTIwLAorCTB4MmUzY2VmYzMsIDB4MTJiNWQxOTIsIDB4OWM1YmQ5MmYsIDB4MzQ5OGIyZTQsIDB4OGIwYjNlZmUsIDB4ZjhkYWFjZTcsCisJMHgwYzNmOGYwMSwgMHgwOTMwOWJhZiwgMHgyYmYzYWJkNiwgMHgzYzE1NTBlMywgMHgxMzBmMDFkOCwgMHg5MWMwNzFkNSwKKwkweDcxNDM1MmUzLCAweDgzNzViYWMwLCAweDFlM2UwNGY1LCAweGY5YTVmMzhhLCAweGU5ZWYxMGExLCAweDhhNDY4ZTEzLAorCTB4ODFiMGJmMmIsIDB4OTA1ZjBmYzUsIDB4NTY4ZmRmMjMsIDB4NjI2YjgyZTIsIDB4ZDdkNmZiNzQsIDB4YmVlMDc4YmYsCisJMHhmMTc1ZjFlNiwgMHhhMWM2M2YzNCwgMHg1ZjA1MWJhMSwgMHhmMzIzNTc1ZCwgMHg4NDYzMjdmNywgMHg4NWI3NjQ2ZiwKKwkweDBhNTQ5YmVlLCAweDRmMmNmYmZhLCAweDk5N2RjMGM0LCAweGJlMjM0ZWQ2LCAweDU1ZDhhMjkzLCAweGRjNWRiZTdjLAorCTB4OGFmNWQ2ZGYsIDB4ZjVhMjcxODgsIDB4YmY5MDdiMmQsIDB4MzU0N2Y5ZWIsIDB4OGZkMTQ3M2YsIDB4NmYxZjIzNzcsCisJMHgxZjkzMWI3NSwgMHgzZWFkNWI1ZCwgMHhiNWQzODUwYiwgMHhlYmE0NGRmYiwgMHgxODlkY2RlYSwgMHg3OWJmYmFhNywKKwkweDc1NDNiMTliLCAweGMzZjIwY2ZlLCAweGQ3N2YxYWE3LCAweDIyYzZiYjZiLCAweGEyZWZlNzNmLCAweGNhZDlmYmU5LAorCTB4M2Y4ZDYzZjksIDB4OWIzNTNmNzIsIDB4YTlmYTZhMmYsIDB4ZWQxOGI2ZjAsIDB4M2JmYmJlOTYsIDB4MDVlZWI5MjcsCisJMHg5OWRhZTc3OCwgMHg0NWFlNzUxZSwgMHhkMDhiZTY5YywgMHg2NDYyY2ZmZiwgMHgzMjM3NTc2ZSwgMHhhMzk1MzgzZiwKKwkweDk1OWMzZWY4LCAweGRhMjcwN2JkLCAweDViMmY1MWEyLCAweDBjNzQ5ZDY2LCAweDY2NWQyMWRlLCAweGNjNWM2MjM1LAorCTB4NDcxZTNhY2EsIDB4MzI2NzIzZjMsIDB4ZWI0YWY3YWMsIDB4YmJjNjA0ZWQsIDB4YjJhYmYwMWEsIDB4OWJiYjY1ZWYsCisJMHgyNzI3M2U4MCwgMHhjZmFhNjUxNywgMHgxYmYxOTQ2MSwgMHg0Zjg4MTgwNywgMHhkM2FkOGZiZCwgMHg0YTdkODIwNiwKKwkweDE4NTBlZjI0LCAweDdmNjk5ZGM3LCAweGI2MmU0MDk1LCAweDlmN2Y5ODdiLCAweDAyMzEzZDVjLCAweGY2NGJiN2JlLAorCTB4NmUxNDA5N2QsIDB4MDRlMGJlN2IsIDB4YmE0ZjZjZDcsIDB4N2U0M2YwNjcsIDB4MWRmNjk3MDYsIDB4NDc1M2JjNWQsCisJMHg2OWM5NzdlNywgMHg2YWQxM2Q0MCwgMHgxNTY5ZDgwOCwgMHg0ZjZhOGQ2MiwgMHg0MWQ3MDM0NiwgMHg1ZTEyNTIxYywKKwkweDg5NzhjMGE1LCAweDExZTYzY2M3LCAweDQ2ZDQzZjcwLCAweGY1MGFkYWE4LCAweDVkZTY5MjljLCAweDkyNDlkODk1LAorCTB4NzIxNTlkZWUsIDB4NTdhNTA0NzgsIDB4YzU1N2E3MGIsIDB4ZmY2NTY3NWYsIDB4ZjAzYjcwYTYsIDB4MGNiODk2ZmQsCisJMHhiYmU0MDc1MiwgMHg3ZDQ2ZWFkNiwgMHgwYjliMjllMiwgMHhkZmQyM2ZlZiwgMHg4ODkzODg2OCwgMHhmNTRlZDEyNywKKwkweDVmYjQ1MGJiLCAweGRhM2I3ZGNkLCAweGU3MWYyNmFmLCAweGE2MTNlNmQyLCAweGM5MjMyNzQ5LCAweDhlM2UwNDliLAorCTB4Nzg4MmQxMDIsIDB4ZTA2YTliODgsIDB4NzBhYmIyZmEsIDB4ZGM3ODUyNjQsIDB4MTljNDg5NzEsIDB4MmMzYmYyODAsCisJMHg2ZTgwOGY3OCwgMHgxZTdhYWYyZiwgMHhkYzc2OGIxNiwgMHgzZTFhN2M3NCwgMHhlMWQxOWIxMSwgMHg2YTcxYjAzNSwKKwkweDAzODlkYmJlLCAweGUzYTc0N2RmLCAweGFmMWJhZTNkLCAweDcwYjU2ZjI2LCAweDA5MTEyNzdlLCAweGRjYzU5ZGY4LAorCTB4MmZmZTM4NGUsIDB4NGFiZGYwNjksIDB4MjI0ZjhhMmEsIDB4MzhjMjY0NGMsIDB4ZGUyMTMwZTksIDB4ODNjZjk2MjUsCisJMHg2ZmE5YWZmNiwgMHhlYjAxZWYwNywgMHgwYzg3MGI1ZiwgMHhiNWVmYWJiNSwgMHhlMGU1YzBkZSwgMHg4YTUxNGIxMSwKKwkweGFjOTNlZTg1LCAweGI4MThiNWUxLCAweGI4MmM5ZDlkLCAweDY1YTA0ZTRlLCAweDlmYzgwMWZlLCAweDYxZTc5NmQyLAorCTB4YzhkMDhhNWMsIDB4NWFjNDZhZTgsIDB4NDQ2NmZiODIsIDB4YWQ1NWM3OTAsIDB4ZDUzZDQ2OGEsIDB4YThkZTI2NjQsCisJMHg4ZTNmNzBmMSwgMHhkMGYxZTU3OCwgMHgzZjlmOGY4YiwgMHgyODE4NTYzOSwgMHhhNTBkNjkyOCwgMHgxZmNlZGEzNSwKKwkweGE2MmMzNWNjLCAweDQ1MDJkMDhiLCAweDhiMTBmZTE0LCAweDVmZjQwYzZiLCAweDZjOWRjMzNmLCAweDFiZDMwNzE4LAorCTB4Mjg3N2JmNTYsIDB4YzE2YmRhZWUsIDB4MWJhODY4NjMsIDB4MTRjMGZmYmEsIDB4MmVmODIxNjQsIDB4ZGQwZWYxMDgsCisJMHg1MWI4NzIwZiwgMHgwZWM2NTNjOSwgMHg0NjM0MDZlZiwgMHgzMzJlZjI4NywgMHg2OThkZjdlNSwgMHhkYWYzN2YyYywKKwkweDdlZjBmNWExLCAweGU4YmRhNzRkLCAweGM3OGMwYjY2LCAweGNmMGViZjZjLCAweDlhZjEwMmMzLCAweDkzN2JkNWY3LAorCTB4NDczOGNhMmYsIDB4YzFlNDBjNmYsIDB4MDdiN2M3ZmIsIDB4MjNjNWZiZDksIDB4ZmM3YmExYWQsIDB4NTkzNzhmMjgsCisJMHhlZDAwN2M5NCwgMHg0M2Q2YTI4YiwgMHg1YWFhZDdjOCwgMHgwMWI5NjEwZSwgMHg5ZTFkMzRmMiwgMHg0MjFiYzgxMCwKKwkweDY1YmY3OWU3LCAweGI1ZjI0MTRjLCAweDcxNmI1ZTE0LCAweGIxYzEzYzMyLCAweGJmNjYzMmQwLCAweGI4YzNjMWE0LAorCTB4NjFkOWJkZmEsIDB4NmUyYjQ4M2MsIDB4ODZlMWUxZDAsIDB4ODU4Nzg1YWYsIDB4ODdhODZmNmIsIDB4M2JmYTU1ZjcsCisJMHgwYjE3NGE2ZiwgMHg3M2QzNWYwMCwgMHhkYjhlZjgwYywgMHhmNDE2NjNjNCwgMHgxNDVmZDBiZiwgMHg2NzBlMjNjYSwKKwkweGJjZjcyZjQzLCAweGMyODUzYjE1LCAweDk3ZDM1NzI5LCAweGFiYTE0ZWQyLCAweDlkMjZlOGRlLCAweGVmNjNhZmQ4LAorCTB4ZTdlOTZhODMsIDB4ODdhZTJkZGYsIDB4OGIzMmRlMDAsIDB4ODg5NmRkMmIsIDB4MDU3N2M3ZjMsIDB4OGI4YmJiYTYsCisJMHg3NGMyMTNmMiwgMHgwOWVlMmM0ZCwgMHgxMWZlYWVmMCwgMHg1YTFmODJjYiwgMHhlOWRhZmU1NCwgMHgzNGM1NGIzOSwKKwkweDAxMWZkZTNhLCAweDNjMzFiODIzLCAweGRlZTVjNDlmLCAweDllNzQ1MWE4LCAweGM2MDMyZTg5LCAweGI4YjExZmQ1LAorCTB4ZGIzYjQwNTcsIDB4NjIwMDYwOWMsIDB4ZjcxMjI2Y2IsIDB4ZjcwYzQxMDQsIDB4ZmE4ZmVjYTMsIDB4YWY4ZWNjMWQsCisJMHg1NmY4MzYyZiwgMHhmYzYwZjNiMCwgMHhmYTYxMWRiYiwgMHg0N2QxZDBlOCwgMHg1YjQ3ZDE5MCwgMHhiNTQ3ZDIyNywKKwkweDQ3ZDE5M2JmLCAweDM0NmU1ZDViLCAweDNiMDM1NzNmLCAweGM3MDQ5MWJhLCAweDU5MzdiYWMxLCAweDYxYTQwYjBhLAorCTB4ODI2MjZlOTQsIDB4YjIzNzQwZjUsIDB4YzI4MmI2ZjcsIDB4M2FlYmM0MjgsIDB4ZjU4ZjVmMTgsIDB4ZTY1MmUzZTEsCisJMHgzNmZhZGJkNSwgMHg3MWZiNDgxZSwgMHgwNzk5ZDgwNiwgMHhhNjFlNzgwZCwgMHhiN2E5NGRlMCwgMHg0NmUyYzJjMywKKwkweDdlZTZjZGZmLCAweDk5YTlmYTExLCAweDk2MWZiMWQ0LCAweDNmODFlYjZmLCAweGVkODc1YzYwLCAweGQwNWRjY2UwLAorCTB4YWU5YjM2ZGUsIDB4NmZkYzIzOTAsIDB4ZjgxNWMxZTMsIDB4N2YyMzc4NGUsIDB4MDQ5NjNiZDcsIDB4N2JkNzIwYmQsCisJMHgzZmRiMDdjNywgMHhkZTgwN2MyMSwgMHhlOGY4MDE5MywgMHgwYWYyZmRjNCwgMHhkZDk2NjdiZiwgMHhjZTQwYjgyNiwKKwkweGVmNjE4ZjBmLCAweDYxNmViYzkwLCAweDE2YmJmNTc2LCAweGFmNGNhNzkxLCAweDViYjgzYzQ5LCAweDdiMmJmYjA0LAorCTB4MjdlYjAxOTUsIDB4OWVhMTlhNDIsIDB4NWY1ZTJhZmYsIDB4OTVkZGY4ZDIsIDB4ODllODU1NzUsIDB4NzgxOGQyNzIsCisJMHg3OGY5ZTRjZiwgMHhmZDJkMWVmNywgMHhhOWE0YzdjNCwgMHgxZWVkMjllMCwgMHg0NWEyOTBmNywgMHhlZTI2NTA5NCwKKwkweGM4MTBmMDVkLCAweDNlM2Y0YTU1LCAweDcyMzFiYjRkLCAweDQ0MmRlMDE0LCAweDIzM2U5NDNmLCAweDc3NmQwZmFkLAorCTB4N2M2YmFkODgsIDB4NWIwYmU4MGMsIDB4ZjExNTJlZjYsIDB4YWU3ZThlNWQsIDB4NDdiYzE2NmIsIDB4YzU2N2ViNDksCisJMHhiNGFkZGE5MCwgMHg0ZDJjNTY3ZCwgMHhmM2MwOWYyMSwgMHgwODdlNzkwMywgMHg3NDNmZDM0YiwgMHg3ZGZhMDQxYSwKKwkweDllY2JmNzAzLCAweDkyMjU3OGU1LCAweDYzOTliYWZkLCAweGI4ZjRjZjIwLCAweDk0MThlNGVjLCAweDg1YmVjYTBiLAorCTB4NWNlMDU0NjcsIDB4ZGJlN2UyNWIsIDB4MDMzNGMxNjksIDB4OGZiMjliYWMsIDB4NjAyMWEwYTUsIDB4NGQyYjQyYTUsCisJMHhjZTIwMTg3MiwgMHhiYjhmNWRlMSwgMHg3YjBiY2UwOCwgMHg1ZmI3M2JlMywgMHhlYTgxZWVjYiwgMHhjN2NlN2ZiZiwKKwkweGViZjU4ZGYzLCAweDJmYjhmNGJmLCAweGI3ZTAzOWZlLCAweGY4ZjFkY2NhLCAweGJlYWY5YTRjLCAweDY5ZmEzMmY2LAorCTB4ZGY1NGM0NTcsIDB4NjhlZjU1ZmMsIDB4ZWVmZmM3ZTgsIDB4MDBjNGRmZDUsIDB4MzMzZmZhMWQsIDB4MzUzZmJjNDUsCisJMHhmMWU4Y2FjZSwgMHhiNjBlNjc4MCwgMHgwNGVmZTJjYiwgMHgxYzRhODE5MiwgMHgxNWNlMmFiMiwgMHg4NjVlYjhjYSwKKwkweGRmODY5OTRiLCAweDA1YmFjZjUxLCAweGE3YWMyMDU5LCAweGY2ODc4YTU3LCAweGFlNzhhOTMxLCAweGFlMmVhYjc4LAorCTB4YmIyZjM5NTUsIDB4ODBmY2MwMjUsIDB4NDJiZWIxNTksIDB4NzRmYWVmZWMsIDB4M2U0OWY3ZjYsIDB4OTk5MmZhNjMsCisJMHhhMWNlMGZmZSwgMHgzMzczZjJhNiwgMHg1ZWZiMzFkNywgMHgwOTU5ODcxMCwgMHgzZjA4Zjk4ZCwgMHg1YWZkMTUzNiwKKwkweGZlZmI0NDM5LCAweGFmNDBkNjQxLCAweGY0ZjI4MDY0LCAweDY3OTc4NDU0LCAweDEzYTc5NWQ2LCAweDZiOTE1YmY0LAorCTB4NGRmOWMzYWUsIDB4MGNmZDJhMjUsIDB4MTNhMzQ2ZTUsIDB4ZDFmNGYxZjgsIDB4ZjdmOWZlOTQsIDB4ZTFiZmY0Y2IsCisJMHg4NjdmMzIyNiwgMHhjZGI4Y2VjYSwgMHhiZTUxNWY3MSwgMHhjNDY5NmY0NiwgMHhmYjdlODU3NywgMHg1MjNmMzhiOSwKKwkweDIxNjNjNWZjLCAweDQxMTUxNzNjLCAweDhmMWU4MDNjLCAweDk1NjEwZWI5LCAweGRmMTNkMWQ1LCAweGYxZTlmYzdhLAorCTB4OGY1MWUwYWQsIDB4OWQwZjljYjcsIDB4OWU4ZWYxZjksIDB4MjNlM2QxZjgsIDB4NWJlOTdlN2MsIDB4NzUzMGViMGIsCisJMHg0YmYyODhiNCwgMHhmYzRmN2JjMSwgMHhlZGZhZjViMCwgMHgwMDllYjRiNSwgMHgwZGYxNDJmNCwgMHgzMDE3NGNmOCwKKwkweDg2MmIyN2JlLCAweDNhNmM0ZmQzLCAweDE0MGIzN2UyLCAweDBmNDgwMWMwLCAweDU1ZTNkNzk4LCAweDA0YWNjNzhmLAorCTB4ZDU4MTNlZGUsIDB4MWFmODBmZGYsIDB4ZWQwMGZjODksIDB4YjJkZDY1MjEsIDB4YzZmNzZiZDIsIDB4ZThjNGRlNDEsCisJMHhhN2FiZDE0YywgMHhiZDUwYmM3MiwgMHhiY2U2ZjUxYSwgMHg5YmZhMmI0NCwgMHg5YTllYWY0MCwgMHg1ZTViYzYxNCwKKwkweGRlNTcxYjE1LCAweDYwMGJjYjQ4LCAweGZjMGFmZTlmLCAweDA2MDhiMWQxLCAweDk1YmNjNWRmLCAweDU2ZTA1ZmYwLAorCTB4ZTJjYTVmM2MsIDB4YjdkZjA1NTksIDB4OTNkNWE2N2UsIDB4Y2UwYmZhYTcsIDB4ZGMzZGZlODIsIDB4MDU2NTVlZTQsCisJMHg4NzEwOGM3ZiwgMHhmZjE0NzllNywgMHhkN2Y4NzVjNywgMHhmMzZiYjNiNiwgMHgwYWZjN2M3YSwgMHgyN2I5MzFmZSwKKwkweGFiN2ExNGRlLCAweDdjZmQ3MmIzLCAweGZhMGExOTMwLCAweDMzMzdkOGYyLCAweDEzN2Y4MTYzLCAweGJmNDQ3YzdmLAorCTB4NDU2M2M0YzQsIDB4NmU5YzM4MjEsIDB4ZTIwNTllOTEsIDB4YTdiNzdkMGUsIDB4NzYzZTBiN2YsIDB4MTU0OTRhOTAsCisJMHg3MjUzYmIxZiwgMHhkOGRlYjNhZiwgMHhlYjI5OGY5MywgMHhjN2FmODUzNSwgMHgwNWRkZTIxNCwgMHg0NDI5YTY3ZSwKKwkweDFlYzg0YmZhLCAweGZmY2YwZDQ4LCAweGIzZjcyYjc5LCAweDYwNDMyMTBkLCAweDFjNTg1ZjllLCAweDc5ZjNmZjhjLAorCTB4ZDU0ZGU2ODYsIDB4OWIzZmU4NGIsIDB4YjY2ZDlmZjcsIDB4MTIxYmZkZTAsIDB4Nzg0MmJhOTQsIDB4OTNmN2MzNGUsCisJMHhmMGY4YzZiYywgMHhiZDY1NjQzOCwgMHhkMzA5NmE1MywgMHhmYmUyZTZlNywgMHhlNDJmMTRkOSwgMHgzOGYwOThjYiwKKwkweDA5MDU1OWI2LCAweGUzZTIwZmRmLCAweGY2NmNkZjM4LCAweGQzZGI5YzQyLCAweDJiMGRmYjkyLCAweDgzODQzZGY4LAorCTB4NTI3ZTcxNjMsIDB4M2ZjODE0NjAsIDB4YjZlNWY5N2QsIDB4NGU1MGQ1YmQsIDB4M2Q2MDk1ZWIsIDB4OTEwYWZlM2UsCisJMHgzYjgyMWZmOSwgMHg1MjE3YmU0YywgMHhlOTUzZDc3YiwgMHhhMTM5NDZmNiwgMHhkYzM2NzFkMCwgMHhlODAxYmQ3YiwKKwkweGI4YzIyODNlLCAweDY1NWNmY2ZkLCAweGNmNzY0NWU3LCAweGFiZWM0NWMxLCAweGY2ZjBhN2FlLCAweDAyZjc2MjVkLAorCTB4ODFkYjI4ZjIsIDB4ZWRmYTdhN2EsIDB4NDlmMzRlOGIsIDB4ZDNiNDFlNzAsIDB4Y2YyMmFiZDMsIDB4NWJmZGY4MWIsCisJMHg2OGJiM2Y0NSwgMHhlYjBmYmY3NSwgMHhlM2VmYzBkZSwgMHhiYThlMmZmYSwgMHgxYmU3ZDYwZSwgMHgyZDYxZDVkMywKKwkweDQ0ZjQyOTVkLCAweGY0MzhlYmU5LCAweGYxZjk5ZGQzLCAweGRmY2I1MDNhLCAweDA0OWNiY2NiLCAweGUzZDE1MWYyLAorCTB4ZWI4YWZhYzMsIDB4OWJkN2E4NjMsIDB4ZTZkYzNmM2UsIDB4ODU3ZWIyZWUsIDB4MzVlOGFmM2UsIDB4NjQyM2Q5N2QsCisJMHhkMzQ2NDRhZiwgMHhlYmUzY2U3MSwgMHgyZWRjZDczMywgMHg0MWM2OGJiMywgMHg4ODZmZDM4YywgMHg3M2NiZGU1NiwKKwkweDM5M2U4MzQ0LCAweDk1ZWQyMWFmLCAweGFjNTczODY2LCAweDA3Zjk3ZTYzLCAweDNkOGQ2NTZiLCAweGJlZGI4NmVjLAorCTB4NjdiZDllZDgsIDB4YjZiOTdmM2IsIDB4ZWY4YTIzZmMsIDB4Y2VmOGYxNDEsIDB4ODY4ZWQ2YWQsIDB4N2UxNDkxZmQsCisJMHhiZjY3YjdjZiwgMHhjOWM4MmYwNiwgMHgzMWEzMjM3OSwgMHhhZmRmNGU3ZSwgMHg3ZWZhN2U3ZSwgMHg3MDM1ZmRmNSwKKwkweGQ4YzFhYWZiLCAweGQyYTlkYTM4LCAweDE2MzZlYzRmLCAweGNkNjk3ZDQ3LCAweDE0ZjBjZDkzLCAweDczZjg2ZjVlLAorCTB4ZDRiODg3OWIsIDB4YTNhZTZmN2YsIDB4YTQ0ZTdhMjEsIDB4NzgxNDY4ZjcsIDB4YzJlN2JlMGEsIDB4MGZlMDk4Y2IsCisJMHgxZWZmOTVhOCwgMHg2Y2RkOWRlOSwgMHhmNDEzZjMzNywgMHg2MDg4ZWZkNiwgMHg4NjgzZWEzZSwgMHhlODIyMDNhNywKKwkweDA0ODIyM2Y1LCAweGEwZWNmMGY1LCAweDYzNTBiMGNiLCAweGI5N2IzMDBmLCAweGVmMDAzZDg3LCAweDY1N2NkMGE0LAorCTB4MGY2NjJlZWIsIDB4NWRhMWQ0YjQsIDB4MGFlZDQ5NTEsIDB4ZTAxYjNiOTAsIDB4N2NjMTkwMWQsIDB4Mjc2ODE5NDAsCisJMHg4ODVlZWM4NCwgMHg3Nzg2Y2FhZiwgMHgwYzVkYjkzMiwgMHgzN2E1YTc0ZiwgMHgxZjMzZmFiMiwgMHg4YzM1Mzc0ZiwKKwkweDlkZDViYjAwLCAweGNlOTMyZjBjLCAweGE4ZmI1ZGI0LCAweGY1NTdkYTk5LCAweDUwOGEyNGE5LCAweDc2YzhhYWZiLAorCTB4NGVkNjc3ZWQsIDB4ZGUzYmRjYTIsIDB4YTRiYmMwMjUsIDB4NjVhOGZmMzQsIDB4ZWNlZGZmNzIsIDB4OGZkMWI2OTksCisJMHhkYTgxYmY4MiwgMHg1NGQ5Yjc2NywgMHhmYjZmNmY3NiwgMHgwMzliNjZlMywgMHhmZWRiZDlmMSwgMHhjZDE3YjRlOCwKKwkweGRmOGEzODA0LCAweGU0MjFmMjgyLCAweGJlMjhmZTA3LCAweGY0NDJhM2ZmLCAweDUzNzgwYjE3LCAweGU1ZjZlNWU4LAorCTB4ODhjZWQxMGIsIDB4MGE2YWU2YmEsIDB4NzM2NTkzYzQsIDB4YjhkYjcwM2EsIDB4YzE4NjM2NWYsIDB4NzA2MTg5YTksCisJMHgzNzZlNGEyNiwgMHhmYmJkZDNmNCwgMHgzYmYwMjhlYSwgMHgwNGZhM2JiZiwgMHgyYjdlNzlkYSwgMHhmNDFmZGJmMywKKwkweGUzYTkxNTk0LCAweDAyNmQ2YmRiLCAweDEwYzA5N2E3LCAweGRjNzc3ZmQ4LCAweGVjMDEyN2I4LCAweGMwNTk2Yzk1LAorCTB4YjJmZDRlZjcsIDB4OTlmMWU5ZWYsIDB4ZGI2NjlmYzAsIDB4NjYyOWQyNTcsIDB4ZmRlMjM2NGYsIDB4NjA1NDdmMzIsCisJMHgzZDJhYzNjOCwgMHg0ZGRmY2ZjZSwgMHgzZmRjNWZmNSwgMHhkY2ZmMWQ0NCwgMHhiNWFiY2Q2ZSwgMHhjMDIyZjgzMSwKKwkweDdiZGNjZWNmLCAweGRlODBmNDBjLCAweGFlNTg0ZWU0LCAweDJiOTAwNGI4LCAweDI0YTFlYWU0LCAweGRkNmE1ZjNjLAorCTB4Njg5ZjAzNjcsIDB4ZTBlNzdmMTcsIDB4YTQ5ZWViN2MsIDB4ZGFhZDM0MDUsIDB4YjAzNjlmZjIsIDB4M2UzOGVhZTMsCisJMHhmOGVkNGJjZSwgMHg3NmU1NTM1ZSwgMHhhMTEzZGYxMSwgMHgwMDNkMjZmZCwgMHg4NWQ2ZWI3ZSwgMHgxZmRlZWM1OSwKKwkweGM4YTZhZmJiLCAweGVmOWZmMWQ1LCAweDljYzQ1MjE5LCAweDRjZmY3ODg5LCAweDk4YTczN2QxLCAweDlmMTgzZWJkLAorCTB4MWRmZDhlYmYsIDB4ZjdiYTI5Y2MsIDB4ZWZlNTZlYzksIDB4Y2ZmNWU5OTMsIDB4ZTJiMjZjNjcsIDB4YTlmOGMzMmYsCisJMHg0ZmQ2NzY2NSwgMHhmYjJiZmI2ZiwgMHg1M2UyMDRiMywgMHgyOTZjYmZlZCwgMHhiM2Y4YzIyMCwgMHhlZmMyNGIzZiwKKwkweDNkYTQwZmU3LCAweDNkZjYwODU1LCAweDAxMjM5ZDkxLCAweGEyZjY0NGFjLCAweGE3Y2ZjYjdlLCAweGJjMmY2ZmU4LAorCTB4Njc5M2JlN2IsIDB4M2NiZDZlZGUsIDB4NmUyNDY2ZWIsIDB4ZDAwNGQ3MmEsIDB4OTgwM2RjYzcsIDB4MDdjOTkxZDMsCisJMHhmNWJiZmY0NSwgMHg1NWRmYWQzMywgMHg3MjJiMDdhZiwgMHg2ZTNmZDczMiwgMHg3ODAyMTBkNSwgMHhmYmMyY2M3NywKKwkweDhjMjQwNzEzLCAweGM5ZWJkMmY3LCAweGJkMDU4MzUzLCAweDIwNGZjM2U4LCAweDRkNmQ2ZDdkLCAweGZlN2IwMThmLAorCTB4MDA5ZjYwZGYsIDB4YzY1ZWI2ZGQsIDB4NDlhYTgzZjcsIDB4Yzc3ODFlZTAsIDB4YjQ1NWJhYTksIDB4MjRmYzYwMDcsCisJMHg2N2Q4N2FmMywgMHhlMGExM2U4YSwgMHgxZWVhZWRhNSwgMHg3ZmRhNThmMywgMHg3ZDgzNDVmNiwgMHg3NmYxMDUwNSwKKwkweDU3NjgyZmYwLCAweGMxZmRmODRmLCAweGZlNjc5MDA0LCAweDA3ZTc4NGEwLCAweGM2ZjcxN2Q5LCAweDQ1ZjE1NDJjLAorCTB4N2UwMzU1ZmYsIDB4NmVlYWZiN2YsIDB4ZmM2MGY3ZWQsIDB4OGI2ZWQwZjUsIDB4N2JjYmQ5ODEsIDB4MDYzZGZmZjcsCisJMHg1N2RiZDRmOCwgMHg5MGJjMjEyZiwgMHg2ZjUzZDEzZSwgMHhjZjNiZmQ0NiwgMHhkMWZjODYyYSwgMHg4ODk5YmQ2YSwKKwkweGRlMjE4N2Q5LCAweDE1MmM2YTZiLCAweGZhZWY0MjZiLCAweDY0ODdjZTcwLCAweGQ0ZjQ5NTk1LCAweDI3Nzg0MjJiLAorCTB4ZDBmMDA5MmUsIDB4ZjA1NjFmNDMsIDB4M2UzM2QzYWMsIDB4NzczZDcxYjIsIDB4ZWYwZjE5MTgsIDB4NGQ1ZGI2NWUsCisJMHhjNzdiYzBhOCwgMHgwYWZiMThmZSwgMHg4ZjRjY2Y5NCwgMHhlZTdiZGVlYSwgMHhmZGYwZTljOSwgMHg5ZGRlYzhhMCwKKwkweDdlZTIyYWI4LCAweDYyYjNiZGRhLCAweGRmNmE4Nzc4LCAweGViOGE0ZTUyLCAweGM1ZDA2NTc2LCAweGZhZDE2ZjBiLAorCTB4MzM0NWY2NTcsIDB4YmNlNGJhZmYsIDB4MjI0ZjdkNWUsIDB4ZjFjN2RmNWMsIDB4Y2VjYzE4MTUsIDB4ZTE4M2JjZTksCisJMHhhYzZmYThiZCwgMHhiMGY1NzRjZiwgMHg0MzYxZmZmNywgMHgwMDU4MzkzZCwgMHhmYWQ0NjJlMiwgMHhmZmFjMjM0ZSwKKwkweDNlOGFkOWJmLCAweDI1YTVmYzY3LCAweDk3OGJmODA2LCAweGI0MjEwZWU0LCAweDkyNjhiMmRmLCAweGFjMTU3NDBiLAorCTB4MzNiMDc2MjMsIDB4MTgzMDFmYjYsIDB4MzczMjVkNjAsIDB4Y2Y1YzYyYTUsIDB4NzMxY2ZjMmIsIDB4MzFhMzRiNDksCisJMHg0YjE3NDU1NSwgMHgxOWQ4MzlmOCwgMHhhZjEyOWJkOSwgMHg5NjMyYmVmYSwgMHhmYjMzOTdmMSwgMHg3MTgxN2ZjYSwKKwkweDkxMzQ3ZjFkLCAweGQwZjQxMTkxLCAweGZlNGNiMTg1LCAweGE3N2EzMzZlLCAweGM3N2E4NjZmLCAweDY4ZGY3ODBkLAorCTB4ZWY1ZmZlZWYsIDB4OTc5Mzc3ODcsIDB4MDM4YzczMWMsIDB4NTg5NGUwYmYsIDB4MGVkYTBmYjYsIDB4NzEwZjUyYmUsCisJMHg4MjFmNmRjMSwgMHg2NjcyYTJkNCwgMHhhMDY4YjE2MywgMHgxYzQ1YmVmZCwgMHg5ODc3YWZjYywgMHg5MGQ2YmRmZCwKKwkweDEyYjg5NDNmLCAweGM1Mzc5ZTYwLCAweGQ2ZmRiZTMyLCAweGRjZTY4MzAxLCAweGJlZmUyZGVjLCAweDhjYjFmNWVmLAorCTB4MzJjNmE1MGYsIDB4MDNkNmRhYmYsIDB4NzAwYjA5YjksIDB4YzQ0N2I5ZmYsIDB4NjRmMDFmODIsIDB4NDU2YzNkNDcsCisJMHhlOGE4MGZjNSwgMHg2ZjBmOTM2ZiwgMHhmZTg2M2U5ZCwgMHhjMTk3NzI3MywgMHgzOGVkY2IwZSwgMHhmMzA4ODJmYywKKwkweDI0MjE5Yzc1LCAweGY0M2QyMDRlLCAweGFjNmYwYTM5LCAweDVkNWJkZTFhLCAweGM3MWQxZTBjLCAweDBhYWZkODZlLAorCTB4ZmUwNGE5ZmUsIDB4YmZjZDA2NzEsIDB4NDNjNTJlZDUsIDB4N2Y4Mjk4M2MsIDB4ZmY0YTFlNjUsIDB4ZGFlMjE2OGUsCisJMHhlNGFkYzE2MCwgMHhmZTE1ZmFkYSwgMHgzMWVmZTU2OCwgMHhlNTEzYjA0YywgMHg1ZDIwMzNlZiwgMHg2ZWI5Yjc2ZSwKKwkweDZmNzJjNTg5LCAweGVjY2ZlNDBhLCAweDM2ZDI3YTYzLCAweDcyNDk0ZjJlLCAweDlmYzA3MGYxLCAweDc5ZjM0ZWIyLAorCTB4YjdhNzhjYWEsIDB4ZTNlN2VmZmUsIDB4NGJhZmQyNTQsIDB4MGVjOGFmZDcsIDB4NzZjZGQyMmYsIDB4ZjBlZTRmMTYsCisJMHgxMGU5Y2MwNiwgMHg4ZTk2ZDY3NywgMHgxNTRhOWY3ZiwgMHg4ZTNmN2I5NywgMHhmZGY2OGNmZiwgMHg4MzBlYjZjMiwKKwkweDU1OGZlZTAxLCAweDUwZTIxMGVmLCAweGJlYTdlZGRkLCAweGE5MzNhMjFkLCAweGVkYWZlOTA1LCAweDVjN2RjMTE4LAorCTB4ZTY1ZGZjZGUsIDB4OWY3MmE0OGYsIDB4ZTc4NmViYmYsIDB4Zjg3ZmIwZWIsIDB4ODEyMGZiMzksIDB4MWJmZDkzYTYsCisJMHhmYzQxMGU1NiwgMHhhZmIwNmMwNiwgMHhmYmEyNzhjMiwgMHg0NmRhZDIwNiwgMHg5MmViZDAyMywgMHhlNTJkMmM2NSwKKwkweDlhNGJkNWU3LCAweDRiM2ZiOGRjLCAweGM0NzhiM2Q2LCAweDRjYTliMTY1LCAweDI1N2E3MzNlLCAweGY4YzFlODg2LAorCTB4N2I0ZGJhZGUsIDB4NWMxZmYwOGYsIDB4N2Q2ZDllN2UsIDB4NGJmNDBmNmEsIDB4ODBmYmViZTksIDB4OWVkYTliOGYsCisJMHg1NWMzMDc1OCwgMHg0NmVjZjVlOCwgMHg0NTk0ZTExOSwgMHgzZGYzY2Y2YiwgMHhiOGNmY2NiMSwgMHhmN2EzMzBmZCwKKwkweDVjZTUxYmM5LCAweGIyNmM0Zjc4LCAweGJmYzFkODk3LCAweDRkYzZkNmZkLCAweGI3ZWZmMDIyLCAweGQ5NTM5ZTgwLAorCTB4N2I3OTA3M2UsIDB4MzE2M2RmNjYsIDB4ZDZmOTA3ZGYsIDB4NDdlMDIwNjksIDB4NjUyNDY2ZGYsIDB4NjJmYjU0NWIsCisJMHgzNDM3ODZlZiwgMHhiOWJjYjdmYiwgMHhlYmZhM2E2ZSwgMHhlMDA1ZTIzYiwgMHg1NWJlY2FmMywgMHhlOGNkYmVmMCwKKwkweGZmZjcwZGJjLCAweDlmZmRiYTlkLCAweGMyYjdkYWNmLCAweDRmN2FkMGJhLCAweGQ0ZmZmZGYxLCAweGU5ZmZiYTM0LAorCTB4NzE4ZGI4YTcsIDB4NjZkOWMwMDIsIDB4ZGNjZWZjOGMsIDB4ZmU5MGRmNGIsIDB4YTNiNTdjNDIsIDB4Mjk3ZDVmMDcsCisJMHg2YzFmZjk5NiwgMHhlYWZmYjRlOSwgMHhmZmExMmUzYiwgMHg0ZTNlMzQyMSwgMHgyYmU1NGYzNywgMHgwMDJhOTM3NCwKKwkweDBhZTkxYmZlLCAweDUxN2MwMDhlLCAweDUzM2QwMmJjLCAweGNjZmU3YTNkLCAweDA3OTVkYzBjLCAweGUxZmYzYzI0LAorCTB4MmUzYzRiZTcsIDB4NmE5NDc3MDQsIDB4OTlmOTg2YmYsIDB4NmZkZDZmYjIsIDB4ZjJiMjM4YzAsIDB4OWU4MjU3NmIsCisJMHg0NWU4NTA5ZiwgMHhiODJiM2NmYSwgMHg3OTUzYzc4NywgMHg3MWY2MTY3NiwgMHg4ZWIwN2UwNCwgMHhlYzhhZTNlMywKKwkweGZmN2RlYmVlLCAweDY1Y2Y0MGMxLCAweGY5ODQ2MmQ0LCAweDFkODJmNTkwLCAweDc3Mjk0NWQ2LCAweGJkZWY2N2FjLAorCTB4OTRmMGU2MWUsIDB4MmRiZjg3ZWYsIDB4ZGUzZDgzYmUsIDB4ZjBjYzNkMjEsIDB4NWM0MjM0MWQsIDB4OTMxZjI4ZWIsCisJMHhjNWM4NDQ2MywgMHhiNzBjNDBmZCwgMHhiNjdkODYwZiwgMHhmYmFmY2E4NCwgMHhhY2ViZjI1NSwgMHhhYTc0ODhkYywKKwkweGNlMjNlMWUwLCAweGIxYzRhZWI3LCAweGM3Y2UzZjc5LCAweDVkMWYwN2U5LCAweDgyZmYwYWEyLCAweDNmNmMwOTI0LAorCTB4ZTdkYjAyOGIsIDB4YmIzZmMwMjIsIDB4OTBkYmE2ZWYsIDB4NGM4OGVmZGUsIDB4YjdiMDc2ZWYsIDB4NDdlZmUxZTIsCisJMHg4Y2ZhNDA2ZCwgMHg3YmM3NjY5YiwgMHhjZTQ5NGYyZiwgMHg3ZThkMzhhOCwgMHhlZjc0YzNlNCwgMHhjZWQwNjdhNiwKKwkweGZkODVmYTAzLCAweDk3ZmQxYmRlLCAweDA4OTNmZDAxLCAweDc0YTNlZjc0LCAweDg1M2Y1YWFmLCAweGZjNWQyODBlLAorCTB4N2NhNWYwMWQsIDB4NzI4NWQzZDcsIDB4NjVlMGE5MGUsIDB4NzMxY2VlOWIsIDB4ZTllMTlkYWEsIDB4OGQ1MjAwZmYsCisJMHg4MDAwYjU2ZSwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGJkZmYwMCwgMHhkNTU0N2MwOSwKKwkweGYzN2RmOGQ1LCAweDMzMzJjOTY2LCAweGIyNzY0Yzk5LCAweGEwMGM0OTMwLCAweDgwNDkwZTJjLCAweDA4NGVkOGIwLAorCTB4YzM4ODRhMjAsIDB4OTNhMGQ3NTIsIDB4MzY0YjA5MDAsIDB4OTQ1Njk1MTAsIDB4OGIwNjIwODEsIDB4YjYyZDE1MTgsCisJMHhlZjg1ODMyMCwgMHgxMDZkMWI0MywgMHgyNjgzNThhOCwgMHg2MjJkMTExMCwgMHhhNTdmYjFkYywgMHg0MTQ1OTA0MSwKKwkweGVkMWZhODIyLCAweGU3M2JmNTg3LCAweDMzMzM3YmRjLCAweDZhMDIyNjZmLCAweGVmYzdlMWZmLCAweGRmNzdkZWU2LAorCTB4Y2Y3ZWNlNWQsIDB4NmVjNWY3MzksIDB4ODQzNjMxZDMsIDB4YWU2MzA3MzEsIDB4N2Q4YzAxZTYsIDB4ZjRiZjNmOGYsCisJMHhhMTJkOGM5NywgMHhjZjM3NzNlNywgMHg4MjI0NzE1ZSwgMHhmMGY3Y2ZkMSwgMHg1ZTc5YmFiZiwgMHhjNzc2YmQ1MCwKKwkweGU5MWM1N2FmLCAweGM1Y2ZhZmU3LCAweGZmZTA1MjVmLCAweDg5NjdhNjcxLCAweDQ3ZjE1NThjLCAweDg5ZWY0Y2FjLAorCTB4ZmJjMDI1YjUsIDB4NmNkNjlkMTEsIDB4ZTI2NmI0OTgsIDB4MDM4NDYzMTksIDB4ODMxOTc4OWYsIDB4MWM2MzZmZjYsCisJMHg2ZmFhM2U1NCwgMHgxZjJiZDNkZSwgMHhlOWNjMzFjYSwgMHg5YjM5YTY4NSwgMHg5OThmMTUzMywgMHgxYjM2MDViMSwKKwkweDI3Zjk2N2FkLCAweGIwZGQ5M2QzLCAweGM2YzY0NmRlLCAweGM1OWJiYWUzLCAweGQ5ZGQ3MjdjLCAweDk5YzY4NTM2LAorCTB4OGY3MzI5ZTAsIDB4NjY2NzgzODksIDB4YTA3YjllNGYsIDB4NjYwN2Y5ZmYsIDB4ODg2ZDk2NGYsIDB4NzBhMTNlYmYsCisJMHg0MDE4ZWFiZSwgMHg3ZWM0OGM0YiwgMHgwYzk4NTU2MywgMHhjOWJmOWZlNiwgMHgzMjY1MzNlNCwgMHhjNDlmMDViNiwKKwkweGEzZGIyYWMzLCAweGZkMzI5YjdjLCAweGNjZjRkOWVmLCAweDk2MzNiN2E1LCAweDc1YTRjYjZiLCAweGIxNWFlYWMxLAorCTB4NjQ2ODU4ZWUsIDB4ZGZiY2MxOTcsIDB4OWJiNTk2NjYsIDB4MWRkNWQxZTEsIDB4YjA4MWUyZGUsIDB4ZWY0NjJkOGYsCisJMHgzODk5ODlkNCwgMHgxYzFhZjM5OCwgMHg5ZDYyOWFmZiwgMHg2YTU4MDFlZCwgMHgzOGE2Y2JhYywgMHg2OTkyZDAwNywKKwkweGNmOGZiNjVlLCAweGVjZWQ5NzkzLCAweGVlYTFiMmNmLCAweDJkYjllNjcwLCAweGY4MTI4ZDhjLCAweGM5MzBhZDYyLAorCTB4NDIxYzNmNzAsIDB4ZDllMWM2ZjEsIDB4MjAxNzVlMTMsIDB4MTc1MDg2N2MsIDB4ZDVlMjdlN2EsIDB4NjY3ZDFiYTgsCisJMHgwMTQ0ZjNmZiwgMHg3ODYzMmZiZiwgMHhkM2MxYWRmOSwgMHgxZDBlNjZkYiwgMHg1NTNlNjAyNywgMHhjYWNjNjY0OSwKKwkweDVjNTU0YjNjLCAweGRiNjYyOGZmLCAweDc3M2ZmMGU0LCAweDFjMmU2MjhjLCAweDU3MTg5YTdmLCAweDhmZmFjYmI2LAorCTB4MTBhZWFmYTYsIDB4Nzg4NjlhZmEsIDB4MjJlODhlYWQsIDB4ZDA1M2VhYmEsIDB4YmNjMDc0NjksIDB4OGJkZDE5NGMsCisJMHhlZTk4ZmFjMSwgMHg4MGFjNWVkYSwgMHhiZDcxZWFiYSwgMHgyOTU1NDgwMCwgMHhmNmM3ZWJlMCwgMHhkNzMzOGQ4NCwKKwkweDAxZDk5ZTIzLCAweDBjYzljYjEzLCAweGNkYjU2N2RkLCAweGQxYjZlMWMwLCAweGU4NjZmYTMwLCAweGI4NjVlMDk3LAorCTB4ODM4YmMwMDMsIDB4ZGUzNTg1ZTMsIDB4ZGM2YmY4OGEsIDB4ZDc4ODYyNjgsIDB4ZGMzOTYzNmYsIDB4NjhkOTUzYWMsCisJMHg0MmI3ZjQwMywgMHhjNmY3MjQ3ZiwgMHg1NzAzOWVhOSwgMHhkOTMxYmQ0MSwgMHg5ZTYwNTBlOCwgMHhjMjJlODYxMywKKwkweGEwYWI4OWZiLCAweGFkYzNlODhkLCAweGJjNGZiZTIwLCAweGRmOWFlMjNhLCAweGEyNzdiYjQwLCAweDhiYzBlNThlLAorCTB4MDViMDhkNWIsIDB4YTdiZmMzYTQsIDB4NDgyOTM2ZjksIDB4MjdjNDJkYTcsIDB4YzFiMmM3ZjMsIDB4YmVkZTc4MjYsCisJMHhkNWQxMTg2OSwgMHgwNTJjZTJhYywgMHhlNmNlNzZlOSwgMHhkYjlmMDU1OCwgMHgyYTc0ZDhjNywgMHhkODYzZWZmMywKKwkweDEzZTg5NTQyLCAweDE2ZGVhMGY4LCAweGRlNjE4ZjgwLCAweGQ1ZTExNTNhLCAweDZjOTNjZTNiLCAweDExZWM2NTg4LAorCTB4MjNlMzM1ZGIsIDB4MzJjZTgxZDIsIDB4Y2MxYjI0NTksIDB4NWY1MDQzZDgsIDB4YjQ2YjcwMDksIDB4NGIxNjE0YmIsCisJMHgwYTczMDZmNSwgMHgyMzYzMjFmMSwgMHgwY2FkYWUwOCwgMHhkNTE4ZDRmMCwgMHg2MDQ1Nzc1ZCwgMHg3ZjVlMmNmZiwKKwkweDg2ZWFmMWE0LCAweDllYzYzNDg2LCAweDIyMzU3MTg5LCAweGJiMzAzZTllLCAweDg3ZjljMTFmLCAweDQ0YTlkNTI2LAorCTB4N2ZhZTgyZTcsIDB4MTI3ZWNlODAsIDB4MmMyZWQ0YmQsIDB4ZTBmMzg3NjIsIDB4MGU2NjBlZjcsIDB4NDc5MDFiYTQsCisJMHhmODA2NmViNywgMHg5YjNkZTg5NSwgMHhiZDM1NWQ3MCwgMHhjMzhlM2U4ZSwgMHg2NTdjYjZkNSwgMHg3YmExODRmNCwKKwkweDIxNzg4ZWI5LCAweDhjYzdkODE3LCAweGFlZWYxMWYwLCAweDdlY2RjYjUzLCAweDY2YzViM2I5LCAweDUyZWQ0YzE3LAorCTB4ZmNmYzViMjYsIDB4NzllYjcyODYsIDB4NTkzYjk3MzMsIDB4OTgyMjlhNTAsIDB4N2VjNzYyZDcsIDB4YWMyM2EyM2UsCisJMHhlNWZhZTRjNywgMHhkZDYyY2FkMSwgMHgzZTE4NWY3OCwgMHhlYjg5MGQ3ZSwgMHhhY2NmOTQ2NywgMHhmMmZmN2ZlNSwKKwkweDFmZDBhMTliLCAweDlmODk1NzdmLCAweGM0ZmNlMzVlLCAweGM1YTNmNWU1LCAweDNjMjIyNjlmLCAweGJkZjA5MzkwLAorCTB4ZWIxY2M1ZGIsIDB4ZWFkZjNhOTcsIDB4NWZiOTc0OGIsIDB4M2VhMDliNjUsIDB4MmFmNDY0ZDgsIDB4ZTY2ZGI4MzEsCisJMHhmMThhMjViMCwgMHg5NDViMGQ5MCwgMHhhODIwY2I1NiwgMHgyZTYxNGJmZiwgMHg3ZmU5YzNjMCwgMHhiZmFlNTRhOSwKKwkweDEzM2UzZGQ3LCAweGExZDlhZmRlLCAweDdlODUyZTczLCAweGYxMGEyZDM1LCAweGYzMzdiMzgzLCAweDM3MWQwMDQ1LAorCTB4MzEwNzU5NDcsIDB4Yjc3MGFmMTgsIDB4ZjY4MDY1ZDksIDB4YzkwNDRhZDMsIDB4ZDcwMDljNjUsIDB4MmZlYjkwNjEsCisJMHg4MjY4Y2FlOCwgMHhjMDJkZjVlNywgMHg1ZDNkNTA3ZiwgMHhmNWM2YTgwOCwgMHg2YzMxOWRlYSwgMHg4M2JlMWY4MCwKKwkweDFmYjQ3Y2RlLCAweDFiZGEwMGVjLCAweDRmNjdjODlkLCAweDlmZjFmMjQ1LCAweDgxZjBjYzhhLCAweGJlNTI4MzEwLAorCTB4NGEwMTg4ZTcsIDB4NmU4MjU5NjEsIDB4NjJjNjdhZjQsIDB4Nzg1MDRmMDAsIDB4MzBiNTFjYjEsIDB4M2MwN2E1ZGIsCisJMHgzNWU2N2EyYiwgMHg3NTQ2YmUwMCwgMHg5ZjA4YWFiNSwgMHg4ZTg3MmVhYywgMHhlOWYzZmQ5OSwgMHgzYmVkMThiYiwKKwkweDM5ZDBlZjRiLCAweGQ2ZDVmNDAzLCAweDdhYWJjZmJkLCAweDMxZDBlYjgwLCAweDk0MmFmNThkLCAweDZmOWUzMTg5LAorCTB4NDYyM2RlMTAsIDB4N2I2M2Q1ZDUsIDB4ZjU1N2IxNWMsIDB4YTU3Y2ZmNDAsIDB4ZTkwNWI3NmUsIDB4NDRlNjFhZWMsCisJMHgyNGY5MmFiOSwgMHhjMWI1OTNhZSwgMHg4MWVjNTk3MiwgMHhkYTE1OTc0ZSwgMHhiNTc3MWM0NywgMHhjN2ZkODAwZCwKKwkweGUzODI5OWI4LCAweDdjMGRmZDQ5LCAweDBlOTE2MmM2LCAweDQ0Y2E1ZGUzLCAweDNmZTg2NzE4LCAweDhlNDdjMTE4LAorCTB4NjhlZjc1YjMsIDB4YmUzZWY5MDUsIDB4MThlMjhjNjMsIDB4NmJlNzRhMTAsIDB4MzhiN2UzOTgsIDB4Y2U5Zjc3YWUsCisJMHgzNDc1Zjg4OSwgMHg5NDA2ZDczMywgMHg2MmJhN2YxMywgMHhmNjRiYzIwYywgMHhmNWNiMWRlZiwgMHhhNzhmNDhjYSwKKwkweGVlMTU0NDA4LCAweDFkZTcwNjI3LCAweGI3NmZhMzdlLCAweDZjMzNkNjAxLCAweGQxYjc3Nzk2LCAweGQ5OWZiMDExLAorCTB4ZWQ0YmM2OGMsIDB4NTIzZWQyZjQsIDB4YjEwYTc4MGUsIDB4ZDJjNmI2Y2MsIDB4Yjc4ZTIzMzgsIDB4N2U4MDBkYjYsCisJMHgxZmIwNzU0OSwgMHg3OGVmNGY2OCwgMHhhNmI4NDE0ZiwgMHg4ODI4NzVkNywgMHg3NzdiYWRjZiwgMHgzYWQzN2FkMSwKKwkweGY4Mjk3OWRhLCAweDE3NjE3OWViLCAweDU2MDNkYjc0LCAweGRiMjNlZDFkLCAweGYyY2RmNWNhLCAweDY2NmY1YzUzLAorCTB4YWRiMjdhYzcsIDB4MmM3ZGZlMDksIDB4ZDcyNGY0MmYsIDB4ZjY2YmY4YzEsIDB4MTdlZjc1NjYsIDB4Mjg5NWVlZTUsCisJMHg1MmU0MDNlNCwgMHhjNjkxYWM2ZSwgMHhlOWVhY2JiOSwgMHhiZGFiZmI4ZiwgMHhkMjBmNzNiMSwgMHhkZjdiZjNlMCwKKwkweGI0N2YxMmIxLCAweDEzN2UxM2M0LCAweGY4NGE3ZGY3LCAweGJhNDg1YzQ4LCAweDM3ZDlhZDk4LCAweGIxNzk0MTVmLAorCTB4YTY3MDE0YTYsIDB4Y2E1OWMyODQsIDB4N2ViODM1OGQsIDB4ZjQ1YjFmYTIsIDB4MjdjZmEwMjQsIDB4ZDg4MjllZWQsCisJMHhjY2E1N2I0MCwgMHgyMDE1OWQxZSwgMHg4ZjdiZTQ5NywgMHgxOWVlNjYyZiwgMHhlZDYxOTBiMCwgMHgxNjU5NWJlNSwKKwkweGIxN2VmN2M5LCAweGMyN2RmMjAxLCAweDkxMjJmYmMwLCAweDJlMmM5YTllLCAweDU2OWZiNjE3LCAweGNmMzg4ZGQ4LAorCTB4ZmI0MjU4MzMsIDB4OTc1ZTA2MzMsIDB4ZTA0MDdhZjAsIDB4NTI3NjNiMzMsIDB4ODcwODc1YjYsIDB4ZjhlODBkOTMsCisJMHg0ZmRlNDg5OSwgMHg4ZGVlOGYyYiwgMHg4M2JiMDlkNSwgMHhlMGViMGJkMywgMHgwOGZiODJmNCwgMHhjNjY2YmZiNCwKKwkweDc0OGMzYzcyLCAweDljZjQ4YTc5LCAweGZlZTJhNjRlLCAweDc2ZjgxNzg2LCAweDFiMGVkZDIzLCAweGY0OGRkZGVmLAorCTB4OWQwNGNlOWYsIDB4YTI3NGU3OGMsIDB4NjNkYmY3YTUsIDB4NzExZDdjYjksIDB4ZGMyMThiYmMsIDB4MGVlNjE1ZjMsCisJMHhjNjU0ZWY2NywgMHhiZTI5YmI3MiwgMHgwZmQxMzQ2MywgMHhjZTE5NDNmMCwgMHg0ZWI1MzQzNywgMHg2NmRjYTAzNSwKKwkweDdmYTgwOWI2LCAweGEwZWIxMzdlLCAweGFlMDU3OTdlLCAweDM2NmY0OGRkLCAweDc5Zjg5Yjk3LCAweGU5YzZkOWJlLAorCTB4MDdkMzkzMjYsIDB4MWMyNzNmYmMsIDB4M2U0MzZkM2YsIDB4YTNlN2UwMWEsIDB4NzM0N2E0NzgsIDB4MjZkZTNkMjgsCisJMHgwMTFiZjRlMCwgMHgzZGYxZDBkZiwgMHhmMWY4ZTE3NywgMHgwMjk3M2ExZCwgMHg2MDNiMGM4MywgMHgzYWU4MzFmNiwKKwkweDQ5ZTgwMTZjLCAweGY0MDY1M2U0LCAweGNmYjQwYjBmLCAweDlmMjIxNWIyLCAweDE1Mzk1NmE1LCAweGIzMDJlYmM0LAorCTB4ZDdkYzFlZmIsIDB4Zjk4ZDk0NzIsIDB4NWYzYWNmNDgsIDB4NmM5N2JjM2QsIDB4N2VmZTExNzMsIDB4Njc2ODllYjQsCisJMHg5MDY4NmMxMSwgMHgyYzQwZjU5ZCwgMHg5NTU3ZTNiNywgMHhmYTdlYmNhMSwgMHg1M2NhMjM1YiwgMHhiZGJmZTQ4NywKKwkweDAxZTVkMWI5LCAweDUwYzdmMWY0LCAweDBlMTIzZjdjLCAweGE3Mzk1YWRmLCAweDJlNWZiN2M1LCAweDgwMzljYjA0LAorCTB4MGY4ZTVhZDcsIDB4NzdjN2U3NmUsIDB4N2NiOTUwMmMsIDB4M2Q2Yjk2MDgsIDB4M2U0NDIzZTEsIDB4YzFmYzNjMDgsCisJMHhlYjg0ZGFlYywgMHg0MDQ1YzZjYywgMHhmYWNkMWRlOSwgMHhmYTRmN2I2MSwgMHhmMzU4YzVmOCwgMHgyZjY3YjM0ZiwKKwkweDhjNWY4ZmFjLCAweGM3ZDUwODRkLCAweGQ3YWU4OGJhLCAweDc1NDc4MDE1LCAweDYxNTBlYThiLCAweGVjOGJmNTBiLAorCTB4ZmFmZmM0MmUsIDB4NzY4OWM1NjYsIDB4OTUxNmVlZTEsIDB4ZjJmZDYxZTgsIDB4NzI5YmQyMjgsIDB4OGY2ZTVmYmQsCisJMHg4NGFlYzQxOSwgMHg2YjNmZjA1MiwgMHg1YTdkMjU4ZiwgMHg1ZmU2MmIxYiwgMHhmY2MwYmYwNiwgMHhiYWJjNmRhNywKKwkweDNkNzllNmRkLCAweDZmYWQwZTUwLCAweGUxMTIyNmY5LCAweDcxNTkzZmRjLCAweDRhYmI0MTFkLCAweDg1ODE4ZmFiLAorCTB4ODRkZjc4MTQsIDB4ZDcwODI5YmYsIDB4MzIyYTBkYzEsIDB4YWQ5ZWY1ZDYsIDB4ZjZmMDk1MjYsIDB4OGMzNzhlMmUsCisJMHgwYTMzYmU3NSwgMHhhNmE3ZjVkNiwgMHg3YjQwYmFkMSwgMHhhZjhlZWNlYiwgMHhlYjA1ZGQ2ZiwgMHhmYWU2OGRhZiwKKwkweGViOWEzNmI5LCAweGNlYmJkM2U3LCAweGJiN2E0MWY3LCAweDkyNzRlMTc2LCAweDllZjRjMzdiLCAweGRjZTUwMzhmLAorCTB4NzMwZWZkMWIsIDB4NmQ0YWNjMzksIDB4ZDRlM2ZiNDcsIDB4NjhmYmU1MmUsIDB4YTIzNWExMDAsIDB4MGFlZDFlOWYsCisJMHgwNmE5Y2EzNSwgMHgxYzQ0MTVkYiwgMHgxZjAwMzlmNSwgMHgxNDViNWY4NCwgMHgwNzNlYWZjMSwgMHhkNjkzMmVmOCwKKwkweGQ5ZDcwMjc5LCAweDE0YjIzMTZlLCAweGZjMGIzZjY4LCAweGJhZTRmZDg4LCAweGNmN2FjNDdmLCAweDlhNmY1Zjg0LAorCTB4YTBiNDY4ZWQsIDB4YmViZmQ1MGIsIDB4MWUyMGJjNmUsIDB4YTJkNTdjNjAsIDB4NjY5YzdkYTcsIDB4NjdjNDRlNTEsCisJMHgxMGM1ZDFiMywgMHhjMjgzZGVmZiwgMHhhYjc4MTAzZSwgMHhiYTc3MzQxMSwgMHgwZjAxYzg2NSwgMHg4MWZkNmZlYywKKwkweDdmYmUyNzM0LCAweDQ4ZDljNzdhLCAweDQ3ZWQxOTlkLCAweDdkODc2YThmLCAweDU2NWRlOWE5LCAweDViYmI4N2Q0LAorCTB4MzlkZTVlY2UsIDB4YzE5YmU0ODAsIDB4YmIzYmViMGUsIDB4MzNkZGIwZWYsIDB4Y2ZlZDQ3ZTAsIDB4ZmQ4OGJmNmEsCisJMHgwZGNkZWFkNSwgMHhhYTIyNzY4MSwgMHgxYTk0NTI1OSwgMHhkYTVhNTIzYSwgMHgyMjBjYTlmZSwgMHgwZjI4NjNmZSwKKwkweDU3Y2MxOWJkLCAweDNlNWVmYjBmLCAweDU0ZDNkMDUwLCAweGQ3YmU0MGU2LCAweGNkYmI3YmUyLCAweGUwMGY2MTlkLAorCTB4YjczNmNkZGIsIDB4ZjM4NWQ3MDMsIDB4M2VkMmU2YTQsIDB4ZTgzZWIwYjMsIDB4MDY3OWU5Y2QsIDB4MGM2ZmVlMWQsCisJMHhlZDI5YmQ0MywgMHhiNDRmYjkzZCwgMHhmZDczMjNjNywgMHg1ZWY2OTNmYiwgMHhjZTczZmVmNywgMHg2OGM3ZGEwZiwKKwkweDc0ZWM4M2RmLCAweGM1MmM3NDBlLCAweDI4MmQ1YTczLCAweDAzMzIwNzg1LCAweDc4NGFkZmY3LCAweGFjZmIxNmE5LAorCTB4YWFiNzMwOGUsIDB4Y2RiNjJmYjAsIDB4Y2E1M2IyNzAsIDB4N2RkMGFjODMsIDB4ZjM4NjllMDAsIDB4NzgwZjM4N2QsCisJMHgzNzdmY2YxMCwgMHg0ZTExZWIzYiwgMHhkYTFiMGVmYSwgMHg5MWFmYjBhZiwgMHg1MDU2MGZiOCwgMHhmODcwOGM5NiwKKwkweDhjOWFlY2MwLCAweDI1OTlmZWYyLCAweGY0ZmFlODhjLCAweDE0ZjdjY2IzLCAweGJiNGI3YTZjLCAweDAzNjZlODhlLAorCTB4ZmZlODgyYmIsIDB4NWI5OWRkMGEsIDB4ZWJlMjY2ZGQsIDB4N2U3ZWY4YjEsIDB4ZTUwZWEzNDcsIDB4YTFjZjhlNmYsCisJMHg3OTdhYjk0MywgMHg0NzRlYjM0NywgMHgyZjE5ZTBmNCwgMHgwZjU2NzRlMCwgMHg1NGRmZWJlYiwgMHhiYTQ4ZmVhNywKKwkweDJlOWUxNDk4LCAweGFiZjZmMDQyLCAweGI4NDliYzQwLCAweDMwZjQxMjhkLCAweDMyODZlMTBhLCAweGIyN2Y0YmI5LAorCTB4MzcwZmMyMzMsIDB4YjU0YjBiYzAsIDB4NThjNzhlODcsIDB4YTljMjA2NjcsIDB4N2Q2M2M1ZWQsIDB4OWFiYzYxM2EsCisJMHg4YWRkOGY5NywgMHhhYmY5YTk3MCwgMHhjYzYxODg4OSwgMHg0MThmMmY1ZiwgMHgzMGIyZmZiYSwgMHg3MjczNWRiYywKKwkweDBmNWI5ZDcxLCAweDNkYWI3OGM0LCAweDE1N2JlNDhiLCAweGJkYTIzMGViLCAweGFkZGQ3MjAwLCAweGQyZWI5MDBmLAorCTB4ZTg2N2RiOGUsIDB4ZjdmMWM2MjgsIDB4MTJkOTUxMGQsIDB4ZTc1OWYzODAsIDB4NDYxNjI0YjAsIDB4M2Y3MmM4NWYsCisJMHgwMDM5NmRkYSwgMHhlMTU1ZjQ3ZiwgMHhmY2M1ZTRmOSwgMHhkYTQ3NmUxOCwgMHhiMjVhZmM4MywgMHg5Njc4YjdkYywKKwkweGU3YTE4YzdiLCAweDhlMGRmNmYxLCAweGIxNGU3ZjI0LCAweGM4N2ExZWM2LCAweGE3OGRlZGNlLCAweDgxY2Y1Y2VkLAorCTB4M2FlMTc2NjAsIDB4ZTJjNWZkNGYsIDB4YTlkMzQyZjMsIDB4MGNhZGY3ZGMsIDB4ZGI2YTc0ZTAsIDB4YTA1ZTc5YmIsCisJMHhlM2FjNTNhMywgMHhkZjkwOTdmNiwgMHhiOWQzMzZiZSwgMHhmYmYwNzhhZSwgMHg3ZTJjNGI3OSwgMHhmYjhhYmNmZSwKKwkweDJmNTVkODUyLCAweDQwNzU2OWJjLCAweGJiMmRlMmZmLCAweGYwMDFiZGUzLCAweGJmZTk4YWJiLCAweDRjZWJhNmVlLAorCTB4OGZlZjk3OWMsIDB4MjBmYjNiZTksIDB4Mjc0YmQ4M2UsIDB4MTY1MDFkMTIsIDB4M2M2YWY4YmYsIDB4MzczODAzYTcsCisJMHgxNGZmNDUwZCwgMHg2MzNmOGZlNywgMHg1ZGRkODA1MywgMHgzZGM2YjBiYywgMHgxZmMwMmYyNiwgMHhmOTkyMmU3MywKKwkweDBlZmFlYjAyLCAweGFiODkxZTIzLCAweGZkYTk5OWNmLCAweDllMjViYjc2LCAweGQ2MmY0ZGU0LCAweDhmNGRlNTBiLAorCTB4Nzg0OGJhZjAsIDB4M2MyNWRiNmEsIDB4OTEzZTBkZjcsIDB4OTdjNWY2ODEsIDB4MDdjNWQ4M2QsIDB4YWY3ZWMxZWMsCisJMHhkYzdiMTYzNywgMHhmNWZjNzI2MywgMHhkZWE3N2RiZiwgMHg1ZWYzMGVlNiwgMHhhY2ZmMTg4YiwgMHhkYTEyNzg3MywKKwkweGQ2YzZjNTdkLCAweGUxZjljMmNiLCAweDBiNTMzOWU0LCAweDU3Y2UzN2E3LCAweDdmYjhlMzQ2LCAweDFmMWE2NzM5LAorCTB4ZWRkYjVkNmUsIDB4M2ZlNjlmYmEsIDB4MGFhYjA3ZDgsIDB4ZjQ0YjBiYjAsIDB4ZGNlZDM3OWUsIDB4MzI2YWIwNWYsCisJMHgzZjJlNmJkNCwgMHhkOWNlOGUzYiwgMHhkYzg0NWU5MiwgMHhkYjc5OGFiYiwgMHhmNGI1N2Y5MCwgMHhiZWZkZjEyMSwKKwkweDRiMmE1YmM0LCAweDY5M2RiYzQ1LCAweDExYmE3MDc3LCAweDQzZjkyMGZjLCAweDM5NmQ0NzBiLCAweGUxM2NjOGMxLAorCTB4NzVjZjAzY2UsIDB4Nzk5MjM1YzMsIDB4YmVkZTFlNDEsIDB4ZmU3YTQwYzEsIDB4NGUxZmYzY2QsIDB4M2Y3YTAzY2QsCisJMHg1YjYwZDZiNiwgMHg1YWNlNTMwYSwgMHg1MWVkM2JiNywgMHgzNjBkYTdmNCwgMHgxZmE4MTRkOSwgMHg4NjVlYjQ3MywKKwkweDRlYjk1ZjdjLCAweDFjM2QyMzc1LCAweGUyN2I3YjViLCAweDAwYmYyODc0LCAweDc1ODJhZGZlLCAweDUwMzA2ZTU0LAorCTB4NzcwZGFjZmIsIDB4YzEwOWZiNTAsIDB4MTJlYjk1ZDcsIDB4N2NiY2EzZmEsIDB4NDQ4MWZkYjMsIDB4ZWZhY2UzYzQsCisJMHhmMTFlYmZlZSwgMHhlYjY4YzViMiwgMHhhYWNhMTgzZiwgMHgyNjNkYzUyNiwgMHgzNjczZGUwMCwgMHhiN2Q1MDY0NiwKKwkweGRjMmNkOGU4LCAweDUzMmJjNDg3LCAweDFkY2ZkZDNjLCAweGRjNjMxZWIwLCAweDZiNjNjNDRmLCAweDE4ZDUxZjg4LAorCTB4OTJjY2VkYzcsIDB4OWFlZmIwMjksIDB4YmVjOTY3MjEsIDB4OGEyN2JkZGYsIDB4NjYyYmM5ZjQsIDB4ZDZjOGVjOTUsCisJMHhiN2YzZmZjMSwgMHhmNDVlYTEyYiwgMHgzNjQ5ZGU5ZCwgMHg1OGYzYzA5ZSwgMHhjZTg2Njc4MSwgMHg4YThmYTA0MCwKKwkweDdhMmY1ZTA4LCAweDY4NzY0ZjUxLCAweDc4MjU0NTkxLCAweDFkNWM4MmI3LCAweDY1ZGU0YTQzLCAweDdlZmQwYjFlLAorCTB4NDc1M2RmMjEsIDB4ZmQwZTFlYWQsIDB4MTgxOGM2YzYsIDB4YjQ1ZmExZWEsIDB4YTA2NjI5Y2UsIDB4NGU3OTdmMjcsCisJMHhjMDY3NjlmZiwgMHg5NzMzNDY3ZSwgMHg0MmUyZWQxZSwgMHg1ZjZhMDg2NiwgMHgwYTdkNjUxMSwgMHg0YzE4NWFlZCwKKwkweDI4YjBmYThmLCAweGQ4ZjlmODIyLCAweDgxM2RhZWNiLCAweDViNThjNGY2LCAweGJmYTRiYjcwLCAweGJmYTAzODljLAorCTB4YjFiOTdlZmUsIDB4OGZlN2NmN2IsIDB4NTY3ZDgwNGMsIDB4OWVjOTUzZWMsIDB4ZGU1YzkwYmUsIDB4NDFjYWZiOGYsCisJMHhkYTUxYmY3YywgMHgyOWJkZWYwNCwgMHhmOWU2ZjNhMCwgMHg5MDUyY2I2MywgMHg4NjE0MGFiZSwgMHhlNzYzYWU3ZSwKKwkweDVjZTVmM2MzLCAweDAxOGM5ZjQxLCAweGYxZjlmYjllLCAweGJiMzlkMTNjLCAweDdmNmM4ZWJiLCAweGVlYmNjMTVkLAorCTB4ZTJmZmFlM2EsIDB4Y2IwZmQ5ZTUsIDB4ZjczYjRlYWIsIDB4ODdmNTY4NmYsIDB4NTNmZTdmOTYsIDB4ZjA3OGEzZmEsCisJMHgwYjVlMTlhYiwgMHhlNTg1ZmY5NSwgMHhmZTVjMmRjOSwgMHg1Njg1ZTU2YSwgMHg2OTc1Yzg1ZiwgMHg0ZTdkNWJkNywKKwkweGNmMTNkMjBkLCAweGQ3ZTI3OTA5LCAweGZlN2E0NjE3LCAweDZiOGY5ZTMzLCAweDllODQ4NmUyLCAweDIxOWVjMThmLAorCTB4ZWE4Nzc5NzgsIDB4NzYwZTVjZTksIDB4NmZkOGVkZDcsIDB4NTcxMWQ5ODAsIDB4NjY1YTRiMDgsIDB4Yjk0NjhhY2IsCisJMHhkY2YxNjRkNiwgMHg5N2UwMTcxOSwgMHhhOGQ0ZGZlYSwgMHhlZGQxZjk0MywgMHhmYjA0MzFhZiwgMHhmNWY5ZTQ2ZCwKKwkweGZmYmUzODllLCAweDg3NWUzOGYyLCAweGZiOWQyYmYzLCAweDkyNzk0NDM3LCAweDJmNmYzOGY1LCAweDdlMzAzM2EzLAorCTB4ODVmYmNiMjUsIDB4YWY3NjkwZmMsIDB4OWRhNTc3YjQsIDB4N2Q1OWVkMmIsIDB4YjM2N2I3MDMsIDB4N2U0MWRkNjMsCisJMHg1ZmFmZDYzMywgMHhlZDE4M2Y5MCwgMHhlZjczZTQ3NCwgMHhlN2RhMjhhZSwgMHgxMDdiOGE2NywgMHg3MzE1NjlmMiwKKwkweGEwMTcxNDNkLCAweDdjMGRlYjA3LCAweGJjZjVkYWZkLCAweDEzZWMyNzE2LCAweDQxM2IyNmU2LCAweDFkMWNjZmI2LAorCTB4OGQ2ZjllNWUsIDB4YzJmZjUzZDMsIDB4NDBjYTZmYzcsIDB4YjZiM2VlM2IsIDB4Y2U1MDMzOWIsIDB4ZmZmMWE2N2UsCisJMHgwZjBmYzRmNiwgMHg1MDdkN2UwYiwgMHhlMTU4OTNlOCwgMHhmOTA4NzgyNywgMHhlZGMwZWEwOCwgMHhmZWYwMmRhZSwKKwkweGUyNmVjNThhLCAweGJlMmVkZmFiLCAweDE3NDdjYTkxLCAweDhmZTdhNDJmLCAweGZjZDI2NWM1LCAweGRjNzdjMmI2LAorCTB4MjNhNzAwZDksIDB4MTdkMjU1MmIsIDB4M2VlZThkMzMsIDB4OTFkZWYwYjEsIDB4MWJmOTFkMDgsIDB4Yzc5OWQ3MGUsCisJMHgzYjYzMzM2ZiwgMHhjY2U1ZjNhMywgMHhmMjZjMjdjNywgMHgxZjAxZjgwNiwgMHhlOTBjN2RjMywgMHgwOWFmOWY3OSwKKwkweDlkMmE1ZWJjLCAweDJiNGViMzU2LCAweDdhNmVhZGVhLCAweGI3YTIxMDNkLCAweGE3MmYxMWRiLCAweGY2MjI2NzU5LAorCTB4ZmEzYTU1YWIsIDB4ZjNhMTI5MzQsIDB4YWY1Y2M4M2YsIDB4MjM2NmJmNjEsIDB4ZDM3YzhmZWIsIDB4OTJmNWM1MWMsCisJMHgwMjliZGZiNiwgMHg5ZWQwYWI3ZiwgMHhkNDMzZjI4NSwgMHhjY2U0NjE1ZiwgMHg3YjVlODIzYiwgMHhjNGVmNWQ1YiwKKwkweDkzMzNiYzkxLCAweDU2ZWI0ZWRkLCAweDNlZjQ0ZTI5LCAweGI0ZTcwN2NlLCAweGM2MzlmMTBmLCAweDk3NWZkMDg5LAorCTB4Yzc3NWI1NmQsIDB4Yzc3OWY4NTUsIDB4MTg1YzcxZmQsIDB4ZmU0ZjVjN2YsIDB4ZWUzYWVkMWYsIDB4ZDU3MGU3ODksCisJMHgyOTY0ODVmYSwgMHhjNGM3NDJmZCwgMHhkOWM1MTY3ZSwgMHhlODQ0ZmM4MiwgMHgwZmU3MGYwZiwgMHg0OGRlM2FiYSwKKwkweGQ1MTBkYmZiLCAweGE4YjhjNWU5LCAweDNlN2U2NmY3LCAweDU1ZTUxYTRmLCAweDVhOTVkZmQwLCAweGZlODg1OGRjLAorCTB4NzFjNjdmYjAsIDB4YmM3ZGE2M2YsIDB4ZjFjZjE5MjcsIDB4NGU4ZDkyYmQsIDB4MmM1Y2UzZjQsIDB4NzY2ODBlM2YsCisJMHg0NzgxMzhmMSwgMHhkMzU4ZWI0NywgMHgwM2VjOGRlMSwgMHhmMGVjNGFlYiwgMHgzNGExMWExNCwgMHhmOGQyMjZjNCwKKwkweDA5NmVhYzQ5LCAweDExZmEwZGUyLCAweGEzZGJmMjMwLCAweDc0M2M4YTdjLCAweDIxM2M5NzQzLCAweDkxYTU2MTQ3LAorCTB4YWRkYjc3YzgsIDB4YmMzYzUzMWUsIDB4NWQ0Njc0MzcsIDB4NTNlZGZhM2QsIDB4ZTIzYzc4YWIsIDB4NmRlOWUyODQsCisJMHgxYjhkMGVjZiwgMHg1ZTM5MzJjYiwgMHhiYjg4YWZmMCwgMHhkMDM0NmZlNiwgMHgzZTM3ZjJiYSwgMHhmY2QxZjE0NiwKKwkweDk1ZWI1NzhkLCAweDFmOTQzOTAwLCAweDI3ZmVhMDZmLCAweDliZDM5ZDVlLCAweDg1MWYxOGZjLCAweDg4MGViZjhmLAorCTB4NDY2MmY0ZTcsIDB4OGExMGUxMWYsIDB4YmZhNTg2ODcsIDB4MzEzZmYxN2UsIDB4ZjYwOWRjYWUsIDB4ZWYzY2IwNTAsCisJMHgyMDI0M2YxNywgMHgwY2ZhYTE2ZiwgMHgzYzdkNzNjOSwgMHhjMDdmMjNkNywgMHhkMzU4MDU3YywgMHg3Y2M4NjYxZiwKKwkweDhmZTQwZDg1LCAweGJlNmM2YWRkLCAweGRlNTFlMzA2LCAweGJjNDMxZDFhLCAweDJiZjllZmI3LCAweGNkNjc2YmM1LAorCTB4YjZiYzUwNzAsIDB4Y2Y3ZGZkZmIsIDB4M2ZmNmM3MmMsIDB4MTE4MzYyY2MsIDB4ODdiZTI5ZmUsIDB4N2NjZmY0MTUsCisJMHhjOWUzYzkxYiwgMHhiMTMyNmVkZiwgMHhkOWE1YjAyNSwgMHgzYzUzMzc2ZiwgMHg4ZTk1NGQ3OCwgMHhlZWQxN2NhMSwKKwkweGU4MzI2NjFiLCAweGEwZGI1Yzc4LCAweDQ3ZjhlMDJiLCAweDBlZjEyODM5LCAweDdjNDQ2NDA0LCAweGZjMjFiYzQ4LAorCTB4NmUzMTk4YjYsIDB4NWZhZDAyZmMsIDB4N2U4MGNiYWUsIDB4YzdkYzA0ZjAsIDB4NGU5MDZiOTYsIDB4MTVkOTU1N2EsCisJMHg3NWM4MTdmNCwgMHg0YzlmNDg1ZCwgMHhmYTY5ZmY4YSwgMHhjM2Q0NjdlNCwgMHg5YzVmYzViNywgMHg3NDgxOWUxZSwKKwkweDVhYzNkNWFlLCAweDcxNjRkYmZkLCAweDBiYmY2MjU1LCAweDQyMTNlMWU5LCAweGQ3ODk0ZGZlLCAweDdlMzA0M2M0LAorCTB4Yzc2ZjA2MTYsIDB4ZjAwYzFjODQsIDB4ZmYxOWRmOGYsIDB4MWZlM2ZjMjMsIDB4ZTMwOTFjYTEsIDB4YzhjNjdmMWYsCisJMHg5ZGEzNmZlNSwgMHgwYzI5MzZkZCwgMHhlNjI3YmNiZiwgMHgzMmVlYWRkNywgMHg2ZjhjZmVhMiwgMHhiM2NhYzI1MSwKKwkweGM2NTFhYjZjLCAweGZhZTA1NzEzLCAweDJiNDRmYzY0LCAweGI3YzBjMzhmLCAweGRlNWZmYjExLCAweDdiMGJiYWQ0LAorCTB4MTY1ZWM2ZTUsIDB4MTVkYmU2OGQsIDB4MzdiOWMzZGYsIDB4MDQ2YjNjY2MsIDB4MzAxNjNiOWYsIDB4ZWEzYWEzOGEsCisJMHhhODJiYzkxOCwgMHhiMDkzYjhmYiwgMHgwMDIzZjI5NSwgMHhiOGUwNGYxZiwgMHg5ZDYzOGExNywgMHgxZDkyMTViNiwKKwkweDg2NTZlMzI0LCAweGY4ZjNlMGQ4LCAweGNmZDk3ODllLCAweDZmYzQ0N2Y1LCAweGUyN2EwZjdhLCAweGIwNWQ2MjRmLAorCTB4NWZiMDY3ZmYsIDB4MTQxNjAyZmMsIDB4OTk3MTkxOWYsIDB4NjJhZjNhZjgsIDB4YzQ3NTQ3Y2MsIDB4M2JkYWRmYzgsCisJMHhmMzA0YjNjZSwgMHgzMzg2YmEzZiwgMHg4ZjUwNTNlNywgMHhhMjE1YjUyOSwgMHg3MmNmYjUzYywgMHg2NmZjNjFiNiwKKwkweDlmZWUyOWY5LCAweGY5OGYzZTVmLCAweDc5MDEyYTk2LCAweGNhMmM5ZTA1LCAweDA1YmM0MjAzLCAweDBhNzYwN2ZhLAorCTB4YWM1M2I2ZjksIDB4NWZlNGY0MWIsIDB4NWFiYWY5ZTMsIDB4YTRmNDAzZTIsIDB4NzU2ZTg3YzQsIDB4ZWQ3ODRhYWIsCisJMHgwMmE3YWYwYSwgMHg0M2ZlZGFmMCwgMHhmOTE5ZmQ3OCwgMHhlNDhiOWRmMiwgMHg4NTJmMGZjYiwgMHg5MTcxZmU2ZSwKKwkweDhjNGJmMzc0LCAweDNiMDkwYzZmLCAweDU3ODg2N2RmLCAweDY3NDA3Y2VkLCAweGJlZjg4MzQ3LCAweDc4ZGIzYTA3LAorCTB4ZjlkMmYxODksIDB4YTdhODlmZTYsIDB4NWRmYWUxNDIsIDB4NWMyODQyN2MsIDB4ZmFlYjE2NTcsIDB4NTE2NmJjOTEsCisJMHhkNTdhNzBjZSwgMHg0ZmZlNjA5NiwgMHgxMmQ4OTFlNywgMHgxZTdhNWM4NiwgMHgzYjdiZmFjOSwgMHgxOTY3ODg4ZCwKKwkweGQ1ZWI5MTA3LCAweGY2Yzg4ZmU2LCAweDBmMjUxNjlhLCAweGJiODU5ZmNmLCAweGUwMzlkM2NmLCAweGU4YmZkYjc0LAorCTB4MDc5YTEwMWMsIDB4MGY5ZGU3YzIsIDB4MzlmYzhkZTQsIDB4ZGNkMDFkNTYsIDB4YTY3N2ZjMGEsIDB4NzUyNzQ4YzksCisJMHgzNzdlMzk5NSwgMHg3YmY3ZmQwYSwgMHhhMGU3Y2MwZCwgMHhmZmQ4MTFmZSwgMHg1ZmZiYzYwYSwgMHgwM2JjYjRkMSwKKwkweDMwNTc1N2ZkLCAweDQ3OWM1N2JkLCAweDFkYjllZjk1LCAweDdjN2M4MzE1LCAweGYyOTU1ZWM1LCAweGZlNjZkOGJmLAorCTB4MmM0NThlYmMsIDB4NGM3NGZmNDEsIDB4MDIzOThlODEsIDB4OGFlYjE5ZTAsIDB4NzgwMDhlNjIsIDB4MDdiNzhkYzYsCisJMHg3OTM5ZTVkNSwgMHhjMTM3OThhZSwgMHhmZGU4MmJkZCwgMHg4MmIzMWJhNCwgMHhhZTc4YTdmYSwgMHgzYTllN2EwOCwKKwkweDllYTgzNzJiLCAweGE4MjIzNzVlLCAweGEzODVlZjdmLCAweGRlOTllYTgzLCAweDY3ZmE4MzZiLCAweGFhMGU0YzM3LAorCTB4MWNkZTM0ZTcsIDB4YWIxOGZmZDQsIDB4ZWMxNDdjN2IsIDB4NWJmYTNmYjMsIDB4ZWJjYzNmMDAsIDB4ZDYwY2I4ZWEsCisJMHhiN2FjNDMzYiwgMHhhMGYyOWFlZiwgMHg1YWZkODFmNywgMHg1MzM4MWUzMSwgMHhjZjE3Yzk5MCwgMHgwMGFiZGY4ZCwKKwkweGZmMDg2NzFjLCAweDM5YmVlNWNlLCAweDU1Y2ZlMzQxLCAweDY3N2U4OGFiLCAweDA0OGUxYTM2LCAweGFjZjQ2OWZhLAorCTB4YzAyYTRmNmIsIDB4MzhhN2M2YjksIDB4Yjk1ZWExNWIsIDB4ZWNmOWY4MjYsIDB4YmRlODFiMWQsIDB4ZjZlMGJlZDksCisJMHhlYjgzOWJiOSwgMHhkMjljZGU4MywgMHhiOTAxZTc5ZiwgMHg0NjcyYmYyOSwgMHg4N2RmYjA0MiwgMHg5OTg5ZDA4NSwKKwkweGI1OTlmNGU0LCAweDdhYTVmZmRjLCAweDI0ZTg2YWZiLCAweDI3ZWM1ZjE4LCAweGQwNDM4ZGQyLCAweDk4MzkyOThkLAorCTB4YzExZDIyNmUsIDB4ZmFmOTUzNzQsIDB4MDcwOGExZDYsIDB4ZmJhM2ZjMmQsIDB4MGJjOWU4NjksIDB4ZmUwMDdlZmYsCisJMHg3ZDMwNjcxNiwgMHhmYjRlZTE2OSwgMHhlYzU2NzU4MywgMHg5NWVmZDg1MCwgMHg2YWNmYjg1MCwgMHgyYTc5Nzg3OSwKKwkweDYzM2I4NTBiLCAweDFmZDcyMzNlLCAweDY4OGZlZGMxLCAweGQ5ODFmZGUwLCAweDg5Y2ExOGYzLCAweGE4MTYzYmIzLAorCTB4ZTM2Mzg3MTgsIDB4ZWNmZjNjNzksIDB4ZWQwN2FmOGUsIDB4MmY4OTg0NzMsIDB4OTdjNDg0ZTUsIDB4ZjgwNDI1ZDYsCisJMHhlOTdjNjQ3ZiwgMHhhZjE5YzYzNCwgMHg2NzExMTc2NCwgMHg4NDRmZmRkYywgMHg4ZjAwYzgwNywgMHgwYjExZjMwMSwKKwkweDcxZGQxMTljLCAweDNjN2Y0OGM1LCAweDY1M2YyYjQ5LCAweGI5ZTNmYTA5LCAweGZlMmJkMjA0LCAweGJjM2Q2Yzc4LAorCTB4MDNlNjM0M2QsIDB4YzY1M2FlMzcsIDB4OGViZTY0ZTUsIDB4OTMwYTJiY2MsIDB4ODQ5N2ZjOWYsIDB4YjQwZmNjMDQsCisJMHg3NWY5ZTM0NywgMHgzYTdjZmI0YiwgMHgyMmJjYzk3NywgMHhjMzAyZjIyNiwgMHg0ZmE0ZmZkOCwgMHgxNGQ3ZjE5YSwKKwkweDI2NzYwYmIyLCAweDBhZmViZDcwLCAweDE3NmRkNzhlLCAweGE5MmZiYzg4LCAweDQ3MWE3YmQ3LCAweDJhN2FkZmM2LAorCTB4YzUyYTVkOTUsIDB4Mjg5NGJiMTMsIDB4ZjQ2MTUzZTcsIDB4M2YwOTQ3Y2EsIDB4ZTY4NWJmNTEsIDB4YTgxNDdmOGYsCisJMHgzOGVlNmE0NywgMHgwYmY1MDdiYiwgMHg2YzYzZmRjMCwgMHg2ZjQwNThiNywgMHhmZGJkN2UyYiwgMHhkMTJiNjhiYiwKKwkweGFhZWJkNzZiLCAweDljMzQyZmFmLCAweGQ4YzQ3MDg5LCAweDIyMmQ4ZTAxLCAweGU0NDVhZmRmLCAweGQ2ZjVjOWZiLAorCTB4ZjRiYWE0NDUsIDB4OWMxZWQ4NzksIDB4OGFlMzI3ZmYsIDB4YzI4ZGZkZGEsIDB4M2FmZTcxZmUsIDB4OTc2NDE3YmMsCisJMHg3NmU1Y2YyYywgMHg4NzAxNjlkYiwgMHgyNzZlMTYwZCwgMHg5ZGI5MTMxOCwgMHgxZjM5YWI1MCwgMHhmYjcwMzZkNSwKKwkweGFjZDdhNDBjLCAweDhjNzE4MDk2LCAweGRmZWExNjg5LCAweDRjNjg1Y2RmLCAweGRmODQ3MWM0LCAweDQyYTY3OTY1LAorCTB4NDU3MmM1NzYsIDB4NzdlNDdiMjEsIDB4ZmNmNGQxYjYsIDB4ODY4NTA5Y2YsIDB4NmZmZmU4NDQsIDB4NjAxMWFmMzEsCisJMHgxNjYzNjU4OCwgMHg5MzQzOGY1ZiwgMHhlODkyZmUxNywgMHg2OGMyNTJmZiwgMHgzNjg5OGQyYSwgMHg1ZGI2N2ZlMSwKKwkweDZhOTFmNDgxLCAweDVkYTkxOTc2LCAweDhhYTcxZjBkLCAweDFhZmJlNDRlLCAweGI0NjRmMjI5LCAweDQyNzE4MDcxLAorCTB4ZGZkZmEyNmUsIDB4ZTJkMmVkYzQsIDB4ZmU0MTg5YjEsIDB4ZjE4Y2Y3ZmUsIDB4ZDBhZmRmYzIsIDB4NTM5NDJlZWIsCisJMHhlZjc4MTRiZiwgMHhlYWVmZmZjOSwgMHhmMTQ3NmI2NywgMHhhZmZmZjVhZCwgMHg3ZmZlZTQ4YywgMHhmMTA4MWYxOSwKKwkweDg1YzczYmZmLCAweDFlMjNmZmY1LCAweGZlN2VlZGEyLCAweDJkZDg5M2U5LCAweDNlNTBkMjlmLCAweGVhN2EzMGVkLAorCTB4YjVkNWZjZjEsIDB4Njg3OGVjMWQsIDB4YTRlYmU3ZWUsIDB4N2RjMGMwYjgsIDB4NjczYzRlZDksIDB4YmI2NGNmMmQsCisJMHg0YjZmNDgyYywgMHg3ZjNiNDMxOCwgMHg2OTZlYTc0NywgMHhlOTVmM2MyNCwgMHgzZTdjMzY2NSwgMHhiZjNmMmQ3YywKKwkweDM4NzFhZTU1LCAweDBlNTI5YjcxLCAweGZkYzg5ZDVjLCAweDFmMzgwNjg3LCAweGJkZjE3MjViLCAweDI3MTg2ZGM5LAorCTB4ZDk5NTM5NTgsIDB4YjIzNTBkNTEsIDB4ZGEyYjIyYzYsIDB4ZDg1OTZiNDUsIDB4NDE2OGUzZjMsIDB4NzcwYTEzNGYsCisJMHg0Mjc2ZmU1MSwgMHgwZmI3Y2YxNywgMHg3NjkzYTdlZCwgMHg3M2UyMjE3ZSwgMHgyY2U3OTc1OCwgMHg3OTcxY2Y4ZiwKKwkweGNmMTEyMjQyLCAweDVmM2FlZGE5LCAweGIyN2Q3M2I4LCAweGE0NmFlOGFkLCAweGYwYmU4MWFmLCAweGMyOTE4OGU3LAorCTB4YmIzMmU2NGYsIDB4MDNmOGUyMjcsIDB4ZDg3Y2YxYjcsIDB4Njc3ZjI5NGEsIDB4ZjAxZTk4ZTgsIDB4NzVlMDQ1M2UsCisJMHhkNzllNWFjYSwgMHhmZjdmY2VjMSwgMHg0NWVkMmFiZCwgMHg5NDMzZTM0NiwgMHgyZDUzOTUyYiwgMHg1NTEzZjQzZSwKKwkweDY5N2E2NGI2LCAweDk5YzU2ZTVkLCAweGU1YTJmMjgzLCAweDJiZDYzNzZkLCAweGU4NmRmM2YzLCAweDlkZmQ3MDk3LAorCTB4OTFmYjQ3MjksIDB4ZmNiOGM5YTksIDB4NTJhM2IzZDIsIDB4OGYxZTkwOWUsIDB4NjRkNDM4YTcsIDB4ZjEyMzZmNDEsCisJMHg3MjQwOWNiMCwgMHhjMDM0NjU3ZSwgMHg5MmVkNzJiYiwgMHhmM2Q3OTg1ZCwgMHhjNTE5MWZmZSwgMHg1ZGE4MGU5YiwKKwkweDVmYjA3MTQzLCAweGU2MTY3MDAxLCAweGE1NjdhOTYyLCAweGE2NDhiN2U0LCAweDcxOGFhNjcxLCAweDc5ODJmZmJjLAorCTB4ZmVmM2ZjMjMsIDB4ZGE3NWU1YWEsIDB4ZjMwMzAxY2YsIDB4OWQxZDAwNDYsIDB4MDM4Mzc5ZGUsIDB4MDllNWVlZWQsCisJMHg5M2NmZTQxMSwgMHhhYTgzZGE3MSwgMHg0MjUyM2VlNywgMHg1YzFhYWVmYSwgMHhkMTJkNGRkYSwgMHg5YzgzZjQzNiwKKwkweDNhNjFmOWRlLCAweGI5M2U0ZGM2LCAweGVkMDVhY2U3LCAweGJiZTg3ZmQ4LCAweDdjMmY5ODJjLCAweDE2YmJkMTdjLAorCTB4OTNmMWMwMTcsIDB4OWRlNTJhNDUsIDB4ODZmNDJhZGQsIDB4ODk3ZGZiODQsIDB4MjcxZmVlMWMsIDB4ZGMyMTE3YmEsCisJMHhkZGZjNWI2ZiwgMHgyYTNjYzBkMCwgMHhlODgxMzBiNiwgMHhhNTRmYjY3OSwgMHg5Y2I3NWM5MCwgMHgxNjhkMWNkZCwKKwkweGJhYmQ3NzRhLCAweDJlYTgyZTM5LCAweDg5YjU0MGY1LCAweGJmM2I4NWQ1LCAweDY5ZTgyNGJjLCAweDYzMDZkMzc2LAorCTB4ZjdlNzAzYWEsIDB4MzhmYTQyYWMsIDB4NzQ3NGU3YWUsIDB4ZTdjNTliN2MsIDB4YTdhZmY0Y2QsIDB4MTFiMDY5YmMsCisJMHhiNDdmODNlZCwgMHhlYTJiNTg5OCwgMHg4MTg3N2QzMywgMHg4YWJiNDllNywgMHg4ZjBiYTAxNSwgMHg5ZDc2YmZjMCwKKwkweGE2OGU1ZTdiLCAweGM2M2U2NmYxLCAweGNjMTk0N2U1LCAweGViZTAxMGI1LCAweDcyNGQ5OTY5LCAweDk5OGZiYjQxLAorCTB4MjVjNjM4OWYsIDB4YWU2NzVjMDEsIDB4ZTNmYTE4NTAsIDB4YzAyMmZmYjAsIDB4ZmRlMTY3OWYsIDB4YTVmZGExNWYsCisJMHgzNzk5NjdkZCwgMHhmOTQ4MGU1OCwgMHgzY2YwMjk1NSwgMHg3OWY4MjFiZCwgMHg2OTZmY2I2NSwgMHg0M2NjMTk5YywKKwkweDI3NjAyMDc5LCAweDczNWY5ZTY5LCAweGQ4MGFmNTBjLCAweDY3ZWQ0MTQ3LCAweDUxOWI2NmY2LCAweDE0NDk2ZjhmLAorCTB4NmNhMWVkZjEsIDB4ZmVmMGY3ZDgsIDB4MThlYzg4YWUsIDB4OTI3ZTE4NGYsIDB4MzZjNWM5ZTUsIDB4MTdjZmQ2MjIsCisJMHg3Yzc5NTA0NywgMHg1MTcyYTMzMSwgMHhhYWUzYTcyMiwgMHg0NGVmYjc5NiwgMHhjNzY2YTk3YiwgMHg3MzhlMjMxNiwKKwkweDk2ODFmMWM5LCAweDk5OWJkNjEzLCAweGU4OTZlZjVmLCAweDFlMjFhZjNkLCAweDI4MjUyY2Q5LCAweGUxYjM1MDRlLAorCTB4MzJlYzkxYWMsIDB4ZDE1MjlmMDEsIDB4MDBmMDhhNWUsIDB4MWNjMmRjM2MsIDB4NTAzY2YxYWIsIDB4YzdmMDY1NWEsCisJMHg1YmZmZTBlOSwgMHg2MGMzYmY3MiwgMHhkMWRhODBiZiwgMHhiNTE3Mzk5MSwgMHhiOTRmYjk1ZiwgMHg1YWJjZjk2ZiwKKwkweGYzMGM3YTA1LCAweDQ1ODNlNGJlLCAweGQ4Y2QxZjQyLCAweDJmNzk2OTM4LCAweGNlZmQ1MTAwLCAweGZjOWQxOTYzLAorCTB4NzhmNjQ5YmMsIDB4NTE2YmMwOTEsIDB4OGY2NGZkYzQsIDB4ZTNkODg1MTcsIDB4YjdkYzNkZWMsIDB4ZTY0YWM3YTQsCisJMHhhNWEyM2QyNCwgMHhjYzA3NDkzYiwgMHgyM2Y3YTA2YywgMHg0ZGRlYmQ4NCwgMHgxMjBmMmQ2ZiwgMHhjYzNkMjQ1YywKKwkweGU0Njg1ZDVjLCAweGM4Yzc5YmU2LCAweGIyNmY0YWVkLCAweGEzMjZkN2YwLCAweDMwZTgxNmJmLCAweGJhMDYzZWM4LAorCTB4ZWQ2YmFhMGIsIDB4OWQwZDJmZjEsIDB4YjQxZjI4MTksIDB4ZTdjY2I4NzYsIDB4NjBlN2MyZDQsIDB4OWE1ZmNmMjIsCisJMHhiMzhkNzBlMSwgMHg4MDczYzAwZCwgMHg4NWY5Mzk3YiwgMHgxMGNhNDZmMSwgMHgzZGM2ZGJlNCwgMHg2ZWRmMjM3NywKKwkweDBmZjM3Y2U0LCAweDkyYjMwZjQxLCAweGYwNDkxMTNjLCAweDlhZjRiM2RjLCAweGU3N2ZjNDFhLCAweGYyMDY1MzEyLAorCTB4OGE2OTY3YjMsIDB4M2RmZDBmMWEsIDB4YzM5MjE0YWIsIDB4MThhNjk3YTMsIDB4OTdkM2NlMTEsIDB4N2M4NzFlMGQsCisJMHgzNDVjY2I5ZCwgMHgxNjM4YjRmZSwgMHg5YzE4NmVkNiwgMHg3OTQ3ZTVjNCwgMHg2MzE5ODE5ZCwgMHhmNDQ2MjkwOCwKKwkweDUwNmE5ZjBiLCAweDlhOGMyZmM4LCAweDZiZTAyMjY0LCAweGY1NTdjMDk2LCAweGE0YWRiNzhhLCAweDZmZjAxY2FmLAorCTB4ZTAxZjVlMjgsIDB4MmFlYWIzM2YsIDB4ZWU3MDFmMDksIDB4NTJjN2NiMDgsIDB4NjZiMTU0YWYsIDB4M2I4YzBhNjMsCisJMHhkMTFiNjU2NywgMHg4MjQ3OWMzMSwgMHg5NWIyZDdmYSwgMHg2NmVhYWY4NCwgMHhkNWRkN2I0ZCwgMHhiOWQ4M2Y4NCwKKwkweGI1ODljZjExLCAweGY3OWY4MjNiLCAweDgyNzYxMjRmLCAweGJlOTEzOTkzLCAweDIyNWE3NzNkLCAweGI0NzFhZjMwLAorCTB4NGFkOTRmODAsIDB4NmI3Mjg2YzUsIDB4ODRiNmIyZmEsIDB4N2QzZWEwMWIsIDB4ZWQ4NGVhYWYsIDB4ODU4N2MzNzQsCisJMHgxZjI4MjNmYSwgMHgxY2RlY2NlZCwgMHg3MTljNTdmMiwgMHg5ZmIwOTIzOCwgMHg1MmVkY2FjNywgMHg4NjE5ZWY0NSwKKwkweDNjZTJkM2VkLCAweGQ4Y2ZkMGMzLCAweDYxODU5MWY1LCAweDczYTFkZjdlLCAweDExZTQ3MzJhLCAweGZjYTIwZjk1LAorCTB4MzQxYjFiMmEsIDB4MmZiZWMwMjksIDB4MzExMmQ4MzMsIDB4ZjM2NWU5MWUsIDB4YjgzZGM1OTMsIDB4ZDRmODQwODgsCisJMHg3ZTI0YWM0NiwgMHg4ODdlNDVhOCwgMHgzNGMzZjNmMCwgMHhkZGExN2I4YywgMHg3OTQyYTJmMywgMHgzMDQ3NmM4NCwKKwkweDM0NzA5ZmJkLCAweDkwOTFjMjI2LCAweDkwMzNlZmI5LCAweDhhNmYyZTljLCAweGY5NzFmM2E1LCAweGVhMjMyMmIyLAorCTB4YjE2ZGYyZDUsIDB4ZjljMTFmNjQsIDB4ODZjYmJkZjQsIDB4Njg3OWYxZmEsIDB4NjQ5ZWRlNTksIDB4MzliY2I3MTgsCisJMHhlMzA2YTlkMywgMHgxOWRjZjQzMSwgMHgwZDM5Y2ViMCwgMHg4ZWZlMjQ4NywgMHgyM2JmODBmNCwgMHg3ODA3ZjBlMSwKKwkweDRmMmY2YTBiLCAweGUwNDk3MjEyLCAweDIzOGEyZDhkLCAweGVmM2E1YWJkLCAweDU4MDg5Y2Q1LCAweDQ4YmE5OWQ3LAorCTB4ZTllYzkzY2EsIDB4OGM2NmM0N2MsIDB4ZTkwM2ZjYTAsIDB4YWJkZjFhYmYsIDB4Nzk0NGNmZGIsIDB4MGU1NzY3M2UsCisJMHhmMTY5ZmMyMSwgMHhkM2RmZmUzNiwgMHhjYmJkYTE4NywgMHg2ODYxNmVmZSwgMHg2NmNiNGQ2NywgMHhmNjg2NGRiNywKKwkweDZmY2UxNGRiLCAweDE5YWZlYWQzLCAweGRkYzQ3NjhmLCAweGJkOWU1YzQ5LCAweGQ1ZDA3MjA1LCAweDQxYjdiMTk3LAorCTB4MGU0MGJhMGUsIDB4MTFmMjBiYmUsIDB4NGUyZmVmZWIsIDB4OGI4N2ZhYTYsIDB4YjQ3ZTU0MWQsIDB4NDc5NTFmYjgsCisJMHhmMjVmYmY4NCwgMHhkMTAyMTAxZCwgMHgyZTI0OTJlZCwgMHhjOTI0OTcxNywgMHg2NDgyZmFmOCwgMHhmZmM2NjkzNCwKKwkweDNhMjFkZGZiLCAweDZjNjdkZTFiLCAweDlkMzYzMDliLCAweGMxNWNlYmIxLCAweGE5YzZmN2ZhLCAweGQzYjVmYWMxLAorCTB4OGM5NzFiNjAsIDB4MGExNWRiZTcsIDB4ZWVlNWEzZDksIDB4ZTFmZDQxOTEsIDB4N2JjNDY0ZGMsIDB4OWU1ZmFjMmIsCisJMHg4NmY0OWRiZiwgMHhlODE5MzhjMywgMHhiOGUyYTZmMSwgMHgzN2Q3ZmVhMCwgMHg5ZmQ1MDZhNCwgMHhmYWQwNzI0OCwKKwkweDBlY2Y4ZDI2LCAweGI0YjliZjZhLCAweGVjYmQ1MDdmLCAweGE0MzE5MTljLCAweGYxMDE0Nzc3LCAweDY3OTEwMmNmLAorCTB4OGU3NzA3MDQsIDB4ZmJlZjFiMTcsIDB4YTRiMGRkNzUsIDB4NWZiZDYwYmIsIDB4NzNkMDMzZWYsIDB4NWUyNDNlMmQsCisJMHg5OTUxYWM2NywgMHhiZTliYzYwNywgMHgyYzFmZTQwNiwgMHg3NGUzNDhmMSwgMHgwZTJmYWZlMiwgMHhiMjVjZTg1OCwKKwkweDdmNmYyOWJjLCAweDM1MGZkNDAxLCAweGU4MGYyODE5LCAweDU1YjhiMmQwLCAweDZhMWRhZjY4LCAweDI4MzJiMDRhLAorCTB4NjE1NWNiM2QsIDB4MmM4Y2Q4ZDcsIDB4MmQxNWRlNDAsIDB4YTZmOTQyNWIsIDB4OTM5MzNlNjUsIDB4ZWY3Njk3ZWMsCisJMHhjMGVlYjI5MywgMHgxMjJlMmFmMywgMHhkNTNkZTRmOSwgMHhmZTEwYWFkNywgMHg2N2RmMDQ1YywgMHhlMTVlZTkyMiwKKwkweGYxMjdiMDcxLCAweDRlZjRlMTJhLCAweDBhZTNhZWJlLCAweDEzZjU4NjViLCAweGI5ZjcxZjkxLCAweDZhNzFkNjBiLAorCTB4MGU4NTYzNjIsIDB4YmVlYTE1ZmQsIDB4Y2Y5ZjkyMDQsIDB4YjZlOTBjYWIsIDB4ZjI4MTllNzQsIDB4YWZiZjY2MGMsCisJMHg1MzNhYzA2ZSwgMHhiZTM5NTM3MiwgMHg2NmEzY2E1NSwgMHg3YzY4OThjZiwgMHgwMjE0MDVkNiwgMHg2ZDNjMTZmZCwKKwkweGFlMDFlYTdhLCAweGZiN2Q3OGZmLCAweDgyMDNkZjQwLCAweDhlOGU5MTNlLCAweDJjNTczMmM3LCAweGY1YTE1NjJkLAorCTB4YzI3NmZlN2UsIDB4ODdlZTdjMDYsIDB4ZWUxMDZmYTcsIDB4ZmRjMWJkN2IsIDB4ZWZlMDEyNjYsIDB4MjBkZjBhZjMsCisJMHgxMjhiNmY5MiwgMHg3MGI0YWY4OCwgMHhmMmU0NjIzZiwgMHhhMDdjOGJjYiwgMHg5ZmE2ZTVmOCwgMHg3ZTkyOTZjZiwKKwkweDI2NzA2ZTk4LCAweGU1NmU0OTNhLCAweDNhZGNhMGE3LCAweDc2NDBkMmIyLCAweGFjYmJkMzMwLCAweDNlOGY0ODkzLAorCTB4ZTcyYzc0NGYsIDB4OGM3N2EyMzksIDB4NjkxZGY1YzMsIDB4NWY5ODY0YzgsIDB4YTU1MmJlNTEsIDB4MWZkMjBhZjMsCisJMHhlN2UzZWZlZiwgMHgwZjU1ODdkNCwgMHhkYmNjMjRkOCwgMHg1MjU4NzhhMCwgMHgzZWRjZGQyOCwgMHg1ZGU1MTg2ZiwKKwkweDU5NmRlZDZhLCAweGVhYmMwOTdlLCAweGU2NGJiMDA5LCAweDgxNzllNGVjLCAweDNmNTNiZjJjLCAweDNlZTA2MDc1LAorCTB4M2NmOWYxOTYsIDB4NGFmOTQxMDUsIDB4MWRhZjU5NTUsIDB4MmVjOGViMzQsIDB4YzI3M2MxOGMsIDB4YTI1NGY3ODksCisJMHg4ZDU5MTNiMywgMHg5ZjAxOTM0MywgMHg4NmJiNzUyNywgMHgyZmY1MDVkZSwgMHhlYThmN2EyNiwgMHhkYTIyM2VhMSwKKwkweGViODQyZmYzLCAweDBjY2FkZDVjLCAweGZhZjMwYjI1LCAweDA5MWFhZjBmLCAweGFjZmU3ZGVmLCAweDJlNmM0OWMxLAorCTB4Y2YzOWZjZWMsIDB4NDNmZGVlY2MsIDB4MWJkODE1ZjYsIDB4ZTFkZGI4YmQsIDB4Y2ZmYmMxNGEsIDB4MWFjZDFkNzMsCisJMHhjN2MzODA3YiwgMHgwMDIwNDk4MSwgMHgwNTZhZGIxNywgMHg3ODc2Mzc2ZCwgMHgzYzAxZTU4OCwgMHgzMWQ3NGY1NywKKwkweGUwNzllMDRmLCAweGIxZTNjOGIwLCAweGE4NzNmMzI0LCAweDI0YTYxYmI0LCAweDVkMzMzOTczLCAweGJkOWJlOWM3LAorCTB4MDM3YTcwYWMsIDB4MGY1MDJhZmIsIDB4MTczZGI5NDgsIDB4YmY1NWFhZjMsIDB4YmI3MjkwMWUsIDB4ZmU1MjM1OGEsCisJMHhkYjk5MjM4YSwgMHgxZjE1YjMyZiwgMHg5ODM1ZGRkOSwgMHgyYmZkMDI4OSwgMHg1NjY4M2M2YywgMHhmM2U0ZDliNSwKKwkweGI2OThkMjY1LCAweDdhNjBmYjQwLCAweDczMjc5NzMyLCAweDhlM2VjZjhjLCAweDNhYzk1YmU0LCAweGZkMzUzZWY4LAorCTB4MmFmODM3M2UsIDB4ZjU0MzMyM2EsIDB4YzM2ZDg1NGYsIDB4NmY4ZDNiMzIsIDB4Yjc5ZmEyNzAsIDB4NzU2YmYwNTIsCisJMHgyNTZiZTJhMywgMHg1MWViODUzYiwgMHgyOTlkNTdlOSwgMHgzZjU2YThmNCwgMHg4ZDI1ZTg4NSwgMHhkMWE5OWEzZSwKKwkweDU4MzFhY2JiLCAweGU5N2FjMmNmLCAweGFmNWNiMmRlLCAweDY4ZWU5ZDc2LCAweDBlNjFjMTBiLCAweDZmZjUwYmFjLAorCTB4YTdiN2M3ODUsIDB4MzhhZGQ2ODQsIDB4ZWIyMWEzMDEsIDB4MzFlZTY0YTksIDB4NzgwZmI4YjEsIDB4NWQwOGVhZGUsCisJMHgyMTVmNzY5ZiwgMHhkNGZiMTVlYiwgMHhmOWMyYmJhZSwgMHhiYmU2MmI1NSwgMHgwNDI5MzU1NCwgMHgyNDNlZWQyZiwKKwkweDljNzZiNDNlLCAweDk3ODU0YmM0LCAweDQ1YTJiN2MzLCAweGQ2N2U3YzIxLCAweGYyMzIxZjZkLCAweDYxYmE0YjZmLAorCTB4ZTAyZmYwY2QsIDB4YjA0NzQ5N2QsIDB4NmY5NDEyYWYsIDB4MWU0MWFiOTUsIDB4ZDNkMjg2NjcsIDB4NDU2Y2Q2MWMsCisJMHhhZDYxYTliYSwgMHhkZjkwNTNjYiwgMHgxZmFmOWI1YSwgMHhiNTg2N2U4ZSwgMHhhOWY5ZDM2ZiwgMHhhMzlhZGVkNCwKKwkweDdhNTAwNThiLCAweGJmOGU1NzczLCAweDE3ZTc0ZmNhLCAweDVjZmMyNzhhLCAweGU5ZGRjM2YwLCAweGUwMWU5ZmE1LAorCTB4ZWFhMzczMzUsIDB4ZDQxNDFjOGEsIDB4N2EzZmU0NGYsIDB4YmNiMzhlMDksIDB4NjNmYTIzNWUsIDB4ZTUzZjA5NjcsCisJMHhhYjU5ZDY4NSwgMHgyZTVmZjdlNywgMHhjZjAxNWViOCwgMHgwZmRkN2I5ZiwgMHg3NzY0ZjcyNywgMHg3NjE3M2Y4NSwKKwkweDNkMWE1YmRiLCAweGZiODFiMWZmLCAweGZlN2NhNTViLCAweGZmMjJlZjVhLCAweDNiMGJiNDJlLCAweGUzYzZjZWFjLAorCTB4OWViOTFhN2QsIDB4YmQ3MjRmOWUsIDB4Mzk3OWU4NDIsIDB4NWIzNWQxY2YsIDB4MTMzMDVlMjksIDB4ZjY4MDgwZWQsCisJMHhhNTZmNTZjZiwgMHhkOWYxYTU3OCwgMHhjYmI0NTY5OSwgMHhiZTk5YWU4ZiwgMHg4ZjUyZjMwYSwgMHhiZDI3NGQzNiwKKwkweGE5N2JmOTVmLCAweDQwYzYzZGY3LCAweDRkNjhhMjdiLCAweDkwN2JmYWQ5LCAweDUyNDczNzhlLCAweGRkYTJiMTVjLAorCTB4MjA0NWNlMjMsIDB4NjM5ZmExNjcsIDB4NmNhYjk3MGQsIDB4OTViMzk3MzUsIDB4OTAwNzFmYTgsIDB4ZmQ4YmVjN2UsCisJMHhmNGYwYWNlZSwgMHg2ODA4N2U0NSwgMHhlNzc5YmQyNywgMHg3NzlmY2Y3NCwgMHhmZTc3YjhjMiwgMHgyNWU5ZGEyOSwKKwkweDc1NWFkODUwLCAweDVhZGJjZjY0LCAweGNmNTYzZjUxLCAweGRlMjBmMGZmLCAweGUwN2IwMWQzLCAweDdiNGI1ZmZkLAorCTB4MDY0NWFhMDAsIDB4ZWEzMjViNGYsIDB4NTQwNzYxMjEsIDB4NmMzMjFiYWIsIDB4YmQwODM3NjgsIDB4N2Y4MDFmZjEsCisJMHhlN2Y4Nzg0NCwgMHgxMWNiZmMxMiwgMHhkYmYxMDFmZSwgMHg5YzM4MWI0ZiwgMHg3ZmUwNmJhNywgMHhjYmM3MjU3OCwKKwkweDJiNmNhNmYyLCAweDZkM2YyZjllLCAweGViYmIyNmM4LCAweDgyMWNhNmQzLCAweDAwMDc4Y2ZmLCAweDFmNWZkY2ZlLAorCTB4MDAzNTc3NmMsIDB4ODE3Y2YxZmMsIDB4OTZmNTg3ZjAsIDB4ZmMwNDNiYjcsIDB4MGRmZTFjOWQsIDB4MjU2Y2VlMWMsCisJMHhjMDg0NjcyZiwgMHg1N2Y5NGJkOSwgMHhlNGQxZmU3NywgMHg3OGUyM2I0NCwgMHg1N2Q5MmI2NCwgMHhhY2E4YjdjNywKKwkweDkzMmVjMDNlLCAweGFjMzdkMTc2LCAweGRmYjQ0OWYxLCAweGY3NjdmYzI0LCAweGYyODQxOGU5LCAweGQ3ZTFmNGE3LAorCTB4ZDk4Nzg4YWMsIDB4MzE1MDc4NWIsIDB4OTVjY2ZlMDQsIDB4ZWVjN2YxNDQsIDB4YThlZGJiZjksIDB4ZGQ1ZjExNmYsCisJMHhlMjQ1ZDQ3NiwgMHgxOWI5ODZhOSwgMHhkNzk2YzdlOSwgMHg0MjM5ZTAwZSwgMHg0NWJmNzE3MSwgMHhiNjZmYmM4ZCwKKwkweDE5YmVmODIzLCAweGRhOTU5MmU2LCAweDhjZTJjNWQxLCAweGE0ZjVjMDg4LCAweDc5ZDNlZjY5LCAweGJlYmRjNjE4LAorCTB4ZDZlYWY5Y2QsIDB4NWRlN2M0ZjksIDB4MjViOTc5NDEsIDB4ZmU4MGQ1YWMsIDB4ZDBhY2Q2MzYsIDB4MDVlYWVkM2QsCisJMHg4NjQyZDY4NSwgMHg1YTNhYjU3MSwgMHgwOTQ1MzM4NywgMHg1NmFlY2JjYSwgMHg1NjRmNjQ3NSwgMHg0NDdjNDUxOSwKKwkweDg5MjQ1NWU0LCAweGRjMjk0OTdlLCAweDYyOWM5MDJmLCAweDI0NzRmMmEzLCAweGRhNzA3ZDIzLCAweDdkZTFmNDYyLAorCTB4MjU1ZjM4MmEsIDB4OWRkZWZjZTMsIDB4NDFkYmMyMjYsIDB4NWZjMDEzNWMsIDB4MzMzZjBhMzUsIDB4YjdhNDQyYTgsCisJMHhkM2E3MTg1YiwgMHgyOTdiY2M1YiwgMHg5NzI3MDdhZSwgMHhhNzFmYTg3NSwgMHhjOTM5MzQyZCwgMHhhMThmOGRjZSwKKwkweDQyY2RkMmY4LCAweDVlNjJkZGRlLCAweDMxM2Q0NmVlLCAweDYxNzQ2Y2NkLCAweDMxN2FlMzA5LCAweDFhMzBkN2Y5LAorCTB4MGRmOTg3YTYsIDB4ZWY3NDhjYmQsIDB4ZjNhMjM0YjAsIDB4ZGYxMjNjNTksIDB4OGVmODdjOTYsIDB4OTVlYTU4MDgsCisJMHgxZmEzOGU2MCwgMHhmNmRkN2UxOCwgMHg1ZTI4NWM3ZCwgMHhmNjA5ZjhmYywgMHg4NTQ2ZDc0YiwgMHgxNzBjOGJmNywKKwkweDJlNWM1MDcwLCAweDYwOWIzZmYyLCAweGM3NTgyOGVjLCAweDZmMDcxNGE4LCAweDNmYjhkODc3LCAweGM5ZTAyZDdhLAorCTB4YjZhZmM3ZTIsIDB4ZmM3OTc5OWQsIDB4YjFmMzBhYjIsIDB4YmM1OGY3ZjksIDB4NWQ1NDFmMjQsIDB4YzhjYWJkNTAsCisJMHg2Mjc5NGY5ZiwgMHgzNGVhZjE0MywgMHg4ZTYxZGVjNiwgMHgyYWI3ODg4MSwgMHhlZTc4MjE5NCwgMHg2MWYxOGIyZiwKKwkweGY0M2FlZjdjLCAweGQ0YjFkYjg3LCAweGQ2NGNiZDEzLCAweDk3OGVhZjMzLCAweDBlM2I2NjBkLCAweDI1ZTNmZGM3LAorCTB4MmFiZjllMDIsIDB4MDAzMWFkNjAsIDB4ODNkN2Q2ZjcsIDB4YjQzN2YzZmQsIDB4MDJmYjVhZWEsIDB4YjdkM2FmN2MsCisJMHhlYTdkMjFiNiwgMHgxYjA2MWMyMiwgMHhhZjFlZTNjYywgMHhhNTM5ZTJlNCwgMHhhZGM1ZTk2YSwgMHhhNjg5ZTJiNywKKwkweGEwYTNkNWUyLCAweGFjZjllM2FlLCAweGZlZTZiZjVkLCAweDU5ODA1Yjg5LCAweGVhYjc2ZTExLCAweGNiOWFiYjU5LAorCTB4NTJlMTAwZTksIDB4YTk3ODc3NmIsIDB4ZTI4NTNjZGYsIDB4MjAyZTMyMzcsIDB4ODYxODNmZjEsIDB4MmRlM2M0MGYsCisJMHg0ZTMwN2Q2MiwgMHgzN2RmMTU4MywgMHg3Y2Q3Yzc4NiwgMHg4Y2NjMmY4MSwgMHgxNWNmYjg0NiwgMHhmMjU3Mzc3YywKKwkweGJmMzA1MzViLCAweDA0Nzg4MjNkLCAweDJlZDA1NTNlLCAweDIyZGRiODA2LCAweGUyZjg5ZWNhLCAweDQ3NmUxNGExLAorCTB4Y2ZjMjk0M2YsIDB4ZTI1Y2Y3ZWYsIDB4OTVkY2NjN2MsIDB4ODI3OTc5NDEsIDB4N2M0ZGFhNWYsIDB4NzVmZjM5N2MsCisJMHhjNTMwN2NhMiwgMHhmNWNiZTM0ZSwgMHg4YTdlYmQwMCwgMHgwMjQwZThlMywgMHg2OTFlYmQyMCwgMHg2OGZiMjdhYywKKwkweGMzODgwYjE2LCAweDQ5ZmJmYTY1LCAweDc3YWQwZWJhLCAweGY3ZGQxMWNiLCAweDY2YmIxYTU4LCAweDVmOTVlODIwLAorCTB4OGU1MTNhNDQsIDB4Y2U2YzYyZGUsIDB4ZjY4NzMzYTksIDB4NTJlNjcxOTMsIDB4ZWZhMDYxZDYsIDB4OTkzZjQ5MDMsCisJMHg1NTYzM2ZkMCwgMHg5NTM1ZTUzMywgMHhmNDFlZmMyYSwgMHg1NzhiNDJlOSwgMHhjN2UyNzYwNywgMHgwNjdiYmUyMiwKKwkweGE3OWM0NmVjLCAweGZjYTE1NjM0LCAweDc3MzE2OWFmLCAweDk3NWYyMDk2LCAweDJjN2E4ZDVhLCAweGRmZjExNjNmLAorCTB4OGQxNzU5NWIsIDB4MmIyZDg5ZmYsIDB4ZGY4NjA2ZTYsIDB4ZTYzMTUwNGQsIDB4YTRmODBiMDcsIDB4YWRmYjA1ZDgsCisJMHhlYmMzZjk0NywgMHhlNDY5NWQyYiwgMHg0ZmY1MTI4ZCwgMHg2NjVjNjFmNywgMHgwM2EwNzllYSwgMHg3NjJlMWZhYSwKKwkweDVmYTdiY2MxLCAweDkxZDljZjE1LCAweGZhN2U3YzYyLCAweGRlY2Y0MTNlLCAweGU5ZGUzNGUzLCAweDUzZjNlNGM3LAorCTB4ZjkwYWY5ZmMsIDB4N2Y1ZTJiZmMsIDB4ZWEyZjhlNTAsIDB4MmY5ZTZiMGYsIDB4ODI3ZjNjZDEsIDB4Zjg5ZjViZDcsCisJMHhmNjhiZDhhYSwgMHhkYTRlNjhlYiwgMHg5MjE0MjNhNSwgMHgzNzIxNDY1NywgMHgxMmI2OTc0YSwgMHhiYjc1NGI5YywKKwkweGI1OWEzOTc4LCAweGRjMmZmMmVhLCAweGRiOGE2NGVmLCAweGY3ODA5Mjk4LCAweDUwNTg4ZmNlLCAweGQ1MzNmZjBmLAorCTB4N2U4MTRjNjUsIDB4ZmU3OTI2OWYsIDB4NDk5Y2U1ODYsIDB4NzI4OGQ3OGEsIDB4ZTkxZjNkZjcsIDB4ZjIxZTkyODUsCisJMHhhZTQyOGQyNywgMHhhNmU1ZWE5ZiwgMHg4MzFlYTVmNywgMHhmMWMzZGU3MSwgMHhiYjljNzUyZiwgMHhlNGY5Yzc0MywKKwkweDRkNzM4Y2M3LCAweDQ3MzhjODZhLCAweGZlYmVjYzdmLCAweDI0ZTFjYTljLCAweDUxNzY5MWM3LCAweGU5NGJiYTcxLAorCTB4NjYzYWZjODUsIDB4NzBiZjkwNjQsIDB4MThjZWJkZWUsIDB4Y2MzMTRiZjQsIDB4Y2ZkMDAzNzcsIDB4OTE5Y2RhNWQsCisJMHg3ZGNmZTMwNywgMHgwYThjYzVlZSwgMHhiZTg0OWJiNCwgMHgzMmE3MzlhZiwgMHhkYWEzYzgxNywgMHg1Zjk1MGE3MywKKwkweGM0NjQ3ZGI0LCAweGRiMzViMzdiLCAweGEwZTM4Y2RhLCAweDQ1OTQyZDVmLCAweDEyYWFlYjAxLCAweGE3N2QwNGViLAorCTB4YTdhMDFjOWYsIDB4NDI3NGJkOGQsIDB4ZjNjYzNjNmUsIDB4YTEzYjllMzIsIDB4ZDVjZTdjNDcsIDB4M2RmZDFmMzUsCisJMHg0YTExZWZlYSwgMHg5N2YyZjhkOCwgMHg3YjA3N2Y2MiwgMHhlZTYxMWZiOCwgMHg2MTUxZTVjNSwgMHhlZTM0NTc2ZiwKKwkweDM5MDYxNGYzLCAweGZhYTJmYzYwLCAweGJmMDJmOWYwLCAweDE1MjhlYjEyLCAweDUwZmE2ZmZhLCAweGUwMDM4NDRiLAorCTB4MWUzZGU0M2MsIDB4OWI1OGFmNWYsIDB4NjJmZThiOTksIDB4MDRlOGYyNjMsIDB4N2U4ZjViODIsIDB4NjdlZTJlZDYsCisJMHhkNjdlZTE2ZCwgMHgwMmM3N2I1MiwgMHhiYjk5NGVmYywgMHhmODgzZWM1NywgMHhiZjA5YjJkZCwgMHgyYzA2N2M5MywKKwkweDM3OGVlZjBiLCAweDg5YmY3YWM5LCAweDNmNzE0NjYzLCAweDdlZjNkNjE4LCAweGYyMjBmOTlmLCAweDZlMjhkZWNkLAorCTB4MzYxYjRlY2YsIDB4NDNlNTBhMzAsIDB4Y2ViNDY2NjcsIDB4NGZhY2ZjMDYsIDB4NGFmNzczMmEsIDB4YzZhYmY2YzAsCisJMHhjOWExN2I2MSwgMHhlMDhjYTdkMiwgMHhmNDJlODhjYiwgMHhiOGZlZWU0OSwgMHhmZThmZWM0ZSwgMHgzNWIxOGYxMSwKKwkweDg3ZDgwNmUxLCAweGVlOTUwZGU3LCAweDQ1MDY3ODAzLCAweGNiYzVjMjdiLCAweGU1YzVlZjJmLCAweDhkOTdiYmI5LAorCTB4MDc1N2IxZTAsIDB4YWZmNWNjZWIsIDB4NzYwZmNlNDMsIDB4MTgwZTgyZmQsIDB4OTRkMmM4ZWYsIDB4MzAzODBmYzEsCisJMHg1ZDc4NTMxZSwgMHhmY2ZmMDRhZiwgMHhhMzNjOTJiMywgMHhhMjNmZTcwMiwgMHg2OGYwN2Q2MywgMHgxOGViYjE3MSwKKwkweDFkNzFmMDJlLCAweGY3NGEwNmMyLCAweDgwYjdhMDI4LCAweDMxZTRkZWYzLCAweGE5ZjU0MWQxLCAweDE1Y2M3MWM1LAorCTB4OWE5ZGJmZTgsIDB4YjFiZjU0MWEsIDB4ZmZhODNiMzQsIDB4MDdmYTMzY2QsIDB4ZWE2ODlmM2QsIDB4YjAwYmFmYzgsCisJMHg5N2I2N2I2NywgMHg1YTlmMDRiYywgMHhlZDBhMjU4YiwgMHhiZTVhNGZiYSwgMHhiNDE2ZTBmOSwgMHg0ZWFhMzcwMywKKwkweGVmNjc1OWI0LCAweDQ4YzFmNGRjLCAweGYwMDY3NWU4LCAweDQ5N2U0NzFiLCAweDNlZDFmOTA3LCAweDdhNzQ3OTk3LAorCTB4N2UzMDNlOTcsIDB4NTA3NThhNzQsIDB4ZDczY2EyYmUsIDB4NjhkYzZjNWUsIDB4ZjI5ZGFkYWUsIDB4NzhhZTdmMDksCisJMHhlMjVlYmNkMSwgMHg3MmNiOWJmYywgMHhhOTllM2Y1MSwgMHg3OWZjOWY3YiwgMHhjZmJlNjYzNSwgMHhlMjFlMmY1MywKKwkweGJkNDQyZGRmLCAweDM1N2Y3NDAyLCAweGUyZjY4OGJlLCAweGMwZmMxMDM5LCAweDBlM2I0NWZmLCAweDg2Y2Q5YzUxLAorCTB4ZjdiNDRkYzEsIDB4ZjFlOWU2ZDMsIDB4OTQyZDY0ZmUsIDB4ODFjNjVmYTgsIDB4YmEwMThhZGMsIDB4MDM2MzY4ZTksCisJMHg0OGRlNjFiNywgMHhlNWRiODVhNiwgMHhiZjkwYTZlNywgMHhmNzE0NmY3YywgMHg4YzRkZWNmYiwgMHhjYzQ4ZWZhNSwKKwkweGRhODZiODZkLCAweGQzNDVjZTZiLCAweDFkYTk2ZmY4LCAweGZhMmYyOGUzLCAweDEzZTI4NTA1LCAweDJkYTc1MzEzLAorCTB4OGRlY2ZkYzUsIDB4MWRiODBlZjIsIDB4ZTdmODlkZTYsIDB4ZGMyM2M3YWIsIDB4N2JmMWI2NmEsIDB4NzdkNTEzMDIsCisJMHg1OTQxZTdmMiwgMHhiZDBkNzhkNSwgMHg3YjY1NTEzZiwgMHg2MjFmYjAxNSwgMHhlMzQyZGRjZSwgMHgwMDFiNDQ0ZSwKKwkweGNiNTBlYWVhLCAweDU1OTdhODAzLCAweDNmOWY2YjYzLCAweDVhMzFiY2EwLCAweDllZDRkZTQ4LCAweDI2ZjdhNDhiLAorCTB4ZmRmZDcxMTQsIDB4MGM0ZjIxN2IsIDB4NjM1ZDdjOWQsIDB4ZTdhMjRkY2YsIDB4YmQ3YzJlOTIsIDB4ZjdmMjgyYjIsCisJMHhmNTFiMDkwZCwgMHg0MzIxYmRmOCwgMHhhZmZkNDJhNywgMHg0YTlmZDczZCwgMHhmYTM3ZGZiOSwgMHgyZmJlOTFmZCwKKwkweDdhZjg0ODYwLCAweGJlOGRlNjFjLCAweGM4ZDhhZjExLCAweGUzYzhkMTJjLCAweDYyYzM3NWIzLCAweGQ1NzkxODU4LAorCTB4OWUzOWNmM2QsIDB4YzczYTZjNmYsIDB4M2JmZjhmZjMsIDB4ZTQxN2Y1Y2QsIDB4OWQ0NTkyYzMsIDB4MzExNzhjN2EsCisJMHhlMTBkODQ3MywgMHhkODMwNTI1NSwgMHg2N2MwMTE1MSwgMHg4YzliYWVlYSwgMHhlYWMzMWY4OCwgMHhhZmE4OGRiNywKKwkweDA1MTY1MDRkLCAweGY5MTZhZjNjLCAweGRkNzk1YTU4LCAweGZjODNlNDIyLCAweDNmZDQ5YjhlLCAweGQxMDY3OTJjLAorCTB4NDEzNmFkZTcsIDB4OWU4ZjgyYTAsIDB4ZGYyYzdjMTYsIDB4MGUzM2EwZWYsIDB4ZjczYjcxZTAsIDB4NzlhNmI3ZjMsCisJMHhkMTM5NDJkZSwgMHg3YzZlYzg1MSwgMHg0NzY3ZTQ5ZSwgMHg3ZTY5YzYwNiwgMHg5ZTAzZjVhZSwgMHgxYmIyMTQyMywKKwkweGJlYWYyOTNiLCAweGMzYTFjMGE0LCAweGRkN2JjMGY4LCAweGYzZjM4NzdhLCAweDI2ZDFmNjg1LCAweGNhOTZmZGY2LAorCTB4NmZiOGUyMTYsIDB4MWQ5N2YyZmQsIDB4ZWRhZjE4MmUsIDB4ZDQzY2JjZWUsIDB4Y2ZkZTcyMGIsIDB4MGI3YmYxN2EsCisJMHgxZTc1ZDZjYywgMHgyZmI1ODdjZiwgMHhlZjkwM2I0NywgMHgwY2UxZTIyNywgMHg0ZDNiYTJlMywgMHg3NjgxNmU3NCwKKwkweGJlZDQ3NzhhLCAweGVmMGE3YTZjLCAweGUxNWFkNWJiLCAweDE3ZjMwYWZjLCAweDhhZDkxMmJkLCAweDRhZjZkYzc0LAorCTB4YzdmNTFlYTQsIDB4OWYzZGJkMWQsIDB4NWU4YTdjMjEsIDB4Y2YwNjNiZTksIDB4OTMxNmFlOGIsIDB4ZTNmZDkxOWUsCisJMHhiNmYyNGEzYSwgMHg0ODVlZjU4NywgMHg0Y2U5Njk3ZSwgMHg4MWE3YTdmMiwgMHhhMDk5NGJmMywgMHg3ZmMxNzJkMywKKwkweDY3NDdjMTFlLCAweDBmODg5MmViLCAweDQ1ODIyZWNmLCAweDkxNzUzYzYzLCAweGRhMWI3MDMyLCAweDdkMGIwZTBiLAorCTB4ZTVmMjRlOTcsIDB4NDExZjNjNDQsIDB4YjFmZWM0ZmIsIDB4ZWFhMThmNzQsIDB4MWYxMDZjNWMsIDB4MTRjYjlmNTYsCisJMHhlZDQ3MWRmYywgMHgwNWNhZGY5MiwgMHg3ZDg0OTg5ZiwgMHhiNWQwNDMzMSwgMHgzZjI0NWJiNCwgMHg2MjRmNzRiMiwKKwkweDYyNjNlYzJhLCAweDk1YmRmMDNkLCAweGM4ZjlmZWUyLCAweDMxYmE3ZTRmLCAweDgwYmU5MGRhLCAweDAyMmI5MjZlLAorCTB4ZWRiZWE3ZjgsIDB4OGE3Njg2MjYsIDB4NzQ0ZGRlMjksIDB4NDBjYTAzMzMsIDB4Yjc2NjY1M2IsIDB4OTcxYjYyOWQsCisJMHg1OTJmZWIwOCwgMHg3YmMzYTk5NiwgMHg2YTc5ZjI5YiwgMHg3ZmQxYTVlYSwgMHgyN2M4YWE0NCwgMHhhMGU2YjczMCwKKwkweDhiYTg2YjVkLCAweDlhN2RlMjc0LCAweDFlM2NmMTMzLCAweDg3MDU3ZjM0LCAweGJiODM3Y2UzLCAweGY5OGNlZDA4LAorCTB4M2ZlNDI4NGYsIDB4ZTUwM2ZiNDMsIDB4NzUwM2QwZDIsIDB4Y2FiZjQwYzYsIDB4NTEwNmU3NGQsIDB4YjljYTdkM2MsCisJMHgyNjM0YThjYiwgMHgzODQ3MmU3YiwgMHg1ZWJiOWQ5NCwgMHg4ZmQwNmJlMCwgMHg3MTBlM2Y4YSwgMHhjMTkyYmY3MSwKKwkweGM4NmU3MjY3LCAweDQ3OTJiZjQ0LCAweDRmMWYzYzQ1LCAweDAzNDdiNjY3LCAweDU0NmI3ZGUzLCAweGI4Yzk4ZmYyLAorCTB4OTkzM2Y0YTQsIDB4ODA0ZmRlZjAsIDB4ZGY0NmZkM2UsIDB4YTNkZjQxOTgsIDB4MGE5ZGZhZDEsIDB4YjkzZmZlYjksCisJMHhiZmZhNDBkMSwgMHhhMTlkZWRhYSwgMHg3OWZlNzgzYSwgMHhmNTA5MmJhNiwgMHhhNzgzN2FjOSwgMHg2NzMzZjcwOCwKKwkweDAzMzllZmIyLCAweGI4M2VlN2Q0LCAweGUxZGMzYWQ1LCAweGJlYjM2Nzg3LCAweDY5ZjUwNzM1LCAweGZkMTFjMDMzLAorCTB4ZDUyYmNkNWYsIDB4Zjc2ZTNlZjEsIDB4MWEzOGYzNDQsIDB4Y2Y0OTZmYTcsIDB4NzM5ZjNhNWEsIDB4NzNlMDliMmUsCisJMHg3YTQ0Y2ViNiwgMHgyZGQwMmNlOCwgMHg1MjQzZDAwYiwgMHgyZjM5NDhlZiwgMHhlYmE0OGZmNSwgMHg1Zjk3M2Q2YSwKKwkweGNhMThlNmQ1LCAweDlkZWJmMzIzLCAweGE0NDJlZTQ5LCAweDFmM2M3ZWJiLCAweDllNzdhZmQwLCAweGY5MDIzNTVhLAorCTB4ZTUzYzc0ZTAsIDB4MjFiZDRiNWQsIDB4YzU4NWUwZjksIDB4MjQ0Nzk0YzksIDB4MDNlNDkyZjUsIDB4N2NhNWNmMjksCisJMHhmNTJmNzQ5NywgMHhmZDNmZThkNiwgMHhjM2JmZDZlZiwgMHgzY2QyOTNhZiwgMHg3ZDAyYTU3NywgMHhmYWU3YWI1ZCwKKwkweDg1YmQ1YWViLCAweGZjNmM2N2U4LCAweGNkZDIzZDI0LCAweDQzZDFjYmM1LCAweDBhMWU4ZTQyLCAweDNkMzVhMzkyLAorCTB4YTk0NTgxZTgsIDB4MWM1ZTdlNTIsIDB4N2MxMWNjMWYsIDB4ZWRjNGRlMzMsIDB4ODFmMzk0NDgsIDB4OGRhNmI1ZTMsCisJMHhiMWY3MDg3ZSwgMHhkOWViOTUzYSwgMHgzZGRkNmI5ZiwgMHhhOWQ1ZmZjOSwgMHg5N2ZmMjY5NywgMHhmYzljNWVhNCwKKwkweGZlNTRlZmZmLCAweGJjYWQwYTlkLCAweGEzNzEwZmM3LCAweGYzYmQzZmJjLCAweDgzZWExZjcyLCAweDAzZjQwYzgzLAorCTB4Njg5NmMxZWEsIDB4MGZhMTI2YzcsIDB4YzU0NDVmNDgsIDB4MWY0ODdlZjgsIDB4ZmU5ZWY2MTQsIDB4ZjVlMWE5ZGYsCisJMHhmZjZjNjZjMSwgMHhkMjQwZmFiMSwgMHhjOTFiZTQ5NywgMHhiNDJmOTIyNywgMHg2MmY5MjQ3YywgMHhiY2UxNmZjMiwKKwkweDhiN2E3ODg4LCAweGQ2YWE4ZmRmLCAweDBlMjg5YjdiLCAweDhjMWU4OGU5LCAweGM3NmRkOWZjLCAweGRmODg1MzZkLAorCTB4ZTA4NGY0NDIsIDB4MDRiZjNmMWYsIDB4MWZjOTBkZWIsIDB4ZmYyNDVmOTIsIDB4OThmZTBiNTQsIDB4ZjI0M2Y4MjksCisJMHhmOWI1NmVjNSwgMHgwYTk4MTFkMSwgMHgwOGY5ZTY5MCwgMHg5M2U0ODhlNSwgMHhmYWI1ZTdhYSwgMHg0MmJhNDdhMSwKKwkweDE5OWIyMzRmLCAweGFlOTBjNzVmLCAweGE0MGNhMWFhLCAweGZjMGY1MzJiLCAweGY1MTJmMDcwLCAweGE0OGJiZWMyLAorCTB4ZjNmZWFmYTcsIDB4MGY1NWY0ZjQsIDB4YTdlNjc0ZjQsIDB4MWRhODUzZDAsIDB4MDNiZTYxZmIsIDB4MWYzNjczZDYsCisJMHg5ZmE2NmRlNCwgMHg4ZGZjMjZkZSwgMHg5YjIxZmI3MSwgMHg0NmY2MDc5ZiwgMHgzNWVlN2RmMSwgMHg2N2ZmOTNhNiwKKwkweGNmM2NmN2MyLCAweDMzMDNkYTU3LCAweGQyNDFiZjg1LCAweDAxZDgxZTY5LCAweGY4ZmM0MzY5LCAweGJjYzBmM2M3LAorCTB4ODQ3YjkzOGIsIDB4ODc3YzUzNjcsIDB4MzMyN2NmMTEsIDB4MDNiNDBjYTEsIDB4NTM3ZmIyN2EsIDB4ZWU0ZDJlZDMsCisJMHgxN2ZlOGE0NSwgMHhiNDgwZjNjMiwgMHgxYzZlZGQ5ZiwgMHhhZjFlMTY5MCwgMHgwMjdlZDMwMywgMHhhMjYyMjc1ZSwKKwkweGIyMmJmOTJhLCAweDAwYTM1YzRiLCAweGJhODkwZjNmLCAweGMyMDk0ZmI3LCAweGY5MDJmYWYxLCAweDJlNTViMmZjLAorCTB4ZDYwN2NhM2QsIDB4ZjQ3NWRkZmQsIDB4Y2FhNWJjNzcsIDB4MzFmZWNlN2EsIDB4OGYwOTllYjAsIDB4MWQxZmJmMzIsCisJMHgxNTFkOGY5ZSwgMHg1MTFmZWRkMywgMHg3MTdmYmY5OCwgMHg5NWZlZDY1YSwgMHg0NTFiZTdhNCwgMHg5ZWE3NGFkZSwKKwkweDNkNDQ4M2M3LCAweDgwOTZlYTFmLCAweGJlYTY4MTdhLCAweGVhYjdmNzk2LCAweDNlNjA1OTNiLCAweDkyOGRkMjA5LAorCTB4MGVlY2YxY2IsIDB4ZmE2MDFmYjAsIDB4MmZhOGIzZjYsIDB4ZmY0MzBhNmMsIDB4ODZmYzZkNDYsIDB4NWNhMmNmNTcsCisJMHg2YzUwYTFkYiwgMHhkZTBlMWJhYSwgMHhmYTA3MDQ4MSwgMHgwN2Q1MzgzZSwgMHhjNjVkNzdlZiwgMHg3OGRiY2RkOCwKKwkweDQzYjVmNmZkLCAweDEzMmY3OTU2LCAweDFiZGMwNmUzLCAweDJlMmIzNDMyLCAweDUwMjg0N2NhLCAweGExOTk1OTdjLAorCTB4NGQzZGJlZjAsIDB4MWViOTEzY2EsIDB4MDIxNGY3NDYsIDB4YWY5ODY3ZGUsIDB4NzdlZjI5NzcsIDB4ZDE2NzRkZTcsCisJMHg0YmE2YWRmYiwgMHg1MTg2ZmY5OCwgMHhhYzZmZWZlMSwgMHhlNGM2ZmQxMCwgMHhmZTdkODRjNywgMHhlMWNhOWE3MCwKKwkweDM0MDZmYzJmLCAweDY5NGQzNDNmLCAweGZmOWY3ZjBlLCAweDFkMmZjMTA5LCAweDc4MjEzZjE4LCAweGZlODU1YTRlLAorCTB4ODRhMzBlZWQsIDB4YzIxNTdiYjcsIDB4NDE2MzJjN2IsIDB4OWY5ODM0N2UsIDB4YmFkNzFiZWEsIDB4N2NmNDFhNGIsCisJMHhiYzBkMmViYiwgMHg3N2JmNjg3ZSwgMHgwM2RiMDVhNSwgMHg1ZjA2OWJmNCwgMHhmNzgwMWZhNiwgMHg3N2RlNjFkZCwKKwkweGZhZGZiZjA0LCAweDEyNWFmODQzLCAweGRiYTBiZWYyLCAweDVkOGU5MjU5LCAweGEzMWVmNDQxLCAweGM2N2QxMzc3LAorCTB4YjQzNjJiYzQsIDB4OTFkYzZiYTMsIDB4ZTBiY2YxMmIsIDB4MTJkMmNmZTcsIDB4MTM4YzliODIsIDB4YjRkZmYwODQsCisJMHhjODAzMzE5MiwgMHg2ZmNmMTI0ZSwgMHhlYmZjODU1YiwgMHhlN2Y3NzVkNiwgMHgxYWU5MjhmYywgMHg1YzAxMzZhZiwKKwkweGVmMDdmNWM5LCAweGViNzY5Y2JmLCAweDAyNGZmNDJhLCAweGFhNzNkMDVkLCAweGFkZDYwM2ViLCAweDRkNjZjN2U1LAorCTB4N2Y4Njk0N2QsIDB4ZmM5MWZmMDUsIDB4NzAwMDdkNDAsIDB4MTZmOTQxY2EsIDB4MDhlOGM4N2YsIDB4MDQ0ZjkzYTAsCisJMHg3Yzg5NGU5YywgMHhkY2QxOGVmMiwgMHhlMmM4ZWM5ZSwgMHgzYzY5NzdlNSwgMHhhMDk5ZjUyZSwgMHg5ZTkyNTNjYiwKKwkweDkwZTAwMmEyLCAweGY0M2Y0NDE2LCAweGY2MDIyMWY3LCAweDI5YmE3MDRkLCAweGJkZjNmMjVlLCAweGJmYzBjNTI1LAorCTB4ZmNmZTc2MWQsIDB4NjZmZWQ2N2YsIDB4NWZjZDM3OTUsIDB4Y2ZmNzhlZDcsIDB4MjA5NmY3YjUsIDB4ZjdjN2JhNWMsCisJMHg3NjhmZGEyZSwgMHg2ZTAyNGRjNCwgMHg2N2JkYWRkZiwgMHhjMDgwNzdiZiwgMHhiYmZmYTI3MywgMHhmNDFmNDBhYiwKKwkweGE0NmE5ZTNkLCAweDNlOTQyNTBmLCAweDJmYTUwZDVlLCAweGZhN2RlNmFmLCAweGJkM2QwNDNiLCAweDc5NTBiN2ZmLAorCTB4Y2ZiY2QyZTAsIDB4MTcxMDdiZjAsIDB4NWJjMGJlZmYsIDB4ZTNhZjA2YjEsIDB4YTMxZDc4MzUsIDB4YmFjYTk3YTksCisJMHg0YWZlNDgyZiwgMHhlM2JlNWNiOSwgMHhlMzEyZmJlMSwgMHhkMGE5YWZkMSwgMHgzZDNmMjQ3NSwgMHgzY2Y0NDgzZiwKKwkweDc3ZTkyNmQ3LCAweDRmZDVjMTE1LCAweDQ3ZWQwZmNmLCAweDJjZGM5ZGZhLCAweGY0OTFiNWU5LCAweGMzOTQyNGNmLAorCTB4MjlmNWZjMjMsIDB4ZmVhODg3MjgsIDB4YzVjNjA5NzAsIDB4OTFlYWZhZmMsIDB4NmZiNzI4NTUsIDB4MWZmZDkwNjgsCisJMHgyZjM3ZmVhNSwgMHhhNmFkZTM5MywgMHg4YzhmMTJlNywgMHhlZWZhNDYzZCwgMHhhZmE5N2NhNiwgMHgzZmI5MjcxZSwKKwkweGVmYmY4NWE3LCAweGZlZGRmZjRjLCAweDQ2ODdlNDFmLCAweDZhZDY1YzBkLCAweGZmNGQ1ZWVhLCAweDZmZDAxN2Q1LAorCTB4MmZlZjM0Y2IsIDB4YTk1ZjNjZDIsIDB4ZDRkMWFmYTksIDB4MmZkZjgyMWIsIDB4MWYxMGExOWIsIDB4MzhmMDE1OTYsCisJMHhiNTJmOTZhNSwgMHhlZjRhZTFmNCwgMHhmNWJhNzNiNiwgMHhmYjI2NjJiOSwgMHgyNmFmODgyZSwgMHhiNWZhZjNkNCwKKwkweDFhNGIxYmU5LCAweDc1ZjUwMWNjLCAweDVmMzg0YTliLCAweGY3MDE2Y2MwLCAweDdhZTY0MTlmLCAweDQzMDdhMDU1LAorCTB4MjBiMzcyMGYsIDB4ZDliOTA3YmQsIDB4ZjllZmFiNGYsIDB4YWZlMDdmZjMsIDB4MGEzNzE0MjksIDB4YWI3NjRiYjIsCisJMHg1NTM2ZjVjMSwgMHg3NWJiZGJhYywgMHg4MTAxODJmZiwgMHg0YmU3ZDVmMSwgMHg2M2RkNWNmMCwgMHg1Y2RiYzcxYywKKwkweDJlZDAyNjMyLCAweGFlMjVjZDYyLCAweGZlY2E3ZDgwLCAweDVlZmJiZWUzLCAweGViM2NmOWM1LCAweGQxYjI1Y2ZlLAorCTB4MTE0ZjcxOGMsIDB4MTJmM2I0ZGYsIDB4ZmE4YWE1ZjQsIDB4NmZmODU2YmEsIDB4MmYxZTYxYzYsIDB4NWFhMjkzYzYsCisJMHgwODBmZTY3MywgMHhlZTZiMjdkOCwgMHhiYjZjZmI4MywgMHhiN2RmZTU1YiwgMHgwMGZjMDdhYiwgMHg4Mzk4Y2E5YywKKwkweDMzYTc1MGYyLCAweGI2YTVlNTE3LCAweGZjMmNjNGM1LCAweGY3NmY3ODJmLCAweGQ0NDJlYWRkLCAweGM2MTcwN2QzLAorCTB4MmJkMzVlNTEsIDB4YjE3Y2ZjZTksIDB4ZTI3N2E2M2IsIDB4NDViN2E4NGMsIDB4YjZmMjQ2ZGYsIDB4NTRiMWZlZWQsCisJMHhjYjVkNTJlZSwgMHgyZDhjNmNiYiwgMHg4OTRhZjc1ZSwgMHgxZTdjNzJmOSwgMHgzYmJhNzA0MywgMHgyNTkyYTVmZCwKKwkweGE2ZjdlZjQwLCAweDhmN2RlODNiLCAweDAzYjg5NmRkLCAweDBjMDdlZGVkLCAweDBlMDQzNzE0LCAweGU3ZTg5Mjc4LAorCTB4M2M2MGQzNDEsIDB4ZTkyZDk3NmYsIDB4ZjJiMTcxNGYsIDB4YzM4ZDI2YzcsIDB4ZjdlNWE0N2IsIDB4ZDI1ZTI4MTksCisJMHg5ZjkxYjNhOSwgMHg1OGMwZjNjOCwgMHhiMTlhOTNjYSwgMHhhYmRlOTQ0YywgMHhkZmU1N2NhOSwgMHg3YmM3YWM3ZiwKKwkweDE0ZWI1ZGE2LCAweDU1Y2Q0ZWZhLCAweDZkZmYzNzVmLCAweDFiMmJkNDEwLCAweGM2N2VlOWIyLCAweDk0NzRlN2NiLAorCTB4OWFlOWZlMTcsIDB4NTNjYzNlYmUsIDB4NDc1OTFjM2UsIDB4OWZkMGE1ZjksIDB4OWU1NmJiZWUsIDB4YzkyZmVjNzcsCisJMHgwZGFhZmVjNywgMHg0MjhlMzg1MywgMHg0N2NmZGEzYiwgMHhlMTRmYTg1NywgMHhhYjMyY2UzZCwgMHhiYmYzMGEyNSwKKwkweGM4Yzc3ZThmLCAweDNlZjQ3M2FmLCAweGU2ZWY3ZDEzLCAweGQ2ZTdiMzUzLCAweDhmNzRmMTM1LCAweDc2N2QyZDA5LAorCTB4MTU1ODcxNTQsIDB4ZjRkYWMzODAsIDB4MjljOTI1ZmQsIDB4ZjgxMjZlZDgsIDB4MDMyZDZmZGMsIDB4NzVkMzJmM2UsCisJMHg5M2U5MGZkMywgMHg1ZjVlNTg4YSwgMHg5MmNkZWViYiwgMHhhMzhmYjA0ZCwgMHg3Y2E1ZjQ0ZiwgMHhkNzBjODRiMSwKKwkweGQ3ODA3NGJhLCAweDkzZDcwY2UxLCAweGQ5ZmI4YTU0LCAweGM3OWJmY2FmLCAweDU5M2E1ZjI1LCAweGI1ZjQ4ODllLAorCTB4Y2JmNWQwNTksIDB4MDMxM2NhZTcsIDB4YzU0MTZlZmYsIDB4YzFkMTNkMjksIDB4MDJjNzQ2MmIsIDB4NTQ2OWVlZmEsCisJMHg2Y2U3ODJiYSwgMHhmNDM4ODNhMCwgMHhlNzEwY2Y5YiwgMHg4NWU3YTAxNiwgMHg1N2Q4YzM1YiwgMHgzZGI5ZDM0YiwKKwkweDg0ZGJmNmQ2LCAweGJhMjA4ZTUxLCAweDI5ZTQ5OGZlLCAweGZlYTAzNzlkLCAweGE0NDdmYTYyLCAweDE2OTg4ZWU3LAorCTB4Nzc3NTJlNjIsIDB4MWRkYjI0M2UsIDB4MzQzMjcwNDksIDB4MzMyMmZhNDUsIDB4MWFlYTdmZDEsIDB4NGZmM2EyZTcsCisJMHg5NmM5OWY3MywgMHhmZDE0M2UwMCwgMHhmY2YyZjEzZiwgMHgzZmEwNGZkZiwgMHhmMTNlZmI5ZSwgMHg2MDRiM2ZmZSwKKwkweGFmZjY0MzNjLCAweDY4YmM1YWI0LCAweDU4YjMxYzVjLCAweDgzOGY4OGY0LCAweDMxNDdjNWZhLCAweDlkNjJhZDNmLAorCTB4YzU0MGY0ODEsIDB4NWQ0NTg0YmEsIDB4NmU4MDdmMjgsIDB4ZGRhNmJmZDAsIDB4YzBjMzI5OTcsIDB4YzYzZDE4ZmQsCisJMHgxOTJmM2Y1NywgMHg1ZTc4MTY5MywgMHhiYmYyNDEzOSwgMHgzNzdjYmUyNywgMHhjNmM5NDRmZCwgMHg2NWYzM2QwMSwKKwkweGE3Y2I4ZGE1LCAweGY3ZjhlYjcxLCAweDU4ODcyYjc1LCAweDdiYmY3NGY0LCAweGU4OWJhYmRkLCAweGM4YmNmMDFlLAorCTB4NTE1N2JjNWMsIDB4Zjg0NGNlYjksIDB4YmM1OGI0ZWEsIDB4YmVmMTJiYjYsIDB4MGIxZjQ1ODEsIDB4YWU3NGExZTUsCisJMHgwZTE5ZjU0ZiwgMHhjYTkxNDdjMiwgMHg1NGI5MTFmNCwgMHgxOTBhM2RkMiwgMHhmMGIxM2MzZiwgMHgxZDMxYzdkMSwKKwkweGJiZTY3M2YzLCAweGVmYzAxODdlLCAweGU5ZDM4YjhjLCAweGY5MmE2ZDk5LCAweGM0ZjFiNTFmLCAweDFhYjdkN2VhLAorCTB4ODg4ZmQ5MGIsIDB4NDcxMGY2MjcsIDB4ZTI5ZDYyYWMsIDB4ZTNlMWUyYmIsIDB4ZTIzOGRhODksIDB4YmRjNWQyYmYsCisJMHhhMjM4ZWViMywgMHg1MTg3YmU4MSwgMHg0NTg4ZTIyOSwgMHg3ZjVhMTU2YiwgMHhiZGZlNDJlNSwgMHhlZTM4YTI5MiwKKwkweDE4YjIzZTNmLCAweGVkMmZhMGU4LCAweGM1Y2I2YmRmLCAweDdmYWU2OTNjLCAweDhiZTI5OTJhLCAweDVlYWY1ZjgwLAorCTB4OTlmYzhmM2IsIDB4NWUxY2U5NzUsIDB4YjAzYmUyNjUsIDB4MTk5ZDIzODcsIDB4NThhZmRlNzgsIDB4YWU3MDQ5MTcsCisJMHgwN2Y2NzI3YywgMHg3ZGUzZTQ0ZiwgMHg4MWYxODljMCwgMHhhMDliNmJlNywgMHhlMTlmMTgwZiwgMHhjZTM5NjgzZCwKKwkweGQwZjcyNWIxLCAweGQ2OGI2Nzc3LCAweGYzMTkzOWMzLCAweDczZDk2M2I0LCAweGRlMjI2NTM3LCAweGRlMzAzMjUyLAorCTB4MmU1NWZiMjksIDB4ZWYwZmJiYmQsIDB4ZDg2Y2U3MDcsIDB4OTUwYWQ5NzcsIDB4YmI2YjBmN2YsIDB4ZjAyMWY0ODksCisJMHhiODBiMzI3YywgMHhkOTYzM2UyZiwgMHhkNzIzNDZlYiwgMHhhODc5MmM2NywgMHhmZTFkYjNiMCwgMHhjMjlmNmNmYiwKKwkweDQxMDRmYzczLCAweDI2YjdiOGFkLCAweDViZWYyN2UxLCAweGY3ZjhlOTk1LCAweDBhNzU0YjM2LCAweDg5MDJjM2RkLAorCTB4N2U5N2Y3NDYsIDB4YTNmZGMxOTEsIDB4Y2VkYzE5NzksIDB4ZDI3MGNiMmQsIDB4NTVlYTllM2QsIDB4NGNkMmU3MjYsCisJMHhiZGY3NGUzZSwgMHg1NWU3Mzg3NSwgMHgyODJhM2FlYiwgMHgxMzE3ZjlhZSwgMHg5NzZhNTdmOSwgMHhhZDIyYmE0NSwKKwkweGY5ZTMxZjNjLCAweGFkNzc5NDAxLCAweGFhM2MwMjM3LCAweGZjNmU1YzFjLCAweGFkNjNkMDQyLCAweDk0ZDVkMjYzLAorCTB4MDc2N2FlOWYsIDB4NTYwN2VmZjAsIDB4YWM5Y2I4NWIsIDB4OWJiODA1OGUsIDB4ODZlOTAxMzksIDB4MTkzOWY3ZTIsCisJMHhiOGUyNTNlNSwgMHhlNjAyODMyOSwgMHg4YzNiNDQ1NywgMHhjN2ZhYjBlMywgMHgwZDYzYWJkZCwgMHhmZWMxYTdlOCwKKwkweDM4NDIwZjk3LCAweDIzN2Y1ZGM2LCAweDk1NTllZmFlLCAweGI0ODAxYWY4LCAweGJmZWQwMGFhLCAweDNjM2NkNTY3LAorCTB4ZDhhZDk3NzcsIDB4ZjBlNTBlM2QsIDB4ZjE4MzJkZGMsIDB4N2IyYjA1NDYsIDB4MjNkMjVkZWUsIDB4M2JmZTA1NzMsCisJMHgzOTVhM2U0NSwgMHg4MWJiZjFkNCwgMHhiOTcwNjQzNywgMHhkZmI5NTFlOSwgMHgyZjAxMDZlOCwgMHg3OWYyMDc0OSwKKwkweGY3MDMwYWY1LCAweDQ3YmM4M2UzLCAweGU0YmQ1MzAxLCAweGRhYjcxYTQzLCAweDcyODg5MWQyLCAweDgxYmI3YWI4LAorCTB4OGNkZjg3ZWUsIDB4OTczODA2ZWIsIDB4NzUxZjQ5MmYsIDB4ZGNhYWU4MDAsIDB4NTFkZjQzMTAsIDB4MzQ0ZWYyYWQsCisJMHg1MWFhYmQ2MiwgMHhiZGZmYmFhMSwgMHhkM2E0MGM4NCwgMHg2MGJkOTYyZiwgMHgxYzM5ZmE0NSwgMHhmYTgzOWFkOSwKKwkweGE0NWU2YmE5LCAweGRhMjllZTkzLCAweDhiZWVkZmI4LCAweGFmNzQzOTY1LCAweGMzYWQ4NjY5LCAweDk5NjVkZjgyLAorCTB4OGVkYjIwYjEsIDB4YWRhMGZjNzIsIDB4MGZjZjg4ZDUsIDB4YjBlYTY3MzYsIDB4NDZkOWIyZWUsIDB4YmZhNWRkNjEsCisJMHg4ODVmZWE5MiwgMHg0MWZhMTc3YywgMHg5ZTM4NTJiYSwgMHgxYjc2OWFhYiwgMHhkZDJmZWZmMSwgMHhkNGUyZTgyYiwKKwkweDQxZjZlZmIzLCAweDQ2NzU1MDNmLCAweDJmZDQxZjQ3LCAweDUyN2QwNzQwLCAweDI4Y2ZjZTExLCAweDlhNmI5ZmE0LAorCTB4YTRiYzFlNzgsIDB4MDNhNDFhODMsIDB4ODIzOWJiZTAsIDB4YmRiNjZhMGUsIDB4NDNmMjE3NzAsIDB4MzczZmUyMGQsCisJMHg5ZTgwOGU5NCwgMHhmOWZkYTlkYiwgMHg3ZjE4ZTMwZCwgMHg0NGU5MWRiZiwgMHgyZmE4MzNlYSwgMHhjZTNmYTAzMywKKwkweDA1OGJlYmM4LCAweDBjN2RhMWZlLCAweGUwMGVmNzZmLCAweGY5ZGQ3NWY5LCAweGQwN2M0MTA4LCAweDY2ZDc3ZTEzLAorCTB4NGMzZTA0ZTgsIDB4OGFkNzc3MjQsIDB4ZDhhZTc2ZmQsIDB4OWRmYzQ1NmUsIDB4MWVmNzc2N2EsIDB4M2Y1NGI3OGMsCisJMHgxMWRhZGEwZiwgMHgzYzA0MWY4NiwgMHg1NmZmNzE2YSwgMHgxOWQ5M2Y1YSwgMHhhYjVmYjhiNSwgMHg3NGRkZmY3ZiwKKwkweDk2YjBmODJmLCAweGZkYzlmZGYxLCAweGZlYzVlYWQ2LCAweGZlZjE3M2U1LCAweDJhY2ZiMTNhLCAweGFkYjVlMDI2LAorCTB4YzEzYmU3MmYsIDB4ZjRjN2M4NjcsIDB4M2ZiMTIxZGQsIDB4YmJmODNkOGYsIDB4ZmVjNWJiYmEsIDB4NmNjOTQ0OWEsCisJMHgwZjg0NTZjZCwgMHgwZmU1MTdlMiwgMHgyOGNiOGZkMCwgMHgzOTc0MDllNSwgMHhlNTAzNjViNSwgMHhjOTdjNGJmNywKKwkweGQ3ZWZiZmY1LCAweDkzZmMyZTJiLCAweDlkOGYxMjU0LCAweGI2Zjc3YzNkLCAweGExYzlmMDQ1LCAweDc2MzI5MmZiLAorCTB4ZDhiZWZjMDAsIDB4MjQwZDlmNGMsIDB4Y2MwN2Q1N2EsIDB4Y2U0NmU5MjcsIDB4NDlhN2Y0NTcsIDB4NjFiZWUyZDcsCisJMHg1ZjFjNTZmYywgMHgxYmQwN2JjZSwgMHgwZTcxYzdhZCwgMHg3MjFmY2UzMiwgMHg4YjJmOTJmZCwgMHgzYjVkYTdlYSwKKwkweDRlZmQ4YWQ4LCAweDVlZDFiMjU5LCAweDNmN2M3ODExLCAweGJiZWY0NmMzLCAweGY3ODA2ZWQwLCAweGYyMTQzYjVkLAorCTB4ZTcxMjFmNWYsIDB4YmRmNzQzZmQsIDB4ZTAxZjJkNjAsIDB4YzU3N2Y3YTcsIDB4ZTE5ZDI1YmEsIDB4ZTRjOWZhMGYsCisJMHhiOWRhZjc3YSwgMHg2ZWJiNTgzZiwgMHhiYWU0ODcyOSwgMHhlMWJmZWU4YiwgMHhlYjk3NmM1YSwgMHgyMDUxZjhjNywKKwkweDRhMzg0YTlkLCAweGZhZjc5NTdhLCAweDM0NGI3NGI0LCAweGRhYWFmNTI3LCAweGE2ZDc3ZDMzLCAweDlkZmNhMjFkLAorCTB4NzhlZDc2OTAsIDB4MmMzYTNlYzIsIDB4OWViYmNkZjIsIDB4ZTc3ZGY5NTYsIDB4NDFlZGM5NjUsIDB4MzMxODhlZjcsCisJMHgyNTlmZWEwNywgMHgxNWI2YWVmMywgMHg0OWI3M2M2MiwgMHg1MjFlN2JhMSwgMHg0YWNmYzBhZiwgMHg5MjNlODA3ZCwKKwkweGRlZjBjMWY2LCAweDM2YTU3ZjNjLCAweGYxMDI3NWRlLCAweDYzYmM3NTU5LCAweDQ0OTI3ZTFjLCAweDdkNTdhNWRhLAorCTB4YTBjNmFhZGQsIDB4Y2YxYjZhZmYsIDB4NTM3NDkzODMsIDB4Zjg5ZGIyNzUsIDB4OTNkYzVhYTEsIDB4ZWVmMTViMmEsCisJMHhmNzQ4NjFjNCwgMHhjZTI4MWI0ZiwgMHg1OGRmNzY1MywgMHhiM2ZiZGEyMywgMHg4YTFmNGQzNywgMHgxMjdiYzBlMCwKKwkweDZjNGZkZjI4LCAweGUwNDc5MjFjLCAweGViYzRiNjYxLCAweGM2YzRiZWYxLCAweGJmYzdhZjQ3LCAweDg3NjMzYTVmLAorCTB4YzFhMWRmNGEsIDB4Y2I4ZjkwNzEsIDB4N2YyM2M4ZWUsIDB4Y2VjOGUxZWIsIDB4YWVkMDIzODksIDB4NDM2YWI1ZmYsCisJMHhhNmU0N2ViYiwgMHhmZmIwOGIyMSwgMHg1OGVmNGI0OCwgMHhjNmQwNzhmYSwgMHhmNGJiYWEzOCwgMHhhNDI3YTQzMSwKKwkweDAzZjMyYzFkLCAweDkwYmRjNWViLCAweGFmOWNkZWVjLCAweDhhOTc3NTdhLCAweGVmYWMwYmM4LCAweGFlZjlmMTgzLAorCTB4ZGRmNDkxMGQsIDB4YTNhMzUyYTgsIDB4ZGJlNzE1YjksIDB4OGVlNzQ0OTksIDB4MjUyNjM4NWEsIDB4MmI5ZWU5ZGIsCisJMHg4Y2IzNjlkOSwgMHg5NzI1MjIyYywgMHg0NTMwMjNkYSwgMHhjNzQzNzVmOSwgMHg1ZTRmYTgxZCwgMHgxODMyYzNiZiwKKwkweGQ0Y2I4YmJmLCAweGI5Y2I0M2YzLCAweDkwZTNjZDdkLCAweDYxZGZjMTcxLCAweGVhYzhlYjkyLCAweDNiNTdlOWNkLAorCTB4MmY3ZjdjOWUsIDB4NzRlYzJiOWUsIDB4M2ZkZTkxOWYsIDB4ZWJlOWVjYjEsIDB4ZDg5ZTFmNTEsIDB4N2RjNzYzOWMsCisJMHg0OTE5ZGIxZiwgMHgxOThlMGJmNywgMHg3OGU3YmY4MiwgMHhiNGMyZjdhOSwgMHgzZGU0YTlmNywgMHhjMWRlZmNkNywKKwkweGZiYTQ5Y2Y2LCAweGI5Y2JkZTBiLCAweDk4ZjJkMmVjLCAweDc0NjYyZTRlLCAweDA2NWNmYzRmLCAweGU4ZTRmZWUzLAorCTB4N2U2MmI2ZWYsIDB4YzlhMzQ1NjEsIDB4OGU2NGY3ODYsIDB4N2M2M2ZkMjAsIDB4ZGY0YWJiNmIsIDB4ZGZiYmEyMDEsCisJMHhkYjIzYWY4MCwgMHg3MDNlZThmMywgMHg1ZWJjYzdjNSwgMHhmMGY4YWNkMSwgMHhjM2ZiNzJmZSwgMHhjMmZlNTNmNywKKwkweGYxMzdiMDRjLCAweDNkYjc3OTZhLCAweGViZTFmYWJkLCAweDM4Y2UwZDkxLCAweDNiZjFjYjNkLCAweGYzMzY2NzAwLAorCTB4ZWY5MDhiN2MsIDB4NzViZWJjM2EsIDB4ZmZlMzhhNGYsIDB4ZmQyY2ZkYmYsIDB4MDc3YmQzMTMsIDB4ZjA5MzQ3ZGYsCisJMHg1N2FhZTc5NiwgMHg3MjBhMmU4MCwgMHg3MmZiZjBmZCwgMHg5ZmIyMmNmMSwgMHg1MGY2MmU0ZiwgMHhiNDM5NWE3OSwKKwkweGIzZDIyNDZhLCAweDE1ZWU4NjI1LCAweDUxZTNiNGJjLCAweDUzNzNiZjE1LCAweDc5ZjA2ZGJkLCAweDMwOGYxZjNjLAorCTB4OWZmN2QwYzcsIDB4OTBiYzVjYmUsIDB4MTcyNzlhODIsIDB4OGEzZjg5ZDcsIDB4MTVmODU0YjYsIDB4YjU1ZTU0N2MsCisJMHhmYmRlOGRhZCwgMHgwYjVlNDc3MiwgMHhkOTdkZWJkZSwgMHg5YWM1YzMxYywgMHgzYmU4MjBhYiwgMHgzZGJmMTI5OSwKKwkweGZiOTY1N2RkLCAweDFjZDdmY2ZhLCAweDlmZGQ3MmNmLCAweGM1NmU5ZTZmLCAweDIxZmRiNTdkLCAweGUyMzg2NWFlLAorCTB4ODZjNjNhMzcsIDB4YzhhNTYwNzYsIDB4ODZiYTM5MmYsIDB4MjNjN2Q5ZGIsIDB4MThhYmZlNjIsIDB4ZWQ3YzdjZjAsCisJMHgwZWZjNDQ5NCwgMHhhOWI2Y2NkMSwgMHhjNTdiNjNkNywgMHhlNzg2YzU0ZSwgMHg0OWNlZTcwMywgMHg3ZGNmM2M1NiwKKwkweGUyYjRlZmE2LCAweGQ2Y2ZhYTNkLCAweDNlNTdmYmM4LCAweDIzN2JiYmZhLCAweGQ4MjliM2M2LCAweDllYWI0NDdmLAorCTB4ODQyOTMyMzksIDB4ZmMzMmY0NGMsIDB4Y2JlZTllYTQsIDB4ZTRlZDAxN2UsIDB4NDUxZjM5M2YsIDB4ODlmODEzZmUsCisJMHg5OTkyN2NjMywgMHg0YmJmNzIyZiwgMHg5YzU3ZjlmNywgMHg3ZDhhNDZmZiwgMHhjYmI2ZjdiNywgMHgxN2I1MDZmOCwKKwkweDYzZjZmMDE1LCAweGQwOTZiNzZiLCAweDY4ZGU0ZmRmLCAweGJmYmFlMWIwLCAweGYxYTA2OGRjLCAweDRkYjljMGU3LAorCTB4YmUzZGViMDcsIDB4YjA4MzlmOTksIDB4MTNlOGU3OGUsIDB4Njc3OWY5OWIsIDB4ZWYzZjMzNGUsIDB4YjgzM2NmNTQsCisJMHg2MGQyZmRmOCwgMHhlODBhMmNiYSwgMHhlYjJkZGY0NywgMHg3MzIzYmJlMSwgMHg3MzdmN2M1YywgMHg3ZWUyN2Y0MCwKKwkweGIxYmY0NDJmLCAweDlmZWU5OWFjLCAweGE5M2U2YTVkLCAweGFhZmY3ZTk2LCAweDc0ZGQxNzkxLCAweDA4YmQxM2RiLAorCTB4MjNmZjIyYjgsIDB4OThiYTRhZGQsIDB4ZjVjNzg2YjMsIDB4MGI4M2NkZWQsIDB4OWQyNGZlOTEsIDB4NTgwM2JmNjgsCisJMHgzYmZjNjQ2ZiwgMHhmYTI4YmFiMiwgMHhiMzI0ZjdlZSwgMHg2MmZhODBjMywgMHgxOGU3N2M0YSwgMHgwNzVmNGYwNCwKKwkweDkxNmFhZjk3LCAweGU0Zjc4NWNlLCAweGVjMjliZDU4LCAweDE1ZGVjNDc3LCAweGJjMWE3OGYyLCAweDdhYmJmNzRiLAorCTB4Y2ZmN2Y4ZGIsIDB4NTkzMTdkYzQsIDB4NDc0YWJlODIsIDB4ZGEyOTNlN2QsIDB4YmEwMzhkZmUsIDB4ZjJmZmFlNzQsCisJMHhmNWQwM2QzYSwgMHgzYmY2OTFhNCwgMHhkNzgwOWRiMiwgMHg3YWYzNWZmNSwgMHgxNjdiN2Q5ZSwgMHg3ZGVmM2ZkNCwKKwkweGVjM2QzYWY2LCAweGY2OTVkMjZmLCAweDJmYTgwNjIxLCAweDc1Y2RmMjU5LCAweGM5YjllMDYzLCAweDNiZDgzYWUxLAorCTB4OWIxMzllNjAsIDB4N2Y3MWQyOTIsIDB4ZGIwODdlZDAsIDB4OGU3YTI3YTcsIDB4ZWUyYjU5NjAsIDB4YmE1NjlkOGYsCisJMHhmNGNjMmQwNiwgMHhhNzdiN2ZmNywgMHgwZTRiZTBlNSwgMHhjMGQzYmQ3ZiwgMHhhNzNiYmJlOCwgMHg4N2Y1Y2I3YiwKKwkweGQ3MGU5ZDJmLCAweGExMDlkZWE5LCAweGRkOGNlNWVkLCAweDVlN2NmOTQ3LCAweDdlMDc2ZjdlLCAweDc4ODkxMWRjLAorCTB4NWRkMzhhYWYsIDB4ZDNjN2JjYjksIDB4ZTNjN2I5YTAsIDB4ZTRkNWY3ZTQsIDB4N2Y3OTJhZmQsIDB4ZmRmZjcyZWEsCisJMHg3Mjk3YjViMywgMHgwMGZmZWNmZiwgMHg0ZmIyZjM2OSwgMHgwMDAwODAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwKKwkweDdkZTVmZjAwLCAweDU1NTQ3NDBiLCAweDU1YjllODk2LCAweDJhNDkzZWI3LCAweDU0ODQyNTQ5LCAweGFhODRhOTI1LAorCTB4YzA5MDJiN2MsIDB4MzEwYzdjMjUsIDB4MDQwM2U1NDgsIDB4NmEyODU4ODgsIDB4YTIwNWEwZDQsIDB4MDExNDgyODAsCisJMHg1NWY0NzQxZCwgMHg5YTdjMzA2MSwgMHgxNzlmOGVlOSwgMHgxMDJkNDYyMiwgMHhkZDc4NzE5NSwgMHg4NjZkYjFkMSwKKwkweDMyMjA1MzhmLCAweGI0MGU5YWZjLCAweGQzOGNlYjYzLCAweDY4ZDFkMDFkLCAweDM4MzExYjYzLCAweDZmMzYwY2Y0LAorCTB4NGRjZTdkZWYsIDB4ODAyYTU2ZWEsIDB4NmY3YmU3YmUsIDB4ZjY1ZTk3YWQsIDB4ZWU3MzlmNjEsIDB4ZmZiM2VjZjksCisJMHg1ZjViZGY2NywgMHhhNWViMmMxOSwgMHgwZjI0YzY2NCwgMHhhMTUzYWI2MywgMHg2MzU5NWE3NCwgMHhmZjdiOTQxOSwKKwkweDY4ZDJjZmU5LCAweGFjODM5YWM2LCAweGMxOGYyZTNiLCAweGQzZjVhMzVmLCAweDdjY2Y1MDUxLCAweDJlNTA0YmJhLAorCTB4Y2QxYTQ4NGIsIDB4MTM5OTYwYzYsIDB4OTk2ZmQwNjIsIDB4MTJhZWIxODksIDB4NmQzYjI2ZTgsIDB4MTJkOGMyY2MsCisJMHgwMTlkZmUwOSwgMHgxOWNhZjlmZiwgMHg5NTZjNjc0YiwgMHg0NGVkZmUxNSwgMHhmMDg3NDJiOCwgMHg3ZjQ2NjY4MywKKwkweDNmOTgwNTlmLCAweDFmZDhjMGRmLCAweDM5MjU3NDRmLCAweDlkOWQ4Y2Y1LCAweGJiMGMyZTFkLCAweGJjNjVmYjE4LAorCTB4MDA5Y2U2Y2YsIDB4OGVjZDFkZWQsIDB4YmVjNjM0YTYsIDB4ZDRhNGMzN2MsIDB4ZDA5ZWZmNDMsIDB4NjBmOTI3ZGYsCisJMHhlNjdhYTVmYywgMHg2ZDkyODRlZiwgMHgyNGQ4Y2UxZiwgMHhjM2VhMmYyOCwgMHg2MWRmYTA1MywgMHg4ZGI2ZjE1NywKKwkweGE5Y2JiY2YwLCAweDNmOWUwYzYzLCAweGZjZTcwYWViLCAweDgyYzY3OGY1LCAweDMyZjI5MzJlLCAweDMyNzc3ZWEzLAorCTB4OWYxZWViODAsIDB4OWRmYjFjM2UsIDB4ZmU1ZDdkN2QsIDB4OTM2ZWIwM2QsIDB4ZWMxMjU4Y2MsIDB4NTk4YzA2N2IsCisJMHgwMDMwNzgwZSwgMHgwN2MzMmZhYywgMHhiNDBlMzQ0MiwgMHhiZWEwOTMwNywgMHgwZTc0ZjVjNSwgMHgyZjMwN2MyMywKKwkweDBkZDhjODliLCAweDA2ZWJlZjhjLCAweGYxMWZiYzM5LCAweDE5NjQ5NGM1LCAweDZmOWIzN2Y3LCAweDMyODNkYjBmLAorCTB4MzMzM2EzOGMsIDB4OThiYmFlMDMsIDB4NGQzZjU4NzUsIDB4OGViMTk4MDAsIDB4N2Y2MGMzNGIsIDB4MzI2M2MwNjYsCisJMHgyNGM3ODA5NiwgMHhhMWVhYTZjNiwgMHhlOWFmYWMxMywgMHgwOTkwZmE5NywgMHg3ODg0ZDdkNiwgMHg4NWQwNzAxNCwKKwkweGQ3MmM3YTIzLCAweGM1OGJmOGMzLCAweGJjOGVjYmJjLCAweDU4YzFjNDZiLCAweGViMDdmZTEwLCAweDVkZTYyMjU5LAorCTB4M2Q3NzcxZGMsIDB4OTA5MmNiOWUsIDB4YzBiNzRjZTEsIDB4N2ZmYTI1ZjUsIDB4NzJjNzlkMGYsIDB4ZjJmZWVmZDEsCisJMHhlMjljNDZhZCwgMHg3ZWRhMWRmZSwgMHhhZmE2ZDljYiwgMHg1MmZjZjBmNSwgMHhmZGM0NmRkNiwgMHg2YThjZWIyZSwKKwkweDBjZjlhOGVmLCAweDk3N2NiYmQ3LCAweDk5ZGViZWI2LCAweGMyNzQ4Njk4LCAweDk3YjFiMmM2LCAweGU3NGQ1NGY0LAorCTB4OTlmNDQ4YmQsIDB4Y2E3NDZmYWEsIDB4NjZlMTlmYjgsIDB4MzcxMzA0YzUsIDB4ZjQ0NzlmM2QsIDB4YjAwY2RlYzIsCisJMHg2M2FjN2VjOCwgMHg4YjRmZDExOCwgMHhiMWU3NGY0YiwgMHg5Y2M0OTc2NCwgMHg3ZWJiMThlMywgMHg0MjczMTY1NywKKwkweDYxYWVmZDUzLCAweGM4NWQyNjU0LCAweDVmY2ZmYWEwLCAweDU3ZGUzNjM5LCAweGQ3NWU3MDMyLCAweGM2YWI2YWJmLAorCTB4NmFmZjVkZjUsIDB4M2FlYTk1MTEsIDB4NGUxZDA0OWEsIDB4ODY3NDk3ZDUsIDB4MmNlNzFkNjEsIDB4OWI4MDBlYjAsCisJMHg4MTYyYzA4ZSwgMHhkNjZlOWE3ZSwgMHg5OWUxMTg4NywgMHg1N2JmYjE5OSwgMHg1OTZiYzcyYywgMHg0MjRmYTVkZiwKKwkweGZkOGEwZTU4LCAweDNhMjQ5NzRhLCAweDFmM2M2NDg0LCAweDQzM2Q2MWVmLCAweDAzMWU2MjdhLCAweDc5OTkzYmI1LAorCTB4YTA1Y2E1Y2QsIDB4Mzk4ZWJiMWIsIDB4MjRkZmUwNjMsIDB4MTljZTJmY2UsIDB4ODFlZTljY2YsIDB4ZmM1ODM5NzYsCisJMHg4NzU4NGFiMywgMHgwOTQxYWU2MSwgMHg1YzczN2I0MSwgMHgzM2U0MzZkMiwgMHhlNTc0ZjQxNiwgMHhlMjBkNzNjMywKKwkweDRlMzhhZWI5LCAweDU0ZWUwOTM3LCAweDFkMmFmM2NkLCAweGFkZmEyYWRjLCAweDE4NzY5YTRiLCAweGIzYzFiMmU5LAorCTB4NTEyMWU4ODgsIDB4YzdhY2Q0YzksIDB4NDA2YTVmYTQsIDB4NjdkNWI5ZmEsIDB4NjIzYmE0ZjgsIDB4NTg1ZmEyMWMsCisJMHgyOTVlMGRjNywgMHg3Mzc4ZmM4NCwgMHg1MGRkYjY4MywgMHg0NGFkNzVmOSwgMHg4ZTQ3ZDQyNSwgMHhmYmY2ZDVlNywKKwkweGQwMDNkMjI5LCAweDcxN2UxMDNiLCAweDljMGMzZDI0LCAweGMzYTNjNTgzLCAweDEyMjRmMDczLCAweGI5Y2NjYmJkLAorCTB4NWJlMDEyYjksIDB4ZWUxODFiMGUsIDB4ZjdjZjE0ZGYsIDB4OTczMTBlNzksIDB4MGY4MGZkODYsIDB4ODg3NWUyNjAsCisJMHgyZTRmYTgxNywgMHhjNTM3ZTJkNywgMHhiMGU3YzVhMywgMHg4NjdlMmQzYSwgMHhiN2ZiYjU3YiwgMHhkYTZhZTQzNSwKKwkweDM1MjM3YzMzLCAweGNiOGI1OWVkLCAweGJmYjY3MDM0LCAweGM0N2ZkMzQyLCAweGVjMGQ2YWVhLCAweGY0ZDRjZTBhLAorCTB4YTM3ZjViY2YsIDB4YmQ2ODJlMDYsIDB4YThiZmQzNWQsIDB4YmRhNjgxN2QsIDB4YTY5Zjc0MzgsIDB4MjY4ZWQ0N2QsCisJMHhmOWRhNWMwZCwgMHg5OGZmYTY4OCwgMHhkYTZiOGY1ZCwgMHg2YTM3ODZjNywgMHg3ZTFkYzdkYSwgMHhlODRmMDM0YSwKKwkweDdmZTlhMmRhLCAweDM0ZGIwN2NkLCAweDVmYmE5M2VkLCAweGRiNWZiNGQzLCAweDllMDY4NmYzLCAweGQzNWJiYmRjLAorCTB4MDM4NWNhN2YsIDB4MWQ4YWI4MWEsIDB4MzFhZmY0ZDMsIDB4NGYwMzU2ZmYsIDB4YTZhYmZlYjUsIDB4YzdmYjc0ZmYsCisJMHhjZTE5ZjY5YSwgMHg2N2RhNmEzZiwgMHhkMmQxYmZiOSwgMHg5Mzk3M2M2YiwgMHhhNWZmMmJkNywgMHg5MzU5ZWU3OSwKKwkweDVmNTBkZmVmLCAweGRkOTU0YjM0LCAweGViZjQ4NjQxLCAweDM1YmEzZTI0LCAweDAxODRhNzRkLCAweDk3MmE4M2ZlLAorCTB4MWM5ZTFkMDQsIDB4YzEzOTI1NjEsIDB4Yjc4ZTU5ZjIsIDB4MzJiMGU5MTQsIDB4NmU3YzdjOGMsIDB4ZTBmMjQ0OTcsCisJMHgyOGJkMjhhYiwgMHg5MWViZDFmZiwgMHg0YWZkOWRhMCwgMHgyMjc2NWU1MiwgMHhjNDVkNDFkZCwgMHgzMzFlMjlmYywKKwkweDM5ZDYyMzkzLCAweDgxYWFjZWFjLCAweDlhZWQ3Yjg3LCAweGE3MDZiNmZlLCAweGU3YzMzZGE2LCAweDJkNjdiNGQ2LAorCTB4YjY3MDM0NTYsIDB4N2ZkMzVjYmYsIDB4MDY4ZjZhYzQsIDB4MzRlYjA1NzYsIDB4N2JkNmYzZmQsIDB4NmI0MTcwMzUsCisJMHg1MTdmYTY4MywgMHg1ZWQzNGZiYiwgMHg2OWFjNWExYywgMHhhZmMzYjUxZiwgMHg1NzNiNGI4MSwgMHhkOThmZmE2YiwKKwkweDhmYjRkNDE1LCAweGI0ZDdhZjBkLCAweGFhZGMzYjhmLCAweGI1NzQyNzgxLCAweGYzNWZmYTZiLCAweDNlZDM0ODQxLAorCTB4YTY4NzdiYTksIDB4NGU5ZWRhZmQsIDB4NzdiOTNjMGQsIDB4OTRmZmE2OTcsIDB4NWMwZDYxMGIsIDB4ZmE2ODhlYzUsCisJMHg2YTRmOThkNywgMHgwZmQ2YTllMCwgMHhkYmE3ZmQzNSwgMHg2N2RhNmI0ZiwgMHhiNGQ3M2YzOCwgMHgyY2QwNzZhYiwKKwkweDdhZGFkN2Y3LCAweGFmNWQxNzYxLCAweDdjZjM1OWZjLCAweDkwYzNkYWIwLCAweDQ4NmY4MjNlLCAweGQ2MTNiMzRhLAorCTB4M2ZlMTAyZWIsIDB4Nzc3Y2U0OWMsIDB4MjhlZDFlOWMsIDB4OGMxNDE4MmYsIDB4NDFhZDI5MDEsIDB4NDIwYzkyZmQsCisJMHg0ODBhZTkwYywgMHhlMmE2MzU4YywgMHgyMGFjNDAyOCwgMHhjMTU1NDliNywgMHg0ZjY4YzlmMywgMHg3M2FhOTAwMCwKKwkweDFmYTBmY2I5LCAweGViNWFkODEzLCAweDFiYjI2NmE3LCAweGRmNDA5NzFjLCAweDI5YmZjMjVkLCAweGEwOTQ0YjgzLAorCTB4ODVlYmFhOWYsIDB4NGVhMTY2ZjksIDB4NzI2ZjNhMDIsIDB4NTgyZTNjZjksIDB4YWY5ZDdkY2YsIDB4Njg2MmNiNGYsCisJMHg3MDViMDQyNywgMHg5MzA3YTAxZCwgMHg5ZTZmNDFiYiwgMHg3OTc3NjM4OCwgMHgzNzhmMDY0YiwgMHg4OTc4MGNjMywKKwkweDVjNDhlZjk4LCAweDMyY2NhM2FiLCAweGNjMzNmY2Y0LCAweGZmN2ZhOTY3LCAweGFlM2UwNmI4LCAweDhhNmJmYjA0LAorCTB4YTBhN2ZmMTgsIDB4ZmJiMDY1ZWUsIDB4MzdjMDAzNWEsIDB4MTUzZDhjMDUsIDB4NGNmYzEyYjAsIDB4NWI3MDRlYzAsCisJMHg3YjY1NDljMCwgMHg5NmU1NGRjMCwgMHgxZGVkNDI4MCwgMHg1ZjgyNzI4MSwgMHgwZTA4NzgwOCwgMHhkY2E4ZWEwNSwKKwkweGZkNTJmMDE2LCAweGMxMDM0MGY2LCAweDU0N2MwNGFmLCAweGE2MmMwOGVlLCAweDlmODBiNWYyLCAweDU2MDY3N2RhLAorCTB4NDBmM2ZjMTMsIDB4YzBjZWNhOTAsIDB4MjM3ZmFhN2EsIDB4OWJmMDRhZDAsIDB4ZGY4Mjc2ODEsIDB4ZGNhODg0MGEsCisJMHhlNTQxZDgxNSwgMHhiNTI3NDBlZSwgMHgyMmVjMGRlZiwgMHg5ODQwZWRmOCwgMHgzMGUwNzBlMCwgMHg1ZDAyMDdjMSwKKwkweDdjMGMxZjA0LCAweDQwYTFmMDQwLCAweDAzODc5NTM3LCAweDBkMWU1NDNkLCAweGYxZmI1MmY0LCAweDA3ODIwNWMwLAorCTB4NTc2YjRiY2UsIDB4MmU1NzYxMzMsIDB4ZDJjMDc0MTIsIDB4MmY3OTNkYjgsIDB4ODVmNjUyM2YsIDB4YmI0NjJkOGUsCisJMHg0M2EwOTE3NywgMHg4Nzk4MzU0MywgMHhjYzg2Nzc0MCwgMHgyZWNkNmRjMiwgMHgxM2EwNmEzYywgMHg3MWM5ZDEzNywKKwkweDk2YWYyZmI0LCAweDQwNzBkMDRlLCAweDMzNTYwZDdhLCAweDVhOWJkMjM3LCAweGM5ZTk1NGI2LCAweDkwYWUwY2ZlLAorCTB4YmI3MzJmNDIsIDB4MzM2ZmViODgsIDB4YjUzN2Y1NTMsIDB4ODUyODNlMzcsIDB4MDc5YjllZDAsIDB4ZjgxMWIyNzYsCisJMHg5ZjYxMjNlNiwgMHhlNWM3MTQ3YywgMHhjMWJmMzlmNSwgMHhhMzVmNzY4ZCwgMHg2NmMwYWYxNCwgMHhiMjc3ZmUwMSwKKwkweDhjMmZlMDNiLCAweDVlZDc3ZmE0LCAweDlmYjQ1NmQzLCAweGMyMzVmNWQ0LCAweGU3MTgzYTM4LCAweDVhMmVlY2JmLAorCTB4NmMzYjIzNTcsIDB4YmQ0MGY1YzAsIDB4NzJmYzBmNDcsIDB4ZTJkYmU2YzYsIDB4MmZiZWJhMDIsIDB4MjIzNDE3NWIsCisJMHg4NTQyNTkxMywgMHg4Y2M2NDRkZSwgMHg0OGYzZGY3NiwgMHhmN2ZjZTdlNywgMHgxN2MxYzIxYywgMHg5YzQyOTU1OSwKKwkweDc4NTM3YWU3LCAweDdmMzBhZGY4LCAweGIyYmQxMWVmLCAweDVlMzQzOWNkLCAweDAwY2ViNzk2LCAweGY2OTk3ZGUxLAorCTB4YTA3NzNmYjcsIDB4MTdmNzVmMWQsIDB4ZTFjZjBmYmQsIDB4MjFiMTIxODQsIDB4ZTlkZDc0MDQsIDB4M2FjZjg4OTIsCisJMHhkOTRkM2E1ZCwgMHgwMmZkZjc2NiwgMHhhMjZkZjlkNywgMHhhMDFkNGVmZiwgMHg1NmViZGJmMiwgMHhiNjEyYjJiYywKKwkweDIwYTJiOGQ0LCAweGYwNTVlZDE5LCAweDVmNjgwYzBmLCAweDAzNGU2MWNmLCAweDk4OWI4N2NhLCAweGVhMWM1ZGU3LAorCTB4ZjgyM2U2NjYsIDB4NTJhNDE2NTYsIDB4ZTE3NmY5YjYsIDB4MjE2MzZlYmUsIDB4YTYxNTdkODIsIDB4OGFmYjU4OWMsCisJMHgzODNiZDc1ZSwgMHg3NTJjNzBkOCwgMHhkZDkwZjI5YSwgMHhmYmM3MDA3NywgMHhlYjQzZDEzNiwgMHg3YTY5MzEzYSwKKwkweDVkNGJlZTIxLCAweDQ5YzMzOTk3LCAweGRlYjM2NmZkLCAweGRmN2Q3MDE3LCAweDUzZmFmYmVlLCAweDlkMzA2ZjI5LAorCTB4NjFmNDg4ZmMsIDB4M2ZiMDY5ODEsIDB4Mzc3OWMyMzMsIDB4MzhlMGVmMDMsIDB4MjE0YjBmY2QsIDB4M2U5NTczYTQsCisJMHhhNzRjYzExYSwgMHg3YTg1MWZmMSwgMHg4MDVlOTIyOSwgMHg0YjdmZDA0ZSwgMHg5Mzk5Y2RlYiwgMHg0ZGQyZjQ0OCwKKwkweDNlOTI2ZmYyLCAweGZhN2IwNDY4LCAweDI4NTQyZTg0LCAweDhjNGU4OWU5LCAweDUxNzNhYzEyLCAweGVlNDlkMDFhLAorCTB4YzBmMGY0ZDAsIDB4ZTQyMzI4N2EsIDB4MTdkOWQwMjAsIDB4ZmU5ZmRlMzgsIDB4ZTIzNzFhZTEsIDB4OTNkYmY5NmQsCisJMHg2NmI3ODg5YywgMHhkMDA3OWMxZCwgMHg5ZWE4ZjA3MywgMHg0NDI2MDRlYywgMHhkMmRhZmViYiwgMHhiMjA3ZjkxMCwKKwkweGM1MjljY2EyLCAweDcxNzJlMzczLCAweDdlYWQ5ZWJmLCAweDRkZGM4NjNkLCAweDc0ZjRlNWM4LCAweDBiYTg2ZWMyLAorCTB4ZWY5Y2I4ZDEsIDB4MmU3ZDc2ZDUsIDB4MmU3ZDQ3M2YsIDB4MTVhNmRmM2YsIDB4YzNkNTJkOWYsIDB4ZjgxYzRmZmEsCisJMHg4ZDJjZThkYywgMHgzZmQ1OGZiMSwgMHg4MjNmMjg3OSwgMHgzYWVmOTdhZSwgMHg3ZTgzY2QzZCwgMHhiOTJlZWIxNywKKwkweGJlYTA3MTMxLCAweGQyYWJjYzUwLCAweGU4OThkZTkxLCAweDVjODk2YWRiLCAweGM3NWQzZjU3LCAweGE3NWQyMmU3LAorCTB4MTFlNzVkMDAsIDB4NzY4YTdmNWQsIDB4MzM5MzZjZjksIDB4YmIyODU2ZjksIDB4Mjg2MTM1MDEsIDB4Yzk1YTJmN2QsCisJMHgxNGMwNWM3ZiwgMHgyZjMyMTcyYSwgMHgwYzgwOGI5NSwgMHhjMWJkOGU5MCwgMHhmNzg4OGQyNywgMHhkNTI3NThmYiwKKwkweDc3N2U1MDNmLCAweGJkZjVkMjNhLCAweGQ5ZjkxZjNhLCAweGQ1MTc1OTRiLCAweGI1YmQ2NzJmLCAweGFmMzdiNDc4LAorCTB4MWRhZWYzNWYsIDB4ZWI1MzdkNTYsIDB4NDQ5MTUzOTMsIDB4N2ZjZDBjNmYsIDB4ZGIzOWNiMTcsIDB4NGU4MzRmYTUsCisJMHg1Y2VjOTNlMiwgMHhlNGI3NDdjMCwgMHhlNjEzMjI3ZiwgMHhkNTY3N2RiZiwgMHgzZjUwNTkxMywgMHg4NWNmY2Y1YiwKKwkweGEyZTdlMzFkLCAweDdkZTg5MWNhLCAweGUwMTQ1ZjAzLCAweDc4YTZkZmYzLCAweGE0ZmE1ZjY4LCAweDM0NWYwZDNhLAorCTB4MTIzY2NlM2UsIDB4Y2ZiYmQzOGMsIDB4OGFlNmRhMTQsIDB4ZmJmMjkzZTAsIDB4ZjI4NTkwZmYsIDB4MTNiZGVlNGMsCisJMHhkYmY5N2JjZiwgMHhlZjNjNTRhNiwgMHhmYmQ3MThmYiwgMHhhZjhkNDc5MiwgMHgxMTllZmFhOCwgMHhlMmNmZGZiZCwKKwkweDg1ZjdlYzE1LCAweGIyMmZlZmEwLCAweDE3ZjdkMTE5LCAweDY1OGEzODEyLCAweGNiMjg3NjAzLCAweGYyY2JkOWYxLAorCTB4NzJmNmY0MDYsIDB4ODhkMWNlZGQsIDB4OTVlYmQwMjcsIDB4N2RmNzBlNzgsIDB4ZDYzMmQ5ZGMsIDB4OTQyMGZhODUsCisJMHhlMTg4NzY4MywgMHhlY2QyOTMzNSwgMHg3NjE3ZThkMiwgMHg4ZDg1MDEyOSwgMHg3ZjNlMjE5ZiwgMHgxOThlZTM4YSwKKwkweGZjYTkyZWJjLCAweGVlZDE5ZmQwLCAweGQwNTkxOTMwLCAweGNlN2M0NjVjLCAweDY3N2YyMjI2LCAweDlhYmY4OTFhLAorCTB4Mzg3OWI1MTEsIDB4YjdlOWQ3OGYsIDB4ODRmZjFlMGMsIDB4ZWZlMWVmNTgsIDB4ODQxZDNmYjgsIDB4YzUyY2JjZmQsCisJMHgyZmViODc5YSwgMHgzY2MwZmM1MywgMHgxOWQyNDcyNCwgMHgyZTQ3NzNjZCwgMHgzZTc1NjNlNywgMHhhMDc2ZTk2NiwKKwkweGMxMzQ3ZTlkLCAweDhmOWUzYjc3LCAweGZkNTI0NzFhLCAweGNmYWVjM2M4LCAweDY2N2NmMWYyLCAweGU1NTA2YzU3LAorCTB4YWVjNzhkMzMsIDB4ODRlOTcyZTMsIDB4Zjg0NDE5YzEsIDB4MDE0Yjk1NDQsIDB4NmYyZmQ2MDksIDB4YTdmZjI4NmYsCisJMHgzNzFkNzAwZiwgMHg4YzYxMmQ5OCwgMHhjMzRhYjA3NywgMHgzNWZmN2VkOSwgMHhkZjFmNDA3NywgMHhjYWUzZWFhMCwKKwkweDFhOGVmOGE4LCAweDAxOGE2MWY3LCAweDNlY2M1N2Q3LCAweGYxNDFmMTUyLCAweDBlNGU1NTFkLCAweGIxYjBiZmQyLAorCTB4ODg5ZmM0MmUsIDB4NzljN2Y1OTcsIDB4Y2UzZmI5ZmUsIDB4OGQ3OWMzYTMsIDB4ZTYzMjhlNDIsIDB4ZjgyMzdiNzcsCisJMHhhZTAwZDZkNCwgMHgzMDdmYzY4YiwgMHhmZjhkN2NiMywgMHhkOWMwZDU2MCwgMHhmZmE2YmI3ZSwgMHg0ZDRlZDU4OCwKKwkweGQ2ZTgyYmJiLCAweDU3YWRlN2I0LCAweDZiNDE3MDM0LCAweDUxN2ZhNmI5LCAweDE3MDM0N2JiLCAweGZkMzRlYTg3LAorCTB4NmFmMGVkNDcsIDB4MDZjZWQyZTAsIDB4YmIzMWZmNGQsIDB4YjFmNjlhN2MsIDB4ZjY5YWM1ZTEsIDB4MWFmZDg3NzEsCisJMHg2YWQ3NDI3OCwgMHgzZTZiZmY0ZCwgMHgyN2RhNmEwOCwgMHhiNGQ3YWY3NSwgMHhhYWQzZGI1ZiwgMHhiNmY3Mjc4MSwKKwkweGI5NGZmYTZiLCAweDU3YjRkMjEwLCAweGI0ZDViZmIxLCAweGQ3NWY5OGQ3LCAweGYxYzYyZmMwLCAweGViNTRlNzc4LAorCTB4OWI5ZTY4M2YsIDB4ODFhZmRmNmUsIDB4ZjFlNzg4NWYsIDB4MjNjZTE5OWEsIDB4ZjljNWU3ZGEsIDB4Mjc4YjZmMDYsCisJMHgzZWU1OTg3ZSwgMHhmZmRmNjlhOSwgMHg4ZGNkYzhjOCwgMHg0N2ExMmZjMCwgMHhiNjdmZTQ3NCwgMHhjNTNkNzFkNSwKKwkweDFkMzlhYTFhLCAweGQ3YmVmMWM0LCAweGU2NmExZjJiLCAweGJhZjdkMWNiLCAweDdhOWQ4ZTkwLCAweDc1ZjIyNjZiLAorCTB4MDM5Y2Y5N2UsIDB4ZDBhYzc2NDAsIDB4YzUxYWEyYjMsIDB4YzllZWJiOWQsIDB4ZjQ4ZTU4MDMsIDB4NmM4ZDVlYmUsCisJMHhmMjcwZDI1MywgMHg3ZGEzOTYwMCwgMHgxOTAzNTc1ZiwgMHhjYTcxNjUzMywgMHhmOTk2NTgzYiwgMHg3MGQ4ZDZjNywKKwkweGJjZTdhYjg5LCAweGUwYzRlNTgzLCAweGIzOTQxYThhLCAweGIxN2UyNjYwLCAweDNlN2RkNjA4LCAweDg0NmQ5MjM4LAorCTB4YWE2NTI1NzUsIDB4ZDEwZjVlNzEsIDB4MWQwY2FhZWQsIDB4ZGJhYWY5ZjEsIDB4NGIzNzE0MmMsIDB4YTMyMmQ2YmYsCisJMHhlODFjZGYzZSwgMHhlYzEwNzkxYSwgMHhkM2E3ZjRkYywgMHg2OWRjNjJkNywgMHhhMWY5ZDgzZCwgMHhjMDE3YjAyMiwKKwkweDU5ZjJjN2VlLCAweGUwNDNlYmIwLCAweGJiMDQ2ZDFjLCAweDYwNGRjYjFmLCAweDczZmQ2M2Y3LCAweDljMjNmNzYwLAorCTB4N2FkOTc0ZmUsIDB4YzlkNTZlN2MsIDB4NjE3MmVhN2IsIDB4Y2EwZjExZmMsIDB4ZDc1MzM0NTYsIDB4MGUyYjc1MzksCisJMHgwZmVjN2FjMCwgMHg0YjI4YWQxYSwgMHhlMjY3YWU4YywgMHhlYzhlYjA5YywgMHgwYThlYjA2NSwgMHg1MTA3OGI0MiwKKwkweDMwNTJlY2ZkLCAweDFjMzkzMjFjLCAweDJiZWNmZDA3LCAweDFkYjgxYTc0LCAweDJlYjA0NWZmLCAweDk3Y2Y4YjU4LAorCTB4YWVkZWU5M2UsIDB4YjZmOWY2MzAsIDB4OGExOTM3YjMsIDB4NWQ3OTlmNjEsIDB4MDE0ZDZkYjcsIDB4ZTY3OTk3MzgsCisJMHhmMWQzYmUwMiwgMHg5M2ZjNjAyYywgMHgwOWNkOGY3OSwgMHg5Nzg2MGM5NiwgMHg0OGZmN2ExNCwgMHgyY2VlNDk3MiwKKwkweDE2YjUzZTQ2LCAweGViODE5NDdkLCAweDg1ZmQ1MGRhLCAweDNjZTJiM2EyLCAweDA4MzljYzhmLCAweDc4N2U3ZWViLAorCTB4MjNlNzU4YmMsIDB4YWZmMmFhNzMsIDB4NzljZjVjNjYsIDB4ZWY1MGVmOTQsIDB4NDcyMThjZWYsIDB4ZmZlODUzZmUsCisJMHgyZjVjNzk5MywgMHhlNTE1OWZjMywgMHgwODkzOGQ5MywgMHg5NDlkODFiMywgMHhmMzc2ZjIwYywgMHhkMWE3ZDVhNCwKKwkweDQxYWQ5MGE3LCAweGJiMjNlNTA5LCAweDE0NGZjZjA4LCAweDc4MjNjODI4LCAweDFlNDRmYzRhLCAweDUzNzk0N2IyLAorCTB4ZTczM2U0NTQsIDB4MWYzNjc4YzEsIDB4ZjE5MTRlZDgsIDB4Nzg1YWM1YjEsIDB4MTllNzljMzMsIDB4MGM3YWMwYzMsCisJMHgzMjgyZTk3NywgMHg5MmYwYzFlYywgMHg5ZTYwNTE1NywgMHg1ZmIwNzk4ZSwgMHhiNTFiMzc4MCwgMHg4ZTkxNjVmZSwKKwkweDlmNzE3ZDkxLCAweDM3OGJlZWJhLCAweGRkYTc2ODI5LCAweGYwZjVjNzk3LCAweGVjYmI4MDk2LCAweDdmZmEwMzEzLAorCTB4NDAyN2Q5NGEsIDB4ZmQ4Yjk5NDcsIDB4YWJlNDBmOTIsIDB4MDRhYmQxYWQsIDB4ZDJlMTlmYTEsIDB4MjIzN2VmZGYsCisJMHgzYWM1ZGY2MSwgMHhmZDYzOWY1MSwgMHgyN2JiMDg5YSwgMHhiODZiOGM0NywgMHgxOWJjMjdhNCwgMHg2YTRhYmQ5YSwKKwkweGJkMDZmY2M0LCAweDYxOGNlZmU0LCAweGM5ZTY5NTc3LCAweDQ2NjZiOWZjLCAweDFlNzc4NmVkLCAweDVmMzA5Yzk2LAorCTB4YmE0ODYzNjYsIDB4NGJmMWM2ODcsIDB4YzJkYmQ0MGEsIDB4YjFhYjNlYmMsIDB4ZjAwODVhNTMsIDB4M2E0ZTc5MWQsCisJMHhhYzljNzUwNywgMHgwOGZlYjBjNSwgMHhhMGU1ZDkzYywgMHhlZGU3ODU2NCwgMHhjNDI1MDY4ZiwgMHg1NWVhZGQ4MywKKwkweGRhZTIyMjU4LCAweDUyYmRmYzRiLCAweGY1N2RiNGYwLCAweDg2NGZiMmM0LCAweDhhYmRiYWUxLCAweGE1OWJlNzE3LAorCTB4Y2FkZjliZjIsIDB4MmIxZjNkNzAsIDB4YmQ0MmE5YmYsIDB4YzMzZDFiZjYsIDB4OWM2ZjhjZmIsIDB4OGM1YTcyNGEsCisJMHhhOWE1YTg3ZCwgMHg5NzNjY2Y1YiwgMHg3MjkyNjdmMSwgMHg5ZTkzZjExZSwgMHgyY2UyZGRiYywgMHhmMTdkZmUwMCwKKwkweGQ2YzM0YjM2LCAweDQ3NzY3NDE4LCAweDc1YjNhNzFlLCAweGUyZGVhYTk5LCAweDczZDc0OWViLCAweGVhZmFhOTNjLAorCTB4MWZhNzJiMWIsIDB4NGNhZDZlNTUsIDB4Y2UzYWIwZTEsIDB4MjRmMWVjY2EsIDB4OGY1YTg2MzcsIDB4Zjk4ZTNkYWQsCisJMHgxOWJiZDYyMiwgMHhmZGUyYjFlNiwgMHhhYzJiNzdjYywgMHgyMWYwMzc4OCwgMHhjYzlmMzRiYywgMHhlN2Q2ZTllNSwKKwkweDQ2MzdlNGRkLCAweDNlMjBjZmQzLCAweDVjOWJkMTAwLCAweDFkZDk3NDg2LCAweDMxYmEwNjZhLCAweDY4MmEzM2NkLAorCTB4NWJmZWRhMmYsIDB4MjQ3Mjg0OGIsIDB4Mjg0YWI1OTMsIDB4YjVkOTZkNDcsIDB4ZTdkNDY1ODcsIDB4MWJkOGFmYjIsCisJMHgxMmJlOGVjMywgMHhhOWU3YTgzZiwgMHhjZjgzMjVkYSwgMHgyYWJiZjljZiwgMHgwYzBkNDNiMiwgMHhlNWM5YjZlOSwKKwkweGE5ZjllMWI0LCAweDY0NzRkYTc0LCAweGUyMmZhYTc4LCAweDNhMGJkNzNjLCAweDdhYWQ2NzJlLCAweGQ2MGFkM2U0LAorCTB4ZWIyNTY1NDksIDB4ZDYzYWYyYTIsIDB4NTk4N2E1NGIsIDB4OTlhYjJjNjUsIDB4ZjMyZDY1NDIsIDB4Zjk4ZDM5NTIsCisJMHhhZDYzYWNhOSwgMHg5ZDY0Y2U1NCwgMHgyZWIzZDY1NCwgMHhhM2JmYzEyYSwgMHhlNGFjY2JkMiwgMHg3NjA4ZGU4NywKKwkweDk5NzM5NjBjLCAweDk4NWJjYTk3LCAweDQ4MmRjYTlmLCAweGZlZjAxM2RmLCAweGRiZTA5NWExLCAweGJiOTUyNzU5LAorCTB4NDU5ZGZmODAsIDB4NTMzMTFmMTgsIDB4MzllNDE3YjksIDB4M2M4MzZmOTYsIDB4ZjIwYzMyYzcsIDB4ZjhjMjY5ZGMsCisJMHg4M2NhOWI4OCwgMHg0M2NhODUwMSwgMHgwZjJhNzI4MSwgMHhlZmQ0M2MwNywgMHhjYThlYTA2OCwgMHg5NTJmMDFlMywKKwkweDU0MGQwMjI3LCAweGQ0N2MwNTc2LCAweDMxNjA1NGVmLCAweGZjMDVlZjk1LCAweDU4MWZiZTU0LCAweDgxMDdlNTRkLAorCTB4MTJmZjk1MjAsIDB4OTE2NTRmNTgsIDB4ZTIwYWU0MTEsIDB4MTYzZGRkZGIsIDB4OGY5YzlhZmQsIDB4ZTgyNzFlOGQsCisJMHg4NGYzNGZhMywgMHhmZGQxZWJmZiwgMHg3OGYxZTJmNywgMHg4M2JhM2E4ZSwgMHg5NGFlZDViMSwgMHg2ZTZkMWU5MCwKKwkweGU1MDQyNzlkLCAweDc0OTM3NzQ2LCAweDRlZWI5NDM3LCAweDY0ZDYzYjcwLCAweGQ5M2IyNDRiLCAweDcyNGFiZWQ2LAorCTB4YTRiYmI4YzIsIDB4OWMwMjdkNmUsIDB4MGZiY2RlZWQsIDB4NGY0MTk4ZTcsIDB4NmI2NWVkNTQsIDB4N2Y4NDE0MTMsCisJMHhlODE5YTRmZiwgMHhkZmMxYWI3MCwgMHg3ZmRhMTViYiwgMHhjZWJmZDJmNSwgMHhhZWNlODMzMSwgMHhjN2Y1M2M0OCwKKwkweGVkNGMzOGQ3LCAweDY2YjIwZTkzLCAweGYyMDdjMDJiLCAweDI2OTkzZjRlLCAweDEwYTA3NWYxLCAweGM3ZDJmZTNlLAorCTB4ZTNlNGQ2NzMsIDB4NzkxY2I5M2EsIDB4MzY4ZTA1ZDUsIDB4NWIwZjE5ZmEsIDB4ZGIxOGNmYzgsIDB4MGVhYzY2N2UsCisJMHgyZGFiNDllMCwgMHg0NzFmZTg2NSwgMHhmNWI4YTNmNCwgMHhkYmEyZmQ1MCwgMHg1NjNhZTdkNSwgMHgxZTIzMzdhNCwKKwkweGVlMGE3ZGQ2LCAweDY1ZTUxMzg5LCAweGNmOGM1OGY3LCAweGJiYWI4ZTQ1LCAweGZlOTlmOWJhLCAweGY2NDdmMzMyLAorCTB4NWUzMzJlOTMsIDB4NTRlNzkxNTEsIDB4NzQwM2ZmZGUsIDB4ODZkZjRkMWUsIDB4YWViZjFmNGIsIDB4MzU5OGY4YTMsCisJMHhmNmZhZjUxNSwgMHg3YTc3MmUxNCwgMHhkYjQzZTNiMywgMHg1M2RiZGQ2MCwgMHg5ZjIxYmMwNSwgMHg2MTBlYjVmNiwKKwkweDhkYmFkN2Q4LCAweDZmYzc2NGI5LCAweDFkMzZmMzhmLCAweGQxYmZmNmMxLCAweDY5YTBkYjI5LCAweDYzNmZiYzdiLAorCTB4MTRmOWMxMzEsIDB4ZWE5NzU5YWYsIDB4Y2E1ZWEzNzcsIDB4YjFmYWUwNDksIDB4OWM0OGYxY2QsIDB4ZmZmZjgyMzMsCisJMHhlNmVlZTQyMiwgMHhhZGFlYmVjYSwgMHhkN2FkNGZlOCwgMHg2ZTc4MDJiMSwgMHgxYjA1ZmFkYiwgMHg0YmNlMzBkYywKKwkweDAyMmVjMDliLCAweGMyZjI3OTM4LCAweDllZDAwNTBkLCAweDUxMzc0MWJiLCAweGFlMWU2NDJmLCAweDBiNGRhNWUzLAorCTB4ZTEyOGQ5NWYsIDB4MGI1MzIzYjgsIDB4MjEzY2RjNjEsIDB4NzU4NjczM2YsIDB4NzQwOTVkOGYsIDB4YzZkNDY2ZGUsCisJMHg2M2Y1ZmExNSwgMHg4NTk3ZTczZSwgMHhkMDE5Y2MzMCwgMHg1ZTIyMzliZiwgMHgxYWMwZDViMSwgMHg0MTY2ZjUyMiwKKwkweDM1Yjc5NzNlLCAweDRjMzRiYzQ1LCAweGQzM2NmMWUxLCAweGUzZDBmODg4LCAweDExYWFmZmIwLCAweGJlOTNmZTNjLAorCTB4OWZmMTRjZDYsIDB4OWU3ZmM3NzQsIDB4ZTllZDBlOWMsIDB4NGQwNTNhMWQsIDB4NzRiNmQ5NWEsIDB4OWVmZDAxOGQsCisJMHhmMjI3NThkYiwgMHgzZjg5NTZlMywgMHg3NmU2Y2MxZiwgMHhiOTJjMTgzMiwgMHgxZWZjMjI3MywgMHhmMmNhMzdiMCwKKwkweGY2YTdlMjIzLCAweDcxODRhMDg2LCAweDRiMTFhYThjLCAweGE3Mzc4YzI1LCAweDMwOTNlZTNiLCAweGUwZGU5MWZlLAorCTB4ZTg4OTdjOTMsIDB4ZmRhOWY5MjcsIDB4MmI5ZjIyYWUsIDB4NmY2N2Q2MWYsIDB4ZjczNWU3ODQsIDB4M2MwY2JlYjEsCisJMHg4MWI3OTg1NywgMHg1NjY0MDlmMiwgMHhlY2RmMzkxNiwgMHgyNzg3OGUyMiwgMHhiNDNkMjA2NCwgMHg2OTFhZDdkZiwKKwkweDlhZjhkMTVkLCAweDk5MWVhZWU1LCAweDFjZTA3YzNmLCAweGNjYmZkYmEzLCAweGZkYjhlN2U3LCAweGY5MDI5ODcxLAorCTB4MWY4ZjEyNjAsIDB4OTMzOTc4OWMsIDB4NmRkOWU1ZWMsIDB4MjNmNDFlZjEsIDB4YjIzOTNjNGYsIDB4MmFhN2UwOTYsCisJMHg5ZWZmNjgzYywgMHgxYTYyYjk3OCwgMHg5YTlmYjM5NiwgMHg0ODRlZmQ0OSwgMHgwNWM2MzBlYywgMHhiYjc1M2Y2NiwKKwkweDc5MzlmNThjLCAweGVmMWMyZWIwLCAweDcxZTg5MWI0LCAweDg5Zjc1M2Y2LCAweGM1YTkxZmU3LCAweGYwNWQ3MmY2LAorCTB4MmU5ZmQwZWYsIDB4MDEyZDdlNmYsIDB4ODkxNTA1ZTMsIDB4Nzk2MTY0NmYsIDB4NmFiZGQ3NDIsIDB4ODM3ZmNjM2YsCisJMHhkNTFhZmQ5NSwgMHhkYTQzNzdiNSwgMHgzZmMxZDRkZiwgMHg2Yjk5M2NlNiwgMHgzNzhjNzhjMCwgMHhmM2NlOTczZiwKKwkweGYwMzFlNjI2LCAweGY5MmYwNzdjLCAweGJhM2I5NWI3LCAweDhlOGIwMWRlLCAweDViZDlkNzVkLCAweDllYmFkNzgzLAorCTB4NTg4M2Q2NWQsIDB4MzQxNTg3NTYsIDB4NjFlZDU5YTMsIDB4YTcyYzQxZWYsIDB4ZDE2YmY5NzUsIDB4YTBmYmE5YmMsCisJMHhkZDk2MjBmNSwgMHhjNDVlN2QyMywgMHhlZGZmYWJmZiwgMHgwNTVlMzc5NiwgMHhhYjYzYzQ3OCwgMHhlNjg3NjhhYywKKwkweDYzM2RkZTNmLCAweDBkMmZjNTFiLCAweDYwYTFmOTBjLCAweDhmNTViZjkyLCAweGE2ZjY2YzA0LCAweGY2Nzg3Y2EyLAorCTB4ZmE4NzU5MTksIDB4OGQ2YWU0ZGQsIDB4NGY3NGQ4NDMsIDB4NGNlMzBlYWUsIDB4MTc1YTUzZGIsIDB4ZTIwYmJlZDMsCisJMHgyOGYxZTIxOSwgMHg4YmE0MjFlOCwgMHgyYTZmMTQ4MiwgMHgyNWYwMTNmMiwgMHg4MjlkYzM5ZCwgMHg3ZTI5NGQzZSwKKwkweDhiZDYwYTZiLCAweDdlZmU4ZTdiLCAweGQ4NWUxY2YxLCAweDRlMzVhZmRmLCAweGE1NTI3OWEyLCAweDA4Y2RjNGEwLAorCTB4NDJlYzIzYjQsIDB4N2YzM2I3OWYsIDB4OTZjM2UyMDYsIDB4ZjE4YWRmZTgsIDB4Y2UyYTgyYWQsIDB4ZDM5MTJjZmYsCisJMHg5OTZmNzYwNSwgMHgxMDUwOGY0OCwgMHgzZmQ1YmQzZSwgMHhlNmMxY2YwYiwgMHhlMDFiY2ZlYiwgMHhiMDZhMDc3NCwKKwkweDI1YzkzZWRmLCAweDM2N2ZlZTk4LCAweDM5MDYxYzRiLCAweDNmYzJlYjQzLCAweDViYTRlNzhjLCAweDUxY2VjOWQyLAorCTB4ODA2YjZmZDcsIDB4MGVlYzIyZjEsIDB4OTY4ZGM3ZGMsIDB4YmE1NGU3ODEsIDB4ZjVmNjIwZGIsIDB4ZTYwYjI4ODQsCisJMHhmNWQ0ZjFmMywgMHg3YWU3Y2M2ZSwgMHhkNGVkZDYxZCwgMHg2MmY0N2FlMSwgMHg1ZDBmYjAzZCwgMHhmYTIyN2FjNCwKKwkweGQ3ZmFmZWQxLCAweGQyM2IxNGNkLCAweDg5N2U2MzA1LCAweDQ3MjljYzk3LCAweGNlYTE3ZmVlLCAweGQ3MWEzNzEzLAorCTB4NjE1ZmQ2ZmYsIDB4ZTUwOTI5NWMsIDB4NjdmM2FjMDgsIDB4OTE5OTI3ZmIsIDB4ZjFmN2EzNGYsIDB4ZmI4OGJlNDIsCisJMHhmZThjYmQ4MCwgMHhlNzFmNGNjMywgMHhiZjQ2ZTZkZiwgMHgwZDk0ZmU4NCwgMHg0M2JmZGM2MSwgMHhkNDVjNjBmNiwKKwkweDBjOTI2OTY2LCAweDM5YjVmYjExLCAweGQ5OWU5ZWI4LCAweDcyOGZkZmU4LCAweDgyNzk2NjY1LCAweDhiM2RmNDgyLAorCTB4NzJiNWFlNzUsIDB4MGY5ODNlZmUsIDB4ZmQ2MjJiZWIsIDB4NzEzNjE2N2YsIDB4ZmU3YzRlYzAsIDB4ZTI0ZWY3OTksCisJMHg2NzU4M2E5MSwgMHhjZmVhMzE1NSwgMHhiY2E1ZWVjNywgMHhjYzhmY2Q4OSwgMHhjZmViOGMzYywgMHgzZmI5M2Y3NCwKKwkweDdlZjQwNjE1LCAweDNlN2RjZTJkLCAweDc3NjU2ZjhmLCAweDg3YmM5YWM4LCAweGM5YWNiZjJjLCAweGFjNThjODhiLAorCTB4ZDA3YTA3NmQsIDB4ZDk1ZDJhYzAsIDB4YTgyOWQ1YTUsIDB4MjUwOTc0NmYsIDB4OWRhMDY3MzMsIDB4ZjkyM2E0OTIsCisJMHg5YTRhNzIwZSwgMHg4ZDFlZDMxYiwgMHg3ZjgxMmJhMiwgMHhjZGRlN2NmNSwgMHhiMzczYTdjZiwgMHhiMDM5Zjg1OSwKKwkweDczN2NjNTVlLCAweDdhYWNkOGEyLCAweDMzNmYzMDRlLCAweGQwMzI3OWIwLCAweDNlYWQ3MzdkLCAweDhmMWZhMTI0LAorCTB4YjIzMmYxZmQsIDB4MjZmNzBkOTcsIDB4YWRhNzNlMGUsIDB4MTljY2U3MDYsIDB4ZDQxZmE3MjgsIDB4MmFhZjI5NTksCisJMHg2N2EwYWYwYSwgMHg5NGZjOTlmZSwgMHgxZGE4ZDMwNywgMHhjNTMzNjVlYSwgMHhhYmQ2MjMzZCwgMHhjZjZiMDU4ZiwKKwkweDNiZmQ0YWUzLCAweDBjY2U3ODU4LCAweDRjZmFlMGQ3LCAweGE4OTlkY2M3LCAweDMyOTczMzY3LCAweGY2ZThmZjNhLAorCTB4ZTdiNTQ3YTIsIDB4NzhlZjdlNGEsIDB4NTBiMWEzOGMsIDB4ZTc5YzA3ZjgsIDB4NWFmNmM3NGMsIDB4Y2ZhM2VmYjQsCisJMHg5Y2JiYTU1NSwgMHhjMmY1YjE2MSwgMHgyZjVjMDUyMywgMHhhNzI4MjRlNCwgMHg5MGFlYzhlYSwgMHg2NmYwNGVjOSwKKwkweGZkMjNjM2NiLCAweGI5ZjJlZmE0LCAweDU3ZTUzMDFmLCAweGVjNDNkMjE2LCAweDFmMDg3MzYzLCAweDNmNWRjMjU1LAorCTB4YTg3Mzg2MjksIDB4ZmJhMWQzZWUsIDB4N2UzZGRlYzIsIDB4NTA5OWU5ZTAsIDB4N2JmNWZkNGUsIDB4ZGZhMGM3NGQsCisJMHhlMzJjZWZkNCwgMHhlYjM3N2ViMCwgMHhhMDgxODE5ZSwgMHhmOTAzNjFlMCwgMHg3Y2JlNmI4ZCwgMHg0NDAzMTVhNSwKKwkweDQxNGM4ZGNkLCAweGUzY2VhYmJkLCAweDZlZmFlMDI4LCAweDI1ZTQyMThmLCAweGIzMmM1YWY5LCAweGQ5MDcyNDZkLAorCTB4ZjQxMTRiYzUsIDB4ZTg5ZTkwMDIsIDB4NmYzMWI3ODcsIDB4OTFmOTJiNjMsIDB4ODYxMmZjYjYsIDB4YWNjZDNjNzksCisJMHg5N2QyMGVmMywgMHhlMzBjOGQ2NywgMHgzODM2MzdhZiwgMHhmZmIwNTUwZCwgMHg4NjlkMWIxYiwgMHgyMTlmNzhmOSwKKwkweDIzYjQzYWIzLCAweGE4NTA2YTZlLCAweDg1NDZhNmZlLCAweGZkNzk5YmQ3LCAweGQ1MGYwNmRjLCAweGYwZjQ2ZGNmLAorCTB4NWJkNDBiN2EsIDB4ZDQyOTBmMzAsIDB4NmY3MTgwMTUsIDB4NzUzYWE0YjYsIDB4ZThkMDFmNzgsIDB4NGMxN2VkZTUsCisJMHhmYzFjN2VkNCwgMHg4YzI3Y2MwMSwgMHhiYzkxMGI4ZiwgMHhmMWQxZWQ2ZiwgMHg3YzdmMjM3YiwgMHg5YWI1ODI0OCwKKwkweDNiMGVjYjEyLCAweGU4Zjc3ZjExLCAweGNjMTc1MDE0LCAweDJiMzMyZDk0LCAweDc4MzZjZmMwLCAweDdmNjg3YTQzLAorCTB4MTAzMjg1OGUsIDB4MzYxN2JiOTEsIDB4N2VhMTBiNzksIDB4ZTJiNjQzYjcsIDB4N2I4Mzc2ZmUsIDB4YzE0N2Y5OGIsCisJMHg5ZGUxMzJhNSwgMHhiZGRlMDBmZSwgMHgzYWY3NDFkOCwgMHgzZWZjNDU1YiwgMHhmMTRjYzRiOCwgMHgyODc1YjA2NiwKKwkweDY0OTZjY2RlLCAweGI3ODYzYjBhLCAweDg2YjAyYzc3LCAweDM5MDMxZWQwLCAweDdiZDhlNzQ4LCAweDAwNzY0YzhmLAorCTB4NmVhM2MzYzgsIDB4ZTY3NjhiYjQsIDB4Y2E5ZjE4MmIsIDB4YjdlNWFhNWMsIDB4YWEwYjg1ZjQsIDB4NjY0NmJjNjgsCisJMHhiZWJkM2Y0NSwgMHhiY2Q3OGY5MSwgMHhhMWQyMTc1MywgMHg3MWI5NjU1ZCwgMHhmMzQxZDIyNiwgMHgzZmEwYTYwZSwKKwkweDUzYzJlY2ZiLCAweGVlMTBjM2I1LCAweDNmMmUxNDUwLCAweDc5YTE3MmI0LCAweDljNDc1M2UxLCAweGNlYmYxZmI4LAorCTB4NzlmZDQwNWEsIDB4NWZkOWFmMWMsIDB4MGQyZjVkYmQsIDB4Yjc5ZDMzZjAsIDB4MGM3ZTQwNzMsIDB4NjFjYTM3OTYsCisJMHg1ZTYzMjcxYywgMHhjMWYxODJiNSwgMHhjNjI3ZDg3NCwgMHhiYzhjM2JmMywgMHg0Y2E3NzgzZSwgMHgwYmU5MmRmNywKKwkweGY0NzViMGU1LCAweDBiNjc3ZjAwLCAweDFmMjNhNjE0LCAweGQxN2M5MTI2LCAweDlkYzhkN2YwLCAweGMxNzlmODVhLAorCTB4MzJlZmMwYTcsIDB4OWRiODJiZWUsIDB4ZDE2NzNlNTEsIDB4OTAzZjZkNzYsIDB4NTc5NDNhOTMsIDB4ZmFkYWVkZDksCisJMHhlM2ZhOGI1YiwgMHg0NDNjMWEwMiwgMHhlN2U2ZDllMywgMHg5ZjdhMmY3MiwgMHhjNzBhZmIwMywgMHg3NGJlZDExNSwKKwkweGQ3Mjg1ZjdjLCAweDcyZDhiZWEwLCAweDFiOGJlYTgwLCAweDQ0ZTljNTY1LCAweDBhNzlkNzc5LCAweDUzYjQ1ZmY3LAorCTB4ZWI4MDYxNjYsIDB4NDRjZDk2MTcsIDB4YTRkZmFhN2EsIDB4ZjVjOGYwYTMsIDB4YzJlNDhiYWMsIDB4YzZhZGY2OTUsCisJMHgxOWY3YTIzYiwgMHhmMmVmYmZiZCwgMHhhODhlNWNmNSwgMHg2NjEzZTBmNiwgMHgxZWRiMDdiMiwgMHg5ZWYwZThiNiwKKwkweDc4YWRlYzE1LCAweDU1ZGMyYjhjLCAweDQwMmMxZDU0LCAweDFkYzg0MDdiLCAweDk3M2QyNWMzLCAweGEyMTZjZDI3LAorCTB4NTFlZDgzNTMsIDB4YTFmYzY0NzcsIDB4MTNmNTU0NjUsIDB4ZDg2ZmQ0MDUsIDB4NmUzYzc1OGQsIDB4OTY4ZWZiNDEsCisJMHhlMzE3M2Y2MywgMHhlNmQ2ZWE0ZCwgMHgxM2RiNWRlMywgMHhhNjNmOTUxZiwgMHg3MjliYzdjZCwgMHg3ZjJhMzMyMSwKKwkweDdmMmEyZjJjLCAweDdkYTY5NDZjLCAweDU0NWM3NWFhLCAweDUxYjVkOGZlLCAweDFhMzU2M2Y5LCAweDk2N2I5Njc4LAorCTB4Y2FmNWZmYTYsIDB4ODZmODFhNGQsIDB4ZmQzNDNiZjIsIDB4ZDZlZTc4ZTcsIDB4Nzc1NGRmYjQsIDB4NjZmZGE2YmYsCisJMHg3YzBkNGFlZiwgMHg2YjVmYzM2YiwgMHg2YmU2ZGZmYSwgMHhiMWRmYjRkNiwgMHhmNjlhMjdmOCwgMHgyZDQ5ZmY2OCwKKwkweGY5NzAxNTc3LCAweDNmZWVkOWJlLCAweGQwNmMwMTQ5LCAweDNkZjc5MWY3LCAweDI4ZGU5OTZhLCAweDdiOWU0NmY3LAorCTB4YTdiNzAyNTIsIDB4YjlmZGZiYTIsIDB4OGJmYmQzODAsIDB4MDU4ZjlmMTIsIDB4MWM3ODlhZWQsIDB4ZjEzNWQ4ZjMsCisJMHg4NTQ1NzBiYSwgMHg3MWM2MWJiOSwgMHgyMWRmOTUxYSwgMHgwZWUyNjJkZCwgMHg2YmI2YmZiZiwgMHgzZmY2ZDllZSwKKwkweGJjNjBmZDBlLCAweDFiNWNjNGE2LCAweGZmOGMzYmVhLCAweDM3Yjk0MGZhLCAweDVmNzQ3NDg3LCAweDRhYmY1YjYxLAorCTB4NjliODNkMjIsIDB4NWNhYjhmMTUsIDB4YWYzYzUyMzAsIDB4OGVhYzFkN2YsIDB4ZGM0NmZiYzYsIDB4ZWNlYmE5NmIsCisJMHgyZGE0NzExMCwgMHg4NTQyNDcxOCwgMHhmZDQxOTllNCwgMHg3ZWYxYzY1NiwgMHhlMzU3NGQzZiwgMHgzNzFhM2U4ZSwKKwkweGE0MThkY2EzLCAweDdlODViY2ZjLCAweGNkYzBlMzA5LCAweDdiYzU2NjNlLCAweDAyY2I3NDkzLCAweDA2OWJmZjlhLAorCTB4MjY1ZDk5MjUsIDB4YjAxNmRhMmUsIDB4NjdjYzBmMzMsIDB4NjM1YzE1NWYsIDB4NTI3ZGJkODQsIDB4YjNkNGY3ZDAsCisJMHhjZmRkYmNmMCwgMHg1YmQzMWUyOCwgMHgxODUzZWRmMCwgMHhlMTQzZTk4ZiwgMHgyMTlkNzQwOCwgMHhmNzNmM2M3MywKKwkweDVmY2ZlZWMwLCAweGU2ZGFmOTgxLCAweDVjYTE5N2E1LCAweDVhY2Y2ZThkLCAweDQzZWJmN2JlLCAweDZlN2Y2OTk3LAorCTB4ZGUxZjViZDksIDB4MWZlN2I5N2IsIDB4MjViYTc1ZDgsIDB4MzhjODdkYTIsIDB4ZjMyNjQzNjksIDB4ZTAwMWQwNDQsCisJMHg4MGZkZTYyYywgMHhmOWY1Yzg1YywgMHhjNTIzMGFmMiwgMHhmYzAxYWViMSwgMHhiZmJlMDIxNSwgMHg4OWNmZjhhYSwKKwkweDNmYjllMDNiLCAweDQ0ZWVmYjM5LCAweDY1ZWExZDNiLCAweDg0N2U4N2FjLCAweDlmZTUzZmQ3LCAweDljOTJmY2EzLAorCTB4YTNkZjYwNTEsIDB4OWIxNzFkZmQsIDB4NzIxNWM3NmUsIDB4OGQ2ZDk1YmEsIDB4NmEwNzE4YmQsIDB4ZDEzYTM0NGEsCisJMHhiYjMyY2ZjZiwgMHgwNzE5M2VjYSwgMHg3ZWUwNmQ3NCwgMHhmZWZmYjQ3NSwgMHhkZGJmYmY1YywgMHg5MTc3ZmU0OSwKKwkweDk0NGIyNzE4LCAweDllN2YyYjdhLCAweDRlNGM4Mzk5LCAweDMxMTRmNzE3LCAweDZhNGZhMWYwLCAweDY1NWU1MDk3LAorCTB4OGQzZjk0MmUsIDB4ODlmZDhiZTQsIDB4YTQyMzhhNDYsIDB4YzFkYzQ0NWIsIDB4MTcxMzU4YjIsIDB4ZmIwNmUzNTAsCisJMHg5MDk1ZWYxMywgMHg0YmMzZDNlZSwgMHhmMThmOWUyOCwgMHg1YzZmMWMwMiwgMHgxMWQ2OTNhMSwgMHgzMmM4MmYxZCwKKwkweDg2YmFkM2U3LCAweGQ3ZjU5ZjFlLCAweGU2MzE0ODI3LCAweDFhODc1YTg5LCAweDI3OWU4ODlmLCAweGVhMDRmNjg0LAorCTB4NjRmMTY1OTksIDB4N2JlZjQ0NGYsIDB4Nzk1NTYxNDksIDB4ZDdlNDcwZTEsIDB4NTFkMzkzZGUsIDB4OTAzMjlmN2UsCisJMHg1ZThhMWMzZSwgMHgxNDNjY2YzMCwgMHg0MmI0ZmUzMSwgMHhmZTYzZGZlZSwgMHhlNjNkNjQ3OCwgMHhlMzIyODc4NywKKwkweGVmNDFjY2Q5LCAweDJhMGMxMDJiLCAweDdiYjE4NDY2LCAweDc3Y2UxMTQzLCAweGMyNzdjZjk0LCAweDFlYzlkOGEwLAorCTB4ZmU4N2I1MDQsIDB4ZDcyMTdkNWYsIDB4OTczMGQzMDMsIDB4MTlmMjM4NmQsIDB4ODFkYmNiZjcsIDB4MTJkY2IxYWYsCisJMHhkNjdkOTJiMCwgMHhmMDg3ZmMwMSwgMHg5NTI3MDEwYiwgMHhjYTliODBhMSwgMHhkYTg1MDE2ZCwgMHgwOWNhMDdiNywKKwkweDIxZTAyNTdlLCAweDhlYTA0Nzc4LCAweDVlMDJkN2NhLCAweDY4MTlkZmFhLCAweDAxZTdmODIwLCAweDgxOWQ5NTFmLAorCTB4NDZmZjU0YzUsIDB4OWJmMDRmYzAsIDB4YmYwNGQ1ODEsIDB4MDE2MGY2ODUsIDB4NTNkN2E5YzYsIDB4NGFkMDNiYjksCisJMHhlZDAzN2JlZCwgMHgwODFkYmYwNCwgMHhlYzBlMTk1MSwgMHg4MTAzZmFhMCwgMHgwNjBmODI0ZSwgMHgyODdjMTE3NiwKKwkweDcwZjgyNjEwLCAweDQ3OTUzMGUwLCAweDdmNTQ1ZDAzLCAweGMxMDFmMDNjLCAweGM5M2VlMzM3LCAweDE1ZGY1OGFlLAorCTB4NGY4NTc4YzAsIDB4Zjc3ZGEyNzYsIDB4MTVhMTZmYWMsIDB4N2NmYjZiZWQsIDB4NzljNTE1OWQsIDB4MDRiNzRmYmIsCisJMHg4ZDFkMWNlMywgMHhlZjEzMWVmYywgMHgwNDBlMzEyMywgMHhlZDA4Njg3NiwgMHg2N2ZjZmIzOSwgMHhmNmE1NGM4ZSwKKwkweDE5YmVkNGI5LCAweGM0YTcwNDg3LCAweGFmZGI4MmI2LCAweGZhOTE5OTZjLCAweDBhMjEzMGQ5LCAweGRhNThlYjllLAorCTB4ZGMwM2QyMTgsIDB4ZWQ0ZjE4NWEsIDB4ZjkzMjE1YjYsIDB4ZmNlOWNmNmQsIDB4ZWVkYzg1MjksIDB4MzM2ZGY5MjIsCisJMHhhNTQxZmI3MCwgMHg1Yzg1MzU4MywgMHhlNDI5YWVkZSwgMHgxNjFmNWNmNywgMHhjYTRhNzNmMSwgMHg5ZTQ3YWQ4YiwKKwkweGE2ZWQ1NDJkLCAweDdmNzE4N2Y1LCAweDNmYjA3OWY2LCAweDU1YmNlZjVjLCAweGI1OTdiYzY2LCAweDcyYjNhM2RkLAorCTB4Y2JkZjkzN2IsIDB4YjhiZjYwM2EsIDB4YzUwZjU4N2UsIDB4NmU3Y2Q5ODUsIDB4YWRlNmRiMmYsIDB4ZTYzOTc1YTUsCisJMHhkNmVkNDhkZiwgMHhkMDUzNDdhMiwgMHhhZmY3NmY0ZiwgMHg2ZGViNDM5YSwgMHhkOWFlMjk5NCwgMHg4MjkwM2JlZSwKKwkweDg5Y2Y2Y2Y3LCAweGYwZGIyNzdjLCAweDY0YTg2Zjc4LCAweDhkOWU3YWYwLCAweGUzMDc3ZjVhLCAweGVjMDM4MzdlLAorCTB4ZWM2M2Q3YTUsIDB4NDk2ZWQzMDMsIDB4YzcxMTMwY2YsIDB4MzMxY2Q0N2IsIDB4ZTgyOWQ3OGUsIDB4ZmU3MTIxZDcsCisJMHhjNGNhMGY2MywgMHhiMDMwMmY3ZiwgMHgyZGI5ZTBmYiwgMHg1MTA1ZGY2MCwgMHhiNmJmNTQwZSwgMHhiZDU1ZTMwMiwKKwkweDI4OWRiZTg1LCAweDhlNzc5ZjM3LCAweDljMDMyMDNmLCAweGNmYzdjNzVhLCAweDgyYmYyNTVkLCAweGY3OWMzNDc2LAorCTB4YmY1MDJkZTcsIDB4NWU0ZGJlZTEsIDB4NGRiMGVhNWMsIDB4NmVjODM1Y2UsIDB4Y2FkZmYzZWQsIDB4NDM5N2Y4YzAsCisJMHg1YThmOWVkMiwgMHhmOWY2MmRiZSwgMHhiNzhmODc4MiwgMHhmMTRjOTU2NSwgMHgzNzhhZGI2NCwgMHhiY2Y5MDc1ZCwKKwkweDMzZmY5MWJiLCAweGMzOGEzZThiLCAweDVjZGU0YzMwLCAweDg2NDUwZWE3LCAweDM1ZmM5ZTYzLCAweGZmNzcxN2NlLAorCTB4Y2Q0MjNhYTYsIDB4ZGYzYThmMjYsIDB4NmFlZjljNTgsIDB4YjFlMjM0ZjEsIDB4YzYyZjliNWEsIDB4Mjc5Mjg2YmEsCisJMHhiZjIzOTI1NywgMHg4MWVmMTQyOSwgMHg5NDJjYjE2NCwgMHhiODE5Y2YyMywgMHhlNDllMGFkYywgMHgwNTI1MjRmNiwKKwkweDhmM2MxYTRkLCAweGU2YTAyZjlhLCAweDBiZTc0NDBmLCAweDI5ZTA1ZWZjLCAweGRlNjJjNGNiLCAweDRmZDY3ZWU3LAorCTB4ZDczYTQxYmYsIDB4YmQxYjNjMTcsIDB4OTJlMzY3OTQsIDB4MzU4NzQ5MzEsIDB4N2ExMmQ4MTksIDB4ZGUyYWE3ZWYsCisJMHgzZDA2MjZiYSwgMHgyODUzZTVhOCwgMHgxZmMxMDBjNywgMHgyZTcxMzIxNiwgMHgzOGY4ZWE5YiwgMHg2NGNlM2UzYSwKKwkweDJhZTA4MmI2LCAweDQzMTgzNThiLCAweDMzZTVhYjVlLCAweDJiN2Y5YzYyLCAweDc1OWI3NGU0LCAweDg3MGRjZWRmLAorCTB4MWE4ZjdjZjAsIDB4OGI2YTM3MjgsIDB4ZmQwMWI0MmUsIDB4M2QwOWUwODQsIDB4N2Q0Y2Q3YzksIDB4MjI1N2Q2ZTcsCisJMHg0MTE3ZjVkNiwgMHhhMThjNWI5ZiwgMHg2ZTg3YmM2MiwgMHg1MDRhZjE4NywgMHg5NGJmMjJhZSwgMHhkNTgyZmM1MCwKKwkweDdkNWRlMDQ3LCAweDFkODQzZmVlLCAweDc1YzVmY2YwLCAweDNjZmY3NDI5LCAweGRhMWM2ZDZmLCAweDRjY2NlZDQ3LAorCTB4ZjgzMzYwZjQsIDB4ZDA0NmM2NTMsIDB4MzJlOTBkODMsIDB4OGIzODdkMDYsIDB4ZmMwZTM0OGMsIDB4ZTIyNmFhNTksCisJMHhjYmQ3MGNiZCwgMHg2MDk3MjgzNSwgMHgyNjE2ZmJkZCwgMHg5OWFjM2U5MSwgMHgzMWFjZGVmZiwgMHhjOWY2NTcwMCwKKwkweDY1YjJjZjk0LCAweDljZDNjZjI5LCAweGNhM2FlZmY0LCAweDMxZmI3OTEzLCAweGY3NWRmN2VlLCAweDlmYmQyZDUwLAorCTB4NjdjYTIxOTQsIDB4YjI4M2NmZDEsIDB4YzI1MzNkNzIsIDB4MGI5NTJlNzAsIDB4OTliZjE0MmQsIDB4MTMzZTQxN2MsCisJMHg0ODUxYTdlOSwgMHgxN2ZhM2M3YSwgMHg2ZDczNWUzYywgMHgwZjc5YWNhZiwgMHhiNjhmNTI2ZCwgMHg4ZjU0NjAzZiwKKwkweGI3NDY0Njc2LCAweGVmM2VkZWI2LCAweDYxNTNkM2NkLCAweGZjYTVmNjllLCAweGJmOGJmNmUxLCAweDcwNzA4MjNiLAorCTB4MjRlMjhlOTUsIDB4NTA2NGZiZWEsIDB4NGRmMTQxOTMsIDB4Zjk4MTk4MzksIDB4OGNjYzFiOWIsIDB4YmU2ZGI5ZTQsCisJMHg2MGYyOGFkOSwgMHhjOTNjN2E3ZiwgMHgyY2RiZjZiZiwgMHhjYmFlODc2NCwgMHgzYjQzOGE2ZiwgMHg1NTZmMzRkOSwKKwkweDhjMjM5NjBhLCAweDNiMThhZGMxLCAweDJkZDVlNmJkLCAweDkxMjdkOTM3LCAweDU1ZjM1NWJjLCAweGVjMWNhYzgyLAorCTB4ZGM4ZGJiODEsIDB4ZjczZTA5YzgsIDB4ZTUxOTU0ZjQsIDB4OTk2N2NmMjUsIDB4YTc5NmVhZjQsIDB4YWRkOGY5ODMsCisJMHhkNGUxZDY5NSwgMHhmOWJlNGNiMSwgMHhiYTc2Zjg3ZSwgMHhiZWI4OTZiNywgMHgxZGExMWE3MCwgMHg3Y2EzNzllMCwKKwkweDdiNDExNWQ3LCAweDNmNzA1YTQ2LCAweDljYjY2ZDM2LCAweDZiN2NhNDY5LCAweGY5ODIzMjRjLCAweGNjZmQwYjBkLAorCTB4NjU4ZGY1ODgsIDB4NTczZTQ4ZTYsIDB4ZjJmYmU0ZjksIDB4ODdjNjNjN2YsIDB4MGU1OTVmODcsIDB4MmJkYzY5NWMsCisJMHgzZTQxN2JmMSwgMHhmY2ExOWJlNywgMHhmMjEwZDM2OSwgMHgxZjhmZjU1NCwgMHg4YmZjZTAyOSwgMHhmNTdhNGI2YywKKwkweDdkYTYzMThjLCAweGNlMjJhYmY1LCAweDllNDZlNTY3LCAweDYxYmIzMmE3LCAweGMzZGQxZDVhLCAweGNjNjViYjA0LAorCTB4ZGM1MTdiZTcsIDB4MjdhN2I1MGIsIDB4N2I3MTNkZDIsIDB4YmRlMzBiMmUsIDB4OGU4MTcwNDEsIDB4ZjhkMjdiYzcsCisJMHhiOThkZWQ3ZiwgMHg5MzZhMWYxNCwgMHgzY2MxMjlmYywgMHhiOWYwOTdjYywgMHgwMWRhZmNmMCwgMHg3ZjMwODk0NywKKwkweGViOTcwZTViLCAweGUyYjdlNDJjLCAweGIzOGMzNTdkLCAweGUwZmQ3MjM4LCAweDc0YjUwNWVmLCAweGE2MWVjOGNjLAorCTB4Nzg5ZTg1ZjgsIDB4ODg4YzY5Y2YsIDB4MWM1YzYzYjcsIDB4Y2ZkMTE3ZTMsIDB4YzJkNWVlNGQsIDB4ZTE2ODJlNTMsCisJMHhjMGQwNjYyYSwgMHgzYzJkNjYzNSwgMHgzNzg1YWFkNSwgMHg3ZDNiNzExNSwgMHgzZjViNWRiYSwgMHgxZDg1YTljMywKKwkweDc0ZTMwN2Q5LCAweGMyZGZjZjNjLCAweGYwNDllMjIyLCAweDQ0N2U1ZWY3LCAweDY4ZGQ2ODFjLCAweDc2NWYzZWZlLAorCTB4Y2I4YTUyZjcsIDB4NzhmMGU1YjYsIDB4MzY5NTYzOGYsIDB4NDJjNTkxY2UsIDB4NzMyZmUyMTIsIDB4ZDYzYzU0NjksCisJMHg4NjNmNjZiZCwgMHhhMzBiZWQ5NywgMHg1ZWZjNDFlMywgMHhhOWExZjAwMiwgMHg3YzhhMzE0NywgMHg5ZTY4ZWFmMCwKKwkweGQyM2RkZTg3LCAweGNlMDhiZGI3LCAweDVmMGM2MGIzLCAweDRkMWRhYmM3LCAweGRhYzUzZjc0LCAweDVjYWY4OGQzLAorCTB4YjA2OTVmMjIsIDB4ZTg4YTdjYmUsIDB4ZjkwZjFkNDAsIDB4N2ZiMTE4MjIsIDB4Zjg0ODg3ZTQsIDB4MzdiZTUxYTEsCisJMHg4YmU0MWU3MCwgMHgyY2ZlYTQ2MCwgMHhmYmQwMzZlOSwgMHhhMWJlNjJhYiwgMHhjZmU1NDNmOCwgMHhhMjhmNzE3MiwKKwkweDg5ZjRkZGU2LCAweDliYmNkNGIxLCAweDcwNWYyMjU1LCAweDRlYmU1NDU3LCAweDE5MzZhMzlmLCAweGFlYmVlN2ZkLAorCTB4ZjhiMWYxOTUsIDB4NjgyZWY5MTAsIDB4ZTU4ODdjZTIsIDB4ODM3ZjkxMDYsIDB4ZTIyYzE4N2MsIDB4YTZmNTg4N2MsCisJMHg2Mzc4NTZlZiwgMHgwNTBiOGJkOSwgMHg2M2JmZGM1ZCwgMHgyMjRmODZjOSwgMHg3M2FjYjdmNiwgMHhiZTVlMDY4NSwKKwkweDkxMGRlMWViLCAweGUzZjc1MWY5LCAweGJmMDgzMDNmLCAweGVkN2U1MTllLCAweDJmOWRiMTUyLCAweDJiY2JmZjRmLAorCTB4NDhjZDBjY2QsIDB4Y2YyODA3ZGYsIDB4MzE5YzE1OTYsIDB4NWVhNzdiZjIsIDB4NDJlYjllMjMsIDB4Y2M5OWZmNjEsCisJMHgyZmQxZjJiMywgMHhmMmUyMTFkYiwgMHgzNzg4OWQ2YywgMHgzMzE1NWIzNCwgMHgzYjk5ODFjNiwgMHg1MGM3MTM1NSwKKwkweDRiNGQxMWUzLCAweGQ4NTRiNjVjLCAweDdjN2Y3MjQ3LCAweDdjYTU2YmMxLCAweDE0ZjllMWRjLCAweGYxYWE0OGRmLAorCTB4MzJjNmNlZGMsIDB4OWM2NDUzZDYsIDB4ZGQ2MjA2NmIsIDB4YzA1NmMxOGUsIDB4ZDk1N2Y5ZTksIDB4YzBjNzQxMzMsCisJMHhmODE3NGRiZSwgMHhiMGZkYzk3YiwgMHg4ZjI0NjdlYywgMHhlYTY4ZTQyZSwgMHhhMzljNDRkYiwgMHgwYjJkYmY5ZiwKKwkweDhiM2U3MGFhLCAweGIwZmI0OWRiLCAweDFlMWFmZjMxLCAweGQxYzZkNDE3LCAweGU3M2RlMjRjLCAweDM0M2JlM2MxLAorCTB4N2UyMjZkZjUsIDB4YjVmMWU1NzIsIDB4ODVkMzM5NzEsIDB4MmZjNjIxYmMsIDB4MWFkZjFhOGMsIDB4NzE4MWZjNzMsCisJMHhhYmJkZjFiNSwgMHg3MTRmMzdiOCwgMHgyZTNhMTg0ZiwgMHhlOWNkZDIzNiwgMHhkZmRkOWQ2OSwgMHg4MzMxNzE4NSwKKwkweDA2NjY3ZmUwLCAweGYyODg5OTNhLCAweGUzZTlmZjgwLCAweGMxYWU3ZTc5LCAweDE5OGY4ZGExLCAweGZhMGJhZjMwLAorCTB4OThiODk3M2YsIDB4M2VmYThhZTQsIDB4MDU5OWZkYjUsIDB4MjdjYmNhMTIsIDB4YTRlOGZkZjAsIDB4NWEyNGYyYzEsCisJMHhkZTQ0ZDg4ZSwgMHg4MTFjYjQ3YywgMHhkMzcwMzRmOSwgMHgzNmNmNWNjMywgMHhlNTBmOGE0YiwgMHhmZTdlZjQ3MywKKwkweDc1ODdmMTdmLCAweGM4YmJlMzg5LCAweDc3OGVjZWFlLCAweDBmNjMyZTlhLCAweDYzODIwNWI3LCAweGYxNzViOWYxLAorCTB4MDc3OGM1ZmUsIDB4OTE4ZWY3N2UsIDB4ZTM5NDRmNjksIDB4Zjg4Y2ViN2IsIDB4Mjk4ZWM1NmMsIDB4YjYwZjMxNzMsCisJMHgxM2ViZjA0ZCwgMHhhN2EyM2E2OSwgMHhiN2QzZGJmNCwgMHgyOWU4MjNlYSwgMHhhMTczZThkZCwgMHgxM2FlOWMzZCwKKwkweDg3Zjg1ZmY5LCAweGQyMjdiNDcxLCAweDMxOGM2ZGI3LCAweGE5ZDc2YWJmLCAweGQ2MDFhZGIwLCAweDZkOGU3MTExLAorCTB4OWZlZTllYzIsIDB4YWRjYzhlZWYsIDB4ZDI3MTg4ZmEsIDB4MzRiMWJlNGQsIDB4YTNmZTdmNWYsIDB4ODdlNWFmOTgsCisJMHhjNDU5YjdjZCwgMHg2Y2Y5ZDRjMywgMHg2N2Y3NmE3NywgMHg3ZjY5ZmEzMywgMHhkNDg3YTEzNiwgMHhmZWUzMzZmOSwKKwkweDE1ZDVmMDYyLCAweDc1ZmUxM2U3LCAweDY5Nzc3Y2ZmLCAweGY5MzM2N2Y3LCAweGY1MzY3ZjY5LCAweDdjZWExYjNiLAorCTB4M2U2YzNmMmQsIDB4NzZjZmUwYmIsIDB4M2Q5N2RlZjEsIDB4NjQzNzdmOWUsIDB4OWEyM2Y3YTgsIDB4YmRjY2YzZmIsCisJMHhlZDJmOTQ2NiwgMHhlODUwYmM2YSwgMHhmYTUxNzNiYiwgMHgzYmU4NDlhZSwgMHg2OTczZjlmNSwgMHgzZGZmMTRiOSwKKwkweDczMjZmODc3LCAweGZhODczZDJjLCAweDkzM2IwOThkLCAweDA5OTMzYjA5LCAweGQ5ZTExMzNiLCAweDBkNTdhNzM1LAorCTB4YmJmYzdhMDcsIDB4OTVjZjM3MWQsIDB4YmVjZmFmNDEsIDB4MWNmOGY0ZmYsIDB4ZjFkOWRmODAsIDB4ZTgzMmI5OGIsCisJMHg5ZWFmZDlhOSwgMHgxZTBiMzM3ZSwgMHhmYmRiZmUyOSwgMHhlOWY0ZmMzOCwgMHg1YmI0MDczZSwgMHhhZGNjY2Y4MiwKKwkweDE4NjkzODA1LCAweGJhZWFjZmQ3LCAweGI5Nzc3OWQ1LCAweDdjYjk1ZGI5LCAweDZmOGYxZTc1LCAweDNkNDU5YzgyLAorCTB4NjdlMzljZDYsIDB4Y2FmYzdmMTgsIDB4MWYzNDliZDEsIDB4ZWVjZjJmZmEsIDB4MDMxMDVmNGQsIDB4N2NiOTZhMmYsCisJMHgxZTdmMjE3NSwgMHg5ODg5YzBhZCwgMHhhZjQ4YzZjZiwgMHhjN2JlYThkZCwgMHg4ZjdkYTc1MiwgMHgyMzY5MjkyNSwKKwkweDJjNzE4N2Q5LCAweDk2Mzk0NTY0LCAweGZiZDBmNjYwLCAweDczMTZkNzk3LCAweDUzMzM3MGJkLCAweGUxNWZiODFhLAorCTB4MWM3OTEwMmMsIDB4NGRjYmRlZjQsIDB4NmI1YzYyZTUsIDB4ZmRiMTJmZTUsIDB4MDllNzlkNjYsIDB4NzlmZjc3ZjQsCisJMHg2OGUxYmNkMiwgMHg3Mzc5YWIzZSwgMHgzYmRlMDZhMywgMHhkZTdkZmVkZCwgMHhiMWZkOWU0ZiwgMHg2NGU1NmRjNCwKKwkweDM2OTk4ZjFlLCAweDdiZGZjOWNhLCAweGEyMmI4ODhiLCAweDNlMTQzYzVkLCAweGZmNzM3NTNmLCAweDFlOWYwMDdlLAorCTB4MGY1NGNmOGUsIDB4MzdiNWE3YzcsIDB4ZmY5YzBkNjksIDB4ZjRkZTk0ZjIsIDB4YzM0Zjg5YzcsIDB4MDgzNWYxMzEsCisJMHhmYmY4NTFhZiwgMHg3ZWE5OWI5MywgMHg4OGVkMWVhMCwgMHhjNTViZTEyYiwgMHhkODVmOWFhYiwgMHhjODBiMzkyYywKKwkweDlhMTk2NzVlLCAweDE0YzY2MGZjLCAweDFlN2JhYzY3LCAweDNkNDhjZmE0LCAweDE5N2JiNDZiLCAweDM0ODZhM2RhLAorCTB4ZWZmOThkYzUsIDB4YzdkMTdmY2QsIDB4MTU3M2RiY2MsIDB4NTI1ZWY4OGIsIDB4MzY3ZGU1M2MsIDB4MWZjOTE5MjcsCisJMHg5MzM0OWZkZiwgMHhiNjU5ZmM2MSwgMHhkNGJjMjM0YywgMHgzZTUxZDUyNiwgMHhlYjE4N2VhNiwgMHgzYTM1N2Y0NCwKKwkweDdjOWY1ZDBmLCAweGU5MDllNTNiLCAweDQwNjFlODZkLCAweGVjYzc5ZmQ5LCAweGU5NWYyMzMxLCAweDVkOTI1NjNmLAorCTB4OTk1NzAwNDgsIDB4Mjk1ZjJlODcsIDB4MjY3NTNkMGYsIDB4MzI0ZjQzY2YsIDB4ZDg1ZTMxM2EsIDB4OTk4YzY4OWUsCisJMHg5YmFkZmU4NywgMHg3MWZiNWRmYiwgMHgxZmI4Njk3ZiwgMHg4ODZlZmYyMywgMHhlNTZjOTdkOCwgMHg5ZjU4ZWVmNywKKwkweGFiNDZmNTAwLCAweDVkZmM1MThmLCAweDYxNWJmZmVjLCAweDRkZmRhOTA3LCAweGY5NDMzZjU2LCAweDRlMmEzN2EwLAorCTB4YTlmNDVmYjQsIDB4NzdlMDdmNWMsIDB4ZTIzMWRjNWIsIDB4MGRiYjVmMjgsIDB4YTNmZGZjZjQsIDB4OTljZjVjYWMsCisJMHhmYjNlZGRiOSwgMHgyN2RmYjEzNywgMHg0NDk2MmIyOCwgMHhkZDM2MjRiYywgMHgzNzM3NDUwZCwgMHg5ZGRlNzhlYSwKKwkweDJkNzM5N2NhLCAweDljMDdjYTQ2LCAweGY3ZDNiMTZiLCAweDIxMDJlNjZjLCAweGY0NDZhNGY2LCAweGZlNTZlZWJmLAorCTB4ZDhhY2I1M2UsIDB4N2I3ZTllOTEsIDB4ZmU1Zjk0ZWQsIDB4MDBiNWUxOTYsIDB4NjZhN2RiOTcsIDB4YzJiZGU4MTgsCisJMHgyOGYzMTI1MywgMHg1ZGYzODNhOSwgMHhhOTk0ZGViZCwgMHhlYTFiY2NiOCwgMHg3NjQ1YWY0ZiwgMHhjOGMzMTgyYywKKwkweGMxNzU3YTRlLCAweDRlOTVhZDQzLCAweDhhZWE4ZmYyLCAweDczN2Q5ZTkxLCAweDc3MGZhMmE2LCAweDc3ZDhjMzYzLAorCTB4MDRmMmZmYjEsIDB4ZmJkNWNmMmUsIDB4ZmMwOWU1YTUsIDB4NjQ2YmRlN2QsIDB4ZmZlYzZjZGYsIDB4NDkxN2M1NTUsCisJMHg3MjVmNDhkNSwgMHgyYmFlMGU2ZiwgMHgzM2RkM2ZhMiwgMHg1YjlmZjQ0NSwgMHhjZmZhODEzYywgMHhmNWRkYWZlNiwKKwkweGNlMzk3N2QyLCAweGM4Zjk5ZGE1LCAweGVjN2NlOGM3LCAweGY0MjllY2IxLCAweGJkZTQ1OGI3LCAweGU4MWY5MDg2LAorCTB4YTNkNjQ1NzcsIDB4Y2UyMmM1YmYsIDB4NmU1MDVhNTMsIDB4NGYyMThlZWIsIDB4M2VjMzMyZDQsIDB4YTA0MmU0NmUsCisJMHhiMThjOGNkNywgMHhjZmY1YWE1NCwgMHhhMTc1ZjQ3YSwgMHg5MGZjZTcxOCwgMHhlYzFmZTczOCwgMHg2YWMzYjRmNywKKwkweDNkZjgwZTI3LCAweDg0M2NlZmUwLCAweGUxNzJmOGY4LCAweGIwZjFmNGE5LCAweGJmNmEwN2E1LCAweDZlYzdiZjI2LAorCTB4MTZjZWZmZWMsIDB4YjAwMzcxZjksIDB4MmRiM2JlZjYsIDB4ZGY4YzViZDAsIDB4ODc4ODYwMTksIDB4OGJmOTExODksCisJMHgyNWY2YmY2MiwgMHhlZmQwNTI2YiwgMHgyMGY0YjM4MSwgMHhiYzA0NzZkZCwgMHgwMzBkNmIyMywgMHhlNDJjYmZjZiwKKwkweGQyMTYwYjA4LCAweDJlYjEwNmYzLCAweDBjZWI1YTQ3LCAweDJjMzhiYjhjLCAweDYwNzNjYTNhLCAweDY3OTFhYWNjLAorCTB4YTY1MzZhNzMsIDB4YmIwYmExYTYsIDB4MjcxNjI5OWMsIDB4ZTQ1ZGY3ZmEsIDB4ZmJlMDY0MTcsIDB4N2M5ZjE4MGQsCisJMHhmNzg2MzZlNywgMHg5ZDY5NTk1ZiwgMHhmZDc1ZGExMiwgMHhjNmY3ODhmMywgMHhlMTdiODk1NywgMHhlZDJkNWYzZSwKKwkweGVmZDZjMzI3LCAweDVmZjIzMTk3LCAweDUwNzM4MmQzLCAweGMzM2RmNTZlLCAweDkyZjE5NDU3LCAweGM2OTFkZGI2LAorCTB4NWRlZTFmZjMsIDB4MDI3MjFmMTgsIDB4ZWQyZDY3YmQsIDB4YjA0ZjRmYzIsIDB4MzBmODcwMGMsIDB4YTk3MTlmYTYsCisJMHg3MjgyZDVkOSwgMHgxNDA5NTdlNiwgMHhlN2I3ZDY3NywgMHhmYmM4MjBiMywgMHgxYmZiZWNiMCwgMHhmOWM4NzdjMiwKKwkweDZjNGYyZTkwLCAweGI2NWI5ZTE2LCAweGI5ZWM5ZTI4LCAweDA2NzVhOTc2LCAweGU4ZjczMWY5LCAweGQxNzhhYzU4LAorCTB4YTdlZTYyY2UsIDB4MmI2MjhmZmMsIDB4NGZiNWNmYmYsIDB4MWY2M2Y0ZTQsIDB4YjhlMTcyM2YsIDB4NzdmZmU3YWIsCisJMHg0OWY5OWU4NCwgMHg3ZmRlOTNiMiwgMHg0ZGEzZWQ1MiwgMHg4ZTQ3Zjg0MywgMHg1ZjIxM2E5MSwgMHhmODExNWU4NCwKKwkweDE5OWYzMzMzLCAweDc5MmY0NWY5LCAweGM3NzRiMDc5LCAweDk2YmRhZjZiLCAweDViNTNlOGNlLCAweDg0MWI0NzQ4LAorCTB4MTM4ZWEzZmQsIDB4YzZhMjFmOWYsIDB4ZjI0M2M1NzgsIDB4Yjg3YWIyNTIsIDB4ZWRmYWIwYmUsIDB4NzVhZjM4NDEsCisJMHhjZTYzZTlkZiwgMHhmYmEwODVmZiwgMHhkOTBmZDkzNSwgMHhkM2FkN2ZiMSwgMHhmYTMyYzZlNywgMHg5Yzk2OTgzZCwKKwkweDNlNzhkZDdiLCAweGU5ZmIzMzJkLCAweDk2YmFlYzk1LCAweDYxZGZjZTMzLCAweDI4ZjA1NjNlLCAweDlmZDgzN2NmLAorCTB4ZWZjMzY4NWQsIDB4MWIwZTU5NDEsIDB4ZTI2NWQzNjQsIDB4MjdkMDQ2ZjEsIDB4MTlkOGNiY2UsIDB4ZGVhZjkxNDYsCisJMHg5OWU3ODA3MiwgMHhiYWNhNThiNiwgMHhjNWExYWYzMCwgMHg2YTQ2NTY5MiwgMHg1NmYzYzJkOCwgMHhjYjE2ZmVkNSwKKwkweDE2MDdkMjIxLCAweDVhZGZkZjg1LCAweGI4NDg3ZjUwLCAweDA5NDdjMDRjLCAweGUxMTBlYmFlLCAweDUwNzdlZDQzLAorCTB4MTI4YjVkYzgsIDB4NWE1ZWY4NjYsIDB4ZmQ0YWQyOWMsIDB4ODNkN2IyY2MsIDB4MzRlNmNhNzksIDB4NjY0NGY3NDYsCisJMHhlMjE3ZjAyYiwgMHhjY2M3NWYzNSwgMHhiZWM5ZjQzMSwgMHg1YTRmYWU2MiwgMHhhYWJhY2E0YSwgMHg3ZTMyN2Q2OSwKKwkweGQ4YjU4ZWI5LCAweGU3YTRlY2NiLCAweDdjZjBlZjExLCAweGNmOTY4NjczLCAweDU3NzgxM2JmLCAweGY5MTY2OWM3LAorCTB4NGVhZTc3YjQsIDB4YzM4ZWQ2MDksIDB4MWJmNzkzMzgsIDB4Y2IxNmU3YTQsIDB4ZjUxMDczMDIsIDB4Y2JmOGUyNWEsCisJMHgzOTFhNjc4ZSwgMHhkN2ZiNzhkNCwgMHg0M2JlZjE4YSwgMHgyYzRmYWU3OSwgMHgwNjc4ZTJiMywgMHg4ZDE1ZjdjNiwKKwkweDljNjJlMWY3LCAweDdiZmJkNWZmLCAweDQ3YmQyY2MwLCAweDU4MWQzMDRkLCAweDdkZWIxZWQ4LCAweDEzZjNmZWFjLAorCTB4Y2ZkMWYyZjcsIDB4YmM3OTYwZmQsIDB4MDI4NzFiNTYsIDB4MDkxZWVjNzksIDB4NzI1NjVhZmIsIDB4ZDUzNTUwZTYsCisJMHgwYmQzZjhmMCwgMHhmZDUxOWZjMiwgMHhmNjMxNzQ5MiwgMHhiZjdmMTIwYiwgMHgyYmM1MjgzZiwgMHhlMTBjNWRmNCwKKwkweDY5YzdhNGE3LCAweDNlZjAzMGYxLCAweDZmODczZjJkLCAweGRlMWU3ODFhLCAweDdjNGM2OTM3LCAweGQ3Y2I0ZTg3LAorCTB4MzhmZjFjZGYsIDB4MDU5ZjkzNDUsIDB4NzEzMWVjN2MsIDB4ZGUyM2M2M2YsIDB4Mzg4OGY1YTcsIDB4NmYxOGMyMWQsCisJMHgwNDlkMTdhMCwgMHg4OWM3ZjdmZiwgMHhjMzNmOWMxYiwgMHg0MDk5YWNlZiwgMHg1YzYwZWI4ZSwgMHhmYTI3ZTFjOSwKKwkweDVkYmEzOTM2LCAweGUyMzllZmM4LCAweDc4ZDEwZmZiLCAweDJlNDhjOWZlLCAweDdhNDdhNWFmLCAweDUxYWY3ODVjLAorCTB4MTE5YmQ2OWIsIDB4N2M1ZmRmOGIsIDB4ZWUwNjQyZjgsIDB4ZmQxOWM1ZTcsIDB4ZGY3NDNiNzksIDB4ZTc2OWUyZjQsCisJMHhjYmM0MDJlNiwgMHg2ZmZiZWQxMSwgMHg0NzRkZjhlYSwgMHgyMmY4YTdjZSwgMHhlNWMwYTVmZCwgMHgzYTRiMmZkZiwKKwkweGQ5MjU3MWIzLCAweGRkYjgwYjhkLCAweDdkZmE3ZmY4LCAweDczZTYxN2IzLCAweGE0OTc3NTNiLCAweDA4NGZjZjk1LAorCTB4ZmMxNDFjYjksIDB4ZDMyMGJiNjAsIDB4MmFlZTQzZjcsIDB4M2E0MGFkZjIsIDB4MGJhYzkzNmEsIDB4M2NlNzJlNTAsCisJMHg5YWYyZjNjYywgMHhiM2Q1NWIxZSwgMHhiNDdmMDYyOCwgMHhkNWZkZjI4YywgMHhiYWJmMDhjOCwgMHhlNDkxYmQ3YywKKwkweDM3MjViMzVlLCAweDI4Zjc3MmY5LCAweDlmYmI5ZjQzLCAweGRlN2E5NGU0LCAweDc5OTg4ZjU1LCAweGRiOGY4YWJlLAorCTB4N2JiZWU5ZDEsIDB4M2EyNjBmMjksIDB4N2VhODY1M2YsIDB4NDQ5ZDIzZDUsIDB4MTM3ZjZhMGYsIDB4YzVmMjhmOGUsCisJMHgxNWM1MjM3MiwgMHg4MThmYTFjZSwgMHhiNzJiM2I3MSwgMHg1OWQ3YTIzMywgMHhjMDk4Yzg4OSwgMHg3ZDA2NjNmMSwKKwkweDQ5NjA3NDk5LCAweDEwNmI4ZTFjLCAweDZhMGJkY2ZlLCAweGNjYTFhNDVjLCAweGRlNzg4OWVjLCAweGI5OTk1YjcwLAorCTB4OWE0ZTgyM2EsIDB4OGUwZmNmMTksIDB4MjMzN2ZmMWUsIDB4YWMyMmZiNTUsIDB4YTgwYzYzYjEsIDB4OTRjNjMxN2YsCisJMHg5N2VkOWYyNiwgMHhmMjc4NjQzYiwgMHgwMzk1YjRmYywgMHgwZWUzY2M3YywgMHhjNWEzZTc0MywgMHgyMzJkYmU3MSwKKwkweGYzMGRhYzdiLCAweDVlMGVjMGQyLCAweDA0NjBiMGQzLCAweGY2NGRiN2UyLCAweDNjMDM2OGJkLCAweGEyNjg3ZWY0LAorCTB4MGJkZmVhM2MsIDB4N2MxNmVkM2UsIDB4MDVmOWQ0M2EsIDB4ZDIzMDAxZDksIDB4MWQ5YzdiMTgsIDB4ODBlMjk3YzQsCisJMHgyMzI3YzY0ZSwgMHhlYmU3MzQ1ZiwgMHhmNjMxNDJlYSwgMHhmM2VjNWM3OSwgMHg3ODc4ZjYzMiwgMHhjN2IzZjdlNCwKKwkweDFhZmU4OTBmLCAweDZkZWQxYzdiLCAweDQ2ZmRkNDRmLCAweGI2NzY4YzI0LCAweDdlM2Q4NjI3LCAweDA1ZjExMjQyLAorCTB4YzI3NDI3OTEsIDB4MGRkNWRjZTAsIDB4MzkzMTM5NzgsIDB4NTY5N2JlOTksIDB4NWRlZmMwOTAsIDB4NTI3ZmEwNGUsCisJMHhhYmM4N2UwNiwgMHg3ZWQxZjNhNywgMHg3ZmY1MmQ5OSwgMHg0M2Y4NDkxNywgMHg0N2YwNjA4YywgMHg2MmY5MDVmZSwKKwkweGI2YmZmMzBlLCAweGUyM2UyMjQ4LCAweDFiNzgzNWY3LCAweDczZTU3ZTlmLCAweGQxOTIzNmRlLCAweGY5YzAzNmJhLAorCTB4ZGI0NmZkZTEsIDB4NjIzM2Y5YzUsIDB4OGVhNDY3ZGQsIDB4NTAzN2ZkNTIsIDB4MTNlZjExNjUsIDB4ODg5ZDNjMzMsCisJMHhmNzQxYWNmYiwgMHg3MmY3NTE3NCwgMHg5ZmQzNmQ3OCwgMHhkYzFmYWM3NywgMHhlZDcyODZmZiwgMHg4Yjg2ZDliZCwKKwkweDVhNjIyZTNjLCAweDRiOGY0MmMyLCAweDZkYWE5Nzk4LCAweDEwY2VhOWJmLCAweGI5YTgyZjdkLCAweDZiZDliYjRmLAorCTB4N2QwZjVlODgsIDB4ZDYyMWQ0MTcsIDB4MWY3MWRkOWIsIDB4Y2Q0ZmJmZGQsIDB4YTY0NGY5ZTYsIDB4MDRlMjhjNjUsCisJMHhhNjZkZjdkMSwgMHgzZDFlNWRiMSwgMHg4YzBkY2ZkYSwgMHgzOGU4ZmRlYywgMHg1MmE5ZTYzOSwgMHhiMTgxYjBmYywKKwkweDc5ZTUxMjJkLCAweDc5NzNkZjZiLCAweGZlNzNmZWE2LCAweDNhZDY5NDdkLCAweDc2MGVjNzljLCAweGQxZDNkYTEwLAorCTB4ZjdhODQ5ZWYsIDB4NTFmN2VhNWEsIDB4ZGZhYjNjNTUsIDB4NGRiZjRhOGYsIDB4YzE2M2ViNDcsIDB4YzZhZWQ0MjksCisJMHhiODdiZjFmZCwgMHhmOTExZTk1NSwgMHg3ZjU4MmJlNCwgMHgyYjdmN2E3ZiwgMHg5YmRmN2IxOCwgMHhjZjI5ZWFkYiwKKwkweDdmYmM3MzIwLCAweGIyOWExODZjLCAweGM4Nzg0NjE0LCAweDZmYzhjODVhLCAweGYyNjgzYzAwLCAweGRiZDk0YzA5LAorCTB4MTZlNzlmNjksIDB4MjI0YzM2MzMsIDB4MzNkYTY4M2MsIDB4ZmRkM2QzNDAsIDB4N2U2ZDQyYzAsIDB4MDM1M2VjMDEsCisJMHg1N2FiZmI0NywgMHhkOTRkNTNmMiwgMHhmMzk1OTdmOSwgMHg5YTYzOGE1NywgMHg5NGU0YmRjNCwgMHg5N2ZiZTI1MSwKKwkweGVkMTRhY2E1LCAweDllZGJmNGEyLCAweDA3MzhmM2ExLCAweDVmNzE4MWU3LCAweGRkNjI5Yzc0LCAweGYxODI2ZTNiLAorCTB4NzdmYzhmZDEsIDB4ZTJjZDJmYzEsIDB4YWVmZDViNmUsIDB4ZjRjOGYzMGYsIDB4Y2U1NDliMWUsIDB4ZjMwZDJjZDcsCisJMHgxMmU5N2JmMiwgMHg4YTZlN2M0NiwgMHg4ZmNjNjY2NywgMHgxZTRjMmE5NywgMHgwNGM5YmJjNCwgMHgzMjU5NmMzMCwKKwkweGQ0MDY3MzMyLCAweDdiM2M0NWViLCAweDg0NjRjNDhkLCAweGYzMzE1NTk5LCAweDVkZmFhM2Y4LCAweDU3N2QxMGExLAorCTB4ZDQ3OWE4NjgsIDB4MjBiMjJiZWYsIDB4Njc5ZDRlN2YsIDB4MmVmNTc3ZDAsIDB4N2JmOTNjZjMsIDB4NmJlN2U4ZDYsCisJMHhjZWE5OWUyOSwgMHg4N2ZlMTQzZiwgMHhiZmRlOGVmYSwgMHg4MTM3YmNkNSwgMHg0NDFkNTNjNywgMHhmNDAzOGRhZiwKKwkweDQxN2NmMDRhLCAweGNhM2NmODhmLCAweDY2ZDViYjg1LCAweGZhMjk1NzdiLCAweDRjMWU2NzBmLCAweDExNGEzNjUwLAorCTB4ZDJjZTA4ZmIsIDB4N2UwM2VmZjMsIDB4ZDdmYWYxYmYsIDB4YmM5Mjc3NjEsIDB4MTg5N2RmZWYsIDB4OGJlZWZiZWYsCisJMHhkYWU0MjJmZSwgMHgwOTU5N2MzYSwgMHgxOTFhNWVmMywgMHhmYmE0MzFlNSwgMHgyOTk3M2ZhYSwgMHhhMGY2MDBmZiwKKwkweGRmMTExMzkxLCAweGQ2ZjE4MDQ5LCAweDFmZWZjZTNkLCAweDNlNzdlMzM2LCAweGMwZTdmZWYwLCAweDEzZWRmZTQwLAorCTB4ZDFmNzZjMTYsIDB4YmNkNDM2NzcsIDB4NWRhM2NjNWMsIDB4M2VmMDMyNWIsIDB4ODM3ZGY0NzIsIDB4ODljNjExYmQsCisJMHg5OWIyNmY5OCwgMHg5ZjQwMTMwNSwgMHgwNTMxZjRhNCwgMHhiOWVjZjNiZiwgMHgwM2E2NTQ2OCwgMHhhMDdkNmM3ZSwKKwkweDkzYmYwMTUwLCAweGE1ZWU4OTk5LCAweDMzN2VhZDJhLCAweDBhZTEwZWZmLCAweGVmNjc2OTE2LCAweGVmYTU2ZTk3LAorCTB4NjRiZjg2YmQsIDB4M2UxNGJmOTQsIDB4YzNlZTg4Y2YsIDB4NzBjNGMzOWYsIDB4ZGRmOGZmMmUsIDB4Y2JlNDdhZmIsCisJMHg3YTVkN2RhOSwgMHhmYjkzZjNkNCwgMHhmNjdmYTRmYywgMHhlZDNkNGZkOSwgMHg5OTYyZTdlMiwgMHg3NTFmOTExMSwKKwkweGNmNTQ1YjFkLCAweDk3OWY4YWU5LCAweDVmMjdlYTJjLCAweGZkZjg2YTMwLCAweDQ2YTM1ZWRhLCAweDViMTdjODFlLAorCTB4NjVmZDQ2YmUsIDB4NjdhYTg5ZWEsIDB4ZTNlMzNmZDMsIDB4MmRkZTI4ZjksIDB4NTNlZGI1ZGIsIDB4ZGJkMDNlNDQsCisJMHhjMzVmZGYyYSwgMHhiYzczYTFhZSwgMHhjZjMzMTY5OCwgMHhkNWRjZTA2ZSwgMHg3MWUyNmU3MywgMHg3OWM3YzY3NCwKKwkweDlmZjc5NDZlLCAweGZmNDA0ZDQ2LCAweGU4NzE0N2MwLCAweGQ4MmZjNDY0LCAweGRkOTUyOTE3LCAweDU4Nzk4ZWNjLAorCTB4OGU5OTRjZTUsIDB4ZjNiMmJkNzIsIDB4ZTQ4N2E0MWQsIDB4M2MwZjNjYjMsIDB4NWZmZGZjN2EsIDB4N2U4NTk1YmUsCisJMHg5ZGM5OWVjMywgMHhlZDJmNjg1OSwgMHgzZDE1ZjJmOSwgMHhkM2Q1NTc4ZSwgMHgxOTNlYjBjYiwgMHg1OGE0MWU0YSwKKwkweDEwYWE3ODRjLCAweGNmNTAzM2I0LCAweGY1OTE0NGUzLCAweGU3NGE5ZWI0LCAweGNmZTRlNTY1LCAweDg3MWE0ZTUwLAorCTB4ZDkzM2RmNmUsIDB4ODdlNGMyYzIsIDB4M2RhMDI2NzUsIDB4ZmU3YzdjYzcsIDB4NTdjYWIzNjQsIDB4NzA5NzJmZWMsCisJMHg5ZjgxODQ1ZSwgMHg1MmVhNTRmNiwgMHg3YjlmNjE2YSwgMHg2YzE1OTE5ZSwgMHg0NmYzZDNkYywgMHhlN2JmY2UwMiwKKwkweDdhY2QzOWVjLCAweGYzMjJmZTk4LCAweDVhZmJhYzQ1LCAweDJiNTNlZTcxLCAweDdlZmVjOTdiLCAweGY5MmJhYzRhLAorCTB4YTFjNTJmNmMsIDB4MzBkZTk1NTMsIDB4YzNkNGRiZWEsIDB4MzdmZWZhN2EsIDB4YzhiY2YwYjMsIDB4MzhhMTRjNjEsCisJMHhmYzVlYmE5YSwgMHhkNzNlMmE2ZSwgMHg4OGRlNzI4MiwgMHg1NjMyYjNmYiwgMHgyODdlZWMyOCwgMHg1NTgzMmEzMywKKwkweGNjOWE4Zjk4LCAweDZiNDg0YTc2LCAweDQxN2QyYjUzLCAweGE1ZTRlN2E0LCAweGFkOTM5ZTljLCAweGJmMThjM2ZlLAorCTB4YTNhZjVlNGYsIDB4NTlmMjQ1MzgsIDB4Y2JmNDA2ZGYsIDB4MDU2NWNiOTIsIDB4Zjg0YWU0YzksIDB4YjdmMzEwZWMsCisJMHhmOWQ0Zjk4YSwgMHhhODhjZjVkNSwgMHg3ZWU4NGJmNCwgMHg2MmUzYjMyNCwgMHgxMzJhYWVmZSwgMHhjYzVhYmY4ZSwKKwkweDU5ZWIxNGVmLCAweDJjM2JlOGM1LCAweDU1YWQ2N2M5LCAweDgzMjcyZmU4LCAweDMzZGY0MTlkLCAweDlhNzllMmI4LAorCTB4Yjc0NWYzMzUsIDB4OTlkOTRmMjcsIDB4YjFlMGU3NDUsIDB4ZTMwYWQ5MWUsIDB4MzY1YjY0YTUsIDB4Y2ViOTQxNTQsCisJMHgzMmZmMjNhMSwgMHgzYzUxODdhOSwgMHg5ZDI3YTkzZCwgMHg0ZjUyN2RlNCwgMHg4YTI3MjhhMSwgMHgwZjQyNjlmYSwKKwkweGQ0OTMzOTcwLCAweGFmMmQ1MGYzLCAweGE0ZDJhMTZmLCAweDNmODcxN2NhLCAweGRhOThmYjhjLCAweDcxN2NiOGNiLAorCTB4OThiZTQ5NzgsIDB4NTE3Y2I4ZDIsIDB4OTU1NmI4ZTksIDB4MzI1YWNjMmIsIDB4MGZmN2VhMWYsIDB4MDZiNWFjZmYsCisJMHg3M2Y3N2I5ZSwgMHhiYmU1ZmVmZSwgMHhiY2JlNWNkOSwgMHhmYmY3MjVmYiwgMHhkM2JmNjk0ZCwgMHg0MmFhNWNhMywKKwkweDRkZmEwNWMzLCAweDMzZWRjMGJiLCAweGJhYWIxZjk1LCAweDQ4MTEzNjI1LCAweGU3ODM5YTYzLCAweGM4YmExZjg3LAorCTB4ZDk4NDNiOWYsIDB4NjNhZjAwZDUsIDB4OTUyOWM5MTIsIDB4ZGQwNTZiNmUsIDB4ODNlYWIzYWUsIDB4ODFmZWQ4NDksCisJMHgzNDc3ZGU4OSwgMHg5OGU1Y2UzOSwgMHg4M2ZlMWVjMSwgMHg3YzQxZjdhZSwgMHgzM2Y3ZjhlZiwgMHg0MTVkZWY3YSwKKwkweDQzN2U4MmY1LCAweDlhMmU0OTRiLCAweGU0Mzk2Yzg0LCAweDNlNDE2MDU4LCAweGFlNDg3OTg0LCAweGU5MTg3MjFlLAorCTB4M2EwODBlYmMsIDB4ZTlhZjY3M2UsIDB4NWIzZmMzMDgsIDB4NjlmY2RmY2MsIDB4YzFmZmQ0M2UsIDB4OTM0MGViOWUsCisJMHgxZTk3M2Q0YywgMHg4ODVmMmY0MSwgMHhlODJiM2JmMywgMHg3YmRkMjlhNiwgMHhmYzA0Yzk1MywgMHhjZDFlNjJmZSwKKwkweDBkZmVjZTdiLCAweGRjYjI3ZmJkLCAweGM2OWYxZmY2LCAweDNhYTcyZWZhLCAweDRmN2NmYThlLCAweGNmMTlhNTY4LAorCTB4MWY5YmQwZjUsIDB4YWJiNDQwOWYsIDB4N2IyMzVmZTMsIDB4N2VlM2U0ZWYsIDB4ZDBmODlhMzMsIDB4NzhjZjNiMTIsCisJMHhhZGYzZmM5MCwgMHg4YjdmOTY4OCwgMHhjODBmODY0YSwgMHg5MTY2N2FiZiwgMHhlNzEyMWU3OSwgMHgxZTQyNTllYiwKKwkweGRkYjg1NTRkLCAweGU3ZTU2ZjVlLCAweDVmYjI1ZjU1LCAweDhiOGFmZWE2LCAweGQyYWY1NWY2LCAweDVhZTRmMjhkLAorCTB4ZjI5YjdmZTQsIDB4N2Q0YmQxMjQsIDB4YmQ5N2E3M2UsIDB4MGEwZjllODIsIDB4NjNlY2NlN2MsIDB4ZWQ5N2U4OWQsCisJMHgxOTZlOTgyZiwgMHhlMjNlZjgwYiwgMHgxY2ZmMTNkMiwgMHg1MmM2YmIxOSwgMHgyOTFkY2YwNiwgMHgwMjRiZjA5NSwKKwkweGQ2Yzk3YTZjLCAweGNmMDBhOWI1LCAweGE3YTIyNDUyLCAweDFkYWQ5MmZhLCAweDk2N2ZkMDRkLCAweDAzYTk0MTM1LAorCTB4YjNmOWU4ZjgsIDB4MGVhZjM0MTYsIDB4OTc4NGJjMDUsIDB4ZTNmODcyZTksIDB4MWI5ZTE3NTQsIDB4Y2FjY2QzYzcsCisJMHg0ZmZlOGNiMCwgMHg4Y2JmNjNiZCwgMHhjNDZkZjZmYSwgMHgyZWUzMTFhYiwgMHg3NTY3YzExZSwgMHg2YTU3MWYwNCwKKwkweDIzOGZiODJjLCAweDJmMjEyNmE1LCAweDVlNTFlMzNkLCAweGQ1MzdjYWNlLCAweDdjNzVhMThmLCAweDFhNGM2YzdkLAorCTB4NTA2Zjc3YmUsIDB4YTczYzk1ZjgsIDB4N2U4MmM5ZmYsIDB4NmIyN2NjZWEsIDB4Y2NkZmEwNTMsIDB4ZDcxOTY2OTIsCisJMHg5MTJjZDQ3YiwgMHhkN2RhM2NmYywgMHhjNzkzZjk0NCwgMHhkMmFjMzkzYiwgMHg3NDA3M2QyZCwgMHg1YjZmYmM3OSwKKwkweDZmYjYxMjczLCAweGQ1M2U0ODk3LCAweGUyMWQyZjJiLCAweGE3ZDM4ZmVhLCAweDBiMGY3ZTNhLCAweDMwNzdlMWI2LAorCTB4YjdhZjI5Y2YsIDB4YjFmNTNlNjAsIDB4Y2NjZjA1YmUsIDB4N2YxYzNjMDEsIDB4YjhjNDNmNTMsIDB4YzBhZDFmNGQsCisJMHgyNDRjZGY3MSwgMHgzNTZkOWUzYSwgMHg4Y2IxZjQ2OSwgMHg1ZTg0Njk0ZSwgMHhkMzZmMWVhZCwgMHgwZDRhZjVjMCwKKwkweDI5Y2ZkM2M1LCAweDc4MDZlNTkyLCAweGFkNWRmM2RlLCAweGQxOTEzOTdiLCAweGJkNzdkYTUyLCAweGUxNGM3YmU4LAorCTB4YTFjYzc5N2MsIDB4ZDYzY2JlMjMsIDB4OGE5Y2I4ZjcsIDB4ZmI0NjU5ZjAsIDB4ZGU3Njk5OTEsIDB4YjIxYTkyZmEsCisJMHg1YjI5Y2VhZiwgMHg4MjY3NDRmNSwgMHg1NGYxZDUwZiwgMHg0ZjhhM2UzYSwgMHg5Y2VkMWUyMywgMHg2ZGY2OGZmZiwKKwkweDFkYmQyMGIzLCAweGUzMjNiZjc1LCAweDg5Njc1ZDM5LCAweGExZDA1NzFhLCAweDVkZjBkZmFhLCAweGRhOWZhNDcxLAorCTB4N2VmM2ZiNTEsIDB4Mzg1MWViODYsIDB4ZDc5NDZiZmUsIDB4ZDU3ZDIzOGYsIDB4YTdhMjY0M2IsIDB4OWFmZWNhYTMsCisJMHgyN2JmODYxNCwgMHhmZmVjZDI2MiwgMHg5YWM5MWRmZSwgMHhkYTc1OTdmMSwgMHg1ZGI0NzAzNCwgMHhkYmZkY2ZiNSwKKwkweDBlYzRjYmE3LCAweGQ4NDdhNDY2LCAweDNlYzJmOTQ3LCAweGUwNzcxZmQyLCAweDE3NjhhZWZhLCAweGY3ZThlYjI5LAorCTB4NDVkOTA2NDksIDB4OGEyZWRjZjksIDB4YmU1NDg3YjYsIDB4Yjg4OWQ2NmUsIDB4NjVjNzhlYWMsIDB4NThkZmY5YTMsCisJMHhmMWVlYzNmYSwgMHg4ZTQ5MmFkOCwgMHhjNjViYmZiYywgMHhiZTkwNzNiYSwgMHg4NjEyYTNlNiwgMHg3NWQwMWVmMSwKKwkweDE1ZmMyM2E3LCAweDA3OGI2ZGViLCAweGNjYWQ3YzM5LCAweGJmYmY2OTc2LCAweDNmMzdiZmNhLCAweDFlNzdkNGJlLAorCTB4MzY3NDk1ZTUsIDB4NjU2MWRmNGMsIDB4MDdlNTE4YWIsIDB4OWU3ODZiZTgsIDB4YWQ2NjVlMTEsIDB4MjU4YmQ0ODgsCisJMHg4ZDJkZjFmZCwgMHhkODRiYTQ1ZCwgMHhhYzc4ODU5YiwgMHhmMWU0NmIzOCwgMHgzOGU4OWU4ZiwgMHg4NTFmZWE5NywKKwkweGFlMmJmMjI1LCAweDkzZWEyZTUyLCAweGU2N2JiOGY5LCAweDdmNjc3OGYwLCAweDkzOGYzMzc5LCAweGU1ZmMwOTE1LAorCTB4NWQ2OTFhOTQsIDB4ZGNmNzgwOGEsIDB4YjU5ZWZiMTYsIDB4NDFmYTU0YTQsIDB4MDdkZmEyZjksIDB4ZWY4MDI5ZGYsCisJMHg2MWU2OTBhZiwgMHhiMTU1M2Q5ZSwgMHhjYTUyOTFkNywgMHg5Nzc3YjVlMywgMHhhMTRhZjI3OCwgMHgxNWYxMmEyYywKKwkweDNkNWUyMjk2LCAweDc3ZDM1ZjYwLCAweDlmNjQzZGM1LCAweDMzYmNlM2E5LCAweGZkMTZlM2NhLCAweGJjYzk2MTQ2LAorCTB4ZWU4ZjBlZGMsIDB4Njg2M2VkMDcsIDB4ZTNkODg2OWMsIDB4N2EzOGZiNDAsIDB4ZjZlYzZlN2UsIDB4ZmMzOWI4NDMsCisJMHgzMGZiMjM3ZCwgMHgwYzA2NDNkMiwgMHg1MmYyYTY2NCwgMHgxNmU1ZTMyYSwgMHg4ODQ2YWVmYSwgMHgxZTBkZTdmYiwKKwkweDkxNDZmM2QyLCAweDEwMzc4OGFmLCAweGY0YzdmYzkxLCAweDFjYmUzNGY1LCAweDU4Zjc0MTllLCAweDgzMjVkODJkLAorCTB4NzY5MWY5ZmIsIDB4NmE4NGFjOTQsIDB4NmFhZGUzMjIsIDB4ZGY5NGE4YjksIDB4MTUyOGNlNzMsIDB4NjA0Y2YzZWYsCisJMHhhOGFmYzgxMywgMHhlYTNjZmNiYywgMHhjM2NkNDNmMywgMHhjODU3NjVlYywgMHg2M2YzNWU3YiwgMHhjM2ZhNDlkMywKKwkweGE1NWYyN2U0LCAweDRhMGU2MDdkLCAweDFmMzlkZjkxLCAweDRhODliZjZhLCAweGMyOGExYzk0LCAweDVjZjM1MGQzLAorCTB4MjJkYzc5ZWQsIDB4ZDc2YWY2ZTgsIDB4Y2M3YTY1NWQsIDB4MmVkMWY5NGUsIDB4MDU2YjA3Y2UsIDB4ZDVkYmY1N2QsCisJMHhiZTNmMWUzZiwgMHhmZTg2MWYzZiwgMHhmZWZiZDljYSwgMHg0YTdlZjg5MywgMHgzN2E1Njg0MiwgMHgxNDVlN2VjNiwKKwkweGU1MzFmOWZiLCAweGNlNzBkM2MxLCAweGZiYTE4YzFiLCAweDA3OTlkZWQxLCAweGQyMDI2M2E3LCAweGYxZjJjNzdiLAorCTB4OWViMDA1ZjAsIDB4MmRmY2M1MzcsIDB4NmZlYjk1OTYsIDB4MWM1YjQ3ODUsIDB4MWVmOTk4YmEsIDB4N2E3OGZlNmYsCisJMHhkOTNmMGRhMiwgMHhkY2UzOTVmZiwgMHhhNzIwNmRmYiwgMHhkMDdkMWU1YiwgMHg3NTgxYjBhYywgMHgxNWQ5NmIzMCwKKwkweGUzNDdmOWNlLCAweDZkNWQ3NTEzLCAweDYyNWUzMDViLCAweGY3YWFiZDRkLCAweGFmNWM1YTE0LCAweDY5N2RlMDI0LAorCTB4NzY0ZGU3ZWQsIDB4YjQ0NjBlZmMsIDB4NDNjNmEwM2QsIDB4YzZhNWJkNTQsIDB4YTRiYjU0NGQsIDB4MWZlM2MxYzIsCisJMHg3YmZjZWQzMywgMHg2OWY2MTUzZCwgMHhiMjBmZGZhNCwgMHhhZmYyMWFhZSwgMHgyMjZkM2IzMCwgMHgxOWZkMGFiMSwKKwkweGU0ZmI1YWRkLCAweDQ2NTdiZjNhLCAweDllZGEyYTNiLCAweDQ1MzM0ZGE4LCAweDdhYmQwN2Q5LCAweDE3MTVkZjk0LAorCTB4ZmU1NGZkYjUsIDB4YzQ1NGFjZjgsIDB4MTc3OTU0NTEsIDB4Y2Y5YTQ3NjUsIDB4YmI0MDQ5OWYsIDB4NjcwYmVkZWIsCisJMHg4ZDE0MmUyOCwgMHg1YzJlZWI5ZiwgMHhhZWJkOWZkZSwgMHg4M2Y3NGY1ZCwgMHhiN2FkNzFkMSwgMHhmZGQyZTQyZiwKKwkweDFiYWYxMWEwLCAweGNjY2FkNGMxLCAweDgwOGNjNDNmLCAweDZiN2I0Yzk3LCAweDE4ZWMxMTk1LCAweGY4Mjk4M2EzLAorCTB4NThmYzM2ZGQsIDB4OGQwZGM2MzMsIDB4N2M5Yzc4MTcsIDB4ZDdmYjlkODQsIDB4MmZjMThiODksIDB4OTUzMzUxODUsCisJMHg3OGMxN2RhMCwgMHhlZjQ4Y2U3YywgMHhlZjVkOTlkMywgMHgwOWJkYmQ5MSwgMHg5ZTIxODZlYSwgMHhhNjE5OWVjNywKKwkweDUzMDcxMThiLCAweGMwOGE2M2NmLCAweGI3ZTY2ZWVmLCAweDRkODFlZmUzLCAweGY3Zjc4YmIxLCAweDU5ZGI0NjJlLAorCTB4YTIyZDNjZmMsIDB4MmQ2MmUyN2YsIDB4M2NlMjJkM2UsIDB4NDM1YjgzMjcsIDB4ZDNlYzc5ZGYsIDB4ZTcxMTZmM2UsCisJMHhmYjFhNTk2YiwgMHg2M2EzZWMxYywgMHg3YWEyNDM5ZiwgMHhjNWI2MTMwZSwgMHg1OTZjMzllMSwgMHg3NThhNGRiYywKKwkweDJmOGI5OTBlLCAweDg0NWIwZTdmLCAweGVmZDJhOTVmLCAweGIyMDRhY2I0LCAweGU4YTZmN2FmLCAweDdiNDFmYmU4LAorCTB4Y2I1OWMzMTMsIDB4YjJmZGZlMzEsIDB4YWNjZmRlOTksIDB4YjQzNjcxMTAsIDB4NmI5ZjEwYTQsIDB4ODRiZjk3YjcsCisJMHhhMzcxZGI3MSwgMHg3YjhlNzRmNSwgMHhiY2ZmZDEyNSwgMHg2MGZlZmY4ZSwgMHgxZmVhNzhjZiwgMHhmODgzYjMyNywKKwkweGZiMDc4MGJiLCAweDFiYmJlOWFhLCAweGQzYmJmY2QxLCAweDMzZGQwMDdhLCAweDNkYjljZWI2LCAweDgzOWMwMTZiLAorCTB4OTk4MGZiMjUsIDB4Y2Y4MzliZmIsIDB4NGEzZmVmMDcsIDB4N2I0YmJlMDUsIDB4YTY1NGI5ZjgsIDB4YmRhM2Q0OWQsCisJMHhlYzY2ZjI1ZSwgMHg4ZmUzNTFmMywgMHgzYTlkYTQ3YiwgMHhhYTM2MmIyMCwgMHg5OGZjOGJhZiwgMHhlY2EzM2I5MSwKKwkweDY0MmRiM2U5LCAweDQ3YzY1YjY3LCAweDM5YzBmN2Q1LCAweDlmOGViZGQxLCAweGExZDkxNmVjLCAweDg3ZWJhZjNkLAorCTB4MTE0YWE3MzgsIDB4N2Q3ZjMwODcsIDB4ZmI2NWUyOGEsIDB4N2U3MTRlZmEsIDB4MjVjNmQxZTksIDB4ZmU1ZGY3MjcsCisJMHhlNzEzNWU5YywgMHhhMWM0NTNiNCwgMHgwMGUyMmU3ZSwgMHg3ZTdmYzI5ZCwgMHhmMmE0ZTAyMywgMHhlYTliODBjZCwKKwkweDA0MjgwYWRmLCAweDBiOTQwYWVmLCAweDc3Y2ZjMTYxLCAweDQ3Y2IzZTU2LCAweDg0YWFhZjE3LCAweGNmNDdlZGZiLAorCTB4N2Y3ZGJmNzMsIDB4YmU4M2E4NjIsIDB4NDJkZTc0ZWYsIDB4YmRhNDE3ZGYsIDB4ZGJiZjE0NGQsIDB4MmM3MjdjMDcsCisJMHgxZmJmNDljZSwgMHg0Y2RiMzQ3OCwgMHhhNWEzYjNmMSwgMHg4YTdiZmJiZiwgMHhkMTZiN2NiYiwgMHhjNzBiYjhmMSwKKwkweGViNGU3YWIzLCAweDZmMTg0ZTcwLCAweGVlOGI4NTVkLCAweDQ3ZTAzNmE1LCAweGVlZmZhMTE0LCAweGZmYmU4OTMyLAorCTB4MDQwZTFiMzQsIDB4M2E1NDQ1ZWYsIDB4ZjE2OWY1MzcsIDB4NjVmZjBmNTksIDB4MWRkZmYxOTUsIDB4NjE3ZjQyYzgsCisJMHhhNGU4OGI4YywgMHgyMjczZWY0MiwgMHg0ZmJhMzczZSwgMHg1NzFlNWY5MSwgMHg4NzFiZWVkOCwgMHg3YWYxODA3MSwKKwkweDE0ZmJiZTI2LCAweDNiYWM0NTM0LCAweGUwNDI2ZjBlLCAweDQ0ODk1Mzc5LCAweDBhMWE3M2RmLCAweDg2ZTVkMWJmLAorCTB4YTMyZmFlNTQsIDB4MzQ3NWZmZWIsIDB4ZGQxYjgzZDcsIDB4NzczY2U4ZGIsIDB4NTBiMmJhM2IsIDB4ZjkxM2VmYWYsCisJMHgyOTY0YjMxMCwgMHgyODVmYmY0OCwgMHgxY2IxZGQ3NywgMHg2NTkxNWJmNiwgMHhjMDExYmIxZiwgMHg2ODUzYTMyZCwKKwkweDRmNGFmYmZkLCAweGQ4ZjgxYzUzLCAweDIxYzY1Nzg1LCAweDc2YjMxZGZkLCAweDc5Y2UzMDVhLCAweDUzZGZjOWNjLAorCTB4Zjk5NTEzODcsIDB4ZjI5ZGI3N2IsIDB4YTRmMjMxMmQsIDB4ZTk1OGYyZDUsIDB4OTVmZGZhMjIsIDB4ZWY3Y2ZjN2YsCisJMHhkZjdjZDFkYSwgMHgwYWY1NTI0YywgMHhmYjgxNWI4YywgMHhkZWY5NDI0ZCwgMHhjM2Y5MDJiMiwgMHhmYzgzYjk5OCwKKwkweGFhNzNlOGNjLCAweDg4YjM1ZjcwLCAweGZjNjRmM2RlLCAweGI2YmY0ZjdiLCAweDNmNzgyYzg2LCAweDAyNjdlZDFjLAorCTB4ZmY0MjZjN2QsIDB4M2QwNGY3NzgsIDB4NWVhZGFmN2QsIDB4ZTc4MmU3ZTYsIDB4MWZhNGU3ODgsIDB4OTk3ZTEzYTMsCisJMHg2NTY2N2M3NiwgMHhjMGZhNjMzZSwgMHhkZTFkNjA3OSwgMHhmMTNhZDBkNywgMHhhZGVmYWEzZSwgMHhmODYyOTJiZiwKKwkweGM5ZDY4M2I1LCAweGY5NTg5ZWZjLCAweGNkY2ZkMWIwLCAweDlhMjBiMjc2LCAweDE2MTViMzg2LCAweDcwOWZhMTc2LAorCTB4OTljNjlmMzAsIDB4Y2NlM2U1NmQsIDB4OWI3YzcxMTIsIDB4MTc1OWZmYTAsIDB4ODFkZjk0NzUsIDB4Y2Y4MGQ2ZjQsCisJMHg3OTI3Y2M5NSwgMHg1MGY1Y2M3MiwgMHhiN2FjMWQ1NywgMHg0MWM2Y2UxZSwgMHg1NjkzNDZmZSwgMHg1YjM5MDkwZSwKKwkweGY3NDU1MjVmLCAweDA3ZGNjN2JkLCAweGJmYmVhM2M2LCAweGUxZTU3NGJlLCAweDlmYzIyNzMyLCAweGI3NDE1NGQ0LAorCTB4ZDUyZmE1MjksIDB4OTQ1YTVkMjAsIDB4NGMyZjhhMmUsIDB4NWQ3NGNiNzYsIDB4MzZiOTdkNzgsIDB4MTdhZmQxNGUsCisJMHhiNDRiZjRhMywgMHg5MjhmYThiZSwgMHg1NGY3MTEzYiwgMHhmOWM0NDM0ZSwgMHg0YjlmNzJjZiwgMHhhYjgzYTQ4OCwKKwkweDJmMWNjYmM3LCAweGQ2N2JhZjdlLCAweDFkYTcxZTA1LCAweGU5Zjc5NzhjLCAweDc4MDNhNTczLCAweGQ4ZWYzZTg5LAorCTB4YTczZTg5NzgsIDB4ZWFhZDNjMDEsIDB4OGMxZGNiYWEsIDB4YmY2ZjE1NWYsIDB4MWFjOTc5MmUsIDB4OGQxYmU3OTksCisJMHhhZjhhMWZiNywgMHg0MTU2ZDFlNiwgMHg1NzllNWNhZiwgMHgzYjdkYmUwOCwgMHhiNzcxNDQzYiwgMHhlZmY5NGJiNywKKwkweGZmNzMxZDRiLCAweGIzYmZlMjk2LCAweDBkNjNhODU4LCAweGNiZTA0NWNhLCAweGU4Zjk0MjM5LCAweDM0NGNlNDIzLAorCTB4ZjRmODA2MWUsIDB4YmYyZTI4M2YsIDB4MjhiN2YzZmIsIDB4MjFjYWFhMmUsIDB4ZWEyNWYyMTMsIDB4ZWExZmMxMTMsCisJMHgxZjkwOTliOSwgMHhmMDJmNmY5MSwgMHgyZDVlODdlZiwgMHg0NTdjYTg3ZiwgMHgzODNmMjFlYiwgMHgxZmNjOGZhNCwKKwkweDVmYzVkZmZjLCAweDE4Y2Q3MTdiLCAweDUyMTY3NjE3LCAweGQxY2FiODNjLCAweGFjN2JjN2E1LCAweDNkZDI1MGM5LAorCTB4ZDI3Zjg4OTIsIDB4ZjU5MTljM2EsIDB4NTkxYzZlM2MsIDB4YTEyZjcxNGYsIDB4YTZiOGQ0ZjcsIDB4YmIzZWJlZGEsCisJMHg1NTE4NDEyYiwgMHhjMjRkNDdhNCwgMHhjNGZkNTFkZSwgMHg2NDUzOGU3ZCwgMHg1NGZhYWE3ZiwgMHg1N2ZlZjcxNiwKKwkweDA4Zjc0ZmFiLCAweGZiNTQzYTdkLCAweDc5YmI3M2RlLCAweDQzY2JlN2RjLCAweDFjODAwZjNkLCAweGE0NmY5YzlmLAorCTB4MGU0Y2I4ZWYsIDB4YTNkZmNjM2YsIDB4ZmU0OTg0NzAsIDB4OTEzNzc0NmYsIDB4NjlmYjBjMWYsIDB4ZTYwNGEzNDYsCisJMHhmM2U2NDQ3NSwgMHhmM2JlZTVhOSwgMHhlZmQ2MGE2ZCwgMHgwYWY0YmI5NSwgMHgxNmZmMDdmNSwgMHg1Njg2MDNlMCwKKwkweDBkODY5ZGZhLCAweDEzN2Q3MzhmLCAweGQ2NTFmNDU3LCAweGJhODNkZWU1LCAweGU2OTk0ZmIzLCAweDYxZWZjMjRhLAorCTB4ZGY4MzVmNmYsIDB4OGMyYTBiMDEsIDB4YjU5OGViYmUsIDB4ZWU0NThiYjQsIDB4ZGMzMWE1ZjcsIDB4ZmY5YzlkYWYsCisJMHg2ODA3MWRkNiwgMHg2OWVhMWZkZCwgMHgwMzU3NjhkZCwgMHg5ZDk2NGY5ZCwgMHhjZmU3MDUwZSwgMHhmZDIzZGJmNiwKKwkweGY3ZDk3ZGVjLCAweGI3MDA5ZGRhLCAweDA4NmM2OTdjLCAweGEzYzM3YWQxLCAweGVjZjMwMTdlLCAweDA3OGQ1NzMzLAorCTB4NzNlZDhkNGIsIDB4MGJmNTE4MWYsIDB4NzM0NmM3YzAsIDB4YTNjYzA0ZDUsIDB4ZGJkZmI2YWMsIDB4ZGFlNTFmM2UsCisJMHg2MDI2NWJkOSwgMHhiY2VjMWJmYywgMHg4M2I3ZDQ1NiwgMHhjZGI3ZGZmNiwgMHg1ZDNiYmY4YywgMHhkNjlmNzhlZCwKKwkweGFiYWZhMjMxLCAweDVhYmZiZjA2LCAweDQ4ZjdlMGVkLCAweDg3YmVkMWJlLCAweDdiNDA0Y2M2LCAweDczYzFlYzM5LAorCTB4MGM5ZjM0NGYsIDB4MTY0Y2RkMjIsIDB4MmYxNzY1ZWIsIDB4YmQ0MWZjNTEsIDB4OWU3M2Q5OTcsIDB4ZjhmZjQ3ZDMsCisJMHg4ZmI4MGY0MCwgMHg0NTVjYmY2YiwgMHg3ZGI5MjJmNywgMHhhMDI2ZjliYSwgMHgzYzdkNzVkNSwgMHhmMWRiMGM3ZiwKKwkweGJmNThlMDdiLCAweDAwMWQ4NjI4LCAweDRiZTc1Y2YzLCAweGNhZWJmM2M2LCAweGRlODYzN2JhLCAweDM2ZmJlZGNkLAorCTB4ZjZlNzgzZTAsIDB4NDRiYzcwNjQsIDB4YzMxZTZmYjcsIDB4YWZiODgyZWQsIDB4OTI3MmNmZGUsIDB4N2ZmNWMwM2QsCisJMHhmMzEyYzBiMCwgMHhhOWI3NTUzYiwgMHgzYjFhZDJmYSwgMHg1NTJkNDUwZiwgMHgyM2RhYTU3OSwgMHgyMWIzNWY4MCwKKwkweGM2OWJiZjAyLCAweDdjZmRmZjcwLCAweGYxMDNhN2E5LCAweDdmZTc3ZGY3LCAweGU1MGI3MTBhLCAweGY2Y2Y1MmYxLAorCTB4YWU5MWMzMzEsIDB4OTdhZDVmMDQsIDB4ZWUwMWM2NjMsIDB4YzVhM2YzMWMsIDB4MTM0MTZlMmIsIDB4NzNiZWFiZWYsCisJMHg4NmU5NmZlOSwgMHg3NDQxZGJhNiwgMHhmOGU5NTA2NSwgMHhmZmUzYTIyMSwgMHhlMjdiZjQ4YiwgMHgyMGVmZDBmYiwKKwkweDE0ZmU3NDc5LCAweGQzNDdjM2RkLCAweDAzYmY0YWIxLCAweDliZTZjODc0LCAweDc5ZTgwNjkyLCAweDdlYzFiYTI4LAorCTB4ZTgwNjkyOGIsIDB4ZmI3ZWE4N2EsIDB4OTMxZmJmY2UsIDB4ZTljNjA3ZGUsIDB4YWJkZDJjYmQsIDB4ZDA1OWI3ZjQsCisJMHg1NDBmN2E5MSwgMHhmZDc5Y2UyOSwgMHhmZWVjOGNkNywgMHhmNTQ2M2RhMywgMHg3ZTM1YzY3NywgMHhjYTNmZTgxMSwKKwkweDcyYjBhZWEzLCAweDM3YjQ3ZmI5LCAweDNkMTlmYjk3LCAweDlhOWZiYTY2LCAweGJlMjk1ZWU5LCAweDIzNWQwZGJiLAorCTB4ZjIxMWFkYzYsIDB4NzVkYmE2N2UsIDB4ZWFhZjM5NTksIDB4ZmRkZjU1MGIsIDB4NDM3NzdjNGYsIDB4MDA4MDAwOTgsCisJMHgwMDAwMDAwMCwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwgMHhjNzU0NzQwYiwgMHhlZWJkNjA5NSwKKwkweDkxYTkzZmQ3LCAweDE2ODgzZTllLCAweGMwODVhMDkyLCAweGViNDA0NjE2LCAweDdkM2QwNWZmLCAweGE3MWYzMjEwLAorCTB4OTAwYjE4YzEsIDB4MDRlMDhiNGMsIDB4NjBkZDQ5MWIsIDB4OWUzZDkwZTIsIDB4MTIzMjMxYTEsIDB4MWY2MmNkOWYsCisJMHhiZDY2NzhjYywgMHg4YzAzMGQzOSwgMHhjMDc3YjE5ZCwgMHgwYjYxMWM1NiwgMHgzODM3ZTJkYywgMHg3MWM2ZWM0YiwKKwkweDNjNGM5YzE4LCAweDZjMDg0M2MyLCAweGM3MThkMzZjLCAweGJjNGFiMjQzLCAweDBmN2FkZWY3LCAweDBiNzU2YmY1LAorCTB4Y2NlYjQzZGIsIDB4NDBlNzU3NjQsIDB4YWFiZDVlYTksIDB4ZmVlYjc1YmEsIDB4N2FkM2Q1NmYsIDB4Y2VjYzYzMzMsCisJMHg1M2Y4MTdkOCwgMHgwOGFjYmMzZCwgMHg2NWNiMTkxYSwgMHhmYzA1ZjNmNCwgMHhlYmYyZTJkYiwgMHhkZjYzMmIyNSwKKwkweGI0Y2JlZWI5LCAweDJjOTNmOTQzLCAweDFlNjcwYWRmLCAweDM1NWZhZjYzLCAweGIxODhhY2NhLCAweGY2ZTNhOWFlLAorCTB4ZmE4N2IzZWEsIDB4OGMwODc1OGYsIDB4MTI3YjQzMTUsIDB4ZWY3Njg2NzQsIDB4MDA3N2MxNTQsIDB4MjdkMTMxMWUsCisJMHg3ZDFlOWQyZSwgMHhmZDRjOWZkZSwgMHg4Nzk1Y2RhZSwgMHg5ZDMyZmFiMywgMHhhZjdhNjg2MywgMHg1OWIxOGQzZSwKKwkweGNhMGU5YmY4LCAweDMzMmQ5MzIwLCAweDVhZWRjY2EwLCAweGNjYTAxMmM3LCAweDk2MzZmOTJjLCAweGIxMmU2MjRjLAorCTB4ZjI5MzMxODQsIDB4NmJjYWU5OWUsIDB4MzlmMDE1ZGYsIDB4ZmU4MzE5OTMsIDB4NTZmNTk1ZWIsIDB4MGQ1ZDdmMzAsCisJMHhjY2NmMzFjMCwgMHgzODg5ZjFiYywgMHhjOWM5ZDM3YSwgMHg5N2NkNWVkMCwgMHhkNzY5ZTMwYSwgMHhmZTlmZGUxZCwKKwkweGU0ZjMyOWE1LCAweDU3MmUzNjMwLCAweGZiY2RmNWEwLCAweGYwNGNmOThjLCAweGViNmU3NTZiLCAweGU3MDMzNjAyLAorCTB4ZDFjYzcxODcsIDB4MWU2MGE5YzcsIDB4MWQwMWU5OTksIDB4MmFkYjVlZTUsIDB4YWE2YjNmZTgsIDB4YWZlNWUxYzksCisJMHg2Y2RlZjg0YiwgMHgzZTFiZGZjNiwgMHg0YWM2N2FjZSwgMHhlMmQ5YzY4NiwgMHg1NGZhYzgwOSwgMHg0YzQ5OGVjNiwKKwkweDZmNWIyZmU5LCAweGY4ZTc2N2MxLCAweGIyODU3YWMzLCAweGNkNmU1MzNlLCAweGViY2JjNDU1LCAweDA3ZTFjNzkyLAorCTB4ODYwZjY3NzgsIDB4Y2IxZDZmOGQsIDB4NTU2MzNhNTgsIDB4OGI5ZjY5OWYsIDB4Mzg3ZDZkMGUsIDB4NThmYjMwNWMsCisJMHg1ZjRmZTVmYSwgMHgzMzQ2N2NjMCwgMHg1ZDM5OGZjNywgMHg1ZDc5Zjg0NywgMHgzZTkwZmEzMiwgMHhlZWQ0YWUyYSwKKwkweDRiMTg5MzYyLCAweGZjODdlYzk2LCAweDk5MmFkY2YwLCAweDM2MDUzZTFkLCAweDdlNTNmNjMzLCAweDA0MDJiOGFmLAorCTB4YzI5ZmVkMDQsIDB4NzM4MDE0YmYsIDB4NWFlZjZlOWIsIDB4MTZkZGQwMjcsIDB4YTIxZjRjNmMsIDB4NGMwYjI1OTcsCisJMHgyZTk2MzgxYSwgMHg5YmQ0ZDQ0OSwgMHhlYTY5Yzc5YSwgMHhkNDRmNTdjYiwgMHhkYjczNmZlYywgMHg0M2ZhOWFkZCwKKwkweGVhNmE2NjFiLCAweDM1NGEyN2FlLCAweGQ1OWQ1NWY1LCAweGVmNTZmMTlhLCAweGZmNjlhYjljLCAweDY4NmZlZWQ2LAorCTB4N2Y5ZTZiZWEsIDB4NzQ3ZjUzNTAsIDB4ZTkxMWNhZmYsIDB4ODg1ZjFhMjIsIDB4ODllOTkxYjYsIDB4ZDIzYjA1NzksCisJMHgzYTRkODhiZiwgMHg5Y2M1Y2ZmYywgMHhmN2Y3YTNkMywgMHg3ZWMyN2YyMSwgMHhiN2FmNmViZCwgMHhkNWZlODJhZCwKKwkweGU3OGQzZjU3LCAweGM1ZjRiNGZkLCAweGY5MDA3MmJjLCAweDE3ZDk1NmEzLCAweDQwMmJjNzk4LCAweGFkNTI4ZDdiLAorCTB4ZjQ0NWJlOTUsIDB4NDUzNjYzNWUsIDB4ZWU5NTFiZTQsIDB4MTE1NjBhYjYsIDB4ZGE2NmFmYzcsIDB4NmRiMGFhZmQsCisJMHg3ZTQ3YWViZCwgMHhlYmQwMWEyZSwgMHgzNzU5YmU2MSwgMHgyMTU3ZmNiNSwgMHhjNzA2ZmMzNSwgMHhjN2FmY2M2NywKKwkweGE1Y2I4NGY1LCAweDkzMThlZWZmLCAweDYwOWUzOTdhLCAweGZjMDE3ZmI1LCAweDhjYzlhY2M0LCAweGEzYzc0Nzk1LAorCTB4NWRiN2E3NGEsIDB4NmY1ZjYzMzcsIDB4ZWFmY2NhZGQsIDB4YTA1ODJiN2EsIDB4ZGEzZWU5MGUsIDB4ZmMzYjY3YmEsCisJMHg1MTZiOTI3YSwgMHg1ZWJlMWRkNiwgMHg2ZmVmZmUxNSwgMHhlZjgxNWY4NiwgMHhmMzIzZmY1ZiwgMHhkYjEwMTNlZCwKKwkweGU2ZmM4OGIyLCAweGNmZWI1ZGRmLCAweDAyNDAyYmI1LCAweDdhMTUyN2JjLCAweDI3ODI5MWE4LCAweDBlOTA4YjEyLAorCTB4ODM2NTAzOTgsIDB4NTFmOTkwNzEsIDB4YzEzM2Q0MGUsIDB4OTY1Mjg0NmYsIDB4MzhhZjA0MWMsIDB4MzAzNGVmNjgsCisJMHg3ZTcxZWIyYSwgMHhhNjg2MTA3MSwgMHgzNWViNDVkMiwgMHgyODhkY2EwZSwgMHhhOTJjNDU2ZiwgMHhlYmM3OWNlZSwKKwkweDg3NWUwNjhlLCAweGQ1MmVhOGY3LCAweDNlZTdiYWYyLCAweGVhOTI4NzVlLCAweDQzYWYyNzVlLCAweDVhZWZhYTNmLAorCTB4YjhjZWY1OGMsIDB4MDE0NDg5YzAsIDB4NTgyNWJlZWIsIDB4NWExZTBlMzcsIDB4MDVmZjRiY2EsIDB4ZTQ5OTRhODEsCisJMHg1ZGU4Mzg5NiwgMHhlYzdlYTdhNywgMHgzNzA3YWYyMiwgMHhmMmQwZmE3MSwgMHhmNjVlMzE4MywgMHg1ZjE5YjNmOSwKKwkweDgxM2YzYzNkLCAweGZkYzI0ZGJmLCAweDAwNmZkNzVjLCAweDgyOGFkNDNjLCAweGQ1ZWYwZWMzLCAweDNmODczMjBjLAorCTB4ZTRkNWY3MTUsIDB4ZTA5N2Q5OTAsIDB4MzEzM2EwMzMsIDB4OGNjZjg4NmQsIDB4NGFiMTk4MmMsIDB4MGY3OTNlMjAsCisJMHhlZGNhYWRmMSwgMHhlOTY4ZTNlMSwgMHg1YWY1MWVhYiwgMHhmYzNiZWMwMSwgMHhlNTE5MzFiZSwgMHhmYWE3YTczMCwKKwkweDJjMTJlMGIyLCAweGQwMTNmOWYxLCAweGZjMzI3YjNlLCAweDFmNGUxZTRiLCAweDMyYTI1YzJhLCAweDVmYjVhNTVmLAorCTB4MzJiNmFhOGYsIDB4NTliNzI2MTgsIDB4ODU1OWQxMTcsIDB4ZDkyYzlkNzksIDB4NzE2ZGNiODcsIDB4MmUyZmU1NTAsCisJMHg1NmUxYzIyZiwgMHgxZjM5YWRlNSwgMHhmYjFhNmNmOCwgMHhiOTk2N2MzYSwgMHhhZWIzNmEwYSwgMHhkOWYwYWJiZSwKKwkweDkzM2UzMGJhLCAweDg0OTZmN2FkLCAweDMyMTAxOWYwLCAweGI3ZDlmMGQzLCAweDI3NmU5ZTg5LCAweDgzMDk0ZTVmLAorCTB4NGYxODI2NzUsIDB4MjNlODBjZjYsIDB4YzA1NDk5Y2EsIDB4M2UyNDQyNDMsIDB4YjIxYmZiOWIsIDB4OTdjOGEyMWYsCisJMHg1ODE3ZjAzNywgMHg5ODdlNmU2NywgMHg1Y2Y0NTE5YywgMHhmZWU3YWFiNSwgMHhkZGEyYjNhOCwgMHgxMTdhNjdlMiwKKwkweGM4N2M3MGNiLCAweGQyMzEzYjJjLCAweGJlM2NiNTczLCAweDZiYmEwNjA5LCAweDkwZjgwZWE4LCAweDYzYmU4MTBmLAorCTB4MDZkYzE1MWYsIDB4Y2VjOTliY2YsIDB4ODA1YWI4NjIsIDB4MzFlMmFhYzcsIDB4NzFhZDZlOGMsIDB4ZWM5MDlkMmYsCisJMHhlY2Y1MDViYywgMHg0ZTZlODUxOCwgMHhkZjExYTc2NiwgMHhjN2JkNzZjMywgMHhiNTlkZTQ0MiwgMHgwMWYxY2JlOCwKKwkweGM3MDkzN2NkLCAweGJmMjI2NjczLCAweGM2ZGI0MGQ1LCAweDMzZmRlMTgyLCAweDk5ZjAwZmIxLCAweDNlN2NjODM1LAorCTB4MDhlYWNmNzgsIDB4NDZhZjU4MDgsIDB4ZjQ4ZDllZmQsIDB4ZmU1MWVhY2YsIDB4ZTgwOTVmNTcsIDB4ZTVhNWVhMjUsCisJMHgwMDc0NWI5NywgMHhhNDAxM2ZiZiwgMHg1MTdjOGI1NywgMHg2NDJlOWMzMCwgMHg3ZWUzZDNlNiwgMHhhZmZkZDU3YywKKwkweDkwMzQxZmI2LCAweGZmZGIwZWJjLCAweGNmYjA0MTlhLCAweGQ1Mzk0ZTAwLCAweDFhZmEyMGU0LCAweGM4Y2Y2NDY0LAorCTB4NDhjN2MxNGUsIDB4YmMyMWFjYmUsIDB4YWRlM2Y2YTgsIDB4MTc2ODI2ZjYsIDB4NjIyZTkxZTgsIDB4ZjY0MGIzN2IsCisJMHhiMzZjYTdkMCwgMHhmMzA1ZjM4MSwgMHg4NjdhNTVmYSwgMHgzMGFmY2JlNywgMHgzNGVkMTEzOSwgMHg3ZWQ0ZjNjYiwKKwkweGZhMjMxMzZjLCAweDNjOTdiNmE4LCAweGI4NDc2NzU1LCAweDQ0Y2M3NjA2LCAweDBhYmQyNGI4LCAweGM3MTUzZjk3LAorCTB4NzBlMjYwYmQsIDB4N2YwOGRhZjksIDB4ZTRmZTBhZDUsIDB4NDMzMzFkNDEsIDB4Njk0ZmJmYmIsIDB4ZmY1ZmEzMGYsCisJMHhmY2QzYjcyMCwgMHg3MDJiYzQ0ZiwgMHg0M2YwYzhkZCwgMHg0ZWQwMDdiZiwgMHhlNTY4OTMwNiwgMHg0M2ZmMDNkZCwKKwkweDY5ZGNmNzg0LCAweDAxZGYzZjc3LCAweGYwMjhhZTVkLCAweDZlODU2ZmZjLCAweDUxMjRkYTNmLCAweGY1Y2QzZWI5LAorCTB4YzdhMDdjZmQsIDB4N2M2ZTkxN2YsIDB4MGZjODY2ZTIsIDB4ZDVmNzQ0MzksIDB4OTAyN2NmZjYsIDB4ZDlmMTUyMWUsCisJMHgxMGY0ODYzNywgMHhlOGY4NGRjMiwgMHhkYjgzNDRiMywgMHgzODc1MTBhYSwgMHhlNWJmMGFiYywgMHgyYTU3Yzg4YywKKwkweDU3N2MyYTljLCAweDBiYWI3YTdjLCAweGU3YjM3YmM2LCAweGY2MWMxMzVmLCAweDQ1NGJmODIxLCAweGZiODQ3ZWU3LAorCTB4Njc0ZmMxY2QsIDB4OTJlZjg4YjgsIDB4MzQ2Njc2MzUsIDB4ZmM1MjY2ZjksIDB4OTY0Y2E0ODgsIDB4M2VhMmE2MmIsCisJMHg4NWNjNzM4OCwgMHg3NGNiOGM3NSwgMHgzNjRjYmFkMSwgMHgwMmZkMWRhMywgMHhmMzkzMjc0YiwgMHg4MjczNDg2MCwKKwkweGY3ZjA4Y2NmLCAweGQyZWMzN2E3LCAweGE5ZDZmYjQzLCAweGZiYzEzMzIyLCAweDM2YmNiMzViLCAweDA5ZmVhNzVhLAorCTB4OTM5OWViODYsIDB4ZDYwMzYxZTksIDB4NjU3N2YzZTgsIDB4OWMxMTI5M2UsIDB4YmY0NzUwODMsIDB4YTJmMWM2YzcsCisJMHhmOGY0Njg5ZiwgMHhjNzVmYjllMCwgMHhjMTBhMWNkNiwgMHhlZTAyYzFjYiwgMHhlN2NkOWQ4ZiwgMHgxZTE3ZGFlNSwKKwkweDg0Mjk3NmQ5LCAweGFkMGZkYTNmLCAweGJkZGRkNGQzLCAweDI5NzZkYmRmLCAweDEwNmVkZTU0LCAweDM2OTdkYzQ0LAorCTB4ZDlkYjhlODUsIDB4NWZmNDA0YzAsIDB4ZTEzYjQ1NWEsIDB4OTAzNzQzYTEsIDB4MmM2YmY1ODYsIDB4YWUwYTdlNzgsCisJMHgwMDhmZTcwZiwgMHg1YmU3M2ZmZiwgMHhkMmZmM2Q2MiwgMHg4ZmY2NTBhOSwgMHhmZjY5ZmVlMSwgMHgwZGY5MWYyNCwKKwkweDJiMWZmY2VhLCAweDVmMzhmZmViLCAweGE2Mzg3MzE3LCAweGIzYmExZTAxLCAweDlmNzBjNWJmLCAweDNmN2M2YzZhLAorCTB4N2E3MjUwNGQsIDB4ZjU0MzcyZTYsIDB4NzM5ZTg2NzcsIDB4M2VhNTUxNzksIDB4NzNkZTNhMGYsIDB4MWNlOTFkMTIsCisJMHg5OTRjNzZhOCwgMHg3ZGU5MTFmNiwgMHg3MWJiZDIyNywgMHg0OGI1YmVhOCwgMHhmMDhiZThkNywgMHgyMjA1NzNmZSwKKwkweDE2YzA3YmMxLCAweGExNWIzZGI5LCAweDVjMTM5ZDk3LCAweGRmZThkOWRkLCAweDZjNzNhYjNmLCAweGNiY2UyNTg2LAorCTB4ZTUxZTNhZGMsIDB4N2FkYjU2ZmQsIDB4ZTJlNjUzYTIsIDB4MzhjMDU4ZWIsIDB4ZjRjYmNlYmYsIDB4ZDFlODE5NzgsCisJMHg4MmI3ZmU3OSwgMHg4ZGQ2MmE0MiwgMHhmODg2YzJjYywgMHhlNzBiZjU1NywgMHgwMWQxM2U4OSwgMHhkN2YyYmJmZCwKKwkweDVkZGQ3MTk5LCAweDFjNjZmNWI2LCAweDgyZDY4NGNmLCAweGVhM2MzODZlLCAweGU2ZWMwZmJhLCAweGY0Y2JjZWYzLAorCTB4YjJlOWUwODksIDB4YzU3YmI5YjksIDB4YTMzZmE4MDEsIDB4ZWU1ZTdiYWMsIDB4NmFhZjZhM2EsIDB4MDkxNDlmZjQsCisJMHg0MzY3ZTA3ZiwgMHhmNTY4ZThkZCwgMHg4NzI2M2NlMiwgMHgzYWMyNDZiZCwgMHhiMmM2NmM3MywgMHhlYzg5Nzg0ZiwKKwkweDBkYmY1NTEzLCAweDlkYWQ0ZmU5LCAweDkxYmFmYTcyLCAweDE1ZDc2M2U0LCAweGYyNDRjZjlkLCAweDA3MzA1ZTUzLAorCTB4YmNhZjlmZGUsIDB4N2I3MjBkNmQsIDB4YTNiZjZiYmUsIDB4MWNmN2M0NWYsIDB4ZjNlM2Y5MDIsIDB4NzY0ZGJmNzMsCisJMHgyZTc3MzU5ZCwgMHg1NmIzZTdiNywgMHg5ODU0OTE3OSwgMHgzZmExZjA0ZiwgMHg1YmM1NGYzMSwgMHgxOTVmNTY5ZSwKKwkweGEwYjcxNzFkLCAweGQ0ZGUzMGZhLCAweDJjNTlkMWVhLCAweDJhYmU5MGMwLCAweDcwZjNmY2MyLCAweDQwYmIzYjdkLAorCTB4NTk3MmQ3YjEsIDB4MmQyYmRhMzEsIDB4Yzg2M2RmMjYsIDB4NDIwZDk2MGYsIDB4ZTJhMWMyM2EsIDB4OGU4MTQ1NzUsCisJMHg3Yzg2MjBlOCwgMHg5NDI2NjdiMCwgMHhiNDY1ZDk1ZCwgMHhkM2NjZmFhZiwgMHg1Zjk4MDQxNywgMHg0MzY2ZGYxNywKKwkweDhjZGJkMGJlLCAweGIzMWJjNDdlLCAweGE4MGQxZjhhLCAweGZmYzI0ZGYzLCAweGI3YjIyNTMzLCAweDJmODQ4ZWIwLAorCTB4ZmM3OTM5N2QsIDB4ODZjNzk2NmUsIDB4YjAzMmVjZWIsIDB4YTdmMjQ4YTYsIDB4ZmRmMzgwYjYsIDB4OTI3ZTU5MDcsCisJMHg4ZGRhZDEwZiwgMHg3YmQyMDQxYiwgMHg2NjM3N2NhYSwgMHhjMjM3ZDkzMiwgMHg1YzhjZGI3OCwgMHhkMjVmODBjZSwKKwkweDNlYmY0MDJiLCAweGZmYTAxN2E0LCAweGY3YjM1YTE3LCAweDdiYTIwNWU5LCAweGFkZjFlNTE5LCAweDEyZWZiMTUyLAorCTB4ZmUxZmI5MGIsIDB4Y2E4OTgxNjYsIDB4NTQ3ZWNhOTMsIDB4YzMzNjcxN2YsIDB4YWZmYzgyMzUsIDB4ODQzMGYyYWEsCisJMHhjN2NhOTRkZiwgMHhmMWYyNjUzMywgMHg3MzJmMjI0YywgMHgyZTNmNzE5NSwgMHg1Y2RjN2NlMiwgMHg1ZmI5N2IxNCwKKwkweGZiN2EzMzlhLCAweDhkN2E0YjFjLCAweDkwMjg1Mjg3LCAweDk4ZGQ3OWU4LCAweGM1MmU0OTg3LCAweGEzMzk2ZjEyLAorCTB4NWRhMzM3ODgsIDB4YTcwNzNmYTEsIDB4NzNmZGI1MTMsIDB4YWFmZmRlNDUsIDB4YjI3NGU2MjAsIDB4ZTUxNDcyYjQsCisJMHhhNGU5MmM0MSwgMHhkZTgzY2ZlMiwgMHg3OWZmOTdjZiwgMHg2OGRhNDdlYywgMHg5OWEzZTNhZSwgMHhlMDQyZDRmMiwKKwkweDJlOWNiZjkzLCAweDk2ZTU4M2RmLCAweGJiZGIyM2Q3LCAweDc3MmY2M2YzLCAweDcyODAxZWQzLCAweDM3ZGYwNGYxLAorCTB4NzliM2U5MjMsIDB4ZmI5N2IxODUsIDB4NDhiZWQxNGIsIDB4Zjg0NWY2ZTEsIDB4M2QxNWNiZmMsIDB4ZDI3OTRiMTQsCisJMHgxMWIzNjUwNCwgMHhmZjAxMWZkNiwgMHhmY2MyOGU4ZiwgMHhlZjUwNzNjYiwgMHhlNTgxN2I3MiwgMHgwZmE0Yjk5ZSwKKwkweDY3ZTFkZmIxLCAweDNlYzQyZWIyLCAweDFjMTQ3YjA2LCAweDA1NDNiNDQxLCAweGVkZGQ5MjM5LCAweDJkN2VmZDhkLAorCTB4NjQzZjQ4N2QsIDB4NWM2MWNjYWYsIDB4MmZmM2E4MWYsIDB4N2FmOGUxMmMsIDB4YjBlMDE0N2EsIDB4MjVlYWRlMDAsCisJMHhjMjliYWY2ZSwgMHhiZmNiNTBlMCwgMHg3ZGJkOGMyZCwgMHhlMDQzZTkyYSwgMHgxZmJiMDU0OCwgMHg0NDQyMDVjYiwKKwkweGQwYTdhZjdiLCAweDFhN2U3MzE4LCAweGUyZDk3ODBiLCAweGU0OTE4ZDYwLCAweGVmZDhjOWM5LCAweGNhMGQ5YTRiLAorCTB4ZDNjZWU5YWEsIDB4NGI5NmQ3MjgsIDB4NWM2MGU3ODcsIDB4MWZmOGZiZjksIDB4NzlkMjFiZTYsIDB4YzFhNTYxYmUsCisJMHhhZWZmNDVlNSwgMHhiYzNiYjI0YiwgMHhhYzQ3OGM3NiwgMHg3Y2NhZmFhMiwgMHg1MmFmNDNiYiwgMHg5NGRmYjYzZSwKKwkweDZjMDVkYjdjLCAweGU1N2Q1MWQ3LCAweGRhMWYyNGVmLCAweGQ2MTdkZmMzLCAweGYxYzZjOTlkLCAweGZiMWRlYjM2LAorCTB4OTU5ZGM2MTgsIDB4ZTc4ZDgzN2MsIDB4OWUzNmFjMWIsIDB4M2M2ZDEwOWYsIDB4MjliNTYwZWYsIDB4Y2YxYjA3NzksCisJMHg0YTZkNTgzYiwgMHhmM2M2YzFkZSwgMHg5MjliNTYwZSwgMHhiY2YxYjA3NywgMHhlNGE2ZDU4MywgMHhlZjNjNmMxZCwKKwkweDc5MjliNTYwLCAweDNiY2YxYjA3LCAweGRlNmE2ZDU4LCAweDE1MzhkM2MxLCAweDllMzY5MWUzLCAweDc4ZGFiMDc3LAorCTB4ZTM2YWMxZGUsIDB4OTc5ODA3NzksIDB4M2M2YzFkZTcsIDB4ZjE3MDAwZWYsIDB4NzIyZDgzYmMsIDB4OTQzYWMxZGUsCisJMHhmMWZmMjA3NywgMHg2N2E0OTYxOCwgMHg1NDdmNWZiOCwgMHg3YjA2Y2ZhOSwgMHg3ODYzMzRkZCwgMHhlNzZhYjU1ZSwKKwkweDE3MTgyZGZlLCAweGZjNzIwOWFiLCAweDVlNzgzOTU1LCAweDc3YjQxNGQ5LCAweDQ1N2UzMDBhLCAweDA0ZGZiMDY2LAorCTB4MTE0NTY1ZmUsIDB4YjBkNWYwYzMsIDB4MTNmM2MzZjksIDB4YmRlN2Q5ZGQsIDB4YjBhM2ZhMDIsIDB4MDNiYzI5OTcsCisJMHgxOGVhMjllNSwgMHhmZTdjM2Y3ZiwgMHgzYjU3NzE2MSwgMHg2NWQ2ZTc4ZiwgMHgzYmYwOGI3ZSwgMHg3ODQ4MmNiYiwKKwkweDg3MThlN2MzLCAweDEzZjI1M2FkLCAweGZmYWQ1NmI1LCAweGIyZTY3ZjJhLCAweDk5NWY3MWY5LCAweGY4MDg5OWQ0LAorCTB4YmI2ZDQ1OTAsIDB4OGMyZmY5ODgsIDB4ZDdmMTVlYmIsIDB4NmFiN2RjNjEsIDB4MTU3NzFiNTAsIDB4YjhkNDFiMzMsCisJMHg4NDRiY2YzYywgMHhlMWRmMzljMSwgMHg2YjA0NWYxYywgMHgyYTdmMDE2YSwgMHhjMWNmZTYwMSwgMHg1M2FlMTVhNCwKKwkweGE0NWU3YzEyLCAweDg4MWJkZGI3LCAweDQ1M2JiY2JlLCAweGFhNjgxNGM3LCAweDllNjA2NDA0LCAweDZhMjAxMmE1LAorCTB4YzY1NGQyODYsIDB4ZjI0Y2QyYWMsIDB4ZmU5ZDM4OWIsIDB4ZjFiZGQ0ZDcsIDB4MDMwZjI4ZDksIDB4NmMwNDQ2N2EsCisJMHhmOWE4M2MyMywgMHhiZjU4MDQ4NSwgMHgyYmZjODMzNCwgMHgzMzJhZWZmMiwgMHgzYTQ3YmZmZCwgMHhjYzgyZWI1MCwKKwkweDVkODIzOGYzLCAweDJmODBjZDYyLCAweDVjMjY2ZWY5LCAweGNlYWI5MzM2LCAweDQ1ZWI2ZjkwLCAweDczYzMzNWU2LAorCTB4OWIzN2U5NDEsIDB4MmQ0ZTI5MDUsIDB4NzZmMjg5MzMsIDB4NjU0MWNjYjUsIDB4Njk1Nzc0ZDEsIDB4Y2VhM2YwMTEsCisJMHg3YWUxNzVlYywgMHgwOTY2ZWNhYSwgMHhlZTNkODVmOSwgMHhmMTQ4ZGIzYywgMHgzMmU5N2FlNCwgMHhmNjAwNDllMCwKKwkweDQ4ZGE2MmY4LCAweDJlYzg4YTc2LCAweDQ1MWNmOGFiLCAweDJmMWY0OGJiLCAweGFkYzkyMjc4LCAweDYxZWJkODhhLAorCTB4MGEyYTgzYjIsIDB4MmRjN2M5MTksIDB4N2NmY2IyMmMsIDB4Y2ZjYjg0YWMsIDB4ZGY1ZDRiMzcsIDB4ZmJkNzNjNDQsCisJMHg4NzhmZDUxNiwgMHhkMGJlOGYyZSwgMHg2ZDliNzk0YSwgMHg1YmMyZjE2MSwgMHg2ZjYyOGFmZCwgMHg5MGU3MjQ0NywKKwkweGU5MDFiOTNkLCAweDhmMDRmMTdhLCAweDE2ODhlMTBkLCAweGY2MmE3OGM3LCAweDFiNDllY2YwLCAweDc2N2JhZWMxLAorCTB4ZDQ1YWVjMTQsIDB4MmFlY2I3NDMsIDB4ZmE5Mzk5ZmIsIDB4YjFjYTNiNTAsIDB4ZDBiYTRmMGUsIDB4OTA5MmJhZWYsCisJMHhjM2RkYWEzOCwgMHg4ZDY3MTQzYywgMHg2OTc5YWYxYywgMHg5OTIwZTIxNCwgMHhmZTEzYmZhOCwgMHhlYTYzOWQwYiwKKwkweDg3ZmIwMjNhLCAweDU0YmNmYmU1LCAweDQyOGVmOGUxLCAweDYzNGJlMzg3LCAweGEwZDMxN2NmLCAweDYxM2UyN2Q0LAorCTB4NzcxYjhkMGIsIDB4OTcwZTA0NTksIDB4ZjVjMGQwNDEsIDB4ZmRmZjYyYjksIDB4NzhmNjI0YTAsIDB4N2Q3MjgxMmEsCisJMHhmMjJlZmNhOSwgMHhmOTc0ZDU2MSwgMHg3Y2FhNTg2NywgMHhiYWUxZGYzYiwgMHgyZDI5ZmM0MCwgMHhmOTAyNGZhYSwKKwkweDc2N2Y2NmJjLCAweDA2ODllYTAxLCAweDJhZTM1ZWRiLCAweDUyZDVmNzgwLCAweDNhMjJmZGY5LCAweDViMWZmNDZmLAorCTB4MWViMTZlMWUsIDB4ZjdiYzQ3OGYsIDB4YTNjYjIyYjksIDB4YzUwOTExYmIsIDB4MjhkZTRmZTQsIDB4NjdlNGZlZTIsCisJMHhmZTI4ODc4NCwgMHg2MzhiYWZlNCwgMHhlYTdiMmZiZSwgMHhjOWZjODY3MywgMHg1YjFmZmU3MCwgMHg2MzlkZTNjYywKKwkweDA2OGUwMTQ3LCAweGYxNDY1NzI4LCAweGMyOGNhNmViLCAweGJmNWE4ZGZjLCAweDQ0M2ViZjZlLCAweDg1NDExMGNlLAorCTB4ZGM2YzY5ZTYsIDB4ZmMxMTYzYWYsIDB4YmEzNTk3M2QsIDB4MTQ3YjM3YmYsIDB4ZjMxMGIxZDYsIDB4ZjU5MWI1NzEsCisJMHgzMWM1N2RkYSwgMHg3ZTk2YWZmNywgMHgzMzA3Y2EwMywgMHhkMGE5ZmQ1YiwgMHg2ZjMwYmNjNCwgMHhiMmJlNTBkYSwKKwkweDBmYWZkNWM5LCAweDM4M2Y3MzhkLCAweGU1MzdlMGUxLCAweGIzN2U3MDA4LCAweGYyNzJlNjM4LCAweGY5MWU5YzdjLAorCTB4ZTExOWJkNzUsIDB4N2UwNjZhZTksIDB4MjU1ZmIwOGQsIDB4OWJmZmRjMjUsIDB4OTYxMWUxM2IsIDB4M2E2Mzc2ODgsCisJMHhlNDExZjc0MywgMHgzNjM3Y2YwOSwgMHg4MzYzN2UyOSwgMHgyYTc2N2ZhMiwgMHgyYzUzZDQ3MiwgMHhlNTJjZTk1MiwKKwkweGU4NTFiOWY1LCAweGZiY2FkN2ZhLCAweGI2OWM0YThkLCAweDJiZjI2MjUxLCAweGVjN2ZmNDkxLCAweDM4ZmNlNmU5LAorCTB4NzFjNmU3MjgsIDB4ZjMwZGVmMzgsIDB4ZjQ1M2RmY2YsIDB4ZDNkODllYzQsIDB4YTAwYzllY2YsIDB4OTFiNWI5OTMsCisJMHhmNjMwNzVmMSwgMHgwMjc0YjE3NCwgMHhmNmQ0YmZjYywgMHhmODkwMWNmNCwgMHgwZDliMmZiMCwgMHgyZTljNWY5NCwKKwkweGVmMGM1OGJmLCAweDU3YzI4YjZkLCAweDY5NzgyYjlmLCAweGIwM2EzZTg2LCAweDM0YTA1YmZiLCAweDkwMTBmOTQyLAorCTB4ZmE0MDU0ODEsIDB4NmZlYzU1ZWQsIDB4MTQzMDhlMDEsIDB4ZjFkZTA0MjAsIDB4M2FmNGU3ZTgsIDB4Y2U3YzFlZTQsCisJMHg3ZmU0NmQ1YywgMHhjYTFiYzg4NCwgMHgzOTk5NTY5ZiwgMHg4M2E3NzRkZiwgMHgwZWZlODhmZiwgMHg5MzM5ZDMzMywKKwkweDlmY2YyMGFlLCAweGZjZjI2NTc2LCAweDZhM2MzODY4LCAweDQ1NmZmNGZlLCAweDcxY2YxOThmLCAweGM0MTY2NTc3LAorCTB4ZWJkZGYyODUsIDB4NmYyNjk4OWIsIDB4ZTc4NTc1ZGMsIDB4OGE0ZmMxODUsIDB4Yzk0OWZhZDMsIDB4OGY4NTI3ZTQsCisJMHg3NGI5OTA5ZiwgMHgyNDdmYTg1ZSwgMHgwMjFmZGNjOCwgMHg1YzUwMjY3ZiwgMHhhOTE3ZTQzYywgMHg3Yzk4Y2ZmZSwKKwkweDdmZjE1Y2Y5LCAweGNkMWRmZDAyLCAweDQ5NDcxMTlmLCAweDA3MzA4YjBmLCAweDc0ZGRmZjNlLCAweDhmMTBkZmY5LAorCTB4MWZkM2QwMjMsIDB4OWZkM2QwYTMsIDB4MzQ3ZmRmYjAsIDB4MTFjYzYyN2EsIDB4ZjBjYzY4YjcsIDB4MWViMmJiNzEsCisJMHg3MDhlYjViNywgMHhkMzIxMjAzZiwgMHg1NGNlOTExOSwgMHg5YjdhMDJmYSwgMHhlODc2MzI1MCwgMHhiNGYzMjE3ZCwKKwkweDRiMTM2ZjRhLCAweGJkM2ViZjhhLCAweGYwYmVjMDVkLCAweGFmZTFhY2VmLCAweGQxNDlkNmVjLCAweDdhYjU5ZGZiLAorCTB4ZmEwZjI4Y2MsIDB4ZjE5YmQ3MzIsIDB4OTlkNGM0OWUsIDB4NmJjZTA3MmUsIDB4MDA2Yzk5MTEsIDB4M2U1Y2JiMzgsCisJMHgwMDdiOWUzMywgMHg2NGJmMmYzYiwgMHhjZGMxYmM4NCwgMHg3ZTNmMmUyMiwgMHhkY2ZmZWNhZCwgMHgyYWZmOWMwOSwKKwkweDdkYmUwYjk2LCAweDZjNGQ3ZmMwLCAweDRkZjcwMTk3LCAweDQ5NThmZjdkLCAweDdiODhmZGVjLCAweDM1ZWU0ODcyLAorCTB4ZjcyMDhjOTYsIDB4ZTJmODU2NWUsIDB4MmI1ZjA1NzMsIDB4ZTcyOWQ2ZGEsIDB4ZmI0NDU4OTksIDB4ZmRlYzU1NjcsCisJMHg5NDJiMzQ4YywgMHg0NWQ3NTI3MywgMHg3NDViZTNhNCwgMHgyMjg1ZTc4NywgMHhlMjE0NjdhYywgMHhlNGM3ZTdlMCwKKwkweGNkNGMzY2UwLCAweGZjNDA2ZDJiLCAweGYxYzQ1NjNlLCAweDdkZmVjZDE3LCAweGIzZmMxNDZhLCAweDRhZDcwMDg5LAorCTB4ZmQwMTk5ZjYsIDB4YzdmZjU5NjksIDB4MTFlNzQ4YWMsIDB4MzlkOTE1OGUsIDB4MDM5MDA2OWMsIDB4NTk5NWRmODAsCisJMHhmYzMxYjdiYSwgMHhiNWE0OTVkOSwgMHg2N2Y3ZDQ4NywgMHg2N2FlZmUyYiwgMHg1MjY3ZTQxNCwgMHhmMWMzY2UwZSwKKwkweDRjMGU3ZTFhLCAweDNlYzVjZjJkLCAweDg4YjRiMDFlLCAweDgwZmZiOWZiLCAweDczZmMwZWZjLCAweGUzNThhNGE4LAorCTB4NjRhOGZlZTcsIDB4YjVmNzNmNjQsIDB4MWFkYzhmN2YsIDB4Y2JhOGU4NTAsIDB4N2Q5ZWQ5MTEsIDB4NDBmYmY2MjEsCisJMHhkZDYwZTBlNywgMHhiOTE1N2NlZiwgMHhhYTZmNmUxMSwgMHhkYmQ4OWVlNSwgMHg3YTU5Njk3YiwgMHhkMWMzODc5YywKKwkweDI0ZTdiNGM4LCAweDI4ZGZmMTZlLCAweDhmNWQyZGUwLCAweDc3ZTk2OGYzLCAweDVmZmFlMzI1LCAweDFhNThjMzg1LAorCTB4ZTc4YzczZjMsIDB4ZmYzMWU4NjcsIDB4N2Q3OWY5YzMsIDB4OTRiZTJiYTksIDB4MTk4ZjM2ZWMsIDB4MDdkODM3ZjUsCisJMHhiOTVmNjcxNCwgMHhjZDFmMjUzOSwgMHg2YjY3ZDgyYSwgMHg5M2JlOTZhOSwgMHhlZmE2NDc0YSwgMHg0MDNiZDJlNCwKKwkweGZjOWNhYWRmLCAweDUzNGM2MTE3LCAweGE4OTliY2E4LCAweGE1Njk5YmM4LCAweDI5YWZkZmIxLCAweDhlNDhhZjE4LAorCTB4NjMyYmFmMmMsIDB4NzNkYmU3MWYsIDB4Nzk3NDRlNzcsIDB4ZmIzNzllYWMsIDB4NGYxYjQxNDcsIDB4OGYyNWJkNmUsCisJMHg2OTQ3NGU2MywgMHg3OTIxZmFhOSwgMHg3MDg3ZWFhYywgMHg1ZTg2OGQzYywgMHgwYmQxMGM0OCwgMHhjY2U0NTEwZCwKKwkweDM2MzFjMDY4LCAweDlkYjUxZjA0LCAweDk4YWZlNTAyLCAweGMwYTZmOThkLCAweDM5ZDg5ZGFmLCAweDk2YzdkZWU0LAorCTB4NGYxMzg4NTEsIDB4Yzg3ZjhkMGYsIDB4YTA0N2FmNjAsIDB4YjFhNWRkZTMsIDB4YmNhMzdmY2YsIDB4ZGI3YzM3ZTksCisJMHg0N2Y5ZDIzNiwgMHgyOGM1ZDVhMywgMHgzMTczNjIzZiwgMHhiMTlmZWMzYiwgMHhmNmYyOTViMywgMHg5NGFkMDVjNiwKKwkweDAyOWQ2Njg3LCAweGY0OThmZGU1LCAweGFiNzlmOTJlLCAweDMwYTdkZTZjLCAweDllNWMzNjdkLCAweDVlMzk4ZDZjLAorCTB4OTdkODcyOGIsIDB4MjhjNTM3ZjYsIDB4ZjhlYmNkN2UsIDB4MzdmOTNhNGEsIDB4MTUzY2EzYWYsIDB4YjM0N2VlMjQsCisJMHhmNzRlY2MwZCwgMHhiOTdjYWZhNCwgMHgyMDJmNThmYiwgMHg5YTJmMzAxMiwgMHg3NjNlZThjNCwgMHg3YWM3ZTFhNywKKwkweDA1MWI0N2NjLCAweGU2NWNmZTNlLCAweDk3NGZmOWU3LCAweGYwYTNmYzc3LCAweDMxYTBlNTllLCAweDdmNTQzYjdmLAorCTB4ZmI0ZDlhNTEsIDB4Y2ZlNTY5ZGUsIDB4ZjM5YmY2YmIsIDB4OWVhNTg0OWYsIDB4YzE5ZTE1YjYsIDB4YTc1M2UxZjMsCisJMHhlYzFjNTMyNywgMHg2YjhmMDNjNSwgMHhiYzVhZWNlYywgMHhkZjdlODBjNywgMHg3ZTg2MWUwYiwgMHgzNWQzMjlhMiwKKwkweDljM2IyNDcxLCAweGFlOTI3ZjMxLCAweGE4OWE1MDhjLCAweGZhNWU3YTk0LCAweGY4NmQ5ZDA1LCAweGY3ZjczYmZiLAorCTB4YmQ2N2U4NDgsIDB4NzI0Y2MwNzgsIDB4OWU4MWVhN2YsIDB4ZTMyMTU1ZjgsIDB4M2U3MTk2MjcsIDB4ZmUzZDA2YjYsCisJMHgzNWFmMDAxOSwgMHgwOTMyNzNkMywgMHhmOTJiMWRlZiwgMHhjZTc5OTE3MywgMHg2MzJiYzJkNCwgMHgwZjlkMDBhNCwKKwkweDZiNTc5MWRmLCAweDJlYmJhNTBlLCAweDc5NGNkNmE5LCAweDYzOWQ1Y2U0LCAweGZjZWIxZDhhLCAweGY0ZmM0MzFjLAorCTB4NDA4MmZkZGEsIDB4MTEyZWRkN2UsIDB4ZTE5YWVmNTAsIDB4ZWM3YTg2YmEsIDB4YzNlYjg5MGQsIDB4NDk2YjUzYTksCisJMHhlNzJhNzVhYiwgMHgyZGU0NzYxZSwgMHhjN2VmODAzOSwgMHhmMWE3YWY0ZiwgMHg3YjY0NTkzYiwgMHhlNWM2NThjYywKKwkweDk5MDY4YmYwLCAweDgwZjE3ZGU2LCAweDU1YzhlNzQ4LCAweDdjNjlkZWJjLCAweDBmMzBjYmQ2LCAweGE2ZGVhM2UwLAorCTB4YTdkODdiYTcsIDB4ZTUxMTRlOGQsIDB4ODEzNGU5ZDAsIDB4ZGYyZDgyZWQsIDB4ZWU4NTc4ZTksIDB4MDI4OGVjOTksCisJMHhiOTRhMmZlZiwgMHhhOTZjY2E5ZiwgMHhmN2E3N2Y0NCwgMHg3NDhmMmU3NywgMHhiZmE1NWY3ZSwgMHhhOTY0MzNjOSwKKwkweDQ5YzBlZDBjLCAweGZmOTQyNjllLCAweDM2ZTRiNmNjLCAweGRmMjRmMTdjLCAweGU2ODc0M2JmLCAweGNmZmMwM2NmLAorCTB4MjI3ZmMxN2QsIDB4NmIyMWY3MGUsIDB4Zjc1Yzc4Y2YsIDB4NmE3NmE1MDcsIDB4MWYwZjQ1YmYsIDB4YjBmNDQyYmQsCisJMHhlM2VmYzhjNSwgMHg4ZTcxNzU3OCwgMHg4NThlYjAwMywgMHhjZjExMDFkNiwgMHg4MzUyMTg0ZiwgMHgyYTZkZTc5NCwKKwkweDhiNzRmMmUzLCAweDgxNjMwZmNhLCAweDdkM2RlMDFmLCAweGM1MDdiZjA2LCAweGNlYTlkYTI2LCAweDg0MjcwNzI2LAorCTB4NTU5ZWEzZGUsIDB4MDU5N2FjYTYsIDB4YzJmOWYxMzIsIDB4ZDgzNzc3ZjgsIDB4ZjYxNThjMWQsIDB4YjA4YjM3YTYsCisJMHhlZjg5ODVmZSwgMHg3YTg2Yzg2ZSwgMHg1ZTc4ZWY0OSwgMHhiM2Y3NzhjZiwgMHhiMmIxODk2YywgMHg5ZjVlMGNkZSwKKwkweDkzNjdlZWY2LCAweDliZDE1ZWEwLCAweDMwOTVlYmM5LCAweDliYjA3OGQ0LCAweGJkOWFiMzdhLCAweGE0YmUzODc5LAorCTB4MGYxNWJmMTksIDB4ZmQ3ZjE0NzIsIDB4NDVkMjZmNTIsIDB4MjgzNTVmOGMsIDB4MDMxZjg3ZWIsIDB4ZmJlY2UzY2UsCisJMHhlMmVmM2E0NywgMHg3OGZkNWIzNCwgMHg4NmM5ODMyZSwgMHgzNDE5ZjhiMCwgMHg2MDc3ZGM4NSwgMHhmZjI0MDlhOSwKKwkweGYzMGJmYmQ0LCAweGY2M2Y3ZjQ1LCAweDg0ZmQ5OWQ3LCAweDI3NTliYmRmLCAweGFkODA3M2Q5LCAweDdlMTQ1ZmRkLAorCTB4NWMyZTdiNzksIDB4YzhkOTZkZWUsIDB4OGM0ZTc4NWMsIDB4ZWYwOTY2YjEsIDB4ZDY0YzA4MzMsIDB4NzhlM2MxN2QsCisJMHg4NTVmOWM0ZSwgMHgxODdmOWQ0NywgMHhjOGI1YjA1YywgMHgzZDcwNDM5ZiwgMHg3MGE4ZTM0ZiwgMHg3OTM3Y2I1ZCwKKwkweDZiN2FkZTUxLCAweDA0MjdhZTU5LCAweGUwODRkNzRmLCAweDQ1NmMxODBmLCAweDBmMWRhY2RhLCAweDFiNWQzZWUxLAorCTB4NDAyMDljMTMsIDB4MWI3Y2I5M2QsIDB4YjFiNWRiZWQsIDB4OGUwODFmYzEsIDB4ZWY4MWJhOTAsIDB4MDk2ZjViNjMsCisJMHgyODk3NjNlZCwgMHg5YjlkMjFiNywgMHgyMTZlZDY4YywgMHhiOGVlYjE5MSwgMHhlNjBjMTk4NCwgMHhlNWQ2MzFkOSwKKwkweDQwNmU3YmM1LCAweGQ4ZWY3NDc3LCAweDFjNzQ2NTliLCAweDhiZWIzODAwLCAweGM3YTFmOWI0LCAweDgzZmIzYTE1LAorCTB4OThlNjBmMjIsIDB4MDFjZTc5NzYsIDB4MDQ3YmJhNWQsIDB4ZGM3MGY3ODYsIDB4YTg4YzM3ODMsIDB4NWRmNjE2ZmYsCisJMHhhNGJlNjIzNCwgMHgxMWEyZTdhMywgMHhlYjAzYmVlOSwgMHhmM2M3NGUzMCwgMHg2ZmY5ODhjNiwgMHhiZDVlYjk2MywKKwkweDkxZTc0YTJmLCAweDRmMWM0YmQ2LCAweDdhZWViMmE3LCAweGU5ZTAxNTJhLCAweGJkZDAyZDU4LCAweDkyNDdmNWJjLAorCTB4N2Q3ZDYwZTYsIDB4YjE5MmFlMmIsIDB4ZTc4NzU1ZTUsIDB4MzhiNGI5MjAsIDB4NzJjMjlmZmIsIDB4OTUzODFiMjUsCisJMHhjY2I0MjQwYSwgMHgxMGY2NjdhNSwgMHg0ZDYyYjkzZCwgMHhlODg3YjMzYywgMHg4YTRmMTZjOSwgMHgxNzcyYmVhNiwKKwkweDI4MGNjZWVjLCAweGZhNjg2NjM3LCAweGVhZmVlNTMxLCAweDgzZjQzNjMyLCAweDk0OWE5OGU3LCAweGRiNjY1YzdkLAorCTB4ZWViOGMwMTksIDB4M2JjMTk3MzIsIDB4YzJkZTMyMTAsIDB4MzI2MmNkYmUsIDB4MWMxMWVkYzIsIDB4Y2JkMjhkNzQsCisJMHhlMGFkM2ZjZiwgMHgxYzUyODQyYiwgMHhmN2NmMWY3YSwgMHhlZmM0MGFmNCwgMHhiYTdhNmQxZCwgMHhjYmRjZDNjNywKKwkweDM1ZTZhZWVkLCAweDIwMmVjZjgyLCAweDBkYmRmODFlLCAweGVkNDBhZjc3LCAweGViYTdkZWVlLCAweDFiZWYxMTkzLAorCTB4NDcwMDBmMDAsIDB4N2Q4NGY4ZGEsIDB4OTM0NzExMmMsIDB4NGFkNWRjZTksIDB4ZGY3NzU2MDUsIDB4YjM4ZTAzMzksCisJMHhkZDAyM2JlMiwgMHg5YmJmNTU2NywgMHhiMmJmYzJhMCwgMHg5MWNlOTFhOSwgMHhhNDVlN2MwMSwgMHg0ZDlkNzU0ZiwKKwkweDVjZTk0N2Y2LCAweDk3ODljYWQ1LCAweDYxODdhODBkLCAweDM0MDY5NzdkLCAweDViZDZkNGY4LCAweGNhZmFkYTNjLAorCTB4ZDFmYWRhOGQsIDB4ZjI5ZWU1MzIsIDB4ZjkwZDM2MzQsIDB4MjA5OTc4ZTksIDB4YjUyNDM5ZTIsIDB4ZjlkNjUxZmUsCisJMHhlNzVlZjFiNywgMHgwYTc5ZDE2ZSwgMHhlOGNkYjNlOSwgMHg3ZWZhODE5ZiwgMHhiYWEyZThiNywgMHgzYmNmMGVkYSwKKwkweGY4OWRmMTE4LCAweGIxZjEwMGUxLCAweGM1YjlmYzQwLCAweGY4MzU0YjIwLCAweDgxNzY5NzNkLCAweGI2MDU3NmU4LAorCTB4MGY2N2YzYWIsIDB4ZmQ3NTRmYmQsIDB4NTU0ZGZhZjAsIDB4MWI5YzVhZWUsIDB4NDczMGJiZTgsIDB4OTBlZDA5MDUsCisJMHg5MzE2NTE3YSwgMHgyMjJmODhmMywgMHhiZGY5Nzc5ZSwgMHhhMzZmMDdjMiwgMHhlZWI4MDNmNiwgMHg3ZDg1MjI0MiwKKwkweDQ0ZmVlYmJhLCAweGJkZTYxNzlmLCAweDNhNTZjZGViLCAweDIxNTc3NmU3LCAweGY5MWQ4MWQwLCAweGQ2ZTc0NzVlLAorCTB4MmY3OWUzZTYsIDB4NzkwM2VmMjgsIDB4MmVmMjgxNjgsIDB4OTIyNmExZmQsIDB4MTI4ZDMzZWYsIDB4OWNlNTc3YzksCisJMHhlNDJmMmE5NywgMHhiNmU3YjUxNywgMHgyMTllNjdlNiwgMHhlN2JlZWIzYiwgMHhiNTc5ZDI3NiwgMHhjMTcyMzljOSwKKwkweDJkMGZhOGQzLCAweDQ3MWRmZTdjLCAweDE4NjZkZjA0LCAweDM0ZWYyM2E3LCAweDMyNzFjZmM5LCAweDYxZDcyZjNmLAorCTB4MmY2OGU0NTMsIDB4ZmQ3NTUxYzgsIDB4NTBlM2JmYjAsIDB4NjkyMjYxYWUsIDB4OWJjZDFlNDEsIDB4NWRhOTU2NmUsCisJMHhmODI4MzkyNiwgMHhmZmU4NzU2YiwgMHhkZGU2NTM4ZSwgMHg3NWE3NmQ1ZiwgMHg0ODdhM2RhNywgMHgzMTY3NzVjMCwKKwkweGU2MDE2NmVmLCAweDdjM2E4MmJiLCAweDU1Zjk1MGVjLCAweGY4YjVkN2VkLCAweDU2NWRlODBiLCAweDViNjNiNWFmLAorCTB4NjVlM2Q3NDUsIDB4NmRiYjVmMzAsIDB4MmRjZmM4YzAsIDB4MWZhODhkMDYsIDB4ZGVmOGUwZWUsIDB4ZjJjM2UzNDgsCisJMHg1MGVlNzQ3NSwgMHg0NzMwZmJlMiwgMHg3NjgwOTgzZiwgMHgzOWEzZmFjZSwgMHhmNjA4ZDhlMywgMHhkM2FjZGU4ZCwKKwkweDE0ODMxMWM4LCAweGYzMzc5MWE3LCAweDY3ZjJiNTczLCAweDc3MmI0M2ExLCAweGEzOTY1MWJlLCAweDRmMjQ1ZjY5LAorCTB4ZGZkZmI0ZDMsIDB4M2ZhOWE4NTgsIDB4YmNkNGFjZTAsIDB4OWQ1MzYwZmYsIDB4Y2RiMjZlYTYsIDB4YjE2ZmJjZDMsCisJMHhlM2Q0ZDYyZiwgMHhkZTZiOTc3MywgMHhhNTU4ZTMxZiwgMHhmNWJkMzc2OSwgMHhlZDAxMjZhMywgMHhjMDc3YjM3MSwKKwkweDA2ZTg3ODA1LCAweDFlNGIyOGRlLCAweDEyZDMyM2QyLCAweGUzMjg2NWUwLCAweDJjNTYyZDBhLCAweDc0NGRmM2JiLAorCTB4M2M3YmI2NGUsIDB4ZWM0NDk3ZTgsIDB4NzczYTFkZmYsIDB4Yzk3YzRlNjksIDB4ZGZlNTAzNWMsIDB4ZmM1YWJlMGIsCisJMHhjOWEwMGU3ZSwgMHgzZGRiZjY4NSwgMHhmMGUzNjg0ZiwgMHg1ZjM4YWJjNywgMHhiOTQzNjVhOSwgMHgyODBhYzFlYiwKKwkweDY3YjA1ZWYzLCAweDgxZTk3YmYwLCAweGNjN2Y3MDdiLCAweDQ1ZGI4YzcxLCAweDJlYzk5OWFmLCAweDUzNzY4OTlhLAorCTB4YjA3MWJmODgsIDB4Mzk3ZTY2YmEsIDB4YmU0MjdiZjYsIDB4ZjU4MmY5MTcsIDB4YmMwYTY5MzIsIDB4M2IwOGNmYjcsCisJMHgzNWVlN2E4YiwgMHhlYmNiZjUyMywgMHhlNjg1ZDAxZCwgMHhjZTU5N2ZmNywgMHhjZWIzYzFlNSwgMHhmYzcxN2JkYSwKKwkweGIyZDAzZThlLCAweDdkY2Y0ZmM4LCAweGFlYmY0NDY4LCAweDAxM2ZhZmEzLCAweGU3MGNkOWY1LCAweGNmYjQ0Njg3LAorCTB4N2EyYjllODcsIDB4NjFjNjBjNGUsIDB4MGUxZmUzOWMsIDB4NjNkZTIzZTksIDB4YTQ2ZTVlZGQsIDB4NzIyYjRmZjEsCisJMHg3YTNiZTViZCwgMHhmNzhiNGYzYSwgMHg4NjRhNmIzNywgMHhlMWNiNzNlNCwgMHg2M2VmMWZhMCwgMHg3YmYzYjRiNywKKwkweDM2OGU3ODliLCAweGY5MDY5YzkyLCAweGJjYTg2MWZjLCAweGY0MWQzNjdkLCAweDRmMWE0Y2MxLCAweDk3OTYwZmEzLAorCTB4M2VkZWU5ZjksIDB4ZmJjZDZmYzgsIDB4NWMzNDk3MmIsIDB4YzgyNTdjYzUsIDB4NGNmM2VkNzEsIDB4YjE5NjFlN2UsCisJMHg3M2ZhMDMwMSwgMHhlZDM1ZDcyMCwgMHhmYjk1Y2IxYiwgMHhkZTU4ZDM5YywgMHgyZTA3MjAxNywgMHhkYmRmMjMzOCwKKwkweDlmOGFiYjdkLCAweGFhZTBiODMzLCAweDE2Nzg3ZGEzLCAweDQ3ZTc4OWYwLCAweDNmODYxZDlmLCAweGUxZGJkNzhlLAorCTB4ODFhNDY1ZWQsIDB4NjYxYmZkOTAsIDB4ZmY3MTU3ZmYsIDB4NzIyOGU1ZWEsIDB4YmZiMmEyZmIsIDB4MDE0MDg0ZmIsCisJMHgzM2I3NTUwYSwgMHg4NTc3ZTg4ZSwgMHhhNWVkNzViOSwgMHhjZjk3ZGM0MiwgMHhkZWJmYTJiNywgMHhlZTgxMjNmMiwKKwkweGZmYjJmZmMxLCAweGFjM2IzNGFkLCAweDU0Zjg3OGRmLCAweDc2OTdkZTFhLCAweDg2OTUzYTFmLCAweDBjZGI4OWY3LAorCTB4Y2Y2OGNkZjYsIDB4M2RkMDdkMDMsIDB4M2Y1ZThlZTQsIDB4YTg3ZWRmYzEsIDB4Yjc5ZjFmYjAsIDB4MTQwZTBhZjcsCisJMHhlYjllZWVjOSwgMHgzNjRlYjQwZCwgMHhhM2ZkMTViMCwgMHgzYWUwNTE3ZCwgMHhhYmVkY2U1OCwgMHgyYTc2ZTVjMywKKwkweDEzOTgyZWRkLCAweGM5OGY3ZWY1LCAweDFlOTAxM2U3LCAweDVjMjEzZTQwLCAweDgyMGZjMDQ3LCAweGU2NmRiZWZhLAorCTB4ZDRmNjQ4YTYsIDB4MjdkZjA1NjUsIDB4ZGUxOTE5YjcsIDB4ZmU4MzZkZmIsIDB4NTlkMzhlYjgsIDB4YmRmODhkYTcsCisJMHhiMGMzOTY4NSwgMHg3MWQ3MDEyZSwgMHgxYzc4ODFlZSwgMHhhMTgxODM3ZiwgMHhmN2MyYTE5ZCwgMHgwM2UwNTY3MSwKKwkweGFiZmJmZjVjLCAweDJkY2YwYzBkLCAweDI3YWQ1OTZmLCAweDgxYmZiZjdjLCAweDg3ZmEyN2RiLCAweDAzMzViZDdmLAorCTB4MmU4MGNiZWEsIDB4MjcwZjNiZjEsIDB4OWQzOGRmNTYsIDB4YmZiZWUzMDEsIDB4NzU2OWRiODYsIDB4MmY4ODFiMGYsCisJMHg2ZTEzYWQ5NywgMHhhNTBlNGJkZCwgMHhmZjZlOTU2YiwgMHg3MGQzYTE0NiwgMHhkYmE3MGRmYSwgMHhlNmJhZjQ2MSwKKwkweGRiZWJkMWViLCAweDkwZWNiN2U1LCAweDYxZjdhODE5LCAweDQzOGNlN2ZmLCAweDczMWVmYTNhLCAweDFhN2U0MDFjLAorCTB4MDcxODYxM2MsIDB4MmFkYTRmNzAsIDB4NjNjM2MwMzksIDB4YTdiZWY1ZDMsIDB4OWM2ZTUwZDIsIDB4NmRmOWVkZTAsCisJMHg3ZjJlMDU3YiwgMHg3ZDcxY2JlYywgMHg4NjQ2ZGQxOSwgMHgyYTJlMDhmNywgMHhkOTUxNzZmYiwgMHgwYTBiM2IzNywKKwkweDYyY2ZjOGYxLCAweGE5Y2ExMjYwLCAweGY5Y2UyNTZjLCAweDFkMzU4MThhLCAweGU0NTJmZjQ2LCAweDhmZmE2N2YyLAorCTB4ODdiNzdiNmQsIDB4MmI3ZmVmZDAsIDB4Y2FhYjc0ZTcsIDB4ZTY0NjY5YzUsIDB4ZjdjNTZjM2EsIDB4MDQ1ZjhkMGYsCisJMHhlMDZjYmNlMywgMHgyODI3MzVlNywgMHgwOWM5NGRlMywgMHg1MjgyMmMzNiwgMHhlNGU1YzE1NywgMHhkNDM4MTU2ZiwKKwkweDNlMTQ5ZmZhLCAweDQzN2YyNzYwLCAweGU2Njg1Y2Y4LCAweGQxYjc5ZmY4LCAweGY4ZWI4Y2RmLCAweGJkNzVjOTk5LAorCTB4MzA1ZmRlMWMsIDB4ZWExYjdjZTEsIDB4M2Y0OWVlYmQsIDB4YjlkZmUzYzksIDB4ZWUxZDkwNzMsIDB4YTI3ZmYwNTYsCisJMHg2M2NmMzdmYywgMHgzNTMyY2ZlZSwgMHg3MmQ3ZjY4ZSwgMHhlOTA5NjlmNCwgMHg2OGE1MzJkOSwgMHgzMGYxNDhkYywKKwkweGU2NmNjZGY3LCAweGJhYmEwMTRhLCAweDVhYTU0Mzk5LCAweGFhZmM3NDVmLCAweDgyZmM4MDcxLCAweDJmYzQwZGViLAorCTB4YjllOWQzMzcsIDB4MDU1M2VmZGEsIDB4OGU0NmU5ZWUsIDB4NGE5N2Q2MDcsIDB4YjZlNDFiN2EsIDB4Njc5MjE2NTgsCisJMHhmYWEwZjE1MCwgMHhmYjI5OTZlMywgMHg1YjFlYmY2OSwgMHhjZmVlMjhjNywgMHg4Zjg0ZDNkOCwgMHg4NGU3NmQxNSwKKwkweDQxZTcxODU2LCAweDAyYjA2YzgzLCAweDM2MjdjZmJlLCAweDg1MzRiZGFkLCAweDYyNmM5ZmIxLCAweDNhMGIwNWNjLAorCTB4NWNjY2M5YmIsIDB4NmM3ZDAzNzcsIDB4ZDgxZWE4OTIsIDB4YmJmYWEzNjQsIDB4NWU1NGVjOWIsIDB4YTJjNzM4YjYsCisJMHhhNGUwNzlmZSwgMHhlZGUyMGE2NywgMHg2NzFlZDY0NCwgMHhlZDczY2MyZCwgMHg0MWYwODFhYywgMHhmZGY0MDYzYiwKKwkweDM3NmI0Mjk4LCAweDBjY2NmNGZhLCAweDk0N2EzN2VkLCAweGYwMjhhZGVmLCAweDgzMzM3NDNmLCAweGZjYmU0MGI5LAorCTB4OGU4M2U3MDIsIDB4NDY3ZjFiZWQsIDB4ZTZiMWNmNzIsIDB4NDlmYTAzN2EsIDB4YjcxNzZkZjksIDB4ZjFiZGRkNjIsCisJMHg1ZjY4MGQ3NywgMHgwNGZhMDA3YywgMHg3ZWVjMGNlOSwgMHg5ZTUwMTM2NiwgMHg4MWRhMzM5YywgMHhhNjZmOWEwZSwKKwkweGViMmYzOGQwLCAweDc3YzgwZDgyLCAweDQzMDI2M2RlLCAweGY3YTBmY2ZhLCAweGQ3MWM3MWJhLCAweGUxMmQ3NDU3LAorCTB4ZTY3NDRkZjksIDB4NDhhZDJkOWYsIDB4ZmJiOGZjMjIsIDB4N2Y3Yzc1ZjIsIDB4ZjdhMTc0OGIsIDB4ZjllZmZhMjksCisJMHg4N2VlMDI0MywgMHg5ZGZkYTM3OSwgMHg0NjdmZWM0YSwgMHhiN2FmOTBjZiwgMHhhNDEzMDZkNywgMHgwMmY4NzIwOCwKKwkweGEzOTc4YjhjLCAweDg2NTgxZDcwLCAweGJkMTkzN2I3LCAweDQxM2NmMDUzLCAweGUxYzc0MjkzLCAweGZhMTU4YmVkLAorCTB4OTQxYjRjMDQsIDB4MjEzMjI5ZWYsIDB4YzEyMzlmOGQsIDB4NTI1ODE2OWYsIDB4NDFmOTMyNjIsIDB4ZTdlMDM4ZmUsCisJMHhhYmJhYmU5NiwgMHg4MTFlOTYyMiwgMHhjZmY1YTg3ZCwgMHg3NjIxODdkOCwgMHhmYzNhMzQ3YywgMHg0MzdlMjViMiwKKwkweDQzMjljM2U2LCAweDQzMjNmNDc1LCAweDFmYTA3ZmVmLCAweDgyZmJlOTE5LCAweGUzYzlhY2E2LCAweGI5Nzc4YTQ2LAorCTB4ODNiZWMwMDcsIDB4YzMwMGVhZmQsIDB4ZjQ4MjllYzksIDB4NGZjYThkM2UsIDB4OTFkOTc0OGUsIDB4YzE3MWNjN2YsCisJMHhkODJmYTgzZCwgMHgzYmYyM2E1ZCwgMHg3YjVhYmRkYSwgMHg4N2UxNDFhOCwgMHg3YTFlYzUwNiwgMHgzZmViNDJiNCwKKwkweDVlZDQ5ZjgxLCAweDg0YTRmZGMxLCAweDNmZTM0Y2UzLCAweGZmMjczZjg1LCAweDA1N2M4Y2M5LCAweGZkODM0ZWYzLAorCTB4ZmVkMjI1NzksIDB4YzdhZWQ1NTQsIDB4MmVkODEzN2UsIDB4NzQwNjczYTIsIDB4YmUxNWY0OGUsIDB4ZTBhOGJmY2UsCisJMHhlYmU1NTQ3YSwgMHg0OGQ3Yzg2NSwgMHhhZjljYmRiZiwgMHhhOTZkYzdjMywgMHgxYzBiZjlhYSwgMHg3Yjk0NWI3NywKKwkweGYxNTdmNzEwLCAweDEzOWZkYWYxLCAweGU3ZWU1ZjA4LCAweDFmNGYwODUyLCAweGI1OWNlN2IzLCAweDAzMWY5NzQwLAorCTB4MmU4MGZiMWMsIDB4ZjE5ZDM5YWYsIDB4OWFmZmQwNDksIDB4NmM5ZjE5Y2IsIDB4MWQwMzkyMWQsIDB4YmY1M2M1Y2YsCisJMHhhNzE3OTM2ZCwgMHgxOWZkNDJiNCwgMHhlZjE4N2JhNCwgMHg4YTNhZGU5MywgMHgxY2Y0M2U2ZiwgMHhiZTc1M2ZlNywKKwkweDUyY2JmYzBmLCAweDBkOGE5ZjkwLCAweGRhMDNhMzQxLCAweDI2MmVmYjMzLCAweDdjNTgxZGEwLCAweGU0MTRmZWU0LAorCTB4NmU3MDY4YzMsIDB4ZGNlMDU0YWQsIDB4NGJkYWQ4ZjgsIDB4ZjAxZTljMjksIDB4NDU1YWVlMWMsIDB4ZjQ5ZmI5YmYsCisJMHg2YmZmMTExYiwgMHhkZmEyMzIzNywgMHhkOTdlZDdmZSwgMHg0OWZjN2M4MSwgMHhmYTg0YmM1ZiwgMHhmMWEzZTNmMCwKKwkweGQ3ZmY5NDVlLCAweDNhN2M5OThlLCAweDZmMTBmYzgxLCAweDhmYjVjODIyLCAweDkxZjcwMzBkLCAweDJmNDQ3OWJkLAorCTB4M2VlOGZmYTEsIDB4YzgzZGRiZjYsIDB4NGNkN2VlOGYsIDB4YjViMWY5NjgsIDB4NTFkNzVkN2QsIDB4ZGRmNWI1ZWYsCisJMHhmMmM0NTU3YiwgMHg4N2U1ZDFhNSwgMHhkMzhmOGRmNiwgMHg2ZmZhZDU3YSwgMHgyOGVkOTkzNywgMHhiOTExM2Y0NywKKwkweGZiZGI1ODljLCAweDZiYmZkOTJhLCAweGMwY2M2ZjA3LCAweDQ3YzdlYTM4LCAweGNhMDk0ZmZmLCAweDM3OWJmNzM1LAorCTB4Yjk5ZTUwNGEsIDB4ODI1MWI4ZGYsIDB4YzcxZmVlZWQsIDB4MmRkOTIyN2IsIDB4ODRmNGIzNzEsIDB4NjY1ZjU1NTcsCisJMHhlMjZhMjdiZiwgMHhmYTE0MWI0NSwgMHhkNWRjZWVjOCwgMHg1N2YwMDkzOCwgMHgwMzg5NmU3YywgMHg3YjZhYjZmMywKKwkweDEzOWQxNGYxLCAweDc5ZmUyZmRmLCAweDIxYzNjYTdkLCAweDIyMDMzYWZkLCAweGNlOGE4ZGU1LCAweDBlYWZjN2Q1LAorCTB4YWE0N2NiYTEsIDB4OTRlZjlhMGMsIDB4MGYzOGQ1N2QsIDB4MmRmN2UyYjYsIDB4MDI3NWM1NmYsIDB4ZWMwZWZhM2EsCisJMHhiZmM4ODBiNiwgMHhmMDQ2YmIyZiwgMHhmNjAxYmZhMSwgMHhiMjNmNzg0YiwgMHg5MjNkYWVhNywgMHg5OTEwZjc0MiwKKwkweGJkM2Y5Y2U4LCAweDFjNTNlYjA4LCAweDU2MjhlZGRiLCAweDg3MjZhN2NjLCAweDAyY2I0YmQ4LCAweGU4MDliZjNhLAorCTB4ZTRjZmE5YTgsIDB4MjAzZjdiMjcsIDB4NjJiYWE0NWUsIDB4ZmQ3NDNkNDcsIDB4ODViMjYzMzcsIDB4ZGM5YTcxMDgsCisJMHgxY2EwZTc3NywgMHhjMGQ3OGYwZiwgMHg1Yjg0MThjZiwgMHhhN2NlYWZiNSwgMHhhNjUxZjhmMywgMHgwNDJkZDI0NywKKwkweDk5M2I5YWI4LCAweDE2MWQ3ODg0LCAweDRiOWE2OWQ3LCAweGY4ZjBhMmYxLCAweGRiYjAzZDhlLCAweDkzZWNmZDhjLAorCTB4YWJjMjEyNzUsIDB4OGZiOGE1ZGEsIDB4YzBlNDExM2QsIDB4Nzk3MjU2NWYsIDB4Njc1N2YyYTYsIDB4M2FmNWU3ODAsCisJMHhjOWU2YjUwMywgMHg2OTU3N2U1MCwgMHhjYzc0OTFlZiwgMHhlY2U5NzgwYiwgMHhjNjAwZmZiYiwgMHgxZjA3M2ExNywKKwkweGYzMGU5ZjhjLCAweDk4YjdiZTc0LCAweDlhZTc5ZTYxLCAweDgyOWU2YjU0LCAweDlhZTcwNmZkLCAweGEyMWJjODFmLAorCTB4MWFmOWYwOWIsIDB4MzQ1ZGI5MmEsIDB4ZDY0NDJmNjQsIDB4NWYwYWE1N2YsIDB4MmMxZTk2OGYsIDB4ZDBmM2ZjYWMsCisJMHg1NzlmZTA4MywgMHg3Y2ZmNzI1NCwgMHg3MDlmOGYwNSwgMHg3ZjVjM2NmZiwgMHgxZDU5NzJhOCwgMHhlZjgyYWQ3NywKKwkweDJhZjk3MmUxLCAweDQ3ZTAzOWQ5LCAweDViNWU1YzkzLCAweDMyZjdhNzY5LCAweDkwYTUxNmZiLCAweDkyZGVmZDdmLAorCTB4Zjg3NWJiMTQsIDB4NDNhMjM5ZjgsIDB4N2MzNzljOTcsIDB4NzM5ZWQ1N2MsIDB4NjY1M2U1N2IsIDB4M2Q2NDdiZjQsCisJMHg4OTdiYTdmMSwgMHg5N2ZjYzNlMCwgMHg5ZGI5ZmY2YSwgMHhlZWU1ZDkwMiwgMHhkZjBmODM2NiwgMHgyYzBhZTE1MywKKwkweDA3ZDhmMWUxLCAweDIyY2Y4MzY0LCAweGFhODlkOTBjLCAweGRkYWI3OTFkLCAweDZhYmI1MDIxLCAweDYzZjZhYTU3LAorCTB4YmJlM2M5YzAsIDB4ZmI3ODhhNGIsIDB4NTU2YjhiNjUsIDB4YTc1YzU4ZTUsIDB4OTcxNzllODUsIDB4Mzk4Y2U3ZjMsCisJMHhmNTVmYTE0ZiwgMHg5MTgxNTJlMCwgMHg0YWVjNTAxYywgMHhlZGMzNGU5NSwgMHg3MmZiNGZjZSwgMHg0MzhhNDcxMiwKKwkweGE3ZDBhZjNkLCAweGMyMTM2N2NhLCAweDYzZDU0M2Y4LCAweDdlNzA1NGNmLCAweDVlM2Q0MGViLCAweGY3ZmM3YTg4LAorCTB4N2MzY2ZiMWEsIDB4OGZlM2QwNWMsIDB4NDYzZjUyNTcsIDB4MmU3ZThiZmQsIDB4ZWJmOTIzM2EsIDB4YWRmYzY1NjYsCisJMHg0ZTA1ZmVlYSwgMHg1OWJjMjBkNiwgMHhmZDE5YjAyYywgMHhmNWZhNjhjYywgMHgxMzlkOGE3YiwgMHhjNTE5ZmRhZCwKKwkweDNmMWRiYzdlLCAweGM4ZTQ1NjFmLCAweGNiZjNmMTY4LCAweDcwZjJiNzk1LCAweGY5ZjlhOWZmLCAweDhjNjg3ZDk2LAorCTB4ZDU1N2JmNjIsIDB4MWZmYjg2YmMsIDB4NmEwNGY3YTcsIDB4OTdmZWZmOTAsIDB4ZTFlZWUyODEsIDB4ZmFhNTNkZWYsCisJMHhlY2QzMjI5ZiwgMHhhMzJjYTljZiwgMHhmNzIzZmQwZSwgMHhlODNmMWUxYSwgMHg0M2JmYjI0ZSwgMHg3YTViY2M3ZSwKKwkweDA1YWNlMzg2LCAweGI4ZWQxMDdmLCAweDUxMjY2ZjQ3LCAweDMyZjY4NmQ5LCAweDM4NWUyYjk0LCAweDE1ODhmOTQ3LAorCTB4NzdmMGI0NmIsIDB4ZmIxNzRjNjMsIDB4ZjNhNmNiYWYsIDB4OWVhYzJkMDMsIDB4N2QyZDRjZTIsIDB4NTAxNmQyNDksCisJMHgwZjYzZGQwYSwgMHhmMmJlNDY5ZCwgMHgwZmRiZDAxZSwgMHg4OGZmYmU4NCwgMHhjNzk5YmVmYSwgMHhmYmE2MzZlMSwKKwkweDY2MWFmNzI4LCAweGMyNzhiNDBmLCAweDdkYWQ3ZWVkLCAweDhkYzRhOTUwLCAweDZmMDlkOWEyLCAweDVjYjg1YmY0LAorCTB4M2UyN2EzMzksIDB4ZDM3OGMwZWYsIDB4N2Q4Y2M2NGMsIDB4MzdiODJlNWMsIDB4NDc0OTM4ZjIsIDB4ZmMwNGU2ZGYsCisJMHhkMmJiNmEwOCwgMHg1MDBjNDU3ZSwgMHg2YmYyOGExYywgMHhiZWQ1ZWFmMCwgMHgzZWU4ZDNhNywgMHgyN2NkYWM5NywKKwkweDM5ZmZlZmI1LCAweGJjZjBjYmM5LCAweDk3MGY3MjUyLCAweGJkMzZlZTRiLCAweGExMmE0NzkyLCAweDgzYjc5N2VmLAorCTB4ZWQwZTM5M2YsIDB4MWJmZGJiNGIsIDB4OGI4MDc3ODgsIDB4YzhkZTQ4ZjksIDB4M2VjYmI4OWEsIDB4ZTlmNGFmMjUsCisJMHgzZjI1N2Y5OSwgMHgyODkxYzU3NCwgMHg3OWVlYTQ3OSwgMHg3Y2E0OGYzYywgMHgxZTc4NzcyNywgMHgwY2E5ZjRlOSwKKwkweDQ4ZjNlZGZiLCAweGU4ZTdiZDFkLCAweGYyZWRjYjFlLCAweDViYWFhNjQ5LCAweDNiOGExYzcxLCAweDdjNzkxNDRlLAorCTB4MjA5ZjYyNzcsIDB4NjI2YWJjNjEsIDB4ZTk3NzVmMWYsIDB4YWZiMjM4YjYsIDB4M2FiNTdlMWIsIDB4YmE4MWU1MDUsCisJMHhlMjJjOWY0ZiwgMHhmZGU0ZmRmOCwgMHg1ZmIwNmFjZiwgMHhjOTQ0YWZjOSwgMHhlMzdhZWIwMiwgMHhjYjNmMGRmZCwKKwkweGQ5YmI3NWUwLCAweGM0MzZmZDhlLCAweGM5ZjMzZmEzLCAweDIzYzdkNmFmLCAweDEyODBkZjdlLCAweDE3YzdlN2Y3LAorCTB4YzlmMWM4YzQsIDB4NjY3NTc4YTEsIDB4OTU5ZGM1MTUsIDB4ZmEwOGI1NzgsIDB4NWM1MGNjNzAsIDB4OGJkZmJjMjcsCisJMHg3NDZlNWM1NSwgMHg3MTQyYmI4MywgMHhlZjNjMjNjZCwgMHg5YWVlOWRkZiwgMHg5ZWJmZjU0NywgMHgyOWRmZjhjNCwKKwkweGZkMWUyOTkwLCAweGM2MzVkMDJhLCAweDYyYzFhNjhkLCAweDNmZmQyZjMxLCAweGU2Mjc1OGUzLCAweGJhYzdiYTkxLAorCTB4ZjQ3YzQyN2UsIDB4ZjIzYjNhZDcsIDB4ZmNhN2Y0MTEsIDB4OWRiMGY3OTMsIDB4NmE4NjIzZjQsIDB4MDMzM2NmMzEsCisJMHhmNzQwNWIzZiwgMHhkZjI5NTIzMSwgMHg4ZmIyOGY3MywgMHhhMmNmZTBlOSwgMHgyY2QwMDk1ZiwgMHgzNGY0M2NjMSwKKwkweDIzMzNkZjI1LCAweGZlMzg4OThlLCAweGZiNmI4MzBlLCAweGY1MmZjYzU0LCAweGM0Y2Q4ZThiLCAweDNjMTQ4ZTA0LAorCTB4Nzc5ZTE5NmYsIDB4MmY5ZTY0MTIsIDB4NmE0ZmYzNTcsIDB4ZmU1YTNjZGUsIDB4OTQ3OWMwNDksIDB4ZjNmMDU2ZWYsCisJMHhmOTgwYjI5NiwgMHhjNGNmMzU3NCwgMHhmOTI5M2E5NiwgMHg0M2NjYTViNSwgMHg4MDdjNDJmNywgMHhkZTczYWZiMywKKwkweGNmZmM4NDZiLCAweGYyMTExNWMzLCAweDk4MmJlYjNmLCAweGYzNjk5ZjYyLCAweDVmNzNkYjhkLCAweGFhZmQzYTIxLAorCTB4NzhjM2M2NzksIDB4ZTY4ZWUyYWUsIDB4MGZkY2VjYzUsIDB4MjhiYjgzMGQsIDB4ZjIzNGQzZTksIDB4NmZmOGZlYmIsCisJMHhmYjY3YTQwOSwgMHhiYzNlOTA2ZSwgMHgwMGIxMzQxNiwgMHg3ODA3MWZjNSwgMHg0MGNmYmRkYywgMHhlMDZiODY3MSwKKwkweGQxMGQ4ZGJmLCAweGYwNTRlZmIzLCAweGQ1Zjc4ZjcxLCAweDA0ZjdmZDExLCAweGZkZjFlM2VhLCAweGI3Y2YyYmRmLAorCTB4N2VlNGI3YmQsIDB4MDFiZGY3YjQsIDB4YzYwYjFkZmUsIDB4MTNkNjNmYjgsIDB4NmVkMThiMTAsIDB4ZjJmYjgzYjksCisJMHhmNTg0NjU2NCwgMHg3ZWI4ZTM5OSwgMHg1MmEzZTcwYSwgMHhhYjRhZmY4NSwgMHhkZWViOWUzOCwgMHg3Yjk4N2VlNywKKwkweDQ4YWZjZjAzLCAweDdiNzA1YzhhLCAweDc0ZmQ1ZTc4LCAweGM2YTA5YTU2LCAweGNhNDVjN2QzLCAweDkyMDkxY2JmLAorCTB4NDQ3OTY4ZGUsIDB4N2NjOWVmYTAsIDB4MzNjYmZjZDksIDB4ZjFmMzkxZTksIDB4NDYyZjdhMmIsIDB4MzYzNGJmY2UsCisJMHgxNjhjZmM5MCwgMHg2MzhmMGVjZiwgMHhmZjJhOWRmZiwgMHg3NjM4ZjNhNiwgMHhlYjQ0OTU3YSwgMHhkN2U0ZjY0ZSwKKwkweGViNDM2MzhjLCAweGIwZmI4M2JmLCAweDdkODQ1Njc0LCAweDZmZTM4M2I4LCAweGYxZGIxZDljLCAweDNiNjNjYWViLAorCTB4MWUzMTEzZmUsIDB4Yzc4YzdiN2YsIDB4NmM3OTYxZmYsIDB4OGFiYWViZjMsIDB4ZGJmZmMyZDgsIDB4MWZkZmMzMTgsCisJMHg1N2ZmZmUwOSwgMHhlNzg0MDdjZiwgMHgwYmNmYzNmZiwgMHgzMDAzOWY4NCwgMHgxN2IwZjViZCwgMHg5ZDg0YmFkYiwKKwkweGVmYzMzZjQxLCAweDI0ZDZiZjhkLCAweDkzMTQxYzgwLCAweGNlN2RkM2Y2LCAweDFmM2NlNTA1LCAweGVjZGVhZGI2LAorCTB4OWQwYzJiZGIsIDB4ZjVmMTUwMWIsIDB4MjNmNzM1NjgsIDB4NWVlYmJjYTUsIDB4MDRkNDVlZmMsIDB4ODI5ZjUwMzksCisJMHhmZTcyYjJmMSwgMHg1OWFlNDM3NywgMHg4OThjNWU3OCwgMHhjOWU2M2E1MiwgMHhjNWY0Y2RlMCwgMHg1Yjc0OTc2MCwKKwkweDUzNTllNzIyLCAweGU5YTJmMTk1LCAweDM1ZDU4MzkxLCAweGUzMTU2NzhiLCAweDdjOGEzZDFmLCAweDRhODdmZjBlLAorCTB4ZTVlYTUyMWMsIDB4Njg5OWU5ZjcsIDB4ZjM0YzVmNGYsIDB4MWVkMWQzZGEsIDB4OWZjOTNjNGEsIDB4YmM5OWY4MjcsCisJMHg2N2IyZTA5NywgMHhkYzdmZTYyZiwgMHg3YmUxMWIyMCwgMHgyNmZmYzk0NiwgMHgxYjJiYmJjZiwgMHg2MGM5ZDJlMywKKwkweGYwNWU2MjE3LCAweDkyMGZjYzY5LCAweDdiZDEyYjNmLCAweDY2OTc3Y2VhLCAweDE5ZWEzZjcxLCAweDlmMzAxMzAzLAorCTB4Y2ZjYTlkZWIsIDB4ZGY5ZWIxMzksIDB4ZTZhNmZkOTEsIDB4ZmMxYWNlZjUsIDB4Y2EwNTVhOTcsIDB4ZmMyM2I1ZWIsCisJMHhmM2Y5ZDUzZiwgMHg0NDJiNjVmNiwgMHhlYmNkZjgwYywgMHhmOGRmMjg5MSwgMHhlNWRmZjk3NiwgMHg5ZTFlNjhiYSwKKwkweGUyNGM3YmU3LCAweGJmNDA5Y2FmLCAweGVjNzhlMDE5LCAweGVmZDEyMTY4LCAweGZmZTVlMzhhLCAweGM3ZmU4Y2Q0LAorCTB4M2NmMDkxNjQsIDB4ZTI1NGFmY2MsIDB4Nzg5NDE3MDUsIDB4NTAyZjFhODcsIDB4YWNmZjViZjMsIDB4YzAzZTQ5YzQsCisJMHgwMzk0MGJmOCwgMHg3MjgxMGYxOCwgMHg5ZGRkMmNmYiwgMHg2N2RiNGZkNiwgMHg2N2ZmZTA0NSwgMHhmMjFmMWUwNCwKKwkweDg3Yzc5NGZlLCAweDljOGU4ZDBhLCAweDdmOTRmM2QwLCAweDYzZWY4YjM1LCAweDJmZTc5ZmFiLCAweDBmY2Y3OGQ0LAorCTB4N2UxNGY1OTUsIDB4ZWZjN2VmNGYsIDB4OWQ2ZTE1YTEsIDB4NWYzZDQ0NmUsIDB4MGUyYjM1YjgsIDB4NGZiMjE5Y2IsCisJMHg1ZWY4MDY5NywgMHg0ZWIwZmFiNiwgMHg3NDQ4YmZkZCwgMHhlNzU5NTdiNCwgMHhjYTQxMzNiNiwgMHg5NjFhYmRlZiwKKwkweDhiMzRiZmY3LCAweGE5Njg2NzlmLCAweDA5N2JmYmU2LCAweGQ0MThhMGZmLCAweDZlMjI5YjFmLCAweGIxMzFmMzQxLAorCTB4Y2E0N2QyNGEsIDB4NWY4MGI1MmIsIDB4NzZiNjcwOGMsIDB4N2M1NWI4NzMsIDB4NzVlZGY4YjcsIDB4NTNjNWNmMzgsCisJMHgxNjU4YWRjMSwgMHhhM2FlYzlhYywgMHhmNWRiN2JiOCwgMHhiOWJmNjhhZCwgMHhhZTljNmYwNywgMHhkMTk5NzhhNiwKKwkweDQzYzRmZThlLCAweGRiYjhkYTAzLCAweGZlM2NkNTEzLCAweGUwMWEyYWZlLCAweDQ1N2JiNzg4LCAweGVmMGI4ZmYyLAorCTB4OTI3ZTg5MTUsIDB4YmZlNDJjNWIsIDB4ZGU5ODFiMjYsIDB4ZGM0NWY1OGEsIDB4NGM2ODJhMmUsIDB4NWIzYWMzYWQsCisJMHg2MGY2NDQ5MiwgMHhkMjdiMTljMSwgMHg3MTQzNzljMywgMHgzNzdiZTRiMCwgMHhkZDNjNDU4YywgMHhjNmFhY2YyZSwKKwkweGU0NWIyZWQzLCAweDVmOWZiOGUzLCAweDdlZGFjZjM1LCAweDZmM2EzZGY2LCAweGM1NGJhZWFhLCAweDhkMmY5YThiLAorCTB4Y2Y1NTY3OTYsIDB4M2YxYmI4M2QsIDB4NzBkMzljZDMsIDB4OGMwNmMxOGIsIDB4YmQxZTE2M2YsIDB4NWZjZTU0NjgsCisJMHhhMWVjYjY0YSwgMHg5MWUxNmMzYywgMHg1NTdmOTRlYiwgMHhjZjZlYWRmMywgMHhhMWFiYjI3NSwgMHhmN2ZiMTE5ZiwKKwkweGQ3ZjllMjZjLCAweDJjMGUwMGQ3LCAweGIyZGQ2MTdiLCAweGRiYTFlZjA5LCAweDc1ODNlY2E4LCAweDliNjNmM2UzLAorCTB4NmZmNGE5NzIsIDB4N2M3OTUwNzIsIDB4Zjg5NTE5NTMsIDB4NjRmNGM5OTksIDB4YTc1ZWRiY2MsIDB4NTlkNWVkYmMsCisJMHg1MjRkY2VjMywgMHhlOGI3NmY1ZSwgMHgxNWYxMDhmYywgMHg3YWEzZjc5MiwgMHgxZjRmZGU3OCwgMHhlZTM1ZTNjNywKKwkweGJlZmEwNjMzLCAweDk5YWNmYmExLCAweDVmNGQ3N2U0LCAweDBmZjQ0NGViLCAweDlhZTczZjNlLCAweDYwNzc3MDg4LAorCTB4MmU4NDJkZGUsIDB4OTYxZDkxM2UsIDB4OWQ4M2Y0MjQsIDB4ZGJlNjBiMGUsIDB4MWFhZmZiMGEsIDB4ODc0YzNjZjEsCisJMHgzYzYyMzAxOCwgMHhjMGNmMjAwYywgMHg5ZWVlOGIyMywgMHg2ZmRjZmNlYiwgMHhmMTA1OGQ1ZiwgMHg1OGZjZGI3YiwKKwkweDhmY2ZmZmVmLCAweDU4ZmM5NTdkLCAweDI3M2YzNTc3LCAweDAyOTFjYWFkLCAweDhiZGU0ZWE3LCAweGYyZDkxOWU1LAorCTB4ZDg5Yzg4NzAsIDB4OTRmOWU0ZTYsIDB4MTEyNzkzNmQsIDB4NGU3NmVlMWYsIDB4MzIxZDVhNGEsIDB4OGYyMzY3NWUsCisJMHgzYmRmMjQ1ZiwgMHhmY2ZhMTJkOSwgMHgxZjNjZDU5NywgMHg2NzMwMmM5NiwgMHgzMzU2NzkyNCwgMHhjN2RkZWJmYiwKKwkweGQ3NmU0MTFiLCAweDNmZmJiMjQ0LCAweGU1ZDAyOWY5LCAweDIzOGJhMDRjLCAweDkwMzg5ZWRmLCAweDM0M2YxOWM3LAorCTB4NzFhZGI3MWUsIDB4MjgzMWM0ZjUsIDB4ZDg5ODJlOWYsIDB4ZDNhZjFlMTQsIDB4NTg1OGUzYzQsIDB4NWM1YTJlNWUsCisJMHg0ZWEzNDU2ZSwgMHhhMTc5ZDBiNiwgMHhkYmQ0MDRlMCwgMHgyNjMzZjFlMSwgMHhiZDcwMjcwNiwgMHhiZGUwNjcyZSwKKwkweDgzMzE5ODE0LCAweGY5NjFiMTk1LCAweGRmMzA1ZmI5LCAweGZiYzMyN2NmLCAweGE0NzUxYWNiLCAweDVkM2NkNDJmLAorCTB4MzZjOGEzNDEsIDB4NmMxNjdkMDEsIDB4M2YyOGY4MzQsIDB4YTQ1ZTI4ZDcsIDB4ZWM2ZmM1NzYsIDB4OTAzMjBhOTQsCisJMHg2YjM4M2ZjZSwgMHgxNmFlMzA5NCwgMHgzNDczMWYxZSwgMHgwNDllZWZlZSwgMHgwMjZkMWRmZCwgMHg1ZGJhMGJkZCwKKwkweDA3M2Q0ZjFlLCAweDNmZGJkMmRlLCAweGY5NmRlMzA3LCAweDNkNzc1NzZjLCAweGFjOWZjZmY0LCAweGY0ZmNmMDkzLAorCTB4M2YxZTdjZjAsIDB4ZDhhMDVkZmYsIDB4MzY3MWUxMzksIDB4NGJiNDMzYTQsIDB4MWJmMGUzYzIsIDB4MzhkODNhMTUsCisJMHhkN2FkZWI5YiwgMHgxZDUzN2YxNCwgMHg0ZTE3ZWQ0NywgMHhjZDlkM2YzZiwgMHhiOGI0NmRmNSwgMHhiYzY1NTFmZSwKKwkweDZkODJjNmNlLCAweDE3N2Y3MTkzLCAweDkzZWExOGU4LCAweGYzNWFjNmNlLCAweDc2ZjE5MGU0LCAweGRiZTdlNmNjLAorCTB4NjBmY2MxOWUsIDB4OTA3ZTY4NmEsIDB4ZjNjMzAxZTcsIDB4MmI5Y2FhODIsIDB4MDM3ZGZmZWMsIDB4YzgzNzdiZTIsCisJMHg2ZTYzZDQ2YiwgMHgxNDFmY2YxYiwgMHg4MzM5YWIxZSwgMHg0ZTA4NjM3MiwgMHhjMzc3YjdhZSwgMHhiZWM4MDc5ZSwKKwkweGJlMzEyNDczLCAweDQ1N2JmYTJlLCAweGM1MDJhM2RlLCAweDdjMTYwYWU3LCAweGVhMWUzYzc2LCAweGY3NDQ5OWNjLAorCTB4Mjc2N2RjYjAsIDB4M2NhMmIxNmYsIDB4ZTMxNjIwNWEsIDB4NTNiNzFlYmQsIDB4YzI2Nzk1YjgsIDB4ZWZmZGQyN2MsCisJMHhiY2VmYTFhYywgMHg3ZjkwM2UxNiwgMHg4MWU1ZjcwZSwgMHgwZjlkMDM2NiwgMHhmZGRlZjU1NCwgMHhmMDM1MzRlZiwKKwkweGM2NGZiZGY2LCAweGUwYWU3YjYxLCAweDc5ZjFkOGIwLCAweDc2M2Y3ZDIzLCAweGZhN2U0YmZlLCAweDExMGI1OGJiLAorCTB4ODFlNzkwM2EsIDB4ZTQ0NDk3YjMsIDB4ZDcxNmNiOWIsIDB4MTUxZjIzZGYsIDB4NGNmMjUyMmUsIDB4M2Y0ZjVjY2QsCisJMHhjMGM4YjdkMCwgMHhlYWQzY2VjOCwgMHg5ZjU5MTNjZCwgMHg0NmU4M2M1MywgMHg4ZmU1MjE1ZiwgMHg0M2ZjZjA1MiwKKwkweDI5YmU5MGRlLCAweDZjN2EwYTNjLCAweDYzZDM5ZGNjLCAweDExMmQ5ZDNmLCAweDFlODI2NzNlLCAweDE3OTI3ODQzLAorCTB4Zjg3ZDNjZjEsIDB4ZjY1MGVmZmUsIDB4OGE1ZTlhM2YsIDB4ZmY1MTg3MjYsIDB4ZGU2M2ZiZjAsIDB4NWMzNmMxMGMsCisJMHhlZTMxZGI4ZiwgMHgzYWY2OGE1MywgMHhkM2EyZTM5NCwgMHg3MTY2MWZkZiwgMHg2MjhhNGViYSwgMHhhMTQ5ZmRjZiwKKwkweGE3ZTdhOGRmLCAweGNmMjc0NzdhLCAweDdmZDk4N2Y0LCAweGQ1NjM3OTFlLCAweDRkZjM1MmZmLCAweGEwZjZiZmFhLAorCTB4NjVhYjBmNjIsIDB4YmJmZTUyOTMsIDB4NzJhMDM3ZWYsIDB4MjFiZjc4OGQsIDB4ODZmZGYyMzksIDB4NjgwOTBlODcsCisJMHgxYmY3YThhNywgMHhjZDU5MTk0ZSwgMHg0ZjNjNTRlMSwgMHhmMjc3ZGNhYiwgMHhlOTNiMjIyZCwgMHg2MmZjZGZkNCwKKwkweDc4YTk4YmViLCAweDUwOTA0OWRmLCAweDNhMWZiNTFkLCAweDFkYmU3YTQ3LCAweGE3YjIyM2VjLCAweGUzY2I3ZWZhLAorCTB4ZjlmODg3YWQsIDB4YzhkZWY2ZjAsIDB4YWRkYmRkZGYsIDB4MzJmNWRmZDgsIDB4YWVkMWI5MjMsIDB4ZTg2ZGI3OWMsCisJMHhiNzQ0ZjI1MSwgMHg4YjhmOTZlMiwgMHhiNzRiNzFhMSwgMHgzZDU2MzAzZCwgMHg3ZjIzZWJjNywgMHg4Y2M3MWI0ZiwKKwkweDYwZWNiNzE2LCAweGRiYjczYTQxLCAweGEwNzA0NmIxLCAweDM5ZGRiODdlLCAweDc5Y2E1ZGRjLCAweDRjNzFhOGRkLAorCTB4Yjk3M2U0NzksIDB4Yjk0YzcxZTEsIDB4YjljNzliNWEsIDB4ZjdjNDk2NmYsIDB4NjgwODI1ZGIsIDB4Y2U3NTlhZWYsCisJMHg3ZmI3M2EzNiwgMHg5ZDIyOTA0YywgMHhjZDVhNWVmMywgMHgyNTdjZjRlNSwgMHhjOGQwNzIwZiwgMHg4NTYwZTNlOSwKKwkweGYwNmZmNzQwLCAweGZiZWUxZTFlLCAweDFlZmM2M2MxLCAweDdlMDJjMWNlLCAweDdiY2Q0NzBmLCAweGE2NmJmN2E4LAorCTB4ZTgzZGU1MGUsIDB4MmY3YTlkZmUsIDB4YzM2N2JkNDcsIDB4NWFlMDhmOTgsIDB4N2QxYzVjZjQsIDB4ZTE4NzZiYzcsCisJMHhiZGRiOGQ5MCwgMHgxYTNmN2U1ZSwgMHg0M2U2MTA2NSwgMHg4OTEzY2M0ZCwgMHg2YmFiNmI1ZiwgMHhlZjdhNmFjNCwKKwkweDhmNGZkYjhlLCAweDdiZjA0NzU0LCAweGU5MWY4YTdkLCAweDJmZWE4ZWFlLCAweGZhZDZhZmFjLCAweGY3MGY1NDBiLAorCTB4ZGU1NGVlMTcsIDB4ZWNkOThiZTMsIDB4ODdmYmZiNGUsIDB4OWU4ZjFjNjMsIDB4ZjFiNjNiMzIsIDB4ZmI0OGVjYzQsCisJMHhmZGEyYzViNiwgMHg1ZTVhYWYxZSwgMHhiMGRmZTQ1NiwgMHhiYjBkYzVlZiwgMHg3YWY1YzkyZiwgMHhhN2ZmNjBiNywKKwkweDFiYTdjYTRhLCAweGNhYWU5ZjI4LCAweDdjMzFlZWQ1LCAweGUzMjkxZmZjLCAweDI5NDA2NWE5LCAweGQ3N2NhM2JiLAorCTB4YmM0YTk3ZjksIDB4N2I5NDRiYWMsIDB4MmY2OWVlMTAsIDB4ZDM5N2UzNjgsIDB4OTdlMzY5MGYsIDB4MzU5MzdiMzMsCisJMHg3OGZmN2NmNSwgMHg2Nzg1ZmJjZCwgMHg4YmRhNjkyNiwgMHhkYTY4ZjcwMywgMHg2ODE0MmY0YiwgMHgxNTAzZTVlYSwKKwkweGFmMmJmNzlhLCAweGIzZWE2YWQ0LCAweDY1ZjhkYTgyLCAweDYxYzVjZGY1LCAweGI0N2QzOGY3LCAweGRjYTAxYWJlLAorCTB4ZTY3NTdlZDAsIDB4Y2JkZTZhNmYsIDB4NTc1ZGEzNTgsIDB4YWViYjQ3OTYsIDB4ZWJiNTFiODksIDB4ZjZjZGM3NTIsCisJMHhkMzk3ZDc2YSwgMHgzMjVmNWRhZCwgMHhiZWYyZTNlNiwgMHg3ZjJlM2U3ZSwgMHhjN2M5NWRiNiwgMHhkZmIwNThlNSwKKwkweDJkOTM4ZDMzLCAweGY3YTliNzY4LCAweGZlZjdkNWE5LCAweDU4NjYzNzJmLCAweDAwN2Y0MGRmLCAweDAwMDAwMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGNzZW1faW50X3RhYmxlX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhlMjRiZmYwMCwgMHg1MWY4NjA2MiwgMHgzOGNmYzEwZiwgMHg5MDk4MTgxOSwKLQkweDc3MDE0M2Y4LCAweDAxNjg0MzMxLCAweDIxMDYwNjE2LCAweDYyNjM2NjIwLCAweDIyNjc2MDYwLCAweDA3MmJiZjVlLAotCTB4OWQ4NzdkODIsIDB4MTAzOGUxODEsIDB4NzgxZjY3ZGYsIDB4NWUyNDBkN2YsIDB4YmIzZjRkY2QsIDB4MmVkMWQzN2UsCi0JMHg3ZTI3ZjA2MiwgMHgwMmFmODYwNiwgMHgwNThiMGMwYywgMHgyMTBiN2MyMSwgMHhmY2NmZjk1NCwgMHgxOGE0NzYwOCwKLQkweDAyYTU3NjY1LCAweDE1MDAwM2Y1LCAweDgwNTFiNzdiLCAweDAwODA1MWI3CisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHhlNGIzZmYwMCwgMHg1MWY4NjA2NiwgMHhiOTdiYzEwZiwgMHg3MjZlMTgxOCwKKwkweDAxNDNmODIxLCAweGQwODY2N2NmLCAweDBjMGMyYzZhLCAweGM2Y2M0MDFhLCAweGNlYzBjMGM0LCAweDcxN2ViYzQ0LAorCTB4MWQ3YjA0NGUsIDB4NGNjMzAzMDcsIDB4MzFjOGRlMjAsIDB4NDgxYWZlZjAsIDB4N2U4NzlkN2MsIDB4NDJmM2E5NzYsCisJMHg4MWMxNTk2OCwgMHg1NzA4MzdmNywgMHhiNDMwMzEwYSwgMHhjNDMwMzMwYSwgMHgwY2Y4NDA4OCwgMHg1NWYyYThhMiwKKwkweGE5YjYwODQyLCAweDM5NzY2NTI0LCAweDAwMDNmNTAyLCAweDM0NzFjYzI0LCAweDAwMDAwMzgwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGNzZW1fcHJhbV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RkZGZmMDAsIDB4NDU1NDdjNzksIDB4YmVkZDcwYjYsIDB4OTdhNzc3NGIsCi0JMHg0MmM4NDI3NCwgMHg0MDEwZGMyMCwgMHg4MDRkODg1NCwgMHgwMjRkZTNiMCwgMHgxMDYwMmEzMSwgMHg2NmI3MWMxMSwKLQkweDA0NDg0YjBmLCAweGQzY2U3Y2RlLCAweDA4MzFiYWY5LCAweDU0NGUzOGU4LCAweDM4N2MwNjY2LCAweGE4ZDA0MWFmLAotCTB4MWEwYzFhNTEsIDB4MTY2YmMzYjAsIDB4MjY2NjU0MTksIDB4YjhjMzhlM2EsIDB4NmM4YTg5YmMsIDB4ZmQwMTEyNDIsCi0JMHg1ZjI4Mzc5OCwgMHgzYjc1NTM5ZCwgMHg0ZGJhNmY3ZCwgMHhlM2ZiZTY1YywgMHg0NWE3ZWZjYiwgMHhlYWI3YmFkZCwKLQkweDljZWFkOWQ0LCAweDI1YWFhNzUzLCAweGQ3YTkyMDU5LCAweGZlMTk3MjEyLCAweDQ4YTZmOTY4LCAweDUxZDExOTA4LAotCTB4MWZiNzE1YjYsIDB4MDQ4NDY5MjcsIDB4NmRkNTkxNWUsIDB4N2ZjMjIxMDIsIDB4MGVkNzIyYjksIDB4MTZjOGU0MjcsCi0JMHhmNWE1NjgyMSwgMHgyMTA3NWVjOCwgMHhkMzc2N2ViNCwgMHg5NzM1YTBiNCwgMHgwZTA1N2Q5MCwgMHhiYjNmZGUwZCwKLQkweDI1ZWIwOGI1LCAweDk2ZTJmZWJiLCAweDJlZTU3YjY4LCAweDY1YmE4MjUxLCAweDhiNzcyOWVmLCAweDZiMmE5MDkzLAotCTB4ZTk2M2EzZjMsIDB4MjI1ZGY2ZjMsIDB4MjI4NzQyZDksIDB4NDkwYjEyODEsIDB4OGRiOGU0MjcsIDB4YWM4YmJmYjAsCi0JMHhhYWNlYzBiZSwgMHhkZGY3OWI5NSwgMHgzNDU2ZmQwNSwgMHhmNjlkODk1YSwgMHhlMTdiYjk1MywgMHhiZWI0YjFkNCwKLQkweGUwNGNiMGYwLCAweGFiNmRjYTk1LCAweGJlYjQ1ZTk0LCAweGEwODQyODI4LCAweDBmZGVjMGZlLCAweDYyYjY5YzcwLAotCTB4NGMxYTExNTIsIDB4OGRiZjY5YzgsIDB4YmFkMDU3YTgsIDB4MDY3ZDM5YmIsIDB4YjgzOGJlN2QsIDB4NWZkZTE0YTMsCi0JMHgyZDc4MmY1YywgMHg5YmM1ZmRmNCwgMHhmZTgxOWRmNiwgMHhmZGM4MzcxNywgMHg5MmZmZGE0NSwgMHgwNzUxMDczYSwKLQkweDEzMmZiMWIxLCAweGE5ZmNjNzk4LCAweDFiZTU2ZjAwLCAweDdhZDJiMTMyLCAweDBhMTVhNWM1LCAweGI1NDkxYzAxLAotCTB4YzYwYmI5NGEsIDB4NWQ1MTRjN2YsIDB4MWM2MWNlMzAsIDB4ZTU2N2M3NDcsIDB4ZmExYzc0NzMsIDB4MDQ5N2IyZGQsCi0JMHg5OTZkNGMyZiwgMHg5ZTAwZjg4NSwgMHg1OWY2ZGRkNiwgMHg1ZTYxM2I0ZiwgMHhmMDgxOTRhYiwgMHgwYWI1ZWVmZCwKLQkweDM4MzBiN2JjLCAweDBhYmIxNWZiLCAweDRhNTY2ZGYwLCAweDliNGRjZTAxLCAweDNiODMwNTk1LCAweGY3NTI1YmZhLAotCTB4ZTNhZTAxOTYsIDB4N2MzMmYyMWIsIDB4ZjJlNmVkMzEsIDB4ZDUxMDlmYjQsIDB4NGM1ZjUxZGEsIDB4MDI3MjE2ODgsCi0JMHhkYTY1NDFkYywgMHgxN2U3OGU5MCwgMHhmN2E0MTQ4NCwgMHhhODkxM2E5MiwgMHgyOWZlOGViNiwgMHg0OWU5MDg2MSwKLQkweGZhMTdmZmZmLCAweDI2ODNlMDRmLCAweDZlNWI3MDU3LCAweDdiOTZiZDA3LCAweDBlZDViZmU4LCAweDcwZjM5ZDdhLAotCTB4ODVlZDQ5ZmEsIDB4ZTVlYmZkYjEsIDB4MGEwNzQwYTMsIDB4ODNkZmFkNGYsIDB4NGNmZWUzZTUsIDB4NTVmYmQ3MmMsCi0JMHhmYzZmZGJjNCwgMHhlMGRjYjA4MywgMHgyN2YzZTJmNywgMHhkY2IwYTNmZCwgMHhmY2IwZDdlNCwgMHhjYjBjYmY5ZCwKLQkweGRmMWNiZmEwLCAweDg1OWZlMmRiLCAweDBmYmY1NmU1LCAweGFmZTMzZjlmLCAweDVmY2ViMmMwLCAweGY3OWZjZjhkLAotCTB4YmQ2NThiZGYsIDB4NWZjZjgwM2YsIDB4MzJjM2FmZjIsIDB4NzJjNWFmZTQsIDB4OTYwMzdmYTcsIDB4YmUyMGZlMGQsCi0JMHgwZWJmOGFmNywgMHgwODdmNDZjYiwgMHgzN2YxZWY5ZiwgMHg0N2Y2MTk2MiwgMHhmNDBiZGNiMCwgMHhkZmM0NjVhNSwKLQkweGZmN2VlNThjLCAweGZhMGYyYzUxLCAweDQzYmJmMDViLCAweDNlNTg5M2ZlLCAweDFlZWVmMWMyLCAweDhhMjQ4YTQ3LAotCTB4M2M0NmI3MzcsIDB4ZWE0ODVjNTQsIDB4YTY0OGFkNjQsIDB4NTY3MmQ0ZjUsIDB4NTAyM2JmNGYsIDB4YmE3YWQwYTQsCi0JMHgxZTI5ZDY4ZiwgMHgxNDhkMmQ3YiwgMHg1N2JkNjk1OSwgMHhiOWNmNmIzNSwgMHg2OGRiMTQ5ZiwgMHhkYWMwMjczZCwKLQkweDE1YTIzZGZiLCAweDVmYmQ2OWRiLCAweGI4MWY2YjJkLCAweDQ0OWM1MDI5LCAweGFjODMwM2ViLCAweDQ4ZmFhYWZkLAotCTB4YWZkNjgzYjEsIDB4ZmNmNmIxMGEsIDB4ZDI3MTI5MzAsIDB4ZDU4NDdlN2EsIDB4MjU2ODhlMGIsIDB4NjgyZjVhMmUsCi0JMHgwZmMyZjU2NiwgMHg1YTZlMjUwMywgMHhkZjYxNmMyZiwgMHgyOTEzMzk4ZiwgMHgzMWY1YTY0OSwgMHhjMjdkYWNlZCwKLQkweDQzZDEzMjI1LCAweDgwODgxM2ViLCAweGQxNjc2MmY1LCAweDJmNWExNGM0LCAweDY5N2FiMGY2LCAweDFhOTJkOWVmLAotCTB4Y2FmNmZmODcsIDB4ZTUwOTczMmQsIDB4NGRjMGJhODUsIDB4ZWI0NTk0OWEsIDB4ZTIwYWNiNGEsIDB4Y2MwY2Y4YTUsCi0JMHgyNjQ0N2FjMiwgMHg0OGZkYTBmMywgMHg4ZDI2YjY2MCwgMHhhYzg1NzVhNiwgMHgwZWZmZjY4NCwgMHhmZGY2YzYyYywKLQkweGVkZWQ4YWIyLCAweGJlZDgxNTgxLCAweGRkYjE1MTVmLCAweGFjN2VlYWIyLCAweDZjMzU5NDFmLCAweDIwZjU1YjRmLAotCTB4ZDE1MDdmYmUsIDB4YWFlMDdkYjAsIDB4NDg3ZWIxNDcsIDB4YThmYjYxZjYsIDB4ZjdjNWJmNTUsIDB4NmMzZTI5MGYsCi0JMHg1MDc1N2M3ZiwgMHhmZmViNDg5YiwgMHgwMGI2ZjgyMSwgMHhiZTA4ZDc1ZiwgMHhmYzA3OTIwYSwgMHhhNzJjY2ExYSwKLQkweDIwNDZiYWZjLCAweDFlM2U0MGIzLCAweGYyYTZhNjA2LCAweGQxNGIyNmIwLCAweGZkZWRiZjQwLCAweDUxNjlmMGJhLAotCTB4MDY5ZGJjZTAsIDB4M2NjZjA1ZjUsIDB4YmNmZDhiOWMsIDB4YjRjOGZkODAsIDB4N2VlYmIxMWYsIDB4Y2EzMzdjMjYsCi0JMHg2Zjg0Y2ZkMCwgMHgxYTdlZjQyYSwgMHg3YjFhYmRlMCwgMHhmYmQ5ZmFmNywgMHgzYzIzMThjZCwgMHhmYmQ2MmNkZiwKLQkweDVjN2VjMjY5LCAweDg0ZDc5YmRkLCAweGYwOGNlM2NiLCAweGY3YWE1ZTVjLCAweDQ5ZmIwODczLCAweDExM2MxZWU5LAotCTB4OWZhMWE0NzksIDB4ZWY1MGJjODgsIDB4NGZkODRmZTcsIDB4YTNjMWVlY2YsIDB4ZmQwZGEzMjksIDB4YmQyMmNhNjgsCi0JMHg0ZmQ4YTM5ZiwgMHg4OWZhZjc1NiwgMHhmMDhkNjMyOCwgMHg3ZWY0NGIyOCwgMHhmYTdlYzYzZSwgMHg5YTVlNmY3NCwKLQkweDFlMTFiYzc1LCAweGNmZGVhNTZiLCAweDZlN2JhNDY5LCAweGVmZDlmYWY3LCAweGJmNjdlMjMyLCAweGYzOWY4YTJiLAotCTB4ZWU4MGNmMDgsIDB4NmRkOGFiY2QsIDB4M2JiMTRmYzQsIDB4ZDg0YjlmOGEsIDB4ZWJkZDk1Y2YsIDB4ODhkYmJmNjcsCi0JMHgyOGVlZmQ5ZiwgMHhlNjAxNjQ3ZSwgMHhmMzdiYTQzNSwgMHhlMjM2NGUyYSwgMHg4YTM5MzhhNywgMHhmMDAwYjcxZiwKLQkweDNjMWVlZDBjLCAweGYxMWE3YjA3LCAweDE0NjdiMDczLCAweGNmMDgxOTNmLCAweDMzYzFlZTg4LCAweDlmODhkZDMxLAotCTB4ZmM1MWU5ODksIDB4ZThjZjA4YTgsIDB4MzA3M2Y1ZWUsIDB4ODM5Zjg4ZGQsIDB4NWNmYzUxZTksIDB4ZWY4Y2ZkODksCi0JMHg2NjI2YmNkZSwgMHgzMTMzZjExOCwgMHgwMjlmOGEyMywgMHg1N2M4YTdlYywgMHhkYTEwZjA4NywgMHgzZjcxMmI4ZiwKLQkweGYxMThmYTg3LCAweDE0NGZhODczLCAweDlmYjE2MzNmLCAweGJjOWZiNDQ5LCAweGNkMjlmYmFlLCAweDM0YTdlMjMxLAotCTB4ODk5ZjhhMjcsIDB4YmJlYmU3ODgsIDB4MWNhMWNmZDcsIDB4ZTUwZTdlMjMsIDB4MDUzM2YxNDQsIDB4YmRkMjk5ZmIsCi0JMHgzNWY2OTU3OSwgMHgyZmI0YTdlMiwgMHhkMmI1Y2ZjMywgMHhlODY3NWM1MCwgMHhlOTE1ZTlkYSwgMHgyZWY1ZDcyNywKLQkweGJlZmEwNGQyLCAweGQxNzU2MWU4LCAweGY3NjAyNWUzLCAweDQzM2RiYTg4LCAweGJlOTEzNTlhLCAweDI5NGZhY2VmLAotCTB4ZGFjNDk4NzgsIDB4MDI3N2M1MzUsIDB4Y2FkNDVjN2UsIDB4OTI2YmI1OGIsIDB4ZWMxOTI1NDcsIDB4ZDUyZDE0YTgsCi0JMHhkNjUxZWY1MCwgMHhjZjdlZjBjYiwgMHhmNjg2N2VmMiwgMHgxOTU3NTk4YywgMHgwNTdjYjNkYSwgMHhjNTc2N2E4NiwKLQkweDdkZmJjMzE4LCAweGY1MGQ4YmFhLCAweDYwZGVmN2JlLCAweDcwMzczZjc4LCAweGI3OWVhMWIzLCAweGY3ODYyN2VlLAotCTB4MzFjZWQ0MDcsIDB4NjFiMTVmYjQsIDB4Y2FmZGExYjEsIDB4ZmQ0MzcyZTAsIDB4Mzc3ZmJhZWEsIDB4ZjQyNDNmYmMsCi0JMHg5YWZkYTE4MCwgMHhlZDBkODdjNiwgMHgxYjhmMjM0MywgMHgzZjBlYzNlYSwgMHg0NDdmNzg2OSwgMHhmYjQzMTZmMywKLQkweDFiY2ZhM2M4LCAweGVjYjc0N2RhLCAweDllYzdkNDM0LCAweDdmNzg2M2RjLCAweDQzN2VmYjdjLCAweDZmOGJkYWZkLAotCTB4MjIyZmRlMWEsIDB4ZGJkYTM2N2YsIDB4ZWYwYzBmYjYsIDB4NmE3Y2YyNGYsIDB4ZjMyZWJmNjgsIDB4ZWE5ZDkzNzMsCi0JMHg5YWJmMWNmNCwgMHgyYjkwNDVkNywgMHgyMDQ5N2U4MiwgMHgzNTdiNDE0YiwgMHhhZWIwNTJlMiwgMHgzZjMyNzJmNCwKLQkweDNkNDBiNWM1LCAweGQ5NDdmOTQ2LCAweDQzNGQ1NzNmLCAweGQ0N2ZhNGJlLCAweDU1ZWEyODZlLCAweDdkMGI0NTcxLAotCTB4YmUzMWQzZmUsIDB4ZjlmNDNjMmIsIDB4MzVkZjE1NGYsIDB4MGRmNjM4OWUsIDB4NjQ4MTM3ZTUsIDB4YTA1YWE5NDIsCi0JMHg5NWFmYjczNCwgMHg2NzE3YmYxOSwgMHgzMWY4MWE1ZiwgMHhkMmNhYmVmZCwgMHhkNjg1MzAzZSwgMHgyMTQ1ODk3YiwKLQkweDA0NTc4ZjkwLCAweDQ5ZDVkYTBiLCAweGY3ODZhOTIyLCAweGZkMDRhYzkyLCAweDg1YjliNWE2LCAweGU0NjIwNzRmLAotCTB4NmExZjVkNjEsIDB4ZmQxZDA4NjcsIDB4OTk3ZDkzYWUsIDB4ZmFhZDQ3NjgsIDB4Y2U3NjAwMjgsIDB4NWU3NDNlOWEsCi0JMHg0ZDc5MDhiZCwgMHhlODEyMjhmOCwgMHhiM2VmYmY0ZiwgMHhmYjQ3ZDMyMCwgMHhjZmQ0MmFiMywgMHhhMTVmMWQ4OCwKLQkweGYxYzYwZmUzLCAweDg3MGYyMDIzLCAweDlkMTFmYzYwLCAweDFiZjZiN2M3LCAweDk2ZGYxODY1LCAweGRmMTg2MTUzLAotCTB4M2RmMWQwYTYsIDB4ZjU1YzNmZDQsIDB4MTI5ZjFmMTksIDB4NmYyMTBjNjEsIDB4ZjhlMTlmMDksIDB4MWMwYTljZDYsCi0JMHhmZDQyYWQ3ZiwgMHg5M2YxZDhhZSwgMHhjMzM3ZTNhMiwgMHgzNDRiZGZmYywgMHg4YzYzN2VmZiwgMHg2YzU5Y2ZmMywKLQkweGU2YzJiZjljLCAweGIzYWFmZWZmLCAweDljMjRmYzdjLCAweDU5YzIwN2ZmLCAweGM1OWNmZjM2LCAweGQ2NTZmZTZjLAotCTB4Nzc3Yzc0NmYsIDB4MzAyZGZmMTQsIDB4ZTMwNGYxZmUsIDB4MTljNmYzNWIsIDB4YTk3N2RmZTcsIDB4MzY1NmZlNzEsCi0JMHg1ZjU1ZTlmZSwgMHgzODlkZjFmMiwgMHg5N2MyZTdmZSwgMHg5NzdkZmU2YywgMHhkNThhZjhlMiwgMHg1MWZlMDVlNywKLQkweDgzYWE5M2IyLCAweDliZDI3Yzc0LCAweDYwMGNiZTJhLCAweDk0MGUzYTE3LCAweGQwYTk1MjgzLCAweGU4NGRiMjEwLAotCTB4MzRmYzcwODcsIDB4NTdkYmYxODksIDB4NTBkZjk0NDksIDB4MzlmMDA1OWYsIDB4NTljZDUyMDksIDB4Y2U0NmZkNDgsCi0JMHg4YmVhNGJlYiwgMHhkODdiZDAxNCwgMHhmOWFkZmQ0ZSwgMHg4ZDc5ZDQxYywgMHg1OTM3ZjIyMiwgMHhhMDBlMGQ2ZiwKLQkweDhhMzZiNmYwLCAweDViY2ZhODAxLCAweGZhMDgzZTNmLCAweGVlNGFjYWI1LCAweDI0ZWY4NzJlLCAweDlmZTc4MTEyLAotCTB4OTZjODdhZmQsIDB4Y2I5OTc5ZDgsIDB4ZjFmMmI1ZjksIDB4OGI3OTE4OTYsIDB4NjRjNTgxZmEsIDB4NmY4NTM1NTAsCi0JMHg4OGMxMzAxMiwgMHhkNDI3ZmE4ZSwgMHhmOGM3MDM4ZiwgMHgxMGY3ZWE0MywgMHgyYTdjZmZlYSwgMHg5YmZlZjFiMywKLQkweDZmNTA3YmZhLCAweDNhMWVmZWExLCAweDdlMTU2NGNlLCAweDM3N2JiYjQ3LCAweGNlNWZjMjkzLCAweDYyNDRmZmUxLAotCTB4MWRjOWZhZjIsIDB4ZTU0MDMwNDIsIDB4MGQ5ZmFiZjMsIDB4ZWVmYWZmNDUsIDB4ZTkxNDFkN2IsIDB4MGVjYzcwMWQsCi0JMHhlOWQ0MzBmNCwgMHhhNzQwMDJiYywgMHhlMGQ2ZGRmNiwgMHhhYmYxMDExNiwgMHhhMWE2YmUwMiwgMHg3NzMyMTI2OCwKLQkweDc1YzUzNjVkLCAweGRkN2ZmYmM3LCAweGUwOTBlNTNiLCAweGEyNTZlNDI2LCAweGZkZjQxOWM5LCAweDdkMGE1NzNiLAotCTB4MTlkYzc0M2MsIDB4YWQ4MGI1OWEsIDB4MDViNjVhNDMsIDB4NWI2NDlhZTUsIDB4NzM3MjExNDYsIDB4ZjY5OTUwYzMsCi0JMHhmMjY5YTY0MCwgMHhlMzMxMmQyNywgMHhkNjMzMmY0ZSwgMHhlYjFiOTQ2NywgMHg1YjI2YjJhZCwgMHhkM2FkNWMyOCwKLQkweGY2OTliMjA0LCAweGIxOTY3MzNiLCAweGJmYTcxZjVkLCAweDk5ZDE5NTI1LCAweDcxNGU1NzhmLCAweGNkMWY0NTkyLAotCTB4MWUwMGIyODQsIDB4YjNjZTkwN2IsIDB4MWQ1YmVjM2MsIDB4MzJiOWFhOWUsIDB4MWYxZmEwODksIDB4YWU4MDQ5ZTgsCi0JMHhlZjdjMzQ4MSwgMHg2ZjM2MWUyNywgMHg2NGIzYmMzMywgMHhlNzRlNTY5YiwgMHgxOGI2NmIzOSwgMHhjMzM2ZmUwNCwKLQkweDg3NWVmZWZmLCAweGU1YTdjOTY2LCAweDYyNjQyN2JhLCAweDMzMWYzY2U5LCAweGNjZjliN2ZjLCAweGIwYzkwOWYzLAotCTB4NjE1ZWRmY2UsIDB4ZTZmOGNlN2UsIDB4MjdmZmE3MzgsIDB4M2NiNDFmYzAsIDB4ZTE0MWZjMDEsIDB4YTNmOWM2M2YsCi0JMHhmZTMyYWY0MywgMHhhNmZhYjJhOCwgMHg2ZmI0M2YwMiwgMHg5NWQyMDkxNCwgMHg5Y2FkY2JmMywgMHgxYWQ3ZTY1ZiwKLQkweDlmMTA4MmY5LCAweDM4NWM3NDBjLCAweDM4NzgyODRiLCAweDcyNjYwZjg2LCAweGMxYjg1ODNlLCAweDkyNzczN2M4LAotCTB4ODcxNTljODAsIDB4ZGZhZGI3MmUsIDB4ZGFhNjYwZmMsIDB4NzExZjdlNzksIDB4OTFmZGI5YmUsIDB4Y2U5Zjg4N2QsCi0JMHhiYTc0NjRmMywgMHhjZWU5ZDM4YiwgMHhhZGZiNjM2YSwgMHg3Mjc3YWU5YywgMHhmMGRhY2ViYSwgMHg3ZDU0ZWJkOCwKLQkweDQxYTg5ZjkwLCAweGVhYmRlNDE5LCAweDJkOWU5ZDNlLCAweDM4ZmE3YTA2LCAweGRlNzBjZDNkLCAweGQ3NzllOWM1LAotCTB4Y2QzZDE4Y2YsIDB4N2E3MGI2ZjAsIDB4MmYzODZjYjYsIDB4ZTE5ZDdlOTMsIDB4Zjc3N2MzMzUsIDB4ODNlNjlkYmQsCi0JMHg4MWQ5YWQ3MSwgMHg2YWFjZjRmOCwgMHgyYzcxNWEyYywgMHhlODY1NzllNiwgMHg2MmM3MTVmYSwgMHhkZDQ5NmNlNCwKLQkweDUxN2Q0MzM0LCAweGZiYzMzNmYwLCAweDM2Y2MzNzBiLCAweDVkYWZjZmI0LCAweGJiOWY2ODY0LCAweDdkNDMxZWVlLAotCTB4ODY2N2UwNzYsIDB4NzdiZWVmZjcsIDB4Y2VmZGExOTUsIDB4ZWQwYzg3ZWEsIDB4NjYzYzU3YjcsIDB4ZGJlNmRmYTgsCi0JMHhlNjdmNzg2OCwgMHhmNjg2Y2RhYywgMHgxOWNmZTUxOSwgMHhlZDk3YTdkYSwgMHg2OWE3ZDQzMCwgMHgwYmVmMGRiYiwKLQkweDZkZjUxNzdiLCAweGY3ZDU3NWMxLCAweGVmMTAxOTlmLCAweGY5MTU5YmZjLCAweDc0ZWZhY2Q0LCAweGFmY2M3OGJkLAotCTB4ZmVlM2YzZTIsIDB4ZjQ5ZTU4NDEsIDB4NjlmOWYxN2IsIDB4NTcyYzI4ZmYsIDB4ZWJhNmZlODEsIDB4MmIzNzY1ODIsCi0JMHhkZDlmMWVhYiwgMHg5NzQyZjgxNywgMHg2ZjY1NGY4YiwgMHhhZWQ5ZTgwZSwgMHhiZWZlYTFmNCwgMHhiZmQxZWY1OSwKLQkweDhhNzY3OGVjLCAweDQ4MTUyZTVlLCAweDZkODNhYzM5LCAweDlmZDc0ZWRjLCAweDRlY2MyZGRiLCAweDJjMDFlNDIwLAotCTB4NmU0YzJhOTcsIDB4MmFjY2VlOTcsIDB4NDdhODZlMjYsIDB4MTMzYjU2MDYsIDB4MDI0MjRiZjcsIDB4NmQ3ZTY3Y2UsCi0JMHg4NWNlMDE5ZSwgMHhjMTM2YWUxYiwgMHg2YWY5MDViNywgMHhlMTk4NzA1MSwgMHhiMWJhOTJmOSwgMHhlY2NlZWY4NiwKLQkweDY1YmUxMTEzLCAweDYxYTNlMzIwLCAweGRmN2YyYjM5LCAweDcyMzNmYTAyLCAweDEwZmE2NzIwLCAweDAwZmI1NzgwLAotCTB4ZDEzZDhkZWIsIDB4MmZlMzNiOWUsIDB4MDA2YzcxNWIsIDB4Y2IxY2I5ZTAsIDB4NTg1OWZlOTMsIDB4YjBmYmY3MWUsCi0JMHhjMGFmZTYzYywgMHgzNTdmMTNmMiwgMHg3YmZlMmQ5NiwgMHg3ZjZmZmNiMSwgMHhmZDBmY2IwMCwgMHhkZjdjYjBlYiwKLQkweDUxZTU4YjVmLCAweGRmMmMwNmZmLCAweDdjYjEwN2YzLCAweGU1ODc1ZmQ3LCAweDk2MTBmZTNiLCAweDJjNDZmZWNkLAotCTB4OTYxYWZkNWIsIDB4ZjBjNGJjYmEsIDB4MThhY2RmNGIsIDB4OWZmNWQxN2UsIDB4NzI0ZjFmYWUsIDB4ZmMwZDM5N2UsCi0JMHhiNjJmOGYxMiwgMHg4NGUyZjkxOCwgMHg2MTdjOGQ1YywgMHgzYTY2ODdkNiwgMHhmN2RmZjU5OCwgMHgzZjI5ODdlNSwKLQkweGQwNzQzZjEyLCAweGVmNDRkYjNiLCAweDlkZThhZWJjLCAweDdiZDBjNjI5LCAweGUwYzNjNThhLCAweDA1ZmVmNGUxLAotCTB4NWVjNzFiYzAsIDB4ZmI4YjA0OWYsIDB4NDgzYjE4ODgsIDB4ZmFjMGIyMmIsIDB4MmZlZjljYjAsIDB4M2Y1ODA3ZDAsCi0JMHhhMWFlYzdjNywgMHhiZGEzMzVkZCwgMHhmYTA0MWMxNCwgMHhmZmEwZGNmOCwgMHhmOWYxMDgxOSwgMHg1MTI5NDc3MywKLQkweGNmY2YxMzcyLCAweDc4ODRiZjRjLCAweGFiZThmMTgwLCAweDJlOTQ4MjBiLCAweGRiYjczYTNkLCAweGVkNWUxODkzLAotCTB4ZTg0NjUyMTYsIDB4ODBkMGYxN2EsIDB4MDY3M2JjNjcsIDB4YTkyMjVkNjMsIDB4M2JkMDdkZjAsIDB4NWZhNzE1Y2QsCi0JMHg3ZTAyODM2YSwgMHg4ZDZiYzJiYiwgMHhlODdjYWJlYiwgMHhmZjkzZjhlZiwgMHg4YTcyODQyYywgMHg0OWExZDk4NSwKLQkweDg3YjQ0NDA3LCAweDJmNjllNDQ5LCAweGVmYWEzN2UwLCAweDg4NGNkZWFkLCAweDUwMGZiNzYzLCAweDkzMWViODNjLAotCTB4MDJmZTIzMTIsIDB4M2RmYzA2YzUsIDB4OGNkNDcxNDQsIDB4MjY2ZDU5ZWIsIDB4NTdmZmFmZTIsIDB4ODFiYWIzMDMsCi0JMHg2NGY0YWViZiwgMHgwMzljZjg1NywgMHhlMDE3ZmVmMywgMHhkNWZkMmJiMywgMHg5YTIyZGU5NSwgMHg5ZDIzNTJmYSwKLQkweDIxZGVkYjdmLCAweDMwYWIwZjA1LCAweDViZTNiN2VlLCAweGMzMzJiN2RmLCAweDdjOGVmODEzLCAweGYzYWU5NmRjLAotCTB4YTEwZTczNzEsIDB4ZjJlNTljZTMsIDB4OGFlMWFlNzIsIDB4YjQ0YmEwNjQsIDB4MjllODJlOWYsIDB4Mzk0N2Q3ZmMsCi0JMHhlNmNlYmZhMCwgMHg2YjViZmIxYSwgMHgyMTU5MmZlZSwgMHg1Yzc0MzVjMiwgMHg2NDkwYTI5NywgMHhiZTg4NTY0MiwKLQkweDA2ZmQxMTVhLCAweGZjMDA0YjZmLCAweDZmMGViZGYxLCAweGQ4ZmUwYThkLCAweDU0NDYzZmU5LCAweGI3ZThkOWU4LAotCTB4YjRmYzNiOWYsIDB4ZTU5YmZjMWIsIDB4YjFmNTYyOTksIDB4Y2JkNDc0MzgsIDB4YjU2ZTUwY2EsIDB4NjgwZmQ2MzMsCi0JMHhkNWNmZDYzNCwgMHg5YzIxNjUwYSwgMHhjYjdjOWE5NywgMHgzYzA3NTgxMCwgMHhkMDY0YzdkNSwgMHhlYTU4OTljYiwKLQkweDU0Y2YyY2ZkLCAweDdmNGExYzcwLCAweDUzZWE0N2E2LCAweGY2OWNjZjUwLCAweDFmYmRmMGRiLCAweGZkNDQ4ZTFiLAotCTB4NDBkMWMwNzQsIDB4ODNkZmE1M2UsIDB4NGJjZTVkODgsIDB4Mzk0MjdlZmMsIDB4MTAyODJlOTAsIDB4Zjk2MTI0OGYsCi0JMHhlY2RmZjAyYiwgMHhmZGNiYmZmNCwgMHhlYjA5NWZhMCwgMHgyMTU1YmY3YSwgMHgwNmJkNjAzMSwgMHhjNjFiZDc5ZSwKLQkweGZhYTlkZmEzLCAweDk3N2MyYzFlLCAweDcyMjRkZTU4LCAweDRhNzdlNzVjLCAweDdlZjgzN2I3LCAweDdiM2E5MmYxLAotCTB4NGMyZWQxYjUsIDB4MWFhYmQ0MzEsIDB4NzYwZGFhYjMsIDB4MGMwM2ZjMjIsIDB4MDI0MTBhZTEsIDB4NjcyOTc3N2IsCi0JMHhiOWM5MzZiZiwgMHgyYjY4ZjgwZSwgMHhkZjgwZmIwNCwgMHhhNTVlZjYwNSwgMHhhOWYxNDVhZCwgMHhjMGNkMjYyOCwKLQkweGU5NDY3MzlmLCAweGZjY2VhZjdjLCAweDUzYTdlYTgwLCAweGU0MDRjOTZmLCAweDUwYTI1YzhiLCAweDQ3ZjQ3NjE1LAotCTB4YTE2MjUwNTcsIDB4MzZiY2I5ZjUsIDB4NjRjOTYxYTcsIDB4YmQ0ZWFmNTgsIDB4ZjVkYTIzNzIsIDB4MWJiOTQ4ZjMsCi0JMHg1MjBhY2RmYywgMHhjZmYxMDg1YiwgMHgwNjUyYzRiMywgMHhiYzk2Nzk3MiwgMHgyMzE2MWVlMywgMHgwNTQ1ZTc4NywKLQkweGNlYmI5OWUxLCAweDdmNTMxNzY4LCAweGI4NWY1MGQ5LCAweDQwNWY1OGMxLCAweDdkODc0ZTZlLCAweDY1ZWIwNWYwLAotCTB4NWY0MDE0MTIsIDB4MTUzZmRiMTgsIDB4MjQyZDFjOTksIDB4N2Q2MDZiZDUsIDB4NzViMzJmNWYsIDB4NDg4NzhlNmMsCi0JMHg1NTVmNTRkOSwgMHhlMTU0ZmFiZSwgMHgxZmZmNWE2YywgMHhmNDJkYzU5MSwgMHhhOTQ1ZGQ3ZCwgMHgxYzU4OWZjYywKLQkweGI0NjhhY2RhLCAweDYxODZkM2ZkLCAweDQzY2Q1MmI3LCAweDgxYWUwZmJmLCAweDRiYjAyYWY1LCAweDNiNTM2ZWYwLAotCTB4YzJiYmVmZDMsIDB4NWY1Nzg2NmYsIDB4MmZlZDNiZmYsIDB4ZWIyYTM4NzMsIDB4YzcxODJkMDQsIDB4MDI0OWIwMGUsCi0JMHg1ODAzNzdmNywgMHg4NjNjOTYwZSwgMHg1MzI4YzJiOCwgMHg1M2YzN2JmZCwgMHhkM2YwMzExYSwgMHg0YWE3ZDE1NiwKLQkweDgwZmYxOTNkLCAweGVkNDgyNTNmLCAweGY0ODdlZjhhLCAweGZmYTlkOTlmLCAweGZmNmEzZmMxLCAweDg1ZmY2OWJkLAotCTB4ZmQ0N2ZlODYsIDB4ZWZmN2ZkYTgsIDB4Njk0NGZmMDQsIDB4MmJmZWU3NDQsIDB4OTVmMTdkNWYsIDB4OGIyN2Q1MDAsCi0JMHg0ZGRhZmZiNywgMHg0YTc4ZmFlOCwgMHg1MmY3NGRhYSwgMHhmNmRkMmVmYSwgMHg3Y2U4MWJhMCwgMHg4MWI4MGE1MiwKLQkweGM1MDU0ZjVmLCAweGY1OWM2MGIyLCAweGUwNDkzZWVhLCAweDE0ZTZhMmY2LCAweGZmMDU4ZTIwLCAweDdlOWZmZGE0LAotCTB4ZGZlODE3ZmUsIDB4ZjY0ZGI1N2YsIDB4Y2VhYTdjNjAsIDB4Mzk1MmIxMWEsIDB4NjhiMGQ2NWMsIDB4ZmFjN2M5MzIsCi0JMHhmNmJlYWNjNywgMHg4ZGVhMTEwYiwgMHhmYzViZmU0NiwgMHgyMWQzYWZlYywgMHgwYTcyODJkZiwgMHhkMDQ0ZDc4ZiwKLQkweGY1YjY1ZDllLCAweDk3NTg1MmIzLCAweGNhM2I0OGFhLCAweDE4M2JmOTkxLCAweGVhMmE2MmZmLCAweDcyNGFkOWJmLAotCTB4MjcwYTc2ZTcsIDB4MWM1NWRkZmEsIDB4YmYwZDU1MmYsIDB4NDM3NDQyZjgsIDB4ZDAwOWZkNzksIDB4NDA0M2Q0MTcsCi0JMHg1ZGZjZDhiZiwgMHg5NzRmYjcwNSwgMHhlM2I0YWU0YSwgMHgyMzI3MTRkNCwgMHg4YmQwNDhjOSwgMHg5MDQ4NWUzYSwKLQkweGFiZTJhN2Q5LCAweDNjNDNlNTRmLCAweGI3ZDZjY2YyLCAweGJlMGM0MmRjLCAweDE3M2E3OTc0LCAweDdiOWZmYjlhLAotCTB4Yjc3YWM0ZDQsIDB4YWM1YmNhOTUsIDB4NWJhZmE0MWQsIDB4YWJiNzIzNmEsIDB4MmE1Y2FjYzMsIDB4MWY5MGRjNDcsCi0JMHhlY2IzNzRiMywgMHg0YmM3ZDAwZCwgMHg5OWZhN2M1ZiwgMHhmODNlMjEyNywgMHgwMDc3YWIzNywgMHg4YmM5N2ZlZCwKLQkweDg2MzdiZmFmLCAweDkwZWM5N2Q2LCAweDY5YjMyNmQzLCAweDBlZjQ4NTM4LCAweGZmZDE1NGZhLCAweGEwZTgyZGVlLAotCTB4NWY5N2UyYzcsIDB4ZWMyMWQ0NTcsIDB4MWRhOWZkZjksIDB4NjNiMjU5NzQsIDB4NzQ4NjQyOWYsIDB4Njg0OTQ3YzYsCi0JMHg4Y2UyZDI5ZiwgMHhjN2QwOWY0MywgMHg4ODI3NjBhNSwgMHgwMGFkN2VhZiwgMHgxNWVkNGZmZCwgMHgxYzZlNDY0OCwKLQkweDFkN2U2ZTdjLCAweDEzYzAwMGVkLCAweDJiZDM5M2QyLCAweGZiZDMzZjRhLCAweGEwMmU5NDU1LCAweDMyZjRjZGI3LAotCTB4ZjQwNTM3YmYsIDB4MmZkNjA4Y2IsIDB4ZmU1MDJkZTQsIDB4ZTQwZjY5N2UsIDB4ZjU2ZmJkMTUsIDB4NWUyYTFlMDIsCi0JMHhmOTg2ZTE1YSwgMHgxOWFhOTA5YywgMHg2MGY1M2Y5ZiwgMHhhZmM3NDZiYSwgMHgxZWU5MDM5MCwgMHg4YWYzZDkyYywKLQkweGYyMWJmZGRmLCAweGZmYjdjMmRmLCAweDM1ZTMxZDJkLCAweGUwYjJjYjQ0LCAweDgyYzgxNDVhLCAweDM0ZGZjZTc5LAotCTB4ODBiOWU3MDMsIDB4MmIwZjkwZjgsIDB4NDFjYjEyOWUsIDB4OTEyOTdlMWYsIDB4ZTQ3MTFkYjIsIDB4OTM5NzNjZTQsCi0JMHg3MTI4NWIxMywgMHhkMDRmM2NlOSwgMHg2ZGYzMDY2NSwgMHhkYjgzMTFkZSwgMHg4N2JlZGVkMCwgMHgzN2Y4M2U4MCwKLQkweDMxNmExNzNlLCAweDFiNGJmZDYwLCAweDkyMWJkN2EzLCAweGFiNTE5N2VlLCAweGI3N2Y5NjMzLCAweDNhMDY2ZGFlLAotCTB4NjVhM2VlOWQsIDB4MTU0NjNlYzAsIDB4MWYxYzAyOTEsIDB4YWZkYTY1YzIsIDB4MGNhNGY2ZjgsIDB4NGFhMjI3NDYsCi0JMHhiYTNiZmM4NSwgMHg3M2MwOTdlZSwgMHhkNjU5YmY3OCwgMHhlZjg2ZjllYywgMHg4ZWRjZTVjOCwgMHhmMWYyNTdmMSwKLQkweGIwNDlkYzI5LCAweDhmNDg5ZjVlLCAweGIyYWFiNzZmLCAweGJhZTgwN2FlLCAweDMxNjdjMzFkLCAweDdmZTRjZWYyLAotCTB4ZGU0YzQzZWIsIDB4NGUwZmY5NzUsIDB4MGJmNjgzMmIsIDB4ODIzOTMyZWYsIDB4YTQzZDYwZWYsIDB4YjAzMjQ1NzAsCi0JMHgwMjJkZGY3ZCwgMHg4OTJiMDdlYSwgMHhhZGYzOTNjNCwgMHg2MzczOTczMiwgMHgyODVmOTliYiwgMHgxYzkwOTJmYywKLQkweDRlMzAzN2MzLCAweGY3MDFkMjJhLCAweGE3YWMxNjMxLCAweGQxZThjN2RmLCAweGRkZDcxODJhLCAweDhlNWQ1ZmI5LAotCTB4ZDA3ZDcyMTcsIDB4NjQwN2QyNmEsIDB4ODkwM2QzMTMsIDB4YWUwMGFhZWQsIDB4ZTBlNTRiN2YsIDB4ZmM4MjRmMzMsCi0JMHhhODBkNzk1MiwgMHgzOTcyYmYyMCwgMHhmYWYzZmZjYywgMHg4NGZkZWYwMywgMHgyMWU3Y2RjYSwgMHg3YThkNmU1ZCwKLQkweDE1YjcyY2Q1LCAweDc4OTA0NzNiLCAweGQzYjlmYjcyLCAweDJkY2FlMjRiLCAweDZlNTcxZTdkLCAweGNmYzgyZDlkLAotCTB4YWFmNWFmZmYsIDB4OTkwY2M3OGUsIDB4MGVlYWYxZTIsIDB4MzI3YWVhM2MsIDB4N2FjZDNlMTEsIDB4YzZhNGE3NzIsCi0JMHhlZmY0OTNkNSwgMHg5OWQ4NTI1ZCwgMHhkNDNlNzUxZiwgMHgwYmYxNmZmOSwgMHgxZjQxN2Q5NSwgMHhlNzU0Zjk0NSwKLQkweGVhOWYyOGMzLCAweDVlMjlkODdjLCAweGI5YTNjMDZhLCAweGVmYjBlZmZkLCAweGRiNjJmYzAxLCAweDc1MThmNTM4LAotCTB4MDE1ZTZkMjEsIDB4MzM4YWZlZTUsIDB4YjRhZmNjMTYsIDB4NWY3MDE3MGQsIDB4MDkwNmQwNjQsIDB4M2M1YjZmZWIsCi0JMHg5ZDRlYzAyMywgMHhjZmQ1ZjYzYSwgMHhiYmJlNDY3ZiwgMHhjYjdkZjA3ZiwgMHgzZjNlMjk1NywgMHg2ZWM4NDAxOSwKLQkweDVmMDQ2NTI4LCAweGM4ZTdhNThhLCAweGVhYjM4MzMwLCAweDQzZjYwOTA4LCAweGU1ODlhMGZkLCAweGNmZjRmZTMxLAotCTB4YmRmNzY2NjUsIDB4NjFjZWUxZmEsIDB4YjZhMmM3ODAsIDB4YTgyZGM5YzEsIDB4OWZhMjA3MzcsIDB4YzhmNWM1NTksCi0JMHgwYzlhODBiOSwgMHgzODVjZjVmYSwgMHg3M2M5ZmQwZiwgMHhiYzU3NDU4NywgMHgzOGU3YzZmYywgMHhmODgwNWY3ZCwKLQkweGI2ZGIyZDE5LCAweGYyOTE1YTkyLCAweDQ3NjkxYjVkLCAweGQ1YjAyMmJiLCAweGQ5YzViNjQ2LCAweDk5OTBhYWRmLAotCTB4ZjhhMWZjOWUsIDB4M2UwM2ZhMDAsIDB4OTRiN2IzOWUsIDB4NzNiMWM3OTYsIDB4YmJlYjlkZmYsIDB4ODFmZmZiYTksCi0JMHhlMTU1ZTZlYiwgMHhhN2IwMTZjZCwgMHgzMTZhZGFhZSwgMHhlYjk2MDVjNCwgMHgwYTQwNWQ3YywgMHhlZWE3YWY4MCwKLQkweDAzODZiYmI3LCAweDVlOGIwZjFlLCAweDBhYWQwM2M4LCAweGUyZjhhMTdmLCAweGY5ZTY4ZGY4LCAweDhmNjBmZjQzLAotCTB4NzA3YjJiM2QsIDB4ZDBlNGQ3ZGMsIDB4NmJjM2MwNWMsIDB4ZjYwNDZkNjcsIDB4YjUyYjc2ZDMsIDB4ZjljMWUyNGIsCi0JMHhiOWMxODUyYiwgMHhjYmEzMThmYiwgMHhhMjk3ODU4ZiwgMHgxOGE0NjczNiwgMHgwOTViM2RlMiwgMHgzYTY3NmRmMiwKLQkweDczZjNlNDEzLCAweDJhYjgyNDc1LCAweGIyMmRlODE3LCAweDY4MzUzZDdhLCAweDk0MTRmYmU4LCAweGVmODM4ZTVmLAotCTB4NjM1ZWQxMmUsIDB4YzY4YWYzZTQsIDB4ZjQwODJmMWQsIDB4YzE2MTY1YmQsIDB4Y2JlZGExNjMsIDB4ZjgwNTE2YTQsCi0JMHg0NTMxYWFhNSwgMHg1NDM2N2QwNCwgMHgzZDViZjNkNSwgMHhlMTg5NmU0MywgMHgwOTY1NjdiZiwgMHhjYzYwNzllNywKLQkweDVlMDNiNzZiLCAweDA4NTE5ZmNlLCAweDA3NjgwMWU0LCAweGY4NGYzMWRiLCAweGYyMTg3ODdjLCAweGJkNzlhMjViLAotCTB4Mjc1MzI3ZWMsIDB4NDEwZmQwY2EsIDB4NzFkMzM2M2UsIDB4YTE5MjdkNzAsIDB4ZDdjNGI2M2UsIDB4NmE5YWUwMGIsCi0JMHg4ZGU5NTk2ZCwgMHgxYzAxZjc4MywgMHg3Yzk2M2ZlZiwgMHg1Yjc2NTU3NiwgMHhlNWQ1ZGY3ZSwgMHhjNzk2MjdkNywKLQkweDlkNTdkZGYwLCAweDllMjMzN2U1LCAweGE1NWYyZWZjLCAweDk3YmNjMDY2LCAweDAwNjVlNTM3LCAweDIxYmY5NzNlLAotCTB4NTdjNzhjZjcsIDB4ZGY5OWZhMmYsIDB4MDNlNzlkYjgsIDB4Zjk1MDM1YjcsIDB4N2U0NjI2YmQsIDB4YzZmY2E4MWIsCi0JMHhmY2I2MTM4OSwgMHgyMmZiZjJjOCwgMHg3YjNjNmZjOCwgMHg5NzU3Y2Y4YywgMHhjN2YwZmNkZiwgMHgwZGY5YmYyOCwKLQkweGNhMWU0MzE2LCAweGVmYWY5OTY5LCAweGU4NTdlNTA5LCAweGQ0MWE0Yjc5LCAweDhlMjNhZjY1LCAweDQwM2MwNmJlLAotCTB4ZGYzYjczOWMsIDB4NDA3MTgwMDcsIDB4YmJlNTU1OGUsIDB4ZmM3ZmYxYzksIDB4Zjk3OGU1OGIsIDB4MzM3OTgyMmUsCi0JMHhlNGNkZTk5ZCwgMHgyYTZlZjk3OCwgMHg5ZGQwMDJjNywgMHgyNmYyZjFjOSwgMHg5ZGI5YzcyYSwgMHgyNzUwNzdlNSwKLQkweDJmZGY2NWY5LCAweGFiZWZiMDhiLCAweDdiN2Y3MzFhLCAweDQwYWYxZDA3LCAweGZhMzZiZDkzLCAweDNjODc0MTdlLAotCTB4Njc5NTg4OGYsIDB4Y2YyMDQ5NTUsIDB4Y2YyN2JiODcsIDB4NTMzY2I4YmIsIDB4OGRlN2VkMzksIDB4ZDg2ZjU3NDMsCi0JMHhkYWY2MWY5OCwgMHgyZmY1MTNlOCwgMHg0MWZlNWYwMywgMHg2ZGU5ZmY0NCwgMHhmZjczYjMwYiwgMHg3MGM0ZmEzOCwKLQkweDAwZGI4YmUwLCAweDYzMmZjYTFlLCAweGZkNWExZDM5LCAweDc0YmZlYzAxLCAweDkwNzRjNmNjLCAweGI1ODM5MjkzLAotCTB4ZWMzYzgxYmYsIDB4MDEzMmFkY2EsIDB4ZTFhY2I4N2QsIDB4Y2Q1M2Y0NjMsIDB4YmVkZDE3NzEsIDB4NzQ1ZmM3MzIsCi0JMHhjMzhlNjIzZCwgMHhiZDMzYTkyYywgMHg5ZGJlMzBhNywgMHhiYzIwYjYyNiwgMHg3N2EyNGZlNCwgMHhkM2JlMWM1YiwKLQkweGU3MDRlYmRmLCAweDljZjdkYWUxLCAweGVjZTAzYmMzLCAweGNmYTQyZTJhLCAweGY0YjgyYmEzLCAweDdjMmI5NTc5LAotCTB4ODY0YTFiYmQsIDB4ZTI5MWJjNDEsIDB4ZjAyNWU1MTEsIDB4YWE3MTg4YTYsIDB4ODYwMWEyZjIsIDB4NzJiNzBjZjMsCi0JMHgxNmQ1ODczOCwgMHg2MmQ4NDA5NSwgMHg4MGViZTQxYSwgMHg5ZWUxYjU1ZiwgMHgzNjhmYjA0MywgMHgwMDVhYThlMiwKLQkweDMxZDhmNTY2LCAweDU3ZjgxZjU2LCAweDUxZGJkOWNmLCAweDNjYmE3NTllLCAweDM5NjRmOWM0LCAweDVlYjVlN2VmLAotCTB4NmZjMGM1ZDUsIDB4MDc4MjhkNTUsIDB4YzhhYTlkZDYsIDB4YzZkY2YwM2YsIDB4OTU1ZjhkODEsIDB4NmEyZDFmMDIsCi0JMHhlNDU2M2MxMiwgMHhmMDE0MmZjMywgMHhmYWU5NGFmYiwgMHgyYzM0ZmMwYiwgMHhiZmRhMDVmYywgMHg0NDhhOWE4YiwKLQkweDZlZDE3ZWY4LCAweGJiZTQxMzAxLCAweGU5Nzc0ZmMyLCAweGY3YzM5NmI2LCAweDA0ZWZjMDIyLCAweGJhZDlkYjM4LAotCTB4ZGJkM2UxYzYsIDB4MDE4MGE0YWIsIDB4MmYyNzkyZmUsIDB4NzA2NmM5YWUsIDB4MDNiNTU2YWIsIDB4Nzg1MTExZGUsCi0JMHhhZjM4OGI2NywgMHhlM2FiYzI2ZSwgMHgxZjc4MmJiZCwgMHhlM2RlYjg1MiwgMHhiOGQzZmM3NCwgMHgyMjJmMThmMywKLQkweGY5NmU5NGUxLCAweDZlMzVkZjM3LCAweGQxOWE0NTU1LCAweDU3ZTNkMzVmLCAweDJhZGY0NTViLCAweDY1ODhlMjE5LAotCTB4ZjM4YzY0ODIsIDB4ZmJmYzYzYjYsIDB4N2ZmZmU4NDcsIDB4ZjA3ZmFkYmUsIDB4ZGQ3NDIyMmYsIDB4ZDNmZDdkZmEsCi0JMHhjZmIzZWY4OCwgMHhlODE1M2M3ZiwgMHg5MTM1ZTRiMiwgMHg1YTVkMjhkOCwgMHg4MjI0NWRlYiwgMHgwNTQxMjRmYiwKLQkweDQxYjhiMGU4LCAweDI0MGUzMGQ0LCAweGJiYTcwYTQ1LCAweGMzNTFmMTYyLCAweDg1ZGRiMWYwLCAweDRlZjE3MDdhLAotCTB4ZmQzMjcwNmIsIDB4OWYyYmYxN2UsIDB4ZDMzZDgzZTYsIDB4YTFmYjQwZmEsIDB4M2MwMzg4NmMsIDB4OTMxY2EwMmYsCi0JMHhlYzNlNGI0MCwgMHhkODk2MmQxMywgMHhiZjE5OGRiZSwgMHg4N2M1ODUxMSwgMHhjYzc2ZWNjZiwgMHhlYTEwNzkwMiwKLQkweGM1YTliOWQ4LCAweDM1YjI5OWExLCAweDU1N2UxZWM2LCAweDY0MWM1OTkxLCAweDE1YWYzYjM3LCAweGJjYzA0ZTc4LAotCTB4ZjYyZjgwMzEsIDB4OGY5ZThlZGMsIDB4ZTYzOWU2NzMsIDB4OTQ2ZTJjOTcsIDB4NmFmZTcwODMsIDB4NTY4ZWRkNzEsCi0JMHgzZTJjOWI4OCwgMHhhZDc1YzU2YSwgMHg4YzBiZWVhYSwgMHg3ZjZjOTZmYiwgMHg2YWVmOWQ5MSwgMHg3MmZlMGQxNCwKLQkweDRlYjUzZjI3LCAweGJmYzE1ODhjLCAweDM4YzRhODZhLCAweDhjN2ZhZDNjLCAweDBiZjcxMGY1LCAweGI1MWZhM2JmLAotCTB4MmJkMzdiNjQsIDB4MjVjMjhhMDEsIDB4YzZlYjNmMmYsIDB4ZGJjZDU4NzMsIDB4ZDZhZmU4ZGMsIDB4YThkYzdiN2QsCi0JMHg3YTFhNWY5MywgMHg1M2E1ZmI4OCwgMHg5N2RmODA0ZSwgMHhjZDNkMmZjOCwgMHg2MmI0ZTRmOSwgMHg3YWViZWZmMiwKLQkweGUxNGFiZmEwLCAweDYzOGYyYzJjLCAweGZmZjk0N2I3LCAweDA3N2YyZmM1LCAweDNiMzNkNTcxLCAweGMwMWRmZjNmLAotCTB4ZjM5YmY0YmQsIDB4ZTI4ZmJiYmYsIDB4N2JiNWVjOTMsIDB4M2Q1NjBmNDAsIDB4NDM4YzE3ZmYsIDB4NTY0OWRmZTksCi0JMHg3YjlmYWZhZSwgMHhhZDc4ZTMxNiwgMHhhMTdhYjM3ZiwgMHgxM2E2ZDZiNywgMHg2YWM3MTAzOSwgMHg3NDhmZjFkZCwKLQkweDM2NTY1M2IwLCAweDZiYmI0MjRkLCAweDBjOTJhZWU1LCAweGQwNGVjNzEyLCAweDYwZGZlMDRiLCAweDY2ODhlMjM3LAotCTB4Mzg2ODFkYmEsIDB4OWU3MDAzOTAsIDB4NzQ4Nzc0YTUsIDB4MjFiYzY4YmUsIDB4MzhlMmM5NTQsIDB4ZDQzMzhmMmEsCi0JMHg3NmRiOGZjNywgMHg0YzM0MmI4YSwgMHg3MGZjNjliZiwgMHg0YWFmNjUyOCwgMHg3ODVmMTFiYSwgMHg5YWYzZDI5NywKLQkweDllYjFkMDZlLCAweDUzNDI5MWM3LCAweDcwYmUzNWJlLCAweGU5NDFmZTE2LCAweGM2MzU2Nzk1LCAweDk4NmNiZTE3LAotCTB4NDI0ZjlmZmYsIDB4ODQ4ZjQzNWIsIDB4Mzc0ODg1ZjEsIDB4ODVjN2E3ZjAsIDB4ZGYyZDE0ZGIsIDB4ZjNiOTcyMGEsCi0JMHgwMGViOGMwNSwgMHgwOWQzMjZmZCwgMHg2NWY4YmViNywgMHg0ZmQ1YzQwZSwgMHg2MTc3ZWRjYSwgMHgxNTkzNWJiZSwKLQkweDM3MTdkN2Y3LCAweGE5ZTUxNWZkLCAweDY4ZGJkNzc1LCAweDlmMWUxMjdmLCAweDNmZDEyNTZkLCAweGI5ZTM0NzE2LAotCTB4NWQ1YjU1YWEsIDB4ZTljMTJlMmMsIDB4ZDUwYjcxMDAsIDB4N2M3OWNmOGQsIDB4MWViNWYxODIsIDB4YWYxNDQ4YjcsCi0JMHhjN2VkNjA1OCwgMHg1YzU5NGVmMywgMHgwN2ViNzJhNSwgMHg4M2M1MzEwYSwgMHhlYjFkNTE4NCwgMHhlOTdhMjI3ZSwKLQkweDFlMDBmMDc4LCAweGUzYzZjNjQ2LCAweGEyODdjN2UyLCAweGRkMTMzOGYxLCAweDg3MTA5ZTgwLCAweDY4ZGJjNjhiLAotCTB4NWRjNDM3YmQsIDB4ZTM1ZmMyODIsIDB4Mzc1Yjc3YzUsIDB4YWI1ZTM4YjMsIDB4ZTk1YmNjNmMsIDB4Y2Y4YjEzYTAsCi0JMHg1YmQxMzZjZCwgMHhlYjU3NmY5ZiwgMHhmOGYzNTc1NiwgMHgwNjlhNzhhZSwgMHhjZWNmNzY4YiwgMHgyOTczM2FmOCwKLQkweDZkNWY3ZWJlLCAweDNlZDg3ZTE1LCAweGJjYzEzY2ViLCAweDdjMDM1M2VmLCAweGIxZjBkOTU5LCAweGZhOGQ3OTAyLAotCTB4ZjdjZmE2ZmEsIDB4Y2ZjZmI3MGMsIDB4NWU2MjJmM2MsIDB4MDFkMDlhZWUsIDB4ZmQ2NmVmZDQsIDB4NjFjZTBjYjEsCi0JMHgzN2Y3ODFjNCwgMHg4ZDY1ZGUxYywgMHhiMzM4ZmQ2YywgMHhkMjc0MTVkMywgMHhkZmVjY2U3ZSwgMHhhY2JkN2M4ZCwKLQkweDQwMjU2M2ZlLCAweGY3NTQzYmZiLCAweDQ5ZmNjMmIyLCAweDdlYjA0NzI2LCAweDNmZTA2MzA0LCAweDdjYmVkMmYzLAotCTB4ZmU2NDdmMTYsIDB4YWQ5Yzc5ODAsIDB4ODU1NjNmNWMsIDB4NTU1MzhmZTMsIDB4OWM2MTg1ZmYsIDB4YzI5MDgxMjUsCi0JMHg3ZGJmYWNmMiwgMHgzNjkyZDNiYywgMHhkZDNiZmExMywgMHhiM2M4MTMyYywgMHhjYjEyMWQzYywgMHhhZTZiZWRlMiwKLQkweDVmN2NjYWI1LCAweGI5YzU5NmIzLCAweGU3OGEzYWU5LCAweDljZWM1YzVlLCAweDYwYWE5ODhiLCAweDZiYTU2NDFjLAotCTB4NWYzODUxZDQsIDB4YThhNWQyYjksIDB4YWNkNTFmZTAsIDB4MzViY2ZiNjIsIDB4MDI2NmY3M2YsIDB4NmU1MjZiYmQsCi0JMHhhZDZkNzhjNSwgMHgzNDllYmYwOSwgMHg3ZjljMTE0ZiwgMHgxZjJjNGNmMSwgMHhkNjZhZWMwZSwgMHhjNTlhMjkzYiwKLQkweDU3NGFmZjAwLCAweGUxNGE4NjU5LCAweDgxZmI0ZDVjLCAweGYyNDRhOGYzLCAweGQxMWMzOWUyLCAweGYzMDY1YTVkLAotCTB4OGYxNjNkMTEsIDB4NGM3YzRlM2QsIDB4NWYxMzk2NzYsIDB4OGY2NDVlMGMsIDB4YjkwY2RjZjEsIDB4N2U4NTRjMzQsCi0JMHhhNWQ5ZmRmNCwgMHhkODQzZTZiNiwgMHhlMDA0ZDFlOCwgMHhjN2VmODkyYiwgMHhjMWUyZGQxNywgMHgwYmQ1Yjc3OSwKLQkweGFhNzE2MDVlLCAweDNhNGY1NTllLCAweDc1ODAzM2NiLCAweDcyNjc2ZGE0LCAweDNmMDZiOTNlLCAweDVmNWQxYTI0LAotCTB4NTBiOWZjMWMsIDB4ZTgxZjZmYmYsIDB4YTI2ZWQ1YTUsIDB4YTMzOTUwYTUsIDB4M2NjNTU1NTgsIDB4ZDQzNDNmMzgsCi0JMHg5ZjAxZTQyNiwgMHhkN2M3ZjE3ZSwgMHhiMGY2YmY2OCwgMHhhMDM1MjA0OCwgMHgxOWU3YTljZCwgMHg2NzIwMjk2OSwKLQkweGU2MDhmMjBlLCAweDVmMmIwMDkzLCAweGE3MDFkMWVlLCAweGMwODRjZjM5LCAweDk3ZTczMTJiLCAweDhjNGU4OTI3LAotCTB4MjRkYjljN2YsIDB4OTIyYjlmYTIsIDB4OGUzYjdlYWIsIDB4MDgyNGVkZjksIDB4NjVmNWYzZjAsIDB4MWNmMzg3MDksCi0JMHhmMDIzMTE3NSwgMHhlMzBiYmQ3ZSwgMHg5OGRmMGJmMywgMHg3NDAzZjI4YiwgMHg4ZjU3YzU4OCwgMHhiOTFmYTMzMiwKLQkweDg3Y2VlZWMxLCAweDc2OGQ5ZGZkLCAweDQ5MjgxNmY3LCAweGJjODY2YjQwLCAweGRmYmM3OWU2LCAweDczYzZlNTllLAotCTB4MDMwYzU0NDgsIDB4ZTdjZTdmNjAsIDB4ODJmOWZhZjIsIDB4YWY5OGMzZDIsIDB4N2E4MDViZTAsIDB4ZjE5NjYzM2UsCi0JMHhiZWQ5OTI5YywgMHgxZmI1MDg5NywgMHgwYTBkN2Q2MSwgMHhiMzg5MDhkZSwgMHgxOWI4ZGZhZiwgMHhkZWNhZWVlMSwKLQkweGIwZThmMWQ3LCAweDM5MDliZDUxLCAweDA0ZTI0ZTQyLCAweDk3ZDYyNjNjLCAweDY1YjdlMDVkLCAweDBkYzc2ZmUwLAotCTB4YjVmOGVlZmYsIDB4NmJmMTFhNjYsIDB4NzVmODhkNTcsIDB4Y2ZlMzMyMGMsIDB4ZDc5NzVmODgsIDB4ZTZjYTJmODgsCi0JMHg2ZmMzNmZjMSwgMHhiOWUzMjhmMiwgMHg3ZTE1N2ZhZiwgMHgxZGI4ZDk4NywgMHhmZjRhZjFjOSwgMHg0Y2U5NmRjYSwKLQkweDU5ZGMwMzY1LCAweGMyZTUwNDUyLCAweGNlZDk0NzJjLCAweGVlZmYwMDg4LCAweDg1NWMxNjkzLCAweGU4NWQ3OTVmLAotCTB4ZjlmMjY0YWYsIDB4NzdkOGYzMDgsIDB4MTEyMzkwMGUsIDB4MWNhMmY1ZTAsIDB4ZDAwYmM5YzEsIDB4YTFmMjBlZjMsCi0JMHgyMTY5ZTgwNywgMHg1N2NiOTI5ZiwgMHg4YWU3YTYyNywgMHg5ZTNmMDc2OSwgMHgwNGRhYmY0MywgMHhmMjBkN2JmYywKLQkweDk1NWYzYjAzLCAweGI5MzU4MjRhLCAweDBmNWVhNzIwLCAweGJmMjFkZmFjLCAweDg2NGYzYmNkLCAweDNiYzRmNjczLAotCTB4YWY5YzAwNmYsIDB4NjhmOTYwZjcsIDB4NmRiZjdiMDEsIDB4MWE3M2MxMzAsIDB4NzQ4NWM4YTEsIDB4ZjM1NTRmZDAsCi0JMHhiZmU4Mzk0OSwgMHhhOWY2OTU0NywgMHg2Y2JlZjdlMCwgMHgxYmJkZjE2NywgMHhkM2VhMGFlYywgMHhhZTE2ZWRhNywKLQkweDcxYmUyNzU3LCAweGI2Yzc5NTJkLCAweGY5YzJhY2IwLCAweDM2ZjBiNmMwLCAweDM3YTgwMGRiLCAweGJkNmU3ODhhLAotCTB4NGFmNmE1MmEsIDB4MmMzNWJmMTgsIDB4ZDllNmI4MzMsIDB4YmZjMDAzODIsIDB4M2Q3MTkyNmYsIDB4MGUzNzlkNjgsCi0JMHhlZDQ0YzFjZiwgMHg0ZmRiMzBiNywgMHhlYTdmMGI2YywgMHhjZmEzMWI5ZSwgMHhiODlmMWI1YiwgMHgxYjBmZTIxMiwKLQkweDMxZjdmMTJkLCAweGRmMmNkODU3LCAweGFlOGQ3ZmNiLCAweGYyOWQwZGJmLCAweDU4ZDg1NjJlLCAweGZkYTNjNzVlLAotCTB4NGQ5NjNjZTgsIDB4NjFkN2M3M2IsIDB4Mzk2MzBmMjYsIDB4YjgyZTBmOWQsIDB4MmJiZmU3MDEsIDB4M2E3Y2ZkNGMsCi0JMHg4ZWYxNTI4ZiwgMHg3OWQwODcxYiwgMHhjNDhiZmU4ZSwgMHgyNmQxMmJmNCwgMHg0NzY3NGVjZiwgMHgxYWZkZTA4MCwKLQkweDVmYTgyZmQwLCAweDBlMmNmZjZiLCAweDQ0YTBiODg3LCAweGYwYzQ1Y2UwLCAweDZmZTgwNWVhLCAweDdjYTZlNmJkLAotCTB4NTBhMmY5NGUsIDB4YmUwMzBkMGIsIDB4YzE0ZTE4OWQsIDB4M2VhYTBhN2IsIDB4OGZkNzY4MjQsIDB4ZmMwYzk2NjgsCi0JMHhkNWQ3Yzg1OSwgMHg5ZjE2MTZjMiwgMHhkOGQ0NzkxZiwgMHgzMjQ1YmEzZSwgMHg4YzQxNDFkOSwgMHg2OTNkOGYxZiwKLQkweGYzYWI1ZTdjLCAweDAzYTQ5YmI5LCAweDI0YmZhZjlmLCAweGQ1MTc5MDBhLCAweDBmYmM0ZWQ2LCAweGU2ZGJiODUwLAotCTB4ZGEzODQyZjUsIDB4MmIyOWMwMmUsIDB4Y2IxMjVlNWEsIDB4OWJmN2FkZTIsIDB4NmIwZjJjNmQsIDB4OWQ3MDQyYTMsCi0JMHg4OWMwYjhkOSwgMHgxN2ZiMDhmYiwgMHhlYjNjYzYyYywgMHhlYmU2N2VhZiwgMHg1ZWRjZWYxYiwgMHg2NjRhN2U4YywKLQkweDMyNWFmNWZiLCAweGJkZmMwNTE5LCAweGFmNzg2MDVhLCAweGI3ZGQ4YWNkLCAweDlmOWQ0YmQyLCAweGY5ZDZmZTc1LAotCTB4OTI0MTZiM2EsIDB4Y2JkZTVlMmYsIDB4N2JiMzNiNjAsIDB4MTIwYzE3OGEsIDB4ZjZkN2YwMTQsIDB4YTlmYzc4MGEsCi0JMHgyMTlmMDFmNSwgMHgwNjVjZGI3ZiwgMHgwMGQ5MDNjOCwgMHg3OWUzNTU0ZiwgMHhlMTZkYmJiNCwgMHhmYjU0NzlmOCwKLQkweDBmZTY2ZTZkLCAweDA1NTgxMDNlLCAweGE1M2YxZTc5LCAweDMyN2EwOWMyLCAweGQxZWJiZjcxLCAweGEwODNhYWRmLAotCTB4YWI2NzdjMmEsIDB4YTZlNzhkOWQsIDB4MTZjOGRiZTYsIDB4YjU0YWQzODgsIDB4ODBiYjM3NTksIDB4NWZhZTRiZmYsCi0JMHhiMjdkZTE0MywgMHhlYmViODJkYywgMHhmMDhiZDk0NiwgMHhjMTA5MmEwNywgMHhhNzNmMDNmOCwgMHhkOTJhN2JkNSwKLQkweGVjN2U3YjFjLCAweGE4ZThhZDg4LCAweGE4ZjdjZThkLCAweGVlZjM4M2NkLCAweDAwMGFmM2UxLCAweGZmZWJmN2JmLAotCTB4YTZiYjA2ZTMsIDB4ZTkxNWEyZWQsIDB4NDNmYjhiZDgsIDB4NmRlNzc3ZmEsIDB4ZDgwZjRmMGMsIDB4N2JlMDc3YjUsCi0JMHg3Mjg2OTE1MiwgMHhiZGI5ZjVlMiwgMHgzOWMxODZmMywgMHgxOGY3OGE1NSwgMHg1ZmEwZWEzOSwgMHhlYTkxZTcwMCwKLQkweGMyOGUzYWEzLCAweDIwYjRlYTkzLCAweDUzNGQxMjVmLCAweDAzMWU3YTNkLCAweGM4YzVlZmUxLCAweDA0MDg4OTA1LAotCTB4YmQ3NDFjZjIsIDB4ODg4NTg0MmEsIDB4NzBjMWNhOGIsIDB4N2UwMjMzOWIsIDB4OWQwNTZhNDcsIDB4NGVjMTA1MzcsCi0JMHg2NmJmYWM2YywgMHgxY2Y0NGNlOSwgMHg1MjUxZTYxYywgMHhlNDg0MmNiZSwgMHgxMjc5ODI3OSwgMHhmZDA1YTg5MCwKLQkweGQ3NTZmYWViLCAweDA4NTNhYmQzLCAweGM3ZWFjYmNhLCAweGVkMGQ2MGE0LCAweDYyZDQ5MzY3LCAweGFlNGFmODg3LAotCTB4NTZjMzE2YTYsIDB4ZTJhNGFhNzQsIDB4MTUzZWJjZjksIDB4MWM3M2YzMDQsIDB4NDRhNTRmNzksIDB4ZjQyYTE2ZWQsCi0JMHhlZjExYmY0MywgMHgxZmU3MTc4ZSwgMHhlNWYxZDc2YSwgMHgyYmUwMjdmYiwgMHg3ZWZiNzBmZiwgMHg3NmJjNmYzMCwKLQkweDc1Zjc5ZTM2LCAweDUxZTlkYTFiLCAweGIxZWRjMWZkLCAweDhlZmViZTUyLCAweDJiZWQ4Y2ZlLCAweDI0YjVjODkzLAotCTB4ZDY2ZjhlMzYsIDB4MzI3ZGJhMWYsIDB4MDNjYjdjN2EsIDB4NmZlZWY4MGUsIDB4YWRkYTRlMGMsIDB4ZTA4ZGRmMDYsCi0JMHgxM2VhOGRmMywgMHgwYzhlNmViZSwgMHhiZjQyN2Q1MywgMHgzYjBmMDgyZiwgMHg4MmVlZjEwMCwgMHg3NzFjOTkwZiwKLQkweDAzODcyN2QyLCAweGZiZWZlMDIyLCAweDVmMzMxMWVhLCAweGI5NTA4ZDBjLCAweDU1ODNlZGU0LCAweDg5ZWNiZjM4LAotCTB4YWZiZGExZDYsIDB4ZDI3N2E4ZGQsIDB4NDBjZjBkYTYsIDB4OWJmMzk3M2IsIDB4N2NiYWNmMTksIDB4ZTBiZWU1OWIsCi0JMHgyYjAxZWY1ZSwgMHg2MDkxMGI4MywgMHgxZDA4ODcxZSwgMHhhMDc5YTg3MCwgMHg2MDg4OGU5NywgMHg1MTE1YjdlZiwKLQkweDBlYjg1MDNjLCAweGI5NGJmOTcyLCAweGU2MWViYzEwLCAweDlkN2MzZWJmLCAweDdiZTRlNDFkLCAweGZhMTEyN2FmLAotCTB4ZjI3YzRjNzUsIDB4ZGUzN2QxNzEsIDB4ZGNmOGYyY2UsIDB4ZmI2NTg3ODAsIDB4MjRmNWYwMmUsIDB4Y2E4ZWY0ODIsCi0JMHhkODkzOTUwMSwgMHhmZmNlODk3OCwgMHhlNWQ3N2U2NiwgMHgzYTBlMDZhMywgMHgwYmY5ZTFlNywgMHgyOGFjZWIwMiwKLQkweGJkZjBmMDg0LCAweDAwZjI2Yzk1LCAweGJiN2I3NTVlLCAweDI0YjdkYjg2LCAweGRmZjY4NTkwLCAweGViZTEwZjRhLAotCTB4ZjgxMDRlNTEsIDB4ZWRkNjQ2YTQsIDB4MzYyZGFmNzUsIDB4NTVkMmI1M2UsIDB4ZmI2ZGYxOWMsIDB4YTkxNzU1MzUsCi0JMHg4NzkzMTY3ZiwgMHhhM2I1MjU1ZCwgMHg1MTc1NTZmZiwgMHgxYmRmZTdjMSwgMHg0NTBhNjE3ZiwgMHhmMzdmMDFiYSwKLQkweGUzM2IzZGVkLCAweDU3YzgzYzZmLCAweGU2MmZmZmNmLCAweGJmM2NjYWI3LCAweGZjYzc2YWI1LCAweDZiZGYxMmM2LAotCTB4MTQ3ZjU0MmQsIDB4ZTM1NzU4YWUsIDB4Nzc5M2YxNTAsIDB4ZWIzYjBiMzMsIDB4NjU3Y2ZkMDUsIDB4OTY2MDNkMjIsCi0JMHg2YjRiOTFmNywgMHhiNDk4NjAwZiwgMHg3MmFmNzkwYiwgMHgzMjEyZmM3MCwgMHg5OGQ5ZjQxZCwgMHg3MjViYjUwOCwKLQkweDA1ZmZjYjNiLCAweDA3MmFiZjNlLCAweGFkZGI3YmMzLCAweDllNDEwM2VkLCAweGRmYmU4ODU2LCAweDE2YTgxMWQ5LAotCTB4OGFlYzA1OGIsIDB4MWVlZDA0ZGQsIDB4NmU2M2JlZWYsIDB4MWVlNmY3OTQsIDB4YjNhN2Y1ODYsIDB4ZjY2MDEwNWQsCi0JMHhmNDQ3NWYyNiwgMHg0OGQwYTdiOCwgMHg3MzhlODBlNSwgMHgwZTdiZWVjNCwgMHgzMGYxYWZmYSwgMHgzNDBlMTRiZiwKLQkweDYyM2E3ZTgxLCAweDVlMDNkNWYzLCAweDI0YzYxNDFkLCAweDI4MzI0ZjM4LCAweDI4ZTJjYjkyLCAweDI1ZGM4MzExLAotCTB4NDk4NzMzOTIsIDB4ZGU3NDQyOGUsIDB4ZTgwNWFlYjAsIDB4NDg0MDM2YmEsIDB4N2IwMmNmMGMsIDB4ZDUwMjIzMGEsCi0JMHhmNGI3NjAyZSwgMHhiMDZjMjQyZSwgMHgwNmYzMDQ2NSwgMHg3YmIzZTc3YiwgMHhiMDE3N2EwMCwgMHhiNGRlYzc3YiwKLQkweDViYzkzOGIzLCAweGNiZDExZDdjLCAweDAzZjJiNjIzLCAweDkxMmNiZjAwLCAweGZiZTBiNTgwLCAweDQyYTAwZGMzLAotCTB4NWQ4OGYxN2MsIDB4YjI3ODA3ZGIsIDB4OGYzODY5OTUsIDB4MGFmMTBmNmMsIDB4NTJkOThlOTQsIDB4YWQ3ZDgwNDgsCi0JMHhjMGFhYTVkNCwgMHhhZDg0OGFlMiwgMHhmZWQyNTA0MywgMHg0NWFiMjdiMiwgMHhmZWVjZjc0MCwgMHg2NTA5Y2YwNCwKLQkweDQ3MTNmZDgzLCAweGU1ZDk4ZTZlLCAweDZiMDcxNjFmLCAweDFmODc2NGVjLCAweDQ4NzE3MmUzLCAweDMxZWRmM2ExLAotCTB4NDczZmU1OTksIDB4N2MxNDM5ZTMsIDB4ZWJhYjZmYzAsIDB4ZWI2YzljNTYsIDB4MjI1ZjJjOTcsIDB4NmNmMGMyOTAsCi0JMHg2MDgwY2JmNiwgMHhkNzg5MmYzMCwgMHg2NDg4NTQxZiwgMHgyOWJmNDU0ZiwgMHhiMDE5N2MwMCwgMHg3MjZmZDBkOCwKLQkweGVmMDg2ZjEwLCAweGM3ZWE0OTQ5LCAweGJjMTE0NWVlLCAweDJiZmVhMGViLCAweGY3MDZkZGE5LCAweGEwZjJlODI1LAotCTB4ZTNhM2Y5ZjMsIDB4ZjQ0YWY2NmUsIDB4NzNmOGY3NTUsIDB4NTJkM2UwZjksIDB4ZTAyN2ZmN2UsIDB4YjlkYzc1YjksCi0JMHgyNjcxYWI4MSwgMHhlZjhjMzllZCwgMHg2NzkwZDEzNCwgMHg1MWFmZDNhOSwgMHgwZWNmZDAzNiwgMHhmZDU4OTJmMSwKLQkweDgxMDY1MmVkLCAweDI0MmFkZTNkLCAweDZhNWZjMTc5LCAweDc4MzAyNDVkLCAweDQzY2YxYjA1LCAweGNjZjMwYzk1LAotCTB4YTMzZjMwNzQsIDB4ZmVjNWViOGQsIDB4MGYzOGI5NDksIDB4ZjNhMDlkN2QsIDB4NWQ3MTg3NWIsIDB4ZTdhMjNjZDMsCi0JMHg4Y2U3NGM4ZSwgMHgzMjkwZTdjYywgMHg5ZGYxYTJmMywgMHgyYjA3Y2MyYywgMHgxODRlZTA1NywgMHg0MGVjMmU3MiwKLQkweGRkY2FhY2ZiLCAweDljZTI0MzllLCAweGIxNjhjOTkzLCAweGE2MDczZGM3LCAweGZkNmYxNDk3LCAweDVlNDI3YTkyLAotCTB4ZTgwYTc1NjEsIDB4OTkzYjhjZDksIDB4YTNlMzMwN2UsIDB4M2QwYzA4NGQsIDB4N2Y2M2ZiMDQsIDB4YTNlZWUzOTAsCi0JMHhlNjY2NjVlYiwgMHhlOGYzMjk4ZCwgMHhkNzU5OTlmYiwgMHhkZjNmYTk2MywgMHhjNmUyOTRlMCwgMHgwOTI1YzcwYiwKLQkweDBjOGZjYzNmLCAweDE4ZGYzY2IyLCAweGYzMDcxZGZlLCAweGU3N2JlYjM5LCAweGJmYzUwZDNkLCAweDFiZTllMzFkLAotCTB4MzdkZTE4OTIsIDB4NmZiYzMxMjQsIDB4YWE3Yzc0NTAsIDB4MWQ3ZjIwYzksIDB4NWYyMWFmNzUsIDB4OTZkZmJkNjIsCi0JMHg1MDllNDEyMiwgMHg3M2U1MGIyMCwgMHhiYmQxODdiZSwgMHhlZDBkN2RlMywgMHhiYjQ0OWU5NiwgMHgxMjUwMzZmZSwKLQkweDBkYjI2NWViLCAweDdkYzU5ZWY5LCAweGRmZTBiY2Y0LCAweDk5NGI5ZmY4LCAweGRiYTdlZDQ4LCAweDhkNTA1ZjM4LAotCTB4YzI5YmU4YzAsIDB4N2ViMGJlZTAsIDB4NGU5YjhlMTIsIDB4MTQ4MWRhMmQsIDB4MmRjYTBiY2YsIDB4OWQwNzg4NWUsCi0JMHgxYmJlZjM5ZCwgMHhjOWNkYzg4ZSwgMHg3ODI0MmU2ZSwgMHgwZDdhYjVmNCwgMHgxNTdmNzNmOCwgMHhkMTI1Yjc3ZCwKLQkweDUwMzZkMjdlLCAweGYxODNkNTQ1LCAweGE1MjVjODA1LCAweDhmYjhmNWQzLCAweDM3MTJkYjM5LCAweGM0OTdjZmVmLAotCTB4OTI1Nzc2ZmMsIDB4Y2NjOGUxMDcsIDB4ZWE3NDhhOWMsIDB4MDE0ZTRmYTgsIDB4YTdjY2MzN2YsIDB4ZTZiMzVlNTQsCi0JMHhiNzM4ZWYwZCwgMHgxMTY2Zjk0NiwgMHg2ZjJjZDllMCwgMHgxNDY5MzI2ZCwgMHgyMDhhZGQ3MCwgMHg3Njc0ZDJiZSwKLQkweDk3NWI3YWU2LCAweDQzOTAzNDk3LCAweGE3MmE4ZmQ4LCAweDczYTc1NDdhLCAweDNhNmFmZTNmLCAweDRmZjEzYmM2LAotCTB4MWZmZWZmMDgsIDB4YzdiODQ3ZTAsIDB4ZDQ1ZWEzMTcsIDB4NjIwYzg4ZTUsIDB4N2EwZWRlN2EsIDB4ZDljZTI2MzcsCi0JMHgzZWQ3ZjRkNiwgMHhkMWY4OWZiMCwgMHg2MGJiY2ZjZiwgMHg1MmVmZTkzZiwgMHhlY2Y0MGJiYiwgMHhlY2ZmZmJjOSwKLQkweDhmODYzYzgyLCAweDhlZjE2N2VlLCAweGQ3ZmU0Y2JiLCAweGZmNGM0OTIzLCAweDVlNTQ5NDdmLCAweGRiYmFmMzAzLAotCTB4MmZhMTc1ZmYsIDB4YmRjOTVmODYsIDB4NTE2NDVmNmMsIDB4NmY5ZDM0NTAsIDB4YWUzNzllMzQsIDB4MTdjZjk5MGMsCi0JMHg5NWRmMTAwNywgMHhmZDc4ZmM1MiwgMHhlNzE2MjRmZSwgMHg1OWJmNTQ1OSwgMHg3YzYxNTZjOSwgMHhhZTgxYWZkZiwKLQkweDc5N2ZiOTI3LCAweDAzZGQ4MWIyLCAweGE3MzNjM2EyLCAweDNlMDJhODdlLCAweDU2YzNkZmQ3LCAweDJjZGVhZmJlLAotCTB4OWI0M2Y1YjMsIDB4M2U2MmZiMGMsIDB4OWMzMzM3OGUsIDB4YTRmZGY4ODcsIDB4YTIyZDdmZjMsIDB4OGU5YjMzZGYsCi0JMHhjM2Q1MmY3NSwgMHhmM2NiMzBiZSwgMHhmZTYzY2YzNSwgMHg5YzI5NmE0NywgMHg5MGZmOWZlNywgMHhiYzM0ZmU4MCwKLQkweGNmNWQzZjdmLCAweGM1YWVmNzdjLCAweDNjZjMzM2ZkLCAweGEwOGZkZjNiLCAweDkwYjVkZmExLCAweGNlN2NkYmQzLAotCTB4ZWQ5ODYxNmEsIDB4M2UyM2NmNmYsIDB4Zjk0ZWNmOTQsIDB4MGY5NjYxMTgsIDB4OWUyMzhlNmQsIDB4MDBlNzljM2IsCi0JMHhmMTI2MzQzYywgMHgzMjQyYWI3ZCwgMHg3NjJlZjIxMiwgMHhmYzk3ZWUxZSwgMHg2NzVlZjk2ZCwgMHhkM2YyYjlmOCwKLQkweGE0ZjQ0ZjNjLCAweDkzNTk2MDlmLCAweGRiZjNiMmE0LCAweDgxNGJiN2UxLCAweGVlMzU5NmJmLCAweGJlNjU3YmMwLAotCTB4MGNhYTNlYWIsIDB4ODRmZjcyOWYsIDB4NmEyNWU4NzQsIDB4ZTgxMWZlNWYsIDB4YzE4MjdjNDgsIDB4ZjliNjVjZWUsCi0JMHg2NWZjYzJiYywgMHhmODNiOWY4NiwgMHgxZjAwM2JmMywgMHhlZWNlY2ZiOCwgMHhhOTYzYjkwZiwgMHhkZWY2MjE3YywKLQkweDhjOTJmNzk5LCAweGEyNjdlYmZiLCAweDNjZDllNGU3LCAweDkzYmVmOTJhLCAweDVmMzMzZjNlLCAweDliM2U3MGQ3LAotCTB4OWFkYTc1YjcsIDB4MzVjYTc0NWUsIDB4Zjg3MjI3NGQsIDB4ZmJjYzA3NzksIDB4MjE2NmY5ZDYsIDB4OGFjZDJmMjksCi0JMHhiZDNhMWZjMywgMHhmZTEwN2NhMiwgMHhkM2FiYzIyNSwgMHg2Y2VkNWU2OSwgMHgyNjQwYWYzZSwgMHg4NGNiZjdkZiwKLQkweDJmOTk5MmI4LCAweGQ3NmYzYWJhLCAweDgwZTRiNzJhLCAweGRlZTk5YWJjLCAweGZiM2NlMDlhLCAweDNlZDg5M2RmLAotCTB4MmI1NTNjZWQsIDB4OWYzOGJkMDUsIDB4YzRmMWFmOTQsIDB4YTUyNzJiZDgsIDB4ODFmNzQzZGEsIDB4N2M2NTZkMWMsCi0JMHhlMDZiZDUxYywgMHg3ZWJlODJiYywgMHg3Y2Y1YzY0YiwgMHg4MGNkNGJiOSwgMHgxZTkwOTE3YiwgMHg4NzYxNWU3MCwKLQkweGU5ZWYwMDM1LCAweDZiZjcxY2UzLCAweGYwMTk3ZjVhLCAweDY5ZTU4NjVkLCAweDdmZDZiOTdmLCAweDgyZmI0NzQwLAotCTB4MTBkZGU3OGQsIDB4NDQxYjZkYzcsIDB4ZWFkM2JlMzAsIDB4NzFlYmMyMzIsIDB4Yzc4ZjA4ODgsIDB4YTViYmQ2YzEsCi0JMHgxZjM3ZjM1MiwgMHhkYWRhMGU4MCwgMHhjNzExZjk4YywgMHhkMGY4ZjEyZiwgMHhiYzU5NmIyNSwgMHgxMGVkNWU3OSwKLQkweGRkMDVmNzBjLCAweGY3NGFlNWM1LCAweGY0ZTZlZTNmLCAweGY2Y2MyYmJiLCAweDlhNmNlN2JkLCAweGRmMzBmNDg2LAotCTB4ZmI4NDcyNjcsIDB4MDQxYmIzMmQsIDB4ZmE2NjIzZDQsIDB4Nzc1ZWY3Y2MsIDB4ZGNlZGY0MGEsIDB4ZGY3ZTExNjAsCi0JMHgxMWU0NWU4OSwgMHg2ZTk5YmJhNCwgMHg3NjFlMWRlYiwgMHhhZDU0OGRiZiwgMHhjNzNmN2RjMCwgMHg0ZmI4MDkzNywKLQkweGRlODEyNGI4LCAweDhmMDc3N2ZiLCAweDNlNzM3NzY3LCAweDgyMjQ3OWU2LCAweDU1ZDZlMTdmLCAweDk4MTE3YTZiLAotCTB4ZjgwNTUwZmYsIDB4M2ViZjBjZGMsIDB4NjM0NGY5ZmYsIDB4MzdjZjg3N2EsIDB4Y2I0OGJjZDEsIDB4ODI5ZjJjYjUsCi0JMHhjMjhiZTNhZiwgMHg2NWE5N2VlYywgMHhhZjJjODg4ZiwgMHg3NDhiYzc5MywgMHhjZDc4NzVmOCwgMHg5NzE1MjhmMywKLQkweGRiNmYzZTYyLCAweDA5ZjMxMTA2LCAweGQ3MDQwYWVmLCAweDc3Y2JiZGMwLCAweDNkNzAxNmFkLCAweDVkMjc0NDRkLAotCTB4MzJmYmU4NGYsIDB4NjM2NzFhY2IsIDB4ZjY4Zjk1N2UsIDB4ZGI2OTc2MDMsIDB4ZDkxNzA0ODcsIDB4ZGUwMjc1YjYsCi0JMHg5ZTkwOTM3ZiwgMHg5NDU3OTY2MSwgMHgzMDg0OWU4OCwgMHg3NGEzY2RiYSwgMHg3ZTZlMzg3YiwgMHgzZmQ2OTE1YywKLQkweDc4MjczZjc2LCAweDc2M2ZkNmJkLCAweDMwODQ4OTdmLCAweGRkNDk2NGFmLCAweDRhZjNjMzM0LCAweDc3NGY1MTg3LAotCTB4M2FhNDdmMjUsIDB4MmU5Y2RlN2UsIDB4ZTlmY2JhNmYsIDB4OWMxZWI4ZjIsIDB4YTUxZmIwNzMsIDB4NWNlY2ExZTAsCi0JMHhlODYzY2ZjMCwgMHhmYmZkNTBhZiwgMHhmZjhiMDc3MywgMHg3ZDFiN2EzYywgMHhmM2M2ZDk2NSwgMHhmOTg0ZmQ4NiwKLQkweGU2YmQxOGEzLCAweDc5ZjE5MzhiLCAweGUyODM3NWEyLCAweGQ3ODdhMGMxLCAweGY4N2E4YzNhLCAweDlmNDdjZTg3LAotCTB4ZmEyNzJlODcsIDB4NjI3MmNjZmMsIDB4MGY0Y2RlZmUsIDB4YTY2NzBlM2QsIDB4MDAxZTk5OGIsIDB4NDcwZGY4MjcsCi0JMHgwN2MxMWM5YSwgMHgwNDQ3OWMyOCwgMHhjOWEwNzcwNiwgMHg2NmI3NzA4ZSwgMHhmZTcwNjg5NiwgMHhlZGQ2NTk2NiwKLQkweDBmODExZTU4LCAweDU3YmQ4MzQ3LCAweGVkMDM4Y2ZlLCAweDc5NTdlZTU2LCAweDQ1MDNlN2UzLCAweGY3NmUyNWVkLAotCTB4NDE5NjE5ODgsIDB4OTMxMTFlMzAsIDB4MmVjNzkwYmMsIDB4NzdhYTViNjYsIDB4N2Q4YTc5ZDIsIDB4ZDIxODM5NjksCi0JMHg5YzIyYmQ5OSwgMHg5OTJkYWVlNywgMHgxNDNkYzIyMCwgMHg3N2JjZmMzNSwgMHgzNzlkODU4ZCwgMHhjM2RiZmJkMywKLQkweGVkOTdhMGYxLCAweDgwNDZmMjhlLCAweDlhOWZlY2U3LCAweGZlMmMxZDBiLCAweGNlMGFmZThjLCAweDE0M2RlZTEzLAotCTB4NzYwZGJmYTgsIDB4ZjMwNGViZjAsIDB4YzhkMjBiNjksIDB4ODNiN2EwMDEsIDB4ZWU0MGEzNjgsIDB4NzJhNDc0M2YsCi0JMHhmZmVkOWMzYiwgMHgyODZjYmZkMSwgMHhjYmNiNTZiZCwgMHgzZjkwOTdhYSwgMHg0OWIzZTJmYywgMHgzN2IyNWY3MCwKLQkweDk3MjJiMmQ5LCAweDM4ZTJmZmQ2LCAweGI5ZWUwOTNkLCAweGNlNWI2NmYzLCAweGZkYTg3YWU3LCAweGQ1OWNmOGVkLAotCTB4ZWY5Y2I2YWYsIDB4NzM3ZmViNDcsIDB4ZDg3NTYxOWMsIDB4Zjg3YjgyYTgsIDB4MDUyNzY3MWMsIDB4MWUzOGMzMDYsCi0JMHhiNWVhZTdhNiwgMHgyNDNlNDFhYiwgMHhhNTk3ZjMwYiwgMHhjM2M2MGFmZCwgMHhkNWZkZmRmNSwgMHgxN2UwZTY5NCwKLQkweDc5ZjljODdmLCAweDE3ZTJhYWNkLCAweDJjNjcxMDFjLCAweDZmZDg1NGQ2LCAweDcxYmUwYWRlLCAweGVhNWZlZmNmLAotCTB4MTYxZDE1NzgsIDB4NGEwMzY3YmMsIDB4MWNhN2ZmYzAsIDB4NDg1ZDNhOWYsIDB4ZTQzNTc2ODMsIDB4NzY5MDkyM2QsCi0JMHhiNDgzZWMzNSwgMHgxZGM3N2MzYiwgMHg5MWQ4N2RiNCwgMHg1NzIwMDllNiwgMHg1ZmJjZWYwZCwgMHhmNjhkZjc4OCwKLQkweGEzMGNmZDY1LCAweGYzYTZlMjBjLCAweDlmNmFmYjM5LCAweDhhZmJiMWNkLCAweGNmYTI4ZWVkLCAweDBjOTQzZTgxLAotCTB4YWEwODQ3NjgsIDB4ZWQ0MWRjODcsIDB4YTg4ZDFhODYsIDB4MzFmODFlNGEsIDB4ODFiZGJiNDYsIDB4NDlkN2Q5ZjMsCi0JMHhjZjkxZTdlNSwgMHg5ZjUwNDc3YSwgMHg3ZGYwZTUzYywgMHhmZDliZTMwNSwgMHhkYTljZDIxMSwgMHhmMjUzZmUyZCwKLQkweDdhZjhjNWVmLCAweGQxZTM3NjZhLCAweGZmOWYyMDM5LCAweDBhZmRjZWM1LCAweDdhZjk4NjlhLCAweDllZjdhM2RiLAotCTB4MWRmN2Y0MTAsIDB4NzEwYmM5MjQsIDB4OTkyNWUyMzYsIDB4YjcxZTc0ODEsIDB4NGFiZTMwYjAsIDB4NGJmMThjMmIsCi0JMHhmN2U4N2NmOCwgMHg5NTFlZTExMywgMHgxZmI2MGU5MSwgMHg4MjI3ZTc0YywgMHhhODk0MzY5ZiwgMHhmODgzMGU1OCwKLQkweDlhYjAxZTQzLCAweDQ4N2JlYjBmLCAweGI0N2RlOGU4LCAweGNjZWRjN2ZmLCAweDExZDViN2VmLCAweDg0Njc1YzQzLAotCTB4NzcwN2Q5OTMsIDB4Mjc1YzU4YjksIDB4MGNkZDBlNDksIDB4MGJlOTNkZmEsIDB4ZGVmZDAxZTIsIDB4ZTEyMjk0ZjYsCi0JMHhiOWU0YTY3ZSwgMHgwZTM5ZjcxMSwgMHhmODJlMzA1OSwgMHg0MGY0MWNhYywgMHg0YWZkYmQ3YywgMHgzYTQyZGQ0OSwKLQkweDc0ZTM2YmZhLCAweDVjN2RmYmQ3LCAweDc4ODRhZjUxLCAweGIzMTc1Y2NhLCAweDIyMmQ5ZTI3LCAweDdlZGFmNzk4LAotCTB4ZmVjMjA5NGEsIDB4YWRiNjZhNTcsIDB4Y2Y0ZmQ2M2EsIDB4NGZhZGRmZTcsIDB4YTRlNDFlMmUsIDB4ODkyOWE4NjUsCi0JMHhmNzIzZjhjMCwgMHhkMjkyODM1MiwgMHgwMmZhODVlMywgMHg3NmM1ZjAzYiwgMHg0M2M1MTFjMCwgMHgwZjczZDVhYSwKLQkweDllN2E5N2Y0LCAweGNmOGI5YmMyLCAweGE0YWZjNDM1LCAweGY4YTY0ZDBlLCAweDUzODM3MzFkLCAweDllMjk3Yjg1LAotCTB4YzA2ZTg3YjUsIDB4MmQxN2JmM2MsIDB4NzZkM2ZmNzgsIDB4ZWEwZDNiYzUsIDB4MWVhOWNmZGIsIDB4OWIzZDA3ODgsCi0JMHhmOWMyNGExYiwgMHhmOWMxNjhiYywgMHhiZjZhNGY2YywgMHhmYjg1Mzk2YSwgMHg4ZTJjNDFlMSwgMHg2NDg4MzkyMCwKLQkweDJhNzkwNTRiLCAweGNmYTFlZjU2LCAweDdkOTkzYmM3LCAweGU0YzJkYWJiLCAweDYyYTlkYWE5LCAweDhlODE3MWZkLAotCTB4MTVlZjAwNWYsIDB4ZjllOTFjYTEsIDB4ZWNlZDZkMTcsIDB4NWJjZjQ3MWMsIDB4ZTdlMDQ1OWEsIDB4M2ZiYTY5YTQsCi0JMHgwZmMxMTExZiwgMHg3MDRlNTcxZiwgMHg5NGU3MWQ1ZCwgMHhhZDNhMmE4MywgMHgyMTc2NzM5YSwgMHhkNmNlZmZkYywKLQkweDJlMWYwOThkLCAweDI5ZjJjYzlkLCAweGVmYzJlZmJkLCAweGYyNzAxYzIxLCAweGJlZjgzNmZiLCAweDRmOWNiNWQwLAotCTB4ZDExNjkzYzYsIDB4NWZjN2RiNDYsIDB4MmU0OGRlMjQsIDB4OGM2YWY3ZGMsIDB4NWE2MzNlZGYsIDB4ZmVmMTI3ZTcsCi0JMHg0NGNmNzZiNSwgMHg4YzQ0NWM3OCwgMHgwZGE0ZjBlYiwgMHhhZTIwYTdhNSwgMHgwOTM0NGM1YywgMHg2NmM0YTlmOCwKLQkweGRjZjU4NzZhLCAweDlhYzRmNzBkLCAweGYyNzNjOWVlLCAweGU0ODcyYjc1LCAweGU4ZmRlNmM0LCAweGUyNDlmYjcxLAotCTB4NDc2ODhkZTAsIDB4YzA1ZTI5OTQsIDB4ZjZhNzBlY2IsIDB4MGQ0ZmQ4NTcsIDB4ZGJmMmY3NTAsIDB4ZjhjZjNkZTIsCi0JMHhhMGQ2N2U1OSwgMHg1NzAyMGU4YiwgMHg3NGZlNTBmZiwgMHhkYWFlN2NjMiwgMHhkM2IwMWI1MCwgMHg5ZmQ1NWY3OSwKLQkweDA4N2MwZmY1LCAweGE3OGFlNWZhLCAweGJlODA3YWQyLCAweGU5N2E3Mzc3LCAweGMwNzdjZWE1LCAweGM2NjQ5ZTVmLAotCTB4M2E2YjllNWYsIDB4MjczZWYzZTQsIDB4ZjJlODliOGIsIDB4ZmQwNzdjMDYsIDB4Yjc4MzkxZWMsIDB4YTQxZmRiYzcsCi0JMHhmMDFmN2FmYywgMHg0MTI3MGVlYiwgMHg1OTE3ZmE3YiwgMHg2NzIwNTliNiwgMHg5ZGZiMzhmYSwgMHhlNWNkZmY4YywKLQkweGY3Y2I1NTlhLCAweDA0MTJlZmMxLCAweGM2ZWI2NGJlLCAweDMxMTc1ZWM0LCAweDZlYmEyZTRmLCAweGFiNzgzMzI3LAotCTB4NTNlOWRhZDQsIDB4MjljNzZmMjEsIDB4M2E0ZTVlNjMsIDB4Y2IxNjM3M2YsIDB4ZmMzMTU5MmYsIDB4YWI1ZGYzYTIsCi0JMHgzYWRmZjk5MywgMHhmZWVjOTRmZiwgMHgyODRiOWUzMywgMHgwNmZhOTJmOSwgMHgzNzZhMjRiOSwgMHgyMTMzZmNlYSwKLQkweGIzN2RjMTEwLCAweDg5ZDk4NDA5LCAweDk5ZDlmZTY2LCAweDJlOGE3ZjgwLCAweGFkZTgxMmE4LCAweDk4NzNmYzRlLAotCTB4YmUyMjRmZjEsIDB4YjA0OGZkYTEsIDB4ZTdmOTlhMGUsIDB4ZTNiNzI3MTksIDB4MjVjZmYyMTIsIDB4NjU2OWUwMzcsCi0JMHhlZWI3Yzk1MywgMHg4ZGZhMzRlZiwgMHg3MmU2N2NmOSwgMHhiZTdlMjNiNCwgMHhlZjFjNjdlNywgMHgxYmRhOTViYiwKLQkweDRjNmY0MWYzLCAweDJmNDE3OGIxLCAweGJlYzhlZTUwLCAweDNiYmJjMjk5LCAweGI1ZDdiZjQ5LCAweDNiZWEwZjNhLAotCTB4NzY4N2E2MjQsIDB4ODdhOGFkODQsIDB4M2U3ZDM4NzYsIDB4YjI2NThiOGMsIDB4ZjI0NDc0ZjMsIDB4YjZmZTQwYjUsCi0JMHg4ZDRkOTdiNywgMHg3ZWZiMjdiZCwgMHgzOTIxOGZjZSwgMHhkODA0ZmEzMiwgMHgzZTMwNmY0NSwgMHgwMGE1MzUxOCwKLQkweDU5MjFiYzZlLCAweDE4NWU5OGYzLCAweDBjZDk1MjdlLCAweGQwYjI4ZmJmLCAweDkzODZmNDU1LCAweDc0MDY3ZmJlLAotCTB4Yzc1M2FjMDcsIDB4NjBiN2JjMTQsIDB4ZjUwNTMxZDksIDB4ZGY3YmFiZTMsIDB4OTNiODg1MmUsIDB4NzIzYTE3OWUsCi0JMHhjNWE1ZGJjZiwgMHhjNjdkZTE4MywgMHhmZDczNmY2ZiwgMHg2NTMxZDdhYSwgMHhlOWE1ZjQxZSwgMHg4NGQxZDg1ZSwKLQkweGJkZjMzMWU5LCAweDQ3YzBlNWFlLCAweGU2ZWQxZGY5LCAweDQ5NDM0ZWZiLCAweDkzM2QyZTJjLCAweDBlOWJiMmE4LAotCTB4Zjk1OGZkMzEsIDB4ODg1ZDcwODMsIDB4OTlkM2RlZjksIDB4NGZkMDFiOTEsIDB4NWY1ZGU1YjgsIDB4Mzk0ZjdiZmMsCi0JMHhkZmVmOTg3ZiwgMHg3N2M5M2FmYywgMHhmOTVmZTYxYSwgMHg5ODVlZjM0MiwgMHhiYWQ5NTEwMiwgMHhhZmFhNTIxZCwKLQkweDU3OWVmNzY2LCAweGU5M2YwMWU3LCAweDE0N2Y4ODcyLCAweDA2OGZhMTdmLCAweGY1ZGRlZTE5LCAweDExZThmNWYyLAotCTB4N2JlZWM0YWYsIDB4YmY3MDUxNjgsIDB4N2Q4NDk3ZTcsIDB4OThlYmUyMTcsIDB4NDBmNGM1Y2QsIDB4NmU5N2NhYzEsCi0JMHg1NTg3MzgwNywgMHgyZTgwMDc2OCwgMHhmOTk5M2JmZiwgMHgxMTIyYmZkNywgMHhjZGQwMWU1YiwgMHgzYTljNjEyYiwKLQkweDI3MjVhYjI0LCAweDg4Zjc4ZTg0LCAweGNlMDgzZTU0LCAweDk5ZTllZDc1LCAweDVmYzYwYzM0LCAweDVjMzlmMmU4LAotCTB4ZWQ0ODZmNjAsIDB4OTFiYmUxODcsIDB4ODE4NjBhNjMsIDB4NWQwZTc3MWUsIDB4MzVkNjAzZGQsIDB4NTcwYTZlMWQsCi0JMHgwNzY3MzZkOSwgMHgxNzVjM2ExYywgMHg3NDJjYmYzOSwgMHg3YWI4NzZjZCwgMHgyZjQwZWZiMiwgMHhkYzdjN2UzNSwKLQkweGZjZWJkZjA2LCAweDgyZmE2YTEwLCAweDVmMGM0MWYxLCAweGYwNzQxZjAwLCAweGQ0Mzc3MDg1LCAweGYxYTQzYzc1LAotCTB4ZDhmZmFmNTIsIDB4OTdmYmExN2MsIDB4ZjgwNWYyNWQsIDB4YzVlZmVlOGYsIDB4NzE1YzQzMTcsIDB4NzNkYTgyZjgsCi0JMHhkOWI5ZTFjMywgMHgyYzI5MGI5ZSwgMHhmY2ZjY2NjZiwgMHhiZTExNDcyOSwgMHhlNjA4NTVlZiwgMHg3NmJkOTA4OSwKLQkweGJlM2JiYmY2LCAweGJmMmY4YzE0LCAweGI2NjM2MWVjLCAweDA3M2M3NDdkLCAweDVjZWI5NTdjLCAweGY5MGU0Y2E5LAotCTB4MjM0M2RmM2QsIDB4NDM5ZmRhMDIsIDB4MDNiOGEyYTksIDB4YThkZWJjZWQsIDB4N2YxY2JkMjcsIDB4YzAyMGI4ZTQsCi0JMHg0Yjk4NWRmZCwgMHg2ODc2MGQ5YywgMHg2YmQ4MDdhNCwgMHgyMzkzYWQ0MywgMHgxZDNiMGYyMCwgMHg3ZWMxYjIxMywKLQkweGNiOGM3MDJjLCAweDMyYmZmOTgzLCAweGIwNWJlNTY4LCAweGFiZDJiZGE0LCAweDZhYWRlNWUyLCAweGViYTU3ZDg3LAotCTB4NWJiYzAzYzMsIDB4NWQ1YmZjN2QsIDB4ZDVhZTNmOGMsIDB4ZDAxMGY5ZDgsIDB4ZTg3MGIxZWIsIDB4MDk5MDAzZWIsCi0JMHgzMzIyMTBlMCwgMHhhODFkOTcyZCwgMHgxNDJkYzNjNywgMHgxYzAyZDc2ZiwgMHgwNGZiMGYxNCwgMHg0M2Y2MDBkMiwKLQkweDJiNGI0NTkxLCAweDY3YjAzYjAxLCAweGRiMzgwMjQ0LCAweDAzOTFmZTlhLCAweGUxYzlhNzcxLCAweDc4MDUxZmRmLAotCTB4NWJmYmViMjcsIDB4OTZmZWUzNWUsIDB4ZWRkNmRlZDksIDB4ZDBmZmRkMjEsIDB4MjI4OTI1ZWQsIDB4YTBhYmI3NDIsCi0JMHhhNzNjMDQ3ZCwgMHhiZGMwZjRmOCwgMHg0NWJlYjBlMCwgMHhmNTNlNzg2YywgMHg5NWVhNzNmMSwgMHg4OTY3OTcxYSwKLQkweDlmMzI2M2NlLCAweDE5YTQ0ZGM3LCAweDJlOTcyMmUxLCAweGU5NDcxZTVmLCAweDYzZTM5NTMzLCAweDQ5MTI2MWYyLAotCTB4NDI3Njg3Y2EsIDB4ZmRjMDE0YTYsIDB4NGM5MDI0MzMsIDB4MTVlMjk5YzcsIDB4N2MzMTI3YzgsIDB4NjMyOGQzNzMsCi0JMHhhNDI2ZmUxZCwgMHhkNWQzZjQ3NywgMHg2Mzc1ZTZmYiwgMHhmZmNlMjlhYywgMHg3ZWMzY2I0MywgMHg0ZGZjNmU3NiwKLQkweDNjMTczYjNmLCAweDkwMTg5ZmE2LCAweDk1MWRmZDYwLCAweDdiMDNjZWNiLCAweDJiMGUxZTE4LCAweDIzYjFkN2YxLAotCTB4NThjNzllNWMsIDB4M2NlMWYyNWEsIDB4ZmYzZGJlZTQsIDB4ZmY3Mzc1YzQsIDB4MDdiZTdmOWUsIDB4NTNlOGU0NzYsCi0JMHhjNjNjODExMiwgMHgyNzg2YTczMSwgMHgyOGViYmVlMywgMHhlZjRhZjkxNSwgMHgwNmIzZWFiNywgMHg0OWNmNjEwNywKLQkweDg3ZTg3ZGVjLCAweDE1ZGEzYzI4LCAweGNiMGQ5ZjAwLCAweGZlM2NjZWQ3LCAweGUxNzdmNDA0LCAweGYzNjI0NDk4LAotCTB4NWYxNTRiZTQsIDB4OTY4Zjg4N2YsIDB4MGZmMTdiZjIsIDB4ZDI5ZWNjMDksIDB4ZmJmMTBmZGIsIDB4NzhiOTc3YTgsCi0JMHg5M2QyOGU3YywgMHgxYWM0YzdmYiwgMHg1NDI5ZTc0MywgMHg3NDE3MjUxMywgMHhjOWNhNzVkMCwgMHg3ZTUyNTNiMiwKLQkweGRmYzBmYTY3LCAweDdlMWYzYTI3LCAweDU3NzQ5ZTRiLCAweGZiMGU3ZWE1LCAweDVlYjYyZWY3LCAweGMzN2YwMzkyLAotCTB4MzVkNzBjZjMsIDB4ZmQ4MTIzZGMsIDB4NDhhNjVkN2UsIDB4YWY3MTk4YjQsIDB4MWZhN2E5NTcsIDB4ZWJkOGY3MTMsCi0JMHgwN2JmZDkzMiwgMHgyYTYyN2I5ZSwgMHgxMTFlNzllNCwgMHgyYWFjNjUzMSwgMHg3Y2FkZTNiYywgMHg3MThiMzdhOCwKLQkweGYxOWJhN2NmLCAweDFlZjg1ZDdiLCAweDg4N2ZmODA5LCAweDU3NGRjOTliLCAweDhhYjk4ZmUzLCAweDQwMzVjOWYyLAotCTB4YzBlY2MyNzcsIDB4YzhlNTAxNDIsIDB4N2JmZGRmNGMsIDB4Y2I0N2EzZmUsIDB4NGVmOGM0ZTAsIDB4MWQzMzdmNDQsCi0JMHg4YzUzM2I1ZSwgMHhkMTVkMjFmYiwgMHg3YmI3Y2NjMywgMHg1NzAzM2NlOSwgMHhkOTdhZWZjMCwgMHhkNzdmMDA0OCwKLQkweDgzZjU4M2NiLCAweGViYWM0Y2ZlLCAweGY0ZDU1YWZjLCAweGYzYjAwZjc0LCAweGQ0OWQzZTc0LCAweGU4Y2RmMTgzLAotCTB4MjBmNDRmZGQsIDB4OTk3YTBlY2UsIDB4MTliODI2ZjEsIDB4NzVkOTc2ZmQsIDB4NjMzYmM0YmIsIDB4NjdmNDdkMmEsCi0JMHhhMzIxMGViYSwgMHhlNDMzNDgwNiwgMHg1ODczOTRkOSwgMHg4YTViYmU2NywgMHhmOWUxMDk3NiwgMHg2ZGY1ZTZmZiwKLQkweDI0Yzc3OGE2LCAweGRkNWRhNzUwLCAweDNhOGI3ZjRiLCAweGI5Zjc1YmJiLCAweDk1YTkxZDk3LCAweDk1MmMxZDYwLAotCTB4YzYzZDMyNTYsIDB4MWUxZDc4ZWQsIDB4NDJmZjlkMzMsIDB4NDRmZTExY2EsIDB4YzBmOTk5ZjAsIDB4NjhhZWU3MGMsCi0JMHhlYjg2YjI3ZSwgMHhmYjRmN2U4MSwgMHg3MmI5ZmVmNCwgMHhlODc5OWM2YSwgMHhkMDg1YjhmOCwgMHhmYmFmMzhmNSwKLQkweGRiOGU3MWViLCAweDRmZTdmZmM4LCAweGEwMTNmYzRlLCAweDk5YmM5MTM1LCAweGQ3NmU2NmU5LCAweDBjMjk0N2Y1LAotCTB4MDA2NTgwNTAsIDB4ZWUyMTkzZWMsIDB4ZDI4Nzk0NzQsIDB4NjBkMTBhOGIsIDB4OWRiN2JhNWYsIDB4Mzc5YjFhN2MsCi0JMHhlNDBhZjkzYSwgMHhmNjFlMTViNywgMHgyZGJmMTEyYywgMHhkZjEyMjhiYiwgMHg5M2JlMGViMCwgMHgwMDczMWYxYiwKLQkweDZhOTZlZGRmLCAweGY3ZjQ1ZTFkLCAweDUzMjRkNWE3LCAweGFjZmM0ZDNjLCAweDA3M2MxNmY4LCAweDEwMjE2MmRlLAotCTB4ZmUxNDliNWEsIDB4MTljNDAwZTIsIDB4Y2MxMjhlYWEsIDB4ZWYwZTJmMDcsIDB4M2QzZTAxMmIsIDB4OWZhMzM1MjgsCi0JMHg5MDgxNzZkNSwgMHhjZWVjNjJjNywgMHgwMzhkNzBjNiwgMHgzNGM2YjJlYywgMHg1MGU5OWU3NiwgMHg5YmU0MzEwYSwKLQkweDdkMzM3MTFlLCAweGRjZWM3OGRkLCAweGJiNGUyZDU0LCAweDc5ZjhjYzk4LCAweGYyZDJkMTNhLCAweGQ3NGIzZmU5LAotCTB4M2YwMGZlNTEsIDB4ZTMwYmE3YjgsIDB4ZWYwNTEzMjQsIDB4Yjc2MDY5ZWIsIDB4OWZlZWM2ZGMsIDB4ZjkxYTZiNmMsCi0JMHhiNzg1MWE3YSwgMHhkNDE0Y2VmNSwgMHhkNzFhOTMzMywgMHg4NGExZTNkZSwgMHgwYzNkN2QwOCwgMHgxNmNmYjc5ZiwKLQkweDdiZTg1YmJjLCAweGViMTdhYWE1LCAweGQxNzJmM2E1LCAweDRkZjkxYmVmLCAweGExOTNlOThmLCAweGZkMTk3YWZkLAotCTB4NTJlMjQ5OWUsIDB4Njc1NWUyMDksIDB4ZjAwMjg1MzMsIDB4MmQwOGY3MjcsIDB4ZjJmN2UwYWIsIDB4MzhkOGQzMDIsCi0JMHgwMWU4MTNjNCwgMHg5MzNiZTlmZSwgMHhkZmM1MGM3YiwgMHhmYWY1NTE3NCwgMHgyMDVkZmMwMCwgMHg1NmRmZjI2MiwKLQkweGNmYmYzYWVlLCAweGNlNTdkYjRhLCAweDczM2YzMDEwLCAweDA0OWIyNzkyLCAweDc0YTdmODYyLCAweGJhZjM4MjlkLAotCTB4MGM1MTljMzksIDB4Y2NiZDNkN2MsIDB4YzIyYzRlNzgsIDB4ZTUxOWM5ZWQsIDB4ZGQ4YzEyMGUsIDB4MjgzYzE1MjcsCi0JMHhlZGVjODdkNywgMHg1Y2VmZTJiNywgMHhlNjA0YzkzNiwgMHgwZGY5Y2JhNywgMHhjZTY3ZGY5YywgMHg2ZWY4NjFlYSwKLQkweGE3NzY2MTFhLCAweDcyMzc1NzJlLCAweGZiODFiYmY5LCAweGIyZjliN2NkLCAweDEzOTdlMzBkLCAweDgxZmQwZjY2LAotCTB4OTIwNDRmYjQsIDB4M2NiMzI3OTQsIDB4Y2RlZGE5YTIsIDB4MmYwZWRlZWYsIDB4ODA0N2JkODksIDB4OTA3MWJjM2UsCi0JMHg5NzE1ZWZjOSwgMHhjOGJlNDZhZSwgMHhjNzgwYmMxNCwgMHhmYjYzNWUyOSwgMHhlNzRjYTM0ZCwgMHg2YmYyNGQxNCwKLQkweDIwMzMwZmQ2LCAweGFjZWM0YTNiLCAweDMwN2Q3NDI3LCAweDIxOTQ0OWEzLCAweDg4YTMzNDFlLCAweDYyZWQxOWUyLAotCTB4OTVkZWRkYTMsIDB4OTQ5OTE4YmUsIDB4NTI1YzVmNDAsIDB4YTQzMzA0MWYsIDB4YjBmOGJlOTMsIDB4OGJlOTdiZWMsCi0JMHgzMmRiYTk1NywgMHgzNmY1Y2E4YSwgMHgyMWY0NmY1ZCwgMHg0YzZmNDA3ZCwgMHgwMDlmZWIxMiwgMHhlYmEzNmEzZSwKLQkweDFmMGUzNWE2LCAweDFlOGVlYmU5LCAweDcyYTUyODA3LCAweDBjZTA3YThjLCAweDc0OWUyZmNiLCAweDg2MDQ4YjMxLAotCTB4YTIwMWM0NzUsIDB4MjVkYTg0N2EsIDB4ZDJmNjM4ZGUsIDB4NjE5ZTc3N2UsIDB4NTdhYTIzZmYsIDB4YjkxMmVjNjIsCi0JMHgyNWRiODdmMCwgMHhhYTNkYTg5MywgMHhiZDdjMDAxNCwgMHhjMjUyYmUxMSwgMHg5MGE1OTZlMiwgMHhjM2YxMDJjOCwKLQkweDBlMzAyZmNjLCAweDdmNTEyNTU0LCAweGE3ZTdkNzE2LCAweGZmYTM5ZTk5LCAweGU0M2I1MjEyLCAweGU4YWY2Y2MzLAotCTB4M2MwOWU4NzEsIDB4OTdlNjYxN2UsIDB4MTZmMjNjNjgsIDB4M2E0MmUzMTksIDB4M2UwMjk0OWYsIDB4MTE2ZmZlNDEsCi0JMHgyYmEwOWY3MSwgMHgzN2M3ZDFiZSwgMHgxNGM0NGJmMywgMHg1ZjkyZWExZiwgMHg1NzdkZGNiOCwgMHhlNmVkMzk3ZSwKLQkweGE0ZmVhMWYxLCAweDQ0Zjg3NzdmLCAweDVmOWQwZmU3LCAweDliY2RlYmNjLCAweGEyNTEzOGE2LCAweGIwOWZlNmY1LAotCTB4YmM0Y2Y0ZGUsIDB4NDgzZWJjZGUsIDB4OTVkZWJkNDYsIDB4OTkyZTczNWQsIDB4NmU4OWY5ZTksIDB4NzU3NzNiMGYsCi0JMHhkODI3MGNlNSwgMHg1OTkyMTMzNSwgMHg2ZWJlODE3ZSwgMHgxYjVkZTM0NSwgMHhkZWJjOWYxOCwgMHg3ZDgyNDczMiwKLQkweDFmZDAyYWE2LCAweGQwNzQxZGI5LCAweDVmM2FjNWUzLCAweDYwMjc1YjJlLCAweGQ3MzI3NDdjLCAweDJjNGRhZDVmLAotCTB4NTEzNTU4NWUsIDB4OGZkMWMyMGMsIDB4NGY2M2YwOTIsIDB4NmZiYjNhYjAsIDB4MTRlZmE3NDYsIDB4ZDI0NTI3Y2UsCi0JMHhmZjdlMDkzZSwgMHhlMGFmMjZmNCwgMHhjNjkzYjg4NSwgMHgzNTUzOGRlMywgMHg2NjhkZTMwMSwgMHg0NGQ3YjViZCwKLQkweDFmYmNlOWY3LCAweGJiZTBiZmYwLCAweDIwODRjYTliLCAweGZkNjY5M2Y4LCAweGIzMjJmZDM2LCAweDUzZDkzYTJmLAotCTB4Y2NkODlmN2MsIDB4NzMyNjU3MmYsIDB4ZjQ5N2QwZmQsIDB4MTVkYTU3ZmQsIDB4ZGRiZjkyYTMsIDB4ZWZiZmQwYWUsCi0JMHhiMDY1Y2U4YSwgMHhjMGZmYTBhNiwgMHgzYjAxOTNlZSwgMHhkZDdjZTgxZSwgMHgyZGZiMDk0NSwgMHg0OWRhMzY0OSwKLQkweGZjMTRjZTE3LCAweGZlNGY3ZDBhLCAweDNhMWVmOWJlLCAweDFhYmE3Y2YzLCAweDE3Zjc1MGJmLCAweDhmYTBmZmI4LAotCTB4Y2VjNDgzN2IsIDB4YTdkNzliZjcsIDB4ZmUyM2Q3MmUsIDB4Nzc1ZTk5OWQsIDB4YjVlMzFiMjQsIDB4M2Q3NDVkM2EsCi0JMHg1Y2VmMDlkYywgMHg1YmEyMjc0ZiwgMHhkNzVhN2E1NywgMHgzZDZhZmY4NywgMHhhZmFmZjdhZCwgMHg2NmI4ZmEyMywKLQkweDdmYzg5ZGZkLCAweDlhZjFmNWQ0LCAweGRiOGMxNmNkLCAweGZhN2VlNzhjLCAweGZlM2YxZTc4LCAweDdlZTdiNzA1LAotCTB4ZGZmY2NjOTksIDB4MTY2ZDJmYjYsIDB4MzI0MzZmNTgsIDB4ZWMwYjI3ZGIsIDB4NjlmYzYyNzMsIDB4MDc2NjVlZmIsCi0JMHhiZTJhNWNkOSwgMHg2MjIwYTBmNywgMHgxMWMxZTQ3YywgMHhkNGQ3ZDQxNiwgMHhmMzA2MWEwNywgMHgxOTA5OGE5NiwKLQkweGJkYmRmYjA0LCAweGJkNmY3ZWQ4LCAweDdkNDcyOTE0LCAweDljMDg5NWVmLCAweDhjNWQxM2QzLCAweDFmZGMxZTFmLAotCTB4N2ZmYTFkYjgsIDB4OTY4MTkzZjAsIDB4NDc0ZjhjMWEsIDB4MWE1ZWMxOWEsIDB4N2VlMTIwNTksIDB4YzU1NThhNTksCi0JMHg5MzZiNzY3OCwgMHg2YTNiZWYxNSwgMHhmNmJmZmRkYiwgMHg5N2NmZDBjOSwgMHhlNTJlMGJjNCwgMHg3NDZiMjZjMSwKLQkweGM3ZjQwYWJmLCAweDA4ODhmMTI0LCAweGVkNmQxY2Y5LCAweDFiMDNlZjA0LCAweDAyNTIyYjM3LCAweGQyNzhkOTdlLAotCTB4ZmZmZTAzNWMsIDB4YzFlNTg1MTgsIDB4NmNkNGYxOWIsIDB4ZmJjY2E3NWEsIDB4MmM0ZDI1NWQsIDB4YzVjNGE1ZmYsCi0JMHhlZDNhNWZmMywgMHhlZmUzMzQ1NywgMHgwNDkwNGYyNiwgMHhiY2U5MGQ2ZiwgMHhjOTkyZjE1ZiwgMHhlZmQ4ZTlkZiwKLQkweGQxNWZiMDRhLCAweDc3ZDFmNGM4LCAweDAzMThhZmRkLCAweGRlN2NhMDM0LCAweGQ3MDFjYmE0LCAweGJlYzEyNDRmLAotCTB4ZWQ4NTc2YzUsIDB4Y2RiZmI1NzcsIDB4Njk5M2QzZWQsIDB4NWQ0NmUzNzEsIDB4ZGVlYzVmZWQsIDB4N2RjMWE0OWIsCi0JMHhlZmY5ZGIyMywgMHhkYmRlZWM2YywgMHgxM2YzNTM0YiwgMHhkMmRmOWZiZiwgMHhkOGQzMGM1ZSwgMHg4NGIzN2Y1ZSwKLQkweGJlM2M3M2Y5LCAweDlhMGI4ZDFiLCAweDkwZTljYmYxLCAweDZiNDgxZjY4LCAweGY1MDQxY2Y0LCAweGU3ZGY3MDk1LAotCTB4YWFlMThhODIsIDB4NWQ0ZjhhZWYsIDB4NGYxZmI2NmUsIDB4YjdlZjgwZDIsIDB4MDFhNWVmMWYsIDB4ZGM3OWZiMWMsCi0JMHhiY2Y1NmJkMCwgMHhlZWMyZjYwNSwgMHg3MDkyZTc2MywgMHg1NGQxNTgzZiwgMHg1M2RhNGZmMCwgMHhhZTc2NWU2YywKLQkweDI4NDFjOTkyLCAweGY2MTA2MDZiLCAweGVmZjBmN2FiLCAweGJmYjUyN2I2LCAweGVjNWE3NTc5LCAweGJmZGIwZTdlLAotCTB4ZDdkOWNmZDEsIDB4NDdmMzA0MjgsIDB4M2Y5NjE2MDIsIDB4MGNkZmM2NjIsIDB4M2I5MzhmMGYsIDB4MjI3NGZhZjEsCi0JMHhiYzYyYTlhNywgMHgwOTZmNTAzYywgMHgzZjMwNTdjYiwgMHhjZTRjM2M5NywgMHhmZGZlMmZmZiwgMHg4MDAwNjY4NCwKLQkweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLCAweDViYmRmZjAwLCAweGQ1NTQ3ODBkLCAweGRjZWVmZTk5LAotCTB4ZjI2Njc3YjksIDB4ZmM5OTk5MzMsIDB4NGRjMmZlMTAsIDB4MDA5MDgxMDIsIDB4N2UxMDA4NDMsIDB4NTAyMDIxZDQsCi0JMHg0NTQwNjQ3ZSwgMHgwNDNhYmFlYywgMHhhMWJmOTA4NSwgMHg1NmQzZWJiMSwgMHg0MTI2ZTFmNywgMHgyN2QzZTA4YSwKLQkweDY3OTZkZDZkLCAweDU3MDY3ZGI1LCAweDNiMTI1NGI2LCAweDc3MDcwNGMxLCAweDA4YTAwZWMyLCAweDgwYTBkYjU0LAotCTB4MTFkYWUzYzIsIDB4MjQ4NmEyMjksIDB4ZWM1NmJiMGQsIDB4M2JlZmRkNmUsIDB4NjY2NGRjZTcsIDB4ZWNmYTVjMTgsCi0JMHhmODcyODM3NiwgMHg5Y2Y3MzllZSwgMHhmYmRmN2NlZiwgMHhiMzczOWRmZCwgMHgzMzAwMDFkMywgMHg2ODc3NmUwMSwKLQkweGRiMDBkOTAwLCAweDhjODAyZjY0LCAweGRlMDgyMGNmLCAweDE2ZTkxYmY0LCAweGQzMDVkNjA5LCAweDdhZTc3Njg4LAotCTB4YTlkZmUwYTcsIDB4Y2UxYTZiYTYsIDB4MmNiMGVmOTEsIDB4N2E0NDhmMzUsIDB4NDJkMWU5ODYsIDB4YzYzOWU3YTQsCi0JMHg2OTllN2E3MiwgMHhmODA2ZTI4NiwgMHhiYTViYzg2NywgMHhjZmMwMGU2OCwgMHgwMzg3NWU5YywgMHhkMjU3ZTlkNywKLQkweDAwMTk0ODc2LCAweDY1MDQ5MzY2LCAweDUyOGVkODU5LCAweGVjMzczODAzLCAweDY1YWMwMTUyLCAweDNjMWRhZWI4LAotCTB4YWE0MDE3NGUsIDB4ZDIxYjc0MDUsIDB4NTRmYjM2MGQsIDB4MWU5NWYxYTAsIDB4ZDExYTRiNmQsIDB4ODdjNDNkMDAsCi0JMHhhNTAzOWEzOSwgMHhkMzM2YmVkOCwgMHhiZTAwYjMwNCwgMHhhZGMxZmI0ZCwgMHgxZWY4YWFhNCwgMHhjNWE4ZmZiZSwKLQkweGZiODFjZTM3LCAweGVjNDZiN2FiLCAweDFmZjYwMTVhLCAweGE0MDQ3M2JhLCAweDZjMWQ3ZWQxLCAweGNmMmYyNWJmLAotCTB4YzYwMjg1Y2IsIDB4MzNmZmUxNTcsIDB4ZjhjOTY1NWYsIDB4NzVmMGE2ZGEsIDB4MmM5NDBmN2EsIDB4NjRiZjVjMDQsCi0JMHgxYTVmOGExYywgMHg1OTk5NGZkNiwgMHg0MTZkY2Y2MywgMHhmNDlmM2QwMCwgMHg5MDk1YzllMCwgMHhlZWFhNzE2ZSwKLQkweGNlMzRmOTlkLCAweGI2ZjI2N2QwLCAweDIxZmQ0MTQ1LCAweDY5YWE3MjVmLCAweGNlNTFlOTBiLCAweGMwZTk2ZDMwLAotCTB4ODk4NzRlZjYsIDB4YWM1OGJmY2QsIDB4Yjc5MDMwMDMsIDB4OGUwZGY1MWEsIDB4NTMzNWJjODEsIDB4OTZmYTRkMzgsCi0JMHg0ODgxYjJlNSwgMHg5YjdmNTIzOSwgMHg4NzFlN2VlZSwgMHgwZjgxOThjMiwgMHhkZGZhNDcxZSwgMHgzYmRjNGEwNywKLQkweGMyOTBiZTkxLCAweDUwMmViMWU1LCAweDdhNDUxMmQwLCAweDM2MzAyNWJhLCAweDlkMzk3YzgyLCAweGY3YzkyZjNlLAotCTB4MDRjMDk2OWIsIDB4MmRiNGE3ODYsIDB4ZTRiZjM0ZTksIDB4Y2EwZWY4MDEsIDB4M2QxMDQyNDMsIDB4ZjE2ZWZiODAsCi0JMHgwMjE2YTY4MCwgMHgxY2U3ODA4YywgMHg5MDAwNGI5NywgMHgzMzJhZjgyYiwgMHgyNTYwYmFkOSwgMHg4NzM3ZGViOSwKLQkweDE3NThkNWNiLCAweDFjODU2ODY1LCAweDNmODJhN2U0LCAweGY1YzBmODM3LCAweGMxYmViNDdkLCAweDMwMWYxMGNmLAotCTB4MTUzOTcxYzYsIDB4NDg1N2NmZDgsIDB4ZDMzY2QxZjcsIDB4MGEzMjFlNTAsIDB4ZmZmM2Q3MDUsIDB4YTBiMDE0ZGUsCi0JMHgzZmY4ZmRmYywgMHgzMjVmMmZkMSwgMHhjOTg5NzQwNSwgMHgyY2ZkNmQzZCwgMHgzM2FkODhmNiwgMHg5OTY2YWRlNywKLQkweDlmZTNhYjMxLCAweGVjZDQ0YzU5LCAweGJiNTQzY2E3LCAweGY3NDhlYzAyLCAweGFkNDYyZjk4LCAweDM3ZjYxZDYyLAotCTB4OWNmOTFjNmUsIDB4N2Q5ZmRlMjcsIDB4OGQzMGI3YzIsIDB4YzdlMmY3ZGEsIDB4ZmZhNzgzY2QsIDB4MTVmYmUzMjAsCi0JMHhlNTAxOTAxMCwgMHhkMDlhMjczMiwgMHgzMWZlNWExZiwgMHg0YWVmM2ZjZCwgMHg3N2JmZjNmYywgMHg3ZGIxNjdhNCwKLQkweDVmNTE4MjhkLCAweDc3MjI3ZGIxLCAweDk1YTM1ZWI4LCAweDY2ZjgzN2FmLCAweGQzZTEwNjQxLCAweGEyZDk0NjZjLAotCTB4ODY0ZDU1ZmMsIDB4YTJiZjZjMGEsIDB4M2EwMDNiOWYsIDB4MGIzOGUyYjcsIDB4NTZhZGMxYzAsIDB4ZTMzOTRlZDYsCi0JMHg4NGViNDBkOCwgMHgyNjkwMjJiNiwgMHgzNWJhYmMwMiwgMHgxZDg2YjU5NywgMHgwZjAzMzk0ZCwgMHg3NTk4ZDRjMSwKLQkweDM5MGRkZTA0LCAweGU1YzdiZTBlLCAweGU5M2EzZDM4LCAweDU2OTFmM2E3LCAweGQwMTAyODRlLCAweDU3MzBlNTg2LAotCTB4NWQxMDZiYzgsIDB4ZjA3OWU5MDYsIDB4NDc1YjlhNGEsIDB4YmJjOWQ2N2EsIDB4NGI0ZmIyNjUsIDB4OThiNDA5YWUsCi0JMHgxNGI0ZDlmZCwgMHhkMzBkMjZkMCwgMHg3MTVjOTNhOSwgMHhiOGY0MmNiNCwgMHg5ZTdmNjZjZCwgMHhmNGY3NDJlMSwKLQkweDMzM2FlMmU0LCAweGVlZTkzYWM0LCAweDQxZjM3MTUxLCAweGU4YzRmZjAwLCAweGUyZDc1NWYzLCAweDY3ZWUxMjEzLAotCTB4MGFmNTVhNDYsIDB4NDU0NjU3ZGEsIDB4ZTVmY2RjNDEsIDB4YmJjYmM2NmYsIDB4MDkxZWJjMGMsIDB4OGZiZjc2NWYsCi0JMHhiM2ZiZTNmYywgMHhjYzdmNjBjZSwgMHgyYjQ4OGFmOCwgMHhmYmM1NDdjMywgMHg1ZWU3Y2ZmMSwgMHg2ZjNiYTc4YSwKLQkweGM5OWJiN2E2LCAweDc0ZmVhNjEzLCAweDJlNWZkNjdlLCAweDVlMjdhNzRmLCAweGUzNGI5OTllLCAweDhkZWQ5OWU1LAotCTB4NzU4OGU3OTcsIDB4ZTkxYWYyZjEsIDB4ZThjNzk3OGIsIDB4ZmQ3MWM5ZWEsIDB4YzU5NGI3NjMsIDB4MzNiZWUzZDEsCi0JMHhiZTdjNmUzNywgMHgxNzQ3MTk1ZSwgMHgzNzE2NThlZSwgMHg5YWViNDI3ZSwgMHhlZWUyN2EzOCwgMHgyZjhkYzY2ZiwKLQkweGY1YzU1NDBlLCAweGY5YWJlYzk3LCAweDI1M2ZmNDhiLCAweDllMzcxOGQ4LCAweDFhZmE2Y2M0LCAweDdkMGI0ZmZkLAotCTB4YmZiZDZlMmYsIDB4OWRmZmZlOTYsIDB4Y2Y3ZThmZjQsIDB4N2E0NGJmZDAsIDB4NDJmYTQ5OWYsIDB4MWMzNjU5M2YsCi0JMHgwNmI4OWM5ZiwgMHhmODY3NGJmOSwgMHhkYTEyZWI4ZCwgMHhlOWE5NWVhNSwgMHgwY2JlYmNjNCwgMHhmN2Q4MmRkYywKLQkweGM4OTVlYzhjLCAweDUxNDY4ZGJmLCAweDZjNmZkMDliLCAweGY5MzU0MTMzLCAweDRjOTgxZmZkLCAweDg2ZDM3OTBmLAotCTB4OTRlNGRjZWQsIDB4YWFjZmZjZDgsIDB4MTRiOGE2NjAsIDB4ZTk0ZDZlM2IsIDB4NGRhMzM4ZjAsIDB4NzhkODlhNzcsCi0JMHhkMzdlZGZjMywgMHhkMTQ0YjVhMiwgMHhiOTk3NGU5ZiwgMHg5YjNmNDUzZiwgMHg3MDdmNDRlZSwgMHgyMTQyN2E0MSwKLQkweGU5NjRhOTM3LCAweGM1OTRhZjhhLCAweGQ4YmM4NzlkLCAweDZhNGIyMTNhLCAweGQ4NjMzNmM0LCAweGExNWY2YmJmLAotCTB4ODFhODJlNTIsIDB4ZmUyMTNmYmQsIDB4YmRlZWM5NGYsIDB4NDg2ZmZmYzgsIDB4MTc0OTIzMjAsIDB4ZWYzZjE2NmUsCi0JMHhhNjk2ZmMzNywgMHhmODYzMzg2NSwgMHhlMjMzNGMxYSwgMHhmMTQxOTZhZCwgMHg0MmUxZjA3MywgMHgzZmNlZDdlNiwKLQkweGY1MGI0ZTg4LCAweGZiZTU1ZTdmLCAweDExNWZjNjMxLCAweGUxNTNlZDdlLCAweDlmYzk3YWQ3LCAweGFiZmI4NjU5LAotCTB4NWQzOGZjZjcsIDB4NGZjZTc5YzMsIDB4MThjMWE1ODIsIDB4MzkwYjE1MzksIDB4MmMxYzE5ODEsIDB4M2FlM2NjZWUsCi0JMHg0YmIzNTBiYiwgMHhkZmYzODhkOSwgMHhhMTZjMmVmNywgMHgxM2ZiZWU3NSwgMHg2ZjdkODk2YywgMHhmZTYxNTNiNiwKLQkweDY2NTNiNjcxLCAweDcyNmM1YWVkLCAweDMxNmJjZTUxLCAweDE4Y2IzOWE2LCAweDVkYjA5MTFkLCAweGIyMTQwMjc1LAotCTB4N2NiZWQ1Y2IsIDB4MGVmMjg0ODUsIDB4ZTE3NmNmYjgsIDB4ZDE0ODBiOTIsIDB4ZTAzZGRlZjgsIDB4OWZmZmM4NTUsCi0JMHg5ZDNlYjA3YiwgMHhmM2NkMGRjNiwgMHgxMTc3MTNjNiwgMHhhMmEyZDczZSwgMHhkNzc5MmYyOSwgMHhlODM5MmJhOSwKLQkweDkzNmUwNjBmLCAweDc1YzQ5YzU4LCAweGZiZGNmNGFjLCAweDI5MjdlOGMwLCAweGRmMDM5Y2JlLCAweGFmYThiM2Q1LAotCTB4ZjM2NmUwMzUsIDB4NzIyMmYzMTksIDB4MDVjY2ZjZTMsIDB4Mzg5OTIyMTUsIDB4MTJjMTdlOGYsIDB4MzQ3YzhiZDgsCi0JMHhmYTgyNWU1MiwgMHhjMTFlZWM2OSwgMHhjZDdmNWZlMiwgMHg4MjdmZGIxZiwgMHgxZDFhMWVlMywgMHhmYWYxNGIxZCwKLQkweDhhOWZjZDQyLCAweGVmZjdjZjQ4LCAweDdkNDM0MTk2LCAweDc3YzUzNzdlLCAweDkwYzBlMTE3LCAweGFmODdmOWMzLAotCTB4YzYzZjUzYTUsIDB4ZDg2N2E2NWQsIDB4NjVlZjcxNmYsIDB4ZGVjZmRiZjIsIDB4NzNhZGM2MzMsIDB4ZGU5YmI4MmUsCi0JMHhkMDE0MGE4MywgMHg2N2YxMWI5YywgMHg0OTY4MTRiNCwgMHhlMDZhMzUyZSwgMHgzZTQzZGZlNywgMHhlNmMyOTRlMSwKLQkweDU5YjJmMDMzLCAweDVmMzFhNWUwLCAweDk3OGIxMTFiLCAweGJjMjFmNGM2LCAweDcxYWI3Y2IwLCAweGE2ZWNjY2FmLAotCTB4MDAxNmRiYjEsIDB4ODE1OWNiOTQsIDB4ZWJmZWZmM2IsIDB4MjM0ZjdkMmYsIDB4MWYzZGU3ODIsIDB4YzQzNDZlMjEsCi0JMHgzNzExZWZjOSwgMHg4ZmJkYzYxYSwgMHgzZjQ0MzcxMSwgMHg4ODZiN2IyYSwgMHhmZTllOGZkZiwgMHg3OWEzZWVjOCwKLQkweGJlMzViOWVmLCAweDczODFhNWZiLCAweDNkZjI0MzdmLCAweDA4M2VmMWM5LCAweDVmOThlNzgzLCAweDI4ZDYyY2VmLAotCTB4ZjA3ODViYWYsIDB4ZWJjYTM5ZmEsIDB4OWEyZDNhMWEsIDB4Y2VhYmU5MDUsIDB4Njk2N2YxZTgsIDB4NjgwOTIxZmMsCi0JMHhjNmM0NDM3YywgMHhhNzQzNTU5YywgMHg3ZjYxYjAxNCwgMHhmYjYzYTg0ZCwgMHhkYTZiYTQ2OCwgMHhkODUzOTc1NiwKLQkweDcyMjFkYmYwLCAweDkwMWZmNTA3LCAweDdmZDhjZDAyLCAweDdiNWVhYjc5LCAweGYwYjg3NTA5LCAweDY5OTdlYmQ1LAotCTB4Zjk1N2JlZGUsIDB4ZWFiNjU3YmMsIDB4OTAxM2NjMWIsIDB4MDNmZWIwM2UsIDB4ZDNhZWFmOWEsIDB4NmZkNDM2MDIsCi0JMHg4ZWEyMzM5ZiwgMHhhNDNhZjVhNiwgMHgxZDU3YWQyMCwgMHhmMzRhYTFmYywgMHg3YWIwYmY1NywgMHhiNTM5YTUzYywKLQkweGM2YWE5YWZiLCAweGJlYmZmOGM3LCAweDBkNTVhNzgzLCAweGY5ZGQ1NGU1LCAweDVjNjJjNWMzLCAweDAxNWYwZjM5LAotCTB4ZmVjNjM3NjYsIDB4MzY5YTA3MzcsIDB4MmVlMzYzOTgsIDB4N2IyNzViZmUsIDB4MmRmNzdlMTIsIDB4ZTE3NWZmMjEsCi0JMHgyNzEyMTZjMiwgMHg2N2FlOTVmYSwgMHg3NjU3ZTYyNSwgMHhiODcyYmYzMywgMHg4NWZlZGZmZCwgMHg4YmY0M2JkNiwKLQkweDI4MWI4NDA5LCAweDgzNzkzNWJmLCAweGIxNzE2NzU3LCAweDU3MDNhYzQxLCAweDllYTk1MWRlLCAweDJlNTRlODY5LAotCTB4N2M2NWU3YzcsIDB4NzdhNzM1ZmMsIDB4ZjkyNjczYWYsIDB4ODViNDk4NTUsIDB4NzlmMTNiZDUsIDB4MjU5NDBlZTIsCi0JMHg3ZTdhZTFlNSwgMHgzOTBmYjMwYSwgMHg4ZjVkNDA2ZCwgMHgwNjlmN2NmYywgMHhjNzY2M2YyMCwgMHhmNDg1NWE4MCwKLQkweDU3MTg5NzBlLCAweGNkZWMwZDYwLCAweDNlYmY5MWJmLCAweDY3YWQ5OWE3LCAweGFjNWYwMDJkLCAweGNmZGEzMGRmLAotCTB4ODJiMWZmNDQsIDB4ZDUyOGQ1NGYsIDB4OTUxNWRhMTcsIDB4ZjkxMGRiNzAsIDB4N2Y5MGQ1NDQsIDB4YzVjM2U4N2YsCi0JMHg3ZGVmMjQ5ZSwgMHg2Mjk1ZmMyMiwgMHgyOWVmNTZmMiwgMHg0NjhmYjYxZiwgMHg3MTRhMzlhOSwgMHg0NGQwZjFhYSwKLQkweGQ2N2E2NzRkLCAweDJlYmY4Y2EzLCAweDU4ZmI0NjliLCAweDU5OTNmMDc4LCAweDNlZjk5OGQxLCAweDU3OGM3YzQzLAotCTB4NWY4NmU5ODYsIDB4MjE1NTM4N2QsIDB4ZTFmY2JkYjksIDB4Y2M3YTczNTQsIDB4YWFkMjcyM2UsIDB4ZTBmOTQ5MDMsCi0JMHhiYjQ5ZTJmMSwgMHg1YmFkMGFmNywgMHgzNWEyZDA3ZiwgMHhkY2RiN2MzMywgMHgzODc3YzIxMSwgMHg0NDY2OGRkNSwKLQkweGNiOWI1NmY4LCAweDNmN2RmMTYzLCAweDJjMjFiYmUzLCAweGQwZTkxMWJiLCAweDZiZWQ1YTEwLCAweGRkZDNlMzYyLAotCTB4YjQzOTA2YTQsIDB4Yzk5YzI3NDAsIDB4MjNjMzJmMGUsIDB4MzdhZTI3ZmMsIDB4ZmUzMGUyOGIsIDB4NzU2YTNmYTAsCi0JMHg3ODQ3N2VmYSwgMHg1NWU5YTczMSwgMHhkYWY4OThlNiwgMHgzNWU2OGE2MCwgMHg1ZjNmYTQ0YiwgMHhmYjE4ODJlYiwKLQkweGFkNzRkMzkzLCAweDk5ZTQ4YjM5LCAweDYxYjU5NmU5LCAweGFlMjYyOWZkLCAweDZhMmQzZTk3LCAweGRiMWM1MTc3LAotCTB4YmQ5MWYzOGEsIDB4OTNiMTNlNDQsIDB4MzY4N2I3ZmMsIDB4M2JlZWM5NTgsIDB4NDdhZTBlOWMsIDB4NDgxY2Q3NTUsCi0JMHg4NzdhMDliNywgMHhiYjI2YWRlYSwgMHhjMjkzOTFkYSwgMHgyZTMxYjVlYiwgMHgwOWZmZWY4NiwgMHhhZjY0N2RhZiwKLQkweDNlMDI4ZWI4LCAweDA5Zjc3ZjU2LCAweDA1OGRmNWJjLCAweGY3Mjk3ZmU2LCAweDk0Yzk5YzIzLCAweDE5OTIxNWVmLAotCTB4Y2UzNDFjZjksIDB4YmRhYTZhMWYsIDB4ODc5NzZiMTQsIDB4N2YxMzczZWUsIDB4MWY3ZjBhNGEsIDB4MTM1ZTM4NzIsCi0JMHg3MTc1Y2RkNywgMHhhYTY5M2Q5YywgMHgxMzEwNWQ2YSwgMHhlNWM3MTM4NywgMHhjMzk5YjhkMCwgMHhjZWIzMDA3MiwKLQkweDY5NzAwMWNlLCAweGZlZmMzMjRmLCAweDc3Njk1OWMyLCAweGRlNWRmZTkxLCAweGNkODdlNDQ5LCAweDUxZTExOGM0LAotCTB4ODFmMjkzNTMsIDB4ZDk1Y2IzZTMsIDB4MmU0ZGUzYzMsIDB4NTU0ZjViMDcsIDB4ZWI5MjBlN2MsIDB4YWQzOTM5N2YsCi0JMHg2NzI2NWVhOCwgMHhlYzhkNmMzNCwgMHgwNTdmNjg3OCwgMHg5YjNiNTI2YSwgMHg5MWRlZjgyZSwgMHhjNGY3YWYxZiwKLQkweDM4YzRkMzcxLCAweDU2ZTdhNGM1LCAweDY1ODc5ZjExLCAweGRhZmQzNzY2LCAweDMxYmZkMzAwLCAweDlkNzIzZmFlLAotCTB4ZWQ3YzNmZWIsIDB4NzlkOTBmMmUsIDB4Y2Y4NjVhZmUsIDB4NWM1OTdmNGYsIDB4YmJjY2M3MjYsIDB4ODUzOTU5Y2UsCi0JMHgxMmU3OTNmNiwgMHg1Y2Y0NTA3OCwgMHgyYmE0N2JlMiwgMHg3MzNmMWY3ZSwgMHg2MmI4Njc3YSwgMHg0YzYwMWZjZSwKLQkweDA0ZTEyZGQ2LCAweDE2ZTA3ZDQ0LCAweDgzZWIwZWYxLCAweGI1N2M2NjQ5LCAweGU0ZGM1MjFmLCAweDFlNDQzYmRmLAotCTB4YzMyZjA2NmMsIDB4MzViODJhNDksIDB4ZTA3YWY3NTYsIDB4N2Y3MGYzZDcsIDB4YjA0YzQ3MmQsIDB4MWQzYjQ5MTMsCi0JMHhmMzYyOGM3MiwgMHgwNGQ4YjA3OSwgMHg4YTMyNmNiYiwgMHg0YjE1OGYwOCwgMHgzMjMyMTJiZCwgMHg5YWUyNWZlYywKLQkweGM4NmQ4ZGY2LCAweDY1ZDAyMWVmLCAweGQ3YzczZjVlLCAweDNjOTFlMGMxLCAweGZiZmQ2YzUyLCAweGQ1YWRjZDVhLAotCTB4NWFmOWNmYmYsIDB4ZWIxM2NlYzgsIDB4ZDMxMTM5ZGYsIDB4MTZlMzM1N2EsIDB4OTZkN2UwZWEsIDB4MWY4M2FkMjUsCi0JMHg1M2Q3YzU3NCwgMHhjNjM0YmIwZiwgMHhjNzEyNzA1YywgMHgxMjkyMzA2MSwgMHgzMDI4ZTdlMCwgMHg4NDVjNzA4MywKLQkweGVkZmE4NGUxLCAweGE1NTViYzM5LCAweDI3NTY0OWJlLCAweGY0ZDczM2M2LCAweDQxOGM3NmE3LCAweGU1Y2YxYjNiLAotCTB4ZmQwYjc0NDAsIDB4OGRmM2NhM2IsIDB4YjVmYWJhYTEsIDB4NDRmZjJjYzksIDB4N2FiMzI0N2YsIDB4NDk3ODIxZDIsCi0JMHhlNjM5NWZkMCwgMHg3MTE4YmM0OSwgMHg5MWU1ZDVjNywgMHhjOWRhNWZlMywgMHhiNGJiYjZmZiwgMHgwNjdlOTJkZiwKLQkweDc5NDBjYTRlLCAweDU1MWNjZDljLCAweGViZWM0OTlkLCAweDk4YjNlNTIwLCAweGUyZTRiYzhmLCAweDkyMWFkNjdlLAotCTB4ZGY1YzAxM2MsIDB4ZTI4MDc5YWEsIDB4OThlMWNkYmMsIDB4NTlkOGM3MmUsIDB4ODVjNzhiOTUsIDB4ZjIxN2UzZmEsCi0JMHhhZjIzY2M1NCwgMHg5N2I0ZGU5YSwgMHg1ZDc1ZmNlMiwgMHhjYzc0ZWMwNywgMHhlZGZlN2I1MywgMHhiNDE0NzQ1OSwKLQkweDRlZGJlY2M4LCAweGI0YTlmYjc2LCAweGY5NGFjOGE3LCAweDU0YzA4ZWUxLCAweDUyMzA0ZjkyLCAweDc3NzE0MTkwLAotCTB4NzM3NDE5OGEsIDB4ZjhmYzhkZDksIDB4NTBhNmUzNzcsIDB4MzNiYjBkODYsIDB4M2MyNTNiNTksIDB4YTdlNTEzNjMsCi0JMHgyZmRmMDhmZSwgMHgwYmEwYTFhZCwgMHg4YzQ5MGUyYywgMHhiOGI1MGJlZSwgMHhiZmZmM2U2OCwgMHgzZjIyOGY3NiwKLQkweDlmOWIzZmI1LCAweDQ1ZjhiZTJmLCAweDBjZGY3ZjA5LCAweGFjZmYxYTY2LCAweDFlZjAyOWNiLCAweGQ0NzlkMTMwLAotCTB4ZDU4ZTcxN2UsIDB4YzZjYzg1ZjcsIDB4MDk0ZmViMTksIDB4ODgxZDkwMmQsIDB4ZWI0OGQyODMsIDB4MTY0ZTc2NTEsCi0JMHhjYTdjYjBiNiwgMHg3OTcwMDJmNiwgMHhhM2NmMzE4NCwgMHg0YmMzOWNmMywgMHhiZjUxZTI4MCwgMHhmNjEyZGMxMywKLQkweGIwMGNhN2I3LCAweGRiYTA2N2ZjLCAweDkxMmYzZGEyLCAweGVjODE1YWRjLCAweDc1ZTU1ZGJkLCAweGY2MDIzMTRiLAotCTB4NzNmMGRhNDAsIDB4Zjg1YjNkNjMsIDB4NDRlNjc0YTcsIDB4ZmM1MGYwYjgsIDB4ZTE1Yjk5YjMsIDB4Nzk1OGI0YjYsCi0JMHg4Nzc5MzNhNywgMHhhNmM4MGYyOSwgMHgzNGE2MjI3NSwgMHg3N2QxY2ZjYSwgMHgxYWY4Y2YzZSwgMHhiYWQ4MTNlNiwKLQkweGNjYzU5ZjA2LCAweDAzYWJiN2NmLCAweDYyY2YxZjk3LCAweDA3MDgzOTdjLCAweDg0ZjljMGM1LCAweGZjOGQ0NGYwLAotCTB4NjFlMWNkOWMsIDB4MzQzOWIwZmIsIDB4YzhkZDJlYjcsIDB4MjYyYTdmOTcsIDB4M2YzZjY4NjAsIDB4N2IyMTg2NjgsCi0JMHhhN2Y2ZmIyNiwgMHhiNDU2ZDMwYywgMHg4ZTAyZjY4NSwgMHgzYzM3ZDA2YiwgMHgwYzdlNjhiNSwgMHg2MmE2OGU0ZCwKLQkweGFlZDNmZGY4LCAweDFiNmQ0ZjhkLCAweDc0OGRjZWMzLCAweDhhOWZmNTE5LCAweGY2OGJiYTZkLCAweGJkMGFlZGM5LAotCTB4OGNiYjI3YTcsIDB4NzI4ZGMxY2IsIDB4ZmVmMmI1NGEsIDB4ZjM4OGYxYTEsIDB4ZjhkM2EyMzQsIDB4OTFjNWI3MzgsCi0JMHhkOTlmMmNiYSwgMHgxOGJkOTAwYiwgMHhhNWI3ZDlmOSwgMHg1MDNiZTVjOCwgMHhmNDNmYmRiNSwgMHhiZWUyOTQ2NiwKLQkweDFmNDc0ZDdhLCAweDlmNzFjMzZiLCAweDQ1MTYwZmFkLCAweDdkNTBmZWE4LCAweDVmM2UxM2VmLCAweGQ3NmFiZjc5LAotCTB4ZWRiYmYyMTQsIDB4ZjkwNTdiOGEsIDB4MjNmZWE4OWYsIDB4YThiZjA3OTYsIDB4ZWM2MzNiNjgsIDB4ZTQwY2M2MGUsCi0JMHhkNzEzN2UxMCwgMHhmZTZmOWZmMSwgMHhmZGI5ZTUxMSwgMHhhYWNkMjQ4NywgMHhjODFkZmY5MSwgMHhjMjFiYmUyMywKLQkweGQ3ZTRhYjFmLCAweDY0M2U4N2ZkLCAweDk5MTNlZDc5LCAweDVlYjQyYmJlLCAweDIxNjlhODQ1LCAweGI0MGU3NWM5LAotCTB4MmVkZjkwYjYsIDB4MzA0MWY5MTEsIDB4YzE5M2ZiOTcsIDB4MzdjZjQ1MzMsIDB4OWVjMWU4YzUsIDB4MGVkYzcxMjksCi0JMHg5YzUxYzZmOCwgMHgzZDdiMGIwYSwgMHhiNjI3ZjU0YywgMHgyZmVlNDc1ZCwgMHg0NGJiZjlhNCwgMHhkN2JjNmM3ZCwKLQkweDkzNDc0NzA0LCAweDM1ZTE5YmRjLCAweDlkYzUwZWQ2LCAweGUxMjk3OTgwLCAweGY1OWNlNGFjLCAweDc4Y2M0ZjIxLAotCTB4YmYzZjI2NmIsIDB4MDJmNThhYjUsIDB4MTMzZmJlOTksIDB4MmU0N2I1YmYsIDB4ZTdkYTc2YWEsIDB4ZDUxZTYwYTUsCi0JMHg5M2FjNDE5NSwgMHhjOGZjNDkxZCwgMHhkODI2ZmQ5MCwgMHhhMDNjZGY5MywgMHgxNWZmNzhkMiwgMHhmNTA1N2U2MCwKLQkweGY1MDMyZGJkLCAweDY4NWNmZmI3LCAweGRlN2M3YWYyLCAweGEwYzkzYTg1LCAweGFmM2NlMTdjLCAweGVmMTRiYjEzLAotCTB4NzRkZjFhNjgsIDB4ZTRhOWYzZjYsIDB4YTgyODA2YzcsIDB4Nzc5ZjdmZTEsIDB4YjkyMzhlZDcsIDB4NTMyYmZlMjEsCi0JMHg4MDNhY2VjOCwgMHg0ZWMzMzVmOSwgMHhmMTRlYzk0YiwgMHg3ZmMyNTJmZCwgMHhjY2M1ZDEzOSwgMHgzZGFiYjcyZiwKLQkweDc2NWQ5OGNiLCAweDEyZWM4MDk5LCAweDAxZWNjZmYxLCAweGI4YTBlZmYxLCAweDdiNDBlYTVjLCAweDY0NGZlZjYwLAotCTB4NjNkZWRlNzYsIDB4MTY3Y2IwZjIsIDB4NDYwNGZhZmQsIDB4NzQ0ZGRlNTcsIDB4MDcyMmNmN2IsIDB4ZTIxMzczYjMsCi0JMHgzNWVjOGNiOSwgMHgxM2NkOTQ3MiwgMHhhNjM0YTAwNCwgMHhlYzZmMDI1YywgMHhjYjk1NDEzOSwgMHhmODZjZjBjZSwKLQkweDdlYzIyZGNiLCAweDBjYjQ5MzgzLCAweDU1MjNlZTM3LCAweDIzZWNlMzk2LCAweDVhNzI1ZTI2LCAweDdmYzdkM2M0LAotCTB4OWVhNzkzZmMsIDB4YTc4ZjRmOTksIDB4MTBlMTM4ZjMsIDB4Y2U5YjUyNzEsIDB4MjJhM2ZlZmMsIDB4M2ViZTM1NTYsCi0JMHhlNTFiNTU3NywgMHhhY2M5NmZlNSwgMHhhNzM4YjBmZiwgMHgxYzljMDg4OCwgMHgxNDE0ZTcxNSwgMHhjZmQ0MzQzNywKLQkweDc1ZmNlMjZiLCAweGY0MWVkMjI2LCAweDViM2NiM2EzLCAweDU1NmU1MjE2LCAweDE4ZjViNGIxLCAweGMxYmQ3M2I1LAotCTB4Y2UzMjk0ODUsIDB4NGM3M2Q3NWYsIDB4NDI1ZTY2ZTEsIDB4ZmEzY2ViZjgsIDB4ZjkzMzEyOGQsIDB4Y2ViY2YzYmQsCi0JMHhlMDcyZmNlYiwgMHgwZTUxMTc4MywgMHhmOTQ2MWQ4ZiwgMHhiODUzODkyNywgMHhjYzNmODYxZCwgMHhlZTQzNDZiMywKLQkweDkyZmRmZDhkLCAweGY5N2U0N2UxLCAweGZhNDNhYTBkLCAweDFhNjFlNTNhLCAweDAyMDM2M2UzLCAweDk5NTVlODliLAotCTB4NDc0YTc4YmYsIDB4ZjRjODNlYzYsIDB4Nzk0NGM5YWMsIDB4MzViZWQ5Y2EsIDB4OWNlZjk0OTksIDB4Y2M4NzMyZmUsCi0JMHg0NWNjZWJiMiwgMHhhYTc3M2Y1NiwgMHg0ZmMyMTI5ZSwgMHg5Yzk2MDE2NywgMHg3YjdhNzA0OSwgMHg1MWY0YzJhNiwKLQkweDY3M2Y4OTZlLCAweDg0YzdkYTMxLCAweGIwZTkxNDFkLCAweGIxZjU2MjRiLCAweGZkNTAwOGVjLCAweDU0N2IyOWRjLAotCTB4ODBhZTgzY2MsIDB4ZjkxZTc2YmUsIDB4ZjgxZTcxMWIsIDB4MGYxZjg4MDgsIDB4NmNmZDQxZmUsIDB4OTQyM2U0MTQsCi0JMHhkYWRjNjBiNywgMHg3NzEyOGNmOCwgMHgyZGU0NjczZSwgMHhiMDdiYzY3NSwgMHhkYWY4NDRjNSwgMHgxZmUwOTYxNCwKLQkweGNmZDUxNjUxLCAweGEzYWY4ZmM1LCAweGQ5ZTcwNWJjLCAweDdjNzNkYTFjLCAweGU2YjVlYTM0LCAweGNhN2U4NDg1LAotCTB4NzliOWQ4NWIsIDB4NzVhM2Q1OTAsIDB4ZmU1YzRhNmQsIDB4MzhhNjU4ZjIsIDB4NDI4NDJjMGYsIDB4NTcxMDVmY2EsCi0JMHg2NjI4NGZjYywgMHgxYzQxNjEzOCwgMHg2ZGY2Yzg0ZiwgMHg2ZmRmM2IyMCwgMHhmZjQyZjJlMiwgMHgwMzczZWNjYSwKLQkweGI3OWYxNWUxLCAweDM0YmY3MjU3LCAweGNjMDIxNTcwLCAweDhmMDVmNjdlLCAweGI5ZGY5MWQ5LCAweDVhNmVmOTZkLAotCTB4Zjc5OWFlNjMsIDB4ZjNlNTBkY2YsIDB4NDA3MzBkN2IsIDB4YTkwYThkNWUsIDB4YjMxNmY4ZjAsIDB4OWNmNzVhZmMsCi0JMHg1NGI5NDVjOSwgMHgwZTA5N2YwYiwgMHg1OWI1ZmU3ZSwgMHhlNDVhYmVlYywgMHg0YTAzOWI3NywgMHgyZmNlZmNkMiwKLQkweDQwODFjZGM2LCAweDY5YmJhZDBiLCAweDQ3Y2VjNDlmLCAweDhmYzVmNzZiLCAweGQ1MzkwYmY3LCAweDljN2QzZWVkLAotCTB4ODNlYWZkOGUsIDB4NGU0MmZkMDksIDB4ZjNmYzUwZmUsIDB4Nzg3MjdjMDMsIDB4MWU1MzkwZDYsIDB4ZjM3M2IxZTQsCi0JMHg2NzU2YjcxMywgMHg3Y2YwYTY3ZCwgMHg4ZjMxNmRlMywgMHgzODE2MWZkMSwgMHg5MDZkYzA2YSwgMHg3MjAyZWI3ZSwKLQkweDJkNTQ3MDgwLCAweGY3OWU3NmU5LCAweGRjN2FkYTQyLCAweDA2MDMwNmRmLCAweGI5NDFmZTFhLCAweGI0ZTQyYzNjLAotCTB4ZWQ4N2UwNDEsIDB4N2ZhZmRmMWYsIDB4YmRkMDBhNGUsIDB4Yzc0ZmMzZDMsIDB4NWUwMzVmZjMsIDB4ZGYzZTM0NzUsCi0JMHg5NTJkZjlkOCwgMHhmMTEyZjVjZSwgMHhiMGE2ZGQ1NiwgMHhjODQ2YjdmYywgMHgzNTVmMTEyNywgMHg1NTY5Zjg0MywKLQkweGUyMjViZTI5LCAweGRkMjdjMWFiLCAweGI3OWU3Zjg0LCAweDM3Zjk2ZmZmLCAweGE2MjM1Y2Y0LCAweGVjMjI1NWE5LAotCTB4MWZmNmE4OWMsIDB4ZGRhZWI3MjQsIDB4ZmI0MzVmN2MsIDB4NGJmYmZiMTEsIDB4ZDBkZTc1ZjcsIDB4Y2M5ODY0ZjcsCi0JMHhmMzM0YmRmNCwgMHhmOGE1ZWIxNiwgMHhlNTQzYmI3YywgMHhlNjY4MzM3NiwgMHg5ZTA2Y2FlNywgMHgyYzVmZGYxMiwKLQkweGJiMjVmNWYyLCAweDM1N2FkZTc5LCAweGU3NGVjZDc0LCAweDgzM2RmZGM0LCAweDY5YWQ2MDc2LCAweGEyNDdjNTI5LAotCTB4YTVmOGM3YzcsIDB4NWQ3OTMyNGYsIDB4YTNmNzNkYmQsIDB4YmYzZTUwMWYsIDB4NjM3MTQzYTQsIDB4NjM3NTA3YTYsCi0JMHhmMWM1MmYxNSwgMHhlN2FmYjFiYSwgMHgyYmFkOGY4YywgMHgxZDI1ZjhjNSwgMHhlOGRiMzQ4ZiwgMHg5Mjk3ZTIzYywKLQkweDNmYjJjYzliLCAweDg5NDc3N2ZjLCAweGY3MjRkYmQ2LCAweDc4ZmY3YzA0LCAweGU2NmZlMGNmLCAweDUzNzI1ZTkxLAotCTB4ZmU3Y2QxNjcsIDB4ZGE0YjNiZWUsIDB4ZmNmZTNlOTEsIDB4ZmQ2Yzc3MGMsIDB4ZjdjNWRjNzksIDB4YzJhYzY0YjcsCi0JMHhhOGVmNmFlMiwgMHg0MTVhN2ZkNCwgMHgzZDllODVlNywgMHg1ZjdiYmVjYywgMHhmYjI1NTk3ZCwgMHgyMDk3NmZlZiwKLQkweDllM2ExNzE3LCAweDFkMjVlYzdiLCAweGYwN2JkZGU1LCAweGZhYzk0YWI0LCAweDZhZDNjZWMyLCAweDg1ZjI2YmY0LAotCTB4NDU4ZTU4YWIsIDB4YWI2YTc5ZDgsIDB4Yjc4Zjc1NGEsIDB4OTQ2YWY3ZWIsIDB4M2UxN2E3ZjIsIDB4MzU1NGU3NjQsCi0JMHgzZTUzZTc5NCwgMHhkMDFjOWNmNiwgMHhiYWM3OWZmMCwgMHg0ZjA5NTE1ZiwgMHg4YzEyNmQwZCwgMHg1N2VkOGZjOCwKLQkweDQxZjkzZjU4LCAweGUzNmUzZmEyLCAweDY5YzBkNGZlLCAweDgxYTVjMDk1LCAweDU1YjcwMzUzLCAweGQ4NmNmZmMyLAotCTB4ODY5NzFjOTEsIDB4OWUwOGRhOWYsIDB4YmU3MGEzZWQsIDB4YWJkNmRhNDcsIDB4ZDIzZDA3OTQsIDB4MTM3ZTNmMWEsCi0JMHg2OGQzOTlkNSwgMHhhNmU1YzczYywgMHg5YmZkZjFkZCwgMHgzM2E4ZjA4NywgMHhlZmU4OWQzZiwgMHgxZTA0YjI0YSwKLQkweGYwOThhMThiLCAweDFhYTkxODM4LCAweDdmZGM0NjY3LCAweDFjNjZiYTdlLCAweDc5NDdiOTI0LCAweDIzNzdjNDUzLAotCTB4YmU0Y2RlYmUsIDB4MmE2YmExN2QsIDB4MThmZjQ1YzUsIDB4ZmUxN2Q1ODUsIDB4YzZhMWZmMzEsIDB4MTY2NjY1ZTIsCi0JMHhmMGUyY2JjNywgMHg1NjllOTgxZiwgMHhhMjJjOGY4NCwgMHhhZjgyNTZmNSwgMHgzMmJjZTQ4ZSwgMHg3Y2EwZWE5YywKLQkweGRiOTQ0NTc5LCAweDI1YjBiMmYxLCAweDNmODg5MDEwLCAweDJiODc4YjEzLCAweDcwOGRiODIxLCAweGMyZDg3ZmQwLAotCTB4OTU1ZjI5Y2YsIDB4YzIwNGRlNTgsIDB4NzIxMjZkYmYsIDB4YmNlNDI0ZGYsIDB4ZDFiMWViMDksIDB4YTg4M2RkZjQsCi0JMHhkZDQ0MWJjNywgMHg5ZWQyNzliZCwgMHgzNDAyNTRlMywgMHg5M2JhZmU4OCwgMHhlNzI0ZWNjNywgMHhjZmZkYzA2NSwKLQkweDNmZjcyMGIyLCAweDc4OGNmZTg2LCAweDE4Zjc2ODkyLCAweGZkMjQxZWE5LCAweDQwMmQ4NmQ3LCAweDE3MmMzM2RmLAotCTB4MWI3OTY3ZmUsIDB4NDZlOTFmZmEsIDB4MzIzZmQwM2YsIDB4ZWY0N2UxOTUsIDB4YzYyNzdjZTIsIDB4ZjhjZTg2Y2YsCi0JMHg3OGIyMGJmMSwgMHhmMjI4M2EzZSwgMHg3MTJjYWFlMCwgMHhiNmY0MjAzZSwgMHg0YjUyMDA2MiwgMHg5YTY1YmU3MSwKLQkweGI3YjAwZWVjLCAweGZlYjRjYzdhLCAweDQ3ODhhOTg5LCAweDU2ODRmZjljLCAweGEyNGJlMTk4LCAweDhkZmRhMzRmLAotCTB4N2EwZGVmYzgsIDB4ZTE4YjlkMTUsIDB4MzVhM2EwZjgsIDB4N2Y3ZWI2MmQsIDB4ZWJkNzhiMmIsIDB4OWQ2NDczMzUsCi0JMHhlZjUzMTBmNCwgMHg0ZmNiMmFhYywgMHgzNzdjZWY1YSwgMHgzMWJmYzcwYiwgMHhkM2QzYzM2NiwgMHhjZjFkZWI2MywKLQkweGUzYzIyMjllLCAweGJjN2Y3M2Y3LCAweGYxNTdiZTgyLCAweGQyZmY3MWI3LCAweDY2ZjM4MTU3LCAweDJjMGVmZTUwLAotCTB4NTliN2Y2MWYsIDB4Zjg5NzU0MDIsIDB4Mzc1NDRmMTEsIDB4OTBiYzIxMmMsIDB4M2JhNTg2YmQsIDB4MmY1ODJmMDksCi0JMHhhZmYzNDkzYywgMHhkYzNiMmJhNiwgMHhjNjEwZWFmZiwgMHhmNTdlOWM2OSwgMHhmYzMwM2ZhMiwgMHhmN2NmMWM5ZCwKLQkweDkxMWI3MjhkLCAweGVhMzA3ZWFjLCAweDc4MmY4Njg2LCAweDZmM2M2YTdlLCAweGZkNTk0NzMwLCAweDE4OTYxMGQwLAotCTB4NWU4ZjNiN2UsIDB4N2U0N2NiY2YsIDB4OThmZmJiZmIsIDB4NTBkYjFlYjcsIDB4OWRiMzhmMTYsIDB4ZjQ4YmMxOTUsCi0JMHhlZGU3YzkxZCwgMHhlODc5YTRkNiwgMHhiNjk3MWY5MCwgMHg1MDY5N2IzMSwgMHgzZjJjMzlhMiwgMHhlMGY5ODQzOSwKLQkweGRlMzdhYzZjLCAweDFiZDU5NGZlLCAweDBmNmQ0NzlkLCAweGNhYjQzY2IxLCAweDM1ZjFjZTM3LCAweDY2ODI2YTdhLAotCTB4YzMzNmNmOTYsIDB4OWU1MmQ2MzYsIDB4NmRmZjliMTMsIDB4NTJlZmYwNzIsIDB4NDgzODhhMzYsIDB4ZWI4ODEzZjQsCi0JMHhmNmY2Mzg4ZCwgMHg4M2ZkMWJiMiwgMHgwNWVhNmZlMSwgMHhiZTgzMzdhZSwgMHhhMzc0OWU3ZCwgMHg3NjE3YTg5ZiwKLQkweDY3YmE1YjUzLCAweDg5NjhhNTNiLCAweGIwYmQ1MDc5LCAweDU5ZmNjYzI3LCAweDgzY2M0YmRjLCAweDZiYzA0YWRlLAotCTB4MmMyOWRiZDMsIDB4MjkzZmVkY2YsIDB4MTg0Y2U4M2IsIDB4NTFmM2ZiZTUsIDB4N2U2MWVmOTQsIDB4MWNlNDkwNWYsCi0JMHhjZjgxNTNmNCwgMHhkOWZmNzE1ZSwgMHhmOTMzMjE1NCwgMHhkNmYwZTY5OSwgMHg4ZTUwOWJjOCwgMHhhN2ZkMzcwYywKLQkweDI3NTQwMmQzLCAweGE1N2UxYzk0LCAweGJiNTA3MDgwLCAweGRhYzVjNzBmLCAweGM3ZDFlYTFmLCAweGYwMGEwZmJlLAotCTB4MmE2MGE1NzMsIDB4ZmEzMWQzYmIsIDB4NjU3ZTFmZjcsIDB4ZTlhZGUxMzIsIDB4Yjg4YjJmZWQsIDB4YTkxN2FlN2UsCi0JMHhjZmU3Mzc1OSwgMHhkNzg5MjU2OCwgMHhkNzg5MjZiZiwgMHhhOGU2NWRiZiwgMHhmZjJlZWE5ZCwgMHg4ODFiZDkyMSwKLQkweGVmYTFhYmQxLCAweGMwOGUwNDBmLCAweDhiZmNlYmNjLCAweDliYTMxYTU5LCAweGE2MWYxY2MyLCAweGZhZTJkZTZlLAotCTB4OGYzOWY5NmIsIDB4YTFiZmQ2YzIsIDB4ZjM3MTEyYmYsIDB4ODgwZWYxMzUsIDB4NWY4MGM0MmYsIDB4ZjNmODYwMTksCi0JMHg3ZTMxMzY5ZiwgMHg3MzA3YTdmYywgMHg0ZWJlZTM2MiwgMHhmZjIwOGVmMywgMHhjYzA3NTRkNywgMHhmOTAyYTQ5ZiwKLQkweDNhNjdmNDVkLCAweGRmY2JjYmQ1LCAweGVhN2NiMWIzLCAweDE1YWVjMTc4LCAweGM4MTU3ZmNjLCAweGIxZWJmZTQwLAotCTB4YzYyNjZiYjcsIDB4NTk4ZDhiYzYsIDB4MjU0YzNmMzIsIDB4MTY1MmU0MzksIDB4NWY1ZjBjZjMsIDB4ZDYxOWExYzgsCi0JMHg4ZTAyNzM4OCwgMHhiOTMzOGZlNywgMHhlYWZhYzE1ZiwgMHg4OWNmNjRjZiwgMHhlNmFkZDVmNSwgMHgxNmRkNGRjNSwKLQkweGZmNjQ3M2EwLCAweGNlZmIwYjA1LCAweDRkZWVmM2U0LCAweDJmODc3ZWFjLCAweGRmYzkxMzdjLCAweDhkMzdjZjgwLAotCTB4NmYwZWM3ZGEsIDB4M2ZjZjQ4OWEsIDB4MWE3OWJjM2YsIDB4OWE5NGY3M2IsIDB4NGU5OWUyZTMsIDB4YmU1MmU1ZmMsCi0JMHhjMzQ3MzY3NCwgMHhiM2VlZmFmZSwgMHhmYWI4YmJlYywgMHg0ZmYxODU2ZSwgMHhjYjNjNmM3NCwgMHhlZmU3ZTZjOCwKLQkweGVjNmM0N2ZkLCAweDAyODI0MzdjLCAweDFmMTgwMzhlLCAweGU3NWQ2ZjM3LCAweGE4YmYyY2ViLCAweDU4OWVjOTBiLAotCTB4OGRlZjE4M2MsIDB4YjE3MWU2Y2IsIDB4MjBlMDViMzAsIDB4OWU5ODc5MjgsIDB4MTc1Yjc4M2IsIDB4NTNmMTk5N2EsCi0JMHgxZTk5MDRhYiwgMHhkZTE0ZGE5YiwgMHhjYzViY2VkZiwgMHgzYTFmMTkzYiwgMHhiZmUyNzRiOCwgMHhmOWJmY2U4MywKLQkweGU3M2IwOGJkLCAweDNlY2M5MWMwLCAweDA3MTUyNzA2LCAweDZiZmQyMjc2LCAweDFkNzI4NDdhLCAweDNmODA5ODBjLAotCTB4ZTRmYmIwYjcsIDB4MTk4NTEzOTYsIDB4MTNjMWZiODQsIDB4OGIyNTY3MmYsIDB4M2RkMjZmMWIsIDB4NTRlNTQyMGEsCi0JMHgxMjQzYWYzZSwgMHhmMzY1MmZmYiwgMHhlNzUzODdmMywgMHhiNTNiM2ZiOSwgMHg5OTMxMzdjMCwgMHg5MmExZDM1ZiwKLQkweDkwOTJlOWQ3LCAweDM0YjJhNzc3LCAweDQ1ZGM3ZGQ5LCAweDMxYmVkZjMxLCAweDRmZGEyOWZhLCAweGRkOGQ4NzZmLAotCTB4ZjkzYWY1YzcsIDB4MDNjMmVhNzksIDB4MTQ5OWNkMjcsIDB4OTlhNTNiN2YsIDB4Mjc2YTQ3MTQsIDB4YmU4OGJiYmQsCi0JMHg5Y2JhNDAwMywgMHhlNDZkNWFmYywgMHhhYzc3YmIxMCwgMHhlYzU4ZWI2ZiwgMHg0NzQ3YzI0OSwgMHgzMmRmYzczNiwKLQkweGU2N2RmOTM1LCAweDNiZmY0NGI3LCAweDc1MTZjZWUwLCAweGFlMTMyZWQ0LCAweGM1MGFjZWY3LCAweDFkZTU5M2IxLAotCTB4ZTg5MWI0OWUsIDB4N2UxMmVmODcsIDB4MGE5NWVlZjgsIDB4MDFkZTUzY2IsIDB4MTZmN2UxNGQsIDB4OTU2MTdlZmMsCi0JMHgwOTc3YjNmMCwgMHgyMmFhYmNmZiwgMHg1N2JlM2ZiOSwgMHgzOWZhYjNjYywgMHgxN2VlOTI3OCwgMHhjN2UyN2I1NiwKLQkweGJkZjIyYmRkLCAweGYzNjFlMDM1LCAweGExMzRiZGRmLCAweGY3N2RlNDVmLCAweGMxZjIxMzdhLCAweDhiODdlMTZjLAotCTB4NzBmYzg4YTAsIDB4ZTkwM2UzMTAsIDB4YzZkOGIxYmQsIDB4MjlmMmVjZTIsIDB4MDllNjkyMTMsIDB4ZDJmZmQxYzcsCi0JMHhjNDI3MDNmNywgMHhmZTg2MDQ3NywgMHg2NWRmOGE5YiwgMHg5MWQ0ZWJmMSwgMHg5OTM5MmZmMywgMHg0MTQxYjZmZiwKLQkweGUxYjFmYjkyLCAweGZkZDg2NWY4LCAweGUyZWY1YzNkLCAweGMxZGVhMWJlLCAweDdmZjQzNDc5LCAweGQ4YTMyYjE1LAotCTB4ZmY0MzJkNzMsIDB4N2Y3MzY3NGYsIDB4YjZjZmJiNTksIDB4YjBiZWY2MjUsIDB4YTM4Y2U4M2UsIDB4NWI5MWExZmQsCi0JMHhmYmY4YzUyZSwgMHg4YzczODE1YSwgMHg3M2Q4ZTYwMSwgMHhkZjY0MTc5MCwgMHhmNGQ5ZDlkMywgMHhjYjJmNmIzZCwKLQkweDJjMDc3MWFmLCAweGYyYmVlMTdlLCAweDJjZjJiZWM0LCAweGVhZTk3MTMxLCAweDcxNDlmNWM4LCAweDk3M2ZiYzNjLAotCTB4MTY3ZmZkY2UsIDB4NWIxNDhmNmIsIDB4MDdkNWZkOTgsIDB4NmJkZDAwYTUsIDB4M2RiODQ3ZDUsIDB4YjEyM2RmZDYsCi0JMHhjZWEyYzI3MywgMHg4NTdiZWMyMywgMHhiNzI0OGJiNSwgMHgzM2IxYmI4NywgMHhhMzgxOWZjNCwgMHhjZjFlNTY1NSwKLQkweGM5MGNiYzBkLCAweGZhODhlMDRiLCAweDI1ZGZiZTI5LCAweDllMjI3YmUyLCAweDYyY2Y0MjI2LCAweDhmM2VmZjlhLAotCTB4ZWNlZmE2ZTQsIDB4NzVhMzhhNmUsIDB4MzBhNzVmZDMsIDB4MjExYzMzNzQsIDB4OWJmMjE1MmUsIDB4MjRmYTc4ODksCi0JMHhmMjQ5ZDdkYiwgMHhlZDcxZmFjMywgMHg1NGZmOWMxNCwgMHg4NDc5YzdmMSwgMHhkODliODY5ZiwgMHgxZDg1NmZkMSwKLQkweDRmZDM0YmVkLCAweDNiYWZmYzUxLCAweDBmZDVlZTIwLCAweDI0YTI4NzE0LCAweGYyYzAxMzk3LCAweGNmNjc1ZWMwLAotCTB4MWY5ZTQ2ZjYsIDB4ZmFmNTdiYjMsIDB4MGY3ZDhkODgsIDB4NzU0ZTFmNTgsIDB4NmNlZTg4ZGIsIDB4NzU0Yzk5NGEsCi0JMHhhNzc2NTg2NCwgMHhmM2EyYmQyMiwgMHhkZmFhMjJmNCwgMHhlZmYzOTQ1NywgMHgwMWQ0MWEzYywgMHgzYWI2ODc5NiwKLQkweGJmODkyNzdkLCAweGI4YTZlZTk1LCAweGNmODM3NGZiLCAweGQxM2RlMTliLCAweGUxMjQ1ZGNmLCAweGZjZjVmZjY0LAotCTB4OTcyMTQ1Y2YsIDB4NzJkNzkzYzYsIDB4OWQ3ZTEzMjYsIDB4NTM2NWRmYmUsIDB4NDVmZDc5M2MsIDB4ZmNmNmFlOTUsCi0JMHg5YzU5NWY5MywgMHg4ZDM4ZDFhOSwgMHg3NmQ5NWI4ZCwgMHhlMzFkMWI2NCwgMHhjZjRmZmMxYSwgMHg0ZWZlMzA3NiwKLQkweDJjMzE4MTI5LCAweGI1YmQyY2JmLCAweDBlOWE0YmVmLCAweGYyOTUzMWJkLCAweDI3MjNiZWU5LCAweDM4MzFhYWE3LAotCTB4N2Y0NDZkZWYsIDB4NGQ3ZjQ0OWQsIDB4NmJmNjEyNjAsIDB4YWQyNGFkNjYsIDB4YjcwZWY5MTEsIDB4YjFmNzdmNjcsCi0JMHhlODVmM2ExYywgMHhhNTJlM2IyNSwgMHhlMjlkYWNmNiwgMHgzYmM3N2Q2NCwgMHg3Nzk0MDlmNiwgMHg5OGQ2ZjE3NCwKLQkweDY2NTg2YWVmLCAweDJkMWNjMGUzLCAweDk2M2QzN2JhLCAweDdmMTkyN2JmLCAweDFlN2M4MzU3LCAweGRkZDE2ODgwLAotCTB4NWJmYjYyNTMsIDB4NDBmZGFmZmUsIDB4MDNmMzBlN2EsIDB4NjAzZjM4ZDEsIDB4N2JhYjA5YzgsIDB4ODc5OWQ1OWQsCi0JMHg5ZTllZWMyZCwgMHhiZjYyNWJlZSwgMHhlMWNlMmFjZiwgMHgxNjM2Njk3ZSwgMHg3M2FmNjQzZCwgMHg5MGI5OWVlOCwKLQkweDNjMzMzMzUyLCAweDIyMTliNDQwLCAweDA3ZGQxNzY2LCAweGRkZmU2NDQ3LCAweGU3ZTYxOGRhLCAweDY3ZjU4OTY3LAotCTB4ZTg0NzIzOWIsIDB4ZTIzOWNkYmIsIDB4ZjQyZTcyN2UsIDB4YzNiNzcxYjAsIDB4ZTAzZDZiMDAsIDB4MDk1YjUzMzAsCi0JMHg1ODU2ZDY2ZSwgMHg2Y2E5Y2IyMywgMHg2NTA2MGQyZiwgMHhjNzI0N2ZkMiwgMHhlNTZjYmNlYywgMHg0YzkwZjJiZiwKLQkweDMzNzJjM2RmLCAweDFlNDM2NWMzLCAweGYxNjNkZDMyLCAweGY3MTJmZmVmLCAweGYxYzM5OTUzLCAweGZkYzNkYjM4LAotCTB4ZjQxNmE1MGYsIDB4MDQwNTY2ZGQsIDB4NmRmOWZkZDksIDB4ZThmNzE1MTAsIDB4MGYzMWY3YzksIDB4MzdiYTM3ZWIsCi0JMHg5OWQzMGRiYiwgMHgwMDhmMjYxNCwgMHhmNjlmM2YxYiwgMHg0ZmRiMjcyMywgMHgzMzUzMzk3NCwgMHg3ZjEwNzIyYywKLQkweGY0YzcyNDUyLCAweGVmYWRlYTU1LCAweGQ4MDczZmEzLCAweDAzMGRmNmJjLCAweDBmOTc4ZjdkLCAweGMzYmEzYmRmLAotCTB4ZGY0N2JjNmYsIDB4MGYxZTRhOTksIDB4NmRkNTBlZmIsIDB4MWQ1MDhiNGQsIDB4MWRlOGRhODMsIDB4ZTgwNTYzZjIsCi0JMHg1NmFhNzMzNywgMHhmZTFjY2NlNiwgMHhjMDdjMWY5ZSwgMHhmYzQ4Y2ZiZSwgMHg3YmI2OWY5ZSwgMHhiYmY4NjcyNSwKLQkweGQyN2JlMzJmLCAweDlhMzU4MTdkLCAweDJlYjFmMTA5LCAweDExOTZlYWNiLCAweGJjZDY2NTFmLCAweDY1N2JlYzE5LAotCTB4ZTEyNTZmYTcsIDB4MzZkNDgyZWEsIDB4MGU2MjRkODEsIDB4YTg3OTY0Y2MsIDB4NzgyYTU1YzAsIDB4OTJmZjY4MmEsCi0JMHgwMjdkZjhjNywgMHhjNWQxNzg2MCwgMHgwMzllYjdmOSwgMHg1MjM4ZjdlYywgMHgyYmY3ZmMyZCwgMHhhZDBlMjE3NiwKLQkweDhkN2U4NjJlLCAweDI3ODU4ZmJlLCAweGVmOTQ2YTE2LCAweGRkNWE3NzZlLCAweDg4NTljZjk0LCAweDdlNjFkNGRmLAotCTB4M2JmY2FjNWIsIDB4NWU2YjE2OGEsIDB4ZjFiOGZjODAsIDB4M2NhMjU4NWQsIDB4M2QxNjUwNWIsIDB4NTZkZDBlY2MsCi0JMHhmYzI3MmY5NiwgMHhjNTliNDdmZSwgMHhjZjkyMmRmNywgMHg0NzJiZDNiNywgMHhmMjVjMWU1MCwgMHgyY2I5ZjlhYiwKLQkweGNjNzk0NzJmLCAweGJhNjFlNDM3LCAweDcwMjhmN2YxLCAweGZkYTFkZmZmLCAweDgyZmVmZTI3LCAweDA0NTQ2ZmIxLAotCTB4Yzg0MzhmMDMsIDB4ODM4MzkwZDMsIDB4Yzc3MTQ0ZjQsIDB4ZjQzMjdhODMsIDB4OWYyYzMwNWMsIDB4MGU1YzI5NWQsCi0JMHg1MjQxN2QwYSwgMHhjOGQ1ZGVjOCwgMHg2ZmY3MTM1ZSwgMHgwMWJmZWZlYywgMHg4ZjFhM2VjMywgMHgwMDAwMzQzMAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4ZDU1NDc4MGIsIDB4NzMzZWYwYjUsIDB4Nzk5MzMzMWUsCisJMHgwZjIwZjI2NCwgMHgwMDg0ZjEwMiwgMHgwMjE4NDJhMiwgMHgyNzA4ODc4NCwgMHgwMWE4YzQyMSwgMHg1NGJjODA4MywKKwkweDQ4NDMzYzI2LCAweGJmYTgxMTMyLCAweDI2NzdiZDZkLCAweGI1YWQxMTA0LCAweGJjMWI2OTUxLCAweDE0MTAxZGU4LAorCTB4ZDFhMDc1MTUsIDB4NDBlODFjMDYsIDB4ZGJkYWIxMTQsIDB4ZDVhOGY4YTgsIDB4NDA0NDUwNzYsIDB4OGJjYmMyNDgsCisJMHhhZjdmZDUyZCwgMHhlNjQ5Y2ZiNSwgMHhkNDQ4NGM5YywgMHhmZmZmYmZmNiwgMHhkYmYzZjFmZCwgMHhkOWNmYjNlYywKKwkweGRhZjVlZDdiLCAweGY2YmRhZDZiLCAweDlhMzJjMTFlLCAweGU0MjI0ZTI0LCAweDY1YTNmODViLCAweGY0ODQyNzg0LAorCTB4MGFkYjJjZTksIDB4NjQ5MThmZGEsIDB4OGIyZmZjNDIsIDB4MTA4ZTM2ZjIsIDB4ZjA4ZTc3ZWUsIDB4YmM4NDUxYTQsCisJMHg5ODBiOTliNSwgMHhjZmJjM2Q2OSwgMHg5ZmFkMDg0NiwgMHg2MDNkMzRkZSwgMHhmZjY0MjJjZSwgMHhlZjAyYjMwOCwKKwkweDhmOWFkZTlmLCAweGJkMmZjOWY1LCAweDdiNjgxNGU3LCAweDAwYmM0YmQ1LCAweDEzYmVkMzc1LCAweDEwOWQ4OGNlLAorCTB4YTFlNWI5YWYsIDB4ZjZmM2U5NmIsIDB4ODViMjc4OTcsIDB4OTNmYzQ1MGUsIDB4OTA4NTI0NGQsIDB4ZmVjMjE2NjMsCisJMHg1MmZhYjIyZSwgMHg2ZDU2YWIyYiwgMHhmNDA3N2ZkZSwgMHgyNjY0ZGU1YiwgMHhkNTRmZGE1NiwgMHhhZWQzNjVlZSwKKwkweDg3NjVmNWE1LCAweDU0YWYwMjQ0LCAweGZhOTVhYjZkLCAweDAwZjJmYWQyLCAweDlhZmE4NDE3LCAweDcxYzY3ZjdkLAorCTB4Nzk0ODBhZGEsIDB4MjcyMTI4NzAsIDB4NWYyMjE2N2QsIDB4OTZjZWViNDksIDB4NzlmNDU5OTQsIDB4MTE2NzYwNDUsCisJMHg4M2IxNWZiYywgMHhmYmU4OWI3MywgMHg3ZmY2OWIxNSwgMHgzNDU3ZmQwYywgMHhkYTc5MDM4YSwgMHgzNmVkOGFmZiwKKwkweDYzNjEwZjIyLCAweDFlNjA0YjdmLCAweGJjMDFhNjRiLCAweGM0ODg2ZjU1LCAweDk3ZTVlYjRjLCAweDcwMDQ0OTU2LAorCTB4YTU0YmQ0MjQsIDB4NjFmZjE4MGUsIDB4MzhjMDc2NDksIDB4MGQxYzcwODcsIDB4ZDBjZjU1OWYsIDB4ZDU3N2U4NzEsCisJMHg5ODZlNzAyZiwgMHg3ODg5YjU1YSwgMHhkZGQ2OWUwMCwgMHhkYTRmMzlkNiwgMHhkMmI1NWU2MSwgMHhmNzdlZjg2MCwKKwkweGI3YmMxMjdkLCAweGIyZjY1MDJjLCAweDM2ZjgwNjU1LCAweGU3MDA0NTRiLCAweGQyZDJjZGE2LCAweGFkZmQ5ZGExLAorCTB4MGVhNmZlZDgsIDB4ZDkwZDYzYWUsIDB4NzZhODllYTksIDB4NDdkMjc5NjMsIDB4YWNlZTZjODgsIDB4MDRhMjEwNTcsCisJMHg0MDc3MDBlZCwgMHhmM2FjM2U5YSwgMHg4MTJlNzlmOSwgMHgzZmQwZDE5MCwgMHg2NzRiNjQ0ZiwgMHhjODMwOTRmZiwKKwkweGU4ZjdmZTA3LCAweGY2MGY4MTNmLCAweGIyZGIwMjNhLCAweGQyYjVlOTNhLCAweDc3MmRmZjQ1LCAweDRiYWNlYmQyLAorCTB4OWVkMDlmYTUsIDB4NTZiZmRkMTcsIDB4YTA3NDA0M2UsIDB4NWNmYmQ0ZjAsIDB4NGJlMjNlNTgsIDB4NGY4MzcyYzMsCisJMHhjYWZkYmM0NiwgMHgwNmNiMDQzNywgMHgzZjlmMWI5ZiwgMHhlNThiMWJlNiwgMHhlNTgyOWYyNiwgMHgyYzYyYmUxMywKKwkweDdjNTJiZTAzLCAweDBlNmY4YjZmLCAweDFlN2Q1Yjk2LCAweGFmOTRmZTdjLCAweGJlZWRjYjFjLCAweGFjZmU3YzFhLAorCTB4NzcyYzZlZWYsIDB4ZmNmOGZjZjgsIDB4MmM3YWRmMDUsIDB4MmM3YWJlODMsIDB4YjAxYWY5NzcsIDB4ZjAwNWY0NmMsCisJMHhkYjdkOTdiZCwgMHgwNWYyNmNiMSwgMHg1ZjFlZjlmMSwgMHg1ZjIxOTYxMywgMHg0MDdkY2IxOCwgMHg3ZDg2NWE1ZiwKKwkweGYwMWU1ODJkLCAweGFiZTU4ODdkLCAweDc3N2UwOGJlLCAweGNiMWM3N2QwLCAweDNiYmM1NTA3LCAweDgxN2M5MDI3LAorCTB4MTBhOWNkZTIsIDB4OTIxNzE1MTcsIDB4OGJlNGEyNTgsIDB4Y2E1ODllYjQsIDB4ZjliNzI5ZWEsIDB4NGY1YTI1ZjMsCisJMHhjNTNhZDBmMSwgMHg3MGNhZGY2MywgMHhmYmQ2OTliZSwgMHhjY2Y2YjBkNiwgMHg4NTgxNDg3YiwgMHhhY2ZkMzNkNiwKKwkweDRhODNjMDdkLCAweDA3ZDY5NTgxLCAweGMxZjZiM2Q0LCAweDcxMDVmYzliLCAweGMwMzgzZWI0LCAweDExZGVhZmRhLAorCTB4ZmFkMWIwMmUsIDB4OWVkNjQxZDUsIDB4ZWQ5MzIyMTMsIDB4NjYxMzllYjQsIDB4OTRiN2RjZjUsIDB4Y2Y1YTBlYzksCisJMHhiY2Y1NjE2ZCwgMHg5ZDkzZmQ4ZiwgMHg2MTE3OWViNCwgMHgxNTNmOGZkZiwgMHhlYjRmMWM5ZSwgMHhmYjU5ZGJlMywKKwkweGQwYTQ0YmM0LCAweDA5MTNlYjQ1LCAweDdiMDJmNTg3LCAweGFkMDI2MTdlLCAweGJkNThiODE3LCAweDIwOTk1ZmE4LAorCTB4N2RiZmUwYzcsIDB4YTExMTY0NjIsIDB4N2ZkZGIwYmMsIDB4ZDNhNDIyYjMsIDB4NDU1OTE0YmEsIDB4ZmU5ZjE0ZGMsCisJMHg4YjBmNTgzOSwgMHhiZmI0MzE2NCwgMHg4NDUzMmZlNSwgMHg5MTJlYjQ3MSwgMHgxN2ZlZDBkNSwgMHgxZmI2MDU3ZiwKKwkweDZmNmM2NTEwLCAweGY2YzJhZmY3LCAweGVkOGM5MjAzLCAweGIwN2JkYWE2LCAweDYwYThhYWZlLCAweGJkZWQ3MjdiLAorCTB4OTJhYmZlZjgsIDB4NmI4M2VkODIsIDB4NDFmYWMyMWYsIDB4NjNlZDgzZDEsIDB4ZWY4ZDdmNmIsIDB4ZDgzYzk0MWYsCisJMHg4MGRhYzhmZSwgMHhmZmViNDg1MiwgMHgwMGI2NzljMSwgMHg5ZTcxZDc1ZiwgMHhmYzBkOTI3MiwgMHhhNTJiNGMxYSwKKwkweDIzOGViYWZjLCAweDFlM2U0MDczLCAweGYyYTZhNjAwLCAweDUyNWQyZWIwLCAweGZiZWRiZjQwLCAweDNjOTNkZTQ3LAorCTB4MzI3NmYyYTcsIDB4ZjUzZTk3ZDQsIDB4ZjNmNjE2NDAsIDB4ZDIyM2Y2MWMsIDB4ZmI5ZWY4N2UsIDB4NThjZGY4OTksCisJMHhiZjEzM2Y1ZCwgMHg2OWZhZDcyOSwgMHhhY2VhZjc4NCwgMHhkZjY3ZWJiZCwgMHhmMGY1ZTMzNywgMHhmNWExNTM3YywKKwkweDcxZmIxN2IzLCAweDEzNWU2ZWY0LCAweDg3YTA5ZGJmLCAweGFkNGFkYmU3LCAweDRmZDg4MzlmLCAweDA5ZTBlZjQyLAorCTB4ZmQ3NDYzOGIsIDB4NWE2NWM1ODQsIDB4N2VjNDdmM2YsIDB4MWUwZWY0ZmEsIDB4ZWJhNzFhNDUsIDB4NmI5NjkxNDcsCisJMHhmZDg4N2NmZCwgMHg5ZmFlZjdhNCwgMHgxZWFkNzRiMCwgMHhkNjg1NjkxZSwgMHhhN2VjMTFjZiwgMHhhNWU2ZWY3ZiwKKwkweGMzZDNhZjk4LCAweGZhZDJhZTYzLCAweGNmNzQ4OTM5LCAweDA3M2Y1ZGVhLCAweDFjZmM3YTFjLCAweGU3ZTA3NDcwLAorCTB4YTgzM2MyMWMsIDB4NzAyYWYzNzcsIDB4ZTA1M2YxZWEsIDB4MjVjZmMwZWMsIDB4ZGVhYWU3ZWMsIDB4YTljMDczZjUsCisJMHg2NzAxY2ZjNywgMHgwZTQ0N2UwNywgMHg3N2FjMzVlNiwgMHhkNzg4MmFmMywgMHhiZTIwYTdlMywgMHgwZTRlM2YwMywKKwkweDNiZDExOWUwLCAweGEzZWQ1ZTc4LCAweDdkYWJjZmM3LCAweDhhOTNmMDNhLCAweDFkZWU4Y2YwLCAweDdhMjk4NTNjLAorCTB4NzRhNjE0ZmMsIDB4Nzg0NjQ3ZTAsIDB4OWZhZWY1YzYsIDB4ZjhmNDUzNTcsIDB4MDNhNTM1NzksIDB4M2Y2MTU3M2YsCisJMHg1ZTZlZjVkNywgMHhmYzdhYTk4NSwgMHhlMDc2YTYxNCwgMHhjOWZiMTcyNywgMHg3ODQ3NmNmNywgMHhkMWM3ZWQwOCwKKwkweGZiMDczZjdkLCAweGIwNzNmMWViLCAweGFlN2UwNzdmLCAweGQwYTY3ZWM1LCAweGVlN2JiMjdlLCAweDhmNTMyOGE3LAorCTB4MGVjY2EyOWYsIDB4OWUyMjE0ZmMsIDB4M2Y1ZGU4NmYsIDB4ZjhmNTMzMDcsIDB4ODFkOTk4MzksIDB4Y2ZkOGE5OWYsCisJMHhhYmNkZGVkNCwgMHg3ZTNkMGFlOCwgMHhmODYwYWU4YSwgMHhjMDhjMjQ5OSwgMHg5ZGFlODY3NSwgMHg3MjdlOWU2ZSwKKwkweDg1N2NiZjdkLCAweDJlZjNlZmEzLCAweDZlNWRlNzU2LCAweGFmMGY3NjAyLCAweDQ1YTQzM2Q5LCAweGY2ZmJlOWUxLAorCTB4MGZiOTA5MWQsIDB4YTZiYjY4OTAsIDB4OGZjMDc2ZTAsIDB4ZDE3OTVhODMsIDB4ZDhmYzRkNzYsIDB4OTUxZDlkMzgsCisJMHhlYWVhMjRhMCwgMHg3NTdkYzU0OSwgMHgxZDI5ZjdlZiwgMHg5ZDRmNmJhMCwgMHgzZGFlYjU3MywgMHhhYmFiOTNkZCwKKwkweGQ3OGY5NDY3LCAweGE2YmZkZmJkLCAweGUyYmY1NzQwLCAweGVmNzUxYmVlLCAweGQxNmZmOTY3LCAweGNmZDdiM2Q1LAorCTB4YTgzZmJkZDMsIDB4ZmRhZWExN2UsIDB4NWQwYTg2Y2EsIDB4OTU4MTU1ZmIsIDB4ZGIzNWZhYmEsIDB4N2Y3YmEyN2YsCisJMHhhZThkNzA1OCwgMHgwM2QzNzg3ZCwgMHhlMTExZjZiYSwgMHg5MWY1NzQ0NywgMHhiZGQzMWU4NywgMHg4YjY1YmEzZiwKKwkweDg3Y2M3ZGFlLCAweGM3ZGFlYWNmLCAweGVhZTk3NjQ1LCAweGEzZGYxZWQ3LCAweGY2YmFmZjdiLCAweGE0ZmFiYTAzLAorCTB4YmRkN2JmOGIsIDB4ZDVkZTRmOWYsIDB4M2Y5NmRiZGIsIDB4ZTI5ZmRlZWIsIDB4N2VkNzRjZmEsIDB4MDY5N2RhN2QsCisJMHgzYWVlZDUzYiwgMHhlNzVhOGQ3NiwgMHhmYTA4YWU0MSwgMHgwOTc0ZmUyNSwgMHg0M2IwZDVlZCwgMHhkN2Q0YmFjMiwKKwkweGM3MTRmY2NlLCAweGU1MjhmOTUyLCAweDIyYzBlOTFmLCAweDkyZjkxOTM5LCAweDIxYmI1MWZlLCAweDk1Zjk2ZmJmLAorCTB4YWVmY2ZhMTEsIDB4NWQyYjllZjEsIDB4OTI1ZGY5ZjQsIDB4ODYyYmI4NjcsIDB4OGRmOTQzN2QsIDB4Y2E1MDY5MjMsCisJMHhlZDhkMjgyNiwgMHhkZjhjODlmNywgMHgwZDJlMzIwYiwgMHhmN2JmNDIzZSwgMHgyNzA3ZGE5YSwgMHgzZTcwZmFkMCwKKwkweGYxZjIwODNmLCAweGJiNDI2NzMyLCAweDM1Mjc4ZTNhLCAweDk5OWM1ZWYwLCAweDVmNzRkZmEwLCAweGZlOTNkZTU2LAorCTB4ZGY1ODc5MjgsIDB4NWMxOWRhOWYsIDB4NDVlYmJmNjcsIDB4NTFkYTFhNGYsIDB4YzFmODlmYjUsIDB4OWZkNzU5Y2UsCisJMHgyMTJmYWJjZSwgMHg4NDlmNzBhZiwgMHhmN2U5MDNmZCwgMHg3OWE2OTdmZCwgMHg4OTY2N2Y2OCwgMHhlM2QxMTlmYSwKKwkweGExZmM3NDRiLCAweGU0MTg3ZTM4LCAweDNmOGMyMGUxLCAweGU2ZjhlYmJhLCAweGUzNzU2MzAxLCAweDc1Y2IzMjViLAorCTB4M2EyNDViZTMsIDB4ZGY5MDhiYmUsIDB4OGVhZTdlZDcsIDB4OWUzMDg5NGYsIDB4Y2ZiOTM3OTAsIDB4NjY3MzdjNzEsCisJMHg5ZjdmOGUzOSwgMHhlOGFlZmQ0NCwgMHhjNjNhZTNmMSwgMHhiZmY5ODE2ZiwgMHgwN2ZjZGRkZiwgMHgzZmNmZDc4YywKKwkweDdmM2Y0MmIzLCAweGEzZmZjZDg5LCAweGY4ZWFkM2RhLCAweDNmZmYzODcxLCAweGZjZDlhNzczLCAweGZjZDgyYjMzLAorCTB4OGVkZmFjY2QsIDB4ZjgxZDlkZjEsIDB4YzdmOGMwOGYsIDB4OWNkZjE5YmEsIDB4ZmYzZjQxM2QsIDB4ZjNmNTJhMmIsCisJMHg0ZmYxYjMzNywgMHhjNzUwNWVkNiwgMHg1ZmY4ZTNiNywgMHhmY2Q4MTc3MiwgMHhmMWM0YThhZiwgMHgwZGM3YjMyNSwKKwkweGM0NjUyM2ZjLCAweGY4ZTgwNGQ1LCAweDdjNTUxZmE0LCAweDc0MmVjMGE5LCAweDI0ODcyODFjLCAweDY0MjFhMTUyLAorCTB4ZTEwMDM3MWIsIDB4ZjE4ZTJiYjgsIDB4OTQ3MTU3ZGIsIDB4Zjk5ZjUwZGYsIDB4NTAwOTM5ZjEsIDB4ZmQ0Nzk5Y2QsCisJMHg1N2Q3OTU0NiwgMHg0MDk3YzhlYywgMHhmNTNiNjFlZiwgMHhhMGE4OTZiNywgMHg5MWUyNmUyZSwgMHg3MzA2YzliZiwKKwkweGI3ODUxMDYwLCAweDQzZjc4OWI1LCAweGViODZmMTdkLCAweGJkNWZhMDAyLCAweDE0YTBiMjY2LCAweDE4NDgxM2JlLAorCTB4Y2JmZTdmOWUsIDB4ZTdhMjViNjEsIDB4ZDQ5NzJjNjUsIDB4NTEyMmM3OGIsIDB4MDdlMWQ2ZjIsIDB4MzUyMTkwMTYsCisJMHhjMDI5YmUxNCwgMHhlYjNiYTMwNCwgMHgwZTNmNTI5ZiwgMHhhOThmZTMxYywgMHhmZmE4NDNkZiwgMHhjNmM4OTlmMywKKwkweGY3ZjUwYmZiLCAweGZlYTExZWEwLCAweGE0Y2UzYTFlLCAweGRkYTNiZjE2LCAweGYwYTM0ZTFkLCAweDdmZjBhYTk3LAorCTB4ZmQ3OTMwMmEsIDB4ZTAyZTM2ZjQsIDB4ZDVmOWYyYTcsIDB4N2ZhMDQ3OGYsIDB4MWI2ZWUwYmQsIDB4MWMyNzdhNDUsCisJMHg1ZDI0ZmU2NSwgMHgwZmNiY2U5ZCwgMHg2ZGRmNmE3NCwgMHgxMGUxNmMwZSwgMHg2YmUwMzJiZiwgMHgyMTI2OGEzYSwKKwkweDUwNjdkNjhiLCAweGZmYmU3NzVjLCAweDA3YTliZWMxLCAweGI3MjEyNzM5LCAweGE1NGM0NTEyLCAweDlhYmVkZmVmLAorCTB4ZTNhMmVmZWIsIDB4YjljYzUyY2UsIDB4MzI1MjFkNmMsIDB4MjRkNzI4NGMsIDB4OTA5NjM0YzMsIDB4ODg0NzFhNWIsCisJMHg1ZDMyMDdiNCwgMHg0NDhkM2YxMSwgMHg1OGEzM2I4ZCwgMHhhYTU1OWY1ZiwgMHg4YThhYjdhZiwgMHhiNTcwYTI2OCwKKwkweDY2YzhlNzRlLCAweDM5ZWNlZmRhLCAweDljNmQ3NmZhLCAweDQ2NDRhNjgxLCAweDUyYmM3NTY3LCAweGZhNzQ5MzhhLAorCTB4Yjk5NDM2NjgsIDB4NzQ4NWQ4ZjAsIDB4ZGY2MmUzOWUsIDB4MTc3OGYwNmEsIDB4N2U4YzI0ODksIDB4MDEwZmJmYmMsCisJMHhmMTkzZmFiYSwgMHgzNjJlNzliZCwgMHg3M2JjMjM2ZiwgMHg0YTUyOGI0NCwgMHg4Y2E3MzllNywgMHgxYjdmMDAwZiwKKwkweDlmNjhmZmUxLCAweGQwZTUzMTRkLCAweDIyYTNmZDcyLCAweDhmOWQ3NTMxLCAweDFlYjlmZTExLCAweDIyODI3Y2UzLAorCTB4Y2JmM2YzYWMsIDB4ZGYxOWNmOGQsIDB4ZmZlOTUzMWMsIDB4MmQwN2YwMjksIDB4YTBmZTAwYmYsIDB4Zjk1NTFmZjAsCisJMHgzMmFmNTNhMywgMHgzZDlhZjBmZSwgMHhkYTFmODBkMywgMHhlOTA0ZjIzNywgMHhhZGNiZjJhYSwgMHhhOTJjYmYyYSwKKwkweDIxMDVmM2Q3LCAweGI4ZTgxMTFlLCAweGZiOTcwZTZjLCAweGNjMWYxNDQwLCAweDU5NjBmOTU2LCAweDZlNmY5ZTgzLAorCTB4M2QzMTdlMjcsIDB4NmVlNjVkMDYsIDB4OWE2ZjdjZDgsIDB4OWY3ZTc1ZGMsIDB4ZmYzMzdjYTgsIDB4OWY4OGZkYzEsCisJMHg3NDY0ZjNhZSwgMHhkM2E1NDNiYSwgMHhmNmZhMzVlZCwgMHhkZWJhNTU1YiwgMHg0ZTc1ZDJhZSwgMHg1MWFmYzNjMywKKwkweGM5ZTY0MWY1LCAweGRkZTQxMTAxLCAweDllOGQ1M2ZiLCAweDNkM2QxZDExLCAweDcwOGQzZDJhLCAweGYzZDJhMWRlLAorCTB4N2EzMzFmOGUsIDB4YTg4ZGUxMWEsIDB4OWMzNDhjZjQsIDB4YWU4MGM5MTMsIDB4NWJlMTFhZjAsIDB4Zjk5Nzc3NzAsCisJMHhjY2FiNWM2MCwgMHhkZTllOWIxZiwgMHg0NzU1ZmNhNiwgMHgwNTU3OWVhMywgMHgzNDc1NTg2ZiwgMHg2YzU2Y2U0YSwKKwkweDJmYWJhZTlmLCAweGJkZDVjYzBmLCAweDRjYTFhY2JmLCAweDdlYTRiZWQ3LCAweGQxN2RhZWI5LCAweGY1NzUzYmZhLAorCTB4NzU4ZmZmMzIsIDB4YmJiODJmZWYsIDB4N2I3ZWQ3NTYsIDB4ZjZiYWZkY2QsIDB4ZWIwZmU1ZjksIDB4MWIzZDczZWEsCisJMHg5ZWNmZWY3NSwgMHgzZWQ3NTliMywgMHg1ZDE5ZjRhYiwgMHg5ZGUyOGNmYiwgMHg2NTc0ZmFiYSwgMHhkMzdkZWViNywKKwkweDA2NmVhYmJlLCAweDNkZWI3Y2ZlLCAweDcxM2Q4MDllLCAweGM2MDVmZGMxLCAweDQ1YjgyZjMzLCAweGQ0NzNiYzM3LAorCTB4MWY1ZjIzMjcsIDB4ZjJjMTBkZjMsIDB4N2M4ZGNmYjgsIDB4MTYzN2QyN2YsIDB4NjZhNmQ2Y2IsIDB4NzQxM2FjM2IsCisJMHgxMjRhNWM1ZCwgMHhjZDMyNjkwOCwgMHgwZmRmNWRhYiwgMHhlYjgyNjlkNiwgMHhhOWU0Yzg2OSwgMHhiMzdhZDNmNSwKKwkweDI4Nzk0NjQ5LCAweDc4NDg5MDY5LCAweDJjMWMyMTI0LCAweGVkMWMyYTM2LCAweGE0N2I1NDdjLCAweGFhMDZmNjg3LAorCTB4YjZiYTkzZjgsIDB4M2Y2MjQ0OTcsIDB4NzY1MjNlZjcsIDB4Nzc2NWYwMDUsIDB4Y2JmZDAzZWIsIDB4NGRhN2JiMDAsCisJMHhlZDhkZWJiNSwgMHg4ZDI5MWM5NSwgMHgxYWM4NGU3ZSwgMHg2MjZhYzM4NCwgMHhjNGE1NDc3NiwgMHg1NzcyYmZlNCwKKwkweDQyNzEwMTdhLCAweGU2YjgzYzNkLCAweDI5MDVlMzcyLCAweDlmMDJhNzkzLCAweDc4ZTRlYjY0LCAweDNhMzVjMzU5LAorCTB4OWEyMDRlZmQsIDB4NmRmODA3ZGMsIDB4OGFmOWVlYTQsIDB4YmVlYWQ3ZWQsIDB4NDc5ZmI1M2IsIDB4NTc0MWFiYjgsCisJMHhiMTY1ODM4YywgMHhlODEzMzNmNCwgMHhlNjczNzBlMSwgMHhhNzAwNjE4YywgMHg0ZGViMTQ3MiwgMHgzYzJlZDA3ZCwKKwkweDc1NWUyYmU1LCAweGFmZDAxMDc0LCAweGJlZTNjYjE0LCAweGYzMWU1ODM5LCAweGVhM2NiMDc5LCAweDUzZjJjNzJiLAorCTB4MTE5NjBkNWYsIDB4ZmU1OGRkZGYsIDB4ZjJjN2U3YzUsIDB4MmM3YWRmNjMsIDB4NjNkNWYyM2YsIDB4MDFhZmExZjksCisJMHgwMTdkZjdjYiwgMHhiNmZiMGYyYywgMHgyZjhlZjk2MywgMHhhZjhiNjU4OCwgMHg5ZjU2Y2IwOSwgMHg3NzI2YTU4MiwKKwkweDcxZGRmMTNkLCAweDA5M2UxZDc1LCAweGNmODMxN2ZjLCAweGVkN2YzYWE0LCAweDdjOWQwOWZhLCAweDg3ZGZjNzE2LAorCTB4YjllMWE2N2MsIDB4ZjJhY2MxYTQsIDB4MWY4ZThhNDMsIDB4NDM5N2MwMTIsIDB4YmRhMWViM2UsIDB4YjBmOTU0NDEsCisJMHhiNzYzZWZiYiwgMHg2YmZjYjc3YiwgMHgwZmVhNmRmOCwgMHg3ZTRlYjdlNCwgMHg1M2YwMzBjYSwgMHgzNGZjNGY3NiwKKwkweGE3ZTI4ZjhjLCAweGIzMTcyNmE5LCAweGZhN2U1NDdiLCAweDg2MjNjYzE5LCAweDhjMGYzMTVmLCAweGY2NTEzZTkwLAorCTB4ODI2ZjkyOWEsIDB4YmFhNTZjNzUsIDB4NjAxZjQyMGYsIDB4NzYzYWFjZmQsIDB4MDViNzdkMWQsIDB4MTBjMGJhZWQsCisJMHgwZWNlMzc1OCwgMHhkODYwZGJmOSwgMHgyMWZiMzg0NywgMHhmNzU2N2UyNSwgMHg0OWYyMzNmMywgMHhkMDU3NzhmNywKKwkweGEwMWE1OWJmLCAweGRhZWE0ZjQ0LCAweDc4NjM4ZDZlLCAweDMxNDg5YWI1LCAweGZkZGFlYmExLCAweDJmNzI5ZTgzLAorCTB4ODE3NThhMWMsIDB4MDFmN2MyMjQsIDB4OGM0Nzc0ZjcsIDB4MGNhZGE5N2UsIDB4YWYwOWVkZjgsIDB4NzJhZjhlNzUsCisJMHg4ZjYzYmZhMCwgMHhjYTBmM2RmZCwgMHgyZjY2MjZhOSwgMHg2OGYzMzVjNywgMHg5M2YwOTNiNywgMHhjNzZmYzA2ZSwKKwkweGE3NzY2NGJhLCAweDdkYmRiYzQxLCAweGJiNDJlNDkwLCAweGUzZDY0YzgxLCAweGMzYTA1ZmNmLCAweDQ3MTRmZGRmLAorCTB4ZDZlZWI4MmQsIDB4MDZmZTIxYTcsIDB4YmQzODM1N2UsIDB4NDllYmY4MTcsIDB4Y2Y4NGY3YmYsIDB4N2ZlZjMwODUsCisJMHhkMjdiM2UwMSwgMHg0NWU5M2Q4ZiwgMHgzNDJmYzhhMiwgMHhlZGI3ZjlkMSwgMHg4MGZiOTYxYiwgMHgxZTVlZTMwYywKKwkweDlhZmVkYWRmLCAweDdlNWY5ZTExLCAweDRiNmUzZTQ3LCAweDI1YjhmOGQxLCAweGE0MWY4MDkzLCAweGM2ZDljYmNhLAorCTB4MmU4MWUzMmIsIDB4NDBmNGZkMWQsIDB4OWY3N2VlNGYsIDB4N2VmZjgyNjQsIDB4ZGZkZjRiM2EsIDB4ZTJmZWM2N2QsCisJMHhhNzBkYzIyNSwgMHg4OTI0M2FlMywgMHg5MmJmNTNjNCwgMHhkMWUzNmNmNywgMHhmYzQ3NzE5ZiwgMHg2N2Q4MzcxMCwKKwkweGUwYzlkNzczLCAweGFmZmM5ZTM3LCAweGViM2QwY2IwLCAweDBmNjcwYmUzLCAweDNmMDRlOTNkLCAweDVmMWE2NTZjLAorCTB4MWQwNjM0NzMsIDB4OTgyYWIyYjUsIDB4ZjY4ZjYzNTUsIDB4ZjVmNDlhNTcsIDB4NzE1Y2Y1YjMsIDB4YzcyNWU3MTAsCisJMHhlYjA2MWNjZiwgMHhhOGU2YWI4YywgMHgwZDNmN2EwOCwgMHg5NTlmYWQ0YiwgMHg3MzhlMTI2OSwgMHgzYzc2N2I3MiwKKwkweDRjMDJmZmYzLCAweDQwNDhlYzlmLCAweDY3ZDI3MzdkLCAweGQ5ZmZmN2MxLCAweDhmZDc3NGYwLCAweDhkMjEwZjA2LAorCTB4ZTgwYjMzZTQsIDB4ZGQ5NmRhNzMsIDB4Y2FkZGZiZmQsIDB4ODI1ZTcwODMsIDB4ODkwOTI5ZjgsIDB4NjliZjgxNWYsCisJMHgzYjdmZmZhNSwgMHhiMDE1ZmEwMCwgMHgwZGViZjVhZSwgMHg3MGYzN2VmMiwgMHgzNzQzYmU3OCwgMHhkNjRlZmQxZSwKKwkweGJiZTE4Y2Y2LCAweDIwNGVlNWVlLCAweGE3YmUzNGM3LCAweGJhYWJmYmY0LCAweGJiNjJiZGJmLCAweGM3NmY0NmI1LAorCTB4ZGVlYWU4MjYsIDB4OWQxYWY0YTYsIDB4MDBmZjBiNWQsIDB4MTM4NmJkYzMsIDB4NTRhYjA5NjAsIDB4YjA0ZGIwZDksCisJMHhkYTdlMDdhZiwgMHhmMDQ5YzEwMywgMHg1ZWY2Mzg1ZiwgMHg3OTIyMjU5NSwgMHgxNjk3MTQ2NCwgMHg2Mzg1ZDNlMCwKKwkweDY3OTdmZTM1LCAweGE5ZWE5OWZmLCAweDA0OGE2ZjEzLCAweGEyNWM4Y2U0LCAweGFlYTllNTUwLCAweDg5OWJmMjIwLAorCTB4OTE3ZDY4OTgsIDB4YzZjMmY2ZmEsIDB4NmViMDI1MTUsIDB4MjZmOTc4OWQsIDB4OTMxNjQzZjQsIDB4YzdmODI3NTIsCisJMHgwZjNlYTRlNSwgMHg4OWE3YjVlMiwgMHhmM2U0MThhOSwgMHgzOWM3NzkzNCwgMHhhZDFlNGEzMiwgMHgyZTlkODQ4MiwKKwkweGUzYjdhZjVhLCAweGFiYWY3ZmE5LCAweGQ3ZDA2YjJmLCAweDUyNWI5Mjk3LCAweGU5N2VkZjYwLCAweDM4MDQ5MTA2LAorCTB4ZjZmYTFiZDAsIDB4ZjYxNzc5YWYsIDB4YWNkNDhjYmIsIDB4NTdmYjc1ODMsIDB4YTE2YmJjNmEsIDB4NTQxOTA4OGIsCisJMHhmNmZkNTU2ZiwgMHgwYTMyYmNmMSwgMHg3MTYwNGI4NywgMHg3YTFmNmQxNiwgMHg3ZmYzMjI3OSwgMHgyNDA2NjYyYSwKKwkweDU5ZmZiZTg1LCAweGE5NWJjOGUzLCAweDA3ZGZhMjA2LCAweGJjN2VjMWQ2LCAweDZmNzEzYTdmLCAweGY3ZTk1ZDIzLAorCTB4YzIzN2UxNWQsIDB4NWQwM2Q5YWIsIDB4Mzg1NWMzZjYsIDB4NGE3M2I3OTIsIDB4Y2IxZTg2MjAsIDB4NjcyNjM4MTQsCisJMHgxMDJiYmVhYSwgMHhjN2I4YmE1YywgMHg3YmZkNDMzNCwgMHhkMTMyNTNmMywgMHhkZTFlZDNmMSwgMHg2NjhjMjc5MywKKwkweGMwZmMwM2ZjLCAweGU3OTJlZDA5LCAweGQ2OWZmNDg3LCAweDdmODJmZmE1LCAweDY4ZmRmZjZhLCAweGZlYmE3OWZmLAorCTB4ZmI1M2ZkYTcsIDB4ZmUwNWQ4MWYsIDB4YWZmYWIxNzksIDB4MmZmM2VkZmEsIDB4YTkzZWE5ZmIsIDB4NGU5N2YxNzgsCisJMHgxM2M5ZDc0MiwgMHg5YjhhN2Q0MiwgMHhkYjcyYjVkMiwgMHg5Njg1NGViZCwgMHgxM2JmMDVjNywgMHg4MDQ0ZjVmOCwKKwkweGVmNDU4ZTJmLCAweDE1NGUwNTg3LCAweDQxY2VjNTQyLCAweDQ5ZmUwZGRjLCAweGVjZjkzZmZiLCAweGYxMWUzMGNmLAorCTB4ODVkMTM2ZDUsIDB4ZTZlZGI0ZjEsIDB4NjFjYTk5YjAsIDB4MTJmMmUzNzUsIDB4MjNmNTgzOTIsIDB4MTlkZjdlYWMsCisJMHg3YTRkZWExZSwgMHhmYTc4YWJmZSwgMHgxZjkwMjk5NywgMHg4ZDQ1Mzk0MiwgMHg5ZWQxODUyZiwgMHg3OWZhZGVhZCwKKwkweDVlNGZhYzExLCAweDY0NzI4ZWQyLCAweGJmYzYwZWZjLCAweGFmZmE4ODk4LCAweGRhZWY4YTRjLCAweDM4YzRlMTRlLAorCTB4OGJjNTU3ODEsIDB4Njc2N2YxYjcsIDB4Mzc5NDI3NzgsIDB4ODJmYTAxN2MsIDB4YzdlODIyN2EsIDB4NTcyYmJmMWIsCisJMHg4MjM1ZDRlZCwgMHg4ZDk4ZjkyMywgMHgxOTBjN2JmZSwgMHhjMzUxN2EwMywgMHgzYjMwMDkwYiwgMHg1Zjk5ZWViNSwKKwkweDcwYTExY2U3LCAweGE2ZmFkYTlkLCAweDk3YzI4YjkzLCAweDgzNjc0ZjI2LCAweDhmNzNmZThiLCAweDZkZGViZGRjLAorCTB4NmQxNmYyYTUsIDB4OTZlYjY5MGYsIDB4ZDdkYWE0ZGMsIDB4OGE1NjU2MjEsIDB4ZjNlNDI3NjEsIDB4ZGQxNjZlNTQsCisJMHhmMmI4ZmE3ZSwgMHg3YTlmMjdmOSwgMHg3Zjk5ZTIwYywgMHhkMTA3YmIzMiwgMHhmZjNjNTdmZSwgMHg2OWUzZmJkYSwKKwkweDMxNGVjNTdkLCAweGMzNGQ4NGI5LCAweGQyNzRhNWNlLCAweGJmZmY0YmM3LCAweDFlOTNiNzNiLCAweDRkNzliZjE1LAorCTB4ZTdiMTg3OTIsIDB4ZDI3NjI0ZjcsIDB4ZmRjZWM1NjUsIDB4MTVkNjE5MTIsIDB4ZmI4MzkzMWYsIDB4MDYzZDg4YTUsCisJMHg4YTQ3ODI3ZCwgMHg3YmE4NWVjMCwgMHg4ODI1YmZlNiwgMHhjN2Q4OWUzMywgMHgxOGFjZDQ5MSwgMHgxYWZjZGNmOCwKKwkweDI3ODAwM2RhLCAweGFmNGFhN2E0LCAweGRlMTlmYTBlLCAweDgwYmE1MmY3LCAweGNiZDIzNmRlLCAweDU1MjJkZWY4LAorCTB4OTBiZjQwYmYsIDB4ZmJmOTQxNjcsIDB4MDc5MDNkODUsIDB4MGRkOTkxZjUsIDB4NjE3ZjI4NzgsIDB4ZjNlNjEzOTUsCisJMHhmOGMzNTA4NSwgMHg1MzdiZjFmYywgMHg4Yjk1OWY0MCwgMHg5NjE3MTRmZSwgMHgxM2Y5NzllYywgMHg1YmZlNDIzZiwKKwkweDUyOGZmNmY2LCAweDk0NDRiZTMwLCAweDQ1YWUxMzc0LCAweGU3OTg3NGZlLCAweDcwYjM0ZDkyLCAweDA3ODk0YjllLAorCTB4NzFmY2IwZjksIDB4Y2I0MDM0YmUsIDB4ZGUyOTAyMGIsIDB4YWM0ZTQzMTksIDB4MmY5MzkzMjIsIDB4ZDJlMjUwYjYsCisJMHhmZTAxN2U3OSwgMHg3N2VmZTgyNCwgMHhiNDM2YzBmOCwgMHhhMDI0ZWZiYiwgMHhjZWE0N2UwZiwgMHg1ODBjNWE4NSwKKwkweGY0NjE2MGJmLCAweDJlYmFhYmZhLCAweGEzM2ViMDEwLCAweDdkZWI3N2Y5LCAweDkzYTc0MDJkLCAweGQ4NTQ5NWZkLAorCTB4YzExMmYxNzcsIDB4ZmI4M2UyYWYsIDB4YmZjYmY2OTYsIDB4ZDE5NTI1M2QsIDB4OWU0MmM4ODksIDB4Zjc1ZDFkZmEsCisJMHg3ODczYzMyNywgMHhhYzU0NDViZiwgMHhjOGVmYmEzOSwgMHhlMzlkNTliNywgMHhhN2M3NTZhZiwgMHg3YWMxYzc3MCwKKwkweDZjNGE0NWZkLCAweGQ0NGYzNWZiLCAweGI3NWQwMGY0LCAweDRhMmNmOGEzLCAweDZmZmM5OWRlLCAweGJiYzk5ZmJkLAorCTB4ZTk4MWZmMjYsIDB4ZmU3ZWQwYzUsIDB4ZjgyMzkzMzAsIDB4MGE0M2Q2MGUsIDB4ZGIxNTM4NTcsIDB4NTBlNGNmZjcsCisJMHgzYTNmNTAzZiwgMHgxNTZmOWM5NiwgMHhiN2Q3Mzk1NSwgMHhjMjg1ZjkxYiwgMHg1MWYxNzAyZiwgMHgyNGUzMDM3YywKKwkweGRmNzAxZDIyLCAweGZhMDZlOTY1LCAweGY1MWU5NDdkLCAweGFlY2ViOGMyLCAweGJjNzI2YWZkLCAweDQ1NWJmMzRjLAorCTB4OWIyMDNlYmQsIDB4ZGVlODFlOTgsIDB4OWUyM2YyYWUsIDB4NTNjMGM1MmEsIDB4NTJmYzgxOGYsIDB4MjBjYmY1NzksCisJMHhjYzI5NjJiZiwgMHhjZDFkY2JmZiwgMHg3MmEzY2ZlZiwgMHg5MzUwNjVmYiwgMHgzNTVlYmQ1YiwgMHhhZWY5NmRjYSwKKwkweGRjOTYyNGQxLCAweDkzNzc2OTdlLCAweDlmNGI3Mjk4LCAweDdiNWI5NGM3LCAweGZmZjlmOTA0LCAweGYwZDU1ZWI0LAorCTB4NzhmMDBjMzgsIDB4MzUxZTI3NGQsIDB4M2UxZGQ5M2QsIDB4OTBmMjdhOGQsIDB4OGQ1ZTIzMjAsIDB4MWRmZTkyN2EsCisJMHhmOTVkNzkyNiwgMHg4ZDQzZTM1MSwgMHhhYjllMmFmZiwgMHg1MWY0MDJiYSwgMHg3YzZhOWYwNywgMHgxYWE3YzFkOCwKKwkweGVmODk3NjFmLCAweDZjNjhmMGVhLCAweDM0ZmIwMGJmLCAweDk2ZjlhZTE0LCAweDUyOGVkMzhkLCAweDRlZDJkMjU3LAorCTB4N2YyNmRmNzAsIDB4YWFmYjhmMjYsIDB4ZTU4NGYzOTYsIDB4ZjMxMTEwODEsIDB4ZDUzMDNmNDMsIDB4NzUzYjA2OGMsCisJMHgzZDZmZGZlMiwgMHg3Nzg1MTc3ZCwgMHgyYzhiZjEzZSwgMHg0NDVlYTAyZiwgMHhiN2QyZmZiYiwgMHhmM2EwNGVkZiwKKwkweDc5ZTJhNzk5LCAweDU0ZmI0NTNlLCAweDAyMzk5NzRhLCAweDcwYTM4ZTE3LCAweDNmODgxNWNlLCAweGI3ZTIxMTNlLAorCTB4MGEzNGY5MWMsIDB4ZmFlNWY5OGUsIDB4NGM0ZGZjM2EsIDB4YTdhN2VjZTksIDB4OWZhYmJmZjcsIDB4YjdjYjdkZjIsCisJMHgxZDNmNWQyOSwgMHg1MGJiYzg0NCwgMHgxMGJjMzg4YSwgMHg4MWQzNTdjZCwgMHhkZTdmMTRhZSwgMHgwMDYwNWM1MSwKKwkweDUwODhhOWVhLCAweGJkNzdlNTFhLCAweGYzZmIzMjIwLCAweGEzMTljMmVkLCAweDlmYzliZWMxLCAweGYxOWUyYzNkLAorCTB4N2JmNDYwZmIsIDB4M2IzZWFhYmQsIDB4NDFlMzk3ZWIsIDB4NjUwZDlmY2YsIDB4ZjY3YjdmYTMsIDB4YWM0NzIyZDAsCisJMHg5NTY2ZDBiYywgMHhmNzUzNWVjZiwgMHg1Y2VjZGE1ZCwgMHhiZmY5NGYzZCwgMHg3ZGEzYjQ4ZCwgMHhjOTViYjdlMywKKwkweDgyZmIxOGI2LCAweDVmNGQ0NTFiLCAweDdmYTM3NGFiLCAweDhlN2YxZDNjLCAweGU5NzM4N2NhLCAweDUxYjlmMWE3LAorCTB4ZjUzOTliNzQsIDB4NGFlY2UwODQsIDB4MzRmYmY4MDcsIDB4YTFmYjBmY2EsIDB4MDZiZTA1ZjgsIDB4MjM1YjM2ZmMsCisJMHhlMjMxYTU0NSwgMHhmOGE5Y2Y3OSwgMHg2YmUwNzg5YiwgMHgwYzJkY2ZjYywgMHhjNzgwMGJlNSwgMHg4YmFmM2I0MiwKKwkweGM5YTkzYzgzLCAweDE0MzI1MGViLCAweDYwNzg5YWUwLCAweDUzNDdjZmY5LCAweGUyMWVmNjNlLCAweGViOGY5MGRkLAorCTB4M2M5MTlkMGQsIDB4MjM2MWZjMzEsIDB4YjA3ZmExM2UsIDB4MmU4ODhmMzMsIDB4NjI3YmQ3YzQsIDB4ZWJjMDEyZTksCisJMHgwNGFjYjM3YiwgMHg5NWRmMzVmNiwgMHhlMGIxNTVkYywgMHhmNWIzMzMyYywgMHhiZDI5MmU2NiwgMHhiZmZiOGEzMCwKKwkweGIzZjliZjBmLCAweDhhMDJlMTFkLCAweDk2NzZiMzhmLCAweGZmOTVkZGY3LCAweDc1OWZkYzk4LCAweDBlNWE4MTcxLAorCTB4ZjU2NzkwZjgsIDB4NzEwMDJlNjQsIDB4ZjllMjIyYjQsIDB4ZTUwZTA0ZjksIDB4ZmViNDUyN2QsIDB4ZmU5YTZmY2EsCisJMHg1NGY1ZTQzYywgMHg4OTk3Mzg4NywgMHgxMTBiNTdiNiwgMHhkYmQ4ZjgwOSwgMHhmYjAwNTNiNCwgMHgyODk5MjZmZCwKKwkweDZhMTA4ZjE4LCAweDhhOGNjZDg2LCAweDA1MTExZDdiLCAweGRmZjM1N2M0LCAweGY4MGVkZGU2LCAweDRjZDMzNzNkLAorCTB4ZTg2NTJlMDAsIDB4MDFkODI3MTksIDB4NTEyMzQyZTcsIDB4ZDc5YmJhMGUsIDB4NWE2NDdjMWYsIDB4MTBmZDA4YTEsCisJMHgzZjIzMGZlNCwgMHg3NGRiMjUxNCwgMHg0OTkzNTlmNSwgMHhkYmE1MzczZiwgMHg5NTY0NzM0NCwgMHhlYWZkMDYzYiwKKwkweGJkNjdjNjI0LCAweGZmOTY2ZmQ2LCAweDA0ZGJmNGNmLCAweDVmMThkZmFhLCAweGVkZmFkMThiLCAweDdkZjE4OTI2LAorCTB4OGQ0YjdlOTQsIDB4ZDY1NmRmYTUsIDB4MTdjMGE5Y2EsIDB4YTc2NmY3MmIsIDB4YmU1NzVkMDIsIDB4MmM0ZmE0YjEsCisJMHg4ZmJhZjZmZCwgMHhhODZmZjdmOSwgMHhmZDZkZTY3OSwgMHgxZTFiN2VhOCwgMHg1MWZhZGZhNSwgMHhhZTIzMTZmZCwKKwkweGE1ZWE1YTNiLCAweGNmZmNiMzdlLCAweGEwZWJkZmM4LCAweGI3Y2M2MmRmLCAweGE2OWZjNTU4LCAweGI1NDM4YWRmLAorCTB4ZmI4YWRmYTgsIDB4YTk3Y2JhZjEsIDB4ZmE0ZjUyNDksIDB4YjM5N2VjYWQsIDB4NmRiYTJlYjAsIDB4ZjAwN2Y4MzEsCisJMHgwZGVkZmEwYSwgMHgzOGMxY2Y1NSwgMHg1ZGZlZTdhMCwgMHgzZDI3N2Q3MiwgMHgzZDViZDU1NywgMHg2Nzg0M2ZmNywKKwkweGVjYWRjZjRkLCAweGQzM2RhMWNmLCAweDllOTkwZjk1LCAweGY0YzU5OTViLCAweDRjYmRjYWRjLCAweGM0MWNhZGNmLAorCTB4YmY1MTljZjQsIDB4NmZkMTc0MTUsIDB4MjFlYWZiZWMsIDB4MjNmNDdiZjQsIDB4MWI3ZDdlYjMsIDB4MjM5OTJmNmQsCisJMHhmZGY0MmRiYSwgMHg5ZjNiNTkxMiwgMHg1YTNhMzM1MSwgMHhkNGJiZmRkZiwgMHg5ZjczYmU4ZCwgMHgzZDJlNzNjMSwKKwkweDgyM2ZiYmU5LCAweDdhODQxYmJlLCAweDkxYzgyMDZjLCAweDFjNmUzZjkxLCAweGQzZTVkMzY4LCAweGIxZjVmN2JkLAorCTB4NzkwNDVlZTcsIDB4ZmU4ZjAzZjksIDB4ZTYyNjA3ZjcsIDB4ZmFmYmVkMjcsIDB4YmI5MDQ4ZDgsIDB4YWExZTAwZjcsCisJMHhmOTUxOWVlZiwgMHg0N2U3ZDVhZiwgMHgyODc5M2E3ZCwgMHg3YmFhZjc5MywgMHgxYmFhZmUxOCwgMHhkNWRmMzYzOSwKKwkweDc1ODY0MDdjLCAweGQxMTc2ZmUwLCAweDJmN2RiZThmLCAweDliNjdhM2YzLCAweGMwZDhmYTViLCAweDIyNWZmZmNmLAorCTB4MmJmZDI1Y2EsIDB4ODdlMjhiMjksIDB4MzAyYjE3MzksIDB4Y2UyYmI5ZWUsIDB4Y2NmYzA1YjksIDB4ODBiMTAyMzksCisJMHhkMGUwYmIxZCwgMHg3ZWMwMjc4ZCwgMHgzZDcxNzA1ZCwgMHhlMDBiYmRkYSwgMHhjOGU5MjI3OSwgMHhhMWRiOThmYiwKKwkweGViZjZmNTI3LCAweGFmOWRhNmJjLCAweGY5YWU5MDY1LCAweDhjY2QxMzEwLCAweDcxNTcxMzJlLCAweDVkNTljZDgxLAorCTB4NWRhODIzZjMsIDB4YzYyZGY5ODYsIDB4YWJkZjg5M2MsIDB4NDdjZDlmZjMsIDB4OGZlNDVmMTAsIDB4ZTVmOGNjN2MsCisJMHg3Mjc4OGRlZiwgMHhhZDU0YmMzMywgMHhhYTc4ZjVlNiwgMHg4OWUyNjJlMSwgMHgyY2E0YmE1MiwgMHhiNzJmMTNhNSwKKwkweDk3NTkxNGJmLCAweDM5Y2JlZDAxLCAweGYzOGNiN2Y0LCAweDljNjZmMGQ2LCAweGNkNDc4NmJmLCAweGJlYTA1OWJmLAorCTB4MjQ3NDNmM2YsIDB4ODY4ODllNjYsIDB4MjJmOTJlZTcsIDB4ZjgwZGRlMWEsIDB4MzNkMzRiNzgsIDB4MjA2MTkwZDcsCisJMHgzYzk4MWY5NywgMHg3YzBkMWYzZiwgMHgxNzhhN2JmNCwgMHg3M2FkZTcwYSwgMHgyYmNlZTkwNywgMHg2NWUyYTNiZCwKKwkweDYxNDhlN2FhLCAweDI0NzgwYzhhLCAweGYzNjdjMDM1LCAweDk2YmU3N2NhLCAweGIzNzdlNzQyLCAweDIxMGI5NTkyLAorCTB4OTM3ZjU5ZjUsIDB4Njg4ZjEwM2MsIDB4MWVhM2I2YjYsIDB4OTQ3MGY4ZDQsIDB4NTk4NWM5OTksIDB4ZjVlZjJiZDUsCisJMHg3YWUyMTU3NSwgMHg1MGI5YzRkMywgMHgzZDA2YzJiZSwgMHg3OTk5ZTZhNywgMHhkN2YyNjFlZiwgMHhiYWY3ZmRjYywKKwkweDY3ODg1MThjLCAweDkxNDgyZTU4LCAweDVkMDE1ZWI2LCAweDg2YTczZmU4LCAweDQwYmM1ZDE4LCAweDY5Y2ZmYTE3LAorCTB4ZTAyMGZkYTQsIDB4NzM5OTNhYmQsIDB4YTZmZGUxODcsIDB4M2YwMmY3OWQsIDB4Y2ZhNTZlYmQsIDB4MzljYmNlNDEsCisJMHgwZTg2MTZmNywgMHg2NWNhN2E3YiwgMHhjNTg4NThmOSwgMHhjOGNjMThjNywgMHgxNzNmNWNlYiwgMHg1ZDg5N2JjMCwKKwkweGU2ODk5M2VkLCAweDhlMDBmNzk2LCAweDM2NmU1NDg5LCAweGZkMDBjM2MzLCAweDQ2ZmU4YTJmLCAweDA3YzhjNWZiLAorCTB4NzUwM2U1M2QsIDB4MmFiOWVmYzcsIDB4M2EwNzVmOWUsIDB4ZWRkZjAxZDgsIDB4ZGU0M2Q4MTIsIDB4YjQ3ZjViMzAsCisJMHgxNzIwYWY3NiwgMHgzYTM0ZGUyMiwgMHg2NWY1ZDEzNCwgMHgyOTgzYTMxNCwgMHhkNjZmOWUwNiwgMHhiZDllMmFlYSwKKwkweGVmODQ0ZTIxLCAweDZmZmVhMDZmLCAweDdlYmIwNzEyLCAweGY4ZDQxZjVmLCAweGM1NzcyY2RkLCAweGQyMTVjNDEzLAorCTB4ZTgwNmY0YTMsIDB4Y2Q3ZGU4YjcsIDB4MTFiN2E2ZWEsIDB4YTZhZTM3NWYsIDB4MTVkYzk5ZTYsIDB4NDA3ZDFhNWYsCisJMHg2ZjBlNWUwZiwgMHhkMzRmY2FkZCwgMHg2MTc5OTg5MSwgMHg0NjdlNTVkZiwgMHhiM2YyZjU5OSwgMHhlNmZlZGFjZiwKKwkweGVkYWI4ODcwLCAweDkwYWY1MGU1LCAweDdlMmU4MjUwLCAweGVjY2NkMzMwLCAweDA3YWI2Njk2LCAweDBkZmRiY2Y5LAorCTB4ZWU0NWJkZDEsIDB4YThhNjdmYWEsIDB4MjU3ZjAxNzQsIDB4NjRlMjdjZmEsIDB4NGRlODA4OTgsIDB4YTY3Yzk1OTcsCisJMHhlMzAwN2JjZCwgMHhlMGY1ZThiNywgMHhlOTA3YWI3NSwgMHgzM2ZmNWRkNywgMHhlZGZlY2NjYywgMHhlYWQzMWVjZSwKKwkweDkwNzhjM2Q3LCAweGM3ZWIyOGQ3LCAweDVhNDdhZTMzLCAweDc5YTdhOTVjLCAweGJmNzFkNDc5LCAweDcxYjRiY2VmLAorCTB4ODRiZWViYmUsIDB4M2M2MGI0OTcsIDB4ZDg5ZmRiNGUsIDB4ODk3NjdiYzMsIDB4NzMxNjNmNjAsIDB4MGExMDdkYmEsCisJMHhmZTZmZWUzOSwgMHg1OWJmZmExMywgMHhmZjdkZGQxYSwgMHg1MzBhM2YxMCwgMHhlM2JlYmYzYywgMHg5ZjYzOGM0OSwKKwkweDM0YzhmNjdlLCAweGFmMTU5ZjkwLCAweGU1NDJjNGYwLCAweDgzODc3NWFmLCAweDg4OWU1OTg0LCAweDQ1NDI3NjA0LAorCTB4NWRmYjhmMjMsIDB4Y2RlNzA4NDQsIDB4YTgzM2IyODgsIDB4ZjFmMGMzMjcsIDB4NWVmNTAzYTIsIDB4YTA3MzJlYzUsCisJMHhmMTVmN2U4NCwgMHgxMDM5NjdmMiwgMHhjMzVkNmI3ZiwgMHg1OWZmOWZmNCwgMHg5MWZkMWY5NSwgMHhhODA3YzgxYywKKwkweGJjZmVkODEwLCAweGE4OGYzZTkxLCAweGI3NmE3OWZjLCAweDZmZTgwZTZkLCAweGM3M2IzYjZlLCAweDJkOWMxMTViLAorCTB4MGNlMmEzOWEsIDB4MTY0NTliZjcsIDB4YzM2ZGRlZTcsIDB4MzNmZjZjM2MsIDB4MDMzMWU2MWMsIDB4NDhlN2QxN2MsCisJMHg1M2QwZmNiNSwgMHg1Y2JkMzBjZiwgMHhlMDA2MjRkMSwgMHhmNmM1NzAzYywgMHgxNzEwYWQ5ZCwgMHg4Y2QwZjhhZiwKKwkweGZiNzdhYmY2LCAweGQzZWMwOTE5LCAweGNmM2UyZmM5LCAweGYxMzcxYmNlLCAweDk3Njg3OGJhLCAweDNlNzZlNDM4LAorCTB4NTlmODg2NmMsIDB4MDFlYTE1NjMsIDB4ZjU4MjNmNWEsIDB4ZmJmNzFhYTAsIDB4MTViMjcxOGUsIDB4ZDk3ZGVlMmYsCisJMHhlMmI4NTE0ZiwgMHhmMTNiNGYzNywgMHgzNmNiNzA1YywgMHhiNzIzYzYyNywgMHhhMDVmN2U1ZiwgMHg3ODMxZGM0YiwKKwkweDljNzcxYWJmLCAweGY1YzEwNWZhLCAweGYxZGM3NjIxLCAweDIxMjdjYWE0LCAweDQ4ZWUzZWIzLCAweDNjNjEyN2I2LAorCTB4NTc5OWMyOTIsIDB4ZDE3ZTIzMWEsIDB4NWZjZmZmYzEsIDB4Y2RmNjAyNzgsIDB4ZjJmYWVkNGUsIDB4ZjJiYjgwMDksCisJMHhmYzRmNzM5YiwgMHgyYTkzZTI5NCwgMHhkYmFjMTcyMCwgMHhjM2RmNjdkZSwgMHhiYmVkMDY3ZCwgMHhkMjdkNTVmNywKKwkweGI4ZDNjY2ZhLCAweDI3ZmFkMzRmLCAweDZiN2ExYmIzLCAweDI2NDVmYmRkLCAweGVlYjQ1M2VjLCAweGUyMDUzYWZjLAorCTB4NGVmN2FiYjgsIDB4ZjU2ZDdmNDEsIDB4NDk1MzkzNGIsIDB4MmI0MDdmMGMsIDB4YmQwMzdmODEsIDB4ZDIzMjI3ZDgsCisJMHgzOWIxYjlhZCwgMHg0ZDNjZTAxMywgMHg3N2ViMGVlOSwgMHg1ODM5M2M0NywgMHhiMmY0ZTJjNSwgMHgxMWRlNDcxYSwKKwkweDRiYWU1ZjdiLCAweGM2NzFiOGRjLCAweDNhYzFkN2NkLCAweDY1YmEyOGRlLCAweGYxZjg4YmQyLCAweGUxY2Y0YTYxLAorCTB4MGVlM2EwYmQsIDB4MzgyMDlmNzUsIDB4ZTNmMWIyZjUsIDB4NGEwZmYwZDMsIDB4N2Q2NjBiYWYsIDB4ZTM0MmZlMWMsCisJMHgwYzdjZmY5MiwgMHhiYTkzMWFkYSwgMHg3Yjg3MWY4ZCwgMHhkZjZkM2Y4MSwgMHgyMTU5YmY2ZiwgMHg1ZGEzOTAxNiwKKwkweDFlZGM2MWNmLCAweDBmN2Q0N2U4LCAweDg1ZmNmYWQyLCAweDFjYmI4ODRjLCAweGMwZWZkYjE3LCAweDY2YmRlYmZjLAorCTB4ZDhhYWEzY2MsIDB4NTNjYTAxZmIsIDB4ZTM2ZjRiZWIsIDB4Zjc1MTFhYmUsIDB4Yzc0OTVhZGYsIDB4NTEyN2RiMWYsCisJMHg1NmVmM2E3ZCwgMHhhYjNiOGIwNywgMHhiNGI4ODA3NCwgMHg2YWU3YzRlYywgMHhiNWYxOTlmYywgMHgyZWVlOTcxNiwKKwkweDMyZDYzZDFlLCAweGFiYmZlZDgwLCAweDViNTU5MWZiLCAweDQzMTEyY2ZmLCAweDBiMWI5ZmJjLCAweGQ5NzIzYWY0LAorCTB4MGYwZDU0N2QsIDB4OThjM2MwMmUsIDB4ZDg5NmZkZTgsIDB4ZmQ4ZWZmZjEsIDB4ODBkZDAzMTYsIDB4NzU4ZjYwOWUsCisJMHg3YWQwYTdlYywgMHgwN2FiODgzZiwgMHhlZDYyMGZiOCwgMHg2NjZlYjVkZiwgMHg2MmFkMzRmYiwgMHg2ZDQ1YmNlYywKKwkweGM1YTQ2NWZmLCAweGU4MTJlZmIwLCAweDRmNGJiZWRkLCAweDc4YWVmOGYzLCAweGI0MjcwNmNhLCAweDlkN2M1NzRmLAorCTB4YmY1YjE0YmEsIDB4ZDRlMTZhZGYsIDB4ZTdiZTAzN2IsIDB4NjcyNTdlYmUsIDB4MDU5ODFiY2MsIDB4NzhkNTU5N2MsCisJMHg0YTdiMDI0NCwgMHhmOWI0ZGY1YiwgMHhlN2ZkNTI5ZSwgMHg3OGYyY2Y1MywgMHhiMDVkNjQ0ZSwgMHg1MWJiZjUxOSwKKwkweDE2MTM1NDdmLCAweDViYzIzNDM3LCAweGFiN2E2MTZlLCAweDFmYWQ4OWJhLCAweDAyMzk3NmE3LCAweGE5Y2ZkYTc2LAorCTB4YWY5MWJiMDMsIDB4OTExYzc3YWIsIDB4ODNiZmI0ZmMsIDB4NDUyMzdmZGIsIDB4NjBhY2YyYTIsIDB4YzE0NDA4ZmQsCisJMHhmZDg1ZWE3ZiwgMHg4OTdmNmMzOSwgMHg3MWM2ZWJmOSwgMHhmMWM3NTJlZSwgMHhlMzhmNjI4NiwgMHgzNzQ2NzFkZCwKKwkweDUwN2YwYWNlLCAweDJlN2VlNzYyLCAweDQxNDlkZTNmLCAweDlkZmQwZDk5LCAweGU0MDkxMTZjLCAweGYyMGM5ZmZkLAorCTB4ZTMxODgxYzUsIDB4NWE4OGI1Y2YsIDB4MGZjOThiM2MsIDB4MWNmMTQ3NWQsIDB4YmI5ZDgzYTYsIDB4YjQyNTEzZTQsCisJMHhjNjNiNTdiYiwgMHhmZGU3MDg3ZSwgMHgxOTI0M2I1NywgMHhiNTc1MTdlMiwgMHhlZWI1MmYyYywgMHg0MDY5ZGNkZiwKKwkweDViODRiYWVmLCAweGRlYWUzZjcxLCAweGIyNTc1ZjgwLCAweDFhZTIxZjJiLCAweDUxZDJjMmFlLCAweGJkNDZhZWMwLAorCTB4NzQ5OGEwOTMsIDB4MTQ3NmFmZjAsIDB4Y2UxNGNhYTcsIDB4NDY5ZGFhYjUsIDB4MGI5ZTM3MDQsIDB4YzU0NTlkZTUsCisJMHg2NWRlMWYzMCwgMHhlYzYzNTk3MiwgMHg1MmY2ODgzYiwgMHg4YmMyODllMiwgMHhlMzlmZDJlOCwgMHhjYTQ2OTcyNCwKKwkweDdmOTY4ZmQwLCAweDM5Njk2OTUzLCAweDA1MmU4ZDg4LCAweGIxODU4YzUzLCAweDk5ZmNkZGVjLCAweGRiNzc5YzJlLAorCTB4NTA3ZmQ1MGUsIDB4NjE0YWVjODgsIDB4OGViMDY0NzksIDB4Y2Y4YWVkYjQsIDB4NDNmMWMzMjEsIDB4YjQ3ZTUwYTIsCisJMHgxZGI5Y2ZhOSwgMHg1ZTgzZjdmYiwgMHg0YTI0ZWI1YSwgMHg4YTMzOTUwMiwgMHg4NmNmOTk1NSwgMHgyYzIzYWNmMywKKwkweGU5ZjAzNjVjLCAweDg1N2FmZjk5LCAweGYxMGQ2YmY2LCAweGQ5YjQ1N2U4LCAweDI1NTI3Y2I1LCAweDQ2Y2NlNDAxLAorCTB4NDFiY2M0MWUsIDB4OTM2ZmU1NjAsIDB4ZTYzNGUxM2EsIDB4MjU3ODEyMTMsIDB4Mjk4ZDNlZWEsIDB4YTFmZDFkYmMsCisJMHg3YzU4OWJiMywgMHhmZjU3Mjc4MCwgMHhjZjhiMDI3YSwgMHhhZmMwMDA5MSwgMHg1NDJiMmZhZSwgMHhlMjEyY2YzOCwKKwkweDNiZmJjMzBlLCAweDU4MGYxODFjLCAweDk0MjJjNmY2LCAweDM0NDNhMDFmLCAweGY1OGE5MmJlLCAweGFjMWI1ZWU3LAorCTB4NjdmMDFjY2UsIDB4YmY1NTVhMzYsIDB4YzBiNGFmYzYsIDB4NmFjNTliMzksIDB4ZjU0YTdkYmYsIDB4MThhOTYyZTcsCisJMHg5NzVlNDFmYSwgMHhlNWZhZjJhOCwgMHg5ODQzYTJkMiwgMHg4YTU5ZTY4ZiwgMHg4ZTc1M2U3YSwgMHgzMWFjZGNmZSwKKwkweGFhMjA0YjRmLCAweGZlNjAxYzlmLCAweGFkYmM5NzczLCAweGI3MDhjZGE2LCAweGM1NmI3ZjMxLCAweGMzNWQ3ZDc2LAorCTB4MzdhMDI3ZTMsIDB4MTI3NDAyYWYsIDB4ODBlMmU1ZmIsIDB4MzIzN2UyM2QsIDB4NDYxM2Q3ZjgsIDB4OWFmYzc3N2QsCisJMHhiNWY4ZjRkMywgMHhkYWZjN2FjYSwgMHhhN2YxMTg4NiwgMHhhZGMzYWZjNywgMHg5N2U2OTdjNywgMHhmOGRmODc3NiwKKwkweGM4NzNmYWIxLCAweDhhZmMyYWZmLCAweDU0OGVkNTU2LCAweDRhZmY0YWYxLCAweDY1NGMyOTJkLCAweDQyZTlkYzAzLAorCTB4MjhjMmU1MTgsIDB4MzBmNjE5NDcsIDB4OWZlZWZmMDcsIDB4YWZjNWE4MWMsIDB4ZWZkNDBlZGMsIDB4Yjg3Y2VhNjksCisJMHgxYjNiZWNjNSwgMHhmMDBmMTFjOCwgMHhlMDhlNTFiYSwgMHg3OWU4MjAyNCwgMHg3NWQ4ZjkxYiwgMHhmYWM0MGFjYywKKwkweDRkN2I3YzhjLCAweDM1NWNmNGY3LCAweDBiMjNkNWZkLCAweDgwOWI1N2U5LCAweDNmMjM4NzdmLCAweDg5YmVmM2IwLAorCTB4MDU5NzUwMjQsIDB4YzE3NmVhNzIsIDB4NTlmNDFkZmEsIDB4Yjg0NThiZGMsIDB4MTdiODg1ZjcsIDB4NWVmYjgyMGYsCisJMHhhNDNlNTg1YywgMHgwZGI0YWJlNiwgMHgzMDZlNzgyNSwgMHgwMjlmM2UxOCwgMHhkY2ExZTlmYSwgMHhmN2EwNjlmNiwKKwkweDI5NDg0YmJjLCAweGM1MWZjMWU4LCAweDBmMDNmM2IxLCAweDM4YmY2NWE4LCAweDg1YWJkNTQ5LCAweGVmODI0YzZmLAorCTB4ZTcwY2EyNDMsIDB4ZGI0MmRiZDUsIDB4ZGVhMDgzMmMsIDB4MmEzZGUzYzQsIDB4YWJmYTg0ZGUsIDB4OTBkNmZjNjAsCisJMHg2YzVhZTBjOCwgMHgzODgyMGMwOSwgMHhjNzExNWVjOCwgMHgwMTNjNWQ2ZCwgMHhkODc2NjVjZiwgMHgyZjk2MjE2ZiwKKwkweGNjZmExNmQyLCAweDlmNGEyOGI5LCAweDdhM2QzNmI3LCAweDM2YjljNDE1LCAweGE5ZTc2MjlhLCAweDdlOWFiMTRjLAorCTB4ZWMxYmZhZDgsIDB4YzUzN2I3OTIsIDB4MWVlYWYyY2EsIDB4NTFlNzQwMWEsIDB4YmFhY2ZkM2QsIDB4Yjg3OTMzMGUsCisJMHhhYmYzYTU1NiwgMHhmOWM0NmY0YiwgMHg2NGUyMTRiZiwgMHhmODhhNDc1OCwgMHg0NjFhNmVkYiwgMHgzZGVlMzllNywKKwkweGIwY2Y4ZDQxLCAweGY1MjhlNTc4LCAweDJmZDAzYWZkLCAweGRmZWI1ZmE4LCAweGRkYzNlOWU1LCAweGU3MDIwNTQ3LAorCTB4MmNkNTQ2ZjQsIDB4MTVlYjdmNDUsIDB4Y2E3M2U1MjcsIDB4NzA0YTc5MTcsIDB4NjE2ZGYwMjQsIDB4Y2RlZjAxMjgsCisJMHhkMDRjN2VmMSwgMHgyMmRkMWZhZSwgMHg0ZjMzZjhlOCwgMHgyMmYzNTc1ZCwgMHg0NGMwNWU1NCwgMHgzZWRmNTBmOSwKKwkweGVjMTgyMjJlLCAweGZjMGYwMGEwLCAweGZkNzFlZDc1LCAweGQ1NTY4NWYzLCAweDE0OTI3MmVlLCAweDk3MGRmM2UwLAorCTB4NWVmMjBlNzgsIDB4N2I4OWRhZGIsIDB4NmRiYjg1MGQsIDB4YTM4NDVmNzEsIDB4ZmE5YzNjZWQsIDB4YmUyNWU1YTUsCisJMHhiZjdhZDYzOCwgMHg2MmY4Y2FjYSwgMHg5ZDcwNDRhMywgMHg4ZWQ0YjhkOSwgMHg0YjAzYzVmMSwgMHhmNTgwYWUyYiwKKwkweDdiMWZhYmZkLCAweDhlNzU4OGFlLCAweGM1M2Y0YTNjLCAweDI1MmM3Y2IzLCAweGZlMDU4YzllLCAweGJjMzFjYjVlLAorCTB4YzY5N2E3ZDcsIDB4ZjhkN2Y3YzgsIDB4OGQ2ZmUzNTksIDB4YzY5N2QzYWYsIDB4MzVlNTYyNzksIDB4NzY2NTYzN2UsCisJMHgyMWQyYzE1YSwgMHhkYWZlMDQ5YywgMHhlMzhmMGUzZSwgMHg1Y2YxYWViNiwgMHg5ZjhkZGNmNiwgMHg3ODAwYzlhYywKKwkweGQwZTc0ZGJjLCAweDM4ODRiNmVlLCAweGIxYmQ5NjI1LCAweGZlYzRlYWMxLCAweDZiZjhkNzViLCAweDJlZWY4ZjIxLAorCTB4MjdhMDljMmEsIDB4MDM3N2VmYmIsIDB4ODEzZjViZmEsIDB4Njc3YzJjYTAsIDB4NzNjMzJmYTksIDB4NjQyYzRiYmMsCisJMHg4NWJiYzQwYiwgMHgxYzViZjRmYSwgMHg2ZjkzZmZjMCwgMHg3ZGUxNDc1OCwgMHhlYjg0ZDRhYywgMHg4ZGQxNDZlYiwKKwkweDA4YWJmYmYwLCAweDFhODNmOGMxLCAweDhkMzdlZGNmLCAweGNmM2U4ZTZjLCAweGZmMzU4NGZjLCAweGM3YTUyYjU5LAorCTB4ZDIxNzU2YjMsIDB4ZTZlM2M5MjUsIDB4M2ZmNzdlMDAsIDB4ZjIwOWRiZmUsIDB4OGNkMTc2ZGQsIDB4ZmFhYmVjNzQsCisJMHhhZjc3ZGE0MywgMHgzNmRkOTk1OSwgMHgwYWQ5NGUzMywgMHg2NGYyOTNkZiwgMHhjN2I3MTM5NCwgMHgxMjNjNWVlOSwKKwkweDc4YTA0ZGVlLCAweDRlYTM5MjhmLCAweGJiZjFmOWZhLCAweDcxZDUwZjQ0LCAweGJiNDQ5ZTE0LCAweDI4OTJmOTA5LAorCTB4YzVkMmVjOGEsIDB4NDcyOGZkMjksIDB4MzA5MDVjOWEsIDB4NGQ4ZjIwNDcsIDB4ODg1Y2FiZDMsIDB4MWNhODNiMGIsCisJMHhjM2Q4YjI4YywgMHg5NjI0NzdlMCwgMHgxMDUzNzlkMywgMHhmYWMyYzRhYywgMHg3NTRlMTE2YiwgMHgzY2M2Y2I5YywKKwkweDc5OTdjYTc5LCAweDYwOGEzODcwLCAweDcxMTIxNDQ4LCAweGRmNGQ3ZmExLCAweDZkN2E3YTZhLCAweDU5Nzk0MTAyLAorCTB4YTgxMGIwZmIsIDB4MTI2Y2ZkYTMsIDB4YWY4ODU2MjIsIDB4MDE3MjI5NjQsIDB4MGEyNTFhYTQsIDB4ZWYxNzllMzIsCisJMHhmZjMwNGU1ZiwgMHg3OGZkOTZkMiwgMHg0MmRkODc0MiwgMHgzN2M0N2U4NSwgMHhmYjU4ODJmYywgMHg4NjljN2M3OSwKKwkweDQwMWZjZjJmLCAweDZhMWNlNDZmLCAweDhkZTYwMDNmLCAweDczYzZjYWRiLCAweDNiNDE2NmJmLCAweGE4N2Y0M2JkLAorCTB4YmE5MTU4ZjYsIDB4ZGNmYjhlZmUsIDB4YzIwOWYyYzQsIDB4M2VmNDQ4OTMsIDB4Njg3ZjUxOWIsIDB4ZWJiOGM5ZjYsCisJMHhiZjYwNmIyMiwgMHgxODlmZGM2OCwgMHgwNTViYjQ5YywgMHhjZWFkMWJiZSwgMHhhODlmNDNiNywgMHgxMDk4ZTZlYiwKKwkweGZiZjQyN2Q1LCAweDY2YzhkMGRjLCAweGY3MmIwN2I4LCAweDVkYzcyNjYzLCAweDNmMjFjOWY0LCAweGJlZmJmODBmLAorCTB4MTdjOGM0N2EsIDB4MmU1NGMyMjMsIDB4MzJhMWY2ZDUsIDB4ZWFlMWE3ZGMsIDB4MTlmYjQzYTgsIDB4OWU0OWRlODMsCisJMHhlZDE1MmEzZSwgMHg4Y2RmOTU1YywgMHhkYmU0ZDY3OCwgMHg3N2I5ZjcyOCwgMHgwY2NkOWJiYiwgMHgxYTQ3ZTYyZSwKKwkweDI3NWMyMWM2LCAweGU4MzY3MjFjLCAweGIwNzhiN2E1LCAweDI5ZjJkYmY3LCAweGJmNWMyODFlLCAweGY0YTNmOTAyLAorCTB4YjgxZjM4NGIsIDB4MjFiZmU2MDEsIDB4ZTQxNWJkNzQsIDB4MjdhZjdiZTQsIDB4NTQ3NWZhMjEsIDB4YmNkM2Y2OWUsCisJMHgwZmFlM2UyNywgMHhjMDRlMjdhZSwgMHhmM2ZlZjU0MywgMHg0NjEyN2FlYSwgMHgwMWM4Nzc3YSwgMHg3OGU4OTM5NSwKKwkweDQ2ZmZjNjg5LCAweGEzZTRkNzdlLCAweGM4ZGUyZTBlLCAweDA0NzY3M2M2LCAweDBiOWU1OWQ2LCAweDY2MzA2NWUyLAorCTB4NzgwNWM5YjIsIDB4M2FlZGVjZDUsIDB4ZmUyNWJlZDUsIDB4NTZmZmI0NzQsIDB4MWViYTg4YmIsIDB4NGY4MDA2NjUsCisJMHg1ZWNkNDRlYSwgMHhlM2EyNWI3NywgMHgwNTFkYWI1MywgMHg0ZmRiOTdhOSwgMHhmZWE0NWVmNSwgMHgxYjM5ZDQ1OSwKKwkweGZlOGVkMGFmLCAweDg0YTJmNzliLCAweGZlMzdiZmNmLCAweDc5MTQyODlhLCAweDg5OGRmYzNhLCAweDdmMTVkZDFiLAorCTB4YjA4NDcxZjEsIDB4OWZmZWMyZmIsIDB4MjMwY2RmOWYsIDB4NzcyN2RjN2YsIDB4ZTI1YWVmY2UsIDB4ZjU0MjI1NzksCisJMHhmNWFhZGU0NywgMHgzZjE5MzY3NSwgMHhkNzk2OWMzOSwgMHhmYjY4MmY1NSwgMHgwMWU5ZGQ5ZiwgMHhhOThmYmNhMywKKwkweDcwYzY2ZmFjLCAweGVlZjIwZjRiLCAweDI1ZjhhOWI1LCAweGIzZTgwNjY0LCAweGI3NmE2MWYxLCAweGZmOTU3NTY0LAorCTB4YmNmY2VhZjMsIDB4YjZmNzg2MzYsIDB4ODMwN2RiNWIsIDB4M2RlN2FkM2MsIDB4MmY2ODcxMzUsIDB4YjAyNjRjNDYsCisJMHhiNDEzNzYyYiwgMHg4ZmZiZGM3YiwgMHg1YmRlNTEzYSwgMHg0ZmViNzQ5MiwgMHg4ZmMwYmI1NywgMHhhN2Q5YTlmMiwKKwkweDdjNmE1ZDlhLCAweDU1MmVjM2FmLCAweDNlMmQxYmQ3LCAweDc5NTEzNWNhLCAweDE5M2NmMGExLCAweDFjMDNmMWU3LAorCTB4YmZlNjJlNzUsIDB4ZDA1NzAxYzIsIDB4M2Q1ODRmNjMsIDB4MzY1ZmMwNzUsIDB4ZDgzODk3M2EsIDB4Y2UxMjE5MmYsCisJMHhiMDk2ZjE2MiwgMHg5M2JiM2U0ZSwgMHhkZTQxOWI0NywgMHhiMDNmMTQ4MiwgMHhmYWU5ZjlmZSwgMHgxZWViODgzNywKKwkweDA5NzFiMTllLCAweDg1YWE1ZTBjLCAweDk3ZTliZWMwLCAweGQ1NjBkODQ3LCAweGZiYzdmMzA0LCAweDZiZmJiMGU1LAorCTB4ZmJiMmU1ZmEsIDB4MzFjNzM3MzIsIDB4YTE4YjY1ZmIsIDB4ZmE1YWMyN2MsIDB4MTQ0YmNjMTgsIDB4ZmI5Y2RmODgsCisJMHg1MDA2ZTFmZCwgMHg2NGY5MGUyMSwgMHhmODAwZDI5YywgMHgzODJiMTRiMCwgMHg3MTE3MGM4ZiwgMHgxOWRlOTQ3MywKKwkweGJjODM5MDQyLCAweDk5NGFjNDg5LCAweGQyNDdmMTYzLCAweGZiNDhmZmI5LCAweGYzOTEyOGNiLCAweDA2MzIzZjgxLAorCTB4OWEzNzNjMTIsIDB4OWU3ZDhhMTEsIDB4ZjEzODk1ZTgsIDB4OGRlYmQ5ODcsIDB4YmNjMWNlNWQsIDB4NDFjZmNhYTIsCisJMHhhOTM3Y2U4OSwgMHhlOTgzOWQ4NCwgMHhmMDUwZmI4OCwgMHg4ZWFkYmYwMSwgMHhhZGIyNzE1YiwgMHhhYjNlZDgxNywKKwkweGQ5ZTE4MTNmLCAweGMxMDFiZmU4LCAweDVhODI1ZTYwLCAweDgyMjI1N2JmLCAweDJiZmQxMTM1LCAweGRmYWZmMDNmLAorCTB4Y2FmZjQxNjQsIDB4ZDA0MWRjNDYsIDB4YjFjNDFmYjcsIDB4Y2UzYWVjZjgsIDB4YmZlYTFlYmQsIDB4NzAyZGRhMTAsCisJMHgzNzI2OGZjZiwgMHgzNDNjM2M5YSwgMHg0MGI3MTZlMSwgMHg3NzVlNzU1ZiwgMHg1ZjdjMDczNiwgMHgwMGVmMTcyYSwKKwkweDljMjc1YjllLCAweDY3MTZiYzFkLCAweGY4Yzk5ZWQyLCAweGY5NzVlMTRlLCAweDlhZmQxYWY2LCAweGFjZmQxZDQ0LAorCTB4ZDY4OTU3MTAsIDB4MDg2OTBlZjMsIDB4NWNhZGVkZDgsIDB4YWFmYzFiOWMsIDB4ODMxY2U1ZDYsIDB4ZTdhOGIzOTcsCisJMHgzY2RkMDQxMSwgMHgxZmNjNmNkMywgMHhlN2Y1NTM2OSwgMHg5MGIyZTNkZiwgMHg4NGY1YjUxZiwgMHhjNjNkNmZjZSwKKwkweGU4ZjMwZDdmLCAweDM4NmE4NzM4LCAweDk3M2M2YTc3LCAweDExZGQ5NjlhLCAweDdjYzc0YTA3LCAweGVlMDk1MmRjLAorCTB4NDM2NzIzMzIsIDB4YmNlM2I0MzYsIDB4MTI0Y2Y2Y2UsIDB4NmE2NGJjZTMsIDB4NWNmMzFhYzQsIDB4YmM1MjU2YjAsCisJMHg0Yjc4MGQ3ZCwgMHg0MDEyNmIxNSwgMHhjZWRlYTcxZiwgMHgxZjExODhmNCwgMHhjNDdmOWM2ZCwgMHhmYjQ3ZDg0MSwKKwkweDFmMzMxODgzLCAweGQyZDMyYjQ1LCAweDRjNTg0YTZlLCAweGJmNGI0ZmRmLCAweDc5ZWQ0YjAxLCAweDE5ODg1ZDgzLAorCTB4NzFiMjRjNTcsIDB4NjRkY2VjM2YsIDB4ZmMxOGIxMDMsIDB4ZWQxYjI0Y2QsIDB4OWRlN2I0ZWYsIDB4ZmYxNDE1ZjcsCisJMHgzN2JiOGM3NiwgMHgzN2JjMzFjNCwgMHgzN2JjMzFjNCwgMHhlNTNlMWE0OCwgMHhjZWJmOTA3OCwgMHhmNzk3NWJiYSwKKwkweDQ5NjdjMWI0LCAweGQxMGYyMDEwLCAweGI5ZjI4ZTlmLCAweGRkZThjNWM0LCAweGY2ODJiZWY5LCAweGRjYTIxZjRkLAorCTB4YzQ5NDE3MzAsIDB4NDM2YzkxMDYsIDB4MjFmMTY3YmUsIDB4YWZjODdjZWQsIDB4NDAyNGNmN2MsIDB4OTZkYjk0YmUsCisJMHgxNmZiZmFhNSwgMHgwNjA0ZGY0NiwgMHg1MzBkZjlmNywgMHhiMjE0ZGM3MCwgMHhlMjk4M2FjNiwgMHhjOWE5Njk3OSwKKwkweGQzYTM3MTBkLCAweGMyNzIzZjBiLCAweDE5ODVlOTkxLCAweDBmMjA3OTJkLCAweDFiOGY3OWE3LCAweDk4NGE5N2U2LAorCTB4OGU2Y2I4NWYsIDB4MmVkMzA4MTQsIDB4YzJhODFiOTMsIDB4MDFiYTc0NjIsIDB4NGNjYjNiZjcsIDB4YzdhZWYzMzEsCisJMHhlOWZlZDhkOCwgMHg5NjE3MzhkMSwgMHg5MGQzNjk2OSwgMHg5MmY1OWQ0ZSwgMHg4YzRiZjAwNCwgMHgzNWU1NGE3YywKKwkweGNlYThmMTdkLCAweDZmOTRjYzczLCAweDc5MGM1YjE0LCAweDEzNDkxMzZiLCAweDE4NWJlYjg3LCAweGIxYWM5NWYxLAorCTB4MzViN2FhYjMsIDB4MzkwNjQ5NzksIDB4NTJhYjdkODQsIDB4M2EzNTQ3YWEsIDB4NGQ1ZjUwMGYsIDB4ZmUyOGI4YzEsCisJMHhiZmQ3YTE3MSwgMHg3OWMzN2YwNiwgMHg0NWVhMDE1ZCwgMHgxMGM4OGU0ZCwgMHhhMGFkZTdhNiwgMHhhMWUyYTM3NywKKwkweGU4M2Y3YjZkLCAweDlmOGVmYjBmLCAweDA3MzlkYmZjLCAweDU1ZmQzYmVjLCAweDllODA3NzY4LCAweGJiY2Y3ZTNkLAorCTB4ZjRjNzM4MGUsIDB4MmUyYzNkYzksIDB4NGZjMTg3NzIsIDB4ZmE2MzY0NWIsIDB4NzRhZDhmN2YsIDB4ODE3N2UwMWUsCisJMHg5ZTc5MWZlZiwgMHg3NzI1N2UyOCwgMHhlNTkzZmRiMywgMHhkZTcwZGUwMSwgMHg1MDZmN2Y1ZCwgMHg3MGM5MzA1NSwKKwkweGYxMWY5MDhmLCAweDFmZGVhNTVhLCAweDQ2YzdhNDY2LCAweDJjYjc4YjFiLCAweGNhNTliMWRmLCAweDRmN2M2MTkwLAorCTB4NWM3ZjhjMjUsIDB4Mzc4ZjQzZjUsIDB4ZDFkZmQwM2EsIDB4NjNiODU5ZTAsIDB4ZDliZTA0ODQsIDB4NzU2NjQzNWYsCisJMHg2NDQ1YmRmZiwgMHgwMjUyODdlYiwgMHgxNTFlNjdmYiwgMHgwZjM4NDY2ZiwgMHgyZjZhZjdhYSwgMHg4ZmNiMjVmOSwKKwkweGRkNjNhMzI5LCAweDI3YjBmNTRkLCAweDE4N2JjZWM0LCAweDEzZTRiMWU3LCAweDEyOTUyOGI5LCAweDFjZmRjOTZmLAorCTB4ZmVmMGRkZmEsIDB4ZjMzZDc0M2QsIDB4ZWUxZjdkZGMsIDB4ZDllNzE5YjMsIDB4MDUxZjVlZjUsIDB4MmE2NWIzZmQsCisJMHg2ZGU3OGRiZCwgMHgzZWQ4ODU5NywgMHg0MWUyNjJmOCwgMHhmZTcyZWNmOSwgMHhjNWNlYzQzNiwgMHg2NzhkZTMxOCwKKwkweDAwZGI2NTBmLCAweGE5YjBiZjBmLCAweDMyM2NjNGYxLCAweGVmNmRjZTA2LCAweGZlMjAzNDNhLCAweDlmNTZmNzcyLAorCTB4ODI4YmVmNTIsIDB4M2NhMWJiN2IsIDB4Y2U1ODIzZWUsIDB4ZTI5MDIzMDMsIDB4ZjZmNDMyYmYsIDB4ZDU1ZmMwNWQsCisJMHgzZWYxM2I0ZCwgMHg4ZmFhZWZiNCwgMHg5YzI3NDJhYSwgMHhlOWFkNGI5MCwgMHg2ZTg3NmEyNSwgMHg4YjIwZjkwMywKKwkweDVhN2Q5ZDM5LCAweGM0OWNmOWJkLCAweDlmODY2YWZjLCAweGI3ZTdkNGRiLCAweDIwNzIzZTAxLCAweGQ5ZmU1YmRmLAorCTB4ZGJlZjRhMDQsIDB4ZDFmM2M1MmEsIDB4NmYzZGE1ZjcsIDB4ZjdjM2VmZDMsIDB4M2NkYWJlNzYsIDB4ZWQ2Yjc5YjUsCisJMHg5YzVlNmE1NSwgMHgwZTRkM2JmMSwgMHhiOTdjYTllNiwgMHg3NWY0ZWI3OCwgMHhlYThhMjk3ZCwgMHhhOTkxN2VmNiwKKwkweGYzYzM5MzllLCAweDJkOWYxYTQyLCAweGU5NDVhNTIzLCAweGEzNDlmODMxLCAweDg0ZGYwNzZmLCAweGQzZjM4ZTdlLAorCTB4YmViOGJhZTgsIDB4M2Y4M2M1NGMsIDB4NGM0ZmRkNGQsIDB4OTE5NTc4ODMsIDB4YTczYTdhOGYsIDB4MzI0NjJhZGQsCisJMHg3YzhkYmU0MSwgMHg3ZGNkZGFkMiwgMHhiMzFiMjEyOCwgMHg0YWNiMTYyZiwgMHhhOGNmYzQxMSwgMHgxNWNlYmJmOSwKKwkweDE3MWNkZjY1LCAweDE0ZmUwZmVhLCAweGUzMmI2ZWU0LCAweDA4M2QwZWZiLCAweGY3ZTgzMTRlLCAweGZmNWM0NTM3LAorCTB4NTRlNDNhNTcsIDB4ZTkwZmZmYjgsIDB4MTNmMjBlMzcsIDB4NGY3ODdlY2MsIDB4NGY5OGU3MWIsIDB4ODA4YTA2NTEsCisJMHg0ZjJjNjJmZiwgMHg4MTk1NGFmYSwgMHg5N2RiM2E4MywgMHgwNGU3M2M2ZSwgMHgwODZkYmJmYiwgMHhhYjUxYjhjMSwKKwkweDY5ZWYwZjQzLCAweGUzN2E4ZjFiLCAweDRhOGY0YWI0LCAweDNmOWJlNWExLCAweGRhZGFjZTgzLCAweGM3MTc3OTgyLAorCTB4YTc3MWE5MmUsIDB4NThlMmU2NGIsIDB4MzlkOGI0ZjMsIDB4Nzc3OGJkZGQsIDB4ZjlhODcyYTgsIDB4ZmE1NDBiMzUsCisJMHhmYjYyMTFkZCwgMHg0ZDM3MGJlOSwgMHhjOTc0N2E0NywgMHhhMWZkNTRiZiwgMHhmNTBlNDZiMiwgMHg0YjNlOTE4ZSwKKwkweDNlNjNkN2RjLCAweDNlNDBhMmRhLCAweDVlODVkZjdlLCAweGJiYTQ0MWU0LCAweGRhNzc2ZTkxLCAweDM3MWVlYzVkLAorCTB4N2I4MjQ2YTEsIDB4ZTI2ZDhlZWQsIDB4ODU3MWZmNzAsIDB4NzNmZjdiMTAsIDB4OWRmNGRkYjYsIDB4NDc5YzYzZTYsCisJMHhkYjJmZjA3NywgMHgyZmFlYmI1YSwgMHg5MDhmZjk4MSwgMHhmMDhkY2Y4MCwgMHg0MjVmZjM2YiwgMHhkNGE3YTYxNCwKKwkweDJmMzc3NmY5LCAweGYyYzQ5OTEyLCAweDdmNzVkNDM0LCAweDgxNWI5YzM5LCAweDc5MDc5M2ZkLCAweGM2YWRjZjk2LAorCTB4MzVmODM0YTEsIDB4MjhmMzhkNzgsIDB4N2NmMTJiZTIsIDB4OGYwMzViNDEsIDB4Zjg3N2Q5NzksIDB4NzcwNjdkZDksCisJMHhmZDcwZTVhYywgMHg5YTRlOGVlZCwgMHg3YmY2ZDE1ZSwgMHgzMGNhOWJhYSwgMHhmYjQzY2I2ZiwgMHhlZGI2M2IwMSwKKwkweDI5ZjZjMjYzLCAweGNmNzg3M2Q2LCAweDBjZjRiNzViLCAweGVlYTU3Y2IxLCAweGEzMDg0OWU4LCAweDM3NGE2MmRiLAorCTB4ZGViYjNmZjAsIDB4MGNhZjkwOWYsIDB4MGEyN2RlOGMsIDB4OGMwY2EwZGMsIDB4NDEyMmI3ZGUsIDB4YjE1OTU3Y2MsCisJMHhmOWVlYmE3ZCwgMHg4ZTM1NzY4ZCwgMHg5ZWY1ZWFhNSwgMHgyNGQ0OGZlNCwgMHg2OTZmOGNjNCwgMHg5ZmM5YTZmMiwKKwkweGRhNzc4ZjI2LCAweDBhNmY2NjY1LCAweDU5MTk4MzgxLCAweGQxODc5ZjgwLCAweDdhZmFhMWJmLCAweDNkZjk5ZDllLAorCTB4YWZhNWNkMGYsIDB4YTczYzZmNTQsIDB4MzI1OGE3ZGIsIDB4MDk2YmQxOTYsIDB4YmJjZjgyNWYsIDB4MGYxNGJiZDMsCisJMHhkOGJkYmQzYSwgMHhmOGMzY2ZhZSwgMHhlNmQxZjNhMSwgMHgzNjg5YzlhMSwgMHgxODljYTMzZiwgMHg0M2QyMzdiZiwKKwkweGU5MTllZjhiLCAweGMwMDdhNDYyLCAweDViYzY3ZTA5LCAweDM1ODE2ZDdiLCAweDM4YjdjZTE0LCAweGFmN2ZiNzA2LAorCTB4NGQ2ZWUxMTUsIDB4YjljMGFjOWIsIDB4ZjlmNGVhY2QsIDB4M2UwMWZlNTgsIDB4YjBmYjA3NGMsIDB4NzY4ZWNlYjQsCisJMHg4ZDg3ZWFhZSwgMHgyMjVjNWRlYSwgMHg1ZWNiYjU1NywgMHhkOTIzMmFiMiwgMHgyNGQyYTdiOSwgMHhiNTg5OTNlMCwKKwkweDE3MTYxOTkxLCAweDU4M2U4ZjIxLCAweGE0ZjcwNDVjLCAweDMyMzg3YzRlLCAweGJmZjE0MjAzLCAweDU2NDZmMDdlLAorCTB4ZDc3OTE2ZGYsIDB4ZmNmYjg2ZTIsIDB4NjkwYThhNGIsIDB4MmZkMDcxZmQsIDB4OTVmYTJmYTAsIDB4NmVmYmUwZGIsCisJMHhmOTczYzRlYiwgMHgxZmRlY2NiYSwgMHhjZjlkMmU2NSwgMHhlZDY2YjFlZSwgMHhiMzNlZDQ5NSwgMHhmMmFlZjVkMCwKKwkweDQxNTdlMGYwLCAweDRhNWIyYjdlLCAweDU0MmUyMThhLCAweGJhNzgxMTA5LCAweGNlMjk1NWRlLCAweGFkODcyZGIwLAorCTB4N2JlOWUzZmIsIDB4NGYzY2Q5MWYsIDB4NzZlZTIxZDksIDB4OGJhZTJkNzEsIDB4OTQwNTg3OTUsIDB4YzU4ODcyMmYsCisJMHg1NzNhMDU2NywgMHg2ZDZlZmQyYiwgMHgyOTkzYjUxYywgMHg1YTI2ZDc3ZSwgMHhkMzE3ZTBkYywgMHg5N2YwN2VlNywKKwkweGIyMmEyNmQ3LCAweGEzNWNmNTFjLCAweDcwMDc3YzFmLCAweDdjYjEzNWFjLCAweDBjNmZmZDgyLCAweGM2NWM4ZjhlLAorCTB4MjNlZmQ4MmUsIDB4MzRjZmUwMjUsIDB4MWE1ODJjZmIsIDB4MTcyNWYzZGIsIDB4MzdjOGU3OWUsIDB4YjE4OTc4YjEsCisJMHg3NmJiNmRmZCwgMHgwMGNlNDlhZSwgMHgyNDNlYThiZSwgMHgxZmMzZmNhMSwgMHg4NDU1OWZkOCwgMHg2MTM1NDljOSwKKwkweDBlYWFkMGU3LCAweDUzNzczYzEzLCAweGNmMDhhODdkLCAweDg0YjljMGRkLCAweGUwN2E3NTRmLCAweGE2ZWU3MzVmLAorCTB4OWUxOGFmOTMsIDB4NDRhZTA0MGEsIDB4ZDBiNzFhODgsIDB4ZjlkNWQ1NmUsIDB4OTgxMGQzNTQsIDB4ZGNlM2UxMGYsCisJMHhjZjg0NmU3MCwgMHhhMmVjZDUzMCwgMHhhMGFmZTdmMywgMHhlMDg3YzUyNSwgMHhmZjcwZjM3MiwgMHg4OWU0ZmQ0YywKKwkweDU1OWZkYzNjLCAweDJkNzlhYTI3LCAweGJlM2U3NjI2LCAweGU1NTdkZDYzLCAweDM5ZmIyYjRmLCAweGRkMDI4ZjRhLAorCTB4MjViMWZmNGYsIDB4NTNmNmM2Y2YsIDB4ZTZkNmFmZDAsIDB4ODQyOWM3NWIsIDB4MzVlZDdmMDMsIDB4NzIxOWU3ODIsCisJMHhlMDMzNDk5MywgMHhiMTk0NDZjZiwgMHg0NzE2NmZjMCwgMHg2Yzk3Y2FhMiwgMHg2NWZlOWIzZiwgMHg5YjM2ZTk0MCwKKwkweDdlNTMyMzdlLCAweDlmYzFmYWZmLCAweGUzYmJmZjIyLCAweDY4YjJhYjRkLCAweDU5Zjg3MzlkLCAweDJlNzRjMzNkLAorCTB4ZWYzMGIyOGIsIDB4NmJmNTY1YTgsIDB4ZDAwNmU3NGMsIDB4YzM1OGU4YmEsIDB4NGFmMWIwZWEsIDB4YTNiMzNlMTcsCisJMHgxNDNmYzhhZSwgMHhiYTMxNzFjNiwgMHgwMWFlNTBlZSwgMHgyYzRjMTZmZSwgMHg5MDFjMjNhZSwgMHhjYjQ3N2Y3MCwKKwkweDc5NGI1OTU3LCAweGUyZDFmODA2LCAweDVkNzQ3YTYwLCAweDM2NzNjMTZkLCAweDI4MTc5Yjg4LCAweGVjNGZlNDMyLAorCTB4ZmE0MWVmNTEsIDB4NTc4NmE1YmUsIDB4N2Y0MjY2ZGUsIDB4N2ZjMDRhMDksIDB4NTNlMTgzYmMsIDB4NTQ2OTBiYTMsCisJMHg1ZTNjODFhZSwgMHg4MWFlNTQxMiwgMHgwZTdlYmQ3ZCwgMHg3ZTgzYTI0ZiwgMHg5NmFkZjIzZiwgMHgxYmNmYTA4OSwKKwkweDBmMjhmOWRmLCAweDgyYmY3M2VmLCAweDJkZjIzM2Y1LCAweGY5ZDI0M2VhLCAweGZmNmRmZTljLCAweGU0ZmJkMWNkLAorCTB4YTlmOTFjZmQsIDB4MDMyNTFkZjAsIDB4ZWM5Y2FmZGEsIDB4Mzk1MWI3MjIsIDB4MmM4ODUzYWMsIDB4YWQ5ZjgzNjUsCisJMHgwOTFiMmZmNywgMHhkOTFmNGZkMywgMHhhMDcwYWY0YSwgMHgzYWUzMDkzZSwgMHg2N2JiMTNmNiwgMHg3ZThkZDQwMCwKKwkweGVjNDk2OTMzLCAweDk0OWRkZTU1LCAweDE3ZWUzNzczLCAweDdkMzQ2NjI1LCAweDg1ZDYxMGI4LCAweDRhN2JiMWRmLAorCTB4ZmNjMTQ1MzgsIDB4ZWUzYjE3ZDMsIDB4OTcxODIzNmIsIDB4MzczODkxYjIsIDB4OWI4OThkYzQsIDB4ZDQ1M2Y5YTQsCisJMHhmMTg5OWFmOCwgMHg5NDVlNzI1NSwgMHg4N2NlYWNmZiwgMHg3OTA4NWY3ZSwgMHgyYzZjNjNmMiwgMHg4ZmNlODFiZiwKKwkweDgyM2FmZDA3LCAweDg0OGU1OGM4LCAweGEwMzY1OTM4LCAweDNkZjU4M2Q4LCAweDRmZTFmODI0LCAweDU4OGZmZjY5LAorCTB4YjJjYTdjNTksIDB4OGZlMmU4OWQsIDB4YjcxNjBlNjUsIDB4ZTJjOWMwNzksIDB4ZjA2MjcxOGYsIDB4ZTIyYmIwMTYsCisJMHhkODE3MTBjZSwgMHg0YjhmNmQxNSwgMHgwYmNmZWUwMiwgMHhkZjcwOWJhZSwgMHhlMzA5YTBlZSwgMHgwMThiNGZkYywKKwkweGI1MTdlYzE3LCAweDViYzgyNTVmLCAweDZkN2Y2NzQ4LCAweDdlYjVkZDJhLCAweGFiZTQ5MTFmLCAweDBiZjdlZTIwLAorCTB4OWQzZmFiMjcsIDB4YmI4ZjMwNGYsIDB4ODAxNDg0ZmQsIDB4MGNjNGRjZmQsIDB4M2M3NDRkNGIsIDB4ZDk4MzllNjksCisJMHgxNTczYmZiYiwgMHgwNDNhMDRjYywgMHgxODExYzZmNywgMHgzOGJlY2M3ZiwgMHhiOWUzZDAxMywgMHhlMDU2YjkxZCwKKwkweDQ3MDExNzhiLCAweDY2ODkwZjE0LCAweDVmZDA5ZGQ3LCAweDZmMGEzOWUyLCAweGY5NjczZTE2LCAweDIyM2M4MmZkLAorCTB4ZmM3N2UyOWUsIDB4ZWUxOTc2OGQsIDB4MWFkYTdhZDEsIDB4NTZmMzExYmMsIDB4YmRlMTM3OWYsIDB4ZWU0YTJmYzEsCisJMHhmMTdmNTBlOSwgMHgzZDAyZWNhYywgMHgzMDU2NzRmYywgMHhiY2YzZTcwZSwgMHg2MmYzZTcwOSwgMHgyYmQ1ZmI1YywKKwkweDBjMGZkYzI5LCAweGMxMmVmMTYxLCAweGNmZDAwNDQ2LCAweGJlNDBhOTgyLCAweGFlNWYzZTkzLCAweGFmYTZiMWYyLAorCTB4ZDExYzgxMzcsIDB4YzExYzIzZmEsIDB4Mjk4MjBjNzMsIDB4Y2I0OGU1MWYsIDB4Mjc2YjZhMjcsIDB4NjdkNDRmOTgsCisJMHhmYzBmMGI2NiwgMHg4YjVkMzcxYywgMHg4ODc5ODUzYiwgMHgyNTI4NGQxNywgMHhiMDRkY2Y2OCwgMHgwNWNlNzg4YiwKKwkweGJjZTE5OWYyLCAweDBmNTU0NGRiLCAweGIyYjhmYzRmLCAweGJiMDdlNTg0LCAweDllYmRjMzBmLCAweDdlZjU3NmNkLAorCTB4NzM5Zjc1MzAsIDB4ZDcyN2NhOTIsIDB4YTE2ZjA4OTEsIDB4MjQ1ZGQ3ZWQsIDB4NGQyNzg4NmUsIDB4OGZkZmE4YmEsCisJMHg1ZjYwY2E3OCwgMHg1N2ZiNTE0ZSwgMHhmMDg1NWRkYSwgMHhlZGU4OWYzOCwgMHg0NTBkMjliZiwgMHgyYzNkNjAyNywKKwkweGZjMDA4YTIwLCAweDY4NjJkOTM0LCAweDA5ZDIzYjA3LCAweDlmZWJmMGY3LCAweGZkNTBlMDNmLCAweDE5OTI0Y2RjLAorCTB4ZWRhNmM3OWQsIDB4ODdlMTRkNDMsIDB4YjVmYjQ0NmUsIDB4NWUwMzcyNTgsIDB4MGY5NWRhNzYsIDB4ZGZjMDNmMjAsCisJMHhjNWNiOTIyMiwgMHhiMWYyOWYyNSwgMHgxNzIxYzM3YywgMHgyY2FlMDQ2ZCwgMHg4NzY5ZmNhNCwgMHg1MGRkNWNmOSwKKwkweDc5ZDJiN2VmLCAweGY1OTAzZDVmLCAweGZhMDg3YzBmLCAweDkzYzdjYWU1LCAweDhmZGY0MDkzLCAweDk1YTVlOTU3LAorCTB4N2YwMWRmMWEsIDB4N2YxOWUyYjksIDB4Y2E3Nzg2YjksIDB4MmM4ZWQzZTcsIDB4Mzc5MzRmN2MsIDB4NjdlODNiZTAsCisJMHgxZjk4MTg4ZiwgMHhmMjliYmY2YiwgMHhhZmMwZDNlYiwgMHhmZDA0ZWQzYiwgMHg1YmE1OWZiOCwgMHg2OTljODBlNiwKKwkweDdjYWFiNGUzLCAweGQ1ZDcyYzZkLCAweGJmMGZkY2FlLCAweGMwYmZlNGZiLCAweGJlYzI4ZGQ2LCAweDc1ZThhNTE3LAorCTB4ODMwMjRmYmYsIDB4Y2ZkNzJiZDcsIDB4Njg3OTA2OTgsIDB4Y2NmMzExNzYsIDB4NTE3M2Q0NTIsIDB4MWU5MmZjZDEsCisJMHhkZjFhMmZjNSwgMHg5YzU5ZGFiNSwgMHhjOTlmZTM0OCwgMHhlMWU1ZGZiYiwgMHg4NDBiZTRmOSwgMHg4NzQ4YjJiOCwKKwkweGNmZjFhMmJmLCAweGY3MTg3ZjQ0LCAweGU2MTIyNzgxLCAweDY3ZjkxODlmLCAweDkzZmMzNzU3LCAweDQwMTY1ZTdmLAorCTB4OWZlMTc1NmYsIDB4YmE3ZjhjNDMsIDB4MGZkYTFiZTMsIDB4ZTQ2MTZiZGUsIDB4YWExYzc3OWYsIDB4ZmYyZGRkYmQsCisJMHhmY2YzYzI1YywgMHhiZTRlZjdhYiwgMHg5MzY1N2VlYywgMHg2YTlmOWY0ZiwgMHg2MmQ5YzcyYywgMHg1NGJiMmZlNywKKwkweGVhOTZlZmJjLCAweGJkMDFjYTZmLCAweGNlYzRkNTMxLCAweGUzMjQwOWVmLCAweGVlZWYwYTE2LCAweGZjZGVlZDM4LAorCTB4ZWZhODZjOWEsIDB4ZGExZTk4MTQsIDB4MWVhMzMyMTksIDB4NzhmNzY5ZGEsIDB4NjY5YjdlMzAsIDB4MDU1N2U3NjEsCisJMHgyM2NlMDQ0ZiwgMHhlNDVhZmJiOCwgMHhkOTIxZGZlOCwgMHg1ODc2NjBlZSwgMHhmYjhmMGM1MCwgMHgzN2YxZWMwMiwKKwkweDlkOGMxZjE4LCAweDJhNDNjYjlhLCAweGE2NjJmYTVhLCAweDk3MWQ0NjE3LCAweGNmZWZjMzM2LCAweGJmY2NlYTNkLAorCTB4MDY5NjdjMDAsIDB4NzlkZmEzYjgsIDB4Y2Y3ODRhOGYsIDB4MDk1MWY1NTIsIDB4Zjc2ZmUzZjUsIDB4ZjEwNDVkYmQsCisJMHg3OWNmMmQ1MSwgMHg4YmI3OWVjYywgMHhmYmMyODYwYSwgMHhhMWZlZGY4YywgMHg4ZWFkNjVlYSwgMHg1ZjQwNDA0NywKKwkweDFmZGRlZTFhLCAweDRiMWU3MWQ3LCAweDI5N2U2ZjdmLCAweDY3NGU1MWYwLCAweGY5M2VmMWJiLCAweDNmZGIxYzYwLAorCTB4MTE2NDRkOTksIDB4YjQ3MTk4ODYsIDB4ZGViODVlZjQsIDB4ZmNhZjc4Y2MsIDB4ZmYzYjMwZWMsIDB4MjdiMGYzMzYsCisJMHgyYWYyYmRmNiwgMHgzN2VmMTg3ZiwgMHg4YTc3ZjZhNywgMHhlN2VmZWMxMywgMHg2ODQxZjY1YSwgMHhkZDZjYzg4NCwKKwkweGQ3MzU0YTBlLCAweDI2YTMzZjMwLCAweDkzNDlmODFiLCAweGY4YTNmYzQzLCAweDQ0MzI3ZTBiLCAweGI3MDZiYmY3LAorCTB4ZDA3ZmYzYTksIDB4YTlmYmIwMmQsIDB4NGJlZTEyMjIsIDB4ZWZiMDljZmUsIDB4MzYzYWVhODIsIDB4NDBmNGM5Y2EsCisJMHhlNjE3ZWFlZSwgMHhjYjIzOWMwMywgMHhjYmEwNjY5NSwgMHhkNzE2MmViMywgMHg1YjA5MDVmOSwgMHg2ZTZlODFiMiwKKwkweDgyNTNmNzAxLCAweDBiZjkzY2EyLCAweDIyM2RmM2FlLCAweGQzYjEwZTk0LCAweGUyN2QzZGY2LCAweDhmZjhjMjQ2LAorCTB4OWM2MzNkM2EsIDB4ZWQwOTlmNjAsIDB4MzFiYmUwODcsIDB4ODI0NzczZTMsIDB4NTg4ZmI3MWUsIDB4OWFlYjA0OWIsCisJMHhhYjg1MzcwNiwgMHgxM2JkOWI3OCwgMHg4MWFlMGQwZSwgMHg4Zjk3YzY0ZSwgMHgwMGM2Y2IzYSwgMHhkMDNiZTAxZSwKKwkweDhlNDc0ZDRiLCAweDhkN2JlMDU5LCAweGNmN2I4MjFmLCAweGUyODgzZTMwLCAweDRlODNlMDBiLCAweDQwMTZlMGJlLAorCTB4YTI4M2MzNWQsIDB4ZmRiN2NmYWUsIDB4OGI0MmY4OGIsIDB4MTdjOGY0NmIsIDB4N2U3MGI3MTAsIDB4MGI5OGJlMmYsCisJMHgwNWYyMzU3OCwgMHhjZTNjZTdiNSwgMHg1MDVjZjYxOCwgMHhjNjkzNzk2MiwgMHhlN2IxM2ZlNywgMHg4OTZlZmJlMywKKwkweGQ5MTNkZTYwLCAweDZiYmY2NTY3LCAweDdkYzA0OWU4LCAweGQ4YjhkZjkwLCAweDFjOWY2ZDk4LCAweDI4YTZhNGNiLAorCTB4NzY2NGU1NTksIDB4MmEzYmY2YmQsIDB4ZGExY2MyMjMsIDB4YTJhODIzOWYsIDB4YmNlZDBkYjgsIDB4ZGQyN2E4N2UsCisJMHgzMWM4ZmUyYSwgMHg0NmZiODM4ZSwgMHgwMzNlMzczMSwgMHgxMjcwZDBlYywgMHhjYzIzNmJkOCwgMHg4NzkwNjEyNSwKKwkweDE5ODliNjVkLCAweGRhZTYzZjYwLCAweGZjYzM2NDI2LCAweGZhYjIxZTVmLCAweDVlZDI1ODRkLCAweDliZmU1YmVlLAorCTB4N2RhNzcyYWQsIDB4NjZjM2U5YTUsIDB4ZmM2ZDViYjUsIDB4NGM3ZjJhMzUsIDB4Mjc3OWQ4NTIsIDB4NzBkMWViZDAsCisJMHg5MDAzZWI2OCwgMHhjMmUwZTAwOSwgMHhkYWRmNGRiMywgMHgyMjg3OGY1MCwgMHgwMDkzNmYxNCwgMHhmZDg3OGEwZSwKKwkweGZiMDQ2OTFjLCAweDI0YTRkZjIxLCAweGIwM2IwNjRmLCAweDM4MDA1ODRmLCAweDlkN2VmNmRiLCAweDkyY2VmMTA5LAorCTB4MDIxZmViZDAsIDB4M2VkYTI1YmMsIDB4MGZiZjViYWMsIDB4MzViN2I0NmIsIDB4M2ZmMzQ4N2IsIDB4ZjM0OTdiMzQsCisJMHg4MmFlYzE3YiwgMHgxZmQ1MzJmNiwgMHhiZWQ5OTk3MSwgMHgwNWIwODRkOCwgMHhlNDc4NTNlZiwgMHhhMjk1N2NhYywKKwkweGU3NDBiM2NhLCAweGUzY2VhMjUxLCAweDcwODJkMjY2LCAweDRjYTlmNzY5LCAweDcyNTFmMTUzLCAweDM5YWJmYTg4LAorCTB4NTRjODRlZDAsIDB4ZWFhOTg3OGEsIDB4ZGQ1MzJhN2QsIDB4NmUyMmZiZmEsIDB4M2VmYjFiMWUsIDB4OWU5ZmFkMTUsCisJMHgxYmFlMzdkZSwgMHhhM2Y2MWFkNywgMHhjODc5Njg3ZSwgMHhmOTRmZWVjNywgMHhjM2Y5OGZiZCwgMHg3ZWYwMDdlMywKKwkweGIxZGZkNjAxLCAweDA5ZmVlYzU5LCAweDIxYzNjMzE3LCAweDc2M2FmNjI5LCAweGYxZWI5NTUxLCAweDljMGU0OGE2LAorCTB4ZTdiZmRlYzcsIDB4MWU2ZWI4ZWYsIDB4ZjdmN2YzZDgsIDB4NzcxYzhlYzEsIDB4OTc5MDIwNDIsIDB4YThjNGZlM2IsCisJMHgxODBmY2M3OCwgMHg2OTVmMjMyYiwgMHg2ZjNmN2FmZCwgMHg5Y2Y2MTFiNCwgMHhjY2RlZmY0NCwgMHg3MjhmMGE0MSwKKwkweGMxNjdjMDI1LCAweDhmNTM5NWYyLCAweDlkZmQwYTNjLCAweGU4OTAyYTNmLCAweDkyNDUxZjczLCAweGU1YzQyMDY3LAorCTB4MWRkZmQ0OGIsIDB4N2IzMWM4M2EsIDB4YTgzZjZiNGEsIDB4MTFjN2RlZmUsIDB4MjEyMTZmOTUsIDB4YzU2N2JiNDMsCisJMHhhOWU3NDUxYywgMHgxYTFmZmRlYSwgMHgyZjFlYTc1ZCwgMHg3NGU0MjEzZSwgMHhmZGZjMGZhNSwgMHg1YTEwZTIzMywKKwkweGFhOWNlMWZjLCAweDlmZjM0OTBmLCAweGY1Y2U3Y2YwLCAweDYwMGE3NzhkLCAweGM2OWY1ZmJmLCAweGRjNmEyNTEzLAorCTB4ZTllYTY0MWIsIDB4NGUyMWM1NDcsIDB4NmZmNjBkM2EsIDB4NGU4ZjMzZjMsIDB4YjdlNWJjODMsIDB4ZjQ4MTRjNzgsCisJMHg5OWJlNzY4NiwgMHgzZTE2ZjUwMywgMHg0NjJhYmRlNiwgMHhiYTFmNWVmYywgMHg5OTU1ZWYxMywgMHhhM2U0Y2YxYiwKKwkweDVmYzdmMWE3LCAweDM4NjRmOTRkLCAweDNiMzA5ZGQwLCAweDRiZGQ4ZjMwLCAweDgxZWZhNDYyLCAweDE0OTFmZjNkLAorCTB4YmUzZGRhMTksIDB4OTFiZmEzYmIsIDB4MmE5Y2FmMGUsIDB4OWVhYzdkYzAsIDB4ZGJlNDYxZTgsIDB4ZmU5ZTc0N2QsCisJMHg1Mzc3ZTEyYiwgMHhiZjhmYzQyZCwgMHhmYWMyZWE5YiwgMHhhYzM0YmVhYiwgMHhkZGVhZmM2YiwgMHhkODEyNjRmYiwKKwkweDRlOWYxYTc5LCAweDMzN2M2MjQ5LCAweDQ5YTNmNzZlLCAweDJmNDlkZWM0LCAweGM1ODZkZTIzLCAweGM5N2ZmZTMzLAorCTB4ZWUyNWQ5YWEsIDB4YTNlOGQzNTksIDB4ODQzYWU5NzcsIDB4MmQyN2VhOGMsIDB4YWE1NjM3OTAsIDB4NzBmYjNhYzIsCisJMHg0NDI1ZGExMSwgMHg1YzYyY2YzZCwgMHhiN2YzNjZkZiwgMHhkYTc1MDE0ZCwgMHhjY2ZlZWZkMywgMHhmNTdhY2I5NCwKKwkweDZmYzUzOTdiLCAweDBlYjAwYmQ1LCAweDk5YWIwOTE2LCAweDc4ZWQ1MzFlLCAweDlkMjMxZTBkLCAweDA4YTUyM2RmLAorCTB4MTlmMDc3N2YsIDB4ZTcwOGMwZjksIDB4ZjZmOTFkNGIsIDB4ZGEwN2FlMGEsIDB4MThjY2UwZWYsIDB4YzYyNjI1OTgsCisJMHg4Zjg2ODc5OCwgMHhjN2FlODQ5OSwgMHg4ZjVmYmRkOSwgMHhkYmQ3OGM2ZiwgMHgxNzhlZTdlZiwgMHhkYWQwMTFmZSwKKwkweGU5MTliYzlkLCAweGY0ZDc2YzY2LCAweDkwMGMxMTQ3LCAweGVjMWZhNThiLCAweDI5ZjFiOTkzLCAweDhiYTJkZjQ4LAorCTB4M2FlODUxMTIsIDB4Y2ZlOWZhNDMsIDB4MmI5MjkzZjUsIDB4Yjk1NmRmOTEsIDB4ZjhlZWIzZDgsIDB4NGYyMmZhYWQsCisJMHhmOTNiMjMzYywgMHhkODdhNmM0ZSwgMHg1YmI3N2MwNiwgMHgxYzQxYjdhOCwgMHhmNGZiM2FmNSwgMHhjMmJkMTAzYSwKKwkweGUyNjYwYmNmLCAweDEzMTExNWZkLCAweDk0ZGFkMDgxLCAweDg4NjY5OWQwLCAweDI0M2Y3ODMzLCAweDIwYTFiZTc4LAorCTB4ZjAzMjdmYjQsIDB4MGI0MmFiZTksIDB4ZTc2ZDU5ZmEsIDB4Y2EzODc5MDksIDB4ZDUwYTZjZWUsIDB4NmIyZWMwZDksCisJMHhmM2U3NjY0YSwgMHg1ZDEwMjYwZSwgMHg3OGM1ZjRmZSwgMHg4ZTlhNmZhNiwgMHhjNGE2OWQ5ZSwgMHg2MmVlMWY2OCwKKwkweDI4ODMzY2ZjLCAweDlmZjQzOWM5LCAweDdmMjllYjQ1LCAweGM3ZGMxZjgwLCAweDQyOTI3MTgxLCAweDMyNWFmZGNlLAorCTB4Mzk3MzJkZDgsIDB4ZjZkYTIzZjQsIDB4OTkyZDc5OGUsIDB4N2I3YWRiYzIsIDB4Mjk5OWVhMDIsIDB4ZTlkZGY3NGQsCisJMHhmZTA4ODRhMiwgMHg2ZjNlMjQ2MywgMHhmZWYwZTMyZiwgMHg4ZGQ5MjI4NCwgMHg1OWM1YTJmNSwgMHhmOThkZjdlOCwKKwkweDA5NDY2OTI2LCAweGEyMjBkZmI0LCAweGFmODUzM2RmLCAweDc1NWUyMDE0LCAweGFiYzM4ZDNhLCAweDkxNzBmNjNjLAorCTB4NjIzZGY4NWEsIDB4MGUzNjc0ZmYsIDB4YzA5M2Y5NzEsIDB4MjRhNzdkM2YsIDB4NjZmZTA0NjksIDB4MDdkNWFjOWUsCisJMHgxMjJlZWZlMSwgMHhmYWI2ZmY4MywgMHhjZGZiNzNhNSwgMHgyY2Y1N2RiNCwgMHhhNzhkZjMwZSwgMHgzZjg4MzJiOCwKKwkweGQ2OGE3ZjhhLCAweDViYWYzODRiLCAweGMwMDVhOTQyLCAweGY1OGEzM2Q3LCAweGFhYzMxZWU3LCAweGQ0YWIzOTNkLAorCTB4ZmJkMTAyNDYsIDB4ZTUwYjljZjksIDB4ZmRiNWEwZmEsIDB4ZjExZGZjNTYsIDB4Zjk4MTIyYmQsIDB4YTM3ZTcyNjksCisJMHhlN2IzZWZjYSwgMHg5YmJlZTkyNCwgMHhhOWRkOTg0ZSwgMHhhYTRkZDVjOSwgMHhmYWE4ZGRmYywgMHgxOTNkNzNjZCwKKwkweDA5NGJmMWJhLCAweDQwZmU4N2IzLCAweDY0ODEwYmRhLCAweDdlZDhiOGY3LCAweDk2ZjZiNGY0LCAweDI1ZTFmM2MzLAorCTB4ZDA2OGRmYmUsIDB4MzEwZDM3ODcsIDB4ZTU3Y2JkZjgsIDB4MzQ4YmU0NWEsIDB4YzhmNzhkY2UsIDB4MzdlZGY1YjgsCisJMHg4ZGQ3ZDU4ZiwgMHgwZmQ0NmJmMiwgMHg4ZjhiMjBiMywgMHgzNDI3YWFlZiwgMHgyZjZiMzA3ZCwgMHg2ODNjNDIyZiwKKwkweDMzYzUzZTU2LCAweGJiN2FjNWRhLCAweDMxN2QyN2JkLCAweDdkMWJhZTI2LCAweDE3YmU0OTcxLCAweGZhMmU5MGNjLAorCTB4ZWZlMmUzZTIsIDB4NGI3ZTJmYTUsIDB4NTRiMTk2ZGQsIDB4NTc4ZWRmYWUsIDB4YTRmZWNkZDcsIDB4Mjk4ZGU4M2YsCisJMHg4MTQ3OGVmYywgMHhiYWU4ZGE4ZiwgMHg0N2MxOGU2OSwgMHhjNWEzYmFkYSwgMHgxY2E4OGEwMSwgMHhjNTM4MWVhMywKKwkweDVjYTY2M2Y2LCAweDkxZmUyNzRjLCAweDBlODA3MTlkLCAweDEyZWQ0MjNkLCAweGE5N2IwYzc3LCAweGU1MWIzZTM1LAorCTB4NjhlZjQzYWIsIDB4MmVjYTI1N2EsIDB4Yjg3ZWYzMTEsIDB4ZGE4NTMyNWQsIDB4YzAyZTUyYTMsIDB4MmJlMTBmZDcsCisJMHgyOTI1ZWY1MiwgMHg4ODJiODQ4MiwgMHhjMTlkYTYxZiwgMHhhMDU3OTAzOCwgMHhjZmFlMmNmZSwgMHg4MTdmMjI0ZiwKKwkweDNiMTJlM2ZlLCAweGFmNjhjM2U1LCAweDBhZTg3MTY4LCAweGU5NGY2Njk3LCAweDFlMjNhNWY5LCAweGMzZGQ5MzM5LAorCTB4MTE0OWYxYWEsIDB4N2ZlNDEzZTAsIDB4MDRmYjhmMjYsIDB4N2ZkNDFiZmYsIDB4ODAwMGIzMDMsIDB4MDAwMDgwMDAsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3Y2M1ZmYwMCwgMHg1NTU0NzgwOSwgMHhmNTc5ZjA5NiwgMHg1NTQ5MmQ1ZSwKKwkweDE0NmNhYTkyLCAweGI2MTJmMDhiLCAweDg0NTgyNDg0LCAweDU5MTZlYzgwLCAweGEwMTRhMzU4LCAweDgxNjhjYjgwLAorCTB4OWExMjZiMGIsIDB4NjllZTljNzEsIDB4MDI0MmE2ZmYsIDB4ODNiNzQzNDMsIDB4ZThjZWRhZDIsIDB4M2FkODU3ZjQsCisJMHgwOGI0MWE4MywgMHhkMDlkMDMwMSwgMHg1ODRjNTAxNSwgMHhmODJlMDgzNCwgMHgxYTZkMWFkOSwgMHg4NDQ5MGVkMSwKKwkweGJmYmI0NmQ2LCAweDczOWNmZmNmLCAweDJhYWE0YmVmLCAweGZmZmY0ZDg1LCAweGI0OWZkZjNmLCAweGRlZWZiOTdkLAorCTB4NjdiOWVmNzcsIDB4OTc5ZWU3M2YsIDB4YjM1NTliZGIsIDB4ZjZlMDA4YWQsIDB4MTQwNzhhOTksIDB4NzdmMWQwMDAsCisJMHhlMDQyYzAyMiwgMHhhZGFjYzM3ZiwgMHhjNzhlZjAxNiwgMHg2OWZjZDdiZSwgMHhlN2Y4MGQ4NywgMHg5YzJmZmMzYiwKKwkweGE0MmNmYzkwLCAweDkwMGJjZjUwLCAweGNlNTRiMDA5LCAweDdkNTdmYzVmLCAweDNjNWUzZDMzLCAweDUyZmU3YTI3LAorCTB4OTJiOWZkOTgsIDB4ZjgxYjcwMGMsIDB4ZjcxYzMwY2QsIDB4ZmY4ZWM1ZjMsIDB4YzcxNTRiZWMsIDB4N2U4YjJlOTcsCisJMHg0YTRjZTk5ZSwgMHhmZjg3OTBiZiwgMHhiZTIzMDExOCwgMHhkNGNhMDE1MywgMHgyMmI3OWRiYSwgMHg1NTI3ZGRiYywKKwkweDMzNGM1NThmLCAweDM5MGZmZWQxLCAweDM1MGZmZWM1LCAweDdjODAwYzk3LCAweDE2NzRkZjgwLCAweDNkYjFmOGE3LAorCTB4MWMyMTExYjYsIDB4ZDFiYWQwMGQsIDB4ZWM3MWVkYzYsIDB4ZWZjNWYxMDcsIDB4M2M2NmU3ZTgsIDB4MjFmYzA1OWYsCisJMHg1MmI0YjYwNywgMHg0ODAxYjcyMSwgMHhjNGVkMTgwNSwgMHhmZjYwMjc0NSwgMHgwZDNmOWUyYSwgMHhjMDI0ODZjNywKKwkweDVjMjQ3M2VmLCAweGU3YWYwMGQ5LCAweGYxMDRlNzk4LCAweDVlYjhjM2JkLCAweGUzMGRkNzAwLCAweGY3NWMwMWZhLAorCTB4ZjcyNzQ2YzgsIDB4ZTZlOGRiNWYsIDB4NDQyZTBkZmUsIDB4ZmFjMDA2NmEsIDB4MzdhZjI3MTQsIDB4ODc3NmY3MmYsCisJMHhlMzViZGYxZiwgMHg1MGU3ZTZjYywgMHhmODQ0ZGEzZSwgMHg3YjJmZTAzNiwgMHgxMDA0MDg2YSwgMHhhYzc3YWZkZiwKKwkweDgwNzQ5NGQwLCAweGIxZTJiNzJhLCAweDAxZDFmNTY2LCAweDhlNThlMzRmLCAweGJlMjVjYmYzLCAweDEwMmFiNzJiLAorCTB4MWZlNWU3YzQsIDB4YzQwNzJiYWUsIDB4ZWUzMzU3NWYsIDB4MmFhOWY4ODcsIDB4ZmMzNjgzNTUsIDB4NjNkMzQ5NjcsCisJMHgwY2RmNDUzYiwgMHhkZWZhMDhkNiwgMHgzMzAyOGUyMiwgMHg4NmNkMTZiNSwgMHgyOGYwMmNmYiwgMHhmMWY3MTUxZSwKKwkweDZmZjc4OTM2LCAweDFkNDEyYWY1LCAweDI3OGI3OWZmLCAweDYzODcxZTlhLCAweGFlNThiZWU4LCAweDBmZmU4MGIzLAorCTB4NDczMDViZGYsIDB4OWQ3MTg2MDksIDB4ZGZhMjkzMDUsIDB4ZDY3NTdjNWIsIDB4ZmVkOGNhZTcsIDB4ZTg5OGI0N2MsCisJMHhiZjNmYjYzZSwgMHhiNzc0NGVkYywgMHhjMTg2M2ZlMywgMHg5NWZiYTIzMCwgMHg4ZDZmYTU4YiwgMHhjNWJhM2U4NSwKKwkweDhlNzRiMWI2LCAweDlkMTZiZjFkLCAweDY3M2EyN2VmLCAweGM2Y2U5YjVjLCAweGNlOGI3ZmZiLCAweDkwNGUxMTBmLAorCTB4MWJmNDcwYmUsIDB4MzAwNDllOGIsIDB4MWEwN2U5YmIsIDB4NTVmNjc5ZDEsIDB4MzJhZGQ3OGQsIDB4ODYxNDMzY2UsCisJMHhkNGZlNzlkMiwgMHhiNzZmZjg1OSwgMHhhYWZjZGY0MiwgMHhmZTJkMmZhNiwgMHhlNzlmNmI4MiwgMHgyMmJmZWQ2ZiwKKwkweDY5ZmRlNzQ1LCAweGRmN2U2ZjVmLCAweDgwMzRmM2JlLCAweGY5Y2U3OGMxLCAweDhkZjhkMTM5LCAweGJkMmM2YmE1LAorCTB4NjJmN2NhMTYsIDB4ZTYzNWI1ZTksIDB4YTA1ZDA2MWMsIDB4NjA2ODk5MTMsIDB4NTU1ZmJjMWMsIDB4ZDE2YjhlMTksCisJMHgxNjJlOTdhZCwgMHg3ZTRmMDhmZiwgMHg1ZjgwNzFmZiwgMHhkNmZhYjlmMywgMHg3NjgyNzQ5MywgMHhlMDIwNTdjZCwKKwkweDAzYzg0NzMyLCAweDA1MjA3NWYyLCAweDBhZGU1YmU5LCAweGVjMDQ0NGUxLCAweDNlNzM4Yjk2LCAweDI4ZjVhOGQ3LAorCTB4MzljNDY5ZjAsIDB4ODM1M2U3ZTgsIDB4ZmFkZjZhY2UsIDB4YjIwNzU3NjUsIDB4OTZmYjE5ZmMsIDB4MTRiMDEwNjksCisJMHg5NzIxNzNkMiwgMHhkMjU1ZjBiMSwgMHg3ZTY5MjMzYSwgMHhjYjY4Zjk4MCwgMHgxMGIyZDMyZSwgMHgwNWJhNjM5ZSwKKwkweDliNTFmNWVlLCAweDRlMDNkYTI4LCAweDlkMWEwN2ExLCAweGZiYjc1ZTI2LCAweDZlMDk5YjJiLCAweGYwZTU3ODA0LAorCTB4Zjg0MDYyODAsIDB4MDllNzU2M2MsIDB4MzMyMThiZDIsIDB4Yzk0NWZiZjAsIDB4OWNkZmNmM2EsIDB4ZGMwNDgxMDQsCisJMHg5Yjc2YjQxZiwgMHgyYjQ0ZjkwZiwgMHgzOTQxYzgwNiwgMHg4MjU5MDZkMywgMHg5ZDY0YjgzNSwgMHhkYzkxZjYxNiwKKwkweGE4MzQ3Yjc1LCAweGQxYmJiOTQ2LCAweGUwNDhlZjc4LCAweDZjOTI0MDJlLCAweGE5OTQ3NGZlLCAweDBmZGU4YjI2LAorCTB4NzljNTRmYjcsIDB4ZmE2YTE1MzcsIDB4YjJlMjljMzYsIDB4ZjFhMDNmZWEsIDB4OTNhYjY2YWUsIDB4ZjgzZWViZGUsCisJMHg1YTY2MmRjZiwgMHgyMGYwMmJlNywgMHgzMzVhZjA4NCwgMHg0ZjhlMTUzMiwgMHhhNDgzOTg3MywgMHg5M2Q0Y2EzNywKKwkweGRkZmIwOWFhLCAweDhmYTQwMDNkLCAweDk3MGIyZGE2LCAweDNhNmRkMjAwLCAweGIxMzhkN2I0LCAweDhjNzQ0MjlkLAorCTB4ZDBiZmJmNDMsIDB4ZGU4NDMzNzksIDB4OWE3NDg4MWEsIDB4NDMzNGU5MjEsIDB4NjY5MmFiZWEsIDB4NDk0NmY1OTUsCisJMHhhYzg0MWE5MiwgMHhiMzc0ZmQzZSwgMHg0MDhjZDFhNCwgMHhlZTBhNDk3YiwgMHgzYzUzNDMzYiwgMHhmOWJmZDgzNSwKKwkweDhmYzUxNmFhLCAweGJhM2U5MzJmLCAweDk1MWY0ZmIxLCAweDNkYmRmNWM5LCAweDAxOTY4NmJhLCAweGZmMzQ0MjY2LAorCTB4M2QwYTM1OTYsIDB4Nzk4YjYyNTQsIDB4YmUwZmVkMmUsIDB4ZTY1NTdjYzksIDB4NDI5ZjFlOGMsIDB4ZmJmOTEzYmEsCisJMHg4MjVlOGM2MiwgMHhhNjUzZmIxOCwgMHgwM2I5MzVmZSwgMHhjNThhZjBmMSwgMHg4NDU0ZGVmYiwgMHgxOWI0ZTdiYiwKKwkweDcwZTdjNTllLCAweGZiOTMzYjExLCAweGM2MzFhN2UzLCAweDA3YjZjNTFlLCAweDc1N2EyNzBmLCAweGUyMTVlYjg0LAorCTB4MDdmNTA3MjMsIDB4ZDdiMWY1NzksIDB4YTNiNjNmOWUsIDB4ZjE4ZTk4YTcsIDB4MGQyMmRkNGEsIDB4Y2YyZDk5YjIsCisJMHhmMGZiMzNiYSwgMHg5MmJmMGZkZSwgMHhhZDc4YjEwZSwgMHhkYmRlN2E5NywgMHg4ZThkN2NlOCwgMHhhZDhmMGZkYiwKKwkweDk3OWVkOGIzLCAweDQ4ZDc0OWZjLCAweGY4YmRmZGY1LCAweDk1ZTVlNDM0LCAweGUyNWU4OTBiLCAweDBjMmU1N2ZmLAorCTB4NGFmZGIyZjIsIDB4MGMzZTU5ZDIsIDB4ZmU3ODM4NzksIDB4NTFlOTIyNzIsIDB4MjFhZWE3YzQsIDB4NmNiOGY0OWYsCisJMHg5Zjk5Njc5ZSwgMHgwNjg0MWM4NSwgMHhjMzZlMGE4ZSwgMHhjMTI0ODVmZSwgMHhmNjI0YWZmNywgMHhiYzIzY2YxYywKKwkweDNjZjI2MmRmLCAweGViNjhkYjRiLCAweDIwMmEyZjg3LCAweGQxNzViOWZkLCAweGUyODAzMzc5LCAweDI4ODdlNTA1LAorCTB4ODRlZThhNGYsIDB4YTAwZGIxYmIsIDB4MDVmZjExM2MsIDB4NzI0ODIxNTIsIDB4ZDAxMDg2NjIsIDB4Nzg1ZTM1YmUsCisJMHhkMzE5ZGE5YSwgMHhmYmMyMTRmNCwgMHhkZGIzNWM2NSwgMHgyOWU5ZWI0MSwgMHhkN2YwZjdjNCwgMHgwNTdkMTMyYiwKKwkweGJmNWZmMWZkLCAweGVlMWE3YzExLCAweGU2ZDFiMGQzLCAweDFjMmY1MGQzLCAweDdlZTRlOGQ4LCAweGI3Mzc0NmUzLAorCTB4ZGNlYTM2ODcsIDB4ZmM5MTNhNmUsIDB4YWExZmYyNDMsIDB4MTY5ZjE2YmMsIDB4YTVlNjU3YTEsIDB4MDMzMGZkMGEsCisJMHgzNWMxMGVmNSwgMHgwMDYwOTQwMywgMHgyM2M2NmY3OSwgMHg3Mjg4ZjJjMCwgMHgxMGE0ZGMxMCwgMHgzOTNjZjBiZCwKKwkweGZhNDRmODdkLCAweGU4ODhlZTVjLCAweDNiNTZhZDQzLCAweDgyYTU5MzIxLCAweDY3OTg1ZWU5LCAweDA5ZDFmN2UyLAorCTB4ZDU5ZjNlMDgsIDB4M2ZkMjNlN2YsIDB4ZmM4Y2JmYWEsIDB4ZWZjMzg0MTYsIDB4YjBiOTk2ZjIsIDB4YjM3YzM5MGQsCisJMHg3YWRmODg1ZCwgMHg0YmQxZTk2NSwgMHhmNGI5ZmRjMCwgMHg0M2I5NWViYywgMHg4ZmViODRiZCwgMHgxZjg0Y2YwZiwKKwkweDhmMThiZGEyLCAweGUyYmMyMTg0LCAweGZmMDQ1ZGNmLCAweDEwMGIxNjg0LCAweGIyYjBkMDdkLCAweGYyMWExNjdjLAorCTB4NWNhMmI1ZjksIDB4ODQ0OGZkYzAsIDB4ZWY4YzFiYmUsIDB4YzRjM2NiNTksIDB4MjNhMDA3NGYsIDB4NjQ1ZWYwOGQsCisJMHg3ZTQ5ZDlmMywgMHgzZjA0Yjk5NywgMHhkZGRiOTU3OCwgMHgzOTM3YWUwYSwgMHgwOTUxZTJjMywgMHhmMWJlZTFiNCwKKwkweDJkN2YxMWViLCAweGNlMjFiODE5LCAweDFjYzk2OTZmLCAweGI3MTNlN2EyLCAweGM5M2VmMWJkLCAweDA4ZTZkN2I3LAorCTB4Y2M5ODZjYWIsIDB4ZjYxMTFkOWQsIDB4ZTMzYzAwN2MsIDB4NzQ5MjdmMjQsIDB4NDc2ODc3ZGMsIDB4MGU0ZTNmNWEsCisJMHg2YWJiOWViMCwgMHg2YjVlOTIwOSwgMHgwOWVjOTMzZCwgMHhhZmQzM2VlMywgMHhhY2JmZDhkYSwgMHg2ZTUxMTdhNywKKwkweDhmMjYyNzBmLCAweDQyMTMzZDY1LCAweDYzZjI0MzBkLCAweDZkOThlNzEzLCAweDNjMjNhZmY2LCAweDdhM2U2NWEwLAorCTB4ZWRmYmRmMGEsIDB4YWZkMjAwNjUsIDB4NTQzZmRiZDMsIDB4MzEyZDBmYzksIDB4NDBlODBlZTUsIDB4YTMyYThmMzgsCisJMHhmMjdkYTg1MywgMHg2ZTdjZTRlMywgMHgxMjc3MjRjZiwgMHhlYzliMGU3ZSwgMHhjZWZiZWQzYSwgMHgwNDc0YmQ0NiwKKwkweDhkYTljYmYyLCAweGY5MDIzYTUwLCAweDM2OGRhZGUzLCAweDc0NmY0ZjZlLCAweGEzNjY3YjcyLCAweDM4YTNkYjliLAorCTB4M2FmM2ZjNGUsIDB4YmQ3ZjEzOGUsIDB4NmZkNGUzODEsIDB4NGY2YTcxYzMsIDB4N2FkNDNhZTAsIDB4NDg5ODcyZGYsCisJMHhlNWJjNjc3ZSwgMHhiYzJkYThkMCwgMHhmYWRiODkyYiwgMHg3NDJjOTMzYiwgMHg1MGM5YzM4ZSwgMHhmYzRmZWM2NywKKwkweDM3MGM0ZTE0LCAweDJlZTUwNzgwLCAweGRiNTNmZGQ1LCAweGFkM2Y2ODBkLCAweDFjNjUwMmZlLCAweGY3NTRkNGMwLAorCTB4YWUzYTZkNWMsIDB4OGZlODdiM2IsIDB4MTlmMWMyYmUsIDB4NmE3ZWMzYTksIDB4M2I2Zjc4NDMsIDB4ODkzODY4ZTMsCisJMHhmNWM3ZDJmZCwgMHgzZjg4M2E5ZiwgMHg5MmEyMjQ0ZiwgMHhiNzY0M2MyNCwgMHhjNzM2NTE3OSwgMHhjNDE4ZDI5MywKKwkweDI0YzJmNzY4LCAweGZkMTlhN2VjLCAweGM4YTViOWVjLCAweDNhNGE0YjBhLCAweGIwMDVjMGYyLCAweDczZTFiMWYzLAorCTB4MjVkZjg4NmQsIDB4NTEzZmZmNzYsIDB4OWI2ODEyZGYsIDB4ZmE5ZDNhNTMsIDB4YmM5MjcwMTAsIDB4Y2IyMGU2MmIsCisJMHg3ZDI1MTBmYiwgMHhhZGJmZGExMSwgMHhkNGM0ZmYwZSwgMHhhYmMwN2YwOCwgMHhmNDhkMjFmYywgMHgwMmFmNDRjMywKKwkweDc3YTY3NGFlLCAweGY3ZDJhNDcwLCAweGQ1Yjc5OGRjLCAweDE1MzEzNjUxLCAweDJlZDdmN2Y5LCAweGMyNjlmOTk1LAorCTB4NzQxYmM1MzQsIDB4NjM1Zjk3ZjQsIDB4N2FmMzg0ZGUsIDB4ZTI2ZmQxMjksIDB4ZDRiNTU5YzUsIDB4ZTJlMzk4MmUsCisJMHg0ZGQ5NmZiZSwgMHhhNWZmMjRiNSwgMHg1ZmJkNmI4ZSwgMHg1Yzg3ZWZjMiwgMHhjNTQ3ZDY2NiwgMHg2MzhiY2UxYSwKKwkweGUzNzk4ZDE3LCAweGZmYzhjOTkxLCAweDBjNGI2OWVlLCAweDdkN2M0YjNlLCAweDg0OTM1ZmQ2LCAweDU2NzczMmZkLAorCTB4MzQ3NTJhYTEsIDB4NmJiNWRmNzAsIDB4YmY5NzhkMWIsIDB4ZTU3MmMwZGUsIDB4NTllOGYyNDksIDB4YTVlZDhhYzQsCisJMHhkMzNlMzg2OSwgMHgyNGMyNzhhMSwgMHhhOTNlZDMyYSwgMHhhNzcxYTM0ZCwgMHhjZGI0MjFlMiwgMHg1NTNiOGVmNCwKKwkweDU0MjNlMzQ0LCAweDlmZWE0Y2NmLCAweGQ4OWQ0YmQ1LCAweDRlNjZkMTllLCAweDY2ZjM4NGJkLCAweDZjNzhhNGU3LAorCTB4ZjA5OWRlZjgsIDB4ZmYxMGFlOGYsIDB4ZjI0OWNjY2UsIDB4MTcxNGU4MjQsIDB4YTRhZTlmMDQsIDB4YTllYWM3YmUsCisJMHg4ZjFjZTlkNiwgMHgzYWQzMjQ5NSwgMHg2MTMxZTJiYSwgMHg5MmQ2ZmViZiwgMHgxNDcwNDVmZiwgMHg1MTQwNTJmYiwKKwkweDkxYTVkYzY4LCAweGM3ZTRmYjFmLCAweGUyNzUyOTNmLCAweDBhYTFmYWJjLCAweDA5OWNmYzkwLCAweGUwOTFmZWU3LAorCTB4YTg5YWQ5OWYsIDB4ZjU0MDIwMjcsIDB4YmQyOTY3MTYsIDB4OWM1MTZmNTcsIDB4MmJlZmI4OWIsIDB4NTE4MWY5YTEsCisJMHg1Yzc5ZmQ2NiwgMHg3NjlkZTRmNywgMHg2ZmU1MDdiNiwgMHg3NDVmYjNlNSwgMHg2Y2MxY2VmMiwgMHg5YWRmY2ExNywKKwkweDQ5ZWQ0YzU2LCAweGNiZGJmMDkzLCAweGMzOWYyYWRmLCAweDkzMDgyNmUzLCAweGViYmYyOTUyLCAweDFkYmRmODFmLAorCTB4NGQyOTNmMjUsIDB4MGM0ZmY1YzcsIDB4NDE2ZWIxNzMsIDB4MTE2YTk1M2EsIDB4ODNlNzBkN2EsIDB4NTVkZmVmNDIsCisJMHg5NDViZjNjMSwgMHg4ZjNhM2YwMSwgMHhhN2U0YWZmMywgMHhmZjcxNWExNCwgMHg1MTA5ZTk1OSwgMHg3MTBjZTdmMywKKwkweDhkZTdmNTQ1LCAweDQ1YWE1ODE4LCAweGZjZjJiMWQ4LCAweGFkZmVhOGFjLCAweDg4ZTk0YTQ1LCAweDY5YmVmOTg4LAorCTB4NDVmZDUxMDksIDB4MTFkMmFlYTUsIDB4MmI2ZmYzMTEsIDB4NWZkNTE4MWYsIDB4NTQ1NjViNzIsIDB4YjI2OWE2N2YsCisJMHhhMTFiMWZkMCwgMHg3ZGM4NTRiYywgMHg5YmZiMjk3OSwgMHgwYTg3YWNkOSwgMHgxYmVlNjI5ZCwgMHg4ZTNmN2UzOCwKKwkweDdmMDliNjE3LCAweGZlODVkMGFhLCAweGI0YTVkMjE0LCAweDgwZmQ4OGFkLCAweGM2OGY3YzM2LCAweDhmNTJlYzhiLAorCTB4M2RkZGEwMDUsIDB4ZmM4MGVjOTEsIDB4ZjYyZmUyMDksIDB4NjY3NzY1OGIsIDB4NjMwNWZhM2IsIDB4Yjc2OGFlODksCisJMHg3NTJmZTAyMywgMHhmYWYxZGI0NCwgMHhjYzI3ZTE0NCwgMHgwYmFkN2YwMSwgMHg3NWE3MzllOSwgMHg2NTU3ZmIxZSwKKwkweDYxNDVkNWU5LCAweGJmNDY3YzIwLCAweDJhMzcwYjFmLCAweDEzNzc5ZGQxLCAweGFjNmFiNjFmLCAweDg5MGNlNzM3LAorCTB4ZDRhZGFmZDksIDB4ZjQ4YzdlYzEsIDB4YjdjOGU2ZWYsIDB4ZTAyMTdkOGMsIDB4YzZmZjI3NmQsIDB4ZmZiMTg3MzgsCisJMHg0NzMzY2ViNSwgMHhlMTdlYzY5ZCwgMHhhY2Q3M2FkZiwgMHhhOWE1ODU5YywgMHhjZjVmZTE3MSwgMHg5YzJjNGNmZSwKKwkweDRmMzJhOTc5LCAweGZiMTVmZTgxLCAweGVjYTlhZDg1LCAweDdhNGZlMjJmLCAweGYwYzEzZjNjLCAweGNmNTFjYTdmLAorCTB4OWNmNTIyYjksIDB4NTg1ZjQ5NDMsIDB4NjczZDZkNzAsIDB4ZmYyZDdiYWMsIDB4NzhkNzU4Y2YsIDB4ZGU1NGVhMWYsCisJMHhmN2JmNzhkZiwgMHg3ZmM0YWViOSwgMHgyN2U3MWJiZSwgMHhhZTllNzljNSwgMHg1Y2ZlN2ZjNCwgMHg5YTE5ZmNmNCwKKwkweDc5NDBlMzVlLCAweDI3OGEwZTNlLCAweGE5M2Y3ODQwLCAweDk1OWFlNDZiLCAweDUyZDZmNTljLCAweDVmYTFmNjViLAorCTB4ZjY3MGI3MjMsIDB4YjUyZDQwZjksIDB4Mjc4MzNiNTMsIDB4YjlmZTc4YWQsIDB4Zjk0ZWFhMzksIDB4ZWEyZmMzMDcsCisJMHgwYWE1NjcxNywgMHg1NWY4ZTQ3ZiwgMHg3OGUzYWVkZCwgMHg1M2I3NDA3ZCwgMHg4OGZmNTFkYywgMHhhYWY4YTc2ZSwKKwkweDI4NzMwYmRlLCAweDM3MGVmNDhlLCAweGM0MzhhN2FkLCAweGY2MmQ4NzliLCAweGZhMTU0ZGVmLCAweGRmN2M4NTdlLAorCTB4ZmVhOTBmNjgsIDB4ODU3ZjA0MTUsIDB4ZjI1MWUzYWQsIDB4ZTliZjJhNDksIDB4MWM1ZjEwYjEsIDB4YmYyZjdmMjcsCisJMHg1Yzc3YmZiZiwgMHhiZjY4M2EwYiwgMHgxZDA0OGZlMywgMHg3ZTdkMDhiZSwgMHgyMmRlZmViZCwgMHhlMjBjYTY2MiwKKwkweGE5MTdjNTUzLCAweDA5NmM0YTRmLCAweDUxZmQ0OGJlLCAweGY1NDU3NGU2LCAweDgzZmY5M2M3LCAweDBmNzZjZGVmLAorCTB4YWU2ZjdhOGMsIDB4MGYzNTE1OWUsIDB4ZjIxY2Q4ZmQsIDB4OTAyYzZhODcsIDB4MzUzZTkxYTMsIDB4Y2ZjODdhMjUsCisJMHhlZmUzYzU4YiwgMHgwZTNkZjllNSwgMHg2MDUxYjkyNywgMHg3ZjU1ZDc0ZSwgMHgyOWU0ZmIxYywgMHg3ZDhiZjgxMSwKKwkweGM0NTUzZGJlLCAweDllYzg4MzczLCAweDUyMjczYWUzLCAweDU1NmI2ZTc1LCAweGQwZTY3MDlmLCAweDg4N2UyNjdmLAorCTB4YmFhYzYzZWQsIDB4OTVjM2Q2OGMsIDB4MWU3N2M0ZGQsIDB4YmEwYWU5YmIsIDB4ZTNkMmYwZTAsIDB4Njg2YWU3ZjMsCisJMHg0ZGUzM2RmZiwgMHhmYjFjMzhmZiwgMHgyMTVmMWVjNywgMHhmYjRkNTNmYSwgMHhmYWRmYjFiMiwgMHg3ZmEyN2RmOCwKKwkweGQ5YmM2OWEzLCAweGI4MTllYzgzLCAweGY5Mjk2ZTdmLCAweDdmYmVlOTBiLCAweDliNzVmYTI3LCAweGQ0MTU1YjFkLAorCTB4YTgwOTk1MDMsIDB4NGNkNWIwZDcsIDB4ZjdhNjE0MGEsIDB4MmRkYmM3YzUsIDB4YzA5MTVmNjgsIDB4MTc1ZTZjYzgsCisJMHgxNTZlYzBkMiwgMHhjMjY1NzRmMSwgMHgxM2Q5MjBkMCwgMHgxM2FiZDhhZCwgMHgwYzEzMmFkZSwgMHg5MjY0Nzc3YSwKKwkweDA5ZGE4NzlkLCAweGRkOWQ3MTUxLCAweGZiZTFlZjgyLCAweDBiZmYzNjY1LCAweGM5YzI2ZjgyLCAweDg3YTVlYTNhLAorCTB4MjAwZDk2MGUsIDB4ZWE5MTM4ZmUsIDB4ZWRlNDNjNjQsIDB4N2QyNmVhOWIsIDB4MjFlZGYwODUsIDB4MDFmZmZlZmIsCisJMHhmMDc4ZTZiZSwgMHgzZWM1OWFkNSwgMHgyNTc5ZjU5ZCwgMHg4NmYzOGY2NCwgMHgzZTk0NzkyMSwgMHgzYTZhMTVmYSwKKwkweDIxMDg0ZjNmLCAweGVlYmZiMGVmLCAweGIxZmU1Mzc1LCAweDkwZjE2NWM2LCAweGYyNDI3ZWZmLCAweDM1YjZmNWVmLAorCTB4ZGFhMThmMzIsIDB4MjlhOTFmMDUsIDB4YjE3YmY1YTYsIDB4Y2ZmMjViN2QsIDB4NmEyZmI5MTksIDB4OTEwYmExYmUsCisJMHgzM2Q5YzAzZiwgMHhlODgxNTE3NCwgMHg2YWE4N2YxMywgMHhlMWY5MGY2MSwgMHhlNDkwZmYzZCwgMHg4M2Y5ZjhhMSwKKwkweDE4M2Y4MTQ0LCAweDhmZDFmM2QyLCAweDc3N2JmOWYxLCAweGYxYjY3OWU3LCAweDY1YTc4MTczLCAweDBlOWFlY2MxLAorCTB4MDZiMzhmZWMsIDB4ZTNmY2EwNmYsIDB4NDdmZjM0YTEsIDB4YWQzYjg3ODQsIDB4ODdjYzkxYzEsIDB4YjQ0OWY1OGUsCisJMHg4ZTA1ZTI4ZiwgMHgwZmY4OGM1MywgMHgzMmRkM2NlMywgMHg3MDVjN2ZiYywgMHg0NmMxZmRlZCwgMHg2NGU5NjU3NiwKKwkweDdmNjM3NzgxLCAweGU4OGRiMWM0LCAweGYxMjRkZWYxLCAweGUxMDc4MGRjLCAweDMwM2UyNmU4LCAweDA3ODVlYWUwLAorCTB4OGYzOTM4ODYsIDB4ZDRmZjIyMDAsIDB4MmU4YmUzMjUsIDB4YTdlYzhmNWEsIDB4ZGM3OTEwZWEsIDB4ZmYzODk4M2YsCisJMHg4YWMyNDU1MiwgMHg0ZGU3N2RmZCwgMHg3OTFhMGYxYywgMHhmYjEwMjJlMCwgMHg0OWI1M2U0ZCwgMHhmODAzZTA2NSwKKwkweDk2YTI1MTNiLCAweGNiNWM2OTVlLCAweDc2ODRmZGYxLCAweGY2ZmUyNjJkLCAweDJhOWQzZGIyLCAweGQ1YTliZmRmLAorCTB4ZjZhMGUyNWYsIDB4NTM3OWU4ZmQsIDB4MDkzZjFjNjUsIDB4NTljNTJhODIsIDB4YzY2MjNiOTMsIDB4NDY3ZmU3MWIsCisJMHgxOGJkNGZlYiwgMHg0ZDI5M2NmZCwgMHgzMDQxYzNkYSwgMHhiMjRmMzIyOCwgMHg5NzRkYzY0MSwgMHgxMGE3NjY0ZiwKKwkweDJiMTg2YjFmLCAweDhiMGY0OGE4LCAweGQ0YTRjMmFlLCAweGIwZDMzZDNlLCAweDQ5NTllNzExLCAweDJkYjhkYTlmLAorCTB4OGZiY2ViMzgsIDB4ODhkYzY5ZjYsIDB4ZjQ5YTNmMGMsIDB4NDM1YjliYWEsIDB4YzJjZTBhZWUsIDB4NjIzNjMwYmQsCisJMHgwNjE3MjkxZiwgMHgyZmJmMmYxZSwgMHgyM2FlMzhmMCwgMHhiMGQzOTdlNywgMHg0MzM1NmU2ZiwgMHhjM2MzZWY1MCwKKwkweDBjMmY4OTE0LCAweGJiZmUzOGRmLCAweGY2YzFkMTdjLCAweDYyZGI2MjZiLCAweGVhZDllNDk1LCAweDcxMWU4MTM2LAorCTB4MTEzZDA0YmUsIDB4NmM3ZDA4ZjQsIDB4ZWE4ZDQ5Y2YsIDB4YjU5ZTkyYWIsIDB4Y2E3ZWQxMDksIDB4OTI0ZmI5NzgsCisJMHg3YWQ0NTA2NywgMHhkMDYyYmY4NiwgMHhhY2VhNTBmMywgMHhjNjYzZjI1NiwgMHhkZmIxNTYzYiwgMHgzYjI5MzI5MiwKKwkweDkzYTJmZDZhLCAweDA0MmVmOGQxLCAweDYzZTI5NzlmLCAweDcxYzA4N2NmLCAweDVhYjNjNGMwLCAweDI5MzI3Zjk0LAorCTB4NjNmOTgzYmMsIDB4Y2ZkMTg3ZDIsIDB4ZWU4ZjljYTcsIDB4ZmNjOWE2OTcsIDB4YWVkZDJjNTYsIDB4ZmIxODRmODUsCisJMHg3ZmU5NjljYiwgMHhkZTVkM2UzZiwgMHhjZGE2N2M2OCwgMHg4NjY3YzY4OSwgMHgwMzlmMWEyZiwgMHg2YmUzNDU5NiwKKwkweDFmMWEzZmEwLCAweDg5OGQ1NzgzLCAweDdkNjFiZjFhLCAweGQ4N2Y1NDYxLCAweGNkNDRhNzBmLCAweDE5ODM0MmNmLAorCTB4NzViZTFmZDksIDB4OTFmY2Q0NWUsIDB4ZjU0NTE2M2IsIDB4Njc3NTNmNDcsIDB4ZTBkY2ZjZDQsIDB4YmNmMWE4OGEsCisJMHgyZWZlNmJkZCwgMHgzNjg0MTdmYSwgMHgzNDI3Y2Q0NCwgMHhmZTg3YmU5YiwgMHg0YmZlMzYzNywgMHg1M2ZmN2VkNCwKKwkweGExOGRhZmY0LCAweGU3ZDI1NmZmLCAweGE4NWU4ODEzLCAweGVjZmIwYjM3LCAweGE0MjViOTE5LCAweDZmNGQ1ZDNmLAorCTB4OWI3OTQzN2MsIDB4ZjljZWIxNDAsIDB4ZjAzY2MwYWEsIDB4MmZkOGUwZDQsIDB4N2E0MjlmNTQsIDB4ZGFhMjMwNmUsCisJMHhkNmEzN2E4NCwgMHgxZWM4YWIwNCwgMHg3MTMyNmEzYywgMHhmMzkwZDMxZSwgMHgzZjg0ZDMxNywgMHhjODlhNjJmMiwKKwkweDdiNzgxOTdiLCAweGQ5MjJlZDFhLCAweDQzZWE1NTQxLCAweDI0OGVmYTczLCAweDkzNTQ1M2YyLCAweGZlYzlkYTA5LAorCTB4MWZkNjFlNjksIDB4YmUxMDFjZTcsIDB4MDc1NWY3MTksIDB4NGFjNWU3MDEsIDB4OTgyZDI3OTIsIDB4YmVhOGZjODgsCisJMHhhOWZjNzJhOSwgMHg4ZTgzZjIwZSwgMHhlNGU2YTRmNiwgMHg5Zjg0NTNjZSwgMHg0ZTliMGUyYiwgMHhmYWE2YWI3YywKKwkweGYwZGY2NDAzLCAweGExZTdhMTljLCAweGRlZjM5ZmJmLCAweGYxNDk1ODQ2LCAweGU2NWZkMTk2LCAweGU2OTliZjVlLAorCTB4ZTY3YmJiMmYsIDB4N2I3ZjhhNDgsIDB4YWNhZGRmOWYsIDB4NDNhMDhkMmMsIDB4YzUxNzM5ZTQsIDB4YTQwZWFiZjEsCisJMHhkODY3ZmIwOSwgMHhkYzdlYzMxMywgMHgzYTZiZDU2OSwgMHg1MzhjM2VkMCwgMHhiYjQwN2Q4NSwgMHhmMTBkMjA3MSwKKwkweDg4ZjI4MWYxLCAweDAxNjlmODU5LCAweGVkMWY5ZDMzLCAweGI4MjdkZjJhLCAweDgwZGYyMWQwLCAweGRkOWY0YTZkLAorCTB4ZTY0M2JmZDIsIDB4ZGEzYjIwZmEsIDB4MDA5MzdkNmYsIDB4Zjc0NDM4YTMsIDB4MWRlMzNkZjAsIDB4OTU1ZGZlODYsCisJMHhlY2JiZjhjYiwgMHhmOTdmOWU4OCwgMHhhZjAyZTFmZSwgMHg5MGY2MjBmNywgMHhlMjJjZTcwZSwgMHgxN2ZjMDYzYywKKwkweDQyZmU1ZWE1LCAweGQyNGVlNWVhLCAweGViZjkxMWM3LCAweDI2NzZiYjU1LCAweDJlN2U3ZjkxLCAweGM2ZTNmODQ3LAorCTB4M2E0OWRmZjMsIDB4ZTU0ZDJlZmYsIDB4OWRkZGFmZjMsIDB4MDQ3Y2ZlYjAsIDB4YWU0MjJhZGUsIDB4ZTM1NTdlYTgsCisJMHhmOTkxZjVjMCwgMHgzOWM2YjVjZCwgMHhlNzQ2OGFmYywgMHhhOGU1Mjc1OCwgMHhmOTIzYjVhMiwgMHhmZTdmNjA0ZSwKKwkweGI3NWMzNGMzLCAweDdiOTVkNzcyLCAweGE2ZmJkMDBlLCAweDY3NjE0YzllLCAweGQyZGZiYzAzLCAweDgyZTM4MGY3LAorCTB4Mjg4MTdmYTUsIDB4Y2QzM2I2YmYsIDB4YTY3NTcwY2MsIDB4MDk2MTM4ODksIDB4YmJlNDRlMzYsIDB4YjgwM2U4MjUsCisJMHhkYTYzN2RhOCwgMHg3YzNmZTIyYywgMHhiZmIwNTYxZSwgMHhhNGNjMTVhMCwgMHhiM2ZhMTZiZiwgMHgzM2Y0ODRjYywKKwkweDNmNjc3OWUwLCAweDY5Y2ZlZDFlLCAweDFiNzNlZjNhLCAweGZiN2VmOGY4LCAweDkyMmE3YmRkLCAweGQ2MzQwZmQ4LAorCTB4ODE0MWQ2MzMsIDB4M2RlZjNmMjAsIDB4NDk5Y2MwNTcsIDB4MGFlOTlmNzksIDB4OWZiODE3ZmIsIDB4ZWVmYjllOGQsCisJMHhlYzk5YmMxZSwgMHhiYmRmYjFiMCwgMHgwZWY0YmZlMCwgMHhmMDIyYzVmMiwgMHhmYWM2YmFmMCwgMHgxMTM0ZDc0MCwKKwkweDRiMDNmOTdhLCAweDQ0ZWQxZDJmLCAweGE2NmQwZGJmLCAweDM2ODVlNTMwLCAweGJkZjJiMzljLCAweGNmNzU3NzRhLAorCTB4OWMyMzBmY2IsIDB4NjZmOWFmMWYsIDB4N2Y3MDgyYmYsIDB4YmZlN2JjYjQsIDB4M2JmM2UwMGUsIDB4NDc0MTUyOWUsCisJMHhmZGQ5ZjFiZSwgMHhiYzQ0N2E1YSwgMHgyYmZlZWU3OSwgMHhhZmU4NmYyYywgMHgyOTI0ZmYzYywgMHgxZWFjOTdhNSwKKwkweGQ2MGY5MzkyLCAweDMyMmEzNGJjLCAweDlmNGU0ODVlLCAweGY3NGU5MDk5LCAweGUyZDI5MzNiLCAweGM2YzQ2ZmRlLAorCTB4M2Y4ODZiYTUsIDB4ZjY3NTdlNTksIDB4NWNiZTBkNGIsIDB4YzM3MmY5MmQsIDB4ZjlmOWEzMGIsIDB4ZjNkZWE0ODYsCisJMHgyYWYzZmU4OCwgMHgzNDM2YzFlNywgMHhmMWFmMzk1YiwgMHgzNTg3ZTQ4ZSwgMHgzMTMzN2UyZiwgMHg4ZjU3Y2YzMiwKKwkweGE5NWJhOTdjLCAweGY3NGI3Mjc1LCAweDA5ZmEzYWE2LCAweDFlNWU0ZWZiLCAweGVhYWI3MWNiLCAweDFlNzNhMmNmLAorCTB4MzI2OWZhYmUsIDB4ZjliZGY3ZjUsIDB4NmUwNzlmMmQsIDB4YmJmODNlYmIsIDB4Nzg5MTc5MTEsIDB4NzllYTRhYWUsCisJMHhjNTRhZjQ5NywgMHhmOTRlYWIwMSwgMHhiOTAzOTJhYywgMHg3ZWMyZWUyNywgMHgxZmVhMmI2NSwgMHg1NzI1Y2YzYywKKwkweDI5YTdiMWM3LCAweDAwYTgzYjFlLCAweGMzMmFiN2U1LCAweDJiZTRhYzA5LCAweGU1MjA5NDFiLCAweGVlMzRkNmMzLAorCTB4ZmIxODMyZGQsIDB4MTYxNmVhNmIsIDB4MjU1NmJiMTEsIDB4NTk1NjdkMGIsIDB4YjEzNzA0YWYsIDB4ZTk4NzNlMWYsCisJMHhhMzY1Mjg1YywgMHhiZmVlNTBlNCwgMHhkNzc4ZTNlNSwgMHg4NWZlYjE3MSwgMHgzY2Y2YjA4ZCwgMHhmNTVkOWRjNiwKKwkweDM4MjA1ZTVmLCAweDM5NWEzNWQ2LCAweDI5MjE3NmNmLCAweGZiOGMxOTZjLCAweDg0YWJkYTVlLCAweGRjOWY3YTAyLAorCTB4MWM0NGI5NzYsIDB4OThmNDJhYjYsIDB4ZjU1ZGY2ODUsIDB4ZTQxMWMyZGMsIDB4MzgxZDc2MzYsIDB4YjkzZDIxNmQsCisJMHg1OWIxZTFhYSwgMHgzMDkxNzlmMiwgMHg4Yjk2NDFmZiwgMHg5NTk1YmJiNSwgMHhkNWFjNzk5MSwgMHhhNDQyMGVlOCwKKwkweDAyZjg0MmZkLCAweDQwZWFmYjEzLCAweDJjZmE0OTRlLCAweDQzNWUxYTZiLCAweGI2YmQ0MmU4LCAweGY1ODU2OWZmLAorCTB4OTdlMjQyZGEsIDB4ZjllZjBlMGYsIDB4ZGY2ODZmZGQsIDB4OTIzZGZmODMsIDB4N2Q3NDVmZjEsIDB4ODA1ZjA3ZjgsCisJMHhiOTRhOGJmZCwgMHg2MzNjNWMwZiwgMHhiMmIyZjhhMSwgMHhkZTIxN2NjMSwgMHhiYTYzNTJmZCwgMHhjZmRhMWVlZiwKKwkweGZkNjM4Zjg4LCAweDEwMTYyZGVlLCAweDEwZDkzZmY3LCAweDgyZWM5ZTdjLCAweDFjYjJjN2EzLCAweDlhNTdmOWUxLAorCTB4Y2U2OGYwODAsIDB4ZWMwYWNiMWUsIDB4YzhjZTQ4ZGIsIDB4YzExZGI4NWUsIDB4YmVmNTcxNzgsIDB4ODRmMThkNzQsCisJMHg3OGZhYzRiMSwgMHgzOTIxYTBmNywgMHg1ODc3YTI1ZSwgMHhlOTU3OWYyOCwgMHg1ZjEwYjRlZSwgMHgxNzNmODY1NywKKwkweDlmOGRmZmY3LCAweDg5YzZmMmNjLCAweDU3NGU1ZmI3LCAweDI3M2YzM2E0LCAweDY0MzdkZTRhLCAweDMwYjk2MThjLAorCTB4OTBjM2RhZjcsIDB4NjBiZWU1OGQsIDB4YTlkOTBmNDUsIDB4M2I5MTA3MGQsIDB4YmZiN2EyMTQsIDB4ZWMwZWUwODcsCisJMHg3Y2U5ZDA0ZiwgMHg5ZjNlMDcyNSwgMHhjZmIxMTFkOCwgMHhmNDdjYTUxZiwgMHhmOTVlNTllNiwgMHhmMDk5YWM2NCwKKwkweGIxOTNlZmI5LCAweGYzZGY1MjVhLCAweGFhYzc0Y2FlLCAweDk3OTk3OTc4LCAweGRlZGQ4NWQzLCAweDE4YmJlYzljLAorCTB4OWUwOTA3MmQsIDB4ZDk1YmVlMzAsIDB4MTQ3YmU3NjQsIDB4MmQyZDgzOTQsIDB4NzA3MjkxNDUsIDB4YzQ1ZGFhYzcsCisJMHgwN2FhNGRlNywgMHgxYjJhMDIyNSwgMHg3OWFiZmExNywgMHhjODg3OTI3ZSwgMHgwY2NlMzZhMywgMHg0ZWFhMWYxMCwKKwkweGZjMjdmMzFmLCAweDI4OWJmNzE1LCAweGZmNTA4ZmVmLCAweDNmZjc0ZGNkLCAweDM5YWM3MjRkLCAweDFlNjQ2NTYwLAorCTB4ZjFkNGQyYTQsIDB4ZTg4NTE2YWIsIDB4YTI2YmMzYmEsIDB4ZjU4MTBhZmQsIDB4NzVmMGVhOTYsIDB4OTQ1NTNjNzAsCisJMHg3YmRjNTNhOSwgMHgyMDJjYzI3NCwgMHg1OWJjZmQzYywgMHgzOWFmYmNlMSwgMHg4YjM1YmZkNSwgMHhlNTVjN2JlOCwKKwkweDJmYTM5NmY5LCAweGJiYmVlODA0LCAweDExMTQxYzZiLCAweDdmNzljNjdjLCAweDJhMGMyZTNlLCAweDAwYjliM2FlLAorCTB4ZTZlZGI0M2MsIDB4YzRkZDRiODMsIDB4MzhjZjNmYmYsIDB4ZGQ4NjdlYzYsIDB4MmJkMjAyMTMsIDB4NTAzZmU4MzUsCisJMHgxZjllYzdkZSwgMHgwOTNhZDMwYSwgMHgxNTIyYmUzOSwgMHhlZTkzNTlmNywgMHg1OGI0YmU2NCwgMHgyN2NhMWVmZCwKKwkweDM2ZmIyMDNkLCAweGUwOGFiN2NkLCAweDhhMjdhNWIzLCAweGY1Yzg3YmY4LCAweDQ4YmFmOWU1LCAweDZmNzRjZGZlLAorCTB4NGI3Y2U3ZTksIDB4NjlmMDU5OTcsIDB4NzFjMDBkZDcsIDB4NGNmY2Q3MjIsIDB4ZTMyZjIxYTYsIDB4YjgzYjA2Y2QsCisJMHhkNjU0NmFhZCwgMHg0NGQ3ZGE0NiwgMHg3OWU4ZGJmMCwgMHgxZWE1YzFkNywgMHgyZDljZGY4MiwgMHg5MTMzM2RmOSwKKwkweGZmNzYyMmU1LCAweGE5OWY4ODhmLCAweDYyYjRjMGNlLCAweDk5ZTExNjZiLCAweDlmZjdhNmYwLCAweDdiZTRhMWY3LAorCTB4ZjlhMDFmMDMsIDB4MTE1ZTQ4NzMsIDB4ZmNiYzZmNTQsIDB4ZjhiZDNmOTIsIDB4NzM3NWQxMmMsIDB4OTVjNzJmYWEsCisJMHhjMmJjZDdjZiwgMHhjNjI3NzYyOSwgMHhmZjljM2I5NSwgMHgzMWI3YzkwMSwgMHg4OWYwOTViZiwgMHhmY2QxNmZlZiwKKwkweDUxZWZjMjM2LCAweGM1YjM1Zjg5LCAweGZlNTkzYmE3LCAweGRmZWQzYTdkLCAweGYxNDFiZTdiLCAweDNjOGRmN2NmLAorCTB4ZmY2Yzk2ZGYsIDB4Y2ZlZjllZjcsIDB4NTRlNjdjZjIsIDB4MmY1YTM3ZTQsIDB4Mzk5ZTc4MTksIDB4ZmUyMDE4MzksCisJMHhhMjgyNGRhYiwgMHhhOGY4Zjg0ZCwgMHhlNDliOTY2YiwgMHg2ZjkxY2I2ZSwgMHhkN2JjOTI4NiwgMHg0MGRjNzkyNiwKKwkweDliZTZiMTc5LCAweDZmZGM5MTk2LCAweGYzMjc3NDE5LCAweGU0MmYxN2ZmLCAweGZiMTFhYTE2LCAweDdmMTdhNzI0LAorCTB4MmYzYmU3NDUsIDB4ZTJjNWIxY2YsIDB4N2M3M2ExY2YsIDB4OWM2OWNmMmMsIDB4ZWZiYTQ5NmIsIDB4ZjkxMWU5MmYsCisJMHg3ZTkyMTgyNiwgMHhkN2IzZmM1ZCwgMHg3MTk0ZDdiOCwgMHg2MWRhNDc5ZSwgMHg4ZjM4ZjM4YywgMHg1Yzg5MGRkOCwKKwkweGZhNTdiNjdmLCAweDk4ZjgxYWUxLCAweGQxZTBlYzdmLCAweGMyZjJiZmQ5LCAweGE5MmJhYTA5LCAweDM2YzEzMTY5LAorCTB4YjUyNTNlM2EsIDB4OTJmZGVlMjIsIDB4MGMxMTkzNTUsIDB4YjIxODZkN2EsIDB4OGQzNDM1ZDMsIDB4MzlkODlmM2IsCisJMHgzZWUxMTZhZiwgMHhmODU1MDEwOCwgMHgwY2Y5ZDE2OSwgMHgyNTVlMmFmMCwgMHhkYWYxOGYzMiwgMHg2M2NiZWI5YSwKKwkweDIxYWZlMzNjLCAweDYzY2Q4ZDc5LCAweDk2OWIwZTRjLCAweDIzYWU1MjViLCAweGJjZGFmMTlmLCAweGQxOGNmOWI4LAorCTB4NTE3MWQxMTksIDB4YzBjZTg2NDEsIDB4N2YwNDcyODUsIDB4NDE4OWMyODYsIDB4ZjE4MzM3OTEsIDB4MjZlYWJmOTQsCisJMHg5ZmUzODU1YiwgMHhkZTU5OTllMywgMHg5YjFjYWU5NSwgMHgxM2UwZWQwYiwgMHgzYWRiNmM0ZiwgMHg4NDcwZTUwZCwKKwkweDZiZjUwM2MwLCAweGYxZjVjOTg4LCAweGU2ZjUwN2VjLCAweGMzMWI1ZTQ3LCAweDNkZWEzODdlLCAweDRlMDJmMzk1LAorCTB4MWQwYzRiMDksIDB4MTM3ZmQwOGIsIDB4MmEyN2E1NDEsIDB4ZjYzZTEyYmYsIDB4ZGJmMTMyNmQsIDB4MmRmZDU0OWUsCisJMHg5YjRmNGZhMiwgMHgwOTI4NzVjYSwgMHgxNWM1ODc1YSwgMHg5MDBlZWU0NywgMHhlMDc2ODA3ZiwgMHgzZTg0MzM5ZiwKKwkweDdiOGEzNWI3LCAweDY1ZWU5YjRiLCAweDc0ZTA5OTNkLCAweGU0MjM1MzhlLCAweGQ4NDMyZjI0LCAweDFmNjM4YWE1LAorCTB4MmNhMGI1MGMsIDB4NGM5ZDMyNWQsIDB4ZDdmNWM3Y2UsIDB4YTY0ZmFmZWQsIDB4NzNkYWRlMzQsIDB4ZDJhNDRmNmYsCisJMHhmZjM1M2I5ZiwgMHhmZjNjMGM4MiwgMHg1MWFlY2ExNywgMHhiNzViZjIzNiwgMHg3ZTEyYzcwNiwgMHhhZTZjZTE0MiwKKwkweDIwZDAyY2NmLCAweDg3ZjYxNWEwLCAweDNjMjllYWE3LCAweDk1MDRiYTE0LCAweDViNzFhNTRmLCAweDI1N2UzNGQwLAorCTB4NTg1NTVmZjEsIDB4MzBmNjk3OWMsIDB4NmRjYzhhYTMsIDB4ZDVkZmI4NTQsIDB4ZWI0YTkzNTgsIDB4NzliNmZkNTUsCisJMHg5N2FmZTkxMCwgMHhmMzlmODQzMiwgMHhmMTNjZDVlMiwgMHhjZDFhMDZiZSwgMHgyNWMzM2ZiZiwgMHhhMjY4MmE5OSwKKwkweDMyNGJlMzdjLCAweDU1NzVkOTRmLCAweGZlYzY3OWU1LCAweDU1MzM4ZDA1LCAweDdlNDFmMjI3LCAweGNlMTFjNzc4LAorCTB4NzU1OTM2OGIsIDB4NzNjMjZmYTIsIDB4OTRkMWYwMjAsIDB4ZDU2ODdlYzAsIDB4NzY0MGQ5ZTEsIDB4MWUwNWRiYWYsCisJMHgyNGY3YzcwNSwgMHhmYzQ0N2NmNiwgMHhkNTZjZDNkMCwgMHhjMTM3M2VlOSwgMHg3MTUyMDNiOSwgMHgxZWIyM2RmZCwKKwkweGI2MTkxNzJjLCAweGRjZjdkMWRlLCAweGU5YTEyZmQ4LCAweDI0NDM5NDk3LCAweGU1N2JlMGJlLCAweDRjMDc2ZDA0LAorCTB4M2JlMjQ0NzcsIDB4Yzk1OWQ4NDksIDB4YzMxMjdiNTcsIDB4ZTk2N2JhMjYsIDB4NTllZmRmNDEsIDB4NGUwZmFiODYsCisJMHgzODBkN2RlMCwgMHhlYzBlZDk3MywgMHhmODVjZjRiMSwgMHhlNWMzM2E3MSwgMHgwNWM4M2UyNCwgMHg4ZDM0MjcwMSwKKwkweDI2YWY0OWQ2LCAweDhlN2NiZDM4LCAweDA5ZWVhNzA0LCAweGFhZTFmZDI4LCAweDIwOGU4YjFhLCAweGE0YTNjZmNhLAorCTB4YzlmNGE2Y2MsIDB4NWY2MjU1NzcsIDB4YjBiMjg2ZGYsIDB4ZmNhNDFiMjcsIDB4OWQyYjZlYjcsIDB4ODU0N2Q5MTYsCisJMHhmZGVmYTkzMywgMHhmOGUyNzhmZiwgMHg5YzIxZGFiNiwgMHg0OGE4MGJmZiwgMHg0OWI2M2I3ZiwgMHgyMTRlNzRhOSwKKwkweGRlMTIyODU3LCAweDA3ODE0MjhjLCAweGRiYjQwYmFhLCAweDdjZWY3OGM0LCAweDJhNDc3M2U0LCAweGU3OWU3ZmRiLAorCTB4ZjNlZDNhYjEsIDB4Zjg1ZTU4YjIsIDB4MGZmMGQxN2UsIDB4MTdjMjUyMWYsIDB4NzZkMjQ2NmUsIDB4Yzk0YmU2M2UsCisJMHg5YTc1NzNjNywgMHg4NzVjM2M4ZSwgMHgzY2I4ZmVmMywgMHhmZDhjMmEzNCwgMHg3OWZmYWIxNiwgMHgzZjU3Y2ZlMiwKKwkweDgwYmRiMTVjLCAweGIzMWVlZmY0LCAweDRmZjQ5Y2E3LCAweGY2NzFlMDQ3LCAweGViMzQ1ZmNiLCAweDBlZTQyMmRiLAorCTB4NzI2NGY0ODYsIDB4M2VjYzYxZGQsIDB4M2QzNmU3NTUsIDB4Zjc3NmZlNGUsIDB4ZmJhNzQ1NDEsIDB4Y2Y3MzZlZjQsCisJMHhiMmJiODI1MCwgMHhkNTBiMzNlOSwgMHhmYzFkNTY2MywgMHhiMmViZmQ4NCwgMHhkYTVlZmY0YywgMHgzNTYzNTI2ZiwKKwkweDg2NGRjZmQ3LCAweDg3M2Y1YzFkLCAweDIwZWI5MTdhLCAweDRmYTE2ZTQzLCAweGY1MWQ5ZjJlLCAweDFkMDQ3NTZjLAorCTB4MDZmMjkzZGUsIDB4NjQ2MWZlM2QsIDB4YmNhNDlhYmYsIDB4MWMzOGE2MWUsIDB4NzcyZGZkZGIsIDB4ZjdmNWE3MGMsCisJMHhmMTgwZmNjYiwgMHgxOTFjMzU1ZSwgMHgwNGRmNzg0YywgMHgzYzZiNzFhZiwgMHg1YzZhMGVlZiwgMHhhZWY3OWNiZiwKKwkweGM0NmY1ZWVkLCAweGZlNTJkM2ZjLCAweDU2ZmRjYjRmLCAweDIwZGZmYTY3LCAweDdjYjZkNzc4LCAweGMyZDJhMTZhLAorCTB4YTFhMWYzYWEsIDB4MzQ4NmY3MTQsIDB4NDcxOWM1M2QsIDB4NmZjYWY0OGYsIDB4Njk1NTNjOGMsIDB4NWY5YTE2M2QsCisJMHhhZjU4MTE3NSwgMHg1MzZiYmQyMCwgMHhiZDJmN2U5MCwgMHgzOTY2MzhkYiwgMHgzNDhmZGYzZSwgMHg4YjNiMjE0OSwKKwkweGUzZDkyYWYxLCAweDYwZGY2NmZkLCAweGNlZmQ1ZjlhLCAweDhmNDk2M2Q3LCAweGYwMjAyNDFkLCAweGFmMzc1ZjdmLAorCTB4NDM3ODQ2MWQsIDB4MjQ0ZTJmZmUsIDB4YWMwYmRiMzksIDB4Y2QzOTBjZDcsIDB4ZjdjNTM5MjcsIDB4OGJmZjg5ZjMsCisJMHg3YWNiOWZhOCwgMHg3ZGE1OGY3OSwgMHg3ZWU1Y2IxZSwgMHgyMjVjOTAxMywgMHgyMDNjYjNmZiwgMHhkZmM5M2JmZiwKKwkweDNjYTI3N2NiLCAweDU5YTNmYmYwLCAweDliYjRmN2NlLCAweGEzMzdlY2JjLCAweGZkYzkxZjVlLCAweGRmZDRjNWUyLAorCTB4NjRlYTVlZDMsIDB4ODQzYWE3MzksIDB4ZjBkNzkyNDIsIDB4MDQyNzVlMTEsIDB4NDVmMmQ3NDAsIDB4ZmQyMmY4MGEsCisJMHg2NDhjYmNmZiwgMHhmMTI0MmY3MSwgMHhkODQzMzkzOSwgMHg5ZThlNTA4MywgMHhkODczYzFlMiwgMHgzZTRhMzU1NSwKKwkweGU4YTVlYzIyLCAweDlhNWE3YjRiLCAweGJmNmQ5N2Y5LCAweDI2NTI0Njk4LCAweGRhNTM4NGVkLCAweGQ2NzhmZjQ5LAorCTB4NmQyOGZmZmIsIDB4YTdkNzg2ZDUsIDB4NzNjM2E4MmMsIDB4ZjJhNTM4NmUsIDB4ZjcxOTYxZjgsIDB4MWM5ZjI1ODUsCisJMHhiMjFhZjk5MSwgMHhhODlhN2ExYiwgMHgxM2U3YTYxZiwgMHhlNWY1NGZiMCwgMHg0YmViYmQxMywgMHg5YTRkMWNjOCwKKwkweGI1MjhlM2IzLCAweDEyYTE3YzUzLCAweDJkYTZkYjcyLCAweDE2NmEzZjZiLCAweGZjNDc5ZTYyLCAweDZlNjQ3MGQ3LAorCTB4NzVlM2Q1MWUsIDB4MDI0MmIzOWYsIDB4NmRmMGQ4ODIsIDB4MjIyZjQ3Y2YsIDB4OGMzZTFlMWUsIDB4YTc2MzhmZjgsCisJMHg3ZmNjMzhmMCwgMHgwNjBkN2ZlOCwgMHg2ZWYxZmY3NywgMHg0MDkxZWE0NSwgMHhjN2UyN2NkMiwgMHhhZmI1MDZhZSwKKwkweDIyNTQ4MDhmLCAweGZkZGY1MzYzLCAweDAwN2I3ZGE0LCAweDY3N2ZlNzZkLCAweDIyNjcwNzdhLCAweGYwMGNjZjNlLAorCTB4ZmE3ZGRiNzMsIDB4Y2IxMjRjZGIsIDB4NWM0NTY3ZmQsIDB4ZTZmMTYwZGYsIDB4NjQzNGZmMTEsIDB4ODcxYmE4NjMsCisJMHgyMjk5YWQ0ZiwgMHg4NTY0NTNlZiwgMHgzNzljZjdiOCwgMHgxODM5MGE2NywgMHgwYWVkODAxNSwgMHgzM2FhZWJjNywKKwkweGQ0YmY3NDg4LCAweGU4MmQ3YWEwLCAweGMwODQ1ZDJmLCAweDZmYTRhOTkyLCAweDAxZjc1ZTY0LCAweGZjNWUzZjkwLAorCTB4MjgzY2ZhNDUsIDB4ZGY5MDBmYmIsIDB4YzFlYjc2ODIsIDB4MTFkNmM0NWYsIDB4MzE2ZmQ5NzgsIDB4ZWIwMDU4ZjIsCisJMHgyYjVmYzQ0ZCwgMHgwZmY4MTQ5YiwgMHg2N2FhYzVjNCwgMHg5M2FmZTdhMiwgMHgxYmFiZjI3NSwgMHg4YzFiMWQ3NywKKwkweDVjZjM1ZDc0LCAweDJkZjkzOGNjLCAweGUyMTFmZjdjLCAweDVkNWQ3ODc4LCAweGNkYzMzZDc0LCAweDE5N2ZkMjk5LAorCTB4N2ZjOWMzMGUsIDB4M2Q2MmJlNDEsIDB4ZDVhMGQ2NjEsIDB4NjBhYzdjOGEsIDB4ZjYyMjQzMTQsIDB4MGJlMDQ5OTIsCisJMHg2N2NiMmJmNSwgMHg4YTZmNjFiZSwgMHhiOWVhNWU4NSwgMHg5NGE3NWMwNCwgMHg5NDc0M2JiYiwgMHhkNGE2ODFlYSwKKwkweDhmNjg3OTY1LCAweDlmMTg5YTI5LCAweGVlMjU5OGQyLCAweDRhYTBiNGE3LCAweGJjOTMwYzc1LCAweDc3ZWM1OWZlLAorCTB4YTk2N2JjMDcsIDB4ZDQ5NTY0ZGUsIDB4NWZjNGUwOTcsIDB4ZDNjOGZiY2EsIDB4ZGRmZTkyYWYsIDB4OWQ2YzYwZWEsCisJMHg5NTUzYzBhOCwgMHg4MjE5Mzc5YywgMHhjYWVmYjQzNSwgMHg2OWRlYTJkZCwgMHhmOWU4ZWVlZCwgMHhlYjRmMTI1NSwKKwkweDhjN2QzYTllLCAweGExMTU4NWQyLCAweGE3ODk3MTk4LCAweDNhOThjNmFhLCAweGRjMzhiMTE2LCAweGFkZWYyOTlmLAorCTB4ZjVmYjdkNjQsIDB4ZDFmYzViZDYsIDB4Yjc4ZGZjMmMsIDB4ZjhjNjNhZTUsIDB4ZWY5MTRjZTYsIDB4MTA2M2M0YWQsCisJMHhkNTA1ZDc3ZCwgMHgyYWQxZjEyMCwgMHhmYzJjOTAyNSwgMHhjNzJjNzA1ZSwgMHhiMDY3ZGRmMywgMHhiZGNmYWM4MSwKKwkweDNlZTllMjVmLCAweDdlN2MzZmM5LCAweDE5ZTJiZjdjLCAweGZkYzU3ZGYxLCAweDdmODY4YjNmLCAweDgzMmNmODBkLAorCTB4MGQ4M2Y5ZjEsIDB4ZGU1MGIwM2YsIDB4NTZkZjk2MzEsIDB4ZmZkOTk5ZDUsIDB4MTNmMTIzNWQsIDB4N2E2YjVmY2IsCisJMHg4NTg3NjdmOSwgMHg3ZjJjNWJlYywgMHg2Yjk1ZmE1NSwgMHhmNmZjMmZjMCwgMHgwZGY4NWJmZiwgMHhjYjkxYWYzYSwKKwkweDM5ODczNWFjLCAweDA5ZjZiNTNmLCAweGFiZjk0M2M1LCAweGY3YWI5ZDZiLCAweDdmN2NmMjNjLCAweDM1OWViOWVmLAorCTB4YzYwNjNkZTgsIDB4YTRlN2JkMzAsIDB4NjNiZDE3NWQsIDB4OTZiZGVkZmQsIDB4ZTcyNmJjZGUsIDB4NjZiNzJmMDUsCisJMHhlMGRkM2U3MywgMHg2Njc1ZDhhYiwgMHhmNjdkYmY0OSwgMHhiZDdmYzI1MywgMHgyNzYyNThkNCwgMHhhNGZiYTNmZiwKKwkweDljZThhM2M5LCAweGMwMmU0Y2FmLCAweDU2NmY4ZmYzLCAweGVlOTFmYzgxLCAweDAzM2JlMWE2LCAweGE5ZTE3ZjA4LAorCTB4NWY5NGM1YTIsIDB4ZWQwYTdmMWYsIDB4YjcwN2RkMTMsIDB4MDI1N2ZkMTYsIDB4ZDI3YjA3ZGYsIDB4YjY2N2VlNDgsCisJMHhiZGZiNDg4ZCwgMHhmYjYxZDc4MywgMHg3MGIyN2RkZSwgMHhlOWU5Mzk2NywgMHhiNDQ1YTU5MywgMHg1NGUzODJhZSwKKwkweGVkMjg1ZTlmLCAweDQyYzlmNTU0LCAweGJkODQ0NzdiLCAweGM4YTY0ZGZhLCAweGZmNzE2ZmNmLCAweDFiOGE1MWZlLAorCTB4N2IzNWVmNjYsIDB4ZGIzMjNmMjgsIDB4ODA5NGRmZWMsIDB4YTBiZTE1ZjAsIDB4Yjc3MWFhNzgsIDB4OWU0N2VkNjMsCisJMHhiZTUxNzVhNCwgMHhmMzhhY2QyOCwgMHg4ZDA4ZTlmZSwgMHgxODUxZWQ1NywgMHhiMmE2ZWVmZSwgMHgzZjY0M2RiYywKKwkweGVjODdhYTgzLCAweDdkZDM3NzYyLCAweDFmOTIwZmY5LCAweGZlNDBmY2Q0LCAweDFkZmIxMTdkLCAweDY2ZmExNTRiLAorCTB4YjY2NjBkZjYsIDB4ZWM4MzlkZDcsIDB4YmNhNzJlYmYsIDB4ZWIxNzc3YTgsIDB4ZmI0M2NlOGQsIDB4YzM3ZGZjMmMsCisJMHg3OGRjMDUxZSwgMHhhM2VlNjNjZSwgMHgzYTFlMTMyZiwgMHg1MGI2OWMwZiwgMHg3MGQyNTAxMCwgMHg0NzExZDJkYSwKKwkweDI1ZWQxYjdmLCAweDljYzJmMzBjLCAweGUxNjFkZGFmLCAweDdmZmRjZGZhLCAweDJiNzlkMGIwLCAweGYzODRmYjlmLAorCTB4N2UyODZiNmYsIDB4MTllZjNmMjAsIDB4M2E3N2JmOTUsIDB4ODVhYWZjZGEsIDB4NGViMmI0ZjgsIDB4OTE1OTAxODEsCisJMHgyNzFlNjZlMywgMHhjZmZkNGFmZCwgMHgzNjllODRlYSwgMHhlNDg1N2ZmOCwgMHgwZGZmODM3NywgMHhmNTIxNTg3OSwKKwkweGUzNWI3ZGRhLCAweGZmYTFiYmYzLCAweDk2ZWYwNDFlLCAweDAzZGViODQxLCAweDBlYjljYjc1LCAweGQxMWQ4MWU5LAorCTB4ZmM1MjU3ZjMsIDB4MTdjZDIzN2EsIDB4YTlmMmJlZmMsIDB4YmRkNWYxZTgsIDB4ZmQ2MDFlN2MsIDB4YmY0N2FiMWYsCisJMHgyZTdmZjQzMywgMHg1ZjlmMTJlNCwgMHhhNjE4YWYwZSwgMHg3ZDdkM2NhMSwgMHg4ODMwY2Q3YSwgMHgyOTNjYWY5MywKKwkweDZlYzMwNmZkLCAweGQ4OWIwZTVmLCAweGViY2VjNWVlLCAweDIxNjJiYzZhLCAweGZhZDU1YjdiLCAweDY3NzNmNjI3LAorCTB4ZjRjOTdkMzUsIDB4ZTE2YTZmMjgsIDB4YzA1YmQ5N2EsIDB4NzlmMDhlYmYsIDB4NDlkZDkzNGIsIDB4ODc3OTc2ZmUsCisJMHg5YWYzMDNkMCwgMHg0MmEwYzFhYywgMHhhMjVhYTFlMywgMHhmMTYxZjc3MywgMHg5MGUwNDliZCwgMHg0ODE2ZmVjMiwKKwkweGUyNTJiOGJkLCAweGUzYzRhNTc1LCAweDA2ZTM4YzRhLCAweDhjOGM3ZDUzLCAweGJjNjUyYmUzLCAweGQ3NjczYWJlLAorCTB4YTkyOTJhMzEsIDB4ZGFlYmUzOTQsIDB4MWUxMzI2OGUsIDB4NWJkMDgxZTcsIDB4NmY0MjQyZjMsIDB4ZWMzMWY0MTksCisJMHg0MGJlYWM1MCwgMHhkMTBmNzcwYiwgMHg5NTkzNmQ3NywgMHg0YmU3ZDZlYiwgMHgwZWJmMzViZCwgMHg1ZmQyOTZmNSwKKwkweGI0MGY3NDdmLCAweDdlZjFmYzhiLCAweGRkYWM3NzAxLCAweDllODg2Y2FkLCAweGZjMjAxYWVmLCAweDdmZDJjYmQ4LAorCTB4NGQxMDFjMmUsIDB4YjAxZWYyOTcsIDB4OWU3ZjdlNTMsIDB4ZmM4MjdhYWUsIDB4ZmI0NmJiNTYsIDB4N2U0NThlYjcsCisJMHhmNTViZjVjMywgMHhlYWYxMjllMSwgMHg0ZGY2OGNiNSwgMHhmZDE4MTcxOSwgMHhjMzY3OTQwNSwgMHgwZWU3MjFmOSwKKwkweGZmZGM2NDQ3LCAweDdmODQwMzlmLCAweDFhYjI2NmIzLCAweGM0NDZiYTIwLCAweGIzMGEwYjQ5LCAweDczNDljNmUyLAorCTB4ODYzN2Y0MDksIDB4NzFiM2Y3ZGMsIDB4Nzc5MjcxOTEsIDB4YjdlMjI4ZDcsIDB4MmNlZjc1N2YsIDB4YWFhNmJhYTcsCisJMHhiYTJmYTEzYSwgMHgyOWJhZTEyNiwgMHhmYjAzZjdlNCwgMHhkNjc1NTVkMSwgMHg1NTMzYzUyMCwgMHg3ZGZjMmZjOCwKKwkweGM5MDlmMTFhLCAweDQ2NTI5MzYzLCAweGM2NzE4MjdjLCAweDQyZmViNGVkLCAweGYzYzRlYWJhLCAweGZiNDQ2YzJmLAorCTB4MmMyZmNiOGUsIDB4YWJmOTkyZmQsIDB4MzczODg0NmQsIDB4YmM0MDZkZTIsIDB4Mzc4OGMzYjgsIDB4YmYwYWFmMmEsCisJMHhhOTVlNzhkNiwgMHg1MWRjNzA3NSwgMHhiNWVhMjRkOSwgMHgzMzdjOGUxYiwgMHhlZGUxMGIzNCwgMHhkMGYzZmU2ZSwKKwkweDNlNGY1NGU1LCAweDg2ZTdkODQwLCAweDU0YTdkMGUyLCAweDFlZjVmNDU3LCAweGI1ZmY1YzViLCAweGI1MmJmZjU3LAorCTB4ZTY5NTBmMmMsIDB4NmJmNjRjOGUsIDB4NzkxZmEyMGUsIDB4YjdkMWVhMTMsIDB4YTUzOGUwYmYsIDB4YmRjMjQ4ZTEsCisJMHg1YWViY2Y5NCwgMHhmY2U2MWZlMSwgMHhjMzU1M2ExZSwgMHgzNzgzZjYyNiwgMHhlNGI3MmQ0MSwgMHg4ZGZhNDUxZiwKKwkweDRlYTI5ZDJiLCAweDNmNjk0MWU5LCAweGYyMDhmZmE5LCAweDc3Mzg4M2Y1LCAweGY5N2Y2MTQ2LCAweDg1NDlmNDM3LAorCTB4MTBkNWViZTQsIDB4ZTk1NTMyZDgsIDB4YTQyYTA3YWYsIDB4ZGZjZGFjZGMsIDB4ZjZhZTg1YjUsIDB4MGFhN2ZkNjMsCisJMHgzMTE4NGYyOSwgMHhmNThjYmRiMCwgMHg4NjMzZmU5ZiwgMHg0ZWRmYWI1ZiwgMHhiYmI4ZmY2NCwgMHhhZTUyNzU0ZCwKKwkweGFiZmJmMTE5LCAweDYyMjdlNDQxLCAweDI3MWQ5MDVjLCAweGU0ODVmYjVmLCAweDdmNzk0ZWNmLCAweDY1NDkzZDVjLAorCTB4OGIyNjk5ZmMsIDB4MTBiN2YwZDYsIDB4ZGQzN2NjOGYsIDB4YjI0MTFkYTcsIDB4NWY4Nzc5NmYsIDB4NTgzZTI2Y2QsCisJMHhkZWZhM2JiYiwgMHhlN2U4ZTg4OSwgMHhjOGEwYjFiYSwgMHg3Y2VjODU0NywgMHhiZjhjNjUxNywgMHgzMWQ1Zjg3NCwKKwkweDZmZDU2ZmM0LCAweGQwNGEzYjdmLCAweDk2NTE5YmU3LCAweDY3YzM2YmY0LCAweGUyMjI4YWI0LCAweGUyMjI5MzY2LAorCTB4NDc1YWZkZTYsIDB4NTU2YmM1MzIsIDB4NjQ1ZjU1MDcsIDB4ZWY0MWJmM2QsIDB4ODEzY2E1OTcsIDB4ZjUwM2YyMjYsCisJMHhhYmU2NzQwMywgMHgxZmMxMjZlYSwgMHhlMmQxNjZhNiwgMHg3ZTQ0NGJmZSwgMHhmN2ZiY2NjOCwgMHhiZTQ2MmYxYiwKKwkweDA2N2IxZWY5LCAweDQwZjIxNzA0LCAweGY5ODdiOTk1LCAweDg5YjRlYWFmLCAweDdkM2FhOWUxLCAweGM0NDQ3MzM5LAorCTB4Nzc1YTAxN2IsIDB4ZWFiZmU5MDAsIDB4YzRmYWMwNzUsIDB4ZTc2ZmE0MGUsIDB4ZDg5MWY3ZDMsIDB4MDI3ZWZmOWYsCisJMHhiMmM3NjFmYiwgMHhmYjhiOTdiNywgMHg3ZjQ4MTUyZiwgMHg5YWY2ZmMzZCwgMHg2MGY2OTFkMSwgMHgyZjcxMDBlMiwKKwkweDM3MDc4NDBlLCAweDEwYmYzZjc5LCAweDZjM2M0YmZiLCAweGJmMzI0NTgyLCAweGFmNzlmODIwLCAweDJlMzA5YjhjLAorCTB4OWM0MDczN2IsIDB4ZmQ3YWVjYjgsIDB4MmI2NmVhZTksIDB4ZWFiOWZlNTAsIDB4MTlkNzJiMDMsIDB4OTJiY2RkN2QsCisJMHhlYWI4N2VlMywgMHgwNmZhNGQxZiwgMHhhOTFiZmVmYywgMHhjYWYwZjg3ZCwgMHhlYmZjZjRkMSwgMHhlNDZmYWJjMywKKwkweDI5YjJhOTdjLCAweDIwMTFjZjJhLCAweDVmZTRkY2Y4LCAweDVkZWVmNTdkLCAweDY5YjY3ZmU0LCAweGI2MTQ5ZmVjLAorCTB4ZWU5NzdkOWQsIDB4OTgzNWY3NjksIDB4OGFkMWRiZjksIDB4MDY3NjEzZmQsIDB4MmFhZmM4OTIsIDB4MTFkZjRmOWMsCisJMHg5OGQ1NmJlZCwgMHgzMmRmZDBmZiwgMHhmYjNiMmJmYywgMHhkODhhYTc1NywgMHg3Yzc1YzJiZiwgMHg0ZThiNmU0MSwKKwkweGE3YmFkMzk0LCAweDlhNjg4YjhhLCAweGQ3YTRlMzgyLCAweGU1N2Y5M2M2LCAweDBjYjdmM2U4LCAweGY4OTMzZTc4LAorCTB4ZTA0OTZlZWMsIDB4ZDkwMjhiYmMsIDB4NDQ2MGNmODIsIDB4MWFlYmRjMTQsIDB4NjRmZjY3NWUsIDB4ZjUxYWEzNWQsCisJMHhkZWYxODhmZCwgMHg3Yjg4MDY1ZiwgMHgzZTBjZWY4NywgMHhlNjVlMjkwYiwgMHg1ZGEyYmRhMywgMHg5MzJmYjhkNywKKwkweDFjZDZiMWNlLCAweGFlYTkzZTYyLCAweDNkZjE4YjMzLCAweDA3YmEwNWEyLCAweDQxMWZjMDlhLCAweDI3M2YwODA3LAorCTB4NjVkMjExZTgsIDB4ODQzODI1OWUsIDB4YmRiZGZhZmMsIDB4MmViMjhhZjcsIDB4ZjVlYTI4MjQsIDB4ZjM4NzVhNmEsCisJMHg1Yjk3NGM3NywgMHhiM2M3YTVmNywgMHg5ZWU5Mjc0MywgMHhlM2JlMWQwNywgMHg4YTFlMjI1OSwgMHg1YmFkZmYxZCwKKwkweDlmOGU0MWU0LCAweGY4ZjFmYTEzLCAweDc4ZThmZjRjLCAweGM1MDAzMjdhLCAweDQ4YTA1ZjIyLCAweGVmODgzNWZhLAorCTB4MzVlNzYzZWQsIDB4ZmU3ODdhZDMsIDB4YzcwMjQzZGQsIDB4ZjczYjhmODksIDB4NjNmZGYwMjYsIDB4NzVlNDRiYTcsCisJMHgzNGRiZWE0YiwgMHg2ZDY2MWVmYSwgMHhlYzgxMzI4MywgMHhmNzljZGFkMiwgMHhlYzE5N2JmOCwgMHg1YzllOTExNywKKwkweGY3YzgzZTFiLCAweDdiNzUxNWFmLCAweGMwZTM3OTY3LCAweGVjMmRkZGIxLCAweDlkZjkzY2MzLCAweDdjZjhlYzcyLAorCTB4M2MwNjdlMzksIDB4ZGI5ZTMyMTksIDB4NjczZWY3NGUsIDB4ZjE0ZWNkY2EsIDB4ZWVmODliZGQsIDB4ZDdhOTU2ZjUsCisJMHg2NjYyZGYxNywgMHhlODBjZWEzZiwgMHgyMjdmNzE2NiwgMHg0ODE2MzllZSwgMHhkNGFiN2RiZCwgMHg2M2RmYjFmNywKKwkweDc2ZmRmYTFiLCAweDY3YzJjZWI5LCAweDczZGQzMzYwLCAweDdkOWY3ZWM0LCAweDE3MGZmNGJiLCAweGVmZDc5NzgxLAorCTB4ZjRiZDVkZjcsIDB4ZmVmZjYzMTMsIDB4ZWE1Yjg5NDIsIDB4OGEzMDUxZjUsIDB4ZWQwODdhZjQsIDB4ZTQ1YmQ3MGQsCisJMHg5ZWRkYjAyNiwgMHhhZTMyMzA1ZiwgMHhhOWRmNDFkZiwgMHg3NTNiZjJlYiwgMHg1N2ZhMGQ2YSwgMHhmNmM3YmVlNywKKwkweGI5Y2I3OGYwLCAweDg2ZmJmOTk3LCAweDFkOTAwOTczLCAweGNmYWQ5ZWU3LCAweGU0N2ExYTFlLCAweDc5Nzc0MTM2LAorCTB4MTRlMTUxZWYsIDB4YmZmNDFhMzAsIDB4NjQ1YTExODQsIDB4ZmZhMGNkN2UsIDB4ZmYwZTkyODMsIDB4Mzk0NTc1YzcsCisJMHg2M2U2NDVhMCwgMHgwN2ZlYTkwZSwgMHg0NzU0MTlkZCwgMHgzOGZlYzlkZCwgMHgyMWVkODA5ZSwgMHgzY2E4NmI5ZSwKKwkweDg0NmI1MGQ3LCAweDcwMzRiYjlkLCAweGVlM2U1Yzc5LCAweDQwNmE1ZjNiLCAweDZlNzQ5M2Q4LCAweGVjYWQ3MjViLAorCTB4MTQ4NDU2MzcsIDB4MjJiMGVlZmUsIDB4OWI3ZmEyMGMsIDB4NTFjYWY5YzIsIDB4YmY1YzJkMGQsIDB4ZjE1NGE0YjEsCisJMHgzYzVhODU3OCwgMHg3YzE5ZjA0YiwgMHhmYzI2YzBiNCwgMHg3YTVmODMwMywgMHg4OGY5MjVmMSwgMHhiODVmYzljNiwKKwkweGIxMGJmYTU1LCAweGRhMWEzNGZjLCAweDRiZmFkMTY3LCAweGVhODc4YWJkLCAweDQ3YzlhZjM2LCAweDRlYmRjNmNiLAorCTB4ZjhiNWVlZTEsIDB4NGNkMmY5MDgsIDB4OWY5NjMxN2EsIDB4MWZmYjczNWUsIDB4Yjc3NWZjMjUsIDB4ODA1MjVlNWYsCisJMHhmZGNmMWZlYiwgMHg0ZmYxMjg2YywgMHhlOGU0MzVlNSwgMHhkZGJmNDk0NSwgMHhhZTcxYzA4ZSwgMHg3NTk3YTk2MywKKwkweDhkYjlmNTA0LCAweDU2OTc4NDFkLCAweGQzYjJiZjYwLCAweDgzNjViZWQ1LCAweDhlYjliN2YwLCAweGMwOWMyMmEwLAorCTB4NGQxNWE1ZjUsIDB4YWQ2ZWZlNzYsIDB4NzEzYWExYTIsIDB4MjZlM2U5MGMsIDB4N2VjNzYzZDUsIDB4NTJlOWMzNzksCisJMHgxNzk0MjNjYSwgMHgyYTk3M2E4OSwgMHhhYmJiYThiYiwgMHhiYmJhOGJiMiwgMHhlN2ZlZTliOSwgMHhlZmY4MTNkYywKKwkweDExZDc0NDAzLCAweGI1N2UzYTU4LCAweDNlZjg3YmUxLCAweDkzMzVkZjU2LCAweDdmZTEzNzBmLCAweDRiMzUwZjRlLAorCTB4YmI2ODZjZmMsIDB4YzQ4NjM5OTIsIDB4ODg3ZmRkMzQsIDB4ZmQ3ZWVlZTAsIDB4OGE3ZDBiNDUsIDB4ZDVlNjM1NTEsCisJMHhkNjgyNTQ1OSwgMHhkZTc5ZDZlYywgMHhiNTJkNzUyZCwgMHhlMDM2NTY5NCwgMHg0MjlkYmJiNywgMHg0MzgzOWFlZiwKKwkweGJmY2Q2ZmQ4LCAweGVhOWI3YWJlLCAweDI1OGM2ZjgzLCAweGQyZDVkNWZiLCAweGMxMTJkNjM2LCAweDUwMWI5ZGVmLAorCTB4NjNhMWM3NmYsIDB4MWNhNDk4MzUsIDB4Y2EyYWRjNmIsIDB4MDk0N2U5MjIsIDB4M2U2YWFlYjksIDB4OGJmOTQ5OWEsCisJMHg3Y2U3OTI0ZSwgMHgxZTQ5ZGY2YSwgMHhkZWM1NmQ4MSwgMHhjOTIzYzkzMywgMHg1YTJmZDk5ZiwgMHg0ZDRiYmQ2MywKKwkweGFkMDNjZjJhLCAweDQ5ZWRkNDYzLCAweDY2NmRmMDkxLCAweGM0ODUyZWY4LCAweGEzMWQwMDNhLCAweDhlNDQxNzE2LAorCTB4ZDZiZmZjZDcsIDB4M2U4NTE3MDcsIDB4MDdkMjg4ZTgsIDB4MTY0MjllMDYsIDB4MDM4OGVmZTAsIDB4YTc1Y2FkODcsCisJMHhhZTNmZjc0MCwgMHgwMzZhM2EwOCwgMHhjMjZlZmQwNSwgMHg3NmU0OGE2MCwgMHgwZjdiZGQzMiwgMHg4MzRmOTcyNywKKwkweDQxYWZhOWJiLCAweGZiYTU0YjU4LCAweGVhMmFiMGU5LCAweGJlYjA4NmZiLCAweGJmZjcyODlmLCAweDUwYjcwYjQ5LAorCTB4Nzk2NGYwM2QsIDB4ZGEwNTNhNWYsIDB4ZTgwY2RlNzksIDB4NGUwYmQ2ZTEsIDB4MThiYTBlZmUsIDB4YjI0ZWRjM2MsCisJMHg1YTUzZTc4NSwgMHhlMjE0M2YyYiwgMHg5OWMyN2JlZiwgMHg0ZDgyZWI5YSwgMHg4NzFkNmY3ZSwgMHhkMzc4N2RkZSwKKwkweDBmODE4MmUwLCAweDQ0ZDVlZTk1LCAweDc5ZWM1MzNkLCAweGZjMjgxODZlLCAweDQyYmM5YmJjLCAweDQxNGI5MTBmLAorCTB4MjA5M2MwZjUsIDB4ZDNmOWY3YzQsIDB4ZWJkZTQzYTEsIDB4NTRjNzNmYzcsIDB4MWVlOTBiOGMsIDB4MzFiYTNhNmYsCisJMHgyMDhmOGM4OSwgMHhlNzQ2OWZjZiwgMHhhNzlkZTM1MSwgMHgxOTkzM2U2MywgMHg5ZjA0OWQ0YSwgMHg3ZDM0Y2UxMiwKKwkweDczZmViZjY3LCAweDI4MzU1Mzc0LCAweGViZWZiZGU1LCAweDUxNzFmYWU5LCAweGE3YTgzZGRmLCAweGE5Zjc4ZGU5LAorCTB4N2FmMTU5N2UsIDB4NDNkOWJlYjksIDB4ZmM1MzhkZGYsIDB4N2IzYWQ2MTMsIDB4YzAzNjU5ZjUsIDB4NzIyYjgxOTgsCisJMHhmYmU4NGUwNiwgMHhjMGZjMDQ2ZSwgMHhkZmIxMjQ3NSwgMHgyNzdjNDQ4ZCwgMHhmZTIzMTcwMiwgMHhlNzUxOTIyZSwKKwkweDQ4YjgzYmJiLCAweDY1OTEzYWE3LCAweDdiZmUzNmU5LCAweGExYjY4NTNiLCAweDc5YWYyOWUzLCAweDMzOWZjZDI4LAorCTB4N2RlYTgzMzAsIDB4NjJmMjQ2ZWIsIDB4ZmIwMjcwNWEsIDB4ZWNiZjkyYjksIDB4Nzg0NDlkZTAsIDB4ZjdjNmJjNTAsCisJMHhkMzdjYzAyYiwgMHgzMjBiZjdmYiwgMHhiMjI3YmY4MSwgMHgzZTc3YzU1YiwgMHg2ZDFmOTFkYiwgMHgzYTA1MmNhOSwKKwkweDIzYzM1ZmQ1LCAweGQzZjkzYTI1LCAweDBmMzY1YzViLCAweDI1NmM0NzdkLCAweDcwN2RlZGI4LCAweDFkNDRkOGQ3LAorCTB4ZDQ0ZDhkNDgsIDB4NzJmNTE4NzksIDB4YjFhZDc4YjEsIDB4OGY0ZTc5MTksIDB4OThmMWZkOGQsIDB4NjI3ZTkwZWYsCisJMHg3ODQyZGZmMywgMHg5OGE5Mjg3YSwgMHhkZTUzMGVmZiwgMHg1Y2RjZDMyYiwgMHg3ZmJmMjUwZiwgMHhmMDMwNDlhYSwKKwkweGU3ZTM2YzUwLCAweGVjOTRmNTdkLCAweDNkNTJkNjY3LCAweDkzNTljMjM3LCAweDc4ZmY1YzAxLCAweDBhNTQ2OTM0LAorCTB4YjRkNTY1ZDUsIDB4OWFlZTdhODksIDB4NzdlYjAwOGMsIDB4N2Q2MTVmYjMsIDB4ZDI1YWQzNWYsIDB4YjJlMmY2NGEsCisJMHhkZDc1YzJjMywgMHgwNzUxMmUzNSwgMHhkMDgwYzgxZiwgMHgzZDM0N2FmMywgMHhhMGY0MTlhNiwgMHg4ZjU5NGJmYiwKKwkweDVjNjVkMDY0LCAweDdiZDA5NDNhLCAweDkxZGVjMmUzLCAweGRiNDI5Mzg0LCAweGZkZDAzN2NiLCAweDc0NzBiOGMyLAorCTB4NjlkMjE5N2QsIDB4ZjdhOWQxMzUsIDB4YzljZDFlM2IsIDB4N2QwNjFlZjUsIDB4ZDk5ODcxOTAsIDB4MDZlZTkyOWQsCisJMHhkZmM2OWNiZCwgMHg1MTZhZjAyMywgMHhhMGMwOGY3ZiwgMHg0MTQ0ZjZlMywgMHhlMDU1MzMyZiwgMHg3NTc3ZTcwYywKKwkweDRlOTYzNzVhLCAweDE0ZTExYmZmLCAweDRiYjBiYWMxLCAweDAwMDA0YmIwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHhzZW1faW50X3RhYmxlX2RhdGFfZTFoW10gPSB7Ci0JMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHgyNzdiZmYwMCwgMHhhM2YwYzBjZCwgMHhhNWZkODExZSwgMHg3OWJhMTgxOCwKLQkweDg5NjhjNTUwLCAweDMwMzI3MTM3LCAweDMwMzE3MGIwLCAweDA2NzEwMjY4LCAweDIwMzZkZWQwLCAweDE3YzQwZWRkLAotCTB4MTAyMmY4ODAsIDB4MzAzMzcxOWIsIDB4MTE3MTAyMTQsIDB4ZjIwMzJmMTAsIDB4NTZkY2QwOTMsIDB4NTBjMGM0YzEsCi0JMHg0MDM1YzQwNSwgMHgzYWM0MDc1YywgMHhiYTBjMGM4YywgMHgxZmRiYzQ4YywgMHhmMGMwYzQyZiwgMHhkN2MxMGM0MiwKLQkweDQ4NjA2NzEwLCAweGZmOWZhNDkxLCAweDU0ZWUxYjA3LCAweGMyN2RhZmExLCAweDg2MGMwY2FhLCAweDQ2NjJhOGJhLAotCTB4NWQ2MzdjNjgsIDB4YTA5ODY2ZmMsIDB4ZjFhMjliYzksIDB4MTdlOGYwY2QsIDB4ODdlNTQwYjQsIDB4ZTNmMmEyMTksCi0JMHg3NjE4MTk4YywgMHgzNzA5YTkyMiwgMHg3NDE2ZWZjNCwgMHhmN2E4MDJmYywgMHgwMDAzMTAyNSwgMHgyMjAzN2JlYiwKLQkweDAwMDAwMzY4CisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg5M2NiZmYwMCwgMHg1MWY4NjA2NSwgMHhkMmY5YzA4ZiwgMHhiY2RlMGMwYywKKwkweGM0YjQ2MmE4LCAweDBjMGM1YzBjLCAweDBlNWM0MDQxLCAweDdiNDAxYWM0LCAweGRiZTkwMTZmLCAweGNkY2UxYzQwLAorCTB4YzQwMTEwYzAsIDB4MWZmODgxZmIsIDB4NjIwN2ZmMTAsIDB4MDRkNjIwMGQsIDB4Nzk0MDVmZTIsIDB4NWIxYmE4NDUsCisJMHhkYTE4MTg5OCwgMHg4ODAzYjg4MCwgMHg4NzU4ODBiYiwgMHg5NzQxODE5MSwgMHg5M2ZiNzg5MSwgMHhkZTE4MTk4NCwKKwkweDdhZjgyMzg5LCAweGNkMGMwYzEyLCAweGZmZjNmNDUyLCAweDU2MzFjMzYwLCAweDI5ZWZiNWY0LCAweDE3NGUzZWQwLAorCTB4MTljNzNmMDQsIDB4NTA1YzI0OTgsIDB4ZTBiYjcwZDUsIDB4NGQwNzgzMzcsIDB4Y2Y4ZDE3OWUsIDB4OWU3ZjQ3ODcsCisJMHg1Y2JmMmEyMSwgMHg0ZDNmOTUwYiwgMHgyM2UxODE4NywgMHgyZDBhOWE5MiwgMHhjNzQxNmVmYywgMHgwYzBjNDY4YSwKKwkweGFiYzQ0NjRhLCAweGNhOGM2MGRmLCAweGQwODEzMDBmLCAweGIxYWRmOTAwLCAweDAwMDNhODA5LCAweDAwMDAwMDAwCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIHhzZW1fcHJhbV9kYXRhX2UxaFtdID0gewotCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RlNWZmMDAsIDB4ZDU1NDdjMDksIDB4NzNiOWY4YjksIDB4Yzk5OWRlZTcsCi0JMHhhYzg0OTkyYywgMHg1ZDg2ZjEyYywgMHg0ODQwOWMwNCwgMHg1ODc2YzQ0MywgMHgwNjIyYjRhNCwgMHgzMGEyMGE5NywKLQkweDkwMzdkOTZjLCAweGZmNjlmMGZhLCAweGE1YWIwODE5LCAweDY4ZDA2YTFhLCAweDY4MzA0ZWMxLCAweDFhMDc0MWIwLAotCTB4MDFjMDQ4MzAsIDB4NmEyYmUyZDQsIDB4NmQ4YWQzZWMsIDB4MmMzNDgwYzUsIDB4MGRjNDY0ODYsIDB4M2ZmMmQzZGUsCi0JMHhjZGNlNzdkZiwgMHgxMTMzN2JkYywgMHhiZmZiZmI2YywgMHg0ZjE2OWZlNSwgMHhiN2ZiM2RjZSwgMHhlNzdjZWY5ZCwKLQkweDkyY2M1ZjNiLCAweDQwN2UxMjQwLCAweGExZjg2NWM4LCAweDIxMTMxOGU5LCAweDVkMjQ1YzY0LCAweDg4ZmRmZDZjLAotCTB4ZTUyMjdkNTMsIDB4YWNjODk1N2YsIDB4NDY1YTQ4ZTAsIDB4NDZkYmU0MmEsIDB4YjIxM2JlNDUsIDB4YjE2ZmViMTIsCi0JMHg1ODkzNDZiOSwgMHhjNDAyZDM0OCwgMHg5M2RmM2Y0NSwgMHg4NDU5MjI2OCwgMHhmODI2ZTdkYywgMHg5YmNlMjViMywKLQkweDEyMTI2NDI2LCAweDZmNzE2OGRlLCAweDI1ZGZhNzRkLCAweGQwMjQyNWM1LCAweGI3MjBmZDc0LCAweDRhNzY4MDVmLAotCTB4ZWJjM2U0MTIsIDB4OWE1NmY3MjUsIDB4MTY1ZjVmMjcsIDB4Y2FkOWJkYTEsIDB4MjdlODEzZGEsIDB4Zjg3YzkwODksCi0JMHhkMjIxMTA3ZCwgMHhlOGY4OTE0NSwgMHgwMjRiYTRmYywgMHgzMjI0NWJhNiwgMHg0ZmNlOTcyZiwgMHgyNjQ2ZGY3MiwKLQkweDczZjMyMjNhLCAweDkzOTJlNDI3LCAweDk5NGVmYmY0LCAweDUyZWZkMzk2LCAweDM3ZDVhZTQyLCAweDJkN2U1MjMyLAotCTB4ZTRmZTcwMTEsIDB4NWZlYzRhZWIsIDB4ZmJiNTZmMWQsIDB4ZDcxN2FiMzYsIDB4ZGZiNTE3ZWIsIDB4NWMxN2RjYmIsCi0JMHhjYjc1N2RmMCwgMHgyZDBmZDhlZCwgMHhjMzk2NzVjMSwgMHg5ZTVhMTRmYywgMHhhNjI2NTI3MCwgMHgzODExZmY0OCwKLQkweDM1MWM3MDA1LCAweDcxZDBiNGFmLCAweGYwODg0N2JmLCAweDg0ZWQzN2NhLCAweGI3NmFiYmFlLCAweDVjMjg1OGE0LAotCTB4NDI5NmVmMjYsIDB4ZDJmOWEwM2YsIDB4NzkwMDIxM2EsIDB4MjExYjAxZDMsIDB4OWI5ZDZlMTQsIDB4OTRlNDNlNTksCi0JMHg3Y2ZmNTBiZCwgMHgyZWQzY2QzZCwgMHg4ZmFkMmRjYSwgMHhkZDcwMDBkYywgMHgzOGFkOTIyZCwgMHhlNjA5YWU0YywKLQkweGFkYzJhZWRiLCAweDZjZjNlNTk5LCAweDc3NWE1YjJjLCAweDJmYjQyZTcwLCAweDFiMTBiNjY4LCAweDZmNzRhZmVkLAotCTB4NjgxYjhjZmUsIDB4NDQ4OGZmM2UsIDB4YjZlOTRhYTAsIDB4OWE1ZjcyMTUsIDB4NDEwODBjMmYsIDB4MjI0ZDc3YzgsCi0JMHg4ZjdmYmUzOCwgMHhlYjQ2ZDgxOCwgMHg5MzVhYjk3NywgMHgzYzcwYTRlZSwgMHhjYTI1Njk1NywgMHg2NzZmM2EzMCwKLQkweDE0MWRkMjZiLCAweDlkODE0NTBlLCAweDUxNWRhMTUzLCAweDEyMDFlMGEzLCAweGRiN2JiYzlhLCAweDVkYjRhOWViLAotCTB4NjNjMTc2ZTksIDB4NmUyOTcwYTEsIDB4Mzg2NTEzYjAsIDB4ZmE2NWMzOWIsIDB4MGM0OWJkYWYsIDB4MmY5NjgwZmQsCi0JMHhlOTI0ZWJhNSwgMHhhOWVhZDc4MCwgMHgzN2YxODQ0NCwgMHgwMjMzOGFjYSwgMHhjMzk1NzNhNywgMHhlNDg5NjI4OSwKLQkweDcxZDNiNzRiLCAweDE3YjJiYjY4LCAweGIxMmMwZjA0LCAweDQwN2M0NGNjLCAweDZkN2I5ZDk3LCAweGMwNzE5ZWIzLAotCTB4NDNjODU2ZmEsIDB4YjVhZWIwOWQsIDB4MGZjYmQ0MzIsIDB4NTM2M2RmY2MsIDB4ZjI3NTdlNjAsIDB4YjQ1ZTVhNTQsCi0JMHhkM2NlNGViOSwgMHhlMWI4YmZlMCwgMHgzNTU4YTIzYSwgMHg5NDFkYWFmMywgMHg2MzBmYTVhYywgMHg4OTkyOGU3YSwKLQkweDg0NDUzZTc2LCAweDIwMGU4Mzc4LCAweDUzM2M4MDgzLCAweDg1N2QxN2MzLCAweDcxNzdjNDM4LCAweDlmZWJhODgzLAotCTB4NDQ5MDkyNDIsIDB4ZThmN2RmZmEsIDB4ZmU1ZTE0YWYsIDB4YWI4NDRlZmQsIDB4OWNhNWI3OGEsIDB4NWRiYzU0OGUsCi0JMHhjYzQzZmNlMCwgMHhmZjZkMmNlMSwgMHhlMDA4ZmE2YSwgMHhiYWE3Y2U4MSwgMHgyZmU5OGRkMiwgMHhhZDMwNTMyYiwKLQkweDNmMTA1NGE5LCAweDY4ZmMwMzhmLCAweGRiY2Y4MWJhLCAweDM0NGM4MTM1LCAweDVlNWQ3MWQzLCAweDhiMzYwNmUyLAotCTB4Mjg5ZGVlOWYsIDB4MmU3YzdjZDEsIDB4ZTNkZDI3Y2IsIDB4NTk2Zjk0MTMsIDB4MmUzZTlhYmYsIDB4NGYwM2U2ZjksCi0JMHhiZDUzMjI2ZSwgMHg5NzlhNTRlNiwgMHg4Nzg4NGI3ZCwgMHhkNWJlNmY4ZSwgMHgyMTNjNjUzYiwgMHhhM2RmMTJhZiwKLQkweGU0ZDE3ZWIwLCAweDEyYmMwMDJiLCAweGE1Yzk0YzEyLCAweDUwMjM1OTc4LCAweGI1ZTE0MjM5LCAweGUxNDkxNjE2LAotCTB4ZDI5NTI2YjAsIDB4ZTNkM2M1MzMsIDB4MjMzZDY2ZjcsIDB4MDlhZDdjMGEsIDB4ZjY3YmNmOTAsIDB4YTdlYzc0ZTEsCi0JMHg2OTkxZmIxNiwgMHhkY2FlODMzZiwgMHg2Y2RjZDI0ZiwgMHg3MzQ5M2Y1ZCwgMHhlYTdlZDQwYiwgMHhhYjk4OWZiMCwKLQkweGI5ZjFlN2ViLCAweGNjZjlmYTM5LCAweDc5ZmI1MjJkLCAweGFlODllYTFlLCAweGQyNTc1YmFiLCAweGY5ZmEwOWJjLAotCTB4N2VjMTJiY2MsIDB4MTBmMWVmOTIsIDB4YWEyZmFkMWYsIDB4YmQ1YTQzZjQsIDB4MzQ3NzJkMjIsIDB4OTg3OThkYzYsCi0JMHhkMjY4ZTk2OCwgMHg0OWNmZTgxZSwgMHg0NzRiNGFiOSwgMHgzYTMxZDliMSwgMHhjNmYzOGE3ZSwgMHhhNjdkZjJlYiwKLQkweDRmZDVkNWY1LCAweDJiYTgxZGNjLCAweGMyMzU5ZTRmLCAweDc3MGU5NzQwLCAweDBmM2M3NWZiLCAweDkxNTk3MjkzLAotCTB4MzJiZWU1ZWYsIDB4N2Q4OTlkY2EsIDB4ZmJmZjM4YWQsIDB4ZWU1MDNhZmIsIDB4MWJlMzlmZGMsIDB4ODZmM2E2ZTYsCi0JMHhmZjhhMTJiOSwgMHhmNWRmNjVmYiwgMHg0Mzc0MjhlZSwgMHgxNDkwMjVkNywgMHhhNDEzMTU0OCwgMHgxMmI1ZjJjNiwKLQkweDdlYTRkYjgzLCAweDQxM2QwZjVmLCAweGMyOWI5N2RiLCAweGZlNjhlMzQzLCAweDhmZjEzMDg4LCAweDgwYmZlZWIwLAotCTB4OGI3OGE1MzAsIDB4ZDQwNTQ5MTEsIDB4OTQxMGIxOGIsIDB4YjNkMzZiN2YsIDB4ZTA2YmYxOWUsIDB4YTUwMDZlYmEsCi0JMHhlZmQyMjExNywgMHgwMjk3YzkzYSwgMHhhZmU2ZDhmNCwgMHhhZTdkMDNmMCwgMHg2MDUzMjAxOSwgMHg1NDgyNzIxMiwKLQkweDY5ODNmYzg0LCAweDI5NzkwMWZiLCAweDRjOGI3ZjAwLCAweDdjNzY4N2U1LCAweDEyM2Y4ZTk5LCAweGYxODc2ZmM3LAotCTB4ZGYxOTdhM2IsIDB4Mzc1YjMwMzIsIDB4NDBhZDM1YmUsIDB4YTY1NWJlMzcsIDB4MDhmZTUzZTMsIDB4ZjFmMzk3ZmIsCi0JMHgwODcyZmMyOSwgMHhjNzJjOTRmOSwgMHgwNTY5MmRmMSwgMHg5OTVhZmUzOCwgMHg4ZmM2ZTgxNCwgMHg0YmZmMWVlOSwKLQkweDE4NmJmNzE4LCAweGZhY2EzMTNmLCAweGQ3ZThlNjA3LCAweDVmYTQ1NjlmLCAweDRmZDZjY2JmLCAweGY4ZjlmODU2LAotCTB4NDE3ZWI4MzEsIDB4YTdmNWIzZjAsIDB4NWJmNWIxMTUsIDB4ZTNkZGJmNTgsIDB4MmZlMWJhYmIsIDB4ODc1Yzc0MGIsCi0JMHgwN2ZhY2JkMCwgMHhmZmFmZDA0ZCwgMHhmYWZkMTI5YSwgMHhmNzdjNmMyZCwgMHg3YzdjNzU4YSwgMHgyNzFmOGUwNywKLQkweGJmZWI2M2FjLCAweDk3YzcwNGE2LCAweGQwMGYzZTJkLCAweGE2MmZkYzkxLCAweDY5ZmIwMDIyLCAweGM5NDBjYTdmLAotCTB4OThiZDAzMjgsIDB4ODQyNzhmMGUsIDB4OTNkZjkzY2EsIDB4ZmI4NzA4ODEsIDB4N2RkZDE4NjMsIDB4Y2RlOTQzMTksCi0JMHgyNGE3OTExMSwgMHhlZTkwMzk0MCwgMHhhNjljNjVjMywgMHhjYTI3MWI4YiwgMHhlM2Y2N2Y2YywgMHg0Zjk4YmViZSwKLQkweDg4YjM1MTc1LCAweDJjNmE0ZDc0LCAweGJlNzQyMTgxLCAweDFmYTJjZDlkLCAweDZlNmE4YmYyLCAweDlmYjg4ODBjLAotCTB4OTg4MjNkMzIsIDB4ZmZiZTA4NDksIDB4YWRhOGQzNzUsIDB4ZDMxOTc1ZGEsIDB4N2I1MmQ1YzUsIDB4YmFhZjg2OWIsCi0JMHgzMjI0ZmJlNSwgMHhhZmNlODJiYywgMHg1YzYwODgwMiwgMHhlNTRlZGYyNCwgMHhmODcyYTEzNCwgMHg5MGM3OTUyNCwKLQkweDVlOTg5NjllLCAweDcxY2E4YTcyLCAweDM3Y2I0YzMyLCAweGUyNWU5ODJiLCAweGE3MGVlZjI3LCAweDlmMDlmZmYzLAotCTB4YzE5OWJiN2YsIDB4MTA5OTdkYmIsIDB4Yjk3ZmY4MDAsIDB4ZjIwYzg5NzEsIDB4OWRiNTcxNmMsIDB4OGYzMjNkMDIsCi0JMHhmMGE3OGU3MiwgMHhmNTAwNGI1ZSwgMHgwMDFkYmEyOSwgMHg1NjQyZWU3YywgMHgwM2MzZTQyNCwgMHg1MDJlYmNiNywKLQkweGI2YmYyZDNkLCAweDNkZGRhZThmLCAweDg1M2FiMDI0LCAweDYxYjg1ZmQ2LCAweDVkMzcwMGZlLCAweDk2NTk5Y2ZmLAotCTB4NGZlYzIyMzEsIDB4ODRjZmRiYzQsIDB4OTlmYTRjN2MsIDB4ZDU5OTA5YjIsIDB4NDdlYTUxYjQsIDB4OTJjZDc3MzMsCi0JMHhkYTY5YjY0ZSwgMHhmM2U5ZjZjZiwgMHhmOWY0MGE3MywgMHg5OTIwMjk0ZSwgMHgxNDI5OWY0MCwgMHhmN2VkMWQ0OCwKLQkweGI5N2QwYWRlLCAweDIxMzRjZTNhLCAweDhmOTVlMTllLCAweDgzMGExM2Y3LCAweDVlZTlmYTU0LCAweDY3YzBjNzQ4LAotCTB4YWU3NWUyMzcsIDB4ZTc1NWI1OWIsIDB4NDRhMGZlNTMsIDB4YjcxZmI4NDIsIDB4N2ZjNDEyMjUsIDB4YjlmM2Q2MjIsCi0JMHhmMzhkYmFkOSwgMHhiZDU5MmI5ZCwgMHg3MzNlNzRiOSwgMHg5ZTExMTAxZiwgMHgxZGI3ZjljNiwgMHhhMzRkN2JiMCwKLQkweDk5ZmI1YTY5LCAweDVjNjgyNDA0LCAweGYzZmU3MThmLCAweGUzZDcxYjk2LCAweDk4N2Y2MTk2LCAweDY3N2UzN2VmLAotCTB4YTdhNDYyNzQsIDB4OGY4OWU2ZjIsIDB4NTNkMGQyOWQsIDB4OGY0N2YwNjksIDB4MmJiNGQyOWQsIDB4Y2JhOTk4NmUsCi0JMHhlYjY2MDYxNywgMHhjZWQ3ZTdlYSwgMHhhZTJmOTVkNywgMHgyZjk1ZDQyZSwgMHg5NzQ0Yjc1YywgMHg0MDdmZWY5ZiwKLQkweGYyZGU3ZjU3LCAweDdiZjJiYTE1LCAweGNhZWJkNjJiLCAweGQ0NmMxNGU3LCAweDllZmI2N2U1LCAweDZiYmZkNWQ0LAotCTB4NWNhZTlkNTYsIDB4NGQ3ODUwMzgsIDB4ZGY1NWNhMWIsIDB4YjdhMGE5MzUsIDB4NDAyMTYwN2UsIDB4YWJiZDJhOGYsCi0JMHhlYTg2NzBmYywgMHhhMzllOTAyZCwgMHgyYmE0MGI3YSwgMHhmZjI5NGY4MCwgMHhiNGIyZjY5YiwgMHg2YmZjZWI3YywKLQkweGZlYmQxYWRjLCAweDA2OTE1NGI0LCAweDdiYTQ2NGZjLCAweGY0OGQzYzIzLCAweDQ1ZmE3ZjRkLCAweGI0ZDQ4N2RiLAotCTB4MjBiOTIwNDQsIDB4N2VmOGJhZTcsIDB4NWViZjdlYWUsIDB4NjQ3YTcxMzAsIDB4N2UxMjlkZTcsIDB4OTVkOTI4OWUsCi0JMHgzYmNlMDkzYSwgMHg2ODY4NzIyNSwgMHg3ZWY3YTM4NSwgMHg3NWMwNTA0OSwgMHgxM2QyZDAxMCwgMHg1YTk0NmYwMSwKLQkweDZlMmI3MDM1LCAweDY3OWJhNDE4LCAweGM3MTE0MWM3LCAweGE1ZGUwMzJmLCAweGU0ODMyZmYyLCAweDBmMjAwYjM2LAotCTB4NmVkMzg3NDIsIDB4ZjFmMzA1MWYsIDB4NGNmOTA1ZWUsIDB4ZmY3MTEzOWEsIDB4ZjY5Y2E4ZWQsIDB4ZTAwOTI5ZDgsCi0JMHg5OWU5OGI5NywgMHhiNjk4NTljYSwgMHgzZDMwZmE1NywgMHhlOTgwNTk1NSwgMHg0YzBhY2FjOSwgMHg2Mzk3MmFkYiwKLQkweDhmZDJiYzdhLCAweGQ3MmE1ZmU5LCAweGNhYTdmYTYxLCAweDU1OGY0YzZhLCAweGM3ZmE2MmQ2LCAweDlkYTYwMGNhLAotCTB4NTU0YzVlOTUsIDB4OTM5NmVkYmEsIDB4ZTU2ZjVjYjksIDB4ODFmYTBiZTcsIDB4MmQ3Y2FkZTksIDB4MTViZGZkMjIsCi0JMHgwMjkzZDFmOSwgMHhmMWMxNzhmYywgMHhjYmQwNTBlNSwgMHg0OGEzMWMyZiwgMHg1ZTFkZWY0ZSwgMHgxNWU4N2E0NiwKLQkweDdhOGJjNGFlLCAweGUyODA1ZTQ1LCAweDcyY2Y0ZmI5LCAweDkzYzMwYzViLCAweDExYTY0NGNkLCAweDBmZDYzNzJhLAotCTB4NjBiM2Q2NzksIDB4MjRjZGU2MjQsIDB4M2MwN2RhMWUsIDB4ZmE1MTlkMzMsIDB4ZTAxNDdiYTUsIDB4MjI3ODRhZWIsCi0JMHgzODY4ZjBkZSwgMHhmNTNmYjcwZiwgMHhlZmQwNTk5ZiwgMHhiNjQwYzJmNSwgMHg3MTE2MWU1ZiwgMHg2N2ExMjRiZiwKLQkweGVmYWY4MDNjLCAweDk1ZTEzNzBhLCAweDZmODBkMzBmLCAweGYwYWEyN2NlLCAweDM0MjM0ZDZiLCAweGIxYjgyMjVkLAotCTB4MTY0ZDBiZmYsIDB4YjYzODA2NjIsIDB4ODQ3MDAzZDgsIDB4MTllNDcwYmQsIDB4NGI3N2VjMTcsIDB4NTNlYWM0NTMsCi0JMHg1Nzg3N2I2MywgMHhkYWJkMzA2OSwgMHg3OTRmNTlhMSwgMHhhMTdmM2ViMywgMHhjZWM2OTg1YSwgMHgxZGVjNGFmOSwKLQkweGRjYWU4MGEzLCAweDAwODZhN2Q1LCAweDU1MzA1M2ZlLCAweDIyOWE1OWZiLCAweGI5ZWEzOGUzLCAweDIxYzYzNDk2LAotCTB4MjE3M2QyOWQsIDB4Y2Y2N2ZiZDYsIDB4MjI3ZWI3YTMsIDB4MWYyMjY4ZjMsIDB4YmIwMWQ4NTMsIDB4ZTU3NDFlNWMsCi0JMHg3YzBmNGJmMywgMHg3Mzk3M2Y5YiwgMHhkMjJkNGYwMSwgMHhjNzlmYjA5NywgMHgwNzk3N2ZkMCwgMHhjYzY2YmY0MiwKLQkweDA3OTZmZGFiLCAweDdhZTViZjQ1LCAweDFiYThkZWY4LCAweGQ0NTNiNjhmLCAweGViYjQzNzMzLCAweGE0Y2Q1ZTlkLAotCTB4MTUyNzVkNWQsIDB4ZGVkYzE5NmQsIDB4YWI2MGRjNTIsIDB4MzhmZGNiZDYsIDB4MzliY2JlNWQsIDB4MGZiNzVhYjUsCi0JMHhlZjk0MmZjMCwgMHgwNjYwODE0OSwgMHg1NGUxMjliYSwgMHhhYzc2NjVkNCwgMHgxY2ZjZTgxMywgMHgyZGZiMDUyNiwKLQkweDUyYmQ1ODE3LCAweDUzZWM5YjZiLCAweDQxNWIwYzkwLCAweGFkOTA1ODBmLCAweGQ3NzI5ZGQyLCAweDNlNWNhOTlmLAotCTB4M2M4OTdiZmIsIDB4ZWVkY2U1MGMsIDB4MjU0N2Y2YTIsIDB4ZmNkMTMxMzAsIDB4ZDA1YjllNDIsIDB4ZTQxZDNjNTQsCi0JMHgzNzNkZDlkZCwgMHg4OGIwZmVhMywgMHgxMGUwYmFlNCwgMHhiM2FhNDA1MywgMHg0ZjM5MGY0MCwgMHhlZTgwZDM0YywKLQkweGI4M2Y5M2NmLCAweDAzY2U2YWM2LCAweGNlMzI0YzczLCAweGZkM2FlMTY3LCAweDI3ZjU0ODNlLCAweDU2YmYzZTVkLAotCTB4YjcyM2NmOWYsIDB4ZTc5ZDAxMjUsIDB4MjAyNDQ4ZDUsIDB4Y2JlYTNmMDAsIDB4N2UzMTM2NmYsIDB4NmIxNTI3YzgsCi0JMHhjNTU4N2Y2MCwgMHhkYzBiMTNjZiwgMHhmMjhmZGNjNCwgMHg1YjRiZTk3YiwgMHg3OWQzZTZiMiwgMHhmOTMxMzAyYywKLQkweDBiZGY5ZWFkLCAweDUxMWU5OWUzLCAweGMxOTNhYzE0LCAweGQzNzFmMzllLCAweDQwZGM5ZmQ4LCAweDBkNjA3ZGEwLAotCTB4YmJmYzMxZDgsIDB4YTUzNmNmMDUsIDB4ZWJiZWZlMjcsIDB4NTVmMzhkZmMsIDB4NzYxZThmZjcsIDB4ZDI4ZjNlMDQsCi0JMHg4ODFiYzEwNiwgMHg5ODU0OGZiMiwgMHhmOGZmYmUwNCwgMHhlYjA5N2U5OSwgMHgxYjk5ZThkNiwgMHg0MzVhZjkwYywKLQkweGZmOTBkZWJlLCAweDgxMmRlOWJiLCAweDYxY2RlOGU4LCAweDI1MzA2ZGYyLCAweGZkMDJmYTMyLCAweDY1ODczMDRhLAotCTB4N2ZkMjNmZGYsIDB4NmJmZThmNGEsIDB4ZjdmZGE5ZmYsIDB4ZTk2N2ZkYTcsIDB4YTdmZmFmZmEsIDB4YzdiODNmZjYsCi0JMHhmYWQxODNmYywgMHhjNzY5N2QyZiwgMHgzNzk1M2YxZSwgMHg3MjZlMmY0NSwgMHg5Y2ZmYmExMSwgMHg3OTI3NTczNSwKLQkweGI2NGJmZTI4LCAweGUyZmI0NmFkLCAweDA1ZGZiMzE5LCAweDIwMzY3Y2Y0LCAweDM5NDQwYjRlLCAweDcxMzY5ZjU3LAotCTB4M2FmMTI1YmIsIDB4YzBmNzM4MDQsIDB4NzNmZmI0YWYsIDB4MDY3Y2ZmY2YsIDB4ZGNiZTViOWMsIDB4M2NmMWI5MjYsCi0JMHg1OTA5NjBkMywgMHgzNTk2OWYyOCwgMHhhMzI3NGUxNSwgMHhlNTgyN2YzMSwgMHg0MjJhN2VkNywgMHg5ZjRmNTliZSwKLQkweDRhNmRjZjQ1LCAweGE1MWJmYjAyLCAweDg3ZWZhZTE0LCAweGFiMmE1ZjUwLCAweGQ4NTRlYmZmLCAweDE4NDljYTdmLAotCTB4MGVkOGNjZjksIDB4OGYxOGJmYzYsIDB4MWNiZTcxZjIsIDB4Y2U5Y2IzZGIsIDB4NzJmMGY1MTMsIDB4YTZmMjk3MGUsCi0JMHhiYTJhN2Y5ZiwgMHg2OWQxZmQyMCwgMHgzNjkzMTdiNCwgMHhlZDhkOTNkNCwgMHg3M2ZlYjgwYSwgMHg2ODRjZTRjYywKLQkweGY5MWVhYWE3LCAweGM4MWVmOTFlLCAweDI0MmUxNTRkLCAweGYxMWZmNGMwLCAweGUxYTMyZGE1LCAweGZmNTFkYWZjLAotCTB4ODFhMDk3N2IsIDB4MTc2ZmNhOTcsIDB4ZmQ3ZjBiODIsIDB4NWNiYmQyYjIsIDB4YjFlN2U0ZWUsIDB4YjYwMGJiNDgsCi0JMHhkZWI5OWE1MywgMHgxMmQyYzJkNiwgMHg3YjAyZTQyOSwgMHhlNDlkNDk2OSwgMHgyNWNmZDNmMSwgMHhmNjc5OWUzYiwKLQkweDdlNGYzODI5LCAweGExMGNmMTYwLCAweDc4ZWYxN2ZkLCAweDM0Mzk4ZmVkLCAweDRhNTNiYzVmLCAweDQwNDljZTk4LAotCTB4YTdlMDhhNDgsIDB4M2U1YmZlOWMsIDB4YTI4ZjgyMjYsIDB4MmIyNmJlZGYsIDB4ODdmN2Q4YTMsIDB4Mjk3ODIzZTIsCi0JMHgyNjUwNzlkZSwgMHg2M2MyN2FhMywgMHhkY2EwZjA3MiwgMHg5ZjgyODhlNiwgMHhhMGE5ODllMCwgMHg3ZDJmODk1ZiwKLQkweGNmZmUwMzIzLCAweDcyNDgxMDFlLCAweGQ2NzgxNDdhLCAweDAyN2E4NmJkLCAweGM5ZjEwOWMwLCAweDNmOGRkNWYxLAotCTB4OGE3MmZkNDMsIDB4NDZlYjkwMTcsIDB4ZWRlYjE5N2MsIDB4ZmEwNWYyZTUsIDB4YTUyMWZiMDUsIDB4MDY1ZTE3ZWYsCi0JMHgyYzlmZjMzYiwgMHhjMTQzODAxZSwgMHg2MGI5ZjcwYiwgMHgxNWNkYTczZCwgMHhhY2I3Y2U4YywgMHhmMWQyZjI0ZSwKLQkweDkyN2YyNDBiLCAweGJkZjY1MzFiLCAweDIyOWZlOWUwLCAweGYzYmZlNWZkLCAweDdlNzYyNGQzLCAweDcwOWFhNmYzLAotCTB4YzJhN2YyYWYsIDB4YmU2ZjE3M2EsIDB4NDc5OWQ3MTMsIDB4MDU4NzQ4N2MsIDB4OTA1Y2M0NWIsIDB4Yzk5ODVmOTcsCi0JMHhmODUxOWRiNCwgMHhlNGM4OWU2NCwgMHgxNGFkZTllNiwgMHhhNzlkNzRiOSwgMHg3Njg0MzZlOSwgMHg4MTg4M2ZkNywKLQkweDU4YmY2ODZkLCAweGZjMWU0MDQyLCAweDkzOTdiNTU0LCAweGMyZmY5OGE1LCAweDRlMzVmMGNhLCAweGFhN2VmNTU0LAotCTB4YjdlOTY5ZjUsIDB4ZTAyYjZkN2UsIDB4NmYwMGRjZTksIDB4Y2FiZGQ4MzIsIDB4ZTFjZmQ5ODksIDB4ZmRhNjVjMjEsCi0JMHg5NGRjZWY4YSwgMHgxNDQ0ZjBjYywgMHg0NzZmMTY3MywgMHhmMGM5ODJmNSwgMHg0YWI3ZWExZCwgMHg1ZDY4ZGI1ZSwKLQkweDNkMzk3MjNiLCAweDNlMzJmZTMyLCAweDBjNzc5ZDNlLCAweDkzYTdlN2VjLCAweGNhMzA0MTQ4LCAweGFhODgzNmZhLAotCTB4YmFmYmEwMWMsIDB4ZmMzNGNlODYsIDB4N2ViZmY4Y2UsIDB4OTU3N2UzM2QsIDB4YTczMzAzZmYsIDB4ZWZlN2Y5NDEsCi0JMHg3NjgyM2UzMiwgMHg3OWQyNWZiMCwgMHhmY2IxOTI4NSwgMHhjYTAyMWRlMCwgMHg0NTA5MGIwNywgMHg4OTdhZjNlMywKLQkweGRjYmViOWYzLCAweGZlNzQyZjQ4LCAweDQzNTYyMTY2LCAweDNjNGUzMDM3LCAweDVlZWQwMWUyLCAweGJkYjQzNTc5LAotCTB4YjhjMmFlNTYsIDB4YWFmZDllYWUsIDB4ZTVjZjljN2MsIDB4OTUyMmRkYzEsIDB4ZTQ0NWQ3MDcsIDB4ZTRjY2Q5MDEsCi0JMHg5NzdhZWY0MCwgMHgyMjU4ZjExZiwgMHgwYTdkOWUwNSwgMHhhYmYyOTdmOCwgMHg5NWZlMDE1ZiwgMHg5ZmZkNjE3MiwKLQkweGUzZmUxZTM0LCAweDNlNmY5NGRkLCAweGFiN2NhYTA5LCAweGJlNDZhYjk3LCAweDJlMzVkODJkLCAweGIyN2VkZjJhLAotCTB4ZGYzYTIzMjEsIDB4Zjk1MWVmZDIsIDB4ZGJlMzAzNzYsIDB4NTU3MmQ3ZmYsIDB4YTg5NTYzODUsIDB4OWNhYWFiOTcsCi0JMHg0NjllMGRlYywgMHgyYTI2OTkzOSwgMHg5Y2EzNTcwOCwgMHg5MmVmM2ZhNCwgMHhhOGY0OWVhYywgMHg3ZjRhYTFkMiwKLQkweGJkMjliZjQ1LCAweDM3NTFlNDA2LCAweGQ4NzRhYTlkLCAweDFkMmFhNzRkLCAweGU4OWZiMGY2LCAweGJmMmM2OGUwLAotCTB4ZDI4MjY4MTksIDB4ZjdkZWVlNGIsIDB4NzhhM2Y2YTYsIDB4Zjc2MTY5MmQsIDB4ZWJkZGI0NTAsIDB4ZjJmMGE3OTAsCi0JMHhhYTQ3MzZlMiwgMHhhMDk3ZWY1ZiwgMHhmOTBjMDdjZCwgMHhkN2JlYTFhMCwgMHhkNDM1Y2Y5MCwgMHgxNWYyMTlmNywKLQkweDY2MDFmYTg2LCAweDJjM2U2ODNmLCAweDkwODdhNDEzLCAweDkyYjRiZWFlLCAweGI3NjA5ZGY4LCAweGRkYTIyZmRiLAotCTB4NzljZThiYWUsIDB4ZDVkZjZkMGQsIDB4NTNmMDFlOTgsIDB4YzZkYWIwZjksIDB4NDRlMThmY2UsIDB4YjNjODBkNzksCi0JMHgxNWQ4NzcyZSwgMHhkMzFiNzkwZiwgMHhjMzcyYmI3YiwgMHhmZThkMzhhZSwgMHg0NDQ1YTI3OCwgMHgyMDE2ZGM3OSwKLQkweDhjZjZiNGQzLCAweDIxNTQ1ZjA4LCAweDZmNDhkYWZlLCAweGQ5MGVjY2U1LCAweDc3ZWVjMzE1LCAweDY5MWQxMjZmLAotCTB4NTlkY2UxY2IsIDB4MTkyODdhMmQsIDB4ZWUyYjQ1OTAsIDB4YmE4OTgxNzIsIDB4YWRkMDY1YWIsIDB4YzVmN2U4YjMsCi0JMHg1YWVjODg2ZiwgMHhhNzM1ZWZjNCwgMHg2NzBkY2U2YSwgMHgwOWYxZmY4OCwgMHg2ZDk3ZGMwMiwgMHg2YzJmZmM0MCwKLQkweDQ1ODhlNzYxLCAweDczZDNhMjFiLCAweGU3OTc2ZjExLCAweGRjODMyNjU4LCAweDQ5ZmZmYWE0LCAweGVkNTU5ZGFkLAotCTB4ZTFiMzYwYTcsIDB4OWNjZGNiN2IsIDB4M2NmMWFiZWUsIDB4MmZhZjU0NTcsIDB4ZDBmM2YxZjcsIDB4NjQ3ZTU1NDksCi0JMHgxZjk0MGM5MCwgMHhmMzgxZDA3MCwgMHgzN2JiOTczOCwgMHg5ZDZmMjM4OSwgMHg3NWQwZjE0NSwgMHgzNzQwMjQ0NCwKLQkweGM0NDQ1YTE3LCAweDc2NDY4NWMzLCAweDg5ZmM0OTVmLCAweDI0NjUzZmM4LCAweDg1NGVmMjhjLCAweGM3ZjAwNzU3LAotCTB4NTBlNWRlYjAsIDB4YjMwZmVlYzcsIDB4NGE1NWE0MWUsIDB4ZjQ3OWZjZjYsIDB4YjFkYTY4YWYsIDB4ZmJhMTgzZTcsCi0JMHhmYmQyZmYyMCwgMHgzZDI2N2Y2OSwgMHg2MDNlNGZlYiwgMHhkNzZlM2I0MywgMHhiYmRlMjcwMSwgMHgzMzdmZWQ3NCwKLQkweGVmYzg0MWVkLCAweGJlZjA3OGI1LCAweGEzNTdjMGY5LCAweDU2YmE4ZTgxLCAweDhlNDAwYTVhLCAweGY3NjAwZDc1LAotCTB4YmZmYjU1ZjQsIDB4ZmI4NmRkMWEsIDB4OWZjNDJhZTcsIDB4NWZjZWNjZDMsIDB4ZjNmZTVhMTcsIDB4NWZiM2RjMzgsCi0JMHgwMmFiYTE2OCwgMHgxZDgwZTBmZCwgMHgyZmU1ZTFlZCwgMHhkMDhlZDBkYiwgMHgyY2FiZmZiNSwgMHhiNzlmZTM5ZiwKLQkweGJmN2UzMjllLCAweGIzMjRlNWQyLCAweGUyZmNjMTc2LCAweDdjYmE1ZDk4LCAweDU2NjdmOGRmLCAweGQzNzNmZGMwLAotCTB4MmQyMTc5NDEsIDB4MzdjYWZjOWYsIDB4NzYzZTQxYTMsIDB4NGY3YTYyZWQsIDB4MzRmNmQ0YTcsIDB4YWNhNDFmZGMsCi0JMHhhMjQyYjRiYSwgMHhlNjA0ZWU3MCwgMHhmOTRmNGJlOCwgMHhmOTI2NzJhYiwgMHhjYjgzNDY0NywgMHhiOTFmNjgzNywKLQkweGZmNWM3ODVhLCAweDAyMWUwNjNmLCAweGI0OTYyM2RlLCAweDAxNTYwMzM4LCAweGY4ZTk3ZGQ2LCAweDFjMWU0MTlmLAotCTB4YWE1ZDIwYjAsIDB4YjgyNGZkZWIsIDB4MmI5MWY1MDIsIDB4YWMwNjdiYWQsIDB4ZDM3ZmYxM2IsIDB4ZDVkMDg1YmEsCi0JMHhiZmY0YmJhYywgMHhlMzNmYmUzOSwgMHgwZjkxYThmYiwgMHhmZWY5ZDI3YSwgMHhjM2JmMzFmYiwgMHg1ZWY5YzFlOSwKLQkweGUyZmZiZDI1LCAweDc3ZGUxYjdmLCAweGFlYmJiYzUxLCAweGZmYzZlZWJjLCAweDFkZWVlYmU2LCAweGU1Y2M2ZmVmLAotCTB4ZmRjMzc3NzgsIDB4ZGYyYmY5N2IsIDB4YWJiZWZjZTAsIDB4M2ZmYTNiOWMsIDB4YmVhYWZkNzQsIDB4ZjI5MzNiZmUsCi0JMHgzZmFkMDY2ZSwgMHg0MDNiNTQ4ZCwgMHhlOTUxZjhiMSwgMHg2ODMyMzdhMSwgMHgxZmZhZWZlOSwgMHg0ZWY5ODM4ZSwKLQkweGM2MzVmN2UyLCAweDY2NjM3ZGY5LCAweDcwNDliZWU3LCAweDI1Yzc0MzZmLCAweGVmM2YwMjcxLCAweDNmNTI3M2IxLAotCTB4NWJmNDVmYWUsIDB4NDg3YTg3OTYsIDB4NDBiZmZlYmYsIDB4OTU5ODgyN2QsIDB4ZmMwZmI4MWEsIDB4MGY0MmRhNWQsCi0JMHgzMTkwMzZmYSwgMHg3NzkwN2NjNywgMHhmYWYzYzhkZiwgMHgwNGFmZTJmMywgMHhjYWFiODVlMiwgMHgxZjM3Njk3ZSwKLQkweDdmYjUzZDAxLCAweDU4ZjUxMTdmLCAweGZhZmVhMjlhLCAweGZiMWE2YmFhLCAweGNlZWIyMjVlLCAweGY0NTIzZjMzLAotCTB4MDlhOTliZTcsIDB4MTRkMDczZmEsIDB4ODQ0ZGRmZGUsIDB4ODcyNmZmY2QsIDB4Mzg1MDA4MTAsIDB4NThmMDFhNGMsCi0JMHgyNzQzZDgwMiwgMHg0MDg4OTEwZCwgMHg2Zjg5NTNmMywgMHhhNjFiOWMxNSwgMHg3ZGZkZjQzOCwgMHhlM2M0ZjcwMCwKLQkweGI3Y2M3MDIyLCAweDdmMDIyZGVlLCAweGMwNDdhYjNlLCAweDk4NzU4NmZlLCAweDMzNTg5ZTUwLCAweGUxODNhNDA1LAotCTB4YmZjYzY2YjUsIDB4MDM4ZjcyNjMsIDB4ZTFiOGNmMzgsIDB4MjAxZTRmYTUsIDB4Y2FmNTU3NjAsIDB4NjVjYmExNGMsCi0JMHgyZmFmZjFmNiwgMHgwNTkwOWU1ZiwgMHgwM2Y2NmZlNywgMHg1MGI3NzhmZSwgMHg2NmQxN2Q3ZCwgMHhlYmExOGExMiwKLQkweGZlMjY2YzVkLCAweDhiYjA3OGQ4LCAweGNlYTRlNDBhLCAweGMzY2ZhYTJlLCAweDIyOTNmN2NmLCAweDdlYTk1Y2ZkLAotCTB4Y2ZmODc0NmYsIDB4NzRhMjVmNGUsIDB4MjEwODcyN2YsIDB4ZmJjNTIxN2IsIDB4NTNjZjY2MmUsIDB4NmJkZjU3Y2YsCi0JMHgzZjJhZjA2MSwgMHhkOTAzMDI0YSwgMHhhYjk4YjhiZCwgMHgyYzVhM2ZiOSwgMHhlOTdiYmEzMSwgMHhjMmM2YmIyZiwKLQkweGQ3NjI2NmI5LCAweDhmYzY1OGM4LCAweDkwNGZjYzk5LCAweDg4MTc5N2ViLCAweDAwNzFlYjEyLCAweGM1OGEwZTNmLAotCTB4YTIyM2IxN2IsIDB4ZDlkZjlhMzMsIDB4ZmFkZTdlNzYsIDB4ZDI5N2RjMGQsIDB4NTQ5ZWFiYjQsIDB4OTNmN2EwOGIsCi0JMHhmY2Y5ZGEzMCwgMHgyZGIyNTZmNSwgMHhhZTQyN2Y4YSwgMHgzODJkZGFhNCwgMHg5ODhmZThkZSwgMHgzNjdhZjYwNSwKLQkweDM0ZGE2MmZlLCAweDhlYjc4YjU2LCAweGEzY2Q2N2U5LCAweDdlMDFlMjdiLCAweDJiZWU2YTRlLCAweGMyZjg1MWZlLAotCTB4YmJlMDBlZjksIDB4MzUzNmQ2ZGQsIDB4MmVkZjBhMzcsIDB4NjMzZDk4OTAsIDB4Nzg0YmExYzYsIDB4NTJkMTFlYmUsCi0JMHgxZjNlMDI2NywgMHhkZGQyNmY1MSwgMHg3MTJkZGRiYiwgMHgxOTBjN2RmZCwgMHg3MTlhZjMwMywgMHgwNGNjZTZjOCwKLQkweDNkMTExY2JjLCAweGRlNTdlZmUwLCAweDhiZWNhOWYyLCAweDg0NjQ2ZjcyLCAweGY2MGZmNDI3LCAweDhkYzk1YWQ2LAotCTB4ODI5M2VlZTMsIDB4ZmJhZTAxMGIsIDB4OWMwOTViY2UsIDB4ZDVjYWY2YjcsIDB4ZTllNmQxYzUsIDB4MmU3OWIwYjAsCi0JMHg0NmZiYzEyNiwgMHg4M2Y3ZmZhNywgMHg0NzJlYzRlZiwgMHg1NzljMTI2OCwgMHg3NWYyMDllYSwgMHg0ODIzZmE0ZiwKLQkweDQ4MWExN2M3LCAweDljMzFlNDAwLCAweDVjMmU0MDZmLCAweDFmYjgyNDY4LCAweDAyZmM5MDUwLCAweGRmOTQ2YmNlLAotCTB4YzczZGEwN2YsIDB4ZjlkZTZiMGYsIDB4Y2E0N2Q4MWIsIDB4OTgzNzA0NWEsIDB4NmRjY2NiYTAsIDB4Y2FlZGQ4MzIsCi0JMHg5MDQ0ZTM5YiwgMHhlYThhMTlkYiwgMHg3NTFlZTkwZiwgMHg2YTJmODY4NywgMHhlYmMyMzMyNSwgMHgzOWJlY2U3MCwKLQkweDFkNjdlZTMwLCAweGNkN2Q4MTMyLCAweDA1ZDg2YWZiLCAweDk2YjNmZjcyLCAweGJkMDdjOGIxLCAweDk1YjdlYmFkLAotCTB4MDQ4YTY4YTQsIDB4NmJhNDEwZmQsIDB4NmM4YzNkMjMsIDB4NmZlNWQxOGMsIDB4ODE3ZDdkMTAsIDB4ZGE1ODY2YmYsCi0JMHhlMGEyNzk5NiwgMHg3YzY2NDcyZiwgMHgyZGYyZDU3YSwgMHg3Yzk5ZmZmMCwgMHg2Zjk1NTc3YiwgMHhjMzU3MzEzZSwKLQkweGQxOTkyNjQ3LCAweDI1YmU0NmJkLCAweDRiNmY5MzQ3LCAweGUwMTkyNTA1LCAweGEwZmY3NGJlLCAweGQyZWJjMDY0LAotCTB4NjhjNGE0MzcsIDB4MjU0NzZkZjIsIDB4OTE3YjA3YmIsIDB4MzU3NmIxZmIsIDB4YmQ3NmY5NTEsIDB4NTEzNWJlNDYsCi0JMHg0ZmM1MTZmOSwgMHhmMTMyNDNhMCwgMHhmMjBhZWRmZCwgMHhjMzVmZjAyZCwgMHhiZTQwM2I3ZiwgMHhiZTY3YTM0NSwKLQkweDZkZjJhODNmLCAweDk0MDljYjc0LCAweDRjOWJhMzZmLCAweDJmY2NmZjNhLCAweDg0ZGYyOGFmLCAweDlmNDAzYmM0LAotCTB4ZWM3OTIyM2EsIDB4MDc2N2U4NTEsIDB4ZTQ1ZWRmZDcsIDB4MGUzMDM2N2UsIDB4YjI3MWI5YzgsIDB4NWFiZmM3MWIsCi0JMHhiNTcyOTczOSwgMHgwOGJmZWU3MiwgMHg1YjljYWFjZSwgMHg5ZmEwOWJiYSwgMHg2NDNhNGY2YSwgMHg1ZWU5NmU3MiwKLQkweGEwMDRlNzJhLCAweDk2ZTcyNjQ3LCAweDhlY2MyN2VlLCAweGMzNmY5MDYzLCAweDgyMzdjODdiLCAweGFjNDJjYmY1LAotCTB4ZmE3Mzc5N2QsIDB4ZmVkMGY3MTMsIDB4OGYyNTc4YzYsIDB4MTMxZmQ2OTUsIDB4YjRlMzc3OTEsIDB4NmM5YzZlZjIsCi0JMHg5MGY3Mzg0NiwgMHg0ZWFlNDc3NywgMHhmMmU2ZWRkZSwgMHg4MWIxY2E4ZSwgMHhmNDhkNWYyMCwgMHhmYmQxNjllMSwKLQkweDdmMWJlZWZmLCAweGMwYjdmMWJhLCAweDc4OGE2ZjJmLCAweDg5OGVmNTBmLCAweDM1YmMxN2RkLCAweGQwMjY3NGZlLAotCTB4Yzk5OTA2ZDcsIDB4N2I5NzFmNWYsIDB4ZWM3ZTk1OWQsIDB4NmNhYmYyN2YsIDB4ZWM4ZGE1N2QsIDB4MTM1OTQxM2QsCi0JMHhlYWNiMGZkMywgMHg3ZjQyODBjNSwgMHgwOTczOWE5ZCwgMHhmNzBhOTNlZiwgMHhlNjk5MjQwYiwgMHgxZmFhNWE2NywKLQkweGZkM2U4MDc3LCAweDNlYjg0NDljLCAweDQzNDMzZDNkLCAweDhiYjI4YjBmLCAweDY1NWJjZWQxLCAweDk0MjU2ZDczLAotCTB4ODk5OTE3OGYsIDB4YzViOWVjMTUsIDB4NDE2N2E5OGUsIDB4NjZjZTJkOWYsIDB4ZmU2MmRmZjYsIDB4NTQ0YmY1NWQsCi0JMHhmNzhkMzNmZCwgMHg0YmNkNzllOSwgMHg3YTQ3ZWY1ZSwgMHhiMGNmYWJkZSwgMHg3OGNlYmMzMCwgMHgxZjgwMDg0NiwKLQkweGY2N2JjZjYxLCAweGUyODVjYTAwLCAweDE1ZjdmZDA2LCAweGM1MzNmZDdjLCAweDc5MTc4NDM2LCAweDhiNmNmNDViLAotCTB4OGMyYjNmYzIsIDB4ZTFjMjNhNzAsIDB4ODNhMmUxNDQsIDB4MGE4ODQwNTMsIDB4ZTllOThhMjcsIDB4YjgxMTQ5MTksCi0JMHhiNmQ5YmUxNCwgMHg4NWMwZWMwNiwgMHg2Zjc4MGE0ZiwgMHgwYWI3NWM2OCwgMHg1NWZhZTMzNywgMHhkMTc2YWEzOCwKLQkweDdlNWZkZTYyLCAweDMzYmUxZDRiLCAweDg1NDVjMjMxLCAweGRkMWUxMWIzLCAweGEzYzAzNzcwLCAweGZmZjZlNjRhLAotCTB4ZmMxNjMyMGMsIDB4YTBkZDI4NTgsIDB4OWJmZmYxOWMsIDB4YjkwZmZlODgsIDB4ZGVlODg3MTMsIDB4ZjJlN2FjNDMsCi0JMHhjNGY1NmM3ZiwgMHgzZGRkNzBjOSwgMHhlMTgyZmMxMywgMHhjOTc2YWUzZSwgMHgzN2RmZTBlYiwgMHgwNjMyOThlZSwKLQkweDcyMWJkM2I2LCAweDk3YjgzZTJjLCAweGEzMGI2ZWRiLCAweGYwZTk1NDFjLCAweGNkODc0ZTIzLCAweGZhZmJiZTFjLAotCTB4NzNjMjRjNTYsIDB4MDZlMGIzNjEsIDB4NjQzY2E0M2QsIDB4NTM5NmI4NDMsIDB4MmFkMWI0N2EsIDB4NzJmYzlmODcsCi0JMHgxYmFiODcyYSwgMHhmMzM0YmJkZiwgMHhjMWUyODlmZCwgMHg3NTFmZTcwNCwgMHhmN2IwMGFiZiwgMHgxODViNjMzMSwKLQkweDE4MWJjYTVlLCAweDE4NDkzMjVlLCAweGI1NjVlZmVkLCAweGQ3NDQyNzgyLCAweDA0YmNkNjUzLCAweGY5NTU4MmZkLAotCTB4NWExYzdmNGMsIDB4NWZhMTQ1M2MsIDB4MjVmYTM0NzMsIDB4OGFjYzljNjAsIDB4YmNjNTliZWMsIDB4ZjU0YjBjZGUsCi0JMHgzZjllYzExZiwgMHgxZDQ3ZjI4MywgMHhkZmZkMjE5MiwgMHg5NWY3ZDBiNywgMHhmODhjNDVmYywgMHg2ZGMzOTBmYSwKLQkweDAxZDVjMDA3LCAweGZkMzMwYmYwLCAweGRmMDk3NDJiLCAweGU1ZTVhOGNkLCAweGFlMGViZjY2LCAweGM4YmE5ZjkzLAotCTB4YTBiZjZmZTgsIDB4MWJhNTFkODAsIDB4YjRjZjQwNmUsIDB4MzcwYTljN2MsIDB4NDNjMDY3YTAsIDB4ZjIxMTdjY2IsCi0JMHg3ZGRlMTQ3OSwgMHgxN2FlN2JkMiwgMHg3Y2I0YzdlZSwgMHgwNGZmYjg1ZiwgMHhlMDhiN2ZlYiwgMHhmZGQ2NTEyMSwKLQkweDNiZmJlOTlkLCAweGZjNmY3NWQyLCAweGJlODE5MWZlLCAweDhmODViMmRmLCAweGRlZmEwNThlLCAweDkzZGYyMDJmLAotCTB4M2RmZDM4OTYsIDB4NGRjZWNjOTcsIDB4MGY5NDZkZGIsIDB4MGRlNjFlZTAsIDB4ZTk1NWIzYzksIDB4MWNjMjFmMjksCi0JMHg1MDllNzBjZSwgMHg2YjkyNzYzNCwgMHg1N2UwMjE2MSwgMHhmZjQ1NjBkOCwgMHg0MGM3OWMzMCwgMHhlNTZhYWZhNiwKLQkweDQ5MWIwZWY1LCAweGY3YjMyM2JjLCAweGY5YzZmZmZlLCAweDQ5N2QzN2FjLCAweGYxODI4ZmNkLCAweGQzMzY4ZTQwLAotCTB4YzY0Nzg2ZjEsIDB4YWExN2VlMzMsIDB4ZWI0YWUwMWQsIDB4YjFmZTViYjIsIDB4N2NlM2E5NzUsIDB4NzI5OWZmNTcsCi0JMHgyOGY3OGFkMiwgMHhjMzhkMWZhYSwgMHhlMDk0MmJlNCwgMHgzMDRkM2FmYywgMHhjMmQxZmRlYiwgMHg3MGZmY2YxYywKLQkweDJkZmNiMmZmLCAweGFiMTQ5M2ZkLCAweDRkZTJmZGVlLCAweDI5Zjg4M2EyLCAweDRhZjMzZWRjLCAweGNiNTQyZmM4LAotCTB4ZWMwMjZmNzgsIDB4M2VlODkzMWYsIDB4OGVjZjkzNDgsIDB4MWVmZjdiOGUsIDB4NWVmMTE3MmMsIDB4ZmIzN2Q2ZTYsCi0JMHhkNWJkYzI5NCwgMHg4YTY3Y2NhZCwgMHhhMDIxOWFkYywgMHg3NDBlZjBmZSwgMHg3MGY0MWUzNiwgMHhmODVhZjEyYiwKLQkweGZiM2NiNDkwLCAweDc4MDE3MTdiLCAweDVmNTE5MDY3LCAweDdjYTE1OTNkLCAweDUwMjFhNjNkLCAweDcyNjdhOTA1LAotCTB4YzAyZGUxMzgsIDB4MDA5MTQ0ZDcsIDB4N2RiZDVhYmUsIDB4N2JmZWMzMjYsIDB4MDY0OTVmZGYsIDB4OWVhOGNlOTgsCi0JMHgzOThjZmQ4MCwgMHg1ZWExMTI0MiwgMHg4ZjExMzc4ZSwgMHgzZTliZTMzMywgMHgzYTc2Zjc3ZiwgMHg0NTQ3ZjFiZiwKLQkweGNkZWI0MjhmLCAweDAwNzBlYzNjLCAweDZjZGYwZDlmLCAweDVjMGQzZTIyLCAweDBhYTA0ODcyLCAweDRmZTM0N2VjLAotCTB4NzkwNzZmNzksIDB4MWVmNTQwNTAsIDB4NjgyZmY3ZjAsIDB4NDE3MmFiYTksIDB4ZWQ4MGIzN2UsIDB4YTliZWZkY2IsCi0JMHgxZGJmM2EyZSwgMHhiZDRlOWZiNSwgMHhhZDAyZTQwZSwgMHg2Zjk0ZGQwNywgMHhlYmNhZjU2NiwgMHhiMmI4MGYwNSwKLQkweDk0NmNiNWU2LCAweDBiZDQ2ZTUxLCAweDQ3NmNhMGY4LCAweGQ2NTYyMDQwLCAweGZiNGFjMDZmLCAweGI2OTliMWRkLAotCTB4OGJmZDg0Y2YsIDB4ZWI3ZTg3YjYsIDB4NzZmNzdkM2YsIDB4OWU3NDNiOTAsIDB4ZGQ5MWJlZDgsIDB4NzZkMWU2Y2YsCi0JMHhmZDQ5ZjAwYSwgMHg3MGFmZWMxMiwgMHg1ZGUwNDBiMywgMHhkYjIzNDE0MiwgMHg0YThlMGE5ZiwgMHgzYTZmMjgxZSwKLQkweGJiZWUyNGY4LCAweGE5NzhlOWQzLCAweDg1MWZiMGU5LCAweDhlZmJlMGE2LCAweGRmMWI4MmIxLCAweDQzNDk0ZGQ1LAotCTB4MGIwNWQ1YjksIDB4MDFkNjA2ODYsIDB4ZTA1Y2JlZWMsIDB4NTFmZTdlNzksIDB4MmQzN2JmZjUsIDB4Y2YzNzdmY2MsCi0JMHg0M2VlNDJiMywgMHgzYjJiNzlmYiwgMHhmNDg0ZGQzMSwgMHhmYTBjYTlmNCwgMHg2ZjBhMjlkYSwgMHgzYmY3ODUxZiwKLQkweDcwZTE3ZmRjLCAweDliNzJjN2Y2LCAweDY3M2M3ZjY2LCAweGJmZjQ4NDE5LCAweGZhMjI3OWE4LCAweGI5MjYyZDRiLAotCTB4NjMzZmFmNzgsIDB4ZGYzYmQzM2MsIDB4MDAxNmQxYmUsIDB4NTJkYmRkYmIsIDB4M2Y3YzNmYjgsIDB4YmYwNWEzN2MsCi0JMHg3MjYwZWU3NywgMHgxYjQwNzNiOCwgMHg2ZjRmNjlkYSwgMHg0N2JjMDg5NiwgMHhhMjJjZGFhOCwgMHgyOGRkMzg5YywKLQkweGI4YjVmZGUxLCAweDlkYjk0MjQ1LCAweDIxZTk4M2JmLCAweDdlYjMzNzg3LCAweGZkMzAzNzRmLCAweDNiOTZmMjZkLAotCTB4OWMzZWMyYTcsIDB4ZWZiZDRkYmYsIDB4M2Q1YTcyNjYsIDB4MGJiOWU2ODcsIDB4NTE5YmZiNzUsIDB4Yjg3MmFhY2UsCi0JMHhhMGEzYzM5NCwgMHg1ZmVmMGViYSwgMHg1NGI3NzI4ZCwgMHhmMjBkMGZkZCwgMHg2NWVlMTRiNiwgMHg4NDM1ZmVmMSwKLQkweDM0MWE1NDdjLCAweDk4MzkxM2ZhLCAweDBkNzM4NjNjLCAweDEyZTg0M2QwLCAweDUxZDk3N2QyLCAweDQ2YjljMDg5LAotCTB4MmE2M2I4ZjgsIDB4ZWMyY2U3YWMsIDB4N2M3Y2I0ZjcsIDB4ZmI4NWUwOGIsIDB4OTY2MzgyZjAsIDB4ODFlM2VhMDAsCi0JMHgxNWZlZjNmOSwgMHgyYzBmOTlmNiwgMHhiZmMwNTA0NCwgMHhjYTgzZTI5ZCwgMHhmODRiNmNhOSwgMHhlZmQxOGYyZiwKLQkweDgyYjFkZjY3LCAweDlmYTUwOGE3LCAweGQ1N2YwOGY5LCAweDFiNzMzNDJmLCAweDdjYzhmM2YzLCAweGRlMDkyNmE3LAotCTB4N2QyOTkyN2YsIDB4ZDdlNDBlNTAsIDB4OTFhN2M0OGEsIDB4ZWYwNTY3MWIsIDB4ZmRiMzc3ZWQsIDB4ZmZmNWFkYzEsCi0JMHhmM2FiOTRjYywgMHg2ZmVkOWY2MCwgMHhkOTUxZjI2NSwgMHhkZGZiZTEyNiwgMHg0NDdjZmNjMywgMHhiN2U4MGJjZiwKLQkweDYzNzdiODU5LCAweDg3YTFhYzkyLCAweDkzMWJmZGMyLCAweDZiMjBlOGE4LCAweDE1NDQ3ZmI4LCAweDI4NWJmNzdmLAotCTB4MGYwYTcxYjMsIDB4Y2QzYWVlMDgsIDB4NmEzZjZhMzgsIDB4ZDY1ZWYyYmYsIDB4OTY3ZWQwNmUsIDB4MjE3ZmQ2ZjYsCi0JMHhmOWQ3MGZjYywgMHhjMzcyMGM4NSwgMHhmMThmNGZkOCwgMHhmYjI3ZTk3YiwgMHhjMGQ2MmZkZiwgMHhiN2VjZWQzYiwKLQkweGNlNmU3NDQ1LCAweDIwZmE3OGZlLCAweDlhODBiZGVkLCAweDU5MGM3ZWFhLCAweDU3ODg5YWVmLCAweGJmZWNiZjAzLAotCTB4MDZhZjEwYzQsIDB4MjhlMzRkZGYsIDB4ZGRmYzUzZmYsIDB4YjlmNGNjZDIsIDB4ZTQyNzcxYTYsIDB4YmJjYzRjZDIsCi0JMHhiOGNiZGY4MSwgMHgwYTZjYmEzZCwgMHhjYTY5ZWZiYiwgMHhmMDE1Njc3OCwgMHgwMTRjZjRmZiwgMHg3ZGY4ODFlOSwKLQkweGQ0MDQ5ZjcyLCAweDRmZjAxNGRmLCAweGVkNjRjZmNlLCAweGUwN2I2OWYzLCAweDE5MjdhNmNiLCAweGExNzk1MjlmLAotCTB4ZGIyOTNjODAsIDB4ZDYyYTcxYmMsIDB4ZTgxNDE3YWYsIDB4M2U2ZWE5YmYsIDB4ZDkwNTI1ZWEsIDB4ZmFmMmMxMjIsCi0JMHgxNTI3YTgxMywgMHgwMDQ4OWYzNCwgMHg1YmZjYTY3ZSwgMHhkOTQwZmEwMywgMHhjNDFiOGIwNCwgMHgyYTk3Y2FiMSwKLQkweGZkY2RiZjlmLCAweDNkZDU4OTg5LCAweGNiZjhmYzBhLCAweGYwYTJhOTgwLCAweDcwOTQ3OGI3LCAweDY1ZjE5NWJkLAotCTB4ZGJlMzM2NzksIDB4YjA0ODc3YjcsIDB4NzNlMWFiYzIsIDB4OGY5NTZiZTQsIDB4Y2NlM2UwNDUsIDB4ZGUxZjFmMDgsCi0JMHhiZTA2NTkzYywgMHhkMDEwMWQzZSwgMHhjODMyNjJlZiwgMHhlZGYzZTAwMSwgMHgzMWVmYjcwMiwgMHhmOTZhZjYzZCwKLQkweDY2N2E0YWZjLCAweGQ4NWZlNTI5LCAweDU3M2U1NTJmLCAweGNmYzhkYWY5LCAweDNiYjZlNmFkLCAweGRkZjcxZTYwLAotCTB4NGM3NWMzNjgsIDB4M2ZkZWZlZmUsIDB4MTVlNGM3ZGUsIDB4ZmU0ZGQ3ZGUsIDB4MjA0OTAzZmUsIDB4Y2NjY2YzMWYsCi0JMHg2Yjg1NDdhZiwgMHg4MWY5OTlhOSwgMHhjZDU3OThmNSwgMHg2YWY1MzkwYSwgMHhjNzk4NjdlNiwgMHg1ZWRlOGI0NiwKLQkweGM3MTJkODcyLCAweDI1ZWI5ZGZjLCAweGYxMmJmYmE0LCAweGJiM2UwZjY3LCAweDVhYmNmZTRhLCAweDdmMTJiYWJlLAotCTB4ZmI4YmUzYWEsIDB4MDYxY2ZkZjUsIDB4ZDllYjhlMjAsIDB4NjM4NTI3NWYsIDB4NzdmMWMyODgsIDB4NWZhMGNmOGQsCi0JMHg0ZmU3ZjlkOSwgMHgxNDNjMDBjYywgMHgwZTc0YTNlZiwgMHgyNGU4ZDVmNCwgMHhlNjczOTAyMSwgMHg0NTViZWUwMCwKLQkweGZkMTdhMjRkLCAweGFjYTFjZDY1LCAweDNlNWE5ZGRiLCAweGM1M2ZmZTY2LCAweDllOTEzYTJmLCAweDAyNTk3NjhhLAotCTB4YTJmYjY5ZDMsIDB4NDY4ZjFmM2QsIDB4NjE5NThjM2YsIDB4M2ZmMjRmZjQsIDB4N2Y2NWY1Y2YsIDB4ODNlMDY4ZGIsCi0JMHg0M2YzMzMyMiwgMHg5OTg1Y2EzMiwgMHg3NzNmYTY1NiwgMHg4MmNmYjVlYywgMHgyYzBkMDlmNSwgMHhmMDUxNDBkZSwKLQkweGI5YTJjOTJlLCAweDk1NjY5OGE3LCAweDJmNzg3YWQ0LCAweDBjNzRhN2U4LCAweDdlNjEzMWVmLCAweGFhZWU3N2RhLAotCTB4NzZjNzUxZmYsIDB4OWE4YTI3MjYsIDB4MmRjNDAwYTUsIDB4ZDlkODZhMjgsIDB4NDVhNWZlMDksIDB4ZmY2ODJjYzcsCi0JMHgxNGY4NmYyYSwgMHhiZjI3ZTdmZCwgMHgyYmVkMDNiOCwgMHhlZWEyY2RlNSwgMHgzZjg3YWQzZSwgMHhiMjE4ODM1ZiwKLQkweDUzNWExZjgwLCAweGQxZmZkZTI5LCAweDA3Y2MwOWZjLCAweDc3ZGNmZmI5LCAweDdlMmIzN2Y0LCAweDNmMWVmZjcxLAotCTB4NmZmMTYxMDUsIDB4N2M4MTczOWYsIDB4Y2RiYWQ3MzksIDB4MGQ3ZDdlODUsIDB4ZGI1ZmVlZGYsIDB4YjgyZjdmYzMsCi0JMHhkZGVmZmI5ZSwgMHhiOWUwOWE3MiwgMHhkZWZmYmEyNiwgMHgzMjg1ZjgzOSwgMHhiZDU2ODNjYSwgMHhlODY5MWVmZiwKLQkweDlkMjVmYTgzLCAweDk0NmU1NjY3LCAweGZkNmU4ZmZiLCAweDRmMTdjNzdjLCAweGM3NzlmZjgzLCAweDg2OWU0ZmFlLAotCTB4ZWRmYzk3NzksIDB4YWZjMWE3YjMsIDB4ZTFiMDFjODgsIDB4ZmNmZTU3YmUsIDB4YWJhZmU4N2IsIDB4NjU2NGRiYjYsCi0JMHhmZGI5ZGE3NCwgMHhlZTc3ZjQzOSwgMHg4MWUyYzBmYywgMHg5ZmY3M2FkZSwgMHhiMmZmMDM0ZSwgMHg5Mjk3OWRjZSwKLQkweDZjYjk5ZWMwLCAweGVmNjg0ZGZmLCAweDcyN2JiNjVkLCAweDZmYjI4OTMyLCAweDZmZDAyOWE4LCAweGFkZmMyYWUwLAotCTB4ZGMzYjc4OGQsIDB4OWZmZDE4NzQsIDB4ODNiYzUzY2UsIDB4Y2JmNmVjMWMsIDB4N2YzMjk2MGMsIDB4NjNmYjg1NTcsCi0JMHg2ZmY3NDYzNiwgMHhkOTdmZTFlZiwgMHgzN2FkZmI3NCwgMHg2MjZmZmM4MiwgMHhmZDE1ZTRmYSwgMHhmOGE1ZGYzMCwKLQkweGYwMmFmZWJjLCAweDZkZmRjOGQ4LCAweGFiN2NiNzgzLCAweGY4NzllNjFmLCAweGM5YWJlMjg1LCAweDlhMmZjNzgwLAotCTB4MjlmYWZmMTYsIDB4ZDNlYTZiMjgsIDB4ZTg2NjFmYWIsIDB4ZmFhN2UwMmEsIDB4ZGVhZGZiY2YsIDB4NmZjMGFjNTcsCi0JMHhmZTgzN2ViYiwgMHhlOWJmODBhZiwgMHg1ZjQ3ZWMwYSwgMHg4M2ZiYzFhNCwgMHgyZTc4NTIzMywgMHhmZGUxM2ZlYywKLQkweDUyYmY4YzE2LCAweGU0N2RmZmI0LCAweGVmZGRjZWE3LCAweDcwOWE5ZGEwLCAweGQyNGVmNjNmLCAweDhkZmNjM2ZkLAotCTB4N2FkZWJlMDUsIDB4ZTRkZmYzMjcsIDB4NGVmZjAwNzgsIDB4YjlkZjg1YzUsIDB4NmJhMzI3MWYsIDB4MzdiM2JmZDUsCi0JMHhhY2FmY2ViZiwgMHhmZDU2ZmY0YywgMHhmZmViNGJmYSwgMHgyMzI0ZmRjYywgMHgwMWIyMTM3OCwgMHhmNWJlMjc1ZiwKLQkweDA3MGE4MjNkLCAweDExY2I5NzM3LCAweDdlZThlNWJmLCAweGNiN2VkZGI0LCAweDNlMDFiYzA2LCAweGY2ZWE5ZjYxLAotCTB4ZmVmOWE2NGIsIDB4ZjI0ZWQwNjMsIDB4ZjgzZjM0N2UsIDB4ZWZlNjNhY2UsIDB4ZGZlOTI5ZGMsIDB4YzRmMDQ2OGYsCi0JMHgwZDU4MjNkZiwgMHhhYjgxY2JmZSwgMHhkMmJlNWZmMywgMHg5YzJiYmUzYSwgMHgzNDUyODI0ZSwgMHgzYWJjMjdhZSwKLQkweGRmMmU4ZWJlLCAweDNmYzI2ZDEzLCAweDkxNmQ1ZWY2LCAweDkzMWY3YzYwLCAweDdmMDQ0YjYwLCAweGNmNjgxMzkwLAotCTB4ZjM3ZjNlZWMsIDB4ZmI3MDc2ZjUsIDB4MjJmM2M3N2IsIDB4MDlhZWJmZmEsIDB4NmVmOTQ2MWUsIDB4MTA2NTFmOTQsCi0JMHg3Y2NhMjM0NywgMHhiZTk4ZDk4NywgMHhmNmNjZDY1ZSwgMHhjZTVkOGU4ZiwgMHhkM2Y2ODM4MCwgMHhkMjJmNjg3MSwKLQkweDA5ZTM1OTc1LCAweDdiZmI0ZmQ5LCAweDMyYjdlMWJkLCAweDdjNjJjN2JiLCAweDQwNDdmYjA0LCAweDE3OGU5ZWIzLAotCTB4N2U2NjhlMGUsIDB4NmZkZWNjZGEsIDB4MWYxYzY3MWMsIDB4ZmEyNWJjYTcsIDB4OWY4ZGU1MzgsIDB4ZjYyOWM2ZWEsCi0JMHhlM2I3NjUwNywgMHgzMzlkZTNjYSwgMHhmZTgyZWY3YiwgMHgzZDMyYjVjZSwgMHg5YzUwNWNmMSwgMHg1ODdkZWQxNiwKLQkweGY3ZTI0ZDhhLCAweGE1MmNkNTYxLCAweDI1YzYyOGZiLCAweDI0MzhiMjcxLCAweGY1MDYyYmEyLCAweGVjY2U2NWNlLAotCTB4OTAwOWIxNjMsIDB4NTQwN2U4Y2EsIDB4MGRmYjgyYjUsIDB4MDI5M2NjZmQsIDB4ZmU3MmFlZjgsIDB4NTc3Y2MwOTgsCi0JMHhmNjM1N2MwMywgMHgyM2VkYzkxZiwgMHgyOTRhYWZhMCwgMHg3NzYwOTliOSwgMHgzOTFkY2EzMCwgMHgxYTAyNDRjMSwKLQkweDRlNzMyZjdjLCAweDVlZjA1NjRiLCAweGYwMWZkNDI0LCAweGI0ZTMzYzc5LCAweDY0N2VmZDA0LCAweDY0N2Q1ZmIwLAotCTB4ZTk5MjZiMjYsIDB4MGJmMjNlZmMsIDB4NWZiNDE1OWUsIDB4MDNjN2Y1ZjIsIDB4ZmIzZDlkNzIsIDB4ODdiZWYzNTcsCi0JMHhhOWJkOWQ0NCwgMHgwZTNlMTJjYywgMHg4YWYyMTVlNywgMHhjNDIzZWYwZCwgMHhlNzhjMzYwMywgMHgwZGI0ZmU1MCwKLQkweGY3Nzg3YmQ3LCAweGRlYTJjZjU3LCAweDYxMGI2YmZkLCAweDU0ZjQ0M2Y3LCAweGRjYTQ3MTAzLCAweGJiZDM4ZmFjLAotCTB4M2ZmYTdhYmYsIDB4YzY4NmFmNDEsIDB4YTdmY2ZjNzQsIDB4NGYzODdkNjksIDB4ZmNmMWRhMzQsIDB4NzYyYmI1ZDMsCi0JMHhhZmNmZWEzNCwgMHhlNDAzMzgzYywgMHhkMTlkYmU1YSwgMHhjOThiZmU2MywgMHg1ZmRhMmE4MSwgMHhiN2NiMjI3YiwKLQkweGYxODAxOGVmLCAweDM5Nzc4YTAzLCAweGYwZjExZmQxLCAweDYwY2E5N2VlLCAweGQxN2NlYTlmLCAweGE0MDY2ZTBlLAotCTB4ZmZhZTE1ZjMsIDB4M2JjNzg2ZmYsIDB4YWQxNDk1YWEsIDB4MzEyMTcyNWYsIDB4MjA3N2RhMmIsIDB4ZTU2NzkwYzUsCi0JMHg3ZjA0OWVmOCwgMHg4MTFmMzhiMiwgMHgxNjM5YWIxZCwgMHhiZDUwOGZkZiwgMHg3OWNmZDc1OCwgMHgwN2JmN2MyOSwKLQkweDk3ZGZkOGU5LCAweGY1MDk5YmJkLCAweGFjNjA3OTA1LCAweDFmZmY5NmE3LCAweGU1Yjc5MzFiLCAweDExY2VkYTE2LAotCTB4ODcyZTVmYTksIDB4YmFiZTU4ZjMsIDB4YWQyNzkzMmYsIDB4MmFlN2ZmNTgsIDB4OWVmMmYzOWQsIDB4ZWJmYWIyZmQsCi0JMHhmNTc1MDM2ZCwgMHgzYzY1ZjZkNCwgMHg3ZTkxODhkZSwgMHgxNmZkZTcxZiwgMHgyYzMzN2MzNywgMHgyODhkM2M1YSwKLQkweDNmZWZjN2YzLCAweDA0ZGY4ODE1LCAweDFiNGVjYjdhLCAweDc3ODI1MWM2LCAweGJmMGZlMGY4LCAweDVmZjc2NjQ3LAotCTB4YzYxMGFlMjUsIDB4ZTVjN2Q5MzMsIDB4MDg0YzQ5NzEsIDB4ZTVmNGFiZTMsIDB4OTBmYTgwZjMsIDB4MTdiNmQ2MjcsCi0JMHgyZmE1ZWYwMCwgMHhlN2M0MDhkOSwgMHhlOWM1N2QyOSwgMHhlZTk3N2MwNSwgMHg1N2ZkYWFmOSwgMHg2NmVmZTA5OSwKLQkweGU5NWViYjQ3LCAweDc0ODJmZjJiLCAweGNkMDk2YTUwLCAweDNiNjU3OGM1LCAweDk5ZTIwNDJkLCAweDIzN2NlYzc1LAotCTB4NDNiNWY4MGQsIDB4N2ZjNWE1MGEsIDB4Njk1ZWJkY2IsIDB4NDc4ODYyZDAsIDB4NTJlZmU3ZTAsIDB4N2RlMTgzMDMsCi0JMHhiMzNlZmFiZCwgMHhkMzM5MTdhOCwgMHhkZWY3NjM2NSwgMHhiZGRlNmNmYiwgMHg3ZDc3ZTQzNiwgMHg5NTczOWVkYywKLQkweGVmYjQ4M2NkLCAweGU4OTQ4YmI0LCAweDliNGRmMTcyLCAweDY5ZDk3N2Y0LCAweGEzYjhlNWJiLCAweDM3YzczYmM3LAotCTB4NDllNzNlNjEsIDB4MjAxODEyNmIsIDB4MGUzZWE4Y2IsIDB4MjFhOGJjZjIsIDB4MGZkODNmYmQsIDB4NzdkNGQ5MGUsCi0JMHhlYzJjNGFlYywgMHgwNTI0ODc0NywgMHgwNjg3ZDljZiwgMHhmYmI1ZmQyOCwgMHhhYjRhOTljYywgMHhhZWQwOTY2MiwKLQkweGRkNTc2OTgzLCAweDA5N2Q3OWE3LCAweDY2ZGEyN2Y4LCAweDFmN2I5MzQ1LCAweDhmMDhlY2Q5LCAweDFiYzVhYjIyLAotCTB4MDc2NDlkZWQsIDB4MDJkZWFmZGYsIDB4MWIyMjQwNjMsIDB4MWQ0M2Y4MTcsIDB4NDAxNDkwZjcsIDB4NDYyOGJjMzksCi0JMHgwZmY0ZmQ2MSwgMHhiOGJkZjBjOCwgMHgyZDIwZWY2MSwgMHhkNWNkMGExYywgMHgyOWYyOGY1OCwgMHhkNDkwYjNjMiwKLQkweGY5MWE5OWM4LCAweGI4NTc4ZWFkLCAweGYxOThhMWRjLCAweDNmZjliYTNkLCAweDhjNTVlOWJhLCAweGM4OGQxOWUwLAotCTB4NzQ3Mjc4OWEsIDB4YjMzYjQ1YzcsIDB4MmNjMGVlZmEsIDB4N2UwMTVhZTUsIDB4OWI3NWM5MzIsIDB4NmE5NTIwNDUsCi0JMHgxMjE4ZjdlNCwgMHhkNTQxZDRjNCwgMHhhYWJmMTYyZSwgMHgzYzljODA4MiwgMHg4MzQ3MWRkMywgMHhkNzgxMWE2MCwKLQkweGZkZjcyODAzLCAweDkyMTkwODAzLCAweDEyODZmYTBlLCAweGVmYzBkNmViLCAweGYzODVjZDkyLCAweDA4MmI5OGIxLAotCTB4ZGRkMzE3OTMsIDB4N2UwYTdmYTAsIDB4ZTk0Y2I5MWYsIDB4NjFiMmFhYTksIDB4NDBmNzhiMTAsIDB4MGQ3ZWYwYmMsCi0JMHgzZjNhNTg1NSwgMHg0YmY1ZmI5NywgMHhkNWY5MDdhMCwgMHgyN2RmNzBiOCwgMHg2MjBhMmE4MSwgMHhiYjQ1MzM3MCwKLQkweGUyYzIyNGViLCAweDQ2M2JhZDk5LCAweGI0OGZlN2I0LCAweGZmYWY4MTE4LCAweDA3MzFjYTIwLCAweDY5ODRmYzg5LAotCTB4YzgyYWM0MWUsIDB4YmZkOGFhZGIsIDB4OWNmZGMzNjUsIDB4YTA0MjRkYzMsIDB4MjQxZGRhMWYsIDB4NjNhOWE3NjQsCi0JMHg5NjljZjlhNCwgMHgzNDk5NWRmZiwgMHhmNzRiYTFhZiwgMHg5MWI5N2QwNCwgMHgzMzVjYTgyZiwgMHhmODQ0MWI4YywKLQkweDM3M2Y3ZWQxLCAweGExYjlmYmY0LCAweGFkYmZjZmRmLCAweGU1NGUxNTVmLCAweDEwZTk0MWQ2LCAweDY1NzU2MDg3LAotCTB4OGQ4ZGMzOTAsIDB4YTM3MGU1NjcsIDB4NzEwZTE5ZjAsIDB4YzYyOTg4ZDcsIDB4MTFjZGVmYzMsIDB4MzY3YzMxYWUsCi0JMHhmMTRmYTgxNiwgMHgxZDI2MjczYSwgMHhkOGYzZjRlMSwgMHhhZmYwNjEwMywgMHgwNGI1MDkyNSwgMHgwNGFiYzNjZSwKLQkweGM5MjJmZTM1LCAweDExZGE2ODc1LCAweDcwZjkxNWI3LCAweDRlNjcxZjNkLCAweGY1NzdhMzBjLCAweGZhY2Y3YzFkLAotCTB4ZThlZmJjMzYsIDB4NWJkNmRmNTEsIDB4ZjVlODk4ZmQsIDB4YzdjZGJkOWQsIDB4ZGYzZTc1MWUsIDB4YmQ5NGNlNTUsCi0JMHg3MDViZmVmMiwgMHg2ZjJkZGI1ZiwgMHhmYTk0MTRkYywgMHg2MjczZGI3NywgMHg3MWE1YmY2OCwgMHhjMzZiN2ZlZCwKLQkweGI0NmY0YzJmLCAweDJmZTNkN2Y2LCAweGQyOTVlODA2LCAweGZkNjBjYzRmLCAweDdiZGUyMzc3LCAweDdjZjk5N2EzLAotCTB4NDhlZjM0MWQsIDB4OWJiYWViYTUsIDB4OWVhNTNmOGYsIDB4YjNkZjc3ZGQsIDB4ZThlM2Q5OGMsIDB4ZjUwYmNmZjEsCi0JMHg3N2ZhZjBlNywgMHhhZWQxZjM1YiwgMHg4N2U2MjI3MCwgMHg5ZWUxMjcxOCwgMHhkZTE3YTY1YSwgMHhmNzg4OTBmMywKLQkweDA4ZTIzZGFiLCAweDdmOTQyZmMxLCAweDA0MmU1ZGVlLCAweGUyZDFlOTQyLCAweGUzNzc5MTIyLCAweGY4ZjNmZjY4LAotCTB4NDMzOGM2ZjgsIDB4NWQ0Y2EyM2UsIDB4MzM4YjQ2MjcsIDB4N2Q0Y2U4YzQsIDB4NWY4YzY1ODcsIDB4ZjJlNDg4YjAsCi0JMHhlZmZhNTFmOCwgMHg5MzM3MzZlZCwgMHg1YzgwZTY4NywgMHgyZmIyMzIzZCwgMHgzYTUyMzdmOSwgMHhkMjkyN2QwNiwKLQkweDg5NjdkYzMxLCAweDcxMmQzZGZjLCAweGZhYmZjY2M5LCAweDNjOWQ3ODhlLCAweGIxMjhhMGJiLCAweGM1MzZiZmI4LAotCTB4MmUxYmUyZWIsIDB4YzcyNGFmMWQsIDB4ZjliNWU0NjksIDB4YmYxNzVkYTIsIDB4YTRmMjRhYTUsIDB4MmU5MmJjODAsCi0JMHhjYTE0NDc1ZSwgMHgzZWM1ZjI1NywgMHg1Mzk0ZDE0NCwgMHgxOTk5MTQzZCwgMHhlZTUxMzZkYywgMHgyMDAzOThhNCwKLQkweDVjZWVjY2U3LCAweDZjN2EwZjkyLCAweGI1NGZhMzFjLCAweGEyMzA5Y2JlLCAweDliN2M2ZjViLCAweDI2MmM3YmZlLAotCTB4ZTk2Y2Y5MTEsIDB4YzYxOTI1MTIsIDB4ZWI3M2RhMDksIDB4Y2FlODkzZTEsIDB4M2QxY2Y4ZjYsIDB4ODNiZmMxZTksCi0JMHhkNjBhYmJhZCwgMHgzZDczZGU5ZCwgMHg4M2M3YjI1NSwgMHg3NzRlNzNmYSwgMHhjYzJiMWJiYywgMHhlZjI4YjQ0ZiwKLQkweGRmYmYzMDJiLCAweDJhZWMwNDRiLCAweDM5ZTNlMTNkLCAweGJiZjBhMDEzLCAweDdlODdlODEwLCAweGY0ZWM2MjIxLAotCTB4YzNhZmU4YTEsIDB4MTA3NWU0ZjUsIDB4ZjVjYTkxY2YsIDB4ZTNiZTNjNTUsIDB4ZjFjZjFlMmEsIDB4NzM3ZjFlNjEsCi0JMHhhOGYzOGYwZCwgMHhhOWVhY2ZjMiwgMHhkNjgyMzhjNiwgMHhhYjdmYWNjMSwgMHhjMTI3ZTM5YiwgMHg0M2UzZTFjNCwKLQkweDUyOWFjOTdkLCAweDM2ODRmNzgxLCAweGUyMDg0NTc3LCAweDc0ZmU5MTcxLCAweGJiNjk4MDlmLCAweGIyN2UxMWFiLAotCTB4OTI3ZGEwOWIsIDB4MDViY2M3ZDYsIDB4NmE5NTM0ZjIsIDB4Y2MxZTIyNDcsIDB4NGY5MjBhZWUsIDB4ZmJiNjFmY2IsCi0JMHhkOWI4MDJkZSwgMHg0MWJjN2QxNCwgMHhjMzQwY2E0YiwgMHg5ZTAxYjBiZCwgMHhjOTNkM2QyYSwgMHhhNzAyNjJlNCwKLQkweDEyN2MyMzI3LCAweDUzZGYxNjY0LCAweGY0ZGVhM2E1LCAweGNmZWUyYWFhLCAweDgzZDJhOWJiLCAweDJiOGYxNTY5LAotCTB4ODQ3MTA1NTUsIDB4OGYyOTRlMjAsIDB4Y2ZjODk0MjMsIDB4OGUxNDU1ODksIDB4YmUwOWZkZjAsIDB4NjY1NTU2NmYsCi0JMHg5ZGE2Nzk2MywgMHhhNjA5NTNlZCwgMHhjMDEyODM4YSwgMHhiYjMwOWUyNSwgMHhmNDlmODI2NywgMHg1NWNjMjJjZiwKLQkweGZjNTI3ZTE0LCAweDdhYmM4MTQ0LCAweGU3YzM1ODhmLCAweDc0NDFlOWNkLCAweGUxNzEwZDliLCAweDJmMDAyNzk0LAotCTB4MjY0ODZmMzUsIDB4OTcxNWU3YjgsIDB4ZDYzZTRjZGYsIDB4Y2IzOGIzZDAsIDB4MzQ3NjA3MWIsIDB4NjAxM2UxZDEsCi0JMHhlMDM5ZmJmZiwgMHgyMzY3Y2U5NSwgMHg1OWM2MTc5ZCwgMHg5YWIwZjRlNSwgMHhhNzJkN2RlMywgMHhkZTNjZjU4NywKLQkweDVkMzgyZmU3LCAweDBmZDc0YTNjLCAweDdiMGYyYWY5LCAweDFhNjFiMDM3LCAweGM4NGI4YmYzLCAweDY4YjhmMTMwLAotCTB4M2JmNWEyMjEsIDB4ODkwNGYzOGIsIDB4M2M4OWQ3NGMsIDB4NzE4YTYwYWEsIDB4MGIzMWM4ZWYsIDB4MjQ3ZDhiZDIsCi0JMHg3ZTUwOGFmMSwgMHg4YjAwODFlYywgMHgwYTliOTk2MywgMHgxYTljNjZmYiwgMHgxMjgyNzJiNywgMHhiNjFmMWIzNywKLQkweDNlM2NjYzg2LCAweDFkY2VjODljLCAweDNkZTM1MWFkLCAweDU5MGU3OTU2LCAweGRiZGVmY2UxLCAweGRjY2UwZTdjLAotCTB4ZjZiYzYwNDMsIDB4ZDIwZTg4NTEsIDB4N2IzYjk3YzcsIDB4NmEzYmNkMzEsIDB4N2Y0ZGZlYTksIDB4ZGE1ZjFlZWMsCi0JMHg1YWU3YTA2YSwgMHgzNzNmMDEwYiwgMHhiZTdmOWQwNywgMHhmN2IxYWY0NiwgMHhkOTA4MDc2MiwgMHhhOWQ4YTQ3ZiwKLQkweDQ1MDc0YjNjLCAweDk3ZjdlMjgzLCAweDAwNmM4M2I1LCAweDA1NzMwYTY3LCAweGE0OWIxZGVjLCAweDAzOTA1NGRjLAotCTB4ZGJhMmUyOWIsIDB4NGNlYzYyNmQsIDB4OGU2NTc2NWYsIDB4OGQ3NWQxZDAsIDB4ZWU3NmM1ZTQsIDB4ZjQ3NDYzMDksCi0JMHg0ZmU1YzM1ZiwgMHhkZDFjOTRmYywgMHg3Y2RlNTU3NywgMHgwYmZhYzMxZSwgMHgzMDk5N2RkYSwgMHg5OThiYTRhZiwKLQkweGI3MDliZmM4LCAweDU1M2Y5NzQ1LCAweDM4ODdlYzkyLCAweDk4YTM1NTAwLCAweDk0Y2ZmM2JjLCAweDQzZDU5ZTk5LAotCTB4NzUzOTMwOWUsIDB4ZjhmMDhjODEsIDB4ODY0Njc0MzUsIDB4YmYwN2Q0MTMsIDB4ZTJlYjI5OWMsIDB4M2UwM2FlMTksCi0JMHg2MzcxMDYxOSwgMHgwMmFmZmQxOSwgMHgzOGE5YTA3ZSwgMHg4OWZhNDY1OCwgMHhmM2MyNmU5ZiwgMHg1ZmNlMWFlYSwKLQkweGRhN2U3MzBmLCAweDExZTlmOWMwLCAweGM0MGIyM2UwLCAweDY3N2M2NTlmLCAweGIwZTE5ZTI2LCAweDU4Yjk1NDlmLAotCTB4ZmUwMTJkZGMsIDB4YzU1NDliNGYsIDB4NzE4Nzk4MmMsIDB4MDQ1OThmOGUsIDB4MzJhODlmYjgsIDB4NDMxNzUzN2IsCi0JMHg1OWUyZDZiZSwgMHhlMzFlNjBhOSwgMHhlZDZiZmIwMSwgMHhkZjdmMzQ0YSwgMHgyY2UyN2Q5MCwgMHg2Y2Q3ODUzYiwKLQkweDZhYzdiZjhlLCAweGFjZmUyMmM3LCAweGFjMDE0ZjZlLCAweGMxODhlY2NiLCAweDUwZDU3ZGYzLCAweDczYjQ0MTZiLAotCTB4YjMzYjc0YzIsIDB4MmY3ODUwOGYsIDB4NGNmYTdlODQsIDB4ODczZWU5Y2IsIDB4NjZhMTk5ODEsIDB4ZmRjMjE2NjYsCi0JMHgxZDA3NzgzMSwgMHhlZGNhN2U4NSwgMHhmZDIxOGY0YywgMHg0NmIwNjRmZCwgMHgzOGYwZDQwZSwgMHg5M2YxNDQ3MSwKLQkweGIwNzkxYWUxLCAweDAyNTRjODcyLCAweDcyOWU5ZTc2LCAweGI4MzkxN2EwLCAweDJhYzFjOThkLCAweDA2MmZlZjgxLAotCTB4ZjhmMTU2YmMsIDB4MzQxY2FhZGIsIDB4YzRhMzVlMDMsIDB4NGQ3ZDVhZDcsIDB4YmU3ZGVlYjYsIDB4YjFiOGU1YzQsCi0JMHgzYjNiM2FkZSwgMHg5ZTIxYWQzNywgMHg1OWU4NGZiMCwgMHgwZWI0ZTE0ZSwgMHgzZmQ5MTRlMCwgMHhhMGUzYmE3MywKLQkweDNhY2EyMGZkLCAweDBjZWZmMjhjLCAweDUzMjA4M2VjLCAweDMzOGMzZWNjLCAweDllNTY0OGIyLCAweGU1NzIwZjE4LAotCTB4NGNiZjk4ZGYsIDB4M2E4MjdhNmYsIDB4NDJjNWZlNWUsIDB4MmVmMjY3ZGMsIDB4YmZmZGM3OGUsIDB4MjEzYzc2YTAsCi0JMHgyYjAyYWU3MCwgMHhmNjlkZTZiZCwgMHg3NTNmY2RlOSwgMHhkNzRlZGUwMSwgMHhjZGQzZmJmMiwgMHg1N2ZjMDA1MiwKLQkweDJlYWVkNzRlLCAweDRkYjU3Y2MzLCAweGZjNGM5YzAxLCAweDg4MmUwM2U1LCAweDY5ZThiMmNiLCAweGNmNTNlZjExLAotCTB4ZDBkM2Y4YzQsIDB4Y2JlYmVmZmYsIDB4N2Y4ZDQ1OTcsIDB4YjViYThhYzQsIDB4MTY5ZjIwNjksIDB4ZWY4YjVkNmQsCi0JMHg3YmM0Y2VlYywgMHhmMjZhZTY4NywgMHhiZDQxNTMyNCwgMHg5NmQzOGQ1MCwgMHgwYmM1OGNmNywgMHhmYjZmNWRmYSwKLQkweGU4ZTZkZTUyLCAweGY4MmFmZGU3LCAweGNhNWFmNDE1LCAweDFlYjdhMDJmLCAweDQzODRlNTc0LCAweDdlNjdmZjE0LAotCTB4YjI3ZDQzNjksIDB4NDI3N2Y2NGEsIDB4MWRhYjZhYmUsIDB4ZjhhYTkwNWEsIDB4MWUzZmYxZTgsIDB4MGJiNGRmYjYsCi0JMHg3NmMzYzdlNCwgMHg4OTQ4M2VlZiwgMHhlZDRiYzU4MywgMHhmOGVhM2U2ZCwgMHg4NTZiNjBlZCwgMHg3OGE3Yjc3YiwKLQkweGE3OGExNDFjLCAweDFiYmIzYTk5LCAweGU3NmI3N2JiLCAweGVkNjIxNDc2LCAweDk3ODYzY2E1LCAweGJiOTRiZDJiLAotCTB4NzEwYzlmOTgsIDB4ZTc1NzJmNDcsIDB4MWY5Zjk2NzMsIDB4MDdiNTZkMTcsIDB4MDNkMTQ2NTYsIDB4ODRmN2YxMTYsCi0JMHg4NjdkZjg4YiwgMHhiYjY3MmY0YSwgMHg2NzQ2MmRmNSwgMHgxNzI1ZmY2YSwgMHg2MmY0NjVhZiwgMHhiOWUxNGJhMCwKLQkweDlmODc0ODUxLCAweDdmNzA5MTFkLCAweDExYmI5ZTExLCAweDVkOTRiNGUzLCAweDEyZmQ2MWI0LCAweGY4MjhmM2QxLAotCTB4NDViNzkzNzcsIDB4ZGVmYmQzYTQsIDB4NTlmNzg3MTgsIDB4OTA3ODg2MWQsIDB4MDllOTgzYTIsIDB4YjE3NzlhNmEsCi0JMHhlNjlmYTc1OCwgMHhiMGNhMTYwNSwgMHgyYzVkZTc5ZiwgMHhmNjBjNzQ2MywgMHg5Mzk4Mzg2NywgMHg2ODliNWU2ZiwKLQkweDAzOTZmNGU2LCAweGI0ZGQyZmVkLCAweDZmY2JkNjkyLCAweDI2NGVmNDYzLCAweGJlZDBjYmY4LCAweDNjZjc2NzU4LAotCTB4OGEwZTQ1MWMsIDB4MzcxNzQ1MGUsIDB4ODRhZGJmMzQsIDB4NDlmODczYjUsIDB4N2ZmZWU2ODIsIDB4OWU4YjhmMTEsCi0JMHg0NWM1OTE3ZiwgMHg0OTNmNmUyNCwgMHhmMmU3M2EwMSwgMHhmYTlmNDIyOSwgMHgyNjFkYjVmOCwgMHg3YWUzMmY4NiwKLQkweDEzM2FmODEzLCAweDQzN2JkN2JhLCAweDNlZmRlYjJmLCAweDBmZDcyZjViLCAweDFiYzZkYmYyLCAweGYxYWJmNWQ2LAotCTB4NTkxNWQ2ZDEsIDB4NWZhYzA0Y2YsIDB4OTcwZGUzYzIsIDB4ZDVkZTE4OTgsIDB4NGMxZDFiZjIsIDB4N2I2OWFiMGUsCi0JMHhhNWUyMmNlNSwgMHg4ZjIxNTFmYiwgMHhiODE3OThhYiwgMHhjZjNlMDY0ZiwgMHgyZjE3MWNkYiwgMHg1Zjk5ZDY2OCwKLQkweGE3ZTc0NzNiLCAweDFmM2I1NzkyLCAweDZmZTU3MGUzLCAweGQwMmYyZjllLCAweDllMzc1NWYwLCAweDZiYWYyOWZjLAotCTB4ODZlMzc0ZjEsIDB4M2E1NzUzM2UsIDB4YmRjYTFmNjAsIDB4M2VlMzAxZDYsIDB4NjVmNzNhNWIsIDB4YmMzMmZkMDIsCi0JMHhhM2ZkOTE5ZCwgMHhkZDBlNTAyYiwgMHhjZWY2OGFlNywgMHhkYmMwNDZlNSwgMHgzODdjZWQzOCwgMHhjOWZiMDZkZSwKLQkweGEzN2JlZDQ4LCAweDU4ZTNkMThiLCAweGJlMmI2ZmI2LCAweGRiYmJlZTFmLCAweDQ0NTE2NDlmLCAweGQxMzc5NzdhLAotCTB4ZTM4NDY5ZjEsIDB4NTliZjBlMmMsIDB4OGUxYzcwZGQsIDB4ODY1NzU0N2UsIDB4N2YzYTc1ZTMsIDB4YzhlMTVlYTksCi0JMHg0OWMyYWZmMSwgMHhiMGY1NGVmZCwgMHgxODQ0OGU5OSwgMHg1N2Y3YjA5NywgMHgwYWFmZTNiNSwgMHgyN2YxOTE3ZSwKLQkweGExZGVmYWYwLCAweGEyZmM4MjRmLCAweGY0ZjgxMmYyLCAweDFmM2ZiM2VjLCAweGIwZjc2ZGFkLCAweDMwYmRlMjdkLAotCTB4YmFiZWE5MGUsIDB4ZDgzZmI1N2IsIDB4ZGY1MDc5N2QsIDB4MDQ3M2M5M2YsIDB4YWRmZTZiY2UsIDB4YWU4YWE3YTIsCi0JMHhhOWY2MzBiYiwgMHg1NmFlMTBjZSwgMHhhZWFkZGZiZiwgMHg3NjBlMTg2YywgMHgyMGNhYWFkNiwgMHg0MGJiNTRhNiwKLQkweDhhNmE4YmJkLCAweDY4NWZkMDFlLCAweDc4YjQ2ZjE1LCAweGJjMzllYjU0LCAweDMyYjY1NzU3LCAweDRmZDU5MTNiLAotCTB4MjQwZjYwZGMsIDB4OTljOTJmOGMsIDB4MzMzNzY4YjEsIDB4ODM3YWY0M2IsIDB4NjBkY2Y5MmMsIDB4N2JmOTkzYTcsCi0JMHg1YmVjYzk2NywgMHhlNzA5OWU5NywgMHhiZjBjODRlMCwgMHgxZDZiYmUwNiwgMHg0MzYyZmZjYywgMHhmODNmNTJjYSwKLQkweDNlYzE1OWVkLCAweDIyZWQwODM5LCAweDgxNzY3NDE3LCAweDljOGJjZDU3LCAweGYwZDRlZTk0LCAweGY1ODMzMWEzLAotCTB4OTA0MjUyZTUsIDB4MjQ2ZTFkYTAsIDB4NDc5ZGFlZmQsIDB4MmVjZWFiNDIsIDB4ZDk4Yjg0NmEsIDB4MTJmYmMyZWEsCi0JMHgyZWY2ZTEzMywgMHhlZmY1MGYwZSwgMHg3MmU1YWM2NCwgMHhjZGRiODZiOCwgMHgxOTdiMDcxZSwgMHhiYjRhZGY4NSwKLQkweDM1YTNmNzBiLCAweDM5ZDg5OGQ3LCAweGYzYzY2YWMzLCAweDQwZjFiODM1LCAweDhmZDYzOTdkLCAweDdhYzFiMGViLAotCTB4NDNmM2QwNDQsIDB4ZTQ0Mjc3OTgsIDB4N2I0MzExMWEsIDB4MjM4ZjkwMDksIDB4M2VmOTAwOGEsIDB4ZjQwNmI0MjQsCi0JMHg2ZDg5YWVkNiwgMHhkOWY3YzNmNywgMHhlMDFkNWYzNiwgMHhkNmQ0Y2JmNywgMHg0ZmQ4MDJlMywgMHgwMGMzN2Q3MywKLQkweDNmYTJiNWNlLCAweDdmZjVhMTQzLCAweGEwMzM4NjJkLCAweDNhMmQxYTVlLCAweDZiZDJjZjE2LCAweGE3ZGFhZmMwLAotCTB4ZjE2MTk3YjksIDB4YjE3OTIzNDAsIDB4ZTU5YWZlNjcsIDB4YzUzZGMzNjYsIDB4ZTViNGMzZDcsIDB4MmQ5NDZjZmIsCi0JMHg3YmZjZjVjNiwgMHgwYjFmMDkyOSwgMHg3NGI2ZWYyOCwgMHhmMTczYzlkYiwgMHg4ZTUxZDA3ZCwgMHhhMDBmYTQ0ZiwKLQkweGJmNmMyM2FmLCAweDYyNTY2MGJlLCAweDRkZmQ5OWUzLCAweDY3Njc1NTc5LCAweDZhYWYyYWI2LCAweGYzZjMzM2M2LAotCTB4NTdhNTNkNTAsIDB4NzRhYmE3YjAsIDB4MzVlY2Q4MzIsIDB4YTkwZDNkMDEsIDB4NzRiNWRmYTYsIDB4ODMyZjQ1MTEsCi0JMHg3MmY3MDY3MSwgMHgwZmNlYTExZiwgMHgzYzAwMDdkZSwgMHg2YzU5OGJjNSwgMHhjNWQwMzFiZiwgMHgyNWZiNmViZSwKLQkweGIzMmE3YmZiLCAweGFmMzNjMjU1LCAweGEyMzhmOTYyLCAweGQxZmM2MGZlLCAweGUzZWRiYTBmLCAweGNkZGU1OGFiLAotCTB4ZDgwYmU1NzIsIDB4MDVhMWRjN2QsIDB4YTZkN2U4YjEsIDB4Y2I3NjYzY2UsIDB4YzNkMDU2ZGEsIDB4MmVhNGI3NjYsCi0JMHhkOTk5ZmI4NCwgMHgwYWZlZWJkNiwgMHg3YzI5M2VlOSwgMHhlMjcyMGVjOCwgMHhlNzllMmNhNywgMHgyYWJkZWZkZCwKLQkweGZiYmE2OWQ5LCAweGRlZjhhZGRkLCAweGNmZGYzNGZhLCAweDA0YjA5MmU2LCAweGI3MTFmN2Y4LCAweDAxZWJlY2NjLAotCTB4YzQwNWQzZTQsIDB4MDk0MWYzYzMsIDB4ODRmN2JkY2UsIDB4NDJkZTc3MDIsIDB4MWFiZWY3NzMsIDB4NjI4ZTA1YjgsCi0JMHg1Zjg0OGY3MywgMHg4MmY5NzQwMywgMHhjMzY4YTllZSwgMHg3YjM1ZGI1NiwgMHhkNjc5Njc1ZSwgMHg2NmZkN2JhZSwKLQkweGIyMjdhZTJiLCAweDVmYWUyYjVlLCAweGY2NDQxZjVkLCAweGI4ZWVmMmM0LCAweDkxMmUyY2MwLCAweDBiNDk4ZjBhLAotCTB4ZGI2N2JhZDksIDB4N2M5OGZjZTcsIDB4ZGIzOWRlOGIsIDB4Y2NhZmVhM2EsIDB4YzdjZDg4N2YsIDB4YTFjZjlmMDgsCi0JMHg0ZWM1Y2E4OCwgMHhhNGU0ZDc4NywgMHhlMWQwZmZlYiwgMHg1ZWI0OWQxNSwgMHg2NjljMzU4OSwgMHg2MmZjODgxZSwKLQkweGU4OTk3YzgxLCAweGFlODkyNmJiLCAweGRmMDBmY2ZmLCAweDQzODA0NGIwLCAweGQyYWI5ZjZiLCAweGY0ZTRkZjJmLAotCTB4ZWZhNzI2ZmQsIDB4ZTNiYmQzMzcsIDB4MWVhMDI3MTgsIDB4YWUwMjRmN2QsIDB4YjNhNzA2NmIsIDB4NDdkZmJiMzUsCi0JMHg2ZmYzY2MzZiwgMHhhNTRiNzhiMCwgMHg4M2ViNzJhMiwgMHg0OTEzMzc2OCwgMHg2YWFjMzhiNCwgMHhkZmI3MjZmYSwKLQkweDBlOTU0ZTI4LCAweDBkY2UzYzAzLCAweDRkMTk5N2UzLCAweDlmYmJmNDc2LCAweGY0ZWEyOTkxLCAweDAyOTkxOWYwLAotCTB4MWQ2Yjg3ZjcsIDB4MmY0ZTg3N2QsIDB4ZDJmNWM1NWQsIDB4ZmY4MGZkOWUsIDB4ODU5ZmIxODEsIDB4MzllMzI3Y2IsCi0JMHg5ZWVjOGY2YywgMHhmZmRmZjIwOCwgMHg4NWIzYTMzNCwgMHgyOTNjMjg1MywgMHgxM2FjZTVkZCwgMHhmYzcwZGVmMCwKLQkweGYyMDIzNmE5LCAweDFjNGQ2MTcwLCAweDg1ZjNmYjgxLCAweDIwZmJmYzBmLCAweGQ2NTBjNzg4LCAweDgxYjczNGFhLAotCTB4MWUwODBjOWMsIDB4OGIyNWJmYjAsIDB4NDY3ZTMyNGIsIDB4MTBlOWI1ZTcsIDB4YmYyMTg3ZGIsIDB4ZjBlOWU2MDQsCi0JMHgzZDhkMGUyYSwgMHhjOGFhNDNiYSwgMHhkZjVkMDM3MCwgMHgzYzgyZjBlYiwgMHhmNzg3N2Y5OCwgMHg2ZmU3OGMwMywKLQkweDdiMDQxZDBlLCAweGY5OWViYWI3LCAweDAwZDkyOGY3LCAweDliNDFmOWZmLCAweDMxMmI1MzE3LCAweDM2Yjk1MGM3LAotCTB4OTBhYzRjZGYsIDB4NmNjNGNiMjYsIDB4NzNjYjdjODMsIDB4MWU0YmIwNWYsIDB4MThlNGVlYjYsIDB4ZGZkZjY1NjIsCi0JMHg3MmY0MDRiOCwgMHg1YmFjODM1ZCwgMHgzZWEwYThmNywgMHgzZWIzN2Q3ZiwgMHhlN2QyMTE5ZiwgMHhlN2QxMWVjNywKLQkweDQzMWE4M2I3LCAweGZmYzM5NWYxLCAweGZkYTFkNGNlLCAweDg3N2YwMjE2LCAweDBiNDVmOGE2LCAweDBjYmViM2ZhLAotCTB4MDVmYTAwN2IsIDB4NGRkZTUwZGEsIDB4ODJjOTZlMmUsIDB4NWU0ZmQ2ZmIsIDB4OWNlMDlhNzAsIDB4ZGY5YmVmYmYsCi0JMHg3ODZkN2RlMiwgMHhjOWUzMWQ4NywgMHgwYzUzZmMxZiwgMHhjMDdmMDE4OSwgMHhhMTViNmQxNywgMHgwNGUyOThiYywKLQkweDJmYzU3N2VjLCAweDBlYzBlYWRhLCAweDdhODQ2N2IyLCAweDVmYTAwZDFlLCAweDMxYmY5ZWM1LCAweDc2ZjBmOWJmLAotCTB4NmZlZTAwNGIsIDB4ZGNmYmQ5M2YsIDB4OWY2ZjQwMGIsIDB4ZmE4N2VmNmMsIDB4ZGY4MmNiY2UsIDB4ZDdmOWZkMDQsCi0JMHhjNGU2N2MzMywgMHgyNzJkN2RiMCwgMHhkZTMzZDI4NiwgMHg3NWNmZWJiYiwgMHgxYzk5M2JmNywgMHgxZTZjYWY2OSwKLQkweDRlNTlmYjAxLCAweGI0N2ZiMzNjLCAweDAxMWMxZTU3LCAweDhmMGU1Y2ZiLCAweDQ5ZWFhZTQzLCAweGJjN2UzYzM5LAotCTB4Mjc0ZmVhOWIsIDB4ZTUxNDM5ZDksIDB4MGZjZTcwYzIsIDB4YjIwNTgxNzksIDB4ZDVmYTAxZDcsIDB4NTM5MDE4OGEsCi0JMHg3OWU1Njc1ZCwgMHhhYzM1OGZlMCwgMHgxNTQ3MGY1NiwgMHhmNDA2ZDdjZiwgMHg3Y2Y5MmJkZiwgMHhmN2NkMTAxNiwKLQkweDU2ZjdiODc0LCAweGJkMDBhNGQ2LCAweGJlYTI0MzNkLCAweGY5YzM1YzdiLCAweDY1ZTdmOWU4LCAweGYyMmZiY2Y1LAotCTB4ZDE0NDY4ZjgsIDB4Yzg4YWNmYmMsIDB4MWZhY2IyNzMsIDB4YmUwMDI1ZjgsIDB4MTdiZTQ2MDYsIDB4ZmI1NWM2MWIsCi0JMHhmZmZiY2E5ZiwgMHg5MmZjY2FjYywgMHhjZTFjMzgxMywgMHg3ZDQxMWU1NSwgMHhhZGRmNWJhMCwgMHg2OGE3N2FmNCwKLQkweDA3YjU3OWYyLCAweGZjMjNlNjkzLCAweGQwMmQyNjBlLCAweDFmYjZmMzllLCAweGZlMDM5YTRlLCAweGZjNjYwZDM2LAotCTB4YjMyNTUzYmIsIDB4MjcyNDdkOWYsIDB4NDE4YmJlMDEsIDB4MDM5NDI3OTgsIDB4YWY4MjNiMWMsIDB4ZDUxZWEwYjksCi0JMHhmZDY4Yzc2NywgMHg2ZjZiZjI1NywgMHhlY2QxNGVmMiwgMHhjZTk1ZGZkNywgMHhiYjY1ZTNiYiwgMHhjYTVlNWMxOSwKLQkweDE2ZmRiZGNlLCAweGEyY2RiYmEwLCAweDA3MTVhYTA3LCAweDE0NzliY2VmLCAweDg0YjM3YmMwLCAweDc2NGI3MmVmLAotCTB4YmRiNzE4NGEsIDB4YjQwNmVlYmMsIDB4YmUzNzE0NTMsIDB4ZmZlMzE1MzMsIDB4MDNkZjM5M2QsIDB4OTMzMmNhZjMsCi0JMHg5YTBjNzE1YywgMHhmNDgwZWUxOCwgMHg4YzZlY2I0YywgMHg2MWZjNTdhZiwgMHg2MDU2NmM4ZCwgMHhhM2JhN2FiZSwKLQkweGEzZjA4Yzc0LCAweDZkZDY1NDFhLCAweDE1ZGU1M2MwLCAweDdlYWIzZmU4LCAweDMwYjdlMjM3LCAweGM0NmY2ZmEwLAotCTB4MWJhNzJiNTMsIDB4OGI1YzMzZmEsIDB4M2ViZDYzNmYsIDB4OGVmOGZkZDMsIDB4OTUzOTY0YjIsIDB4NTQzYjFhNjMsCi0JMHhmNDZhYTljOSwgMHgwMzhlMzNkNywgMHhhMzQ0ZGEzNywgMHg3NzAzZWNhNywgMHgxZGFmZTAxYiwgMHhmZTgzNmZjYywKLQkweGVlMmNkNjA4LCAweGU1ODgzYWQ3LCAweGQwMjAwZTMxLCAweDA0N2ZhYzE1LCAweDNiYzBhMjk5LCAweDM0YzhkYmNjLAotCTB4ZDFiOTU1NDgsIDB4MGQxYzFkOTEsIDB4ZGExNjVmZjUsIDB4ZjYxNWZkOWUsIDB4ZWQ3ZTQ0ZTcsIDB4MmUzMDg3NzAsCi0JMHgzZWZlNWY2MiwgMHg3OTYxNDNiNSwgMHhhODNhZWZmNSwgMHgzNjJkNDVlNSwgMHhlNGY4ZjNmNCwgMHg3MWYyOGNiYywKLQkweDQxOTdmODA1LCAweDI2NmMxN2ZkLCAweDNlYmZkZDEzLCAweDEyNjdkOWQ5LCAweDA0NzYyZGY4LCAweDczZGNiYzU5LAotCTB4ZTQ5MzNlYzEsIDB4OGQ3N2Q5NmYsIDB4MGZkZDQxNzIsIDB4NzRhZmMwNGYsIDB4ZTljMmZjZGYsIDB4NGI3ZWMzMGQsCi0JMHhjZWJmMzE1NiwgMHgxOTE1M2VlNCwgMHhhNGYwNTExNSwgMHgyYjkwNGJiNiwgMHgxMjNjZTAzMiwgMHhkOWUxZDdiZSwKLQkweGE3ZjI3MDhhLCAweGMxNzIzZWMzLCAweDgxZjY4Mjk3LCAweDEyMWVkY2Y5LCAweDA2ZmRjZWVmLCAweGJhZDI3NWZhLAotCTB4ZmUyZmZhNWUsIDB4ZTgxNWI4ODgsIDB4NzNkMTYzZWIsIDB4ZTQ1MDdiYmYsIDB4YTY1MTZmOWUsIDB4OTBmM2RmMGYsCi0JMHhiNDVjZWM1NSwgMHg2NjQyNGNkMCwgMHg4NDJlZWZhYSwgMHhlNjM0NjNmZCwgMHhiODViYmY3MSwgMHhhNmZmNDA1OSwKLQkweGViZjQxYjQ1LCAweGRhYWQ3ODgxLCAweDQwNTA4N2JmLCAweDIyZGZiMWFhLCAweDYwYjRjNDEyLCAweDEwYmNiZWIzLAotCTB4ZjgxNzIzZjYsIDB4ZmM3YmIwNjcsIDB4Yjk3ZDdhYTIsIDB4YTRhODRlZmEsIDB4MWEyNWIyZjEsIDB4ZWEyMGJlZGMsCi0JMHgyZWM5YmNmYSwgMHhiMzZlMTc5YSwgMHhkYmVlZmNlMiwgMHgzNWVlY2IxNCwgMHg3ZDg1ZTI2NCwgMHg4OWM5YmMzMCwKLQkweGY4OThiYzcyLCAweGJlM2YzYmQ4LCAweDMwM2Y5NjBmLCAweGQyODhiYmRmLCAweDg1ZjJkNzY3LCAweDMwN2Q0NWRlLAotCTB4N2Q4MTA3N2UsIDB4Zjg5NWIxNmYsIDB4MWU1ODYzNWQsIDB4MGIyMDE3ZTIsIDB4MzhiMjlmMjEsIDB4ZWQ0ZWIwNTEsCi0JMHgyOWUyOTYzYiwgMHgxNWMwMzQyNCwgMHg1M2FjMmY1OSwgMHg2NWRlNGU1YiwgMHgxMTZlMmNmOCwgMHhiZDYwYTM0MiwKLQkweDY0NDI3ZWYwLCAweDJiZDZkNWViLCAweDY5Mjg3MGUxLCAweDExZWNlOGI0LCAweDBhN2ZlMGE1LCAweDk3NGQzMzdlLAotCTB4Yjk3ZWJhMmQsIDB4OGZkZDFmM2YsIDB4NjllMjhkODksIDB4MGRkY2I3NTMsIDB4NGZjZDFiNWMsIDB4ZDc4NzM4ZmUsCi0JMHg1MmYzM2JhNiwgMHgwNTFmM2Y4MSwgMHgwNzJmYjMzZCwgMHgxNzNkMzY2OCwgMHg2MWNjOTA4MywgMHg3MWQyYjc4MCwKLQkweGU3NzZjNjYyLCAweDI1NmIzY2IxLCAweDY0N2Q0ZmNiLCAweDUxZTkwZmUwLCAweDFiY2VmZTFiLCAweDE0MmM2ZmRlLAotCTB4Zjc4NzVmNzMsIDB4N2RiOWNmNTcsIDB4NzFkMTc2M2YsIDB4NjliYzlhMTYsIDB4ZWY1M2U0NjYsIDB4NWNkN2Y0NTAsCi0JMHhjNGZmZDZjZSwgMHgyYjZiOGE5OCwgMHg1NTdiOWNhMiwgMHgwNDJlM2U3YywgMHhiZmQxYmVmMSwgMHhjZWFiZWQ5NywKLQkweDdkYTRiMGNjLCAweGM1YzhiNDVmLCAweGExZWM0ZmU0LCAweDEwNzc3YzM2LCAweGJiZTAyZGRlLCAweDEzODUyN2M3LAotCTB4YzlmMDJlZjgsIDB4Y2UwNDI5MWYsIDB4NmYxNDI5ZTUsIDB4MTQ5ZjFmMjAsIDB4YmY4ODJhYzgsIDB4NzMzNGQ5OTUsCi0JMHhiZjgwNmJjOSwgMHhhM2Q0MThjYywgMHg4YTI2OWI0YSwgMHgzZjVjMGVhNSwgMHgxNWVjYTNkMywgMHg5OWVmNzA3NSwKLQkweDE4Zjg2ZjNjLCAweGVlYmE2YmEwLCAweGZmMDFiNzc5LCAweDViODQxNGJiLCAweDQxZDE4M2FhLCAweGZhN2Y0YWNhLAotCTB4N2UzMDkxZDIsIDB4ODBkNzkyZWUsIDB4ZTBjNTQ2ZWYsIDB4MGE2NGQ5M2IsIDB4YTYzYzY3MmIsIDB4NGEyZjQwZWIsCi0JMHg0MTA3MTkyMSwgMHg1NzRjYTc4ZSwgMHg3NzJkODBjNiwgMHg5MzhkOGI5MywgMHhjZGU3MTI2OCwgMHgwYzZkZmQwNCwKLQkweDI0M2ZjN2NiLCAweDcxMjJiNzc4LCAweDI1NzVjNDZkLCAweDM2OWZkODViLCAweDdmYTBlZjgyLCAweDgwNGVjMTVhLAotCTB4ZTc4NjAxZTUsIDB4MzAxOTE1YzksIDB4OTYyMGYyN2UsIDB4ZjQyMWM4MjYsIDB4OGRkYTNhNTMsIDB4Y2RlYTFmNzcsCi0JMHhlNTA0ZGNjYiwgMHgxMzRiYjJmMiwgMHhmYjY5ZTM5MywgMHhjMGY0MWRhMywgMHhkMWQ1ZTU0YywgMHgxZDllYWFmZSwKLQkweDQzOWU4MDcyLCAweGY1NjcwZjA2LCAweDJjYjE1ZWI5LCAweDI3ZTVmOTgzLCAweDEwZmFhOWE0LCAweDc5MjVkN2FiLAotCTB4ZmM4MmM3NjMsIDB4ZGJlOTg3N2MsIDB4YjFiYzNiOWYsIDB4ODM3NzM3ZTAsIDB4YjgwZmRkMWMsIDB4ZmNhOWUzODYsCi0JMHgzNDA0OWRhMiwgMHhkNjdjYmZmMiwgMHhhNGRlZjg5NywgMHhmNzRiYTJmYywgMHg2OWM5ZTIxZCwgMHgwYTRiNDlmZCwKLQkweGUzZGM2MTBlLCAweDdlOGFkMjUyLCAweGJkNDFhNWM5LCAweDMxMGRlYmZmLCAweGU5NTVjN2QxLCAweDQ4YTJmY2JjLAotCTB4OTVjNzUxZmMsIDB4ZjYyZmRmZjUsIDB4ZDEzZWZlMjEsIDB4YmZlOTI1ZWEsIDB4ZjlmNDE0NWYsIDB4M2Q3OGFmZTYsCi0JMHhkOTI3N2UzMywgMHhjNzM4MmU2ZCwgMHgwNzdkODc0ZCwgMHhlNGMwNDllNCwgMHhlMDhmYWU5NywgMHhhNmRkZDNhNSwKLQkweDE1M2E2ZmRiLCAweDcxZTJlZjk2LCAweGI1NzJkNTc1LCAweDMyNTljZWZmLCAweGM2MTM5ZjdmLCAweGE5MmEzYTcxLAotCTB4NzlmMGEyNDAsIDB4YjQ1M2U1YWEsIDB4MWNiNDk2YTMsIDB4NzRhOGY4NDQsIDB4OWQ5MzgxMTEsIDB4NGE3MDM1ZjgsCi0JMHg5OTBkNmFhYSwgMHhmZWZmOGYyOCwgMHg0NzZiNDU5MSwgMHg3MjUxNGI1ZSwgMHgzZmIzZjM4OCwgMHhmMjk3YWQ2ZiwKLQkweDJmYzQxMjZmLCAweDNkYjdmMGQ3LCAweDUxZGY5YmIzLCAweDg5MzI2Y2NjLCAweGJmOTlkZWRjLCAweDRkMDRjYTc2LAotCTB4NmVlZmQ3OWUsIDB4MjFmODJmZWYsIDB4NjQ4ZTY3OTQsIDB4YTQ3YmRmZWQsIDB4MDcyYjc3ZjAsIDB4NWQxM2U0NDcsCi0JMHg1M2FlNWE0NywgMHhmMjFhYjc5MywgMHhhNTFmOWEwZSwgMHhlNTBkYmJjOSwgMHgxNGYyODYwOSwgMHhhYjNmYmU0MywKLQkweGE1MGNlMWRmLCAweGRhNDIxZTg5LCAweDIxZmQyOTFlLCAweDhlYjk1ZGZjLCAweDg4NWNkMGQ0LCAweGFjNDFiMDM4LAotCTB4ZGRmYzIxZjgsIDB4ZjY0Y2QyYzksIDB4NWFjYjE0NzcsIDB4YjM3MzBmMDQsIDB4ZjMyYmYwNjIsIDB4ODczMDdiYjAsCi0JMHgzODVlNGRhNywgMHhmYWQwZTAxMiwgMHg5MjgzYzgzYSwgMHhmYTBkYzE2NiwgMHgzM2I4MjNiZSwgMHhhNzY4Nzk4NCwKLQkweGQ5MDVkYTY4LCAweGUwOTJhZDNiLCAweDZiZDc2YzA5LCAweGM4NGRjM2ZmLCAweDNmMGYwZmNmLCAweGU0YWVmNTg5LAotCTB4ZWJhNjQ0ZWYsIDB4ZjM3YmUwZmQsIDB4N2M5ODc0YjMsIDB4NTNkZjYxMTcsIDB4ZWM3NzBjZTMsIDB4NzdmMjNmN2MsCi0JMHhjZWY3ZThlZCwgMHg5NDYxZWY1NCwgMHhhYWY3ODZhNywgMHg0NzFmMzBlNSwgMHgzODU0NWY4NCwgMHgwMmZjM2MzZSwKLQkweGYzZmM1ZGM2LCAweDQwZjc5NmE4LCAweGZiMmZiMDBkLCAweDk1ZTgwNTc0LCAweDFlOWU5NjFmLCAweGM0MTY3YTA3LAotCTB4ZTNmZDg0NmUsIDB4MmQ3MDIxNzEsIDB4MTE0ZjQ3ZWMsIDB4ZWUzMGI1ZGYsIDB4MGU0M2E1YmQsIDB4Mzk5NDlmYzIsCi0JMHg4MTZkYjUyZSwgMHgxZWMzMTA1MCwgMHgzZmYwOGY1ZCwgMHgwMDFiNmNlZSwgMHhkYWU4OTI3ZiwgMHg0Zjk2MWFkOCwKLQkweDEwMDhjMzZjLCAweGZkMzc2MjZiLCAweDM5ZmI0Y2QwLCAweDgwNmRhMDNlLCAweGM1NDdlNjg5LCAweDQzZTU2NjFlLAotCTB4ZmU0MGI2ZGEsIDB4YjBkZmQ4Y2UsIDB4MDM2ZDUxZjIsIDB4MWQxYzM3NDQsIDB4ZGI3ZjExMWEsIDB4M2VmOWQxZGMsCi0JMHgxYmM5OTYyZCwgMHgwNjQzN2U3NSwgMHg0MTYzNTM3YiwgMHhmYjYxMmE4ZiwgMHhiNDg3M2MwZSwgMHhiNzNhYjk1MiwKLQkweDZkOGVkY2U4LCAweGZmNzMxZTE0LCAweDZlZjI4ZWQ1LCAweDNmZWRjNzViLCAweDNmYjFmYTY2LCAweDkyYTBmYzE3LAotCTB4NWY3MWJjMzksIDB4NDY2ZWY5NDQsIDB4ZjYxNTIxYmQsIDB4M2UwOGY4YzIsIDB4MGFhZDY5OWQsIDB4MmEyMzFiZWUsCi0JMHg5MDVlODI3NiwgMHhlZTI0NzczYywgMHhlZjRlOWQxYiwgMHg5MTcxZDhkYSwgMHg5YTA0OGJmNCwgMHg4ZGFjNzlkMiwKLQkweDJlZjkzMzc1LCAweDViM2RmMDlhLCAweGQ0NGU4M2YyLCAweGYxZTUxZTlmLCAweDIxZGYyOWJhLCAweDVlMzgzODdkLAotCTB4OGNmNWYyYzYsIDB4YTFlNzY1OGQsIDB4ZDg0ZGQ3NDQsIDB4YWY1Y2RkY2YsIDB4ZDgxZjU5YWQsIDB4ZmZmMGEzNmUsCi0JMHhkZTBlN2E5MywgMHgzOWU0ZjRjOCwgMHhjNGVlNTQ3NSwgMHgzNzgxN2Y4MiwgMHgxY2M5ZTQxNSwgMHg4YzhmMDdiMCwKLQkweGJmYmQ1NWU0LCAweDFkZTY4MzI2LCAweGNkNThmMzkxLCAweDM2YWE2ZjRjLCAweDFkNGQ3ODJlLCAweDU1ZTU1NzJiLAotCTB4YWY2YjNhNGQsIDB4NTVjOTViZWUsIDB4OGZjOTNlMGMsIDB4ZDYxNWJiNWUsIDB4ZmYzMzM3NjEsIDB4ODZiM2M1ODEsCi0JMHg3YTgxNWQ2ZSwgMHg1ZjM4NmRjMCwgMHhjMmE2ZjVlMiwgMHhlMTU0ZmNiOSwgMHhhM2U4MTM0MCwgMHgwZGE2N2UyYSwKLQkweGViODJkZWY2LCAweDJhMzhmN2UxLCAweGQ3ZjFkNDllLCAweDE0MmY3NWYyLCAweGY2MDExZWE5LCAweGUxMGZiNzc0LAotCTB4ZDE4YWY1NDksIDB4ZTk5ZDcyZWMsIDB4NWFlOTZiMTUsIDB4N2MyYTFmMDEsIDB4MWM2ZGI5ODksIDB4MDQ1ZmZmN2MsCi0JMHgwY2ZmYTVhNywgMHg3ZWRkZmQzOCwgMHhiYzdiZDNkYywgMHhmZDAzNTljNywgMHhhZDNmMmU5NywgMHhlMWMzOGY3ZiwKLQkweDkyMTBiOGZlLCAweGYxMzUzMzkyLCAweDM4NzdlODUzLCAweGYyZWFkZTc3LCAweDczNTYyMmZkLCAweGMxZjczNWJmLAotCTB4ZDUzZmQ0NTIsIDB4ZTVmZmQ4ZjUsIDB4OTE3NzY5YTUsIDB4ZDQ2OWZjOWUsIDB4YzlmZjhmMGYsIDB4MDJlYzAxYmEsCi0JMHhjYTIwZTVjNywgMHgyNjNmZTNlMywgMHgzOGU0MmVmOCwgMHhlYWE1Njc4ZiwgMHg1YWZmNTliNywgMHg2ZGNlMTQ3YywKLQkweDIyMmIxMWZmLCAweDdhNTRkODdkLCAweGU2Nzc3MjEwLCAweGE3YWVmODUxLCAweDNiYmMzOWRiLCAweGQ0NjRmZDU3LAotCTB4Yzc4NmJhZmQsIDB4ZTA3OWFkYTEsIDB4ZDFhZjdjM2EsIDB4M2NmMGRhNDUsIDB4MjgyNmNmZWUsIDB4NjdjYmJiM2YsCi0JMHg0YTcyYzUwZiwgMHhjODFiN2UyNywgMHg4YzE4YzI4OSwgMHg0MTkzNWZjNywgMHhjZDQ5N2RmMCwgMHgwZTU4MTFlYywKLQkweGM3ZjQ1OGU3LCAweDcxYzU2ZDk5LCAweDNhMzI2NjZhLCAweDQ3OGMyOWFjLCAweDVkYzgyMTdiLCAweDc0NmY1YjgwLAotCTB4ZWNjNTU0OTQsIDB4MWRlY2M0MWYsIDB4N2YxZmJkYWQsIDB4ZjlmOTk2MmYsIDB4NzZkYjMzZGIsIDB4ZWQ3YTBmYmYsCi0JMHhiNWVhMWIwNiwgMHg1N2JjNDI4MCwgMHhmMWM2NGVhOSwgMHg4ZmVjM2QyOCwgMHhjZDk3ZmRjNSwgMHhhOTYzZTE2MywKLQkweDVjNzE4NzgxLCAweGQ2MDNkYTBmLCAweDUxZjNiZDNhLCAweGFlY2NmZGNlLCAweGRiMzdmY2MwLCAweDE4ZWIzYWM4LAotCTB4NTU5MGU2MzgsIDB4N2NmOTJmMjgsIDB4ZTgxM2Y1NDgsIDB4ZWI4ZjMxNTcsIDB4NWMxNTFmODksIDB4NzIxZTgyNzAsCi0JMHgxZWRiYjYzNCwgMHhmOWYzODVlMCwgMHgxN2NhYzIwMiwgMHgwMTNmNjQzYywgMHgwZjA1YWJlNywgMHg2NGI3NzhiMSwKLQkweGZkNWU0ZGRkLCAweDZiOWQwOTNkLCAweGY5ZDNkODEyLCAweDA5ZDg2ZDRmLCAweDNiNDFmMDcwLCAweDFmZmZmNDE3LAotCTB4ZTQxZjc4NGUsIDB4YzNiZDg4N2IsIDB4N2VkYTdlMjUsIDB4NDdmZGE0NzgsIDB4OTc2MGY3YzAsIDB4NDlmY2Q5MTcsCi0JMHgxNjg5NWRhNSwgMHg1OGEzZjRlNywgMHhmZDUzOTdlZSwgMHg5ZTNiNTc4NCwgMHg1ZmIxOGUzYSwgMHgwMzZjOGU3YSwKLQkweDBmNzBhMzdlLCAweGYwYTgzYmMxLCAweDU5ZGZkOGNmLCAweDQxMzdjZTMwLCAweDQ2YzJmZjBlLCAweDhhNTZlN2NiLAotCTB4M2MyOTJiNzEsIDB4Yjg5ZGNiN2QsIDB4ZjNiZTc1NWUsIDB4YTIzN2MzOTIsIDB4N2ZkMGMyOWQsIDB4MGIyY2JkYmIsCi0JMHg3OWVhZTdlYywgMHgzOWE0M2M4OCwgMHhlNDVjMjFmZiwgMHhmODg0NWU0OCwgMHg1NzNjNjEwMSwgMHhjZmNlZjhmNSwKLQkweDI4NzNjNmNkLCAweDY4YjM3ZjIxLCAweDJiYmY3NWViLCAweGZjYzMwNDUwLCAweDgyMjk1ZDM5LCAweGUzZTZmMDE5LAotCTB4MWNiMmZlZjcsIDB4ZWI3MjBiOWUsIDB4NTBlYjAyZmYsIDB4ODAwMDU4OWUsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsCi0JMHgwMDAwMDAwMCwgMHg3ZGM1ZmYwMCwgMHhkNTU0N2MwYiwgMHg3M2I5Zjg5OSwgMHgzMzMyYmNlZiwgMHg0OTMyNGNjOSwKLQkweDliOGYyMTI2LCAweDgwNDAyMTA3LCAweDUyMDI0YzQ5LCAweDE4Nzg0MzFmLCAweGE0MDc2YjM1LCAweDQzOGI1YjE2LAotCTB4OTIxMTIzYzIsIDB4YjE3NWI2ODksIDB4NTEwMGNiNjUsIDB4OGQwNDIyMDgsIDB4NDEzODBhYmMsIDB4YmI2YmJhNTAsCi0JMHgwNjAyMjJjMSwgMHhiNmEyZDExYSwgMHg2ZWI0MmZlYSwgMHhmZGZlZWQ1NywgMHg1OGY4ODg0NSwgMHgxNjU0NDY0OSwKLQkweGVmZmZhZDViLCAweDk5YjljZWZiLCAweDUxNDQ5M2I5LCAweDY3ZjRkZGJiLCAweDczOWVlNzJmLCAweDc3Y2VmOWNmLAotCTB4Y2VmOWY3YmUsIDB4ZTk5YTE2MTksIDB4ZjQ2NjJkZWIsIDB4ZmMzZTc5ZjcsIDB4MzM1NzdmODcsIDB4MzAzNGU4OTYsCi0JMHg3Y2Q4Y2E5NiwgMHg5Njc3MzU5OSwgMHhlYjQ3ZGY0NCwgMHg2ZDY3YWEyNSwgMHgzNDk2N2Q1YiwgMHgwYmJjMDJjNiwKLQkweDY2ZjUzNmU2LCAweDYwN2RhMWZiLCAweDY5NGRmOWI5LCAweGViODhiYzIyLCAweDYzMzBiMTlmLCAweGI1NmQ4YzE1LAotCTB4OTkzNTkwYjIsIDB4ZjQxMjZkYjEsIDB4YmJjZjBlNTMsIDB4NzkzNWUxNmMsIDB4MjM1ODBkOGMsIDB4YzYwMmIwOGYsCi0JMHg1OWFmYzc4MiwgMHgxYmZiZWY4MCwgMHg0ZDA2NTQxMiwgMHgwODU4OTg3NiwgMHg4ZWUzYTFjYiwgMHg1NzZjM2VmMCwKLQkweDY0YzQ1YmQ0LCAweDdjMTgwN2E4LCAweDI0YmU3ODZlLCAweDBkMjQ4NDc3LCAweDVlOWFjNjA4LCAweDg3YWNmNzkyLAotCTB4YWU0N2ZkNzYsIDB4YjJhY2ZkZTUsIDB4NDFjYTBjYTksIDB4YjhjMTM2YTgsIDB4NTc1ZmQwYzEsIDB4YTRjNjQ0YjIsCi0JMHhmZjFhMTYzOSwgMHg2YzI5MjFjYywgMHg2NmMzZmFjNiwgMHg4NWUwZDNlNiwgMHhiZmUxZmFmZiwgMHgyZjE4MzJmYSwKLQkweDI3MTkwODZjLCAweDEwMmIxM2MxLCAweDgyMzZjMzhlLCAweDQwZGE2NjAzLCAweDgxM2Y3ZGUzLCAweDliZjE4N2FkLAotCTB4MDBjZjkyMGMsIDB4OGRiNzRkZjUsIDB4ZjBlMWFmMGIsIDB4NjdlMDE4NTgsIDB4YzlhZDAwOTksIDB4ZTgyNDVhYzAsCi0JMHhiNWUwNTMyZiwgMHhlOGJhNzBjOSwgMHhhNzVlMTI4ZSwgMHhmOGE1YmI0MCwgMHgzZGRhOTUwZiwgMHhjYjljMDEyYiwKLQkweDY0N2ExYjJjLCAweGUxMzk5MzgwLCAweDBkYmZhODNmLCAweGViYTJmM2ViLCAweGJmZTFiNGQwLCAweDM0NzljMzNmLAotCTB4MmRiODA0MWQsIDB4M2Q5N2I4NTEsIDB4NmRjNzlmYTYsIDB4MjdhZDE0Y2MsIDB4N2ViNDQzYjgsIDB4MmY4ZTcyYjYsCi0JMHg0Nzg1ODMzNiwgMHg1MTBlYmMwMywgMHg4NGY3NTViNiwgMHhmMmM3YzQ2NSwgMHg2NWNjZWNlOSwgMHhlZjQ0ZjRkMCwKLQkweGViMWRiZjJjLCAweDNjMmQ1OTNiLCAweDVmMzBlZjgzLCAweGRhOWVlMDE4LCAweDI4Y2NmMWQ1LCAweGVlYWFlZjY4LAotCTB4MDZlOWM2YzksIDB4YTBiMWZmOTcsIDB4M2FlOGIyZWYsIDB4ZGU1ZTcwNmIsIDB4NzY2NjU5YjUsIDB4MDNiZThmMWEsCi0JMHhlYzA3N2M1MCwgMHg5Y2VjNmVkNCwgMHhkNWNmYjEwOSwgMHg0MWFhNWRmNCwgMHhlYmM3MTViZSwgMHg4ODE5NTdjNSwKLQkweDA0ODY1ZjFjLCAweGM4Njk2Y2UzLCAweGRhYmFlMDM3LCAweGIwMDU3ODE0LCAweGIzMWI2YTJlLCAweGQ5ZTExNTY3LAotCTB4YzFjNzM0NTcsIDB4ZWM4OTgzZDgsIDB4ZDNlMTNmNTYsIDB4ZmU4N2U5NWIsIDB4MmQ1Njc1MWUsIDB4ZTk3ZjQyNzQsCi0JMHg5ZDViYWFhZSwgMHhiZjFjN2NhOSwgMHgwMjlmYTcwMywgMHg2YmE1MGQ0MCwgMHg0N2UxYTllZCwgMHhkMDVlOTc2YiwKLQkweDFmNmNkYTVjLCAweGM0ZGI5ZGI5LCAweDllZDkxNmYxLCAweGYwODNkZTE0LCAweDE3OTUxMjI4LCAweGIxZDhkZWZmLAotCTB4ODg1M2UwOWUsIDB4OTVkOGVlNmUsIDB4ZWJmODQ2MTcsIDB4ZTkwOTliNTksIDB4OWIwYjE5N2MsIDB4NWIxNzhlOTAsCi0JMHhlODExMjg1OCwgMHg0YjM0MzE2MiwgMHg2ZDkyZTc4MiwgMHhhY2M2YTY2NiwgMHg1ZjU4NDM1ZiwgMHhhZTFjZWQ2NiwKLQkweGQzZjc0YTY1LCAweDRkZDIyMjUyLCAweDc0YjNmNTBmLCAweGIyZGRiZWJmLCAweDAxZGJhYzE5LCAweGQ2MTY4ZGY1LAotCTB4YTc2N2MzNmQsIDB4NDU4OWJlYmUsIDB4ZTFlMDhlMDgsIDB4ZmViYWNkY2YsIDB4YzNhZDFiNTksIDB4Yzg2MzJiNzYsCi0JMHhiZTY1NDlhNywgMHhmZTAxYmJiYywgMHhlZjQ2MGJjOCwgMHhiN2NmYTAxZSwgMHg3ODY4YmFjNCwgMHgzNTU2NzY0OCwKLQkweDY0MTM5ZTIwLCAweGIyMzNjZDAzLCAweDAzZGUxNmNhLCAweGIwMzNlY2YzLCAweDRkZTc1YzdhLCAweDFjZWI3NjJlLAotCTB4NjRhZmY2NzgsIDB4YTEyMzQyYmUsIDB4NzdhZTIyNjMsIDB4MWZkNzNlM2MsIDB4N2QyM2Q2YjUsIDB4MTNmOTQxNmMsCi0JMHgzODM3M2Y0MywgMHg1ZWU3ODQ4ZCwgMHhiZTQ3YWIxMywgMHhmZDBkNWNhOSwgMHhhNmE1YzhjNSwgMHhmYzAxZWM5YiwKLQkweDk3MjY5NzZlLCAweGM0NmY5ZDYwLCAweGE4NmI2Njc1LCAweDllOTFlZDhjLCAweDRmZTMyZTEyLCAweDgzYmRiYmVkLAotCTB4YTdmMzM3ZWQsIDB4NGI3YmY5YzIsIDB4YWUwNzQyNDMsIDB4MGNlZTk0NTMsIDB4YzRhZWU4OGMsIDB4ZjdjMDBhNmYsCi0JMHg1ODNjODU0NywgMHgzOGZkZjk2MCwgMHg0MGEzZjdhNCwgMHhhMWY3YzgwOCwgMHgwYjk3MmI0ZSwgMHg3MmZlNzM4YSwKLQkweGE3N2QxZjI4LCAweDQ1NWViYmM0LCAweGUyNzJlMGZhLCAweGQ4MTJmN2U4LCAweGY5ZjIxODZhLCAweGRlZjVmZWY3LAotCTB4ZmNmZWExOTcsIDB4MGNkNTI2M2IsIDB4NDY5MTBiZjUsIDB4NGE4ZjNkNjAsIDB4ODVlMzg3Y2MsIDB4Zjc4NzMwOWUsCi0JMHhjMDY1YmJjMSwgMHhiMmNmMDhiNiwgMHgyOGMyMTNlMywgMHgwMjk5MGVkZiwgMHgzOGUxMTdkYiwgMHhmYmJkMWI4ZiwKLQkweDg5NjViYmUwLCAweDQyM2M1ZmUxLCAweGEwNWUxOWY1LCAweDkxOTRmNjQ0LCAweDg4ZTg2MWQzLCAweDEwOWY3ZjhkLAotCTB4Yjk1ZmI3ZmUsIDB4MWJkZDNlYjEsIDB4YWM3YmY2ODIsIDB4MDdjODEzODEsIDB4MDkzNTY2OTksIDB4OTdiZjY1ZmIsCi0JMHhiYmE3MWYxOSwgMHgzYmY4MDVjOCwgMHg4MjRhZjM4ZCwgMHgzODQ5NTQyNywgMHhmYTgzOTc0ZSwgMHg1OGNhZmUwMSwKLQkweDY5OWNmZDA0LCAweDgwZjlhNzRkLCAweDM4ZTFmNGRjLCAweGY3OWEzNjY3LCAweDMyZGNkY2EwLCAweGVkNDRhZTM4LAotCTB4YjNmZDFiNGYsIDB4ZmE3Y2EwMzIsIDB4MmFlZjUyODksIDB4OWJmMDFhYTgsIDB4N2Y0MDRkYmEsIDB4NWY0YjRkYzEsCi0JMHhlYTE3YTA2NCwgMHhjNDZlZWEwYywgMHhhMzZlM2IwZiwgMHgxMWViNjg3OSwgMHgwNmE0YjhkYywgMHhhZGI3ODNlYiwKLQkweGRhZTUwMWI4LCAweDcyODlmYzQ4LCAweGJiYzhjNTlhLCAweDQxYzkxNjdlLCAweDlmNTFkZmZhLCAweGZhOGRkOWRmLAotCTB4NTdhYzZiYTAsIDB4MmMwZjVhYTYsIDB4OTM4N2QwM2UsIDB4NzIzM2VkYjcsIDB4MTk4ZTQ2ZmMsIDB4YjUyZjRmODksCi0JMHhhNTBiYTQ3ZiwgMHgxYzBmZWI5MiwgMHg5NGYyMDgyNywgMHhmMjQyZmM2OSwgMHgwZjJjYTYzNCwgMHgxOGViZTY1NywKLQkweGZjNGU5YTNjLCAweGRiM2Y1ZjFmLCAweGY5MDhmODExLCAweGZmZmVlOWE3LCAweDhhYjk2Mzc5LCAweDllNDg0NWUzLAotCTB4ZTI1NGI2YjEsIDB4ZGJiYjgwMzMsIDB4NmRmN2RmMDIsIDB4ZTU1ZjEwNzcsIDB4ZjcwZjUwYWUsIDB4NzQxZWJhZTIsCi0JMHgzMzVkM2NkMSwgMHhjYjAzYjI3YywgMHgzY2E4ZjMzYiwgMHgxYzZkYzg1NSwgMHhlMmM2ZjUxNiwgMHhjYWY0OGMyOSwKLQkweDU4YjU5OTYyLCAweGQxN2RlOGNhLCAweGY2N2Y2ODc2LCAweGNmNWE2Yzg5LCAweGNlYjY2NmM1LCAweDM2Y2U3YzAyLAotCTB4ZGIzZmZhNzAsIDB4ZjAwYTcyMDEsIDB4MjVlZTY3NTMsIDB4NGRmZWNiMzksIDB4YjUxOGZiNjIsIDB4Y2I3NmMxNmIsCi0JMHhiMjhjOTA2MCwgMHhiOTQzNzhhMSwgMHgzODViYzNhNSwgMHg3ZmZhMGNhNiwgMHhlOTA3Njc2YSwgMHg4YTcyMDYwMSwKLQkweDlhMDVkOGM1LCAweGE0Zjk0MzFjLCAweGNkZmQ5ZWZiLCAweDQ4NjNjN2FjLCAweGM3YzRiNzkzLCAweGQ5ZjRhOTMwLAotCTB4MjhmMmEyMTMsIDB4NzJjZmU5ZDksIDB4MzBhMTYwNTUsIDB4NTY3N2YxMWQsIDB4MDRlOWRjMGUsIDB4ODU4NGI2ZjksCi0JMHhiMDM2M2U0OCwgMHhlMzZhN2E2ZSwgMHg3MmU1YmM4MSwgMHgyZWU1YzJkNywgMHg0MTJlMTMzZSwgMHgzYWM2ZGVmZSwKLQkweGEyMzY2ZTQ5LCAweGVlNGUxYTQ0LCAweDNiYjkwMGFlLCAweGNiYjk2NDcxLCAweGUyMjk3MzU4LCAweGRkOGI3ODM1LAotCTB4MjIxZTc4OGIsIDB4ZDc3Yzg1N2YsIDB4YzRkZDMxZDYsIDB4MTVkNGYwZTUsIDB4NDQ5NTk5NjEsIDB4ZTg5YTkwZjEsCi0JMHgxMTVhOTY5YiwgMHg1N2MxYWJkNSwgMHgxMjc1MTYyZCwgMHgxZjJjZmQ5NiwgMHhkYTYzYWRlNSwgMHg3ZDQxYTdiZiwKLQkweDk0M2U2MTUwLCAweGU2MWViNjliLCAweGJiZjc4MGViLCAweGYzZjVmZDg0LCAweGYxZmE5NTM0LCAweDE4NWQzODk4LAotCTB4ODUyYjNmMTUsIDB4OWVhYWNhZmEsIDB4NDlmMjAzNmUsIDB4YmNhMjczMmEsIDB4ZmVmMGY0NzcsIDB4YmJlMDM5NzcsCi0JMHhjYjhlZmMzMiwgMHgyZGVmYzFjZCwgMHhlNjIxMjVhYywgMHg1NmEzYWFmYiwgMHg0NzBiYTNhMiwgMHhlOTMzNjExYywKLQkweDBiYWU0MGMzLCAweGIzZmI0YmZhLCAweGZlYTRlYzk5LCAweGYzOTIwZWEzLCAweGFmMzY0NmZkLCAweGQxYmJkYTEzLAotCTB4YmNmNWEyMWUsIDB4YWVmYmZhODcsIDB4MjE5ZThmMmIsIDB4MjE4YTM1NTYsIDB4OGRkNzRhZWQsIDB4ZWNkNjU2NDIsCi0JMHg5ZWJjYzY4MywgMHgxZWRmNDg5YiwgMHhjN2M4YWIzMCwgMHg3N2JkNWMxNywgMHg2M2M2MTk2MiwgMHhlZGJmMjcyOCwKLQkweGYwNWRhOTUyLCAweDlmZDJmNGUwLCAweGRmYTBmYmMyLCAweDBkZDhlNWVlLCAweDk4YmQyMjk0LCAweDY0ZGQxZmU1LAotCTB4MjU5Yjc1ODEsIDB4MDVkYzg4YWYsIDB4ZGI2NjM2NzAsIDB4Njc4NzI4OWQsIDB4OWZkN2ZlZTQsIDB4YmJmMjg2NmUsCi0JMHg4Y2NjOGQwNywgMHhmYTZmYmVlYiwgMHhiMjNmOTYzYywgMHgxYjA4Njg5YywgMHhkMGM2Zjc0ZiwgMHhmYWZkZDJlYiwKLQkweGJlYTc2MzcyLCAweDJmYWMzYzFjLCAweGI4NzJlMWRmLCAweGRlMjc4ZWNmLCAweGY0MGU3ZWY0LCAweGJmMzczNjY0LAotCTB4OWFmMDAxZDMsIDB4ZGM5MzMyOWYsIDB4ZjgxNWRlYmMsIDB4MjZlN2E0NjcsIDB4ZTIyNGU0NDMsIDB4ZmVmYjljZDEsCi0JMHg3M2FlMDBjNCwgMHgzZTEyMDdkNywgMHgzZDI2NDBjZCwgMHhjOGJmMWMyNSwgMHgwYmFjMTc1NywgMHhkOGMzOWQ3MiwKLQkweDg1N2I1MWViLCAweDQ3ODQwYzU5LCAweDUxM2QwNmIwLCAweDIwZTQxMGY5LCAweGRlZjk1ZjAxLCAweGJmZTYxYTdkLAotCTB4NzM4MjRlNzgsIDB4ZDVmMWJkMzUsIDB4YmRhMjU0NTQsIDB4ZTBiMjMwNDIsIDB4NDVkZjZiYjYsIDB4MzVkYTFlYmIsCi0JMHgwZDk4OWM5MCwgMHhmYWFlMDBlZCwgMHgyZjZlNWM2ZCwgMHhjODg5M2Q2MywgMHhkNzYwNGQwZiwgMHg3ZjA5NjA1OCwKLQkweGIxZjRlMmU3LCAweGQ5NTIyNWI0LCAweDRmNmNmZjBkLCAweDcwOGIxZWFlLCAweDdlMjk5ZjJhLCAweGQ4YjVmZjVjLAotCTB4ZjYxZDhjNmYsIDB4MWRmYjhiOTAsIDB4ZGI1YmY3NGIsIDB4YTFmODYyZmEsIDB4MmJhNWQzYjEsIDB4YjQ2NzBmMDcsCi0JMHg1ZGUyYzVmNSwgMHgyNTUzM2ZmMCwgMHhiNmRlZDYyNSwgMHhiOTBmMDIxYiwgMHg3YjBmOTE1MiwgMHhmYzYwZDM0ZCwKLQkweDg4ZmIzZmFiLCAweGU1OTJmN2Y0LCAweDBhOWQ5MGNmLCAweGVkYzA1OGYzLCAweDcyOGFhYjM2LCAweDRmNWRjOTc1LAotCTB4MmZjZDdiZDMsIDB4Mjc2ZDliMzgsIDB4ZWQ5OWUwYmYsIDB4OTk3NjVlNjYsIDB4MTc3NjdjYTgsIDB4NzQ5NjViZjcsCi0JMHhhNzljNjE0YSwgMHhjYTYyZTczNCwgMHhiYmE3OTQzNCwgMHgxYjMzNGU4YywgMHgzYzc4ZDc4YSwgMHgzZmYzYmRiZSwKLQkweGY1NGMxOTEzLCAweGZhM2E0MjZkLCAweDFiYjcxMjEzLCAweDY0ODljZDljLCAweDg5Y2RhYTlmLCAweGI3MDUxZjY4LAotCTB4Y2EyZWYzNWQsIDB4NjRiYjI1YTksIDB4NzYzNWVhMmYsIDB4Y2QxZGUxY2MsIDB4ZWM3MzNjYjAsIDB4ZjNmNjNiMjIsCi0JMHg4MDM0Y2E2MSwgMHg0Y2Y3N2RhMywgMHg2NWVmNGNhNywgMHg0OGY5MTg3ZiwgMHgwZDVjZjVmMSwgMHg5M2RkOTVlZiwKLQkweDY3YjdlNDU1LCAweDk3Zjg3MTc3LCAweDIwOGYyY2I4LCAweDk5ZmQ1ZDFkLCAweDYyYjI3NjRjLCAweGNmYjQwMTYwLAotCTB4YjFiZTRkZGEsIDB4Y2VlYWI3YzgsIDB4N2Q3MGIzN2QsIDB4Njk5ZDllZGUsIDB4OTRiZmY2YTAsIDB4ZTJmMTEzOTgsCi0JMHhlZjg2OWU1YSwgMHgxZjhhNDg5NywgMHg1YjdlYjRmOSwgMHg3ZWFjNGQ0MywgMHgxMzI1ZDViZSwgMHg1ZGNiNGRiZiwKLQkweDI3NmJkNjkxLCAweGY1MDliYWJlLCAweGUwMmVlMzU1LCAweGNlN2YxYzIzLCAweGQ5YmE3ZmViLCAweDY5MmJlNTFkLAotCTB4YTYxYmI2Y2UsIDB4MWE4ZmZmNjIsIDB4ODM3N2M4YmQsIDB4M2ZlNzc3N2EsIDB4NWZlMTdkMTEsIDB4NmRjYTI1NzcsCi0JMHhjYTZmYWY4ZSwgMHhjNjliNjY2NywgMHgyODQ1Y2QyNywgMHg2ZWFjOTczZiwgMHg2MzBlNzIyZSwgMHhjOWYyMGZjZiwKLQkweDZmOTdjZTRlLCAweGI3ZWUyNGI5LCAweGVjZWIyNTY2LCAweDAwZmM5MWRkLCAweDg3YzFiMTdiLCAweDk5NzhiN2Y4LAotCTB4ZDMzYzFmNmYsIDB4N2Y0MzBkYzEsIDB4YTE1OTIxMmYsIDB4MTM2NDg0ZmEsIDB4ZTRmOTQ5ZTEsIDB4YTkyZmZkOGUsCi0JMHgzZTA3MTc2OCwgMHg2NWNjZmE0NCwgMHgyN2Q0NTJiZSwgMHg5NTU5YzQ2YSwgMHhlYzJiNzQ4NCwgMHhkYjkzYjYwNSwKLQkweDkwN2Y2MDgxLCAweDk1MjViNWJkLCAweGM2M2ViMjNkLCAweGZlODkzM2ZmLCAweDhhN2M0ZTQwLCAweGI1ZmZhMjcyLAotCTB4N2UyMjRmNGYsIDB4OWZkZTcyOWIsIDB4NzgzYWZhODgsIDB4MGE5MzIzZjEsIDB4NDk3N2I1ZjMsIDB4NWVlZGJmMjQsCi0JMHgwOWJhNDMzZiwgMHgwYjY2Y2Q3NiwgMHgzNzcyYTI0YiwgMHgyMTdhZTVlOCwgMHgyNjM3NWU3ZSwgMHg3NTFjYjkxYiwKLQkweGFiOWZhODQ3LCAweGI3M2YzODUyLCAweGQzZDExOGJiLCAweDY0MDllNThlLCAweDg3NzBlZTk3LCAweDU3ZjQwOGFkLAotCTB4MjlmNjViZTUsIDB4ZTc1ODc1NjgsIDB4Njc1ZjBiMDYsIDB4ZmI1ZmRlY2IsIDB4YjBmM2E0NjQsIDB4NjU4ZDFjZTQsCi0JMHg0MGM3ZjM5NSwgMHgwY2IwZmNmZCwgMHhiN2JiYmNlMywgMHg4M2U1NDQyMCwgMHhkNDMyYmNkMywgMHhiYzNlZjdkOSwKLQkweDc0ZjExZjJlLCAweGY2YzVlOGQ4LCAweDIyNmY2Zjc2LCAweGJkZGRlZmNlLCAweDdlNzExMjY3LCAweDlhNjU3YmY1LAotCTB4ODNmODdkNzcsIDB4NTEyNTQ1YjQsIDB4MjkxN2YxMzksIDB4NzY4YzkwNTAsIDB4YzdiMjViODIsIDB4Zjc3NzhiY2EsCi0JMHhkMGI2OTg3ZSwgMHhkMjUzZmRjZSwgMHhlM2MzZTU5NywgMHhhZDM1ZGQyNSwgMHhmYWJmYmYxOCwgMHhlZjJlYmUyYSwKLQkweDQ2MWNkMmZkLCAweDE1OWVmODM5LCAweGZjOGM1OWY0LCAweGY1YzFjZjdkLCAweGNkNjRkNGRiLCAweDQxY2NlOGNmLAotCTB4NTY1ODMzZmQsIDB4ZmM3MDFhYzYsIDB4ZmNmOTM5MWYsIDB4MWNjZWE2ZGQsIDB4OTZmZmNiZTQsIDB4YjZkY2ZkZjQsCi0JMHg5MDYxNjY0ZSwgMHgyNGViMGQ0YiwgMHhmZjk5MDYxNiwgMHhjYzllMmZkZSwgMHhlZWZmZjk0MSwgMHg2YTczMjdiZSwKLQkweGZmOGJlMDYzLCAweGQwY2U3YjRlLCAweDlhZjExM2M2LCAweGQ3OGRhNjVhLCAweGQ1ZTM4NTlkLCAweGEyNmZjZDdhLAotCTB4NjZlYjYxOWMsIDB4MjZmOTA2ZmEsIDB4ZGI2MzNmOWYsIDB4OGEzZTZkYjMsIDB4ZDcwMDBjYTcsIDB4ZGY2YTFkMjIsCi0JMHhmODI3ZDQwZCwgMHhjYzJlYjgyYywgMHg0ZTkwYzYxMiwgMHg2ZGRjOTc2ZCwgMHhiZTdjZmVjNiwgMHhkZmRhMzc0MiwKLQkweGZkNzFmN2RhLCAweDkyN2EwYWI3LCAweGE3ZTQ0YjBlLCAweDI0MjI0YWRhLCAweGZjYjZiZjlmLCAweDEzZDdlOGY3LAotCTB4NGM5OGQ5ZDYsIDB4NzI3MjNmZjIsIDB4MzBmYTIzMTQsIDB4NGQ0Y2RlMjEsIDB4NTVmNTA1NzYsIDB4NWY0ZTFhZGEsCi0JMHhjODFiMWY5MSwgMHgyNDI3NzAxZiwgMHgzZjYwNjQ0ZSwgMHg3NjNkMzI5OSwgMHgxNzU3NmY5NCwgMHg5MjE4YjQyNSwKLQkweDE4NGU3ZGYwLCAweDE2Njc2N2RiLCAweDJhYTE3N2QzLCAweDM0YTFmZjRlLCAweDBjOWU3MTQ2LCAweGZmMjEyY2Q2LAotCTB4OTdiNzI3MzIsIDB4ZTczMGE2YjMsIDB4NGZlZTI4N2EsIDB4ODc4Yzc2ZTYsIDB4MDVjOWI3NzksIDB4YzYxMmZlYjQsCi0JMHg2OGJjMzQyNSwgMHgwOGU5MDFmYSwgMHg5MjdiZTVlNSwgMHhlYTQ4ZTg4NSwgMHg5NDdlYzg5MiwgMHhiMWYzOWQwZCwKLQkweGVhZTg5MWRmLCAweDhhZDc1YzZlLCAweDk2MGQ1ZDI4LCAweGI1NzQ0MWZmLCAweDA4NmYxYjQ5LCAweGEyNTQwNTVkLAotCTB4Nzg2NThmMmIsIDB4ZjYyNTUyYmEsIDB4OTBiM2RhOTUsIDB4NzRhZmZkMWYsIDB4NDI0ZGFmODEsIDB4NmM3ZTQ0ZmUsCi0JMHg0MDE2ZjFlMSwgMHg0NmI3Y2UxOSwgMHhiMTYzNTdmNCwgMHg0N2E4Y2I3NywgMHg2M2Y3YzZiYywgMHhjMTNiOGZlMywKLQkweDI1ZmY0NWVlLCAweDc4N2NlZDAzLCAweDQwYjM1YThlLCAweDNkNjM3NWE1LCAweGRhZWZlOGJkLCAweDVmNDg1YjI2LAotCTB4YzllODZiZGUsIDB4N2QyNjNiNDMsIDB4YTQwMWYzNWMsIDB4MjVmOWY0OGYsIDB4NmZjODZiNjUsIDB4NWVhMTcyY2IsCi0JMHg3MTRiNWQ0MCwgMHhmZGQzZTU4NywgMHg3ZTgwOGVkYywgMHg5YjY2OGU5MSwgMHhiYTZiM2ZjOCwgMHhkYjlmOWE2YiwKLQkweDJmYzRkNTExLCAweDE1NTYwZGMxLCAweGFlZjRlMGY1LCAweGY3NjQ1NWJjLCAweDMzNWU2MGFmLCAweGY2Yzc3MWQxLAotCTB4OWMyZjE4YzUsIDB4YWNhMmY3NmIsIDB4MjEzYzYyYjMsIDB4ZTdhZmU3MDUsIDB4OTNhOTU2YmIsIDB4YjVkMGYxZWMsCi0JMHg1ZDcyOGJjYywgMHhiYmI2NDc4YiwgMHgxNGZmNzc3YSwgMHgwOTQzN2ZmNSwgMHhmMTgzZjdmOSwgMHg3YTQ2NDJjOSwKLQkweGNiZTVkZGEzLCAweDFlYmMwNjQ4LCAweGE3OGYxYmZhLCAweDE5NDI5N2I1LCAweGY1ODk0ZjllLCAweGNiZWQ5ZjZjLAotCTB4NzZiOTQxNzAsIDB4ZGVmMDk1ODMsIDB4MDdlYmMxZGUsIDB4NDlhMDgwMWMsIDB4ZmVhNGE3MTQsIDB4ZWI4NTkyNTgsCi0JMHg4MWYyYTFhMSwgMHg1MzY5OWJlMiwgMHgwZGI3ZjY5OCwgMHhiOTVhOTljYiwgMHg0MWQ5MmI2ZCwgMHhlN2I3ZmYxYSwKLQkweDI1MWM3ODcxLCAweGM4YjQzY2ZlLCAweGYxZGNkZjJmLCAweDQ3ZjAwMjdjLCAweGE2OGRjNjFhLCAweGI0MjExN2QyLAotCTB4YzkyZTI5ZjcsIDB4N2NiNjE0Y2IsIDB4NjQ4MDAwZDAsIDB4ZWIyN2YxNjIsIDB4NWIxMTVjNjcsIDB4ZGZhM2VkZTYsCi0JMHg3YWM3YWY1YiwgMHhmNTgzYmZkMCwgMHg2NWU4MzYwOCwgMHgwMmIzZWNhZCwgMHhkMTFkNmIxYywgMHg2MGVjMDU3YSwKLQkweDdjNDk2MWNiLCAweDMzNzVlNGZmLCAweDkyZmU2MTBiLCAweDkzZjQzZjE4LCAweGFmYzYxZjU2LCAweDVlMzc0Y2FjLAotCTB4NWM0YTdjMmMsIDB4ZGZlODQ2ZmYsIDB4NzdlZDZhYWUsIDB4MDY4NGNmNTYsIDB4ZTU2OTk2MGYsIDB4YjJmOWQ3OGYsCi0JMHhiZWEzM2ZhMCwgMHhmOGE5NDIzZiwgMHg3OGRhMGIxZSwgMHg2MzM4M2RjZiwgMHhhOGFjODZmZCwgMHhjMmY2MDA3ZCwKLQkweDM0Y2YyODI3LCAweGViZWQ2MTNiLCAweDYwOTM2ZDM1LCAweDQzZjM5YjJjLCAweDRkNWZlYTEzLCAweDEyZGQwN2RmLAotCTB4ZmNmMTIxZDksIDB4YmU5MTRiNmEsIDB4MDg1ZDdkOTksIDB4Y2VhNTc1ZjYsIDB4NzBhNWI2YmUsIDB4YjIxNjdhZmIsCi0JMHgyNDI1ZjgyNCwgMHhmYzJiODNiZiwgMHhiMDViZWQwYywgMHhiZWIwOTI0YiwgMHhjZmY3YjVmZiwgMHhmZGY1MGQzZSwKLQkweDcyNzJmZTczLCAweDZlZWQ4YTk0LCAweDU1N2U4ZjlmLCAweGYyNDJhMmYwLCAweDBlNWZiODM3LCAweDk2MzdjMDRiLAotCTB4ODM1NzZlMmUsIDB4YjQ3OGE3M2UsIDB4MzliNzNmNDYsIDB4NDJiOGZkMDUsIDB4ZWQ2Y2UzMGMsIDB4YTQwYWE0YzcsCi0JMHg3M2EzZjA3NywgMHhmOTZiMDNiZSwgMHg2NjVmMTRhMywgMHg5ZmQ0NDU0YSwgMHg2NWY3OWY4YywgMHgxODllM2MyOSwKLQkweDVlZGFhZTJjLCAweDk1ZWZmZDg0LCAweGViMGJkYTE4LCAweDJkYTc0ZjhiLCAweGNkZWE3ZjI0LCAweGRmMzE0NWI0LAotCTB4OTA3ZTFjMzUsIDB4ZGZiMGQ5ZjAsIDB4MmYxZTJjMzgsIDB4OGYwOTkxNGIsIDB4ZjA5ZTQ3NGQsIDB4MmY3OGRjYTEsCi0JMHhhODRjOTEyYywgMHg2OGFkYzI1NywgMHgxYmQ3ZDZkNywgMHhlNTY0MjJkMCwgMHg1MzM3MDVlMSwgMHg4OTllN2Q3YywKLQkweDY1Zjk4NjhkLCAweGRjMTc3ZDA4LCAweDJhNjg2MzdmLCAweDkzZmUxYmNlLCAweGZmMGVkNWUwLCAweDNiMTM5MjYyLAotCTB4YjRlYzU5ZTYsIDB4N2I1YzUxNGYsIDB4OTljMWUxM2IsIDB4YWMzYzQzZTAsIDB4YzBjYWFlMmYsIDB4Y2Y2NjlhNzEsCi0JMHgxZTVjNTI3MiwgMHg2ZmFjMzllYywgMHgxNDdiZWJiYSwgMHg1YWUwZDdhNywgMHg4ZDU4ZDg3ZiwgMHhkODI1NGVmNiwKLQkweGI4MDZiZjc1LCAweGFiYWY5M2IzLCAweDhmNWYwMmY2LCAweGZlOTQwZjkyLCAweDQ2NWJjYTEwLCAweGJhMmZlMzkwLAotCTB4NDhiNDVkMzksIDB4Y2JiN2QwZmUsIDB4NjJjNzhlMjksIDB4ODdiOTcyZTMsIDB4N2Q3OGZkYjksIDB4NjlkYTg5OGEsCi0JMHg1MTRmYWZlZiwgMHg4NDU3YWYwOCwgMHhiOTIzYTY3YSwgMHg2ZDdhNTcxYywgMHg5OTA3NTc2OCwgMHhhYmY0MDNlZiwKLQkweGVlYWVkZjk5LCAweGYyZTI3NWEzLCAweGE1NTJiZGNiLCAweGRkYzU5Mzc4LCAweGFjMjRlZjdiLCAweDdmMjE0MmJmLAotCTB4MGZiZDI5ODYsIDB4YWRmZGI4ZTAsIDB4MjY3YWVmNmUsIDB4NzdjYjAwZjgsIDB4ZWExYzUwOTUsIDB4MWU2MDRhNjgsCi0JMHhiMGE1NmZhZSwgMHg1YzhmZmI1NywgMHgxMjViNWE1MywgMHhmNzVhYmZiNSwgMHgwMWFiYzIzOSwgMHhmNTBlYWQwZiwKLQkweDkzOTQ2YWZlLCAweDI3MjQyODlmLCAweDMzZDIyNTk5LCAweGY4NjlmYTFkLCAweGZiZjUzMjZiLCAweDBlYTA1YjA3LAotCTB4ODZiNTY5ZmIsIDB4NDIwZTkxNWIsIDB4NzNiNTMyMWQsIDB4NjM3NGIxY2YsIDB4ZTIzZWVmM2YsIDB4ZDMzYjQwZTgsCi0JMHg0ODYzNmVlOCwgMHg1MGJlZTBjNywgMHhmNmUyYzQ5YywgMHhkM2NhMTUzMywgMHgwOTE0MGI0MywgMHg1ZDljNDVmNSwKLQkweDQ5ZTMxZDMzLCAweDI5YjhiN2U0LCAweGY4MjU1OGRlLCAweGMxNTAzNDYzLCAweDQyYjEwYjU5LCAweDUxMjllN2NiLAotCTB4NGZmOWU3M2IsIDB4NTJmODJhZTcsIDB4MTYwYzdmYjMsIDB4MzE5ZTFmMWUsIDB4ZjhlMTgxMmYsIDB4NDljODllZWMsCi0JMHhkZDliYzYwMywgMHhlMWVkMGMzZCwgMHhjNjg5NGVjNiwgMHhkYzdlMmM2OSwgMHhkMmNiZmU4NCwgMHg0MWRmY2U0ZSwKLQkweGZlMDA2ZmUxLCAweDU4YWVkMDcyLCAweDc2MTM2MjkxLCAweDc3YTcwYjY2LCAweDE0NzI3M2Q2LCAweGJlMzFmOWUyLAotCTB4M2I0MThjOWUsIDB4YjJkZmFjNDcsIDB4ZmQ2OWRhOGEsIDB4YmM5YzQ0OTksIDB4NDA5M2M0NTEsIDB4ZGFmZDUyMTMsCi0JMHg1OGNlY2QxNCwgMHhjMjZkOWUyZCwgMHg2ZWUzZTBjZSwgMHgzMjdjN2E5MSwgMHhkMjU0YjNlMiwgMHhlN2I1NzNjNSwKLQkweDkyNzcyMTZlLCAweDIxNjY0NDRlLCAweGJlODA0NmZmLCAweDVkYjRhZTMwLCAweDZmZmI3ZDlhLCAweDJiZGI3ZTYxLAotCTB4MTRkMTc5YzYsIDB4YzkzOTAwZjMsIDB4NDgxZWY4NjUsIDB4N2U1ZWYwMTEsIDB4NDg1OTgzZjgsIDB4MTE5YWFjMzcsCi0JMHg5ZTFkMzZiZiwgMHhmZDhhMzcyNiwgMHhkMjE3YjQwNCwgMHg1ODFkY2Q2ZCwgMHgzMTZiN2U5ZiwgMHhlZjhjNjdlOSwKLQkweDVlYzBiZWUzLCAweDNiMGNkNzgxLCAweDU2NzllYjhmLCAweDlmNzBmMjg3LCAweGZmODRlOTJkLCAweGY4ZTJkZmY2LAotCTB4MWY2ODEyMTMsIDB4YzZkNjFkMjMsIDB4NzVjZjRjOTEsIDB4YjBmMmQ3MTgsIDB4M2Y1MWE3ZDIsIDB4MzJkNDZhN2IsCi0JMHg0ZmRiNDc4NCwgMHhkOWE4ZmRjMiwgMHhhOWM3MjQyNSwgMHg3Yzk1ZWM5YywgMHhhYmY5ZTA3YiwgMHgwMWUxMTcxNCwKLQkweDg0NmFiY2ZjLCAweGVkODdkZjE3LCAweGY0YWRmZGQxLCAweDM4YTVjZGU5LCAweGUxMWZlZTJlLCAweDViYTMzZmIzLAotCTB4ZWIzNTM4YTEsIDB4ZmM4ZmJkZGQsIDB4ZjExM2IzN2UsIDB4YjlmODczNTUsIDB4ZDZmZjUxNTcsIDB4ZWQyNzU4NTgsCi0JMHgyZGQ5YzVmNywgMHhmMWJjNGUzZiwgMHgwM2EzOTQ0OSwgMHhiZWVlY2VlNywgMHhjZWZhZTExYiwgMHhkNjgwNmYyMSwKLQkweDVjOGY2ZjQ3LCAweGNmYjcxNTdkLCAweDUzNjdkYmRmLCAweDIzZGM4ZWQxLCAweDhmZDgzNmU0LCAweDVmYTEyN2M0LAotCTB4ZGUzMjdmNzIsIDB4NDUzOTdjOGUsIDB4OTYwYzlmZWYsIDB4MjQ3NmVlZmYsIDB4ZjAwNDJmODcsIDB4ZWY5MThiZWQsCi0JMHgwZGZmZTE0MSwgMHg0NDRmOWZkNCwgMHgyMGZhZjVmZCwgMHgyYmZmYTAzYywgMHhlZDUwNzZhMywgMHgyYmVkMWI1ZSwKLQkweDcxMTdmYTBmLCAweDhmZjNjOGY2LCAweDBmNDg0MmQ4LCAweDE0YWQzYmU3LCAweGZlYzQ1NDc3LCAweGU0NDczOWNjLAotCTB4OGI1MjQ0NGUsIDB4Mjg0ZGU0ZWIsIDB4YmRiNzgzNmYsIDB4ZjAwMzJiZjcsIDB4ZjdjMWQyOWYsIDB4ZWM0OTE0M2IsCi0JMHgzMzIwYmM4NywgMHg3M2UzN2ZiZSwgMHgyOTRmZWVjNiwgMHg1ZjFlNTlhZSwgMHgzZTQ3Y2EwOSwgMHg2ZTIyNjVlZiwKLQkweDQ4YjkyY2I0LCAweDdjMzJmYmU1LCAweDYyNTk2YTVmLCAweDUzZGExMTc3LCAweGI0M2QwOTRmLCAweGFiZWY4MTJjLAotCTB4ZGQ0Y2I4MGMsIDB4YWM3YmFlYjgsIDB4YjQyOWYzODEsIDB4NjdiZmMyZmYsIDB4YjFhYjMxYmYsIDB4NjExZDJmZmIsCi0JMHgyOTlkZDc2ZSwgMHg2MDliNzQzNiwgMHgxZjY4MWQ5ZSwgMHhlMDZkYmFlMCwgMHhmYjgzMzBmYiwgMHgxZGNkYzdkNSwKLQkweDUxOTM4MjY2LCAweGM0NTVhMDc5LCAweDk1ZmRiNWViLCAweDU3MWUzY2UzLCAweGNlNTFmNjI3LCAweDEwZmM1OWNjLAotCTB4NDhiNWE5NmUsIDB4OWZlOGQ1Y2QsIDB4OGQzZjU4NWQsIDB4ZGU3N2Q3ZTIsIDB4NzU5ZTliM2YsIDB4Zjc3MWY0ZWIsCi0JMHhkZTk5YWNjNSwgMHg1YTk0ZmI2YiwgMHg3OTk2YmJiYywgMHg4ZTVlZGM0ZCwgMHg2MDBkMTFjNiwgMHg5NGViYThiZiwKLQkweDc5OTdkNDJhLCAweGU1MWFiOWNjLCAweGQ1ODIxYWJmLCAweDE2Y2YwYzlhLCAweDJlZDFhMjc4LCAweDczYjQyNDE5LAotCTB4MDI3NzU2OTQsIDB4MTZkYWVmYWUsIDB4NTBhOWU5MDMsIDB4ZWQ4N2MxOGIsIDB4YjhlNzNjMzQsIDB4ZDJhOTFjNzksCi0JMHhiMDFhZTNjZCwgMHg0NzFjNjE1NCwgMHg0NTE4YjY3YiwgMHhiN2Y0NWZkYywgMHhmMWJhMTk4YSwgMHg3M2Y4OTA2OSwKLQkweDFlYTk1M2FkLCAweGZkNmI1ZjRlLCAweDJkOWIxOGI1LCAweDY0OGJhNzE4LCAweDdkYWUyODFiLCAweDQ3OWJlNGMxLAotCTB4MjJlNGUzNzEsIDB4YjY3YzAyMTYsIDB4NTVkNzlhMzgsIDB4OWRlMjdhZjMsIDB4OWY4OGQ2MGIsIDB4Yjg1NGFmZWEsCi0JMHg2NGQ0YzkyMSwgMHgzNzZlOWY5NCwgMHhlM2M2NTM4ZiwgMHhiZTliNTE2ZCwgMHhkMjFmYmYxYywgMHhlYjk3ZDYxMCwKLQkweDQ2NGM2MDU4LCAweDg4M2ZkZjAxLCAweDczNzZlZjdkLCAweDdkNjE3NWY5LCAweGQ3YjdjMDllLCAweDliNTY3Mjg0LAotCTB4OGUyY2FhZmYsIDB4N2YzNjQzMzcsIDB4Y2Q1NzY3ZTYsIDB4NzdjODNhNDMsIDB4MjAzZjI4OTksIDB4YWJlM2M1ZGYsCi0JMHgzZjgyMTMzMCwgMHg0NGI3NGFmZiwgMHg2ZjA3MTFmNCwgMHg0ODZkMWEwYiwgMHhkZjdjYWQ1ZiwgMHgxZmMyYWJlZSwKLQkweGVlNTVmNzBmLCAweDdjMWZhMTM0LCAweGFiNjdkYzFlLCAweGRmNjg5YTczLCAweDI0ZTM1MmY0LCAweDcyZjViYWI3LAotCTB4ZjdmY2IwNjgsIDB4OWZiOTY3ZjcsIDB4M2M4YjJhZDQsIDB4YTFjOTI3MGUsIDB4Y2I5ZjI3NWEsIDB4NDhmYmM5MTksCi0JMHg4M2I3YmUzNywgMHg2OGYzODA5ZCwgMHg2ZWQwY2I5NSwgMHg5ZGEzN2U5OSwgMHhkYzc0ZDFlNiwgMHhjNmUwNzE0YSwKLQkweGE4MzliZDE1LCAweDdhYWE5YmM3LCAweDIwM2YzMDhiLCAweGFkMDhiZjFlLCAweDY4MmZjOWEyLCAweGZmMDZlYjU3LAotCTB4ZDg4NGVkMDMsIDB4YzU0N2U0NzYsIDB4N2VmYTA3ZWYsIDB4M2Y0NTRlZTQsIDB4ZTc4MWNjZTcsIDB4YjAxZDVmNTAsCi0JMHg3ZjgyYmU5MiwgMHgzOGM2NmQzZCwgMHhiMjNjOTFjYiwgMHgwMjNhYzZhMywgMHgzMDVkYjAyYiwgMHhhM2Y3N2JhMSwKLQkweDcwYjc2ODc5LCAweGNiYjFhOWJiLCAweDYxNzY4MWRjLCAweDNlY2M0YjZkLCAweDA2ZGZmZTFiLCAweDViMWJiZWZkLAotCTB4NzdmMTRjOTcsIDB4NWY3ZmFlZDYsIDB4YmJlZTMzYmYsIDB4NmQ3MGZiMjEsIDB4NGM1YmNlYjQsIDB4ZWZjOGIxODEsCi0JMHg5ZjY4NzdhMCwgMHg4MTgzNWNmYywgMHg2NGViYjdmNiwgMHhiNzk0NjJlZiwgMHg3YjdhYWNlNywgMHhhZjgzOWNmYywKLQkweDlhZGRjZmQ3LCAweGMyMmRlMTNkLCAweDBmMmMxZTc1LCAweDExNmY2NzU5LCAweDgxOWQ3M2FlLCAweDY5ZmI2MjA1LAotCTB4ZjU4Njc1YzQsIDB4ZjlkNjI2NWQsIDB4OGI5MzEzZGMsIDB4M2ZkZjlkNzAsIDB4ZDcwOGI5MzAsIDB4Y2RiMThiNzksCi0JMHhhOGYzN2M4NywgMHgxYjkwZjAzMywgMHhlOTliZWRmYSwgMHhmNzBhN2IyNywgMHgyZThmOTEzZCwgMHhjNDBmMWU5NSwKLQkweGZmODFlM2QxLCAweGVmYTQ3YTNkLCAweGM3ODdkMjQ2LCAweGViZDBlMTA2LCAweGNkNDliNzQzLCAweDZiNTA3OTQyLAotCTB4NWVhMTdmMzEsIDB4ZTM2MWJmYzQsIDB4YzUzMzE2NzgsIDB4ZmE3ZjhlM2IsIDB4NTA0N2M2ZTEsIDB4NjRjOTc0MGUsCi0JMHgxZGZkNjg4ZiwgMHg2ODA1MDI1NywgMHhkNTdmMWQwZiwgMHgyMzQ5MGRlMywgMHhlZDE4YmZmNywgMHgwN2RhMGFhZCwKLQkweDQ1NWM2MTBjLCAweDdiMzQwM2YzLCAweDlmMWU1ZTMyLCAweGM3NzlmMzEyLCAweDdiNDJhYmVkLCAweDhkYzZlYmZjLAotCTB4NGIzYmM1ZWIsIDB4ZTc2ZTQzZjgsIDB4M2NiYzk1ZWUsIDB4NzE0OWRjNmUsIDB4MGI2M2E2ZTQsIDB4N2UyNzE4OWMsCi0JMHhjNmUzY2MyNywgMHg1Mjk0NGY0ZCwgMHhmYzIxYjhkYywgMHgyZGU2Mzc0YywgMHg4OWM5MmViMSwgMHhkZWMzNDdmZSwKLQkweGRiMTcxMzM3LCAweGY4MmU3ZWEzLCAweDVmMjM2ZmI1LCAweDNmN2U4YjMxLCAweDk5ZjA5ZGU5LCAweGMxM2IzYWM0LAotCTB4NzFlYTE1N2QsIDB4NDI2MjNiOWIsIDB4N2YwMjZmYmEsIDB4OWFkNGYzMGYsIDB4ZWM0OWM4OTQsIDB4MjhjZGM5YjcsCi0JMHhiMGZjYTMxZiwgMHhmMmQzZmZkZSwgMHg0ZGY4NzZhMiwgMHg3NDc3NzcyNCwgMHhkNzk0NjE0OSwgMHg1ZTQwYTY2OSwKLQkweDk2MzVlYTE2LCAweDhiNmIzY2U1LCAweDZlYzdkOWYyLCAweDc3ZjcxYjlmLCAweGJlZGJmYmEzLCAweGU0Yzc3MWZmLAotCTB4NGY2ZWY1MWIsIDB4MzVlZGZhMjIsIDB4ZTUxMzlmMzIsIDB4OTA4Nzc2ZDksIDB4YjdjOTBhNjcsIDB4YzJiYTc3OGYsCi0JMHhiNzg4ZmYzYywgMHhlZGNjMzhmZiwgMHhlZjJkMDY4NCwgMHgwYWRkNjE0OCwgMHhiOWUyZDdhYywgMHhiZDcwZDdiZSwKLQkweGM3NzdkZTUxLCAweGIyZDhmYmM5LCAweDE0YmQyZmI2LCAweGY2ZTNkMWY3LCAweDBkZGI2M2JmLCAweGVjYzdlN2VlLAotCTB4NjFmYWViN2YsIDB4Yjk2YWE1Y2QsIDB4NWY1YmZmN2UsIDB4MzI3ZWUyMWYsIDB4YjJmMmMzZjAsIDB4ZWI2YWZkMjgsCi0JMHg5MzZmZDFhMCwgMHhlYjA3NDM4OCwgMHhmNDgzZGY0ZiwgMHgzOTJjM2MxYiwgMHhlNjViYmVkMSwgMHgwY2JiZjRlNSwKLQkweGM0ZjMyZGZjLCAweDNhY2VmY2ExLCAweDIzODk3OWY1LCAweGFhNjk3ZmYxLCAweGNiMDdmZjllLCAweGVhZjhhMGZmLAotCTB4OWM5YWE5MTUsIDB4Y2RhZjdjZTQsIDB4MGZkYjhiNWYsIDB4ZTI0YmIzY2UsIDB4YWYzNzE5N2MsIDB4M2UzNTNmNzgsCi0JMHg5OWY5YWVkZSwgMHg2ZjBmMmE5NywgMHhlMzg3ODQxYywgMHgwZmZjYjA2MywgMHhjNmI3ODc5NiwgMHhmZGE0NjVlMSwKLQkweDBmMmNhZjhjLCAweDM1Zjc5N2ZmLCAweDM1YjYzYTFlLCAweGI0MGVmZDExLCAweDU5NGZkMWUzLCAweGYzYzhjZmI3LAotCTB4YjFmZDAwMjMsIDB4NjRiM2M1ZmIsIDB4OWZlZjhmYmIsIDB4N2ViZDVhY2EsIDB4MjU5ZDVlMWYsIDB4NWYzOWUxZjYsCi0JMHg0Yzg0ZjMzZiwgMHhmNjI4ZDZlYiwgMHgzOThmMWI4OSwgMHhkZWI0ZDhiYywgMHg2OWY2ODRiZSwgMHg2ZjRmZjdlMywKLQkweGUxNjYwNzYzLCAweGEzZWZjNTUyLCAweDJlN2U0MzJlLCAweGQ0ZmRmMmY4LCAweGJjYzFkNGQ2LCAweDViY2MzYzg1LAotCTB4Y2JkMmFjYTgsIDB4MWZlYzY3ZjksIDB4ZDY2MjA0YTYsIDB4MWMwNGFhYmQsIDB4ZGJlODYxODIsIDB4NzI1ODg0YTIsCi0JMHhhOWFkZmJjYywgMHg0NjdlYWVkYywgMHg0Yzc4ZjdlNCwgMHhhNWU2MWQ2YywgMHg3Y2Q4NzI2YywgMHgwYzc4Y2ZlOCwKLQkweDQ3ZThmZjNjLCAweDI4ZWRmZTI5LCAweGMwYWEyZDE3LCAweDMyZWY5MWViLCAweDIxZTVlMDAzLCAweDk1YzkyNzYzLAotCTB4OGJkZGEzNTAsIDB4ZGY4YjUwNzIsIDB4MmM3ZmZkNjgsIDB4NTkyZWMxZjYsIDB4ZmJkMWM3ZmYsIDB4N2E2NWZmODEsCi0JMHg1M2NmYzc4ZiwgMHg3NTVmNzhkYSwgMHhlMDFiNmVkZiwgMHg4YzE3Yzc0NiwgMHhkYzQ1ZjhlOCwgMHg0YTFiY2E1ZiwKLQkweDMzZjUyM2JmLCAweDljYmYxZDEyLCAweDk1MjE3ZmVhLCAweDIyNmZhMmU0LCAweGEyNWMyYmU1LCAweDQ3OTViMTljLAotCTB4ODg5YzYwY2UsIDB4MThhYjM0MWQsIDB4MDkzOGM0ZDcsIDB4MTkwZGM3ZTksIDB4NWJkMjZmMjIsIDB4ODBmMjliMzksCi0JMHhiZjk4OTViZCwgMHhmM2ZlMDZmNSwgMHhjOGVkOTFmMiwgMHhlMWY1YzFiZSwgMHg4OGRmNjQ3NiwgMHhlY2Y1ZjNlYiwKLQkweGZlOWRiYmM4LCAweDdkNjc0OGIzLCAweDZmOTQ3Y2QzLCAweGYwMDFkNmJlLCAweDBiZjg3ZmEzLCAweGQzYjQ3NzllLAotCTB4YTc3M2U5Y2EsIDB4MmQ5MmU5YzQsIDB4NzhhNGI5NGYsIDB4NzQ3MWE3Y2IsIDB4OTFmZmU5ZjUsIDB4OGRhNGI1MWMsCi0JMHhiZGZlNTc2NCwgMHgxMjVmZThlNSwgMHg3MjNhN2UzMSwgMHhhNzllMjEzZiwgMHg3ODQzZDU1YiwgMHhkODkzMWM4YiwKLQkweDc2Yjg5ODllLCAweGUwY2ZmMzEwLCAweGFmMDEwY2ZiLCAweGUxMjNmZWY2LCAweGYzNGMyYzM3LCAweGZiYzFhNjY1LAotCTB4NThiMzVmZjcsIDB4M2U5ODEyNTgsIDB4MzYyZTVjZTUsIDB4YWZiNGVkZjksIDB4ZjNjOWQ0ZDAsIDB4MzA1NjlhNWYsCi0JMHgxODRkZTM5MiwgMHg3OGMxMmQzNywgMHg5OGI2NmNlMiwgMHg0MjgxODllMiwgMHhmYjViOTNjYywgMHgyNzI0M2RiYSwKLQkweDBlN2RiYzYxLCAweGZmYWYzYjQzLCAweGRlYmU1ZTM1LCAweGZlYzYyODE1LCAweDY5N2EyYjgzLCAweGNlN2RhMzFmLAotCTB4NTU4Nzk0N2IsIDB4Zjc4N2Y5ZjksIDB4YmMxMzk3NTQsIDB4OWI3MDRmMTQsIDB4NmUyNWU3ZjUsIDB4MGVmYmUzNGMsCi0JMHhhNjlmZDNkYSwgMHhlMjhmYmJhZCwgMHhmM2Q3ZWZmOSwgMHhkYmEwZTJiYywgMHg4NGI4YzRlNywgMHhhOWI3MGYxNiwKLQkweGQwYWZiNDNkLCAweDZmMWI5MDc0LCAweDBmOWYzMjk1LCAweGQxMTY2OWZiLCAweDY5YzFkMzUzLCAweDY1MzcxOGE1LAotCTB4YjQ1MmQ2OWQsIDB4NmNmZjJiNzcsIDB4ZmRlZmJmMjcsIDB4NGYyOTMyYmIsIDB4ZTA0YTY4ZTIsIDB4NTFkNzg0NmEsCi0JMHhlZDE2YmUxZSwgMHgwNzE4NWNkMywgMHgwZmY3ZGVlZCwgMHg3MDhhNWI1YywgMHgwYjZmZjI2YiwgMHhmZGExY2RjNiwKLQkweDFlM2U4NzE2LCAweGRmM2MyY2NlLCAweDUxZDFlMWJiLCAweDFhYmNkYzVhLCAweGYwNDViM2YxLCAweDU1YjdiMzIxLAotCTB4ZWY4NjFlY2UsIDB4OTc0ZjdlMzUsIDB4ZmE3ZmQ0MGQsIDB4M2ZiNDJkZjcsIDB4MmQ4M2M5YWUsIDB4MTRiMDE2NDYsCi0JMHgyNGM4ZTU0NCwgMHg3NDE4M2Y5MSwgMHhhZWM1ZmM4YiwgMHg0NTNmM2NkOSwgMHhhOWUyZWQ5NCwgMHhmNzFkZjNlMSwKLQkweGFmMzg0OWNjLCAweDM3Y2E2OTQ5LCAweDRhNzJjN2RiLCAweGFjN2RkOGY2LCAweGVhMDE0OGJmLCAweGQwYzRmMzE3LAotCTB4YTUxNTg3NGYsIDB4MjJlZDhiNzgsIDB4OWRmM2EzYjcsIDB4YzcyM2EyMjYsIDB4YTdmN2M2M2EsIDB4OWVkMDhlODAsCi0JMHgzM2QyMjJiZiwgMHg1OWU2MDkzZCwgMHgwNTdkZGVkOCwgMHg0NWY4ZjdlMiwgMHgzMjkzYWQwMywgMHg5N2RhNDVmYiwKLQkweDc4Zjg5MjQ5LCAweDViN2ExYjA1LCAweGM2MWM2MGM3LCAweGI4OTVjYWY5LCAweGIzOWI2YTk0LCAweDM2ZjhiNzBhLAotCTB4YTQ3N2ZjYjksIDB4MTczN2RmMTEsIDB4ZmY1NTc4ZTMsIDB4OTM3OWU0NjEsIDB4NWYxNDZjYzcsIDB4NDY1OWNmNjgsCi0JMHhhZmZkOTM3OSwgMHgzZWU3NzU5YiwgMHhiNjIxOWZlMiwgMHhmMzI0ZjI5YSwgMHhmNjkxZmYwZiwgMHgyNTA3MWMwNywKLQkweGU3YjRkZTFkLCAweGJlNzY2OTdkLCAweDk5ZWExNTZmLCAweDU3MzViOTQ1LCAweDJhYmU0OWI4LCAweDQyMWNmZWM3LAotCTB4NTU2OTQzN2IsIDB4MTZiMGYyNTAsIDB4NDU2MGNmYTMsIDB4NTE4YWI1ZjksIDB4YmI3NDdmM2MsIDB4OTVlYjgwZDMsCi0JMHgwNjYyZjIyYiwgMHg2Mjc1ZmY4ZSwgMHg2ZDE1ZmM4MCwgMHhmM2NjMjAzZiwgMHhmN2JkOGM5YSwgMHhhY2E2MWZhMCwKLQkweDg0MmFiZGVhLCAweDY1ZDA3MWViLCAweGE5YjhjMjY4LCAweGYxNDRkMjMxLCAweDhhMzY2Mzk2LCAweDJlMWVlNmFmLAotCTB4MjgyZGZkNTgsIDB4ZDI3M2FlZTcsIDB4ZDFjMGQ3ZmUsIDB4NmY5NGI5YTUsIDB4M2QxY2YzMGUsIDB4NGNlZjNjY2MsCi0JMHhjZDQ4NzllMywgMHg2Mzk0NWU4MiwgMHgzM2VhMDMzNiwgMHhlMmYzMzM2NSwgMHgzZTJkNzllOCwgMHg3ZWY4MDJlNywKLQkweDNhMjE1M2I0LCAweDA4MTY5ODVmLCAweDllMGU3YWUzLCAweGMwOWU1OTZmLCAweDNjMjhiN2NmLCAweGZlNThlMjNlLAotCTB4ZGNmMTJmZmEsIDB4YjcxMTZlYzgsIDB4ZmM3YzcxM2QsIDB4YjVmMzhhMWMsIDB4ZmRlMjEyMmEsIDB4NTFlNzhiODIsCi0JMHgzZmE2OTYzZSwgMHhmN2M1MTA4NywgMHhjZDQ3Y2EwOSwgMHhhZTQ3ZjYzZiwgMHhmNjBkYTBiZiwgMHg3ZDM5MThhZiwKLQkweDBlZWVhZDI4LCAweDNiZjYyNzhjLCAweDdiN2Y5NDAyLCAweDRjYjc0YjY1LCAweGJlY2U2M2ZiLCAweDE4ZDVhYTA3LAotCTB4ZDcxYjY2YmYsIDB4YjlmYjRkMjcsIDB4YzdlZjFlMWYsIDB4ZjkxZTk5N2MsIDB4ZTEzY2EwZWQsIDB4ZmNiMDY0N2EsCi0JMHg3YTRmYjIwZiwgMHg1N2M3ZjRlMiwgMHhkZTk4NGZmNiwgMHg1M2I3OGJhZiwgMHgyMWI4ZmRlMiwgMHg3ZjVjNzc3NiwKLQkweDVhMmJkOTIzLCAweDc0NTU0OWJlLCAweDNiMzc2ZTFjLCAweGE0Mjg3YjM0LCAweGIyYTljN2NiLCAweDE2NmJmMzhiLAotCTB4MjYwZmZmN2QsIDB4MjJmZjc5M2IsIDB4OGQ2ZDI3M2YsIDB4N2Q0MTRhYmEsIDB4ZTI4YzJmZjUsIDB4OTBmZTVhNzMsCi0JMHhhYTE0MmY5NiwgMHgyMTNkNzllMiwgMHhiN2NlODU4MywgMHhlNTFiNTg3OSwgMHhkZDYyOGQwOSwgMHhiNDcxNDQ5MiwKLQkweGE3ZGY4NjVlLCAweDdjMTBiZTYzLCAweGYyZDJmZmZmLCAweGNjNWRmZmE5LCAweDM5MjY0ZWJiLCAweGJmMDg0YWE5LAotCTB4NTI0Y2YzMTUsIDB4ZjZmMGVlMTAsIDB4NzdkZTM4YzUsIDB4MTU5ZTM0ZWMsIDB4Yzg1MjRjZjMsIDB4Y2RmZTIwOWYsCi0JMHhkNGZjZjNmNCwgMHg3ZjdjZjVlOSwgMHgzMGY0MTMyMSwgMHgzOTBiMzM5NiwgMHg5OWU3NWE1ZCwgMHhjYjU1NWYyOCwKLQkweDRjZjJkMTFmLCAweDA5NTRiYzM0LCAweDU5OGU2NzdjLCAweDUwNzI4NzljLCAweDkyZDk0N2NiLCAweGZiNDRhZGUwLAotCTB4N2IwMjU1YTcsIDB4OTBkM2U3MWEsIDB4Nzg0YmYyMjAsIDB4ZjkwZGVkYmYsIDB4YWZmN2E0NjEsIDB4OGYxMjdmOWIsCi0JMHg2NTBmMmQ2NywgMHgzZDIwNjI3MiwgMHg1ZTdhMjJiZCwgMHhkMTFmY2I0ZSwgMHgzZDY2MjZlOCwgMHhjNzFkYWUwOSwKLQkweDU1NWYzZGI4LCAweDBjNzlhMjZmLCAweDcxNDc1YzM0LCAweDAzMDY4MWM5LCAweGQ1NWZiZDQzLCAweDE4NzRlNjY1LAotCTB4Nzk4ZWRlMzcsIDB4ZmQ4ZGQ2MjYsIDB4ZTUyYjYxMmEsIDB4Zjg3YTBiZDcsIDB4ZDYxNjdiMzIsIDB4YmVlMzE4YjcsCi0JMHgyZmVlNTYyNywgMHg3ZmRlMDNlOCwgMHgzZDI3NjU3NiwgMHhhNzUyYWMwNywgMHgzM2NlODkzYywgMHg5NTA5NDdjZSwKLQkweDVlYjhlOWUzLCAweDZhZjMxY2I5LCAweDkwMTIzOTIyLCAweDBmZWQ4NGQwLCAweDM1Mzk1MGQ3LCAweGE3OTYwNmYyLAotCTB4NTFhZTVlN2EsIDB4OGMwYzRmNDAsIDB4YTA5NmVjOGUsIDB4MmRkYjdmYmQsIDB4OTliNDhjYmMsIDB4N2QzZGZhMDksCi0JMHhlNGE4NGQ3NiwgMHgzNjNiZTgxYiwgMHgyYWEzNmYyNCwgMHgzN2UyOTUzZCwgMHhiYzUwZjRmNywgMHg3MmJiZTg0OCwKLQkweDBjZDkxZjJlLCAweGFiYzc5ODczLCAweDlkOWI4YTU0LCAweDNiMjNjOGNhLCAweDdmOWM1ZWMwLCAweGIzZWIwN2IwLAotCTB4ODM2NzE0Y2MsIDB4NTNmZmEyN2EsIDB4N2FmMWE3YTMsIDB4Y2IzZmFmOTUsIDB4MGRmY2YwNzIsIDB4Zjk0MjFiZDYsCi0JMHgxYTZmMmE3NiwgMHg5MTFiYWJjNSwgMHhiMjllYzAzZiwgMHg3MDczMDIzYiwgMHgzZDQ5Y2Y1ZCwgMHg5YzNmMjI3NywKLQkweDI1Y2ZmOTlhLCAweDBlZTdlNzQ4LCAweGU1MTBiNGZkLCAweGIwMjYzNWNmLCAweDM3OTE4N2QzLCAweGRlNWMxOTY5LAotCTB4ZWJlZDE4MGMsIDB4NjVlN2U4MjQsIDB4ZDhmYmUwN2IsIDB4ZjliNmFiY2YsIDB4N2NkNTMwYjMsIDB4MTMzNGNhNWUsCi0JMHhhMTYwMWQxZSwgMHhmZjI4Yzg1ZiwgMHhiOWZhYzU1MiwgMHhkMWZiNzJlNiwgMHg2MTJmYzMzNSwgMHgyYjFhZTgxZSwKLQkweGEwMzUyMzg3LCAweDA5OWVjOGY4LCAweDAzYmU5NWNjLCAweDA5MjM1ZmYzLCAweDQ5YTk4NmZiLCAweDZhYTg4N2U0LAotCTB4Y2IyMWZhMTIsIDB4NTk0NmI5YzQsIDB4ZjgyY2I3ZjAsIDB4N2IyYjBmZmIsIDB4ZDgzMDE1MGEsIDB4MmNkY2VmMmUsCi0JMHhkZWRmZTcwZiwgMHg2ODZmZTcxOCwgMHg1Y2U5NGRjZiwgMHhkNTkxY2Y0ZSwgMHg2ZTFmNDgwOSwgMHhkN2RmOTFlMywKLQkweDI2YzkzYWMwLCAweGJkZjExODZmLCAweGZiNDFkYjI2LCAweDJhM2I0ZmI3LCAweGFmZDBiZDNkLCAweGU1MmZmYjk0LAotCTB4MjZiZDU3OTgsIDB4NzFjYTVmZmIsIDB4ZjY0ZTRkOWYsIDB4ZTUzMWZjN2EsIDB4ZjUyYWU5NGQsIDB4MjFkYjAzMzcsCi0JMHhlNWNkNmNmZSwgMHhiYmZkN2YxOCwgMHhmZDA0OTdmNSwgMHhmZWZkN2M5NSwgMHg3MzMxZmIwNiwgMHgyMjU5OTZiOCwKLQkweGRkZjAwYTM5LCAweDAzYzBkNmNkLCAweDE2MTc3ZWI4LCAweGIzZmI0OWJjLCAweDdhOWU2Njc3LCAweDRlMmJmMzAzLAotCTB4ODhjZjk5MTksIDB4OWM0MzI0NzIsIDB4OGViZDAzM2YsIDB4NzVjYzllZTMsIDB4Y2U1M2YzZjEsIDB4YjExM2QzNmQsCi0JMHhmMmU5YzA1YywgMHg3ZGE2MTY1YSwgMHhmY2I5OWFmNSwgMHhhY2Y1ZTNiYywgMHhkYTE3YTVhNywgMHhhYTMxZTM1ZCwKLQkweDcxZmMzMWJkLCAweDVmMmZhYWFkLCAweGQ3MmZhYzVmLCAweDdmOGUzYzg4LCAweGRmZGZlYWYyLCAweGQyMGEyMmMwLAotCTB4N2NhN2I3ZTksIDB4ZmRmNjI2MzYsIDB4MmZkZjU2NTMsIDB4OTI5ZThmOTAsIDB4ZTg2N2RlNzgsIDB4ZmIyNGU2NzIsCi0JMHhkMDg1MmRkOSwgMHg2NGZmMTk5ZSwgMHhjOWZmMzhhNiwgMHg1NWZmMTNmMywgMHg0ZTRmNWZmOCwgMHhiNjlmNTQ2MSwKLQkweDgyYzdiMmRmLCAweDJkOWUyMmY1LCAweDFlZjFmYThiLCAweDI2NGRjOTY2LCAweDMwZmE0OWI5LCAweDQ3M2M4OTIyLAotCTB4YjBmMWVkMzcsIDB4NzkzYmI3NDMsIDB4OWFkYTE3NWMsIDB4MGI0MzlmYTAsIDB4OWE0YmMyNTQsIDB4NDJhZWMwZGQsCi0JMHgxMGI3MmJmZSwgMHhiZTc0NjlmZiwgMHgwYWY0MGFjNiwgMHg2NTFjYTk3OCwgMHg1ZGZhNDA0OSwgMHhjMzZlZjQ2MywKLQkweGIzMDRlNGJlLCAweDVhNmZmYThhLCAweDk2ZmE4NWEyLCAweGZlOTBhNjdmLCAweDMzMzU2NTU4LCAweGRjNGY5NDI3LAotCTB4Njg2NTQwOTcsIDB4NDRlMDcyNDcsIDB4NzE4YzI5ODUsIDB4ZWU0MjM1ZWUsIDB4NDgxYmY3Y2IsIDB4Y2MyYTU2N2YsCi0JMHhkMDFiNzk4ZiwgMHg5ZmRmMWJhZSwgMHgzYjUwYjBjOCwgMHg3YzVjZDI5OCwgMHhmMWE4Y2E3ZiwgMHhmMjg1MzRkNSwKLQkweDFhZWMwNTM4LCAweGY0ODhjMTNmLCAweDU3ZTBhYjdlLCAweGIzY2RmMDU5LCAweGZiOGQwNzAwLCAweDcxNDFkYzgyLAotCTB4MDViZDU1MzAsIDB4NjMyZGU3Y2IsIDB4NzA1MTFjZTgsIDB4NjI5YjljZjAsIDB4OWQ4YWMxYzAsIDB4ZjhiYmRmODIsCi0JMHgzZjhkMzMzOSwgMHhkMjAxNzkzNSwgMHgyOGI3MTBhZCwgMHg2ZDBlMzEyNSwgMHgzZWExYTdhZiwgMHg2YjVmNjQ2NiwKLQkweDA3ZWRhYWZjLCAweDc2YjQ1YjY2LCAweGNmZmIwZjhhLCAweDNjZDlkZjEwLCAweGRjYjg0Mjc5LCAweDQ3ZmNhNjY4LAotCTB4N2FlYTVlZjEsIDB4MWZhNDEzZWUsIDB4YWY3N2FmOGQsIDB4M2Q3YzQwYmQsIDB4M2ZjNWRmMTQsIDB4MGU3NWYyYTYsCi0JMHg5OGY3YzcyNywgMHgzOTFmZTQyYywgMHhlYTE2NGM2MSwgMHhhZjJlMzU5ZiwgMHgxNzI5OGZlYSwgMHg0YmNmZjkwMywKLQkweDNiNDA3YzQ2LCAweDdkNThkZjI4LCAweDkxODk1MGFhLCAweGU3MGYzNmYzLCAweDRiZTc2ODU3LCAweGIwOWY3YzAxLAotCTB4NjdjODU5YWEsIDB4YzhkYjhjYzMsIDB4N2RmZGI1YzcsIDB4YjhjMGY1YzcsIDB4MDM4NGVlZDAsIDB4N2I3Njg1YzYsCi0JMHg0MzZlZTZhZCwgMHg0ZmUzNzBlMiwgMHgyZmJjNzE1MSwgMHg2ZWIxOTcxYiwgMHgwNGViOWUyMiwgMHg0MjBlODE1ZSwKLQkweGUxM2EzNzE4LCAweDVlM2QxMDMwLCAweDRmN2JmMjI3LCAweDU4ZjFmMmE0LCAweGE2NWYzZWIxLCAweDQwZDBlODEwLAotCTB4ZmNmYTU4ZjksIDB4OWRhNDZiOTgsIDB4YjZlZmE4MmQsIDB4MjBmNzEzNWEsIDB4ZTgyNzNkZGQsIDB4NjdlZGE0ZTIsCi0JMHgzY2VmNjg4NSwgMHg1OWU4YmYzNywgMHg5MmIzZWI5NCwgMHg5MTIwYjU1NiwgMHg4OTNhYzc1YywgMHg3NTc5MzVlZiwKLQkweDRhY2RlMzIxLCAweDFhZGM4MzJjLCAweGJmZjU4MWU3LCAweDdjZDRmZjMzLCAweGQ3NTlmY2VjLCAweDVmZDQ0MmQ2LAotCTB4N2JjNjBmMjAsIDB4YWZjMjg3NTIsIDB4MzcwNjlmZDEsIDB4ZmJkMjIxZDIsIDB4YzFjNjFkMjAsIDB4YmIxMWQxYWYsCi0JMHgwYjEyOTNhMSwgMHg4OGJkODE3NywgMHgwNDdlY2Q0ZiwgMHg5MWU3ODg0ZiwgMHhmOWQxZDlhYiwgMHhiMmNmMTEwMSwKLQkweDM0NzlmMzM0LCAweDZiZWUwODg0LCAweDllNTAwZjVjLCAweDAxOTllNWQ5LCAweDY5ZDYwNzlmLCAweDcyMGZhNGRlLAotCTB4NTllYzZjMTQsIDB4NzZlMzA2MzAsIDB4ZmZiNGVmMDAsIDB4ZWRlMzc4NGIsIDB4YTdjYjJmZTUsIDB4YjU4Zjg5MWUsCi0JMHhmYjM5YTVmMSwgMHgzODNhOWYyOSwgMHhkNWY5NGVkNywgMHg2OTNlNDVkMywgMHg3MTQwZGViMCwgMHhjOGFiZjA3NCwKLQkweDk2NjI2ZjFlLCAweGE5ZGRjYTMwLCAweGYyZDViZWMyLCAweDNjNGE4ZmZjLCAweGMyN2ExOTNlLCAweGIxOGJlZWFjLAotCTB4NTllNjg3OTMsIDB4MWRjNzk0YWIsIDB4YjFmM2MxNWEsIDB4NDZlMGVkMDcsIDB4OTA2MGVjOTUsIDB4MDU3M2JhZGIsCi0JMHg3NjVjYTVlZCwgMHhkMmFlZGZiNywgMHgyNGE3OTk3OSwgMHg4MGI0M2VkZSwgMHg3ZGIzZGM1MSwgMHhlNDVmYThiNiwKLQkweDU4Zjc2YjBjLCAweDdjZDE2OTQ4LCAweDQ2MGVmNmY3LCAweGM4ZWVkZmY0LCAweDU5NGNmYWE3LCAweDE2ZmRjYjljLAotCTB4NzllZDM3ZDcsIDB4YmY2YzRmZGMsIDB4YjdlYTg4YjksIDB4NTJjNzg0MjQsIDB4ODdkODhmNWUsIDB4ZjVmYjgxZGYsCi0JMHg3ZjFmYjA1ZiwgMHhlM2YzNDc5ZiwgMHhiMDc1MWM3OCwgMHhhMzhhNzdmYywgMHhiNDBjZWEzZSwgMHgyYTJkZmQyMSwKLQkweDgxMThlNWYxLCAweDNjNGNlYTVlLCAweGJhZjQwYTllLCAweDdhNjE4N2IzLCAweGZhMjE3MzVmLCAweGU2YjJkNzNiLAotCTB4NDQwNTBjNTcsIDB4MmU5MDViYWYsIDB4N2EwNzhkZTcsIDB4ZWJkMWQwMmQsIDB4OTcwNTRmNTYsIDB4NDY5NzA4ZGIsCi0JMHg1YTc0ODNhZiwgMHgxNzM3OWYxYywgMHg3NmZiNjMwOCwgMHg5YjlmZTc1NywgMHgzMmU4M2ZkMCwgMHgzMGRlNzk3YiwKLQkweDk3OGM4M2NmLCAweDJjZjAzMTBmLCAweDZlM2MzODU0LCAweGY2NzgyNjU5LCAweGMxYzRmZjEzLCAweDEzN2MyOTczLAotCTB4OGNlOWE3NGIsIDB4ZmM0OGM3ZjMsIDB4OTBiMGFlOTMsIDB4M2ZjYTJjYTMsIDB4NGYwMzU5NGYsIDB4N2M4M2I4ZTIsCi0JMHgwYmY3MGY3NCwgMHhkYjJkYzA4NywgMHhiYTZlOWU4OSwgMHgwNTE3ZWY5OSwgMHhlM2VmNWM2ZCwgMHg4YzA2NTFiZSwKLQkweDdmOGM1YjNmLCAweDg2N2ZhYjUzLCAweDk2Y2RkYjBiLCAweGUxYmExZTM4LCAweDFjZmYwMDdmLCAweGFiYmIzZjUxLAotCTB4ZTZjNmYyOTEsIDB4OGU5ZTMwY2MsIDB4NzkzNDczYjUsIDB4Y2Q1M2VkYTksIDB4NzQ2ZmVkMTMsIDB4MWU2MjM2Y2UsCi0JMHhmZDFhZGNmNywgMHg1YmJjZDBmZSwgMHg0ZGQ0ZmVmOCwgMHhjY2ZkZjU3MywgMHhhMDNlMWI2MywgMHg2Y2Q2NDZmYywKLQkweGJiY2RmYzQ0LCAweDhhZmY1ZjQ1LCAweDY5NWY3MDY3LCAweDNkMmJlZTBjLCAweDAzMjllMjJiLCAweDQ3YzgyN2MwLAotCTB4YjI1ZDRkYmYsIDB4ZjNhMDc2ZjMsIDB4MjkyZjNmMzEsIDB4Y2NjZjM4YzMsIDB4OWJiZDg2YjQsIDB4OGVlOGZjYTEsCi0JMHg2ZGZlNTQ3MSwgMHg3NDdmZjdkYSwgMHgxNzc3ZWIwYSwgMHg0MTg2Nzk1MSwgMHg5MGM3ZTdlMiwgMHg4YWNmODEwZiwKLQkweDJlYmU2ZjJiLCAweDg5ZjUxMTJmLCAweDQ2NzZmN2U4LCAweDgxMDkzZGVmLCAweGNlZDBkOWY2LCAweGYyOWYzMTMzLAotCTB4Zjg4ODY3M2UsIDB4NWUyMmMwYzAsIDB4MDcyNGZkN2YsIDB4NTViZGVkNGYsIDB4OGNlYWY4YTUsIDB4ZTQ3Y2M4ODQsCi0JMHhmZjRiMTc4MywgMHg5MGYzMGNiMywgMHg3MjhiZTQ2NywgMHhiMGUzNTNkOSwgMHhjMWY0YWNmYywgMHhmZDY3ZDQ3YywKLQkweGQ3MDU3NjhkLCAweGM3OTMyOWExLCAweDRiMTdjN2E1LCAweGUyMjc2M2RkLCAweDdmZDEyYzc5LCAweDRkNTc5ZjIzLAotCTB4OTEzMjJmZDksIDB4ZjE1NDY2NGYsIDB4YTc3YmM2N2UsIDB4M2I2MDE2YjUsIDB4ZjcyYTc5YzMsIDB4MTExMjVhNjcsCi0JMHgxOWJmMWFmZiwgMHhkOWE0MWY4NCwgMHgyNzIxN2U4ZCwgMHhkOWJkZjQ5ZSwgMHhmYWZkMDI5MiwgMHhhNzE3OTIyZCwKLQkweDI2ZjI5ZmU4LCAweDlkOTgxN2M1LCAweGZiZjNhNzlmLCAweDZiOGMxNGYyLCAweDNjZjFmNzRmLCAweGQ4YWI2ZGQ1LAotCTB4YjZmM2I0MmEsIDB4ZDY1M2U5NWQsIDB4MGI3NGZkNDAsIDB4N2EwNGY1YTMsIDB4YmQyMDY1MzcsIDB4MjcyMGZlNGYsCi0JMHhhZWNjODkxMSwgMHg5ZThkNzdhNywgMHgzZTc0NmI2NiwgMHhjMGNmNGY0MywgMHhmZWZjNzZhNywgMHg4ZWI1ZTRjYiwKLQkweDdhNTFhZDllLCAweDA5Y2UyOTFlLCAweGEwNjQ2NTcwLCAweDVlOTZmODVjLCAweDEzOGUwZDhmLCAweGUzZjE4ZmM3LAotCTB4ZjAyNzI0OGUsIDB4NDZkZTU2MmYsIDB4YmUyNGViZTEsIDB4YmZlY2MyY2IsIDB4MzZjYmU0MDIsIDB4ZTFjNzJmOGQsCi0JMHgxZTg2NGNmYywgMHgyYjk0M2YzYSwgMHgwMWQxYzc3OSwgMHgwYjVlMjlkYywgMHhmZTM4YjllOSwgMHhjNmNiZTBkNCwKLQkweDUwZDk3MmQ4LCAweGQxNGZmMGI4LCAweGU3ZmU1MGVjLCAweDk2NDNmOGM2LCAweDdjZWY4N2E4LCAweDE3MGEzOTJjLAotCTB4ZjExNTNmOGMsIDB4ZjBlMWVlYzAsIDB4Yjk5YTkyZWMsIDB4ODY3ZTExNWMsIDB4ZDI2OGI3MTYsIDB4M2Y1ODdiZTYsCi0JMHg3ZTA0Y2FkZiwgMHg3MTgzZGY4ZSwgMHgyODViZGEyNiwgMHhmNzA4MzcxZCwgMHgzNjgzYWMyNSwgMHhkZmQwYTA5ZiwKLQkweDg3N2UyZDczLCAweDFkZjZlNjA5LCAweGNmZDExZDU3LCAweGJhODM0MTc3LCAweDgxMWQ1ZDcwLCAweDI3OWMyMzZmLAotCTB4ZTg2M2ExMGMsIDB4M2U2MjJkOGYsIDB4ZmEwNjVmZGEsIDB4NDQ1NDY3ZjAsIDB4Mzc4MzRiZDcsIDB4MjM0ZDRmMWUsCi0JMHhmOWY4ZDFjOCwgMHhiYTI3ZTNjNCwgMHhmODE5M2Q2ZSwgMHgwZGU3Y2VkNCwgMHhlNzEyZjdjZSwgMHhiODlmNmYxOSwKLQkweDVmNzhmYTRkLCAweDI1Y2I4OGIyLCAweGM1NzBlMzQ3LCAweDEyYzM1ZjU4LCAweGYzODcxNGJjLCAweGQ1YmZlNDRhLAotCTB4NzI4MWJkODAsIDB4NTE5YWE2YjksIDB4NmVkOTI0M2MsIDB4NjY5YzM4YTAsIDB4MjdjNDhjNzcsIDB4NDhjNTVmNTcsCi0JMHg2MzJjZDU0ZSwgMHg5ZjIwNWNlMiwgMHhhNjNkM2M1ZiwgMHg5MzFmZGViMywgMHhiNzUxNmJmZiwgMHhhZjdlNDQyZiwKLQkweGYwZjJlYmI3LCAweDZlM2NlYzZiLCAweDFiOTM1ZWJmLCAweGY1MDJiN2FjLCAweDg4Nzk2MGZjLCAweDQwYWRlZjllLAotCTB4ZmY3ZjEzYjksIDB4MWU0NWNkNTcsIDB4MjhiZTRlMmYsIDB4ZmJjNmIzZDEsIDB4ZjllYTA1NjYsIDB4MGFkZWVhZTQsCi0JMHgyNDBmNWY5NCwgMHg3NWM1ZWVmOSwgMHhlM2MwYzM3ZCwgMHhkY2Y4ZjFlYSwgMHhlMmQwNjE5YSwgMHhhNzQ0OTdjNSwKLQkweDc4MzQ3Y2YxLCAweGQ4MTFkYWNlLCAweGYxNjhlMzgxLCAweDBmNTI3M2E0LCAweDM4YTY0ZjhmLCAweDNjODFmZjQ1LAotCTB4NGJhMDY3YTQsIDB4MjA2NjlhMjMsIDB4MWNmZjNmMjcsIDB4MzdmYzUxOWQsIDB4ZjcyNmVkZTAsIDB4N2I5YzlhZWQsCi0JMHgxOGRjZTQ5OCwgMHg1Y2ZkZDdhMSwgMHhiZTljZjg5ZSwgMHg0ZTFjMTliZCwgMHgwMjFkY2JjMiwgMHg5ZTg1MzMyZiwKLQkweDI2NTNiZjNkLCAweGFmODY2NDNmLCAweGExNmUyYjc4LCAweGIyMzc5ZjA0LCAweDhmYjFmMTMwLCAweDhmNzZhM2Y0LAotCTB4YTgzMDc5ZDcsIDB4NjNmZGIxYmEsIDB4NGJiN2QyMGUsIDB4ZmRhM2E4NWUsIDB4MGNkYjMxYTUsIDB4OTdkMThkNGMsCi0JMHhiYTA5YzM2MywgMHhlZmM2NDFmYiwgMHgyNzk1ZDY0ZiwgMHhkYWVhNjY3NCwgMHhhZjljM2E0ZiwgMHgxZWVkMmZhYiwKLQkweGVjYmZhYmE3LCAweGI5NWQzMmY5LCAweGFlYWE2N2EyLCAweGFiNTdlNGZkLCAweDdiY2JlNTc0LCAweDdmYjVkM2FmLAotCTB4ZTAzZGY1MDQsIDB4Y2NlZjViZjUsIDB4ZWZmZmJkZDEsIDB4Yzc5ZWIzMWQsIDB4MjMyYmRjZmQsIDB4N2Y3ZGQzZGYsCi0JMHg1ODE5YzQ0NiwgMHgwYzUzZDdjOCwgMHhkMWE4NWZmMywgMHhkZDVhYzVlZiwgMHg3NGQ2NjBmNywgMHgwNzI4OTU0YiwKLQkweDBkYzJkZmY4LCAweDFhN2Q0ZjNjLCAweGJmYjYyYzYwLCAweDdiN2E2ZDQ1LCAweDUwOGIyNjYyLCAweDU4NTM1ZjdlLAotCTB4Y2MzMzc2ZjIsIDB4MzdkN2QzNTMsIDB4YmMyMGVlMWMsIDB4MDEzZGQ5N2UsIDB4MGMwYmRjNjMsIDB4MTk3ZDBmNDgsCi0JMHg4NThjNjc2MCwgMHgxNGIwYTQ3ZiwgMHg4OTFiYjNjYywgMHhmZDZjYmZmZiwgMHhkN2UxNTg4YiwgMHg0N2IzN2Y1YSwKLQkweDU1NTZmZWJmLCAweDYyYjZmZWJmLCAweGJjM2JmYWZkLCAweDlhNGZmNWZhLCAweDk3N2Y1ZmEyLCAweDI5ZmViZjRmLAotCTB4NGZmNWZhZDUsIDB4M2ZkN2ViZjUsIDB4ZmQ3ZTllN2QsIDB4ZjVmYTAyMzMsIDB4NWZhZjU1MWYsIDB4ZmQ2NmVjZjcsCi0JMHhkNzJlZTc3YSwgMHhlODVlNmJhZiwgMHgzNmZkZmQzNiwgMHhkMWEwNzQ3MSwgMHgwYjRmMjY5MywgMHg3NzExZGRkNiwKLQkweDE5ODE4ZTFmLCAweGEzNDJlODYyLCAweDdhZmU4NWIzLCAweGRkMWE1ZmNhLCAweDc4ZGQxM2Y2LCAweDg2MzFmNGYxLAotCTB4NmZjYmJjODksIDB4OTk4NTFmNDgsIDB4N2Y5ODE3NDAsIDB4M2Y5MmNjOTksIDB4MWJlZjNkMjcsIDB4ZDQzYTk5OWQsCi0JMHg1NmU0ZDBiZSwgMHhmNThmM2VhYywgMHg2NzkyNDc4ZiwgMHhmMDk0ZjQ0MywgMHg1M2Q0NDc5NywgMHhhMzViMmZlOCwKLQkweDc0NDhmMmZlLCAweGZkMDMxYWZhLCAweGEwNmY4MzRhLCAweDRlY2RkODM4LCAweDA0ODljNzBlLCAweDg4N2ZiNzZlLAotCTB4M2I0Mzk3NTUsIDB4ZTAwNTMzNjgsIDB4MDNlNzBkN2QsIDB4MzA5NmJmZTMsIDB4ZGYxZGUyOWUsIDB4MWM0NjlkNjMsCi0JMHg0M2Q2MTZmNywgMHg0MjJjZjljZiwgMHhlYTczMDBjZiwgMHg2NDJjN2RjZSwgMHg3Zjg4OTM3ZSwgMHg4MTU5OTc1YywKLQkweDRhZGU5MTcxLCAweDE2MTdhMzk0LCAweGY2ODM3YTljLCAweGI5NGM1ZWIzLCAweDRlMzI3YmE0LCAweDY4Yzk3ZWUzLAotCTB4YjkwYWNlYzYsIDB4MjZmYjg3ZDEsIDB4OGFiN2VlNTAsIDB4YTk4ZmEwNzgsIDB4OWU3YzE4ZWUsIDB4ZGFjYmYxMTUsCi0JMHg1N2U5MTJlOSwgMHg3ZTUwMjcyNiwgMHgyNTc3ZWQ1NywgMHhmZmI1NGZkMiwgMHg5OTc1OWZjMywgMHhmZjFlYWUzYywKLQkweGMzNWNiMzVjLCAweDBiYjA5YjZiLCAweDVmNzA3ZGI4LCAweGJiZjU0YWE2LCAweGIyNzZhYTYwLCAweDk0NGViZDQzLAotCTB4ZGYxZmQwZmYsIDB4NDRkODc4YzcsIDB4YzJjN2I5ZmUsIDB4YTI5NTA0ZTEsIDB4ZTNhNjRjNWMsIDB4YjhlZWI0NzQsCi0JMHhjYmVlNzhmZSwgMHg0ZGYwZTE2MywgMHgyMmU1OTg1MCwgMHgwMmNmMWZiYywgMHg5NWRlMTc2NCwgMHhkZmZkNGY5OSwKLQkweGUzODg4MGFiLCAweGZlYzM4ZmZkLCAweDE1Njg0YTNkLCAweGMwN2ZkMWM1LCAweDViZjQ3MWY0LCAweGEzOGEyNTlhLAotCTB4ODVlMDAwZmYsIDB4ZjVlOWM3YTcsIDB4Y2FkNjFlYTAsIDB4MzNiYzA1YWIsIDB4NGZiYzFkYjAsIDB4MTg0YjM0ZjcsCi0JMHhmZGJhZmFmZiwgMHg3OGMzZjYwZCwgMHg3ODg3ZjgzZiwgMHg1OWExZTJkNywgMHg1ODY2ODc0MCwgMHg2MDNmYmRkNywKLQkweDhmOGJjZjE0LCAweDQxOTI4ZThiLCAweDkzZmU2M2EyLCAweGY3YWI5ZjkxLCAweDlmYjhkYjI4LCAweGQ0ZWJkMjdhLAotCTB4ZDE5ODdkYzUsIDB4YmYyMGU3ODUsIDB4YmNjMmRlY2MsIDB4ZTczMWIzZTUsIDB4ODdiZDYwMGMsIDB4ZTk3NDdmYmQsCi0JMHhiZjJmYmUyOCwgMHgzMTY3NjU2NiwgMHg0ZmQ4OGRkMSwgMHg3ZWU1N2JiYywgMHg5NzhhY2IyYSwgMHgzZWYxMGFmMiwKLQkweGY3Y2M1NzJhLCAweGM3ZDQzNzI2LCAweDg3NjJiYmYwLCAweDkwZTQ2M2VmLCAweGNiYTdlZWQxLCAweGQ5NTllZTU3LAotCTB4NDY3OGZiNDMsIDB4ZGFkNjZmNzEsIDB4ODE5YzNiYWMsIDB4MmZjNzc4OTgsIDB4NjMxZDg1MzMsIDB4MWE2NzMxMDksCi0JMHhmYzM3YTYxMywgMHhlMTlkMzNiZCwgMHhlNTRlY2FmYSwgMHhjYjVmYWM2YywgMHg4ODZjOTc5ZSwgMHhjZjQxNDZiNywKLQkweGQ3YmEwOTJmLCAweDYwN2IzNmUwLCAweDVlYjgxOGJjLCAweGU4ZGVmNDEyLCAweDNjZTEzMWVjLCAweGU4YjU4MjVlLAotCTB4ZDJiNGI4YzEsIDB4ZDNmYmE2ZTMsIDB4MWM5MzcxNmUsIDB4ODNhYzQxYmEsIDB4OGRkNGEwZjksIDB4MGFjYzRhZTcsCi0JMHg1ZWM1Zjk5ZSwgMHg4MzJmZGE3YSwgMHg2NGJjZjcyNiwgMHg3NmVmYjg2NCwgMHgyNDM1YzU0ZiwgMHhjZGM5NGQ0ZiwKLQkweDhmYTA2ZWRlLCAweGM4YjRiZTFmLCAweGFmMDYxODE5LCAweDUxZWNkM2RhLCAweGM1Y2FjNDJlLCAweDVmODUzMmU3LAotCTB4YzY0ZDk5M2UsIDB4MWUwNjE5NzUsIDB4NzQzZjkzZDIsIDB4NTg3ZTZmZjIsIDB4N2U1OGYzYzEsIDB4Zjk0NjAzZjgsCi0JMHhmYzM5NmNlZCwgMHg5NGYxNDY1NSwgMHhmNzI0YmNjYSwgMHgyZjQyMmM1YywgMHgwNjA0YWMzNywgMHhlOGY2MDMxYywKLQkweDk4MGIwYjRhLCAweDY2YjIxZjQxLCAweDk4ZDJkM2IyLCAweDQzNjllODhmLCAweDNhZGU4YmU5LCAweGY2NWVjZWY4LAotCTB4Y2ZmNDYyYmIsIDB4YWZmOGFiZWYsIDB4MmEzYjJjNjYsIDB4ZjJjN2FmNWYsIDB4NzU4ZmIxZmEsIDB4MWQ5YTBlNjIsCi0JMHhkZTUzNzE2MSwgMHhlMGFmMTg1MCwgMHhhZmY3MTg0YywgMHgzYjYzNTdmYiwgMHgxZjc5OGY3YywgMHhlMDFlZjBkNSwKLQkweDU3NDI3N2I5LCAweDI2ZGJkYjA0LCAweGViMDc3ZDFlLCAweDk2ZGRlYzEzLCAweGUxMmVmODAyLCAweDAwNTVlNjE2LAotCTB4ZjJkZWE5NWYsIDB4NzRmMDA1NjksIDB4YjAyZjQzOTUsIDB4YmRmMTM2ZDQsIDB4MzdlZjBhNmQsIDB4ZGQyNmJmN2UsCi0JMHg0M2RmODdiZSwgMHhmYjEzMDU3MywgMHgwNDVlZmNhMiwgMHhkNTIzM2Y2ZCwgMHgwYWFkYTdiZSwgMHhiZWExNTZlNSwKLQkweDhmODE0MWZlLCAweGNmZTNmYjE0LCAweDMwM2Q2M2U3LCAweGFkMTY2OGRjLCAweGJiZDQ0MDdmLCAweDU0Zjc4ZmVjLAotCTB4ZGQxNjVjZjEsIDB4ZmY0NTliZjcsIDB4OTcwMzc2NDksIDB4ZmIxMzJhNTcsIDB4OTM3ZWJjYjYsIDB4ZjU2YWI3YTgsCi0JMHg2NWY2MjYxZSwgMHhhOGFiN2Q3OSwgMHhkZTc5ZGIzNywgMHhlZWI3YjAxMiwgMHhmYzYyYjVmYiwgMHgyYzBjNWJiNCwKLQkweGVlY2Y0MzEwLCAweDEwMmMwOWI5LCAweDM1YzkxZjQzLCAweGQxYjJiYWM5LCAweDNiMjVjZmNlLCAweGJlZWE2NDY3LAotCTB4NWJiZGZhZDMsIDB4NDU3ODliOGMsIDB4NGIzYmVlYmUsIDB4ZmI3ZDM4ZTEsIDB4Y2ZhNGM5YjksIDB4MzY3ODEwZWUsCi0JMHhlYWU5OTU2NSwgMHhhY2ZlZjNiNSwgMHhmMjczYjQ1ZCwgMHhhYTdiOGE3NiwgMHhhYWYzZGZhZSwgMHhlMDcyODQ5YSwKLQkweGRkMWFlNWVjLCAweGI3NDgyZDdhLCAweGQzZjIzODc3LCAweGJjMjFiZjcxLCAweGEzMzUzYTEyLCAweGE3ODhiMTNjLAotCTB4NjgzZDNjNTMsIDB4YTU1M2MwNWMsIDB4N2I4ODllNzIsIDB4ODUzOTU5YWUsIDB4NmU4MDdiY2EsIDB4OTVhMWZlYjEsCi0JMHg4MmVmMmE1ZSwgMHg5ZmNmMGFiMiwgMHhiYzJhM2Y0MywgMHg2MGZkMGVkZiwgMHg4M2Y0MmI3OSwgMHgxZmExMDdjZiwKLQkweGUzMDAzZTdjLCAweGY4NjZmZDYxLCAweGEwOWJjYjBlLCAweGI3ZGYyYzNmLCAweDdiZTU0N2QyLCAweGI5NTM1NjU3LAotCTB4Y2E5ZmE1NzUsIDB4YTNjZTU3NmIsIDB4MDMyYmRkZTcsIDB4YjJiMzVjZjQsIDB4OGU2N2VhOWUsIDB4NmJlZGZhZTIsCi0JMHhiMzk0MDVlNywgMHg5OTgwYmNmOCwgMHhlN2EyMmFhMywgMHg4MGJjYjQzYSwgMHhmZWYwZDMwZSwgMHhiOGEzY2RkYywKLQkweGZlNjVjYzFjLCAweGZlOWMyZGE3LCAweGVjYzg5ZWU5LCAweGEzNGY5ZDBkLCAweGU3ZTI5YmRmLCAweGExYjE5MWViLAotCTB4ZDU1ZGVhOTksIDB4M2JlZDFjN2MsIDB4YWNiMTBlZTYsIDB4MTU4YzdlNGEsIDB4ZWE0YmY1ZGIsIDB4MTk5N2NhNmEsCi0JMHhjY2VhZTNjYiwgMHgyNTZhNjIxMywgMHhmZTk3NGViZiwgMHgxM2U5MDg5NCwgMHg1ZjJmNThhNSwgMHhkZmMzY2NmMywKLQkweGUzMTAxZDUzLCAweDNlY2Q4NWM4LCAweDhhNjU4ZTljLCAweGM0ZjMxYmJmLCAweDlkMDBkZWVkLCAweDA4YmRjZmVmLAotCTB4OWIxZjgzOWQsIDB4YTYyYWYxNzQsIDB4YWVlMmU5ODIsIDB4YzlkMWRiZDEsIDB4NzY3NGNhMzMsIDB4ODliMTdjYWEsCi0JMHhiZWIyNTlkYSwgMHg3MjY3NmJhNywgMHhkNWRhZWFkNywgMHhjN2JiY2QyZSwgMHhjNTE4Zjg4MywgMHhiMGRlNjFlNywKLQkweGI4YzA2NThhLCAweGQzMzdkYThiLCAweGJhYzVlYmI4LCAweGJkZjk3Y2MxLCAweDNlMjQwN2Q2LCAweDNkYmY2MTVmLAotCTB4YjVmMzE0ZWEsIDB4M2FiOTIwNmMsIDB4NDU4YmM1YzYsIDB4Y2EwMzIxNDksIDB4OWQ3ZmY3YzMsIDB4YzhmYWZjNDQsCi0JMHg0NzhhMDY0MywgMHgwMzYxNjU4ZSwgMHg1MDc4ZDdhZSwgMHg4MTNmNThkMywgMHgxMjc5NTJmNSwgMHg5NzI4NTc0YSwKLQkweGYyYzY1NTMyLCAweDdlNDIyYzY1LCAweGFiNmZkODJlLCAweGU0OWI5ZDcxLCAweDI4NTY0M2MwLCAweDNjMGVjYjlmLAotCTB4YmE5MWYzY2EsIDB4ODkxNGFmNDksIDB4ZWNkMjI4ZjUsIDB4N2M0YTZkZDgsIDB4MjhkZDZmN2MsIDB4ZTdmNThmZjIsCi0JMHg5YmY3ZTI5NSwgMHhkMzJhMzk1NywgMHgxZmU4ZmVkMSwgMHhlNmNjN2YyMSwgMHg0MmRjZjMzOSwgMHhlMzJkYmZjMCwKLQkweGVmNmE3YTRkLCAweGMzMGQ1NWVmLCAweDc4N2RlMzllLCAweGYyY2RmNDk0LCAweGZiZmFjMzNlLCAweDFmZGU4MWI4LAotCTB4MmI5Yzc5YzYsIDB4NWU2NjAzZjksIDB4MDhjMmE2YjEsIDB4OGM2YjA5ZjksIDB4OTM1MDljOWEsIDB4ZWNiNjNkOTgsCi0JMHhmMzMxNjI0ZCwgMHhhYmU1NjQ3OCwgMHhlYzA5MGEwNSwgMHg3NjRkZTEwMCwgMHhlN2NjNzQ2YSwgMHhlYTUyN2YyYiwKLQkweDIyYTYzY2M0LCAweDdmYjkzNzkxLCAweDhjZTE0NjY1LCAweDdiZWZkMWQxLCAweGIzMTQxZDA0LCAweGM1ZmY5MjRlLAotCTB4ZmM5NzgzNmUsIDB4ZTc1MzlmNDgsIDB4ZGIwYjVhNzcsIDB4NDQ1ZTc4N2MsIDB4OThiY2M3MWUsIDB4YjU5NjMzNjMsCi0JMHhmOTZiMzlkMSwgMHgyM2M5MzI2ZiwgMHg0Y2I1YzRmOSwgMHhjMTIzYmIwNSwgMHg3YjIxNjYxOSwgMHhmYzI2NWZiNCwKLQkweGY5MDkxZmQ3LCAweDA2N2Q5MWY5LCAweDY4ZTcyZmMxLCAweGM4ZjllMWY3LCAweGU5YzhmOWRlLCAweGQ0OWU2Mjc1LAotCTB4ZmE0NmVkNDcsIDB4YWZhZDNlNDgsIDB4NWY3YTc2MmYsIDB4MmU5ZDAwMGQsIDB4MjJmMzY4M2UsIDB4NmRjNTA5NzgsCi0JMHhiY2EwM2Y3NCwgMHgxMjU5NjI1YiwgMHgyMGYzYzFjMSwgMHg2Y2JkYjk5MywgMHg0MmM5NTZkYywgMHgxYjU3OWViMCwKLQkweGJmMDk4NzAyLCAweDgzMjFlYWJkLCAweDVkYTFmY2E2LCAweGVlODk4YTYzLCAweDc4ODMxZjY3LCAweDZlNWUyM2IxLAotCTB4NDM4MTljMmUsIDB4MWUxMzE2MTcsIDB4YmY3OTg5MTcsIDB4MjZiMWU2MjUsIDB4ODBiZmMzNWIsIDB4Nzg3Y2Y5ODcsCi0JMHg3NmUyZTA5ZiwgMHhjZmQ2ZWZjZCwgMHhhYTkyZGVmMywgMHg0YjdkNjM2ZiwgMHhhMGY5NGM4ZiwgMHg5NzNjZjhmMSwKLQkweDQ0YzRhN2Y4LCAweGYxZGFmMDU4LCAweDcwMDQ2ZTNjLCAweGEwZmM4NWJlLCAweDg4MjlkYzIwLCAweGI2OWZiZTVmLAotCTB4ZTMwYTY5YzQsIDB4YTk3ZWUwMzksIDB4MzBmMjlhYjMsIDB4N2YyODE4MjcsIDB4ZGYyZTllMzUsIDB4ZjM2OGY2MTcsCi0JMHg2ZDNkMjcyOCwgMHhjZjQ0YjM5ZSwgMHg3M2RmNzJkMSwgMHg3ZmM4NTMwYiwgMHhhZWQ2N2FlMCwgMHg5ZjE2YmNmMCwKLQkweGY3OGQ4ZDRmLCAweDI4ZTJkN2FkLCAweDQxM2Y1ZjIyLCAweGRmNzgzYmMwLCAweDQ3OWUzOGQ4LCAweGRiM2Q2NzY4LAotCTB4MjQ2NjRmMzAsIDB4OTU5MGM2YmYsIDB4YzBkN2U3MTcsIDB4NTRmZDIwZDIsIDB4NjUxZjI4NTgsIDB4YTRlNzk2YmQsCi0JMHg4ZjI5NTI5ZSwgMHhlNzk4OWUxYiwgMHhiYTc0MTE2NCwgMHhiOWVmYzFkNiwgMHgzYTM3ZTZkMCwgMHhkMWQxY2I4YiwKLQkweDA2ZmY5YzU5LCAweDg2ZGU1YTJjLCAweDI2MzRhNmFmLCAweGFiYjZiZmZmLCAweDZkNzVmYzhlLCAweGM0NDA2YTNmLAotCTB4ZjQxMjA2NDksIDB4ODIwZDQ3ZmIsIDB4NmQ5ZTA2MTQsIDB4N2RjMDRhYWIsIDB4MWZiZTM2OTAsIDB4M2Q3NWQwZDUsCi0JMHhkOGYyZWZiZiwgMHgyODVmNzQwMywgMHgzZDIyYTlmNCwgMHg3NWY2ODlkNCwgMHhmYWZlZjRlYiwgMHhlMjAxZmRhMiwKLQkweDQwNzhmOGQ3LCAweDk4MGZmZmJjLCAweDFlNWRhMTMzLCAweDY3ZTdmZmVmLCAweGNiZGY3ZjA5LCAweGU5YmY3MTRhLAotCTB4OTM4Mjg2Y2MsIDB4MjliNzAwMDksIDB4ZDFiOWQxOGYsIDB4NzRlM2YyNTEsIDB4YTU1ODNiZWYsIDB4MjZjZjc4NmQsCi0JMHhjYWY3ZTEyYiwgMHgwZmZmYWZjNCwgMHg5Nzg0NGRiMiwgMHhkZjVmMTJmZCwgMHhmMTNiNjhkMCwgMHgyZTBhZmVjMSwKLQkweDdkM2ZmNjA3LCAweDI4ZDE4NmZlLCAweDdkMjU3MmNmLCAweDkxYWU3MTNlLCAweDgxOGI3N2RmLCAweGM5ZGY3ODdlLAotCTB4Zjk3MGY1NTgsIDB4MGNiMjMzNjIsIDB4NWZjZjRjZGYsIDB4OGQ3Yjk3YTEsIDB4ZGE0ZjdiODcsIDB4ZDM3ZjkyNTQsCi0JMHg0ZjNkNzBiMywgMHg4NGIxMjVmZSwgMHhmNzQyMjhmOCwgMHg4M2I5YTNlNiwgMHg3OGRjMjFlMywgMHhlMTgwZTM2ZSwKLQkweGY0YjFmOTgzLCAweDQ1MmNkZGYwLCAweDY2Zjg2ZGMwLCAweDFlODY3OGYyLCAweGFmMjU3M2FlLCAweGUxYzc1ZGE0LAotCTB4ZjUwYjI5YmEsIDB4YjRlOWY3NjMsIDB4MGQ3YzdjZDgsIDB4YzM1NTAzYWUsIDB4Zjg2ZTJiOWYsIDB4MDI5YTc4YTYsCi0JMHg4YjBlNTRmMCwgMHhjMjJmZmFhNywgMHhmMGQzMDFkMywgMHhjMDRjZmNmMCwgMHhmMmNmNmZmMywgMHhkNjg2MmVmYiwKLQkweDZkZmI0MzdmLCAweDFlZmUxYzY3LCAweGM1MDliOWViLCAweDMzZmJjMDM2LCAweDJmYTc5ZmMyLCAweDA0YzJmNjhkLAotCTB4MDVjYjNhZmUsIDB4ZjkwYjk2N2QsIDB4ODk1ZjI1ZTMsIDB4NGM5ZjVmMDUsIDB4MGE5ZDY0ZjksIDB4NzJjMWE5NGIsCi0JMHgyYWVmNDJlNSwgMHg0YTdmN2EzNSwgMHhmY2EwMTBkMCwgMHg3OWJhZjY3YywgMHg0NDc3Zjk1OCwgMHg5OTAzODVjOCwKLQkweDM4NzhiMGQyLCAweGY0ZjllNjI4LCAweGE4YjliNThiLCAweGQ1N2RlZTY3LCAweGI0MmU1MGNjLCAweDVlZmRmYjA4LAotCTB4ZWYwNWE3NjcsIDB4ODhmMGQ1OWYsIDB4MDY3ODMyZTUsIDB4NWVjNTkxNGQsIDB4NjQ3Zjk3MmMsIDB4OGNjM2VkNTEsCi0JMHg2ZGUzZTA2NywgMHg2ZDFiZTM4YSwgMHhhYmY5ZWQzYywgMHgwZmFlNjJhYywgMHhjYzY1NjdhNSwgMHhjNTc0ZGZkYiwKLQkweGQ0MmY3NDJiLCAweDY0ODU3MmE2LCAweDdmYzZkN2VmLCAweGNlNWU5ZWJiLCAweDc2OTJiZjc1LCAweDVmOTdhNzAzLAotCTB4NDkzNGJkMjEsIDB4MWI3ZTI1NmYsIDB4ZjIyOTQxY2EsIDB4Y2JlZTA5NzIsIDB4ZmYzNDAyOWIsIDB4NDNiMWUwMjAsCi0JMHhlZGE3OGExYSwgMHhmOWI0NWU4MiwgMHhlMGQ3ZjM2OSwgMHg5MGI5NWM3NiwgMHg5YWYxYzFkNiwgMHg0MWM2OTQ5OSwKLQkweDE3ZDM1ZWQxLCAweGUxZmY0MjQ5LCAweDVjNWY0OGJjLCAweDBmNzNmMGExLCAweGZiYWQwYTE1LCAweGU5NTMyOWE2LAotCTB4YjEwMWNhNWMsIDB4ZGNiOTFlMmYsIDB4ZjgzZGVjMzQsIDB4Zjc2ZjAyN2QsIDB4MGY2M2ZjNWUsIDB4MmVhMWI1ZmEsCi0JMHhjMDBiZGQyMywgMHg4ZGNmNWU5NCwgMHg0YmYxMmY3OCwgMHgwYzMzZGQwYSwgMHhmNzhkNTRmNCwgMHhlMmZkM2QxYywKLQkweGYzYjQ0NGY5LCAweGYyZTJjY2RlLCAweDJlMmNjZGVjLCAweGNhMmUwNzBmLCAweGU0NWU3NGQ1LCAweDcyOWM4ZmM1LAotCTB4Y2U5ZmZkMGMsIDB4NGQzZWM1OTIsIDB4MDM5ZTBmNGYsIDB4ZjNjNjU4ZDksIDB4MWVjMmVkZGYsIDB4NTdkOGJmYjAsCi0JMHhhN2RiZjA4ZiwgMHhjNTJjYzRmYywgMHhiMjFmZGJkMCwgMHg0NmQ3MDRjYywgMHgwYmNkMjQ1MywgMHhjOThmMDVmZCwKLQkweDgyZWM5YmFjLCAweDZkYWZiYTVlLCAweDkzOWI5Y2YwLCAweGZjYTlhMWUzLCAweDhlZjY4NjU5LCAweGUzZGY4YmJkLAotCTB4ZTU0YjNhNzYsIDB4M2VlMDE2NzIsIDB4YzYxM2VmMDQsIDB4YzNhY2U0N2UsIDB4MmYxODcyZmEsIDB4YzNiZGZhM2YsCi0JMHhhMTMzZDdjOSwgMHhiMmEzZGY4MiwgMHgzODNmOGFlOSwgMHgyNGI4OWVmMSwgMHhjN2ZkZDE4OSwgMHhlYTM2YzgzZiwKLQkweDU3YWRhMWNlLCAweDJjZWMxY2I5LCAweDNiNDFlOWVmLCAweDI4NTRlNDJlLCAweGZiYjNhNzJmLCAweGZiZGEwYjBlLAotCTB4ZjJmODVmMWEsIDB4OGFkN2JjZjgsIDB4NGVkNzdjZmIsIDB4MzllMzBlMjksIDB4ZDc4ZThkMTQsIDB4MjAyZTA3NjQsCi0JMHhiZTA0NmVkZiwgMHhhZmVjOWM3OCwgMHhjMjc0ZmYxZSwgMHhmMzE0YjM4ZiwgMHgxZWIwMjc1YywgMHg5NTg2YWZiYSwKLQkweDg3Yzg5YzliLCAweDhlODMwNmM1LCAweGU2YzlhZWRmLCAweDQxM2RhMzc0LCAweGYzZGQ5M2ZkLCAweDlhYmI0MTYzLAotCTB4MmMzYjk3ZGUsIDB4N2RiNWNmMGMsIDB4MTI3NjcxN2MsIDB4YjY3MmE3ZGEsIDB4OWQ3OWVmNjYsIDB4ZWQ4ZmM3ODgsCi0JMHg3YzRlYzk3MywgMHgwZGY2YjdmYiwgMHhkYTA3NzliMSwgMHg3M2YwMmRmMywgMHhjYjQ0YzdiYiwgMHg1OWZlYmM4YiwKLQkweDBiMzE3ZWQ4LCAweGU5NzY4M2RjLCAweDc3NTk3NmUyLCAweGMxNmRmZmRlLCAweGRhMmU4YmU3LCAweDlkOGM3NzU4LAotCTB4ZjdjYTY4YmYsIDB4YTJkMmJjZTgsIDB4ZmVmNDg5OGIsIDB4ZjQ5ZjkxNmQsIDB4MmE0YmM4YjYsIDB4OGFmMGYzMTQsCi0JMHhkZmQ5MTVlNywgMHhjNmY3ZmVkMCwgMHhmZjVkY2JjOSwgMHg5NzJkNDhmOSwgMHhkMGQ5ODU5NywgMHg2YmQ0YTM2ZiwKLQkweGUzNmE3ZjQyLCAweGI5ZDBiZmQ0LCAweDdmYzBiNzkxLCAweGQxN2YzNmVmLCAweDc3NTg1MzNjLCAweGVkODNiOGNjLAotCTB4Nzc1OTVhMmUsIDB4YThiYWVjNGEsIDB4YmU3NDc3MDQsIDB4NmI3ZmFhNzYsIDB4ZjA0YmU3YTUsIDB4Yzc4NzRhMzgsCi0JMHgzYTA1ZmY2OCwgMHhiZmVkMGUzYywgMHg1YWRmZWE4OCwgMHhmZDI1ZmM1OSwgMHhmZmExMWY4ZiwgMHhkMWZjMWQzYywKLQkweDdkZTkwYjdlLCAweDQ3ZGE4OWZmLCAweDI3MmZjMDZkLCAweDc4ZWY1N2JhLCAweDhlZWJmMzBhLCAweDdjZmVlOTliLAotCTB4OGFiM2I4NzYsIDB4OTJmZGFmY2UsIDB4M2JjNmI5ZDEsIDB4MDZmMjdmOGYsIDB4YjlkZGNkZTYsIDB4MzFjNWU0YzcsCi0JMHhmOTkxOGMwNiwgMHg0M2Y0NjFkZSwgMHhmMDg2NzMyMSwgMHg3OWVkMjkxZSwgMHhjZDAxNzY0MywgMHg0NWJkZmUyNywKLQkweDBmMzEzYjA5LCAweDM4YWM1MmNlLCAweDU4NTkzZjUxLCAweGYxMzU3ODRmLCAweDkzZTQ4NTgzLCAweGZhZDc5NzE2LAotCTB4MjY3Mjg3MWQsIDB4Zjc2YTNlNDYsIDB4ZjYyYmJjODUsIDB4MGI2MGZmOGQsIDB4YzBhZWNjMmMsIDB4ODE1N2Y3MzIsCi0JMHg5YzYyMzc3MywgMHhkOTYxZTFhZCwgMHg3NDIxZWZjOSwgMHhjNWEyM2Y5MSwgMHhmM2Y0MTViYiwgMHhlM2Q0MzAwYSwKLQkweGUzZmU3ODY3LCAweDRiMDM3MjNmLCAweDBlN2U2ZTkxLCAweGRmZTMwMGUyLCAweDAxYmQ4NGYyLCAweGZmMGE0ZjhhLAotCTB4OGY2YjNlZWYsIDB4ZjcyMzFiYzcsIDB4ZGYyYjY0NTYsIDB4OGI2ZmRmNGMsIDB4N2YxNTM3ZDMsIDB4ZWI5YmE0N2EsCi0JMHg4ZjM4MTU5YiwgMHg1N2U3Yjk0NiwgMHg4ZTc4NzliNSwgMHgxYmRjNTdhOSwgMHg1YmRkOTJhNSwgMHhlZTkyN2U1YiwKLQkweGZjZDVhYjk3LCAweGZiZjE3NWY5LCAweGI0MmVkOWVjLCAweDdjZjhiNTgzLCAweGExM2ZlNjIyLCAweGYzYzhkZmJlLAotCTB4YmM2Y2ViZWYsIDB4MTRmYmY3NWMsIDB4NDc4OWNmM2EsIDB4ZWYxMDRhNDUsIDB4ZGY5N2IyOWQsIDB4ZmMyNGU4MmIsCi0JMHgwZjMwMTc5ZSwgMHgyMGU2MzY1OCwgMHg5ZTA0MDc3ZSwgMHg0MzNkNzdjZiwgMHg1ZjllMThmNywgMHhhMGU4OWEzNywKLQkweGE1M2YzN2VlLCAweDY0MGVjOTdiLCAweDYzYWNmYzhhLCAweDc1NDNkMjBlLCAweGRlMjU2ZjY2LCAweDkzMjA3NzkzLAotCTB4NGE5ZDliZGIsIDB4OGM1OTYyNzcsIDB4YWIzNmI5ZmQsIDB4ZmJlYmU0OGEsIDB4ZDAxYjQ2ZWIsIDB4YmFmMGQ3M2UsCi0JMHg4ZDg1Yzg1MywgMHg4OTUwM2M1YSwgMHg2ZGZkZTI1NCwgMHhiZjc3OTdlZiwgMHhhMGYwN2E0YywgMHhjNmU3N2U5NSwKLQkweDRhOTNlODcwLCAweGEzNzE0ZmJhLCAweGFmYTVlZTk5LCAweGNiNzYzNDNhLCAweDJjNmZhODNjLCAweGE4YmU1MDMyLAotCTB4ZTA5NTkwZTEsIDB4ZGY5ZWI3MzksIDB4YTJkZjg0ZWYsIDB4MzQzYzZlYmUsIDB4YTgwZjdlOGEsIDB4YmNhMTE2Y2UsCi0JMHg2ZjA0YzZhZSwgMHhkNDk3ZWUxMSwgMHhkZDE2ZmExZCwgMHhiZWU2N2YyNywgMHgzNzI4MzliMSwgMHgzOWFhYTc0ZiwKLQkweDdkZWU3Zjc0LCAweGY3OTg3NDgwLCAweGY4NjM2M2U5LCAweDc0YzlkNmZiLCAweGQxYjFkMjVlLCAweGFlMmUxODE2LAotCTB4Zjg5M2U5YTEsIDB4NjQwZWEzZmIsIDB4NDYxZmY2OTYsIDB4NzhiNThjZmMsIDB4OTE3OTQwZjcsIDB4YjhiMDNmNzYsCi0JMHhmOWVlYWMwZiwgMHhmMzE1MWNjOCwgMHg1NTdmODVhYywgMHgzM2VmN2Y2NywgMHhmZGFkZjdiYSwgMHgzZDM4NWJjZCwKLQkweGNkMDI3ZGYzLCAweGI3MWY4YjNmLCAweDAzOWRlODRlLCAweGZjN2NjOGE2LCAweDM1YmFhNjdkLCAweDllMjZmZjAyLAotCTB4Mjg2NzU2ODcsIDB4ZDMyN2RmYTUsIDB4ZWUzMWJmZjAsIDB4MDQ1N2Q1N2UsIDB4OTllN2I1ZGUsIDB4YjdiYTE1MTcsCi0JMHgxYzgxZWMwZSwgMHg3MzNhNTdkYywgMHg3NmY0NGNkYywgMHgzYTc4ZTM2NiwgMHg1NzhkYWQyZiwgMHgwMjcxYjgwNywKLQkweDU2NGU5ZTlmLCAweGZlZmFlMjI3LCAweGJhYWZjODU5LCAweGQ0ZWZkYzM1LCAweDM2MTlkN2RlLCAweDQ3N2FlMzU3LAotCTB4NmY5NGM5OGUsIDB4MjQ4Y2UwMzMsIDB4ZDY4ODdlZTIsIDB4Y2UwZjJiNGUsIDB4ZGZhNjRiYTcsIDB4Zjk5MDNhMTksCi0JMHhkMDNiYWQzNCwgMHgzMmJhNDMxNSwgMHhmYTQxYzZmYywgMHhmZTFiZjgzNiwgMHg5N2VmNDU3YiwgMHhmNTBkOTBiMywKLQkweGYyNjZhYmY0LCAweDMzMWM0ZWQzLCAweGYwM2MxZDkzLCAweDNiNzczZjFhLCAweDdiMmYxZWU0LCAweGFkZWYwNzI0LAotCTB4MTQ2NmZlMGMsIDB4ZWM4MWI1YzksIDB4Mzc2ZTZlYzgsIDB4YjhkZWU5NWIsIDB4Yzk4MTUzODEsIDB4NDMyY2ZmNjIsCi0JMHg4MTk3OGJkYywgMHg2Mzg1ZGFmNiwgMHhkN2I0NmVkNiwgMHgyMGZiNDllMCwgMHg0M2Q3YjYyMSwgMHhlOGRiOGZlZiwKLQkweGQyNzgwZmZlLCAweDFkMjYwOTM5LCAweDljZWZkMGY0LCAweDdkZjEzNmIwLCAweDY3N2Y3ZDBmLCAweGNhMGM2MDRlLAotCTB4YTAwYjNiZTksIDB4ZGY3ZTNiN2YsIDB4ZTQyZWVkNDcsIDB4MTk2MTI2MDcsIDB4NzhjNTMyZmUsIDB4NzY2ZmQ0OTksCi0JMHg0YmRlOTcyMCwgMHhlZmY4NzkxZiwgMHhmYTg5YjQ3YiwgMHg5YTBmYWExZSwgMHgxZTY5OTMwMywgMHg4ZWIwNzY3ZiwKLQkweDRkZjllNjYxLCAweDJmN2I3ZmVmLCAweDliZTQ4NTNiLCAweDk5ZTAzNzA2LCAweGJjNzhiZmVjLCAweGUyMGM3Mjc4LAotCTB4M2UzODVkZjcsIDB4NzA3MmU5ZTIsIDB4M2UwNGJmM2QsIDB4NWY5MGE3OGMsIDB4NzFkN2M1ZDIsIDB4OTcxMzU4ZmQsCi0JMHhjOWUzYWQyNywgMHg0MzFiYTVjZSwgMHg1NjlhZjI2MiwgMHhlODliN2IxZCwgMHhkYmU4YzA3MiwgMHg3MjI5N2E4YSwKLQkweGJkZjhjOGNhLCAweDYwMTk2MDZhLCAweDZmMGE2MTljLCAweGZjZTM2NzU3LCAweDllZjFjMWE0LCAweDY4NmU2ZmM4LAotCTB4ZWY0Zjc5ZTUsIDB4OWNlZGUyZmQsIDB4MjczYzc2MDUsIDB4OWNlZWI2ZmIsIDB4ODNmNzE2YWMsIDB4YWUzMTEyNGUsCi0JMHg4OWFhZjc2MiwgMHhkZWRjMjViNSwgMHhmZTJlMDk5NiwgMHg4ZDFiNGRmYiwgMHg1NTRlZmQyYSwgMHgxNGIxYmVlOCwKLQkweDUyNjMzODRmLCAweDhlYmRkMTBmLCAweDkwMTgyN2ViLCAweDVjYmQ1YTllLCAweGY4ZGE4NGY2LCAweDlhZmJiNGJjLAotCTB4ZTI5NzdiYjQsIDB4OWNkZGYyZjEsIDB4MzhiYmZlMDIsIDB4ZGUyYjcwMmMsIDB4YTk5YTdkZDksIDB4OGRiMzYyNjksCi0JMHhjN2FiOWZlZSwgMHhlYmNhMDE3ZiwgMHgyYjNlMGQwYiwgMHhiZDI1YmZjZiwgMHgzNzllZjQzMCwgMHg4ZWZjOTdkMywKLQkweGY5NmRmZmQ1LCAweGU2OGNiOTA3LCAweDI1MGRlYWQ5LCAweGM3N2Q1ZWEyLCAweDU4M2VmZGM5LCAweGJiZjQ5NTNkLAotCTB4Nzc0OWU3Y2MsIDB4YmVhMDY2ZTgsIDB4OTM5YWRmZjYsIDB4MDcyNGY1NGEsIDB4N2Q3ODkxZGYsIDB4ZjI2OTlkM2MsCi0JMHg5MDNlMDg2ZSwgMHhmYzVmYjA2ZSwgMHgzZGJlZmEwZSwgMHg0OGQ1Yzc4NywgMHg3OWJkZTA1OCwgMHg3YmEyNjQyYywKLQkweDBhYmU4NDYxLCAweGNmMDE4YTRhLCAweGQ0YjlmNzc1LCAweGJlY2JhNDQ0LCAweDU1ZTQ4MmQ2LCAweDUyZTBhNzk4LAotCTB4ZTg2MmNhZDMsIDB4YTMyY2Y4MjQsIDB4OWUyYWNjZjMsIDB4YmY4Yzk4NGYsIDB4ODg5YmUyNzMsIDB4YzkwM2JjZjEsCi0JMHgzYzQyMzhmYSwgMHhlYjRmOGYzYywgMHhmZjViMWY5ZCwgMHg3NzJlMWNkMywgMHgxZmI4NzM1YiwgMHgyNjFjZWJmOCwKLQkweDNjNzhmZWVjLCAweDIyNTgzYTcyLCAweDFiZDVhMGU4LCAweGNhZmM4YWI4LCAweGI2NGI3NmI4LCAweDg4ZmEwOTI1LAotCTB4ZDRmNmRmN2IsIDB4Y2FiZTUzM2YsIDB4ODViZGZkNGUsIDB4ZGUzZDYyMzUsIDB4OTIxNGRlNzksIDB4ODEzM2UxMjYsCi0JMHgzN2ViOGRmMiwgMHhmZjU3Nzk3MywgMHg1ZGQxNGQ0MiwgMHhmY2U3NGNiYywgMHg0ZGRjNzVhNywgMHg3MGIzMGZiZiwKLQkweGM2MjJjY2NmLCAweDhiYWQxN2U1LCAweDczMGI5ZjQ2LCAweGRmNjg0NTdjLCAweDRlY2JiNjQ1LCAweDZkZmE5M2U0LAotCTB4YWFkM2MxMzIsIDB4YzNiNjU5YjQsIDB4OGNkYmIzZmIsIDB4MGJkNWY3NjQsIDB4MDU2NmNlNzgsIDB4MTRkZDY5MTIsCi0JMHhlZjAwOThhNiwgMHgyMjQwOTU2NywgMHhjNWRiYjVkOSwgMHhjZGM0ZTBlZiwgMHhhMmJkZGEwMywgMHgxZjgzMGQ5NCwKLQkweGMyNjc1ZjBiLCAweDc0MzBjMTRmLCAweGViNDBjYTcwLCAweDg5ODEzMGI0LCAweGU4OTM0N2RmLCAweGVjZDljNzljLAotCTB4ZWU1OGFkYzAsIDB4ZWU5ZTdmMDMsIDB4YTA2YjZlOWYsIDB4ZjFlMjU1N2IsIDB4MjAxMmQ2N2QsIDB4ZTYyMjVkN2EsCi0JMHg3ZTMzZTFhMywgMHgwMzlmMGQxYywgMHg5ZmI0NGY4OCwgMHhmYTQxZGY5ZSwgMHg4Y2EwZjgyZiwgMHhlZTllY2MxNCwKLQkweGVjZmM5MGZhLCAweGJlNjZjNzY5LCAweGJmN2MyZGYxLCAweDE1MThlYzE5LCAweGNiZmU2ZGY1LCAweDA3N2Q0N2RmLAotCTB4OThlZDBhNzIsIDB4NjkwNTYzZGEsIDB4YTM2ZjRlMmMsIDB4ZDJmYjU5M2YsIDB4OGM0MzQ0ZGMsIDB4OTc2ZDZjYmUsCi0JMHhiNWE1OWY2OSwgMHgyMmUyNGU3MCwgMHgwNmZlN2Y2YSwgMHhhYWQzYWZhNCwgMHhhNjJjYWQzNywgMHg5YTM5MmJkZCwKLQkweGFmNWZhOTNmLCAweDRkN2ZjZGJhLCAweDM3ZWE3MWM0LCAweGRhNWU2OTE4LCAweDRjMDAwY2JhLCAweDZjZGI4NzI0LAotCTB4ODFmZmE0NjEsIDB4YWJmNTA4YWMsIDB4N2QyMGQzYWQsIDB4ZjQ2ODNhZTMsIDB4Y2QzZWVkMDQsIDB4Nzg3MThhNzEsCi0JMHgyZjJmYjZiYywgMHg4NjFkZTk1MCwgMHgwMDNmMTY0ZSwgMHhkYjdmNjJlMywgMHhlNjlmNzQxYywgMHhlMWFiOGVhNSwKLQkweDA1YmQ3MDYzLCAweGQ3MTk1MzVmLCAweGM1MWU3NzcxLCAweDE0YTcwZGM3LCAweGRkM2YwNjRhLCAweGYyMGU0ZDc2LAotCTB4MDdkODFkNzEsIDB4OTNhODg3MTgsIDB4YmRkMDZmMjIsIDB4NzRjY2M3YTYsIDB4ZTZkZDZmZWYsIDB4NzhlMmI3YTUsCi0JMHgwZDk5YWY3NSwgMHhmYzc3ZGY1OCwgMHg1NzA0ODk5YSwgMHg5ZTAyYmFkYywgMHhmN2EzODY3MiwgMHg4ZTQ4YmM4MSwKLQkweDYwN2YwNjM3LCAweDZiN2YxMDU3LCAweDliODE4OWYzLCAweDhiM2YwMGUwLCAweGM4MTljNWVlLCAweDkxOGNmNTgzLAotCTB4ZTFjZDdmMDMsIDB4ZWY2ODFhZjEsIDB4ZjM3ZDExMzQsIDB4ZTcwNjk5N2IsIDB4YWY5YjhjZWIsIDB4YWZiZTZlMzMsCi0JMHhlNjZmYTIzMCwgMHgxNjdjZDAwZCwgMHhlMDM2NmViZSwgMHg1ZmY3ODVmYiwgMHhiNzcxODQ1ZiwgMHg2OWQzZjViZSwKLQkweGJlYzk3ZDVlLCAweDdkNWZjODg5LCAweDMwZmZkMDM5LCAweGZkZTE3MmYyLCAweDJmOTJjZjMwLCAweDk1OWI2Nzk4LAotCTB4NzljNDZiZDYsIDB4YjM3NjQ3MjYsIDB4MjdhNzk4MmYsIDB4YjdjZjNmNTcsIDB4N2U5MTM1MTQsIDB4Y2M4OGUzNGYsCi0JMHhjYzEyOGUzMCwgMHgxNmZjNmZmNiwgMHg5N2VmZDMyZiwgMHgxZTljOGQwNSwgMHg3NDZkOWI4MiwgMHg4YmJmYWEyZSwKLQkweGM5YWY4ZmRmLCAweDEyZWYxODAxLCAweGY0NDBjMWU5LCAweDZlYTU1N2QwLCAweDc1ZjQ4Mjk5LCAweGZkYzRlYzlmLAotCTB4OTdmNWJlOGEsIDB4MmZiZjhjYmQsIDB4NzY1MWI3ZDcsIDB4NTdkMGRkYTIsIDB4ZjIwN2YxYzUsIDB4NWY3OGY0ODAsCi0JMHgyYTA2ZmY4ZSwgMHhlZmQyMzcxZiwgMHhmYjY5OWRhNCwgMHgzZWU4OWZlYiwgMHhmYTQ2NjM4MiwgMHgzYzgxZTIzZCwKLQkweDU4NzljNmZmLCAweGFlNTE3ODA2LCAweGUyNmU1ZTAxLCAweGU2OTFhYjc2LCAweGMxZWViYWRmLCAweGRhMWY1ODc1LAotCTB4NmZjZTg5MzYsIDB4N2FkN2Q1MGMsIDB4OTA2ZmQ3M2MsIDB4MTRjODdjNzUsIDB4ZGUwYmM2OTUsIDB4MTdlZThhM2YsCi0JMHgxMjBjZjBkMSwgMHgyM2ZkMDhiNiwgMHg5ZTU4MWYwZCwgMHg5NzhhMjEzYiwgMHg4ZjdmMzhhMCwgMHg4ZmJmMDI3NiwKLQkweGM0MzNjODRiLCAweDEzZDczZTRmLCAweGU1MDU4ZTc4LCAweDE5YTc5ZTE4LCAweGNiYzU1ZjQ5LCAweDdiYmQ3ODlmLAotCTB4NGZiNmFlNjMsIDB4MGRjNzk3YTksIDB4NzlhZmJmNzEsIDB4Njk3OTVjNWIsIDB4MTY1OGRjOWMsIDB4NTcxOGRmNTcsCi0JMHg4NmY5ZmEwZiwgMHhjZmQyZTJlMSwgMHhhMmNmOGUwYywgMHgxYTIxOTI3ZSwgMHg0ZmI4MWQxZiwgMHg1NmI0YmYyMiwKLQkweDA3ZTg0ZDUxLCAweGViOGQzZTNkLCAweDU5ODUzYWU3LCAweGU0YmUyMmFlLCAweDE1NmE3M2U3LCAweGMzMmU2MmQ2LAotCTB4YWM1MzVlZjcsIDB4YjVmZDA0YmYsIDB4OWNhMTkzOTgsIDB4YjQxMGU1YzAsIDB4OTRjNTM2YWIsIDB4YzFhYjc5MzUsCi0JMHhhM2MwNGFiMywgMHg5Yzc2YmYzZCwgMHg3ZGM0NjZhMCwgMHgxNWI5NTU4YywgMHhjYTMxZjc0MywgMHhiZjVmZmNlNCwKLQkweDExZDY3ZTg4LCAweGUwY2NmYzk5LCAweGIwZmY1YzBiLCAweGYyZGMzZjRmLCAweDNiZWYxYjk4LCAweDMyM2NhMDJlLAotCTB4NzhmMWZlNmQsIDB4NjFmYzM4MWMsIDB4ZTRkZWZkMjIsIDB4NWYzYTI2ZjMsIDB4NTI5NWRiNWUsIDB4NzI1ODdlNDUsCi0JMHg2ZmJjNTg2NCwgMHg0NGZhZTVjZCwgMHhlOTVmYWZlYiwgMHg2YjFkOWM0ZCwgMHhjNGRlYjM0NywgMHhhZGY3ZGZkOCwKLQkweDRhZTFmYzNkLCAweDdmMDE2YmY0LCAweDhlNDYzOTIxLCAweDVhOTYzOTlmLCAweGRkNjVmZTg1LCAweGYwYWIzMmVmLAotCTB4NWNkMWVmYmMsIDB4M2VhMDBlMmQsIDB4ZTZmOTAxYmMsIDB4MTNlMjk5ODgsIDB4MzNjYzJmZmQsIDB4MmZmZGY3ZTAsCi0JMHg5ZGU3OGJkNCwgMHhmZjYwOWY3NCwgMHg3MDcyNjc1YiwgMHhmZTgzNDRmYywgMHhjZjdmODliZSwgMHg5ZDU0ZjZlNSwKLQkweDU3ZGRjZGUxLCAweDlhM2ZmY2EyLCAweDI2MjZiNzllLCAweDI4Njc1ZDBlLCAweDMxZjhiZjIzLCAweGMyM2U2NDYzLAotCTB4M2FmZjc2MGQsIDB4ZmFkNTAzY2MsIDB4MTJhYjlhMzksIDB4ZGU0N2ZkMWMsIDB4ZTFmMjhkZGUsIDB4MzJlY2M2Y2MsCi0JMHg0N2ZkMmIxNCwgMHhkYzFmOTBjNiwgMHg0NTY1ZGFmZiwgMHhmZjZiNWY3OCwgMHg5NDVlMTk3ZCwgMHhkNTE5OGYwYiwKLQkweGUyZGZiOTNiLCAweDhiYzllZWYwLCAweGUwZTM4N2Y2LCAweDkxZmY2M2ZlLCAweDNmMTg5NWM5LCAweGMzOGQ3ZmU4LAotCTB4Mjc4YTY1MGIsIDB4ZTYxMGJiNDAsIDB4MjZmZDZhNWYsIDB4OTg0ZGQ0MWEsIDB4Njc3ZWNlOGYsIDB4OGVlMmJmMjQsCi0JMHhmMWQyMGFjZiwgMHhkMzQ0OTU3ZSwgMHhhMDUwZjdmMCwgMHhjM2NmYTExZiwgMHhkNmYzNGQ1ZSwgMHhmZGUzN2RmMiwKLQkweDM3ZmYyZDBjLCAweGVlZDMwZmRlLCAweDE3Zjc4ZjhiLCAweDNkZGI1OWViLCAweGVmMWM5Nzk4LCAweDZlNjE4MjM3LAotCTB4ZGY4OWE1MDksIDB4NGViZmE3MzMsIDB4Zjc0YmY3ZDIsIDB4ZGZkNjZlN2YsIDB4ZjYxMjFkOWYsIDB4NzFlNDg1ODAsCi0JMHg3YWUzZjAyZCwgMHg3OTg1M2Y4YSwgMHgzYzlkNmZkYywgMHhjNWVjN2VlYywgMHg2ZmE3NmU1YywgMHg3ZTZkZmRiNSwKLQkweDllYmFjYzZmLCAweDAzYzUzMDM2LCAweDYyNmQzZDc4LCAweDcwZDk0ZjE2LCAweDljODVlM2ZlLCAweGMzN2I5MjVhLAotCTB4YjE3NThkZmIsIDB4YTFiMWQ2ZjcsIDB4YWFlOWU0N2UsIDB4OWRmOWU1MzAsIDB4ZWZkMzJmNWUsIDB4ZjVjM2M0NTksCi0JMHhmOGM4ZmQ1NSwgMHhlYmRmYjVlZiwgMHhjNGVkMDRmOCwgMHgwMDkzOGM1NCwgMHhlNDVmYzlhNCwgMHhkNWUxZWIzZiwKLQkweGJmMTU2OWYwLCAweDAxZmZmMmEzLCAweDk0OTExM2RkLCAweDAwMDA4MDAwLCAweDAwMDg4YjFmLCAweDAwMDAwMDAwLAotCTB4N2RiNWZmMDAsIDB4YzU1NDdjMGIsIDB4YmRkY2Y4ZDUsIDB4YzM3NjRjZmIsIDB4MDgzYzg0MjYsIDB4ODEzYmNkODQsCi0JMHg0NDkwMmMyNCwgMHg4ZjJlZDRhYywgMHgwMzEwZjBjNCwgMHg1ODUwODIyYSwgMHg4OWRlNDAyMCwgMHhjNWIwZmQ2MCwKLQkweDQwODAyMTY2LCAweDE1MWE4NmQxLCAweDI2MGRkYTJiLCAweDIyZWMxMjA4LCAweDc2MGQxMjAxLCAweDRhODg4OTQxLAotCTB4YWRiNDU1MDMsIDB4MjAyYTI1ZjIsIDB4ZDQxMDkyMDQsIDB4ZWI2YmZlOGYsIDB4NzMzMzljZmYsIDB4ZDA4MjBmYjMsCi0JMHhjZmU4ZmJmNiwgMHg5OWRlZTY0ZSwgMHg3ZGU3MzNiOSwgMHhmZDk5OWNjZSwgMHhmN2Y4N2JmZSwgMHgxN2JlYzYxMywKLQkweDYyYTJkOWE1LCAweGM5NjMxMDZjLCAweDJkOTk5MGZmLCAweDQzYjJiMTk0LCAweDg5MWFlNzFhLCAweGFmZGFjMGIxLAotCTB4ZjUwYjk5OWYsIDB4Mzk4ZDE2ZWUsIDB4Zjk1OGMyYzYsIDB4NjcyNmQ5MjEsIDB4NjU5YWM2MzAsIDB4M2UwYzQyNjcsCi0JMHgwOGE4MjJmZiwgMHg4ZjM3OTdkZSwgMHgzM2NjY2IzMSwgMHg5Y2IzNzk1ZSwgMHhhYzY1NGNlNywgMHhkODZhZTlhYiwKLQkweDY3MWE1NGUyLCAweGZkODhjNWJhLCAweGExZGFiNjlmLCAweGMyYWNjODM0LCAweDU3YjRmNDY1LCAweDRjOGI1OGNhLAotCTB4NjlkZTI4ZjMsIDB4OTkzMmZlYTgsIDB4ZTFlZmJmZDEsIDB4YjA1NzUyYmYsIDB4MjliY2JkNGYsIDB4YmQ0YmZhYjIsCi0JMHg3ZjhjNWVhNywgMHgzNjdmYzI0NCwgMHg4YzU5NjdhNiwgMHhlYzU3ZjA5NSwgMHg2MTg3ZWE3MiwgMHg1ZGRlNjA1MywKLQkweDE5MTJlN2I1LCAweGIyYThkMTJjLCAweGExMzI1YWM3LCAweDE2OWRmODllLCAweDY3YjU4Y2ViLCAweDdlNjg5OWU1LAotCTB4Njc5ODE2NDEsIDB4MjBkYmYzYjcsIDB4YjdkMmYzMDYsIDB4YmY5YzM2YzgsIDB4MmMzMmZjZmYsIDB4ZmYzMmM2NWEsCi0JMHhjMmU1Zjk4MywgMHhmMzNjYzJmYywgMHg1ODY0Zjk4MywgMHg1OWU2NzkwNiwgMHhiMmQxZTk2NiwgMHgzZTg3OTg1OCwKLQkweGM0OGQ5ZDI4LCAweGEzNjliNjE2LCAweGZjMjJmZGEwLCAweDZhMmZkZTEzLCAweDA1OGQzYzU5LCAweDc5YTkzNjMxLAotCTB4ZTAwMzFhYzksIDB4YjI1YWJiYTEsIDB4N2U3OWUwZWEsIDB4ZjAwZGMwMGIsIDB4NzY0ZGJmOTAsIDB4OTMyZjAwNWEsCi0JMHgzMTFkNTY5MiwgMHhkM2YxN2Q0MCwgMHhlNmJhMWVmMCwgMHhjZjRlZTNjOCwgMHg5ZWNiZjY4NiwgMHhiODdlYTk5MCwKLQkweDFhZDM5MWY2LCAweDBkMzZlYmM0LCAweDAzMWUyMWQzLCAweGVmOGJiNjgyLCAweGExNWY5YzMxLCAweGNiNjE1Zjk4LAotCTB4N2MxMjBiZDQsIDB4ZDkyMWQ5NmYsIDB4ZjVmZWM2ZWEsIDB4NWYzZTJiMjYsIDB4NzlmMzQxYmMsIDB4OTZmYWQ3YmIsCi0JMHhkZTMwMWZlMCwgMHhkMzkyYWQ5MiwgMHhhOTJkZTMwZCwgMHg5NWRmN2RmNiwgMHgzOGIyZDBlOSwgMHhlZmQ1YmZlOCwKLQkweDk5ZmFlZDc5LCAweDU0YjE0MjQ3LCAweDUxZDYwOTMzLCAweDhmN2RmNGU4LCAweGY5ODZkZWZmLCAweDc3YmY4Yjk0LAotCTB4OGMxZTZjMjYsIDB4MzAzMmU5ZjgsIDB4NjFmODA2ZDYsIDB4ODYzMGY2ZWEsIDB4MWEzZGJiYTUsIDB4N2NkNWQ4ZjEsCi0JMHg1OGYxMWEzNiwgMHgyNGZmZmFmZSwgMHhhN2YwN2ViMiwgMHgxNGM1YWM5NCwgMHhlMDEwMmU3YSwgMHhmN2Q4OTE2OSwKLQkweGFiZmJhNDJhLCAweDY5ZmFmM2QzLCAweGU3MDg3YTNmLCAweGM3MWE5ZDhiLCAweDNmYmMyYjYwLCAweDc0NmRmYjUyLAotCTB4YjM0OWQyM2IsIDB4MWZiOTk4N2QsIDB4OWYxYmVkZmEsIDB4MDhhYTBjMzksIDB4ODYwNmRkMmMsIDB4M2NjYjg2NjUsCi0JMHg0ZGU0ZjkwNSwgMHhkMjEzNzk4ZCwgMHgzM2Y1ZjZjNywgMHhmMGRkNDNiNywgMHgwMDY2MDY4NiwgMHhmMTIzMDRmNSwKLQkweDEyYzdmMjBiLCAweDNlMTU3MWFmLCAweGQ5YjEyOWQ5LCAweDk5NDI2NjU0LCAweDY4OTJmMzhhLCAweDkzMGZkZjVlLAotCTB4MWU3NzFlODgsIDB4ZDA5ZTlkZWUsIDB4Njk4NjdjZGYsIDB4MjFlOGRkYTgsIDB4MzQ3ZGRhOGMsIDB4ZDIzNTZmMmMsCi0JMHgxMWNhODA1YiwgMHgzNjYwZjg4NCwgMHhlMDE0MjU5YiwgMHhhYWZhMDkyYiwgMHhlMTIxNTk1YSwgMHg0ZDU2MDhmMywKLQkweGEyZTYxMGU1LCAweGVjYzYwNWYyLCAweGFjY2Y2YzQ2LCAweDYzMzM4NDY2LCAweDdlMTE4MzQzLCAweDVlYjRmM2M0LAotCTB4ZTZlOTBhYmIsIDB4OWI3NzAyNjcsIDB4OGUwZjRlMjQsIDB4ODdhY2U2NjAsIDB4M2Q1YWU1YmYsIDB4YTYzMDA3OTMsCi0JMHhkODQxZWQ2NSwgMHhmMzM2OTRjOSwgMHhiZGUwYzNkNywgMHgyNTU5NDNlNiwgMHg0M2M4YmQwMSwgMHhjZDVhN2MxNSwKLQkweDhjNmZkZjg4LCAweGM2ZjAwZGY3LCAweDE3ZjdlMWRmLCAweGE1NzhlMmU1LCAweDgzYTY2NWZiLCAweDZhMzcyZWYxLAotCTB4ZWQ4OGRiOTgsIDB4OWRhMDVmODEsIDB4YjVhZmZkZTYsIDB4NWE5NzI4MzEsIDB4ZWIwMDk2MjQsIDB4M2UzYTg3MjgsCi0JMHhiNmE3MWYyZiwgMHg1MmUwYmQzOSwgMHg3OGYwZTE2ZiwgMHhmMDQ4OTJkYSwgMHg4ZWRiNTJlOCwgMHgzM2ZhNDM0ZCwKLQkweDJjM2FkMjJmLCAweDJlN2U0ZTM4LCAweDExMzQ3MTgzLCAweGFmMzhiNDhiLCAweGQwNGZlZmMzLCAweDgyZGUyMGM3LAotCTB4ZWIzN2M0ZDUsIDB4YjZlZjk0NWIsIDB4NjRmYzcxOTksIDB4NzhmMzI5ZDUsIDB4YTk5M2RmNzgsIDB4ZjFlMWRiNjYsCi0JMHhjZGM2YTNmOSwgMHhmN2NhNDdjOCwgMHgzZjFjMmNiYSwgMHgxMjgxMmI2NywgMHg5N2NmM2M5MiwgMHg4Mzk3ZGM2NCwKLQkweGZiMzI5N2ZkLCAweGE1YTNhNDdhLCAweDdiNzMzMjM1LCAweDBkNzlmZGQxLCAweDZiOTJmN2M3LCAweGM2M2RjYzgxLAotCTB4NGNjNDVmYWIsIDB4NmI5MmQ3NWEsIDB4YmNmY2Y0NDEsIDB4NmYzYmI3ODEsIDB4OWVmMTc0ZTIsIDB4YzdjNWQzODUsCi0JMHg4ODVmYmJlMiwgMHhhZjJkYmZmYSwgMHhlYWYyYmVhYywgMHhlZjFmMGJmMiwgMHhkNmU1YzQ1OCwgMHhhNTQ3NDg3YiwKLQkweDQ0Y2U3YjUyLCAweDg4ZmFjNGY4LCAweGY1Y2EyZDVlLCAweGU2NjY5NWIzLCAweDNhZDBmZGQ2LCAweGQ3YjczMjA3LAotCTB4NWRkYWZiNzcsIDB4NDBmNzMwMzMsIDB4Njg1OWI4NmYsIDB4MWFmNTllZmUsIDB4Y2FkOWZkZTksIDB4MzFjMDliODgsCi0JMHg5ZThlMDdjYSwgMHhlMDdjZTNmMSwgMHg4OWY4ZmQ3OCwgMHg2NTZjZmVmNCwgMHgxZmM2NGRmMiwgMHg2M2YxODM3MSwKLQkweDE5ZWZlNjdjLCAweGFmOWU5ZTM3LCAweDIwYjE1NTRkLCAweDlmYjVhYmEwLCAweDZjYzQ5Y2U4LCAweDc0YTdhZTdhLAotCTB4YmFkNmVmODIsIDB4ZmQyZGU5MjcsIDB4NGQ4M2FmZjAsIDB4ZTE2MzYyOGEsIDB4OGI5Y2EzN2QsIDB4YmNkOTdjNzQsCi0JMHhhZTdjOGNjOCwgMHg3NGI5MDYwOSwgMHhkOGQ3ZjQxYiwgMHg3MTgwZWY3MiwgMHgwMzIxYzE3NSwgMHg1YWFmN2U5MSwKLQkweGRmNWQ2OGUyLCAweDFkMTA1NzA2LCAweGI0NzQzYjdmLCAweDhmYzE4OGVjLCAweDdkNjFlNDU0LCAweDk5N2M5MGVkLAotCTB4NTlmYWIzNzgsIDB4N2FlNWYzOTIsIDB4MjFkMzdkZmUsIDB4OWZlNDRhNjAsIDB4YWY0MmY1ZGIsIDB4MThiY2M5ZmYsCi0JMHhkNDM1NTNiZSwgMHhmNGM5OGZhZSwgMHhmOTk0YzdjYywgMHhiMzNjNDMzNiwgMHg5NDMwZmIyNiwgMHg4MTliOGYwMywKLQkweDgwMWY4OTZmLCAweDVhYmQ2MWFmLCAweDNiYmJmZWM5LCAweDlmZDgxZjgwLCAweDhhMWVhYzc1LCAweDI0ZjYwZDZmLAotCTB4NDcxZjE3YjMsIDB4MDlmZDcwYzQsIDB4NzI4NTEwZGMsIDB4YTg2YWMxZDEsIDB4NGFiYTZmMmMsIDB4ZmYwMGI2NzAsCi0JMHhmNzk0YmFlMiwgMHhlMDg3YWNlNSwgMHhjMmNkN2M4ZSwgMHgxNmQ1MjY5MSwgMHg0ZjY0ZGY3YSwgMHhjY2YzNGJjYSwKLQkweDc4ZWVjZmEzLCAweDAxNTBlOGM3LCAweGZkMGVlOWZmLCAweGQ5ZTEwODIzLCAweDZlOTllZWFkLCAweDIyZDVkMjg1LAotCTB4NzdjMzdhMDcsIDB4OGZlNzBjNjQsIDB4NGViZjQzMDksIDB4NjVlNzg3NmYsIDB4ZDNlNDBmZDgsIDB4MjcxNjZmMjMsCi0JMHhkMzI5ZmNhMSwgMHhiY2UzYTRmNSwgMHhmN2Y5YmM4ZiwgMHhkZmY3OTQ3NCwgMHg4NjFlMmExZSwgMHg3YjQyNzdjZiwKLQkweDNkYjQxM2IyLCAweGYxYWY1NjY1LCAweGExZDk5OWUyLCAweDkzMjllYjFhLCAweGVmODhlMjYzLCAweDNjZWY5ZmZjLAotCTB4ZTcxODM1NTQsIDB4ODg2MjAwZDEsIDB4NTY3N2MwODUsIDB4ZTVmNzE3YmUsIDB4ZGIwNzI0NDAsIDB4MTg2NzI4NTMsCi0JMHgwYjdhOTdjOCwgMHhjYWY3NGRkYSwgMHgzZWNhNTcyOCwgMHhlYTA0ZGIwMiwgMHhiZjVjY2QxOSwgMHg0ZTY1MGM2NywKLQkweDY3ZGEwYzU1LCAweDdjNDZjZDFmLCAweGNkNmE2NTk1LCAweGMwNGE1ODJhLCAweDFhZTczNmE4LCAweGE5OTAxZjc4LAotCTB4MWQxZWEzMzcsIDB4NWY3Zjg0M2UsIDB4MGUzY2ZhOGIsIDB4NDQwZjY3ZmIsIDB4ZTQxNGZkYmMsIDB4MGYyNDdmZWMsCi0JMHgyYmVjZmNlYSwgMHgwNmIyYTlmNywgMHhkY2E5NWVmOCwgMHgwMGU1MWQzZSwgMHgzMWU5ODVjOCwgMHgwN2Q5N2UzMCwKLQkweGI1NDg5ZjVmLCAweDMwOWU4YjYwLCAweGQwYjc0ZmM0LCAweGUzMTI3ZjNmLCAweDM3OTMxYTNjLCAweGZiYWFlOTEzLAotCTB4ZTNkNzc3ZmUsIDB4YmIyNDM3YTMsIDB4ODhlM2Q3MWQsIDB4NWY1MTViZDQsIDB4ZWM2NzA4YjAsIDB4Y2ViYzJmNGMsCi0JMHhiYTA5NTE4ZCwgMHhiYTAxZWUwMSwgMHhiNmU2MmUxZCwgMHg3OTZiYjA2NywgMHg2NzI1ZTkzMCwgMHhiOTQzZDIwOCwKLQkweDFlNTFkOThhLCAweGQ0MDA2OWIyLCAweGYzMmU5MWRiLCAweGY1YTY2NmQyLCAweGQwZDc5ZmE3LCAweDZjNjJjYjc4LAotCTB4NGFiZTcwOGIsIDB4Y2Q2NjhmZmIsIDB4YzNmN2IzNGQsIDB4MDRhOTQ4ODcsIDB4MjFlYmFkNGYsIDB4YTk0ZjY3OWMsCi0JMHhmMDFkYmFkMSwgMHg4MmJlMjFmMCwgMHhkMmNkMmY3ZSwgMHg5M2IwNjViOSwgMHgwZGM2MzViYSwgMHgyN2QxZDAxMiwKLQkweDA3NWJmMzgxLCAweDE4NGZmYWMxLCAweGNlYjgxNWVkLCAweDVlNGMwZmQ5LCAweGM4ZTk3NThmLCAweGE0NzJjYjQwLAotCTB4NTllZDg1Y2IsIDB4MDYzOTk3ODgsIDB4YmVmOGMzZmIsIDB4MTYxZjZmNDQsIDB4M2NiYzRiMDYsIDB4MDAzNDllZDQsCi0JMHg0MGRlNmE5NSwgMHg5Nzk2NmYwZSwgMHhmY2VmZDc5NiwgMHg3NTNjN2NmOSwgMHg1NGI3ZmE0NiwgMHgzMWI3YTVjMCwKLQkweDQ5ZDkwMDZlLCAweDY3NDgwZGFmLCAweDE1MmU5ZjMwLCAweGQwZmQ0MDJiLCAweDE1ZmJlNjI1LCAweDI1ZTYyM2U4LAotCTB4Mjc5YzBiYTcsIDB4N2RhMTBiYjUsIDB4ZWQ0OWRkNjEsIDB4OTdmNWFmMjIsIDB4ZWFlMDg1ODIsIDB4M2E3YTJlYzcsCi0JMHgxNzQ1ZGI4NiwgMHhkYmZlZmRmNywgMHg5ZDUwYzA1ZiwgMHg0NDQ4MWNkZiwgMHhiYTU4YjViYiwgMHg3NmZhZWI0NCwKLQkweDYyZjljOWQ3LCAweGJlYjhkNTdkLCAweGEyN2I3YTQ3LCAweDEyYWViMGI1LCAweDk3MmQ2MWQ3LCAweGVhN2Q2MjFmLAotCTB4NWExZmM0OWUsIDB4MmRhYTk3NWYsIDB4ODBlMmU4ODcsIDB4ZjE4ZmFlNjQsIDB4M2M2ZDJiZjQsIDB4ZjQwNTEzOTksCi0JMHgzYzE3NTA1ZSwgMHg5Njc0ZTY1YSwgMHhlODU2NzQ4OCwgMHhkMTc4OGY4NCwgMHgwMjhlMzJiMSwgMHhkZTQyZTU5ZiwKLQkweGYwMTRhZWY1LCAweGI2NzZlMDA5LCAweGZiZTUxZjAyLCAweDMzZTBmYzY3LCAweDhkOTNkZDVmLCAweDJhYmY5OGYzLAotCTB4YTllNWM1NTgsIDB4Nzk0N2U4OTMsIDB4ZWZhNTYwYmYsIDB4ZmIxNGFiNzcsIDB4NDljOTMxZTcsIDB4N2ViYzY2ZjMsCi0JMHhkY2VjMTFkMCwgMHhlYTlkNzUwNCwgMHhhMmY3ODdlYSwgMHhiMmE2OTBkZCwgMHgyZGIwZGRhMiwgMHg2OGMwNjQwMCwKLQkweGYwMjhmZWM2LCAweDA3YzgwMmYzLCAweGRmM2QwODdkLCAweDAyMjNjZjgwLCAweDY3ODhmZjc4LCAweGU4MmFjZTU0LAotCTB4OTlhMTM3OWYsIDB4MzJhNWYwZTgsIDB4NmY4NjU1YTMsIDB4OThlMDY0MmQsIDB4MzMxNjE0YzAsIDB4NjdkOWQ5MWIsCi0JMHg1MGZkZmZjNywgMHg2OGYzYWMzYiwgMHhmMDhkZGQ4YywgMHgxNTUwMzA1ZiwgMHhjM2NkMjFmZCwgMHhkYTA2NjIzZSwKLQkweDFjMzhlMzZmLCAweGZkMTdiM2FmLCAweDk5OTMzZmUwLCAweGIxZTQ2NDM1LCAweGZiZTQyYWNkLCAweDk0YmU2Njk5LAotCTB4ZTNlNzEyMjUsIDB4ODM0ZDk5N2IsIDB4ZDk5ZmJiZGYsIDB4MmVhOWRkYTksIDB4OTNmZDBkYWQsIDB4YzE1YmU4NTMsCi0JMHgwZTYwMWZiYywgMHgzOTg3M2U3YSwgMHhkY2NiOWNhOSwgMHhhY2E3ZmVkNCwgMHgxZjBhZWE5ZCwgMHgwODJmZmQwMCwKLQkweDNlN2ZmNGU1LCAweGY5YmEyNjVjLCAweDMyN2RlNzE4LCAweDRhZTg3ZDMwLCAweDY3OGNjNzU4LCAweDVmYzgxMjkzLAotCTB4ZjA0NDE5YWIsIDB4NjdiY2Q5YjksIDB4OGY4ZTFjNDgsIDB4NzFkYmQ4YzYsIDB4NmZkY2RlOWMsIDB4NzE4MWFjNWUsCi0JMHhkMTM3N2E1NCwgMHg5ODljOWY1ZiwgMHhlMWQwNDgzNCwgMHhiNjg5Y2IwZiwgMHhjYzdmM2VkZSwgMHhiODcwMDkxOCwKLQkweDJlZjRhMDRiLCAweDYzZjkzMTViLCAweDM5OTFiMmQ5LCAweGUzNmQzZjAwLCAweDUzZmEyNzY0LCAweDQzYWI2Y2M3LAotCTB4OTNhYTY1NDMsIDB4Y2FiMzZkNWUsIDB4NTlkZmY3YTQsIDB4NTAxOTRjY2QsIDB4YzY5NDY3N2YsIDB4NmI3NDQ1NWEsCi0JMHg1ZDNjM2QyMywgMHhjZDdkOTc4YywgMHg3ODAwZjZmZSwgMHg1ODZlNWQzZSwgMHhkY2Y1MGMxYiwgMHg3OTBmZTAyMSwKLQkweGQwZTRkNWQxLCAweGIzZTQ2YWJkLCAweGNmYmVmMTI5LCAweGZhZmFhNWE3LCAweDZhYjM3NzRkLCAweDNkM2JlMTE5LAotCTB4NjFkZGI3YzMsIDB4OTVkMDBiODQsIDB4M2ZmYjk2MmEsIDB4ZmUxYjM4NmMsIDB4OGZlMWVjYmQsIDB4MzFmOTE0N2IsCi0JMHgxYmI2YWFlZCwgMHhkNjI2MzFlNiwgMHhmNTg1ODg2ZSwgMHhlY2ZiYmYyZiwgMHg1MzJlZmM3YywgMHhhMGM2MGZiMywKLQkweGIzMjEzYTVlLCAweDczZmVmMDRkLCAweGQ4MWIxM2UwLCAweDgyNTY1ZjRiLCAweDM5N2UwMzA2LCAweGQ2MWZmNjA3LAotCTB4MGQzYjAyYmYsIDB4MTY5NThiY2IsIDB4NWQ4MTJmMmEsIDB4MmFiYmVmODUsIDB4MjA3ZjU0YWQsIDB4MTYyNDJmMzYsCi0JMHhjMzY4YmY0MCwgMHhlZDFkYjUxNSwgMHhmYTJjZWFmZSwgMHg1ZjQxMGFmZSwgMHgyYWI3MmE2ZCwgMHhiYjY3ZjkxMCwKLQkweGI4N2Q0NTY0LCAweDIxMzZkMGMyLCAweGEyYjZlMDEwLCAweDE4MGFjNjNlLCAweGFlNGQ0NTY2LCAweGJlN2U5YzU2LAotCTB4ZDEwNzJmM2IsIDB4NDU1OGY0YjgsIDB4ZDdhNTk2MmIsIDB4ZDIwNzY2MjQsIDB4OGJjZTQxN2UsIDB4M2ViYmYxYzYsCi0JMHhkZGQ2N2NmYywgMHhlNTdjZmNmMCwgMHg4NWZlZmE1OCwgMHhiZjdkMWI0YSwgMHhjYTk3MzJiMywgMHgzYzdiNTg4YSwKLQkweDc0YjViM2I2LCAweDIwYjQwZWI0LCAweDdkMTBhZTM2LCAweGExZDBkZGRjLCAweGI2N2E4MjhlLCAweGRmMjFiMjRkLAotCTB4NGU2MzY5ZGQsIDB4YWI3NWUwMjcsIDB4YWRhOWViODYsIDB4MGY5MGE3YTAsIDB4N2NjZGE3YzcsIDB4N2E4NjYxZTEsCi0JMHhlMzhlOWVjNCwgMHgzMGE1M2ZkYywgMHgzZTk5YzcxYiwgMHhkYjFhYTE3NiwgMHg2MzFkZjAzZCwgMHg3NDNjNjMwMywKLQkweDY1YmEzMzc2LCAweGYyZmM3MjdlLCAweGRkZDExMjliLCAweDFlZTU5NTY1LCAweGM3MWNhYmI0LCAweDdhMGZiMjY1LAotCTB4MTg1NTMwZDUsIDB4ZTE5M2Y3YmYsIDB4NzRlMDA3NGUsIDB4NzBiOGZlZjksIDB4MzVjYjY3OTQsIDB4MmYxMGYwOTYsCi0JMHgyN2U5ZDYzOSwgMHhkY2Y3M2FjNywgMHhkZmFkZTExNiwgMHhkZjVjNDMzYSwgMHhkMGU1MDVmZSwgMHg4MTBlNWM2NywKLQkweGI3ZWU3NGE1LCAweDExOGNhNzI4LCAweDk3NmZjNDU2LCAweDUyMDA0M2YwLCAweGNiOGZhODgxLCAweDQwNmY4MmI0LAotCTB4MzNiZDYwOGUsIDB4ODNjODJkODAsIDB4NTFhYmQ2N2EsIDB4ZjAwZjkwMTMsIDB4OGYyNDk2N2IsIDB4ZjU3YzQ5OWMsCi0JMHg1ODVmZDhkOSwgMHhlOWRiZGYzYywgMHhkZjk3ZjI1YSwgMHg1M2IyZmQ0MiwgMHg1ZTgwZDBlNSwgMHg1ZDVjY2NiYSwKLQkweGVhYmFlM2FmLCAweDE3YjQ1NjhjLCAweGMwNzUyNTkzLCAweGVmZWMxMGNhLCAweDk2NGJiZTI0LCAweDIwOTVlYTJjLAotCTB4ZmFiZDc2NDcsIDB4MTllN2UwYzIsIDB4OGQ4YzA5ZGEsIDB4NmM2ZmY3ODUsIDB4ZjMzOTI0MDksIDB4NjY3YWM2ODYsCi0JMHg4MTdmZjYyNSwgMHhjOWY5N2ZmNywgMHhjMjZmM2Y0NywgMHhkMWQyODlmMiwgMHgxMDU5NDI4ZiwgMHhjZDcwNDIxYiwKLQkweDcwZTE0ZGZmLCAweDUxMTFiM2E0LCAweDZmMTgwNjgwLCAweDZkYzk0MWY3LCAweGFkMmM2NzQ4LCAweDQ4OWFmMGU2LAotCTB4NmRjOGNmOTgsIDB4NTBjMWFhMWQsIDB4YWE5M2FhOGUsIDB4Y2E2MTFjYjAsIDB4ZmJjMzI2M2QsIDB4Y2QwYjU4YjIsCi0JMHg4YzQzNGM2MywgMHgzMmVjODUxYywgMHg5Zjk3ZjlkOCwgMHg2YmUxYmQ5MCwgMHg1Y2Q2YTQ4NywgMHg3OTk4MzA5OSwKLQkweDkyZTE5MWVjLCAweGE1ZTIyMmViLCAweDM0N2E3NGNhLCAweDRkNTYzYmU5LCAweGI5NmZlY2UzLCAweDY5NzM0ZmY3LAotCTB4ZTBlOTYwMWQsIDB4YWQ2YTE3YmMsIDB4OGU5YzFmYTQsIDB4Y2JiM2E0NWEsIDB4ZDkyYjY0ZjYsIDB4ZTc4ZTc5ZTcsCi0JMHhlZDk3YmYxMCwgMHgxN2Q0NTY2MSwgMHhmZjVmYzAwNywgMHhhMzNmYjYxMSwgMHhhYzFlNzVhNiwgMHhmMTg0MTkzYiwKLQkweDA3ZTAwMTliLCAweGU5N2RlMDFiLCAweDkzZDIxZWE4LCAweDBjMmQ0M2E1LCAweGM1ZjQzYmJmLCAweDNlMTE3MmJiLAotCTB4NmJmYjhkNjUsIDB4YmQxMjljNjksIDB4ODJkOWZkMTUsIDB4NTE1YjU3ZmQsIDB4Y2NjOWIyNmYsIDB4ZDVmNDgwOWEsCi0JMHg5YWJmZWJjOCwgMHgxZWEyYjM2NCwgMHg4NmZkYTgyZCwgMHhhOGYyZGJkNywgMHg4M2RlMDc5ZSwgMHhlNjJmZGIxYSwKLQkweDQyYjNkOTc2LCAweDc0ZjZiMTJmLCAweGIyNDQ1YjkyLCAweDdlYmUwZjE2LCAweGZkZjFhZjA1LCAweDY0NDcxOGQ2LAotCTB4Y2ZhM2QxODUsIDB4NDE2ZDBmNDAsIDB4ZjJkNDg4ZmUsIDB4ZTYxMzZkZmUsIDB4NmU1YzEzNDYsIDB4ZTMyOTBmNTEsCi0JMHgwZTY1YWIzYywgMHgyZDQ1ZWEwMywgMHgyMGY1OTdkNywgMHg2MDNlOTAyZiwgMHg3YzcxMTdmYywgMHhjOTQ2NmY0NSwKLQkweGFjMjM1YTUyLCAweDFkNTllYTNiLCAweGY4YjdiMzk3LCAweGQ2MDNkOTlkLCAweGVjNTRkZTkzLCAweDFmNjE3MmI4LAotCTB4ZTgxMzYxNTQsIDB4YmZiNDY1ZGYsIDB4ODk3MGYyODIsIDB4NmQ0Y2IzZDAsIDB4ZTNiYjQ1NDksIDB4Nzc2ZGEzMzMsCi0JMHg2MDcxZDkyYywgMHg3ZjQ4YThlNywgMHg2NWViMWVmZCwgMHg3MTc1ZDgzMiwgMHgzMTlkNzY1ZSwgMHgxN2Y0OTZlNCwKLQkweGUzZjZkOTMzLCAweDdkYjU2ZTdhLCAweDlmZTc5OGE4LCAweDAzNDMzY2M1LCAweDFkMmM5ZGEyLCAweDg3ZjgwYWZkLAotCTB4Nzg1OGU5ODQsIDB4NTg3MTg2ZDIsIDB4NDQ3ZWYxZjQsIDB4YzE1NmViMjQsIDB4ZTExZDA3M2EsIDB4OGJiMWUzZjUsCi0JMHgxYjA1YWNiNywgMHg3N2E0N2RmZCwgMHgzMzgyNDcwZSwgMHhmYjQzMDA1MCwgMHhjYTZlNzk0YywgMHg2MjEwZjRlMCwKLQkweDExZGQ5M2Q3LCAweDU0NjJiMDNlLCAweDMzN2QxNzg1LCAweGMyMGM3YmI1LCAweDY1M2ZkMzYzLCAweGRiNzY4NGI3LAotCTB4ZmM1MjMzZmYsIDB4ODZkZTdmYzcsIDB4ZmQ3ZmVlMzgsIDB4MTUwZTYyNGMsIDB4MmQxNWQ3ZDIsIDB4YjRkMTZiYjUsCi0JMHhmNDNkZmVlZiwgMHhiNTRjMjk2YiwgMHgwMDdiM2ZhMiwgMHg3MWM3YWRmMCwgMHg4ZWM5NmE2NiwgMHgwNWRiNDE2YSwKLQkweDA5Y2NiN2RhLCAweDg2ZjdiOTIzLCAweGM3NDFjYjg2LCAweGRmZGUwMDljLCAweGY3YzEwMDAwLCAweDY4OWRjM2FiLAotCTB4NTVkNjBkYTcsIDB4ZTM4Njk3YmMsIDB4ZGYxMjA1NTcsIDB4MWI5YzY4YjQsIDB4YzdmYzcxNjIsIDB4YjJmOGQyMDYsCi0JMHhlOGUxYmRmZSwgMHhlNDIyN2Q3ZiwgMHg5ZWU0OTU1MSwgMHhjNzZkZjE4YiwgMHhlZmMzMmQxNSwgMHhhM2JiMDRkNSwKLQkweDUzNWVhMWNhLCAweDdmZGE5YzM4LCAweGVkMTkyYTAyLCAweDViNjA5YWM0LCAweDAzZDljYTI0LCAweGZlNDk5NGZmLAotCTB4YmE4MjhjZDUsIDB4YzUxM2U0OTEsIDB4ZDg2NjZhNjEsIDB4ZmVhMTgzMjIsIDB4NGQ0YmMwYTAsIDB4OTlmZWIzYWQsCi0JMHg0YzllN2M1MCwgMHhiOGM2MGNlMywgMHhlMThiYjYxZSwgMHhjMzQ1ZmNlMywgMHgwN2E3ZDlmYiwgMHgwNzVlZDFhYSwKLQkweGYwODkxNDRkLCAweDAyN2U2ZGZiLCAweGUzYzJkMmM1LCAweDA4NzFjODI2LCAweGNmYjdlMTVmLCAweDE5NDc3MjE2LAotCTB4YjNlODNiMWYsIDB4ZmZlMzBlZDAsIDB4MzdhOTJjZTYsIDB4NWZkZDdmMjAsIDB4MGQwMGU4NjAsIDB4NTgyOTNlYzIsCi0JMHhmNWJmNDI2MywgMHhkNmVjYmI3ZSwgMHhmNzYwNWM4MSwgMHhlY2ZhZGI2NSwgMHhkZjFjNTg4MiwgMHhiZDIxYzcyNiwKLQkweDkzN2UyYmU1LCAweGY1YzIzMTdiLCAweGRiM2QxZWNkLCAweGUwMjM3NjQ0LCAweGJhN2FlZDM1LCAweDFmZGY4MGJiLAotCTB4ZjhlM2ZlODAsIDB4YzdmZGJjYTcsIDB4OWZlNzFkNDIsIDB4Njg4NzQ4MGIsIDB4NDNkYTA2MGYsIDB4NGRlNWZlNzAsCi0JMHhmNmYyOWY5MywgMHg1OTJjZTcyYiwgMHg0MDcyNDQxNywgMHhhNTUyZjc3YywgMHgxMzJmYTllZCwgMHhhNWM4NGVkMCwKLQkweGYyYWVmOTUyLCAweDdhOTlkY2JkLCAweGZlOGExNDliLCAweDcxODljZThkLCAweDBlYzIwNWMwLCAweDY3YjlkNzJkLAotCTB4NjczZTNmMjEsIDB4ZWZhMzBmYjAsIDB4NDc0YzVkMTQsIDB4NjY3NDMxN2IsIDB4NDc1YzAwZjIsIDB4MGU2MGJiZjcsCi0JMHgwMjMzZGI0MSwgMHg4MDUwNjdjZiwgMHg0YzJiOWUyMywgMHhkNDRjMzc0NCwgMHg0ODE4YmZlZCwgMHhkZjA0YjlmNiwKLQkweDYyZmEzYTQxLCAweGRhM2I2OThkLCAweDJkYWQ3NjczLCAweGQxZDIwOTcyLCAweDQ3YjI0MGYyLCAweGMxZGM4MGNlLAotCTB4MDQ5NGNmNzEsIDB4ZmJjZTFkMTMsIDB4YzhmYmYxNzUsIDB4YjRmMjY3NmYsIDB4NWE2NzlmNDQsIDB4ZTlmN2JkYjgsCi0JMHg4NWFkZDk0YSwgMHhiY2NkNzdmNSwgMHhmNDIyNGNmNiwgMHg0NWY1NWFlYiwgMHhkYjI4NTZkNiwgMHgxYTM1ZmNkNywKLQkweDM1YmNkMWY1LCAweGRmYjBkM2E1LCAweGQzNTVhMmJjLCAweGUyMzc0ZTExLCAweDNhMjU3OWYzLCAweDZlMWNjY2MxLAotCTB4Yjc2Y2UzNTMsIDB4Njc0MmJlMjMsIDB4Mzk0MWNiNWUsIDB4ZTRiOGI4M2QsIDB4MTdjMThjMzksIDB4YzRlZmQ5YzcsCi0JMHhkYjY5OTdmNSwgMHg2NTFlMTBjYiwgMHg4ZDE2N2M2ZiwgMHhmMzc3NzNmNiwgMHhhMTViN2JjYiwgMHgyN2Q5MzM2YywKLQkweDM1YjJiZjYwLCAweGMzYWNjNTc3LCAweDU1ZmY4NGMxLCAweDAxN2MwNmE2LCAweDY3MWU3ZDFkLCAweGU1ZjdjMWNmLAotCTB4ZDg4OWRjOTMsIDB4MmRhNjkyZWYsIDB4NTZjNmUxMDcsIDB4N2RkZDlhZGQsIDB4ODBmZWE1YjEsIDB4NDA2MDdlODQsCi0JMHhiMjk1MTk0YiwgMHhkMWU3MWQzMywgMHhhNDgzYjkyOSwgMHhkODIzODQzOCwgMHg0YmVlYjAwZiwgMHg3MDUwNzc2NiwKLQkweGM5OGQ0NTJhLCAweGU5ZGUyODllLCAweDVhOWEzZWJiLCAweDQwM2I4ODk4LCAweDZjOTc2MmJmLCAweDMyZGQyMDMzLAotCTB4ZWJlNzE2YTcsIDB4OWUxOGJlZGYsIDB4N2M1YmJiNTMsIDB4ZmM1Y2M0NWUsIDB4OTNkMzcwNzksIDB4YWI3ZDIwNzcsCi0JMHgzN2Y3MWI5OSwgMHhkODRhZWUyZSwgMHhiY2JmZjg4ZSwgMHg2ZjQ0ZTVmZiwgMHhiY2JmZDgzZiwgMHhmZDdjYmU3ZSwKLQkweDAwYmU5MDk3LCAweDg5ZTA5NzhlLCAweDQxYWJlOTA2LCAweDc1ZmZlM2U3LCAweGZhMjQ4YWVkLCAweGZkMTFlZjgyLAotCTB4NzI0YWVkNzQsIDB4OGY5MmYyNmUsIDB4MzA3ZTQyNWQsIDB4MDY2YjJiYWIsIDB4OTVjZGJkZDIsIDB4MjI5Njc2ODUsCi0JMHg5NWRlOTgyZiwgMHhiMjViZmU0ZSwgMHgxNWZkMWQyYiwgMHgzY2IwZGU0NSwgMHg3NzNkMjI1NywgMHhmZGIxMTJiYSwKLQkweDhkNjdmNDAxLCAweGVkMTZlZjllLCAweGM0ZGRhYThlLCAweDU1MGU4ZWUzLCAweDZjNDdkNjA2LCAweGVlMzJiYWM3LAotCTB4YjQ5N2Q2Y2QsIDB4NGY1M2ViNTUsIDB4OWZkNmZhNzEsIDB4OTVmY2YyMTAsIDB4MWY4YWI0NTcsIDB4ODJiZjBiMmMsCi0JMHg1YTNjMTQ1OSwgMHg3MDQ2ZmRiOCwgMHg4MTU2YjNmOSwgMHg1OTUxYzNjYiwgMHhiZjgwMzcxOCwgMHhkY2RlNjk2MiwKLQkweGZiODU3ZTZmLCAweGQ5NDYwN2NkLCAweDJhYWU1MGEzLCAweDYwODFmOWZlLCAweDVlYTJhN2E4LCAweGVhNTZmM2U1LAotCTB4ZTdmYzFjMGEsIDB4NGJjZmU2YmQsIDB4ZjdiZTMwYTMsIDB4MWY4ZjFjNDYsIDB4YmNiODE5NTUsIDB4Yjk3MDMyYWEsCi0JMHgxNTk0ZGFiNCwgMHgzNGFiZWY4ZSwgMHhhMmE2Yzc2MCwgMHhlZTJjNzJiZiwgMHgwZTA3OGQ0YiwgMHgzNjZkMmFlNywKLQkweGY1N2RjMTEwLCAweGU5NDc1YmE1LCAweDZkOTc2ZjkxLCAweGE2ZjdhNTFiLCAweDYzOWRhYThmLCAweGRlNjA1OThlLAotCTB4YWRhYTc2OTcsIDB4YjUyYTg0YjgsIDB4ZDdiNDQ5ZjMsIDB4MmVjYTc2YWEsIDB4N2FmN2EzMDcsIDB4NjRiZmI0MWIsCi0JMHhkYjAyNzIzYywgMHhlM2M2ZGQyZCwgMHg2NWZmNGExNiwgMHhmOTZkYjM1YiwgMHhiMTFlZjM1ZSwgMHg2OWJlMTdkMywKLQkweGM4ZmFkZjJlLCAweDUxZmFkZjI2LCAweGZkMDY0NWI0LCAweGI5NDZmZGViLCAweDhlNjNlYjdkLCAweDdmY2ZkNmY5LAotCTB4MjQyY2YwZjgsIDB4ZjFkOTAyYzMsIDB4ZTNmNjhjYTQsIDB4YTE4ZTczNWYsIDB4YzBlYWY5M2UsIDB4Zjc4YTIwYzEsCi0JMHg4YWRmOTY3YywgMHhhZGIyZjE3NiwgMHgzYzA3NzBiZSwgMHgzODI3Njg0YSwgMHg3N2E0NDg3NiwgMHhmY2ZlOWQwYiwKLQkweDAzMWYzZmQyLCAweDVmMzg5NDQ2LCAweDE0ZGQzN2IyLCAweDNhYWI0NzMxLCAweDlkZjZmYWU2LCAweDg2Y2IzNWNjLAotCTB4N2Y5NWE1NzEsIDB4OGM3MmZiOGEsIDB4NWRkYmRjNjcsIDB4MGZlOGI0NWIsIDB4NDZmNzdmZjksIDB4MzY4Y2NiN2MsCi0JMHgxNjM3YzYwYiwgMHg3ZWVmZTU4ZSwgMHhmYjIyNzJiNCwgMHg3Y2RiYzcwMiwgMHg3MWU5MDczMiwgMHhkMjI0YWZlMSwKLQkweDI1ZjcwYmMzLCAweGQzNzQ4ZGJkLCAweDE0Y2U3N2IxLCAweDEyZTU2NzJhLCAweGNiYjg5NDNjLCAweDZkYzkxNmIyLAotCTB4MmM3OWJhODIsIDB4NjUwZmRiZWIsIDB4NmI0NWVmMzAsIDB4YTFmMTNlNzUsIDB4ZjNiZWNkZmMsIDB4ZmJlMzVhNTgsCi0JMHhlMWQzNTk3ZSwgMHg2YmJlZTFiZiwgMHhkYTQ1ZmU4MSwgMHhhNmQ4MmVhNywgMHgzOTZiOGJmMywgMHhiZDNiNDJkZiwKLQkweDdlNDYyYmU4LCAweGY3ZGQ1MTc4LCAweDVlZTJmZWJhLCAweDE0M2FjNDRiLCAweGVlMzk5MGZiLCAweDZlNGViODY0LAotCTB4OGVkZjgyMDIsIDB4M2Q3MjA3ZmYsIDB4YzRkNzZjYzQsIDB4OGRkOGYyMGYsIDB4OTVhOWFhM2YsIDB4Y2NhNTdlMTEsCi0JMHg4ZTM5ODhmZSwgMHgyMDc3NTFmYywgMHgwZWE5NjdjYywgMHhhNGQxYjFlYywgMHg1NzdkNjk4NywgMHg3OGEwMGViNywKLQkweDA2NjczYzA3LCAweGI1OTU3ZTc4LCAweGJlN2VhMTY1LCAweGYyYjI2OGRhLCAweDk2NWI1OTM4LCAweGEwY2JlYTE5LAotCTB4NjAyYmYwOGUsIDB4MTJhNzA0ZDUsIDB4YTczMmNiOTQsIDB4ZGRiNzliMWIsIDB4YjNhZGY0ZTAsIDB4OTdiNzZlNmEsCi0JMHgxMTg3ZGRhOCwgMHg5ZGFjYzUxZSwgMHhiZDFlMjFmYSwgMHhiYWMwOTVkYiwgMHgzYjQxMDkzZSwgMHhiMzNmYWZjNCwKLQkweGRjYmM5YzUyLCAweDk1ZmMyNWE4LCAweGYzYWY3ZDM3LCAweDBiZjhhZjdlLCAweGM0YTJmZjhhLCAweGY0NTc3ZWUxLAotCTB4YjdkMjAwNjAsIDB4MzU4N2Q4NDYsIDB4NWI3YjlkMWIsIDB4OTRlYjNkNjEsIDB4MDMxNmRlYjgsIDB4NmIwN2E3YzksCi0JMHg3YjA3YmNiOSwgMHg1OWQ3MTEzMCwgMHhkNjg1MjViMywgMHg4YjY0YTBmZCwgMHhmNmI2ODc1OSwgMHg3ZmQxM2QwYywKLQkweGQzZDgzMDRkLCAweDkyNDc2NGExLCAweDIzNzYwMGJkLCAweDczM2RhZGQ5LCAweDEyZWRjZWI0LCAweDM3MmU4ZmRhLAotCTB4NGYzNWMxZGEsIDB4Y2EwNmY4ZjMsIDB4OWY2YmIyNDksIDB4NTI3ZDkwMzAsIDB4MjdkYjgzMzMsIDB4YTljMjViMzUsCi0JMHhjYTcwNWZmZiwgMHhmMjU3Njg5MSwgMHg5MTNjZDRmOSwgMHg5OTVkZWRjNiwgMHg4Y2UxNjNmNywgMHg2NWY2MDdlNiwKLQkweDVlNmJkZWEyLCAweGIyZmY1ZDhhLCAweGYxMTEzZWQ5LCAweDI2YjdhY2FkLCAweGZiODRjN2I4LCAweGUwNjBhYzFkLAotCTB4N2FmOWU5MmQsIDB4MDA3YWJmYTEsIDB4ZmYwNzE4MGUsIDB4YzU2YmNhNTIsIDB4ZGRhNTA5N2QsIDB4MWY1Y2YxN2QsCi0JMHhlZGIwNGQ2NCwgMHg1ZTI4ZWQxMCwgMHhiMTlhYWY5ZSwgMHhhNzk4MjdlOSwgMHg1MmNhOGNmMCwgMHg3ZjA1ZTMxNSwKLQkweGQ3MTEyZDliLCAweGMzMTZlNWZmLCAweDk5ZDNjNDY4LCAweDY3OWU1YzUxLCAweDA1ZjFlMDRkLCAweGRiNmM1YmYwLAotCTB4NWUyMmZmNzEsIDB4ZmQ3NzEzZTUsIDB4NjE0ZWY4YTksIDB4ZjVlNjg1YmMsIDB4MmY4ZjM2NjUsIDB4MjhmMjMyOWEsCi0JMHhkYWI2MDM4ZSwgMHhmNWY2ZmU4MiwgMHhiZWY5ZTMwYiwgMHhlZjM2YmU2OCwgMHg5OWZiOGZmOCwgMHgzNjE3MDI4ZiwKLQkweDVmMTdmYjg5LCAweGJlOTEyNDNlLCAweDlhMjRmNTg0LCAweDFiZjU5ZWExLCAweGJlN2ZjNTAzLCAweGMxNDc3YTE0LAotCTB4MjY1MWQwMDcsIDB4YzcyMTYxZTksIDB4YzY3ZTkwYzIsIDB4MTllN2U4NzgsIDB4YTQwZTE3NDEsIDB4ZmQzNzhiMGIsCi0JMHg4M2M3ZDJmOCwgMHgwOWVjZmYwMiwgMHgwNGQ2OWY2ZSwgMHgxM2NkN2FmMywgMHg5ZmEwMzcyOSwgMHg2NTBmZmRmZSwKLQkweGZjYjUzNWJkLCAweDAxZGZiZmJkLCAweGRlMzZiMDc0LCAweDc0ZmU5ZTBiLCAweDRjY2VkNGMwLCAweDdmMzVmZGVmLAotCTB4OGQ5NmM4M2EsIDB4NTdlNzI4YzksIDB4YjQ1NjAxNDgsIDB4ZmUwODU3YzcsIDB4MTE4NGIxNTgsIDB4MGFiMTQ2M2QsCi0JMHg4MjM1ZjkwOSwgMHgwMDhmMjliOSwgMHhjNzAxODFlNCwgMHhjMDBmNzFmYiwgMHg3ZjBmOGJkYywgMHhiY2NmNGQ3MiwKLQkweDE2NzhkZmY1LCAweGE4OWY1M2VjLCAweDlmNjlmNDhmLCAweDc5ZjE4ZTZkLCAweDhhNDQ1NzdmLCAweDk2YzlmYmNmLAotCTB4YTlmNTNlNTEsIDB4YjRmYmI3YzksIDB4ZGUzYWRiYmYsIDB4ZDhjZjdlYTcsIDB4NjdlZDNlYzksIDB4ZDRmODY2ZDgsCi0JMHhjNmFjY2M2ZCwgMHhlZTU0YjdmOSwgMHhjZGUwZmIyNCwgMHg5N2RjNTc0YSwgMHg2NWMzZDcwOSwgMHgzZWM4ZWU5YywKLQkweGE2YjE5NThiLCAweGFhNjcwN2JhLCAweDBkYzYxZTgxLCAweDA2MjJiMjM4LCAweGVkZTM4N2VhLCAweGU0NzUxZWJjLAotCTB4YjE5OThjNmEsIDB4ZjIxN2UyYjcsIDB4NTcyMzg4ZmEsIDB4MzQ3ZWExNjMsIDB4ZGZhZjExN2UsIDB4N2Y1ZmM4YzEsCi0JMHg0Y2YxN2UyNywgMHgxNWM1MmE0NywgMHg2NjdlMjE4ZiwgMHg4YTM4YWI1ZCwgMHhhYjQ3ZTE2ZSwgMHg0MTg5MmU2NywKLQkweDI0YzkyZjFlLCAweDY3ZWNhZTM5LCAweDNmNjMxM2RjLCAweGJjYWNmYzg0LCAweDhkOWZkYTU3LCAweGFmYmJmZGU3LAotCTB4N2RkZmY5NzAsIDB4MjM3N2NiODUsIDB4ZmU4MzI5MWEsIDB4MzJmYzEyZmQsIDB4MGUwNGZlZmEsIDB4NmY0MTM2MjIsCi0JMHhhNjJmZmRhNCwgMHg4YmVhNWNkNywgMHg5NGZjODM0MywgMHgzYzYxOGM2YywgMHhmMDEyYTVhZiwgMHhkMzcwODA5ZCwKLQkweDM0YWVlOTUzLCAweDMyYTQ3OTUzLCAweDJiYjdjYTgyLCAweGUwMWYyYzJkLCAweDRjOTk1YWRhLCAweDJiNGFiMWU1LAotCTB4Mzk1ZTNmM2QsIDB4MmJmN2NhOTYsIDB4YTg5ZTU0NmQsIDB4YWRiMmE1Y2MsIDB4MDk0YThmMzIsIDB4Mjg3OWE5OGMsCi0JMHgzNzU4NzYzZiwgMHgwZTJlMTA2OCwgMHhiZDM5ZjA3NSwgMHhjNmU1MmYyNywgMHhjZWNkNGM3MiwgMHhjNjg1ZjgyOSwKLQkweDVmNmMxODZmLCAweDMxZGQ5M2M0LCAweDcxNzE0Y2M0LCAweGQzNWJiY2YxLCAweDczZDIyMmYzLCAweGMxNjYxNWQ1LAotCTB4YTZjM2I4N2MsIDB4OWZiNDE2ZDMsIDB4NDRmNTMyYWIsIDB4OWI0ZjUyZWYsIDB4YjhlYmU1MDUsIDB4YmFhZjVlMGMsCi0JMHg2NzUxNjZkMiwgMHhmZGVhM2FmMCwgMHgyOGQ3NjBlZSwgMHhhNTU1MGJkNCwgMHgxODlhZWI0NiwgMHg0NDhlZWY3YywKLQkweGExNTcxOTdlLCAweDM4N2ZhMmI1LCAweDNlNjdhN2E5LCAweGEzMzhmMWYyLCAweGY0N2E4MmQ2LCAweDJkZjVhOWIwLAotCTB4NzNjYTNkZjEsIDB4ZGNjMmJiYTksIDB4MzQ1N2RjMmEsIDB4ZTJjYzU5YjQsIDB4N2MwZTM4M2IsIDB4YzFmNTA2MzcsCi0JMHhiYmUxODdiOCwgMHhlZDA1NmUzNCwgMHg2NzliOGQwNywgMHhlNGFlZmJlYywgMHgwZmZkNWRmNywgMHhlNGEyNzc3ZiwKLQkweDVlZjhkZGY1LCAweGZmM2E2ZWY4LCAweGJiZTdjNWFlLCAweGU1ZWM5OTZlLCAweDBmYjI2ZTJiLCAweDExYWQ4M2JhLAotCTB4ZmE5NTVmMjgsIDB4NGE5ZjdjMjQsIDB4MzNkMjQyNzEsIDB4MTk2ZTJjZTMsIDB4ZTg4N2VmZjcsIDB4MDcwZDNjYjgsCi0JMHhhNWUwZDJmMywgMHg2Mjc4OTU2ZiwgMHg2NzVmMmY1ZCwgMHgwOGJiYTU1NywgMHhiMDkyNmFmOSwgMHg1OTY5MjY1NywKLQkweGE5OTNjMjMyLCAweDk4ZmUyODAyLCAweDFhZDc3ZjJkLCAweGNkZTVmNTA1LCAweDlkY2MyOGQyLCAweGRiY2JhNDk4LAotCTB4OWFhZTdlNDYsIDB4Y2ExNjFkY2IsIDB4Yjc1MzMyZjUsIDB4ZWQwY2JlMTUsIDB4NTk0NTg1NGUsIDB4NDg2YWRmMzEsCi0JMHgwZjE2MDFjNCwgMHgzY2JiMzg3MiwgMHhmYWY1MTUzNywgMHhkNGRmOTEyOSwgMHg0ODRmNjQxYywgMHg5YmRjNzk4MCwKLQkweDI1NGE3MjBhLCAweGQ5ZjcxOTg4LCAweGRlNDkwMzcyLCAweGNhNGExZjc3LCAweGE2N2Y3YjQ0LCAweDAxOWZiMmNlLAotCTB4M2MyNmE3MWYsIDB4NzIwZDUzMzMsIDB4NGIwMGU2NzEsIDB4ZmFjNjY0YTYsIDB4YjcwZjVlMzYsIDB4YmRlMDk3ZWMsCi0JMHg3MzMzM2Q5OSwgMHhjMWZmZWRkMiwgMHg0OTM0ZmFmZSwgMHgzODFmOTdlZCwgMHhhZGY4MDEzNiwgMHhjOGIyZjczNCwKLQkweGZiMjFlYzU3LCAweGU0OThjN2Y2LCAweDc3ZTI4ODM0LCAweDllYzdhNDZlLCAweDAzZDIyNmM5LCAweDhlNWI4ZjE4LAotCTB4OTJkNTNiZjIsIDB4MzVhMmVkODksIDB4ZmYwODQxM2QsIDB4OTRkNGVmZWUsIDB4ODMyZDAyM2YsIDB4ZTM4YWYzZWUsCi0JMHhmM2MyZDhiYywgMHhlM2Y5ZmM0YSwgMHhhYmQ3MDI3MiwgMHg5ZjNjZjFlNSwgMHhhZjQyMmNhOSwgMHg0YWU1YjJhNywKLQkweDhmN2NhMzBlLCAweDNmZjQ3OGJjLCAweDU3ZWRlYWMxLCAweDAyNzdmZWJmLCAweDU5OGUxZmRmLCAweDQ3ZjFlNWFmLAotCTB4NjUzMGExMTQsIDB4ZWE1MzAwNWIsIDB4YTk2YmNjMGUsIDB4MzE0MDI0N2QsIDB4NGUwMDZkNDYsIDB4NTQ3ZWM1YTYsCi0JMHgyNGNkZmE2ZiwgMHgxYjdiNGZiNSwgMHg2N2JjZjdiNiwgMHhkMjlmMDQzNiwgMHhjZjdlYTRiZiwgMHg4YmM2ZDY2ZiwKLQkweDJjYmQyMWVmLCAweDgyNWM0ZTY1LCAweDRkYTlmZWJmLCAweDBiZmM1MTBjLCAweGExMGJmM2MyLCAweGUzOGJmMjA2LAotCTB4YTA1N2EwNjUsIDB4MTc0MGE4Y2YsIDB4MGNlYjMzYzUsIDB4ZGNjMTdlOWMsIDB4YzU0ZWIyYTAsIDB4YzAwMzZiZGYsCi0JMHg1MGZhODVmZSwgMHg5YTNlZTNhOCwgMHgyMmJlZDEzYiwgMHg2N2Y1MTA3MSwgMHhlZjJmZWM2NiwgMHgyMjkxZmVhNSwKLQkweDFmNzk0ZTZmLCAweDE5Nzk1MThlLCAweDBjZGFlOWYzLCAweDU1OTM4ZTU4LCAweDRlNGRjMmZkLCAweGM0NmJmZjFjLAotCTB4ODNhNTU3NzcsIDB4MmZkMmY1OWQsIDB4MmI0MTgxNWQsIDB4ODY1NGYxYmQsIDB4ZmRkZThkZmQsIDB4YTUzZjUwMjYsCi0JMHhmZGQ4Mjk3ZiwgMHg5YzkyMDc2NywgMHg4ZDI5N2EyNiwgMHgyYjNlNTE1NywgMHg0YjZmY2RmOCwgMHgzNmIwZDc2OCwKLQkweGE1NjFlYTJkLCAweGFiOTA2OWRmLCAweDQxMGZiZGY4LCAweDA5Zjk2MmNlLCAweGMwYjNkN2M4LCAweDljYTk3ZjliLAotCTB4OTVhN2U1NGQsIDB4YTY3ZTdhNzYsIDB4ZjZjYTgwYjIsIDB4ZmU3YTBhY2EsIDB4MmE0YWU1NzksIDB4NjUzNWNkNjcsCi0JMHgzNzk0OWYyMCwgMHhiZDY3NjZhZCwgMHhhNWQ0YmFlOCwgMHg0YmVmN2JiMSwgMHgzZmRmMWU5ZSwgMHhlMDRhZWNiZCwKLQkweDk4ZTlkZDc2LCAweDk1YmJkZmZlLCAweGJjNzI3N2Y3LCAweDgxN2Q4Mzc1LCAweGRmZDAyNGY2LCAweDhkYzg3MzVhLAotCTB4MTM2ZThjZWQsIDB4Mzc3YWJmZGYsIDB4Nzc3M2QzODUsIDB4MjVkN2FmMjQsIDB4NTM2ZWE4NjgsIDB4ZmZkOGFkYjEsCi0JMHhkMTJkMTRkZCwgMHhjNjQ0OGFlYiwgMHgyYzc4ODlkYiwgMHhkZjhkMWZkMCwgMHgzZTU0ZTcwNywgMHgxOWNlZDI4ZSwKLQkweDJmZWRjYWFmLCAweGYyMjU5ODRmLCAweGU4OWY0NDc2LCAweGM2M2QyMDJmLCAweDk5NjdkMTc4LCAweDlmZDNlODg1LAotCTB4MzkxMzZhMmUsIDB4MzhlYmM0ZGYsIDB4MmVhMTQ1ZGQsIDB4NzA4YzdkYzIsIDB4MGE3MzEzODMsIDB4ZGMzNmJlNjAsCi0JMHgzODkzYWY1NywgMHg5ZjQ3NWUzZCwgMHg1ZDlmZWUyYSwgMHgwZTMwOWY0NywgMHg1Y2U4MDljMSwgMHg3ZWM3ZjI4MiwKLQkweGVmOTRhM2Y0LCAweDBiNmZiZTBhLCAweGUwOGNmZDMzLCAweGEzMzFhMmRjLCAweDBjYjFmOGJlLCAweGFhZmVjNTgwLAotCTB4MGY5ODEzZGUsIDB4YjI2NjE1MWUsIDB4ZjY0ODllZTAsIDB4ZmU4YWM2ZTMsIDB4MTIzZmM3ZTQsIDB4NmZmZDdkYjgsCi0JMHgxZjhmYmZhZiwgMHhkZDdmZDc3ZCwgMHhkMDdlYzViYSwgMHhlNDliYWVhZCwgMHhhNDRiY2EwOSwgMHhjM2U0N2U5ZiwKLQkweDNlNDUwNGE1LCAweDEzOTFmYTcwLCAweDNmNTBlNzZkLCAweDM1MDY0Yjc0LCAweDBkYmJiM2M2LCAweDgzYWUyZTljLAotCTB4NGZhNzBhNWIsIDB4MDU2YTNlODUsIDB4YmFlMTQ0N2QsIDB4ZTllYjNjZTIsIDB4ZGY4MDdmOWIsIDB4Y2EzMTk2ZmEsCi0JMHhhM2M3ZjBlYiwgMHhkNmJjNTcyMiwgMHgyZjA0ZjdmNSwgMHhkODE4YzI3OSwgMHg0ODdmZDAxNywgMHgwOWY2OTE4OSwKLQkweDA5OWEyNDU3LCAweGNlODNkZDdlLCAweDZmMDJkZmNmLCAweGUyN2ExNTlmLCAweGE3ZGYxNTc5LCAweGRmNzZlNDUwLAotCTB4MzA1ZTQ5NzMsIDB4OWU0N2Q1MjMsIDB4N2EzM2I0MzMsIDB4YmY4OGU5MGUsIDB4ZjA1NjJhZGMsIDB4Zjg1MWZhMWEsCi0JMHg3MGJmMmYyOSwgMHhlZjUzYzBhYywgMHhlZTE1NGNlYywgMHg2YjdkNzViZiwgMHhjZDFlNTA3NCwgMHg2ODMzOWVlMCwKLQkweDA1NmQ3NDQ3LCAweDdmZmM4MDAzLCAweGY0MDkzNGRiLCAweDg3OGMxMmQ5LCAweGFmYmUzMDU4LCAweDhiZThmZGE3LAotCTB4MjRiMjBmNjAsIDB4NzJiYWU3NjgsIDB4ZjI5OGVkMDYsIDB4MDdhNjY0ZTcsIDB4N2RjZmM5ZDAsIDB4NjVlOTBiMzMsCi0JMHg5OThkMjFlOSwgMHg0ZmFkOWFlYywgMHgzYjdhNDMxZCwgMHg1MDU5MjhkNywgMHhjMjM1NzdkZiwgMHhiMzlmNzFiMiwKLQkweDQwMzRlNGM2LCAweDYzYTgxY2ZiLCAweDY1M2I2NWZiLCAweDAzNTIyNTI3LCAweDE0ZmU5MDdiLCAweDI4NmIzYmRmLAotCTB4Nzc3YjQ1OGIsIDB4YTMzZjczZTIsIDB4YjVhNWY4ZmQsIDB4NzE4NzBiMTIsIDB4YTJiYWRhZGYsIDB4ZTdlYTEyMzUsCi0JMHhmOWZjZjFiNiwgMHg3ZmNmMDMyYSwgMHg2YjM3OTFjZiwgMHhiNDdjNjMwNywgMHgzMTJmM2Y5NiwgMHg3YmZlNTBlNiwKLQkweDc1NjYyZWQxLCAweGFmNjViYzYzLCAweGE1ZjNmYzg5LCAweDE1NzliZTM1LCAweGViN2NkYjA1LCAweDVjYmUyMjg1LAotCTB4YmNmYmU3NTQsIDB4NGYzN2MxYTQsIDB4YzhhMjRjNjMsIDB4YTM2MTQ4YzMsIDB4MTM1YTVlMjgsIDB4MjI4MDc2NDIsCi0JMHg3N2U0NmY0ZiwgMHgzOTczOTZkOSwgMHg2MWQ3ZDhjOSwgMHgwZjk1ZWYxOCwgMHhiOWZkMTM3ZCwgMHg4ODY3ZDc5MSwKLQkweDJmZDQwNzdhLCAweGEyZjFjMzdmLCAweGM5NGNhNWMwLCAweDE5NjQ4ODJiLCAweDIzY2MwY2FlLCAweDNmNzE5ODM0LAotCTB4OGJmOWFjYWEsIDB4NzNmOTg2MjAsIDB4ODlkM2VkMDEsIDB4Mjk5NzVmM2YsIDB4OTM2MzZhZGYsIDB4YTU2OWZiNGMsCi0JMHgzMDk3ODYyZCwgMHhmZjZjYjBjZiwgMHg4NGM1YWQ0OSwgMHhlYzg4N2Y3MCwgMHg2Mzk4YmI4MCwgMHg2ZThiZmEzZCwKLQkweDZmZTQ0YTk1LCAweDhkZGM1MWI3LCAweDUyOTY3YWQ5LCAweDYwZDliYjdjLCAweGY2NWFmZDQ2LCAweDczYWRjN2ZhLAotCTB4NjI1ZmJlYjEsIDB4ZDBlM2M0MDYsIDB4YTU5M2EyNzYsIDB4NWZiNGM5Y2YsIDB4YzlmMmQwY2QsIDB4OGM4OWQwZjIsCi0JMHhiYjNjNDU3OCwgMHhjZjNlZDAwNiwgMHhlMjNiYzQzMiwgMHhlNzhlZjAxOSwgMHgzNGU3ZTQxYiwgMHhiYmE1Zjc4NCwKLQkweGI1NWY3YTY0LCAweGVkOGI0YWI1LCAweDdlMzkzOWNmLCAweGM4ZTdiYzE1LCAweDQ1Y2YwOGFiLCAweDRlN2M3MDJmLAotCTB4OTlmZWFlN2MsIDB4NWQ4M2E0MDAsIDB4ZGY3M2IyMWEsIDB4Nzk4MzdlODIsIDB4ZDAzYTFmM2YsIDB4NzdlM2UyMWUsCi0JMHhkZjE0NGJkNSwgMHg2NjgzYTNlYSwgMHhlMDFkMWY1ZCwgMHgwNzQ2NmYzYywgMHg2N2E0OWZjMCwgMHgwNjA3NDY2ZiwKLQkweDRmZTQxNzk0LCAweDhhMWEzYjhmLCAweGY4Y2ZlZGY2LCAweDlkYjg5NDdjLCAweDFmOWI5NzEyLCAweDEwZmE1OWQyLAotCTB4ZDg4ODRkMzQsIDB4MWIyY2Y2NDcsIDB4MDg5NTVmNjAsIDB4ZTRjY2U2NzIsIDB4NzRkYzI4MGYsIDB4NTFlZWNhNmEsCi0JMHhmZjAzNGY5NCwgMHhiZjk0NjFmNCwgMHhmYjdjZjA0NywgMHg0NDRiN2ZlNywgMHgzMzFkZDA3OSwgMHgxOGMxZGI2MywKLQkweGFlMDc2N2MyLCAweDkwMzgzYmE3LCAweDkyM2RkM2ViLCAweDNhZTdhMjUzLCAweDkzYmUwZWI3LCAweGY5MTU3MjBkLAotCTB4YTNhOWJkOTIsIDB4YTBmNzQzZjgsIDB4ODkzZTFlMDcsIDB4MTg0ZjY4ZmIsIDB4YzkyZTg4YWQsIDB4ZTJiYWZkYzYsCi0JMHhjMTNlNzc5NiwgMHhjYzZiMjdmOCwgMHg3ZGY4ZjliNiwgMHg0NjJiMmZjMiwgMHgzN2RmMTBiZiwgMHhiNWU4NWY4MCwKLQkweDNmOTkyOGRmLCAweDRiYmY3ZWEwLCAweGNiNzVhNThjLCAweGYyNTZlYjJhLCAweDA1OThlYWRmLCAweGU1ZWI5NWVkLAotCTB4YWZmOTIzM2YsIDB4Njg2ZWFmYzQsIDB4MDFlOWY5OWYsIDB4NzZlN2ZjOGYsIDB4ZjEwYzczMTksIDB4ZTVjMGI3M2IsCi0JMHhmNzExMzJkMywgMHg3MWM4ZmEzZCwgMHg2NzVjNDBmNSwgMHg1MzM3M2YxZCwgMHgyOTcyMDJkOCwgMHhmOGE1Y2U5NCwKLQkweGQxMzI5N2M4LCAweDE5ZDIzY2ZlLCAweDQ3MmJmMWMwLCAweGVjOTUwMWM1LCAweDlkM2U0NzJkLCAweGVjOTRlMzg0LAotCTB4MjE5NGUzZTIsIDB4OTgxYzIwZmQsIDB4ZGMwMDk5ZmIsIDB4Mjg2OTcwMjcsIDB4ODRjNDU5MWUsIDB4NTkzMjY5NWMsCi0JMHhlNDdlOTZkZCwgMHg3YWVkNWQ0OCwgMHhlOWZkN2YzNCwgMHgzN2VjMThhNywgMHgxZDNmODQ1YywgMHhiNmZhMzU5NSwKLQkweDk3Y2EwM2ZiLCAweGQyNWYyNDExLCAweDA3N2Y0N2JlLCAweDIzZDMyMzY5LCAweGQ0ZTViMjQ3LCAweGY1YWZlODAxLAotCTB4ZTQwMGNiMzIsIDB4YjllOTFiZTMsIDB4ZGFjMGFkYTQsIDB4MzhhNmUzNWUsIDB4YjNlZDRjZjUsIDB4YTlmNjYxNWYsCi0JMHg3YzIyYjlhNywgMHhiMjZjOGZkYSwgMHhlNTFmYmNmOCwgMHgzZjc5ZjY0ZSwgMHhhN2Q1OThlNiwgMHhkNjM2ZDk5ZSwKLQkweDlmNmRmZGE3LCAweGI3ZWE3Y2Q4LCAweGI0ZmFlN2I3LCAweDNjYWJlM2JmLCAweDJhNmY3YTlmLCAweGY2MDdlN2FjLAotCTB4OTA4YWVlZWYsIDB4YjY0ZmRhN2MsIDB4MDdjNjdjMTgsIDB4OTlmMDRlMGQsIDB4ZjNlYzFjOWEsIDB4ZTFjOGQ3YmMsCi0JMHhlZjcxYTM3NCwgMHhhYjhlZmFiNiwgMHg4Y2Y3YjlmOCwgMHg4NjdmMWRmNSwgMHg1YmRjNzdjZCwgMHhkMDBlYzNjNSwKLQkweDRkMTA2YTliLCAweDYyOGY0MTNiLCAweGMwMjU0YWY5LCAweDg2ZjFlYzFkLCAweGJmYWEwOGNhLCAweGQyYTE2OTVhLAotCTB4Y2Y0Yzk5NTUsIDB4NTJiNGFiNWYsIDB4MmM3MmIxYmQsIDB4N2Q4MDBmZDUsIDB4YjAyNmY1OGYsIDB4MWQ3Y2IxZjcsCi0JMHg3ZTdjN2NlYywgMHg4YWI1NzgzMywgMHhkZjEzMWVlZiwgMHhjYmJlMmUzZCwgMHgwNzZlMTZkOCwgMHhlZjJlMDRkYywKLQkweDQ0MjdmZThiLCAweGFmZWMzNmZmLCAweDY5NjFkMGYxLCAweDFhZWFhNjZlLCAweDkwZjhlZGYwLCAweDJmOGM1YTBiLAotCTB4ZTdiNzk2ZDgsIDB4ZjNkZjlmYTAsIDB4MDNiNmNjYWUsIDB4ZjNiYjMwNWYsIDB4ZWEyODY1NTgsIDB4MWYzYzgxYTksCi0JMHgzZGU3YWYyMSwgMHhlZDk3MTc4YywgMHhmZWUzMzM4ZiwgMHgzZmE2YzZjNywgMHg1ZGY3YzA5ZCwgMHgzM2M1MzI4ZCwKLQkweDExN2QzNDhlLCAweGJhNWNlMzg0LCAweDUwM2VjYzA2LCAweDk3YTgzN2U4LCAweGZhYTI0ZGZjLCAweDc5OGY3ODI2LAotCTB4ODJmNzkzZjgsIDB4Y2I3YTRiNjEsIDB4NTJlYjdhNDUsIDB4ZDI3NzUyYmMsIDB4ODZiYzhkZjksIDB4ZGE3NmRhYmQsCi0JMHhlZjRiZGM1NywgMHhmNWJlMDVkZiwgMHhkNmIzYmY3OSwgMHhkYjE5YmRlNywgMHhkYWI2N2VlMywgMHhjNWY3N2U0OSwKLQkweDM3M2M2NTI2LCAweDk3ODkyZmI1LCAweGM1ZDIzY2U4LCAweGM3YWQ2ZjlkLCAweGJkZDJiZTdjLCAweDNlZTIwNzBiLAotCTB4YzljMzcxNjAsIDB4MDAzZmM1YjAsIDB4NzYwN2NiZmYsIDB4MmY1Y2EyYTcsIDB4ZjljNTk2NmQsIDB4Njk1ZTNlMjMsCi0JMHg4OTFlNzJiMywgMHg3ZTI0YmZjZiwgMHhjYTA4NGU2ZiwgMHgyMTg5MDZlZCwgMHg2YWIxMmU3YSwgMHg2ZTJhOGZjYSwKLQkweDM5NDEyZmFhLCAweDU3M2M5YzVhLCAweDk3MjFmMTQzLCAweDNjMDFlMjJjLCAweGNjYzRiMGRmLCAweGJhZTY3ZGI4LAotCTB4MzVlNzg0MWEsIDB4M2EzYWUwZmYsIDB4YmE4NWYzMWQsIDB4YzIwYWRlNWIsIDB4ZjllMzc2ZWYsIDB4ZGVmYzJmMTMsCi0JMHhkY2VkYzQ5MywgMHhkZmI4OTI3YiwgMHgyZGYxYTk3NCwgMHhkMWI5M2YzYSwgMHhiYjg3MTZmNSwgMHgzZmViNGRkYSwKLQkweDUwZGRlYTIyLCAweDY0OWJiYzEyLCAweDM1ZTE3ZjVhLCAweDhjYTBmMDk5LCAweDRjOTI2MGY3LCAweDRhNmU0ZGUzLAotCTB4NGViYWUxMzAsIDB4ZjJmN2Y4YjksIDB4NzlmYzJjOTMsIDB4OWM3Y2MyZmMsIDB4Mzk4OGYxZmYsIDB4OTVkOTMyOTksCi0JMHgzZGRmMmUzYywgMHhjYTNkNmE3YywgMHhlODBmY2M1MSwgMHgwNDdiMGZjZiwgMHhiNWY5ODVjNywgMHg3N2M2M2M4YSwKLQkweDBlYjVmN2UzLCAweGNmMWZiODA2LCAweDc0OGEzODFkLCAweDI3NGZlMjgwLCAweDQ3M2RmYjcxLCAweDNkNDc4ZjZiLAotCTB4YTE2OGNhNzEsIDB4ZGM5YWY4MzgsIDB4ZjdlMjEzMzgsIDB4M2NmODk2MDgsIDB4NTdkYTI1ZjcsIDB4ZGZlNDZhMjgsCi0JMHgwYjZlNjUzYiwgMHhkNTNiYmE0MiwgMHgzYjQ2NDYzOCwgMHg0MGFmMTk0NiwgMHhiZThmYjc3YywgMHgyMGU2ZjBmYiwKLQkweDZiMzgxNTNjLCAweDA3OGUzODhkLCAweDdlNzlmYzdmLCAweDcxZTY5OTkyLCAweDE2NzI3OWRjLCAweDkyYTc0YmRhLAotCTB4NjhjZWM5MDMsIDB4ZmNmZGYyZDUsIDB4ZWY2ZTA2ZTIsIDB4YWE4OTZhOWUsIDB4NWJmNmJkOTUsIDB4YmEzZTA1ZjIsCi0JMHhkNzg0NTU5MywgMHg2ODhkMjZhZSwgMHhmOTllYjczNywgMHg3YzcwZDNiNCwgMHhjN2NlZjlkNSwgMHgxMjc4ZWNlYywKLQkweDE3OTJlY2VkLCAweDU0OTMzYTY0LCAweGMzMDhhOWEyLCAweGU2ZGY5ZmY1LCAweDAxMDJiZjNiLCAweDNiOGQxMmU3LAotCTB4NWU4YmNjMmMsIDB4ZjhmYjlhNGIsIDB4ZGU3NDQ4YzYsIDB4ODU4OWYwYWMsIDB4ZjFlMGE5ZjAsIDB4YzczZjMyNTQsCi0JMHg5ZjgyMmE3MiwgMHg1YmQ5MmE4MywgMHhkMWVkNzQ0ZiwgMHgxOWFlM2NmNywgMHhiZjNjNWZmNSwgMHhhZTdlNjZmNiwKLQkweGY5NzgwZjYyLCAweDNjZmQwYzQ5LCAweGE2NWM2ZTRkLCAweGY3YTNkNjJhLCAweGJmNmQxMzdiLCAweGZlODQxYTRiLAotCTB4ODVmOTFlNTMsIDB4OGEyNmVjNDAsIDB4M2M3ZGEwOGIsIDB4YTdlZmU1MDAsIDB4N2I3N2UwY2YsIDB4ZDg3OWY5MWIsCi0JMHgxMTczN2Q1MiwgMHg1YWY1ZmJlZSwgMHhiZTYwNDE4MSwgMHg0ZTM0ZGJiZCwgMHhkMTE4Y2ZlMSwgMHhlYzJhNWQ0ZSwKLQkweDdiMTZmM2Q0LCAweGEzZmI4Yzk2LCAweGFlYjQ1NWFiLCAweDg5ZDkwNjkyLCAweDQyNWQ5OGY5LCAweDFiZGU1ZGRlLAotCTB4NjlkMjBmNzMsIDB4OGNkOTMxYzksIDB4NTc0NGNkZmUsIDB4NjVjN2FmY2MsIDB4ZmIyNmRlOTAsIDB4ZWRjNWNjYWUsCi0JMHgxMjlkYjJkYywgMHg3ZDhhYjVkOSwgMHg4YmVjMmE1MSwgMHgzZDhlYzI3MywgMHhkYjg3YmFiNywgMHhmNjI0ODdiNywKLQkweGNlYzc4YzU0LCAweDQ1NzYxNTI4LCAweDNkNzliY2E5LCAweDlmZmIyYmU2LCAweDM5NmMyZGFmLCAweGZkODllNzRjLAotCTB4ZWYxNmQ1Y2YsIDB4YmE5N2FkZjQsIDB4YmY4YWViN2MsIDB4OWY1MjRlZjcsIDB4ZmU4MjkyN2YsIDB4OTRhN2Q4MDksCi0JMHhjMGE5ZjEyZiwgMHhhY2FmZTJhNywgMHgyMzg2YjM0OCwgMHg1YjU0NmZiZiwgMHgwMzcxMjhhNiwgMHhhMWY5NTc4NCwKLQkweDZmMzg4NTdkLCAweDk1ODA0OTY3LCAweDZmOTU4N2ZjLCAweGJmYmI1YzEwLCAweDc3NDk3ZWU2LCAweDc3ZjVhMzA0LAotCTB4ZWVkZjBlMzMsIDB4ZTVkZjRlMjYsIDB4YzdhOWM5MWEsIDB4NzAyM2E4ZmUsIDB4NWNlNGJkM2MsIDB4YTNhODc2OGQsCi0JMHgxMmU0ODgzNywgMHhmN2MxZTFlNiwgMHhmZWUxY2Y5NiwgMHhhMzYzMGRhNywgMHg4NTVhOTUzMCwgMHgyOWZkMTQwZiwKLQkweGE5ZGVjZGNlLCAweGJkODM5NzZlLCAweDI0OTVjM2U0LCAweDEyNGU3NzZlLCAweDRjMmI0OGY5LCAweDgzNWZkMjU2LAotCTB4YzFlYmI5YzUsIDB4MGY2ZjZlN2EsIDB4NTM1NzNiNTYsIDB4NjYzMWZlM2MsIDB4ZjI3MTQzNTksIDB4NGU5MGEzMDMsCi0JMHhmMTRlYWUzMCwgMHgxMjNkNTVmZiwgMHhlYjFmYzNjNSwgMHgwNjNmOTA5MSwgMHg3OTExYWQ5YiwgMHhmODQ5ZjU1ZSwKLQkweDA3NjNkNTNlLCAweDQ4ZjYzMzBjLCAweGM3YmE5ZGY4LCAweGQ3M2FmODk0LCAweDY2ZDQzM2VmLCAweDg5NGZjZTBkLAotCTB4ODdmYjI5M2IsIDB4NzM5NGZjY2EsIDB4ZjNlN2ZmMDgsIDB4OGNmY2MzMzMsIDB4YmUwMWY5OWUsIDB4YWJmZjYwMDcsCi0JMHgwZmIyNTYxOSwgMHhlNzI4NjdhMiwgMHgxZTQ4MmFmZCwgMHgwNGJjZjAyOCwgMHg3MDA5M2VmNCwgMHhhNDFkMzE4NSwKLQkweDg3NmQ5MjliLCAweDQwZmU3ODczLCAweGNiZGY5ZDFiLCAweGM4ZWJlMjA5LCAweDM5ZTNmOTExLCAweDk0MWNiYzAxLAotCTB4MmIzNWYxY2MsIDB4OWU4YmM3OTksIDB4MzcyMmE1MTAsIDB4ODViNjQ5ZGYsIDB4MmZiOTQzMjUsIDB4MzkzMjJmMzksCi0JMHg2MmNlNzNkMywgMHg5Y2ZjMDdmOSwgMHg4N2JjYmY4NSwgMHg1NzRmNDRlNywgMHhlZTUxMGY4MSwgMHgzMjQyYjRmZCwKLQkweDYzZDhmYmM3LCAweGY5Y2FiZjljLCAweDJhM2UzZWEzLCAweGUyMjVlMGZlLCAweGI1YjBlNjEzLCAweDllNjE4NzI1LAotCTB4MDVlZmU3MDIsIDB4NzhlNjBkMmIsIDB4MTcyOGJlMmYsIDB4YzVhNjIwN2UsIDB4NzI5N2ZlZTIsIDB4NWNjMGJlNGUsCi0JMHhlYzQwZTc0OCwgMHhlOGNjYzMyYiwgMHg5N2NiOTU5NywgMHhhZmZmNWUyOCwgMHg5Mzc5NWRmMiwgMHhlMDZkZGQ2ZiwKLQkweDQ5MzZlZmY0LCAweDllZGNmZmU0LCAweDEzY2Y2N2RjLCAweGZlMGI0NjNmLCAweGI0NGJiNWE4LCAweDlkZmI1YzJmLAotCTB4ZTZkYmM3OWEsIDB4YmI1ZjE0NDksIDB4N2NmMjFlMWYsIDB4NjBhZWQxN2EsIDB4ZGQ5YmU1M2MsIDB4MzdkYTU1MGYsCi0JMHhmYjE1MDlhYiwgMHg5ZmI0YTFkNiwgMHhmNzU4OWY3NywgMHhlMmRmMjJmZCwgMHg4MzE1YzZhOCwgMHhhNWEzYTBmMSwKLQkweDNmOGUyYjdhLCAweDdmNjhiOTg3LCAweGEzNmIxZTdkLCAweGQ5NjA3NGYyLCAweGVlMGQzNzdlLCAweGZjZmU4YTE4LAotCTB4YzUxZDc2YzcsIDB4NmVkNzZhYTEsIDB4NGY1Y2ExMzcsIDB4YjhjZDZiNjcsIDB4ZDhhMDA2Y2YsIDB4NWI5OGZkZjksCi0JMHhmMjUzOGZkZiwgMHgwZTJlYzE4OSwgMHhmYzA0ZmE0NywgMHg3ZmZjNDZjZiwgMHgxODg5YjgwNSwgMHhlMmZmN2Q3ZCwKLQkweDNlNTNmNjhmLCAweGZiYzNlNzUyLCAweGQwYzAzZDY2LCAweGZmMjFlYWFmLCAweGI1NjJhOGE4LCAweDFjNGRmNjg2LAotCTB4Y2IzOTJkYWMsIDB4ZWYwNTU3ODMsIDB4ZjBmYWRlMGEsIDB4MWYxNjYxNmEsIDB4ODY5YWMyYmMsIDB4NGJlNDljMjAsCi0JMHhmZDJlNDgzMywgMHg3N2E4NjY0ZSwgMHgwNTU3ODY2ZiwgMHhmODExM2ZlZSwgMHhlNWNjZDY1OSwgMHgxNWJlM2Y5NywKLQkweGU3ODAzYzNjLCAweGRmNDhlMmEzLCAweDMxM2MyMzZlLCAweDdmNGJjOTFkLCAweGJlMTliODdhLCAweGUxZTczMDgwLAotCTB4M2FhMTg5YWIsIDB4NTRhMzJmZjIsIDB4MmQ0NjllNWMsIDB4MzhiZTI4OTUsIDB4YjUwZmQ5OTcsIDB4ZjAyYjM5NDMsCi0JMHhiYmQxMGQ1MywgMHg4MTNjZGJjMCwgMHhmMzk5OGZiNywgMHhmZjk4ZTRlZSwgMHg5M2JkYmMzZCwgMHgzYzlkNTc5YywKLQkweGY1YmU3YWU4LCAweGYxMWJkM2U3LCAweGZhYzU4OTY1LCAweDNhNWY0NTQ3LCAweDFmYTNmMjE5LCAweDZiZjFmYjNmLAotCTB4ZjBhZDFlMWYsIDB4ZGEzYzJmM2YsIDB4NWYxMTA2NTcsIDB4NmU1YmUxZjYsIDB4ODhiZDM1YjgsIDB4YWExYzYwN2YsCi0JMHg3MTZiZGY4OSwgMHg2MDk1N2U1MywgMHg1N2NmODAyMSwgMHhhNmY1N2Q5MywgMHgyZTA1Mzc4MiwgMHg5ZGViOGEzNywKLQkweGMyM2I3MmQ2LCAweGZiNGM4OGYxLCAweGVlNDk5Zjk4LCAweDYzOTQ2NmEzLCAweGZjZThhNzI5LCAweGIzZmVkMjliLAotCTB4MWY0MzZkZDUsIDB4MWIzZTcxODIsIDB4NWFkM2NiY2YsIDB4ZDRhOTFmOWUsIDB4M2UzYzAxNmQsIDB4Y2VhNDU5ZjgsCi0JMHg0Y2ZkZWI4MSwgMHhmYTgwOTk0YSwgMHhiZmU5MzNlMiwgMHhiODdhZjNhNiwgMHgzOWY1ODJkNiwgMHg1MGNjMTNlMSwKLQkweGUyNTFhZDNmLCAweDdjNDQ2Yjg5LCAweDY3ZTU0OWMwLCAweDQ0OWI2ZTczLCAweDM2ZjYyNGVkLCAweDNmOWY4ZWYzLAotCTB4N2NmYzUxMmEsIDB4OWM3Mjg4MDEsIDB4Njc4NGNjNWYsIDB4ZmVhZjMxNzMsIDB4NDZlM2NmY2MsIDB4NzJkZjNlZDEsCi0JMHgxZjUwZjFkZiwgMHg5MjFjNTBjNywgMHg1ZTc3OGJmYiwgMHhmNDJjZDFlYiwgMHg3YTdkM2JkMiwgMHhmZTE1ZDI3MCwKLQkweGNlOTMzZjNjLCAweGQ4MDgxNjFiLCAweGI4NTI0MmRhLCAweGU3ZTRlYzdmLCAweGQzM2QxNTM2LCAweGQxOWY2YzdiLAotCTB4NDE3YTRlM2IsIDB4ZWFmYjk1YzQsIDB4N2I0NDRmMjksIDB4M2JjM2E5ZWIsIDB4ZTM4ODk1N2UsIDB4ZTkxZDY4MTQsCi0JMHhhYmZiN2U3OCwgMHhkMWEzZTdkYSwgMHhmMWQ4Mjg5ZSwgMHhiN2Q5MjI3OCwgMHhhMjI2MzYzYiwgMHhmZGIwNTI5ZiwKLQkweGFhMzY4OTU3LCAweDRmYzlkYTA3LCAweDc3NzVmMzUyLCAweGE1ZmRiOWVlLCAweGU3N2E1ZTRkLCAweDZmZGNlMWQxLAotCTB4OWMzZmE3OTksIDB4OTRlZTc2OGQsIDB4NjFkNzk3MTEsIDB4ZTdlMTNlM2MsIDB4ZjM4N2RkMTIsIDB4MGViNmQ2NTMsCi0JMHg2NGZjZGZmNSwgMHg0NmFjZWY0ZSwgMHhlMTk5NzI0ZiwgMHg3M2MwMmRmOSwgMHg3NWRkY2E3ZCwgMHg5M2M3YTdjOCwKLQkweDQzZTRkMGJmLCAweDlhOGE1ZDNiLCAweDM5OWYzM2UwLCAweDdlZTM4NzM3LCAweDVjYzkwNmY2LCAweDBmZGJiY2NmLAotCTB4ODVjYWZkYTUsIDB4NDQ2ZDI1NmIsIDB4ZTBiN2VhMjgsIDB4ZWEzZmU4NTEsIDB4MWU2OTgyNTIsIDB4NmE4YzM2OGIsCi0JMHg1N2YzZTdjNSwgMHg3NDUzZTdmMSwgMHgzODUzYzZjZSwgMHhjYTVhYjNjZSwgMHgxMGY5MDIzNywgMHhhZmM3OWRlYiwKLQkweGYxZTdlMTRiLCAweGM4OTY2YzE3LCAweDkzYmU1N2FlLCAweGFkNTg0Y2YwLCAweDI5NzUzYWY3LCAweGQ0NjcyZjQyLAotCTB4Y2U1MWRjOTEsIDB4NzU1YjRlMDksIDB4MTgwOGVkZjIsIDB4YmI2YTlmZjcsIDB4MzljNjA1MjksIDB4NzhiOWY0ZjEsCi0JMHgxNDlmM2MzNywgMHhmZDE1MjE3MiwgMHhmZGFkMDQ5YiwgMHhlZWI4ODViNywgMHg4M2NhM2FlZCwgMHg5MjhmNDhjYiwKLQkweGU4ZmRhMWMzLCAweDg1M2ZjNzg3LCAweDBiNTU4MmU1LCAweGYyODg1YjdmLCAweDE0N2VhYjcxLCAweGYzZTYxNzRmLAotCTB4NTU1OTJlNWIsIDB4YWFkZjNmMjgsIDB4YzIxMTYwN2QsIDB4ZjVhN2FiZWQsIDB4YWYyZjk3NjQsIDB4ZmQ2NzBhNGQsCi0JMHhiZTUyOGZmMCwgMHg4ZGM3ZjgwYywgMHg3YTk1NWQ4MiwgMHg5YTU3NzcyYSwgMHg5ZWRhM2NlOSwgMHhmZmFhMDhjYSwKLQkweDI1NDJkMmJlLCAweDZiZTljZDliLCAweDhkY2I5OWI5LCAweGU2Mzc4ZDFiLCAweDgwYjMyMDVhLCAweGMxYjE5YWJkLAotCTB4NzA2MzJjYzAsIDB4OWM5NmNlNWYsIDB4MTg0ODcwMDIsIDB4YTM3ZGJhNWUsIDB4YTU2ZTE3NTgsIDB4NGNjNDcyOGMsCi0JMHg2YzY0Mzg0NCwgMHg0ZDE1YTg3YywgMHhlZTE0ZDBkYSwgMHg2YTc3YmQ2NywgMHhlZGYyMzQ0MywgMHgyZjFkNTViMiwKLQkweDUzN2FlMjE2LCAweDdmNjE0NmYyLCAweDE0MmJiNmZkLCAweGY5YWI3ODM3LCAweGVmMDhmOWYxLCAweGJlM2FlZDgyLAotCTB4YWZlZWIxM2UsIDB4ZmYwYzRlOWUsIDB4NzhlZjhjMmQsIDB4N2M3ZTQzNTcsIDB4MTc4ZWI2ZjksIDB4NzhiOTQyMzcsCi0JMHg2ZjVhNDNmMywgMHhmNWQ1YmY3YSwgMHhmYmUxNGM4ZSwgMHhhYmUzMzc5ZCwgMHg1ZmUxYzExYiwgMHg0NTVmYWJlNywKLQkweDdmNmNmZjEzLCAweGY5ZTFlZTljLCAweDdjYWFmOTc3LCAweGRmODI2YWQ1LCAweGQ5YmM5NGJhLCAweDY5NWY1ZjQ4LAotCTB4NGZjOGQxMWMsIDB4OThmY2E1NWYsIDB4NDg3MWRjZTgsIDB4ZjIyYmY4MjIsIDB4NGIzZmU5NTUsIDB4ZTU1OGJmYzAsCi0JMHhjNjJlM2NkYSwgMHg2MWJmNWYyMywgMHhjM2RmMDQxOSwgMHhkMTEzZTdjZCwgMHg2OWE2ZmRhZSwgMHhmYmFlMGZjZSwKLQkweGI3YmYyNTQwLCAweGViZTAwOWE1LCAweDUyODgyZjdkLCAweDcxZWQ2OTY2LCAweDk2NWY1ODU2LCAweGZmZTBjNzM4LAotCTB4MTJhMjkxZGUsIDB4NmZkZjJjZjYsIDB4NTc5MjdmYzcsIDB4MTdlODA3N2UsIDB4NGY5ODAwYzcsIDB4MGVlNDhiNDksCi0JMHhlOWFlM2Y0MCwgMHgyMGVhMGJhZSwgMHhmYjEyMzNkNCwgMHhjOTFlMjdkYywgMHg3YTVlZTdkOCwgMHhiZGYzNDZmNiwKLQkweGUzODY1OTU5LCAweGVlZTQ3ODI0LCAweDdjYTg5ZjZkLCAweGJkYjk2M2VlLCAweDdlZTdjMDNkLCAweDAzZmYzZTkzLAotCTB4M2Y2OTY5OWUsIDB4Mzk1NmIyMjcsIDB4NGM3OTgwYmYsIDB4NzQyOWNkNWQsIDB4OTY4MmUyNWUsIDB4MDBlYmIxZTMsCi0JMHgzZTNjMzlkOCwgMHg3YmFmNjRjMywgMHg3NzM0MmUyMiwgMHhmNTljYTNhNiwgMHhlYmQ5NmY1ZiwgMHgyNTFmNDQ5ZCwKLQkweDIxNWY4ZjRkLCAweGYyNjliNjNmLCAweGNkZmE3NTA1LCAweDQ3Nzg3ZmQ3LCAweDcxZGJkZDI3LCAweDg1OWVkMzQxLAotCTB4YjY5NzU0ZmUsIDB4NTBmMTFkM2QsIDB4ZTc5NzA2ZjYsIDB4OTQxYzJhZmYsIDB4NjAxYjg1ZTcsIDB4NjVlN2MwMjEsCi0JMHgyNGU4OWU5MiwgMHg3MTQ0YmU1YiwgMHgzYzYzYWU4MSwgMHhmY2Q2NTAyZSwgMHhkZWQzYzkxMiwgMHgyOTk3MWUxNiwKLQkweDg0ZTViNTU3LCAweGEyYTMxYzYzLCAweDU5ZTUxNWEzLCAweDkzZjcwNDZmLCAweDA5YmRjNGNhLCAweDFlODRlMmUzLAotCTB4ZTM0NGY3NTQsIDB4ZDhiNzBlNzksIDB4M2JmYzU2MjcsIDB4ZjkwMTg3YmMsIDB4MmFlNTVjYjUsIDB4ZjRhNWZjYTEsCi0JMHgyZGZiODY0MCwgMHhlMTlmOTExNywgMHgzMTk1ZmNmOSwgMHhiZmNlOTFlYiwgMHg4ZDFhMGU3MiwgMHhmNGJkZjFmMiwKLQkweDFjNTE5N2JmLCAweDY2ODEwZmVmLCAweGQ5MTFlYzk5LCAweDZmYmMyZjI3LCAweDI3OTk0ZTFkLCAweGFlYzUzMGM4LAotCTB4OGJjOWY0MDksIDB4ZWU1YWQ3MmUsIDB4MzhmNjdiMjEsIDB4MWYyYjdmZGYsIDB4YmQ4OWY5Y2UsIDB4NzRhOWY5Y2UsCi0JMHg4NDZkNjFlZCwgMHg4MjBkNzhkNywgMHg2ZWZiMTQ5ZiwgMHg0ZWZlMWZjYSwgMHhkMTM4Nzk3YywgMHg5MmY5MWM3NiwKLQkweDc4ZTIxNWNlLCAweDkyOWMwMzExLCAweDc5NjVkYTI0LCAweDJkOGQxYmY2LCAweDk1Y2ZhZmMyLCAweDkzNzk3ZGU5LAotCTB4OGU1ZjcwY2MsIDB4MmYyODk4NDUsIDB4NTM1NTk3MjAsIDB4ZTYxNGU1N2UsIDB4MzM5YjQ3MWEsIDB4ZjEyN2Y2ZWEsCi0JMHg3ZmE5OWI1ZSwgMHhmZTYwYzc5MCwgMHhiNDQxZjgxNiwgMHg2MDEzOWQ3ZiwgMHhhNmZjYzc4ZiwgMHhjMDQ5MmFkMywKLQkweGMzMzE5NWQ1LCAweDg3ZTk5ZjRiLCAweDRlMzUzZDczLCAweGY1OGY0ODk2LCAweDlkOTIwNjQ0LCAweGU5NzY3OTMyLAotCTB4NjlmYjZmM2MsIDB4ODNiNzhhYjQsIDB4NjI2ZWM4NzEsIDB4YWU3ZTFlY2UsIDB4ZWU5M2RkYzYsIDB4YWNjOGVmN2QsCi0JMHg5MDU2MDQzZiwgMHg4Y2FlNjQ1ZSwgMHg4OWRmNWU1OSwgMHhlNmY1Y2UxYywgMHgwNmZmZGM1NSwgMHhmYjE3MjkzYSwKLQkweDc3ZjJkOWFjLCAweGJkM2RhMGNmLCAweDVmZGYxMGZjLCAweGY5OGFhZDNjLCAweGU4YjNmMzE4LCAweGU3ODRiNmRjLAotCTB4NzkzOWY5YTMsIDB4YmMzNjY3NjYsIDB4NmQyYmFmNjcsIDB4MmEwNzlkMTAsIDB4Y2MzMTIzZGYsIDB4ZDY2YjJiNzMsCi0JMHg1MTM4Yzc2ZCwgMHgwYzNkYTY5OSwgMHhkMzYzNzllOSwgMHhlN2E0NWE0NywgMHg0ZDc3ZGM3MiwgMHg3OWFiZTdlMywKLQkweDcyNGY1Y2RjLCAweDQ4Y2NkY2JjLCAweDI1MzY5NTdmLCAweGJiZjE4YzdkLCAweDhiNWM2M2QyLCAweDkyNGZhYTk2LAotCTB4MWI3MjhlN2YsIDB4YjhkYzU3YmYsIDB4MTJmMWZjOTcsIDB4YmM3ZjI2ZTYsIDB4NmU5N2MxYTQsIDB4OGZmYTIzN2EsCi0JMHhiNzBlNDdkZiwgMHgzMjMzZGNmOCwgMHg4ZmU3MmI3OSwgMHgzMjVlZTI1OSwgMHg5M2IwZTIyNiwgMHhiZDZiYzIyMywKLQkweDBhNDUzMWNmLCAweGNlZTRkODNjLCAweDc0Yzc2ODc1LCAweGJjNTY0YWM3LCAweGMwM2JhNjk3LCAweDIzZWQxNmIxLAotCTB4NmJiNzIyNDcsIDB4OWRkY2RmYmEsIDB4OGJlNDk0YjEsIDB4MzRkZWUzMzMsIDB4ZGI4NzU3YmMsIDB4NmMzNzkzYjEsCi0JMHhmMzVlY2I1MSwgMHhlM2VlMmM5OSwgMHgwNTYwMGVlYiwgMHhmNmVmMDgwNywgMHg5MDhmODgyMSwgMHhlMWE4YmNhNCwKLQkweDllM2VlODgzLCAweDdjNjA3NzEzLCAweGYyN2I5YzQ4LCAweDQ0NmZjNzVmLCAweDM4YjhlODVjLCAweDdiY2NhOWJmLAotCTB4OTcxNDU0NmEsIDB4NzQ0OWNjNjcsIDB4MTljZTJhZDQsIDB4NGEzNjc5MjksIDB4MWViMTBhZmYsIDB4M2QwNzdlYzUsCi0JMHhmYjQzZmUxZCwgMHg5MzRmYjgyNSwgMHhmMjY5ZjYyZiwgMHhiZTRkM2VjNSwgMHgxN2M5YTdkOCwgMHg2MmY5MzRmYiwKLQkweGVjNWYyNjlmLCAweDdkOGJlNGQzLCAweDRmYjE3YzlhLCAweDY5ZjYyZjkzLCAweDBkM2VjNWYyLCAweDU0ZTJjM2U1LAotCTB4MTFjZGZmMzEsIDB4ZDFlYTM0ZmIsIDB4YzFiNWU0NTYsIDB4MTBlOWZhOWUsIDB4ZGY2MGZhYmYsIDB4MjQ0M2E3ZjYsCi0JMHg4OTYwZmFkZiwgMHgyNTdjNGZkYSwgMHgxMTg3NjlmNiwgMHgyMTY2YTNlMywgMHg1NDdjNzg5ZiwgMHgyYTc5ZGYzOSwKLQkweGUxMTkzZWQwLCAweGZjZTc5Y2FjLCAweDAzYTlmNzJhLCAweDQyOTM0ZmM4LCAweGQ5YmY5MGU2LCAweGNhMjZmZTBiLAotCTB4ZjZlMWNhYTMsIDB4ZWM3NzZjM2MsIDB4MmRmOGM0ZDgsIDB4MTQwZDI3MjQsIDB4ZTBmZDNjZTcsIDB4OTg3MzlmMDgsCi0JMHhhY2M3OTNlMywgMHhjNjMwN2JjNSwgMHg3ZTcxMjUxYiwgMHg5ZTY0N2FiYywgMHgzOGMxZmZlMiwgMHg2NjE2NWIxMywKLQkweDMwN2NiOWE4LCAweDJkOWNiZGEzLCAweDc3ZTNlNDk3LCAweGM2MWE0Nzk2LCAweDI0ZDYxY2EwLCAweGY3MGVlN2RiLAotCTB4ODMzOWRiOTIsIDB4NWRhM2M1OTcsIDB4N2NiMWFhZDQsIDB4Yzc1YWYxOGMsIDB4YmYzYTFhMDcsIDB4OTRmNWM0YWIsCi0JMHg4ZDI1ZWY3NiwgMHg5MzdlYzQyZiwgMHg4ZWQ2ZTM5MywgMHhmY2Y1ZjFjNiwgMHg5NjliMzhiZSwgMHg2Y2ZjZTAzNSwKLQkweGVlODk0MGFhLCAweDM1MTY2MTZlLCAweGUxYzI4M2NhLCAweDU4MjY2ZTljLCAweGQ2ZWM3ZGI4LCAweDE4MjFkNDVhLAotCTB4MWYxODA5OGYsIDB4YWQxMzc5OGEsIDB4MDRjN2NmMDIsIDB4M2MwYjhmOWUsIDB4YTRkNzdlZTMsIDB4ODVkZmJlMDQsCi0JMHg2MTc3ZWUyNSwgMHhkNThkZTRhOSwgMHgxZjJkZTRhNSwgMHgyN2I0ZjI0ZSwgMHhjNGFjZTExYSwgMHhlNzI4YTZmZCwKLQkweGVlOGI5OGZjLCAweGQwNTE3YzMzLCAweGJlNzBkMjZkLCAweDcyNjFmMmNmLCAweDA5YzNhM2RlLCAweGI3M2EyZTNmLAotCTB4NjllMjJjNTksIDB4NDM3ZjYyOWQsIDB4Y2ZkMmE3NTksIDB4ZmJmMTlmZDMsIDB4MDczMjQ2NWMsIDB4ODNiMzY3ZWUsCi0JMHgwODc2NGYyMiwgMHg5ZjUwMjNkOCwgMHhlNDljMzA3OSwgMHg3YTFlNzI5MCwgMHgwN2VlMThlNiwgMHhmY2UyN2RiMCwKLQkweDEzMjU4NDYyLCAweGM0NGFhM2Y5LCAweGZjOWNiYjUzLCAweDQ4Njk2ZDFjLCAweDIzOWUyMjViLCAweGE1N2MxMmU4LAotCTB4ZDE3Mzk1ZDQsIDB4NmVhMWEzYTUsIDB4Mjg0YjljZjQsIDB4ODg5NmQ5OWQsIDB4MjRiYTEyZTcsIDB4MGRjZThhODMsCi0JMHg0ZmVmZTc2ZiwgMHg4ZDJiYmUwOSwgMHhmNzI5ZTMxNSwgMHhkMTVkZTg0ZSwgMHg0M2VlODc4OCwgMHhiY2YxYTMwNywKLQkweDdiYTMyNmRkLCAweDZlZmI5NzI5LCAweDI4MTFkZTdlLCAweDNhOTZmMzE2LCAweGNjMTlkNzI1LCAweGY3NzQ3ZGNmLAotCTB4MWU2M2Y3MWIsIDB4ZjVjNmE3N2QsIDB4ZGIxZmQ2MjIsIDB4Y2M3ZWU4N2QsIDB4ZjY5NGVkY2YsIDB4YmY3YjMxOWUsCi0JMHhjNjhhZTQxZiwgMHg3NzQ3ZGRmYywgMHg4M2Y3ZjBiNywgMHg2YzE4YmVmNiwgMHg1ZTZiYWFmNSwgMHhiNWVmODMzYiwKLQkweDhmZGQwZTZiLCAweDc1NTNiY2Y5LCAweDQ4OTU2M2NlLCAweDc0ZTdiZjJmLCAweGZmYjNkODY1LCAweGI4YWRjMjFjLAotCTB4MTNlZGRiOTksIDB4ZjRiZmVjZjYsIDB4ZmRlNWVhMWEsIDB4M2ZlZmRhMjYsIDB4ZTA4NjNjMzgsIDB4ZjJmY2Q1NWQsCi0JMHhhZWIzYTQ2NiwgMHhiZmRlM2NiZCwgMHgxN2EzZTFhOSwgMHg3NGVkNDE3ZiwgMHg1NGRjMGQ3NCwgMHhjMTgzMmI5ZCwKLQkweDllZWNkNjc3LCAweDFhOWFmMzRiLCAweGViMWFmYWU4LCAweDQ2Mzg4ZDRmLCAweDkwM2E5OGYzLCAweDExZDZmM2YzLAotCTB4ZTc4ZmRkZWYsIDB4ZWZmNmJhMDEsIDB4NmVmOTA0NzksIDB4NjgzMDAwZWEsIDB4ZjliYjNlNzEsIDB4N2RhMmEwZjksCi0JMHhiZmQwOTMyOSwgMHhjZGI1MzJlZiwgMHg1ZWNiZjFjNywgMHhmMzM5ZDFkMSwgMHg3NGUxN2RhMiwgMHhjM2RiYzcyZiwKLQkweDk5MzlmOTYzLCAweGE4ZDFkNWUxLCAweGVmYWY1NTY3LCAweDUwOGJmMWRhLCAweGZkYTA2NzZjLCAweDZlMTBmMjllLAotCTB4YjVjOTE1ZTcsIDB4ZmUxMTBmNTksIDB4M2NmMWRhNWUsIDB4ODE5NzdiY2UsIDB4MzEwYjVmZjYsIDB4YzJmNTAyYTYsCi0JMHhhNzE0MDkxZCwgMHg1ZjFmZTM3ZiwgMHg2NDNjNDdjYywgMHg3Y2U4ZGJjYiwgMHgwNjc1ZDdjZiwgMHg5NGUxYzIxNSwKLQkweGNmMDAzNmQ2LCAweDY5NGUzOGQzLCAweDE0MmNkZmM4LCAweGZjZDNjMmY1LCAweDYwNTE3ZGJjLCAweDJmZTEwZTdiLAotCTB4ZjUxYTNhYjQsIDB4NDdjMGQxNmMsIDB4YTdiY2UzYTcsIDB4YTIyZmQ1Y2EsIDB4ZTY1ZWMzYmYsIDB4ZDg1ZGM2ZjcsCi0JMHg3ZTgzNzAwNSwgMHg5NDM1ZWExNywgMHhjYmI1ZGFhZCwgMHgzYmUyZTc0NCwgMHg3OGY5ZWFhNSwgMHg5ZWEzODkzZiwKLQkweDU0MzRlYmI3LCAweGY1MWQzYzEzLCAweGI0ZGVmYzQ5LCAweDQ4ZTgzMDVkLCAweGU3YzViNzZjLCAweDk3ZmE4NWY5LAotCTB4YmQxZmQxZDMsIDB4ZjI1NGNhZjgsIDB4NTVmYTE1NGIsIDB4Y2VhOGE1ZjgsIDB4M2YxZDdjZmYsIDB4ZmUyNDVhYjcsCi0JMHgzMzA3NjY2NiwgMHgyZTkzYzU3YSwgMHhlYmFlNzgxZSwgMHhmZmQzY2NiNywgMHhjZTg2ODM2MiwgMHhkOGVhMTc3OSwKLQkweDU2MGZjYzVhLCAweGVhMjhhMWY4LCAweDVmNWM1Y2FlLCAweDExMzZhYTkxLCAweDMxYzI5NmVkLCAweDJmOTFmM2VkLAotCTB4M2U5ODE4MmUsIDB4MjdiZGRhMDIsIDB4ZTM1MTU1ZjQsIDB4ZmY2ODE5ZWEsIDB4YTYzZTY4ZGUsIDB4YmY4ZjljMTEsCi0JMHhlYjdhZTA4OSwgMHhkMzgzMjY5YiwgMHhiZmQxYmY3YiwgMHg5OTkyYjRmYywgMHhkNGYwNGZkZiwgMHg3YmUxNWE3ZiwKLQkweGFkM2RmMGRlLCAweGI0ZmQwNGFiLCAweDNmMmUxMGIyLCAweGJjN2I0MGNlLCAweDdjNTAyZTkzLCAweGJmNGFjMTY3LAotCTB4NzgyMzkyNzMsIDB4YjY5OTY0NWUsIDB4OWVmNTExM2QsIDB4ODYzZmZlMzIsIDB4YTg1ZGI5OWIsIDB4YjdmYmE3NmUsCi0JMHg0NTRkZmJmYywgMHhjOGU1MDQ3MywgMHhiNzllN2U2ZSwgMHhhMGVhNTFhOCwgMHg1MjA4MjI3MywgMHg4YjY2N2JhZiwKLQkweGU2MjcwZWY0LCAweDg3ODdmNTA5LCAweDA3ODEyYzg4LCAweDExYjllYjE4LCAweGEyOGYzNDMxLCAweDA3OWQwMzA2LAotCTB4MGY2ODBlMmYsIDB4YzRhOTNiNDIsIDB4ZjY4NDFlZDQsIDB4MzJlYmQ3NGYsIDB4ZTg4OWMzZGQsIDB4OGZjNjU1MGIsCi0JMHg4OTRmN2NmNSwgMHgzNGJhMTYxMywgMHhkZjdmNDMzNiwgMHgxYzYwZTU4MywgMHgwZGZlMTk3MiwgMHgwNDc1NzhhMCwKLQkweDY4MmEyN2RmLCAweGNmZTdlNDBhLCAweDFlNzRlZGNkLCAweDI2M2NmZmRiLCAweGM1ZWNkM2FlLCAweDJmNGQ1ZDhmLAotCTB4ZTlmYjc5ODUsIDB4Nzk3MDQ3YTMsIDB4MTA3NTJkZDAsIDB4ZTNmZjc0ZGYsIDB4ODNhNDY4ZjMsIDB4OGI1YjE1MjIsCi0JMHgyNTE3OTVmYiwgMHhlYTAyMmU3ZSwgMHhhMmUyMWU3NCwgMHhmYTJjZjdkOCwgMHhmNDgwMThkNiwgMHgxMjliZjE3MywKLQkweGE5MmVlM2UyLCAweGZiNWNlNDlkLCAweDdjOTMzZmVlLCAweDkzYjRkMmU4LCAweGM0NjhmYjljLCAweGU4ZmM5MzdmLAotCTB4OGY5ZjZlMGEsIDB4NDQ3ZGFiNzIsIDB4ZDkxZjdmMGYsIDB4MjNjZjFmM2UsIDB4N2M3NTg5YmQsIDB4ODFmZmY3OGYsCi0JMHhmZGRhZWZmZSwgMHhlZmE4ZmRlZCwgMHg4ZjNjY2FhNywgMHgzMWE0YmQ4MiwgMHg4NzEwZjhmMywgMHgyNzAxMzJmNywKLQkweGFlOWMzNmM2LCAweDYzNDNmZjI0LCAweDJkZDBmZDQxLCAweDE2NmYwM2U4LCAweDk4ZmU1ZTY0LCAweGNjNWQ0ZmMyLAotCTB4ZjkxMWE3YjIsIDB4YzdkZjgwYjMsIDB4YzM1NTc2MDMsIDB4Y2RmZjY4NmIsIDB4ODRmYmEzMDksIDB4ZWNhNmUxZmMsCi0JMHhmYzg2ODYzMywgMHg2OWUyMjk2ZCwgMHhjMGZlYzk4NiwgMHg2OTUzODAwOCwgMHgxN2Y5M2I2YSwgMHg4N2E0ZWQ0MCwKLQkweDkxZDRkZWNhLCAweGU5YWRkOTlmLCAweDJiZjI4MWQ5LCAweDhiOWY2NGM1LCAweDZkYjQ0YWVkLCAweGJjMjQzM2ViLAotCTB4MTViZGEwYTcsIDB4Y2EyOWZhNGQsIDB4Mzk5N2M3ZjksIDB4YmVhNTc1YmQsIDB4ODg0ZGNmYzQsIDB4ODE2MmNhN2QsCi0JMHhiMjViYmMwNywgMHhlMjQzZTkxNiwgMHg2OWFiN2U3OCwgMHg2ZjI4ZmJkZiwgMHg0OGUyZGFiYSwgMHhkM2YzZmI0ZSwKLQkweGU4YTdhNjg1LCAweDQwNGY4YTllLCAweGUyYmMzYmFmLCAweDdjMmM5ZjAwLCAweDY2MDFmMjk5LCAweGYxODgxZTYzLAotCTB4YmRiZTczZmEsIDB4ZmU0YmRkZGYsIDB4ZjVlY2RiMjAsIDB4YzZiMWU5MWMsIDB4MTcwZmVlYjcsIDB4MGZiNzRiYTQsCi0JMHhkZTY4MzgxZiwgMHgwMGRmOTAzYiwgMHhkYTEzYzVmZSwgMHhiZTg3N2VlOCwgMHhjYmE4NGNmYSwgMHg3ZTIzZjU1ZSwKLQkweDc4ZjZiZjc1LCAweDBmZGEwMDVmLCAweDUwNWQ4NDNiLCAweDlhN2RkNDMyLCAweDNjM2RmN2ZjLCAweGY0MGFiNzZmLAotCTB4MDdmN2Q1MWEsIDB4NmFhNTdlNTIsIDB4NTBhZGU4MGYsIDB4NWY1MGI3YWUsIDB4NTFiNTA3MTQsIDB4YmY2YmFhZGMsCi0JMHhkNzc5ZjY4ZSwgMHhjNjhmOWYzNCwgMHg1MjNkMDNmNSwgMHhmOWI4YTY3YywgMHg3Y2NiZGQyMCwgMHg0Yzg3ZmQxMCwKLQkweDk0NjE4ZmQyLCAweDM5YmZiMzE3LCAweGU1MTBmZDBjLCAweDk1Y2E4OTc5LCAweGQzZjVmMjI4LCAweGNmMjg3ZTUxLAotCTB4MjI3NzY1NGIsIDB4ZGE5NWYzOWQsIDB4ODM4OGZlZTgsIDB4MmEyNWRlNjIsIDB4MTc1OGNiYTgsIDB4ZGYzODk2ZjMsCi0JMHgyZjdlNjZiMywgMHg1ZWRlM2Y5NiwgMHg3NmVkYzExOSwgMHg5Zjc0MGY5MCwgMHg3OWQ3OWFlNywgMHgwNzkxNDBkYywKLQkweDFjYWU0Mjg1LCAweDljYTllN2MxLCAweDNlY2FjZGZmLCAweDQ0MmQ3NDExLCAweDRlNDdlZmJlLCAweDBiMzA4ZjI0LAotCTB4ZTI4MmI4N2YsIDB4NTg0NjNiM2EsIDB4YTdmNDVkNzgsIDB4ODlkYzc5NzEsIDB4ZDFiZDk3ZGUsIDB4OGE5YjFlOTksCi0JMHgzZGNhMmNmZCwgMHgxNDc5MWU1ZiwgMHgyODJmOTFlNywgMHgwZTQ4MjIwNywgMHhjMTg0ZDFhYywgMHg5NDVlOGFiYSwKLQkweGMyYTJmZWU4LCAweGEwNzNhYjc5LCAweDdlYTY1YjM5LCAweDJkNDllZTg4LCAweGUzNWJiY2MwLCAweGE3ZjJmM2Y1LAotCTB4NTdiOGYxYTMsIDB4ZWM1MmYyODgsIDB4ZTBlZDE1MDMsIDB4MzUxNzQwZmIsIDB4ZTQwZDFmN2MsIDB4MmZmNWU1MGQsCi0JMHgwNzNhYjQ5YiwgMHg2ODQ5NmZmOSwgMHg0ZmRiZDZhOSwgMHhkN2Y4ZDliZSwgMHg1OGFmNWI5ZCwgMHgwZmRlMTM5ZCwKLQkweGRjYWQxNzlmLCAweDVkODgzYWQyLCAweGJkYTE1ZTNmLCAweDcyY2MyNzM2LCAweGRlNjU3M2ZkLCAweDNjY2EwZDE3LAotCTB4NzkwNjY4MjcsIDB4ZWFmNjYzYzMsIDB4NzM0ZmJjMWMsIDB4ODVkZmZlOTksIDB4YzVmNzVmMDcsIDB4ZjUxYjlkNjYsCi0JMHhmNjk3YzAyZSwgMHg1NmJjZWU4MywgMHhiZDVmMTNlMSwgMHhjYzg1NzhkOSwgMHgzNzFmZmI0OSwgMHg1OTdmYmY5YSwKLQkweDUzNGZiOTIyLCAweDU3ZjAyZDVlLCAweGY5ZDlmMTNkLCAweGEwZmRlZjY4LCAweGY2YmU0MjI5LCAweDE2MGEyNWM1LAotCTB4NDA3YmEzMGUsIDB4Nzk4NzBiZWMsIDB4NGJmYzI1YzcsIDB4NTU4Mzk0MTAsIDB4YTBlMjMzOTQsIDB4YmU3MGY4MTIsCi0JMHgyODc4MWZiNSwgMHgwNDY3ZmZlZCwgMHgzMjlhNGZjZiwgMHhlMGQ1ZjM4MiwgMHhiZGNmYzVhOSwgMHhhMzllMjhjNiwKLQkweGUzNzQxZDRlLCAweDU0YTYyMWYzLCAweDdjYjc0ZmNlLCAweDIwNjI2NDNlLCAweDYwYzg3NzZmLCAweGY3NGZiOGM2LAotCTB4NWM1MWJmYTEsIDB4NzE5ZDdiYjgsIDB4MzA2ZmRmMzYsIDB4ZGY3ODQ4YjIsIDB4ZGRiNjkxMWEsIDB4OGFmYmZlM2IsCi0JMHhlNzgxNDczOCwgMHg3ZWZjZTliZSwgMHhlMzg3ZTZiMiwgMHhiZWE2YTk0YSwgMHgxYmQ5MTJiOCwgMHhjZmI0ODFhOSwKLQkweDk1NzRkNWQyLCAweDRiNzc1YmY0LCAweDQzZjcxOWE2LCAweDQ2OWNkYWJhLCAweDdmZjJiN2U0LCAweGVhMTg0ZmZjLAotCTB4YjM5NmFlZTEsIDB4ZjVkNjk3OTQsIDB4NTdjYTc5ZGQsIDB4MDZmMjI4ZGIsIDB4N2M4OTM0OGYsIDB4MDk4YjM2YWYsCi0JMHg3ZWU3Nzc5ZiwgMHgzNmVkODM5MSwgMHg1NzEzZDI4OSwgMHhhNTMxNzFlMCwgMHgyNTY1ZmM1NCwgMHhmZjc1ZTA3ZSwKLQkweDZiODQyOGQxLCAweDkzZTM3OWJkLCAweGE2MGYzMDE5LCAweDFkZGZhNmFmLCAweDA0MzlmZjAwLCAweGFlMjc4N2Y1LAotCTB4YTFmZjA5NjAsIDB4MmI4YzRhM2MsIDB4YjhmMDI3YzQsIDB4NTcxODk2MDIsIDB4YjhmMGQ3ODgsIDB4YWUzMWQ2MDIsCi0JMHgxNWM2MjU4MCwgMHgxNWM2MzlmMCwgMHgwNTcxOGViMCwgMHgwMTVjNjNhYywgMHhjMDU3MThlYiwgMHhmODBhZTMxMiwKLQkweDhlNzE2YmZjLCAweDM3OGMxYmEzLCAweDkyMzRmNzFlLCAweGNmNTE1ZmZjLCAweDg4NTc2YmY3LCAweGQ0NTdhMWZiLAotCTB4ODViNzk0NGEsIDB4MGY1MDM4ZTcsIDB4ZDNjNzk3NWUsIDB4NWM3OGYyMjgsIDB4YjAzZjY4NWIsIDB4NDU2Y2JmN2MsCi0JMHgwZjc5ZTE1NCwgMHg3OWYzMGU4NywgMHgzYzYyOGU3YSwgMHg2NGFmN2NhOCwgMHhlN2MxNmQ1ZCwgMHgxYjFlNjliMywKLQkweDllM2YzMjViLCAweDM1ZWJjZjg3LCAweGFjOTdiYzU2LCAweDMwOWJlNWJiLCAweGI1MTU3NzhjLCAweDZhZGM1M2Q0LAotCTB4MmQyMWY4NTIsIDB4NjI0MWI5ZTEsIDB4YTU5ZDZmMTgsIDB4YTk3MjdlZTMsIDB4ZDM0NzRmMGMsIDB4ZDFkOTI5YmUsCi0JMHhmMjM2YmFhNSwgMHg0YTc3OGE1ZiwgMHhkZGYzZWY2NiwgMHg5MGFmNjNlNSwgMHg5YmNiZTg5YywgMHhmOWNjMTk3MiwKLQkweGM2ZDVmYTNlLCAweDRmZjBhZWYzLCAweDU3ZDg4ZmM0LCAweGY0OWJjYTVlLCAweDNkOTE1OWU1LCAweDJkMWY2NWUyLAotCTB4N2M2NGZkYzUsIDB4ZTc0NzdmMmUsIDB4ZDFjMTRhNGIsIDB4OTNmNTI4MWQsIDB4Y2ZiN2U1ODcsIDB4NzdiMmQ0NWMsCi0JMHhlMjliZGUzZCwgMHg3N2RjZGZiZiwgMHg5ZjZmY2Y1ZSwgMHhkOGFhNjU3OSwgMHhjZmM1MWU0ZiwgMHg5ZDNlZTQ4OSwKLQkweDdjM2Y2N2JmLCAweDQ3NWFiN2FmLCAweDcwZTU0YWY2LCAweDI2NmE2NTdiLCAweDI4ZDg2YmU2LCAweDkwZjQ3MmVlLAotCTB4MmZhZGZjODEsIDB4YzRmOTI0YjcsIDB4MjFlNWIyNWQsIDB4YWU1OGY3MTQsIDB4NmI4ZjQ4OTEsIDB4YjBlYmVkOTIsCi0JMHhjNWRjYzRkZiwgMHgxODk5NmYxNCwgMHg1NjdlMjI2MSwgMHhhNGJkZjBlOCwgMHhmZGYxYzdiYywgMHhjNTBiMzRmMiwKLQkweGVjNzViMmJiLCAweGM4OWUzNDY3LCAweGY4OTI4MmVmLCAweGEyNGFiYjJkLCAweDMyMTdhOTdiLCAweDU5N2I5ZDJiLAotCTB4ZjJmN2UzNjAsIDB4MmRlOGY3MjksIDB4NDFjZjNjNjAsIDB4NWJlNWFiYTEsIDB4MjgyYmIyMjQsIDB4ZmI4NjExMDAsCi0JMHgwYjllMWM5ZCwgMHg3YmExZGU1YSwgMHhjNGViMTY0ZiwgMHhiZTJhN2UzZCwgMHg4OWI1MWUxZiwgMHhjMTJjYmZlNywKLQkweGRlZjBhNDFiLCAweDU4YWJkMDEwLCAweGIzN2Q5ZTgyLCAweDAzZGI5ZTFkLCAweDNiNzM0NDg3LCAweGUzOGUxMmRmLAotCTB4YTFhZTNjMmYsIDB4ZjBlY2UxM2MsIDB4YTRlZDEzYmIsIDB4M2U1MTI3ZWYsIDB4ZjZlZjVlMDMsIDB4OTIxZjg4ZmQsCi0JMHgwY2Y5YmVhMywgMHg0Mzc5MzU0NywgMHg0OGFkZGQ3MCwgMHhiMWU3MTRhNywgMHhiMmJjNzk1MywgMHg5ZTI1NGE4MCwKLQkweDc2MmZlNGEzLCAweDE3YjgzYTFmLCAweGNlNWQ5ZmJmLCAweGUxYmRlNWVmLCAweGZlODBiZDc5LCAweGU3MjlhZGNmLAotCTB4ZjkxNDVlMTUsIDB4NTNhYTUxNzUsIDB4NzVmY2YwNjMsIDB4MmI0NmI3ZDQsIDB4ZmMzYjNmYWUsIDB4OGFmNzlkMTAsCi0JMHg0ZTFmZTMxMywgMHhlNTAzN2JjYywgMHgzOTg4MmQ4YSwgMHhjYmVlMWZiMCwgMHg3MzNjMDM1NCwgMHhjNjEyMDE3MCwKLQkweDNjMzY1ZGNkLCAweDQ4NzNkMzM3LCAweGY1MWU1MzMyLCAweGNiNzNmMjc1LCAweDI5ZWZjYzNhLCAweGRlZTg5NzhmLAotCTB4ZWE4MDljZjAsIDB4M2YxODMwZWMsIDB4OGFjNjM2MjcsIDB4ODliY2JiZjIsIDB4YTBiYjVkYzcsIDB4YzNiZjc4ZTQsCi0JMHgzMTgxZjc0OSwgMHgxNGQ3M2Y3ZSwgMHgyNDkwYjc4MSwgMHg0Y2Q0ODlmYiwgMHg4MmE5ZjNjZiwgMHhhZTViYmE2ZiwKLQkweDliZTFmY2YyLCAweGU4ZWI2NWM3LCAweGIwNjYxM2JlLCAweDIxYjFmNzJhLCAweDE4OGVhN2RlLCAweDg1NTlmMTRhLAotCTB4YzIxYjdhNmUsIDB4N2NkZDIzYjcsIDB4YmNjM2Y0MmUsIDB4NjgzNTI3NzksIDB4NmM5ODdjM2YsIDB4MzBlMTBjZmYsCi0JMHhiYWNhZmYzZiwgMHhmZjY3NWEzMCwgMHhjZjI1MzFmMSwgMHhhNjNlM2ZkZSwgMHhhYmZmZWRjOCwgMHgyYmY3ZmFmYywKLQkweDUxM2NhODJiLCAweGI2Y2E5MmI5LCAweDA3YmQwNzRhLCAweGVhNzVmMGJkLCAweGZmNTVjNWFkLCAweDhmZjVmMDhlLAotCTB4NjViZDMyYWIsIDB4ZTA1N2U5MDAsIDB4ZjZjNzFlNmYsIDB4NWYwMmEzOGIsIDB4N2FmOGJjYWIsIDB4YTJmMDRiNjIsCi0JMHhkNDdmNjgwZCwgMHg0ZmZlZTk2OCwgMHg2MTVlNzdjYywgMHg0OWEwMzkyNCwgMHhhYTllMzdlYiwgMHhmMTQ4Y2RjMCwKLQkweDE4NjY1ZWQ3LCAweDkwOWZmMDhkLCAweGMxNTZhNzFjLCAweDkyNjkwMWZiLCAweGYyMDBmZWNmLCAweGY5MGZhZTA5LAotCTB4MTNlNDRiMDQsIDB4ZjNkYzU3YjUsIDB4NzBiMDJkMDUsIDB4MWMwN2I3MDYsIDB4MDgxODBmNjQsIDB4ODM1N2ViYWYsCi0JMHgxZWYwOTBmYywgMHhmYzhmYjMyNSwgMHgzZjI3ZTRiOCwgMHg5MDc5NzFjMCwgMHhmMGI1N2RjZSwgMHhlZjI1MjZmYywKLQkweGQ3MTQwMjczLCAweDRmMjNmNzQ2LCAweDBjOWU1YzVjLCAweGMyZWQ3MDBkLCAweDBiMmQwY2VmLCAweGEzZTJiY2EwLAotCTB4NDc1ZjRlMWEsIDB4YjliY2YyMzcsIDB4ZWZjNzk2N2MsIDB4YWU1ZWJhNmYsIDB4MTYzZTIxMDQsIDB4ZjMzOWVjMGYsCi0JMHhmYzVmYjQzYywgMHgzNWQ5MjMyYiwgMHg2Njk3MjNlYiwgMHgyNTcyMjdmZCwgMHhjM2MzOGQyMCwgMHg2MzI1ODEzMSwKLQkweGNhY2RmMjdlLCAweGUwNDVlZTdlLCAweDMxNGU2NmY3LCAweDJlNWI5ZjkxLCAweDdjYjJhMGVjLCAweDcyYTdmMTMzLAotCTB4ZWQ0Y2I0M2UsIDB4ZWQ4ZjU4ZWEsIDB4ZmYzYzRkNDIsIDB4YmVlOGNkNDMsIDB4YzFhYTUzOTYsIDB4YzE1OTllZmMsCi0JMHhjNGE2YTc2NywgMHg1ODYwNWU1MSwgMHhhODg3YmYxNSwgMHhlZTg5NmVlNywgMHhjODE0OWUwMywgMHg1NmM4NTdlZiwKLQkweDBjYmM5NWU1LCAweGI5NTZkZmVmLCAweDU0YzFlZmM1LCAweDEyMmJmOGQzLCAweDczZDE1Yzc5LCAweDZiZGI5NTFlLAotCTB4YmEyNmI5NTEsIDB4YmFmNjQxM2YsIDB4YzYzMWE5M2YsIDB4MzlmNDVlZWIsIDB4NmVjZmJlZmMsIDB4NGRmZjcyYTcsCi0JMHhhMDg3YmNkZSwgMHg3ZTFjY2Q1ZiwgMHhiMzM3NjZjZiwgMHgwM2ZiODEzYywgMHg3MTAwODI4ZSwgMHhiNWU4MTI3ZiwKLQkweDk5ZmRjZjBjLCAweGVkYzlmZTA3LCAweDE1NDI5ZWJjLCAweDE5YWQ1MzlkLCAweGViOGQ1OTY1LCAweDQyY2M3OWFhLAotCTB4MjdmNzNkZWYsIDB4ZThkY2Y4NzEsIDB4ODJkYjljM2UsIDB4ODM2OWY5ZWMsIDB4ZTcxN2JmYWUsIDB4Y2U2ZjI5MTksCi0JMHg2NjlmZWMxMiwgMHhlMzRmZjdlNCwgMHhlZWQwOGRlNSwgMHg0ZmUxOWNlOCwgMHgwZTM4NDBlYywgMHgzZGEyNjRiMSwKLQkweDcwNmM2OGJlLCAweDExZjQwNDk2LCAweDA2ZjMwNmE1LCAweGQ0NjMwZmU4LCAweDQ2ZDA1Zjc0LCAweDcxZjMxM2I1LAotCTB4N2RjNWE4ODcsIDB4ZWYyMTZhMDEsIDB4ZDE4MGM4NjEsIDB4ODVhNmRlZDQsIDB4OTZhN2MyZmEsIDB4YWJlYTFiMzEsCi0JMHhmM2Y3NDYyOCwgMHhmZWY5ZWJjNiwgMHg1ODYzZjQzOCwgMHg0NjQ2Yjg2MiwgMHg3Yzc4YzgzZCwgMHgzZTAwZTE2OCwKLQkweDQ2NzBjMmZlLCAweDQ1YTVjZmJmLCAweDNiZjI1MDE2LCAweDI2NzdmMGIzLCAweGIwYmJjNTE4LCAweGVhNjhkMDdmLAotCTB4ZmVmMTUwZWYsIDB4YzM5NDM1MzYsIDB4NTIzZGY4ZTIsIDB4YjQ3NGViM2QsIDB4ZjFmMGJhMmYsIDB4YTcxZmE0YTEsCi0JMHg3NzNkZjA0ZCwgMHhlNzhkMzI3ZiwgMHhiOGU1MjgyZCwgMHg5ZjBmOGI3NCwgMHg0MjliNWEyZiwgMHhkNjhiOGJmYiwKLQkweDNiNDUyOWNlLCAweDQ4MTBkZWM0LCAweGVmM2IwMmU3LCAweGVmMGJhOTdiLCAweDlkOTYyZjcxLCAweGY1ODIzZjRiLAotCTB4NTdiNzRlY2MsIDB4NGEyZjdjMjMsIDB4YTFmYmY5OTYsIDB4ZGZmYmEyYzEsIDB4OGM5ZTYyZDIsIDB4ZjJlMzM1ZGQsCi0JMHg3NzRlNTBlYiwgMHhmNzgxM2RlYywgMHg0ZmJmNGRlNCwgMHgxOWQzZmVhNiwgMHhhZDlhOGZiZiwgMHhkZTZjZjdlNSwKLQkweDhlYTJiOGVkLCAweDFlZWZmMTgwLCAweGJjYmM1MTI3LCAweDQ2OGU2MGMzLCAweGMwYTE2ZWZiLCAweDVjNjlmM2Q3LAotCTB4M2Y1YzJmN2UsIDB4ZWJmZDExMzQsIDB4YmRkZjcxYmIsIDB4NWE3MzNkMWYsIDB4MGZkZTUzYjQsIDB4ZmM3Y2M4OWIsCi0JMHhmYmM1NGY5YiwgMHhmZWY4ZDM0ZiwgMHhmZTM4YjBmYywgMHhhZTgzN2YzZSwgMHg0YjA4MmUyMywgMHg0YTA5M2I4ZCwKLQkweDRlYzI3NThkLCAweDU4YjRjZjVjLCAweGUxMTViMzk2LCAweDM3OGYyOGY4LCAweDliOTgxODc2LCAweDhkM2ViMWU4LAotCTB4M2Q2NzZhZTAsIDB4M2FlMzhmMWQsIDB4M2FkMDQ2ZWEsIDB4YTM5YmM2M2EsIDB4NzEwZTVlZTksIDB4MzMxMmViN2YsCi0JMHhlMzFkNGY5NywgMHg5OGNlNzdmOSwgMHhhOTIxNGRkYiwgMHgxZWYwN2Y5YywgMHhhNTAyYzVkNywgMHgzZDU2NTc2NywKLQkweDViYjQxYjc5LCAweGU3NGY0YWJjLCAweDdkM2M5NzM1LCAweDhiMmJmOTJmLCAweGE3M2E2NDZiLCAweGRlZmIzNmM5LAotCTB4YzRmYTBhZTMsIDB4YmZmM2YzOGQsIDB4ZGVmZmQ1OGYsIDB4ZDIzOWM0NTUsIDB4ODk2NmZlNDEsIDB4OTU1ODY4ZTgsCi0JMHhmMWZiOGI1NSwgMHg0ZWMwNWIzZCwgMHg0NmY5Zjc4MCwgMHgwNWRhM2M3NywgMHg3NTgzNTZmOSwgMHhiZGNmZDQ4ZCwKLQkweGRjMDFkZmFjLCAweDZiOWVmMGIyLCAweGNmOTNmMTQ2LCAweGUwMWZlZGQzLCAweDJmNTYxNzc3LCAweDAzNTA3YmE0LAotCTB4MTcxNGVkNTMsIDB4MjE3ZTA2MWIsIDB4NDg0MTNmZGEsIDB4NjlkNzAwM2YsIDB4N2ZiYTVlMDAsIDB4ODkxZWRkNDIsCi0JMHgzNGZhY2ZmZSwgMHg5Y2M0M2NmMSwgMHgzNGJhMjQ2OCwgMHgwZWU3ZTQzMCwgMHhlNzExMzk4ZCwgMHhhMGNlYjFkNywKLQkweDZkMzE5OTQyLCAweGUwNGZhNzBkLCAweDM0N2FiZDFiLCAweDAxNjAzMzllLCAweDRiYmZiZmM4LCAweDZmMzk3NGUzLAotCTB4MTZhZjNhYjUsIDB4NmQ0MDQzZWEsIDB4NmU5MDQyOWIsIDB4NGU3ZDExNDYsIDB4NTBlYmRhYjYsIDB4MThmNTdkYWYsCi0JMHg3MzcyOGIxYiwgMHg3YzJkZTZmMSwgMHg0Y2ZmMDI1ZSwgMHgzNGU3NDZkZCwgMHgxOThmYWFiZiwgMHgwYTA2Nzk4ZCwKLQkweDRlYjY0YzNkLCAweDRkZTY5YjM4LCAweDg0NDlmNzA3LCAweDMxY2Y1ODdmLCAweGViMWEzN2Q0LCAweDJmNWM0ZWEyLAotCTB4ZjQ4YzNmM2MsIDB4OWI4MjZkMzEsIDB4ZTViMjEyZjIsIDB4YmNmZGZhMTIsIDB4Zjc0NjA4ZGUsIDB4Y2UzMmY0ZjIsCi0JMHhkNDFiYmRhZiwgMHgzOTE0NjdhNCwgMHhhMDAzYzhhMSwgMHhkMzllMWIwNywgMHg3ZmZkZjA1NSwgMHhmMjI4N2Y2NSwKLQkweDcyNDNlMDA2LCAweDhhMWI5MTQ1LCAweDRiZTg1MTdjLCAweDc0ZmUzMzkxLCAweDdjYzAxZjM1LCAweDRmZWE2OGU3LAotCTB4NjM5MTRjZjIsIDB4NjhkNTBlYjgsIDB4ZjA1MTdjOGYsIDB4NWUzMGQ5YWMsIDB4ODE1NzcxNDUsIDB4ZDJmOTZjZTcsCi0JMHg4NzA4ODM5ZSwgMHgyZGQ5MjMwMiwgMHhlYTMxNzA3ZCwgMHg1YWQxMmUwOSwgMHhjZmY3ODRkNiwgMHhiNzk0M2Q1NiwKLQkweGUzZDIyOTc3LCAweGQwNjM3MzJmLCAweGUwNWI5OGZlLCAweGE3ZjI5ZTdiLCAweDI4ZTdiZTE1LCAweDNkZjRhYzE3LAotCTB4ZTU2ZjM5NDcsIDB4ZmM2MjhlOWYsIDB4MGZiMDBkODksIDB4OWNmYzA3NGIsIDB4MTdiOWU1ZjksIDB4ZWZlYTg2M2UsCi0JMHg4MTMxNzk3ZSwgMHhlYTk3ZDlmYiwgMHhhZWVmYzU5ZiwgMHg2OGYzMTAwYSwgMHhhNTVhZjNlNywgMHg0YzMxYmQyNSwKLQkweDBmZjg4MWQ4LCAweDcxODhiMmYxLCAweDEzMTg1ZDNlLCAweGRmZjUwMjdjLCAweDA5M2YxMDVmLCAweGYxYzFmZmI4LAotCTB4NjdlMDQ2NzMsIDB4ZTgwZmMyMTEsIDB4YWUzYWUxN2UsIDB4MTIxYzNhOTcsIDB4YWQxNjIzYzUsIDB4YzFiYTdjMTUsCi0JMHhlN2Y0N2NmNywgMHgzMDNkYWM5MSwgMHhmYThlNzNjZSwgMHhhMzEyYzdmMywgMHg3Mzk1YWY5MSwgMHhmYzBkZjZkMywKLQkweGYyYjRiNTVjLCAweDc2MmZkOTE4LCAweDg3MmQ3ZWU1LCAweDJiNWFmZGRmLCAweGViZjlmOTViLCAweGNkNzNkZjc2LAotCTB4MmQzNjE5ODEsIDB4ZjcxODJiYzUsIDB4MWYyNTE2YTMsIDB4ZDUzNmY5ZTEsIDB4YmJmNzE5OTIsIDB4ZmNmM2M1ZjMsCi0JMHhiOWNmOTIwZCwgMHgxZTc0OWNiOSwgMHhhNjk4ZGExNywgMHhhM2I2M2MyNiwgMHhjYWYxNDI5ZCwgMHgwYTJmZDI2YSwKLQkweGEwZGM4MjlkLCAweGQ1Zjk3YzczLCAweGJkNGJiNGEzLCAweGYxMjJlOGU0LCAweGNhYjI3MTdjLCAweDM2ZDc3N2U3LAotCTB4ZWJmZGYxYTYsIDB4MTgxYTY0NzYsIDB4YWM3MjUzNzcsIDB4M2JjOTA5NzYsIDB4OTU0N2M1MGIsIDB4NDc5MjhiZjYsCi0JMHhjMWI4YzdhZiwgMHhlYmY4Y2RhMiwgMHgzM2ZlOWU0NywgMHgzNjdjZjlkMywgMHhkYzk0Zjk4YSwgMHhlNWY3Y2U0MCwKLQkweGI3OWZlMTU1LCAweDlmYzliY2QzLCAweGY3NzU3YTJlLCAweDAzM2JmOGFiLCAweDkxZDU3ZjQ1LCAweDI5MWEyOTllLAotCTB4OWQ1M2Q5ZjYsIDB4M2VkMmY3NTksIDB4NTVkNzNmMzIsIDB4NjkzZGYwMjYsIDB4ZTg0MTY3ZjcsIDB4ZjIzNzk0MjcsCi0JMHhlY2ExYjJmYiwgMHg1NTZjYjJjMCwgMHg2NWZiZjkwMSwgMHg5MDg3ZTA1NiwgMHhkZmJmZjNlYiwgMHg0MWFmZjU3ZSwKLQkweDg4ZWNiZTNjLCAweDQ3ZmZiZjEyLCAweGQ2NTU2M2JmLCAweDFmYzUwNWY4LCAweDY0NzcyZWQwLCAweDRmOTQ3OGQwLAotCTB4NWNiZmRmZWUsIDB4ZmI4ODJlZmEsIDB4OTcwNGVkYjEsIDB4ODRkZjQzZWMsIDB4NWZmNjNjZDEsIDB4Zjk3OWI4YTUsCi0JMHhmNjYxNzVhMSwgMHhkZDdkZDY3ZSwgMHhjZjExMDEzOSwgMHgyYWY4MTcyOCwgMHhlMGFmOWI2NywgMHhhYWY5NWFmZSwKLQkweGM4MmNmM2RjLCAweGJmN2ZiZTMzLCAweGNlMjJlOTc1LCAweDhkYmIxYjcwLCAweDRjZDVkNmYyLCAweDVjY2Y3ZGU1LAotCTB4MDdlMTMzYWYsIDB4YjdjYjI1ZjMsIDB4YmQ5ZDczZjIsIDB4ZGMwMGNiNmEsIDB4ZTcxNmViOTcsIDB4MWRkYmZjYjQsCi0JMHhjMzdlZTc0ZiwgMHgwYzI3ZTA2NSwgMHhjODM3NzQ0NCwgMHhkZGQzY2ZiNCwgMHg2NTc4ZTNjMCwgMHhlMmI1NGYwZCwKLQkweDcwMzJkOGY5LCAweDk1OWQ5MTljLCAweDhkNjU0NDczLCAweGViN2JkMzMyLCAweDFhNDdjYzM1LCAweDE2NzllMzc4LAotCTB4ZmRkMTM2ZWYsIDB4YzkyZTg1MzQsIDB4ZTlmMzBmNTYsIDB4OTA2OTdmMDUsIDB4MTY1ZTdjZDcsIDB4NzNhYzU1NzQsCi0JMHhjYWY4ZTE2NSwgMHg3MjEwNWZmYywgMHhkODU3Njk0YywgMHhiNzlkMTRmMiwgMHg2NDVkNzY4NSwgMHg5MDNlZmM5ZiwKLQkweDllYjJmZGYxLCAweGNlY2YzODEzLCAweDdmNjg2MzZkLCAweGI3YjVkMGFiLCAweDBkOGZlMjhjLCAweDcyYjc5NDgxLAotCTB4N2U3YmUzNTEsIDB4ZGVmODlmN2IsIDB4Njc2ZTc0YmUsIDB4MjRkZTYyNzQsIDB4YTY1NTdmZjYsIDB4MTNjZTE5YjgsCi0JMHhlNGEyZjFmOSwgMHgyY2QxY2Y5YiwgMHg3M2E3MzVmYSwgMHgzYTdlNjUzYiwgMHg3ZGE1MDNlNywgMHgyODIzYWJhMSwKLQkweDZmOWZkYTFlLCAweDZmOTUxM2ZhLCAweDZmN2M3YjYxLCAweGJkNDc0YjZjLCAweDkwMzFiZTc5LCAweDZmOWVkM2NlLAotCTB4MGRlNzNlN2MsIDB4ZDc2NWRlZjgsIDB4OGJjOTUwZjgsIDB4ZjNhNzRlYmYsIDB4NmRlNWU1ZjgsIDB4NzNiMDVjZTIsCi0JMHhlMjY3MzhhMCwgMHgzNjc0ZjVhMiwgMHg1ZmU4NDk0NCwgMHhhZmZjOGE5NiwgMHg0MTdkYzZjZSwgMHhjNzVmZTIyYSwKLQkweDYyN2JmNjdmLCAweGVmYmJhZmIzLCAweDI2NGM3N2FjLCAweGY3NmNiZjllLCAweDdmZWNlZmI5LCAweGYxMzJmYzZiLAotCTB4MTNjYWE4ZGMsIDB4YjdiZmUxZGYsIDB4NWRkZjk0Y2EsIDB4NGE3NmYzMzEsIDB4NDhmZTc2M2MsIDB4MGU3ODAzY2IsCi0JMHg3ZmM3YmQ5NywgMHhmZWVjMGQ5NywgMHg5YTNmZDE2NywgMHhlNDgxYzdmZiwgMHhhZGVmZTI3ZiwgMHhmN2ViZmQ2MCwKLQkweGZjZDliZWY5LCAweDQ0YWU0MjMxLCAweDRjYmU1M2I0LCAweDFmYjcwYzQ3LCAweGNjNDgzNjRhLCAweDA2MmI3MDA2LAotCTB4NjgwMDcyZmEsIDB4YjMzMjljNGIsIDB4MjMxZGZkZTMsIDB4Mjc3MmZlZjksIDB4MjQ3NmJmZDAsIDB4NjdjYTBiYzksCi0JMHgxZGZlMDMzOSwgMHg2YmMxMGVmZCwgMHgyNGI5M2Y3YywgMHhlNzg4OWRkNiwgMHg1ZTQ1M2IwMywgMHgzYjg4NDk0MSwKLQkweDdiOGMyMDcxLCAweGM5NDlkMDQ5LCAweGI3YTI3NzRjLCAweGRkYjI1MzdmLCAweDk3MzU3OTRkLCAweGJlMWQzZTQ0LAotCTB4Yzk1ZTc4YzcsIDB4MjNhZWRlNjgsIDB4ZTc0NWRjYzYsIDB4MTg5YmY2MzgsIDB4ODNhYWFiZGEsIDB4ZDJjM2EyMjYsCi0JMHhiZGRiMGQ5NywgMHg0Njk5ZDVjZiwgMHg5MmZmZmI3MiwgMHhlZTFiZGY5NiwgMHg1M2U3YzFkOCwgMHhlMzRkNTQxOCwKLQkweDVkZjQxMjVjLCAweGYzNGQ1MDE4LCAweDI5Y2UyMzNiLCAweGJkNzk2YTE3LCAweGJlZThjMzQzLCAweGZjNWQ5ZWZlLAotCTB4OTE4YmExM2UsIDB4M2JmMDA3NmQsIDB4NTBhNTc3MTcsIDB4OGM0NzY5ZGUsIDB4YmQxMzY5NzMsIDB4NDUyNjc5ZTcsCi0JMHgzOGRjZThhZiwgMHg0Y2JiMGJhZiwgMHhmNzI4MmU3NCwgMHg5ZjY5NWI5NywgMHgyNzRlYjdiMSwgMHhjMmUxZGM2MSwKLQkweDFlZTc0NjIwLCAweDIyMGZkNDJlLCAweGIyNDE3ZDdkLCAweGMyZjM3YzUwLCAweGJjNjkwM2JiLCAweDc0OTVjYWEyLAotCTB4YzQwOGE1YmUsIDB4NTA5ZGRhMDQsIDB4NzZiZGEyZTYsIDB4NjhiOWZlYTEsIDB4NmZhODVmZTQsIDB4NTU5ZGJhYzAsCi0JMHhmMjM5ZmZjZiwgMHhiYmZlNGVlOSwgMHhmOTVmMTcxMCwgMHhiZWY3OGE3YiwgMHhlZmZhNTI4ZiwgMHg1NGY4Mjg5ZiwKLQkweGU0OGRhN2RlLCAweDkyMzY5OGZjLCAweDkxYThmM2YzLCAweDNiZGU3ZTY2LCAweDJjNGNmNWQwLCAweDM3ZjM4ZmFkLAotCTB4MDJmYzk5YzAsIDB4YWZiYTI3ZTAsIDB4MzlhYjhjZTcsIDB4OGE3MTgyNGMsIDB4YTg2YzlhMGUsIDB4ZWUzNDNiZGYsCi0JMHgwZTA5ZTdjNCwgMHg3ODc3ZTI4MSwgMHgxNzg1ZjkxOCwgMHhiZjI0MGM3NiwgMHgxYTY4YWMxYywgMHgzNDhlYzJlNywKLQkweGYyNTJkM2NhLCAweGFkYTFhNjRkLCAweDIzNGM3ODQ2LCAweGRiY2I2NmY4LCAweGU1ZmVlOWQyLCAweGM3Y2E0MGJhLAotCTB4MzZmYzdhMjksIDB4Yzg5ZmU1MTUsIDB4N2EyZWVlZGMsIDB4NTEzNGYxNzUsIDB4NGQ3ZWUxYjcsIDB4YTE3ZmNmZDEsCi0JMHg5M2UyOGJjMCwgMHg4OTY5NWU0YSwgMHg4ZmE1YTM5MCwgMHhmMzAwMzFkZiwgMHg2NTFmZDk3MCwgMHhhYWJiOTNjYSwKLQkweGZlOGY3OWU2LCAweDQ4ZTVmOTcwLCAweGJjMGY0NzIxLCAweDAyNWI3YzQwLCAweGMzYmY4ZTc0LCAweGMyZjIyYzU0LAotCTB4NzFlMTVmOGIsIDB4NzdmNWUyOTYsIDB4ZjFmMjRiM2MsIDB4ZGU2MTg2ODQsIDB4NTNkNzI1ZWYsIDB4MmY3MGRlNDEsCi0JMHg5NmU1YzkxOCwgMHhkYTk1YmZhNywgMHhkZTdiNDMxNywgMHg5YTIwYmRmZiwgMHhlNTBkMGVjZiwgMHhlYmUzZmIyOSwKLQkweDIyYmZmYjk2LCAweDhiZmQ1YmZmLCAweGY0MDc2MDVjLCAweDk1N2MxZmIzLCAweDU3ZjIzZGI1LCAweDA2MGQwMzk0LAotCTB4ZjI5ZTgzYWIsIDB4OGQ0ZWJkZmMsIDB4ZGYzZjI5NmIsIDB4ZDBmOTIwNjAsIDB4YWY3ZTJjMTksIDB4MTFlNzkyYjUsCi0JMHhmYTlmYWYxNCwgMHgzODU3Y2E2YiwgMHg2OTlkMmY3NSwgMHg3ZmVjZTY1YSwgMHhhNDc0YWViZiwgMHgwZjhiZWY4NiwKLQkweDNlNDAwZWI0LCAweGUwN2MwNTJjLCAweDNhMWY4MDc4LCAweGE4ZmVjZTVmLCAweGViZmVmZWExLCAweGNiOTIzYTk5LAotCTB4ZGMzZTNlZjUsIDB4M2JhMWYzYzMsIDB4NzRiYzczMDcsIDB4N2E0NDlhYmUsIDB4ZDM5ODIzYTcsIDB4ZmM5N2NjMzUsCi0JMHg1ZTYwY2VkNCwgMHhlNjA0YTI1MiwgMHgzZDM5OThkZiwgMHg5MTc3OGU3NCwgMHhlZDI5ZGRmZiwgMHhjMzQzYjJhNSwKLQkweDE0YWQxNWZiLCAweGU2ZTIyYmJmLCAweDQ4MjUyM2Y5LCAweGZmNzg3MWIzLCAweGI0MzZlNmNmLCAweDY3MWU1MDNiLAotCTB4YWRkMmE2OGQsIDB4MWVmZWI5MGIsIDB4ZjI2M2EwNzYsIDB4N2UwYThlZWYsIDB4ZTg3MGYyNTIsIDB4YWUyODAxNzcsCi0JMHgzY2EyZDJlOSwgMHhhZmJiMGJiNSwgMHhkZmZhZTFhNCwgMHhlZmU3ZTA4YiwgMHhhZTQzY2EyNSwgMHhmYjI5MjkxYiwKLQkweDU0MDc5NGVjLCAweDJiM2MyNWNjLCAweDlmYjQ0ODc2LCAweGExZjZiYzVmLCAweGUyZmJhNDQyLCAweDkxNzMyZDhhLAotCTB4MTQ3NTk0MWYsIDB4ZmEyZTU5YWIsIDB4NGM5MjFkNDksIDB4N2ViZjAxZjMsIDB4ZWJkNGNjYzEsIDB4ZjdjMGE3YmYsCi0JMHgxOTdjY2FmNywgMHgzZDI3Y2ZkZiwgMHg2ZmI2YmMwMywgMHg1M2IxNDVhNCwgMHg1NzhjMzU1OSwgMHg0Y2RhNTZiMiwKLQkweGZjNTE4OWRmLCAweDA1M2ViZTRlLCAweDgzZWZiODRlLCAweDNjNGE4Y2Y5LCAweDU3ZWI0NmUwLCAweGY5YTM3OWU2LAotCTB4NzVlNDIzYmMsIDB4ZDdlNThjNDcsIDB4MWZkZjEwZTMsIDB4YWU0ZjI0YzgsIDB4NDA2NjM3N2UsIDB4NmRkODBmYzgsCi0JMHhjYWExNGJmNCwgMHgwZmZmMzA3OCwgMHgzOGMxMTc1MSwgMHg1Njc5MGFjZiwgMHg3OWMzZjMwYywgMHhmZGYzNmUyNiwKLQkweDNhZTQ4MDdkLCAweDA2ZjBmYWRmLCAweGEzNmE3YWRmLCAweGM1YmQzZDZmLCAweGRiN2Q2ZWI3LCAweGRmODJkZWI3LAotCTB4MDljMGY0Y2QsIDB4MDczYzYxZmQsIDB4ODc5YzUzYjEsIDB4Y2YxODdmNDAsIDB4OGMzZmExMzMsIDB4YjE4N2Y0NzUsCi0JMHg5ZjE4N2Y0NCwgMHg3NThjM2ZhMywgMHg4ZWIxODdmNCwgMHg4OTI1YjBmZSwgMHhhMjU4YzNmYiwgMHg2NWNmOGMzZiwKLQkweDQ5NTM4NzJiLCAweDAyM2Y4ZjJkLCAweDJmYjQ2YzFlLCAweDVkZjk0NzNmLCAweGQxMGJmMDBhLCAweDQyMWMyZDFlLAotCTB4N2NjNjFkNzYsIDB4N2U5NTc3ZTksIDB4ZDIyOTZkNzksIDB4ZmQ5MzBjZDEsIDB4Y2M0Y2M4ZDIsIDB4MWY1YjZhYzcsCi0JMHhmMmZkZWQ4OSwgMHgxYjQ2NGE5NCwgMHg2ODZmMTg4YywgMHgzZDdlNzc1ZiwgMHgyNjI5MjE5YSwgMHhhZjZjMTVmYiwKLQkweGFlOTUyZmU0LCAweDRmN2U4YjdjLCAweGU1YjU3ZGFmLCAweDc4ZTEzZjhmLCAweGYyODdiOGEyLCAweDc4NDU0ZjdiLAotCTB4NzE0Y2JlNGYsIDB4ZjhhMzNkMmUsIDB4ZGZkZjU1OWUsIDB4ZjlmZWRjM2QsIDB4Njc5YWI3NDYsIDB4NTgwMWZmZjQsCi0JMHgwMGRiOGJiYiwgMHgwMDAwZGI4YiwgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3Y2NkZmYwMCwgMHhkNTk0NzQwYiwKLQkweGU2ZmVlZmJkLCAweDQ5MzI0OTk1LCAweDQxZTQyMTI2LCAweDIxZTRjYzIwLCAweDQ5Mzg5MzExLCAweDQ3MTE0YmM4LAotCTB4YThkNTMwNDgsIDB4Njg0ZDQzYzMsIDB4NDA5MjEzOGMsIDB4YTNjMzA0ODAsIDB4N2I5NmM0ZWIsIDB4YTQ0MDE4MzMsCi0JMHg1MWI3OGQ3MCwgMHhhMTNhMzk1MSwgMHhlODVkZTk0YSwgMHhiNjk1MGEwOSwgMHgxMDA2NzM5YywgMHg0ZTZkOGFjNSwKLQkweGI2YWJhZDViLCAweGE5MDc4ODM4LCAweDY4MzQ5Njg3LCAweDY5ZWRlYzU3LCAweGRmZjdmZmVmLCAweGJlZjk5N2RmLAotCTB4YmM3YjUyNDksIDB4YWNkZDc3YWIsIDB4N2JmZTdiYTUsIDB4ZmUzZjZmZWYsIDB4ZWZmZmZkZWYsIDB4ZmM0MjEwOGQsCi0JMHhmYjViZmU4NSwgMHhkYWYwOGM3YywgMHg4NWZkZmYwNSwgMHg0NDJmZGZmZiwgMHg1OWNmMTBiOSwgMHgwZTlkMzI0NywKLQkweGQ3N2MyZTIxLCAweDRmNWM1YmJlLCAweDE4NjhhYzY1LCAweDA2ZTZhNDJhLCAweDA5YTQ0OWJiLCAweGI4ZGYxMWIxLAotCTB4NTMzNWE4ODQsIDB4ZWYwNDc5YTcsIDB4MjhjN2Y2NTEsIDB4YTRmMzRjNDIsIDB4ODg1ZDMxMDgsIDB4NDlmOTMzZDEsCi0JMHgwNWZmZmE4MiwgMHgyYzRmMzc3ZiwgMHhhOGNhYzc1YiwgMHhhZGRlMGViMywgMHg2Y2NmMzA5OCwgMHg1NDhhZjA5YiwKLQkweDczNWRmYjFhLCAweDRmMWEwNWYwLCAweGEyNGQ3OWQ0LCAweGVhNGQ4ODQyLCAweDM1ZWNlNzFhLCAweDU5MTA1MTA5LAotCTB4MzhjMWI1ZWYsIDB4YmZlYjc0MjEsIDB4MDE4YTYwZWUsIDB4NjE5YTFhMmUsIDB4YjFmZDdmZTgsIDB4NDk3YjQzMWMsCi0JMHhiZGExYWU2OCwgMHgxM2Q2Zjk2ZCwgMHg5NjIxNDRlNiwgMHhmNDMzMmVlZCwgMHhiYzExNmFiYiwgMHhhN2NmYWJjZiwKLQkweGVhNmUwMzA3LCAweGYwZDFiYmU3LCAweDNhZWExMDlkLCAweDkzNmViMjlkLCAweGMzZmNlNDc1LCAweGQxZDM3ZmQ0LAotCTB4ZTMwMDRmNGMsIDB4MmYwYjM1ZWUsIDB4OGQwM2I3ZWQsIDB4MmI2NDQyYTUsIDB4NGYxODFkODEsIDB4MTc5ZTJhMGMsCi0JMHg2YTU2YmM2OCwgMHhlOGJiNTNmNywgMHg5ZDM4ZjNiMSwgMHgyYzNiN2UyYSwgMHgyZGE0ZTAyMiwgMHg5YmYzNDQ3ZCwKLQkweGQxZTc3ZmE5LCAweGMyNTZlMGY0LCAweGM5YzYxZjRiLCAweGYwYTc3NmE0LCAweDZiNzhkMzI2LCAweDg3MTcwZWU2LAotCTB4NmYzNTljNjgsIDB4ZDA0MmJiN2UsIDB4ODNjY2JiMTYsIDB4MjE1Y2NlZDksIDB4MDNjMTJiMzYsIDB4OWYxMGIzNGUsCi0JMHhhYjRlMWNhNCwgMHhkOTg3NzZhNiwgMHhmNDQzYzhiZiwgMHhmY2E2N2NiOSwgMHhlNzg0NTVjNywgMHgxZWNjODdjYiwKLQkweDBkNmQ5M2NjLCAweDI5MTI5NWE1LCAweGFiMjY4Mzg1LCAweDAzOGNlYzA2LCAweGNkZmIwN2ZkLCAweDYzYTI0MTc1LAotCTB4OWNjM2FkMTYsIDB4YzE4ZmUxMTIsIDB4Nzk3MTY5ZmUsIDB4MzViZWM4OGUsIDB4MGI2ZDk4N2UsIDB4N2Q4NGRjY2QsCi0JMHg3OWViMWNiZCwgMHgwYTNmODA0MSwgMHg5ZGJjNjJlZiwgMHg4ZmUwMmIzMSwgMHg4MDk0NWI4ZSwgMHgzZWM4ZmFlZCwKLQkweDc3ZTUzYTM3LCAweGVhM2U3ZWRhLCAweDdjMDYzMmE1LCAweGRiM2U2NWU2LCAweGJlNWZiNmFjLCAweDhiYjE0NGY2LAotCTB4N2JkOWQxZjYsIDB4MmM0Y2RiMmMsIDB4ZTg3NGNlYjAsIDB4MDE5NTI2NDAsIDB4ZmIxOWJmYmIsIDB4ZmZjYzE4ZTksCi0JMHg2NzlhN2NjNSwgMHg2MTY2M2JlZCwgMHgzZWZmZmVhNiwgMHg5YWIxMjhiMCwgMHg4YmM5ZjdmNiwgMHhjMTNkNGY1NiwKLQkweGRiN2ZmNzBmLCAweGFjN2RhNjE2LCAweDFlNmQwNGI1LCAweDNiYmUzYjJhLCAweDc5NTJmMzY4LCAweGFlNDFjMWViLAotCTB4NjViMDc1NWYsIDB4YjU3NWY4MzEsIDB4N2Q4MWRlZTgsIDB4YmYxMmIyNWYsIDB4YjFkMWYwZWIsIDB4YTRlN2Q5NTAsCi0JMHgzMWVlYmY3NSwgMHhjNDc3N2YzMSwgMHg2YmRhM2YwOSwgMHhhNzRmZjNjZCwgMHg5NTA3N2Y2MiwgMHhiOTdiMmMxMiwKLQkweDg1YWRiMGVmLCAweDdlZDQ3YmVhLCAweDdhMzJmMmQxLCAweDc0ZWQ1OTc2LCAweGE0M2EzZmVhLCAweDkyYTdkZTMwLAotCTB4ZDc0M2JiOGYsIDB4MWIyYzdjYjIsIDB4N2NiOTczNzMsIDB4ODgyMTNhZWMsIDB4YmUxMWRmMjUsIDB4YTU3NDQxMjIsCi0JMHgzZWYwMWFiNSwgMHhmY2NjZDY3YSwgMHgxY2RjN2EzOSwgMHg4NzQ5ZjQxNCwgMHgwY2JhOTQyZCwgMHgyYjE3Zjg3NCwKLQkweGY4OGJhMWQzLCAweGE0Zjg4YWE3LCAweDQwZGY3ZThiLCAweGQ5YmU2ZmE1LCAweGQ0MGZiZmMwLCAweGJkZjgxYmM0LAotCTB4ODhlNGU4NDEsIDB4Y2M0N2JiYzYsIDB4ZWJjYmMwMzAsIDB4ZWZmZDBkNzMsIDB4OTQ1ZDdlNWQsIDB4ZGE0Njk0M2MsCi0JMHgwZGZmZjhjZCwgMHhiYjgyNzY5MSwgMHg0YTVjMDRiNiwgMHhjNjg1YTAyMiwgMHgzMGI3MmE3YSwgMHhmODY2ZGQ5ZiwKLQkweDhkMmM0YmJlLCAweDNmOWYwM2Y0LCAweDY3OGM2ZmZmLCAweDRiNmQ4NjIxLCAweDI2YmY2ODhiLCAweGFmZDEwN2EyLAotCTB4YWQ1ZTdmYzEsIDB4NmQzZDczMGYsIDB4YjM5NzIwYzQsIDB4OThiZjNkNzMsIDB4ZjIzMTdjNGYsIDB4NDdlYzU1YjYsCi0JMHhkZjA4OWZjNSwgMHg3ZjQ2ZTgxNSwgMHgyMGU5MTNiOSwgMHg5ZDVhMTEwNCwgMHhiMWQ2ODkzNywgMHhhOWM5MDhmZSwKLQkweDYxOGE1ZjQxLCAweDA2ZWIxN2QwLCAweDc0YjZiYTFkLCAweDJhNjI4YmQ0LCAweGI0MDU5YmU5LCAweGIwYzBhZThmLAotCTB4ZjhjMWRiYWQsIDB4NGExMTY0YjcsIDB4YTIyYmY3ZDYsIDB4ZGJmYjg1MjcsIDB4YmMyNDUyYjMsIDB4YWM0N2Y1MDUsCi0JMHhmODc1ODYxZiwgMHg2ODYzNzhjMywgMHg4MTZlNjMzZiwgMHhhZmI3NDRiYywgMHhhYzBiN2RhNywgMHgzZGZlZWM0NywKLQkweDJkZmFkNWY0LCAweGRlNjMxZjc1LCAweGVhM2NkYWY1LCAweGFlOWYxYWY4LCAweGViZGY0YmRlLCAweDllM2QxZGQ2LAotCTB4NzJjNWM0YTMsIDB4ZTFlMGY2YmQsIDB4N2UxMDY3ZDcsIDB4NGI5MmY5OTYsIDB4NDM5ZDQ3MjAsIDB4ODUyZGFjNGIsCi0JMHhkMzRkZjkxMywgMHg5YTBmNTdmYiwgMHhmMDZlMzE4MywgMHhiN2U2MjlkZiwgMHg4ZjU2ODNkMSwgMHhiMmYwMWJmOCwKLQkweDBmMTgyYmRlLCAweDhhYjg3Y2QxLCAweGY5YTc2NWY2LCAweDNjNTExZDU3LCAweDAzZjY0NTQxLCAweGYxNDZkNjdlLAotCTB4OWFjZGM2MjcsIDB4YmUxYTZmMDQsIDB4ZDUxN2YxYzYsIDB4NjgzZjFhYmUsIDB4Mjk4ZmFiOWQsIDB4MDljYmU4NDEsCi0JMHhhN2M2ODk3OCwgMHgzZjJhY2YzYSwgMHgwYWViOTBmZCwgMHhjNmEyYmFmMiwgMHhmMmQxNTUxNSwgMHhmZTg2YzliOCwKLQkweGUxMTRmYmEzLCAweDFmMThiZTU0LCAweDJjNmNjNzRiLCAweGU1NzNiM2RmLCAweDJhOGU0N2ZlLCAweGRkZjRmZDllLAotCTB4YWUxNjYzM2QsIDB4MWYxZmU3MWYsIDB4ZjIxNGFkZTEsIDB4OTIxZjAxMzcsIDB4N2U1MjdjOWYsIDB4ZTM0YjFlZWUsCi0JMHg3YzVlZmVlZiwgMHgzNGZjNDVmNSwgMHhlZmRjNTczYiwgMHg3YWY0NDQ3MywgMHg2MjFlOWU0NCwgMHg0OTI5NGIzZSwKLQkweDViNDhiZDQ4LCAweGFjZTVkZmEwLCAweDNiM2Q1NDFmLCAweDRkMjQzZTk1LCAweGZjOTRmYWNmLCAweDcxZTdlNjAzLAotCTB4Zjg5NGUzYmIsIDB4YTU3NTY4ZGMsIDB4ZWI0ZjgzMjcsIDB4ZDQ2OGY2OGMsIDB4ZDY0YTRhZTIsIDB4NjQyZDIxZjksCi0JMHhjMGQzNWQ2NywgMHhjMmQzMzNiZiwgMHg2MDlmOGUzNCwgMHg0ZjRkNTdlOCwgMHg3NmYxZDVmYiwgMHgwZWNkY2I2YywKLQkweDZmZjNiZWViLCAweGVhMDlhNmI3LCAweDFhNzViZDlmLCAweGNlYjEyZDk3LCAweDk2OTFkODM0LCAweGVjMWY2NmFkLAotCTB4YTQ4Zjg3ZTMsIDB4NWYxMTU1YTcsIDB4OWFkZGI4N2QsIDB4N2M0MzRmNWEsIDB4NmNiY2UwZjgsIDB4OTZiODA0NTEsCi0JMHhjNThmMGJjYiwgMHgxMzFkMDQzNCwgMHg2MjVkNTVmNywgMHhmZDc0N2M2MiwgMHhhZWQ4ZjdmNywgMHgzNjc0ZDZmZCwKLQkweGI3NzIwMWIxLCAweDE1NjI2OGZkLCAweGZiNmViMzhkLCAweDY0OWMyYWNmLCAweGZlNGM4N2NmLCAweGZmZGExMmJhLAotCTB4ZGIyMGNhMjcsIDB4MmMxY2UxNzMsIDB4ZmM0NTE1ZjYsIDB4NmJkYmI1ODksIDB4M2JmNzYxZDMsIDB4NTllYTdjZmYsCi0JMHg1NmZmN2RkOCwgMHhmODg5OWE2YiwgMHgyNzNmMzdlOCwgMHgzZGIwYTg3YiwgMHg1MmUyM2Y2MywgMHg0YmUzZTRhYywKLQkweGZiMDdjNDJmLCAweDI5MmZmZjg4LCAweGY1NGIxYmMyLCAweDhhMjdjYzZiLCAweDdhZmIwNjlkLCAweGZmY2MxZWZjLAotCTB4Yjc5YTc2Y2YsIDB4MGYwNmYzMWMsIDB4NGY1ZTYwNjQsIDB4ZWJjYzFhZTAsIDB4ZTQ5ZjlhZGYsIDB4ZGRmZTJiZmYsCi0JMHg3ZmE1N2IwMywgMHhlN2I1NDA3NywgMHhhMDMyODg1NywgMHgzYjVlYzFkYiwgMHg5N2FiZmZjMywgMHg4ODQ3M2QxMCwKLQkweDBjMTliZDQzLCAweGUyZWJkNGJmLCAweDgwYjdhODcyLCAweDM5MTRkN2ViLCAweDQ2ZmJiZDI1LCAweDNjZDIzNjRhLAotCTB4YTBhMjg1ODEsIDB4YTNhZGVkOWIsIDB4ZGZlYjQyYzAsIDB4ZTA3OWM0YTQsIDB4M2M1MjZjNGYsIDB4ZmRkMDRlZTksCi0JMHhjZWQyYzllNywgMHg1ZThiZjRhYSwgMHhlNDIzNGRjZiwgMHhmM2Y4ZTk4MywgMHg2OGJiMzFlNiwgMHgyZGVmZjFkMywKLQkweDJmMDBkOTIyLCAweGZhMWE2N2IyLCAweDg2ZGQzYWQ3LCAweGFlMzM1YmY2LCAweGM1N2ZiNDM1LCAweDZmODA2MjU1LAotCTB4ZjQzNmE4MmYsIDB4OGI3M2MzYmYsIDB4ZWFhYmJlMDEsIDB4NGJmZTg2MmIsIDB4ZjAwYzRiYmMsIDB4NDM0NmJhYjIsCi0JMHgyZDdkYmJmZiwgMHgxYjdiZjY4NiwgMHgxYmRhMThkNiwgMHhmMDBjMWJmZCwgMHgzNDFlM2I1NywgMHg3YmFmYmZmNCwKLQkweDJiZGRhMWFiLCAweGJiZDgxNjljLCAweDE3MWY0NGUzLCAweDg4NWZmZGUxLCAweGJkMzcyODJlLCAweGQzZDBlZjlkLAotCTB4NTMyMmZlNzUsIDB4N2MyNGQwZjcsIDB4ZjQ4OTY4ZmIsIDB4ZWE1MTdlNmYsIDB4OThmZTA1ZGQsIDB4NDg3YzkyNjUsCi0JMHhjM2FlMTdhNSwgMHhkNDI3YjAzMywgMHgwYTQyMjU5ZSwgMHgzODYyMmJmYiwgMHhkZDEzN2MxMywgMHg3ZTdkYmEyZiwKLQkweDJlYWJjOWZjLCAweGY0YWRhMWEyLCAweGU5MGIwNmMzLCAweDI3OTVmOThkLCAweGJlMDk3MmNiLCAweDFiNmJlNWYzLAotCTB4ZTYxZmE0MmQsIDB4MmFmMjc4ZGYsIDB4YjY5NTFmZTAsIDB4MzJmYjcyMzUsIDB4YzM0NWFlYzEsIDB4MDQzNzZmY2IsCi0JMHg2ZmYzOWQ2OCwgMHg4MWVkZDljZSwgMHhlOTEzZjNkZiwgMHg5ZmM1NGNmNywgMHhiZTViNzdkOCwgMHgxMGNhMzdkYywKLQkweDkzY2EyM2YxLCAweDVmMjg4ZmM0LCAweGIzNmM3ZTIzLCAweGZjNDdiZjkyLCAweGFmNGNmMjg4LCAweGQ0N2ZlYjg3LAotCTB4ZDllNWM1NWIsIDB4M2Y5NzJmNWUsIDB4NzJlM2FkZWUsIDB4ZTVjN2Q3YjgsIDB4YjgxYjdiNGYsIDB4OWZhZjc5ZmMsCi0JMHhiN2I3N2JiZiwgMHg3YWY3Y2I4MywgMHg5N2ZlYjliYiwgMHhmZTVjM2RiZCwgMHhmNWMwMzdhYSwgMHgyYzI4OTZhZiwKLQkweDAxMDJiNGZmLCAweDAzN2IwNWJkLCAweDc3NmY1ZGZlLCAweDc3YTRjYzg0LCAweGU1ZWIzMWM1LCAweGYyNGFiZDcxLAotCTB4ZGRhNTc4YWQsIDB4YTJhOTVjNTQsIDB4NmViZWNhODksIDB4NWM4NzhlMTEsIDB4MTdjOTJkODYsIDB4MzlmOGJlODksCi0JMHg3YTIzN2VkOSwgMHhlYTJlMjJkNCwgMHhjNjFmYWRmYywgMHhhZjQyNGY3YSwgMHhjOWQzMzEwOCwgMHhmZmFkNThmYSwKLQkweDY5ZWY1MmE3LCAweDE1ZWU1ZmFlLCAweDk3N2E3ZDdhLCAweGQwMjNmZmRiLCAweGIyZjcxZGZiLCAweGVjMzMzMmZjLAotCTB4MjRlOWY3NTMsIDB4MjRjNzdhNmEsIDB4OTNlMzI2M2EsIDB4NTkzZTU0NjcsIDB4YzYyYzRmNjAsIDB4M2Q4MTZlZjksCi0JMHhiMjdiMDgzYiwgMHg4M2VlMTJjMCwgMHg0Y2ZiZWExZSwgMHgzZDIyMWViOCwgMHhjNmMxMjI3NCwgMHgxMWVmYTk3YSwKLQkweGNhMTNmYjBiLCAweDliZTE4MmE3LCAweDdkYzMwNTUyLCAweGExOWIwZDlmLCAweDNkMzgxNzc3LCAweDU0NTc2YzE5LAotCTB4MDIyZWNmMzgsIDB4ZGQ3MjI5NDksIDB4NGExZTY3NTgsIDB4YTdjZDUzYzIsIDB4ZjNiMDQ1ZTEsIDB4MmU2YzM5MzcsCi0JMHg1ZjljMDllOCwgMHhjZjMxNGE2MiwgMHgwMmJjZGFiYiwgMHhkN2JkNTJlMywgMHhmZjNmZGY0NiwgMHg2ODk5MDg5OSwKLQkweDVmYThiMzVkLCAweDEwYTVmMzJjLCAweDg3ZDgxNzI4LCAweDg3OTIzZWNkLCAweDI3NmY1NDk5LCAweDliZDUxNjc4LAotCTB4MDJkN2JiNjUsIDB4NmMzYTdjM2EsIDB4NzZhMTFkODYsIDB4MDNkYjI0OTEsIDB4N2NjODk0YTYsIDB4MmMxMzNhZGEsCi0JMHhlY2E5N2UzNCwgMHhlNzJhNTg5NywgMHgzOWMwYmMwMSwgMHgzYWQwYTI1NCwgMHgxZTFjYmFmYiwgMHgwMmRkMjFlMCwKLQkweDVlZmVlN2RlLCAweDU0M2Y3ZjMzLCAweDNhMWUwNGUyLCAweGZiNDExZTFkLCAweGUyMDUyYzIwLCAweGFmMWZiOTRhLAotCTB4ZDcyMmMxMzMsIDB4NWZhOWYzNTMsIDB4NDMyZmQxNzgsIDB4NzFkNDYyNzgsIDB4ODAzZGIyZWMsIDB4MGQ0YTZlNzEsCi0JMHg4ZjgwNWE2NSwgMHgyMDI3OWI2ZSwgMHg5ZDYyZjFjNywgMHhmYjJmMTdlOCwgMHhiOTNhY2M4NSwgMHhhZDAzZmJjZCwKLQkweGFjZmZlYzk3LCAweGY0Mzc2MTk0LCAweDRjNDNmMTJlLCAweDJiZDRmODI5LCAweDUzOTk2MWY5LCAweGE5NzA4M2YyLAotCTB4MWExZmNhYjAsIDB4NGE3NTJjYmYsIDB4ZWRjYWZjOTIsIDB4NzhkMjk2NzcsIDB4YWZlNzE4YmUsIDB4N2ZjZTQ5ZTMsCi0JMHg5N2U2ZTRhYSwgMHg1MTJjZGYxMCwgMHgxZmJmZjVmZCwgMHhmZDI1NzhiZiwgMHg3YmJkNTI2NywgMHhmNDY4ZGYyMiwKLQkweGUzNDdmOGQxLCAweGQyM2U2ODgzLCAweGI3YTM0MGY4LCAweDdmMzQ1ZGY2LCAweDM0NTVmMzQ1LCAweDRiYjAyZDNmLAotCTB4MGY4ZTgzM2EsIDB4NDlmOTEzMjksIDB4OTA2ODc0ZjksIDB4Njc2OWRmZDcsIDB4NGZjZDE2YmIsIDB4MzUzMDdjZDEsCi0JMHg0ZTdkYzkzZiwgMHhmZDA4YTNlNCwgMHhjZjJmOGY4MSwgMHhkZTZlYzM0NywgMHhhNGZiNjZjNywgMHg4ZmYxYTQ3YywKLQkweDFmMWE0ZmM2LCAweDE2MjIzZmRkLCAweGNiNTM1MTI3LCAweDk0NzVlYjk4LCAweGNmZmM3MjdiLCAweDhhYjQ4ZjQwLAotCTB4YWIzMzE2NWIsIDB4YmU0NWNkMzgsIDB4OWVmZDg5ODQsIDB4NWJkZmEyOTgsIDB4NTAxZmM0YjEsIDB4MmY3M2MyM2MsCi0JMHgyZTMzODFmYywgMHg3ZWM1ZDhhYiwgMHg0MjUxZDdiNiwgMHhlYWE0NWJmNCwgMHg5YmEyMzNkMSwgMHg4ZmI5MWNlZCwKLQkweDQ2YjVkMDAxLCAweGMyYTJmMTI1LCAweGQ3N2ZlY2Q1LCAweDJjN2U4YzM4LCAweDg4ZmMyMzJjLCAweDE3ZWZkNGRiLAotCTB4MGRiN2M5ZmYsIDB4NmE5YzU4ZWIsIDB4NTM2ZjZmZjQsIDB4NDU1YmUzZmQsIDB4Mzc1ZjhmM2YsIDB4ZjBiZGFhMzMsCi0JMHg2ZjliZjY1NiwgMHg2ZmQ2MzNjYiwgMHg1ZWZkNTUyOCwgMHhjZjQzNzBiNywgMHg1YzhmMDhkNiwgMHg3ZWNkZDg5ZiwKLQkweDU3MmE4ZDZiLCAweDcyZmQyYTU5LCAweDlmMzE2NjVkLCAweGZjMmI1OGYwLCAweGQ3ZjcyODE2LCAweDYyZjM2NzdlLAotCTB4ODA0NTViZGMsIDB4MjA4OGFmZTEsIDB4MTA4YmI3OTcsIDB4MTkwNzczOGYsIDB4MDk3N2MwMDIsIDB4NjlkYzA1NjEsCi0JMHg5MWI2YzkxZiwgMHhmYjM3YWQ0OCwgMHhmODVmODAzZiwgMHgzOWZlNTlkYiwgMHhjNjM2YzczOCwgMHhjZjIwZmJmYSwKLQkweDZjZWZlMmE3LCAweDViZTY4MDdhLCAweDBmMjhiNjU0LCAweDcxYWM5ZGRmLCAweGQyNzUzZmIxLCAweDFkZmVjYjllLAotCTB4MTI5YWMyZTQsIDB4YzkzN2NmOTEsIDB4ZmQ5MWU2M2UsIDB4MTNmNjQ1M2EsIDB4OWZiMjY5ZTUsIDB4ZGVjNzY0NzksCi0JMHhmODA5ZmIyMCwgMHgwMmFkODJiNiwgMHgyOTc2MmRkZiwgMHhiN2RiYTJjMiwgMHhjZWVkZmRmNiwgMHg2ZDMyYzI0NSwKLQkweDdiNzRmYjZhLCAweGZhNjdmN2YxLCAweDRhZGY3Zjg5LCAweDEyMjM1MzllLCAweDYwZDY1NjUxLCAweGE3MjU2ZmJmLAotCTB4NjMxOTY0OWIsIDB4ZDVlOGIyZTMsIDB4NGZmY2M5YmMsIDB4ZjMyMmZmOGQsIDB4YTZmOWU2MmQsIDB4ZDc4NmIzYzIsCi0JMHg3ODZhN2M2OCwgMHg3ZDc4MTJmZSwgMHgzZWJjMzI2OSwgMHhjZWQ4MjI1MywgMHg1OTVmZGE4ZiwgMHg1NzU1Yjg4ZiwKLQkweGRlNmZkNGJjLCAweDA2NDQxMzU3LCAweGEzYzZlZmYxLCAweDFiZmQxY2YyLCAweGUzMTMzMTJjLCAweGY3YjUzYzRiLAotCTB4ZTQyYzI4ZGMsIDB4MmJkYzdmNGEsIDB4YWFmM2MwMDIsIDB4OGZhZTZhOWUsIDB4Zjc4OThmOGUsIDB4NmJmODYxNmUsCi0JMHhkOTU3MmYyYSwgMHhkZGU4MjFmZCwgMHg2YmExYTVjYiwgMHgxZjEyYzNjOCwgMHhiYzRiZWJlZiwgMHhlZGY5ZTY4MSwKLQkweGNlMGY2NjRiLCAweGQ3NjY5ZDI3LCAweGFjZTIwZjZlLCAweDJmM2Q5OTZmLCAweDlkM2ZmYmUwLCAweDcyNGE1ZWNhLAotCTB4MzY5ZjllMjUsIDB4ZDNhYzM5ZTksIDB4OWRhOGYxMmUsIDB4ZTM5ZGJlYzMsIDB4Y2UxNGI5NjMsIDB4MjNjODBjYjIsCi0JMHg1Zjk4MjlmZCwgMHg5MjY2NWZmMywgMHhmZTI3NjkyZiwgMHhlNTkzNjdkZCwgMHg0NTRjZmU1NCwgMHg1MjlmZTkxYywKLQkweDUwZmFjZmVlLCAweGM3N2QxZmEzLCAweDUzOGQxNjcwLCAweGViMjZmYTQxLCAweGFmM2UzOGQxLCAweGY3ZGU5ZDc4LAotCTB4MDhkNTBlZDgsIDB4YzVhZmJmODMsIDB4MjU1MzQ2MjMsIDB4NmI4ODE3MWUsIDB4YjAzYzQ0OWUsIDB4MDQ1NThjZTYsCi0JMHg4MjE0N2RhOSwgMHgyNTBjZjY4ZiwgMHg3YTM1YmQwOCwgMHhmYTE5YWFlNiwgMHgxMTQxMzZiNiwgMHg1NDJmNjBkMywKLQkweDYxOTMxMjdkLCAweDNlOWQyZTEyLCAweDA5YzU3NTg4LCAweGUzOGY4ZTk3LCAweDcwMGM1MjBiLCAweGExODY2NzgyLAotCTB4OGU1NTUyN2YsIDB4M2JkOTNkYTEsIDB4YWQzZWQwZDcsIDB4NGYwMGQ0YWUsIDB4ZTg2MGRkZjcsIDB4ZDBiMGRlOWYsCi0JMHg2ZmZhNjcwMCwgMHhlYWNmZjQzMywgMHgzNTgwNmE1OCwgMHhhYjI1OTU3ZCwgMHgxNWVlYWNjNCwgMHhmNzY3ZWY4NiwKLQkweDc3ZjQzNGFjLCAweGRhMWFkNjA3LCAweGZiODk3MWNkLCAweGJjMDY4ZjU5LCAweDRlMzQwNWMzLCAweGVlNGUzYTlkLAotCTB4N2U4NjhkY2UsIDB4YWE2ZGQwODIsIDB4YmZjODljODAsIDB4Y2VlYjEyNjcsIDB4M2FjZjQ0MjgsIDB4Yzg3YWFhYzcsCi0JMHhkN2ZmN2U2OSwgMHhkNzM0ZWI4ZCwgMHhiY2E5OTI1YiwgMHg3ZmQ0NjVkNSwgMHg3ODQ2MTliNSwgMHg0Mjg0ZTM5MSwKLQkweDRlNDU4YjQzLCAweGVhY2UxZWEzLCAweDhjZTAxOGI2LCAweGQ3OWJkMjMyLCAweDUxNjI4ZmQxLCAweDJmODJmMWNjLAotCTB4YWU3ZmJmYTIsIDB4NzhkMWZlODEsIDB4ODRmMDdlMjIsIDB4NjllYzlmZDAsIDB4YjM3YWViMDAsIDB4OGY3YjAyZDUsCi0JMHgxZjdlODJmYywgMHhmMWU4MmZjOCwgMHgxZTgyZmM4MCwgMHhkZjQxN2U0NiwgMHg3ZDA1ZjkxZiwgMHhmYTBiZjIzYiwKLQkweDQ2MzNiMmY2LCAweDFiMGY5N2ZhLCAweDllZjk1ZmU5LCAweDVmMWFmZTkxLCAweGVhYTc0NTRlLCAweDg0M2Y5MWIwLAotCTB4N2YyYmYxNWYsIDB4NWUzNzRlODUsIDB4MzQ0ZmYyMzIsIDB4MzcyNjZlN2QsIDB4ZjQxNTM5MjcsIDB4ZDcyMTNjNTAsCi0JMHg5ZGQ3YTc5NywgMHhmYTIyZjQ1MSwgMHhmN2MwNGMwNCwgMHg5ZjQ5MDRjYywgMHhhMDQ5NzVkMCwgMHhiMzE5ZWQ1NywKLQkweDhmZmMxMjA4LCAweGM3N2NmYjUxLCAweDIzMjg2ZmUyLCAweGFiODZmMDNkLCAweGViZmEwMzM0LCAweDE0N2FlMTY2LAotCTB4OWRjNWRiNzEsIDB4ODY4ODRmMjYsIDB4N2UzNTExNWQsIDB4N2RmZjBjZjUsIDB4MWExN2E0NjUsIDB4YjZjZDVkYTYsCi0JMHhmYzQ2M2Y4MSwgMHhkYzllNzA3MywgMHhkOWRkZWFhNSwgMHhjMGZjNzI3MSwgMHgxMjdjYzE0MiwgMHhkODM5YmFmOCwKLQkweDMzOWVlMzQ3LCAweGNmZDAyYmY1LCAweGI3ZjQ0ZmRmLCAweDBiZmJmYmUzLCAweGQ0N2Y3OWJiLCAweGNkZjdjMTQzLAotCTB4MGQ5MzFhZmYsIDB4ZTBiNjc5YjgsIDB4MGMyOGIwNzMsIDB4ODg0OTJmOTcsIDB4MmNlNmM1ZTgsIDB4ZDQzYjI3YWEsCi0JMHhlMzllYTY1NSwgMHhkZjRlZDQzYywgMHhiOGM5OTc3NSwgMHg2OWM3ODI0ZSwgMHhhMTUxNzhlMywgMHg0NDRlMjJmMCwKLQkweGU2ZWNhZmM3LCAweDZjZTNlMDIyLCAweDYzZTAxY2VjLCAweGRlNDFlNGMwLCAweDI1NzU2YzIwLCAweGRlMDUxZjQxLAotCTB4YmRlNDBiMzQsIDB4OWZjMjE3ZTAsIDB4NTdmYWE1OWIsIDB4MjllNDYyNTksIDB4NWVjZTczYWMsIDB4ZDdhYmIwNjEsCi0JMHg2MmMyZWQwNiwgMHgwZDM5N2ZjOCwgMHg4NjUwZDE3MCwgMHhjN2Y1ZmZhMSwgMHg5MmY2ODY1YywgMHhiZGExODE1MCwKLQkweDAwYzc4Y2VjLCAweDE5NTcwZjk3LCAweGU3YmU1N2ZhLCAweGUxZDVjMDM1LCAweDFiZmY0MzNhLCAweGYwMGNmOTJmLAotCTB4ZWY5ZTQ1NmMsIDB4MjM5NjUzYmYsIDB4OTkyZTIxZjMsIDB4Mzg3ZTZiZGYsIDB4NmJmYTUwNzksIDB4ZjlhZmRjZjIsCi0JMHg0OWZmYTJkNSwgMHgzODcxMWRhZiwgMHhiZjM1N2Y5NSwgMHg2ZGEzZjM1YywgMHhjZmQwNDA4NCwgMHhmNmMyZDNiNiwKLQkweGZhNWRhNjYwLCAweGY2MmRmZWM5LCAweDY4MjdjOGYzLCAweDU3ZTZiYWZlLCAweDA4YTlmZTZiLCAweDc2ZjU3YWQ0LAotCTB4ZjY5M2JlODcsIDB4MzVlYmY1NDUsIDB4OGJmMzU5ZmYsIDB4NGM1ZDhiMTMsIDB4YjIzNmViM2YsIDB4NGIwN2UwYWIsCi0JMHhhZTc2MTMzOCwgMHgxYTRjNDYzOSwgMHg0Y2I5NzkwZiwgMHhkN2EyNWI5ZSwgMHg3YTJiYWRhZiwgMHhhNzYyYzRmZSwKLQkweGRjNzUxN2U0LCAweDdlZTJlYzE3LCAweGNjZmUyNGRmLCAweGY1N2NhYWJmLCAweDYzYmViOTlmLCAweGFkNjdjZmUwLAotCTB4YmI1NmY3OWUsIDB4ZjRmM2ViZmYsIDB4MTMyMWZjMjUsIDB4ZjVmMzUyZmUsIDB4MjY0ZGZkNzIsIDB4Yzc2N2M3MTMsCi0JMHhkNzJlNWZkNywgMHgwYmY1OTVhZiwgMHhkOTIxZGZjOSwgMHgzN2UyZjM1OSwgMHgxZmM4M2FmNywgMHhjMmM3YjY3OCwKLQkweGFmMzM5NjcxLCAweGU0MGM2YzVjLCAweDVlMTIxZmMxLCAweGZjOWIzMzhjLCAweDNlMDdkMDdjLCAweDBiMDdjZTA1LAotCTB4ZGYzY2NkY2IsIDB4NzcyOTMyYTUsIDB4Y2YyY2JkMTEsIDB4ZDI0MmEzNjUsIDB4YzZjN2I0N2YsIDB4ZTg0OWQ0NzksCi0JMHhlZGEwN2NjZCwgMHg4YjQzZjEwNywgMHg1MTBkYzY1NSwgMHhjOTY4NmUyMiwgMHhjMDQzNzE5NywgMHg0NGEyMWI4OCwKLQkweDJmZjUxMGRjLCAweDNlMTg3YWY3LCAweGYwYzU1YmQyLCAweDBjYmQ3YWY3LCAweGUzYWRlYjFmLCAweDNlYmQwN2YyLAotCTB4MjZmOGQ3YWUsIDB4NzlkYTVmMWEsIDB4YzQzZmEzNGIsIDB4MmYyMzc2MTAsIDB4MWZlYjFmOGEsIDB4NmQ3MmY0OTIsCi0JMHhkM2Y2ZmFiMCwgMHhhMjRkZWIxNiwgMHhlMDhkMjk0ZSwgMHg4ZjE1MWVmMywgMHgzYzQ5ZTYzMywgMHg3ZmU0MWZhMCwKLQkweGU2YjU3ZWFhLCAweDliYzQyNGMyLCAweGM5MmI4NTQ3LCAweGFhZTI1N2Y5LCAweDY4N2MyZjdmLCAweDk3M2YxZjc4LAotCTB4OTQ5YmNiOGUsIDB4NTJlNGE5ODcsIDB4Y2VlYjNmM2IsIDB4ZDE3NzJjYWIsIDB4YjcyZDE4ZjIsIDB4M2ZlNzc4ZDEsCi0JMHhmYzdiYjlkZCwgMHg1M2M1YWI1YywgMHhlOGQ1Mzk1NCwgMHg1NWI1YzlhMiwgMHg1ZmExMWI4NCwgMHhjZTI2Nzk4MiwKLQkweDYwOWMzZjUzLCAweGYzYzVhMzk0LCAweDA3N2Y3ZTI0LCAweGJjZjJhMjM5LCAweDMyNjY5OWNiLCAweGZkYjJmODQ3LAotCTB4MTAxN2YyNzEsIDB4NDg2OWVmMWYsIDB4ODA1OWUwZTQsIDB4N2RiYThmY2UsIDB4ZDJmYWYwMmUsIDB4MmI3ZWEwNmUsCi0JMHhkMDYyYWMwNywgMHhiMDc1N2Q4NSwgMHg0NDA5NmQxZCwgMHhkODQ3MWI5ZiwgMHhhZGRiNmM5ZiwgMHgzZTQ2OWYzOCwKLQkweGU3ZTRlNzdmLCAweGQxM2ZjZTRhLCAweDZmYzI2ZDM4LCAweGZiZGJiYWMzLCAweGFiNTZmZDhkLCAweGZjZThjYWU3LAotCTB4ZDUzY2Q1NGEsIDB4ODc4NDc5ZGUsIDB4N2YzNTFmZmQsIDB4MTlmNmExZGUsIDB4NmU2MDlmZTcsIDB4NjBkZjFhOTIsCi0JMHgxNDMyYTQ3OSwgMHhiOWJmM2JhMywgMHg4YjI4ZWY5MCwgMHhiOGI3ODRjMCwgMHg2ZGMzZDgwMiwgMHg2YmJlNGYxNiwKLQkweDc4NjliZjIyLCAweDk3ZTc5ODliLCAweGY3YzQxYmY3LCAweGEwZmNmOTYyLCAweDIzMmZmOWU1LCAweDZhZmEwZmNmLAotCTB4ZmZiNTE0ZjksIDB4OTg1OTgwZTUsIDB4NDhlMGRmNzEsIDB4N2ZhN2U3MGMsIDB4NGY3YjNhNmIsIDB4N2Y5NzRiOGUsCi0JMHgxMWI3OTA5OSwgMHgzMDlmYjg4OSwgMHgyN2JhNjg3YSwgMHhiNGJhYzkzMCwgMHgxYjM2MWZkMiwgMHg2ODRjOTFlZSwKLQkweDExMzQ3YWRmLCAweDE3Y2VjOWU3LCAweGYzYTY5ZTY1LCAweDc5Njk1M2M1LCAweDNjZDdiZDNhLCAweDFiZmJjMmNmLAotCTB4ZTdkYmY5MzIsIDB4OWJkYzhmNGQsIDB4NjBjN2ZiNTgsIDB4MzU3YWNhMzEsIDB4OWZiZDEyN2UsIDB4NWYzNmJkNzEsCi0JMHhhNTE5ZmU2MSwgMHhhYjVlYjFmZCwgMHhhNDdmNzg1MywgMHg0OWU0MDUxNywgMHgxMTJmZDdjYiwgMHg1YTk0NTRhMSwKLQkweGIzYmZjNDNlLCAweGU1YTBlOTlhLCAweGQ1NDI1YTQzLCAweGZiYmI4ZmJjLCAweGE4ZTM1YjU2LCAweDJkYTlmODRiLAotCTB4NDhhZTcxYjUsIDB4NGIzYzI0OWUsIDB4MmE5OWJmZGUsIDB4YWM2Y2IyNWYsIDB4M2U1YmM3ODQsIDB4YjM4ZjIzNzYsCi0JMHhlNjViOWU2ZCwgMHhkOWVkYjY0ZiwgMHhlZTZmZmYwMCwgMHgxZTA1NjE0MSwgMHg0ZTM5NTZjMiwgMHg1NTNlOWUzNCwKLQkweGRjYjkyNGU1LCAweDZlMzdiN2E4LCAweDZmNmY1ODU1LCAweGY3OTZhZDg0LCAweDZiNmY1ODdjLCAweDE1N2VkNWYwLAotCTB4YTZmMDk1YWUsIDB4NWIwZTEyZWQsIDB4MjQ5NTNiMWQsIDB4MDVjNDVmYjksIDB4ZDg5NDRmYjAsIDB4ODdiMWNlMGYsCi0JMHhmNjAyMzhkNCwgMHg0MGZiMTI4MSwgMHg2MDE1ZjQzZCwgMHhkMGMwMmJlOCwgMHhhZmExODA1NywgMHhhMTVmNDI1MCwKLQkweDY1ZjBhNTdlLCAweGJjODg4ZTIzLCAweDRlNGU4ZDRlLCAweGQxYTlkNzkwLCAweGViYzgxZmY5LCAweDc1ZTQ2MWU4LAotCTB4ZDc5MWZkZjQsIDB4YWYyM2I3ZDEsIDB4NWU0NzZmYTMsIDB4YWYyMzBmNDcsIDB4YmM4ZmVmYTMsIDB4NWU0NjFlOGUsCi0JMHg3OTFmZGY0NywgMHhiYzhjM2QxZCwgMHhmMjNmYmU4ZSwgMHhlNDc2ZmEzYSwgMHhjOGVkZjQ3NSwgMHhlNDYxZThlYiwKLQkweDkxZmRmNDc1LCAweGRmYjdkMWQ3LCAweGYyMThhM2RmLCAweDlhOTNmNzNlLCAweGVlYjVkZjA2LCAweDcxZmNjNjlkLAotCTB4MzEzYmVkZGEsIDB4NDFmYmU4OGYsIDB4NjZiZjlmZmMsIDB4OGY5ZDAxY2QsIDB4NmVkZjAxYWYsIDB4NDhmMzhhZWMsCi0JMHg0OWQ3ZjczYSwgMHhhNDg0OWJiYSwgMHhkMzIzNDhmMywgMHhjMjRkOGI3OSwgMHhlNzc0OWViNSwgMHhmMjBmZmUyNCwKLQkweDk5NTYzNTI5LCAweDdjODk0MTRmLCAweDUzZTQ0YTBhLCAweDUyOWYyMjUwLCAweDI5ZjMyZjkzLCAweDQxNGY5MTI4LAotCTB4MjgyOWYyM2QsIDB4ODk0MTRmOTEsIDB4ZTQ0YTBhN2MsIDB4OWYyMjUwNTMsIDB4MTRmOTEyODIsIDB4MGE3Yzg3N2MsCi0JMHg1MDUzZTQ0YSwgMHg0YTBhN2M4ZiwgMHg3ZjUwNTNlNCwgMHhiYzgxZDY4ZSwgMHhmODJlYjY4YSwgMHhmMzg2NzljYiwKLQkweGUxYTFmMTFjLCAweGMwMzRlNzNjLCAweGZkZjU5N2YwLCAweGRiZWIyZmUxLCAweGRiZWIyZmUxLCAweDYxZWIyZmUxLAotCTB4ZmVmYWNiZjgsIDB4YjBmNTk3ZjAsIDB4ZTU4YjllNjksIDB4ZmViMzdlMGMsIDB4N2FjZGY4M2IsIDB4NzAzZmE4YjgsCi0JMHgzYmEwYjExYSwgMHgzNWVlZmRmNiwgMHhlNTA0ZTE5NCwgMHhkZjQ5YzU1OSwgMHgxNWI3ZmY5NywgMHg2Mzg1ODNjOCwKLQkweDBmNjRlYzk1LCAweDBmYWRiZmQ5LCAweGQ4MjFhOGFkLCAweDJiYTdkZWFmLCAweGQwMjYyMzE2LCAweDQ0ZDhmMzliLAotCTB4MDQ0ODdmMzcsIDB4ZThhMDhmNzEsIDB4ZDc2ZTRjZjMsIDB4NDdmY2FhZjIsIDB4MjIzOTJmNzQsIDB4NTM1ZjBmZDgsCi0JMHg3ZGE1ZDcyNCwgMHgzMzRlMTFlZiwgMHgwNDdmYWQ0YSwgMHhmNDVmYmM5ZSwgMHhkNjNmNWFmYywgMHg5MDc1YmE5NywKLQkweGZkYzEyYzlkLCAweDhlMmQ5Mjg2LCAweDRmYzQ1ZGQyLCAweGZiMGE0YzA3LCAweDlmYzgwN2ExLCAweDVlODkzYTVhLAotCTB4YTNmZDUwYWEsIDB4MjdjM2E2MDMsIDB4YTIyZjcwZTMsIDB4YTdlY2YxNDUsIDB4ODhiMWFmYTEsIDB4ZTA1MmQ2MzMsCi0JMHhmZTE0YmJhOSwgMHhiMjc5NzY0MiwgMHhkZjc1YWZlYSwgMHhkYTNmN2I4MCwgMHgxZGI4YjViYSwgMHhmMjJmMDllOSwKLQkweDg0NDdmM2VmLCAweGI5ZTY4ZGFkLCAweDZiNjE1M2U5LCAweDkzNjZkZjg3LCAweGMzYmUwMmZlLCAweDgwYmFlZGI5LAotCTB4ZTNhZmRkZTIsIDB4Njk3MjgyZWYsIDB4MGQ4MWZjZmYsIDB4ZmQ1MWI0MzcsIDB4NmZiYTg3NzUsIDB4MTcxZjg3NjgsCi0JMHhjZWZiYmYyNywgMHhjNzhjODk3MywgMHhmYjI5YjczYiwgMHhmOTlmYjRjZCwgMHg5MDc3ODQ4NywgMHhjYjk0OTVmYSwKLQkweDg3NzVkZmYzLCAweDllMzZiNjljLCAweGQ3NmI2OWQ3LCAweDk3ZDg0M2RmLCAweDVjZTE3MzZkLCAweDg4MzVjMjI4LAotCTB4OGE3OTg5ZmYsIDB4ZjA0NDQxNzgsIDB4MGQ3YmZiNDYsIDB4NDQ4NmJiZmIsIDB4NzVkN2YxMDUsIDB4M2ZmYjYzMDcsCi0JMHhkNzUxZjFkMiwgMHg3ZTAxYjI1MCwgMHhmZjY2NThlMCwgMHg1OWZlM2E0NywgMHg3MjQ0MWY4NywgMHhlYzIwNmU0MSwKLQkweGYyNGFhNzU2LCAweGMzYmQ2YWY1LCAweDc5YzUxYmU0LCAweDYyM2VjYmEyLCAweDlhNmVmZTAzLCAweDdiOGI1Yzk3LAotCTB4ZjBiOGUyNmMsIDB4ZTZlZjgzZTQsIDB4NGU5ZjZjYjUsIDB4YmQwN2YyZWIsIDB4YmEwM2RjMWUsIDB4ZDNlZWQzZTksCi0JMHg2M2VmM2YwYywgMHg4MmE3ZDk5OCwgMHg3MGY2YzdkNywgMHhjNTA5NDA0ZSwgMHgwY2VlMmExMywgMHgwOTUyOWEwYywKLQkweGQ1YjAyM2JlLCAweDg3ZmU4NjlhLCAweDAwZWUwNzg0LCAweGEwYjEyODk5LCAweDQyYWZiMjM0LCAweDU1OGE2YzMxLAotCTB4ZDRlMjJmYzAsIDB4OTFmZjFkMzQsIDB4N2UwZTU4ZTYsIDB4MDU1OGYxMjksIDB4YzU4OTYzZjgsIDB4ODliZTg1NjksCi0JMHhlZmEyMzdmNiwgMHg3MWZmOTA3ZiwgMHg2ODY3YmNhZiwgMHg2YjFlYzBiNSwgMHg1MzhiNTFmZSwgMHgzNmVhZjVhZSwKLQkweDJkMWZmYjJiLCAweGQwZmZjOTQ3LCAweGZjZDUyYmRkLCAweDA4NWVlZDBkLCAweDEwOWUxZGY5LCAweGRiOTFmOGVjLAotCTB4YjlkNDJlMzksIDB4N2ZiZTFkZTEsIDB4NzgzYjg5ZjEsIDB4ZmFmODk5MjAsIDB4ZjdjMzljOTMsIDB4YjdlMWI5NTQsCi0JMHhjOTRmYWMyOCwgMHgyNzJjZTg2ZiwgMHgzZjZjYjYzYywgMHg1NWYzODg5ZCwgMHhmYjBhZjAzOCwgMHgzZGI3NTcxYiwKLQkweDA4ZTMyODllLCAweGE2ZDExZjMyLCAweGNmOGI0OWUyLCAweDY4ZjRhYmI0LCAweDdkMDFlZjUzLCAweDNiY2I3YTQ4LAotCTB4MDg2ZWVkODcsIDB4YmQ2ODM2ZjcsIDB4ZmI0NDU3ZWMsIDB4YjkxZjlhODcsIDB4Mzg0ZjFiNGUsIDB4YTQ1YzQ1ZGYsCi0JMHg4YmI3ZjY4MywgMHg1YmJiZDVhMCwgMHg4OTg4NjQ3NiwgMHhkNTNhZTNmZSwgMHhjZGIzNWNhZiwgMHgzYTdlZjdjYSwKLQkweGMyZWQ5MDQ0LCAweDNmNTQ2MDlhLCAweGJhY2ZiZWY1LCAweDlkZmFjNjgzLCAweGE3ZmU1MWU1LCAweGVlZDIyZTdhLAotCTB4N2RiY2I2ZTUsIDB4N2ZmNjZlZWEsIDB4NmY5Y2FkYmEsIDB4ZmQyYWRhNmIsIDB4MDQ1ODcxMjEsIDB4OGJjMDE1ZjMsCi0JMHgzNzA0YjE0YywgMHg5NDdhZjUxZCwgMHgyN2U3Zjg0OSwgMHgxZjU0NWZhYSwgMHgyZWJjNjU4ZSwgMHg3ZDY3OGIxOSwKLQkweDhiMmM3NGIyLCAweDMyYzY3YmUxLCAweDRjNzdiY2I5LCAweDhhNWM4YmRlLCAweDNiZDEwYzU4LCAweDkxMDRhYjVjLAotCTB4ZWE5OWZiNGYsIDB4N2I4ZGRkMGYsIDB4MjA2M2EwOTIsIDB4OTQ3OWY5OWQsIDB4MTQ1MzE5ZjgsIDB4YWU2YTdhYWIsCi0JMHg3NzA1Mzk1NywgMHhkZmVhZGViMywgMHhmNTk4N2I4ZSwgMHhjYmZkODI4MywgMHhkMTM3ZTAzYiwgMHhhM2YwMGRmOCwKLQkweGRjMWU0MWE2LCAweGI3M2Y3Y2I1LCAweDZlZjkxMTRlLCAweDk1MDZjM2M4LCAweDA0MWU0OWZmLCAweGViMmYwZmViLAotCTB4NDEyNTlhYjUsIDB4ZjA2OWFmZGMsIDB4ZWU4MTM2MWYsIDB4MDNmODFjOWEsIDB4ZWY4MDJkZTcsIDB4NTczNjI4MDgsCi0JMHhmODI3OWYyMSwgMHg3OWYxYWNiYywgMHhjNzM0M2NiNCwgMHg4NzI1ZjFhYiwgMHhmYjhkMWY4YywgMHg5ZDJjNThhNywKLQkweGQ3ZTA0NWJiLCAweGRlZDRiYzJiLCAweDBjZTAxODhjLCAweGY3MDgxMTk1LCAweGZkYjI4NTA5LCAweGFmNWZkMWU0LAotCTB4ZDNjMzg2ZDgsIDB4MzQzZjhjOTcsIDB4YWY0YzRjOTksIDB4ZjZmN2YyMTEsIDB4NzBjNTYwNDMsIDB4NjVlNDNhNmQsCi0JMHhjYmJhNTJiNywgMHg1M2NmNTkxNSwgMHg1NzJmMGI5NSwgMHgyYmM1Y2VlOCwgMHhmOTIyZjk1NSwgMHg2M2Y5Yzc0YiwKLQkweGU5ZjkyM2UzLCAweDQwZmYxMjYyLCAweGNmMDk1YjJiLCAweGE0ZTZiMzkwLCAweGEyMTRkN2YwLCAweGMyZTUyN2NjLAotCTB4ZGIwYzQzNWIsIDB4ZTI3ZGQ0MjgsIDB4NzNhZDA0MjIsIDB4N2M2NzBhODUsIDB4OWRmZGVlMmYsIDB4ODYxZjhjODUsCi0JMHg1ZTVmOTYyZiwgMHhiZmZjMjgxMSwgMHg4YTRkODdkMCwgMHhhYjU3ZWY4NSwgMHhmYzk4NzFmOCwgMHhlZmMzOTUxZiwKLQkweDgzMTc4N2I3LCAweDIzODVmMWFlLCAweDFhMmRkMDM2LCAweDFlZWRmNzNmLCAweGYwODczM2RhLCAweGU5MjE1MTkwLAotCTB4YjdlYjY0ZDcsIDB4MDQ1MTc5ZjIsIDB4YjU1Zjg4YWQsIDB4MjJmYjRhMTYsIDB4YWZlY2FlMmMsIDB4YzVjNDNlNzIsCi0JMHhkZjZkM2U3MSwgMHg4OWY3YWExZiwgMHhhY2UxZjFhMywgMHg3ZTAyNzY5MCwgMHhmNDhlNmJiMiwgMHg0ZmMyNTE5MywKLQkweGY4MWM3ZGM2LCAweDI3ZTE4MGM5LCAweDhjOWY4NGEzLCAweDgwYzlmODdhLCAweDg2MDMyN2UxLCAweDdlMTgwYzlmLAotCTB4YzlmODRhMzIsIDB4ZTRjMjdmYTgsIDB4ZDEzMGZmM2QsIDB4ZjA1MzY5ZjMsIDB4YTdjNGFiZjAsIDB4NGRmYWE1OWYsCi0JMHhhN2ZlYjQxNSwgMHhkNzliOGY3MSwgMHgxMWZkZTdlZiwgMHgxOTVlYjBkZiwgMHg1ZmM0NTNkNywgMHgxZjA4OGFmNiwKLQkweDcwYjllY2FkLCAweGUxMTM5NGQ0LCAweGJmOWRiNmE3LCAweGUyMDVlYTdmLCAweDE3ZTQ5NThmLCAweDNiZmQ5ZTQyLAotCTB4ZjE0YzUwOTUsIDB4ZGNmNjdjZDQsIDB4OTc5NjM4ZGEsIDB4NjM2ZWJlZTcsIDB4MWI2NGRiZmQsIDB4NDc3NzZkM2UsCi0JMHhjZjdlZjlmMCwgMHg3ZDRhYjRmZiwgMHhkMTc3Y2ExOSwgMHg2M2JhMmJiOCwgMHg0ZmZmZDAzZCwgMHhiMWQyZmE1NSwKLQkweDBmNDJmOGRlLCAweGFkMzJlNWQzLCAweDI1MWRlZjg5LCAweGJmNTBiM2ZhLCAweDllYmYwYzUyLCAweGJmOWFmZDQxLAotCTB4ZGEzNjc2ZjEsIDB4YjZlZTM4MWYsIDB4MWNiNzBmNDEsIDB4ZTE5MWQ5MmIsIDB4MTc3ZWY3YzIsIDB4ZTFjNWI1ZjgsCi0JMHg1OGNmYzFiNCwgMHhlZDk5MmRiZiwgMHg4Y2JhNzM2ZSwgMHg3M2M3MTJkYiwgMHg0N2EzNGJkZSwgMHhiNzhjODU1NSwKLQkweGI4Mjk1MjdkLCAweDk3OWVhMmJjLCAweDI1ZDY0MTA4LCAweDZlOTI3ZTg2LCAweGM1YTZmMmQxLCAweDU4ZTNhMzExLAotCTB4ZjNjYTc4OTEsIDB4MDcxMDczM2IsIDB4M2U5ZTE1NDksIDB4MjE3YzQ0ZDcsIDB4OGQyYjYxY2UsIDB4ZTNhMjUxYzQsCi0JMHg2YWYyZTMxZCwgMHg5ZGY4ODYxMywgMHg1MGE5YWU1NiwgMHhkYmNlZjcwYywgMHg4NWFiY2ZjNywgMHhkN2UxZDM4YiwKLQkweDExMzhhNjNmLCAweGI4NzM2ZTZmLCAweGI4MjZhZGVlLCAweDM3MTU4Y2VkLCAweDhhN2Q0NTMyLCAweGYwNDk5NmNiLAotCTB4NzM4YTIzYzgsIDB4YjliZGU4M2YsIDB4MTM1NmY1ODQsIDB4Zjc4YTUyNjgsIDB4YjcyY2Q1MGIsIDB4Y2IyYTQxNmQsCi0JMHhhZmVmOTZhNiwgMHhkNjZhNzYzZSwgMHg5MGFmYjFmNywgMHhiNjc1ODZkNywgMHgxNGI2YmQzOSwgMHhkYWQzZGY5ZCwKLQkweGY3ZjU3OGFmLCAweGIxYjgzNTIwLCAweDliMGRjNjQyLCAweGZjMDExOGU4LCAweDZkZDliN2RkLCAweDI1Mzg4OTViLAotCTB4ZmZiODNmYjksIDB4MTNlNTQ2YjcsIDB4YzdlYTNiZWQsIDB4NzNlYTFmZjcsIDB4YWJlMGViYzQsIDB4ZjQxN2RhMTEsCi0JMHhkNTJiZTYxNiwgMHhlMzEyYmY4ZCwgMHhmZWE3ZTZlYiwgMHg1NmI1YjdlYywgMHgyZDc4ZjAyNCwgMHgxYmI3ZGE0ZSwKLQkweDQ5ZDc5M2E1LCAweDhkM2M2MDc4LCAweDVjZjFhMWVjLCAweGJkZTMwZjNjLCAweDdhYjQxNDM1LCAweGJiZGMxZWIwLAotCTB4MzM4NTc4MjAsIDB4MmIzY2M1NjgsIDB4N2M3MDk1YjcsIDB4Y2U1YmJmZGYsIDB4NmM5OWRmZTMsIDB4Njc1ZjgyMmIsCi0JMHhlOTY2ZGE3MSwgMHgzYmUyM2RmZCwgMHgwZTEzNjVmMCwgMHg1ZWJjYTlmNywgMHgwOGRiODdmNiwgMHg0M2YwMjk0ZiwKLQkweDc1ZmZjODUzLCAweDhiNTdjNDRjLCAweGZlYjZmZWJhLCAweGQ4ZmZhMzY0LCAweGY0MTU5OGZmLCAweDRhZWQ1NDY5LAotCTB4NTQ5ZTFkMzQsIDB4YjZlNTc4ZjksIDB4ZDc3ODZjNWIsIDB4ZjJmMTY2ZDAsIDB4OGFiZjA3YmIsIDB4MTBkZjdmZWYsCi0JMHg5MGY5MGJiYiwgMHhhZDI3ODFjNiwgMHhhZTFmODI2ZSwgMHg5M2Y2N2U5MCwgMHhlYWRmOTIxNSwgMHhiOGY5NDI3MywKLQkweDIxYjIzMWU3LCAweDM3MjFlZjk2LCAweGJmNzlmYjNhLCAweDljN2VmOGUzLCAweGM0ZmYwM2YwLCAweDEzN2M2M2U5LAotCTB4OWY3MDA0OWYsIDB4NDhjMDZkYWYsIDB4MTI3YWM4ZGYsIDB4ODFiNmRjNzgsIDB4NTViZjk2MTYsIDB4YTljZGJmMTYsCi0JMHgxM2RlYzc1ZiwgMHhhNWUxMGFmOSwgMHg4MTVlZTQ5MSwgMHhiM2ZhNzFmZCwgMHgxZjE3M2ZjMSwgMHhmNzliMzdiZiwKLQkweDdiZTRlYjQ5LCAweGUyZDcxZTU0LCAweDM3Y2M3OThjLCAweGZmMWFkN2NjLCAweDc5NDk5NzM0LCAweGE5N2JlNmQ2LAotCTB4YmRmM2MyYzIsIDB4YjRlNTI1ZjQsIDB4ZGYwYjc3NmQsIDB4MTBjZDY5ODMsIDB4NjJmOTQ1MWUsIDB4NTNlNGQ1MzksCi0JMHgzNTQ2ZDc5MywgMHg3YmJhZDkyZSwgMHhmNGViZjA4OSwgMHhlZWVmZDkwZCwgMHhjZmMxMjc5NywgMHgyYjlkNzU2NSwKLQkweDNlMTI3YTU0LCAweGI4YmExMzVmLCAweDNkMmFiYmRkLCAweDcyOGM3MjliLCAweGVlMzBmMThmLCAweDliZWU1NTI5LAotCTB4MzdmMjg2MTYsIDB4NmJmYTQ2MTQsIDB4YzhhNTM2ZjMsIDB4ZTBmZmMwZWYsIDB4YmQyYTUzYjMsIDB4ZjcyMzdmZDEsCi0JMHhlYWE0ZjE1NywgMHhiZDcxZDY4ZCwgMHgxYTdiNjg3MSwgMHg4NTYxYzZmNCwgMHhmNzFiNTRmMywgMHhlMzZlYmY0OCwKLQkweGU3MWMwOThiLCAweGFmOGQ4ZmZhLCAweGVhMWVmOGZlLCAweDgzMTNjOWY3LCAweDEzZjdmYWNkLCAweDI3YTkyMTZkLAotCTB4ODI5ZmM5ZGEsIDB4ZGFhNTU4ZGUsIDB4ZmY2Mjg2ZmQsIDB4NzI3NDJiNGYsIDB4MTdhZGY2ZGMsIDB4YWM1YzgxYWYsCi0JMHhmOGI5MmExOCwgMHgwZWZiYzE0YiwgMHhlYWZjZGY0MSwgMHg3M2JlMWZjNSwgMHg1ZjYyMmI4MywgMHhkY2FjN2RiNSwKLQkweDE2ZDY2ZmY5LCAweDcyNmYxZTg3LCAweDU2MGFiYjlmLCAweDQ5M2NlZjBhLCAweDVhYzM5YzJmLCAweDFkZjIyOWI3LAotCTB4ZmQ4ZDhmNTksIDB4ZDFkZThkNGYsIDB4ZjI0MmQwN2MsIDB4ZjA4OGVhZGIsIDB4YTlmZjQ2ODEsIDB4NzhkYjI2ZmMsCi0JMHg1ZmQyNGUzZSwgMHgwN2M2YjdhMywgMHgzYTM1YmQxYSwgMHg5ZDI5N2JmMSwgMHhmYmFkYWZmZiwgMHgyYjVlOTUzMywKLQkweDUzMWRmZTU0LCAweDg3NDU2ZWU1LCAweGU1OGFiNmRiLCAweDA1NmI2ZGRkLCAweGIxZmE2YmRmLCAweDRlM2Y1OGNkLAotCTB4N2ViOGU3MjcsIDB4YzBiOTAxZGYsIDB4NjlkMDIyYmIsIDB4YzY1NWI3NzQsIDB4YTA0ZDBmMjMsIDB4YmVlYzM2NTMsCi0JMHg2YWQ1OGViNiwgMHg4ZDVkYjFkYywgMHhmY2QyYWUxZiwgMHg0YzdmNjJlMCwgMHhhYjRlOGVhNSwgMHg2YTc0OTM5ZiwKLQkweDVmZWRlOTdkLCAweGZiYzVjMGZmLCAweDRmNmM3YTkzLCAweDJiOGJmYjBjLCAweGJkMzMwZTg3LCAweDY2M2U3NzFhLAotCTB4ZjRiZjUzNzUsIDB4NWY0MWI3NGEsIDB4Mzg5Nzc2YjcsIDB4YjE1ZjM3MTEsIDB4ZjkwYWQwNzMsIDB4NGQ3NGFmNGYsCi0JMHhlYTRkZWZjYSwgMHhhZjBkNjBiZCwgMHhjZThhM2ZiMCwgMHhhMWZkNjllZSwgMHgzY2QzMGVmNywgMHgyNmM0Mzc5YiwKLQkweDM2OGQxZWUyLCAweGYyNTJiNzhmLCAweDcyNzc2Yjc1LCAweGVkNmJlNjBhLCAweDM4MWZmOTZlLCAweDNmN2E2OGNmLAotCTB4YzQyZWVlNWEsIDB4NDk1ODc5NGEsIDB4MmYyZTQyOWYsIDB4ZGVjOWUyZGMsIDB4M2YzMTM4NTgsIDB4OTU5NTk1YTYsCi0JMHgxMGNmNmU5MiwgMHgyNTZmNzE3YSwgMHhiYmU4N2UyYiwgMHgwM2Q2NDNjMCwgMHg5M2U0MWU3MSwgMHg0MWMyZjJmMywKLQkweGM2M2UwYmNjLCAweDE3YTQ2ZGJhLCAweGFmMjVmZjcxLCAweGFjN2JmYzMzLCAweGJlNzQ1YzgzLCAweDIxMzI4MmVmLAotCTB4ZDIzYmU2NDUsIDB4OTI2ZmRlMDgsIDB4Y2M3MmIzZWYsIDB4NTJhZmJjYjIsIDB4MGY2YTNiZGEsIDB4ODZhNDVkYTEsCi0JMHg2OGZmYjFjYiwgMHg1Zjk1MzViZCwgMHgzNmE3ZjFhMSwgMHg5YTllYjQ0ZSwgMHg1Nzc3N2Y2YSwgMHhhMmZhNzk0YSwKLQkweGFiNzA1ZGZkLCAweDRmMDI5MzcxLCAweDZkZTY5ZGI2LCAweDA3OGU3NDdlLCAweGRhMmZhNDcxLCAweGU2NGUyZGE3LAotCTB4NGJmN2M2OTcsIDB4MzI5NTVhY2MsIDB4ZTRmMzdlYzksIDB4ZmRlYTY4MzksIDB4NGRhNmQ0MGUsIDB4NzkwOWRmYjIsCi0JMHhiNDRlNTU1ZiwgMHg3OWUzZWZiYiwgMHgyNzk5N2U5MiwgMHhkZDkwYTBiOSwgMHg2YzJlZWZhMiwgMHg2NWZiZTU4OCwKLQkweDM4YjRiZWRhLCAweDVlZmFkZmZkLCAweDE0Y2FjMWUxLCAweDRlMTRmZTM1LCAweDE0ZDkzZjgwLCAweDQ4N2ZjYWE3LAotCTB4YTI1ZmE4YzIsIDB4ZmRlY2Q3YWIsIDB4MjEzODY3MzksIDB4M2Y5ZmE3NDUsIDB4YTFlZDU2ZWEsIDB4M2M4MWVmMDgsCi0JMHg4MTVjOWU4YiwgMHhmZWI5Yzc3OCwgMHg0MmE2MDkwYiwgMHg5ZjVjYTdmMCwgMHhhYjY2ZGRmNiwgMHhmNDBmNWNlNywKLQkweGJlMThmNmRjLCAweGQzN2U0ZWVmLCAweGRhOTNjNDBlLCAweGE3MWNjOTAzLCAweGVjYTdhZmI5LCAweGU3MWE1ZWUyLAotCTB4ZmM1OTZkYmUsIDB4ZjNmMzUwZGUsIDB4MmZmYWE5NTcsIDB4OGVjYjczN2UsIDB4ZWJkZmY0NGEsIDB4NmY4ZmMyNzYsCi0JMHg4ODZjZjg3NywgMHgyYzBmYzVjMywgMHhkZmIwZTViMSwgMHg1YTAxY2YyYiwgMHgyMmIzNmFkZSwgMHgwYzllZmM3YywKLQkweDY1NzIxMWZhLCAweDdiMDc5MTNhLCAweGY0YWY3YWIzLCAweDYyNGRlYmZmLCAweGIzOWJmMjI3LCAweDMzOGI3Y2ZiLAotCTB4NTI5ZTFmYTEsIDB4YzUyN2YwM2MsIDB4ZGFhM2QyM2UsIDB4Yzc3NDhjNzksIDB4NmZiZWM1ODcsIDB4ZWY2OGJmNDEsCi0JMHhjNmMyZTZlZiwgMHgyMTlmYjE5YSwgMHg4MjlkY2UyZiwgMHgwN2VjMGJmYywgMHhhNjVlMDFlYiwgMHg2ZTcxZmNhOSwKLQkweGFiODI3Y2UwLCAweDJmY2Y4MjMwLCAweGUzNDgxZWZiLCAweGQ2N2YyZDBiLCAweDE5NGZmODhlLCAweDBkMjlhM2Y4LAotCTB4ZTZhNmQxZmMsIDB4MmMwYzc2YzksIDB4NzA3ZGI4NjIsIDB4ZTlmYmJmMTksIDB4NDczYTY3NDMsIDB4ZmI1NjNkYjYsCi0JMHhlZjA4YTA0NCwgMHhkYTNlMjU3OCwgMHgwOWRkMTZiYSwgMHg3ZjYzYThiZiwgMHgzNWNlMzI0YywgMHhiNjQwZDZkOSwKLQkweDFiNmQwZmRlLCAweDAxZGY5ODdjLCAweGU1OGMxYTVkLCAweGNlMzU0MDc3LCAweDY3YjgzNTI1LCAweDdjOWY2YWIzLAotCTB4M2JmNWE3NjcsIDB4YjU5N2VhYTEsIDB4ZWYwYzhiNWQsIDB4NGM2OWRhNzksIDB4ZDlmZjhkMjcsIDB4NWZkZjNjNTAsCi0JMHgwNGU5ZGVkMywgMHg5NWUzZmVlYywgMHg0ZWJkZjJlNSwgMHhkM2JlNGJiNSwgMHhhZWZlZTRjOSwgMHg1YWY0ZTM0OSwKLQkweGJlNTdiMTc5LCAweDNiYmRkMGZiLCAweGJlOTFiM2JhLCAweDI1N2FlY2VmLCAweDdiYWNlMzExLCAweDRlMTU2N2ZjLAotCTB4Y2ViN2M3MTMsIDB4NzdmMWZjNjAsIDB4YmJlNTdiNDcsIDB4MjdjN2Y2YTMsIDB4YmUwM2ZmN2YsIDB4MWM3NjdmMDYsCi0JMHhjNjc5MGM1MywgMHhlYzQ5ODJmYiwgMHhjMjQzZmE4NywgMHhkZmI2ZmM4NiwgMHhiZGNmZDgyOSwgMHhiMDNkMTY2NCwKLQkweGEyNWY5YWViLCAweGM1NTJmZmQ1LCAweGZlYTRhNWMzLCAweGNkN2ZkMDZjLCAweDYxYjMyNzgxLCAweDIwOTM3ZTM3LAotCTB4ZjcwM2E2ZTEsIDB4Yzg3YTA4ZmUsIDB4ZjQ4YzdjZmYsIDB4ZmQ4MjJkYmYsIDB4ZjQ4MGQ2ZGIsIDB4NjRmN2I1OTcsCi0JMHgzOGVjNzg0MiwgMHgxOTU0N2Y4NywgMHg0NmI5ZjJjZiwgMHhhZGE0OTc3ZCwgMHhhZTBiZmM4YiwgMHhkNDQ1OGRmZiwKLQkweDZmNzgxZDYxLCAweGRmN2U3ZTA0LCAweDNkMDc2YTEyLCAweDE0N2YyN2RmLCAweDJhMTM4Zjc5LCAweDZmZGZiZGZmLAotCTB4ODdmN2NjNWUsIDB4NTdlMDEwNDgsIDB4NGFmZmRmYmMsIDB4OWE4OWYyMDIsIDB4ZmU2YjU2MWYsIDB4YjRlZjE3OTUsCi0JMHhlZjk1MWUzNywgMHg4NzBiZTM4MSwgMHhkNDIzMWNmOSwgMHhhNzdhYzk3OCwgMHhkZjhkYjdlNCwgMHg0YWNlMmViNywKLQkweDZiOGFiZjY1LCAweGRiMjEyZDNhLCAweGFiNWFmNDY0LCAweGYwZTM0ZGZhLCAweDJlN2NjMzkxLCAweGZkMjQzY2ViLAotCTB4ZjNhMWNlODIsIDB4N2U2ODE3ZWMsIDB4NzBiZWY2ODYsIDB4ZWNmM2ExZGQsIDB4YWRkZjY4MjcsIDB4ZDJmMTIyM2YsCi0JMHhiN2Q2NDQ3NSwgMHg3OGI0OTgxNCwgMHhjM2M5NTc4YiwgMHgzODYxNTk3OSwgMHhiNGQyYzJiZiwgMHg5YjliMDBkNSwKLQkweDNhNTA1YWI2LCAweDA4Yzg3OGQ1LCAweDBhYmJlNWZiLCAweDk5ZTdjYTdlLCAweGI4ZWE2ZGFlLCAweGYzNzU1YjA0LAotCTB4OTc0ZDU2YzUsIDB4M2VhOGRhZWYsIDB4YTVlZjgxZDcsIDB4YmJkYWQ3M2QsIDB4NTBmM2M4OGUsIDB4Mjc2ZTJiYTgsCi0JMHhlZjVkODNkZiwgMHhlYmVjYTBiMCwgMHhkZjNkYjA3MiwgMHhjMDJhNmRkNywgMHgxMmFmNzU3ZCwgMHg3MWRjZmVjNywKLQkweGY0ZDZmZWY1LCAweDIyYzZlZjc1LCAweDQ2Mjk5MDRlLCAweDdjZGM5OTRlLCAweDE1NjY2YjZmLCAweDAyMmU5YjhkLAotCTB4N2I0YjhmN2MsIDB4OWZlNTc0NGYsIDB4ZjhjMzJlM2YsIDB4YWZjMjYyMGIsIDB4NWI5ODAyMjAsIDB4NzkwOWEzMzUsCi0JMHhlMTQ5MDU5MywgMHhmNzNjNjAzMiwgMHhkMzg0YmE1OCwgMHgwZTIwYWZjMywgMHgzNzI0MGNlNSwgMHhhNWYyOGYyMSwKLQkweDhhZjU0YWUzLCAweDMwZWVjZTIxLCAweDBhMDdhZmY5LCAweGRiMmVjNmJhLCAweGM0NjM1YzY0LCAweDU3OTliOTA2LAotCTB4ZmE2OGY5MjUsIDB4ZTI0NzNhNDksIDB4ODNiOWY1MWMsIDB4ZDNlOTgxY2YsIDB4OWI5ZGY5YmEsIDB4YTE5NzBjMjgsCi0JMHg4MzdjNzFkZiwgMHg4YzdmNjBmYiwgMHg0MjBlZmY5MywgMHhmNmY1OTc5ZSwgMHgwMjc1NThjNiwgMHgzZGU5OTc5NywKLQkweGE0MjVhZWFhLCAweDlmMDM2M2U2LCAweGY3Zjg4MjliLCAweGExMmI4ZTA0LCAweGJjZmRlYjZmLCAweDRmMjkyYWVlLAotCTB4OTc5OTE4YmUsIDB4Y2ViMTRiYmQsIDB4ZTRmYTI3ZmEsIDB4ODM1ZmRiOTAsIDB4Y2M3MmZhNzUsIDB4YjhiOTI1NDUsCi0JMHg3ZGVmMmIxNywgMHhiN2YzNTE1ZiwgMHg1MGJjYmY5YSwgMHg3YTk2NzY5ZCwgMHhjOGNkYjNjZSwgMHhiNGZlNDA3MCwKLQkweGQ3OGE4OWZiLCAweDFmNTJlZmNiLCAweDhhZDkzYzJhLCAweGM0NzM3Zjc1LCAweDE2MjBlZmNlLCAweDczYzljNDhlLAotCTB4YjYzYThjZDUsIDB4ZDliMTdkYWYsIDB4MmUyODNmZWMsIDB4ZmVhMjY4OGIsIDB4MjE0ZDBiMjcsIDB4YTZmZmRmZGMsCi0JMHg1OTllNzNiMCwgMHg2ZGZjYTNkOCwgMHhjM2RmMmM1MywgMHhmMWJmOGU1NiwgMHg5NjRkZWMzOSwgMHg5MmE3ZjdmOSwKLQkweGZmNTk5ZjY4LCAweDhiYTA3OGEwLCAweGZlMmY0NzliLCAweDZjYTg0ZmUzLCAweDE4N2ZkYjFhLCAweGZlNDkxMWZiLAotCTB4YjljM2YwNjYsIDB4N2VmM2JhZDEsIDB4OWQzN2Y1NDIsIDB4YjQ4Zjc2NDMsIDB4OGZiZjQyNjMsIDB4OWU3ZTBmZTMsCi0JMHhhYzhhNjI5OCwgMHhjNWM4Y2FlZiwgMHg4NzlkNWYxNywgMHhlOWYxY2VkMiwgMHgzMmNkYzc4NSwgMHg5ZWI1MTU5ZSwKLQkweGJlMmUxOTJiLCAweDk4ZmQ0ZTBmLCAweGE2MWM1NzNlLCAweDBiODdjZTIwLCAweDBmN2E5ZjhmLCAweDdiODg1YmViLAotCTB4ZDgzNzM4Y2UsIDB4ZjZmNTk3YWQsIDB4MjU2NmI4NGUsIDB4MTUwZTdlMjMsIDB4ODhhYzk3ZmEsIDB4YjU0MDc4M2UsCi0JMHhhZTdkNjk0YiwgMHg3YjA4ZGM5ZiwgMHgyMDU5YTZmOSwgMHg2NTE0NDBlZSwgMHgwN2Q2ODgzZSwgMHg0MjVmODMzZiwKLQkweGFhMzdjNmZlLCAweDA3ZWQ3OWU0LCAweDU0NmZiZTM5LCAweDY3MDY1Y2IxLCAweDliZTcyZTQxLCAweGI2OWZiZjI3LAotCTB4ZTM1MTRhYWYsIDB4ZDFhZTkyNTksIDB4OGJhNjhiNzQsIDB4ZTc3MTZmODYsIDB4ODUyNGU5ZjAsIDB4YThmNDVjZjEsCi0JMHhjNjJlZWZjNCwgMHhiNzY3ZTdlZiwgMHgxOThhOTg5MywgMHhjNjM2ZmJmZiwgMHhmODZmZmZmMywgMHhjYTdkZTJmZCwKLQkweGZiZTM3M2Y3LCAweGQzZWQzYWZjLCAweDc3ZTdkODZkLCAweDkzZWQxZmZlLCAweGJjZGZjMGY1LCAweDNlZTM2MWNmLAotCTB4YjE0MmZhZDMsIDB4OGYzN2MwNzMsIDB4OGFjZmQ4OWIsIDB4MGEyYTM3YmUsIDB4NjZkMWViMDQsIDB4NTNjNzFjNzMsCi0JMHhkZGYyNzFmZCwgMHhkM2NmZTkwMSwgMHhkZTlhOWZkMCwgMHgyZTE3NWQ5YywgMHg0ZTcxYmY4MiwgMHhhZWIxNjc4OCwKLQkweGViODg2OWIwLCAweDMwZTU1NjJmLCAweGMzMTRjY2RmLCAweGMyN2VmYzk5LCAweDNmODcyZTEyLCAweDM1YmZiNjZiLAotCTB4NGJiMjIzZjcsIDB4MGYwNDhmMDMsIDB4ZjRlMzRhYmYsIDB4NTZhN2MxMjksIDB4ZWRkZDVmNDEsIDB4OTVkY2ZjZTAsCi0JMHhhNTYwMjlhMCwgMHg0NTkyMDY3OSwgMHg3ZjlhMzFmMSwgMHhjZTVjY2Q2MCwgMHhhYTExNWNiMywgMHhiMWIwNmE5ZSwKLQkweGVjZjZhMjllLCAweGNhMzdiNDFlLCAweGY5ZmRlZmY2LCAweGEzZjgxZWMyLCAweGY3ODJmOTIzLCAweGFlMjI1MDMzLAotCTB4YzBmMDRiZDksIDB4ZmY2ZTAyOTIsIDB4ZjZlN2E2YTEsIDB4OTdlZmM4MjQsIDB4ODE5M2U2MDgsIDB4ZWY3YzI5MzUsCi0JMHg4M2E3ZTllNCwgMHgwZThlYzJkNywgMHgxMTMzN2EwYywgMHhmNDRjYWI1NywgMHgxOWM3NDE4NywgMHgwNzlmNjk2NiwKLQkweGU1NGY1NGRjLCAweGIxYWY4YTEzLCAweGM5MTRlMzFkLCAweGUzMWI4NmY1LCAweDQzNDAzYTVlLCAweDJhOTFlNmM1LAotCTB4M2Q3M2ZhYTUsIDB4ZDVjZjljMDksIDB4NjM4YjQ3ZTQsIDB4N2Y5YzBlY2YsIDB4ZGVkMjc4MGEsIDB4ZjJhMDdmMjMsCi0JMHhjNTc3ODY5OSwgMHhhNjY3ZGYyYiwgMHhlOGQ2NzhhYSwgMHg2YTViZjFhMCwgMHhhNmNmN2M5YywgMHgzNzdjOTE2YywKLQkweGJkNzkxZjdlLCAweDMzYzhmYmUwLCAweDI3NzgyOTY5LCAweDcxZTMxY2Q3LCAweDRhZGZkZjAxLCAweGZkNjE4ZmYyLAotCTB4M2U4ODFiN2QsIDB4ZDI0M2VjNjYsIDB4NWJkZTFjZTEsIDB4OTk3ZmUyNGUsIDB4N2U1YTRkYWIsIDB4MzQ2M2RmOWYsCi0JMHg5YTVmYTkwYiwgMHgzZDE3ZjdiNSwgMHgyMjE3ZjdjNiwgMHhlZjE5MzMzYywgMHhlODlmOTg5MSwgMHgzZWRkNjdmYiwKLQkweDVmYmUzNTViLCAweGQyZmI2NWVlLCAweGQ5ZGVmMmFjLCAweDdhNGYzNGZmLCAweDVhYTkyODZmLCAweDYyM2I5NWRhLAotCTB4OWRmYzg5ZmQsIDB4ZjM0NTBlZmEsIDB4N2M5NmNmYzMsIDB4ZTRmNjBiM2MsIDB4Y2M2ZjgzZGMsIDB4YTI1Nzc5NDQsCi0JMHhmNjlhYjkyZiwgMHgxZmUzNDRmMywgMHg3ZGM0YzMxNiwgMHhmN2U2MTk5MCwgMHhmZTM0MWYzNCwgMHhlNWM3MTY3MSwKLQkweGZjYzFiY2I3LCAweDU3YWViN2ZmLCAweDAxZmZjNzViLCAweDA5MzRlMTcwLCAweDAwMDA0OGQwCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGU1ZmYwMCwgMHhkNTU0N2MwOSwgMHhmMzdkZjBmNSwgMHg2NjQ5OTk5NiwKKwkweDBkOTA5MzI2LCAweDhhMDI3MTA4LCAweDA4MTM4MGE4LCAweGMzYjQ0MDY5LCAweDhlMjJhMjIyLCAweDI2MGRjNTViLAorCTB4MTAzN2Q5MDIsIDB4ZmRhZmYwZmQsIDB4MmQzNjEwMzIsIDB4NDY4MmQwZDYsIDB4YTBjMDc0OGIsIDB4MGQwNDgyYzEsCisJMHgwMGUwMjQxOCwgMHhkNTJmZjgyZSwgMHg1YjdiYmZkOCwgMHgxNmMzNGEwYywgMHg3ZTFiODA5MiwgMHhjZTdmZTViNSwKKwkweGVmMjVmN2I5LCAweDZkODAyNjRkLCAweGZkZmI1ZmJmLCAweGU2ZjE2OWJmLCAweDVkZGY3YmJjLCAweDNkY2Y3NmNlLAorCTB4MTRmYmRjZjcsIDB4Zjg5NjI4ZGIsIDB4ZTBjZWM2NjMsIDB4MmNhYmQyMGYsIDB4ZGQ1MWIxOGMsIDB4YTBkYjZjZTksCisJMHg3NGZhODdhMSwgMHg2NTU5ZmZlNywgMHg0Mjg3ZWFkMywgMHg2ZWQwYWIxZSwgMHg5Y2ZkZDYxZSwgMHg3ZTU0ODViMSwKKwkweDM4NmI4YzQwLCAweGY0ZDMxY2JiLCAweDhmMGUxYjEwLCAweDk2MTZjOTZkLCAweDZlN2RkOGNjLCAweDA5MDFiZjQ2LAorCTB4OTEyOTc0YmUsIDB4NTYxNWNlYjEsIDB4NzgwY2JhZjcsIDB4MDg1YzdhYWUsIDB4MjBjOGY3ZGYsIDB4ZjdjMjUwNzcsCisJMHgxNjUyYzkzYywgMHhiYWEyM2ZlNCwgMHhiZWNjMDFkNywgMHg2Y2IzMjMzZiwgMHhlMGRhNjZjNiwgMHhjM2ZjMGY2ZiwKKwkweDdjYmVhMDdhLCAweDYzMTA2Y2FjLCAweDA1OTk2OWVhLCAweDc3ZWE3ZmEwLCAweDM0MDNhNTEyLCAweDAwZWZjMzM2LAorCTB4NmMyZGY5NzgsIDB4ZmVlZWQwZGMsIDB4ZWNmZDEzYjksIDB4ZThiNzgwNzMsIDB4NWI3ZTg5ZjksIDB4MDk3ZjkwYzAsCisJMHhlY2ZmYTg5MywgMHg1ZmFhNGFmYiwgMHhmMmYxNmY2ZiwgMHgwNzNlNmM1YiwgMHg4ZDk0MTYzNiwgMHg3Zjk2M2JjZiwKKwkweDhiZTdjMmU5LCAweDdhYTE2ZTliLCAweGQ4MmM1MzE4LCAweGM4Yjc3MmNmLCAweDYzNWNmYzRmLCAweGJiZmFlZTk2LAorCTB4NzZhMjE0ZjEsIDB4MDRkM2Q4NzQsIDB4MzE4OGZlZWQsIDB4YjZiZmI1ZTksIDB4ZDU0M2MwMzIsIDB4MDU2M2Q1NTYsCisJMHhhYWQ4NGNiYywgMHg3MDBjN2Y4NiwgMHg4NDI5NWFlOSwgMHg5ZDk3NjViMCwgMHhmYjRiYzAzMSwgMHg5ZDg3MGU2YSwKKwkweDlmY2IwZjlhLCAweGFhMTgwNWE4LCAweGZmMzZiNzI4LCAweGRiYzQwYWZjLCAweGEzYWQ5OTU2LCAweGY3ODRmYzY2LAorCTB4M2JjNzFiNTYsIDB4OWU3MGU0NmIsIDB4NmJhNTgzOWQsIDB4ZjdjNzRmNzcsIDB4Y2NhZDFhMGIsIDB4NmU5NWY1MGUsCisJMHgwNTdhOWZjZiwgMHg1NGZiZjljMCwgMHhkNzRhNDU4NiwgMHgwMWZhZDAyZiwgMHhlYTkyMTg1YywgMHhjZjE4ZWUxMSwKKwkweDM2ZTBmZGE4LCAweGNhMWViNDM5LCAweDkzOWFiODc3LCAweDFmZjE4MzZmLCAweGNmMzFiNGFiLCAweDY3NmZkMGM1LAorCTB4ODBhZGYyNzMsIDB4OTZkMGEyODcsIDB4ZDE1ZWY4NDksIDB4MmM4YmM5NDYsIDB4ZmFlYjYxMzQsIDB4N2JjMmZiMzcsCisJMHhhZjI0MWJhNSwgMHg1YzUyZjAxNSwgMHg0MzNjY2IxNywgMHhjMGNlMWY3OCwgMHgzOTA2ZDZiZiwgMHg5ZmM4NjNmYywKKwkweDE5NjRlMzBiLCAweDQ5ZWFkNzQ4LCAweDU3ZjZjNjRjLCAweDM3NjcxZTY4LCAweDBlNTU4ZTllLCAweDM3NmIxZTYxLAorCTB4ZGEwMWJhNWMsIDB4NWVjYWY3ODEsIDB4YzQzOGJjOTQsIDB4MjAwYjBiMzIsIDB4Yjc2ZmI2NWYsIDB4ODFkNjdiNGYsCisJMHgwZGEwNWJlMywgMHg5NmI4ZTI3NiwgMHgzZjJlNTg2YSwgMHhlZWNkYmI5NCwgMHhkNWFkZmVjMSwgMHhkMTdlNDEyNiwKKwkweDllNWFiNWVhLCAweDc1YzVmZTgxLCAweGNkOGYzMTk3LCAweDQxOWFhZmQwLCAweDg4ZmU0NjI5LCAweDliMDE4ZjRjLAorCTB4YzQ1M2ZiMTgsIDB4ZjkxZWFmOTgsIDB4Mzc2OTA5NDQsIDB4OWZhMmU0MTksIDB4MmVmNDRmMTQsIDB4ZjU0ZDkzYWUsCisJMHg0YjE5MjYwMywgMHgwMDdlZmY4MiwgMHg4MmJlMDI3ZiwgMHg1Nzg0OWQzYiwgMHgwNTczNmU5ZCwgMHgzYjc0ZTkxZiwKKwkweDI5ODdlNDI1LCAweGZhYzZkOTlkLCAweDQ4ZTdmNGY1LCAweDc1NGZlODA3LCAweDVmZDI5YmE1LCAweGJhNTJhNjU0LAorCTB4ZjQ0M2QyYjIsIDB4MDdmMTAyNzksIDB4NmZkMTcyZTksIDB4NGUzNjU4ZDcsIDB4M2U1ZDc2ODEsIDB4NGIzMTQ2ZTYsCisJMHhhNzFiZTI5OCwgMHhlN2UwOWMwMiwgMHgwMWRkZjI3MCwgMHhmMTk2NzNjOSwgMHg2YTEzZTllYiwgMHg3MjY1MTcyMCwKKwkweDUzZTQ5YjE1LCAweDA1YWMwMmZhLCAweGI0MmYzMGU2LCAweDliZThkY2FmLCAweGQ3YjE5YTM4LCAweDFjNzFlMDU5LAorCTB4NTAyOTIyZmYsIDB4YWM2NTc0ODAsIDB4NzQwZmQ1M2UsIDB4MWU4MTIyNTksIDB4YzUyZDdjMDEsIDB4OTYxZTAyNDEsCisJMHgwNjdlMDVmNCwgMHg0ZjcxM2QzYSwgMHgyNGIyYjNmNiwgMHg3MDg4OWFjNiwgMHg2NjhmNzNkZSwgMHg1NDM1M2Q1MCwKKwkweDBjZjUwYThmLCAweGM5M2Q3NzNhLCAweGY1NGM3M2QzLCAweGQwMmY0ZjI0LCAweGY1NGI1OWViLCAweDllYWZjZmQ4LAorCTB4MzE4ZmE2MjcsIDB4OTE3YTY3ZjcsIDB4NTgwYmNmNWUsIDB4ZmNmMzkxNmUsIDB4NjMzYzk1YzYsIDB4MzMzZmI5YWMsCisJMHg5NDllYTg0YSwgMHgwMDJjYmRiYiwgMHg3ZjlkNjVlNSwgMHg4NjRmYjM1OCwgMHhmOGM2Yzc3YywgMHgyMzMyOGYxMSwKKwkweDg2ZGY4ZDFmLCAweGFhNDEzOWY1LCAweDk3MTQ3YzhjLCAweGE3OTI2MzEzLCAweDA5ODI1Zjc4LCAweDlmYjkzM2VlLAorCTB4N2Y5MjdjYTksIDB4NjUzZjI5YTAsIDB4N2MxMWE1ZGEsIDB4NWViNzcwZTksIDB4NTRlODYwMjYsIDB4ZmVhMzVlMzgsCisJMHhkMjM0ZmQ2YSwgMHhkOWZhZTMzYiwgMHg5ZmEwN2UwOCwgMHgwM2NlZjQ4MywgMHhiYjE3MDI2MywgMHg1N2Q4ZGZhMSwKKwkweDQwN2ZmNDA2LCAweDhlZWU1YzBiLCAweDJlMzAzN2MyLCAweGVhNjJhNTg5LCAweDk5MWE2MGIxLCAweDc4ZTU1NGJmLAorCTB4ZmJmZmRmMWIsIDB4ZmRlMTA3YzEsIDB4ZTBlNzRiNzIsIDB4NGJmZjgwNzgsIDB4OGUyMWY3MWEsIDB4NGNhODhmZmIsCisJMHgzMjMxNmU4MSwgMHgzMTcyYzBhYiwgMHg2ZmZhNDY1NiwgMHhiM2Y2NDY2OSwgMHg5NzVlMDM0MSwgMHg5MTdlMDAwZCwKKwkweGE2NWRlYmJhLCAweDFmOTE1MjA2LCAweDQxMTU4MjViLCAweDMwMjVjZmU0LCAweDhjN2ViMDQxLCAweGUxMTU2NDFkLAorCTB4ZmVmMDg1ZTAsIDB4YzQ1NGJjODAsIDB4ZmQwMzU1YmYsIDB4ODM1ZjZjNjEsIDB4ZmI1Mjg3ZjYsIDB4NWI3ZWQ4YWQsCisJMHgwNzViZWQyZiwgMHhiN2RhOThlNiwgMHhkYTk4MTdhNSwgMHgzZWQwNjliNywgMHg3MDY3NDdjOCwgMHhmMDFmNjhiZSwKKwkweDkzYjE4NjM3LCAweDZmYjUzZTZjLCAweGY2YTAyZjRkLCAweGMwYWM2YTk3LCAweDU3NGM3ZWQ0LCAweGJiNjBkZmZiLAorCTB4NDlmYjYzZGYsIDB4NzAzZmM2NTEsIDB4ZTlmYzc5OGMsIDB4NmJmMWU2NDUsIDB4NDE2Y2ZjN2MsIDB4NDMxZmI0NTAsCisJMHgyMGE0OTdlMywgMHgxMTdhN2YxZiwgMHhkNzk1YmYxZiwgMHhhYmJlZDVkYiwgMHgwNDlhZmYwYiwgMHg1ZWE0M2FlZCwKKwkweGFjNjgzZmM2LCAweDk0MTdmYzc5LCAweGU1NmZjNzk4LCAweDJjMTdiYmVkLCAweGE4M2JlZDEzLCAweDE5Njk3OGZkLAorCTB4MjUwNWZmMWYsIDB4MGQ2NmJlZDQsIDB4YjQ4ZjkxNzgsIDB4MjExNTMxZmUsIDB4NDBkMzRmOWMsIDB4MDc0ODUyODAsCisJMHg5MjFkMjhmYSwgMHg5M2U4MThjMCwgMHg4NDgxYjJkZiwgMHgzODYyMDc4NywgMHgwMzEzN2RkZiwgMHhkNmU4ZTZmYywKKwkweDEyMDQyY2E3LCAweDk5NzBmMzA4LCAweDhkZTJlOWUwLCAweDNmM2UzNGUzLCAweDlmNWU2OTA3LCAweGFiM2FiYTJkLAorCTB4OGNmOWE2NTEsIDB4MmU4NmI0YWQsIDB4MzdiNmZlODIsIDB4Njc4NDQxY2EsIDB4MjQzMmJjYWQsIDB4NzYwYTdjZDMsCisJMHhiMGE3YmUwMiwgMHhmM2ZmM2UzMCwgMHg4Y2ViNjFhYSwgMHg2NzRjOGFlMywgMHgyZGFkYWI1NywgMHhkMmVhYjkwNiwKKwkweDkwZDllM2VmLCAweDA1NWZlODBhLCAweDZlYThjMTMyLCAweDM0ZjQxNWI4LCAweDM5ZmMzZDAzLCAweDBmNGM2M2U4LAorCTB4MzkyZWRjYWIsIDB4NWQ5YzdhMDQsIDB4MDU5Yjk0NmMsIDB4YjIwOTJlZGMsIDB4ZmY0MDg3ZjcsIDB4ZGZmYTIyN2YsCisJMHhiNzdjNzBhYSwgMHg4ODQyOTNjZSwgMHhjYzU2NmZmZiwgMHhjZDlmNTBkMSwgMHhhNDA1OGVhZSwgMHg1Y2EzZjc3NywKKwkweGJiNzNhOWQwLCAweDE0ZjY0NDM1LCAweDlmODgwNzRjLCAweDE5MTQ0OWRiLCAweDFiYWVkM2ZiLCAweDMwNWM5NGRlLAorCTB4MzFmNGQ2M2YsIDB4MGIzNzc3YmQsIDB4ZjI4NTRlMmQsIDB4MGVlNzk3MzMsIDB4ZWZmOGMzNzAsIDB4MjExZDY2OWEsCisJMHg3Y2M0ZmNlMywgMHhjNzI0MmRmZCwgMHg4NzI1YmZhYywgMHgyYjBkNjliMSwgMHhkYzAwZmVkNCwgMHhiY2ZkNGQzZSwKKwkweDFkZmVmMGM1LCAweDU3N2MzMzAxLCAweDU3NmUxOTgxLCAweGVkMDVhYTQzLCAweGFkODk0Mjk5LCAweGE5ZWY3YTg1LAorCTB4ZWRlYmU3MzAsIDB4MzgxMjk2NGMsIDB4M2Y3YjQ1NWQsIDB4ODVmNDFjMDEsIDB4M2E2MGY3NDcsIDB4ODliYjFmMDIsCisJMHhmY2RkZDNhZSwgMHhlNTNmYmQ1ZCwgMHg0YzJjYTkwZiwgMHgxMjRiNzFmMywgMHg1MTI3ZmEyMywgMHg4ZjliODBiOSwKKwkweGQzYmZiMjNiLCAweDBmY2Y5YjU1LCAweGEwZmU5OWZkLCAweGVjOGNmODRjLCAweDU4YWVjYjdmLCAweGQ5ZWMwNTlmLAorCTB4NTUyZjlhOTYsIDB4ZjFjOGMxNjQsIDB4YzY3ZmY2NDQsIDB4YjhmMWM4ZmMsIDB4NzIxZjljMzUsIDB4MzljZjkxODMsCisJMHg1M2YyNDQ5ZiwgMHg1ZmI4ZTM3OSwgMHg1M2YwMzIxZSwgMHhiZmI1ZmQ2OSwgMHhhZjc4NjQzYywgMHgxMzI2ZWViOCwKKwkweGMzYmExODVjLCAweDI2YmYzZTU0LCAweGJiM2Y5NGQ3LCAweDNmOTRkMGJhLCAweDEzMWNkOTczLCAweGQwN2MxYjljLAorCTB4ZmNjNjdlNTQsIDB4N2JmY2E2MDUsIDB4ZTUzMTFlMmEsIDB4YzJiMDU1ZGYsIDB4NzgxMWRmMDQsIDB4ZjZmZTU0Y2EsCisJMHhmOTRkNmI2OSwgMHhkYzk3NWQ5NiwgMHhmNTU0NzI4OCwgMHhkZTcwY2M4MSwgMHhmYWQxZGFmOCwgMHhiZjM3YjQ3MywKKwkweGE0NWUyODc2LCAweDU3YjAxMWM3LCAweDgxOGUwZTUwLCAweDdiNjk4MmJkLCAweGFiYjI0OGUzLCAweDMxZTYwZjQxLAorCTB4NGI1NmExMzAsIDB4YzZjYjgzZmIsIDB4YTQ2NjVlYTIsIDB4ZWZkMjQzM2YsIDB4YzYzNGMxODMsIDB4ODQzYzk3OWUsCisJMHg2MzQ2YjkzZiwgMHg4OTYxNjA2MSwgMHg3MWYxNzQyNSwgMHg2ZmM4NmNhNywgMHgwZDdlNDczOSwgMHg5ZWM4ZmEwOCwKKwkweGY0NGI3MmY5LCAweDcyZWJlNWU3LCAweGQzYmQ0MDJmLCAweDVmODAzZTliLCAweDNhZTc5YzdmLCAweDk5MTAzZDg0LAorCTB4YmYzMTIyNWYsIDB4N2ViZWI5ZjEsIDB4N2FlMjVjYmEsIDB4NTNhYzQ0YmUsIDB4M2JlYTVlNGEsIDB4MGUxMGI5OWUsCisJMHg1YjM4YWUwZiwgMHg1NDgwZjU3YiwgMHhmZDY4OTNkNCwgMHg4MDNmMjEyNywgMHg1MWU4MTgxNCwgMHgyNGM4Mzc1YywKKwkweDY1YmI2ZGRmLCAweGVhMTk1N2VhLCAweDk5YWJkMDA0LCAweDQyNTdiZmNjLCAweDliZGUxMzNkLCAweGVjMzBjYjdlLAorCTB4ZDQ3NWVmODcsIDB4ODkzMWFjZmIsIDB4Y2FiNmY1ZTYsIDB4YTQzY2JmYzksIDB4OTRmYzdkMjIsIDB4NDY5Y2E5MWUsCisJMHg4MDY1NmI2OSwgMHgwNTk1NDNkMiwgMHg1OTVlN2U5NCwgMHhlNTRiNjk0MSwgMHg1NDBmNGE3YywgMHg2M2ZkMjkwNiwKKwkweDNmNGEzMmU1LCAweGY0YTZhY2FkLCAweDRhMWFjYWUzLCAweDUxMGNhYzNmLCAweGEzZTk1ZWRhLCAweDJlODc5NzU0LAorCTB4ZjYxN2ViZmQsIDB4YzBiNzU4YjAsIDB4OGIwZjZlMDMsIDB4YjI4MjJjYjEsIDB4ZGVlNzI0Y2QsIDB4NTNmMzk0NTQsCisJMHhhMzA2NmY4ZSwgMHg2M2VhN2ZiZCwgMHhkZThjYTI2MCwgMHg2ZmM5MTVmMSwgMHg0N2QxZDNiZCwgMHgwODVlNGFmNiwKKwkweGNmNGZhNzk4LCAweGE3MGM3YjdjLCAweDI2YzJkZDkzLCAweDhmNDdkMDMzLCAweGY3OWNmNDVjLCAweDJiMDRhMWRlLAorCTB4YTljMDMyYzgsIDB4NTE5YzliZGUsIDB4MGZiOTg1ZWEsIDB4M2EyZTc1ZTksIDB4NzBlNzVmMzEsIDB4M2ViNzY3NWMsCisJMHhhYzZjOTdmZCwgMHgyMDY5NzJmNywgMHhjYWY3ODc5ZiwgMHhmMGIzMGYzNCwgMHhkN2E0NWViMywgMHhmNDliYzUwZiwKKwkweDViZDI5ZmRhLCAweDJlODlkY2EwLCAweDMzYTczNWZjLCAweDZlNDhlNzQ4LCAweDgzNTRmZmFhLCAweGM3ODgyOTk1LAorCTB4MmUxMGQ4YTYsIDB4N2JlZDRmOGQsIDB4MzhmMjg1ZDYsIDB4M2VhZTU1MzcsIDB4N2M3N2IyMzQsIDB4NTQ2N2Q2OTUsCisJMHgyOWUzMGMzYiwgMHhhN2MzMzQ2ZiwgMHhkY2M5YTVhYSwgMHhiYjg5ZTA3ZiwgMHg5NWYyMTg3NSwgMHg0NWQwZmFiYiwKKwkweDRhNTRmZjQ4LCAweGE2ZTY3YWY1LCAweGIxY2VkNDZhLCAweDdjNzE0MWJhLCAweDc5ZjEwZWZlLCAweGYxM2M2MzcwLAorCTB4YTkzYmFjMmIsIDB4M2ZiYjNmZmMsIDB4ZjdhM2Q1YmQsIDB4ZjYwNmIxODcsIDB4MDFmNTBkODUsIDB4ZjczYTBkZTQsCisJMHhkZDA3YThmYSwgMHgzZjM0YWY5NSwgMHhmZDQ5YWJkMiwgMHgxODg1ZWQwNiwgMHgyMDY2NzdmOCwgMHhhYzEwYWJkNiwKKwkweDJmNWU1YmQ3LCAweGUzOTdhZDA3LCAweGY2YTY4ZGYzLCAweGJlOGYzZGUwLCAweDdhZjdjN2E2LCAweGI1ODU1YmU3LAorCTB4N2QwNGUzZWEsIDB4ZTdmMGE1NzUsIDB4YWJkOWQ3MTQsIDB4YmM0YWYzY2QsIDB4ZWM2ZjJlMDksIDB4Njc5YTZkNWIsCisJMHg3ZjkwMGZmMCwgMHhjODI5MjE1NiwgMHg5YjgyMjUzZiwgMHgzMmM3MTQzYSwgMHg2YTk3ZmEwOSwgMHhlNWJkNTBmMSwKKwkweDZhNTcyZjEyLCAweDFlMDJkMTZiLCAweGI0NjZjNzYyLCAweGQxY2RlZTMzLCAweGZiNzNjZmY5LCAweDFmZGY0MDFmLAorCTB4MWVjYWFkZmQsIDB4ZDdlMTdjYzUsIDB4YjA2Y2Y1NTEsIDB4ZTdlODJkNmYsIDB4MGRiZGQwMTEsIDB4ZWY1MDUzYzUsCisJMHgzZDc2ZGQxZCwgMHg5OGIzMjdkOSwgMHhhNDhiODVkZiwgMHg4ZDlkNTYwMiwgMHg2NjA5Y2U3NiwgMHg3ZmZjOGM5OSwKKwkweDM1ZGVmZDgyLCAweGM4ZGViMGQyLCAweDlmZDQ2OGI3LCAweGYzY2NjYjk5LCAweDI2NjdkODJjLCAweDBjYzZiZjM4LAorCTB4OTM5YmIxZTcsIDB4NTZmM2RmOTEsIDB4YTBiNzMwYWEsIDB4NmZmMzlhNWMsIDB4YmU0OWI4YjcsIDB4MTJjNTU5ZjIsCisJMHgzZjA4ZWY1YSwgMHhhNjZlYmRkOCwgMHgyZmI5MDdmNCwgMHhlYzk5ZTU3ZCwgMHg4N2U4YTFkYywgMHhmNzViZmFlMCwKKwkweDcwMjYxNDBmLCAweDMxMjhhNTNiLCAweGZmMjBmOWE0LCAweDNmOTE4NjhiLCAweGZiZTE4MmI5LCAweGE3YTgyNWExLAorCTB4NWRlNjRlODIsIDB4ZWZkMjdhY2YsIDB4YjIzZmY2ODcsIDB4ZDI3Y2ZhYmYsIDB4ZmEyMTRmYzMsIDB4YmU0OWQ3MjEsCisJMHhkYTc1OTQ1MCwgMHhkODQ5MTZjMywgMHg5NzRhNDE1YiwgMHg3NmViNzE4YiwgMHg1YzA0NGQ2YiwgMHg0N2Q3MDExYiwKKwkweGJmMzc3ZmMwLCAweGJmMTMzMjI1LCAweDM1MDI1YWE1LCAweDVmY2UyNDk2LCAweDRhNDgyZjY4LCAweDQ3ZjgxNmE3LAorCTB4NTFlZDRmZWEsIDB4YjUzZmVkN2YsIDB4M2ZhODM0ZmUsIDB4ZmQ3ZjU0ZGIsIDB4MGJmZWI1M2YsIDB4MjliZmY0N2IsCisJMHhhZmE1ZmQ1YSwgMHgwNDE2ZGE2YywgMHg3OWI0NTM3ZCwgMHgzY2MxOGI5NSwgMHg0ZWE5NTQ3NCwgMHg0YmRkMDJmNiwKKwkweDIxNzYyZmQ2LCAweDgyNTExYzFmLCAweGEzZTdlNDJlLCAweDM0NzI3OTIxLCAweDIyZDJmODdlLCAweGU3Y2NhMmZjLAorCTB4ODU1ZDcwOTAsIDB4YzdmZDQyN2YsIDB4NTRkOWY4NWUsIDB4NTliZWU3YjQsIDB4YmQ2OWJhYWYsIDB4NWIwZDY3NTQsCisJMHgxYWNiNGU0MSwgMHhkZmEwYTcwYSwgMHgxYzgzZTAxNywgMHg0NjUyN2E1ZSwgMHg5ZmNjZDFiOCwgMHg0YWFmY2Y0NSwKKwkweDcwMWVmZjQ2LCAweDg0NGY1ODhhLCAweGFiMmE1ZWM5LCAweDljMjRmM2ZkLCAweDI3NTljYTg3LCAweDdiZTQ1OWM5LAorCTB4MDRlOWZlZDgsIDB4NWFiOThmZDIsIDB4ZTg3Y2NmNWMsIDB4ZTVmOWQ5MjcsIDB4MGRlNTJmMDIsIDB4YmIyOTNiM2YsCisJMHgzMGY2YmQzMCwgMHg0Y2IwMTNlYSwgMHg3YzhmMGVjOCwgMHg0MWQ4NDBhZiwgMHhjNGNlMmM4NywgMHhiMTQyNTg1NiwKKwkweGExMWZiMTFmLCAweGMyZjFkNGRlLCAweGFhMGVkYzQyLCAweGYwZTRmMGRhLCAweGI2YWZkMDgzLCAweDI0YmFkZmRhLAorCTB4Nzk3NGJlMDMsIDB4ZjMzZjU1M2IsIDB4N2E3YWFmZDcsIDB4NjJlZGNiZDcsIDB4NWVmZGQ3YmQsIDB4MzRmM2RlODgsCisJMHg4OWFkZmIwYSwgMHhkODZhMjVhNywgMHhjOTcxZjY4NSwgMHg4NDFiZDU1YSwgMHg5ZTliMjVjNywgMHg1YzY5ZWU3ZCwKKwkweGY1NjI3ZWFmLCAweDE3ZjUwNDVlLCAweGMzZTM3YTZmLCAweDZmMTcwMDMxLCAweGYwYTcxMzUxLCAweGU0YTQzODYxLAorCTB4YzM5NGZhNmUsIDB4YmEyM2Y5YmYsIDB4ZjJmNDUxZTksIDB4MTg2NzlhMWIsIDB4NDI3MGZlN2YsIDB4Yjc4YTVkMzcsCisJMHhiMGQ4ZDZlYywgMHg1MDk4Zjg5ZSwgMHg3MTZiNWJiZiwgMHhmZDRmYTE0NCwgMHg2NzY4NDljMSwgMHg1NmY4NmQ1NSwKKwkweGQxZTU3NWMzLCAweGM5NGIxMjVkLCAweGI1Y2Y4Mjg4LCAweDgwYmQ5MDZmLCAweDBhN2EyMjc4LCAweDJmZDE3NTdhLAorCTB4ZDAzOTdjYTIsIDB4MjQ3YWY1MDUsIDB4YmRjYjIyYmQsIDB4MTQ2NWZhODEsIDB4OTNmZDE3YWYsIDB4YmUyZmRmYzAsCisJMHg0ZmVjN2U4YSwgMHg0M2M0NWVhZCwgMHhiOWY3OGJjMSwgMHg5NTg3M2M3MCwgMHhjZmU3Y2UwYSwgMHgzZjQ2NGUyYywKKwkweDRjMWE4MTdkLCAweDlmY2E1Mzc2LCAweDlmYjlhYzE3LCAweGJkZmYyZmY4LCAweGZhZjk5M2ZiLCAweDQyZDdkN2QwLAorCTB4MmZiMDU1NzMsIDB4ZWFmNjczOGUsIDB4Nzk5YzY4ZGIsIDB4NTg3YzQwMmMsIDB4MGZlYzhjZjAsIDB4YzJiNWZhNDEsCisJMHgyMjg5NmYyNiwgMHg5NzMyYzUyNywgMHg4MGViYzM5MywgMHhjM2NlMzBiOCwgMHhiZjQxNGViOCwgMHhkMGU1ZWZlZSwKKwkweGNjOGZmMjdhLCAweGVlMGZhODYxLCAweDZjZjFmZGQ3LCAweDhiNWZjMTJlLCAweGIyNzE4NGZkLCAweGRhZTc1ZjQ1LAorCTB4YmI1YmZjNGMsIDB4NzRlOTE5YjQsIDB4MDUyZjgwNmMsIDB4NGNlNTZhZmQsIDB4NDg3YzBhMDksIDB4Zjk1ZWEwNjcsCisJMHgzODUzYWJiZCwgMHhjOTQ3OTg5ZCwgMHg1ZDgxZWYxNiwgMHg2MzlmMDEzMCwgMHg2N2Q1NjZmOSwgMHg4ZjdhNmUxZiwKKwkweDZlZThjOTlkLCAweDFmNjg5ZTdmLCAweGYzODMxZGZhLCAweDU2NjRlMWY5LCAweDdjNjUxZjUwLCAweDA3YWViMjM1LAorCTB4ZjAzNzVlNjAsIDB4YjlkZTQxOTksIDB4YzIzZWQ3ZmMsIDB4ZmY5NzVkZTUsIDB4MzE5MzRkZDAsIDB4YjlmN2FiZmYsCisJMHgzODdiZTExYywgMHhjMmJmNDI1ZiwgMHhmYmJmOTQyOSwgMHg4M2Y0ODk1NiwgMHhjOWEzODU5NSwgMHhlNDJhYWQ3OSwKKwkweGM5MWY5Y2RjLCAweDQ1N2ZkMDJmLCAweDBkZjAzMzhhLCAweDc0NDA5M2I2LCAweGRlNWFiZjIwLCAweGE4ZGY3ODRhLAorCTB4NTc1ZGIxNTcsIDB4Mzk3NTdhY2YsIDB4MjBmYTE3Y2UsIDB4NzA3ZDA2NGYsIDB4NjAzZWI3NTksIDB4ZTgxZWI5YWIsCisJMHhmMjBhZWVkZCwgMHg3YTFhOWJmNSwgMHg1Zjk0NjllZSwgMHgwN2EwZDc5MCwgMHhlM2Y1NTdlNSwgMHhkYzZmOGZmOCwKKwkweDIwOWRlMWZiLCAweDc1ZWJjN2I3LCAweGQ1ZWIzNWI5LCAweDc4MmRiOTQ4LCAweDdjODRiZDY5LCAweGM3YjcyOTFhLAorCTB4ODk0YWMwMGIsIDB4M2NmMGI3MjYsIDB4YjQxNmRjYWEsIDB4YWFmNDRiZmMsIDB4NjVjN2M3OGUsIDB4ZjVkNTVlYjMsCisJMHg4Y2Y4NmY2NCwgMHhjYTk3OTNkNCwgMHgxMjdhYTg5ZSwgMHhlY2IzZWY3ZSwgMHhmM2E4ZmM5ZSwgMHg0NTdmY2VhMSwKKwkweDgwYmQyOWJmLCAweDlmM2EwOWZjLCAweGM1ZDg3Y2VhLCAweGY2MWYzYWE3LCAweGYwOThjZmYwLCAweDNiN2Y5OTE4LAorCTB4YzEwYzA0ZjIsIDB4N2YyNTVkYmYsIDB4ZGYxMzQ5NjIsIDB4ZGVmNzgzOGYsIDB4Zjg0NTlmZWMsIDB4YzczNGQxZjIsCisJMHg5ZmVjZGZhYSwgMHgxMTQzODQ2OCwgMHg3OTQ0N2Q3MCwgMHg4ZmVjMDQ1ZiwgMHg4MDg4MWYyOCwgMHg0YmU1NGMyYiwKKwkweDhjNmFmNzFhLCAweDJhNmMyMGY4LCAweDJiZmY5ZDY3LCAweDc1OTQ0NWY2LCAweDk1MGYzZWFjLCAweDgyZDQ5YzM3LAorCTB4OWQ2OTFmYzgsIDB4NzUzZmVhMWEsIDB4ZThhODk4MjEsIDB4OTMyOWRjM2YsIDB4NzAwM2IwZmYsIDB4ZTlkYTA0YmMsCisJMHgwYTExOThkOCwgMHg2YzU5MWU4MiwgMHgwZWNkZWJlNywgMHgwMTJiYTc3NywgMHgxY2YxYzVkMiwgMHg5NmQyNGNlZSwKKwkweDlmZDQxZWEwLCAweDFmYjlkYTc3LCAweGU5ZGZjM2E0LCAweDMxZjgzNzhhLCAweGE0YzkzNjBlLCAweDZjNDI1YmM3LAorCTB4MDkzZjM0NzIsIDB4ZGY4NDM0Y2MsIDB4M2U1YmQ2MTYsIDB4ZTA3NjhmZjcsIDB4ODdiNjMzYmUsIDB4Y2Y0MGNlZmIsCisJMHhmYTQ3NjVhYiwgMHg1NmJmNWM3YywgMHgyMzYwNWVjYiwgMHhlZGMxNmIzNiwgMHg3N2ExNzQyZSwgMHg3MWJhMGQzNCwKKwkweGZkOWYzYzFhLCAweDZkYjdjY2I2LCAweGFmYTUzZTgyLCAweDg0NzFkZDYxLCAweDJiMTg5ZjA1LCAweDcyZGU3ZWUxLAorCTB4NGQ5OTlmZTIsIDB4NmIzMjFkN2MsIDB4Mjg3OTc0NzksIDB4MzllNWVmMTIsIDB4NzdhODY5ZTYsIDB4YjlmMGZkNjEsCisJMHhkN2FjMGZkMSwgMHhlMjNhYjA1MywgMHg0MmY1ZDM3OSwgMHgzZDY5YWE2ZSwgMHhjZTZiNTQ1OCwgMHhkNGY1ODgwZiwKKwkweGM5ZmViYTM3LCAweDdmYTQ5OTY0LCAweGViODRhMTcwLCAweGFmYjdhMTdhLCAweDM4ZGU4Nzk2LCAweGIxZDNlODBkLAorCTB4YmZiODY2NGYsIDB4MjY0OWFhN2EsIDB4YzhkYTljZmEsIDB4MzA1OTUzZjcsIDB4OGNhZmU0ODksIDB4ZDRiZTkyNzUsCisJMHhmMjg2ZDZmMSwgMHg3YWVmNzE3NSwgMHg5ZmViNmRhYywgMHgzZTQyMWZiMiwgMHhlMTg3ZjZkYSwgMHg2ZGI0ODJiZiwKKwkweDc3ODMyN2RiLCAweDQ3Y2FmYzIwLCAweDNkNjA3ZmU5LCAweDY1ZDg0ZmNiLCAweGM3NzMzZjI3LCAweDdmZjEyNzJlLAorCTB4YTVkZmNlYzcsIDB4NzZmMDg0M2YsIDB4M2FmN2Y5MmIsIDB4MWMzYjdkNzYsIDB4YTE2M2IxZjksIDB4NjBmNTAwYjUsCisJMHg3ZWJlMDBjNywgMHhlZGY5ZGFhYSwgMHg3ZjlhMTZmMCwgMHgzMzFkMTExNywgMHg3ZGU4OGQxNCwgMHgwNzJmZTlhYSwKKwkweDU0ZTAyZTMwLCAweGVkMGE4YzEzLCAweDI0YjE1ZDhiLCAweGRhYWZlNTVmLCAweGIxZDExZmM5LCAweDgwZWNkYmYzLAorCTB4OWUzNzlmZTMsIDB4ZDNmZmIxMzIsIDB4NWVkMzY0ZTEsIDB4NzNjNWZlYzIsIDB4OGVmOTc5YmYsIDB4YzAyZWNmZDEsCisJMHhkZDg2ZjFmZCwgMHg5ZmM4NGNkYSwgMHg4NzVmZGFmMCwgMHg3OGVkN2VhMywgMHhlZDRkZGI4OSwgMHhkYzFhY2I2YSwKKwkweDQ4YmExOGRmLCAweGJkMDJhODVlLCAweGZhYzg1MWRhLCAweGQxNmZiNjMxLCAweDQ3MjhmMWM0LCAweDU3ZjJmMTNkLAorCTB4MmY5Y2IzZjIsIDB4N2MyODI2M2UsIDB4OGZlZmZiM2QsIDB4ZjVjN2M5MGYsIDB4OTM2NDMzOWYsIDB4MWRkZmRjNzAsCisJMHg4OWVhMDNmOCwgMHg0YmUyNTY1ZCwgMHhlYmM3YmM3ZCwgMHg3MzNkOTAxNywgMHhmYmRmNzFhZSwgMHg1MmRjNmUzZiwKKwkweGJkYzY3Y2Y4LCAweGZmOWNkZmUwLCAweGZhODc4YWFkLCAweDNkMDcyOTE3LCAweDAzZTc3Y2Y5LCAweDdhNzI2ZjA0LAorCTB4YzllN2JmYTksIDB4YTdmZjZiZWYsIDB4YTAyNWZkZDEsIDB4ZTNkY2ViYmIsIDB4NGIzZmZmMGUsIDB4MGJhN2I3ZjcsCisJMHgzZTMxYmJiYSwgMHhiZmI1ZmNhMCwgMHhhODdlZmY1MiwgMHgzN2Y5NmI5ZSwgMHhlMzZmN2JhNywgMHhiN2ZkZWRkNywKKwkweDMzZjc5ZTJjLCAweDU2NjRmY2ExLCAweGUyYzM0MGVkLCAweDZmM2RkMmRhLCAweDViZWU0MjY3LCAweGIxZTM3YjY5LAorCTB4ZjYyM2UzYmYsIDB4NWUzNGY0N2IsIDB4ZjFiNmZlZTUsIDB4ZWQwM2VmYjgsIDB4YWM0OTc4YjIsIDB4YWIzYWY5MTcsCisJMHhmYTJmYjBiZiwgMHgzYjIzY2JjZiwgMHg2M2RhN2ZhNCwgMHhjNTMwNGY2NCwgMHgyYmY3MTJiMywgMHhlOTlmNGFkZiwKKwkweDM2MGJkOGE1LCAweGMyMDBlM2UyLCAweDZjMDUyYmVlLCAweDRhZmU2ZjVlLCAweDRhZGMzZTYyLCAweGZkN2U5ZmVkLAorCTB4ZDM3M2I0M2UsIDB4ODNiMjY0ZDIsIDB4ZjdmYjI1MjEsIDB4ZmU2NGQ3NzUsIDB4YWQzMzQ0YmMsIDB4OThmNWFlODcsCisJMHgxMjkzNDdkNywgMHg4OWE4ZWJjZCwgMHgxOWFiYmVhMiwgMHgwZWQ1ZmZlZiwgMHgzYzAyMTQyOSwgMHhjYmYwMWY4YywKKwkweDhlYTdmNDQ0LCAweDEyNjU0OGJmLCAweDYwNTg5M2MwLCAweDI2M2JhZTExLCAweDlkZjVjYzNhLCAweDgzNmM3ZGMwLAorCTB4YzVlZmYxYmYsIDB4M2MyZWM0ZTMsIDB4NDdlOTVjMGUsIDB4Yzk5MDBlM2MsIDB4M2M0ZTdhYWYsIDB4NmYwOWJmNjIsCisJMHhjNzhjMjE5OSwgMHhlMzk3OGE2MSwgMHg0YmQ0YTEzMSwgMHgxZWIxNmE3ZSwgMHgxZGEyNmVjNywgMHgzNDk2MzhhMywKKwkweGI4MmIzY2EzLCAweGEwNzhlNjllLCAweDllYmViODc1LCAweDRjZGYwZGVlLCAweGQxMTVjZmFjLCAweDI1N2Y4ZWE0LAorCTB4Y2RkOWY2NGQsIDB4NWNmYWQxZjUsIDB4YTUwZmNiYTcsIDB4N2ZjNzRlODcsIDB4YWFjOTJlOTQsIDB4OGU2OTJlOTksCisJMHhlYmNhMGEzOSwgMHg4YzNmNWM2NCwgMHgxYzk5ZjJjNCwgMHhiNDJhMGI0ZSwgMHgwZmQ2MjRkZiwgMHgyOGU2NzhkNywKKwkweGE0Mjc4MDQxLCAweGFmNDgyYTY1LCAweDIyZjZkYjdjLCAweDc5YjUxZjhjLCAweGM1YzdlYTI1LCAweDFmOWExNjZkLAorCTB4ZTExMjU5NmMsIDB4NDI4ZDQ4N2QsIDB4ZjcxNjdiZjAsIDB4ZDRmN2E0MjgsIDB4ZmUzOTVlMmIsIDB4YmIzZjQzMjAsCisJMHhiYTA2ZTM0ZiwgMHg3Yzk3ZWY5ZiwgMHhkOGNjZTY3ZiwgMHhmMGM3ZjQ2YywgMHhkZTdmYzYxZiwgMHg1OWI3ZWIwMCwKKwkweDA2Mzg1OWFiLCAweDYxNWIzNGYwLCAweGY0MDRiOGMxLCAweDczZWM0YjkzLCAweDBjZGM5ZjkzLCAweGU0YWFlZmUzLAorCTB4NTVjZTdhZWUsIDB4ZjJiZDM3YmUsIDB4MDE1ZjRlY2YsIDB4NDVmOWY2M2QsIDB4OTRjNzZkOGMsIDB4YzYyODhhNmYsCisJMHg5YThmZjZmNSwgMHhmN2NhYmUzOCwgMHgxZTQwZDBiMywgMHgwZGZiMjE4NywgMHhhYjJmOGFmYiwgMHhjYWYzM2ZkYywKKwkweDg5MWE1ZjFmLCAweDFkNzFkY2ViLCAweDdlYjhlMzQzLCAweGE5NzFlMmNkLCAweDhhNzBiZDYyLCAweDBlYmNlMjc5LAorCTB4ZTI4M2FmZDQsIDB4OWY3NGJmNjgsIDB4ZTcxNjhjZWMsIDB4YmZhYzQxYjgsIDB4MjhmMTgzN2YsIDB4YjJkNDc2OTAsCisJMHg1N2Q3MTk2YSwgMHhiZWZjOTNhYywgMHg1YjFiNWFjMSwgMHg2NjFlMjUxZiwgMHg3ZTExNmE4ZCwgMHhmODM3NDEyMiwKKwkweDdmYjhkOWM5LCAweDBkOWZkYmMzLCAweGU5MTljNmFmLCAweGE4ZTUzNmQ2LCAweDFkMjdiYzMyLCAweDYxYjlmN2YwLAorCTB4YzUxZmVhZmYsIDB4MTFmN2FlMmYsIDB4MmRlYzFiYmYsIDB4ZjQ1MWZjOTMsIDB4ZGZjMGJkNDcsIDB4OTFkZjNkZDQsCisJMHhhNmQyZjQ5ZiwgMHhkZmU0MTZiNSwgMHhhNjJkNmI0YiwgMHg1NTNhZDhmZCwgMHhiMDQ2MzFmOCwgMHhhOWFmZDgxMSwKKwkweDJjY2VlYzdiLCAweGQ5M2VjYmE0LCAweGU1YTVmMThiLCAweDQwYjUyNzRkLCAweDQ4YzQ3ZDk0LCAweGU4ZmQ2MjdjLAorCTB4ZGQ1NTZmN2YsIDB4YjUwZWVlZDQsIDB4NzVlMjI2N2UsIDB4YzMxYjA5YzcsIDB4YWQ3NmY1NzUsIDB4M2Y1YTM4YmEsCisJMHg3ZWYyYjRlZiwgMHhmN2Y1NjZjZSwgMHhmN2Y4Y2YwZCwgMHgwZWI4ZWZjMywgMHhhZTNjNzg0NywgMHhmMDk5NmIzZiwKKwkweDFmZjI0NDgzLCAweDU1M2UzZTIzLCAweGJmMzg0MmM3LCAweGY1MTU3YWUyLCAweDhjOGRhOWMyLCAweGM5NDA3N2U2LAorCTB4MDZmZWI4NjMsIDB4ZDFiMWZmNzksIDB4ZTM3MTczYWYsIDB4NWRhMGRmOTYsIDB4YjkyNGQ2NTAsIDB4NGNhMjRiNzEsCisJMHg4ZmQwZDE2OSwgMHgyZjE4ZGU1YiwgMHhlOTljM2NlMywgMHhkZDZmZTNkMSwgMHhjODM1NmVjMywgMHgxMGFhYWI0NSwKKwkweGQ5OGVmNmJlLCAweGZiYjYxNzcxLCAweGQwYzY5YjY1LCAweGRlYmRmMTRlLCAweGZjNzljMmU5LCAweDI0OTFhNmNiLAorCTB4ZWI4ZGJkMDcsIDB4MzQ1NjRhZTUsIDB4ODQxY2UzMTEsIDB4ODdlNDhjM2UsIDB4NGM2MzFiYTEsIDB4YTA3MjE1ZjAsCisJMHg1NGQ3Y2ExZiwgMHg2ZjNjY2I2YiwgMHhkMzJkZmExNCwgMHg3ODhmYjEyNCwgMHhmNDJkZmE5ZSwgMHg3YjdlOTlmZiwKKwkweDAxNmZkNzVmLCAweDIzOTA2ZmQ5LCAweDQxOWJjMGJmLCAweGQzNDRhNWJmLCAweDRmMjU3MzZmLCAweGVlN2RlMjBhLAorCTB4NDgyOTQxY2UsIDB4YWI2ZmI5ZDcsIDB4ZGJmNGQxNDksIDB4MmZiZTRhYTYsIDB4NGRjNDU5YmEsIDB4N2U4MDM0NzcsCisJMHhkZmEwZGNiYiwgMHg0NWJmNDAxYSwgMHhhMzE5MWY4OSwgMHg3M2ZhN2VlOSwgMHhiZmQwYjdlOCwgMHhhMTM2ZmU0NiwKKwkweGRlMzI4YjdlLCAweDc0ZmUwNDFiLCAweGU5YmMzNmZkLCAweGUxYjdlOTIwLCAweDNjNTMxNjBkLCAweGY4NGQ0NGYwLAorCTB4NmZkNTdhOWIsIDB4NjhhZGQyNTIsIDB4YmQ1M2VmMWYsIDB4NjdmODUxYjEsIDB4MzdjN2IwOTMsIDB4NmM0NjM4OGIsCisJMHg5NTVjZjUwNywgMHg1Y2Y0YzNmNiwgMHhiOWVhZjlkZSwgMHg3NTllMTE3ZiwgMHgyYjc3MzczZCwgMHg5ZWU4YjhhMywKKwkweGRjZjVjODdjLCAweGU3YTBlZGRjLCAweGFlNDdlNDI0LCAweDY0ZWVlNmU3LCAweGExMTcyZmRjLCAweGQwZjQ4NmRmLAorCTB4OTdjYThjNmYsIDB4ZTVmYmY5ODUsIDB4ZGU0ZjE5OGQsIDB4ZjA4ZGY1MGQsIDB4OTQxYjVlYTksIDB4ZWZhZGQxMWYsCisJMHg1ZGY1MTk0NiwgMHhiZThiZDY5NSwgMHhmYTdlNzdkYiwgMHg3N2QwYWI2ZSwgMHhhMjA2YzdhMCwgMHgwZmU0OGQ3ZSwKKwkweGRlMzk5MzZmLCAweGMzZThjNzdjLCAweDc5NDY1ZjFiLCAweGZiNGM5ZGY5LCAweGY4NTllZjkyLCAweGEzM2JkMWZlLAorCTB4N2YyMTY3MGYsIDB4ZjNmYTJhN2QsIDB4ZDllOWM2YTIsIDB4ZmFhNDE5NWUsIDB4YzdjZWJjMjcsIDB4ZmI5MWJhNTcsCisJMHhiODFhY2JjYiwgMHgyYjU2NTg3ZCwgMHhlN2YwM2M4NywgMHg2OWRmMzFhNCwgMHg5ZGMyZmZkOCwgMHhmODAxNGIxMiwKKwkweDEzZjU2YjI2LCAweDlmZWJiNDBlLCAweDFmNTg5OTU3LCAweGYwMzRjOTRkLCAweDYyOWNhY2MzLCAweGQ5NTdmYmYyLAorCTB4ZmNmMGViNWQsIDB4ZDk4NTJjZDEsIDB4ZWM1ZmJmZDAsIDB4ZWQxNDc0OTgsIDB4YmUxY2UyZTAsIDB4OWUyYzUwMWYsCisJMHhiM2IwNzFlYiwgMHg0NDY0ZjRiYiwgMHg5Y2UzNDgzYywgMHg5ZWIzZmIzNywgMHhhZDUzMTY3MSwgMHg5ZjUzYWU5YywKKwkweGI3MTg0Mjk1LCAweDIyZWUzM2RhLCAweGI4YTE3YTQ0LCAweDVkZmNmY2NlLCAweGM5Mzc3ZjIxLCAweGY2MmY4NDJkLAorCTB4ZWUzNTFjYWUsIDB4ODVkNzJmNDMsIDB4NGYwMjdkYTcsIDB4OWUxMzE3ODAsIDB4M2M1NDUyNDIsIDB4NjRhN2E1MDEsCisJMHhhNWUzNzcyNiwgMHg0YjJkNzdmMCwgMHhmMGEwNWY3MCwgMHg5MWY2ODkyOSwgMHhlM2FkYzcyMywgMHgzYWZjNzIyZCwKKwkweDc3M2Y3NTFlLCAweGJmMmZhOGIxLCAweDZiOWQyZDY5LCAweDhlOGJjNDhhLCAweDc0N2M0OGU3LCAweDFmMDIzZGUxLAorCTB4N2U1ZDY5ZWYsIDB4ZDcxODkxZWQsIDB4N2E0MzdjMDQsIDB4ODA5ZmY4MjYsIDB4M2ZjNzY4MTcsIDB4ZjlkMzIyZWUsCisJMHg1ZTA0OGY5YiwgMHg5YjhmNTY0NiwgMHgzNzBmZTE4MCwgMHhlNDNhMWM2MSwgMHg3OWNjZDVlNywgMHg2M2UwMmZiMywKKwkweDExOWVjN2Q0LCAweDMxNWU5ZDM4LCAweDdkYzAxYWM2LCAweDRlZjYwZGRhLCAweDFmM2E4M2QyLCAweDNlNzJiMzBlLAorCTB4ZDk1ZTg0ZDQsIDB4M2M2MmFmZDEsIDB4MjUxYmYzYWQsIDB4ZTUyMWRhMzcsIDB4YjVlMTNiNjEsIDB4MGVkMWY4MWMsCisJMHhmNTNlZjY0NSwgMHg1NzgxMjRjZCwgMHg2YWFmOWQzNywgMHhkMDEzZjMxNCwgMHgyNmViODJjMSwgMHhmMTBhYmU3ZCwKKwkweDliMjM1OGYzLCAweGViY2E1ZDM4LCAweDU4YjI1ZDM4LCAweDk0YzdlZDI3LCAweDMwZGU0OGQ1LCAweDcxYWNhNzhjLAorCTB4ZWJhMWM1MGUsIDB4MGU3ZTE5ZmEsIDB4ZjBhMjlkMjMsIDB4N2Y4ZDEyYWYsIDB4YjM5YjNhMTksIDB4NjJjZGU3YmIsCisJMHhiNWFhNmU1MSwgMHhlN2RjNDNmYSwgMHhiMWYyMGE5OSwgMHhmZTEwZDg5NiwgMHgzZWZlMTY3NywgMHgyNDUwZmM1NywKKwkweDc4MTMyZWJkLCAweDc1Nzg4NGRiLCAweGI5M2FmZTIwLCAweDhlZmUxNWZkLCAweGY5ZTk2OWNlLCAweDg0ZDA0YWU1LAorCTB4OWY0ZjA5ZDcsIDB4NTNiN2ZjZTYsIDB4YWM1ZmEwZjIsIDB4Y2ZjODZmMGIsIDB4Yzc0YTNmOTAsIDB4ZDIzM2YyMWIsCisJMHg0NjU3MjlhMSwgMHhkZGYwMGYzOCwgMHg3OGU3YTMyNywgMHgyOGQ0YmY3MSwgMHgwZjNiODVmNywgMHg5MTlmZmFmMiwKKwkweGI4Y2EyY2JjLCAweGZmN2YzMDdmLCAweDRkZWViZTQwLCAweGM1NTk4N2RlLCAweGY3ZjA0MTNhLCAweGZkY2VmNjNiLAorCTB4NzdiZjkxMjMsIDB4ZDEyZmRjNGEsIDB4ZjdkYTZmMTQsIDB4ZDdjYWMxYmMsIDB4MjBlYzFiNGQsIDB4ZjZkZmI4MDcsCisJMHhlNzVkZWFiNiwgMHhhZTFmYTllOSwgMHhjMDM5NzJiMiwgMHhlMGM3ODRmNSwgMHgwNzA0YmFmNywgMHg3NWE2ZjE4MiwKKwkweGE0MTc4YTM2LCAweGY2ZTQwYzdlLCAweDZmNWY1MWFhLCAweDViYTRiM2IyLCAweDdmYWY3YWIzLCAweDM3YmZhODhhLAorCTB4ODc4NzQ5N2IsIDB4NDdhODdiNjEsIDB4MjFiZGExMWIsIDB4Y2U0NWVkZGQsIDB4ZTBmZmJhMTcsIDB4NDNiYWUzNWMsCisJMHgzYmRmY2ZmMCwgMHgxZjlkYmQyZSwgMHhjZTU1NGYxYSwgMHg0YzVmNjk5YSwgMHhiNTRhYWI4ZiwgMHhkMTUxNWUwNCwKKwkweDk5MmM5YmJlLCAweGU3YTBiN2UyLCAweDcwZmZjZTgyLCAweGEzNmFiN2ZkLCAweGE1OWZhZjdhLCAweGQwOGVjOGRhLAorCTB4MmQ1ZWNiY2YsIDB4ZjAxMDU4M2IsIDB4MjU0ZmE1ZjYsIDB4ZTMyYjAxNzksIDB4N2YzOGIxODMsIDB4MTA3OTg3OGMsCisJMHg4ZmY3MmY5MiwgMHhjYTZlZThmYSwgMHhlZDlmNjk5NywgMHgyOWY1ZGZjNiwgMHgxYmM4N2RjNSwgMHhiYjFkMGM3OSwKKwkweGZiMjI1MzMxLCAweDZjYWMzZGUxLCAweDM2ZTFkYTM0LCAweDI2OGFiM2U2LCAweDQ3ZTczZjIxLCAweGQ3M2MyMWYxLAorCTB4M2Q1YjU5OTIsIDB4M2Q3MjAzYzEsIDB4ODU1NDJlYTIsIDB4Njc0Mjc3YTksIDB4YWY0ODNiZTIsIDB4N2E0MzMyNzEsCisJMHg0Y2ZhZmIzNSwgMHhiZWY3ZjljMCwgMHhkYzRjYjMzZiwgMHg4MTNiMDc4YSwgMHg4ZmIxMTllYSwgMHgzMWI5NjEyNSwKKwkweGNlNWEyNGJlLCAweGVhZjg2ZThjLCAweDdmYTA1YmZkLCAweDVlY2JmN2EzLCAweDY5YmI5NDBmLCAweDcyODFjM2FmLAorCTB4ODViNTY0MzYsIDB4MTk3ODBjMDUsIDB4ZTg1NTQyYzMsIDB4Yzg3ZDFhNzcsIDB4ODNlYTBiNzcsIDB4ZjA3YmIwMDIsCisJMHhkMzQxNDk3YywgMHhjMjE3MmFkYSwgMHhiZjdhMjVhYiwgMHhlNDk4MTgzYywgMHhhYTZkZmU4MiwgMHgzMmU5MzkzOSwKKwkweDBlNTAwYmQ0LCAweGNkNWYyOWFiLCAweDRhZDc5NWNiLCAweGNlNzEwYzVlLCAweGYxNDE1YTZiLCAweDEyYjU3OTQ4LAorCTB4MTRkYzYwMWQsIDB4ZDc4ZDk4OTIsIDB4YmQ0MWIyMWIsIDB4ZmJjMzU2OWIsIDB4YzE3ZjM4NTksIDB4ZWQ2ZjU4ZmIsCisJMHg0MTZmZjdjOSwgMHhhNGZkMDNiZCwgMHhmZGYyMzdmNywgMHhjZjc4M2NmYSwgMHgzYjUyNzI4MywgMHg1YzJiZWE4NywKKwkweDA3M2MzMTJkLCAweGNmOTFiMDUzLCAweDU1ZmIwNTRmLCAweGVjMzdlNjJmLCAweGRkZTY4YTdlLCAweGRmNWVkMDI5LAorCTB4YzI4ZjljMGMsIDB4ZDEzY2U5MTMsIDB4ZTc0ZGM5NDgsIDB4ODBiZTFmMzgsIDB4MGUwNzU2ZjQsIDB4YTVmMDVmMTgsCisJMHg0OTA5ZjhmMywgMHhhM2ZkNjJjMCwgMHg2ZGZkN2ZkYiwgMHg5ZTUzNWNmYywgMHgwN2Q2ODE3NywgMHgyNzI3NzllYSwKKwkweGZjNDJjMzI5LCAweGUxZjY5Mjc0LCAweDAzYmUwMTBmLCAweDc5Mzc5YzU2LCAweDljZGVjYjNjLCAweGMzMTZiNDJmLAorCTB4MWI2Mzk4ZmMsIDB4NmFjZmVmNDQsIDB4MWU3MTQ3MWMsIDB4ZTI5Zjk5YjMsIDB4ZTY4ZWE2M2MsIDB4NTdiYmU3NzYsCisJMHhlZmU4NDNkYSwgMHg0Y2VkNTc3YiwgMHhhZjdiZTdjMywgMHhmNmYzZDJiNCwgMHhiNzBmNWM0ZCwgMHhiZjIxNjgwZiwKKwkweDJhZDVlMWZiLCAweDU1MmZmM2MzLCAweDEzZDI2NWFiLCAweDc0YWEzNzg3LCAweDg2N2U1NzZlLCAweDZmZTQzN2M3LAorCTB4ZGVjODc2ZTIsIDB4YzNkZWJjZDUsIDB4OWI3ZWRjNzUsIDB4OTM2ZGNjZjAsIDB4NWZjZTFlNzAsIDB4ZWFmOWNmY2YsCisJMHg4NzVmNWE3YSwgMHg0ZDBiYjllNiwgMHg5ZWE0NWJmMywgMHhhOTcwZjVkNSwgMHhmNTQxNDdjMCwgMHg4ZjRmZGE1YSwKKwkweGZhYTViYmQ0LCAweDZmYTExODdjLCAweDlkOWY3MTRiLCAweDI0YzNkM2Y2LCAweDkxZjVhNTQ3LCAweDZlOGU2NWYxLAorCTB4NDNmMjBkYmYsIDB4ZWZlMjNiZjgsIDB4YzMyYWZkYjIsIDB4NDVmNDhkNzUsIDB4Njc4YTI0ZGIsIDB4ZjIxZWY5YzMsCisJMHgzZTQ5Mzc0NywgMHhmODI4N2I4YywgMHg3YjIyMWFkOCwgMHhlMzNiOTQzYywgMHhmOTllNzAzZiwgMHhjOGYwY2FjNCwKKwkweDAzZDIyYjQ4LCAweGI1OGU1NGY0LCAweDg0YmY4ZmYzLCAweGIzZGY0N2U3LCAweGYwMTBlNDYxLCAweDVmZTEyZTRmLAorCTB4NWFjZTEzOGYsIDB4YjI3ZWUzY2YsIDB4OGM5OTViZGUsIDB4YzRkOThkZTcsIDB4ZjIwN2E0M2UsIDB4MzAxNjY0NmIsCisJMHg5MmEzOGRlOCwgMHhmOTNiOTZlZiwgMHhmYjQ2ZTBmYywgMHg5NjZiYTc0NywgMHhmMzg3OWQ1NiwgMHhlYjhkOTE2YywKKwkweDk1N2FjZjQ3LCAweDBiYzc4YmNlLCAweDNlMGJkNjE4LCAweGI3MGE3N2I0LCAweDBjZDY0OGFmLCAweDczYjg1MGZjLAorCTB4MGVhODMyNDUsIDB4Y2JjNDQ0YjYsIDB4ZTY3Mzg5NTQsIDB4YTc2ZjFhODUsIDB4NWVlNDk3NzAsIDB4YWY0NzY4NmIsCisJMHhkYjU3YWY0NywgMHhiNDFiZGZjZSwgMHhkNWJkYTc5MywgMHhhM2ZkODg1ZiwgMHhhMWFkN2U3MSwgMHhhN2FjODhkZSwKKwkweGQ0YmRmYjQ3LCAweGE3NWZmMzkzLCAweGZmYjllMjU3LCAweDBhNjU3NzljLCAweDYyZjljZjc2LCAweDNlZTMyMGNhLAorCTB4N2VlYTllOGYsIDB4MmRmN2VjZTYsIDB4NWZjMDY3Y2MsIDB4OTg2MzFmY2UsIDB4ODZlZjQwY2YsIDB4NDBmZjIwNTEsCisJMHhiOTFhMWJiZiwgMHhlYTMwZDczZCwgMHg0NTlhNTZhMCwgMHhiZGU1MWJiMCwgMHhjYmEzZjg0YywgMHhiYmZkZjIyNiwKKwkweDE2ZjdjYzg2LCAweGM5NGZmY2ExLCAweDU4MWY4ODkyLCAweDQ5ZjVhMDMwLCAweDgzY2RmYjI0LCAweDU5ZjkwMGZiLAorCTB4Nzg3Y2ZkZmMsIDB4ZTFiMmU1MWYsIDB4YTBhNzJlMjksIDB4NGZhODNjMmYsIDB4OThhZjU2Y2EsIDB4MjU2YmU1NDQsCisJMHhiMGRmZDYwZiwgMHg5MmVjOTczNiwgMHg1MTk5MWM4MiwgMHhiMjQxZWQ3ZSwgMHgwZjFhMGE5MywgMHg4MzNjYTIyNiwKKwkweDdiNDRhZWZjLCAweGQ1YWM2Y2EwLCAweDk3NThlYThkLCAweGRmY2U1ZDRiLCAweDk5NjFlNzE1LCAweGNmMGMzZGNkLAorCTB4NTg3NmUwNzcsIDB4Zjc5NmY5MzQsIDB4NzJiNzYxMzMsIDB4ZTFjZjJjYjksIDB4MjZlZWZiNzIsIDB4M2U3ODQ3MTUsCisJMHhhZDcyNGU3MiwgMHg3MjhjYjFjYiwgMHhjNzJkZDU5YywgMHhkMDRmNTc3YiwgMHg4NzBmYWU1MCwgMHg5OWEzOGEyNCwKKwkweGU1MDA3YTgwLCAweGU3MWU4MzdjLCAweGYzZDhlZGM0LCAweGQ5NzNmMzk1LCAweGJmMjBhNTk5LCAweDcyZWE1ZjM4LAorCTB4YTQ3NWNiYWUsIDB4MmQyYjM3M2MsIDB4ZWUzZjYyYjcsIDB4ZTM0ZWQyYmIsIDB4ZjZkNTcwOTgsIDB4ZmFlM2VmMGYsCisJMHgyNzVmZjY4YSwgMHgzMjYwZjU1YywgMHg4NTNjYzdlYSwgMHg3OGU5NzljNywgMHg1Yzc4NTUyZCwgMHhhZDdlOGY2MCwKKwkweDNkZjVhMDVjLCAweGY0NDVmZTlmLCAweGQ5YWIzM2UzLCAweDhiNmYxMjVmLCAweGI1ZWZmMWU3LCAweGI5ZmRmMTJhLAorCTB4OWM4N2IzZTQsIDB4OWU3Y2E3OWQsIDB4NGI5ZDVjYWYsIDB4ZTVmNmY1M2UsIDB4ZTI3YWU2OWQsIDB4ZjU0NzY5OTEsCisJMHhmMDFkYWZhYywgMHhiZTNjMDYxOCwgMHg4YTU5ZjFiNSwgMHhjMmYxM2UwZiwgMHg4NzQ4YTljMSwgMHhlN2MwMWRlMiwKKwkweDlkMWI1ZmM4LCAweDRlN2E4YzJjLCAweDU1YmNkMTA5LCAweDM5ZDMyMGQ0LCAweGIzODRhNjAzLCAweGU1MWE3MTZmLAorCTB4MTU3NWM3OTgsIDB4M2YxMjc2NmYsIDB4MGQ2NGJkMTUsIDB4OGJmNzgxNGQsIDB4OWMzMTdkYjYsIDB4NzYxNjZhZTIsCisJMHhmMDVhZGM1MiwgMHgwNzJmNjEwNSwgMHgxY2EzODY1YiwgMHhiZTNjMjkxNCwgMHhmYzJmNTIyYywgMHhlN2VkYzZkYSwKKwkweGQzYjFlZGI2LCAweDFkNTI3YzcwLCAweGE4YTJkZmJmLCAweDZhZDU3NmZlLCAweGMyNzhhN2Q4LCAweDUwYmI1MmE2LAorCTB4ODM3OWY2OGUsIDB4ZmU3OGM3YzAsIDB4YmM2N2ZiMTcsIDB4MmI4ZjQxNTcsIDB4ZjVjMGRiNmIsIDB4MWFhMzUxNDQsCisJMHg4YTMyN2JjMiwgMHg2M2I0YjZlYSwgMHhjN2QxNzFiYywgMHg5NTdmZjI1NiwgMHhmM2E0OWRkNywgMHg2ZjM2MTMxNCwKKwkweDc5NGFmZjIyLCAweDhmZGE2Y2EzLCAweDU5ZGYxMWViLCAweDE4YWQ4NzI3LCAweDRhNTBkODk3LCAweDFmMDA5MGZiLAorCTB4YzQ1ZWI4MjQsIDB4ZjhjMGZlNTMsIDB4M2JjZGUyYzMsIDB4ODUwMTA1YjcsIDB4ZWYzZjJmYzUsIDB4YWM3MmZkNDIsCisJMHhmMTBiYmQ3OSwgMHgzNTllZjUwZSwgMHgzYzQ3YmFkZSwgMHgyMjIzZmQ2NywgMHhjMzg2ZjM5ZSwgMHgyZjRiNmY3NCwKKwkweGYwYzc5Y2YxLCAweGI3OTQxMDBmLCAweDRlNzhlNjZkLCAweGVjODdkNzU2LCAweGI2NjdlODRiLCAweDQ3ZmVjYTNmLAorCTB4ZTliZTdkOTcsIDB4MWU3ODM1ZWIsIDB4ZTNhNWVkYTEsIDB4MjVkZmIwNmIsIDB4MGQ3MmZiN2YsIDB4NWRiMTg5YzYsCisJMHhjYWY3OWE3NiwgMHhlMjgwZjg1ZiwgMHhiZWY3ZjViNywgMHhjODdmMDliMCwgMHhmZTI5ZTc4NiwgMHhhYjEzZmRiZCwKKwkweGRmNmI2YjE3LCAweGUzMWQzODc5LCAweDdjYjdkYjA2LCAweGNjZmU4Yzk3LCAweDI2YWYzYjc5LCAweGFkYmNlZjdmLAorCTB4OTQ1ODUyMTMsIDB4OTE0ZjQzNzksIDB4MTFlNzQzN2YsIDB4Yjc0OTFmN2YsIDB4Mjk3YjBkYmQsIDB4ZDAwNGVkOWUsCisJMHg1NzYwZjUxZCwgMHgyOTdkNmU5YywgMHg4OGY2N2Y4ZiwgMHhkMThkZGNmOCwgMHg4OGY0M2JjZiwgMHhlNWI4NmRjNywKKwkweGZmNTEyYmM2LCAweGYyN2I3MDM3LCAweGVmYjk3MTljLCAweDNmMmYzZDAzLCAweDE0NmUzYTBmLCAweDM3ZjVkN2YxLAorCTB4ZjcyZTM1OWMsIDB4ZjQwMWZlMDQsIDB4NzRjZGQ4YjIsIDB4ZjY2MWJhZmMsIDB4YmNjNjlmYWYsIDB4YzZiZDNlODYsCisJMHgwM2NmODZlNSwgMHg4YTc5ZmE3ZiwgMHhhNzNlNmM3NywgMHhhNWU4ZTUxZCwgMHgzNDNjNTBkZiwgMHgwNzhhNmZkMiwKKwkweGQzYWZhM2U3LCAweDExY2EzY2YxLCAweGNlM2E3M2I1LCAweGFkM2I5ZDNmLCAweGQxNGZkZjc0LCAweDllNDg4ZmNlLAorCTB4NDdiZWI3ZGEsIDB4Y2UyNjZhN2UsIDB4YWViM2I0MzUsIDB4OTczZjhmMWYsIDB4OWQ2Yjc4YzQsIDB4ZDA1NzllM2MsCisJMHgzZDdkZTMwMSwgMHhlMjJlN2EyZSwgMHhlYjVmMzk3YSwgMHhjNWJkYmVmMSwgMHgxZjZkNWVmOSwgMHhlMDBmZWUyOCwKKwkweGI1YTVjOGYxLCAweGIzZjExMDdmLCAweDcyOTM3NGRkLCAweGNmMDc1ZTkwLCAweGUzYWQ0NzFhLCAweDcyZjQyZGMxLAorCTB4ZjQ3YjFjNzcsIDB4MzhhZWVhYjgsIDB4MjFiYTA4ZjYsIDB4ZWE5ZTcxM2QsIDB4MzgwNzUzOGEsIDB4NDlmOTA0NmQsCisJMHgyZTc2OGEzZSwgMHg4ZjJkN2RhMiwgMHhhMzU3NmY3ZiwgMHhlM2Q2Mzc5ZiwgMHhmNDExN2RkYSwgMHg5YmRiYzdkNiwKKwkweDdiNzJlOGJjLCAweDUwZmM3MWFlLCAweDQyNjZkMTNjLCAweGI1N2M0ZjUyLCAweGJmNWQxZjdkLCAweDdmNGJiNGNmLAorCTB4ZWJiZWZhZDcsIDB4MTQ4OTU0YmMsIDB4NWVlYjFlNzksIDB4ODZkMmNiZTQsIDB4ZWNjZmU0ODMsIDB4ZjE4YjdmNWEsCisJMHg3YmZmMDliNiwgMHhjNTMyMGJkYiwgMHhkZmE5MmYzOSwgMHg1MjNkZmE0YiwgMHhiZGUxOTQ3ZiwgMHg3YmZhNTEyZCwKKwkweGU3ZDg1ZGJmLCAweDY4ZmU3YzhkLCAweDcyMTljOTdiLCAweDdiNmQzZDQwLCAweDk3NWYxM2I2LCAweDcxNDgzYzZkLAorCTB4YmRkNjZmZDYsIDB4ZTIxOGI1YWMsIDB4MDhmZTcwMjcsIDB4ZjZkM2M2MTksIDB4YTRlMWVlZTIsIDB4MzBmZGM1Y2YsCisJMHg4OTU0ZWQ5MSwgMHhhMjliY2E3NiwgMHhmMWJlNTNiNywgMHhlMjlkYTlhNCwgMHg3NmU2YmQ2MCwgMHg2M2JkYmI5YywKKwkweGFjNzZlZjhhLCAweGI3MzM1OGVmLCAweGNiZDU4ZjEzLCAweGY2ZDE0MzkzLCAweGQ4YWFlYzY5LCAweDI5ZTZhZmVmLAorCTB4MGY3NGEzY2MsIDB4N2JkZjkzOGUsIDB4Yzg2MmJiMjMsIDB4Y2NlNzljZWUsIDB4MTEyZTM4ZjksIDB4YmFlMjhkNTMsCisJMHgzODg4MTZhYSwgMHg1MzdhOWZiMCwgMHhjZTU1ZGU5MSwgMHg3N2Y2MThlYiwgMHhlMGQ3ZTIzMSwgMHgwMWRkNTFmZiwKKwkweDlhYWFmNjg2LCAweGJmNDJjZmVhLCAweGQxZGVhNDQzLCAweDY0MmMyZDEyLCAweGU3M2NmN2EwLCAweGVkMGYxNGU0LAorCTB4OTBkMzg0OGIsIDB4MGYzMjA3OWUsIDB4NjdlZjU4YWIsIDB4Y2ZhYmZlMTEsIDB4MDUyNGI2MTQsIDB4NTA1OWY3ZmEsCisJMHg3YTgwMmVmMiwgMHgwYzVmZjdkOSwgMHhkNjdiM2JmMCwgMHg4NzgxYzNhZiwgMHhhOWJmOTM2NSwgMHgwMDc5ZGFjYywKKwkweDM1ZWMyYmQ3LCAweGM4NDdlZDNiLCAweDdmNzRlY2JiLCAweDNiMWFmOTQ4LCAweGQ2ZWY3NzhkLCAweGJiMjM5ZjZmLAorCTB4YzY1NmQ3ZmIsIDB4NTU2MDg3ZjcsIDB4Yjk5NmY3ODMsIDB4Yjc4NzFkNzksIDB4MmZlNmJiN2UsIDB4Y2JlMzU3NjgsCisJMHgxYWZlN2VkMCwgMHg4OWViOGYyOCwgMHhmZWI0YjE4ZCwgMHg4ZTI5NzhlOSwgMHg3ZmNiNTFlZSwgMHhhOGE5YTFlZCwKKwkweDM5NjNmMmQ3LCAweDRlNmZlNjNmLCAweDdkNDE1NTA5LCAweDZlMWM0OWFkLCAweGVlODAzNGRkLCAweGM5N2UyOGFiLAorCTB4N2JhNWYxNDksIDB4ODY1MmJlYjcsIDB4ZTZmYjU0ZjMsIDB4NjAzMzBjNTgsIDB4ZmIwOWFmZWQsIDB4N2VlMjM3ZmYsCisJMHg2M2Q1MWFhZCwgMHg2NDJmMzM4YywgMHgyZTc4Yzc4YSwgMHg1MzYxMThhOCwgMHgzZjIzMTM1YywgMHhmYTExYzkwNiwKKwkweGU4ZTMxYWIxLCAweGM1ZDgxMTNjLCAweGE4NGU3YWE2LCAweDg5NzgwZjlkLCAweGY4ZmQ4MzhmLCAweDNmNzBhYTM5LAorCTB4ZTU5MTA3ZDQsIDB4NzZmZGZjZjQsIDB4ZGNiZDhlN2UsIDB4YmEzOWVmMGEsIDB4OWQ2Yjk3Y2IsIDB4ZWVhZTFjNzksCisJMHgzMzQ5ZjVjNywgMHhlNzQ0ZmY5NSwgMHhiM2RmOTE3MywgMHgyM2ZlNWU1ZSwgMHg3YWFlZGViZCwgMHhlMjY1ZmJmOCwKKwkweGZlNDg5YjdlLCAweDU3YTVkNDNkLCAweGI0NzE3YWZlLCAweGY0YTI1YmZiLCAweDJmZGY5ZTlmLCAweGVkMDVhMGIxLAorCTB4YmE3NjJkOTYsIDB4NjdlZjBiYjcsIDB4ZGIwZTczYzAsIDB4NTVmZmJlMzQsIDB4ZmRkMzBhZTIsIDB4M2U4NDNiMzksCisJMHhkMzA5ODkyZSwgMHg0NGZkM2U3ZCwgMHhjMjNjYjAzZiwgMHgyMmYyZDZjYywgMHgxNWY0YmRkMiwgMHhiM2Y4YzMzYiwKKwkweDNlOWNkN2QyLCAweGI2ZTk3N2E0LCAweDk1N2Y1YjZmLCAweGIxOGJmMTg1LCAweDdkMmJkN2U0LCAweDFmMTE3ZmVkLAorCTB4ZDNjMzVhOTQsIDB4MmRiY2ZlZTksIDB4ZTdmNzg2NTYsIDB4M2I3OTZkYjUsIDB4NGRiNWU1MWQsIDB4OWMyN2E3MGQsCisJMHhiNGFmNWY2NSwgMHg1N2JlNmFkZSwgMHg1OGUzOGM0MCwgMHhiYzQyZTg2NSwgMHhhZjNmNDE3NywgMHg5ZThiZDQ1YiwKKwkweGRiODYzMmI5LCAweDlmMThmNmQ3LCAweGRkZTQ4NjM1LCAweGIxZDQ0ZjdjLCAweGM2NDFjNmNhLCAweDllNDVmYmYzLAorCTB4N2ZiMTdhZTgsIDB4OWQ4ZmZhOGMsIDB4MzhmNDc3NDMsIDB4MjYzZmRhZjcsIDB4ZTY5OWVkMDksIDB4OTY0MDc0NjQsCisJMHhmYThlM2Q4MSwgMHhlNGVlYThiYywgMHg3YzFmZjQzMCwgMHg2ZmRmYTMxNiwgMHhmOWMzODllMCwgMHg3M2FkMzNlOCwKKwkweGNmYmZlYTE4LCAweDE5ODczYmQyLCAweDk1MjM5OWU3LCAweDkyYTI4ZjM2LCAweDhlZDI4NzVmLCAweGZhZjMyN2I1LAorCTB4YjUzNzhjMzEsIDB4ZjdhNjhiNGYsIDB4MTJjNGM1ODYsIDB4OGUxZThhZmUsIDB4N2E4ZTdhOGQsIDB4YWJlNzBjNGMsCisJMHg1MzFmNjgzNCwgMHg0M2U1MTc2YywgMHgyZDMzZjc2ZiwgMHgzMWI4N2E0NCwgMHg0OWViYzNjNiwgMHhiY2Y4NjkwYiwKKwkweDIwZmI2ZWI4LCAweDk1MGExZTIzLCAweDcyMDcyYTZhLCAweDY0MmNmODRhLCAweDgzMmNiNTJiLCAweDJiZGJkNmZlLAorCTB4MjhmMGVmOWMsIDB4ZjI4MTNmNzQsIDB4NTVmOGJhN2YsIDB4MzkzM2E2ZWUsIDB4NTE4ZTMxOTEsIDB4NWM2NjE0ZTAsCisJMHhlN2ViMzNmMiwgMHg2ZmQ1MTQ0OCwgMHhjYzY5ZmM0MywgMHg2NDY0NTZlZiwgMHhmNzkyNmE5NSwgMHhhOTRmNTYxOCwKKwkweDdlMmVjYzAzLCAweDQzMDU1YTVmLCAweGVjNDQ3OTNkLCAweDBjMWZhM2VmLCAweDNkN2M2ZWQzLCAweDM4M2Y3YTQ4LAorCTB4MzI4YmIxODAsIDB4NGYwOWJlZjAsIDB4YmY4MGRiOWMsIDB4M2ViMzcwNmIsIDB4MmI2OWUzMDksIDB4NTMxN2Q3MTgsCisJMHg0ODhmNjhkYywgMHgwMzNiMDBjMSwgMHg1OTU1NTRmYywgMHgwM2RmODgzNywgMHgyZjE4N2NjMiwgMHhmNDJjMjY0OSwKKwkweGYzN2VlNWNmLCAweDgwODNiNDNiLCAweDg0M2RmOTRmLCAweDE1NTBiMTU3LCAweDg2YzMxOGEwLCAweDllM2FlZmM5LAorCTB4OTZmM2ZiZjEsIDB4ZWI4Y2NjN2QsIDB4MDc0MTEyOGYsIDB4N2E0ZGRjMTYsIDB4N2ZiYWMxY2MsIDB4NWFhMzAwOWQsCisJMHgxNTViN2Q0NSwgMHhkYzFjYjdmNywgMHg1OWI4NzM5ZiwgMHg1OGMzZWQxOCwgMHg0MmM3MGIwNywgMHgxY2FhMThlYSwKKwkweDJiYmZjYTMzLCAweDVmMDM2MDBiLCAweGYzOWFjN2JhLCAweGY0MDJlNTIzLCAweGY1YmI0NDVhLCAweGY3YTgzZjg0LAorCTB4YmY3YTg4YWIsIDB4YWJmN2E4OGEsIDB4ZTNhYmQ1YjMsIDB4MjgzNmRjYTksIDB4NThhNWVmMDMsIDB4ZjAyZjU5NWMsCisJMHgwOWIzZGJjNiwgMHg4NjdlMDFiYywgMHhjYzdmM2RlMCwgMHhmYjE1ZTMxMiwgMHgxOGQ3ODRlNiwgMHg5NjJiMWJkMSwKKwkweDhlNmViYTA3LCAweGZhN2UyMGM5LCAweDRlYWVkYzU5LCAweDg5NjY5NzhjLCAweGMzZDcwYzM1LCAweGJlZmQyNDhiLAorCTB4MTg3N2U2NGYsIDB4MWI2ZTYzZGUsIDB4YTIyM2UxYzksIDB4Y2YwMmNkOWQsIDB4NTViZjc0OGIsIDB4YjI3NmYyOGYsCisJMHhiNzk0N2FiZiwgMHgyNjNlNTZmNywgMHg2ZjY3Nzk3YSwgMHhkZThkODlmZCwgMHhlYTVlZjg5ZiwgMHg1YThkOGVhZiwKKwkweDRiZDUwZmZmLCAweGY0N2RhZjY1LCAweDc2ZWZlZTBlLCAweGEwMzcyN2U5LCAweDZlNjc2Y2RlLCAweDFhNTRmZDQ2LAorCTB4MTZiN2ZhZGYsIDB4NGNlZGMyN2EsIDB4ZGU5OTlhNWIsIDB4YzBkZmM4MzEsIDB4OWExNzMxNmYsIDB4NDlmMjQ3OWYsCisJMHhmNDcyZmUxNCwgMHgyOWRmNzE4NSwgMHg2MWYzYmJkYSwgMHhlNzRkNWU3ZSwgMHhiZTMxNWM4MywgMHg5ZjdjYjU4OSwKKwkweGRjNzllZWZjLCAweDQ2Y2IwNzhmLCAweDI1ZGZlNjFmLCAweGUxYWVlZmYyLCAweDBmZGRlM2Y2LCAweDFiMGZiNGNiLAorCTB4YzFkNWJmNzksIDB4ZTFlZmNkZmYsIDB4ODAxZjA3YjgsIDB4NWYzM2RkYmMsIDB4YTIzMzg1MGEsIDB4ZGVjNWRiZGQsCisJMHg2NzdhODc4ZiwgMHhkZTQ0ZmU4OCwgMHg5ZTYwMTU4MywgMHg2OGU0Y2I0OSwgMHhiZTcxNjBmNywgMHg0NWUxY2ZkNCwKKwkweDhiMzE3ZmRlLCAweDY2ZmRjNWY5LCAweDMxNTllN2U2LCAweDIyZGJlMjZlLCAweDBmNTVhNDI1LCAweDgyYzc5ZWVkLAorCTB4ZDFlZjgwMmIsIDB4YzdiZTA0ZmUsIDB4OWM1OTJmZmQsIDB4OGQyZTY2YzcsIDB4OWFkZmQ3YzcsIDB4YTc3ZmQyNjAsCisJMHg3MGUyNzg4NiwgMHg4YmFmNjZiZSwgMHg3Y2ZlNmVlNywgMHgxNDllYjVlZSwgMHhlNTQ1NzllMywgMHgxZWU5YWM3NCwKKwkweDliZDUyYWEwLCAweDNkNGRmYThhLCAweDgwZjMzZDdkLCAweDA3YTc2YTFjLCAweDFmMjE4ZjMxLCAweDdlMTI1NmVjLAorCTB4M2QyNGYzMGMsIDB4NTA4NGFhOTUsIDB4M2Y2ZTJhMmYsIDB4MzdiYjQ3Y2IsIDB4NWViM2YzOWUsIDB4YWViYzRiNWUsCisJMHgxNzdjY2VjYiwgMHhlNjQ2MWRmZSwgMHg1ZGNmZmY4MSwgMHhkZmYzYTFlMSwgMHhhN2ZjMzk1NywgMHg1ZDk1ZmU3MSwKKwkweGEzODBkZTM5LCAweGI3MDQzZjI3LCAweGUxNTc3MWYyLCAweDhlN2EzM2I4LCAweDdhZjM0YWE3LCAweDBlYmVkZWM5LAorCTB4Y2JmMjQ1ZTYsIDB4M2ZkODZkNzksIDB4YzhmOWVhZDksIDB4YWRmYmZkODMsIDB4ZDMwZmQwY2EsIDB4MjNkZTNmMTMsCisJMHgxNTNmYzgyMSwgMHgyNDcxNGZlYSwgMHhjMTk0ZGM3MiwgMHhiYzcyZmVkOCwgMHhmZmY0MTQ2ZiwgMHhlOGJmNzEzMiwKKwkweDUyMjY0YWEyLCAweDA4Yjc1NzFlLCAweDM0YTUxZmVmLCAweDkxM2VhNDQ3LCAweDhmNzJhNjRlLCAweDk3NGE3YjhhLAorCTB4ZDUyOTdhNTQsIDB4NTZmMzZiZjEsIDB4YjY5ODNkZDMsIDB4MzZmYjc5MGIsIDB4YTI1ZmEwYjcsIDB4NDAyZmUwNDUsCisJMHhiNTJkOTdmNiwgMHhlZDFkZjY4MiwgMHhkZTMwOGFlZSwgMHg2MGQyYzcyNywgMHhiOTYxYzFkZSwgMHg5YWJmMDlhYiwKKwkweDEzYmY5MTliLCAweDQ1NmMxM2NhLCAweDY2YjU1MjE4LCAweDcxNDlkMTBhLCAweGM4N2NiMDU3LCAweDA2MDQ3NTRmLAorCTB4ZTM3ZGEyYzcsIDB4Njk4N2RmMzEsIDB4ZDY3MTFkNGQsIDB4ZjhiYjMxZmIsIDB4ZmJjNzEzNmQsIDB4YjdlNzEyNjMsCisJMHhhNjNmYmM0OCwgMHg2ZTMwN2IzNiwgMHhiYjZiYjFlMiwgMHhiYzIyYWJlZSwgMHhlMzg4NzJjMywgMHg3ZWY5M2ZmZCwKKwkweDM3YmM0ZjZlLCAweGMwNjk5YjRmLCAweDMyN2IzM2JiLCAweDAyNjdmZGUxLCAweDVlMDU0YmNmLCAweGFhMWQwNGFiLAorCTB4YzRhYjNlMDQsIDB4ZTI1NWFmYmQsIDB4ODEyYWRjZGUsIDB4M2JjNDJhZGYsIDB4N2I4ODhmYTQsIDB4M2QyMzE3N2IsCisJMHhlZjExOTUyMCwgMHhhMWQ2YmZjMCwgMHg3YjQzMjY0MSwgMHg1MjBmMGY3YywgMHhiNzViZTA4NywgMHhiMmE0ZmM4NSwKKwkweGJjNDNlZmMzLCAweGRlMzkxMzViLCAweDAzYTAwZTZkLCAweGRkZTAzNWYxLCAweGMyNDFmOTgzLCAweDc4ZTBlYWE3LAorCTB4MGU5Y2YyODYsIDB4ZWYxMDU2MDIsIDB4YTczOWYxMjMsIDB4YjZmZGUwMDcsIDB4ODdkNDI0ZDgsIDB4ZDY3ODRjNjMsCisJMHgxZjlmYzcxMiwgMHhmM2UyOWZkZSwgMHhmMzkwYTI1YiwgMHg2YTI1ZmM0OCwgMHg1ZDYwNWVmYywgMHg4ZmIzN2JiZSwKKwkweDc2NWM0NGFiLCAweDExOTdiODk1LCAweGNkNzY4OGYxLCAweGJiMGZjMDJhLCAweDNmOTNlMzk4LCAweDJmNjAyMjFmLAorCTB4ZmQ2MjQ5YTUsIDB4YzA3NDA1NWYsIDB4M2Q4NTI3ZmMsIDB4NzRjNjc4ODQsIDB4Yjc1ZjJjNjcsIDB4NzYyYTVhMjQsCisJMHgwNGE3ODhhYiwgMHg0YjBmZGY3ZSwgMHg2Y2I0YjIwYywgMHhmMTgwNDNjNiwgMHgxZTY0MWE5NywgMHhlMWZkZjU4NCwKKwkweGM4ZmYzMzVhLCAweDdlZTIyNTZlLCAweGM4OTNjZjQ5LCAweDU2ZGYyYjZmLCAweDJmN2ZiODJkLCAweDc0ZGViZmNmLAorCTB4ZTY5ZTViYWUsIDB4ZmUxMGY3OGIsIDB4MzVkYTEyMDMsIDB4Yjg3MjEzM2YsIDB4ZmE4NWY5MDIsIDB4OGJjM2Q3YzcsCisJMHgxNTJjMWYwNSwgMHgyMjNmMDZmNywgMHgyMTMxZTdmOCwgMHg3Y2ViOGZjZiwgMHg0OGU3ZTVlMywgMHhmMWU2NGY5NiwKKwkweDE2OTk4OThlLCAweDk4NjJiZjcxLCAweGUzMDllMzE5LCAweDgzNGNmNWJkLCAweGM2ZGFkMTdlLCAweDlmZGQyOTQzLAorCTB4OTJiNjNlYzksIDB4NjUwZWM2ZGMsIDB4ZjhhZmU0M2UsIDB4ZjEwYzFmOGYsIDB4N2RmZDcwZmIsIDB4ZDc4YTFlZDEsCisJMHhlYjFkYmZlZiwgMHgwZTgzYmY4OSwgMHg3MTE1ODdiNCwgMHhkN2NjYTRjZiwgMHhlZjUxY2Q5MywgMHhlZWYyYWQ4ZCwKKwkweGE2NWZhMWIxLCAweGJlZWNmZWI3LCAweDczZjExYjY5LCAweDFlNDRlNWRlLCAweGJmZTAyN2Q2LCAweDhlYzAzNjYzLAorCTB4YzE1NzU4MWEsIDB4YzgxYmQ2MmYsIDB4YTU3YThjNWUsIDB4ZWJmYzQ5YzYsIDB4MWJlN2ZlODAsIDB4MTdiNjI0ZjgsCisJMHhjNzU0Y2VmZiwgMHg1ZjUwMWJiNSwgMHgyNDA2ODBiYywgMHg2YTJmYzEzMCwgMHhjZjExZDkwNiwgMHhmYTBmNzM4MCwKKwkweGZlYTk1NmIxLCAweGFjMmYzOGJlLCAweDhmZWU4ZjhhLCAweGRmMmM2NWZiLCAweDVkNjU3MDg3LCAweGFjMmJmMjZhLAorCTB4OWVmNDdkNTQsIDB4ZWY1OWFjN2IsIDB4NDRmMzE0YWMsIDB4OWNiMzQ0YzIsIDB4NGZjMmYzZTgsIDB4Mzk1NzdkNDUsCisJMHg1ZmIxM2IwMiwgMHg5MjI3YTdjOSwgMHgxY2RlMjczYywgMHg1MmE4OWU3ZCwgMHhmN2RlMjBiNSwgMHhjYjhjMzU1MSwKKwkweGUzNTczMDc3LCAweGZkMGY3M2Y2LCAweGU0OWY2OGMzLCAweDNhZjA2MDU0LCAweDdjZTk4M2Y0LCAweDdkNzE5MGI2LAorCTB4YWVkYzY0MTcsIDB4MDRmNWM3ZDQsIDB4ZTcxNWJkZjIsIDB4M2ZmMTM3MDMsIDB4Y2IwODA3Y2UsIDB4ZGVmYzZhMTcsCisJMHhlNDJkYmJlMywgMHhlNDIyNTg4NywgMHg2NzIxNTFlZCwgMHhmZDdjODVjYiwgMHg4YWNiZTUxYywgMHgyOTdiNThmNywKKwkweGFiOTA4NWZkLCAweDkwODcyODk1LCAweGUwY2Q4ZjFlLCAweDNmYjhiY2Y2LCAweDJjY2Y1ZjRjLCAweGZiYTA4ZGI0LAorCTB4MTYxY2FiMjIsIDB4NGY5NDE3OWEsIDB4YWUwNzIxYWMsIDB4NzY4Zjc2MGYsIDB4NzY0N2ZmYTMsIDB4NGUwM2I5NjYsCisJMHhmYmEyY2ZjYywgMHgyY2Y4YTVkYywgMHgzN2NkZjIzNywgMHg5YzE3NTljZSwgMHhjODE2MWUyZCwgMHgyYjE2Zjc0ZiwKKwkweGVhNGJmNzJhLCAweDg5NTdjOGY3LCAweGY3NTQwOGZiLCAweGQ1ZmQwY2NkLCAweGQ4NTYyNjRmLCAweDk2MzVkZTI5LAorCTB4ZTRkNzg3YzcsIDB4ODFkZTEzNjYsIDB4ODZiMTlkMWUsIDB4YjRjYTVhNzUsIDB4ZmJlZWJhZWIsIDB4ZWM5ZmVhYzMsCisJMHhlZjgzNWVlNSwgMHg2OTYwZGU4NSwgMHg0MWExNzY0MSwgMHhmYjg4ZDQ0ZiwgMHhjODI3OTkyNCwgMHhjNWY0MTg4NiwKKwkweDMxMjY4YmMyLCAweGQ0ZjVlZmY0LCAweGNkZThiZDEzLCAweDJlNmY1Y2Y1LCAweDRkZWJhMjkyLCAweGY1ZDc4ZWRkLAorCTB4ZDE3ZWE0NjYsIDB4NGMxN2M1ZDMsIDB4NTRiZjlkMzYsIDB4N2E0NjVlMWQsIDB4M2Y3NDQ4NjcsIDB4Y2FjM2IyNDIsCisJMHhkNzk5MmZmNywgMHgzM2QxOWI5YiwgMHhlYzk1ZjAxZiwgMHhlZDBiZTAzMCwgMHhmMTZmZGQyMSwgMHg4OWUzMjhlMywKKwkweGFlNDc5M2Q0LCAweDAwZDdlN2QzLCAweDRiMzQzYmRkLCAweGZhMzkzY2YzLCAweDc5YWJmM2FjLCAweGZkM2ZjODVlLAorCTB4Nzk0ZmNkMDgsIDB4NWE1MzQ3YTcsIDB4ZDkyZDczNTAsIDB4Njk3NzBjMjMsIDB4MWMyZWY3MGMsIDB4MGJiZjdkNWUsCisJMHg0NmI4N2JlOSwgMHg1NmFmOWZlYywgMHg3NGJmMTg0MywgMHgxOTcxNjZiOCwgMHgwZjc2ZDVjMSwgMHgyZmRjNjZkMiwKKwkweDNkZTE3NDFlLCAweGM4ZDZiMzRkLCAweDI0N2U5ZmI0LCAweGYxNGU5ODI2LCAweDM5OWZkZjlmLCAweDYzZTIxYjIzLAorCTB4OWE1ZGFjMTYsIDB4NmIzOGZjOGUsIDB4MzczYTUyZGQsIDB4MzdjMTI0N2IsIDB4NTk4MDZmZDgsIDB4NzllYzg3OTYsCisJMHhiY2M2ZmVmZCwgMHhiNDNlYWQ2NywgMHhkYmUzN2JjNywgMHhmZGQxZDViYywgMHgyN2Y4NTUzZCwgMHg3Nzk4NTNhZSwKKwkweDc2NDNhZTA4LCAweDg2NzRjNmJiLCAweGZjOGUwZjgxLCAweDgyZWI0ZWMyLCAweDhlZDgyZDJhLCAweDU4YmFkNTcwLAorCTB4MjU1NTgzN2MsIDB4MjgwZmJmNDQsIDB4MGZiNTcxZDUsIDB4ZjBlYTk0ZTksIDB4NzMyOThiNWQsIDB4NGY3ZWQwMjQsCisJMHhkYmM0NzJlZiwgMHgzYjVmNDU2ZiwgMHgyZDNlYmJlZSwgMHgzYTAyNDVlZSwgMHhiYmYyNjRkZCwgMHg1NmQ3N2RmMiwKKwkweGI2NjM0N2UxLCAweDQ0NjNmMjVlLCAweDdjOTdhN2JlLCAweDYyOTM4ZjE3LCAweDdmZjllOGVlLCAweDY4NjlmZmI3LAorCTB4MzE1ZGY1OGYsIDB4ZTZiNGJmOGUsIDB4ZTg0ZjkyZjgsIDB4YTExZjc5ODksIDB4Y2Y4YmM0NTAsIDB4NWExYjE3NWEsCisJMHg2NmNlNDUxOCwgMHhiM2M3ZjM4OSwgMHhjZTk5N2VjNCwgMHhlYmQ3ODU4ZiwgMHhlM2U3MzlmNiwgMHg1ZTk3M2U0OCwKKwkweGZhZjg4NGI4LCAweGNkMmE3ZGNiLCAweGFmYzA2NTZiLCAweDE3YTVlZmE4LCAweDUwN2RkMzQ2LCAweGUyYmI5ZTBiLAorCTB4ZmMwYjhjNzEsIDB4Zjk0Y2JmNmEsIDB4YzRlZGE3MjUsIDB4ZjUzZmVkYzcsIDB4Y2U4MjM5ZDIsIDB4OWRmNGE5ZGYsCisJMHg1ZGY2YWY4OCwgMHhkYTAxZTc0ZCwgMHgzYWQzZmRjNSwgMHg3YzljZDI5ZSwgMHhjMWM2YmMzZCwgMHhlOWRlNTBmNSwKKwkweDc0M2M5MTlmLCAweGE2Njg1N2YxLCAweDc3OWU3Mjg2LCAweDVlNWNlN2ZhLCAweDMxZDlmZWYwLCAweGRlZWJlYzM4LAorCTB4ZTBhMTc3MWMsIDB4MmNkNzgwNmIsIDB4MjE2OTM0OWYsIDB4YzJkZjliZDQsIDB4MGQ4ZDhhZTUsIDB4N2IxZjkxOTYsCisJMHhkMWY3YWM2ZCwgMHhjNmJmZjIyOCwgMHhiNWY5MzFlMSwgMHhmMzk2NWJmMiwgMHg0Y2FlYzBmNywgMHhjYzk5YzQzNCwKKwkweGM4N2JkZjEyLCAweDY1ZWZjZDNmLCAweDRiMjBlZTY1LCAweGZhMTI3OTQ1LCAweGNjMGU1YmIwLCAweGRiYjc3MmY3LAorCTB4ZDNkNGUzY2QsIDB4NzljNmJiMTcsIDB4ZDZmZDY5ODUsIDB4ZThhYmNlM2QsIDB4NTNiMDllNzksIDB4MTM0NjViZjIsCisJMHg1ZjllM2RkYywgMHg5ZTM2OGU4ZCwgMHhhNThjNzFlZSwgMHhkMWYxZWRmMiwgMHhiNDUwZmZkYiwgMHhjMDU5NWFkZiwKKwkweDhiNGZhMDdjLCAweDc5YmZmZGM0LCAweGQ0MzRmYmExLCAweGUzYWI3OTFmLCAweGI4YzMyNDEzLCAweDRkOGE2YmYyLAorCTB4MzU3OTRmZjEsIDB4NWZkZjc0YjksIDB4ZWQ1Y2VhZmUsIDB4NzZiYzgzNWUsIDB4MzZjZDg1ZDEsIDB4NDc0M2U1ZDEsCisJMHhkNTMyZTg4MCwgMHg0MGUzZGZlMSwgMHhmMGExN2NiOSwgMHg1ODNkNGY4MSwgMHgxMWQzYTcyZiwgMHg4MmJjMzgyZCwKKwkweGFlN2RkYmY0LCAweDNlYTdlNzY4LCAweDhkNTNhNDhjLCAweDFmYWMxM2EwLCAweGQyNzQwY2IyLCAweDdlZjkxM2U5LAorCTB4MDdkMmZhZWIsIDB4OGJmZGM1M2UsIDB4NDVlZGY4YTcsIDB4MDhiMWViYmQsIDB4Yzc0NDY1ZmEsIDB4ZjM4M2E3NWYsCisJMHgwZmQ4MmI2YiwgMHhkZmMyZjM4MSwgMHhiYmY4YTY2NSwgMHhlODI3ZjE1ZSwgMHg3ZjQ3ZTNhZCwgMHg1MWRmZjYwZSwKKwkweDk0NGVmYjk0LCAweDFmNTg1MWNkLCAweGUxNzM4N2U3LCAweGMxN2RiYmFkLCAweDhmYTJlMzBmLCAweGYzYTljNTI3LAorCTB4MDQxNjdjYzMsIDB4NzFhYTNlMDEsIDB4ZjFmN2EzZmIsIDB4YjY4MmM0M2MsIDB4OTc0ZjE4ZjMsIDB4ZjEzNjJlOWMsCisJMHgwMTczOGE0MywgMHhmZjQxNTM5NywgMHgyMTFlN2JhMywgMHhjNTBkNmViZSwgMHhiZDE5ZWQ3YSwgMHhkOWM1Mjc4ZiwKKwkweDE4NWMxZjBiLCAweGZmYjM0MzY0LCAweDExYzFmMWVmLCAweDI5ZjgzN2NkLCAweGRlNjA0NzljLCAweGYwYmQ3OWMyLAorCTB4MWI4NmM3ZjksIDB4MThlYTk3ZmIsIDB4NzljNGU2OTcsIDB4ZjZmY2ZhYTksIDB4YmRlMzgzYjcsIDB4MWUxZDcwZmIsCisJMHhhYjdiMjc1YywgMHg4ZTI1NDg2MCwgMHhiZjdjNjBjMCwgMHgzN2Y0ZjVjOCwgMHgxNDViZGZlOCwgMHg2OGYwYzRmZiwKKwkweGNhZTJmNDc2LCAweGRmYTA5NzdkLCAweDk5YjJhYWI1LCAweGM1ZDg1NTUyLCAweDBjZTJlZDBjLCAweDY4OGY1ZGZlLAorCTB4MmI1ZTA1ZjcsIDB4Y2FlMmViZjQsIDB4YjViN2VlNjYsIDB4NzBkYjk5MDUsIDB4MzIzYjAwY2YsIDB4OGFkOGZjOTIsCisJMHg2OWNmNmNjMywgMHg3ZThkYzA2YSwgMHg4M2RjNGQ3MywgMHg2NTgxMmFhMCwgMHg2N2U4NTkxOSwgMHgxYTBjY2M0YSwKKwkweDkzOGQ3N2YwLCAweDRmMmNkN2VmLCAweGZkYzZlM2RkLCAweDhmZDQyYjEwLCAweDlhNWIzM2ZlLCAweDc3ZTRjYTcyLAorCTB4ZTU5OTVkN2IsIDB4ZDdlOTNhMDQsIDB4N2FiMGM3NDQsIDB4MWY5MTI0OWYsIDB4MWY4NDU0ZjIsIDB4MWZhOTk0ZjIsCisJMHg3ZGE2Y2Q4OSwgMHgyOGJjNDg4YSwgMHgyODFkZmUzNiwgMHhiM2ZmMDk4NSwgMHg5ZGZlODdjMCwgMHgzZTZlYTVhNCwKKwkweDhmYzI5NWNlLCAweGFmZmEwNGZkLCAweDM2M2IwMjJmLCAweGMxZjY0NWQ2LCAweDdjMmMwYjkyLCAweGU4NTM2ODdkLAorCTB4M2M2YjJiYmUsIDB4ZjFjNWFmMmYsIDB4ZmY3MWQ4NzEsIDB4NTlmNWM2NDMsIDB4ZGUyNzYwOTgsIDB4ZDVkMzI2MTAsCisJMHhmMWMyMTI4YiwgMHhkYzIxMjNjYywgMHhlMDk3ODU4NywgMHg1YzYzYTM3YSwgMHhmY2Y4MDNjYiwgMHhkNzIwN2I3OSwKKwkweGE2ZmY3ODA5LCAweDA5MDFmMzZmLCAweDgxZmMzM2Y3LCAweDM1Y2YxMThiLCAweDAzZDMzMDcyLCAweDc3MmQ3ZmU1LAorCTB4NzRiOTYyNjYsIDB4ODEzOGZhYzgsIDB4MzllMDE3YTcsIDB4OWY2MTgwODcsIDB4ZGNkN2RmOTQsIDB4ZTEzZGNiMGQsCisJMHgxMTJiZTYwYiwgMHg1ZmRmODZmYiwgMHhjN2I3Y2M2YywgMHgxZmIwMmFmOCwgMHg0YWNiZGY5MSwgMHhmZGEyNDJmYywKKwkweDA3NGNmYzQxLCAweDM0ZmRmZjlmLCAweGYyNzcyZjNmLCAweDA3ZjEwNTc1LCAweDZlM2VkN2YyLCAweDNjNTI5ZDNmLAorCTB4ODdlZmI4NzEsIDB4YjRkZDc5ZDgsIDB4YmNmMzYzZWYsIDB4MTE0ZjY4NmUsIDB4ZTA1YWQ4ZWIsIDB4NGZiMGM1NTcsCisJMHhiM2UyYTE3NywgMHg1NDVkM2YyMCwgMHhmZDhkY2YwZCwgMHgyNzI3NjI4ZCwgMHhmMmRhZTgzOCwgMHhkZWJkNzZhOCwKKwkweDgzYWYzYzNmLCAweDRmNGY5NGY4LCAweDkyMjQ3YjIyLCAweGVkNzQ3NjJmLCAweDY5ZWZmMDI3LCAweDllMzNhMWRkLAorCTB4ZjFjMzg4YjIsIDB4ZmFkMWZmNGMsIDB4ZmRhZTkzZWUsIDB4NzYxYzQ1YWEsIDB4NWVmY2E4NzMsIDB4NjlmZTNmYmUsCisJMHg5OWM1MWM2ZSwgMHhhM2I4ZmRlYSwgMHhkYTMzNjk2OSwgMHhmNTM0NzdjNSwgMHhiY2Y4ODk5ZCwgMHgzZmUyZTBhMywKKwkweGVkNDNiYTYzLCAweGZhOGIxM2RjLCAweGNlODk3ZWUyLCAweGMxZjlkZDk3LCAweGE0MmM2YWViLCAweDQ3NWZkZjViLAorCTB4MmYzYzFmZjcsIDB4ZWIzYTcxZTQsIDB4MDFmZTkxNTQsIDB4N2VmOGQ2ZTYsIDB4NDdkZjg4NTcsIDB4YWUwMmJjYzUsCisJMHg3MTVmZDE1NywgMHhkYjc0Mzg3NywgMHhmM2RkMDAwZCwgMHgzNDA2ZTg3YSwgMHhlYmVmYTZmNywgMHg0M2Q1MDM3YywKKwkweDg5M2RkZWEwLCAweGY3ZjQ5NGY2LCAweDcyNmZiZDFhLCAweDM1ZDdiZjk4LCAweGUzNDZjNTdlLCAweDhkYWYxZWU5LAorCTB4MGY4ZmFmYzYsIDB4ZWZmODRhN2EsIDB4ZjdiODhmYzIsIDB4ZjhjN2M3NGQsIDB4NzdkYzdjOTksIDB4MWQ3NWRlYzQsCisJMHhlMDNhY2IzYiwgMHgzZmIwZGIwZSwgMHhkZTNlNzhmMywgMHg3Y2ZjNDg5ZiwgMHgxZmEwNTk4NSwgMHhmNmZhNzQ1ZiwKKwkweGUzM2UzZjIwLCAweGJkNDVlZGY0LCAweDRjZWI2MjU3LCAweGJjOTIwNjU3LCAweGNiY2Y4NWJjLCAweGM5MDVjMGU0LAorCTB4MDMxM2ZlMzAsIDB4MjEyNzE3MDIsIDB4OWNmYjlhMWUsIDB4YzA3ZmJkOTcsIDB4ODBmYmY5Y2UsIDB4ODFmN2YzOWQsCisJMHg1YmFmOWQwYywgMHhlY2Q3Yzg5YywgMHg1MzhkMjI3NCwgMHg5MmM3N2VmZiwgMHhiYjFmODdhZCwgMHhjNGZiZjgxZCwKKwkweGJiM2VmY2RiLCAweGUzNzNkOTUyLCAweDk2OTdlNDQzLCAweDNlMmUzMTk5LCAweGZjMjAzZDMyLCAweDdjNWQyZDBjLAorCTB4NDMzYmM3YzgsIDB4YTMzMmYyZTEsIDB4YzFjZTk2MjEsIDB4OWIyZjk4Y2MsIDB4MzE5ZmRiZWUsIDB4MzJjM2M3OWYsCisJMHhhZGY4NzlhNSwgMHgyMmMyNzVhNiwgMHhiM2QyZDcxMSwgMHg0NDgzZjQxZSwgMHhmZTczMzNkNiwgMHg2NTE3YmEwNCwKKwkweDQ3MWVlNjliLCAweDljMzU5MTdlLCAweGY0NGU2NmNmLCAweDYwOGU3OGM5LCAweGY2ODkzMmNjLCAweGYyMWY0N2YxLAorCTB4M2MwMGI2MzQsIDB4NDVlZjE0MzMsIDB4ZTBmOTlkMzEsIDB4ZmJjMjBkN2YsIDB4Yjk5YWNhNTEsIDB4OWU0NTM0N2YsCisJMHg0ODUzZjk5MywgMHhmM2UxZWQ1NywgMHgxMDczYzIzZCwgMHhjNzlmMGU0ZiwgMHg2OWNmZDg2MSwgMHhkZDMyMmI1MywKKwkweDM4ZjdjZmM4LCAweDcyMDdhODdjLCAweDgyN2RmNTZmLCAweDIyZmRkNTc0LCAweDBhZmJiY2ZhLCAweDE3MTgwMWQ4LAorCTB4MjdiNzdiOWEsIDB4YjcyNGY5MDcsIDB4ZDRhM2VlZGUsIDB4ZDAxODk0YzYsIDB4YjMwYWI5NmIsIDB4MzFhMjlhNjEsCisJMHgwYzY5OGVjNSwgMHhiZDlhNjFiMywgMHgzNTRmZDg1MCwgMHhlMGZkOTEzNywgMHg3ODZiZjFjYSwgMHhkMzZlNzliZiwKKwkweGZiZTM1ZmYzLCAweGI3Nzg0YWY5LCAweGRjYWJlMDY0LCAweGEzYmZiN2E2LCAweDNmM2U3NjczLCAweDU2NWVmZGM1LAorCTB4OWZkNjk5YTcsIDB4ZjBjZGVhYzMsIDB4Mzg2NjhkZTUsIDB4NDc4NjZjMzMsIDB4NjVjMzMzZWUsIDB4Njc2ODM2MzgsCisJMHhlMTFlZjg4YywgMHg4NjU2OWQ5ZSwgMHhkZTJiMmJkZiwgMHhmNDM4YTU2YywgMHhhMGFlNzE1NywgMHhlOTNiNWU3OCwKKwkweDRkYzUwOWM1LCAweDcxMjcxOGQ5LCAweDA1YTc0NWZjLCAweGZlM2I5NWZkLCAweDU5YzUzMmZhLCAweDY1OGE2ZTc0LAorCTB4ZmJiODY3MTgsIDB4ODMxNjE4ZDMsIDB4ZWQ5YmJjNzEsIDB4MThiZjMwZWIsIDB4ZDlmZTg3NjgsIDB4YjVmNmNkZTIsCisJMHhlZGIzNGYxOCwgMHg0MzRmOWQ1MiwgMHhlZGI1MGYxNCwgMHg0YmJjZmM2ZiwgMHgwODZiMDZlNywgMHg2ZjhlMmVlMywKKwkweGU0NDVmZTdmLCAweGZhMWJlM2NiLCAweGFhZjYxZDkzLCAweDdkNjBiNDE0LCAweGRkMzg0N2MxLCAweDNlYmQwOGM3LAorCTB4ZTJmNWU4NDYsIDB4ZmM3YWYzM2EsIDB4YWY2ZTk3MGEsIDB4ZmNlMjg3YmEsIDB4ZTM4MTI2MzcsIDB4MmZiMmI1YmIsCisJMHgyNTc3YzU4NywgMHg4YzZkZmI3NCwgMHg0MGRkNjdiMCwgMHg3Njg3Y2ZjZiwgMHhkMDg4NzlkMywgMHg3YmExNzljZiwKKwkweDZiZDExZjM1LCAweGIzZWEwYzQxLCAweDBjZGFhMzhlLCAweDVjNWQ0YmY0LCAweGNlYTNjNjYzLCAweGNjODQ5N2RmLAorCTB4MjRiYTI3Y2YsIDB4Y2YwY2U3YTEsIDB4YzU1ZTMwMzMsIDB4ZTcxNTI0YjMsIDB4ZGZhMzY3ZWYsIDB4OGJiZDdmNTMsCisJMHhiYzJmMTlkYiwgMHgyMGYyZTlhMCwgMHg5OTJhN2I4YiwgMHhiMmFlNzBjNywgMHg3OWIzZWY1YiwgMHgwODllMzFmZCwKKwkweGZiYjAzNWU5LCAweGJiNDQ3MTc5LCAweDJlYjFmZDdhLCAweGRhNWZjZjJlLCAweDQ0ODI3OWY4LCAweDk1NjM4NzgxLAorCTB4ZTg2ZWM4ZmIsIDB4N2QyYjIzYjIsIDB4MzgwNjg5YmUsIDB4NzI3NzY2YWYsIDB4Nzc2ZmUxMmUsIDB4Zjk4NmJkZjIsCisJMHhkZWMzNjRhYSwgMHg0ZTMwYmJlNCwgMHg4ZjQxNGVhZSwgMHhlM2I5MmIzNiwgMHg0OThmOWZiOSwgMHgzZDcyZTdjNCwKKwkweDExZjMxM2Y2LCAweDZmZjU2ZDhmLCAweGQ4MWNiMGI4LCAweDcxOGMyM2Q5LCAweDU3MzVmOTY3LCAweGU0MWEyNmZiLAorCTB4YjlmMjg3ZmUsIDB4MzcxMmI3NGUsIDB4MzkyYmNiYzcsIDB4OWNmMDkzY2QsIDB4ZmYwZDcxNDgsIDB4ZmQ3MTYxOGUsCisJMHg4MGRjYjc2ZCwgMHhjZmNkNWVmOCwgMHhjYzJiNjdkMywgMHg5NjNjODMyZiwgMHhmYWVkYjk2YywgMHhmY2JjZjA2MSwKKwkweGVjNWU1MTk5LCAweDJiNzE1NDBmLCAweDc4ZGUyZjNlLCAweDNkMTVjZTkyLCAweDhlZmVlMTZhLCAweDA1MDRmYTQ4LAorCTB4MTNmYTNkOWYsIDB4MzllYTAxNDcsIDB4Y2I3NWVmYTgsIDB4OWY3ZjdhMDgsIDB4MjM5YmVjMDUsIDB4ZGNlZjgzZTMsCisJMHhiMzhlNDUwNSwgMHhhMDZmMGZmYSwgMHg5ZjMzMzBmOCwgMHg2ODRiZGYwMiwgMHg5N2FlNzViZiwgMHhlOWU4ZWJiYywKKwkweGQxOWJlY2MyLCAweGEwMmRmNzU0LCAweDhmYzg3OTc4LCAweDBjMjk3ZWJhLCAweGE0ODllYjk5LCAweDZmYzE2YWVmLAorCTB4ZTQ2MjFiZjAsIDB4N2Q3MmM4OTMsIDB4ZGNlOTA0YTYsIDB4ZDA3Y2M5NzQsIDB4NDNmZjA2OTMsIDB4OGE2YWExYzksCisJMHgwNzZjOGRjZiwgMHhjMTk4NTgyMywgMHhlMTgxZGEwZSwgMHg5Yjk3Mjg3NSwgMHhmYzE2OWM3OCwgMHg4OGI2NWIyNCwKKwkweDYxYzQxZjYzLCAweGY5MTVjN2JhLCAweGY4YTIxODExLCAweDgzZDEzNjUyLCAweDRkOTliZDc4LCAweDM3ZDc1NGM2LAorCTB4YzNmNTM5NmQsIDB4NTJhYmZjYjEsIDB4YTJiZjczY2IsIDB4ZTcyNDljZmEsIDB4ZGQzMGVlNmQsIDB4OWM0ZmRiNmYsCisJMHg3MGYzNmY0NywgMHg4ZmVlZmY1OCwgMHg2NGQ0NWY5ZSwgMHhlM2FlYjhhNywgMHhiZmQyMzQyNywgMHgxNDllMzAwYiwKKwkweGI3NjhiZmNiLCAweDNkNjhjMDU4LCAweDc4Y2ZhNWJlLCAweGFiNmU1MzhjLCAweDFmYTVmN2U3LCAweDVlMzNlZmFiLAorCTB4MWViY2NiM2IsIDB4ZjlmNDRmYTksIDB4MzlmZTIwZjYsIDB4YmU3YWZkMWEsIDB4ODNjZTE3MjYsIDB4NzcxYzc4OGIsCisJMHhjYzhhOWY0YSwgMHhkMjc0Mjg4YSwgMHgyYWQ0NGJkZiwgMHhkM2ZkNzEzMiwgMHhiYmMzOGY3OSwgMHhjYzE0ZjA4ZSwKKwkweDlmZWZjODUwLCAweDVjOWE3ZTRhLCAweGU4M2E5ZmUxLCAweDAyZWRiZmY2LCAweGFjYTEzOWJhLCAweGVjMjVmZTBmLAorCTB4ZGZhMWQ3OTMsIDB4ZmJkOTBiZjMsIDB4Zjc1MDdiODAsIDB4YWNhY2ZkM2UsIDB4YTNkZjlkMDAsIDB4ZmI0MGY0MGYsCisJMHg1NjE2MTUzMywgMHhlMjY2ZGY4MCwgMHg2MDljMzUzYywgMHhhZTY3NGY5YSwgMHg3MTllMjg5NiwgMHg3OGYzNzJkNiwKKwkweGUzNmViZWYwLCAweGFhYzA1YWZjLCAweDU2MjJkZWE5LCAweDZhYzE2OTRmLCAweGNlMjE3ZTczLCAweDI3M2MyZTQ3LAorCTB4OGE3NmUzYzcsIDB4ZmFmOWNkNmEsIDB4OGQ5MmMwYjksIDB4ZjBkMWFjNjcsIDB4YzdkMzM1ZjYsIDB4YzcwMmZiZTcsCisJMHhhMzZjZGQyNywgMHgyYWI3ZGRmZSwgMHg2OTc3ZWY4ZSwgMHg2ZGYzODdjYywgMHhlOTI3MmFlNywgMHhhMDE2NjJmZiwKKwkweGU2MjlkYzdlLCAweDczMDdmMmZkLCAweGVkMjBiMzdkLCAweDM3ZDMzZjk4LCAweGNiOWUwZmFiLCAweDJkMjNmM2U3LAorCTB4Zjk5ZTQ5MTksIDB4MTNjNTdlYmQsIDB4YmYwMDc4NTksIDB4YmNlMTg3Y2YsIDB4ODUyNGRjNWIsIDB4MDM2YzIxODcsCisJMHg5ZmMxMWQ1MSwgMHgzODI2YmRlMywgMHgzNjc5ZTM3ZSwgMHg2ZTM4ZmM3ZCwgMHgzZWY2NzNlMywgMHg5ZTExNmZhNywKKwkweGI4Zjk5MjliLCAweDAyMjVmOThkLCAweGFkMWIyNTFmLCAweDk4ZDE3ZjI2LCAweDc5ZDA1MjhkLCAweDZhYWY5ZTM5LAorCTB4MWFjYWY3YTEsIDB4ZjU0ZDU4Y2UsIDB4ZWMxZDc5OGEsIDB4YmEwNzY2MDEsIDB4MmI1ODI5OGQsIDB4NzU1NjYwZTMsCisJMHgyNWQwZjFlOSwgMHgxY2NiY2VkMSwgMHg3NTVjNzgxMCwgMHg5NDVmNWU1YiwgMHhiZWQxYzdkYiwgMHg5ZDEwMjdlZCwKKwkweGY4NGE3YTQzLCAweDA2ZDg1OGEzLCAweGVjOGNjNWVkLCAweDdiM2YyOTgyLCAweGUyOTM4NzIxLCAweDI2YTZiZDFlLAorCTB4NGEyZmJlOGQsIDB4NjUzMzYxZmIsIDB4MGU3ODliZmYsIDB4ZDAzZTMyYjMsIDB4OTlkYTBlMzcsIDB4MmJhNWYxNjksCisJMHhjMWJlYmYyNCwgMHhjZjlkNmZlNCwgMHg4OGU0ZjBmMSwgMHhhMjJhNGI4YSwgMHgzYTc1YjdhYywgMHg1M2Q1MjEzZiwKKwkweDNiNzA0MDljLCAweDU5OWRhNzlmLCAweDIwYzA2YTlkLCAweGI4ZTMyMzE3LCAweGQzZGI4Y2JlLCAweDNhOGZlNzQyLAorCTB4ZmU3NDRhYjcsIDB4MjBlOTI5ZjksIDB4ZWE3ZTBmOWQsIDB4ZmY0MzBmNWEsIDB4MDlkMDJhNDAsIDB4MTI1M2VmZjUsCisJMHhmY2Y3ODQ1YiwgMHgzNGRjMzU2NSwgMHg3M2E0MGRlNywgMHhlMzE3OGM1NiwgMHhjNjFiNGEwZiwgMHgxYTBlYTVjOSwKKwkweDYyZTNiNzNmLCAweGJlZTJkNjJiLCAweDIxOGNjYTU0LCAweDYxZGY5MDIzLCAweDg2NmUzM2RjLCAweDNjZTNhM2U3LAorCTB4MDc1ZjVlZDQsIDB4YzJlYTdiYTcsIDB4YTFkY2M2NjAsIDB4Y2U3ZmJlZDgsIDB4YzM4ZjI4MWIsIDB4N2NiY2U4NjIsCisJMHg5OWNhZTAwYSwgMHhiNDMyZTk0MCwgMHhlNjU5NTJjZiwgMHg1MzMzYjQ2ZSwgMHhhMDQ2NzhhNywgMHg4Yjk1N2Y0ZiwKKwkweDkxNjQ5M2I3LCAweGY2ODRkYzY3LCAweDI3MGUwOGUzLCAweGQ2ZjkyYzNjLCAweGEwYWUxMzExLCAweGZjYWM1Mjc2LAorCTB4MWNmODdhOTMsIDB4ZmExYjRkZWQsIDB4N2EwNjFjMjcsIDB4YzRjOGE4NGYsIDB4ZjEwNjUzZjYsIDB4YTcwYjUxMzQsCisJMHhiYmZiM2Q2MSwgMHg3NWEwMWVlOCwgMHgyMzM3M2NjOCwgMHhiYmVmM2Q3ZCwgMHgyZWI4Mjk3MSwgMHgwYjA2ZGZkYywKKwkweGZiNjNkMDc1LCAweDk3ZmRmNGQzLCAweGZiZWM4M2IwLCAweGYyZjA4NzBiLCAweDk3OTk0ZWMyLCAweDI0ZTdjZmM5LAorCTB4MTVmNmViYTYsIDB4ZmFhMWQ3MmYsIDB4NWVhMjQ2ZTIsIDB4ZjlkYjhmN2QsIDB4ZTQ3YzM5NWYsIDB4ZWI0MmJmMDcsCisJMHhhMDgwM2NlNSwgMHg1OGU5Zjk1MywgMHgwYmNjMzIxNiwgMHgyMWJlZDNlNSwgMHhiNGZjYjNmYiwgMHhlZjFjZjRjYiwKKwkweDk1YzYzNTA5LCAweGExZWMxNDk3LCAweGIyOTQzYmVmLCAweDUwOWYzYTY2LCAweDgzOGU2ZjVhLCAweDdhMjYyMmJmLAorCTB4OTc5ZjNhYmIsIDB4MzA1OTk2OWYsIDB4Zjk5YWJiNmEsIDB4MmMzZWU5ZjksIDB4Yjk1YTI3ZDgsIDB4ZDNmM2YzNjQsCisJMHhmYzZlMTk5MiwgMHhlODUzOTQ1NiwgMHg3MTY5Y2IzOSwgMHgwYTcxZmFlMSwgMHg2N2E4NDdjZSwgMHg3YWEwOTY0MiwKKwkweGRhNWQzNzc5LCAweDc5YTYyZGRkLCAweGUxYzNkZGE4LCAweGE4YmZiMTBlLCAweGI3ZjVlYmU3LCAweDM5YzRkMzRmLAorCTB4N2JjZjdlM2QsIDB4MjAyODI1NWIsIDB4NGRkM2NmYzAsIDB4NWRkZmM5MjcsIDB4ZjA5YmI0ZDIsIDB4Mzc0NWYzYTMsCisJMHhkMDU5NjI5ZSwgMHhhYWU0YTc4MCwgMHg2NDA1YjBlNiwgMHhmZGI4ZTlmYywgMHgwMjVlODc0YiwgMHhjYmEzZDkyNCwKKwkweDdkNGIzYmYzLCAweGJmMWYyMTYzLCAweGVmOTA2MTZiLCAweDc5MmVhY2Q4LCAweGNhYjM3NTI3LCAweGYwZmQwYjIyLAorCTB4NjM4OWQyZWUsIDB4ZGYyZjMwOGQsIDB4MzVmMzdlZmQsIDB4YjJiNzgxMTMsIDB4NmJmN2YyODYsIDB4NmI3YmRlZTMsCisJMHg3NTA2YzYyMSwgMHg0Y2U4M2I5ZCwgMHhiMDBkM2JmNywgMHgwMDc2MDIyZCwgMHhiYjAwY2MzYywgMHgyMzEzZjIyMywKKwkweGUwMjM1M2YyLCAweGNkYmU1ZTM0LCAweGJkOTc0ZTE5LCAweGZiOGU2ZDhjLCAweGY0MDUxYWUwLCAweGYwZGY1YjVjLAorCTB4NjQ3OWJjNzQsIDB4ZDc0N2Q1NzksIDB4NGI4ZWY3ZTAsIDB4N2JmN2Y4YjMsIDB4YWYyNDlhY2IsIDB4NjVhM2QwNjQsCisJMHhlNDg3MWU1ZSwgMHgzMzY4YjZmMCwgMHg5YTFlMjI4NywgMHg1MDdkNDRkZiwgMHg3MWI5MjhkMiwgMHhkZmE4ZTBmZCwKKwkweGRmMTgyNjEyLCAweGFiZGUxOGYzLCAweDkyZDNlYmU3LCAweDVlZjQ4M2ZhLCAweGIxMGZmNWFmLCAweDNhM2YzYzkwLAorCTB4NzcyYTczZTQsIDB4MzYyZGZkYWUsIDB4YWYzZGZjYzUsIDB4NTJiYmY2ZGUsIDB4NTBiNzgxMmQsIDB4YzdmN2VhZGYsCisJMHhhOGY5NmRiNywgMHgyMGFhN2JmYiwgMHg3ZDdkZWQ3ZiwgMHg0NjlmNDk3YiwgMHhjNzJmNWI5YywgMHhlNWJhMzhmZSwKKwkweGEzZTNjNzQ1LCAweDdkZDE0ZTQzLCAweGQ2MTg3ZmJhLCAweDA3OWEwMWY0LCAweDJlNGVmM2IxLCAweGZmNzVhYmMwLAorCTB4MTQ3ODdhNTQsIDB4Mjc3ODVmZGEsIDB4NGYxZmNlMmYsIDB4NzA0YmExNDgsIDB4MDU5YTdhNWUsIDB4ZWY3NmMxMmUsCisJMHgzNzY4YmQyOSwgMHg4MGVjNmE3ZSwgMHg1ZTBjZjJkYSwgMHhkYzRkZjMwOSwgMHgwMWZmYzI0OSwgMHhmYzAwY2I2NywKKwkweGM3ZTlkZDY0LCAweGE0ZTFjMmZmLCAweGU2MDliYTE2LCAweGFmZWZlYWI2LCAweDFlY2RlZmMxLCAweGMwMzJkMDE4LAorCTB4OGZmN2YwMDIsIDB4ZTA5OTNhNWYsIDB4NDE5ZTVhOGIsIDB4MDRlYWMyZjgsIDB4MTk2YjBmMGUsIDB4MDNmYmMzMjAsCisJMHgyMzI2N2Q4MywgMHhhM2JiZDZmZCwgMHhhMTA5ZmRjYiwgMHhjNWZlZjQ2ZiwgMHg4OTFkZjYwZSwgMHg4NGFhZmI0MywKKwkweDJjNzgzYmNmLCAweDc1N2EwNmRhLCAweDRkYjFkMTdhLCAweGQzMWYwMWViLCAweGY0OTYyM2ZmLCAweDViYjZmYWRkLAorCTB4MWUxM2YzYWUsIDB4NmY4YzdlODIsIDB4YTZmODExNGMsIDB4YmJmNDkxNzksIDB4NWY0NGY2NDIsIDB4YmExMzBiOWMsCisJMHg2ZjRjZTllOSwgMHg3MWJjZDBmNiwgMHhiNDE2YzU2OSwgMHgwZmE2NTIxZiwgMHg1NWUzNzlhNSwgMHhlZTI3ZWY5NywKKwkweGU5ZTlkZDUxLCAweGM0ZmU5ZTI0LCAweDViZmFlNmVkLCAweDQ2YmM1MGI2LCAweGIyNGU0M2NhLCAweGRmMTcxZWFiLAorCTB4MjNiOTAwNjcsIDB4YmEwODcwZmUsIDB4M2M3Y2RjNTgsIDB4NzMxOTBkZmYsIDB4ODAwMDFiZDEsIDB4MDAwMDgwMDAsCisJMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGRkZmYwMCwgMHhjNTk0NzgwZCwgMHhiYmJjZjBiNSwgMHgyNmVmZmVlZiwKKwkweGIyNGQ5YmJiLCAweGYzNzlmOTA5LCAweDcxMTAwODQzLCAweGE5MTg5MzEzLCAweDE4ODg0ZGQ2LCAweDIyMGJiNTMxLAorCTB4NDk3MTZiNjIsIDB4YzkzMDQ5ZjgsIDB4MmQxNmFkNDYsIDB4NTQ0ODU5YmQsIDB4NDZkMTA4ODIsIDB4ZTFiODBhMDQsCisJMHhmZDJiNjIwMiwgMHgxYThjNDU4MiwgMHhmNjg4ODJlOCwgMHg3MmRmYmQyYiwgMHhiZDNmYWRlYiwgMHg4YTdlMWJkNywKKwkweGI0NTY0Mjg4LCAweGViNmRlYTVjLCAweDI2NjY3MzlkLCAweDVjOTM3N2Q5LCAweDlmN2I3YWE4LCAweGJlOGY4YmU3LAorCTB4Y2VmMzNiY2UsIDB4ZmU3MzM5OWMsIDB4YjMzMzljZTYsIDB4OTA4NmJiMWEsIDB4MjU4ZTQyNjQsIDB4NGVjNzMwZGMsCisJMHhlNjMxZGY5ZiwgMHgyMjRjOWQxNSwgMHhmNDMzYmJhNCwgMHhjODRiNDk5YywgMHhjNDIxMTI3YiwgMHgwOWYwNDg0NSwKKwkweDBlN2I2ODUzLCAweGQxZWRkZjIxLCAweGI0ODk3NTA0LCAweDczNGRlMWRlLCAweDQ0YjJkMTE2LCAweGMzNDViZDdjLAorCTB4ZDU3ZmJkZTUsIDB4ZDJiM2U1ZGUsIDB4ZDMyZDMxNzIsIDB4OTkxMmFiZTcsIDB4YmQzM2Y1OGIsIDB4ZmU1YTBlNjksCisJMHhhN2FlZmUwMiwgMHg5ZjU2MWVlNSwgMHg1OGFkMjVhZSwgMHg3ZmJlYzM5ZiwgMHhlNWRjODRhYSwgMHg3NmQ0Y2ZhMywKKwkweDdkMjk2ZTNhLCAweGI1Yjg5ZGFlLCAweDkxNmI4ZTlkLCAweDBiY2ExNzg5LCAweDVkNmMxNmU3LCAweDczNmE2MTRlLAorCTB4ODk3ODQyY2MsIDB4NTEyNjliZDcsIDB4ZTYzNjRlZjgsIDB4NzZkMTU2NmEsIDB4YzhhZmE3YmYsIDB4NTE1Yzg0MzUsCisJMHg5N2IwY2RlMCwgMHhmZjQwZjlkMSwgMHg0NGQyMWM3NCwgMHgzYzM2OTUyNywgMHgzNzk4MWNmZSwgMHg3YWQ3YWZhZCwKKwkweGNmM2E2NGIzLCAweDM5ZmUxZGRiLCAweGUzNWViZWQwLCAweGQwYjQ0MjlkLCAweDc3YzBiNzg5LCAweDg4MjNiNDA1LAorCTB4M2I3NjM5OWYsIDB4NDBmMjI3YjYsIDB4ZmZmZmJjMTksIDB4Yjg5NTRmMDgsIDB4NGYxMTVmZWUsIDB4NzUzNGVmNzcsCisJMHhmODI0MmM5ZCwgMHhiN2ZkMDVmNywgMHgyYWExZDdiOSwgMHhiYWQyZmEwNywgMHhjYjg3MWE0ZSwgMHhkMGZmYzM3NywKKwkweDI0YWQ0ODcxLCAweDJjM2ExNDkzLCAweDhkNmUyMmFiLCAweGJmZTgzNmZmLCAweDdhMDdlOTc5LCAweDUxMzc4MWEyLAorCTB4ZjAyZmY0M2QsIDB4ZWIwYTRlYmUsIDB4ODJmY2U5NTIsIDB4NzZjZjI0ZmIsIDB4YjJjZmRlYzIsIDB4ZTg5NTkyMTEsCisJMHgyMWU2MTNiZiwgMHhjM2Y3OWVlMCwgMHhkMTdmMzRlNiwgMHgzZjJjN2NmMCwgMHg3NmU2YTk3OCwgMHhlNGI3OWM1YSwKKwkweGY0ZWRhZWNjLCAweDU5MGY3OWZiLCAweGRiODY1MTA4LCAweDlkNzExZWQzLCAweGI4Y2Y3ZmRmLCAweDlmNDk1YzlhLAorCTB4ODZiMGRlZmEsIDB4MTlmZGViZTIsIDB4YjY5Y2IzYzQsIDB4MWE0MzVmN2IsIDB4NzNlZmZmMDAsIDB4NzQzZjk1YmMsCisJMHg4NTMyMTFmNywgMHhiNWQ5NWY5MCwgMHhkMDQ5OWRmOCwgMHhiZGRiZTQ4MywgMHg1M2I3ZTI4OCwgMHhkMDIzNDEyMiwKKwkweGQyM2Q0Y2MzLCAweGQyODg2MGMzLCAweGZlYjA5NWMzLCAweGZiZTg3ZDc0LCAweDg3MjcwN2VlLCAweDA2N2Q3NDgyLAorCTB4NjE5MTAwYzksIDB4YmVjNDE1M2UsIDB4YmZhOTg5NWQsIDB4MjllYjAwYTMsIDB4YjQ0ZDA0OWQsIDB4MGU2OGRhM2UsCisJMHg1ZTgwOTU2ZCwgMHg1MGE1YTAyOCwgMHg1ZmViMDkzZiwgMHgwN2ZhZDg5NSwgMHgzOGUyMzBlZiwgMHgxZDE5MzNkZCwKKwkweDQzM2EzNzc2LCAweGI2MDAxY2MxLCAweGM2ZGUwMDhiLCAweDc2OTRhM2EyLCAweDY0NDg3NDgyLCAweGI2OTk5NGVmLAorCTB4ZTM2YzdjNjEsIDB4M2E1MmMxNzIsIDB4YjRkYmUyZjAsIDB4ZTRkYWIyM2YsIDB4YjAxZjRmMTksIDB4YmI5NDMyODQsCisJMHg0YTNjNzE1MiwgMHhiZTkxYWIwZiwgMHhmZDQ3MDY2NCwgMHhhYjQyZDM4ZiwgMHgzOTRmNWM3MCwgMHgzNmEzY2JhYywKKwkweDFmNzg3Y2VmLCAweDAxNDU5MWZkLCAweGM4OTkzN2Y4LCAweDdkMDk2MzRhLCAweGU4YzNhNDRhLCAweGUxYzBlYmE0LAorCTB4MTM0ZjVkMjEsIDB4NjBiYjgzYTAsIDB4N2Y4NzhhMDAsIDB4NTM2ZjM4NmYsIDB4ZDg5ZmZiZTgsIDB4MDgwMzg0MjUsCisJMHg0ODRlNThjZCwgMHg3NWY1NjExZCwgMHhhNGM3MmNjYiwgMHg4NmQ0ZjAyOSwgMHhkZGY0MDkwZCwgMHgwM2JjMWJjYSwKKwkweGQ5NzJiZTgyLCAweGYzZmI0OGQzLCAweGViMjJiYTczLCAweDgzYzAzNmEzLCAweDgwNGJiZTFmLCAweDI5YjczZmZlLAorCTB4ZWZkMzI4NTYsIDB4ZDNmMmMwYTcsIDB4YmY4NzBiZWYsIDB4N2RmMDM5ZmYsIDB4ZTBjN2MwMTksIDB4NjUxNjZkMjcsCisJMHgxZjhjMzRiYiwgMHg4MGI5ZmNmMSwgMHg2ZjY5ZWJhZiwgMHg5YzYyNzhlYywgMHhkOThmN2VmOCwgMHhmMDA3ZmZiZCwKKwkweDRlMWVmMTQ1LCAweGI0NWUwMTc0LCAweGYwZjFhZWI4LCAweGM3ZDFmNGJhLCAweDVlN2ViNDRkLCAweDgyYjFkNjliLAorCTB4ZDRiZmQzZTIsIDB4ZjAxNWYzODYsIDB4YmQxYTk1ZGUsIDB4ZWM4ZGU0OGUsIDB4YTVhNTk0ZmYsIDB4MmZmOTg2NWMsCisJMHg5NjRmNzQ2NSwgMHg2MmUyMjgxOSwgMHgyZTFmYTJmMSwgMHg0ODVkZDI1MywgMHhkMjM1ODdhMiwgMHhmMGU1ZWYyOCwKKwkweDUxN2Y4MDAxLCAweGY4ZjdjYzc3LCAweDYyMWFiZmRmLCAweDIxYmUwOWRiLCAweDNmMDcxNDhhLCAweDkyNDUyYmE3LAorCTB4MTJmY2RkNjEsIDB4M2ViZDM3NWIsIDB4NTZlNDBmM2EsIDB4OWYwMmRjM2MsIDB4OGRlNWM2ZmYsIDB4N2M3ODhiYTAsCisJMHhiYmUwMWJmZiwgMHg1ZGJlMjQ2YywgMHhlODRjODFmYSwgMHg4MGQ0YmZkNywgMHg5ZmVmOGE3OCwgMHhmNzdlMTA5MCwKKwkweDRkMDQ4OWI0LCAweDRiZDZlZTk0LCAweGZhZWJkMjEyLCAweDkwMjEyZDA3LCAweGU4YTY4MzliLCAweDYwNjdjMDBlLAorCTB4ZGViODhkZmYsIDB4MGFjZDFhZTcsIDB4ZWEzNjRkYTEsIDB4ZjcwNWJmMTksIDB4MTcxZjE4ZGIsIDB4ZGM4MDE0MGMsCisJMHhlY2U3NDczYiwgMHhlZTczZWJhNSwgMHhhMDllZGEzNywgMHhhNDIwODAyNCwgMHhhZGRhMzdlNSwgMHg1ZWU3ZmY0MCwKKwkweGIzZjU4OWJlLCAweDVhMTBhMmRjLCAweGU5ODYwMDBlLCAweDdmZTA4MWI4LCAweDU3OGExMWI2LCAweGM3MTE5NjY5LAorCTB4MGE1N2IxM2YsIDB4OGZiZWEwMTksIDB4NWU0NjM5ZTIsIDB4MzZmZmEzOWUsIDB4OGRjYjBjOTQsIDB4MzgwMGE4NDEsCisJMHgwNzA4MmNmYSwgMHg4ZTIzNjk5ZCwgMHg1OTMzNWRmNywgMHhkMTZmYzc0NSwgMHhhZDBkNWU0OCwgMHgyOTMyNTk2ZiwKKwkweDMxZTBjZWQ0LCAweDE2ZDVjYWM2LCAweDRhOTBlOTBkLCAweDQ1YmZmOTg2LCAweGRlZTBiYzczLCAweGE3Mjc1NjIyLAorCTB4NjBhYzc5NzAsIDB4ODUxMjQzYmIsIDB4M2FiOGM5YjMsIDB4MDVmYTA1YTIsIDB4NGJmNWEwM2UsIDB4Nzg2NzNlYTAsCisJMHg3ZjU2NWExZCwgMHg0Nzk4MTdmNCwgMHg3ZDM1MWVjYiwgMHg5ZWFmM2QzNCwgMHhiYTU4OTJjNywgMHgxN2E2MTljYSwKKwkweDE3YzMyOTRiLCAweGYxYTEyNmE5LCAweDJmMWI1ZTE0LCAweDIxMjI2YTViLCAweGU5NjNlMDJkLCAweDJhZTI3MjM0LAorCTB4YzBlMGY0ZGEsIDB4NWIyM2EwNzQsIDB4YTNhOTJmNjksIDB4ZTI2OWMwY2YsIDB4YTdiODUxMGQsIDB4MzZiY2Y3ZjYsCisJMHhkNDc3YjY4ZSwgMHhiYTYxMzI0NCwgMHhjZGJmYTU4MSwgMHhmMGQ1NzkzYiwgMHhhZjM4MGIzYSwgMHg0YjQyN2ZlOSwKKwkweDdlMWUzOGFjLCAweGVlZjE0MTQ3LCAweDg5YmI2MmI2LCAweDdkODhhZWIzLCAweDkyZWZjMGFlLCAweDBmMmY0YzM1LAorCTB4MWZlMDJiYzAsIDB4NzVjZGU5OTksIDB4ZmQ1MjZmNWMsIDB4NjE3YWYyOGEsIDB4YWZkNDA0ZDcsIDB4Y2U0MGZmYTAsCisJMHhmNGMwOTUzZCwgMHg5MDNkYzgzMSwgMHhhYThlNmQzMywgMHg5ZTc0MWNhYiwgMHgxNGQ1Njc2NiwgMHhjNzFiMTk0NywKKwkweDI3ZTk4MzY3LCAweGE3ODhmZWExLCAweDI0M2Q3OGViLCAweGI1ZTZhNWRhLCAweGM3NWFiNzE2LCAweDBjZjk0NzZlLAorCTB4OTBkZDE2ZjEsIDB4MmM4OGU0YzgsIDB4YWZkMTc5NjEsIDB4MTBhYjNkNzUsIDB4ZTZlOTE5M2UsIDB4MjgzOWNkZGUsCisJMHg5NzQ4MWI5NywgMHg4OWJjZTgxZSwgMHhjNzQwZjQ4NCwgMHg5ODI0OGM4YiwgMHgxMTYyZTk0MCwgMHg5ZjQ4OTY2ZCwKKwkweDg4MWJkNzhiLCAweDhkN2ViMzEyLCAweDg5Yjk3NTIxLCAweDQ5YmI4NWNiLCAweDdiYmZiZjA0LCAweDM1N2Q1YzY3LAorCTB4N2Q2OGRiMDksIDB4MmQ4NDkxYjMsIDB4ZDc1NWVjZjAsIDB4OGU3ZDUwYjcsIDB4ODVmN2Q2N2MsIDB4ZTkzZGY2MjEsCisJMHg4YmJkZjM2NiwgMHgzYWEzYmJhZiwgMHg3OWQzZjVhNCwgMHhkZDUxMzA2ZiwgMHg1ZDA2ODRlYSwgMHg5NzUzM2ViOCwKKwkweDI2N2FlMGY1LCAweDFlNzM3ODk2LCAweDJiZjJiZDA2LCAweGE1MmI2NzlkLCAweGY1ZjAzZmRiLCAweDY2MzlmODEyLAorCTB4YmMwMGFhYWYsIDB4OWMxYWI1OWIsIDB4MDM2MWY0N2YsIDB4ZDUyNGU3ZTIsIDB4NmJmZWIwZTMsIDB4NTlhZWU0MWQsCisJMHg4ZGFlNzlmNCwgMHg4MDc1ZjM3OCwgMHgyY2Q2N2IyNiwgMHhhZjNjNDhkYiwgMHgwMGQ0YzU3YSwgMHhkMGUwZDM3NCwKKwkweGQzMmFlOGE4LCAweGY5NzJjM2ExLCAweGU1ZmY4ZTBhLCAweDFjZDZkMDk2LCAweGEwMTRmNzQ0LCAweGExNWNmMmE3LAorCTB4OTk5NGM5NTcsIDB4NDc0YzdjYjQsIDB4NmU1YTNiZWQsIDB4NDNmNTYzOTksIDB4NGY2MDAzN2YsIDB4MGVmZGYyZDAsCisJMHg3N2VlY2YyNiwgMHg0NTNkNzFlOCwgMHhkMDU3Y2M1OSwgMHhmYjA3MWQwZCwgMHg5ZWM1NWYzMywgMHg0MzY1OGUwMiwKKwkweDc0NjA5ZmVkLCAweGJhZjBmNWMzLCAweGVhMGY3MzQ2LCAweGQ1ZmEyMWUxLCAweDIyZGZhNDEwLCAweGZhZjAxZTlmLAorCTB4ZjMyYjk3MGEsIDB4ZjhhMTZlYzEsIDB4MTQxMjg1N2UsIDB4MmY2MDhmYzgsIDB4M2UyOTVmYjMsIDB4ZTVhNTJkZTYsCisJMHg3OTE3NGU1NywgMHg2NzQwMjk1NiwgMHhmMmJjZGU0YywgMHg0MTU5MzMxZCwgMHhjY2YzN2M4NywgMHgyN2ZiMWY0ZiwKKwkweGI0ZmU3ZjVhLCAweGZhZDAzMTVlLCAweDc0NmI0MDA1LCAweDg4OTE1ZWZkLCAweGJlMGJjNjE3LCAweGJlODEwODY4LAorCTB4N2IzM2QyNmMsIDB4MTVmZjY5YjQsIDB4ZmJkMTllY2MsIDB4NzE4NDJjMzcsIDB4YzA3OWQwNWUsIDB4MDg0YTY5ZGUsCisJMHhlYjAzYjczZCwgMHhhMjk0M2NkMywgMHg4NjNhYWJjOSwgMHgxNmNiZTBjZiwgMHhmNDM5YmRmNiwgMHhhMGJiOWZiMywKKwkweGE0MTNkNTNlLCAweGZmMjZhM2VkLCAweDc0ZDc1ODQ2LCAweDdhODg5MjgzLCAweGMyNWFkN2Y5LCAweDM4MTcwOWM2LAorCTB4ODc4ZjVlMjgsIDB4OWM3ZGRkOTgsIDB4NGUzMDQ5NTYsIDB4YTFmYjBkYmYsIDB4OTBiNjlhN2MsIDB4MzNhMjczZjYsCisJMHhlNTQzZTcxNSwgMHgyNzU5ZGEyZiwgMHg4MmI2MThkNiwgMHgzNDM3NWRmYywgMHg4ZmVkODRhZSwgMHhkM2QzN2NlYiwKKwkweDhiZjhmOTY4LCAweGI0ZTU5ZWM1LCAweDBmYTdkMDZhLCAweDA3M2QyOWViLCAweGFmYmIzMmQ2LCAweDAxNmNhMzVlLAorCTB4MTZmZDkwZmMsIDB4OGY1ODg3OWMsIDB4YjVjNTlhYzAsIDB4YjI1ODFmNTAsIDB4OGY5MDE2ZWMsIDB4YzgzOWYxNjMsCisJMHgzNzIzMTI3YiwgMHgxNjY4OTFjZiwgMHg4NmM2ZDNmMCwgMHhlODMwZGVkYywgMHgxZTg5ZmU5NSwgMHg0ZGM0YWY1NCwKKwkweDhkZDI5ZjE3LCAweGE5M2RiNTlkLCAweGVlOGRmODYzLCAweDVmM2QyMWQzLCAweDE3NDBmZjZlLCAweDQzZDMzOTcyLAorCTB4Y2E4MDRlMzAsIDB4MGZmODIyNjUsIDB4NTk0YzcyZTUsIDB4YWQ5OTVhM2IsIDB4NTQ5NWUwNjMsIDB4ZWJhOWRmNmUsCisJMHg0N2ZjMTI1MywgMHg5ZTVhNWQ2MCwgMHg5N2Y3OGZmYywgMHgxNDVlMzAyYSwgMHg0YWU5MjJlNSwgMHhhOTNjYmU0NiwKKwkweGJhMDNjZWYzLCAweGY1ODc1NDc1LCAweGZkN2EzMTc1LCAweDk5ZDk4M2E0LCAweDA3NmUwNmY1LCAweDk2M2ViMDkyLAorCTB4Nzk3ZDQ1MGYsIDB4YzVlZTlhOTUsIDB4N2ZhNzA0ZjMsIDB4ZjdjOTg0NWIsIDB4Y2UxYWY1OTEsIDB4NDAxYWI3MWYsCisJMHgyMDY1NGQ4ZiwgMHgyM2QwNmM5MywgMHhjMTVmZTg1NiwgMHgwZTllYTdmZSwgMHgzOTY5ZWJlYiwgMHhiZjU4NTk3YiwKKwkweDRmODEzZjg4LCAweDQ2YzNiZTI4LCAweDFiOTNlZjNhLCAweDI5YmY4YzZjLCAweDQ1OWZhMDFhLCAweGU1ZjUwNDE1LAorCTB4NjNiNTJkMjIsIDB4ZDJiZGUwNGIsIDB4ZTVkNzQwMzcsIDB4YTQwZThiZDQsIDB4OGE2N2YyMmYsIDB4ZjllZjhhMTUsCisJMHg1MDMzYjc4NCwgMHhiMWNhOTdiYiwgMHgzMGE0M2E5NywgMHhhZmU2MGJlYywgMHhlNTM1NmMzNywgMHhiNTdiNWYwMCwKKwkweGNkY2Y1ODM2LCAweGY5YjFjYTEyLCAweDFiMDU5NTFkLCAweDllYzk3OTY4LCAweDEzZmQ3MDJiLCAweDJlNWQxODJhLAorCTB4MmY1MDM5MDksIDB4YjFmMmU1NGUsIDB4YTNkMjEwZGUsIDB4ODkzM2ZlMWQsIDB4ZjY4ODNlYzAsIDB4MTM3NGY2OGYsCisJMHg2NGFkMjhmZCwgMHhhZTQwMWUyNCwgMHgxNDIxZThhYiwgMHhkMWY2YTY1MywgMHg1NzI2NWVkNCwgMHgyNGU3OTUwOSwKKwkweGYyMTI2ZWM2LCAweDg5MzhlNDFlLCAweGY0ZDUwM2IzLCAweDg4ZmExNDExLCAweGE0YTIzZGM5LCAweDcyMTNkYzgyLAorCTB4OTdkZDk4ZjksIDB4M2UzYjQ0ZTgsIDB4OTdkNjE1M2YsIDB4OWI5MzI3YWUsIDB4NmJjNDI1YmIsIDB4N2Q0NTY5MzMsCisJMHhkMGMwZjQyMiwgMHg5YzhmNWNiOCwgMHhiZTk5MDZkMiwgMHhjZjgxM2MzMiwgMHhhZTBlNjc3YywgMHg4YmQyMTJlYiwKKwkweDk1ZTg0NGZhLCAweGRmMjBlOGIxLCAweDg4ZmJlMWE5LCAweGJjNjBlOWQxLCAweDlhZmVjMTUzLCAweDc1ZjA5MzRlLAorCTB4NjVhNmJjNzQsIDB4ODUzY2RjMjQsIDB4NTA1MzZkM2QsIDB4NjkzZDMyM2YsIDB4OWUxMjdhNjQsIDB4OTdkMGNiZTYsCisJMHg1ZTMxZmFmMSwgMHhjMWViYzYxZiwgMHg3N2QzM2Q1NCwgMHgzZDg1OWQ2MiwgMHhkOThkM2E5MywgMHg4NTk3NTMwMSwKKwkweGZjMDhhNGI0LCAweDk0ZWFkZTM1LCAweDI2YmI2MWU0LCAweGE4ZDE4ZWYwLCAweDFmNjUwOTVjLCAweDllZjkwNWM5LAorCTB4MmE2MmY5NTAsIDB4YzRjODBmYWQsIDB4YTE2NTdjMGIsIDB4ZWZhMWU5NzgsIDB4YjdmYjczMzcsIDB4ZDdjZDk1MjcsCisJMHhhYmY0NjdhZCwgMHhkOGE0N2Q5MywgMHhjMTEyZWIwYSwgMHg5OTM0NmY3ZCwgMHgwNTFlODFkOCwgMHhlOGRiMzczZSwKKwkweDFkZjAyNTc3LCAweGVmYTFiN2UzLCAweDFjYzNhNDhkLCAweDJiZDU3ZGYzLCAweDE3M2ZkNDI2LCAweDBjODViNjVlLAorCTB4YjNmODhmNjgsIDB4OTRiZmI0MWQsIDB4NGVkMDFiZGYsIDB4MGQ4YWY3M2QsIDB4YWUzOWU5ZjUsIDB4ZWZjMjVkMGYsCisJMHg3ZTYxMWU0MCwgMHg0MWFlYmUxNiwgMHgwMDhlMzU1MiwgMHhjNjMzNGJlZCwgMHhmNjE0MDg4MSwgMHhkOTgzYjM1OSwKKwkweDIxZWQyMzU5LCAweDk5MTM5ZjVlLCAweDgwY2FlOGMzLCAweDhlMGJjZGZiLCAweDRjYTAwNzgxLCAweDdmYTAyMWUxLAorCTB4N2UzMjcxNmUsIDB4NTY5OWVjMGYsIDB4M2VmYTQzZmMsIDB4MTg3YWIzZTAsIDB4NDBjNWZkZjYsIDB4ZjdlZDA2YWYsCisJMHg3ZDI5MThlNywgMHg4YjJlZDc0ZCwgMHhkMWU3NDgzZSwgMHg4M2I1Njk5YywgMHhmZWNlYWI3ZSwgMHg0MWRkZGZkNywKKwkweGQxZWUxZmNiLCAweGYzYWMwMzExLCAweDQ5NzM2OWY2LCAweGI3ZjJkOGVlLCAweDNlM2JhNDMxLCAweDc3MmZjMzEwLAorCTB4OWI5NzU0ZWYsIDB4NDBlNWQ1N2IsIDB4YmY3Y2JhOWYsIDB4NjUzYWU2ZDMsIDB4ZjllMWQ5NDEsIDB4YzFiNWQyODIsCisJMHg4N2JhN2FkMCwgMHhkNTc4NmJjMiwgMHg4NjY4ZmE4MCwgMHgxMzkwZmZkMywgMHg3YTI2YWRlNCwgMHhjODZjZjAxOCwKKwkweGY4MGE3OGZlLCAweDlmZmQwMjNiLCAweDUwMzRmMDQ4LCAweDMxMTQ4YTM2LCAweDVmNWYwM2ZjLCAweGI2Y2ZjZDMwLAorCTB4NjFiNzgyOGYsIDB4MDZhMzExZmMsIDB4NzVhZDRjZjEsIDB4MTczOTQ0ZjYsIDB4ZDJlMjdjZTAsIDB4NDAzYzNmN2IsCisJMHg5NjY4YmZlNywgMHhkZjAyYmVkOSwgMHhjYWNiNmI3OCwgMHgxODQ0OWVjMSwgMHg0ZGZkNjA0OSwgMHg4YmJlYzIxZiwKKwkweGY1ODQ2YmI2LCAweGI2OTMzNTNmLCAweGFjMzU3MGEzLCAweDg5YjBmYTY3LCAweDZmODAxMjQ0LCAweDY5ZGRhODViLAorCTB4MWJmYzRiYTQsIDB4Nzc3NzZmY2UsIDB4ZjRjM2NiNDQsIDB4MzU5ZGJiN2YsIDB4Zjk0ZTAxMTMsIDB4ZTgwZmIyMmYsCisJMHgzN2U4NTFlMywgMHhlYWRlNGVjNiwgMHg0YmZjNzI2NCwgMHg0NjMyOTlmYiwgMHgwMmI2OTlmOCwgMHgwMzhkOWFmZSwKKwkweGZlM2E0YWZhLCAweDBjZjk3ZmY1LCAweGE1ZTJmZGU1LCAweDgyM2VlMWFmLCAweGIzM2U2M2NlLCAweGM4MGE0ZGFiLAorCTB4MWUwZmM1YTcsIDB4ZGY2MmY3YzAsIDB4OGFkMzJhNzYsIDB4MzZkN2I2ZmIsIDB4YTFkOTU4MTgsIDB4Y2RhOWYyYzcsCisJMHhiOGI5NWY2YywgMHgzY2MxMGE1NywgMHg5MzE3NTlhNSwgMHg2YzJmNDEyYSwgMHg2NDBkZDlkNiwgMHhmMWUzNWUyNCwKKwkweGI3YTZjMWY4LCAweGY1ZWZjMDEzLCAweGY2MWQyMjAxLCAweGM3YjMxMjdiLCAweGI4MDlhZGVjLCAweDEzNWE1MDdmLAorCTB4YWMwY2JlYzAsIDB4OTA0M2YxYmYsIDB4NmIzNzhiOGYsIDB4OTAyZjYwM2QsIDB4Y2ZmNDM2N2QsIDB4YzM3Y2RlMmMsCisJMHhlODU2ODVjNCwgMHg0YWE0ZDNlNywgMHhiOTZkMTNmMCwgMHhkMDU0M2MwMSwgMHg3ZTYyMTdjZSwgMHhmNGY1Yzg5ZSwKKwkweDZhZTViY2JkLCAweGQwZjFmODA1LCAweDYyZmYwNjY2LCAweGQwMDc3MTg3LCAweGQxN2ZmNWQxLCAweDFhYzk3ZjIyLAorCTB4YjkzYjA3ZTIsIDB4MDg5ZGVmNWIsIDB4ZGE2Y2FkN2MsIDB4ZTdkNjFkM2UsIDB4MWFlOTk5ODMsIDB4MjI0YmJmNmMsCisJMHg2MzhiYzA3NiwgMHg1ZmJjMGE2OSwgMHhlMDNlYzkyYywgMHg4ZGY1ODZlMywgMHg0Zjc2YjFiNSwgMHhjN2Y5OTM5ZCwKKwkweGE1OTdiMzJhLCAweGFmOTE1ODBjLCAweDZkM2U4MGU2LCAweDA4Zjk0Y2RlLCAweGRlZjU5ZmM2LCAweDBkNzBlZWVmLAorCTB4NmIzNDk1ZjMsIDB4YTE1MzJkZmQsIDB4MWU3NTY3ZmYsIDB4N2IyMWJiZTAsIDB4OTBiN2QzNjYsIDB4NGMyZmUwYmUsCisJMHhlMzk4YjVmMSwgMHg5OWYyYWJlYiwgMHhhNGY4MjJjMSwgMHhlYWU0MDBiNSwgMHgwNWFkMTVlMiwgMHg4Y2VjNTFmNiwKKwkweDQ0ZDkzZTIxLCAweDIxMzI3MmY5LCAweGY5MTI5ZGE3LCAweDE5OTNmYzAyLCAweDYzYmVkNTRlLCAweGI1OWE3ZGFjLAorCTB4YzY3YTgzNTAsIDB4ZWRkZTIxZTgsIDB4Yjc0YTk5ZjQsIDB4YjcxZmIwYzksIDB4NmY1OGM5MjUsIDB4N2QyM2QyNGIsCisJMHg3N2JhN2ZjYiwgMHhiY2U4NmZlNywgMHgyZmZhNzQ5ZSwgMHgyNmNjYmU4MCwgMHg2YmQwNjJkZSwgMHg0NTVlZDQ0YSwKKwkweDM1NDA1YWNkLCAweDEzNjQ2MWRhLCAweGNjODlhZmIzLCAweDkyZWI4NWZjLCAweDMxNTU4ZWM5LCAweDEyNTM3M2ZiLAorCTB4Mzk1MDRmZGIsIDB4NzNmNDA1ZjEsIDB4MWYzZmRkZWUsIDB4NjRiNmZjMDYsIDB4ZWMwNTNjN2QsIDB4Y2ZjNWMwODUsCisJMHhiMzVmZTBmNCwgMHhkZjI4NGJmNiwgMHgwMTFmMWVhZCwgMHhjZmY0MDliYSwgMHg4NjhhMGIyNCwgMHhjM2MwNzJlNSwKKwkweGJjZmM0NmY0LCAweDk4ZTkyNGU2LCAweGIxNDU3NTFjLCAweDgyOTc0YTlmLCAweDQxMDc2ZWU1LCAweGQ0YjhkYTdhLAorCTB4NDZmZWY2OGMsIDB4NDAwNGM4NTcsIDB4MmI3Y2FkZmYsIDB4ZWU0NmE3ZWMsIDB4ZmI2ZTM0MGYsIDB4NzQwYjU3ODUsCisJMHhlM2VjOTIxZSwgMHhmZTMwYWNhMSwgMHgxNzk4NmMxOCwgMHgzZTcxZDJkMiwgMHhjNDE3OTZkYywgMHg4ZjRhOWVmMiwKKwkweGI3NTlkNjk2LCAweDVjY2FlM2ZkLCAweGNlOWY1M2MwLCAweDllYWRlZDAzLCAweGRmOTgwNDgxLCAweDI0NGVkYjg3LAorCTB4YjYxYWZjYzAsIDB4MGRkZTcxNjksIDB4MTY1MjRmYTEsIDB4MDljYjBkMTYsIDB4OTA1ZmM2OWQsIDB4NWQ4Mjc2MDQsCisJMHg0MmY4YzJiMiwgMHhlZGI4N2M1ZSwgMHg1NjA1OTRkMywgMHg3ZDQwM2ZlNiwgMHg1ZTNhM2E1YSwgMHhjOWNhY2VjYywKKwkweGRmZjVmZGYwLCAweDY2NzJlYjY0LCAweDcyMDQyMTk3LCAweGY5ODk4Y2YwLCAweDMzYmI0NWY3LCAweGFlZmZhNjM2LAorCTB4Y2RmZTEyNGIsIDB4M2ZkMDJjZGUsIDB4YTI3OTY1NDMsIDB4ZjdjNGU0MDYsIDB4MmVmZTZjZWQsIDB4ZjAxNjZmN2QsCisJMHhiYTkyNDdlNSwgMHhiNTJiMjU5ZiwgMHg1MmU1NDQyNCwgMHg4NDg5NGFlMywgMHhmMzNmY2NhOCwgMHgyMDU5NGJkYywKKwkweGZlZGMzZmZmLCAweDBjNWQ1NjUyLCAweDg5ZGZmMTdjLCAweDZhNDk4ZGU3LCAweGFmZjA5YTdmLCAweDBjZTFmNGJhLAorCTB4NjNjZWFmMTgsIDB4MzFjYzdlNjAsIDB4M2RhMmFiZmMsIDB4YTRmY2NmNTksIDB4ODE2Yjk0ODMsIDB4ODM3N2M1MGUsCisJMHhkODJmNjYwZCwgMHgxOGM0ODNiYiwgMHg1ZDViOTcwMiwgMHg3YWQ3ZjczZiwgMHhkODJlZjliZCwgMHhlM2VmODhkNywKKwkweGY0MGQ1ZmZhLCAweGZhOTJlMTQ0LCAweDU4MjdmNDI0LCAweDlmMjhhMjhhLCAweDc3ZmNiNGJmLCAweDkxOGNmNWQxLAorCTB4OGQ5ZDc0ZmYsIDB4YzZjZDRlYjAsIDB4MDQ3MWUxZTgsIDB4NzgwZjQzZTksIDB4NjU1OGI3ZDMsIDB4ZWQyOTU3ZDAsCisJMHhmN2EyYmU4YywgMHhlNTlmNzA2YiwgMHg4MTRjMjczMiwgMHhkZDNlODBiOCwgMHg3NmY5MDU2ZCwgMHg0M2I5ODE3ZCwKKwkweGIzZWYwODkzLCAweDMzM2VkMDQyLCAweDBiYmYxMGJkLCAweDBmZmEzMTU2LCAweGMzZjQxMGE2LCAweDA5NTY5MWE1LAorCTB4ZTY3NmI0ZmQsIDB4MjBhOGNmZTcsIDB4ZjhiNDU1ZjYsIDB4ZTc2NjI0YjMsIDB4YmQ2Nzg5YjgsIDB4NWZkNzBmMzYsCisJMHhjNzA3MzhjMiwgMHg0MDBmZDA4YiwgMHhjZjJmMjA0NywgMHgyM2E0NDY0OCwgMHg3YjQyNWZhOSwgMHg5ZGU5YWI1NCwKKwkweDQ1OGVmZDA3LCAweGJhYzUyYjU3LCAweDJhMWFiYTcyLCAweGVhZTg5ZGZmLCAweDIzYzc0MTQ5LCAweDIwYWZjYWU4LAorCTB4YTM4ZGI5NWQsIDB4MjNmNzE1ZDMsIDB4MTI3Yjc2NWYsIDB4MzZiZWMxZjQsIDB4MmQ2YmUzOTUsIDB4ZmJkMTNmOTcsCisJMHgyZWFmYzI4ZCwgMHg3OTZiN2NjMSwgMHg2YjQ2YjU3ZiwgMHhjNDdhMGI1OCwgMHhkNjM4ZmJhMywgMHhkYTg5YmMzZiwKKwkweDRhN2ZiMGM1LCAweDNlOWViYjAzLCAweDU3Y2ZiNWM3LCAweDY0NDhkZDcwLCAweDk2MDhmYzAwLCAweDJmYTg4ZGFiLAorCTB4NzI0NGQzMWYsIDB4OWQ0OThlYzAsIDB4ZTgxYmJhZDQsIDB4NTE1ZTc1MjMsIDB4MGJlZTNiNDksIDB4MTdhMDFjMzMsCisJMHg3ZmEyZDc0MCwgMHgxZjM0ZTk3NCwgMHgxYzU4MjNiMywgMHg4ZjUzM2EyOCwgMHgwNzk2OWNmYiwgMHg4ZWNjN2QyYiwKKwkweDA5N2U0MWE4LCAweGEwMjkzNmFjLCAweGU3ZjVhNzA3LCAweDA4ZmEwNzJjLCAweDAzMWUyMzJjLCAweDg2Y2Y3MWQyLAorCTB4OWRjZmUwNDUsIDB4YWM4MGY1NmQsIDB4YjIyNWYxMTMsIDB4OWQ3N2NkNTIsIDB4MDU1MzhiMTIsIDB4MGYxODIyNmYsCisJMHgwZDMzOGUxYiwgMHhlODIxZjk2YywgMHhmNDIyYzZmZiwgMHg4ZmY5MGM5YiwgMHg4ZGVhMDlmMywgMHhkNjQzOGRjYiwKKwkweGRlMjEzNmFkLCAweGQwNjhmYzQ1LCAweDI1NzQxMTQ2LCAweDNmYjE5MWZhLCAweDdhNjQ2ODkyLCAweDQwN2NhNDY4LAorCTB4MDU0YTczZmYsIDB4YTFlYjdmMTEsIDB4M2NjYTJlOWMsIDB4NWZmODIzZGUsIDB4NDU2Y2EzYzQsIDB4YzhiMDFjYmUsCisJMHhiZjM5OWMyYiwgMHgwNDljNDMzMiwgMHhiMzZjNzdmYywgMHgwMGZkODQxNiwgMHgxOTU5OGRmYSwgMHg2OTRmY2FkZCwKKwkweDUwZTkyMDI4LCAweGFhYWI5ZmZiLCAweGJjY2E2MjMzLCAweGMxZjdkMGZkLCAweDVmNTczNzU1LCAweGE4NzdmYThiLAorCTB4N2FhNmMwMWUsIDB4MjZiZDk0NTksIDB4YzM1NWUyMDUsIDB4ODNiNTMyZjUsIDB4ZmYxMjdkOGQsIDB4MWJlNmUyYmUsCisJMHg5NDFlYWFhOCwgMHhlZTdmZjhjNCwgMHhkMTFmODJmNCwgMHhjNWUzNTQ0NCwgMHhmNWM3MjdjMiwgMHg1YmZkYTNhZiwKKwkweDM4M2VkZTE1LCAweGVmZTgyNmVlLCAweDdlNTExMmE5LCAweGUxNGJkM2EwLCAweGY3NTNhYjViLCAweGRmZTUyODg3LAorCTB4Zjc4YzQxNDMsIDB4YWYwZTUzN2YsIDB4NmMzMTlkNWEsIDB4ZTE3YjUwMWYsIDB4YzM2NTQ5Y2YsIDB4ZWZhM2MyNzYsCisJMHg0OTVkNzZkNSwgMHgzZmQ4YjJjNywgMHgxNWZlODNkNSwgMHg5MmUwM2VmYSwgMHhlNzg5MGVkMCwgMHhmNDk3MDRkNywKKwkweDY1NmJlY2Q1LCAweGUwOWQ3ZDg0LCAweDc0ZjVmNjYyLCAweDJmYmE0OTYwLCAweDU4MWRmOTQxLCAweGRmNjAyM2U2LAorCTB4ZTljNGJiNTIsIDB4ZTNlNGJiNDIsIDB4ZmQ2ODA3NTMsIDB4MWY5ZjU5YjksIDB4YmI0MGE3MWUsIDB4YmVjMWU2N2IsCisJMHg0NjUxNzAyYSwgMHhhOWQ4MWJmOSwgMHg2Zjk0NDkwZCwgMHhhZWNjZmQ4YywgMHhlMzFjZmFhNiwgMHg5NjdlODIwNSwKKwkweDM4ZmQzOWQ4LCAweDk3ZmMwNDgyLCAweDMyYTRmYmRkLCAweDVhNDI3N2EwLCAweDZiYTM2ZWIzLCAweDM3OTcwM2Y5LAorCTB4ZmJlMWM3MTMsIDB4OTc3OWY4Y2QsIDB4MjA1Zjk4YmIsIDB4YTFiNTU4NTAsIDB4MjZkZmZhMDAsIDB4NTYxN2IwMTEsCisJMHg1OTRmMWUxNSwgMHg2M2E5ZmI4MCwgMHhiZTYzMGIyOSwgMHgwYTdiZWM2YiwgMHg1M2I4ZDlmMSwgMHhjYjFlMmEzNywKKwkweDc4MDRlMWE5LCAweDQ1Zjk3OTZjLCAweDMzOGRjODJmLCAweDQyNjUwOTIxLCAweDA0ZWExYzgzLCAweDQxYTFiNmJiLAorCTB4MjkyMTE2MDMsIDB4MDNiZmNkMGQsIDB4ZjU3MzFmZTMsIDB4NWY5ZDNjNjQsIDB4ODE3N2Q3MDYsIDB4YTcwNmI3OWQsCisJMHhiZmU5YmNjMiwgMHhkMWI1N2QxMiwgMHhjNGU1MDhiNywgMHgyYjQ2YjljNiwgMHhlYjBhOTFjNiwgMHhkODNjNDFlZSwKKwkweGMzYzA1ZWNkLCAweDM0YWFjMmFhLCAweGU2NjVhNzE4LCAweDRkYzYzYjc0LCAweGY1MDczZGE4LCAweDA3N2UwZjJkLAorCTB4YWUwMjQ1ZmQsIDB4MWFiYTdkNTUsIDB4YTljYTc3YjAsIDB4MGEwYmY3NWQsIDB4NDY3M2E2NzcsIDB4ZjVmMjg3OGQsCisJMHhlMmVlZWQzOCwgMHg1NzEwYWNmYiwgMHhmZjhlNWQxZiwgMHgxNzQ2NjRiZiwgMHhmODJmOTIxZCwgMHg4ZmY0NTJlZCwKKwkweDY3N2Y1ODkyLCAweDFmYjMxZjc2LCAweDU1ZTk3MTZmLCAweDVjNWJmMWZlLCAweDM2YmRhZWNjLCAweGU0MDY5OTE4LAorCTB4YjAxZTVmYjIsIDB4MjAxZDVkODAsIDB4NWY2MDRmZGUsIDB4NjU1NjdjNGQsIDB4OTMxM2FlM2IsIDB4MDUzNmFlNWYsCisJMHhkNzQ2NjZmZCwgMHg0MjU3NjNjMCwgMHhlZTMyYjVmZCwgMHhmMDNjODg2NywgMHg1Y2Y3MTg2MywgMHg4YWIzY2JhNywKKwkweGYyODAzZTcwLCAweDkwMjE0NTgzLCAweGZlNWNmYmM3LCAweDk2ZmFjMmVmLCAweGRjZjU3YjczLCAweDgzMTYzN2NiLAorCTB4NWZkODUxN2YsIDB4NTA5OWNmOWQsIDB4OTRkYTc2NmYsIDB4NGU0MDZiMjcsIDB4Nzk2NjQ5ZmUsIDB4NjQ2OGM2MDMsCisJMHhjOTY3ZWQxYSwgMHhiNzFjNGVlNywgMHg4NGVhMTRkMywgMHg2OGY2MGZmNSwgMHhlYWM5YmViMSwgMHhkYmY0MDQ1ZiwKKwkweDI5ZmFlYjc4LCAweDBkNjA4Nzk4LCAweGQ1MWU4MDE1LCAweGQwMDhiYWI5LCAweGEwYmVkZDMxLCAweGYyZThjNTFmLAorCTB4NGYyMzg4MTEsIDB4MjU5N2NlMGIsIDB4NzY3MTE3ZDAsIDB4NjNmMDM0Y2QsIDB4ODVjNWJlZTEsIDB4Y2UyYWRjN2UsCisJMHgxNTI5ZTMxZiwgMHgyYjIyMzI5YywgMHgzNDkxN2M3NCwgMHhmOWJjZTc2YywgMHhiYzMyZDllNywgMHhjNjhmZjYxNCwKKwkweGQ1ZWVmY2M4LCAweGVjMDRjZDczLCAweGY0NDhmMjVjLCAweGY4ZmMwNmIwLCAweDdiMDEwOGFlLCAweGMyNTdiOWI4LAorCTB4NWYwYjlhNzEsIDB4ZTVmZWMzZDAsIDB4ZGZjNjVlZWUsIDB4YTBkZmJlMDEsIDB4NzhjMmNiZjgsIDB4ZWRjMmNiOTQsCisJMHg2NzQ2MGU4MSwgMHgxYzc4NzIyNCwgMHhiNjc5ZjllMCwgMHg3NmQwODQ5ZSwgMHg0MjU3N2UzMSwgMHhjMDc5MzM5NiwKKwkweGY4ZjNkM2ZiLCAweDM3ZjczMzQzLCAweGY1ODg0ZDUxLCAweGNlYzI1Y2FiLCAweDViOGVhMTU4LCAweDQ5ZDc3MWYwLAorCTB4ZjAxNmFmMTEsIDB4ZmNhOTJjNWEsIDB4YzNkOWUyZTQsIDB4MTgzYzRmYmYsIDB4MWJmYzBlOWQsIDB4N2UwNWY0YTUsCisJMHhjY2QyMGRhNywgMHhmM2E3NWU3YiwgMHhjOTM2NTBkYiwgMHg5Yjk4YTYwMywgMHgwNGI2OTM5MiwgMHhhNDUyNTNkZSwKKwkweGZiZWQyZjc4LCAweDBkZDAzYTY0LCAweGFmYzgyMWE5LCAweGRhOTU3ZDJkLCAweGViOGIyYjY2LCAweGE1OGM1ZTYwLAorCTB4NTNlYTA3YjUsIDB4ZmQ0NDJhZWYsIDB4NTk5MzcxMGMsIDB4MWNiM2ZkZjQsIDB4ZTY1NjY5YWYsIDB4MDhhZjczYzcsCisJMHgzNDFjNDBlNiwgMHg5ZWVmYTBmMSwgMHgyYmZjNjFkNywgMHg0ZDg3ZThjYywgMHg3MzYzNmJhNSwgMHhmODI1NzNlMiwKKwkweGY4YTRkY2JkLCAweDc3NjdlODAwLCAweGYwMDI1MmFkLCAweGM0MWY3ODg4LCAweDBkMTY2NzBiLCAweDNkMzhlM2U3LAorCTB4N2QyYjc3OTIsIDB4OTgzOTc2ZWUsIDB4NmE0MGNlZGYsIDB4MWY3ODVlMDAsIDB4MWZjNzBlYjIsIDB4ZTMwNzlmYzEsCisJMHg5ZTBmN2M0MiwgMHgzMmMyZDJlNywgMHhjMGM5ZmZmYSwgMHhlZmI4ZWQ5NiwgMHg0ODNlNjAzNywgMHhlZjFiZGY2ZCwKKwkweDM1YWRmZTgwLCAweGM3OGM1ZTkyLCAweGQ1MmRkOWM2LCAweDAyYmViNzg5LCAweGY2NzgzZmY0LCAweDAxODc5NmQ0LAorCTB4N2FmNmRiYWUsIDB4Y2UyNWVmMzAsIDB4OWJmZWI5MWUsIDB4YjMzZjNlY2MsIDB4M2YwMGEyZGQsIDB4OWI3MmU1NmMsCisJMHgyN2M4OGZkYSwgMHgzZjZjNWRjMSwgMHgxZTQ3NmYxOSwgMHgyN2Y3YTk3NSwgMHhkZGFmZTU0MywgMHgwNWYwNjQ4ZSwKKwkweDBiM2NiM2I3LCAweDdjMDNkZjIxLCAweDcwZDgzN2ZmLCAweGQ3ZjQwMTNlLCAweDEzYzEwZGJmLCAweDhkYjIwZjk3LAorCTB4OGZmNDgzZTcsIDB4ZTZmMjBmOWUsIDB4ZTgxMDRiMGUsIDB4MDlhZjdjZTEsIDB4OGYzMjkyZmQsIDB4NDViNTlkN2IsCisJMHg3NTI0MDAxZiwgMHgwMWNmMGUzOCwgMHg3MjU4MWI3OSwgMHhjYTFhZTdlNiwgMHg4YjBmNzI3ZiwgMHg4ZjEyYzkyMywKKwkweDRiNGFmZDMzLCAweDZiY2M1YzU4LCAweDgwOGJmZjA3LCAweDc3NGM3NjViLCAweDNlNDA4YjdiLCAweDcxMzc3OWIyLAorCTB4YjM5MzUxYmYsIDB4MmVmMTYxNDAsIDB4OTRkNDM3OTYsIDB4N2IwMDJlMTAsIDB4ODdhZTU1ZWEsIDB4NWUyY2NjOWEsCisJMHg4N2QwZTgzNSwgMHgyNmEzNWQ2MSwgMHgxODVkMWZmZiwgMHg5M2RmNjJkNywgMHhkODk0MWE1ZiwgMHg4ODRmNTZiOCwKKwkweDBhMjc3NWQ5LCAweDlkM2Q2MTM1LCAweDA3ZDgwZjY3LCAweDU5YWI2ZWIwLCAweDlmMjg2YjdjLCAweGM3YTFiZjYwLAorCTB4NTg5MGUyYzAsIDB4NDFjY2VjMWUsIDB4ZTIyZjU5MzksIDB4M2Y5OWZiNTYsIDB4YTdjNzllYWUsIDB4ZjQ1YWNjNGUsCisJMHg3NDVjYTQwYywgMHhiMDM1YWQ0OCwgMHhhYWIwYmIzZiwgMHgwZmU4ZmQxMiwgMHg5ZjEzMzkzYywgMHg3ZWQ1MmJmNSwKKwkweGE3ZTA0NWZmLCAweDIzOGUxYmNmLCAweDFkN2JmZjBiLCAweGJkOTllOGYxLCAweGQ0NDdlYzNjLCAweDU5NDVmYjUwLAorCTB4YmU4MTU3MjksIDB4MTVmNjIxY2MsIDB4MjA5NWZmMjAsIDB4ZTlhYmFkNWQsIDB4YzEzZTgzYjMsIDB4MTIzNDk3NjgsCisJMHhhNzcyMzlkOCwgMHhmYmViMGNjYiwgMHhmNTA2ODc2OCwgMHhlMzQzYjA1NCwgMHhjZjAyNzY4NSwgMHg4ZmNjYzkzOSwKKwkweGYzMzI0ZDc0LCAweDBhYTVkMDZiLCAweGQ5ZTIzOGMxLCAweDA3NzFlM2ExLCAweGEyNzJkZmRlLCAweDIzNTNjMzA5LAorCTB4NzZhM2U3YjEsIDB4N2QzNDY2YjksIDB4ZDBlYmZhMmQsIDB4NGZjMTFhYjUsIDB4YTBkNGNkMTcsIDB4ZGU4MmZiZGYsCisJMHhjNmZkMTczYiwgMHg3OTAyMDJjZSwgMHhkNmI2MWQ1NCwgMHgxZWFjMzU5NSwgMHgyOTgyZTc3OSwgMHhlYmZhYzNlYSwKKwkweDEyNDg2NjY0LCAweDMzZjIwOWM1LCAweGNiZTc5OTM1LCAweDYxNmRlMWM1LCAweDFmMWNiYTk3LCAweGE5MGM2OThmLAorCTB4M2ZjNGY1Y2IsIDB4YzU4ZjJkMjEsIDB4YTdkZjYyMGYsIDB4NzVmOTMzMjYsIDB4YzcwZTU1NjEsIDB4ZTNmMzA3YjcsCisJMHg2Nzk3ZmNjNCwgMHgzMjY5YmMzMCwgMHhiMzM3MzNkOSwgMHg0MWQwMmU2YSwgMHg3Mzk3YzQyZSwgMHhhYmZjYzllMCwKKwkweDdmMDgyNjc0LCAweDA5MmU3NWVlLCAweGRlMGUyM2U5LCAweDgwZGEzMDBlLCAweDNjNTkzYWJlLCAweDNmODU2ZmY0LAorCTB4ZTRjYWVlMWUsIDB4YmMxZmFlMTQsIDB4ZDY1Zjg4NmUsIDB4OGYxOGY1ZGIsIDB4NDkzZjVjYmUsIDB4MGU1YWIyNWQsCisJMHhmZWJmOTUwZCwgMHgyN2RiMmNmZCwgMHg5ZTc5NmE3NSwgMHg1MGU1MWQ4ZCwgMHhlNWNkOWQ5ZCwgMHgxMWQ5ZTQ4NCwKKwkweDZhNTZmNzg2LCAweDNhM2NjMDJmLCAweDNmNjAyNWI1LCAweDhhZDViYjRjLCAweDZmZDk2OGYzLCAweGYzNzAzZjQyLAorCTB4ZDAyYzgxYjIsIDB4MDM1NTJkZTMsIDB4ODliNzEwMDUsIDB4MmI0MDJmYzcsIDB4ZGI0NWY5MGIsIDB4ZmVlOGI5ZDUsCisJMHhkODg0ZWMwMywgMHg0YjVmM2M3NiwgMHhmZWY1NjcxZCwgMHhmNjBjYjkyMCwgMHhiZjc2MjczOSwgMHhiNzZhZmEwMSwKKwkweGZkMTVmNTA5LCAweGYwMDYwM2JmLCAweDgzOWNiY2IzLCAweDM2ODdjY2Y2LCAweDBiYjQxYjdmLCAweDllNWJjMzk4LAorCTB4ODViYjAxY2QsIDB4ZmRjZDRkZDksIDB4MGJiMDFlODYsIDB4ZTI2MjNhZWIsIDB4ZDU5ZmYwN2MsIDB4NTkxZmI4ZWEsCisJMHgzYmZmNDRlOSwgMHg2ZmJmNTZlOSwgMHhkZGY3MTRkOCwgMHgxNzYwMzg4OCwgMHhiZDNhZjNhZSwgMHgzYmYwMjI3ZiwKKwkweDdmOTgzYmQ1LCAweDgzNTFiNjcwLCAweDVhZjUwMzc5LCAweGI3OTAyMmNmLCAweDdiNmE0ZDY3LCAweGFkOGRhY2ZjLAorCTB4NzVhMTk2ZDcsIDB4YjViZGEwZjYsIDB4ZjY3NWNjNjUsIDB4ZDczYWMwMTQsIDB4YjYzZjg4NmIsIDB4Njc1ODY2OWYsCisJMHg3YzRkYmViYSwgMHg3OGJlY2Y5ZCwgMHhmM2FjMDE3NSwgMHgyZWFmYmJjNywgMHhhNzVlNzU4MCwgMHhkZjAyZjJlYiwKKwkweDViZmMzOWI0LCAweDI3YmY2OTkzLCAweDNkYTFmMDZmLCAweDJmNThmMjI1LCAweDI0ZjcxZTk3LCAweDQzMmJmZGFiLAorCTB4ZmYyMWZmZTUsIDB4MzBmYTU4Y2EsIDB4NWE4NzA0M2MsIDB4NGFmNGJhMWYsIDB4M2E4M2M4MDYsIDB4ZDViZmUxYTMsCisJMHhhYTM3ZjA4YiwgMHg0MDY4Y2YxZiwgMHgzZmZlYzc3ZiwgMHgwNzY2YmE3ZiwgMHgyZDdlODFjOCwgMHhiZmEyMjNkYSwKKwkweDBmM2ZiMmZkLCAweGVmZmRhMWVjLCAweDY5NDEzZGI4LCAweGI5MWJmZWVjLCAweDI0NmRkODVmLCAweDg4YWJmMDQxLAorCTB4MjdiMDgwN2QsIDB4NWJmMWU1ZTMsIDB4MjUxZjNlN2MsIDB4YmIwMDZmN2IsIDB4OGRmYWNiZTYsIDB4NjMzYmY4MWIsCisJMHhlNzY2NTNlOCwgMHhjYzNjOTM2ZSwgMHg3ZThiZGM2ZiwgMHhmMzdkOTZlNCwgMHgzZTI3ZTBlZCwgMHhlMzdlNjIxZCwKKwkweGQxOGIxNzk2LCAweDdhMThkYzZmLCAweDY1NzkwYzJkLCAweGMzYjI1ZmE0LCAweGRiNzFhM2ZlLCAweDA3YzgwNGIxLAorCTB4YmE1Y2ZiMTAsIDB4OGM5MzNkYWYsIDB4ZWZkZWE4ZjQsIDB4NDg5ZDBlOWUsIDB4MGEwMWZjODAsIDB4NzFlODI1NzcsCisJMHgwN2FhMmI4YiwgMHhmYmExNmZiYSwgMHg2YzIzYzgzZCwgMHhhMTg3YTM5MSwgMHhjMTE3MTZkZiwgMHgzZWQyOTczYywKKwkweGM0NGZmZWY1LCAweGY0ZmEzNzc5LCAweGY2Mzc3NzI4LCAweGQ3OTAyMTRiLCAweDRlN2Y3YTI5LCAweDkyMzVlODA2LAorCTB4MjA3OGM3NjEsIDB4Yzk4YmIzZTcsIDB4YjI5NGQ0ZGUsIDB4ZjdiYWY4ZDgsIDB4ZTFlNGU0ZjMsIDB4MGQ4MWIwN2MsCisJMHgwM2JmNDg4OSwgMHg4M2I1ZTIzYSwgMHhlMzYwZGIzYywgMHhmOTQ2NGNmMiwgMHg4ZTRkYzdmNiwgMHg2MzBmY2IxMCwKKwkweDYyMThmZmVkLCAweGM4YTM0Mjc2LCAweDU4NDk5MzBiLCAweDY4YjVlYmE2LCAweDU4NWRmN2I2LCAweGUxZjc5MDZmLAorCTB4NWIxZjc5MzgsIDB4YmJmYjcxMTYsIDB4NTJmNTE4NDksIDB4Y2ExODE5MzMsIDB4MTc2ZDhiMGYsIDB4Nzg4N2Q3MWYsCisJMHhkMjFmYWFiOCwgMHgxZjgwYWM1YSwgMHgwN2FiNGVlYywgMHhiOGY4ODFlMCwgMHhmNmM4M2ViYSwgMHg5NjFmOTRlYiwKKwkweGFmZDMwYzk2LCAweGJmNDEwNzU4LCAweDFkMGZkYzJkLCAweDA4ZmUzODY4LCAweDRmYTA2ZmQwLCAweGQ3N2Q4M2IyLAorCTB4ZGJmNDYxZTQsIDB4OTA1YmY3NDQsIDB4ZWZjZjFiNDcsIDB4Mzc5ZDU3YTQsIDB4OTdmZjE2M2EsIDB4ZDFmNWE4YTYsCisJMHhlNGVmZjk1MCwgMHg0NTNlYmQ1ZiwgMHhmZTYyZjdjZCwgMHgzNDNmNmZjMiwgMHhmMTg5N2VjZiwgMHhlMmJjZGM2NSwKKwkweGZlZjFhOWY3LCAweGJjY2ZiMTc2LCAweDI3Mzg3OTVjLCAweDg3MGYyZDQ1LCAweDc5Njc3ZmNhLCAweDJlYjQzNzU4LAorCTB4MWQ1MGYyZjEsIDB4ZTU5YmY4Y2YsIDB4NWM3MGZmZTEsIDB4NGY3ZDk5ZTMsIDB4MDNiZWMwMjcsIDB4YTdkODc4ZWMsCisJMHg2M2FlZGNhYywgMHhmZDE0MTNmOSwgMHhlOWUyZjFiMSwgMHhjNTk3YWI1YSwgMHg1ZWEyYjU0ZiwgMHhhNjU3ODcxZCwKKwkweGUzM2MzOGYzLCAweGQ0NWVkN2ViLCAweGYzMzViYWUyLCAweDNlZjM3MTM4LCAweDM2OWEwNzliLCAweDljNjMxNzU4LAorCTB4YmE3ZTNlMzYsIDB4MGU5ZWVjODQsIDB4NDcxZjE1NGIsIDB4Y2U3ZTAyNmQsIDB4NzUzYzc0YmIsIDB4OGY4YjBhNzUsCisJMHgyMDcyNTg1MiwgMHg2ZjNlMjE2ZiwgMHhhN2ViMzVlYiwgMHg3NTk4ZmU0OSwgMHgxYmEyMmFhZiwgMHhkYmU4NTE4MiwKKwkweDMzODkwNzI4LCAweDE0YzZmZGU2LCAweGM2YmY1NzY2LCAweDdhZGM4YmYzLCAweGFkNjA4ZTc2LCAweGZkODVlMmNkLAorCTB4ZjJjMzViOGMsIDB4ZjJlMDdlOWYsIDB4MThiYzgyNmQsIDB4ZmFmMWMyYTMsIDB4NDM0NGVkZjIsIDB4YWU4Y2YyZjEsCisJMHhiMDRhZTUxNywgMHgzOTAxZWFkOSwgMHhhMjM3ZmMyOCwgMHg1ZTNjOGJmZiwgMHgzZmZhZDk3MSwgMHhmY2Y3ZGU4ZSwKKwkweDNjN2JkMzBmLCAweGYxOGJmNjdlLCAweGRkYjhkNmZlLCAweDE1MWI4YTdhLCAweGUzYTQxMDVmLCAweGNhNWYxMDIzLAorCTB4NjNiZjQ5MTksIDB4MWQxNjMzZjUsIDB4MWRmMTRkMWYsIDB4ZmU3NjYxNDksIDB4Yjg1N2NjMTQsIDB4Mjk2MzM5NGMsCisJMHgzZjAwOWU4ZCwgMHg1MDYzZDkxMSwgMHg3ZTA5YWZjMCwgMHhhYjhmZDQxMiwgMHhhYTNlNzhkMywgMHhlNjI2N2NhNywKKwkweDI1NzNiMzY5LCAweDU4Y2UxY2UyLCAweDQzMDdlNDc2LCAweGM4ZWNjM2ViLCAweDlmNWNjNjBmLCAweGRlNDc2NzJmLAorCTB4MDg3ZGYwZWUsIDB4ZDJiMjc2NzQsIDB4MWUwMWU3OGIsIDB4NjFmODUxYjUsIDB4NjE5Y2Y4N2YsIDB4ZTIyZTczZDQsCisJMHhmY2E1YzYzYywgMHhkMWM0NWYyZCwgMHg0YmZmMTdkNSwgMHgzYTkyZDQ3MiwgMHg3NWY5NWQ5NiwgMHgxM2NmZDFjYiwKKwkweDc2M2E3ZmMwLCAweGZmOWU0MTNmLCAweDQ1YmM0MTE5LCAweDZiNjQ0OWY3LCAweDEwM2I1ZjhjLCAweDE5N2JmOTYxLAorCTB4ZmVmMTVlMWMsIDB4YTFiZWY4M2YsIDB4OTk5YmQ1MjEsIDB4ZmM3ZmRmNGEsIDB4MTI0OGQxYWUsIDB4NjUyZTllYTksCisJMHg2N2M1YjE3MiwgMHg0YjQyYjhjNSwgMHg2OTdmY2IyZiwgMHg4ZTUwNDY1OSwgMHhiNGRmODBiNywgMHgzMzg5ZmMwOCwKKwkweDRmN2RkODA5LCAweDIwMTNmZDNhLCAweGY3ZDFlZThmLCAweDIyNmQ0MWFjLCAweDExNjdkYmY4LCAweGJkY2VmM2IwLAorCTB4OWMzM2NhY2IsIDB4Njc5OGM5ZmUsIDB4ZTMwMDZjYjcsIDB4Y2ViM2RkMTgsIDB4Zjk1NjFlNjAsIDB4NTIzZTlmMTcsCisJMHhhMmYwOGE1MywgMHg1MDY1YzEzZiwgMHgzZGI5Njc5ZiwgMHhmMTMzYzk5NSwgMHg2Zjg0M2Q5YywgMHgzZmYzZmEyZiwKKwkweGRhZjk2MDZlLCAweDBlZDc5NzAxLCAweDBmZTEwOTdlLCAweDhjMTEyOGI3LCAweDYxZWNiNDJiLCAweDk2Yjk1YmM2LAorCTB4MzBmYzg3Y2QsIDB4NjVhOWU5MDMsIDB4ZjgzMTY1NGYsIDB4YTlhZjQ5NGQsIDB4ZjJkZGVjMTgsIDB4ZGY3MTViZGYsCisJMHhlOTgzZjFmNywgMHhjZmIxMjc5OCwgMHg3YzAyYWZlNSwgMHgzNzQzNGFkOCwgMHg0ZDlhN2Q4MSwgMHhmN2JiMDFjNywKKwkweDE1MzdkZGUzLCAweGZlNDJkYzAzLCAweDM5YmYwM2FkLCAweDRkOWQ3ZjFkLCAweDQ2MjcxN2VkLCAweDY0YmY3Nzk2LAorCTB4MzNlZTI2NDcsIDB4NWFmZWFjOWIsIDB4MTMzYWZmOTgsIDB4OWRiODIzODMsIDB4ZmVlMTRmOWYsIDB4MTdmZTc4ZjIsCisJMHhkNWFhOWY3YywgMHhkZmE5MzhlMCwgMHg1YzljNjIzNSwgMHgzYTc1ODVjOCwgMHgwZGU2MzdlMiwgMHg5ZTEyOTNjYiwKKwkweGYxNzAxODY3LCAweDk5ZmVjNzNjLCAweDk3ODU0ZjJjLCAweGJlNzUyZWFkLCAweDM3Yzk0N2U3LCAweDI1M2MwMDk0LAorCTB4OGI1N2YyYTksIDB4ZTQ0NzU5NjcsIDB4YjJhNDk0MGIsIDB4NWNlYTk2NzgsIDB4YjMyMmU1YTIsIDB4N2FlZDczYTcsCisJMHg0YWRiMjdhNCwgMHg5NDU0ZTJjMiwgMHhiZmFlYzA5ZSwgMHgwNjk5MWEzNiwgMHhiYmYyYmNlNywgMHg5ZTAyZDdjMywKKwkweDIwZDQ1ZmY3LCAweDQ3OTllNDllLCAweDI4OTMzZTMwLCAweDU2ZjJmMWIxLCAweDAwNGU3NDBmLCAweGFkZmQ4YzdmLAorCTB4OTU0OTYwZWIsIDB4YTAxNTdiMmUsIDB4ZWZhNzQ5ZjQsIDB4ZmZlNDU0ODEsIDB4YWYxODQyZDYsIDB4MmM3NDVmZWEsCisJMHgwNTlmNzJiZiwgMHg1OWRkMGNmZCwgMHg3OTVmOTg0ZCwgMHhlYTgzM2RlZSwgMHgzM2ZjNGU3YywgMHgzZTYwNTY0OCwKKwkweDZmZGY2ZTY1LCAweGRiNjA0ZTMxLCAweDI3OWE4ZDIzLCAweDE1YWE0NGZiLCAweDE4MjVhNmY5LCAweDM2Mzk4ZTk5LAorCTB4Y2U1MGJhZDcsIDB4MWY3ZWZiY2EsIDB4ZWU0M2JiMDQsIDB4OTEwMjQxOTQsIDB4MDM1NzlkMGUsIDB4Y2I4MmQzZTcsCisJMHhjN2Y1ZmEwOSwgMHhiMDM1ZGI3NywgMHgzZjNjZDk1ZSwgMHg3ZmZmNzA2NiwgMHhiZWUzZjE0ZSwgMHg0MjA1YzQ0NSwKKwkweDM3NDliZjJjLCAweGM3ZWMwOGYwLCAweGRmMDNlNWU0LCAweGVjN2FjMjBjLCAweGMwNWE2ODcxLCAweGI2OGJhYTdmLAorCTB4OWY2NWRmYTAsIDB4ZDlhY2ZkMDUsIDB4YmUyYjc5N2QsIDB4MmJkOWNiNDEsIDB4MWIwNzE4ZWQsIDB4NmNlZWU1N2MsCisJMHhmM2E3ZTdjYywgMHgzY2NhM2YxYywgMHhmOTY1NGExZiwgMHg4YjNlZjI0OCwgMHhmYzk5ZjQwNiwgMHhhOGMwZjEwNCwKKwkweDBhYTUyM2IyLCAweDk2OGE3ZWUxLCAweDA3ZGYzZjY5LCAweDhlMWU0YTdhLCAweDBhM2Y4MjliLCAweGFhNDM1NGY0LAorCTB4Y2RkMDA3N2YsIDB4YTVhNGI5ZDAsIDB4ODkyZTc2NjYsIDB4MmRiNWE3OWYsIDB4OWMxNzZmN2QsIDB4ZmRjMmQ5ZjcsCisJMHg0ZmY3MDdiOSwgMHhiZmZlODU5ZSwgMHg3NTgyNTk0ZSwgMHhmOTYwZTBiOCwgMHhiMmE0MmY5NSwgMHhmYzQ4ZTI3OCwKKwkweGQ2M2NjNDFmLCAweDY1YmY3ZGRjLCAweDAyZTI4ZDdhLCAweDhjNzU5N2ZhLCAweDU3NGVlNDVlLCAweDVmMTlmODBmLAorCTB4ZGU2M2YwNDksIDB4NjExZDc1ZWUsIDB4ZWNjZGM2MmQsIDB4YTM1YzdmMjcsIDB4ZDY3N2VjYzQsIDB4YjJkMzNkMzMsCisJMHhlM2NmZWQ5MywgMHhkMjk3MzdmNywgMHg5MjFlYmYyZiwgMHgwY2JmNGMzMywgMHg3NjRlZmY5NSwgMHhmNGUyZWZjYiwKKwkweDZmYmNkZmNhLCAweDVlZmRlYTIxLCAweGJmMTJmZGJjLCAweDhmNjExYmJmLCAweDk2MzdmNWM3LCAweDUwZjIyMzFkLAorCTB4NjFjNzg2YWEsIDB4ZDg0ZGI0ZjYsIDB4OWU1NTQxNDksIDB4OWY5NTk1NGUsIDB4ZmJhYTM0M2IsIDB4NDc2NDlmNWYsCisJMHgzYjc5MTA3YSwgMHg3MmNhZWQyOSwgMHhmZThmZGJjOCwgMHg0ZWRmYTA4OCwgMHgzYzg5MTVlNCwgMHhjYjE1NjBhMiwKKwkweDhjNmEwOWY3LCAweDRkZDEyZTc4LCAweDY4N2YzMGJhLCAweDEyNGIwOTFjLCAweGYwMDZkN2ZhLCAweGU0MmE2ZGZjLAorCTB4NGZlZmQxMTEsIDB4ZmY2MmU2YTQsIDB4YTU2Nzg5OWIsIDB4MjJhNmU1MTYsIDB4YzgyNmZjMDEsIDB4YjgwMjQ5M2YsCisJMHhjMTE2MWI0MywgMHg3MTU5Yjc3OCwgMHg5ZmU0MTMzYywgMHgwMzNlZTEyNCwgMHhjN2RkMzlmOSwgMHgzNWE3NTZmMiwKKwkweDNhNDNiOGIwLCAweDRlNTBjZmQ1LCAweDY5NzQ2N2NmLCAweDNjYzdhYjlhLCAweDIyNTc5MTU2LCAweDVlMDQ0ZmYyLAorCTB4ZDNiZTM4YWEsIDB4MDFjYTJjMjcsIDB4NTRmMjI4YjksIDB4ZTUzZDk5ZDYsIDB4MzljMTE3NjAsIDB4MWNiZjM4NjgsCisJMHhiY2YzMzQ2YywgMHg3NzZmZDYxMywgMHg0ZjllMmU2MywgMHgyOTc5YjJmZSwgMHhmOTE2NzhmMSwgMHg3ZjQ0ZmEyOSwKKwkweGU0NmNiYmE2LCAweDM3NDE2NzM5LCAweDcwODllYjMxLCAweGVjYzdkYzZkLCAweDNkMDZhYWZjLCAweDcxYjA2M2NlLAorCTB4MDcyYmZhMDYsIDB4ZWMwNDM1MWIsIDB4MDM3ZWFhODEsIDB4ZjFiOGMzYTMsIDB4OTNkNWNlMzYsIDB4ODcyYmY0MzAsCisJMHgwNTRmMjA0YywgMHhjZWNhNWMzZCwgMHgwODViZWJhNSwgMHg2ZDgzZTBmZSwgMHg1MjRlZjMzYiwgMHhkNmQ0M2ZkZSwKKwkweDkzNDFjZjhiLCAweDEyYmRhYmQ0LCAweDAzY2VhMWNmLCAweGI0OGRmNWM5LCAweDFhZjk1YWZjLCAweDY2ODliN2M4LAorCTB4NmE4NDk0NDksIDB4OTZmYWFmZDMsIDB4NjBjNGY1NGMsIDB4Mjg3ZGY0NzIsIDB4N2JlMWJlZGYsIDB4YmEzZTNjYWMsCisJMHg5YmVkYTI0NSwgMHhlZDYyM2VkMywgMHhhOWQzMzY4MSwgMHhlZmZmNWVkOCwgMHg1N2ViNDFiNSwgMHgyNjdmN2ZkMCwKKwkweDM1MWNmOWYxLCAweGViZjQ2NGVlLCAweDNmNDExMjNjLCAweGE1N2ZkNzEyLCAweGFkYmEzZTRjLCAweGRjOWZiNDdhLAorCTB4NTQ5NTFmM2MsIDB4ODg1NGZjZjMsIDB4N2I3MmQwZjgsIDB4ZWZjNjMxNWEsIDB4MTNkOTQ0YWQsIDB4MDMwY2ZhODEsCisJMHhlMzA4MjdiMywgMHhjY2YxZjY4NywgMHhmNGU0NmQ2ZiwgMHhiZjg0MzI0MCwgMHhmMjA4MjA2YSwgMHg4MWM3M2RhZSwKKwkweGU3YzkwZmRmLCAweGYzMTA4NjNkLCAweDhmZjFiMTliLCAweDllMDU3OGJlLCAweGI2NzkxMjRiLCAweDY3MzNkODg0LAorCTB4MzZmOTgxNWYsIDB4MTM1YWYyYWEsIDB4ZGIyOWE3M2YsIDB4N2JiY2UxMzMsIDB4YzFkYjhlYmIsIDB4ZTZjNDdjYmMsCisJMHgwNGYzODg1ZiwgMHhkZGY2YTRiZSwgMHg1MDdlMWJkMSwgMHg3Njc0ZmMwNCwgMHg0MWYzMGZlZiwgMHhhN2E4ZGRjZSwKKwkweGU0NTE4NGZiLCAweDkzM2E1OTVhLCAweGViM2E4MzZiLCAweGI3N2U4OTRhLCAweDAxNmZlNmM2LCAweDMyYzc3YzNhLAorCTB4MzExYzNhNmYsIDB4YTk1NDliOWEsIDB4YzFiYzAwNzcsIDB4ZDc4MGI0ZTcsIDB4OGUyNzRlNjQsIDB4NDczZTBjZDksCisJMHgzYzgyNGZiNSwgMHgxYjEzNzZkNCwgMHg3YjJmZDkzNywgMHg3Zjg0NWNmMSwgMHg4NTFiNzRiNiwgMHhmMjYyNWRiYiwKKwkweDg4OTQ3ZTliLCAweDkyYTE1NTc2LCAweDI2Yzg3MTA4LCAweGNiNTVlZTdlLCAweGNiOTY4OGU1LCAweDFiNmU3ZjkxLAorCTB4YzFhOTk3YzgsIDB4MTNlZjRkNzgsIDB4N2ZlN2IwNWEsIDB4YmZlMmUzY2IsIDB4OWY5ZjUxY2QsIDB4YjgzMzcxZTgsCisJMHg1Njk2NzNjNSwgMHhjZmU4MDJiOSwgMHg1MjNhYWJhNSwgMHhhYjQwZTk0YiwgMHhmZDcwODRmNywgMHgzNzE4NmQzMiwKKwkweDc3MmI2MDNlLCAweGE1ZWZkMDBmLCAweDQyOTUxZmVjLCAweGU2N2I3NzNlLCAweGJlMjE0YThmLCAweGRjN2E3NWE3LAorCTB4OGY3Mjk4YmUsIDB4MzU3ZmQxOWIsIDB4NTliYzAzYjQsIDB4ZWZjMTRiNWEsIDB4OTdmNWI1ZmIsIDB4ZmEyYmZiNDgsCisJMHhmNTBkZmRmMiwgMHgzNTcwNjA2MywgMHg3MDU5YTMxOSwgMHg5MzU5ZmU2ZSwgMHhmZmFjM2I3ZiwgMHgzMGM3Zjk4NSwKKwkweGZhNDBmYzJlLCAweGFmMjFmN2QxLCAweGQxOGVhOGUzLCAweGU3OTMzMDVkLCAweDY5ZWU5M2UzLCAweDBlZWU5NDA5LAorCTB4NWU3ODM5ZTcsIDB4MWViZjhiMGEsIDB4YThmY2MwOWUsIDB4ZmNiMTdlNTQsIDB4ZTYxMjg5ZDEsIDB4NjZjZWQ2MjEsCisJMHgyNjZmNjJlNywgMHhmYTAxOGU5MSwgMHg2ODU5M2EzZCwgMHgxYzhhZjRmZCwgMHg3OTZiN2ZiNCwgMHg3N2Y0Yzg5ZSwKKwkweDdlYjAwOTdjLCAweGNhOGY2ZmQzLCAweGIyYzdmNzIwLCAweGViNzQ2ZWU3LCAweDNlMTg4MTk0LCAweDk3NTE0OWJlLAorCTB4OTc1NDJlNmYsIDB4OTc1MWU1YmYsIDB4OTdmMTVkYmYsIDB4OTM2NWIxMDksIDB4ZTgxMDdiZDksIDB4ZGY4OTU1ZjUsCisJMHhiMTBkNzE0NywgMHhhNGJhN2YyMywgMHg5MzVkZDgyMCwgMHhlN2U3NGE1ZiwgMHhlNTNlNTk4OSwgMHhmMTdlZjk0ZiwKKwkweGY1ODIwYWE1LCAweDViOGQzYjI5LCAweGZkY2Y1MDhkLCAweDNmNWU1YWVmLCAweGQ5OGM0ZGQ5LCAweGVhMDdjNDRlLAorCTB4ZjNjNGE4ZTksIDB4OTMxODVkMzIsIDB4YjFlZjdiMjIsIDB4NmQzNDNmMzMsIDB4ZWNmZGE3YWIsIDB4MWYyMGFmOWQsCisJMHhlNDM1NThhNywgMHhhNWViYzA5YiwgMHgwNGMzYjQ0NiwgMHgyODliYjQ1ZiwgMHg5NjNjNTM3ZCwgMHg4MTlhMzM4ZiwKKwkweDllNzVkYmRlLCAweGQ2OTdkMGY1LCAweDJmNDA1MDZjLCAweGIxMTgyNjU3LCAweGM4M2ZlZDZmLCAweDliOTZkN2E4LAorCTB4Y2I0ZWM0MGMsIDB4NjMzNzFmMDcsIDB4M2UyNjVjYjksIDB4MjBhMTIzYzgsIDB4NTFlNzg2Y2UsIDB4MGFkNDI3OWQsCisJMHg2MGVkYTVmMywgMHgxNjBlZWRiZSwgMHhlYjk2ZDc1NywgMHg3ZWQzY2Y1MSwgMHgzZTBmNWQ3MSwgMHg5YzExMDlhMSwKKwkweGY5OGNhNTdmLCAweGMxNjYxY2E2LCAweDdjMjQ3NDc3LCAweDZiZTczNGZmLCAweDUxODQ4NmFkLCAweDdiYjNhNThlLAorCTB4ZmVkMTBlMzksIDB4YmY4M2RmYTEsIDB4ZGZhMGY2ZDIsIDB4MTNiOTUwYWUsIDB4MjcxYmNmZWEsIDB4YzBhOGI5ZTAsCisJMHg1OTJmNzlkMCwgMHhkYTE1YzAwMywgMHg2N2U4N2NiOSwgMHgzZjA0ZjJlNywgMHhhNTQyZjkwYiwgMHg4NTJiYmU1ZSwKKwkweGY4MTQ5MDMwLCAweDA1M2IwNTBmLCAweGZiODIwNGVjLCAweGNjYjcxMTAwLCAweGQ5N2E4YTM0LCAweDBkYTZmZDBiLAorCTB4ZTBlNzY3YjUsIDB4NTY5OTc4NTIsIDB4NjAyNTM1ODUsIDB4MjdmMWJjYTcsIDB4ZTRiMWMzYTAsIDB4OTMxYTYxNDUsCisJMHhlNDI5ZTIxMywgMHhjM2MzMTZjNSwgMHgxOWFmNmE0NywgMHhlZjBhM2Q2ZCwgMHg5YjBjZjJjNywgMHg4NGM3YWQ5ZCwKKwkweGFkNGJlMDBjLCAweGU4MDY0Mjc5LCAweDQ3ODc3NmNkLCAweDBiOTRjNWYxLCAweGFlNmE3NmU5LCAweGRiNDVmMDEzLAorCTB4MzVhZGYyZDEsIDB4MThlNWYyYzcsIDB4YzY5ODU0ZmQsIDB4ZTc2ZDAwZTQsIDB4MWVmMGEyNGQsIDB4YzAxOTI5MzQsCisJMHhkYjhjYTNiZiwgMHg3Y2I1YzZjYywgMHhlOWJhZTNiZCwgMHg0MWRkYjRiOCwgMHhiNjk3MWQxYiwgMHg4NDMyNjZkYiwKKwkweDhkYTMwOTM1LCAweDc4YzBhMTVmLCAweGEyOTcxYTk3LCAweDgzM2Y5MTFkLCAweDkzYTUwM2FmLCAweDBlYzFmODIwLAorCTB4YWY0ODM0ZGEsIDB4ZjJiZTc4MzMsIDB4MWUzNjY0YzEsIDB4ZmZlNzU0MjksIDB4ZjhlOTliZTQsIDB4Y2VhNjVmOTgsCisJMHhkYTUxYjlmNywgMHhmYTdhMDFkNCwgMHg1NmMyNTM2OSwgMHgzODM3Y2ZhMCwgMHhmY2I2MWNkZCwgMHg2OWQ4M2U0MywKKwkweDM4MmJjYzZmLCAweDcxMjY3Mjg0LCAweGQxMTAwNzc5LCAweGYyOGJkMjBjLCAweDBiYzFjODQ2LCAweGExY2FjNzY5LAorCTB4OGRlMWU1NGMsIDB4MGZkZTc0NjksIDB4MDc5ZDFlZTQsIDB4M2M3MjFmOWQsIDB4YTVmNjhmOWQsIDB4NTY5MzViZDksCisJMHg0MTdlMTIzNiwgMHhhMDZlMDI5ZiwgMHgyMThiZTA1MywgMHg1ZjgzOGQzYSwgMHhhNWI5MWJkMCwgMHgzNzI1MTMxNywKKwkweDllMTczYjUzLCAweGE0MjVlZWMyLCAweDJiYzVlNTk1LCAweGEzZjNjMzk5LCAweGQ4ZGQzZTQ0LCAweDE4ZDFlNmNhLAorCTB4NzQ2ZmI4NDQsIDB4ZTZmMzE4ZmMsIDB4ZmZlNzE4ZWUsIDB4ZjczNWMwMWUsIDB4YmVmMDRmY2EsIDB4M2Y5ZWUyMjIsCisJMHgxNDc3ZjYwMSwgMHhjOTY5NzlkZSwgMHhjNmYwN2JmZiwgMHhjYTk3ZjlkYiwgMHhjZjhiMWYwZiwgMHhhY2QyZjhjNSwKKwkweDFlMWY5ODlkLCAweDdjYzU2ZDk4LCAweDNmM2M2OWYxLCAweGMxYTBkMDM2LCAweDBmZGQwMGI4LCAweDg1YTIzZWUyLAorCTB4OTcyMDQzMTgsIDB4NWNiYjcyYTcsIDB4NDU3ODViOWMsIDB4ZTBkNmZlNjIsIDB4N2Q0NTA2OGIsIDB4ZGU3YzUxM2YsCisJMHhlOTc5ODJiOCwgMHhiZjJjNjVjMSwgMHg2ZjdlYzg3YywgMHgxZjdlZDA1NiwgMHg5Y2ZjNzNkMiwgMHg5MzMxNzc0NCwKKwkweDI4ZjdkZGVkLCAweGU2ODlmYmVhLCAweDQ0ZmRmNTEzLCAweDcxMjFlZDBiLCAweDMyOTQ4YTZmLCAweGRkZGZiZjljLAorCTB4YmJmZTkwNDMsIDB4OWY1OGI5NmQsIDB4ODhmYTY1YWUsIDB4YTNlOTgzN2MsIDB4YmFhMjFjZWUsIDB4Mzk5ZDY5MWYsCisJMHg5NGYzMTEzNCwgMHg0NmMxNWU3OCwgMHg2ZmY4M2ZjOCwgMHg5YTdlMGJmMiwgMHhjMmZjYTkyNiwgMHhjOWFmZTU0MywKKwkweGYwZTZkYzJmLCAweDViM2EwMmVmLCAweDkyY2RlNDU4LCAweGViZDYzZDI4LCAweGQyOTg3Zjk5LCAweDgxMDhhNmViLAorCTB4N2NkNmM1NzQsIDB4NDRkZGE3ZDgsIDB4ZTRkMmRmNWEsIDB4MDJmZWJkMjEsIDB4YTUzMjc1ZTksIDB4YmQxNTNjZDcsCisJMHgxNWZjNjFlZSwgMHhlODJkMjE0NCwgMHgwYjRlODg3NSwgMHhmZDAwZjNlMywgMHg2ZWRjNjBmYiwgMHg1YmVmZWY0NywKKwkweDZmZDM1ZjYwLCAweDY4M2NiMGYwLCAweDJmMTlkNzk2LCAweDU5ZTA2MjFmLCAweDVjNzgzMzIwLCAweGYzYzIyZDVhLAorCTB4MGYxM2Y0M2EsIDB4NGRmMGU1Y2YsIDB4MTJhNjlkMmMsIDB4ZjE2MzFmYzYsIDB4ODI0Y2FhNGYsIDB4ZmU2MTkyYjYsCisJMHg2ZmZkOTkzMSwgMHg3YzQzYjhjMSwgMHhjZmRiMDhmNCwgMHg2YjViODA4ZSwgMHg3MzlhN2E0NSwgMHgwNTdmOGIwNywKKwkweDgwMmVjYzJjLCAweDFkMWE1ODM4LCAweDdmMWYyNjdmLCAweGRhYWZhNzRlLCAweDRhNjZlZDAxLCAweGZhNjEwZjBjLAorCTB4MTY3Zjg1MGYsIDB4ZGZkOTlmYWYsIDB4YjM3MDc5OGMsIDB4NjNjNzc1YWEsIDB4MmYyMTIwZWQsIDB4MmU2ZGRjNDUsCisJMHg3ZGFiN2Y2ZiwgMHhkMmYyMGVhNiwgMHhlM2FhZDc2NywgMHg2NGVmNzM1ZCwgMHhiMzM5YjZmMSwgMHgyNWNjZmRkNSwKKwkweDdjYzEzZmFiLCAweDAzYWFkMjRkLCAweDUzYmRjZGZjLCAweGRhNDlmZjVkLCAweDAyNmM5YzUwLCAweDcxMGVjOWM0LAorCTB4ZTUyMGQwM2YsIDB4ZDdhM2UwMTMsIDB4YmE2ZjE3OTMsIDB4ODRmOWQyODcsIDB4ODA5NTE0OWYsIDB4OTQ4NmYwZGYsCisJMHhkMDRmNmRjNiwgMHgyNzFiYjNmMiwgMHg5NGY1Zjk2MSwgMHgyOGZmN2VlZiwgMHhjMDI5NmZkNCwgMHhlMjVjMzU3MiwKKwkweGUwNTZmYjA0LCAweDg1NjdjYTQzLCAweGM4Y2M3N2U1LCAweGMyN2QwMDQ5LCAweGUwODdiZGZiLCAweGRmZDliNzdiLAorCTB4NzNiNjkzM2QsIDB4M2NjNWM5NGYsIDB4ZDdlZTZhZDYsIDB4ZWFjODVjMTgsIDB4YzZkMmJlNmYsIDB4NTJlZjk1NTIsCisJMHg2ZDVjNWZkMCwgMHgxZDM1Zjc2NiwgMHgwNGJiN2UyOSwgMHg3M2FiYWFmMiwgMHhkNWU0Yjk3OSwgMHgyNDNlNTA0OSwKKwkweDNhZjc4MjdkLCAweGNhYjY2YjljLCAweGU5MmQwZWIwLCAweGI5M2VjZmNjLCAweGE0NGYwYTUwLCAweGYyNzZhOTc4LAorCTB4YmNkOTliZmUsIDB4NGI5ZTRiNmEsIDB4YWVhOTNlMDcsIDB4ZjY0Y2ZkNjIsIDB4NDFlNjc2NTQsIDB4MmM3OWNkM2IsCisJMHgyNjM3NGI5ZiwgMHhiZjA1ZmUwMCwgMHg5NTdkZjBlNSwgMHg1YzdkMmJiMCwgMHgzZGU0YmM0ZSwgMHhmYjQ0OTFkNiwKKwkweDBmMjUxOWY1LCAweDcxNTdkMTRjLCAweDY2NGJkZDhjLCAweDdkMDNlNzY1LCAweGZjMTkxY2RlLCAweDJjYmNkM2Y0LAorCTB4YjhjYWI2ZWYsIDB4ZTFlNDBkM2MsIDB4Mjk3ZDdlMmQsIDB4MmM2ZWNiY2MsIDB4MTE3OTA0M2UsIDB4NjU5NTE1ODksCisJMHgyNDZkYTc5OCwgMHhmZTk0YmViOCwgMHgzZjAzYTdjNywgMHg1NjQ5ZmQ1ZSwgMHg1NTlkMTAwMiwgMHhiZTgyZmY0ZCwKKwkweGFmYmEwYTY2LCAweGU1MzdkMzU2LCAweDY1ZTljOWRiLCAweDJhZGY5Njk3LCAweGQzMGQzNmZhLCAweDNlZjY1OGY3LAorCTB4ZTEwMmFiODUsIDB4YWY1YTg2ZmEsIDB4YzcxMzhkMGQsIDB4OGVlM2YxOWYsIDB4MmZlMDM3MjUsIDB4YzMwZWZlNTYsCisJMHg5ODdjOGJkNywgMHg3OThkZDkwMSwgMHg4MjVkYTdjMCwgMHgzODAyNmY0ZiwgMHg5ZTA4OWFmNCwgMHgzYzk2Y2E4ZiwKKwkweDcxODBmMDkzLCAweDdhODhjNzg1LCAweDA1NWY4ZTJmLCAweDMzZTA5OTdjLCAweDE3MDkxOTJmLCAweDZlYzJjOWZjLAorCTB4ZjAyZTdmNjUsIDB4N2FmMDY0YTMsIDB4Mzg5NzlkZmEsIDB4ZTNhMmUxODcsIDB4N2EwZTkxZGYsIDB4Y2YwNjExZmMsCisJMHhjOTk1YTk2NiwgMHgxMTJmYmUxOSwgMHgzMTE2OTdmZSwgMHg3Y2Y1M2VkZiwgMHgxZWVjY2RjYiwgMHhjYmY4MzcwMywKKwkweDNjNTI3NjMwLCAweGNiZWUwODY5LCAweDlmMzEwNzU4LCAweGIzZTdkNzAwLCAweDllOWIzZThkLCAweDQ3MzZlZGNlLAorCTB4ZWRjZmQyM2QsIDB4MjgzYWEzNTQsIDB4ZmY3NGMyNWUsIDB4ZDQxZTcwMGYsIDB4N2VjMWY3MDQsIDB4NjJmMTIxNmYsCisJMHg0N2QyOWNmYywgMHg2ZWM2M2QyMCwgMHhlM2M2ZjAxMiwgMHhiOTBjNjVhOSwgMHg3ODlmM2YxYSwgMHg1YmFmMGNmYywKKwkweGUyOWUwZDI0LCAweDdjZDBlMWZjLCAweGYxOWU3MzJmLCAweGFmNGI4YWY2LCAweGI5M2E1YmY2LCAweGVjMzlkMTdmLAorCTB4ZmE4NDJjNGYsIDB4YTBmNjYyNWEsIDB4ZTEyM2QxM2YsIDB4ZGE5NmFmN2UsIDB4NmJhNzIwMWYsIDB4NzFmYTA4NmIsCisJMHhmYTBkNTY5YywgMHgzMjFkODUxMywgMHhmZjVjOWYxNiwgMHg2YWI3MjY0ZCwgMHhmNzNmMDg5YiwgMHg0ZjE3ZTZjOCwKKwkweGUwNjRhOThmLCAweDFhZDY3ODdlLCAweDgwMGIwZDk1LCAweGFhYWMxYmZmLCAweDU2YjUwNjczLCAweDRlNzg4ZjE2LAorCTB4NTAzMjExYzgsIDB4YTg3ZjdhMDYsIDB4MGZlZjQyM2MsIDB4OGExYzgxOTQsIDB4ZjZhZTdmYmYsIDB4M2I3YmYzMjIsCisJMHhhY2Y4NGEyZiwgMHgwMzJiMWNmNSwgMHgxOWFjZWZiZCwgMHg1Njc5MDMyOCwgMHgxNGZlZjc2NywgMHgxM2RjNTVkNiwKKwkweGJkY2Y4ZjE5LCAweDk3OTExYWU5LCAweDFhNzQ1OTcyLCAweDBlMjI0N2NmLCAweDdmZTZjNDdhLCAweDNmYzYzZDM5LAorCTB4YTA4YTU2NzUsIDB4Y2JiNTc1OWYsIDB4Y2ZlN2U3Y2UsIDB4ZDg3NjdhMDEsIDB4ZWZjMTJhNzMsIDB4YWFkOGRiMzQsCisJMHhkMTM4YmIwMywgMHhjZTkwM2ZlMSwgMHg1ZjE3ZThlNCwgMHg5YTE3ZTZjMCwgMHg1NmRlM2M1MiwgMHg2NjU4N2ZlZCwKKwkweGVlMWUyMmMzLCAweDgxYjg3OGU1LCAweDliZjNkOWViLCAweGE5MGZiOGI0LCAweDBkM2UxNmY2LCAweDliYzBhMGExLAorCTB4YmU0MjEyM2EsIDB4MTQ3ZWEyZjUsIDB4YTc5ZGM2ZjcsIDB4ZGExODU1MDYsIDB4N2Q0MzZmM2YsIDB4ZjU1N2Y4YmIsCisJMHhiMDliMjcxOCwgMHgxODk0NDM1ZSwgMHg2NDMxMzk3ZCwgMHgzMjdmZGQ1NiwgMHg1NTUzYTc3OSwgMHg1ZDM3YTJiZSwKKwkweGJlY2FmZWQ1LCAweDcxN2Q1NTVjLCAweGZlYWE5Mjc4LCAweDU0NGIzN2FhLCAweDU0YzhiMmU1LCAweGRmYWJmYjU1LAorCTB4YWY5NTUyYTksIDB4NmFhMTk4MTksIDB4M2RmNDAzYmYsIDB4NGUzN2UzYzUsIDB4ZmZiZDUyY2YsIDB4MzdmNGUzNjgsCisJMHg1ZDdkM2UyMSwgMHhlZmFhM2JmNCwgMHgwNDNmNzA0ZiwgMHg4NTIzN2EwOSwgMHgwNDBiZmU3NCwgMHg1M2FjNWViZCwKKwkweDlhY2Q0ZjdkLCAweDdjMGU1NGIwLCAweGFjMTZmZWNmLCAweDk1Zjc3OTY2LCAweGZkYjE2MzE0LCAweGRiNTJlYzJkLAorCTB4Mjg5MDM3MTMsIDB4ODRiNjJiZTYsIDB4NDA5ODRmMjQsIDB4YmViYTlkZGUsIDB4ZjEwN2FmYjEsIDB4MGY3YmE5N2EsCisJMHg2YmU2YjgyNiwgMHhjNjk3NTRjMCwgMHgyMjYzM2I1MSwgMHgwZDVjODIyMCwgMHhmMTYzODM3OSwgMHhiZmQ2YTVmYiwKKwkweGE5N2ZlNDgwLCAweGQ1YjgzN2Y1LCAweGQ0NTI2ZmViLCAweDU0Mjk2ZmViLCAweGEzY2RiZmFmLCAweDBhYzRmZjVlLAorCTB4YmMzYmZhZjUsIDB4YWE0ZmY1ZWEsIDB4YjI3ZmFmNTEsIDB4YTlmZWJkNGYsIDB4OWZlYmQ1NzMsIDB4ZmZhZjU3ZTYsCisJMHhiYWY1MDZiOCwgMHhkN2FhYjY2NywgMHg3YWE5N2IzYiwgMHg0YjgyNzM1ZCwgMHg3NGYxZjU1NCwgMHhjODQ5ZTgyMCwKKwkweGY3OTViY2NmLCAweGE0NTNkYmFhLCAweDQyZTg2MjY4LCAweDVmMDJkOWQwLCAweDhkNjNlNjAzLCAweDM1NDg3YWVmLAorCTB4NGM3ZDNjNWUsIDB4ZjQ4ZjNjMjAsIDB4ZTU0N2QyMmIsIDB4NzI3ZjZlMzgsIDB4YTk3YWEwYmEsIDB4ZGEzMjVjNmEsCisJMHg3M2MwMzcxOSwgMHhmZjZlMDRlZSwgMHgzM2I3NDZmYiwgMHhkNThhZmM4NCwgMHhlNmZiYjFlYiwgMHgwOGRhZTRiMSwKKwkweGQxZjdjNTdkLCAweGQ4MmJlYTYzLCAweGY3ODY5YjQ3LCAweGVmZDE2M2QxLCAweDU5ZWE4NGJiLCAweGZhMzU3YzFjLAorCTB4MzNiMGVlY2YsIDB4OTk5YTBlMzgsIDB4NTQyOWZmM2QsIDB4ZDFkYjQzNWQsIDB4ZGUxNDE1MzYsIDB4NzQzZTYxNzcsCisJMHg5M2NkNzdmYywgMHgxZGYyMGZkMSwgMHg3MTgzYWJkMiwgMHg3YzExMjRlZiwgMHg3YzUxMjNjZSwgMHg3NTVkODlmYSwKKwkweGYxMDE2NWJlLCAweDY0NWZiOWU5LCAweGM5YTllMDA5LCAweDdhMGU1MDM4LCAweGEzZmNjMmZmLCAweGVlN2M2M2VmLAorCTB4ZGQ2NWQyNDgsIDB4ZTIxYzcyMDcsIDB4MzkwOWUzM2YsIDB4NDljOWU1YzUsIDB4ZjJkMTAzODgsIDB4MjdmNzEzMzksCisJMHg4YWUyODk3YSwgMHhlZTI5ZTdjMSwgMHgyNjliYWNmNywgMHg1YTI1OWVhMSwgMHhkNWIxZTYzMywgMHg5ZWExMmVkZCwKKwkweGY2MGZmYmFhLCAweGY0YzcxZjZjLCAweDUyZTc4OGRhLCAweDZlMmVkNzgxLCAweGExM2IzMDFmLCAweDYyZGQwZTBmLAorCTB4YWRmODkwZmMsIDB4ZWM3YThmNjgsIDB4M2ZiNGRlYjAsIDB4NDdmOTg3MTYsIDB4ZGJiMTdmNzYsIDB4MjVkY2UwYzgsCisJMHg4OWMyYjkxMSwgMHhkZDcxMDZjNywgMHg3Y2UxZmQ2MSwgMHhlMGM4ZGI5YiwgMHg0NjIzYTVkYiwgMHhlMjY0ZWZjMCwKKwkweDMxZjBmYjQ3LCAweGQ2M2M4YTk5LCAweGVmZDYyNGVmLCAweDE3ZjA1Y2QxLCAweDdlNmZjZDlhLCAweGE5ZjIxYWFiLAorCTB4ZjQ3MmUwZTUsIDB4YTg4ZjdmZGYsIDB4YjY3N2Y3ZmQsIDB4ZmZiZmU4NGEsIDB4M2U5Yjg1MWUsIDB4MWI4Zjc2ZGQsCisJMHhlZjI4YjJmNCwgMHgxZTIxYjgwMiwgMHhmYmU4ZWQwMCwgMHgwNGFiNzc1NCwgMHhhZGFmYjFmZSwgMHhiMTBmM2RiZiwKKwkweGJmYjI1Zjc2LCAweDgzMDg3ZWExLCAweDNkNjBmZTBiLCAweDgzMzY3Zjg1LCAweGQyODFiN2QyLCAweDExZWZiNmNiLAorCTB4ZmJjNjFmZjQsIDB4YTk2OWM3NmIsIDB4MzFmYzgxMDYsIDB4YzA5N2JiMWQsIDB4ZmI2N2FmMmQsIDB4YmIxZWMzZTIsCisJMHg3NDQ0Y2ZjYSwgMHg3YTQ3MzgwZSwgMHhmMjBlN2IyOSwgMHg5Y2M1NGZiZSwgMHgzNDc0YTBkMywgMHgxZmJhZmRlYSwKKwkweGE0N2NiMDY1LCAweDQ0YzhiNmY2LCAweGUzOWU0Yjg4LCAweGRiODdkNzcxLCAweDU2YjJjNGRlLCAweDI2NWU2MGY2LAorCTB4ODhlNWY3ZGMsIDB4YTJlZjVlZjksIDB4NGU3MjMxZjUsIDB4NjNlZmQyYjYsIDB4ZWFjZThkZTQsIDB4MWU2YmNiYzMsCisJMHhiYzYwOGI2OSwgMHgyNWVmYzc1MywgMHg1ZWUzMzQ3YiwgMHhiZmM2M2ZiYiwgMHg2ZTM4Y2VmMiwgMHhjNDgzMTkyNywKKwkweDY5Yjg0MjllLCAweDRmNGVmZjRmLCAweDVhM2Y0MDIzLCAweDc2MmE3Y2JiLCAweGQzNzA2ZDFmLCAweGVlZjU2MmZlLAorCTB4MWIxMjY0YzUsIDB4ZjZkOTU4N2YsIDB4ODhmZGMyMGUsIDB4Njc0M2Y3ZTQsIDB4MzYxMjdjODYsIDB4NjQxYjdjNTEsCisJMHhkZjRkMDMzOCwgMHhlNTExYjg2ZiwgMHhhZjc2ZGVhZiwgMHgxYWExZWUwNywgMHhiNzA2N2YwYiwgMHg3ZTU2MjE3YywKKwkweGRmOGUzODdlLCAweGU3ZTVjNWNmLCAweGM5ZDE2ZDkzLCAweGRiN2I0ZTMwLCAweDVkNmYwYTgwLCAweGZkZjExNzZkLAorCTB4YzQ1MjM2OWEsIDB4N2FjNDNmZWEsIDB4ZjQ4MjhkNGQsIDB4NDJkMjhhNzMsIDB4ZjI3YWUyMDQsIDB4YzFmYzBkODAsCisJMHgxMDI2M2VkNCwgMHg4ZGI5ZDY3ZiwgMHhiODMwNmYxOCwgMHhhMmU0YmMxOCwgMHg5ZTYzZTkwYiwgMHgzZTAwYzE5ZCwKKwkweDFmNGE0Y2JmLCAweGUxZDUyZmVmLCAweDRjYmVmYWZlLCAweGVmYmZiNjJiLCAweDc4MGZlMzM3LCAweDI5ZWFkZjI5LAorCTB4YzM3ZmI0MWEsIDB4NjFjNzg2N2MsIDB4Zjk3M2QzZjgsIDB4MGZiZjY0NDksIDB4NWQzZTgwZTQsIDB4ZDM4NTM4YzYsCisJMHhmMWQ3MGIzZSwgMHhmMDI3ZjZjYiwgMHhjYzExMzdhZSwgMHg1YTY3ZDY0NywgMHg1Y2I4NWVkMSwgMHg2YTE5ZGQzOCwKKwkweDhmZTNjN2JjLCAweGZmZTUwOWUyLCAweGY3NGYxYzdkLCAweDkzZmNjODNkLCAweGYwNGZkZGY3LCAweDRhNTkwNTNjLAorCTB4ZTk4N2NhZmYsIDB4ODc5NzFjNmEsIDB4Y2Y4N2M0YTksIDB4MDgyYTM2YWUsIDB4NDY1ZWIwMGQsIDB4ZWQ0MDlmZTIsCisJMHg4ZDhiZDIxMSwgMHg4MmE3ZTA0ZCwgMHg4MGVjYWY3YSwgMHhhYTI3ODhkNCwgMHhiOWUxMzM1ZCwgMHgxNzY0ZTJhNiwKKwkweDZiZGFlM2IwLCAweDEzYzA4YjNmLCAweDJmODAxMTYyLCAweGMxMDkwMzdiLCAweGFiOThiYzU1LCAweGY4NzdjNzQwLAorCTB4ZDc4MTM5NTksIDB4ZTU2NWNjMjcsIDB4ZTg5ZjVlNDQsIDB4ZWY0Y2U1NjMsIDB4MDAzNTUyMGIsIDB4Y2I0NzE3MTYsCisJMHhjYTZmM2FiNCwgMHg4MGJjNzkwNywgMHhmY2YxNzNiMCwgMHg4NGNkOGQ3ZSwgMHg3M2FiMGJjYiwgMHhkZmQ0MzU2NiwKKwkweDhiOWNmMDQ5LCAweGFmMDlmZmE4LCAweDVmMWViMzRmLCAweDYzN2EwNzk5LCAweDBkZmJmYWI2LCAweGQ2YTkwZjFjLAorCTB4MzBkMzVkZTMsIDB4MTdhZWE2ZGUsIDB4ZWI2NGFjZjEsIDB4ZmJmMTM3ZjksIDB4NTNmZDc1MjIsIDB4ZjU5YjdiZmMsCisJMHhkNDFhNjQ3YywgMHg3ZmM3YWJlNywgMHhhYzViZDc5YywgMHhjYThkZWYyYywgMHgwMzdmNzY3ZSwgMHhkNzhjN2ZhZiwKKwkweGM2MWVhMDliLCAweDVhZjU2NDJmLCAweDZmMDlkZjcxLCAweDE4ZTFjOWQ3LCAweDQzMWUzM2UyLCAweGJmMzMyNjBjLAorCTB4MjMzNjk2ZjIsIDB4YmYzYzU3ZjIsIDB4NzNmNzA3ZGQsIDB4OWJmMzBkOTUsIDB4ZjUxOTI5N2QsIDB4MzJmYjg2ZGUsCisJMHg1MDQ5ZGM5OCwgMHg1MWRlYmMwNiwgMHg3N2E4YTJlNCwgMHgzN2NjNjVkYSwgMHg0OGY1YmFkMCwgMHg5NzJiMDY0ZiwKKwkweDg3MWY5YzI3LCAweGVhZDQ4OWU0LCAweGU0YzY0NDYxLCAweDlhZThhNWY0LCAweDkwMDVmMDEyLCAweDBmZjQ1OTZiLAorCTB4ZmJlMzNhZTgsIDB4OTE4ZmUyMWEsIDB4NjY0ZGU5NzMsIDB4ODNlNThmZTIsIDB4Mzk1NTRlMDUsIDB4NTU3NGNlZTUsCisJMHg1Y2VjZDc3YiwgMHg3NGI1YmQ1NSwgMHhjYzllYWE5MiwgMHhkYzlmMjI3NiwgMHg1Y2NiZTljYiwgMHgxN2FhYTI1NCwKKwkweDZkOTA2NWY3LCAweGI1OWQ5ZGJjLCAweDU1NGZlNWQzLCAweGE4NWYzYmI1LCAweDlmOGQwMjI0LCAweGEzZGM0OWJhLAorCTB4N2M4MjMxZTYsIDB4OWI5NmQ3YjgsIDB4YjNmOGZjMGEsIDB4NGU0NDBhYjYsIDB4ZjYyN2U1M2IsIDB4MWJhN2YzYjQsCisJMHg1NGZhNTk4YywgMHhjYjEwYjk3OCwgMHg3ZTU4M2JjZiwgMHg4NzliN2I3ZiwgMHg5ZTA4NzM5NSwgMHhhYjZmNmZhZiwKKwkweGNhMmVmMmMxLCAweDY5ZmNmMDlmLCAweGRiOWYxNzliLCAweGNmYTE1OTY5LCAweDJiZmRhNDdmLCAweGRhMWU5ZmI0LAorCTB4YTE5Zjk0M2YsIDB4MzM3M2MzZmQsIDB4M2Y5ZTFmZWQsIDB4ZmQ0M2ZkYTEsIDB4OTQyZmRhMDYsIDB4YzE3MGE2OWYsCisJMHgwZmRhMjlmMywgMHhlZDMxZmZiYywgMHhiNDRmY2ExZiwgMHhiNmJjYjBmOSwgMHgxZjk2MmU2ZCwgMHhmM2UzZjM2ZiwKKwkweDdjMDZiNmIxLCAweDhhZDZkOWRmLCAweDk2ZGI0N2U1LCAweGI2ZTFmM2UyLCAweGRiZGIzZTIwLCAweDJmN2Q2MjU2LAorCTB4ZjllNzkzYTcsIDB4MmJlN2RjNzksIDB4ZjEwM2JkZDksIDB4MjE5ZmRmZWIsIDB4OWQyZmJiNjEsIDB4MTU0YTUzOWYsCisJMHgzZjJhYjk3YSwgMHhmYzAzM2ZhNywgMHhmY2VhYmQwMiwgMHhjMjFmYzA1NCwgMHg4Yzc4NjI2MSwgMHgwNjY4ZTM4NywKKwkweDkxMjcwZmIzLCAweDkzMGI3MmM4LCAweDFmMDcxODFmLCAweDYxNTllN2RmLCAweGFlMzVmY2ExLCAweDRlN2JhZDk1LAorCTB4ZDNlYjE0NWYsIDB4NDc3OGQ4MWEsIDB4NWM0MDlkYjksIDB4Y2U1MTkyNDEsIDB4YmI0MzliOGUsIDB4Y2FhNDUyNzMsCisJMHhkMDA3ZjJjMiwgMHgxNGRjNDMwZiwgMHg1YWVjZTUzZiwgMHgyMWU2NDY3MiwgMHg1NzI1YzAwZCwgMHgzMzFlM2Q1MCwKKwkweDM5N2MyMWFmLCAweGI3ODA5YzE4LCAweDU3ZmRlMGQxLCAweDY5NmQzNzhlLCAweGE3NWZiYjJmLCAweDZjMGMyYmE2LAorCTB4ZTJiNmY2NjYsIDB4YjljNjNhZmQsIDB4OWY0Y2IwYmUsIDB4ZWYxZjlmMmUsIDB4NzE3NDk4ZTksIDB4NTIyNGRkM2EsCisJMHg5YmYxNzZmOSwgMHg4Y2NmYTE0NCwgMHgzMWZlZjUyNiwgMHg2YTg5NDE3ZCwgMHhiOGJkYTY3ZiwgMHhkMTU3Mjg4NiwKKwkweGZiZDQ4YjdlLCAweGJkZmU3MzNjLCAweDE5OGNlZmFhLCAweGY1ZWFhOTBmLCAweGZhYWExNWFlLCAweDFlNzNiYmJhLAorCTB4YzczZTAzNzEsIDB4NjE5OWI4YjEsIDB4MjEwMjcyZjUsIDB4NGZkZDg1ZTQsIDB4NGNlNjVjMjAsIDB4OTI3MzhmMzYsCisJMHg2MDVmN2VjMiwgMHgxMzNkZmYzNywgMHhkNjc5N2ZiZSwgMHg1YzY1ZjFjZSwgMHgwOWYyZmI4ZCwgMHg0ODJjNTYwZSwKKwkweDBmNDA2YTBjLCAweDQ0OGJmYzdkLCAweDllM2I3Zjk0LCAweDdlOWZhMGQxLCAweDQwNjkwOTIyLCAweGU2YTY0Y2RlLAorCTB4MDE1ZmQ0MjQsIDB4ZjE2YjhjMzcsIDB4OTQyZDI2YWEsIDB4ODVhMjg5OGIsIDB4OGEyNDU1ZjIsIDB4N2ZiYTNhZmIsCisJMHhmNWQyNjRkMSwgMHg5ZmZhZDE2YiwgMHhkOWYyZDEzMSwgMHgyY2IzZmY0YywgMHhmYThjMzBiZiwgMHg2N2FmODBiYSwKKwkweGFkYzdkODgxLCAweGRjZmRlMzk3LCAweDM3ZjQ0Y2M2LCAweDc2MjVjZmE5LCAweDg3NGJmZGYwLCAweDk3MGRmOTg5LAorCTB4YzE1M2NhM2IsIDB4NDYzNzNlMGUsIDB4N2RjZGE4M2UsIDB4MTQwNThkZTIsIDB4NjNiNGI2ZGYsIDB4MWZlZjE0ZjgsCisJMHg5ZWEzMzQ1NywgMHg5NGNiY2ZkNywgMHhmNzVlNWFiZSwgMHhkNDRmYWE3YSwgMHhmMzA3OTM3YywgMHhjZmZhNWIzOCwKKwkweDZiNzZlMDI5LCAweGZmMjI4ZmM5LCAweDNjODRlODc0LCAweDllNDExMjUzLCAweDg5M2Q5NzBkLCAweDNiMWU2NjI0LAorCTB4OTNjOWRlZGEsIDB4MTFmYTIxNTEsIDB4Mzc1ZjMyNmYsIDB4NGZmOTVmMzEsIDB4NGJjODc2OTUsIDB4ZDE3OWUwMmMsCisJMHhmMmQyZGIzYiwgMHg3ZjBmYzdhYiwgMHg1MDc0ZTNlZiwgMHhhMDM1MjI0OCwgMHgzNDhiMGI1ZiwgMHhlMDc0MTA5ZSwKKwkweDMxZmNhYmI1LCAweDJmMmVmY2E2LCAweDRiOTMwYjljLCAweGYyYzQwNzg4LCAweGY3ODVkMjQ0LCAweGQ1N2ZjODI5LAorCTB4N2M5YTNlNjIsIDB4NTBhMjFhZjAsIDB4MGQ2YWQ4ZmIsIDB4NzBkMTYwOTMsIDB4NzVmYjg0YmYsIDB4ZmNlNWNmYmUsCisJMHg5YzZhZjY2NywgMHhlYzI1OWM4ZiwgMHg3NGU4MGYyNiwgMHgxYmQ1OTlmMiwgMHhhY2ZjM2EwMSwgMHhmNGQ4Yzc1YiwKKwkweGQwYmViYWI4LCAweDJkZWY1MDRhLCAweDE0ODdkNDJhLCAweGViY2JlZTA5LCAweGU1NDA3YmMyLCAweGM4YzkxMjJkLAorCTB4YjlhNjM4MDEsIDB4ZGY3ZTgzZTcsIDB4YjYzYTQxNmIsIDB4OWZjNzJmYWMsIDB4ZTM1OWI4MzAsIDB4MGVmYzQwYWYsCisJMHhjMjM1N2IyOCwgMHg5YWVkYTJlOCwgMHg4MmI3ZWIyNywgMHhmMDAxMzkzZCwgMHhkY2JjMDU2MiwgMHg0MzBkNWY5MSwKKwkweDFlMjIxN2U3LCAweDJmNzlmMjE3LCAweGM4ZThmM2U0LCAweDgzM2ZjMjFjLCAweDcwYmM3ODg3LCAweDZlYTJlZjFmLAorCTB4Y2Y1MjhmZTEsIDB4YWFkMmYxZjMsIDB4YTJiZGMzNmYsIDB4ZmYyZDExZWQsIDB4M2UzNTIyOTksIDB4NTMyMmU5NTcsCisJMHg3MGMzNGJlNiwgMHg2NjE3Mzg1MSwgMHhiODAxNWM4MiwgMHhkODBmODJhZiwgMHg5MTlmOWFmYywgMHg5NDFjYzZjOCwKKwkweDZmNjgzNTZiLCAweDNmMzA2OTk0LCAweDliMmU5ZTNkLCAweDhmZGM5OTMyLCAweDdkZDlkODY2LCAweDQ4NTNlZWU0LAorCTB4OTNlNWMzY2YsIDB4YzI0ODJjNmYsIDB4NWJiMzMzZmQsIDB4OGZjYjMyNmMsIDB4NTg5NTdhZjQsIDB4ZTEyYWY3YmYsCisJMHg3MmU3ZTQ1ZiwgMHhhMWRlMWNjYywgMHhiMTI3MDU3YiwgMHg4OTJiNjBiYywgMHhiNGJjODdhYywgMHgyYmY1ZjZiMSwKKwkweGRjNzA3MzMyLCAweGI1M2Q3ZGUxLCAweGE1M2YyMDVkLCAweDVjNzk4OGNjLCAweGExM2U0NGFiLCAweDY5OTk1NDcyLAorCTB4NTczODRmNjMsIDB4ZmE3NGU0NjUsIDB4Zjc5ZDRkYTgsIDB4NmZjZjlkYjMsIDB4NDE4ZjVmM2IsIDB4ZjI3YmM4YTMsCisJMHg5Y2M3MTZkNiwgMHhhZmViYTlmMywgMHg4ODk2M2Y0NywgMHhmZjcyMGVkMywgMHgxZDU5YTBlMSwgMHhhNGU0NmQ1NywKKwkweGFiYTg3ODMwLCAweGMxZjEwY2NhLCAweDZkYTcxNjJlLCAweGRkOTliZmVjLCAweGM3ZWZiYjZiLCAweGVkMzAyZjc4LAorCTB4YTg3YTAxNTMsIDB4NTdlYmVkZTcsIDB4MGI1OGZkYWEsIDB4NWY5MWZhNzcsIDB4ZjE2NGZkZTMsIDB4Mzk4YTMxN2UsCisJMHhlMzFmZWMzZCwgMHgzMzViNjJmZCwgMHg0M2MyN2VmOSwgMHg3YjBlMjE4YSwgMHg2MWRlNzU2MiwgMHg3Mjc3ZWMzMywKKwkweDFmMGY5ZTA4LCAweGVmMDE3ZGE3LCAweDgxYmJhNmRkLCAweDk3NGZiODJlLCAweGEzZmJiMTE0LCAweDU0ZmZkN2UyLAorCTB4YjJmMTFlOTYsIDB4NzhlZmFjNTMsIDB4M2JhNWRhMmIsIDB4ZDgxYzk4Y2IsIDB4MmRmY2UwNzksIDB4MmIzZjY5ZTMsCisJMHhmOWQ1MjQ3MywgMHgzYTM5OTU4MCwgMHgyOWI3YTc1YywgMHg5N2IzYzM3ZCwgMHhlZWQxOWE5MCwgMHhhOTk0M2IyOSwKKwkweGVmNzI2YWY5LCAweGMxZWZmNTVhLCAweDFjMGRmNzM0LCAweGZmMjgyOGI2LCAweDFmYmEwMzVlLCAweDQyNzlmYzNjLAorCTB4MTQ1MWYyMTEsIDB4MDhjNGJmN2YsIDB4YzE5OTMwYzIsIDB4NzZiM2U3MGQsIDB4MTc5OTNlNmIsIDB4Njc2ZjBmNGIsCisJMHgzNmZmNThjYSwgMHgwZDJmOGJhNywgMHhhZTFhYjU1NywgMHhhNTZmNDViMywgMHhmZDcwNjBjYywgMHhiOWM2ZTQwZSwKKwkweDU4OTRmMWYwLCAweGI1YzA0NjdiLCAweDAzZGY4YzdiLCAweGUyYWJmMGY4LCAweDFmYWQ0MmE5LCAweGZhNzRmMDYyLAorCTB4NmVkM2MzYmYsIDB4ZmNmMGU4ZmQsIDB4YjNmM2MzOTUsIDB4OWI1ZWVjNDMsIDB4NTE1ZmY1OTEsIDB4ZTFhYjc1OWYsCisJMHg2NDdjZmIzZCwgMHgwYTQ5ODgwZSwgMHg3ZjExNWZlZiwgMHgxODI5OTNlZSwgMHhlYmY4ZTYxMywgMHg1OWY0ZTUyZCwKKwkweDA3OGZlNWNhLCAweGMwOTE1MGNmLCAweDFlNjM1NzdiLCAweDkyNGNhZjY2LCAweGJlNWNhMTZhLCAweDJjZjc3ZjAwLAorCTB4MDJjM2VmOTMsIDB4YmY5ZTNmMWEsIDB4NDYxOWVmMjEsIDB4NjRkNzdmOTUsIDB4OWRkZWJhMzEsIDB4ODc4YThkMmUsCisJMHhjZjM2MmNkMiwgMHhiMmVhNDcwMywgMHhkOGYxYmZjMSwgMHg3MjAyMDYzYiwgMHhiZmNmMzM2MSwgMHg2YmRlY2M3ZSwKKwkweDA1YTY3Yjg0LCAweDQyNWNhMTFlLCAweDc0N2QwMTlmLCAweGM3YmMyODExLCAweDJhMzMzZjRhLCAweGQzYzY1MWQ2LAorCTB4YzZkNmYxYjAsIDB4NGYxODhkZjEsIDB4MTU2NGE3M2MsIDB4M2E1NTdiMzIsIDB4Mzg3Mzg1YTQsIDB4MGI3ZGFmNmIsCisJMHg1YjViN2ZlZiwgMHhmZGVjYTMyYSwgMHgxZDVmZjhkMiwgMHg1YmYwZmY4NywgMHg3YTMwYjcyOSwgMHhlMTQ1OTI5OSwKKwkweDkwZmU5MTZiLCAweDBlNWE2ZGYwLCAweDJhN2ZkMTQ4LCAweGJkMTU3YzgyLCAweGEwMWZlNzFmLCAweDQ2OTFlYzc4LAorCTB4OGIyZDI5ZTIsIDB4OWY5ODhiZDEsIDB4ZGI4MGJmOTgsIDB4NWMwMmRkNzYsIDB4MDZiYmRiMDcsIDB4YmNhNTFhNTQsCisJMHg4OTE3ZDBiZCwgMHhiY2MxZmY1YywgMHgyYjVjNWY1MCwgMHg2NTRjNzNiMywgMHhkYWZiYWUzMiwgMHhlZTc4YTk4YSwKKwkweDE3Y2YzNzZjLCAweDFmYTM1ZTg5LCAweDE2NDQ3N2Y1LCAweDc2M2RiYzcwLCAweGI4MTFiN2YxLCAweGFmZDgzOTQ3LAorCTB4ODgzZmZiYzMsIDB4MTViZWUwM2MsIDB4OGRmZjFmZWUsIDB4NTM4OWY3OGMsIDB4ZmI4MWFhN2EsIDB4MzkxYzBlY2MsCisJMHhlYmZiMDA5ZiwgMHg4NDNhNTlmOSwgMHg4Nzk3M2U3YiwgMHgzNWI1MTc4MywgMHhjOGVjMWU3OCwgMHgwYzZkNzY2NywKKwkweDY5NjVkN2ZkLCAweDg5MTI3ZGI5LCAweDM1YWYzOWMwLCAweDhiM2NlYzI1LCAweGQ2MDNkYjk1LCAweDAwMWIyNzIzLAorCTB4NDNjNTZiN2UsIDB4ZGU4NjI5MDYsIDB4MTAxOTY1NjYsIDB4NjhmYTM1YWUsIDB4MTdmNjg3OGEsIDB4NjEyNWE3ZDgsCisJMHg3YmMxZmZlNiwgMHhiM2NlODcxOSwgMHg1YTFlMTlkYSwgMHhiZGExMGY0YSwgMHhmNzY3ZWQ2MCwgMHgyOTY1ZDYzNSwKKwkweGI4NTJjZTRjLCAweGU2ZjdkMmY3LCAweGViZDk5Zjg5LCAweDhlOTRiZWExLCAweGJkZmMzYjk3LCAweGQzZDZjZWNkLAorCTB4NGJlZWM2NWMsIDB4M2ZlZDdiNWEsIDB4YzgzZWUxZGIsIDB4NDcxZGY4NDQsIDB4NzlmMmVmZDgsIDB4NzI5MmI4MGEsCisJMHg0OGRmYmMzNSwgMHhjYmY4MTcyNCwgMHg1YWJlNjMyZSwgMHgyMzVlZjg2ZiwgMHgyZjgyZmJkOCwgMHg2MmQ1Y2FkZSwKKwkweDM5Zjk0N2JiLCAweDBhMmI0Nzg5LCAweDRjYWU3MDQzLCAweGRiMzViMWQwLCAweGNjMTY0MGZmLCAweDBiYzVmMjhmLAorCTB4N2M0NGVmNjgsIDB4ZjYzZjEwZDMsIDB4ZGYzM2M4NjIsIDB4MzJlNjQ1MjUsIDB4MDc2ZjQ0M2IsIDB4NjhkNDJjM2UsCisJMHhlMTE2ZmM1NCwgMHg1NDllMjZlYiwgMHg3M2RkYTNmZCwgMHhhMTVkYTczZiwgMHg0NjQyM2JmNywgMHhmZTRkZTcwMiwKKwkweDIyNjY3MTc4LCAweDE5MWRhN2Q4LCAweDFhZjNkZWMyLCAweDI1OWI1ZjAxLCAweDhjMGU2MjVmLCAweGRjNWEyZmYzLAorCTB4NzIzODFlMGYsIDB4ZWRjNjAxYmMsIDB4YmUwMmYzYTAsIDB4ZWI3NWY4N2QsIDB4M2E1M2IwNmEsIDB4NTNlNDVlZWMsCisJMHhkMGVjYmUzMSwgMHhmZDYwZjVmMCwgMHhkZjdiZDZlYywgMHhkNDY0N2YwNCwgMHgzYWNkZWVjMSwgMHgxMTg2NzUzOCwKKwkweGQzYjY5ZmU4LCAweGEwN2YzZjQwLCAweDA0ZjBmN2ZiLCAweGZkMWFhN2U4LCAweGIzZWQwYjA2LCAweDhiNzdjM2E2LAorCTB4YjAxMWZmODgsIDB4NmI3NTE3NmYsIDB4M2M4M2Y3NTUsIDB4YzJjNWU1Y2MsIDB4OGUxMjE2OGIsIDB4YWMyYzJmZDksCisJMHg2YjllMGVmOCwgMHgwMTMxNzg1YywgMHhjZmNjM2ZkZiwgMHhjZmNjM2ZlZCwgMHhmOGUyZWRiZCwgMHg1ZjNmOTk3OCwKKwkweGZiOGFmYWNmLCAweGRlOWM0ZjZmLCAweDhlZGRmZTRhLCAweGJiZjdjNjNhLCAweGE1OWFmZDYwLCAweGZhYTgzZDAxLAorCTB4YzczZjUzMzUsIDB4Njg3ZjY0ZjMsIDB4MjFiMDkzYjMsIDB4ZjMxMWRlMDYsIDB4OThlMTIyNGMsIDB4NWRkYTg3NzEsCisJMHg1MjcwOTEzNCwgMHhmYTMyZmFlYywgMHgxNWFmOWUxZCwgMHhlNmQwZmZlYiwgMHhkZDhlM2M0NiwgMHgxZTE1MzhmZiwKKwkweDUzY2ZmYjg3LCAweGZmNjQ3MWUxLCAweDg3ZmY1ODA1LCAweGY0NGJjMmI2LCAweGZlOGM3OTNmLCAweDBmZjA1NDczLAorCTB4ZWY4ZjliZjcsIDB4N2JhYzFkY2YsIDB4ZWVmOTQyZDYsIDB4YzZjNTc4NjAsIDB4ZjdlMTRiNTcsIDB4N2JmODBjZjcsCisJMHhiN2FmYTQxYiwgMHhlZWI5Y2YwYSwgMHhmYTBlNzgyMiwgMHg3YTdmZmQ4MSwgMHgxZjUyZjIxZiwgMHhjMGY3YWFkOCwKKwkweGU4YmE4MzE4LCAweDdhMjhjZjNjLCAweDgzZDg5ZjI2LCAweDc4OWNlZjcwLCAweDg3OTU5ZGJlLCAweGRlZmYxY2ViLAorCTB4OTBlYzg3MjgsIDB4OTQyYzZhNjcsIDB4OGNlN2EwZWQsIDB4MDE1YTEyMjQsIDB4MjM1Mjk3ZmIsIDB4ZGYxMTM5Y2EsCisJMHgzNGZlZmQxMiwgMHhiMzkyYWI1MywgMHg0NmExN2VlMiwgMHg2OGQ4N2Y5ZSwgMHgyNmFmZjE2MSwgMHhhYzJjZmZhYiwKKwkweDU3NGQxMmZmLCAweDFmNjhjZmNiLCAweGYwM2IwYmE3LCAweDBlMjEzYjdjLCAweGY4ODhkN2RjLCAweGM1ZmIwYzhlLAorCTB4Zjk3ZDcwM2MsIDB4OWIwYjljMDgsIDB4MGNmZmUzOTcsIDB4MTUwOWZiYmUsIDB4ZDFlZjEwMmIsIDB4MGZjZGIxNWUsCisJMHhmMzhmNzlmOSwgMHhhNmUzZTQ3ZCwgMHgyMzEzZGI4OCwgMHhmMmQ5NzUzZiwgMHhiYTFiYjM1NywgMHhlY2I3ZThlMiwKKwkweDhjYzIzYjc3LCAweDQwZDk3NTdlLCAweGNmYzhkYWJmLCAweDdjZTA3MmViLCAweDY3YmYwMGUzLCAweGI5ZmI0MTRlLAorCTB4ZGUzMGY0YWUsIDB4ZmMyNzU5NDcsIDB4ZjNlMzJiMDIsIDB4NjAxZDMyNTYsIDB4NTQ3ODhiNGYsIDB4ODIxN2U0MDIsCisJMHhkZDg2YjBkZCwgMHg2MTZmNTg1MywgMHgyNzVmZmFlNSwgMHhiYTE3YjllMSwgMHg4MTE0YjIxZiwgMHg2NWFkZDk5YywKKwkweDA3MWUyMmZlLCAweDFlNjFjZjNiLCAweDAyYzlhZTM0LCAweDdjZjIwZWZjLCAweGFmZmRmMzk3LCAweGU3YTdiZGUxLAorCTB4M2E0NzhlNTcsIDB4MGZlNWZmYTgsIDB4ZGRjMzFlZjEsIDB4MGQ5ZjRjZTksIDB4M2VhMWIzZWUsIDB4Y2E3ODM3YWIsCisJMHhkZGNkNWVlMSwgMHhlZDZlY2NlOSwgMHgyNTA5YzM5NSwgMHhhM2VjNzYzMSwgMHhhNzI4NTUxOSwgMHg1ZTM5NWUzZiwKKwkweDE5MjcxYjEzLCAweGMyZTRjZDlmLCAweDk0ZmZlMTFhLCAweGNlNzBlNWEzLCAweGYwZDJlM2VhLCAweGRkM2VhMTNmLAorCTB4MWJkZmMyNjMsIDB4NTNmZGVjZDMsIDB4YmFiZmRlMzksIDB4NjNiZjgwYzYsIDB4ZTI3N2I1NTEsIDB4NWZiMGI5YmEsCisJMHgxZjMxOTA0YywgMHg4NGQ3YjM1YiwgMHhjNTVkOWNmMCwgMHg2ZjgzODNlZSwgMHhlZjM1ZWU0MSwgMHhjYmJmODcxZCwKKwkweDYyODk2ZjU2LCAweGQ5YjM2NGRlLCAweGMxZjEwMDUzLCAweGMwZGZiZGZhLCAweGYxMzg5ZmRmLCAweDkwMmNjNGY4LAorCTB4OTU5M2M3ODMsIDB4ZmI2ZmJjMmMsIDB4M2E3NDhhNzEsIDB4MjZmYmUzZWYsIDB4NTc5ZGY3YjAsIDB4ZGI2YWI5ZTMsCisJMHgzNDdmOGIxYSwgMHg0YmQwODhmZiwgMHhlZGNkZjdmMSwgMHhkNzNlMmY0ZSwgMHg2ODk5ZjgwNywgMHg1ZTFjODBmNCwKKwkweDY3NWZlNDM4LCAweGJmZDYwN2Y3LCAweDI0YTU5ZDE5LCAweGYzMDZmZmEwLCAweGE3ZWRlYTE3LCAweGViMWRmN2YwLAorCTB4NDlkZDhmYmIsIDB4NDJlOTNlMzAsIDB4YmNmYjE1ZmEsIDB4YjllYjcxZjgsIDB4OGZhZGRhZmUsIDB4ZDVkZjgzY2UsCisJMHhmOGU3NmZhYiwgMHg1OWY3YmZlNywgMHhkZmM2MjlhZiwgMHg1ZmY4MTQ5YiwgMHhmMzFmNzcxMywgMHhjNWRlMzhmNywKKwkweDE5MTFjNGYzLCAweDc2YTRiOWVmLCAweDhmZjgxNjQ1LCAweDIwMzdlYzRlLCAweDMzNTg5ZGJkLCAweDEwNTdlZjE5LAorCTB4NTg1M2Q1ZTMsIDB4OGY0Zjk0ZWQsIDB4YjAyOTk1M2IsIDB4MTViMjBiYmUsIDB4YjY3NmZmMzYsIDB4ZTllZjE1N2YsCisJMHhiZGY4MTFmOCwgMHgyZDNlZThjZSwgMHhkYTBkYWZlNiwgMHhjNzEwMDlhMywgMHg3OTQ0ZWQxNCwgMHg1YWZkM2U2OCwKKwkweGRkYjdiZGZjLCAweGRkNzAwN2U5LCAweGEwMTE1ZDI5LCAweDZkMmZjZDJiLCAweGJmMDNiN2E4LCAweGY3MWJiZjY0LAorCTB4ODIwOTI5NzEsIDB4OGVmODM0OWYsIDB4MDc3YmY3MDEsIDB4OWVkMDE5ZjcsIDB4OWQ5NzdjMWUsIDB4ZWY3MTFmY2YsCisJMHgwNTlhMzU5ZiwgMHg3ZTA2ZGNmNywgMHhkYWU1MGUzOSwgMHgwYjc0NjY2MCwgMHg3ODRkYmZiMywgMHg1MWUwZTRjZiwKKwkweDVlM2NkNWZmLCAweGQxZWZjNjljLCAweGVmYmIwMzRjLCAweDE4NTMzZWMyLCAweGM0ZmEzZWVjLCAweDZjOTA0M2I4LAorCTB4ZmRmYmUzNzMsIDB4ODgyZmJjMTYsIDB4MjRmOWQ5M2UsIDB4N2YxYjhmNjksIDB4ZjE3NDg5MzcsIDB4ZmRmODIzZWYsCisJMHgwOWZlNTkwMywgMHhjODFmYTcyMCwgMHhlMTViZmRhMywgMHhlZWQ4OTNmYiwgMHg0YWZmYWU0MiwgMHg5MjExNTk4YywKKwkweGM3NGJjN2NlLCAweGQ5ZmQzMzdlLCAweGNjZmE1ZWY4LCAweGE4MGY3ZWNkLCAweGIwNDdkNzhiLCAweDVmZjA2MDNlLAorCTB4YmRmOGYzOGQsIDB4MzI4Y2Y0OGQsIDB4NWY3YWFmY2YsIDB4NDlkOTdkZTQsIDB4NmUwMjhlYjgsIDB4MjNiNDY3OGEsCisJMHg5M2QyZjFlMywgMHgwMjlmZjZjZCwgMHgzOTc0ZjExZiwgMHg4MDk3OWViNCwgMHg3ODMyZmMwZiwgMHhiNjNlYzBiZiwKKwkweGVhMjZhYjhlLCAweDljZTkzYzk5LCAweGRlMzJmNjhjLCAweDI3OTMxNDMwLCAweDA3ZGY3Y2I4LCAweDNhODM5NzQ4LAorCTB4OTdhMGQzZWYsIDB4ODQ3NTQ3YTIsIDB4MmQ0OGMzZGQsIDB4NTQ1N2YwMDMsIDB4MTZmNTc2YjAsIDB4NzAxMGY3ZTYsCisJMHgwN2U3ZTE5YywgMHgxZTU5M2IxYSwgMHgzZWU3OTllMSwgMHg4NTZmOWFjOCwgMHhhODFmZjNmMywgMHhmZjBiY2ZjZSwKKwkweDAxMjRlZDIxLCAweDhmNTYzM2ZjLCAweGM0NTc1MDkyLCAweGMyMmQ3NmVjLCAweDZlOGY3ZWM1LCAweGRmYzE0ZThkLAorCTB4M2UzZTBjMGIsIDB4MjcxMmZkMTEsIDB4YmM1ZWNhZjQsIDB4MTVkNTc2MDcsIDB4NmQyN2EwMWEsIDB4NGZiZjk3MzEsCisJMHhmYjg5NzliMCwgMHg2ZDNkYzRkZCwgMHhjODE5NzhmMSwgMHg5OWIyZmE2NiwgMHgzYjgyZWZmOCwgMHgyNTEzOGZmZSwKKwkweGYxNGIwNzg1LCAweGZmNzQ0YWJlLCAweDUyY2QyMDZiLCAweDdlNTg5YWY2LCAweDkxODVlYTNiLCAweDJmZWE0MmY3LAorCTB4ZmY4MjdiZjEsIDB4YjA1M2U1YmIsIDB4OWY4MDY1NTYsIDB4ZDVlODAyNjAsIDB4N2ZiNjc2ZDMsIDB4NDAyMjViYzQsCisJMHgzY2Q5NmJiZiwgMHhiODAzZTAzYiwgMHg0ZWY4ODJmZiwgMHg1YmM0NWU4MywgMHg0ZTFlMjgyNSwgMHg5ZTNlYWM0YiwKKwkweDFiYmM4NGNlLCAweDFiYTAwZjgxLCAweGEzYmUxN2U4LCAweDlkOWU3ZjdkLCAweDc2M2ZmNmMzLCAweDE3OTQzZjI3LAorCTB4YWE1ZTQzZDQsIDB4NDkwMTU3ZDAsIDB4MGY3ZGMwZDYsIDB4MDI0YTFkMjcsIDB4Y2VjOWU1ZDAsIDB4Yzg3MmU3M2MsCisJMHgyOTI4NzFmNywgMHhlMDc2ZjZiMSwgMHgwZTdiYzExMCwgMHg3M2ZmMzgxNCwgMHg5MjJlZmMzNSwgMHgwNWY4MGE3NywKKwkweGZlZDUzYjc3LCAweDVlNzg3ODg4LCAweGZkNDAxY2E4LCAweGM2OTg1ZmYzLCAweDgwMDA1M2M1LCAweDAwMDA4MDAwLAorCTB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4N2RiNWZmMDAsIDB4ZDU1NDc4MGIsIDB4NzMzZWZmYjUsIDB4NzkzMzI2NjYsCisJMHg4NDg0MWU0ZSwgMHhlNDI0OTg0MCwgMHgwOTMwODQwMSwgMHgwNzQxNDEwZiwgMHg2ODE1MTA0OCwgMHg4NTI4MDk3OCwKKwkweDQyMTAwNzkzLCAweDE3YjY4ODFlLCAweDI0MGNkYjViLCAweDQxYjQ1YTIwLCAweDc2OGJkMTUxLCAweGI0NTQ0MTQwLAorCTB4MDM0MTQxNDEsIDB4NThhNTAwNzcsIDB4NTZkNTYzNTEsIDB4ODgwZGNiNmQsIDB4YTgzMTFmYmMsIDB4YWRhZGZmOTcsCisJMHhmYjViZjVmZiwgMHg5MGNlNjQ5YywgMHhmOWI3YjVhOCwgMHg2N2Q5ZDgzZSwgMHg3YjVhZDdiZiwgMHgzYmRhZjVlZCwKKwkweDNmNDM3Y2RmLCAweDc1NjEwOWQ3LCAweDEwZjQ0MjJiLCAweDExNmRjZTIyLCAweGEzMTA5ODYyLCAweDQyZjM4MmRjLAorCTB4MTFjODg1ZDgsIDB4Y2E4ZGYzZmMsIDB4NWMzYWRiODksIDB4OGRmODg1ODgsIDB4ZGFmOWFhYWEsIDB4MmJjODllYjUsCisJMHgxZjVjMmRlYiwgMHg3NzQ2NzVlMywgMHhiNWYxYmRmMSwgMHgyOGYyNTBmZiwgMHgwODRjMjFiMywgMHg1ZDNkZmU4NywKKwkweDFlMzEwZjg4LCAweDkwZWE3YjhkLCAweDQ2MGNhN2RkLCAweDA5YWMyZTFhLCAweDc1YWM1NDQyLCAweGE1MWE0NWZhLAorCTB4YmFjYzRlNmYsIDB4NDI4NWU2NTMsIDB4NWM2Y2M3NzUsIDB4ZTM0YWQ4OTksIDB4Y2EyYTZmOTYsIDB4MWZiMjkxMTIsCisJMHhkMGFhZjM0MSwgMHhlYTllNTVlNywgMHgwYTg3NTJjZCwgMHhlYWE4ZjZkMSwgMHhlYmY2ODRkYSwgMHg2YThmOWU1NSwKKwkweGE1MWViOGYzLCAweGRiZDYyN2VmLCAweDlmYTljYjVjLCAweDI3M2U3ZDBhLCAweGM1ZDE2YjdhLCAweDBhYjc5NGI5LAorCTB4ZjI4MGJkYWIsIDB4NDVkYTJkNTYsIDB4NTQ3ODJlZmQsIDB4YjE3N2Y2MmQsIDB4ODFmN2FhM2UsIDB4ZjgwYmEwYjUsCisJMHgzYTg5NGQ2MCwgMHgxZWE4MzI3YywgMHhlMzk0NjlkNiwgMHg3MjY4ZjdiZiwgMHhjMmZjZDE1NywgMHg2M2NjNzdlOSwKKwkweGQxZjdlMmEzLCAweGQxZjQ0ZWZjLCAweGZjN2YyMWU2LCAweDgyYjEzMDkzLCAweDQ1ZGFlYWYyLCAweDJiZGNlZWQxLAorCTB4YTFjMjdkZTEsIDB4MDE3MjdiNDUsIDB4MDMxZWI5NWYsIDB4MThlM2ExOWUsIDB4NzgwOGJjZjAsIDB4YmFiZDIwYzYsCisJMHhhYmYwNGJjNSwgMHhhMGY1NDg3ZCwgMHg0YmU2YmVjZSwgMHg5OGRmODBkMSwgMHhhZTQ3NDUzZCwgMHg2MWI1ZjdjMSwKKwkweGVjZGE4YzIyLCAweGNlZmU5YzNiLCAweDhiOGYzNGFkLCAweDNkNDE1NWFiLCAweDE5M2RkMjhhLCAweGRiYzY4Mjg5LAorCTB4MmU3Y2Y5NmUsIDB4NGRiZjczZTAsIDB4ZDI5MTdhY2MsIDB4NDdhN2I3ZDIsIDB4NDZmZDI4NWIsIDB4MjFmNTFmYTcsCisJMHg2YTM1MjcwOSwgMHhhZTdjZjQ3YSwgMHg5OGI5M2VkZiwgMHg5ZWRjYzdmMiwgMHg3YWEwODJjNCwgMHgyY2U5ZDYzZiwKKwkweDZiNjU1ZjE0LCAweDcxOGQxNmZmLCAweDc4ZDhkNjJhLCAweDJlNWUwNjVkLCAweGJmMzQxZDYyLCAweGZlMTE4ZDhiLAorCTB4OGI5NzA0ZTUsIDB4NWZiOGRiYmQsIDB4YmY0NjRmMDMsIDB4NDE4M2MwMTUsIDB4YTU2ZjU0NGYsIDB4ZTM4ZmE1ZGIsCisJMHgxMTQ3MTdiMywgMHhlMWI0ZDM1YywgMHg2NGU4MmU5ZSwgMHgyZTM0ODNjMSwgMHhlNTFmNWJmYSwgMHhmZjdkZTY3NSwKKwkweDc0NzgwZDcxLCAweDI1OTY5YmUwLCAweDhmMDNmYzBjLCAweGJjNmRhNDRmLCAweGRlNTliZTk3LCAweDkzZDEwYWIzLAorCTB4N2Q3OGQwZTAsIDB4Y2JkZjQyYWEsIDB4ODUwOTg0ZjYsIDB4ZGE1MzJiZmEsIDB4OWMwOTI4OGUsIDB4YWMxNGZiNzcsCisJMHg4YzNjZjE3ZiwgMHg5ODcxZjY1NywgMHhmN2M3ZTUwNSwgMHhmM2M3OWY1ZSwgMHhjMTJiYzEwYSwgMHg3YTJiYjUyOSwKKwkweDk2ZDY5OGJmLCAweGRmODIwOWVhLCAweDczNmQzZWM1LCAweDdkMDZiZTc5LCAweGU3OWJjZTc0LCAweDRjMzdiYjUxLAorCTB4NGM1YzVmNjAsIDB4NzY0NjdjMjMsIDB4ZjgwMWIxYzIsIDB4NWRmNWM2MTksIDB4NmY2ZmE2NzYsIDB4YjFkN2UwMWUsCisJMHg3YWM4NTc1ZSwgMHhmZGViMjE1ZCwgMHgwYjdkMzA0MCwgMHgyOWViYzY4ZiwgMHg4MmNjMjRmZiwgMHhkYzBmZTVlZiwKKwkweDcxYTZlNTk0LCAweDhlM2JkZjhlLCAweGNlM2M3NWQ3LCAweDc1ZmQ4NzliLCAweGNmZmE5NTNjLCAweGU1OWQ3MmJkLAorCTB4NzMzYWQwMGYsIDB4OGQ5ZDY1YmYsIDB4Yjc1N2M2NGUsIDB4N2I2YjhjZWIsIDB4M2FjYjdjNDIsIDB4Njg3NGVhMzcsCisJMHhhYjMzZjNhYywgMHhmYThhZGEzYiwgMHg5Y2IxNTViYiwgMHgxNGZiNmE4YSwgMHhjYzhkN2ZkZiwgMHhkMGQwNTZiYiwKKwkweDBmNDkzNmI1LCAweGZjMjM2YmI1LCAweDY2ODVkN2MwLCAweDZlN2YwNGRiLCAweGYxYTAxZjI3LCAweDU4M2QyN2JlLAorCTB4OGY4ZTFlOTgsIDB4MDIzYzNmNzUsIDB4ZWE5Zjc1ZjQsIDB4OTcwMWI5ZjIsIDB4OWNmY2VmMjEsIDB4NTdlZmM3ZjIsCisJMHhiMWY5MDI1ZCwgMHgwZmM0N2UxMiwgMHhjNzBmZTAyYywgMHg3MzI3OGI1MywgMHhiNWNkYWY3ZSwgMHhiNGY5ZmE4MiwKKwkweDA0N2Y2ZmYxLCAweDYzZGM1Y2ZkLCAweDVmNWUwYjczLCAweDkwYjNmZGYxLCAweGFmODJmOWE3LCAweGM2NmU1YzExLAorCTB4ZWJjZTU0YjgsIDB4ZDYxOWVmNTcsIDB4ZThmMTcyODgsIDB4YmJhNjU3NjAsIDB4MDIxNGJlMGIsIDB4YWEzNThhZTcsCisJMHgwMWQyMWY2OSwgMHgzZWQ1ZTNjMSwgMHgzYWM2ZTI5MCwgMHg4NzEzMzgwYywgMHhhODNhOWFjZCwgMHg0ZmM4MWUxMywKKwkweDk3MDlkNDFmLCAweDlhZDBiYjVhLCAweGZiMTJmYmY4LCAweGZjNDE0MTk0LCAweDk3NDlmMDBjLCAweDNjZmY0NGU3LAorCTB4YTJkMmM3YzksIDB4Yzg3M2Y2ODMsIDB4OGZmOTQyZmMsIDB4ZmY0OGNmNTEsIDB4Y2M1N2MxZDIsIDB4NzA1MTc4ZmMsCisJMHgxOTUwZTA5ZSwgMHhjMjFjNWY5MiwgMHhjYTQyYWEzNywgMHhiN2NhNDNhYiwgMHhmOTljZmFmNywgMHgxM2Y4ZTg0MCwKKwkweDMxYmVlNGQzLCAweGMzYWE1OGUwLCAweDkxNDViYjcxLCAweGM1M2VlNDdjLCAweDJkN2U4OWJmLCAweDRiZWRiYWI1LAorCTB4OGUyZmZlNjksIDB4NGZkMGYzMTEsIDB4YWUzODU1OTksIDB4Y2VkOTdkZTUsIDB4OGFiNTJiZWIsIDB4N2MwMmIwODYsCisJMHg2MzNkNzBmNywgMHg0MzVmZDRkZCwgMHhjM2U1MWM1OCwgMHg3YWEyMWYyNSwgMHg3OTQxZWMxMywgMHhmMzFhZGY4MywKKwkweGYwOTM0ZjA5LCAweDViYzVkMjMwLCAweDgzYzc4ZDlkLCAweDE0ZGQ1OWUwLCAweGVlZDdjYTZiLCAweGVlM2M2ZTRhLAorCTB4YzYyZmNjZTgsIDB4NmZmNGM5MmYsIDB4Mzg3ZWFkMjIsIDB4YWE3ZjIyZTAsIDB4OGMxZWI1NzcsIDB4YjI0OWZhMjAsCisJMHhkNDY5ZTE2OCwgMHhmZjgzYzVlZiwgMHg2NmViOWQxYiwgMHgyNjJmMGZiYywgMHhlOWE4MTZmYywgMHhmNWE2MWQyZiwKKwkweDNkNTZlZGI2LCAweDliZWZkMDliLCAweDVmMTFmY2YyLCAweDFiNzg3YTVmLCAweDliZDlhZjdkLCAweDc3NzVlZTIxLAorCTB4OGUxNDNmYWUsIDB4OGE1ZDc3MTcsIDB4MTdlZmE3NGUsIDB4MDVjM2Q5MGUsIDB4Y2RhNTAxYzksIDB4ZDFlZDYzZjEsCisJMHg4NGJhYmZiYywgMHhiYjg3NWJiYiwgMHg2YjA1ZGZkMSwgMHhhMDk0ZjQ2YiwgMHg2YjQ0MTc3YSwgMHg3YTIwZDRmNCwKKwkweGE5NzVkZDI5LCAweGZjMzFlNDRlLCAweDFmMTA2YTdjLCAweDhmNGY3NGZmLCAweDJmN2QyYWIxLCAweGIxYWY3ZGZiLAorCTB4ZTljNzRhMTYsIDB4NzM2ZmRlZmQsIDB4ZTY4NmI5M2YsIDB4ZTYxZGRiZWQsIDB4YmVmMzRjZDksIDB4MGIyY2U2ZjAsCisJMHhiMzc4NWZkYSwgMHhlYTdmNGY0MiwgMHg0ZmIzZjRlNSwgMHhiNDdlMzE1MywgMHgzMWJiZDI0NSwgMHgyOTM0ODhkZSwKKwkweDhlNTk5NTRmLCAweGZjMWEzMTNlLCAweDY5OWVkNWZmLCAweGU1OWQ2OWY1LCAweDJjODI5NjY1LCAweGFkOWI3OWUwLAorCTB4N2RlNjJlNmQsIDB4OTVhYjExNDEsIDB4YzY3ZWNlYjgsIDB4ZmRiOWI5YTUsIDB4OWYyN2RkODUsIDB4ZjRmODdmMDAsCisJMHg2MDA1M2VmZSwgMHg2Nzc2MTcyYiwgMHg3ZTU0NjllNywgMHg1OTIxZTNlMSwgMHhjMmY3ZWEyZSwgMHhmMDFlYzk3ZCwKKwkweGY3MzY2ZDg1LCAweGVlZGU5OTRmLCAweGRmNjBmMjg5LCAweDljNjFmZDFiLCAweGY3N2ZlODI1LCAweGE0MzVjMzU1LAorCTB4NTJmOWNiMWYsIDB4ZTM5MzRmM2UsIDB4Y2U4Mjk0ZmEsIDB4ZWUyZGEzN2UsIDB4YmYwMjhmNWYsIDB4YjNjZGJkZjgsCisJMHg3ZmE1OTI5OSwgMHg4YjE5ZThjZiwgMHg3NzNmNjFmNSwgMHhkNWIyODc4MSwgMHhlMjZkYzI2MSwgMHhkZTc4MmIyNywKKwkweDg3NjNjMmE1LCAweDExNzI4NDFjLCAweGEyZTU1ZjQ0LCAweDZmY2ZiZjk4LCAweDQwNWY3ZjM0LCAweDE3ZGYwMjdjLAorCTB4YWY3ZjM3YWUsIDB4NWFhYjhkMTAsIDB4ZmM4YjdkNjksIDB4ZjY4MmVmZTYsIDB4ZmIxMTJmOGYsIDB4ZTI2OWY4ZGEsCisJMHhkNmYxN2VmMywgMHhmNTRjYzI2ZiwgMHgwZmU3NGY4NCwgMHhhNWM3ZTYwZSwgMHhjN2MxMWZiNCwgMHhmZWZjNTc5ZSwKKwkweDNkZWZjMDE1LCAweDc0MzNhZjJhLCAweGQyZDNjYjVkLCAweDQ0OGYxZDc4LCAweDZiNmU2M2ZjLCAweDU5OGY1ZTEwLAorCTB4ZTA4OTM1ODQsIDB4MWMyZWNjN2EsIDB4NDdlODA1NDksIDB4YmVhYjljMDgsIDB4Y2RmZTYxM2QsIDB4ZmVkZWU0ZDQsCisJMHgzMjk2YTU1ZiwgMHhlMGIyNGJkZiwgMHgwNWMzYjgzYywgMHhlZGZkNDdjZSwgMHg3ZThhOTkzOSwgMHg3OTE3NTZjYSwKKwkweDc3ZTY4MzViLCAweGU0N2RlNmQxLCAweGRmNTc5MGU3LCAweGY1NGQ3ZTIzLCAweDM3ZjU4ZDhlLCAweDFkNzlhNThlLAorCTB4ZDRmNTU3YmIsIDB4MzNhZjMxNzcsIDB4ZTNmOTlmMjQsIDB4MjhmNzFlMDksIDB4ZjI4NDNmYzIsIDB4MmQ0YzljY2YsCisJMHhkZTljYmMyMSwgMHgzNGI1MzI3YywgMHgzMTE1ZmU5OCwgMHg4ZDFlOTgyYiwgMHhlYmMyNjY5NCwgMHhmNDg5YWM4MiwKKwkweGViMDVhZDE4LCAweDg5ZDdhZDA5LCAweDBkN2NmMzVmLCAweGIxNTUzYTc4LCAweDc4N2EyYmE0LCAweGU1NGY3NDE0LAorCTB4MDU1NzdmMzksIDB4M2Q5YWNlZTQsIDB4MzNlODNmMzYsIDB4MGYxN2UzNjIsIDB4NmNmYTBhZGYsIDB4ZGE0MGI5YjYsCisJMHgyZjU0N2JiNSwgMHg1YmIxNzRlNCwgMHgxY2UyNjdmNSwgMHhiYTM0ZmU2YiwgMHhlZWNjZTcxMiwgMHg2ODM1MmUyMSwKKwkweDE3MGU3NGRkLCAweGIwYjk3Y2UzLCAweDU5NjI1MmViLCAweDE5MzNmNzJlLCAweDllZWQ0NGYyLCAweGRmYTAzYzg3LAorCTB4NWNmMWU2ZWUsIDB4ZjFhZmZhOWEsIDB4ZmY5OWFmM2YsIDB4MjBmZGNmOWQsIDB4ODFmMDQ2ZjEsIDB4YzBiMjI3OGQsCisJMHgzZTBmODlkZiwgMHg5OWZkODY5NywgMHg3OTFkYjVmNSwgMHg4Mzg3NWEyMSwgMHgyYzdlNjhmZSwgMHg3ZmY0NWZiZiwKKwkweGEzYTVmMmM1LCAweGJiZmFmNTU5LCAweDM0OWVjM2MwLCAweDA3ZmZjMzNiLCAweGNkMDI2ZmNmLCAweDdlNzNiMTJmLAorCTB4ZTAzZDlmMzQsIDB4NmIzY2M2Y2IsIDB4OWM3NjZkZGMsIDB4ZDExZDE3YjMsIDB4YjRhN2UwNzksIDB4ODlmOTg5YTAsCisJMHgwNmU0ZjlmYSwgMHgyODliMmQ3ZiwgMHhlZTE2YmY4OCwgMHgwOWMyYmY5ZSwgMHhmMTUxYTE3OSwgMHg2ZjI4MGY0MCwKKwkweDJhZGNmOTU2LCAweGRkZmFhMGRmLCAweGVjYzI5Nzg0LCAweDIxM2JmNmJiLCAweGU1NDQzZTlmLCAweDNhYmM3NGQ0LAorCTB4YThiMzhmZWEsIDB4NTRmYmMyZmUsIDB4ZjhkYmVmY2UsIDB4ODBkYTNmZDMsIDB4MTEzNjBkZDcsIDB4NDc4NjNjMDYsCisJMHg2M2M3ZDI2ZiwgMHgzZTkxNjg3OSwgMHgzN2NkNDViZiwgMHhiN2EwNTY5ZCwgMHgwMTNkNTFlYywgMHhlNTFjZGZiNCwKKwkweGQ1YjJmN2MxLCAweGY0YzE2M2I2LCAweDUwYmYxZjM1LCAweDJiZDdmMzdmLCAweGY4MWE0MGZlLCAweGMyZmNiOTg0LAorCTB4MjdjZTlmMzAsIDB4NWM2ZmJlNDIsIDB4MDI3Zjc1MzUsIDB4ODllYjJiNTIsIDB4NzJlNmZjOGIsIDB4ZjM0ZWJjZmMsCisJMHhkZjdmZDVhOSwgMHgxN2E2Yjk5YSwgMHgyOWMxNzNmMCwgMHhhYmY2MGI0NCwgMHgxZGY1OTViNSwgMHgwNTRkNjgxMSwKKwkweGZlZWMyZjFlLCAweGFjNzgxNTJjLCAweGIyN2ZmNTdkLCAweGViZjgxNzQ0LCAweDUxY2Q0ZmQ4LCAweDg0MjIyNzA5LAorCTB4YzZlNzRiMzgsIDB4ZmRkMDE2MzcsIDB4NWRjNWM5YTUsIDB4OGZiMTdmZDQsIDB4NmQ1YjE3ZGMsIDB4NjM5MDVlYmUsCisJMHg4YWZjNmZmNywgMHhkZGM1YzFmOSwgMHgxNzU3NWY1YSwgMHg1ZmI5ZGJmNCwgMHgxMjRiNGU3ZCwgMHgyMDUzODBkMiwKKwkweGJhZTRkYTFkLCAweGU0ODRmYjExLCAweDFmNDE3YmMxLCAweGRkNGQ1NjliLCAweDZiZTc3OTQ0LCAweGEyNDI0ODM2LAorCTB4Zjc5MjMzMzYsIDB4ZmNjN2Y2MGIsIDB4N2Q4ZDdlYTAsIDB4MDE3YzE1YjIsIDB4MWZjOTMwZTksIDB4ZTUyM2VjNWUsCisJMHhiY2JhZDU4NCwgMHhmYjVmNzViMCwgMHhlNjJlY2NlNCwgMHgyNmNkM2FiMywgMHg5MjNlZGJjZiwgMHgyYjRkY2M2ZiwKKwkweDljODc0ZjBlLCAweDAzNDVmMTYxLCAweDc1ZWJjMjFmLCAweDE1N2MxMDI3LCAweDk3ZWFiZTlkLCAweDNkZjA1MTJkLAorCTB4ZGE3MjM0NDksIDB4ZmE3MTM0NWIsIDB4MjQ1YTEwYjgsIDB4MGI4ZjBiZWEsIDB4NGZhMjE2NzAsIDB4N2JjN2UwMmMsCisJMHgzMWFiZDc5ZSwgMHg4ZTg5ZmNkZiwgMHhkMDZhZjAzYiwgMHhmODU2MmY4MywgMHhlYWVmZDMzNywgMHg2MzUwODc0NiwKKwkweDQ2YjVlZDIwLCAweGEwZDQ1MWEzLCAweDRiZWViZmE5LCAweDU0MGZiNmU1LCAweDNlZDQ5ZmQ2LCAweDJlM2QzZTA2LAorCTB4YzhjYmY3ZTAsIDB4ZjhjMTMxZTksIDB4NzRiODc3ZGIsIDB4ZGVhYmZhMDIsIDB4ZjUyZTdhNDksIDB4NGQ4NzdlNzcsCisJMHg1OTU3YTAwNCwgMHgzZDUwYmY2OSwgMHhlYzJmZTFkYiwgMHhjZDRiZTA2OSwgMHg1Y2JjODA4YSwgMHhhZjdjNzk0YiwKKwkweGZhZjU2NTFkLCAweDk3OTJlMDgzLCAweDlhOTFlMTJlLCAweGJiNzBjNTllLCAweDlhMWVmNTYwLCAweDk1NzNmYTA4LAorCTB4ZGJkNzIxZGEsIDB4YzA0Zjk3MGUsIDB4MmE0YjYzNzksIDB4ZmI1ZTYzYjUsIDB4YTQ3NThmMGUsIDB4NTZiMTZmMDEsCisJMHg5YWFiMzdkZSwgMHg1YzViNzE4ZCwgMHhmNjJhM2ZlOCwgMHg0MzZmOWUwMywgMHg1MzQ0NDVhZSwgMHhjMjhmODZiYiwKKwkweDg3NGMwY2ZjLCAweDNhNjE0M2U0LCAweDg1MDIxYjVjLCAweGY4MTc3NzBlLCAweDE0YzI4OWYxLCAweDc3Y2E4MjMxLAorCTB4Y2YzMDEzYTgsIDB4MTc1MmFlZjMsIDB4OTU4YjY4ZjAsIDB4OWIzMDg3NzYsIDB4OWFmNDAyNzcsIDB4NzhiOGQ4YjAsCisJMHg3YTQ0NmZjYywgMHhhYmZmY2YwNiwgMHhjZjNjMjVkOCwgMHg4MGJjNDhhZiwgMHg3YWYyNDFiZSwgMHhiZDBkZjIzMSwKKwkweDdkODY1NWNiLCAweDhmYmMyM2UzLCAweGZjNzIxZDZiLCAweDlmMmEzZGE4LCAweDQzYTQ2MmEzLCAweGJiZWZkYmU3LAorCTB4Yzg5YzY4Y2EsIDB4ZDAyNGRhYmUsIDB4YTg5ZjMxODMsIDB4ZjAwYmFmNjEsIDB4ODU4YjFjZTcsIDB4Mzc4NmIzZTUsCisJMHgyZjgwZDcyMiwgMHhkMjFiZTUxOCwgMHhmODE5YmQyNSwgMHg3NTYwOTk1OCwgMHhhZTNjN2Y4MSwgMHg1NzRhZTdkMywKKwkweDY4MjBhM2IxLCAweDE2MWViNjlkLCAweDBlYzU1ZTFkLCAweGJkYmI2OWMwLCAweDk3Y2UxMGY4LCAweDczOGVmYTM2LAorCTB4NTRkMjdmNzMsIDB4YWExNGY0MDcsIDB4MjczZjQxNjcsIDB4NjRjNzY4ZWEsIDB4MGVlOWRmYTMsIDB4NDI0MTc3YzAsCisJMHg1YmI0NzhlOSwgMHhjMmFjOTYyOCwgMHg1ZWI4NWI3ZSwgMHgzZTIwODExNSwgMHhlMzkzNjBkYiwgMHgyMTFjYjgyZSwKKwkweGM3M2E0MzAyLCAweGUzZjg0MDVkLCAweGY5YTM5N2Y2LCAweGQ2NTM4MzdiLCAweGZiOTI4ODZiLCAweDI5NzRjZWU3LAorCTB4ZDNkNGFlMmYsIDB4ODNmYTdhYjUsIDB4Y2NjN2JhZjksIDB4ZmVjN2NmZDcsIDB4ZTRhOTRiNzEsIDB4NTNhNjc3ZWYsCisJMHhlYjRhZDViZiwgMHhhYjI2ODg3OCwgMHg4MGVkZGE5MiwgMHg5NzNhODllZiwgMHhjZDA1ODQwOCwgMHhjNjc1OGFmNywKKwkweDM4ZDA0MDhiLCAweDNiMmVmNTFkLCAweDE4M2UyMDQ1LCAweDQ3YzY2ZTFmLCAweGI5MjM3YWU3LCAweDEyNWQ0NGZjLAorCTB4ZmVmYmIxYzMsIDB4ZWM3MDRjNTMsIDB4MDRjMzNmZWMsIDB4Y2ZmYjJiYzcsIDB4NzUxM2YyZTIsIDB4ZmZkMWRmMzksCisJMHg0ZmZhNmVjMCwgMHhiM2JmY2QzMywgMHg1ZGZjN2VkZiwgMHg4MmZhZDJlYywgMHgyMmVkZGNiZiwgMHhkMzc0YzA3ZSwKKwkweGJiMjY3NmNhLCAweDc2MDZmZGEyLCAweDk4NzFmMTJmLCAweDk1ZjdkYzgwLCAweDA1NzZjYjUzLCAweGU5NmQ4N2YxLAorCTB4MGI5ZjVkNzYsIDB4ZmFkZjgwYTQsIDB4NmI0ZTNhYzQsIDB4OGYxYTVkNzcsIDB4MGJlMjZlZjYsIDB4Y2JkMGU3NmMsCisJMHhjZjFiNDU2YiwgMHhmYTAyZmMxMywgMHhiYWI2NDhiZCwgMHg5Njk3N2NiOSwgMHg5OGM4YmQwZCwgMHhmMzNjODc0NywKKwkweDg1OWY0OGJiLCAweDllZDg0MWY2LCAweDFmNjM0N2JmLCAweDRkYjZiNDVmLCAweGE5YWE3ZDg2LCAweGRlMDg4ZDU5LAorCTB4ZmRmNDA3ZDcsIDB4MTdjZmI2MzEsIDB4ZDVkN2IwNzksIDB4YmRmMTFkYTAsIDB4OWM1ZGVlOWYsIDB4ODRkNGY4MGQsCisJMHhkZTYxZTViNSwgMHgyZGZlZjdmYiwgMHg1N2M4ZTcwZiwgMHhjNWY3MTY3YiwgMHg5ZjU0YWRmNywgMHg1YjdiMGZlNSwKKwkweGJmYTgyNzhkLCAweGIzZTVjMjdlLCAweDliNGNlODhjLCAweGZhMWZmZGY1LCAweGZhOWVlYjdkLCAweDM2Yzc5ODVlLAorCTB4MmU0ODNkZDgsIDB4NTZmNjU5YWMsIDB4YjA3OGYxYzYsIDB4ZTA4M2VmMjEsIDB4MTZmODgyNWYsIDB4YTZiYjQzZWIsCisJMHhkZjIwNjNhOSwgMHgwZjMyNDg3ZCwgMHg5NmVlODdlNSwgMHgzZWQwYzM3MiwgMHg4MzQ5NmZjMiwgMHgyY2UxZjdkYywKKwkweDYxOWE4OWYwLCAweGUxNTQxNzc2LCAweDk2MTZmY2YwLCAweDM5ODdjM2I3LCAweDlmOWYzODVjLCAweGViYzE5M2VkLAorCTB4Yzg0ZTQzYjMsIDB4NzhhMmZiNDAsIDB4ZjE1NGU3YTYsIDB4MWI2ZGM5YWYsIDB4ZTA0ZmY2NDIsIDB4NjhkYjM1MGYsCisJMHg3NWI1NmFiYywgMHhmNzg1MzhmMiwgMHhhOWYwMzFkMSwgMHg3OGJmYjc5YSwgMHgxMzVmZDc0NywgMHg4YzVhOWY4MSwKKwkweDVmNzhmMDRiLCAweDQzMjEyN2VmLCAweDlhN2E4OTNiLCAweGFiYmVmNWEzLCAweDliOGNkZWE4LCAweDFmYTE1MzkzLAorCTB4OTlmYWU4OTUsIDB4MTk0MDQ4OTgsIDB4MTA2OGZjYzksIDB4OWU1NzIwZWMsIDB4N2EwZjUyZGIsIDB4YzAzNGQxNGQsCisJMHhmMGVjOTdjMSwgMHg5ODFhZmNlMCwgMHg3MWM5MWMyMiwgMHhmNGZlZDBkOCwgMHg1N2VlMzRhOSwgMHgyZWMzMTZlOSwKKwkweDAzZGU2MGFhLCAweGRmM2QzNWY0LCAweDJjNjk2OWFiLCAweDM4ZmU5MzlmLCAweDNiM2ZkMWQwLCAweGZiYzMyNWFlLAorCTB4YTMwYmYwNzcsIDB4ZGYzNzg3ZmUsIDB4ZTJlYjQ4M2EsIDB4NzllNDMwZGMsIDB4MzZlOWJkYmIsIDB4M2FhZGIzY2MsCisJMHg5ODQ3ZjU5MiwgMHhjOWVlZDBmMywgMHgyYTAyYzM5YiwgMHhjOGI2OGFlYywgMHgzZmU3ZDBkNSwgMHhiMDdiOTg4YSwKKwkweGZlZTNjMTA3LCAweDgzMjIyZDI4LCAweDc5OWFjZGRhLCAweDk1ZTQyYWMzLCAweGE1ZWVmMWZkLCAweGQ2OTJlN2EwLAorCTB4ZDNlN2MwZTEsIDB4ODMyNjJkNGUsIDB4Njg3MmFmYzYsIDB4ODk2OTEzN2QsIDB4ZDk2OGZiZTcsIDB4OGJlNDM4MzEsCisJMHg0NDllMjVlMywgMHgyZWUyYTBmMSwgMHg1M2U3MmZlNywgMHgwZmYxYzhhMiwgMHhlODQ5Njk0NywgMHhmMmQyYzRhNywKKwkweDY2Zjg1NWM0LCAweDgzN2I2MTZkLCAweGZkYzFlODY4LCAweDhhOGJiNzljLCAweDAzN2ZlNGFlLCAweDc1ZjQ0NzBlLAorCTB4NmI4OWIzZWMsIDB4ZjZmYWQzMmYsIDB4ZDRmMThkYWQsIDB4ZWZjYjdjZDMsIDB4OTZiNzM5OWUsIDB4ZTI5NmY5ZDIsCisJMHg5YTZhODBjNCwgMHg1NWQ2MTY3NywgMHg5YmU5MmJlNSwgMHg3OWYzZjI0YywgMHg2NWVmM2U5YiwgMHhhZWFkYmNmYSwKKwkweDFjZmRlMGFjLCAweDQzN2FlZjNhLCAweGMyODVmOTVlLCAweDUwZmYyMGZhLCAweGFjNWYxNWZlLCAweDg3Y2E1ZWZmLAorCTB4MzA3ZDJlNTksIDB4MjBkNmU3MGQsIDB4MzY0OWRiMGIsIDB4MjJkZWQzODQsIDB4N2Q1ZGYyM2QsIDB4YmVkMzhmOWUsCisJMHhmN2YxYzQ3MywgMHgxNDllZjhkNSwgMHgzZDI3ZGIyZSwgMHg3ZWMzZjE2YywgMHgzNzc2M2M1MCwgMHg5YWM5ZTllMywKKwkweDYzNGE4ZjQ4LCAweDFkYjcwODk1LCAweGYwOTk1MDcyLCAweGQ5ZmM1Y2IyLCAweDY5ZWRiZjk4LCAweDY2MTU3NWE1LAorCTB4NmUwMWQ3NjgsIDB4YTkyZGUyZjMsIDB4YjQzY2YwMWYsIDB4NmYyMDUzODEsIDB4ZjhlYjkyOGQsIDB4ZDc5Mzc5MTYsCisJMHg2Y2I4NTUzMSwgMHgzNTg5OTQyYywgMHg1MzFmYzgxNiwgMHhmMzI5NzI1ZCwgMHhhNjNmYjkxNSwgMHhlMzBkYWYwOSwKKwkweGQ3MWExMGNkLCAweGJiMDVjM2ZiLCAweDFmYzRmYTE3LCAweGJjZDEwYmEwLCAweDdmMWYwYTY3LCAweDljZmMyZDlmLAorCTB4NWMwMjJhZGUsIDB4OTVhMmM3ZmYsIDB4ODliYzA2ZjMsIDB4NDgyNWU2M2UsIDB4NTNkOTM4ZmEsIDB4OGNkZmY4NjUsCisJMHg5MTE3YmY3OSwgMHhhZDE5NjdkNywgMHhkOTIzY2E2MywgMHhhZDVmYWM5OSwgMHhmOWYwYzFlYiwgMHhkMTRmNzlhZSwKKwkweGVmZjY4NmU5LCAweGZkODNmNDNjLCAweDk5ZmE5ZDNiLCAweGZlYzg2MzdhLCAweGUwNjFlYzJkLCAweGY2ZGJmMzMzLAorCTB4ODc3YjRiNTEsIDB4NGM5OTE0ZmUsIDB4NDc1ZWI4NzAsIDB4YzVkZWY1ZTksIDB4YTkxNTNmYWMsIDB4Zjg0N2MyOTEsCisJMHhmYWE1MTk2OSwgMHhmMjFjNzcyMSwgMHhhMDQ4NGYyZSwgMHhiOWZkZGM3NSwgMHhiNzdlODNkNCwgMHg4NDNkYmM1YywKKwkweDQ2Mzc3ZmNhLCAweGQyZGNmNTE1LCAweDY0ZDRmMmNiLCAweGJkYzk5ZmJkLCAweDlkODY5ZmM3LCAweDI0MDhiMGY1LAorCTB4MTdiOWE1MGMsIDB4OGY1ZWQ2NWQsIDB4NTY0ZWY5YTEsIDB4NTJjNDM1YjcsIDB4YTRkZTg0ZjksIDB4YmRmMTA0YzcsCisJMHg1YmI2MTIxYiwgMHhkOGRkZDdhMSwgMHg2MjdkZmNjZiwgMHg5OWRmNTlhZSwgMHhjMDU1MWEyNCwgMHg3MzUwZjI3OSwKKwkweDBmODA3ZGJkLCAweDBjOGFkN2QxLCAweDAxODhiN2E5LCAweGRmZWU4MDYyLCAweDQ3ZmJiOTYzLCAweDEzZWQxZjdhLAorCTB4MGJlMWQ5MmYsIDB4YmI0MzM1NzksIDB4M2E1YzcwMDcsIDB4MThiOWIzZTksIDB4N2FlNTU4NTcsIDB4ZDk1MWRlNmEsCisJMHhlNDhjNzc5ZSwgMHhkZjlkMmYyYywgMHg4NGU4ZWJjNywgMHgwOGYyOTMwOCwgMHg2ZTQ4YTdmMiwgMHhjZWE2N2E0MCwKKwkweDNhMzllOWNkLCAweGExN2U1MWU3LCAweDY3ZWIyM2NlLCAweDdkODAzZjE0LCAweDczZmFiYTU2LCAweGI3NzJmMDJiLAorCTB4NmVmOWMyNTMsIDB4NzYxZmFhNjcsIDB4YzZhNjhhYjUsIDB4ZTU1ZTk4ZjEsIDB4NDg4M2E2YWUsIDB4ZTNjNTAzY2IsCisJMHgzODJlY2M3MSwgMHhkMjIwZTRiNCwgMHhiNmY0M2JiYiwgMHg1ZmRkMGUyNSwgMHg1ZGJmZjNjMCwgMHhhM2RiZDNhNywKKwkweDg4MzRkZWE2LCAweGJiZWRjOWY2LCAweGY2ZWJkZmE1LCAweDRkYTc1MzNlLCAweGM2ZGU0MDRhLCAweGE4ZThlZWY5LAorCTB4MzQyMmIyZmEsIDB4YThjZjIyZGEsIDB4Yjc1OGNkZGUsIDB4YzFlOGY5YjcsIDB4YzllNzVhNzgsIDB4ZmYzYzExYmEsCisJMHg5ZTVlNzVkMywgMHgwOWJhZDlmZiwgMHhhMzNkZmU5YywgMHgyN2FlMzlmOCwgMHg2Yzc5NjczZSwgMHhkNmEzYjZkMiwKKwkweGU0NWZhYTE0LCAweGI3ZDhiYzU1LCAweGRmODU3YWQ3LCAweGRlYjE3NDRmLCAweGY1ODFjZjI2LCAweDFmNjAwZTc0LAorCTB4ZjUzNDE5OGYsIDB4ZTkzMDNiZjEsIDB4ZGEyNzZkMGMsIDB4NTE3MWI4Y2YsIDB4M2M5OWM2MTEsIDB4N2E4YWM0YTIsCisJMHgyMjE2YmYzMywgMHg0ZTkzYWQzZSwgMHg4ZGVlOGJiZiwgMHhmOGViNTdmNSwgMHg2MTU3YmYzYiwgMHgxYmRmOWU3OCwKKwkweGRmNmNmMGNiLCAweGY5MDMxMTkxLCAweDhjY2VlOTYwLCAweDZmODk0ODllLCAweDA0NmY3YTFhLCAweGQ5N2VkN2UwLAorCTB4ZmY2ZGYzYzIsIDB4OGVmNTljMjgsIDB4Nzc0YmY2ZDAsIDB4N2E4OWVjMGUsIDB4MjJkZjA5NjcsIDB4ZmIzY2RlNDgsCisJMHg4M2I4N2ZmYywgMHg3MWIzOTVjZiwgMHgwMjdkNWY0ZCwgMHhjOTU3ZjZmZSwgMHgzOWIyNDhkZiwgMHg1ZmY4MThmMSwKKwkweGQwMWU1ZWVmLCAweGNlNWQwNWNiLCAweDAyMjMzZDI2LCAweDZlOGQ1ZmU3LCAweDQyN2YwNDU3LCAweGI0Yjg2Y2ZlLAorCTB4MjE3ZjBlZTcsIDB4MTdmNjJjNjUsIDB4OWMxMzczYzYsIDB4YjkxOTFjYzMsIDB4N2Y3MDg3YzcsIDB4ZmQ0NjdlNDcsCisJMHg5MjU4ZmNiZCwgMHhiOWVmZmEwNywgMHg2M2E0OGZlZCwgMHhmMzRkYWRmYywgMHhmYThjNzkzZiwgMHhmOGI3ZWYzZiwKKwkweDlkNGU3NDZjLCAweDVlMTc0ZDE3LCAweDJhN2UxZjA1LCAweDc3N2JlZDkyLCAweDljMmYzNDJiLCAweDcxN2I5YmMzLAorCTB4ODZiMTQ3M2UsIDB4MmMzOWMzMmYsIDB4NzNjZmJjZmMsIDB4MTk3NWI3MTQsIDB4MTdhYWFkZjEsIDB4N2EwNWVkMWYsCisJMHgzMDYwOGQ3YywgMHg1YjVmY2E4MiwgMHhlZDdjYzExYiwgMHhjOGU3OWIzNSwgMHhiOGY3ZjQzMiwgMHhmYmU5ZWZlYywKKwkweDBiYjYzY2VmLCAweDA1ZDU3ZGU5LCAweDY1ZmE1Mjc3LCAweGExZTMxYzQ2LCAweDAzNDU4MWZjLCAweDc5Y2U5ZWQwLAorCTB4M2RmZDRjOTEsIDB4ODAxMjhhZjcsIDB4YmFkMDZhYmYsIDB4Njk5MjJiN2QsIDB4MWMzNzgzN2UsIDB4MzRhMmY0YjUsCisJMHgxZWE1MjlmZiwgMHgzNzNlYzBlOSwgMHhmOWZkODIxZSwgMHg2ZTZlMTk2ZiwgMHg5YTViNjQzZiwgMHhkOTZkODI5YSwKKwkweDc1YzlmZmNiLCAweGU1OWJmZTdjLCAweDlmNzVkYzgyLCAweDNhMjVlZDhmLCAweDRhMDE4M2U1LCAweDM0OGQ5OWQzLAorCTB4OGZkNGIwZDcsIDB4NjM4NjM0MGEsIDB4Njc2N2FmMjMsIDB4NmZmN2I0ZjMsIDB4NDkwNzU4MTUsIDB4ODk3Nzk4MWUsCisJMHg5MWU3YzNkZCwgMHg3ODExYjdkZiwgMHg3OGU1YWYzZSwgMHhmNjJiYmY1OCwgMHgzYjdhMGEzZCwgMHg3MDdhMjVhZiwKKwkweGZhNGNiZDNlLCAweDdmYThkNWZjLCAweDdjZWJjYWM0LCAweGEyZjdhOWU1LCAweDIxODlkZjYxLCAweGJmMDlkOTNkLAorCTB4NzhkYjdlNDgsIDB4ZTNlZWFmZDQsIDB4ZjU4N2YwMTYsIDB4MDlmYWUyNzksIDB4OGVjZDRmODAsIDB4OWZiOTFiOWQsCisJMHhmYTA3ODcyYSwgMHg0YmNlYzU2ZSwgMHgyZjIwNTMwNywgMHg5OTNjMjBkZSwgMHgzMjFkYzdhMCwgMHhhZjQyYWJmZiwKKwkweDU2YTVhNTQ3LCAweGU2NTJmYzZjLCAweDVmMzk4YTViLCAweGZjMjdkYTRjLCAweGNhNGNhMmZlLCAweGU3ZTg4ZjQ5LAorCTB4NjNjZDY4YTAsIDB4ZWUyNGM5N2UsIDB4YWZkN2M0ZWUsIDB4ZWJlNTE4YTgsIDB4YjBjOTdjZDMsIDB4MjdlNzFiNmYsCisJMHhmZGE5N2I5ZCwgMHhiMmVjNjViMCwgMHg1YmQ4Y2I3ZCwgMHhkZjJlMTk1MywgMHhlYmIzZGNmMywgMHhkZmQxOTdlNywKKwkweDczZTE3NjIzLCAweGRmMzAzZjUyLCAweGMxYmU5ZWMwLCAweGNkZWJjZjJlLCAweDJmNDA2N2M0LCAweGUzNGQ3OWM2LAorCTB4ZWQ5M2Y1ZTYsIDB4MjlhZmUwYmQsIDB4MDc2ODMyYWEsIDB4OTFlNTIzYzEsIDB4YmUzNzk2MzAsIDB4NjJiM2Y4ZWYsCisJMHg2ZGY5ZjE1NiwgMHhlMWI1NWJjOCwgMHhkOWYyMmY5MiwgMHg4ODVmZWQ0MSwgMHgzN2VlYWVkMiwgMHg3OTMyNzYwYywKKwkweDNiYWIwYmRlLCAweGUzYzhmMjE3LCAweGZhNmJkZTUxLCAweDk2ZDViY2IxLCAweDM5ZDAzNThhLCAweDUzZTYxZDdhLAorCTB4OTVmYzkyYTMsIDB4NDU3ZjI0MTEsIDB4NzNhZjdkYzYsIDB4MmRlNTEwMzQsIDB4NWJlZmZiNDIsIDB4Y2QwNDZjN2YsCisJMHhmMTI5MDYzMywgMHg4NmE0NjhlZiwgMHg0ODVhNDVkZSwgMHg3ZDM5ZmM5NywgMHhmM2Y4MTM1YiwgMHgzZjkyNjE0MywKKwkweGJlNjEwZDQ3LCAweDc0MzNhYzY0LCAweDA3YzQwMzljLCAweDZmM2JlMjM0LCAweDExYTMzOWQwLCAweDM5MTcxODNmLAorCTB4N2Q3OGNhYzYsIDB4OTA3NTUyZGQsIDB4MzkyMmU1Y2UsIDB4MWFkYTA4MDIsIDB4ZGVmMzk0M2IsIDB4NjE2MzgyMjgsCisJMHgyZWI0MmFhNCwgMHgyNTIzNDdmNCwgMHgzYWM3Y2RiYywgMHg5ODQ0MjdjNywgMHhjNDI1MTVlYSwgMHhiZjhmYjFkYSwKKwkweDFkNTVmYWVmLCAweDNjYjg2YTRmLCAweDgzNzBkNGJmLCAweDc0MTNiYWJmLCAweGZhYzg3ZGJmLCAweDc3NmY3YWU1LAorCTB4M2FiZTYzMGUsIDB4ZWI3ZWY5NTYsIDB4ZGYxNWIyMmUsIDB4OGI4ZjNjMDksIDB4NzM3M2U3Y2MsIDB4MjM5NGU0NWMsCisJMHhkNDc1ZTA5YSwgMHg3YWU4N2JlMSwgMHgxYzI1ZDc0MywgMHhmYThlNGZkZiwgMHgxNjdjMjI4OSwgMHhlZGNmYzdlYywKKwkweGI2NmI3NzZjLCAweDViZjczZWI1LCAweGEyZjM2YjgyLCAweDQ3ZWMwZjVjLCAweDcwYmVkMzJmLCAweGI1NGU5ZjgwLAorCTB4MGNkYjljYjMsIDB4MzdlYTkyZDksIDB4NWM3MTcwZjcsIDB4ZGZiYTZiY2IsIDB4NmY1YjM3ZGMsIDB4YmU3YzE0ZWYsCisJMHhjNWVlY2YzNCwgMHg2MTVlZjQ3ZSwgMHg0OGVjMTAzNCwgMHhkMjZmZDJmNSwgMHgxNmYyNWI2YywgMHhlNWU2ZWJjZSwKKwkweDgxOWExZTI5LCAweDY5ZWZjMTUwLCAweDk3ZTQ3Y2NiLCAweDA5NWViY2ZjLCAweDgxN2YwYWRjLCAweDQwYmI3M2VmLAorCTB4ZmViMTc1ZmQsIDB4NWY5NGU5ZDUsIDB4OWUwYzhiZjcsIDB4OGZhNDQ3Y2YsIDB4OGFiYzYyZDcsIDB4ZWI1YmU2NzAsCisJMHg3MWM5YmQ2MiwgMHhmZjk3OWYwNCwgMHhiMjc5ZjJhMSwgMHg5MWYyOWYyZSwgMHg2ZWQ5ZDdjYywgMHgzNzhhNmViMywKKwkweDA0YWQ3ZTE5LCAweDM2ZWI2ZjFkLCAweGIwNWVmMmNhLCAweDRkM2NhMjkzLCAweDI2YzRmZmI2LCAweGQ3YTJkZmViLAorCTB4ZmJmMWQwNGIsIDB4YjRhNzRlYjEsIDB4NjgzZjk5ZmYsIDB4YTBhYzIzOTMsIDB4OTVmYjc3ZmYsIDB4NDZmYmM2YmUsCisJMHgxN2UxOTM3OCwgMHg5MzNjYWM3YSwgMHg1NGI3OTg2ZCwgMHhmNGM2OTBkZSwgMHg2NmQzZGJhNCwgMHhlOGRjZmNlOSwKKwkweGMzMWMwZDE3LCAweDlmY2I0ZjIxLCAweDNiMzdmM2Q5LCAweDJhMzNkZjQxLCAweDFmMjE0NzljLCAweDIyYjE1NDdlLAorCTB4MGNmZDdhMGEsIDB4MjE4NDBkNGQsIDB4OTE3YTZhYmUsIDB4NGJhZTQzYjcsIDB4Mzk1ZWI4YzcsIDB4MWZhMWI5NmUsCisJMHhkZjAwY2EwNiwgMHg3MTBlNmRiZCwgMHg4MWZmY2IyZiwgMHg5NmZhYzEyMSwgMHhmYTQ1ZTc4MSwgMHgxYTZlYWRiZSwKKwkweDdlYjA2MGYzLCAweGZlMjc2OTVkLCAweDcyZTUxODMzLCAweDZhNDU1NzNmLCAweGQ1N2QwN2JmLCAweGMxZTFiYWVlLAorCTB4NTRmYmJkNjAsIDB4YmM3OTQzZjksIDB4Y2Y3MWY0ZWYsIDB4M2MxZjc5ZDUsIDB4NmYzOTA5OWUsIDB4YjhjNmE3MDIsCisJMHhmMDExZmExZCwgMHhkNWY2ZmQ0OSwgMHhlZmRhNzNjZiwgMHhkYWYwMGIzZSwgMHg5MmZhOTRlNCwgMHg4NWUzZWRiNSwKKwkweDM1OWZhZjk0LCAweDA5ZjdjZjgwLCAweGQ4NWUxZDUzLCAweDg0NzdkYWY1LCAweGFkYWY2MWY5LCAweGM1ZWUxNTlmLAorCTB4NDRmN2VhYmEsIDB4OTg1NzYxZjksIDB4ZDIxYmVmYTcsIDB4NmZiYmY4YmIsIDB4YWRlOThkYmIsIDB4NjY3ZmVlY2EsCisJMHhkYWFiYjUwYiwgMHg4OWU5OWZkYiwgMHg5NmVkOTVlOCwgMHg2NDIzNTdiZSwgMHg2ZDM3YjQ3OSwgMHhmNzk0NTBlNSwKKwkweGNkNzlmYTY0LCAweGYyZTE4ZWU2LCAweGU1YzE1NTM3LCAweDU4YWM4MWUxLCAweDUzOWI3NzgyLCAweDEzNzU4NTNiLAorCTB4YmNmZGIyYmQsIDB4MWZiZjJlY2EsIDB4ZmExMmU5ZDEsIDB4OTZmZmZiMjUsIDB4NDJiZjcxNDQsIDB4OGYzZjZiY2YsCisJMHg1ODRmN2Q2NywgMHg5MWYzYzliZCwgMHhhZjIwN2RiZiwgMHg3ZGNiYjM0NywgMHg3ZWE0NmEyMSwgMHhlNzI1YzQ3OCwKKwkweDllMzlhNDc1LCAweDhmNDE4NWY3LCAweGRjYjc4YTQ3LCAweGVmODA5NTkzLCAweGZjZDJhZjI0LCAweDBkNGNiMmZlLAorCTB4ZDA2ZTFmYzAsIDB4ZjJmNTMyOWYsIDB4YmI1MTU3ZGIsIDB4ZDk1NTVmNGYsIDB4ZDdlNzMzNmYsIDB4ZmJlMzBmOGIsCisJMHgxM2Q1MTU5YywgMHg2YmJjYWQzOSwgMHhmNWNiOWYzMiwgMHhhMmVlYTcxZiwgMHhhN2E5ODRmMiwgMHhlMDZiYmZkOCwKKwkweGQ5OTU0ZTdmLCAweGU5OTg5YTlmLCAweGRmODEzMzU1LCAweDgzZjZmZjVjLCAweGQ5ZTFmZjU0LCAweGFmMDAxNjI3LAorCTB4NDczNTMzYzMsIDB4ZjZkYmVjMjYsIDB4NGNmZjk3ZDYsIDB4ZmU1ZDZkZjMsIDB4MzZhM2Q2MjcsIDB4ZjgxMTZiNDQsCisJMHhkM2Y3NzE3ZSwgMHhjNTY2YmY1YywgMHg3ZTgwMmNmZiwgMHg3NDk1NjM1MCwgMHhiNWRiOWM2MywgMHg5MWJmM2QzYSwKKwkweGZmYTJjNWE5LCAweDYzYmYxNWFhLCAweGI3MjIyMjNkLCAweGJiZDdmMjQ1LCAweDNhM2YxZmJlLCAweDY1ZjliY2QzLAorCTB4MGUyZGRhODUsIDB4NTRlMWFlNmYsIDB4ZmNlMWU3ZjUsIDB4YTIwNGFiM2IsIDB4MmI4NjBjOTUsIDB4NWNlNzc1ZWIsCisJMHg0N2UwNjg4MSwgMHg3MmI5NDhiMywgMHhiZjEwZDZmMSwgMHhhODkyNTAzMSwgMHhkZGE4OGJkYiwgMHg4ZjU1MjZlMiwKKwkweDQxZGJmNDU3LCAweDE3ZjVhMWE3LCAweGY3YWU3N2QzLCAweDhhNTdiZjNkLCAweDc2M2RmOTI2LCAweDMwZDdmZGQ3LAorCTB4ZmUwMDQ1ZmUsIDB4NjRjZjMzYWUsIDB4OWMzZDAyNmUsIDB4NTY3NGY5ZGYsIDB4MzQzNjlmYjAsIDB4NzJiZTcyYmQsCisJMHg3ZGY0ZTdmZCwgMHhkOGJlOGU3MywgMHhjMmRiNmY0MCwgMHgwYjg1ZjY0YywgMHhmNGViMjRjZiwgMHhjMmU5ZTkyNiwKKwkweGU3ZWNkOTMzLCAweGQ5ZjdkNDRlLCAweDA5NjdjNTA1LCAweDA4NWZiYjQ3LCAweDllMTA2NzhlLCAweDk3MWNlMWE2LAorCTB4MGUxYTZkZTMsIDB4OWQ2MWZiYjksIDB4NmY4ZTJlMmYsIDB4NjdiZTBlMWEsIDB4NjhlMTQxZjAsIDB4NDFiYjYzY2EsCisJMHhmNDFlNTM0ZSwgMHg4YTdmODM2NCwgMHhmZTJjYTZlMiwgMHg0MmNhNmZlZSwgMHhkMjJkOTdmYiwgMHhhN2NjNjMwZSwKKwkweDhlMTRiOWYyLCAweGYwYjVhMjdiLCAweDZlN2NhZWZlLCAweDhkZTQyNmUwLCAweDkyOWRlYTcxLCAweDI1M2JkNGVmLAorCTB4Yjc1ZDA5N2YsIDB4ZThlZDI5OTYsIDB4MWVlNjRmYTQsIDB4M2VhNGIzYTcsIDB4NWM4MmY0OTYsIDB4ZGU2NTkzZTQsCisJMHgzNzBiZjMyOSwgMHg2ZmUxZDg5NCwgMHhiY2M5YjdhZiwgMHhmZDg5N2Q2YiwgMHgzNWY3ZTYxOCwgMHg0ZmM0YjU2OSwKKwkweGM1YmY3NDczLCAweGRkYTk3ZjAyLCAweGZhZmVmYjBiLCAweDNmMWNlMWU1LCAweGNmM2VkYjMxLCAweDdhZjY2OTRiLAorCTB4MDM1YzY5YmIsIDB4ZTZmZGZkMGYsIDB4ZjlmNDhiZWYsIDB4MGI4OTBkZjQsIDB4ZWRiNmE1ZWEsIDB4ZjYzOWMzMGIsCisJMHg4ZTMyZThhNCwgMHhiNGE2NDk2MCwgMHg2Y2ZiM2VlMywgMHhhYTkxN2M0NywgMHg2ZGMyZGJlYiwgMHhlYTViYTFkMCwKKwkweDhmZDc4YzFiLCAweGVmNWUwNmVkLCAweDJmZjlhMTQ4LCAweDVlYTVlM2Q2LCAweGZhYjg0OGI2LCAweGUzN2M5NTllLAorCTB4MDUyZDdjZTUsIDB4YzAwNWQ1ZTcsIDB4MmM1Y2U3MWQsIDB4ZWYyMTczZTUsIDB4NzkxOWJjNDksIDB4ZjBhMTVmMDMsCisJMHg4MmYxZjE1ZCwgMHg5Zjk1ZDgxNCwgMHhjN2Y2OTRjOCwgMHg4ZjJjN2M1MCwgMHhlNTEzZGUxYSwgMHhkNGNmNWMwNiwKKwkweGRjMDBjYTFkLCAweGE4OWQ3NThkLCAweDY4ZTk3YWYzLCAweGFmYmZiNGViLCAweDhjNjg3N2NmLCAweDMwNDc3YzhmLAorCTB4MWQ2ZmQ3N2QsIDB4MjAyNDg4NzIsIDB4ZDVhYjZlNzEsIDB4NWJkNDI1ODMsIDB4YmY0M2Y3ZmQsIDB4MzZhYWRmYTgsCisJMHgzYjk3MDRmOSwgMHg5MTczOTc4MCwgMHhiZDQxZGZmYiwgMHgwYjYyMWIwNSwgMHhlZDE4MGZhMCwgMHhmMjJmYWUxNywKKwkweDdiY2QwNzk2LCAweDVlMzM1NmUwLCAweGYzOTkzNTA2LCAweGYzOTk3NzgzLCAweDBkMDY3MTViLCAweGU1ZGJlN2ZiLAorCTB4MjFmOWNjMDcsIDB4OTNmOWNjODcsIDB4MzM3MWRjMWYsIDB4ZWE4NTRmYjYsIDB4YmU4NTVmYmIsIDB4ODdmMWU3ZjMsCisJMHg3YTlmNGU3MCwgMHhlMDY4OTVmOSwgMHhjYjVmZjE2YiwgMHgwYjhmNDIwZiwgMHgzYzIxNjc4ZCwgMHg3YzczZDAyYSwKKwkweDk3YTYxNDViLCAweGJhNWFlMjJiLCAweGRjNDY0M2UxLCAweDMwNjI3NjA2LCAweGRmMGE1NGRkLCAweDk1ZGE2YjQxLAorCTB4YTY4YWNmZjUsIDB4Njc0NGJkOWIsIDB4Y2ZkZWNiNTUsIDB4ZWNiMzdhOTAsIDB4NWFkMzY0NzcsIDB4ZDBjZWU0M2IsCisJMHgzYmUzYmI3MSwgMHhjNmViZDIyMiwgMHgyMTE5MmEzZSwgMHgzNjVlYWVjYiwgMHhmZThhN2M0ZSwgMHgxZTM3YmNkNiwKKwkweDJiZjI1OGY0LCAweDkyOWJlNTg1LCAweDA3NWZiMjk3LCAweDNlZGQxY2RkLCAweDZmNGU0NmZiLCAweDMwZjBjMDllLAorCTB4OWIwYjkyZWMsIDB4ZTUxNDQwOTUsIDB4ODc0NDIzNWQsIDB4OGJmMTFmN2YsIDB4ZjEyMTBkYTUsIDB4ZTI0MjZiOWYsCisJMHhjYjk5ZDY4MiwgMHhmN2RhZWUxNywgMHg1MDQ3MTBmZiwgMHhlMzgyNzhlMSwgMHg2NzhjYWUyZSwgMHg1ZTgwMWZmNCwKKwkweGIwNGE3OTU5LCAweGE5ZjJhYTdkLCAweGU1Y2NjMjZmLCAweGY1ZjM1ZDcyLCAweGFkZTcxODc1LCAweGYxY2I1ZGYwLAorCTB4YWFjYjU3N2IsIDB4YTNmZTM4ZTIsIDB4NGJhOGU5NzMsIDB4Y2I3Mzg1M2IsIDB4NWVhZjc3MzgsIDB4ZjI5NTUxYjcsCisJMHhmZDg0YjdiYywgMHg4ZTc2OTFjOCwgMHg4ODc2YWM4YiwgMHhlYmNkMDQ0MCwgMHhlYmRkOTQ1MCwgMHhkNjk3ZWZhMiwKKwkweGIyYmNiMTQ3LCAweGU4NWNlNDgwLCAweDI3MGE5NDhiLCAweDYyN2E0ZGM3LCAweGJiYzRlZWQwLCAweGQ1NjVjYjJhLAorCTB4ZDUxZTEyZjEsIDB4YjBmYzUxYmYsIDB4YThjMzU3MWQsIDB4MzI5M2ZjOGIsIDB4ZDgwNDQ4YmYsIDB4ZjIzYTBiYmUsCisJMHhmODAzYWQwNiwgMHg0NjhiY2UwYiwgMHg1OTU2NWZhOSwgMHg5ZjAwZmIwMywgMHhhYjY4NzM4ZSwgMHhhZDE1NWViOSwKKwkweGM4MzhhM2YzLCAweDM1ZWZlNjdiLCAweGQ3ZWI4ZGEyLCAweDJjMjZmYWVlLCAweDNkOTA3YmY4LCAweDQzNWVmNTlhLAorCTB4Zjk3NTU2ZmYsIDB4Mzg2NWZkNGEsIDB4MjA3NDRmY2IsIDB4NmNiZTgzODQsIDB4ZWViZWRjYmEsIDB4NjgyMzkyMWUsCisJMHg3YjBkMmI3ZCwgMHhkZjI5NWFmOCwgMHg5ZTUxYjJkZCwgMHg2NzlmMjQ2MywgMHhkNmViNGUwMSwgMHhlZjg2N2M5MiwKKwkweGNlMjA2ZmE0LCAweGY3MGEyYzQ0LCAweGVhNWVmOTRiLCAweDY3NjZlYjBiLCAweGYyZjQ1Y2IxLCAweDQwMGE1ZTNmLAorCTB4NDg3YjY5MWYsIDB4YmFkMmJiNjEsIDB4YmFlZmQ5N2MsIDB4Mzk3M2ZhZmIsIDB4ZTNjMmE3ZjgsIDB4YjYxY2IxODQsCisJMHhkZTUxOGE2ZSwgMHg0ZjkxZjU4NywgMHhjODY0YzUzMCwgMHgxZWY3ZmFmOSwgMHg0YmRlZmU2ZSwgMHgzZWMxNjZmNSwKKwkweGIyNzQxZTIyLCAweGZiOTBjNDdkLCAweDJlYmViOTBkLCAweDFhYzljYjU2LCAweDc1ZmViOWQ2LCAweGYwNTE2ZGIxLAorCTB4Zjg4YTg5YmIsIDB4NmNiNzI1ZWYsIDB4MzZlM2NmZDYsIDB4MmFmYzNmNWEsIDB4ODNlMjk1YzcsIDB4ZjUxOThmZjAsCisJMHg3M2M5NjY0NiwgMHhlZjU4Zjg2NSwgMHhmYjFlYmQxNiwgMHg1MzJkY2E1ZiwgMHhlNjhlYmRlZSwgMHhjNWIwZmU1NSwKKwkweDgxYTE3YjBkLCAweDY2ZjVlMTA3LCAweGQ3YzcwZTAxLCAweDc3NDAwYjNhLCAweDdiNGFjN2MzLCAweGM5N2M5MWQ5LAorCTB4MGE4NjIzZTcsIDB4YWIxYTM3OGUsIDB4Y2IzNjNiZjcsIDB4YzI5MzRhNjIsIDB4OWZhOTFlODksIDB4MWVkMjQ1ZTMsCisJMHg5OGI0MzUxZiwgMHgxMzI0OTZlZCwgMHg2ZTJhZWJjYywgMHg0ZmRlYjI2NSwgMHhmN2Y4YmRiOSwgMHg0Zjk4YmJhMywKKwkweDRhMTQ1ZDA3LCAweDZkZjhmYmY5LCAweDJmMzkyNmNhLCAweDBlMjdjNzJmLCAweGY2YzljMDdmLCAweDM5ZmFlM2NlLAorCTB4ZTg4MWUwNjQsIDB4MGZjYjE4NjgsIDB4MGQ4YjVmM2EsIDB4YTBiNTliYTEsIDB4YTA4NzljMDcsIDB4NmU5ODI1MDcsCisJMHg4YjcxNzRjYywgMHhlZTJiZTEyMiwgMHhiYWY3ZjI5MywgMHhlODM3OTk1OCwgMHhmMTNmZjQ4MiwgMHgyMjliYTBiZiwKKwkweDRlZWZmMGMxLCAweGRiZDYzNDBmLCAweDc0NDgxZTlkLCAweGQwNzQwOGIwLCAweDBlODQyZjUxLCAweGVjM2ZkNTg0LAorCTB4YTU0MmZjZGIsIDB4MmI4NzYyMjMsIDB4YWIxNDgyODQsIDB4MTdjZTIxZjAsIDB4ZWJjMzI0NjcsIDB4YjExZmFiMWUsCisJMHgxMmFkYmQ3OCwgMHg5MmFjN2QyZiwgMHhmMWI0ZThlZSwgMHg3ZDcwMTc4NSwgMHg0YjdkZTIyZiwgMHhiYzI4NWMxZSwKKwkweDQ1MjRiZjU0LCAweDFmYWQ3ZGIwLCAweDcxMzE1NWM5LCAweDQ1MjA0ZWRjLCAweGJiMGE4ZTU4LCAweDVmNjhhNTEzLAorCTB4MmZmYjIzMTIsIDB4ZmUzODI5ZTksIDB4NWFmM2ZhOGUsIDB4MzZlNjc0ZTIsIDB4YzE1ZWZlMWMsIDB4NDdkYTA1NzIsCisJMHg5ZjdiNzAxNywgMHg1YWY3YjY0NSwgMHgyMTliZWQyOSwgMHg5NWI2OThmNSwgMHg1Y2JmMWM2MSwgMHgyYzlmNzc3MiwKKwkweGIxYzRjOWQwLCAweGEyMzkzYTY2LCAweGRlOTE5NWQzLCAweDhkZDZlZDk0LCAweGYwMjQ5ZTc1LCAweGZlODZkMjgzLAorCTB4M2JkNGRlN2MsIDB4MDI3N2FiOGIsIDB4YjA0N2NmOWYsIDB4ZWFiMjU5ZmMsIDB4NjE4NjkzYzcsIDB4N2JjNDJmN2UsCisJMHg5MzMzYzI4MCwgMHhhODNmYjNiNywgMHg0ZmY2NjFiNCwgMHhiNGJlODQzZSwgMHgyYmRmYzlkNSwgMHg1OWY1YjViMiwKKwkweGY3MTVmZjkwLCAweGExZjQ5ZGRjLCAweDdiMDFjNjc0LCAweDlhZDdiNTEyLCAweDk1N2Y5Y2E2LCAweGVkYmVjOWQyLAorCTB4OTg5ZTQwZWYsIDB4ZmFlNTVkM2MsIDB4M2ZiNDg1OTMsIDB4Y2UzOTA2OGIsIDB4ZDZlN2RmMjQsIDB4ZDI2ZmVhMjQsCisJMHg2OWMzODUyOCwgMHhhOTVkM2E4ZSwgMHhhNDBmYzFiNywgMHgyY2E5ZjdlMywgMHhlNDdmOTc0NSwgMHg1NTkyODEzZCwKKwkweDczZDJiMjdkLCAweGM5MjEzZmUxLCAweGZkMzkwYmI4LCAweDE4ZmVhMzUzLCAweGE1ZTQwMzY1LCAweGZlZTRlM2JlLAorCTB4MWZhM2VhMzMsIDB4NGIzYTdiZjQsIDB4ZDViZjU1Y2EsIDB4MDllNDYyZTEsIDB4N2NiZjVjYWUsIDB4OGNkMWQ4NzUsCisJMHg0MGI2YTQ2OCwgMHhmZGU5YTUzNiwgMHg3NTg0YmVjNywgMHhlMzE3NGM0ZSwgMHg3N2VlMDNkNywgMHhjZjEzNjJhYSwKKwkweGY5ODRhZGI3LCAweDFiOTY1NDQyLCAweDQyOTFhYmY0LCAweGQ2ZTNmYWNkLCAweDhmMjdjY2ZlLCAweDdhM2I2OThlLAorCTB4NmU4ZmU1MzcsIDB4OGNlZDI0MWUsIDB4YmU2MTdkYmEsIDB4NzA3Y2IwNGIsIDB4NzdlNDhjNzQsIDB4OTgyMzliNmQsCisJMHg1YWI4OGZmZSwgMHgzZGE0ZTJhMywgMHg2NTBkZWQ4ZSwgMHhiNjdjNDkzYSwgMHhmODdlZmVhYywgMHhlZDIyY2JiOSwKKwkweGNjN2U3MTQ3LCAweGM3MWE2ODdmLCAweDUzYWQ5NDI3LCAweDA3Yjg2MTAzLCAweDZmNmNjNmIwLCAweGRlZDQ4YWE4LAorCTB4YjUwODdlYzYsIDB4MDdkYTg0MWIsIDB4YTNhMDMzNDAsIDB4ZDMwYTM1ZjIsIDB4OGY3YWRmNjEsIDB4OWNmOTk5M2QsCisJMHhjYWZhYzJlMiwgMHg3MGZkMDMyMywgMHg5YzdiOTQwZSwgMHg4NTdjYzcxYywgMHg4MjZiZTBmZCwgMHhiOWQ4NzBmYiwKKwkweGI1ODkwNzA1LCAweDAwOWY2YjY3LCAweDI1OGQyNTRlLCAweGU0NDZlZmFjLCAweGZhYmZjYzZhLCAweGVjMTcwNGFhLAorCTB4MjZmZTlkMTcsIDB4YmUwYjVlYzIsIDB4YzY0ZDZkNjQsIDB4OTY1NWZjYmUsIDB4MzEzMGYxOWIsIDB4YzkxNTk1Y2UsCisJMHhmYmU0ZWQ3NCwgMHhhZTZkNDcxMSwgMHhlOGVmY2MyYywgMHhlNzA1YTc0YSwgMHg5MjE1YzRlZCwgMHgzOWRmNjliZSwKKwkweDFlZTE4ZjcwLCAweDNmMDcwOGFiLCAweGZiMjU5YWQ4LCAweDVhZGNiMzlkLCAweGJkZjI5MWJjLCAweDE1MWFjMjFkLAorCTB4NjdjYWZhMDcsIDB4NWZkODVlZmEsIDB4NzVlNjJkZmIsIDB4MDQ2MjE3ZWEsIDB4MzViMjg5ZTQsIDB4NzRiY2U1NmIsCisJMHg5NmQ2MTBmYSwgMHhlNzFhNzhjMiwgMHgwMmI0ZTZkNCwgMHhlNDNhMDFkOCwgMHhkYjYzZmVkYiwgMHhiYTBlYzcwMSwKKwkweDNkMzBhZTk4LCAweGMxMGU3YWQwLCAweGJmZGU5YzhlLCAweGU5Y2EzMmY0LCAweGNiZDAzZWZiLCAweDdlODFiMWM0LAorCTB4NTIyZjFiODgsIDB4YjZiZTM4YWIsIDB4ZTA3ODQ5M2QsIDB4NmQxNzZjNzcsIDB4OTNiNDhmMmMsIDB4NjdiZTAyM2MsCisJMHg5ZjgzMTlmMCwgMHgxZDc4NWQxMCwgMHhkZWY4OWQ4OSwgMHgyMjUzNDc1MiwgMHhjZWI1YmUxZSwgMHg3NWIzZTljMSwKKwkweDc4MjU2MTJlLCAweGUyNGJhYjZmLCAweDZlNzUwYmZjLCAweDcyZWE5YjRlLCAweDc1OGJmYmY4LCAweGE4ZWZjZTFlLAorCTB4OTdmOWMxMWIsIDB4ZGY5Y2JjZWIsIDB4ZDM4MTM3NTUsIDB4Zjk4YWViNTcsIDB4MDhhZmMxYmIsIDB4MGM5N2NjM2UsCisJMHgyN2YwNjNiZSwgMHgzZTBjYmU4MywgMHg3MzU3NGExNSwgMHgxN2I4Y2MwOSwgMHgxZjk5ZWQ0MSwgMHhlYjEwN2MxYSwKKwkweGYyNzQxNGIwLCAweGU5Y2YwMzI3LCAweDA5MmZiMTRhLCAweGNlYjQ1MGZjLCAweDUyMjhmZjA2LCAweDBhZmYzZGNmLAorCTB4MjJiZGI5YzEsIDB4ZWQyMmVkOTIsIDB4ZjZjMWYyNDIsIDB4MDc5ZjA3NDgsIDB4MGJiMTc2YTksIDB4ZGJmYTg5ZjYsCisJMHgwZWVmNDdiYywgMHhhZDZmODczYSwgMHg4ODM1ODQ1MCwgMHhjNGJjN2Y4ZSwgMHg3NDQxYWMyOSwgMHhhYzU5NmYzYywKKwkweGQ5NjczZjI5LCAweGE0ZjQ2ZmZiLCAweGQxOGRkZmZlLCAweDFlNjliMzcyLCAweGUyNzk3ZTQ3LCAweGY3ZDEzZmYxLAorCTB4NGNmMmZjZGYsIDB4ZjM0ZWYwMjYsIDB4YzYwOGZjZDgsIDB4OWY1YzJiYmQsIDB4ZDc5Y2FiNDcsIDB4OTc5Njc2NWQsCisJMHg3ZDRiODZmYSwgMHhkNGI4NmZhYiwgMHgwOGUzZjBiNywgMHhhMjNkY2Y4YSwgMHgyZDI0YTNlMywgMHhiMWE3OWRmNiwKKwkweDliYWVlYzZmLCAweGI0NGVjMDQ3LCAweGZhNGJkZTUyLCAweGYyYTNmODA0LCAweDJiZjhlOGJmLCAweDcwYzYxNjVkLAorCTB4ZjdkMDZkMmQsIDB4MzZkYzcwNmIsIDB4YjI1OGY1YzEsIDB4ZjE0ZWY5NjAsIDB4ZDdiZjAxMGEsIDB4MDNkODVmYjEsCisJMHg2Mzg4MmIyNCwgMHg0MGFmYzM4YSwgMHg2YmU1MjI3NiwgMHhhYjk4ZWMwZSwgMHhlNDExZjc3ZiwgMHgyMWQ5NjU3NiwKKwkweDQ3MzViMzk2LCAweDA4N2ZjNzI0LCAweDcwNWNlZDlmLCAweDgzYjJjYTdmLCAweGY2YjQ0ZjVjLCAweDQ2NmZjNTM2LAorCTB4YzFkYWY1MGMsIDB4YzBlMzQwMzcsIDB4N2VjZTY5NWYsIDB4MWEyZWZkODEsIDB4NTQ3ZmJlMTUsIDB4NWYyZjdmYWUsCisJMHhhMmUyOThhZCwgMHhmMmFiNjQ2NywgMHg5NTk2NDVkZSwgMHg0MjU5ZjNkMywgMHhmOTFhNDczZiwgMHg5NmU4MzJiYywKKwkweDYxYzcwOGY4LCAweGRiZTYzNzk2LCAweGU3ZjEwNDE3LCAweDU5N2JmZDUyLCAweGE3MTRjNThlLCAweDlkOTY3Zjc5LAorCTB4Y2Q4ZjM5ZmIsIDB4OWJkZWZkNDksIDB4Y2Y5ZjZlOTMsIDB4ZjdjZGNmZmMsIDB4YTVmYThjMDUsIDB4NjBhYjA1MzksCisJMHg4MzVkMmU0ZiwgMHhmNmNlYTZhOCwgMHg3ZDU2ZDkyNSwgMHg3ZmE5MmU1ZSwgMHg4YjVjZTgzOSwgMHgyZWEyZjhlMiwKKwkweDllNDMwN2NmLCAweDQ3NWY4NTM5LCAweGVmNTlmY2YyLCAweGI5ZTE3Y2FhLCAweGFjOGZlMDE3LCAweDlmMTg3M2ZjLAorCTB4NzU4Mzk1NTMsIDB4N2ZhZTRhZmIsIDB4ODM5NjM0ZjgsIDB4NzBjYTkxYmMsIDB4ZmYxMmUxYzgsIDB4MzVmZGNmODUsCisJMHhiNTVkNzExYSwgMHg5N2JkYTQzYiwgMHg2YjQ4YTNkMiwgMHhmYjYwYWFlZSwgMHhmNjg3OGQ1ZSwgMHhhZGY4MWM0OSwKKwkweGZhZmZlZmQ5LCAweGZiZTY3ZjBiLCAweDE0YjA4NDlkLCAweGUzOTg2ZTNkLCAweDdjNzY2YWQ0LCAweGIwNmJmMWNhLAorCTB4NzI4NmY5YzcsIDB4MWQ1ZjFjN2YsIDB4Zjk1NmJlZGEsIDB4NDI1N2Y1OWEsIDB4NjhhN2MzMmMsIDB4M2M4OTk3Y2YsCisJMHgxMjk3OWQ4ZiwgMHhmNzZhZTdjMSwgMHgyYWVjNGNhYywgMHgxZmI0Mjg4ZSwgMHhiMGMxY2UyMywgMHgzNThhZDVmZiwKKwkweDU5Y2ZjMzlmLCAweDkzODRkNzdiLCAweGZmNjVkZTkyLCAweGNhMWVlZGExLCAweDMxMzg0YThlLCAweGVlYzYyMDUwLAorCTB4NTg5M2I2MmEsIDB4MmM5ZmM3MDUsIDB4ZWQzOGVkZDUsIDB4NjNmNjRjZmUsIDB4ZDc3NzI3NzcsIDB4MjQ0NmE3YWUsCisJMHhkZDViYjU5MiwgMHhiZWIzODgzMSwgMHhhZTg0YzQyOCwgMHhiNjQ5ZjRmMCwgMHhkM2NmNmI5NCwgMHhmYjNmODIzZSwKKwkweGU1OTUzNmUyLCAweGEyZGI4YmNhLCAweDZjZDQzZjc4LCAweGUyMjBmMDdiLCAweDUyOWU2YjA0LCAweDJkNThlZGQ4LAorCTB4YWZjZTM4NWEsIDB4MWMyYTg3NjYsIDB4ZWMxZGU3YzEsIDB4Y2ZkZGYxNDcsIDB4NTE3M2YxNzMsIDB4OGI1ZjQwNGIsCisJMHg2NmVmMTQ5YSwgMHhjM2JiNGY5YSwgMHg2ODIzZDMxZCwgMHhiZTgwYWYzZSwgMHg4NzE3MzQ4OCwgMHhmZjQ3MGQzNSwKKwkweDA3OWZmY2M2LCAweDM3OTIwYjdmLCAweGM4M2YzNTE3LCAweGVmNTQ4ZGYxLCAweGJmMzdjYjAyLCAweDNjMzhlMDhkLAorCTB4YzFkZWM5M2EsIDB4MTg2ZWNmM2MsIDB4NDVmNWZlYzIsIDB4NTg2YmRiNGQsIDB4ZTExNmQ4M2UsIDB4OGNlOWU5ODIsCisJMHhlNDBmN2NjZCwgMHg4MWRlM2U4MCwgMHg5YzhmMjk2YywgMHg2N2QxZWRkNSwgMHgxZjU5NTA1ZiwgMHgyZmIxM2NjMiwKKwkweGI4NzFlOGNmLCAweGY1MzdiYjQ2LCAweDRiNjY2Zjc2LCAweDViMjZhN2Y5LCAweGZlYTM0ZmVlLCAweGQxYTNhNmEyLAorCTB4YzlmZWE4ZmQsIDB4ZmE3M2VmNWQsIDB4MTY2ZmJlYmUsIDB4M2RmMGI2NDUsIDB4MjIzYjkzY2YsIDB4YzllMDllZjgsCisJMHhmZTM5ZmYxZCwgMHg3Y2VmMWEzNSwgMHgyNTA0OThkMywgMHhjODlkOWY2OCwgMHhiYTdkYzliNiwgMHhmMzJmYzY0MSwKKwkweDEzZDYxNzI1LCAweDY3M2Q3ODlhLCAweGFjMjhhNWI3LCAweGE0ZGUwMzJmLCAweGYxZGQ5ZmI3LCAweDM2NDNkZjEyLAorCTB4MWMxZmViZTQsIDB4YjE0YjM4MmYsIDB4MThhM2RjODYsIDB4OGQ3MjA4M2QsIDB4ZDdiZjU1YTMsIDB4NjNkYmE2ZDEsCisJMHhhZmZhNmZmZSwgMHg1OTI3YmZkMSwgMHhlNDcxZjU4YSwgMHhjNDYxMGQzZCwgMHhiZDY0Yjg2ZiwgMHgyN2I3MzUyMiwKKwkweGMxZGNkZGY2LCAweDk3Yjg5OWVlLCAweDcxOTJkZTJkLCAweGZiYjdhMjk3LCAweDczN2ZlODExLCAweGJiNjc4ZGRmLAorCTB4YmI5YjUyY2IsIDB4MWM1ZmYyMjcsIDB4ZTA5NTg1MjYsIDB4Y2U4ODc3MzMsIDB4ODc1YTkyNTcsIDB4MzQ3YmJlYzEsCisJMHg4NjE1Y2E0ZCwgMHhiNTZhYWQzZiwgMHhiZjA0YmMyMiwgMHgzZTY3NDQ1ZSwgMHhkMGFhZmRlNCwgMHg0OWM5MDc2MCwKKwkweDU2M2Q3YzY3LCAweDcxZGFmMTYxLCAweDk5ZDk0NjNlLCAweDNiYjdlYTJlLCAweDc1YmVjMTM3LCAweGVjN2MyZWM0LAorCTB4MjlkMTdiN2YsIDB4ZDJlOTI3ZmQsIDB4ZjYxOGYyMGYsIDB4NzE1NWE1MTcsIDB4ZDg3OGFjODEsIDB4YTliYTc0ZjEsCisJMHg0MWU1NGE5YSwgMHgyOWI1NTNmNCwgMHhlYTM5MDU5MCwgMHgyYmRhNWQ5YywgMHhhOWZkMGU1MSwgMHhhYmQ2NDBhYSwKKwkweGZkMTRlOWQ3LCAweDY5YTNkZmEwLCAweGY3MmMwYmFlLCAweGQwMTI4Y2VlLCAweDQ0YWYyYzNmLCAweGQzYzhiYjQ5LAorCTB4NDE2MTRkY2UsIDB4MWNiZjc2ZTcsIDB4Yzc3NzExOGIsIDB4NjZkZjRhZmUsIDB4MGJjYzNmMzksIDB4N2IyMmZjZjIsCisJMHg1ZGU0MTY2MywgMHhkMTQ1ZGM2MywgMHgzOWRlM2M4ZCwgMHhlMTQ1YmM3ZCwgMHhhMzlmZDI4ZCwgMHgzZWEyMTFjNywKKwkweGVjMTM2ZjhmLCAweDI2N2I2YTc3LCAweDMzZTZlNThjLCAweDYzMmYyZGM5LCAweGY0Y2YzM2ZjLCAweGEzODdiOGU3LAorCTB4YmIwNWZlNjksIDB4ZjFjOWRjYjgsIDB4ODZjZjk1ZTcsIDB4ZDNkZjMwMDUsIDB4NWRiMTQ0Y2YsIDB4Y2E0ZGI0ZWIsCisJMHgxMmEzYTc2MywgMHgxNDNiMWU1OSwgMHhmNjVjZjBmNSwgMHhhNjE1M2Q2MywgMHg1YTc0MmVjMCwgMHg5NDI0ZjYxMSwKKwkweGYyYzFlZTZmLCAweDMyZGQ2NTQwLCAweDEyNTRkN2Y2LCAweDRiMWM4MTdiLCAweDdmYzgwNGU5LCAweDY3ZjczN2E3LAorCTB4MzdlOWQxN2IsIDB4NDE1Y2JlNTUsIDB4YmJlMzU3ZGYsIDB4ZmVlNzFhMjYsIDB4MDg4MGY1OGMsIDB4Nzk5ZTIzYjYsCisJMHg4M2ZkNmZmNiwgMHg1YTQ2M2JmZCwgMHgzZWQ5OTRmOSwgMHg1MTgzZDA2NiwgMHhmOTIzOTQ1ZSwgMHhkNDhlNTE2MCwKKwkweDcxYzg2ZTUzLCAweGQxMWQ1YTcxLCAweGFmM2E3MGY0LCAweGMyMDdmMjUzLCAweGI0ODFlYjAzLCAweGVmNjExMzFmLAorCTB4M2JiNGQyM2YsIDB4OWMwNDg5NTEsIDB4MDlmZjU5MDMsIDB4ZmE5NTZmYjgsIDB4MzY2ZDk5ZDYsIDB4YmU1NTUzZjYsCisJMHgzYjY1ZTUxMiwgMHhmMTU3ZGRkNCwgMHg1NTRhYzk3ZCwgMHgxNjk1ZTNjYSwgMHhmOTUwZGY3OSwgMHhmZmI2NTZlNSwKKwkweDJjZTMzZmQ0LCAweGRlMDgzYzAwLCAweDZkYjZkZmFjLCAweGU0NzFmNTU2LCAweGY0YjdhN2I4LCAweDgwOGQ3ZTkxLAorCTB4MTA3OTdmOWUsIDB4YzYyNjM1ZmIsIDB4NTk1Mzc5ODksIDB4MDc5MGRhY2UsIDB4MmE3YTVlYjgsIDB4NjlmZWUzODIsCisJMHgzNGUyMmYxYywgMHg3M2Y2N2YyYSwgMHgwNTk4Y2YwOSwgMHhjMWQwMjdhYywgMHg0YWI5ZmNjZCwgMHg3N2Q1Y2ZlNywKKwkweGZiODMxMzVmLCAweDk1NWRlMjEwLCAweGIyNWM3OWVmLCAweGZmODI3YTdhLCAweGQxZWJjMjg2LCAweGJmM2Y5ZDFjLAorCTB4ODNmMzM4ZmMsIDB4ODgzN2RhMmEsIDB4ZmJhYzViMGYsIDB4YWIzZjE3MTMsIDB4NzhiOTVjYjAsIDB4MzA4ZjM1ZDUsCisJMHgyNmM3N2RkZiwgMHg1Y2UyMmY3MCwgMHhjMWQxODNkMywgMHg5MWNmYThmOCwgMHhiZGIzYjBmYywgMHhhNjJmZWI4NywKKwkweDViZmRiMmZhLCAweDJkOWYzY2QxLCAweDEzZTYwZjM2LCAweGRkZWZjNzhhLCAweDA3ZjU1OWZlLCAweDIyNmNhZmI1LAorCTB4Y2FlZjIyZjksIDB4MmQxMjVmZjUsIDB4ZjgzM2ZkM2YsIDB4ZmIyNzM2Y2IsIDB4N2NmZjA5NTEsIDB4YWRhY2VhM2YsCisJMHg3ZmQ2MDE2OSwgMHhmMzI3NzlmNiwgMHg3MmIxYjM5ZCwgMHhmM2E0OWZkZiwgMHhmOThkOTdkNCwgMHhiNjZiZjRkYywKKwkweDlhNjFmY2NiLCAweGQwYjQzOWMwLCAweDk4ZDdlZTZmLCAweDliMWNlYWQ3LCAweDRmNzhiN2E0LCAweGQ1NDRmYzBjLAorCTB4NDdmNDBmODQsIDB4YjcxMWY5ZjgsIDB4ZWRjNmQ3N2YsIDB4NDBiM2Q3NDMsIDB4NGZiMWQ3NmYsIDB4YmE2MDhmOWYsCisJMHhlMjRiZGIzOSwgMHhkOTBiZWNlNSwgMHg4ZDFkOWU3YywgMHhmMzRlZjQ5NSwgMHg3NGRlODU0ZCwgMHhiOGE2NTYzNiwKKwkweGE4N2EwNDk5LCAweDM4N2E0OTc0LCAweGVkODlhNjNiLCAweGVkOTU2NzAyLCAweGM5YjUxZTljLCAweDc0Y2I5NTc2LAorCTB4NWZkMTNiN2YsIDB4YjQwN2U4MTIsIDB4NjNhYWJiMDksIDB4MTllNDBiNGQsIDB4MDVlMWY5ZjAsIDB4NGY3MDA2OWMsCisJMHgwZThlZDQzYiwgMHhkN2Y5YzUzYSwgMHhlMzMzZWZhYSwgMHhlYmY2MDUxZCwgMHg4OWE3OWZiMCwgMHhiYTZiYzdlZiwKKwkweGVkYjU1OTNjLCAweGYwMjU3ZjRhLCAweDYxNGRiNTU0LCAweDE5N2ZkYTdmLCAweDEzYWNkMGZkLCAweGQxMDAzZjBjLAorCTB4YzI5ZjYyZTUsIDB4NmUyYzIyZWYsIDB4ZmIxMTZkYjgsIDB4YmRhYzk2ZDMsIDB4YWM2Zjc0MTUsIDB4NmY3ZWIxNjMsCisJMHhmMmEyYThmYywgMHg2OTNhOGU3YywgMHgzOTVlZTRmZiwgMHhkZmRmMDE5ZSwgMHhlZjFkMjhlNywgMHhmMzhjYjg3NSwKKwkweDNiZjBmNjhiLCAweDQ3NDk2ZTM5LCAweGZlYTQ2ZDk0LCAweDM1OTQxYWFhLCAweGExOWE0ZTNjLCAweDE5ZjVjYWU3LAorCTB4ZDhiMDIyNzAsIDB4YWEzYmU3NjEsIDB4NmVlZWQzZGYsIDB4YmIzY2M2ZmQsIDB4OWQzMWNmOWIsIDB4OTM0ZDFmY2YsCisJMHhkZWRiOTNmNywgMHgyZmNjZjc5NiwgMHgyNjI0M2Q3ZCwgMHg0MWU0NWJlZSwgMHhmNDYwNjFiZSwgMHhkMDYzYjg4NywKKwkweDIyZjNmNTIwLCAweDM1ZjYxY2Y4LCAweGNmMzRlYmVjLCAweGZmNjYwZGFjLCAweGU2NTNjZTRlLCAweGU2NmQ4MGZjLAorCTB4NzMwZWVlN2MsIDB4OWNkOWFmM2UsIDB4Y2U2ZWJjZjcsIDB4MGVlMzA5ZmYsIDB4ZjQxMzg0ZWIsIDB4NDIzNWM0NmYsCisJMHhmZDBhNDZmZiwgMHhmNTI2MWRkYiwgMHg3ZmExZTQ2ZiwgMHg4ZGZlODUyMywgMHg5MWJmZDBlZiwgMHgzYzhkZmU4NywKKwkweGExZTQ2ZmY0LCAweGZlODUyMzdmLCAweGZlZWVlZjhkLCAweGJhNTU0ZTEyLCAweGUwNzgxNGJkLCAweDRlZGRiYWI4LAorCTB4Zjc4MTNlMjMsIDB4ODlkOWM1Y2IsIDB4NTU4NTQ3Y2MsIDB4MTcxN2E1ZWEsIDB4ZDhmY2IyZTUsIDB4ZTI5YTZmNjEsCisJMHgxMTkzN2I2MCwgMHhhZDE4OTU4ZiwgMHgxYzQ3Zjc4NSwgMHgyYWIyZDI4MCwgMHhiMWRiOGQzOSwgMHg1NWY2YmExZCwKKwkweDJhYWU4NzY5LCAweGVlYzI0NjcwLCAweGU0ZjJiYWQxLCAweGE3M2Q4ODJhLCAweGQ0MThiNGEzLCAweGRiNmI2OGJmLAorCTB4MmY1NmY4MDIsIDB4ZmY3ZWMwM2IsIDB4NzdlZWU1ZDYsIDB4NjNmODkzYWYsIDB4NWYxMThiZmIsIDB4MGY3MzgyNTUsCisJMHgyNWY0OWI3YywgMHg3MWVlNzcxOSwgMHg0MzUzZGIwNCwgMHg0ZDYyNDRmZCwgMHhkM2YyMWU1MCwgMHhkNDNlNzMzYSwKKwkweGU2YmUwNDJmLCAweDQ2YWJlZDM1LCAweDZjNmZjN2M2LCAweGZiZTBjOTZkLCAweGUwZTMzZTlmLCAweGVhOWY2OWZiLAorCTB4Y2IzMTNiZjYsIDB4MjE5OGYyYzEsIDB4MWJjZTIzY2YsIDB4OWY3YTU5NzAsIDB4OTVlNzA5YjIsIDB4YzMxYzdmYTcsCisJMHhhNjUwZmRiOSwgMHg2ODYxN2VlOSwgMHgwODc5NzY1YSwgMHhmOTFkZjNjYiwgMHhlMzA1OGEzNSwgMHhiZTVmNGY5NCwKKwkweGNkNmFmNThmLCAweGVkZDJlN2NiLCAweGQ3YjJkY2ZhLCAweGVlZjM0YzViLCAweGQxMzcwZmVmLCAweDcxYWRjMGQxLAorCTB4NWVjYzdlMjEsIDB4Nzc4M2ZhYTYsIDB4MzFmODg3YTUsIDB4YTdjYTk4MDcsIDB4YmU2MjE5YWQsIDB4OGQ3YzVmOGYsCisJMHhiZGFmYmNhOSwgMHhhMWNmNmUyMywgMHhmY2U0YjlmYiwgMHhhNWNlYjI1YywgMHg2ZjVlMDJjOCwgMHhjNTU0YmQ2OCwKKwkweDZmZjgyN2YzLCAweDRlNTJkYmM1LCAweGM2NzNhNzJkLCAweDJiYmZhZjFiLCAweDlkN2YwMDUyLCAweDU3ZTAzMjc3LAorCTB4ODU4YjY0ZDEsIDB4M2Y0Y2FkOWQsIDB4ZjMzMmM0ODcsIDB4MTU2MTVjYjksIDB4Mjc1YzU3M2UsIDB4ODRiODU1ZGQsCisJMHg3ZmRhOTYzNywgMHg2NTRjNmQ2OSwgMHg0N2U1ZmEzYSwgMHg2ODgxMmFhOSwgMHgzYzk2ODBkMSwgMHhkZThiYWZlOCwKKwkweGU4Mzg3MjdjLCAweDk4ZGQ1YWFhLCAweDNiZjJhMmVhLCAweDVjMTZmZjE0LCAweGI3MTMzZjIwLCAweDk1MjQ3MTNkLAorCTB4NDk1YWE5MjcsIDB4YWE3M2MyN2YsIDB4MWNmZjcwMmQsIDB4MTllZGQxZjAsIDB4N2NhNGVmMDIsIDB4NjhhNWU2YmEsCisJMHhlOWQ0MWY4ZSwgMHgwYWU2ZDUyZiwgMHg2YzZjMWQwNywgMHg4MTRmNTk1NCwgMHhlYjhkNGNmZCwgMHg4ZDhkOTNhNCwKKwkweDZiZDBlMWYxLCAweDNlMjhjNjJhLCAweDVjMDZjN2M4LCAweDg1MDhmYTBjLCAweGVmZWZjOTA3LCAweDk3YmQ2OWJhLAorCTB4OTRmN2M5MGUsIDB4NzUyZTc1OGMsIDB4NDFhMmZhYzksIDB4MDdkZTM3YjYsIDB4NWM3YmQ2MzAsIDB4MzcyYjQ3ZDcsCisJMHgzYjc1OTFiZSwgMHg3ZmQ3M2Y3ZCwgMHg3ZTFiOWU1ZiwgMHhiYzVkYmFkYywgMHg2ZDk2YzVlZSwgMHg3ZDI5OTI1YiwKKwkweDg1ZGRhMWM3LCAweDdiN2QyZDc1LCAweDFhNDhmNDVjLCAweDMyNmRjYmU3LCAweDc1YjNmZGFlLCAweDIzZTEzZTRmLAorCTB4ZTM3NzdhN2UsIDB4MGZlODc2OTMsIDB4OWRiZjU2OTUsIDB4NjY3OWNkZGYsIDB4MGVmMTFkYTMsIDB4YzhkZDZmZDcsCisJMHgyZDZjMTdkZiwgMHg3MTgwN2I2MSwgMHgxMTk0ZWVjZiwgMHhhM2MzYWQ5NywgMHhjMWIyYWM2MiwgMHhkZTNjZWI0NSwKKwkweDE1ODVjYTVmLCAweGE2OWUzMmUxLCAweDQ2ZjUxZDQ4LCAweDU1YjVkNjAyLCAweGE2YmFjN2M5LCAweGUzYjc2ZjE3LAorCTB4ZjU4NzgxZmQsIDB4YTZmYmExN2EsIDB4YTJiNGYwZmQsIDB4MzU3YmIwMWUsIDB4ZDRjNzFjMjksIDB4MTE5OTNlZGQsCisJMHg2NGZiY2ZlOCwgMHg0ZTM0ZTVkYSwgMHhjODFlNWZhNywgMHg4Mjg3ZGU3YSwgMHgyMzljMmZiNCwgMHhmNWZhMjFiOSwKKwkweGY1ZGE1NTYxLCAweDRlZjk1NTlhLCAweDMwOTAzZDk4LCAweDVlYzJmMjBkLCAweDM1NDU2ZWY5LCAweDBhMjM0MzlkLAorCTB4NzEwYmI3YTAsIDB4YTNjNWE1MzUsIDB4ZDc5ZDEzNTQsIDB4ZjY5ODQ2MTYsIDB4YjQxMTJjYzEsIDB4OWJiZmE4YWYsCisJMHg3ZTUzMmY0NSwgMHg1MzBjYzRmYSwgMHgwN2QzOTlmZCwgMHgwYjlkZjg4NiwgMHg3Zjk5Y2IzYSwgMHg4ZjdhNmQ1ZCwKKwkweDlmMmVmYWE2LCAweGM3YmI2MTViLCAweDRhNzdmMzU4LCAweGJiM2E2MmVmLCAweDVhYmVkNGQxLCAweDQ3YmQzNTRjLAorCTB4ZjdhOWU4YjMsIDB4NjU0NGNlMTgsIDB4NTRlMWM0NzYsIDB4NjY1OGY3ZTgsIDB4ZWZmNTQ3NjksIDB4MTY5ZGZjYWQsCisJMHg3ZGFmZGE2MiwgMHg5MjdmM2MzMywgMHhmZDhkYTVlNywgMHg3ZDNkODYwOSwgMHhlOGNmN2UxNiwgMHhlZjBjYmNlYSwKKwkweGJjNDUxNzg4LCAweDlhMWRlYzMwLCAweDYxNjkxZTU5LCAweDNjNDg1NTNkLCAweGE4ZjZlYjU0LCAweDhmNjkxY2VhLAorCTB4ZDhiNWY2YWEsIDB4ZjA0ZDhmMTEsIDB4NDgxMGE2YjcsIDB4YjYxNTFhNmEsIDB4NDc3ZDUyMzcsIDB4ZGZjYzljNGEsCisJMHhjYzNiZWY4NSwgMHhkZmQwNTJmNywgMHg1MjFmOTQ2NSwgMHg0MmJmYjA0YiwgMHhkZDY4NmJjYiwgMHg2MDZhMTczOCwKKwkweGQ4M2I2MjQ3LCAweDA3NmM5Mzg0LCAweGZiZDFjNjMzLCAweGY0MzRlODM3LCAweGZlZDA4MDdkLCAweDMzNzAwYzA2LAorCTB4YmFkY2FlZmYsIDB4ODIyZjYwZmQsIDB4ZDhlMmI0Y2YsIDB4NTQ5ZGM0N2MsIDB4OTViMTRkMzUsIDB4NmY0OTVlZTQsCisJMHg1NGJmZmYwNiwgMHg3ZWJmNjE2MSwgMHg0YzAzZTFmYiwgMHg1NjE1ZWQ2ZiwgMHhmZjRiOGM4ZiwgMHg3OGQ0Yjg3NiwKKwkweDk0MzVkZGE1LCAweGJhZDAxNzBlLCAweGIwNWU3ZmUwLCAweDE1ZjhmMTQzLCAweGU5ZjAwZjU5LCAweDgxMGNmYTA1LAorCTB4NzAxNzRhNGYsIDB4MDFkNWUwMzMsIDB4N2U3MjkwYmYsIDB4ZTIyODZlM2YsIDB4MGE3YmU0MjYsIDB4MTQyNWMwNTcsCisJMHgwYjM4ZmE5ZSwgMHgyNzcyYzEzNCwgMHhmM2NmY2JjZCwgMHg4YzU3ZTkwYSwgMHhiNzhmZGQwOCwgMHhiMGZmZDlkYiwKKwkweGU1MmUxMTQxLCAweGY1MzFlMWJiLCAweGY0ZTNiNGIyLCAweDZmZWI5MGNkLCAweDIwNzhhOWRiLCAweGQ5N2NkZmJmLAorCTB4ZTgzYmRmY2EsIDB4ZDljNjU4YTcsIDB4ZGU2ODlmNGYsIDB4NTRmNDFkYWYsIDB4OGNjZmY3MmMsIDB4ZWVkYzg5Y2IsCisJMHhkZjU3NDVkZiwgMHhmZjg2NGY0NSwgMHhkZDdlMzQyNiwgMHgxOWU2NDdiOCwgMHgxYWI3ZGZhMCwgMHhmMzdkODYyNiwKKwkweDFiZTFjNDRmLCAweGU3Nzc0MWYyLCAweGU0MzljNzRjLCAweDk5MTBmMWQyLCAweGJjZjllNWRlLCAweGUzOWQyYTM0LAorCTB4YmVkZDM1Y2MsIDB4NGQ2OWYwNjgsIDB4NWI4YzY3NmYsIDB4NzhlZWU1NDIsIDB4N2U2ZjdiZDAsIDB4NDM1NTcxNjcsCisJMHhmYmYwNmE0NiwgMHgxYjRhZGEzNywgMHg5NzUzODFkYiwgMHhlMjVhNzNjNywgMHg3Y2UyMjU3NCwgMHhkZjJlNTkyOSwKKwkweDRmNzYzOTY5LCAweDI5Zjg0NGNmLCAweDI1YjRhZDhlLCAweDhmYWVhNDRjLCAweDU1MzQzOWRkLCAweDg4YmU0MjBjLAorCTB4ODZkNzRmZDMsIDB4Y2ZiNjBhY2QsIDB4MDMyZGU5MWIsIDB4OWM2MWY5ZTQsIDB4ODcyZGU3ZWYsIDB4M2Y2MTY3YTMsCisJMHg4ZDE5ZGNhZSwgMHgyYmM1YTE5MCwgMHhhMmVlMWZkZiwgMHhhMmQ5YmU3MywgMHhmZWMwMWEyZCwgMHhjZTdjOGRlMCwKKwkweDNjYzZkNzBiLCAweDM5MGNlN2Q4LCAweDUxNjU3MmEzLCAweDU1MDNjODRmLCAweDA0ZjAzOGZmLCAweGI5NmQwMWU0LAorCTB4ZWE3MjExMmQsIDB4ODE1NDBmZTksIDB4ZTczYTFhZDAsIDB4ZTUzOGJlNTgsIDB4NmE3ZGY0OTQsIDB4YWJkZjA0NzMsCisJMHgyZjA4YTUzYywgMHhkNDhiNTFmYywgMHhkMzJlNzk3ZCwgMHgzMzdjZGI3OSwgMHhkMjcwOGZjNiwgMHhhZTMwYzNiOCwKKwkweGM2MTI0YjdmLCAweDMwYjJmOGY1LCAweDMzM2NiNmFlLCAweDhiYmIyYmE2LCAweDk3YWVkNjkxLCAweGMzMTZkZmYyLAorCTB4YTNkYmFjY2UsIDB4MGYyM2Y3MjEsIDB4NGI2NDVmYjksIDB4Yzg3OTFmYjksIDB4ZjcyMTQ4ZmQsIDB4ZmMwZDdiZTMsCisJMHhkNzFiZjAwZSwgMHg2ZjQzZTViNywgMHgzOTE1OGRmNSwgMHg4ZTFjZjg0YiwgMHg3ZjVjODFjYywgMHgwMWVlMTJiYiwKKwkweGYxNWRiYTNmLCAweDg0NzhlNGY0LCAweGY5ZTU2MjBmLCAweDIzNTc4MjFiLCAweGIyNDZkZDFkLCAweDVlZGQxMDU5LAorCTB4ODIyMWQ5NzcsIDB4ODhjNmViZTMsIDB4OWM3ZTUzNTgsIDB4YmY1NGQ5MjMsIDB4MmE2Njk1YzgsIDB4YmZhOTNlYmYsCisJMHg3NzA2ZmNhOSwgMHg1MzdmMjliZSwgMHhmZDUzNDhjZSwgMHhhNjMxOWU0OSwgMHhkYzQ2OGZmYywgMHhjNTNmYWE2MCwKKwkweDlmOTRjNTNiLCAweGE5YjY2MTM2LCAweDEyZTI4Y2ZlLCAweDU5Y2NmOTUzLCAweGIzZTU0YzhiLCAweGY5NGNkYmI1LAorCTB4MzRlZTJiNWIsIDB4OTJmMWZmZDUsIDB4YWY3MmE2ZTUsIDB4MGU3MTU5NzAsIDB4MjMxZjQzMzYsIDB4M2U4NWVmYjgsCisJMHg2ZmVkZTk0NiwgMHhlMzA2NDY2NywgMHg0YjM4ZDQ3NSwgMHgzNTBjZWY5NywgMHg1NmZhOTAwZCwgMHgzOWY3YWU3NCwKKwkweDA5ZWUyNWQwLCAweGU4ZmIwZTgxLCAweGUyZjY4MGY3LCAweGJmMDYxOTljLCAweGZhOTE0MDY1LCAweGU4MzI0YjcwLAorCTB4Njg1ZWI0MjYsIDB4ZmQ4OGE4ZjksIDB4NjU5NGYwOTcsIDB4OWY2ZWU3ZmYsIDB4MzEzZTI1NjEsIDB4NDNmZGFhZWEsCisJMHhmYjdmMjgzMiwgMHg1NjE5ZTZjMCwgMHhhZWEzMmZlMiwgMHgzYTUyZmZkOSwgMHhkY2YxN2ZlNSwgMHhmMDdjYjIzNywKKwkweDU3Mjg0YmZlLCAweGZjY2JmNzcyLCAweGM4MjJjMTM0LCAweDliY2UwNmFmLCAweDhjNzVhM2UxLCAweDhkN2QyZWJhLAorCTB4YmE1M2RhNDcsIDB4NTIzNTUzOGMsIDB4OWQ3MTAxYzAsIDB4MDBkMjAzODAsIDB4ZmRkMjI3ZDEsIDB4NWY0ODlmNDQsCisJMHhiNzJjZmEyNywgMHhlODkwNzEwOSwgMHhkMjIxZTkxMywgMHhmN2ZkZjE0YiwgMHgzZDIyOTdhNCwgMHhkMjI5N2E0YywKKwkweDQ1MmY0ODc3LCAweDI5N2E0MmRhLCAweGNkZDQzZmQyLCAweDNhODNmNGUyLCAweGIxZmRkYjhkLCAweDhmZDM4MmFlLAorCTB4ZjdmMDk2ZWEsIDB4NzE5NmVhNGYsIDB4MWYzYTk3ZmEsIDB4ODA2NGZmN2YsIDB4YjAwODdmNjEsIDB4OGJmMGM2OWQsCisJMHgwOTFmYzBkNSwgMHhkYjJlZGU3YiwgMHhiMWJmNjBiOSwgMHhhYmU3OTVlMiwgMHg1ZmFjYzdlMSwgMHhiMDIzNWEyMiwKKwkweGIxYWQ1YjRmLCAweGZlOWQxYzI3LCAweGFkZjllZWM5LCAweDkyMDg5YzU1LCAweGRlZTE5Y2NiLCAweGY4ZjAwNmNmLAorCTB4YjdjYzVkYmQsIDB4YzQ0N2VmZjUsIDB4ODQwNTNlYjQsIDB4YjVkMzRmYTcsIDB4MzMwN2UwYjMsIDB4YzY1NmNhMGEsCisJMHhlZWI4ZmYxMCwgMHhkMDM2MjVlYiwgMHhhZTk2ODdjYiwgMHhkNWVmYTNlZiwgMHgwM2E3ZGJmOSwgMHhmN2U4NmRiZCwKKwkweGE2NWRmZDVhLCAweGFlMzIxZDZiLCAweDZiNmI1YWYwLCAweGJmZGJkYjNkLCAweDAzYzQ2ZTE0LCAweGVmZWMzM2VkLAorCTB4NWVmOTU4ZjcsIDB4ZTA4NWYyYjEsIDB4YzEwNGU4ZmMsIDB4NWIyZmZhZjksIDB4NWFmMTBlMzgsIDB4Y2Y4OTI3OTcsCisJMHhjNDZmM2QxZCwgMHhmZGY4NzUwNSwgMHhlZjE0MTNmMSwgMHg4ZGUxZjg2MywgMHgyZmMyOWY3OCwgMHgzZTQxYzc1YSwKKwkweDc3NjkxZDE4LCAweDBkYzQ4NTg3LCAweDJmYmVkZmMwLCAweGJjYzY4ZmVhLCAweGMzMjc3ZGY4LCAweDk3ZDRmZmJmLAorCTB4ZjJmNzgwMjIsIDB4YjVmZTNmMGMsIDB4ZDgzNDk2OGUsIDB4ZTFkZjQ2MTUsIDB4MzNjNzA0ZjAsIDB4ZTU3YWZlMTksCisJMHhlNzE1MTY4YiwgMHg2NGFmMTE4OSwgMHgzYmNjNjM4YywgMHgxNWZkNGFjYSwgMHg1ZDIzYzY3NCwgMHg0N2NhNmFlYiwKKwkweDc1N2Q0NjVjLCAweDkzZDdmNzI0LCAweDQ5ZGRlM2JlLCAweGI5NTVlN2FhLCAweGVjM2U1MzVkLCAweDIyYWJhM2M3LAorCTB4OGNlOTQyM2QsIDB4YWZhOWU4MTMsIDB4M2FmMWVhOWIsIDB4MzhkMGJmMGIsIDB4MWViNDYyNGUsIDB4MWM3ZTgxMjcsCisJMHgwMWRmOWNiMiwgMHg0ODEwOWQxYywgMHhhMzlmZmJjNiwgMHhiMDNkZDg5NywgMHhiODhlM2U4MywgMHhiOGNlODJiMywKKwkweDA4OGZkNDA1LCAweDI3OThjN2RhLCAweDE1ZjdlZGZhLCAweGJjZjIxN2NkLCAweDlkZjBjYmQ3LCAweDI5ZjQ5MmU2LAorCTB4M2Y1ZTdhZGMsIDB4MmM2Mzg1YWYsIDB4M2Q1NGJiZGIsIDB4ZmFlNjFjNWYsIDB4Y2ZkMTA0NmIsIDB4OTBkYTE5YWQsCisJMHgxZmRmZDQ4MSwgMHg3Y2NjOGM5NCwgMHg3YTMyMTdkNiwgMHgwOTRmZGY2MCwgMHgwYmIwNDc3OSwgMHhmMDMxMTlmYSwKKwkweGJjN2U4NGZmLCAweDA1YmRlZjEyLCAweGU5NDJlMWRiLCAweDQxOGZjMGM4LCAweGJiZGUwNjRmLCAweDBlODMyYmEzLAorCTB4MThkMGUyODIsIDB4NjU3MTFkZWYsIDB4ZjRhMTdmN2EsIDB4MTk5ZDFkZDYsIDB4NDNhZDc1ZjQsIDB4OGNmMDAxZDIsCisJMHhhZTgzMjBmOCwgMHhmODlhMmY5NCwgMHgyYWU4ZWIxZSwgMHgwNjdmOWYwNywgMHhjNWQyODU1ZCwgMHhlOTI1NzQ5NSwKKwkweDBlMjdmZWI0LCAweGJhNGFlZmVlLCAweGMwMDdhNGVhLCAweDU1ZDM4N2U1LCAweGY4ZjM4YThiLCAweDc5YTdhNTlmLAorCTB4ZWUzYzYyNmQsIDB4NzY1Yzk3ZmYsIDB4YWJkYTQ0MWYsIDB4N2MxN2I2OWYsIDB4MTk4YzRjYTYsIDB4MmUxMzEyMGYsCisJMHg2MmVjMTA3NSwgMHhiYTMyZjVhMSwgMHg3ZjRhMTdhOSwgMHhiYzZlZWRhMSwgMHg2ZTQ2NWRhMiwgMHhmYTcxYmI3MCwKKwkweGFlZGExOTU5LCAweDA0N2FlZDEyLCAweDcxYzIxYmI3LCAweGY3ZTk2ZjExLCAweDFhNzJkZTA4LCAweDk5OWUyZDcxLAorCTB4YjkwZTUzOTAsIDB4MmYyZGYyNmQsIDB4MjdjYzhkZTEsIDB4ZjNhNzE5YmEsIDB4MDk2MjQzZjMsIDB4ZWUyNGJmOWYsCisJMHg4NTRmNDBmYSwgMHhjYjhkNjkzYSwgMHg0MmZhYzg1ZCwgMHg3MWQ3NjQ2MSwgMHhlZGVhMzcwNSwgMHhkYzVkN2ZjNywKKwkweDRmOGNmOTgwLCAweDM3ZTNjYjMwLCAweGY1ZmNmMmVhLCAweDBmZmI5MWEyLCAweGM2ZTE0NzdkLCAweGNlNTllYmRjLAorCTB4NjE0NzdkMGYsIDB4ZmUzZDQwZjMsIDB4ODFhNDRkMjAsIDB4OGYwYTE3ZGYsIDB4MGVmZTlmOWMsIDB4Y2ZiZWExNDYsCisJMHhjOWJhNzQ1MywgMHg1NDYyYWI3MCwgMHg2YTliZWUxYywgMHhhZjMyMWM1NiwgMHgzYzhjMWRlMywgMHhmY2UzZWI4YywKKwkweGU5Y2ZjMjBkLCAweGZkYzAyMjRkLCAweDA5MDNhMjRjLCAweDYxMDkxZmY5LCAweGM4NWZlZjkzLCAweGFhMzViYWZiLAorCTB4NTc5MGRmZjYsIDB4NGZiYTdiOGQsIDB4YjA1N2I1M2IsIDB4NGM0NDBmY2YsIDB4NGE3NzgzOWUsIDB4ZDcxOTBkYzYsCisJMHgxN2Y2ZWQwZiwgMHhkYmNlNTliYSwgMHhiOTYwYzhlZiwgMHgxNmQyZmIxMywgMHhkZTI3YzlkNywgMHg1ZmJhNzNhNCwKKwkweDhhMzdiY2E2LCAweGZiNDZmNzE0LCAweDNiZmE3OWQxLCAweGJmOTFjNzNhLCAweDQwYjk2NzMxLCAweDczNmVmMWJiLAorCTB4ZmVkMTkzYmMsIDB4NjEzOGQ3MjYsIDB4OWNmZWVmOGQsIDB4Nzc2ZjI5YmMsIDB4ZGVjZGQ4NmYsIDB4MDQyZWNkOGEsCisJMHhiZDhhZGY3ZSwgMHg3ZGViMTBhYSwgMHg0NWE3YjYyYiwgMHg0ZTc2NjFhNiwgMHhhZmQyYmQwNywgMHhhMGQ4YjkyYiwKKwkweGM2ZjFjZWZiLCAweGMxZGQ3OGYzLCAweDI4NmI4MGQ5LCAweGZmMzgwZDNjLCAweGViMWViODAwLCAweDA3N2JhZTBhLAorCTB4YWEzNzk2MDgsIDB4YWQ1ZjI0MjMsIDB4ZDU3YzkwOGUsIDB4NTg3NTczODAsIDB4OWVkZTdkYzcsIDB4NTUyN2YxYzEsCisJMHhmOWFmMDkwZSwgMHg1NjExYWVjYiwgMHgyYzE3ZjUxMiwgMHg5M2Y5YzkxYiwgMHhiODA3YzI3NSwgMHg2MDkyYzY5ZiwKKwkweGY3YjEwZjEwLCAweGNlNThlYjA5LCAweDlkZGNlZjFiLCAweGU4YmRmODdkLCAweDJhZTc5YTI0LCAweDk4M2ZmNjg3LAorCTB4NDA4MmI5ZGYsIDB4ZTI4NDQ5MTYsIDB4YmU3YTg2ZTQsIDB4MDVmZTdmOGYsIDB4YWE3ZDAzZDUsIDB4ZjFhZjc1NGEsCisJMHg5NmZhY2VjMCwgMHg3ZDcxZWYyYSwgMHhmZTE1MjA3ZCwgMHhkNzU0ZjE1OCwgMHgwZTU1ZThmMSwgMHg5ZjQzNWYwOSwKKwkweDk4YWZkMjFjLCAweDVmYjFhZGY3LCAweDgwYmVmZTg1LCAweDBlZjU1ZjIxLCAweGM2ZGNmMTkzLCAweGU0ZWVmNzNkLAorCTB4OTJlMWUxYWQsIDB4OTMwZWY1YWYsIDB4ZWJjMGQ4ZmMsIDB4ZWU3ZWJiMDYsIDB4ODljMzNmNTMsIDB4M2FmY2E2OGYsCisJMHg5OGFiZjU5YywgMHgyZTRjNmY1OCwgMHhjMjg1ODNlYywgMHg3NjE4OWZhNCwgMHhmOTA0ZjY5NSwgMHgyMmI1Y2E3ZSwKKwkweDk0NTE5MWViLCAweDEzNjQzYzJmLCAweDA3NmYyYTdlLCAweDkyNzk0MDQzLCAweDFmYjZiM2Y0LCAweGVmODJhNGJhLAorCTB4ZmMyOTQ1MTcsIDB4NmY3MTg2M2UsIDB4MjJjOTJjMjksIDB4YzI3YzQxZGMsIDB4YmQzNzBlZTksIDB4MTM5MTFiNGIsCisJMHg3OTQ3Y2E2NywgMHhjN2VhOTk3YSwgMHg5NTM3NDg4YywgMHg5ODA3N2FjNywgMHgxNDI3ZTNjYSwgMHg4YTNkZjI5OCwKKwkweGVmZDUzNmFmLCAweDI5YWM2YjM5LCAweDY4ZGRhYzlmLCAweDMxNTI5ZmFhLCAweGY4Mzc5NGQ1LCAweDI0ZmM4YTU4LAorCTB4YzViOTJjZmEsIDB4YjJlZmJlZDQsIDB4MzRmZDUzNTIsIDB4NWNhOWE1NWYsIDB4MzE5YjNiYzUsIDB4MjViN2FiNDAsCisJMHg4MWNmMTEyNywgMHhkNThjOWZjYSwgMHhlM2RlNDM0YiwgMHhmMGNiMDhiNSwgMHhmZTZiNzdjZSwgMHhjYmRlNWEzMywKKwkweDgwYjkxMDk5LCAweDZjYzlhZmRmLCAweDllNzk5OWZjLCAweDJjNmI0NGVhLCAweGNkYmJkN2E1LCAweGM5MjhiMTdjLAorCTB4YjkxNzFmOWMsIDB4NzFkZjgxNGYsIDB4OWZjY2NiOWMsIDB4NGQ1ODk2NTMsIDB4ZWFlNTFmZjksIDB4ZTQ0ZjM0ZmMsCisJMHhiYmUzZGRiMSwgMHgzMDBkYWZmMCwgMHg0ZTE0M2ZlMSwgMHg3ZWZjMGY0NCwgMHhlZjlkM2I2OCwgMHhjZGViY2MzZSwKKwkweDA3MGY3ZTMyLCAweDc1ZTA5MzdlLCAweDBjMTI2ZmMwLCAweDgyNGRmODA3LCAweDA0OWJmMGYzLCAweDI0ZGY4N2Q3LAorCTB4OTM3ZTFjYjgsIDB4ODcyMWYyZTAsIDB4ZDYxZmY4Y2MsIDB4NTVmZmM2NjIsIDB4NmZmMTk5MWYsIDB4Nzg3NzY1ZDAsCisJMHhhNjZhZDkxYSwgMHg5YTI5YTEwZiwgMHhiYTc4MmRmMiwgMHg3ZTk5OTRlNiwgMHgxZDczZjE0MiwgMHgwOWIxNWI4OSwKKwkweDA5ZTI4N2MwLCAweGJlMzg3ZmI4LCAweDhiZTA4NjU2LCAweDM3ZjdjM2YwLCAweDMxNDc3YmRiLCAweGQ3ZDcxZTdlLAorCTB4MjA2MDZkNzUsIDB4M2EyZTk3ZGYsIDB4NmZiYzBhYTQsIDB4NzFmM2FjNjMsIDB4NmQzZmRjZmQsIDB4ODk3MzFhZDUsCisJMHg1ZGNlZmNjZiwgMHg3NjNlMDQ5MCwgMHhkYjdlOTA5ZCwgMHg0ZjE2NTVmMSwgMHgyMDdmYmE4MCwgMHgyOWQ5OWM2NCwKKwkweDNmYTg0M2RhLCAweGFhNTJmZTJiLCAweDI2ZDI3NDFkLCAweDBlN2JjZmRmLCAweDk1ZDg3OTdjLCAweDEyM2ViMmYxLAorCTB4ZjZiZWY4NGYsIDB4MjdiZTU0Y2YsIDB4YThkMmM0NzUsIDB4OGVhZjhmODAsIDB4OWYwMDllZDEsIDB4ODRiYjk3OTksCisJMHg4YTI0OWJkNywgMHg1YzQwMmZiNywgMHhhNTg1N2ZkNCwgMHhhZmI3M2YyMiwgMHg3MjJkYzdiYywgMHg4OWZlZjk1YiwKKwkweGE2ZTcyN2MxLCAweDJkYTliOGM4LCAweGRkN2ZiYWI5LCAweDllYTdlMzIzLCAweDc3NzI5NWM5LCAweDcxYzVjNzk0LAorCTB4ZjJiOTI1ZGUsIDB4OGJhOTBkN2UsIDB4MDEwNzczYTksIDB4ZDk5ZDg3M2UsIDB4MGIzYWNmODAsIDB4OGFkOWViYmYsCisJMHg5ZDA5ZTQ3YiwgMHgwZjIxYzhmNywgMHhhM2VjZmU0MywgMHgxZmY1N2ZjYiwgMHg0NzU4MWMzYiwgMHgzYTYxN2FmNiwKKwkweDFkZmJmYjdmLCAweDgxZTJmOGE2LCAweGZjYTY1ZDViLCAweDUzMjRhNmEwLCAweGRjYmJjMWZkLCAweDQwZmNmMmE2LAorCTB4Yzg3Y2E5OGUsIDB4M2YyOThmMjEsIDB4YTk4NDY1YWMsIDB4NzkxZjU1ZmUsIDB4YWQ5MWY5NGQsIDB4YWZmNTRjMTMsCisJMHhjYTZjNTUzOSwgMHg0N2I2ODhhNywgMHg4YWJlZGYwMSwgMHhjZDFjNTNiNCwgMHhiOWZhOTc0ZCwgMHhlNGRjNzA1YiwKKwkweGU1NjNiYmRjLCAweDdlZGQ1ZjdkLCAweDQ2ZmJjODYxLCAweGQzYTZiOWRjLCAweGQxMWVhODc1LCAweGU4ZTUyZWQ3LAorCTB4ZjUyMTY0ZmEsIDB4MWZhZTg3NDYsIDB4YTEzZWIzMGEsIDB4MWRlMzcxZTksIDB4ZTY3YzU4ZjcsIDB4NWUyMzcxYjgsCisJMHhkMGVmNDNiYywgMHg3YjhlOGFmNSwgMHhlMmYxOWQzNCwgMHhmMTc4ZTBkZSwgMHhiZjVkNjFiOSwgMHhjNzVlN2QxZiwKKwkweGZiZmNlODdiLCAweGViN2FlNWRhLCAweGJkZjNiNGVmLCAweGExNWU2MzFkLCAweDk2Yzk0OWYzLCAweGQxZDliYjc0LAorCTB4YmZhYWJkZjUsIDB4NDZmYjRhZTUsIDB4MjVmMTY2NmIsIDB4MzYxM2ZkZDAsIDB4NmRmZjJiNGYsIDB4ZjNjNjJiODQsCisJMHhiNzVlMjJiNCwgMHhjZjc2MTdmZSwgMHg4Zjc3ZjcwYSwgMHg1Y2IwNzczNywgMHg2NThiMWNjZiwgMHg4ZTVjOTRkZSwKKwkweGRkZmQzMzhiLCAweDkyNDE4ODg0LCAweDc1ODNhZGJlLCAweDc4Yzg0YWZiLCAweGRjNjQ2MzczLCAweGJiYjE4ODlhLAorCTB4OGZkZGJmNDEsIDB4NjQ5OWUxMjcsIDB4ZmY3YzBkMTcsIDB4ZjE2N2JmNGIsIDB4Zjc0ZDM1ZTMsIDB4YmQ4ZTY4YTEsCisJMHhjZTNmN2Y1MSwgMHg0YzNkMDM2ZiwgMHg1OWYyNGIxYywgMHg1YjEzYzkzZSwgMHg0OTE0M2Q3YSwgMHhjYjEzY2E3MiwKKwkweDhhOWY2Y2FjLCAweDM3NTdmZTdiLCAweGRlNzVmYWZiLCAweGZhNGJlOTlmLCAweGIyMDNlODEwLCAweDA3YThmNDBlLAorCTB4YjcyOTU0ZjIsIDB4MmJlYjkyMGMsIDB4YjhlZWJmNTIsIDB4MTg3ZWMwZTcsIDB4NDNmM2Y0MjEsIDB4MTc0ZmJjNzAsCisJMHg2ODc0YzZmNCwgMHg3NWRmZTNhYywgMHhkYmEwYzFlZiwgMHhmYTE5Mzg1MCwgMHgzYmUzZDBhZiwgMHhkMmYzMTlmYiwKKwkweDA3ZWM2N2UxLCAweGZkYzY3ZTAzLCAweGI2NmRmNzEzLCAweDdjOTE0ZGUyLCAweGUyMDI2NThmLCAweDZkZmMwY2U1LAorCTB4YzZmNjkzYzksIDB4NTAzYzNhMDUsIDB4YmJhOGZjMGYsIDB4NmU2YTQ1N2EsIDB4ZWRmN2VjMGMsIDB4ZWFlMzFkYzIsCisJMHhlYTNiMGU4MiwgMHg2MmUwOWJmZiwgMHhmYmJiYmZjMCwgMHg4N2YxZGQ2ZCwgMHg1ZGYwYmU1MCwgMHhhM2JhZGRmNywKKwkweGRlZjY3ZmQzLCAweDkwOWYxMDViLCAweDVlM2E0YmYxLCAweDFjMmNmZGZjLCAweDk0Nzc3MDE3LCAweDMyM2YzZjc5LAorCTB4OTE4OWYyNDgsIDB4ZTRmZGY0ODMsIDB4Y2NkNmZkMjMsIDB4MGZmYzA0MmYsIDB4OWQ1NTJiZjUsIDB4YmNmM2M4NWYsCisJMHhkZjk4YWQyNCwgMHg4YWY5YzZhZiwgMHgzN2YzNWJmYiwgMHg4ODQ3Zjk0YSwgMHg4N2FiYzRlMiwgMHhlMzZmOGZjMiwKKwkweDdhZDdjYmZiLCAweDRhNmRkYjA1LCAweGRlM2YxNTFiLCAweDc1ZjEyYWY5LCAweDlmYjMwZmFkLCAweDA3NzJjZGNmLAorCTB4MjZjODNiYmYsIDB4NDY1NzZhNGQsIDB4NWRhNWY2ZWQsIDB4YzJmYWNlZjksIDB4NjBlZWY5NDgsIDB4MGJlYWZiZTgsCisJMHgyZjE5YmQ3NSwgMHg4NmRmNjA2YSwgMHgxOWVlYmRmYSwgMHgzY2IxZmJhNCwgMHg5Y2YyYzNjMiwgMHhhMTUwZDcxZSwKKwkweDM3YTBlOWQ3LCAweDBlNmY3Y2JmLCAweDMxZjYzMjdhLCAweDY3MWYxY2E1LCAweDNmMGRjZGMwLCAweDNjY2U5MGQ0LAorCTB4MDczYzM3YzEsIDB4YjU4Mzc5ZTcsIDB4MGVjNWY4Y2IsIDB4YWI3ZTFhZjgsIDB4NjFlY2JmMGUsIDB4MWExMTI3YmUsCisJMHg3N2NlNzE4ZiwgMHgzZjJiYmEyMCwgMHhlYjFmZTE5OCwgMHhmODc0MWY2ZSwgMHhlZmMzYmVjNywgMHg4OTY5MWVkNiwKKwkweDY5ZjFkZmM2LCAweDY3ZGYyNmRmLCAweGZkNWJmNGU5LCAweDIyY2JiODY1LCAweGYwMzE1M2ZkLCAweGZkZWFiNTNmLAorCTB4NWQ3OThkODksIDB4OTZkNTBmZGQsIDB4OTQzOGU0ZWYsIDB4NzNiNjhiNjYsIDB4MmNlZmFkMTAsIDB4N2I3NzhmZjUsCisJMHg5ZmRjODllZiwgMHgyNjExNzc4OCwgMHgyYmE5NzZlYSwgMHhjZGNiYWRkNywgMHg4ZmU5MTRhMywgMHhlZjhjYTlmNiwKKwkweDVlZjIwOWY2LCAweDgxNTFmMTNkLCAweDRmYzQ2NzdkLCAweDA0ODExMTRjLCAweDRhMWY4NmE0LCAweGUxOTIzZDViLAorCTB4NGFhMWY4NmYsIDB4OWU3OTIzMDIsIDB4ZGExN2VhMzMsIDB4ZWI2OGU0ZjAsIDB4ODUxNTc3YTMsIDB4NTNmZDNiYmIsCisJMHg1YzY0N2RhZCwgMHhhYTdlNzc1NCwgMHhiOWYzOTc2OSwgMHhhZjk3ZTliZiwgMHgxODNlN2VlMSwgMHhiNmU1MjY5NCwKKwkweDAzNmVmYjg2LCAweDJhZDgwZDlkLCAweGFiNjc1ODZjLCAweDRiYmZlYmFkLCAweGFiZjNhODUxLCAweDNkOWFlODEyLAorCTB4OTZhZGUyODIsIDB4OTYyZmJjMmIsIDB4YmY4OGMyMmEsIDB4ZTQ2ZjNlNjIsIDB4ZjllYTM1MmYsIDB4N2RiZjk5MjIsCisJMHhlYWI3Y2NhNSwgMHhkMTZkYTdlZiwgMHgyNzU4MjBlZCwgMHg3YTA3YWM1MiwgMHg0ZWRkMzZmOSwgMHhjNTIwNzU4MiwKKwkweDdjMWRmMDNhLCAweDM1ZjA3OTBkLCAweDkwZDdjMWU0LCAweDBhNDM1ZjA3LCAweGE1ZWY4NmJlLCAweDc2MTUzOGEyLAorCTB4MGFkM2Y4NWIsIDB4ZmMwN2Y2ODMsIDB4NzI0MTg1NjksIDB4YzE2OWZjMTMsIDB4ODJkM2Y4NzksIDB4MTY5ZmMzZWIsCisJMHg1YTdmMGU1YywgMHg2OWZjMzk3MCwgMHhkM2Y4NzljMSwgMHg5ZmMzZWI4MiwgMHgzZjg3OWMxNiwgMHhmYzNlYjgyZCwKKwkweGY4NzljMTY5LCAweGMzZWI4MmQzLCAweDBlNWMxNjlmLCAweDM5NzA1YTdmLCAweDc5YzE2OWZjLCAweGViODJkM2Y4LAorCTB4NWMxNjlmYzMsIDB4NjI5OTZmM2UsIDB4ZDNjZGI3ZjIsIDB4NWIyODdmZGYsIDB4NTFmNGNmMWYsIDB4OWIxYzUxOTgsCisJMHhlZmZkZjg0NywgMHhjNGZjN2Y4OCwgMHgzNzNjMGU5NiwgMHgyZWRkMDIyZiwgMHg0OGY3MGVhZCwgMHg5MDRlMzczYywKKwkweDg5MDhiNzc4LCAweDhjZDliNmU3LCAweDMyZWNiYmU3LCAweGI0ZTMyNDVmLCAweDdlMDdlOTQzLCAweGY0OWI0MmFiLAorCTB4ZGY4NTIxNWIsIDB4NTZmYzI5MGEsIDB4MmFiN2UxNDgsIDB4MmI3ZTk0Y2MsIDB4ZTE1YmYwYTQsIDB4NDg1NmZjM2IsCisJMHgwYTQyYjdlMSwgMHhmODUyMTViZiwgMHg2ZmMyOTBhZCwgMHgyYjdlMTQ4NSwgMHgwYWRmODNiNCwgMHhmODU2ZmMyOSwKKwkweDUyMTViZjBlLCAweGZkZjBhZGY4LCAweGZlMDNjZDA4LCAweDkwNWU2MzJiLCAweGY0OTlmYmYzLCAweDkzNDNhMjUyLAorCTB4ZTUzMmVhNWUsIDB4ZDcwN2U3MjEsIDB4NWMxZjljODcsIDB4YjgzZjM5MGUsIDB4NzA3ZTcyMWMsIDB4NzA3ZTcyMWUsCisJMHhjMWY5Yzg3ZCwgMHhkYzgzNDlmOSwgMHhlZjIwYmZiYywgMHhiYzgzYjcwNywgMHhkNDFmOWMxZiwgMHhiNjAzN2JlOCwKKwkweDJlMWI0OWFiLCAweDM1YjQ4ZWJjLCAweDcxNDI3OTRhLCAweDJmMzUzMTA5LCAweDhiZmMyNjczLCAweDM1MjU0ZWFkLAorCTB4NmQ4NDIzZDYsIDB4ODU5OTgwZjksIDB4MzhmNGQ3OTQsIDB4NjZkMTNjYzcsIDB4YWUzOWJlMDEsIDB4MDVhNmYwODAsCisJMHgwZjY1YzcwNCwgMHg1Y2M5N2ZmYSwgMHhmOWIzZjg2ZSwgMHhiZjllZjA4NywgMHg1MGRlYjA0MywgMHgzNWFmZGZhMywKKwkweDRiODQ3YmRhLCAweGVmZDQ2YTQ1LCAweDJmNWQ3N2NjLCAweDFlYTM3Yzc0LCAweDc5YTBjYmYzLCAweDhmOTk2MjkwLAorCTB4YmJmYzkzNzgsIDB4YWY3MDBiMjIsIDB4OTE0NThiNjAsIDB4NjQyYmI4ZjEsIDB4NWQyODc0M2MsIDB4ZTc5M2NhYWQsCisJMHhmNmNiMTZmYiwgMHg1Mzg4ZTFmZCwgMHhiODNjNTEyOSwgMHgxNTY1OTFlZiwgMHg4MDA1NmM4NywgMHg3ZTAyOTJkMywKKwkweDU2MmYyYWY3LCAweGFiOTJkNzVmLCAweGNjNjU4NzExLCAweDEyNGJiMGRiLCAweDg2N2JlMDlmLCAweGJkODRkYWEzLAorCTB4ZmQxOWM2OWMsIDB4ZWZlM2IwODUsIDB4NGJiNDRjNzMsIDB4YTBlZDAyNzksIDB4MjlmNDBlNmYsIDB4ZjQ0MTRkZGUsCisJMHg5ZTRmMmNiZCwgMHhiNmVmOWE3YiwgMHhmYmU5Y2JhYiwgMHhhZTRiNmRjMCwgMHg4OWM1ZmRjNiwgMHhkM2RkYjJlMSwKKwkweDM4NjY4OWJmLCAweGY4NTA2ZTRlLCAweDZkYThjZTllLCAweGM5ZmI4YmMyLCAweDNhN2U3NWNiLCAweDVlY2I5YjcwLAorCTB4ZjhiYWUzY2UsIDB4NmZkMWEzZGUsIDB4YmU1NDg2YzksIDB4NWEyMjU5YTcsIDB4NDUwZjcxMGIsIDB4M2RmODU1MGMsCisJMHhiNDZlMDM3YywgMHhiZWIxZDdiZSwgMHhiMDJhZGEyYywgMHhmYmUwZmYyZiwgMHg3ZTJlMjQ0ZiwgMHhhMzRmZmI5ZiwKKwkweDIxMTZjNjg3LCAweGNiMzQ1MGFlLCAweDBkMjc0MmY3LCAweDgzZDk1OTJkLCAweGU1ZjlhNWU2LCAweGJmYTNhMTdiLAorCTB4ZTcwNmYyNTgsIDB4ODVlZjkyOWYsIDB4ZTcwY2Y5MzIsIDB4OTg3OWYxZjksIDB4ZmRmODUzZWQsIDB4OGRiZWM5OTUsCisJMHhlZTM3MDQ5NiwgMHgyNWI3MmY2NSwgMHhlMTM2ZmVhMiwgMHhmNTA1NTg4MSwgMHg4ZDhhZjcwOCwgMHgxNjhhZTU3NSwKKwkweGJkMDE1MzhiLCAweDQxZjEwMzg4LCAweDYzOWM0N2Y0LCAweGRmMjVlODNhLCAweDU5ZjdlMzYzLCAweDM2NWQ1OGE2LAorCTB4Y2U0MzFiZjAsIDB4YjFjOTcxMjksIDB4MzE1MWQ0OGIsIDB4NDQzMmNmN2MsIDB4ZDBkNGI4NGUsIDB4N2U2MmUzODMsCisJMHgzYjRlOWM3OCwgMHhiYTVmZTdkZiwgMHg4NTcyYzlkMywgMHhiZTYxNWViNiwgMHhjNjVmM2U3OSwgMHhmNmRkNTZiYiwKKwkweDdhNGI3MGUxLCAweDk5Y2U5YzY3LCAweGJjMTZmZjM0LCAweDdkMjY3YjAzLCAweDg1MDhmNDdiLCAweDc5YmQ4OGU1LAorCTB4MGRhM2Q3MDQsIDB4Y2QzZGYxMmYsIDB4ZjA2Zjk1OTIsIDB4MGQ0Yjk0M2QsIDB4ZmJjYjQ1MGYsIDB4NTJmZmQyNmMsCisJMHhiMGNkYzNhZSwgMHhmMWQ3Y2QzYiwgMHg2OWM3YWU1MywgMHhlZjkzYWIxZCwgMHhjYzM5ZDMzYSwgMHg2YTVjYWVlZiwKKwkweDExOWNiMWIwLCAweGYyMWEyZjJhLCAweDkxMWVmMWE3LCAweGMyM2ZhZTEwLCAweDYwZDE1M2NlLCAweDBiYzAzYmUzLAorCTB4NGFhYzk0ZDcsIDB4OTFjYTU3MTIsIDB4NzMzOTc1OGIsIDB4ZTM4ZDgzNTEsIDB4ZjdmNDJhYjIsIDB4NmVmZjQyZDQsCisJMHgxZTNkNjJjZiwgMHhmMzU2ZjE2YiwgMHg0MmYyNGZmNywgMHg3ZGUzNTBlNCwgMHhjOTRlYmQ0ZCwgMHhiMDY2MDdkYiwKKwkweGM2YzRiNDNjLCAweGNiMzljZGZlLCAweGI2MjQ3Y2E1LCAweDkzZWUzZjBiLCAweGNlM2U1OWNjLCAweGU2NjZmNzgyLAorCTB4OTQ3YWY0ZWMsIDB4NWRlOWU4MmUsIDB4ZDg5YTRlNWQsIDB4NGZmODY0ZWEsIDB4ZmNjMTFjYjksIDB4MTRlNWVhNjUsCisJMHgzOTdjZGZjZSwgMHg5Nzk5ZDM5OSwgMHhlZTJhZGM2NSwgMHg1YTZlODEyMiwgMHgwNzNiZTQ4YiwgMHhkMWYyZWJlZiwKKwkweGM2YjFjNDBjLCAweGM5ZWIzZTQzLCAweGY0NGVkZGY0LCAweDc0ZjIyMThkLCAweGFiYzAzNWJlLCAweDM4Nzg4MDFjLAorCTB4NDRhZGE2ZDEsIDB4OGRjNGVjOWMsIDB4NGQ4M2VmODIsIDB4ZmQ0NTFjODIsIDB4MTU1YzgyY2YsIDB4NTY5MWZkOGYsCisJMHgyNjYxZjdjNCwgMHg2OGJmN2MyOCwgMHhmNGRiZDBkMiwgMHg0M2ZiNDBmZCwgMHhmN2UxM2YzMCwgMHgyOWMyYjQ1NywKKwkweGNkMzljNDdlLCAweDgwNWJiNmQyLCAweDY4NWY2MzdmLCAweDVlZmNhM2JlLCAweDYyOWYyNGVhLCAweDlhOTIzYmM3LAorCTB4NzQxYjZmYWUsIDB4ZTYzZmJhMWYsIDB4YjI3NmU4NDYsIDB4ZWIwNzY5NDgsIDB4YjI2MTkzYjAsIDB4YjdjOTI0NzgsCisJMHhkM2U0MjY2YSwgMHhmNjZkYjBiOSwgMHg2MDgxMDlkMiwgMHhjYjJiOTUxZiwgMHhkNTc2ZmM3YiwgMHg0MTkyMDZjYywKKwkweGM5ZmI1NWZmLCAweGRlNDU4YjFjLCAweDkwMzkyMzNmLCAweDk2ODgwYmVmLCAweDJmOTQ5ZWEyLCAweDQwMTRhMzU5LAorCTB4ZjVlNjMyM2YsIDB4MzhlYzY3YjksIDB4M2E0ZWIwY2YsIDB4YTdkOGVkMjgsIDB4ZDJlNTFlZjIsIDB4N2U0ZDMyN2IsCisJMHg4Y2I0ZDA5YiwgMHgzNGZkOGRlMCwgMHgyN2Y1YTYzNywgMHhmNDY4NjEwYSwgMHgxYzJkZTE2MCwgMHg4NWViZjc4MSwKKwkweDAwNTQyOGYxLCAweGU4Yjc5OGYxLCAweDNiYzFlYWY5LCAweDk3M2FiNGZmLCAweDkxZjljNGUxLCAweGE2Njg3ZGJmLAorCTB4ZTA1ZmYyMmYsIDB4NmIxNDczOTMsIDB4NGIxYmRmZjAsIDB4MGQ1NzY4YjIsIDB4NTBmN2MxZWUsIDB4MTFiZjAzYzcsCisJMHg5ZWZjNmRiOSwgMHg0YmI2NGE0NCwgMHg3YjEwYTlmMiwgMHg4OTYwZjU0YiwgMHg0YmJiNTBjNywgMHg3NzNjYWU1OSwKKwkweDdhOWRkNTg0LCAweGRjN2JmYjJiLCAweGQ2MzRiNzZjLCAweGJlNjZjYzdkLCAweGYzYTQ2YmU3LCAweDVlZTdlYjA3LAorCTB4OWVlN2JmZGQsIDB4ZjkxNmMzY2EsIDB4MTY2M2MyZmUsIDB4ODg1N2Y2ZmYsIDB4ZDBmNzJmNWUsIDB4OGZiZDYwNjYsCisJMHhlNzllZGUyMSwgMHg4Y2ZhZjFhZiwgMHhmODNhNGNmNywgMHg4OTZlZmU5NSwgMHg5NjQ3NGY0MSwgMHgyYWZiZTI1ZCwKKwkweGI3NzY5MWE1LCAweGU1NGY0NDFhLCAweDBmYmUxNWFiLCAweGRlNGNiYTVhLCAweDJiNTZkNmU3LCAweDZlODQ1ZGYyLAorCTB4OTliZjU4ZWMsIDB4OWVmY2JmZmQsIDB4MTE3ZTZmZDUsIDB4Zjg3NTBiMmUsIDB4YmNiN2IxY2UsIDB4ODRlYjQ4ZTEsCisJMHgzZDk3OWZlZiwgMHgzNDdjOTM2MCwgMHgwZWZiODk5MCwgMHhmMjcxMmNiNywgMHg3YjlmZDliYiwgMHgwZjA2YWI4YSwKKwkweDhjM2M5ZTAzLCAweGU1ZDg3MWE3LCAweDhjNGI3ZjU0LCAweDRiZGYwNGI2LCAweGQ4NDFjYjQ1LCAweGZjZmVlNzFkLAorCTB4YmE4ZjdlNmQsIDB4ZGY4ZDM5YjYsIDB4OTVkOTJjYmYsIDB4ZDllZjBhYmYsIDB4N2VkMWVlN2MsIDB4NDQ5N2Y1ODIsCisJMHg0NzkwZWNiYSwgMHhmOTYyMWE2YSwgMHg1M2RiOWU3YywgMHhkYTJiY2ZiZiwgMHhlMDY3Y2ZkOCwgMHhkMmMxYmVlNywKKwkweGJlN2Q3NzhlLCAweGFlYTJlNzFjLCAweDZjYzAxMTU3LCAweGJhZjU0YzUzLCAweGY2MWE2M2I2LCAweDRiM2I1MGQxLAorCTB4ZGYyMWJiZTgsIDB4ZGQ4MTU3NjUsIDB4NWY2NDFlYzQsIDB4YjYzMmVjMzUsIDB4NzFiMzYzOWMsIDB4NzdiMWNmYWUsCisJMHhmNzNlZjdmZCwgMHhmNDM3ZjNlYSwgMHg3YTFkZjlkYSwgMHg5ZWY4ZWU2ZCwgMHgyYWQ3ZmY5MCwgMHhjYmQzZDgyZSwKKwkweDcxMzNkZDIzLCAweDkwZmNhMWJmLCAweDYyYjQ5MTBkLCAweGJlNWI5YzYyLCAweDdjOGY3MzFmLCAweDhlZjRhNjNmLAorCTB4NzM2N2U2N2MsIDB4ZGMwMjkzODAsIDB4ZmJjOTE5M2IsIDB4ZTk0ZmRjYjgsIDB4ZmJmN2VlOTAsIDB4ZjQwZjZiYWQsCisJMHgwYTdhMGRkOSwgMHg4MjFkZjk3OCwgMHgxZWQ3OTc3MiwgMHg5NTFmMjQxNywgMHg3N2E2MmEzNSwgMHgwYmZjOGMyNCwKKwkweDk3Yzk1NTgzLCAweGZjMDBkZDQ4LCAweDlhNDc3YzdlLCAweGNkMzk2ZjFkLCAweGYxMDkzMTIxLCAweDI3NDE3Yjk5LAorCTB4NTFkYjNhYzMsIDB4OTkzZjhlM2QsIDB4Y2EwZTJlOTgsIDB4ZmUxNGJkZjcsIDB4MmYxOGU0YmIsIDB4OTU1YmVmZjgsCisJMHhjM2RmOWEzNiwgMHhkZjJjZmFhMCwgMHhjNTFjMWFlZCwgMHg2OGI4OTVmZCwgMHg1ZDQ4NjlkZCwgMHgwMzgyNGYzYywKKwkweDNlZWRhOWMzLCAweGUzY2RjZmVhLCAweDAyY2EzZTMwLCAweDA3ZWMxYjdlLCAweDQyZjcxMDczLCAweDdlNWM1YmY5LAorCTB4NmQyOWM2MWIsIDB4NjhkNGVmOTAsIDB4ZGEzOGU0NmIsIDB4MjBmYjU4ZWEsIDB4OTc1NjA3YzgsIDB4NWNiMDRmYmQsCisJMHhiZGRmMjBkOCwgMHhkZGZmYTM5ZSwgMHhjYjJmOWExMSwgMHgyNzA0ZTVjZCwgMHhlZTMzYjNkYywgMHhhYmMyODZkZCwKKwkweDc5N2Y5ZjQ0LCAweGNlNTlhYzYzLCAweDAzNmI1YzZjLCAweGYzNzc2NjdlLCAweGRkMzljNjVlLCAweDMwZGE1ZDBlLAorCTB4MjgzN2RmODYsIDB4YmVmOTdhYjcsIDB4ZmJjM2E2OGEsIDB4Zjc5Y2RiYjMsIDB4N2IzMjVmYzIsIDB4MzRiNjIzZGQsCisJMHhiMDY1ZmZjYSwgMHhlOWNmNmI5NCwgMHg3YTYyNzFmYiwgMHhhOWRmOTMyMCwgMHhmMWM5Y2RiYSwgMHg4ZDVkYjNlMywKKwkweDc4MGVkZWJjLCAweDgxZjA0NDNmLCAweDY2MmFlMmRjLCAweGY4OWQxMzc4LCAweGJlNTk2ZjEwLCAweGNlZGY4Y2NlLAorCTB4NzdjOTQ0ZjksIDB4ZjA5NWQ3ZmMsIDB4ZDU2MDViZmUsIDB4NzllMGFlZWMsIDB4ODk5N2RmYWMsIDB4YjRkOWExZjgsCisJMHg5NzBlZjFlZiwgMHgxZjdjNjk3MCwgMHgzMzQzYzRmNiwgMHg2MjA1ZWZmOSwgMHhlNmNmMWM5ZSwgMHhiYmM3OGY3MSwKKwkweDRjMzc0NDUzLCAweDE4ZmQwNmQ3LCAweGYxOGRmM2Y3LCAweGI0YWIxZWFjLCAweDZiYmU3YmM3LCAweDQyMGY3YTlmLAorCTB4N2MyN2FmNGUsIDB4ZGRkMDBmYzMsIDB4MDJlM2I1M2UsIDB4MmY2YjhkMjYsIDB4NWUwN2VmOTcsIDB4ZmRmNGVmYzEsCisJMHg2YTAxZmZmYSwgMHgwMGQzNmM5MSwgMHgwMDAwZDM2YywgMHgwMDA4OGIxZiwgMHgwMDAwMDAwMCwgMHg3ZGVkZmYwMCwKKwkweDY1NTU1YzdiLCAweGQ2YmJmMGJhLCAweGMwZDg1N2RhLCAweDUxYjA4YjY2LCAweDYyMDIwZGMwLCAweDEwMTA2ZDExLAorCTB4ODBhMTc1MTUsIDB4NjM2YTczNWIsIDB4OGRjNDI5MzcsIDB4OTEwMTUwYjcsIDB4ZjM5ZmE4YWMsIDB4YTk2ZjBkYjEsCisJMHg5NjJhMjY5NSwgMHg4ZGE2YjY3NSwgMHhiMjcwNzU5NSwgMHhkOTliMWI0NiwgMHgwZjVkOWE2YSwgMHgzOWQzOGQzYSwKKwkweDMyY2RiNjUzLCAweDM0ZDIwOWJiLCAweDk5ZDM3ZDlmLCAweGRlNzllN2JlLCAweDBkYWY2MGI1LCAweGY5YTY3NWE0LAorCTB4M2VmY2VmY2UsIDB4N2RmNWUzZmMsIDB4ZWU3ZDdiZDcsIDB4NzY1ZWYzY2YsIDB4YjI0YzYzMjIsIDB4OTg3ODM2MzEsCisJMHg4YzgxYjE4MywgMHg0NTkzMTgxOSwgMHg3N2ExM2ZjOCwgMHg2MzAyZWRmYiwgMHhiZWFjNzE5NSwgMHgyOGQyMTMyZCwKKwkweDBiNmJmZjU2LCAweGRmZTNkZjYzLCAweGEyNzQ5ZWY4LCAweDhmMmM2NDUzLCAweDVkYTBkYmIxLCAweDEwYWY3YzFiLAorCTB4ZDZjY2FiZDksIDB4MjlkMzNkZjMsIDB4MTQ4YWY3ZDAsIDB4ZDQxZGQzMzYsIDB4N2VjM2ZiMWUsIDB4MTNlZmQ1ZTMsCisJMHgzMzhiNjlmYywgMHhlM2FiZWE3YiwgMHhiYjc4ZDg1NiwgMHg5YTdlZDBhOSwgMHhkZDhiZWIwNSwgMHgzZWE4MWJmNSwKKwkweDI2ZTliM2NmLCAweDM2MzJjNTkxLCAweDg3ZmYwNGRiLCAweDdiNDg5NGE1LCAweDMyZTZjNDU2LCAweDcwNTdiMGQ2LAorCTB4ZTFhOGExMWEsIDB4MThiMTg5NDEsIDB4ZjA4YjlmNDgsIDB4YmVjNjY0YjEsIDB4M2JjZGY4NjgsIDB4Y2ZiZDQwYjcsCisJMHg2NGFmNmYzNywgMHgzNWU2N2I0MywgMHgzOThhM2ZjNywgMHhmNzM2MzA0NiwgMHgwYzczMzY1MiwgMHhhNWRlNmM2MCwKKwkweDBmNTY5NDMxLCAweDA3Mzg2NGYzLCAweGY4ZGJkNTA2LCAweGM2MDdiYTVjLCAweGZiMmRhZGJmLCAweDVhMzA3ZmRjLAorCTB4MzBlNTlmYjcsIDB4YmY3M2ZlZjYsIDB4ZTg2OGUzZmQsIDB4ZGU5ZjMxOTcsIDB4M2FjZjRkN2QsIDB4YTEzZWFkNjYsCisJMHhjMzA0YjJhZiwgMHg0ZDczYWY4ZCwgMHg4MzE1NTc0NiwgMHgxOGI2Y2U3OSwgMHhjZDE0MTIxYywgMHg2NGM1NWU1ZSwKKwkweDMzYjMyNzk4LCAweDEzZTQxYTY3LCAweDQyMmJjYzc1LCAweDE2ZmQ2Y2JmLCAweGYzZWIwNGQ5LCAweGI1NTdmZTMwLAorCTB4NWRhOTkwNWMsIDB4ODI0ZmJlNjMsIDB4N2E4NjBjZjUsIDB4ZGY1ZTFjYzYsIDB4NThmN2YwMGMsIDB4NDg4NDY3MGMsCisJMHg5MTJkZThhOCwgMHhjZGJjMTkwMywgMHhmODNkMjlmNywgMHgyMWE5MGMxZCwgMHg4OWVmMDdhNywgMHg1ZWNjMWQwYSwKKwkweDdiNmQwNjU3LCAweDMzMDMwNWYwLCAweDY1ZWIwZjk2LCAweGZjZWFhZTFjLCAweGJmZjMyYWE3LCAweGZiMjBiZDZkLAorCTB4NGUwZGRlYTAsIDB4Mjc1N2NmMDcsIDB4N2FjMWU2MWIsIDB4MzY0ZmFjZTcsIDB4NWNiNDg2Y2MsIDB4NDczZTVlZjksCisJMHgyZjhkZGU1YiwgMHhjY2FmOGFhYiwgMHg0ZjU4NzY5NSwgMHg1N2M3MWI1NywgMHhlMTNkM2FkNywgMHgyZjRmNmJhYiwKKwkweGE5MzEyNTdjLCAweDAwNzcxZTY3LCAweDhlMDBkOGJlLCAweGUzODIzNjJmLCAweDU3YzA1MzBiLCAweGE4MmYzM2E1LAorCTB4N2M3MGJmZGUsIDB4ZWRmZTdlY2QsIDB4ZDA3NjVlMGYsIDB4Y2VmZmE4ZmEsIDB4MWRiZThkMDcsIDB4YjZhY2ZmZDAsCisJMHhmMmI3ODRiZCwgMHhjOWY0MWJkNSwgMHg5OWNlYWY1MCwgMHhkYjUxNzA0YywgMHhiNmNmYWVjZiwgMHg2ZGU3ODAzMiwKKwkweDFkZWJiN2FiLCAweGU4ZWVmYzE2LCAweDk1MjFlZTkzLCAweDQxM2YxMDU5LCAweDY3OTAwOTllLCAweDNiYmM0MGJhLAorCTB4Mzk3ZWE3YTIsIDB4OWM2MTdiYTQsIDB4OTFjZDhiMjUsIDB4NzE5ZWRhZWMsIDB4M2NmNDI4YjYsIDB4ODZkYTNlYmIsCisJMHhhZmFlY2RlMywgMHg3MTY1ODg3YSwgMHhmNjY3NzdmYSwgMHg2NmIzYmZlNiwgMHhhMGIzMTdjZSwgMHhiM2NmZTQzZiwKKwkweGU0MjRjZTQ1LCAweGQ0NTEwYThiLCAweDNlOWE5YmYwLCAweDc5ODM3ODg0LCAweDM1ZTAwNjNkLCAweGRiYzNmZTIzLAorCTB4MGMzODQ2OWUsIDB4NmNlNjE0NWUsIDB4YTlhOTRmODYsIDB4OGI4ZTFmMDEsIDB4MzZmMzhjZjQsIDB4ODI2YmNjODgsCisJMHg4MTM1YTk3YSwgMHg1NDhmMzg4YiwgMHg4NzZjMjhhMCwgMHg1MjhkODQ2OSwgMHgxZGY5MGIxNiwgMHg0ODAyZWQzMCwKKwkweGVlOWUyNDUzLCAweGMzZjVmMjczLCAweDY3N2UzZjc3LCAweDVjM2M4MTMxLCAweGExY2Y0YWJmLCAweDNiNjA2YWY0LAorCTB4ZmUwMGE3NTcsIDB4ZDljYzMxMGQsIDB4NGZhMWU4ZWMsIDB4M2U5NTFmYjUsIDB4NmZlZGZhNTUsIDB4NzBhZTdiN2QsCisJMHgzOTkzNjc3ZCwgMHgzMzg2NTkzYywgMHg1NmUzMDRjOSwgMHhiOWNjM2MzZSwgMHgzYWZjYjg0NiwgMHgwZjAwNjEwZCwKKwkweDgxN2FkMDViLCAweDdkNmMwYjU4LCAweDkwMzUzN2FjLCAweDBmY2Q3NjU3LCAweDI0YTViN2FkLCAweDg2ZjU4ZmI2LAorCTB4OTNlNTUzYWUsIDB4YzNjZTI2MzksIDB4MDE1MTI3YzAsIDB4ZmFkNzc3OTgsIDB4ZjEwYzUxYTEsIDB4Y2EyZjMwMmQsCisJMHhjZDhiYjM5ZCwgMHg1ZDViY2UyMiwgMHg1MDRkNTNkNywgMHhiYmI2ZTYxOSwgMHgzM2U5NDRjOSwgMHhjMzY4YzA0ZCwKKwkweDc2NGQzZTAwLCAweGU0ZGYzZmNhLCAweDI5YWRiNGEwLCAweDlkZGJjYTgzLCAweDYzM2Y5YTM2LCAweDgwNjk4ODgxLAorCTB4ODUzMDhhYTcsIDB4OGYzY2ZkZmYsIDB4ZTU0MTY1ZTUsIDB4ZWU5YzZkNTMsIDB4MTEwMzViNGUsIDB4ZmQzOTIwYjYsCisJMHgwZDc5YmQ3MSwgMHgwZWZhNDI4YiwgMHhjY2ZjODgzYywgMHg1ZGIyODcxYSwgMHhmNWU5ZDQzMCwgMHg0Y2M0MjM2NywKKwkweDNmM2U0ZmE0LCAweDdkMTJkZGI1LCAweDE2M2ZjOTI3LCAweDAyZWM3MDYxLCAweDI0YjE5Yjk2LCAweGUwMjM3NGZiLAorCTB4MzhmMmVlNmIsIDB4OWIxMjkwMjcsIDB4ZTQ5NDM4ZDEsIDB4YjQ2ZjBjYzIsIDB4N2ViMDAwOTMsIDB4Y2M3ODQzMGIsCisJMHhmODYwZTQ1MywgMHgyMzk1YWE5MiwgMHhiMjZiN2ViMSwgMHhlNjcxODA1NSwgMHg1YWU3OWM1YSwgMHhjZWQ1ZmRhOSwKKwkweDRiN2JmMWZiLCAweDkzMjUyMTk5LCAweDkwMjZjYWFhLCAweDcyMjg3NzYzLCAweGRjYzA4OTZjLCAweGEwNzc4N2M4LAorCTB4MTJmZTQ0OWMsIDB4ZmVhMmE1MGYsIDB4ZjA1NWEzYjksIDB4NTZjZjI5MWIsIDB4MjFkNzAwMGIsIDB4NzhkMmVlY2QsCisJMHgwNTViMTM5NCwgMHhiYjZjMGVlNywgMHhhOWE5ZTQwZCwgMHgwZDc2OWU0NywgMHg3YTgxN2Y3MywgMHhmNDA3N2Q4MSwKKwkweDI1NWZmZDA3LCAweDVkNzEwMjIwLCAweGNhMWM3MjZkLCAweDc1ODI0ZGYxLCAweGI5NzljMzE3LCAweDA1OWYwODBkLAorCTB4NmU5YzlkMGEsIDB4YzhlMTEzMzksIDB4YTNlYjgxZWMsIDB4NjUxMDVmZjgsIDB4Mjg4YjIzY2MsIDB4M2QxNDFiNmYsCisJMHg3OTQwNjQ4NiwgMHgzMTBlNGU0NSwgMHhjYTQxZjg3MCwgMHgzYTNmMTFkYSwgMHhhMGU5MDlhNywgMHhjNTEyOTJjYiwKKwkweDg4NmYyOGZhLCAweGYyYzM4OTQ4LCAweGM5MTJhZDM5LCAweGFhOWU5NTQ1LCAweDdjMjgzNWQ1LCAweGEzYmUxNzMzLAorCTB4MmE5MTJiZGUsIDB4NTZiZTkxNjIsIDB4NzRhNDRjYjYsIDB4Y2Q5Mjg2Y2UsIDB4MjRlM2EwNWUsIDB4OWEzYjFkYzEsCisJMHhiODY3YTNkNiwgMHgxM2I1Mzk5ZSwgMHg1NWJjNDdhZiwgMHg5YjQ2MzBlZiwgMHg3YTQ5NmYwMCwgMHgxMDRlNTI2ZiwKKwkweGJlZDljZTNmLCAweGJiNDE4OTJhLCAweGQzY2RkYmYzLCAweDViMTdmZTUxLCAweGExYTM4YWNiLCAweGQxNmRiY2ZkLAorCTB4MWU5MDUyZDksIDB4N2FlNmNhNDksIDB4YzRlZDQxNjQsIDB4YWNmMDA2MzgsIDB4Mjc5MWZiZjksIDB4ZTc4ZmEwYWMsCisJMHhlODU2OWY0MiwgMHg3MGI2OWJmZiwgMHhkNGFhMTc5ZiwgMHg5MjRmZWQzNCwgMHgzMWRlZTc4MCwgMHhhMWIzZTI3OSwKKwkweGUwZjE0MmZlLCAweDFmNTBhMzJkLCAweGUyYTdiZTA4LCAweGNlMjNiZWE5LCAweDUwM2M4N2RhLCAweDBmYzA3M2QzLAorCTB4ZGFmN2EwMGUsIDB4ZjUxZWY1ZmYsIDB4ZDZmODk1ZjMsIDB4YmVkMGU1ZjUsIDB4NDg4NWY2YTYsIDB4YTZlMTY3ZWMsCisJMHhhMTViZTQzZiwgMHg0OWU4YTBmYywgMHgxNzNmZmVjMywgMHg0NTY1M2ZiNiwgMHg5ZWRkNmMwMiwgMHhlZTdjN2E4NSwKKwkweDRmMjhiNGE2LCAweGY5MTdmMjFmLCAweGJkNTFmMTAwLCAweGFhZjgyMDVmLCAweDUxN2MzM2U1LCAweGM3YmI4NDA2LAorCTB4NGM1NjBjY2YsIDB4ZjQ4MGNjYWQsIDB4OGQ2MjVlN2UsIDB4ZjZhODBmNjgsIDB4MzIzZTVhOGMsIDB4ZjNhZGNiOWIsCisJMHg5MDkzZWI1MSwgMHhiNTNmZTY0ZSwgMHhjY2Y1MDkyNSwgMHg1ZjNjMTE2NywgMHg2ZmFkZDRmMSwgMHhlY2YyZGNhMCwKKwkweGFmMTAxYTM0LCAweDM4MzMxZDFlLCAweDQxNzk5ZjUxLCAweDU1MWQyMmJmLCAweDkzYzZmZjAzLCAweDA0YWU2MWRkLAorCTB4MGVjYTJhN2EsIDB4NmZjZWI4MjcsIDB4NTFmYTQxMWQsIDB4YTc3YzE3OWQsIDB4Y2M3NGNmZjIsIDB4ZDIxOGYzODUsCisJMHg3NDhkOTlkYywgMHg3ZjlkNjdmZiwgMHhjZmYzZTIyZSwgMHgxN2E3NjZmNSwgMHhmNWNkOTlmMSwgMHg0YmQ3OWZkYiwKKwkweDA1ZWU1OGE1LCAweGU0N2I0MTg2LCAweDg4NWZlYmNmLCAweGQ4ZjRiNTQ4LCAweGZiZDIyNTZmLCAweGQ2NzY4NGIyLAorCTB4ZWEzNjQyOGIsIDB4NzZjY2YwZWQsIDB4MWJiMjJjYzMsIDB4OWQ1OWQxMTgsIDB4YzM1OWQzOTUsIDB4ZTBlOTdkMDEsCisJMHhhOGM3YjIxOCwgMHgzN2U3NDZhNCwgMHgwNWFmODVmNCwgMHg5ZGQ1YmQ4YSwgMHg4MGQ3YjdkZiwgMHg4N2IzNTI3YywKKwkweDZkMzUxMWRiLCAweDUwOGVjODY3LCAweDg1NWE5MmVkLCAweDM5ZWUxNzlmLCAweGRhODU3NjQzLCAweDg3MWY2ZWFlLAorCTB4NWUzZWVkNGIsIDB4YzgwMTk1NWUsIDB4ODBlNWNkMWQsIDB4MGFiYTQyMDAsIDB4ZmJmOTA1ZjEsIDB4ZDNkN2Y1ZmUsCisJMHg3YmYyNjk5NywgMHhiNWRmN2YyOSwgMHg3NTBmMmU1NiwgMHhiN2E4NDk5ZCwgMHgzNDljNjRkNiwgMHg5NzZiZmUyMCwKKwkweDVlNDJmZDJiLCAweGJjZGUzNDFmLCAweDJmMDQ4MWVjLCAweGMxNmExZjJjLCAweGZkOGQwZWY2LCAweDlhMmZiYjUwLAorCTB4YzM2YmZiZGEsIDB4OTdiZWEzNTYsIDB4NGMzYTJjZWIsIDB4YTQyZDZiOWIsIDB4OGJkNWI3ZmYsIDB4OWM1Y2JhMTksCisJMHhlZDEzOTg1YywgMHg5MTYxODNiOSwgMHgwNzQ3Mjg1OSwgMHgwNjY1M2MyZSwgMHgzYjZhMDI0OCwgMHhiZTUwODg4ZiwKKwkweDJmNzNjYTNhLCAweDAzMWM2N2QyLCAweDZmNTA5MGFlLCAweDVmYjQwNWY4LCAweDc0Zjk1ZTNiLCAweDZlM2ZmNjA0LAorCTB4MDY2YmUwNDgsIDB4YmYwYmQ3NTMsIDB4ZjIwYzVlOWIsIDB4MmQ5ODE5NjQsIDB4MDY2NzFmNjQsIDB4MGYxZDIwNDYsCisJMHhmNGU1Y2MzYywgMHgxYWI2N2FlMywgMHhiOWQzMWJmNSwgMHhmNzI4MzRkOSwgMHgzYzQyZGNhMywgMHhkYmU2MWI3ZiwKKwkweDFkZmZmZjA1LCAweGZlYzYwZmYzLCAweDE0M2ZjOTk5LCAweGQwYTRiZGRiLCAweDU5NjhkYmE3LCAweGFlYmNjMDJkLAorCTB4ODM1OWVhMWUsIDB4ZDA0MWJlNGIsIDB4MjIyZDkzNWYsIDB4YWMzNGE0MGUsIDB4ZGZlN2ExZDcsIDB4ODI3NTdiNTUsCisJMHhjMTEzYTcyMiwgMHhjOGJiNDA4ZSwgMHg0MTZlYzgzMCwgMHhmMzM2NmUzYSwgMHhjY2IyMDlmNSwgMHhmNzFlNjExYSwKKwkweDhkOWUxZTY3LCAweGE3NmQ3YTdhLCAweDlkNjExOTg5LCAweGM4YzMzYTEzLCAweGU0MWM0ZDdlLCAweDZjZDZiZDIyLAorCTB4MmRiZDIyNGUsIDB4MDJhYzc0MzgsIDB4MTRjZTFmZWEsIDB4Y2ZhYzNhZmQsIDB4Y2ZhYzNlNGMsIDB4YWU3NjIxNGMsCisJMHg5ZGIxOTY2OCwgMHg2ZmI1ZjA3MCwgMHg5NjBmYmU1MSwgMHg4Mjg5MWUyZSwgMHg0N2JlMGRmNSwgMHg5ZDQzMzY3MCwKKwkweDhmNzNhZWNhLCAweDE1YTQxYmZmLCAweGZkZWM3Njk3LCAweDJkZmY0ODU3LCAweGUxMTNiM2NhLCAweDc1Y2JiYTdhLAorCTB4NWJhODAzYzYsIDB4MzkzMzZkNmIsIDB4YzE2MGRlYjksIDB4ZWY3ODM4ZWIsIDB4YjEzNjkxYjcsIDB4OWQxZDdlNjcsCisJMHg0ZGZiOWVlNywgMHgyNzI2YTYyZSwgMHgwNzA5OWZlYSwgMHhhMTFmZDIyNSwgMHhjM2IwZTlmMywgMHgzZDUyODdjNCwKKwkweDJjM2IzYmIyLCAweGIwMTA0ZmEyLCAweDcwZjc5MWZlLCAweDE2NGMxMzdlLCAweGJhZjY4NGJmLCAweGIwNjVmZjQ5LAorCTB4YzQ4ZTYxN2UsIDB4OTM1NzczZTgsIDB4ODNkZjYxNGEsIDB4OTM4YjEwOTEsIDB4ZDE3NDdkNDcsIDB4MzhlYjc2NDIsCisJMHgzYTU1MGY4NSwgMHhkYjliMmI3YiwgMHg3MjI5NmY4ZiwgMHg3MzMzODU1NSwgMHhhZjU4MmNjOCwgMHhkNjZjZjBhOCwKKwkweDEwMjJmYWFiLCAweGY4N2IzMmNlLCAweGFmNTI5MTc2LCAweDkzMjg5MmViLCAweGY0NmQ1ZTFkLCAweGViYjJlODMxLAorCTB4MzNkMjUwZTAsIDB4M2ZkOWM5ZmQsIDB4ZjYwMWRkYTAsIDB4Zjk1NGYyYzQsIDB4NTMyNzg0NWQsIDB4MGFjZGVlZjQsCisJMHgyZGZkNTRmYywgMHhhY2RmZmQyOSwgMHg4YjY2ZjFjMCwgMHg1Mzc2ZTFjOCwgMHg3YTE0ZGMwOCwgMHgxZTk3YTUwYSwKKwkweGRiNDE4ODdhLCAweGVjY2YxYmEzLCAweDUxYTNmNmJlLCAweDZiZGY4NGM5LCAweGZkNzhlNjFlLCAweGVkZmFmMDkwLAorCTB4Y2Q4MDJiNWIsIDB4NGRiZmEwZDgsIDB4MGNmZWZjMjEsIDB4Yjk4YmY1NzgsIDB4ZWRhZjAyM2YsIDB4OWJmNTc4YTEsCisJMHgzNzVlMjE4NywgMHhhMDY3NjQ4OSwgMHhhMzc2ODgxZCwgMHhiNWMwZTUwNywgMHg2MGY2ZTc5NCwgMHg1MTM5MjMwNiwKKwkweGQ3Mzk4NTI5LCAweDgwNzdlMzI0LCAweDg3YzkxNjQzLCAweDU0MWYyOGEzLCAweDE1YzQzMGI5LCAweGU5ZjUwNmI4LAorCTB4NzFlNTcwNjksIDB4OGRiMTAxN2UsIDB4MTBhNGU3OTcsIDB4ZjZiMDI0NWQsIDB4YmMwNzJjNzgsIDB4Mjc3ZGExZTcsCisJMHg3ZTY2ODY5OSwgMHhlNWI3NzIwYywgMHhkZmRlZGYwMSwgMHg4MmNkM2Y0MCwgMHg5ODNjZWI2ZiwgMHg4YjY2Zjc4ZiwKKwkweDBlYjdlZDEzLCAweGMzZDVlODlmLCAweDU5YTI1YTNjLCAweGJmMTg3ZWQ2LCAweDRlNTVmZTY1LCAweDQ1MzM5NjJmLAorCTB4ZjgzNzRjNmUsIDB4ZWY4MzdlZDAsIDB4YmRmODhkNDksIDB4ZTk3ZjdmOWMsIDB4NDQxZjY3ZWYsIDB4OGQzM2FjZmIsCisJMHhiMjVhYmFkMSwgMHg2N2RhM2E1OSwgMHhmNDE5NjUyZCwgMHhkY2FhYjdmZCwgMHhiNzgyMzA3OSwgMHhkZGY0ZTMyZiwKKwkweDQzZTZkZjMyLCAweGEzZThmNDNkLCAweDI3YThlMWJlLCAweGYxY2JiNjVhLCAweDUxMGQ0ODM2LCAweDk4MWNmODllLAorCTB4ZDM4OTIwZmYsIDB4OTQzMjRiN2QsIDB4NzA1OWJhNDMsIDB4N2VjNWNmOTcsIDB4MGRmM2UxYWUsIDB4ZmYzZDg3OTQsCisJMHg0ZTY1NzQxNCwgMHhlNTA2ZDEwNSwgMHg3NjIzMWJhNywgMHhlOTU1NWNhMCwgMHgyZTMwZjA3NCwgMHhjZjc4ODdkZiwKKwkweDc5Mzg0NTZjLCAweDdhOGNiMDI3LCAweDg1NDNmZmU4LCAweDBiZjg1NGRlLCAweDAwOGQzNmMwLCAweDNjMTA5OGY3LAorCTB4YTMxNzc0YTgsIDB4Y2E1ODVmYzAsIDB4NDEzYmNmZTksIDB4ZjMxZDRmNTksIDB4MDA5MWJmYTEsIDB4MzgwNzA5NTMsCisJMHhmMGMxMWE1NywgMHhkNTk2NzQ4MywgMHg2ZmYzOGQ5MywgMHg5MWY4MGM1ZSwgMHgwZjFjMWQ3MCwgMHhkZDU2NDVhNywKKwkweDE1NWYwN2Q2LCAweDBkZjEyOGU2LCAweGE2ZjkwMjE4LCAweGE5YmU3MTkyLCAweDdhNDJiYTQ0LCAweDBhYmEwNDZjLAorCTB4NDgxNjQ3YTIsIDB4YWUxNzNlODgsIDB4ODNjYTE1ZDAsIDB4MWNiOGY3MDgsIDB4YzI1N2U3NTgsIDB4ZjBiMWYyMWYsCisJMHhhNjk0ZmZhZCwgMHhhNGNlMzVmNywgMHgxZTJmMmUxYywgMHg3MzRhN2IzMywgMHhkMDRkZWY0OCwgMHg2NTZmOWRkOCwKKwkweGZhODg5YTdmLCAweGFmYmRmNGU1LCAweDE0OWE2MDI1LCAweGViOGM5ZWU1LCAweGQ3ZmU1Y2Q4LCAweDFmZmYxNDUyLAorCTB4YjhmNDA3YzYsIDB4ZmZjYjBmOGUsIDB4MmRkYTIyNGYsIDB4MjM1ZjRiOTUsIDB4NzlkMmJmZmEsIDB4Mzc5ODk5OTYsCisJMHg1ZDFlZTAxYywgMHgwMGZkMzgyYywgMHg0NjJkNzliZiwgMHgxNmY4MjRlNywgMHgwYzc1NWM1NywgMHg2YWQ2NTllMSwKKwkweDU2OTExODc0LCAweDFjOGQ2MmQ4LCAweDQwOGYyYjNiLCAweGRhMWQ4YTM3LCAweDM5YmEyNDZhLCAweGY0ODk0YmY3LAorCTB4OGI5MmI5YzEsIDB4MGY4MDBlYWYsIDB4NGUwODU2ZTcsIDB4MzJkNjU3YWMsIDB4Mzc5MDI1NmMsIDB4YTgxNjI5MmIsCisJMHhhMDU3OTk1ZSwgMHgxY2E5NjU3YSwgMHgwNTFhMjc1ZiwgMHhhZjQwMzdhMiwgMHhkZTI4M2IyNSwgMHg4ZWY1YTczMSwKKwkweDEzZGY4OGE5LCAweGE0MGY1ZmM1LCAweDE4N2FjMWY4LCAweDJlNjNlNTQ3LCAweDk1OWU0OGRlLCAweDU2YWJmNTI5LAorCTB4YmI0NzkxMWIsIDB4YWNiNTk3YmYsIDB4M2ZmYzg4YmEsIDB4ZGU1MjFiZDMsIDB4ZWM1M2U5M2EsIDB4NWI1MWFjYjcsCisJMHg4MjM1YzZlZSwgMHg0ZTU3NzcxZCwgMHgwN2NhMGM0NCwgMHhlZmNlNjRlNiwgMHg0MGYyNDgxMSwgMHg5M2ZhMGZmMiwKKwkweDQ0NzE0MGJiLCAweGMyMGYzMGNmLCAweDYxYmM4OWMzLCAweDk5ZWJhNDdhLCAweGRiYTA1NzA4LCAweGRkN2NhNWU4LAorCTB4YmUwYWE3MzMsIDB4OTljZWIwNDksIDB4MWY2N2NlMTYsIDB4ZmJiZTA5OTYsIDB4MDlmZjNlMDUsIDB4NTA2NWVmNDAsCisJMHg1ZDc0MGIxZSwgMHgzOGU0YzMxNiwgMHhlNjI2ZGQ0OCwgMHgyZTc5YzcwZiwgMHhjYTA5ZjYxZCwgMHhkNDM4ZDNkYiwKKwkweDhmZWZhYTI4LCAweGY3NWNhMWI0LCAweGI3ODkxMWU4LCAweGU1YTUyZjMyLCAweGVkZTk0N2NjLCAweDk4ZjM0ZmNjLAorCTB4NzQ5MzNhYzEsIDB4ZmM5M2FmOTAsIDB4ZjM4ZTMxMmIsIDB4MDM2N2IzMmIsIDB4OGI1ZmQ3ZDIsIDB4ZTAxNjljNGUsCisJMHg0MjM5ZGRmYiwgMHg0Mzk0MjhkZSwgMHhkZDY4MDM4ZCwgMHg3MDFmNWI5NywgMHgwNjc2ODBhNSwgMHg1ZmFjNDFhYSwKKwkweDE0N2VlMzk2LCAweDRjY2FiM2ZiLCAweDc0YWI3MThmLCAweDk5NWE4ZTk1LCAweDE3ZDYxNTM3LCAweDliZTJkZWJiLAorCTB4NmI4YmViMDQsIDB4ZjVjMjFjZjUsIDB4MzgzNzRmYTYsIDB4MTM4M2VmMTAsIDB4NzQxMzNhZjgsIDB4NTQzZjlmZGMsCisJMHg4MWEzNjA2ZSwgMHgxODNmMzYwZSwgMHhkYjNhNDNlNiwgMHhkYTIwMzViYywgMHgwM2U2ZmVhMSwgMHg5N2NjMDE4MCwKKwkweGYwYmMxNGFmLCAweDRlNjFlYWRkLCAweDc1NTlkMzhjLCAweGZlZWQxMTFlLCAweDE4OGY1NmEyLCAweGUxYTdlMjA4LAorCTB4Mzk0NDQxYjIsIDB4MjNkM2JlOTEsIDB4NWFiNDllYTIsIDB4MzUzZDUzZDcsIDB4NGZkNGFjNWYsIDB4NTkwNjc5MzcsCisJMHg0ZTllNGVjOSwgMHhhMTVjMzNmNCwgMHhkNDlmYjUxZiwgMHgwNDVmODM1NiwgMHg0YWM5MTdiOCwgMHg1N2I3OTk3ZCwKKwkweDllOGE2MWZiLCAweDM5NjFkYjU2LCAweGFiN2E2N2QyLCAweDQ1M2Y0ZmEzLCAweDNmNTA1YjRkLCAweDA4Zjg4ZjgzLAorCTB4N2JkMjA1YzYsIDB4ZmQ3MTFmY2EsIDB4MWJmMDg0ZGEsIDB4MzZhYmYzNzgsIDB4MjEwMzM3NGMsIDB4OWQxYzcxZjgsCisJMHg3OWUzNGNjNywgMHgxNWQzM2NmOCwgMHhiZmJmODdkYSwgMHg2M2UzOGY3ZiwgMHhiOWJiZjAxZSwgMHhlNDIyZmVmNSwKKwkweDFmMDBjZGEzLCAweDlkZTZmM2M0LCAweGNmZDRjY2IzLCAweDc5OWE1OWY0LCAweGYyODZhOTMxLCAweDRiMDcwODI1LAorCTB4YTIzYzc1ZWYsIDB4ZDUzZDJmY2MsIDB4YmQ2OTVhMjMsIDB4ZTc2ODQzY2UsIDB4ZTI4Y2NiYTUsIDB4NzYzZjZhMDEsCisJMHhmNDA1NzQxZCwgMHg4NTdhNzc2YSwgMHg5MGNiY2M3YSwgMHg0N2I4OTQ1YSwgMHg0ZWIzOGUzYSwgMHg1ZDMxZmY0MCwKKwkweDZiNDk1N2MxLCAweGY2MzM2MWZkLCAweDVmMTQ2NmUzLCAweGZlODVjZjRjLCAweDg0MjZmZWExLCAweGZjMzdhMTgzLAorCTB4NWU5OWU3NDIsIDB4NDI3M2U3Y2MsIDB4ZjE4ZWRmYTksIDB4ZTc2Yzc0OTQsIDB4NzQ0MzExNTgsIDB4ZDVkN2U3YzUsCisJMHgxYzYyMTRlYSwgMHhhMDhmYjE5NywgMHg3ZTkwYzlmZCwgMHgwY2I4YzI5ZSwgMHg3ZTRlY2ZhNCwgMHhiNDJlNGE2ZCwKKwkweDk3ZDFmZTdmLCAweDUyZDBiNDc2LCAweDBmYjMzZTBlLCAweGY1YWI1NmU1LCAweDljNzA5YmU2LCAweGZmOWYyMjgzLAorCTB4NWRlMjcyNGQsIDB4MjA2ZGRmOTgsIDB4NTNiZTlhM2QsIDB4Nzk0NGRiNGUsIDB4ZWJmZDEzOTMsIDB4NTVkZjU2YWUsCisJMHgyY2JkNDIyZiwgMHhlYjY0YzYxOCwgMHgwYTEzOGYzZCwgMHgzYTE1ZGE5YywgMHhjYjc5MzkzOCwgMHg1M2VmNWMyMCwKKwkweDU4MmM3NzQ1LCAweDVmODdlZDAyLCAweDNiOGQzOGY3LCAweDk0ZmNjYTdjLCAweDliMGZjODE2LCAweDMwYWJjYmY4LAorCTB4Yzc4ZTVmN2YsIDB4ZmVlNDAyM2MsIDB4ZGU1ZmQyYjAsIDB4NmFlNTBmYjYsIDB4ODIxY2ZjZTksIDB4NDU3NmM1OTcsCisJMHhkYTM5YTlmMiwgMHhiZjAyZjVlMywgMHg1MmRjNDczNywgMHhkMmI4ZmM4ZSwgMHgyNDQ4NzA2NiwgMHhmYTE5ZWI3NywKKwkweDc3MTFjZDU5LCAweGU1YmZiMWRiLCAweDRjMjZmOWQxLCAweDM2YmZkNjBkLCAweDZlM2M5Y2ExLCAweDFlMjEzMWM5LAorCTB4MTgxMzJkOWEsIDB4MGFhY2ViOTYsIDB4NGYxYmJlOWUsIDB4ODg1MjQwZmEsIDB4NzM4NDc3NzIsIDB4ZTU3NDRjYmEsCisJMHgwYzI3Mjg2NCwgMHhiY2FkMDYwOSwgMHgyZjc5NzFkNiwgMHhiNDNlMWRkOSwgMHhmNWFjYmE5ZiwgMHg2MGNjODE0OCwKKwkweDdjYTA1NDA5LCAweDY5Nzk1NDkzLCAweDNjNzE3YTcxLCAweGEzYjRlMmM5LCAweDkxNDJiNGJmLCAweGFmODYyYzM3LAorCTB4ZjczOTYwZDMsIDB4NWVhZjM4OWYsIDB4OTYyZTYzZmQsIDB4ODY3ZjRiNTAsIDB4NDEyOGNjYjAsIDB4OWJkYTNmZjksCisJMHg1NzNlMTBjNiwgMHhiYmM1ODM1MywgMHg2ODQ0ZjUxOCwgMHg3MDIwNWQ3ZiwgMHg0ZmEzOGU1MCwgMHg3ZTMzNzY0NywKKwkweDVlZGRlZTQ4LCAweDdhMzQxYmIyLCAweDdhNWU1YmE0LCAweGYyMjFmNWEyLCAweDdhODExZTUyLCAweDc5MjA1OGEyLAorCTB4MGNlYjYxZTksIDB4MGMxMmZlYjgsIDB4M2M1YzAwYjIsIDB4NTQ1ZWI4ZGIsIDB4Y2UyNjdiZjksIDB4NDllNWYwMDUsCisJMHg1ZTVjOTE2NSwgMHgyNjczZTRlOSwgMHhkMWVmYzYwZSwgMHg0NTJhNWNhZSwgMHg1ZTAyMWUyMiwgMHhjM2U5ZTBjOSwKKwkweDkzNzhmNzlmLCAweDlkMWU1MDdmLCAweGE5ODdmYTQxLCAweDIxZmU5MDA3LCAweDBmZTE0NGZkLCAweDZmMDc4YThmLAorCTB4NTBhM2Y1ZDksIDB4ZDkxMmNiNWYsIDB4ODVjYjk1MDMsIDB4ZTJjZmI0MzYsIDB4Njk0N2QxYmMsIDB4MmVkY2M1YmUsCisJMHhhNmJmOTc2OCwgMHg4OTJhMWNmNSwgMHg3OTc5NDQ0YiwgMHhjNzk5ZDk2MiwgMHhiZWJkNDFlZiwgMHhmZmY0OWMyOSwKKwkweDU2NjdhNWE0LCAweGE2NmUzYzYwLCAweDIxMWE3MDU3LCAweDdkMWE1OWVmLCAweDZmOTg3YmY3LCAweDkwNWQzYTM0LAorCTB4ODFmMGFiM2YsIDB4OTE0NTk3ZmIsIDB4YjgwODRmNjgsIDB4NzU5ZThjY2UsIDB4ODMzMjE2NTYsIDB4ZjEzOWUyOWIsCisJMHgzYjQwOTYzMywgMHgzNGUwYTM0ZiwgMHhhMWUwN2EzYiwgMHhlZjUyN2FjNywgMHgzN2JjMDVmNSwgMHhmYWQwZmU0NiwKKwkweGE4ZDdiYzNmLCAweDNlNzc1OWM4LCAweGM2YTJkOWNhLCAweDcwMGE4N2U0LCAweDdjZjVlYjVkLCAweGQ3ZDE4ZDllLAorCTB4MzkyN2RlNTMsIDB4MWNiOTc2MzksIDB4M2ZkOGE5OWUsIDB4NTdiM2E1OWUsIDB4YzBmN2MzYzYsIDB4Y2VmOTQxNmEsCisJMHhjOGE5NTZmMSwgMHg4OGUzNDBlNSwgMHgwZDNmMTg2MywgMHgzZTQ4MTcyYywgMHhhMjUyYmM3OSwgMHg1Y2NkZGExZiwKKwkweGVmNzg0ZDllLCAweDVkOTAwYTI4LCAweGI0M2RlNWQ4LCAweDcyMmI1YTkyLCAweDM2NzRhM2RlLCAweDk0NTg4YzE3LAorCTB4ZTNkZmE3NmYsIDB4ZmU0NzlmZmUsIDB4OWJiNjI1NjMsIDB4ODNiNWEyZDMsIDB4MGNmZDAyMjYsIDB4NjdiY2I4NDAsCisJMHhmMWU5ZmQyNiwgMHhlZmJhZDE5NiwgMHhlYTY5NDVmMCwgMHhkMzhlYWQ1NSwgMHg4YmFiM2RlNCwgMHhlN2IwYzdhZSwKKwkweDUyMjc3YmFjLCAweDM5OTJhZjNjLCAweDJhZGU5MTIyLCAweGMxMzc2ZTY1LCAweGU2MWIyNTlmLCAweDRmOWQ1NzMzLAorCTB4MmFjN2I3MzEsIDB4YTI3ZWMxOGIsIDB4YjA3YjVhZWYsIDB4MzM4OWZlYzcsIDB4NzhhOGRmMjAsIDB4M2ExM2YxNTQsCisJMHgxOTc2NWVlZiwgMHhhY2QwNzZlMywgMHhkZDdhZGE3NSwgMHgxNjMwMTA3NiwgMHhlNWNhYmE4YSwgMHgzMmJmNzZkYSwKKwkweGI5NDU5ZmJiLCAweGUwMzhkZWU4LCAweGFlYWJmMjFiLCAweDgwODIxZTUwLCAweDI2NmU3ZjIxLCAweGE2MWY3MWUzLAorCTB4Y2VkNTQzZTgsIDB4NTE3YTU5MmYsIDB4NjY2ODcyOGYsIDB4YzIzZDQ1ZTMsIDB4MWZkMmU2NzMsIDB4Mzg1ZmE3ZTYsCisJMHhhMWJlZjNiNSwgMHgzZWJiNGEyMCwgMHhiZjkzNGUzOSwgMHg1MzQ0MzVkMSwgMHgzMGY3NjZmZiwgMHhhNzViZjdjZCwKKwkweDVlZjlhYjVmLCAweGM5YTkxOWVlLCAweDVlM2Q1ZWRmLCAweGZkNDY3ZjUzLCAweDdhMWNhZDI0LCAweGEzZDY5YTM3LAorCTB4NzliZmE3ZTIsIDB4YTNlOGE1YmYsIDB4MTJlYzQyNzcsIDB4ZTIzYTlkMzUsIDB4YmY5MTEzM2YsIDB4ZTQ2NzJjM2YsCisJMHgzMzc4N2NiZiwgMHgxZDMxZjhkMywgMHhlNzgyMjQyMywgMHhmOTNkNWM4MCwgMHhjOGU1ZjczMSwgMHhiZjIwOGZlZiwKKwkweGExZjQ0ZmM5LCAweDczNDNmM2MyLCAweGEyMjhjOWExLCAweDdlZTQ2MjdmLCAweDcyNWZhODc5LCAweDVlNTAzOTkwLAorCTB4ZmRiMWQ0Y2UsIDB4ZmY4ZjU0NDIsIDB4OWNmMzBlNjcsIDB4ZTNiYWZlYzcsIDB4ZjEwZjRiMGQsIDB4MWY4ODQzNzgsCisJMHhmZjc4YTU3MywgMHhiZmNjMDY3MCwgMHg0ZDc5NzkwZiwgMHgxNmMzZjcyZSwgMHhmZmFmMzZlZSwgMHhiNThlMDgzOCwKKwkweGZjOWFkMTZkLCAweGViZjFmZGEyLCAweDNiZDYwZTNmLCAweGFlMWQwNDRiLCAweDkzZTE0NmIzLCAweDdkYTAxNjVhLAorCTB4YTBlOGJiNTIsIDB4NDBjNGVhZmUsIDB4NTgzYmU2MmMsIDB4ZjRiNDZjNjcsIDB4MGE4YjgzOGYsIDB4MjU4ZjgwMGYsCisJMHhhOWRlMjgzNywgMHgxOTNmYzNmYSwgMHg5ZTBhNDUzZSwgMHgxYTcwYjRjYiwgMHg5MGUzY2I5MywgMHgyOTEwOGY1ZiwKKwkweGM3MjM5Y2RkLCAweGYxMDNmZWU3LCAweGY0OWViNDFjLCAweGRjN2ZiY2RjLCAweGM4NDcyMjdhLCAweDlmOWYwODU5LAorCTB4ZTNkZmFmMWIsIDB4MTc5NDBmMWUsIDB4N2YwYjkwOGUsIDB4ZmU0Y2I4MjYsIDB4NDdhNWMyNDcsIDB4ZDgyZjQ3Y2YsCisJMHg3MmEzZmEwZCwgMHhmZGZiODE5ZCwgMHhiZjVjMzNkZSwgMHhmZWZkNzIzNywgMHhmNjhmYjQ3YywgMHg0NGYzOWI4NywKKwkweGVkMDcwZWU3LCAweGU5M2VkMjk3LCAweDYxOGQ3YmExLCAweDU5ZGYxODE5LCAweDc5N2QyM2ExLCAweDgxOTA5OTdhLAorCTB4MjEyNmMyZmUsIDB4MGYzNmZjOGMsIDB4YzgxNjQ4YWIsIDB4Yzg3OGI5YmUsIDB4YWEzMWZkNDgsIDB4M2FmZGVkMDcsCisJMHgwNTUxZjM5MCwgMHhlNDA5NmIzZSwgMHg3MWU1Y2NkZiwgMHg3MTZlMzViMSwgMHhmNTAzOGE0YSwgMHgxZWFjMWZmNiwKKwkweGUyN2E4YjhhLCAweGZkOWUxZTExLCAweDY5NmJlMTMwLCAweDJiZWU0NWRmLCAweDZiZDAxMjdlLCAweDg1MTJkMWU1LAorCTB4ZDVjYzVmOGYsIDB4MmUxZjNhZDEsIDB4OTQ5ZGI5MTQsIDB4MWY3MGJhMmEsIDB4YTlkODE1NjMsIDB4OTYwNjU3NjgsCisJMHg5MTVmMjhlYiwgMHg2ZDU5ZTljNywgMHg5ZDBhMWZmNywgMHgxNGRkOTRjNywgMHhkYTg4ZjM4NiwgMHg3ZDdkYmEyNCwKKwkweDJlNTFmYjhjLCAweDc5M2QwZjhmLCAweGIzZWQxODU3LCAweDY4NzQyYTAxLCAweGQ2YmRkYmVmLCAweGFmNTgyZTY5LAorCTB4OGQ5NmQwYmQsIDB4ZGNkYWRmYjYsIDB4NGQ2ZmVhNjgsIDB4Y2YxNTk3NDYsIDB4NzQ4Y2ZjYTEsIDB4ZmU4ZWNhNzgsCisJMHg4Y2ZhYzBhMCwgMHhlNjU1Y2QzMywgMHg1ODBmZWVhYiwgMHhlOTM2ZmU5NCwgMHg5ZGEyYmY0MSwgMHgxZTI4OTgyMiwKKwkweGY5MWFmMTYxLCAweGIxNjcxNWY5LCAweDFjY2FkZTI2LCAweGE3NmUwYjAyLCAweGY0MjhmM2Q2LCAweDFiNDJjNzZhLAorCTB4ZWZmNjk3ZTEsIDB4NWRiMTc4ZDUsIDB4MWJhNDE3YTEsIDB4Y2Y0YWJiYzQsIDB4ODk4M2ZkYTEsIDB4ZTljYzhkZWMsCisJMHgxNWQ5ZjM4OSwgMHhlNTFhOGU1MiwgMHg4Zjc0OGRkOSwgMHgxZjkwZWFmZCwgMHgwN2ZlNWNiYywgMHhlM2M0YmU2ZSwKKwkweGRlZDdkZTJjLCAweGUxODg3OWMzLCAweDBjOWM1MjVmLCAweDVmY2U0YWVjLCAweGJlZTI0MzRiLCAweDAyNGY5MTNmLAorCTB4NDBjZjBlNjYsIDB4ZGUxZTU2ODQsIDB4ZGFjOWQwYWIsIDB4NDhkZTgyN2YsIDB4M2ViYzAyYmEsIDB4OGZlNWNiOWMsCisJMHgzNmZkYzBhYiwgMHhiMmM3M2JjYSwgMHhmYmEyMzBkNCwgMHg5NjI3MGIxZiwgMHg1MTM4NDU2MCwgMHgzODcyYmE1ZSwKKwkweDFmM2RmMzc5LCAweGNjNzQ5ZTEwLCAweDdmNzFiNDZmLCAweDcyZTFmOTBiLCAweDMxYzJhNDdjLCAweGJlOWU2NDQ5LAorCTB4M2M4OGYyZjQsIDB4Y2ExYmZiZTUsIDB4NmFiN2FlN2UsIDB4NjFkOTBmYzgsIDB4MDJjNTc3MjgsIDB4Y2MyY2QyYzYsCisJMHhmZmI2YmM2MSwgMHg4ZjljMGU3YSwgMHgzOTZhZTg4NSwgMHg5NmFlZTVkMiwgMHhjZmU0MzA5NCwgMHhjYWJjNjU2NCwKKwkweDBjYTdkMjliLCAweDIwNWZhMDc3LCAweDA0MGVkMDE4LCAweGUzYzBjM2JmLCAweDU3NGVkYzNmLCAweGI5NGY3YWU1LAorCTB4NzJjNDdlZDYsIDB4MWY4ZjY2NGYsIDB4ZWFmN2RhYTYsIDB4ODI5NzNjNzcsIDB4NTlmM2FhZTMsIDB4ZmQ2MWQ4YTUsCisJMHgxMjU1NzdjZCwgMHhkY2EyNzI0YiwgMHg4MDhmNzY1YSwgMHg1YWIxZGNmMCwgMHg3MTdkZjhkNCwgMHgwMzI1NjE1ZSwKKwkweDdmY2UzZTNmLCAweDhlZmQxM2FmLCAweGNkYWZiMDM4LCAweGY1NzVjZjI4LCAweDVlMDgzMzgyLCAweDBhODE3YjgxLAorCTB4Zjg4NzEzMzgsIDB4ZTI0ZmUwMmIsIDB4ODk2N2JkM2EsIDB4NTdjNzQyNWUsIDB4ODVhYmIxZDcsIDB4NWRlNzFiOGYsCisJMHg5ZjkwYzgyYywgMHhhMDJmNTE1NCwgMHg5OTU2YjdkZiwgMHhhMzA1NWM3ZiwgMHgzZTk5NjllZiwgMHg5ZTIxZTMwMSwKKwkweGUzOGE1NjE2LCAweDAzMzM1NjU1LCAweDMzMmFmNWM2LCAweGYyODY1Mzk5LCAweDc0NDNjNmNhLCAweDAyYjllZGRlLAorCTB4MjA2ZjI1MzksIDB4NGYzYTRmYzksIDB4YTRmMDJhZTMsIDB4NGQxZDAxZTcsIDB4NzY0MzI4NGQsIDB4ODY0YmI4NjcsCisJMHgxNjdmODlmMSwgMHg0Y2I1YTcxZCwgMHg1OWVmYTJmMCwgMHg4NDNjZTJkNCwgMHgxMWQwMDFmZSwgMHgyZDNjN2RjNSwKKwkweGU3NWYxYTAxLCAweDVkNzI3MWU1LCAweDgwZTljMThiLCAweDY1OGQ0ODc1LCAweDU1MjFmZmI0LCAweGQ0MzI5YzFiLAorCTB4ZGYyOWI2M2IsIDB4MmQ5NWYxOGYsIDB4MGRkZmRjOGQsIDB4ZDY3NDkzZjUsIDB4ZDFjM2Q3ZmEsIDB4OTkxMGFiNWYsCisJMHg3OTBhMDE0NCwgMHg1NjU5ZmEyYSwgMHgzMDU2MmU4NSwgMHhmN2VlM2I3NywgMHg0MWZlMTkzMywgMHhkY2E1NDhiYiwKKwkweDJhNmYzZDVhLCAweGQwZTUyMjY2LCAweDEzZGM4Mzc4LCAweDZiOWU0MDlmLCAweGQzYjI0MGRjLCAweDY3OGRhYTk0LAorCTB4YzkyYjJkNDgsIDB4N2Q2MjMzYWYsIDB4ODkwZmFjYTgsIDB4YTVkNTQ4NzcsIDB4YWM5NzE3MTQsIDB4ZjM1YmYyZGEsCisJMHg4ZTA4NjIyMiwgMHg5ZTFlM2M1OSwgMHg4ZDg4ZWY3MywgMHg3MjdjYzJiNywgMHgxZmUzNzk3ZiwgMHg0MTg3M2QzMCwKKwkweGZlNWI4MDMzLCAweDRjMDczYmIyLCAweGFjMTZmZjg3LCAweGE2MjM3OGQ4LCAweGU4Y2ViYzRmLCAweGUwOGZjMTljLAorCTB4ZmE4YzY2NTcsIDB4ZThmYWZjZjEsIDB4YjJhYmYyOTUsIDB4YjlkMDBmMjYsIDB4ZDI3ZGFmYzIsIDB4MDk0ZjFhYmYsCisJMHhmZTk1NGZlNSwgMHg0ZDRlZjk0MywgMHg3Zjg2NWVkNywgMHgxMjA1MjZkNywgMHhkZjRmMGY5MSwgMHhkYjAzMzIzYiwKKwkweDczZGUzNjU3LCAweDVmODhjN2M4LCAweDc3ZDAwNzA1LCAweDExNzE3N2E1LCAweDU2NjBiYTIzLCAweDVlNWJkMDk3LAorCTB4NDkwYjM3ODQsIDB4MWYzN2JmZWMsIDB4M2I3Yzg2M2YsIDB4MTNlN2VmZmUsIDB4OTVkZjA4N2YsIDB4NjNjZThjMDksCisJMHhmNjQ5ZmQ4MSwgMHhkZmFhOWE5YywgMHgzZWI5ZjIyMywgMHgyNDY3OTBiZCwgMHhjMTQ2NGViYywgMHgwNTNiYWMwYSwKKwkweGM3YmVlMGRhLCAweDJiNGU2MDc4LCAweGYwMmU3ZmE0LCAweDRkZTM4YjNjLCAweGVmOWUzYzgxLCAweDZiNDBmZDdiLAorCTB4NGIzN2FlMGMsIDB4YTc4ZWY1YzcsIDB4NzZlNjhlZGIsIDB4YThmZmI3NDgsIDB4MDY1OTBmZDgsIDB4ZGNlZDA1MzYsCisJMHg3NzExMjZjMCwgMHhjMGUwNTk2ZSwgMHhlMmQ2M2JlNywgMHhjOWI5NmJiZSwgMHhjYWViMDY5OSwgMHhmNDQ4ZGZiYSwKKwkweGY2OGEwNDg0LCAweGE3Njg5NjUxLCAweGI2YWVlNWI4LCAweDlmNjljYjhmLCAweGQyYzBkMWIxLCAweDBlZTA2ZTI4LAorCTB4MDA2NDczYzMsIDB4NGNhYWIwY2YsIDB4YWNjMzU3YjIsIDB4ODU3YWFmNjgsIDB4MWU4OGFhYTQsIDB4MjJmNTA4N2IsCisJMHhlZjJjYjQwYSwgMHgzMGFjNTNhZCwgMHhiMDQyYWVmZSwgMHhlYzdiMzM0NywgMHg1OWZlZDUxYywgMHhlYjRjOWY5YywKKwkweDY4MjBlZDU3LCAweDhmZGRiMGM3LCAweDBiNGFhN2U1LCAweDE5YmIyMjRiLCAweGY3ZmI4M2U2LCAweDkwMjY0Y2I2LAorCTB4ZmY1MjEzZWQsIDB4ZDkyMzMyZjQsIDB4N2JhZjc2YWYsIDB4NWJiNDcwY2EsIDB4YTBlNmE3OTcsIDB4OWFlMzBhZGQsCisJMHhmZDdmNmUyNCwgMHhiYjY3Y2EzYiwgMHgyODVlZjk0ZSwgMHg0OWI5ZTBlNiwgMHgwNTgwMWY3NSwgMHg4NzE4ZDE3NCwKKwkweGZlYWFlZDUzLCAweGU3NjNhNWU3LCAweDk1MDViOTU0LCAweDlmMmY5YjdmLCAweDU5ZmY3ZWMxLCAweDU1NjNkZDcyLAorCTB4NjM0ZDRkZTgsIDB4ZTllMDc5ZjgsIDB4Y2Y4ZGJkMGEsIDB4OWU5YTUzMzcsIDB4NzNkYmIzZmYsIDB4ZmU5M2FlYTcsCisJMHgzOWZlZWI3OSwgMHg5ZmZhZTFkNywgMHhmZmQ4OGViMSwgMHgzY2Q4ZjgyMSwgMHgzYWM2N2ZmOSwgMHg0ZmYyOTk2ZSwKKwkweDVmMzc4NzVjLCAweDQzY2ZjODZlLCAweGU3NDZkNjc5LCAweDdlMmVlYzg4LCAweGRlZTQxYzJlLCAweGNiOWNiYzNkLAorCTB4MDk5MzhiMzksIDB4NzRmZmM3NjQsIDB4ZmQ4NGQ3NzksIDB4MWMxZjQxOWQsIDB4Nzc3OGExY2YsIDB4NjcxODNhMDgsCisJMHg4OGExYTU4OCwgMHg4Y2E1Y2RlYywgMHgyYzg2ODFmNiwgMHg0MzQwZmJlNSwgMHgyMjRkM2E5NiwgMHg2ZTE2MDNkYSwKKwkweGVjNTIwZTI3LCAweGI5NGI0MWNlLCAweDljYTcxOWRkLCAweDExOGI4ODJiLCAweDNmZDQzMjdkLCAweGNhNWJjYmY2LAorCTB4YmVlMGM2ZTcsIDB4ZDVlYzkxOTAsIDB4ZjVkZDM2ZTYsIDB4NWU1M2Q0MTYsIDB4ODY4ZmNlODksIDB4ZDJkMjg5ZGEsCisJMHg1ZjljNGE5NSwgMHhmNmFhOWY2YiwgMHg3OWUzMWE2OCwgMHhiNGIzYjJmZCwgMHhhM2RhYTc0ZiwgMHhiNGYyOTQ0MywKKwkweDYwM2Y3Y2E1LCAweDFlZDY4YjQ4LCAweGRhZDZhYjhkLCAweDEwODJmYThmLCAweGJhYTk3MzNiLCAweGViNDlkMDdmLAorCTB4ZTlkNzJkZDMsIDB4YTg3ZmZjZjEsIDB4YjA3Yjg5ZGQsIDB4YWIwNzE0YTgsIDB4ZmViNDA2N2EsIDB4ZjYzMGQ3NGQsCisJMHhmOWY3N2U3NCwgMHgxZmRjMWM4YywgMHhkMDVhYjk5YSwgMHhjZjU1MzllOCwgMHg3ZTI4MjQwMiwgMHg0M2UzZTJhNCwKKwkweDNmODg3M2Q0LCAweDVmYjUzNGY3LCAweGFmM2U2ZmQyLCAweDJlNGM3MDQ4LCAweDUzOWNkNzRmLCAweDFlN2VlYzYyLAorCTB4M2E3MzcxMmYsIDB4MTFlYWY1ZmEsIDB4ZGRhZWQxNmIsIDB4MzdjNmVlYjcsIDB4ZmQ2OTdkMzEsIDB4MDRlNWUxOWQsCisJMHg2ZjU0ZjVhZiwgMHhlYmM2Y2I3ZiwgMHg3NjUwZmYzMCwgMHhlNjEyM2RiYiwgMHg1M2E4ZDBmNSwgMHhlZmQwMDllZiwKKwkweDg1ZTMzYzZhLCAweDI5NzhiM2ViLCAweDllMTRiNjhmLCAweDdhYjNkMDhiLCAweGE0ZGJkZmRhLCAweDBkOWY0YzBmLAorCTB4NDUxMjJiZTUsIDB4MjNiZTkxMWMsIDB4MTgzMjk4MWQsIDB4NTkzMDlmOWQsIDB4MzVmNTdlNzgsIDB4MzBlM2VlOGMsCisJMHgxYTlmNWNlNSwgMHhkNzNkMDk4NywgMHhjN2MzY2FiNywgMHhjNGYwMDU1OSwgMHgxODk2MzU3MywgMHgzOWE5MWY3ZSwKKwkweDA4ZTlmZWUxLCAweDgxODc2NmVmLCAweDhiMzkzOWUxLCAweDYyNGZlZTcyLCAweGE4MmFhZWQ1LCAweGJmN2VkYzc3LAorCTB4MGJlZTE2N2QsIDB4N2U4ODE4NjcsIDB4MjZjZTk4YTQsIDB4OWVkOTkzYzQsIDB4NzFjMmFmNjMsIDB4Y2QzNWUyNDIsCisJMHgyMDM3ZTkyOSwgMHhmYmI1YmM1OSwgMHgyMDY3OWVmMCwgMHhjOWNmN2I3ZCwgMHgyYTlkMzEyZiwgMHhmM2MzZWZiNSwKKwkweDg4NDY1MjI1LCAweGJmNmJkMjlmLCAweDliZGMxMTk4LCAweDRhNWYzMzg3LCAweDZlM2I5NjMyLCAweDc1NGU5MTEwLAorCTB4ODY5YTZmZWIsIDB4NTBjMTU0ZmUsIDB4NGY1ODFhZTcsIDB4MWJmMzAyNTgsIDB4YmQ2MTFlNjAsIDB4N2I3OTg5ZjYsCisJMHhjZTljMjBhOSwgMHhmNTk2NDhkNSwgMHhkZmQ4MGQxNSwgMHg3ZmJhMDhhOCwgMHhhZTAzYmVjMCwgMHg0ZGYzYTdjYiwKKwkweDgwZjY1N2Y0LCAweDBlM2E0N2E4LCAweGMzOGZmNjUzLCAweDFmZWQ3YjMyLCAweDMwYzJmY2QzLCAweDNiNTllMTRkLAorCTB4N2ExNWMzZTQsIDB4Y2E3YjYzNWYsIDB4NmI3N2ZiODcsIDB4MTA2ZTUyMTMsIDB4NjlmNTNkMWQsIDB4YmJkNjE5NWYsCisJMHhhYjFiYmJmMiwgMHgyNmZkNWY2OCwgMHg5ZmNmMTU5MywgMHhjYWZiMjk4NSwgMHhhNTc0ZTNhMSwgMHg0MzY3NWIzYSwKKwkweDY0MThiNDZhLCAweDU1ZjExNjczLCAweGUwNzI1ZjBmLCAweGU2ODM1M2Q4LCAweDljZmFmNTAxLCAweDczNmUzYWE3LAorCTB4ZGE4M2M3MWUsIDB4NjRjMmQxOWYsIDB4Zjc0MzIzYjQsIDB4ODFmYjQzYWQsIDB4NTZiZTcwNzksIDB4MzFmZGE5ZWEsCisJMHgwMWU3NDZkNiwgMHg1MThiODg3NCwgMHhhN2FiYjU3ZCwgMHhlOWRmMGRiOSwgMHhmZjFmYmIyNCwgMHhjYzgyZTM4MiwKKwkweDM1ZmM0MzFhLCAweGNlZGI1NWFjLCAweDBkY2ZjYTljLCAweDJhMThmNGE4LCAweGZkZDBhNTJmLCAweDZmN2FkNGY3LAorCTB4OWY4MWUxMzgsIDB4MWZhZDA4MjcsIDB4ZjZkMGQ3MGEsIDB4NTgzM2I3ZjAsIDB4ZTE2MGRkZGUsIDB4YTk1ZDg4ZmIsCisJMHhhYzIyYjk5ZCwgMHg0NzNkYTU3YiwgMHhiZjVhN2YzMywgMHhlZjdmZDNkMCwgMHhiZTZkM2NmZCwgMHhiOWY2MzY0YywKKwkweDdkMDc5NDNlLCAweDRlODI3N2NkLCAweDZjNTk2ZmJiLCAweDhkMmZiNmQxLCAweDI1Nzc3ZWQxLCAweDQ1OTJmMzY4LAorCTB4NmQ5MWRmZTksIDB4OGUxYWYzYTIsIDB4Zjc5ZTEzN2MsIDB4MThkOGY5NTMsIDB4OGFmN2VmZTIsIDB4MmVmYTJhZGYsCisJMHgxZTc0Yzk5MSwgMHg3OWRlOTM3NSwgMHhlM2M0ZTUwZSwgMHgwMWQyNDAzMywgMHhmODJjM2M3ZCwgMHg1NTJlNThjYywKKwkweDBmNTE1YmI0LCAweDkzZDNhZGM2LCAweGFlZmM3YTljLCAweGJkZTBjZTViLCAweDZiYTAxNmEwLCAweGY3NzFlNTg0LAorCTB4YzU2ZTliNDcsIDB4ZjE0OGIxN2MsIDB4NzBmYjliMGQsIDB4Y2I1MWQyMzksIDB4MzdiZjVmNzcsIDB4M2E5ZmNmMWIsCisJMHg1YmNlNzQwZCwgMHg3NWIxYjczZCwgMHgxZTJiNjFhYywgMHg5NGNiOGEwYiwgMHhmZGYwNjljZCwgMHg4NGU2MmFhMSwKKwkweDYzMjNiMDk5LCAweGZjNzEyMzYzLCAweDE1YTJkMTJkLCAweGQxZjNkZGY1LCAweDcxOGVmZmY1LCAweDhjMTllNjk0LAorCTB4ZTE0MjE5ZjYsIDB4NDZkMjM3NTcsIDB4NzU2ZTM2NzIsIDB4NWJmNzgwYjYsIDB4NWY5YjFlMWUsIDB4MDYzMTcyODksCisJMHhhZjk0NjVmYywgMHhjNTdkY2E5MCwgMHhmMDE1YzcxNywgMHhjNWI2YzBmOCwgMHhiZTIzYzUyZiwgMHhkYjBmNTgzNywKKwkweGEyMTU5ZTY5LCAweDUyZDhhNzEzLCAweDhiN2ZlNWMxLCAweDdiM2VkMTg1LCAweDM3NTJhOGYzLCAweDcyZWM0ZDFlLAorCTB4OGIzYzBlYzksIDB4NDFkZWUyZDgsIDB4MmQ1OTVlZjMsIDB4OWNhY2Q5NzIsIDB4Yzg1ODAxOTcsIDB4YmU5YzM5NTEsCisJMHhmZDRhMzYwYywgMHhiMzM0NmU5OCwgMHg5NzI4MzlmOCwgMHg3Y2U4YzI5MiwgMHg4MWY2N2Y1MCwgMHg1N2NiODRiNCwKKwkweGU5Y2M2ZjZjLCAweDExNDNkZWJmLCAweDVjYzhmMThkLCAweDlmZTQ2N2NiLCAweDZkZmQwYjlmLCAweGYyOTliMTlkLAorCTB4NTM4ZDNjYWEsIDB4ZGZiYmJiZTgsIDB4MWJiYTNkMTAsIDB4MzY3MjRiZjAsIDB4OWUyY2U0MWEsIDB4ODc4ZTYzYzcsCisJMHhmNTc1Yjc4OSwgMHgzYTIwYjRjMiwgMHg3YzgwNTVkNSwgMHgyZWU3ZTJjZCwgMHhiZWJiN2UzMCwgMHg4N2UzMzRhOCwKKwkweDliOWQ0Y2ZjLCAweDU1MThlNWNiLCAweDk3ZWJiYjFlLCAweGRhMDVkYzYxLCAweDYzNWY1MWZiLCAweDBmY2U3ODNmLAorCTB4YjdkNzE5NTIsIDB4NDQzZmE4NTEsIDB4ODMwY2YzN2UsIDB4ZTgzOWVmMDMsIDB4NDMwZTQwMmEsIDB4NTY4MjVkN2IsCisJMHhjOTE4MWM0ZiwgMHhjMWZiMzVmMSwgMHhhMDllY2NiYiwgMHg3MjhjNGQzOCwgMHhiZWEzNjYxZSwgMHhlYjA2OWNkZSwKKwkweDc0NDMzOGQ5LCAweDZjNzgwNzZlLCAweGZhMTA2OGE5LCAweDU1YzRjNzhhLCAweDBkOTk3ZTcwLCAweGRlNmZkMWY1LAorCTB4MWIxMzkxNTIsIDB4OGM2NjllYmMsIDB4MzZkMGMwNzMsIDB4ZGI5ZjBmZDcsIDB4YmZjODg1ZDMsIDB4YmM3OTIzNWQsCisJMHgxY2RkNjdiZCwgMHgzZjQwNzFiZSwgMHg0NzlhODdhOCwgMHg2YWU2YWU5NywgMHg1NTcyNDFkYSwgMHg2ZDZkZTU2NywKKwkweDA3M2E3YWFlLCAweGNmYzE1NWQ5LCAweGY4MTNhZDVkLCAweGM0YTQ4MjdlLCAweGYyOGI5YmNiLCAweDRiZjRiZjQ5LAorCTB4NDkyYjE1MmYsIDB4NTdlMjg0OWYsIDB4ZTVmZDNmOWQsIDB4OTkxMWU5MDcsIDB4ODcxOWYxZjEsIDB4NGNjZWI0OWIsCisJMHhkYTA3ZTFmYSwgMHg0YWY5NzQzYiwgMHgxZTBiZDQ3ZCwgMHg2MmJhN2Y2ZCwgMHhmOGUzMzY1MSwgMHhhZjEwNWZhOCwKKwkweDdiYzVlNjNhLCAweDk1ZmRhMTkzLCAweDNhMTZmYzJhLCAweGUwNjljOTFmLCAweDhkOWRiMWVkLCAweGRiZjQ4YmY4LAorCTB4YzhlMDAxNjksIDB4YTFjZTgyZTksIDB4M2MzOGY3YjMsIDB4N2MzYTI0YjcsIDB4MmUwMWY4NmIsIDB4YWU3NDg3ZDIsCisJMHg3OGY3YTUyYiwgMHg2NThlMDk4ZiwgMHg3ZGU4ZWZiOCwgMHhlN2YzYTI1ZCwgMHhjZDRmN2FhMSwgMHhiMTMwNzBhYiwKKwkweDNlOWNlNzM2LCAweDBmOWM0ZGVjLCAweGE3NjkzNWVhLCAweDAxZmE4OWQ3LCAweGVkOGE5N2QwLCAweDA5NGIyYTM2LAorCTB4NWNkNGIzYmIsIDB4ZDdhZGU4ZTAsIDB4YWI2ZDVjYmEsIDB4OTM3MjgyYWYsIDB4MDNmNjk5ODMsIDB4OTk1MzRjM2MsCisJMHg3OWMwMzA3ZiwgMHgxY2NmMzNlZCwgMHgzZGY1OGFiZiwgMHhmODAzYWUwZSwgMHhlNmJjZTA5OSwgMHhlNjMzNDdmOSwKKwkweGVkZjM3YjQwLCAweGI5YjQyNmFkLCAweGY1YTFjZjQzLCAweDc2YTRlZjZlLCAweDRjYWI0YjcxLCAweDIzYzUxOWQzLAorCTB4ODZiOTU0NjUsIDB4YWZkOTBiMDgsIDB4ZTQ4Njc0Y2MsIDB4YzZjOTM0YjMsIDB4M2QxMGE3ZWQsIDB4NTBmODBlYjksCisJMHg2NDRhZjA4ZiwgMHgzOGQwYWYwNCwgMHg0OWY4ZTg3MSwgMHhkZWZjYzkwNSwgMHgxYTUyZTJlNCwgMHhhNzQ1NDM3NywKKwkweDVkOTBlMzFlLCAweDRlYzU3YWFlLCAweGVmYTlmNGYyLCAweDdiYjFmYjQyLCAweGZmMjNhNzNhLCAweGM4MWExNTc3LAorCTB4YzFmODdlMWUsIDB4Y2YxMTkzNDksIDB4YzUxMjY1ZGUsIDB4N2JkMTdhZDEsIDB4MjMzZGJhYzgsIDB4MWNhZTljZjUsCisJMHg3ZjI4Y2Q4YiwgMHhkYmI5Y2NiNywgMHhmZWMzZThlYywgMHg4YjMxNTJkOCwgMHg5NjVhMmZjZSwgMHhhNTYzM2I3MCwKKwkweDg4ZTQ4MWJkLCAweGU3Yjk0MmE1LCAweDcxY2JkOGEyLCAweGEyMTNiZmFhLCAweDM3NTRiNzI3LCAweDliZGVmMTk4LAorCTB4ODU5MGRlN2EsIDB4ZWQ5N2RiZDgsIDB4YmJiZDFmYmYsIDB4ZjE4YmY5NjEsIDB4MmFlZTRmYTgsIDB4NzljNzg4NjksCisJMHg0ZmYwODk2ZiwgMHhkNWRmMTM3NywgMHhmMjAyOWY5MywgMHhmMWU1MWUzOCwgMHg5MjBlOTFhMiwgMHg3ZmYyZGQyZiwKKwkweDBlM2IzOWM2LCAweDU1NjkxODFlLCAweDQzZGI4YWY4LCAweDQxN2ZlMjVmLCAweDkyOGQ2NmJmLCAweDFjNjAxNGE3LAorCTB4OGU0NGI1MmQsIDB4NzRiYzYwNzYsIDB4MDBkM2JiZGYsIDB4N2FiZDkzYWUsIDB4ZmI4ZDYzZjIsIDB4MmZjMWY0ODEsCisJMHg0OTM4MjYzMiwgMHg2ODFlOWU1ZiwgMHhhYzlkMjJiMCwgMHg4ZjQ2ZmM2YSwgMHhlMmNlNmJmNywgMHg3ZmU4NTVlOSwKKwkweDg3YjcwMjU1LCAweDk4MThjNTU2LCAweGExZjM0MmRmLCAweDJlNzU0ZjQ1LCAweGY1YTdhODY2LCAweDAxMzdkYzA5LAorCTB4Nzk4ZmM1YmYsIDB4ZmQxMDIzMTYsIDB4YmFmMThlNGMsIDB4Mjk4NzAwYWQsIDB4MzBiYmJlMzEsIDB4ZDdhYzRhYWQsCisJMHgxMjljNjBkOSwgMHhmMDgwYjQ0NywgMHhjNTYzYTI5ZCwgMHg5ZGFmMWUwNiwgMHgxMTVjZjM4NSwgMHg1OWM1MTFmMywKKwkweGQxYzVhNzI3LCAweGM1YTM1NDdkLCAweGM5ZmJjM2FkLCAweGY2ZDU2NzdhLCAweDhiY2U4Y2I1LCAweGIwMTViYzUxLAorCTB4OGNlMWY3NGEsIDB4YjZiZGM3MTgsIDB4ZWVhYjhlMjcsIDB4ZGNmMWE5MTMsIDB4MDQyOTA1NzUsIDB4ZmZjMTIxMmYsCisJMHhjYjIzZTIyZCwgMHgxZWYxMTAxYSwgMHg0MDNlOTg3ZSwgMHg0NmFhZjhmNiwgMHhjZDQxZjkxMywgMHg5MWRhM2IwOSwKKwkweGY4MjMzMjNkLCAweDNlN2FhNDNlLCAweGIxNjNlMDE3LCAweDBjNTY3YzAyLCAweDk1ZDY5YmJjLCAweDE3YmIxNDk0LAorCTB4OTFmYWE1ZTcsIDB4NTBhZjIwZjEsIDB4Y2MyNTY1ZGUsIDB4NGJlYjhhOWIsIDB4NGFlZGMzN2EsIDB4MGNjNjdhODYsCisJMHgxNjYwMzY1ZCwgMHhhMmI5ZWFlMCwgMHhjNjFlYWM3OCwgMHhkODU4M2MyMSwgMHhhYmZiNGMzOCwgMHg0MGQxMjJiZiwKKwkweGYyZDBkOGYxLCAweDVjNzgwYjI3LCAweDIxMDUwYjMyLCAweDEzNWVlYmFlLCAweDc1NWRjZmRkLCAweGFhZjdiZWUwLAorCTB4MzAxZTdlNTAsIDB4Njc2N2M5MzksIDB4ZmZiYzE0ODEsIDB4NjY3NzFkZGUsIDB4YWVkZGZmN2MsIDB4ZGJiNWJmOWMsCisJMHhhNjNmNzQwZCwgMHhmOGNjYmUzYiwgMHhlNzFhYmNiZSwgMHhkOWU1MWE4OCwgMHgzMWYyNzg4YywgMHhjN2Y0MjFjNywKKwkweDhmNzFhYmZlLCAweDRmY2E0NjFiLCAweDZkYWM3ZjYwLCAweDYzYzUxNWMwLCAweDY4ZWFjNmMyLCAweDg1MjkyNzlmLAorCTB4MDVmNzgyNzksIDB4NWZlYjI5NTYsIDB4N2E4NzBkZDUsIDB4NzVmNWVhM2IsIDB4ZjYwNzk0MjgsIDB4Mzc4ZDg3MGYsCisJMHgyMjI2YmJlNywgMHg4OGVjNDZkZCwgMHg0N2RhZmQ0NywgMHgxNzEzNDNiYywgMHg3OTI4N2JjMSwgMHhmYTYyMDRiMSwKKwkweDljNzlhYTkzLCAweDNjZWE2NjI0LCAweDUzNDg3NzhhLCAweDBhZDkzZWY5LCAweGRjZmM2MDE2LCAweDdjODRjMGEwLAorCTB4ZmQ0YmVhYmEsIDB4ZTg4NzcwMGQsIDB4OTI3YWNjZDcsIDB4OTBhZTkxOTMsIDB4N2YyZjQ4YjgsIDB4NjU3NmU2NDUsCisJMHhhMmRiZGM4OCwgMHgwMmYxZjlmMCwgMHhjZjkxZWUyNSwgMHg5M2U3YmZmMiwgMHg1MjI4YmIyNSwgMHgxODg5ZjdkOSwKKwkweGU4NzI0Mjk1LCAweGQ5MGE1NzExLCAweDQxMWNjNDQzLCAweDlkOWNiZWYwLCAweDg3YjE1MDczLCAweDhmOWNhNzdlLAorCTB4ODNlNzJiZjcsIDB4ODNlNzJiMGYsIDB4MGI3N2M1NWYsIDB4ODYzZjkwYzAsIDB4N2E0MDE2ZWYsIDB4ZTU0OWM5YmMsCisJMHgyODE1MzQ2ZiwgMHg2ZmUzOTljYSwgMHg0ODkyZWU0NSwgMHhmOTk0MWZiMiwgMHhhZGY5OTRlOSwgMHgyNTczNGViMCwKKwkweDZkNTY3ZTAzLCAweDU4NzlkM2QzLCAweGU5ODRjMjYzLCAweGFmMzJjZjY4LCAweGRiMTE5ZWRjLCAweDc1ODdlZjczLAorCTB4OWVmY2JmYzIsIDB4MDk1ZGE3NzMsIDB4M2E0ZjNhMWUsIDB4M2ZmN2NhYzcsIDB4NTQyZDdjNTUsIDB4YjYxMmFmZWEsCisJMHhjNzVmOTAxOSwgMHgzNmUxNmE3NiwgMHhjNmE0NTJmZSwgMHhkYTYyMmNhZSwgMHg0ZDEzOTdmMywgMHg0YmY1MzQ0MywKKwkweDk3ZjNkYWFjLCAweDZhZDdlYzkzLCAweDY4NzY0ZmJlLCAweDk3NWU1ZmNmLCAweDFmNjQzZTMxLCAweDBiNTc0YjU2LAorCTB4ODA2ZTgwMTMsIDB4N2QzM2FhNGUsIDB4ZDY4NWZmMzQsIDB4Y2Q3YjhhNTIsIDB4NzRjN2I5MGQsIDB4M2YzNmFiNDcsCisJMHgyZmNkYTdkZiwgMHhhYmNkYWRkYywgMHg0NmMzYzllNywgMHg5MjMwZjQyOSwgMHhmMTMxZmM4ZCwgMHgwY2Y3ZTQ0ZSwKKwkweDAxMDdlZjg1LCAweDNhYjM2ZmJmLCAweGNmZGExMTk5LCAweGY4YmY3ODE2LCAweDFiMDBjNjFlLCAweDc2Yzk0YmVkLAorCTB4ZTNhYzIzOGMsIDB4NWNiMDlmZjcsIDB4YzNiZGNiYzcsIDB4YmU3YWY2OTUsIDB4ZGI4ZWM1NmYsIDB4NGIxZGJlZTgsCisJMHgwNmVkZTFjYywgMHhmYzdlZWZmMCwgMHg3MmYxYTQ4ZSwgMHhmZTg3YWYwZSwgMHhhMjFiZDYxMiwgMHhlNWMzNTNmNCwKKwkweGZlNDU5YzkzLCAweDMzZWM5YjgyLCAweDYyYjM2YjIzLCAweGMyZmUwMTZhLCAweGU5Mzk5YTM0LCAweGFiMGM3NTllLAorCTB4OTA3NWJmMjcsIDB4NTEzMjdmNzIsIDB4NDNiY2E0ZTgsIDB4M2U2MTg2YjAsIDB4ZjBhNjcwNDUsIDB4ZTQ4Zjg1ZjgsCisJMHhmZTQ5NTBjMywgMHg4OWYxMmE3NSwgMHhmNDQ3NzQ1YiwgMHhiOTBkOTdlNiwgMHhhYWYwMDdiYSwgMHg5MTAyODZmOCwKKwkweDU2MjNlMmU0LCAweGQ4ZjllZjQ2LCAweGJmMTNmNzVjLCAweGIwMTZjMzZlLCAweDhmNmIzMzZlLCAweGY4N2ExNTQ5LAorCTB4NjFiY2VkZTcsIDB4NWMxMzVmYzQsIDB4YjUyZmRhMGUsIDB4NzgwYjI0MTUsIDB4ODU4OGE1MmUsIDB4NDUzNmNiOWMsCisJMHhjNGEzZTg2OSwgMHg1ZjQyMTcxYSwgMHg0YmU4NDI0MywgMHg5ZDdmN2Y0YiwgMHgzOTQ1ZDVlYywgMHhlODQyY2U5MCwKKwkweGU1YmUyZmYwLCAweGFmMTgyYzUxLCAweDA1ZmE4ZjRjLCAweDc2ODlkNThmLCAweGNhOWUwNTRhLCAweDc1NGY5NjAyLAorCTB4ZWUzMTliNDYsIDB4NzNkMThiNjcsIDB4M2ZkOGE1NzksIDB4YWI5ZjRhYTUsIDB4YjJlYjU5ZTQsIDB4NTY2YmZiZTEsCisJMHhmNmU2NDlkMSwgMHhmMTNkMmRiYSwgMHg5NmRmMTgyNSwgMHhlYTM1ZjYwMCwgMHg1YzkxOTk2MywgMHgxZmQzYjA3ZCwKKwkweDdmZDQzNTc2LCAweDY1ZmZmYzA0LCAweGViMWJmZDBjLCAweDY1ZWZiYzY0LCAweDVmMTBlNGI1LCAweDc5NDk2MjNmLAorCTB4ZDA1ZWYzMDAsIDB4NDM3ZjU4ZTgsIDB4ZTVhZmY3MzEsIDB4ZWY4MjZjZTgsIDB4MDViZWExNTEsIDB4YzIzZGE1ZWYsCisJMHhjMWE5NGNmMiwgMHhmZWJjMmRmNSwgMHg1MTY0NTk3YSwgMHgzMTE4OWY5MCwgMHg5ZGJmZWE4MiwgMHhjZWY4NjY2NywKKwkweGQ5YTA3NzgxLCAweDYzZWM3MTg3LCAweGRkNzdhY2YyLCAweDdiN2ZlYjQxLCAweGFmMDdkNzE0LCAweGE4ZjExYzE5LAorCTB4N2M5OTFlMGYsIDB4ZDI4N2E2NzcsIDB4Njg1ZjhkNzQsIDB4YmVlNDEwNGIsIDB4OGY4NTE3Y2UsIDB4OTJiZDcyMzYsCisJMHg3OGM3ZTI1YiwgMHgzNGMyNzQ3YywgMHhmZDAzOTk1NywgMHhlOTBiYjcxZCwgMHhmMTEyZTc0MiwgMHhmZDM3NWJlOCwKKwkweGE4N2UyYjQ0LCAweDBmYzEwNmU0LCAweDVkNzQ5YjRiLCAweGUzZmY0MzBlLCAweDM1NzcwYjExLCAweGQ1OWUyOTFlLAorCTB4MDJmOTg2NTIsIDB4ZDkwM2VlOTEsIDB4ZDllYmUyNWMsIDB4N2UwMmFlYjgsIDB4ZTU0YWYwZmUsIDB4MTgxZWE4NzEsCisJMHhiZmRiOWEzMiwgMHgzYzQ0ODY5MywgMHhkZmZhMTQzMCwgMHhiMTVhMjQ1MCwgMHgyYjdhMGRmZiwgMHg0ZWYxZTdkZCwKKwkweDE3NTdlNDY2LCAweGUwOTdlYWJiLCAweDExMDk2ZGJjLCAweGRhNmZjZjBjLCAweGJlNzgxYTBhLCAweDAwY2NjMGQ4LAorCTB4YmQ2YjkzNGYsIDB4NGE2OWYxMTcsIDB4ZjZjMDhjZjUsIDB4N2E3ZTA3NDcsIDB4NWIxOWVkMWMsIDB4NzAzYTQ4ODIsCisJMHhhZWY5Y2JhMiwgMHgyODE3ZWIxYiwgMHg3OWUyOWRmMSwgMHg5YjNjNzBlYiwgMHg1OTlhYjQ0NSwgMHhiOTU0MWMwZiwKKwkweGNiYzk5ZWJlLCAweDBhYjJmZmM5LCAweDBhY2NkZWY0LCAweGNlMGQ0MzZiLCAweDcwODQ5MWU3LCAweGFlNmRmM2IyLAorCTB4NzllMjBiMDYsIDB4ZDEzZDQwYzMsIDB4N2YyMjQ5NDEsIDB4YzI1NTZhNTcsIDB4ZmZjYzBhYjQsIDB4NzE5MWEwNjIsCisJMHgxZjJmZjNiZSwgMHg1MzgxZmU4YSwgMHg1YjM1NzVhMCwgMHhjNzVlNjgxYSwgMHhjMTM5ODkyZSwgMHhhOWE4OTZlZiwKKwkweGNmODVhMWQ5LCAweGY4ZjE0NmVmLCAweGYxZTMwOTkwLCAweGY1Yjc5ZjgwLCAweDhiOWE5Y2NjLCAweDc4YTdhM2Y0LAorCTB4NmI3YzdmNTMsIDB4N2VjZTVkNzMsIDB4MmFmZTYxZmIsIDB4MTEwYjAzOTQsIDB4YzI5Nzg1YmUsIDB4ZmE0MDRmOTgsCisJMHhmZTYxMjkzZCwgMHg1YjAxN2Y3NywgMHg2MGQ5ZDY4MCwgMHg2ZTQxZmVjMSwgMHhiZmEyZmFiYiwgMHg3ZTljZDE4OCwKKwkweDRiMGUwYjliLCAweGQ3ODI0ZWY4LCAweDM0MWYxMDIxLCAweDQ0NGU0ZTViLCAweGI1Mjg3ODNlLCAweGExZThlODhjLAorCTB4ODk5YThmODIsIDB4ZmNmMzg2MmYsIDB4ZWVmNzc5ZGIsIDB4MTM3YTNjNDEsIDB4ZTc3ZjY5YzMsIDB4MzE1OTgyYTEsCisJMHg2MGJlZjRjMSwgMHgzMmY0NDg5NCwgMHg0ZTYxNmZlZSwgMHg5NDYzZTIzZiwgMHg5MWZiZjg4MSwgMHg4YzU2YzcwOCwKKwkweGNjZjM3OTRmLCAweDgyNGJiZjY0LCAweDk4NmNkOTc1LCAweDI4NjJjNGU3LCAweDVkYTJmZTg3LCAweDdlZjEzZTYyLAorCTB4MGI4ZjA1NzUsIDB4ZDU3ZTMwMmIsIDB4Zjg4NDNiNjUsIDB4MzE2NjRhOTAsIDB4Mzk0OWFlN2UsIDB4ZWY5MTE0ZjcsCisJMHhiNDM1NDM1YywgMHgyNTk1NmZmYSwgMHhkOGNmZGU5NywgMHg0MjcwZDA5MiwgMHhiYjIwYjZkOSwgMHg1NzIyOTA2YSwKKwkweDQ1ODg5NDA2LCAweDU5MDZkZjI4LCAweGViNjU1ZGI4LCAweGJiOTQwNTk0LCAweGFhNDdmYmExLCAweGVkMjlkN2JlLAorCTB4YTY1YjMyOGMsIDB4MzcxYjU0YTMsIDB4N2Q3MDE1ZDIsIDB4ZTk3ZjZhMWIsIDB4YzM1ZWRjMmMsIDB4YWU4ZmJjM2YsCisJMHg4OTNmMzVjZiwgMHgzMTc0MzhlNywgMHgxOTdmN2FkYSwgMHgwYTczOWNhNSwgMHgzYTU0YWZiMSwgMHg3YWU1NjBkZiwKKwkweGQxYWU0MzYyLCAweGExYmQ3NDg3LCAweDJhNTlkYjk4LCAweDQ3ZjJhYjFmLCAweDg3MmFiZjg1LCAweGVmN2U3YmQ0LAorCTB4NTE5NWY2MjgsIDB4ODczNjVlNGUsIDB4ZTU5OWVhZTQsIDB4ZDQwNzZmNzgsIDB4YzMxNzczOWUsIDB4ZmE1Njg5N2IsCisJMHgxZjcyYWVmZSwgMHg2ZjYyOTRmMSwgMHg1YmQ4YTdiZCwgMHg1YmQ4YTFmZiwgMHgwNWJkYTNlZiwgMHg4MzUxODZmOSwKKwkweDE0MzdiZjA4LCAweDA4ZGQ3NjJlLCAweDIwOTAxYWYzLCAweDNhMTRkZjExLCAweGVkYzQ0YzRlLCAweDI3MTk3MWFmLAorCTB4NjFkOTdkMmMsIDB4MGVhMmQxMTEsIDB4MzQ4ZjA1ZTMsIDB4MzY0OTdiZjIsIDB4MTU5OGVkOTcsIDB4OTVjZjU5ZjEsCisJMHg3NjZiMmNmOSwgMHhiY2JiMzQ2OSwgMHg3YWUzZjI3YywgMHhlNDNlZDFkMiwgMHhiOTU1N2JlYiwgMHg5OTRjNzk0ZiwKKwkweGZlNjU3MWZmLCAweDU3ZjMyODZmLCAweDQzNDk4ZmVkLCAweGJjYTEzMmJlLCAweGVmYWYxMGRmLCAweGZjMjk3ZTQ3LAorCTB4YjlkMGE3MjksIDB4YjU3OTUwYTgsIDB4ZTkwOGM0MDEsIDB4ZmM5MTIyZWIsIDB4ZTc3ODIwOWYsIDB4MjViZGU0NmEsCisJMHg0ZWY1ZjcyMCwgMHgxZTY4Yzk1OSwgMHg3NjYwZGJiZiwgMHg3YzQ2MmM1NywgMHhhNzE0NjY0ZSwgMHgyN2FhZTg5ZCwKKwkweGI5MDM2NWI5LCAweGY4YjM3MjQ1LCAweGNhNmNlYjVjLCAweGU1ODMzODQ3LCAweDYzODE1MTllLCAweDhlNWFjYmIxLAorCTB4NDYzOGJlNzIsIDB4MjQ1NzFmNGYsIDB4NWJiZGQwYTQsIDB4MWQwZWZlZDUsIDB4MGNmMDcyZjcsIDB4ODJhNjY3OTUsCisJMHhmM2UyNWVmNSwgMHg2YzcyNDdmZiwgMHg4ZWUzZTMyYywgMHhmZDNhMjRiZCwgMHg0ZjFjZGU1YywgMHg5MTIzNzkyNiwKKwkweDVmZWQwYTdjLCAweDYzNmYzNzk1LCAweGJlMjA2NGNjLCAweGZiYTE2NDRmLCAweDYxMGE3NzAwLCAweDlkZTc4NDRlLAorCTB4M2YzMDdjMjgsIDB4ZmY3ZGQxOTcsIDB4NjczZDhhYzEsIDB4MDFkMWRlNTcsIDB4Y2ViOGExNGUsIDB4ZjViMDRlZDgsCisJMHhmYzdhZjg4MywgMHgxYmY3NTMyNSwgMHg4ZjhlZGM2YywgMHg5YTI3ZTRkNiwgMHg0YmY1MzVlMiwgMHhlZjlhYzlhYywKKwkweDM1YzNlYzkzLCAweGIyM2IyN2RmLCAweDMyZWJmOTM1LCAweGZmZWE2OTQ2LCAweGM5YTQ1OWMyLCAweDU5MzA1MGRmLAorCTB4MmU0Y2JmNTMsIDB4NjY2NWU0ZDMsIDB4MGU0ODc3YTUsIDB4ZmExZWVkMzYsIDB4YTdmZDFlYjEsIDB4YTcxZmExYjYsCisJMHhhMTRmODZmNSwgMHgwZTBiZjBmMSwgMHhhM2I1ZTE2MCwgMHgwMGU4Njc4YiwgMHg4NzUxODU0NiwgMHhmYzg2NGNlZiwKKwkweDY3OTNkMWM2LCAweDBhZWY4MGU4LCAweDNhZmUxZjA3LCAweGQzNjg1ODE5LCAweDdmM2MyOWU4LCAweDUzYWZlMWY1LAorCTB4ZjQ2NWJmMjAsIDB4ODYzZjNjNzUsIDB4M2FkY2YwOTEsIDB4MmYwY2VhN2EsIDB4ZWExYzU5ZTAsIDB4ZDAzNDc0NzksCisJMHhlYTk3MmRmMSwgMHhmODNkYTI4ZiwgMHhlNmQzNjVjNywgMHg0ZWY4NGIyNiwgMHgwNjYyNTk0MCwgMHg4YTZjZTdjYywKKwkweDdlZmM2MWU3LCAweDE1YWNlYzczLCAweGZjNzYxMTc4LCAweDhmNzRmNTc3LCAweDc5YTMzN2VkLCAweGZjOGI4ZWJiLAorCTB4OGI4ZThkNWQsIDB4YmIwZDFkZmMsIDB4NTNmNmYxYzgsIDB4Y2JiZWY1NTMsIDB4N2U5YTBlMDQsIDB4NjQxMTVmZGYsCisJMHhmZDA1YWY3ZSwgMHhkYzY5MzljZCwgMHhmZDE0YzRkZiwgMHhkZmQxNGM0ZCwgMHhjZGZkMTRjNCwgMHg2ZmVlN2EzOSwKKwkweDI2ZmU4YTYyLCAweDg5YmZhMzk2LCAweDMyNGQ1YmU5LCAweGI5MzRlZmE1LCAweDcyNmY2ZDI4LCAweGJmN2RkYTUzLAorCTB4NmFlNzI5ZTAsIDB4ZWYzODBhM2QsIDB4OTg1YjhiNGYsIDB4MTExN2U0YzMsIDB4NGFlN2ExNGUsIDB4NGY5ZGY0M2EsCisJMHg0NWNhN2VkMCwgMHgxMmZiYzBlNiwgMHgzOTRlMjI4NywgMHgzOWFjYmY3MCwgMHgyZTc0NDRjZiwgMHg0YzNiYjY3NCwKKwkweDk3MzBiZGYwLCAweGI2MmY5YmU3LCAweDYxN2U1MDNiLCAweDhlOWVlZDFlLCAweDk0NmNiNmU4LCAweDE2YjVjZGJmLAorCTB4MzViYmVlMjcsIDB4MjNjN2Y0NWYsIDB4MWJkNjE0OWYsIDB4NzE0Y2RlZTgsIDB4ZTljNTI3NjcsIDB4YmRmYzJkMGEsCisJMHhjNzExNDM4NCwgMHg5MWUzMjg4ZSwgMHg5MTc5ZGE1YywgMHgyNzdjNDVmOSwgMHhiMGVlZGNjNywgMHgzZjYwZTMyYSwKKwkweGVhMzI2ZTMwLCAweDMwMjVjMmI3LCAweGJmNWJmNTJlLCAweGIwYTlmYTk4LCAweDg0MmI4Zjc0LCAweGUxZmE2YjhjLAorCTB4NDEwYTI3NzEsIDB4MzE3NmE2ZTMsIDB4YzcwMTE3N2EsIDB4ZjVjNjY4NzUsIDB4ZmMzZjc0NGIsIDB4NzhjMjVmYTIsCisJMHhkM2I0NDc2MSwgMHgzNTRkNzE4ZSwgMHgyMWRmOGM1ZiwgMHhkZmNmNDViZiwgMHhmODc0MmM1ZiwgMHhiODkzZDQyNSwKKwkweDViZWY4OWJkLCAweDMzZDg4MWM2LCAweDFmMGQ3OWQzLCAweDQ3YTg2NWM5LCAweDVkOWRiOTcxLCAweDlhMTc5ZDdjLAorCTB4OWY5MDBiZmMsIDB4NjA3Nzk1OGEsIDB4N2JhNThjYzAsIDB4NzMwYzRjOWIsIDB4OTEyOGJlYTIsIDB4MzgzNjNiYmUsCisJMHhlMzM5ZGYxNywgMHgxYjE1YTBlZiwgMHgxZjkwZGJkZCwgMHhkZTVjNzRlYiwgMHhkZjMzMThiMCwgMHhjZmI1ZDA1NywKKwkweDNiZDQxNWZmLCAweGVjOTgzYjE5LCAweDRiZmIwNDk1LCAweGI0MDQ3NTJjLCAweDQ0Y2FlNDVmLCAweDViMjRlM2JiLAorCTB4NzU2ODcyNGYsIDB4OGY3ZmU3OTQsIDB4MzFiZTdhMDYsIDB4ZjQ1MDVlYjMsIDB4Nzc2M2Y1MjcsIDB4ZmRjMGVmODUsCisJMHg4NjU3OGU4OCwgMHg0ZDFmMjFlNSwgMHg2NDVlM2EzMywgMHgxZjdmYmZjMCwgMHgzY2ZjNDRkZCwgMHg4NzkxY2EyZCwKKwkweDdkZmRhYzJmLCAweDhmOWUwYWY0LCAweDM3ODhiYzczLCAweDY5YWNhZDgzLCAweDhmZmM3MTQ2LCAweGYxNDUyZjNmLAorCTB4YTc5YTc0MGQsIDB4N2ZiNDNhMGEsIDB4NzY1MzczZDQsIDB4MDYzNjEzZDEsIDB4ZmFlYjU0ZTAsIDB4ZDdlN2MwY2EsCisJMHg3MDc4YzA2OSwgMHhjMTA3MThkNCwgMHg0NjYxZTA2ZiwgMHgyNzNhOThlNywgMHhlMDc2Zjg0NywgMHhmYTgwZGY3ZSwKKwkweGIyODc4YzZjLCAweGQ2MWU0NzRjLCAweGQyNzdkMjRiLCAweGVmOGVmMjdkLCAweGE4MjdmZGY4LCAweDUwNTM3OTE5LAorCTB4ODM4OWZlZmMsIDB4ZjhhZmFiOTIsIDB4ZGMzMWM5ZTMsIDB4NmE5NDVkNGUsIDB4YTg3ODg3NTksIDB4OTQ0YzliYjMsCisJMHhlNzQ4YmMxZSwgMHg5ZGNlOTk4MiwgMHhkOTZiZjE4YSwgMHhhOTdiZjdkMCwgMHhmYWUxOGVhZiwgMHg0MWE1NzkyMSwKKwkweDc0NDEwMjMxLCAweDMwZTU5NGMyLCAweDBjYmRlNmE2LCAweGJiZjZkMGY0LCAweDhiZGZiYWMzLCAweDQzMzI3MDAzLAorCTB4ZGVmM2M4OWEsIDB4ZWIxNzhmMWQsIDB4YWM2NWY1MzQsIDB4ZTMxZGZkZGYsIDB4YmRhN2FjZjQsIDB4OGZjZGRiZmMsCisJMHhjNjU1NGYyZiwgMHhjNzk5N2E0MywgMHhkNTBjN2ZjOCwgMHg2ZDBiNmIzYiwgMHg4NDNmM2JlYSwgMHhjYzYzYzdlNywKKwkweDUyM2RlOWRiLCAweDE0ODc3OTQ5LCAweDRlMzE1YWVhLCAweDNkZThjZTExLCAweDM3YmZjMWFlLCAweDllODE5YWZiLAorCTB4M2QzOTlhNzYsIDB4ZGQzYzhhYTcsIDB4ZWFmYWYyMjksIDB4YmJlYWE1M2IsIDB4N2ExNGNmNmIsIDB4YTNjYzJiNmUsCisJMHg4ZmQ0ZmM3ZSwgMHhkZjFiMzdiNCwgMHg2ZDY3ODhjYiwgMHg2ZWZhYmUzNCwgMHgwMTJmNWE5NCwgMHgyYjA5MjBmNCwKKwkweGUyM2E2NzVkLCAweGZiMTI1MGFiLCAweDYzZTdlNzg0LCAweDFkMjBlNjhhLCAweGIyZjI2ODVjLCAweGNkZjQ4MjRmLAorCTB4YzZjOGYwODUsIDB4NDlkNWZjNjAsIDB4M2Y1YWY3ZGEsIDB4ZGE4MTMzMWYsIDB4MWI2YmVkYTksIDB4Mjg0ZmIyMjcsCisJMHgzYTI3ZTk3OCwgMHg2OTE1NGRhYSwgMHg2MjRlYmQxZiwgMHg5YzNiZTJhZiwgMHhhODBkNTkyMCwgMHhhNzc2ZDU5NywKKwkweDc4ZTJkZTQwLCAweGM1ZmM4MmVmLCAweGJiOTAzZGY0LCAweDNlZDFlODlmLCAweGZiZTk0ZTlkLCAweDNmMmExZTRkLAorCTB4Njk0ZDU0ZGQsIDB4Y2E5ZWE5YTAsIDB4YTQ2YTZhM2YsIDB4MjNkYjk2ZjQsIDB4MTY3ZjkxNzIsIDB4M2VjNjVmZWQsCisJMHhkYWY3YTIwOSwgMHgxMDI3YmQzNiwgMHhkNDU1M2Y5NCwgMHg1MWFkMWQzNywgMHg3MjU0ZThlOCwgMHgxYzlmZGZkZiwKKwkweDUzYmJlZGMzLCAweDNiM2UzOGUzLCAweGY3YzBkZWMwLCAweDk3MmU4MGRhLCAweGRiZmQ2ZDViLCAweGZkY2ExZDFkLAorCTB4ZjllM2EzYWUsIDB4M2M0NzY1ZmUsIDB4YzMxZjJmY2YsIDB4NjQ1OTZlZmQsIDB4ZThmZWQ4YWQsIDB4M2ZlZjAzNzgsCisJMHhlZmM2YWM0NSwgMHg3YmY3OGRiMiwgMHg3N2E0NWQyYSwgMHhiMTM1N2VhNCwgMHg1ODMxZmVlOCwgMHg3M2NhMTYzZiwKKwkweGFlYTdmMjdhLCAweDQxZTVkZmUyLCAweGFmOWQ1Y2JjLCAweDQyYjZmZGZhLCAweDYxZWVmYWFiLCAweDhmY2Y3ZjNhLAorCTB4N2EwMmY3ZGYsIDB4ZmFkNWZlYTcsIDB4M2U3MDI2NjMsIDB4NGJlZmFkMGMsIDB4NDNjOWU3ZTUsIDB4YzJhOWYxZTEsCisJMHg2ODE3YzRiNywgMHgyNDFmMjM2NywgMHg5ZDQ1ZjEwNywgMHhhNTQyZjg4MywgMHhkNmZlOTU0MywgMHhhNzM4NzIxNiwKKwkweDBmM2ExNTFhLCAweDA3ZWVlN2U3LCAweDc2ODQyZWEzLCAweGI0Y2NlMzgzLCAweGJiZTMyMDhmLCAweDlkOWViMGNiLAorCTB4YTEyZmMyODIsIDB4NjNiY2EwZmMsIDB4Y2E4M2YyYWMsIDB4MGZiZDJhMDcsIDB4ZWZlMzNlMDYsIDB4OGM3NWYzMzQsCisJMHg1Zjc5ZmE5NSwgMHg3YjQ3NTk1OCwgMHg4NDVkYzQ2YywgMHgyYjdhODNkNywgMHgxMmIxYWRlYSwgMHhiMDc5MmY3ZiwKKwkweGVkY2VmNWQ4LCAweDExYjE5ZmM4LCAweDk2OTE4YzBlLCAweGY3ZDRiMmFjLCAweGZlM2VjNzI1LCAweDk1NDNjMmFmLAorCTB4YTNjMGZkMGIsIDB4Y2EwYzFjMTcsIDB4MTIzZmMzYmIsIDB4NTBlNzI0MGUsIDB4ZjZmZDIzOGUsIDB4OGM0ZWI3MjEsCisJMHgxNzc2MjliMSwgMHhjN2NmZGZhNywgMHgxZDIyNmZjOCwgMHgxZDY2MDg3NSwgMHgzMGU4N2JkZSwgMHhmMDVmN2RmNywKKwkweDBlYmU3OGU4LCAweDE2ZDY4ZTk1LCAweGUzMDc0YTMyLCAweDk2ZjY4NzNhLCAweGJhN2FlYTdiLCAweDIzMDc3OWQ3LAorCTB4YzYxYTk3ZjksIDB4YWNmMTQzY2IsIDB4ZmU0ODJiYWUsIDB4YTk3OWMxOWQsIDB4ZWMwYzY0ZjAsIDB4YTEyN2U4MWYsCisJMHhlOGVmNDJjNiwgMHhlMGU4NTZkZCwgMHhkM2YwMzZmYywgMHg2N2FjMGRjYSwgMHgzZThhMzVmZCwgMHhmODk0NGM3YiwKKwkweDdlOGFjODdiLCAweGE0MTcyZWU5LCAweDFhOTk2NTk5LCAweGNmNDc0M2JkLCAweGVmZTE1ZjNhLCAweDU2NDVmYjhhLAorCTB4YTM3MmVmOGQsIDB4MTcxYzFkNmYsIDB4ZTVjODUyMWYsIDB4M2NmNGQ3NDMsIDB4MmYxM2Y3MTEsIDB4Zjc0MmQ1ZmMsCisJMHhlYTBjMmY4YiwgMHhjZWY2OGQzYywgMHg1MzNkNTY4NSwgMHgyYTliMjNkZSwgMHg4YjlkZGU4MCwgMHhmOTBjMTMzZSwKKwkweGYzOWVmMmE1LCAweDBlZjdlOGU3LCAweDE3NmQ3YTgzLCAweGI1YmRhMzRmLCAweDRjYzRhYjY4LCAweGViNjA5ZTc4LAorCTB4M2QyMGI3MzcsIDB4NGY0NTdiY2QsIDB4NWI5YTk5ZTcsIDB4N2E0NzFlMzcsIDB4YzA0ZmI3M2MsIDB4ODVkOTZmZTcsCisJMHgzMWM1MDI3ZCwgMHg3YzIyNWI2YiwgMHgwYTVmYTg2NiwgMHhjNzdmYWM3OSwgMHhlM2M3Yzk2ZSwgMHgzOWM1MzI4YiwKKwkweDNlZjE5NDZhLCAweGEwYTVkNzMxLCAweGViNzEzZTVkLCAweGZiODQzYTVkLCAweDhiMDJlZGJjLCAweGI0OGY3ZTgzLAorCTB4ZGYwYzc5ZGUsIDB4OGRiNzM5MWQsIDB4MzY2YjJmZGYsIDB4ZjljMGVlNDcsIDB4MGNlYjRhOTcsIDB4YzE3Y2EwODMsCisJMHg2MzVlNWU3NiwgMHhmNzBjZmQyOSwgMHhjZDNjMTc0MywgMHg2MGIzZmUyOCwgMHg4ZmY5MDQ2ZiwgMHgxZmY0NWFmMywKKwkweDhlZWM4MjA1LCAweGZjZGE2ZGVhLCAweDQwNjZkNjdjLCAweDUzYjA1ODNhLCAweDA3YjM1ZTViLCAweDc5ZjI0MWYyLAorCTB4MmYxMmExNTAsIDB4MjliMmNlMTksIDB4ZTNjMmQyNWUsIDB4ZWY3Y2FhMDcsIDB4Yjk3YjVmNmQsIDB4ZGU1MDZkMWMsCisJMHg4OTdmNjZmZiwgMHg1ZjBmZjdhNSwgMHgyM2U5MjZmOSwgMHgyOTk3Y2YwYiwgMHhmZjkwMzNmOSwgMHgxNzhlMWJlYSwKKwkweGNhNzUyZTE1LCAweGIzYzU1ZmQ4LCAweDY3NTgzNmRjLCAweDJiNjYyYmRkLCAweDA3NzVlZGZhLCAweDc5ZTI0NmNlLAorCTB4MDE2MTQ1YjAsIDB4YmQ5OTE3N2EsIDB4ZGVkMTU5MmMsIDB4ZTRiZjYwN2IsIDB4MWVkNmY4NDUsIDB4ZmI4OTNmMzQsCisJMHg5ZTJmNzU5OCwgMHhhMTNjNjAzMCwgMHhiMjYyZGY3NCwgMHhlZjMxMjY1NywgMHhmZDliZjQ0YSwgMHg4OWRhYzhhMiwKKwkweDdkZTlkYThlLCAweGNlNzcyNjVmLCAweDFjMmU3ZWMzLCAweDBlZDE1YjMwLCAweDRmZjk3YmE4LCAweGZjYzc2ZWM3LAorCTB4YTdkZDAyOGIsIDB4MjAxODkwYmMsIDB4NTViNzk5M2EsIDB4MGM0MzdiYTIsIDB4MWVmY2I0MmQsIDB4YWYxMDkxM2EsCisJMHgyOGI2ZTc4OCwgMHgwZWU1OGY3YSwgMHgxOWUyM2JjNCwgMHg0NjQ4ZWVmMCwgMHhkMDcxZTEzYSwgMHhmNDRiNGY3OSwKKwkweGQ5YjViOWJkLCAweGY5Y2ZmNTgwLCAweGJjNTU3ZTM4LCAweDA5NGI0YTk3LCAweGU3MWUwYmNmLCAweDc1Yjg5Y2Y4LAorCTB4YTQzMGU2ZDcsIDB4NjRmNWE3ODMsIDB4NzY4MTFmOGYsIDB4MGQzYjc4ODMsIDB4ZTE1ZTE4MWQsIDB4YzVkODVmZmQsCisJMHhkMzc3OTFjZiwgMHgzNzYzMDFjMSwgMHgyZjNjZTAxZCwgMHhhN2MwMDc0NywgMHg0NzJmZjdhNCwgMHg5N2U4OWQwNywKKwkweGRkZmZiZjkyLCAweDBlZDBjN2I5LCAweDg3ZTdlMDhmLCAweGQ1MWI3N2Q1LCAweDJlMDcxYTc3LCAweGRmMTQ3NTNjLAorCTB4YmZiMzRhZTcsIDB4YTU3Nzc2NDAsIDB4YzVkYThiZWQsIDB4OWQwOWRlOGMsIDB4NGJlNzg4NTMsIDB4MDJiZGJmMjYsCisJMHhjYTcyNzdkMSwgMHgyZjE0ZDliMywgMHg2ZDc2MDdkNSwgMHg3NDQzNzhjMSwgMHgzYWM3YzUzOCwgMHhlMWI2Y2I5MiwKKwkweGI2YzU5OGZiLCAweGMyZjY5MzZmLCAweGNlZmQxNjNhLCAweGViMTFlNzQ4LCAweDNmYzY3ZTE1LCAweGJlYTIwNzNjLAorCTB4YTc3ODBjNGIsIDB4MDdiNTE5ZjMsIDB4YzY1Y2ZjOGQsIDB4ZTFmYmVkM2UsIDB4Y2U5Y2YxMWQsIDB4OTU5ZDBjNGIsCisJMHg4MDRmZDE4YiwgMHg0MTFjNzBmZSwgMHhjMmU5ZmVlNiwgMHg0NTFkZmM4MywgMHhhODVjOWZkNSwgMHg0N2I4YTdiZSwKKwkweDYwODM2ZWZiLCAweDNkZWE5YjdkLCAweDcwNDI5ODUwLCAweGQ2MzcxYTE4LCAweDczNzk3NjgxLCAweDBkODRmMzM5LAorCTB4YzE3ZDIxZmQsIDB4NWM3Y2E5ZGYsIDB4YjVmYThiZjEsIDB4MWJkMWZiMjcsIDB4YmNjOTFkYWEsIDB4MTVkYWY3MjEsCisJMHgwMTQ3NzViOSwgMHhiYmQxZTM5ZiwgMHg3YmUxZDBkZiwgMHhmOTNiMWQ4YywgMHgzZmNjM2JlZiwgMHgwNjJhZjIwOCwKKwkweDFhZjUxOWY3LCAweGQ0YTc1M2I5LCAweDBmZTkxNGZmLCAweDViZGU3NmUwLCAweDA1Mjg5MmZmLCAweDhiZjc5N2NiLAorCTB4YTc5YTlmYjEsIDB4NDg3NTNmNzksIDB4ZjU1NzE0NTcsIDB4ZmU4MzBlNmYsIDB4MzNkMzZjYmUsIDB4NGMwNTk3ZTQsCisJMHgyM2ZiMzc5MSwgMHg0YmQ0NmUyOCwgMHhiZWRjZWNiZSwgMHg1MGY3Y2QxMiwgMHg3NjA4NWFiYSwgMHg5NDIyMmUyNiwKKwkweDY5ZjZlYWJlLCAweGE4NWQzZGViLCAweDY3MGU3YmVjLCAweGZmZjllMGQ3LCAweDkwZTAzMWFmLCAweGJhNWYyM2Q3LAorCTB4OGU2N2U5ZGYsIDB4NmVlZmU0MjgsIDB4ZWY2ODI4N2QsIDB4MDU2YjBmZWYsIDB4NzdlYTBmOTYsIDB4NjNjNGNmYjgsCisJMHhlYWZlNGFhNCwgMHhmZTRkNTZkZCwgMHhhNmJiMzY5YSwgMHgxZGZiYjVmZSwgMHhmZWQ5ZWY5YSwgMHgxMWY3Y2QwYywKKwkweDdjOWE5ZGM3LCAweGE2ODE3YjVlLCAweDY0ZjdjOGZlLCAweGMwNTQ3ZTRkLCAweGU2M2ZhOWE1LCAweGVmOTM1YmJjLAorCTB4ZjRmNTg0Y2EsIDB4ZTlhOGNmNjEsIDB4YTlhMGJiMjQsIDB4ZDY2MWQ5M2YsIDB4NDY1ZDdmZjQsIDB4NjVkZjI2YjQsCisJMHhkOGEzZTA1MSwgMHhmYmZkYWE5OSwgMHhmZjZlNDJhNywgMHg3YzJhYTY4NiwgMHg4ZWQ0ZTE3ZiwgMHgzN2VkZmFhMywKKwkweDJiYzc2ODE0LCAweDVkZTNiNTkzLCAweDFkZjA1ZTI5LCAweGZmOWU5ZDQxLCAweGY4YTYwMjdlLCAweDM0YmEwOWZiLAorCTB4OTgwOWZiZmUsIDB4YzA0ZmRmYzcsIDB4MDEzZjdmMTQsIDB4ZTRkZDdmY2IsIDB4YTZiZWZjYTQsIDB4MDRiZmNhMDIsCisJMHhmN2U2MDk3ZSwgMHhlOTgyOWY4MywgMHg2MDlmZTBjYiwgMHg3N2UwZTVmOSwgMHhiOGY3MTk0YywgMHhjYTFiZWUzMiwKKwkweDRlMTUzZmI4LCAweGJkZmQyOTZmLCAweGVmODdmNGEzLCAweDNkZjRlYTBkLCAweDc5NWQ2YmRmLCAweGUzZTAyNWUyLAorCTB4NzQ2N2RiMjIsIDB4MDg2ZTU5NWYsIDB4YTMxYzYyOTQsIDB4ZTE4OTc1ZjMsIDB4ZjFlNjY3ZjksIDB4NDE4YTZmMWQsCisJMHhhMTgwMzZmZCwgMHg5ZGRjYzQ5ZCwgMHg2ZTNlZTI2ZiwgMHhhZDQzOGJkZCwgMHg4MWVmYWU3OCwgMHgwNzc4N2ZmZCwKKwkweDI3ZDg1ZmJmLCAweGYwZTZiYzUxLCAweGQ4OTFiM2ZlLCAweGMyOTc5N2NmLCAweGU5MGEzMGU5LCAweDdjZDdjODQ1LAorCTB4MGQ3ZTUwMmIsIDB4Njc3M2M3N2MsIDB4Y2E0YWY3OTMsIDB4YTQ2ZDY3YmIsIDB4NTU0Y2JlZWYsIDB4MmZiYTNlZjMsCisJMHhkN2IzZGVlZCwgMHhiODVhNzg4MCwgMHg3ZjdkMmY3YiwgMHhmMzVhZjgxZCwgMHhjZDc2Zjc3ZCwgMHg4N2Q2MmI3NywKKwkweDQ3Y2VhMTc0LCAweGY3Y2Y4NTcxLCAweGE5ZjlmZGFiLCAweDdmMmE0ZDdlLCAweGRkZjNmZTNmLCAweDQxOGU1NjQ3LAorCTB4NmFiN2JjN2QsIDB4MTdiNWM2MDAsIDB4M2IxMTM5ZWUsIDB4ZjFmMDA3ZmIsIDB4NjZjZjRiZDUsIDB4M2RhODFlYTIsCisJMHhkMWU3MjkyMCwgMHgwN2I1N2Y3OCwgMHhjZjllNGFmNCwgMHg2Zjc1MjZiZiwgMHg2MzM3OWUyOSwgMHhiM2JhMDQ3YiwKKwkweDRmNWIyNWY0LCAweGVlMTZjNGU3LCAweDcyODM1NWRmLCAweGVkYzY2MTc2LCAweGI1N2Y4YTdhLCAweDgzYmM0YTQ5LAorCTB4NjM1MGQzYmYsIDB4NmJhZWRjNjUsIDB4ZGYxMjNhZmIsIDB4ZGI3ZGZmYTksIDB4MWVmMWViZDEsIDB4MjNjMWM3NzQsCisJMHhjNzRjNWVmNCwgMHg0ZmUzNDkzZSwgMHhmMWNiMWQ4ZCwgMHhmNzJjNzYzYiwgMHg3N2RjYmVmZiwgMHgwOWNmMTIyNCwKKwkweDg0NzZkMDNlLCAweGE3ZTc1ZGMzLCAweGYyNTYxZmY1LCAweGJjMTI5MDFkLCAweGZlYjQ0YmY3LCAweGNkMjQ5N2Y5LAorCTB4YzBiODAxZWYsIDB4Y2RmYmExNzEsIDB4NzAyMmQzZmIsIDB4ZjhkYjI3NWQsIDB4N2Q0MGQzNzgsIDB4ZDU2YTc5NTAsCisJMHgxYmZmOWMxYywgMHhlNTNjZjJmNiwgMHhkZGZhMzI3ZCwgMHhhZWFiOGVhMSwgMHg3NjcyODVkYiwgMHhlN2Q0OWI2MSwKKwkweGQ4MzlmNzc5LCAweDk4ZWZjYzJmLCAweGViZTlkMzllLCAweDFiMWMyZmE5LCAweGMzN2Y3MDA0LCAweDc0OWIyMDM1LAorCTB4NjJhZjUyODQsIDB4YTU5YmQ3MmMsIDB4ZWEyYTRmMDYsIDB4NDcxNjkzOTEsIDB4ZmRmOWQyMDQsIDB4ODgxMWExYWUsCisJMHg2Mjk4YzNkZiwgMHhiYTQ5ZWJiOSwgMHgxZjYwYmUwNywgMHhiNWE0ZWYxZiwgMHhlZWU5MTIzZCwgMHg1MjExYmVlNCwKKwkweDJkY2JmZWYwLCAweGU5YmE3YWNhLCAweDVlNmYxYmJiLCAweDZmYjU1M2MyLCAweGU5ZmIwNWJiLCAweDlmMmYxZmMxLAorCTB4ZjU0YWQ2MzYsIDB4Yjg5ZGYwZGYsIDB4OTNhY2VkMDUsIDB4YzBkZGZjMTksIDB4ZmU0NjA2NjMsIDB4ZGMzZGMyZjUsCisJMHg3MDc5M2U0ZSwgMHhmYmUwZjZmMCwgMHg3YzE0ZDM1OSwgMHg3ZGYwNjQ3NCwgMHhmNWZiMGJmNSwgMHg3N2RiYmQ0YSwKKwkweDNkM2Q0ZDMxLCAweGVkNGVkN2M3LCAweDMzYmVhYzdjLCAweDVlN2RhMTBmLCAweDY3NDRiOGYzLCAweGY1ZjQ2YTFkLAorCTB4NGZmZWI4YjEsIDB4NTdlNzY5YjcsIDB4NDZiOWMwYWQsIDB4MGQ4ZDhmZWYsIDB4MDM5YWQ3YTIsIDB4MjE2MzdjZGQsCisJMHhmMmEwM2YzYSwgMHhhOWYwODM4OSwgMHg4NjY0ZjFlMiwgMHhlNzY1ZTdjNCwgMHhlY2Q1ZjhlZiwgMHhkZDc0NDVkZCwKKwkweGUzYzRiZTNiLCAweDMxZWY4M2I3LCAweDc0YmUyOTM5LCAweGI1NWE3ZjE5LCAweDJkZmM4MjFiLCAweGJkMjNiZGZhLAorCTB4OTg5ZTY4NmIsIDB4OWMxZjYzZDIsIDB4MWExZjk0MmUsIDB4OTg3ZTg3OWIsIDB4OTNjY2ZjOWIsIDB4MTg1YmVjMGMsCisJMHhlYmVkMTZiMywgMHg4OTFkZmEyOCwgMHhkNzZlMzhjZCwgMHhmZmJkM2QzZSwgMHhiMDNhNmI1ZiwgMHhlZjIzZGYwMCwKKwkweGMwYTMwMjcyLCAweGU5YjZiYmJjLCAweDQ2NjdkZmJiLCAweDYyOWU3NzNiLCAweGYwZWE3ZWU3LCAweDdmYTA0YmU0LAorCTB4YjQ4OTk3NmIsIDB4OTIzZDlhYmUsIDB4NWMxN2NmMGYsIDB4NTdkZWU0NTAsIDB4NDA2ZjkzN2IsIDB4MmUzOWFkN2EsCisJMHg5YTNmZDE1OSwgMHg3MGZjOTZkOCwgMHg3N2U5MmU2MSwgMHhkYWViNTdiMiwgMHhiNzVjOWRiOCwgMHg1OGJiMjA1YiwKKwkweDE1NmE0M2I1LCAweDYyOWNlNDNiLCAweGQ2NWI5ZjA3LCAweDU3ZTNlZGM5LCAweGVhMTFiNjA0LCAweDdiMDMwZGFkLAorCTB4OWI1ZGU2MDQsIDB4ZGFlYzg1MzksIDB4Y2FkZDY5NWEsIDB4NDczYzBlYzEsIDB4ZTYxYmI1YTUsIDB4ZTc0NDNjMWYsCisJMHhkMWNlYzBhZSwgMHhhZGRjMmY5NCwgMHg2OWI2ZDdjZCwgMHhmOGJmYWFmMywgMHgzYjZlZDhkMiwgMHgzN2ZhMzg2MywKKwkweDFjNjE1MjI1LCAweDBhOWJjM2YyLCAweGU3N2Y1NTVlLCAweGY0OWM2YmNlLCAweGU4MGYyN2ZiLCAweGI4ZDQ1MzFjLAorCTB4ZDE2YmMyMDQsIDB4YzdjYzJmMmIsIDB4YzI2YWZiNzksIDB4MzQ3ZmU0OWMsIDB4ZGFlMDk2ZmUsIDB4ZDdlZTE3ZjEsCisJMHgxYmRlZTA3NCwgMHhmMGUzMzNmMiwgMHhlOWNmZDhlZCwgMHhmMDVlOTE3YywgMHgyY2JhZWZlMSwgMHhmZDgxNWQ0MiwKKwkweDMyZGYwNDk5LCAweGJiN2IzYjhjLCAweDI5M2U0OTIyLCAweGNhMWEwOGU3LCAweDYzMmFmZmI5LCAweGIyYTYxODBjLAorCTB4ZTdmNzJjN2UsIDB4MzhlYWY1NDMsIDB4MGU4YTQwNWQsIDB4YjE4MTEzOTIsIDB4ZDhhZjU0MjksIDB4ZGU1N2NmYzAsCisJMHhmZDI0ZTExOSwgMHhlZGM0YzQzNiwgMHg2ZTI2MjFmNSwgMHg3NWQxMGZhZiwgMHg4NWRmYTMyZSwgMHg3ZGYwMjQxOCwKKwkweDY5OTdhYzhlLCAweDlkNmQ2MGZmLCAweDA0MTdmNjg1LCAweGUxMGU5NTdiLCAweDk1NTA3NmIxLCAweDg4N2RlOTBlLAorCTB4ZmQwMzJkYjUsIDB4OGM1ZjM1M2EsIDB4ZWM3YjMzZGYsIDB4NDc4YjUyODMsIDB4OGNlY2UzODcsIDB4MDQ3ZDk0MTcsCisJMHg3NGNiNGZhZSwgMHg5MDc0N2Q1NiwgMHg5OTZjNjU3ZSwgMHgzZGVhN2U2NiwgMHg3ZTdkOWZjYywgMHhhNTlmOTg1NiwKKwkweGVmODA3ZTY3LCAweDc1ZmY2YzI4LCAweDg2ZWM5M2FlLCAweGY3ZjUzMmE0LCAweDJlNDllYTFhLCAweDEyZmNmMGE4LAorCTB4NzAxOGJkZTgsIDB4ODE2Yzc3NDUsIDB4MWRiNjZhNmUsIDB4OTZiMmZmMjIsIDB4NzZjNGFmYjUsIDB4MWQ3YzkxYTUsCisJMHhiZWZlMDZhNSwgMHg0ZjE4Njk1MSwgMHhmY2I4ZTM3NSwgMHhhNWQyNTEyYSwgMHhjM2Y2YjRlMywgMHg3ZWIyNzE5MSwKKwkweGM2M2JhNDFjLCAweGYyZTM0ZGI5LCAweDc5OTUzZjY4LCAweDZmMGQ3ZDYxLCAweDQzZDY3N2YzLCAweDEzOTQzZWU1LAorCTB4N2MwZDdkM2QsIDB4NDY2ZmYyODgsIDB4ZDU0ZDYwYmQsIDB4YmY5YzY5ZDgsIDB4NmVhMmYxMTYsIDB4ZjZmODVhM2UsCisJMHhlYTI3YzQ5MywgMHhjNjZhY2MzOSwgMHhhMzY2N2JmOSwgMHhjNDFhOWFkOSwgMHhkZjkwOGIxNywgMHhjMzc3ZGVkMCwKKwkweDEzOGM3Y2JmLCAweGViNmFiZmYwLCAweGU5OTczYTdjLCAweGEyYjU4YzY5LCAweGZhNDhiNzVmLCAweDdlMjVmNjkyLAorCTB4ZGEyZGRmMmMsIDB4Y2RmYmNkYWYsIDB4MTFmZGZlOWMsIDB4MTk0OWY5MDIsIDB4MGRlM2JhZTMsIDB4MGE0OThmYzQsCisJMHgwOGY3NmM3ZiwgMHhmYjYwMGU3NCwgMHhjZjFlM2E3NywgMHg3ZTI4MTBhYiwgMHgzNjE0MzM3NywgMHg2MjQ5OTRkYSwKKwkweGJhMjJlYWJkLCAweGUzMzM3MjRmLCAweDRiNTk2MzQ3LCAweDNkYmJmMjhjLCAweDc5NmZiNDMxLCAweDliZWViMjkzLAorCTB4Mjg0M2ZlNzUsIDB4ZGJlYThlNTcsIDB4NzQ5ZTMxOTIsIDB4YzRlNGQ2YjQsIDB4MWI1OWNiZmUsIDB4YzE1YTZmYmQsCisJMHgxNTNkMjlkYSwgMHg5ZmEyZjc1ZSwgMHgyMjI2ZjczYSwgMHg2M2M5ZmRkZCwgMHhmNmQ2NzhhNCwgMHg1MDIyM2JlNSwKKwkweGU1YjE2N2JlLCAweDA0NGZkYzU2LCAweGI3YzZlYzUwLCAweDczYjNmYjAxLCAweGQ1MWRmNzQyLCAweDJmNjBjNGZiLAorCTB4MDI3ZDIxYzcsIDB4MWQyMTI3ZmUsIDB4ZDhkYzA3OWMsIDB4NWZiNzdhNzMsIDB4MjMxN2M3ZjgsIDB4MmM1ZjdmMTEsCisJMHg1Yjk2ZTE3OSwgMHg5ZDVmZmExOSwgMHhhODJkNDdlNCwgMHg1ZGY3NDY1ZiwgMHgzM2RhOWM4MSwgMHhhYWYwN2JmMiwKKwkweDViYzU1ZGUyLCAweGYwMWQ1ZTM3LCAweGIwYWYxODJmLCAweDkzODQwNGE2LCAweGM5MTk2NWY0LCAweGU4OTE3ZmE1LAorCTB4ZjBlNWQ2OWMsIDB4YmM3ZGMyYWEsIDB4MGUzYjlmODIsIDB4OGExNWY5NzAsIDB4YjcwZjE1NmYsIDB4NDNmNWJiZTIsCisJMHgyMzZlZWY0OSwgMHhjOTIzMzEzYywgMHhiODdhNTBjYiwgMHgzMDgwYmUxYywgMHhjNGQ5M2NlOSwgMHhhMWY5MjMxOCwKKwkweDRmMmU0NTgzLCAweDI4MTNjZjA3LCAweGYzM2I3OTVlLCAweGY0ODAxMmJjLCAweGY1ZjdmMDk2LCAweGM3MGFkZWZjLAorCTB4Yjc4Mjg1NWIsIDB4MmZkZjMxM2YsIDB4NzFmZjkyMzIsIDB4Y2UzMjNiNzgsIDB4NjA2ZTM0ZGQsIDB4ZTUwZGJlNmYsCisJMHhiMmY4ZmVkMywgMHgzN2ZjZTFjNiwgMHgxOGZhNWY1NSwgMHgzZjA4NjNmMiwgMHgzNzZiZjA4NywgMHgyZmYwOWQxZSwKKwkweGM2OWU4ZjA4LCAweDZlY2JlMjQ4LCAweGFlN2I0YjdjLCAweDdmZTIyZjRjLCAweDVmYjU4ZTMwLCAweGFmOTNmOWYwLAorCTB4NDYwNTVmODAsIDB4ZjhmOGJmYmYsIDB4NTRkZWFkMzgsIDB4YTVjMmE2ZjEsIDB4MDdlMGI4YmYsIDB4MmFkNDdmY2MsCisJMHhlNzBhYmVkMCwgMHg3NDhkYmJlMywgMHg1N2RkNDNmZiwgMHg1ZTRmZjc1MSwgMHg1Y2Y1YzcxOSwgMHhkODAxZmE2OCwKKwkweGI1NWZiODRiLCAweDQwZTRlMzI2LCAweDE5NGYzM2I0LCAweGZlZjg3ZWQ0LCAweGRhY2IwN2VmLCAweGI2ZjdmMTEzLAorCTB4ZTllMjI4M2UsIDB4ZGRmZjAzMjksIDB4ODcyZjM1MGYsIDB4MDdlNGI4ZjEsIDB4YzIyZjQ2ZjEsIDB4Zjg2MTAzZTksCisJMHgxZjMzZDQwNCwgMHhjZjVjZjcwOCwgMHgwNzA2NzFmMywgMHgyNmUzY2JlNiwgMHg1MzkwM2RlMCwgMHg3OThlMzU3YSwKKwkweGYwN2YxMmJmLCAweDhmOTQ3OWYxLCAweDAyN2FhNjJjLCAweDA3NGE1ZGZmLCAweGY2MWRkZWZlLCAweDE3MzYwODJiLAorCTB4YmI4M2U3Y2MsIDB4OWQ3ZGU4ZDIsIDB4NzE4ZDdkZWUsIDB4NDY3ZjBlZGMsIDB4ZGM3NzQ3NTksIDB4ZTI4MTVlZmYsCisJMHgzNTUxMzNmZSwgMHg4NGM0ZmVlMSwgMHg4NzdjMmUyZCwgMHg0MzdkZjRmMywgMHhiNGRmNjliMywgMHhlYTNlM2I0MSwKKwkweDk3OGE2NGZkLCAweGZlZTdlMDZlLCAweGFiZWE3NTJlLCAweGI3NWJmNDgyLCAweGM4YmUyZGJlLCAweGQxZTRlN2NiLAorCTB4YmZhODhjZWYsIDB4ODZkYjI3NDcsIDB4YzdkY2ZmNzMsIDB4ZDU1MGRmN2YsIDB4NWZjNzVkNjcsIDB4NzNjNzA0YjAsCisJMHhkZmUyNTMzZiwgMHgwZmUxZjlkZCwgMHhjM2ViMDUyNiwgMHg0ZGFkNGY0MywgMHgwZGFhN2VjNywgMHgwNWE3MmNkZSwKKwkweGIxZWU4NzdmLCAweGFhNWJiNDI0LCAweDRlOTU1YTlmLCAweDBmNTNmNGY2LCAweDU0NWZhM2E0LCAweGJhNmQ2M2JkLAorCTB4MGY3MGY5NGMsIDB4YmUzYTY1ZjksIDB4MWI5ZTJmZWUsIDB4ZDRmM2U3NDUsIDB4ZGNjYWY2ZmUsIDB4MWQzMGE4YWYsCisJMHgzZGJkNDEyYSwgMHg1NmFmZWFlNSwgMHhkYTQxZmVlMCwgMHhmZmM1MDI3ZCwgMHgxNWY2YjA2NiwgMHgzMzJiNjdhOCwKKwkweDE2YjE1ZjM4LCAweGU4N2ZjOTEzLCAweDc3NmJmNjhmLCAweDRlYzVmZjBkLCAweDY0NmYwNzk0LCAweDgxY2ZkNTljLAorCTB4MjAzZTEyN2EsIDB4ZDVkZjEwMzUsIDB4ZGZhM2FkZjIsIDB4N2ZjZDVjMDksIDB4N2VhN2IwMjcsIDB4NTZmZmVkMjIsCisJMHg5ZGU4MTcyZCwgMHhmY2Y1MTlhYiwgMHhmMWE0ZjM3NywgMHg1OWM3MDRkMSwgMHhkMThmYjNhYiwgMHg3OTRiNTdmYiwKKwkweDZmYTMxNGY5LCAweDY3ZWM0OWRmLCAweDNmZGY4MThiLCAweGUwOTRlZTY0LCAweGIyOTI3MGZiLCAweDlkNzMzODVmLAorCTB4Y2E3MTdiZjIsIDB4NjM5YjY5MzgsIDB4NTNhZjA3YjcsIDB4NTkxZGY2NTIsIDB4ZGYyNDc3ZWEsIDB4MzJmMDUwNmUsCisJMHg1Nzg5ZTk3NSwgMHg1NGVmZDBlZCwgMHgxZTNjYzdiZCwgMHhlOWIzYmZiZSwgMHg2MTlmYWE1YywgMHgzYTMzZjQxYywKKwkweGYwNjY5ODVmLCAweGQ3MWYzYTNjLCAweDcxNDhjM2JkLCAweGMxYWNkY2QyLCAweGNmZDQxYzUyLCAweDExYjQ1MjU5LAorCTB4YWI0Yjk5ZDMsIDB4NzI4ZjlkMWUsIDB4Y2Q5NGQ1YjgsIDB4ZjlmMjM1OGYsIDB4MTE0ZTA4MzUsIDB4ZWQ5MWY0ZTUsCisJMHhiODQyY2ViNywgMHg3ZmM0ZGY5ZCwgMHhmYjYxYWJmZiwgMHhjMmRkZmEzMCwgMHhhZmRlZTRmZSwgMHhmOWVmZjg5YSwKKwkweGEyNjRkZDNkLCAweDJiMjZkOWY0LCAweGNmZWJhM2MzLCAweGZmMjlkOTM1LCAweDRhMGU0ZGFmLCAweGNkM2NmNGQ5LAorCTB4ZDdmNGQ4ZWYsIDB4ZTE0Yjg4ZGYsIDB4Yjk3M2JiZjQsIDB4M2JmNGNkYWIsIDB4Mzk0NjBkODgsIDB4MmJjMDNjNzUsCisJMHgxZGRhYWFlZCwgMHhjMmViMjgwZiwgMHhiZGIyYjhmNywgMHgwZTExMTNjOSwgMHgzZTJjMGZiOSwgMHg3NWIzYTY4NiwKKwkweDdkOTdkZjNjLCAweDI0ZWFlNGYzLCAweDJjNzdkNjE0LCAweDdjYzRmMzNkLCAweDc4ZmI3ZWY4LCAweDI3MDgzNWY3LAorCTB4MTQ4YmI2ZDMsIDB4NjA3MjM4YTcsIDB4YmJjMjI1NTUsIDB4YWY5MTg3N2EsIDB4ZjlmNzU5NGYsIDB4OGY3MWU5NGQsCisJMHg3NWY5N2M2MiwgMHgxNjBkYzUzZCwgMHhjNGYzM2I2ZCwgMHg4NzdmMGMwMywgMHg5ODIxYjE3NywgMHhiZDc0YWZkZSwKKwkweDdlZTc4ZjU3LCAweGFhZjhlNWU2LCAweDc4ZmMzODNmLCAweDQ0OWI1YWJlLCAweGY4MDNiM2ZjLCAweGYzYTdmMzJhLAorCTB4Y2JhNWEyZDUsIDB4YzZjYjdlMDgsIDB4Yjg0MjZmYmIsIDB4OTM3YmQ3OWQsIDB4MGZjZTlmOTAsIDB4ZWU3NDRiMWYsCisJMHhmODIwNDU3ZCwgMHhkYmJjNzJhYiwgMHhiZmUwNTZhZiwgMHg1NzViNmM1MCwgMHhjNzIzZGM5OCwgMHgwNGI5NjFiZiwKKwkweDNlMDc0M2RmLCAweGY5ZmI0NzRkLCAweDNmZTVmZDliLCAweDYwOTdlZWI4LCAweDE4NjFmZWRkLCAweDFhNTEzM2FmLAorCTB4ZTBkZjNkZmEsIDB4ZjU4NGVhMTksIDB4M2VmM2Y3ZTUsIDB4NmFmMWQyZTgsIDB4NTM5ZjlmZmMsIDB4MzYyMTNmYzAsCisJMHhlNjIxOWRmOCwgMHhkNGY5ODI4ZCwgMHg2MWZjMTQxYywgMHgyNmNmYTg1OSwgMHhiZjQzYTY3ZCwgMHg4ZmNmZmMxMSwKKwkweDE5OGNlNzM0LCAweDlmNDgyOGZiLCAweGNiZGYzN2Y3LCAweDRmZDg3NWE1LCAweDFkZGM4ZjVhLCAweGZjYzg5ZWY5LAorCTB4NTQ3YjdhNDEsIDB4ODNmOThjMjAsIDB4NzNmNmVkYzYsIDB4ZmI0MGNjYTAsIDB4MTcyNGYxNGUsIDB4MmU3ODZmMTAsCisJMHhlMTgxYzJlYywgMHg5OWZmMzAzYiwgMHhjMmYxZTM4MSwgMHhmMTRmNjA0YiwgMHhmMjkzMTA3OCwgMHhkOWY5ZDY3YiwKKwkweDUwYjIyZjgxLCAweGI3YWU4NmNlLCAweDg4MmZlNWVlLCAweGFmZjY2YTNlLCAweGZhZDAyOGJhLCAweGNiYTY3ZjI3LAorCTB4MGZmYWZjYmEsIDB4MTY0NWY1M2QsIDB4N2QzM2VmZTIsIDB4YjZmZDFmMjAsIDB4MTY0MDg2MGIsIDB4YjdlZWExZTIsCisJMHg1OGZmOWU1YywgMHhmM2U1YTgzOCwgMHhmN2U4MWI1NywgMHgxMzA0ZWIzYSwgMHhmNDg5NDlkMSwgMHgyZTFmYzUyNSwKKwkweDg3ZjFlNzFjLCAweDkyNGYwM2JhLCAweGM4M2FlZDNjLCAweGM0OGI0MGUzLCAweDhjMzhkMmY2LCAweDM5OWZkNDliLAorCTB4Y2JhY2YyODYsIDB4ZTgzMWZkY2UsIDB4MmI3MWRlOWYsIDB4NDFlOGFhMWMsIDB4ZGUxMjY3NWQsIDB4NGRkODNiZjcsCisJMHgzYzhmZGMwZiwgMHgwYzNiZmM4ZiwgMHhmM2EzNjlmYiwgMHg5YzJiMmNiZCwgMHgzOWYxNWRhMSwgMHg3YzMwZjNmMiwKKwkweDI1NzkzMGJmLCAweGRmNzlmOWQyLCAweDhmOTQxY2MwLCAweGFkZmQ2NjZmLCAweGJmODZlMjhlLCAweGIyN2JhNzBmLAorCTB4ZTY5MjZkYjUsIDB4M2FmNzc5OWMsIDB4NzAzZjEyN2MsIDB4MjlmYjU0YzQsIDB4ZTdjMWM5OWMsIDB4MWI4ZTBjYjksCisJMHg4MzdlNmVjOCwgMHhiYTJlMTNlZiwgMHg3YjEzZjM4YSwgMHhlZDUzZjM5OSwgMHg3YjA2NDNmMiwgMHgxNWJiN2Y1MCwKKwkweGM4ZWQ1MjdlLCAweDFiZmZiZjI5LCAweDg1YjNlNWYxLCAweGQ1MDRmZDMyLCAweGZmYzdhNTRmLCAweDRjZjdmZTlmLAorCTB4MzM0MTJmZmYsIDB4ODAwMDYzZWMsIDB4MDAwMDgwMDAsIDB4MDAwODhiMWYsIDB4MDAwMDAwMDAsIDB4NWFhNWZmMDAsCisJMHg1NTU0NzAwZCwgMHhiZGVmM2U5NiwgMHhkZDI3NDlmZSwgMHgxMjQyMTM0OSwgMHg0MjA2ODQwOCwgMHgwMzYyMWE4OCwKKwkweGM0ZDY3MjgxLCAweDIwNmVmY2U5LCAweDZiMDFiYjMzLCAweDhkMDhjNDJkLCAweDc0OWQyNDIyLCAweDZhZWNlODgyLAorCTB4MDIxYTZlYjksIDB4MzY3NTY0YWMsIDB4MWQ0NzU5OGMsIDB4ODA5ZjliNDcsIDB4OTQ3NmVjMjgsIDB4MGRhMGMwNDAsCisJMHg2YmEyY2IwYSwgMHgzYTI2YWE0NSwgMHhhYjU0NWI1NSwgMHhhNmUwMGVhYywgMHhkNjNiODIyMywgMHgzYmU3YjhlMiwKKwkweDFkZGRiNWVmLCAweGE2ZWQ0ZmUyLCAweGVlN2RiYThhLCAweDllZTdiOWNmLCAweGNlNzdjZTdiLCAweDUyYjQ4ZjNkLAorCTB4NmEyMmNhMjIsIDB4MmEwOGNkY2YsIDB4NmVhNmZmMGEsIDB4NmQ0NDQ1YTIsIDB4ZjY3ZjI0MjksIDB4YWYxZjQ1NDEsCisJMHg3ZGJjNjRkMywgMHg1OGM5YTM0MCwgMHhjZTA4ZWI5MywgMHg0NzU0NDE5ZSwgMHg0NTlhMjZkZCwgMHg2NTQyODRiNCwKKwkweDI5YmY3MWE0LCAweDc5NWJjYmYyLCAweDZkMGRmZWJjLCAweDYxOTMxNzQxLCAweGIwNmFhZDFiLCAweDdhYTZkNTEzLAorCTB4MTMxNDM2MGIsIDB4YWFjYWFiMGQsIDB4MGJjYzYyODYsIDB4NGI5ZDJlOTUsIDB4N2VmZTBkZjQsIDB4ODc5Yjc0NGEsCisJMHgyYTIyNGY5OSwgMHhmNjBmMTRkMywgMHgxNjljOWQxYiwgMHg4YjVkYzlkYywgMHg0OTFiZmI5NywgMHhlYWE3OTg0ZCwKKwkweDUzNGY5OGYzLCAweGEzODI3YzA4LCAweGQ4MWQ0YjI1LCAweDk5NjRiNDY4LCAweDhlZWYzZTIzLCAweDA3ZDZkMjM3LAorCTB4ZDJhMTRlMzEsIDB4ZjlmNjEyM2IsIDB4Njg4NThmNGIsIDB4Y2IxN2QxMjEsIDB4NjUwZmFhMTcsIDB4ZGFhZTc5ZjIsCisJMHg1MTMzNzQwMywgMHgyOWVkNzY4ZCwgMHg3MGRkZjc4NSwgMHgwNTU2NGNjYywgMHhhZmJjNjdmYywgMHg2NzAyMzlmMiwKKwkweGZhNjVlYTM0LCAweDc5MGE0NzUyLCAweDRiY2VjY2FjLCAweDFiY2YwZjFlLCAweGQ4MjkzYjk5LCAweDNmNmZlN2M1LAorCTB4ZTc4OTkwYTAsIDB4ZWViMTFkYjUsIDB4NmQ3OWUxNGMsIDB4OWJiNjQ4ZTYsIDB4ZjAzNmRkZjcsIDB4ZGI4NzhiM2IsCisJMHgyY2Y3ZmVmNiwgMHhjZjU4YjlhZSwgMHg5ZTQzMzY0NywgMHg2ZGZhMTUxNCwgMHgxNzRmZjI3NywgMHhjZTYwN2Y5MSwKKwkweDNmMzE3N2ZiLCAweGY0NGQ2OWZmLCAweDY3YmQzN2VkLCAweDA1ZDdkNjIxLCAweDVhZmQ4ZjllLCAweDgyZDVmNjBlLAorCTB4NTZmMGE1NmUsIDB4M2NmZGRhMjcsIDB4OWJiZjQ4YWYsIDB4ZTVkZmY4NmYsIDB4YjM4NjU3NWMsIDB4ZjhiZTdlMzgsCisJMHhhN2EyNWQzOSwgMHg2OWY4YmQxOCwgMHhkNjAyZjczZSwgMHg0M2ViNDY4YiwgMHgyMWVlNTk3NiwgMHg2ZTcxN2I5NiwKKwkweDI1MmU4ZWNlLCAweDVmYWU5ZDcxLCAweDRiNjk3NjhmLCAweDlkMTVjYjBlLCAweDY2MTViOGE5LCAweDZjMGQ0ZDE1LAorCTB4ODUxZjQyNzYsIDB4MTc5N2IzOGEsIDB4Yjk3ZjVmNDcsIDB4OWJmNDJkNzQsIDB4OWRiZDJjMTIsIDB4OTBiNTE3Y2YsCisJMHhjN2UyYzdkYywgMHgwNGI0OWJiNiwgMHg2YTBmMTY3OSwgMHgzNDQzZGMxZSwgMHhjOTBlOWE5NSwgMHhlMmE3N2JiZCwKKwkweDYxYmNhODNlLCAweGQ2MTI2N2E5LCAweDJiN2JiZThkLCAweDc5NTUxOTZmLCAweDczZmFmZGJkLCAweDc5NzVjYTA0LAorCTB4YzlhOWIwY2UsIDB4ZDc3MjFiN2QsIDB4ODBlZGU1ZTcsIDB4YzQwMGQ5ZmUsIDB4ZmFhOTRlOGUsIDB4Yzc5NTFlZmUsCisJMHhiZmQ3YzdlNywgMHg0NmE3OWM2OCwgMHhmMDg5Y2UyYiwgMHg5ZGM1MDZmOCwgMHg5ZjY3MWNlMywgMHhmNTg3YmI1OCwKKwkweGU5ZWY4NmJlLCAweGI0NmZiZTQ1LCAweDY5Mzg3NTJmLCAweGZkYTI2Y2NkLCAweGZmNDJiOTFkLCAweGRhNGI4NzczLAorCTB4ZjQ5MTQ3NTAsIDB4MTZlMWQyYmYsIDB4MmRjNzYwZmEsIDB4ZjBlYTFmNDIsIDB4NTFkMDNkMDgsIDB4OGVkMWVkMjcsCisJMHgwMzNmZTkwNiwgMHg3MDhjZmY1MSwgMHhlMmVjMjBhMCwgMHg0YTZkN2MxNCwgMHgxY2NlMWU5YywgMHg5ZTQ5NGY0MywKKwkweDI0YTk5YzNmLCAweDk5MTQ1M2QzLCAweDNjYjg3MGZmLCAweGE1ZmE2MDE4LCAweDkzOWNhNzMyLCAweGMwZDFjYThkLAorCTB4NGI0ZTY4ZmEsIDB4YjQwY2ExMmYsIDB4Njc0YTQxZjksIDB4MDM3YmIxYmIsIDB4M2ZmYmI2MWUsIDB4NDNkYWVkZDQsCisJMHg0YmNmYzUzMywgMHhmMzNhYWYzMCwgMHhkYmY4NDZjZSwgMHg2OTJiMmNlNSwgMHgxZWMzY2ZhYywgMHhkZTYzZGZlZiwKKwkweDA1NTVkM2U5LCAweDY4M2ZkMWRiLCAweGZlZjk1YjczLCAweDk0ZGM1Nzg3LCAweGZmNDdiZDAxLCAweGI3OGQyMzRkLAorCTB4YjA1YTI4YWUsIDB4MGFlOTk0YjksIDB4Y2M3NjIyYmIsIDB4Yzg2ZTZlZmMsIDB4NGZjNmJiNjYsIDB4YjgzNTUzZTYsCisJMHhlM2E0ZDRiYSwgMHgwMmI2NzM4NCwgMHhjMWFlYjdmZCwgMHhkYjI2MWIzZSwgMHhmYzc5NTgxNiwgMHg1N2Y3Yjk0YSwKKwkweGY3YTYyN2Q4LCAweDBhZWIyOWRhLCAweGQ5OGJkMGJjLCAweGYzY2FiZWY1LCAweGE2NmVmZjAyLCAweDgwZjc5ZTVlLAorCTB4ZGY2NDlkYzMsIDB4ODIyYmNiNDcsIDB4NDVjNTliYjAsIDB4MDdjZjM2YjMsIDB4ZDliYTc2N2YsIDB4ZjViYjNmYmMsCisJMHg1MWU3Yzg3ZSwgMHhjMTRlOTRkMywgMHhiODA5OTczMSwgMHhmM2ZkYzQxMCwgMHg0NTJlOTUzZSwgMHg3MTZjMzBlYywKKwkweDdmOTkzMjk5LCAweDJiMjJiNTM4LCAweDE5NGVlYmMwLCAweGI4ZGE3ZGY3LCAweDdkYzYzM2VmLCAweGQ1ZmRjM2JmLAorCTB4ZmRjYmJlZGMsIDB4MWZiODg3NjgsIDB4OWU5ODhhZWQsIDB4ZDA4NWEzNGQsIDB4MGRhN2YwNWYsIDB4ZWY0NDc5MmYsCisJMHhhM2EwZjlhMywgMHgzYjBlNWE2NiwgMHhkMzNmMDI1YywgMHg4MWJmMjdmMSwgMHg1Y2EyNzhlNSwgMHgwMzZlZTM5NywKKwkweDZiNmU4NjdmLCAweDg1ZDdkM2U4LCAweDg1OGI0Zjg0LCAweDRiZmZiMGJjLCAweDlmNjA5ZjU4LCAweGY1ZjE3NWIxLAorCTB4OWJiMmVkMjQsIDB4ZTdjMjkwMjksIDB4MjBiNmMzYTAsIDB4ODk1MzQ0ZjQsIDB4MGVjYjVmODAsIDB4NjkyZTA4ZTcsCisJMHhjZjhhYjMyOSwgMHgwMTdhNjQ0ZiwgMHhhYmQyOWUwOSwgMHhhZTVlN2Q1NiwgMHg4NWZjMjE2YiwgMHg4Y2ZiMjQ3NSwKKwkweDk5ODBkNTA0LCAweDM5OWZjNGVkLCAweGYyYzk5ODU0LCAweDE2N2UxODhlLCAweDQ5ZmQwZmEzLCAweGNmZjZmYzEzLAorCTB4ZDdkYjlhNjcsIDB4ZmU3Y2ZkMTQsIDB4MTM4NTQzNjUsIDB4YTliMTVlYjAsIDB4NGVmZjMzYjAsIDB4ZTFhY2ZjN2QsCisJMHgwNjk5ZmU4NywgMHg5NDNjZTMzZiwgMHg3ZGM3Y2ExMiwgMHhjZTFkOGY0NCwgMHgyZWU5ODdiZiwgMHgxZWFkNzg3YiwKKwkweDgyODVjMjA3LCAweDVjMmUxNGRmLCAweDQyNTQ5YzA2LCAweGQ0NGRjOGU3LCAweGFmN2RmYzc3LCAweDQ3ZDAyN2U5LAorCTB4ZmRkMDc5ZTgsIDB4ZDNhZjdmYzcsIDB4NjczOWRmNGEsIDB4NTBhNGY4ZTIsIDB4ZmQwNGUyYmUsIDB4M2RmNzQxODEsCisJMHg0MDlkYzEzZiwgMHg4NzM5NWY5YiwgMHhkZmE2Y2I3MSwgMHgzMzI3YWI3YiwgMHhhNzgzNTg2ZSwgMHhmZjM3NjAzYiwKKwkweGVkOTdkYmEyLCAweGQwMjdmZjQwLCAweDJiMTFjYjViLCAweDBmMmIyZWMxLCAweDBhZjY3ZmY0LCAweDNiZjRiNzhmLAorCTB4YThmYjgwZGMsIDB4YmJlODg2NjcsIDB4YzdkZWM4ZjMsIDB4N2QyMzZmNjEsIDB4YWU4N2YxNjYsIDB4ZmU3YmJmZmQsCisJMHgyNTY3OTkxMSwgMHgzNWJkNWI5OCwgMHhjZmJjNGE1NCwgMHhlMzdmZTNkMSwgMHhiNDlmNjEzNSwgMHg2ZmQwMTVkMCwKKwkweDM5MTc5YzU3LCAweGZlZWEyN2VhLCAweGE5ZjE1NDNkLCAweGY1YmQwMDM3LCAweGM0NmJmODFmLCAweDBhMGNmYWI1LAorCTB4NjVlOTZlYzAsIDB4ZTQ2NjQ3YmUsIDB4NmE4NmY1N2IsIDB4Yzc3MWUxMmEsIDB4NmZmMDRhZDAsIDB4ODZlYWM5N2IsCisJMHhjZDVlZmE5ZCwgMHg1ZjFmODRhOSwgMHhmYjE0Y2NmMywgMHgzYmIxYmU2YiwgMHgzZDU3NzExZiwgMHgyM2NmNmZiYSwKKwkweDIzNjc5ODU5LCAweGM5OWVkYmM4LCAweGY1N2FjNDc2LCAweGRkMTYzYjY5LCAweDZiYjdmNzJmLCAweGY3MjA2ZmNmLAorCTB4NjRlZDFiM2UsIDB4MDNjY2NkM2UsIDB4OTllZjM1ZmIsIDB4ZDFmMDBjMWQsIDB4ZTNmYWZiNWUsIDB4MWE4N2I4OTUsCisJMHhlODNkYjllZCwgMHhhNmRiYjJiZiwgMHgyZDY3MGY0MiwgMHhmODcyOGM5ZSwgMHhiYmIzNTllMSwgMHhiYTBjZWIxNywKKwkweDJlYTI3ODc5LCAweDU2YTQ1YTRmLCAweDNiYWIyZmVlLCAweDM3ZDc3MTFmLCAweDgwYmZlMWYxLCAweGY3NWFmNWRjLAorCTB4M2NlMmNmZjMsIDB4Mzg4NGFkN2IsIDB4ZWIxZjYxNzEsIDB4ZTg1ZGQ3OGQsIDB4MmRjN2NmMzUsIDB4OTg3M2VjOGYsCisJMHg5NDk3MmY2MCwgMHg4MmNmOTVlZSwgMHhlZjNlYWY3ZiwgMHhmNDViYWQ5MiwgMHg0MzlkZTgxOSwgMHgxMWU3OGZkOCwKKwkweDY1MjVmMmUyLCAweDg1ZmY1MjdiLCAweDVlMjViZGRlLCAweDk3YzVkZmQ2LCAweDA5YmQ4YmVhLCAweDE3ZjMxYmY2LAorCTB4NTI2YjZlZGYsIDB4NjAyNDE0N2MsIDB4YmYxOWYyNWMsIDB4M2IyMDE5YzksIDB4ODM2NmRmYzcsIDB4OTllODc4YmMsCisJMHhiZTI5Njc5MSwgMHg3MzdlZTJmZSwgMHg2YTNhYzJkOCwgMHg5NGU2ZDJiNiwgMHhmODNmYjhjYywgMHgwZWJjZmVmMiwKKwkweDNiYTlmM2U3LCAweDM0Yzc5MTBhLCAweDg0YWM4ODJmLCAweDUxYjA1YzVmLCAweDdiY2YyZTRhLCAweGJlNWY4OGRiLAorCTB4MmE5NzFiODMsIDB4NGYyZGRmMjUsIDB4YzdlZTg1NGQsIDB4MzhmNTczNTcsIDB4MTZjMDc1NzYsIDB4MWRkZjI4MGMsCisJMHg4M2EzZmU4ZiwgMHg4ZWNjZWY5YywgMHg2N2FmNzdkMywgMHg3ZTcxMjk3ZSwgMHhhZDQyNWI2ZiwgMHgyZGI3ZGU2ZSwKKwkweDczOGZjNzUzLCAweGUzM2Y3ZjNjLCAweGNmYjE5NTU4LCAweGU3OTI4N2FhLCAweDI5OTE1MmRmLCAweDg5NjZkM2Y2LAorCTB4YzYwZTIyMTQsIDB4ODhhYzJmZjgsIDB4MTBhNDVhZTEsIDB4NWQ3NjM1NzgsIDB4ZTAxM2QyM2QsIDB4ZTA4YWNiYzgsCisJMHhmMmEwZWY4OCwgMHhhODZlOTZhMSwgMHg0ZmFlM2IzNCwgMHhhODIwNGE1ZiwgMHgwZjdmOGM5NSwgMHg3YjhjOGJiOSwKKwkweDU1ZWY1ZTYwLCAweGRiZTU3ZWU4LCAweDk4ZDhmMzZmLCAweDI0NmE0YjRmLCAweGFiNTM3OTFkLCAweDdjOGU5MjIzLAorCTB4NDZhOGU0NjgsIDB4Y2JlYjhkM2IsIDB4MTk5ZmYxOGEsIDB4NDY0OWFmZGYsIDB4ZjY2NDNmYjgsIDB4OGZkYmM2ZDgsCisJMHg2ZjNjNDM4ZiwgMHgyYWIzN2UxZCwgMHhmZGQwYTkzZSwgMHg0ZDIwNjlhNiwgMHg2NDY3MjNmNiwgMHhlOWI2ZWMxMSwKKwkweDM4NzVlNGI5LCAweDFmYzEzM2E3LCAweDY1NzYwNjQ3LCAweDhmZTIxMzdiLCAweGFhM2I5MGNmLCAweDEzN2UyODdjLAorCTB4N2NhM2ZhZmQsIDB4YTU0ZjgxZDgsIDB4ZjZhYjBhY2QsIDB4NjViMWFmMjIsIDB4M2EyOTRkMGEsIDB4ZTViMWIwMWQsCisJMHhhN2I0YmVmYiwgMHg1ZTJlN2VjMiwgMHgxZTNmMTU2ZCwgMHg3MzgyMjI1MSwgMHgwYWFlMjdiOSwgMHgyMzk4OGMzZSwKKwkweGNhOGU3MzgyLCAweDE4ZmMxMWZmLCAweDA5NTkxMDk5LCAweGI0YWRjYWRjLCAweGM5ZjE5NmFmLCAweDFlMmU5NTkxLAorCTB4YTBjMmIyZmYsIDB4MDNlNDkxYTcsIDB4NTczMjI3ODUsIDB4YjVlYTRmMDMsIDB4MzcxMWI3ZDEsIDB4MDlkOTk3NjksCisJMHg3YmU5ODkzZiwgMHhhMjI3YTE5ZCwgMHg3ODNiODZjNywgMHhiMzQxMGZmYywgMHg0ZTYxZjEwYiwgMHgwYmU0NjJhNSwKKwkweGI1ZjlmODk2LCAweDkwOGQzZmI4LCAweGY4NDFjMGViLCAweGRkZGQ5MzY3LCAweGZkYzFhMzJiLCAweGJjMWYyMGFmLAorCTB4ZTVkZGRiMzMsIDB4MzI2ZjVlYmEsIDB4Y2FjYWU1ODcsIDB4ZWUyZDZhZmMsIDB4ZmJkZDNiMjksIDB4ZGZjYzE1OGYsCisJMHgwN2M5MWM1ZiwgMHg0YmI1YjFjZSwgMHhkZDdiNmExYywgMHg0N2ZiMTNiYSwgMHg4MDdiYTNjZCwgMHhkZTFjMTc1ZiwKKwkweDlmNTgyYjI3LCAweGFkYTE5NmFkLCAweDY3ZDIyY2E1LCAweGE0MjljOGU2LCAweDZmNjA0YmY4LCAweGJkYmEyMzgyLAorCTB4YjJlZjE0OGQsIDB4NTYxZTlmMDgsIDB4OTc2N2ViMmEsIDB4NGI5NDBmNzEsIDB4YTFmNjAzYjQsIDB4ZTZmY2Y3ZTgsCisJMHgwMGVmYWJjMCwgMHg2Njg2NDY2ZiwgMHhmNThmNGUwOSwgMHg0ZjAzMGJhNywgMHgzZTM3MDNhNiwgMHg5ODFlZjhlMCwKKwkweDYwZmZlZjEzLCAweGZhMGI1ZWY1LCAweGMzYjhiZjk3LCAweDllZjZlMTEyLCAweGJiZTdjOWNkLCAweDBjZjZlZDdjLAorCTB4OWUzZDBiZjgsIDB4ZWM3YjBmZDAsIDB4ZWFjN2E2NDksIDB4NGUxOTc2MDUsIDB4ZTg4MDgzZjIsIDB4MjljNzljZmQsCisJMHgwZTU0YjdmMiwgMHhkZjBmNDFiNSwgMHhkNjk4Y2JkMiwgMHg2MzEzZTgxMiwgMHhhOWYzMzFlOCwgMHhjZTFmY2Y0MSwKKwkweGI2Zjg0ODc5LCAweDQzMGYwYjRlLCAweGNjMDcyMzZmLCAweGU0ZWY3YzA0LCAweDdmNzQyNmI4LCAweDFhZWYxMDVhLAorCTB4YWRjNzAwZjUsIDB4MjE2ZTNkMmMsIDB4MGZhNGI0NWUsIDB4OGNiZGM0YWQsIDB4OTg5ZDViZjQsIDB4YTdjOGU5YmYsCisJMHhkYjNmMzhmOSwgMHhkYmNlM2U2MywgMHgzNjcwZTQ3MiwgMHhmNzhkY2VjMSwgMHg2Y2M3YzcwNCwgMHgxZmY0Yjc4YywKKwkweDI0YmJjNmM5LCAweDg2YWFkZmQ2LCAweDQ3MTcyMTBhLCAweDQ3ZTAxMmI4LCAweDg1YWZkZmFjLCAweDhiN2YyMTBiLAorCTB4ZjE4MjU0MzIsIDB4Zjk5NmU0MjgsIDB4NDlhMDZiNGMsIDB4ZThhYWQxY2UsIDB4MzQ0NzRmN2UsIDB4ZjdiMWY5YzEsCisJMHg2ZTg1NTFmNiwgMHgyNTBmOGNhZiwgMHgxZDM3MDdjOCwgMHhiMTEyNTRiZCwgMHhkOWEwZjFjNywgMHhlODEzOTVjMCwKKwkweGRmZmRkNjJmLCAweDA5YzBjOGI5LCAweGJmMGNkYTVlLCAweGJjMjcwNzFmLCAweGY1YTNkYzMxLCAweGFlN2RjODE2LAorCTB4YjYzYjk3NDIsIDB4M2JjYWY4NWUsIDB4NmRlMzIwMjMsIDB4OTkyYTVkYWYsIDB4YzY3NThjNTksIDB4YTNjMDRhM2MsCisJMHgwMTdjNzE1OSwgMHgwZTBhZTQwZSwgMHhmMzY3MzI2YywgMHgyYmNmN2NiOSwgMHhkMjVlNGVlZSwgMHg5NmIxYjhkYywKKwkweGQzM2FkM2E3LCAweDZiZDBiNWZkLCAweDVkZTQwNTEzLCAweGIxYWU1NjM3LCAweDg1NzBmNDc2LCAweDU1M2ViZjdlLAorCTB4ZjZmYjhmN2YsIDB4OTY0ZWMxMjgsIDB4N2Q2MzIyZWIsIDB4OWJjMTdjZWUsIDB4NWQ2N2YwMzAsIDB4Zjg1YWM2ZjUsCisJMHg3ZTU5N2RkZiwgMHhmOWJiZTI0YiwgMHhlZGFmZjg4NywgMHhhZGQ3YTY0OSwgMHgzMzliNThkZiwgMHgxZWZiOWY4ZSwKKwkweDEyNmE3ZWRhLCAweGQ5YWZjZjVkLCAweGRiMzZhM2JiLCAweDRjN2Y3ZDc1LCAweDk4YjY4YmVlLCAweDQ5ZTY5NTljLAorCTB4YmU1OGZhODksIDB4YjcxMjc2YjEsIDB4YWZmZTUyZWIsIDB4N2RjZmQwZmEsIDB4OGMzNTg4ZjEsIDB4YjVmYWNiYjgsCisJMHhmZGI3ZmNlMCwgMHgwOTI1YmQ3MSwgMHg1ZjgwN2ZiNywgMHg5ZDZiMDUzMywgMHhmZTViYmUzMywgMHgxMmFiNmRiMSwKKwkweDRmODA1NjFlLCAweGUyYmQ1ZmVjLCAweDA5MzdlYzY3LCAweDE4YWE2ZGZiLCAweDVhNjhhNzUzLCAweDM3NzkxZDNkLAorCTB4NGY0ZjU3NzksIDB4NmQ4YzUzYWMsIDB4YThhNzI4MTksIDB4NDliZDg4YjcsIDB4ZDJiODdlY2IsIDB4NjIzZThlM2QsCisJMHhkNGFlNmZmMywgMHg4NjRkOWY2NCwgMHg2ZmE5NGYxZCwgMHgxZTE1ZTY3OSwgMHg1M2NjYjk3ZiwgMHg1NTdlYzk1NiwKKwkweGJmOTJhOWFlLCAweGE2YTdkZDhmLCAweDg2MGZjZjUyLCAweDgwYmYxZGIyLCAweGNkMDc0NTNkLCAweGI5NDlmODRlLAorCTB4NGYzM2ViYTYsIDB4ZmMyZWZjYmQsIDB4ZTFkYjJmMzEsIDB4MzU3ZTY0ZWEsIDB4YmNmYTY5NTUsIDB4ZWEyNzM2NjMsCisJMHg1ZjYzZDE0MCwgMHhmZmUwN2JlNSwgMHhhNWNiZWM1YiwgMHhkM2IyNjJjZSwgMHg5NTNmMWU2NCwgMHgzZGYwNTczYiwKKwkweGM2YzdjZmI2LCAweDdhYTU2OTNlLCAweDY0NWVkM2JlLCAweDUzM2FmZWZlLCAweDNhZGJlM2IxLCAweGM1MWJlNDkzLAorCTB4MTJkOWMxNjksIDB4Zjg5MGJmODcsIDB4ZTg1YzFkMTYsIDB4ZjdjMDVjZDQsIDB4ZDZmZTFkYTAsIDB4Njc3ZmY1ZmUsCisJMHgwYzhmMGUyMywgMHgwYmJhNjdmZSwgMHhkM2VkNzViOCwgMHhiNmNmZDg3NCwgMHg4MWQzOGY4MSwgMHg2NjA2MjcwZiwKKwkweDFkOWVkMDM5LCAweDFmZDAzOTcyLCAweDE2YjhmYmFkLCAweDM2OGNiYWYzLCAweDhiMzA2NzVlLCAweGY2MzZiMTljLAorCTB4MTNkNThlN2UsIDB4Y2RkMWRlMTIsIDB4NzNhZjZiZDAsIDB4NjE0YjJmZGIsIDB4ODJkZGE5ZWYsIDB4Y2U4ZWZjNjMsCisJMHhkNzg4ZmM0NCwgMHhlMzM5NWMxOSwgMHhlYjEyNjVkNSwgMHhmNWIzMDUwYywgMHhkNDVhMDMzYSwgMHg3YWNjMGExOSwKKwkweGVhMzQwMTlkLCAweDY3NTE2ODBjLCAweDBjZWEzZjQwLCAweDAwNjc1MWEwLCAweDY4MDMzYThkLCAweGEyZDAxOWQ0LAorCTB4MmJmZTgwY2UsIDB4YmNiMTZiYTgsIDB4NTBkZTRlNTEsIDB4ZWNkMWFhZGYsIDB4ZjQwZmZmODIsIDB4ZjVlNDQxNmEsCisJMHg3NGQzMWMwZiwgMHhjNDEyODc3YSwgMHhmYmM2N2Y3ZCwgMHhhZjQ2MGUyMywgMHgyOGIwNzVlOCwgMHhlNzc5NTNjNywKKwkweGZiY2IzNDFmLCAweDVlZGExYTIwLCAweGQ2ZjcxMzM3LCAweDU1NzFiOWFmLCAweGQ5MzcxMTE3LCAweGEzY2RkYjE0LAorCTB4NmExZjUxMjcsIDB4MWJkYzUzZWYsIDB4MmU1ZmU4NWQsIDB4NWMxYjZjNzIsIDB4ZmEyMzdlZjgsIDB4ZDU2ZWNkN2IsCisJMHg5YWJhZmI4NSwgMHg2Zjk3ZmE4ZCwgMHg1OGVhNTdiMCwgMHgyY2M3MzlkNSwgMHgxNWZiY2Y3MiwgMHhlZmZkZTFjYSwKKwkweDY0ZWZlYWIwLCAweDJjYmRjNmJmLCAweDk1NDViMGY3LCAweDFkNmZkYTNjLCAweGNiNGJmNzkyLCAweDRkNzM4YThiLAorCTB4N2VkYTFlNDIsIDB4MTM4MmU3Y2IsIDB4OWRmNGI2OWQsIDB4YjIxZmQ3OTAsIDB4YzUyNGQ3MzksIDB4N2RlNDhmNTcsCisJMHhjMTc0ZmM3ZSwgMHg0NTQzM2M4ZCwgMHhhN2Q1YWY0YywgMHg3YjVlZGY5MCwgMHhmOTIxMzgwMSwgMHhiNDdlNDI0OCwKKwkweDMzZmNkOWQ2LCAweDVkYTQ2N2U0LCAweDdlZmNlMTMzLCAweDY0NGVlODdlLCAweDZkM2RkNmY5LCAweGIwOTIyOGZlLAorCTB4OTkzMDczN2YsIDB4NmRmNjBkZjYsIDB4OTljODIzY2QsIDB4MDM0YThmZGMsIDB4OTQzZmIyZTIsIDB4NzRhYTFmZGMsCisJMHhjNjkyN2Q2NCwgMHgzY2QxZTYzZiwgMHhmZjc1NWJlNCwgMHgzZjQwZTZiNCwgMHhkYmI5NzdlZiwgMHg2MWNhZjkyYSwKKwkweDI1NzBmNzhmLCAweGIzNDlmMWZiLCAweDI3MmZlYTQ3LCAweGJkZTRkOThmLCAweDljZmI3ZTc1LCAweDhkNGJmYWE0LAorCTB4MWZlYTU1MzYsIDB4YzQ4YWNjMWIsIDB4ZGVlNTJiZjEsIDB4YWFjYmIwNjMsIDB4ZWVhNTdiYmEsIDB4MTBlYjk1NTIsCisJMHhlMWQ5OGU3ZiwgMHgzNzg2ZjJkMSwgMHg1Y2MzNzdjMCwgMHg2YWJmZDQ5NywgMHhlMTBiZjRhYywgMHhmNzJmN2VjNywKKwkweDdmMTY2ODNjLCAweDgyNTRlOWFiLCAweGM5YWJkMzJhLCAweGFkN2Y4MTZkLCAweDNkOGE3NTYyLCAweDI5OGZlZDk5LAorCTB4NzhhYjBmZWMsIDB4YmIwNGM2YWYsIDB4OTE1ZGIwZGEsIDB4MTAwYTQyYmMsIDB4ODY5NWU3YWMsIDB4ZmUwZDU3M2UsCisJMHhmYjBhNTdlYiwgMHgzZDU2YmRjYiwgMHg1NTUzY2UwZiwgMHhjNWQ3OWZlMSwgMHhkZmU3OGI3MSwgMHhmYzBiNWU0NywKKwkweDU1YzcxZDY2LCAweDVmNjcxY2I0LCAweDM3YmY3MDhmLCAweDllYmU2YTZkLCAweGMwNzJiYmU3LCAweDMzMTlmNTdmLAorCTB4NzI2YTRmMDEsIDB4OTVlODVlN2UsIDB4ZmNlZDVmNzgsIDB4MDk1YmVmODQsIDB4NzM3ZGE1ZGYsIDB4YThlMWY3ZDMsCisJMHhjODQ5M2U4OSwgMHg3NTlhNGY2YiwgMHhjYTdkNjFmYywgMHhlYzE0ZWI3YiwgMHg1ZTNlZWE1NSwgMHgzNDc0Y2Y2OSwKKwkweDhjYTJiYjQ5LCAweDM0MGJmZmM0LCAweGUwMmY2ZjNkLCAweDRhNjY3MmJiLCAweGViMGZhMmRkLCAweDZlZWRkYTZiLAorCTB4MGI4NjNmZTgsIDB4YmVmYzhkYmIsIDB4ZTc5NmU1NDAsIDB4NWJkNTRlZWQsIDB4ZGMyOWQzMGIsIDB4Y2E1YjhkM2YsCisJMHhlNzYxN2UxNCwgMHg1YzcxZDQ3YywgMHgzZDRmM2ZjMiwgMHg3ZDA1YzBiYiwgMHg0Mzc3Njk3YywgMHhjNzM5MzUxZiwKKwkweDMxZGRlMWU2LCAweDcyZmZlMGNiLCAweGRjNTVjMzU5LCAweDAyOWQyNzk3LCAweDQzOGY5ZmQ4LCAweDVhZGZhY2RkLAorCTB4NWQ0MTQ4MWMsIDB4NTBkMWU0M2QsIDB4MzhhNjNmMjcsIDB4MWViZmFlZjEsIDB4NzE2ZmI3NGYsIDB4MTQwYWNmYzIsCisJMHhiNWI3ZWEyNywgMHhkOTM1ZGRhOSwgMHhlNjc2YmZjYywgMHg5Y2YwMzcwYywgMHg2MWVhNTVmMSwgMHg3NmVhZGMyMywKKwkweDUzNTA2YjcwLCAweDZjYTZiNWY0LCAweGZmMGRmM2Q0LCAweDU0YTZmNzI5LCAweGQ3Zjc4YTRkLCAweDFkMTQ3ZTFiLAorCTB4ZjExZDIyZmMsIDB4NmRkNDQ3ZjUsIDB4ODA3ZjgzNzcsIDB4ODM1ZWVlNmMsIDB4ZmVhMGVjM2YsIDB4YmY1MjY5YTYsCisJMHhlNWQxZDk4ZCwgMHg2MTNiMzlmZCwgMHhmNGFiNTM0NywgMHhlZjhkOGQ3NSwgMHgwYzRmOTE5OSwgMHhjMWNkZTZkZCwKKwkweDdjZDcyYmZlLCAweGNlNWIyNWJlLCAweDhjYmQ3ZTM5LCAweGI4MDMzNzcxLCAweDE2NWViNjNiLCAweDQ2M2RmMWMzLAorCTB4NmI3ODFkZmQsIDB4MjZiYWVhMzIsIDB4MzI2YmFlYTMsIDB4YTMyNmJhZWEsIDB4ZWEzMjZiYWUsIDB4YWVhMzI2YmEsCisJMHhiYWVhMzI2YiwgMHg2YmFlYTMyNiwgMHgyNmJhZWEzMiwgMHg5N2FlMTNhOSwgMHg4NzhlZGRmNiwgMHgwOGVhMWRhNCwKKwkweGJjNDI3OGM4LCAweGM3ZWFiOWI4LCAweDU1MTc1ZGQ1LCAweGE1Nzc1MzhkLCAweGM0ODY1NzE0LCAweGJkN2JmNjVkLAorCTB4Y2VhNjNkZGUsIDB4MjZhZWZlY2EsIDB4ZTBkNTdiZjgsIDB4NDMxZTdiODQsIDB4NzE2M2QyNWUsIDB4NmI1NDM4YjMsCisJMHg2MDNjMTZmMSwgMHg1NGYwN2MxNywgMHg4ZDZmNWI4ZCwgMHhmNTJlY2ZlOSwgMHg5YjY0Y2JkOSwgMHgyY2E4N2I4ZiwKKwkweDUxNTI2NTlhLCAweDIzZWUzNGM3LCAweGRmODRlZjU2LCAweDFiZjA5Y2UwLCAweGQzMWJmMGI0LCAweGZjZGZiOGVjLAorCTB4NWRhZWMyZDYsIDB4MDEwOWU3YWEsIDB4NzI2YzEzYzksIDB4MzIzNzViYmYsIDB4MmY3ZDMwYWUsIDB4ZTU3MDkzMzksCisJMHhjMmI4MzFiMywgMHg5MDE1OWEwZiwgMHg5NWEwZWQ2MywgMHgyMzNmNzRiYSwgMHgzNzI1NGZmOCwgMHgwZTNmOWM3ZiwKKwkweDljNzQ4NGNlLCAweGRhMWE5Njk5LCAweGI1YTY3ZDg3LCAweDE3OTFiYWE1LCAweDlkOGJiZmIzLCAweDg4YTZkYzlkLAorCTB4MDZhMWFmYmYsIDB4YmMxYzc3ZDksIDB4N2M5ZTQ3NDksIDB4NzNkMWM0ZWYsIDB4ZjdmOWUxYmYsIDB4ZjI1ZDgzZmUsCisJMHhkNzkzYWQ5ZCwgMHhlMGZmZmEyZSwgMHhhZTk1NGQ0ZCwgMHg4NDc3NWY4ZiwgMHg5NjU5ZTc3ZCwgMHg0M2I2NTRlYSwKKwkweDE2ZDU1NzhlLCAweGI4YmE5MjJhLCAweDUwZmUyYTlhLCAweDU4YWUzZGEzLCAweGQzNzdhMzgwLCAweGI1NzdkYzNjLAorCTB4YzgzOWUxYjUsIDB4MmVmZWMzOTksIDB4YTMyY2RmZWYsIDB4NmExYTZiYmUsIDB4ZDlmNGNiZGUsIDB4YmUzNzNjZWMsCisJMHgzZGNkNGRhYiwgMHg4MDBiMDU0NCwgMHhiMGM1NzU0NywgMHhhZGQ0YjNhYiwgMHgxOTYzZGQ2MCwgMHhiZjgzYmZkZSwKKwkweGE3Y2M1ZWRjLCAweDk2ZmVlMzU2LCAweGIzYjY5NzUzLCAweGNlNjNlZTRiLCAweDMyZmJkYzQyLCAweGY1MWZhYmFiLAorCTB4OWU2ZjJkODYsIDB4YjJjMjdhOTAsIDB4ZDQ0MmQ3MGMsIDB4NzliY2I2MWIsIDB4NWM3M2E3NWEsIDB4ZTUxYjhhZmQsCisJMHhhYmFiMTNiMiwgMHg2NmY4ODI3ZiwgMHgxMDlmM2VlYiwgMHgwOWExZmQ2NywgMHhjMGZiNzQ0OSwgMHgwOWYzZWVlNCwKKwkweDNmMDVhZTcxLCAweDNmNGU5ZGY4LCAweGFmYjg0YzUzLCAweDVjOTQ0MzU2LCAweGYyMWRiYmQ1LCAweDRiZmVlYmY5LAorCTB4YThkM2NmN2YsIDB4YWFhN2M5YzQsIDB4NzQ5YzVjNzQsIDB4ZTdiMGMyODIsIDB4ZjkwZWM1ZDEsIDB4NzEzMzk3ZmUsCisJMHhkYmQ0M2NmZCwgMHgxMGI1ZDhhOCwgMHhmZGFmMzhmMywgMHhlMmY4ZWMzNSwgMHhjMWE3OWVhZCwgMHg3NzM4Y2YyNywKKwkweDM1NzlmMTBlLCAweDBkOTBjNzU4LCAweGJiZTMxOWVkLCAweGRiZDUyOWU0LCAweDNkMzZiNjg4LCAweDM1N2U5MjYwLAorCTB4NmRmNjhhNTgsIDB4ZmEyMGY0MzUsIDB4ODE3NjJmZDksIDB4ZjM5M2VkNGYsIDB4M2E2MjJjNmUsIDB4Yjc5YTFhY2YsCisJMHhlOTc4OGVkZSwgMHg3M2ZlOGRkOSwgMHhlYzVlOWU2NSwgMHhkZmVlYjYzNywgMHhlNThmOWM2OSwgMHhjMzc5ODdkOSwKKwkweGY5ZTRhYTg1LCAweDZkZWEzN2MzLCAweDU1YzIyZWNjLCAweDM3MWQwZTNhLCAweDkzYWNhOGZjLCAweDU4ZTdmYmU0LAorCTB4YTU1ZTM5ZmIsIDB4ZmRmOTc4MWEsIDB4NDdiY2IzNzIsIDB4N2U0YzRmMjAsIDB4MGE1ZDVlZWEsIDB4YTNkZTU4NzksCisJMHg2MWFmYmM4NiwgMHg1Mjk5ZWM5YywgMHg3YjZlZjk4ZiwgMHhjNzdlYzgwZCwgMHg3YzY1M2IwZCwgMHhlM2FmMzk2YywKKwkweGE2ODViNGEzLCAweDBkZTQwNGUwLCAweDRlMGQxZTUzLCAweDc2NTNiYzgwLCAweGRjNWNkYThjLCAweGI1MTgxMGJlLAorCTB4ZTE3ODdmMjEsIDB4ZTg2ZDQ3NmYsIDB4NzU0M2MxN2YsIDB4NTZiZmUxZTMsIDB4YzJkZjA5YWQsIDB4M2Y1OTUxYjIsCisJMHg5MjFhZjc5ZCwgMHgwNGU4YzI3NywgMHg0ZDg1NmZlNCwgMHg2YzAyNTk2ZiwgMHhlNjllNzNiNywgMHhiN2YyOTM3ZCwKKwkweGQzNjM4OTIyLCAweGZlOWE1YjBkLCAweDg3YjA0YWE4LCAweGU0OTBjZmU5LCAweDI1OWQ1NGFiLCAweGRkMTRiZWUzLAorCTB4M2U4ZjdkZmYsIDB4NmU4ZWMyYTgsIDB4MDlkY2IyMDgsIDB4NjllNzM3ZjYsIDB4MTI0OGU1ZDMsIDB4NmJhY2IwZGYsCisJMHhmMzgzNzAzMSwgMHgzZjcxYTRiNSwgMHgzY2JlNDczMywgMHhlNDIzYzBjNSwgMHgzNzhjOGQ4ZiwgMHhiZWI3YTZmZSwKKwkweDc5YzhiZTQyLCAweDhjN2UxOGRjLCAweDI2MWMzMTRkLCAweGViZWY1ZGM0LCAweDIwZmMxNzExLCAweGJiZGFkZTc5LAorCTB4Zjc4YWQ5MWUsIDB4NzZlMzUzNmQsIDB4ZDc4ZmJjOGIsIDB4ZGI0NTZkZjQsIDB4MjU5ZWZhZGEsIDB4NGNiZjI0ODcsCisJMHg2NWY5Y2Y5YSwgMHg5YzlkN2QxMiwgMHg3YjY4ZTQ2MywgMHgzOWFkZjNmMCwgMHg3NmNiZWNlMywgMHgwZWQxMmQ3MCwKKwkweDM3NDM5YTRlLCAweGQyN2FiZGUwLCAweDQ4MGVlYTlmLCAweDBmZGQwOTFjLCAweDZhZDlkOTdjLCAweGVjYWUyMzc3LAorCTB4ZDhhNTU1ZmEsIDB4YTlmNWI3ZDcsIDB4ZmFhOThmMzIsIDB4YTc1MWQ5NDcsIDB4NTI1NDBmY2MsIDB4ODdlNmZjMTEsCisJMHhlMWUwMTFkYSwgMHgwYzNjMjRlYywgMHg4OTcyZGQ0OCwgMHhkZGFlNzA0MywgMHhhZGI2MDc3OCwgMHgxMjNlNGE3MSwKKwkweDUzMzZlYmYzLCAweDk4YWRjM2U4LCAweGVmOTBlNTk3LCAweDQ1YjcwYzExLCAweDZmN2MyY2E2LCAweDRhZWVlMjlhLAorCTB4MmVjZTJiYzgsIDB4OWQwNDE1OTksIDB4ODMwYTE5ZGQsIDB4MTVjZmU4ZWYsIDB4ZDVjOGVhMzcsIDB4ZDZhZTNhNjksCisJMHg3YmFkMGRhOCwgMHgzNTJkZmM3OSwgMHg1YmYxYjgyYywgMHg2ZmYzMDdlMCwgMHg3Njk3YWNiNywgMHhiMTRjZDk0NSwKKwkweDI5MGE1Y2RiLCAweDcwNjdmZmZhLCAweDNkN2JjNDJkLCAweDY3YWQzZGY2LCAweDIwZWZiMDViLCAweGYwNGFmYmRlLAorCTB4OGZhOGI1OTksIDB4ZTQ1ZDk1ZmUsIDB4ODBkNTA2ODksIDB4MzNkM2NmOTksIDB4N2JiNzA0ODEsIDB4Yjg5NDJjZWUsCisJMHhjNjg2YTUxMywgMHgyY2ZmOTFmYiwgMHg2YTNhOTU0ZiwgMHgxM2Q3MDRjZiwgMHhkM2RhNmVmOCwgMHhmNWU0YTM3YywKKwkweGM3YTRmZTg3LCAweDI5YTVkMWZiLCAweDNkNzFlNDZlLCAweDcxMWI1Y2YzLCAweDVkNDc5ZWFlLCAweGEyOWFmZTMyLAorCTB4YTEzYzBiZjMsIDB4YTk2N2E3ZWIsIDB4ZTY5ZWNlN2UsIDB4YzU5Zjc5NGMsIDB4ODc2N2ExZWUsIDB4YmZiZTMyNjcsCisJMHhlNWJjMzI1OSwgMHgxODAzYThkNSwgMHg2NjdiMWZkZiwgMHg0ZmI3M2Y3MCwgMHhkZTc3MGQyOSwgMHg3NTczM2UwNywKKwkweGI5OTQ1Nzc5LCAweGRlNGVkZWU0LCAweDdiMTNlMzc5LCAweGYxODY3ZDc0LCAweDg5N2RhYzFkLCAweGZlZmRlOTIzLAorCTB4Y2I4MGZlYmYsIDB4MDAyMjIwYjMsIDB4MDAwMDAwMDAKIH07CiAKICNlbmRpZiAvKl9fQk5YMlhfSU5JVF9WQUxVRVNfSF9fKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYwppbmRleCBhZWEyNmI0Li5lZDY0OGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5jCkBAIC0yMiwxNCArMjIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCi0jaW5jbHVkZSAiYm54MnhfcmVnLmgiCi0jaW5jbHVkZSAiYm54MnhfZndfZGVmcy5oIgotI2luY2x1ZGUgImJueDJ4X2hzaS5oIgotI2luY2x1ZGUgImJueDJ4X2xpbmsuaCIKICNpbmNsdWRlICJibngyeC5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFNVUFBPUlRfQ0w3MyAwIC8qIEN1cnJlbnRseSBubyAqLwogI2RlZmluZSBFVEhfSExFTgkJCTE0CiAjZGVmaW5lIEVUSF9PVlJFSEVBRAkJKEVUSF9ITEVOICsgOCkvKiA4IGZvciBDUkMgKyBWTEFOKi8KICNkZWZpbmUgRVRIX01JTl9QQUNLRVRfU0laRQkJNjAKQEAgLTEzOSw2ICsxMzQsMjYgQEAKICNkZWZpbmUgUEhZX1NHTUlJX0ZMQUcJCQkweDIKICNkZWZpbmUgUEhZX1NFUkRFU19GTEFHCQkJMHg0CiAKKy8qICovCisjZGVmaW5lIFNGUF9FRVBST01fQ09OX1RZUEVfQUREUgkJMHgyCisJI2RlZmluZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9MQyAJCTB4NworCSNkZWZpbmUgU0ZQX0VFUFJPTV9DT05fVFlQRV9WQUxfQ09QUEVSCTB4MjEKKworI2RlZmluZSBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQUREUgkJMHg4CisJI2RlZmluZSBTRlBfRUVQUk9NX0ZDX1RYX1RFQ0hfQklUTUFTS19DT1BQRVJfUEFTU0lWRSAweDQKKwkjZGVmaW5lIFNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9BQ1RJVkUJIDB4OAorI2RlZmluZSBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX0FERFIJCTB4MTQKKyNkZWZpbmUgU0ZQX0VFUFJPTV9WRU5ET1JfTkFNRV9TSVpFIAkxNgorI2RlZmluZSBTRlBfRUVQUk9NX09QVElPTlNfQUREUiAJCTB4NDAKKwkjZGVmaW5lIFNGUF9FRVBST01fT1BUSU9OU19MSU5FQVJfUlhfT1VUX01BU0sgMHgxCisjZGVmaW5lIFNGUF9FRVBST01fT1BUSU9OU19TSVpFIAkJMgorCisjZGVmaW5lIFNGUF9NT0RVTEVfVFlQRV9VTktOT1dOIAkJCTB4MAorI2RlZmluZSBTRlBfTU9EVUxFX1RZUEVfTEMgICAJCQkweDEKKyNkZWZpbmUgU0ZQX01PRFVMRV9UWVBFX0FDVElWRV9DT1BQRVJfQ0FCTEUJCTB4MgorI2RlZmluZSBTRlBfTU9EVUxFX1RZUEVfUEFTU0lWRV9DT1BQRVJfQ0FCTEUJMHgzCisKKyNkZWZpbmUgU0ZQX0xJTUlUSU5HX01PREVfVkFMVUUgCQkJMHgwMDQ0CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgICAgICAgICAgICAgICAgSU5URVJGQUNFICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNTQsMTMgKzE2OSwzNCBAQAogCQkoX2JhbmsgKyAoX2FkZHIgJiAweGYpKSwgXAogCQlfdmFsKQogCi1zdGF0aWMgdm9pZCBibngyeF9zZXRfcGh5X21kaW8oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCitzdGF0aWMgdm9pZCBibngyeF9zZXRfc2VyZGVzX2FjY2VzcyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKLQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYUzBfQ1RSTF9NRF9TVCArCi0JCSAgIHBhcmFtcy0+cG9ydCoweDE4LCAwKTsKLQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYUzBfQ1RSTF9NRF9ERVZBRCArIHBhcmFtcy0+cG9ydCoweDE4LAotCQkgICBERUZBVUxUX1BIWV9ERVZfQUREUik7CisJdTMyIGVtYWNfYmFzZSA9IChwYXJhbXMtPnBvcnQpID8gR1JDQkFTRV9FTUFDMSA6IEdSQ0JBU0VfRU1BQzA7CisJLyogU2V0IENsYXVzZSAyMiAqLworCVJFR19XUihicCwgTklHX1JFR19TRVJERVMwX0NUUkxfTURfU1QgKyBwYXJhbXMtPnBvcnQqMHgxMCwgMSk7CisJUkVHX1dSKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSwgMHgyNDVmODAwMCk7CisJdWRlbGF5KDUwMCk7CisJUkVHX1dSKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX01ESU9fQ09NTSwgMHgyNDVkMDAwZik7CisJdWRlbGF5KDUwMCk7CisJIC8qIFNldCBDbGF1c2UgNDUgKi8KKwlSRUdfV1IoYnAsIE5JR19SRUdfU0VSREVTMF9DVFJMX01EX1NUICsgcGFyYW1zLT5wb3J0KjB4MTAsIDApOworfQorc3RhdGljIHZvaWQgYm54Mnhfc2V0X3BoeV9tZGlvKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCB1OCBwaHlfZmxhZ3MpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJaWYgKHBoeV9mbGFncyAmIFBIWV9YR1hTX0ZMQUcpIHsKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX1hHWFMwX0NUUkxfTURfU1QgKworCQkJICAgcGFyYW1zLT5wb3J0KjB4MTgsIDApOworCQlSRUdfV1IoYnAsIE5JR19SRUdfWEdYUzBfQ1RSTF9NRF9ERVZBRCArIHBhcmFtcy0+cG9ydCoweDE4LAorCQkJICAgREVGQVVMVF9QSFlfREVWX0FERFIpOworCX0gZWxzZSB7CisJCWJueDJ4X3NldF9zZXJkZXNfYWNjZXNzKHBhcmFtcyk7CisKKwkJUkVHX1dSKGJwLCBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9NRF9ERVZBRCArCisJCQkgICBwYXJhbXMtPnBvcnQqMHgxMCwKKwkJCSAgIERFRkFVTFRfUEhZX0RFVl9BRERSKTsKKwl9CiB9CiAKIHN0YXRpYyB1MzIgYm54MnhfYml0c19lbihzdHJ1Y3QgYm54MnggKmJwLCB1MzIgcmVnLCB1MzIgYml0cykKQEAgLTI3Nyw4ICszMTMsMTAgQEAKIAkJCSAgIHBvcnQqNCwgMCk7CiAJfQogCi0JLyogZW5hYmxlIGVtYWMgKi8KLQlSRUdfV1IoYnAsIE5JR19SRUdfTklHX0VNQUMwX0VOICsgcG9ydCo0LCAxKTsKKwlibngyeF9iaXRzX2VuKGJwLCBlbWFjX2Jhc2UgKyBFTUFDX1JFR19FTUFDX1JYX01PREUsCisJCSAgICBFTUFDX1JYX01PREVfUkVTRVQpOworCWJueDJ4X2JpdHNfZW4oYnAsIGVtYWNfYmFzZSArIEVNQUNfUkVHX0VNQUNfVFhfTU9ERSwKKwkJICAgIEVNQUNfVFhfTU9ERV9SRVNFVCk7CiAKIAlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkpIHsKIAkJLyogY29uZmlnIEdNSUkgbW9kZSAqLwpAQCAtNDk4LDcgKzUzNiw3IEBACiAJdWRlbGF5KDUwMCk7CiAJUkVHX1dSKGJwLCBHUkNCQVNFX01JU0MgKyBNSVNDX1JFR0lTVEVSU19SRVNFVF9SRUdfM19TRVQsCiAJCSAgICB2YWwpOwotCWJueDJ4X3NldF9waHlfbWRpbyhwYXJhbXMpOworCWJueDJ4X3NldF9waHlfbWRpbyhwYXJhbXMsIHBoeV9mbGFncyk7CiB9CiAKIHZvaWQgYm54MnhfbGlua19zdGF0dXNfdXBkYXRlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLApAQCAtNzQ5LDEyICs3ODcsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiBibngyeF9nZXRfZW1hY19iYXNlKHUzMiBleHRfcGh5X3R5cGUsIHU4IHBvcnQpCitzdGF0aWMgdTMyIGJueDJ4X2dldF9lbWFjX2Jhc2Uoc3RydWN0IGJueDJ4ICpicCwgdTMyIGV4dF9waHlfdHlwZSwgdTggcG9ydCkKIHsKIAl1MzIgZW1hY19iYXNlOwogCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgotCQllbWFjX2Jhc2UgPSBHUkNCQVNFX0VNQUMwOworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJLyogQWxsIE1EQy9NRElPIGlzIGRpcmVjdGVkIHRocm91Z2ggc2luZ2xlIEVNQUMgKi8KKwkJaWYgKFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApKQorCQkJZW1hY19iYXNlID0gR1JDQkFTRV9FTUFDMDsKKwkJZWxzZQorCQkJZW1hY19iYXNlID0gR1JDQkFTRV9FTUFDMTsKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgogCQllbWFjX2Jhc2UgPSAocG9ydCkgPyBHUkNCQVNFX0VNQUMwIDogR1JDQkFTRV9FTUFDMTsKQEAgLTc3MiwxMSArODE1LDEyIEBACiB7CiAJdTMyIHRtcCwgc2F2ZWRfbW9kZTsKIAl1OCBpLCByYyA9IDA7Ci0JdTMyIG1kaW9fY3RybCA9IGJueDJ4X2dldF9lbWFjX2Jhc2UoZXh0X3BoeV90eXBlLCBwb3J0KTsKKwl1MzIgbWRpb19jdHJsID0gYm54MnhfZ2V0X2VtYWNfYmFzZShicCwgZXh0X3BoeV90eXBlLCBwb3J0KTsKIAogCS8qIHNldCBjbGF1c2UgNDUgbW9kZSwgc2xvdyBkb3duIHRoZSBNRElPIGNsb2NrIHRvIDIuNU1IegogCSAqIChhIHZhbHVlIG9mIDQ5PT0weDMxKSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIEFVVE8gcG9sbCBpcyBvZmYKIAkgKi8KKwogCXNhdmVkX21vZGUgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKIAl0bXAgPSBzYXZlZF9tb2RlICYgfihFTUFDX01ESU9fTU9ERV9BVVRPX1BPTEwgfAogCQkJICAgICBFTUFDX01ESU9fTU9ERV9DTE9DS19DTlQpOwpAQCAtODQxLDEwICs4ODUsMTEgQEAKIAl1MTYgaTsKIAl1OCByYyA9IDA7CiAKLQl1MzIgbWRpb19jdHJsID0gYm54MnhfZ2V0X2VtYWNfYmFzZShleHRfcGh5X3R5cGUsIHBvcnQpOworCXUzMiBtZGlvX2N0cmwgPSBibngyeF9nZXRfZW1hY19iYXNlKGJwLCBleHRfcGh5X3R5cGUsIHBvcnQpOwogCS8qIHNldCBjbGF1c2UgNDUgbW9kZSwgc2xvdyBkb3duIHRoZSBNRElPIGNsb2NrIHRvIDIuNU1IegogCSAqIChhIHZhbHVlIG9mIDQ5PT0weDMxKSBhbmQgbWFrZSBzdXJlIHRoYXQgdGhlIEFVVE8gcG9sbCBpcyBvZmYKIAkgKi8KKwogCXNhdmVkX21vZGUgPSBSRUdfUkQoYnAsIG1kaW9fY3RybCArIEVNQUNfUkVHX0VNQUNfTURJT19NT0RFKTsKIAl2YWwgPSBzYXZlZF9tb2RlICYgKChFTUFDX01ESU9fTU9ERV9BVVRPX1BPTEwgfAogCQkJICAgICBFTUFDX01ESU9fTU9ERV9DTE9DS19DTlQpKTsKQEAgLTk2Nyw2ICsxMDEyLDggQEAKIAkJCSAgICAgIChtaWlfY29udHJvbCB8CiAJCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU0VUKSk7CiAKKwlibngyeF9zZXRfc2VyZGVzX2FjY2VzcyhwYXJhbXMpOworCiAJLyogd2FpdCBmb3IgdGhlIHJlc2V0IHRvIHNlbGYgY2xlYXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTURJT19BQ0NFU1NfVElNRU9VVDsgaSsrKSB7CiAJCXVkZWxheSg1KTsKQEAgLTExNTYsNjIgKzEyMDMsOSBAQAogCQkJICAgICAgTURJT19CQU1fTkVYVF9QQUdFX01QNV9ORVhUX1BBR0VfQ1RSTCwKIAkJCSAgICAgIHJlZ192YWwpOwogCi0JLyogRW5hYmxlIENsYXVzZSA3MyBBbmVnICovCi0JaWYgKCh2YXJzLT5saW5lX3NwZWVkID09IFNQRUVEX0FVVE9fTkVHKSAmJgotCSAgICAoU1VQUE9SVF9DTDczKSkgewotCQkvKiBFbmFibGUgQkFNIFN0YXRpb24gTWFuYWdlciAqLworCS8qIENMNzMgQXV0b25lZyBEaXNhYmxlZCAqLworCXJlZ192YWwgPSAwOwogCi0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfVVNFUkIwLAotCQkJCSAgICAgIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDEsCi0JCQkJICAgKE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX0VOIHwKLQkJCU1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDFfQkFNX1NUQVRJT05fTU5HUl9FTiB8Ci0JCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwxX0JBTV9OUF9BRlRFUl9CUF9FTikpOwotCi0JCS8qIE1lcmdlIENMNzMgYW5kIENMMzcgYW5lZyByZXNvbHV0aW9uICovCi0JCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfVVNFUkIwLAotCQkJCSAgICAgIE1ESU9fQ0w3M19VU0VSQjBfQ0w3M19CQU1fQ1RSTDMsCi0JCQkJICAgICAgJnJlZ192YWwpOwotCi0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCU1ESU9fUkVHX0JBTktfQ0w3M19VU0VSQjAsCi0JCQlNRElPX0NMNzNfVVNFUkIwX0NMNzNfQkFNX0NUUkwzLAotCQkJKHJlZ192YWwgfAotCQkJTURJT19DTDczX1VTRVJCMF9DTDczX0JBTV9DVFJMM19VU0VfQ0w3M19IQ0RfTVIpKTsKLQotCQkvKiBTZXQgdGhlIENMNzMgQU4gc3BlZWQgKi8KLQotCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DTDczX0lFRUVCMSwKLQkJCQkgICAgICBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjIsICZyZWdfdmFsKTsKLQkJLyogSW4gdGhlIFNlckRlcyB3ZSBzdXBwb3J0IG9ubHkgdGhlIDFHLgotCQkgICBJbiB0aGUgWEdYUyB3ZSBzdXBwb3J0IHRoZSAxMEcgS1g0Ci0JCSAgIGJ1dCB3ZSBjdXJyZW50bHkgZG8gbm90IHN1cHBvcnQgdGhlIEtSICovCi0JCWlmICh2YXJzLT5waHlfZmxhZ3MgJiBQSFlfWEdYU19GTEFHKSB7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFNcbiIpOwotCQkJLyogMTBHIEtYNCAqLwotCQkJcmVnX3ZhbCB8PSBNRElPX0NMNzNfSUVFRUIxX0FOX0FEVjJfQURWUl8xMEdfS1g0OwotCQl9IGVsc2UgewotCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXJEZXNcbiIpOwotCQkJLyogMTAwME0gS1ggKi8KLQkJCXJlZ192YWwgfD0gTURJT19DTDczX0lFRUVCMV9BTl9BRFYyX0FEVlJfMTAwME1fS1g7Ci0JCX0KLQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjEsCi0JCQkJICAgICAgTURJT19DTDczX0lFRUVCMV9BTl9BRFYyLCByZWdfdmFsKTsKLQotCQkvKiBDTDczIEF1dG9uZWcgRW5hYmxlZCAqLwotCQlyZWdfdmFsID0gTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0xfQU5fRU47Ci0JfSBlbHNlIHsKLQkJLyogQ0w3MyBBdXRvbmVnIERpc2FibGVkICovCi0JCXJlZ192YWwgPSAwOwotCX0KIAlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAogCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKIAkJCSAgICAgIE1ESU9fUkVHX0JBTktfQ0w3M19JRUVFQjAsCkBAIC0xMzQ0LDQ0ICsxMzM4LDI1IEBACiBzdGF0aWMgdm9pZCBibngyeF9yZXN0YXJ0X2F1dG9uZWcoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IG1paV9jb250cm9sOwogCURQKE5FVElGX01TR19MSU5LLCAiYm54MnhfcmVzdGFydF9hdXRvbmVnXG4iKTsKLQlpZiAoU1VQUE9SVF9DTDczKSB7Ci0JCS8qIGVuYWJsZSBhbmQgcmVzdGFydCBjbGF1c2UgNzMgYW5lZyAqLwotCQl1MTYgYW5fY3RybDsKKwkvKiBFbmFibGUgYW5kIHJlc3RhcnQgQkFNL0NMMzcgYW5lZyAqLwogCi0JCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NMNzNfSUVFRUIwLAotCQkJCSAgICAgIE1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MLAotCQkJCSAgJmFuX2N0cmwpOwotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJTURJT19SRUdfQkFOS19DTDczX0lFRUVCMCwKLQkJCQlNRElPX0NMNzNfSUVFRUIwX0NMNzNfQU5fQ09OVFJPTCwKLQkJCQkoYW5fY3RybCB8Ci0JCQkJTURJT19DTDczX0lFRUVCMF9DTDczX0FOX0NPTlRST0xfQU5fRU4gfAotCQkJCU1ESU9fQ0w3M19JRUVFQjBfQ0w3M19BTl9DT05UUk9MX1JFU1RBUlRfQU4pKTsKLQotCX0gZWxzZSB7Ci0JCS8qIEVuYWJsZSBhbmQgcmVzdGFydCBCQU0vQ0wzNyBhbmVnICovCi0JCXUxNiBtaWlfY29udHJvbDsKLQotCQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKLQkJCQkgICAgICBNRElPX0NPTUJPX0lFRUUwX01JSV9DT05UUk9MLAotCQkJCSAgICAgICZtaWlfY29udHJvbCk7Ci0JCURQKE5FVElGX01TR19MSU5LLAotCQkJICJibngyeF9yZXN0YXJ0X2F1dG9uZWcgbWlpX2NvbnRyb2wgYmVmb3JlID0gMHgleFxuIiwKLQkJCSBtaWlfY29udHJvbCk7Ci0JCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCQkgICAgICBNRElPX1JFR19CQU5LX0NPTUJPX0lFRUUwLAotCQkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCi0JCQkJICAgICAgKG1paV9jb250cm9sIHwKLQkJCQlNRElPX0NPTUJPX0lFRU9fTUlJX0NPTlRST0xfQU5fRU4gfAotCQkJCU1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9SRVNUQVJUX0FOKSk7Ci0JfQorCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCisJCQkgICAgICAmbWlpX2NvbnRyb2wpOworCURQKE5FVElGX01TR19MSU5LLAorCQkgImJueDJ4X3Jlc3RhcnRfYXV0b25lZyBtaWlfY29udHJvbCBiZWZvcmUgPSAweCV4XG4iLAorCQkgbWlpX2NvbnRyb2wpOworCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAorCQkJICAgICAgTURJT19SRUdfQkFOS19DT01CT19JRUVFMCwKKwkJCSAgICAgIE1ESU9fQ09NQk9fSUVFRTBfTUlJX0NPTlRST0wsCisJCQkgICAgICAobWlpX2NvbnRyb2wgfAorCQkJICAgICAgIE1ESU9fQ09NQk9fSUVFT19NSUlfQ09OVFJPTF9BTl9FTiB8CisJCQkgICAgICAgTURJT19DT01CT19JRUVPX01JSV9DT05UUk9MX1JFU1RBUlRfQU4pKTsKIH0KIAogc3RhdGljIHZvaWQgYm54MnhfaW5pdGlhbGl6ZV9zZ21paV9wcm9jZXNzKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLApAQCAtMTcyNiw3ICsxNzAxLDExIEBACiAJCSAgICAoKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CiAJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSB8fAogCQkgICAgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09Ci0JCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkpKSB7CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkgfHwKKwkJICAgIChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQorCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpIHx8CisJCSAgICAgKFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpID09CisJCSAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MSkpKSB7CiAJCQl2YXJzLT5hdXRvbmVnID0gQVVUT19ORUdfRU5BQkxFRDsKIAogCQkJaWYgKGdwX3N0YXR1cyAmIE1ESU9fQU5fQ0w3M19PUl8zN19DT01QTEVURSkgewpAQCAtMTc3MCwzOCArMTc0OSw0NCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgYm54Mnhfc2V0X3NnbWlpX3R4X2RyaXZlcihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9nbWlpX3R4X2RyaXZlcihzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKIAl1MTYgbHBfdXAyOwogCXUxNiB0eF9kcml2ZXI7CisJdTE2IGJhbms7CiAKIAkvKiByZWFkIHByZWNvbXAgKi8KLQogCUNMNDVfUkRfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCiAJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAogCQkJICAgICAgTURJT19SRUdfQkFOS19PVkVSXzFHLAogCQkJICAgICAgTURJT19PVkVSXzFHX0xQX1VQMiwgJmxwX3VwMik7CiAKLQlDTDQ1X1JEX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUkVHX0JBTktfVFgwLAotCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLCAmdHhfZHJpdmVyKTsKLQogCS8qIGJpdHMgWzEwOjddIGF0IGxwX3VwMiwgcG9zaXRpb25lZCBhdCBbMTU6MTJdICovCiAJbHBfdXAyID0gKCgobHBfdXAyICYgTURJT19PVkVSXzFHX0xQX1VQMl9QUkVFTVBIQVNJU19NQVNLKSA+PgogCQkgICBNRElPX09WRVJfMUdfTFBfVVAyX1BSRUVNUEhBU0lTX1NISUZUKSA8PAogCQkgIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19TSElGVCk7CiAKLQlpZiAoKGxwX3VwMiAhPSAwKSAmJgotCSAgICAobHBfdXAyICE9ICh0eF9kcml2ZXIgJiBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSykpKSB7Ci0JCS8qIHJlcGxhY2UgdHhfZHJpdmVyIGJpdHMgWzE1OjEyXSAqLwotCQl0eF9kcml2ZXIgJj0gfk1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLOwotCQl0eF9kcml2ZXIgfD0gbHBfdXAyOwotCQlDTDQ1X1dSX09WRVJfQ0wyMihicCwgcGFyYW1zLT5wb3J0LAorCWlmIChscF91cDIgPT0gMCkKKwkJcmV0dXJuOworCisJZm9yIChiYW5rID0gTURJT19SRUdfQkFOS19UWDA7IGJhbmsgPD0gTURJT19SRUdfQkFOS19UWDM7CisJICAgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19UWDEgLSBNRElPX1JFR19CQU5LX1RYMCkpIHsKKwkJQ0w0NV9SRF9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKIAkJCQkgICAgICBwYXJhbXMtPnBoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUkVHX0JBTktfVFgwLAotCQkJCSAgICAgIE1ESU9fVFgwX1RYX0RSSVZFUiwgdHhfZHJpdmVyKTsKKwkJCQkgICAgICBiYW5rLAorCQkJCSAgICAgIE1ESU9fVFgwX1RYX0RSSVZFUiwgJnR4X2RyaXZlcik7CisKKwkJLyogcmVwbGFjZSB0eF9kcml2ZXIgYml0cyBbMTU6MTJdICovCisJCWlmIChscF91cDIgIT0KKwkJICAgICh0eF9kcml2ZXIgJiBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSykpIHsKKwkJCXR4X2RyaXZlciAmPSB+TURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0s7CisJCQl0eF9kcml2ZXIgfD0gbHBfdXAyOworCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgcGFyYW1zLT5waHlfYWRkciwKKwkJCQkJICAgICAgYmFuaywKKwkJCQkJICAgICAgTURJT19UWDBfVFhfRFJJVkVSLCB0eF9kcml2ZXIpOworCQl9CiAJfQogfQogCkBAIC0xOTAyLDYgKzE4ODcsMjUgQEAKIAkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCiAJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLCAweGEwNDApOwogCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKworCQkJLyogUmVzdG9yZSBub3JtYWwgcG93ZXIgbW9kZSovCisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAorCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0gsCisJCQkJCSAgcGFyYW1zLT5wb3J0KTsKKworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKKwkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAorCQkJCQkgIHBhcmFtcy0+cG9ydCk7CisKKwkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKKwkJCQkgICAgICAgMTw8MTUpOworCisJCQlicmVhazsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCQkJLyogVW5zZXQgTG93IFBvd2VyIE1vZGUgYW5kIFNXIHJlc2V0ICovCiAJCQkvKiBSZXN0b3JlIG5vcm1hbCBwb3dlciBtb2RlKi8KQEAgLTE5MTksOSArMTkyMyw2IEBACiAJCQlicmVhazsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgogCQkJewotCQkJdTE2IGVtYWNfYmFzZTsKLQkJCWVtYWNfYmFzZSA9IChwYXJhbXMtPnBvcnQpID8gR1JDQkFTRV9FTUFDMCA6Ci0JCQkJCUdSQ0JBU0VfRU1BQzE7CiAKIAkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLwogCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKQEAgLTE5NDksNiArMTk1MCwyMyBAQAogCiAJCQlicmVhazsKIAorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CisKKwkJCS8qIFJlc3RvcmUgbm9ybWFsIHBvd2VyIG1vZGUqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKKwkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9ISUdILAorCQkJCQkgIHBhcmFtcy0+cG9ydCk7CisKKwkJCS8qIEhXIHJlc2V0ICovCisJCQlibngyeF9od19yZXNldChicCwgcGFyYW1zLT5wb3J0KTsKKworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJCSAgICAgICAxPDwxNSk7CisJCQlicmVhazsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIFBIWSBGYWlsdXJlIGRldGVjdGVkXG4iKTsKIAkJCWJyZWFrOwpAQCAtMTk4MCw2ICsxOTk4LDMxIEBACiAJfQogfQogCisKK3N0YXRpYyB2b2lkIGJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24oc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKKwkJCQkgICAgdTMyIHNobWVtX2Jhc2UsIHUzMiBzcGlyb21fdmVyKQoreworCURQKE5FVElGX01TR19MSU5LLCAiRlcgdmVyc2lvbiAweCV4OjB4JXhcbiIsCisJCSAodTE2KShzcGlyb21fdmVyPj4xNiksICh1MTYpc3Bpcm9tX3Zlcik7CisJUkVHX1dSKGJwLCBzaG1lbV9iYXNlICsKKwkJICAgb2Zmc2V0b2Yoc3RydWN0IHNobWVtX3JlZ2lvbiwKKwkJCSAgICBwb3J0X21iW3BvcnRdLmV4dF9waHlfZndfdmVyc2lvbiksCisJCQlzcGlyb21fdmVyKTsKK30KKworc3RhdGljIHZvaWQgYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LAorCQkJCSAgICB1MzIgZXh0X3BoeV90eXBlLCB1OCBleHRfcGh5X2FkZHIsCisJCQkJICAgIHUzMiBzaG1lbV9iYXNlKQoreworCXUxNiBmd192ZXIxLCBmd192ZXIyOworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZmd192ZXIxKTsKKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLCAmZndfdmVyMik7CisJYm54Mnhfc2F2ZV9zcGlyb21fdmVyc2lvbihicCwgcG9ydCwgc2htZW1fYmFzZSwKKwkJCQkodTMyKShmd192ZXIxPDwxNiB8IGZ3X3ZlcjIpKTsKK30KKwogc3RhdGljIHZvaWQgYm54MnhfYmNtODA3Ml9leHRlcm5hbF9yb21fYm9vdChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKQEAgLTE5ODgsNyArMjAzMSw2IEBACiAJCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CiAJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOwogCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKLQl1MTYgZndfdmVyMSwgZndfdmVyMjsKIAogCS8qIE5lZWQgdG8gd2FpdCAyMDBtcyBhZnRlciByZXNldCAqLwogCW1zbGVlcCgyMDApOwpAQCAtMjAyNCwxNCArMjA2NiwxMCBAQAogCS8qIFdhaXQgMTAwbXMgKi8KIAltc2xlZXAoMTAwKTsKIAotCS8qIFByaW50IHRoZSBQSFkgRlcgdmVyc2lvbiAqLwotCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgZXh0X3BoeV90eXBlLCBleHRfcGh5X2FkZHIsCi0JCQkgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmZndfdmVyMSk7Ci0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKLQkJCSAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsICZmd192ZXIyKTsKLQlEUChORVRJRl9NU0dfTElOSywgIjgwNzIgRlcgdmVyc2lvbiAweCV4OjB4JXhcbiIsIGZ3X3ZlcjEsIGZ3X3ZlcjIpOworCWJueDJ4X3NhdmVfYmNtX3NwaXJvbV92ZXIoYnAsIHBvcnQsCisJCQkJZXh0X3BoeV90eXBlLAorCQkJCWV4dF9waHlfYWRkciwKKwkJCQlwYXJhbXMtPnNobWVtX2Jhc2UpOwogfQogCiBzdGF0aWMgdTggYm54MnhfODA3M19pc19zbnJfbmVlZGVkKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQpAQCAtMjA0OSw3ICsyMDg3LDcgQEAKIAkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKIAkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJICAgICAgMHhjODAxLCAmdmFsKTsKKwkJICAgICAgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYsICZ2YWwpOwogCiAJaWYgKHZhbCAhPSAxKSB7CiAJCS8qIE5vIG5lZWQgdG8gd29ya2Fyb3VuZCBpbiA4MDczIEExICovCkBAIC0yMDgxLDcgKzIxMTksNyBAQAogCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAogCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAweGM4MDEsICZ2YWwpOworCQkgICAgICBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFViwgJnZhbCk7CiAKIAlpZiAodmFsID4gMCkgewogCQkvKiBObyBuZWVkIHRvIHdvcmthcm91bmQgaW4gODA3MyBBMSAqLwpAQCAtMjA5Nyw3ICsyMTM1LDggQEAKIAkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIDB4YzgyMCwgJnZhbCk7CisJCQkgICAgICBNRElPX1BNQV9SRUdfODA3M19TUEVFRF9MSU5LX1NUQVRVUywKKwkJCSAgICAgICZ2YWwpOwogCQkgIC8qIElmIGJpdCBbMTRdID0gMCBvciBiaXQgWzEzXSA9IDAsIGNvbnRpbnVlIG9uIHdpdGgKIAkJICAgc3lzdGVtIGluaXRpYWxpemF0aW9uIChYQVVJIHdvcmstYXJvdW5kIG5vdCByZXF1aXJlZCwKIAkJICAgIGFzIHRoZXNlIGJpdHMgaW5kaWNhdGUgMi41RyBvciAxRyBsaW5rIHVwKS4gKi8KQEAgLTIxMTUsNyArMjE1NCw3IEBACiAJCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCiAJCQkJCWV4dF9waHlfYWRkciwKIAkJCQkJTURJT19QTUFfREVWQUQsCi0JCQkJCTB4Yzg0MSwgJnZhbCk7CisJCQkJCU1ESU9fUE1BX1JFR184MDczX1hBVUlfV0EsICZ2YWwpOwogCQkJCWlmICh2YWwgJiAoMTw8MTUpKSB7CiAJCQkJCURQKE5FVElGX01TR19MSU5LLAogCQkJCQkgICJYQVVJIHdvcmthcm91bmQgaGFzIGNvbXBsZXRlZFxuIik7CkBAIC0yMTMzLDkgKzIxNzIsOCBAQAogfQogCiBzdGF0aWMgdm9pZCBibngyeF9iY204MDczX2V4dGVybmFsX3JvbV9ib290KHN0cnVjdCBibngyeCAqYnAsIHU4IHBvcnQsCi0JCQkJCSAgdTggZXh0X3BoeV9hZGRyKQorCQkJCQkgIHU4IGV4dF9waHlfYWRkciwgdTMyIHNobWVtX2Jhc2UpCiB7Ci0JdTE2IGZ3X3ZlcjEsIGZ3X3ZlcjI7CiAJLyogQm9vdCBwb3J0IGZyb20gZXh0ZXJuYWwgUk9NICAqLwogCS8qIEVEQyBncnN0ICovCiAJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKQEAgLTIxODUsMTcgKzIyMjMsNDk2IEBACiAJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKIAkJICAgICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwxLCAweDAwMDApOwogCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwb3J0LCBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAotCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZmd192ZXIxKTsKLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCi0JCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCi0JCSAgICAgIGV4dF9waHlfYWRkciwKLQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwgJmZ3X3ZlcjIpOwotCURQKE5FVElGX01TR19MSU5LLCAiODA3MyBGVyB2ZXJzaW9uIDB4JXg6MHgleFxuIiwgZndfdmVyMSwgZndfdmVyMik7CisJYm54Mnhfc2F2ZV9iY21fc3Bpcm9tX3ZlcihicCwgcG9ydCwKKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAorCQkJCWV4dF9waHlfYWRkciwKKwkJCQlzaG1lbV9iYXNlKTsKK30KIAorc3RhdGljIHZvaWQgYm54MnhfYmNtODcyNl9leHRlcm5hbF9yb21fYm9vdChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfU0hJRlQpOworCXUzMiBleHRfcGh5X3R5cGUgPSBYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKTsKKworCS8qIE5lZWQgdG8gd2FpdCAxMDBtcyBhZnRlciByZXNldCAqLworCW1zbGVlcCgxMDApOworCisJLyogU2V0IHNlcmlhbCBib290IGNvbnRyb2wgZm9yIGV4dGVybmFsIGxvYWQgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMSk7CisKKwkvKiBNaWNybyBjb250cm9sbGVyIHJlLWJvb3QgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMLAorCQkgICAgICAgTURJT19QTUFfUkVHX0dFTl9DVFJMX1JPTV9SRVNFVF9JTlRFUk5BTF9NUCk7CisKKwkvKiBTZXQgc29mdCByZXNldCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX01JQ1JPX1JFU0VUKTsKKworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwyLAorCQkgICAgICAgMHg3M0EwKTsKKworCS8qIENsZWFyIHNvZnQgcmVzZXQuCisJV2lsbCBhdXRvbWF0aWNhbGx5IHJlc2V0IG1pY3JvLWNvbnRyb2xsZXIgcmUtYm9vdCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsIGV4dF9waHlfdHlwZSwgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkwsCisJCSAgICAgICBNRElPX1BNQV9SRUdfR0VOX0NUUkxfUk9NX1JFU0VUX0lOVEVSTkFMX01QKTsKKworCS8qIHdhaXQgZm9yIDE1MG1zIGZvciBtaWNyb2NvZGUgbG9hZCAqLworCW1zbGVlcCgxNTApOworCisJLyogRGlzYWJsZSBzZXJpYWwgYm9vdCBjb250cm9sLCB0cmlzdGF0ZXMgcGlucyBTU19OLCBTQ0ssIE1PU0ksIE1JU08gKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LCBleHRfcGh5X3R5cGUsIGV4dF9waHlfYWRkciwKKwkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkgICAgICAgTURJT19QTUFfUkVHX01JU0NfQ1RSTDEsIDB4MDAwMCk7CisKKwltc2xlZXAoMjAwKTsKKwlibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKGJwLCBwb3J0LAorCQkJCWV4dF9waHlfdHlwZSwKKwkJCQlleHRfcGh5X2FkZHIsCisJCQkJcGFyYW1zLT5zaG1lbV9iYXNlKTsKK30KKworc3RhdGljIHZvaWQgYm54MnhfYmNtODcyNl9zZXRfdHJhbnNtaXR0ZXIoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwKKwkJCQkJdTggZXh0X3BoeV9hZGRyLCB1OCB0eF9lbikKK3sKKwl1MTYgdmFsOworCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyB0cmFuc21pdHRlciB0eF9lbj0leCBmb3IgcG9ydCAleFxuIiwKKwkJIHR4X2VuLCBwb3J0KTsKKwkvKiBEaXNhYmxlL0VuYWJsZSB0cmFuc21pdHRlciAoIFRYIGxhc2VyIG9mIHRoZSBTRlArIG1vZHVsZS4pKi8KKwlibngyeF9jbDQ1X3JlYWQoYnAsIHBvcnQsCisJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJICAgICAgJnZhbCk7CisKKwlpZiAodHhfZW4pCisJCXZhbCAmPSB+KDE8PDE1KTsKKwllbHNlCisJCXZhbCB8PSAoMTw8MTUpOworCisJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJICAgICAgIHZhbCk7Cit9CisKKworc3RhdGljIHU4IGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20oc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsIHUxNiBhZGRyLAorCQkJCSAgICAgdTggYnl0ZV9jbnQsIHU4ICpvX2J1ZikgeworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUxNiB2YWwsIGk7CisJdTggcG9ydCA9IHBhcmFtcy0+cG9ydDsKKwl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQkgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCWlmIChieXRlX2NudCA+IDE2KSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiUmVhZGluZyBmcm9tIGVlcHJvbSBpcyIKKwkJCSAgICAiIGlzIGxpbWl0ZWQgdG8gMHhmXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIFNldCB0aGUgcmVhZCBjb21tYW5kIGJ5dGUgY291bnQgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9CWVRFX0NOVCwKKwkJICAgICAgIChieXRlX2NudCB8IDB4YTAwMCkpOworCisJLyogU2V0IHRoZSByZWFkIGNvbW1hbmQgYWRkcmVzcyAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBleHRfcGh5X3R5cGUsCisJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX01FTV9BRERSLAorCQkgICAgICAgYWRkcik7CisKKwkvKiBBY3RpdmF0ZSByZWFkIGNvbW1hbmQgKi8KKwlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCSAgICAgICBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMLAorCQkgICAgICAgMHgyYzBmKTsKKworCS8qIFdhaXQgdXAgdG8gNTAwdXMgZm9yIGNvbW1hbmQgY29tcGxldGUgc3RhdHVzICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTCwgJnZhbCk7CisJCWlmICgodmFsICYgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgPT0KKwkJICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX1NUQVRVU19DT01QTEVURSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoNSk7CisJfQorCisJaWYgKCh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSAhPQorCQkgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFKSB7CisJCURQKE5FVElGX01TR19MSU5LLAorCQkJICJHb3QgYmFkIHN0YXR1cyAweCV4IHdoZW4gcmVhZGluZyBmcm9tIFNGUCsgRUVQUk9NXG4iLAorCQkJICh2YWwgJiBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9DVFJMX1NUQVRVU19NQVNLKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFJlYWQgdGhlIGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBieXRlX2NudDsgaSsrKSB7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfREFUQV9CVUYgKyBpLCAmdmFsKTsKKwkJb19idWZbaV0gPSAodTgpKHZhbCAmIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0RBVEFfTUFTSyk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTCwgJnZhbCk7CisJCWlmICgodmFsICYgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTF9TVEFUVVNfTUFTSykgPT0KKwkJICAgIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX1NUQVRVU19JRExFKQorCQkJcmV0dXJuIDA7OworCQltc2xlZXAoMSk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisKK3N0YXRpYyB1OCBibngyeF9nZXRfc2ZwX21vZHVsZV90eXBlKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLAorCQkJCSAgdTggKm1vZHVsZV90eXBlKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHZhbDsKKwkqbW9kdWxlX3R5cGUgPSBTRlBfTU9EVUxFX1RZUEVfVU5LTk9XTjsKKworCS8qIEZpcnN0IGNoZWNrIGZvciBjb3BwZXIgY2FibGUgKi8KKwlpZiAoYm54MnhfcmVhZF9zZnBfbW9kdWxlX2VlcHJvbShwYXJhbXMsCisJCQkJICAgICAgIFNGUF9FRVBST01fQ09OX1RZUEVfQUREUiwKKwkJCQkgICAgICAgMSwKKwkJCQkgICAgICAgJnZhbCkgIT0gMCkgeworCQlEUChORVRJRl9NU0dfTElOSywgIkZhaWxlZCB0byByZWFkIGZyb20gU0ZQKyBtb2R1bGUgRUVQUk9NIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSBTRlBfRUVQUk9NX0NPTl9UWVBFX1ZBTF9DT1BQRVI6CisJeworCQl1OCBjb3BwZXJfbW9kdWxlX3R5cGU7CisJCS8qIENoZWNrIGlmIGl0cyBhY3RpdmUgY2FibGUoIGluY2x1ZGVzIFNGUCsgbW9kdWxlKQorCQlvZiBwYXNzaXZlIGNhYmxlKi8KKwkJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAorCQkJCQkgICAgICAgU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0FERFIsCisJCQkJCSAgICAgICAxLAorCQkJCQkgICAgICAgJmNvcHBlcl9tb2R1bGVfdHlwZSkgIT0KKwkJICAgIDApIHsKKwkJCURQKE5FVElGX01TR19MSU5LLAorCQkJCSJGYWlsZWQgdG8gcmVhZCBjb3BwZXItY2FibGUtdHlwZSIKKwkJCQkiIGZyb20gU0ZQKyBFRVBST01cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoY29wcGVyX21vZHVsZV90eXBlICYKKwkJICAgIFNGUF9FRVBST01fRkNfVFhfVEVDSF9CSVRNQVNLX0NPUFBFUl9BQ1RJVkUpIHsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiQWN0aXZlIENvcHBlciBjYWJsZSBkZXRlY3RlZFxuIik7CisJCQkqbW9kdWxlX3R5cGUgPSBTRlBfTU9EVUxFX1RZUEVfQUNUSVZFX0NPUFBFUl9DQUJMRTsKKwkJfSBlbHNlIGlmIChjb3BwZXJfbW9kdWxlX3R5cGUgJgorCQkJU0ZQX0VFUFJPTV9GQ19UWF9URUNIX0JJVE1BU0tfQ09QUEVSX1BBU1NJVkUpIHsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIlBhc3NpdmUgQ29wcGVyIgorCQkJCQkgICAgIiBjYWJsZSBkZXRlY3RlZFxuIik7CisJCQkJKm1vZHVsZV90eXBlID0KKwkJCQkgICAgICBTRlBfTU9EVUxFX1RZUEVfUEFTU0lWRV9DT1BQRVJfQ0FCTEU7CisJCX0gZWxzZSB7CisJCQlEUChORVRJRl9NU0dfTElOSywgIlVua25vd24gY29wcGVyLWNhYmxlLSIKKwkJCQkgICAgICJ0eXBlIDB4JXggISEhXG4iLCBjb3BwZXJfbW9kdWxlX3R5cGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0ZQX0VFUFJPTV9DT05fVFlQRV9WQUxfTEM6CisJCURQKE5FVElGX01TR19MSU5LLCAiT3B0aWMgbW9kdWxlIGRldGVjdGVkXG4iKTsKKwkJKm1vZHVsZV90eXBlID0gU0ZQX01PRFVMRV9UWVBFX0xDOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCURQKE5FVElGX01TR19MSU5LLCAiVW5hYmxlIHRvIGRldGVybWluZSBtb2R1bGUgdHlwZSAweCV4ICEhIVxuIiwKKwkJCSB2YWwpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyogVGhpcyBmdW5jdGlvbiByZWFkIHRoZSByZWxldmFudCBmaWVsZCBmcm9tIHRoZSBtb2R1bGUgKCBTRlArICksCisJYW5kIHZlcmlmeSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGlzIGJvYXJkICovCitzdGF0aWMgdTggYm54MnhfdmVyaWZ5X3NmcF9tb2R1bGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJdTggbW9kdWxlX3R5cGUpCit7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTggKnN0cl9wLCAqdG1wX2J1ZjsKKwl1MTYgaTsKKworI2RlZmluZSBDT01QTElBTkNFX1NUUl9DTlQgNgorCXU4ICpjb21wbGlhbmNlX3N0cltdID0geyJCcm9hZGNvbSIsICJKRFNVIiwgIk1vbGV4IEluYyIsICJQSUNPTElHSFQiLAorCQkiRklOSVNBUiBDT1JQLiAgICIsICJBbXBoZW5vbCJ9OworCXU4IGJ1ZltTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX1NJWkVdOworCS8qIFBhc3NpdmUgQ29wcGVyIGNhYmxlcyBhcmUgYWxsb3dlZCB0byBwYXJ0aWNpcGF0ZSwKKwlzaW5jZSB0aGUgbW9kdWxlIGlzIGhhcmR3aXJlZCB0byB0aGUgY29wcGVyIGNhYmxlICovCisKKwlpZiAoIShwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkgICAgIEZFQVRVUkVfQ09ORklHX01PRFVMRV9FTkZPUkNNRU5UX0VOQUJMRUQpKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiTk9UIGVuZm9yY2luZyBtb2R1bGUgdmVyaWZpY2F0aW9uXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG1vZHVsZV90eXBlICE9IFNGUF9NT0RVTEVfVFlQRV9MQykgeworCQlEUChORVRJRl9NU0dfTElOSywgIk5vIG5lZWQgdG8gdmVyaWZ5IGNvcHBlciBjYWJsZVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIEluIGNhc2Ugb2Ygbm9uIGNvcHBlciBjYWJsZSBvciBBY3RpdmUgY29wcGVyIGNhYmxlLAorCQl2ZXJpZnkgdGhhdCB0aGUgU0ZQKyBtb2R1bGUgaXMgY29tcGxpYW50IHdpdGggdGhpcyBib2FyZCovCisJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLAorCQkJCSAgICAgICBTRlBfRUVQUk9NX1ZFTkRPUl9OQU1FX0FERFIsCisJCQkJICAgICAgIFNGUF9FRVBST01fVkVORE9SX05BTUVfU0laRSwKKwkJCQkgICAgICAgYnVmKSAhPSAwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIHJlYWQgVmVuZG9yLU5hbWUgZnJvbSIKKwkJCSAgICAiIG1vZHVsZSBFRVBST01cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZm9yIChpID0gMDsgaSA8IENPTVBMSUFOQ0VfU1RSX0NOVDsgaSsrKSB7CisJCXN0cl9wID0gY29tcGxpYW5jZV9zdHJbaV07CisJCXRtcF9idWYgPSBidWY7CisJCXdoaWxlICgqc3RyX3ApIHsKKwkJCWlmICgodTgpKCp0bXBfYnVmKSAhPSAodTgpKCpzdHJfcCkpCisJCQkJYnJlYWs7CisJCQlzdHJfcCsrOworCQkJdG1wX2J1ZisrOworCQl9CisKKwkJaWYgKCEoKnN0cl9wKSkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTRlArIE1vZHVsZSB2ZXJpZmllZCwgIgorCQkJCSAgICAgImluZGV4PSV4XG4iLCBpKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCURQKE5FVElGX01TR19MSU5LLCAiSW5jb21wbGlhbnQgU0ZQKyBtb2R1bGUuIERpc2FibGUgbW9kdWxlICEhIVxuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworc3RhdGljIHU4IGJueDJ4X2JjbTg3MjZfc2V0X2xpbWl0aW5nX21vZGUoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMsCisJCQkJCXU4IG1vZHVsZV90eXBlKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CisJdTggb3B0aW9uc1tTRlBfRUVQUk9NX09QVElPTlNfU0laRV07CisJdTggbGltaXRpbmdfbW9kZTsKKwl1OCBleHRfcGh5X2FkZHIgPSAoKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcgJgorCQkJICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQkgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTE2IGN1cl9saW1pdGluZ19tb2RlOworCWlmIChibngyeF9yZWFkX3NmcF9tb2R1bGVfZWVwcm9tKHBhcmFtcywKKwkJCQkgICAgICAgU0ZQX0VFUFJPTV9PUFRJT05TX0FERFIsCisJCQkJICAgICAgIFNGUF9FRVBST01fT1BUSU9OU19TSVpFLAorCQkJCSAgICAgICBvcHRpb25zKSAhPSAwKSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiRmFpbGVkIHRvIHJlYWQgT3B0aW9uIGZpZWxkIGZyb20iCisJCQkgICAgIiBtb2R1bGUgRUVQUk9NXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWxpbWl0aW5nX21vZGUgPSAhKG9wdGlvbnNbMF0gJgorCQkJICBTRlBfRUVQUk9NX09QVElPTlNfTElORUFSX1JYX09VVF9NQVNLKTsKKworCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKKwkJICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLAorCQkgICAgICAmY3VyX2xpbWl0aW5nX21vZGUpOworCURQKE5FVElGX01TR19MSU5LLCAiQ3VycmVudCBMaW1pdGluZyBtb2RlIGlzIDB4JXhcbiIsCisJCSBjdXJfbGltaXRpbmdfbW9kZSk7CisKKwlpZiAobGltaXRpbmdfbW9kZSAmJgorCSAgICAobW9kdWxlX3R5cGUgIT0gU0ZQX01PRFVMRV9UWVBFX1BBU1NJVkVfQ09QUEVSX0NBQkxFKSkgeworCQlEUChORVRJRl9NU0dfTElOSywKKwkJCSAiTW9kdWxlIG9wdGlvbnMgPSAweCV4LlNldHRpbmcgTElNSVRJTkcgTU9ERVxuIiwKKwkJCSBvcHRpb25zWzBdKTsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsCisJCQkgICAgICAgU0ZQX0xJTUlUSU5HX01PREVfVkFMVUUpOworCX0gZWxzZSB7IC8qIExSTSBtb2RlICggZGVmYXVsdCApKi8KKworCQlEUChORVRJRl9NU0dfTElOSywgIk1vZHVsZSBvcHRpb25zID0gMHgleC5TZXR0aW5nIExSTSBNT0RFXG4iLAorCQkJIG9wdGlvbnNbMF0pOworCisJCS8qIENoYW5naW5nIHRvIExSTSBtb2RlIHRha2VzIHF1aXRlIGZldyBzZWNvbmRzLgorCQlTbyBkbyBpdCBvbmx5IGlmIGN1cnJlbnQgbW9kZSBpcyBsaW1pdGluZworCQkoIGRlZmF1bHQgaXMgTFJNICkqLworCQlpZiAoY3VyX2xpbWl0aW5nX21vZGUgIT0gU0ZQX0xJTUlUSU5HX01PREVfVkFMVUUpCisJCQlyZXR1cm4gMDsKKworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19MUk1fTU9ERSwKKwkJCSAgICAgICAwKTsKKwkJYm54MnhfY2w0NV93cml0ZShicCwgcG9ydCwKKwkJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LAorCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCSAgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjIsCisJCQkgICAgICAgMHgxMjgpOworCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwb3J0LAorCQkJICAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYsCisJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJICAgICAgIE1ESU9fUE1BX1JFR19NSVNDX0NUUkwwLAorCQkJICAgICAgIDB4NDAwOCk7CisJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCQkgICAgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNiwKKwkJCSAgICAgICBleHRfcGh5X2FkZHIsCisJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkgICAgICAgTURJT19QTUFfUkVHX0xSTV9NT0RFLAorCQkJICAgICAgIDB4YWFhYSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTggYm54Mnhfd2FpdF9mb3Jfc2ZwX21vZHVsZV9pbml0aWFsaXplZChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwl1OCB2YWw7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CisJdTE2IHRpbWVvdXQ7CisJLyogSW5pdGlhbGl6YXRpb24gdGltZSBhZnRlciBob3QtcGx1ZyBtYXkgdGFrZSB1cCB0byAzMDBtcyBmb3Igc29tZQorCXBoeXMgdHlwZSAoIGUuZy4gSkRTVSApICovCisJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDYwOyB0aW1lb3V0KyspIHsKKwkJaWYgKGJueDJ4X3JlYWRfc2ZwX21vZHVsZV9lZXByb20ocGFyYW1zLCAxLCAxLCAmdmFsKQorCQkgICAgPT0gMCkgeworCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTRlArIG1vZHVsZSBpbml0aWFsaXphdGlvbiAiCisJCQkJICAgICAidG9vayAlZCBtc1xuIiwgdGltZW91dCAqIDUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbXNsZWVwKDUpOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHU4IGJueDJ4X3NmcF9tb2R1bGVfZGV0ZWN0aW9uKHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXU4IG1vZHVsZV90eXBlOworCXU4IGV4dF9waHlfYWRkciA9ICgocGFyYW1zLT5leHRfcGh5X2NvbmZpZyAmCisJCQkJUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJdTMyIGV4dF9waHlfdHlwZSA9IFhHWFNfRVhUX1BIWV9UWVBFKHBhcmFtcy0+ZXh0X3BoeV9jb25maWcpOworCisJaWYgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSB7CisJCURQKE5FVElGX01TR19MSU5LLCAiTW9kdWxlIGRldGVjdGlvbiBpcyBub3QgcmVxdWlyZWQgIgorCQkJICAgICJmb3IgdGhpcyBwaHlcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIHBsdWdnZWQgaW4vb3V0IGRldGVjdGVkIG9uIHBvcnQgJWRcbiIsCisJCSBwYXJhbXMtPnBvcnQpOworCisJaWYgKGJueDJ4X2dldF9zZnBfbW9kdWxlX3R5cGUocGFyYW1zLAorCQkJCSAgICAmbW9kdWxlX3R5cGUpICE9IDApIHsKKwkJRFAoTkVUSUZfTVNHX0xJTkssICJGYWlsZWQgdG8gZ2V0IHZhbGlkIG1vZHVsZSB0eXBlXG4iKTsKKwkJaWYgKCEocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJCSAgICAgIEZFQVRVUkVfQ09ORklHX01PRFVMRV9FTkZPUkNNRU5UX0VOQUJMRUQpKSB7CisJCQkvKiBJbiBjYXNlIG1vZHVsZSBkZXRlY3Rpb24gaXMgZGlzYWJsZWQsIGl0IHRyeXMgdG8KKwkJCWxpbmsgdXAuIFRoZSBpc3N1ZSB0aGF0IGNhbiBoYXBwZW4gaGVyZSBpcyBMUk0gLworCQkJTElNSVRJTkcgbW9kZSB3aGljaCBzZXQgYWNjb3JkaW5nIHRvIHRoZSBtb2R1bGUtdHlwZSovCisJCQlEUChORVRJRl9NU0dfTElOSywgIlVuYWJsZSB0byByZWFkIG1vZHVsZS10eXBlLiIKKwkJCQkgICAgIlByb2JhYmx5IGR1ZSB0byBCaXQgU3RyZXRjaGluZy4iCisJCQkJICAgICIgUHJvY2VlZGluZy4uLlxuIik7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAoYm54MnhfdmVyaWZ5X3NmcF9tb2R1bGUocGFyYW1zLCBtb2R1bGVfdHlwZSkgIT0KKwkJICAgMCkgeworCQkvKiBjaGVjayBTRlArIG1vZHVsZSBjb21wYXRpYmlsaXR5ICovCisJCURQKE5FVElGX01TR19MSU5LLCAiTW9kdWxlIHZlcmlmaWNhdGlvbiBmYWlsZWQhIVxuIik7CisJCS8qIFR1cm4gb24gZmF1bHQgbW9kdWxlLWRldGVjdGVkIGxlZCAqLworCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLAorCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19ISUdILAorCQkJCSAgcGFyYW1zLT5wb3J0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVHVybiBvZmYgZmF1bHQgbW9kdWxlLWRldGVjdGVkIGxlZCAqLworCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fTE9XLAorCQkJICBwYXJhbXMtPnBvcnQpOworCisJLyogQ2hlY2sgYW5kIHNldCBsaW1pdGluZyBtb2RlIC8gTFJNIG1vZGUgKi8KKwlibngyeF9iY204NzI2X3NldF9saW1pdGluZ19tb2RlKHBhcmFtcywgbW9kdWxlX3R5cGUpOworCisJLyogRW5hYmxlIHRyYW5zbWl0IGZvciB0aGlzIG1vZHVsZSAqLworCWJueDJ4X2JjbTg3MjZfc2V0X3RyYW5zbWl0dGVyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgIGV4dF9waHlfYWRkciwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYm54MnhfaGFuZGxlX21vZHVsZV9kZXRlY3RfaW50KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOworCXUzMiBncGlvX3ZhbDsKKwl1OCBwb3J0ID0gcGFyYW1zLT5wb3J0OworCS8qIFNldCB2YWxpZCBtb2R1bGUgbGVkIG9mZiAqLworCWJueDJ4X3NldF9ncGlvKGJwLCBNSVNDX1JFR0lTVEVSU19HUElPXzAsCisJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fSElHSCwKKwkJCSAgcGFyYW1zLT5wb3J0KTsKKworCS8qIEdldCBjdXJyZW50IGdwaW8gdmFsIHJlZmVsZWN0aW5nIG1vZHVsZSBwbHVnZ2VkIGluIC8gb3V0Ki8KKwlncGlvX3ZhbCA9IGJueDJ4X2dldF9ncGlvKGJwLCAgTUlTQ19SRUdJU1RFUlNfR1BJT18zLCBwb3J0KTsKKworCS8qIENhbGwgdGhlIGhhbmRsaW5nIGZ1bmN0aW9uIGluIGNhc2UgbW9kdWxlIGlzIGRldGVjdGVkICovCisJaWYgKGdwaW9fdmFsID09IDApIHsKKworCQlibngyeF9zZXRfZ3Bpb19pbnQoYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMywKKwkJCQkgICAgICBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfQ0xSLAorCQkJCSAgICAgIHBvcnQpOworCisJCWlmIChibngyeF93YWl0X2Zvcl9zZnBfbW9kdWxlX2luaXRpYWxpemVkKHBhcmFtcykKKwkJICAgID09IDApCisJCQlibngyeF9zZnBfbW9kdWxlX2RldGVjdGlvbihwYXJhbXMpOworCQllbHNlCisJCQlEUChORVRJRl9NU0dfTElOSywgIlNGUCsgbW9kdWxlIGlzIG5vdCBpbml0aWFsaXplZFxuIik7CisJfSBlbHNlIHsKKwkJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCQkgICAgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX0FERFJfTUFTSykgPj4KKwkJCQkgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJCWJueDJ4X3NldF9ncGlvX2ludChicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18zLAorCQkJCSAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9TRVQsCisJCQkJICAgICAgcG9ydCk7CisJCS8qIE1vZHVsZSB3YXMgcGx1Z2dlZCBvdXQuICovCisJCS8qIERpc2FibGUgdHJhbnNtaXQgZm9yIHRoaXMgbW9kdWxlICovCisJCWJueDJ4X2JjbTg3MjZfc2V0X3RyYW5zbWl0dGVyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICBleHRfcGh5X2FkZHIsIDApOworCX0KIH0KIAogc3RhdGljIHZvaWQgYm54MnhfYmNtODA3eF9mb3JjZV8xMEcoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpCkBAIC0yMjM5LDcgKzI3NTYsNyBAQAogCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAogCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkgICAgICAweGM4MDEsICZ2YWwpOworCQkgICAgICBNRElPX1BNQV9SRUdfODA3M19DSElQX1JFViwgJnZhbCk7CiAKIAlpZiAodmFsID09IDApIHsKIAkJLyogTXVzdG4ndCBzZXQgbG93IHBvd2VyIG1vZGUgaW4gODA3MyBBMCAqLwpAQCAtMjM3NywzMSArMjg5NCw0MCBAQAogCQkgICAgICAgTURJT19BTl9ERVZBRCwKIAkJICAgICAgIE1ESU9fQU5fUkVHX0FEVl9QQVVTRSwgdmFsKTsKIH0KK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9wcmVlbXBoYXNpcyhzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcykKK3sKKwl1MTYgYmFuaywgaSA9IDA7CisJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAKKwlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1JYMCwgaSA9IDA7IGJhbmsgPD0gTURJT19SRUdfQkFOS19SWDM7CisJICAgICAgYmFuayArPSAoTURJT19SRUdfQkFOS19SWDEtTURJT19SRUdfQkFOS19SWDApLCBpKyspIHsKKwkJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJCSAgICAgIGJhbmssCisJCQkJCSAgICAgIE1ESU9fUlgwX1JYX0VRX0JPT1NULAorCQkJCQkgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3J4W2ldKTsKKwl9CisKKwlmb3IgKGJhbmsgPSBNRElPX1JFR19CQU5LX1RYMCwgaSA9IDA7IGJhbmsgPD0gTURJT19SRUdfQkFOS19UWDM7CisJCSAgICAgIGJhbmsgKz0gKE1ESU9fUkVHX0JBTktfVFgxIC0gTURJT19SRUdfQkFOS19UWDApLCBpKyspIHsKKwkJCUNMNDVfV1JfT1ZFUl9DTDIyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCisJCQkJCSAgICAgIGJhbmssCisJCQkJCSAgICAgIE1ESU9fVFgwX1RYX0RSSVZFUiwKKwkJCQkJICAgICAgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFtpXSk7CisJfQorfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2ludGVybmFsX3BoeShzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywKIAkJCQlzdHJ1Y3QgbGlua192YXJzICp2YXJzKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBwYXJhbXMtPmJwOwotCXU4IHBvcnQgPSBwYXJhbXMtPnBvcnQ7CiAJaWYgKCEodmFycy0+cGh5X2ZsYWdzICYgUEhZX1NHTUlJX0ZMQUcpKSB7Ci0JCXUxNiBiYW5rLCByeF9lcTsKLQotCQlyeF9lcSA9ICgocGFyYW1zLT5zZXJkZXNfY29uZmlnICYKLQkJCSAgUE9SVF9IV19DRkdfU0VSREVTX1JYX0RSVl9FUVVBTElaRVJfTUFTSykgPj4KLQkJCSBQT1JUX0hXX0NGR19TRVJERVNfUlhfRFJWX0VRVUFMSVpFUl9TSElGVCk7Ci0KLQkJRFAoTkVUSUZfTVNHX0xJTkssICJzZXR0aW5nIHJ4IGVxIHRvIDB4JXhcbiIsIHJ4X2VxKTsKLQkJZm9yIChiYW5rID0gTURJT19SRUdfQkFOS19SWDA7IGJhbmsgPD0gTURJT19SRUdfQkFOS19SWF9BTEw7Ci0JCSAgICAgIGJhbmsgKz0gKE1ESU9fUkVHX0JBTktfUlgxLU1ESU9fUkVHX0JBTktfUlgwKSkgewotCQkJQ0w0NV9XUl9PVkVSX0NMMjIoYnAsIHBvcnQsCi0JCQkJCSAgICAgIHBhcmFtcy0+cGh5X2FkZHIsCi0JCQkJCSAgICAgIGJhbmsgLAotCQkJCQkgICAgICBNRElPX1JYMF9SWF9FUV9CT09TVCwKLQkJCQkJICAgICAgKChyeF9lcSAmCi0JCQkJTURJT19SWDBfUlhfRVFfQk9PU1RfRVFVQUxJWkVSX0NUUkxfTUFTSykgfAotCQkJCU1ESU9fUlgwX1JYX0VRX0JPT1NUX09GRlNFVF9DVFJMKSk7Ci0JCX0KKwkJaWYgKChYR1hTX0VYVF9QSFlfVFlQRShwYXJhbXMtPmV4dF9waHlfY29uZmlnKSA9PQorCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgJiYKKwkJICAgIChwYXJhbXMtPmZlYXR1cmVfY29uZmlnX2ZsYWdzICYKKwkJICAgICBGRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEKSkKKwkJCWJueDJ4X3NldF9wcmVlbXBoYXNpcyhwYXJhbXMpOwogCiAJCS8qIGZvcmNlZCBzcGVlZCByZXF1ZXN0ZWQ/ICovCiAJCWlmICh2YXJzLT5saW5lX3NwZWVkICE9IFNQRUVEX0FVVE9fTkVHKSB7CkBAIC0yNTA2LDEyICszMDMyLDUzIEBACiAJCQkJICAgICAgIGV4dF9waHlfYWRkciwKIAkJCQkgICAgICAgTURJT19XSVNfREVWQUQsCiAJCQkJICAgICAgIE1ESU9fV0lTX1JFR19MQVNJX0NOVEwsIDB4MSk7CisKKwkJCS8qIEJDTTg3MDUgZG9lc24ndCBoYXZlIG1pY3JvY29kZSwgaGVuY2UgdGhlIDAgKi8KKwkJCWJueDJ4X3NhdmVfc3Bpcm9tX3ZlcnNpb24oYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSwgMCk7CiAJCQlicmVhazsKIAogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNlxuIik7Ci0KLQkJCW1zbGVlcCgxMCk7CisJCQkvKiBXYWl0IHVudGlsIGZ3IGlzIGxvYWRlZCAqLworCQkJZm9yIChjbnQgPSAwOyBjbnQgPCAxMDA7IGNudCsrKSB7CisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmdmFsKTsKKwkJCQlpZiAodmFsKQorCQkJCQlicmVhazsKKwkJCQltc2xlZXAoMTApOworCQkJfQorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJYR1hTIDg3MDYgaXMgaW5pdGlhbGl6ZWQgIgorCQkJCSJhZnRlciAlZCBtc1xuIiwgY250KTsKKwkJCWlmICgocGFyYW1zLT5mZWF0dXJlX2NvbmZpZ19mbGFncyAmCisJCQkgICAgIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQpKSB7CisJCQkJdTggaTsKKwkJCQl1MTYgcmVnOworCQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCQkJcmVnID0gTURJT19YU184NzA2X1JFR19CQU5LX1JYMCArCisJCQkJCQlpKihNRElPX1hTXzg3MDZfUkVHX0JBTktfUlgxIC0KKwkJCQkJCSAgIE1ESU9fWFNfODcwNl9SRUdfQkFOS19SWDApOworCQkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgIE1ESU9fWFNfREVWQUQsCisJCQkJCQkgICAgICByZWcsICZ2YWwpOworCQkJCQkvKiBDbGVhciBmaXJzdCAzIGJpdHMgb2YgdGhlIGNvbnRyb2wgKi8KKwkJCQkJdmFsICY9IH4weDc7CisJCQkJCS8qIFNldCBjb250cm9sIGJpdHMgYWNjb3JkaW5nIHRvCisJCQkJCWNvbmZpZ3VhdGlvbiAqLworCQkJCQl2YWwgfD0gKHBhcmFtcy0+eGd4c19jb25maWdfcnhbaV0gJgorCQkJCQkJMHg3KTsKKwkJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIFJYIgorCQkJCQkJICJFcXVhbGl6ZXIgdG8gQkNNODcwNiByZWcgMHgleCIKKwkJCQkJCSAiIDwtLSB2YWwgMHgleFxuIiwgcmVnLCB2YWwpOworCQkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJCSAgICAgICBNRElPX1hTX0RFVkFELAorCQkJCQkJICAgICAgIHJlZywgdmFsKTsKKwkJCQl9CisJCQl9CiAJCQkvKiBGb3JjZSBzcGVlZCAqLwogCQkJLyogRmlyc3QgZW5hYmxlIExBU0kgKi8KIAkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKQEAgLTI1NzgsOSArMzE0NSw5NSBAQAogCQkJCQkgICAgICAgMHgxMjAwKTsKIAogCQkJfQotCisJCQlibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQlleHRfcGh5X3R5cGUsCisJCQkJCQlleHRfcGh5X2FkZHIsCisJCQkJCQlwYXJhbXMtPnNobWVtX2Jhc2UpOwogCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiSW5pdGlhbGl6aW5nIEJDTTg3MjZcbiIpOworCQkJYm54MnhfYmNtODcyNl9leHRlcm5hbF9yb21fYm9vdChwYXJhbXMpOwogCisJCQkvKiBOZWVkIHRvIGNhbGwgbW9kdWxlIGRldGVjdGVkIG9uIGluaXRpYWxpemF0aW9uIHNpbmNlCisJCQl0aGUgbW9kdWxlIGRldGVjdGlvbiB0cmlnZ2VyZWQgYnkgYWN0dWFsIG1vZHVsZQorCQkJaW5zZXJ0aW9uIG1pZ2h0IG9jY3VyIGJlZm9yZSBkcml2ZXIgaXMgbG9hZGVkLCBhbmQgd2hlbgorCQkJZHJpdmVyIGlzIGxvYWRlZCwgaXQgcmVzZXQgYWxsIHJlZ2lzdGVycywgaW5jbHVkaW5nIHRoZQorCQkJdHJhbnNtaXR0ZXIgKi8KKwkJCWJueDJ4X3NmcF9tb2R1bGVfZGV0ZWN0aW9uKHBhcmFtcyk7CisJCQlpZiAocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF8xMDAwKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDFHIGZvcmNlXG4iKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwgMHg0MCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHXzEwR19DVFJMMiwgMHhEKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfTEFTSV9DVFJMLCAweDUpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTV9DVFJMLAorCQkJCQkgICAgICAgMHg0MDApOworCQkJfSBlbHNlIGlmICgocGFyYW1zLT5yZXFfbGluZV9zcGVlZCA9PQorCQkJCSAgICBTUEVFRF9BVVRPX05FRykgJiYKKwkJCQkgICAoKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgorCQkJCSAgICAgUE9SVF9IV19DRkdfU1BFRURfQ0FQQUJJTElUWV9EMF8xRykpKSB7CisJCQkJRFAoTkVUSUZfTVNHX0xJTkssICJTZXR0aW5nIDFHIGNsYXVzZTM3IFxuIik7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19BRFYsIDB4MjApOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19DTDczLCAweDA0MGMpOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICAgTURJT19BTl9SRUdfQ0wzN19GQ19MRCwgMHgwMDIwKTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fQU5fUkVHX0NMMzdfQU4sIDB4MTAwMCk7CisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLCAweDEyMDApOworCisJCQkJLyogRW5hYmxlIFJYLUFMQVJNIGNvbnRyb2wgdG8gcmVjZWl2ZQorCQkJCWludGVycnVwdCBmb3IgMUcgc3BlZWQgY2hhbmdlICovCisJCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgICBleHRfcGh5X2FkZHIsIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMHg0KTsKKwkJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJCSAgICAgICBNRElPX1BNQV9SRUdfUlhfQUxBUk1fQ1RSTCwKKwkJCQkJICAgICAgIDB4NDAwKTsKKworCQkJfSBlbHNlIHsgLyogRGVmYXVsdCAxMEcuIFNldCBvbmx5IExBU0kgY29udHJvbCAqLworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLCBNRElPX1BNQV9ERVZBRCwKKwkJCQkJICAgICAgIE1ESU9fUE1BX1JFR19MQVNJX0NUUkwsIDEpOworCQkJfQorCisJCQkvKiBTZXQgVFggUHJlRW1waGFzaXMgaWYgbmVlZGVkICovCisJCQlpZiAoKHBhcmFtcy0+ZmVhdHVyZV9jb25maWdfZmxhZ3MgJgorCQkJICAgICBGRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEKSkgeworCQkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyBUWF9DVFJMMSAweCV4LCIKKwkJCQkJICJUWF9DVFJMMiAweCV4XG4iLAorCQkJCQkgcGFyYW1zLT54Z3hzX2NvbmZpZ190eFswXSwKKwkJCQkJIHBhcmFtcy0+eGd4c19jb25maWdfdHhbMV0pOworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFhfQ1RSTDEsCisJCQkJCSAgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzBdKTsKKworCQkJCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgIE1ESU9fUE1BX0RFVkFELAorCQkJCQkgICAgICAgTURJT19QTUFfUkVHXzg3MjZfVFhfQ1RSTDIsCisJCQkJCSAgICAgICBwYXJhbXMtPnhneHNfY29uZmlnX3R4WzFdKTsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKIAkJewpAQCAtMjYyNyw3ICszMjgwLDcgQEAKIAkJCQkgICAgICBleHRfcGh5X3R5cGUsCiAJCQkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIDB4Y2ExMywKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfTTgwNTFfTVNHT1VUX1JFRywKIAkJCQkgICAgICAmdG1wMSk7CiAKIAkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LApAQCAtMjY5NCw3ICszMzQ3LDcgQEAKIAkJCQkJICAgICAgZXh0X3BoeV90eXBlLAogCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCiAJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCSAgICAgIDB4ODMyOSwgJnRtcDEpOworCQkJCQkgICAgICBNRElPX0FOX1JFR184MDczXzJfNUcsICZ0bXAxKTsKIAogCQkJCWlmICgoKHBhcmFtcy0+c3BlZWRfY2FwX21hc2sgJgogCQkJCSAgICAgIFBPUlRfSFdfQ0ZHX1NQRUVEX0NBUEFCSUxJVFlfRDBfMl81RykgJiYKQEAgLTI3MDgsNyArMzM2MSw3IEBACiAJCQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczLAogCQkJCQkgZXh0X3BoeV9hZGRyLAogCQkJCQkgTURJT19QTUFfREVWQUQsCi0JCQkJCSAweGM4MDEsICZwaHlfdmVyKTsKKwkJCQkJIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmcGh5X3Zlcik7CiAJCQkJCURQKE5FVElGX01TR19MSU5LLCAiQWRkIDIuNUdcbiIpOwogCQkJCQlpZiAocGh5X3ZlciA+IDApCiAJCQkJCQl0bXAxIHw9IDE7CkBAIC0yNzIzLDcgKzMzNzYsNyBAQAogCQkJCQkgICAgICAgZXh0X3BoeV90eXBlLAogCQkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCQkgICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJICAgICAgIDB4ODMyOSwgdG1wMSk7CisJCQkJCSAgICAgICBNRElPX0FOX1JFR184MDczXzJfNUcsIHRtcDEpOwogCQkJfQogCiAJCQkvKiBBZGQgc3VwcG9ydCBmb3IgQ0wzNyAocGFzc2l2ZSBtb2RlKSBJSSAqLwpAQCAtMjc5OCw2ICszNDUxLDggQEAKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKKwkJeworCQkJdTE2IGZ3X3ZlcjEsIGZ3X3ZlcjI7CiAJCQlEUChORVRJRl9NU0dfTElOSywKIAkJCQkiU2V0dGluZyB0aGUgU0ZYNzEwMSBMQVNJIGluZGljYXRpb25cbiIpOwogCkBAIC0yODI3LDYgKzM0ODIsNTAgQEAKIAkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAogCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAogCQkJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLCB2YWwpOworCisJCQkvKiBTYXZlIHNwaXJvbSB2ZXJzaW9uICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHXzcxMDFfVkVSMSwgJmZ3X3ZlcjEpOworCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgTURJT19QTUFfUkVHXzcxMDFfVkVSMiwgJmZ3X3ZlcjIpOworCisJCQlibngyeF9zYXZlX3NwaXJvbV92ZXJzaW9uKHBhcmFtcy0+YnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkJCXBhcmFtcy0+c2htZW1fYmFzZSwKKwkJCQkJCSh1MzIpKGZ3X3ZlcjE8PDE2IHwgZndfdmVyMikpOworCisJCQlicmVhazsKKwkJfQorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CisJCQlEUChORVRJRl9NU0dfTElOSywKKwkJCQkiU2V0dGluZyB0aGUgQkNNODQ4MSBMQVNJIGNvbnRyb2xcbiIpOworCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICAgTURJT19QTUFfUkVHX0xBU0lfQ1RSTCwgMHgxKTsKKworCQkJLyogUmVzdGFydCBhdXRvbmVnICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKKwkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJICAgICAgTURJT19BTl9SRUdfQ1RSTCwgJnZhbCk7CisJCQl2YWwgfD0gMHgyMDA7CisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgICBNRElPX0FOX0RFVkFELAorCQkJCSAgICAgICBNRElPX0FOX1JFR19DVFJMLCB2YWwpOworCisJCQlibngyeF9zYXZlX2JjbV9zcGlyb21fdmVyKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQlleHRfcGh5X3R5cGUsCisJCQkJCQlleHRfcGh5X2FkZHIsCisJCQkJCQlwYXJhbXMtPnNobWVtX2Jhc2UpOworCiAJCQlicmVhazsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOgogCQkJRFAoTkVUSUZfTVNHX0xJTkssCkBAIC0yOTEwLDM4ICszNjA5LDQzIEBACiAJCQlicmVhazsKIAogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIlhHWFMgODcwNlxuIik7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiWEdYUyA4NzA2Lzg3MjZcbiIpOworCQkJLyogQ2xlYXIgUlggQWxhcm0qLwogCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKIAkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLCAmdmFsMSk7Ci0JCQlEUChORVRJRl9NU0dfTElOSywgIjg3MDYgTEFTSSBzdGF0dXMgMHgleFxuIiwgdmFsMSk7CisJCQkJICAgICAgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwKKwkJCQkgICAgICAmdmFsMik7CisJCQkvKiBjbGVhciBMQVNJIGluZGljYXRpb24qLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywKKwkJCQkgICAgICAmdmFsMSk7CisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX0xBU0lfU1RBVFVTLAorCQkJCSAgICAgICZ2YWwyKTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNi84NzI2IExBU0kgc3RhdHVzIDB4JXgtLT4iCisJCQkJICAgICAiMHgleFxuIiwgdmFsMSwgdmFsMik7CiAKIAkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCiAJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19MQVNJX1NUQVRVUywgJnZhbDEpOwotCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2IExBU0kgc3RhdHVzIDB4JXhcbiIsIHZhbDEpOworCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELCBNRElPX1BNQV9SRUdfUlhfU0QsCisJCQkJICAgICAgJnJ4X3NkKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUENTX0RFVkFELCBNRElPX1BDU19SRUdfU1RBVFVTLAorCQkJCSAgICAgICZwY3Nfc3RhdHVzKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLAorCQkJCSAgICAgICZ2YWwyKTsKKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLAorCQkJCSAgICAgICZ2YWwyKTsKIAotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJICAgICAgTURJT19QTUFfUkVHX1JYX1NELCAmcnhfc2QpOwotCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJICAgICAgTURJT19QQ1NfREVWQUQsCi0JCQkJICAgICAgTURJT19QQ1NfUkVHX1NUQVRVUywgJnBjc19zdGF0dXMpOwotCi0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLCAmdmFsMik7Ci0JCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLCAmdmFsMik7Ci0KLQkJCURQKE5FVElGX01TR19MSU5LLCAiODcwNiByeF9zZCAweCV4IgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICI4NzA2Lzg3MjYgcnhfc2QgMHgleCIKIAkJCSAgICIgIHBjc19zdGF0dXMgMHgleCAxR2JwcyBsaW5rX3N0YXR1cyAweCV4XG4iLAogCQkJICAgcnhfc2QsIHBjc19zdGF0dXMsIHZhbDIpOwogCQkJLyogbGluayBpcyB1cCBpZiBib3RoIGJpdCAwIG9mIHBtZF9yeF9zZCBhbmQKQEAgLTI5NTEsMTkgKzM2NTUsMzEgQEAKIAkJCWV4dF9waHlfbGlua191cCA9ICgocnhfc2QgJiBwY3Nfc3RhdHVzICYgMHgxKSB8fAogCQkJCQkgICAodmFsMiAmICgxPDwxKSkpOwogCQkJaWYgKGV4dF9waHlfbGlua191cCkgeworCQkJCWlmIChleHRfcGh5X3R5cGUgPT0KKwkJCQkgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjYpIHsKKwkJCQkJLyogSWYgdHJhbnNtaXR0ZXIgaXMgZGlzYWJsZWQsCisJCQkJCWlnbm9yZSBmYWxzZSBsaW5rIHVwIGluZGljYXRpb24gKi8KKwkJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJCQkgICBleHRfcGh5X3R5cGUsCisJCQkJCQkgICBleHRfcGh5X2FkZHIsCisJCQkJCQkgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkJCSAgIE1ESU9fUE1BX1JFR19QSFlfSURFTlRJRklFUiwKKwkJCQkJCSAgICZ2YWwxKTsKKwkJCQkJaWYgKHZhbDEgJiAoMTw8MTUpKSB7CisJCQkJCQlEUChORVRJRl9NU0dfTElOSywgIlR4IGlzICIKKwkJCQkJCQkgICAgImRpc2FibGVkXG4iKTsKKwkJCQkJCWV4dF9waHlfbGlua191cCA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwogCQkJCWlmICh2YWwyICYgKDE8PDEpKQogCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKIAkJCQllbHNlCiAJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKIAkJCX0KIAotCQkJLyogY2xlYXIgTEFTSSBpbmRpY2F0aW9uKi8KLQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJCSAgICAgIE1ESU9fUE1BX1JFR19SWF9BTEFSTSwgJnZhbDIpOwogCQkJYnJlYWs7Ci0KIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CiAJCXsKQEAgLTMwMTgsNyArMzczNCw3IEBACiAJCQkJICAgICAgZXh0X3BoeV90eXBlLAogCQkJCSAgICAgIGV4dF9waHlfYWRkciwKIAkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCQkgICAgICAweGNhMTMsCisJCQkJICAgICAgTURJT19QTUFfUkVHX004MDUxX01TR09VVF9SRUcsCiAJCQkJICAgICAgJnZhbDEpOwogCiAJCQkvKiBDaGVjayB0aGUgTEFTSSAqLwpAQCAtMzA2MywxNyArMzc3OSwxNyBAQAogCQkJCQl9CiAJCQkJfQogCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKLQkJCQkJCSAgICAgIDB4ODMwNCwKLQkJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKKwkJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCisJCQkJCSAgICAgIE1ESU9fQU5fUkVHX0xJTktfU1RBVFVTLAorCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkJICAgICAgMHg4MzA0LAotCQkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOworCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKIAogCQkJCS8qIENoZWNrIHRoZSBsaW5rIHN0YXR1cyBvbiAxLjEuMiAqLwogCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LApAQCAtMzA5MCw3ICszODA2LDcgQEAKIAkJCQkJICAgICAiYW5fbGlua19zdGF0dXM9MHgleFxuIiwKIAkJCQkJICB2YWwyLCB2YWwxLCBhbjEwMDBfc3RhdHVzKTsKIAotCQkJCQlleHRfcGh5X2xpbmtfdXAgPSAoKCh2YWwxICYgNCkgPT0gNCkgfHwKKwkJCQlleHRfcGh5X2xpbmtfdXAgPSAoKCh2YWwxICYgNCkgPT0gNCkgfHwKIAkJCQkJCShhbjEwMDBfc3RhdHVzICYgKDE8PDEpKSk7CiAJCQkJaWYgKGV4dF9waHlfbGlua191cCAmJgogCQkJCSAgICBibngyeF84MDczX2lzX3Nucl9uZWVkZWQocGFyYW1zKSkgewpAQCAtMzExOCwxMSArMzgzNCwxMSBAQAogCiAJCQkJfQogCQkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkJCQkgICAgICAweGM4MjAsCi0JCQkJCQkgICAgICAmbGlua19zdGF0dXMpOworCQkJCQkgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgTURJT19QTUFfREVWQUQsCisJCQkJCSAgIE1ESU9fUE1BX1JFR184MDczX1NQRUVEX0xJTktfU1RBVFVTLAorCQkJCQkgICAmbGlua19zdGF0dXMpOwogCiAJCQkJLyogQml0cyAwLi4yIC0tPiBzcGVlZCBkZXRlY3RlZCwKIAkJCQkgICBiaXRzIDEzLi4xNS0tPiBsaW5rIGlzIGRvd24gKi8KQEAgLTMxNTYsMTcgKzM4NzIsMTcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJLyogU2VlIGlmIDFHIGxpbmsgaXMgdXAgZm9yIHRoZSA4MDcyICovCiAJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCi0JCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCi0JCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAotCQkJCQkJICAgICAgMHg4MzA0LAotCQkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOworCQkJCQkgICAgICBleHRfcGh5X3R5cGUsCisJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkJICAgICAgTURJT19BTl9ERVZBRCwKKwkJCQkJICAgICAgTURJT19BTl9SRUdfTElOS19TVEFUVVMsCisJCQkJCSAgICAgICZhbjEwMDBfc3RhdHVzKTsKIAkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsCi0JCQkJCQkgICAgICAweDgzMDQsCi0JCQkJCQkgICAgICAmYW4xMDAwX3N0YXR1cyk7CisJCQkJCSAgICAgIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELAorCQkJCQkgICAgICBNRElPX0FOX1JFR19MSU5LX1NUQVRVUywKKwkJCQkJICAgICAgJmFuMTAwMF9zdGF0dXMpOwogCQkJCWlmIChhbjEwMDBfc3RhdHVzICYgKDE8PDEpKSB7CiAJCQkJCWV4dF9waHlfbGlua191cCA9IDE7CiAJCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwOwpAQCAtMzIyNiw3ICszOTQyLDUzIEBACiAJCQkJCSAodmFsMiAmICgxPDwxNCkpKTsKIAkJCX0KIAkJCWJyZWFrOworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODE6CisJCQkvKiBDbGVhciBMQVNJIGludGVycnVwdCAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsCisJCQkJICAgICAgZXh0X3BoeV90eXBlLAorCQkJCSAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJCQkgICAgICBNRElPX1BNQV9SRUdfTEFTSV9TVEFUVVMsICZ2YWwxKTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODQ4MSBMQVNJIHN0YXR1cyByZWcgPSAweCV4XG4iLAorCQkJCSB2YWwxKTsKIAorCQkJLyogQ2hlY2sgMTBHLUJhc2VUIGxpbmsgc3RhdHVzICovCisJCQkvKiBDaGVjayBHbG9iYWwgUE1EIHNpZ25hbCBvayAqLworCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJICAgICAgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR19SWF9TRCwKKwkJCQkgICAgICAmcnhfc2QpOworCQkJLyogQ2hlY2sgUENTIGJsb2NrIGxvY2sgKi8KKwkJCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCSAgICAgIE1ESU9fUENTX0RFVkFELCBNRElPX1BDU19SRUdfU1RBVFVTLAorCQkJCSAgICAgICZwY3Nfc3RhdHVzKTsKKwkJCURQKE5FVElGX01TR19MSU5LLCAiODQ4MSAxLmEgPSAweCV4LCAxLjIwID0gMHgleFxuIiwKKwkJCQkgcnhfc2QsIHBjc19zdGF0dXMpOworCQkJaWYgKHJ4X3NkICYgcGNzX3N0YXR1cyAmIDB4MSkgeworCQkJCXZhcnMtPmxpbmVfc3BlZWQgPSBTUEVFRF8xMDAwMDsKKwkJCQlleHRfcGh5X2xpbmtfdXAgPSAxOworCQkJfSBlbHNlIHsKKworCQkJCS8qIENoZWNrIDEwMDAtQmFzZVQgbGluayBzdGF0dXMgKi8KKwkJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAorCQkJCQkgICAgICBleHRfcGh5X2FkZHIsCisJCQkJCSAgICAgIE1ESU9fQU5fREVWQUQsIDB4RkZFMSwKKwkJCQkJICAgICAgJnZhbDEpOworCisJCQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKKwkJCQkJICAgICAgZXh0X3BoeV9hZGRyLAorCQkJCQkgICAgICBNRElPX0FOX0RFVkFELCAweEZGRTEsCisJCQkJCSAgICAgICZ2YWwyKTsKKwkJCQlEUChORVRJRl9NU0dfTElOSywgIjg0ODEgNy5GRkUxID0iCisJCQkJCSAgICAgIjB4JXgtLT4weCV4XG4iLCB2YWwxLCB2YWwyKTsKKwkJCQlpZiAodmFsMiAmICgxPDwyKSkgeworCQkJCQl2YXJzLT5saW5lX3NwZWVkID0gU1BFRURfMTAwMDsKKwkJCQkJZXh0X3BoeV9saW5rX3VwID0gMTsKKwkJCQl9CisJCQl9CisKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJCQUQgWEdYUyBleHRfcGh5X2NvbmZpZyAweCV4XG4iLAogCQkJICAgcGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7CkBAIC0zNDI2LDcgKzQxODgsNyBAQAogCQkJICAgICAgZXh0X3BoeV9hZGRyLAogCQkJICAgICAgTURJT19QTUFfREVWQUQsCiAJCQkgICAgICBNRElPX1BNQV9SRUdfQ1RSTCwKLQkJCSAgICAgICAmY3RybCk7CisJCQkgICAgICAmY3RybCk7CiAJCWlmICghKGN0cmwgJiAoMTw8MTUpKSkgewogCQkJRFAoTkVUSUZfTVNHX0xJTkssICJSZXNldCBjb21wbGV0ZWRcblxuIik7CiAJCQkJYnJlYWs7CkBAIC0zNDUyLDkxICs0MjE0LDM5IEBACiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IHBhcmFtcy0+YnA7CiAJdTMyIGV4dF9waHlfdHlwZSA9IDA7Ci0JdTE2IHZhbCA9IDA7Ci0JdTggZXh0X3BoeV9hZGRyID0gMCA7CisJdTMyIHNwaXJvbV92ZXIgPSAwOwogCXU4IHN0YXR1cyA9IDAgOwotCXUzMiB2ZXJfbnVtOwogCiAJaWYgKHZlcnNpb24gPT0gTlVMTCB8fCBwYXJhbXMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlzcGlyb21fdmVyID0gUkVHX1JEKGJwLCBwYXJhbXMtPnNobWVtX2Jhc2UgKworCQkgICBvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAorCQkJICAgIHBvcnRfbWJbcGFyYW1zLT5wb3J0XS5leHRfcGh5X2Z3X3ZlcnNpb24pKTsKKwogCS8qIHJlc2V0IHRoZSByZXR1cm5lZCB2YWx1ZSB0byB6ZXJvICovCiAJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUocGFyYW1zLT5leHRfcGh5X2NvbmZpZyk7Ci0JZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKLQkJCQlQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9NQVNLKSA+PgotCQkJCVBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX1NISUZUKTsKLQogCXN3aXRjaCAoZXh0X3BoeV90eXBlKSB7CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCiAJCWlmIChsZW4gPCA1KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJLyogVGFrZSBleHQgcGh5IG91dCBvZiByZXNldCAqLwotCQlpZiAoIWRyaXZlcl9sb2FkZWQpCi0JCQlibngyeF90dXJuX29uX2VmKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKLQotCQkvKiAgd2FpdCBmb3IgMW1zICovCi0JCW1zbGVlcCgxKTsKLQotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwKLQkJCSAgICAgIGV4dF9waHlfdHlwZSwKLQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHXzcxMDFfVkVSMSwgJnZhbCk7Ci0JCXZlcnNpb25bMl0gPSAodmFsICYgMHhGRik7Ci0JCXZlcnNpb25bM10gPSAoKHZhbCAmIDB4RkYwMCk+PjgpOwotCi0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LAotCQkJICAgICAgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR183MTAxX1ZFUjIsCi0JCQkgICAgICAmdmFsKTsKLQkJdmVyc2lvblswXSA9ICh2YWwgJiAweEZGKTsKLQkJdmVyc2lvblsxXSA9ICgodmFsICYgMHhGRjAwKT4+OCk7CisJCXZlcnNpb25bMF0gPSAoc3Bpcm9tX3ZlciAmIDB4RkYpOworCQl2ZXJzaW9uWzFdID0gKHNwaXJvbV92ZXIgJiAweEZGMDApID4+IDg7CisJCXZlcnNpb25bMl0gPSAoc3Bpcm9tX3ZlciAmIDB4RkYwMDAwKSA+PiAxNjsKKwkJdmVyc2lvblszXSA9IChzcGlyb21fdmVyICYgMHhGRjAwMDAwMCkgPj4gMjQ7CiAJCXZlcnNpb25bNF0gPSAnXDAnOwogCi0JCWlmICghZHJpdmVyX2xvYWRlZCkKLQkJCWJueDJ4X3R1cm5fb2ZmX3NmKGJwLCBwYXJhbXMtPnBvcnQpOwogCQlicmVhazsKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczOgotCXsKLQkJLyogVGFrZSBleHQgcGh5IG91dCBvZiByZXNldCAqLwotCQlpZiAoIWRyaXZlcl9sb2FkZWQpCi0JCQlibngyeF90dXJuX29uX2VmKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfYWRkciwKLQkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKLQotCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV90eXBlLAotCQkJICAgICAgZXh0X3BoeV9hZGRyLAotCQkJICAgICAgTURJT19QTUFfREVWQUQsCi0JCQkgICAgICBNRElPX1BNQV9SRUdfUk9NX1ZFUjEsICZ2YWwpOwotCQl2ZXJfbnVtID0gdmFsPDwxNjsKLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIyLCAmdmFsKTsKLQkJdmVyX251bSB8PSB2YWw7Ci0JCXN0YXR1cyA9IGJueDJ4X2Zvcm1hdF92ZXIodmVyX251bSwgdmVyc2lvbiwgbGVuKTsKLQkJYnJlYWs7Ci0JfQogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKIAljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6Ci0KLQkJYm54MnhfY2w0NV9yZWFkKGJwLCBwYXJhbXMtPnBvcnQsIGV4dF9waHlfdHlwZSwKLQkJCSAgICAgIGV4dF9waHlfYWRkciwKLQkJCSAgICAgIE1ESU9fUE1BX0RFVkFELAotCQkJICAgICAgTURJT19QTUFfUkVHX1JPTV9WRVIxLCAmdmFsKTsKLQkJdmVyX251bSA9IHZhbDw8MTY7Ci0JCWJueDJ4X2NsNDVfcmVhZChicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCi0JCQkgICAgICBleHRfcGh5X2FkZHIsCi0JCQkgICAgICBNRElPX1BNQV9ERVZBRCwKLQkJCSAgICAgIE1ESU9fUE1BX1JFR19ST01fVkVSMiwgJnZhbCk7Ci0JCXZlcl9udW0gfD0gdmFsOwotCQlzdGF0dXMgPSBibngyeF9mb3JtYXRfdmVyKHZlcl9udW0sIHZlcnNpb24sIGxlbik7CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKKwkJc3RhdHVzID0gYm54MnhfZm9ybWF0X3ZlcihzcGlyb21fdmVyLCB2ZXJzaW9uLCBsZW4pOwogCQlicmVhazsKLQogCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUOgogCQlicmVhazsKIApAQCAtMzYzNiw2ICs0MzQ2LDE0IEBACiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKIAkJCURQKE5FVElGX01TR19MSU5LLCAiZXh0X3BoeV9sb29wYmFjazogODcwNlxuIik7CiAJCQlicmVhazsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkJRFAoTkVUSUZfTVNHX0xJTkssICJQTUEvUE1EIGV4dF9waHlfbG9vcGJhY2s6IDg3MjZcbiIpOworCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCisJCQkJICAgICAgIGV4dF9waHlfYWRkciwKKwkJCQkgICAgICAgTURJT19QTUFfREVWQUQsCisJCQkJICAgICAgIE1ESU9fUE1BX1JFR19DVFJMLAorCQkJCSAgICAgICAweDAwMDEpOworCQkJYnJlYWs7CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKIAkJCS8qIFNGWDcxMDFfWEdYU19URVNUMSAqLwogCQkJYm54MnhfY2w0NV93cml0ZShicCwgcGFyYW1zLT5wb3J0LCBleHRfcGh5X3R5cGUsCkBAIC0zOTA2LDExICs0NjI0LDEzIEBACiAKIAkvKiBpbml0IGV4dCBwaHkgYW5kIGVuYWJsZSBsaW5rIHN0YXRlIGludCAqLwogCW5vbl9leHRfcGh5ID0gKChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfRElSRUNUKSB8fAotCQkgICAgICAgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19YR1hTXzEwKSB8fAotCQkgICAgICAgKHBhcmFtcy0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19FWFRfUEhZKSk7CisJCSAgICAgICAocGFyYW1zLT5sb29wYmFja19tb2RlID09IExPT1BCQUNLX1hHWFNfMTApKTsKIAogCWlmIChub25fZXh0X3BoeSB8fAotCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDUpKSB7CisJICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkgfHwKKwkgICAgKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSB8fAorCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg0ODEpIHx8CisJICAgIChwYXJhbXMtPmxvb3BiYWNrX21vZGUgPT0gTE9PUEJBQ0tfRVhUX1BIWSkpIHsKIAkJaWYgKHBhcmFtcy0+cmVxX2xpbmVfc3BlZWQgPT0gU1BFRURfQVVUT19ORUcpCiAJCQlibngyeF9zZXRfcGFyYWxsZWxfZGV0ZWN0aW9uKHBhcmFtcywgdmFycy0+cGh5X2ZsYWdzKTsKIAkJYm54MnhfaW5pdF9pbnRlcm5hbF9waHkocGFyYW1zLCB2YXJzKTsKQEAgLTQxMDQsNiArNDgyNCw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CisJCURQKE5FVElGX01TR19MSU5LLCAiUGh5IGFkZHJlc3MgPSAweCV4XG4iLCBwYXJhbXMtPnBoeV9hZGRyKTsKIAogCQlibngyeF9saW5rX2luaXRpYWxpemUocGFyYW1zLCB2YXJzKTsKIAkJbXNsZWVwKDMwKTsKQEAgLTQxMTIsNyArNDgzMywyMyBAQAogCXJldHVybiAwOwogfQogCi11OCBibngyeF9saW5rX3Jlc2V0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzKQorc3RhdGljIHZvaWQgYm54MnhfODcyNl9yZXNldF9waHkoc3RydWN0IGJueDJ4ICpicCwgdTggcG9ydCwgdTggZXh0X3BoeV9hZGRyKQoreworCURQKE5FVElGX01TR19MSU5LLCAiYm54MnhfODcyNl9yZXNldF9waHkgcG9ydCAlZFxuIiwgcG9ydCk7CisKKwkvKiBTZXQgc2VyaWFsIGJvb3QgY29udHJvbCBmb3IgZXh0ZXJuYWwgbG9hZCAqLworCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBvcnQsCisJCSAgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2LCBleHRfcGh5X2FkZHIsCisJCSAgICAgICBNRElPX1BNQV9ERVZBRCwKKwkJICAgICAgIE1ESU9fUE1BX1JFR19HRU5fQ1RSTCwgMHgwMDAxKTsKKworCS8qIERpc2FibGUgVHJhbnNtaXR0ZXIgKi8KKwlibngyeF9iY204NzI2X3NldF90cmFuc21pdHRlcihicCwgcG9ydCwgZXh0X3BoeV9hZGRyLCAwKTsKKworfQorCit1OCBibngyeF9saW5rX3Jlc2V0KHN0cnVjdCBsaW5rX3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3QgbGlua192YXJzICp2YXJzLAorCQkgIHU4IHJlc2V0X2V4dF9waHkpCiB7CiAKIAlzdHJ1Y3QgYm54MnggKmJwID0gcGFyYW1zLT5icDsKQEAgLTQxNTAsMjggKzQ4ODcsMzcgQEAKIAkgKi8KIAkgLyogY2xlYXIgbGluayBsZWQgKi8KIAlibngyeF9zZXRfbGVkKGJwLCBwb3J0LCBMRURfTU9ERV9PRkYsIDAsIGh3X2xlZF9tb2RlLCBjaGlwX2lkKTsKLQlpZiAoZXh0X3BoeV90eXBlICE9IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVCkgewotCQlpZiAoKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKSAmJgotCQkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDczKSkgewotCQkJLyogSFcgcmVzZXQgKi8KLQotCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKLQkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csCi0JCQkJCSAgcG9ydCk7Ci0KKwlpZiAocmVzZXRfZXh0X3BoeSkgeworCQlzd2l0Y2ggKGV4dF9waHlfdHlwZSkgeworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0RJUkVDVDoKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyOgorCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKKwkJCURQKE5FVElGX01TR19MSU5LLCAiU2V0dGluZyA4MDczIHBvcnQgJWQgaW50byAiCisJCQkJICJsb3cgcG93ZXIgbW9kZVxuIiwKKwkJCQkgcG9ydCk7CiAJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAogCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywKIAkJCQkJICBwb3J0KTsKLQorCQkJYnJlYWs7CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJeworCQkJdTggZXh0X3BoeV9hZGRyID0gKChwYXJhbXMtPmV4dF9waHlfY29uZmlnICYKKwkJCQkJIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQkJCSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJCQkvKiBTZXQgc29mdCByZXNldCAqLworCQkJYm54MnhfODcyNl9yZXNldF9waHkoYnAsIHBhcmFtcy0+cG9ydCwgZXh0X3BoeV9hZGRyKTsKKwkJCWJyZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCQkvKiBIVyByZXNldCAqLworCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMSwKKwkJCQkJICBNSVNDX1JFR0lTVEVSU19HUElPX09VVFBVVF9MT1csCisJCQkJCSAgcG9ydCk7CisJCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18yLAorCQkJCQkgIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0xPVywKKwkJCQkJICBwb3J0KTsKIAkJCURQKE5FVElGX01TR19MSU5LLCAicmVzZXQgZXh0ZXJuYWwgUEhZXG4iKTsKLQkJfSBlbHNlIGlmIChleHRfcGh5X3R5cGUgPT0KLQkJCSAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpIHsKLQkJCQlEUChORVRJRl9NU0dfTElOSywgIlNldHRpbmcgODA3MyBwb3J0ICVkIGludG8gIgotCQkJCQkgImxvdyBwb3dlciBtb2RlXG4iLAotCQkJCQkgcG9ydCk7Ci0JCQkJYm54Mnhfc2V0X2dwaW8oYnAsIE1JU0NfUkVHSVNURVJTX0dQSU9fMiwKLQkJCQkJTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XLAotCQkJCQkJICBwb3J0KTsKIAkJfQogCX0KIAkvKiByZXNldCB0aGUgU2VyRGVzL1hHWFMgKi8KQEAgLTQyNDgsNyArNDk5NCw3IEBACiAJCWlmIChncF9zdGF0dXMgJiBNRElPX0FOX0NMNzNfT1JfMzdfQ09NUExFVEUpIHsKIAkJCWlmICghKHZhcnMtPnBoeV9mbGFncyAmCiAJCQkgICAgICBQSFlfU0dNSUlfRkxBRykpCi0JCQkJYm54Mnhfc2V0X3NnbWlpX3R4X2RyaXZlcihwYXJhbXMpOworCQkJCWJueDJ4X3NldF9nbWlpX3R4X2RyaXZlcihwYXJhbXMpOwogCQl9CiAJfQogCkBAIC00MzM3LDYgKzUwODMsNyBAQAogCiAJaWYgKChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfU0VSREVTX0VYVF9QSFlfVFlQRV9ESVJFQ1QpICYmCiAJICAgIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNSkgJiYKKwkgICAgKGV4dF9waHlfdHlwZSAhPSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2KSAmJgogCSAgICAoZXh0X3BoeV9saW5rX3VwICYmICF2YXJzLT5waHlfbGlua191cCkpCiAJCWJueDJ4X2luaXRfaW50ZXJuYWxfcGh5KHBhcmFtcywgdmFycyk7CiAKQEAgLTQzOTgsNyArNTE0NSw3IEBACiAJCXUxNiBmd192ZXIxOwogCiAJCWJueDJ4X2JjbTgwNzNfZXh0ZXJuYWxfcm9tX2Jvb3QoYnAsIHBvcnQsCi0JCQkJCQkgICAgICBleHRfcGh5X2FkZHJbcG9ydF0pOworCQkJCQkgICAgICBleHRfcGh5X2FkZHJbcG9ydF0sIHNobWVtX2Jhc2UpOwogCiAJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MywKIAkJCSAgICAgIGV4dF9waHlfYWRkcltwb3J0XSwKQEAgLTQ0MzQsNyArNTE4MSw3IEBACiAKIAkvKiBQQVJUMyAtIGNvbXBsZXRlIFRYX1BPV0VSX0RPV04gcHJvY2VzcywgYW5kIHNldCBHUElPMiBiYWNrIHRvIGxvdyAqLwogCWZvciAocG9ydCA9IFBPUlRfTUFYIC0gMTsgcG9ydCA+PSBQT1JUXzA7IHBvcnQtLSkgewotCQkvKiBQaGFzZTIgb2YgUE9XRVJfRE9XTl9SRVNFVCovCisJCS8qIFBoYXNlMiBvZiBQT1dFUl9ET1dOX1JFU0VUICovCiAJCS8qIFJlbGVhc2UgYml0IDEwIChSZWxlYXNlIFR4IHBvd2VyIGRvd24pICovCiAJCWJueDJ4X2NsNDVfcmVhZChicCwgcG9ydCwKIAkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMsCkBAIC00NDY5LDEyICs1MjE2LDUxIEBACiAKIH0KIAorCitzdGF0aWMgdTggYm54MnhfODcyNl9jb21tb25faW5pdF9waHkoc3RydWN0IGJueDJ4ICpicCwgdTMyIHNobWVtX2Jhc2UpCit7CisJdTggZXh0X3BoeV9hZGRyOworCXUzMiB2YWw7CisJczggcG9ydDsKKwkvKiBVc2UgcG9ydDEgYmVjYXVzZSBvZiB0aGUgc3RhdGljIHBvcnQtc3dhcCAqLworCS8qIEVuYWJsZSB0aGUgbW9kdWxlIGRldGVjdGlvbiBpbnRlcnJ1cHQgKi8KKwl2YWwgPSBSRUdfUkQoYnAsIE1JU0NfUkVHX0dQSU9fRVZFTlRfRU4pOworCXZhbCB8PSAoKDE8PE1JU0NfUkVHSVNURVJTX0dQSU9fMyl8CisJCSgxPDwoTUlTQ19SRUdJU1RFUlNfR1BJT18zICsgTUlTQ19SRUdJU1RFUlNfR1BJT19QT1JUX1NISUZUKSkpOworCVJFR19XUihicCwgTUlTQ19SRUdfR1BJT19FVkVOVF9FTiwgdmFsKTsKKworCWJueDJ4X2h3X3Jlc2V0KGJwLCAxKTsKKwltc2xlZXAoNSk7CisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFBPUlRfTUFYOyBwb3J0KyspIHsKKwkJLyogRXh0cmFjdCB0aGUgZXh0IHBoeSBhZGRyZXNzIGZvciB0aGUgcG9ydCAqLworCQl1MzIgZXh0X3BoeV9jb25maWcgPSBSRUdfUkQoYnAsIHNobWVtX2Jhc2UgKworCQkJCQlvZmZzZXRvZihzdHJ1Y3Qgc2htZW1fcmVnaW9uLAorCQkJZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uZXh0ZXJuYWxfcGh5X2NvbmZpZykpOworCisJCWV4dF9waHlfYWRkciA9CisJCQkoKGV4dF9waHlfY29uZmlnICYKKwkJCSAgICAgIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9BRERSX01BU0spID4+CisJCQkgICAgICBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfQUREUl9TSElGVCk7CisJCURQKE5FVElGX01TR19MSU5LLCAiODcyNl9jb21tb25faW5pdCA6IGV4dF9waHlfYWRkciA9IDB4JXhcbiIsCisJCQkgZXh0X3BoeV9hZGRyKTsKKworCQlibngyeF84NzI2X3Jlc2V0X3BoeShicCwgcG9ydCwgZXh0X3BoeV9hZGRyKTsKKworCQkvKiBTZXQgZmF1bHQgbW9kdWxlIGRldGVjdGVkIExFRCBvbiAqLworCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18wLAorCQkJCSAgTUlTQ19SRUdJU1RFUlNfR1BJT19ISUdILAorCQkJCSAgcG9ydCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHU4IGJueDJ4X2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSkKIHsKIAl1OCByYyA9IDA7CiAJdTMyIGV4dF9waHlfdHlwZTsKIAotCURQKE5FVElGX01TR19MSU5LLCAiYm54MnhfY29tbW9uX2luaXRfcGh5XG4iKTsKKwlEUChORVRJRl9NU0dfTElOSywgIkJlZ2luIGNvbW1vbiBwaHkgaW5pdFxuIik7CiAKIAkvKiBSZWFkIHRoZSBleHRfcGh5X3R5cGUgZm9yIGFyYml0cmFyeSBwb3J0KDApICovCiAJZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoCkBAIC00NDg4LDYgKzUyNzQsMTIgQEAKIAkJcmMgPSBibngyeF84MDczX2NvbW1vbl9pbml0X3BoeShicCwgc2htZW1fYmFzZSk7CiAJCWJyZWFrOwogCX0KKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MjY6CisJCS8qIEdQSU8xIGFmZmVjdHMgYm90aCBwb3J0cywgc28gdGhlcmUncyBuZWVkIHRvIHB1bGwKKwkJaXQgZm9yIHNpbmdsZSBwb3J0IGFsb25lICovCisJCXJjID0gYm54MnhfODcyNl9jb21tb25faW5pdF9waHkoYnAsIHNobWVtX2Jhc2UpOworCisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURQKE5FVElGX01TR19MSU5LLAogCQkJICJibngyeF9jb21tb25faW5pdF9waHk6IGV4dF9waHkgMHgleCBub3QgcmVxdWlyZWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmggYi9kcml2ZXJzL25ldC9ibngyeF9saW5rLmgKaW5kZXggNDdjYjU4NS4uMTlhODY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfbGluay5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuaApAQCAtMSw0ICsxLDQgQEAKLS8qIENvcHlyaWdodCAyMDA4IEJyb2FkY29tIENvcnBvcmF0aW9uCisvKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVW5sZXNzIHlvdSBhbmQgQnJvYWRjb20gZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZQogICogYWdyZWVtZW50IGdvdmVybmluZyB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgdGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UKQEAgLTY2LDggKzY2LDYgQEAKIAkvKiBEZXZpY2UgcGFyYW1ldGVycyAqLwogCXU4IG1hY19hZGRyWzZdOwogCi0KLQogCS8qIHNobWVtIHBhcmFtZXRlcnMgKi8KIAl1MzIgc2htZW1fYmFzZTsKIAl1MzIgc3BlZWRfY2FwX21hc2s7CkBAIC03Nyw3ICs3NSw2IEBACiAjZGVmaW5lIFNXSVRDSF9DRkdfQVVUT19ERVRFQ1QJUE9SVF9GRUFUVVJFX0NPTl9TV0lUQ0hfQVVUT19ERVRFQ1QKIAogCXUxNiBod19sZWRfbW9kZTsgLyogcGFydCBvZiB0aGUgaHdfY29uZmlnIHJlYWQgZnJvbSB0aGUgc2htZW0gKi8KLQl1MzIgc2VyZGVzX2NvbmZpZzsKIAl1MzIgbGFuZV9jb25maWc7CiAJdTMyIGV4dF9waHlfY29uZmlnOwogI2RlZmluZSBYR1hTX0VYVF9QSFlfVFlQRShleHRfcGh5X2NvbmZpZykJKGV4dF9waHlfY29uZmlnICYgXApAQCAtODksNiArODYsMTIgQEAKIAogCS8qIHBoeV9hZGRyIHBvcHVsYXRlZCBieSB0aGUgQ0xDICovCiAJdTggcGh5X2FkZHI7CisJdTE2IHhneHNfY29uZmlnX3J4WzRdOyAvKiBwcmVlbXBoYXNpcyB2YWx1ZXMgZm9yIHRoZSByeCBzaWRlICovCisKKwl1MTYgeGd4c19jb25maWdfdHhbNF07IC8qIHByZWVtcGhhc2lzIHZhbHVlcyBmb3IgdGhlIHR4IHNpZGUgKi8KKwl1MzIgZmVhdHVyZV9jb25maWdfZmxhZ3M7CisjZGVmaW5lIEZFQVRVUkVfQ09ORklHX09WRVJSSURFX1BSRUVNUEhBU0lTX0VOQUJMRUQgKDE8PDApCisjZGVmaW5lIEZFQVRVUkVfQ09ORklHX01PRFVMRV9FTkZPUkNNRU5UX0VOQUJMRUQJKDI8PDApCiAJLyogRGV2aWNlIHBvaW50ZXIgcGFzc2VkIHRvIGFsbCBjYWxsYmFjayBmdW5jdGlvbnMgKi8KIAlzdHJ1Y3QgYm54MnggKmJwOwogfTsKQEAgLTEyNSw4ICsxMjgsMTEgQEAKIC8qIEluaXRpYWxpemUgdGhlIHBoeSAqLwogdTggYm54MnhfcGh5X2luaXQoc3RydWN0IGxpbmtfcGFyYW1zICppbnB1dCwgc3RydWN0IGxpbmtfdmFycyAqb3V0cHV0KTsKIAotLyogUmVzZXQgdGhlIGxpbmsuIFNob3VsZCBiZSBjYWxsZWQgd2hlbiBkcml2ZXIgb3IgaW50ZXJmYWNlIGdvZXMgZG93biAqLwotdTggYm54MnhfbGlua19yZXNldChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycyk7CisvKiBSZXNldCB0aGUgbGluay4gU2hvdWxkIGJlIGNhbGxlZCB3aGVuIGRyaXZlciBvciBpbnRlcmZhY2UgZ29lcyBkb3duCisgICBCZWZvcmUgY2FsbGluZyBwaHkgZmlybXdhcmUgdXBncmFkZSwgdGhlIHJlc2V0X2V4dF9waHkgc2hvdWxkIGJlIHNldAorICAgdG8gMCAqLwordTggYm54MnhfbGlua19yZXNldChzdHJ1Y3QgbGlua19wYXJhbXMgKnBhcmFtcywgc3RydWN0IGxpbmtfdmFycyAqdmFycywKKwkJICB1OCByZXNldF9leHRfcGh5KTsKIAogLyogYm54MnhfbGlua191cGRhdGUgc2hvdWxkIGJlIGNhbGxlZCB1cG9uIGxpbmsgaW50ZXJydXB0ICovCiB1OCBibngyeF9saW5rX3VwZGF0ZShzdHJ1Y3QgbGlua19wYXJhbXMgKmlucHV0LCBzdHJ1Y3QgbGlua192YXJzICpvdXRwdXQpOwpAQCAtMTYzLDYgKzE2OSwxMCBAQAogCiB1OCBibngyeF9mbGFzaF9kb3dubG9hZChzdHJ1Y3QgYm54MnggKmJwLCB1OCBwb3J0LCB1MzIgZXh0X3BoeV9jb25maWcsCiAJCSAgICAgIHU4IGRyaXZlcl9sb2FkZWQsIGNoYXIgZGF0YVtdLCB1MzIgc2l6ZSk7CisvKiBibngyeF9oYW5kbGVfbW9kdWxlX2RldGVjdF9pbnQgc2hvdWxkIGJlIGNhbGxlZCB1cG9uIG1vZHVsZSBkZXRlY3Rpb24KKyAgIGludGVycnVwdCAqLwordm9pZCBibngyeF9oYW5kbGVfbW9kdWxlX2RldGVjdF9pbnQoc3RydWN0IGxpbmtfcGFyYW1zICpwYXJhbXMpOworCiAvKiBHZXQgdGhlIGFjdHVhbCBsaW5rIHN0YXR1cy4gSW4gY2FzZSBpdCByZXR1cm5zIDAsIGxpbmsgaXMgdXAsCiAJb3RoZXJ3aXNlIGxpbmsgaXMgZG93biovCiB1OCBibngyeF90ZXN0X2xpbmsoc3RydWN0IGxpbmtfcGFyYW1zICppbnB1dCwgc3RydWN0IGxpbmtfdmFycyAqdmFycyk7CkBAIC0xNzAsNCArMTgwLDUgQEAKIC8qIE9uZS10aW1lIGluaXRpYWxpemF0aW9uIGZvciBleHRlcm5hbCBwaHkgYWZ0ZXIgcG93ZXIgdXAgKi8KIHU4IGJueDJ4X2NvbW1vbl9pbml0X3BoeShzdHJ1Y3QgYm54MnggKmJwLCB1MzIgc2htZW1fYmFzZSk7CiAKKwogI2VuZGlmIC8qIEJOWDJYX0xJTktfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCmluZGV4IDJlMzQ2YTUuLjAwYTc4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYworKysgYi9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKQEAgLTUwLDE1ICs1MCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSAiYm54MnhfcmVnLmgiCi0jaW5jbHVkZSAiYm54MnhfZndfZGVmcy5oIgotI2luY2x1ZGUgImJueDJ4X2hzaS5oIgotI2luY2x1ZGUgImJueDJ4X2xpbmsuaCIKKwogI2luY2x1ZGUgImJueDJ4LmgiCiAjaW5jbHVkZSAiYm54MnhfaW5pdC5oIgorI2luY2x1ZGUgImJueDJ4X2R1bXAuaCIKIAotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNDUuMjciCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiMjAwOS8wMS8yNiIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjQ4LjEwNSIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIyMDA5LzAzLzAyIgogI2RlZmluZSBCTlgyWF9CQ19WRVIJCTB4MDQwMjAwCiAKIC8qIFRpbWUgaW4gamlmZmllcyBiZWZvcmUgY29uY2x1ZGluZyB0aGUgdHJhbnNtaXR0ZXIgaXMgaHVuZyAqLwpAQCAtNzMsMjYgKzcxLDMyIEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihEUlZfTU9EVUxFX1ZFUlNJT04pOwogCitzdGF0aWMgaW50IG11bHRpX21vZGUgPSAxOworbW9kdWxlX3BhcmFtKG11bHRpX21vZGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG11bHRpX21vZGUsICIgVXNlIHBlci1DUFUgcXVldWVzIik7CisKIHN0YXRpYyBpbnQgZGlzYWJsZV90cGE7Ci1zdGF0aWMgaW50IHVzZV9pbnRhOwotc3RhdGljIGludCBwb2xsOwotc3RhdGljIGludCBkZWJ1ZzsKLXN0YXRpYyBpbnQgbG9hZF9jb3VudFszXTsgLyogMC1jb21tb24sIDEtcG9ydDAsIDItcG9ydDEgKi8KLXN0YXRpYyBpbnQgdXNlX211bHRpOwotCiBtb2R1bGVfcGFyYW0oZGlzYWJsZV90cGEsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0odXNlX2ludGEsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0ocG9sbCwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV90cGEsICJkaXNhYmxlIHRoZSBUUEEgKExSTykgZmVhdHVyZSIpOwotTU9EVUxFX1BBUk1fREVTQyh1c2VfaW50YSwgInVzZSBJTlQjQSBpbnN0ZWFkIG9mIE1TSS1YIik7Ci1NT0RVTEVfUEFSTV9ERVNDKHBvbGwsICJ1c2UgcG9sbGluZyAoZm9yIGRlYnVnKSIpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlZmF1bHQgZGVidWcgbXNnbGV2ZWwiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV90cGEsICIgRGlzYWJsZSB0aGUgVFBBIChMUk8pIGZlYXR1cmUiKTsKIAotI2lmZGVmIEJOWDJYX01VTFRJCi1tb2R1bGVfcGFyYW0odXNlX211bHRpLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyh1c2VfbXVsdGksICJ1c2UgcGVyLUNQVSBxdWV1ZXMiKTsKLSNlbmRpZgorc3RhdGljIGludCBpbnRfbW9kZTsKK21vZHVsZV9wYXJhbShpbnRfbW9kZSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW50X21vZGUsICIgRm9yY2UgaW50ZXJydXB0IG1vZGUgKDEgSU5UI3g7IDIgTVNJKSIpOworCitzdGF0aWMgaW50IHBvbGw7Cittb2R1bGVfcGFyYW0ocG9sbCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MocG9sbCwgIiBVc2UgcG9sbGluZyAoZm9yIGRlYnVnKSIpOworCitzdGF0aWMgaW50IG1ycnMgPSAtMTsKK21vZHVsZV9wYXJhbShtcnJzLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtcnJzLCAiIEZvcmNlIE1heCBSZWFkIFJlcSBTaXplICgwLi4zKSAoZm9yIGRlYnVnKSIpOworCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIiBEZWZhdWx0IGRlYnVnIG1zZ2xldmVsIik7CisKK3N0YXRpYyBpbnQgbG9hZF9jb3VudFszXTsgLyogMC1jb21tb24sIDEtcG9ydDAsIDItcG9ydDEgKi8KKwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpibngyeF93cTsKIAogZW51bSBibngyeF9ib2FyZF90eXBlIHsKQEAgLTIxMyw3ICsyMTcsNyBAQAogCWRtYWUtPmNvbXBfYWRkcl9oaSA9IFU2NF9ISShibngyeF9zcF9tYXBwaW5nKGJwLCB3Yl9jb21wKSk7CiAJZG1hZS0+Y29tcF92YWwgPSBETUFFX0NPTVBfVkFMOwogCi0JRFAoQk5YMlhfTVNHX09GRiwgImRtYWU6IG9wY29kZSAweCUwOHhcbiIKKwlEUChCTlgyWF9NU0dfT0ZGLCAiRE1BRTogb3Bjb2RlIDB4JTA4eFxuIgogCSAgIERQX0xFVkVMICJzcmNfYWRkciAgWyV4OiUwOHhdICBsZW4gWyVkICo0XSAgIgogCQkgICAgImRzdF9hZGRyIFsleDolMDh4ICglMDh4KV1cbiIKIAkgICBEUF9MRVZFTCAiY29tcF9hZGRyIFsleDolMDh4XSAgY29tcF92YWwgMHglMDh4XG4iLApAQCAtMjM0LDcgKzIzOCw3IEBACiAJCURQKEJOWDJYX01TR19PRkYsICJ3Yl9jb21wIDB4JTA4eFxuIiwgKndiX2NvbXApOwogCiAJCWlmICghY250KSB7Ci0JCQlCTlgyWF9FUlIoImRtYWUgdGltZW91dCFcbiIpOworCQkJQk5YMlhfRVJSKCJETUFFIHRpbWVvdXQhXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNudC0tOwpAQCAtMjg5LDcgKzI5Myw3IEBACiAJZG1hZS0+Y29tcF9hZGRyX2hpID0gVTY0X0hJKGJueDJ4X3NwX21hcHBpbmcoYnAsIHdiX2NvbXApKTsKIAlkbWFlLT5jb21wX3ZhbCA9IERNQUVfQ09NUF9WQUw7CiAKLQlEUChCTlgyWF9NU0dfT0ZGLCAiZG1hZTogb3Bjb2RlIDB4JTA4eFxuIgorCURQKEJOWDJYX01TR19PRkYsICJETUFFOiBvcGNvZGUgMHglMDh4XG4iCiAJICAgRFBfTEVWRUwgInNyY19hZGRyICBbJXg6JTA4eF0gIGxlbiBbJWQgKjRdICAiCiAJCSAgICAiZHN0X2FkZHIgWyV4OiUwOHggKCUwOHgpXVxuIgogCSAgIERQX0xFVkVMICJjb21wX2FkZHIgWyV4OiUwOHhdICBjb21wX3ZhbCAweCUwOHhcbiIsCkBAIC0zMDYsNyArMzEwLDcgQEAKIAl3aGlsZSAoKndiX2NvbXAgIT0gRE1BRV9DT01QX1ZBTCkgewogCiAJCWlmICghY250KSB7Ci0JCQlCTlgyWF9FUlIoImRtYWUgdGltZW91dCFcbiIpOworCQkJQk5YMlhfRVJSKCJETUFFIHRpbWVvdXQhXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNudC0tOwpAQCAtNDY4LDcgKzQ3Miw3IEBACiBzdGF0aWMgdm9pZCBibngyeF9md19kdW1wKHN0cnVjdCBibngyeCAqYnApCiB7CiAJdTMyIG1hcmssIG9mZnNldDsKLQl1MzIgZGF0YVs5XTsKKwlfX2JlMzIgZGF0YVs5XTsKIAlpbnQgd29yZDsKIAogCW1hcmsgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9TQ1JBVENIICsgMHhmMTA0KTsKQEAgLTUwMiw4MyArNTA2LDEwNCBAQAogCiAJQk5YMlhfRVJSKCJiZWdpbiBjcmFzaCBkdW1wIC0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7Ci0JCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCQlzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEgKmh3X3Byb2RzID0gZnAtPmh3X3R4X3Byb2RzOwotCi0JCUJOWDJYX0VSUigicXVldWVbJWRdOiB0eF9wa3RfcHJvZCgleCkgIHR4X3BrdF9jb25zKCV4KSIKLQkJCSAgIiAgdHhfYmRfcHJvZCgleCkgIHR4X2JkX2NvbnMoJXgpICAqdHhfY29uc19zYigleClcbiIsCi0JCQkgIGksIGZwLT50eF9wa3RfcHJvZCwgZnAtPnR4X3BrdF9jb25zLCBmcC0+dHhfYmRfcHJvZCwKLQkJCSAgZnAtPnR4X2JkX2NvbnMsIGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikpOwotCQlCTlgyWF9FUlIoIiAgICAgICAgICByeF9iZF9wcm9kKCV4KSAgcnhfYmRfY29ucygleCkiCi0JCQkgICIgICpyeF9iZF9jb25zX3NiKCV4KSAgcnhfY29tcF9wcm9kKCV4KSIKLQkJCSAgIiAgcnhfY29tcF9jb25zKCV4KSAgKnJ4X2NvbnNfc2IoJXgpXG4iLAotCQkJICBmcC0+cnhfYmRfcHJvZCwgZnAtPnJ4X2JkX2NvbnMsCi0JCQkgIGxlMTZfdG9fY3B1KCpmcC0+cnhfYmRfY29uc19zYiksIGZwLT5yeF9jb21wX3Byb2QsCi0JCQkgIGZwLT5yeF9jb21wX2NvbnMsIGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikpOwotCQlCTlgyWF9FUlIoIiAgICAgICAgICByeF9zZ2VfcHJvZCgleCkgIGxhc3RfbWF4X3NnZSgleCkiCi0JCQkgICIgIGZwX2NfaWR4KCV4KSAgKnNiX2NfaWR4KCV4KSAgZnBfdV9pZHgoJXgpIgotCQkJICAiICAqc2JfdV9pZHgoJXgpICBiZCBkYXRhKCV4LCV4KVxuIiwKLQkJCSAgZnAtPnJ4X3NnZV9wcm9kLCBmcC0+bGFzdF9tYXhfc2dlLCBmcC0+ZnBfY19pZHgsCi0JCQkgIGZwLT5zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgsCi0JCQkgIGZwLT5mcF91X2lkeCwKLQkJCSAgZnAtPnN0YXR1c19ibGstPnVfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCwKLQkJCSAgaHdfcHJvZHMtPnBhY2tldHNfcHJvZCwgaHdfcHJvZHMtPmJkc19wcm9kKTsKLQotCQlzdGFydCA9IFRYX0JEKGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikgLSAxMCk7Ci0JCWVuZCA9IFRYX0JEKGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikgKyAyNDUpOwotCQlmb3IgKGogPSBzdGFydDsgaiA8IGVuZDsgaisrKSB7Ci0JCQlzdHJ1Y3Qgc3dfdHhfYmQgKnN3X2JkID0gJmZwLT50eF9idWZfcmluZ1tqXTsKLQotCQkJQk5YMlhfRVJSKCJwYWNrZXRbJXhdPVslcCwleF1cbiIsIGosCi0JCQkJICBzd19iZC0+c2tiLCBzd19iZC0+Zmlyc3RfYmQpOwotCQl9Ci0KLQkJc3RhcnQgPSBUWF9CRChmcC0+dHhfYmRfY29ucyAtIDEwKTsKLQkJZW5kID0gVFhfQkQoZnAtPnR4X2JkX2NvbnMgKyAyNTQpOwotCQlmb3IgKGogPSBzdGFydDsgaiA8IGVuZDsgaisrKSB7Ci0JCQl1MzIgKnR4X2JkID0gKHUzMiAqKSZmcC0+dHhfZGVzY19yaW5nW2pdOwotCi0JCQlCTlgyWF9FUlIoInR4X2JkWyV4XT1bJXg6JXg6JXg6JXhdXG4iLAotCQkJCSAgaiwgdHhfYmRbMF0sIHR4X2JkWzFdLCB0eF9iZFsyXSwgdHhfYmRbM10pOwotCQl9Ci0KLQkJc3RhcnQgPSBSWF9CRChsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpIC0gMTApOwotCQllbmQgPSBSWF9CRChsZTE2X3RvX2NwdSgqZnAtPnJ4X2NvbnNfc2IpICsgNTAzKTsKLQkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgewotCQkJdTMyICpyeF9iZCA9ICh1MzIgKikmZnAtPnJ4X2Rlc2NfcmluZ1tqXTsKLQkJCXN0cnVjdCBzd19yeF9iZCAqc3dfYmQgPSAmZnAtPnJ4X2J1Zl9yaW5nW2pdOwotCi0JCQlCTlgyWF9FUlIoInJ4X2JkWyV4XT1bJXg6JXhdICBzd19iZD1bJXBdXG4iLAotCQkJCSAgaiwgcnhfYmRbMV0sIHJ4X2JkWzBdLCBzd19iZC0+c2tiKTsKLQkJfQotCi0JCXN0YXJ0ID0gUlhfU0dFKGZwLT5yeF9zZ2VfcHJvZCk7Ci0JCWVuZCA9IFJYX1NHRShmcC0+bGFzdF9tYXhfc2dlKTsKLQkJZm9yIChqID0gc3RhcnQ7IGogPCBlbmQ7IGorKykgewotCQkJdTMyICpyeF9zZ2UgPSAodTMyICopJmZwLT5yeF9zZ2VfcmluZ1tqXTsKLQkJCXN0cnVjdCBzd19yeF9wYWdlICpzd19wYWdlID0gJmZwLT5yeF9wYWdlX3Jpbmdbal07Ci0KLQkJCUJOWDJYX0VSUigicnhfc2dlWyV4XT1bJXg6JXhdICBzd19wYWdlPVslcF1cbiIsCi0JCQkJICBqLCByeF9zZ2VbMV0sIHJ4X3NnZVswXSwgc3dfcGFnZS0+cGFnZSk7Ci0JCX0KLQotCQlzdGFydCA9IFJDUV9CRChmcC0+cnhfY29tcF9jb25zIC0gMTApOwotCQllbmQgPSBSQ1FfQkQoZnAtPnJ4X2NvbXBfY29ucyArIDUwMyk7Ci0JCWZvciAoaiA9IHN0YXJ0OyBqIDwgZW5kOyBqKyspIHsKLQkJCXUzMiAqY3FlID0gKHUzMiAqKSZmcC0+cnhfY29tcF9yaW5nW2pdOwotCi0JCQlCTlgyWF9FUlIoImNxZVsleF09WyV4OiV4OiV4OiV4XVxuIiwKLQkJCQkgIGosIGNxZVswXSwgY3FlWzFdLCBjcWVbMl0sIGNxZVszXSk7Ci0JCX0KLQl9Ci0KKwkvKiBJbmRpY2VzICovCisJLyogQ29tbW9uICovCiAJQk5YMlhfRVJSKCJkZWZfY19pZHgoJXUpICBkZWZfdV9pZHgoJXUpICBkZWZfeF9pZHgoJXUpIgogCQkgICIgIGRlZl90X2lkeCgldSkgIGRlZl9hdHRfaWR4KCV1KSAgYXR0bl9zdGF0ZSgldSkiCiAJCSAgIiAgc3BxX3Byb2RfaWR4KCV1KVxuIiwKIAkJICBicC0+ZGVmX2NfaWR4LCBicC0+ZGVmX3VfaWR4LCBicC0+ZGVmX3hfaWR4LCBicC0+ZGVmX3RfaWR4LAogCQkgIGJwLT5kZWZfYXR0X2lkeCwgYnAtPmF0dG5fc3RhdGUsIGJwLT5zcHFfcHJvZF9pZHgpOwogCisJLyogUnggKi8KKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQlCTlgyWF9FUlIoImZwJWQ6IHJ4X2JkX3Byb2QoJXgpICByeF9iZF9jb25zKCV4KSIKKwkJCSAgIiAgKnJ4X2JkX2NvbnNfc2IoJXgpICByeF9jb21wX3Byb2QoJXgpIgorCQkJICAiICByeF9jb21wX2NvbnMoJXgpICAqcnhfY29uc19zYigleClcbiIsCisJCQkgIGksIGZwLT5yeF9iZF9wcm9kLCBmcC0+cnhfYmRfY29ucywKKwkJCSAgbGUxNl90b19jcHUoKmZwLT5yeF9iZF9jb25zX3NiKSwgZnAtPnJ4X2NvbXBfcHJvZCwKKwkJCSAgZnAtPnJ4X2NvbXBfY29ucywgbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKSk7CisJCUJOWDJYX0VSUigiICAgICAgcnhfc2dlX3Byb2QoJXgpICBsYXN0X21heF9zZ2UoJXgpIgorCQkJICAiICBmcF91X2lkeCgleCkgKnNiX3VfaWR4KCV4KVxuIiwKKwkJCSAgZnAtPnJ4X3NnZV9wcm9kLCBmcC0+bGFzdF9tYXhfc2dlLAorCQkJICBsZTE2X3RvX2NwdShmcC0+ZnBfdV9pZHgpLAorCQkJICBmcC0+c3RhdHVzX2Jsay0+dV9zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKKwl9CisKKwkvKiBUeCAqLworCWZvcl9lYWNoX3R4X3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCQlzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEgKmh3X3Byb2RzID0gZnAtPmh3X3R4X3Byb2RzOworCisJCUJOWDJYX0VSUigiZnAlZDogdHhfcGt0X3Byb2QoJXgpICB0eF9wa3RfY29ucygleCkiCisJCQkgICIgIHR4X2JkX3Byb2QoJXgpICB0eF9iZF9jb25zKCV4KSAgKnR4X2NvbnNfc2IoJXgpXG4iLAorCQkJICBpLCBmcC0+dHhfcGt0X3Byb2QsIGZwLT50eF9wa3RfY29ucywgZnAtPnR4X2JkX3Byb2QsCisJCQkgIGZwLT50eF9iZF9jb25zLCBsZTE2X3RvX2NwdSgqZnAtPnR4X2NvbnNfc2IpKTsKKwkJQk5YMlhfRVJSKCIgICAgICBmcF9jX2lkeCgleCkgICpzYl9jX2lkeCgleCkiCisJCQkgICIgIGJkIGRhdGEoJXgsJXgpXG4iLCBsZTE2X3RvX2NwdShmcC0+ZnBfY19pZHgpLAorCQkJICBmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4LAorCQkJICBod19wcm9kcy0+cGFja2V0c19wcm9kLCBod19wcm9kcy0+YmRzX3Byb2QpOworCX0KKworCS8qIFJpbmdzICovCisJLyogUnggKi8KKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQlzdGFydCA9IFJYX0JEKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgLSAxMCk7CisJCWVuZCA9IFJYX0JEKGxlMTZfdG9fY3B1KCpmcC0+cnhfY29uc19zYikgKyA1MDMpOworCQlmb3IgKGogPSBzdGFydDsgaiAhPSBlbmQ7IGogPSBSWF9CRChqICsgMSkpIHsKKwkJCXUzMiAqcnhfYmQgPSAodTMyICopJmZwLT5yeF9kZXNjX3Jpbmdbal07CisJCQlzdHJ1Y3Qgc3dfcnhfYmQgKnN3X2JkID0gJmZwLT5yeF9idWZfcmluZ1tqXTsKKworCQkJQk5YMlhfRVJSKCJmcCVkOiByeF9iZFsleF09WyV4OiV4XSAgc3dfYmQ9WyVwXVxuIiwKKwkJCQkgIGksIGosIHJ4X2JkWzFdLCByeF9iZFswXSwgc3dfYmQtPnNrYik7CisJCX0KKworCQlzdGFydCA9IFJYX1NHRShmcC0+cnhfc2dlX3Byb2QpOworCQllbmQgPSBSWF9TR0UoZnAtPmxhc3RfbWF4X3NnZSk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFJYX1NHRShqICsgMSkpIHsKKwkJCXUzMiAqcnhfc2dlID0gKHUzMiAqKSZmcC0+cnhfc2dlX3Jpbmdbal07CisJCQlzdHJ1Y3Qgc3dfcnhfcGFnZSAqc3dfcGFnZSA9ICZmcC0+cnhfcGFnZV9yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IHJ4X3NnZVsleF09WyV4OiV4XSAgc3dfcGFnZT1bJXBdXG4iLAorCQkJCSAgaSwgaiwgcnhfc2dlWzFdLCByeF9zZ2VbMF0sIHN3X3BhZ2UtPnBhZ2UpOworCQl9CisKKwkJc3RhcnQgPSBSQ1FfQkQoZnAtPnJ4X2NvbXBfY29ucyAtIDEwKTsKKwkJZW5kID0gUkNRX0JEKGZwLT5yeF9jb21wX2NvbnMgKyA1MDMpOworCQlmb3IgKGogPSBzdGFydDsgaiAhPSBlbmQ7IGogPSBSQ1FfQkQoaiArIDEpKSB7CisJCQl1MzIgKmNxZSA9ICh1MzIgKikmZnAtPnJ4X2NvbXBfcmluZ1tqXTsKKworCQkJQk5YMlhfRVJSKCJmcCVkOiBjcWVbJXhdPVsleDoleDoleDoleF1cbiIsCisJCQkJICBpLCBqLCBjcWVbMF0sIGNxZVsxXSwgY3FlWzJdLCBjcWVbM10pOworCQl9CisJfQorCisJLyogVHggKi8KKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgeworCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQlzdGFydCA9IFRYX0JEKGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikgLSAxMCk7CisJCWVuZCA9IFRYX0JEKGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYikgKyAyNDUpOworCQlmb3IgKGogPSBzdGFydDsgaiAhPSBlbmQ7IGogPSBUWF9CRChqICsgMSkpIHsKKwkJCXN0cnVjdCBzd190eF9iZCAqc3dfYmQgPSAmZnAtPnR4X2J1Zl9yaW5nW2pdOworCisJCQlCTlgyWF9FUlIoImZwJWQ6IHBhY2tldFsleF09WyVwLCV4XVxuIiwKKwkJCQkgIGksIGosIHN3X2JkLT5za2IsIHN3X2JkLT5maXJzdF9iZCk7CisJCX0KKworCQlzdGFydCA9IFRYX0JEKGZwLT50eF9iZF9jb25zIC0gMTApOworCQllbmQgPSBUWF9CRChmcC0+dHhfYmRfY29ucyArIDI1NCk7CisJCWZvciAoaiA9IHN0YXJ0OyBqICE9IGVuZDsgaiA9IFRYX0JEKGogKyAxKSkgeworCQkJdTMyICp0eF9iZCA9ICh1MzIgKikmZnAtPnR4X2Rlc2NfcmluZ1tqXTsKKworCQkJQk5YMlhfRVJSKCJmcCVkOiB0eF9iZFsleF09WyV4OiV4OiV4OiV4XVxuIiwKKwkJCQkgIGksIGosIHR4X2JkWzBdLCB0eF9iZFsxXSwgdHhfYmRbMl0sIHR4X2JkWzNdKTsKKwkJfQorCX0KKwogCWJueDJ4X2Z3X2R1bXAoYnApOwogCWJueDJ4X21jX2Fzc2VydChicCk7CiAJQk5YMlhfRVJSKCJlbmQgY3Jhc2ggZHVtcCAtLS0tLS0tLS0tLS0tLS0tLVxuIik7CkBAIC01OTAsMzcgKzYxNSw0NCBAQAogCXUzMiBhZGRyID0gcG9ydCA/IEhDX1JFR19DT05GSUdfMSA6IEhDX1JFR19DT05GSUdfMDsKIAl1MzIgdmFsID0gUkVHX1JEKGJwLCBhZGRyKTsKIAlpbnQgbXNpeCA9IChicC0+ZmxhZ3MgJiBVU0lOR19NU0lYX0ZMQUcpID8gMSA6IDA7CisJaW50IG1zaSA9IChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykgPyAxIDogMDsKIAogCWlmIChtc2l4KSB7Ci0JCXZhbCAmPSB+SENfQ09ORklHXzBfUkVHX1NJTkdMRV9JU1JfRU5fMDsKKwkJdmFsICY9IH4oSENfQ09ORklHXzBfUkVHX1NJTkdMRV9JU1JfRU5fMCB8CisJCQkgSENfQ09ORklHXzBfUkVHX0lOVF9MSU5FX0VOXzApOwogCQl2YWwgfD0gKEhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8CiAJCQlIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7CisJfSBlbHNlIGlmIChtc2kpIHsKKwkJdmFsICY9IH5IQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMDsKKwkJdmFsIHw9IChIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKKwkJCUhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8CisJCQlIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7CiAJfSBlbHNlIHsKIAkJdmFsIHw9IChIQ19DT05GSUdfMF9SRUdfU0lOR0xFX0lTUl9FTl8wIHwKIAkJCUhDX0NPTkZJR18wX1JFR19NU0lfTVNJWF9JTlRfRU5fMCB8CiAJCQlIQ19DT05GSUdfMF9SRUdfSU5UX0xJTkVfRU5fMCB8CiAJCQlIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMCk7CiAKLQkJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KSAgTVNJLVggJWRcbiIsCi0JCSAgIHZhbCwgcG9ydCwgYWRkciwgbXNpeCk7CisJCURQKE5FVElGX01TR19JTlRSLCAid3JpdGUgJXggdG8gSEMgJWQgKGFkZHIgMHgleClcbiIsCisJCSAgIHZhbCwgcG9ydCwgYWRkcik7CiAKIAkJUkVHX1dSKGJwLCBhZGRyLCB2YWwpOwogCiAJCXZhbCAmPSB+SENfQ09ORklHXzBfUkVHX01TSV9NU0lYX0lOVF9FTl8wOwogCX0KIAotCURQKE5FVElGX01TR19JTlRSLCAid3JpdGUgJXggdG8gSEMgJWQgKGFkZHIgMHgleCkgIE1TSS1YICVkXG4iLAotCSAgIHZhbCwgcG9ydCwgYWRkciwgbXNpeCk7CisJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KSAgbW9kZSAlc1xuIiwKKwkgICB2YWwsIHBvcnQsIGFkZHIsIChtc2l4ID8gIk1TSS1YIiA6IChtc2kgPyAiTVNJIiA6ICJJTlR4IikpKTsKIAogCVJFR19XUihicCwgYWRkciwgdmFsKTsKIAogCWlmIChDSElQX0lTX0UxSChicCkpIHsKIAkJLyogaW5pdCBsZWFkaW5nL3RyYWlsaW5nIGVkZ2UgKi8KIAkJaWYgKElTX0UxSE1GKGJwKSkgewotCQkJdmFsID0gKDB4ZmUwZiB8ICgxIDw8IChCUF9FMUhWTihicCkgKyA0KSkpOworCQkJdmFsID0gKDB4ZWUwZiB8ICgxIDw8IChCUF9FMUhWTihicCkgKyA0KSkpOwogCQkJaWYgKGJwLT5wb3J0LnBtZikKLQkJCQkvKiBlbmFibGUgbmlnIGF0dGVudGlvbiAqLwotCQkJCXZhbCB8PSAweDAxMDA7CisJCQkJLyogZW5hYmxlIG5pZyBhbmQgZ3BpbzMgYXR0ZW50aW9uICovCisJCQkJdmFsIHw9IDB4MTEwMDsKIAkJfSBlbHNlCiAJCQl2YWwgPSAweGZmZmY7CiAKQEAgLTY0MywxNSArNjc1LDE5IEBACiAJRFAoTkVUSUZfTVNHX0lOVFIsICJ3cml0ZSAleCB0byBIQyAlZCAoYWRkciAweCV4KVxuIiwKIAkgICB2YWwsIHBvcnQsIGFkZHIpOwogCisJLyogZmx1c2ggYWxsIG91dHN0YW5kaW5nIHdyaXRlcyAqLworCW1taW93YigpOworCiAJUkVHX1dSKGJwLCBhZGRyLCB2YWwpOwogCWlmIChSRUdfUkQoYnAsIGFkZHIpICE9IHZhbCkKIAkJQk5YMlhfRVJSKCJCVUchIHByb3BlciB2YWwgbm90IHJlYWQgZnJvbSBJR1UhXG4iKTsKKwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9pbnRfZGlzYWJsZV9zeW5jKHN0cnVjdCBibngyeCAqYnAsIGludCBkaXNhYmxlX2h3KQogewogCWludCBtc2l4ID0gKGJwLT5mbGFncyAmIFVTSU5HX01TSVhfRkxBRykgPyAxIDogMDsKLQlpbnQgaTsKKwlpbnQgaSwgb2Zmc2V0OwogCiAJLyogZGlzYWJsZSBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KIAlhdG9taWNfaW5jKCZicC0+aW50cl9zZW0pOwpAQCAtNjYxLDExICs2OTcsMTAgQEAKIAogCS8qIG1ha2Ugc3VyZSBhbGwgSVNScyBhcmUgZG9uZSAqLwogCWlmIChtc2l4KSB7CisJCXN5bmNocm9uaXplX2lycShicC0+bXNpeF90YWJsZVswXS52ZWN0b3IpOworCQlvZmZzZXQgPSAxOwogCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKLQkJCXN5bmNocm9uaXplX2lycShicC0+bXNpeF90YWJsZVtpXS52ZWN0b3IpOwotCi0JCS8qIG9uZSBtb3JlIGZvciB0aGUgU2xvdyBQYXRoIElSUSAqLwotCQlzeW5jaHJvbml6ZV9pcnEoYnAtPm1zaXhfdGFibGVbaV0udmVjdG9yKTsKKwkJCXN5bmNocm9uaXplX2lycShicC0+bXNpeF90YWJsZVtpICsgb2Zmc2V0XS52ZWN0b3IpOwogCX0gZWxzZQogCQlzeW5jaHJvbml6ZV9pcnEoYnAtPnBkZXYtPmlycSk7CiAKQEAgLTc0OCw3ICs3ODMsNiBAQAogCS8qIFRlbGwgY29tcGlsZXIgdGhhdCBjb25zdW1lciBhbmQgcHJvZHVjZXIgY2FuIGNoYW5nZSAqLwogCWJhcnJpZXIoKTsKIAlyZXR1cm4gKGZwLT50eF9wa3RfcHJvZCAhPSBmcC0+dHhfcGt0X2NvbnMpOwotCiB9CiAKIC8qIGZyZWUgc2tiIGluIHRoZSBwYWNrZXQgcmluZyBhdCBwb3MgaWR4CkBAIC04NDIsOSArODc2LDEwIEBACiAJcmV0dXJuIChzMTYpKGZwLT5icC0+dHhfcmluZ19zaXplKSAtIHVzZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X3R4X2ludChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwLCBpbnQgd29yaykKK3N0YXRpYyB2b2lkIGJueDJ4X3R4X2ludChzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBmcC0+YnA7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCXUxNiBod19jb25zLCBzd19jb25zLCBiZF9jb25zID0gZnAtPnR4X2JkX2NvbnM7CiAJaW50IGRvbmUgPSAwOwogCkBAIC04NTMsNiArODg4LDcgQEAKIAkJcmV0dXJuOwogI2VuZGlmCiAKKwl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGJwLT5kZXYsIGZwLT5pbmRleCk7CiAJaHdfY29ucyA9IGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYik7CiAJc3dfY29ucyA9IGZwLT50eF9wa3RfY29uczsKIApAQCAtODc0LDMyICs5MTAsMzAgQEAKIAkJYmRfY29ucyA9IGJueDJ4X2ZyZWVfdHhfcGt0KGJwLCBmcCwgcGt0X2NvbnMpOwogCQlzd19jb25zKys7CiAJCWRvbmUrKzsKLQotCQlpZiAoZG9uZSA9PSB3b3JrKQotCQkJYnJlYWs7CiAJfQogCiAJZnAtPnR4X3BrdF9jb25zID0gc3dfY29uczsKIAlmcC0+dHhfYmRfY29ucyA9IGJkX2NvbnM7CiAKLQkvKiBOZWVkIHRvIG1ha2UgdGhlIHR4X2NvbnMgdXBkYXRlIHZpc2libGUgdG8gc3RhcnRfeG1pdCgpCi0JICogYmVmb3JlIGNoZWNraW5nIGZvciBuZXRpZl9xdWV1ZV9zdG9wcGVkKCkuICBXaXRob3V0IHRoZQotCSAqIG1lbW9yeSBiYXJyaWVyLCB0aGVyZSBpcyBhIHNtYWxsIHBvc3NpYmlsaXR5IHRoYXQgc3RhcnRfeG1pdCgpCi0JICogd2lsbCBtaXNzIGl0IGFuZCBjYXVzZSB0aGUgcXVldWUgdG8gYmUgc3RvcHBlZCBmb3JldmVyLgotCSAqLwotCXNtcF9tYigpOwotCiAJLyogVEJEIG5lZWQgYSB0aHJlc2g/ICovCi0JaWYgKHVubGlrZWx5KG5ldGlmX3F1ZXVlX3N0b3BwZWQoYnAtPmRldikpKSB7CisJaWYgKHVubGlrZWx5KG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkpIHsKIAotCQluZXRpZl90eF9sb2NrKGJwLT5kZXYpOworCQlfX25ldGlmX3R4X2xvY2sodHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCi0JCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpICYmCisJCS8qIE5lZWQgdG8gbWFrZSB0aGUgdHhfYmRfY29ucyB1cGRhdGUgdmlzaWJsZSB0byBzdGFydF94bWl0KCkKKwkJICogYmVmb3JlIGNoZWNraW5nIGZvciBuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKCkuICBXaXRob3V0IHRoZQorCQkgKiBtZW1vcnkgYmFycmllciwgdGhlcmUgaXMgYSBzbWFsbCBwb3NzaWJpbGl0eSB0aGF0CisJCSAqIHN0YXJ0X3htaXQoKSB3aWxsIG1pc3MgaXQgYW5kIGNhdXNlIHRoZSBxdWV1ZSB0byBiZSBzdG9wcGVkCisJCSAqIGZvcmV2ZXIuCisJCSAqLworCQlzbXBfbWIoKTsKKworCQlpZiAoKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkgJiYKIAkJICAgIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgJiYKIAkJICAgIChibngyeF90eF9hdmFpbChmcCkgPj0gTUFYX1NLQl9GUkFHUyArIDMpKQotCQkJbmV0aWZfd2FrZV9xdWV1ZShicC0+ZGV2KTsKKwkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKIAotCQluZXRpZl90eF91bmxvY2soYnAtPmRldik7CisJCV9fbmV0aWZfdHhfdW5sb2NrKHR4cSk7CiAJfQogfQogCkBAIC05MTMsMTIgKzk0NywxMiBAQAogCiAJRFAoQk5YMlhfTVNHX1NQLAogCSAgICJmcCAlZCAgY2lkICVkICBnb3QgcmFtcm9kICMlZCAgc3RhdGUgaXMgJXggIHR5cGUgaXMgJWRcbiIsCi0JICAgRlBfSURYKGZwKSwgY2lkLCBjb21tYW5kLCBicC0+c3RhdGUsCisJICAgZnAtPmluZGV4LCBjaWQsIGNvbW1hbmQsIGJwLT5zdGF0ZSwKIAkgICBycl9jcWUtPnJhbXJvZF9jcWUucmFtcm9kX3R5cGUpOwogCiAJYnAtPnNwcV9sZWZ0Kys7CiAKLQlpZiAoRlBfSURYKGZwKSkgeworCWlmIChmcC0+aW5kZXgpIHsKIAkJc3dpdGNoIChjb21tYW5kIHwgZnAtPnN0YXRlKSB7CiAJCWNhc2UgKFJBTVJPRF9DTURfSURfRVRIX0NMSUVOVF9TRVRVUCB8CiAJCQkJCQlCTlgyWF9GUF9TVEFURV9PUEVOSU5HKToKQEAgLTEwNzgsOCArMTExMiw3IEBACiAKIAlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYnAtPnBkZXYsCiAJCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKGNvbnNfcnhfYnVmLCBtYXBwaW5nKSwKLQkJCQkgICAgICAgYnAtPnJ4X29mZnNldCArIFJYX0NPUFlfVEhSRVNILAotCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCSAgICAgICBSWF9DT1BZX1RIUkVTSCwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCXByb2RfcnhfYnVmLT5za2IgPSBjb25zX3J4X2J1Zi0+c2tiOwogCXBjaV91bm1hcF9hZGRyX3NldChwcm9kX3J4X2J1ZiwgbWFwcGluZywKQEAgLTEyNjAsNyArMTI5Myw3IEBACiAJCSAgIHdoZXJlIHdlIGFyZSBhbmQgZHJvcCB0aGUgd2hvbGUgcGFja2V0ICovCiAJCWVyciA9IGJueDJ4X2FsbG9jX3J4X3NnZShicCwgZnAsIHNnZV9pZHgpOwogCQlpZiAodW5saWtlbHkoZXJyKSkgewotCQkJYnAtPmV0aF9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CisJCQlmcC0+ZXRoX3Ffc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCkBAIC0xMzY1LDcgKzEzOTgsNyBAQAogCQkvKiBlbHNlIGRyb3AgdGhlIHBhY2tldCBhbmQga2VlcCB0aGUgYnVmZmVyIGluIHRoZSBiaW4gKi8KIAkJRFAoTkVUSUZfTVNHX1JYX1NUQVRVUywKIAkJICAgIkZhaWxlZCB0byBhbGxvY2F0ZSBuZXcgc2tiIC0gZHJvcHBpbmcgcGFja2V0IVxuIik7Ci0JCWJwLT5ldGhfc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOworCQlmcC0+ZXRoX3Ffc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOwogCX0KIAogCWZwLT50cGFfc3RhdGVbcXVldWVdID0gQk5YMlhfVFBBX1NUT1A7CkBAIC0xMzc2LDcgKzE0MDksNyBAQAogCQkJCQl1MTYgYmRfcHJvZCwgdTE2IHJ4X2NvbXBfcHJvZCwKIAkJCQkJdTE2IHJ4X3NnZV9wcm9kKQogewotCXN0cnVjdCB0c3Rvcm1fZXRoX3J4X3Byb2R1Y2VycyByeF9wcm9kcyA9IHswfTsKKwlzdHJ1Y3QgdXN0b3JtX2V0aF9yeF9wcm9kdWNlcnMgcnhfcHJvZHMgPSB7MH07CiAJaW50IGk7CiAKIAkvKiBVcGRhdGUgcHJvZHVjZXJzICovCkBAIC0xMzk0LDE2ICsxNDI3LDE2IEBACiAJICovCiAJd21iKCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fZXRoX3J4X3Byb2R1Y2VycykvNDsgaSsrKQotCQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCi0JCSAgICAgICBUU1RPUk1fUlhfUFJPRFNfT0ZGU0VUKEJQX1BPUlQoYnApLCBGUF9DTF9JRChmcCkpICsgaSo0LAorCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHVzdG9ybV9ldGhfcnhfcHJvZHVjZXJzKS80OyBpKyspCisJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJICAgICAgIFVTVE9STV9SWF9QUk9EU19PRkZTRVQoQlBfUE9SVChicCksIGZwLT5jbF9pZCkgKyBpKjQsCiAJCSAgICAgICAoKHUzMiAqKSZyeF9wcm9kcylbaV0pOwogCiAJbW1pb3diKCk7IC8qIGtlZXAgcHJvZCB1cGRhdGVzIG9yZGVyZWQgKi8KIAogCURQKE5FVElGX01TR19SWF9TVEFUVVMsCi0JICAgIldyb3RlOiBiZF9wcm9kICV1ICBjcWVfcHJvZCAldSAgc2dlX3Byb2QgJXVcbiIsCi0JICAgYmRfcHJvZCwgcnhfY29tcF9wcm9kLCByeF9zZ2VfcHJvZCk7CisJICAgInF1ZXVlWyVkXTogIHdyb3RlICBiZF9wcm9kICV1ICBjcWVfcHJvZCAldSAgc2dlX3Byb2QgJXVcbiIsCisJICAgZnAtPmluZGV4LCBiZF9wcm9kLCByeF9jb21wX3Byb2QsIHJ4X3NnZV9wcm9kKTsKIH0KIAogc3RhdGljIGludCBibngyeF9yeF9pbnQoc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwgaW50IGJ1ZGdldCkKQEAgLTE0MzcsNyArMTQ3MCw3IEBACiAKIAlEUChORVRJRl9NU0dfUlhfU1RBVFVTLAogCSAgICJxdWV1ZVslZF06ICBod19jb21wX2NvbnMgJXUgIHN3X2NvbXBfY29ucyAldVxuIiwKLQkgICBGUF9JRFgoZnApLCBod19jb21wX2NvbnMsIHN3X2NvbXBfY29ucyk7CisJICAgZnAtPmluZGV4LCBod19jb21wX2NvbnMsIHN3X2NvbXBfY29ucyk7CiAKIAl3aGlsZSAoc3dfY29tcF9jb25zICE9IGh3X2NvbXBfY29ucykgewogCQlzdHJ1Y3Qgc3dfcnhfYmQgKnJ4X2J1ZiA9IE5VTEw7CkBAIC0xNTI3LDcgKzE1NjAsNyBAQAogCQkJCURQKE5FVElGX01TR19SWF9FUlIsCiAJCQkJICAgIkVSUk9SICBmbGFncyAleCAgcnggcGFja2V0ICV1XG4iLAogCQkJCSAgIGNxZV9mcF9mbGFncywgc3dfY29tcF9jb25zKTsKLQkJCQlicC0+ZXRoX3N0YXRzLnJ4X2Vycl9kaXNjYXJkX3BrdCsrOworCQkJCWZwLT5ldGhfcV9zdGF0cy5yeF9lcnJfZGlzY2FyZF9wa3QrKzsKIAkJCQlnb3RvIHJldXNlX3J4OwogCQkJfQogCkBAIC0xNTQ0LDcgKzE1NzcsNyBAQAogCQkJCQlEUChORVRJRl9NU0dfUlhfRVJSLAogCQkJCQkgICAiRVJST1IgIHBhY2tldCBkcm9wcGVkICIKIAkJCQkJICAgImJlY2F1c2Ugb2YgYWxsb2MgZmFpbHVyZVxuIik7Ci0JCQkJCWJwLT5ldGhfc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOworCQkJCQlmcC0+ZXRoX3Ffc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOwogCQkJCQlnb3RvIHJldXNlX3J4OwogCQkJCX0KIApAQCAtMTU3MCw3ICsxNjAzLDcgQEAKIAkJCQlEUChORVRJRl9NU0dfUlhfRVJSLAogCQkJCSAgICJFUlJPUiAgcGFja2V0IGRyb3BwZWQgYmVjYXVzZSAiCiAJCQkJICAgIm9mIGFsbG9jIGZhaWx1cmVcbiIpOwotCQkJCWJwLT5ldGhfc3RhdHMucnhfc2tiX2FsbG9jX2ZhaWxlZCsrOworCQkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CiByZXVzZV9yeDoKIAkJCQlibngyeF9yZXVzZV9yeF9za2IoZnAsIHNrYiwgYmRfY29ucywgYmRfcHJvZCk7CiAJCQkJZ290byBuZXh0X3J4OwpAQCAtMTU4MywxMCArMTYxNiwxMSBAQAogCQkJCWlmIChsaWtlbHkoQk5YMlhfUlhfQ1NVTV9PSyhjcWUpKSkKIAkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCQllbHNlCi0JCQkJCWJwLT5ldGhfc3RhdHMuaHdfY3N1bV9lcnIrKzsKKwkJCQkJZnAtPmV0aF9xX3N0YXRzLmh3X2NzdW1fZXJyKys7CiAJCQl9CiAJCX0KIAorCQlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgZnAtPmluZGV4KTsKICNpZmRlZiBCQ01fVkxBTgogCQlpZiAoKGJwLT52bGdycCAhPSBOVUxMKSAmJiAoYnAtPmZsYWdzICYgSFdfVkxBTl9SWF9GTEFHKSAmJgogCQkgICAgKGxlMTZfdG9fY3B1KGNxZS0+ZmFzdF9wYXRoX2NxZS5wYXJzX2ZsYWdzLmZsYWdzKSAmCkBAIC0xNjMyLDcgKzE2NjYsNyBAQAogewogCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSBmcF9jb29raWU7CiAJc3RydWN0IGJueDJ4ICpicCA9IGZwLT5icDsKLQlpbnQgaW5kZXggPSBGUF9JRFgoZnApOworCWludCBpbmRleCA9IGZwLT5pbmRleDsKIAogCS8qIFJldHVybiBoZXJlIGlmIGludGVycnVwdCBpcyBkaXNhYmxlZCAqLwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSAhPSAwKSkgewpAQCAtMTY0MSw4ICsxNjc1LDggQEAKIAl9CiAKIAlEUChCTlgyWF9NU0dfRlAsICJnb3QgYW4gTVNJLVggaW50ZXJydXB0IG9uIElEWDpTQiBbJWQ6JWRdXG4iLAotCSAgIGluZGV4LCBGUF9TQl9JRChmcCkpOwotCWJueDJ4X2Fja19zYihicCwgRlBfU0JfSUQoZnApLCBVU1RPUk1fSUQsIDAsIElHVV9JTlRfRElTQUJMRSwgMCk7CisJICAgaW5kZXgsIGZwLT5zYl9pZCk7CisJYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIFVTVE9STV9JRCwgMCwgSUdVX0lOVF9ESVNBQkxFLCAwKTsKIAogI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKIAlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKQEAgLTE2NTQsMTUgKzE2ODgsMTQgQEAKIAlwcmVmZXRjaCgmZnAtPnN0YXR1c19ibGstPmNfc3RhdHVzX2Jsb2NrLnN0YXR1c19ibG9ja19pbmRleCk7CiAJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCBpbmRleCwgbmFwaSkpOworCW5hcGlfc2NoZWR1bGUoJmJueDJ4X2ZwKGJwLCBpbmRleCwgbmFwaSkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgYm54MnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2luc3RhbmNlOwotCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXZfaW5zdGFuY2UpOwogCXUxNiBzdGF0dXMgPSBibngyeF9hY2tfaW50KGJwKTsKIAl1MTYgbWFzazsKIApAQCAtMTY3MSw3ICsxNzA0LDcgQEAKIAkJRFAoTkVUSUZfTVNHX0lOVFIsICJub3Qgb3VyIGludGVycnVwdCFcbiIpOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQotCURQKE5FVElGX01TR19JTlRSLCAiZ290IGFuIGludGVycnVwdCAgc3RhdHVzICV1XG4iLCBzdGF0dXMpOworCURQKE5FVElGX01TR19JTlRSLCAiZ290IGFuIGludGVycnVwdCAgc3RhdHVzIDB4JXhcbiIsIHN0YXR1cyk7CiAKIAkvKiBSZXR1cm4gaGVyZSBpZiBpbnRlcnJ1cHQgaXMgZGlzYWJsZWQgKi8KIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmJwLT5pbnRyX3NlbSkgIT0gMCkpIHsKQEAgLTE2OTMsNyArMTcyNiw3IEBACiAJCXByZWZldGNoKCZmcC0+c3RhdHVzX2Jsay0+Y19zdGF0dXNfYmxvY2suc3RhdHVzX2Jsb2NrX2luZGV4KTsKIAkJcHJlZmV0Y2goJmZwLT5zdGF0dXNfYmxrLT51X3N0YXR1c19ibG9jay5zdGF0dXNfYmxvY2tfaW5kZXgpOwogCi0JCW5ldGlmX3J4X3NjaGVkdWxlKCZibngyeF9mcChicCwgMCwgbmFwaSkpOworCQluYXBpX3NjaGVkdWxlKCZibngyeF9mcChicCwgMCwgbmFwaSkpOwogCiAJCXN0YXR1cyAmPSB+bWFzazsKIAl9CkBAIC0xODA2LDI2ICsxODM5LDUwIEBACiAvKiBIVyBMb2NrIGZvciBzaGFyZWQgZHVhbCBwb3J0IFBIWXMgKi8KIHN0YXRpYyB2b2lkIGJueDJ4X2FjcXVpcmVfcGh5X2xvY2soc3RydWN0IGJueDJ4ICpicCkKIHsKLQl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKLQogCW11dGV4X2xvY2soJmJwLT5wb3J0LnBoeV9tdXRleCk7CiAKLQlpZiAoKGV4dF9waHlfdHlwZSA9PSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004MDcyKSB8fAotCSAgICAoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzMpKQotCQlibngyeF9hY3F1aXJlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfODA3Ml9NRElPKTsKKwlpZiAoYnAtPnBvcnQubmVlZF9od19sb2NrKQorCQlibngyeF9hY3F1aXJlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfTURJTyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3JlbGVhc2VfcGh5X2xvY2soc3RydWN0IGJueDJ4ICpicCkKIHsKLQl1MzIgZXh0X3BoeV90eXBlID0gWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKTsKLQotCWlmICgoZXh0X3BoeV90eXBlID09IFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzIpIHx8Ci0JICAgIChleHRfcGh5X3R5cGUgPT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MykpCi0JCWJueDJ4X3JlbGVhc2VfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV84MDcyX01ESU8pOworCWlmIChicC0+cG9ydC5uZWVkX2h3X2xvY2spCisJCWJueDJ4X3JlbGVhc2VfaHdfbG9jayhicCwgSFdfTE9DS19SRVNPVVJDRV9NRElPKTsKIAogCW11dGV4X3VubG9jaygmYnAtPnBvcnQucGh5X211dGV4KTsKIH0KIAoraW50IGJueDJ4X2dldF9ncGlvKHN0cnVjdCBibngyeCAqYnAsIGludCBncGlvX251bSwgdTggcG9ydCkKK3sKKwkvKiBUaGUgR1BJTyBzaG91bGQgYmUgc3dhcHBlZCBpZiBzd2FwIHJlZ2lzdGVyIGlzIHNldCBhbmQgYWN0aXZlICovCisJaW50IGdwaW9fcG9ydCA9IChSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKSAmJgorCQkJIFJFR19SRChicCwgTklHX1JFR19TVFJBUF9PVkVSUklERSkpIF4gcG9ydDsKKwlpbnQgZ3Bpb19zaGlmdCA9IGdwaW9fbnVtICsKKwkJCShncGlvX3BvcnQgPyBNSVNDX1JFR0lTVEVSU19HUElPX1BPUlRfU0hJRlQgOiAwKTsKKwl1MzIgZ3Bpb19tYXNrID0gKDEgPDwgZ3Bpb19zaGlmdCk7CisJdTMyIGdwaW9fcmVnOworCWludCB2YWx1ZTsKKworCWlmIChncGlvX251bSA+IE1JU0NfUkVHSVNURVJTX0dQSU9fMykgeworCQlCTlgyWF9FUlIoIkludmFsaWQgR1BJTyAlZFxuIiwgZ3Bpb19udW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiByZWFkIEdQSU8gdmFsdWUgKi8KKwlncGlvX3JlZyA9IFJFR19SRChicCwgTUlTQ19SRUdfR1BJTyk7CisKKwkvKiBnZXQgdGhlIHJlcXVlc3RlZCBwaW4gdmFsdWUgKi8KKwlpZiAoKGdwaW9fcmVnICYgZ3Bpb19tYXNrKSA9PSBncGlvX21hc2spCisJCXZhbHVlID0gMTsKKwllbHNlCisJCXZhbHVlID0gMDsKKworCURQKE5FVElGX01TR19MSU5LLCAicGluICVkICB2YWx1ZSAweCV4XG4iLCBncGlvX251bSwgdmFsdWUpOworCisJcmV0dXJuIHZhbHVlOworfQorCiBpbnQgYm54Mnhfc2V0X2dwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IGdwaW9fbnVtLCB1MzIgbW9kZSwgdTggcG9ydCkKIHsKIAkvKiBUaGUgR1BJTyBzaG91bGQgYmUgc3dhcHBlZCBpZiBzd2FwIHJlZ2lzdGVyIGlzIHNldCBhbmQgYWN0aXZlICovCkBAIC0xODc5LDYgKzE5MzYsNTIgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGJueDJ4X3NldF9ncGlvX2ludChzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZ3Bpb19udW0sIHUzMiBtb2RlLCB1OCBwb3J0KQoreworCS8qIFRoZSBHUElPIHNob3VsZCBiZSBzd2FwcGVkIGlmIHN3YXAgcmVnaXN0ZXIgaXMgc2V0IGFuZCBhY3RpdmUgKi8KKwlpbnQgZ3Bpb19wb3J0ID0gKFJFR19SRChicCwgTklHX1JFR19QT1JUX1NXQVApICYmCisJCQkgUkVHX1JEKGJwLCBOSUdfUkVHX1NUUkFQX09WRVJSSURFKSkgXiBwb3J0OworCWludCBncGlvX3NoaWZ0ID0gZ3Bpb19udW0gKworCQkJKGdwaW9fcG9ydCA/IE1JU0NfUkVHSVNURVJTX0dQSU9fUE9SVF9TSElGVCA6IDApOworCXUzMiBncGlvX21hc2sgPSAoMSA8PCBncGlvX3NoaWZ0KTsKKwl1MzIgZ3Bpb19yZWc7CisKKwlpZiAoZ3Bpb19udW0gPiBNSVNDX1JFR0lTVEVSU19HUElPXzMpIHsKKwkJQk5YMlhfRVJSKCJJbnZhbGlkIEdQSU8gJWRcbiIsIGdwaW9fbnVtKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYm54MnhfYWNxdWlyZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX0dQSU8pOworCS8qIHJlYWQgR1BJTyBpbnQgKi8KKwlncGlvX3JlZyA9IFJFR19SRChicCwgTUlTQ19SRUdfR1BJT19JTlQpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfQ0xSOgorCQlEUChORVRJRl9NU0dfTElOSywgIkNsZWFyIEdQSU8gSU5UICVkIChzaGlmdCAlZCkgLT4gIgorCQkJCSAgICJvdXRwdXQgbG93XG4iLCBncGlvX251bSwgZ3Bpb19zaGlmdCk7CisJCS8qIGNsZWFyIFNFVCBhbmQgc2V0IENMUiAqLworCQlncGlvX3JlZyAmPSB+KGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9TRVRfUE9TKTsKKwkJZ3Bpb19yZWcgfD0gIChncGlvX21hc2sgPDwgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfQ0xSX1BPUyk7CisJCWJyZWFrOworCisJY2FzZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfU0VUOgorCQlEUChORVRJRl9NU0dfTElOSywgIlNldCBHUElPIElOVCAlZCAoc2hpZnQgJWQpIC0+ICIKKwkJCQkgICAib3V0cHV0IGhpZ2hcbiIsIGdwaW9fbnVtLCBncGlvX3NoaWZ0KTsKKwkJLyogY2xlYXIgQ0xSIGFuZCBzZXQgU0VUICovCisJCWdwaW9fcmVnICY9IH4oZ3Bpb19tYXNrIDw8IE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX0NMUl9QT1MpOworCQlncGlvX3JlZyB8PSAgKGdwaW9fbWFzayA8PCBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9TRVRfUE9TKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlSRUdfV1IoYnAsIE1JU0NfUkVHX0dQSU9fSU5ULCBncGlvX3JlZyk7CisJYm54MnhfcmVsZWFzZV9od19sb2NrKGJwLCBIV19MT0NLX1JFU09VUkNFX0dQSU8pOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYm54Mnhfc2V0X3NwaW8oc3RydWN0IGJueDJ4ICpicCwgaW50IHNwaW9fbnVtLCB1MzIgbW9kZSkKIHsKIAl1MzIgc3Bpb19tYXNrID0gKDEgPDwgc3Bpb19udW0pOwpAQCAtMTkzMywxMyArMjAzNiwxNiBAQAogCQlicC0+cG9ydC5hZHZlcnRpc2luZyAmPSB+KEFEVkVSVElTRURfQXN5bV9QYXVzZSB8CiAJCQkJCSAgQURWRVJUSVNFRF9QYXVzZSk7CiAJCWJyZWFrOworCiAJY2FzZSBNRElPX0NPTUJPX0lFRUUwX0FVVE9fTkVHX0FEVl9QQVVTRV9CT1RIOgogCQlicC0+cG9ydC5hZHZlcnRpc2luZyB8PSAoQURWRVJUSVNFRF9Bc3ltX1BhdXNlIHwKIAkJCQkJIEFEVkVSVElTRURfUGF1c2UpOwogCQlicmVhazsKKwogCWNhc2UgTURJT19DT01CT19JRUVFMF9BVVRPX05FR19BRFZfUEFVU0VfQVNZTU1FVFJJQzoKIAkJYnAtPnBvcnQuYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9Bc3ltX1BhdXNlOwogCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCWJwLT5wb3J0LmFkdmVydGlzaW5nICY9IH4oQURWRVJUSVNFRF9Bc3ltX1BhdXNlIHwKIAkJCQkJICBBRFZFUlRJU0VEX1BhdXNlKTsKQEAgLTE5NjQsNyArMjA3MCw4IEBACiAJCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAhPSBCTlgyWF9GTE9XX0NUUkxfTk9ORSkgewogCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1JYKSB7CiAJCQkJcHJpbnRrKCIsIHJlY2VpdmUgIik7Ci0JCQkJaWYgKGJwLT5saW5rX3ZhcnMuZmxvd19jdHJsICYgQk5YMlhfRkxPV19DVFJMX1RYKQorCQkJCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAmCisJCQkJICAgIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKIAkJCQkJcHJpbnRrKCImIHRyYW5zbWl0ICIpOwogCQkJfSBlbHNlIHsKIAkJCQlwcmludGsoIiwgdHJhbnNtaXQgIik7CkBAIC0xOTc5LDcgKzIwODYsNyBAQAogCX0KIH0KIAotc3RhdGljIHU4IGJueDJ4X2luaXRpYWxfcGh5X2luaXQoc3RydWN0IGJueDJ4ICpicCkKK3N0YXRpYyB1OCBibngyeF9pbml0aWFsX3BoeV9pbml0KHN0cnVjdCBibngyeCAqYnAsIGludCBsb2FkX21vZGUpCiB7CiAJaWYgKCFCUF9OT01DUChicCkpIHsKIAkJdTggcmM7CkBAIC0xOTk1LDE4ICsyMTAyLDI0IEBACiAJCQlicC0+bGlua19wYXJhbXMucmVxX2ZjX2F1dG9fYWR2ID0gQk5YMlhfRkxPV19DVFJMX0JPVEg7CiAKIAkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CisKKwkJaWYgKGxvYWRfbW9kZSA9PSBMT0FEX0RJQUcpCisJCQlicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX1hHWFNfMTA7CisKIAkJcmMgPSBibngyeF9waHlfaW5pdCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycyk7CisKIAkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CiAKIAkJYm54MnhfY2FsY19mY19hZHYoYnApOwogCi0JCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApCisJCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSAmJiBicC0+bGlua192YXJzLmxpbmtfdXApIHsKKwkJCWJueDJ4X3N0YXRzX2hhbmRsZShicCwgU1RBVFNfRVZFTlRfTElOS19VUCk7CiAJCQlibngyeF9saW5rX3JlcG9ydChicCk7Ci0KKwkJfQogCiAJCXJldHVybiByYzsKIAl9Ci0JQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC1ub3QgaW5pdGlhbGl6aW5nIGxpbmtcbiIpOworCUJOWDJYX0VSUigiQm9vdGNvZGUgaXMgbWlzc2luZyAtIGNhbiBub3QgaW5pdGlhbGl6ZSBsaW5rXG4iKTsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIApAQCAtMjAxOSwxNyArMjEzMiwxNyBAQAogCiAJCWJueDJ4X2NhbGNfZmNfYWR2KGJwKTsKIAl9IGVsc2UKLQkJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC1ub3Qgc2V0dGluZyBsaW5rXG4iKTsKKwkJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC0gY2FuIG5vdCBzZXQgbGlua1xuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X19saW5rX3Jlc2V0KHN0cnVjdCBibngyeCAqYnApCiB7CiAJaWYgKCFCUF9OT01DUChicCkpIHsKIAkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7Ci0JCWJueDJ4X2xpbmtfcmVzZXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMpOworCQlibngyeF9saW5rX3Jlc2V0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzLCAxKTsKIAkJYm54MnhfcmVsZWFzZV9waHlfbG9jayhicCk7CiAJfSBlbHNlCi0JCUJOWDJYX0VSUigiQm9vdGNvZGUgaXMgbWlzc2luZyAtbm90IHJlc2V0dGluZyBsaW5rXG4iKTsKKwkJQk5YMlhfRVJSKCJCb290Y29kZSBpcyBtaXNzaW5nIC0gY2FuIG5vdCByZXNldCBsaW5rXG4iKTsKIH0KIAogc3RhdGljIHU4IGJueDJ4X2xpbmtfdGVzdChzdHJ1Y3QgYm54MnggKmJwKQpAQCAtMjA0MywxMTkgKzIxNTYsNDIgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIENhbGN1bGF0ZXMgdGhlIHN1bSBvZiB2bl9taW5fcmF0ZXMuCi0gICBJdCdzIG5lZWRlZCBmb3IgZnVydGhlciBub3JtYWxpemluZyBvZiB0aGUgbWluX3JhdGVzLgotCi0gICBSZXR1cm5zOgotICAgICBzdW0gb2Ygdm5fbWluX3JhdGVzCi0gICAgICAgb3IKLSAgICAgMCAtIGlmIGFsbCB0aGUgbWluX3JhdGVzIGFyZSAwLgotICAgICBJbiB0aGUgbGF0ZXIgY2FzZSBmYWlybmVzcyBhbGdvcml0aG0gc2hvdWxkIGJlIGRlYWN0aXZhdGVkLgotICAgICBJZiBub3QgYWxsIG1pbl9yYXRlcyBhcmUgemVybyB0aGVuIHRob3NlIHRoYXQgYXJlIHplcm9lcyB3aWxsCi0gICAgIGJlIHNldCB0byAxLgotICovCi1zdGF0aWMgdTMyIGJueDJ4X2NhbGNfdm5fd3N1bShzdHJ1Y3QgYm54MnggKmJwKQorc3RhdGljIHZvaWQgYm54MnhfaW5pdF9wb3J0X21pbm1heChzdHJ1Y3QgYm54MnggKmJwKQogewotCWludCBpLCBwb3J0ID0gQlBfUE9SVChicCk7Ci0JdTMyIHdzdW0gPSAwOwotCWludCBhbGxfemVybyA9IDE7CisJdTMyIHJfcGFyYW0gPSBicC0+bGlua192YXJzLmxpbmVfc3BlZWQgLyA4OworCXUzMiBmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYzsKKwl1MzIgdF9mYWlyOwogCi0JZm9yIChpID0gMDsgaSA8IEUxSFZOX01BWDsgaSsrKSB7Ci0JCXUzMiB2bl9jZmcgPQotCQkJU0hNRU1fUkQoYnAsIG1mX2NmZy5mdW5jX21mX2NvbmZpZ1syKmkgKyBwb3J0XS5jb25maWcpOwotCQl1MzIgdm5fbWluX3JhdGUgPSAoKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX01JTl9CV19NQVNLKSA+PgotCQkJCSAgICAgRlVOQ19NRl9DRkdfTUlOX0JXX1NISUZUKSAqIDEwMDsKLQkJaWYgKCEodm5fY2ZnICYgRlVOQ19NRl9DRkdfRlVOQ19ISURFKSkgewotCQkJLyogSWYgbWluIHJhdGUgaXMgemVybyAtIHNldCBpdCB0byAxICovCi0JCQlpZiAoIXZuX21pbl9yYXRlKQotCQkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOwotCQkJZWxzZQotCQkJCWFsbF96ZXJvID0gMDsKKwltZW1zZXQoJihicC0+Y21uZy5yc192YXJzKSwgMCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCByYXRlX3NoYXBpbmdfdmFyc19wZXJfcG9ydCkpOworCW1lbXNldCgmKGJwLT5jbW5nLmZhaXJfdmFycyksIDAsIHNpemVvZihzdHJ1Y3QgZmFpcm5lc3NfdmFyc19wZXJfcG9ydCkpOwogCi0JCQl3c3VtICs9IHZuX21pbl9yYXRlOwotCQl9Ci0JfQorCS8qIDEwMCB1c2VjIGluIFNETSB0aWNrcyA9IDI1IHNpbmNlIGVhY2ggdGljayBpcyA0IHVzZWMgKi8KKwlicC0+Y21uZy5yc192YXJzLnJzX3BlcmlvZGljX3RpbWVvdXQgPSBSU19QRVJJT0RJQ19USU1FT1VUX1VTRUMgLyA0OwogCi0JLyogLi4uIG9ubHkgaWYgYWxsIG1pbiByYXRlcyBhcmUgemVyb3MgLSBkaXNhYmxlIEZBSVJORVNTICovCi0JaWYgKGFsbF96ZXJvKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiB3c3VtOwotfQotCi1zdGF0aWMgdm9pZCBibngyeF9pbml0X3BvcnRfbWlubWF4KHN0cnVjdCBibngyeCAqYnAsCi0JCQkJICAgaW50IGVuX2ZuZXNzLAotCQkJCSAgIHUxNiBwb3J0X3JhdGUsCi0JCQkJICAgc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0ICptX2NtbmdfcG9ydCkKLXsKLQl1MzIgcl9wYXJhbSA9IHBvcnRfcmF0ZSAvIDg7Ci0JaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKLQlpbnQgaTsKLQotCW1lbXNldChtX2NtbmdfcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCkpOwotCi0JLyogRW5hYmxlIG1pbm1heCBvbmx5IGlmIHdlIGFyZSBpbiBlMWhtZiBtb2RlICovCi0JaWYgKElTX0UxSE1GKGJwKSkgewotCQl1MzIgZmFpcl9wZXJpb2RpY190aW1lb3V0X3VzZWM7Ci0JCXUzMiB0X2ZhaXI7Ci0KLQkJLyogRW5hYmxlIHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgKi8KLQkJbV9jbW5nX3BvcnQtPmZsYWdzLmNtbmdfdm5fZW5hYmxlID0gMTsKLQkJbV9jbW5nX3BvcnQtPmZsYWdzLmZhaXJuZXNzX2VuYWJsZSA9IGVuX2ZuZXNzID8gMSA6IDA7Ci0JCW1fY21uZ19wb3J0LT5mbGFncy5yYXRlX3NoYXBpbmdfZW5hYmxlID0gMTsKLQotCQlpZiAoIWVuX2ZuZXNzKQotCQkJRFAoTkVUSUZfTVNHX0lGVVAsICJBbGwgTUlOIHZhbHVlcyBhcmUgemVyb2VzIgotCQkJICAgIiAgZmFpcm5lc3Mgd2lsbCBiZSBkaXNhYmxlZFxuIik7Ci0KLQkJLyogMTAwIHVzZWMgaW4gU0RNIHRpY2tzID0gMjUgc2luY2UgZWFjaCB0aWNrIGlzIDQgdXNlYyAqLwotCQltX2NtbmdfcG9ydC0+cnNfdmFycy5yc19wZXJpb2RpY190aW1lb3V0ID0KLQkJCQkJCVJTX1BFUklPRElDX1RJTUVPVVRfVVNFQyAvIDQ7Ci0KLQkJLyogdGhpcyBpcyB0aGUgdGhyZXNob2xkIGJlbG93IHdoaWNoIG5vIHRpbWVyIGFybWluZyB3aWxsIG9jY3VyCi0JCSAgIDEuMjUgY29lZmZpY2llbnQgaXMgZm9yIHRoZSB0aHJlc2hvbGQgdG8gYmUgYSBsaXR0bGUgYmlnZ2VyCi0JCSAgIHRoYW4gdGhlIHJlYWwgdGltZSwgdG8gY29tcGVuc2F0ZSBmb3IgdGltZXIgaW4tYWNjdXJhY3kgKi8KLQkJbV9jbW5nX3BvcnQtPnJzX3ZhcnMucnNfdGhyZXNob2xkID0KKwkvKiB0aGlzIGlzIHRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggbm8gdGltZXIgYXJtaW5nIHdpbGwgb2NjdXIKKwkgICAxLjI1IGNvZWZmaWNpZW50IGlzIGZvciB0aGUgdGhyZXNob2xkIHRvIGJlIGEgbGl0dGxlIGJpZ2dlcgorCSAgIHRoYW4gdGhlIHJlYWwgdGltZSwgdG8gY29tcGVuc2F0ZSBmb3IgdGltZXIgaW4tYWNjdXJhY3kgKi8KKwlicC0+Y21uZy5yc192YXJzLnJzX3RocmVzaG9sZCA9CiAJCQkJKFJTX1BFUklPRElDX1RJTUVPVVRfVVNFQyAqIHJfcGFyYW0gKiA1KSAvIDQ7CiAKLQkJLyogcmVzb2x1dGlvbiBvZiBmYWlybmVzcyB0aW1lciAqLwotCQlmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYyA9IFFNX0FSQl9CWVRFUyAvIHJfcGFyYW07Ci0JCS8qIGZvciAxMEcgaXQgaXMgMTAwMHVzZWMuIGZvciAxRyBpdCBpcyAxMDAwMHVzZWMuICovCi0JCXRfZmFpciA9IFRfRkFJUl9DT0VGIC8gcG9ydF9yYXRlOworCS8qIHJlc29sdXRpb24gb2YgZmFpcm5lc3MgdGltZXIgKi8KKwlmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYyA9IFFNX0FSQl9CWVRFUyAvIHJfcGFyYW07CisJLyogZm9yIDEwRyBpdCBpcyAxMDAwdXNlYy4gZm9yIDFHIGl0IGlzIDEwMDAwdXNlYy4gKi8KKwl0X2ZhaXIgPSBUX0ZBSVJfQ09FRiAvIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZDsKIAotCQkvKiB0aGlzIGlzIHRoZSB0aHJlc2hvbGQgYmVsb3cgd2hpY2ggd2Ugd29uJ3QgYXJtCi0JCSAgIHRoZSB0aW1lciBhbnltb3JlICovCi0JCW1fY21uZ19wb3J0LT5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgPSBRTV9BUkJfQllURVM7CisJLyogdGhpcyBpcyB0aGUgdGhyZXNob2xkIGJlbG93IHdoaWNoIHdlIHdvbid0IGFybSB0aGUgdGltZXIgYW55bW9yZSAqLworCWJwLT5jbW5nLmZhaXJfdmFycy5mYWlyX3RocmVzaG9sZCA9IFFNX0FSQl9CWVRFUzsKIAotCQkvKiB3ZSBtdWx0aXBseSBieSAxZTMvOCB0byBnZXQgYnl0ZXMvbXNlYy4KLQkJICAgV2UgZG9uJ3Qgd2FudCB0aGUgY3JlZGl0cyB0byBwYXNzIGEgY3JlZGl0Ci0JCSAgIG9mIHRoZSBUX0ZBSVIqRkFJUl9NRU0gKGFsZ29yaXRobSByZXNvbHV0aW9uKSAqLwotCQltX2NtbmdfcG9ydC0+ZmFpcl92YXJzLnVwcGVyX2JvdW5kID0KLQkJCQkJCXJfcGFyYW0gKiB0X2ZhaXIgKiBGQUlSX01FTTsKLQkJLyogc2luY2UgZWFjaCB0aWNrIGlzIDQgdXNlYyAqLwotCQltX2NtbmdfcG9ydC0+ZmFpcl92YXJzLmZhaXJuZXNzX3RpbWVvdXQgPQotCQkJCQkJZmFpcl9wZXJpb2RpY190aW1lb3V0X3VzZWMgLyA0OwotCi0JfSBlbHNlIHsKLQkJLyogRGlzYWJsZSByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzICovCi0JCW1fY21uZ19wb3J0LT5mbGFncy5jbW5nX3ZuX2VuYWJsZSA9IDA7Ci0JCW1fY21uZ19wb3J0LT5mbGFncy5mYWlybmVzc19lbmFibGUgPSAwOwotCQltX2NtbmdfcG9ydC0+ZmxhZ3MucmF0ZV9zaGFwaW5nX2VuYWJsZSA9IDA7Ci0KLQkJRFAoTkVUSUZfTVNHX0lGVVAsCi0JCSAgICJTaW5nbGUgZnVuY3Rpb24gbW9kZSAgbWlubWF4IHdpbGwgYmUgZGlzYWJsZWRcbiIpOwotCX0KLQotCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSAvIDQ7IGkrKykKLQkJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQocG9ydCkgKyBpICogNCwKLQkJICAgICAgICgodTMyICopKG1fY21uZ19wb3J0KSlbaV0pOworCS8qIHdlIG11bHRpcGx5IGJ5IDFlMy84IHRvIGdldCBieXRlcy9tc2VjLgorCSAgIFdlIGRvbid0IHdhbnQgdGhlIGNyZWRpdHMgdG8gcGFzcyBhIGNyZWRpdAorCSAgIG9mIHRoZSB0X2ZhaXIqRkFJUl9NRU0gKGFsZ29yaXRobSByZXNvbHV0aW9uKSAqLworCWJwLT5jbW5nLmZhaXJfdmFycy51cHBlcl9ib3VuZCA9IHJfcGFyYW0gKiB0X2ZhaXIgKiBGQUlSX01FTTsKKwkvKiBzaW5jZSBlYWNoIHRpY2sgaXMgNCB1c2VjICovCisJYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJuZXNzX3RpbWVvdXQgPSBmYWlyX3BlcmlvZGljX3RpbWVvdXRfdXNlYyAvIDQ7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4X2luaXRfdm5fbWlubWF4KHN0cnVjdCBibngyeCAqYnAsIGludCBmdW5jLAotCQkJCSAgIHUzMiB3c3VtLCB1MTYgcG9ydF9yYXRlLAotCQkJCSBzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQgKm1fY21uZ19wb3J0KQorc3RhdGljIHZvaWQgYm54MnhfaW5pdF92bl9taW5tYXgoc3RydWN0IGJueDJ4ICpicCwgaW50IGZ1bmMpCiB7CiAJc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl92biBtX3JzX3ZuOwogCXN0cnVjdCBmYWlybmVzc192YXJzX3Blcl92biBtX2ZhaXJfdm47CkBAIC0yMTcxLDE3ICsyMjA3LDE4IEBACiAJfSBlbHNlIHsKIAkJdm5fbWluX3JhdGUgPSAoKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX01JTl9CV19NQVNLKSA+PgogCQkJCUZVTkNfTUZfQ0ZHX01JTl9CV19TSElGVCkgKiAxMDA7Ci0JCS8qIElmIEZBSVJORVNTIGlzIGVuYWJsZWQgKG5vdCBhbGwgbWluIHJhdGVzIGFyZSB6ZXJvZXMpIGFuZAorCQkvKiBJZiBmYWlybmVzcyBpcyBlbmFibGVkIChub3QgYWxsIG1pbiByYXRlcyBhcmUgemVyb2VzKSBhbmQKIAkJICAgaWYgY3VycmVudCBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEuCiAJCSAgIFRoaXMgaXMgYSByZXF1aXJlbWVudCBvZiB0aGUgYWxnb3JpdGhtLiAqLwotCQlpZiAoKHZuX21pbl9yYXRlID09IDApICYmIHdzdW0pCisJCWlmIChicC0+dm5fd2VpZ2h0X3N1bSAmJiAodm5fbWluX3JhdGUgPT0gMCkpCiAJCQl2bl9taW5fcmF0ZSA9IERFRl9NSU5fUkFURTsKIAkJdm5fbWF4X3JhdGUgPSAoKHZuX2NmZyAmIEZVTkNfTUZfQ0ZHX01BWF9CV19NQVNLKSA+PgogCQkJCUZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVCkgKiAxMDA7CiAJfQogCi0JRFAoTkVUSUZfTVNHX0lGVVAsICJmdW5jICVkOiB2bl9taW5fcmF0ZT0lZCAgdm5fbWF4X3JhdGU9JWQgICIKLQkgICAid3N1bT0lZFxuIiwgZnVuYywgdm5fbWluX3JhdGUsIHZuX21heF9yYXRlLCB3c3VtKTsKKwlEUChORVRJRl9NU0dfSUZVUCwKKwkgICAiZnVuYyAlZDogdm5fbWluX3JhdGU9JWQgIHZuX21heF9yYXRlPSVkICB2bl93ZWlnaHRfc3VtPSVkXG4iLAorCSAgIGZ1bmMsIHZuX21pbl9yYXRlLCB2bl9tYXhfcmF0ZSwgYnAtPnZuX3dlaWdodF9zdW0pOwogCiAJbWVtc2V0KCZtX3JzX3ZuLCAwLCBzaXplb2Yoc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl92bikpOwogCW1lbXNldCgmbV9mYWlyX3ZuLCAwLCBzaXplb2Yoc3RydWN0IGZhaXJuZXNzX3ZhcnNfcGVyX3ZuKSk7CkBAIC0yMTkzLDU1ICsyMjMwLDIwIEBACiAJbV9yc192bi52bl9jb3VudGVyLnF1b3RhID0KIAkJCQkodm5fbWF4X3JhdGUgKiBSU19QRVJJT0RJQ19USU1FT1VUX1VTRUMpIC8gODsKIAotI2lmZGVmIEJOWDJYX1BFUl9QUk9UX1FPUwotCS8qIHBlciBwcm90b2NvbCBjb3VudGVyICovCi0JZm9yIChwcm90b2NvbCA9IDA7IHByb3RvY29sIDwgTlVNX09GX1BST1RPQ09MUzsgcHJvdG9jb2wrKykgewotCQkvKiBtYXhpbWFsIE1icHMgZm9yIHRoaXMgcHJvdG9jb2wgKi8KLQkJbV9yc192bi5wcm90b2NvbF9jb3VudGVyc1twcm90b2NvbF0ucmF0ZSA9Ci0JCQkJCQlwcm90b2NvbF9tYXhfcmF0ZVtwcm90b2NvbF07Ci0JCS8qIHRoZSBxdW90YSBpbiBlYWNoIHRpbWVyIHBlcmlvZCAtCi0JCSAgIG51bWJlciBvZiBieXRlcyB0cmFuc21pdHRlZCBpbiB0aGlzIHBlcmlvZCAqLwotCQltX3JzX3ZuLnByb3RvY29sX2NvdW50ZXJzW3Byb3RvY29sXS5xdW90YSA9Ci0JCQkodTMyKShyc19wZXJpb2RpY190aW1lb3V0X3VzZWMgKgotCQkJICAoKGRvdWJsZSltX3JzX3ZuLgotCQkJCSAgIHByb3RvY29sX2NvdW50ZXJzW3Byb3RvY29sXS5yYXRlLzgpKTsKLQl9Ci0jZW5kaWYKLQotCWlmICh3c3VtKSB7CisJaWYgKGJwLT52bl93ZWlnaHRfc3VtKSB7CiAJCS8qIGNyZWRpdCBmb3IgZWFjaCBwZXJpb2Qgb2YgdGhlIGZhaXJuZXNzIGFsZ29yaXRobToKIAkJICAgbnVtYmVyIG9mIGJ5dGVzIGluIFRfRkFJUiAodGhlIHZuIHNoYXJlIHRoZSBwb3J0IHJhdGUpLgotCQkgICB3c3VtIHNob3VsZCBub3QgYmUgbGFyZ2VyIHRoYW4gMTAwMDAsIHRodXMKLQkJICAgVF9GQUlSX0NPRUYgLyAoOCAqIHdzdW0pIHdpbGwgYWx3YXlzIGJlIGdyYXRlciB0aGFuIHplcm8gKi8KKwkJICAgdm5fd2VpZ2h0X3N1bSBzaG91bGQgbm90IGJlIGxhcmdlciB0aGFuIDEwMDAwLCB0aHVzCisJCSAgIFRfRkFJUl9DT0VGIC8gKDggKiB2bl93ZWlnaHRfc3VtKSB3aWxsIGFsd2F5cyBiZSBncmVhdGVyCisJCSAgIHRoYW4gemVybyAqLwogCQltX2ZhaXJfdm4udm5fY3JlZGl0X2RlbHRhID0KLQkJCW1heCgodTY0KSh2bl9taW5fcmF0ZSAqIChUX0ZBSVJfQ09FRiAvICg4ICogd3N1bSkpKSwKLQkJCSAgICAodTY0KShtX2NtbmdfcG9ydC0+ZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkICogMikpOworCQkJbWF4KCh1MzIpKHZuX21pbl9yYXRlICogKFRfRkFJUl9DT0VGIC8KKwkJCQkJCSAoOCAqIGJwLT52bl93ZWlnaHRfc3VtKSkpLAorCQkJICAgICh1MzIpKGJwLT5jbW5nLmZhaXJfdmFycy5mYWlyX3RocmVzaG9sZCAqIDIpKTsKIAkJRFAoTkVUSUZfTVNHX0lGVVAsICJtX2ZhaXJfdm4udm5fY3JlZGl0X2RlbHRhPSVkXG4iLAogCQkgICBtX2ZhaXJfdm4udm5fY3JlZGl0X2RlbHRhKTsKIAl9CiAKLSNpZmRlZiBCTlgyWF9QRVJfUFJPVF9RT1MKLQlkbyB7Ci0JCXUzMiBwcm90b2NvbFdlaWdodFN1bSA9IDA7Ci0KLQkJZm9yIChwcm90b2NvbCA9IDA7IHByb3RvY29sIDwgTlVNX09GX1BST1RPQ09MUzsgcHJvdG9jb2wrKykKLQkJCXByb3RvY29sV2VpZ2h0U3VtICs9Ci0JCQkJCWRydkluaXQucHJvdG9jb2xfbWluX3JhdGVbcHJvdG9jb2xdOwotCQkvKiBwZXIgcHJvdG9jb2wgY291bnRlciAtCi0JCSAgIE5PVCBORUVERUQgSUYgTk8gUEVSLVBST1RPQ09MIENPTkdFU1RJT04gTUFOQUdFTUVOVCAqLwotCQlpZiAocHJvdG9jb2xXZWlnaHRTdW0gPiAwKSB7Ci0JCQlmb3IgKHByb3RvY29sID0gMDsKLQkJCSAgICAgcHJvdG9jb2wgPCBOVU1fT0ZfUFJPVE9DT0xTOyBwcm90b2NvbCsrKQotCQkJCS8qIGNyZWRpdCBmb3IgZWFjaCBwZXJpb2Qgb2YgdGhlCi0JCQkJICAgZmFpcm5lc3MgYWxnb3JpdGhtIC0gbnVtYmVyIG9mIGJ5dGVzIGluCi0JCQkJICAgVF9GQUlSICh0aGUgcHJvdG9jb2wgc2hhcmUgdGhlIHZuIHJhdGUpICovCi0JCQkJbV9mYWlyX3ZuLnByb3RvY29sX2NyZWRpdF9kZWx0YVtwcm90b2NvbF0gPQotCQkJCQkodTMyKSgodm5fbWluX3JhdGUgLyA4KSAqIHRfZmFpciAqCi0JCQkJCXByb3RvY29sX21pbl9yYXRlIC8gcHJvdG9jb2xXZWlnaHRTdW0pOwotCQl9Ci0JfSB3aGlsZSAoMCk7Ci0jZW5kaWYKLQogCS8qIFN0b3JlIGl0IHRvIGludGVybmFsIG1lbW9yeSAqLwogCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RydWN0IHJhdGVfc2hhcGluZ192YXJzX3Blcl92bikvNDsgaSsrKQogCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCkBAIC0yMjU0LDExICsyMjU2LDEwIEBACiAJCSAgICAgICAoKHUzMiAqKSgmbV9mYWlyX3ZuKSlbaV0pOwogfQogCisKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHVwb24gbGluayBpbnRlcnJ1cHQgKi8KIHN0YXRpYyB2b2lkIGJueDJ4X2xpbmtfYXR0bihzdHJ1Y3QgYm54MnggKmJwKQogewotCWludCB2bjsKLQogCS8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFyZSBzeW5jZWQgd2l0aCB0aGUgY3VycmVudCBzdGF0aXN0aWNzICovCiAJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKIApAQCAtMjI2Niw2ICsyMjY3LDE5IEBACiAKIAlpZiAoYnAtPmxpbmtfdmFycy5saW5rX3VwKSB7CiAKKwkJLyogZHJvcGxlc3MgZmxvdyBjb250cm9sICovCisJCWlmIChDSElQX0lTX0UxSChicCkpIHsKKwkJCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJCQl1MzIgcGF1c2VfZW5hYmxlZCA9IDA7CisKKwkJCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9UWCkKKwkJCQlwYXVzZV9lbmFibGVkID0gMTsKKworCQkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKworCQkJICAgICAgIFVTVE9STV9QQVVTRV9FTkFCTEVEX09GRlNFVChwb3J0KSwKKwkJCSAgICAgICBwYXVzZV9lbmFibGVkKTsKKwkJfQorCiAJCWlmIChicC0+bGlua192YXJzLm1hY190eXBlID09IE1BQ19UWVBFX0JNQUMpIHsKIAkJCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMgKnBzdGF0czsKIApAQCAtMjI4MywzNiArMjI5NywzOCBAQAogCWJueDJ4X2xpbmtfcmVwb3J0KGJwKTsKIAogCWlmIChJU19FMUhNRihicCkpIHsKKwkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKIAkJaW50IGZ1bmM7CisJCWludCB2bjsKIAogCQlmb3IgKHZuID0gVk5fMDsgdm4gPCBFMUhWTl9NQVg7IHZuKyspIHsKIAkJCWlmICh2biA9PSBCUF9FMUhWTihicCkpCiAJCQkJY29udGludWU7CiAKLQkJCWZ1bmMgPSAoKHZuIDw8IDEpIHwgQlBfUE9SVChicCkpOworCQkJZnVuYyA9ICgodm4gPDwgMSkgfCBwb3J0KTsKIAogCQkJLyogU2V0IHRoZSBhdHRlbnRpb24gdG93YXJkcyBvdGhlciBkcml2ZXJzCiAJCQkgICBvbiB0aGUgc2FtZSBwb3J0ICovCiAJCQlSRUdfV1IoYnAsIE1JU0NfUkVHX0FFVV9HRU5FUkFMX0FUVE5fMCArCiAJCQkgICAgICAgKExJTktfU1lOQ19BVFRFTlRJT05fQklUX0ZVTkNfMCArIGZ1bmMpKjQsIDEpOwogCQl9Ci0JfQogCi0JaWYgKENISVBfSVNfRTFIKGJwKSAmJiAoYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkID4gMCkpIHsKLQkJc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0IG1fY21uZ19wb3J0OwotCQl1MzIgd3N1bTsKLQkJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKKwkJaWYgKGJwLT5saW5rX3ZhcnMubGlua191cCkgeworCQkJaW50IGk7CiAKLQkJLyogSW5pdCBSQVRFIFNIQVBJTkcgYW5kIEZBSVJORVNTIGNvbnRleHRzICovCi0JCXdzdW0gPSBibngyeF9jYWxjX3ZuX3dzdW0oYnApOwotCQlibngyeF9pbml0X3BvcnRfbWlubWF4KGJwLCAoaW50KXdzdW0sCi0JCQkJCWJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCwKLQkJCQkJJm1fY21uZ19wb3J0KTsKLQkJaWYgKElTX0UxSE1GKGJwKSkKKwkJCS8qIEluaXQgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyBjb250ZXh0cyAqLworCQkJYm54MnhfaW5pdF9wb3J0X21pbm1heChicCk7CisKIAkJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykKLQkJCQlibngyeF9pbml0X3ZuX21pbm1heChicCwgMip2biArIHBvcnQsCi0JCQkJCXdzdW0sIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCwKLQkJCQkJCSAgICAgJm1fY21uZ19wb3J0KTsKKwkJCQlibngyeF9pbml0X3ZuX21pbm1heChicCwgMip2biArIHBvcnQpOworCisJCQkvKiBTdG9yZSBpdCB0byBpbnRlcm5hbCBtZW1vcnkgKi8KKwkJCWZvciAoaSA9IDA7CisJCQkgICAgIGkgPCBzaXplb2Yoc3RydWN0IGNtbmdfc3RydWN0X3Blcl9wb3J0KSAvIDQ7IGkrKykKKwkJCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkJICBYU1RPUk1fQ01OR19QRVJfUE9SVF9WQVJTX09GRlNFVChwb3J0KSArIGkqNCwKKwkJCQkgICAgICAgKCh1MzIgKikoJmJwLT5jbW5nKSlbaV0pOworCQl9CiAJfQogfQogCkBAIC0yNDg5LDYgKzI1MDUsNyBAQAogCXUzMiBuaWdfaW50X21hc2tfYWRkciA9IHBvcnQgPyBOSUdfUkVHX01BU0tfSU5URVJSVVBUX1BPUlQxIDoKIAkJCQkgICAgICAgTklHX1JFR19NQVNLX0lOVEVSUlVQVF9QT1JUMDsKIAl1MzIgYWV1X21hc2s7CisJdTMyIG5pZ19tYXNrID0gMDsKIAogCWlmIChicC0+YXR0bl9zdGF0ZSAmIGFzc2VydGVkKQogCQlCTlgyWF9FUlIoIklHVSBFUlJPUlxuIik7CkBAIC0yNTE0LDcgKzI1MzEsNyBAQAogCQkJYm54MnhfYWNxdWlyZV9waHlfbG9jayhicCk7CiAKIAkJCS8qIHNhdmUgbmlnIGludGVycnVwdCBtYXNrICovCi0JCQlicC0+bmlnX21hc2sgPSBSRUdfUkQoYnAsIG5pZ19pbnRfbWFza19hZGRyKTsKKwkJCW5pZ19tYXNrID0gUkVHX1JEKGJwLCBuaWdfaW50X21hc2tfYWRkcik7CiAJCQlSRUdfV1IoYnAsIG5pZ19pbnRfbWFza19hZGRyLCAwKTsKIAogCQkJYm54MnhfbGlua19hdHRuKGJwKTsKQEAgLTI1NjksNyArMjU4Niw3IEBACiAKIAkvKiBub3cgc2V0IGJhY2sgdGhlIG1hc2sgKi8KIAlpZiAoYXNzZXJ0ZWQgJiBBVFROX05JR19GT1JfRlVOQykgewotCQlSRUdfV1IoYnAsIG5pZ19pbnRfbWFza19hZGRyLCBicC0+bmlnX21hc2spOworCQlSRUdfV1IoYnAsIG5pZ19pbnRfbWFza19hZGRyLCBuaWdfbWFzayk7CiAJCWJueDJ4X3JlbGVhc2VfcGh5X2xvY2soYnApOwogCX0KIH0KQEAgLTI1OTEsOSArMjYwOCw4IEBACiAKIAkJQk5YMlhfRVJSKCJTUElPNSBodyBhdHRlbnRpb25cbiIpOwogCi0JCXN3aXRjaCAoYnAtPmNvbW1vbi5ib2FyZCAmIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9NQVNLKSB7Ci0JCWNhc2UgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX0JDTTk1NzcxMEExMDIxRzoKLQkJY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjJHOgorCQlzd2l0Y2ggKFhHWFNfRVhUX1BIWV9UWVBFKGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZykpIHsKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCQkJLyogRmFuIGZhaWx1cmUgYXR0ZW50aW9uICovCiAKIAkJCS8qIFRoZSBQSFkgcmVzZXQgaXMgY29udHJvbGxlZCBieSBHUElPIDEgKi8KQEAgLTI2MjQsNiArMjY0MCwxMyBAQAogCQl9CiAJfQogCisJaWYgKGF0dG4gJiAoQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMCB8CisJCSAgICBBRVVfSU5QVVRTX0FUVE5fQklUU19HUElPM19GVU5DVElPTl8xKSkgeworCQlibngyeF9hY3F1aXJlX3BoeV9sb2NrKGJwKTsKKwkJYm54MnhfaGFuZGxlX21vZHVsZV9kZXRlY3RfaW50KCZicC0+bGlua19wYXJhbXMpOworCQlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKKwl9CisKIAlpZiAoYXR0biAmIEhXX0lOVEVSUlVUX0FTU0VSVF9TRVRfMCkgewogCiAJCXZhbCA9IFJFR19SRChicCwgcmVnX29mZnNldCk7CkBAIC0yNjQwLDcgKzI2NjMsNyBAQAogewogCXUzMiB2YWw7CiAKLQlpZiAoYXR0biAmIEJOWDJYX0RPT1JRX0FTU0VSVCkgeworCWlmIChhdHRuICYgQUVVX0lOUFVUU19BVFROX0JJVFNfRE9PUkJFTExRX0hXX0lOVEVSUlVQVCkgewogCiAJCXZhbCA9IFJFR19SRChicCwgRE9SUV9SRUdfRE9SUV9JTlRfU1RTX0NMUik7CiAJCUJOWDJYX0VSUigiREIgaHcgYXR0ZW50aW9uIDB4JXhcbiIsIHZhbCk7CkBAIC0yODg2LDEwICsyOTA5LDYgQEAKIAlpZiAoc3RhdHVzICYgMHgxKQogCQlibngyeF9hdHRuX2ludChicCk7CiAKLQkvKiBDU3Rvcm0gZXZlbnRzOiBxdWVyeV9zdGF0cywgcG9ydCBkZWxldGUgcmFtcm9kICovCi0JaWYgKHN0YXR1cyAmIDB4MikKLQkJYnAtPnN0YXRzX3BlbmRpbmcgPSAwOwotCiAJYm54MnhfYWNrX3NiKGJwLCBERUZfU0JfSUQsIEFUVEVOVElPTl9JRCwgbGUxNl90b19jcHUoYnAtPmRlZl9hdHRfaWR4KSwKIAkJICAgICBJR1VfSU5UX05PUCwgMSk7CiAJYm54MnhfYWNrX3NiKGJwLCBERUZfU0JfSUQsIFVTVE9STV9JRCwgbGUxNl90b19jcHUoYnAtPmRlZl91X2lkeCksCkBAIC0yOTE0LDcgKzI5MzMsNyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JYm54MnhfYWNrX3NiKGJwLCBERUZfU0JfSUQsIFhTVE9STV9JRCwgMCwgSUdVX0lOVF9ESVNBQkxFLCAwKTsKKwlibngyeF9hY2tfc2IoYnAsIERFRl9TQl9JRCwgVFNUT1JNX0lELCAwLCBJR1VfSU5UX0RJU0FCTEUsIDApOwogCiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgogCWlmICh1bmxpa2VseShicC0+cGFuaWMpKQpAQCAtMzAwMywxNiArMzAyMiw0MSBAQAogCiAjZGVmaW5lIFVQREFURV9FWFRFTkRfVFNUQVQocywgdCkgXAogCWRvIHsgXAotCQlkaWZmID0gbGUzMl90b19jcHUodGNsaWVudC0+cykgLSBvbGRfdGNsaWVudC0+czsgXAotCQlvbGRfdGNsaWVudC0+cyA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPnMpOyBcCi0JCUFERF9FWFRFTkRfNjQoZnN0YXRzLT50IyNfaGksIGZzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAorCQlkaWZmID0gbGUzMl90b19jcHUodGNsaWVudC0+cykgLSBsZTMyX3RvX2NwdShvbGRfdGNsaWVudC0+cyk7IFwKKwkJb2xkX3RjbGllbnQtPnMgPSB0Y2xpZW50LT5zOyBcCisJCUFERF9FWFRFTkRfNjQocXN0YXRzLT50IyNfaGksIHFzdGF0cy0+dCMjX2xvLCBkaWZmKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgVVBEQVRFX0VYVEVORF9VU1RBVChzLCB0KSBcCisJZG8geyBcCisJCWRpZmYgPSBsZTMyX3RvX2NwdSh1Y2xpZW50LT5zKSAtIGxlMzJfdG9fY3B1KG9sZF91Y2xpZW50LT5zKTsgXAorCQlvbGRfdWNsaWVudC0+cyA9IHVjbGllbnQtPnM7IFwKKwkJQUREX0VYVEVORF82NChxc3RhdHMtPnQjI19oaSwgcXN0YXRzLT50IyNfbG8sIGRpZmYpOyBcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBVUERBVEVfRVhURU5EX1hTVEFUKHMsIHQpIFwKIAlkbyB7IFwKLQkJZGlmZiA9IGxlMzJfdG9fY3B1KHhjbGllbnQtPnMpIC0gb2xkX3hjbGllbnQtPnM7IFwKLQkJb2xkX3hjbGllbnQtPnMgPSBsZTMyX3RvX2NwdSh4Y2xpZW50LT5zKTsgXAotCQlBRERfRVhURU5EXzY0KGZzdGF0cy0+dCMjX2hpLCBmc3RhdHMtPnQjI19sbywgZGlmZik7IFwKKwkJZGlmZiA9IGxlMzJfdG9fY3B1KHhjbGllbnQtPnMpIC0gbGUzMl90b19jcHUob2xkX3hjbGllbnQtPnMpOyBcCisJCW9sZF94Y2xpZW50LT5zID0geGNsaWVudC0+czsgXAorCQlBRERfRVhURU5EXzY0KHFzdGF0cy0+dCMjX2hpLCBxc3RhdHMtPnQjI19sbywgZGlmZik7IFwKKwl9IHdoaWxlICgwKQorCisvKiBtaW51ZW5kIC09IHN1YnRyYWhlbmQgKi8KKyNkZWZpbmUgU1VCXzY0KG1faGksIHNfaGksIG1fbG8sIHNfbG8pIFwKKwlkbyB7IFwKKwkJRElGRl82NChtX2hpLCBtX2hpLCBzX2hpLCBtX2xvLCBtX2xvLCBzX2xvKTsgXAorCX0gd2hpbGUgKDApCisKKy8qIG1pbnVlbmRbaGk6bG9dIC09IHN1YnRyYWhlbmQgKi8KKyNkZWZpbmUgU1VCX0VYVEVORF82NChtX2hpLCBtX2xvLCBzKSBcCisJZG8geyBcCisJCVNVQl82NChtX2hpLCAwLCBtX2xvLCBzKTsgXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgU1VCX0VYVEVORF9VU1RBVChzLCB0KSBcCisJZG8geyBcCisJCWRpZmYgPSBsZTMyX3RvX2NwdSh1Y2xpZW50LT5zKSAtIGxlMzJfdG9fY3B1KG9sZF91Y2xpZW50LT5zKTsgXAorCQlTVUJfRVhURU5EXzY0KHFzdGF0cy0+dCMjX2hpLCBxc3RhdHMtPnQjI19sbywgZGlmZik7IFwKIAl9IHdoaWxlICgwKQogCiAvKgpAQCAtMzAzOSwxMSArMzA4MywxMiBAQAogewogCWlmICghYnAtPnN0YXRzX3BlbmRpbmcpIHsKIAkJc3RydWN0IGV0aF9xdWVyeV9yYW1yb2RfZGF0YSByYW1yb2RfZGF0YSA9IHswfTsKLQkJaW50IHJjOworCQlpbnQgaSwgcmM7CiAKIAkJcmFtcm9kX2RhdGEuZHJ2X2NvdW50ZXIgPSBicC0+c3RhdHNfY291bnRlcisrOwotCQlyYW1yb2RfZGF0YS5jb2xsZWN0X3BvcnRfMWIgPSBicC0+cG9ydC5wbWYgPyAxIDogMDsKLQkJcmFtcm9kX2RhdGEuY3RyX2lkX3ZlY3RvciA9ICgxIDw8IEJQX0NMX0lEKGJwKSk7CisJCXJhbXJvZF9kYXRhLmNvbGxlY3RfcG9ydCA9IGJwLT5wb3J0LnBtZiA/IDEgOiAwOworCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwkJCXJhbXJvZF9kYXRhLmN0cl9pZF92ZWN0b3IgfD0gKDEgPDwgYnAtPmZwW2ldLmNsX2lkKTsKIAogCQlyYyA9IGJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1NUQVRfUVVFUlksIDAsCiAJCQkJICAgKCh1MzIgKikmcmFtcm9kX2RhdGEpWzFdLApAQCAtMzA1OSw3ICszMTA0LDkgQEAKIHN0YXRpYyB2b2lkIGJueDJ4X3N0YXRzX2luaXQoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCWludCBpOwogCisJYnAtPnN0YXRzX3BlbmRpbmcgPSAwOwogCWJwLT5leGVjdXRlcl9pZHggPSAwOwogCWJwLT5zdGF0c19jb3VudGVyID0gMDsKIApAQCAtMzA4MSw5ICszMTI4LDE5IEBACiAJCSAgICAmKGJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMuZWdyZXNzX21hY19wa3QxX2xvKSwgMik7CiAKIAkvKiBmdW5jdGlvbiBzdGF0cyAqLworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCW1lbXNldCgmZnAtPm9sZF90Y2xpZW50LCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOworCQltZW1zZXQoJmZwLT5vbGRfdWNsaWVudCwgMCwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKKwkJbWVtc2V0KCZmcC0+b2xkX3hjbGllbnQsIDAsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSk7CisJCW1lbXNldCgmZnAtPmV0aF9xX3N0YXRzLCAwLCBzaXplb2Yoc3RydWN0IGJueDJ4X2V0aF9xX3N0YXRzKSk7CisJfQorCiAJbWVtc2V0KCZicC0+ZGV2LT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7Ci0JbWVtc2V0KCZicC0+b2xkX3RjbGllbnQsIDAsIHNpemVvZihzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpKTsKLQltZW1zZXQoJmJwLT5vbGRfeGNsaWVudCwgMCwgc2l6ZW9mKHN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykpOwogCW1lbXNldCgmYnAtPmV0aF9zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBibngyeF9ldGhfc3RhdHMpKTsKIAogCWJwLT5zdGF0c19zdGF0ZSA9IFNUQVRTX1NUQVRFX0RJU0FCTEVEOwpAQCAtMzA5Nyw2ICszMTU0LDggQEAKIAl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7CiAKIAkqc3RhdHNfY29tcCA9IERNQUVfQ09NUF9WQUw7CisJaWYgKENISVBfUkVWX0lTX1NMT1coYnApKQorCQlyZXR1cm47CiAKIAkvKiBsb2FkZXIgKi8KIAlpZiAoYnAtPmV4ZWN1dGVyX2lkeCkgewpAQCAtMzQ4Niw3ICszNTQ1LDExIEBACiB7CiAJc3RydWN0IGJtYWNfc3RhdHMgKm5ldyA9IGJueDJ4X3NwKGJwLCBtYWNfc3RhdHMuYm1hY19zdGF0cyk7CiAJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzID0gYm54Mnhfc3AoYnAsIHBvcnRfc3RhdHMpOwotCXN0cnVjdCByZWdwYWlyIGRpZmY7CisJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7CisJc3RydWN0IHsKKwkJdTMyIGxvOworCQl1MzIgaGk7CisJfSBkaWZmOwogCiAJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyZXJiLCByeF9zdGF0X2lmaGNpbmJhZG9jdGV0cyk7CiAJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyZmNzLCByeF9zdGF0X2RvdDNzdGF0c2Zjc2Vycm9ycyk7CkBAIC0zNDk2LDcgKzM1NTksNyBAQAogCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncmpiciwgcnhfc3RhdF9ldGhlcnN0YXRzamFiYmVycyk7CiAJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyeGNmLCByeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZCk7CiAJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyeHBmLCByeF9zdGF0X3hvZmZzdGF0ZWVudGVyZWQpOwotCVVQREFURV9TVEFUNjQocnhfc3RhdF9ncnhwZiwgcnhfc3RhdF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZCk7CisJVVBEQVRFX1NUQVQ2NChyeF9zdGF0X2dyeHBmLCByeF9zdGF0X2JtYWNfeHBmKTsKIAlVUERBVEVfU1RBVDY0KHR4X3N0YXRfZ3R4cGYsIHR4X3N0YXRfb3V0eG9mZnNlbnQpOwogCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndHhwZiwgdHhfc3RhdF9mbG93Y29udHJvbGRvbmUpOwogCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndDY0LCB0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHMpOwpAQCAtMzUxNywxMiArMzU4MCwyMyBAQAogCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndGVyciwKIAkJCQl0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnMpOwogCVVQREFURV9TVEFUNjQodHhfc3RhdF9ndHVmbCwgdHhfc3RhdF9ibWFjX3VmbCk7CisKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9oaSA9CisJCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnJ4X3N0YXRfYm1hY194cGZfaGk7CisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfbG8gPQorCQkJCXBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X2JtYWNfeHBmX2xvOworCisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9oaSA9CisJCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9mZnNlbnRfaGk7CisJZXN0YXRzLT5wYXVzZV9mcmFtZXNfc2VudF9sbyA9CisJCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9mZnNlbnRfbG87CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2VtYWNfc3RhdHNfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCiB7CiAJc3RydWN0IGVtYWNfc3RhdHMgKm5ldyA9IGJueDJ4X3NwKGJwLCBtYWNfc3RhdHMuZW1hY19zdGF0cyk7CiAJc3RydWN0IGhvc3RfcG9ydF9zdGF0cyAqcHN0YXRzID0gYm54Mnhfc3AoYnAsIHBvcnRfc3RhdHMpOworCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwogCiAJVVBEQVRFX0VYVEVORF9TVEFUKHJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzKTsKIAlVUERBVEVfRVhURU5EX1NUQVQodHhfc3RhdF9pZmhjb3V0YmFkb2N0ZXRzKTsKQEAgLTM1NTUsNiArMzYyOSwyNCBAQAogCVVQREFURV9FWFRFTkRfU1RBVCh0eF9zdGF0X2V0aGVyc3RhdHNwa3RzMTAyNG9jdGV0c3RvMTUyMm9jdGV0cyk7CiAJVVBEQVRFX0VYVEVORF9TVEFUKHR4X3N0YXRfZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0cyk7CiAJVVBEQVRFX0VYVEVORF9TVEFUKHR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9ycyk7CisKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19yZWNlaXZlZF9oaSA9CisJCQlwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF94b25wYXVzZWZyYW1lc3JlY2VpdmVkX2hpOworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2xvID0KKwkJCXBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X3hvbnBhdXNlZnJhbWVzcmVjZWl2ZWRfbG87CisJQUREXzY0KGVzdGF0cy0+cGF1c2VfZnJhbWVzX3JlY2VpdmVkX2hpLAorCSAgICAgICBwc3RhdHMtPm1hY19zdHhbMV0ucnhfc3RhdF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZF9oaSwKKwkgICAgICAgZXN0YXRzLT5wYXVzZV9mcmFtZXNfcmVjZWl2ZWRfbG8sCisJICAgICAgIHBzdGF0cy0+bWFjX3N0eFsxXS5yeF9zdGF0X3hvZmZwYXVzZWZyYW1lc3JlY2VpdmVkX2xvKTsKKworCWVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfaGkgPQorCQkJcHN0YXRzLT5tYWNfc3R4WzFdLnR4X3N0YXRfb3V0eG9uc2VudF9oaTsKKwllc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2xvID0KKwkJCXBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvbnNlbnRfbG87CisJQUREXzY0KGVzdGF0cy0+cGF1c2VfZnJhbWVzX3NlbnRfaGksCisJICAgICAgIHBzdGF0cy0+bWFjX3N0eFsxXS50eF9zdGF0X291dHhvZmZzZW50X2hpLAorCSAgICAgICBlc3RhdHMtPnBhdXNlX2ZyYW1lc19zZW50X2xvLAorCSAgICAgICBwc3RhdHMtPm1hY19zdHhbMV0udHhfc3RhdF9vdXR4b2Zmc2VudF9sbyk7CiB9CiAKIHN0YXRpYyBpbnQgYm54MnhfaHdfc3RhdHNfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCkBAIC0zNTYzLDcgKzM2NTUsMTEgQEAKIAlzdHJ1Y3QgbmlnX3N0YXRzICpvbGQgPSAmKGJwLT5wb3J0Lm9sZF9uaWdfc3RhdHMpOwogCXN0cnVjdCBob3N0X3BvcnRfc3RhdHMgKnBzdGF0cyA9IGJueDJ4X3NwKGJwLCBwb3J0X3N0YXRzKTsKIAlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKLQlzdHJ1Y3QgcmVncGFpciBkaWZmOworCXN0cnVjdCB7CisJCXUzMiBsbzsKKwkJdTMyIGhpOworCX0gZGlmZjsKKwl1MzIgbmlnX3RpbWVyX21heDsKIAogCWlmIChicC0+bGlua192YXJzLm1hY190eXBlID09IE1BQ19UWVBFX0JNQUMpCiAJCWJueDJ4X2JtYWNfc3RhdHNfdXBkYXRlKGJwKTsKQEAgLTM1NzIsNyArMzY2OCw3IEBACiAJCWJueDJ4X2VtYWNfc3RhdHNfdXBkYXRlKGJwKTsKIAogCWVsc2UgeyAvKiB1bnJlYWNoZWQgKi8KLQkJQk5YMlhfRVJSKCJzdGF0cyB1cGRhdGVkIGJ5IGRtYWUgYnV0IG5vIE1BQyBhY3RpdmVcbiIpOworCQlCTlgyWF9FUlIoInN0YXRzIHVwZGF0ZWQgYnkgRE1BRSBidXQgbm8gTUFDIGFjdGl2ZVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTM1OTQsMTM0ICszNjkwLDIxMSBAQAogCiAJcHN0YXRzLT5ob3N0X3BvcnRfc3RhdHNfc3RhcnQgPSArK3BzdGF0cy0+aG9zdF9wb3J0X3N0YXRzX2VuZDsKIAorCW5pZ190aW1lcl9tYXggPSBTSE1FTV9SRChicCwgcG9ydF9tYltCUF9QT1JUKGJwKV0uc3RhdF9uaWdfdGltZXIpOworCWlmIChuaWdfdGltZXJfbWF4ICE9IGVzdGF0cy0+bmlnX3RpbWVyX21heCkgeworCQllc3RhdHMtPm5pZ190aW1lcl9tYXggPSBuaWdfdGltZXJfbWF4OworCQlCTlgyWF9FUlIoIk5JRyB0aW1lciBtYXggKCV1KVxuIiwgZXN0YXRzLT5uaWdfdGltZXJfbWF4KTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBibngyeF9zdG9ybV9zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlzdHJ1Y3QgZXRoX3N0YXRzX3F1ZXJ5ICpzdGF0cyA9IGJueDJ4X3NwKGJwLCBmd19zdGF0cyk7Ci0JaW50IGNsX2lkID0gQlBfQ0xfSUQoYnApOwogCXN0cnVjdCB0c3Rvcm1fcGVyX3BvcnRfc3RhdHMgKnRwb3J0ID0KLQkJCQkmc3RhdHMtPnRzdG9ybV9jb21tb24ucG9ydF9zdGF0aXN0aWNzOwotCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqdGNsaWVudCA9Ci0JCQkmc3RhdHMtPnRzdG9ybV9jb21tb24uY2xpZW50X3N0YXRpc3RpY3NbY2xfaWRdOwotCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3RjbGllbnQgPSAmYnAtPm9sZF90Y2xpZW50OwotCXN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqeGNsaWVudCA9Ci0JCQkmc3RhdHMtPnhzdG9ybV9jb21tb24uY2xpZW50X3N0YXRpc3RpY3NbY2xfaWRdOwotCXN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3hjbGllbnQgPSAmYnAtPm9sZF94Y2xpZW50OworCQkJCQkmc3RhdHMtPnRzdG9ybV9jb21tb24ucG9ydF9zdGF0aXN0aWNzOwogCXN0cnVjdCBob3N0X2Z1bmNfc3RhdHMgKmZzdGF0cyA9IGJueDJ4X3NwKGJwLCBmdW5jX3N0YXRzKTsKIAlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKLQl1MzIgZGlmZjsKKwlpbnQgaTsKIAotCS8qIGFyZSBzdG9ybSBzdGF0cyB2YWxpZD8gKi8KLQlpZiAoKHUxNikobGUxNl90b19jcHUodGNsaWVudC0+c3RhdHNfY291bnRlcikgKyAxKSAhPQotCQkJCQkJCWJwLT5zdGF0c19jb3VudGVyKSB7Ci0JCURQKEJOWDJYX01TR19TVEFUUywgInN0YXRzIG5vdCB1cGRhdGVkIGJ5IHRzdG9ybSIKLQkJICAgIiAgdHN0b3JtIGNvdW50ZXIgKCVkKSAhPSBzdGF0c19jb3VudGVyICglZClcbiIsCi0JCSAgIHRjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGJwLT5zdGF0c19jb3VudGVyKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlpZiAoKHUxNikobGUxNl90b19jcHUoeGNsaWVudC0+c3RhdHNfY291bnRlcikgKyAxKSAhPQotCQkJCQkJCWJwLT5zdGF0c19jb3VudGVyKSB7Ci0JCURQKEJOWDJYX01TR19TVEFUUywgInN0YXRzIG5vdCB1cGRhdGVkIGJ5IHhzdG9ybSIKLQkJICAgIiAgeHN0b3JtIGNvdW50ZXIgKCVkKSAhPSBzdGF0c19jb3VudGVyICglZClcbiIsCi0JCSAgIHhjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGJwLT5zdGF0c19jb3VudGVyKTsKLQkJcmV0dXJuIC0yOwotCX0KKwltZW1zZXQoJihmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwgMCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpIC0gMipzaXplb2YodTMyKSk7CisJZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSA9IDA7CisJZXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9sbyA9IDA7CisJZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSA9IDA7CisJZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19sbyA9IDA7CisJZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGkgPSAwOworCWVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2xvID0gMDsKIAotCWZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkgPQotCWZzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGkgPQorCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCQlpbnQgY2xfaWQgPSBmcC0+Y2xfaWQ7CisJCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqdGNsaWVudCA9CisJCQkJJnN0YXRzLT50c3Rvcm1fY29tbW9uLmNsaWVudF9zdGF0aXN0aWNzW2NsX2lkXTsKKwkJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdGNsaWVudCA9ICZmcC0+b2xkX3RjbGllbnQ7CisJCXN0cnVjdCB1c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqdWNsaWVudCA9CisJCQkJJnN0YXRzLT51c3Rvcm1fY29tbW9uLmNsaWVudF9zdGF0aXN0aWNzW2NsX2lkXTsKKwkJc3RydWN0IHVzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdWNsaWVudCA9ICZmcC0+b2xkX3VjbGllbnQ7CisJCXN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqeGNsaWVudCA9CisJCQkJJnN0YXRzLT54c3Rvcm1fY29tbW9uLmNsaWVudF9zdGF0aXN0aWNzW2NsX2lkXTsKKwkJc3RydWN0IHhzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfeGNsaWVudCA9ICZmcC0+b2xkX3hjbGllbnQ7CisJCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyAqcXN0YXRzID0gJmZwLT5ldGhfcV9zdGF0czsKKwkJdTMyIGRpZmY7CisKKwkJLyogYXJlIHN0b3JtIHN0YXRzIHZhbGlkPyAqLworCQlpZiAoKHUxNikobGUxNl90b19jcHUoeGNsaWVudC0+c3RhdHNfY291bnRlcikgKyAxKSAhPQorCQkJCQkJCWJwLT5zdGF0c19jb3VudGVyKSB7CisJCQlEUChCTlgyWF9NU0dfU1RBVFMsICJbJWRdIHN0YXRzIG5vdCB1cGRhdGVkIGJ5IHhzdG9ybSIKKwkJCSAgICIgIHhzdG9ybSBjb3VudGVyICglZCkgIT0gc3RhdHNfY291bnRlciAoJWQpXG4iLAorCQkJICAgaSwgeGNsaWVudC0+c3RhdHNfY291bnRlciwgYnAtPnN0YXRzX2NvdW50ZXIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICgodTE2KShsZTE2X3RvX2NwdSh0Y2xpZW50LT5zdGF0c19jb3VudGVyKSArIDEpICE9CisJCQkJCQkJYnAtPnN0YXRzX2NvdW50ZXIpIHsKKwkJCURQKEJOWDJYX01TR19TVEFUUywgIlslZF0gc3RhdHMgbm90IHVwZGF0ZWQgYnkgdHN0b3JtIgorCQkJICAgIiAgdHN0b3JtIGNvdW50ZXIgKCVkKSAhPSBzdGF0c19jb3VudGVyICglZClcbiIsCisJCQkgICBpLCB0Y2xpZW50LT5zdGF0c19jb3VudGVyLCBicC0+c3RhdHNfY291bnRlcik7CisJCQlyZXR1cm4gLTI7CisJCX0KKwkJaWYgKCh1MTYpKGxlMTZfdG9fY3B1KHVjbGllbnQtPnN0YXRzX2NvdW50ZXIpICsgMSkgIT0KKwkJCQkJCQlicC0+c3RhdHNfY291bnRlcikgeworCQkJRFAoQk5YMlhfTVNHX1NUQVRTLCAiWyVkXSBzdGF0cyBub3QgdXBkYXRlZCBieSB1c3Rvcm0iCisJCQkgICAiICB1c3Rvcm0gY291bnRlciAoJWQpICE9IHN0YXRzX2NvdW50ZXIgKCVkKVxuIiwKKwkJCSAgIGksIHVjbGllbnQtPnN0YXRzX2NvdW50ZXIsIGJwLT5zdGF0c19jb3VudGVyKTsKKwkJCXJldHVybiAtNDsKKwkJfQorCisJCXFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkgPQorCQlxc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpID0KIAkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT50b3RhbF9yY3ZfYnl0ZXMuaGkpOwotCWZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8gPQotCWZzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG8gPQorCQlxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvID0KKwkJcXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9sbyA9CiAJCQkJbGUzMl90b19jcHUodGNsaWVudC0+dG90YWxfcmN2X2J5dGVzLmxvKTsKIAotCWVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfaGkgPQorCQlxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpID0KIAkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfZXJyb3JfYnl0ZXMuaGkpOwotCWVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8gPQorCQlxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvID0KIAkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfZXJyb3JfYnl0ZXMubG8pOworCisJCUFERF82NChxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvKTsKKworCQlVUERBVEVfRVhURU5EX1RTVEFUKHJjdl91bmljYXN0X3BrdHMsCisJCQkJCXRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZCk7CisJCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X211bHRpY2FzdF9wa3RzLAorCQkJCQl0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZCk7CisJCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X2Jyb2FkY2FzdF9wa3RzLAorCQkJCQl0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZCk7CisJCVVQREFURV9FWFRFTkRfVFNUQVQocGFja2V0c190b29fYmlnX2Rpc2NhcmQsCisJCQkJCWV0aGVyc3RhdHNvdmVycnNpemVwa3RzKTsKKwkJVVBEQVRFX0VYVEVORF9UU1RBVChub19idWZmX2Rpc2NhcmQsIG5vX2J1ZmZfZGlzY2FyZCk7CisKKwkJU1VCX0VYVEVORF9VU1RBVCh1Y2FzdF9ub19idWZmX3BrdHMsCisJCQkJCXRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZCk7CisJCVNVQl9FWFRFTkRfVVNUQVQobWNhc3Rfbm9fYnVmZl9wa3RzLAorCQkJCQl0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZCk7CisJCVNVQl9FWFRFTkRfVVNUQVQoYmNhc3Rfbm9fYnVmZl9wa3RzLAorCQkJCQl0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZCk7CisJCVVQREFURV9FWFRFTkRfVVNUQVQodWNhc3Rfbm9fYnVmZl9wa3RzLCBub19idWZmX2Rpc2NhcmQpOworCQlVUERBVEVfRVhURU5EX1VTVEFUKG1jYXN0X25vX2J1ZmZfcGt0cywgbm9fYnVmZl9kaXNjYXJkKTsKKwkJVVBEQVRFX0VYVEVORF9VU1RBVChiY2FzdF9ub19idWZmX3BrdHMsIG5vX2J1ZmZfZGlzY2FyZCk7CisKKwkJcXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSA9CisJCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dG90YWxfc2VudF9ieXRlcy5oaSk7CisJCXFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfbG8gPQorCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnRvdGFsX3NlbnRfYnl0ZXMubG8pOworCisJCVVQREFURV9FWFRFTkRfWFNUQVQodW5pY2FzdF9wa3RzX3NlbnQsCisJCQkJCXRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7CisJCVVQREFURV9FWFRFTkRfWFNUQVQobXVsdGljYXN0X3BrdHNfc2VudCwKKwkJCQkJdG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOworCQlVUERBVEVfRVhURU5EX1hTVEFUKGJyb2FkY2FzdF9wa3RzX3NlbnQsCisJCQkJCXRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKKworCQlvbGRfdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCA9IHRjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQ7CisJCW9sZF90Y2xpZW50LT50dGwwX2Rpc2NhcmQgPSB0Y2xpZW50LT50dGwwX2Rpc2NhcmQ7CisKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgZnN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8pOworCQlBRERfNjQoZnN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIHFzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGksCisJCSAgICAgICBmc3RhdHMtPnRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9sbyk7CisJCUFERF82NChmc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpLAorCQkgICAgICAgcXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSwKKwkJICAgICAgIGZzdGF0cy0+dG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPnRvdGFsX2Jyb2FkY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2xvKTsKKwkJQUREXzY0KGZzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfaGksCisJCSAgICAgICBxc3RhdHMtPnZhbGlkX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgZnN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9sbywKKwkJICAgICAgIHFzdGF0cy0+dmFsaWRfYnl0ZXNfcmVjZWl2ZWRfbG8pOworCisJCUFERF82NChlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAorCQkgICAgICAgcXN0YXRzLT5lcnJvcl9ieXRlc19yZWNlaXZlZF9oaSwKKwkJICAgICAgIGVzdGF0cy0+ZXJyb3JfYnl0ZXNfcmVjZWl2ZWRfbG8sCisJCSAgICAgICBxc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvKTsKKwkJQUREXzY0KGVzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGksCisJCSAgICAgICBxc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpLAorCQkgICAgICAgZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19sbywKKwkJICAgICAgIHFzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfbG8pOworCQlBRERfNjQoZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGksIHFzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2hpLAorCQkgICAgICAgZXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfbG8sIHFzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2xvKTsKKwl9CisKKwlBRERfNjQoZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9oaSwKKwkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19oaSwKKwkgICAgICAgZnN0YXRzLT50b3RhbF9ieXRlc19yZWNlaXZlZF9sbywKKwkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2lmaGNpbmJhZG9jdGV0c19sbyk7CisKKwltZW1jcHkoZXN0YXRzLCAmKGZzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3RfZnVuY19zdGF0cykgLSAyKnNpemVvZih1MzIpKTsKKworCUFERF82NChlc3RhdHMtPmV0aGVyc3RhdHNvdmVycnNpemVwa3RzX2hpLAorCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzZnJhbWVzdG9vbG9uZ19oaSwKKwkgICAgICAgZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19sbywKKwkgICAgICAgZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2ZyYW1lc3Rvb2xvbmdfbG8pOwogCUFERF82NChlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAogCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2hpLAogCSAgICAgICBlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvLAogCSAgICAgICBlc3RhdHMtPnJ4X3N0YXRfaWZoY2luYmFkb2N0ZXRzX2xvKTsKIAotCUFERF82NChmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpLAotCSAgICAgICBlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2hpLAotCSAgICAgICBmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2xvLAotCSAgICAgICBlc3RhdHMtPmVycm9yX2J5dGVzX3JlY2VpdmVkX2xvKTsKLQotCVVQREFURV9FWFRFTkRfVFNUQVQocmN2X3VuaWNhc3RfcGt0cywgdG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkKTsKLQlVUERBVEVfRVhURU5EX1RTVEFUKHJjdl9tdWx0aWNhc3RfcGt0cywKLQkJCQl0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZCk7Ci0JVVBEQVRFX0VYVEVORF9UU1RBVChyY3ZfYnJvYWRjYXN0X3BrdHMsCi0JCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWQpOwotCi0JZnN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dG90YWxfc2VudF9ieXRlcy5oaSk7Ci0JZnN0YXRzLT50b3RhbF9ieXRlc190cmFuc21pdHRlZF9sbyA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dG90YWxfc2VudF9ieXRlcy5sbyk7Ci0KLQlVUERBVEVfRVhURU5EX1hTVEFUKHVuaWNhc3RfcGt0c19zZW50LAotCQkJCXRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZCk7Ci0JVVBEQVRFX0VYVEVORF9YU1RBVChtdWx0aWNhc3RfcGt0c19zZW50LAotCQkJCXRvdGFsX211bHRpY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkKTsKLQlVUERBVEVfRVhURU5EX1hTVEFUKGJyb2FkY2FzdF9wa3RzX3NlbnQsCi0JCQkJdG90YWxfYnJvYWRjYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWQpOwotCi0JbWVtY3B5KGVzdGF0cywgJihmc3RhdHMtPnRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBob3N0X2Z1bmNfc3RhdHMpIC0gMipzaXplb2YodTMyKSk7Ci0KLQllc3RhdHMtPm1hY19maWx0ZXJfZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRwb3J0LT5tYWNfZmlsdGVyX2Rpc2NhcmQpOwotCWVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkID0gbGUzMl90b19jcHUodHBvcnQtPnh4b3ZlcmZsb3dfZGlzY2FyZCk7Ci0JZXN0YXRzLT5icmJfdHJ1bmNhdGVfZGlzY2FyZCA9CisJaWYgKGJwLT5wb3J0LnBtZikgeworCQllc3RhdHMtPm1hY19maWx0ZXJfZGlzY2FyZCA9CisJCQkJbGUzMl90b19jcHUodHBvcnQtPm1hY19maWx0ZXJfZGlzY2FyZCk7CisJCWVzdGF0cy0+eHhvdmVyZmxvd19kaXNjYXJkID0KKwkJCQlsZTMyX3RvX2NwdSh0cG9ydC0+eHhvdmVyZmxvd19kaXNjYXJkKTsKKwkJZXN0YXRzLT5icmJfdHJ1bmNhdGVfZGlzY2FyZCA9CiAJCQkJbGUzMl90b19jcHUodHBvcnQtPmJyYl90cnVuY2F0ZV9kaXNjYXJkKTsKLQllc3RhdHMtPm1hY19kaXNjYXJkID0gbGUzMl90b19jcHUodHBvcnQtPm1hY19kaXNjYXJkKTsKLQotCW9sZF90Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5oaSA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X3VuaWNhc3RfYnl0ZXMuaGkpOwotCW9sZF90Y2xpZW50LT5yY3ZfdW5pY2FzdF9ieXRlcy5sbyA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X3VuaWNhc3RfYnl0ZXMubG8pOwotCW9sZF90Y2xpZW50LT5yY3ZfYnJvYWRjYXN0X2J5dGVzLmhpID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfYnJvYWRjYXN0X2J5dGVzLmhpKTsKLQlvbGRfdGNsaWVudC0+cmN2X2Jyb2FkY2FzdF9ieXRlcy5sbyA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cmN2X2Jyb2FkY2FzdF9ieXRlcy5sbyk7Ci0Jb2xkX3RjbGllbnQtPnJjdl9tdWx0aWNhc3RfYnl0ZXMuaGkgPQotCQkJCWxlMzJfdG9fY3B1KHRjbGllbnQtPnJjdl9tdWx0aWNhc3RfYnl0ZXMuaGkpOwotCW9sZF90Y2xpZW50LT5yY3ZfbXVsdGljYXN0X2J5dGVzLmxvID0KLQkJCQlsZTMyX3RvX2NwdSh0Y2xpZW50LT5yY3ZfbXVsdGljYXN0X2J5dGVzLmxvKTsKLQlvbGRfdGNsaWVudC0+dG90YWxfcmN2X3BrdHMgPSBsZTMyX3RvX2NwdSh0Y2xpZW50LT50b3RhbF9yY3ZfcGt0cyk7Ci0KLQlvbGRfdGNsaWVudC0+Y2hlY2tzdW1fZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQpOwotCW9sZF90Y2xpZW50LT5wYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCA9Ci0JCQkJbGUzMl90b19jcHUodGNsaWVudC0+cGFja2V0c190b29fYmlnX2Rpc2NhcmQpOwotCWVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkID0KLQlvbGRfdGNsaWVudC0+bm9fYnVmZl9kaXNjYXJkID0gbGUzMl90b19jcHUodGNsaWVudC0+bm9fYnVmZl9kaXNjYXJkKTsKLQlvbGRfdGNsaWVudC0+dHRsMF9kaXNjYXJkID0gbGUzMl90b19jcHUodGNsaWVudC0+dHRsMF9kaXNjYXJkKTsKLQotCW9sZF94Y2xpZW50LT50b3RhbF9zZW50X3BrdHMgPSBsZTMyX3RvX2NwdSh4Y2xpZW50LT50b3RhbF9zZW50X3BrdHMpOwotCW9sZF94Y2xpZW50LT51bmljYXN0X2J5dGVzX3NlbnQuaGkgPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5oaSk7Ci0Jb2xkX3hjbGllbnQtPnVuaWNhc3RfYnl0ZXNfc2VudC5sbyA9Ci0JCQkJbGUzMl90b19jcHUoeGNsaWVudC0+dW5pY2FzdF9ieXRlc19zZW50LmxvKTsKLQlvbGRfeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQuaGkgPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPm11bHRpY2FzdF9ieXRlc19zZW50LmhpKTsKLQlvbGRfeGNsaWVudC0+bXVsdGljYXN0X2J5dGVzX3NlbnQubG8gPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPm11bHRpY2FzdF9ieXRlc19zZW50LmxvKTsKLQlvbGRfeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQuaGkgPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPmJyb2FkY2FzdF9ieXRlc19zZW50LmhpKTsKLQlvbGRfeGNsaWVudC0+YnJvYWRjYXN0X2J5dGVzX3NlbnQubG8gPQotCQkJCWxlMzJfdG9fY3B1KHhjbGllbnQtPmJyb2FkY2FzdF9ieXRlc19zZW50LmxvKTsKKwkJZXN0YXRzLT5tYWNfZGlzY2FyZCA9IGxlMzJfdG9fY3B1KHRwb3J0LT5tYWNfZGlzY2FyZCk7CisJfQogCiAJZnN0YXRzLT5ob3N0X2Z1bmNfc3RhdHNfc3RhcnQgPSArK2ZzdGF0cy0+aG9zdF9mdW5jX3N0YXRzX2VuZDsKIAorCWJwLT5zdGF0c19wZW5kaW5nID0gMDsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9uZXRfc3RhdHNfdXBkYXRlKHN0cnVjdCBibngyeCAqYnApCiB7Ci0Jc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdGNsaWVudCA9ICZicC0+b2xkX3RjbGllbnQ7CiAJc3RydWN0IGJueDJ4X2V0aF9zdGF0cyAqZXN0YXRzID0gJmJwLT5ldGhfc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5zdGF0cyA9ICZicC0+ZGV2LT5zdGF0czsKKwlpbnQgaTsKIAogCW5zdGF0cy0+cnhfcGFja2V0cyA9CiAJCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSArCkBAIC0zNzMzLDM0ICszOTA2LDMzIEBACiAJCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpICsKIAkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9icm9hZGNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSk7CiAKLQluc3RhdHMtPnJ4X2J5dGVzID0gYm54MnhfaGlsbygmZXN0YXRzLT52YWxpZF9ieXRlc19yZWNlaXZlZF9oaSk7CisJbnN0YXRzLT5yeF9ieXRlcyA9IGJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpOwogCiAJbnN0YXRzLT50eF9ieXRlcyA9IGJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkpOwogCi0JbnN0YXRzLT5yeF9kcm9wcGVkID0gb2xkX3RjbGllbnQtPmNoZWNrc3VtX2Rpc2NhcmQgKwotCQkJICAgICBlc3RhdHMtPm1hY19kaXNjYXJkOworCW5zdGF0cy0+cnhfZHJvcHBlZCA9IGVzdGF0cy0+bWFjX2Rpc2NhcmQ7CisJZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJCW5zdGF0cy0+cnhfZHJvcHBlZCArPQorCQkJbGUzMl90b19jcHUoYnAtPmZwW2ldLm9sZF90Y2xpZW50LmNoZWNrc3VtX2Rpc2NhcmQpOworCiAJbnN0YXRzLT50eF9kcm9wcGVkID0gMDsKIAogCW5zdGF0cy0+bXVsdGljYXN0ID0KLQkJYm54MnhfaGlsbygmZXN0YXRzLT50b3RhbF9tdWx0aWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSk7CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+dG90YWxfbXVsdGljYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpOwogCiAJbnN0YXRzLT5jb2xsaXNpb25zID0KLQkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNzaW5nbGVjb2xsaXNpb25mcmFtZXNfbG8gKwotCQkJZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzX2xvICsKLQkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNsYXRlY29sbGlzaW9uc19sbyArCi0JCQllc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19sbzsKLQotCWVzdGF0cy0+amFiYmVyX3BhY2tldHNfcmVjZWl2ZWQgPQotCQkJCW9sZF90Y2xpZW50LT5wYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCArCi0JCQkJZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2ZyYW1lc3Rvb2xvbmdfbG87CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+dHhfc3RhdF9ldGhlcnN0YXRzY29sbGlzaW9uc19oaSk7CiAKIAluc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgPQotCQkJCWVzdGF0cy0+cnhfc3RhdF9ldGhlcnN0YXRzdW5kZXJzaXplcGt0c19sbyArCi0JCQkJZXN0YXRzLT5qYWJiZXJfcGFja2V0c19yZWNlaXZlZDsKLQluc3RhdHMtPnJ4X292ZXJfZXJyb3JzID0gZXN0YXRzLT5icmJfZHJvcF9sbyArIGVzdGF0cy0+YnJiX3RydW5jYXRlX2xvOwotCW5zdGF0cy0+cnhfY3JjX2Vycm9ycyA9IGVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNmY3NlcnJvcnNfbG87Ci0JbnN0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPSBlc3RhdHMtPnJ4X3N0YXRfZG90M3N0YXRzYWxpZ25tZW50ZXJyb3JzX2xvOwotCW5zdGF0cy0+cnhfZmlmb19lcnJvcnMgPSBvbGRfdGNsaWVudC0+bm9fYnVmZl9kaXNjYXJkOworCQlibngyeF9oaWxvKCZlc3RhdHMtPnJ4X3N0YXRfZXRoZXJzdGF0c3VuZGVyc2l6ZXBrdHNfaGkpICsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT5ldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSk7CisJbnN0YXRzLT5yeF9vdmVyX2Vycm9ycyA9IGJueDJ4X2hpbG8oJmVzdGF0cy0+YnJiX2Ryb3BfaGkpICsKKwkJCQkgYm54MnhfaGlsbygmZXN0YXRzLT5icmJfdHJ1bmNhdGVfaGkpOworCW5zdGF0cy0+cnhfY3JjX2Vycm9ycyA9CisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+cnhfc3RhdF9kb3Qzc3RhdHNmY3NlcnJvcnNfaGkpOworCW5zdGF0cy0+cnhfZnJhbWVfZXJyb3JzID0KKwkJYm54MnhfaGlsbygmZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2FsaWdubWVudGVycm9yc19oaSk7CisJbnN0YXRzLT5yeF9maWZvX2Vycm9ycyA9IGJueDJ4X2hpbG8oJmVzdGF0cy0+bm9fYnVmZl9kaXNjYXJkX2hpKTsKIAluc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPSBlc3RhdHMtPnh4b3ZlcmZsb3dfZGlzY2FyZDsKIAogCW5zdGF0cy0+cnhfZXJyb3JzID0gbnN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzICsKQEAgLTM3NzEsNDYgKzM5NDMsNjEgQEAKIAkJCSAgICBuc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnM7CiAKIAluc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzID0KLQkJCWVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNsYXRlY29sbGlzaW9uc19sbyArCi0JCQllc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzZXhjZXNzaXZlY29sbGlzaW9uc19sbzsKLQluc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzID0gZXN0YXRzLT5yeF9zdGF0X2ZhbHNlY2FycmllcmVycm9yc19sbzsKKwkJYm54MnhfaGlsbygmZXN0YXRzLT50eF9zdGF0X2RvdDNzdGF0c2xhdGVjb2xsaXNpb25zX2hpKSArCisJCWJueDJ4X2hpbG8oJmVzdGF0cy0+dHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2hpKTsKKwluc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzID0KKwkJYm54MnhfaGlsbygmZXN0YXRzLT5yeF9zdGF0X2RvdDNzdGF0c2NhcnJpZXJzZW5zZWVycm9yc19oaSk7CiAJbnN0YXRzLT50eF9maWZvX2Vycm9ycyA9IDA7CiAJbnN0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzID0gMDsKIAluc3RhdHMtPnR4X3dpbmRvd19lcnJvcnMgPSAwOwogCiAJbnN0YXRzLT50eF9lcnJvcnMgPSBuc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzICsKLQkJCSAgICBuc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzOworCQkJICAgIG5zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgKworCSAgICBibngyeF9oaWxvKCZlc3RhdHMtPnR4X3N0YXRfZG90M3N0YXRzaW50ZXJuYWxtYWN0cmFuc21pdGVycm9yc19oaSk7Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X2Rydl9zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKK3sKKwlzdHJ1Y3QgYm54MnhfZXRoX3N0YXRzICplc3RhdHMgPSAmYnAtPmV0aF9zdGF0czsKKwlpbnQgaTsKKworCWVzdGF0cy0+ZHJpdmVyX3hvZmYgPSAwOworCWVzdGF0cy0+cnhfZXJyX2Rpc2NhcmRfcGt0ID0gMDsKKwllc3RhdHMtPnJ4X3NrYl9hbGxvY19mYWlsZWQgPSAwOworCWVzdGF0cy0+aHdfY3N1bV9lcnIgPSAwOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyAqcXN0YXRzID0gJmJwLT5mcFtpXS5ldGhfcV9zdGF0czsKKworCQllc3RhdHMtPmRyaXZlcl94b2ZmICs9IHFzdGF0cy0+ZHJpdmVyX3hvZmY7CisJCWVzdGF0cy0+cnhfZXJyX2Rpc2NhcmRfcGt0ICs9IHFzdGF0cy0+cnhfZXJyX2Rpc2NhcmRfcGt0OworCQllc3RhdHMtPnJ4X3NrYl9hbGxvY19mYWlsZWQgKz0gcXN0YXRzLT5yeF9za2JfYWxsb2NfZmFpbGVkOworCQllc3RhdHMtPmh3X2NzdW1fZXJyICs9IHFzdGF0cy0+aHdfY3N1bV9lcnI7CisJfQogfQogCiBzdGF0aWMgdm9pZCBibngyeF9zdGF0c191cGRhdGUoc3RydWN0IGJueDJ4ICpicCkKIHsKIAl1MzIgKnN0YXRzX2NvbXAgPSBibngyeF9zcChicCwgc3RhdHNfY29tcCk7Ci0JaW50IHVwZGF0ZSA9IDA7CiAKIAlpZiAoKnN0YXRzX2NvbXAgIT0gRE1BRV9DT01QX1ZBTCkKIAkJcmV0dXJuOwogCiAJaWYgKGJwLT5wb3J0LnBtZikKLQkJdXBkYXRlID0gKGJueDJ4X2h3X3N0YXRzX3VwZGF0ZShicCkgPT0gMCk7CisJCWJueDJ4X2h3X3N0YXRzX3VwZGF0ZShicCk7CiAKLQl1cGRhdGUgfD0gKGJueDJ4X3N0b3JtX3N0YXRzX3VwZGF0ZShicCkgPT0gMCk7Ci0KLQlpZiAodXBkYXRlKQotCQlibngyeF9uZXRfc3RhdHNfdXBkYXRlKGJwKTsKLQotCWVsc2UgewotCQlpZiAoYnAtPnN0YXRzX3BlbmRpbmcpIHsKLQkJCWJwLT5zdGF0c19wZW5kaW5nKys7Ci0JCQlpZiAoYnAtPnN0YXRzX3BlbmRpbmcgPT0gMykgewotCQkJCUJOWDJYX0VSUigic3RhdHMgbm90IHVwZGF0ZWQgZm9yIDMgdGltZXNcbiIpOwotCQkJCWJueDJ4X3BhbmljKCk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9CisJaWYgKGJueDJ4X3N0b3JtX3N0YXRzX3VwZGF0ZShicCkgJiYgKGJwLT5zdGF0c19wZW5kaW5nKysgPT0gMykpIHsKKwkJQk5YMlhfRVJSKCJzdG9ybSBzdGF0cyB3ZXJlIG5vdCB1cGRhdGVkIGZvciAzIHRpbWVzXG4iKTsKKwkJYm54MnhfcGFuaWMoKTsKKwkJcmV0dXJuOwogCX0KIAorCWJueDJ4X25ldF9zdGF0c191cGRhdGUoYnApOworCWJueDJ4X2Rydl9zdGF0c191cGRhdGUoYnApOworCiAJaWYgKGJwLT5tc2dsZXZlbCAmIE5FVElGX01TR19USU1FUikgewotCQlzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMgKm9sZF90Y2xpZW50ID0gJmJwLT5vbGRfdGNsaWVudDsKKwkJc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzICpvbGRfdGNsaWVudCA9CisJCQkJCQkJJmJwLT5mcC0+b2xkX3RjbGllbnQ7CisJCXN0cnVjdCBibngyeF9ldGhfcV9zdGF0cyAqcXN0YXRzID0gJmJwLT5mcC0+ZXRoX3Ffc3RhdHM7CiAJCXN0cnVjdCBibngyeF9ldGhfc3RhdHMgKmVzdGF0cyA9ICZicC0+ZXRoX3N0YXRzOwogCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnN0YXRzID0gJmJwLT5kZXYtPnN0YXRzOwogCQlpbnQgaTsKQEAgLTM4MjUsMjAgKzQwMTIsMjIgQEAKIAkJICAgICAgICh1MTYpKGxlMTZfdG9fY3B1KCpicC0+ZnAtPnJ4X2NvbnNfc2IpIC0KIAkJCSAgICAgYnAtPmZwLT5yeF9jb21wX2NvbnMpLAogCQkgICAgICAgbGUxNl90b19jcHUoKmJwLT5mcC0+cnhfY29uc19zYiksIG5zdGF0cy0+cnhfcGFja2V0cyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgICVzIChYb2ZmIGV2ZW50cyAldSkgIGJyYiBkcm9wcyAldVxuIiwKLQkJICAgICAgIG5ldGlmX3F1ZXVlX3N0b3BwZWQoYnAtPmRldikgPyAiWG9mZiIgOiAiWG9uIiwKLQkJICAgICAgIGVzdGF0cy0+ZHJpdmVyX3hvZmYsIGVzdGF0cy0+YnJiX2Ryb3BfbG8pOworCQlwcmludGsoS0VSTl9ERUJVRyAiICAlcyAoWG9mZiBldmVudHMgJXUpICBicmIgZHJvcHMgJXUgICIKKwkJCQkgICJicmIgdHJ1bmNhdGUgJXVcbiIsCisJCSAgICAgICAobmV0aWZfcXVldWVfc3RvcHBlZChicC0+ZGV2KSA/ICJYb2ZmIiA6ICJYb24iKSwKKwkJICAgICAgIHFzdGF0cy0+ZHJpdmVyX3hvZmYsCisJCSAgICAgICBlc3RhdHMtPmJyYl9kcm9wX2xvLCBlc3RhdHMtPmJyYl90cnVuY2F0ZV9sbyk7CiAJCXByaW50ayhLRVJOX0RFQlVHICJ0c3RhdHM6IGNoZWNrc3VtX2Rpc2NhcmQgJXUgICIKLQkJCSJwYWNrZXRzX3Rvb19iaWdfZGlzY2FyZCAldSAgbm9fYnVmZl9kaXNjYXJkICV1ICAiCisJCQkicGFja2V0c190b29fYmlnX2Rpc2NhcmQgJWx1ICBub19idWZmX2Rpc2NhcmQgJWx1ICAiCiAJCQkibWFjX2Rpc2NhcmQgJXUgIG1hY19maWx0ZXJfZGlzY2FyZCAldSAgIgogCQkJInh4b3ZyZmxvd19kaXNjYXJkICV1ICBicmJfdHJ1bmNhdGVfZGlzY2FyZCAldSAgIgogCQkJInR0bDBfZGlzY2FyZCAldVxuIiwKLQkJICAgICAgIG9sZF90Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkLAotCQkgICAgICAgb2xkX3RjbGllbnQtPnBhY2tldHNfdG9vX2JpZ19kaXNjYXJkLAotCQkgICAgICAgb2xkX3RjbGllbnQtPm5vX2J1ZmZfZGlzY2FyZCwgZXN0YXRzLT5tYWNfZGlzY2FyZCwKLQkJICAgICAgIGVzdGF0cy0+bWFjX2ZpbHRlcl9kaXNjYXJkLCBlc3RhdHMtPnh4b3ZlcmZsb3dfZGlzY2FyZCwKLQkJICAgICAgIGVzdGF0cy0+YnJiX3RydW5jYXRlX2Rpc2NhcmQsCi0JCSAgICAgICBvbGRfdGNsaWVudC0+dHRsMF9kaXNjYXJkKTsKKwkJICAgICAgIGxlMzJfdG9fY3B1KG9sZF90Y2xpZW50LT5jaGVja3N1bV9kaXNjYXJkKSwKKwkJICAgICAgIGJueDJ4X2hpbG8oJnFzdGF0cy0+ZXRoZXJzdGF0c292ZXJyc2l6ZXBrdHNfaGkpLAorCQkgICAgICAgYm54MnhfaGlsbygmcXN0YXRzLT5ub19idWZmX2Rpc2NhcmRfaGkpLAorCQkgICAgICAgZXN0YXRzLT5tYWNfZGlzY2FyZCwgZXN0YXRzLT5tYWNfZmlsdGVyX2Rpc2NhcmQsCisJCSAgICAgICBlc3RhdHMtPnh4b3ZlcmZsb3dfZGlzY2FyZCwgZXN0YXRzLT5icmJfdHJ1bmNhdGVfZGlzY2FyZCwKKwkJICAgICAgIGxlMzJfdG9fY3B1KG9sZF90Y2xpZW50LT50dGwwX2Rpc2NhcmQpKTsKIAogCQlmb3JfZWFjaF9xdWV1ZShicCwgaSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIlslZF06ICVsdVx0JWx1XHQlbHVcbiIsIGksCkBAIC0zOTg3LDcgKzQxNzYsNyBAQAogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFswXTsKIAkJaW50IHJjOwogCi0JCWJueDJ4X3R4X2ludChmcCwgMTAwMCk7CisJCWJueDJ4X3R4X2ludChmcCk7CiAJCXJjID0gYm54MnhfcnhfaW50KGZwLCAxMDAwKTsKIAl9CiAKQEAgLTQyMzksMTAgKzQ0MjgsNiBAQAogCQkJIFVTVE9STV9TQl9IQ19ESVNBQkxFX09GRlNFVChwb3J0LCBzYl9pZCwKIAkJCQkJCSAgICAgVV9TQl9FVEhfUlhfQ1FfSU5ERVgpLAogCQkJIGJwLT5yeF90aWNrcyA/IDAgOiAxKTsKLQkJUkVHX1dSMTYoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCQkgVVNUT1JNX1NCX0hDX0RJU0FCTEVfT0ZGU0VUKHBvcnQsIHNiX2lkLAotCQkJCQkJICAgICBVX1NCX0VUSF9SWF9CRF9JTkRFWCksCi0JCQkgYnAtPnJ4X3RpY2tzID8gMCA6IDEpOwogCiAJCS8qIEhDX0lOREVYX0NfRVRIX1RYX0NRX0NPTlMgKi8KIAkJUkVHX1dSOChicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsKQEAgLTQyNzMsOCArNDQ1OCw3IEBACiAJCWlmIChmcC0+dHBhX3N0YXRlW2ldID09IEJOWDJYX1RQQV9TVEFSVCkKIAkJCXBjaV91bm1hcF9zaW5nbGUoYnAtPnBkZXYsCiAJCQkJCSBwY2lfdW5tYXBfYWRkcihyeF9idWYsIG1hcHBpbmcpLAotCQkJCQkgYnAtPnJ4X2J1Zl9zaXplLAotCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJIGJwLT5yeF9idWZfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJ4X2J1Zi0+c2tiID0gTlVMTDsKQEAgLTQyODksMTYgKzQ0NzMsMTMgQEAKIAl1MTYgcmluZ19wcm9kLCBjcWVfcmluZ19wcm9kOwogCWludCBpLCBqOwogCi0JYnAtPnJ4X2J1Zl9zaXplID0gYnAtPmRldi0+bXR1OwotCWJwLT5yeF9idWZfc2l6ZSArPSBicC0+cnhfb2Zmc2V0ICsgRVRIX09WUkVIRUFEICsKLQkJQkNNX1JYX0VUSF9QQVlMT0FEX0FMSUdOOworCWJwLT5yeF9idWZfc2l6ZSA9IGJwLT5kZXYtPm10dSArIEVUSF9PVlJFSEVBRCArIEJOWDJYX1JYX0FMSUdOOworCURQKE5FVElGX01TR19JRlVQLAorCSAgICJtdHUgJWQgIHJ4X2J1Zl9zaXplICVkXG4iLCBicC0+ZGV2LT5tdHUsIGJwLT5yeF9idWZfc2l6ZSk7CiAKIAlpZiAoYnAtPmZsYWdzICYgVFBBX0VOQUJMRV9GTEFHKSB7Ci0JCURQKE5FVElGX01TR19JRlVQLAotCQkgICAicnhfYnVmX3NpemUgJWQgIGVmZmVjdGl2ZV9tdHUgJWRcbiIsCi0JCSAgIGJwLT5yeF9idWZfc2l6ZSwgYnAtPmRldi0+bXR1ICsgRVRIX09WUkVIRUFEKTsKIAotCQlmb3JfZWFjaF9xdWV1ZShicCwgaikgeworCQlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaikgewogCQkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbal07CiAKIAkJCWZvciAoaSA9IDA7IGkgPCBtYXhfYWdnX3F1ZXVlczsgaSsrKSB7CkBAIC00MzIxLDcgKzQ1MDIsNyBAQAogCQl9CiAJfQogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGopIHsKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaikgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtqXTsKIAogCQlmcC0+cnhfYmRfY29ucyA9IDA7CkBAIC00Mzk2LDggKzQ1NzcsOCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgYnAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKSB7CiAJCQlpZiAoYm54MnhfYWxsb2Nfcnhfc2tiKGJwLCBmcCwgcmluZ19wcm9kKSA8IDApIHsKIAkJCQlCTlgyWF9FUlIoIndhcyBvbmx5IGFibGUgdG8gYWxsb2NhdGUgIgotCQkJCQkgICIlZCByeCBza2JzXG4iLCBpKTsKLQkJCQlicC0+ZXRoX3N0YXRzLnJ4X3NrYl9hbGxvY19mYWlsZWQrKzsKKwkJCQkJICAiJWQgcnggc2ticyBvbiBxdWV1ZVslZF1cbiIsIGksIGopOworCQkJCWZwLT5ldGhfcV9zdGF0cy5yeF9za2JfYWxsb2NfZmFpbGVkKys7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlyaW5nX3Byb2QgPSBORVhUX1JYX0lEWChyaW5nX3Byb2QpOwpAQCAtNDQzMyw3ICs0NjE0LDcgQEAKIHsKIAlpbnQgaSwgajsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBqKSB7CisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGopIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbal07CiAKIAkJZm9yIChpID0gMTsgaSA8PSBOVU1fVFhfUklOR1M7IGkrKykgewpAQCAtNDQ4NiwyNyArNDY2NywyMCBAQAogCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CiAJCXN0cnVjdCBldGhfY29udGV4dCAqY29udGV4dCA9IGJueDJ4X3NwKGJwLCBjb250ZXh0W2ldLmV0aCk7CiAJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOwotCQl1OCBzYl9pZCA9IEZQX1NCX0lEKGZwKTsKLQotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC50eF9iZF9wYWdlX2Jhc2VfaGkgPQotCQkJCQkJVTY0X0hJKGZwLT50eF9kZXNjX21hcHBpbmcpOwotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC50eF9iZF9wYWdlX2Jhc2VfbG8gPQotCQkJCQkJVTY0X0xPKGZwLT50eF9kZXNjX21hcHBpbmcpOwotCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5kYl9kYXRhX2FkZHJfaGkgPQotCQkJCQkJVTY0X0hJKGZwLT50eF9wcm9kc19tYXBwaW5nKTsKLQkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuZGJfZGF0YV9hZGRyX2xvID0KLQkJCQkJCVU2NF9MTyhmcC0+dHhfcHJvZHNfbWFwcGluZyk7Ci0JCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnN0YXRpc3RpY3NfZGF0YSA9IChCUF9DTF9JRChicCkgfAotCQkJCVhTVE9STV9FVEhfU1RfQ09OVEVYVF9TVEFUSVNUSUNTX0VOQUJMRSk7CisJCXU4IGNsX2lkID0gZnAtPmNsX2lkOworCQl1OCBzYl9pZCA9IGZwLT5zYl9pZDsKIAogCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uc2JfaW5kZXhfbnVtYmVycyA9CiAJCQkJCQlCTlgyWF9SWF9TQl9JTkRFWF9OVU07Ci0JCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5jbGllbnRJZCA9IEZQX0NMX0lEKGZwKTsKKwkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmNsaWVudElkID0gY2xfaWQ7CiAJCWNvbnRleHQtPnVzdG9ybV9zdF9jb250ZXh0LmNvbW1vbi5zdGF0dXNfYmxvY2tfaWQgPSBzYl9pZDsKIAkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmZsYWdzID0KLQkJCVVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX01DX0FMSUdOTUVOVDsKLQkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLm1jX2FsaWdubWVudF9zaXplID0KLQkJCUJDTV9SWF9FVEhfUEFZTE9BRF9BTElHTjsKKwkJCShVU1RPUk1fRVRIX1NUX0NPTlRFWFRfQ09ORklHX0VOQUJMRV9NQ19BTElHTk1FTlQgfAorCQkJIFVTVE9STV9FVEhfU1RfQ09OVEVYVF9DT05GSUdfRU5BQkxFX1NUQVRJU1RJQ1MpOworCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uc3RhdGlzdGljc19jb3VudGVyX2lkID0KKwkJCQkJCWNsX2lkOworCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24ubWNfYWxpZ25tZW50X2xvZ19zaXplID0KKwkJCQkJCUJOWDJYX1JYX0FMSUdOX1NISUZUOwogCQljb250ZXh0LT51c3Rvcm1fc3RfY29udGV4dC5jb21tb24uYmRfYnVmZl9zaXplID0KIAkJCQkJCWJwLT5yeF9idWZfc2l6ZTsKIAkJY29udGV4dC0+dXN0b3JtX3N0X2NvbnRleHQuY29tbW9uLmJkX3BhZ2VfYmFzZV9oaSA9CkBAIC00NTI2LDYgKzQ3MDAsMjEgQEAKIAkJCQkJCVU2NF9MTyhmcC0+cnhfc2dlX21hcHBpbmcpOwogCQl9CiAKKwkJY29udGV4dC0+dXN0b3JtX2FnX2NvbnRleHQuY2R1X3VzYWdlID0KKwkJCUNEVV9SU1JWRF9WQUxVRV9UWVBFX0EoSFdfQ0lEKGJwLCBpKSwKKwkJCQkJICAgICAgIENEVV9SRUdJT05fTlVNQkVSX1VDTV9BRywKKwkJCQkJICAgICAgIEVUSF9DT05ORUNUSU9OX1RZUEUpOworCisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9oaSA9CisJCQkJCQlVNjRfSEkoZnAtPnR4X2Rlc2NfbWFwcGluZyk7CisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LnR4X2JkX3BhZ2VfYmFzZV9sbyA9CisJCQkJCQlVNjRfTE8oZnAtPnR4X2Rlc2NfbWFwcGluZyk7CisJCWNvbnRleHQtPnhzdG9ybV9zdF9jb250ZXh0LmRiX2RhdGFfYWRkcl9oaSA9CisJCQkJCQlVNjRfSEkoZnAtPnR4X3Byb2RzX21hcHBpbmcpOworCQljb250ZXh0LT54c3Rvcm1fc3RfY29udGV4dC5kYl9kYXRhX2FkZHJfbG8gPQorCQkJCQkJVTY0X0xPKGZwLT50eF9wcm9kc19tYXBwaW5nKTsKKwkJY29udGV4dC0+eHN0b3JtX3N0X2NvbnRleHQuc3RhdGlzdGljc19kYXRhID0gKGNsX2lkIHwKKwkJCQlYU1RPUk1fRVRIX1NUX0NPTlRFWFRfU1RBVElTVElDU19FTkFCTEUpOwogCQljb250ZXh0LT5jc3Rvcm1fc3RfY29udGV4dC5zYl9pbmRleF9udW1iZXIgPQogCQkJCQkJQ19TQl9FVEhfVFhfQ1FfSU5ERVg7CiAJCWNvbnRleHQtPmNzdG9ybV9zdF9jb250ZXh0LnN0YXR1c19ibG9ja19pZCA9IHNiX2lkOwpAQCAtNDUzNCwxMCArNDcyMyw2IEBACiAJCQlDRFVfUlNSVkRfVkFMVUVfVFlQRV9BKEhXX0NJRChicCwgaSksCiAJCQkJCSAgICAgICBDRFVfUkVHSU9OX05VTUJFUl9YQ01fQUcsCiAJCQkJCSAgICAgICBFVEhfQ09OTkVDVElPTl9UWVBFKTsKLQkJY29udGV4dC0+dXN0b3JtX2FnX2NvbnRleHQuY2R1X3VzYWdlID0KLQkJCUNEVV9SU1JWRF9WQUxVRV9UWVBFX0EoSFdfQ0lEKGJwLCBpKSwKLQkJCQkJICAgICAgIENEVV9SRUdJT05fTlVNQkVSX1VDTV9BRywKLQkJCQkJICAgICAgIEVUSF9DT05ORUNUSU9OX1RZUEUpOwogCX0KIH0KIApAQCAtNDU0NiwxNCArNDczMSwxNSBAQAogCWludCBmdW5jID0gQlBfRlVOQyhicCk7CiAJaW50IGk7CiAKLQlpZiAoIWlzX211bHRpKGJwKSkKKwlpZiAoYnAtPm11bHRpX21vZGUgPT0gRVRIX1JTU19NT0RFX0RJU0FCTEVEKQogCQlyZXR1cm47CiAKLQlEUChORVRJRl9NU0dfSUZVUCwgIkluaXRpYWxpemluZyBpbmRpcmVjdGlvbiB0YWJsZVxuIik7CisJRFAoTkVUSUZfTVNHX0lGVVAsCisJICAgIkluaXRpYWxpemluZyBpbmRpcmVjdGlvbiB0YWJsZSAgbXVsdGlfbW9kZSAlZFxuIiwgYnAtPm11bHRpX21vZGUpOwogCWZvciAoaSA9IDA7IGkgPCBUU1RPUk1fSU5ESVJFQ1RJT05fVEFCTEVfU0laRTsgaSsrKQogCQlSRUdfV1I4KGJwLCBCQVJfVFNUUk9STV9JTlRNRU0gKwogCQkJVFNUT1JNX0lORElSRUNUSU9OX1RBQkxFX09GRlNFVChmdW5jKSArIGksCi0JCQlCUF9DTF9JRChicCkgKyAoaSAlIGJwLT5udW1fcXVldWVzKSk7CisJCQlicC0+ZnAtPmNsX2lkICsgKGkgJSBicC0+bnVtX3J4X3F1ZXVlcykpOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9zZXRfY2xpZW50X2NvbmZpZyhzdHJ1Y3QgYm54MnggKmJwKQpAQCAtNDU2MywxMyArNDc0OSwxMyBAQAogCWludCBpOwogCiAJdHN0b3JtX2NsaWVudC5tdHUgPSBicC0+ZGV2LT5tdHU7Ci0JdHN0b3JtX2NsaWVudC5zdGF0aXN0aWNzX2NvdW50ZXJfaWQgPSBCUF9DTF9JRChicCk7CiAJdHN0b3JtX2NsaWVudC5jb25maWdfZmxhZ3MgPQotCQkJCVRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19TVEFUU0lUSUNTX0VOQUJMRTsKKwkJCQkoVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX1NUQVRTSVRJQ1NfRU5BQkxFIHwKKwkJCQkgVFNUT1JNX0VUSF9DTElFTlRfQ09ORklHX0UxSE9WX1JFTV9FTkFCTEUpOwogI2lmZGVmIEJDTV9WTEFOCiAJaWYgKGJwLT5yeF9tb2RlICYmIGJwLT52bGdycCAmJiAoYnAtPmZsYWdzICYgSFdfVkxBTl9SWF9GTEFHKSkgewogCQl0c3Rvcm1fY2xpZW50LmNvbmZpZ19mbGFncyB8PQotCQkJCVRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTU9WQUxfRU5BQkxFOworCQkJCVRTVE9STV9FVEhfQ0xJRU5UX0NPTkZJR19WTEFOX1JFTV9FTkFCTEU7CiAJCURQKE5FVElGX01TR19JRlVQLCAidmxhbiByZW1vdmFsIGVuYWJsZWRcbiIpOwogCX0KICNlbmRpZgpAQCAtNDU4Nyw2ICs0NzczLDggQEAKIAl9CiAKIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkgeworCQl0c3Rvcm1fY2xpZW50LnN0YXRpc3RpY3NfY291bnRlcl9pZCA9IGJwLT5mcFtpXS5jbF9pZDsKKwogCQlSRUdfV1IoYnAsIEJBUl9UU1RST1JNX0lOVE1FTSArCiAJCSAgICAgICBUU1RPUk1fQ0xJRU5UX0NPTkZJR19PRkZTRVQocG9ydCwgYnAtPmZwW2ldLmNsX2lkKSwKIAkJICAgICAgICgodTMyICopJnRzdG9ybV9jbGllbnQpWzBdKTsKQEAgLTQ2MTUsMTggKzQ4MDMsMjIgQEAKIAkJdHN0b3JtX21hY19maWx0ZXIubWNhc3RfZHJvcF9hbGwgPSBtYXNrOwogCQl0c3Rvcm1fbWFjX2ZpbHRlci5iY2FzdF9kcm9wX2FsbCA9IG1hc2s7CiAJCWJyZWFrOworCiAJY2FzZSBCTlgyWF9SWF9NT0RFX05PUk1BTDoKIAkJdHN0b3JtX21hY19maWx0ZXIuYmNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CiAJCWJyZWFrOworCiAJY2FzZSBCTlgyWF9SWF9NT0RFX0FMTE1VTFRJOgogCQl0c3Rvcm1fbWFjX2ZpbHRlci5tY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKIAkJdHN0b3JtX21hY19maWx0ZXIuYmNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CiAJCWJyZWFrOworCiAJY2FzZSBCTlgyWF9SWF9NT0RFX1BST01JU0M6CiAJCXRzdG9ybV9tYWNfZmlsdGVyLnVjYXN0X2FjY2VwdF9hbGwgPSBtYXNrOwogCQl0c3Rvcm1fbWFjX2ZpbHRlci5tY2FzdF9hY2NlcHRfYWxsID0gbWFzazsKIAkJdHN0b3JtX21hY19maWx0ZXIuYmNhc3RfYWNjZXB0X2FsbCA9IG1hc2s7CiAJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJQk5YMlhfRVJSKCJCQUQgcnggbW9kZSAoJWQpXG4iLCBtb2RlKTsKIAkJYnJlYWs7CkBAIC00Njc3LDE5ICs0ODY5LDY0IEBACiAJUkVHX1dSKGJwLCBCQVJfWFNUUk9STV9JTlRNRU0gKyBYU1RPUk1fSENfQlRSX09GRlNFVChwb3J0KSwgQk5YMlhfQlRSKTsKIH0KIAorLyogQ2FsY3VsYXRlcyB0aGUgc3VtIG9mIHZuX21pbl9yYXRlcy4KKyAgIEl0J3MgbmVlZGVkIGZvciBmdXJ0aGVyIG5vcm1hbGl6aW5nIG9mIHRoZSBtaW5fcmF0ZXMuCisgICBSZXR1cm5zOgorICAgICBzdW0gb2Ygdm5fbWluX3JhdGVzLgorICAgICAgIG9yCisgICAgIDAgLSBpZiBhbGwgdGhlIG1pbl9yYXRlcyBhcmUgMC4KKyAgICAgSW4gdGhlIGxhdGVyIGNhc2UgZmFpbmVzcyBhbGdvcml0aG0gc2hvdWxkIGJlIGRlYWN0aXZhdGVkLgorICAgICBJZiBub3QgYWxsIG1pbl9yYXRlcyBhcmUgemVybyB0aGVuIHRob3NlIHRoYXQgYXJlIHplcm9lcyB3aWxsIGJlIHNldCB0byAxLgorICovCitzdGF0aWMgdm9pZCBibngyeF9jYWxjX3ZuX3dlaWdodF9zdW0oc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgYWxsX3plcm8gPSAxOworCWludCBwb3J0ID0gQlBfUE9SVChicCk7CisJaW50IHZuOworCisJYnAtPnZuX3dlaWdodF9zdW0gPSAwOworCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykgeworCQlpbnQgZnVuYyA9IDIqdm4gKyBwb3J0OworCQl1MzIgdm5fY2ZnID0KKwkJCVNITUVNX1JEKGJwLCBtZl9jZmcuZnVuY19tZl9jb25maWdbZnVuY10uY29uZmlnKTsKKwkJdTMyIHZuX21pbl9yYXRlID0gKCh2bl9jZmcgJiBGVU5DX01GX0NGR19NSU5fQldfTUFTSykgPj4KKwkJCQkgICBGVU5DX01GX0NGR19NSU5fQldfU0hJRlQpICogMTAwOworCisJCS8qIFNraXAgaGlkZGVuIHZucyAqLworCQlpZiAodm5fY2ZnICYgRlVOQ19NRl9DRkdfRlVOQ19ISURFKQorCQkJY29udGludWU7CisKKwkJLyogSWYgbWluIHJhdGUgaXMgemVybyAtIHNldCBpdCB0byAxICovCisJCWlmICghdm5fbWluX3JhdGUpCisJCQl2bl9taW5fcmF0ZSA9IERFRl9NSU5fUkFURTsKKwkJZWxzZQorCQkJYWxsX3plcm8gPSAwOworCisJCWJwLT52bl93ZWlnaHRfc3VtICs9IHZuX21pbl9yYXRlOworCX0KKworCS8qIC4uLiBvbmx5IGlmIGFsbCBtaW4gcmF0ZXMgYXJlIHplcm9zIC0gZGlzYWJsZSBmYWlybmVzcyAqLworCWlmIChhbGxfemVybykKKwkJYnAtPnZuX3dlaWdodF9zdW0gPSAwOworfQorCiBzdGF0aWMgdm9pZCBibngyeF9pbml0X2ludGVybmFsX2Z1bmMoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlzdHJ1Y3QgdHN0b3JtX2V0aF9mdW5jdGlvbl9jb21tb25fY29uZmlnIHRzdG9ybV9jb25maWcgPSB7MH07CiAJc3RydWN0IHN0YXRzX2luZGljYXRpb25fZmxhZ3Mgc3RhdHNfZmxhZ3MgPSB7MH07CiAJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKIAlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOwotCWludCBpOworCWludCBpLCBqOworCXUzMiBvZmZzZXQ7CiAJdTE2IG1heF9hZ2dfc2l6ZTsKIAogCWlmIChpc19tdWx0aShicCkpIHsKLQkJdHN0b3JtX2NvbmZpZy5jb25maWdfZmxhZ3MgPSBNVUxUSV9GTEFHUzsKKwkJdHN0b3JtX2NvbmZpZy5jb25maWdfZmxhZ3MgPSBNVUxUSV9GTEFHUyhicCk7CiAJCXRzdG9ybV9jb25maWcucnNzX3Jlc3VsdF9tYXNrID0gTVVMVElfTUFTSzsKIAl9CisJaWYgKElTX0UxSE1GKGJwKSkKKwkJdHN0b3JtX2NvbmZpZy5jb25maWdfZmxhZ3MgfD0KKwkJCQlUU1RPUk1fRVRIX0ZVTkNUSU9OX0NPTU1PTl9DT05GSUdfRTFIT1ZfSU5fQ0FNOwogCiAJdHN0b3JtX2NvbmZpZy5sZWFkaW5nX2NsaWVudF9pZCA9IEJQX0xfSUQoYnApOwogCkBAIC00NzAwLDE3ICs0OTM3LDI5IEBACiAJYnAtPnJ4X21vZGUgPSBCTlgyWF9SWF9NT0RFX05PTkU7IC8qIG5vIHJ4IHVudGlsIGxpbmsgaXMgdXAgKi8KIAlibngyeF9zZXRfc3Rvcm1fcnhfbW9kZShicCk7CiAKLQkvKiByZXNldCB4c3Rvcm0gcGVyIGNsaWVudCBzdGF0aXN0aWNzICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgeHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpIC8gNDsgaSsrKSB7Ci0JCVJFR19XUihicCwgQkFSX1hTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFhTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgQlBfQ0xfSUQoYnApKSArCi0JCSAgICAgICBpKjQsIDApOwotCX0KLQkvKiByZXNldCB0c3Rvcm0gcGVyIGNsaWVudCBzdGF0aXN0aWNzICovCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3QgdHN0b3JtX3Blcl9jbGllbnRfc3RhdHMpIC8gNDsgaSsrKSB7Ci0JCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFRTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgQlBfQ0xfSUQoYnApKSArCi0JCSAgICAgICBpKjQsIDApOworCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXU4IGNsX2lkID0gYnAtPmZwW2ldLmNsX2lkOworCisJCS8qIHJlc2V0IHhzdG9ybSBwZXIgY2xpZW50IHN0YXRpc3RpY3MgKi8KKwkJb2Zmc2V0ID0gQkFSX1hTVFJPUk1fSU5UTUVNICsKKwkJCSBYU1RPUk1fUEVSX0NPVU5URVJfSURfU1RBVFNfT0ZGU0VUKHBvcnQsIGNsX2lkKTsKKwkJZm9yIChqID0gMDsKKwkJICAgICBqIDwgc2l6ZW9mKHN0cnVjdCB4c3Rvcm1fcGVyX2NsaWVudF9zdGF0cykgLyA0OyBqKyspCisJCQlSRUdfV1IoYnAsIG9mZnNldCArIGoqNCwgMCk7CisKKwkJLyogcmVzZXQgdHN0b3JtIHBlciBjbGllbnQgc3RhdGlzdGljcyAqLworCQlvZmZzZXQgPSBCQVJfVFNUUk9STV9JTlRNRU0gKworCQkJIFRTVE9STV9QRVJfQ09VTlRFUl9JRF9TVEFUU19PRkZTRVQocG9ydCwgY2xfaWQpOworCQlmb3IgKGogPSAwOworCQkgICAgIGogPCBzaXplb2Yoc3RydWN0IHRzdG9ybV9wZXJfY2xpZW50X3N0YXRzKSAvIDQ7IGorKykKKwkJCVJFR19XUihicCwgb2Zmc2V0ICsgaio0LCAwKTsKKworCQkvKiByZXNldCB1c3Rvcm0gcGVyIGNsaWVudCBzdGF0aXN0aWNzICovCisJCW9mZnNldCA9IEJBUl9VU1RST1JNX0lOVE1FTSArCisJCQkgVVNUT1JNX1BFUl9DT1VOVEVSX0lEX1NUQVRTX09GRlNFVChwb3J0LCBjbF9pZCk7CisJCWZvciAoaiA9IDA7CisJCSAgICAgaiA8IHNpemVvZihzdHJ1Y3QgdXN0b3JtX3Blcl9jbGllbnRfc3RhdHMpIC8gNDsgaisrKQorCQkJUkVHX1dSKGJwLCBvZmZzZXQgKyBqKjQsIDApOwogCX0KIAogCS8qIEluaXQgc3RhdGlzdGljcyByZWxhdGVkIGNvbnRleHQgKi8KQEAgLTQ3MjYsNiArNDk3NSwxMSBAQAogCVJFR19XUihicCwgQkFSX1RTVFJPUk1fSU5UTUVNICsgVFNUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSArIDQsCiAJICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVsxXSk7CiAKKwlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArIFVTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYyksCisJICAgICAgICgodTMyICopJnN0YXRzX2ZsYWdzKVswXSk7CisJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKyBVU1RPUk1fU1RBVFNfRkxBR1NfT0ZGU0VUKGZ1bmMpICsgNCwKKwkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzFdKTsKKwogCVJFR19XUihicCwgQkFSX0NTVFJPUk1fSU5UTUVNICsgQ1NUT1JNX1NUQVRTX0ZMQUdTX09GRlNFVChmdW5jKSwKIAkgICAgICAgKCh1MzIgKikmc3RhdHNfZmxhZ3MpWzBdKTsKIAlSRUdfV1IoYnAsIEJBUl9DU1RST1JNX0lOVE1FTSArIENTVE9STV9TVEFUU19GTEFHU19PRkZTRVQoZnVuYykgKyA0LApAQCAtNDc0NSw2ICs0OTk5LDEzIEBACiAJICAgICAgIFRTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQoZnVuYykgKyA0LAogCSAgICAgICBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgZndfc3RhdHMpKSk7CiAKKwlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJICAgICAgIFVTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQoZnVuYyksCisJICAgICAgIFU2NF9MTyhibngyeF9zcF9tYXBwaW5nKGJwLCBmd19zdGF0cykpKTsKKwlSRUdfV1IoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCisJICAgICAgIFVTVE9STV9FVEhfU1RBVFNfUVVFUllfQUREUl9PRkZTRVQoZnVuYykgKyA0LAorCSAgICAgICBVNjRfSEkoYm54Mnhfc3BfbWFwcGluZyhicCwgZndfc3RhdHMpKSk7CisKIAlpZiAoQ0hJUF9JU19FMUgoYnApKSB7CiAJCVJFR19XUjgoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArIFhTVE9STV9GVU5DVElPTl9NT0RFX09GRlNFVCwKIAkJCUlTX0UxSE1GKGJwKSk7CkBAIC00NzY0LDIwICs1MDI1LDkxIEBACiAJCW1pbigodTMyKShtaW4oKHUzMik4LCAodTMyKU1BWF9TS0JfRlJBR1MpICoKIAkJCSAgU0dFX1BBR0VfU0laRSAqIFBBR0VTX1BFUl9TR0UpLAogCQkgICAgKHUzMikweGZmZmYpOwotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAKIAkJUkVHX1dSKGJwLCBCQVJfVVNUUk9STV9JTlRNRU0gKwotCQkgICAgICAgVVNUT1JNX0NRRV9QQUdFX0JBU0VfT0ZGU0VUKHBvcnQsIEZQX0NMX0lEKGZwKSksCisJCSAgICAgICBVU1RPUk1fQ1FFX1BBR0VfQkFTRV9PRkZTRVQocG9ydCwgZnAtPmNsX2lkKSwKIAkJICAgICAgIFU2NF9MTyhmcC0+cnhfY29tcF9tYXBwaW5nKSk7CiAJCVJFR19XUihicCwgQkFSX1VTVFJPUk1fSU5UTUVNICsKLQkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBGUF9DTF9JRChmcCkpICsgNCwKKwkJICAgICAgIFVTVE9STV9DUUVfUEFHRV9CQVNFX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpICsgNCwKIAkJICAgICAgIFU2NF9ISShmcC0+cnhfY29tcF9tYXBwaW5nKSk7CiAKIAkJUkVHX1dSMTYoYnAsIEJBUl9VU1RST1JNX0lOVE1FTSArCi0JCQkgVVNUT1JNX01BWF9BR0dfU0laRV9PRkZTRVQocG9ydCwgRlBfQ0xfSUQoZnApKSwKKwkJCSBVU1RPUk1fTUFYX0FHR19TSVpFX09GRlNFVChwb3J0LCBmcC0+Y2xfaWQpLAogCQkJIG1heF9hZ2dfc2l6ZSk7CiAJfQorCisJLyogZHJvcGxlc3MgZmxvdyBjb250cm9sICovCisJaWYgKENISVBfSVNfRTFIKGJwKSkgeworCQlzdHJ1Y3QgdXN0b3JtX2V0aF9yeF9wYXVzZV9kYXRhX2UxaCByeF9wYXVzZSA9IHswfTsKKworCQlyeF9wYXVzZS5iZF90aHJfbG93ID0gMjUwOworCQlyeF9wYXVzZS5jcWVfdGhyX2xvdyA9IDI1MDsKKwkJcnhfcGF1c2UuY29zID0gMTsKKwkJcnhfcGF1c2Uuc2dlX3Rocl9sb3cgPSAwOworCQlyeF9wYXVzZS5iZF90aHJfaGlnaCA9IDM1MDsKKwkJcnhfcGF1c2UuY3FlX3Rocl9oaWdoID0gMzUwOworCQlyeF9wYXVzZS5zZ2VfdGhyX2hpZ2ggPSAwOworCisJCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CisJCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKKworCQkJaWYgKCFmcC0+ZGlzYWJsZV90cGEpIHsKKwkJCQlyeF9wYXVzZS5zZ2VfdGhyX2xvdyA9IDE1MDsKKwkJCQlyeF9wYXVzZS5zZ2VfdGhyX2hpZ2ggPSAyNTA7CisJCQl9CisKKworCQkJb2Zmc2V0ID0gQkFSX1VTVFJPUk1fSU5UTUVNICsKKwkJCQkgVVNUT1JNX0VUSF9SSU5HX1BBVVNFX0RBVEFfT0ZGU0VUKHBvcnQsCisJCQkJCQkJCSAgIGZwLT5jbF9pZCk7CisJCQlmb3IgKGogPSAwOworCQkJICAgICBqIDwgc2l6ZW9mKHN0cnVjdCB1c3Rvcm1fZXRoX3J4X3BhdXNlX2RhdGFfZTFoKS80OworCQkJICAgICBqKyspCisJCQkJUkVHX1dSKGJwLCBvZmZzZXQgKyBqKjQsCisJCQkJICAgICAgICgodTMyICopJnJ4X3BhdXNlKVtqXSk7CisJCX0KKwl9CisKKwltZW1zZXQoJihicC0+Y21uZyksIDAsIHNpemVvZihzdHJ1Y3QgY21uZ19zdHJ1Y3RfcGVyX3BvcnQpKTsKKworCS8qIEluaXQgcmF0ZSBzaGFwaW5nIGFuZCBmYWlybmVzcyBjb250ZXh0cyAqLworCWlmIChJU19FMUhNRihicCkpIHsKKwkJaW50IHZuOworCisJCS8qIER1cmluZyBpbml0IHRoZXJlIGlzIG5vIGFjdGl2ZSBsaW5rCisJCSAgIFVudGlsIGxpbmsgaXMgdXAsIHNldCBsaW5rIHJhdGUgdG8gMTBHYnBzICovCisJCWJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCA9IFNQRUVEXzEwMDAwOworCQlibngyeF9pbml0X3BvcnRfbWlubWF4KGJwKTsKKworCQlibngyeF9jYWxjX3ZuX3dlaWdodF9zdW0oYnApOworCisJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykKKwkJCWJueDJ4X2luaXRfdm5fbWlubWF4KGJwLCAyKnZuICsgcG9ydCk7CisKKwkJLyogRW5hYmxlIHJhdGUgc2hhcGluZyBhbmQgZmFpcm5lc3MgKi8KKwkJYnAtPmNtbmcuZmxhZ3MuY21uZ19lbmFibGVzID0KKwkJCQkJQ01OR19GTEFHU19QRVJfUE9SVF9SQVRFX1NIQVBJTkdfVk47CisJCWlmIChicC0+dm5fd2VpZ2h0X3N1bSkKKwkJCWJwLT5jbW5nLmZsYWdzLmNtbmdfZW5hYmxlcyB8PQorCQkJCQlDTU5HX0ZMQUdTX1BFUl9QT1JUX0ZBSVJORVNTX1ZOOworCQllbHNlCisJCQlEUChORVRJRl9NU0dfSUZVUCwgIkFsbCBNSU4gdmFsdWVzIGFyZSB6ZXJvZXMiCisJCQkgICAiICBmYWlybmVzcyB3aWxsIGJlIGRpc2FibGVkXG4iKTsKKwl9IGVsc2UgeworCQkvKiByYXRlIHNoYXBpbmcgYW5kIGZhaXJuZXNzIGFyZSBkaXNhYmxlZCAqLworCQlEUChORVRJRl9NU0dfSUZVUCwKKwkJICAgInNpbmdsZSBmdW5jdGlvbiBtb2RlICBtaW5tYXggd2lsbCBiZSBkaXNhYmxlZFxuIik7CisJfQorCisKKwkvKiBTdG9yZSBpdCB0byBpbnRlcm5hbCBtZW1vcnkgKi8KKwlpZiAoYnAtPnBvcnQucG1mKQorCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCkgLyA0OyBpKyspCisJCQlSRUdfV1IoYnAsIEJBUl9YU1RST1JNX0lOVE1FTSArCisJCQkgICAgICAgWFNUT1JNX0NNTkdfUEVSX1BPUlRfVkFSU19PRkZTRVQocG9ydCkgKyBpICogNCwKKwkJCSAgICAgICAoKHUzMiAqKSgmYnAtPmNtbmcpKVtpXSk7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X2luaXRfaW50ZXJuYWwoc3RydWN0IGJueDJ4ICpicCwgdTMyIGxvYWRfY29kZSkKQEAgLTQ4MTQsMTMgKzUxNDYsMTcgQEAKIAkJZnAtPmNsX2lkID0gQlBfTF9JRChicCkgKyBpOwogCQlmcC0+c2JfaWQgPSBmcC0+Y2xfaWQ7CiAJCURQKE5FVElGX01TR19JRlVQLAotCQkgICAiYm54MnhfaW5pdF9zYiglcCwlcCkgaW5kZXggJWQgIGNsX2lkICVkICBzYiAlZFxuIiwKLQkJICAgYnAsIGZwLT5zdGF0dXNfYmxrLCBpLCBGUF9DTF9JRChmcCksIEZQX1NCX0lEKGZwKSk7CisJCSAgICJxdWV1ZVslZF06ICBibngyeF9pbml0X3NiKCVwLCVwKSAgY2xfaWQgJWQgIHNiICVkXG4iLAorCQkgICBpLCBicCwgZnAtPnN0YXR1c19ibGssIGZwLT5jbF9pZCwgZnAtPnNiX2lkKTsKIAkJYm54MnhfaW5pdF9zYihicCwgZnAtPnN0YXR1c19ibGssIGZwLT5zdGF0dXNfYmxrX21hcHBpbmcsCi0JCQkgICAgICBGUF9TQl9JRChmcCkpOworCQkJICAgICAgZnAtPnNiX2lkKTsKIAkJYm54MnhfdXBkYXRlX2Zwc2JfaWR4KGZwKTsKIAl9CiAKKwkvKiBlbnN1cmUgc3RhdHVzIGJsb2NrIGluZGljZXMgd2VyZSByZWFkICovCisJcm1iKCk7CisKKwogCWJueDJ4X2luaXRfZGVmX3NiKGJwLCBicC0+ZGVmX3N0YXR1c19ibGssIGJwLT5kZWZfc3RhdHVzX2Jsa19tYXBwaW5nLAogCQkJICBERUZfU0JfSUQpOwogCWJueDJ4X3VwZGF0ZV9kc2JfaWR4KGJwKTsKQEAgLTUxOTgsNiArNTUzNCw4IEBACiAJUkVHX1dSKGJwLCBQWFAyX1JFR19SUV9TUkNfRU5ESUFOX00sIDEpOwogCVJFR19XUihicCwgUFhQMl9SRUdfUlFfQ0RVX0VORElBTl9NLCAxKTsKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1JRX0RCR19FTkRJQU5fTSwgMSk7CisJLyogbWFrZSBzdXJlIHRoaXMgdmFsdWUgaXMgMCAqLworCVJFR19XUihicCwgUFhQMl9SRUdfUlFfSENfRU5ESUFOX00sIDApOwogCiAvKglSRUdfV1IoYnAsIFBYUDJfUkVHX1JEX1BCRl9TV0FQX01PREUsIDEpOyAqLwogCVJFR19XUihicCwgUFhQMl9SRUdfUkRfUU1fU1dBUF9NT0RFLCAxKTsKQEAgLTUyNjYsMTQgKzU2MDQsNiBAQAogCX0KIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIEJSQjFfQ09NTU9OX1NUQVJULCBCUkIxX0NPTU1PTl9FTkQpOwotCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkgewotCQkvKiBmaXggZm9yIGVtdWxhdGlvbiBhbmQgRlBHQSBmb3Igbm8gcGF1c2UgKi8KLQkJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9ISUdIX1RIUkVTSE9MRF8wLCA1MTMpOwotCQlSRUdfV1IoYnAsIEJSQjFfUkVHX1BBVVNFX0hJR0hfVEhSRVNIT0xEXzEsIDUxMyk7Ci0JCVJFR19XUihicCwgQlJCMV9SRUdfUEFVU0VfTE9XX1RIUkVTSE9MRF8wLCAwKTsKLQkJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzEsIDApOwotCX0KLQogCWJueDJ4X2luaXRfYmxvY2soYnAsIFBSU19DT01NT05fU1RBUlQsIFBSU19DT01NT05fRU5EKTsKIAlSRUdfV1IoYnAsIFBSU19SRUdfQV9QUlNVXzIwLCAweGYpOwogCS8qIHNldCBOSUMgbW9kZSAqLwpAQCAtNTI4NiwzNyArNTYxNiwxMCBAQAogCWJueDJ4X2luaXRfYmxvY2soYnAsIFVTRE1fQ09NTU9OX1NUQVJULCBVU0RNX0NPTU1PTl9FTkQpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFhTRE1fQ09NTU9OX1NUQVJULCBYU0RNX0NPTU1PTl9FTkQpOwogCi0JaWYgKENISVBfSVNfRTFIKGJwKSkgewotCQlibngyeF9pbml0X2ZpbGwoYnAsIFRTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwKLQkJCQlUU1RPUk1fSU5UTUVNX0FERFIgKyBTVE9STV9JTlRNRU1fU0laRV9FMUgvMiwKLQkJCQkwLCBTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgQ1NUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLAotCQkJCUNTVE9STV9JTlRNRU1fQUREUiArIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yLAotCQkJCTAsIFNUT1JNX0lOVE1FTV9TSVpFX0UxSC8yKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBYU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsCi0JCQkJWFNUT1JNX0lOVE1FTV9BRERSICsgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIsCi0JCQkJMCwgU1RPUk1fSU5UTUVNX1NJWkVfRTFILzIpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIFVTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwKLQkJCQlVU1RPUk1fSU5UTUVNX0FERFIgKyBTVE9STV9JTlRNRU1fU0laRV9FMUgvMiwKLQkJCQkwLCBTVE9STV9JTlRNRU1fU0laRV9FMUgvMik7Ci0JfSBlbHNlIHsgLyogRTEgKi8KLQkJYm54MnhfaW5pdF9maWxsKGJwLCBUU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTEpOwotCQlibngyeF9pbml0X2ZpbGwoYnAsIENTVE9STV9JTlRNRU1fQUREUiwgMCwKLQkJCQlTVE9STV9JTlRNRU1fU0laRV9FMSk7Ci0JCWJueDJ4X2luaXRfZmlsbChicCwgWFNUT1JNX0lOVE1FTV9BRERSLCAwLAotCQkJCVNUT1JNX0lOVE1FTV9TSVpFX0UxKTsKLQkJYm54MnhfaW5pdF9maWxsKGJwLCBVU1RPUk1fSU5UTUVNX0FERFIsIDAsCi0JCQkJU1RPUk1fSU5UTUVNX1NJWkVfRTEpOwotCX0KKwlibngyeF9pbml0X2ZpbGwoYnAsIFRTVE9STV9JTlRNRU1fQUREUiwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFVTVE9STV9JTlRNRU1fQUREUiwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIENTVE9STV9JTlRNRU1fQUREUiwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKKwlibngyeF9pbml0X2ZpbGwoYnAsIFhTVE9STV9JTlRNRU1fQUREUiwgMCwgU1RPUk1fSU5UTUVNX1NJWkUoYnApKTsKIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIFRTRU1fQ09NTU9OX1NUQVJULCBUU0VNX0NPTU1PTl9FTkQpOwogCWJueDJ4X2luaXRfYmxvY2soYnAsIFVTRU1fQ09NTU9OX1NUQVJULCBVU0VNX0NPTU1PTl9FTkQpOwpAQCAtNTMzOCw4ICs1NjQxLDcgQEAKIAkJUkVHX1dSKGJwLCBpLCAweGMwY2FjMDFhKTsKIAkJLyogVE9ETzogcmVwbGFjZSB3aXRoIHNvbWV0aGluZyBtZWFuaW5nZnVsICovCiAJfQotCWlmIChDSElQX0lTX0UxSChicCkpCi0JCWJueDJ4X2luaXRfYmxvY2soYnAsIFNSQ0hfQ09NTU9OX1NUQVJULCBTUkNIX0NPTU1PTl9FTkQpOworCWJueDJ4X2luaXRfYmxvY2soYnAsIFNSQ0hfQ09NTU9OX1NUQVJULCBTUkNIX0NPTU1PTl9FTkQpOwogCVJFR19XUihicCwgU1JDX1JFR19TT0ZUX1JTVCwgMCk7CiAKIAlpZiAoc2l6ZW9mKHVuaW9uIGNkdV9jb250ZXh0KSAhPSAxMDI0KQpAQCAtNTM1OCw2ICs1NjYwLDExIEBACiAKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBDRkNfQ09NTU9OX1NUQVJULCBDRkNfQ09NTU9OX0VORCk7CiAJUkVHX1dSKGJwLCBDRkNfUkVHX0lOSVRfUkVHLCAweDdGRik7CisJLyogZW5hYmxlIGNvbnRleHQgdmFsaWRhdGlvbiBpbnRlcnJ1cHQgZnJvbSBDRkMgKi8KKwlSRUdfV1IoYnAsIENGQ19SRUdfQ0ZDX0lOVF9NQVNLLCAwKTsKKworCS8qIHNldCB0aGUgdGhyZXNob2xkcyB0byBwcmV2ZW50IENGQy9DRFUgcmFjZSAqLworCVJFR19XUihicCwgQ0ZDX1JFR19ERUJVRzAsIDB4MjAwMjAwMDApOwogCiAJYm54MnhfaW5pdF9ibG9jayhicCwgSENfQ09NTU9OX1NUQVJULCBIQ19DT01NT05fRU5EKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBNSVNDX0FFVV9DT01NT05fU1RBUlQsIE1JU0NfQUVVX0NPTU1PTl9FTkQpOwpAQCAtNTQxMCw5ICs1NzE3LDE0IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0Jc3dpdGNoIChicC0+Y29tbW9uLmJvYXJkICYgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0spIHsKLQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMUc6Ci0JY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjJHOgorCXN3aXRjaCAoWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKSkgeworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MjoKKwljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzM6CisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQlicC0+cG9ydC5uZWVkX2h3X2xvY2sgPSAxOworCQlicmVhazsKKworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKIAkJLyogRmFuIGZhaWx1cmUgaXMgaW5kaWNhdGVkIGJ5IFNQSU8gNSAqLwogCQlibngyeF9zZXRfc3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfU1BJT181LAogCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX1NQSU9fSU5QVVRfSElfWik7CkBAIC01NDUxLDYgKzU3NjMsNyBAQAogc3RhdGljIGludCBibngyeF9pbml0X3BvcnQoc3RydWN0IGJueDJ4ICpicCkKIHsKIAlpbnQgcG9ydCA9IEJQX1BPUlQoYnApOworCXUzMiBsb3csIGhpZ2g7CiAJdTMyIHZhbDsKIAogCURQKEJOWDJYX01TR19NQ1AsICJzdGFydGluZyBwb3J0IGluaXQgIHBvcnQgJXhcbiIsIHBvcnQpOwpAQCAtNTQ4NSw2ICs1Nzk4LDggQEAKIAlSRUdfV1IoYnAsIFBYUDJfUkVHX1BTV1JRX1NSQzBfTDJQICsgZnVuYyo0LCBQWFBfT05FX0lMVChpKSk7CiAjZW5kaWYKIAkvKiBQb3J0IENNcyBjb21lIGhlcmUgKi8KKwlibngyeF9pbml0X2Jsb2NrKGJwLCAocG9ydCA/IFhDTV9QT1JUMV9TVEFSVCA6IFhDTV9QT1JUMF9TVEFSVCksCisJCQkgICAgIChwb3J0ID8gWENNX1BPUlQxX0VORCA6IFhDTV9QT1JUMF9FTkQpKTsKIAogCS8qIFBvcnQgUU0gY29tZXMgaGVyZSAqLwogI2lmZGVmIEJDTV9JU0NTSQpAQCAtNTQ5NSwxMiArNTgxMCwzOCBAQAogCQkJICAgICBmdW5jID8gVElNRVJTX1BPUlQxX0VORCA6IFRJTUVSU19QT1JUMF9FTkQpOwogI2VuZGlmCiAJLyogUG9ydCBEUSBjb21lcyBoZXJlICovCi0JLyogUG9ydCBCUkIxIGNvbWVzIGhlcmUgKi8KKworCWJueDJ4X2luaXRfYmxvY2soYnAsIChwb3J0ID8gQlJCMV9QT1JUMV9TVEFSVCA6IEJSQjFfUE9SVDBfU1RBUlQpLAorCQkJICAgICAocG9ydCA/IEJSQjFfUE9SVDFfRU5EIDogQlJCMV9QT1JUMF9FTkQpKTsKKwlpZiAoQ0hJUF9SRVZfSVNfU0xPVyhicCkgJiYgIUNISVBfSVNfRTFIKGJwKSkgeworCQkvKiBubyBwYXVzZSBmb3IgZW11bGF0aW9uIGFuZCBGUEdBICovCisJCWxvdyA9IDA7CisJCWhpZ2ggPSA1MTM7CisJfSBlbHNlIHsKKwkJaWYgKElTX0UxSE1GKGJwKSkKKwkJCWxvdyA9ICgoYnAtPmZsYWdzICYgT05FX1BPUlRfRkxBRykgPyAxNjAgOiAyNDYpOworCQllbHNlIGlmIChicC0+ZGV2LT5tdHUgPiA0MDk2KSB7CisJCQlpZiAoYnAtPmZsYWdzICYgT05FX1BPUlRfRkxBRykKKwkJCQlsb3cgPSAxNjA7CisJCQllbHNlIHsKKwkJCQl2YWwgPSBicC0+ZGV2LT5tdHU7CisJCQkJLyogKDI0KjEwMjQgKyB2YWwqNCkvMjU2ICovCisJCQkJbG93ID0gOTYgKyAodmFsLzY0KSArICgodmFsICUgNjQpID8gMSA6IDApOworCQkJfQorCQl9IGVsc2UKKwkJCWxvdyA9ICgoYnAtPmZsYWdzICYgT05FX1BPUlRfRkxBRykgPyA4MCA6IDE2MCk7CisJCWhpZ2ggPSBsb3cgKyA1NjsJLyogMTQqMTAyNC8yNTYgKi8KKwl9CisJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9MT1dfVEhSRVNIT0xEXzAgKyBwb3J0KjQsIGxvdyk7CisJUkVHX1dSKGJwLCBCUkIxX1JFR19QQVVTRV9ISUdIX1RIUkVTSE9MRF8wICsgcG9ydCo0LCBoaWdoKTsKKworCiAJLyogUG9ydCBQUlMgY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgVFNETSBjb21lcyBoZXJlICovCiAJLyogUG9ydCBDU0RNIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IFVTRE0gY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgWFNETSBjb21lcyBoZXJlICovCisKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gVFNFTV9QT1JUMV9TVEFSVCA6IFRTRU1fUE9SVDBfU1RBUlQsCiAJCQkgICAgIHBvcnQgPyBUU0VNX1BPUlQxX0VORCA6IFRTRU1fUE9SVDBfRU5EKTsKIAlibngyeF9pbml0X2Jsb2NrKGJwLCBwb3J0ID8gVVNFTV9QT1JUMV9TVEFSVCA6IFVTRU1fUE9SVDBfU1RBUlQsCkBAIC01NTA5LDYgKzU4NTAsNyBAQAogCQkJICAgICBwb3J0ID8gQ1NFTV9QT1JUMV9FTkQgOiBDU0VNX1BPUlQwX0VORCk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgcG9ydCA/IFhTRU1fUE9SVDFfU1RBUlQgOiBYU0VNX1BPUlQwX1NUQVJULAogCQkJICAgICBwb3J0ID8gWFNFTV9QT1JUMV9FTkQgOiBYU0VNX1BPUlQwX0VORCk7CisKIAkvKiBQb3J0IFVQQiBjb21lcyBoZXJlICovCiAJLyogUG9ydCBYUEIgY29tZXMgaGVyZSAqLwogCkBAIC01NTY3LDM2ICs1OTA5LDYzIEBACiAJLyogUG9ydCBFTUFDMSBjb21lcyBoZXJlICovCiAJLyogUG9ydCBEQlUgY29tZXMgaGVyZSAqLwogCS8qIFBvcnQgREJHIGNvbWVzIGhlcmUgKi8KKwogCWJueDJ4X2luaXRfYmxvY2soYnAsIHBvcnQgPyBOSUdfUE9SVDFfU1RBUlQgOiBOSUdfUE9SVDBfU1RBUlQsCiAJCQkgICAgIHBvcnQgPyBOSUdfUE9SVDFfRU5EIDogTklHX1BPUlQwX0VORCk7CiAKIAlSRUdfV1IoYnAsIE5JR19SRUdfWEdYU19TRVJERVMwX01PREVfU0VMICsgcG9ydCo0LCAxKTsKIAogCWlmIChDSElQX0lTX0UxSChicCkpIHsKLQkJdTMyIHdzdW07Ci0JCXN0cnVjdCBjbW5nX3N0cnVjdF9wZXJfcG9ydCBtX2NtbmdfcG9ydDsKLQkJaW50IHZuOwotCiAJCS8qIDB4MiBkaXNhYmxlIGUxaG92LCAweDEgZW5hYmxlICovCiAJCVJFR19XUihicCwgTklHX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfTUYgKyBwb3J0KjQsCiAJCSAgICAgICAoSVNfRTFITUYoYnApID8gMHgxIDogMHgyKSk7CiAKLQkJLyogSW5pdCBSQVRFIFNIQVBJTkcgYW5kIEZBSVJORVNTIGNvbnRleHRzLgotCQkgICBJbml0aWFsaXplIGFzIGlmIHRoZXJlIGlzIDEwRyBsaW5rLiAqLwotCQl3c3VtID0gYm54MnhfY2FsY192bl93c3VtKGJwKTsKLQkJYm54MnhfaW5pdF9wb3J0X21pbm1heChicCwgKGludCl3c3VtLCAxMDAwMCwgJm1fY21uZ19wb3J0KTsKLQkJaWYgKElTX0UxSE1GKGJwKSkKLQkJCWZvciAodm4gPSBWTl8wOyB2biA8IEUxSFZOX01BWDsgdm4rKykKLQkJCQlibngyeF9pbml0X3ZuX21pbm1heChicCwgMip2biArIHBvcnQsCi0JCQkJCXdzdW0sIDEwMDAwLCAmbV9jbW5nX3BvcnQpOworCQkvKiBzdXBwb3J0IHBhdXNlIHJlcXVlc3RzIGZyb20gVVNETSwgVFNETSBhbmQgQlJCICovCisJCVJFR19XUihicCwgTklHX1JFR19MTEZDX0VHUkVTU19TUkNfRU5BQkxFXzAgKyBwb3J0KjQsIDB4Nyk7CisKKwkJeworCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMRkNfRU5BQkxFXzAgKyBwb3J0KjQsIDApOworCQkJUkVHX1dSKGJwLCBOSUdfUkVHX0xMRkNfT1VUX0VOXzAgKyBwb3J0KjQsIDApOworCQkJUkVHX1dSKGJwLCBOSUdfUkVHX1BBVVNFX0VOQUJMRV8wICsgcG9ydCo0LCAxKTsKKwkJfQogCX0KIAogCS8qIFBvcnQgTUNQIGNvbWVzIGhlcmUgKi8KIAkvKiBQb3J0IERNQUUgY29tZXMgaGVyZSAqLwogCi0Jc3dpdGNoIChicC0+Y29tbW9uLmJvYXJkICYgU0hBUkVEX0hXX0NGR19CT0FSRF9UWVBFX01BU0spIHsKLQljYXNlIFNIQVJFRF9IV19DRkdfQk9BUkRfVFlQRV9CQ005NTc3MTBBMTAyMUc6Ci0JY2FzZSBTSEFSRURfSFdfQ0ZHX0JPQVJEX1RZUEVfQkNNOTU3NzEwQTEwMjJHOgorCXN3aXRjaCAoWEdYU19FWFRfUEhZX1RZUEUoYnAtPmxpbmtfcGFyYW1zLmV4dF9waHlfY29uZmlnKSkgeworCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKKwkJeworCQl1MzIgc3dhcF92YWwsIHN3YXBfb3ZlcnJpZGUsIGFldV9ncGlvX21hc2ssIG9mZnNldDsKKworCQlibngyeF9zZXRfZ3BpbyhicCwgTUlTQ19SRUdJU1RFUlNfR1BJT18zLAorCQkJICAgICAgIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5QVVRfSElfWiwgcG9ydCk7CisKKwkJLyogVGhlIEdQSU8gc2hvdWxkIGJlIHN3YXBwZWQgaWYgdGhlIHN3YXAgcmVnaXN0ZXIgaXMKKwkJICAgc2V0IGFuZCBhY3RpdmUgKi8KKwkJc3dhcF92YWwgPSBSRUdfUkQoYnAsIE5JR19SRUdfUE9SVF9TV0FQKTsKKwkJc3dhcF9vdmVycmlkZSA9IFJFR19SRChicCwgTklHX1JFR19TVFJBUF9PVkVSUklERSk7CisKKwkJLyogU2VsZWN0IGZ1bmN0aW9uIHVwb24gcG9ydC1zd2FwIGNvbmZpZ3VyYXRpb24gKi8KKwkJaWYgKHBvcnQgPT0gMCkgeworCQkJb2Zmc2V0ID0gTUlTQ19SRUdfQUVVX0VOQUJMRTFfRlVOQ18wX09VVF8wOworCQkJYWV1X2dwaW9fbWFzayA9IChzd2FwX3ZhbCAmJiBzd2FwX292ZXJyaWRlKSA/CisJCQkJQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMSA6CisJCQkJQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMDsKKwkJfSBlbHNlIHsKKwkJCW9mZnNldCA9IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMDsKKwkJCWFldV9ncGlvX21hc2sgPSAoc3dhcF92YWwgJiYgc3dhcF9vdmVycmlkZSkgPworCQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzAgOgorCQkJCUFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzE7CisJCX0KKwkJdmFsID0gUkVHX1JEKGJwLCBvZmZzZXQpOworCQkvKiBhZGQgR1BJTzMgdG8gZ3JvdXAgKi8KKwkJdmFsIHw9IGFldV9ncGlvX21hc2s7CisJCVJFR19XUihicCwgb2Zmc2V0LCB2YWwpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9TRlg3MTAxOgogCQkvKiBhZGQgU1BJTyA1IHRvIGdyb3VwIDAgKi8KIAkJdmFsID0gUkVHX1JEKGJwLCBNSVNDX1JFR19BRVVfRU5BQkxFMV9GVU5DXzBfT1VUXzApOwogCQl2YWwgfD0gQUVVX0lOUFVUU19BVFROX0JJVFNfU1BJTzU7CkBAIC01NjQyLDEwICs2MDExLDE3IEBACiB7CiAJaW50IHBvcnQgPSBCUF9QT1JUKGJwKTsKIAlpbnQgZnVuYyA9IEJQX0ZVTkMoYnApOworCXUzMiBhZGRyLCB2YWw7CiAJaW50IGk7CiAKIAlEUChCTlgyWF9NU0dfTUNQLCAic3RhcnRpbmcgZnVuYyBpbml0ICBmdW5jICV4XG4iLCBmdW5jKTsKIAorCS8qIHNldCBNU0kgcmVjb25maWd1cmUgY2FwYWJpbGl0eSAqLworCWFkZHIgPSAocG9ydCA/IEhDX1JFR19DT05GSUdfMSA6IEhDX1JFR19DT05GSUdfMCk7CisJdmFsID0gUkVHX1JEKGJwLCBhZGRyKTsKKwl2YWwgfD0gSENfQ09ORklHXzBfUkVHX01TSV9BVFROX0VOXzA7CisJUkVHX1dSKGJwLCBhZGRyLCB2YWwpOworCiAJaSA9IEZVTkNfSUxUX0JBU0UoZnVuYyk7CiAKIAlibngyeF9pbHRfd3IoYnAsIGksIGJueDJ4X3NwX21hcHBpbmcoYnAsIGNvbnRleHQpKTsKQEAgLTU2NzUsOSArNjA1MSw2IEBACiAJfQogCWJueDJ4X2luaXRfYmxvY2soYnAsIGhjX2xpbWl0c1tmdW5jXVswXSwgaGNfbGltaXRzW2Z1bmNdWzFdKTsKIAotCWlmIChDSElQX0lTX0UxSChicCkpCi0JCVJFR19XUihicCwgSENfUkVHX0ZVTkNfTlVNX1AwICsgcG9ydCo0LCBmdW5jKTsKLQogCS8qIFJlc2V0IFBDSUUgZXJyb3JzIGZvciBkZWJ1ZyAqLwogCVJFR19XUihicCwgMHgyMTE0LCAweGZmZmZmZmZmKTsKIAlSRUdfV1IoYnAsIDB4MjEyMCwgMHhmZmZmZmZmZik7CkBAIC01ODA2LDIwICs2MTc5LDE5IEBACiAJaW50IGk7CiAKIAkvKiBmYXN0cGF0aCAqLworCS8qIENvbW1vbiAqLwogCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CiAKLQkJLyogU3RhdHVzIGJsb2NrcyAqLworCQkvKiBzdGF0dXMgYmxvY2tzICovCiAJCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrKSwKIAkJCSAgICAgICBibngyeF9mcChicCwgaSwgc3RhdHVzX2Jsa19tYXBwaW5nKSwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKSArCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBldGhfdHhfZGJfZGF0YSkpOworCX0KKwkvKiBSeCAqLworCWZvcl9lYWNoX3J4X3F1ZXVlKGJwLCBpKSB7CiAKLQkJLyogZmFzdCBwYXRoIHJpbmdzOiB0eF9idWYgdHhfZGVzYyByeF9idWYgcnhfZGVzYyByeF9jb21wICovCi0JCUJOWDJYX0ZSRUUoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSk7Ci0JCUJOWDJYX1BDSV9GUkVFKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAotCQkJICAgICAgIGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX21hcHBpbmcpLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZXRoX3R4X2JkKSAqIE5VTV9UWF9CRCk7Ci0KKwkJLyogZmFzdHBhdGggcnggcmluZ3M6IHJ4X2J1ZiByeF9kZXNjIHJ4X2NvbXAgKi8KIAkJQk5YMlhfRlJFRShibngyeF9mcChicCwgaSwgcnhfYnVmX3JpbmcpKTsKIAkJQk5YMlhfUENJX0ZSRUUoYm54MnhfZnAoYnAsIGksIHJ4X2Rlc2NfcmluZyksCiAJCQkgICAgICAgYm54MnhfZnAoYnAsIGksIHJ4X2Rlc2NfbWFwcGluZyksCkBAIC01ODM2LDYgKzYyMDgsMTUgQEAKIAkJCSAgICAgICBibngyeF9mcChicCwgaSwgcnhfc2dlX21hcHBpbmcpLAogCQkJICAgICAgIEJDTV9QQUdFX1NJWkUgKiBOVU1fUlhfU0dFX1BBR0VTKTsKIAl9CisJLyogVHggKi8KKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgeworCisJCS8qIGZhc3RwYXRoIHR4IHJpbmdzOiB0eF9idWYgdHhfZGVzYyAqLworCQlCTlgyWF9GUkVFKGJueDJ4X2ZwKGJwLCBpLCB0eF9idWZfcmluZykpOworCQlCTlgyWF9QQ0lfRlJFRShibngyeF9mcChicCwgaSwgdHhfZGVzY19yaW5nKSwKKwkJCSAgICAgICBibngyeF9mcChicCwgaSwgdHhfZGVzY19tYXBwaW5nKSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGV0aF90eF9iZCkgKiBOVU1fVFhfQkQpOworCX0KIAkvKiBlbmQgb2YgZmFzdHBhdGggKi8KIAogCUJOWDJYX1BDSV9GUkVFKGJwLT5kZWZfc3RhdHVzX2JsaywgYnAtPmRlZl9zdGF0dXNfYmxrX21hcHBpbmcsCkBAIC01ODc4LDI5ICs2MjU5LDIwIEBACiAJaW50IGk7CiAKIAkvKiBmYXN0cGF0aCAqLworCS8qIENvbW1vbiAqLwogCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CiAJCWJueDJ4X2ZwKGJwLCBpLCBicCkgPSBicDsKIAotCQkvKiBTdGF0dXMgYmxvY2tzICovCisJCS8qIHN0YXR1cyBibG9ja3MgKi8KIAkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrKSwKIAkJCQkmYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZyksCiAJCQkJc2l6ZW9mKHN0cnVjdCBob3N0X3N0YXR1c19ibG9jaykgKwogCQkJCXNpemVvZihzdHJ1Y3QgZXRoX3R4X2RiX2RhdGEpKTsKKwl9CisJLyogUnggKi8KKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkgewogCi0JCWJueDJ4X2ZwKGJwLCBpLCBod190eF9wcm9kcykgPQotCQkJCSh2b2lkICopKGJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrKSArIDEpOwotCi0JCWJueDJ4X2ZwKGJwLCBpLCB0eF9wcm9kc19tYXBwaW5nKSA9Ci0JCQkJYm54MnhfZnAoYnAsIGksIHN0YXR1c19ibGtfbWFwcGluZykgKwotCQkJCXNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spOwotCi0JCS8qIGZhc3QgcGF0aCByaW5nczogdHhfYnVmIHR4X2Rlc2MgcnhfYnVmIHJ4X2Rlc2MgcnhfY29tcCAqLwotCQlCTlgyWF9BTExPQyhibngyeF9mcChicCwgaSwgdHhfYnVmX3JpbmcpLAotCQkJCXNpemVvZihzdHJ1Y3Qgc3dfdHhfYmQpICogTlVNX1RYX0JEKTsKLQkJQk5YMlhfUENJX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCB0eF9kZXNjX3JpbmcpLAotCQkJCSZibngyeF9mcChicCwgaSwgdHhfZGVzY19tYXBwaW5nKSwKLQkJCQlzaXplb2Yoc3RydWN0IGV0aF90eF9iZCkgKiBOVU1fVFhfQkQpOwotCisJCS8qIGZhc3RwYXRoIHJ4IHJpbmdzOiByeF9idWYgcnhfZGVzYyByeF9jb21wICovCiAJCUJOWDJYX0FMTE9DKGJueDJ4X2ZwKGJwLCBpLCByeF9idWZfcmluZyksCiAJCQkJc2l6ZW9mKHN0cnVjdCBzd19yeF9iZCkgKiBOVU1fUlhfQkQpOwogCQlCTlgyWF9QQ0lfQUxMT0MoYm54MnhfZnAoYnAsIGksIHJ4X2Rlc2NfcmluZyksCkBAIC01OTE5LDYgKzYyOTEsMjMgQEAKIAkJCQkmYm54MnhfZnAoYnAsIGksIHJ4X3NnZV9tYXBwaW5nKSwKIAkJCQlCQ01fUEFHRV9TSVpFICogTlVNX1JYX1NHRV9QQUdFUyk7CiAJfQorCS8qIFR4ICovCisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKKworCQlibngyeF9mcChicCwgaSwgaHdfdHhfcHJvZHMpID0KKwkJCQkodm9pZCAqKShibngyeF9mcChicCwgaSwgc3RhdHVzX2JsaykgKyAxKTsKKworCQlibngyeF9mcChicCwgaSwgdHhfcHJvZHNfbWFwcGluZykgPQorCQkJCWJueDJ4X2ZwKGJwLCBpLCBzdGF0dXNfYmxrX21hcHBpbmcpICsKKwkJCQlzaXplb2Yoc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrKTsKKworCQkvKiBmYXN0cGF0aCB0eCByaW5nczogdHhfYnVmIHR4X2Rlc2MgKi8KKwkJQk5YMlhfQUxMT0MoYm54MnhfZnAoYnAsIGksIHR4X2J1Zl9yaW5nKSwKKwkJCQlzaXplb2Yoc3RydWN0IHN3X3R4X2JkKSAqIE5VTV9UWF9CRCk7CisJCUJOWDJYX1BDSV9BTExPQyhibngyeF9mcChicCwgaSwgdHhfZGVzY19yaW5nKSwKKwkJCQkmYm54MnhfZnAoYnAsIGksIHR4X2Rlc2NfbWFwcGluZyksCisJCQkJc2l6ZW9mKHN0cnVjdCBldGhfdHhfYmQpICogTlVNX1RYX0JEKTsKKwl9CiAJLyogZW5kIG9mIGZhc3RwYXRoICovCiAKIAlCTlgyWF9QQ0lfQUxMT0MoYnAtPmRlZl9zdGF0dXNfYmxrLCAmYnAtPmRlZl9zdGF0dXNfYmxrX21hcHBpbmcsCkBAIC01OTcyLDcgKzYzNjEsNyBAQAogewogCWludCBpOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwlmb3JfZWFjaF90eF9xdWV1ZShicCwgaSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpXTsKIAogCQl1MTYgYmRfY29ucyA9IGZwLT50eF9iZF9jb25zOwpAQCAtNTk5MCw3ICs2Mzc5LDcgQEAKIHsKIAlpbnQgaSwgajsKIAotCWZvcl9lYWNoX3F1ZXVlKGJwLCBqKSB7CisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGopIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbal07CiAKIAkJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9CRDsgaSsrKSB7CkBAIC02MDAyLDggKzYzOTEsNyBAQAogCiAJCQlwY2lfdW5tYXBfc2luZ2xlKGJwLT5wZGV2LAogCQkJCQkgcGNpX3VubWFwX2FkZHIocnhfYnVmLCBtYXBwaW5nKSwKLQkJCQkJIGJwLT5yeF9idWZfc2l6ZSwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJCSBicC0+cnhfYnVmX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJCXJ4X2J1Zi0+c2tiID0gTlVMTDsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTYwMzQsMTAgKzY0MjIsNiBAQAogCQkgICAic3RhdGUgJXhcbiIsIGksIGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3RvciwKIAkJICAgYm54MnhfZnAoYnAsIGksIHN0YXRlKSk7CiAKLQkJaWYgKGJueDJ4X2ZwKGJwLCBpLCBzdGF0ZSkgIT0gQk5YMlhfRlBfU1RBVEVfQ0xPU0VEKQotCQkJQk5YMlhfRVJSKCJJUlEgb2YgZnAgIyVkIGJlaW5nIGZyZWVkIHdoaWxlICIKLQkJCQkgICJzdGF0ZSAhPSBjbG9zZWRcbiIsIGkpOwotCiAJCWZyZWVfaXJxKGJwLT5tc2l4X3RhYmxlW2kgKyBvZmZzZXRdLnZlY3RvciwgJmJwLT5mcFtpXSk7CiAJfQogfQpAQCAtNjA0OSwzMiArNjQzMywzNyBAQAogCQlwY2lfZGlzYWJsZV9tc2l4KGJwLT5wZGV2KTsKIAkJYnAtPmZsYWdzICY9IH5VU0lOR19NU0lYX0ZMQUc7CiAKKwl9IGVsc2UgaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKSB7CisJCWZyZWVfaXJxKGJwLT5wZGV2LT5pcnEsIGJwLT5kZXYpOworCQlwY2lfZGlzYWJsZV9tc2koYnAtPnBkZXYpOworCQlicC0+ZmxhZ3MgJj0gflVTSU5HX01TSV9GTEFHOworCiAJfSBlbHNlCiAJCWZyZWVfaXJxKGJwLT5wZGV2LT5pcnEsIGJwLT5kZXYpOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X2VuYWJsZV9tc2l4KHN0cnVjdCBibngyeCAqYnApCiB7Ci0JaW50IGksIHJjLCBvZmZzZXQ7CisJaW50IGksIHJjLCBvZmZzZXQgPSAxOworCWludCBpZ3VfdmVjID0gMDsKIAotCWJwLT5tc2l4X3RhYmxlWzBdLmVudHJ5ID0gMDsKLQlvZmZzZXQgPSAxOwotCURQKE5FVElGX01TR19JRlVQLCAibXNpeF90YWJsZVswXS5lbnRyeSA9IDAgKHNsb3dwYXRoKVxuIik7CisJYnAtPm1zaXhfdGFibGVbMF0uZW50cnkgPSBpZ3VfdmVjOworCURQKE5FVElGX01TR19JRlVQLCAibXNpeF90YWJsZVswXS5lbnRyeSA9ICVkIChzbG93cGF0aClcbiIsIGlndV92ZWMpOwogCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKLQkJaW50IGlndV92ZWMgPSBvZmZzZXQgKyBpICsgQlBfTF9JRChicCk7Ci0KKwkJaWd1X3ZlYyA9IEJQX0xfSUQoYnApICsgb2Zmc2V0ICsgaTsKIAkJYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0uZW50cnkgPSBpZ3VfdmVjOwogCQlEUChORVRJRl9NU0dfSUZVUCwgIm1zaXhfdGFibGVbJWRdLmVudHJ5ID0gJWQgIgogCQkgICAiKGZhc3RwYXRoICMldSlcbiIsIGkgKyBvZmZzZXQsIGlndV92ZWMsIGkpOwogCX0KIAogCXJjID0gcGNpX2VuYWJsZV9tc2l4KGJwLT5wZGV2LCAmYnAtPm1zaXhfdGFibGVbMF0sCi0JCQkgICAgIGJwLT5udW1fcXVldWVzICsgb2Zmc2V0KTsKKwkJCSAgICAgQk5YMlhfTlVNX1FVRVVFUyhicCkgKyBvZmZzZXQpOwogCWlmIChyYykgewotCQlEUChORVRJRl9NU0dfSUZVUCwgIk1TSS1YIGlzIG5vdCBhdHRhaW5hYmxlXG4iKTsKLQkJcmV0dXJuIC0xOworCQlEUChORVRJRl9NU0dfSUZVUCwgIk1TSS1YIGlzIG5vdCBhdHRhaW5hYmxlICByYyAlZFxuIiwgcmMpOworCQlyZXR1cm4gcmM7CiAJfQorCiAJYnAtPmZsYWdzIHw9IFVTSU5HX01TSVhfRkxBRzsKIAogCXJldHVybiAwOwpAQCAtNjA5MiwyNyArNjQ4MSw2MCBAQAogCX0KIAogCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2ldOworCisJCXNwcmludGYoZnAtPm5hbWUsICIlcy5mcCVkIiwgYnAtPmRldi0+bmFtZSwgaSk7CiAJCXJjID0gcmVxdWVzdF9pcnEoYnAtPm1zaXhfdGFibGVbaSArIG9mZnNldF0udmVjdG9yLAotCQkJCSBibngyeF9tc2l4X2ZwX2ludCwgMCwKLQkJCQkgYnAtPmRldi0+bmFtZSwgJmJwLT5mcFtpXSk7CisJCQkJIGJueDJ4X21zaXhfZnBfaW50LCAwLCBmcC0+bmFtZSwgZnApOwogCQlpZiAocmMpIHsKLQkJCUJOWDJYX0VSUigicmVxdWVzdCBmcCAjJWQgaXJxIGZhaWxlZCAgcmMgLSVkXG4iLAotCQkJCSAgaSArIG9mZnNldCwgLXJjKTsKKwkJCUJOWDJYX0VSUigicmVxdWVzdCBmcCAjJWQgaXJxIGZhaWxlZCAgcmMgJWRcbiIsIGksIHJjKTsKIAkJCWJueDJ4X2ZyZWVfbXNpeF9pcnFzKGJwKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotCQlibngyeF9mcChicCwgaSwgc3RhdGUpID0gQk5YMlhfRlBfU1RBVEVfSVJROworCQlmcC0+c3RhdGUgPSBCTlgyWF9GUF9TVEFURV9JUlE7CiAJfQogCisJaSA9IEJOWDJYX05VTV9RVUVVRVMoYnApOworCWlmIChpc19tdWx0aShicCkpCisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCSAgICAgICAiJXM6IHVzaW5nIE1TSS1YICBJUlFzOiBzcCAlZCAgZnAgJWQgLSAlZFxuIiwKKwkJICAgICAgIGJwLT5kZXYtPm5hbWUsIGJwLT5tc2l4X3RhYmxlWzBdLnZlY3RvciwKKwkJICAgICAgIGJwLT5tc2l4X3RhYmxlW29mZnNldF0udmVjdG9yLAorCQkgICAgICAgYnAtPm1zaXhfdGFibGVbb2Zmc2V0ICsgaSAtIDFdLnZlY3Rvcik7CisJZWxzZQorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHVzaW5nIE1TSS1YICBJUlFzOiBzcCAlZCAgZnAgJWRcbiIsCisJCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsCisJCSAgICAgICBicC0+bXNpeF90YWJsZVtvZmZzZXQgKyBpIC0gMV0udmVjdG9yKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJueDJ4X2VuYWJsZV9tc2koc3RydWN0IGJueDJ4ICpicCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHBjaV9lbmFibGVfbXNpKGJwLT5wZGV2KTsKKwlpZiAocmMpIHsKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJNU0kgaXMgbm90IGF0dGFpbmFibGVcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCWJwLT5mbGFncyB8PSBVU0lOR19NU0lfRkxBRzsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X3JlcV9pcnEoc3RydWN0IGJueDJ4ICpicCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIAotCXJjID0gcmVxdWVzdF9pcnEoYnAtPnBkZXYtPmlycSwgYm54MnhfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKKwlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpCisJCWZsYWdzID0gMDsKKwllbHNlCisJCWZsYWdzID0gSVJRRl9TSEFSRUQ7CisKKwlyYyA9IHJlcXVlc3RfaXJxKGJwLT5wZGV2LT5pcnEsIGJueDJ4X2ludGVycnVwdCwgZmxhZ3MsCiAJCQkgYnAtPmRldi0+bmFtZSwgYnAtPmRldik7CiAJaWYgKCFyYykKIAkJYm54MnhfZnAoYnAsIDAsIHN0YXRlKSA9IEJOWDJYX0ZQX1NUQVRFX0lSUTsKQEAgLTYxMjQsNyArNjU0Niw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJbmFwaV9lbmFibGUoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CiB9CiAKQEAgLTYxMzIsNyArNjU1NCw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJbmFwaV9kaXNhYmxlKCZibngyeF9mcChicCwgaSwgbmFwaSkpOwogfQogCkBAIC02MTQwLDEwICs2NTYyLDEwIEBACiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmJwLT5pbnRyX3NlbSkpIHsKIAkJaWYgKG5ldGlmX3J1bm5pbmcoYnAtPmRldikpIHsKLQkJCWlmIChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikKLQkJCQluZXRpZl93YWtlX3F1ZXVlKGJwLT5kZXYpOwogCQkJYm54MnhfbmFwaV9lbmFibGUoYnApOwogCQkJYm54MnhfaW50X2VuYWJsZShicCk7CisJCQlpZiAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pCisJCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGJwLT5kZXYpOwogCQl9CiAJfQogfQpAQCAtNjE1MiwxMCArNjU3NCw4IEBACiB7CiAJYm54MnhfaW50X2Rpc2FibGVfc3luYyhicCwgZGlzYWJsZV9odyk7CiAJYm54MnhfbmFwaV9kaXNhYmxlKGJwKTsKLQlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgewotCQluZXRpZl90eF9kaXNhYmxlKGJwLT5kZXYpOwotCQlicC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CS8qIHByZXZlbnQgdHggdGltZW91dCAqLwotCX0KKwluZXRpZl90eF9kaXNhYmxlKGJwLT5kZXYpOworCWJwLT5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsJLyogcHJldmVudCB0eCB0aW1lb3V0ICovCiB9CiAKIC8qCkBAIC02MTcxLDkgKzY1OTEsOSBAQAogCSAqIHVuaWNhc3RzIDAtMzE6cG9ydDAgMzItNjM6cG9ydDEKIAkgKiBtdWx0aWNhc3QgNjQtMTI3OnBvcnQwIDEyOC0xOTE6cG9ydDEKIAkgKi8KLQljb25maWctPmhkci5sZW5ndGhfNmIgPSAyOworCWNvbmZpZy0+aGRyLmxlbmd0aCA9IDI7CiAJY29uZmlnLT5oZHIub2Zmc2V0ID0gcG9ydCA/IDMyIDogMDsKLQljb25maWctPmhkci5jbGllbnRfaWQgPSBCUF9DTF9JRChicCk7CisJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gYnAtPmZwLT5jbF9pZDsKIAljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOwogCiAJLyogcHJpbWFyeSBNQUMgKi8KQEAgLTYxOTgsOSArNjYxOCw5IEBACiAJICAgY29uZmlnLT5jb25maWdfdGFibGVbMF0uY2FtX2VudHJ5LmxzYl9tYWNfYWRkcik7CiAKIAkvKiBicm9hZGNhc3QgKi8KLQljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubXNiX21hY19hZGRyID0gMHhmZmZmOwotCWNvbmZpZy0+Y29uZmlnX3RhYmxlWzFdLmNhbV9lbnRyeS5taWRkbGVfbWFjX2FkZHIgPSAweGZmZmY7Ci0JY29uZmlnLT5jb25maWdfdGFibGVbMV0uY2FtX2VudHJ5LmxzYl9tYWNfYWRkciA9IDB4ZmZmZjsKKwljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubXNiX21hY19hZGRyID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsKKwljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubWlkZGxlX21hY19hZGRyID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsKKwljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkubHNiX21hY19hZGRyID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsKIAljb25maWctPmNvbmZpZ190YWJsZVsxXS5jYW1fZW50cnkuZmxhZ3MgPSBjcHVfdG9fbGUxNihwb3J0KTsKIAlpZiAoc2V0KQogCQljb25maWctPmNvbmZpZ190YWJsZVsxXS50YXJnZXRfdGFibGVfZW50cnkuZmxhZ3MgPQpAQCAtNjIyOSw5ICs2NjQ5LDkgQEAKIAkgKiB1bmljYXN0czogYnkgZnVuYyBudW1iZXIKIAkgKiBtdWx0aWNhc3Q6IDIwK0ZVTkMqMjAsIDIwIGVhY2gKIAkgKi8KLQljb25maWctPmhkci5sZW5ndGhfNmIgPSAxOworCWNvbmZpZy0+aGRyLmxlbmd0aCA9IDE7CiAJY29uZmlnLT5oZHIub2Zmc2V0ID0gQlBfRlVOQyhicCk7Ci0JY29uZmlnLT5oZHIuY2xpZW50X2lkID0gQlBfQ0xfSUQoYnApOworCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IGJwLT5mcC0+Y2xfaWQ7CiAJY29uZmlnLT5oZHIucmVzZXJ2ZWQxID0gMDsKIAogCS8qIHByaW1hcnkgTUFDICovCkBAIC02MjY1LDcgKzY2ODUsNyBAQAogCQkJICAgICBpbnQgKnN0YXRlX3AsIGludCBwb2xsKQogewogCS8qIGNhbiB0YWtlIGEgd2hpbGUgaWYgYW55IHBvcnQgaXMgcnVubmluZyAqLwotCWludCBjbnQgPSA1MDA7CisJaW50IGNudCA9IDUwMDA7CiAKIAlEUChORVRJRl9NU0dfSUZVUCwgIiVzIGZvciBzdGF0ZSB0byBiZWNvbWUgJXggb24gSURYIFslZF1cbiIsCiAJICAgcG9sbCA/ICJwb2xsaW5nIiA6ICJ3YWl0aW5nIiwgc3RhdGUsIGlkeCk7CkBAIC02MjgzLDggKzY3MDMsMTIgQEAKIAkJfQogCiAJCW1iKCk7IC8qIHN0YXRlIGlzIGNoYW5nZWQgYnkgYm54Mnhfc3BfZXZlbnQoKSAqLwotCQlpZiAoKnN0YXRlX3AgPT0gc3RhdGUpCisJCWlmICgqc3RhdGVfcCA9PSBzdGF0ZSkgeworI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKKwkJCURQKE5FVElGX01TR19JRlVQLCAiZXhpdCAgKGNudCAlZClcbiIsIDUwMDAgLSBjbnQpOworI2VuZGlmCiAJCQlyZXR1cm4gMDsKKwkJfQogCiAJCW1zbGVlcCgxKTsKIAl9CkBAIC02MzE3LDE5ICs2NzQxLDY4IEBACiAKIHN0YXRpYyBpbnQgYm54Mnhfc2V0dXBfbXVsdGkoc3RydWN0IGJueDJ4ICpicCwgaW50IGluZGV4KQogeworCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnAgPSAmYnAtPmZwW2luZGV4XTsKKwogCS8qIHJlc2V0IElHVSBzdGF0ZSAqLwotCWJueDJ4X2Fja19zYihicCwgYnAtPmZwW2luZGV4XS5zYl9pZCwgQ1NUT1JNX0lELCAwLCBJR1VfSU5UX0VOQUJMRSwgMCk7CisJYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIENTVE9STV9JRCwgMCwgSUdVX0lOVF9FTkFCTEUsIDApOwogCiAJLyogU0VUVVAgcmFtcm9kICovCi0JYnAtPmZwW2luZGV4XS5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX09QRU5JTkc7Ci0JYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQLCBpbmRleCwgMCwgaW5kZXgsIDApOworCWZwLT5zdGF0ZSA9IEJOWDJYX0ZQX1NUQVRFX09QRU5JTkc7CisJYm54Mnhfc3BfcG9zdChicCwgUkFNUk9EX0NNRF9JRF9FVEhfQ0xJRU5UX1NFVFVQLCBpbmRleCwgMCwKKwkJICAgICAgZnAtPmNsX2lkLCAwKTsKIAogCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gKi8KIAlyZXR1cm4gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX09QRU4sIGluZGV4LAotCQkJCSAmKGJwLT5mcFtpbmRleF0uc3RhdGUpLCAwKTsKKwkJCQkgJihmcC0+c3RhdGUpLCAwKTsKIH0KIAogc3RhdGljIGludCBibngyeF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CisKK3N0YXRpYyB2b2lkIGJueDJ4X3NldF9pbnRfbW9kZShzdHJ1Y3QgYm54MnggKmJwKQoreworCWludCBudW1fcXVldWVzOworCisJc3dpdGNoIChpbnRfbW9kZSkgeworCWNhc2UgSU5UX01PREVfSU5UeDoKKwljYXNlIElOVF9NT0RFX01TSToKKwkJbnVtX3F1ZXVlcyA9IDE7CisJCWJwLT5udW1fcnhfcXVldWVzID0gbnVtX3F1ZXVlczsKKwkJYnAtPm51bV90eF9xdWV1ZXMgPSBudW1fcXVldWVzOworCQlEUChORVRJRl9NU0dfSUZVUCwKKwkJICAgInNldCBudW1iZXIgb2YgcXVldWVzIHRvICVkXG4iLCBudW1fcXVldWVzKTsKKwkJYnJlYWs7CisKKwljYXNlIElOVF9NT0RFX01TSVg6CisJZGVmYXVsdDoKKwkJaWYgKGJwLT5tdWx0aV9tb2RlID09IEVUSF9SU1NfTU9ERV9SRUdVTEFSKQorCQkJbnVtX3F1ZXVlcyA9IG1pbl90KHUzMiwgbnVtX29ubGluZV9jcHVzKCksCisJCQkJCSAgIEJOWDJYX01BWF9RVUVVRVMoYnApKTsKKwkJZWxzZQorCQkJbnVtX3F1ZXVlcyA9IDE7CisJCWJwLT5udW1fcnhfcXVldWVzID0gbnVtX3F1ZXVlczsKKwkJYnAtPm51bV90eF9xdWV1ZXMgPSBudW1fcXVldWVzOworCQlEUChORVRJRl9NU0dfSUZVUCwgInNldCBudW1iZXIgb2YgcnggcXVldWVzIHRvICVkIgorCQkgICAiICBudW1iZXIgb2YgdHggcXVldWVzIHRvICVkXG4iLAorCQkgICBicC0+bnVtX3J4X3F1ZXVlcywgYnAtPm51bV90eF9xdWV1ZXMpOworCQkvKiBpZiB3ZSBjYW4ndCB1c2UgTVNJLVggd2Ugb25seSBuZWVkIG9uZSBmcCwKKwkJICogc28gdHJ5IHRvIGVuYWJsZSBNU0ktWCB3aXRoIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGZwJ3MKKwkJICogYW5kIGZhbGxiYWNrIHRvIE1TSSBvciBsZWdhY3kgSU5UeCB3aXRoIG9uZSBmcAorCQkgKi8KKwkJaWYgKGJueDJ4X2VuYWJsZV9tc2l4KGJwKSkgeworCQkJLyogZmFpbGVkIHRvIGVuYWJsZSBNU0ktWCAqLworCQkJbnVtX3F1ZXVlcyA9IDE7CisJCQlicC0+bnVtX3J4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CisJCQlicC0+bnVtX3R4X3F1ZXVlcyA9IG51bV9xdWV1ZXM7CisJCQlpZiAoYnAtPm11bHRpX21vZGUpCisJCQkJQk5YMlhfRVJSKCJNdWx0aSByZXF1ZXN0ZWQgYnV0IGZhaWxlZCB0byAiCisJCQkJCSAgImVuYWJsZSBNU0ktWCAgc2V0IG51bWJlciBvZiAiCisJCQkJCSAgInF1ZXVlcyB0byAlZFxuIiwgbnVtX3F1ZXVlcyk7CisJCX0KKwkJYnJlYWs7CisJfQorCWJwLT5kZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA9IGJwLT5udW1fdHhfcXVldWVzOworfQorCiBzdGF0aWMgdm9pZCBibngyeF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8KQEAgLTYzMzgsNTYgKzY4MTEsMjggQEAKIAl1MzIgbG9hZF9jb2RlOwogCWludCBpLCByYyA9IDA7CiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgorCURQKE5FVElGX01TR19JRlVQLCAiZW50ZXIgIGxvYWRfbW9kZSAlZFxuIiwgbG9hZF9tb2RlKTsKIAlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKIAkJcmV0dXJuIC1FUEVSTTsKICNlbmRpZgogCiAJYnAtPnN0YXRlID0gQk5YMlhfU1RBVEVfT1BFTklOR19XQUlUNF9MT0FEOwogCi0JaWYgKHVzZV9pbnRhKSB7Ci0JCWJwLT5udW1fcXVldWVzID0gMTsKLQotCX0gZWxzZSB7Ci0JCWlmICgodXNlX211bHRpID4gMSkgJiYgKHVzZV9tdWx0aSA8PSBCUF9NQVhfUVVFVUVTKGJwKSkpCi0JCQkvKiB1c2VyIHJlcXVlc3RlZCBudW1iZXIgKi8KLQkJCWJwLT5udW1fcXVldWVzID0gdXNlX211bHRpOwotCi0JCWVsc2UgaWYgKHVzZV9tdWx0aSkKLQkJCWJwLT5udW1fcXVldWVzID0gbWluX3QodTMyLCBudW1fb25saW5lX2NwdXMoKSwKLQkJCQkJICAgICAgIEJQX01BWF9RVUVVRVMoYnApKTsKLQkJZWxzZQotCQkJYnAtPm51bV9xdWV1ZXMgPSAxOwotCi0JCURQKE5FVElGX01TR19JRlVQLAotCQkgICAic2V0IG51bWJlciBvZiBxdWV1ZXMgdG8gJWRcbiIsIGJwLT5udW1fcXVldWVzKTsKLQotCQkvKiBpZiB3ZSBjYW4ndCB1c2UgTVNJLVggd2Ugb25seSBuZWVkIG9uZSBmcCwKLQkJICogc28gdHJ5IHRvIGVuYWJsZSBNU0ktWCB3aXRoIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGZwJ3MKLQkJICogYW5kIGZhbGxiYWNrIHRvIE1TSSBvciBsZWdhY3kgSU5UeCB3aXRoIG9uZSBmcAotCQkgKi8KLQkJcmMgPSBibngyeF9lbmFibGVfbXNpeChicCk7Ci0JCWlmIChyYykgewotCQkJLyogZmFpbGVkIHRvIGVuYWJsZSBNU0ktWCAqLwotCQkJYnAtPm51bV9xdWV1ZXMgPSAxOwotCQkJaWYgKHVzZV9tdWx0aSkKLQkJCQlCTlgyWF9FUlIoIk11bHRpIHJlcXVlc3RlZCBidXQgZmFpbGVkIgotCQkJCQkgICIgdG8gZW5hYmxlIE1TSS1YXG4iKTsKLQkJfQotCX0KKwlibngyeF9zZXRfaW50X21vZGUoYnApOwogCiAJaWYgKGJueDJ4X2FsbG9jX21lbShicCkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCWJueDJ4X2ZwKGJwLCBpLCBkaXNhYmxlX3RwYSkgPQogCQkJCQkoKGJwLT5mbGFncyAmIFRQQV9FTkFCTEVfRkxBRykgPT0gMCk7CiAKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJbmV0aWZfbmFwaV9hZGQoYnAtPmRldiwgJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSwKIAkJCSAgICAgICBibngyeF9wb2xsLCAxMjgpOwogCiAjaWZkZWYgQk5YMlhfU1RPUF9PTl9FUlJPUgotCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAKIAkJZnAtPnBvbGxfbm9fd29yayA9IDA7CkBAIC02NDA1LDE0ICs2ODUwLDIyIEBACiAJCQlwY2lfZGlzYWJsZV9tc2l4KGJwLT5wZGV2KTsKIAkJCWdvdG8gbG9hZF9lcnJvcjE7CiAJCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiB1c2luZyBNU0ktWFxuIiwgYnAtPmRldi0+bmFtZSk7CiAJfSBlbHNlIHsKKwkJaWYgKChyYyAhPSAtRU5PTUVNKSAmJiAoaW50X21vZGUgIT0gSU5UX01PREVfSU5UeCkpCisJCQlibngyeF9lbmFibGVfbXNpKGJwKTsKIAkJYm54MnhfYWNrX2ludChicCk7CiAJCXJjID0gYm54MnhfcmVxX2lycShicCk7CiAJCWlmIChyYykgewogCQkJQk5YMlhfRVJSKCJJUlEgcmVxdWVzdCBmYWlsZWQgIHJjICVkLCBhYm9ydGluZ1xuIiwgcmMpOworCQkJaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKQorCQkJCXBjaV9kaXNhYmxlX21zaShicC0+cGRldik7CiAJCQlnb3RvIGxvYWRfZXJyb3IxOwogCQl9CisJCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykgeworCQkJYnAtPmRldi0+aXJxID0gYnAtPnBkZXYtPmlycTsKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogdXNpbmcgTVNJICBJUlEgJWRcbiIsCisJCQkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPnBkZXYtPmlycSk7CisJCX0KIAl9CiAKIAkvKiBTZW5kIExPQURfUkVRVUVTVCBjb21tYW5kIHRvIE1DUApAQCAtNjQzNSwxMSArNjg4OCwxMSBAQAogCX0gZWxzZSB7CiAJCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAKLQkJRFAoTkVUSUZfTVNHX0lGVVAsICJOTyBNQ1AgbG9hZCBjb3VudHMgYmVmb3JlIHVzICVkLCAlZCwgJWRcbiIsCisJCURQKE5FVElGX01TR19JRlVQLCAiTk8gTUNQIC0gbG9hZCBjb3VudHMgICAgICAlZCwgJWQsICVkXG4iLAogCQkgICBsb2FkX2NvdW50WzBdLCBsb2FkX2NvdW50WzFdLCBsb2FkX2NvdW50WzJdKTsKIAkJbG9hZF9jb3VudFswXSsrOwogCQlsb2FkX2NvdW50WzEgKyBwb3J0XSsrOwotCQlEUChORVRJRl9NU0dfSUZVUCwgIk5PIE1DUCBuZXcgbG9hZCBjb3VudHMgICAgICAgJWQsICVkLCAlZFxuIiwKKwkJRFAoTkVUSUZfTVNHX0lGVVAsICJOTyBNQ1AgLSBuZXcgbG9hZCBjb3VudHMgICVkLCAlZCwgJWRcbiIsCiAJCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOwogCQlpZiAobG9hZF9jb3VudFswXSA9PSAxKQogCQkJbG9hZF9jb2RlID0gRldfTVNHX0NPREVfRFJWX0xPQURfQ09NTU9OOwpAQCAtNjQ4Niw3ICs2OTM5LDcgQEAKIAogCWlmIChDSElQX0lTX0UxSChicCkpCiAJCWlmIChicC0+bWZfY29uZmlnICYgRlVOQ19NRl9DRkdfRlVOQ19ESVNBQkxFRCkgewotCQkJQk5YMlhfRVJSKCIhISEgIG1mX2NmZyBmdW5jdGlvbiBkaXNhYmxlZFxuIik7CisJCQlEUChORVRJRl9NU0dfSUZVUCwgIm1mX2NmZyBmdW5jdGlvbiBkaXNhYmxlZFxuIik7CiAJCQlicC0+c3RhdGUgPSBCTlgyWF9TVEFURV9ESVNBQkxFRDsKIAkJfQogCkBAIC02NTAzLDE5ICs2OTU2LDE5IEBACiAJCWJueDJ4X3NldF9tYWNfYWRkcl9lMWgoYnAsIDEpOwogCiAJaWYgKGJwLT5wb3J0LnBtZikKLQkJYm54MnhfaW5pdGlhbF9waHlfaW5pdChicCk7CisJCWJueDJ4X2luaXRpYWxfcGh5X2luaXQoYnAsIGxvYWRfbW9kZSk7CiAKIAkvKiBTdGFydCBmYXN0IHBhdGggKi8KIAlzd2l0Y2ggKGxvYWRfbW9kZSkgewogCWNhc2UgTE9BRF9OT1JNQUw6CiAJCS8qIFR4IHF1ZXVlIHNob3VsZCBiZSBvbmx5IHJlZW5hYmxlZCAqLwotCQluZXRpZl93YWtlX3F1ZXVlKGJwLT5kZXYpOworCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoYnAtPmRldik7CiAJCS8qIEluaXRpYWxpemUgdGhlIHJlY2VpdmUgZmlsdGVyLiAqLwogCQlibngyeF9zZXRfcnhfbW9kZShicC0+ZGV2KTsKIAkJYnJlYWs7CiAKIAljYXNlIExPQURfT1BFTjoKLQkJbmV0aWZfc3RhcnRfcXVldWUoYnAtPmRldik7CisJCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoYnAtPmRldik7CiAJCS8qIEluaXRpYWxpemUgdGhlIHJlY2VpdmUgZmlsdGVyLiAqLwogCQlibngyeF9zZXRfcnhfbW9kZShicC0+ZGV2KTsKIAkJYnJlYWs7CkBAIC02NTQ4LDMzICs3MDAxLDMyIEBACiAJYnAtPnBvcnQucG1mID0gMDsKIAkvKiBGcmVlIFNLQnMsIFNHRXMsIFRQQSBwb29sIGFuZCBkcml2ZXIgaW50ZXJuYWxzICovCiAJYm54MnhfZnJlZV9za2JzKGJwKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJYm54MnhfZnJlZV9yeF9zZ2VfcmFuZ2UoYnAsIGJwLT5mcCArIGksIE5VTV9SWF9TR0UpOwogbG9hZF9lcnJvcjI6CiAJLyogUmVsZWFzZSBJUlFzICovCiAJYm54MnhfZnJlZV9pcnEoYnApOwogbG9hZF9lcnJvcjE6CiAJYm54MnhfbmFwaV9kaXNhYmxlKGJwKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJbmV0aWZfbmFwaV9kZWwoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CiAJYm54MnhfZnJlZV9tZW0oYnApOwogCi0JLyogVEJEIHdlIHJlYWxseSBuZWVkIHRvIHJlc2V0IHRoZSBjaGlwCi0JICAgaWYgd2Ugd2FudCB0byByZWNvdmVyIGZyb20gdGhpcyAqLwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBibngyeF9zdG9wX211bHRpKHN0cnVjdCBibngyeCAqYnAsIGludCBpbmRleCkKIHsKKwlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwID0gJmJwLT5mcFtpbmRleF07CiAJaW50IHJjOwogCiAJLyogaGFsdCB0aGUgY29ubmVjdGlvbiAqLwotCWJwLT5mcFtpbmRleF0uc3RhdGUgPSBCTlgyWF9GUF9TVEFURV9IQUxUSU5HOwotCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0hBTFQsIGluZGV4LCAwLCBpbmRleCwgMCk7CisJZnAtPnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVElORzsKKwlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9IQUxULCBpbmRleCwgMCwgZnAtPmNsX2lkLCAwKTsKIAogCS8qIFdhaXQgZm9yIGNvbXBsZXRpb24gKi8KIAlyYyA9IGJueDJ4X3dhaXRfcmFtcm9kKGJwLCBCTlgyWF9GUF9TVEFURV9IQUxURUQsIGluZGV4LAotCQkJICAgICAgICYoYnAtPmZwW2luZGV4XS5zdGF0ZSksIDEpOworCQkJICAgICAgICYoZnAtPnN0YXRlKSwgMSk7CiAJaWYgKHJjKSAvKiB0aW1lb3V0ICovCiAJCXJldHVybiByYzsKIApAQCAtNjU4MywxMyArNzAzNSwxMyBAQAogCiAJLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwogCXJjID0gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX0NMT1NFRCwgaW5kZXgsCi0JCQkgICAgICAgJihicC0+ZnBbaW5kZXhdLnN0YXRlKSwgMSk7CisJCQkgICAgICAgJihmcC0+c3RhdGUpLCAxKTsKIAlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgYm54Mnhfc3RvcF9sZWFkaW5nKHN0cnVjdCBibngyeCAqYnApCiB7Ci0JdTE2IGRzYl9zcF9wcm9kX2lkeDsKKwlfX2xlMTYgZHNiX3NwX3Byb2RfaWR4OwogCS8qIGlmIHRoZSBvdGhlciBwb3J0IGlzIGhhbmRsaW5nIHRyYWZmaWMsCiAJICAgdGhpcyBjYW4gdGFrZSBhIGxvdCBvZiB0aW1lICovCiAJaW50IGNudCA9IDUwMDsKQEAgLTY1OTksNyArNzA1MSw3IEBACiAKIAkvKiBTZW5kIEhBTFQgcmFtcm9kICovCiAJYnAtPmZwWzBdLnN0YXRlID0gQk5YMlhfRlBfU1RBVEVfSEFMVElORzsKLQlibngyeF9zcF9wb3N0KGJwLCBSQU1ST0RfQ01EX0lEX0VUSF9IQUxULCAwLCAwLCBCUF9DTF9JRChicCksIDApOworCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX0hBTFQsIDAsIDAsIGJwLT5mcC0+Y2xfaWQsIDApOwogCiAJLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwogCXJjID0gYm54Mnhfd2FpdF9yYW1yb2QoYnAsIEJOWDJYX0ZQX1NUQVRFX0hBTFRFRCwgMCwKQEAgLTY2MjMsOSArNzA3NSw4IEBACiAJCQkgICAqYnAtPmRzYl9zcF9wcm9kLCBkc2Jfc3BfcHJvZF9pZHgpOwogI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKIAkJCWJueDJ4X3BhbmljKCk7Ci0jZWxzZQotCQkJcmMgPSAtRUJVU1k7CiAjZW5kaWYKKwkJCXJjID0gLUVCVVNZOwogCQkJYnJlYWs7CiAJCX0KIAkJY250LS07CkBAIC02NjQ4LDggKzcwOTksNiBAQAogCVJFR19XUihicCwgSENfUkVHX0xFQURJTkdfRURHRV8wICsgcG9ydCo4LCAwKTsKIAlSRUdfV1IoYnAsIEhDX1JFR19UUkFJTElOR19FREdFXzAgKyBwb3J0KjgsIDApOwogCi0JUkVHX1dSKGJwLCBIQ19SRUdfQ09ORklHXzAgKyBwb3J0KjQsIDB4MTAwMCk7Ci0KIAkvKiBDbGVhciBJTFQgKi8KIAliYXNlID0gRlVOQ19JTFRfQkFTRShmdW5jKTsKIAlmb3IgKGkgPSBiYXNlOyBpIDwgYmFzZSArIElMVF9QRVJfRlVOQzsgaSsrKQpAQCAtNjczMSwxNSArNzE4MCwxNCBAQAogCS8qIFJlbGVhc2UgSVJRcyAqLwogCWJueDJ4X2ZyZWVfaXJxKGJwKTsKIAotCS8qIFdhaXQgdW50aWwgdHggZmFzdCBwYXRoIHRhc2tzIGNvbXBsZXRlICovCi0JZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkvKiBXYWl0IHVudGlsIHR4IGZhc3RwYXRoIHRhc2tzIGNvbXBsZXRlICovCisJZm9yX2VhY2hfdHhfcXVldWUoYnAsIGkpIHsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCA9ICZicC0+ZnBbaV07CiAKIAkJY250ID0gMTAwMDsKLQkJc21wX3JtYigpOwogCQl3aGlsZSAoYm54MnhfaGFzX3R4X3dvcmtfdW5sb2FkKGZwKSkgewogCi0JCQlibngyeF90eF9pbnQoZnAsIDEwMDApOworCQkJYm54MnhfdHhfaW50KGZwKTsKIAkJCWlmICghY250KSB7CiAJCQkJQk5YMlhfRVJSKCJ0aW1lb3V0IHdhaXRpbmcgZm9yIHF1ZXVlWyVkXVxuIiwKIAkJCQkJICBpKTsKQEAgLTY3NTIsNyArNzIwMCw2IEBACiAJCQl9CiAJCQljbnQtLTsKIAkJCW1zbGVlcCgxKTsKLQkJCXNtcF9ybWIoKTsKIAkJfQogCX0KIAkvKiBHaXZlIEhXIHRpbWUgdG8gZGlzY2FyZCBvbGQgdHggbWVzc2FnZXMgKi8KQEAgLTY3NjQsMTUgKzcyMTEsMTUgQEAKIAogCQlibngyeF9zZXRfbWFjX2FkZHJfZTEoYnAsIDApOwogCi0JCWZvciAoaSA9IDA7IGkgPCBjb25maWctPmhkci5sZW5ndGhfNmI7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+aGRyLmxlbmd0aDsgaSsrKQogCQkJQ0FNX0lOVkFMSURBVEUoY29uZmlnLT5jb25maWdfdGFibGVbaV0pOwogCi0JCWNvbmZpZy0+aGRyLmxlbmd0aF82YiA9IGk7CisJCWNvbmZpZy0+aGRyLmxlbmd0aCA9IGk7CiAJCWlmIChDSElQX1JFVl9JU19TTE9XKGJwKSkKIAkJCWNvbmZpZy0+aGRyLm9mZnNldCA9IEJOWDJYX01BWF9FTVVMX01VTFRJKigxICsgcG9ydCk7CiAJCWVsc2UKIAkJCWNvbmZpZy0+aGRyLm9mZnNldCA9IEJOWDJYX01BWF9NVUxUSUNBU1QqKDEgKyBwb3J0KTsKLQkJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gQlBfQ0xfSUQoYnApOworCQljb25maWctPmhkci5jbGllbnRfaWQgPSBicC0+ZnAtPmNsX2lkOwogCQljb25maWctPmhkci5yZXNlcnZlZDEgPSAwOwogCiAJCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMsIDAsCkBAIC02ODM2LDExICs3MjgzLDExIEBACiAJaWYgKCFCUF9OT01DUChicCkpCiAJCXJlc2V0X2NvZGUgPSBibngyeF9md19jb21tYW5kKGJwLCByZXNldF9jb2RlKTsKIAllbHNlIHsKLQkJRFAoTkVUSUZfTVNHX0lGRE9XTiwgIk5PIE1DUCBsb2FkIGNvdW50cyAgICAgICVkLCAlZCwgJWRcbiIsCisJCURQKE5FVElGX01TR19JRkRPV04sICJOTyBNQ1AgLSBsb2FkIGNvdW50cyAgICAgICVkLCAlZCwgJWRcbiIsCiAJCSAgIGxvYWRfY291bnRbMF0sIGxvYWRfY291bnRbMV0sIGxvYWRfY291bnRbMl0pOwogCQlsb2FkX2NvdW50WzBdLS07CiAJCWxvYWRfY291bnRbMSArIHBvcnRdLS07Ci0JCURQKE5FVElGX01TR19JRkRPV04sICJOTyBNQ1AgbmV3IGxvYWQgY291bnRzICAlZCwgJWQsICVkXG4iLAorCQlEUChORVRJRl9NU0dfSUZET1dOLCAiTk8gTUNQIC0gbmV3IGxvYWQgY291bnRzICAlZCwgJWQsICVkXG4iLAogCQkgICBsb2FkX2NvdW50WzBdLCBsb2FkX2NvdW50WzFdLCBsb2FkX2NvdW50WzJdKTsKIAkJaWYgKGxvYWRfY291bnRbMF0gPT0gMCkKIAkJCXJlc2V0X2NvZGUgPSBGV19NU0dfQ09ERV9EUlZfVU5MT0FEX0NPTU1PTjsKQEAgLTY4NjAsMTMgKzczMDcsMTQgQEAKIAkvKiBSZXBvcnQgVU5MT0FEX0RPTkUgdG8gTUNQICovCiAJaWYgKCFCUF9OT01DUChicCkpCiAJCWJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9VTkxPQURfRE9ORSk7CisKIAlicC0+cG9ydC5wbWYgPSAwOwogCiAJLyogRnJlZSBTS0JzLCBTR0VzLCBUUEEgcG9vbCBhbmQgZHJpdmVyIGludGVybmFscyAqLwogCWJueDJ4X2ZyZWVfc2ticyhicCk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCWJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKGJwLCBicC0+ZnAgKyBpLCBOVU1fUlhfU0dFKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJbmV0aWZfbmFwaV9kZWwoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CiAJYm54MnhfZnJlZV9tZW0oYnApOwogCkBAIC02OTA4LDYgKzczNTYsNjQgQEAKICAqIEluaXQgc2VydmljZSBmdW5jdGlvbnMKICAqLwogCitzdGF0aWMgaW5saW5lIHUzMiBibngyeF9nZXRfcHJldGVuZF9yZWcoc3RydWN0IGJueDJ4ICpicCwgaW50IGZ1bmMpCit7CisJc3dpdGNoIChmdW5jKSB7CisJY2FzZSAwOiByZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMDsKKwljYXNlIDE6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YxOworCWNhc2UgMjoJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjI7CisJY2FzZSAzOglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GMzsKKwljYXNlIDQ6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y0OworCWNhc2UgNToJcmV0dXJuIFBYUDJfUkVHX1BHTF9QUkVURU5EX0ZVTkNfRjU7CisJY2FzZSA2OglyZXR1cm4gUFhQMl9SRUdfUEdMX1BSRVRFTkRfRlVOQ19GNjsKKwljYXNlIDc6CXJldHVybiBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y3OworCWRlZmF1bHQ6CisJCUJOWDJYX0VSUigiVW5zdXBwb3J0ZWQgZnVuY3Rpb24gaW5kZXg6ICVkXG4iLCBmdW5jKTsKKwkJcmV0dXJuICh1MzIpKC0xKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGJueDJ4X3VuZGlfaW50X2Rpc2FibGVfZTFoKHN0cnVjdCBibngyeCAqYnAsIGludCBvcmlnX2Z1bmMpCit7CisJdTMyIHJlZyA9IGJueDJ4X2dldF9wcmV0ZW5kX3JlZyhicCwgb3JpZ19mdW5jKSwgbmV3X3ZhbDsKKworCS8qIEZsdXNoIGFsbCBvdXRzdGFuZGluZyB3cml0ZXMgKi8KKwltbWlvd2IoKTsKKworCS8qIFByZXRlbmQgdG8gYmUgZnVuY3Rpb24gMCAqLworCVJFR19XUihicCwgcmVnLCAwKTsKKwkvKiBGbHVzaCB0aGUgR1JDIHRyYW5zYWN0aW9uIChpbiB0aGUgY2hpcCkgKi8KKwluZXdfdmFsID0gUkVHX1JEKGJwLCByZWcpOworCWlmIChuZXdfdmFsICE9IDApIHsKKwkJQk5YMlhfRVJSKCJIbW1tLi4uIFByZXRlbmQgcmVnaXN0ZXIgd2Fzbid0IHVwZGF0ZWQ6ICgwLCVkKSFcbiIsCisJCQkgIG5ld192YWwpOworCQlCVUcoKTsKKwl9CisKKwkvKiBGcm9tIG5vdyB3ZSBhcmUgaW4gdGhlICJsaWtlLUUxIiBtb2RlICovCisJYm54MnhfaW50X2Rpc2FibGUoYnApOworCisJLyogRmx1c2ggYWxsIG91dHN0YW5kaW5nIHdyaXRlcyAqLworCW1taW93YigpOworCisJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgZnVudGlvbiBzZXR0aW5ncyAqLworCVJFR19XUihicCwgcmVnLCBvcmlnX2Z1bmMpOworCW5ld192YWwgPSBSRUdfUkQoYnAsIHJlZyk7CisJaWYgKG5ld192YWwgIT0gb3JpZ19mdW5jKSB7CisJCUJOWDJYX0VSUigiSG1tbS4uLiBQcmV0ZW5kIHJlZ2lzdGVyIHdhc24ndCB1cGRhdGVkOiAoJWQsJWQpIVxuIiwKKwkJCSAgb3JpZ19mdW5jLCBuZXdfdmFsKTsKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYm54MnhfdW5kaV9pbnRfZGlzYWJsZShzdHJ1Y3QgYm54MnggKmJwLCBpbnQgZnVuYykKK3sKKwlpZiAoQ0hJUF9JU19FMUgoYnApKQorCQlibngyeF91bmRpX2ludF9kaXNhYmxlX2UxaChicCwgZnVuYyk7CisJZWxzZQorCQlibngyeF9pbnRfZGlzYWJsZShicCk7Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF91bmRpX3VubG9hZChzdHJ1Y3QgYm54MnggKmJwKQogewogCXUzMiB2YWw7CkBAIC02OTU4LDggKzc0NjQsNyBAQAogCQkJLyogbm93IGl0J3Mgc2FmZSB0byByZWxlYXNlIHRoZSBsb2NrICovCiAJCQlibngyeF9yZWxlYXNlX2h3X2xvY2soYnAsIEhXX0xPQ0tfUkVTT1VSQ0VfVU5ESSk7CiAKLQkJCVJFR19XUihicCwgKEJQX1BPUlQoYnApID8gSENfUkVHX0NPTkZJR18xIDoKLQkJCQkgICAgSENfUkVHX0NPTkZJR18wKSwgMHgxMDAwKTsKKwkJCWJueDJ4X3VuZGlfaW50X2Rpc2FibGUoYnAsIGZ1bmMpOwogCiAJCQkvKiBjbG9zZSBpbnB1dCB0cmFmZmljIGFuZCB3YWl0IGZvciBpdCAqLwogCQkJLyogRG8gbm90IHJjdiBwYWNrZXRzIHRvIEJSQiAqLwpAQCAtNzAyNyw2ICs3NTMyLDEzIEBACiAJYnAtPmxpbmtfcGFyYW1zLmNoaXBfaWQgPSBicC0+Y29tbW9uLmNoaXBfaWQ7CiAJQk5YMlhfREVWX0lORk8oImNoaXAgSUQgaXMgMHgleFxuIiwgaWQpOwogCisJdmFsID0gKFJFR19SRChicCwgMHgyODc0KSAmIDB4NTUpOworCWlmICgoYnAtPmNvbW1vbi5jaGlwX2lkICYgMHgxKSB8fAorCSAgICAoQ0hJUF9JU19FMShicCkgJiYgdmFsKSB8fCAoQ0hJUF9JU19FMUgoYnApICYmICh2YWwgPT0gMHg1NSkpKSB7CisJCWJwLT5mbGFncyB8PSBPTkVfUE9SVF9GTEFHOworCQlCTlgyWF9ERVZfSU5GTygic2luZ2xlIHBvcnQgZGV2aWNlXG4iKTsKKwl9CisKIAl2YWwgPSBSRUdfUkQoYnAsIE1DUF9SRUdfTUNQUl9OVk1fQ0ZHNCk7CiAJYnAtPmNvbW1vbi5mbGFzaF9zaXplID0gKE5WUkFNXzFNQl9TSVpFIDw8CiAJCQkJICh2YWwgJiBNQ1BSX05WTV9DRkc0X0ZMQVNIX1NJWkUpKTsKQEAgLTcwNTEsMTUgKzc1NjMsMjEgQEAKIAkJQk5YMlhfRVJSKCJCQUQgTUNQIHZhbGlkaXR5IHNpZ25hdHVyZVxuIik7CiAKIAlicC0+Y29tbW9uLmh3X2NvbmZpZyA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLmNvbmZpZyk7Ci0JYnAtPmNvbW1vbi5ib2FyZCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLmJvYXJkKTsKLQotCUJOWDJYX0RFVl9JTkZPKCJod19jb25maWcgMHglMDh4ICBib2FyZCAweCUwOHhcbiIsCi0JCSAgICAgICBicC0+Y29tbW9uLmh3X2NvbmZpZywgYnAtPmNvbW1vbi5ib2FyZCk7CisJQk5YMlhfREVWX0lORk8oImh3X2NvbmZpZyAweCUwOHhcbiIsIGJwLT5jb21tb24uaHdfY29uZmlnKTsKIAogCWJwLT5saW5rX3BhcmFtcy5od19sZWRfbW9kZSA9ICgoYnAtPmNvbW1vbi5od19jb25maWcgJgogCQkJCQlTSEFSRURfSFdfQ0ZHX0xFRF9NT0RFX01BU0spID4+CiAJCQkJICAgICAgIFNIQVJFRF9IV19DRkdfTEVEX01PREVfU0hJRlQpOwogCisJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzID0gMDsKKwl2YWwgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2ZlYXR1cmVfY29uZmlnLmNvbmZpZyk7CisJaWYgKHZhbCAmIFNIQVJFRF9GRUFUX0NGR19PVkVSUklERV9QUkVFTVBIQVNJU19DRkdfRU5BQkxFRCkKKwkJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzIHw9CisJCQkJRkVBVFVSRV9DT05GSUdfT1ZFUlJJREVfUFJFRU1QSEFTSVNfRU5BQkxFRDsKKwllbHNlCisJCWJwLT5saW5rX3BhcmFtcy5mZWF0dXJlX2NvbmZpZ19mbGFncyAmPQorCQkJCX5GRUFUVVJFX0NPTkZJR19PVkVSUklERV9QUkVFTVBIQVNJU19FTkFCTEVEOworCiAJdmFsID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLmJjX3JldikgPj4gODsKIAlicC0+Y29tbW9uLmJjX3ZlciA9IHZhbDsKIAlCTlgyWF9ERVZfSU5GTygiYmNfdmVyICVYXG4iLCB2YWwpOwpAQCAtNzA3OCw3ICs3NTk2LDcgQEAKIAkJYnAtPmZsYWdzIHw9IE5PX1dPTF9GTEFHOwogCX0KIAlCTlgyWF9ERVZfSU5GTygiJXNXb0wgY2FwYWJsZVxuIiwKLQkJICAgICAgIChicC0+ZmxhZ3MgJiBOT19XT0xfRkxBRykgPyAiTm90ICIgOiAiIik7CisJCSAgICAgICAoYnAtPmZsYWdzICYgTk9fV09MX0ZMQUcpID8gIm5vdCAiIDogIiIpOwogCiAJdmFsID0gU0hNRU1fUkQoYnAsIGRldl9pbmZvLnNoYXJlZF9od19jb25maWcucGFydF9udW0pOwogCXZhbDIgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5wYXJ0X251bVs0XSk7CkBAIC03MTcxLDI3ICs3Njg5LDYgQEAKIAkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKLQkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNSlcbiIsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSk7Ci0KLQkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNjoKLQkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoODcwNilcbiIsCi0JCQkJICAgICAgIGV4dF9waHlfdHlwZSk7Ci0KLQkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKLQkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8Ci0JCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7Ci0JCQlicmVhazsKLQogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDgwNzIpXG4iLAogCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOwpAQCAtNzIxNyw2ICs3NzE0LDM5IEBACiAJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CiAJCQlicmVhazsKIAorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDU6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MDUpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9QYXVzZSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXN5bV9QYXVzZSk7CisJCQlicmVhazsKKworCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6CisJCQlCTlgyWF9ERVZfSU5GTygiZXh0X3BoeV90eXBlIDB4JXggKDg3MDYpXG4iLAorCQkJCSAgICAgICBleHRfcGh5X3R5cGUpOworCisJCQlicC0+cG9ydC5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9GSUJSRSB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzI2OgorCQkJQk5YMlhfREVWX0lORk8oImV4dF9waHlfdHlwZSAweCV4ICg4NzI2KVxuIiwKKwkJCQkgICAgICAgZXh0X3BoeV90eXBlKTsKKworCQkJYnAtPnBvcnQuc3VwcG9ydGVkIHw9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXV0b25lZyB8CisJCQkJCSAgICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX1BhdXNlIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKKwkJCWJyZWFrOworCiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfU0ZYNzEwMToKIAkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoU0ZYNzEwMSlcbiIsCiAJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CkBAIC03MjI4LDYgKzc3NTgsMjIgQEAKIAkJCQkJICAgICAgIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKKwkJCUJOWDJYX0RFVl9JTkZPKCJleHRfcGh5X3R5cGUgMHgleCAoQkNNODQ4MSlcbiIsCisJCQkJICAgICAgIGV4dF9waHlfdHlwZSk7CisKKwkJCWJwLT5wb3J0LnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICAgIFNVUFBPUlRFRF9UUCB8CisJCQkJCSAgICAgICBTVVBQT1JURURfQXV0b25lZyB8CisJCQkJCSAgICAgICBTVVBQT1JURURfUGF1c2UgfAorCQkJCQkgICAgICAgU1VQUE9SVEVEX0FzeW1fUGF1c2UpOworCQkJYnJlYWs7CisKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9GQUlMVVJFOgogCQkJQk5YMlhfRVJSKCJYR1hTIFBIWSBGYWlsdXJlIGRldGVjdGVkIDB4JXhcbiIsCiAJCQkJICBicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcpOwpAQCAtNzQ1MywxMiArNzk5OSwxMiBAQAogewogCWludCBwb3J0ID0gQlBfUE9SVChicCk7CiAJdTMyIHZhbCwgdmFsMjsKKwl1MzIgY29uZmlnOworCXUxNiBpOwogCiAJYnAtPmxpbmtfcGFyYW1zLmJwID0gYnA7CiAJYnAtPmxpbmtfcGFyYW1zLnBvcnQgPSBwb3J0OwogCi0JYnAtPmxpbmtfcGFyYW1zLnNlcmRlc19jb25maWcgPQotCQlTSE1FTV9SRChicCwgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0uc2VyZGVzX2NvbmZpZyk7CiAJYnAtPmxpbmtfcGFyYW1zLmxhbmVfY29uZmlnID0KIAkJU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfaHdfY29uZmlnW3BvcnRdLmxhbmVfY29uZmlnKTsKIAlicC0+bGlua19wYXJhbXMuZXh0X3BoeV9jb25maWcgPQpAQCAtNzQ3MSwxMCArODAxNywzNSBAQAogCWJwLT5wb3J0LmxpbmtfY29uZmlnID0KIAkJU0hNRU1fUkQoYnAsIGRldl9pbmZvLnBvcnRfZmVhdHVyZV9jb25maWdbcG9ydF0ubGlua19jb25maWcpOwogCi0JQk5YMlhfREVWX0lORk8oInNlcmRlc19jb25maWcgMHglMDh4ICBsYW5lX2NvbmZpZyAweCUwOHhcbiIKLQkgICAgIEtFUk5fSU5GTyAiICBleHRfcGh5X2NvbmZpZyAweCUwOHggIHNwZWVkX2NhcF9tYXNrIDB4JTA4eCIKLQkJICAgICAgICIgIGxpbmtfY29uZmlnIDB4JTA4eFxuIiwKLQkJICAgICAgIGJwLT5saW5rX3BhcmFtcy5zZXJkZXNfY29uZmlnLAorCS8qIEdldCB0aGUgNCBsYW5lcyB4Z3hzIGNvbmZpZyByeCBhbmQgdHggKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXZhbCA9IFNITUVNX1JEKGJwLAorCQkJICAgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ueGd4c19jb25maWdfcnhbaTw8MV0pOworCQlicC0+bGlua19wYXJhbXMueGd4c19jb25maWdfcnhbaSA8PCAxXSA9ICgodmFsPj4xNikgJiAweGZmZmYpOworCQlicC0+bGlua19wYXJhbXMueGd4c19jb25maWdfcnhbKGkgPDwgMSkgKyAxXSA9ICh2YWwgJiAweGZmZmYpOworCisJCXZhbCA9IFNITUVNX1JEKGJwLAorCQkJICAgZGV2X2luZm8ucG9ydF9od19jb25maWdbcG9ydF0ueGd4c19jb25maWdfdHhbaTw8MV0pOworCQlicC0+bGlua19wYXJhbXMueGd4c19jb25maWdfdHhbaSA8PCAxXSA9ICgodmFsPj4xNikgJiAweGZmZmYpOworCQlicC0+bGlua19wYXJhbXMueGd4c19jb25maWdfdHhbKGkgPDwgMSkgKyAxXSA9ICh2YWwgJiAweGZmZmYpOworCX0KKworCWNvbmZpZyA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5wb3J0X2ZlYXR1cmVfY29uZmlnW3BvcnRdLmNvbmZpZyk7CisJaWYgKGNvbmZpZyAmIFBPUlRfRkVBVF9DRkdfT1BUX01ETF9FTkZSQ01OVF9FTkFCTEVEKQorCQlicC0+bGlua19wYXJhbXMuZmVhdHVyZV9jb25maWdfZmxhZ3MgfD0KKwkJCQlGRUFUVVJFX0NPTkZJR19NT0RVTEVfRU5GT1JDTUVOVF9FTkFCTEVEOworCWVsc2UKKwkJYnAtPmxpbmtfcGFyYW1zLmZlYXR1cmVfY29uZmlnX2ZsYWdzICY9CisJCQkJfkZFQVRVUkVfQ09ORklHX01PRFVMRV9FTkZPUkNNRU5UX0VOQUJMRUQ7CisKKwkvKiBJZiB0aGUgZGV2aWNlIGlzIGNhcGFibGUgb2YgV29MLCBzZXQgdGhlIGRlZmF1bHQgc3RhdGUgYWNjb3JkaW5nCisJICogdG8gdGhlIEhXCisJICovCisJYnAtPndvbCA9ICghKGJwLT5mbGFncyAmIE5PX1dPTF9GTEFHKSAmJgorCQkgICAoY29uZmlnICYgUE9SVF9GRUFUVVJFX1dPTF9FTkFCTEVEKSk7CisKKwlCTlgyWF9ERVZfSU5GTygibGFuZV9jb25maWcgMHglMDh4ICBleHRfcGh5X2NvbmZpZyAweCUwOHgiCisJCSAgICAgICAiICBzcGVlZF9jYXBfbWFzayAweCUwOHggIGxpbmtfY29uZmlnIDB4JTA4eFxuIiwKIAkJICAgICAgIGJwLT5saW5rX3BhcmFtcy5sYW5lX2NvbmZpZywKIAkJICAgICAgIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZywKIAkJICAgICAgIGJwLT5saW5rX3BhcmFtcy5zcGVlZF9jYXBfbWFzaywgYnAtPnBvcnQubGlua19jb25maWcpOwpAQCAtNzUyMSw3ICs4MDkyLDcgQEAKIAkJCQkgICAgICAgIigweCUwNHgpXG4iLAogCQkJCSAgICAgICBmdW5jLCBicC0+ZTFob3YsIGJwLT5lMWhvdik7CiAJCX0gZWxzZSB7Ci0JCQlCTlgyWF9ERVZfSU5GTygiU2luZ2xlIGZ1bmN0aW9uIG1vZGVcbiIpOworCQkJQk5YMlhfREVWX0lORk8oInNpbmdsZSBmdW5jdGlvbiBtb2RlXG4iKTsKIAkJCWlmIChCUF9FMUhWTihicCkpIHsKIAkJCQlCTlgyWF9FUlIoIiEhISAgTm8gdmFsaWQgRTFIT1YgZm9yIGZ1bmMgJWQsIgogCQkJCQkgICIgIGFib3J0aW5nXG4iLCBmdW5jKTsKQEAgLTc1NzEsNiArODE0Miw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBibngyeF9pbml0X2JwKHN0cnVjdCBibngyeCAqYnApCiB7CiAJaW50IGZ1bmMgPSBCUF9GVU5DKGJwKTsKKwlpbnQgdGltZXJfaW50ZXJ2YWw7CiAJaW50IHJjOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHQgaGFuZGxpbmcgdW50aWwgSFcgaXMgaW5pdGlhbGl6ZWQgKi8KQEAgLTc1OTQsNiArODE2NiwxNiBAQAogCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCSAgICAgICAiTUNQIGRpc2FibGVkLCBtdXN0IGxvYWQgZGV2aWNlcyBpbiBvcmRlciFcbiIpOwogCisJLyogU2V0IG11bHRpIHF1ZXVlIG1vZGUgKi8KKwlpZiAoKG11bHRpX21vZGUgIT0gRVRIX1JTU19NT0RFX0RJU0FCTEVEKSAmJgorCSAgICAoKGludF9tb2RlID09IElOVF9NT0RFX0lOVHgpIHx8IChpbnRfbW9kZSA9PSBJTlRfTU9ERV9NU0kpKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCSAgICAgICJNdWx0aSBkaXNhYmxlZCBzaW5jZSBpbnRfbW9kZSByZXF1ZXN0ZWQgaXMgbm90IE1TSS1YXG4iKTsKKwkJbXVsdGlfbW9kZSA9IEVUSF9SU1NfTU9ERV9ESVNBQkxFRDsKKwl9CisJYnAtPm11bHRpX21vZGUgPSBtdWx0aV9tb2RlOworCisKIAkvKiBTZXQgVFBBIGZsYWdzICovCiAJaWYgKGRpc2FibGVfdHBhKSB7CiAJCWJwLT5mbGFncyAmPSB+VFBBX0VOQUJMRV9GTEFHOwpAQCAtNzYwMywxOCArODE4NSwxOCBAQAogCQlicC0+ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKIAl9CiAKKwlicC0+bXJycyA9IG1ycnM7CiAKIAlicC0+dHhfcmluZ19zaXplID0gTUFYX1RYX0FWQUlMOwogCWJwLT5yeF9yaW5nX3NpemUgPSBNQVhfUlhfQVZBSUw7CiAKIAlicC0+cnhfY3N1bSA9IDE7Ci0JYnAtPnJ4X29mZnNldCA9IDA7CiAKIAlicC0+dHhfdGlja3MgPSA1MDsKIAlicC0+cnhfdGlja3MgPSAyNTsKIAotCWJwLT50aW1lcl9pbnRlcnZhbCA9IChDSElQX1JFVl9JU19TTE9XKGJwKSA/IDUqSFogOiBIWik7Ci0JYnAtPmN1cnJlbnRfaW50ZXJ2YWwgPSAocG9sbCA/IHBvbGwgOiBicC0+dGltZXJfaW50ZXJ2YWwpOworCXRpbWVyX2ludGVydmFsID0gKENISVBfUkVWX0lTX1NMT1coYnApID8gNSpIWiA6IEhaKTsKKwlicC0+Y3VycmVudF9pbnRlcnZhbCA9IChwb2xsID8gcG9sbCA6IHRpbWVyX2ludGVydmFsKTsKIAogCWluaXRfdGltZXIoJmJwLT50aW1lcik7CiAJYnAtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgYnAtPmN1cnJlbnRfaW50ZXJ2YWw7CkBAIC03NjU5LDE0ICs4MjQxLDE2IEBACiAKIAkJc3dpdGNoIChleHRfcGh5X3R5cGUpIHsKIAkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9ESVJFQ1Q6Ci0JCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcwNToKLQkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA2OgogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTgwNzI6CiAJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODA3MzoKKwkJY2FzZSBQT1JUX0hXX0NGR19YR1hTX0VYVF9QSFlfVFlQRV9CQ004NzA1OgorCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX0JDTTg3MDY6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODcyNjoKIAkJCWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CiAJCQlicmVhazsKIAogCQljYXNlIFBPUlRfSFdfQ0ZHX1hHWFNfRVhUX1BIWV9UWVBFX1NGWDcxMDE6CisJCWNhc2UgUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfQkNNODQ4MToKIAkJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CiAJCQlicmVhazsKIApAQCAtNzg4OCw2ICs4NDcyLDg0IEBACiAJaW5mby0+cmVnZHVtcF9sZW4gPSAwOwogfQogCisjZGVmaW5lIElTX0UxX09OTElORShpbmZvKQkoKChpbmZvKSAmIFJJX0UxX09OTElORSkgPT0gUklfRTFfT05MSU5FKQorI2RlZmluZSBJU19FMUhfT05MSU5FKGluZm8pCSgoKGluZm8pICYgUklfRTFIX09OTElORSkgPT0gUklfRTFIX09OTElORSkKKworc3RhdGljIGludCBibngyeF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdGF0aWMgdTMyIHJlZ2R1bXBfbGVuOworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCisJaWYgKHJlZ2R1bXBfbGVuKQorCQlyZXR1cm4gcmVnZHVtcF9sZW47CisKKwlpZiAoQ0hJUF9JU19FMShicCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKKwkJCWlmIChJU19FMV9PTkxJTkUocmVnX2FkZHJzW2ldLmluZm8pKQorCQkJCXJlZ2R1bXBfbGVuICs9IHJlZ19hZGRyc1tpXS5zaXplOworCisJCWZvciAoaSA9IDA7IGkgPCBXUkVHU19DT1VOVF9FMTsgaSsrKQorCQkJaWYgKElTX0UxX09OTElORSh3cmVnX2FkZHJzX2UxW2ldLmluZm8pKQorCQkJCXJlZ2R1bXBfbGVuICs9IHdyZWdfYWRkcnNfZTFbaV0uc2l6ZSAqCisJCQkJCSgxICsgd3JlZ19hZGRyc19lMVtpXS5yZWFkX3JlZ3NfY291bnQpOworCisJfSBlbHNlIHsgLyogRTFIICovCisJCWZvciAoaSA9IDA7IGkgPCBSRUdTX0NPVU5UOyBpKyspCisJCQlpZiAoSVNfRTFIX09OTElORShyZWdfYWRkcnNbaV0uaW5mbykpCisJCQkJcmVnZHVtcF9sZW4gKz0gcmVnX2FkZHJzW2ldLnNpemU7CisKKwkJZm9yIChpID0gMDsgaSA8IFdSRUdTX0NPVU5UX0UxSDsgaSsrKQorCQkJaWYgKElTX0UxSF9PTkxJTkUod3JlZ19hZGRyc19lMWhbaV0uaW5mbykpCisJCQkJcmVnZHVtcF9sZW4gKz0gd3JlZ19hZGRyc19lMWhbaV0uc2l6ZSAqCisJCQkJCSgxICsgd3JlZ19hZGRyc19lMWhbaV0ucmVhZF9yZWdzX2NvdW50KTsKKwl9CisJcmVnZHVtcF9sZW4gKj0gNDsKKwlyZWdkdW1wX2xlbiArPSBzaXplb2Yoc3RydWN0IGR1bXBfaGRyKTsKKworCXJldHVybiByZWdkdW1wX2xlbjsKK30KKworc3RhdGljIHZvaWQgYm54MnhfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKl9wKQoreworCXUzMiAqcCA9IF9wLCBpLCBqOworCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkdW1wX2hkciBkdW1wX2hkciA9IHswfTsKKworCXJlZ3MtPnZlcnNpb24gPSAwOworCW1lbXNldChwLCAwLCByZWdzLT5sZW4pOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQorCQlyZXR1cm47CisKKwlkdW1wX2hkci5oZHJfc2l6ZSA9IChzaXplb2Yoc3RydWN0IGR1bXBfaGRyKSAvIDQpIC0gMTsKKwlkdW1wX2hkci5kdW1wX3NpZ24gPSBkdW1wX3NpZ25fYWxsOworCWR1bXBfaGRyLnhzdG9ybV93YWl0cCA9IFJFR19SRChicCwgWFNUT1JNX1dBSVRQX0FERFIpOworCWR1bXBfaGRyLnRzdG9ybV93YWl0cCA9IFJFR19SRChicCwgVFNUT1JNX1dBSVRQX0FERFIpOworCWR1bXBfaGRyLnVzdG9ybV93YWl0cCA9IFJFR19SRChicCwgVVNUT1JNX1dBSVRQX0FERFIpOworCWR1bXBfaGRyLmNzdG9ybV93YWl0cCA9IFJFR19SRChicCwgQ1NUT1JNX1dBSVRQX0FERFIpOworCWR1bXBfaGRyLmluZm8gPSBDSElQX0lTX0UxKGJwKSA/IFJJX0UxX09OTElORSA6IFJJX0UxSF9PTkxJTkU7CisKKwltZW1jcHkocCwgJmR1bXBfaGRyLCBzaXplb2Yoc3RydWN0IGR1bXBfaGRyKSk7CisJcCArPSBkdW1wX2hkci5oZHJfc2l6ZSArIDE7CisKKwlpZiAoQ0hJUF9JU19FMShicCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IFJFR1NfQ09VTlQ7IGkrKykKKwkJCWlmIChJU19FMV9PTkxJTkUocmVnX2FkZHJzW2ldLmluZm8pKQorCQkJCWZvciAoaiA9IDA7IGogPCByZWdfYWRkcnNbaV0uc2l6ZTsgaisrKQorCQkJCQkqcCsrID0gUkVHX1JEKGJwLAorCQkJCQkJICAgICAgcmVnX2FkZHJzW2ldLmFkZHIgKyBqKjQpOworCisJfSBlbHNlIHsgLyogRTFIICovCisJCWZvciAoaSA9IDA7IGkgPCBSRUdTX0NPVU5UOyBpKyspCisJCQlpZiAoSVNfRTFIX09OTElORShyZWdfYWRkcnNbaV0uaW5mbykpCisJCQkJZm9yIChqID0gMDsgaiA8IHJlZ19hZGRyc1tpXS5zaXplOyBqKyspCisJCQkJCSpwKysgPSBSRUdfUkQoYnAsCisJCQkJCQkgICAgICByZWdfYWRkcnNbaV0uYWRkciArIGoqNCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBibngyeF9nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTgwNDYsNyArODcwOCw3IEBACiAJCQlNQ1BSX05WTV9BQ0NFU1NfRU5BQkxFX1dSX0VOKSkpOwogfQogCi1zdGF0aWMgaW50IGJueDJ4X252cmFtX3JlYWRfZHdvcmQoc3RydWN0IGJueDJ4ICpicCwgdTMyIG9mZnNldCwgdTMyICpyZXRfdmFsLAorc3RhdGljIGludCBibngyeF9udnJhbV9yZWFkX2R3b3JkKHN0cnVjdCBibngyeCAqYnAsIHUzMiBvZmZzZXQsIF9fYmUzMiAqcmV0X3ZhbCwKIAkJCQkgIHUzMiBjbWRfZmxhZ3MpCiB7CiAJaW50IGNvdW50LCBpLCByYzsKQEAgLTgwODIsOCArODc0NCw3IEBACiAJCQkvKiB3ZSByZWFkIG52cmFtIGRhdGEgaW4gY3B1IG9yZGVyCiAJCQkgKiBidXQgZXRodG9vbCBzZWVzIGl0IGFzIGFuIGFycmF5IG9mIGJ5dGVzCiAJCQkgKiBjb252ZXJ0aW5nIHRvIGJpZy1lbmRpYW4gd2lsbCBkbyB0aGUgd29yayAqLwotCQkJdmFsID0gY3B1X3RvX2JlMzIodmFsKTsKLQkJCSpyZXRfdmFsID0gdmFsOworCQkJKnJldF92YWwgPSBjcHVfdG9fYmUzMih2YWwpOwogCQkJcmMgPSAwOwogCQkJYnJlYWs7CiAJCX0KQEAgLTgwOTcsNyArODc1OCw3IEBACiB7CiAJaW50IHJjOwogCXUzMiBjbWRfZmxhZ3M7Ci0JdTMyIHZhbDsKKwlfX2JlMzIgdmFsOwogCiAJaWYgKChvZmZzZXQgJiAweDAzKSB8fCAoYnVmX3NpemUgJiAweDAzKSB8fCAoYnVmX3NpemUgPT0gMCkpIHsKIAkJRFAoQk5YMlhfTVNHX05WTSwKQEAgLTgyMTYsNyArODg3Nyw3IEBACiAJaW50IHJjOwogCXUzMiBjbWRfZmxhZ3M7CiAJdTMyIGFsaWduX29mZnNldDsKLQl1MzIgdmFsOworCV9fYmUzMiB2YWw7CiAKIAlpZiAob2Zmc2V0ICsgYnVmX3NpemUgPiBicC0+Y29tbW9uLmZsYXNoX3NpemUpIHsKIAkJRFAoQk5YMlhfTVNHX05WTSwgIkludmFsaWQgcGFyYW1ldGVyOiBvZmZzZXQgKDB4JXgpICsiCkBAIC04MzQ1LDcgKzkwMDYsNyBAQAogCQkJaWYgKChicC0+c3RhdGUgPT0gQk5YMlhfU1RBVEVfT1BFTikgfHwKIAkJCSAgICAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX0RJU0FCTEVEKSkgewogCQkJCXJjIHw9IGJueDJ4X2xpbmtfcmVzZXQoJmJwLT5saW5rX3BhcmFtcywKLQkJCQkJCSAgICAgICAmYnAtPmxpbmtfdmFycyk7CisJCQkJCQkgICAgICAgJmJwLT5saW5rX3ZhcnMsIDEpOwogCQkJCXJjIHw9IGJueDJ4X3BoeV9pbml0KCZicC0+bGlua19wYXJhbXMsCiAJCQkJCQkgICAgICZicC0+bGlua192YXJzKTsKIAkJCX0KQEAgLTg0MzUsNyArOTA5Niw4IEBACiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKLQllcGF1c2UtPmF1dG9uZWcgPSAoYnAtPmxpbmtfcGFyYW1zLnJlcV9mbG93X2N0cmwgPT0gQk5YMlhfRkxPV19DVFJMX0FVVE8pICYmCisJZXBhdXNlLT5hdXRvbmVnID0gKGJwLT5saW5rX3BhcmFtcy5yZXFfZmxvd19jdHJsID09CisJCQkgICBCTlgyWF9GTE9XX0NUUkxfQVVUTykgJiYKIAkJCSAgKGJwLT5saW5rX3BhcmFtcy5yZXFfbGluZV9zcGVlZCA9PSBTUEVFRF9BVVRPX05FRyk7CiAKIAllcGF1c2UtPnJ4X3BhdXNlID0gKChicC0+bGlua192YXJzLmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9SWCkgPT0KQEAgLTg1NjcsOCArOTIyOSw3IEBACiAJeyAibnZyYW1fdGVzdCAob25saW5lKSIgfSwKIAl7ICJpbnRlcnJ1cHRfdGVzdCAob25saW5lKSIgfSwKIAl7ICJsaW5rX3Rlc3QgKG9ubGluZSkiIH0sCi0JeyAiaWRsZSBjaGVjayAob25saW5lKSIgfSwKLQl7ICJNQyBlcnJvcnMgKG9ubGluZSkiIH0KKwl7ICJpZGxlIGNoZWNrIChvbmxpbmUpIiB9CiB9OwogCiBzdGF0aWMgaW50IGJueDJ4X3NlbGZfdGVzdF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtODc1NiwyMyArOTQxNywyMyBAQAogCXUxNiBsZW47CiAJaW50IHJjID0gLUVOT0RFVjsKIAotCWlmIChsb29wYmFja19tb2RlID09IEJOWDJYX01BQ19MT09QQkFDSykgeworCS8qIGNoZWNrIHRoZSBsb29wYmFjayBtb2RlICovCisJc3dpdGNoIChsb29wYmFja19tb2RlKSB7CisJY2FzZSBCTlgyWF9QSFlfTE9PUEJBQ0s6CisJCWlmIChicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSAhPSBMT09QQkFDS19YR1hTXzEwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgQk5YMlhfTUFDX0xPT1BCQUNLOgogCQlicC0+bGlua19wYXJhbXMubG9vcGJhY2tfbW9kZSA9IExPT1BCQUNLX0JNQUM7CiAJCWJueDJ4X3BoeV9pbml0KCZicC0+bGlua19wYXJhbXMsICZicC0+bGlua192YXJzKTsKLQotCX0gZWxzZSBpZiAobG9vcGJhY2tfbW9kZSA9PSBCTlgyWF9QSFlfTE9PUEJBQ0spIHsKLQkJdTE2IGNudCA9IDEwMDA7Ci0JCWJwLT5saW5rX3BhcmFtcy5sb29wYmFja19tb2RlID0gTE9PUEJBQ0tfWEdYU18xMDsKLQkJYm54MnhfcGh5X2luaXQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMpOwotCQkvKiB3YWl0IHVudGlsIGxpbmsgc3RhdGUgaXMgcmVzdG9yZWQgKi8KLQkJaWYgKGxpbmtfdXApCi0JCQl3aGlsZSAoY250LS0gJiYgYm54MnhfdGVzdF9saW5rKCZicC0+bGlua19wYXJhbXMsCi0JCQkJCQkJJmJwLT5saW5rX3ZhcnMpKQotCQkJCW1zbGVlcCgxMCk7Ci0JfSBlbHNlCisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAotCXBrdF9zaXplID0gMTUxNDsKKwkvKiBwcmVwYXJlIHRoZSBsb29wYmFjayBwYWNrZXQgKi8KKwlwa3Rfc2l6ZSA9ICgoKGJwLT5kZXYtPm10dSA8IEVUSF9NQVhfUEFDS0VUX1NJWkUpID8KKwkJICAgICBicC0+ZGV2LT5tdHUgOiBFVEhfTUFYX1BBQ0tFVF9TSVpFKSArIEVUSF9ITEVOKTsKIAlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIGJwLT5yeF9idWZfc2l6ZSk7CiAJaWYgKCFza2IpIHsKIAkJcmMgPSAtRU5PTUVNOwpAQCAtODc4NCw2ICs5NDQ1LDcgQEAKIAlmb3IgKGkgPSBFVEhfSExFTjsgaSA8IHBrdF9zaXplOyBpKyspCiAJCXBhY2tldFtpXSA9ICh1bnNpZ25lZCBjaGFyKSAoaSAmIDB4ZmYpOwogCisJLyogc2VuZCB0aGUgbG9vcGJhY2sgcGFja2V0ICovCiAJbnVtX3BrdHMgPSAwOwogCXR4X3N0YXJ0X2lkeCA9IGxlMTZfdG9fY3B1KCpmcC0+dHhfY29uc19zYik7CiAJcnhfc3RhcnRfaWR4ID0gbGUxNl90b19jcHUoKmZwLT5yeF9jb25zX3NiKTsKQEAgLTg4MDgsMTIgKzk0NzAsMTAgQEAKIAogCXdtYigpOwogCi0JZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCA9Ci0JCWNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QpICsgMSk7CisJbGUxNl9hZGRfY3B1KCZmcC0+aHdfdHhfcHJvZHMtPmJkc19wcm9kLCAxKTsKIAltYigpOyAvKiBGVyByZXN0cmljdGlvbjogbXVzdCBub3QgcmVvcmRlciB3cml0aW5nIG5iZCBhbmQgcGFja2V0cyAqLwotCWZwLT5od190eF9wcm9kcy0+cGFja2V0c19wcm9kID0KLQkJY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QpICsgMSk7Ci0JRE9PUkJFTEwoYnAsIEZQX0lEWChmcCksIDApOworCWxlMzJfYWRkX2NwdSgmZnAtPmh3X3R4X3Byb2RzLT5wYWNrZXRzX3Byb2QsIDEpOworCURPT1JCRUxMKGJwLCBmcC0+aW5kZXgsIDApOwogCiAJbW1pb3diKCk7CiAKQEAgLTg4NjgsNyArOTUyOCw3IEBACiAKIHN0YXRpYyBpbnQgYm54MnhfdGVzdF9sb29wYmFjayhzdHJ1Y3QgYm54MnggKmJwLCB1OCBsaW5rX3VwKQogewotCWludCByYyA9IDA7CisJaW50IHJjID0gMCwgcmVzOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGJwLT5kZXYpKQogCQlyZXR1cm4gQk5YMlhfTE9PUEJBQ0tfRkFJTEVEOwpAQCAtODg3NiwxNCArOTUzNiwxNiBAQAogCWJueDJ4X25ldGlmX3N0b3AoYnAsIDEpOwogCWJueDJ4X2FjcXVpcmVfcGh5X2xvY2soYnApOwogCi0JaWYgKGJueDJ4X3J1bl9sb29wYmFjayhicCwgQk5YMlhfTUFDX0xPT1BCQUNLLCBsaW5rX3VwKSkgewotCQlEUChORVRJRl9NU0dfUFJPQkUsICJNQUMgbG9vcGJhY2sgZmFpbGVkXG4iKTsKLQkJcmMgfD0gQk5YMlhfTUFDX0xPT1BCQUNLX0ZBSUxFRDsKKwlyZXMgPSBibngyeF9ydW5fbG9vcGJhY2soYnAsIEJOWDJYX1BIWV9MT09QQkFDSywgbGlua191cCk7CisJaWYgKHJlcykgeworCQlEUChORVRJRl9NU0dfUFJPQkUsICIgIFBIWSBsb29wYmFjayBmYWlsZWQgIChyZXMgJWQpXG4iLCByZXMpOworCQlyYyB8PSBCTlgyWF9QSFlfTE9PUEJBQ0tfRkFJTEVEOwogCX0KIAotCWlmIChibngyeF9ydW5fbG9vcGJhY2soYnAsIEJOWDJYX1BIWV9MT09QQkFDSywgbGlua191cCkpIHsKLQkJRFAoTkVUSUZfTVNHX1BST0JFLCAiUEhZIGxvb3BiYWNrIGZhaWxlZFxuIik7Ci0JCXJjIHw9IEJOWDJYX1BIWV9MT09QQkFDS19GQUlMRUQ7CisJcmVzID0gYm54MnhfcnVuX2xvb3BiYWNrKGJwLCBCTlgyWF9NQUNfTE9PUEJBQ0ssIGxpbmtfdXApOworCWlmIChyZXMpIHsKKwkJRFAoTkVUSUZfTVNHX1BST0JFLCAiICBNQUMgbG9vcGJhY2sgZmFpbGVkICAocmVzICVkKVxuIiwgcmVzKTsKKwkJcmMgfD0gQk5YMlhfTUFDX0xPT1BCQUNLX0ZBSUxFRDsKIAl9CiAKIAlibngyeF9yZWxlYXNlX3BoeV9sb2NrKGJwKTsKQEAgLTg5MTAsMTQgKzk1NzIsMTQgQEAKIAkJeyAweDc3OCwgIDB4NzAgfSwKIAkJeyAgICAgMCwgICAgIDAgfQogCX07Ci0JdTMyIGJ1ZlsweDM1MCAvIDRdOworCV9fYmUzMiBidWZbMHgzNTAgLyA0XTsKIAl1OCAqZGF0YSA9ICh1OCAqKWJ1ZjsKIAlpbnQgaSwgcmM7CiAJdTMyIG1hZ2ljLCBjc3VtOwogCiAJcmMgPSBibngyeF9udnJhbV9yZWFkKGJwLCAwLCBkYXRhLCA0KTsKIAlpZiAocmMpIHsKLQkJRFAoTkVUSUZfTVNHX1BST0JFLCAibWFnaWMgdmFsdWUgcmVhZCAocmMgLSVkKVxuIiwgLXJjKTsKKwkJRFAoTkVUSUZfTVNHX1BST0JFLCAibWFnaWMgdmFsdWUgcmVhZCAocmMgJWQpXG4iLCByYyk7CiAJCWdvdG8gdGVzdF9udnJhbV9leGl0OwogCX0KIApAQCAtODkzNCw3ICs5NTk2LDcgQEAKIAkJCQkgICAgICBudnJhbV90YmxbaV0uc2l6ZSk7CiAJCWlmIChyYykgewogCQkJRFAoTkVUSUZfTVNHX1BST0JFLAotCQkJICAgIm52cmFtX3RibFslZF0gcmVhZCBkYXRhIChyYyAtJWQpXG4iLCBpLCAtcmMpOworCQkJICAgIm52cmFtX3RibFslZF0gcmVhZCBkYXRhIChyYyAlZClcbiIsIGksIHJjKTsKIAkJCWdvdG8gdGVzdF9udnJhbV9leGl0OwogCQl9CiAKQEAgLTg5NTksMTIgKzk2MjEsMTIgQEAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoYnAtPmRldikpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY29uZmlnLT5oZHIubGVuZ3RoXzZiID0gMDsKKwljb25maWctPmhkci5sZW5ndGggPSAwOwogCWlmIChDSElQX0lTX0UxKGJwKSkKIAkJY29uZmlnLT5oZHIub2Zmc2V0ID0gKEJQX1BPUlQoYnApID8gMzIgOiAwKTsKIAllbHNlCiAJCWNvbmZpZy0+aGRyLm9mZnNldCA9IEJQX0ZVTkMoYnApOwotCWNvbmZpZy0+aGRyLmNsaWVudF9pZCA9IEJQX0NMX0lEKGJwKTsKKwljb25maWctPmhkci5jbGllbnRfaWQgPSBicC0+ZnAtPmNsX2lkOwogCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CiAKIAlyYyA9IGJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMsIDAsCkBAIC05MDM3LDkgKzk2OTksNiBAQAogCQkJYnVmWzVdID0gMTsKIAkJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAJCX0KLQlidWZbN10gPSBibngyeF9tY19hc3NlcnQoYnApOwotCWlmIChidWZbN10gIT0gMCkKLQkJZXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAogI2lmZGVmIEJOWDJYX0VYVFJBX0RFQlVHCiAJYm54MnhfcGFuaWNfZHVtcChicCk7CkBAIC05MDQ5LDQwICs5NzA4LDk4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAlsb25nIG9mZnNldDsKIAlpbnQgc2l6ZTsKKwl1OCBzdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKK30gYm54MnhfcV9zdGF0c19hcnJbQk5YMlhfTlVNX1FfU1RBVFNdID0geworLyogMSAqLwl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfcmVjZWl2ZWRfaGkpLCA4LCAiWyVkXTogcnhfYnl0ZXMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKGVycm9yX2J5dGVzX3JlY2VpdmVkX2hpKSwKKwkJCQkJCTgsICJbJWRdOiByeF9lcnJvcl9ieXRlcyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3JlY2VpdmVkX2hpKSwKKwkJCQkJCTgsICJbJWRdOiByeF91Y2FzdF9wYWNrZXRzIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCisJCQkJCQk4LCAiWyVkXTogcnhfbWNhc3RfcGFja2V0cyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfYnJvYWRjYXN0X3BhY2tldHNfcmVjZWl2ZWRfaGkpLAorCQkJCQkJOCwgIlslZF06IHJ4X2JjYXN0X3BhY2tldHMiIH0sCisJeyBRX1NUQVRTX09GRlNFVDMyKG5vX2J1ZmZfZGlzY2FyZF9oaSksCTgsICJbJWRdOiByeF9kaXNjYXJkcyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIocnhfZXJyX2Rpc2NhcmRfcGt0KSwKKwkJCQkJIDQsICJbJWRdOiByeF9waHlfaXBfZXJyX2Rpc2NhcmRzIn0sCisJeyBRX1NUQVRTX09GRlNFVDMyKHJ4X3NrYl9hbGxvY19mYWlsZWQpLAorCQkJCQkgNCwgIlslZF06IHJ4X3NrYl9hbGxvY19kaXNjYXJkIiB9LAorCXsgUV9TVEFUU19PRkZTRVQzMihod19jc3VtX2VyciksIDQsICJbJWRdOiByeF9jc3VtX29mZmxvYWRfZXJyb3JzIiB9LAorCisvKiAxMCAqL3sgUV9TVEFUU19PRkZTRVQzMih0b3RhbF9ieXRlc190cmFuc21pdHRlZF9oaSksCTgsICJbJWRdOiB0eF9ieXRlcyIgfSwKKwl7IFFfU1RBVFNfT0ZGU0VUMzIodG90YWxfdW5pY2FzdF9wYWNrZXRzX3RyYW5zbWl0dGVkX2hpKSwKKwkJCQkJCQk4LCAiWyVkXTogdHhfcGFja2V0cyIgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJbG9uZyBvZmZzZXQ7CisJaW50IHNpemU7CiAJdTMyIGZsYWdzOwogI2RlZmluZSBTVEFUU19GTEFHU19QT1JUCQkxCiAjZGVmaW5lIFNUQVRTX0ZMQUdTX0ZVTkMJCTIKKyNkZWZpbmUgU1RBVFNfRkxBR1NfQk9USAkJKFNUQVRTX0ZMQUdTX0ZVTkMgfCBTVEFUU19GTEFHU19QT1JUKQogCXU4IHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOwogfSBibngyeF9zdGF0c19hcnJbQk5YMlhfTlVNX1NUQVRTXSA9IHsKLS8qIDEgKi8JeyBTVEFUU19PRkZTRVQzMih2YWxpZF9ieXRlc19yZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfRlVOQywgInJ4X2J5dGVzIiB9LAorLyogMSAqLwl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3JlY2VpdmVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAicnhfYnl0ZXMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMihlcnJvcl9ieXRlc19yZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfRlVOQywgInJ4X2Vycm9yX2J5dGVzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodG90YWxfYnl0ZXNfdHJhbnNtaXR0ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJ0eF9ieXRlcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfaWZoY291dGJhZG9jdGV0c19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2Vycm9yX2J5dGVzIiB9LAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9lcnJvcl9ieXRlcyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfRlVOQywgInJ4X3VjYXN0X3BhY2tldHMiIH0sCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X3VjYXN0X3BhY2tldHMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0b3RhbF9tdWx0aWNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfRlVOQywgInJ4X21jYXN0X3BhY2tldHMiIH0sCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X21jYXN0X3BhY2tldHMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0b3RhbF9icm9hZGNhc3RfcGFja2V0c19yZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfRlVOQywgInJ4X2JjYXN0X3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMih0b3RhbF91bmljYXN0X3BhY2tldHNfdHJhbnNtaXR0ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX0ZVTkMsICJ0eF9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfbWFjX2Vycm9ycyIgfSwKLS8qIDEwICoveyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2RvdDNzdGF0c2NhcnJpZXJzZW5zZWVycm9yc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2NhcnJpZXJfZXJyb3JzIiB9LAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9iY2FzdF9wYWNrZXRzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNmY3NlcnJvcnNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9jcmNfZXJyb3JzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNhbGlnbm1lbnRlcnJvcnNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9hbGlnbl9lcnJvcnMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHN1bmRlcnNpemVwa3RzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfdW5kZXJzaXplX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihldGhlcnN0YXRzb3ZlcnJzaXplcGt0c19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X292ZXJzaXplX3BhY2tldHMiIH0sCisvKiAxMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzZnJhZ21lbnRzX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfZnJhZ21lbnRzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzamFiYmVyc19oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2phYmJlcnMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihub19idWZmX2Rpc2NhcmRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9kaXNjYXJkcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKG1hY19maWx0ZXJfZGlzY2FyZCksCisJCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2ZpbHRlcmVkX3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih4eG92ZXJmbG93X2Rpc2NhcmQpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9md19kaXNjYXJkcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKGJyYl9kcm9wX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfYnJiX2Rpc2NhcmQiIH0sCisJeyBTVEFUU19PRkZTRVQzMihicmJfdHJ1bmNhdGVfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9icmJfdHJ1bmNhdGUiIH0sCisJeyBTVEFUU19PRkZTRVQzMihwYXVzZV9mcmFtZXNfcmVjZWl2ZWRfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9wYXVzZV9mcmFtZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X21hY2NvbnRyb2xmcmFtZXNyZWNlaXZlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X21hY19jdHJsX2ZyYW1lcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKG5pZ190aW1lcl9tYXgpLAorCQkJNCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2NvbnN0YW50X3BhdXNlX2V2ZW50cyIgfSwKKy8qIDIwICoveyBTVEFUU19PRkZTRVQzMihyeF9lcnJfZGlzY2FyZF9wa3QpLAorCQkJCTQsIFNUQVRTX0ZMQUdTX0JPVEgsICJyeF9waHlfaXBfZXJyX2Rpc2NhcmRzIn0sCisJeyBTVEFUU19PRkZTRVQzMihyeF9za2JfYWxsb2NfZmFpbGVkKSwKKwkJCQk0LCBTVEFUU19GTEFHU19CT1RILCAicnhfc2tiX2FsbG9jX2Rpc2NhcmQiIH0sCisJeyBTVEFUU19PRkZTRVQzMihod19jc3VtX2VyciksCisJCQkJNCwgU1RBVFNfRkxBR1NfQk9USCwgInJ4X2NzdW1fb2ZmbG9hZF9lcnJvcnMiIH0sCisKKwl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX2J5dGVzX3RyYW5zbWl0dGVkX2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19CT1RILCAidHhfYnl0ZXMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2lmaGNvdXRiYWRvY3RldHNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9lcnJvcl9ieXRlcyIgfSwKKwl7IFNUQVRTX09GRlNFVDMyKHRvdGFsX3VuaWNhc3RfcGFja2V0c190cmFuc21pdHRlZF9oaSksCisJCQkJOCwgU1RBVFNfRkxBR1NfQk9USCwgInR4X3BhY2tldHMiIH0sCisJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9tYWNfZXJyb3JzIiB9LAorCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9kb3Qzc3RhdHNjYXJyaWVyc2Vuc2VlcnJvcnNfaGkpLAorCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF9jYXJyaWVyX2Vycm9ycyIgfSwKIAl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzc2luZ2xlY29sbGlzaW9uZnJhbWVzX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfc2luZ2xlX2NvbGxpc2lvbnMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c211bHRpcGxlY29sbGlzaW9uZnJhbWVzX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfbXVsdGlfY29sbGlzaW9ucyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfZG90M3N0YXRzZGVmZXJyZWR0cmFuc21pc3Npb25zX2hpKSwKKy8qIDMwICoveyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2RvdDNzdGF0c2RlZmVycmVkdHJhbnNtaXNzaW9uc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X2RlZmVycmVkIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9kb3Qzc3RhdHNleGNlc3NpdmVjb2xsaXNpb25zX2hpKSwKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfZXhjZXNzX2NvbGxpc2lvbnMiIH0sCkBAIC05MDkwLDE0ICs5ODA3LDYgQEAKIAkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfbGF0ZV9jb2xsaXNpb25zIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9ldGhlcnN0YXRzY29sbGlzaW9uc19oaSksCiAJCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInR4X3RvdGFsX2NvbGxpc2lvbnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHNmcmFnbWVudHNfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF9mcmFnbWVudHMiIH0sCi0vKiAyMCAqL3sgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF9ldGhlcnN0YXRzamFiYmVyc19oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X2phYmJlcnMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X2V0aGVyc3RhdHN1bmRlcnNpemVwa3RzX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfdW5kZXJzaXplX3BhY2tldHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihqYWJiZXJfcGFja2V0c19yZWNlaXZlZCksCi0JCQkJNCwgU1RBVFNfRkxBR1NfRlVOQywgInJ4X292ZXJzaXplX3BhY2tldHMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjRvY3RldHNfaGkpLAogCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF82NF9ieXRlX3BhY2tldHMiIH0sCiAJeyBTVEFUU19PRkZTRVQzMih0eF9zdGF0X2V0aGVyc3RhdHNwa3RzNjVvY3RldHN0bzEyN29jdGV0c19oaSksCkBAIC05MTEwLDUyICs5ODE5LDQ2IEBACiAJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfNTEyX3RvXzEwMjNfYnl0ZV9wYWNrZXRzIiB9LAogCXsgU1RBVFNfT0ZGU0VUMzIoZXRoZXJzdGF0c3BrdHMxMDI0b2N0ZXRzdG8xNTIyb2N0ZXRzX2hpKSwKIAkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF8xMDI0X3RvXzE1MjJfYnl0ZV9wYWNrZXRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIoZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19oaSksCisvKiA0MCAqL3sgU1RBVFNfT0ZGU0VUMzIoZXRoZXJzdGF0c3BrdHNvdmVyMTUyMm9jdGV0c19oaSksCiAJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfMTUyM190b185MDIyX2J5dGVfcGFja2V0cyIgfSwKLS8qIDMwICoveyBTVEFUU19PRkZTRVQzMihyeF9zdGF0X3hvbnBhdXNlZnJhbWVzcmVjZWl2ZWRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJyeF94b25fZnJhbWVzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIocnhfc3RhdF94b2ZmcGF1c2VmcmFtZXNyZWNlaXZlZF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgInJ4X3hvZmZfZnJhbWVzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIodHhfc3RhdF9vdXR4b25zZW50X2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfeG9uX2ZyYW1lcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHR4X3N0YXRfb3V0eG9mZnNlbnRfaGkpLAotCQkJCTgsIFNUQVRTX0ZMQUdTX1BPUlQsICJ0eF94b2ZmX2ZyYW1lcyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKHJ4X3N0YXRfbWFjY29udHJvbGZyYW1lc3JlY2VpdmVkX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAicnhfbWFjX2N0cmxfZnJhbWVzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIobWFjX2ZpbHRlcl9kaXNjYXJkKSwKLQkJCQk0LCBTVEFUU19GTEFHU19QT1JULCAicnhfZmlsdGVyZWRfcGFja2V0cyIgfSwKLQl7IFNUQVRTX09GRlNFVDMyKG5vX2J1ZmZfZGlzY2FyZCksCi0JCQkJNCwgU1RBVFNfRkxBR1NfRlVOQywgInJ4X2Rpc2NhcmRzIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIoeHhvdmVyZmxvd19kaXNjYXJkKSwKLQkJCQk0LCBTVEFUU19GTEFHU19QT1JULCAicnhfZndfZGlzY2FyZHMiIH0sCi0JeyBTVEFUU19PRkZTRVQzMihicmJfZHJvcF9oaSksCi0JCQkJOCwgU1RBVFNfRkxBR1NfUE9SVCwgImJyYl9kaXNjYXJkIiB9LAotCXsgU1RBVFNfT0ZGU0VUMzIoYnJiX3RydW5jYXRlX2hpKSwKLQkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAiYnJiX3RydW5jYXRlIiB9LAotLyogNDAgKi97IFNUQVRTX09GRlNFVDMyKHJ4X2Vycl9kaXNjYXJkX3BrdCksCi0JCQkJNCwgU1RBVFNfRkxBR1NfRlVOQywgInJ4X3BoeV9pcF9lcnJfZGlzY2FyZHMifSwKLQl7IFNUQVRTX09GRlNFVDMyKHJ4X3NrYl9hbGxvY19mYWlsZWQpLAotCQkJCTQsIFNUQVRTX0ZMQUdTX0ZVTkMsICJyeF9za2JfYWxsb2NfZGlzY2FyZCIgfSwKLS8qIDQyICoveyBTVEFUU19PRkZTRVQzMihod19jc3VtX2VyciksCi0JCQkJNCwgU1RBVFNfRkxBR1NfRlVOQywgInJ4X2NzdW1fb2ZmbG9hZF9lcnJvcnMiIH0KKwl7IFNUQVRTX09GRlNFVDMyKHBhdXNlX2ZyYW1lc19zZW50X2hpKSwKKwkJCQk4LCBTVEFUU19GTEFHU19QT1JULCAidHhfcGF1c2VfZnJhbWVzIiB9CiB9OwogCi0jZGVmaW5lIElTX05PVF9FMUhNRl9TVEFUKGJwLCBpKSBcCi0JCShJU19FMUhNRihicCkgJiYgKGJueDJ4X3N0YXRzX2FycltpXS5mbGFncyAmIFNUQVRTX0ZMQUdTX1BPUlQpKQorI2RlZmluZSBJU19QT1JUX1NUQVQoaSkgXAorCSgoYm54Mnhfc3RhdHNfYXJyW2ldLmZsYWdzICYgU1RBVFNfRkxBR1NfQk9USCkgPT0gU1RBVFNfRkxBR1NfUE9SVCkKKyNkZWZpbmUgSVNfRlVOQ19TVEFUKGkpCQkoYm54Mnhfc3RhdHNfYXJyW2ldLmZsYWdzICYgU1RBVFNfRkxBR1NfRlVOQykKKyNkZWZpbmUgSVNfRTFITUZfTU9ERV9TVEFUKGJwKSBcCisJCQkoSVNfRTFITUYoYnApICYmICEoYnAtPm1zZ2xldmVsICYgQk5YMlhfTVNHX1NUQVRTKSkKIAogc3RhdGljIHZvaWQgYm54MnhfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmJ1ZikKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaSwgajsKKwlpbnQgaSwgaiwgazsKIAogCXN3aXRjaCAoc3RyaW5nc2V0KSB7CiAJY2FzZSBFVEhfU1NfU1RBVFM6Ci0JCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspIHsKLQkJCWlmIChJU19OT1RfRTFITUZfU1RBVChicCwgaSkpCi0JCQkJY29udGludWU7Ci0JCQlzdHJjcHkoYnVmICsgaipFVEhfR1NUUklOR19MRU4sCi0JCQkgICAgICAgYm54Mnhfc3RhdHNfYXJyW2ldLnN0cmluZyk7Ci0JCQlqKys7CisJCWlmIChpc19tdWx0aShicCkpIHsKKwkJCWsgPSAwOworCQkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJCQlmb3IgKGogPSAwOyBqIDwgQk5YMlhfTlVNX1FfU1RBVFM7IGorKykKKwkJCQkJc3ByaW50ZihidWYgKyAoayArIGopKkVUSF9HU1RSSU5HX0xFTiwKKwkJCQkJCWJueDJ4X3Ffc3RhdHNfYXJyW2pdLnN0cmluZywgaSk7CisJCQkJayArPSBCTlgyWF9OVU1fUV9TVEFUUzsKKwkJCX0KKwkJCWlmIChJU19FMUhNRl9NT0RFX1NUQVQoYnApKQorCQkJCWJyZWFrOworCQkJZm9yIChqID0gMDsgaiA8IEJOWDJYX05VTV9TVEFUUzsgaisrKQorCQkJCXN0cmNweShidWYgKyAoayArIGopKkVUSF9HU1RSSU5HX0xFTiwKKwkJCQkgICAgICAgYm54Mnhfc3RhdHNfYXJyW2pdLnN0cmluZyk7CisJCX0gZWxzZSB7CisJCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7CisJCQkJaWYgKElTX0UxSE1GX01PREVfU1RBVChicCkgJiYgSVNfUE9SVF9TVEFUKGkpKQorCQkJCQljb250aW51ZTsKKwkJCQlzdHJjcHkoYnVmICsgaipFVEhfR1NUUklOR19MRU4sCisJCQkJICAgICAgIGJueDJ4X3N0YXRzX2FycltpXS5zdHJpbmcpOworCQkJCWorKzsKKwkJCX0KIAkJfQogCQlicmVhazsKIApAQCAtOTE2OCwxMyArOTg3MSwyMiBAQAogc3RhdGljIGludCBibngyeF9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaSwgbnVtX3N0YXRzID0gMDsKKwlpbnQgaSwgbnVtX3N0YXRzOwogCi0JZm9yIChpID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKSB7Ci0JCWlmIChJU19OT1RfRTFITUZfU1RBVChicCwgaSkpCi0JCQljb250aW51ZTsKLQkJbnVtX3N0YXRzKys7CisJaWYgKGlzX211bHRpKGJwKSkgeworCQludW1fc3RhdHMgPSBCTlgyWF9OVU1fUV9TVEFUUyAqIEJOWDJYX05VTV9RVUVVRVMoYnApOworCQlpZiAoIUlTX0UxSE1GX01PREVfU1RBVChicCkpCisJCQludW1fc3RhdHMgKz0gQk5YMlhfTlVNX1NUQVRTOworCX0gZWxzZSB7CisJCWlmIChJU19FMUhNRl9NT0RFX1NUQVQoYnApKSB7CisJCQludW1fc3RhdHMgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IEJOWDJYX05VTV9TVEFUUzsgaSsrKQorCQkJCWlmIChJU19GVU5DX1NUQVQoaSkpCisJCQkJCW51bV9zdGF0cysrOworCQl9IGVsc2UKKwkJCW51bV9zdGF0cyA9IEJOWDJYX05VTV9TVEFUUzsKIAl9CisKIAlyZXR1cm4gbnVtX3N0YXRzOwogfQogCkBAIC05MTgyLDI5ICs5ODk0LDcxIEBACiAJCQkJICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpidWYpCiB7CiAJc3RydWN0IGJueDJ4ICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTMyICpod19zdGF0cyA9ICh1MzIgKikmYnAtPmV0aF9zdGF0czsKLQlpbnQgaSwgajsKKwl1MzIgKmh3X3N0YXRzLCAqb2Zmc2V0OworCWludCBpLCBqLCBrOwogCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBCTlgyWF9OVU1fU1RBVFM7IGkrKykgewotCQlpZiAoSVNfTk9UX0UxSE1GX1NUQVQoYnAsIGkpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGJueDJ4X3N0YXRzX2FycltpXS5zaXplID09IDApIHsKLQkJCS8qIHNraXAgdGhpcyBjb3VudGVyICovCi0JCQlidWZbal0gPSAwOwotCQkJaisrOwotCQkJY29udGludWU7CisJaWYgKGlzX211bHRpKGJwKSkgeworCQlrID0gMDsKKwkJZm9yX2VhY2hfcXVldWUoYnAsIGkpIHsKKwkJCWh3X3N0YXRzID0gKHUzMiAqKSZicC0+ZnBbaV0uZXRoX3Ffc3RhdHM7CisJCQlmb3IgKGogPSAwOyBqIDwgQk5YMlhfTlVNX1FfU1RBVFM7IGorKykgeworCQkJCWlmIChibngyeF9xX3N0YXRzX2FycltqXS5zaXplID09IDApIHsKKwkJCQkJLyogc2tpcCB0aGlzIGNvdW50ZXIgKi8KKwkJCQkJYnVmW2sgKyBqXSA9IDA7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlvZmZzZXQgPSAoaHdfc3RhdHMgKworCQkJCQkgIGJueDJ4X3Ffc3RhdHNfYXJyW2pdLm9mZnNldCk7CisJCQkJaWYgKGJueDJ4X3Ffc3RhdHNfYXJyW2pdLnNpemUgPT0gNCkgeworCQkJCQkvKiA0LWJ5dGUgY291bnRlciAqLworCQkJCQlidWZbayArIGpdID0gKHU2NCkgKm9mZnNldDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8qIDgtYnl0ZSBjb3VudGVyICovCisJCQkJYnVmW2sgKyBqXSA9IEhJTE9fVTY0KCpvZmZzZXQsICoob2Zmc2V0ICsgMSkpOworCQkJfQorCQkJayArPSBCTlgyWF9OVU1fUV9TVEFUUzsKIAkJfQotCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2ldLnNpemUgPT0gNCkgewotCQkJLyogNC1ieXRlIGNvdW50ZXIgKi8KLQkJCWJ1ZltqXSA9ICh1NjQpICooaHdfc3RhdHMgKyBibngyeF9zdGF0c19hcnJbaV0ub2Zmc2V0KTsKLQkJCWorKzsKLQkJCWNvbnRpbnVlOworCQlpZiAoSVNfRTFITUZfTU9ERV9TVEFUKGJwKSkKKwkJCXJldHVybjsKKwkJaHdfc3RhdHMgPSAodTMyICopJmJwLT5ldGhfc3RhdHM7CisJCWZvciAoaiA9IDA7IGogPCBCTlgyWF9OVU1fU1RBVFM7IGorKykgeworCQkJaWYgKGJueDJ4X3N0YXRzX2FycltqXS5zaXplID09IDApIHsKKwkJCQkvKiBza2lwIHRoaXMgY291bnRlciAqLworCQkJCWJ1ZltrICsgal0gPSAwOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJb2Zmc2V0ID0gKGh3X3N0YXRzICsgYm54Mnhfc3RhdHNfYXJyW2pdLm9mZnNldCk7CisJCQlpZiAoYm54Mnhfc3RhdHNfYXJyW2pdLnNpemUgPT0gNCkgeworCQkJCS8qIDQtYnl0ZSBjb3VudGVyICovCisJCQkJYnVmW2sgKyBqXSA9ICh1NjQpICpvZmZzZXQ7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiA4LWJ5dGUgY291bnRlciAqLworCQkJYnVmW2sgKyBqXSA9IEhJTE9fVTY0KCpvZmZzZXQsICoob2Zmc2V0ICsgMSkpOwogCQl9Ci0JCS8qIDgtYnl0ZSBjb3VudGVyICovCi0JCWJ1ZltqXSA9IEhJTE9fVTY0KCooaHdfc3RhdHMgKyBibngyeF9zdGF0c19hcnJbaV0ub2Zmc2V0KSwKLQkJCQkgICooaHdfc3RhdHMgKyBibngyeF9zdGF0c19hcnJbaV0ub2Zmc2V0ICsgMSkpOwotCQlqKys7CisJfSBlbHNlIHsKKwkJaHdfc3RhdHMgPSAodTMyICopJmJwLT5ldGhfc3RhdHM7CisJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgQk5YMlhfTlVNX1NUQVRTOyBpKyspIHsKKwkJCWlmIChJU19FMUhNRl9NT0RFX1NUQVQoYnApICYmIElTX1BPUlRfU1RBVChpKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChibngyeF9zdGF0c19hcnJbaV0uc2l6ZSA9PSAwKSB7CisJCQkJLyogc2tpcCB0aGlzIGNvdW50ZXIgKi8KKwkJCQlidWZbal0gPSAwOworCQkJCWorKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCW9mZnNldCA9IChod19zdGF0cyArIGJueDJ4X3N0YXRzX2FycltpXS5vZmZzZXQpOworCQkJaWYgKGJueDJ4X3N0YXRzX2FycltpXS5zaXplID09IDQpIHsKKwkJCQkvKiA0LWJ5dGUgY291bnRlciAqLworCQkJCWJ1ZltqXSA9ICh1NjQpICpvZmZzZXQ7CisJCQkJaisrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogOC1ieXRlIGNvdW50ZXIgKi8KKwkJCWJ1ZltqXSA9IEhJTE9fVTY0KCpvZmZzZXQsICoob2Zmc2V0ICsgMSkpOworCQkJaisrOworCQl9CiAJfQogfQogCkBAIC05MjUxLDYgKzEwMDA1LDggQEAKIAkuZ2V0X3NldHRpbmdzCQk9IGJueDJ4X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IGJueDJ4X3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gYm54MnhfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbgkJPSBibngyeF9nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzCQk9IGJueDJ4X2dldF9yZWdzLAogCS5nZXRfd29sCQk9IGJueDJ4X2dldF93b2wsCiAJLnNldF93b2wJCT0gYm54Mnhfc2V0X3dvbCwKIAkuZ2V0X21zZ2xldmVsCQk9IGJueDJ4X2dldF9tc2dsZXZlbCwKQEAgLTkzNjMsMjUgKzEwMTE5LDQxIEBACiAJYm54MnhfdXBkYXRlX2Zwc2JfaWR4KGZwKTsKIAogCWlmIChibngyeF9oYXNfdHhfd29yayhmcCkpCi0JCWJueDJ4X3R4X2ludChmcCwgYnVkZ2V0KTsKKwkJYm54MnhfdHhfaW50KGZwKTsKIAotCWlmIChibngyeF9oYXNfcnhfd29yayhmcCkpCisJaWYgKGJueDJ4X2hhc19yeF93b3JrKGZwKSkgewogCQl3b3JrX2RvbmUgPSBibngyeF9yeF9pbnQoZnAsIGJ1ZGdldCk7Ci0Jcm1iKCk7IC8qIEJOWDJYX0hBU19XT1JLKCkgcmVhZHMgdGhlIHN0YXR1cyBibG9jayAqLwogCi0JLyogbXVzdCBub3QgY29tcGxldGUgaWYgd2UgY29uc3VtZWQgZnVsbCBidWRnZXQgKi8KLQlpZiAoKHdvcmtfZG9uZSA8IGJ1ZGdldCkgJiYgIUJOWDJYX0hBU19XT1JLKGZwKSkgeworCQkvKiBtdXN0IG5vdCBjb21wbGV0ZSBpZiB3ZSBjb25zdW1lZCBmdWxsIGJ1ZGdldCAqLworCQlpZiAod29ya19kb25lID49IGJ1ZGdldCkKKwkJCWdvdG8gcG9sbF9hZ2FpbjsKKwl9CiAKKwkvKiBCTlgyWF9IQVNfV09SSygpIHJlYWRzIHRoZSBzdGF0dXMgYmxvY2ssIHRodXMgd2UgbmVlZCB0bworCSAqIGVuc3VyZSB0aGF0IHN0YXR1cyBibG9jayBpbmRpY2VzIGhhdmUgYmVlbiBhY3R1YWxseSByZWFkCisJICogKGJueDJ4X3VwZGF0ZV9mcHNiX2lkeCkgcHJpb3IgdG8gdGhpcyBjaGVjayAoQk5YMlhfSEFTX1dPUkspCisJICogc28gdGhhdCB3ZSB3b24ndCB3cml0ZSB0aGUgIm5ld2VyIiB2YWx1ZSBvZiB0aGUgc3RhdHVzIGJsb2NrIHRvIElHVQorCSAqIChpZiB0aGVyZSB3YXMgYSBETUEgcmlnaHQgYWZ0ZXIgQk5YMlhfSEFTX1dPUksgYW5kCisJICogaWYgdGhlcmUgaXMgbm8gcm1iLCB0aGUgbWVtb3J5IHJlYWRpbmcgKGJueDJ4X3VwZGF0ZV9mcHNiX2lkeCkKKwkgKiBtYXkgYmUgcG9zdHBvbmVkIHRvIHJpZ2h0IGJlZm9yZSBibngyeF9hY2tfc2IpLiBJbiB0aGlzIGNhc2UKKwkgKiB0aGVyZSB3aWxsIG5ldmVyIGJlIGFub3RoZXIgaW50ZXJydXB0IHVudGlsIHRoZXJlIGlzIGFub3RoZXIgdXBkYXRlCisJICogb2YgdGhlIHN0YXR1cyBibG9jaywgd2hpbGUgdGhlcmUgaXMgc3RpbGwgdW5oYW5kbGVkIHdvcmsuCisJICovCisJcm1iKCk7CisKKwlpZiAoIUJOWDJYX0hBU19XT1JLKGZwKSkgewogI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKIHBvbGxfcGFuaWM6CiAjZW5kaWYKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKLQkJYm54MnhfYWNrX3NiKGJwLCBGUF9TQl9JRChmcCksIFVTVE9STV9JRCwKKwkJYm54MnhfYWNrX3NiKGJwLCBmcC0+c2JfaWQsIFVTVE9STV9JRCwKIAkJCSAgICAgbGUxNl90b19jcHUoZnAtPmZwX3VfaWR4KSwgSUdVX0lOVF9OT1AsIDEpOwotCQlibngyeF9hY2tfc2IoYnAsIEZQX1NCX0lEKGZwKSwgQ1NUT1JNX0lELAorCQlibngyeF9hY2tfc2IoYnAsIGZwLT5zYl9pZCwgQ1NUT1JNX0lELAogCQkJICAgICBsZTE2X3RvX2NwdShmcC0+ZnBfY19pZHgpLCBJR1VfSU5UX0VOQUJMRSwgMSk7CiAJfQorCitwb2xsX2FnYWluOgogCXJldHVybiB3b3JrX2RvbmU7CiB9CiAKQEAgLTk0NTcsNyArMTAyMjksNyBAQAogCQlyYyA9IFhNSVRfUExBSU47CiAKIAllbHNlIHsKLQkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gbnRvaHMoRVRIX1BfSVBWNikpIHsKKwkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpIHsKIAkJCXJjID0gWE1JVF9DU1VNX1Y2OwogCQkJaWYgKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgPT0gSVBQUk9UT19UQ1ApCiAJCQkJcmMgfD0gWE1JVF9DU1VNX1RDUDsKQEAgLTk0NzksNyArMTAyNTEsOSBAQAogfQogCiAjaWYgKE1BWF9TS0JfRlJBR1MgPj0gTUFYX0ZFVENIX0JEIC0gMykKLS8qIGNoZWNrIGlmIHBhY2tldCByZXF1aXJlcyBsaW5lYXJpemF0aW9uIChwYWNrZXQgaXMgdG9vIGZyYWdtZW50ZWQpICovCisvKiBjaGVjayBpZiBwYWNrZXQgcmVxdWlyZXMgbGluZWFyaXphdGlvbiAocGFja2V0IGlzIHRvbyBmcmFnbWVudGVkKQorICAgbm8gbmVlZCB0byBjaGVjayBmcmFnbWVudGF0aW9uIGlmIHBhZ2Ugc2l6ZSA+IDhLICh0aGVyZSB3aWxsIGJlIG5vCisgICB2aW9sYXRpb24gdG8gRlcgcmVzdHJpY3Rpb25zKSAqLwogc3RhdGljIGludCBibngyeF9wa3RfcmVxX2xpbihzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICB1MzIgeG1pdF90eXBlKQogewpAQCAtOTUzOCw3ICsxMDMxMiw2IEBACiAJCQkJd25kX3N1bSAtPQogCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW3duZF9pZHhdLnNpemU7CiAJCQl9Ci0KIAkJfSBlbHNlIHsKIAkJCS8qIGluIG5vbi1MU08gdG9vIGZyYWdtZW50ZWQgcGFja2V0IHNob3VsZCBhbHdheXMKIAkJCSAgIGJlIGxpbmVhcml6ZWQgKi8KQEAgLTk1NjYsNiArMTAzMzksNyBAQAogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBibngyeF9mYXN0cGF0aCAqZnA7CisJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwogCXN0cnVjdCBzd190eF9iZCAqdHhfYnVmOwogCXN0cnVjdCBldGhfdHhfYmQgKnR4X2JkOwogCXN0cnVjdCBldGhfdHhfcGFyc2VfYmQgKnBiZCA9IE5VTEw7CkBAIC05NTgyLDEyICsxMDM1NiwxNCBAQAogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAjZW5kaWYKIAotCWZwX2luZGV4ID0gKHNtcF9wcm9jZXNzb3JfaWQoKSAlIGJwLT5udW1fcXVldWVzKTsKKwlmcF9pbmRleCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBmcF9pbmRleCk7CisKIAlmcCA9ICZicC0+ZnBbZnBfaW5kZXhdOwogCiAJaWYgKHVubGlrZWx5KGJueDJ4X3R4X2F2YWlsKGZwKSA8IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMykpKSB7Ci0JCWJwLT5ldGhfc3RhdHMuZHJpdmVyX3hvZmYrKywKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlmcC0+ZXRoX3Ffc3RhdHMuZHJpdmVyX3hvZmYrKywKKwkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOwogCQlCTlgyWF9FUlIoIkJVRyEgVHggcmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KQEAgLTk1OTgsOCArMTAzNzQsOSBAQAogCSAgIGlwX2hkcihza2IpLT5wcm90b2NvbCwgc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSwgeG1pdF90eXBlKTsKIAogI2lmIChNQVhfU0tCX0ZSQUdTID49IE1BWF9GRVRDSF9CRCAtIDMpCi0JLyogRmlyc3QsIGNoZWNrIGlmIHdlIG5lZWQgdG8gbGluZWFyaXplIHRoZSBza2IKLQkgICAoZHVlIHRvIEZXIHJlc3RyaWN0aW9ucykgKi8KKwkvKiBGaXJzdCwgY2hlY2sgaWYgd2UgbmVlZCB0byBsaW5lYXJpemUgdGhlIHNrYiAoZHVlIHRvIEZXCisJICAgcmVzdHJpY3Rpb25zKS4gTm8gbmVlZCB0byBjaGVjayBmcmFnbWVudGF0aW9uIGlmIHBhZ2Ugc2l6ZSA+IDhLCisJICAgKHRoZXJlIHdpbGwgYmUgbm8gdmlvbGF0aW9uIHRvIEZXIHJlc3RyaWN0aW9ucykgKi8KIAlpZiAoYm54MnhfcGt0X3JlcV9saW4oYnAsIHNrYiwgeG1pdF90eXBlKSkgewogCQkvKiBTdGF0aXN0aWNzIG9mIGxpbmVhcml6YXRpb24gKi8KIAkJYnAtPmxpbl9jbnQrKzsKQEAgLTk2NjQsOSArMTA0NDEsOSBAQAogCQlobGVuID0gKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhICsgdmxhbl9vZmYpIC8gMjsKIAogCQkvKiBmb3Igbm93IE5TIGZsYWcgaXMgbm90IHVzZWQgaW4gTGludXggKi8KLQkJcGJkLT5nbG9iYWxfZGF0YSA9IChobGVuIHwKLQkJCQkgICAgKChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QXzgwMjFRKSkgPDwKLQkJCQkgICAgIEVUSF9UWF9QQVJTRV9CRF9MTENfU05BUF9FTl9TSElGVCkpOworCQlwYmQtPmdsb2JhbF9kYXRhID0KKwkJCShobGVuIHwgKChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QXzgwMjFRKSkgPDwKKwkJCQkgRVRIX1RYX1BBUlNFX0JEX0xMQ19TTkFQX0VOX1NISUZUKSk7CiAKIAkJcGJkLT5pcF9obGVuID0gKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgLQogCQkJCXNrYl9uZXR3b3JrX2hlYWRlcihza2IpKSAvIDI7CkBAIC05ODEwLDEyICsxMDU4NywxMCBAQAogCSAqLwogCXdtYigpOwogCi0JZnAtPmh3X3R4X3Byb2RzLT5iZHNfcHJvZCA9Ci0JCWNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QpICsgbmJkKTsKKwlsZTE2X2FkZF9jcHUoJmZwLT5od190eF9wcm9kcy0+YmRzX3Byb2QsIG5iZCk7CiAJbWIoKTsgLyogRlcgcmVzdHJpY3Rpb246IG11c3Qgbm90IHJlb3JkZXIgd3JpdGluZyBuYmQgYW5kIHBhY2tldHMgKi8KLQlmcC0+aHdfdHhfcHJvZHMtPnBhY2tldHNfcHJvZCA9Ci0JCWNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGZwLT5od190eF9wcm9kcy0+cGFja2V0c19wcm9kKSArIDEpOwotCURPT1JCRUxMKGJwLCBGUF9JRFgoZnApLCAwKTsKKwlsZTMyX2FkZF9jcHUoJmZwLT5od190eF9wcm9kcy0+cGFja2V0c19wcm9kLCAxKTsKKwlET09SQkVMTChicCwgZnAtPmluZGV4LCAwKTsKIAogCW1taW93YigpOwogCkBAIC05ODI2LDEwICsxMDYwMSwxMCBAQAogCQkvKiBXZSB3YW50IGJueDJ4X3R4X2ludCB0byAic2VlIiB0aGUgdXBkYXRlZCB0eF9iZF9wcm9kCiAJCSAgIGlmIHdlIHB1dCBUeCBpbnRvIFhPRkYgc3RhdGUuICovCiAJCXNtcF9tYigpOwotCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCWJwLT5ldGhfc3RhdHMuZHJpdmVyX3hvZmYrKzsKKwkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOworCQlmcC0+ZXRoX3Ffc3RhdHMuZHJpdmVyX3hvZmYrKzsKIAkJaWYgKGJueDJ4X3R4X2F2YWlsKGZwKSA+PSBNQVhfU0tCX0ZSQUdTICsgMykKLQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKIAl9CiAJZnAtPnR4X3BrdCsrOwogCkBAIC05ODYyLDcgKzEwNjM3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogY2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jayBmcm9tIHNldF9tdWx0aWNhc3QgKi8KKy8qIGNhbGxlZCB3aXRoIG5ldGlmX3R4X2xvY2sgZnJvbSBkZXZfbWNhc3QuYyAqLwogc3RhdGljIHZvaWQgYm54Mnhfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYm54MnggKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTk5MjEsNyArMTA2OTYsNyBAQAogCQkJCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgogCQkJCQkJY2FtX2VudHJ5LmxzYl9tYWNfYWRkcik7CiAJCQl9Ci0JCQlvbGQgPSBjb25maWctPmhkci5sZW5ndGhfNmI7CisJCQlvbGQgPSBjb25maWctPmhkci5sZW5ndGg7CiAJCQlpZiAob2xkID4gaSkgewogCQkJCWZvciAoOyBpIDwgb2xkOyBpKyspIHsKIAkJCQkJaWYgKENBTV9JU19JTlZBTElEKGNvbmZpZy0+CkBAIC05OTQwLDkgKzEwNzE1LDkgQEAKIAkJCWVsc2UKIAkJCQlvZmZzZXQgPSBCTlgyWF9NQVhfTVVMVElDQVNUKigxICsgcG9ydCk7CiAKLQkJCWNvbmZpZy0+aGRyLmxlbmd0aF82YiA9IGk7CisJCQljb25maWctPmhkci5sZW5ndGggPSBpOwogCQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gb2Zmc2V0OwotCQkJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gQlBfQ0xfSUQoYnApOworCQkJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gYnAtPmZwLT5jbF9pZDsKIAkJCWNvbmZpZy0+aGRyLnJlc2VydmVkMSA9IDA7CiAKIAkJCWJueDJ4X3NwX3Bvc3QoYnAsIFJBTVJPRF9DTURfSURfRVRIX1NFVF9NQUMsIDAsCkBAIC0xMDEyOCw3ICsxMDkwMyw3IEBACiAJLm5kb19vcGVuCQk9IGJueDJ4X29wZW4sCiAJLm5kb19zdG9wCQk9IGJueDJ4X2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdAkJPSBibngyeF9zdGFydF94bWl0LAotCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gYm54Mnhfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBibngyeF9zZXRfcnhfbW9kZSwKIAkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGJueDJ4X2NoYW5nZV9tYWNfYWRkciwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX2RvX2lvY3RsCQk9IGJueDJ4X2lvY3RsLApAQCAtMTAxNDIsNyArMTA5MTcsNiBAQAogI2VuZGlmCiB9OwogCi0KIHN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2luaXRfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTAzMjEsNyArMTEwOTUsNyBAQAogCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOwogCiAJLyogZGV2IHplcm9lZCBpbiBpbml0X2V0aGVyZGV2ICovCi0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpicCkpOworCWRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZigqYnApLCBNQVhfQ09OVEVYVCk7CiAJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGFsbG9jYXRlIG5ldCBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEwMzQ4LDE0ICsxMTEyMiwxNCBAQAogCQlnb3RvIGluaXRfb25lX2V4aXQ7CiAJfQogCi0JYnAtPmNvbW1vbi5uYW1lID0gYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyAoJWMlZCkgUENJLUUgeCVkICVzIGZvdW5kIGF0IG1lbSAlbHgsIgotCSAgICAgICAiIElSUSAlZCwgIiwgZGV2LT5uYW1lLCBicC0+Y29tbW9uLm5hbWUsCisJICAgICAgICIgSVJRICVkLCAiLCBkZXYtPm5hbWUsIGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKIAkgICAgICAgKENISVBfUkVWKGJwKSA+PiAxMikgKyAnQScsIChDSElQX01FVEFMKGJwKSA+PiA0KSwKIAkgICAgICAgYm54MnhfZ2V0X3BjaWVfd2lkdGgoYnApLAogCSAgICAgICAoYm54MnhfZ2V0X3BjaWVfc3BlZWQoYnApID09IDIpID8gIjVHSHogKEdlbjIpIiA6ICIyLjVHSHoiLAogCSAgICAgICBkZXYtPmJhc2VfYWRkciwgYnAtPnBkZXYtPmlycSk7CiAJcHJpbnRrKEtFUk5fQ09OVCAibm9kZSBhZGRyICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CisKIAlyZXR1cm4gMDsKIAogaW5pdF9vbmVfZXhpdDoKQEAgLTEwNDg3LDE1ICsxMTI2MSwxNSBAQAogCQlzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kICpjb25maWcgPQogCQkJCQkJYm54Mnhfc3AoYnAsIG1jYXN0X2NvbmZpZyk7CiAKLQkJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+aGRyLmxlbmd0aF82YjsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5oZHIubGVuZ3RoOyBpKyspCiAJCQlDQU1fSU5WQUxJREFURShjb25maWctPmNvbmZpZ190YWJsZVtpXSk7CiAJfQogCiAJLyogRnJlZSBTS0JzLCBTR0VzLCBUUEEgcG9vbCBhbmQgZHJpdmVyIGludGVybmFscyAqLwogCWJueDJ4X2ZyZWVfc2ticyhicCk7Ci0JZm9yX2VhY2hfcXVldWUoYnAsIGkpCisJZm9yX2VhY2hfcnhfcXVldWUoYnAsIGkpCiAJCWJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKGJwLCBicC0+ZnAgKyBpLCBOVU1fUlhfU0dFKTsKLQlmb3JfZWFjaF9xdWV1ZShicCwgaSkKKwlmb3JfZWFjaF9yeF9xdWV1ZShicCwgaSkKIAkJbmV0aWZfbmFwaV9kZWwoJmJueDJ4X2ZwKGJwLCBpLCBuYXBpKSk7CiAJYm54MnhfZnJlZV9tZW0oYnApOwogCkBAIC0xMDYyMiw4ICsxMTM5Niw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGJueDJ4X2Vycl9oYW5kbGVyID0gewogCS5lcnJvcl9kZXRlY3RlZCA9IGJueDJ4X2lvX2Vycm9yX2RldGVjdGVkLAotCS5zbG90X3Jlc2V0ID0gYm54MnhfaW9fc2xvdF9yZXNldCwKLQkucmVzdW1lID0gYm54MnhfaW9fcmVzdW1lLAorCS5zbG90X3Jlc2V0ICAgICA9IGJueDJ4X2lvX3Nsb3RfcmVzZXQsCisJLnJlc3VtZSAgICAgICAgID0gYm54MnhfaW9fcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJueDJ4X3BjaV9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9yZWcuaCBiL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oCmluZGV4IGQwODRlNWYuLmI4Y2U2ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X3JlZy5oCkBAIC0zMCw4ICszMCwyMCBAQAogICAgYWRkcmVzcyBCUkIxX0lORF9GUkVFX0xJU1RfUFJTX0NSRFQrMSBpbml0aWFsaXplIGZyZWUgdGFpbC4gQXQgYWRkcmVzcwogICAgQlJCMV9JTkRfRlJFRV9MSVNUX1BSU19DUkRUKzIgaW5pdGlhbGl6ZSBwYXJzZXIgaW5pdGlhbCBjcmVkaXQuICovCiAjZGVmaW5lIEJSQjFfUkVHX0ZSRUVfTElTVF9QUlNfQ1JEVAkJCQkgMHg2MDIwMAorLyogW1JXIDEwXSBUaGUgbnVtYmVyIG9mIGZyZWUgYmxvY2tzIGFib3ZlIHdoaWNoIHRoZSBIaWdoX2xsZmMgc2lnbmFsIHRvCisgICBpbnRlcmZhY2UgI24gaXMgZGUtYXNzZXJ0ZWQuICovCisjZGVmaW5lIEJSQjFfUkVHX0hJR0hfTExGQ19ISUdIX1RIUkVTSE9MRF8wCQkJIDB4NjAxNGMKKy8qIFtSVyAxMF0gVGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcyBiZWxvdyB3aGljaCB0aGUgSGlnaF9sbGZjIHNpZ25hbCB0bworICAgaW50ZXJmYWNlICNuIGlzIGFzc2VydGVkLiAqLworI2RlZmluZSBCUkIxX1JFR19ISUdIX0xMRkNfTE9XX1RIUkVTSE9MRF8wCQkJIDB4NjAxM2MKIC8qIFtSVyAyM10gTEwgUkFNIGRhdGEuICovCiAjZGVmaW5lIEJSQjFfUkVHX0xMX1JBTSAJCQkJCSAweDYxMDAwCisvKiBbUlcgMTBdIFRoZSBudW1iZXIgb2YgZnJlZSBibG9ja3MgYWJvdmUgd2hpY2ggdGhlIExvd19sbGZjIHNpZ25hbCB0bworICAgaW50ZXJmYWNlICNuIGlzIGRlLWFzc2VydGVkLiAqLworI2RlZmluZSBCUkIxX1JFR19MT1dfTExGQ19ISUdIX1RIUkVTSE9MRF8wCQkJIDB4NjAxNmMKKy8qIFtSVyAxMF0gVGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcyBiZWxvdyB3aGljaCB0aGUgTG93X2xsZmMgc2lnbmFsIHRvCisgICBpbnRlcmZhY2UgI24gaXMgYXNzZXJ0ZWQuICovCisjZGVmaW5lIEJSQjFfUkVHX0xPV19MTEZDX0xPV19USFJFU0hPTERfMAkJCSAweDYwMTVjCiAvKiBbUiAyNF0gVGhlIG51bWJlciBvZiBmdWxsIGJsb2Nrcy4gKi8KICNkZWZpbmUgQlJCMV9SRUdfTlVNX09GX0ZVTExfQkxPQ0tTCQkJCSAweDYwMDkwCiAvKiBbU1QgMzJdIFRoZSBudW1iZXIgb2YgY3ljbGVzIHRoYXQgdGhlIHdyaXRlX2Z1bGwgc2lnbmFsIHRvd2FyZHMgTUFDICMwCkBAIC0xMjUsNiArMTM3LDEwIEBACiAgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAogICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLwogI2RlZmluZSBDQ01fUkVHX0NRTV9QX1dFSUdIVAkJCQkJIDB4ZDAwYjgKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBRTSAoc2Vjb25kYXJ5KSBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMAorICAgc3RhbmRzIGZvciB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgQ0NNX1JFR19DUU1fU19XRUlHSFQJCQkJCSAweGQwMGJjCiAvKiBbUlcgMV0gSW5wdXQgU0RNIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMgZGlzcmVnYXJkZWQ7CiAgICBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlIHRyZWF0ZWQgYXMgdXN1YWw7CiAgICBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtMTMyLDYgKzE0OCwxMCBAQAogLyogW1JDIDFdIFNldCB3aGVuIHRoZSBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKQogICAgYXQgdGhlIFNETSBpbnRlcmZhY2UgaXMgZGV0ZWN0ZWQuICovCiAjZGVmaW5lIENDTV9SRUdfQ1NETV9MRU5HVEhfTUlTIAkJCQkgMHhkMDE3MAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFNETSBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgQ0NNX1JFR19DU0RNX1dFSUdIVAkJCQkJIDB4ZDAwYjQKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciBmb3IgUU0gZm9ybWF0dGluZyBpbiBjYXNlIG9mIGFuIGVycm9yIGluIHRoZSBRTQogICAgaW5wdXRzLiAqLwogI2RlZmluZSBDQ01fUkVHX0VSUl9DQ01fSERSCQkJCQkgMHhkMDA5NApAQCAtMjExLDYgKzIzMSwxMSBAQAogLyogW1JDIDFdIFNldCB3aGVuIHRoZSBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKQogICAgYXQgdGhlIFNUT1JNIGludGVyZmFjZSBpcyBkZXRlY3RlZC4gKi8KICNkZWZpbmUgQ0NNX1JFR19TVE9STV9MRU5HVEhfTUlTCQkJCSAweGQwMTZjCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgU1RPUk0gaW5wdXQgaW4gdGhlIFdSUiAoV2VpZ2h0ZWQgUm91bmQgcm9iaW4pCisgICBtZWNoYW5pc20uIDAgc3RhbmRzIGZvciB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3IKKyAgIHdlaWdodCAxKGxlYXN0IHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyIChtb3JlIHByaW9yaXRpc2VkKTsKKyAgIHRjLiAqLworI2RlZmluZSBDQ01fUkVHX1NUT1JNX1dFSUdIVAkJCQkJIDB4ZDAwOWMKIC8qIFtSVyAxXSBJbnB1dCB0c2VtIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtMzIzLDcgKzM0OCwxMSBAQAogICAgc2V0IG9uZSBvZiB0aGVzZSBiaXRzLiB0aGUgYml0IGRlc2NyaXB0aW9uIGNhbiBiZSBmb3VuZCBpbiBDRkMKICAgIHNwZWNpZmljYXRpb25zICovCiAjZGVmaW5lIENGQ19SRUdfRVJST1JfVkVDVE9SCQkJCQkgMHgxMDQwM2MKKy8qIFtXQiA5M10gTENJRCBpbmZvIHJhbSBhY2Nlc3MgKi8KKyNkZWZpbmUgQ0ZDX1JFR19JTkZPX1JBTQkJCQkJIDB4MTA1MDAwCisjZGVmaW5lIENGQ19SRUdfSU5GT19SQU1fU0laRQkJCQkJIDEwMjQKICNkZWZpbmUgQ0ZDX1JFR19JTklUX1JFRwkJCQkJIDB4MTA0MDRjCisjZGVmaW5lIENGQ19SRUdfSU5URVJGQUNFUwkJCQkJIDB4MTA0MDU4CiAvKiBbUlcgMjRdIHt3ZWlnaHRfbG9hZF9jbGllbnQ3WzI6MF0gdG8gd2VpZ2h0X2xvYWRfY2xpZW50MFsyOjBdfS4gdGhpcwogICAgZmllbGQgYWxsb3dzIGNoYW5naW5nIHRoZSBwcmlvcml0aWVzIG9mIHRoZSB3ZWlnaHRlZC1yb3VuZC1yb2JpbiBhcmJpdGVyCiAgICB3aGljaCBzZWxlY3RzIHdoaWNoIENGQyBsb2FkIGNsaWVudCBzaG91bGQgYmUgc2VydmVkIG5leHQgKi8KQEAgLTMzNyw4ICszNjYsNiBAQAogI2RlZmluZSBDRkNfUkVHX05VTV9MQ0lEU19BTExPQyAJCQkJIDB4MTA0MDIwCiAvKiBbUiA5XSBOdW1iZXIgb2YgQXJyaXZpbmcgTENJRHMgaW4gTGluayBMaXN0IEJsb2NrICovCiAjZGVmaW5lIENGQ19SRUdfTlVNX0xDSURTX0FSUklWSU5HCQkJCSAweDEwNDAwNAotLyogW1IgOV0gTnVtYmVyIG9mIEluc2lkZSBMQ0lEcyBpbiBMaW5rIExpc3QgQmxvY2sgKi8KLSNkZWZpbmUgQ0ZDX1JFR19OVU1fTENJRFNfSU5TSURFCQkJCSAweDEwNDAwOAogLyogW1IgOV0gTnVtYmVyIG9mIExlYXZpbmcgTENJRHMgaW4gTGluayBMaXN0IEJsb2NrICovCiAjZGVmaW5lIENGQ19SRUdfTlVNX0xDSURTX0xFQVZJTkcJCQkJIDB4MTA0MDE4CiAvKiBbUlcgOF0gVGhlIGV2ZW50IGlkIGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCAwICovCkBAIC03MzAsNiArNzU3LDcgQEAKICNkZWZpbmUgRE9SUV9SRUdfU0hSVF9DTUhFQUQJCQkJCSAweDE3MDA1NAogI2RlZmluZSBIQ19DT05GSUdfMF9SRUdfQVRUTl9CSVRfRU5fMAkJCQkgKDB4MTw8NCkKICNkZWZpbmUgSENfQ09ORklHXzBfUkVHX0lOVF9MSU5FX0VOXzAJCQkJICgweDE8PDMpCisjZGVmaW5lIEhDX0NPTkZJR18wX1JFR19NU0lfQVRUTl9FTl8wCQkJCSAoMHgxPDw3KQogI2RlZmluZSBIQ19DT05GSUdfMF9SRUdfTVNJX01TSVhfSU5UX0VOXzAJCQkgKDB4MTw8MikKICNkZWZpbmUgSENfQ09ORklHXzBfUkVHX1NJTkdMRV9JU1JfRU5fMCAJCQkgKDB4MTw8MSkKICNkZWZpbmUgSENfUkVHX0FHR19JTlRfMAkJCQkJIDB4MTA4MDUwCkBAIC0xNDEwLDYgKzE0MzgsMjkgQEAKICAgIFRoaXMgaXMgdGhlIHJlc3VsdCB2YWx1ZSBvZiB0aGUgcGluOyBub3QgdGhlIGRyaXZlIHZhbHVlLiBXcml0aW5nIHRoZXNlCiAgICBiaXRzIHdpbGwgaGF2ZSBub3QgZWZmZWN0LiAqLwogI2RlZmluZSBNSVNDX1JFR19HUElPCQkJCQkJIDB4YTQ5MAorLyogW1JXIDhdIFRoZXNlIGJpdHMgZW5hYmxlIHRoZSBHUElPX0lOVHMgdG8gc2lnbmFscyBldmVudCB0byB0aGUKKyAgIElHVS9NQ1AuYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgbWFwOiBbMF0gcDBfZ3Bpb18wOyBbMV0gcDBfZ3Bpb18xOyBbMl0KKyAgIHAwX2dwaW9fMjsgWzNdIHAwX2dwaW9fMzsgWzRdIHAxX2dwaW9fMDsgWzVdIHAxX2dwaW9fMTsgWzZdIHAxX2dwaW9fMjsKKyAgIFs3XSBwMV9ncGlvXzM7ICovCisjZGVmaW5lIE1JU0NfUkVHX0dQSU9fRVZFTlRfRU4JCQkJCSAweGEyYmMKKy8qIFtSVyAzMl0gR1BJTyBJTlQuIFszMS0yOF0gT0xEX0NMUiBwb3J0MTsgWzI3LTI0XSBPTERfQ0xSIHBvcnQwOyBXcml0aW5nIGEKKyAgICcxJyB0byB0aGVzZSBiaXQgY2xlYXJzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgI09MRF9WQUxVRSByZWdpc3Rlci4KKyAgIFRoaXMgd2lsbCBhY2tub3dsZWRnZSBhbiBpbnRlcnJ1cHQgb24gdGhlIGZhbGxpbmcgZWRnZSBvZiBjb3JyZXNwb25kaW5nCisgICBHUElPIGlucHV0IChyZXNldCB2YWx1ZSAwKS4gWzIzLTE2XSBPTERfU0VUIFsyMy0xNl0gcG9ydDE7IE9MRF9TRVQgcG9ydDA7CisgICBXcml0aW5nIGEgJzEnIHRvIHRoZXNlIGJpdCBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGJpdCBpbiB0aGUgI09MRF9WQUxVRQorICAgcmVnaXN0ZXIuIFRoaXMgd2lsbCBhY2tub3dsZWRnZSBhbiBpbnRlcnJ1cHQgb24gdGhlIHJpc2luZyBlZGdlIG9mCisgICBjb3JyZXNwb25kaW5nIFNQSU8gaW5wdXQgKHJlc2V0IHZhbHVlIDApLiBbMTUtMTJdIE9MRF9WQUxVRSBbMTEtOF0gcG9ydDE7CisgICBPTERfVkFMVUUgcG9ydDA7IFJPOyBUaGVzZSBiaXRzIGluZGljYXRlIHRoZSBvbGQgdmFsdWUgb2YgdGhlIEdQSU8gaW5wdXQKKyAgIHZhbHVlLiBXaGVuIHRoZSB+SU5UX1NUQVRFIGJpdCBpcyBzZXQ7IHRoaXMgYml0IGluZGljYXRlcyB0aGUgT0xEIHZhbHVlCisgICBvZiB0aGUgcGluIHN1Y2ggdGhhdCBpZiB+SU5UX1NUQVRFIGlzIHNldCBhbmQgdGhpcyBiaXQgaXMgJzAnOyB0aGVuIHRoZQorICAgaW50ZXJydXB0IGlzIGR1ZSB0byBhIGxvdyB0byBoaWdoIGVkZ2UuIElmIH5JTlRfU1RBVEUgaXMgc2V0IGFuZCB0aGlzIGJpdAorICAgaXMgJzEnOyB0aGVuIHRoZSBpbnRlcnJ1cHQgaXMgZHVlIHRvIGEgaGlnaCB0byBsb3cgZWRnZSAocmVzZXQgdmFsdWUgMCkuCisgICBbNy00XSBJTlRfU1RBVEUgcG9ydDE7IFszLTBdIElOVF9TVEFURSBSTyBwb3J0MDsgVGhlc2UgYml0cyBpbmRpY2F0ZSB0aGUKKyAgIGN1cnJlbnQgR1BJTyBpbnRlcnJ1cHQgc3RhdGUgZm9yIGVhY2ggR1BJTyBwaW4uIFRoaXMgYml0IGlzIGNsZWFyZWQgd2hlbgorICAgdGhlIGFwcHJvcHJpYXRlICNPTERfU0VUIG9yICNPTERfQ0xSIGNvbW1hbmQgYml0IGlzIHdyaXR0ZW4uIFRoaXMgYml0IGlzCisgICBzZXQgd2hlbiB0aGUgR1BJTyBpbnB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgY3VycmVudCB2YWx1ZSBpbiAjT0xEX1ZBTFVFCisgICAocmVzZXQgdmFsdWUgMCkuICovCisjZGVmaW5lIE1JU0NfUkVHX0dQSU9fSU5UCQkJCQkgMHhhNDk0CiAvKiBbUiAyOF0gdGhpcyBmaWVsZCBob2xkIHRoZSBsYXN0IGluZm9ybWF0aW9uIHRoYXQgY2F1c2VkIHJlc2VydmVkCiAgICBhdHRlbnRpb24uIGJpdHMgWzE5OjBdIC0gYWRkcmVzczsgWzIyOjIwXSBmdW5jdGlvbjsgWzIzXSByZXNlcnZlZDsKICAgIFsyNzoyNF0gdGhlIG1hc3RlciB0aGF0IGNhdXNlZCB0aGUgYXR0ZW50aW9uIC0gYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcKQEAgLTE1NTQsNiArMTYwNSwxNCBAQAogICAgY29tbWFuZCBiaXQgaXMgd3JpdHRlbi4gVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIFNQSU8gaW5wdXQgZG9lcyBub3QKICAgIG1hdGNoIHRoZSBjdXJyZW50IHZhbHVlIGluICNPTERfVkFMVUUgKHJlc2V0IHZhbHVlIDApLiAqLwogI2RlZmluZSBNSVNDX1JFR19TUElPX0lOVAkJCQkJIDB4YTUwMAorLyogW1JXIDMyXSByZWxvYWQgdmFsdWUgZm9yIGNvdW50ZXIgNCBpZiByZWxvYWQ7IHRoZSB2YWx1ZSB3aWxsIGJlIHJlbG9hZCBpZgorICAgdGhlIGNvdW50ZXIgcmVhY2hlZCB6ZXJvIGFuZCB0aGUgcmVsb2FkIGJpdAorICAgKH5taXNjX3JlZ2lzdGVyc19zd190aW1lcl9jZmdfNC5zd190aW1lcl9jZmdfNFsxXSApIGlzIHNldCAqLworI2RlZmluZSBNSVNDX1JFR19TV19USU1FUl9SRUxPQURfVkFMXzQJCQkJIDB4YTJmYworLyogW1JXIDMyXSB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIgZm9yIHN3IHRpbWVyczEtOC4gdGhlcmUgYXJlIDggYWRkcmVzc2VzCisgICBpbiB0aGlzIHJlZ2lzdGVyLiBhZGRyZXMgMCAtIHRpbWVyIDE7IGFkZHJlc3MgLSB0aW1lciAy77+9YWRkcmVzcyA3IC0KKyAgIHRpbWVyIDggKi8KKyNkZWZpbmUgTUlTQ19SRUdfU1dfVElNRVJfVkFMCQkJCQkgMHhhNWMwCiAvKiBbUlcgMV0gU2V0IGJ5IHRoZSBNQ1AgdG8gcmVtZW1iZXIgaWYgb25lIG9yIG1vcmUgb2YgdGhlIGRyaXZlcnMgaXMvYXJlCiAgICBsb2FkZWQ7IDAtcHJlcGFyZTsgLXVucHJlcGFyZSAqLwogI2RlZmluZSBNSVNDX1JFR19VTlBSRVBBUkVECQkJCQkgMHhhNDI0CkBAIC0xNjYwLDYgKzE3MTksMTkgQEAKIC8qIFtSVyA0XSBsZWQgbW9kZSBmb3IgcG9ydDA6IDAgTUFDOyAxLTMgUEhZMTsgNCBNQUMyOyA1LTcgUEhZNDsgOC1NQUMzOwogICAgOS0xMVBIWTc7IDEyIE1BQzQ7IDEzLTE1IFBIWTEwOyAqLwogI2RlZmluZSBOSUdfUkVHX0xFRF9NT0RFX1AwCQkJCQkgMHgxMDJmMAorLyogW1JXIDNdIGZvciBwb3J0MCBlbmFibGUgZm9yIGxsZmMgcHBwIGFuZCBwYXVzZS4gYjAgLSBicmIxIGVuYWJsZTsgYjEtCisgICB0c2RtIGVuYWJsZTsgYjItIHVzZG0gZW5hYmxlICovCisjZGVmaW5lIE5JR19SRUdfTExGQ19FR1JFU1NfU1JDX0VOQUJMRV8wCQkJIDB4MTYwNzAKKy8qIFtSVyAxXSBTQUZDIGVuYWJsZSBmb3IgcG9ydDAuIFRoaXMgcmVnaXN0ZXIgbWF5IGdldCAxIG9ubHkgd2hlbgorICAgfnBwcF9lbmFibGUucHBwX2VuYWJsZSA9IDAgYW5kIHBhdXNlX2VuYWJsZS5wYXVzZV9lbmFibGUgPTAgZm9yIHRoZSBzYW1lCisgICBwb3J0ICovCisjZGVmaW5lIE5JR19SRUdfTExGQ19FTkFCTEVfMAkJCQkJIDB4MTYyMDgKKy8qIFtSVyAxNl0gY2xhc3NlcyBhcmUgaGlnaC1wcmlvcml0eSBmb3IgcG9ydDAgKi8KKyNkZWZpbmUgTklHX1JFR19MTEZDX0hJR0hfUFJJT1JJVFlfQ0xBU1NFU18wCQkJIDB4MTYwNTgKKy8qIFtSVyAxNl0gY2xhc3NlcyBhcmUgbG93LXByaW9yaXR5IGZvciBwb3J0MCAqLworI2RlZmluZSBOSUdfUkVHX0xMRkNfTE9XX1BSSU9SSVRZX0NMQVNTRVNfMAkJCSAweDE2MDYwCisvKiBbUlcgMV0gT3V0cHV0IGVuYWJsZSBvZiBtZXNzYWdlIHRvIExMRkMgQk1BQyBJRiBmb3IgcG9ydDAgKi8KKyNkZWZpbmUgTklHX1JFR19MTEZDX09VVF9FTl8wCQkJCQkgMHgxNjBjOAogI2RlZmluZSBOSUdfUkVHX0xMSDBfQUNQSV9QQVRfMF9DUkMJCQkJIDB4MTAxNWMKICNkZWZpbmUgTklHX1JFR19MTEgwX0FDUElfUEFUXzZfTEVOCQkJCSAweDEwMTU0CiAjZGVmaW5lIE5JR19SRUdfTExIMF9CUkIxX0RSVl9NQVNLCQkJCSAweDEwMjQ0CkBAIC0xNzMwLDYgKzE4MDIsMTAgQEAKICNkZWZpbmUgTklHX1JFR19OSUdfSU5UX1NUU18xCQkJCQkgMHgxMDNjMAogLyogW1IgMzJdIFBhcml0eSByZWdpc3RlciAjMCByZWFkICovCiAjZGVmaW5lIE5JR19SRUdfTklHX1BSVFlfU1RTCQkJCQkgMHgxMDNkMAorLyogW1JXIDFdIFBhdXNlIGVuYWJsZSBmb3IgcG9ydDAuIFRoaXMgcmVnaXN0ZXIgbWF5IGdldCAxIG9ubHkgd2hlbgorICAgfnNhZmNfZW5hYmxlLnNhZmNfZW5hYmxlID0gMCBhbmQgcHBwX2VuYWJsZS5wcHBfZW5hYmxlID0wIGZvciB0aGUgc2FtZQorICAgcG9ydCAqLworI2RlZmluZSBOSUdfUkVHX1BBVVNFX0VOQUJMRV8wCQkJCQkgMHgxNjBjMAogLyogW1JXIDFdIElucHV0IGVuYWJsZSBmb3IgUlggUEJGIExQIElGICovCiAjZGVmaW5lIE5JR19SRUdfUEJGX0xCX0lOX0VOCQkJCQkgMHgxMDBiNAogLyogW1JXIDFdIFZhbHVlIG9mIHRoaXMgcmVnaXN0ZXIgd2lsbCBiZSB0cmFuc21pdHRlZCB0byBwb3J0IHN3YXAgd2hlbgpAQCAtMTczOSw2ICsxODE1LDEwIEBACiAjZGVmaW5lIE5JR19SRUdfUFJTX0VPUF9PVVRfRU4JCQkJCSAweDEwMTA0CiAvKiBbUlcgMV0gSW5wdXQgZW5hYmxlIGZvciBSWCBwYXJzZXIgcmVxdWVzdCBJRiAqLwogI2RlZmluZSBOSUdfUkVHX1BSU19SRVFfSU5fRU4JCQkJCSAweDEwMGI4CisvKiBbUlcgNV0gY29udHJvbCB0byBzZXJkZXMgLSBDTDQ1IERFVkFEICovCisjZGVmaW5lIE5JR19SRUdfU0VSREVTMF9DVFJMX01EX0RFVkFECQkJCSAweDEwMzcwCisvKiBbUlcgMV0gY29udHJvbCB0byBzZXJkZXM7IDAgLSBjbGF1c2UgNDU7IDEgLSBjbGF1c2UgMjIgKi8KKyNkZWZpbmUgTklHX1JFR19TRVJERVMwX0NUUkxfTURfU1QJCQkJIDB4MTAzNmMKIC8qIFtSVyA1XSBjb250cm9sIHRvIHNlcmRlcyAtIENMMjIgUEhZX0FERCBhbmQgQ0w0NSBQUlRBRCAqLwogI2RlZmluZSBOSUdfUkVHX1NFUkRFUzBfQ1RSTF9QSFlfQUREUgkJCQkgMHgxMDM3NAogLyogW1IgMV0gc3RhdHVzIGZyb20gc2VyZGVzMCB0aGF0IGlucHV0cyB0byBpbnRlcnJ1cHQgbG9naWMgb2YgbGluayBzdGF0dXMgKi8KQEAgLTE4ODUsNiArMTk2NSw3IEBACiAjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV8yCQkJIDB4NDAwZTQKICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTE9BRF9UWVBFXzMJCQkgMHg0MDBlOAogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9MT0FEX1RZUEVfNAkJCSAweDQwMGVjCisjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX0xPQURfVFlQRV81CQkJIDB4NDAwZjAKIC8qIFtSVyAzMl0gVGhlIENNIGhlYWRlciBmb3IgZmx1c2ggbWVzc2FnZSB3aGVyZSAnbG9hZCBleGlzdGVkJyBiaXQgaW4gQ0ZDCiAgICBsb2FkIHJlc3BvbnNlIGlzIHNldCBhbmQgcGFja2V0IHR5cGUgaXMgMC4gVXNlZCBpbiBwYWNrZXQgc3RhcnQgbWVzc2FnZQogICAgdG8gVENNLiAqLwpAQCAtMTg5Myw2ICsxOTc0LDcgQEAKICNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzIJCQkgMHg0MDBjNAogI2RlZmluZSBQUlNfUkVHX0NNX0hEUl9GTFVTSF9OT19MT0FEX1RZUEVfMwkJCSAweDQwMGM4CiAjZGVmaW5lIFBSU19SRUdfQ01fSERSX0ZMVVNIX05PX0xPQURfVFlQRV80CQkJIDB4NDAwY2MKKyNkZWZpbmUgUFJTX1JFR19DTV9IRFJfRkxVU0hfTk9fTE9BRF9UWVBFXzUJCQkgMHg0MDBkMAogLyogW1JXIDMyXSBUaGUgQ00gaGVhZGVyIGZvciBhIG1hdGNoIGFuZCBwYWNrZXQgdHlwZSAxIGZvciBsb29wYmFjayBwb3J0LgogICAgVXNlZCBpbiBwYWNrZXQgc3RhcnQgbWVzc2FnZSB0byBUQ00uICovCiAjZGVmaW5lIFBSU19SRUdfQ01fSERSX0xPT1BCQUNLX1RZUEVfMQkJCQkgMHg0MDA5YwpAQCAtMjAzNSw2ICsyMTE3LDE5IEBACiAjZGVmaW5lIFBYUDJfUkVHX1BHTF9JTlRfWFNETV81IAkJCQkgMHgxMjA0ZTgKICNkZWZpbmUgUFhQMl9SRUdfUEdMX0lOVF9YU0RNXzYgCQkJCSAweDEyMDRlYwogI2RlZmluZSBQWFAyX1JFR19QR0xfSU5UX1hTRE1fNyAJCQkJIDB4MTIwNGYwCisvKiBbUlcgM10gdGhpcyBmaWVsZCBhbGxvd3Mgb25lIGZ1bmN0aW9uIHRvIHByZXRlbmQgYmVpbmcgYW5vdGhlciBmdW5jdGlvbgorICAgd2hlbiBhY2Nlc3NpbmcgYW55IEJBUiBtYXBwZWQgcmVzb3VyY2Ugd2l0aGluIHRoZSBkZXZpY2UuIHRoZSB2YWx1ZSBvZgorICAgdGhlIGZpZWxkIGlzIHRoZSBudW1iZXIgb2YgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBhY2Nlc3NlZAorICAgZWZmZWN0aXZlbHkuIGFmdGVyIHNvZnR3YXJlIHdyaXRlIHRvIHRoaXMgYml0IGl0IG11c3QgcmVhZCBpdCBpbiBvcmRlciB0bworICAga25vdyB0aGF0IHRoZSBuZXcgdmFsdWUgaXMgdXBkYXRlZCAqLworI2RlZmluZSBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YwCQkJCSAweDEyMDY3NAorI2RlZmluZSBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YxCQkJCSAweDEyMDY3OAorI2RlZmluZSBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YyCQkJCSAweDEyMDY3YworI2RlZmluZSBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0YzCQkJCSAweDEyMDY4MAorI2RlZmluZSBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y0CQkJCSAweDEyMDY4NAorI2RlZmluZSBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y1CQkJCSAweDEyMDY4OAorI2RlZmluZSBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y2CQkJCSAweDEyMDY4YworI2RlZmluZSBQWFAyX1JFR19QR0xfUFJFVEVORF9GVU5DX0Y3CQkJCSAweDEyMDY5MAogLyogW1IgMV0gdGhpcyBiaXQgaW5kaWNhdGVzIHRoYXQgYSByZWFkIHJlcXVlc3Qgd2FzIGJsb2NrZWQgYmVjYXVzZSBvZgogICAgYnVzX21hc3Rlcl9lbiB3YXMgZGVhc3NlcnRlZCAqLwogI2RlZmluZSBQWFAyX1JFR19QR0xfUkVBRF9CTE9DS0VECQkJCSAweDEyMDU2OApAQCAtMjQ5OCw2ICsyNTkzLDExIEBACiAgICBjb25zaWRlcmVkIHplcm8gc28gcHJhY3RpY2FsbHkgdGhlcmUgYXJlIG9ubHkgMjAgYml0cyBpbiB0aGlzIHJlZ2lzdGVyOwogICAgcXVldWVzIDYzLTAgKi8KICNkZWZpbmUgUU1fUkVHX0JBU0VBRERSIAkJCQkJIDB4MTY4OTAwCisvKiBbUlcgMzJdIFRoZSBiYXNlIGxvZ2ljYWwgYWRkcmVzcyAoaW4gYnl0ZXMpIG9mIGVhY2ggcGh5c2ljYWwgcXVldWUuIFRoZQorICAgaW5kZXggSSByZXByZXNlbnRzIHRoZSBwaHlzaWNhbCBxdWV1ZSBudW1iZXIuIFRoZSAxMiBsc2JzIGFyZSBpZ25vcmUgYW5kCisgICBjb25zaWRlcmVkIHplcm8gc28gcHJhY3RpY2FsbHkgdGhlcmUgYXJlIG9ubHkgMjAgYml0cyBpbiB0aGlzIHJlZ2lzdGVyOworICAgcXVldWVzIDEyNy02NCAqLworI2RlZmluZSBRTV9SRUdfQkFTRUFERFJfRVhUX0EJCQkJCSAweDE2ZTEwMAogLyogW1JXIDE2XSBUaGUgYnl0ZSBjcmVkaXQgY29zdCBmb3IgZWFjaCB0YXNrLiBUaGlzIHZhbHVlIGlzIGZvciBib3RoIHBvcnRzICovCiAjZGVmaW5lIFFNX1JFR19CWVRFQ1JEQ09TVAkJCQkJIDB4MTY4MjM0CiAvKiBbUlcgMTZdIFRoZSBpbml0aWFsIGJ5dGUgY3JlZGl0IHZhbHVlIGZvciBib3RoIHBvcnRzLiAqLwpAQCAtMzQzOCw2ICszNTM4LDE2IEBACiAjZGVmaW5lIFNSQ19SRUdfS0VZUlNTMF8wCQkJCQkgMHg0MDQwOAogI2RlZmluZSBTUkNfUkVHX0tFWVJTUzBfNwkJCQkJIDB4NDA0MjQKICNkZWZpbmUgU1JDX1JFR19LRVlSU1MxXzkJCQkJCSAweDQwNDU0CisjZGVmaW5lIFNSQ19SRUdfS0VZU0VBUkNIXzAJCQkJCSAweDQwNDU4CisjZGVmaW5lIFNSQ19SRUdfS0VZU0VBUkNIXzEJCQkJCSAweDQwNDVjCisjZGVmaW5lIFNSQ19SRUdfS0VZU0VBUkNIXzIJCQkJCSAweDQwNDYwCisjZGVmaW5lIFNSQ19SRUdfS0VZU0VBUkNIXzMJCQkJCSAweDQwNDY0CisjZGVmaW5lIFNSQ19SRUdfS0VZU0VBUkNIXzQJCQkJCSAweDQwNDY4CisjZGVmaW5lIFNSQ19SRUdfS0VZU0VBUkNIXzUJCQkJCSAweDQwNDZjCisjZGVmaW5lIFNSQ19SRUdfS0VZU0VBUkNIXzYJCQkJCSAweDQwNDcwCisjZGVmaW5lIFNSQ19SRUdfS0VZU0VBUkNIXzcJCQkJCSAweDQwNDc0CisjZGVmaW5lIFNSQ19SRUdfS0VZU0VBUkNIXzgJCQkJCSAweDQwNDc4CisjZGVmaW5lIFNSQ19SRUdfS0VZU0VBUkNIXzkJCQkJCSAweDQwNDdjCiAjZGVmaW5lIFNSQ19SRUdfTEFTVEZSRUUwCQkJCQkgMHg0MDUzMAogI2RlZmluZSBTUkNfUkVHX05VTUJFUl9IQVNIX0JJVFMwCQkJCSAweDQwNDAwCiAvKiBbUlcgMV0gUmVzZXQgaW50ZXJuYWwgc3RhdGUgbWFjaGluZXMuICovCkBAIC0zNDgxLDYgKzM1OTEsMTAgQEAKIC8qIFtSQyAxXSBNZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKSBhdCB0aGUgSW4jOQogICAgaW50ZXJmYWNlLiAqLwogI2RlZmluZSBUQ01fUkVHX0NTRU1fTEVOR1RIX01JUyAJCQkJIDB4NTAxNzQKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCBjc2VtIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBUQ01fUkVHX0NTRU1fV0VJR0hUCQkJCQkgMHg1MDBiYwogLyogW1JXIDhdIFRoZSBFdmVudCBJRCBpbiBjYXNlIG9mIEVycm9yRmxnIGlzIHNldCBpbiB0aGUgaW5wdXQgbWVzc2FnZS4gKi8KICNkZWZpbmUgVENNX1JFR19FUlJfRVZOVF9JRAkJCQkJIDB4NTAwYTAKIC8qIFtSVyAyOF0gVGhlIENNIGVycm9uZW91cyBoZWFkZXIgZm9yIFFNIGFuZCBUaW1lcnMgZm9ybWF0dGluZy4gKi8KQEAgLTM1MjQsNiArMzYzOCw3IEBACiAjZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfMgkJCQkJIDB4NTAwNTgKICNkZWZpbmUgVENNX1JFR19OX1NNX0NUWF9MRF8zCQkJCQkgMHg1MDA1YwogI2RlZmluZSBUQ01fUkVHX05fU01fQ1RYX0xEXzQJCQkJCSAweDUwMDYwCisjZGVmaW5lIFRDTV9SRUdfTl9TTV9DVFhfTERfNQkJCQkJIDB4NTAwNjQKIC8qIFtSVyAxXSBJbnB1dCBwYmYgSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcyBkaXNyZWdhcmRlZDsKICAgIGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUgdHJlYXRlZCBhcyB1c3VhbDsKICAgIGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC0zNTYzLDYgKzM2NzgsMTAgQEAKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwogI2RlZmluZSBUQ01fUkVHX1NUT1JNX1RDTV9JRkVOCQkJCQkgMHg1MDAxMAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFNUT1JNIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBUQ01fUkVHX1NUT1JNX1dFSUdIVAkJCQkJIDB4NTAwYWMKIC8qIFtSVyAxXSBDTSAtIENGQyBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzIGRpc3JlZ2FyZGVkOwogICAgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZSB0cmVhdGVkIGFzIHVzdWFsOwogICAgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTM1OTgsMTAgKzM3MTcsMjIgQEAKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwogI2RlZmluZSBUQ01fUkVHX1RNX1RDTV9JRkVOCQkJCQkgMHg1MDAxYworLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFRpbWVycyBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVENNX1JFR19UTV9XRUlHSFQJCQkJCSAweDUwMGQwCiAvKiBbUlcgNl0gUU0gb3V0cHV0IGluaXRpYWwgY3JlZGl0LiBNYXggY3JlZGl0IGF2YWlsYWJsZSAtIDMyLldyaXRlIHdyaXRlcwogICAgdGhlIGluaXRpYWwgY3JlZGl0IHZhbHVlOyByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGNyZWRpdAogICAgY291bnRlci4gTXVzdCBiZSBpbml0aWFsaXplZCB0byAzMiBhdCBzdGFydC11cC4gKi8KICNkZWZpbmUgVENNX1JFR19UUU1fSU5JVF9DUkQJCQkJCSAweDUwMjFjCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgUU0gKHByaW1hcnkpIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwCisgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBUQ01fUkVHX1RRTV9QX1dFSUdIVAkJCQkJIDB4NTAwYzgKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBRTSAoc2Vjb25kYXJ5KSBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMAorICAgc3RhbmRzIGZvciB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVENNX1JFR19UUU1fU19XRUlHSFQJCQkJCSAweDUwMGNjCiAvKiBbUlcgMjhdIFRoZSBDTSBoZWFkZXIgdmFsdWUgZm9yIFFNIHJlcXVlc3QgKHByaW1hcnkpLiAqLwogI2RlZmluZSBUQ01fUkVHX1RRTV9UQ01fSERSX1AJCQkJCSAweDUwMDkwCiAvKiBbUlcgMjhdIFRoZSBDTSBoZWFkZXIgdmFsdWUgZm9yIFFNIHJlcXVlc3QgKHNlY29uZGFyeSkuICovCkBAIC0zNjI4LDYgKzM3NTksMTAgQEAKIC8qIFtSQyAxXSBNZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKSBhdCB0aGUgSW4jOAogICAgaW50ZXJmYWNlLiAqLwogI2RlZmluZSBUQ01fUkVHX1VTRU1fTEVOR1RIX01JUyAJCQkJIDB4NTAxNzAKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBpbnB1dCB1c2VtIGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBUQ01fUkVHX1VTRU1fV0VJR0hUCQkJCQkgMHg1MDBiOAogLyogW1JXIDIxXSBJbmRpcmVjdCBhY2Nlc3MgdG8gdGhlIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIFhYIHByb3RlY3Rpb24KICAgIG1lY2hhbmlzbS4gVGhlIGZpZWxkcyBhcmU6IFs1OjBdIC0gbGVuZ3RoIG9mIHRoZSBtZXNzYWdlOyAxNTo2XSAtIG1lc3NhZ2UKICAgIHBvaW50ZXI7IDIwOjE2XSAtIG5leHQgcG9pbnRlci4gKi8KQEAgLTM2NzcsNiArMzgxMiw3IEBACiAjZGVmaW5lIFRNX1JFR19FTl9DTDFfSU5QVVQJCQkJCSAweDE2NDAwYwogLyogW1JXIDFdIEVuYWJsZSBjbGllbnQyIGlucHV0LiAqLwogI2RlZmluZSBUTV9SRUdfRU5fQ0wyX0lOUFVUCQkJCQkgMHgxNjQwMTAKKyNkZWZpbmUgVE1fUkVHX0VOX0xJTkVBUjBfVElNRVIgCQkJCSAweDE2NDAxNAogLyogW1JXIDFdIEVuYWJsZSByZWFsIHRpbWUgY291bnRlci4gKi8KICNkZWZpbmUgVE1fUkVHX0VOX1JFQUxfVElNRV9DTlQgCQkJCSAweDE2NDBkOAogLyogW1JXIDFdIEVuYWJsZSBmb3IgVGltZXJzIHN0YXRlIG1hY2hpbmVzLiAqLwpAQCAtMzY4NCwxNCArMzgyMCwyMiBAQAogLyogW1JXIDRdIExvYWQgdmFsdWUgZm9yIGV4cGlyYXRpb24gY3JlZGl0IGNudC4gQ0ZDIG1heCBudW1iZXIgb2YKICAgIG91dHN0YW5kaW5nIGxvYWQgcmVxdWVzdHMgZm9yIHRpbWVycyAoZXhwaXJhdGlvbikgY29udGV4dCBsb2FkaW5nLiAqLwogI2RlZmluZSBUTV9SRUdfRVhQX0NSRENOVF9WQUwJCQkJCSAweDE2NDIzOAorLyogW1JXIDMyXSBMaW5lYXIwIGxvZ2ljIGFkZHJlc3MuICovCisjZGVmaW5lIFRNX1JFR19MSU4wX0xPR0lDX0FERFIJCQkJCSAweDE2NDI0MAogLyogW1JXIDE4XSBMaW5lYXIwIE1heCBhY3RpdmUgY2lkIChpbiBiYW5rcyBvZiAzMiBlbnRyaWVzKS4gKi8KICNkZWZpbmUgVE1fUkVHX0xJTjBfTUFYX0FDVElWRV9DSUQJCQkJIDB4MTY0MDQ4CiAvKiBbV0IgNjRdIExpbmVhcjAgcGh5IGFkZHJlc3MuICovCiAjZGVmaW5lIFRNX1JFR19MSU4wX1BIWV9BRERSCQkJCQkgMHgxNjQyNzAKKy8qIFtSVyAxXSBMaW5lYXIwIHBoeXNpY2FsIGFkZHJlc3MgdmFsaWQuICovCisjZGVmaW5lIFRNX1JFR19MSU4wX1BIWV9BRERSX1ZBTElECQkJCSAweDE2NDI0OAogLyogW1JXIDI0XSBMaW5lYXIwIGFycmF5IHNjYW4gdGltZW91dC4gKi8KICNkZWZpbmUgVE1fUkVHX0xJTjBfU0NBTl9USU1FCQkJCQkgMHgxNjQwM2MKKy8qIFtSVyAzMl0gTGluZWFyMSBsb2dpYyBhZGRyZXNzLiAqLworI2RlZmluZSBUTV9SRUdfTElOMV9MT0dJQ19BRERSCQkJCQkgMHgxNjQyNTAKIC8qIFtXQiA2NF0gTGluZWFyMSBwaHkgYWRkcmVzcy4gKi8KICNkZWZpbmUgVE1fUkVHX0xJTjFfUEhZX0FERFIJCQkJCSAweDE2NDI4MAorLyogW1JXIDFdIExpbmVhcjEgcGh5c2ljYWwgYWRkcmVzcyB2YWxpZC4gKi8KKyNkZWZpbmUgVE1fUkVHX0xJTjFfUEhZX0FERFJfVkFMSUQJCQkJIDB4MTY0MjU4CiAvKiBbUlcgNl0gTGluZWFyIHRpbWVyIHNldF9jbGVhciBmaWZvIHRocmVzaG9sZC4gKi8KICNkZWZpbmUgVE1fUkVHX0xJTl9TRVRDTFJfRklGT19BTEZVTExfVEhSCQkJIDB4MTY0MDcwCiAvKiBbUlcgMl0gTG9hZCB2YWx1ZSBmb3IgcGNpIGFyYml0ZXIgY3JlZGl0IGNudC4gKi8KQEAgLTM3MDgsNiArMzg1MiwxNyBAQAogI2RlZmluZSBUTV9SRUdfVE1fSU5UX1NUUwkJCQkJIDB4MTY0MGYwCiAvKiBbUlcgOF0gVGhlIGV2ZW50IGlkIGZvciBhZ2dyZWdhdGVkIGludGVycnVwdCAwICovCiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMAkJCQkgMHg0MjAzOAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEJCQkJIDB4NDIwM2MKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMAkJCQkgMHg0MjA2MAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzExCQkJCSAweDQyMDY0CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTIJCQkJIDB4NDIwNjgKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xMwkJCQkgMHg0MjA2YworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE0CQkJCSAweDQyMDcwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTUJCQkJIDB4NDIwNzQKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xNgkJCQkgMHg0MjA3OAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE3CQkJCSAweDQyMDdjCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfMTgJCQkJIDB4NDIwODAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8xOQkJCQkgMHg0MjA4NAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIJCQkJIDB4NDIwNDAKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8yMAkJCQkgMHg0MjA4OAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIxCQkJCSAweDQyMDhjCkBAIC0zNzIzLDYgKzM4NzgsMTkgQEAKICNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMAkJCQkgMHg0MjBiMAogI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMxCQkJCSAweDQyMGI0CiAjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfRVZFTlRfNAkJCQkgMHg0MjA0OAorLyogW1JXIDFdIFRoZSBUIGJpdCBmb3IgYWdncmVnYXRlZCBpbnRlcnJ1cHQgMCAqLworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMAkJCQkJIDB4NDIwYjgKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzEJCQkJCSAweDQyMGJjCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xMAkJCQkJIDB4NDIwZTAKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzExCQkJCQkgMHg0MjBlNAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTIJCQkJCSAweDQyMGU4CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xMwkJCQkJIDB4NDIwZWMKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE0CQkJCQkgMHg0MjBmMAorI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTUJCQkJCSAweDQyMGY0CisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xNgkJCQkJIDB4NDIwZjgKKyNkZWZpbmUgVFNETV9SRUdfQUdHX0lOVF9UXzE3CQkJCQkgMHg0MjBmYworI2RlZmluZSBUU0RNX1JFR19BR0dfSU5UX1RfMTgJCQkJCSAweDQyMTAwCisjZGVmaW5lIFRTRE1fUkVHX0FHR19JTlRfVF8xOQkJCQkJIDB4NDIxMDQKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNmY19yc3AgbGNpZCAqLwogI2RlZmluZSBUU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIJCQkJIDB4NDIwMDgKIC8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMwICovCkBAIC0zOTY3LDYgKzQxMzUsMTAgQEAKIC8qIFtSQyAxXSBTZXQgd2hlbiB0aGUgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikKICAgIGF0IHRoZSBkb3JxIGludGVyZmFjZSBpcyBkZXRlY3RlZC4gKi8KICNkZWZpbmUgVUNNX1JFR19ET1JRX0xFTkdUSF9NSVMgCQkJCSAweGUwMTY4CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgaW5wdXQgZG9ycSBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVUNNX1JFR19ET1JRX1dFSUdIVAkJCQkJIDB4ZTAwYzAKIC8qIFtSVyA4XSBUaGUgRXZlbnQgSUQgaW4gY2FzZSBFcnJvckZsZyBpbnB1dCBtZXNzYWdlIGJpdCBpcyBzZXQuICovCiAjZGVmaW5lIFVDTV9SRUdfRVJSX0VWTlRfSUQJCQkJCSAweGUwMGE0CiAvKiBbUlcgMjhdIFRoZSBDTSBlcnJvbmVvdXMgaGVhZGVyIGZvciBRTSBhbmQgVGltZXJzIGZvcm1hdHRpbmcuICovCkBAIC00MDMwLDYgKzQyMDIsMTAgQEAKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwogI2RlZmluZSBVQ01fUkVHX1NUT1JNX1VDTV9JRkVOCQkJCQkgMHhlMDAxMAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFNUT1JNIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwIHN0YW5kcyBmb3IKKyAgIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX1NUT1JNX1dFSUdIVAkJCQkJIDB4ZTAwYjAKIC8qIFtSVyA0XSBUaW1lcnMgb3V0cHV0IGluaXRpYWwgY3JlZGl0LiBNYXggY3JlZGl0IGF2YWlsYWJsZSAtIDE1LldyaXRlCiAgICB3cml0ZXMgdGhlIGluaXRpYWwgY3JlZGl0IHZhbHVlOyByZWFkIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlCiAgICBjcmVkaXQgY291bnRlci4gTXVzdCBiZSBpbml0aWFsaXplZCB0byA0IGF0IHN0YXJ0LXVwLiAqLwpAQCAtNDA0MCw2ICs0MjE2LDEwIEBACiAgICBkaXNyZWdhcmRlZDsgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZQogICAgdHJlYXRlZCBhcyB1c3VhbDsgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KICNkZWZpbmUgVUNNX1JFR19UTV9VQ01fSUZFTgkJCQkJIDB4ZTAwMWMKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBUaW1lcnMgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFVDTV9SRUdfVE1fV0VJR0hUCQkJCQkgMHhlMDBkNAogLyogW1JXIDFdIElucHV0IHRzZW0gSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcwogICAgZGlzcmVnYXJkZWQ7IGFja25vd2xlZGdlIG91dHB1dCBpcyBkZWFzc2VydGVkOyBhbGwgb3RoZXIgc2lnbmFscyBhcmUKICAgIHRyZWF0ZWQgYXMgdXN1YWw7IGlmIDEgLSBub3JtYWwgYWN0aXZpdHkuICovCkBAIC00MDkyLDYgKzQyNzIsMTAgQEAKICAgIHN0YW5kcyBmb3Igd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CiAgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCiAjZGVmaW5lIFVDTV9SRUdfVVFNX1BfV0VJR0hUCQkJCQkgMHhlMDBjYworLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFFNIChzZWNvbmRhcnkpIGlucHV0IGluIHRoZSBXUlIgbWVjaGFuaXNtLiAwCisgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAorICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLworI2RlZmluZSBVQ01fUkVHX1VRTV9TX1dFSUdIVAkJCQkJIDB4ZTAwZDAKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAocHJpbWFyeSkuICovCiAjZGVmaW5lIFVDTV9SRUdfVVFNX1VDTV9IRFJfUAkJCQkJIDB4ZTAwOTQKIC8qIFtSVyAyOF0gVGhlIENNIGhlYWRlciB2YWx1ZSBmb3IgUU0gcmVxdWVzdCAoc2Vjb25kYXJ5KS4gKi8KQEAgLTQxMDcsNiArNDI5MSwxMCBAQAogLyogW1JDIDFdIFNldCB3aGVuIHRoZSBtZXNzYWdlIGxlbmd0aCBtaXNtYXRjaCAocmVsYXRpdmUgdG8gbGFzdCBpbmRpY2F0aW9uKQogICAgYXQgdGhlIFNETSBpbnRlcmZhY2UgaXMgZGV0ZWN0ZWQuICovCiAjZGVmaW5lIFVDTV9SRUdfVVNETV9MRU5HVEhfTUlTIAkJCQkgMHhlMDE1OAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIFNETSBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVUNNX1JFR19VU0RNX1dFSUdIVAkJCQkJIDB4ZTAwYzgKIC8qIFtSVyAxXSBJbnB1dCB4c2VtIEludGVyZmFjZSBlbmFibGUuIElmIDAgLSB0aGUgdmFsaWQgaW5wdXQgaXMKICAgIGRpc3JlZ2FyZGVkOyBhY2tub3dsZWRnZSBvdXRwdXQgaXMgZGVhc3NlcnRlZDsgYWxsIG90aGVyIHNpZ25hbHMgYXJlCiAgICB0cmVhdGVkIGFzIHVzdWFsOyBpZiAxIC0gbm9ybWFsIGFjdGl2aXR5LiAqLwpAQCAtNDExNCw2ICs0MzAyLDEwIEBACiAvKiBbUkMgMV0gU2V0IHdoZW4gdGhlIG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pCiAgICBhdCB0aGUgeHNlbSBpbnRlcmZhY2UgaXNkZXRlY3RlZC4gKi8KICNkZWZpbmUgVUNNX1JFR19YU0VNX0xFTkdUSF9NSVMgCQkJCSAweGUwMTY0CisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgaW5wdXQgeHNlbSBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgVUNNX1JFR19YU0VNX1dFSUdIVAkJCQkJIDB4ZTAwYmMKIC8qIFtSVyAyMF0gSW5kaXJlY3QgYWNjZXNzIHRvIHRoZSBkZXNjcmlwdG9yIHRhYmxlIG9mIHRoZSBYWCBwcm90ZWN0aW9uCiAgICBtZWNoYW5pc20uIFRoZSBmaWVsZHMgYXJlOls1OjBdIC0gbWVzc2FnZSBsZW5ndGg7IDE0OjZdIC0gbWVzc2FnZQogICAgcG9pbnRlcjsgMTk6MTVdIC0gbmV4dCBwb2ludGVyLiAqLwpAQCAtNDE2Myw2ICs0MzU1LDcgQEAKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9FVkVOVF8zMAkJCQkgMHhjNDBiMAogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzMxCQkJCSAweGM0MGI0CiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfRVZFTlRfNAkJCQkgMHhjNDA0OAorI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX0VWRU5UXzUJCQkJIDB4YzQwNGMKIC8qIFtSVyAxXSBGb3IgZWFjaCBhZ2dyZWdhdGVkIGludGVycnVwdCBpbmRleCB3aGV0aGVyIHRoZSBtb2RlIGlzIG5vcm1hbCAoMCkKICAgIG9yIGF1dG8tbWFzay1tb2RlICgxKSAqLwogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMCAJCQkJIDB4YzQxYjgKQEAgLTQxNzcsNiArNDM3MCw4IEBACiAjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV8xNwkJCQkgMHhjNDFmYwogI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfMTgJCQkJIDB4YzQyMDAKICNkZWZpbmUgVVNETV9SRUdfQUdHX0lOVF9NT0RFXzE5CQkJCSAweGM0MjA0CisjZGVmaW5lIFVTRE1fUkVHX0FHR19JTlRfTU9ERV80IAkJCQkgMHhjNDFjOAorI2RlZmluZSBVU0RNX1JFR19BR0dfSU5UX01PREVfNSAJCQkJIDB4YzQxY2MKIC8qIFtSVyAxM10gVGhlIHN0YXJ0IGFkZHJlc3MgaW4gdGhlIGludGVybmFsIFJBTSBmb3IgdGhlIGNmY19yc3AgbGNpZCAqLwogI2RlZmluZSBVU0RNX1JFR19DRkNfUlNQX1NUQVJUX0FERFIJCQkJIDB4YzQwMDgKIC8qIFtSVyAxNl0gVGhlIG1heGltdW0gdmFsdWUgb2YgdGhlIGNvbXBldGlvbiBjb3VudGVyICMwICovCkBAIC00NDI3LDYgKzQ2MjIsMTAgQEAKIC8qIFtSQyAxXSBTZXQgYXQgbWVzc2FnZSBsZW5ndGggbWlzbWF0Y2ggKHJlbGF0aXZlIHRvIGxhc3QgaW5kaWNhdGlvbikgYXQKICAgIHRoZSBkb3JxIGludGVyZmFjZS4gKi8KICNkZWZpbmUgWENNX1JFR19ET1JRX0xFTkdUSF9NSVMgCQkJCSAweDIwMjMwCisvKiBbUlcgM10gVGhlIHdlaWdodCBvZiB0aGUgaW5wdXQgZG9ycSBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMCBzdGFuZHMgZm9yCisgICB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgWENNX1JFR19ET1JRX1dFSUdIVAkJCQkJIDB4MjAwY2MKIC8qIFtSVyA4XSBUaGUgRXZlbnQgSUQgaW4gY2FzZSB0aGUgRXJyb3JGbGcgaW5wdXQgbWVzc2FnZSBiaXQgaXMgc2V0LiAqLwogI2RlZmluZSBYQ01fUkVHX0VSUl9FVk5UX0lECQkJCQkgMHgyMDBiMAogLyogW1JXIDI4XSBUaGUgQ00gZXJyb25lb3VzIGhlYWRlciBmb3IgUU0gYW5kIFRpbWVycyBmb3JtYXR0aW5nLiAqLwpAQCAtNDQ2NSw2ICs0NjY0LDEwIEBACiAvKiBbUkMgMV0gU2V0IGF0IG1lc3NhZ2UgbGVuZ3RoIG1pc21hdGNoIChyZWxhdGl2ZSB0byBsYXN0IGluZGljYXRpb24pIGF0CiAgICB0aGUgbmlnMCBpbnRlcmZhY2UuICovCiAjZGVmaW5lIFhDTV9SRUdfTklHMF9MRU5HVEhfTUlTIAkJCQkgMHgyMDIzOAorLyogW1JXIDNdIFRoZSB3ZWlnaHQgb2YgdGhlIGlucHV0IG5pZzAgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFhDTV9SRUdfTklHMF9XRUlHSFQJCQkJCSAweDIwMGQ0CiAvKiBbUlcgMV0gSW5wdXQgbmlnMSBJbnRlcmZhY2UgZW5hYmxlLiBJZiAwIC0gdGhlIHZhbGlkIGlucHV0IGlzCiAgICBkaXNyZWdhcmRlZDsgYWNrbm93bGVkZ2Ugb3V0cHV0IGlzIGRlYXNzZXJ0ZWQ7IGFsbCBvdGhlciBzaWduYWxzIGFyZQogICAgdHJlYXRlZCBhcyB1c3VhbDsgaWYgMSAtIG5vcm1hbCBhY3Rpdml0eS4gKi8KQEAgLTQ1MjMsNiArNDcyNiwxMCBAQAogICAgd3JpdGVzIHRoZSBpbml0aWFsIGNyZWRpdCB2YWx1ZTsgcmVhZCByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQogICAgY3JlZGl0IGNvdW50ZXIuIE11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gNCBhdCBzdGFydC11cC4gKi8KICNkZWZpbmUgWENNX1JFR19UTV9JTklUX0NSRAkJCQkJIDB4MjA0MWMKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBUaW1lcnMgaW5wdXQgaW4gdGhlIFdSUiBtZWNoYW5pc20uIDAgc3RhbmRzIGZvcgorICAgd2VpZ2h0IDggKHRoZSBtb3N0IHByaW9yaXRpc2VkKTsgMSBzdGFuZHMgZm9yIHdlaWdodCAxKGxlYXN0CisgICBwcmlvcml0aXNlZCk7IDIgc3RhbmRzIGZvciB3ZWlnaHQgMjsgdGMuICovCisjZGVmaW5lIFhDTV9SRUdfVE1fV0VJR0hUCQkJCQkgMHgyMDBlYwogLyogW1JXIDI4XSBUaGUgQ00gaGVhZGVyIGZvciBUaW1lcnMgZXhwaXJhdGlvbiBjb21tYW5kLiAqLwogI2RlZmluZSBYQ01fUkVHX1RNX1hDTV9IRFIJCQkJCSAweDIwMGE4CiAvKiBbUlcgMV0gVGltZXJzIC0gQ00gSW50ZXJmYWNlIGVuYWJsZS4gSWYgMCAtIHRoZSB2YWxpZCBpbnB1dCBpcwpAQCAtNDYwOCw2ICs0ODE1LDEwIEBACiAgICBzdGFuZHMgZm9yIHdlaWdodCA4ICh0aGUgbW9zdCBwcmlvcml0aXNlZCk7IDEgc3RhbmRzIGZvciB3ZWlnaHQgMShsZWFzdAogICAgcHJpb3JpdGlzZWQpOyAyIHN0YW5kcyBmb3Igd2VpZ2h0IDI7IHRjLiAqLwogI2RlZmluZSBYQ01fUkVHX1hRTV9QX1dFSUdIVAkJCQkJIDB4MjAwZTQKKy8qIFtSVyAzXSBUaGUgd2VpZ2h0IG9mIHRoZSBRTSAoc2Vjb25kYXJ5KSBpbnB1dCBpbiB0aGUgV1JSIG1lY2hhbmlzbS4gMAorICAgc3RhbmRzIGZvciB3ZWlnaHQgOCAodGhlIG1vc3QgcHJpb3JpdGlzZWQpOyAxIHN0YW5kcyBmb3Igd2VpZ2h0IDEobGVhc3QKKyAgIHByaW9yaXRpc2VkKTsgMiBzdGFuZHMgZm9yIHdlaWdodCAyOyB0Yy4gKi8KKyNkZWZpbmUgWENNX1JFR19YUU1fU19XRUlHSFQJCQkJCSAweDIwMGU4CiAvKiBbUlcgMjhdIFRoZSBDTSBoZWFkZXIgdmFsdWUgZm9yIFFNIHJlcXVlc3QgKHByaW1hcnkpLiAqLwogI2RlZmluZSBYQ01fUkVHX1hRTV9YQ01fSERSX1AJCQkJCSAweDIwMGEwCiAvKiBbUlcgMjhdIFRoZSBDTSBoZWFkZXIgdmFsdWUgZm9yIFFNIHJlcXVlc3QgKHNlY29uZGFyeSkuICovCkBAIC00NjY1LDYgKzQ4NzYsOCBAQAogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEwCQkJCSAweDE2NjA2MAogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzExCQkJCSAweDE2NjA2NAogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEyCQkJCSAweDE2NjA2OAorI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzEzCQkJCSAweDE2NjA2YworI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzE0CQkJCSAweDE2NjA3MAogI2RlZmluZSBYU0RNX1JFR19BR0dfSU5UX0VWRU5UXzIJCQkJIDB4MTY2MDQwCiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjAJCQkJIDB4MTY2MDg4CiAjZGVmaW5lIFhTRE1fUkVHX0FHR19JTlRfRVZFTlRfMjEJCQkJIDB4MTY2MDhjCkBAIC00OTY0LDkgKzUxNzcsMTEgQEAKICNkZWZpbmUgRU1BQ19SWF9NT0RFX0ZMT1dfRU4JCQkJCSAoMUw8PDIpCiAjZGVmaW5lIEVNQUNfUlhfTU9ERV9LRUVQX1ZMQU5fVEFHCQkJCSAoMUw8PDEwKQogI2RlZmluZSBFTUFDX1JYX01PREVfUFJPTUlTQ1VPVVMJCQkJICgxTDw8OCkKKyNkZWZpbmUgRU1BQ19SWF9NT0RFX1JFU0VUCQkJCQkgKDFMPDwwKQogI2RlZmluZSBFTUFDX1JYX01UVV9TSVpFX0pVTUJPX0VOQQkJCQkgKDFMPDwzMSkKICNkZWZpbmUgRU1BQ19UWF9NT0RFX0VYVF9QQVVTRV9FTgkJCQkgKDFMPDwzKQogI2RlZmluZSBFTUFDX1RYX01PREVfRkxPV19FTgkJCQkJICgxTDw8NCkKKyNkZWZpbmUgRU1BQ19UWF9NT0RFX1JFU0VUCQkJCQkgKDFMPDwwKQogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPXzAJCQkJCSAwCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fMQkJCQkJIDEKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT18yCQkJCQkgMgpAQCAtNDk3Niw2ICs1MTkxLDEwIEBACiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fRkxPQVRfUE9TCQkJCSAyNAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0hJR0gJCQkJIDEKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlBVVF9ISV9aCQkJCSAyCisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX0NMUl9QT1MgCQkJIDI0CisjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fSU5UX09VVFBVVF9DTFIJCQkgMAorI2RlZmluZSBNSVNDX1JFR0lTVEVSU19HUElPX0lOVF9PVVRQVVRfU0VUCQkJIDEKKyNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19JTlRfU0VUX1BPUyAJCQkgMTYKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19MT1cgCQkJCSAwCiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX0dQSU9fT1VUUFVUX0hJR0ggCQkJIDEKICNkZWZpbmUgTUlTQ19SRUdJU1RFUlNfR1BJT19PVVRQVVRfTE9XCQkJCSAwCkBAIC01MDE1LDExICs1MjM0LDEyIEBACiAjZGVmaW5lIE1JU0NfUkVHSVNURVJTX1NQSU9fT1VUUFVUX0xPVwkJCQkgMAogI2RlZmluZSBNSVNDX1JFR0lTVEVSU19TUElPX1NFVF9QT1MJCQkJIDgKICNkZWZpbmUgSFdfTE9DS19NQVhfUkVTT1VSQ0VfVkFMVUUJCQkJIDMxCi0jZGVmaW5lIEhXX0xPQ0tfUkVTT1VSQ0VfODA3Ml9NRElPCQkJCSAwCiAjZGVmaW5lIEhXX0xPQ0tfUkVTT1VSQ0VfR1BJTwkJCQkJIDEKKyNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV9NRElPCQkJCQkgMAogI2RlZmluZSBIV19MT0NLX1JFU09VUkNFX1BPUlQwX0FUVF9NQVNLIAkJCSAzCiAjZGVmaW5lIEhXX0xPQ0tfUkVTT1VSQ0VfU1BJTwkJCQkJIDIKICNkZWZpbmUgSFdfTE9DS19SRVNPVVJDRV9VTkRJCQkJCQkgNQorI2RlZmluZSBQUlNfRkxBR19PVkVSRVRIX0lQVjQJCQkJCSAxCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0JSQl9QQVJJVFlfRVJST1IJCSAgICAgICgxPDwxOCkKICNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfQ0NNX0hXX0lOVEVSUlVQVAkJICAgICAgKDE8PDMxKQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19DRFVfSFdfSU5URVJSVVBUCQkgICAgICAoMTw8OSkKQEAgLTUwMzQsNiArNTI1NCw4IEBACiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RNQUVfSFdfSU5URVJSVVBUCQkgICAgICAoMTw8MTEpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0RPT1JCRUxMUV9IV19JTlRFUlJVUFQJICAgICAgKDE8PDEzKQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19ET09SQkVMTFFfUEFSSVRZX0VSUk9SCSAgICAgICgxPDwxMikKKyNkZWZpbmUgQUVVX0lOUFVUU19BVFROX0JJVFNfR1BJTzNfRlVOQ1RJT05fMAkJICAgICAgKDE8PDUpCisjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX0dQSU8zX0ZVTkNUSU9OXzEJCSAgICAgICgxPDw5KQogI2RlZmluZSBBRVVfSU5QVVRTX0FUVE5fQklUU19JR1VfUEFSSVRZX0VSUk9SCQkgICAgICAoMTw8MTIpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX01JU0NfSFdfSU5URVJSVVBUCQkgICAgICAoMTw8MTUpCiAjZGVmaW5lIEFFVV9JTlBVVFNfQVRUTl9CSVRTX01JU0NfUEFSSVRZX0VSUk9SCQkgICAgICAoMTw8MTQpCkBAIC01MTg4LDcgKzU0MTAsNyBAQAogI2RlZmluZSBQQ0lDRkdfQ09NTUFORF9JTlRfRElTQUJMRQkJKDE8PDEwKQogI2RlZmluZSBQQ0lDRkdfQ09NTUFORF9SRVNFUlZFRCAJCSgweDFmPDwxMSkKICNkZWZpbmUgUENJQ0ZHX1NUQVRVU19PRkZTRVQJCQkJMHgwNgotI2RlZmluZSBQQ0lDRkdfUkVWRVNJT05fSUQJCQkJMHgwOAorI2RlZmluZSBQQ0lDRkdfUkVWRVNJT05fSURfT0ZGU0VUCQkJMHgwOAogI2RlZmluZSBQQ0lDRkdfQ0FDSEVfTElORV9TSVpFCQkJCTB4MGMKICNkZWZpbmUgUENJQ0ZHX0xBVEVOQ1lfVElNRVIJCQkJMHgwZAogI2RlZmluZSBQQ0lDRkdfQkFSXzFfTE9XCQkJCTB4MTAKQEAgLTUyMTYsOSArNTQzOCwyOCBAQAogI2RlZmluZSBQQ0lDRkdfUE1fQ1NSX1NUQVRFCQkJKDB4Mzw8MCkKICNkZWZpbmUgUENJQ0ZHX1BNX0NTUl9QTUVfRU5BQkxFCQkoMTw8OCkKICNkZWZpbmUgUENJQ0ZHX1BNX0NTUl9QTUVfU1RBVFVTCQkoMTw8MTUpCisjZGVmaW5lIFBDSUNGR19NU0lfQ0FQX0lEX09GRlNFVAkJCTB4NTgKKyNkZWZpbmUgUENJQ0ZHX01TSV9DT05UUk9MX0VOQUJMRQkJKDB4MTw8MTYpCisjZGVmaW5lIFBDSUNGR19NU0lfQ09OVFJPTF9NQ0FQIAkJKDB4Nzw8MTcpCisjZGVmaW5lIFBDSUNGR19NU0lfQ09OVFJPTF9NRU5BIAkJKDB4Nzw8MjApCisjZGVmaW5lIFBDSUNGR19NU0lfQ09OVFJPTF82NF9CSVRfQUREUl9DQVAJKDB4MTw8MjMpCisjZGVmaW5lIFBDSUNGR19NU0lfQ09OVFJPTF9NU0lfUFZNQVNLX0NBUEFCTEUJKDB4MTw8MjQpCiAjZGVmaW5lIFBDSUNGR19HUkNfQUREUkVTUwkJCQkweDc4CiAjZGVmaW5lIFBDSUNGR19HUkNfREFUQSAJCQkJMHg4MAorI2RlZmluZSBQQ0lDRkdfTVNJWF9DQVBfSURfT0ZGU0VUCQkJMHhhMAorI2RlZmluZSBQQ0lDRkdfTVNJWF9DT05UUk9MX1RBQkxFX1NJWkUJCSgweDdmZjw8MTYpCisjZGVmaW5lIFBDSUNGR19NU0lYX0NPTlRST0xfUkVTRVJWRUQJCSgweDc8PDI3KQorI2RlZmluZSBQQ0lDRkdfTVNJWF9DT05UUk9MX0ZVTkNfTUFTSwkJKDB4MTw8MzApCisjZGVmaW5lIFBDSUNGR19NU0lYX0NPTlRST0xfTVNJWF9FTkFCTEUgCSgweDE8PDMxKQorCiAjZGVmaW5lIFBDSUNGR19ERVZJQ0VfQ09OVFJPTAkJCQkweGI0CisjZGVmaW5lIFBDSUNGR19ERVZJQ0VfU1RBVFVTCQkJCTB4YjYKKyNkZWZpbmUgUENJQ0ZHX0RFVklDRV9TVEFUVVNfQ09SUl9FUlJfREVUCSgxPDwwKQorI2RlZmluZSBQQ0lDRkdfREVWSUNFX1NUQVRVU19OT05fRkFUQUxfRVJSX0RFVAkoMTw8MSkKKyNkZWZpbmUgUENJQ0ZHX0RFVklDRV9TVEFUVVNfRkFUQUxfRVJSX0RFVAkoMTw8MikKKyNkZWZpbmUgUENJQ0ZHX0RFVklDRV9TVEFUVVNfVU5TVVBfUkVRX0RFVAkoMTw8MykKKyNkZWZpbmUgUENJQ0ZHX0RFVklDRV9TVEFUVVNfQVVYX1BXUl9ERVQJKDE8PDQpCisjZGVmaW5lIFBDSUNGR19ERVZJQ0VfU1RBVFVTX05PX1BFTkQJCSgxPDw1KQogI2RlZmluZSBQQ0lDRkdfTElOS19DT05UUk9MCQkJCTB4YmMKIAogCkBAIC01MzYzLDYgKzU2MDQsNDIgQEAKICNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lGVUxMU1BEX1NISUZUCQkxCiAjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JQ0JVRjFUCQkJMQogCisjZGVmaW5lIE1ESU9fUkVHX0JBTktfVFgxCQkJCTB4ODA3MAorI2RlZmluZSBNRElPX1RYMV9UWF9EUklWRVIJCQkJMHgxNworI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfTUFTSwkJMHhmMDAwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19TSElGVAkJMTIKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lEUklWRVJfTUFTSyAJCTB4MGYwMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSURSSVZFUl9TSElGVAkJOAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSVBSRURSSVZFUl9NQVNLCQkweDAwZjAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lQUkVEUklWRVJfU0hJRlQJCTQKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lGVUxMU1BEX01BU0sJCTB4MDAwZQorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfU0hJRlQJCTEKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lDQlVGMVQJCQkxCisKKyNkZWZpbmUgTURJT19SRUdfQkFOS19UWDIJCQkJMHg4MDgwCisjZGVmaW5lIE1ESU9fVFgyX1RYX0RSSVZFUgkJCQkweDE3CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9QUkVFTVBIQVNJU19NQVNLCQkweGYwMDAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX1NISUZUCQkxMgorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSURSSVZFUl9NQVNLIAkJMHgwZjAwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRFJJVkVSX1NISUZUCQk4CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JUFJFRFJJVkVSX01BU0sJCTB4MDBmMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSVBSRURSSVZFUl9TSElGVAkJNAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUZVTExTUERfTUFTSwkJMHgwMDBlCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRlVMTFNQRF9TSElGVAkJMQorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfSUNCVUYxVAkJCTEKKworI2RlZmluZSBNRElPX1JFR19CQU5LX1RYMwkJCQkweDgwOTAKKyNkZWZpbmUgTURJT19UWDNfVFhfRFJJVkVSCQkJCTB4MTcKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX1BSRUVNUEhBU0lTX01BU0sJCTB4ZjAwMAorI2RlZmluZSBNRElPX1RYMF9UWF9EUklWRVJfUFJFRU1QSEFTSVNfU0hJRlQJCTEyCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRFJJVkVSX01BU0sgCQkweDBmMDAKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lEUklWRVJfU0hJRlQJCTgKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lQUkVEUklWRVJfTUFTSwkJMHgwMGYwCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JUFJFRFJJVkVSX1NISUZUCQk0CisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JRlVMTFNQRF9NQVNLCQkweDAwMGUKKyNkZWZpbmUgTURJT19UWDBfVFhfRFJJVkVSX0lGVUxMU1BEX1NISUZUCQkxCisjZGVmaW5lIE1ESU9fVFgwX1RYX0RSSVZFUl9JQ0JVRjFUCQkJMQorCiAjZGVmaW5lIE1ESU9fUkVHX0JBTktfWEdYU19CTE9DSzAJCQkweDgwMDAKICNkZWZpbmUgTURJT19CTE9DSzBfWEdYU19DT05UUk9MCQkJMHgxMAogCkBAIC01NTY2LDkgKzU4NDMsMzAgQEAKICNkZWZpbmUgTURJT19QTUFfUkVHX1JPTV9WRVIyCQkweGNhMWEKICNkZWZpbmUgTURJT19QTUFfUkVHX0VEQ19GRkVfTUFJTgkweGNhMWIKICNkZWZpbmUgTURJT19QTUFfUkVHX1BMTF9CQU5EV0lEVEgJMHhjYTFkCisjZGVmaW5lIE1ESU9fUE1BX1JFR19HRU5fQ1RSTDIJCTB4Y2ExZQorI2RlZmluZSBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMCAJMHhjYTIzCisjZGVmaW5lIE1ESU9fUE1BX1JFR19MUk1fTU9ERQkJMHhjYTNmCiAjZGVmaW5lIE1ESU9fUE1BX1JFR19DRFJfQkFORFdJRFRICTB4Y2E0NgogI2RlZmluZSBNRElPX1BNQV9SRUdfTUlTQ19DVFJMMSAJMHhjYTg1CiAKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfQ1RSTCAJMHg4MDAwCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0NUUkxfU1RBVFVTX01BU0sJMHgwMDBjCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX1NUQVRVU19JRExFCQkweDAwMDAKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfU1RBVFVTX0NPTVBMRVRFCTB4MDAwNAorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9TVEFUVVNfSU5fUFJPR1JFU1MJMHgwMDA4CisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX1NUQVRVU19GQUlMRUQJMHgwMDBjCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0JZVEVfQ05UCTB4ODAwMgorI2RlZmluZSBNRElPX1BNQV9SRUdfODcyNl9UV09fV0lSRV9NRU1fQUREUgkweDgwMDMKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFdPX1dJUkVfREFUQV9CVUYJMHhjODIwCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RXT19XSVJFX0RBVEFfTUFTSyAweGZmCisjZGVmaW5lIE1ESU9fUE1BX1JFR184NzI2X1RYX0NUUkwxCQkweGNhMDEKKyNkZWZpbmUgTURJT19QTUFfUkVHXzg3MjZfVFhfQ1RSTDIJCTB4Y2EwNQorCisKKyNkZWZpbmUgTURJT19QTUFfUkVHXzgwNzNfQ0hJUF9SRVYJCQkweGM4MDEKKyNkZWZpbmUgTURJT19QTUFfUkVHXzgwNzNfU1BFRURfTElOS19TVEFUVVMJCTB4YzgyMAorI2RlZmluZSBNRElPX1BNQV9SRUdfODA3M19YQVVJX1dBCQkJMHhjODQxCisKICNkZWZpbmUgTURJT19QTUFfUkVHXzcxMDFfUkVTRVQgCTB4YzAwMAogI2RlZmluZSBNRElPX1BNQV9SRUdfNzEwN19MRURfQ05UTAkweGMwMDcKICNkZWZpbmUgTURJT19QTUFfUkVHXzcxMDFfVkVSMQkJMHhjMDI2CkBAIC01NTk4LDYgKzU4OTYsMTIgQEAKICNkZWZpbmUgTURJT19YU19QTExfU0VRVUVOQ0VSCQkweDgwMDAKICNkZWZpbmUgTURJT19YU19TRlg3MTAxX1hHWFNfVEVTVDEJMHhjMDBhCiAKKyNkZWZpbmUgTURJT19YU184NzA2X1JFR19CQU5LX1JYMAkweDgwYmMKKyNkZWZpbmUgTURJT19YU184NzA2X1JFR19CQU5LX1JYMQkweDgwY2MKKyNkZWZpbmUgTURJT19YU184NzA2X1JFR19CQU5LX1JYMgkweDgwZGMKKyNkZWZpbmUgTURJT19YU184NzA2X1JFR19CQU5LX1JYMwkweDgwZWMKKyNkZWZpbmUgTURJT19YU184NzA2X1JFR19CQU5LX1JYQQkweDgwZmMKKwogI2RlZmluZSBNRElPX0FOX0RFVkFECQkJMHg3CiAvKmllZWUqLwogI2RlZmluZSBNRElPX0FOX1JFR19DVFJMCQkweDAwMDAKQEAgLTU2MTksNiArNTkyMyw4IEBACiAjZGVmaW5lIE1ESU9fQU5fUkVHX0NMMzdfRkNfTEQJCTB4ZmZlNAogI2RlZmluZSBNRElPX0FOX1JFR19DTDM3X0ZDX0xQCQkweGZmZTUKIAorI2RlZmluZSBNRElPX0FOX1JFR184MDczXzJfNUcJCTB4ODMyOQorCiAKICNkZWZpbmUgSUdVX0ZVTkNfQkFTRQkJCTB4MDQwMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKaW5kZXggOGE4M2ViMi4uYTMwNjIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaApAQCAtMjksNyArMjksNyBAQAogCiAvLyBHZW5lcmFsIGRlZmluaXRpb25zCiAjZGVmaW5lIEJPTkRfRVRIX1BfTEFDUERVICAgICAgIDB4ODgwOQotI2RlZmluZSBQS1RfVFlQRV9MQUNQRFUgICAgICAgICBfX2NvbnN0YW50X2h0b25zKEJPTkRfRVRIX1BfTEFDUERVKQorI2RlZmluZSBQS1RfVFlQRV9MQUNQRFUgICAgICAgICBjcHVfdG9fYmUxNihCT05EX0VUSF9QX0xBQ1BEVSkKICNkZWZpbmUgQURfVElNRVJfSU5URVJWQUwgICAgICAgMTAwIC8qbXNlYyovCiAKICNkZWZpbmUgTVVMVElDQVNUX0xBQ1BEVV9BRERSICAgIHsweDAxLCAweDgwLCAweEMyLCAweDAwLCAweDAwLCAweDAyfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCmluZGV4IDI3ZmI3ZjUuLjhkYzZmYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKQEAgLTgyMiw3ICs4MjIsNyBAQAogCV91bmxvY2tfcnhfaGFzaHRibChib25kKTsKIAogCS8qaW5pdGlhbGl6ZSBwYWNrZXQgdHlwZSovCi0JcGtfdHlwZS0+dHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJQKTsKKwlwa190eXBlLT50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfQVJQKTsKIAlwa190eXBlLT5kZXYgPSBOVUxMOwogCXBrX3R5cGUtPmZ1bmMgPSBybGJfYXJwX3JlY3Y7CiAKQEAgLTg5Miw3ICs4OTIsNyBAQAogCW1lbXNldCgmcGt0LCAwLCBzaXplKTsKIAltZW1jcHkocGt0Lm1hY19kc3QsIG1hY19hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KHBrdC5tYWNfc3JjLCBtYWNfYWRkciwgRVRIX0FMRU4pOwotCXBrdC50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9MT09QKTsKKwlwa3QudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0xPT1ApOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9MUF9CVVJTVDsgaSsrKSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xNjI4LDYgKzE2MjgsMTAgQEAKICAqIG5vIG90aGVyIGxvY2tzIG1heSBiZSBoZWxkLgogICovCiB2b2lkIGJvbmRfYWxiX2hhbmRsZV9hY3RpdmVfY2hhbmdlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKm5ld19zbGF2ZSkKKwlfX3JlbGVhc2VzKCZib25kLT5jdXJyX3NsYXZlX2xvY2spCisJX19yZWxlYXNlcygmYm9uZC0+bG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5sb2NrKQorCV9fYWNxdWlyZXMoJmJvbmQtPmN1cnJfc2xhdmVfbG9jaykKIHsKIAlzdHJ1Y3Qgc2xhdmUgKnN3YXBfc2xhdmU7CiAJaW50IGk7CkBAIC0xNzA0LDYgKzE3MDgsMTAgQEAKICAqIENhbGxlZCB3aXRoIFJUTkwKICAqLwogaW50IGJvbmRfYWxiX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHZvaWQgKmFkZHIpCisJX19yZWxlYXNlcygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKQorCV9fcmVsZWFzZXMoJmJvbmQtPmxvY2spCisJX19hY3F1aXJlcygmYm9uZC0+bG9jaykKKwlfX2FjcXVpcmVzKCZib25kLT5jdXJyX3NsYXZlX2xvY2spCiB7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7CiAJc3RydWN0IHNvY2thZGRyICpzYSA9IGFkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCBlMDU3OGZlLi45YzMyNmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTEwMDIsNiArMTAwMiwxMCBAQAogc3RhdGljIHZvaWQgYm9uZF9kb19mYWlsX292ZXJfbWFjKHN0cnVjdCBib25kaW5nICpib25kLAogCQkJCSAgc3RydWN0IHNsYXZlICpuZXdfYWN0aXZlLAogCQkJCSAgc3RydWN0IHNsYXZlICpvbGRfYWN0aXZlKQorCV9fcmVsZWFzZXMoJmJvbmQtPmN1cnJfc2xhdmVfbG9jaykKKwlfX3JlbGVhc2VzKCZib25kLT5sb2NrKQorCV9fYWNxdWlyZXMoJmJvbmQtPmxvY2spCisJX19hY3F1aXJlcygmYm9uZC0+Y3Vycl9zbGF2ZV9sb2NrKQogewogCXU4IHRtcF9tYWNbRVRIX0FMRU5dOwogCXN0cnVjdCBzb2NrYWRkciBzYWRkcjsKQEAgLTE3MTAsNiArMTcxNCw3IEBACiAJY2FzZSBCT05EX01PREVfQUxCOgogCQluZXdfc2xhdmUtPnN0YXRlID0gQk9ORF9TVEFURV9BQ1RJVkU7CiAJCWJvbmRfc2V0X3NsYXZlX2luYWN0aXZlX2ZsYWdzKG5ld19zbGF2ZSk7CisJCWJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZShib25kKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZGVidWcoIlRoaXMgc2xhdmUgaXMgYWx3YXlzIGFjdGl2ZSBpbiB0cnVuayBtb2RlXG4iKTsKQEAgLTMxOTMsNiArMzE5OCw4IEBACiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAogc3RhdGljIHZvaWQgKmJvbmRfaW5mb19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoJmRldl9iYXNlX2xvY2spCisJX19hY3F1aXJlcygmYm9uZC0+bG9jaykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHNlcS0+cHJpdmF0ZTsKIAlsb2ZmX3Qgb2ZmID0gMDsKQEAgLTMyMzIsNiArMzIzOSw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIGJvbmRfaW5mb19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKCZib25kLT5sb2NrKQorCV9fcmVsZWFzZXMoJmRldl9iYXNlX2xvY2spCiB7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBzZXEtPnByaXZhdGU7CiAKQEAgLTMzNjksNyArMzM3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYm9uZF9pbmZvX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGJvbmRfaW5mb19zZXFfb3BzID0gewogCS5zdGFydCA9IGJvbmRfaW5mb19zZXFfc3RhcnQsCiAJLm5leHQgID0gYm9uZF9pbmZvX3NlcV9uZXh0LAogCS5zdG9wICA9IGJvbmRfaW5mb19zZXFfc3RvcCwKQEAgLTM1MzcsMTEgKzM1NDYsMjYgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIE5FVERFVl9DSEFOR0U6Ci0JCS8qCi0JCSAqIFRPRE86IGlzIHRoaXMgd2hhdCB3ZSBnZXQgaWYgc29tZWJvZHkKLQkJICogc2V0cyB1cCBhIGhpZXJhcmNoaWNhbCBib25kLCB0aGVuIHJtbW9kJ3MKLQkJICogb25lIG9mIHRoZSBzbGF2ZSBib25kaW5nIGRldmljZXM/Ci0JCSAqLworCQlpZiAoYm9uZC0+cGFyYW1zLm1vZGUgPT0gQk9ORF9NT0RFXzgwMjNBRCB8fCBib25kX2lzX2xiKGJvbmQpKSB7CisJCQlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOworCisJCQlzbGF2ZSA9IGJvbmRfZ2V0X3NsYXZlX2J5X2Rldihib25kLCBzbGF2ZV9kZXYpOworCQkJaWYgKHNsYXZlKSB7CisJCQkJdTE2IG9sZF9zcGVlZCA9IHNsYXZlLT5zcGVlZDsKKwkJCQl1MTYgb2xkX2R1cGxleCA9IHNsYXZlLT5kdXBsZXg7CisKKwkJCQlib25kX3VwZGF0ZV9zcGVlZF9kdXBsZXgoc2xhdmUpOworCisJCQkJaWYgKGJvbmRfaXNfbGIoYm9uZCkpCisJCQkJCWJyZWFrOworCisJCQkJaWYgKG9sZF9zcGVlZCAhPSBzbGF2ZS0+c3BlZWQpCisJCQkJCWJvbmRfM2FkX2FkYXB0ZXJfc3BlZWRfY2hhbmdlZChzbGF2ZSk7CisJCQkJaWYgKG9sZF9kdXBsZXggIT0gc2xhdmUtPmR1cGxleCkKKwkJCQkJYm9uZF8zYWRfYWRhcHRlcl9kdXBsZXhfY2hhbmdlZChzbGF2ZSk7CisJCQl9CisJCX0KKwogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCQkvKgpAQCAtNDcyNCw3ICs0NzQ4LDcgQEAKICAqLwogaW50IGJvbmRfcGFyc2VfcGFybShjb25zdCBjaGFyICpidWYsIGNvbnN0IHN0cnVjdCBib25kX3Bhcm1fdGJsICp0YmwpCiB7Ci0JaW50IG1vZGUgPSAtMSwgaSwgcnY7CisJaW50IG1vZGVpbnQgPSAtMSwgaSwgcnY7CiAJY2hhciAqcCwgbW9kZXN0cltCT05EX01BWF9NT0RFTkFNRV9MRU4gKyAxXSA9IHsgMCwgfTsKIAogCWZvciAocCA9IChjaGFyICopYnVmOyAqcDsgcCsrKQpAQCAtNDczNCwxMyArNDc1OCwxMyBAQAogCWlmICgqcCkKIAkJcnYgPSBzc2NhbmYoYnVmLCAiJTIwcyIsIG1vZGVzdHIpOwogCWVsc2UKLQkJcnYgPSBzc2NhbmYoYnVmLCAiJWQiLCAmbW9kZSk7CisJCXJ2ID0gc3NjYW5mKGJ1ZiwgIiVkIiwgJm1vZGVpbnQpOwogCiAJaWYgKCFydikKIAkJcmV0dXJuIC0xOwogCiAJZm9yIChpID0gMDsgdGJsW2ldLm1vZGVuYW1lOyBpKyspIHsKLQkJaWYgKG1vZGUgPT0gdGJsW2ldLm1vZGUpCisJCWlmIChtb2RlaW50ID09IHRibFtpXS5tb2RlKQogCQkJcmV0dXJuIHRibFtpXS5tb2RlOwogCQlpZiAoc3RyY21wKG1vZGVzdHIsIHRibFtpXS5tb2RlbmFtZSkgPT0gMCkKIAkJCXJldHVybiB0YmxbaV0ubW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwppbmRleCBiYmJjM2JiLi4wZWZmZWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMKKysrIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCkBAIC0yNTA2LDcgKzI1MDYsNyBAQAogCWlmIChzdGF0dXMgJiBJTlRSX1JYX0RPTkVfQUxUKSB7IC8qIGhhbmRsZSByeCBzZXBhcmF0ZWx5ICovCiAjaWZkZWYgVVNFX05BUEkKIAkJY2FzX21hc2tfaW50cihjcCk7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjcC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNwLT5uYXBpKTsKICNlbHNlCiAJCWNhc19yeF9yaW5nTihjcCwgcmluZywgMCk7CiAjZW5kaWYKQEAgLTI1NTcsNyArMjU1Nyw3IEBACiAJaWYgKHN0YXR1cyAmIElOVFJfUlhfRE9ORV9BTFQpIHsgLyogaGFuZGxlIHJ4IHNlcGFyYXRlbHkgKi8KICNpZmRlZiBVU0VfTkFQSQogCQljYXNfbWFza19pbnRyKGNwKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY3AtPm5hcGkpOwogI2Vsc2UKIAkJY2FzX3J4X3JpbmdOKGNwLCAxLCAwKTsKICNlbmRpZgpAQCAtMjYxMyw3ICsyNjEzLDcgQEAKIAlpZiAoc3RhdHVzICYgSU5UUl9SWF9ET05FKSB7CiAjaWZkZWYgVVNFX05BUEkKIAkJY2FzX21hc2tfaW50cihjcCk7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZjcC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNwLT5uYXBpKTsKICNlbHNlCiAJCWNhc19yeF9yaW5nTihjcCwgMCwgMCk7CiAjZW5kaWYKQEAgLTI2OTEsNyArMjY5MSw3IEBACiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+bG9jaywgZmxhZ3MpOwogCWlmIChlbmFibGVfaW50cikgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJY2FzX3VubWFza19pbnRyKGNwKTsKIAl9CiAJcmV0dXJuIGNyZWRpdHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYwppbmRleCBkOTg0Yjc5Li41OGY2ZmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKQEAgLTE2MTIsNyArMTYxMiw3IEBACiAJaW50IHdvcmtfZG9uZSA9IHByb2Nlc3NfcmVzcG9uc2VzKGFkYXB0ZXIsIGJ1ZGdldCk7CiAKIAlpZiAobGlrZWx5KHdvcmtfZG9uZSA8IGJ1ZGdldCkpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXdyaXRlbChhZGFwdGVyLT5zZ2UtPnJlc3BRLmNpZHgsCiAJCSAgICAgICBhZGFwdGVyLT5yZWdzICsgQV9TR19TTEVFUElORyk7CiAJfQpAQCAtMTYzMCw3ICsxNjMwLDcgQEAKIAogCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCQkJaWYgKHByb2Nlc3NfcHVyZV9yZXNwb25zZXMoYWRhcHRlcikpCi0JCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCQkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAkJCWVsc2UgewogCQkJCS8qIG5vIGRhdGEsIG5vIE5BUEkgbmVlZGVkICovCiAJCQkJd3JpdGVsKHNnZS0+cmVzcFEuY2lkeCwgYWRhcHRlci0+cmVncyArIEFfU0dfU0xFRVBJTkcpOwpAQCAtMTk2Nyw4ICsxOTY3LDcgQEAKIAkJdHhfc2NoZWRfc3RvcChzZ2UpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUE9SVFM7IGkrKykKLQkJaWYgKHNnZS0+ZXNwaWJ1Z19za2JbaV0pCi0JCQlrZnJlZV9za2Ioc2dlLT5lc3BpYnVnX3NrYltpXSk7CisJCWtmcmVlX3NrYihzZ2UtPmVzcGlidWdfc2tiW2ldKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NwbWFjLmMgYi9kcml2ZXJzL25ldC9jcG1hYy5jCmluZGV4IGY2NjU0ODcuLjNmNDc2YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvY3BtYWMuYwpAQCAtNDI4LDcgKzQyOCw3IEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcng6IHBvbGxpbmcsIGJ1dCBubyBxdWV1ZVxuIiwKIAkJCSAgICAgICBwcml2LT5kZXYtPm5hbWUpOwogCQlzcGluX3VubG9jaygmcHJpdi0+cnhfbG9jayk7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUxNCw3ICs1MTQsNyBAQAogCWlmIChwcm9jZXNzZWQgPT0gMCkgewogCQkvKiB3ZSByYW4gb3V0IG9mIHBhY2tldHMgdG8gcmVhZCwKIAkJICogcmV2ZXJ0IHRvIGludGVycnVwdC1kcml2ZW4gbW9kZSAqLwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJY3BtYWNfd3JpdGUocHJpdi0+cmVncywgQ1BNQUNfUlhfSU5UX0VOQUJMRSwgMSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTUzNiw3ICs1MzYsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrKCZwcml2LT5yeF9sb2NrKTsKLQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwluYXBpX2NvbXBsZXRlKG5hcGkpOwogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhwcml2LT5kZXYpOwogCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CiAKQEAgLTgwMiw5ICs4MDIsOSBAQAogCiAJaWYgKHN0YXR1cyAmIE1BQ19JTlRfUlgpIHsKIAkJcXVldWUgPSAoc3RhdHVzID4+IDgpICYgNzsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSB7CiAJCQljcG1hY193cml0ZShwcml2LT5yZWdzLCBDUE1BQ19SWF9JTlRfQ0xFQVIsIDEgPDwgcXVldWUpOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnByaXYtPm5hcGkpOwogCQl9CiAJfQogCkBAIC0xMTYxLDcgKzExNjEsNyBAQAogCXByaXYtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1Z19sZXZlbCwgMHhmZik7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHBkYXRhLT5kZXZfYWRkciwgc2l6ZW9mKGRldi0+ZGV2X2FkZHIpKTsKIAotCXByaXYtPnBoeSA9IHBoeV9jb25uZWN0KGRldiwgY3BtYWNfbWlpLT5waHlfbWFwW3BoeV9pZF0tPmRldi5idXNfaWQsCisJcHJpdi0+cGh5ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmY3BtYWNfbWlpLT5waHlfbWFwW3BoeV9pZF0tPmRldiksCiAJCQkJJmNwbWFjX2FkanVzdF9saW5rLCAwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKIAlpZiAoSVNfRVJSKHByaXYtPnBoeSkpIHsKIAkJaWYgKG5ldGlmX21zZ19kcnYocHJpdikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jczg5eDAuYyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCmluZGV4IGZmNjQ5NzYuLjc0MzNiODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NzODl4MC5jCisrKyBiL2RyaXZlcnMvbmV0L2NzODl4MC5jCkBAIC01MDEsNiArNTAxLDIxIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRfb3BzID0geworCS5uZG9fb3BlbgkJPSBuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gbmV0X2Nsb3NlLAorCS5uZG9fdHhfdGltZW91dAkJPSBuZXRfdGltZW91dCwKKwkubmRvX3N0YXJ0X3htaXQgCT0gbmV0X3NlbmRfcGFja2V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IG5ldF9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gc2V0X21hY19hZGRyZXNzLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBuZXRfcG9sbF9jb250cm9sbGVyLAorI2VuZGlmCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyogVGhpcyBpcyB0aGUgcmVhbCBwcm9iZSByb3V0aW5lLiAgTGludXggaGFzIGEgaGlzdG9yeSBvZiBmcmllbmRseSBkZXZpY2UKICAgIHByb2JlcyBvbiB0aGUgSVNBIGJ1cy4gIEEgZ29vZCBkZXZpY2UgcHJvYmVzIGF2b2lkcyBkb2luZyB3cml0ZXMsIGFuZAogICAgdmVyaWZpZXMgdGhhdCB0aGUgY29ycmVjdCBkZXZpY2UgZXhpc3RzIGFuZCBmdW5jdGlvbnMuCkBAIC04NDMsMTcgKzg1OCw4IEBACiAJLyogcHJpbnQgdGhlIGV0aGVybmV0IGFkZHJlc3MuICovCiAJcHJpbnRrKCIsIE1BQyAlcE0iLCBkZXYtPmRldl9hZGRyKTsKIAotCWRldi0+b3BlbgkJPSBuZXRfb3BlbjsKLQlkZXYtPnN0b3AJCT0gbmV0X2Nsb3NlOwotCWRldi0+dHhfdGltZW91dAkJPSBuZXRfdGltZW91dDsKLQlkZXYtPndhdGNoZG9nX3RpbWVvCT0gSFo7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgCT0gbmV0X3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzCQk9IG5ldF9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgCT0gc2V0X21hY19hZGRyZXNzOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIJPSBuZXRfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCisJZGV2LT5uZXRkZXZfb3BzCT0gJm5ldF9vcHM7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaOwogCiAJcHJpbnRrKCJcbiIpOwogCWlmIChuZXRfZGVidWcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmggYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKaW5kZXggYTg5ZDhjYy4uNzE0ZGYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaApAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgInQzY2Rldi5oIgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC02OSw2ICs2OCw4IEBACiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0c3RhdHM7CiAJaW50IGFjdGl2aXR5OwogCV9fYmUzMiBpc2NzaV9pcHY0YWRkcjsKKworCWludCBsaW5rX2ZhdWx0OyAvKiBsaW5rIGZhdWx0IHdhcyBkZXRlY3RlZCAqLwogfTsKIAogZW51bSB7CQkJCS8qIGFkYXB0ZXIgZmxhZ3MgKi8KQEAgLTg0LDYgKzg1LDggQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl2b2lkICp2YTsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXU2NCAqcF9jbnQ7CisJREVDTEFSRV9QQ0lfVU5NQVBfQUREUihtYXBwaW5nKTsKIH07CiAKIHN0cnVjdCByeF9kZXNjOwpAQCAtOTIsNiArOTUsNyBAQAogc3RydWN0IHNnZV9mbCB7ICAgICAgICAgICAgICAgICAgICAgLyogU0dFIHBlciBmcmVlLWJ1ZmZlciBsaXN0IHN0YXRlICovCiAJdW5zaWduZWQgaW50IGJ1Zl9zaXplOyAgICAgIC8qIHNpemUgb2YgZWFjaCBSeCBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQgY3JlZGl0czsgICAgICAgLyogIyBvZiBhdmFpbGFibGUgUnggYnVmZmVycyAqLworCXVuc2lnbmVkIGludCBwZW5kX2NyZWQ7ICAgICAvKiBuZXcgYnVmZmVycyBzaW5jZSBsYXN0IEZMIERCIHJpbmcgKi8KIAl1bnNpZ25lZCBpbnQgc2l6ZTsgICAgICAgICAgLyogY2FwYWNpdHkgb2YgZnJlZSBsaXN0ICovCiAJdW5zaWduZWQgaW50IGNpZHg7ICAgICAgICAgIC8qIGNvbnN1bWVyIGluZGV4ICovCiAJdW5zaWduZWQgaW50IHBpZHg7ICAgICAgICAgIC8qIHByb2R1Y2VyIGluZGV4ICovCkBAIC05OSw2ICsxMDMsNyBAQAogCXN0cnVjdCBmbF9wZ19jaHVuayBwZ19jaHVuazsvKiBwYWdlIGNodW5rIGNhY2hlICovCiAJdW5zaWduZWQgaW50IHVzZV9wYWdlczsgICAgIC8qIHdoZXRoZXIgRkwgdXNlcyBwYWdlcyBvciBza19idWZmcyAqLwogCXVuc2lnbmVkIGludCBvcmRlcjsJICAgIC8qIG9yZGVyIG9mIHBhZ2UgYWxsb2NhdGlvbnMgKi8KKwl1bnNpZ25lZCBpbnQgYWxsb2Nfc2l6ZTsgICAgLyogc2l6ZSBvZiBhbGxvY2F0ZWQgYnVmZmVyICovCiAJc3RydWN0IHJ4X2Rlc2MgKmRlc2M7ICAgICAgIC8qIGFkZHJlc3Mgb2YgSFcgUnggZGVzY3JpcHRvciByaW5nICovCiAJc3RydWN0IHJ4X3N3X2Rlc2MgKnNkZXNjOyAgIC8qIGFkZHJlc3Mgb2YgU1cgUnggZGVzY3JpcHRvciByaW5nICovCiAJZG1hX2FkZHJfdCAgIHBoeXNfYWRkcjsgICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgSFcgcmluZyBzdGFydCAqLwpAQCAtMTc4LDE1ICsxODMsMTEgQEAKIAlTR0VfUFNUQVRfVFhfQ1NVTSwJLyogIyBvZiBUWCBjaGVja3N1bSBvZmZsb2FkcyAqLwogCVNHRV9QU1RBVF9WTEFORVgsCS8qICMgb2YgVkxBTiB0YWcgZXh0cmFjdGlvbnMgKi8KIAlTR0VfUFNUQVRfVkxBTklOUywJLyogIyBvZiBWTEFOIHRhZyBpbnNlcnRpb25zICovCi0JU0dFX1BTVEFUX0xST19BR0dSLAkvKiAjIG9mIHBhZ2UgY2h1bmtzIGFkZGVkIHRvIExSTyBzZXNzaW9ucyAqLwotCVNHRV9QU1RBVF9MUk9fRkxVU0hFRCwJLyogIyBvZiBmbHVzaGVkIExSTyBzZXNzaW9ucyAqLwotCVNHRV9QU1RBVF9MUk9fTk9fREVTQywJLyogIyBvZiBvdmVyZmxvd24gTFJPIHNlc3Npb25zICovCiAKIAlTR0VfUFNUQVRfTUFYCQkvKiBtdXN0IGJlIGxhc3QgKi8KIH07CiAKLSNkZWZpbmUgVDNfTUFYX0xST19TRVMgOAotI2RlZmluZSBUM19NQVhfTFJPX01BWF9QS1RTIDY0CitzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm87CiAKIHN0cnVjdCBzZ2VfcXNldCB7CQkvKiBhbiBTR0UgcXVldWUgc2V0ICovCiAJc3RydWN0IGFkYXB0ZXIgKmFkYXA7CkBAIC0xOTQsMTcgKzE5NSwxNCBAQAogCXN0cnVjdCBzZ2VfcnNwcSByc3BxOwogCXN0cnVjdCBzZ2VfZmwgZmxbU0dFX1JYUV9QRVJfU0VUXTsKIAlzdHJ1Y3Qgc2dlX3R4cSB0eHFbU0dFX1RYUV9QRVJfU0VUXTsKLQlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKLQlzdHJ1Y3QgbmV0X2xyb19kZXNjIGxyb19kZXNjW1QzX01BWF9MUk9fU0VTXTsKLQlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpscm9fZnJhZ190Ymw7Ci0JaW50IGxyb19uZnJhZ3M7CisJc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvIGxyb19mcmFnX3RibDsKIAlpbnQgbHJvX2VuYWJsZWQ7Ci0JaW50IGxyb19mcmFnX2xlbjsKIAl2b2lkICpscm9fdmE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eF9xOwkvKiBhc3NvY2lhdGVkIG5ldGRldiBUWCBxdWV1ZSAqLwogCXVuc2lnbmVkIGxvbmcgdHhxX3N0b3BwZWQ7CS8qIHdoaWNoIFR4IHF1ZXVlcyBhcmUgc3RvcHBlZCAqLwogCXN0cnVjdCB0aW1lcl9saXN0IHR4X3JlY2xhaW1fdGltZXI7CS8qIHJlY2xhaW1zIFRYIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCByeF9yZWNsYWltX3RpbWVyOwkvKiByZWNsYWltcyBSWCBidWZmZXJzICovCiAJdW5zaWduZWQgbG9uZyBwb3J0X3N0YXRzW1NHRV9QU1RBVF9NQVhdOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKQEAgLTIzMCw2ICsyMjgsNyBAQAogCXVuc2lnbmVkIGludCBzbG93X2ludHJfbWFzazsKIAl1bnNpZ25lZCBsb25nIGlycV9zdGF0c1tJUlFfTlVNX1NUQVRTXTsKIAorCWludCBtc2l4X252ZWN0b3JzOwogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIHNob3J0IHZlYzsKIAkJY2hhciBkZXNjWzIyXTsKQEAgLTI0Nyw2ICsyNDYsNyBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsgYWRhcF9jaGVja190YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBleHRfaW50cl9oYW5kbGVyX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IGZhdGFsX2Vycm9yX2hhbmRsZXJfdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbGlua19mYXVsdF9oYW5kbGVyX3Rhc2s7CiAKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7CiAKQEAgLTI4OSw5ICsyODksMTIgQEAKIHZvaWQgdDNfb3NfbGlua19jaGFuZ2VkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydF9pZCwgaW50IGxpbmtfc3RhdHVzLAogCQkJaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBpbnQgZmMpOwogdm9pZCB0M19vc19waHltb2RfY2hhbmdlZChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgaW50IHBvcnRfaWQpOwordm9pZCB0M19vc19saW5rX2ZhdWx0KHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydF9pZCwgaW50IHN0YXRlKTsKK3ZvaWQgdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcG9ydF9pZCk7CiAKIHZvaWQgdDNfc2dlX3N0YXJ0KHN0cnVjdCBhZGFwdGVyICphZGFwKTsKIHZvaWQgdDNfc2dlX3N0b3Aoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwordm9pZCB0M19zdGFydF9zZ2VfdGltZXJzKHN0cnVjdCBhZGFwdGVyICphZGFwKTsKIHZvaWQgdDNfc3RvcF9zZ2VfdGltZXJzKHN0cnVjdCBhZGFwdGVyICphZGFwKTsKIHZvaWQgdDNfZnJlZV9zZ2VfcmVzb3VyY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwKTsKIHZvaWQgdDNfc2dlX2Vycl9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvYWVsMTAwMi5jIGIvZHJpdmVycy9uZXQvY3hnYjMvYWVsMTAwMi5jCmluZGV4IDVjM2MwNWQuLmUxYjIyNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FlbDEwMDIuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9hZWwxMDAyLmMKQEAgLTEwMDUsNyArMTAwNSw4IEBACiAJCXsgMCwgMCwgMCwgMCB9CiAJfTsKIAotCWludCBlcnIsIGxhc2lfY3RybDsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGludCBsYXNpX2N0cmw7CiAKIAllcnIgPSBtZGlvX3JlYWQocGh5LCBNRElPX0RFVl9QTUFfUE1ELCBMQVNJX0NUUkwsICZsYXNpX2N0cmwpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCmluZGV4IGRiNGY0ZjUuLmU1MDhkYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oCkBAIC0xOTEsNyArMTkxLDggQEAKIH07CiAKIHN0cnVjdCBhZGFwdGVyX2luZm8gewotCXVuc2lnbmVkIGNoYXIgbnBvcnRzOwkvKiAjIG9mIHBvcnRzICovCisJdW5zaWduZWQgY2hhciBucG9ydHMwOyAgICAgICAgLyogIyBvZiBwb3J0cyBvbiBjaGFubmVsIDAgKi8KKwl1bnNpZ25lZCBjaGFyIG5wb3J0czE7ICAgICAgICAvKiAjIG9mIHBvcnRzIG9uIGNoYW5uZWwgMSAqLwogCXVuc2lnbmVkIGNoYXIgcGh5X2Jhc2VfYWRkcjsJLyogTURJTyBQSFkgYmFzZSBhZGRyZXNzICovCiAJdW5zaWduZWQgaW50IGdwaW9fb3V0OwkvKiBHUElPIG91dHB1dCBzZXR0aW5ncyAqLwogCXVuc2lnbmVkIGNoYXIgZ3Bpb19pbnRyW01BWF9OUE9SVFNdOyAvKiBHUElPIFBIWSBJUlEgcGlucyAqLwpAQCAtMjgwLDYgKzI4MSw3IEBACiAJdW5zaWduZWQgbG9uZyBudW1fdG9nZ2xlZDsgLyogIyB0aW1lcyB0b2dnbGVkIFR4RW4gZHVlIHRvIHN0dWNrIFRYICovCiAJdW5zaWduZWQgbG9uZyBudW1fcmVzZXRzOyAgLyogIyB0aW1lcyByZXNldCBkdWUgdG8gc3R1Y2sgVFggKi8KIAorCXVuc2lnbmVkIGxvbmcgbGlua19mYXVsdHM7ICAvKiAjIGRldGVjdGVkIGxpbmsgZmF1bHRzICovCiB9OwogCiBzdHJ1Y3QgdHBfbWliX3N0YXRzIHsKQEAgLTQyMSw2ICs0MjMsNyBAQAogCXVuc2lnbmVkIHNob3J0IGJfd25kW05DQ1RSTF9XSU5dOwogCiAJdW5zaWduZWQgaW50IG5wb3J0czsJLyogIyBvZiBldGhlcm5ldCBwb3J0cyAqLworCXVuc2lnbmVkIGludCBjaGFuX21hcDsgIC8qIGJpdG1hcCBvZiBpbi11c2UgVHggY2hhbm5lbHMgKi8KIAl1bnNpZ25lZCBpbnQgc3RhdHNfdXBkYXRlX3BlcmlvZDsJLyogTUFDIHN0YXRzIGFjY3VtdWxhdGlvbiBwZXJpb2QgKi8KIAl1bnNpZ25lZCBpbnQgbGlua3BvbGxfcGVyaW9kOwkvKiBsaW5rIHBvbGwgcGVyaW9kIGluIDAuMXMgKi8KIAl1bnNpZ25lZCBpbnQgcmV2OwkvKiBjaGlwIHJldmlzaW9uICovCkBAIC03MDEsNiArNzA0LDggQEAKIHZvaWQgdDNfaW50cl9lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCB0M19pbnRyX2Rpc2FibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwogdm9pZCB0M19pbnRyX2NsZWFyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgdDNfeGdtX2ludHJfZW5hYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KTsKK3ZvaWQgdDNfeGdtX2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7CiB2b2lkIHQzX3BvcnRfaW50cl9lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBpZHgpOwogdm9pZCB0M19wb3J0X2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7CiB2b2lkIHQzX3BvcnRfaW50cl9jbGVhcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCk7CkBAIC03MDgsNiArNzEzLDcgQEAKIGludCB0M19waHlfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKIAogdm9pZCB0M19saW5rX2NoYW5nZWQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKTsKK3ZvaWQgdDNfbGlua19mYXVsdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpOwogaW50IHQzX2xpbmtfc3RhcnQoc3RydWN0IGNwaHkgKnBoeSwgc3RydWN0IGNtYWMgKm1hYywgc3RydWN0IGxpbmtfY29uZmlnICpsYyk7CiBjb25zdCBzdHJ1Y3QgYWRhcHRlcl9pbmZvICp0M19nZXRfYWRhcHRlcl9pbmZvKHVuc2lnbmVkIGludCBib2FyZF9pZCk7CiBpbnQgdDNfc2VlcHJvbV9yZWFkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgX19sZTMyICpkYXRhKTsKQEAgLTc0NCw2ICs3NTAsOCBAQAogCiBpbnQgdDNfbWFjX3Jlc2V0KHN0cnVjdCBjbWFjICptYWMpOwogdm9pZCB0M2JfcGNzX3Jlc2V0KHN0cnVjdCBjbWFjICptYWMpOwordm9pZCB0M19tYWNfZGlzYWJsZV9leGFjdF9maWx0ZXJzKHN0cnVjdCBjbWFjICptYWMpOwordm9pZCB0M19tYWNfZW5hYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYyk7CiBpbnQgdDNfbWFjX2VuYWJsZShzdHJ1Y3QgY21hYyAqbWFjLCBpbnQgd2hpY2gpOwogaW50IHQzX21hY19kaXNhYmxlKHN0cnVjdCBjbWFjICptYWMsIGludCB3aGljaCk7CiBpbnQgdDNfbWFjX3NldF9tdHUoc3RydWN0IGNtYWMgKm1hYywgdW5zaWduZWQgaW50IG10dSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKaW5kZXggYmFiOGE5My4uMmMyYWFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYwpAQCAtMTcwLDYgKzE3MCw0MCBAQAogCX0KIH0KIAordm9pZCB0M19vc19saW5rX2ZhdWx0KHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgcG9ydF9pZCwgaW50IHN0YXRlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwLT5wb3J0W3BvcnRfaWRdOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChzdGF0ZSA9PSBuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCXJldHVybjsKKworCWlmIChzdGF0ZSkgeworCQlzdHJ1Y3QgY21hYyAqbWFjID0gJnBpLT5tYWM7CisKKwkJbmV0aWZfY2Fycmllcl9vbihkZXYpOworCisJCS8qIENsZWFyIGxvY2FsIGZhdWx0cyAqLworCQl0M194Z21faW50cl9kaXNhYmxlKGFkYXAsIHBpLT5wb3J0X2lkKTsKKwkJdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fSU5UX1NUQVRVUyArCisJCQkJICAgIHBpLT5tYWMub2Zmc2V0KTsKKwkJdDNfd3JpdGVfcmVnKGFkYXAsCisJCQkgICAgIEFfWEdNX0lOVF9DQVVTRSArIHBpLT5tYWMub2Zmc2V0LAorCQkJICAgICBGX1hHTV9JTlQpOworCisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwKKwkJCQkgQV9YR01fSU5UX0VOQUJMRSArCisJCQkJIHBpLT5tYWMub2Zmc2V0LAorCQkJCSBGX1hHTV9JTlQsIEZfWEdNX0lOVCk7CisJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwLCBwaS0+cG9ydF9pZCk7CisKKwkJdDNfbWFjX2VuYWJsZShtYWMsIE1BQ19ESVJFQ1RJT05fVFgpOworCX0gZWxzZQorCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCisJbGlua19yZXBvcnQoZGV2KTsKK30KKwogLyoqCiAgKgl0M19vc19saW5rX2NoYW5nZWQgLSBoYW5kbGUgbGluayBzdGF0dXMgY2hhbmdlcwogICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgbGluayBjaGFuZ2UKQEAgLTE5NywxMCArMjMxLDM0IEBACiAJaWYgKGxpbmtfc3RhdCAhPSBuZXRpZl9jYXJyaWVyX29rKGRldikpIHsKIAkJaWYgKGxpbmtfc3RhdCkgewogCQkJdDNfbWFjX2VuYWJsZShtYWMsIE1BQ19ESVJFQ1RJT05fUlgpOworCisJCQkvKiBDbGVhciBsb2NhbCBmYXVsdHMgKi8KKwkJCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOworCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArCisJCQkJICAgIHBpLT5tYWMub2Zmc2V0KTsKKwkJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLAorCQkJCSAgICAgQV9YR01fSU5UX0NBVVNFICsgcGktPm1hYy5vZmZzZXQsCisJCQkJICAgICBGX1hHTV9JTlQpOworCisJCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsCisJCQkJCSBBX1hHTV9JTlRfRU5BQkxFICsgcGktPm1hYy5vZmZzZXQsCisJCQkJCSBGX1hHTV9JTlQsIEZfWEdNX0lOVCk7CisJCQl0M194Z21faW50cl9lbmFibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOworCiAJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJCX0gZWxzZSB7CiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQkJcGktPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnBpLT5waHksIDEpOworCisJCQl0M194Z21faW50cl9kaXNhYmxlKGFkYXB0ZXIsIHBpLT5wb3J0X2lkKTsKKwkJCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9TVEFUVVMgKyBwaS0+bWFjLm9mZnNldCk7CisJCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsCisJCQkJCSBBX1hHTV9JTlRfRU5BQkxFICsgcGktPm1hYy5vZmZzZXQsCisJCQkJCSBGX1hHTV9JTlQsIDApOworCisJCQlpZiAoaXNfMTBHKGFkYXB0ZXIpKQorCQkJCXBpLT5waHkub3BzLT5wb3dlcl9kb3duKCZwaS0+cGh5LCAxKTsKKworCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHBpLT5tYWMub2Zmc2V0KTsKIAkJCXQzX21hY19kaXNhYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CiAJCQl0M19saW5rX3N0YXJ0KCZwaS0+cGh5LCBtYWMsICZwaS0+bGlua19jb25maWcpOwogCQl9CkBAIC0zMzksNyArMzk3LDcgQEAKIAogCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2luZm9bMF0udmVjLCBhZGFwdGVyKTsKIAkJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKQotCQkgICAgbiArPSBhZGFwMnBpbmZvKGFkYXB0ZXIsIGkpLT5ucXNldHM7CisJCQluICs9IGFkYXAycGluZm8oYWRhcHRlciwgaSktPm5xc2V0czsKIAogCQlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKQogCQkJZnJlZV9pcnEoYWRhcHRlci0+bXNpeF9pbmZvW2kgKyAxXS52ZWMsCkBAIC01MDksMTkgKzU2Nyw5IEBACiB7CiAJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcGktPmFkYXB0ZXI7Ci0JaW50IGksIGxyb19vbiA9IDE7CiAKIAlhZGFwdGVyLT5wYXJhbXMuc2dlLnFzZXRbcXNldF9pZHhdLmxybyA9ICEhdmFsOwogCWFkYXB0ZXItPnNnZS5xc1txc2V0X2lkeF0ubHJvX2VuYWJsZWQgPSAhIXZhbDsKLQotCS8qIGxldCBldGh0b29sIHJlcG9ydCBMUk8gb24gb25seSBpZiBhbGwgcXVldWVzIGFyZSBMUk8gZW5hYmxlZCAqLwotCWZvciAoaSA9IHBpLT5maXJzdF9xc2V0OyBpIDwgcGktPmZpcnN0X3FzZXQgKyBwaS0+bnFzZXRzOyArK2kpCi0JCWxyb19vbiAmPSBhZGFwdGVyLT5wYXJhbXMuc2dlLnFzZXRbaV0ubHJvOwotCi0JaWYgKGxyb19vbikKLQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKLQllbHNlCi0JCWRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfTFJPOwogfQogCiAvKioKQEAgLTU1NCw3ICs2MDIsNiBAQAogCQkJCSZhZGFwLT5wYXJhbXMuc2dlLnFzZXRbcXNldF9pZHhdLCBudHhxLCBkZXYsCiAJCQkJbmV0ZGV2X2dldF90eF9xdWV1ZShkZXYsIGopKTsKIAkJCWlmIChlcnIpIHsKLQkJCQl0M19zdG9wX3NnZV90aW1lcnMoYWRhcCk7CiAJCQkJdDNfZnJlZV9zZ2VfcmVzb3VyY2VzKGFkYXApOwogCQkJCXJldHVybiBlcnI7CiAJCQl9CkBAIC05OTgsNiArMTA0NSw4IEBACiAJCXNldHVwX3JzcyhhZGFwKTsKIAkJaWYgKCEoYWRhcC0+ZmxhZ3MgJiBOQVBJX0lOSVQpKQogCQkJaW5pdF9uYXBpKGFkYXApOworCisJCXQzX3N0YXJ0X3NnZV90aW1lcnMoYWRhcCk7CiAJCWFkYXAtPmZsYWdzIHw9IEZVTExfSU5JVF9ET05FOwogCX0KIApAQCAtMTE4Myw2ICsxMjMyLDEwIEBACiAJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gcGktPmFkYXB0ZXI7CiAKKwkvKiBTdG9wIGxpbmsgZmF1bHQgaW50ZXJydXB0cyAqLworCXQzX3hnbV9pbnRyX2Rpc2FibGUoYWRhcHRlciwgcGktPnBvcnRfaWQpOworCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfWEdNX0lOVF9TVEFUVVMgKyBwaS0+bWFjLm9mZnNldCk7CisKIAl0M19wb3J0X2ludHJfZGlzYWJsZShhZGFwdGVyLCBwaS0+cG9ydF9pZCk7CiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7CiAJcGktPnBoeS5vcHMtPnBvd2VyX2Rvd24oJnBpLT5waHksIDEpOwpAQCAtMTMwOSw2ICsxMzYyLDcgQEAKIAkiQ2hlY2tUWEVuVG9nZ2xlZCAgICIsCiAJIkNoZWNrUmVzZXRzICAgICAgICAiLAogCisJIkxpbmtGYXVsdHMgICAgICAgICAiLAogfTsKIAogc3RhdGljIGludCBnZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKQEAgLTE0MzQsMTMgKzE0ODgsMTUgQEAKIAkqZGF0YSsrID0gY29sbGVjdF9zZ2VfcG9ydF9zdGF0cyhhZGFwdGVyLCBwaSwgU0dFX1BTVEFUX1ZMQU5JTlMpOwogCSpkYXRhKysgPSBjb2xsZWN0X3NnZV9wb3J0X3N0YXRzKGFkYXB0ZXIsIHBpLCBTR0VfUFNUQVRfVFhfQ1NVTSk7CiAJKmRhdGErKyA9IGNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIFNHRV9QU1RBVF9SWF9DU1VNX0dPT0QpOwotCSpkYXRhKysgPSBjb2xsZWN0X3NnZV9wb3J0X3N0YXRzKGFkYXB0ZXIsIHBpLCBTR0VfUFNUQVRfTFJPX0FHR1IpOwotCSpkYXRhKysgPSBjb2xsZWN0X3NnZV9wb3J0X3N0YXRzKGFkYXB0ZXIsIHBpLCBTR0VfUFNUQVRfTFJPX0ZMVVNIRUQpOwotCSpkYXRhKysgPSBjb2xsZWN0X3NnZV9wb3J0X3N0YXRzKGFkYXB0ZXIsIHBpLCBTR0VfUFNUQVRfTFJPX05PX0RFU0MpOworCSpkYXRhKysgPSAwOworCSpkYXRhKysgPSAwOworCSpkYXRhKysgPSAwOwogCSpkYXRhKysgPSBzLT5yeF9jb25nX2Ryb3BzOwogCiAJKmRhdGErKyA9IHMtPm51bV90b2dnbGVkOwogCSpkYXRhKysgPSBzLT5udW1fcmVzZXRzOworCisJKmRhdGErKyA9IHMtPmxpbmtfZmF1bHRzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVnX2Jsb2NrX2R1bXAoc3RydWN0IGFkYXB0ZXIgKmFwLCB2b2lkICpidWYsCkBAIC0xNTc2LDcgKzE2MzIsNiBAQAogCiBzdGF0aWMgaW50IHNldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKLQlpbnQgY2FwOwogCXN0cnVjdCBwb3J0X2luZm8gKnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBsaW5rX2NvbmZpZyAqbGMgPSAmcC0+bGlua19jb25maWc7CiAKQEAgLTE1ODYsNyArMTY0MSw3IEBACiAJCSAqIGJlaW5nIHJlcXVlc3RlZC4KIAkJICovCiAJCWlmIChjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7Ci0JCQljYXAgPSBzcGVlZF9kdXBsZXhfdG9fY2FwcyhjbWQtPnNwZWVkLCBjbWQtPmR1cGxleCk7CisJCQlpbnQgY2FwID0gc3BlZWRfZHVwbGV4X3RvX2NhcHMoY21kLT5zcGVlZCwgY21kLT5kdXBsZXgpOwogCQkJaWYgKGxjLT5zdXBwb3J0ZWQgJiBjYXApCiAJCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTE4MjcsMjggKzE4ODIsNiBAQAogCW1lbXNldCgmd29sLT5zb3Bhc3MsIDAsIHNpemVvZih3b2wtPnNvcGFzcykpOwogfQogCi1zdGF0aWMgaW50IGN4Z2IzX3NldF9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKLXsKLQlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGk7Ci0KLQlpZiAoZGF0YSAmIEVUSF9GTEFHX0xSTykgewotCQlpZiAoIShwaS0+cnhfb2ZmbG9hZCAmIFQzX1JYX0NTVU0pKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcGktPnJ4X29mZmxvYWQgfD0gVDNfTFJPOwotCQlmb3IgKGkgPSBwaS0+Zmlyc3RfcXNldDsgaSA8IHBpLT5maXJzdF9xc2V0ICsgcGktPm5xc2V0czsgaSsrKQotCQkJc2V0X3FzZXRfbHJvKGRldiwgaSwgMSk7Ci0KLQl9IGVsc2UgewotCQlwaS0+cnhfb2ZmbG9hZCAmPSB+VDNfTFJPOwotCQlmb3IgKGkgPSBwaS0+Zmlyc3RfcXNldDsgaSA8IHBpLT5maXJzdF9xc2V0ICsgcGktPm5xc2V0czsgaSsrKQotCQkJc2V0X3FzZXRfbHJvKGRldiwgaSwgMCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgY3hnYl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzID0gZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBzZXRfc2V0dGluZ3MsCkBAIC0xODc4LDggKzE5MTEsNiBAQAogCS5nZXRfcmVncyA9IGdldF9yZWdzLAogCS5nZXRfd29sID0gZ2V0X3dvbCwKIAkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKLQkuZ2V0X2ZsYWdzID0gZXRodG9vbF9vcF9nZXRfZmxhZ3MsCi0JLnNldF9mbGFncyA9IGN4Z2IzX3NldF9mbGFncywKIH07CiAKIHN0YXRpYyBpbnQgaW5fcmFuZ2UoaW50IHZhbCwgaW50IGxvLCBpbnQgaGkpCkBAIC0yNDYwLDggKzI0OTEsMjAgQEAKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFkYXB0ZXItPnBvcnRbaV07CiAJCXN0cnVjdCBwb3J0X2luZm8gKnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JCWlmICghKHAtPnBoeS5jYXBzICYgU1VQUE9SVEVEX0lSUSkgJiYgbmV0aWZfcnVubmluZyhkZXYpKQorCQlzcGluX2xvY2tfaXJxKCZhZGFwdGVyLT53b3JrX2xvY2spOworCQlpZiAocC0+bGlua19mYXVsdCkgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZhZGFwdGVyLT53b3JrX2xvY2spOworCQkJY29udGludWU7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZhZGFwdGVyLT53b3JrX2xvY2spOworCisJCWlmICghKHAtPnBoeS5jYXBzICYgU1VQUE9SVEVEX0lSUSkgJiYgbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQl0M194Z21faW50cl9kaXNhYmxlKGFkYXB0ZXIsIGkpOworCQkJdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIHAtPm1hYy5vZmZzZXQpOworCiAJCQl0M19saW5rX2NoYW5nZWQoYWRhcHRlciwgaSk7CisJCQl0M194Z21faW50cl9lbmFibGUoYWRhcHRlciwgaSk7CisJCX0KIAl9CiB9CiAKQEAgLTI1MDYsNiArMjU0OSw4IEBACiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFkYXB0ZXIsCiAJCQkJCSAgICAgICBhZGFwX2NoZWNrX3Rhc2sud29yayk7CiAJY29uc3Qgc3RydWN0IGFkYXB0ZXJfcGFyYW1zICpwID0gJmFkYXB0ZXItPnBhcmFtczsKKwlpbnQgcG9ydDsKKwl1bnNpZ25lZCBpbnQgdiwgc3RhdHVzLCByZXNldDsKIAogCWFkYXB0ZXItPmNoZWNrX3Rhc2tfY250Kys7CiAKQEAgLTI1MjQsNiArMjU2OSw1NCBAQAogCWlmIChwLT5yZXYgPT0gVDNfUkVWX0IyKQogCQljaGVja190M2IyX21hYyhhZGFwdGVyKTsKIAorCS8qCisJICogU2NhbiB0aGUgWEdNQUMncyB0byBjaGVjayBmb3IgdmFyaW91cyBjb25kaXRpb25zIHdoaWNoIHdlIHdhbnQgdG8KKwkgKiBtb25pdG9yIGluIGEgcGVyaW9kaWMgcG9sbGluZyBtYW5uZXIgcmF0aGVyIHRoYW4gdmlhIGFuIGludGVycnVwdAorCSAqIGNvbmRpdGlvbi4gIFRoaXMgaXMgdXNlZCBmb3IgY29uZGl0aW9ucyB3aGljaCB3b3VsZCBvdGhlcndpc2UgZmxvb2QKKwkgKiB0aGUgc3lzdGVtIHdpdGggaW50ZXJydXB0cyBhbmQgd2Ugb25seSByZWFsbHkgbmVlZCB0byBrbm93IHRoYXQgdGhlCisJICogY29uZGl0aW9ucyBhcmUgImhhcHBlbmluZyIgLi4uICBGb3IgZWFjaCBjb25kaXRpb24gd2UgY291bnQgdGhlCisJICogZGV0ZWN0aW9uIG9mIHRoZSBjb25kaXRpb24gYW5kIHJlc2V0IGl0IGZvciB0aGUgbmV4dCBwb2xsaW5nIGxvb3AuCisJICovCisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBwb3J0KSB7CisJCXN0cnVjdCBjbWFjICptYWMgPSAgJmFkYXAycGluZm8oYWRhcHRlciwgcG9ydCktPm1hYzsKKwkJdTMyIGNhdXNlOworCisJCWNhdXNlID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQpOworCQlyZXNldCA9IDA7CisJCWlmIChjYXVzZSAmIEZfUlhGSUZPX09WRVJGTE9XKSB7CisJCQltYWMtPnN0YXRzLnJ4X2ZpZm9fb3ZmbCsrOworCQkJcmVzZXQgfD0gRl9SWEZJRk9fT1ZFUkZMT1c7CisJCX0KKworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQsIHJlc2V0KTsKKwl9CisKKwkvKgorCSAqIFdlIGRvIHRoZSBzYW1lIGFzIGFib3ZlIGZvciBGTF9FTVBUWSBpbnRlcnJ1cHRzLgorCSAqLworCXN0YXR1cyA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfU0dfSU5UX0NBVVNFKTsKKwlyZXNldCA9IDA7CisKKwlpZiAoc3RhdHVzICYgRl9GTEVNUFRZKSB7CisJCXN0cnVjdCBzZ2VfcXNldCAqcXMgPSAmYWRhcHRlci0+c2dlLnFzWzBdOworCQlpbnQgaSA9IDA7CisKKwkJcmVzZXQgfD0gRl9GTEVNUFRZOworCisJCXYgPSAodDNfcmVhZF9yZWcoYWRhcHRlciwgQV9TR19SU1BRX0ZMX1NUQVRVUykgPj4gU19GTDBFTVBUWSkgJgorCQkgICAgMHhmZmZmOworCisJCXdoaWxlICh2KSB7CisJCQlxcy0+ZmxbaV0uZW1wdHkgKz0gKHYgJiAxKTsKKwkJCWlmIChpKQorCQkJCXFzKys7CisJCQlpIF49IDE7CisJCQl2ID4+PSAxOworCQl9CisJfQorCisJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfSU5UX0NBVVNFLCByZXNldCk7CisKIAkvKiBTY2hlZHVsZSB0aGUgbmV4dCBjaGVjayB1cGRhdGUgaWYgYW55IHBvcnQgaXMgYWN0aXZlLiAqLwogCXNwaW5fbG9ja19pcnEoJmFkYXB0ZXItPndvcmtfbG9jayk7CiAJaWYgKGFkYXB0ZXItPm9wZW5fZGV2aWNlX21hcCAmIFBPUlRfTUFTSykKQEAgLTI1MzgsOSArMjYzMSwyMyBAQAogewogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZGFwdGVyLAogCQkJCQkgICAgICAgZXh0X2ludHJfaGFuZGxlcl90YXNrKTsKKwlpbnQgaTsKIAorCS8qIERpc2FibGUgbGluayBmYXVsdCBpbnRlcnJ1cHRzICovCisJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5wb3J0W2ldOworCQlzdHJ1Y3QgcG9ydF9pbmZvICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCQl0M194Z21faW50cl9kaXNhYmxlKGFkYXB0ZXIsIGkpOworCQl0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1hHTV9JTlRfU1RBVFVTICsgcC0+bWFjLm9mZnNldCk7CisJfQorCisJLyogUmUtZW5hYmxlIGxpbmsgZmF1bHQgaW50ZXJydXB0cyAqLwogCXQzX3BoeV9pbnRyX2hhbmRsZXIoYWRhcHRlcik7CiAKKwlmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGkpCisJCXQzX3hnbV9pbnRyX2VuYWJsZShhZGFwdGVyLCBpKTsKKwogCS8qIE5vdyByZWVuYWJsZSBleHRlcm5hbCBpbnRlcnJ1cHRzICovCiAJc3Bpbl9sb2NrX2lycSgmYWRhcHRlci0+d29ya19sb2NrKTsKIAlpZiAoYWRhcHRlci0+c2xvd19pbnRyX21hc2spIHsKQEAgLTI1NzMsMTAgKzI2ODAsNDIgQEAKIAlzcGluX3VubG9jaygmYWRhcHRlci0+d29ya19sb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgbGlua19mYXVsdF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWRhcHRlciwKKwkJCQkJICAgICAgIGxpbmtfZmF1bHRfaGFuZGxlcl90YXNrKTsKKwlpbnQgaTsKKworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgaSkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+cG9ydFtpXTsKKwkJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJCWlmIChwaS0+bGlua19mYXVsdCkKKwkJCXQzX2xpbmtfZmF1bHQoYWRhcHRlciwgaSk7CisJfQorfQorCit2b2lkIHQzX29zX2xpbmtfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPnBvcnRbcG9ydF9pZF07CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc3Bpbl9sb2NrKCZhZGFwdGVyLT53b3JrX2xvY2spOworCXBpLT5saW5rX2ZhdWx0ID0gMTsKKwlxdWV1ZV93b3JrKGN4Z2IzX3dxLCAmYWRhcHRlci0+bGlua19mYXVsdF9oYW5kbGVyX3Rhc2spOworCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT53b3JrX2xvY2spOworfQorCiBzdGF0aWMgaW50IHQzX2FkYXB0ZXJfZXJyb3Ioc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCByZXNldCkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAorCWlmIChpc19vZmZsb2FkKGFkYXB0ZXIpICYmCisJICAgIHRlc3RfYml0KE9GRkxPQURfREVWTUFQX0JJVCwgJmFkYXB0ZXItPm9wZW5fZGV2aWNlX21hcCkpIHsKKwkJY3hnYjNfZXJyX25vdGlmeSgmYWRhcHRlci0+dGRldiwgT0ZGTE9BRF9TVEFUVVNfRE9XTiwgMCk7CisJCW9mZmxvYWRfY2xvc2UoJmFkYXB0ZXItPnRkZXYpOworCX0KKwogCS8qIFN0b3AgYWxsIHBvcnRzICovCiAJZm9yX2VhY2hfcG9ydChhZGFwdGVyLCBpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5wb3J0W2ldOwpAQCAtMjU4NSwxMCArMjcyNCw2IEBACiAJCQljeGdiX2Nsb3NlKG5ldGRldik7CiAJfQogCi0JaWYgKGlzX29mZmxvYWQoYWRhcHRlcikgJiYKLQkgICAgdGVzdF9iaXQoT0ZGTE9BRF9ERVZNQVBfQklULCAmYWRhcHRlci0+b3Blbl9kZXZpY2VfbWFwKSkKLQkJb2ZmbG9hZF9jbG9zZSgmYWRhcHRlci0+dGRldik7Ci0KIAkvKiBTdG9wIFNHRSB0aW1lcnMgKi8KIAl0M19zdG9wX3NnZV90aW1lcnMoYWRhcHRlcik7CiAKQEAgLTI2NDAsNiArMjc3NSw5IEBACiAJCQl9CiAJCX0KIAl9CisKKwlpZiAoaXNfb2ZmbG9hZChhZGFwdGVyKSAmJiAhb2ZsZF9kaXNhYmxlKQorCQljeGdiM19lcnJfbm90aWZ5KCZhZGFwdGVyLT50ZGV2LCBPRkZMT0FEX1NUQVRVU19VUCwgMCk7CiB9CiAKIC8qCkBAIC0yNjg0LDcgKzI4MjIsNiBAQAogCQlDSF9BTEVSVChhZGFwdGVyLCAiRlcgc3RhdHVzOiAweCV4LCAweCV4LCAweCV4LCAweCV4XG4iLAogCQkJIGZ3X3N0YXR1c1swXSwgZndfc3RhdHVzWzFdLAogCQkJIGZ3X3N0YXR1c1syXSwgZndfc3RhdHVzWzNdKTsKLQogfQogCiAvKioKQEAgLTI3MzQsNiArMjg3MSw5IEBACiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKKwlDSF9BTEVSVChhZGFwdGVyLCAiYWRhcHRlciByZWNvdmVyaW5nLCBQRVggRVJSIDB4JXhcbiIsCisJCSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1BDSUVfUEVYX0VSUikpOworCiAJdDNfcmVzdW1lX3BvcnRzKGFkYXB0ZXIpOwogfQogCkBAIC0yNzUzLDcgKzI4OTMsNyBAQAogCWludCBpLCBqID0gMDsKIAlpbnQgbnVtX2NwdXMgPSBudW1fb25saW5lX2NwdXMoKTsKIAlpbnQgaHdwb3J0cyA9IGFkYXAtPnBhcmFtcy5ucG9ydHM7Ci0JaW50IG5xc2V0cyA9IFNHRV9RU0VUUzsKKwlpbnQgbnFzZXRzID0gYWRhcC0+bXNpeF9udmVjdG9ycyAtIDE7CiAKIAlpZiAoYWRhcC0+cGFyYW1zLnJldiA+IDAgJiYgYWRhcC0+ZmxhZ3MgJiBVU0lOR19NU0lYKSB7CiAJCWlmIChod3BvcnRzID09IDIgJiYKQEAgLTI3ODIsMTggKzI5MjIsMjUgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGN4Z2JfZW5hYmxlX21zaXgoc3RydWN0IGFkYXB0ZXIgKmFkYXApCiB7CiAJc3RydWN0IG1zaXhfZW50cnkgZW50cmllc1tTR0VfUVNFVFMgKyAxXTsKKwlpbnQgdmVjdG9yczsKIAlpbnQgaSwgZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW50cmllcyk7ICsraSkKKwl2ZWN0b3JzID0gQVJSQVlfU0laRShlbnRyaWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgdmVjdG9yczsgKytpKQogCQllbnRyaWVzW2ldLmVudHJ5ID0gaTsKIAotCWVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwLT5wZGV2LCBlbnRyaWVzLCBBUlJBWV9TSVpFKGVudHJpZXMpKTsKKwl3aGlsZSAoKGVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwLT5wZGV2LCBlbnRyaWVzLCB2ZWN0b3JzKSkgPiAwKQorCQl2ZWN0b3JzID0gZXJyOworCisJaWYgKCFlcnIgJiYgdmVjdG9ycyA8IChhZGFwLT5wYXJhbXMubnBvcnRzICsgMSkpCisJCWVyciA9IC0xOworCiAJaWYgKCFlcnIpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZW50cmllcyk7ICsraSkKKwkJZm9yIChpID0gMDsgaSA8IHZlY3RvcnM7ICsraSkKIAkJCWFkYXAtPm1zaXhfaW5mb1tpXS52ZWMgPSBlbnRyaWVzW2ldLnZlY3RvcjsKLQl9IGVsc2UgaWYgKGVyciA+IDApCi0JCWRldl9pbmZvKCZhZGFwLT5wZGV2LT5kZXYsCi0JCSAgICAgICAib25seSAlZCBNU0ktWCB2ZWN0b3JzIGxlZnQsIG5vdCB1c2luZyBNU0ktWFxuIiwgZXJyKTsKKwkJYWRhcC0+bXNpeF9udmVjdG9ycyA9IHZlY3RvcnM7CisJfQorCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjg1OSw3ICszMDA2LDcgQEAKIAlzdGF0aWMgaW50IHZlcnNpb25fcHJpbnRlZDsKIAogCWludCBpLCBlcnIsIHBjaV91c2luZ19kYWMgPSAwOwotCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19sZW47CisJcmVzb3VyY2Vfc2l6ZV90IG1taW9fc3RhcnQsIG1taW9fbGVuOwogCWNvbnN0IHN0cnVjdCBhZGFwdGVyX2luZm8gKmFpOwogCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gTlVMTDsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaTsKQEAgLTI5MzUsMTAgKzMwODIsMTEgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5hZGFwdGVyX2xpc3QpOwogCUlOSVRfV09SSygmYWRhcHRlci0+ZXh0X2ludHJfaGFuZGxlcl90YXNrLCBleHRfaW50cl90YXNrKTsKKwlJTklUX1dPUksoJmFkYXB0ZXItPmxpbmtfZmF1bHRfaGFuZGxlcl90YXNrLCBsaW5rX2ZhdWx0X3Rhc2spOwogCUlOSVRfV09SSygmYWRhcHRlci0+ZmF0YWxfZXJyb3JfaGFuZGxlcl90YXNrLCBmYXRhbF9lcnJvcl90YXNrKTsKIAlJTklUX0RFTEFZRURfV09SSygmYWRhcHRlci0+YWRhcF9jaGVja190YXNrLCB0M19hZGFwX2NoZWNrX3Rhc2spOwogCi0JZm9yIChpID0gMDsgaSA8IGFpLT5ucG9ydHM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBhaS0+bnBvcnRzMCArIGFpLT5ucG9ydHMxOyArK2kpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAogCQluZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IHBvcnRfaW5mbyksIFNHRV9RU0VUUyk7CkBAIC0yOTYxLDcgKzMxMDksNyBAQAogCQluZXRkZXYtPm1lbV9lbmQgPSBtbWlvX3N0YXJ0ICsgbW1pb19sZW4gLSAxOwogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTzsKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7Ci0JCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CiAJCWlmIChwY2lfdXNpbmdfZGFjKQogCQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKQEAgLTMwMjgsNyArMzE3Niw3IEBACiAKIG91dF9mcmVlX2RldjoKIAlpb3VubWFwKGFkYXB0ZXItPnJlZ3MpOwotCWZvciAoaSA9IGFpLT5ucG9ydHMgLSAxOyBpID49IDA7IC0taSkKKwlmb3IgKGkgPSBhaS0+bnBvcnRzMCArIGFpLT5ucG9ydHMxIC0gMTsgaSA+PSAwOyAtLWkpCiAJCWlmIChhZGFwdGVyLT5wb3J0W2ldKQogCQkJZnJlZV9uZXRkZXYoYWRhcHRlci0+cG9ydFtpXSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYwppbmRleCAyZDdmNjlhLi42MjBkODBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCkBAIC0xNTMsNiArMTUzLDE4IEBACiAJbXV0ZXhfdW5sb2NrKCZjeGdiM19kYl9sb2NrKTsKIH0KIAordm9pZCBjeGdiM19lcnJfbm90aWZ5KHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBzdGF0dXMsIHUzMiBlcnJvcikKK3sKKwlzdHJ1Y3QgY3hnYjNfY2xpZW50ICpjbGllbnQ7CisKKwltdXRleF9sb2NrKCZjeGdiM19kYl9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaWVudCwgJmNsaWVudF9saXN0LCBjbGllbnRfbGlzdCkgeworCQlpZiAoY2xpZW50LT5lcnJfaGFuZGxlcikKKwkJCWNsaWVudC0+ZXJyX2hhbmRsZXIodGRldiwgc3RhdHVzLCBlcnJvcik7CisJfQorCW11dGV4X3VubG9jaygmY3hnYjNfZGJfbG9jayk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZ2V0X2lmZl9mcm9tX21hYyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjLAogCQkJCQkgICB1bnNpZ25lZCBpbnQgdmxhbikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaAppbmRleCBkNTE0ZTUwLi5hOGU4ZTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oCkBAIC02NCwxMCArNjQsMTYgQEAKIHZvaWQgY3hnYjNfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGN4Z2IzX2NsaWVudCAqY2xpZW50KTsKIHZvaWQgY3hnYjNfYWRkX2NsaWVudHMoc3RydWN0IHQzY2RldiAqdGRldik7CiB2b2lkIGN4Z2IzX3JlbW92ZV9jbGllbnRzKHN0cnVjdCB0M2NkZXYgKnRkZXYpOwordm9pZCBjeGdiM19lcnJfbm90aWZ5KHN0cnVjdCB0M2NkZXYgKnRkZXYsIHUzMiBzdGF0dXMsIHUzMiBlcnJvcik7CiAKIHR5cGVkZWYgaW50ICgqY3hnYjNfY3BsX2hhbmRsZXJfZnVuYykoc3RydWN0IHQzY2RldiAqZGV2LAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmN0eCk7CiAKK2VudW0geworCU9GRkxPQURfU1RBVFVTX1VQLAorCU9GRkxPQURfU1RBVFVTX0RPV04KK307CisKIHN0cnVjdCBjeGdiM19jbGllbnQgewogCWNoYXIgKm5hbWU7CiAJdm9pZCAoKmFkZCkgKHN0cnVjdCB0M2NkZXYgKik7CkBAIC03Niw2ICs4Miw3IEBACiAJaW50ICgqcmVkaXJlY3QpKHZvaWQgKmN0eCwgc3RydWN0IGRzdF9lbnRyeSAqb2xkLAogCQkJc3RydWN0IGRzdF9lbnRyeSAqbmV3LCBzdHJ1Y3QgbDJ0X2VudHJ5ICpsMnQpOwogCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7CisJdm9pZCAoKmVycl9oYW5kbGVyKShzdHJ1Y3QgdDNjZGV2ICp0ZGV2LCB1MzIgc3RhdHVzLCB1MzIgZXJyb3IpOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaAppbmRleCBhMDM1ZDVjMi4uMWI1MzI3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaApAQCAtMTcwLDYgKzE3MCwxMCBAQAogCiAjZGVmaW5lIFNfUlNQUTBESVNBQkxFRCAgICA4CiAKKyNkZWZpbmUgU19GTDBFTVBUWSAgICAxNgorI2RlZmluZSBWX0ZMMEVNUFRZKHgpICgoeCkgPDwgU19GTDBFTVBUWSkKKyNkZWZpbmUgRl9GTDBFTVBUWSAgICBWX0ZMMEVNUFRZKDFVKQorCiAjZGVmaW5lIEFfU0dfRUdSX1JDUV9EUkJfVEhSU0ggMHg1NAogCiAjZGVmaW5lIFNfSElSQ1FEUkJUSFJTSCAgICAxNgpAQCAtMjU4LDYgKzI2MiwxMCBAQAogI2RlZmluZSBWX1JTUFFDUkVESVRPVkVSRk9XKHgpICgoeCkgPDwgU19SU1BRQ1JFRElUT1ZFUkZPVykKICNkZWZpbmUgRl9SU1BRQ1JFRElUT1ZFUkZPVyAgICBWX1JTUFFDUkVESVRPVkVSRk9XKDFVKQogCisjZGVmaW5lIFNfRkxFTVBUWSAgICAxCisjZGVmaW5lIFZfRkxFTVBUWSh4KSAoKHgpIDw8IFNfRkxFTVBUWSkKKyNkZWZpbmUgRl9GTEVNUFRZICAgIFZfRkxFTVBUWSgxVSkKKwogI2RlZmluZSBBX1NHX0lOVF9FTkFCTEUgMHg2MAogCiAjZGVmaW5lIEFfU0dfQ01EUV9DUkVESVRfVEggMHg2NApAQCAtMjIwNyw2ICsyMjE1LDE1IEBACiAKICNkZWZpbmUgQV9YR01fUlhfRVhBQ1RfTUFUQ0hfTE9XXzggMHg4NTQKIAorI2RlZmluZSBBX1hHTV9JTlRfU1RBVFVTIDB4ODZjCisKKyNkZWZpbmUgU19MSU5LRkFVTFRDSEFOR0UgICAgOQorI2RlZmluZSBWX0xJTktGQVVMVENIQU5HRSh4KSAoKHgpIDw8IFNfTElOS0ZBVUxUQ0hBTkdFKQorI2RlZmluZSBGX0xJTktGQVVMVENIQU5HRSAgICBWX0xJTktGQVVMVENIQU5HRSgxVSkKKworI2RlZmluZSBBX1hHTV9YR01fSU5UX0VOQUJMRSAweDg3NAorI2RlZmluZSBBX1hHTV9YR01fSU5UX0RJU0FCTEUgMHg4NzgKKwogI2RlZmluZSBBX1hHTV9TVEFUX0NUUkwgMHg4ODAKIAogI2RlZmluZSBTX0NMUlNUQVRTICAgIDIKQEAgLTI0MDUsNiArMjQyMiwxMCBAQAogI2RlZmluZSBWX1hBVUlQQ1NBTElHTkNIQU5HRSh4KSAoKHgpIDw8IFNfWEFVSVBDU0FMSUdOQ0hBTkdFKQogI2RlZmluZSBGX1hBVUlQQ1NBTElHTkNIQU5HRSAgICBWX1hBVUlQQ1NBTElHTkNIQU5HRSgxVSkKIAorI2RlZmluZSBTX1hHTV9JTlQgICAgMAorI2RlZmluZSBWX1hHTV9JTlQoeCkgKCh4KSA8PCBTX1hHTV9JTlQpCisjZGVmaW5lIEZfWEdNX0lOVCAgICBWX1hHTV9JTlQoMVUpCisKICNkZWZpbmUgQV9YR01fSU5UX0NBVVNFIDB4OGQ4CiAKICNkZWZpbmUgQV9YR01fWEFVSV9BQ1RfQ1RSTCAweDhkYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvc2dlLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwppbmRleCBkMzE3OTFmLi4yNmQzNTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYwpAQCAtNTAsNiArNTAsNyBAQAogI2RlZmluZSBTR0VfUlhfQ09QWV9USFJFUyAgMjU2CiAjZGVmaW5lIFNHRV9SWF9QVUxMX0xFTiAgICAxMjgKIAorI2RlZmluZSBTR0VfUEdfUlNWRCBTTVBfQ0FDSEVfQllURVMKIC8qCiAgKiBQYWdlIGNodW5rIHNpemUgZm9yIEZMMCBidWZmZXJzIGlmIEZMMCBpcyB0byBiZSBwb3B1bGF0ZWQgd2l0aCBwYWdlIGNodW5rcy4KICAqIEl0IG11c3QgYmUgYSBkaXZpc29yIG9mIFBBR0VfU0laRS4gIElmIHNldCB0byAwIEZMMCB3aWxsIHVzZSBza19idWZmcwpAQCAtNTcsMTYgKzU4LDI1IEBACiAgKi8KICNkZWZpbmUgRkwwX1BHX0NIVU5LX1NJWkUgIDIwNDgKICNkZWZpbmUgRkwwX1BHX09SREVSIDAKKyNkZWZpbmUgRkwwX1BHX0FMTE9DX1NJWkUgKFBBR0VfU0laRSA8PCBGTDBfUEdfT1JERVIpCiAjZGVmaW5lIEZMMV9QR19DSFVOS19TSVpFIChQQUdFX1NJWkUgPiA4MTkyID8gMTYzODQgOiA4MTkyKQogI2RlZmluZSBGTDFfUEdfT1JERVIgKFBBR0VfU0laRSA+IDgxOTIgPyAwIDogMSkKKyNkZWZpbmUgRkwxX1BHX0FMTE9DX1NJWkUgKFBBR0VfU0laRSA8PCBGTDFfUEdfT1JERVIpCiAKICNkZWZpbmUgU0dFX1JYX0RST1BfVEhSRVMgMTYKKyNkZWZpbmUgUlhfUkVDTEFJTV9QRVJJT0QgKEhaLzQpCiAKIC8qCisgKiBNYXggbnVtYmVyIG9mIFJ4IGJ1ZmZlcnMgd2UgcmVwbGVuaXNoIGF0IGEgdGltZS4KKyAqLworI2RlZmluZSBNQVhfUlhfUkVGSUxMIDE2VQorLyoKICAqIFBlcmlvZCBvZiB0aGUgVHggYnVmZmVyIHJlY2xhaW0gdGltZXIuICBUaGlzIHRpbWVyIGRvZXMgbm90IG5lZWQgdG8gcnVuCiAgKiBmcmVxdWVudGx5IGFzIFR4IGJ1ZmZlcnMgYXJlIHVzdWFsbHkgcmVjbGFpbWVkIGJ5IG5ldyBUeCBwYWNrZXRzLgogICovCiAjZGVmaW5lIFRYX1JFQ0xBSU1fUEVSSU9EIChIWiAvIDQpCisjZGVmaW5lIFRYX1JFQ0xBSU1fVElNRVJfQ0hVTksgNjRVCisjZGVmaW5lIFRYX1JFQ0xBSU1fQ0hVTksgMTZVCiAKIC8qIFdSIHNpemUgaW4gYnl0ZXMgKi8KICNkZWZpbmUgV1JfTEVOIChXUl9GTElUUyAqIDgpCkBAIC0zMDQsMjEgKzMxNCwyNSBAQAogICoJcmVjbGFpbV9jb21wbGV0ZWRfdHggLSByZWNsYWltcyBjb21wbGV0ZWQgVHggZGVzY3JpcHRvcnMKICAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgogICoJQHE6IHRoZSBUeCBxdWV1ZSB0byByZWNsYWltIGNvbXBsZXRlZCBkZXNjcmlwdG9ycyBmcm9tCisgKglAY2h1bms6IG1heGltdW0gbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHRvIHJlY2xhaW0KICAqCiAgKglSZWNsYWltcyBUeCBkZXNjcmlwdG9ycyB0aGF0IHRoZSBTR0UgaGFzIGluZGljYXRlZCBpdCBoYXMgcHJvY2Vzc2VkLAogICoJYW5kIGZyZWVzIHRoZSBhc3NvY2lhdGVkIGJ1ZmZlcnMgaWYgcG9zc2libGUuICBDYWxsZWQgd2l0aCB0aGUgVHgKICAqCXF1ZXVlJ3MgbG9jayBoZWxkLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVjbGFpbV9jb21wbGV0ZWRfdHgoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJCXN0cnVjdCBzZ2VfdHhxICpxKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVjbGFpbV9jb21wbGV0ZWRfdHgoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCQlzdHJ1Y3Qgc2dlX3R4cSAqcSwKKwkJCQkJCXVuc2lnbmVkIGludCBjaHVuaykKIHsKIAl1bnNpZ25lZCBpbnQgcmVjbGFpbSA9IHEtPnByb2Nlc3NlZCAtIHEtPmNsZWFuZWQ7CiAKKwlyZWNsYWltID0gbWluKGNodW5rLCByZWNsYWltKTsKIAlpZiAocmVjbGFpbSkgewogCQlmcmVlX3R4X2Rlc2MoYWRhcHRlciwgcSwgcmVjbGFpbSk7CiAJCXEtPmNsZWFuZWQgKz0gcmVjbGFpbTsKIAkJcS0+aW5fdXNlIC09IHJlY2xhaW07CiAJfQorCXJldHVybiBxLT5wcm9jZXNzZWQgLSBxLT5jbGVhbmVkOwogfQogCiAvKioKQEAgLTMzNCw2ICszNDgsMjYgQEAKIAlyZXR1cm4gcS0+aW5fdXNlIC0gciA8IChxLT5zaXplID4+IDEpOwogfQogCitzdGF0aWMgdm9pZCBjbGVhcl9yeF9kZXNjKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3Qgc2dlX2ZsICpxLAorCQkJICBzdHJ1Y3Qgcnhfc3dfZGVzYyAqZCkKK3sKKwlpZiAocS0+dXNlX3BhZ2VzICYmIGQtPnBnX2NodW5rLnBhZ2UpIHsKKwkJKCpkLT5wZ19jaHVuay5wX2NudCktLTsKKwkJaWYgKCEqZC0+cGdfY2h1bmsucF9jbnQpCisJCQlwY2lfdW5tYXBfcGFnZShwZGV2LAorCQkJCSAgICAgICBwY2lfdW5tYXBfYWRkcigmZC0+cGdfY2h1bmssIG1hcHBpbmcpLAorCQkJCSAgICAgICBxLT5hbGxvY19zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCXB1dF9wYWdlKGQtPnBnX2NodW5rLnBhZ2UpOworCQlkLT5wZ19jaHVuay5wYWdlID0gTlVMTDsKKwl9IGVsc2UgeworCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHBjaV91bm1hcF9hZGRyKGQsIGRtYV9hZGRyKSwKKwkJCQkgcS0+YnVmX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCWtmcmVlX3NrYihkLT5za2IpOworCQlkLT5za2IgPSBOVUxMOworCX0KK30KKwogLyoqCiAgKglmcmVlX3J4X2J1ZnMgLSBmcmVlIHRoZSBSeCBidWZmZXJzIG9uIGFuIFNHRSBmcmVlIGxpc3QKICAqCUBwZGV2OiB0aGUgUENJIGRldmljZSBhc3NvY2lhdGVkIHdpdGggdGhlIGFkYXB0ZXIKQEAgLTM0OSwxNiArMzgzLDggQEAKIAl3aGlsZSAocS0+Y3JlZGl0cy0tKSB7CiAJCXN0cnVjdCByeF9zd19kZXNjICpkID0gJnEtPnNkZXNjW2NpZHhdOwogCi0JCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcGNpX3VubWFwX2FkZHIoZCwgZG1hX2FkZHIpLAotCQkJCSBxLT5idWZfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJaWYgKHEtPnVzZV9wYWdlcykgewotCQkJaWYgKGQtPnBnX2NodW5rLnBhZ2UpCi0JCQkJcHV0X3BhZ2UoZC0+cGdfY2h1bmsucGFnZSk7Ci0JCQlkLT5wZ19jaHVuay5wYWdlID0gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCWtmcmVlX3NrYihkLT5za2IpOwotCQkJZC0+c2tiID0gTlVMTDsKLQkJfQorCisJCWNsZWFyX3J4X2Rlc2MocGRldiwgcSwgZCk7CiAJCWlmICgrK2NpZHggPT0gcS0+c2l6ZSkKIAkJCWNpZHggPSAwOwogCX0KQEAgLTQwMSwxOCArNDI3LDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWxsb2NfcGdfY2h1bmsoc3RydWN0IHNnZV9mbCAqcSwgc3RydWN0IHJ4X3N3X2Rlc2MgKnNkLCBnZnBfdCBnZnAsCitzdGF0aWMgaW5saW5lIGludCBhZGRfb25lX3J4X2NodW5rKGRtYV9hZGRyX3QgbWFwcGluZywgc3RydWN0IHJ4X2Rlc2MgKmQsCisJCQkJICAgdW5zaWduZWQgaW50IGdlbikKK3sKKwlkLT5hZGRyX2xvID0gY3B1X3RvX2JlMzIobWFwcGluZyk7CisJZC0+YWRkcl9oaSA9IGNwdV90b19iZTMyKCh1NjQpIG1hcHBpbmcgPj4gMzIpOworCXdtYigpOworCWQtPmxlbl9nZW4gPSBjcHVfdG9fYmUzMihWX0ZMRF9HRU4xKGdlbikpOworCWQtPmdlbjIgPSBjcHVfdG9fYmUzMihWX0ZMRF9HRU4yKGdlbikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX3BnX2NodW5rKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2dlX2ZsICpxLAorCQkJICBzdHJ1Y3Qgcnhfc3dfZGVzYyAqc2QsIGdmcF90IGdmcCwKIAkJCSAgdW5zaWduZWQgaW50IG9yZGVyKQogewogCWlmICghcS0+cGdfY2h1bmsucGFnZSkgeworCQlkbWFfYWRkcl90IG1hcHBpbmc7CisKIAkJcS0+cGdfY2h1bmsucGFnZSA9IGFsbG9jX3BhZ2VzKGdmcCwgb3JkZXIpOwogCQlpZiAodW5saWtlbHkoIXEtPnBnX2NodW5rLnBhZ2UpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXEtPnBnX2NodW5rLnZhID0gcGFnZV9hZGRyZXNzKHEtPnBnX2NodW5rLnBhZ2UpOworCQlxLT5wZ19jaHVuay5wX2NudCA9IHEtPnBnX2NodW5rLnZhICsgKFBBR0VfU0laRSA8PCBvcmRlcikgLQorCQkJCSAgICBTR0VfUEdfUlNWRDsKIAkJcS0+cGdfY2h1bmsub2Zmc2V0ID0gMDsKKwkJbWFwcGluZyA9IHBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCBxLT5wZ19jaHVuay5wYWdlLAorCQkJCSAgICAgICAwLCBxLT5hbGxvY19zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlwY2lfdW5tYXBfYWRkcl9zZXQoJnEtPnBnX2NodW5rLCBtYXBwaW5nLCBtYXBwaW5nKTsKIAl9CiAJc2QtPnBnX2NodW5rID0gcS0+cGdfY2h1bms7CiAKKwlwcmVmZXRjaChzZC0+cGdfY2h1bmsucF9jbnQpOworCiAJcS0+cGdfY2h1bmsub2Zmc2V0ICs9IHEtPmJ1Zl9zaXplOwogCWlmIChxLT5wZ19jaHVuay5vZmZzZXQgPT0gKFBBR0VfU0laRSA8PCBvcmRlcikpCiAJCXEtPnBnX2NodW5rLnBhZ2UgPSBOVUxMOwpAQCAtNDIwLDkgKzQ2NywyMyBAQAogCQlxLT5wZ19jaHVuay52YSArPSBxLT5idWZfc2l6ZTsKIAkJZ2V0X3BhZ2UocS0+cGdfY2h1bmsucGFnZSk7CiAJfQorCisJaWYgKHNkLT5wZ19jaHVuay5vZmZzZXQgPT0gMCkKKwkJKnNkLT5wZ19jaHVuay5wX2NudCA9IDE7CisJZWxzZQorCQkqc2QtPnBnX2NodW5rLnBfY250ICs9IDE7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHJpbmdfZmxfZGIoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBzZ2VfZmwgKnEpCit7CisJaWYgKHEtPnBlbmRfY3JlZCA+PSBxLT5jcmVkaXRzIC8gNCkgeworCQlxLT5wZW5kX2NyZWQgPSAwOworCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19LRE9PUkJFTEwsIFZfRUdSQ05UWChxLT5jbnR4dF9pZCkpOworCX0KK30KKwogLyoqCiAgKglyZWZpbGxfZmwgLSByZWZpbGwgYW4gU0dFIGZyZWUtYnVmZmVyIGxpc3QKICAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgpAQCAtNDM2LDM4ICs0OTcsNDMgQEAKICAqLwogc3RhdGljIGludCByZWZpbGxfZmwoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHN0cnVjdCBzZ2VfZmwgKnEsIGludCBuLCBnZnBfdCBnZnApCiB7Ci0Jdm9pZCAqYnVmX3N0YXJ0OwogCXN0cnVjdCByeF9zd19kZXNjICpzZCA9ICZxLT5zZGVzY1txLT5waWR4XTsKIAlzdHJ1Y3QgcnhfZGVzYyAqZCA9ICZxLT5kZXNjW3EtPnBpZHhdOwogCXVuc2lnbmVkIGludCBjb3VudCA9IDA7CiAKIAl3aGlsZSAobi0tKSB7CisJCWRtYV9hZGRyX3QgbWFwcGluZzsKIAkJaW50IGVycjsKIAogCQlpZiAocS0+dXNlX3BhZ2VzKSB7Ci0JCQlpZiAodW5saWtlbHkoYWxsb2NfcGdfY2h1bmsocSwgc2QsIGdmcCwgcS0+b3JkZXIpKSkgeworCQkJaWYgKHVubGlrZWx5KGFsbG9jX3BnX2NodW5rKGFkYXAsIHEsIHNkLCBnZnAsCisJCQkJCQkgICAgcS0+b3JkZXIpKSkgewogbm9tZW06CQkJCXEtPmFsbG9jX2ZhaWxlZCsrOwogCQkJCWJyZWFrOwogCQkJfQotCQkJYnVmX3N0YXJ0ID0gc2QtPnBnX2NodW5rLnZhOwotCQl9IGVsc2UgewotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihxLT5idWZfc2l6ZSwgZ2ZwKTsKKwkJCW1hcHBpbmcgPSBwY2lfdW5tYXBfYWRkcigmc2QtPnBnX2NodW5rLCBtYXBwaW5nKSArCisJCQkJCQkgc2QtPnBnX2NodW5rLm9mZnNldDsKKwkJCXBjaV91bm1hcF9hZGRyX3NldChzZCwgZG1hX2FkZHIsIG1hcHBpbmcpOwogCisJCQlhZGRfb25lX3J4X2NodW5rKG1hcHBpbmcsIGQsIHEtPmdlbik7CisJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoYWRhcC0+cGRldiwgbWFwcGluZywKKwkJCQkJCXEtPmJ1Zl9zaXplIC0gU0dFX1BHX1JTVkQsCisJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQl9IGVsc2UgeworCQkJdm9pZCAqYnVmX3N0YXJ0OworCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKHEtPmJ1Zl9zaXplLCBnZnApOwogCQkJaWYgKCFza2IpCiAJCQkJZ290byBub21lbTsKIAogCQkJc2QtPnNrYiA9IHNrYjsKIAkJCWJ1Zl9zdGFydCA9IHNrYi0+ZGF0YTsKLQkJfQotCi0JCWVyciA9IGFkZF9vbmVfcnhfYnVmKGJ1Zl9zdGFydCwgcS0+YnVmX3NpemUsIGQsIHNkLCBxLT5nZW4sCi0JCQkJICAgICBhZGFwLT5wZGV2KTsKLQkJaWYgKHVubGlrZWx5KGVycikpIHsKLQkJCWlmICghcS0+dXNlX3BhZ2VzKSB7Ci0JCQkJa2ZyZWVfc2tiKHNkLT5za2IpOwotCQkJCXNkLT5za2IgPSBOVUxMOworCQkJZXJyID0gYWRkX29uZV9yeF9idWYoYnVmX3N0YXJ0LCBxLT5idWZfc2l6ZSwgZCwgc2QsCisJCQkJCSAgICAgcS0+Z2VuLCBhZGFwLT5wZGV2KTsKKwkJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQkJY2xlYXJfcnhfZGVzYyhhZGFwLT5wZGV2LCBxLCBzZCk7CisJCQkJYnJlYWs7CiAJCQl9Ci0JCQlicmVhazsKIAkJfQogCiAJCWQrKzsKQEAgLTQ3OCwxOSArNTQ0LDE5IEBACiAJCQlzZCA9IHEtPnNkZXNjOwogCQkJZCA9IHEtPmRlc2M7CiAJCX0KLQkJcS0+Y3JlZGl0cysrOwogCQljb3VudCsrOwogCX0KLQl3bWIoKTsKLQlpZiAobGlrZWx5KGNvdW50KSkKLQkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfS0RPT1JCRUxMLCBWX0VHUkNOVFgocS0+Y250eHRfaWQpKTsKKworCXEtPmNyZWRpdHMgKz0gY291bnQ7CisJcS0+cGVuZF9jcmVkICs9IGNvdW50OworCXJpbmdfZmxfZGIoYWRhcCwgcSk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlZmlsbF9mbChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgc3RydWN0IHNnZV9mbCAqZmwpCiB7Ci0JcmVmaWxsX2ZsKGFkYXAsIGZsLCBtaW4oMTZVLCBmbC0+c2l6ZSAtIGZsLT5jcmVkaXRzKSwKKwlyZWZpbGxfZmwoYWRhcCwgZmwsIG1pbihNQVhfUlhfUkVGSUxMLCBmbC0+c2l6ZSAtIGZsLT5jcmVkaXRzKSwKIAkJICBHRlBfQVRPTUlDIHwgX19HRlBfQ09NUCk7CiB9CiAKQEAgLTUxNSwxMyArNTgxLDE1IEBACiAJd21iKCk7CiAJdG8tPmxlbl9nZW4gPSBjcHVfdG9fYmUzMihWX0ZMRF9HRU4xKHEtPmdlbikpOwogCXRvLT5nZW4yID0gY3B1X3RvX2JlMzIoVl9GTERfR0VOMihxLT5nZW4pKTsKLQlxLT5jcmVkaXRzKys7CiAKIAlpZiAoKytxLT5waWR4ID09IHEtPnNpemUpIHsKIAkJcS0+cGlkeCA9IDA7CiAJCXEtPmdlbiBePSAxOwogCX0KLQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19LRE9PUkJFTEwsIFZfRUdSQ05UWChxLT5jbnR4dF9pZCkpOworCisJcS0+Y3JlZGl0cysrOworCXEtPnBlbmRfY3JlZCsrOworCXJpbmdfZmxfZGIoYWRhcCwgcSk7CiB9CiAKIC8qKgpAQCAtNTg1LDggKzY1Myw4IEBACiAJbWVtc2V0KHEtPnR4cSwgMCwgc2l6ZW9mKHN0cnVjdCBzZ2VfdHhxKSAqIFNHRV9UWFFfUEVSX1NFVCk7CiAJcS0+dHhxX3N0b3BwZWQgPSAwOwogCXEtPnR4X3JlY2xhaW1fdGltZXIuZnVuY3Rpb24gPSBOVUxMOyAvKiBmb3IgdDNfc3RvcF9zZ2VfdGltZXJzKCkgKi8KLQlrZnJlZShxLT5scm9fZnJhZ190YmwpOwotCXEtPmxyb19uZnJhZ3MgPSBxLT5scm9fZnJhZ19sZW4gPSAwOworCXEtPnJ4X3JlY2xhaW1fdGltZXIuZnVuY3Rpb24gPSBOVUxMOworCXEtPmxyb19mcmFnX3RibC5ucl9mcmFncyA9IHEtPmxyb19mcmFnX3RibC5sZW4gPSAwOwogfQogCiAKQEAgLTczMyw3ICs4MDEsOSBAQAogCQlyZXR1cm4gc2tiOwogCX0KIAotCWlmICh1bmxpa2VseShmbC0+Y3JlZGl0cyA8IGRyb3BfdGhyZXMpKQorCWlmICh1bmxpa2VseShmbC0+Y3JlZGl0cyA8IGRyb3BfdGhyZXMpICYmCisJICAgIHJlZmlsbF9mbChhZGFwLCBmbCwgbWluKE1BWF9SWF9SRUZJTEwsIGZsLT5zaXplIC0gZmwtPmNyZWRpdHMgLSAxKSwKKwkJICAgICAgR0ZQX0FUT01JQyB8IF9fR0ZQX0NPTVApID09IDApCiAJCWdvdG8gcmVjeWNsZTsKIAogdXNlX29yaWdfYnVmOgpAQCAtNzcwLDE5ICs4NDAsMTkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiLCAqc2tiOwogCXN0cnVjdCByeF9zd19kZXNjICpzZCA9ICZmbC0+c2Rlc2NbZmwtPmNpZHhdOwogCi0JbmV3c2tiID0gc2tiID0gcS0+cGdfc2tiOworCWRtYV9hZGRyX3QgZG1hX2FkZHIgPSBwY2lfdW5tYXBfYWRkcihzZCwgZG1hX2FkZHIpOwogCisJbmV3c2tiID0gc2tiID0gcS0+cGdfc2tiOwogCWlmICghc2tiICYmIChsZW4gPD0gU0dFX1JYX0NPUFlfVEhSRVMpKSB7CiAJCW5ld3NrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9BVE9NSUMpOwogCQlpZiAobGlrZWx5KG5ld3NrYiAhPSBOVUxMKSkgewogCQkJX19za2JfcHV0KG5ld3NrYiwgbGVuKTsKLQkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShhZGFwLT5wZGV2LAotCQkJCQkgICAgcGNpX3VubWFwX2FkZHIoc2QsIGRtYV9hZGRyKSwgbGVuLAorCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGFkYXAtPnBkZXYsIGRtYV9hZGRyLCBsZW4sCiAJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJbWVtY3B5KG5ld3NrYi0+ZGF0YSwgc2QtPnBnX2NodW5rLnZhLCBsZW4pOwotCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGFkYXAtPnBkZXYsCi0JCQkJCSAgICBwY2lfdW5tYXBfYWRkcihzZCwgZG1hX2FkZHIpLCBsZW4sCi0JCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGFkYXAtPnBkZXYsIGRtYV9hZGRyLAorCQkJCQkJICAgICAgIGxlbiwKKwkJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQl9IGVsc2UgaWYgKCFkcm9wX3RocmVzKQogCQkJcmV0dXJuIE5VTEw7CiByZWN5Y2xlOgpAQCAtNzk1LDE2ICs4NjUsMjUgQEAKIAlpZiAodW5saWtlbHkocS0+cnhfcmVjeWNsZV9idWYgfHwgKCFza2IgJiYgZmwtPmNyZWRpdHMgPD0gZHJvcF90aHJlcykpKQogCQlnb3RvIHJlY3ljbGU7CiAKKwlwcmVmZXRjaChzZC0+cGdfY2h1bmsucF9jbnQpOworCiAJaWYgKCFza2IpCiAJCW5ld3NrYiA9IGFsbG9jX3NrYihTR0VfUlhfUFVMTF9MRU4sIEdGUF9BVE9NSUMpOworCiAJaWYgKHVubGlrZWx5KCFuZXdza2IpKSB7CiAJCWlmICghZHJvcF90aHJlcykKIAkJCXJldHVybiBOVUxMOwogCQlnb3RvIHJlY3ljbGU7CiAJfQogCi0JcGNpX3VubWFwX3NpbmdsZShhZGFwLT5wZGV2LCBwY2lfdW5tYXBfYWRkcihzZCwgZG1hX2FkZHIpLAotCQkJIGZsLT5idWZfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYWRhcC0+cGRldiwgZG1hX2FkZHIsIGxlbiwKKwkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkoKnNkLT5wZ19jaHVuay5wX2NudCktLTsKKwlpZiAoISpzZC0+cGdfY2h1bmsucF9jbnQpCisJCXBjaV91bm1hcF9wYWdlKGFkYXAtPnBkZXYsCisJCQkgICAgICAgcGNpX3VubWFwX2FkZHIoJnNkLT5wZ19jaHVuaywgbWFwcGluZyksCisJCQkgICAgICAgZmwtPmFsbG9jX3NpemUsCisJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAlpZiAoIXNrYikgewogCQlfX3NrYl9wdXQobmV3c2tiLCBTR0VfUlhfUFVMTF9MRU4pOwogCQltZW1jcHkobmV3c2tiLT5kYXRhLCBzZC0+cGdfY2h1bmsudmEsIFNHRV9SWF9QVUxMX0xFTik7CkBAIC04MTMsMTQgKzg5MiwxNSBAQAogCQkJCSAgIGxlbiAtIFNHRV9SWF9QVUxMX0xFTik7CiAJCW5ld3NrYi0+bGVuID0gbGVuOwogCQluZXdza2ItPmRhdGFfbGVuID0gbGVuIC0gU0dFX1JYX1BVTExfTEVOOworCQluZXdza2ItPnRydWVzaXplICs9IG5ld3NrYi0+ZGF0YV9sZW47CiAJfSBlbHNlIHsKIAkJc2tiX2ZpbGxfcGFnZV9kZXNjKG5ld3NrYiwgc2tiX3NoaW5mbyhuZXdza2IpLT5ucl9mcmFncywKIAkJCQkgICBzZC0+cGdfY2h1bmsucGFnZSwKIAkJCQkgICBzZC0+cGdfY2h1bmsub2Zmc2V0LCBsZW4pOwogCQluZXdza2ItPmxlbiArPSBsZW47CiAJCW5ld3NrYi0+ZGF0YV9sZW4gKz0gbGVuOworCQluZXdza2ItPnRydWVzaXplICs9IGxlbjsKIAl9Ci0JbmV3c2tiLT50cnVlc2l6ZSArPSBuZXdza2ItPmRhdGFfbGVuOwogCiAJZmwtPmNyZWRpdHMtLTsKIAkvKgpAQCAtMTA2Myw3ICsxMTQzLDcgQEAKIAlzdHJ1Y3QgdHhfZGVzYyAqZCA9ICZxLT5kZXNjW3BpZHhdOwogCXN0cnVjdCBjcGxfdHhfcGt0ICpjcGwgPSAoc3RydWN0IGNwbF90eF9wa3QgKilkOwogCi0JY3BsLT5sZW4gPSBodG9ubChza2ItPmxlbiB8IDB4ODAwMDAwMDApOworCWNwbC0+bGVuID0gaHRvbmwoc2tiLT5sZW4pOwogCWNudHJsID0gVl9UWFBLVF9JTlRGKHBpLT5wb3J0X2lkKTsKIAogCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikgJiYgcGktPnZsYW5fZ3JwKQpAQCAtMTE2MSw3ICsxMjQxLDcgQEAKIAl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgcWlkeCk7CiAKIAlzcGluX2xvY2soJnEtPmxvY2spOwotCXJlY2xhaW1fY29tcGxldGVkX3R4KGFkYXAsIHEpOworCXJlY2xhaW1fY29tcGxldGVkX3R4KGFkYXAsIHEsIFRYX1JFQ0xBSU1fQ0hVTkspOwogCiAJY3JlZGl0cyA9IHEtPnNpemUgLSBxLT5pbl91c2U7CiAJbmRlc2MgPSBjYWxjX3R4X2Rlc2NzKHNrYik7CkBAIC0xNTcwLDcgKzE2NTAsNyBAQAogCXVuc2lnbmVkIGludCBuZGVzYyA9IGNhbGNfdHhfZGVzY3Nfb2ZsZChza2IpLCBwaWR4LCBnZW47CiAKIAlzcGluX2xvY2soJnEtPmxvY2spOwotICAgICAgYWdhaW46cmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSk7CithZ2FpbjoJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgcSwgVFhfUkVDTEFJTV9DSFVOSyk7CiAKIAlyZXQgPSBjaGVja19kZXNjX2F2YWlsKGFkYXAsIHEsIHNrYiwgbmRlc2MsIFRYUV9PRkxEKTsKIAlpZiAodW5saWtlbHkocmV0KSkgewpAQCAtMTYxMiw3ICsxNjkyLDcgQEAKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHBpLT5hZGFwdGVyOwogCiAJc3Bpbl9sb2NrKCZxLT5sb2NrKTsKLSAgICAgIGFnYWluOnJlY2xhaW1fY29tcGxldGVkX3R4KGFkYXAsIHEpOworYWdhaW46CXJlY2xhaW1fY29tcGxldGVkX3R4KGFkYXAsIHEsIFRYX1JFQ0xBSU1fQ0hVTkspOwogCiAJd2hpbGUgKChza2IgPSBza2JfcGVlaygmcS0+c2VuZHEpKSAhPSBOVUxMKSB7CiAJCXVuc2lnbmVkIGludCBnZW4sIHBpZHg7CkBAIC0xOTMyLDEyICsyMDEyLDEzIEBACiAJc2tiX3B1bGwoc2tiLCBzaXplb2YoKnApICsgcGFkKTsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBhZGFwLT5wb3J0W3AtPmlmZl0pOwogCXBpID0gbmV0ZGV2X3ByaXYoc2tiLT5kZXYpOwotCWlmICgocGktPnJ4X29mZmxvYWQgJiBUM19SWF9DU1VNKSAmJiBwLT5jc3VtX3ZhbGlkICYmIHAtPmNzdW0gPT0gaHRvbnMoMHhmZmZmKSAmJgotCSAgICAhcC0+ZnJhZ21lbnQpIHsKKwlpZiAoKHBpLT5yeF9vZmZsb2FkICYgVDNfUlhfQ1NVTSkgJiYgcC0+Y3N1bV92YWxpZCAmJgorCSAgICBwLT5jc3VtID09IGh0b25zKDB4ZmZmZikgJiYgIXAtPmZyYWdtZW50KSB7CiAJCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9SWF9DU1VNX0dPT0RdKys7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJfSBlbHNlCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcXMgLSAmYWRhcC0+c2dlLnFzWzBdKTsKIAogCWlmICh1bmxpa2VseShwLT52bGFuX3ZhbGlkKSkgewogCQlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwID0gcGktPnZsYW5fZ3JwOwpAQCAtMTk0NSwxMCArMjAyNiw4IEBACiAJCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9WTEFORVhdKys7CiAJCWlmIChsaWtlbHkoZ3JwKSkKIAkJCWlmIChscm8pCi0JCQkJbHJvX3ZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYigmcXMtPmxyb19tZ3IsIHNrYiwKLQkJCQkJCQkgICAgIGdycCwKLQkJCQkJCQkgICAgIG50b2hzKHAtPnZsYW4pLAotCQkJCQkJCSAgICAgcCk7CisJCQkJdmxhbl9ncm9fcmVjZWl2ZSgmcXMtPm5hcGksIGdycCwKKwkJCQkJCSBudG9ocyhwLT52bGFuKSwgc2tiKTsKIAkJCWVsc2UgewogCQkJCWlmICh1bmxpa2VseShwaS0+aXNjc2lfaXB2NGFkZHIgJiYKIAkJCQkgICAgaXNfYXJwKHNrYikpKSB7CkBAIC0xOTY1LDcgKzIwNDQsNyBAQAogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9IGVsc2UgaWYgKHJxLT5wb2xsaW5nKSB7CiAJCWlmIChscm8pCi0JCQlscm9fcmVjZWl2ZV9za2IoJnFzLT5scm9fbWdyLCBza2IsIHApOworCQkJbmFwaV9ncm9fcmVjZWl2ZSgmcXMtPm5hcGksIHNrYik7CiAJCWVsc2UgewogCQkJaWYgKHVubGlrZWx5KHBpLT5pc2NzaV9pcHY0YWRkciAmJiBpc19hcnAoc2tiKSkpCiAJCQkJY3hnYjNfYXJwX3Byb2Nlc3MoYWRhcCwgc2tiKTsKQEAgLTE5ODEsNTkgKzIwNjAsNiBAQAogfQogCiAvKioKLSAqCWxyb19mcmFtZV9vayAtIGNoZWNrIGlmIGFuIGluZ3Jlc3MgcGFja2V0IGlzIGVsaWdpYmxlIGZvciBMUk8KLSAqCUBwOiB0aGUgQ1BMIGhlYWRlciBvZiB0aGUgcGFja2V0Ci0gKgotICoJUmV0dXJucyB0cnVlIGlmIGEgcmVjZWl2ZWQgcGFja2V0IGlzIGVsaWdpYmxlIGZvciBMUk8uCi0gKglUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgbXVzdCBiZSB0cnVlOgotICoJLSBwYWNrZXQgaXMgVENQL0lQIEV0aGVybmV0IElJIChjaGVja2VkIGVsc2V3aGVyZSkKLSAqCS0gbm90IGFuIElQIGZyYWdtZW50Ci0gKgktIG5vIElQIG9wdGlvbnMKLSAqCS0gVENQL0lQIGNoZWNrc3VtcyBhcmUgY29ycmVjdAotICoJLSB0aGUgcGFja2V0IGlzIGZvciB0aGlzIGhvc3QKLSAqLwotc3RhdGljIGlubGluZSBpbnQgbHJvX2ZyYW1lX29rKGNvbnN0IHN0cnVjdCBjcGxfcnhfcGt0ICpwKQotewotCWNvbnN0IHN0cnVjdCBldGhoZHIgKmVoID0gKHN0cnVjdCBldGhoZHIgKikocCArIDEpOwotCWNvbnN0IHN0cnVjdCBpcGhkciAqaWggPSAoc3RydWN0IGlwaGRyICopKGVoICsgMSk7Ci0KLQlyZXR1cm4gKCooKHU4ICopcCArIDEpICYgMHg5MCkgPT0gMHgxMCAmJiBwLT5jc3VtID09IGh0b25zKDB4ZmZmZikgJiYKLQkJZWgtPmhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfSVApICYmIGloLT5paGwgPT0gKHNpemVvZigqaWgpID4+IDIpOwotfQotCi1zdGF0aWMgaW50IHQzX2dldF9scm9faGVhZGVyKHZvaWQgKiplaCwgIHZvaWQgKippcGgsIHZvaWQgKip0Y3BoLAotCQkJICAgICB1NjQgKmhkcl9mbGFncywgdm9pZCAqcHJpdikKLXsKLQljb25zdCBzdHJ1Y3QgY3BsX3J4X3BrdCAqY3BsID0gcHJpdjsKLQotCWlmICghbHJvX2ZyYW1lX29rKGNwbCkpCi0JCXJldHVybiAtMTsKLQotCSplaCA9IChzdHJ1Y3QgZXRoaGRyICopKGNwbCArIDEpOwotCSppcGggPSAoc3RydWN0IGlwaGRyICopKChzdHJ1Y3QgZXRoaGRyICopKmVoICsgMSk7Ci0JKnRjcGggPSAoc3RydWN0IHRjcGhkciAqKSgoc3RydWN0IGlwaGRyICopKmlwaCArIDEpOwotCi0JKmhkcl9mbGFncyA9IExST19JUFY0IHwgTFJPX1RDUDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0M19nZXRfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgdm9pZCAqKmlwaCwgdm9pZCAqKnRjcGgsIHU2NCAqaGRyX2ZsYWdzLAotCQkJICAgICAgdm9pZCAqcHJpdikKLXsKLQl2b2lkICplaDsKLQotCXJldHVybiB0M19nZXRfbHJvX2hlYWRlcigmZWgsIGlwaCwgdGNwaCwgaGRyX2ZsYWdzLCBwcml2KTsKLX0KLQotc3RhdGljIGludCB0M19nZXRfZnJhZ19oZWFkZXIoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZywgdm9pZCAqKmVoLAotCQkJICAgICAgdm9pZCAqKmlwaCwgdm9pZCAqKnRjcGgsIHU2NCAqaGRyX2ZsYWdzLAotCQkJICAgICAgdm9pZCAqcHJpdikKLXsKLQlyZXR1cm4gdDNfZ2V0X2xyb19oZWFkZXIoZWgsIGlwaCwgdGNwaCwgaGRyX2ZsYWdzLCBwcml2KTsKLX0KLQotLyoqCiAgKglscm9fYWRkX3BhZ2UgLSBhZGQgYSBwYWdlIGNodW5rIHRvIGFuIExSTyBzZXNzaW9uCiAgKglAYWRhcDogdGhlIGFkYXB0ZXIKICAqCUBxczogdGhlIGFzc29jaWF0ZWQgcXVldWUgc2V0CkBAIC0yMDQ5LDggKzIwNzUsOSBAQAogewogCXN0cnVjdCByeF9zd19kZXNjICpzZCA9ICZmbC0+c2Rlc2NbZmwtPmNpZHhdOwogCXN0cnVjdCBjcGxfcnhfcGt0ICpjcGw7Ci0Jc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqcnhfZnJhZyA9IHFzLT5scm9fZnJhZ190Ymw7Ci0JaW50IG5yX2ZyYWdzID0gcXMtPmxyb19uZnJhZ3MsIGZyYWdfbGVuID0gcXMtPmxyb19mcmFnX2xlbjsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpyeF9mcmFnID0gcXMtPmxyb19mcmFnX3RibC5mcmFnczsKKwlpbnQgbnJfZnJhZ3MgPSBxcy0+bHJvX2ZyYWdfdGJsLm5yX2ZyYWdzOworCWludCBmcmFnX2xlbiA9IHFzLT5scm9fZnJhZ190YmwubGVuOwogCWludCBvZmZzZXQgPSAwOwogCiAJaWYgKCFucl9mcmFncykgewpAQCAtMjA2MSwyMSArMjA4OCwzMyBAQAogCWZsLT5jcmVkaXRzLS07CiAKIAlsZW4gLT0gb2Zmc2V0OwotCXBjaV91bm1hcF9zaW5nbGUoYWRhcC0+cGRldiwgcGNpX3VubWFwX2FkZHIoc2QsIGRtYV9hZGRyKSwKLQkJCSBmbC0+YnVmX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGFkYXAtPnBkZXYsCisJCQkJICAgIHBjaV91bm1hcF9hZGRyKHNkLCBkbWFfYWRkciksCisJCQkJICAgIGZsLT5idWZfc2l6ZSAtIFNHRV9QR19SU1ZELAorCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJKCpzZC0+cGdfY2h1bmsucF9jbnQpLS07CisJaWYgKCEqc2QtPnBnX2NodW5rLnBfY250KQorCQlwY2lfdW5tYXBfcGFnZShhZGFwLT5wZGV2LAorCQkJICAgICAgIHBjaV91bm1hcF9hZGRyKCZzZC0+cGdfY2h1bmssIG1hcHBpbmcpLAorCQkJICAgICAgIGZsLT5hbGxvY19zaXplLAorCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlwcmVmZXRjaChxcy0+bHJvX3ZhKTsKIAogCXJ4X2ZyYWcgKz0gbnJfZnJhZ3M7CiAJcnhfZnJhZy0+cGFnZSA9IHNkLT5wZ19jaHVuay5wYWdlOwogCXJ4X2ZyYWctPnBhZ2Vfb2Zmc2V0ID0gc2QtPnBnX2NodW5rLm9mZnNldCArIG9mZnNldDsKIAlyeF9mcmFnLT5zaXplID0gbGVuOwogCWZyYWdfbGVuICs9IGxlbjsKLQlxcy0+bHJvX25mcmFncysrOwotCXFzLT5scm9fZnJhZ19sZW4gPSBmcmFnX2xlbjsKKwlxcy0+bHJvX2ZyYWdfdGJsLm5yX2ZyYWdzKys7CisJcXMtPmxyb19mcmFnX3RibC5sZW4gPSBmcmFnX2xlbjsKKwogCiAJaWYgKCFjb21wbGV0ZSkKIAkJcmV0dXJuOwogCi0JcXMtPmxyb19uZnJhZ3MgPSBxcy0+bHJvX2ZyYWdfbGVuID0gMDsKKwlxcy0+bHJvX2ZyYWdfdGJsLmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCWNwbCA9IHFzLT5scm9fdmE7CiAKIAlpZiAodW5saWtlbHkoY3BsLT52bGFuX3ZhbGlkKSkgewpAQCAtMjA4NCwzNiArMjEyMywxNSBAQAogCQlzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwID0gcGktPnZsYW5fZ3JwOwogCiAJCWlmIChsaWtlbHkoZ3JwICE9IE5VTEwpKSB7Ci0JCQlscm9fdmxhbl9od2FjY2VsX3JlY2VpdmVfZnJhZ3MoJnFzLT5scm9fbWdyLAotCQkJCQkJICAgICAgIHFzLT5scm9fZnJhZ190YmwsCi0JCQkJCQkgICAgICAgZnJhZ19sZW4sIGZyYWdfbGVuLAotCQkJCQkJICAgICAgIGdycCwgbnRvaHMoY3BsLT52bGFuKSwKLQkJCQkJCSAgICAgICBjcGwsIDApOwotCQkJcmV0dXJuOworCQkJdmxhbl9ncm9fZnJhZ3MoJnFzLT5uYXBpLCBncnAsIG50b2hzKGNwbC0+dmxhbiksCisJCQkJICAgICAgICZxcy0+bHJvX2ZyYWdfdGJsKTsKKwkJCWdvdG8gb3V0OwogCQl9CiAJfQotCWxyb19yZWNlaXZlX2ZyYWdzKCZxcy0+bHJvX21nciwgcXMtPmxyb19mcmFnX3RibCwKLQkJCSAgZnJhZ19sZW4sIGZyYWdfbGVuLCBjcGwsIDApOwotfQorCW5hcGlfZ3JvX2ZyYWdzKCZxcy0+bmFwaSwgJnFzLT5scm9fZnJhZ190YmwpOwogCi0vKioKLSAqCWluaXRfbHJvX21nciAtIGluaXRpYWxpemUgYSBMUk8gbWFuYWdlciBvYmplY3QKLSAqCUBscm9fbWdyOiB0aGUgTFJPIG1hbmFnZXIgb2JqZWN0Ci0gKi8KLXN0YXRpYyB2b2lkIGluaXRfbHJvX21ncihzdHJ1Y3Qgc2dlX3FzZXQgKnFzLCBzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IpCi17Ci0JbHJvX21nci0+ZGV2ID0gcXMtPm5ldGRldjsKLQlscm9fbWdyLT5mZWF0dXJlcyA9IExST19GX05BUEk7Ci0JbHJvX21nci0+ZnJhZ19hbGlnbl9wYWQgPSBORVRfSVBfQUxJR047Ci0JbHJvX21nci0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JbHJvX21nci0+aXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQlscm9fbWdyLT5tYXhfZGVzYyA9IFQzX01BWF9MUk9fU0VTOwotCWxyb19tZ3ItPmxyb19hcnIgPSBxcy0+bHJvX2Rlc2M7Ci0JbHJvX21nci0+Z2V0X2ZyYWdfaGVhZGVyID0gdDNfZ2V0X2ZyYWdfaGVhZGVyOwotCWxyb19tZ3ItPmdldF9za2JfaGVhZGVyID0gdDNfZ2V0X3NrYl9oZWFkZXI7Ci0JbHJvX21nci0+bWF4X2FnZ3IgPSBUM19NQVhfTFJPX01BWF9QS1RTOwotCWlmIChscm9fbWdyLT5tYXhfYWdnciA+IE1BWF9TS0JfRlJBR1MpCi0JCWxyb19tZ3ItPm1heF9hZ2dyID0gTUFYX1NLQl9GUkFHUzsKK291dDoKKwlxcy0+bHJvX2ZyYWdfdGJsLm5yX2ZyYWdzID0gcXMtPmxyb19mcmFnX3RibC5sZW4gPSAwOwogfQogCiAvKioKQEAgLTIyODIsNiArMjMwMCw4IEBACiAJCQlpZiAoZmwtPnVzZV9wYWdlcykgewogCQkJCXZvaWQgKmFkZHIgPSBmbC0+c2Rlc2NbZmwtPmNpZHhdLnBnX2NodW5rLnZhOwogCisJCQkJcHJlZmV0Y2goJnFzLT5scm9fZnJhZ190YmwpOworCiAJCQkJcHJlZmV0Y2goYWRkcik7CiAjaWYgTDFfQ0FDSEVfQllURVMgPCAxMjgKIAkJCQlwcmVmZXRjaChhZGRyICsgTDFfQ0FDSEVfQllURVMpOwpAQCAtMjM1NiwxMCArMjM3Niw2IEBACiAJfQogCiAJZGVsaXZlcl9wYXJ0aWFsX2J1bmRsZSgmYWRhcC0+dGRldiwgcSwgb2ZmbG9hZF9za2JzLCBuZ2F0aGVyZWQpOwotCWxyb19mbHVzaF9hbGwoJnFzLT5scm9fbWdyKTsKLQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfTFJPX0FHR1JdID0gcXMtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKLQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfTFJPX0ZMVVNIRURdID0gcXMtPmxyb19tZ3Iuc3RhdHMuZmx1c2hlZDsKLQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfTFJPX05PX0RFU0NdID0gcXMtPmxyb19tZ3Iuc3RhdHMubm9fZGVzYzsKIAogCWlmIChzbGVlcGluZykKIAkJY2hlY2tfcmluZ19kYihhZGFwLCBxcywgc2xlZXBpbmcpOwpAQCAtMjc3NSw3ICsyNzkxLDggQEAKICAqLwogdm9pZCB0M19zZ2VfZXJyX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1bnNpZ25lZCBpbnQgdiwgc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9TR19JTlRfQ0FVU0UpOworCXVuc2lnbmVkIGludCB2LCBzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1NHX0lOVF9DQVVTRSkgJgorCQkJCSB+Rl9GTEVNUFRZOwogCiAJaWYgKHN0YXR1cyAmIFNHRV9QQVJFUlIpCiAJCUNIX0FMRVJUKGFkYXB0ZXIsICJTR0UgcGFyaXR5IGVycm9yICgweCV4KVxuIiwKQEAgLTI4MDUsMTMgKzI4MjIsMTMgQEAKIH0KIAogLyoqCi0gKglzZ2VfdGltZXJfY2IgLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CisgKglzZ2VfdGltZXJfdHggLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CiAgKglAZGF0YTogdGhlIFNHRSBxdWV1ZSBzZXQgdG8gbWFpbnRhaW4KICAqCiAgKglSdW5zIHBlcmlvZGljYWxseSBmcm9tIGEgdGltZXIgdG8gcGVyZm9ybSBtYWludGVuYW5jZSBvZiBhbiBTR0UgcXVldWUKICAqCXNldC4gIEl0IHBlcmZvcm1zIHR3byB0YXNrczoKICAqCi0gKglhKSBDbGVhbnMgdXAgYW55IGNvbXBsZXRlZCBUeCBkZXNjcmlwdG9ycyB0aGF0IG1heSBzdGlsbCBiZSBwZW5kaW5nLgorICoJQ2xlYW5zIHVwIGFueSBjb21wbGV0ZWQgVHggZGVzY3JpcHRvcnMgdGhhdCBtYXkgc3RpbGwgYmUgcGVuZGluZy4KICAqCU5vcm1hbCBkZXNjcmlwdG9yIGNsZWFudXAgaGFwcGVucyB3aGVuIG5ldyBwYWNrZXRzIGFyZSBhZGRlZCB0byBhIFR4CiAgKglxdWV1ZSBzbyB0aGlzIHRpbWVyIGlzIHJlbGF0aXZlbHkgaW5mcmVxdWVudCBhbmQgZG9lcyBhbnkgY2xlYW51cCBvbmx5CiAgKglpZiB0aGUgVHggcXVldWUgaGFzIG5vdCBzZWVuIGFueSBuZXcgcGFja2V0cyBpbiBhIHdoaWxlLiAgV2UgbWFrZSBhCkBAIC0yODIxLDUxICsyODM4LDg3IEBACiAgKgl1cCkuICBTaW5jZSBjb250cm9sIHF1ZXVlcyB1c2UgaW1tZWRpYXRlIGRhdGEgZXhjbHVzaXZlbHkgd2UgZG9uJ3QKICAqCWJvdGhlciBjbGVhbmluZyB0aGVtIHVwIGhlcmUuCiAgKgotICoJYikgUmVwbGVuaXNoZXMgUnggcXVldWVzIHRoYXQgaGF2ZSBydW4gb3V0IGR1ZSB0byBtZW1vcnkgc2hvcnRhZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHNnZV90aW1lcl90eCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHNnZV9xc2V0ICpxcyA9IChzdHJ1Y3Qgc2dlX3FzZXQgKilkYXRhOworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYocXMtPm5ldGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBwaS0+YWRhcHRlcjsKKwl1bnNpZ25lZCBpbnQgdGJkW1NHRV9UWFFfUEVSX1NFVF0gPSB7MCwgMH07CisJdW5zaWduZWQgbG9uZyBuZXh0X3BlcmlvZDsKKworCWlmIChzcGluX3RyeWxvY2soJnFzLT50eHFbVFhRX0VUSF0ubG9jaykpIHsKKwkJdGJkW1RYUV9FVEhdID0gcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX0VUSF0sCisJCQkJCQkgICAgVFhfUkVDTEFJTV9USU1FUl9DSFVOSyk7CisJCXNwaW5fdW5sb2NrKCZxcy0+dHhxW1RYUV9FVEhdLmxvY2spOworCX0KKwlpZiAoc3Bpbl90cnlsb2NrKCZxcy0+dHhxW1RYUV9PRkxEXS5sb2NrKSkgeworCQl0YmRbVFhRX09GTERdID0gcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX09GTERdLAorCQkJCQkJICAgICBUWF9SRUNMQUlNX1RJTUVSX0NIVU5LKTsKKwkJc3Bpbl91bmxvY2soJnFzLT50eHFbVFhRX09GTERdLmxvY2spOworCX0KKworCW5leHRfcGVyaW9kID0gVFhfUkVDTEFJTV9QRVJJT0QgPj4KKwkJICAgICAgKG1heCh0YmRbVFhRX0VUSF0sIHRiZFtUWFFfT0ZMRF0pIC8KKwkJICAgICAgIFRYX1JFQ0xBSU1fVElNRVJfQ0hVTkspOworCW1vZF90aW1lcigmcXMtPnR4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBuZXh0X3BlcmlvZCk7Cit9CisKKy8qCisgKglzZ2VfdGltZXJfcnggLSBwZXJmb3JtIHBlcmlvZGljIG1haW50ZW5hbmNlIG9mIGFuIFNHRSBxc2V0CisgKglAZGF0YTogdGhlIFNHRSBxdWV1ZSBzZXQgdG8gbWFpbnRhaW4KKyAqCisgKglhKSBSZXBsZW5pc2hlcyBSeCBxdWV1ZXMgdGhhdCBoYXZlIHJ1biBvdXQgZHVlIHRvIG1lbW9yeSBzaG9ydGFnZS4KICAqCU5vcm1hbGx5IG5ldyBSeCBidWZmZXJzIGFyZSBhZGRlZCB3aGVuIGV4aXN0aW5nIG9uZXMgYXJlIGNvbnN1bWVkIGJ1dAogICoJd2hlbiBvdXQgb2YgbWVtb3J5IGEgcXVldWUgY2FuIGJlY29tZSBlbXB0eS4gIFdlIHRyeSB0byBhZGQgb25seSBhIGZldwogICoJYnVmZmVycyBoZXJlLCB0aGUgcXVldWUgd2lsbCBiZSByZXBsZW5pc2hlZCBmdWxseSBhcyB0aGVzZSBuZXcgYnVmZmVycwogICoJYXJlIHVzZWQgdXAgaWYgbWVtb3J5IHNob3J0YWdlIGhhcyBzdWJzaWRlZC4KKyAqCisgKgliKSBSZXR1cm4gY29hbGVzY2VkIHJlc3BvbnNlIHF1ZXVlIGNyZWRpdHMgaW4gY2FzZSBhIHJlc3BvbnNlIHF1ZXVlIGlzCisgKglzdGFydmVkLgorICoKICAqLwotc3RhdGljIHZvaWQgc2dlX3RpbWVyX2NiKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIHNnZV90aW1lcl9yeCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3BpbmxvY2tfdCAqbG9jazsKIAlzdHJ1Y3Qgc2dlX3FzZXQgKnFzID0gKHN0cnVjdCBzZ2VfcXNldCAqKWRhdGE7Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBxcy0+YWRhcDsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KHFzLT5uZXRkZXYpOworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gcGktPmFkYXB0ZXI7CisJdTMyIHN0YXR1czsKIAotCWlmIChzcGluX3RyeWxvY2soJnFzLT50eHFbVFhRX0VUSF0ubG9jaykpIHsKLQkJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX0VUSF0pOwotCQlzcGluX3VubG9jaygmcXMtPnR4cVtUWFFfRVRIXS5sb2NrKTsKLQl9Ci0JaWYgKHNwaW5fdHJ5bG9jaygmcXMtPnR4cVtUWFFfT0ZMRF0ubG9jaykpIHsKLQkJcmVjbGFpbV9jb21wbGV0ZWRfdHgoYWRhcCwgJnFzLT50eHFbVFhRX09GTERdKTsKLQkJc3Bpbl91bmxvY2soJnFzLT50eHFbVFhRX09GTERdLmxvY2spOwotCX0KLQlsb2NrID0gKGFkYXAtPmZsYWdzICYgVVNJTkdfTVNJWCkgPyAmcXMtPnJzcHEubG9jayA6Ci0JCQkJCSAgICAmYWRhcC0+c2dlLnFzWzBdLnJzcHEubG9jazsKLQlpZiAoc3Bpbl90cnlsb2NrX2lycShsb2NrKSkgewotCQlpZiAoIW5hcGlfaXNfc2NoZWR1bGVkKCZxcy0+bmFwaSkpIHsKLQkJCXUzMiBzdGF0dXMgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1NHX1JTUFFfRkxfU1RBVFVTKTsKKwlsb2NrID0gYWRhcC0+cGFyYW1zLnJldiA+IDAgPworCSAgICAgICAmcXMtPnJzcHEubG9jayA6ICZhZGFwLT5zZ2UucXNbMF0ucnNwcS5sb2NrOwogCi0JCQlpZiAocXMtPmZsWzBdLmNyZWRpdHMgPCBxcy0+ZmxbMF0uc2l6ZSkKLQkJCQlfX3JlZmlsbF9mbChhZGFwLCAmcXMtPmZsWzBdKTsKLQkJCWlmIChxcy0+ZmxbMV0uY3JlZGl0cyA8IHFzLT5mbFsxXS5zaXplKQotCQkJCV9fcmVmaWxsX2ZsKGFkYXAsICZxcy0+ZmxbMV0pOworCWlmICghc3Bpbl90cnlsb2NrX2lycShsb2NrKSkKKwkJZ290byBvdXQ7CiAKLQkJCWlmIChzdGF0dXMgJiAoMSA8PCBxcy0+cnNwcS5jbnR4dF9pZCkpIHsKLQkJCQlxcy0+cnNwcS5zdGFydmVkKys7Ci0JCQkJaWYgKHFzLT5yc3BxLmNyZWRpdHMpIHsKLQkJCQkJcmVmaWxsX3JzcHEoYWRhcCwgJnFzLT5yc3BxLCAxKTsKLQkJCQkJcXMtPnJzcHEuY3JlZGl0cy0tOwotCQkJCQlxcy0+cnNwcS5yZXN0YXJ0ZWQrKzsKLQkJCQkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfUlNQUV9GTF9TVEFUVVMsCi0JCQkJCQkgICAgIDEgPDwgcXMtPnJzcHEuY250eHRfaWQpOwotCQkJCX0KKwlpZiAobmFwaV9pc19zY2hlZHVsZWQoJnFzLT5uYXBpKSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoYWRhcC0+cGFyYW1zLnJldiA8IDQpIHsKKwkJc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9TR19SU1BRX0ZMX1NUQVRVUyk7CisKKwkJaWYgKHN0YXR1cyAmICgxIDw8IHFzLT5yc3BxLmNudHh0X2lkKSkgeworCQkJcXMtPnJzcHEuc3RhcnZlZCsrOworCQkJaWYgKHFzLT5yc3BxLmNyZWRpdHMpIHsKKwkJCQlxcy0+cnNwcS5jcmVkaXRzLS07CisJCQkJcmVmaWxsX3JzcHEoYWRhcCwgJnFzLT5yc3BxLCAxKTsKKwkJCQlxcy0+cnNwcS5yZXN0YXJ0ZWQrKzsKKwkJCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19SU1BRX0ZMX1NUQVRVUywKKwkJCQkJICAgICAxIDw8IHFzLT5yc3BxLmNudHh0X2lkKTsKIAkJCX0KIAkJfQotCQlzcGluX3VubG9ja19pcnEobG9jayk7CiAJfQotCW1vZF90aW1lcigmcXMtPnR4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBUWF9SRUNMQUlNX1BFUklPRCk7CisKKwlpZiAocXMtPmZsWzBdLmNyZWRpdHMgPCBxcy0+ZmxbMF0uc2l6ZSkKKwkJX19yZWZpbGxfZmwoYWRhcCwgJnFzLT5mbFswXSk7CisJaWYgKHFzLT5mbFsxXS5jcmVkaXRzIDwgcXMtPmZsWzFdLnNpemUpCisJCV9fcmVmaWxsX2ZsKGFkYXAsICZxcy0+ZmxbMV0pOworCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxKGxvY2spOworb3V0OgorCW1vZF90aW1lcigmcXMtPnJ4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBSWF9SRUNMQUlNX1BFUklPRCk7CiB9CiAKIC8qKgpAQCAtMjkwNiwxMCArMjk1OSwxMCBAQAogewogCWludCBpLCBhdmFpbCwgcmV0ID0gLUVOT01FTTsKIAlzdHJ1Y3Qgc2dlX3FzZXQgKnEgPSAmYWRhcHRlci0+c2dlLnFzW2lkXTsKLQlzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IgPSAmcS0+bHJvX21ncjsKIAogCWluaXRfcXNldF9jbnR4dChxLCBpZCk7Ci0Jc2V0dXBfdGltZXIoJnEtPnR4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl9jYiwgKHVuc2lnbmVkIGxvbmcpcSk7CisJc2V0dXBfdGltZXIoJnEtPnR4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl90eCwgKHVuc2lnbmVkIGxvbmcpcSk7CisJc2V0dXBfdGltZXIoJnEtPnJ4X3JlY2xhaW1fdGltZXIsIHNnZV90aW1lcl9yeCwgKHVuc2lnbmVkIGxvbmcpcSk7CiAKIAlxLT5mbFswXS5kZXNjID0gYWxsb2NfcmluZyhhZGFwdGVyLT5wZGV2LCBwLT5mbF9zaXplLAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgcnhfZGVzYyksCkBAIC0yOTg1LDI1ICszMDM4LDIzIEBACiAJcS0+ZmxbMV0udXNlX3BhZ2VzID0gRkwxX1BHX0NIVU5LX1NJWkUgPiAwOwogCXEtPmZsWzBdLm9yZGVyID0gRkwwX1BHX09SREVSOwogCXEtPmZsWzFdLm9yZGVyID0gRkwxX1BHX09SREVSOworCXEtPmZsWzBdLmFsbG9jX3NpemUgPSBGTDBfUEdfQUxMT0NfU0laRTsKKwlxLT5mbFsxXS5hbGxvY19zaXplID0gRkwxX1BHX0FMTE9DX1NJWkU7CiAKLQlxLT5scm9fZnJhZ190YmwgPSBrY2FsbG9jKE1BWF9GUkFNRV9TSVpFIC8gRkwxX1BHX0NIVU5LX1NJWkUgKyAxLAotCQkJCSAgc2l6ZW9mKHN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QpLAotCQkJCSAgR0ZQX0tFUk5FTCk7Ci0JcS0+bHJvX25mcmFncyA9IHEtPmxyb19mcmFnX2xlbiA9IDA7CiAJc3Bpbl9sb2NrX2lycSgmYWRhcHRlci0+c2dlLnJlZ19sb2NrKTsKIAogCS8qIEZMIHRocmVzaG9sZCBjb21wYXJpc29uIHVzZXMgPCAqLwogCXJldCA9IHQzX3NnZV9pbml0X3JzcGNudHh0KGFkYXB0ZXIsIHEtPnJzcHEuY250eHRfaWQsIGlycV92ZWNfaWR4LAogCQkJCSAgIHEtPnJzcHEucGh5c19hZGRyLCBxLT5yc3BxLnNpemUsCi0JCQkJICAgcS0+ZmxbMF0uYnVmX3NpemUsIDEsIDApOworCQkJCSAgIHEtPmZsWzBdLmJ1Zl9zaXplIC0gU0dFX1BHX1JTVkQsIDEsIDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX3VubG9jazsKIAogCWZvciAoaSA9IDA7IGkgPCBTR0VfUlhRX1BFUl9TRVQ7ICsraSkgewogCQlyZXQgPSB0M19zZ2VfaW5pdF9mbGNudHh0KGFkYXB0ZXIsIHEtPmZsW2ldLmNudHh0X2lkLCAwLAogCQkJCQkgIHEtPmZsW2ldLnBoeXNfYWRkciwgcS0+ZmxbaV0uc2l6ZSwKLQkJCQkJICBxLT5mbFtpXS5idWZfc2l6ZSwgcC0+Y29uZ190aHJlcywgMSwKLQkJCQkJICAwKTsKKwkJCQkJICBxLT5mbFtpXS5idWZfc2l6ZSAtIFNHRV9QR19SU1ZELAorCQkJCQkgIHAtPmNvbmdfdGhyZXMsIDEsIDApOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJfdW5sb2NrOwogCX0KQEAgLTMwNDEsOCArMzA5Miw2IEBACiAJcS0+dHhfcSA9IG5ldGRldnE7CiAJdDNfdXBkYXRlX3FzZXRfY29hbGVzY2UocSwgcCk7CiAKLQlpbml0X2xyb19tZ3IocSwgbHJvX21ncik7Ci0KIAlhdmFpbCA9IHJlZmlsbF9mbChhZGFwdGVyLCAmcS0+ZmxbMF0sIHEtPmZsWzBdLnNpemUsCiAJCQkgIEdGUF9LRVJORUwgfCBfX0dGUF9DT01QKTsKIAlpZiAoIWF2YWlsKSB7CkBAIC0zMDYzLDcgKzMxMTIsNiBAQAogCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0dUUywgVl9SU1BRKHEtPnJzcHEuY250eHRfaWQpIHwKIAkJICAgICBWX05FV1RJTUVSKHEtPnJzcHEuaG9sZG9mZl90bXIpKTsKIAotCW1vZF90aW1lcigmcS0+dHhfcmVjbGFpbV90aW1lciwgamlmZmllcyArIFRYX1JFQ0xBSU1fUEVSSU9EKTsKIAlyZXR1cm4gMDsKIAogZXJyX3VubG9jazoKQEAgLTMwNzQsNiArMzEyMiwyNyBAQAogfQogCiAvKioKKyAqICAgICAgdDNfc3RhcnRfc2dlX3RpbWVycyAtIHN0YXJ0IFNHRSB0aW1lciBjYWxsIGJhY2tzCisgKiAgICAgIEBhZGFwOiB0aGUgYWRhcHRlcgorICoKKyAqICAgICAgU3RhcnRzIGVhY2ggU0dFIHF1ZXVlIHNldCdzIHRpbWVyIGNhbGwgYmFjaworICovCit2b2lkIHQzX3N0YXJ0X3NnZV90aW1lcnMoc3RydWN0IGFkYXB0ZXIgKmFkYXApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0dFX1FTRVRTOyArK2kpIHsKKwkJc3RydWN0IHNnZV9xc2V0ICpxID0gJmFkYXAtPnNnZS5xc1tpXTsKKworCWlmIChxLT50eF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uKQorCQltb2RfdGltZXIoJnEtPnR4X3JlY2xhaW1fdGltZXIsIGppZmZpZXMgKyBUWF9SRUNMQUlNX1BFUklPRCk7CisKKwlpZiAocS0+cnhfcmVjbGFpbV90aW1lci5mdW5jdGlvbikKKwkJbW9kX3RpbWVyKCZxLT5yeF9yZWNsYWltX3RpbWVyLCBqaWZmaWVzICsgUlhfUkVDTEFJTV9QRVJJT0QpOworCX0KK30KKworLyoqCiAgKgl0M19zdG9wX3NnZV90aW1lcnMgLSBzdG9wIFNHRSB0aW1lciBjYWxsIGJhY2tzCiAgKglAYWRhcDogdGhlIGFkYXB0ZXIKICAqCkBAIC0zMDg4LDYgKzMxNTcsOCBAQAogCiAJCWlmIChxLT50eF9yZWNsYWltX3RpbWVyLmZ1bmN0aW9uKQogCQkJZGVsX3RpbWVyX3N5bmMoJnEtPnR4X3JlY2xhaW1fdGltZXIpOworCQlpZiAocS0+cnhfcmVjbGFpbV90aW1lci5mdW5jdGlvbikKKwkJCWRlbF90aW1lcl9zeW5jKCZxLT5yeF9yZWNsYWltX3RpbWVyKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMgYi9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCmluZGV4IGFjMmE5NzQuLjMxZWQzMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYwpAQCAtNDkzLDIwICs0OTMsMjAgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGFwdGVyX2luZm8gdDNfYWRhcF9pbmZvW10gPSB7Ci0JezIsIDAsCisJezEsIDEsIDAsCiAJIEZfR1BJTzJfT0VOIHwgRl9HUElPNF9PRU4gfAogCSBGX0dQSU8yX09VVF9WQUwgfCBGX0dQSU80X09VVF9WQUwsIHsgU19HUElPMywgU19HUElPNSB9LCAwLAogCSAmbWkxX21kaW9fb3BzLCAiQ2hlbHNpbyBQRTkwMDAifSwKLQl7MiwgMCwKKwl7MSwgMSwgMCwKIAkgRl9HUElPMl9PRU4gfCBGX0dQSU80X09FTiB8CiAJIEZfR1BJTzJfT1VUX1ZBTCB8IEZfR1BJTzRfT1VUX1ZBTCwgeyBTX0dQSU8zLCBTX0dQSU81IH0sIDAsCiAJICZtaTFfbWRpb19vcHMsICJDaGVsc2lvIFQzMDIifSwKLQl7MSwgMCwKKwl7MSwgMCwgMCwKIAkgRl9HUElPMV9PRU4gfCBGX0dQSU82X09FTiB8IEZfR1BJTzdfT0VOIHwgRl9HUElPMTBfT0VOIHwKIAkgRl9HUElPMTFfT0VOIHwgRl9HUElPMV9PVVRfVkFMIHwgRl9HUElPNl9PVVRfVkFMIHwgRl9HUElPMTBfT1VUX1ZBTCwKIAkgeyAwIH0sIFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfQVVJLAogCSAmbWkxX21kaW9fZXh0X29wcywgIkNoZWxzaW8gVDMxMCJ9LAotCXsyLCAwLAorCXsxLCAxLCAwLAogCSBGX0dQSU8xX09FTiB8IEZfR1BJTzJfT0VOIHwgRl9HUElPNF9PRU4gfCBGX0dQSU81X09FTiB8IEZfR1BJTzZfT0VOIHwKIAkgRl9HUElPN19PRU4gfCBGX0dQSU8xMF9PRU4gfCBGX0dQSU8xMV9PRU4gfCBGX0dQSU8xX09VVF9WQUwgfAogCSBGX0dQSU81X09VVF9WQUwgfCBGX0dQSU82X09VVF9WQUwgfCBGX0dQSU8xMF9PVVRfVkFMLApAQCAtNTE0LDcgKzUxNCw3IEBACiAJICZtaTFfbWRpb19leHRfb3BzLCAiQ2hlbHNpbyBUMzIwIn0sCiAJe30sCiAJe30sCi0JezEsIDAsCisJezEsIDAsIDAsCiAJIEZfR1BJTzFfT0VOIHwgRl9HUElPMl9PRU4gfCBGX0dQSU80X09FTiB8IEZfR1BJTzZfT0VOIHwgRl9HUElPN19PRU4gfAogCSBGX0dQSU8xMF9PRU4gfCBGX0dQSU8xX09VVF9WQUwgfCBGX0dQSU82X09VVF9WQUwgfCBGX0dQSU8xMF9PVVRfVkFMLAogCSB7IFNfR1BJTzkgfSwgU1VQUE9SVEVEXzEwMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9BVUksCkBAIC0xMTUzLDYgKzExNTMsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCB0M19nYXRlX3J4X3RyYWZmaWMoc3RydWN0IGNtYWMgKm1hYywgdTMyICpyeF9jZmcsCisJCQkgICAgICAgdTMyICpyeF9oYXNoX2hpZ2gsIHUzMiAqcnhfaGFzaF9sb3cpCit7CisJLyogc3RvcCBSeCB1bmljYXN0IHRyYWZmaWMgKi8KKwl0M19tYWNfZGlzYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CisKKwkvKiBzdG9wIGJyb2FkY2FzdCwgbXVsdGljYXN0LCBwcm9taXNjdW91cyBtb2RlIHRyYWZmaWMgKi8KKwkqcnhfY2ZnID0gdDNfcmVhZF9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9DRkcpOworCXQzX3NldF9yZWdfZmllbGQobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9DRkcsCisJCQkgRl9FTkhBU0hNQ0FTVCB8IEZfRElTQkNBU1QgfCBGX0NPUFlBTExGUkFNRVMsCisJCQkgRl9ESVNCQ0FTVCk7CisKKwkqcnhfaGFzaF9oaWdoID0gdDNfcmVhZF9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0hJR0gpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfSElHSCwgMCk7CisKKwkqcnhfaGFzaF9sb3cgPSB0M19yZWFkX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfTE9XKTsKKwl0M193cml0ZV9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0xPVywgMCk7CisKKwkvKiBMZWF2ZSB0aW1lIHRvIGRyYWluIG1heCBSWCBmaWZvICovCisJbXNsZWVwKDEpOworfQorCitzdGF0aWMgdm9pZCB0M19vcGVuX3J4X3RyYWZmaWMoc3RydWN0IGNtYWMgKm1hYywgdTMyIHJ4X2NmZywKKwkJCSAgICAgICB1MzIgcnhfaGFzaF9oaWdoLCB1MzIgcnhfaGFzaF9sb3cpCit7CisJdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CisJdDNfc2V0X3JlZ19maWVsZChtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0NGRywKKwkJCSBGX0VOSEFTSE1DQVNUIHwgRl9ESVNCQ0FTVCB8IEZfQ09QWUFMTEZSQU1FUywKKwkJCSByeF9jZmcpOworCXQzX3dyaXRlX3JlZyhtYWMtPmFkYXB0ZXIsIEFfWEdNX1JYX0hBU0hfSElHSCwgcnhfaGFzaF9oaWdoKTsKKwl0M193cml0ZV9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9IQVNIX0xPVywgcnhfaGFzaF9sb3cpOworfQogCiAvKioKICAqCXQzX2xpbmtfY2hhbmdlZCAtIGhhbmRsZSBpbnRlcmZhY2UgbGluayBjaGFuZ2VzCkBAIC0xMTcwLDkgKzEyMDIsMzIgQEAKIAlzdHJ1Y3QgY3BoeSAqcGh5ID0gJnBpLT5waHk7CiAJc3RydWN0IGNtYWMgKm1hYyA9ICZwaS0+bWFjOwogCXN0cnVjdCBsaW5rX2NvbmZpZyAqbGMgPSAmcGktPmxpbmtfY29uZmlnOworCWludCBmb3JjZV9saW5rX2Rvd24gPSAwOwogCiAJcGh5LT5vcHMtPmdldF9saW5rX3N0YXR1cyhwaHksICZsaW5rX29rLCAmc3BlZWQsICZkdXBsZXgsICZmYyk7CiAKKwlpZiAoIWxjLT5saW5rX29rICYmIGxpbmtfb2spIHsKKwkJdTMyIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdzsKKwkJdTMyIHN0YXR1czsKKworCQl0M194Z21faW50cl9lbmFibGUoYWRhcHRlciwgcG9ydF9pZCk7CisJCXQzX2dhdGVfcnhfdHJhZmZpYyhtYWMsICZyeF9jZmcsICZyeF9oYXNoX2hpZ2gsICZyeF9oYXNoX2xvdyk7CisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9SWF9DVFJMICsgbWFjLT5vZmZzZXQsIDApOworCQl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CisKKwkJc3RhdHVzID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9YR01fSU5UX1NUQVRVUyArIG1hYy0+b2Zmc2V0KTsKKwkJaWYgKHN0YXR1cyAmIEZfTElOS0ZBVUxUQ0hBTkdFKSB7CisJCQltYWMtPnN0YXRzLmxpbmtfZmF1bHRzKys7CisJCQlmb3JjZV9saW5rX2Rvd24gPSAxOworCQl9CisJCXQzX29wZW5fcnhfdHJhZmZpYyhtYWMsIHJ4X2NmZywgcnhfaGFzaF9oaWdoLCByeF9oYXNoX2xvdyk7CisKKwkJaWYgKGZvcmNlX2xpbmtfZG93bikgeworCQkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXB0ZXIsIHBvcnRfaWQpOworCQkJcmV0dXJuOworCQl9CisJfQorCiAJaWYgKGxjLT5yZXF1ZXN0ZWRfZmMgJiBQQVVTRV9BVVRPTkVHKQogCQlmYyAmPSBsYy0+cmVxdWVzdGVkX2ZjOwogCWVsc2UKQEAgLTEyMDIsNiArMTI1Nyw1NyBAQAogCXQzX29zX2xpbmtfY2hhbmdlZChhZGFwdGVyLCBwb3J0X2lkLCBsaW5rX29rLCBzcGVlZCwgZHVwbGV4LCBmYyk7CiB9CiAKK3ZvaWQgdDNfbGlua19mYXVsdChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IHBvcnRfaWQpCit7CisJc3RydWN0IHBvcnRfaW5mbyAqcGkgPSBhZGFwMnBpbmZvKGFkYXB0ZXIsIHBvcnRfaWQpOworCXN0cnVjdCBjbWFjICptYWMgPSAmcGktPm1hYzsKKwlzdHJ1Y3QgY3BoeSAqcGh5ID0gJnBpLT5waHk7CisJc3RydWN0IGxpbmtfY29uZmlnICpsYyA9ICZwaS0+bGlua19jb25maWc7CisJaW50IGxpbmtfb2ssIHNwZWVkLCBkdXBsZXgsIGZjLCBsaW5rX2ZhdWx0OworCXUzMiByeF9jZmcsIHJ4X2hhc2hfaGlnaCwgcnhfaGFzaF9sb3c7CisKKwl0M19nYXRlX3J4X3RyYWZmaWMobWFjLCAmcnhfY2ZnLCAmcnhfaGFzaF9oaWdoLCAmcnhfaGFzaF9sb3cpOworCisJaWYgKGFkYXB0ZXItPnBhcmFtcy5yZXYgPiAwICYmIHVzZXNfeGF1aShhZGFwdGVyKSkKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hBVUlfQUNUX0NUUkwgKyBtYWMtPm9mZnNldCwgMCk7CisKKwl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9YR01fUlhfQ1RSTCArIG1hYy0+b2Zmc2V0LCAwKTsKKwl0M19tYWNfZW5hYmxlKG1hYywgTUFDX0RJUkVDVElPTl9SWCk7CisKKwl0M19vcGVuX3J4X3RyYWZmaWMobWFjLCByeF9jZmcsIHJ4X2hhc2hfaGlnaCwgcnhfaGFzaF9sb3cpOworCisJbGlua19mYXVsdCA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsCisJCQkJIEFfWEdNX0lOVF9TVEFUVVMgKyBtYWMtPm9mZnNldCk7CisJbGlua19mYXVsdCAmPSBGX0xJTktGQVVMVENIQU5HRTsKKworCXBoeS0+b3BzLT5nZXRfbGlua19zdGF0dXMocGh5LCAmbGlua19vaywgJnNwZWVkLCAmZHVwbGV4LCAmZmMpOworCisJaWYgKGxpbmtfZmF1bHQpIHsKKwkJbGMtPmxpbmtfb2sgPSAwOworCQlsYy0+c3BlZWQgPSBTUEVFRF9JTlZBTElEOworCQlsYy0+ZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisKKwkJdDNfb3NfbGlua19mYXVsdChhZGFwdGVyLCBwb3J0X2lkLCAwKTsKKworCQkvKiBBY2NvdW50IGxpbmsgZmF1bHRzIG9ubHkgd2hlbiB0aGUgcGh5IHJlcG9ydHMgYSBsaW5rIHVwICovCisJCWlmIChsaW5rX29rKQorCQkJbWFjLT5zdGF0cy5saW5rX2ZhdWx0cysrOworCisJCW1zbGVlcCgxMDAwKTsKKwkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXB0ZXIsIHBvcnRfaWQpOworCX0gZWxzZSB7CisJCWlmIChsaW5rX29rKQorCQkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hBVUlfQUNUX0NUUkwgKyBtYWMtPm9mZnNldCwKKwkJCQkgICAgIEZfVFhBQ1RFTkFCTEUgfCBGX1JYRU4pOworCisJCXBpLT5saW5rX2ZhdWx0ID0gMDsKKwkJbGMtPmxpbmtfb2sgPSAodW5zaWduZWQgY2hhcilsaW5rX29rOworCQlsYy0+c3BlZWQgPSBzcGVlZCA8IDAgPyBTUEVFRF9JTlZBTElEIDogc3BlZWQ7CisJCWxjLT5kdXBsZXggPSBkdXBsZXggPCAwID8gRFVQTEVYX0lOVkFMSUQgOiBkdXBsZXg7CisJCXQzX29zX2xpbmtfZmF1bHQoYWRhcHRlciwgcG9ydF9pZCwgbGlua19vayk7CisJfQorfQorCiAvKioKICAqCXQzX2xpbmtfc3RhcnQgLSBhcHBseSBsaW5rIGNvbmZpZ3VyYXRpb24gdG8gTUFDL1BIWQogICoJQHBoeTogdGhlIFBIWSB0byBzZXR1cApAQCAtMTMyMyw3ICsxNDI5LDcgQEAKICNkZWZpbmUgTUM3X0lOVFJfTUFTSyAoRl9BRSB8IEZfVUUgfCBGX0NFIHwgVl9QRShNX1BFKSkKICNkZWZpbmUgWEdNX0lOVFJfTUFTSyAoVl9UWEZJRk9fUFJUWV9FUlIoTV9UWEZJRk9fUFJUWV9FUlIpIHwgXAogCQkgICAgICAgVl9SWEZJRk9fUFJUWV9FUlIoTV9SWEZJRk9fUFJUWV9FUlIpIHwgXAotCQkgICAgICAgRl9UWEZJRk9fVU5ERVJSVU4gfCBGX1JYRklGT19PVkVSRkxPVykKKwkJICAgICAgIEZfVFhGSUZPX1VOREVSUlVOKQogI2RlZmluZSBQQ0lYX0lOVFJfTUFTSyAoRl9NU1RERVRQQVJFUlIgfCBGX1NJR1RBUkFCVCB8IEZfUkNWVEFSQUJUIHwgXAogCQkJRl9SQ1ZNU1RBQlQgfCBGX1NJR1NZU0VSUiB8IEZfREVUUEFSRVJSIHwgXAogCQkJRl9TUExDTVBESVMgfCBGX1VOWFNQTENNUCB8IEZfUkNWU1BMQ01QRVJSIHwgXApAQCAtMTM2MCwxMSArMTQ2NiwxMSBAQAogCQkgICAgICAgVl9UWDFUUFBBUkVSUkVOQihNX1RYMVRQUEFSRVJSRU5CKSB8IFwKIAkJICAgICAgIFZfUlhUUFBBUkVSUkVOQihNX1JYVFBQQVJFUlJFTkIpIHwgXAogCQkgICAgICAgVl9NQ0FQQVJFUlJFTkIoTV9NQ0FQQVJFUlJFTkIpKQorI2RlZmluZSBYR01fRVhUUkFfSU5UUl9NQVNLIChGX0xJTktGQVVMVENIQU5HRSkKICNkZWZpbmUgUExfSU5UUl9NQVNLIChGX1QzREJHIHwgRl9YR01BQzBfMCB8IEZfWEdNQUMwXzEgfCBGX01DNUEgfCBGX1BNMV9UWCB8IFwKIAkJICAgICAgRl9QTTFfUlggfCBGX1VMUDJfVFggfCBGX1VMUDJfUlggfCBGX1RQMSB8IEZfQ0lNIHwgXAogCQkgICAgICBGX01DN19DTSB8IEZfTUM3X1BNVFggfCBGX01DN19QTVJYIHwgRl9TR0UzIHwgRl9QQ0lNMCB8IFwKIAkJICAgICAgRl9NUFMwIHwgRl9DUExfU1dJVENIKQotCiAvKgogICogSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBQQ0lYMSBtb2R1bGUuCiAgKi8KQEAgLTE2OTUsNyArMTgwMSwxNCBAQAogc3RhdGljIGludCBtYWNfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwLCB1bnNpZ25lZCBpbnQgaWR4KQogewogCXN0cnVjdCBjbWFjICptYWMgPSAmYWRhcDJwaW5mbyhhZGFwLCBpZHgpLT5tYWM7Ci0JdTMyIGNhdXNlID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fSU5UX0NBVVNFICsgbWFjLT5vZmZzZXQpOworCS8qCisJICogV2UgbWFzayBvdXQgaW50ZXJydXB0IGNhdXNlcyBmb3Igd2hpY2ggd2UncmUgbm90IHRha2luZyBpbnRlcnJ1cHRzLgorCSAqIFRoaXMgYWxsb3dzIHVzIHRvIHVzZSBwb2xsaW5nIGxvZ2ljIHRvIG1vbml0b3Igc29tZSBvZiB0aGUgb3RoZXIKKwkgKiBjb25kaXRpb25zIHdoZW4gdGFraW5nIGludGVycnVwdHMgd291bGQgaW1wb3NlIHRvbyBtdWNoIGxvYWQgb24gdGhlCisJICogc3lzdGVtLgorCSAqLworCXUzMiBjYXVzZSA9IHQzX3JlYWRfcmVnKGFkYXAsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0KSAmCisJCSAgICB+Rl9SWEZJRk9fT1ZFUkZMT1c7CiAKIAlpZiAoY2F1c2UgJiBWX1RYRklGT19QUlRZX0VSUihNX1RYRklGT19QUlRZX0VSUikpIHsKIAkJbWFjLT5zdGF0cy50eF9maWZvX3Bhcml0eV9lcnIrKzsKQEAgLTE3MTUsMTAgKzE4MjgsMjAgQEAKIAkJbWFjLT5zdGF0cy54YXVpX3Bjc19jdGNfZXJyKys7CiAJaWYgKGNhdXNlICYgRl9YQVVJUENTQUxJR05DSEFOR0UpCiAJCW1hYy0+c3RhdHMueGF1aV9wY3NfYWxpZ25fY2hhbmdlKys7CisJaWYgKGNhdXNlICYgRl9YR01fSU5UKSB7CisJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwKKwkJCQkgQV9YR01fSU5UX0VOQUJMRSArIG1hYy0+b2Zmc2V0LAorCQkJCSBGX1hHTV9JTlQsIDApOworCQltYWMtPnN0YXRzLmxpbmtfZmF1bHRzKys7CisKKwkJdDNfb3NfbGlua19mYXVsdF9oYW5kbGVyKGFkYXAsIGlkeCk7CisJfQogCiAJdDNfd3JpdGVfcmVnKGFkYXAsIEFfWEdNX0lOVF9DQVVTRSArIG1hYy0+b2Zmc2V0LCBjYXVzZSk7CisKIAlpZiAoY2F1c2UgJiBYR01fSU5UUl9GQVRBTCkKIAkJdDNfZmF0YWxfZXJyKGFkYXApOworCiAJcmV0dXJuIGNhdXNlICE9IDA7CiB9CiAKQEAgLTE5MjQsNiArMjA0NywyMiBAQAogCXQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfUExfSU5UX0NBVVNFMCk7CS8qIGZsdXNoICovCiB9CiAKK3ZvaWQgdDNfeGdtX2ludHJfZW5hYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgaWR4KQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gYWRhcDJwaW5mbyhhZGFwdGVyLCBpZHgpOworCisJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfWEdNX1hHTV9JTlRfRU5BQkxFICsgcGktPm1hYy5vZmZzZXQsCisJCSAgICAgWEdNX0VYVFJBX0lOVFJfTUFTSyk7Cit9CisKK3ZvaWQgdDNfeGdtX2ludHJfZGlzYWJsZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IGFkYXAycGluZm8oYWRhcHRlciwgaWR4KTsKKworCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1hHTV9YR01fSU5UX0RJU0FCTEUgKyBwaS0+bWFjLm9mZnNldCwKKwkJICAgICAweDdmZik7Cit9CisKIC8qKgogICoJdDNfcG9ydF9pbnRyX2VuYWJsZSAtIGVuYWJsZSBwb3J0LXNwZWNpZmljIGludGVycnVwdHMKICAqCUBhZGFwdGVyOiBhc3NvY2lhdGVkIGFkYXB0ZXIKQEAgLTE5ODksMTYgKzIxMjgsNDAgQEAKIHN0YXRpYyBpbnQgdDNfc2dlX3dyaXRlX2NvbnRleHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCBpZCwKIAkJCQl1bnNpZ25lZCBpbnQgdHlwZSkKIHsKLQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0swLCAweGZmZmZmZmZmKTsKLQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0sxLCAweGZmZmZmZmZmKTsKLQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0syLCAweGZmZmZmZmZmKTsKLQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0szLCAweGZmZmZmZmZmKTsKKwlpZiAodHlwZSA9PSBGX1JFU1BPTlNFUSkgeworCQkvKgorCQkgKiBDYW4ndCB3cml0ZSB0aGUgUmVzcG9uc2UgUXVldWUgQ29udGV4dCBiaXRzIGZvcgorCQkgKiBJbnRlcnJ1cHQgQXJtZWQgb3IgdGhlIFJlc2VydmUgYml0cyBhZnRlciB0aGUgY2hpcAorCQkgKiBoYXMgYmVlbiBpbml0aWFsaXplZCBvdXQgb2YgcmVzZXQuICBXcml0aW5nIHRvIHRoZXNlCisJCSAqIGJpdHMgY2FuIGNvbmZ1c2UgdGhlIGhhcmR3YXJlLgorCQkgKi8KKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfQ09OVEVYVF9NQVNLMCwgMHhmZmZmZmZmZik7CisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzEsIDB4ZmZmZmZmZmYpOworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0syLCAweDE3ZmZmZmZmKTsKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfQ09OVEVYVF9NQVNLMywgMHhmZmZmZmZmZik7CisJfSBlbHNlIHsKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfQ09OVEVYVF9NQVNLMCwgMHhmZmZmZmZmZik7CisJCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfTUFTSzEsIDB4ZmZmZmZmZmYpOworCQl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19DT05URVhUX01BU0syLCAweGZmZmZmZmZmKTsKKwkJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfU0dfQ09OVEVYVF9NQVNLMywgMHhmZmZmZmZmZik7CisJfQogCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1NHX0NPTlRFWFRfQ01ELAogCQkgICAgIFZfQ09OVEVYVF9DTURfT1BDT0RFKDEpIHwgdHlwZSB8IFZfQ09OVEVYVChpZCkpOwogCXJldHVybiB0M193YWl0X29wX2RvbmUoYWRhcHRlciwgQV9TR19DT05URVhUX0NNRCwgRl9DT05URVhUX0NNRF9CVVNZLAogCQkJICAgICAgIDAsIFNHX0NPTlRFWFRfQ01EX0FUVEVNUFRTLCAxKTsKIH0KIAorLyoqCisgKgljbGVhcl9zZ2VfY3R4dCAtIGNvbXBsZXRlbHkgY2xlYXIgYW4gU0dFIGNvbnRleHQKKyAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICoJQGlkOiB0aGUgY29udGV4dCBpZAorICoJQHR5cGU6IHRoZSBjb250ZXh0IHR5cGUKKyAqCisgKglDb21wbGV0ZWx5IGNsZWFyIGFuIFNHRSBjb250ZXh0LiAgVXNlZCBwcmVkb21pbmFudGx5IGF0IHBvc3QtcmVzZXQKKyAqCWluaXRpYWxpemF0aW9uLiAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgd2UgZG9uJ3Qgc2tpcCB3cml0aW5nIHRvIGFueQorICoJInNlbnNpdGl2ZSBiaXRzIiBpbiB0aGUgY29udGV4dHMgdGhlIHdheSB0aGF0IHQzX3NnZV93cml0ZV9jb250ZXh0KCkKKyAqCWRvZXMgLi4uCisgKi8KIHN0YXRpYyBpbnQgY2xlYXJfc2dlX2N0eHQoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGludCBpZCwKIAkJCSAgdW5zaWduZWQgaW50IHR5cGUpCiB7CkBAIC0yMDA2LDcgKzIxNjksMTQgQEAKIAl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19DT05URVhUX0RBVEExLCAwKTsKIAl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19DT05URVhUX0RBVEEyLCAwKTsKIAl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19DT05URVhUX0RBVEEzLCAwKTsKLQlyZXR1cm4gdDNfc2dlX3dyaXRlX2NvbnRleHQoYWRhcCwgaWQsIHR5cGUpOworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0NPTlRFWFRfTUFTSzAsIDB4ZmZmZmZmZmYpOworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0NPTlRFWFRfTUFTSzEsIDB4ZmZmZmZmZmYpOworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0NPTlRFWFRfTUFTSzIsIDB4ZmZmZmZmZmYpOworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0NPTlRFWFRfTUFTSzMsIDB4ZmZmZmZmZmYpOworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1NHX0NPTlRFWFRfQ01ELAorCQkgICAgIFZfQ09OVEVYVF9DTURfT1BDT0RFKDEpIHwgdHlwZSB8IFZfQ09OVEVYVChpZCkpOworCXJldHVybiB0M193YWl0X29wX2RvbmUoYWRhcCwgQV9TR19DT05URVhUX0NNRCwgRl9DT05URVhUX0NNRF9CVVNZLAorCQkJICAgICAgIDAsIFNHX0NPTlRFWFRfQ01EX0FUVEVNUFRTLCAxKTsKIH0KIAogLyoqCkBAIC0yNTkwLDEwICsyNzYwLDEwIEBACiAJCSAgICAgRl9UQ1BDSEVDS1NVTU9GRkxPQUQgfCBWX0lQVFRMKDY0KSk7CiAJdDNfd3JpdGVfcmVnKGFkYXAsIEFfVFBfVENQX09QVElPTlMsIFZfTVRVREVGQVVMVCg1NzYpIHwKIAkJICAgICBGX01UVUVOQUJMRSB8IFZfV0lORE9XU0NBTEVNT0RFKDEpIHwKLQkJICAgICBWX1RJTUVTVEFNUFNNT0RFKDApIHwgVl9TQUNLTU9ERSgxKSB8IFZfU0FDS1JYKDEpKTsKKwkJICAgICBWX1RJTUVTVEFNUFNNT0RFKDEpIHwgVl9TQUNLTU9ERSgxKSB8IFZfU0FDS1JYKDEpKTsKIAl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9EQUNLX0NPTkZJRywgVl9BVVRPU1RBVEUzKDEpIHwKIAkJICAgICBWX0FVVE9TVEFURTIoMSkgfCBWX0FVVE9TVEFURTEoMCkgfAotCQkgICAgIFZfQllURVRIUkVTSE9MRCgxNjM4NCkgfCBWX01TU1RIUkVTSE9MRCgyKSB8CisJCSAgICAgVl9CWVRFVEhSRVNIT0xEKDI2ODgwKSB8IFZfTVNTVEhSRVNIT0xEKDIpIHwKIAkJICAgICBGX0FVVE9DQVJFRlVMIHwgRl9BVVRPRU5BQkxFIHwgVl9EQUNLX01PREUoMSkpOwogCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9UUF9JTl9DT05GSUcsIEZfUlhGQkFSQlBSSU8gfCBGX1RYRkJBUkJQUklPLAogCQkJIEZfSVBWNkVOQUJMRSB8IEZfTklDTU9ERSk7CkBAIC0zMDU3LDIwICszMjI3LDIyIEBACiB9CiAKIC8qCi0gKiBQZXJmb3JtIHRoZSBiaXRzIG9mIEhXIGluaXRpYWxpemF0aW9uIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgbnVtYmVyCi0gKiBvZiBhdmFpbGFibGUgcG9ydHMuCisgKiBQZXJmb3JtIHRoZSBiaXRzIG9mIEhXIGluaXRpYWxpemF0aW9uIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGUgVHgKKyAqIGNoYW5uZWxzIGJlaW5nIHVzZWQuCiAgKi8KLXN0YXRpYyB2b2lkIGluaXRfaHdfZm9yX2F2YWlsX3BvcnRzKHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgbnBvcnRzKQorc3RhdGljIHZvaWQgY2hhbl9pbml0X2h3KHN0cnVjdCBhZGFwdGVyICphZGFwLCB1bnNpZ25lZCBpbnQgY2hhbl9tYXApCiB7CiAJaW50IGk7CiAKLQlpZiAobnBvcnRzID09IDEpIHsKKwlpZiAoY2hhbl9tYXAgIT0gMykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9uZSBjaGFubmVsICovCiAJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9VTFBSWF9DVEwsIEZfUk9VTkRfUk9CSU4sIDApOwogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfVUxQVFhfQ09ORklHLCBGX0NGR19SUl9BUkIsIDApOwotCQl0M193cml0ZV9yZWcoYWRhcCwgQV9NUFNfQ0ZHLCBGX1RQUlhQT1JURU4gfCBGX1RQVFhQT1JUMEVOIHwKLQkJCSAgICAgRl9QT1JUMEFDVElWRSB8IEZfRU5GT1JDRVBLVCk7Ci0JCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1BNMV9UWF9DRkcsIDB4ZmZmZmZmZmYpOwotCX0gZWxzZSB7CisJCXQzX3dyaXRlX3JlZyhhZGFwLCBBX01QU19DRkcsIEZfVFBSWFBPUlRFTiB8IEZfRU5GT1JDRVBLVCB8CisJCQkgICAgIChjaGFuX21hcCA9PSAxID8gRl9UUFRYUE9SVDBFTiB8IEZfUE9SVDBBQ1RJVkUgOgorCQkJCQkgICAgICBGX1RQVFhQT1JUMUVOIHwgRl9QT1JUMUFDVElWRSkpOworCQl0M193cml0ZV9yZWcoYWRhcCwgQV9QTTFfVFhfQ0ZHLAorCQkJICAgICBjaGFuX21hcCA9PSAxID8gMHhmZmZmZmZmZiA6IDApOworCX0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHdvIGNoYW5uZWxzICovCiAJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9VTFBSWF9DVEwsIDAsIEZfUk9VTkRfUk9CSU4pOwogCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfVUxQVFhfQ09ORklHLCAwLCBGX0NGR19SUl9BUkIpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9VTFBUWF9ETUFfV0VJR0hULApAQCAtMzM3OCw3ICszNTUwLDcgQEAKIAl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9QTTFfUlhfQ0ZHLCAweGZmZmZmZmZmKTsKIAl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9QTTFfUlhfTU9ERSwgMCk7CiAJdDNfd3JpdGVfcmVnKGFkYXB0ZXIsIEFfUE0xX1RYX01PREUsIDApOwotCWluaXRfaHdfZm9yX2F2YWlsX3BvcnRzKGFkYXB0ZXIsIGFkYXB0ZXItPnBhcmFtcy5ucG9ydHMpOworCWNoYW5faW5pdF9odyhhZGFwdGVyLCBhZGFwdGVyLT5wYXJhbXMuY2hhbl9tYXApOwogCXQzX3NnZV9pbml0KGFkYXB0ZXIsICZhZGFwdGVyLT5wYXJhbXMuc2dlKTsKIAogCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX1QzREJHX0dQSU9fQUNUX0xPVywgY2FsY19ncGlvX2ludHIoYWRhcHRlcikpOwpAQCAtMzYxNSw5ICszNzg3LDE4IEBACiAJZ2V0X3BjaV9tb2RlKGFkYXB0ZXIsICZhZGFwdGVyLT5wYXJhbXMucGNpKTsKIAogCWFkYXB0ZXItPnBhcmFtcy5pbmZvID0gYWk7Ci0JYWRhcHRlci0+cGFyYW1zLm5wb3J0cyA9IGFpLT5ucG9ydHM7CisJYWRhcHRlci0+cGFyYW1zLm5wb3J0cyA9IGFpLT5ucG9ydHMwICsgYWktPm5wb3J0czE7CisJYWRhcHRlci0+cGFyYW1zLmNoYW5fbWFwID0gISFhaS0+bnBvcnRzMCB8ICghIWFpLT5ucG9ydHMxIDw8IDEpOwogCWFkYXB0ZXItPnBhcmFtcy5yZXYgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX1BMX1JFVik7Ci0JYWRhcHRlci0+cGFyYW1zLmxpbmtwb2xsX3BlcmlvZCA9IDA7CisJLyoKKwkgKiBXZSB1c2VkIHRvIG9ubHkgcnVuIHRoZSAiYWRhcHRlciBjaGVjayB0YXNrIiBvbmNlIGEgc2Vjb25kIGlmCisJICogd2UgaGFkIFBIWXMgd2hpY2ggZGlkbid0IHN1cHBvcnQgaW50ZXJydXB0cyAod2Ugd291bGQgY2hlY2sKKwkgKiB0aGVpciBsaW5rIHN0YXR1cyBvbmNlIGEgc2Vjb25kKS4gIE5vdyB3ZSBjaGVjayBvdGhlciBjb25kaXRpb25zCisJICogaW4gdGhhdCByb3V0aW5lIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGltcG9zZSBhIHZlcnkgaGlnaAorCSAqIGludGVycnVwdCBsb2FkIG9uIHRoZSBzeXN0ZW0uICBBcyBzdWNoLCB3ZSBub3cgYWx3YXlzIHNjYW4gdGhlCisJICogYWRhcHRlciBzdGF0ZSBvbmNlIGEgc2Vjb25kIC4uLgorCSAqLworCWFkYXB0ZXItPnBhcmFtcy5saW5rcG9sbF9wZXJpb2QgPSAxMDsKIAlhZGFwdGVyLT5wYXJhbXMuc3RhdHNfdXBkYXRlX3BlcmlvZCA9IGlzXzEwRyhhZGFwdGVyKSA/CiAJICAgIE1BQ19TVEFUU19BQ0NVTV9TRUNTIDogKE1BQ19TVEFUU19BQ0NVTV9TRUNTICogMTApOwogCWFkYXB0ZXItPnBhcmFtcy5wY2kudnBkX2NhcF9hZGRyID0KQEAgLTM2MzgsNyArMzgxOSw3IEBACiAJCW1jN19wcmVwKGFkYXB0ZXIsICZhZGFwdGVyLT5wbXR4LCBNQzdfUE1UWF9CQVNFX0FERFIsICJQTVRYIik7CiAJCW1jN19wcmVwKGFkYXB0ZXIsICZhZGFwdGVyLT5jbSwgTUM3X0NNX0JBU0VfQUREUiwgIkNNIik7CiAKLQkJcC0+bmNoYW4gPSBhaS0+bnBvcnRzOworCQlwLT5uY2hhbiA9IGFkYXB0ZXItPnBhcmFtcy5jaGFuX21hcCA9PSAzID8gMiA6IDE7CiAJCXAtPnBtcnhfc2l6ZSA9IHQzX21jN19zaXplKCZhZGFwdGVyLT5wbXJ4KTsKIAkJcC0+cG10eF9zaXplID0gdDNfbWM3X3NpemUoJmFkYXB0ZXItPnBtdHgpOwogCQlwLT5jbV9zaXplID0gdDNfbWM3X3NpemUoJmFkYXB0ZXItPmNtKTsKQEAgLTM3MDcsNyArMzg4OCwxNCBAQAogCQkgICAgICAgRVRIX0FMRU4pOwogCQlpbml0X2xpbmtfY29uZmlnKCZwLT5saW5rX2NvbmZpZywgcC0+cGh5LmNhcHMpOwogCQlwLT5waHkub3BzLT5wb3dlcl9kb3duKCZwLT5waHksIDEpOwotCQlpZiAoIShwLT5waHkuY2FwcyAmIFNVUFBPUlRFRF9JUlEpKQorCisJCS8qCisJCSAqIElmIHRoZSBQSFkgZG9lc24ndCBzdXBwb3J0IGludGVycnVwdHMgZm9yIGxpbmsgc3RhdHVzCisJCSAqIGNoYW5nZXMsIHNjaGVkdWxlIGEgc2NhbiBvZiB0aGUgYWRhcHRlciBsaW5rcyBhdCBsZWFzdAorCQkgKiBvbmNlIGEgc2Vjb25kLgorCQkgKi8KKwkJaWYgKCEocC0+cGh5LmNhcHMgJiBTVVBQT1JURURfSVJRKSAmJgorCQkgICAgYWRhcHRlci0+cGFyYW1zLmxpbmtwb2xsX3BlcmlvZCA+IDEwKQogCQkJYWRhcHRlci0+cGFyYW1zLmxpbmtwb2xsX3BlcmlvZCA9IDEwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvdmVyc2lvbi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvdmVyc2lvbi5oCmluZGV4IGIxYjI1YzMuLjdiZjk2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy92ZXJzaW9uLmgKQEAgLTM1LDEwICszNSwxMCBAQAogI2RlZmluZSBEUlZfREVTQyAiQ2hlbHNpbyBUMyBOZXR3b3JrIERyaXZlciIKICNkZWZpbmUgRFJWX05BTUUgImN4Z2IzIgogLyogRHJpdmVyIHZlcnNpb24gKi8KLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMS4xLWtvIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4xLjIta28iCiAKIC8qIEZpcm13YXJlIHZlcnNpb24gKi8KICNkZWZpbmUgRldfVkVSU0lPTl9NQUpPUiA3Ci0jZGVmaW5lIEZXX1ZFUlNJT05fTUlOT1IgMAorI2RlZmluZSBGV19WRVJTSU9OX01JTk9SIDEKICNkZWZpbmUgRldfVkVSU0lPTl9NSUNSTyAwCiAjZW5kaWYJCQkJLyogX19DSEVMU0lPX1ZFUlNJT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKaW5kZXggOWQ3Nzg2OS4uZjg3Zjk0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jCkBAIC0xNTAsNyArMTUwLDggQEAKIHN0YXRpYyBpbnQgdDNiMl9tYWNfcmVzZXQoc3RydWN0IGNtYWMgKm1hYykKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IG1hYy0+YWRhcHRlcjsKLQl1bnNpZ25lZCBpbnQgb2Z0ID0gbWFjLT5vZmZzZXQ7CisJdW5zaWduZWQgaW50IG9mdCA9IG1hYy0+b2Zmc2V0LCBzdG9yZTsKKwlpbnQgaWR4ID0gbWFjaWR4KG1hYyk7CiAJdTMyIHZhbDsKIAogCWlmICghbWFjaWR4KG1hYykpCkBAIC0xNTgsMTQgKzE1OSwyOCBAQAogCWVsc2UKIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX01QU19DRkcsIEZfUE9SVDFBQ1RJVkUsIDApOwogCisJLyogU3RvcCBOSUMgdHJhZmZpYyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBUWFRPR0dMRVMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9FTkZPUkNFUEtULCAwKTsKKwkvKiBFbnN1cmUgVFggZHJhaW5zICovCisJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1hHTV9UWF9DRkcgKyBvZnQsIEZfVFhQQVVTRUVOLCAwKTsKKwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SRVNFVF9DVFJMICsgb2Z0LCBGX01BQ19SRVNFVF8pOwogCXQzX3JlYWRfcmVnKGFkYXAsIEFfWEdNX1JFU0VUX0NUUkwgKyBvZnQpOyAgICAvKiBmbHVzaCAqLwogCisJLyogU3RvcmUgQV9UUF9UWF9EUk9QX0NGR19DSDAgKi8KKwl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOworCXN0b3JlID0gdDNfcmVhZF9yZWcoYWRhcCwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOworCiAJbXNsZWVwKDEwKTsKIAorCS8qIENoYW5nZSBEUk9QX0NGRyB0byAweGMwMDAwMDExICovCisJdDNfd3JpdGVfcmVnKGFkYXAsIEFfVFBfUElPX0FERFIsIEFfVFBfVFhfRFJPUF9DRkdfQ0gwICsgaWR4KTsKKwl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fREFUQSwgMHhjMDAwMDAxMSk7CisKIAkvKiBDaGVjayBmb3IgeGdtIFJ4IGZpZm8gZW1wdHkgKi8KKwkvKiBJbmNyZWFzZWQgbG9vcCBjb3VudCB0byAxMDAwIGZyb20gNSBjb3ZlciAxRyBhbmQgMTAwTWJwcyBjYXNlICovCiAJaWYgKHQzX3dhaXRfb3BfZG9uZShhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkVfRVJSX0NOVCArIG9mdCwKLQkJCSAgICAweDgwMDAwMDAwLCAxLCA1LCAyKSkgeworCQkJICAgIDB4ODAwMDAwMDAsIDEsIDEwMDAsIDIpKSB7CiAJCUNIX0VSUihhZGFwLCAiTUFDICVkIFJ4IGZpZm8gZHJhaW4gZmFpbGVkXG4iLAogCQkgICAgICAgbWFjaWR4KG1hYykpOwogCQlyZXR1cm4gLTE7CkBAIC0xOTEsMTEgKzIwNiwyMSBAQAogCQkgICAgIEZfRElTUEFVU0VGUkFNRVMgfCBGX0VOMTUzNkJGUkFNRVMgfAogCQkgICAgIEZfUk1GQ1MgfCBGX0VOSlVNQk8gfCBGX0VOSEFTSE1DQVNUKTsKIAotCWlmICghbWFjaWR4KG1hYykpCisJLyogUmVzdG9yZSB0aGUgRFJPUF9DRkcgKi8KKwl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fQUREUiwgQV9UUF9UWF9EUk9QX0NGR19DSDAgKyBpZHgpOworCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1RQX1BJT19EQVRBLCBzdG9yZSk7CisKKwlpZiAoIWlkeCkKIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX01QU19DRkcsIDAsIEZfUE9SVDBBQ1RJVkUpOwogCWVsc2UKIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX01QU19DRkcsIDAsIEZfUE9SVDFBQ1RJVkUpOwogCisJLyogcmUtZW5hYmxlIG5pYyB0cmFmZmljICovCisJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX01QU19DRkcsIEZfRU5GT1JDRVBLVCwgMSk7CisKKwkvKiAgU2V0OiByZS1lbmFibGUgTklDIHRyYWZmaWMgKi8KKwl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfTVBTX0NGRywgRl9FTkZPUkNFUEtULCAxKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMzYsNyArMjYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZGlzYWJsZV9leGFjdF9maWx0ZXJzKHN0cnVjdCBjbWFjICptYWMpCit2b2lkIHQzX21hY19kaXNhYmxlX2V4YWN0X2ZpbHRlcnMoc3RydWN0IGNtYWMgKm1hYykKIHsKIAl1bnNpZ25lZCBpbnQgaSwgcmVnID0gbWFjLT5vZmZzZXQgKyBBX1hHTV9SWF9FWEFDVF9NQVRDSF9MT1dfMTsKIApAQCAtMjQ3LDcgKzI3Miw3IEBACiAJdDNfcmVhZF9yZWcobWFjLT5hZGFwdGVyLCBBX1hHTV9SWF9FWEFDVF9NQVRDSF9MT1dfMSk7CS8qIGZsdXNoICovCiB9CiAKLXN0YXRpYyB2b2lkIGVuYWJsZV9leGFjdF9maWx0ZXJzKHN0cnVjdCBjbWFjICptYWMpCit2b2lkIHQzX21hY19lbmFibGVfZXhhY3RfZmlsdGVycyhzdHJ1Y3QgY21hYyAqbWFjKQogewogCXVuc2lnbmVkIGludCBpLCByZWcgPSBtYWMtPm9mZnNldCArIEFfWEdNX1JYX0VYQUNUX01BVENIX0hJR0hfMTsKIApAQCAtMzMyLDE4ICszNTcsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fUlhfTUFYX1BLVF9TSVpFICsgbWFjLT5vZmZzZXQsIG10dSk7CiAKLQkvKgotCSAqIEFkanVzdCB0aGUgUEFVU0UgZnJhbWUgd2F0ZXJtYXJrcy4gIFdlIGFsd2F5cyBzZXQgdGhlIExXTSwgYW5kIHRoZQotCSAqIEhXTSBvbmx5IGlmIGZsb3ctY29udHJvbCBpcyBlbmFibGVkLgotCSAqLwotCWh3bSA9IG1heF90KHVuc2lnbmVkIGludCwgTUFDX1JYRklGT19TSVpFIC0gMyAqIG10dSwKLQkJICAgIE1BQ19SWEZJRk9fU0laRSAqIDM4IC8gMTAwKTsKLQlod20gPSBtaW4oaHdtLCBNQUNfUlhGSUZPX1NJWkUgLSA4MTkyKTsKLQlsd20gPSBtaW4oMyAqIChpbnQpbXR1LCBNQUNfUlhGSUZPX1NJWkUgLyA0KTsKLQogCWlmIChhZGFwLT5wYXJhbXMucmV2ID49IFQzX1JFVl9CMiAmJgogCSAgICAodDNfcmVhZF9yZWcoYWRhcCwgQV9YR01fUlhfQ1RSTCArIG1hYy0+b2Zmc2V0KSAmIEZfUlhFTikpIHsKLQkJZGlzYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CisJCXQzX21hY19kaXNhYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKIAkJdiA9IHQzX3JlYWRfcmVnKGFkYXAsIEFfWEdNX1JYX0NGRyArIG1hYy0+b2Zmc2V0KTsKIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1hHTV9SWF9DRkcgKyBtYWMtPm9mZnNldCwKIAkJCQkgRl9FTkhBU0hNQ0FTVCB8IEZfQ09QWUFMTEZSQU1FUywgRl9ESVNCQ0FTVCk7CkBAIC0zNTUsMTQgKzM3MSwxNCBAQAogCQlpZiAodDNfd2FpdF9vcF9kb25lKGFkYXAsIHJlZyArIG1hYy0+b2Zmc2V0LAogCQkJCSAgICBGX1JYRklGT19FTVBUWSwgMSwgMjAsIDUpKSB7CiAJCQl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fUlhfQ0ZHICsgbWFjLT5vZmZzZXQsIHYpOwotCQkJZW5hYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKKwkJCXQzX21hY19lbmFibGVfZXhhY3RfZmlsdGVycyhtYWMpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1hHTV9SWF9NQVhfUEtUX1NJWkUgKyBtYWMtPm9mZnNldCwKIAkJCQkgVl9SWE1BWFBLVFNJWkUoTV9SWE1BWFBLVFNJWkUpLAogCQkJCSBWX1JYTUFYUEtUU0laRShtdHUpKTsKIAkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfWEdNX1JYX0NGRyArIG1hYy0+b2Zmc2V0LCB2KTsKLQkJZW5hYmxlX2V4YWN0X2ZpbHRlcnMobWFjKTsKKwkJdDNfbWFjX2VuYWJsZV9leGFjdF9maWx0ZXJzKG1hYyk7CiAJfSBlbHNlCiAJCXQzX3NldF9yZWdfZmllbGQoYWRhcCwgQV9YR01fUlhfTUFYX1BLVF9TSVpFICsgbWFjLT5vZmZzZXQsCiAJCQkJIFZfUlhNQVhQS1RTSVpFKE1fUlhNQVhQS1RTSVpFKSwKQEAgLTQ1Miw5ICs0NjgsMTIgQEAKIAogCWlmICh3aGljaCAmIE1BQ19ESVJFQ1RJT05fVFgpIHsKIAkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfVFBfUElPX0FERFIsIEFfVFBfVFhfRFJPUF9DRkdfQ0gwICsgaWR4KTsKLQkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfVFBfUElPX0RBVEEsIDB4YzBlZGU0MDEpOworCQl0M193cml0ZV9yZWcoYWRhcCwgQV9UUF9QSU9fREFUQSwKKwkJCSAgICAgYWRhcC0+cGFyYW1zLnJldiA9PSBUM19SRVZfQyA/CisJCQkgICAgIDB4YzRmZmZmMDEgOiAweGMwZWRlNDAxKTsKIAkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfVFBfUElPX0FERFIsIEFfVFBfVFhfRFJPUF9NT0RFKTsKLQkJdDNfc2V0X3JlZ19maWVsZChhZGFwLCBBX1RQX1BJT19EQVRBLCAxIDw8IGlkeCwgMSA8PCBpZHgpOworCQl0M19zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfVFBfUElPX0RBVEEsIDEgPDwgaWR4LAorCQkJCSBhZGFwLT5wYXJhbXMucmV2ID09IFQzX1JFVl9DID8gMCA6IDEgPDwgaWR4KTsKIAogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fVFhfQ1RSTCArIG9mdCwgRl9UWEVOKTsKIApAQCAtNTEwLDE1ICs1MjksMTIgQEAKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IG1hYy0+YWRhcHRlcjsKIAlzdHJ1Y3QgbWFjX3N0YXRzICpzID0gJm1hYy0+c3RhdHM7CiAJdW5zaWduZWQgaW50IHR4X3RjbnQsIHR4X3hjbnQ7Ci0JdW5zaWduZWQgaW50IHR4X21jbnQgPSBzLT50eF9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHJ4X21jbnQgPSBzLT5yeF9mcmFtZXM7Ci0JdW5zaWduZWQgaW50IHJ4X3hjbnQ7CisJdTY0IHR4X21jbnQgPSBzLT50eF9mcmFtZXM7CiAJaW50IHN0YXR1czsKIAogCXN0YXR1cyA9IDA7CiAJdHhfeGNudCA9IDE7CQkvKiBCeSBkZWZhdWx0IHR4X3hjbnQgaXMgbWFraW5nIHByb2dyZXNzICovCiAJdHhfdGNudCA9IG1hYy0+dHhfdGNudDsJLyogSWYgdHhfbWNudCBpcyBwcm9ncmVzc2luZyBpZ25vcmUgdHhfdGNudCAqLwotCXJ4X3hjbnQgPSAxOwkJLyogQnkgZGVmYXVsdCByeF94Y250IGlzIG1ha2luZyBwcm9ncmVzcyAqLwogCWlmICh0eF9tY250ID09IG1hYy0+dHhfbWNudCAmJiBtYWMtPnJ4X3BhdXNlID09IHMtPnJ4X3BhdXNlKSB7CiAJCXR4X3hjbnQgPSAoR19UWFNQSTRTT1BDTlQodDNfcmVhZF9yZWcoYWRhcCwKIAkJCQkJCUFfWEdNX1RYX1NQSTRfU09QX0VPUF9DTlQgKwpAQCAtNTI5LDExICs1NDUsMTEgQEAKIAkJCXR4X3RjbnQgPSAoR19UWERST1BDTlRDSDBSQ1ZEKHQzX3JlYWRfcmVnKGFkYXAsCiAJCQkJCQkgICAgICBBX1RQX1BJT19EQVRBKSkpOwogCQl9IGVsc2UgewotCQkJZ290byByeGNoZWNrOworCQkJZ290byBvdXQ7CiAJCX0KIAl9IGVsc2UgewogCQltYWMtPnRvZ2dsZV9jbnQgPSAwOwotCQlnb3RvIHJ4Y2hlY2s7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmICgodHhfdGNudCAhPSBtYWMtPnR4X3RjbnQpICYmIChtYWMtPnR4X3hjbnQgPT0gMCkpIHsKQEAgLTU0NiwyMyArNTYyLDYgQEAKIAkJfQogCX0gZWxzZSB7CiAJCW1hYy0+dG9nZ2xlX2NudCA9IDA7Ci0JCWdvdG8gcnhjaGVjazsKLQl9Ci0KLXJ4Y2hlY2s6Ci0JaWYgKHJ4X21jbnQgIT0gbWFjLT5yeF9tY250KSB7Ci0JCXJ4X3hjbnQgPSAoR19UWFNQSTRTT1BDTlQodDNfcmVhZF9yZWcoYWRhcCwKLQkJCQkJCUFfWEdNX1JYX1NQSTRfU09QX0VPUF9DTlQgKwotCQkJCQkJbWFjLT5vZmZzZXQpKSkgKwotCQkJCQkJKHMtPnJ4X2ZpZm9fb3ZmbCAtCi0JCQkJCQkgbWFjLT5yeF9vY250KTsKLQkJbWFjLT5yeF9vY250ID0gcy0+cnhfZmlmb19vdmZsOwotCX0gZWxzZQotCQlnb3RvIG91dDsKLQotCWlmIChtYWMtPnJ4X21jbnQgIT0gcy0+cnhfZnJhbWVzICYmIHJ4X3hjbnQgPT0gMCAmJgotCSAgICBtYWMtPnJ4X3hjbnQgPT0gMCkgewotCQlzdGF0dXMgPSAyOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTU3MCw4ICs1NjksNiBAQAogCW1hYy0+dHhfdGNudCA9IHR4X3RjbnQ7CiAJbWFjLT50eF94Y250ID0gdHhfeGNudDsKIAltYWMtPnR4X21jbnQgPSBzLT50eF9mcmFtZXM7Ci0JbWFjLT5yeF94Y250ID0gcnhfeGNudDsKLQltYWMtPnJ4X21jbnQgPSBzLT5yeF9mcmFtZXM7CiAJbWFjLT5yeF9wYXVzZSA9IHMtPnJ4X3BhdXNlOwogCWlmIChzdGF0dXMgPT0gMSkgewogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fVFhfQ1RSTCArIG1hYy0+b2Zmc2V0LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMgYi9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCmluZGV4IDdjZTMwNTMuLjg2MWM4NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvZGVjbGFuY2UuYwpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKIAkJcHJpbnRrKHZlcnNpb24pOwogCiAJaWYgKGJkZXYpCi0JCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzIiwgYmRldi0+YnVzX2lkKTsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMiLCBkZXZfbmFtZShiZGV2KSk7CiAJZWxzZSB7CiAJCWkgPSAwOwogCQlkZXYgPSByb290X2xhbmNlX2RldjsKQEAgLTExMDUsMTAgKzExMDUsMTAgQEAKIAogCQlzdGFydCA9IHRvX3RjX2RldihiZGV2KS0+cmVzb3VyY2Uuc3RhcnQ7CiAJCWxlbiA9IHRvX3RjX2RldihiZGV2KS0+cmVzb3VyY2UuZW5kIC0gc3RhcnQgKyAxOwotCQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCwgbGVuLCBiZGV2LT5idXNfaWQpKSB7CisJCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGRldl9uYW1lKGJkZXYpKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgIiVzOiBVbmFibGUgdG8gcmVzZXJ2ZSBNTUlPIHJlc291cmNlXG4iLAotCQkJICAgICAgIGJkZXYtPmJ1c19pZCk7CisJCQkgICAgICAgZGV2X25hbWUoYmRldikpOwogCQkJcmV0ID0gLUVCVVNZOwogCQkJZ290byBlcnJfb3V0X2RldjsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVmeHguYyBiL2RyaXZlcnMvbmV0L2RlZnh4LmMKaW5kZXggNjQ0NWNlZGQuLjRlYzA1NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlZnh4LmMKKysrIGIvZHJpdmVycy9uZXQvZGVmeHguYwpAQCAtMjkzNyw3ICsyOTM3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgKGludCkoYnAtPnJjdl9idWZzX3RvX3Bvc3QpOyBpKyspCiAJCWZvciAoaiA9IDA7IChpICsgaikgPCAoaW50KVBJX1JDVl9EQVRBX0tfTlVNX0VOVFJJRVM7IGogKz0gYnAtPnJjdl9idWZzX3RvX3Bvc3QpCiAJCXsKLQkJCXN0cnVjdCBza19idWZmICpuZXdza2IgPSBfX2Rldl9hbGxvY19za2IoTkVXX1NLQl9TSVpFLCBHRlBfTk9JTyk7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3c2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIE5FV19TS0JfU0laRSwgR0ZQX05PSU8pOwogCQkJaWYgKCFuZXdza2IpCiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQlicC0+ZGVzY3JfYmxvY2tfdmlydC0+cmN2X2RhdGFbaStqXS5sb25nXzAgPSAodTMyKSAoUElfUkNWX0RFU0NSX01fU09QIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlcGNhLmMgYi9kcml2ZXJzL25ldC9kZXBjYS5jCmluZGV4IGU0Y2VmNDkuLjM1N2Y1NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlcGNhLmMKKysrIGIvZHJpdmVycy9uZXQvZGVwY2EuYwpAQCAtNTY2LDYgKzU2NiwxOCBAQAogICAgIG91dHcoQ1NSMCwgREVQQ0FfQUREUik7XAogICAgIG91dHcoU1RPUCwgREVQQ0FfREFUQSkKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkZXBjYV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZGVwY2Ffb3BlbiwKKwkubmRvX3N0YXJ0X3htaXQgCT0gZGVwY2Ffc3RhcnRfeG1pdCwKKwkubmRvX3N0b3AgCQk9IGRlcGNhX2Nsb3NlLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fZG9faW9jdGwgCQk9IGRlcGNhX2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCAJPSBkZXBjYV90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBkZXBjYV9od19pbml0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRlcGNhX3ByaXZhdGUgKmxwOwpAQCAtNjA2LDggKzYxOCw4IEBACiAJaWYgKCFtZW1fc3RhcnQgfHwgbHAtPmFkYXB0ZXIgPCBERVBDQSB8fCBscC0+YWRhcHRlciA+PXVua25vd24pCiAJCXJldHVybiAtRU5YSU87CiAKLQlwcmludGsgKCIlczogJXMgYXQgMHglMDRseCIsCi0JICAgICAgICBkZXZpY2UtPmJ1c19pZCwgZGVwY2Ffc2lnbmF0dXJlW2xwLT5hZGFwdGVyXSwgaW9hZGRyKTsKKwlwcmludGsoIiVzOiAlcyBhdCAweCUwNGx4IiwKKwkgICAgICAgZGV2X25hbWUoZGV2aWNlKSwgZGVwY2Ffc2lnbmF0dXJlW2xwLT5hZGFwdGVyXSwgaW9hZGRyKTsKIAogCXN3aXRjaCAobHAtPmRlcGNhX2J1cykgewogI2lmZGVmIENPTkZJR19NQ0EKQEAgLTY2OSw3ICs2ODEsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmxwLT5sb2NrKTsKIAlzcHJpbnRmKGxwLT5hZGFwdGVyX25hbWUsICIlcyAoJXMpIiwKLQkJZGVwY2Ffc2lnbmF0dXJlW2xwLT5hZGFwdGVyXSwgZGV2aWNlLT5idXNfaWQpOworCQlkZXBjYV9zaWduYXR1cmVbbHAtPmFkYXB0ZXJdLCBkZXZfbmFtZShkZXZpY2UpKTsKIAlzdGF0dXMgPSAtRUJVU1k7CiAKIAkvKiBJbml0aWFsaXNhdGlvbiBCbG9jayAqLwpAQCAtNzkzLDEyICs4MDUsNyBAQAogCX0KIAogCS8qIFRoZSBERVBDQS1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9ICZkZXBjYV9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmRlcGNhX3N0YXJ0X3htaXQ7Ci0JZGV2LT5zdG9wID0gJmRlcGNhX2Nsb3NlOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmRvX2lvY3RsID0gJmRlcGNhX2lvY3RsOwotCWRldi0+dHhfdGltZW91dCA9IGRlcGNhX3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmRlcGNhX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAKIAlkZXYtPm1lbV9zdGFydCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbTkwMDAuYyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCmluZGV4IGJjZjkyOTEuLjI1NGVjNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RtOTAwMC5jCkBAIC05MzAsMTMgKzkzMCwxNSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CiAJYm9hcmRfaW5mb190ICpkYiA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGludF9zdGF0dXM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCByZWdfc2F2ZTsKIAogCWRtOTAwMF9kYmcoZGIsIDMsICJlbnRlcmluZyAlc1xuIiwgX19mdW5jX18pOwogCiAJLyogQSByZWFsIGludGVycnVwdCBjb21pbmcgKi8KIAotCXNwaW5fbG9jaygmZGItPmxvY2spOworCS8qIGhvbGRlcnMgb2YgZGItPmxvY2sgbXVzdCBhbHdheXMgYmxvY2sgSVJRcyAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOwogCiAJLyogU2F2ZSBwcmV2aW91cyByZWdpc3RlciBhZGRyZXNzICovCiAJcmVnX3NhdmUgPSByZWFkYihkYi0+aW9fYWRkcik7CkBAIC05NzIsNyArOTc0LDcgQEAKIAkvKiBSZXN0b3JlIHByZXZpb3VzIHJlZ2lzdGVyIGFkZHJlc3MgKi8KIAl3cml0ZWIocmVnX3NhdmUsIGRiLT5pb19hZGRyKTsKIAotCXNwaW5fdW5sb2NrKCZkYi0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RuZXQuYyBiL2RyaXZlcnMvbmV0L2RuZXQuYwppbmRleCA1YzM0N2Y3Li5kYjFlMzFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvZG5ldC5jCkBAIC05LDYgKzksNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjEsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlICJkbmV0LmgiCiAKQEAgLTI4MCwxMSArMjgwLDExIEBACiAKIAkvKiBhdHRhY2ggdGhlIG1hYyB0byB0aGUgcGh5ICovCiAJaWYgKGJwLT5jYXBhYmlsaXRpZXMgJiBETkVUX0hBU19STUlJKSB7Ci0JCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCQkJICAgICAmZG5ldF9oYW5kbGVfbGlua19jaGFuZ2UsIDAsCiAJCQkJICAgICBQSFlfSU5URVJGQUNFX01PREVfUk1JSSk7CiAJfSBlbHNlIHsKLQkJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsCisJCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKIAkJCQkgICAgICZkbmV0X2hhbmRsZV9saW5rX2NoYW5nZSwgMCwKIAkJCQkgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwogCX0KQEAgLTkyNyw3ICs5MjcsNyBAQAogCXBoeWRldiA9IGJwLT5waHlfZGV2OwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgogCSAgICAgICAiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCi0JICAgICAgIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsIHBoeWRldi0+aXJxKTsKKwkgICAgICAgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggODZiYjg3Ni4uMDUwNGRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJlMTAwIgogI2RlZmluZSBEUlZfRVhUCQkJIi1OQVBJIgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjMuNS4yMy1rNiJEUlZfRVhUCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMy41LjI0LWsyIkRSVl9FWFQKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiSW50ZWwoUikgUFJPLzEwMCBOZXR3b3JrIERyaXZlciIKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkJIkNvcHlyaWdodChjKSAxOTk5LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24iCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKQEAgLTI0MCw2ICsyNDAsNyBAQAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTMsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTQsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwOTUsIDcpLAorCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwZmUsIDcpLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEyMDksIDApLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEyMjksIDApLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDI0NDksIDIpLApAQCAtMjc1LDYgKzI3Niw3IEBACiAJcGh5XzgyNTYyX2VtID0gMHgwMzIwMDJBOCwKIAlwaHlfODI1NjJfZWsgPSAweDAzMTAwMkE4LAogCXBoeV84MjU2Ml9laCA9IDB4MDE3MDAyQTgsCisJcGh5XzgyNTUyX3YgID0gMHhkMDYxMDA0ZCwKIAlwaHlfdW5rbm93biAgPSAweEZGRkZGRkZGLAogfTsKIApAQCAtOTQzLDYgKzk0NSwyMiBAQAogCiBzdGF0aWMgdm9pZCBtZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBhZGRyLCBpbnQgcmVnLCBpbnQgZGF0YSkKIHsKKwlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgICgobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpICYmIChyZWcgPT0gTUlJX0JNQ1IpICYmCisJICAgICAoZGF0YSAmIChCTUNSX0FOUkVTVEFSVCB8IEJNQ1JfQU5FTkFCTEUpKSkgeworCQl1MTYgYWR2ZXJ0ID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKKworCQkvKgorCQkgKiBXb3JrYXJvdW5kIFNpIGlzc3VlIHdoZXJlIHNvbWV0aW1lcyB0aGUgcGFydCB3aWxsIG5vdAorCQkgKiBhdXRvbmVnIHRvIDEwME1icHMgZXZlbiB3aGVuIGFkdmVydGlzZWQuCisJCSAqLworCQlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEZVTEwpCisJCQlkYXRhIHw9IEJNQ1JfU1BFRUQxMDAgfCBCTUNSX0ZVTExEUExYOworCQllbHNlIGlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwSEFMRikKKwkJCWRhdGEgfD0gQk1DUl9TUEVFRDEwMDsKKwl9CisKIAltZGlvX2N0cmwobmV0ZGV2X3ByaXYobmV0ZGV2KSwgYWRkciwgbWRpX3dyaXRlLCByZWcsIGRhdGEpOwogfQogCkBAIC0xMjc2LDE2ICsxMjk0LDEyIEBACiAJaWYgKGFkZHIgPT0gMzIpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JLyogU2VsZWN0ZWQgdGhlIHBoeSBhbmQgaXNvbGF0ZSB0aGUgcmVzdCAqLwotCWZvciAoYWRkciA9IDA7IGFkZHIgPCAzMjsgYWRkcisrKSB7Ci0JCWlmIChhZGRyICE9IG5pYy0+bWlpLnBoeV9pZCkgewotCQkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOwotCQl9IGVsc2UgewotCQkJYm1jciA9IG1kaW9fcmVhZChuZXRkZXYsIGFkZHIsIE1JSV9CTUNSKTsKLQkJCW1kaW9fd3JpdGUobmV0ZGV2LCBhZGRyLCBNSUlfQk1DUiwKLQkJCQlibWNyICYgfkJNQ1JfSVNPTEFURSk7Ci0JCX0KLQl9CisJLyogSXNvbGF0ZSBhbGwgdGhlIFBIWSBpZHMgKi8KKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgMzI7IGFkZHIrKykKKwkJbWRpb193cml0ZShuZXRkZXYsIGFkZHIsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUpOworCS8qIFNlbGVjdCB0aGUgZGlzY292ZXJlZCBQSFkgKi8KKwlibWNyICY9IH5CTUNSX0lTT0xBVEU7CisJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOwogCiAJLyogR2V0IHBoeSBJRCAqLwogCWlkX2xvID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfUEhZU0lEMSk7CkBAIC0xMzAzLDcgKzEzMTcsMTggQEAKIAkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX05TQ19DT05HLCBjb25nKTsKIAl9CiAKLQlpZiAoKG5pYy0+bWFjID49IG1hY184MjU1MF9EMTAyKSB8fCAoKG5pYy0+ZmxhZ3MgJiBpY2gpICYmCisJaWYgKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSB7CisJCXUxNiBhZHZlcnQgPSBtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOworCisJCS8qIFdvcmthcm91bmQgU2kgbm90IGFkdmVydGlzaW5nIGZsb3ctY29udHJvbCBkdXJpbmcgYXV0b25lZyAqLworCQlhZHZlcnQgfD0gQURWRVJUSVNFX1BBVVNFX0NBUCB8IEFEVkVSVElTRV9QQVVTRV9BU1lNOworCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLCBhZHZlcnQpOworCisJCS8qIFJlc2V0IGZvciB0aGUgYWJvdmUgY2hhbmdlcyB0byB0YWtlIGVmZmVjdCAqLworCQlibWNyID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfQk1DUik7CisJCWJtY3IgfD0gQk1DUl9SRVNFVDsKKwkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIGJtY3IpOworCX0gZWxzZSBpZiAoKG5pYy0+bWFjID49IG1hY184MjU1MF9EMTAyKSB8fCAoKG5pYy0+ZmxhZ3MgJiBpY2gpICYmCiAJICAgKG1kaW9fcmVhZChuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX1RQSVNUQVRVUykgJiAweDgwMDApICYmCiAJCSEobmljLT5lZXByb21bZWVwcm9tX2NuZmdfbWRpeF0gJiBlZXByb21fbWRpeF9lbmFibGVkKSkpIHsKIAkJLyogZW5hYmxlL2Rpc2FibGUgTURJL01ESS1YIGF1dG8tc3dpdGNoaW5nLiAqLwpAQCAtMTk0NCw5ICsxOTY5LDkgQEAKIAlpZiAoc3RhdF9hY2sgJiBzdGF0X2Fja19ybnIpCiAJCW5pYy0+cnVfcnVubmluZyA9IFJVX1NVU1BFTkRFRDsKIAotCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmbmljLT5uYXBpKSkpIHsKKwlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmbmljLT5uYXBpKSkpIHsKIAkJZTEwMF9kaXNhYmxlX2lycShuaWMpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZuaWMtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJm5pYy0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTk2Miw3ICsxOTg3LDcgQEAKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWUxMDBfZW5hYmxlX2lycShuaWMpOwogCX0KIApAQCAtMjEzNCw2ICsyMTU5LDkgQEAKIH0KIAogI2RlZmluZSBNSUlfTEVEX0NPTlRST0wJMHgxQgorI2RlZmluZSBFMTAwXzgyNTUyX0xFRF9PVkVSUklERSAweDE5CisjZGVmaW5lIEUxMDBfODI1NTJfTEVEX09OICAgICAgIDB4MDAwRiAvKiBMRURUWCBhbmQgTEVEX1JYIGJvdGggb24gKi8KKyNkZWZpbmUgRTEwMF84MjU1Ml9MRURfT0ZGICAgICAgMHgwMDBBIC8qIExFRFRYIGFuZCBMRURfUlggYm90aCBvZmYgKi8KIHN0YXRpYyB2b2lkIGUxMDBfYmxpbmtfbGVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSAoc3RydWN0IG5pYyAqKWRhdGE7CkBAIC0yMTQzLDEwICsyMTcxLDE5IEBACiAJCWxlZF9vbl81NTkgPSAweDA1LAogCQlsZWRfb25fNTU3ID0gMHgwNywKIAl9OworCXUxNiBsZWRfcmVnID0gTUlJX0xFRF9DT05UUk9MOwogCi0JbmljLT5sZWRzID0gKG5pYy0+bGVkcyAmIGxlZF9vbikgPyBsZWRfb2ZmIDoKLQkJKG5pYy0+bWFjIDwgbWFjXzgyNTU5X0QxMDFNKSA/IGxlZF9vbl81NTcgOiBsZWRfb25fNTU5OwotCW1kaW9fd3JpdGUobmljLT5uZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0xFRF9DT05UUk9MLCBuaWMtPmxlZHMpOworCWlmIChuaWMtPnBoeSA9PSBwaHlfODI1NTJfdikgeworCQlsZWRfcmVnID0gRTEwMF84MjU1Ml9MRURfT1ZFUlJJREU7CisKKwkJbmljLT5sZWRzID0gKG5pYy0+bGVkcyA9PSBFMTAwXzgyNTUyX0xFRF9PTikgPworCQkgICAgICAgICAgICBFMTAwXzgyNTUyX0xFRF9PRkYgOiBFMTAwXzgyNTUyX0xFRF9PTjsKKwl9IGVsc2UgeworCQluaWMtPmxlZHMgPSAobmljLT5sZWRzICYgbGVkX29uKSA/IGxlZF9vZmYgOgorCQkgICAgICAgICAgICAobmljLT5tYWMgPCBtYWNfODI1NTlfRDEwMU0pID8gbGVkX29uXzU1NyA6CisJCSAgICAgICAgICAgIGxlZF9vbl81NTk7CisJfQorCW1kaW9fd3JpdGUobmljLT5uZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgbGVkX3JlZywgbmljLT5sZWRzKTsKIAltb2RfdGltZXIoJm5pYy0+YmxpbmtfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOwogfQogCkBAIC0yMzc1LDEzICsyNDEyLDE1IEBACiBzdGF0aWMgaW50IGUxMDBfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgbmljICpuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUxNiBsZWRfcmVnID0gKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSA/IEUxMDBfODI1NTJfTEVEX09WRVJSSURFIDoKKwkgICAgICAgICAgICAgIE1JSV9MRURfQ09OVFJPTDsKIAogCWlmICghZGF0YSB8fCBkYXRhID4gKHUzMikoTUFYX1NDSEVEVUxFX1RJTUVPVVQgLyBIWikpCiAJCWRhdGEgPSAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKTsKIAltb2RfdGltZXIoJm5pYy0+YmxpbmtfdGltZXIsIGppZmZpZXMpOwogCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiAxMDAwKTsKIAlkZWxfdGltZXJfc3luYygmbmljLT5ibGlua190aW1lcik7Ci0JbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX0xFRF9DT05UUk9MLCAwKTsKKwltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBsZWRfcmVnLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjY4Niw2ICsyNzI1LDkgQEAKIAl9CiB9CiAKKyNkZWZpbmUgRTEwMF84MjU1Ml9TTUFSVFNQRUVEICAgMHgxNCAgIC8qIFNtYXJ0U3BlZWQgQ3RybCByZWdpc3RlciAqLworI2RlZmluZSBFMTAwXzgyNTUyX1JFVl9BTkVHICAgICAweDAyMDAgLyogUmV2ZXJzZSBhdXRvLW5lZ290aWF0aW9uICovCisjZGVmaW5lIEUxMDBfODI1NTJfQU5FR19OT1cgICAgIDB4MDQwMCAvKiBBdXRvLW5lZ290aWF0ZSBub3cgKi8KIHN0YXRpYyBpbnQgZTEwMF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTI2OTgsNiArMjc0MCwxNSBAQAogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCiAJaWYgKChuaWMtPmZsYWdzICYgd29sX21hZ2ljKSB8IGUxMDBfYXNmKG5pYykpIHsKKwkJLyogZW5hYmxlIHJldmVyc2UgYXV0by1uZWdvdGlhdGlvbiAqLworCQlpZiAobmljLT5waHkgPT0gcGh5XzgyNTUyX3YpIHsKKwkJCXUxNiBzbWFydHNwZWVkID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVEKTsKKworCQkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwKKwkJCSAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVELCBzbWFydHNwZWVkIHwKKwkJCSAgICAgICAgICAgRTEwMF84MjU1Ml9SRVZfQU5FRyB8IEUxMDBfODI1NTJfQU5FR19OT1cpOworCQl9CiAJCWlmIChwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgdHJ1ZSkpCiAJCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCB0cnVlKTsKIAl9IGVsc2UgewpAQCAtMjcyMSw2ICsyNzcyLDE2IEBACiAJLyogYWNrIGFueSBwZW5kaW5nIHdha2UgZXZlbnRzLCBkaXNhYmxlIFBNRSAqLwogCXBjaV9lbmFibGVfd2FrZShwZGV2LCAwLCAwKTsKIAorCS8qIGRpc2JhbGUgcmV2ZXJzZSBhdXRvLW5lZ290aWF0aW9uICovCisJaWYgKG5pYy0+cGh5ID09IHBoeV84MjU1Ml92KSB7CisJCXUxNiBzbWFydHNwZWVkID0gbWRpb19yZWFkKG5ldGRldiwgbmljLT5taWkucGh5X2lkLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwXzgyNTUyX1NNQVJUU1BFRUQpOworCisJCW1kaW9fd3JpdGUobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsCisJCSAgICAgICAgICAgRTEwMF84MjU1Ml9TTUFSVFNQRUVELAorCQkgICAgICAgICAgIHNtYXJ0c3BlZWQgJiB+KEUxMDBfODI1NTJfUkVWX0FORUcpKTsKKwl9CisKIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKIAkJZTEwMF91cChuaWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKaW5kZXggZjU1ODFkZS4uZTlhNDE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCkBAIC0xODIsNyArMTgyLDYgQEAKIAkvKiBhcnJheSBvZiBidWZmZXIgaW5mb3JtYXRpb24gc3RydWN0cyAqLwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCi0Jc3BpbmxvY2tfdCB0eF9sb2NrOwogCXUxNiB0ZGg7CiAJdTE2IHRkdDsKIAlib29sIGxhc3RfdHhfdHNvOwpAQCAtMjM4LDcgKzIzNyw2IEBACiAJdTE2IGxpbmtfc3BlZWQ7CiAJdTE2IGxpbmtfZHVwbGV4OwogCXNwaW5sb2NrX3Qgc3RhdHNfbG9jazsKLQlzcGlubG9ja190IHR4X3F1ZXVlX2xvY2s7CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzOwogCXVuc2lnbmVkIGludCB0b3RhbF90eF9wYWNrZXRzOwogCXVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCA2YmQ2M2NjLi45M2I4NjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC01NzcsMTIgKzU3NywzMCBAQAogCiB2b2lkIGUxMDAwX2Rvd24oc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXUzMiByY3RsLCB0Y3RsOwogCiAJLyogc2lnbmFsIHRoYXQgd2UncmUgZG93biBzbyB0aGUgaW50ZXJydXB0IGhhbmRsZXIgZG9lcyBub3QKIAkgKiByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0aW1lciAqLwogCXNldF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpOwogCisJLyogZGlzYWJsZSByZWNlaXZlcyBpbiB0aGUgaGFyZHdhcmUgKi8KKwlyY3RsID0gZXIzMihSQ1RMKTsKKwlldzMyKFJDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CisJLyogZmx1c2ggYW5kIHNsZWVwIGJlbG93ICovCisKKwkvKiBjYW4gYmUgbmV0aWZfdHhfZGlzYWJsZSB3aGVuIE5FVElGX0ZfTExUWCBpcyByZW1vdmVkICovCisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJLyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlICovCisJdGN0bCA9IGVyMzIoVENUTCk7CisJdGN0bCAmPSB+RTEwMDBfVENUTF9FTjsKKwlldzMyKFRDVEwsIHRjdGwpOworCS8qIGZsdXNoIGJvdGggZGlzYWJsZXMgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoICovCisJRTEwMDBfV1JJVEVfRkxVU0goKTsKKwltc2xlZXAoMTApOworCiAJbmFwaV9kaXNhYmxlKCZhZGFwdGVyLT5uYXBpKTsKIAogCWUxMDAwX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwpAQCAtNTk1LDcgKzYxMyw2IEBACiAJYWRhcHRlci0+bGlua19zcGVlZCA9IDA7CiAJYWRhcHRlci0+bGlua19kdXBsZXggPSAwOwogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCiAJZTEwMDBfcmVzZXQoYWRhcHRlcik7CiAJZTEwMDBfY2xlYW5fYWxsX3R4X3JpbmdzKGFkYXB0ZXIpOwpAQCAtMTA0OCw4ICsxMDY1LDYgQEAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExUWDsKLQogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CkBAIC0xMzY4LDggKzEzODMsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfcXVldWVfbG9jayk7Ci0KIAkvKiBFeHBsaWNpdGx5IGRpc2FibGUgSVJRIHNpbmNlIHRoZSBOSUMgY2FuIGJlIGluIGFueSBzdGF0ZS4gKi8KIAllMTAwMF9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIApAQCAtMTYyNCw3ICsxNjM3LDYgQEAKIAogCXR4ZHItPm5leHRfdG9fdXNlID0gMDsKIAl0eGRyLT5uZXh0X3RvX2NsZWFuID0gMDsKLQlzcGluX2xvY2tfaW5pdCgmdHhkci0+dHhfbG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4ODIsOCArMTg5NCw2IEBACiAgKiBlMTAwMF9zZXR1cF9yY3RsIC0gY29uZmlndXJlIHRoZSByZWNlaXZlIGNvbnRyb2wgcmVnaXN0ZXJzCiAgKiBAYWRhcHRlcjogQm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqKi8KLSNkZWZpbmUgUEFHRV9VU0VfQ09VTlQoUykgKCgoUykgPj4gUEFHRV9TSElGVCkgKyBcCi0JCQkoKChTKSAmIChQQUdFX1NJWkUgLSAxKSkgPyAxIDogMCkpCiBzdGF0aWMgdm9pZCBlMTAwMF9zZXR1cF9yY3RsKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CkBAIC0yMDU2LDE3ICsyMDY2LDE0IEBACiBzdGF0aWMgdm9pZCBlMTAwMF91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgICBzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbykKIHsKLQlpZiAoYnVmZmVyX2luZm8tPmRtYSkgewotCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCWJ1ZmZlcl9pbmZvLT5kbWEsCi0JCQkJYnVmZmVyX2luZm8tPmxlbmd0aCwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiAJLyogYnVmZmVyX2luZm8gbXVzdCBiZSBjb21wbGV0ZWx5IHNldCB1cCBpbiB0aGUgdHJhbnNtaXQgcGF0aCAqLwogfQogCkBAIC0yODY1LDExICsyODcyLDExIEBACiAJCXJldHVybiBmYWxzZTsKIAogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCiAJCQljbWRfbGVuIHw9IEUxMDAwX1RYRF9DTURfVENQOwogCQlicmVhazsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJLyogWFhYIG5vdCBoYW5kbGluZyBhbGwgSVBWNiBoZWFkZXJzICovCiAJCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IElQUFJPVE9fVENQKQogCQkJY21kX2xlbiB8PSBFMTAwMF9UWERfQ01EX1RDUDsKQEAgLTI5MTUsMTMgKzI5MjIsMjEgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwotCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMCwgc2l6ZSwgY291bnQgPSAwLCBpOworCXVuc2lnbmVkIGludCBsZW4gPSBza2JfaGVhZGxlbihza2IpOworCXVuc2lnbmVkIGludCBvZmZzZXQsIHNpemUsIGNvdW50ID0gMCwgaTsKIAl1bnNpZ25lZCBpbnQgZjsKLQlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKKwlkbWFfYWRkcl90ICptYXA7CiAKIAlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CiAKKwlpZiAoc2tiX2RtYV9tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgc2tiLCBETUFfVE9fREVWSUNFKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJUWCBETUEgbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCW1hcCA9IHNrYl9zaGluZm8oc2tiKS0+ZG1hX21hcHM7CisJb2Zmc2V0ID0gMDsKKwogCXdoaWxlIChsZW4pIHsKIAkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCXNpemUgPSBtaW4obGVuLCBtYXhfcGVyX3R4ZCk7CkBAIC0yOTU2LDE4ICsyOTcxLDE4IEBACiAJCQlzaXplIC09IDQ7CiAKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPQotCQkJcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKLQkJCQlza2ItPmRhdGEgKyBvZmZzZXQsCi0JCQkJc2l6ZSwKLQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFswXSArIG9mZnNldDsKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CiAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwogCQljb3VudCsrOwotCQlpZiAodW5saWtlbHkoKytpID09IHR4X3JpbmctPmNvdW50KSkgaSA9IDA7CisJCWlmIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmICh1bmxpa2VseShpID09IHR4X3JpbmctPmNvdW50KSkKKwkJCQlpID0gMDsKKwkJfQogCX0KIAogCWZvciAoZiA9IDA7IGYgPCBucl9mcmFnczsgZisrKSB7CkBAIC0yOTc1LDkgKzI5OTAsMTMgQEAKIAogCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl07CiAJCWxlbiA9IGZyYWctPnNpemU7Ci0JCW9mZnNldCA9IGZyYWctPnBhZ2Vfb2Zmc2V0OworCQlvZmZzZXQgPSAwOwogCiAJCXdoaWxlIChsZW4pIHsKKwkJCWkrKzsKKwkJCWlmICh1bmxpa2VseShpID09IHR4X3JpbmctPmNvdW50KSkKKwkJCQlpID0gMDsKKwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQlzaXplID0gbWluKGxlbiwgbWF4X3Blcl90eGQpOwogCQkJLyogV29ya2Fyb3VuZCBmb3IgcHJlbWF0dXJlIGRlc2Mgd3JpdGUtYmFja3MKQEAgLTI5OTMsMjMgKzMwMTIsMTYgQEAKIAkJCQlzaXplIC09IDQ7CiAKIAkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCWZyYWctPnBhZ2UsCi0JCQkJCW9mZnNldCwKLQkJCQkJc2l6ZSwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQlidWZmZXJfaW5mby0+ZG1hID0gbWFwW2YgKyAxXSArIG9mZnNldDsKIAkJCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKIAogCQkJbGVuIC09IHNpemU7CiAJCQlvZmZzZXQgKz0gc2l6ZTsKIAkJCWNvdW50Kys7Ci0JCQlpZiAodW5saWtlbHkoKytpID09IHR4X3JpbmctPmNvdW50KSkgaSA9IDA7CiAJCX0KIAl9CiAKLQlpID0gKGkgPT0gMCkgPyB0eF9yaW5nLT5jb3VudCAtIDEgOiBpIC0gMTsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC0zMTg1LDcgKzMxOTcsNiBAQAogCXVuc2lnbmVkIGludCBtYXhfdHhkX3B3ciA9IEUxMDAwX01BWF9UWERfUFdSOwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBucl9mcmFnczsKIAl1bnNpZ25lZCBpbnQgbXNzOwogCWludCBjb3VudCA9IDA7CkBAIC0zMjkwLDIyICszMzAxLDE1IEBACiAJICAgIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpKQogCQllMTAwMF90cmFuc2Zlcl9kaGNwX2luZm8oYWRhcHRlciwgc2tiKTsKIAotCWlmICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKSkKLQkJLyogQ29sbGlzaW9uIC0gdGVsbCB1cHBlciBsYXllciB0byByZXF1ZXVlICovCi0JCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwotCiAJLyogbmVlZDogY291bnQgKyAyIGRlc2MgZ2FwIHRvIGtlZXAgdGFpbCBmcm9tIHRvdWNoaW5nCiAJICogaGVhZCwgb3RoZXJ3aXNlIHRyeSBuZXh0IHRpbWUgKi8KLQlpZiAodW5saWtlbHkoZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIGNvdW50ICsgMikpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkoZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIGNvdW50ICsgMikpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQogCiAJaWYgKHVubGlrZWx5KGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykpIHsKIAkJaWYgKHVubGlrZWx5KGUxMDAwXzgyNTQ3X2ZpZm9fd29ya2Fyb3VuZChhZGFwdGVyLCBza2IpKSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT50eF9maWZvX3N0YWxsX3RpbWVyLCBqaWZmaWVzICsgMSk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0eF9yaW5nLT50eF9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJCX0KIAl9CkBAIC0zMzIwLDcgKzMzMjQsNiBAQAogCXRzbyA9IGUxMDAwX3RzbyhhZGFwdGVyLCB0eF9yaW5nLCBza2IpOwogCWlmICh0c28gPCAwKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnR4X3JpbmctPnR4X2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKQEAgLTMzMzYsMTYgKzMzMzksMjEgQEAKIAlpZiAobGlrZWx5KHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSkKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfSVBWNDsKIAotCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLAotCSAgICAgICAgICAgICAgIGUxMDAwX3R4X21hcChhZGFwdGVyLCB0eF9yaW5nLCBza2IsIGZpcnN0LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfcGVyX3R4ZCwgbnJfZnJhZ3MsIG1zcykpOworCWNvdW50ID0gZTEwMDBfdHhfbWFwKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgZmlyc3QsIG1heF9wZXJfdHhkLAorCSAgICAgICAgICAgICAgICAgICAgIG5yX2ZyYWdzLCBtc3MpOwogCi0JbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJaWYgKGNvdW50KSB7CisJCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLCBjb3VudCk7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBNQVhfU0tCX0ZSQUdTICsgMik7CiAKLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCi0JZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIE1BWF9TS0JfRlJBR1MgKyAyKTsKKwl9IGVsc2UgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gZmlyc3Q7CisJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHhfcmluZy0+dHhfbG9jaywgZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTM2ODcsMTIgKzM2OTUsMTIgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSkgeworCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkpIHsKIAkJYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfSBlbHNlCiAJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CiAKQEAgLTM3NDcsMTYgKzM3NTUsMTggQEAKIAkJZXczMihJTUMsIH4wKTsKIAkJRTEwMDBfV1JJVEVfRkxVU0goKTsKIAl9Ci0JaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkpIHsKKwlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpKSB7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfdHhfcGFja2V0cyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X2J5dGVzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfcGFja2V0cyA9IDA7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOwotCX0gZWxzZQorCQlfX25hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCX0gZWxzZSB7CiAJCS8qIHRoaXMgcmVhbGx5IHNob3VsZCBub3QgaGFwcGVuISBpZiBpdCBkb2VzIGl0IGlzIGJhc2ljYWxseSBhCiAJCSAqIGJ1ZywgYnV0IG5vdCBhIGhhcmQgZXJyb3IsIHNvIGVuYWJsZSBpbnRzIGFuZCBjb250aW51ZSAqLwotCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkKKwkJCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMzc3MywyOCArMzc4MywyMSBAQAogCiAJYWRhcHRlciA9IG5ldGRldl9wcml2KHBvbGxfZGV2KTsKIAotCS8qIGUxMDAwX2NsZWFuIGlzIGNhbGxlZCBwZXItY3B1LiAgVGhpcyBsb2NrIHByb3RlY3RzCi0JICogdHhfcmluZ1swXSBmcm9tIGJlaW5nIGNsZWFuZWQgYnkgbXVsdGlwbGUgY3B1cwotCSAqIHNpbXVsdGFuZW91c2x5LiAgQSBmYWlsdXJlIG9idGFpbmluZyB0aGUgbG9jayBtZWFucwotCSAqIHR4X3JpbmdbMF0gaXMgY3VycmVudGx5IGJlaW5nIGNsZWFuZWQgYW55d2F5LiAqLwotCWlmIChzcGluX3RyeWxvY2soJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spKSB7Ci0JCXR4X2NsZWFuZWQgPSBlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlciwKLQkJCQkJCSZhZGFwdGVyLT50eF9yaW5nWzBdKTsKLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwotCX0KKwl0eF9jbGVhbmVkID0gZTEwMDBfY2xlYW5fdHhfaXJxKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nWzBdKTsKIAogCWFkYXB0ZXItPmNsZWFuX3J4KGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nWzBdLAogCSAgICAgICAgICAgICAgICAgICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQlpZiAodHhfY2xlYW5lZCkKKwlpZiAoIXR4X2NsZWFuZWQpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJaWYgKGxpa2VseShhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpKQogCQkJZTEwMDBfc2V0X2l0cihhZGFwdGVyKTsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCWUxMDAwX2lycV9lbmFibGUoYWRhcHRlcik7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQorCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKIAl9CiAKIAlyZXR1cm4gd29ya19kb25lOwpAQCAtMzgxMywxNSArMzgxNiwxNiBAQAogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpLCBlb3A7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwlib29sIGNsZWFuZWQ7CiAJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzPTAsIHRvdGFsX3R4X3BhY2tldHM9MDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwogCi0Jd2hpbGUgKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSB7Ci0JCWZvciAoY2xlYW5lZCA9IGZhbHNlOyAhY2xlYW5lZDsgKSB7CisJd2hpbGUgKChlb3BfZGVzYy0+dXBwZXIuZGF0YSAmIGNwdV90b19sZTMyKEUxMDAwX1RYRF9TVEFUX0REKSkgJiYKKwkgICAgICAgKGNvdW50IDwgdHhfcmluZy0+Y291bnQpKSB7CisJCWZvciAoY2xlYW5lZCA9IGZhbHNlOyAhY2xlYW5lZDsgY291bnQrKykgewogCQkJdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0MoKnR4X3JpbmcsIGkpOwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQljbGVhbmVkID0gKGkgPT0gZW9wKTsKQEAgLTM4NDQsMTAgKzM4NDgsNiBAQAogCiAJCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJCWVvcF9kZXNjID0gRTEwMDBfVFhfREVTQygqdHhfcmluZywgZW9wKTsKLSNkZWZpbmUgRTEwMDBfVFhfV0VJR0hUIDY0Ci0JCS8qIHdlaWdodCBvZiBhIHNvcnQgZm9yIHR4LCB0byBhdm9pZCBlbmRsZXNzIHRyYW5zbWl0IGNsZWFudXAgKi8KLQkJaWYgKGNvdW50KysgPT0gRTEwMDBfVFhfV0VJR0hUKQotCQkJYnJlYWs7CiAJfQogCiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7CkBAIC0zODY5LDggKzM4NjksOCBAQAogCQkvKiBEZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCiAJCSAqIGNoZWNrIHdpdGggdGhlIGNsZWFyaW5nIG9mIHRpbWVfc3RhbXAgYW5kIG1vdmVtZW50IG9mIGkgKi8KIAkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCi0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArCisJCWlmICh0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wICYmCisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnRpbWVfc3RhbXAgKwogCQkgICAgICAgICAgICAgICAoYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgKiBIWikpCiAJCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIApAQCAtMzg5Miw3ICszODkyLDcgQEAKIAkJCQlyZWFkbChody0+aHdfYWRkciArIHR4X3JpbmctPnRkdCksCiAJCQkJdHhfcmluZy0+bmV4dF90b191c2UsCiAJCQkJdHhfcmluZy0+bmV4dF90b19jbGVhbiwKLQkJCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAsCisJCQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCwKIAkJCQllb3AsCiAJCQkJamlmZmllcywKIAkJCQllb3BfZGVzYy0+dXBwZXIuZmllbGRzLnN0YXR1cyk7CkBAIC0zOTAzLDcgKzM5MDMsNyBAQAogCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKIAlhZGFwdGVyLT5uZXRfc3RhdHMudHhfYnl0ZXMgKz0gdG90YWxfdHhfYnl0ZXM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X3BhY2tldHMgKz0gdG90YWxfdHhfcGFja2V0czsKLQlyZXR1cm4gY2xlYW5lZDsKKwlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+Y291bnQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jIGIvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMKaW5kZXggMDg5MDE2Mi4uNmMwMWEyMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS84MjU3MS5jCkBAIC00MCw2ICs0MCw3IEBACiAgKiA4MjU3M0UgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyIChDb3BwZXIpCiAgKiA4MjU3M0wgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyCiAgKiA4MjU3NEwgR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KKyAqIDgyNTgzViBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KQEAgLTYxLDYgKzYyLDcgQEAKIHN0YXRpYyBzMzIgZTEwMDBfZ2V0X3BoeV9pZF84MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgZTEwMDBfc2V0dXBfY29wcGVyX2xpbmtfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX3NldHVwX2ZpYmVyX3NlcmRlc19saW5rXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMzMiBlMTAwMF9jaGVja19mb3Jfc2VyZGVzX2xpbmtfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzdGF0aWMgczMyIGUxMDAwX3dyaXRlX252bV9lZXdyXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsCiAJCQkJICAgICAgdTE2IHdvcmRzLCB1MTYgKmRhdGEpOwogc3RhdGljIHMzMiBlMTAwMF9maXhfbnZtX2NoZWNrc3VtXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpOwpAQCAtOTksNiArMTAxLDcgQEAKIAkJcGh5LT50eXBlCQkgPSBlMTAwMF9waHlfbTg4OwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXBoeS0+dHlwZQkJID0gZTEwMDBfcGh5X2JtOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMTIxLDYgKzEyNCw3IEBACiAJCQlyZXR1cm4gLUUxMDAwX0VSUl9QSFk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJaWYgKHBoeS0+aWQgIT0gQk1FMTAwMF9FX1BIWV9JRF9SMikKIAkJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKIAkJYnJlYWs7CkBAIC0xNjQsNiArMTY4LDcgQEAKIAlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzM6CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlpZiAoKChlZWNkID4+IDE1KSAmIDB4MykgPT0gMHgzKSB7CiAJCQludm0tPnR5cGUgPSBlMTAwMF9udm1fZmxhc2hfaHc7CiAJCQludm0tPndvcmRfc2l6ZSA9IDIwNDg7CkBAIC0yNTAsNyArMjU1LDcgQEAKIAljYXNlIGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzOgogCQlmdW5jLT5zZXR1cF9waHlzaWNhbF9pbnRlcmZhY2UgPQogCQkJZTEwMDBfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmtfODI1NzE7Ci0JCWZ1bmMtPmNoZWNrX2Zvcl9saW5rID0gZTEwMDBlX2NoZWNrX2Zvcl9zZXJkZXNfbGluazsKKwkJZnVuYy0+Y2hlY2tfZm9yX2xpbmsgPSBlMTAwMF9jaGVja19mb3Jfc2VyZGVzX2xpbmtfODI1NzE7CiAJCWZ1bmMtPmdldF9saW5rX3VwX2luZm8gPQogCQkJZTEwMDBlX2dldF9zcGVlZF9hbmRfZHVwbGV4X2ZpYmVyX3NlcmRlczsKIAkJYnJlYWs7CkBAIC0yNjEsNiArMjY2LDcgQEAKIAogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlmdW5jLT5jaGVja19tbmdfbW9kZSA9IGUxMDAwX2NoZWNrX21uZ19tb2RlXzgyNTc0OwogCQlmdW5jLT5sZWRfb24gPSBlMTAwMF9sZWRfb25fODI1NzQ7CiAJCWJyZWFrOwpAQCAtMzc0LDYgKzM4MCw3IEBACiAJCXJldHVybiBlMTAwMGVfZ2V0X3BoeV9pZChodyk7CiAJCWJyZWFrOwogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcmV0X3ZhbCA9IGUxZV9ycGh5KGh3LCBQSFlfSUQxLCAmcGh5X2lkKTsKIAkJaWYgKHJldF92YWwpCiAJCQlyZXR1cm4gcmV0X3ZhbDsKQEAgLTQ2Myw4ICs0NzAsMTUgQEAKIAlpZiAocmV0X3ZhbCkKIAkJcmV0dXJuIHJldF92YWw7CiAKLQlpZiAoaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTczICYmIGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NCkKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgorCQlicmVhazsKKwlkZWZhdWx0OgogCQlyZXRfdmFsID0gZTEwMDBlX2FjcXVpcmVfbnZtKGh3KTsKKwkJYnJlYWs7CisJfQogCiAJaWYgKHJldF92YWwpCiAJCWUxMDAwX3B1dF9od19zZW1hcGhvcmVfODI1NzEoaHcpOwpAQCAtNTA0LDYgKzUxOCw3IEBACiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTczOgogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAkJcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX252bV9lZXdyXzgyNTcxKGh3LCBvZmZzZXQsIHdvcmRzLCBkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3MToKQEAgLTc3OCw3ICs3OTMsMTAgQEAKIAkgKiBNdXN0IGFjcXVpcmUgdGhlIE1ESU8gb3duZXJzaGlwIGJlZm9yZSBNQUMgcmVzZXQuCiAJICogT3duZXJzaGlwIGRlZmF1bHRzIHRvIGZpcm13YXJlIGFmdGVyIGEgcmVzZXQuCiAJICovCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlleHRjbmZfY3RybCA9IGVyMzIoRVhUQ05GX0NUUkwpOwogCQlleHRjbmZfY3RybCB8PSBFMTAwMF9FWFRDTkZfQ1RSTF9NRElPX1NXX09XTkVSU0hJUDsKIApAQCAtNzk0LDYgKzgxMiw5IEBACiAJCQltc2xlZXAoMik7CiAJCQlpKys7CiAJCX0gd2hpbGUgKGkgPCBNRElPX09XTkVSU0hJUF9USU1FT1VUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJY3RybCA9IGVyMzIoQ1RSTCk7CkBAIC04MTksOCArODQwLDE2IEBACiAJICogTmVlZCB0byB3YWl0IGZvciBQaHkgY29uZmlndXJhdGlvbiBjb21wbGV0aW9uIGJlZm9yZSBhY2Nlc3NpbmcKIAkgKiBOVk0gYW5kIFBoeS4KIAkgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkKKworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCW1zbGVlcCgyNSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KIAogCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdCBldmVudHMuICovCiAJZXczMihJTUMsIDB4ZmZmZmZmZmYpOwpAQCAtODMwLDYgKzg1OSwxMCBAQAogCQlody0+ZGV2X3NwZWMuZTgyNTcxLmFsdF9tYWNfYWRkcl9pc19wcmVzZW50KQogCQkJZTEwMDBlX3NldF9sYWFfc3RhdGVfODI1NzEoaHcsIHRydWUpOwogCisJLyogUmVpbml0aWFsaXplIHRoZSA4MjU3MSBzZXJkZXMgbGluayBzdGF0ZSBtYWNoaW5lICovCisJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykKKwkJaHctPm1hYy5zZXJkZXNfbGlua19zdGF0ZSA9IGUxMDAwX3NlcmRlc19saW5rX2Rvd247CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODg2LDE3ICs5MTksMjIgQEAKIAlldzMyKFRYRENUTCgwKSwgcmVnX2RhdGEpOwogCiAJLyogLi4uZm9yIGJvdGggcXVldWVzLiAqLwotCWlmIChtYWMtPnR5cGUgIT0gZTEwMDBfODI1NzMgJiYgbWFjLT50eXBlICE9IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChtYWMtPnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKKwkJZTEwMDBlX2VuYWJsZV90eF9wa3RfZmlsdGVyaW5nKGh3KTsKKwkJcmVnX2RhdGEgPSBlcjMyKEdDUik7CisJCXJlZ19kYXRhIHw9IEUxMDAwX0dDUl9MMV9BQ1RfV0lUSE9VVF9MMFNfUlg7CisJCWV3MzIoR0NSLCByZWdfZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCXJlZ19kYXRhID0gZXIzMihUWERDVEwoMSkpOwogCQlyZWdfZGF0YSA9IChyZWdfZGF0YSAmIH5FMTAwMF9UWERDVExfV1RIUkVTSCkgfAogCQkJICAgRTEwMDBfVFhEQ1RMX0ZVTExfVFhfREVTQ19XQiB8CiAJCQkgICBFMTAwMF9UWERDVExfQ09VTlRfREVTQzsKIAkJZXczMihUWERDVEwoMSksIHJlZ19kYXRhKTsKLQl9IGVsc2UgewotCQllMTAwMGVfZW5hYmxlX3R4X3BrdF9maWx0ZXJpbmcoaHcpOwotCQlyZWdfZGF0YSA9IGVyMzIoR0NSKTsKLQkJcmVnX2RhdGEgfD0gRTEwMDBfR0NSX0wxX0FDVF9XSVRIT1VUX0wwU19SWDsKLQkJZXczMihHQ1IsIHJlZ19kYXRhKTsKKwkJYnJlYWs7CiAJfQogCiAJLyoKQEAgLTk2MSwxOCArOTk5LDMwIEBACiAJfQogCiAJLyogRGV2aWNlIENvbnRyb2wgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXJlZyA9IGVyMzIoQ1RSTCk7CiAJCXJlZyAmPSB+KDEgPDwgMjkpOwogCQlldzMyKENUUkwsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCS8qIEV4dGVuZGVkIERldmljZSBDb250cm9sICovCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpIHsKKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzM6CisJY2FzZSBlMTAwMF84MjU3NDoKKwljYXNlIGUxMDAwXzgyNTgzOgogCQlyZWcgPSBlcjMyKENUUkxfRVhUKTsKIAkJcmVnICY9IH4oMSA8PCAyMyk7CiAJCXJlZyB8PSAoMSA8PCAyMik7CiAJCWV3MzIoQ1RSTF9FWFQsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzEpIHsKQEAgLTk4MCw5ICsxMDMwLDIzIEBACiAJCXJlZyB8PSBFMTAwMF9QQkFfRUNDX0NPUlJfRU47CiAJCWV3MzIoUEJBX0VDQywgcmVnKTsKIAl9CisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBoYXJkd2FyZSBlcnJhdGEuCisJICogRW5zdXJlIHRoYXQgRE1BIER5bmFtaWMgQ2xvY2sgZ2F0aW5nIGlzIGRpc2FibGVkIG9uIDgyNTcxIGFuZCA4MjU3MgorCSAqLworCisgICAgICAgIGlmICgoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTcxKSB8fAorICAgICAgICAgICAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTcyKSkgeworICAgICAgICAgICAgICAgIHJlZyA9IGVyMzIoQ1RSTF9FWFQpOworICAgICAgICAgICAgICAgIHJlZyAmPSB+RTEwMDBfQ1RSTF9FWFRfRE1BX0RZTl9DTEtfRU47CisgICAgICAgICAgICAgICAgZXczMihDVFJMX0VYVCwgcmVnKTsKKyAgICAgICAgfQorCiAKIAkvKiBQQ0ktRXggQ29udHJvbCBSZWdpc3RlcnMgKi8KLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc0KSB7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCXJlZyA9IGVyMzIoR0NSKTsKIAkJcmVnIHw9ICgxIDw8IDIyKTsKIAkJZXczMihHQ1IsIHJlZyk7CkBAIC05OTAsNiArMTA1NCw5IEBACiAJCXJlZyA9IGVyMzIoR0NSMik7CiAJCXJlZyB8PSAxOwogCQlldzMyKEdDUjIsIHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCXJldHVybjsKQEAgLTEwMDksNyArMTA3NiwxMCBAQAogCXUzMiB2ZnRhX29mZnNldCA9IDA7CiAJdTMyIHZmdGFfYml0X2luX3JlZyA9IDA7CiAKLQlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgeworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CiAJCWlmIChody0+bW5nX2Nvb2tpZS52bGFuX2lkICE9IDApIHsKIAkJCS8qCiAJCQkgKiBUaGUgVkZUQSBpcyBhIDQwOTZiIGJpdC1maWVsZCwgZWFjaCBpZGVudGlmeWluZwpAQCAtMTAyNCw2ICsxMDk0LDkgQEAKIAkJCXZmdGFfYml0X2luX3JlZyA9IDEgPDwgKGh3LT5tbmdfY29va2llLnZsYW5faWQgJgogCQkJCQkgICAgICAgRTEwMDBfVkZUQV9FTlRSWV9CSVRfU0hJRlRfTUFTSyk7CiAJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCWZvciAob2Zmc2V0ID0gMDsgb2Zmc2V0IDwgRTEwMDBfVkxBTl9GSUxURVJfVEJMX1NJWkU7IG9mZnNldCsrKSB7CiAJCS8qCkBAIC0xMTIyLDkgKzExOTUsMTYgQEAKIAkgKiB0aGUgZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZywgc28gd2UgZXhwbGljaXRseQogCSAqIHNldCBpdCB0byBmdWxsLgogCSAqLwotCWlmICgoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTczIHx8IGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NCkgJiYKLQkgICAgaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGUxMDAwX2ZjX2RlZmF1bHQpCi0JCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGUxMDAwX2ZjX2Z1bGw7CisJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTczOgorCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKKwkJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBlMTAwMF9mY19kZWZhdWx0KQorCQkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gZTEwMDBfZmNfZnVsbDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJcmV0dXJuIGUxMDAwZV9zZXR1cF9saW5rKGh3KTsKIH0KQEAgLTEyMDMsNiArMTI4MywxMzEgQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfY2hlY2tfZm9yX3NlcmRlc19saW5rXzgyNTcxIC0gQ2hlY2sgZm9yIGxpbmsgKFNlcmRlcykKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBDaGVja3MgZm9yIGxpbmsgdXAgb24gdGhlIGhhcmR3YXJlLiAgSWYgbGluayBpcyBub3QgdXAgYW5kIHdlIGhhdmUKKyAqICBhIHNpZ25hbCwgdGhlbiB3ZSBuZWVkIHRvIGZvcmNlIGxpbmsgdXAuCisgKiovCitzdGF0aWMgczMyIGUxMDAwX2NoZWNrX2Zvcl9zZXJkZXNfbGlua184MjU3MShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJdTMyIHJ4Y3c7CisJdTMyIGN0cmw7CisJdTMyIHN0YXR1czsKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwljdHJsID0gZXIzMihDVFJMKTsKKwlzdGF0dXMgPSBlcjMyKFNUQVRVUyk7CisJcnhjdyA9IGVyMzIoUlhDVyk7CisKKwlpZiAoKHJ4Y3cgJiBFMTAwMF9SWENXX1NZTkNIKSAmJiAhKHJ4Y3cgJiBFMTAwMF9SWENXX0lWKSkgeworCisJCS8qIFJlY2VpdmVyIGlzIHN5bmNocm9uaXplZCB3aXRoIG5vIGludmFsaWQgYml0cy4gICovCisJCXN3aXRjaCAobWFjLT5zZXJkZXNfbGlua19zdGF0ZSkgeworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfY29tcGxldGU6CisJCQlpZiAoIShzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBoYXZlIGxvc3QgbGluaywgcmV0cnkgYXV0b25lZyBiZWZvcmUKKwkJCQkgKiByZXBvcnRpbmcgbGluayBmYWlsdXJlCisJCQkJICovCisJCQkJbWFjLT5zZXJkZXNfbGlua19zdGF0ZSA9CisJCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M7CisJCQkJaHdfZGJnKGh3LCAiQU5fVVAgICAgIC0+IEFOX1BST0dcbiIpOworCQkJfQorCQlicmVhazsKKworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2ZvcmNlZF91cDoKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgcmVjZWl2aW5nIC9DLyBvcmRlcmVkIHNldHMsIHJlLWVuYWJsZQorCQkJICogYXV0by1uZWdvdGlhdGlvbiBpbiB0aGUgVFhDVyByZWdpc3RlciBhbmQgZGlzYWJsZQorCQkJICogZm9yY2VkIGxpbmsgaW4gdGhlIERldmljZSBDb250cm9sIHJlZ2lzdGVyIGluIGFuCisJCQkgKiBhdHRlbXB0IHRvIGF1dG8tbmVnb3RpYXRlIHdpdGggb3VyIGxpbmsgcGFydG5lci4KKwkJCSAqLworCQkJaWYgKHJ4Y3cgJiBFMTAwMF9SWENXX0MpIHsKKwkJCQkvKiBFbmFibGUgYXV0b25lZywgYW5kIHVuZm9yY2UgbGluayB1cCAqLworCQkJCWV3MzIoVFhDVywgbWFjLT50eGN3KTsKKwkJCQlldzMyKENUUkwsCisJCQkJICAgIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CisJCQkJbWFjLT5zZXJkZXNfbGlua19zdGF0ZSA9CisJCQkJICAgIGUxMDAwX3NlcmRlc19saW5rX2F1dG9uZWdfcHJvZ3Jlc3M7CisJCQkJaHdfZGJnKGh3LCAiRk9SQ0VEX1VQIC0+IEFOX1BST0dcbiIpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX3Byb2dyZXNzOgorCQkJLyoKKwkJCSAqIElmIHRoZSBMVSBiaXQgaXMgc2V0IGluIHRoZSBTVEFUVVMgcmVnaXN0ZXIsCisJCQkgKiBhdXRvbmVnIGhhcyBjb21wbGV0ZWQgc3VjZXNzZnVsbHkuIElmIG5vdCwKKwkJCSAqIHRyeSBmb3JpbmcgdGhlIGxpbmsgYmVjYXVzZSB0aGUgZmFyIGVuZCBtYXkgYmUKKwkJCSAqIGF2YWlsYWJsZSBidXQgbm90IGNhcGFibGUgb2YgYXV0b25lZ290aWF0aW9uLgorCQkJICovCisJCQlpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0xVKSAgeworCQkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPQorCQkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX2NvbXBsZXRlOworCQkJCWh3X2RiZyhodywgIkFOX1BST0cgICAtPiBBTl9VUFxuIik7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogRGlzYWJsZSBhdXRvbmVnLCBmb3JjZSBsaW5rIHVwIGFuZAorCQkJCSAqIGZ1bGwgZHVwbGV4LCBhbmQgY2hhbmdlIHN0YXRlIHRvIGZvcmNlZAorCQkJCSAqLworCQkJCWV3MzIoVFhDVywKKwkJCQkgICAgKG1hYy0+dHhjdyAmIH5FMTAwMF9UWENXX0FORSkpOworCQkJCWN0cmwgfD0gKEUxMDAwX0NUUkxfU0xVIHwgRTEwMDBfQ1RSTF9GRCk7CisJCQkJZXczMihDVFJMLCBjdHJsKTsKKworCQkJCS8qIENvbmZpZ3VyZSBGbG93IENvbnRyb2wgYWZ0ZXIgbGluayB1cC4gKi8KKwkJCQlyZXRfdmFsID0KKwkJCQkgICAgZTEwMDBlX2NvbmZpZ19mY19hZnRlcl9saW5rX3VwKGh3KTsKKwkJCQlpZiAocmV0X3ZhbCkgeworCQkJCQlod19kYmcoaHcsICJFcnJvciBjb25maWcgZmxvdyBjb250cm9sXG4iKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1hYy0+c2VyZGVzX2xpbmtfc3RhdGUgPQorCQkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19mb3JjZWRfdXA7CisJCQkJaHdfZGJnKGh3LCAiQU5fUFJPRyAgIC0+IEZPUkNFRF9VUFxuIik7CisJCQl9CisJCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CisJCQlicmVhazsKKworCQljYXNlIGUxMDAwX3NlcmRlc19saW5rX2Rvd246CisJCWRlZmF1bHQ6CisJCQkvKiBUaGUgbGluayB3YXMgZG93biBidXQgdGhlIHJlY2VpdmVyIGhhcyBub3cgZ2FpbmVkCisJCQkgKiB2YWxpZCBzeW5jLCBzbyBsZXRzIHNlZSBpZiB3ZSBjYW4gYnJpbmcgdGhlIGxpbmsKKwkJCSAqIHVwLiAqLworCQkJZXczMihUWENXLCBtYWMtPnR4Y3cpOworCQkJZXczMihDVFJMLAorCQkJICAgIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CisJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0KKwkJCSAgICBlMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX3Byb2dyZXNzOworCQkJaHdfZGJnKGh3LCAiRE9XTiAgICAgIC0+IEFOX1BST0dcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIShyeGN3ICYgRTEwMDBfUlhDV19TWU5DSCkpIHsKKwkJCW1hYy0+c2VyZGVzX2hhc19saW5rID0gZmFsc2U7CisJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0gZTEwMDBfc2VyZGVzX2xpbmtfZG93bjsKKwkJCWh3X2RiZyhodywgIkFOWVNUQVRFICAtPiBET1dOXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBXZSBoYXZlIHN5bmMsIGFuZCBjYW4gdG9sZXJhdGUgb25lCisJCQkgKiBpbnZhbGlkIChJVikgY29kZXdvcmQgYmVmb3JlIGRlY2xhcmluZworCQkJICogbGluayBkb3duLCBzbyByZXJlYWQgdG8gbG9vayBhZ2FpbgorCQkJICovCisJCQl1ZGVsYXkoMTApOworCQkJcnhjdyA9IGVyMzIoUlhDVyk7CisJCQlpZiAocnhjdyAmIEUxMDAwX1JYQ1dfSVYpIHsKKwkJCQltYWMtPnNlcmRlc19saW5rX3N0YXRlID0gZTEwMDBfc2VyZGVzX2xpbmtfZG93bjsKKwkJCQltYWMtPnNlcmRlc19oYXNfbGluayA9IGZhbHNlOworCQkJCWh3X2RiZyhodywgIkFOWVNUQVRFICAtPiBET1dOXG4iKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBlMTAwMF92YWxpZF9sZWRfZGVmYXVsdF84MjU3MSAtIFZlcmlmeSBhIHZhbGlkIGRlZmF1bHQgTEVEIGNvbmZpZwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQGRhdGE6IHBvaW50ZXIgdG8gdGhlIE5WTSAoRUVQUk9NKQpAQCAtMTIyMCwxMSArMTQyNSwxOSBAQAogCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAKLQlpZiAoKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MyB8fCBody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzQpICYmCi0JICAgICpkYXRhID09IElEX0xFRF9SRVNFUlZFRF9GNzQ2KQotCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUXzgyNTczOwotCWVsc2UgaWYgKCpkYXRhID09IElEX0xFRF9SRVNFUlZFRF8wMDAwIHx8ICpkYXRhID09IElEX0xFRF9SRVNFUlZFRF9GRkZGKQotCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUOworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwljYXNlIGUxMDAwXzgyNTc0OgorCWNhc2UgZTEwMDBfODI1ODM6CisJCWlmICgqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfRjc0NikKKwkJCSpkYXRhID0gSURfTEVEX0RFRkFVTFRfODI1NzM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICgqZGF0YSA9PSBJRF9MRURfUkVTRVJWRURfMDAwMCB8fAorCQkgICAgKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEX0ZGRkYpCisJCQkqZGF0YSA9IElEX0xFRF9ERUZBVUxUOworCQlicmVhazsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MTcsMyArMTczMCwxOSBAQAogCS5udm1fb3BzCQk9ICZlODI1NzFfbnZtX29wcywKIH07CiAKK3N0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTgzX2luZm8gPSB7CisJLm1hYwkJCT0gZTEwMDBfODI1ODMsCisJLmZsYWdzCQkJPSBGTEFHX0hBU19IV19WTEFOX0ZJTFRFUgorCQkJCSAgfCBGTEFHX0hBU19XT0wKKwkJCQkgIHwgRkxBR19BUE1FX0lOX0NUUkwzCisJCQkJICB8IEZMQUdfUlhfQ1NVTV9FTkFCTEVECisJCQkJICB8IEZMQUdfSEFTX1NNQVJUX1BPV0VSX0RPV04KKwkJCQkgIHwgRkxBR19IQVNfQU1UCisJCQkJICB8IEZMQUdfSEFTX0NUUkxFWFRfT05fTE9BRCwKKwkucGJhCQkJPSAyMCwKKwkuZ2V0X3ZhcmlhbnRzCQk9IGUxMDAwX2dldF92YXJpYW50c184MjU3MSwKKwkubWFjX29wcwkJPSAmZTgyNTcxX21hY19vcHMsCisJLnBoeV9vcHMJCT0gJmU4Ml9waHlfb3BzX2JtLAorCS5udm1fb3BzCQk9ICZlODI1NzFfbnZtX29wcywKK307CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCmluZGV4IGU2Y2FmMjkuLjI0M2FhNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaApAQCAtNjksNiArNjksNyBAQAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA3X0RBVEEgMHgwMDAwMDA4MCAvKiBWYWx1ZSBvZiBTVyBEZWZpbmFibGUgUGluIDcgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfRUVfUlNUICAgIDB4MDAwMDIwMDAgLyogUmVpbml0aWFsaXplIGZyb20gRUVQUk9NICovCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1JPX0RJUyAgICAweDAwMDIwMDAwIC8qIFJlbGF4ZWQgT3JkZXJpbmcgZGlzYWJsZSAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9ETUFfRFlOX0NMS19FTiAweDAwMDgwMDAwIC8qIERNQSBEeW5hbWljIENsb2NrIEdhdGluZyAqLwogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSyAweDAwQzAwMDAwCiAjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9QQ0lFX1NFUkRFUyAgMHgwMEMwMDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9FSUFNRSAgICAgICAgICAweDAxMDAwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCmluZGV4IDM3YmNiMTkuLmYzNzM2MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCkBAIC0xMDEsNiArMTAxLDcgQEAKIAlib2FyZF84MjU3MiwKIAlib2FyZF84MjU3MywKIAlib2FyZF84MjU3NCwKKwlib2FyZF84MjU4MywKIAlib2FyZF84MDAwM2VzMmxhbiwKIAlib2FyZF9pY2g4bGFuLAogCWJvYXJkX2ljaDlsYW4sCkBAIC0xOTUsOCArMTk2LDYgQEAKIAl1MTYgbGlua19kdXBsZXg7CiAJdTE2IGVlcHJvbV92ZXJzOwogCi0Jc3BpbmxvY2tfdCB0eF9xdWV1ZV9sb2NrOyAvKiBwcmV2ZW50IGNvbmN1cnJlbnQgdGFpbCB1cGRhdGVzICovCi0KIAkvKiB0cmFjayBkZXZpY2UgdXAvZG93bi90ZXN0aW5nIHN0YXRlICovCiAJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIApAQCAtNDAxLDYgKzQwMCw3IEBACiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1NzJfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF84MjU3M19pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTc0X2luZm87CitleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfODI1ODNfaW5mbzsKIGV4dGVybiBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF9pY2g4X2luZm87CiBleHRlcm4gc3RydWN0IGUxMDAwX2luZm8gZTEwMDBfaWNoOV9pbmZvOwogZXh0ZXJuIHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwX2ljaDEwX2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYwppbmRleCBlNDg5NTZkLi40ZDI1ZWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKQEAgLTc5MCw2ICs3OTAsNyBAQAogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTczOgogCWNhc2UgZTEwMDBfODI1NzQ6CisJY2FzZSBlMTAwMF84MjU4MzoKIAljYXNlIGUxMDAwX2ljaDhsYW46CiAJY2FzZSBlMTAwMF9pY2g5bGFuOgogCWNhc2UgZTEwMDBfaWNoMTBsYW46CkBAIC0xNTg5LDcgKzE1OTAsNyBAQAogCSpkYXRhID0gMDsKIAlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CiAJCWludCBpID0gMDsKLQkJaHctPm1hYy5zZXJkZXNfaGFzX2xpbmsgPSAwOworCQlody0+bWFjLnNlcmRlc19oYXNfbGluayA9IGZhbHNlOwogCiAJCS8qCiAJCSAqIE9uIHNvbWUgYmxhZGUgc2VydmVyIGRlc2lnbnMsIGxpbmsgZXN0YWJsaXNobWVudApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAppbmRleCAyZDRjZTA0Li5kOGI4MjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaHcuaApAQCAtMzM5LDYgKzMzOSw4IEBACiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3M0VfSUFNVAkJMHgxMDhDCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3M0wJCQkweDEwOUEKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc0TAkJCTB4MTBEMworI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzRMQQkJCTB4MTBGNgorI2RlZmluZSBFMTAwMF9ERVZfSURfODI1ODNWICAgICAgICAgICAgICAgICAgICAgMHgxNTBDCiAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgwMDAzRVMyTEFOX0NPUFBFUl9EUFQJMHgxMDk2CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MDAwM0VTMkxBTl9TRVJERVNfRFBUCTB4MTA5OApAQCAtMzc2LDYgKzM3OCw3IEBACiAJZTEwMDBfODI1NzIsCiAJZTEwMDBfODI1NzMsCiAJZTEwMDBfODI1NzQsCisJZTEwMDBfODI1ODMsCiAJZTEwMDBfODAwMDNlczJsYW4sCiAJZTEwMDBfaWNoOGxhbiwKIAllMTAwMF9pY2g5bGFuLApAQCAtNDU5LDYgKzQ2MiwxMyBAQAogCWUxMDAwX3NtYXJ0X3NwZWVkX29mZgogfTsKIAorZW51bSBlMTAwMF9zZXJkZXNfbGlua19zdGF0ZSB7CisJZTEwMDBfc2VyZGVzX2xpbmtfZG93biA9IDAsCisJZTEwMDBfc2VyZGVzX2xpbmtfYXV0b25lZ19wcm9ncmVzcywKKwllMTAwMF9zZXJkZXNfbGlua19hdXRvbmVnX2NvbXBsZXRlLAorCWUxMDAwX3NlcmRlc19saW5rX2ZvcmNlZF91cAorfTsKKwogLyogUmVjZWl2ZSBEZXNjcmlwdG9yICovCiBzdHJ1Y3QgZTEwMDBfcnhfZGVzYyB7CiAJX19sZTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KQEAgLTc4Nyw2ICs3OTcsNyBAQAogCWJvb2wgaW5faWZzX21vZGU7CiAJYm9vbCBzZXJkZXNfaGFzX2xpbms7CiAJYm9vbCB0eF9wa3RfZmlsdGVyaW5nOworCWVudW0gZTEwMDBfc2VyZGVzX2xpbmtfc3RhdGUgc2VyZGVzX2xpbmtfc3RhdGU7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKaW5kZXggZTQxNWU4MS4uNmQxYWFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCkBAIC0zOTAsOCArMzkwLDYgQEAKIH0KIAogc3RhdGljIERFRklORV9NVVRFWChudm1fbXV0ZXgpOwotc3RhdGljIHBpZF90IG52bV9vd25lcl9waWQgPSAtMTsKLXN0YXRpYyBjaGFyIG52bV9vd25lcl9uYW1lW1RBU0tfQ09NTV9MRU5dID0gIiI7CiAKIC8qKgogICogIGUxMDAwX2FjcXVpcmVfc3dmbGFnX2ljaDhsYW4gLSBBY3F1aXJlIHNvZnR3YXJlIGNvbnRyb2wgZmxhZwpAQCAtNDA4LDE2ICs0MDYsNyBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAotCWlmICghbXV0ZXhfdHJ5bG9jaygmbnZtX211dGV4KSkgewotCQlXQVJOKDEsIEtFUk5fRVJSICJlMTAwMGUgbXV0ZXggY29udGVudGlvbi4gT3duZWQgYnkgcHJvY2VzcyAiCi0JCSAgICAgIiVzIChwaWQgJWQpLCByZXF1aXJlZCBieSBwcm9jZXNzICVzIChwaWQgJWQpXG4iLAotCQkgICAgIG52bV9vd25lcl9uYW1lLCBudm1fb3duZXJfcGlkLAotCQkgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7Ci0KLQkJbXV0ZXhfbG9jaygmbnZtX211dGV4KTsKLQl9Ci0JbnZtX293bmVyX3BpZCA9IGN1cnJlbnQtPnBpZDsKLQlzdHJuY3B5KG52bV9vd25lcl9uYW1lLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKKwltdXRleF9sb2NrKCZudm1fbXV0ZXgpOwogCiAJd2hpbGUgKHRpbWVvdXQpIHsKIAkJZXh0Y25mX2N0cmwgPSBlcjMyKEVYVENORl9DVFJMKTsKQEAgLTQzNSw4ICs0MjQsNiBAQAogCQlod19kYmcoaHcsICJGVyBvciBIVyBoYXMgbG9ja2VkIHRoZSByZXNvdXJjZSBmb3IgdG9vIGxvbmcuXG4iKTsKIAkJZXh0Y25mX2N0cmwgJj0gfkUxMDAwX0VYVENORl9DVFJMX1NXRkxBRzsKIAkJZXczMihFWFRDTkZfQ1RSTCwgZXh0Y25mX2N0cmwpOwotCQludm1fb3duZXJfcGlkID0gLTE7Ci0JCXN0cmNweShudm1fb3duZXJfbmFtZSwgIiIpOwogCQltdXRleF91bmxvY2soJm52bV9tdXRleCk7CiAJCXJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKIAl9CkBAIC00NjAsOCArNDQ3LDYgQEAKIAlleHRjbmZfY3RybCAmPSB+RTEwMDBfRVhUQ05GX0NUUkxfU1dGTEFHOwogCWV3MzIoRVhUQ05GX0NUUkwsIGV4dGNuZl9jdHJsKTsKIAotCW52bV9vd25lcl9waWQgPSAtMTsKLQlzdHJjcHkobnZtX293bmVyX25hbWUsICIiKTsKIAltdXRleF91bmxvY2soJm52bV9tdXRleCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYwppbmRleCA2Njc0MTEwLi4xOGE0ZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCkBAIC0xNTksNDEgKzE1OSw2IEBACiB9CiAKIC8qKgotICogIGUxMDAwX210YV9zZXQgLSBTZXQgbXVsdGljYXN0IGZpbHRlciB0YWJsZSBhZGRyZXNzCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqICBAaGFzaF92YWx1ZTogZGV0ZXJtaW5lcyB0aGUgTVRBIHJlZ2lzdGVyIGFuZCBiaXQgdG8gc2V0Ci0gKgotICogIFRoZSBtdWx0aWNhc3QgdGFibGUgYWRkcmVzcyBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDMyLWJpdCByZWdpc3RlcnMuCi0gKiAgVGhlIGhhc2hfdmFsdWUgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCByZWdpc3RlciB0aGUgYml0IGlzIGluLCB0aGUKLSAqICBjdXJyZW50IHZhbHVlIGlzIHJlYWQsIHRoZSBuZXcgYml0IGlzIE9SJ2QgaW4gYW5kIHRoZSBuZXcgdmFsdWUgaXMKLSAqICB3cml0dGVuIGJhY2sgaW50byB0aGUgcmVnaXN0ZXIuCi0gKiovCi1zdGF0aWMgdm9pZCBlMTAwMF9tdGFfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBoYXNoX3ZhbHVlKQotewotCXUzMiBoYXNoX2JpdCwgaGFzaF9yZWcsIG10YTsKLQotCS8qCi0JICogVGhlIE1UQSBpcyBhIHJlZ2lzdGVyIGFycmF5IG9mIDMyLWJpdCByZWdpc3RlcnMuIEl0IGlzCi0JICogdHJlYXRlZCBsaWtlIGFuIGFycmF5IG9mICgzMiptdGFfcmVnX2NvdW50KSBiaXRzLiAgV2Ugd2FudCB0bwotCSAqIHNldCBiaXQgQml0QXJyYXlbaGFzaF92YWx1ZV0uIFNvIHdlIGZpZ3VyZSBvdXQgd2hhdCByZWdpc3RlcgotCSAqIHRoZSBiaXQgaXMgaW4sIHJlYWQgaXQsIE9SIGluIHRoZSBuZXcgYml0LCB0aGVuIHdyaXRlCi0JICogYmFjayB0aGUgbmV3IHZhbHVlLiAgVGhlIChody0+bWFjLm10YV9yZWdfY291bnQgLSAxKSBzZXJ2ZXMgYXMgYQotCSAqIG1hc2sgdG8gYml0cyAzMTo1IG9mIHRoZSBoYXNoIHZhbHVlIHdoaWNoIGdpdmVzIHVzIHRoZQotCSAqIHJlZ2lzdGVyIHdlJ3JlIG1vZGlmeWluZy4gIFRoZSBoYXNoIGJpdCB3aXRoaW4gdGhhdCByZWdpc3RlcgotCSAqIGlzIGRldGVybWluZWQgYnkgdGhlIGxvd2VyIDUgYml0cyBvZiB0aGUgaGFzaCB2YWx1ZS4KLQkgKi8KLQloYXNoX3JlZyA9IChoYXNoX3ZhbHVlID4+IDUpICYgKGh3LT5tYWMubXRhX3JlZ19jb3VudCAtIDEpOwotCWhhc2hfYml0ID0gaGFzaF92YWx1ZSAmIDB4MUY7Ci0KLQltdGEgPSBFMTAwMF9SRUFEX1JFR19BUlJBWShodywgRTEwMDBfTVRBLCBoYXNoX3JlZyk7Ci0KLQltdGEgfD0gKDEgPDwgaGFzaF9iaXQpOwotCi0JRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBFMTAwMF9NVEEsIGhhc2hfcmVnLCBtdGEpOwotCWUxZV9mbHVzaCgpOwotfQotCi0vKioKICAqICBlMTAwMF9oYXNoX21jX2FkZHIgLSBHZW5lcmF0ZSBhIG11bHRpY2FzdCBoYXNoIHZhbHVlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqICBAbWNfYWRkcjogcG9pbnRlciB0byBhIG11bHRpY2FzdCBhZGRyZXNzCkBAIC0yODEsOCArMjQ2LDEzIEBACiAJCQkJCXU4ICptY19hZGRyX2xpc3QsIHUzMiBtY19hZGRyX2NvdW50LAogCQkJCQl1MzIgcmFyX3VzZWRfY291bnQsIHUzMiByYXJfY291bnQpCiB7Ci0JdTMyIGhhc2hfdmFsdWU7CiAJdTMyIGk7CisJdTMyICptY2FycmF5ID0ga3phbGxvYyhody0+bWFjLm10YV9yZWdfY291bnQgKiBzaXplb2YodTMyKSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIW1jYXJyYXkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtdWx0aWNhc3QgYXJyYXkgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuOworCX0KIAogCS8qCiAJICogTG9hZCB0aGUgZmlyc3Qgc2V0IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgZXhhY3QKQEAgLTMwMiwyMCArMjcyLDI0IEBACiAJCX0KIAl9CiAKLQkvKiBDbGVhciB0aGUgb2xkIHNldHRpbmdzIGZyb20gdGhlIE1UQSAqLwotCWh3X2RiZyhodywgIkNsZWFyaW5nIE1UQVxuIik7Ci0JZm9yIChpID0gMDsgaSA8IGh3LT5tYWMubXRhX3JlZ19jb3VudDsgaSsrKSB7Ci0JCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgRTEwMDBfTVRBLCBpLCAwKTsKLQkJZTFlX2ZsdXNoKCk7Ci0JfQotCiAJLyogTG9hZCBhbnkgcmVtYWluaW5nIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgaGFzaCB0YWJsZS4gKi8KIAlmb3IgKDsgbWNfYWRkcl9jb3VudCA+IDA7IG1jX2FkZHJfY291bnQtLSkgeworCQl1MzIgaGFzaF92YWx1ZSwgaGFzaF9yZWcsIGhhc2hfYml0LCBtdGE7CiAJCWhhc2hfdmFsdWUgPSBlMTAwMF9oYXNoX21jX2FkZHIoaHcsIG1jX2FkZHJfbGlzdCk7CiAJCWh3X2RiZyhodywgIkhhc2ggdmFsdWUgPSAweCUwM1hcbiIsIGhhc2hfdmFsdWUpOwotCQllMTAwMF9tdGFfc2V0KGh3LCBoYXNoX3ZhbHVlKTsKKwkJaGFzaF9yZWcgPSAoaGFzaF92YWx1ZSA+PiA1KSAmIChody0+bWFjLm10YV9yZWdfY291bnQgLSAxKTsKKwkJaGFzaF9iaXQgPSBoYXNoX3ZhbHVlICYgMHgxRjsKKwkJbXRhID0gKDEgPDwgaGFzaF9iaXQpOworCQltY2FycmF5W2hhc2hfcmVnXSB8PSBtdGE7CiAJCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxFTjsKIAl9CisKKwkvKiB3cml0ZSB0aGUgaGFzaCB0YWJsZSBjb21wbGV0ZWx5ICovCisJZm9yIChpID0gMDsgaSA8IGh3LT5tYWMubXRhX3JlZ19jb3VudDsgaSsrKQorCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEUxMDAwX01UQSwgaSwgbWNhcnJheVtpXSk7CisKKwllMWVfZmx1c2goKTsKKwlrZnJlZShtY2FycmF5KTsKIH0KIAogLyoqCkBAIC01MDEsNyArNDc1LDcgQEAKIAkJZXczMihUWENXLCBtYWMtPnR4Y3cpOwogCQlldzMyKENUUkwsIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CiAKLQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSAxOworCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC01NjYsNyArNTQwLDcgQEAKIAkJZXczMihUWENXLCBtYWMtPnR4Y3cpOwogCQlldzMyKENUUkwsIChjdHJsICYgfkUxMDAwX0NUUkxfU0xVKSk7CiAKLQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSAxOworCQltYWMtPnNlcmRlc19oYXNfbGluayA9IHRydWU7CiAJfSBlbHNlIGlmICghKEUxMDAwX1RYQ1dfQU5FICYgZXIzMihUWENXKSkpIHsKIAkJLyoKIAkJICogSWYgd2UgZm9yY2UgbGluayBmb3Igbm9uLWF1dG8tbmVnb3RpYXRpb24gc3dpdGNoLCBjaGVjawpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDkxODE3ZDAuLmJmYjJkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTQ0LDEwICs0NCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvc19wYXJhbXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hZXIuaD4KIAogI2luY2x1ZGUgImUxMDAwLmgiCiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy4zLjMtazYiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjMuMy40LWs0IgogY2hhciBlMTAwMGVfZHJpdmVyX25hbWVbXSA9ICJlMTAwMGUiOwogY29uc3QgY2hhciBlMTAwMGVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogCkBAIC01Niw2ICs1Nyw3IEBACiAJW2JvYXJkXzgyNTcyXQkJPSAmZTEwMDBfODI1NzJfaW5mbywKIAlbYm9hcmRfODI1NzNdCQk9ICZlMTAwMF84MjU3M19pbmZvLAogCVtib2FyZF84MjU3NF0JCT0gJmUxMDAwXzgyNTc0X2luZm8sCisJW2JvYXJkXzgyNTgzXQkJPSAmZTEwMDBfODI1ODNfaW5mbywKIAlbYm9hcmRfODAwMDNlczJsYW5dCT0gJmUxMDAwX2VzMl9pbmZvLAogCVtib2FyZF9pY2g4bGFuXQkJPSAmZTEwMDBfaWNoOF9pbmZvLAogCVtib2FyZF9pY2g5bGFuXQkJPSAmZTEwMDBfaWNoOV9pbmZvLApAQCAtOTksOCArMTAxLDggQEAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIChzdGF0dXMgJiBFMTAwMF9SWERfU1RBVF9WUCkpCi0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGFkYXB0ZXItPnZsZ3JwLAotCQkJCQkgbGUxNl90b19jcHUodmxhbikpOworCQl2bGFuX2dyb19yZWNlaXZlKCZhZGFwdGVyLT5uYXBpLCBhZGFwdGVyLT52bGdycCwKKwkJCQkgbGUxNl90b19jcHUodmxhbiksIHNrYik7CiAJZWxzZQogCQluYXBpX2dyb19yZWNlaXZlKCZhZGFwdGVyLT5uYXBpLCBza2IpOwogfQpAQCAtNTY1LDE1ICs1NjcsMTQgQEAKIHN0YXRpYyB2b2lkIGUxMDAwX3B1dF90eGJ1ZihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgICAgc3RydWN0IGUxMDAwX2J1ZmZlciAqYnVmZmVyX2luZm8pCiB7Ci0JaWYgKGJ1ZmZlcl9pbmZvLT5kbWEpIHsKLQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSwKLQkJCSAgICAgICBidWZmZXJfaW5mby0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJYnVmZmVyX2luZm8tPmRtYSA9IDA7Ci0JfQorCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOwogCWlmIChidWZmZXJfaW5mby0+c2tiKSB7CisJCXNrYl9kbWFfdW5tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgYnVmZmVyX2luZm8tPnNrYiwKKwkJICAgICAgICAgICAgICBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoYnVmZmVyX2luZm8tPnNrYik7CiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCX0KKwlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDAwX3ByaW50X3R4X2hhbmcoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC02MjAsMTUgKzYyMSwxNiBAQAogCXN0cnVjdCBlMTAwMF9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXVuc2lnbmVkIGludCBpLCBlb3A7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKLQlib29sIGNsZWFuZWQgPSAwOworCWJvb2wgY2xlYW5lZDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfdHhfYnl0ZXMgPSAwLCB0b3RhbF90eF9wYWNrZXRzID0gMDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwogCWVvcCA9IHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CiAJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwogCi0Jd2hpbGUgKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSB7Ci0JCWZvciAoY2xlYW5lZCA9IDA7ICFjbGVhbmVkOyApIHsKKwl3aGlsZSAoKGVvcF9kZXNjLT51cHBlci5kYXRhICYgY3B1X3RvX2xlMzIoRTEwMDBfVFhEX1NUQVRfREQpKSAmJgorCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT5jb3VudCkpIHsKKwkJZm9yIChjbGVhbmVkID0gMDsgIWNsZWFuZWQ7IGNvdW50KyspIHsKIAkJCXR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CkBAIC02NTQsMTAgKzY1Niw2IEBACiAKIAkJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKIAkJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBlb3ApOwotI2RlZmluZSBFMTAwMF9UWF9XRUlHSFQgNjQKLQkJLyogd2VpZ2h0IG9mIGEgc29ydCBmb3IgdHgsIHRvIGF2b2lkIGVuZGxlc3MgdHJhbnNtaXQgY2xlYW51cCAqLwotCQlpZiAoY291bnQrKyA9PSBFMTAwMF9UWF9XRUlHSFQpCi0JCQlicmVhazsKIAl9CiAKIAl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gaTsKQEAgLTY3OCwxMyArNjc2LDExIEBACiAJfQogCiAJaWYgKGFkYXB0ZXItPmRldGVjdF90eF9odW5nKSB7Ci0JCS8qCi0JCSAqIERldGVjdCBhIHRyYW5zbWl0IGhhbmcgaW4gaGFyZHdhcmUsIHRoaXMgc2VyaWFsaXplcyB0aGUKLQkJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgaQotCQkgKi8KKwkJLyogRGV0ZWN0IGEgdHJhbnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQorCQkgKiBjaGVjayB3aXRoIHRoZSBjbGVhcmluZyBvZiB0aW1lX3N0YW1wIGFuZCBtb3ZlbWVudCBvZiBpICovCiAJCWFkYXB0ZXItPmRldGVjdF90eF9odW5nID0gMDsKLQkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0uZG1hICYmCi0JCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcAorCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9baV0udGltZV9zdGFtcCAmJgorCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCB0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS50aW1lX3N0YW1wCiAJCQkgICAgICAgKyAoYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3IgKiBIWikpCiAJCSAgICAmJiAhKGVyMzIoU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19UWE9GRikpIHsKIAkJCWUxMDAwX3ByaW50X3R4X2hhbmcoYWRhcHRlcik7CkBAIC02OTUsNyArNjkxLDcgQEAKIAlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzICs9IHRvdGFsX3R4X3BhY2tldHM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2J5dGVzICs9IHRvdGFsX3R4X2J5dGVzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9wYWNrZXRzICs9IHRvdGFsX3R4X3BhY2tldHM7Ci0JcmV0dXJuIGNsZWFuZWQ7CisJcmV0dXJuIChjb3VudCA8IHR4X3JpbmctPmNvdW50KTsKIH0KIAogLyoqCkBAIC0xMTUyLDcgKzExNDgsNyBAQAogCSAqIHJlYWQgSUNSIGRpc2FibGVzIGludGVycnVwdHMgdXNpbmcgSUFNCiAJICovCiAKLQlpZiAoaWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lDUl9MU0MpKSB7CisJaWYgKGljciAmIEUxMDAwX0lDUl9MU0MpIHsKIAkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOwogCQkvKgogCQkgKiBJQ0g4IHdvcmthcm91bmQtLSBDYWxsIGdpZyBzcGVlZCBkcm9wIHdvcmthcm91bmQgb24gY2FibGUKQEAgLTExNzksMTIgKzExNzUsMTIgQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCQlhZGFwdGVyLT50b3RhbF90eF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3R4X3BhY2tldHMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9ieXRlcyA9IDA7CiAJCWFkYXB0ZXItPnRvdGFsX3J4X3BhY2tldHMgPSAwOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0xMjE4LDcgKzEyMTQsNyBAQAogCSAqIElNQyB3cml0ZQogCSAqLwogCi0JaWYgKGljciAmIChFMTAwMF9JQ1JfUlhTRVEgfCBFMTAwMF9JQ1JfTFNDKSkgeworCWlmIChpY3IgJiBFMTAwMF9JQ1JfTFNDKSB7CiAJCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKIAkJLyoKIAkJICogSUNIOCB3b3JrYXJvdW5kLS0gQ2FsbCBnaWcgc3BlZWQgZHJvcCB3b3JrYXJvdW5kIG9uIGNhYmxlCkBAIC0xMjQ2LDEyICsxMjQyLDEyIEBACiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKIAkJYWRhcHRlci0+dG90YWxfdHhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF90eF9wYWNrZXRzID0gMDsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTI2NSw3ICsxMjYxLDggQEAKIAl1MzIgaWNyID0gZXIzMihJQ1IpOwogCiAJaWYgKCEoaWNyICYgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCkpIHsKLQkJZXczMihJTVMsIEUxMDAwX0lNU19PVEhFUik7CisJCWlmICghdGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQkJZXczMihJTVMsIEUxMDAwX0lNU19PVEhFUik7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CiAKQEAgLTEyODIsNyArMTI3OSw4IEBACiAJfQogCiBub19saW5rX2ludGVycnVwdDoKLQlldzMyKElNUywgRTEwMDBfSU1TX0xTQyB8IEUxMDAwX0lNU19PVEhFUik7CisJaWYgKCF0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCWV3MzIoSU1TLCBFMTAwMF9JTVNfTFNDIHwgRTEwMDBfSU1TX09USEVSKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEzMjAsMTAgKzEzMTgsMTAgQEAKIAkJYWRhcHRlci0+cnhfcmluZy0+c2V0X2l0ciA9IDA7CiAJfQogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKIAkJYWRhcHRlci0+dG90YWxfcnhfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT50b3RhbF9yeF9wYWNrZXRzID0gMDsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE2OTgsNyArMTY5Niw2IEBACiAKIAl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CiAJdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7Ci0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwogCiAJcmV0dXJuIDA7CiBlcnI6CkBAIC0yMDA3LDMyICsyMDA0LDI1IEBACiAJICAgICEoYWRhcHRlci0+cnhfcmluZy0+aW1zX3ZhbCAmIGFkYXB0ZXItPnR4X3JpbmctPmltc192YWwpKQogCQlnb3RvIGNsZWFuX3J4OwogCi0JLyoKLQkgKiBlMTAwMF9jbGVhbiBpcyBjYWxsZWQgcGVyLWNwdS4gIFRoaXMgbG9jayBwcm90ZWN0cwotCSAqIHR4X3JpbmcgZnJvbSBiZWluZyBjbGVhbmVkIGJ5IG11bHRpcGxlIGNwdXMKLQkgKiBzaW11bHRhbmVvdXNseS4gIEEgZmFpbHVyZSBvYnRhaW5pbmcgdGhlIGxvY2sgbWVhbnMKLQkgKiB0eF9yaW5nIGlzIGN1cnJlbnRseSBiZWluZyBjbGVhbmVkIGFueXdheS4KLQkgKi8KLQlpZiAoc3Bpbl90cnlsb2NrKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrKSkgewotCQl0eF9jbGVhbmVkID0gZTEwMDBfY2xlYW5fdHhfaXJxKGFkYXB0ZXIpOwotCQlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfcXVldWVfbG9jayk7Ci0JfQorCXR4X2NsZWFuZWQgPSBlMTAwMF9jbGVhbl90eF9pcnEoYWRhcHRlcik7CiAKIGNsZWFuX3J4OgogCWFkYXB0ZXItPmNsZWFuX3J4KGFkYXB0ZXIsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQlpZiAodHhfY2xlYW5lZCkKKwlpZiAoIXR4X2NsZWFuZWQpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKIAogCS8qIElmIGJ1ZGdldCBub3QgZnVsbHkgY29uc3VtZWQsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykKIAkJCWUxMDAwX3NldF9pdHIoYWRhcHRlcik7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQotCQkJZXczMihJTVMsIGFkYXB0ZXItPnJ4X3JpbmctPmltc192YWwpOwotCQllbHNlCi0JCQllMTAwMF9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoIXRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykKKwkJCQlldzMyKElNUywgYWRhcHRlci0+cnhfcmluZy0+aW1zX3ZhbCk7CisJCQllbHNlCisJCQkJZTEwMDBfaXJxX2VuYWJsZShhZGFwdGVyKTsKKwkJfQogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0yOTIyLDggKzI5MTIsNiBAQAogCWlmIChlMTAwMF9hbGxvY19xdWV1ZXMoYWRhcHRlcikpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2spOwotCiAJLyogRXhwbGljaXRseSBkaXNhYmxlIElSUSBzaW5jZSB0aGUgTklDIGNhbiBiZSBpbiBhbnkgc3RhdGUuICovCiAJZTEwMDBfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAKQEAgLTMzMjAsNyArMzMwOCw3IEBACiAKIAlhZGFwdGVyLT5zdGF0cy5hbGduZXJyYyArPSBlcjMyKEFMR05FUlJDKTsKIAlhZGFwdGVyLT5zdGF0cy5yeGVycmMgKz0gZXIzMihSWEVSUkMpOwotCWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzQpCisJaWYgKChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzQpICYmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1ODMpKQogCQlhZGFwdGVyLT5zdGF0cy50bmNycyArPSBlcjMyKFROQ1JTKTsKIAlhZGFwdGVyLT5zdGF0cy5jZXh0ZXJyICs9IGVyMzIoQ0VYVEVSUik7CiAJYWRhcHRlci0+c3RhdHMudHNjdGMgKz0gZXIzMihUU0NUQyk7CkBAIC0zNzc3LDIzICszNzY1LDMwIEBACiAJdW5zaWduZWQgaW50IGk7CiAJdTggY3NzOwogCXUzMiBjbWRfbGVuID0gRTEwMDBfVFhEX0NNRF9ERVhUOworCV9fYmUxNiBwcm90b2NvbDsKIAogCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpKQorCQlwcm90b2NvbCA9IHZsYW5fZXRoX2hkcihza2IpLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOworCWVsc2UKKwkJcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQogCQkJY21kX2xlbiB8PSBFMTAwMF9UWERfQ01EX1RDUDsKIAkJYnJlYWs7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCS8qIFhYWCBub3QgaGFuZGxpbmcgYWxsIElQVjYgaGVhZGVycyAqLwogCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKIAkJCWNtZF9sZW4gfD0gRTEwMDBfVFhEX0NNRF9UQ1A7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICh1bmxpa2VseShuZXRfcmF0ZWxpbWl0KCkpKQotCQkJZV93YXJuKCJjaGVja3N1bV9wYXJ0aWFsIHByb3RvPSV4IVxuIiwgc2tiLT5wcm90b2NvbCk7CisJCQllX3dhcm4oImNoZWNrc3VtX3BhcnRpYWwgcHJvdG89JXghXG4iLAorCQkJICAgICAgIGJlMTZfdG9fY3B1KHByb3RvY29sKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzgzMiw0MiArMzgyNyw0MCBAQAogewogCXN0cnVjdCBlMTAwMF9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKIAlzdHJ1Y3QgZTEwMDBfYnVmZmVyICpidWZmZXJfaW5mbzsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwLCBzaXplLCBjb3VudCA9IDAsIGk7CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJdW5zaWduZWQgaW50IG9mZnNldCwgc2l6ZSwgY291bnQgPSAwLCBpOwogCXVuc2lnbmVkIGludCBmOworCWRtYV9hZGRyX3QgKm1hcDsKIAogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKIAorCWlmIChza2JfZG1hX21hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBza2IsIERNQV9UT19ERVZJQ0UpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKKwkJYWRhcHRlci0+dHhfZG1hX2ZhaWxlZCsrOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAgPSBza2Jfc2hpbmZvKHNrYiktPmRtYV9tYXBzOworCW9mZnNldCA9IDA7CisKIAl3aGlsZSAobGVuKSB7CiAJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQlzaXplID0gbWluKGxlbiwgbWF4X3Blcl90eGQpOwogCi0JCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCi0JCSAqIGluIFRTTyBtb2RlLiAgQXBwZW5kIDQtYnl0ZSBzZW50aW5lbCBkZXNjICovCi0JCWlmIChtc3MgJiYgIW5yX2ZyYWdzICYmIHNpemUgPT0gbGVuICYmIHNpemUgPiA4KQotCQkJc2l6ZSAtPSA0OwotCiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwotCQkvKiBzZXQgdGltZV9zdGFtcCAqYmVmb3JlKiBkbWEgdG8gaGVscCBhdm9pZCBhIHBvc3NpYmxlIHJhY2UgKi8KIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQlidWZmZXJfaW5mby0+ZG1hID0KLQkJCXBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCi0JCQkJc2tiLT5kYXRhICsgb2Zmc2V0LAotCQkJCXNpemUsCi0JCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoYWRhcHRlci0+cGRldiwgYnVmZmVyX2luZm8tPmRtYSkpIHsKLQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRYIERNQSBtYXAgZmFpbGVkXG4iKTsKLQkJCWFkYXB0ZXItPnR4X2RtYV9mYWlsZWQrKzsKLQkJCXJldHVybiAtMTsKLQkJfQogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbMF0gKyBvZmZzZXQ7CisJCWNvdW50Kys7CiAKIAkJbGVuIC09IHNpemU7CiAJCW9mZnNldCArPSBzaXplOwotCQljb3VudCsrOwotCQlpKys7Ci0JCWlmIChpID09IHR4X3JpbmctPmNvdW50KQotCQkJaSA9IDA7CisKKwkJaWYgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisJCX0KIAl9CiAKIAlmb3IgKGYgPSAwOyBmIDwgbnJfZnJhZ3M7IGYrKykgewpAQCAtMzg3NSw0OSArMzg2OCwyNyBAQAogCiAJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXTsKIAkJbGVuID0gZnJhZy0+c2l6ZTsKLQkJb2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQ7CisJCW9mZnNldCA9IDA7CiAKIAkJd2hpbGUgKGxlbikgeworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisKIAkJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQkJc2l6ZSA9IG1pbihsZW4sIG1heF9wZXJfdHhkKTsKLQkJCS8qIFdvcmthcm91bmQgZm9yIHByZW1hdHVyZSBkZXNjIHdyaXRlLWJhY2tzCi0JCQkgKiBpbiBUU08gbW9kZS4gIEFwcGVuZCA0LWJ5dGUgc2VudGluZWwgZGVzYyAqLwotCQkJaWYgKG1zcyAmJiBmID09IChucl9mcmFncy0xKSAmJiBzaXplID09IGxlbiAmJiBzaXplID4gOCkKLQkJCQlzaXplIC09IDQ7CiAKIAkJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOwogCQkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwotCQkJYnVmZmVyX2luZm8tPmRtYSA9Ci0JCQkJcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCWZyYWctPnBhZ2UsCi0JCQkJCW9mZnNldCwKLQkJCQkJc2l6ZSwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7Ci0JCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGFkYXB0ZXItPnBkZXYsCi0JCQkJCQkgIGJ1ZmZlcl9pbmZvLT5kbWEpKSB7Ci0JCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJCQkiVFggRE1BIHBhZ2UgbWFwIGZhaWxlZFxuIik7Ci0JCQkJYWRhcHRlci0+dHhfZG1hX2ZhaWxlZCsrOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQogCQkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCQkJYnVmZmVyX2luZm8tPmRtYSA9IG1hcFtmICsgMV0gKyBvZmZzZXQ7CiAKIAkJCWxlbiAtPSBzaXplOwogCQkJb2Zmc2V0ICs9IHNpemU7CiAJCQljb3VudCsrOwotCi0JCQlpKys7Ci0JCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCQlpID0gMDsKIAkJfQogCX0KIAotCWlmIChpID09IDApCi0JCWkgPSB0eF9yaW5nLT5jb3VudCAtIDE7Ci0JZWxzZQotCQlpLS07Ci0KIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC00MDY5LDcgKzQwNDAsNiBAQAogCXVuc2lnbmVkIGludCBtYXhfdHhkX3B3ciA9IEUxMDAwX01BWF9UWERfUFdSOwogCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7CiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3M7CiAJdW5zaWduZWQgaW50IG1zczsKIAlpbnQgY291bnQgPSAwOwpAQCAtNDEzOCwxOCArNDEwOCwxMiBAQAogCWlmIChhZGFwdGVyLT5ody5tYWMudHhfcGt0X2ZpbHRlcmluZykKIAkJZTEwMDBfdHJhbnNmZXJfZGhjcF9pbmZvKGFkYXB0ZXIsIHNrYik7CiAKLQlpZiAoIXNwaW5fdHJ5bG9ja19pcnFzYXZlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpKQotCQkvKiBDb2xsaXNpb24gLSB0ZWxsIHVwcGVyIGxheWVyIHRvIHJlcXVldWUgKi8KLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0KIAkvKgogCSAqIG5lZWQ6IGNvdW50ICsgMiBkZXNjIGdhcCB0byBrZWVwIHRhaWwgZnJvbSB0b3VjaGluZwogCSAqIGhlYWQsIG90aGVyd2lzZSB0cnkgbmV4dCB0aW1lCiAJICovCi0JaWYgKGUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBjb3VudCArIDIpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnR4X3F1ZXVlX2xvY2ssIGlycV9mbGFncyk7CisJaWYgKGUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBjb3VudCArIDIpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQogCiAJaWYgKGFkYXB0ZXItPnZsZ3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewogCQl0eF9mbGFncyB8PSBFMTAwMF9UWF9GTEFHU19WTEFOOwpAQCAtNDE2MSw3ICs0MTI1LDYgQEAKIAl0c28gPSBlMTAwMF90c28oYWRhcHRlciwgc2tiKTsKIAlpZiAodHNvIDwgMCkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIApAQCAtNDE3OCwyMiArNDE0MSwyMCBAQAogCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfSVBWNDsKIAorCS8qIGlmIGNvdW50IGlzIDAgdGhlbiBtYXBwaW5nIGVycm9yIGhhcyBvY2N1cmVkICovCiAJY291bnQgPSBlMTAwMF90eF9tYXAoYWRhcHRlciwgc2tiLCBmaXJzdCwgbWF4X3Blcl90eGQsIG5yX2ZyYWdzLCBtc3MpOwotCWlmIChjb3VudCA8IDApIHsKLQkJLyogaGFuZGxlIHBjaV9tYXBfc2luZ2xlKCkgZXJyb3IgaW4gZTEwMDBfdHhfbWFwICovCisJaWYgKGNvdW50KSB7CisJCWUxMDAwX3R4X3F1ZXVlKGFkYXB0ZXIsIHR4X2ZsYWdzLCBjb3VudCk7CisJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCisJCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBNQVhfU0tCX0ZSQUdTICsgMik7CisKKwl9IGVsc2UgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwotCQlyZXR1cm4gTkVUREVWX1RYX09LOworCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gZmlyc3Q7CiAJfQogCi0JZTEwMDBfdHhfcXVldWUoYWRhcHRlciwgdHhfZmxhZ3MsIGNvdW50KTsKLQotCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCi0JLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNwYWNlIGluIHRoZSByaW5nIGZvciB0aGUgbmV4dCBzZW5kLiAqLwotCWUxMDAwX21heWJlX3N0b3BfdHgobmV0ZGV2LCBNQVhfU0tCX0ZSQUdTICsgMik7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50eF9xdWV1ZV9sb2NrLCBpcnFfZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKQEAgLTQ1NDMsNiArNDUwNCwxNCBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIEFFUiAoQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nKSBob29rcyAqLworCWVyciA9IHBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nIGZhaWxlZCAiCisJCSAgICAgICAgICAgICAgICAgICAgIjB4JXhcbiIsIGVycik7CisJCS8qIG5vbi1mYXRhbCwgY29udGludWUgKi8KKwl9CisKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwpAQCAtNDYzNywyNCArNDYwNiwyOSBAQAogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBlcnI7CisJcGNpX2Vyc19yZXN1bHRfdCByZXN1bHQ7CiAKIAllMTAwMGVfZGlzYWJsZV9sMWFzcG0ocGRldik7CiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOwotCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9IGVsc2UgeworCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwkJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAwKTsKKworCQllMTAwMGVfcmVzZXQoYWRhcHRlcik7CisJCWV3MzIoV1VTLCB+MCk7CisJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKIAl9Ci0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CisJcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMocGRldik7CiAKLQllMTAwMGVfcmVzZXQoYWRhcHRlcik7Ci0JZXczMihXVVMsIH4wKTsKLQotCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoqCkBAIC00OTIyLDEyICs0ODk2LDYgQEAKIAlpZiAocGNpX3VzaW5nX2RhYykKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKLQkvKgotCSAqIFdlIHNob3VsZCBub3QgYmUgdXNpbmcgTExUWCBhbnltb3JlLCBidXQgd2UgYXJlIHN0aWxsIFR4IGZhc3RlciB3aXRoCi0JICogaXQuCi0JICovCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7Ci0KIAlpZiAoZTEwMDBlX2VuYWJsZV9tbmdfcGFzc190aHJ1KCZhZGFwdGVyLT5odykpCiAJCWFkYXB0ZXItPmZsYWdzIHw9IEZMQUdfTU5HX1BUX0VOQUJMRUQ7CiAKQEAgLTUwOTEsNiArNTA1OSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGVycjsKIAogCS8qCiAJICogZmx1c2hfc2NoZWR1bGVkIHdvcmsgbWF5IHJlc2NoZWR1bGUgb3VyIHdhdGNoZG9nIHRhc2ssIHNvCkBAIC01MTI1LDYgKzUwOTQsMTIgQEAKIAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAKKwkvKiBBRVIgZGlzYWJsZSAqLworCWVyciA9IHBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOworCWlmIChlcnIpCisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJICAgICAgICAicGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcgZmFpbGVkIDB4JXhcbiIsIGVycik7CisKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKQEAgLTUxNTYsNiArNTEzMSw4IEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTczTCksIGJvYXJkXzgyNTczIH0sCiAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzRMKSwgYm9hcmRfODI1NzQgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzRMQSksIGJvYXJkXzgyNTc0IH0sCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTgzViksIGJvYXJkXzgyNTgzIH0sCiAKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODAwMDNFUzJMQU5fQ09QUEVSX0RQVCksCiAJICBib2FyZF84MDAwM2VzMmxhbiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTIxMDAuYyBiL2RyaXZlcnMvbmV0L2UyMTAwLmMKaW5kZXggYjA3YmExOS4uZDJmNmVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTIxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMjEwMC5jCkBAIC0yMTYsMTMgKzIxNiwxMyBAQAogCQlwcmludGsoIiAlMDJYIiwgc3RhdGlvbl9hZGRyW2ldKTsKIAogCWlmIChkZXYtPmlycSA8IDIpIHsKLQkJaW50IGlycWxpc3RbXSA9IHsxNSwxMSwxMCwxMiw1LDksMyw0fSwgaTsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJaW50IGlycWxpc3RbXSA9IHsxNSwgMTEsIDEwLCAxMiwgNSwgOSwgMywgNH07CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycWxpc3QpOyBpKyspCiAJCQlpZiAocmVxdWVzdF9pcnEgKGlycWxpc3RbaV0sIE5VTEwsIDAsICJib2d1cyIsIE5VTEwpICE9IC1FQlVTWSkgewogCQkJCWRldi0+aXJxID0gaXJxbGlzdFtpXTsKIAkJCQlicmVhazsKIAkJCX0KLQkJaWYgKGkgPj0gOCkgeworCQlpZiAoaSA+PSBBUlJBWV9TSVpFKGlycWxpc3QpKSB7CiAJCQlwcmludGsoIiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGRldi0+aXJxKTsKIAkJCXJldHZhbCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VlcHJvLmMgYi9kcml2ZXJzL25ldC9lZXByby5jCmluZGV4IGUxODdjODguLmNjMmFiNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VlcHJvLmMKKysrIGIvZHJpdmVycy9uZXQvZWVwcm8uYwpAQCAtNzM5LDYgKzczOSwxNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVlcHJvX2V0aHRvb2xfb3BzOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVlcHJvX25ldGRldl9vcHMgPSB7CisgCS5uZG9fb3BlbiAgICAgICAgICAgICAgID0gZWVwcm9fb3BlbiwKKyAJLm5kb19zdG9wICAgICAgICAgICAgICAgPSBlZXByb19jbG9zZSwKKyAJLm5kb19zdGFydF94bWl0ICAgIAk9IGVlcHJvX3NlbmRfcGFja2V0LAorIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKyAJLm5kb190eF90aW1lb3V0CQk9IGVlcHJvX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIFRoaXMgaXMgdGhlIHJlYWwgcHJvYmUgcm91dGluZS4gIExpbnV4IGhhcyBhIGhpc3Rvcnkgb2YgZnJpZW5kbHkgZGV2aWNlCiAgICBwcm9iZXMgb24gdGhlIElTQSBidXMuICBBIGdvb2QgZGV2aWNlIHByb2JlIGF2b2lkcyBkb2luZyB3cml0ZXMsIGFuZAogICAgdmVyaWZpZXMgdGhhdCB0aGUgY29ycmVjdCBkZXZpY2UgZXhpc3RzIGFuZCBmdW5jdGlvbnMuICAqLwpAQCAtODUxLDExICs4NjIsNyBAQAogIAkJfQogIAl9CiAKLSAJZGV2LT5vcGVuICAgICAgICAgICAgICAgPSBlZXByb19vcGVuOwotIAlkZXYtPnN0b3AgICAgICAgICAgICAgICA9IGVlcHJvX2Nsb3NlOwotIAlkZXYtPmhhcmRfc3RhcnRfeG1pdCAgICA9IGVlcHJvX3NlbmRfcGFja2V0OwotIAlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0gCWRldi0+dHhfdGltZW91dAkJPSBlZXByb190eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJPSAmZWVwcm9fbmV0ZGV2X29wczsKICAJZGV2LT53YXRjaGRvZ190aW1lbwk9IFRYX1RJTUVPVVQ7CiAJZGV2LT5ldGh0b29sX29wcwk9ICZlZXByb19ldGh0b29sX29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWV4cHJlc3MuYyBiL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKaW5kZXggOWZmM2YyZi4uMTY4NmRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWV4cHJlc3MuYworKysgYi9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCkBAIC0xMDQzLDYgKzEwNDMsMTcgQEAKIAlscC0+bGFzdF90eCA9IGppZmZpZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWV4cF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZWV4cF9vcGVuLAorCS5uZG9fc3RvcCAJCT0gZWV4cF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gZWV4cF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWV4cF9zZXRfbXVsdGljYXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBlZXhwX3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qCiAgKiBTYW5pdHkgY2hlY2sgdGhlIHN1c3BlY3RlZCBFdGhlckV4cHJlc3MgY2FyZAogICogUmVhZCBoYXJkd2FyZSBhZGRyZXNzLCByZXNldCBjYXJkLCBzaXplIG1lbW9yeSBhbmQgaW5pdGlhbGl6ZSBidWZmZXIKQEAgLTExNjMsMTEgKzExNzQsNyBAQAogCWxwLT5yeF9idWZfc3RhcnQgPSBUWF9CVUZfU1RBUlQgKyAobHAtPm51bV90eF9idWZzKlRYX0JVRl9TSVpFKTsKIAlscC0+d2lkdGggPSBidXN3aWR0aDsKIAotCWRldi0+b3BlbiA9IGVleHBfb3BlbjsKLQlkZXYtPnN0b3AgPSBlZXhwX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZWV4cF94bWl0OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmVleHBfc2V0X211bHRpY2FzdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBlZXhwX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmVleHBfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMipIWjsKIAogCXJldHVybiByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKaW5kZXggNjI3MWI5NC4uNmUzMTdjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhLmgKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBEUlZfTkFNRQkiZWhlYSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIkVIRUFfMDA5NiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIkVIRUFfMDEwMCIKIAogLyogZUhFQSBjYXBhYmlsaXR5IGZsYWdzICovCiAjZGVmaW5lIERMUEFSX1BPUlRfQUREX1JFTSAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwppbmRleCBkZmU5MjI2Li5hYzBjNWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKQEAgLTE1NSw2ICsxNTUsOCBAQAogCWludCBudW1fZndfaGFuZGxlcywgaywgbDsKIAogCS8qIERldGVybWluZSBudW1iZXIgb2YgaGFuZGxlcyAqLworCW11dGV4X2xvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWRhcHRlciwgJmFkYXB0ZXJfbGlzdCwgbGlzdCkgewogCQludW1fYWRhcHRlcnMrKzsKIApAQCAtMTc2LDE1ICsxNzgsMTkgQEAKIAlpZiAobnVtX2Z3X2hhbmRsZXMpIHsKIAkJYXJyID0ga3phbGxvYyhudW1fZndfaGFuZGxlcyAqIHNpemVvZigqYXJyKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYXJyKQotCQkJcmV0dXJuOyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KKwkJCWdvdG8gb3V0OyAgLyogS2VlcCB0aGUgZXhpc3RpbmcgYXJyYXkgKi8KIAl9IGVsc2UKIAkJZ290byBvdXRfdXBkYXRlOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGFwdGVyLCAmYWRhcHRlcl9saXN0LCBsaXN0KSB7CisJCWlmIChudW1fYWRhcHRlcnMgPT0gMCkKKwkJCWJyZWFrOworCiAJCWZvciAoayA9IDA7IGsgPCBFSEVBX01BWF9QT1JUUzsgaysrKSB7CiAJCQlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gYWRhcHRlci0+cG9ydFtrXTsKIAotCQkJaWYgKCFwb3J0IHx8IChwb3J0LT5zdGF0ZSAhPSBFSEVBX1BPUlRfVVApKQorCQkJaWYgKCFwb3J0IHx8IChwb3J0LT5zdGF0ZSAhPSBFSEVBX1BPUlRfVVApCisJCQkJfHwgKG51bV9wb3J0cyA9PSAwKSkKIAkJCQljb250aW51ZTsKIAogCQkJZm9yIChsID0gMDsKQEAgLTIwNyw2ICsyMTMsNyBAQAogCQkJfQogCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKIAkJCWFycltpKytdLmZ3aCA9IHBvcnQtPnFwX2VxLT5md19oYW5kbGU7CisJCQludW1fcG9ydHMtLTsKIAkJfQogCiAJCWFycltpXS5hZGggPSBhZGFwdGVyLT5oYW5kbGU7CkBAIC0yMTYsMTYgKzIyMywyMCBAQAogCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKIAkJCWFycltpKytdLmZ3aCA9IGFkYXB0ZXItPm1yLmhhbmRsZTsKIAkJfQorCQludW1fYWRhcHRlcnMtLTsKIAl9CiAKIG91dF91cGRhdGU6CiAJa2ZyZWUoZWhlYV9md19oYW5kbGVzLmFycik7CiAJZWhlYV9md19oYW5kbGVzLmFyciA9IGFycjsKIAllaGVhX2Z3X2hhbmRsZXMubnVtX2VudHJpZXMgPSBpOworb3V0OgorCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBlaGVhX3VwZGF0ZV9iY21jX3JlZ2lzdHJhdGlvbnModm9pZCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBlaGVhX2JjbWNfcmVnX2VudHJ5ICphcnIgPSBOVUxMOwogCXN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IGVoZWFfbWNfbGlzdCAqbWNfZW50cnk7CkBAIC0yMzMsNiArMjQ0LDggQEAKIAlpbnQgaSA9IDA7CiAJaW50IGs7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWhlYV9iY21jX3JlZ3MubG9jaywgZmxhZ3MpOworCiAJLyogRGV0ZXJtaW5lIG51bWJlciBvZiByZWdpc3RyYXRpb25zICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShhZGFwdGVyLCAmYWRhcHRlcl9saXN0LCBsaXN0KQogCQlmb3IgKGsgPSAwOyBrIDwgRUhFQV9NQVhfUE9SVFM7IGsrKykgewpAQCAtMjUwLDcgKzI2Myw3IEBACiAJaWYgKG51bV9yZWdpc3RyYXRpb25zKSB7CiAJCWFyciA9IGt6YWxsb2MobnVtX3JlZ2lzdHJhdGlvbnMgKiBzaXplb2YoKmFyciksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWFycikKLQkJCXJldHVybjsgIC8qIEtlZXAgdGhlIGV4aXN0aW5nIGFycmF5ICovCisJCQlnb3RvIG91dDsgIC8qIEtlZXAgdGhlIGV4aXN0aW5nIGFycmF5ICovCiAJfSBlbHNlCiAJCWdvdG8gb3V0X3VwZGF0ZTsKIApAQCAtMjYxLDYgKzI3NCw5IEBACiAJCQlpZiAoIXBvcnQgfHwgKHBvcnQtPnN0YXRlICE9IEVIRUFfUE9SVF9VUCkpCiAJCQkJY29udGludWU7CiAKKwkJCWlmIChudW1fcmVnaXN0cmF0aW9ucyA9PSAwKQorCQkJCWdvdG8gb3V0X3VwZGF0ZTsKKwogCQkJYXJyW2ldLmFkaCA9IGFkYXB0ZXItPmhhbmRsZTsKIAkJCWFycltpXS5wb3J0X2lkID0gcG9ydC0+bG9naWNhbF9wb3J0X2lkOwogCQkJYXJyW2ldLnJlZ190eXBlID0gRUhFQV9CQ01DX0JST0FEQ0FTVCB8CkBAIC0yNzIsOSArMjg4LDEzIEBACiAJCQlhcnJbaV0ucmVnX3R5cGUgPSBFSEVBX0JDTUNfQlJPQURDQVNUIHwKIAkJCQkJICBFSEVBX0JDTUNfVkxBTklEX0FMTDsKIAkJCWFycltpKytdLm1hY2FkZHIgPSBwb3J0LT5tYWNfYWRkcjsKKwkJCW51bV9yZWdpc3RyYXRpb25zIC09IDI7CiAKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkobWNfZW50cnksCiAJCQkJCSAgICAmcG9ydC0+bWNfbGlzdC0+bGlzdCwgbGlzdCkgeworCQkJCWlmIChudW1fcmVnaXN0cmF0aW9ucyA9PSAwKQorCQkJCQlnb3RvIG91dF91cGRhdGU7CisKIAkJCQlhcnJbaV0uYWRoID0gYWRhcHRlci0+aGFuZGxlOwogCQkJCWFycltpXS5wb3J0X2lkID0gcG9ydC0+bG9naWNhbF9wb3J0X2lkOwogCQkJCWFycltpXS5yZWdfdHlwZSA9IEVIRUFfQkNNQ19TQ09QRV9BTEwgfApAQCAtMjg4LDYgKzMwOCw3IEBACiAJCQkJCQkgIEVIRUFfQkNNQ19NVUxUSUNBU1QgfAogCQkJCQkJICBFSEVBX0JDTUNfVkxBTklEX0FMTDsKIAkJCQlhcnJbaSsrXS5tYWNhZGRyID0gbWNfZW50cnktPm1hY2FkZHI7CisJCQkJbnVtX3JlZ2lzdHJhdGlvbnMgLT0gMjsKIAkJCX0KIAkJfQogCX0KQEAgLTI5Niw2ICszMTcsOCBAQAogCWtmcmVlKGVoZWFfYmNtY19yZWdzLmFycik7CiAJZWhlYV9iY21jX3JlZ3MuYXJyID0gYXJyOwogCWVoZWFfYmNtY19yZWdzLm51bV9lbnRyaWVzID0gaTsKK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGVhX2JjbWNfcmVncy5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZWhlYV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTMwOCw3ICszMzEsNyBAQAogCiAJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CiAKLQljYjIgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJY2IyID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKCFjYjIpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjIiKTsKIAkJZ290byBvdXQ7CkBAIC0zNDEsNyArMzY0LDcgQEAKIAlzdGF0cy0+cnhfcGFja2V0cyA9IHJ4X3BhY2tldHM7CiAKIG91dF9oZXJyOgotCWtmcmVlKGNiMik7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMik7CiBvdXQ6CiAJcmV0dXJuIHN0YXRzOwogfQpAQCAtMzcwLDggKzM5Myw2IEBACiAJCQkJCQkJICAgICAgRUhFQV9MX1BLVF9TSVpFKTsKIAkJCWlmICghc2tiX2Fycl9ycTFbaW5kZXhdKSB7CiAJCQkJcHItPnJxMV9za2JhLm9zX3NrYnMgPSBmaWxsX3dxZXMgLSBpOwotCQkJCWVoZWFfZXJyb3IoIiVzOiBubyBtZW0gZm9yIHNrYi8lZCB3cWVzIGZpbGxlZCIsCi0JCQkJCSAgIGRldi0+bmFtZSwgaSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTM4NywyNiArNDA4LDE5IEBACiAJZWhlYV91cGRhdGVfcnExYShwci0+cXAsIGFkZGVyKTsKIH0KIAotc3RhdGljIGludCBlaGVhX2luaXRfZmlsbF9ycTEoc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByLCBpbnQgbnJfcnExYSkKK3N0YXRpYyB2b2lkIGVoZWFfaW5pdF9maWxsX3JxMShzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIsIGludCBucl9ycTFhKQogewotCWludCByZXQgPSAwOwogCXN0cnVjdCBza19idWZmICoqc2tiX2Fycl9ycTEgPSBwci0+cnExX3NrYmEuYXJyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwci0+cG9ydC0+bmV0ZGV2OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IHByLT5ycTFfc2tiYS5sZW47IGkrKykgewogCQlza2JfYXJyX3JxMVtpXSA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBFSEVBX0xfUEtUX1NJWkUpOwotCQlpZiAoIXNrYl9hcnJfcnExW2ldKSB7Ci0JCQllaGVhX2Vycm9yKCIlczogbm8gbWVtIGZvciBza2IvJWQgd3FlcyBmaWxsZWQiLAotCQkJCSAgIGRldi0+bmFtZSwgaSk7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJaWYgKCFza2JfYXJyX3JxMVtpXSkKKwkJCWJyZWFrOwogCX0KIAkvKiBSaW5nIGRvb3JiZWxsICovCiAJZWhlYV91cGRhdGVfcnExYShwci0+cXAsIG5yX3JxMWEpOwotb3V0OgotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgZWhlYV9yZWZpbGxfcnFfZGVmKHN0cnVjdCBlaGVhX3BvcnRfcmVzICpwciwKQEAgLTQzNSwxMCArNDQ5LDEyIEBACiAJCXU2NCB0bXBfYWRkcjsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBwYWNrZXRfc2l6ZSk7CiAJCWlmICghc2tiKSB7Ci0JCQllaGVhX2Vycm9yKCIlczogbm8gbWVtIGZvciBza2IvJWQgd3FlcyBmaWxsZWQiLAotCQkJCSAgIHByLT5wb3J0LT5uZXRkZXYtPm5hbWUsIGkpOwogCQkJcV9za2JhLT5vc19za2JzID0gZmlsbF93cWVzIC0gaTsKLQkJCXJldCA9IC1FTk9NRU07CisJCQlpZiAocV9za2JhLT5vc19za2JzID09IHFfc2tiYS0+bGVuIC0gMikgeworCQkJCWVoZWFfaW5mbygiJXM6IHJxJWkgcmFuIGRyeSAtIG5vIG1lbSBmb3Igc2tiIiwKKwkJCQkJICBwci0+cG9ydC0+bmV0ZGV2LT5uYW1lLCBycV9ucik7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCX0KIAkJCWJyZWFrOwogCQl9CiAJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKQEAgLTgzMCw3ICs4NDYsNyBAQAogCXdoaWxlICgocnggIT0gYnVkZ2V0KSB8fCBmb3JjZV9pcnEpIHsKIAkJcHItPnBvbGxfY291bnRlciA9IDA7CiAJCWZvcmNlX2lycSA9IDA7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQllaGVhX3Jlc2V0X2NxX2VwKHByLT5yZWN2X2NxKTsKIAkJZWhlYV9yZXNldF9jcV9lcChwci0+c2VuZF9jcSk7CiAJCWVoZWFfcmVzZXRfY3FfbjEocHItPnJlY3ZfY3EpOwpAQCAtODQxLDcgKzg1Nyw3IEBACiAJCWlmICghY3FlICYmICFjcWVfc2tiKQogCQkJcmV0dXJuIHJ4OwogCi0JCWlmICghbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkKKwkJaWYgKCFuYXBpX3Jlc2NoZWR1bGUobmFwaSkpCiAJCQlyZXR1cm4gcng7CiAKIAkJY3FlX3NrYiA9IGVoZWFfcHJvY19jcWVzKHByLCBFSEVBX1BPTExfTUFYX0NRRVMpOwpAQCAtODU5LDcgKzg3NSw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2RlZl9xcHM7IGkrKykKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPnBvcnRfcmVzW2ldLm5hcGkpOworCQluYXBpX3NjaGVkdWxlKCZwb3J0LT5wb3J0X3Jlc1tpXS5uYXBpKTsKIH0KICNlbmRpZgogCkBAIC04NjcsNyArODgzLDcgQEAKIHsKIAlzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIgPSBwYXJhbTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZwci0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmcHItPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtOTE1LDcgKzkzMSw3IEBACiAJc3RydWN0IGhjcF9laGVhX3BvcnRfY2IwICpjYjA7CiAKIAkvKiBtYXkgYmUgY2FsbGVkIHZpYSBlaGVhX25lcV90YXNrbGV0KCkgKi8KLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKCFjYjApIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjAiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTk5Niw3ICsxMDEyLDcgQEAKIG91dF9mcmVlOgogCWlmIChyZXQgfHwgbmV0aWZfbXNnX3Byb2JlKHBvcnQpKQogCQllaGVhX2R1bXAoY2IwLCBzaXplb2YoKmNiMCksICJlaGVhX3NlbnNlX3BvcnRfYXR0ciIpOwotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEwMDcsNyArMTAyMyw3IEBACiAJdTY0IGhyZXQ7CiAJaW50IHJldCA9IDA7CiAKLQljYjQgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2I0ID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjQpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjQiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTEwNzUsNyArMTA5MSw3IEBACiAJaWYgKCFwcm9wX2NhcnJpZXJfc3RhdGUgfHwgKHBvcnQtPnBoeV9saW5rID09IEVIRUFfUEhZX0xJTktfVVApKQogCQluZXRpZl9jYXJyaWVyX29uKHBvcnQtPm5ldGRldik7CiAKLQlrZnJlZShjYjQpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjQpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xMjAxLDExICsxMjE3LDExIEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgZWhlYV9xcF9pbml0X2F0dHIgKmluaXRfYXR0ciA9ICZwci0+cXAtPmluaXRfYXR0cjsKIAotCXJldCA9IGVoZWFfaW5pdF9maWxsX3JxMShwciwgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnExCi0JCQkJICAgICAtIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMgotCQkJCSAgICAgLSBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMgLSAxKTsKKwllaGVhX2luaXRfZmlsbF9ycTEocHIsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMQorCQkJICAgICAgIC0gaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEyCisJCQkgICAgICAgLSBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMgLSAxKTsKIAotCXJldCB8PSBlaGVhX3JlZmlsbF9ycTIocHIsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMiAtIDEpOworCXJldCA9IGVoZWFfcmVmaWxsX3JxMihwciwgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEyIC0gMSk7CiAKIAlyZXQgfD0gZWhlYV9yZWZpbGxfcnEzKHByLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMgLSAxKTsKIApAQCAtMTMwMiw3ICsxMzE4LDcgQEAKIAlzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjAgKmNiMDsKIAogCXJldCA9IC1FTk9NRU07Ci0JY2IwID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IwKQogCQlnb3RvIG91dDsKIApAQCAtMTMzOCw3ICsxMzU0LDcgQEAKIAlyZXQgPSAwOwogCiBvdXRfZnJlZToKLQlrZnJlZShjYjApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjApOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0xNzQ4LDcgKzE3NjQsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjApIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjAiKTsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTE3NjksOCArMTc4NSw2IEBACiAKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgbWFjX2FkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwogCi0Jc3Bpbl9sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKLQogCS8qIERlcmVnaXN0ZXIgb2xkIE1BQyBpbiBwSFlQICovCiAJaWYgKHBvcnQtPnN0YXRlID09IEVIRUFfUE9SVF9VUCkgewogCQlyZXQgPSBlaGVhX2Jyb2FkY2FzdF9yZWdfaGVscGVyKHBvcnQsIEhfREVSRUdfQkNNQyk7CkBAIC0xNzkxLDkgKzE4MDUsOCBAQAogCiBvdXRfdXByZWdzOgogCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOwotCXNwaW5fdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKIG91dF9mcmVlOgotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE4MTcsNyArMTgzMCw3IEBACiAJaWYgKChlbmFibGUgJiYgcG9ydC0+cHJvbWlzYykgfHwgKCFlbmFibGUgJiYgIXBvcnQtPnByb21pc2MpKQogCQlyZXR1cm47CiAKLQljYjcgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJY2I3ID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJaWYgKCFjYjcpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjciKTsKIAkJZ290byBvdXQ7CkBAIC0xODM2LDcgKzE4NDksNyBAQAogCiAJcG9ydC0+cHJvbWlzYyA9IGVuYWJsZTsKIG91dDoKLQlrZnJlZShjYjcpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjcpOwogCXJldHVybjsKIH0KIApAQCAtMTk1Myw4ICsxOTY2LDYgQEAKIAl9CiAJZWhlYV9wcm9taXNjdW91cyhkZXYsIDApOwogCi0Jc3Bpbl9sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKLQogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCWVoZWFfYWxsbXVsdGkoZGV2LCAxKTsKIAkJZ290byBvdXQ7CkBAIC0xOTg0LDcgKzE5OTUsNiBAQAogCX0KIG91dDoKIAllaGVhX3VwZGF0ZV9iY21jX3JlZ2lzdHJhdGlvbnMoKTsKLQlzcGluX3VubG9jaygmZWhlYV9iY21jX3JlZ3MubG9jayk7CiAJcmV0dXJuOwogfQogCkBAIC0yMjE3LDcgKzIyMjcsNyBAQAogCiAJcG9ydC0+dmdycCA9IGdycDsKIAotCWNiMSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMSkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMSIpOwogCQlnb3RvIG91dDsKQEAgLTIyMjgsNyArMjIzOCw3IEBACiAJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKQogCQllaGVhX2Vycm9yKCJtb2RpZnlfZWhlYV9wb3J0IGZhaWxlZCIpOwogCi0Ja2ZyZWUoY2IxKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IxKTsKIG91dDoKIAlyZXR1cm47CiB9CkBAIC0yMjQxLDcgKzIyNTEsNyBAQAogCWludCBpbmRleDsKIAl1NjQgaHJldDsKIAotCWNiMSA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjEgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMSkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMSIpOwogCQlnb3RvIG91dDsKQEAgLTIyNjIsNyArMjI3Miw3IEBACiAJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKQogCQllaGVhX2Vycm9yKCJtb2RpZnlfZWhlYV9wb3J0IGZhaWxlZCIpOwogb3V0OgotCWtmcmVlKGNiMSk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMSk7CiAJcmV0dXJuOwogfQogCkBAIC0yMjc2LDcgKzIyODYsNyBAQAogCiAJdmxhbl9ncm91cF9zZXRfZGV2aWNlKHBvcnQtPnZncnAsIHZpZCwgTlVMTCk7CiAKLQljYjEgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IxID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjEpIHsKIAkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjEiKTsKIAkJZ290byBvdXQ7CkBAIC0yMjk3LDcgKzIzMDcsNyBAQAogCWlmIChocmV0ICE9IEhfU1VDQ0VTUykKIAkJZWhlYV9lcnJvcigibW9kaWZ5X2VoZWFfcG9ydCBmYWlsZWQiKTsKIG91dDoKLQlrZnJlZShjYjEpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjEpOwogCXJldHVybjsKIH0KIApAQCAtMjMwOSw3ICsyMzE5LDcgQEAKIAl1NjQgZHVtbXk2NCA9IDA7CiAJc3RydWN0IGhjcF9tb2RpZnlfcXBfY2IwICpjYjA7CiAKLQljYjAgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJY2IwID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFjYjApIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yMzcyLDcgKzIzODIsNyBAQAogCiAJcmV0ID0gMDsKIG91dDoKLQlrZnJlZShjYjApOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0NjUsOCArMjQ3NSw2IEBACiAJaWYgKHBvcnQtPnN0YXRlID09IEVIRUFfUE9SVF9VUCkKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7Ci0KIAlyZXQgPSBlaGVhX3BvcnRfcmVzX3NldHVwKHBvcnQsIHBvcnQtPm51bV9kZWZfcXBzLAogCQkJCSAgcG9ydC0+bnVtX2FkZF90eF9xcHMpOwogCWlmIChyZXQpIHsKQEAgLTI1MDMsOCArMjUxMSw2IEBACiAJCX0KIAl9CiAKLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwotCiAJcmV0ID0gZWhlYV9icm9hZGNhc3RfcmVnX2hlbHBlcihwb3J0LCBIX1JFR19CQ01DKTsKIAlpZiAocmV0KSB7CiAJCXJldCA9IC1FSU87CkBAIC0yNTI2LDEwICsyNTMyLDcgQEAKIAkJZWhlYV9pbmZvKCJGYWlsZWQgc3RhcnRpbmcgJXMuIHJldD0laSIsIGRldi0+bmFtZSwgcmV0KTsKIAogCWVoZWFfdXBkYXRlX2JjbWNfcmVnaXN0cmF0aW9ucygpOwotCXNwaW5fdW5sb2NrKCZlaGVhX2JjbWNfcmVncy5sb2NrKTsKLQogCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKLQltdXRleF91bmxvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNTc5LDkgKzI1ODIsNiBAQAogCWlmIChwb3J0LT5zdGF0ZSA9PSBFSEVBX1BPUlRfRE9XTikKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7Ci0KLQlzcGluX2xvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogCWVoZWFfZHJvcF9tdWx0aWNhc3RfbGlzdChkZXYpOwogCWVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9ERVJFR19CQ01DKTsKIApAQCAtMjU5MCw3ICsyNTkwLDYgQEAKIAlwb3J0LT5zdGF0ZSA9IEVIRUFfUE9SVF9ET1dOOwogCiAJZWhlYV91cGRhdGVfYmNtY19yZWdpc3RyYXRpb25zKCk7Ci0Jc3Bpbl91bmxvY2soJmVoZWFfYmNtY19yZWdzLmxvY2spOwogCiAJcmV0ID0gZWhlYV9jbGVhbl9hbGxfcG9ydHJlcyhwb3J0KTsKIAlpZiAocmV0KQpAQCAtMjU5OCw3ICsyNTk3LDYgQEAKIAkJCSAgZGV2LT5uYW1lLCByZXQpOwogCiAJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOwotCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTI2NjQsNyArMjY2Miw3IEBACiAJdTY0IGR1bW15NjQgPSAwOwogCXUxNiBkdW1teTE2ID0gMDsKIAotCWNiMCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjAgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiMCkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTI3MTYsNyArMjcxNCw3IEBACiAKIAlyZXQgPSAwOwogb3V0OgotCWtmcmVlKGNiMCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWNiMCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjc2Niw3ICsyNzY0LDcgQEAKIAl1NjQgZHVtbXk2NCA9IDA7CiAJdTE2IGR1bW15MTYgPSAwOwogCi0JY2IwID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWNiMCA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IwKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpAQCAtMjgxOSw3ICsyODE3LDcgQEAKIAkJZWhlYV9yZWZpbGxfcnEzKHByLCAwKTsKIAl9CiBvdXQ6Ci0Ja2ZyZWUoY2IwKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IwKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yOTUwLDcgKzI5NDgsNyBAQAogCXU2NCBocmV0OwogCWludCByZXQ7CiAKLQljYiA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYiA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWlmICghY2IpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC0yOTY3LDcgKzI5NjUsNyBAQAogCXJldCA9IDA7CiAKIG91dF9oZXJyOgotCWtmcmVlKGNiKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2IpOwogb3V0OgogCXJldHVybiByZXQ7CiB9CkBAIC0yOTgxLDcgKzI5NzksNyBAQAogCSpqdW1ibyA9IDA7CiAKIAkvKiAoVHJ5IHRvKSBlbmFibGUgKmp1bWJvIGZyYW1lcyAqLwotCWNiNCA9IGt6YWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwljYjQgPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAlpZiAoIWNiNCkgewogCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiNCIpOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMzAwOSw3ICszMDA3LDcgQEAKIAkJfSBlbHNlCiAJCQlyZXQgPSAtRUlOVkFMOwogCi0JCWtmcmVlKGNiNCk7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyljYjQpOwogCX0KIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtMzA0MCw3ICszMDM4LDcgQEAKIAlwb3J0LT5vZmRldi5kZXYucGFyZW50ID0gJnBvcnQtPmFkYXB0ZXItPm9mZGV2LT5kZXY7CiAJcG9ydC0+b2ZkZXYuZGV2LmJ1cyA9ICZpYm1lYnVzX2J1c190eXBlOwogCi0Jc3ByaW50Zihwb3J0LT5vZmRldi5kZXYuYnVzX2lkLCAicG9ydCVkIiwgcG9ydF9uYW1lX2NudCsrKTsKKwlkZXZfc2V0X25hbWUoJnBvcnQtPm9mZGV2LmRldiwgInBvcnQlZCIsIHBvcnRfbmFtZV9jbnQrKyk7CiAJcG9ydC0+b2ZkZXYuZGV2LnJlbGVhc2UgPSBsb2dpY2FsX3BvcnRfcmVsZWFzZTsKIAogCXJldCA9IG9mX2RldmljZV9yZWdpc3RlcigmcG9ydC0+b2ZkZXYpOwpAQCAtMzA2OSw2ICszMDY3LDIyIEBACiAJb2ZfZGV2aWNlX3VucmVnaXN0ZXIoJnBvcnQtPm9mZGV2KTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlaGVhX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGVoZWFfb3BlbiwKKwkubmRvX3N0b3AJCT0gZWhlYV9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlaGVhX3N0YXJ0X3htaXQsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVoZWFfbmV0cG9sbCwKKyNlbmRpZgorCS5uZG9fZ2V0X3N0YXRzCQk9IGVoZWFfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZWhlYV9zZXRfbWFjX2FkZHIsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBlaGVhX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZWhlYV9jaGFuZ2VfbXR1LAorCS5uZG9fdmxhbl9yeF9yZWdpc3Rlcgk9IGVoZWFfdmxhbl9yeF9yZWdpc3RlciwKKwkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IGVoZWFfdmxhbl9yeF9hZGRfdmlkLAorCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAk9IGVoZWFfdmxhbl9yeF9raWxsX3ZpZAorfTsKKwogc3RydWN0IGVoZWFfcG9ydCAqZWhlYV9zZXR1cF9zaW5nbGVfcG9ydChzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgdTMyIGxvZ2ljYWxfcG9ydF9pZCwKIAkJCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCkBAIC0zMTIxLDE5ICszMTM1LDkgQEAKIAkvKiBpbml0aWFsaXplIG5ldF9kZXZpY2Ugc3RydWN0dXJlICovCiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZwb3J0LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCi0JZGV2LT5vcGVuID0gZWhlYV9vcGVuOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaGVhX25ldHBvbGw7Ci0jZW5kaWYKLQlkZXYtPnN0b3AgPSBlaGVhX3N0b3A7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBlaGVhX3N0YXJ0X3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMgPSBlaGVhX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGVoZWFfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gZWhlYV9zZXRfbWFjX2FkZHI7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gZWhlYV9jaGFuZ2VfbXR1OwotCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGVoZWFfdmxhbl9yeF9yZWdpc3RlcjsKLQlkZXYtPnZsYW5fcnhfYWRkX3ZpZCA9IGVoZWFfdmxhbl9yeF9hZGRfdmlkOwotCWRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IGVoZWFfdmxhbl9yeF9raWxsX3ZpZDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmZWhlYV9uZXRkZXZfb3BzOworCWVoZWFfc2V0X2V0aHRvb2xfb3BzKGRldik7CisKIAlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX1RTTwogCQkgICAgICB8IE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSFdfVkxBTl9UWAogCQkgICAgICB8IE5FVElGX0ZfSFdfVkxBTl9SWCB8IE5FVElGX0ZfSFdfVkxBTl9GSUxURVIKQEAgLTMxNDIsNyArMzE0Niw2IEBACiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVIRUFfV0FUQ0hfRE9HX1RJTUVPVVQ7CiAKIAlJTklUX1dPUksoJnBvcnQtPnJlc2V0X3Rhc2ssIGVoZWFfcmVzZXRfcG9ydCk7Ci0JZWhlYV9zZXRfZXRodG9vbF9vcHMoZGV2KTsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpIHsKQEAgLTMzNzAsNyArMzM3Myw2IEBACiAJCWVoZWFfZXJyb3IoIkludmFsaWQgaWJtZWJ1cyBkZXZpY2UgcHJvYmVkIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7CiAKIAlhZGFwdGVyID0ga3phbGxvYyhzaXplb2YoKmFkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFkYXB0ZXIpIHsKQEAgLTM0NTAsMTEgKzM0NTIsMTIgQEAKIAllaGVhX2Rlc3Ryb3lfZXEoYWRhcHRlci0+bmVxKTsKIAogb3V0X2ZyZWVfYWQ6CisJbGlzdF9kZWwoJmFkYXB0ZXItPmxpc3QpOwogCWtmcmVlKGFkYXB0ZXIpOwogCiBvdXQ6CiAJZWhlYV91cGRhdGVfZmlybXdhcmVfaGFuZGxlcygpOwotCW11dGV4X3VubG9jaygmZWhlYV9md19oYW5kbGVzLmxvY2spOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzQ3Myw4ICszNDc2LDYgQEAKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKLQltdXRleF9sb2NrKCZlaGVhX2Z3X2hhbmRsZXMubG9jayk7Ci0KIAlpYm1lYnVzX2ZyZWVfaXJxKGFkYXB0ZXItPm5lcS0+YXR0ci5pc3QxLCBhZGFwdGVyKTsKIAl0YXNrbGV0X2tpbGwoJmFkYXB0ZXItPm5lcV90YXNrbGV0KTsKIApAQCAtMzQ4NCw3ICszNDg1LDYgQEAKIAlrZnJlZShhZGFwdGVyKTsKIAogCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKLQltdXRleF91bmxvY2soJmVoZWFfZndfaGFuZGxlcy5sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzUxOCwxMiArMzUxOCwxNCBAQAogCQkvKiBSZWFkZCBjYW5jZWxlZCBtZW1vcnkgYmxvY2sgKi8KIAljYXNlIE1FTV9PTkxJTkU6CiAJCWVoZWFfaW5mbygibWVtb3J5IGlzIGdvaW5nIG9ubGluZSIpOworCQlzZXRfYml0KF9fRUhFQV9TVE9QX1hGRVIsICZlaGVhX2RyaXZlcl9mbGFncyk7CiAJCWlmIChlaGVhX2FkZF9zZWN0X2JtYXAoYXJnLT5zdGFydF9wZm4sIGFyZy0+bnJfcGFnZXMpKQogCQkJcmV0dXJuIE5PVElGWV9CQUQ7CiAJCWVoZWFfcmVyZWdfbXJzKE5VTEwpOwogCQlicmVhazsKIAljYXNlIE1FTV9HT0lOR19PRkZMSU5FOgogCQllaGVhX2luZm8oIm1lbW9yeSBpcyBnb2luZyBvZmZsaW5lIik7CisJCXNldF9iaXQoX19FSEVBX1NUT1BfWEZFUiwgJmVoZWFfZHJpdmVyX2ZsYWdzKTsKIAkJaWYgKGVoZWFfcmVtX3NlY3RfYm1hcChhcmctPnN0YXJ0X3BmbiwgYXJnLT5ucl9wYWdlcykpCiAJCQlyZXR1cm4gTk9USUZZX0JBRDsKIAkJZWhlYV9yZXJlZ19tcnMoTlVMTCk7CkBAIC0zNTMxLDYgKzM1MzMsOSBAQAogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KKworCWVoZWFfdXBkYXRlX2Zpcm13YXJlX2hhbmRsZXMoKTsKKwogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYwppbmRleCA0OWQ3NjZlLi4zNzQ3NDU3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKQEAgLTEwMDUsNyArMTAwNSw3IEBACiAJdW5zaWduZWQgbG9uZyByZXQ7CiAJdTY0ICpyYmxvY2s7CiAKLQlyYmxvY2sgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJcmJsb2NrID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJaWYgKCFyYmxvY2spIHsKIAkJZWhlYV9lcnJvcigiQ2Fubm90IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CiAJCXJldHVybjsKQEAgLTEwMjIsNSArMTAyMiw1IEBACiAJZWxzZQogCQllaGVhX2Vycm9yKCJFcnJvciBkYXRhIGNvdWxkIG5vdCBiZSBmZXRjaGVkOiAlbGxYIiwgcmVzX2hhbmRsZSk7CiAKLQlrZnJlZShyYmxvY2spOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylyYmxvY2spOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljLmggYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAppbmRleCBhODMyY2M1Li5jMjZjZWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWMuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWMuaApAQCAtMzMsNyArMzMsNyBAQAogCiAjZGVmaW5lIERSVl9OQU1FCQkiZW5pYyIKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCQkiQ2lzY28gMTBHIEV0aGVybmV0IERyaXZlciIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjAuMC42NDgiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4wLjAuOTMzIgogI2RlZmluZSBEUlZfQ09QWVJJR0hUCQkiQ29weXJpZ2h0IDIwMDggQ2lzY28gU3lzdGVtcywgSW5jIgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiOiAiCiAKQEAgLTk3LDYgKzk3LDcgQEAKIAlfX19fY2FjaGVsaW5lX2FsaWduZWQgc3RydWN0IHZuaWNfcnEgcnFbMV07CiAJdW5zaWduZWQgaW50IHJxX2NvdW50OwogCWludCAoKnJxX2FsbG9jX2J1Zikoc3RydWN0IHZuaWNfcnEgKnJxKTsKKwl1NjQgcnFfYmFkX2ZjczsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKIAlzdHJ1Y3QgbmV0X2xyb19kZXNjIGxyb19kZXNjW0VOSUNfTFJPX01BWF9ERVNDXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCmluZGV4IDdkNjA1NTEuLjAzNDAzYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYwpAQCAtNDAwLDEwICs0MDAsMTMgQEAKIAkJcmV0dXJuIElSUV9OT05FOwkvKiBub3Qgb3VyIGludGVycnVwdCAqLwogCX0KIAotCWlmIChFTklDX1RFU1RfSU5UUihwYmEsIEVOSUNfSU5UWF9OT1RJRlkpKQorCWlmIChFTklDX1RFU1RfSU5UUihwYmEsIEVOSUNfSU5UWF9OT1RJRlkpKSB7CisJCXZuaWNfaW50cl9yZXR1cm5fYWxsX2NyZWRpdHMoJmVuaWMtPmludHJbRU5JQ19JTlRYX05PVElGWV0pOwogCQllbmljX25vdGlmeV9jaGVjayhlbmljKTsKKwl9CiAKIAlpZiAoRU5JQ19URVNUX0lOVFIocGJhLCBFTklDX0lOVFhfRVJSKSkgeworCQl2bmljX2ludHJfcmV0dXJuX2FsbF9jcmVkaXRzKCZlbmljLT5pbnRyW0VOSUNfSU5UWF9FUlJdKTsKIAkJZW5pY19sb2dfcV9lcnJvcihlbmljKTsKIAkJLyogc2NoZWR1bGUgcmVjb3ZlcnkgZnJvbSBXUS9SUSBlcnJvciAqLwogCQlzY2hlZHVsZV93b3JrKCZlbmljLT5yZXNldCk7CkBAIC00MTEsOCArNDE0LDggQEAKIAl9CiAKIAlpZiAoRU5JQ19URVNUX0lOVFIocGJhLCBFTklDX0lOVFhfV1FfUlEpKSB7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZlbmljLT5uYXBpKSkKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZlbmljLT5uYXBpKSkKKwkJCV9fbmFwaV9zY2hlZHVsZSgmZW5pYy0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJdm5pY19pbnRyX3VubWFzaygmZW5pYy0+aW50cltFTklDX0lOVFhfV1FfUlFdKTsKIAl9CkBAIC00NDAsNyArNDQzLDcgQEAKIAkgKiB3cml0ZXMpLgogCSAqLwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDUwLDcgKzQ1Myw3IEBACiAJc3RydWN0IGVuaWMgKmVuaWMgPSBkYXRhOwogCiAJLyogc2NoZWR1bGUgTkFQSSBwb2xsaW5nIGZvciBSUSBjbGVhbnVwICovCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJmVuaWMtPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNDc2LDYgKzQ3OSw4IEBACiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBkYXRhOwogCisJdm5pY19pbnRyX3JldHVybl9hbGxfY3JlZGl0cygmZW5pYy0+aW50cltFTklDX01TSVhfRVJSXSk7CisKIAllbmljX2xvZ19xX2Vycm9yKGVuaWMpOwogCiAJLyogc2NoZWR1bGUgcmVjb3ZlcnkgZnJvbSBXUS9SUSBlcnJvciAqLwpAQCAtNDg4LDggKzQ5Myw4IEBACiB7CiAJc3RydWN0IGVuaWMgKmVuaWMgPSBkYXRhOwogCisJdm5pY19pbnRyX3JldHVybl9hbGxfY3JlZGl0cygmZW5pYy0+aW50cltFTklDX01TSVhfTk9USUZZXSk7CiAJZW5pY19ub3RpZnlfY2hlY2soZW5pYyk7Ci0Jdm5pY19pbnRyX3VubWFzaygmZW5pYy0+aW50cltFTklDX01TSVhfTk9USUZZXSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC01NzAsMTEgKzU3NSwxMSBAQAogCSAqIHRvIGVhY2ggVENQIHNlZ21lbnQgcmVzdWx0aW5nIGZyb20gdGhlIFRTTy4KIAkgKi8KIAotCWlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApKSB7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKSB7CiAJCWlwX2hkcihza2IpLT5jaGVjayA9IDA7CiAJCXRjcF9oZHIoc2tiKS0+Y2hlY2sgPSB+Y3N1bV90Y3B1ZHBfbWFnaWMoaXBfaGRyKHNrYiktPnNhZGRyLAogCQkJaXBfaGRyKHNrYiktPmRhZGRyLCAwLCBJUFBST1RPX1RDUCwgMCk7Ci0JfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNikpIHsKKwl9IGVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpIHsKIAkJdGNwX2hkcihza2IpLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwdjZfaGRyKHNrYiktPnNhZGRyLAogCQkJJmlwdjZfaGRyKHNrYiktPmRhZGRyLCAwLCBJUFBST1RPX1RDUCwgMCk7CiAJfQpAQCAtNjE2LDcgKzYyMSw3IEBACiAJCQl2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnKTsKIH0KIAotLyogbmV0aWZfdHhfbG9jayBoZWxkLCBwcm9jZXNzIGNvbnRleHQgd2l0aCBCSHMgZGlzYWJsZWQgKi8KKy8qIG5ldGlmX3R4X2xvY2sgaGVsZCwgcHJvY2VzcyBjb250ZXh0IHdpdGggQkhzIGRpc2FibGVkLCBvciBCSCAqLwogc3RhdGljIGludCBlbmljX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTY4Myw3ICs2ODgsNyBAQAogCW5ldF9zdGF0cy0+cnhfYnl0ZXMgPSBzdGF0cy0+cngucnhfYnl0ZXNfb2s7CiAJbmV0X3N0YXRzLT5yeF9lcnJvcnMgPSBzdGF0cy0+cngucnhfZXJyb3JzOwogCW5ldF9zdGF0cy0+bXVsdGljYXN0ID0gc3RhdHMtPnJ4LnJ4X211bHRpY2FzdF9mcmFtZXNfb2s7Ci0JbmV0X3N0YXRzLT5yeF9jcmNfZXJyb3JzID0gc3RhdHMtPnJ4LnJ4X2NyY19lcnJvcnM7CisJbmV0X3N0YXRzLT5yeF9jcmNfZXJyb3JzID0gZW5pYy0+cnFfYmFkX2ZjczsKIAluZXRfc3RhdHMtPnJ4X2Ryb3BwZWQgPSBzdGF0cy0+cngucnhfbm9fYnVmczsKIAogCXJldHVybiBuZXRfc3RhdHM7CkBAIC05MjgsMTIgKzkzMyw4IEBACiAKIAlpZiAocGFja2V0X2Vycm9yKSB7CiAKLQkJaWYgKGJ5dGVzX3dyaXR0ZW4gPiAwICYmICFmY3Nfb2spIHsKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJCQkiJXM6IHBhY2tldCBlcnJvcjogYmFkIEZDU1xuIiwKLQkJCQkJbmV0ZGV2LT5uYW1lKTsKLQkJfQorCQlpZiAoYnl0ZXNfd3JpdHRlbiA+IDAgJiYgIWZjc19vaykKKwkJCWVuaWMtPnJxX2JhZF9mY3MrKzsKIAogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCkBAIC0xMDY4LDggKzEwNjksOCBAQAogCQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQogCQkJbHJvX2ZsdXNoX2FsbCgmZW5pYy0+bHJvX21ncik7CiAKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbRU5JQ19NU0lYX1JRXSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCXZuaWNfaW50cl91bm1hc2soJmVuaWMtPmludHJbRU5JQ19JTlRYX1dRX1JRXSk7CiAJfQogCiAJcmV0dXJuIHJxX3dvcmtfZG9uZTsKQEAgLTEwOTUsOSArMTA5Niw5IEBACiAKIAkJdm5pY19ycV9maWxsKCZlbmljLT5ycVswXSwgZW5pY19ycV9hbGxvY19idWYpOwogCi0JCS8qIEFjY3VtdWxhdGUgaW50ciBldmVudCBjcmVkaXRzIGZvciB0aGlzIHBvbGxpbmcKKwkJLyogUmV0dXJuIGludHIgZXZlbnQgY3JlZGl0cyBmb3IgdGhpcyBwb2xsaW5nCiAJCSAqIGN5Y2xlLiAgQW4gaW50ciBldmVudCBpcyB0aGUgY29tcGxldGlvbiBvZiBhCi0JCSAqIGEgV1Egb3IgUlEgcGFja2V0LgorCQkgKiBSUSBwYWNrZXQuCiAJCSAqLwogCiAJCXZuaWNfaW50cl9yZXR1cm5fY3JlZGl0cygmZW5pYy0+aW50cltFTklDX01TSVhfUlFdLApAQCAtMTExMiw3ICsxMTEzLDcgQEAKIAkJaWYgKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykKIAkJCWxyb19mbHVzaF9hbGwoJmVuaWMtPmxyb19tZ3IpOwogCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQl2bmljX2ludHJfdW5tYXNrKCZlbmljLT5pbnRyW0VOSUNfTVNJWF9SUV0pOwogCX0KIApAQCAtMTQ2MSw2ICsxNDYyLDI2IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGludCBlbmljX3NldF9uaWNjZmcoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJY29uc3QgdTggcnNzX2RlZmF1bHRfY3B1ID0gMDsKKwljb25zdCB1OCByc3NfaGFzaF90eXBlID0gMDsKKwljb25zdCB1OCByc3NfaGFzaF9iaXRzID0gMDsKKwljb25zdCB1OCByc3NfYmFzZV9jcHUgPSAwOworCWNvbnN0IHU4IHJzc19lbmFibGUgPSAwOworCWNvbnN0IHU4IHRzb19pcGlkX3NwbGl0X2VuID0gMDsKKwljb25zdCB1OCBpZ192bGFuX3N0cmlwX2VuID0gMTsKKworCS8qIEVuYWJsZSBWTEFOIHRhZyBzdHJpcHBpbmcuICBSU1Mgbm90IGVuYWJsZWQgKHlldCkuCisJKi8KKworCXJldHVybiBlbmljX3NldF9uaWNfY2ZnKGVuaWMsCisJCXJzc19kZWZhdWx0X2NwdSwgcnNzX2hhc2hfdHlwZSwKKwkJcnNzX2hhc2hfYml0cywgcnNzX2Jhc2VfY3B1LAorCQlyc3NfZW5hYmxlLCB0c29faXBpZF9zcGxpdF9lbiwKKwkJaWdfdmxhbl9zdHJpcF9lbik7Cit9CisKIHN0YXRpYyB2b2lkIGVuaWNfcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBlbmljICplbmljID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlbmljLCByZXNldCk7CkBAIC0xNDc2LDggKzE0OTcsMTAgQEAKIAogCWVuaWNfc3RvcChlbmljLT5uZXRkZXYpOwogCWVuaWNfZGV2X3NvZnRfcmVzZXQoZW5pYyk7CisJdm5pY19kZXZfaW5pdChlbmljLT52ZGV2LCAwKTsKIAllbmljX3Jlc2V0X21jYWRkcnMoZW5pYyk7CiAJZW5pY19pbml0X3ZuaWNfcmVzb3VyY2VzKGVuaWMpOworCWVuaWNfc2V0X25pY2NmZyhlbmljKTsKIAllbmljX29wZW4oZW5pYy0+bmV0ZGV2KTsKIAogCXJ0bmxfdW5sb2NrKCk7CkBAIC0xNjIwLDE0ICsxNjQzLDYgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgZXJyOwogCi0JY29uc3QgdTggcnNzX2RlZmF1bHRfY3B1ID0gMDsKLQljb25zdCB1OCByc3NfaGFzaF90eXBlID0gMDsKLQljb25zdCB1OCByc3NfaGFzaF9iaXRzID0gMDsKLQljb25zdCB1OCByc3NfYmFzZV9jcHUgPSAwOwotCWNvbnN0IHU4IHJzc19lbmFibGUgPSAwOwotCWNvbnN0IHU4IHRzb19pcGlkX3NwbGl0X2VuID0gMDsKLQljb25zdCB1OCBpZ192bGFuX3N0cmlwX2VuID0gMTsKLQogCS8qIEFsbG9jYXRlIG5ldCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBpbml0aWFsaXplLiAgUHJpdmF0ZQogCSAqIGluc3RhbmNlIGRhdGEgaXMgaW5pdGlhbGl6ZWQgdG8gemVyby4KIAkgKi8KQEAgLTE3OTMsMTQgKzE4MDgsNyBAQAogCiAJZW5pY19pbml0X3ZuaWNfcmVzb3VyY2VzKGVuaWMpOwogCi0JLyogRW5hYmxlIFZMQU4gdGFnIHN0cmlwcGluZy4gIFJTUyBub3QgZW5hYmxlZCAoeWV0KS4KLQkgKi8KLQotCWVyciA9IGVuaWNfc2V0X25pY19jZmcoZW5pYywKLQkJcnNzX2RlZmF1bHRfY3B1LCByc3NfaGFzaF90eXBlLAotCQlyc3NfaGFzaF9iaXRzLCByc3NfYmFzZV9jcHUsCi0JCXJzc19lbmFibGUsIHRzb19pcGlkX3NwbGl0X2VuLAotCQlpZ192bGFuX3N0cmlwX2VuKTsKKwllcnIgPSBlbmljX3NldF9uaWNjZmcoZW5pYyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCQkiRmFpbGVkIHRvIGNvbmZpZyBuaWMsIGFib3J0aW5nLlxuIik7CkBAIC0xODU4LDcgKzE4NjYsNiBAQAogCWlmICh1c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0KIAllbmljLT5jc3VtX3J4X2VuYWJsZWQgPSBFTklDX1NFVFRJTkcoZW5pYywgUlhDU1VNKTsKIAogCWVuaWMtPmxyb19tZ3IubWF4X2FnZ3IgPSBFTklDX0xST19NQVhfQUdHUjsKQEAgLTE4NzAsNyArMTg3Nyw2IEBACiAJZW5pYy0+bHJvX21nci5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKIAllbmljLT5scm9fbWdyLmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKLQogCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCmluZGV4IDExNzA4NTcuLmUyMWI5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYworKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKQEAgLTM0LDYgKzM0LDkgQEAKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiB9OwogCisjZGVmaW5lIFZOSUNfREVWX0NBUF9JTklUCTB4MDAwMQorI2RlZmluZSBWTklDX0RFVl9DQVBfUEVSQkkJMHgwMDAyCisKIHN0cnVjdCB2bmljX2RldiB7CiAJdm9pZCAqcHJpdjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKQEAgLTUwLDYgKzUzLDcgQEAKIAlkbWFfYWRkcl90IHN0YXRzX3BhOwogCXN0cnVjdCB2bmljX2RldmNtZF9md19pbmZvICpmd19pbmZvOwogCWRtYV9hZGRyX3QgZndfaW5mb19wYTsKKwl1MzIgY2FwX2ZsYWdzOwogfTsKIAogI2RlZmluZSBWTklDX01BWF9SRVNfSERSX1NJWkUgXApAQCAtNTc1LDkgKzU3OSw5IEBACiB7CiAJdTY0IGEwID0gKHUzMilhcmcsIGExID0gMDsKIAlpbnQgd2FpdCA9IDEwMDA7Ci0gICAgICAgIGludCByID0gMDsKKwlpbnQgciA9IDA7CiAKLQlpZiAodm5pY19kZXZfY2FwYWJsZSh2ZGV2LCBDTURfSU5JVCkpCisJaWYgKHZkZXYtPmNhcF9mbGFncyAmIFZOSUNfREVWX0NBUF9JTklUKQogCQlyID0gdm5pY19kZXZfY21kKHZkZXYsIENNRF9JTklULCAmYTAsICZhMSwgd2FpdCk7CiAJZWxzZSB7CiAJCXZuaWNfZGV2X2NtZCh2ZGV2LCBDTURfSU5JVF92MSwgJmEwLCAmYTEsIHdhaXQpOwpAQCAtNTg3LDggKzU5MSw4IEBACiAJCQl2bmljX2Rldl9jbWQodmRldiwgQ01EX01BQ19BRERSLCAmYTAsICZhMSwgd2FpdCk7CiAJCQl2bmljX2Rldl9jbWQodmRldiwgQ01EX0FERFJfQURELCAmYTAsICZhMSwgd2FpdCk7CiAJCX0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcjsKKwl9CisJcmV0dXJuIHI7CiB9CiAKIGludCB2bmljX2Rldl9saW5rX3N0YXR1cyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCkBAIC02MjYsNiArNjMwLDIyIEBACiAJcmV0dXJuIHZkZXYtPm5vdGlmeV9jb3B5Lm10dTsKIH0KIAordTMyIHZuaWNfZGV2X2xpbmtfZG93bl9jbnQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KQoreworCWlmICghdm5pY19kZXZfbm90aWZ5X3JlYWR5KHZkZXYpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB2ZGV2LT5ub3RpZnlfY29weS5saW5rX2Rvd25fY250OworfQorCit1MzIgdm5pY19kZXZfbm90aWZ5X3N0YXR1cyhzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpCit7CisJaWYgKCF2bmljX2Rldl9ub3RpZnlfcmVhZHkodmRldikpCisJCXJldHVybiAwOworCisJcmV0dXJuIHZkZXYtPm5vdGlmeV9jb3B5LnN0YXR1czsKK30KKwogdm9pZCB2bmljX2Rldl9zZXRfaW50cl9tb2RlKHN0cnVjdCB2bmljX2RldiAqdmRldiwKIAllbnVtIHZuaWNfZGV2X2ludHJfbW9kZSBpbnRyX21vZGUpCiB7CkBAIC02ODIsNiArNzAyLDExIEBACiAJaWYgKCF2ZGV2LT5kZXZjbWQpCiAJCWdvdG8gZXJyX291dDsKIAorCXZkZXYtPmNhcF9mbGFncyA9IDA7CisKKwlpZiAodm5pY19kZXZfY2FwYWJsZSh2ZGV2LCBDTURfSU5JVCkpCisJCXZkZXYtPmNhcF9mbGFncyB8PSBWTklDX0RFVl9DQVBfSU5JVDsKKwogCXJldHVybiB2ZGV2OwogCiBlcnJfb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5oCmluZGV4IGI5ZGMxODIuLjhhYThkYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmgKQEAgLTEwMiw2ICsxMDIsOCBAQAogdTMyIHZuaWNfZGV2X3BvcnRfc3BlZWQoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIHUzMiB2bmljX2Rldl9tc2dfbHZsKHN0cnVjdCB2bmljX2RldiAqdmRldik7CiB1MzIgdm5pY19kZXZfbXR1KHN0cnVjdCB2bmljX2RldiAqdmRldik7Cit1MzIgdm5pY19kZXZfbGlua19kb3duX2NudChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwordTMyIHZuaWNfZGV2X25vdGlmeV9zdGF0dXMoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKIGludCB2bmljX2Rldl9jbG9zZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogaW50IHZuaWNfZGV2X2VuYWJsZShzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYpOwogaW50IHZuaWNfZGV2X2Rpc2FibGUoc3RydWN0IHZuaWNfZGV2ICp2ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXZjbWQuaAppbmRleCA4MDYyYzc1Li4yNTg3ZjM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2Y21kLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2RldmNtZC5oCkBAIC0xOTEsNyArMTkxLDcgQEAKIAlDTURfSU5JVF9TVEFUVVMJCT0gX0NNREMoX0NNRF9ESVJfUkVBRCwgX0NNRF9WVFlQRV9BTEwsIDMxKSwKIAogCS8qIElOVDEzIEFQSTogKHU2NClhMD1wYWRkciB0byB2bmljX2ludDEzX3BhcmFtcyBzdHJ1Y3QKLQkgKiAgICAgICAgICAgICh1OClhMT1JTlQxM19DTURfeHh4ICovCisJICogICAgICAgICAgICAodTMyKWExPUlOVDEzX0NNRF94eHggKi8KIAlDTURfSU5UMTMgICAgICAgICAgICAgICA9IF9DTURDKF9DTURfRElSX1dSSVRFLCBfQ01EX1ZUWVBFX0ZDLCAzMiksCiAKIAkvKiBsb2dpY2FsIHVwbGluayBlbmFibGUvZGlzYWJsZTogKHU2NClhMDogMC8xPWRpc2FibGUvZW5hYmxlICovCkBAIC0yMDcsNiArMjA3LDExIEBACiAJICogaW46ICAodTMyKWEwPWNtZAogCSAqIG91dDogKHUzMilhMD1lcnJubywgMDp2YWxpZCBjbWQsIGExPXN1cHBvcnRlZCBWTklDX1NURl8qIGJpdHMgKi8KIAlDTURfQ0FQQUJJTElUWQkJPSBfQ01EQyhfQ01EX0RJUl9SVywgX0NNRF9WVFlQRV9BTEwsIDM2KSwKKworCS8qIHBlcnNpc3RlbnQgYmluZGluZyBpbmZvCisJICogaW46ICAodTY0KWEwPXBhZGRyIG9mIGFyZworCSAqICAgICAgKHUzMilhMT1DTURfUEVSQklfWFhYICovCisJQ01EX1BFUkJJICAgICAgICAgICAgICAgPSBfQ01EQyhfQ01EX0RJUl9SVywgX0NNRF9WVFlQRV9GQywgMzcpLAogfTsKIAogLyogZmxhZ3MgZm9yIENNRF9PUEVOICovCkBAIC0yNTksNiArMjY0LDcgQEAKIAl1MzIgc3RhdHVzOwkJLyogc3RhdHVzIGJpdHMgKHNlZSBWTklDX1NURl8qKSAqLwogCXUzMiBlcnJvcjsJCS8qIGVycm9yIGNvZGUgKHNlZSBFUlJfKikgZm9yIGZpcnN0IEVSUiAqLwogCXUzMiBsaW5rX2Rvd25fY250OwkvKiBydW5uaW5nIGNvdW50IG9mIGxpbmsgZG93biB0cmFuc2l0aW9ucyAqLworCXUzMiBwZXJiaV9yZWJ1aWxkX2NudDsJLyogcnVubmluZyBjb3VudCBvZiBwZXJiaSByZWJ1aWxkcyAqLwogfTsKICNkZWZpbmUgVk5JQ19TVEZfRkFUQUxfRVJSCTB4MDAwMQkvKiBmYXRhbCBmdyBlcnJvciAqLwogI2RlZmluZSBWTklDX1NURl9TVERfUEFVU0UJMHgwMDAyCS8qIHN0YW5kYXJkIGxpbmstbGV2ZWwgcGF1c2Ugb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmggYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5oCmluZGV4IGNlNjMzYTUuLjlhNTM2MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaApAQCAtNzYsNiArNzYsMjAgQEAKIAlpb3dyaXRlMzIoaW50X2NyZWRpdF9yZXR1cm4sICZpbnRyLT5jdHJsLT5pbnRfY3JlZGl0X3JldHVybik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHZuaWNfaW50cl9jcmVkaXRzKHN0cnVjdCB2bmljX2ludHIgKmludHIpCit7CisJcmV0dXJuIGlvcmVhZDMyKCZpbnRyLT5jdHJsLT5pbnRfY3JlZGl0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2bmljX2ludHJfcmV0dXJuX2FsbF9jcmVkaXRzKHN0cnVjdCB2bmljX2ludHIgKmludHIpCit7CisJdW5zaWduZWQgaW50IGNyZWRpdHMgPSB2bmljX2ludHJfY3JlZGl0cyhpbnRyKTsKKwlpbnQgdW5tYXNrID0gMTsKKwlpbnQgcmVzZXRfdGltZXIgPSAxOworCisJdm5pY19pbnRyX3JldHVybl9jcmVkaXRzKGludHIsIGNyZWRpdHMsIHVubWFzaywgcmVzZXRfdGltZXIpOworfQorCiBzdGF0aWMgaW5saW5lIHUzMiB2bmljX2ludHJfbGVnYWN5X3BiYSh1MzIgX19pb21lbSAqbGVnYWN5X3BiYSkKIHsKIAkvKiByZWFkIFBCQSB3aXRob3V0IGNsZWFyaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcGljMTAwLmMgYi9kcml2ZXJzL25ldC9lcGljMTAwLmMKaW5kZXggYTUzOWJjMy4uYjYwZTI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwpAQCAtMTExNCw5ICsxMTE0LDkgQEAKIAogCWlmICgoc3RhdHVzICYgRXBpY05hcGlFdmVudCkgJiYgIWVwLT5yZXNjaGVkdWxlX2luX3BvbGwpIHsKIAkJc3Bpbl9sb2NrKCZlcC0+bmFwaV9sb2NrKTsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmVwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZlcC0+bmFwaSkpIHsKIAkJCWVwaWNfbmFwaV9pcnFfb2ZmKGRldiwgZXApOwotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmZXAtPm5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKCZlcC0+bmFwaSk7CiAJCX0gZWxzZQogCQkJZXAtPnJlc2NoZWR1bGVfaW5fcG9sbCsrOwogCQlzcGluX3VubG9jaygmZXAtPm5hcGlfbG9jayk7CkBAIC0xMjkzLDcgKzEyOTMsNyBAQAogCiAJCW1vcmUgPSBlcC0+cmVzY2hlZHVsZV9pbl9wb2xsOwogCQlpZiAoIW1vcmUpIHsKLQkJCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJCQlvdXRsKEVwaWNOYXBpRXZlbnQsIGlvYWRkciArIElOVFNUQVQpOwogCQkJZXBpY19uYXBpX2lycV9vbihkZXYsIGVwKTsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lcWwuYyBiL2RyaXZlcnMvbmV0L2VxbC5jCmluZGV4IDQwMTI1NjkuLjUxZWFkNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VxbC5jCisrKyBiL2RyaXZlcnMvbmV0L2VxbC5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAlhZGRfdGltZXIoJmVxbC0+dGltZXIpOwogfQogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19pbml0Y29uc3QgPQogCSJFcXVhbGl6ZXIyMDAyOiBTaW1vbiBKYW5lcyAoc2ltb25AbmNtLmNvbSkgYW5kIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSlcbiI7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXFsX25ldGRldl9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGgxNmkuYyBiL2RyaXZlcnMvbmV0L2V0aDE2aS5jCmluZGV4IDVjMDQ4ZjIuLjBkOGI2ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aDE2aS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aDE2aS5jCkBAIC00NzUsNiArNDc1LDE3IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBldGgxNmlfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICAgICA9IGV0aDE2aV9vcGVuLAorCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gZXRoMTZpX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAJPSBldGgxNmlfdHgsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBldGgxNmlfbXVsdGljYXN0LAorCS5uZG9fdHhfdGltZW91dCAJPSBldGgxNmlfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZXRoMTZpX3Byb2JlMShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW9hZGRyKQogewogCXN0cnVjdCBldGgxNmlfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTU0OSwxMiArNTYwLDcgQEAKIAlCSVRDTFIoaW9hZGRyICsgQ09ORklHX1JFR18xLCBQT1dFUlVQKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQltZW1zZXQobHAsIDAsIHNpemVvZihzdHJ1Y3QgZXRoMTZpX2xvY2FsKSk7Ci0JZGV2LT5vcGVuICAgICAgICAgICAgICAgPSBldGgxNmlfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgICAgICA9IGV0aDE2aV9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAgICA9IGV0aDE2aV90eDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGV0aDE2aV9tdWx0aWNhc3Q7Ci0JZGV2LT50eF90aW1lb3V0IAk9IGV0aDE2aV90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyAgICAgICAgID0gJmV0aDE2aV9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBUWF9USU1FT1VUOwogCXNwaW5fbG9ja19pbml0KCZscC0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aG9jLmMgYi9kcml2ZXJzL25ldC9ldGhvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYTliMWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhvYy5jCkBAIC0wLDAgKzEsMTExMiBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvbmV0L2V0aG9jLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBBdmlvbmljIERlc2lnbiBEZXZlbG9wbWVudCBHbWJICisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBBdmlvbmljIERlc2lnbiBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBXcml0dGVuIGJ5IFRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L2V0aG9jLmg+CisKKy8qIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUJTU9ERVIJCTB4MDAKKyNkZWZpbmUJSU5UX1NPVVJDRQkweDA0CisjZGVmaW5lCUlOVF9NQVNLCTB4MDgKKyNkZWZpbmUJSVBHVAkJMHgwYworI2RlZmluZQlJUEdSMQkJMHgxMAorI2RlZmluZQlJUEdSMgkJMHgxNAorI2RlZmluZQlQQUNLRVRMRU4JMHgxOAorI2RlZmluZQlDT0xMQ09ORgkweDFjCisjZGVmaW5lCVRYX0JEX05VTQkweDIwCisjZGVmaW5lCUNUUkxNT0RFUgkweDI0CisjZGVmaW5lCU1JSU1PREVSCTB4MjgKKyNkZWZpbmUJTUlJQ09NTUFORAkweDJjCisjZGVmaW5lCU1JSUFERFJFU1MJMHgzMAorI2RlZmluZQlNSUlUWF9EQVRBCTB4MzQKKyNkZWZpbmUJTUlJUlhfREFUQQkweDM4CisjZGVmaW5lCU1JSVNUQVRVUwkweDNjCisjZGVmaW5lCU1BQ19BRERSMAkweDQwCisjZGVmaW5lCU1BQ19BRERSMQkweDQ0CisjZGVmaW5lCUVUSF9IQVNIMAkweDQ4CisjZGVmaW5lCUVUSF9IQVNIMQkweDRjCisjZGVmaW5lCUVUSF9UWENUUkwJMHg1MAorCisvKiBtb2RlIHJlZ2lzdGVyICovCisjZGVmaW5lCU1PREVSX1JYRU4JKDEgPDwgIDApIC8qIHJlY2VpdmUgZW5hYmxlICovCisjZGVmaW5lCU1PREVSX1RYRU4JKDEgPDwgIDEpIC8qIHRyYW5zbWl0IGVuYWJsZSAqLworI2RlZmluZQlNT0RFUl9OT1BSRQkoMSA8PCAgMikgLyogbm8gcHJlYW1ibGUgKi8KKyNkZWZpbmUJTU9ERVJfQlJPCSgxIDw8ICAzKSAvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworI2RlZmluZQlNT0RFUl9JQU0JKDEgPDwgIDQpIC8qIGluZGl2aWR1YWwgYWRkcmVzcyBtb2RlICovCisjZGVmaW5lCU1PREVSX1BSTwkoMSA8PCAgNSkgLyogcHJvbWlzY3VvdXMgbW9kZSAqLworI2RlZmluZQlNT0RFUl9JRkcJKDEgPDwgIDYpIC8qIGludGVyZnJhbWUgZ2FwIGZvciBpbmNvbWluZyBmcmFtZXMgKi8KKyNkZWZpbmUJTU9ERVJfTE9PUAkoMSA8PCAgNykgLyogbG9vcGJhY2sgKi8KKyNkZWZpbmUJTU9ERVJfTkJPCSgxIDw8ICA4KSAvKiBubyBiYWNrLW9mZiAqLworI2RlZmluZQlNT0RFUl9FREUJKDEgPDwgIDkpIC8qIGV4Y2VzcyBkZWZlciBlbmFibGUgKi8KKyNkZWZpbmUJTU9ERVJfRlVMTEQJKDEgPDwgMTApIC8qIGZ1bGwgZHVwbGV4ICovCisjZGVmaW5lCU1PREVSX1JFU0VUCSgxIDw8IDExKSAvKiBGSVhNRTogcmVzZXQgKHVuZG9jdW1lbnRlZCkgKi8KKyNkZWZpbmUJTU9ERVJfRENSQwkoMSA8PCAxMikgLyogZGVsYXllZCBDUkMgZW5hYmxlICovCisjZGVmaW5lCU1PREVSX0NSQwkoMSA8PCAxMykgLyogQ1JDIGVuYWJsZSAqLworI2RlZmluZQlNT0RFUl9IVUdFCSgxIDw8IDE0KSAvKiBodWdlIHBhY2tldHMgZW5hYmxlICovCisjZGVmaW5lCU1PREVSX1BBRAkoMSA8PCAxNSkgLyogcGFkZGluZyBlbmFibGVkICovCisjZGVmaW5lCU1PREVSX1JTTQkoMSA8PCAxNikgLyogcmVjZWl2ZSBzbWFsbCBwYWNrZXRzICovCisKKy8qIGludGVycnVwdCBzb3VyY2UgYW5kIG1hc2sgcmVnaXN0ZXJzICovCisjZGVmaW5lCUlOVF9NQVNLX1RYRgkoMSA8PCAwKSAvKiB0cmFuc21pdCBmcmFtZSAqLworI2RlZmluZQlJTlRfTUFTS19UWEUJKDEgPDwgMSkgLyogdHJhbnNtaXQgZXJyb3IgKi8KKyNkZWZpbmUJSU5UX01BU0tfUlhGCSgxIDw8IDIpIC8qIHJlY2VpdmUgZnJhbWUgKi8KKyNkZWZpbmUJSU5UX01BU0tfUlhFCSgxIDw8IDMpIC8qIHJlY2VpdmUgZXJyb3IgKi8KKyNkZWZpbmUJSU5UX01BU0tfQlVTWQkoMSA8PCA0KQorI2RlZmluZQlJTlRfTUFTS19UWEMJKDEgPDwgNSkgLyogdHJhbnNtaXQgY29udHJvbCBmcmFtZSAqLworI2RlZmluZQlJTlRfTUFTS19SWEMJKDEgPDwgNikgLyogcmVjZWl2ZSBjb250cm9sIGZyYW1lICovCisKKyNkZWZpbmUJSU5UX01BU0tfVFgJKElOVF9NQVNLX1RYRiB8IElOVF9NQVNLX1RYRSkKKyNkZWZpbmUJSU5UX01BU0tfUlgJKElOVF9NQVNLX1JYRiB8IElOVF9NQVNLX1JYRSkKKworI2RlZmluZQlJTlRfTUFTS19BTEwgKCBcCisJCUlOVF9NQVNLX1RYRiB8IElOVF9NQVNLX1RYRSB8IFwKKwkJSU5UX01BU0tfUlhGIHwgSU5UX01BU0tfUlhFIHwgXAorCQlJTlRfTUFTS19UWEMgfCBJTlRfTUFTS19SWEMgfCBcCisJCUlOVF9NQVNLX0JVU1kgXAorCSkKKworLyogcGFja2V0IGxlbmd0aCByZWdpc3RlciAqLworI2RlZmluZQlQQUNLRVRMRU5fTUlOKG1pbikJCSgoKG1pbikgJiAweGZmZmYpIDw8IDE2KQorI2RlZmluZQlQQUNLRVRMRU5fTUFYKG1heCkJCSgoKG1heCkgJiAweGZmZmYpIDw8ICAwKQorI2RlZmluZQlQQUNLRVRMRU5fTUlOX01BWChtaW4sIG1heCkJKFBBQ0tFVExFTl9NSU4obWluKSB8IFwKKwkJCQkJUEFDS0VUTEVOX01BWChtYXgpKQorCisvKiB0cmFuc21pdCBidWZmZXIgbnVtYmVyIHJlZ2lzdGVyICovCisjZGVmaW5lCVRYX0JEX05VTV9WQUwoeCkJKCgoeCkgPD0gMHg4MCkgPyAoeCkgOiAweDgwKQorCisvKiBjb250cm9sIG1vZHVsZSBtb2RlIHJlZ2lzdGVyICovCisjZGVmaW5lCUNUUkxNT0RFUl9QQVNTQUxMCSgxIDw8IDApIC8qIHBhc3MgYWxsIHJlY2VpdmUgZnJhbWVzICovCisjZGVmaW5lCUNUUkxNT0RFUl9SWEZMT1cJKDEgPDwgMSkgLyogcmVjZWl2ZSBjb250cm9sIGZsb3cgKi8KKyNkZWZpbmUJQ1RSTE1PREVSX1RYRkxPVwkoMSA8PCAyKSAvKiB0cmFuc21pdCBjb250cm9sIGZsb3cgKi8KKworLyogTUlJIG1vZGUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJTUlJTU9ERVJfQ0xLRElWKHgpCSgoeCkgJiAweGZlKSAvKiBuZWVkcyB0byBiZSBhbiBldmVuIG51bWJlciAqLworI2RlZmluZQlNSUlNT0RFUl9OT1BSRQkJKDEgPDwgOCkgLyogbm8gcHJlYW1ibGUgKi8KKworLyogTUlJIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJTUlJQ09NTUFORF9TQ0FOCQkoMSA8PCAwKSAvKiBzY2FuIHN0YXR1cyAqLworI2RlZmluZQlNSUlDT01NQU5EX1JFQUQJCSgxIDw8IDEpIC8qIHJlYWQgc3RhdHVzICovCisjZGVmaW5lCU1JSUNPTU1BTkRfV1JJVEUJKDEgPDwgMikgLyogd3JpdGUgY29udHJvbCBkYXRhICovCisKKy8qIE1JSSBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lCU1JSUFERFJFU1NfRklBRCh4KQkJKCgoeCkgJiAweDFmKSA8PCAwKQorI2RlZmluZQlNSUlBRERSRVNTX1JHQUQoeCkJCSgoKHgpICYgMHgxZikgPDwgOCkKKyNkZWZpbmUJTUlJQUREUkVTU19BRERSKHBoeSwgcmVnKQkoTUlJQUREUkVTU19GSUFEKHBoeSkgfCBcCisJCQkJCU1JSUFERFJFU1NfUkdBRChyZWcpKQorCisvKiBNSUkgdHJhbnNtaXQgZGF0YSByZWdpc3RlciAqLworI2RlZmluZQlNSUlUWF9EQVRBX1ZBTCh4KQkoKHgpICYgMHhmZmZmKQorCisvKiBNSUkgcmVjZWl2ZSBkYXRhIHJlZ2lzdGVyICovCisjZGVmaW5lCU1JSVJYX0RBVEFfVkFMKHgpCSgoeCkgJiAweGZmZmYpCisKKy8qIE1JSSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUJTUlJU1RBVFVTX0xJTktGQUlMCSgxIDw8IDApCisjZGVmaW5lCU1JSVNUQVRVU19CVVNZCQkoMSA8PCAxKQorI2RlZmluZQlNSUlTVEFUVVNfSU5WQUxJRAkoMSA8PCAyKQorCisvKiBUWCBidWZmZXIgZGVzY3JpcHRvciAqLworI2RlZmluZQlUWF9CRF9DUwkJKDEgPDwgIDApIC8qIGNhcnJpZXIgc2Vuc2UgbG9zdCAqLworI2RlZmluZQlUWF9CRF9ERgkJKDEgPDwgIDEpIC8qIGRlZmVyIGluZGljYXRpb24gKi8KKyNkZWZpbmUJVFhfQkRfTEMJCSgxIDw8ICAyKSAvKiBsYXRlIGNvbGxpc2lvbiAqLworI2RlZmluZQlUWF9CRF9STAkJKDEgPDwgIDMpIC8qIHJldHJhbnNtaXNzaW9uIGxpbWl0ICovCisjZGVmaW5lCVRYX0JEX1JFVFJZX01BU0sJKDB4MDBmMCkKKyNkZWZpbmUJVFhfQkRfUkVUUlkoeCkJCSgoKHgpICYgMHgwMGYwKSA+PiAgNCkKKyNkZWZpbmUJVFhfQkRfVVIJCSgxIDw8ICA4KSAvKiB0cmFuc21pdHRlciB1bmRlcnJ1biAqLworI2RlZmluZQlUWF9CRF9DUkMJCSgxIDw8IDExKSAvKiBUWCBDUkMgZW5hYmxlICovCisjZGVmaW5lCVRYX0JEX1BBRAkJKDEgPDwgMTIpIC8qIHBhZCBlbmFibGUgZm9yIHNob3J0IHBhY2tldHMgKi8KKyNkZWZpbmUJVFhfQkRfV1JBUAkJKDEgPDwgMTMpCisjZGVmaW5lCVRYX0JEX0lSUQkJKDEgPDwgMTQpIC8qIGludGVycnVwdCByZXF1ZXN0IGVuYWJsZSAqLworI2RlZmluZQlUWF9CRF9SRUFEWQkJKDEgPDwgMTUpIC8qIFRYIGJ1ZmZlciByZWFkeSAqLworI2RlZmluZQlUWF9CRF9MRU4oeCkJCSgoKHgpICYgMHhmZmZmKSA8PCAxNikKKyNkZWZpbmUJVFhfQkRfTEVOX01BU0sJCSgweGZmZmYgPDwgMTYpCisKKyNkZWZpbmUJVFhfQkRfU1RBVFMJCShUWF9CRF9DUyB8IFRYX0JEX0RGIHwgVFhfQkRfTEMgfCBcCisJCQkJVFhfQkRfUkwgfCBUWF9CRF9SRVRSWV9NQVNLIHwgVFhfQkRfVVIpCisKKy8qIFJYIGJ1ZmZlciBkZXNjcmlwdG9yICovCisjZGVmaW5lCVJYX0JEX0xDCSgxIDw8ICAwKSAvKiBsYXRlIGNvbGxpc2lvbiAqLworI2RlZmluZQlSWF9CRF9DUkMJKDEgPDwgIDEpIC8qIFJYIENSQyBlcnJvciAqLworI2RlZmluZQlSWF9CRF9TRgkoMSA8PCAgMikgLyogc2hvcnQgZnJhbWUgKi8KKyNkZWZpbmUJUlhfQkRfVEwJKDEgPDwgIDMpIC8qIHRvbyBsb25nICovCisjZGVmaW5lCVJYX0JEX0ROCSgxIDw8ICA0KSAvKiBkcmliYmxlIG5pYmJsZSAqLworI2RlZmluZQlSWF9CRF9JUwkoMSA8PCAgNSkgLyogaW52YWxpZCBzeW1ib2wgKi8KKyNkZWZpbmUJUlhfQkRfT1IJKDEgPDwgIDYpIC8qIHJlY2VpdmVyIG92ZXJydW4gKi8KKyNkZWZpbmUJUlhfQkRfTUlTUwkoMSA8PCAgNykKKyNkZWZpbmUJUlhfQkRfQ0YJKDEgPDwgIDgpIC8qIGNvbnRyb2wgZnJhbWUgKi8KKyNkZWZpbmUJUlhfQkRfV1JBUAkoMSA8PCAxMykKKyNkZWZpbmUJUlhfQkRfSVJRCSgxIDw8IDE0KSAvKiBpbnRlcnJ1cHQgcmVxdWVzdCBlbmFibGUgKi8KKyNkZWZpbmUJUlhfQkRfRU1QVFkJKDEgPDwgMTUpCisjZGVmaW5lCVJYX0JEX0xFTih4KQkoKCh4KSAmIDB4ZmZmZikgPDwgMTYpCisKKyNkZWZpbmUJUlhfQkRfU1RBVFMJKFJYX0JEX0xDIHwgUlhfQkRfQ1JDIHwgUlhfQkRfU0YgfCBSWF9CRF9UTCB8IFwKKwkJCVJYX0JEX0ROIHwgUlhfQkRfSVMgfCBSWF9CRF9PUiB8IFJYX0JEX01JU1MpCisKKyNkZWZpbmUJRVRIT0NfQlVGU0laCQkxNTM2CisjZGVmaW5lCUVUSE9DX1pMRU4JCTY0CisjZGVmaW5lCUVUSE9DX0JEX0JBU0UJCTB4NDAwCisjZGVmaW5lCUVUSE9DX1RJTUVPVVQJCShIWiAvIDIpCisjZGVmaW5lCUVUSE9DX01JSV9USU1FT1VUCSgxICsgKEhaIC8gNSkpCisKKy8qKgorICogc3RydWN0IGV0aG9jIC0gZHJpdmVyLXByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZQorICogQGlvYmFzZToJcG9pbnRlciB0byBJL08gbWVtb3J5IHJlZ2lvbgorICogQG1lbWJhc2U6CXBvaW50ZXIgdG8gYnVmZmVyIG1lbW9yeSByZWdpb24KKyAqIEBudW1fdHg6CW51bWJlciBvZiBzZW5kIGJ1ZmZlcnMKKyAqIEBjdXJfdHg6CWxhc3Qgc2VuZCBidWZmZXIgd3JpdHRlbgorICogQGR0eV90eDoJbGFzdCBidWZmZXIgYWN0dWFsbHkgc2VudAorICogQG51bV9yeDoJbnVtYmVyIG9mIHJlY2VpdmUgYnVmZmVycworICogQGN1cl9yeDoJY3VycmVudCByZWNlaXZlIGJ1ZmZlcgorICogQG5ldGRldjoJcG9pbnRlciB0byBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBuYXBpOglOQVBJIHN0cnVjdHVyZQorICogQHN0YXRzOgluZXR3b3JrIGRldmljZSBzdGF0aXN0aWNzCisgKiBAbXNnX2VuYWJsZToJZGV2aWNlIHN0YXRlIGZsYWdzCisgKiBAcnhfbG9jazoJcmVjZWl2ZSBsb2NrCisgKiBAbG9jazoJZGV2aWNlIGxvY2sKKyAqIEBwaHk6CWF0dGFjaGVkIFBIWQorICogQG1kaW86CU1ESU8gYnVzIGZvciBQSFkgYWNjZXNzCisgKiBAcGh5X2lkOglhZGRyZXNzIG9mIGF0dGFjaGVkIFBIWQorICovCitzdHJ1Y3QgZXRob2MgeworCXZvaWQgX19pb21lbSAqaW9iYXNlOworCXZvaWQgX19pb21lbSAqbWVtYmFzZTsKKworCXVuc2lnbmVkIGludCBudW1fdHg7CisJdW5zaWduZWQgaW50IGN1cl90eDsKKwl1bnNpZ25lZCBpbnQgZHR5X3R4OworCisJdW5zaWduZWQgaW50IG51bV9yeDsKKwl1bnNpZ25lZCBpbnQgY3VyX3J4OworCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwl1MzIgbXNnX2VuYWJsZTsKKworCXNwaW5sb2NrX3QgcnhfbG9jazsKKwlzcGlubG9ja190IGxvY2s7CisKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OworCXN0cnVjdCBtaWlfYnVzICptZGlvOworCXM4IHBoeV9pZDsKK307CisKKy8qKgorICogc3RydWN0IGV0aG9jX2JkIC0gYnVmZmVyIGRlc2NyaXB0b3IKKyAqIEBzdGF0OglidWZmZXIgc3RhdGlzdGljcworICogQGFkZHI6CXBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzCisgKi8KK3N0cnVjdCBldGhvY19iZCB7CisJdTMyIHN0YXQ7CisJdTMyIGFkZHI7Cit9OworCitzdGF0aWMgdTMyIGV0aG9jX3JlYWQoc3RydWN0IGV0aG9jICpkZXYsIGxvZmZfdCBvZmZzZXQpCit7CisJcmV0dXJuIGlvcmVhZDMyKGRldi0+aW9iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgZXRob2Nfd3JpdGUoc3RydWN0IGV0aG9jICpkZXYsIGxvZmZfdCBvZmZzZXQsIHUzMiBkYXRhKQoreworCWlvd3JpdGUzMihkYXRhLCBkZXYtPmlvYmFzZSArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX3JlYWRfYmQoc3RydWN0IGV0aG9jICpkZXYsIGludCBpbmRleCwgc3RydWN0IGV0aG9jX2JkICpiZCkKK3sKKwlsb2ZmX3Qgb2Zmc2V0ID0gRVRIT0NfQkRfQkFTRSArIChpbmRleCAqIHNpemVvZihzdHJ1Y3QgZXRob2NfYmQpKTsKKwliZC0+c3RhdCA9IGV0aG9jX3JlYWQoZGV2LCBvZmZzZXQgKyAwKTsKKwliZC0+YWRkciA9IGV0aG9jX3JlYWQoZGV2LCBvZmZzZXQgKyA0KTsKK30KKworc3RhdGljIHZvaWQgZXRob2Nfd3JpdGVfYmQoc3RydWN0IGV0aG9jICpkZXYsIGludCBpbmRleCwKKwkJY29uc3Qgc3RydWN0IGV0aG9jX2JkICpiZCkKK3sKKwlsb2ZmX3Qgb2Zmc2V0ID0gRVRIT0NfQkRfQkFTRSArIChpbmRleCAqIHNpemVvZihzdHJ1Y3QgZXRob2NfYmQpKTsKKwlldGhvY193cml0ZShkZXYsIG9mZnNldCArIDAsIGJkLT5zdGF0KTsKKwlldGhvY193cml0ZShkZXYsIG9mZnNldCArIDQsIGJkLT5hZGRyKTsKK30KKworc3RhdGljIHZvaWQgZXRob2NfZW5hYmxlX2lycShzdHJ1Y3QgZXRob2MgKmRldiwgdTMyIG1hc2spCit7CisJdTMyIGltYXNrID0gZXRob2NfcmVhZChkZXYsIElOVF9NQVNLKTsKKwlpbWFzayB8PSBtYXNrOworCWV0aG9jX3dyaXRlKGRldiwgSU5UX01BU0ssIGltYXNrKTsKK30KKworc3RhdGljIHZvaWQgZXRob2NfZGlzYWJsZV9pcnEoc3RydWN0IGV0aG9jICpkZXYsIHUzMiBtYXNrKQoreworCXUzMiBpbWFzayA9IGV0aG9jX3JlYWQoZGV2LCBJTlRfTUFTSyk7CisJaW1hc2sgJj0gfm1hc2s7CisJZXRob2Nfd3JpdGUoZGV2LCBJTlRfTUFTSywgaW1hc2spOworfQorCitzdGF0aWMgdm9pZCBldGhvY19hY2tfaXJxKHN0cnVjdCBldGhvYyAqZGV2LCB1MzIgbWFzaykKK3sKKwlldGhvY193cml0ZShkZXYsIElOVF9TT1VSQ0UsIG1hc2spOworfQorCitzdGF0aWMgdm9pZCBldGhvY19lbmFibGVfcnhfYW5kX3R4KHN0cnVjdCBldGhvYyAqZGV2KQoreworCXUzMiBtb2RlID0gZXRob2NfcmVhZChkZXYsIE1PREVSKTsKKwltb2RlIHw9IE1PREVSX1JYRU4gfCBNT0RFUl9UWEVOOworCWV0aG9jX3dyaXRlKGRldiwgTU9ERVIsIG1vZGUpOworfQorCitzdGF0aWMgdm9pZCBldGhvY19kaXNhYmxlX3J4X2FuZF90eChzdHJ1Y3QgZXRob2MgKmRldikKK3sKKwl1MzIgbW9kZSA9IGV0aG9jX3JlYWQoZGV2LCBNT0RFUik7CisJbW9kZSAmPSB+KE1PREVSX1JYRU4gfCBNT0RFUl9UWEVOKTsKKwlldGhvY193cml0ZShkZXYsIE1PREVSLCBtb2RlKTsKK30KKworc3RhdGljIGludCBldGhvY19pbml0X3Jpbmcoc3RydWN0IGV0aG9jICpkZXYpCit7CisJc3RydWN0IGV0aG9jX2JkIGJkOworCWludCBpOworCisJZGV2LT5jdXJfdHggPSAwOworCWRldi0+ZHR5X3R4ID0gMDsKKwlkZXYtPmN1cl9yeCA9IDA7CisKKwkvKiBzZXR1cCB0cmFuc21pc3Npb24gYnVmZmVycyAqLworCWJkLmFkZHIgPSAwOworCWJkLnN0YXQgPSBUWF9CRF9JUlEgfCBUWF9CRF9DUkM7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5udW1fdHg7IGkrKykgeworCQlpZiAoaSA9PSBkZXYtPm51bV90eCAtIDEpCisJCQliZC5zdGF0IHw9IFRYX0JEX1dSQVA7CisKKwkJZXRob2Nfd3JpdGVfYmQoZGV2LCBpLCAmYmQpOworCQliZC5hZGRyICs9IEVUSE9DX0JVRlNJWjsKKwl9CisKKwliZC5hZGRyID0gZGV2LT5udW1fdHggKiBFVEhPQ19CVUZTSVo7CisJYmQuc3RhdCA9IFJYX0JEX0VNUFRZIHwgUlhfQkRfSVJROworCisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3J4OyBpKyspIHsKKwkJaWYgKGkgPT0gZGV2LT5udW1fcnggLSAxKQorCQkJYmQuc3RhdCB8PSBSWF9CRF9XUkFQOworCisJCWV0aG9jX3dyaXRlX2JkKGRldiwgZGV2LT5udW1fdHggKyBpLCAmYmQpOworCQliZC5hZGRyICs9IEVUSE9DX0JVRlNJWjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBldGhvY19yZXNldChzdHJ1Y3QgZXRob2MgKmRldikKK3sKKwl1MzIgbW9kZTsKKworCS8qIFRPRE86IHJlc2V0IGNvbnRyb2xsZXI/ICovCisKKwlldGhvY19kaXNhYmxlX3J4X2FuZF90eChkZXYpOworCisJLyogVE9ETzogc2V0dXAgcmVnaXN0ZXJzICovCisKKwkvKiBlbmFibGUgRkNTIGdlbmVyYXRpb24gYW5kIGF1dG9tYXRpYyBwYWRkaW5nICovCisJbW9kZSA9IGV0aG9jX3JlYWQoZGV2LCBNT0RFUik7CisJbW9kZSB8PSBNT0RFUl9DUkMgfCBNT0RFUl9QQUQ7CisJZXRob2Nfd3JpdGUoZGV2LCBNT0RFUiwgbW9kZSk7CisKKwkvKiBzZXQgZnVsbC1kdXBsZXggbW9kZSAqLworCW1vZGUgPSBldGhvY19yZWFkKGRldiwgTU9ERVIpOworCW1vZGUgfD0gTU9ERVJfRlVMTEQ7CisJZXRob2Nfd3JpdGUoZGV2LCBNT0RFUiwgbW9kZSk7CisJZXRob2Nfd3JpdGUoZGV2LCBJUEdULCAweDE1KTsKKworCWV0aG9jX2Fja19pcnEoZGV2LCBJTlRfTUFTS19BTEwpOworCWV0aG9jX2VuYWJsZV9pcnEoZGV2LCBJTlRfTUFTS19BTEwpOworCWV0aG9jX2VuYWJsZV9yeF9hbmRfdHgoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBldGhvY191cGRhdGVfcnhfc3RhdHMoc3RydWN0IGV0aG9jICpkZXYsCisJCXN0cnVjdCBldGhvY19iZCAqYmQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldi0+bmV0ZGV2OworCXVuc2lnbmVkIGludCByZXQgPSAwOworCisJaWYgKGJkLT5zdGF0ICYgUlhfQkRfVEwpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJSWDogZnJhbWUgdG9vIGxvbmdcbiIpOworCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJcmV0Kys7CisJfQorCisJaWYgKGJkLT5zdGF0ICYgUlhfQkRfU0YpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJSWDogZnJhbWUgdG9vIHNob3J0XG4iKTsKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCXJldCsrOworCX0KKworCWlmIChiZC0+c3RhdCAmIFJYX0JEX0ROKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiUlg6IGRyaWJibGUgbmliYmxlXG4iKTsKKwkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwl9CisKKwlpZiAoYmQtPnN0YXQgJiBSWF9CRF9DUkMpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJSWDogd3JvbmcgQ1JDXG4iKTsKKwkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCXJldCsrOworCX0KKworCWlmIChiZC0+c3RhdCAmIFJYX0JEX09SKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiUlg6IG92ZXJydW5cbiIpOworCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCXJldCsrOworCX0KKworCWlmIChiZC0+c3RhdCAmIFJYX0JEX01JU1MpCisJCWRldi0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOworCisJaWYgKGJkLT5zdGF0ICYgUlhfQkRfTEMpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJSWDogbGF0ZSBjb2xsaXNpb25cbiIpOworCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMrKzsKKwkJcmV0Kys7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBldGhvY19yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgY291bnQ7CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBsaW1pdDsgKytjb3VudCkgeworCQl1bnNpZ25lZCBpbnQgZW50cnk7CisJCXN0cnVjdCBldGhvY19iZCBiZDsKKworCQllbnRyeSA9IHByaXYtPm51bV90eCArIChwcml2LT5jdXJfcnggJSBwcml2LT5udW1fcngpOworCQlldGhvY19yZWFkX2JkKHByaXYsIGVudHJ5LCAmYmQpOworCQlpZiAoYmQuc3RhdCAmIFJYX0JEX0VNUFRZKQorCQkJYnJlYWs7CisKKwkJaWYgKGV0aG9jX3VwZGF0ZV9yeF9zdGF0cyhwcml2LCAmYmQpID09IDApIHsKKwkJCWludCBzaXplID0gYmQuc3RhdCA+PiAxNjsKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgc2l6ZSk7CisJCQlpZiAobGlrZWx5KHNrYikpIHsKKwkJCQl2b2lkICpzcmMgPSBwcml2LT5tZW1iYXNlICsgYmQuYWRkcjsKKwkJCQltZW1jcHlfZnJvbWlvKHNrYl9wdXQoc2tiLCBzaXplKSwgc3JjLCBzaXplKTsKKwkJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCQkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCQkJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNpemU7CisJCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAibG93IG9uIG1lbW9yeSAtICIKKwkJCQkJCQkicGFja2V0IGRyb3BwZWRcbiIpOworCisJCQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyogY2xlYXIgdGhlIGJ1ZmZlciBkZXNjcmlwdG9yIHNvIGl0IGNhbiBiZSByZXVzZWQgKi8KKwkJYmQuc3RhdCAmPSB+UlhfQkRfU1RBVFM7CisJCWJkLnN0YXQgfD0gIFJYX0JEX0VNUFRZOworCQlldGhvY193cml0ZV9iZChwcml2LCBlbnRyeSwgJmJkKTsKKwkJcHJpdi0+Y3VyX3J4Kys7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGV0aG9jX3VwZGF0ZV90eF9zdGF0cyhzdHJ1Y3QgZXRob2MgKmRldiwgc3RydWN0IGV0aG9jX2JkICpiZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGV2LT5uZXRkZXY7CisKKwlpZiAoYmQtPnN0YXQgJiBUWF9CRF9MQykgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIlRYOiBsYXRlIGNvbGxpc2lvblxuIik7CisJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCX0KKworCWlmIChiZC0+c3RhdCAmIFRYX0JEX1JMKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiVFg6IHJldHJhbnNtaXQgbGltaXRcbiIpOworCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJfQorCisJaWYgKGJkLT5zdGF0ICYgVFhfQkRfVVIpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJUWDogdW5kZXJydW5cbiIpOworCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJfQorCisJaWYgKGJkLT5zdGF0ICYgVFhfQkRfQ1MpIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJUWDogY2FycmllciBzZW5zZSBsb3N0XG4iKTsKKwkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCX0KKworCWlmIChiZC0+c3RhdCAmIFRYX0JEX1NUQVRTKQorCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCisJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9IChiZC0+c3RhdCA+PiA0KSAmIDB4ZjsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGJkLT5zdGF0ID4+IDE2OworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldGhvY190eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJd2hpbGUgKHByaXYtPmR0eV90eCAhPSBwcml2LT5jdXJfdHgpIHsKKwkJdW5zaWduZWQgaW50IGVudHJ5ID0gcHJpdi0+ZHR5X3R4ICUgcHJpdi0+bnVtX3R4OworCQlzdHJ1Y3QgZXRob2NfYmQgYmQ7CisKKwkJZXRob2NfcmVhZF9iZChwcml2LCBlbnRyeSwgJmJkKTsKKwkJaWYgKGJkLnN0YXQgJiBUWF9CRF9SRUFEWSkKKwkJCWJyZWFrOworCisJCWVudHJ5ID0gKCsrcHJpdi0+ZHR5X3R4KSAlIHByaXYtPm51bV90eDsKKwkJKHZvaWQpZXRob2NfdXBkYXRlX3R4X3N0YXRzKHByaXYsICZiZCk7CisJfQorCisJaWYgKChwcml2LT5jdXJfdHggLSBwcml2LT5kdHlfdHgpIDw9IChwcml2LT5udW1fdHggLyAyKSkKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCisJZXRob2NfYWNrX2lycShwcml2LCBJTlRfTUFTS19UWCk7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgZXRob2NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHBlbmRpbmc7CisKKwlldGhvY19kaXNhYmxlX2lycShwcml2LCBJTlRfTUFTS19BTEwpOworCXBlbmRpbmcgPSBldGhvY19yZWFkKHByaXYsIElOVF9TT1VSQ0UpOworCWlmICh1bmxpa2VseShwZW5kaW5nID09IDApKSB7CisJCWV0aG9jX2VuYWJsZV9pcnEocHJpdiwgSU5UX01BU0tfQUxMKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCWV0aG9jX2Fja19pcnEocHJpdiwgSU5UX01BU0tfQUxMKTsKKworCWlmIChwZW5kaW5nICYgSU5UX01BU0tfQlVTWSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgInBhY2tldCBkcm9wcGVkXG4iKTsKKwkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCX0KKworCWlmIChwZW5kaW5nICYgSU5UX01BU0tfUlgpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpCisJCQlfX25hcGlfc2NoZWR1bGUoJnByaXYtPm5hcGkpOworCX0gZWxzZSB7CisJCWV0aG9jX2VuYWJsZV9pcnEocHJpdiwgSU5UX01BU0tfUlgpOworCX0KKworCWlmIChwZW5kaW5nICYgSU5UX01BU0tfVFgpCisJCWV0aG9jX3R4KGRldik7CisKKwlldGhvY19lbmFibGVfaXJxKHByaXYsIElOVF9NQVNLX0FMTCAmIH5JTlRfTUFTS19SWCk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IGV0aG9jX2dldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTggKm1hYyA9ICh1OCAqKWFkZHI7CisJdTMyIHJlZzsKKworCXJlZyA9IGV0aG9jX3JlYWQocHJpdiwgTUFDX0FERFIwKTsKKwltYWNbMl0gPSAocmVnID4+IDI0KSAmIDB4ZmY7CisJbWFjWzNdID0gKHJlZyA+PiAxNikgJiAweGZmOworCW1hY1s0XSA9IChyZWcgPj4gIDgpICYgMHhmZjsKKwltYWNbNV0gPSAocmVnID4+ICAwKSAmIDB4ZmY7CisKKwlyZWcgPSBldGhvY19yZWFkKHByaXYsIE1BQ19BRERSMSk7CisJbWFjWzBdID0gKHJlZyA+PiAgOCkgJiAweGZmOworCW1hY1sxXSA9IChyZWcgPj4gIDApICYgMHhmZjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV0aG9jX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgZXRob2MsIG5hcGkpOworCWludCB3b3JrX2RvbmUgPSAwOworCisJd29ya19kb25lID0gZXRob2NfcngocHJpdi0+bmV0ZGV2LCBidWRnZXQpOworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJZXRob2NfZW5hYmxlX2lycShwcml2LCBJTlRfTUFTS19SWCk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJfQorCisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworc3RhdGljIGludCBldGhvY19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeSwgaW50IHJlZykKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgRVRIT0NfTUlJX1RJTUVPVVQ7CisJc3RydWN0IGV0aG9jICpwcml2ID0gYnVzLT5wcml2OworCisJZXRob2Nfd3JpdGUocHJpdiwgTUlJQUREUkVTUywgTUlJQUREUkVTU19BRERSKHBoeSwgcmVnKSk7CisJZXRob2Nfd3JpdGUocHJpdiwgTUlJQ09NTUFORCwgTUlJQ09NTUFORF9SRUFEKTsKKworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQl1MzIgc3RhdHVzID0gZXRob2NfcmVhZChwcml2LCBNSUlTVEFUVVMpOworCQlpZiAoIShzdGF0dXMgJiBNSUlTVEFUVVNfQlVTWSkpIHsKKwkJCXUzMiBkYXRhID0gZXRob2NfcmVhZChwcml2LCBNSUlSWF9EQVRBKTsKKwkJCS8qIHJlc2V0IE1JSSBjb21tYW5kIHJlZ2lzdGVyICovCisJCQlldGhvY193cml0ZShwcml2LCBNSUlDT01NQU5ELCAwKTsKKwkJCXJldHVybiBkYXRhOworCQl9CisKKwkJc2NoZWR1bGUoKTsKKwl9CisKKwlyZXR1cm4gLUVCVVNZOworfQorCitzdGF0aWMgaW50IGV0aG9jX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeSwgaW50IHJlZywgdTE2IHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgRVRIT0NfTUlJX1RJTUVPVVQ7CisJc3RydWN0IGV0aG9jICpwcml2ID0gYnVzLT5wcml2OworCisJZXRob2Nfd3JpdGUocHJpdiwgTUlJQUREUkVTUywgTUlJQUREUkVTU19BRERSKHBoeSwgcmVnKSk7CisJZXRob2Nfd3JpdGUocHJpdiwgTUlJVFhfREFUQSwgdmFsKTsKKwlldGhvY193cml0ZShwcml2LCBNSUlDT01NQU5ELCBNSUlDT01NQU5EX1dSSVRFKTsKKworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCQl1MzIgc3RhdCA9IGV0aG9jX3JlYWQocHJpdiwgTUlJU1RBVFVTKTsKKwkJaWYgKCEoc3RhdCAmIE1JSVNUQVRVU19CVVNZKSkKKwkJCXJldHVybiAwOworCisJCXNjaGVkdWxlKCk7CisJfQorCisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGludCBldGhvY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX21kaW9fcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworfQorCitzdGF0aWMgaW50IGV0aG9jX21kaW9fcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspIHsKKwkJcGh5ID0gcHJpdi0+bWRpby0+cGh5X21hcFtpXTsKKwkJaWYgKHBoeSkgeworCQkJaWYgKHByaXYtPnBoeV9pZCAhPSAtMSkgeworCQkJCS8qIGF0dGFjaCB0byBzcGVjaWZpZWQgUEhZICovCisJCQkJaWYgKHByaXYtPnBoeV9pZCA9PSBwaHktPmFkZHIpCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQkvKiBhdXRvc2VsZWN0IFBIWSBpZiBub25lIHdhcyBzcGVjaWZpZWQgKi8KKwkJCQlpZiAocGh5LT5hZGRyICE9IDApCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKCFwaHkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJubyBQSFkgZm91bmRcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXBoeSA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeS0+ZGV2KSwgJmV0aG9jX21kaW9fcG9sbCwgMCwKKwkJCVBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJKTsKKwlpZiAoSVNfRVJSKHBoeSkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJjb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIik7CisJCXJldHVybiBQVFJfRVJSKHBoeSk7CisJfQorCisJcHJpdi0+cGh5ID0gcGh5OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV0aG9jX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGludCBtaW5fdHggPSAyOworCXVuc2lnbmVkIGludCBudW1fYmQ7CisJaW50IHJldDsKKworCXJldCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBldGhvY19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAorCQkJZGV2LT5uYW1lLCBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBUWC9SWCBidWZmZXJzICovCisJbnVtX2JkID0gKGRldi0+bWVtX2VuZCAtIGRldi0+bWVtX3N0YXJ0ICsgMSkgLyBFVEhPQ19CVUZTSVo7CisJcHJpdi0+bnVtX3R4ID0gbWluKG1pbl90eCwgbnVtX2JkIC8gNCk7CisJcHJpdi0+bnVtX3J4ID0gbnVtX2JkIC0gcHJpdi0+bnVtX3R4OworCWV0aG9jX3dyaXRlKHByaXYsIFRYX0JEX05VTSwgcHJpdi0+bnVtX3R4KTsKKworCWV0aG9jX2luaXRfcmluZyhwcml2KTsKKwlldGhvY19yZXNldChwcml2KTsKKworCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICIgcmVzdW1pbmcgcXVldWVcbiIpOworCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfSBlbHNlIHsKKwkJZGV2X2RiZygmZGV2LT5kZXYsICIgc3RhcnRpbmcgcXVldWVcbiIpOworCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCX0KKworCXBoeV9zdGFydChwcml2LT5waHkpOworCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKKworCWlmIChuZXRpZl9tc2dfaWZ1cChwcml2KSkgeworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJJL086ICUwOGx4IE1lbW9yeTogJTA4bHgtJTA4bHhcbiIsCisJCQkJZGV2LT5iYXNlX2FkZHIsIGRldi0+bWVtX3N0YXJ0LCBkZXYtPm1lbV9lbmQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV0aG9jX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKKworCWlmIChwcml2LT5waHkpCisJCXBoeV9zdG9wKHByaXYtPnBoeSk7CisKKwlldGhvY19kaXNhYmxlX3J4X2FuZF90eChwcml2KTsKKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKworCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBldGhvY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWRpbyA9IGlmX21paShpZnIpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHkgPSBOVUxMOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNtZCAhPSBTSU9DR01JSVBIWSkgeworCQlpZiAobWRpby0+cGh5X2lkID49IFBIWV9NQVhfQUREUikKKwkJCXJldHVybiAtRVJBTkdFOworCisJCXBoeSA9IHByaXYtPm1kaW8tPnBoeV9tYXBbbWRpby0+cGh5X2lkXTsKKwkJaWYgKCFwaHkpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9IGVsc2UgeworCQlwaHkgPSBwcml2LT5waHk7CisJfQorCisJcmV0dXJuIHBoeV9taWlfaW9jdGwocGh5LCBtZGlvLCBjbWQpOworfQorCitzdGF0aWMgaW50IGV0aG9jX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCkKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGludCBldGhvY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4ICptYWMgPSAodTggKilhZGRyOworCisJZXRob2Nfd3JpdGUocHJpdiwgTUFDX0FERFIwLCAobWFjWzJdIDw8IDI0KSB8IChtYWNbM10gPDwgMTYpIHwKKwkJCQkgICAgIChtYWNbNF0gPDwgIDgpIHwgKG1hY1s1XSA8PCAgMCkpOworCWV0aG9jX3dyaXRlKHByaXYsIE1BQ19BRERSMSwgKG1hY1swXSA8PCAgOCkgfCAobWFjWzFdIDw8ICAwKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXRob2Nfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGV0aG9jICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgbW9kZSA9IGV0aG9jX3JlYWQocHJpdiwgTU9ERVIpOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWMgPSBOVUxMOworCXUzMiBoYXNoWzJdID0geyAwLCAwIH07CisKKwkvKiBzZXQgbG9vcGJhY2sgbW9kZSBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykKKwkJbW9kZSB8PSAgTU9ERVJfTE9PUDsKKwllbHNlCisJCW1vZGUgJj0gfk1PREVSX0xPT1A7CisKKwkvKiByZWNlaXZlIGJyb2FkY2FzdCBmcmFtZXMgaWYgcmVxdWVzdGVkICovCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQlJPQURDQVNUKQorCQltb2RlICY9IH5NT0RFUl9CUk87CisJZWxzZQorCQltb2RlIHw9ICBNT0RFUl9CUk87CisKKwkvKiBlbmFibGUgcHJvbWlzY3VvdXMgbW9kZSBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQltb2RlIHw9ICBNT0RFUl9QUk87CisJZWxzZQorCQltb2RlICY9IH5NT0RFUl9QUk87CisKKwlldGhvY193cml0ZShwcml2LCBNT0RFUiwgbW9kZSk7CisKKwkvKiByZWNlaXZlIG11bHRpY2FzdCBmcmFtZXMgKi8KKwlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQloYXNoWzBdID0gMHhmZmZmZmZmZjsKKwkJaGFzaFsxXSA9IDB4ZmZmZmZmZmY7CisJfSBlbHNlIHsKKwkJZm9yIChtYyA9IGRldi0+bWNfbGlzdDsgbWM7IG1jID0gbWMtPm5leHQpIHsKKwkJCXUzMiBjcmMgPSBldGhlcl9jcmMobWMtPmRtaV9hZGRybGVuLCBtYy0+ZG1pX2FkZHIpOworCQkJaW50IGJpdCA9IChjcmMgPj4gMjYpICYgMHgzZjsKKwkJCWhhc2hbYml0ID4+IDVdIHw9IDEgPDwgKGJpdCAmIDB4MWYpOworCQl9CisJfQorCisJZXRob2Nfd3JpdGUocHJpdiwgRVRIX0hBU0gwLCBoYXNoWzBdKTsKKwlldGhvY193cml0ZShwcml2LCBFVEhfSEFTSDEsIGhhc2hbMV0pOworfQorCitzdGF0aWMgaW50IGV0aG9jX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyB2b2lkIGV0aG9jX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBwZW5kaW5nID0gZXRob2NfcmVhZChwcml2LCBJTlRfU09VUkNFKTsKKwlpZiAobGlrZWx5KHBlbmRpbmcpKQorCQlldGhvY19pbnRlcnJ1cHQoZGV2LT5pcnEsIGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZXRob2Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiAmcHJpdi0+c3RhdHM7Cit9CisKK3N0YXRpYyBpbnQgZXRob2Nfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGV0aG9jX2JkIGJkOworCXVuc2lnbmVkIGludCBlbnRyeTsKKwl2b2lkICpkZXN0OworCisJaWYgKHVubGlrZWx5KHNrYi0+bGVuID4gRVRIT0NfQlVGU0laKSkgeworCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9CisKKwllbnRyeSA9IHByaXYtPmN1cl90eCAlIHByaXYtPm51bV90eDsKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlwcml2LT5jdXJfdHgrKzsKKworCWV0aG9jX3JlYWRfYmQocHJpdiwgZW50cnksICZiZCk7CisJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgRVRIT0NfWkxFTikpCisJCWJkLnN0YXQgfD0gIFRYX0JEX1BBRDsKKwllbHNlCisJCWJkLnN0YXQgJj0gflRYX0JEX1BBRDsKKworCWRlc3QgPSBwcml2LT5tZW1iYXNlICsgYmQuYWRkcjsKKwltZW1jcHlfdG9pbyhkZXN0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCWJkLnN0YXQgJj0gfihUWF9CRF9TVEFUUyB8IFRYX0JEX0xFTl9NQVNLKTsKKwliZC5zdGF0IHw9IFRYX0JEX0xFTihza2ItPmxlbik7CisJZXRob2Nfd3JpdGVfYmQocHJpdiwgZW50cnksICZiZCk7CisKKwliZC5zdGF0IHw9IFRYX0JEX1JFQURZOworCWV0aG9jX3dyaXRlX2JkKHByaXYsIGVudHJ5LCAmYmQpOworCisJaWYgKHByaXYtPmN1cl90eCA9PSAocHJpdi0+ZHR5X3R4ICsgcHJpdi0+bnVtX3R4KSkgeworCQlkZXZfZGJnKCZkZXYtPmRldiwgInN0b3BwaW5nIHF1ZXVlXG4iKTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCX0KKworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBldGhvY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGV0aG9jX29wZW4sCisJLm5kb19zdG9wID0gZXRob2Nfc3RvcCwKKwkubmRvX2RvX2lvY3RsID0gZXRob2NfaW9jdGwsCisJLm5kb19zZXRfY29uZmlnID0gZXRob2NfY29uZmlnLAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gZXRob2Nfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZXRob2Nfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSA9IGV0aG9jX2NoYW5nZV9tdHUsCisJLm5kb190eF90aW1lb3V0ID0gZXRob2NfdHhfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cyA9IGV0aG9jX3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdCA9IGV0aG9jX3N0YXJ0X3htaXQsCit9OworCisvKioKKyAqIGV0aG9jX3Byb2JlKCkgLSBpbml0aWFsaXplIE9wZW5Db3JlcyBldGhlcm5ldCBNQUMKKyAqIHBkZXY6CXBsYXRmb3JtIGRldmljZQorICovCitzdGF0aWMgaW50IGV0aG9jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBOVUxMOworCXN0cnVjdCByZXNvdXJjZSAqbW1pbyA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlICptZW0gPSBOVUxMOworCXN0cnVjdCBldGhvYyAqcHJpdiA9IE5VTEw7CisJdW5zaWduZWQgaW50IHBoeTsKKwlpbnQgcmV0ID0gMDsKKworCS8qIGFsbG9jYXRlIG5ldHdvcmtpbmcgZGV2aWNlICovCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBldGhvYykpOworCWlmICghbmV0ZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBuZXR3b3JrIGRldmljZVxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbmV0ZGV2KTsKKworCS8qIG9idGFpbiBJL08gbWVtb3J5IHNwYWNlICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIEkvTyBtZW1vcnkgc3BhY2VcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZnJlZTsKKwl9CisKKwltbWlvID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsIHJlcy0+bmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSS9PIG1lbW9yeSBzcGFjZVxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBmcmVlOworCX0KKworCW5ldGRldi0+YmFzZV9hZGRyID0gbW1pby0+c3RhcnQ7CisKKwkvKiBvYnRhaW4gYnVmZmVyIG1lbW9yeSBzcGFjZSAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG9idGFpbiBtZW1vcnkgc3BhY2VcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZnJlZTsKKwl9CisKKwltZW0gPSBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwgcmVzLT5uYW1lKTsKKwlpZiAoIW1lbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVxdWVzdCBtZW1vcnkgc3BhY2VcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZnJlZTsKKwl9CisKKwluZXRkZXYtPm1lbV9zdGFydCA9IG1lbS0+c3RhcnQ7CisJbmV0ZGV2LT5tZW1fZW5kICAgPSBtZW0tPmVuZDsKKworCS8qIG9idGFpbiBkZXZpY2UgSVJRIG51bWJlciAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG9idGFpbiBJUlFcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZnJlZTsKKwl9CisKKwluZXRkZXYtPmlycSA9IHJlcy0+c3RhcnQ7CisKKwkvKiBzZXR1cCBkcml2ZXItcHJpdmF0ZSBkYXRhICovCisJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcHJpdi0+bmV0ZGV2ID0gbmV0ZGV2OworCisJcHJpdi0+aW9iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgbmV0ZGV2LT5iYXNlX2FkZHIsCisJCQltbWlvLT5lbmQgLSBtbWlvLT5zdGFydCArIDEpOworCWlmICghcHJpdi0+aW9iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBJL08gbWVtb3J5IHNwYWNlXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycm9yOworCX0KKworCXByaXYtPm1lbWJhc2UgPSBkZXZtX2lvcmVtYXBfbm9jYWNoZSgmcGRldi0+ZGV2LCBuZXRkZXYtPm1lbV9zdGFydCwKKwkJCW1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDEpOworCWlmICghcHJpdi0+bWVtYmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgbWVtb3J5IHNwYWNlXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIEFsbG93IHRoZSBwbGF0Zm9ybSBzZXR1cCBjb2RlIHRvIHBhc3MgaW4gYSBNQUMgYWRkcmVzcy4gKi8KKwlpZiAocGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpIHsKKwkJc3RydWN0IGV0aG9jX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0KKwkJCShzdHJ1Y3QgZXRob2NfcGxhdGZvcm1fZGF0YSAqKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCQltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgcGRhdGEtPmh3YWRkciwgSUZIV0FERFJMRU4pOworCQlwcml2LT5waHlfaWQgPSBwZGF0YS0+cGh5X2lkOworCX0KKworCS8qIENoZWNrIHRoYXQgdGhlIGdpdmVuIE1BQyBhZGRyZXNzIGlzIHZhbGlkLiBJZiBpdCBpc24ndCwgcmVhZCB0aGUKKwkgKiBjdXJyZW50IE1BQyBmcm9tIHRoZSBjb250cm9sbGVyLiAqLworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtPmRldl9hZGRyKSkKKwkJZXRob2NfZ2V0X21hY19hZGRyZXNzKG5ldGRldiwgbmV0ZGV2LT5kZXZfYWRkcik7CisKKwkvKiBDaGVjayB0aGUgTUFDIGFnYWluIGZvciB2YWxpZGl0eSwgaWYgaXQgc3RpbGwgaXNuJ3QgY2hvb3NlIGFuZAorCSAqIHByb2dyYW0gYSByYW5kb20gb25lLiAqLworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtPmRldl9hZGRyKSkKKwkJcmFuZG9tX2V0aGVyX2FkZHIobmV0ZGV2LT5kZXZfYWRkcik7CisKKwlldGhvY19zZXRfbWFjX2FkZHJlc3MobmV0ZGV2LCBuZXRkZXYtPmRldl9hZGRyKTsKKworCS8qIHJlZ2lzdGVyIE1JSSBidXMgKi8KKwlwcml2LT5tZGlvID0gbWRpb2J1c19hbGxvYygpOworCWlmICghcHJpdi0+bWRpbykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGZyZWU7CisJfQorCisJcHJpdi0+bWRpby0+bmFtZSA9ICJldGhvYy1tZGlvIjsKKwlzbnByaW50Zihwcml2LT5tZGlvLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXMtJWQiLAorCQkJcHJpdi0+bWRpby0+bmFtZSwgcGRldi0+aWQpOworCXByaXYtPm1kaW8tPnJlYWQgPSBldGhvY19tZGlvX3JlYWQ7CisJcHJpdi0+bWRpby0+d3JpdGUgPSBldGhvY19tZGlvX3dyaXRlOworCXByaXYtPm1kaW8tPnJlc2V0ID0gZXRob2NfbWRpb19yZXNldDsKKwlwcml2LT5tZGlvLT5wcml2ID0gcHJpdjsKKworCXByaXYtPm1kaW8tPmlycSA9IGttYWxsb2Moc2l6ZW9mKGludCkgKiBQSFlfTUFYX0FERFIsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+bWRpby0+aXJxKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9tZGlvOworCX0KKworCWZvciAocGh5ID0gMDsgcGh5IDwgUEhZX01BWF9BRERSOyBwaHkrKykKKwkJcHJpdi0+bWRpby0+aXJxW3BoeV0gPSBQSFlfUE9MTDsKKworCXJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi0+bWRpbyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBNRElPIGJ1c1xuIik7CisJCWdvdG8gZnJlZV9tZGlvOworCX0KKworCXJldCA9IGV0aG9jX21kaW9fcHJvYmUobmV0ZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiZmFpbGVkIHRvIHByb2JlIE1ESU8gYnVzXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlldGhlcl9zZXR1cChuZXRkZXYpOworCisJLyogc2V0dXAgdGhlIG5ldF9kZXZpY2Ugc3RydWN0dXJlICovCisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmV0aG9jX25ldGRldl9vcHM7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSE9DX1RJTUVPVVQ7CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSAwOworCisJLyogc2V0dXAgTkFQSSAqLworCW1lbXNldCgmcHJpdi0+bmFwaSwgMCwgc2l6ZW9mKHByaXYtPm5hcGkpKTsKKwluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZwcml2LT5uYXBpLCBldGhvY19wb2xsLCA2NCk7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cnhfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmbmV0ZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgaW50ZXJmYWNlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlnb3RvIG91dDsKKworZXJyb3I6CisJbWRpb2J1c191bnJlZ2lzdGVyKHByaXYtPm1kaW8pOworZnJlZV9tZGlvOgorCWtmcmVlKHByaXYtPm1kaW8tPmlycSk7CisJbWRpb2J1c19mcmVlKHByaXYtPm1kaW8pOworZnJlZToKKwlmcmVlX25ldGRldihuZXRkZXYpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogZXRob2NfcmVtb3ZlKCkgLSBzaHV0ZG93biBPcGVuQ29yZXMgZXRoZXJuZXQgTUFDCisgKiBAcGRldjoJcGxhdGZvcm0gZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgZXRob2NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBldGhvYyAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWlmIChuZXRkZXYpIHsKKwkJcGh5X2Rpc2Nvbm5lY3QocHJpdi0+cGh5KTsKKwkJcHJpdi0+cGh5ID0gTlVMTDsKKworCQlpZiAocHJpdi0+bWRpbykgeworCQkJbWRpb2J1c191bnJlZ2lzdGVyKHByaXYtPm1kaW8pOworCQkJa2ZyZWUocHJpdi0+bWRpby0+aXJxKTsKKwkJCW1kaW9idXNfZnJlZShwcml2LT5tZGlvKTsKKwkJfQorCisJCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJCWZyZWVfbmV0ZGV2KG5ldGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZXRob2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbnQgZXRob2NfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisjZWxzZQorIyBkZWZpbmUgZXRob2Nfc3VzcGVuZCBOVUxMCisjIGRlZmluZSBldGhvY19yZXN1bWUgIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBldGhvY19kcml2ZXIgPSB7CisJLnByb2JlICAgPSBldGhvY19wcm9iZSwKKwkucmVtb3ZlICA9IGV0aG9jX3JlbW92ZSwKKwkuc3VzcGVuZCA9IGV0aG9jX3N1c3BlbmQsCisJLnJlc3VtZSAgPSBldGhvY19yZXN1bWUsCisJLmRyaXZlciAgPSB7CisJCS5uYW1lID0gImV0aG9jIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgZXRob2NfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmV0aG9jX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBldGhvY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmV0aG9jX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGV0aG9jX2luaXQpOworbW9kdWxlX2V4aXQoZXRob2NfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiT3BlbkNvcmVzIEV0aGVybmV0IE1BQyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXdyazMuYyBiL2RyaXZlcnMvbmV0L2V3cmszLmMKaW5kZXggYjg1MjMwMy4uMWE2ODVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXdyazMuYworKysgYi9kcml2ZXJzL25ldC9ld3JrMy5jCkBAIC0zODgsNiArMzg4LDE4IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBld3JrM19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBld3JrM19vcGVuLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBld3JrM19xdWV1ZV9wa3QsCisJLm5kb19zdG9wCQk9IGV3cmszX2Nsb3NlLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fZG9faW9jdGwJCT0gZXdyazNfaW9jdGwsCisJLm5kb190eF90aW1lb3V0CQk9IGV3cmszX3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0CiBld3JrM19od19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVfbG9uZyBpb2Jhc2UpCiB7CkBAIC02MDMsMTYgKzYxNSwxMSBAQAogCQlwcmludGsodmVyc2lvbik7CiAJfQogCS8qIFRoZSBFV1JLMy1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9IGV3cmszX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBld3JrM19xdWV1ZV9wa3Q7Ci0JZGV2LT5zdG9wID0gZXdyazNfY2xvc2U7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT5kb19pb2N0bCA9IGV3cmszX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZld3JrM19uZXRkZXZfb3BzOwogCWlmIChscC0+YWRhcHRlcl9uYW1lWzRdID09ICczJykKIAkJU0VUX0VUSFRPT0xfT1BTKGRldiwgJmV0aHRvb2xfb3BzXzIwMyk7CiAJZWxzZQogCQlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmZXRodG9vbF9vcHMpOwotCWRldi0+dHhfdGltZW91dCA9IGV3cmszX3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFFVRVVFX1BLVF9USU1FT1VUOwogCiAJZGV2LT5tZW1fc3RhcnQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVhbG54LmMgYi9kcml2ZXJzL25ldC9mZWFsbnguYwppbmRleCBkYWY3MjcyYy4uODkxYmUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVhbG54LmMKKysrIGIvZHJpdmVycy9uZXQvZmVhbG54LmMKQEAgLTkzLDggKzkzLDggQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CisJS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2IiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUgIlxuIjsKIAogCiAvKiBUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiB0byB1c2UgUENJIG1lbW9yeSBzcGFjZSwgaG93ZXZlciBzb21lIHg4NiBzeXN0ZW1zCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWMuYyBiL2RyaXZlcnMvbmV0L2ZlYy5jCmluZGV4IDI3NjkwODMuLmE1MTVhY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYy5jCkBAIC0zNiw0NiArMzYsMzIgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKKyNpZm5kZWYgQ09ORklHX0FSQ0hfTVhDCiAjaW5jbHVkZSA8YXNtL2NvbGRmaXJlLmg+CiAjaW5jbHVkZSA8YXNtL21jZnNpbS5oPgotI2luY2x1ZGUgImZlYy5oIgotCi0jaWYgZGVmaW5lZChDT05GSUdfRkVDMikKLSNkZWZpbmUJRkVDX01BWF9QT1JUUwkyCi0jZWxzZQotI2RlZmluZQlGRUNfTUFYX1BPUlRTCTEKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfTTUyNzIpCi0jZGVmaW5lIEhBVkVfbWlpX2xpbmtfaW50ZXJydXB0CisjaW5jbHVkZSAiZmVjLmgiCisKKyNpZmRlZiBDT05GSUdfQVJDSF9NWEMKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjZGVmaW5lIEZFQ19BTElHTk1FTlQJMHhmCisjZWxzZQorI2RlZmluZSBGRUNfQUxJR05NRU5UCTB4MwogI2VuZGlmCiAKIC8qCiAgKiBEZWZpbmUgdGhlIGZpeGVkIGFkZHJlc3Mgb2YgdGhlIEZFQyBoYXJkd2FyZS4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBmZWNfaHdbXSA9IHsKICNpZiBkZWZpbmVkKENPTkZJR19NNTI3MikKLQkoTUNGX01CQVIgKyAweDg0MCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTI3eCkKLQkoTUNGX01CQVIgKyAweDEwMDApLAotCShNQ0ZfTUJBUiArIDB4MTgwMCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NNTIzeCkgfHwgZGVmaW5lZChDT05GSUdfTTUyOHgpCi0JKE1DRl9NQkFSICsgMHgxMDAwKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX001MjB4KQotCShNQ0ZfTUJBUisweDMwMDAwKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX001MzJ4KQotCShNQ0ZfTUJBUisweGZjMDMwMDAwKSwKLSNlbHNlCi0JJigoKGltbWFwX3QgKilJTUFQX0FERFIpLT5pbV9jcG0uY3BfZmVjKSwKLSNlbmRpZgotfTsKKyNkZWZpbmUgSEFWRV9taWlfbGlua19pbnRlcnJ1cHQKIAogc3RhdGljIHVuc2lnbmVkIGNoYXIJZmVjX21hY19kZWZhdWx0W10gPSB7CiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKQEAgLTk4LDYgKzg0LDcgQEAKICNlbHNlCiAjZGVmaW5lCUZFQ19GTEFTSE1BQwkwCiAjZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfTTUyNzIgKi8KIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgb2Ygc29tZSBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQgZGlmZmVyZW50IFBIWXMKICovCkBAIC0xNjIsNyArMTQ5LDcgQEAKICAqIGFjY291bnQgd2hlbiBzZXR0aW5nIGl0LgogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTTUyM3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjd4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI4eCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX001MjB4KSB8fCBkZWZpbmVkKENPTkZJR19NNTMyeCkKKyAgICBkZWZpbmVkKENPTkZJR19NNTIweCkgfHwgZGVmaW5lZChDT05GSUdfTTUzMngpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTVhDKQogI2RlZmluZQlPUFRfRlJBTUVfU0laRQkoUEtUX01BWEJVRl9TSVpFIDw8IDE2KQogI2Vsc2UKICNkZWZpbmUJT1BUX0ZSQU1FX1NJWkUJMApAQCAtMTgyLDYgKzE2OSw4IEBACiAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCisJc3RydWN0IGNsayAqY2xrOworCiAJLyogVGhlIHNhdmVkIGFkZHJlc3Mgb2YgYSBzZW50LWluLXBsYWNlIHBhY2tldC9idWZmZXIsIGZvciBza2ZyZWUoKS4gKi8KIAl1bnNpZ25lZCBjaGFyICp0eF9ib3VuY2VbVFhfUklOR19TSVpFXTsKIAlzdHJ1Y3QJc2tfYnVmZiogdHhfc2tidWZmW1RYX1JJTkdfU0laRV07CkBAIC0xOTAsNiArMTc5LDcgQEAKIAogCS8qIENQTSBkdWFsIHBvcnQgUkFNIHJlbGF0aXZlIGFkZHJlc3Nlcy4KIAkqLworCWRtYV9hZGRyX3QJYmRfZG1hOwogCWNiZF90CSpyeF9iZF9iYXNlOwkJLyogQWRkcmVzcyBvZiBSeCBhbmQgVHggYnVmZmVycy4gKi8KIAljYmRfdAkqdHhfYmRfYmFzZTsKIAljYmRfdAkqY3VyX3J4LCAqY3VyX3R4OwkJLyogVGhlIG5leHQgZnJlZSByaW5nIGVudHJ5ICovCkBAIC0zNDIsMTAgKzMzMiwxMCBAQAogCSAqCTQtYnl0ZSBib3VuZGFyaWVzLiBVc2UgYm91bmNlIGJ1ZmZlcnMgdG8gY29weSBkYXRhCiAJICoJYW5kIGdldCBpdCBhbGlnbmVkLiBVZ2guCiAJICovCi0JaWYgKGJkcC0+Y2JkX2J1ZmFkZHIgJiAweDMpIHsKKwlpZiAoYmRwLT5jYmRfYnVmYWRkciAmIEZFQ19BTElHTk1FTlQpIHsKIAkJdW5zaWduZWQgaW50IGluZGV4OwogCQlpbmRleCA9IGJkcCAtIGZlcC0+dHhfYmRfYmFzZTsKLQkJbWVtY3B5KGZlcC0+dHhfYm91bmNlW2luZGV4XSwgKHZvaWQgKikgYmRwLT5jYmRfYnVmYWRkciwgYmRwLT5jYmRfZGF0bGVuKTsKKwkJbWVtY3B5KGZlcC0+dHhfYm91bmNlW2luZGV4XSwgKHZvaWQgKilza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJYmRwLT5jYmRfYnVmYWRkciA9IF9fcGEoZmVwLT50eF9ib3VuY2VbaW5kZXhdKTsKIAl9CiAKQEAgLTM1OSw4ICszNDksOCBAQAogCS8qIFB1c2ggdGhlIGRhdGEgY2FjaGUgc28gdGhlIENQTSBkb2VzIG5vdCBnZXQgc3RhbGUgbWVtb3J5CiAJICogZGF0YS4KIAkgKi8KLQlmbHVzaF9kY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICsgc2tiLT5sZW4pOworCWRtYV9zeW5jX3NpbmdsZShOVUxMLCBiZHAtPmNiZF9idWZhZGRyLAorCQkJYmRwLT5jYmRfZGF0bGVuLCBETUFfVE9fREVWSUNFKTsKIAogCS8qIFNlbmQgaXQgb24gaXRzIHdheS4gIFRlbGwgRkVDIGl0J3MgcmVhZHksIGludGVycnVwdCB3aGVuIGRvbmUsCiAJICogaXQncyB0aGUgbGFzdCBCRCBvZiB0aGUgZnJhbWUsIGFuZCB0byBwdXQgdGhlIENSQyBvbiB0aGUgZW5kLgpAQCAtNjMzLDYgKzYyMyw5IEBACiAJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCWRhdGEgPSAoX191OCopX192YShiZHAtPmNiZF9idWZhZGRyKTsKIAorCWRtYV9zeW5jX3NpbmdsZShOVUxMLCAodW5zaWduZWQgbG9uZylfX3BhKGRhdGEpLAorCQkJcGt0X2xlbiAtIDQsIERNQV9GUk9NX0RFVklDRSk7CisKIAkvKiBUaGlzIGRvZXMgMTYgYnl0ZSBhbGlnbm1lbnQsIGV4YWN0bHkgd2hhdCB3ZSBuZWVkLgogCSAqIFRoZSBwYWNrZXQgbGVuZ3RoIGluY2x1ZGVzIEZDUywgYnV0IHdlIGRvbid0IHdhbnQgdG8KIAkgKiBpbmNsdWRlIHRoYXQgd2hlbiBwYXNzaW5nIHVwc3RyZWFtIGFzIGl0IG1lc3NlcyB1cApAQCAtMTExNCw3ICsxMTA3LDcgQEAKIC8qIHJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgODcyMSAqLwogCiAjZGVmaW5lIE1JSV9LUzg3MjFCTF9SWEVSQ1IJMjEKLSNkZWZpbmUgTUlJX0tTODcyMUJMX0lDU1IJMjIKKyNkZWZpbmUgTUlJX0tTODcyMUJMX0lDU1IJMjcKICNkZWZpbmUJTUlJX0tTODcyMUJMX1BIWUNSCTMxCiAKIHN0YXRpYyBwaHlfY21kX3QgY29uc3QgcGh5X2NtZF9rczg3MjFibF9jb25maWdbXSA9IHsKQEAgLTEyMjMsNTggKzEyMTYsMzIgQEAKICNpZmRlZiBIQVZFX21paV9saW5rX2ludGVycnVwdAogc3RhdGljIGlycXJldHVybl90CiBtaWlfbGlua19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqIGRldl9pZCk7Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX001MjcyKQogLyoKLSAqCUNvZGUgc3BlY2lmaWMgdG8gQ29sZGZpcmUgNTI3MiBzZXR1cC4KKyAqCVRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIE1JSSBpbnRlcnJ1cHQgc2V0dXAgb2YgdGhlIE01MjcyRVZCLgogICovCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X2ludHJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19yZXF1ZXN0X21paV9pbnRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKHJlcXVlc3RfaXJxKDY2LCBtaWlfbGlua19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsICJmZWMoTUlJKSIsIGRldikgIT0gMCkKKwkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSBmZWMoTUlJKSBJUlEoNjYpIVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2Rpc2FibGVfcGh5X2ludHIodm9pZCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppY3JwOwotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlc2MgewotCQljaGFyICpuYW1lOwotCQl1bnNpZ25lZCBzaG9ydCBpcnE7Ci0JCWlycV9oYW5kbGVyX3QgaGFuZGxlcjsKLQl9ICppZHAsIGlkW10gPSB7Ci0JCXsgImZlYyhSWCkiLCA4NiwgZmVjX2VuZXRfaW50ZXJydXB0IH0sCi0JCXsgImZlYyhUWCkiLCA4NywgZmVjX2VuZXRfaW50ZXJydXB0IH0sCi0JCXsgImZlYyhPVEhFUikiLCA4OCwgZmVjX2VuZXRfaW50ZXJydXB0IH0sCi0JCXsgImZlYyhNSUkpIiwgNjYsIG1paV9saW5rX2ludGVycnVwdCB9LAotCQl7IE5VTEwgfSwKLQl9OworCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7CisJKmljcnAgPSAweDA4MDAwMDAwOworfQogCi0JLyogU2V0dXAgaW50ZXJydXB0IGhhbmRsZXJzLiAqLwotCWZvciAoaWRwID0gaWQ7IGlkcC0+bmFtZTsgaWRwKyspIHsKLQkJaWYgKHJlcXVlc3RfaXJxKGlkcC0+aXJxLCBpZHAtPmhhbmRsZXIsIElSUUZfRElTQUJMRUQsIGlkcC0+bmFtZSwgZGV2KSAhPSAwKQotCQkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlcyBJUlEoJWQpIVxuIiwgaWRwLT5uYW1lLCBpZHAtPmlycSk7Ci0JfQotCi0JLyogVW5tYXNrIGludGVycnVwdCBhdCBDb2xkRmlyZSA1MjcyIFNJTSAqLwotCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMyk7Ci0JKmljcnAgPSAweDAwMDAwZGRkOworc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcGh5X2Fja19pbnRyKHZvaWQpCit7CisJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqaWNycDsKKwkvKiBBY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0ICovCiAJaWNycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfTUJBUiArIE1DRlNJTV9JQ1IxKTsKIAkqaWNycCA9IDB4MGQwMDAwMDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3NldF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQlmZWNwLT5mZWNfcl9jbnRybCA9IE9QVF9GUkFNRV9TSVpFIHwgMHgwNDsKLQlmZWNwLT5mZWNfeF9jbnRybCA9IDB4MDA7Ci0KLQkvKgotCSAqIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegotCSAqIFNlZSA1MjcyIG1hbnVhbCBzZWN0aW9uIDExLjUuODogTVNDUgotCSAqLwotCWZlcC0+cGh5X3NwZWVkID0gKCgoKE1DRl9DTEsgLyA0KSAvICgyNTAwMDAwIC8gMTApKSArIDUpIC8gMTApICogMjsKLQlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQ7Ci0KLQlmZWNfcmVzdGFydChkZXYsIDApOwotfQotCisjaWZkZWYgQ09ORklHX001MjcyCiBzdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19nZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMzA3LDU0OSArMTI3NCw2IEBACiAJaWYgKGlhcCA9PSBmZWNfbWFjX2RlZmF1bHQpCiAJCSBkZXYtPmRldl9hZGRyW0VUSF9BTEVOLTFdID0gZmVjX21hY19kZWZhdWx0W0VUSF9BTEVOLTFdICsgZmVwLT5pbmRleDsKIH0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZW5hYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2Rpc2FibGVfcGh5X2ludHIodm9pZCkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppY3JwOwotCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSAoTUNGX01CQVIgKyBNQ0ZTSU1fSUNSMSk7Ci0JKmljcnAgPSAweDA4MDAwMDAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19waHlfYWNrX2ludHIodm9pZCkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICppY3JwOwotCS8qIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KLQlpY3JwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9NQkFSICsgTUNGU0lNX0lDUjEpOwotCSppY3JwID0gMHgwZDAwMDAwMDsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfbG9jYWxod19zZXR1cCh2b2lkKQotewotfQotCi0vKgotICoJRG8gbm90IG5lZWQgdG8gbWFrZSByZWdpb24gdW5jYWNoZWQgb24gNTI3Mi4KLSAqLwotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfdW5jYWNoZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyM3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjd4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI4eCkKLQotLyoKLSAqCUNvZGUgc3BlY2lmaWMgdG8gQ29sZGZpcmUgNTIzMC81MjMxLzUyMzIvNTIzNC81MjM1LAotICoJdGhlIDUyNzAvNTI3MS81Mjc0LzUyNzUgYW5kIDUyODAvNTI4MiBzZXR1cHMuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3JlcXVlc3RfaW50cnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwOwotCWludCBiOwotCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlc2MgewotCQljaGFyICpuYW1lOwotCQl1bnNpZ25lZCBzaG9ydCBpcnE7Ci0JfSAqaWRwLCBpZFtdID0gewotCQl7ICJmZWMoVFhGKSIsIDIzIH0sCi0JCXsgImZlYyhSWEYpIiwgMjcgfSwKLQkJeyAiZmVjKE1JSSkiLCAyOSB9LAotCQl7IE5VTEwgfSwKLQl9OwotCi0JZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQliID0gKGZlcC0+aW5kZXgpID8gMTI4IDogNjQ7Ci0KLQkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlcnMuICovCi0JZm9yIChpZHAgPSBpZDsgaWRwLT5uYW1lOyBpZHArKykgewotCQlpZiAocmVxdWVzdF9pcnEoYitpZHAtPmlycSwgZmVjX2VuZXRfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBpZHAtPm5hbWUsIGRldikgIT0gMCkKLQkJCXByaW50aygiRkVDOiBDb3VsZCBub3QgYWxsb2NhdGUgJXMgSVJRKCVkKSFcbiIsIGlkcC0+bmFtZSwgYitpZHAtPmlycSk7Ci0JfQotCi0JLyogVW5tYXNrIGludGVycnVwdHMgYXQgQ29sZEZpcmUgNTI4MC81MjgyIGludGVycnVwdCBjb250cm9sbGVyICovCi0JewotCQl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICAqaWNycDsKLQkJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgKmltcnA7Ci0JCWludCBpLCBpbGlwOwotCi0JCWIgPSAoZmVwLT5pbmRleCkgPyBNQ0ZJQ01fSU5UQzEgOiBNQ0ZJQ01fSU5UQzA7Ci0JCWljcnAgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoTUNGX0lQU0JBUiArIGIgKwotCQkJTUNGSU5UQ19JQ1IwKTsKLQkJZm9yIChpID0gMjMsIGlsaXAgPSAweDI4OyAoaSA8IDM2KTsgaSsrKQotCQkJaWNycFtpXSA9IGlsaXAtLTsKLQotCQlpbXJwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9JUFNCQVIgKyBiICsKLQkJCU1DRklOVENfSU1SSCk7Ci0JCSppbXJwICY9IH4weDAwMDAwMDBmOwotCQlpbXJwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgKE1DRl9JUFNCQVIgKyBiICsKLQkJCU1DRklOVENfSU1STCk7Ci0JCSppbXJwICY9IH4weGZmODAwMDAxOwotCX0KLQotI2lmIGRlZmluZWQoQ09ORklHX001Mjh4KQotCS8qIFNldCB1cCBncGlvIG91dHB1dHMgZm9yIE1JSSBsaW5lcyAqLwotCXsKLQkJdm9sYXRpbGUgdTE2ICpncGlvX3Bhc3BhcjsKLQkJdm9sYXRpbGUgdTggKmdwaW9fcGVobHBhcjsKLQotCQlncGlvX3Bhc3BhciA9ICh2b2xhdGlsZSB1MTYgKikgKE1DRl9JUFNCQVIgKyAweDEwMDA1Nik7Ci0JCWdwaW9fcGVobHBhciA9ICh2b2xhdGlsZSB1MTYgKikgKE1DRl9JUFNCQVIgKyAweDEwMDA1OCk7Ci0JCSpncGlvX3Bhc3BhciB8PSAweDBmMDA7Ci0JCSpncGlvX3BlaGxwYXIgPSAweGMwOwotCX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfTTUyN3gpCi0JLyogU2V0IHVwIGdwaW8gb3V0cHV0cyBmb3IgTUlJIGxpbmVzICovCi0JewotCQl2b2xhdGlsZSB1OCAqZ3Bpb19wYXJfZmVjOwotCQl2b2xhdGlsZSB1MTYgKmdwaW9fcGFyX2ZlY2kyYzsKLQotCQlncGlvX3Bhcl9mZWNpMmMgPSAodm9sYXRpbGUgdTE2ICopKE1DRl9JUFNCQVIgKyAweDEwMDA4Mik7Ci0JCS8qIFNldCB1cCBncGlvIG91dHB1dHMgZm9yIEZFQzAgTUlJIGxpbmVzICovCi0JCWdwaW9fcGFyX2ZlYyA9ICh2b2xhdGlsZSB1OCAqKShNQ0ZfSVBTQkFSICsgMHgxMDAwNzgpOwotCi0JCSpncGlvX3Bhcl9mZWNpMmMgfD0gMHgwZjAwOwotCQkqZ3Bpb19wYXJfZmVjIHw9IDB4YzA7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19GRUMyKQotCQkvKiBTZXQgdXAgZ3BpbyBvdXRwdXRzIGZvciBGRUMxIE1JSSBsaW5lcyAqLwotCQlncGlvX3Bhcl9mZWMgPSAodm9sYXRpbGUgdTggKikoTUNGX0lQU0JBUiArIDB4MTAwMDc5KTsKLQotCQkqZ3Bpb19wYXJfZmVjaTJjIHw9IDB4MDBhMDsKLQkJKmdwaW9fcGFyX2ZlYyB8PSAweGMwOwotI2VuZGlmIC8qIENPTkZJR19GRUMyICovCi0JfQotI2VuZGlmIC8qIENPTkZJR19NNTI3eCAqLwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19zZXRfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApCi17Ci0Jdm9sYXRpbGUgZmVjX3QgKmZlY3A7Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0JZmVjcC0+ZmVjX3JfY250cmwgPSBPUFRfRlJBTUVfU0laRSB8IDB4MDQ7Ci0JZmVjcC0+ZmVjX3hfY250cmwgPSAweDAwOwotCi0JLyoKLQkgKiBTZXQgTUlJIHNwZWVkIHRvIDIuNSBNSHoKLQkgKiBTZWUgNTI4MiBtYW51YWwgc2VjdGlvbiAxNy41LjQuNzogTVNDUgotCSAqLwotCWZlcC0+cGh5X3NwZWVkID0gKCgoKE1DRl9DTEsgLyAyKSAvICgyNTAwMDAwIC8gMTApKSArIDUpIC8gMTApICogMjsKLQlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQ7Ci0KLQlmZWNfcmVzdGFydChkZXYsIDApOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19nZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9sYXRpbGUgZmVjX3QgKmZlY3A7Ci0JdW5zaWduZWQgY2hhciAqaWFwLCB0bXBhZGRyW0VUSF9BTEVOXTsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQotCWlmIChGRUNfRkxBU0hNQUMpIHsKLQkJLyoKLQkJICogR2V0IE1BQyBhZGRyZXNzIGZyb20gRkxBU0guCi0JCSAqIElmIGl0IGlzIGFsbCAxJ3Mgb3IgMCdzLCB1c2UgdGhlIGRlZmF1bHQuCi0JCSAqLwotCQlpYXAgPSBGRUNfRkxBU0hNQUM7Ci0JCWlmICgoaWFwWzBdID09IDApICYmIChpYXBbMV0gPT0gMCkgJiYgKGlhcFsyXSA9PSAwKSAmJgotCQkgICAgKGlhcFszXSA9PSAwKSAmJiAoaWFwWzRdID09IDApICYmIChpYXBbNV0gPT0gMCkpCi0JCQlpYXAgPSBmZWNfbWFjX2RlZmF1bHQ7Ci0JCWlmICgoaWFwWzBdID09IDB4ZmYpICYmIChpYXBbMV0gPT0gMHhmZikgJiYgKGlhcFsyXSA9PSAweGZmKSAmJgotCQkgICAgKGlhcFszXSA9PSAweGZmKSAmJiAoaWFwWzRdID09IDB4ZmYpICYmIChpYXBbNV0gPT0gMHhmZikpCi0JCQlpYXAgPSBmZWNfbWFjX2RlZmF1bHQ7Ci0JfSBlbHNlIHsKLQkJKigodW5zaWduZWQgbG9uZyAqKSAmdG1wYWRkclswXSkgPSBmZWNwLT5mZWNfYWRkcl9sb3c7Ci0JCSooKHVuc2lnbmVkIHNob3J0ICopICZ0bXBhZGRyWzRdKSA9IChmZWNwLT5mZWNfYWRkcl9oaWdoID4+IDE2KTsKLQkJaWFwID0gJnRtcGFkZHJbMF07Ci0JfQotCi0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGlhcCwgRVRIX0FMRU4pOwotCi0JLyogQWRqdXN0IE1BQyBpZiB1c2luZyBkZWZhdWx0IE1BQyBhZGRyZXNzICovCi0JaWYgKGlhcCA9PSBmZWNfbWFjX2RlZmF1bHQpCi0JCWRldi0+ZGV2X2FkZHJbRVRIX0FMRU4tMV0gPSBmZWNfbWFjX2RlZmF1bHRbRVRIX0FMRU4tMV0gKyBmZXAtPmluZGV4OwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19lbmFibGVfcGh5X2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19waHlfYWNrX2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfbG9jYWxod19zZXR1cCh2b2lkKQotewotfQotCi0vKgotICoJRG8gbm90IG5lZWQgdG8gbWFrZSByZWdpb24gdW5jYWNoZWQgb24gNTI3Mi4KLSAqLwotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfdW5jYWNoZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUyMHgpCi0KLS8qCi0gKglDb2RlIHNwZWNpZmljIHRvIENvbGRmaXJlIDUyMHgKLSAqLwotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcmVxdWVzdF9pbnRycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXA7Ci0JaW50IGI7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVzYyB7Ci0JCWNoYXIgKm5hbWU7Ci0JCXVuc2lnbmVkIHNob3J0IGlycTsKLQl9ICppZHAsIGlkW10gPSB7Ci0JCXsgImZlYyhUWEYpIiwgMjMgfSwKLQkJeyAiZmVjKFJYRikiLCAyNyB9LAotCQl7ICJmZWMoTUlJKSIsIDI5IH0sCi0JCXsgTlVMTCB9LAotCX07Ci0KLQlmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWIgPSA2NCArIDEzOwotCi0JLyogU2V0dXAgaW50ZXJydXB0IGhhbmRsZXJzLiAqLwotCWZvciAoaWRwID0gaWQ7IGlkcC0+bmFtZTsgaWRwKyspIHsKLQkJaWYgKHJlcXVlc3RfaXJxKGIraWRwLT5pcnEsIGZlY19lbmV0X2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwgaWRwLT5uYW1lLGRldikgIT0gMCkKLQkJCXByaW50aygiRkVDOiBDb3VsZCBub3QgYWxsb2NhdGUgJXMgSVJRKCVkKSFcbiIsIGlkcC0+bmFtZSwgYitpZHAtPmlycSk7Ci0JfQotCi0JLyogVW5tYXNrIGludGVycnVwdHMgYXQgQ29sZEZpcmUgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KLQl7Ci0JCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgICppY3JwOwotCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICAqaW1ycDsKLQotCQlpY3JwID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKE1DRl9JUFNCQVIgKyBNQ0ZJQ01fSU5UQzAgKwotCQkJTUNGSU5UQ19JQ1IwKTsKLQkJZm9yIChiID0gMzY7IChiIDwgNDkpOyBiKyspCi0JCQlpY3JwW2JdID0gMHgwNDsKLQkJaW1ycCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopIChNQ0ZfSVBTQkFSICsgTUNGSUNNX0lOVEMwICsKLQkJCU1DRklOVENfSU1SSCk7Ci0JCSppbXJwICY9IH4weDAwMDFGRkYwOwotCX0KLQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikoTUNGX0lQU0JBUiArIE1DRl9HUElPX1BBUl9GRUMpIHw9IDB4ZjA7Ci0JKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKE1DRl9JUFNCQVIgKyBNQ0ZfR1BJT19QQVJfRkVDSTJDKSB8PSAweDBmOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19zZXRfbWlpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXApCi17Ci0Jdm9sYXRpbGUgZmVjX3QgKmZlY3A7Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0JZmVjcC0+ZmVjX3JfY250cmwgPSBPUFRfRlJBTUVfU0laRSB8IDB4MDQ7Ci0JZmVjcC0+ZmVjX3hfY250cmwgPSAweDAwOwotCi0JLyoKLQkgKiBTZXQgTUlJIHNwZWVkIHRvIDIuNSBNSHoKLQkgKiBTZWUgNTI4MiBtYW51YWwgc2VjdGlvbiAxNy41LjQuNzogTVNDUgotCSAqLwotCWZlcC0+cGh5X3NwZWVkID0gKCgoKE1DRl9DTEsgLyAyKSAvICgyNTAwMDAwIC8gMTApKSArIDUpIC8gMTApICogMjsKLQlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQ7Ci0KLQlmZWNfcmVzdGFydChkZXYsIDApOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19nZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9sYXRpbGUgZmVjX3QgKmZlY3A7Ci0JdW5zaWduZWQgY2hhciAqaWFwLCB0bXBhZGRyW0VUSF9BTEVOXTsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQotCWlmIChGRUNfRkxBU0hNQUMpIHsKLQkJLyoKLQkJICogR2V0IE1BQyBhZGRyZXNzIGZyb20gRkxBU0guCi0JCSAqIElmIGl0IGlzIGFsbCAxJ3Mgb3IgMCdzLCB1c2UgdGhlIGRlZmF1bHQuCi0JCSAqLwotCQlpYXAgPSBGRUNfRkxBU0hNQUM7Ci0JCWlmICgoaWFwWzBdID09IDApICYmIChpYXBbMV0gPT0gMCkgJiYgKGlhcFsyXSA9PSAwKSAmJgotCQkgICAoaWFwWzNdID09IDApICYmIChpYXBbNF0gPT0gMCkgJiYgKGlhcFs1XSA9PSAwKSkKLQkJCWlhcCA9IGZlY19tYWNfZGVmYXVsdDsKLQkJaWYgKChpYXBbMF0gPT0gMHhmZikgJiYgKGlhcFsxXSA9PSAweGZmKSAmJiAoaWFwWzJdID09IDB4ZmYpICYmCi0JCSAgIChpYXBbM10gPT0gMHhmZikgJiYgKGlhcFs0XSA9PSAweGZmKSAmJiAoaWFwWzVdID09IDB4ZmYpKQotCQkJaWFwID0gZmVjX21hY19kZWZhdWx0OwotCX0gZWxzZSB7Ci0JCSooKHVuc2lnbmVkIGxvbmcgKikgJnRtcGFkZHJbMF0pID0gZmVjcC0+ZmVjX2FkZHJfbG93OwotCQkqKCh1bnNpZ25lZCBzaG9ydCAqKSAmdG1wYWRkcls0XSkgPSAoZmVjcC0+ZmVjX2FkZHJfaGlnaCA+PiAxNik7Ci0JCWlhcCA9ICZ0bXBhZGRyWzBdOwotCX0KLQotCW1lbWNweShkZXYtPmRldl9hZGRyLCBpYXAsIEVUSF9BTEVOKTsKLQotCS8qIEFkanVzdCBNQUMgaWYgdXNpbmcgZGVmYXVsdCBNQUMgYWRkcmVzcyAqLwotCWlmIChpYXAgPT0gZmVjX21hY19kZWZhdWx0KQotCQlkZXYtPmRldl9hZGRyW0VUSF9BTEVOLTFdID0gZmVjX21hY19kZWZhdWx0W0VUSF9BTEVOLTFdICsgZmVwLT5pbmRleDsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZW5hYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2Rpc2FibGVfcGh5X2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcGh5X2Fja19pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX2xvY2FsaHdfc2V0dXAodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfdW5jYWNoZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfTTUzMngpCi0vKgotICogQ29kZSBzcGVjaWZpYyBmb3IgTTUzMngKLSAqLwotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcmVxdWVzdF9pbnRycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXA7Ci0JaW50IGI7Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVzYyB7Ci0JCWNoYXIgKm5hbWU7Ci0JCXVuc2lnbmVkIHNob3J0IGlycTsKLQl9ICppZHAsIGlkW10gPSB7Ci0JICAgIHsgImZlYyhUWEYpIiwgMzYgfSwKLQkgICAgeyAiZmVjKFJYRikiLCA0MCB9LAotCSAgICB7ICJmZWMoTUlJKSIsIDQyIH0sCi0JICAgIHsgTlVMTCB9LAotCX07Ci0KLQlmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWIgPSAoZmVwLT5pbmRleCkgPyAxMjggOiA2NDsKLQotCS8qIFNldHVwIGludGVycnVwdCBoYW5kbGVycy4gKi8KLQlmb3IgKGlkcCA9IGlkOyBpZHAtPm5hbWU7IGlkcCsrKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShiK2lkcC0+aXJxLCBmZWNfZW5ldF9pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsIGlkcC0+bmFtZSxkZXYpICE9IDApCi0JCQlwcmludGsoIkZFQzogQ291bGQgbm90IGFsbG9jYXRlICVzIElSUSglZCkhXG4iLAotCQkJCWlkcC0+bmFtZSwgYitpZHAtPmlycSk7Ci0JfQotCi0JLyogVW5tYXNrIGludGVycnVwdHMgKi8KLQlNQ0ZfSU5UQzBfSUNSMzYgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjM3ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1IzOCA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSMzkgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQwID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0MSA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDIgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQzID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0NCA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDUgPSAweDI7Ci0JTUNGX0lOVEMwX0lDUjQ2ID0gMHgyOwotCU1DRl9JTlRDMF9JQ1I0NyA9IDB4MjsKLQlNQ0ZfSU5UQzBfSUNSNDggPSAweDI7Ci0KLQlNQ0ZfSU5UQzBfSU1SSCAmPSB+KAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLMzYgfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLMzcgfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLMzggfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLMzkgfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDAgfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDEgfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDIgfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDMgfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDQgfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDUgfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDYgfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDcgfAotCQlNQ0ZfSU5UQ19JTVJIX0lOVF9NQVNLNDggKTsKLQotCS8qIFNldCB1cCBncGlvIG91dHB1dHMgZm9yIE1JSSBsaW5lcyAqLwotCU1DRl9HUElPX1BBUl9GRUNJMkMgfD0gKDAgfAotCQlNQ0ZfR1BJT19QQVJfRkVDSTJDX1BBUl9NRENfRU1EQyB8Ci0JCU1DRl9HUElPX1BBUl9GRUNJMkNfUEFSX01ESU9fRU1ESU8pOwotCU1DRl9HUElPX1BBUl9GRUMgPSAoMCB8Ci0JCU1DRl9HUElPX1BBUl9GRUNfUEFSX0ZFQ183V19GRUMgfAotCQlNQ0ZfR1BJT19QQVJfRkVDX1BBUl9GRUNfTUlJX0ZFQyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3NldF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCkKLXsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQlmZWNwLT5mZWNfcl9jbnRybCA9IE9QVF9GUkFNRV9TSVpFIHwgMHgwNDsKLQlmZWNwLT5mZWNfeF9jbnRybCA9IDB4MDA7Ci0KLQkvKgotCSAqIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegotCSAqLwotCWZlcC0+cGh5X3NwZWVkID0gKE1DRl9DTEsgLyAzKSAvICgyNTAwMDAwICogMiApICogMjsKLQlmZWNwLT5mZWNfbWlpX3NwZWVkID0gZmVwLT5waHlfc3BlZWQ7Ci0KLQlmZWNfcmVzdGFydChkZXYsIDApOwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19nZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9sYXRpbGUgZmVjX3QgKmZlY3A7Ci0JdW5zaWduZWQgY2hhciAqaWFwLCB0bXBhZGRyW0VUSF9BTEVOXTsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQotCWlmIChGRUNfRkxBU0hNQUMpIHsKLQkJLyoKLQkJICogR2V0IE1BQyBhZGRyZXNzIGZyb20gRkxBU0guCi0JCSAqIElmIGl0IGlzIGFsbCAxJ3Mgb3IgMCdzLCB1c2UgdGhlIGRlZmF1bHQuCi0JCSAqLwotCQlpYXAgPSBGRUNfRkxBU0hNQUM7Ci0JCWlmICgoaWFwWzBdID09IDApICYmIChpYXBbMV0gPT0gMCkgJiYgKGlhcFsyXSA9PSAwKSAmJgotCQkgICAgKGlhcFszXSA9PSAwKSAmJiAoaWFwWzRdID09IDApICYmIChpYXBbNV0gPT0gMCkpCi0JCQlpYXAgPSBmZWNfbWFjX2RlZmF1bHQ7Ci0JCWlmICgoaWFwWzBdID09IDB4ZmYpICYmIChpYXBbMV0gPT0gMHhmZikgJiYgKGlhcFsyXSA9PSAweGZmKSAmJgotCQkgICAgKGlhcFszXSA9PSAweGZmKSAmJiAoaWFwWzRdID09IDB4ZmYpICYmIChpYXBbNV0gPT0gMHhmZikpCi0JCQlpYXAgPSBmZWNfbWFjX2RlZmF1bHQ7Ci0JfSBlbHNlIHsKLQkJKigodW5zaWduZWQgbG9uZyAqKSAmdG1wYWRkclswXSkgPSBmZWNwLT5mZWNfYWRkcl9sb3c7Ci0JCSooKHVuc2lnbmVkIHNob3J0ICopICZ0bXBhZGRyWzRdKSA9IChmZWNwLT5mZWNfYWRkcl9oaWdoID4+IDE2KTsKLQkJaWFwID0gJnRtcGFkZHJbMF07Ci0JfQotCi0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGlhcCwgRVRIX0FMRU4pOwotCi0JLyogQWRqdXN0IE1BQyBpZiB1c2luZyBkZWZhdWx0IE1BQyBhZGRyZXNzICovCi0JaWYgKGlhcCA9PSBmZWNfbWFjX2RlZmF1bHQpCi0JCWRldi0+ZGV2X2FkZHJbRVRIX0FMRU4tMV0gPSBmZWNfbWFjX2RlZmF1bHRbRVRIX0FMRU4tMV0gKyBmZXAtPmluZGV4OwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19lbmFibGVfcGh5X2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZGlzYWJsZV9waHlfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19waHlfYWNrX2ludHIodm9pZCkKLXsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfbG9jYWxod19zZXR1cCh2b2lkKQotewotfQotCi0vKgotICoJRG8gbm90IG5lZWQgdG8gbWFrZSByZWdpb24gdW5jYWNoZWQgb24gNTMyeC4KLSAqLwotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfdW5jYWNoZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotCi0jZWxzZQotCi0vKgotICoJQ29kZSBzcGVjaWZpYyB0byB0aGUgTVBDODYwVCBzZXR1cC4KLSAqLwotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfcmVxdWVzdF9pbnRycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwOwotCi0JaW1tYXAgPSAoaW1tYXBfdCAqKUlNQVBfQUREUjsJLyogcG9pbnRlciB0byBpbnRlcm5hbCByZWdpc3RlcnMgKi8KLQotCWlmIChyZXF1ZXN0Xzh4eGlycShGRUNfSU5URVJSVVBULCBmZWNfZW5ldF9pbnRlcnJ1cHQsIDAsICJmZWMiLCBkZXYpICE9IDApCi0JCXBhbmljKCJDb3VsZCBub3QgYWxsb2NhdGUgRkVDIElSUSEiKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZ2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWJkX3QgKmJkOwotCi0JYmQgPSAoYmRfdCAqKV9fcmVzOwotCW1lbWNweShkZXYtPmRldl9hZGRyLCBiZC0+YmlfZW5ldGFkZHIsIEVUSF9BTEVOKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfc2V0X21paShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwKQotewotCWV4dGVybiB1aW50IF9nZXRfSU1NUih2b2lkKTsKLQl2b2xhdGlsZSBpbW1hcF90ICppbW1hcDsKLQl2b2xhdGlsZSBmZWNfdCAqZmVjcDsKLQotCWZlY3AgPSBmZXAtPmh3cDsKLQlpbW1hcCA9IChpbW1hcF90ICopSU1BUF9BRERSOwkvKiBwb2ludGVyIHRvIGludGVybmFsIHJlZ2lzdGVycyAqLwotCi0JLyogQ29uZmlndXJlIGFsbCBvZiBwb3J0IEQgZm9yIE1JSS4KLQkqLwotCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BkcGFyID0gMHgxZmZmOwotCi0JLyogQml0cyBtb3ZlZCBmcm9tIFJldi4gRCBvbndhcmQuCi0JKi8KLQlpZiAoKF9nZXRfSU1NUigpICYgMHhmZmZmKSA8IDB4MDUwMSkKLQkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRkaXIgPSAweDFjNTg7CS8qIFByZSByZXYuIEQgKi8KLQllbHNlCi0JCWltbWFwLT5pbV9pb3BvcnQuaW9wX3BkZGlyID0gMHgxZmZmOwkvKiBSZXYuIEQgYW5kIGxhdGVyICovCi0KLQkvKiBTZXQgTUlJIHNwZWVkIHRvIDIuNSBNSHoKLQkqLwotCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZCA9Ci0JCSgoYmQtPmJpX2J1c2ZyZXEgKiAxMDAwMDAwKSAvIDI1MDAwMDApICYgMHg3ZTsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfZW5hYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci0Jdm9sYXRpbGUgZmVjX3QgKmZlY3A7Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0KLQkvKiBFbmFibGUgTUlJIGNvbW1hbmQgZmluaXNoZWQgaW50ZXJydXB0Ci0JKi8KLQlmZWNwLT5mZWNfaXZlYyA9IChGRUNfSU5URVJSVVBULzIpIDw8IDI5OwotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19kaXNhYmxlX3BoeV9pbnRyKHZvaWQpCi17Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5saW5lX18gZmVjX3BoeV9hY2tfaW50cih2b2lkKQotewotfQotCi1zdGF0aWMgdm9pZCBfX2lubGluZV9fIGZlY19sb2NhbGh3X3NldHVwKHZvaWQpCi17Ci0Jdm9sYXRpbGUgZmVjX3QgKmZlY3A7Ci0KLQlmZWNwID0gZmVwLT5od3A7Ci0JZmVjcC0+ZmVjX3JfaGFzaCA9IFBLVF9NQVhCVUZfU0laRTsKLQkvKiBFbmFibGUgYmlnIGVuZGlhbiBhbmQgZG9uJ3QgY2FyZSBhYm91dCBTRE1BIEZDLgotCSovCi0JZmVjcC0+ZmVjX2Z1bl9jb2RlID0gMHg3ODAwMDAwMDsKLX0KLQotc3RhdGljIHZvaWQgX19pbmxpbmVfXyBmZWNfdW5jYWNoZSh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcHRlX3QgKnB0ZTsKLQlwdGUgPSB2YV90b19wdGUobWVtX2FkZHIpOwotCXB0ZV92YWwoKnB0ZSkgfD0gX1BBR0VfTk9fQ0FDSEU7Ci0JZmx1c2hfdGxiX3BhZ2UoaW5pdF9tbS5tbWFwLCBtZW1fYWRkcik7Ci19Ci0KICNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0yMDU1LDcgKzE0NzksOSBAQAogCQlwcmludGsoIkZFQzogTm8gUEhZIGRldmljZSBmb3VuZC5cbiIpOwogCQkvKiBEaXNhYmxlIGV4dGVybmFsIE1JSSBpbnRlcmZhY2UgKi8KIAkJZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkID0gMDsKKyNpZmRlZiBIQVZFX21paV9saW5rX2ludGVycnVwdAogCQlmZWNfZGlzYWJsZV9waHlfaW50cigpOworI2VuZGlmCiAJfQogfQogCkBAIC0yMjM3LDEyICsxNjYzLDEyIEBACiAKIH0KIAotLyogSW5pdGlhbGl6ZSB0aGUgRkVDIEV0aGVybmV0IG9uIDg2MFQgKG9yIENvbGRGaXJlIDUyNzIpLgotICovCiAgLyoKICAgKiBYWFg6ICBXZSBuZWVkIHRvIGNsZWFuIHVwIG9uIGZhaWx1cmUgZXhpdHMgaGVyZS4KKyAgKgorICAqIGluZGV4IGlzIG9ubHkgdXNlZCBpbiBsZWdhY3kgY29kZQogICAqLwotaW50IF9faW5pdCBmZWNfZW5ldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgX19pbml0IGZlY19lbmV0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluZGV4KQogewogCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcJbWVtX2FkZHI7CkBAIC0yMjUwLDE1ICsxNjc2LDExIEBACiAJY2JkX3QJCSpjYmRfYmFzZTsKIAl2b2xhdGlsZSBmZWNfdAkqZmVjcDsKIAlpbnQgCQlpLCBqOwotCXN0YXRpYyBpbnQJaW5kZXggPSAwOwotCi0JLyogT25seSBhbGxvdyB1cyB0byBiZSBwcm9iZWQgb25jZS4gKi8KLQlpZiAoaW5kZXggPj0gRkVDX01BWF9QT1JUUykKLQkJcmV0dXJuIC1FTlhJTzsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVyIGRlc2NyaXB0b3JzLgogCSovCi0JbWVtX2FkZHIgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7CisJbWVtX2FkZHIgPSAodW5zaWduZWQgbG9uZylkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgUEFHRV9TSVpFLAorCQkJJmZlcC0+YmRfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAobWVtX2FkZHIgPT0gMCkgewogCQlwcmludGsoIkZFQzogYWxsb2NhdGUgZGVzY3JpcHRvciBtZW1vcnkgZmFpbGVkP1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjI2OSw3ICsxNjkxLDcgQEAKIAogCS8qIENyZWF0ZSBhbiBFdGhlcm5ldCBkZXZpY2UgaW5zdGFuY2UuCiAJKi8KLQlmZWNwID0gKHZvbGF0aWxlIGZlY190ICopIGZlY19od1tpbmRleF07CisJZmVjcCA9ICh2b2xhdGlsZSBmZWNfdCAqKWRldi0+YmFzZV9hZGRyOwogCiAJZmVwLT5pbmRleCA9IGluZGV4OwogCWZlcC0+aHdwID0gZmVjcDsKQEAgLTIyODAsMTggKzE3MDIsMjQgQEAKIAlmZWNwLT5mZWNfZWNudHJsID0gMTsKIAl1ZGVsYXkoMTApOwogCi0JLyogU2V0IHRoZSBFdGhlcm5ldCBhZGRyZXNzLiAgSWYgdXNpbmcgbXVsdGlwbGUgRW5ldHMgb24gdGhlIDh4eCwKLQkgKiB0aGlzIG5lZWRzIHNvbWUgd29yayB0byBnZXQgdW5pcXVlIGFkZHJlc3Nlcy4KLQkgKgotCSAqIFRoaXMgaXMgb3VyIGRlZmF1bHQgTUFDIGFkZHJlc3MgdW5sZXNzIHRoZSB1c2VyIGNoYW5nZXMKLQkgKiBpdCB2aWEgZXRoX21hY19hZGRyIChvdXIgZGV2LT5zZXRfbWFjX2FkZHIgaGFuZGxlcikuCi0JICovCisJLyogU2V0IHRoZSBFdGhlcm5ldCBhZGRyZXNzICovCisjaWZkZWYgQ09ORklHX001MjcyCiAJZmVjX2dldF9tYWMoZGV2KTsKKyNlbHNlCisJeworCQl1bnNpZ25lZCBsb25nIGw7CisJCWwgPSBmZWNwLT5mZWNfYWRkcl9sb3c7CisJCWRldi0+ZGV2X2FkZHJbMF0gPSAodW5zaWduZWQgY2hhcikoKGwgJiAweEZGMDAwMDAwKSA+PiAyNCk7CisJCWRldi0+ZGV2X2FkZHJbMV0gPSAodW5zaWduZWQgY2hhcikoKGwgJiAweDAwRkYwMDAwKSA+PiAxNik7CisJCWRldi0+ZGV2X2FkZHJbMl0gPSAodW5zaWduZWQgY2hhcikoKGwgJiAweDAwMDBGRjAwKSA+PiA4KTsKKwkJZGV2LT5kZXZfYWRkclszXSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4MDAwMDAwRkYpID4+IDApOworCQlsID0gZmVjcC0+ZmVjX2FkZHJfaGlnaDsKKwkJZGV2LT5kZXZfYWRkcls0XSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4RkYwMDAwMDApID4+IDI0KTsKKwkJZGV2LT5kZXZfYWRkcls1XSA9ICh1bnNpZ25lZCBjaGFyKSgobCAmIDB4MDBGRjAwMDApID4+IDE2KTsKKwl9CisjZW5kaWYKIAogCWNiZF9iYXNlID0gKGNiZF90ICopbWVtX2FkZHI7Ci0JLyogWFhYOiBtaXNzaW5nIGNoZWNrIGZvciBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KLQotCWZlY191bmNhY2hlKG1lbV9hZGRyKTsKIAogCS8qIFNldCByZWNlaXZlIGFuZCB0cmFuc21pdCBkZXNjcmlwdG9yIGJhc2UuCiAJKi8KQEAgLTIzMTMsOCArMTc0MSw2IEBACiAJCW1lbV9hZGRyID0gX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOwogCQkvKiBYWFg6IG1pc3NpbmcgY2hlY2sgZm9yIGFsbG9jYXRpb24gZmFpbHVyZSAqLwogCi0JCWZlY191bmNhY2hlKG1lbV9hZGRyKTsKLQogCQkvKiBJbml0aWFsaXplIHRoZSBCRCBmb3IgZXZlcnkgZnJhZ21lbnQgaW4gdGhlIHBhZ2UuCiAJCSovCiAJCWZvciAoaj0wOyBqPEZFQ19FTkVUX1JYX0ZSUFBHOyBqKyspIHsKQEAgLTIzNTcsMTMgKzE3ODMsMTMgQEAKIAogCS8qIFNldCByZWNlaXZlIGFuZCB0cmFuc21pdCBkZXNjcmlwdG9yIGJhc2UuCiAJKi8KLQlmZWNwLT5mZWNfcl9kZXNfc3RhcnQgPSBfX3BhKCh1aW50KShmZXAtPnJ4X2JkX2Jhc2UpKTsKLQlmZWNwLT5mZWNfeF9kZXNfc3RhcnQgPSBfX3BhKCh1aW50KShmZXAtPnR4X2JkX2Jhc2UpKTsKKwlmZWNwLT5mZWNfcl9kZXNfc3RhcnQgPSBmZXAtPmJkX2RtYTsKKwlmZWNwLT5mZWNfeF9kZXNfc3RhcnQgPSAodW5zaWduZWQgbG9uZylmZXAtPmJkX2RtYSArIHNpemVvZihjYmRfdCkKKwkJCQkqIFJYX1JJTkdfU0laRTsKIAotCS8qIEluc3RhbGwgb3VyIGludGVycnVwdCBoYW5kbGVycy4gVGhpcyB2YXJpZXMgZGVwZW5kaW5nIG9uCi0JICogdGhlIGFyY2hpdGVjdHVyZS4KLQkqLwotCWZlY19yZXF1ZXN0X2ludHJzKGRldik7CisjaWZkZWYgSEFWRV9taWlfbGlua19pbnRlcnJ1cHQKKwlmZWNfcmVxdWVzdF9taWlfaW50cihkZXYpOworI2VuZGlmCiAKIAlmZWNwLT5mZWNfZ3JwX2hhc2hfdGFibGVfaGlnaCA9IDA7CiAJZmVjcC0+ZmVjX2dycF9oYXNoX3RhYmxlX2xvdyA9IDA7CkBAIC0yMzc1LDggKzE4MDEsNiBAQAogCWZlY3AtPmZlY19oYXNoX3RhYmxlX2xvdyA9IDA7CiAjZW5kaWYKIAotCWRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpZmVjcDsKLQogCS8qIFRoZSBGRUMgRXRoZXJuZXQgc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KIAlkZXYtPm9wZW4gPSBmZWNfZW5ldF9vcGVuOwogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZmVjX2VuZXRfc3RhcnRfeG1pdDsKQEAgLTIzOTAsNyArMTgxNCwxNiBAQAogCW1paV9mcmVlID0gbWlpX2NtZHM7CiAKIAkvKiBzZXR1cCBNSUkgaW50ZXJmYWNlICovCi0JZmVjX3NldF9taWkoZGV2LCBmZXApOworCWZlY3AtPmZlY19yX2NudHJsID0gT1BUX0ZSQU1FX1NJWkUgfCAweDA0OworCWZlY3AtPmZlY194X2NudHJsID0gMHgwMDsKKworCS8qCisJICogU2V0IE1JSSBzcGVlZCB0byAyLjUgTUh6CisJICovCisJZmVwLT5waHlfc3BlZWQgPSAoKCgoY2xrX2dldF9yYXRlKGZlcC0+Y2xrKSAvIDIgKyA0OTk5OTk5KQorCQkJCQkvIDI1MDAwMDApIC8gMikgJiAweDNGKSA8PCAxOworCWZlY3AtPmZlY19taWlfc3BlZWQgPSBmZXAtPnBoeV9zcGVlZDsKKwlmZWNfcmVzdGFydChkZXYsIDApOwogCiAJLyogQ2xlYXIgYW5kIGVuYWJsZSBpbnRlcnJ1cHRzICovCiAJZmVjcC0+ZmVjX2lldmVudCA9IDB4ZmZjMDAwMDA7CkBAIC0yNDAzLDcgKzE4MzYsNiBAQAogCWZlcC0+cGh5X2FkZHIgPSAwOwogCW1paV9xdWV1ZShkZXYsIG1rX21paV9yZWFkKE1JSV9SRUdfUEhZSVIxKSwgbWlpX2Rpc2NvdmVyX3BoeSk7CiAKLQlpbmRleCsrOwogCXJldHVybiAwOwogfQogCkBAIC0yNDMwLDcgKzE4NjIsNiBAQAogCS8qIENsZWFyIGFueSBvdXRzdGFuZGluZyBpbnRlcnJ1cHQuCiAJKi8KIAlmZWNwLT5mZWNfaWV2ZW50ID0gMHhmZmMwMDAwMDsKLQlmZWNfZW5hYmxlX3BoeV9pbnRyKCk7CiAKIAkvKiBTZXQgc3RhdGlvbiBhZGRyZXNzLgogCSovCkBAIC0yNDQ1LDEyICsxODc2LDExIEBACiAJKi8KIAlmZWNwLT5mZWNfcl9idWZmX3NpemUgPSBQS1RfTUFYQkxSX1NJWkU7CiAKLQlmZWNfbG9jYWxod19zZXR1cCgpOwotCiAJLyogU2V0IHJlY2VpdmUgYW5kIHRyYW5zbWl0IGRlc2NyaXB0b3IgYmFzZS4KIAkqLwotCWZlY3AtPmZlY19yX2Rlc19zdGFydCA9IF9fcGEoKHVpbnQpKGZlcC0+cnhfYmRfYmFzZSkpOwotCWZlY3AtPmZlY194X2Rlc19zdGFydCA9IF9fcGEoKHVpbnQpKGZlcC0+dHhfYmRfYmFzZSkpOworCWZlY3AtPmZlY19yX2Rlc19zdGFydCA9IGZlcC0+YmRfZG1hOworCWZlY3AtPmZlY194X2Rlc19zdGFydCA9ICh1bnNpZ25lZCBsb25nKWZlcC0+YmRfZG1hICsgc2l6ZW9mKGNiZF90KQorCQkJCSogUlhfUklOR19TSVpFOwogCiAJZmVwLT5kaXJ0eV90eCA9IGZlcC0+Y3VyX3R4ID0gZmVwLT50eF9iZF9iYXNlOwogCWZlcC0+Y3VyX3J4ID0gZmVwLT5yeF9iZF9iYXNlOwpAQCAtMjU1MiwzOSArMTk4MiwxNzEgQEAKIAkvKiBDbGVhciBvdXRzdGFuZGluZyBNSUkgY29tbWFuZCBpbnRlcnJ1cHRzLgogCSovCiAJZmVjcC0+ZmVjX2lldmVudCA9IEZFQ19FTkVUX01JSTsKLQlmZWNfZW5hYmxlX3BoeV9pbnRyKCk7CiAKIAlmZWNwLT5mZWNfaW1hc2sgPSBGRUNfRU5FVF9NSUk7CiAJZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBmZWNfZW5ldF9tb2R1bGVfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2RldmluaXQKK2ZlY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JaW50IGksIGVycjsKKwlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCWludCBpLCBpcnEsIHJldCA9IDA7CisJc3RydWN0IHJlc291cmNlICpyOwogCi0JcHJpbnRrKCJGRUMgRU5FVCBWZXJzaW9uIDAuMlxuIik7CisJciA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyKQorCQlyZXR1cm4gLUVOWElPOwogCi0JZm9yIChpID0gMDsgKGkgPCBGRUNfTUFYX1BPUlRTKTsgaSsrKSB7Ci0JCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSkpOwotCQlpZiAoIWRldikKLQkJCXJldHVybiAtRU5PTUVNOwotCQllcnIgPSBmZWNfZW5ldF9pbml0KGRldik7Ci0JCWlmIChlcnIpIHsKLQkJCWZyZWVfbmV0ZGV2KGRldik7Ci0JCQljb250aW51ZTsKKwlyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpLCBwZGV2LT5uYW1lKTsKKwlpZiAoIXIpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBJbml0IG5ldHdvcmsgZGV2aWNlICovCisJbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSkpOworCWlmICghbmRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKKworCS8qIHNldHVwIGJvYXJkIGluZm8gc3RydWN0dXJlICovCisJZmVwID0gbmV0ZGV2X3ByaXYobmRldik7CisJbWVtc2V0KGZlcCwgMCwgc2l6ZW9mKCpmZXApKTsKKworCW5kZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworCisJaWYgKCFuZGV2LT5iYXNlX2FkZHIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsZWRfaW9yZW1hcDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKKworCS8qIFRoaXMgZGV2aWNlIGhhcyB1cCB0byB0aHJlZSBpcnFzIG9uIHNvbWUgcGxhdGZvcm1zICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkpOworCQlpZiAoaSAmJiBpcnEgPCAwKQorCQkJYnJlYWs7CisJCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgZmVjX2VuZXRfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCBwZGV2LT5uYW1lLCBuZGV2KTsKKwkJaWYgKHJldCkgeworCQkJd2hpbGUgKGkgPj0gMCkgeworCQkJCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSk7CisJCQkJZnJlZV9pcnEoaXJxLCBuZGV2KTsKKwkJCQlpLS07CisJCQl9CisJCQlnb3RvIGZhaWxlZF9pcnE7CiAJCX0KLQkJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpICE9IDApIHsKLQkJCS8qIFhYWDogbWlzc2luZyBjbGVhbnVwIGhlcmUgKi8KLQkJCWZyZWVfbmV0ZGV2KGRldik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQorCX0KIAotCQlwcmludGsoIiVzOiBldGhlcm5ldCAlcE1cbiIsIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CisJZmVwLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmZWNfY2xrIik7CisJaWYgKElTX0VSUihmZXAtPmNsaykpIHsKKwkJcmV0ID0gUFRSX0VSUihmZXAtPmNsayk7CisJCWdvdG8gZmFpbGVkX2NsazsKKwl9CisJY2xrX2VuYWJsZShmZXAtPmNsayk7CisKKwlyZXQgPSBmZWNfZW5ldF9pbml0KG5kZXYsIDApOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkX2luaXQ7CisKKwlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWRfcmVnaXN0ZXI7CisKKwlyZXR1cm4gMDsKKworZmFpbGVkX3JlZ2lzdGVyOgorZmFpbGVkX2luaXQ6CisJY2xrX2Rpc2FibGUoZmVwLT5jbGspOworCWNsa19wdXQoZmVwLT5jbGspOworZmFpbGVkX2NsazoKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSk7CisJCWlmIChpcnEgPiAwKQorCQkJZnJlZV9pcnEoaXJxLCBuZGV2KTsKKwl9CitmYWlsZWRfaXJxOgorCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKW5kZXYtPmJhc2VfYWRkcik7CitmYWlsZWRfaW9yZW1hcDoKKwlmcmVlX25ldGRldihuZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0CitmZWNfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KG5kZXYpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlmZWNfc3RvcChuZGV2KTsKKwljbGtfZGlzYWJsZShmZXAtPmNsayk7CisJY2xrX3B1dChmZXAtPmNsayk7CisJaW91bm1hcCgodm9pZCBfX2lvbWVtICopbmRldi0+YmFzZV9hZGRyKTsKKwl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwlmcmVlX25ldGRldihuZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZmVjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXA7CisKKwlpZiAobmRldikgeworCQlmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKKwkJCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CisJCQlmZWNfc3RvcChuZGV2KTsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorZmVjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKG5kZXYpIHsKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKKwkJCWZlY19lbmV0X2luaXQobmRldiwgMCk7CisJCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmZWNfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lICAgID0gImZlYyIsCisJCS5vd25lcgkgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSAgID0gZmVjX3Byb2JlLAorCS5yZW1vdmUgID0gX19kZXZleGl0X3AoZmVjX2Rydl9yZW1vdmUpLAorCS5zdXNwZW5kID0gZmVjX3N1c3BlbmQsCisJLnJlc3VtZSAgPSBmZWNfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQKK2ZlY19lbmV0X21vZHVsZV9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiRkVDIEV0aGVybmV0IERyaXZlclxuIik7CisKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZmZWNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0CitmZWNfZW5ldF9jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmZlY19kcml2ZXIpOworfQorCittb2R1bGVfZXhpdChmZWNfZW5ldF9jbGVhbnVwKTsKIG1vZHVsZV9pbml0KGZlY19lbmV0X21vZHVsZV9pbml0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjLmggYi9kcml2ZXJzL25ldC9mZWMuaAppbmRleCAyOTI3MTlkLi43NmM2NGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWMuaAorKysgYi9kcml2ZXJzL25ldC9mZWMuaApAQCAtMTQsNyArMTQsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZiBkZWZpbmVkKENPTkZJR19NNTIzeCkgfHwgZGVmaW5lZChDT05GSUdfTTUyN3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjh4KSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfTTUyMHgpIHx8IGRlZmluZWQoQ09ORklHX001MzJ4KQorICAgIGRlZmluZWQoQ09ORklHX001MjB4KSB8fCBkZWZpbmVkKENPTkZJR19NNTMyeCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9NWEMpCiAvKgogICoJSnVzdCBmaWd1cmVzLCBNb3Rvcm9sYSB3b3VsZCBoYXZlIHRvIGNoYW5nZSB0aGUgb2Zmc2V0cyBmb3IKICAqCXJlZ2lzdGVycyBpbiB0aGUgc2FtZSBwZXJpcGhlcmFsIGRldmljZSBvbiBkaWZmZXJlbnQgbW9kZWxzCkBAIC0xMDMsMTIgKzEwMywxOSBAQAogLyoKICAqCURlZmluZSB0aGUgYnVmZmVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgogICovCisjaWZkZWYgQ09ORklHX0FSQ0hfTVhDCit0eXBlZGVmIHN0cnVjdCBidWZkZXNjIHsKKwl1bnNpZ25lZCBzaG9ydCBjYmRfZGF0bGVuOwkvKiBEYXRhIGxlbmd0aCAqLworCXVuc2lnbmVkIHNob3J0IGNiZF9zYzsJLyogQ29udHJvbCBhbmQgc3RhdHVzIGluZm8gKi8KKwl1bnNpZ25lZCBsb25nIGNiZF9idWZhZGRyOwkvKiBCdWZmZXIgYWRkcmVzcyAqLworfSBjYmRfdDsKKyNlbHNlCiB0eXBlZGVmIHN0cnVjdCBidWZkZXNjIHsKIAl1bnNpZ25lZCBzaG9ydAljYmRfc2M7CQkJLyogQ29udHJvbCBhbmQgc3RhdHVzIGluZm8gKi8KIAl1bnNpZ25lZCBzaG9ydAljYmRfZGF0bGVuOwkJLyogRGF0YSBsZW5ndGggKi8KIAl1bnNpZ25lZCBsb25nCWNiZF9idWZhZGRyOwkJLyogQnVmZmVyIGFkZHJlc3MgKi8KIH0gY2JkX3Q7Ci0KKyNlbmRpZgogCiAvKgogICoJVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBjb3VydGVzeSBvZiBjb21tcHJvYy5oLCB3aGljaCB3aGVyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwppbmRleCBiODI1MWU4Li5hODU4YzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYworKysgYi9kcml2ZXJzL25ldC9mb3JjZWRldGguYwpAQCAtMzksNyArMzksNyBAQAogICogREVWX05FRURfVElNRVJJUlEgd2lsbCBub3QgaGFybSB5b3Ugb24gc2FuZSBoYXJkd2FyZSwgb25seSBnZW5lcmF0aW5nIGEgZmV3CiAgKiBzdXBlcmZsdW91cyB0aW1lciBpbnRlcnJ1cHRzIGZyb20gdGhlIG5pYy4KICAqLwotI2RlZmluZSBGT1JDRURFVEhfVkVSU0lPTgkJIjAuNjIiCisjZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC42NCIKICNkZWZpbmUgRFJWX05BTUUJCQkiZm9yY2VkZXRoIgogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC04Nyw4ICs4Nyw4IEBACiAjZGVmaW5lIERFVl9IQVNfTVNJX1ggICAgICAgICAgICAgIDB4MDAwMDgwICAvKiBkZXZpY2Ugc3VwcG9ydHMgTVNJLVggKi8KICNkZWZpbmUgREVWX0hBU19QT1dFUl9DTlRSTCAgICAgICAgMHgwMDAxMDAgIC8qIGRldmljZSBzdXBwb3J0cyBwb3dlciBzYXZpbmdzICovCiAjZGVmaW5lIERFVl9IQVNfU1RBVElTVElDU19WMSAgICAgIDB4MDAwMjAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgaHcgc3RhdGlzdGljcyB2ZXJzaW9uIDEgKi8KLSNkZWZpbmUgREVWX0hBU19TVEFUSVNUSUNTX1YyICAgICAgMHgwMDA0MDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMiAqLwotI2RlZmluZSBERVZfSEFTX1NUQVRJU1RJQ1NfVjMgICAgICAweDAwMDgwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGh3IHN0YXRpc3RpY3MgdmVyc2lvbiAzICovCisjZGVmaW5lIERFVl9IQVNfU1RBVElTVElDU19WMiAgICAgIDB4MDAwNjAwICAvKiBkZXZpY2Ugc3VwcG9ydHMgaHcgc3RhdGlzdGljcyB2ZXJzaW9uIDIgKi8KKyNkZWZpbmUgREVWX0hBU19TVEFUSVNUSUNTX1YzICAgICAgMHgwMDBlMDAgIC8qIGRldmljZSBzdXBwb3J0cyBodyBzdGF0aXN0aWNzIHZlcnNpb24gMyAqLwogI2RlZmluZSBERVZfSEFTX1RFU1RfRVhURU5ERUQgICAgICAweDAwMTAwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGV4dGVuZGVkIGRpYWdub3N0aWMgdGVzdCAqLwogI2RlZmluZSBERVZfSEFTX01HTVRfVU5JVCAgICAgICAgICAweDAwMjAwMCAgLyogZGV2aWNlIHN1cHBvcnRzIG1hbmFnZW1lbnQgdW5pdCAqLwogI2RlZmluZSBERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiAgICAweDAwNDAwMCAgLyogZGV2aWNlIHN1cHBvcnRzIGNvcnJlY3QgbWFjIGFkZHJlc3Mgb3JkZXIgKi8KQEAgLTEwMiw3ICsxMDIsNyBAQAogZW51bSB7CiAJTnZSZWdJcnFTdGF0dXMgPSAweDAwMCwKICNkZWZpbmUgTlZSRUdfSVJRU1RBVF9NSUlFVkVOVAkweDA0MAotI2RlZmluZSBOVlJFR19JUlFTVEFUX01BU0sJCTB4ODFmZgorI2RlZmluZSBOVlJFR19JUlFTVEFUX01BU0sJCTB4ODNmZgogCU52UmVnSXJxTWFzayA9IDB4MDA0LAogI2RlZmluZSBOVlJFR19JUlFfUlhfRVJST1IJCTB4MDAwMQogI2RlZmluZSBOVlJFR19JUlFfUlgJCQkweDAwMDIKQEAgLTExMywxNyArMTEzLDEzIEBACiAjZGVmaW5lIE5WUkVHX0lSUV9MSU5LCQkJMHgwMDQwCiAjZGVmaW5lIE5WUkVHX0lSUV9SWF9GT1JDRUQJCTB4MDA4MAogI2RlZmluZSBOVlJFR19JUlFfVFhfRk9SQ0VECQkweDAxMDAKLSNkZWZpbmUgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IJCTB4ODAwMAorI2RlZmluZSBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUgkJMHg4MjAwCiAjZGVmaW5lIE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVAkweDAwZGYKICNkZWZpbmUgTlZSRUdfSVJRTUFTS19DUFUJCTB4MDA2MAogI2RlZmluZSBOVlJFR19JUlFfVFhfQUxMCQkoTlZSRUdfSVJRX1RYX0VSUnxOVlJFR19JUlFfVFhfT0t8TlZSRUdfSVJRX1RYX0ZPUkNFRCkKICNkZWZpbmUgTlZSRUdfSVJRX1JYX0FMTAkJKE5WUkVHX0lSUV9SWF9FUlJPUnxOVlJFR19JUlFfUlh8TlZSRUdfSVJRX1JYX05PQlVGfE5WUkVHX0lSUV9SWF9GT1JDRUQpCiAjZGVmaW5lIE5WUkVHX0lSUV9PVEhFUgkJCShOVlJFR19JUlFfVElNRVJ8TlZSRUdfSVJRX0xJTkt8TlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpCiAKLSNkZWZpbmUgTlZSRUdfSVJRX1VOS05PV04JKH4oTlZSRUdfSVJRX1JYX0VSUk9SfE5WUkVHX0lSUV9SWHxOVlJFR19JUlFfUlhfTk9CVUZ8TlZSRUdfSVJRX1RYX0VSUnwgXAotCQkJCQlOVlJFR19JUlFfVFhfT0t8TlZSRUdfSVJRX1RJTUVSfE5WUkVHX0lSUV9MSU5LfE5WUkVHX0lSUV9SWF9GT1JDRUR8IFwKLQkJCQkJTlZSRUdfSVJRX1RYX0ZPUkNFRHxOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpCi0KIAlOdlJlZ1Vua25vd25TZXR1cFJlZzYgPSAweDAwOCwKICNkZWZpbmUgTlZSRUdfVU5LU0VUVVA2X1ZBTAkJMwogCkBAIC0xMzIsNyArMTI4LDcgQEAKICAqIE5WUkVHX1BPTExfREVGQVVMVD05NyB3b3VsZCByZXN1bHQgaW4gYW4gaW50ZXJ2YWwgbGVuZ3RoIG9mIDEgbXMKICAqLwogCU52UmVnUG9sbGluZ0ludGVydmFsID0gMHgwMGMsCi0jZGVmaW5lIE5WUkVHX1BPTExfREVGQVVMVF9USFJPVUdIUFVUCTk3MCAvKiBiYWNrdXAgdHggY2xlYW51cCBpZiBsb29wIG1heCByZWFjaGVkICovCisjZGVmaW5lIE5WUkVHX1BPTExfREVGQVVMVF9USFJPVUdIUFVUCTY1NTM1IC8qIGJhY2t1cCB0eCBjbGVhbnVwIGlmIGxvb3AgbWF4IHJlYWNoZWQgKi8KICNkZWZpbmUgTlZSRUdfUE9MTF9ERUZBVUxUX0NQVQkxMwogCU52UmVnTVNJTWFwMCA9IDB4MDIwLAogCU52UmVnTVNJTWFwMSA9IDB4MDI0LApAQCAtMTU3LDYgKzE1Myw5IEBACiAjZGVmaW5lIE5WUkVHX1hNSVRDVExfSE9TVF9TRU1BX0FDUQkweDAwMDBmMDAwCiAjZGVmaW5lIE5WUkVHX1hNSVRDVExfSE9TVF9MT0FERUQJMHgwMDAwNDAwMAogI2RlZmluZSBOVlJFR19YTUlUQ1RMX1RYX1BBVEhfRU4JMHgwMTAwMDAwMAorI2RlZmluZSBOVlJFR19YTUlUQ1RMX0RBVEFfU1RBUlQJMHgwMDEwMDAwMAorI2RlZmluZSBOVlJFR19YTUlUQ1RMX0RBVEFfUkVBRFkJMHgwMDAxMDAwMAorI2RlZmluZSBOVlJFR19YTUlUQ1RMX0RBVEFfRVJST1IJMHgwMDAyMDAwMAogCU52UmVnVHJhbnNtaXR0ZXJTdGF0dXMgPSAweDA4OCwKICNkZWZpbmUgTlZSRUdfWE1JVFNUQVRfQlVTWQkweDAxCiAKQEAgLTI4OSw4ICsyODgsMTAgQEAKICNkZWZpbmUgTlZSRUdfV0FLRVVQRkxBR1NfQUNDRVBUX0xJTktDSEFOR0UJMHgwNAogI2RlZmluZSBOVlJFR19XQUtFVVBGTEFHU19FTkFCTEUJMHgxMTExCiAKLQlOdlJlZ1BhdHRlcm5DUkMgPSAweDIwNCwKLQlOdlJlZ1BhdHRlcm5NYXNrID0gMHgyMDgsCisJTnZSZWdNZ210VW5pdEdldFZlcnNpb24gPSAweDIwNCwKKyNkZWZpbmUgTlZSRUdfTUdNVFVOSVRHRVRWRVJTSU9OICAgICAJMHgwMQorCU52UmVnTWdtdFVuaXRWZXJzaW9uID0gMHgyMDgsCisjZGVmaW5lIE5WUkVHX01HTVRVTklUVkVSU0lPTgkJMHgwOAogCU52UmVnUG93ZXJDYXAgPSAweDI2OCwKICNkZWZpbmUgTlZSRUdfUE9XRVJDQVBfRDNTVVBQCSgxPDwzMCkKICNkZWZpbmUgTlZSRUdfUE9XRVJDQVBfRDJTVVBQCSgxPDwyNikKQEAgLTMwMyw2ICszMDQsOCBAQAogI2RlZmluZSBOVlJFR19QT1dFUlNUQVRFX0QxCQkweDAwMDEKICNkZWZpbmUgTlZSRUdfUE9XRVJTVEFURV9EMgkJMHgwMDAyCiAjZGVmaW5lIE5WUkVHX1BPV0VSU1RBVEVfRDMJCTB4MDAwMworCU52UmVnTWdtdFVuaXRDb250cm9sID0gMHgyNzgsCisjZGVmaW5lIE5WUkVHX01HTVRVTklUQ09OVFJPTF9JTlVTRQkweDIwMDAwCiAJTnZSZWdUeENudCA9IDB4MjgwLAogCU52UmVnVHhaZXJvUmVYbXQgPSAweDI4NCwKIAlOdlJlZ1R4T25lUmVYbXQgPSAweDI4OCwKQEAgLTQ2MCw3ICs0NjMsNyBAQAogLyogR2VuZXJhbCBkcml2ZXIgZGVmYXVsdHMgKi8KICNkZWZpbmUgTlZfV0FUQ0hET0dfVElNRU8JKDUqSFopCiAKLSNkZWZpbmUgUlhfUklOR19ERUZBVUxUCQkxMjgKKyNkZWZpbmUgUlhfUklOR19ERUZBVUxUCQk1MTIKICNkZWZpbmUgVFhfUklOR19ERUZBVUxUCQkyNTYKICNkZWZpbmUgUlhfUklOR19NSU4JCTEyOAogI2RlZmluZSBUWF9SSU5HX01JTgkJNjQKQEAgLTU4MiwxMSArNTg1LDE3IEBACiAjZGVmaW5lIE5WX01TSV9YX1ZFQ1RPUl9UWCAgICAweDEKICNkZWZpbmUgTlZfTVNJX1hfVkVDVE9SX09USEVSIDB4MgogCisjZGVmaW5lIE5WX01TSV9QUklWX09GRlNFVCAweDY4CisjZGVmaW5lIE5WX01TSV9QUklWX1ZBTFVFICAweGZmZmZmZmZmCisKICNkZWZpbmUgTlZfUkVTVEFSVF9UWCAgICAgICAgIDB4MQogI2RlZmluZSBOVl9SRVNUQVJUX1JYICAgICAgICAgMHgyCiAKICNkZWZpbmUgTlZfVFhfTElNSVRfQ09VTlQgICAgIDE2CiAKKyNkZWZpbmUgTlZfRFlOQU1JQ19USFJFU0hPTEQgICAgICAgIDQKKyNkZWZpbmUgTlZfRFlOQU1JQ19NQVhfUVVJRVRfQ09VTlQgIDIwNDgKKwogLyogc3RhdGlzdGljcyAqLwogc3RydWN0IG52X2V0aHRvb2xfc3RyIHsKIAljaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTsKQEAgLTc0NCwxMSArNzUzLDEzIEBACiAJdTE2IGdpZ2FiaXQ7CiAJaW50IGludHJfdGVzdDsKIAlpbnQgcmVjb3Zlcl9lcnJvcjsKKwlpbnQgcXVpZXRfY291bnQ7CiAKIAkvKiBHZW5lcmFsIGRhdGE6IFJPIGZpZWxkcyAqLwogCWRtYV9hZGRyX3QgcmluZ19hZGRyOwogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2OwogCXUzMiBvcmlnX21hY1syXTsKKwl1MzIgZXZlbnRzOwogCXUzMiBpcnFtYXNrOwogCXUzMiBkZXNjX3ZlcjsKIAl1MzIgdHhyeGN0bF9iaXRzOwpAQCAtNzU4LDYgKzc2OSw4IEBACiAJdTMyIHJlZ2lzdGVyX3NpemU7CiAJaW50IHJ4X2NzdW07CiAJdTMyIG1hY19pbl91c2U7CisJaW50IG1nbXRfdmVyc2lvbjsKKwlpbnQgbWdtdF9zZW1hOwogCiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCkBAIC04MTIsMTMgKzgyNSwxOCBAQAogCiAJLyogcG93ZXIgc2F2ZWQgc3RhdGUgKi8KIAl1MzIgc2F2ZWRfY29uZmlnX3NwYWNlW05WX1BDSV9SRUdTWl9NQVgvNF07CisKKwkvKiBmb3IgZGlmZmVyZW50IG1zaS14IGlycSB0eXBlICovCisJY2hhciBuYW1lX3J4W0lGTkFNU0laICsgM107ICAgICAgIC8qIC1yeCAgICAqLworCWNoYXIgbmFtZV90eFtJRk5BTVNJWiArIDNdOyAgICAgICAvKiAtdHggICAgKi8KKwljaGFyIG5hbWVfb3RoZXJbSUZOQU1TSVogKyA2XTsgICAgLyogLW90aGVyICovCiB9OwogCiAvKgogICogTWF4aW11bSBudW1iZXIgb2YgbG9vcHMgdW50aWwgd2UgYXNzdW1lIHRoYXQgYSBiaXQgaW4gdGhlIGlycSBtYXNrCiAgKiBpcyBzdHVjay4gT3ZlcnJpZGFibGUgd2l0aCBtb2R1bGUgcGFyYW0uCiAgKi8KLXN0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gMTU7CitzdGF0aWMgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDQ7CiAKIC8qCiAgKiBPcHRpbWl6YXRpb24gY2FuIGJlIGVpdGhlciB0aHJvdXB1dCBtb2RlIG9yIGNwdSBtb2RlCkBAIC04MjgsOSArODQ2LDEwIEBACiAgKi8KIGVudW0gewogCU5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQsCi0JTlZfT1BUSU1JWkFUSU9OX01PREVfQ1BVCisJTlZfT1BUSU1JWkFUSU9OX01PREVfQ1BVLAorCU5WX09QVElNSVpBVElPTl9NT0RFX0RZTkFNSUMKIH07Ci1zdGF0aWMgaW50IG9wdGltaXphdGlvbl9tb2RlID0gTlZfT1BUSU1JWkFUSU9OX01PREVfVEhST1VHSFBVVDsKK3N0YXRpYyBpbnQgb3B0aW1pemF0aW9uX21vZGUgPSBOVl9PUFRJTUlaQVRJT05fTU9ERV9EWU5BTUlDOwogCiAvKgogICogUG9sbCBpbnRlcnZhbCBmb3IgdGltZXIgaXJxCkBAIC04NTcsNyArODc2LDcgQEAKIAlOVl9NU0lYX0lOVF9ESVNBQkxFRCwKIAlOVl9NU0lYX0lOVF9FTkFCTEVECiB9Owotc3RhdGljIGludCBtc2l4ID0gTlZfTVNJWF9JTlRfRElTQUJMRUQ7CitzdGF0aWMgaW50IG1zaXggPSBOVl9NU0lYX0lOVF9FTkFCTEVEOwogCiAvKgogICogRE1BIDY0Yml0CkBAIC05MjMsNyArOTQyLDcgQEAKIAkJZGVsYXltYXggLT0gZGVsYXk7CiAJCWlmIChkZWxheW1heCA8IDApIHsKIAkJCWlmIChtc2cpCi0JCQkJcHJpbnRrKG1zZyk7CisJCQkJcHJpbnRrKCIlcyIsIG1zZyk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0gd2hpbGUgKChyZWFkbChiYXNlICsgb2Zmc2V0KSAmIG1hc2spICE9IHRhcmdldCk7CkBAIC0xMDUyLDYgKzEwNzEsMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG52X25hcGlfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisjaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCisJc3RydWN0IGZlX3ByaXYgKm5wID0gZ2V0X252cHJpdihkZXYpOworCisJbmFwaV9lbmFibGUoJm5wLT5uYXBpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBudl9uYXBpX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKyNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CisKKwluYXBpX2Rpc2FibGUoJm5wLT5uYXBpKTsKKyNlbmRpZgorfQorCiAjZGVmaW5lIE1JSV9SRUFECSgtMSkKIC8qIG1paV9ydzogcmVhZC93cml0ZSBhIHJlZ2lzdGVyIG9uIHRoZSBQSFkuCiAgKgpAQCAtMTc2MCw3ICsxNzk3LDcgQEAKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogSnVzdCByZXNjaGVkdWxlIE5BUEkgcnggcHJvY2Vzc2luZyAqLwotCW5ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogfQogI2Vsc2UKIHN0YXRpYyB2b2lkIG52X2RvX3J4X3JlZmlsbCh1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC0yMzY1LDE0ICsyNDAyLDE2IEBACiAgKgogICogQ2FsbGVyIG11c3Qgb3duIG5wLT5sb2NrLgogICovCi1zdGF0aWMgdm9pZCBudl90eF9kb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG52X3R4X2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxpbWl0KQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIGZsYWdzOworCWludCB0eF93b3JrID0gMDsKIAlzdHJ1Y3QgcmluZ19kZXNjKiBvcmlnX2dldF90eCA9IG5wLT5nZXRfdHgub3JpZzsKIAogCXdoaWxlICgobnAtPmdldF90eC5vcmlnICE9IG5wLT5wdXRfdHgub3JpZykgJiYKLQkgICAgICAgISgoZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+Z2V0X3R4Lm9yaWctPmZsYWdsZW4pKSAmIE5WX1RYX1ZBTElEKSkgeworCSAgICAgICAhKChmbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfdHgub3JpZy0+ZmxhZ2xlbikpICYgTlZfVFhfVkFMSUQpICYmCisJICAgICAgICh0eF93b3JrIDwgbGltaXQpKSB7CiAKIAkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfdHhfZG9uZTogZmxhZ3MgMHgleC5cbiIsCiAJCQkJCWRldi0+bmFtZSwgZmxhZ3MpOwpAQCAtMjM5OCw2ICsyNDM3LDcgQEAKIAkJCQl9CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkobnAtPmdldF90eF9jdHgtPnNrYik7CiAJCQkJbnAtPmdldF90eF9jdHgtPnNrYiA9IE5VTEw7CisJCQkJdHhfd29yaysrOwogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKGZsYWdzICYgTlZfVFgyX0xBU1RQQUNLRVQpIHsKQEAgLTI0MTUsNiArMjQ1NSw3IEBACiAJCQkJfQogCQkJCWRldl9rZnJlZV9za2JfYW55KG5wLT5nZXRfdHhfY3R4LT5za2IpOwogCQkJCW5wLT5nZXRfdHhfY3R4LT5za2IgPSBOVUxMOworCQkJCXR4X3dvcmsrKzsKIAkJCX0KIAkJfQogCQlpZiAodW5saWtlbHkobnAtPmdldF90eC5vcmlnKysgPT0gbnAtPmxhc3RfdHgub3JpZykpCkBAIC0yNDI2LDE3ICsyNDY3LDE5IEBACiAJCW5wLT50eF9zdG9wID0gMDsKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCX0KKwlyZXR1cm4gdHhfd29yazsKIH0KIAotc3RhdGljIHZvaWQgbnZfdHhfZG9uZV9vcHRpbWl6ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxpbWl0KQorc3RhdGljIGludCBudl90eF9kb25lX29wdGltaXplZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgZmxhZ3M7CisJaW50IHR4X3dvcmsgPSAwOwogCXN0cnVjdCByaW5nX2Rlc2NfZXgqIG9yaWdfZ2V0X3R4ID0gbnAtPmdldF90eC5leDsKIAogCXdoaWxlICgobnAtPmdldF90eC5leCAhPSBucC0+cHV0X3R4LmV4KSAmJgogCSAgICAgICAhKChmbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5nZXRfdHguZXgtPmZsYWdsZW4pKSAmIE5WX1RYX1ZBTElEKSAmJgotCSAgICAgICAobGltaXQtLSA+IDApKSB7CisJICAgICAgICh0eF93b3JrIDwgbGltaXQpKSB7CiAKIAkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfdHhfZG9uZV9vcHRpbWl6ZWQ6IGZsYWdzIDB4JXguXG4iLAogCQkJCQlkZXYtPm5hbWUsIGZsYWdzKTsKQEAgLTI0NjAsNiArMjUwMyw3IEBACiAKIAkJCWRldl9rZnJlZV9za2JfYW55KG5wLT5nZXRfdHhfY3R4LT5za2IpOwogCQkJbnAtPmdldF90eF9jdHgtPnNrYiA9IE5VTEw7CisJCQl0eF93b3JrKys7CiAKIAkJCWlmIChucC0+dHhfbGltaXQpIHsKIAkJCQludl90eF9mbGlwX293bmVyc2hpcChkZXYpOwpAQCAtMjQ3NCw2ICsyNTE4LDcgQEAKIAkJbnAtPnR4X3N0b3AgPSAwOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQorCXJldHVybiB0eF93b3JrOwogfQogCiAvKgpAQCAtMjU0Niw3ICsyNTkxLDcgQEAKIAogCS8qIDIpIGNoZWNrIHRoYXQgdGhlIHBhY2tldHMgd2VyZSBub3Qgc2VudCBhbHJlYWR5OiAqLwogCWlmICghbnZfb3B0aW1pemVkKG5wKSkKLQkJbnZfdHhfZG9uZShkZXYpOworCQludl90eF9kb25lKGRldiwgbnAtPnR4X3Jpbmdfc2l6ZSk7CiAJZWxzZQogCQludl90eF9kb25lX29wdGltaXplZChkZXYsIG5wLT50eF9yaW5nX3NpemUpOwogCkBAIC0yOTA3LDYgKzI5NTIsNyBAQAogCQkgKiBDaGFuZ2luZyB0aGUgTVRVIGlzIGEgcmFyZSBldmVudCwgaXQgc2hvdWxkbid0IG1hdHRlci4KIAkJICovCiAJCW52X2Rpc2FibGVfaXJxKGRldik7CisJCW52X25hcGlfZGlzYWJsZShkZXYpOwogCQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJCW5ldGlmX2FkZHJfbG9jayhkZXYpOwogCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKQEAgLTI5MzUsNiArMjk4MSw3IEBACiAJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJCW5ldGlmX2FkZHJfdW5sb2NrKGRldik7CiAJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOworCQludl9uYXBpX2VuYWJsZShkZXYpOwogCQludl9lbmFibGVfaXJxKGRldik7CiAJfQogCXJldHVybiAwOwpAQCAtMzM3NSw1MCArMzQyMiw3MSBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSBpbnQgbnZfY2hhbmdlX2ludGVycnVwdF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0b3RhbF93b3JrKQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfRFlOQU1JQykgeworCQlpZiAodG90YWxfd29yayA+IE5WX0RZTkFNSUNfVEhSRVNIT0xEKSB7CisJCQkvKiB0cmFuc2l0aW9uIHRvIHBvbGwgYmFzZWQgaW50ZXJydXB0cyAqLworCQkJbnAtPnF1aWV0X2NvdW50ID0gMDsKKwkJCWlmIChucC0+aXJxbWFzayAhPSBOVlJFR19JUlFNQVNLX0NQVSkgeworCQkJCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19DUFU7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAobnAtPnF1aWV0X2NvdW50IDwgTlZfRFlOQU1JQ19NQVhfUVVJRVRfQ09VTlQpIHsKKwkJCQlucC0+cXVpZXRfY291bnQrKzsKKwkJCX0gZWxzZSB7CisJCQkJLyogcmVhY2hlZCBhIHBlcmlvZCBvZiBsb3cgYWN0aXZpdHksIHN3aXRjaAorCQkJCSAgIHRvIHBlciB0eC9yeCBwYWNrZXQgaW50ZXJydXB0cyAqLworCQkJCWlmIChucC0+aXJxbWFzayAhPSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQpIHsKKwkJCQkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQ7CisJCQkJCXJldHVybiAxOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnEoaW50IGZvbywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwotCXUzMiBldmVudHM7Ci0JaW50IGk7CisjaWZuZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQorCWludCB0b3RhbF93b3JrID0gMDsKKwlpbnQgbG9vcF9jb3VudCA9IDA7CisjZW5kaWYKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFcbiIsIGRldi0+bmFtZSk7CiAKLQlmb3IgKGk9MDsgOyBpKyspIHsKLQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKSB7Ci0JCQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdJcnFTdGF0dXMpICYgTlZSRUdfSVJRU1RBVF9NQVNLOwotCQkJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKLQkJfSBlbHNlIHsKLQkJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRU1RBVF9NQVNLOwotCQkJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7Ci0JCX0KLQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCWlmICghKGV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKLQkJCWJyZWFrOworCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkgeworCQlucC0+ZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKKwkJd3JpdGVsKG5wLT5ldmVudHMsIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CisJfSBlbHNlIHsKKwkJbnAtPmV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOworCQl3cml0ZWwobnAtPmV2ZW50cywgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisJfQorCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycTogJTA4eFxuIiwgZGV2LT5uYW1lLCBucC0+ZXZlbnRzKTsKKwlpZiAoIShucC0+ZXZlbnRzICYgbnAtPmlycW1hc2spKQorCQlyZXR1cm4gSVJRX05PTkU7CiAKLQkJbnZfbXNpX3dvcmthcm91bmQobnApOwotCi0JCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQludl90eF9kb25lKGRldik7Ci0JCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJbnZfbXNpX3dvcmthcm91bmQobnApOwogCiAjaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCi0JCWlmIChldmVudHMgJiBOVlJFR19JUlFfUlhfQUxMKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZucC0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogCi0JCQkvKiBEaXNhYmxlIGZ1cnRodXIgcmVjZWl2ZSBpcnEncyAqLwotCQkJbnAtPmlycW1hc2sgJj0gfk5WUkVHX0lSUV9SWF9BTEw7CisJLyogRGlzYWJsZSBmdXJ0aHVyIGlycSdzCisJICAgKG1zaXggbm90IGVuYWJsZWQgd2l0aCBuYXBpKSAqLworCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKIAotCQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQotCQkJCXdyaXRlbChOVlJFR19JUlFfUlhfQUxMLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCWVsc2UKLQkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJfQogI2Vsc2UKLQkJaWYgKG52X3J4X3Byb2Nlc3MoZGV2LCBSWF9XT1JLX1BFUl9MT09QKSkgeworCWRvCisJeworCQlpbnQgd29yayA9IDA7CisJCWlmICgod29yayA9IG52X3J4X3Byb2Nlc3MoZGV2LCBSWF9XT1JLX1BFUl9MT09QKSkpIHsKIAkJCWlmICh1bmxpa2VseShudl9hbGxvY19yeChkZXYpKSkgewogCQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQkJCWlmICghbnAtPmluX3NodXRkb3duKQpAQCAtMzQyNiw2NSArMzQ5NCw1NiBAQAogCQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJCQl9CiAJCX0KLSNlbmRpZgotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCW52X2xpbmtfaXJxKGRldik7Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwotCQl9Ci0JCWlmICh1bmxpa2VseShucC0+bmVlZF9saW5rdGltZXIgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBucC0+bGlua190aW1lb3V0KSkpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJbnZfbGlua2NoYW5nZShkZXYpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJCW5wLT5saW5rX3RpbWVvdXQgPSBqaWZmaWVzICsgTElOS19USU1FT1VUOwotCQl9Ci0JCWlmICh1bmxpa2VseShldmVudHMgJiAoTlZSRUdfSVJRX1RYX0VSUikpKSB7Ci0JCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCBldmVudHMgMHgleC4gUHJvYmFibHkgVFggZmFpbC5cbiIsCi0JCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIChOVlJFR19JUlFfVU5LTk9XTikpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIHVua25vd24gZXZlbnRzIDB4JXguIFBsZWFzZSByZXBvcnRcbiIsCi0JCQkJCQlkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwotCQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCWVsc2UKLQkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJcGNpX3B1c2goYmFzZSk7CiAKLQkJCWlmICghbnAtPmluX3NodXRkb3duKSB7Ci0JCQkJbnAtPm5pY19wb2xsX2lycSA9IG5wLT5pcnFtYXNrOwotCQkJCW5wLT5yZWNvdmVyX2Vycm9yID0gMTsKLQkJCQltb2RfdGltZXIoJm5wLT5uaWNfcG9sbCwgamlmZmllcyArIFBPTExfV0FJVCk7Ci0JCQl9Ci0JCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJd29yayArPSBudl90eF9kb25lKGRldiwgVFhfV09SS19QRVJfTE9PUCk7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisKKwkJaWYgKCF3b3JrKQogCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGkgPiBtYXhfaW50ZXJydXB0X3dvcmspKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCi0JCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCi0JCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJZWxzZQotCQkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQlwY2lfcHVzaChiYXNlKTsKIAotCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKLQkJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7Ci0JCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOwotCQkJfQotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnEuXG4iLCBkZXYtPm5hbWUsIGkpOwotCQkJYnJlYWs7Ci0JCX0KKwkJdG90YWxfd29yayArPSB3b3JrOwogCisJCWxvb3BfY291bnQrKzsKIAl9CisJd2hpbGUgKGxvb3BfY291bnQgPCBtYXhfaW50ZXJydXB0X3dvcmspOworCisJaWYgKG52X2NoYW5nZV9pbnRlcnJ1cHRfbW9kZShkZXYsIHRvdGFsX3dvcmspKSB7CisJCS8qIHNldHVwIG5ldyBpcnEgbWFzayAqLworCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCX0KKworCWlmICh1bmxpa2VseShucC0+ZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspKSB7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQludl9saW5rX2lycShkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCX0KKwlpZiAodW5saWtlbHkobnAtPm5lZWRfbGlua3RpbWVyICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbnAtPmxpbmtfdGltZW91dCkpKSB7CisJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQludl9saW5rY2hhbmdlKGRldik7CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCW5wLT5saW5rX3RpbWVvdXQgPSBqaWZmaWVzICsgTElOS19USU1FT1VUOworCX0KKwlpZiAodW5saWtlbHkobnAtPmV2ZW50cyAmIE5WUkVHX0lSUV9SRUNPVkVSX0VSUk9SKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KKwkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQorCQkJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQllbHNlCisJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQlwY2lfcHVzaChiYXNlKTsKKworCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgeworCQkJbnAtPm5pY19wb2xsX2lycSA9IG5wLT5pcnFtYXNrOworCQkJbnAtPnJlY292ZXJfZXJyb3IgPSAxOworCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOworCQl9CisJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJfQorI2VuZGlmCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycSBjb21wbGV0ZWRcbiIsIGRldi0+bmFtZSk7CiAKLQlyZXR1cm4gSVJRX1JFVFZBTChpKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIC8qKgpAQCAtMzQ5Nyw0NSArMzU1NiwzOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7Ci0JdTMyIGV2ZW50czsKLQlpbnQgaTsKKyNpZm5kZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCisJaW50IHRvdGFsX3dvcmsgPSAwOworCWludCBsb29wX2NvdW50ID0gMDsKKyNlbmRpZgogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycV9vcHRpbWl6ZWRcbiIsIGRldi0+bmFtZSk7CiAKLQlmb3IgKGk9MDsgOyBpKyspIHsKLQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKSB7Ci0JCQlldmVudHMgPSByZWFkbChiYXNlICsgTnZSZWdJcnFTdGF0dXMpICYgTlZSRUdfSVJRU1RBVF9NQVNLOwotCQkJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKLQkJfSBlbHNlIHsKLQkJCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRU1RBVF9NQVNLOwotCQkJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7Ci0JCX0KLQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogaXJxOiAlMDh4XG4iLCBkZXYtPm5hbWUsIGV2ZW50cyk7Ci0JCWlmICghKGV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKLQkJCWJyZWFrOworCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkgeworCQlucC0+ZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKKwkJd3JpdGVsKG5wLT5ldmVudHMsIGJhc2UgKyBOdlJlZ0lycVN0YXR1cyk7CisJfSBlbHNlIHsKKwkJbnAtPmV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpOworCQl3cml0ZWwobnAtPmV2ZW50cywgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisJfQorCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlycTogJTA4eFxuIiwgZGV2LT5uYW1lLCBucC0+ZXZlbnRzKTsKKwlpZiAoIShucC0+ZXZlbnRzICYgbnAtPmlycW1hc2spKQorCQlyZXR1cm4gSVJRX05PTkU7CiAKLQkJbnZfbXNpX3dvcmthcm91bmQobnApOwotCi0JCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQludl90eF9kb25lX29wdGltaXplZChkZXYsIFRYX1dPUktfUEVSX0xPT1ApOwotCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCW52X21zaV93b3JrYXJvdW5kKG5wKTsKIAogI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotCQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX1JYX0FMTCkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQluZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAotCQkJLyogRGlzYWJsZSBmdXJ0aHVyIHJlY2VpdmUgaXJxJ3MgKi8KLQkJCW5wLT5pcnFtYXNrICY9IH5OVlJFR19JUlFfUlhfQUxMOworCS8qIERpc2FibGUgZnVydGh1ciBpcnEncworCSAgIChtc2l4IG5vdCBlbmFibGVkIHdpdGggbmFwaSkgKi8KKwl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7CiAKLQkJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKLQkJCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQllbHNlCi0JCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCX0KICNlbHNlCi0JCWlmIChudl9yeF9wcm9jZXNzX29wdGltaXplZChkZXYsIFJYX1dPUktfUEVSX0xPT1ApKSB7CisJZG8KKwl7CisJCWludCB3b3JrID0gMDsKKwkJaWYgKCh3b3JrID0gbnZfcnhfcHJvY2Vzc19vcHRpbWl6ZWQoZGV2LCBSWF9XT1JLX1BFUl9MT09QKSkpIHsKIAkJCWlmICh1bmxpa2VseShudl9hbGxvY19yeF9vcHRpbWl6ZWQoZGV2KSkpIHsKIAkJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikKQEAgLTM1NDMsNjYgKzM1OTUsNTcgQEAKIAkJCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCQkJfQogCQl9Ci0jZW5kaWYKLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQludl9saW5rX2lycShkZXYpOwotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJfQotCQlpZiAodW5saWtlbHkobnAtPm5lZWRfbGlua3RpbWVyICYmIHRpbWVfYWZ0ZXIoamlmZmllcywgbnAtPmxpbmtfdGltZW91dCkpKSB7Ci0JCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKLQkJCW52X2xpbmtjaGFuZ2UoZGV2KTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKLQkJfQotCQlpZiAodW5saWtlbHkoZXZlbnRzICYgKE5WUkVHX0lSUV9UWF9FUlIpKSkgewotCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogcmVjZWl2ZWQgaXJxIHdpdGggZXZlbnRzIDB4JXguIFByb2JhYmx5IFRYIGZhaWwuXG4iLAotCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwotCQl9Ci0JCWlmICh1bmxpa2VseShldmVudHMgJiAoTlZSRUdfSVJRX1VOS05PV04pKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCB1bmtub3duIGV2ZW50cyAweCV4LiBQbGVhc2UgcmVwb3J0XG4iLAotCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwotCQl9Ci0JCWlmICh1bmxpa2VseShldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KLQkJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKLQkJCQl3cml0ZWwoMCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCQllbHNlCi0JCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCXBjaV9wdXNoKGJhc2UpOwogCi0JCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgewotCQkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKLQkJCQlucC0+cmVjb3Zlcl9lcnJvciA9IDE7Ci0JCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOwotCQkJfQotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCXdvcmsgKz0gbnZfdHhfZG9uZV9vcHRpbWl6ZWQoZGV2LCBUWF9XT1JLX1BFUl9MT09QKTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKworCQlpZiAoIXdvcmspCiAJCQlicmVhazsKLQkJfQogCi0JCWlmICh1bmxpa2VseShpID4gbWF4X2ludGVycnVwdF93b3JrKSkgewotCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7Ci0JCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwotCQkJaWYgKCEobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpKQotCQkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKLQkJCWVsc2UKLQkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQkJcGNpX3B1c2goYmFzZSk7CisJCXRvdGFsX3dvcmsgKz0gd29yazsKIAotCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKLQkJCQlucC0+bmljX3BvbGxfaXJxID0gbnAtPmlycW1hc2s7Ci0JCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOwotCQkJfQotCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdG9vIG1hbnkgaXRlcmF0aW9ucyAoJWQpIGluIG52X25pY19pcnEuXG4iLCBkZXYtPm5hbWUsIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQorCQlsb29wX2NvdW50Kys7CiAJfQorCXdoaWxlIChsb29wX2NvdW50IDwgbWF4X2ludGVycnVwdF93b3JrKTsKKworCWlmIChudl9jaGFuZ2VfaW50ZXJydXB0X21vZGUoZGV2LCB0b3RhbF93b3JrKSkgeworCQkvKiBzZXR1cCBuZXcgaXJxIG1hc2sgKi8KKwkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwl9CisKKwlpZiAodW5saWtlbHkobnAtPmV2ZW50cyAmIE5WUkVHX0lSUV9MSU5LKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJbnZfbGlua19pcnEoZGV2KTsKKwkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwl9CisJaWYgKHVubGlrZWx5KG5wLT5uZWVkX2xpbmt0aW1lciAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIG5wLT5saW5rX3RpbWVvdXQpKSkgeworCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKKwkJbnZfbGlua2NoYW5nZShkZXYpOworCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCQlucC0+bGlua190aW1lb3V0ID0gamlmZmllcyArIExJTktfVElNRU9VVDsKKwl9CisJaWYgKHVubGlrZWx5KG5wLT5ldmVudHMgJiBOVlJFR19JUlFfUkVDT1ZFUl9FUlJPUikpIHsKKwkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgbmljICovCisJCWlmICghKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKSkKKwkJCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJZWxzZQorCQkJd3JpdGVsKG5wLT5pcnFtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJcGNpX3B1c2goYmFzZSk7CisKKwkJaWYgKCFucC0+aW5fc2h1dGRvd24pIHsKKwkJCW5wLT5uaWNfcG9sbF9pcnEgPSBucC0+aXJxbWFzazsKKwkJCW5wLT5yZWNvdmVyX2Vycm9yID0gMTsKKwkJCW1vZF90aW1lcigmbnAtPm5pY19wb2xsLCBqaWZmaWVzICsgUE9MTF9XQUlUKTsKKwkJfQorCQlzcGluX3VubG9jaygmbnAtPmxvY2spOworCX0KKworI2VuZGlmCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfbmljX2lycV9vcHRpbWl6ZWQgY29tcGxldGVkXG4iLCBkZXYtPm5hbWUpOwogCi0JcmV0dXJuIElSUV9SRVRWQUwoaSk7CisJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbnZfbmljX2lycV90eChpbnQgZm9vLCB2b2lkICpkYXRhKQpAQCAtMzYyNywxMCArMzY3MCw2IEBACiAJCW52X3R4X2RvbmVfb3B0aW1pemVkKGRldiwgVFhfV09SS19QRVJfTE9PUCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CiAKLQkJaWYgKHVubGlrZWx5KGV2ZW50cyAmIChOVlJFR19JUlFfVFhfRVJSKSkpIHsKLQkJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlY2VpdmVkIGlycSB3aXRoIGV2ZW50cyAweCV4LiBQcm9iYWJseSBUWCBmYWlsLlxuIiwKLQkJCQkJCWRldi0+bmFtZSwgZXZlbnRzKTsKLQkJfQogCQlpZiAodW5saWtlbHkoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwogCQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KQEAgLTM2NTksMTMgKzM2OTgsMjIgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbnAtPmRldjsKIAl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHBrdHMsIHJldGNvZGU7CisJaW50IHJldGNvZGU7CisJaW50IHR4X3dvcmssIHJ4X3dvcms7CiAKIAlpZiAoIW52X29wdGltaXplZChucCkpIHsKLQkJcGt0cyA9IG52X3J4X3Byb2Nlc3MoZGV2LCBidWRnZXQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwkJdHhfd29yayA9IG52X3R4X2RvbmUoZGV2LCBucC0+dHhfcmluZ19zaXplKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKworCQlyeF93b3JrID0gbnZfcnhfcHJvY2VzcyhkZXYsIGJ1ZGdldCk7CiAJCXJldGNvZGUgPSBudl9hbGxvY19yeChkZXYpOwogCX0gZWxzZSB7Ci0JCXBrdHMgPSBudl9yeF9wcm9jZXNzX29wdGltaXplZChkZXYsIGJ1ZGdldCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOworCQl0eF93b3JrID0gbnZfdHhfZG9uZV9vcHRpbWl6ZWQoZGV2LCBucC0+dHhfcmluZ19zaXplKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKworCQlyeF93b3JrID0gbnZfcnhfcHJvY2Vzc19vcHRpbWl6ZWQoZGV2LCBidWRnZXQpOwogCQlyZXRjb2RlID0gbnZfYWxsb2Nfcnhfb3B0aW1pemVkKGRldik7CiAJfQogCkBAIC0zNjc2LDQ0ICszNzI0LDQyIEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJfQogCi0JaWYgKHBrdHMgPCBidWRnZXQpIHsKLQkJLyogcmUtZW5hYmxlIHJlY2VpdmUgaW50ZXJydXB0cyAqLworCW52X2NoYW5nZV9pbnRlcnJ1cHRfbW9kZShkZXYsIHR4X3dvcmsgKyByeF93b3JrKTsKKworCWlmICh1bmxpa2VseShucC0+ZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0KLQkJbnAtPmlycW1hc2sgfD0gTlZSRUdfSVJRX1JYX0FMTDsKLQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQotCQkJd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCQllbHNlCi0JCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwotCisJCW52X2xpbmtfaXJxKGRldik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJfQotCXJldHVybiBwa3RzOworCWlmICh1bmxpa2VseShucC0+bmVlZF9saW5rdGltZXIgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBucC0+bGlua190aW1lb3V0KSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisJCW52X2xpbmtjaGFuZ2UoZGV2KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwkJbnAtPmxpbmtfdGltZW91dCA9IGppZmZpZXMgKyBMSU5LX1RJTUVPVVQ7CisJfQorCWlmICh1bmxpa2VseShucC0+ZXZlbnRzICYgTlZSRUdfSVJRX1JFQ09WRVJfRVJST1IpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOworCQlpZiAoIW5wLT5pbl9zaHV0ZG93bikgeworCQkJbnAtPm5pY19wb2xsX2lycSA9IG5wLT5pcnFtYXNrOworCQkJbnAtPnJlY292ZXJfZXJyb3IgPSAxOworCQkJbW9kX3RpbWVyKCZucC0+bmljX3BvbGwsIGppZmZpZXMgKyBQT0xMX1dBSVQpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT5sb2NrLCBmbGFncyk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJcmV0dXJuIHJ4X3dvcms7CisJfQorCisJaWYgKHJ4X3dvcmsgPCBidWRnZXQpIHsKKwkJLyogcmUtZW5hYmxlIGludGVycnVwdHMKKwkJICAgKG1zaXggbm90IGVuYWJsZWQgaW4gbmFwaSkgKi8KKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOworCisJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CisJfQorCXJldHVybiByeF93b3JrOwogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLXN0YXRpYyBpcnFyZXR1cm5fdCBudl9uaWNfaXJxX3J4KGludCBmb28sIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOwotCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKLQl1MzIgZXZlbnRzOwotCi0JZXZlbnRzID0gcmVhZGwoYmFzZSArIE52UmVnTVNJWElycVN0YXR1cykgJiBOVlJFR19JUlFfUlhfQUxMOwotCXdyaXRlbChOVlJFR19JUlFfUlhfQUxMLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKLQotCWlmIChldmVudHMpIHsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKLQkJLyogZGlzYWJsZSByZWNlaXZlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwotCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnSXJxTWFzayk7Ci0JCXBjaV9wdXNoKGJhc2UpOwotCX0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0jZWxzZQogc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfcngoaW50IGZvbywgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CkBAIC0zNzYwLDcgKzM4MDYsNiBAQAogCiAJcmV0dXJuIElSUV9SRVRWQUwoaSk7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfb3RoZXIoaW50IGZvbywgdm9pZCAqZGF0YSkKIHsKQEAgLTM4MTAsMTAgKzM4NTUsNiBAQAogCQkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJCQlicmVhazsKIAkJfQotCQlpZiAoZXZlbnRzICYgKE5WUkVHX0lSUV9VTktOT1dOKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCB1bmtub3duIGV2ZW50cyAweCV4LiBQbGVhc2UgcmVwb3J0XG4iLAotCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwotCQl9CiAJCWlmICh1bmxpa2VseShpID4gbWF4X2ludGVycnVwdF93b3JrKSkgewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwpAQCAtMzkxOCwyMSArMzk1OSwyNyBAQAogCQkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfWF9FTkFCTEVEOwogCQkJaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQgJiYgIWludHJfdGVzdCkgewogCQkJCS8qIFJlcXVlc3QgaXJxIGZvciByeCBoYW5kbGluZyAqLwotCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IsICZudl9uaWNfaXJxX3J4LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQlzcHJpbnRmKG5wLT5uYW1lX3J4LCAiJXMtcngiLCBkZXYtPm5hbWUpOworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IsCisJCQkJCQkmbnZfbmljX2lycV9yeCwgSVJRRl9TSEFSRUQsIG5wLT5uYW1lX3J4LCBkZXYpICE9IDApIHsKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIHJ4ICVkXG4iLCByZXQpOwogCQkJCQlwY2lfZGlzYWJsZV9tc2l4KG5wLT5wY2lfZGV2KTsKIAkJCQkJbnAtPm1zaV9mbGFncyAmPSB+TlZfTVNJX1hfRU5BQkxFRDsKIAkJCQkJZ290byBvdXRfZXJyOwogCQkJCX0KIAkJCQkvKiBSZXF1ZXN0IGlycSBmb3IgdHggaGFuZGxpbmcgKi8KLQkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yLCAmbnZfbmljX2lycV90eCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSAhPSAwKSB7CisJCQkJc3ByaW50ZihucC0+bmFtZV90eCwgIiVzLXR4IiwgZGV2LT5uYW1lKTsKKwkJCQlpZiAocmVxdWVzdF9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9UWF0udmVjdG9yLAorCQkJCQkJJm52X25pY19pcnFfdHgsIElSUUZfU0hBUkVELCBucC0+bmFtZV90eCwgZGV2KSAhPSAwKSB7CiAJCQkJCXByaW50ayhLRVJOX0lORk8gImZvcmNlZGV0aDogcmVxdWVzdF9pcnEgZmFpbGVkIGZvciB0eCAlZFxuIiwgcmV0KTsKIAkJCQkJcGNpX2Rpc2FibGVfbXNpeChucC0+cGNpX2Rldik7CiAJCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0VOQUJMRUQ7CiAJCQkJCWdvdG8gb3V0X2ZyZWVfcng7CiAJCQkJfQogCQkJCS8qIFJlcXVlc3QgaXJxIGZvciBsaW5rIGFuZCB0aW1lciBoYW5kbGluZyAqLwotCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IsICZudl9uaWNfaXJxX290aGVyLCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKKwkJCQlzcHJpbnRmKG5wLT5uYW1lX290aGVyLCAiJXMtb3RoZXIiLCBkZXYtPm5hbWUpOworCQkJCWlmIChyZXF1ZXN0X2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX09USEVSXS52ZWN0b3IsCisJCQkJCQkmbnZfbmljX2lycV9vdGhlciwgSVJRRl9TSEFSRUQsIG5wLT5uYW1lX290aGVyLCBkZXYpICE9IDApIHsKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIGxpbmsgJWRcbiIsIHJldCk7CiAJCQkJCXBjaV9kaXNhYmxlX21zaXgobnAtPnBjaV9kZXYpOwogCQkJCQlucC0+bXNpX2ZsYWdzICY9IH5OVl9NU0lfWF9FTkFCTEVEOwpAQCAtNDA0NiwxOSArNDA5MywxOSBAQAogCQkJbWFzayB8PSBOVlJFR19JUlFfT1RIRVI7CiAJCX0KIAl9Ci0JbnAtPm5pY19wb2xsX2lycSA9IDA7Ci0KIAkvKiBkaXNhYmxlX2lycSgpIGNvbnRhaW5zIHN5bmNocm9uaXplX2lycSwgdGh1cyBubyBpcnEgaGFuZGxlciBjYW4gcnVuIG5vdyAqLwogCiAJaWYgKG5wLT5yZWNvdmVyX2Vycm9yKSB7CiAJCW5wLT5yZWNvdmVyX2Vycm9yID0gMDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiBNQUMgaW4gcmVjb3ZlcmFibGUgZXJyb3Igc3RhdGVcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogTUFDIGluIHJlY292ZXJhYmxlIGVycm9yIHN0YXRlXG4iLCBkZXYtPm5hbWUpOwogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJCQluZXRpZl9hZGRyX2xvY2soZGV2KTsKIAkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQkJLyogc3RvcCBlbmdpbmVzICovCiAJCQludl9zdG9wX3J4dHgoZGV2KTsKKwkJCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1BPV0VSX0NOVFJMKQorCQkJCW52X21hY19yZXNldChkZXYpOwogCQkJbnZfdHhyeF9yZXNldChkZXYpOwogCQkJLyogZHJhaW4gcnggcXVldWUgKi8KIAkJCW52X2RyYWluX3J4dHgoZGV2KTsKQEAgLTQwNzYsNiArNDEyMywxMSBAQAogCQkJcGNpX3B1c2goYmFzZSk7CiAJCQl3cml0ZWwoTlZSRUdfVFhSWENUTF9LSUNLfG5wLT50eHJ4Y3RsX2JpdHMsIGdldF9od2Jhc2UoZGV2KSArIE52UmVnVHhSeENvbnRyb2wpOwogCQkJcGNpX3B1c2goYmFzZSk7CisJCQkvKiBjbGVhciBpbnRlcnJ1cHRzICovCisJCQlpZiAoIShucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkpCisJCQkJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKKwkJCWVsc2UKKwkJCQl3cml0ZWwoTlZSRUdfSVJRU1RBVF9NQVNLLCBiYXNlICsgTnZSZWdNU0lYSXJxU3RhdHVzKTsKIAogCQkJLyogcmVzdGFydCByeCBlbmdpbmUgKi8KIAkJCW52X3N0YXJ0X3J4dHgoZGV2KTsKQEAgLTQwODUsMTEgKzQxMzcsMTEgQEAKIAkJfQogCX0KIAotCiAJd3JpdGVsKG1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOwogCXBjaV9wdXNoKGJhc2UpOwogCiAJaWYgKCF1c2luZ19tdWx0aV9pcnFzKGRldikpIHsKKwkJbnAtPm5pY19wb2xsX2lycSA9IDA7CiAJCWlmIChudl9vcHRpbWl6ZWQobnApKQogCQkJbnZfbmljX2lycV9vcHRpbWl6ZWQoMCwgZGV2KTsKIAkJZWxzZQpAQCAtNDEwMCwxOCArNDE1MiwyMiBAQAogCQkJZW5hYmxlX2lycV9sb2NrZGVwKG5wLT5wY2lfZGV2LT5pcnEpOwogCX0gZWxzZSB7CiAJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJRX1JYX0FMTCkgeworCQkJbnAtPm5pY19wb2xsX2lycSAmPSB+TlZSRUdfSVJRX1JYX0FMTDsKIAkJCW52X25pY19pcnFfcngoMCwgZGV2KTsKIAkJCWVuYWJsZV9pcnFfbG9ja2RlcChucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IpOwogCQl9CiAJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJRX1RYX0FMTCkgeworCQkJbnAtPm5pY19wb2xsX2lycSAmPSB+TlZSRUdfSVJRX1RYX0FMTDsKIAkJCW52X25pY19pcnFfdHgoMCwgZGV2KTsKIAkJCWVuYWJsZV9pcnFfbG9ja2RlcChucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IpOwogCQl9CiAJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJRX09USEVSKSB7CisJCQlucC0+bmljX3BvbGxfaXJxICY9IH5OVlJFR19JUlFfT1RIRVI7CiAJCQludl9uaWNfaXJxX290aGVyKDAsIGRldik7CiAJCQllbmFibGVfaXJxX2xvY2tkZXAobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9PVEhFUl0udmVjdG9yKTsKIAkJfQogCX0KKwogfQogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKQEAgLTQ1NjAsNiArNDYxNiw3IEBACiAKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCW52X2Rpc2FibGVfaXJxKGRldik7CisJCW52X25hcGlfZGlzYWJsZShkZXYpOwogCQluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJCW5ldGlmX2FkZHJfbG9jayhkZXYpOwogCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKQEAgLTQ2MTIsNiArNDY2OSw3IEBACiAJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CiAJCW5ldGlmX2FkZHJfdW5sb2NrKGRldik7CiAJCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOworCQludl9uYXBpX2VuYWJsZShkZXYpOwogCQludl9lbmFibGVfaXJxKGRldik7CiAJfQogCXJldHVybiAwOwpAQCAtNDczOCw3ICs0Nzk2LDcgQEAKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfQ0hFQ0tTVU0pCi0JCXJldHVybiBldGh0b29sX29wX3NldF90eF9od19jc3VtKGRldiwgZGF0YSk7CisJCXJldHVybiBldGh0b29sX29wX3NldF90eF9jc3VtKGRldiwgZGF0YSk7CiAJZWxzZQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CkBAIC00NzY0LDEyICs0ODIyLDEyIEBACiAJCWVsc2UKIAkJCXJldHVybiBOVl9URVNUX0NPVU5UX0JBU0U7CiAJY2FzZSBFVEhfU1NfU1RBVFM6Ci0JCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1NUQVRJU1RJQ1NfVjEpCi0JCQlyZXR1cm4gTlZfREVWX1NUQVRJU1RJQ1NfVjFfQ09VTlQ7CisJCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1NUQVRJU1RJQ1NfVjMpCisJCQlyZXR1cm4gTlZfREVWX1NUQVRJU1RJQ1NfVjNfQ09VTlQ7CiAJCWVsc2UgaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDU19WMikKIAkJCXJldHVybiBOVl9ERVZfU1RBVElTVElDU19WMl9DT1VOVDsKLQkJZWxzZSBpZiAobnAtPmRyaXZlcl9kYXRhICYgREVWX0hBU19TVEFUSVNUSUNTX1YzKQotCQkJcmV0dXJuIE5WX0RFVl9TVEFUSVNUSUNTX1YzX0NPVU5UOworCQllbHNlIGlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX1NUQVRJU1RJQ1NfVjEpCisJCQlyZXR1cm4gTlZfREVWX1NUQVRJU1RJQ1NfVjFfQ09VTlQ7CiAJCWVsc2UKIAkJCXJldHVybiAwOwogCWRlZmF1bHQ6CkBAIC01MDM4LDkgKzUwOTYsNyBAQAogCWlmICh0ZXN0LT5mbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpIHsKIAkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQotCQkJbmFwaV9kaXNhYmxlKCZucC0+bmFwaSk7Ci0jZW5kaWYKKwkJCW52X25hcGlfZGlzYWJsZShkZXYpOwogCQkJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCQkJbmV0aWZfYWRkcl9sb2NrKGRldik7CiAJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CkBAIC01MDk4LDkgKzUxNTQsNyBAQAogCQkJLyogcmVzdGFydCByeCBlbmdpbmUgKi8KIAkJCW52X3N0YXJ0X3J4dHgoZGV2KTsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0jaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCi0JCQluYXBpX2VuYWJsZSgmbnAtPm5hcGkpOwotI2VuZGlmCisJCQludl9uYXBpX2VuYWJsZShkZXYpOwogCQkJbnZfZW5hYmxlX2h3X2ludGVycnVwdHMoZGV2LCBucC0+aXJxbWFzayk7CiAJCX0KIAl9CkBAIC01MTY5LDYgKzUyMjMsNyBAQAogLyogVGhlIG1nbXQgdW5pdCBhbmQgZHJpdmVyIHVzZSBhIHNlbWFwaG9yZSB0byBhY2Nlc3MgdGhlIHBoeSBkdXJpbmcgaW5pdCAqLwogc3RhdGljIGludCBudl9tZ210X2FjcXVpcmVfc2VtYShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAlpbnQgaTsKIAl1MzIgdHhfY3RybCwgbWdtdF9zZW1hOwpAQCAtNTE5MSw4ICs1MjQ2LDEwIEBACiAJCS8qIHZlcmlmeSB0aGF0IHNlbWFwaG9yZSB3YXMgYWNxdWlyZWQgKi8KIAkJdHhfY3RybCA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CiAJCWlmICgoKHR4X2N0cmwgJiBOVlJFR19YTUlUQ1RMX0hPU1RfU0VNQV9NQVNLKSA9PSBOVlJFR19YTUlUQ1RMX0hPU1RfU0VNQV9BQ1EpICYmCi0JCSAgICAoKHR4X2N0cmwgJiBOVlJFR19YTUlUQ1RMX01HTVRfU0VNQV9NQVNLKSA9PSBOVlJFR19YTUlUQ1RMX01HTVRfU0VNQV9GUkVFKSkKKwkJICAgICgodHhfY3RybCAmIE5WUkVHX1hNSVRDVExfTUdNVF9TRU1BX01BU0spID09IE5WUkVHX1hNSVRDVExfTUdNVF9TRU1BX0ZSRUUpKSB7CisJCQlucC0+bWdtdF9zZW1hID0gMTsKIAkJCXJldHVybiAxOworCQl9CiAJCWVsc2UKIAkJCXVkZWxheSg1MCk7CiAJfQpAQCAtNTIwMCw2ICs1MjU3LDUxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG52X21nbXRfcmVsZWFzZV9zZW1hKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCBfX2lvbWVtICpiYXNlID0gZ2V0X2h3YmFzZShkZXYpOworCXUzMiB0eF9jdHJsOworCisJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTUdNVF9VTklUKSB7CisJCWlmIChucC0+bWdtdF9zZW1hKSB7CisJCQl0eF9jdHJsID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKTsKKwkJCXR4X2N0cmwgJj0gfk5WUkVHX1hNSVRDVExfSE9TVF9TRU1BX0FDUTsKKwkJCXdyaXRlbCh0eF9jdHJsLCBiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOworCQl9CisJfQorfQorCisKK3N0YXRpYyBpbnQgbnZfbWdtdF9nZXRfdmVyc2lvbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKKwl1MzIgZGF0YV9yZWFkeSA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CisJdTMyIGRhdGFfcmVhZHkyID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCWludCByZWFkeSA9IDA7CisKKwl3cml0ZWwoTlZSRUdfTUdNVFVOSVRHRVRWRVJTSU9OLCBiYXNlICsgTnZSZWdNZ210VW5pdEdldFZlcnNpb24pOworCXdyaXRlbChkYXRhX3JlYWR5IF4gTlZSRUdfWE1JVENUTF9EQVRBX1NUQVJULCBiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpOworCXN0YXJ0ID0gamlmZmllczsKKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgc3RhcnQgKyA1KkhaKSkgeworCQlkYXRhX3JlYWR5MiA9IHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCk7CisJCWlmICgoZGF0YV9yZWFkeSAmIE5WUkVHX1hNSVRDVExfREFUQV9SRUFEWSkgIT0gKGRhdGFfcmVhZHkyICYgTlZSRUdfWE1JVENUTF9EQVRBX1JFQURZKSkgeworCQkJcmVhZHkgPSAxOworCQkJYnJlYWs7CisJCX0KKwkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CisJfQorCisJaWYgKCFyZWFkeSB8fCAoZGF0YV9yZWFkeTIgJiBOVlJFR19YTUlUQ1RMX0RBVEFfRVJST1IpKQorCQlyZXR1cm4gMDsKKworCW5wLT5tZ210X3ZlcnNpb24gPSByZWFkbChiYXNlICsgTnZSZWdNZ210VW5pdFZlcnNpb24pICYgTlZSRUdfTUdNVFVOSVRWRVJTSU9OOworCisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgbnZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC01MzQ0LDkgKzU0NDYsNyBAQAogCXJldCA9IG52X3VwZGF0ZV9saW5rc3BlZWQoZGV2KTsKIAludl9zdGFydF9yeHR4KGRldik7CiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLSNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLQluYXBpX2VuYWJsZSgmbnAtPm5hcGkpOwotI2VuZGlmCisJbnZfbmFwaV9lbmFibGUoZGV2KTsKIAogCWlmIChyZXQpIHsKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwpAQCAtNTM3OCw5ICs1NDc4LDcgQEAKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJbnAtPmluX3NodXRkb3duID0gMTsKIAlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKLSNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKLQluYXBpX2Rpc2FibGUoJm5wLT5uYXBpKTsKLSNlbmRpZgorCW52X25hcGlfZGlzYWJsZShkZXYpOwogCXN5bmNocm9uaXplX2lycShucC0+cGNpX2Rldi0+aXJxKTsKIAogCWRlbF90aW1lcl9zeW5jKCZucC0+b29tX2tpY2spOwpAQCAtNTU3MSwxNCArNTY2OSw2IEBACiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX1RYOwogCX0KIAotCW5wLT5tc2lfZmxhZ3MgPSAwOwotCWlmICgoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NU0kpICYmIG1zaSkgewotCQlucC0+bXNpX2ZsYWdzIHw9IE5WX01TSV9DQVBBQkxFOwotCX0KLQlpZiAoKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfTVNJX1gpICYmIG1zaXgpIHsKLQkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfWF9DQVBBQkxFOwotCX0KLQogCW5wLT5wYXVzZV9mbGFncyA9IE5WX1BBVVNFRlJBTUVfUlhfQ0FQQUJMRSB8IE5WX1BBVVNFRlJBTUVfUlhfUkVRIHwgTlZfUEFVU0VGUkFNRV9BVVRPTkVHOwogCWlmICgoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19QQVVTRUZSQU1FX1RYX1YxKSB8fAogCSAgICAoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19QQVVTRUZSQU1FX1RYX1YyKSB8fApAQCAtNTcyMywxNCArNTgxMywzNSBAQAogCX0gZWxzZSB7CiAJCW5wLT50eF9mbGFncyA9IE5WX1RYMl9WQUxJRDsKIAl9Ci0JaWYgKG9wdGltaXphdGlvbl9tb2RlID09IE5WX09QVElNSVpBVElPTl9NT0RFX1RIUk9VR0hQVVQpIHsKLQkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX1RIUk9VR0hQVVQ7Ci0JCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfQ0FQQUJMRSkgLyogc2V0IG51bWJlciBvZiB2ZWN0b3JzICovCi0JCQlucC0+bXNpX2ZsYWdzIHw9IDB4MDAwMzsKLQl9IGVsc2UgeworCisJbnAtPm1zaV9mbGFncyA9IDA7CisJaWYgKChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01TSSkgJiYgbXNpKSB7CisJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX0NBUEFCTEU7CisJfQorCWlmICgoaWQtPmRyaXZlcl9kYXRhICYgREVWX0hBU19NU0lfWCkgJiYgbXNpeCkgeworCQkvKiBtc2l4IGhhcyBoYWQgcmVwb3J0ZWQgaXNzdWVzIHdoZW4gbW9kaWZ5aW5nIGlycW1hc2sKKwkJICAgYXMgaW4gdGhlIGNhc2Ugb2YgbmFwaSwgdGhlcmVmb3JlLCBkaXNhYmxlIGZvciBub3cKKwkJKi8KKyNpZm5kZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCisJCW5wLT5tc2lfZmxhZ3MgfD0gTlZfTVNJX1hfQ0FQQUJMRTsKKyNlbmRpZgorCX0KKworCWlmIChvcHRpbWl6YXRpb25fbW9kZSA9PSBOVl9PUFRJTUlaQVRJT05fTU9ERV9DUFUpIHsKIAkJbnAtPmlycW1hc2sgPSBOVlJFR19JUlFNQVNLX0NQVTsKIAkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9DQVBBQkxFKSAvKiBzZXQgbnVtYmVyIG9mIHZlY3RvcnMgKi8KIAkJCW5wLT5tc2lfZmxhZ3MgfD0gMHgwMDAxOworCX0gZWxzZSBpZiAob3B0aW1pemF0aW9uX21vZGUgPT0gTlZfT1BUSU1JWkFUSU9OX01PREVfRFlOQU1JQyAmJgorCQkgICAhKGlkLT5kcml2ZXJfZGF0YSAmIERFVl9ORUVEX1RJTUVSSVJRKSkgeworCQkvKiBzdGFydCBvZmYgaW4gdGhyb3VnaHB1dCBtb2RlICovCisJCW5wLT5pcnFtYXNrID0gTlZSRUdfSVJRTUFTS19USFJPVUdIUFVUOworCQkvKiByZW1vdmUgc3VwcG9ydCBmb3IgbXNpeCBtb2RlICovCisJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9YX0NBUEFCTEU7CisJfSBlbHNlIHsKKwkJb3B0aW1pemF0aW9uX21vZGUgPSBOVl9PUFRJTUlaQVRJT05fTU9ERV9USFJPVUdIUFVUOworCQlucC0+aXJxbWFzayA9IE5WUkVHX0lSUU1BU0tfVEhST1VHSFBVVDsKKwkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9DQVBBQkxFKSAvKiBzZXQgbnVtYmVyIG9mIHZlY3RvcnMgKi8KKwkJCW5wLT5tc2lfZmxhZ3MgfD0gMHgwMDAzOwogCX0KIAogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfTkVFRF9USU1FUklSUSkKQEAgLTU3NzEsMTkgKzU4ODIsMjYgQEAKIAogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX01HTVRfVU5JVCkgewogCQkvKiBtYW5hZ2VtZW50IHVuaXQgcnVubmluZyBvbiB0aGUgbWFjPyAqLwotCQlpZiAocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfU1lOQ19QSFlfSU5JVCkgewotCQkJbnAtPm1hY19pbl91c2UgPSByZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9NR01UX1NUOwotCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBtZ210IHVuaXQgaXMgcnVubmluZy4gbWFjIGluIHVzZSAleC5cbiIsIHBjaV9uYW1lKHBjaV9kZXYpLCBucC0+bWFjX2luX3VzZSk7Ci0JCQlpZiAobnZfbWdtdF9hY3F1aXJlX3NlbWEoZGV2KSkgewotCQkJCS8qIG1hbmFnZW1lbnQgdW5pdCBzZXR1cCB0aGUgcGh5IGFscmVhZHk/ICovCi0JCQkJaWYgKChyZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdHRlckNvbnRyb2wpICYgTlZSRUdfWE1JVENUTF9TWU5DX01BU0spID09Ci0JCQkJICAgIE5WUkVHX1hNSVRDVExfU1lOQ19QSFlfSU5JVCkgewotCQkJCQkvKiBwaHkgaXMgaW5pdGVkIGJ5IG1nbXQgdW5pdCAqLwotCQkJCQlwaHlpbml0aWFsaXplZCA9IDE7Ci0JCQkJCWRwcmludGsoS0VSTl9JTkZPICIlczogUGh5IGFscmVhZHkgaW5pdGlhbGl6ZWQgYnkgbWdtdCB1bml0LlxuIiwgcGNpX25hbWUocGNpX2RldikpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIHdlIG5lZWQgdG8gaW5pdCB0aGUgcGh5ICovCi0JCQkJfQorCQlpZiAoKHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX01HTVRfU1QpICYmCisJCSAgICAocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJDb250cm9sKSAmIE5WUkVHX1hNSVRDVExfU1lOQ19QSFlfSU5JVCkgJiYKKwkJICAgIG52X21nbXRfYWNxdWlyZV9zZW1hKGRldikgJiYKKwkJICAgIG52X21nbXRfZ2V0X3ZlcnNpb24oZGV2KSkgeworCQkJbnAtPm1hY19pbl91c2UgPSAxOworCQkJaWYgKG5wLT5tZ210X3ZlcnNpb24gPiAwKSB7CisJCQkJbnAtPm1hY19pbl91c2UgPSByZWFkbChiYXNlICsgTnZSZWdNZ210VW5pdENvbnRyb2wpICYgTlZSRUdfTUdNVFVOSVRDT05UUk9MX0lOVVNFOworCQkJfQorCQkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBtZ210IHVuaXQgaXMgcnVubmluZy4gbWFjIGluIHVzZSAleC5cbiIsCisJCQkJcGNpX25hbWUocGNpX2RldiksIG5wLT5tYWNfaW5fdXNlKTsKKwkJCS8qIG1hbmFnZW1lbnQgdW5pdCBzZXR1cCB0aGUgcGh5IGFscmVhZHk/ICovCisJCQlpZiAobnAtPm1hY19pbl91c2UgJiYKKwkJCSAgICAoKHJlYWRsKGJhc2UgKyBOdlJlZ1RyYW5zbWl0dGVyQ29udHJvbCkgJiBOVlJFR19YTUlUQ1RMX1NZTkNfTUFTSykgPT0KKwkJCSAgICAgTlZSRUdfWE1JVENUTF9TWU5DX1BIWV9JTklUKSkgeworCQkJCS8qIHBoeSBpcyBpbml0ZWQgYnkgbWdtdCB1bml0ICovCisJCQkJcGh5aW5pdGlhbGl6ZWQgPSAxOworCQkJCWRwcmludGsoS0VSTl9JTkZPICIlczogUGh5IGFscmVhZHkgaW5pdGlhbGl6ZWQgYnkgbWdtdCB1bml0LlxuIiwKKwkJCQkJcGNpX25hbWUocGNpX2RldikpOworCQkJfSBlbHNlIHsKKwkJCQkvKiB3ZSBuZWVkIHRvIGluaXQgdGhlIHBoeSAqLwogCQkJfQogCQl9CiAJfQpAQCAtNTk0NSw2ICs2MDYzLDggQEAKIAkvKiByZXN0b3JlIGFueSBwaHkgcmVsYXRlZCBjaGFuZ2VzICovCiAJbnZfcmVzdG9yZV9waHkoZGV2KTsKIAorCW52X21nbXRfcmVsZWFzZV9zZW1hKGRldik7CisKIAkvKiBmcmVlIGFsbCBzdHJ1Y3R1cmVzICovCiAJZnJlZV9yaW5ncyhkZXYpOwogCWlvdW5tYXAoZ2V0X2h3YmFzZShkZXYpKTsKQEAgLTU5OTUsNiArNjExNSw4IEBACiAJZm9yIChpID0gMDtpIDw9IG5wLT5yZWdpc3Rlcl9zaXplL3NpemVvZih1MzIpOyBpKyspCiAJCXdyaXRlbChucC0+c2F2ZWRfY29uZmlnX3NwYWNlW2ldLCBiYXNlK2kqc2l6ZW9mKHUzMikpOwogCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBOVl9NU0lfUFJJVl9PRkZTRVQsIE5WX01TSV9QUklWX1ZBTFVFKTsKKwogCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXJjID0gbnZfb3BlbihkZXYpOwpAQCAtNjA2OCwxMTUgKzYxOTAsMTE1IEBACiAJfSwKIAl7CS8qIENLODA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzgpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIENLODA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzkpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCiAJfSwKIAl7CS8qIE1DUDA0IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEwKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1NUQVRJU1RJQ1NfVjF8REVWX05FRURfVFhfTElNSVQsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1AwNCBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19TVEFUSVNUSUNTX1YxfERFVl9ORUVEX1RYX0xJTUlULAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfU1RBVElTVElDU19WMXxERVZfTkVFRF9UWF9MSU1JVCwKIAl9LAogCXsJLyogTUNQNTEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTIpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfU1RBVElTVElDU19WMSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1NUQVRJU1RJQ1NfVjEsCiAJfSwKIAl7CS8qIE1DUDUxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1NUQVRJU1RJQ1NfVjEsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19TVEFUSVNUSUNTX1YxLAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfTkVFRF9UWF9MSU1JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A1NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19WTEFOfERFVl9IQVNfTVNJfERFVl9IQVNfTVNJX1h8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfTkVFRF9UWF9MSU1JVCwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1ZMQU58REVWX0hBU19NU0l8REVWX0hBU19NU0lfWHxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9ORUVEX1RYX0xJTUlULAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCiAJfSwKIAl7CS8qIE1DUDYxIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE3KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUiwKIAl9LAogCXsJLyogTUNQNjEgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTgpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSLAogCX0sCiAJewkvKiBNQ1A2MSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFIsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIwKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjUgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjEpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMiksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY1IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIzKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjQpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A2NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yNSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDY3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzI2KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNjcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjcpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3MyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yOCksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzMgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjkpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDczIEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMwKSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX01TSXxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjF8REVWX0hBU19TVEFUSVNUSUNTX1YyfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3MyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19NU0l8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YxfERFVl9IQVNfU1RBVElTVElDU19WMnxERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfTVNJfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMXxERVZfSEFTX1NUQVRJU1RJQ1NfVjJ8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzIpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3NyBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zMyksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjJ8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX01HTVRfVU5JVHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7CS8qIE1DUDc3IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM0KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WMnxERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfTUdNVF9VTklUfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzcgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzUpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YyfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19NR01UX1VOSVR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zNiksCkBAIC02MTg0LDE1ICs2MzA2LDE1IEBACiAJfSwKIAl7CS8qIE1DUDc5IEV0aGVybmV0IENvbnRyb2xsZXIgKi8KIAkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzM3KSwKLQkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKKwkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfTElOS1RJTUVSfERFVl9IQVNfTEFSR0VERVNDfERFVl9IQVNfQ0hFQ0tTVU18REVWX0hBU19ISUdIX0RNQXxERVZfSEFTX01TSXxERVZfSEFTX1BPV0VSX0NOVFJMfERFVl9IQVNfUEFVU0VGUkFNRV9UWF9WM3xERVZfSEFTX1NUQVRJU1RJQ1NfVjN8REVWX0hBU19URVNUX0VYVEVOREVEfERFVl9IQVNfQ09SUkVDVF9NQUNBRERSfERFVl9IQVNfQ09MTElTSU9OX0ZJWHxERVZfTkVFRF9UWF9MSU1JVHxERVZfSEFTX0dFQVJfTU9ERSwKIAl9LAogCXsJLyogTUNQNzkgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMzgpLAotCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9USU1FUklSUXxERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAorCQkuZHJpdmVyX2RhdGEgPSBERVZfTkVFRF9MSU5LVElNRVJ8REVWX0hBU19MQVJHRURFU0N8REVWX0hBU19DSEVDS1NVTXxERVZfSEFTX0hJR0hfRE1BfERFVl9IQVNfTVNJfERFVl9IQVNfUE9XRVJfQ05UUkx8REVWX0hBU19QQVVTRUZSQU1FX1RYX1YzfERFVl9IQVNfU1RBVElTVElDU19WM3xERVZfSEFTX1RFU1RfRVhURU5ERUR8REVWX0hBU19DT1JSRUNUX01BQ0FERFJ8REVWX0hBU19DT0xMSVNJT05fRklYfERFVl9ORUVEX1RYX0xJTUlUfERFVl9IQVNfR0VBUl9NT0RFLAogCX0sCiAJewkvKiBNQ1A3OSBFdGhlcm5ldCBDb250cm9sbGVyICovCiAJCVBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8zOSksCi0JCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX1RJTUVSSVJRfERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCisJCS5kcml2ZXJfZGF0YSA9IERFVl9ORUVEX0xJTktUSU1FUnxERVZfSEFTX0xBUkdFREVTQ3xERVZfSEFTX0NIRUNLU1VNfERFVl9IQVNfSElHSF9ETUF8REVWX0hBU19NU0l8REVWX0hBU19QT1dFUl9DTlRSTHxERVZfSEFTX1BBVVNFRlJBTUVfVFhfVjN8REVWX0hBU19TVEFUSVNUSUNTX1YzfERFVl9IQVNfVEVTVF9FWFRFTkRFRHxERVZfSEFTX0NPUlJFQ1RfTUFDQUREUnxERVZfSEFTX0NPTExJU0lPTl9GSVh8REVWX05FRURfVFhfTElNSVR8REVWX0hBU19HRUFSX01PREUsCiAJfSwKIAl7MCx9LAogfTsKQEAgLTYyMjAsNyArNjM0Miw3IEBACiBtb2R1bGVfcGFyYW0obWF4X2ludGVycnVwdF93b3JrLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfaW50ZXJydXB0X3dvcmssICJmb3JjZWRldGggbWF4aW11bSBldmVudHMgaGFuZGxlZCBwZXIgaW50ZXJydXB0Iik7CiBtb2R1bGVfcGFyYW0ob3B0aW1pemF0aW9uX21vZGUsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG9wdGltaXphdGlvbl9tb2RlLCAiSW4gdGhyb3VnaHB1dCBtb2RlICgwKSwgZXZlcnkgdHggJiByeCBwYWNrZXQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQuIEluIENQVSBtb2RlICgxKSwgaW50ZXJydXB0cyBhcmUgY29udHJvbGxlZCBieSBhIHRpbWVyLiIpOworTU9EVUxFX1BBUk1fREVTQyhvcHRpbWl6YXRpb25fbW9kZSwgIkluIHRocm91Z2hwdXQgbW9kZSAoMCksIGV2ZXJ5IHR4ICYgcnggcGFja2V0IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0LiBJbiBDUFUgbW9kZSAoMSksIGludGVycnVwdHMgYXJlIGNvbnRyb2xsZWQgYnkgYSB0aW1lci4gSW4gZHluYW1pYyBtb2RlICgyKSwgdGhlIG1vZGUgdG9nZ2xlcyBiZXR3ZWVuIHRocm91Z2hwdXQgYW5kIENQVSBtb2RlIGJhc2VkIG9uIG5ldHdvcmsgbG9hZC4iKTsKIG1vZHVsZV9wYXJhbShwb2xsX2ludGVydmFsLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwb2xsX2ludGVydmFsLCAiSW50ZXJ2YWwgZGV0ZXJtaW5lcyBob3cgZnJlcXVlbnQgdGltZXIgaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBieSBbKHRpbWVfaW5fbWljcm9fc2VjcyAqIDEwMCkgLyAoMl4xMCldLiBNaW4gaXMgMCBhbmQgTWF4IGlzIDY1NTM1LiIpOwogbW9kdWxlX3BhcmFtKG1zaSwgaW50LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCmluZGV4IGNlOTAwZTUuLmIwMzdjZTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7CiAJCS8qIGRvbmUgKi8KLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCSgqZmVwLT5vcHMtPm5hcGlfZW5hYmxlX3J4KShkZXYpOwogCX0KIAlyZXR1cm4gcmVjZWl2ZWQ7CkBAIC00NzgsNyArNDc4LDcgQEAKIAkJCQkvKiBOT1RFOiBpdCBpcyBwb3NzaWJsZSBmb3IgRkNDcyBpbiBOQVBJIG1vZGUgICAgKi8KIAkJCQkvKiB0byBzdWJtaXQgYSBzcHVyaW91cyBpbnRlcnJ1cHQgd2hpbGUgaW4gcG9sbCAgKi8KIAkJCQlpZiAobmFwaV9vaykKLQkJCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmZmVwLT5uYXBpKTsKKwkJCQkJX19uYXBpX3NjaGVkdWxlKCZmZXAtPm5hcGkpOwogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmMgYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMDc5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5jCkBAIC0wLDAgKzEsNDY4IEBACisvKgorICogRnJlZXNjYWxlIFBvd2VyUVVJQ0MgRXRoZXJuZXQgRHJpdmVyIC0tIE1JSU0gYnVzIGltcGxlbWVudGF0aW9uCisgKiBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUlNIHJlZ3MKKyAqCisgKiBBdXRob3I6IEFuZHkgRmxlbWluZyA8YWZsZW1pbmdAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogQmFzZWQgb24gZ2lhbmZhcl9taWkuYyBhbmQgdWNjX2dldGhfbWlpLmMgKExpIFlhbmcsIEtpbSBQaGlsbGlwcykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vdWNjLmg+CisKKyNpbmNsdWRlICJnaWFuZmFyLmgiCisjaW5jbHVkZSAiZnNsX3BxX21kaW8uaCIKKworLyoKKyAqIFdyaXRlIHZhbHVlIHRvIHRoZSBQSFkgYXQgbWlpX2lkIGF0IHJlZ2lzdGVyIHJlZ251bSwKKyAqIG9uIHRoZSBidXMgYXR0YWNoZWQgdG8gdGhlIGxvY2FsIGludGVyZmFjZSwgd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZQorICogZ2VuZXJpYyBtZGlvIGJ1cyAodGllZCB0byBhIHNpbmdsZSBpbnRlcmZhY2UpLCB3YWl0aW5nIHVudGlsIHRoZSB3cml0ZSBpcworICogZG9uZSBiZWZvcmUgcmV0dXJuaW5nLiBUaGlzIGlzIGhlbHBmdWwgaW4gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBsaWtlCisgKiB0aGUgVEJJIHdoaWNoIGNvbnRyb2wgaW50ZXJmYWNlcyBsaWtlIG9uY2hpcCBTRVJERVMgYW5kIGFyZSBhbHdheXMgdGllZCB0bworICogdGhlIGxvY2FsIG1kaW8gcGlucywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyBzeXN0ZW0gbWRpbyBidXMsIHVzZWQgZm9yCisgKiBjb250cm9sbGluZyB0aGUgZXh0ZXJuYWwgUEhZcywgZm9yIGV4YW1wbGUuCisgKi8KK2ludCBmc2xfcHFfbG9jYWxfbWRpb193cml0ZShzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncywgaW50IG1paV9pZCwKKwkJaW50IHJlZ251bSwgdTE2IHZhbHVlKQoreworCS8qIFNldCB0aGUgUEhZIGFkZHJlc3MgYW5kIHRoZSByZWdpc3RlciBhZGRyZXNzIHdlIHdhbnQgdG8gd3JpdGUgKi8KKwlvdXRfYmUzMigmcmVncy0+bWlpbWFkZCwgKG1paV9pZCA8PCA4KSB8IHJlZ251bSk7CisKKwkvKiBXcml0ZSBvdXQgdGhlIHZhbHVlIHdlIHdhbnQgKi8KKwlvdXRfYmUzMigmcmVncy0+bWlpbWNvbiwgdmFsdWUpOworCisJLyogV2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIHRvIGZpbmlzaCAqLworCXdoaWxlIChpbl9iZTMyKCZyZWdzLT5taWltaW5kKSAmIE1JSU1JTkRfQlVTWSkKKwkJY3B1X3JlbGF4KCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQgdGhlIGJ1cyBmb3IgUEhZIGF0IGFkZHIgbWlpX2lkLCByZWdpc3RlciByZWdudW0sIGFuZAorICogcmV0dXJuIHRoZSB2YWx1ZS4gIENsZWFycyBtaWltY29tIGZpcnN0LiAgQWxsIFBIWSBvcGVyYXRpb24KKyAqIGRvbmUgb24gdGhlIGJ1cyBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLAorICogd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBnZW5lcmljIG1kaW8gYnVzCisgKiBUaGlzIGlzIGhlbHBmdWwgaW4gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBsaWtlCisgKiB0aGUgVEJJIHdoaWNoLCBpbiB0dXJuLCBjb250cm9sIGludGVyZmFjZXMgbGlrZSBvbmNoaXAgU0VSREVTCisgKiBhbmQgYXJlIGFsd2F5cyB0aWVkIHRvIHRoZSBsb2NhbCBtZGlvIHBpbnMsIHdoaWNoIG1heSBub3QgYmUgdGhlCisgKiBzYW1lIGFzIHN5c3RlbSBtZGlvIGJ1cywgdXNlZCBmb3IgY29udHJvbGxpbmcgdGhlIGV4dGVybmFsIFBIWXMsIGZvciBlZy4KKyAqLworaW50IGZzbF9wcV9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MsCisJCWludCBtaWlfaWQsIGludCByZWdudW0pCit7CisJdTE2IHZhbHVlOworCisJLyogU2V0IHRoZSBQSFkgYWRkcmVzcyBhbmQgdGhlIHJlZ2lzdGVyIGFkZHJlc3Mgd2Ugd2FudCB0byByZWFkICovCisJb3V0X2JlMzIoJnJlZ3MtPm1paW1hZGQsIChtaWlfaWQgPDwgOCkgfCByZWdudW0pOworCisJLyogQ2xlYXIgbWlpbWNvbSwgYW5kIHRoZW4gaW5pdGlhdGUgYSByZWFkICovCisJb3V0X2JlMzIoJnJlZ3MtPm1paW1jb20sIDApOworCW91dF9iZTMyKCZyZWdzLT5taWltY29tLCBNSUlfUkVBRF9DT01NQU5EKTsKKworCS8qIFdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byBmaW5pc2ggKi8KKwl3aGlsZSAoaW5fYmUzMigmcmVncy0+bWlpbWluZCkgJiAoTUlJTUlORF9OT1RWQUxJRCB8IE1JSU1JTkRfQlVTWSkpCisJCWNwdV9yZWxheCgpOworCisJLyogR3JhYiB0aGUgdmFsdWUgb2YgdGhlIHJlZ2lzdGVyIGZyb20gbWlpbXN0YXQgKi8KKwl2YWx1ZSA9IGluX2JlMzIoJnJlZ3MtPm1paW1zdGF0KTsKKworCXJldHVybiB2YWx1ZTsKK30KKworLyoKKyAqIFdyaXRlIHZhbHVlIHRvIHRoZSBQSFkgYXQgbWlpX2lkIGF0IHJlZ2lzdGVyIHJlZ251bSwKKyAqIG9uIHRoZSBidXMsIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzIGRvbmUgYmVmb3JlIHJldHVybmluZy4KKyAqLworaW50IGZzbF9wcV9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0sIHUxNiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7CisKKwkvKiBXcml0ZSB0byB0aGUgbG9jYWwgTUlJIHJlZ3MgKi8KKwlyZXR1cm4oZnNsX3BxX2xvY2FsX21kaW9fd3JpdGUocmVncywgbWlpX2lkLCByZWdudW0sIHZhbHVlKSk7Cit9CisKKy8qCisgKiBSZWFkIHRoZSBidXMgZm9yIFBIWSBhdCBhZGRyIG1paV9pZCwgcmVnaXN0ZXIgcmVnbnVtLCBhbmQKKyAqIHJldHVybiB0aGUgdmFsdWUuICBDbGVhcnMgbWlpbWNvbSBmaXJzdC4KKyAqLworaW50IGZzbF9wcV9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSkKK3sKKwlzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7CisKKwkvKiBSZWFkIHRoZSBsb2NhbCBNSUkgcmVncyAqLworCXJldHVybihmc2xfcHFfbG9jYWxfbWRpb19yZWFkKHJlZ3MsIG1paV9pZCwgcmVnbnVtKSk7Cit9CisKKy8qIFJlc2V0IHRoZSBNSUlNIHJlZ2lzdGVycywgYW5kIHdhaXQgZm9yIHRoZSBidXMgdG8gZnJlZSAqLworc3RhdGljIGludCBmc2xfcHFfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXN0cnVjdCBmc2xfcHFfbWRpbyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKKwlpbnQgdGltZW91dCA9IFBIWV9JTklUX1RJTUVPVVQ7CisKKwltdXRleF9sb2NrKCZidXMtPm1kaW9fbG9jayk7CisKKwkvKiBSZXNldCB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgKi8KKwlvdXRfYmUzMigmcmVncy0+bWlpbWNmZywgTUlJTUNGR19SRVNFVCk7CisKKwkvKiBTZXR1cCB0aGUgTUlJIE1nbXQgY2xvY2sgc3BlZWQgKi8KKwlvdXRfYmUzMigmcmVncy0+bWlpbWNmZywgTUlJTUNGR19JTklUX1ZBTFVFKTsKKworCS8qIFdhaXQgdW50aWwgdGhlIGJ1cyBpcyBmcmVlICovCisJd2hpbGUgKChpbl9iZTMyKCZyZWdzLT5taWltaW5kKSAmIE1JSU1JTkRfQlVTWSkgJiYgdGltZW91dC0tKQorCQljcHVfcmVsYXgoKTsKKworCW11dGV4X3VubG9jaygmYnVzLT5tZGlvX2xvY2spOworCisJaWYgKHRpbWVvdXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRoZSBNSUkgQnVzIGlzIHN0dWNrIVxuIiwKKwkJCQlidXMtPm5hbWUpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiAwOworfQorCisvKiBBbGxvY2F0ZSBhbiBhcnJheSB3aGljaCBwcm92aWRlcyBpcnEgI3MgZm9yIGVhY2ggUEhZIG9uIHRoZSBnaXZlbiBidXMgKi8KK3N0YXRpYyBpbnQgKmNyZWF0ZV9pcnFfbWFwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJaW50ICppcnFzOworCWludCBpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgPSBOVUxMOworCisJaXJxcyA9IGtjYWxsb2MoUEhZX01BWF9BRERSLCBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWlycXMpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgaSsrKQorCQlpcnFzW2ldID0gUEhZX1BPTEw7CisKKwl3aGlsZSAoKGNoaWxkID0gb2ZfZ2V0X25leHRfY2hpbGQobnAsIGNoaWxkKSkgIT0gTlVMTCkgeworCQlpbnQgaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoY2hpbGQsIDApOworCQljb25zdCB1MzIgKmlkOworCisJCWlmIChpcnEgPT0gTk9fSVJRKQorCQkJY29udGludWU7CisKKwkJaWQgPSBvZl9nZXRfcHJvcGVydHkoY2hpbGQsICJyZWciLCBOVUxMKTsKKworCQlpZiAoIWlkKQorCQkJY29udGludWU7CisKKwkJaWYgKCppZCA8IFBIWV9NQVhfQUREUiAmJiAqaWQgPj0gMCkKKwkJCWlycXNbKmlkXSA9IGlycTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIKKwkJCQkJIiVkIGlzIG5vdCBhIHZhbGlkIFBIWSBhZGRyZXNzXG4iLAorCQkJCQlucC0+ZnVsbF9uYW1lLCAqaWQpOworCX0KKworCXJldHVybiBpcnFzOworfQorCit2b2lkIGZzbF9wcV9tZGlvX2J1c19uYW1lKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJY29uc3QgdTMyICphZGRyOworCXU2NCB0YWRkciA9IE9GX0JBRF9BRERSOworCisJYWRkciA9IG9mX2dldF9hZGRyZXNzKG5wLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAoYWRkcikKKwkJdGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgYWRkcik7CisKKwlzbnByaW50ZihuYW1lLCBNSUlfQlVTX0lEX1NJWkUsICIlc0AlbGx4IiwgbnAtPm5hbWUsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpdGFkZHIpOworfQorCisvKiBTY2FuIHRoZSBidXMgaW4gcmV2ZXJzZSwgbG9va2luZyBmb3IgYW4gZW1wdHkgc3BvdCAqLworc3RhdGljIGludCBmc2xfcHFfbWRpb19maW5kX2ZyZWUoc3RydWN0IG1paV9idXMgKm5ld19idXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBQSFlfTUFYX0FERFI7IGkgPiAwOyBpLS0pIHsKKwkJdTMyIHBoeV9pZDsKKworCQlpZiAoZ2V0X3BoeV9pZChuZXdfYnVzLCBpLCAmcGh5X2lkKSkKKwkJCXJldHVybiAtMTsKKworCQlpZiAocGh5X2lkID09IDB4ZmZmZmZmZmYpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworCisjaWZkZWYgQ09ORklHX0dJQU5GQVIKK3N0YXRpYyB1MzIgX19pb21lbSAqZ2V0X2dmYXJfdGJpcGEoc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MpCit7CisJc3RydWN0IGdmYXIgX19pb21lbSAqZW5ldF9yZWdzOworCisJLyoKKwkgKiBUaGlzIGlzIG1pbGRseSBldmlsLCBidXQgc28gaXMgb3VyIGhhcmR3YXJlIGZvciBkb2luZyB0aGlzLgorCSAqIEFsc28sIHdlIGhhdmUgdG8gY2FzdCBiYWNrIHRvIHN0cnVjdCBnZmFyIGJlY2F1c2Ugb2YKKwkgKiBkZWZpbml0aW9uIHdlaXJkbmVzcyBkb25lIGluIGdpYW5mYXIuaC4KKwkgKi8KKwllbmV0X3JlZ3MgPSAoc3RydWN0IGdmYXIgX19pb21lbSAqKQorCQkoKGNoYXIgX19pb21lbSAqKXJlZ3MgLSBvZmZzZXRvZihzdHJ1Y3QgZ2ZhciwgZ2Zhcl9taWlfcmVncykpOworCisJcmV0dXJuICZlbmV0X3JlZ3MtPnRiaXBhOworfQorI2VuZGlmCisKKworI2lmZGVmIENPTkZJR19VQ0NfR0VUSAorc3RhdGljIGludCBnZXRfdWNjX2lkX2Zvcl9yYW5nZSh1NjQgc3RhcnQsIHU2NCBlbmQsIHUzMiAqdWNjX2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOworCWludCBlcnIgPSAwOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAidWNjX2dldGgiKSB7CisJCXN0cnVjdCByZXNvdXJjZSB0ZW1wcmVzOworCisJCWVyciA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZ0ZW1wcmVzKTsKKwkJaWYgKGVycikKKwkJCWNvbnRpbnVlOworCisJCS8qIGlmIG91ciBtZGlvIHJlZ3MgZmFsbCB3aXRoaW4gdGhpcyBVQ0MgcmVncyByYW5nZSAqLworCQlpZiAoKHN0YXJ0ID49IHRlbXByZXMuc3RhcnQpICYmIChlbmQgPD0gdGVtcHJlcy5lbmQpKSB7CisJCQkvKiBGaW5kIHRoZSBpZCBvZiB0aGUgVUNDICovCisJCQljb25zdCB1MzIgKmlkOworCisJCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNlbGwtaW5kZXgiLCBOVUxMKTsKKwkJCWlmICghaWQpIHsKKwkJCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImRldmljZS1pZCIsIE5VTEwpOworCQkJCWlmICghaWQpCisJCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkqdWNjX2lkID0gKmlkOworCisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZgorCisKK3N0YXRpYyBpbnQgZnNsX3BxX21kaW9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+bm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRiaTsKKwlzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVnczsKKwl1MzIgX19pb21lbSAqdGJpcGE7CisJc3RydWN0IG1paV9idXMgKm5ld19idXM7CisJaW50IHRiaWFkZHIgPSAtMTsKKwl1NjQgYWRkciwgc2l6ZTsKKwlpbnQgZXJyID0gMDsKKworCW5ld19idXMgPSBtZGlvYnVzX2FsbG9jKCk7CisJaWYgKE5VTEwgPT0gbmV3X2J1cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwluZXdfYnVzLT5uYW1lID0gIkZyZWVzY2FsZSBQb3dlclFVSUNDIE1JSSBCdXMiLAorCW5ld19idXMtPnJlYWQgPSAmZnNsX3BxX21kaW9fcmVhZCwKKwluZXdfYnVzLT53cml0ZSA9ICZmc2xfcHFfbWRpb193cml0ZSwKKwluZXdfYnVzLT5yZXNldCA9ICZmc2xfcHFfbWRpb19yZXNldCwKKwlmc2xfcHFfbWRpb19idXNfbmFtZShuZXdfYnVzLT5pZCwgbnApOworCisJLyogU2V0IHRoZSBQSFkgYmFzZSBhZGRyZXNzICovCisJYWRkciA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCBvZl9nZXRfYWRkcmVzcyhucCwgMCwgJnNpemUsIE5VTEwpKTsKKwlyZWdzID0gaW9yZW1hcChhZGRyLCBzaXplKTsKKworCWlmIChOVUxMID09IHJlZ3MpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9idXM7CisJfQorCisJbmV3X2J1cy0+cHJpdiA9ICh2b2lkIF9fZm9yY2UgKilyZWdzOworCisJbmV3X2J1cy0+aXJxID0gY3JlYXRlX2lycV9tYXAobnApOworCisJaWYgKE5VTEwgPT0gbmV3X2J1cy0+aXJxKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3VubWFwX3JlZ3M7CisJfQorCisJbmV3X2J1cy0+cGFyZW50ID0gJm9mZGV2LT5kZXY7CisJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBuZXdfYnVzKTsKKworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLW1kaW8iKSB8fAorCQkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJmc2wsZ2lhbmZhci10YmkiKSB8fAorCQkJb2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJnaWFuZmFyIikpIHsKKyNpZmRlZiBDT05GSUdfR0lBTkZBUgorCQl0YmlwYSA9IGdldF9nZmFyX3RiaXBhKHJlZ3MpOworI2Vsc2UKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBlcnJfZnJlZV9pcnFzOworI2VuZGlmCisJfSBlbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCx1Y2MtbWRpbyIpIHx8CisJCQlvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgInVjY19nZXRoX3BoeSIpKSB7CisjaWZkZWYgQ09ORklHX1VDQ19HRVRICisJCXUzMiBpZDsKKworCQl0YmlwYSA9ICZyZWdzLT51dGJpcGFyOworCisJCWlmICgoZXJyID0gZ2V0X3VjY19pZF9mb3JfcmFuZ2UoYWRkciwgYWRkciArIHNpemUsICZpZCkpKQorCQkJZ290byBlcnJfZnJlZV9pcnFzOworCisJCXVjY19zZXRfcWVfbXV4X21paV9tbmcoaWQgLSAxKTsKKyNlbHNlCisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfaXJxczsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfaXJxczsKKwl9CisKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5wLCB0YmkpIHsKKwkJaWYgKCFzdHJuY21wKHRiaS0+dHlwZSwgInRiaS1waHkiLCA4KSkKKwkJCWJyZWFrOworCX0KKworCWlmICh0YmkpIHsKKwkJY29uc3QgdTMyICpwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KHRiaSwgInJlZyIsIE5VTEwpOworCisJCWlmIChwcm9wKQorCQkJdGJpYWRkciA9ICpwcm9wOworCX0KKworCWlmICh0YmlhZGRyID09IC0xKSB7CisJCW91dF9iZTMyKHRiaXBhLCAwKTsKKworCQl0YmlhZGRyID0gZnNsX3BxX21kaW9fZmluZF9mcmVlKG5ld19idXMpOworCX0KKworCS8qCisJICogV2UgZGVmaW5lIFRCSVBBIGF0IDAgdG8gYmUgaWxsZWdhbCwgb3B0aW5nIHRvIGZhaWwgZm9yIGJvYXJkcyB0aGF0CisJICogaGF2ZSBQSFlzIGF0IDEtMzEsIHJhdGhlciB0aGFuIGNoYW5nZSB0YmlwYSBhbmQgcmVzY2FuLgorCSAqLworCWlmICh0YmlhZGRyID09IDApIHsKKwkJZXJyID0gLUVCVVNZOworCisJCWdvdG8gZXJyX2ZyZWVfaXJxczsKKwl9CisKKwlvdXRfYmUzMih0YmlwYSwgdGJpYWRkcik7CisKKwkvKgorCSAqIFRoZSBUQklQSFktb25seSBidXNlcyB3aWxsIGZpbmQgUEhZcyBhdCBldmVyeSBhZGRyZXNzLAorCSAqIHNvIHdlIG1hc2sgdGhlbSBhbGwgYnV0IHRoZSBUQkkKKwkgKi8KKwlpZiAoIW9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGdpYW5mYXItbWRpbyIpKQorCQluZXdfYnVzLT5waHlfbWFzayA9IH4oMSA8PCB0YmlhZGRyKTsKKworCWVyciA9IG1kaW9idXNfcmVnaXN0ZXIobmV3X2J1cyk7CisKKwlpZiAoZXJyKSB7CisJCXByaW50ayAoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgYXMgTURJTyBidXNcbiIsCisJCQkJbmV3X2J1cy0+bmFtZSk7CisJCWdvdG8gZXJyX2ZyZWVfaXJxczsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWVfaXJxczoKKwlrZnJlZShuZXdfYnVzLT5pcnEpOworZXJyX3VubWFwX3JlZ3M6CisJaW91bm1hcChyZWdzKTsKK2Vycl9mcmVlX2J1czoKKwlrZnJlZShuZXdfYnVzKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBmc2xfcHFfbWRpb19yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2aWNlID0gJm9mZGV2LT5kZXY7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOworCisJbWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKKworCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdik7CisJYnVzLT5wcml2ID0gTlVMTDsKKwltZGlvYnVzX2ZyZWUoYnVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBmc2xfcHFfbWRpb19tYXRjaFtdID0geworCXsKKwkJLnR5cGUgPSAibWRpbyIsCisJCS5jb21wYXRpYmxlID0gInVjY19nZXRoX3BoeSIsCisJfSwKKwl7CisJCS50eXBlID0gIm1kaW8iLAorCQkuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLHVjYy1tZGlvIiwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIiwKKwl9LAorCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyIsCisJfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGZzbF9wcV9tZGlvX2RyaXZlciA9IHsKKwkubmFtZSA9ICJmc2wtcHFfbWRpbyIsCisJLnByb2JlID0gZnNsX3BxX21kaW9fcHJvYmUsCisJLnJlbW92ZSA9IGZzbF9wcV9tZGlvX3JlbW92ZSwKKwkubWF0Y2hfdGFibGUgPSBmc2xfcHFfbWRpb19tYXRjaCwKK307CisKK2ludCBfX2luaXQgZnNsX3BxX21kaW9faW5pdCh2b2lkKQoreworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmZzbF9wcV9tZGlvX2RyaXZlcik7Cit9CisKK3ZvaWQgZnNsX3BxX21kaW9fZXhpdCh2b2lkKQoreworCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZmc2xfcHFfbWRpb19kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsX3N5bmMoZnNsX3BxX21kaW9faW5pdCk7Cittb2R1bGVfZXhpdChmc2xfcHFfbWRpb19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzbF9wcV9tZGlvLmggYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZGFkNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9mc2xfcHFfbWRpby5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBGcmVlc2NhbGUgUG93ZXJRVUlDQyBNRElPIERyaXZlciAtLSBNSUkgTWFuYWdlbWVudCBCdXMgSW1wbGVtZW50YXRpb24KKyAqIERyaXZlciBmb3IgdGhlIE1ESU8gYnVzIGNvbnRyb2xsZXIgb24gRnJlZXNjYWxlIFBvd2VyUVVJQ0MgcHJvY2Vzc29ycworICoKKyAqIEF1dGhvcjogQW5keSBGbGVtaW5nCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQsMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaWZuZGVmIF9fRlNMX1BRX01ESU9fSAorI2RlZmluZSBfX0ZTTF9QUV9NRElPX0gKKworI2RlZmluZSBNSUlNSU5EX0JVU1kgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1JSU1JTkRfTk9UVkFMSUQgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTUlJTUNGR19JTklUX1ZBTFVFCTB4MDAwMDAwMDcKKyNkZWZpbmUgTUlJTUNGR19SRVNFVCAgICAgICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIE1JSV9SRUFEX0NPTU1BTkQgICAgICAgMHgwMDAwMDAwMQorCitzdHJ1Y3QgZnNsX3BxX21kaW8geworCXUzMiBtaWltY2ZnOwkJLyogTUlJIG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiByZWcgKi8KKwl1MzIgbWlpbWNvbTsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbW1hbmQgcmVnICovCisJdTMyIG1paW1hZGQ7CQkvKiBNSUkgbWFuYWdlbWVudCBhZGRyZXNzIHJlZyAqLworCXUzMiBtaWltY29uOwkJLyogTUlJIG1hbmFnZW1lbnQgY29udHJvbCByZWcgKi8KKwl1MzIgbWlpbXN0YXQ7CQkvKiBNSUkgbWFuYWdlbWVudCBzdGF0dXMgcmVnICovCisJdTMyIG1paW1pbmQ7CQkvKiBNSUkgbWFuYWdlbWVudCBpbmRpY2F0aW9uIHJlZyAqLworCXU4IHJlc2VydmVkWzI4XTsJLyogU3BhY2UgaG9sZGVyICovCisJdTMyIHV0YmlwYXI7CQkvKiBUQkkgcGh5IGFkZHJlc3MgcmVnIChvbmx5IG9uIFVDQykgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKK2ludCBmc2xfcHFfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pOworaW50IGZzbF9wcV9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0sIHUxNiB2YWx1ZSk7CitpbnQgZnNsX3BxX2xvY2FsX21kaW9fd3JpdGUoc3RydWN0IGZzbF9wcV9tZGlvIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsCisJCQkgIGludCByZWdudW0sIHUxNiB2YWx1ZSk7CitpbnQgZnNsX3BxX2xvY2FsX21kaW9fcmVhZChzdHJ1Y3QgZnNsX3BxX21kaW8gX19pb21lbSAqcmVncywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7CitpbnQgX19pbml0IGZzbF9wcV9tZGlvX2luaXQodm9pZCk7Cit2b2lkIGZzbF9wcV9tZGlvX2V4aXQodm9pZCk7Cit2b2lkIGZzbF9wcV9tZGlvX2J1c19uYW1lKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOworI2VuZGlmIC8qIEZTTF9QUV9NRElPX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCA5ODMxYjNmLi42YTM4ODAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC05Myw3ICs5Myw3IEBACiAjaW5jbHVkZSA8bGludXgvb2YuaD4KIAogI2luY2x1ZGUgImdpYW5mYXIuaCIKLSNpbmNsdWRlICJnaWFuZmFyX21paS5oIgorI2luY2x1ZGUgImZzbF9wcV9tZGlvLmgiCiAKICNkZWZpbmUgVFhfVElNRU9VVCAgICAgICgxKkhaKQogI3VuZGVmIEJSSUVGX0dGQVJfRVJST1JTCkBAIC0xNDAsMTMgKzE0MCwyNiBAQAogdm9pZCBnZmFyX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZ2Zhcl9jbGVhcl9leGFjdF9tYXRjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGdmYXJfc2V0X21hY19mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLCB1OCAqYWRkcik7Ci0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ2Zhcl9ldGh0b29sX29wczsKK3N0YXRpYyBpbnQgZ2Zhcl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIAogTU9EVUxFX0FVVEhPUigiRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJHaWFuZmFyIEV0aGVybmV0IERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdmYXJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBnZmFyX2VuZXRfb3BlbiwKKwkubmRvX3N0YXJ0X3htaXQgPSBnZmFyX3N0YXJ0X3htaXQsCisJLm5kb19zdG9wID0gZ2Zhcl9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBnZmFyX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBnZmFyX3NldF9tdWx0aSwKKwkubmRvX3R4X3RpbWVvdXQgPSBnZmFyX3RpbWVvdXQsCisJLm5kb19kb19pb2N0bCA9IGdmYXJfaW9jdGwsCisJLm5kb192bGFuX3J4X3JlZ2lzdGVyID0gZ2Zhcl92bGFuX3J4X3JlZ2lzdGVyLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSBnZmFyX25ldHBvbGwsCisjZW5kaWYKK307CisKIC8qIFJldHVybnMgMSBpZiBpbmNvbWluZyBmcmFtZXMgdXNlIGFuIEZDQiAqLwogc3RhdGljIGlubGluZSBpbnQgZ2Zhcl91c2VzX2ZjYihzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KQogewpAQCAtMTY2LDYgKzE3OSw5IEBACiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHByaXYtPm5vZGU7CiAJY2hhciBidXNfbmFtZVtNSUlfQlVTX0lEX1NJWkVdOworCWNvbnN0IHUzMiAqc3Rhc2g7CisJY29uc3QgdTMyICpzdGFzaF9sZW47CisJY29uc3QgdTMyICpzdGFzaF9pZHg7CiAKIAlpZiAoIW5wIHx8ICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xOTUsNiArMjExLDI2IEBACiAJCX0KIAl9CiAKKwlzdGFzaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImJkLXN0YXNoIiwgTlVMTCk7CisKKwlpZihzdGFzaCkgeworCQlwcml2LT5kZXZpY2VfZmxhZ3MgfD0gRlNMX0dJQU5GQVJfREVWX0hBU19CRF9TVEFTSElORzsKKwkJcHJpdi0+YmRfc3Rhc2hfZW4gPSAxOworCX0KKworCXN0YXNoX2xlbiA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJ4LXN0YXNoLWxlbiIsIE5VTEwpOworCisJaWYgKHN0YXNoX2xlbikKKwkJcHJpdi0+cnhfc3Rhc2hfc2l6ZSA9ICpzdGFzaF9sZW47CisKKwlzdGFzaF9pZHggPSBvZl9nZXRfcHJvcGVydHkobnAsICJyeC1zdGFzaC1pZHgiLCBOVUxMKTsKKworCWlmIChzdGFzaF9pZHgpCisJCXByaXYtPnJ4X3N0YXNoX2luZGV4ID0gKnN0YXNoX2lkeDsKKworCWlmIChzdGFzaF9sZW4gfHwgc3Rhc2hfaWR4KQorCQlwcml2LT5kZXZpY2VfZmxhZ3MgfD0gRlNMX0dJQU5GQVJfREVWX0hBU19CVUZfU1RBU0hJTkc7CisKIAltYWNfYWRkciA9IG9mX2dldF9tYWNfYWRkcmVzcyhucCk7CiAJaWYgKG1hY19hZGRyKQogCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgbWFjX2FkZHIsIE1BQ19BRERSX0xFTik7CkBAIC0yNTUsNyArMjkxLDcgQEAKIAkJb2Zfbm9kZV9wdXQocGh5KTsKIAkJb2Zfbm9kZV9wdXQobWRpbyk7CiAKLQkJZ2Zhcl9tZGlvX2J1c19uYW1lKGJ1c19uYW1lLCBtZGlvKTsKKwkJZnNsX3BxX21kaW9fYnVzX25hbWUoYnVzX25hbWUsIG1kaW8pOwogCQlzbnByaW50Zihwcml2LT5waHlfYnVzX2lkLCBzaXplb2YocHJpdi0+cGh5X2J1c19pZCksICIlczolMDJ4IiwKIAkJCQlidXNfbmFtZSwgKmlkKTsKIAl9CkBAIC0zMjksOCArMzY1LDEwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JcHJpdi0+ZGV2ID0gZGV2OworCXByaXYtPm5kZXYgPSBkZXY7CisJcHJpdi0+b2ZkZXYgPSBvZmRldjsKIAlwcml2LT5ub2RlID0gb2ZkZXYtPm5vZGU7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmb2ZkZXYtPmRldik7CiAKIAllcnIgPSBnZmFyX29mX2luaXQoZGV2KTsKIApAQCAtMzY5LDIxICs0MDcsMTIgQEAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZvZmRldi0+ZGV2KTsKIAogCS8qIEZpbGwgaW4gdGhlIGRldiBzdHJ1Y3R1cmUgKi8KLQlkZXYtPm9wZW4gPSBnZmFyX2VuZXRfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGdmYXJfc3RhcnRfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBnZmFyX3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmcHJpdi0+bmFwaSwgZ2Zhcl9wb2xsLCBHRkFSX0RFVl9XRUlHSFQpOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBnZmFyX25ldHBvbGw7Ci0jZW5kaWYKLQlkZXYtPnN0b3AgPSBnZmFyX2Nsb3NlOwotCWRldi0+Y2hhbmdlX210dSA9IGdmYXJfY2hhbmdlX210dTsKIAlkZXYtPm10dSA9IDE1MDA7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBnZmFyX3NldF9tdWx0aTsKIAorCWRldi0+bmV0ZGV2X29wcyA9ICZnZmFyX25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZnZmFyX2V0aHRvb2xfb3BzOwotCWRldi0+ZG9faW9jdGwgPSBnZmFyX2lvY3RsOwogCiAJaWYgKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQ1NVTSkgewogCQlwcml2LT5yeF9jc3VtX2VuYWJsZSA9IDE7CkBAIC0zOTMsMTEgKzQyMiw4IEBACiAKIAlwcml2LT52bGdycCA9IE5VTEw7CiAKLQlpZiAocHJpdi0+ZGV2aWNlX2ZsYWdzICYgRlNMX0dJQU5GQVJfREVWX0hBU19WTEFOKSB7Ci0JCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9IGdmYXJfdmxhbl9yeF9yZWdpc3RlcjsKLQorCWlmIChwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX1ZMQU4pCiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwotCX0KIAogCWlmIChwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0VYVEVOREVEX0hBU0gpIHsKIAkJcHJpdi0+ZXh0ZW5kZWRfaGFzaCA9IDE7CkBAIC00MjUsNyArNDUxLDcgQEAKIAkJcHJpdi0+aGFzaF93aWR0aCA9IDg7CiAKIAkJcHJpdi0+aGFzaF9yZWdzWzBdID0gJnByaXYtPnJlZ3MtPmdhZGRyMDsKLSAgICAgICAgICAgICAgICBwcml2LT5oYXNoX3JlZ3NbMV0gPSAmcHJpdi0+cmVncy0+Z2FkZHIxOworCQlwcml2LT5oYXNoX3JlZ3NbMV0gPSAmcHJpdi0+cmVncy0+Z2FkZHIxOwogCQlwcml2LT5oYXNoX3JlZ3NbMl0gPSAmcHJpdi0+cmVncy0+Z2FkZHIyOwogCQlwcml2LT5oYXNoX3JlZ3NbM10gPSAmcHJpdi0+cmVncy0+Z2FkZHIzOwogCQlwcml2LT5oYXNoX3JlZ3NbNF0gPSAmcHJpdi0+cmVncy0+Z2FkZHI0OwpAQCAtNDY2LDYgKzQ5Miw5IEBACiAJCWdvdG8gcmVnaXN0ZXJfZmFpbDsKIAl9CiAKKwlkZXZpY2VfaW5pdF93YWtldXAoJmRldi0+ZGV2LAorCQlwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX01BR0lDX1BBQ0tFVCk7CisKIAkvKiBmaWxsIG91dCBJUlEgbnVtYmVyIGFuZCBuYW1lIGZpZWxkcyAqLwogCWxlbl9kZXZuYW1lID0gc3RybGVuKGRldi0+bmFtZSk7CiAJc3RybmNweSgmcHJpdi0+aW50X25hbWVfdHhbMF0sIGRldi0+bmFtZSwgbGVuX2Rldm5hbWUpOwpAQCAtNTExLDcgKzU0MCw3IEBACiAJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBOVUxMKTsKIAogCWlvdW5tYXAocHJpdi0+cmVncyk7Ci0JZnJlZV9uZXRkZXYocHJpdi0+ZGV2KTsKKwlmcmVlX25ldGRldihwcml2LT5uZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTIwLDcgKzU0OSw3IEBACiBzdGF0aWMgaW50IGdmYXJfc3VzcGVuZChzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcHZhbDsKIApAQCAtNTY5LDcgKzU5OCw3IEBACiBzdGF0aWMgaW50IGdmYXJfcmVzdW1lKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQogewogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJm9mZGV2LT5kZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcHZhbDsKIAlpbnQgbWFnaWNfcGFja2V0ID0gcHJpdi0+d29sX2VuICYmCkBAIC04MzgsMTIgKzg2NywxMiBAQAogCQlmcmVlX2lycShwcml2LT5pbnRlcnJ1cHRUcmFuc21pdCwgZGV2KTsKIAkJZnJlZV9pcnEocHJpdi0+aW50ZXJydXB0UmVjZWl2ZSwgZGV2KTsKIAl9IGVsc2UgewotIAkJZnJlZV9pcnEocHJpdi0+aW50ZXJydXB0VHJhbnNtaXQsIGRldik7CisJCWZyZWVfaXJxKHByaXYtPmludGVycnVwdFRyYW5zbWl0LCBkZXYpOwogCX0KIAogCWZyZWVfc2tiX3Jlc291cmNlcyhwcml2KTsKIAotCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPmRldiwKKwlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCXNpemVvZihzdHJ1Y3QgdHhiZDgpKnByaXYtPnR4X3Jpbmdfc2l6ZQogCQkJKyBzaXplb2Yoc3RydWN0IHJ4YmQ4KSpwcml2LT5yeF9yaW5nX3NpemUsCiAJCQlwcml2LT50eF9iZF9iYXNlLApAQCAtODY1LDEyICs4OTQsMTIgQEAKIAkJaWYgKCFwcml2LT50eF9za2J1ZmZbaV0pCiAJCQljb250aW51ZTsKIAotCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5kZXYtPmRldiwgdHhiZHAtPmJ1ZlB0ciwKKwkJZG1hX3VubWFwX3NpbmdsZSgmcHJpdi0+b2ZkZXYtPmRldiwgdHhiZHAtPmJ1ZlB0ciwKIAkJCQl0eGJkcC0+bGVuZ3RoLCBETUFfVE9fREVWSUNFKTsKIAkJdHhiZHAtPmxzdGF0dXMgPSAwOwogCQlmb3IgKGogPSAwOyBqIDwgc2tiX3NoaW5mbyhwcml2LT50eF9za2J1ZmZbaV0pLT5ucl9mcmFnczsgaisrKSB7CiAJCQl0eGJkcCsrOwotCQkJZG1hX3VubWFwX3BhZ2UoJnByaXYtPmRldi0+ZGV2LCB0eGJkcC0+YnVmUHRyLAorCQkJZG1hX3VubWFwX3BhZ2UoJnByaXYtPm9mZGV2LT5kZXYsIHR4YmRwLT5idWZQdHIsCiAJCQkJCXR4YmRwLT5sZW5ndGgsIERNQV9UT19ERVZJQ0UpOwogCQl9CiAJCXR4YmRwKys7CkBAIC04ODcsNyArOTE2LDcgQEAKIAlpZihwcml2LT5yeF9za2J1ZmYgIT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cnhfcmluZ19zaXplOyBpKyspIHsKIAkJCWlmIChwcml2LT5yeF9za2J1ZmZbaV0pIHsKLQkJCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5kZXYtPmRldiwgcnhiZHAtPmJ1ZlB0ciwKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5vZmRldi0+ZGV2LCByeGJkcC0+YnVmUHRyLAogCQkJCQkJcHJpdi0+cnhfYnVmZmVyX3NpemUsCiAJCQkJCQlETUFfRlJPTV9ERVZJQ0UpOwogCkBAIC05NTMsNyArOTgyLDcgQEAKIAlnZmFyX3dyaXRlKCZyZWdzLT5pbWFzaywgSU1BU0tfSU5JVF9DTEVBUik7CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBidWZmZXIgZGVzY3JpcHRvcnMgKi8KLQl2YWRkciA9ICh1bnNpZ25lZCBsb25nKSBkbWFfYWxsb2NfY29oZXJlbnQoJmRldi0+ZGV2LAorCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGRtYV9hbGxvY19jb2hlcmVudCgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCXNpemVvZiAoc3RydWN0IHR4YmQ4KSAqIHByaXYtPnR4X3Jpbmdfc2l6ZSArCiAJCQlzaXplb2YgKHN0cnVjdCByeGJkOCkgKiBwcml2LT5yeF9yaW5nX3NpemUsCiAJCQkmYWRkciwgR0ZQX0tFUk5FTCk7CkBAIC0xMTY1LDcgKzExOTQsNyBAQAogcnhfc2tiX2ZhaWw6CiAJZnJlZV9za2JfcmVzb3VyY2VzKHByaXYpOwogdHhfc2tiX2ZhaWw6Ci0JZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+ZGV2LAorCWRtYV9mcmVlX2NvaGVyZW50KCZwcml2LT5vZmRldi0+ZGV2LAogCQkJc2l6ZW9mKHN0cnVjdCB0eGJkOCkqcHJpdi0+dHhfcmluZ19zaXplCiAJCQkrIHNpemVvZihzdHJ1Y3QgcnhiZDgpKnByaXYtPnJ4X3Jpbmdfc2l6ZSwKIAkJCXByaXYtPnR4X2JkX2Jhc2UsCkBAIC0xMTgzLDYgKzEyMTIsOCBAQAogCiAJbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOwogCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+cnhfcmVjeWNsZSk7CisKIAkvKiBJbml0aWFsaXplIGEgYnVuY2ggb2YgcmVnaXN0ZXJzICovCiAJaW5pdF9yZWdpc3RlcnMoZGV2KTsKIApAQCAtMTIwMywxMyArMTIzNCwxNCBAQAogCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAorCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmZGV2LT5kZXYsIHByaXYtPndvbF9lbik7CisKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0eGZjYiAqZ2Zhcl9hZGRfZmNiKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHR4ZmNiICpmY2IgPSAoc3RydWN0IHR4ZmNiICopc2tiX3B1c2ggKHNrYiwgR01BQ19GQ0JfTEVOKTsKLQorCXN0cnVjdCB0eGZjYiAqZmNiID0gKHN0cnVjdCB0eGZjYiAqKXNrYl9wdXNoKHNrYiwgR01BQ19GQ0JfTEVOKTsKIAljYWNoZWFibGVfbWVtemVybyhmY2IsIEdNQUNfRkNCX0xFTik7CiAKIAlyZXR1cm4gZmNiOwpAQCAtMTI3OCw2ICsxMzEwLDIyIEBACiAKIAliYXNlID0gcHJpdi0+dHhfYmRfYmFzZTsKIAorCS8qIG1ha2Ugc3BhY2UgZm9yIGFkZGl0aW9uYWwgaGVhZGVyIHdoZW4gZmNiIGlzIG5lZWRlZCAqLworCWlmICgoKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHx8CisJCQkocHJpdi0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSkgJiYKKwkJCShza2JfaGVhZHJvb20oc2tiKSA8IEdNQUNfRkNCX0xFTikpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYl9uZXc7CisKKwkJc2tiX25ldyA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgR01BQ19GQ0JfTEVOKTsKKwkJaWYgKCFza2JfbmV3KSB7CisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJa2ZyZWVfc2tiKHNrYik7CisJCQlyZXR1cm4gTkVUREVWX1RYX09LOworCQl9CisJCWtmcmVlX3NrYihza2IpOworCQlza2IgPSBza2JfbmV3OworCX0KKwogCS8qIHRvdGFsIG51bWJlciBvZiBmcmFnbWVudHMgaW4gdGhlIFNLQiAqLwogCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIApAQCAtMTMxNCw3ICsxMzYyLDcgQEAKIAkJCWlmIChpID09IG5yX2ZyYWdzIC0gMSkKIAkJCQlsc3RhdHVzIHw9IEJEX0xGTEFHKFRYQkRfTEFTVCB8IFRYQkRfSU5URVJSVVBUKTsKIAotCQkJYnVmYWRkciA9IGRtYV9tYXBfcGFnZSgmZGV2LT5kZXYsCisJCQlidWZhZGRyID0gZG1hX21hcF9wYWdlKCZwcml2LT5vZmRldi0+ZGV2LAogCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2UsCiAJCQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZV9vZmZzZXQsCiAJCQkJCWxlbmd0aCwKQEAgLTEzNDYsNyArMTM5NCw3IEBACiAKIAkvKiBzZXR1cCB0aGUgVHhCRCBsZW5ndGggYW5kIGJ1ZmZlciBwb2ludGVyIGZvciB0aGUgZmlyc3QgQkQgKi8KIAlwcml2LT50eF9za2J1ZmZbcHJpdi0+c2tiX2N1cnR4XSA9IHNrYjsKLQl0eGJkcF9zdGFydC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJmRldi0+ZGV2LCBza2ItPmRhdGEsCisJdHhiZHBfc3RhcnQtPmJ1ZlB0ciA9IGRtYV9tYXBfc2luZ2xlKCZwcml2LT5vZmRldi0+ZGV2LCBza2ItPmRhdGEsCiAJCQlza2JfaGVhZGxlbihza2IpLCBETUFfVE9fREVWSUNFKTsKIAogCWxzdGF0dXMgfD0gQkRfTEZMQUcoVFhCRF9DUkMgfCBUWEJEX1JFQURZKSB8IHNrYl9oZWFkbGVuKHNrYik7CkBAIC0xMzg5LDcgKzE0MzcsNyBAQAogCS8qIFVubG9jayBwcml2ICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhsb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiAvKiBTdG9wcyB0aGUga2VybmVsIHF1ZXVlLCBhbmQgaGFsdHMgdGhlIGNvbnRyb2xsZXIgKi8KQEAgLTEzOTksNiArMTQ0Nyw3IEBACiAKIAluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwogCisJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT5yeF9yZWN5Y2xlKTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5yZXNldF90YXNrKTsKIAlzdG9wX2dmYXIoZGV2KTsKIApAQCAtMTUzMSw3ICsxNTgwLDcgQEAKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBnZmFyX3ByaXZhdGUsCiAJCQlyZXNldF90YXNrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKIAkJc3RvcF9nZmFyKGRldik7CkBAIC0xNTc4LDcgKzE2MjcsNyBAQAogCQkJCShsc3RhdHVzICYgQkRfTEVOR1RIX01BU0spKQogCQkJYnJlYWs7CiAKLQkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5kZXYsCisJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsCiAJCQkJYmRwLT5idWZQdHIsCiAJCQkJYmRwLT5sZW5ndGgsCiAJCQkJRE1BX1RPX0RFVklDRSk7CkBAIC0xNTg3LDcgKzE2MzYsNyBAQAogCQliZHAgPSBuZXh0X3R4YmQoYmRwLCBiYXNlLCB0eF9yaW5nX3NpemUpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBmcmFnczsgaSsrKSB7Ci0JCQlkbWFfdW5tYXBfcGFnZSgmZGV2LT5kZXYsCisJCQlkbWFfdW5tYXBfcGFnZSgmcHJpdi0+b2ZkZXYtPmRldiwKIAkJCQkJYmRwLT5idWZQdHIsCiAJCQkJCWJkcC0+bGVuZ3RoLAogCQkJCQlETUFfVE9fREVWSUNFKTsKQEAgLTE1OTUsNyArMTY0NCwxNyBAQAogCQkJYmRwID0gbmV4dF90eGJkKGJkcCwgYmFzZSwgdHhfcmluZ19zaXplKTsKIAkJfQogCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCS8qCisJCSAqIElmIHRoZXJlJ3Mgcm9vbSBpbiB0aGUgcXVldWUgKGxpbWl0IGl0IHRvIHJ4X2J1ZmZlcl9zaXplKQorCQkgKiB3ZSBhZGQgdGhpcyBza2IgYmFjayBpbnRvIHRoZSBwb29sLCBpZiBpdCdzIHRoZSByaWdodCBzaXplCisJCSAqLworCQlpZiAoc2tiX3F1ZXVlX2xlbigmcHJpdi0+cnhfcmVjeWNsZSkgPCBwcml2LT5yeF9yaW5nX3NpemUgJiYKKwkJCQlza2JfcmVjeWNsZV9jaGVjayhza2IsIHByaXYtPnJ4X2J1ZmZlcl9zaXplICsKKwkJCQkJUlhCVUZfQUxJR05NRU5UKSkKKwkJCV9fc2tiX3F1ZXVlX2hlYWQoJnByaXYtPnJ4X3JlY3ljbGUsIHNrYik7CisJCWVsc2UKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisKIAkJcHJpdi0+dHhfc2tidWZmW3NrYl9kaXJ0eXR4XSA9IE5VTEw7CiAKIAkJc2tiX2RpcnR5dHggPSAoc2tiX2RpcnR5dHggKyAxKSAmCkBAIC0xNjI2LDkgKzE2ODUsOSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eGxvY2ssIGZsYWdzKTsKIAlzcGluX2xvY2soJnByaXYtPnJ4bG9jayk7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKSkgewogCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5pbWFzaywgSU1BU0tfUlRYX0RJU0FCTEVEKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogQ2xlYXIgSUVWRU5ULCBzbyBpbnRlcnJ1cHRzIGFyZW4ndCBjYWxsZWQgYWdhaW4KQEAgLTE2NTQsNyArMTcxMyw3IEBACiAJc3RydWN0IGdmYXJfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIGxzdGF0dXM7CiAKLQliZHAtPmJ1ZlB0ciA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPmRldiwgc2tiLT5kYXRhLAorCWJkcC0+YnVmUHRyID0gZG1hX21hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIHNrYi0+ZGF0YSwKIAkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJbHN0YXR1cyA9IEJEX0xGTEFHKFJYQkRfRU1QVFkgfCBSWEJEX0lOVEVSUlVQVCk7CkBAIC0xNjc0LDggKzE3MzMsMTAgQEAKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAotCS8qIFdlIGhhdmUgdG8gYWxsb2NhdGUgdGhlIHNrYiwgc28ga2VlcCB0cnlpbmcgdGlsbCB3ZSBzdWNjZWVkICovCi0Jc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHByaXYtPnJ4X2J1ZmZlcl9zaXplICsgUlhCVUZfQUxJR05NRU5UKTsKKwlza2IgPSBfX3NrYl9kZXF1ZXVlKCZwcml2LT5yeF9yZWN5Y2xlKTsKKwlpZiAoIXNrYikKKwkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsCisJCQkJcHJpdi0+cnhfYnVmZmVyX3NpemUgKyBSWEJVRl9BTElHTk1FTlQpOwogCiAJaWYgKCFza2IpCiAJCXJldHVybiBOVUxMOwpAQCAtMTgxMiw3ICsxODczLDcgQEAKIAogCQlza2IgPSBwcml2LT5yeF9za2J1ZmZbcHJpdi0+c2tiX2N1cnJ4XTsKIAotCQlkbWFfdW5tYXBfc2luZ2xlKCZwcml2LT5kZXYtPmRldiwgYmRwLT5idWZQdHIsCisJCWRtYV91bm1hcF9zaW5nbGUoJnByaXYtPm9mZGV2LT5kZXYsIGJkcC0+YnVmUHRyLAogCQkJCXByaXYtPnJ4X2J1ZmZlcl9zaXplLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJCS8qIFdlIGRyb3AgdGhlIGZyYW1lIGlmIHdlIGZhaWxlZCB0byBhbGxvY2F0ZSBhIG5ldyBidWZmZXIgKi8KQEAgLTE4MjMsNyArMTg4NCw3IEBACiAJCQlpZiAodW5saWtlbHkoIW5ld3NrYikpCiAJCQkJbmV3c2tiID0gc2tiOwogCQkJZWxzZSBpZiAoc2tiKQotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJX19za2JfcXVldWVfaGVhZCgmcHJpdi0+cnhfcmVjeWNsZSwgc2tiKTsKIAkJfSBlbHNlIHsKIAkJCS8qIEluY3JlbWVudCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgKi8KIAkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwpAQCAtMTgzNSw2ICsxODk2LDggQEAKIAkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAJCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCisJCQkJaWYgKGluX2lycSgpIHx8IGlycXNfZGlzYWJsZWQoKSkKKwkJCQkJcHJpbnRrKCJJbnRlcnJ1cHQgcHJvYmxlbSFcbiIpOwogCQkJCWdmYXJfcHJvY2Vzc19mcmFtZShkZXYsIHNrYiwgYW1vdW50X3B1bGwpOwogCiAJCQl9IGVsc2UgewpAQCAtMTg3MCw3ICsxOTMzLDcgQEAKIHN0YXRpYyBpbnQgZ2Zhcl9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBnZmFyX3ByaXZhdGUsIG5hcGkpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CiAJaW50IHR4X2NsZWFuZWQgPSAwOwogCWludCByeF9jbGVhbmVkID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTg5MSw3ICsxOTU0LDcgQEAKIAkJcmV0dXJuIGJ1ZGdldDsKIAogCWlmIChyeF9jbGVhbmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCS8qIENsZWFyIHRoZSBoYWx0IGJpdCBpbiBSU1RBVCAqLwogCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT5yc3RhdCwgUlNUQVRfQ0xFQVJfUkhBTFQpOwpAQCAtMjMwOCwyMyArMjM3MSwxMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnZmFyX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyID0gZ2Zhcl9tZGlvX2luaXQoKTsKLQotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdmYXJfZHJpdmVyKTsKLQotCWlmIChlcnIpCi0JCWdmYXJfbWRpb19leGl0KCk7Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdmYXJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGdmYXJfZXhpdCh2b2lkKQogewogCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZnZmFyX2RyaXZlcik7Ci0JZ2Zhcl9tZGlvX2V4aXQoKTsKIH0KIAogbW9kdWxlX2luaXQoZ2Zhcl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAppbmRleCBlYWE4Njg5Li5kZDQ5OWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCkBAIC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+Ci0jaW5jbHVkZSAiZ2lhbmZhcl9taWkuaCIKIAogLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdG8gYmUgaGFuZGxlZCBpbiBvbmUgY2FsbCBvZiBnZmFyX3BvbGwgKi8KICNkZWZpbmUgR0ZBUl9ERVZfV0VJR0hUIDY0CkBAIC0xMjYsOSArMTI1LDEyIEBACiAjZGVmaW5lIERFRkFVTFRfUlhfQ09BTEVTQ0UgMAogI2RlZmluZSBERUZBVUxUX1JYQ09VTlQJMAogCi0jZGVmaW5lIE1JSU1DRkdfSU5JVF9WQUxVRQkweDAwMDAwMDA3Ci0jZGVmaW5lIE1JSU1DRkdfUkVTRVQgICAgICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgTUlJTUlORF9CVVNZICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBHRkFSX1NVUFBPUlRFRCAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiBcCisJCXwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCBcCisJCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgXAorCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIFwKKwkJfCBTVVBQT1JURURfQXV0b25lZyBcCisJCXwgU1VQUE9SVEVEX01JSSkKIAogLyogVEJJIHJlZ2lzdGVyIGFkZHJlc3NlcyAqLwogI2RlZmluZSBNSUlfVEJJQ09OCQkweDExCkBAIC03MzYsNyArNzM4LDggQEAKIAlzcGlubG9ja190IHJ4bG9jazsKIAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2OwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCiAJLyogc2tiIGFycmF5IGFuZCBpbmRleCAqLwpAQCAtNzU2LDYgKzc1OSw4IEBACiAJdW5zaWduZWQgaW50IHJ4X3N0YXNoX3NpemU7CiAJdW5zaWduZWQgaW50IHJ4X3N0YXNoX2luZGV4OwogCisJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9yZWN5Y2xlOworCiAJc3RydWN0IHZsYW5fZ3JvdXAgKnZsZ3JwOwogCiAJLyogVW5wcm90ZWN0ZWQgZmllbGRzICovCkBAIC04MjYsOCArODMxLDcgQEAKIGV4dGVybiB2b2lkIGdmYXJfcGh5X3Rlc3Qoc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAkJaW50IGVuYWJsZSwgdTMyIHJlZ251bSwgdTMyIHJlYWQpOwogdm9pZCBnZmFyX2luaXRfc3lzZnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3dyaXRlKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLAotCQkJICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpOwotaW50IGdmYXJfbG9jYWxfbWRpb19yZWFkKHN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZmFyX2V0aHRvb2xfb3BzOwogCiAjZW5kaWYgLyogX19HSUFORkFSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKaW5kZXggNTliM2I1ZC4uZGJmMDZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMKQEAgLTYwMCw2ICs2MDAsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmJmbG9jaywgZmxhZ3MpOwogCXByaXYtPndvbF9lbiA9IHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMgPyAxIDogMDsKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmRldi0+ZGV2LCBwcml2LT53b2xfZW4pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmJmbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5YTQyNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzc5ICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL25ldC9naWFuZmFyX21paS5jCi0gKgotICogR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJTSBidXMgaW1wbGVtZW50YXRpb24KLSAqIFByb3ZpZGVzIEJ1cyBpbnRlcmZhY2UgZm9yIE1JSU0gcmVncwotICoKLSAqIEF1dGhvcjogQW5keSBGbGVtaW5nCi0gKiBNYWludGFpbmVyOiBLdW1hciBHYWxhCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KLSNpbmNsdWRlIDxsaW51eC9waHkuaD4KLSNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImdpYW5mYXIuaCIKLSNpbmNsdWRlICJnaWFuZmFyX21paS5oIgotCi0vKgotICogV3JpdGUgdmFsdWUgdG8gdGhlIFBIWSBhdCBtaWlfaWQgYXQgcmVnaXN0ZXIgcmVnbnVtLAotICogb24gdGhlIGJ1cyBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLCB3aGljaCBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlCi0gKiBnZW5lcmljIG1kaW8gYnVzICh0aWVkIHRvIGEgc2luZ2xlIGludGVyZmFjZSksIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzCi0gKiBkb25lIGJlZm9yZSByZXR1cm5pbmcuIFRoaXMgaXMgaGVscGZ1bCBpbiBwcm9ncmFtbWluZyBpbnRlcmZhY2VzIGxpa2UKLSAqIHRoZSBUQkkgd2hpY2ggY29udHJvbCBpbnRlcmZhY2VzIGxpa2Ugb25jaGlwIFNFUkRFUyBhbmQgYXJlIGFsd2F5cyB0aWVkIHRvCi0gKiB0aGUgbG9jYWwgbWRpbyBwaW5zLCB3aGljaCBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHN5c3RlbSBtZGlvIGJ1cywgdXNlZCBmb3IKLSAqIGNvbnRyb2xsaW5nIHRoZSBleHRlcm5hbCBQSFlzLCBmb3IgZXhhbXBsZS4KLSAqLwotaW50IGdmYXJfbG9jYWxfbWRpb193cml0ZShzdHJ1Y3QgZ2Zhcl9taWkgX19pb21lbSAqcmVncywgaW50IG1paV9pZCwKLQkJCSAgaW50IHJlZ251bSwgdTE2IHZhbHVlKQotewotCS8qIFNldCB0aGUgUEhZIGFkZHJlc3MgYW5kIHRoZSByZWdpc3RlciBhZGRyZXNzIHdlIHdhbnQgdG8gd3JpdGUgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltYWRkLCAobWlpX2lkIDw8IDgpIHwgcmVnbnVtKTsKLQotCS8qIFdyaXRlIG91dCB0aGUgdmFsdWUgd2Ugd2FudCAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1jb24sIHZhbHVlKTsKLQotCS8qIFdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byBmaW5pc2ggKi8KLQl3aGlsZSAoZ2Zhcl9yZWFkKCZyZWdzLT5taWltaW5kKSAmIE1JSU1JTkRfQlVTWSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlYWQgdGhlIGJ1cyBmb3IgUEhZIGF0IGFkZHIgbWlpX2lkLCByZWdpc3RlciByZWdudW0sIGFuZAotICogcmV0dXJuIHRoZSB2YWx1ZS4gIENsZWFycyBtaWltY29tIGZpcnN0LiAgQWxsIFBIWSBvcGVyYXRpb24KLSAqIGRvbmUgb24gdGhlIGJ1cyBhdHRhY2hlZCB0byB0aGUgbG9jYWwgaW50ZXJmYWNlLAotICogd2hpY2ggbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBnZW5lcmljIG1kaW8gYnVzCi0gKiBUaGlzIGlzIGhlbHBmdWwgaW4gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlcyBsaWtlCi0gKiB0aGUgVEJJIHdoaWNoLCBpbnR1cm4sIGNvbnRyb2wgaW50ZXJmYWNlcyBsaWtlIG9uY2hpcCBTRVJERVMKLSAqIGFuZCBhcmUgYWx3YXlzIHRpZWQgdG8gdGhlIGxvY2FsIG1kaW8gcGlucywgd2hpY2ggbWF5IG5vdCBiZSB0aGUKLSAqIHNhbWUgYXMgc3lzdGVtIG1kaW8gYnVzLCB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgZXh0ZXJuYWwgUEhZcywgZm9yIGVnLgotICovCi1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsIGludCByZWdudW0pCi17Ci0JdTE2IHZhbHVlOwotCi0JLyogU2V0IHRoZSBQSFkgYWRkcmVzcyBhbmQgdGhlIHJlZ2lzdGVyIGFkZHJlc3Mgd2Ugd2FudCB0byByZWFkICovCi0JZ2Zhcl93cml0ZSgmcmVncy0+bWlpbWFkZCwgKG1paV9pZCA8PCA4KSB8IHJlZ251bSk7Ci0KLQkvKiBDbGVhciBtaWltY29tLCBhbmQgdGhlbiBpbml0aWF0ZSBhIHJlYWQgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY29tLCAwKTsKLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY29tLCBNSUlfUkVBRF9DT01NQU5EKTsKLQotCS8qIFdhaXQgZm9yIHRoZSB0cmFuc2FjdGlvbiB0byBmaW5pc2ggKi8KLQl3aGlsZSAoZ2Zhcl9yZWFkKCZyZWdzLT5taWltaW5kKSAmIChNSUlNSU5EX05PVFZBTElEIHwgTUlJTUlORF9CVVNZKSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQkvKiBHcmFiIHRoZSB2YWx1ZSBvZiB0aGUgcmVnaXN0ZXIgZnJvbSBtaWltc3RhdCAqLwotCXZhbHVlID0gZ2Zhcl9yZWFkKCZyZWdzLT5taWltc3RhdCk7Ci0KLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLS8qIFdyaXRlIHZhbHVlIHRvIHRoZSBQSFkgYXQgbWlpX2lkIGF0IHJlZ2lzdGVyIHJlZ251bSwKLSAqIG9uIHRoZSBidXMsIHdhaXRpbmcgdW50aWwgdGhlIHdyaXRlIGlzIGRvbmUgYmVmb3JlIHJldHVybmluZy4KLSAqIEFsbCBQSFkgY29uZmlndXJhdGlvbiBpcyBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLwotaW50IGdmYXJfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCi17Ci0Jc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCi0JLyogV3JpdGUgdG8gdGhlIGxvY2FsIE1JSSByZWdzICovCi0JcmV0dXJuKGdmYXJfbG9jYWxfbWRpb193cml0ZShyZWdzLCBtaWlfaWQsIHJlZ251bSwgdmFsdWUpKTsKLX0KLQotLyogUmVhZCB0aGUgYnVzIGZvciBQSFkgYXQgYWRkciBtaWlfaWQsIHJlZ2lzdGVyIHJlZ251bSwgYW5kCi0gKiByZXR1cm4gdGhlIHZhbHVlLiAgQ2xlYXJzIG1paW1jb20gZmlyc3QuICBBbGwgUEhZCi0gKiBjb25maWd1cmF0aW9uIGhhcyB0byBiZSBkb25lIHRocm91Z2ggdGhlIFRTRUMxIE1JSU0gcmVncyAqLwotaW50IGdmYXJfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBtaWlfaWQsIGludCByZWdudW0pCi17Ci0Jc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCi0JLyogUmVhZCB0aGUgbG9jYWwgTUlJIHJlZ3MgKi8KLQlyZXR1cm4oZ2Zhcl9sb2NhbF9tZGlvX3JlYWQocmVncywgbWlpX2lkLCByZWdudW0pKTsKLX0KLQotLyogUmVzZXQgdGhlIE1JSU0gcmVnaXN0ZXJzLCBhbmQgd2FpdCBmb3IgdGhlIGJ1cyB0byBmcmVlICovCi1zdGF0aWMgaW50IGdmYXJfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQotewotCXN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKLQl1bnNpZ25lZCBpbnQgdGltZW91dCA9IFBIWV9JTklUX1RJTUVPVVQ7Ci0KLQltdXRleF9sb2NrKCZidXMtPm1kaW9fbG9jayk7Ci0KLQkvKiBSZXNldCB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgKi8KLQlnZmFyX3dyaXRlKCZyZWdzLT5taWltY2ZnLCBNSUlNQ0ZHX1JFU0VUKTsKLQotCS8qIFNldHVwIHRoZSBNSUkgTWdtdCBjbG9jayBzcGVlZCAqLwotCWdmYXJfd3JpdGUoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfSU5JVF9WQUxVRSk7Ci0KLQkvKiBXYWl0IHVudGlsIHRoZSBidXMgaXMgZnJlZSAqLwotCXdoaWxlICgoZ2Zhcl9yZWFkKCZyZWdzLT5taWltaW5kKSAmIE1JSU1JTkRfQlVTWSkgJiYKLQkJCS0tdGltZW91dCkKLQkJY3B1X3JlbGF4KCk7Ci0KLQltdXRleF91bmxvY2soJmJ1cy0+bWRpb19sb2NrKTsKLQotCWlmKHRpbWVvdXQgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUaGUgTUlJIEJ1cyBpcyBzdHVjayFcbiIsCi0JCQkJYnVzLT5uYW1lKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQWxsb2NhdGUgYW4gYXJyYXkgd2hpY2ggcHJvdmlkZXMgaXJxICNzIGZvciBlYWNoIFBIWSBvbiB0aGUgZ2l2ZW4gYnVzICovCi1zdGF0aWMgaW50ICpjcmVhdGVfaXJxX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCWludCAqaXJxczsKLQlpbnQgaTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkID0gTlVMTDsKLQotCWlycXMgPSBrY2FsbG9jKFBIWV9NQVhfQUREUiwgc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwotCi0JaWYgKCFpcnFzKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAoaSA9IDA7IGkgPCBQSFlfTUFYX0FERFI7IGkrKykKLQkJaXJxc1tpXSA9IFBIWV9QT0xMOwotCi0Jd2hpbGUgKChjaGlsZCA9IG9mX2dldF9uZXh0X2NoaWxkKG5wLCBjaGlsZCkpICE9IE5VTEwpIHsKLQkJaW50IGlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGNoaWxkLCAwKTsKLQkJY29uc3QgdTMyICppZDsKLQotCQlpZiAoaXJxID09IE5PX0lSUSkKLQkJCWNvbnRpbnVlOwotCi0JCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7Ci0KLQkJaWYgKCFpZCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICgqaWQgPCBQSFlfTUFYX0FERFIgJiYgKmlkID49IDApCi0JCQlpcnFzWyppZF0gPSBpcnE7Ci0JCWVsc2UKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCi0JCQkJCSIlZCBpcyBub3QgYSB2YWxpZCBQSFkgYWRkcmVzc1xuIiwKLQkJCQkJbnAtPmZ1bGxfbmFtZSwgKmlkKTsKLQl9Ci0KLQlyZXR1cm4gaXJxczsKLX0KLQotCi12b2lkIGdmYXJfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQotewotCWNvbnN0IHUzMiAqcmVnOwotCi0JcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7Ci0KLQlzbnByaW50ZihuYW1lLCBNSUlfQlVTX0lEX1NJWkUsICIlc0AleCIsIG5wLT5uYW1lLCByZWcgPyAqcmVnIDogMCk7Ci19Ci0KLS8qIFNjYW4gdGhlIGJ1cyBpbiByZXZlcnNlLCBsb29raW5nIGZvciBhbiBlbXB0eSBzcG90ICovCi1zdGF0aWMgaW50IGdmYXJfbWRpb19maW5kX2ZyZWUoc3RydWN0IG1paV9idXMgKm5ld19idXMpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSBQSFlfTUFYX0FERFI7IGkgPiAwOyBpLS0pIHsKLQkJdTMyIHBoeV9pZDsKLQotCQlpZiAoZ2V0X3BoeV9pZChuZXdfYnVzLCBpLCAmcGh5X2lkKSkKLQkJCXJldHVybiAtMTsKLQotCQlpZiAocGh5X2lkID09IDB4ZmZmZmZmZmYpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIGludCBnZmFyX21kaW9fcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCi0JCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQotewotCXN0cnVjdCBnZmFyX21paSBfX2lvbWVtICpyZWdzOwotCXN0cnVjdCBnZmFyIF9faW9tZW0gKmVuZXRfcmVnczsKLQlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKLQlpbnQgZXJyID0gMDsKLQl1NjQgYWRkciwgc2l6ZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGU7Ci0Jc3RydWN0IGRldmljZV9ub2RlICp0Ymk7Ci0JaW50IHRiaWFkZHIgPSAtMTsKLQotCW5ld19idXMgPSBtZGlvYnVzX2FsbG9jKCk7Ci0JaWYgKE5VTEwgPT0gbmV3X2J1cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlkZXZpY2VfaW5pdF93YWtldXAoJm9mZGV2LT5kZXYsIDEpOwotCi0JbmV3X2J1cy0+bmFtZSA9ICJHaWFuZmFyIE1JSSBCdXMiLAotCW5ld19idXMtPnJlYWQgPSAmZ2Zhcl9tZGlvX3JlYWQsCi0JbmV3X2J1cy0+d3JpdGUgPSAmZ2Zhcl9tZGlvX3dyaXRlLAotCW5ld19idXMtPnJlc2V0ID0gJmdmYXJfbWRpb19yZXNldCwKLQlnZmFyX21kaW9fYnVzX25hbWUobmV3X2J1cy0+aWQsIG5wKTsKLQotCS8qIFNldCB0aGUgUEhZIGJhc2UgYWRkcmVzcyAqLwotCWFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgb2ZfZ2V0X2FkZHJlc3MobnAsIDAsICZzaXplLCBOVUxMKSk7Ci0JcmVncyA9IGlvcmVtYXAoYWRkciwgc2l6ZSk7Ci0KLQlpZiAoTlVMTCA9PSByZWdzKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2ZyZWVfYnVzOwotCX0KLQotCW5ld19idXMtPnByaXYgPSAodm9pZCBfX2ZvcmNlICopcmVnczsKLQotCW5ld19idXMtPmlycSA9IGNyZWF0ZV9pcnFfbWFwKG5wKTsKLQotCWlmIChuZXdfYnVzLT5pcnEgPT0gTlVMTCkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycl91bm1hcF9yZWdzOwotCX0KLQotCW5ld19idXMtPnBhcmVudCA9ICZvZmRldi0+ZGV2OwotCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgbmV3X2J1cyk7Ci0KLQkvKgotCSAqIFRoaXMgaXMgbWlsZGx5IGV2aWwsIGJ1dCBzbyBpcyBvdXIgaGFyZHdhcmUgZm9yIGRvaW5nIHRoaXMuCi0JICogQWxzbywgd2UgaGF2ZSB0byBjYXN0IGJhY2sgdG8gc3RydWN0IGdmYXJfbWlpIGJlY2F1c2Ugb2YKLQkgKiBkZWZpbml0aW9uIHdlaXJkbmVzcyBkb25lIGluIGdpYW5mYXIuaC4KLQkgKi8KLQllbmV0X3JlZ3MgPSAoc3RydWN0IGdmYXIgX19pb21lbSAqKQotCQkoKGNoYXIgKilyZWdzIC0gb2Zmc2V0b2Yoc3RydWN0IGdmYXIsIGdmYXJfbWlpX3JlZ3MpKTsKLQotCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIHRiaSkgewotCQlpZiAoIXN0cm5jbXAodGJpLT50eXBlLCAidGJpLXBoeSIsIDgpKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKHRiaSkgewotCQljb25zdCB1MzIgKnByb3AgPSBvZl9nZXRfcHJvcGVydHkodGJpLCAicmVnIiwgTlVMTCk7Ci0KLQkJaWYgKHByb3ApCi0JCQl0YmlhZGRyID0gKnByb3A7Ci0JfQotCi0JaWYgKHRiaWFkZHIgPT0gLTEpIHsKLQkJZ2Zhcl93cml0ZSgmZW5ldF9yZWdzLT50YmlwYSwgMCk7Ci0KLQkJdGJpYWRkciA9IGdmYXJfbWRpb19maW5kX2ZyZWUobmV3X2J1cyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBkZWZpbmUgVEJJUEEgYXQgMCB0byBiZSBpbGxlZ2FsLCBvcHRpbmcgdG8gZmFpbCBmb3IgYm9hcmRzIHRoYXQKLQkgKiBoYXZlIFBIWXMgYXQgMS0zMSwgcmF0aGVyIHRoYW4gY2hhbmdlIHRiaXBhIGFuZCByZXNjYW4uCi0JICovCi0JaWYgKHRiaWFkZHIgPT0gMCkgewotCQllcnIgPSAtRUJVU1k7Ci0KLQkJZ290byBlcnJfZnJlZV9pcnFzOwotCX0KLQotCWdmYXJfd3JpdGUoJmVuZXRfcmVncy0+dGJpcGEsIHRiaWFkZHIpOwotCi0JLyoKLQkgKiBUaGUgVEJJUEhZLW9ubHkgYnVzZXMgd2lsbCBmaW5kIFBIWXMgYXQgZXZlcnkgYWRkcmVzcywKLQkgKiBzbyB3ZSBtYXNrIHRoZW0gYWxsIGJ1dCB0aGUgVEJJCi0JICovCi0JaWYgKCFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImZzbCxnaWFuZmFyLW1kaW8iKSkKLQkJbmV3X2J1cy0+cGh5X21hc2sgPSB+KDEgPDwgdGJpYWRkcik7Ci0KLQllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpOwotCi0JaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgYXMgTURJTyBidXNcbiIsCi0JCQkJbmV3X2J1cy0+bmFtZSk7Ci0JCWdvdG8gZXJyX2ZyZWVfaXJxczsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZXJyX2ZyZWVfaXJxczoKLQlrZnJlZShuZXdfYnVzLT5pcnEpOwotZXJyX3VubWFwX3JlZ3M6Ci0JaW91bm1hcChyZWdzKTsKLWVycl9mcmVlX2J1czoKLQltZGlvYnVzX2ZyZWUobmV3X2J1cyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0KLXN0YXRpYyBpbnQgZ2Zhcl9tZGlvX3JlbW92ZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKLXsKLQlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKLQotCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOwotCi0JZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBOVUxMKTsKLQotCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdik7Ci0JYnVzLT5wcml2ID0gTlVMTDsKLQlrZnJlZShidXMtPmlycSk7Ci0JbWRpb2J1c19mcmVlKGJ1cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZ2Zhcl9tZGlvX21hdGNoW10gPQotewotCXsKLQkJLmNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyIsCi0JfSwKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSIsCi0JfSwKLQl7Ci0JCS50eXBlID0gIm1kaW8iLAotCQkuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwKLQl9LAotCXt9LAotfTsKLQotc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgZ2lhbmZhcl9tZGlvX2RyaXZlciA9IHsKLQkubmFtZSA9ICJmc2wtZ2lhbmZhcl9tZGlvIiwKLQkubWF0Y2hfdGFibGUgPSBnZmFyX21kaW9fbWF0Y2gsCi0KLQkucHJvYmUgPSBnZmFyX21kaW9fcHJvYmUsCi0JLnJlbW92ZSA9IGdmYXJfbWRpb19yZW1vdmUsCi19OwotCi1pbnQgX19pbml0IGdmYXJfbWRpb19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ2lhbmZhcl9tZGlvX2RyaXZlcik7Ci19Ci0KLXZvaWQgZ2Zhcl9tZGlvX2V4aXQodm9pZCkKLXsKLQlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ2lhbmZhcl9tZGlvX2RyaXZlcik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjMjQyYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmgKLSAqCi0gKiBHaWFuZmFyIEV0aGVybmV0IERyaXZlciAtLSBNSUkgTWFuYWdlbWVudCBCdXMgSW1wbGVtZW50YXRpb24KLSAqIERyaXZlciBmb3IgdGhlIE1ESU8gYnVzIGNvbnRyb2xsZXIgaW4gdGhlIEdpYW5mYXIgcmVnaXN0ZXIgc3BhY2UKLSAqCi0gKiBBdXRob3I6IEFuZHkgRmxlbWluZwotICogTWFpbnRhaW5lcjogS3VtYXIgR2FsYQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpZm5kZWYgX19HSUFORkFSX01JSV9ICi0jZGVmaW5lIF9fR0lBTkZBUl9NSUlfSAotCi1zdHJ1Y3QgZ2Zhcl9wcml2YXRlOyAvKiBmb3J3YXJkIHJlZiAqLwotCi0jZGVmaW5lIE1JSU1JTkRfQlVTWSAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUlJTUlORF9OT1RWQUxJRCAgICAgICAgMHgwMDAwMDAwNAotCi0jZGVmaW5lIE1JSV9SRUFEX0NPTU1BTkQgICAgICAgMHgwMDAwMDAwMQotCi0jZGVmaW5lIEdGQVJfU1VQUE9SVEVEIChTVVBQT1JURURfMTBiYXNlVF9IYWxmIFwKLQkJfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsIFwKLQkJfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiBcCi0JCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgXAotCQl8IFNVUFBPUlRFRF9BdXRvbmVnIFwKLQkJfCBTVVBQT1JURURfTUlJKQotCi1zdHJ1Y3QgZ2Zhcl9taWkgewotCXUzMgltaWltY2ZnOwkvKiAweC41MjAgLSBNSUkgTWFuYWdlbWVudCBDb25maWcgUmVnaXN0ZXIgKi8KLQl1MzIJbWlpbWNvbTsJLyogMHguNTI0IC0gTUlJIE1hbmFnZW1lbnQgQ29tbWFuZCBSZWdpc3RlciAqLwotCXUzMgltaWltYWRkOwkvKiAweC41MjggLSBNSUkgTWFuYWdlbWVudCBBZGRyZXNzIFJlZ2lzdGVyICovCi0JdTMyCW1paW1jb247CS8qIDB4LjUyYyAtIE1JSSBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIgKi8KLQl1MzIJbWlpbXN0YXQ7CS8qIDB4LjUzMCAtIE1JSSBNYW5hZ2VtZW50IFN0YXR1cyBSZWdpc3RlciAqLwotCXUzMgltaWltaW5kOwkvKiAweC41MzQgLSBNSUkgTWFuYWdlbWVudCBJbmRpY2F0b3IgUmVnaXN0ZXIgKi8KLX07Ci0KLWludCBnZmFyX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKLWludCBnZmFyX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKLWludCBnZmFyX2xvY2FsX21kaW9fd3JpdGUoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsCi0JCQkgIGludCByZWdudW0sIHUxNiB2YWx1ZSk7Ci1pbnQgZ2Zhcl9sb2NhbF9tZGlvX3JlYWQoc3RydWN0IGdmYXJfbWlpIF9faW9tZW0gKnJlZ3MsIGludCBtaWlfaWQsIGludCByZWdudW0pOwotc3RydWN0IG1paV9idXMgKmdmYXJfZ2V0X21paWJ1cyhjb25zdCBzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KTsKLWludCBfX2luaXQgZ2Zhcl9tZGlvX2luaXQodm9pZCk7Ci12b2lkIGdmYXJfbWRpb19leGl0KHZvaWQpOwotCi12b2lkIGdmYXJfbWRpb19idXNfbmFtZShjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKTsKLSNlbmRpZiAvKiBHSUFORkFSX1BIWV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKaW5kZXggNzgyYzIwMS4uZGQyNmRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYwpAQCAtNTMsNiArNTMsOSBAQAogCXUzMiB0ZW1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAoIShwcml2LT5kZXZpY2VfZmxhZ3MgJiBGU0xfR0lBTkZBUl9ERVZfSEFTX0JEX1NUQVNISU5HKSkKKwkJcmV0dXJuIGNvdW50OworCiAJLyogRmluZCBvdXQgdGhlIG5ldyBzZXR0aW5nICovCiAJaWYgKCFzdHJuY21wKCJvbiIsIGJ1ZiwgY291bnQgLSAxKSB8fCAhc3RybmNtcCgiMSIsIGJ1ZiwgY291bnQgLSAxKSkKIAkJbmV3X3NldHRpbmcgPSAxOwpAQCAtODEsNyArODQsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotREVWSUNFX0FUVFIoYmRfc3Rhc2gsIDA2NDQsIGdmYXJfc2hvd19iZF9zdGFzaCwgZ2Zhcl9zZXRfYmRfc3Rhc2gpOworc3RhdGljIERFVklDRV9BVFRSKGJkX3N0YXNoLCAwNjQ0LCBnZmFyX3Nob3dfYmRfc3Rhc2gsIGdmYXJfc2V0X2JkX3N0YXNoKTsKIAogc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X3J4X3N0YXNoX3NpemUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMTAwLDYgKzEwMyw5IEBACiAJdTMyIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmICghKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HKSkKKwkJcmV0dXJuIGNvdW50OworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogCWlmIChsZW5ndGggPiBwcml2LT5yeF9idWZmZXJfc2l6ZSkKIAkJZ290byBvdXQ7CkBAIC0xMzAsOCArMTM2LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKHJ4X3N0YXNoX3NpemUsIDA2NDQsIGdmYXJfc2hvd19yeF9zdGFzaF9zaXplLAotCSAgICBnZmFyX3NldF9yeF9zdGFzaF9zaXplKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyeF9zdGFzaF9zaXplLCAwNjQ0LCBnZmFyX3Nob3dfcnhfc3Rhc2hfc2l6ZSwKKwkJICAgZ2Zhcl9zZXRfcnhfc3Rhc2hfc2l6ZSk7CiAKIC8qIFN0YXNoaW5nIHdpbGwgb25seSBiZSBlbmFibGVkIHdoZW4gcnhfc3Rhc2hfc2l6ZSAhPSAwICovCiBzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfcnhfc3Rhc2hfaW5kZXgoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMTUyLDYgKzE1OCw5IEBACiAJdTMyIHRlbXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmICghKHByaXYtPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQlVGX1NUQVNISU5HKSkKKwkJcmV0dXJuIGNvdW50OworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4bG9jaywgZmxhZ3MpOwogCWlmIChpbmRleCA+IHByaXYtPnJ4X3N0YXNoX3NpemUpCiAJCWdvdG8gb3V0OwpAQCAtMTcyLDggKzE4MSw4IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1ERVZJQ0VfQVRUUihyeF9zdGFzaF9pbmRleCwgMDY0NCwgZ2Zhcl9zaG93X3J4X3N0YXNoX2luZGV4LAotCSAgICBnZmFyX3NldF9yeF9zdGFzaF9pbmRleCk7CitzdGF0aWMgREVWSUNFX0FUVFIocnhfc3Rhc2hfaW5kZXgsIDA2NDQsIGdmYXJfc2hvd19yeF9zdGFzaF9pbmRleCwKKwkJICAgZ2Zhcl9zZXRfcnhfc3Rhc2hfaW5kZXgpOwogCiBzdGF0aWMgc3NpemVfdCBnZmFyX3Nob3dfZmlmb190aHJlc2hvbGQoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTIxMCw4ICsyMTksOCBAQAogCXJldHVybiBjb3VudDsKIH0KIAotREVWSUNFX0FUVFIoZmlmb190aHJlc2hvbGQsIDA2NDQsIGdmYXJfc2hvd19maWZvX3RocmVzaG9sZCwKLQkgICAgZ2Zhcl9zZXRfZmlmb190aHJlc2hvbGQpOworc3RhdGljIERFVklDRV9BVFRSKGZpZm9fdGhyZXNob2xkLCAwNjQ0LCBnZmFyX3Nob3dfZmlmb190aHJlc2hvbGQsCisJCSAgIGdmYXJfc2V0X2ZpZm9fdGhyZXNob2xkKTsKIAogc3RhdGljIHNzaXplX3QgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC0yNDcsNyArMjU2LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKGZpZm9fc3RhcnZlLCAwNjQ0LCBnZmFyX3Nob3dfZmlmb19zdGFydmUsIGdmYXJfc2V0X2ZpZm9fc3RhcnZlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWZvX3N0YXJ2ZSwgMDY0NCwgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlLAorCQkgICBnZmFyX3NldF9maWZvX3N0YXJ2ZSk7CiAKIHN0YXRpYyBzc2l6ZV90IGdmYXJfc2hvd19maWZvX3N0YXJ2ZV9vZmYoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC0yODQsOCArMjk0LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLURFVklDRV9BVFRSKGZpZm9fc3RhcnZlX29mZiwgMDY0NCwgZ2Zhcl9zaG93X2ZpZm9fc3RhcnZlX29mZiwKLQkgICAgZ2Zhcl9zZXRfZmlmb19zdGFydmVfb2ZmKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihmaWZvX3N0YXJ2ZV9vZmYsIDA2NDQsIGdmYXJfc2hvd19maWZvX3N0YXJ2ZV9vZmYsCisJCSAgIGdmYXJfc2V0X2ZpZm9fc3RhcnZlX29mZik7CiAKIHZvaWQgZ2Zhcl9pbml0X3N5c2ZzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0yOTMsMTIgKzMwMyw5IEBACiAJaW50IHJjOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB2YWx1ZXMgKi8KLQlwcml2LT5yeF9zdGFzaF9zaXplID0gREVGQVVMVF9TVEFTSF9MRU5HVEg7Ci0JcHJpdi0+cnhfc3Rhc2hfaW5kZXggPSBERUZBVUxUX1NUQVNIX0lOREVYOwogCXByaXYtPmZpZm9fdGhyZXNob2xkID0gREVGQVVMVF9GSUZPX1RYX1RIUjsKIAlwcml2LT5maWZvX3N0YXJ2ZSA9IERFRkFVTFRfRklGT19UWF9TVEFSVkU7CiAJcHJpdi0+Zmlmb19zdGFydmVfb2ZmID0gREVGQVVMVF9GSUZPX1RYX1NUQVJWRV9PRkY7Ci0JcHJpdi0+YmRfc3Rhc2hfZW4gPSBERUZBVUxUX0JEX1NUQVNIOwogCiAJLyogQ3JlYXRlIG91ciBzeXNmcyBmaWxlcyAqLwogCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2JkX3N0YXNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwppbmRleCA3ZThiM2M1Li4zMTBlZTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCkBAIC0xNzEsNyArMTcxLDcgQEAKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRjb25zdCA9CiBLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiIKIEtFUk5fSU5GTyAiICAgU29tZSBtb2RpZmljYXRpb25zIGJ5IEVyaWMga2FzdGVuIDxrYXN0ZW5AbnNjbC5tc3UuZWR1PlxuIgogS0VSTl9JTkZPICIgICBGdXJ0aGVyIG1vZGlmaWNhdGlvbnMgYnkgS2VpdGggVW5kZXJ3b29kIDxrZWl0aHVAcGFybC5jbGVtc29uLmVkdT5cbiI7CkBAIC0xMjQ0LDcgKzEyNDQsNyBAQAogICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+c2FkZHIgJiAweGZmZmYpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5kYWRkciA+PiAxNik7IFwKICAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyICYgMHhmZmZmKTsgXAotICAgIGNzdW1fYWRkKHN1bSwgX19jb25zdGFudF9odG9ucyhJUFBST1RPX1VEUCkpOyBcCisgICAgY3N1bV9hZGQoc3VtLCBjcHVfdG9fYmUxNihJUFBST1RPX1VEUCkpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCAodWgpLT5sZW4pOyBcCiB9IHdoaWxlICgwKQogCkBAIC0xMjU1LDcgKzEyNTUsNyBAQAogICAgIGNzdW1fYWRkKHN1bSwgKGloKS0+c2FkZHIgJiAweGZmZmYpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCAoaWgpLT5kYWRkciA+PiAxNik7IFwKICAgICBjc3VtX2FkZChzdW0sIChpaCktPmRhZGRyICYgMHhmZmZmKTsgXAotICAgIGNzdW1fYWRkKHN1bSwgX19jb25zdGFudF9odG9ucyhJUFBST1RPX1RDUCkpOyBcCisgICAgY3N1bV9hZGQoc3VtLCBjcHVfdG9fYmUxNihJUFBST1RPX1RDUCkpOyBcCiAgICAgY3N1bV9hZGQoc3VtLCBodG9ucyhsZW4pKTsgXAogfSB3aGlsZSAoMCkKICNlbmRpZgpAQCAtMTI5Niw3ICsxMjk2LDcgQEAKIAkgICAgLyogdGFjayBvbiBjaGVja3N1bSB0YWcgKi8KIAkgICAgdTMyIHRhZ3ZhbCA9IDA7CiAJICAgIHN0cnVjdCBldGhoZHIgKmVoID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7Ci0JICAgIGlmIChlaC0+aF9wcm90byA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSkgeworCSAgICBpZiAoZWgtPmhfcHJvdG8gPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKSB7CiAJCXN0cnVjdCBpcGhkciAqaWggPSAoc3RydWN0IGlwaGRyICopKChjaGFyICopZWggKyBFVEhfSExFTik7CiAJCWlmIChpaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKIAkJICAgIHN0cnVjdCB1ZHBoZHIgKnVoCkBAIC0xNjA1LDcgKzE2MDUsNyBAQAogCQkJCSAqLwogCQkJCWlmIChudG9ocyhpaC0+dG90X2xlbikgPj0gNDYpewogCQkJCQkvKiBkb24ndCB3b3JyeSBhYm91dCBmcmFncyAqLwotCQkJCQlpZiAoIShpaC0+ZnJhZ19vZmYgJiBfX2NvbnN0YW50X2h0b25zKElQX01GfElQX09GRlNFVCkpKSB7CisJCQkJCWlmICghKGloLT5mcmFnX29mZiAmIGNwdV90b19iZTE2KElQX01GfElQX09GRlNFVCkpKSB7CiAJCQkJCQl1MzIgaW52ID0gKih1MzIgKikgJmJ1Zl9hZGRyW2RhdGFfc2l6ZSAtIDE2XTsKIAkJCQkJCXUzMiAqcCA9ICh1MzIgKikgJmJ1Zl9hZGRyW2RhdGFfc2l6ZSAtIDIwXTsKIAkJCQkJCXJlZ2lzdGVyIHUzMiBjcmMsIHBfciwgcF9yMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCmluZGV4IDJkNDA4OTguLjE1NTE2MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwpAQCAtMzIyLDIzICszMjIsMjUgQEAKIAkucmVidWlsZAk9IHNwX3JlYnVpbGRfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzcF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBzcF9vcGVuX2RldiwKKwkubmRvX3N0b3AJCT0gc3BfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHNwX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgICAgPSBzcF9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgdm9pZCBzcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCS8qIEZpbmlzaCBzZXR0aW5nIHVwIHRoZSBERVZJQ0UgaW5mby4gKi8KLQlkZXYtPm10dQkJPSBTSVhQX01UVTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHNwX3htaXQ7Ci0JZGV2LT5vcGVuCQk9IHNwX29wZW5fZGV2OworCWRldi0+bmV0ZGV2X29wcwkJPSAmc3BfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7Ci0JZGV2LT5zdG9wCQk9IHNwX2Nsb3NlOwotCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgICAgPSBzcF9zZXRfbWFjX2FkZHJlc3M7CisJZGV2LT5tdHUJCT0gU0lYUF9NVFU7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSBBWDI1X01BWF9IRUFERVJfTEVOOwogCWRldi0+aGVhZGVyX29wcyAJPSAmc3BfaGVhZGVyX29wczsKIAogCWRldi0+YWRkcl9sZW4JCT0gQVgyNV9BRERSX0xFTjsKIAlkZXYtPnR5cGUJCT0gQVJQSFJEX0FYMjU7CiAJZGV2LT50eF9xdWV1ZV9sZW4JPSAxMDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gTlVMTDsKIAogCS8qIE9ubHkgYWN0aXZhdGVkIGluIEFYLjI1IG1vZGUgKi8KIAltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKQEAgLTc4OCw5ICs3OTAsOSBAQAogCiAvKiBJbml0aWFsaXplIDZwYWNrIGNvbnRyb2wgZGV2aWNlIC0tIHJlZ2lzdGVyIDZwYWNrIGxpbmUgZGlzY2lwbGluZSAqLwogCi1zdGF0aWMgY2hhciBtc2dfYmFubmVyW10gIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gXAorc3RhdGljIGNvbnN0IGNoYXIgbXNnX2Jhbm5lcltdICBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKIAkiQVguMjU6IDZwYWNrIGRyaXZlciwgIiBTSVhQQUNLX1ZFUlNJT04gIlxuIjsKLXN0YXRpYyBjaGFyIG1zZ19yZWdmYWlsW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSICBcCitzdGF0aWMgY29uc3QgY2hhciBtc2dfcmVnZmFpbFtdIF9faW5pdGRhdGEgPSBLRVJOX0VSUiAgXAogCSI2cGFjazogY2FuJ3QgcmVnaXN0ZXIgbGluZSBkaXNjaXBsaW5lIChlcnIgPSAlZClcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNpeHBhY2tfaW5pdF9kcml2ZXIodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JheWNvbV9lcHAuYwppbmRleCA4MWE2NWUzLi5iYjc4YzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9iYXljb21fZXBwLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX2VwcC5jCkBAIC0yMDMsNyArMjAzLDYgQEAKIAkJdW5zaWduZWQgY2hhciBidWZbVFhCVUZGRVJfU0laRV07CiAgICAgICAgIH0gaGRsY3R4OwogCi0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIGludCBwdHRfa2V5ZWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsgIC8qIG5leHQgdHJhbnNtaXQgcGFja2V0ICAqLwogCkBAIC00MjMsNyArNDIyLDcgQEAKIAliYy0+aGRsY3R4LmJ1ZnB0ciA9IGJjLT5oZGxjdHguYnVmOwogCWJjLT5oZGxjdHguYnVmY250ID0gd3AgLSBiYy0+aGRsY3R4LmJ1ZjsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JYmMtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwliYy0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTU0Nyw3ICs1NDYsNyBAQAogCXBrdGxlbiA9IGJjLT5oZGxjcnguYnVmY250LTIrMTsgLyogS0lTUyBrbHVkZ2UgKi8KIAlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdGxlbikpKSB7CiAJCXByaW50aygiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCWJjLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCWNwID0gc2tiX3B1dChza2IsIHBrdGxlbik7CkBAIC01NTUsNyArNTU0LDcgQEAKIAltZW1jcHkoY3AsIGJjLT5oZGxjcnguYnVmLCBwa3RsZW4gLSAxKTsKIAlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAluZXRpZl9yeChza2IpOwotCWJjLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiB9CiAKIHN0YXRpYyBpbnQgcmVjZWl2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY250KQpAQCAtODAyLDE5ICs4MDEsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpiYXljb21fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJheWNvbV9zdGF0ZSAqYmMgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JLyogCi0JICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLQkgKiBjYXJkIG9wZW4gb3IgY2xvc2VkLiAKLQkgKi8KLQlyZXR1cm4gJmJjLT5zdGF0czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyB2b2lkIGVwcF93YWtldXAodm9pZCAqaGFuZGxlKQogewogICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaGFuZGxlOwpAQCAtMTA2NSwxMCArMTA1MSwxMCBAQAogCQloaS5kYXRhLmNzLnB0dCA9ICEhKGJjLT5zdGF0ICYgRVBQX1BUVEJJVCk7CiAJCWhpLmRhdGEuY3MuZGNkID0gIShiYy0+c3RhdCAmIEVQUF9EQ0RCSVQpOwogCQloaS5kYXRhLmNzLnB0dF9rZXllZCA9IGJjLT5wdHRfa2V5ZWQ7Ci0JCWhpLmRhdGEuY3MudHhfcGFja2V0cyA9IGJjLT5zdGF0cy50eF9wYWNrZXRzOwotCQloaS5kYXRhLmNzLnR4X2Vycm9ycyA9IGJjLT5zdGF0cy50eF9lcnJvcnM7Ci0JCWhpLmRhdGEuY3MucnhfcGFja2V0cyA9IGJjLT5zdGF0cy5yeF9wYWNrZXRzOwotCQloaS5kYXRhLmNzLnJ4X2Vycm9ycyA9IGJjLT5zdGF0cy5yeF9lcnJvcnM7CisJCWhpLmRhdGEuY3MudHhfcGFja2V0cyA9IGRldi0+c3RhdHMudHhfcGFja2V0czsKKwkJaGkuZGF0YS5jcy50eF9lcnJvcnMgPSBkZXYtPnN0YXRzLnR4X2Vycm9yczsKKwkJaGkuZGF0YS5jcy5yeF9wYWNrZXRzID0gZGV2LT5zdGF0cy5yeF9wYWNrZXRzOworCQloaS5kYXRhLmNzLnJ4X2Vycm9ycyA9IGRldi0+c3RhdHMucnhfZXJyb3JzOwogCQlicmVhazsJCQogCiAJY2FzZSBIRExDRFJWQ1RMX09MREdFVFNUQVQ6CkBAIC0xMTE2LDYgKzExMDIsMTQgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYmF5Y29tX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAgICAgPSBlcHBfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IGVwcF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCSAgICAgPSBiYXljb21faW9jdGwsCisJLm5kb19zdGFydF94bWl0ICAgICAgPSBiYXljb21fc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBiYXljb21fc2V0X21hY19hZGRyZXNzLAorfTsKKwogLyoKICAqIENoZWNrIGZvciBhIG5ldHdvcmsgYWRhcHRvciBvZiB0aGlzIHR5cGUsIGFuZCByZXR1cm4gJzAnIGlmIG9uZSBleGlzdHMuCiAgKiBJZiBkZXYtPmJhc2VfYWRkciA9PSAwLCBwcm9iZSBhbGwgbGlrZWx5IGxvY2F0aW9ucy4KQEAgLTExNDMsMTcgKzExMzcsMTIgQEAKIAkvKgogCSAqIGluaXRpYWxpemUgdGhlIGRldmljZSBzdHJ1Y3QKIAkgKi8KLQlkZXYtPm9wZW4gPSBlcHBfb3BlbjsKLQlkZXYtPnN0b3AgPSBlcHBfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IGJheWNvbV9pb2N0bDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGJheWNvbV9zZW5kX3BhY2tldDsKLQlkZXYtPmdldF9zdGF0cyA9IGJheWNvbV9nZXRfc3RhdHM7CiAKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KIAliYy0+c2tiID0gTlVMTDsKIAkKKwlkZXYtPm5ldGRldl9vcHMgPSAmYmF5Y29tX25ldGRldl9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzID0gJmF4MjVfaGVhZGVyX29wczsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJheWNvbV9zZXRfbWFjX2FkZHJlc3M7CiAJCiAJZGV2LT50eXBlID0gQVJQSFJEX0FYMjU7ICAgICAgICAgICAvKiBBRl9BWDI1IGRldmljZSAqLwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gQVgyNV9NQVhfSEVBREVSX0xFTiArIEFYMjVfQlBRX0hFQURFUl9MRU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vYnBxZXRoZXIuYwppbmRleCA0NmY4ZjMzLi5kNTA5YjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9icHFldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2JwcWV0aGVyLmMKQEAgLTg3LDcgKzg3LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2JwcWV0aGVyLmg+CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIkFYLjI1OiBicHFldGhlciBkcml2ZXIgdmVyc2lvbiAwMDRcbiI7CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKKwkiQVguMjU6IGJwcWV0aGVyIGRyaXZlciB2ZXJzaW9uIDAwNFxuIjsKIAogc3RhdGljIGNoYXIgYmNhc3RfYWRkcls2XT17MHhGRiwweEZGLDB4RkYsMHhGRiwweEZGLDB4RkZ9OwogCkBAIC05Niw4ICs5Nyw4IEBACiBzdGF0aWMgaW50IGJwcV9yY3Yoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IHBhY2tldF90eXBlICosIHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBicHFfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGJwcV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQlBRKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYnBxX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9CUFEpLAogCS5mdW5jCT0gYnBxX3JjdiwKIH07CiAKQEAgLTExMCw3ICsxMTEsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgYnBxX2xpc3Q7CS8qIGxpc3Qgb2YgYnBxIGRldmljZXMgY2hhaW4gKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqZXRoZGV2OwkvKiBsaW5rIHRvIGV0aGVybmV0IGRldmljZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpheGRldjsJLyogYnBxIGRldmljZSAoYnBxIykgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsJLyogc29tZSBzdGF0aXN0aWNzICovCiAJY2hhciAgIGRlc3RfYWRkcls2XTsJCS8qIGV0aGVyIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KIAljaGFyICAgYWNwdF9hZGRyWzZdOwkJLyogYWNjZXB0IGV0aGVyIGZyYW1lcyBmcm9tIHRoaXMgYWRkcmVzcyBvbmx5ICovCiB9OwpAQCAtMjIyLDggKzIyMiw4IEBACiAJc2tiX3B1bGwoc2tiLCAyKTsJLyogUmVtb3ZlIHRoZSBsZW5ndGggYnl0ZXMgKi8KIAlza2JfdHJpbShza2IsIGxlbik7CS8qIFNldCB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhICovCiAKLQlicHEtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQlicHEtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIAogCXB0ciA9IHNrYl9wdXNoKHNrYiwgMSk7CiAJKnB0ciA9IDA7CkBAIC0yOTIsNyArMjkyLDcgQEAKIAlicHEgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKChkZXYgPSBicHFfZ2V0X2V0aGVyX2RldihkZXYpKSA9PSBOVUxMKSB7Ci0JCWJwcS0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTMwMCw4ICszMDAsOCBAQAogCXNrYi0+cHJvdG9jb2wgPSBheDI1X3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCWRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfQlBRLCBicHEtPmRlc3RfYWRkciwgTlVMTCwgMCk7Ci0JYnBxLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JYnBxLT5zdGF0cy50eF9ieXRlcys9c2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcys9c2tiLT5sZW47CiAgIAogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpAQCAtMzA5LDE2ICszMDksNiBAQAogfQogCiAvKgotICoJU3RhdGlzdGljcwotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJwcV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYnBxZGV2ICpicHEgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcmV0dXJuICZicHEtPnN0YXRzOwotfQotCi0vKgogICoJU2V0IEFYLjI1IGNhbGxzaWduCiAgKi8KIHN0YXRpYyBpbnQgYnBxX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQpAQCAtMzk2LDYgKzM4Niw3IEBACiAgKglQcm9jIGZpbGVzeXN0ZW0KICAqLwogc3RhdGljIHZvaWQgKmJwcV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoUkNVKQogewogCWludCBpID0gMTsKIAlzdHJ1Y3QgYnBxZGV2ICpicHFkZXY7CkBAIC00MjgsNiArNDE5LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgYnBxX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoUkNVKQogewogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtNDU0LDcgKzQ0Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBxX3NlcW9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgYnBxX3NlcW9wcyA9IHsKIAkuc3RhcnQgPSBicHFfc2VxX3N0YXJ0LAogCS5uZXh0ID0gYnBxX3NlcV9uZXh0LAogCS5zdG9wID0gYnBxX3NlcV9zdG9wLApAQCAtNDc3LDE2ICs0NjksMTcgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYnBxX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAgICAgPSBicHFfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IGJwcV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJICAgICA9IGJwcV94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gYnBxX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2RvX2lvY3RsCSAgICAgPSBicHFfaW9jdGwsCit9OwogCiBzdGF0aWMgdm9pZCBicHFfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYnBxX3htaXQ7Ci0JZGV2LT5vcGVuCSAgICAgPSBicHFfb3BlbjsKLQlkZXYtPnN0b3AJICAgICA9IGJwcV9jbG9zZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJwcV9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICA9IGJwcV9nZXRfc3RhdHM7Ci0JZGV2LT5kb19pb2N0bAkgICAgID0gYnBxX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcwkgICAgID0gJmJwcV9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkgICAgID0gZnJlZV9uZXRkZXY7CiAKIAltZW1jcHkoZGV2LT5icm9hZGNhc3QsICZheDI1X2JjYXN0LCBBWDI1X0FERFJfTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL2RtYXNjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKaW5kZXggZTY3MTAzMy4uODgxYmY4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCWludCBjaGlwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNjY19pbmZvICppbmZvOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCiAJaW50IGNoYW5uZWw7CiAJaW50IGNhcmRfYmFzZSwgc2NjX2NtZCwgc2NjX2RhdGE7CiAJaW50IHRtcl9jbnQsIHRtcl9jdHJsLCB0bXJfbW9kZTsKQEAgLTIzOSw3ICsyMzksNiBAQAogc3RhdGljIGludCBzY2NfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNjY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CiBzdGF0aWMgaW50IHNjY19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2NjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2NjX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpzYSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0eF9vbihzdHJ1Y3Qgc2NjX3ByaXYgKnByaXYpOwpAQCAtNDQxLDYgKzQ0MCwxMyBAQAogCW1lbWNweShkZXYtPmRldl9hZGRyLCAmYXgyNV9kZWZhZGRyLCBBWDI1X0FERFJfTEVOKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzY2NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBzY2Nfb3BlbiwKKwkubmRvX3N0b3AgPSBzY2NfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gc2NjX3NlbmRfcGFja2V0LAorCS5uZG9fZG9faW9jdGwgPSBzY2NfaW9jdGwsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9hZGFwdGVyKGludCBjYXJkX2Jhc2UsIGludCB0eXBlLCBpbnQgbikKIHsKIAlpbnQgaSwgaXJxLCBjaGlwOwpAQCAtNTc2LDExICs1ODIsNyBAQAogCQlzcHJpbnRmKGRldi0+bmFtZSwgImRtYXNjYyVpIiwgMiAqIG4gKyBpKTsKIAkJZGV2LT5iYXNlX2FkZHIgPSBjYXJkX2Jhc2U7CiAJCWRldi0+aXJxID0gaXJxOwotCQlkZXYtPm9wZW4gPSBzY2Nfb3BlbjsKLQkJZGV2LT5zdG9wID0gc2NjX2Nsb3NlOwotCQlkZXYtPmRvX2lvY3RsID0gc2NjX2lvY3RsOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNjY19zZW5kX3BhY2tldDsKLQkJZGV2LT5nZXRfc3RhdHMgPSBzY2NfZ2V0X3N0YXRzOworCQlkZXYtPm5ldGRldl9vcHMgPSAmc2NjX25ldGRldl9vcHM7CiAJCWRldi0+aGVhZGVyX29wcyA9ICZheDI1X2hlYWRlcl9vcHM7CiAJCWRldi0+c2V0X21hY19hZGRyZXNzID0gc2NjX3NldF9tYWNfYWRkcmVzczsKIAl9CkBAIC05NjEsMTQgKzk2Myw2IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzY2NfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHNjY19wcml2ICpwcml2ID0gZGV2LT5tbF9wcml2OwotCi0JcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQotCiBzdGF0aWMgaW50IHNjY19zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqc2EpCiB7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICgoc3RydWN0IHNvY2thZGRyICopIHNhKS0+c2FfZGF0YSwKQEAgLTEyMTYsMTcgKzEyMTAsMTcgQEAKIAkJfQogCQlpZiAocHJpdi0+cnhfb3ZlcikgewogCQkJLyogV2UgaGFkIGFuIG92ZXJydW4gKi8KLQkJCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWlmIChwcml2LT5yeF9vdmVyID09IDIpCi0JCQkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJZWxzZQotCQkJCXByaXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwogCQkJcHJpdi0+cnhfb3ZlciA9IDA7CiAJCX0gZWxzZSBpZiAocmMgJiBDUkNfRVJSKSB7CiAJCQkvKiBDb3VudCBpbnZhbGlkIENSQyBvbmx5IGlmIHBhY2tldCBsZW5ndGggPj0gbWluaW11bSAqLwogCQkJaWYgKGNiID49IDE1KSB7Ci0JCQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJcHJpdi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCXByaXYtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJcHJpdi0+ZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoY2IgPj0gMTUpIHsKQEAgLTEyMzksOCArMTIzMyw4IEBACiAJCQkJCXByaXYtPnJ4X2NvdW50Kys7CiAJCQkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJ4X3dvcmspOwogCQkJCX0gZWxzZSB7Ci0JCQkJCXByaXYtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCQlwcml2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0xMjc1LDcgKzEyNjksNyBAQAogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGNiICsgMSk7CiAJCWlmIChza2IgPT0gTlVMTCkgewogCQkJLyogRHJvcCBwYWNrZXQgKi8KLQkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQl9IGVsc2UgewogCQkJLyogRmlsbCBidWZmZXIgKi8KIAkJCWRhdGEgPSBza2JfcHV0KHNrYiwgY2IgKyAxKTsKQEAgLTEyODMsOCArMTI3Nyw4IEBACiAJCQltZW1jcHkoJmRhdGFbMV0sIHByaXYtPnJ4X2J1ZltpXSwgY2IpOwogCQkJc2tiLT5wcm90b2NvbCA9IGF4MjVfdHlwZV90cmFucyhza2IsIHByaXYtPmRldik7CiAJCQluZXRpZl9yeChza2IpOwotCQkJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwotCQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gY2I7CisJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gY2I7CiAJCX0KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJpbmdfbG9jaywgZmxhZ3MpOwogCQkvKiBNb3ZlIHRhaWwgKi8KQEAgLTEzNTEsMTUgKzEzNDUsMTUgQEAKIAkJCXdyaXRlX3NjYyhwcml2LCBSMSwgRVhUX0lOVF9FTkFCIHwgV1RfRk5fUkRZRk4pOwogCQlpZiAocmVzKSB7CiAJCQkvKiBVcGRhdGUgcGFja2V0IHN0YXRpc3RpY3MgKi8KLQkJCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJcHJpdi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCQlwcml2LT5kZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQkvKiBPdGhlciB1bmRlcnJ1biBpbnRlcnJ1cHRzIG1heSBhbHJlYWR5IGJlIHdhaXRpbmcgKi8KIAkJCXdyaXRlX3NjYyhwcml2LCBSMCwgUkVTX0VYVF9JTlQpOwogCQkJd3JpdGVfc2NjKHByaXYsIFIwLCBSRVNfRVhUX0lOVCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBVcGRhdGUgcGFja2V0IHN0YXRpc3RpY3MgKi8KLQkJCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHByaXYtPnR4X2xlbltpXTsKKwkJCXByaXYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQkJcHJpdi0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBwcml2LT50eF9sZW5baV07CiAJCQkvKiBSZW1vdmUgZnJhbWUgZnJvbSBGSUZPICovCiAJCQlwcml2LT50eF90YWlsID0gKGkgKyAxKSAlIE5VTV9UWF9CVUY7CiAJCQlwcml2LT50eF9jb3VudC0tOwpAQCAtMTQyNSw3ICsxNDE5LDcgQEAKIAkJd3JpdGVfc2NjKHByaXYsIFIxNSwgRENESUUpOwogCQlwcml2LT5ycjAgPSByZWFkX3NjYyhwcml2LCBSMCk7CiAJCWlmIChwcml2LT5ycjAgJiBEQ0QpIHsKLQkJCXByaXYtPnN0YXRzLmNvbGxpc2lvbnMrKzsKKwkJCXByaXYtPmRldi0+c3RhdHMuY29sbGlzaW9ucysrOwogCQkJcnhfb24ocHJpdik7CiAJCQlwcml2LT5zdGF0ZSA9IFJYX09OOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCmluZGV4IDhlYmE2MWExLi42MWRlNTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9oZGxjZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vaGRsY2Rydi5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIAlwa3RfbGVuID0gcy0+aGRsY3J4LmxlbiAtIDIgKyAxOyAvKiBLSVNTIGtsdWRnZSAqLwogCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbikpKSB7CiAJCXByaW50aygiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCXMtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJY3AgPSBza2JfcHV0KHNrYiwgcGt0X2xlbik7CkBAIC0xNjIsNyArMTYyLDcgQEAKIAltZW1jcHkoY3AsIHMtPmhkbGNyeC5idWZmZXIsIHBrdF9sZW4gLSAxKTsKIAlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAluZXRpZl9yeChza2IpOwotCXMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIH0KIAogdm9pZCBoZGxjZHJ2X3JlY2VpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBoZGxjZHJ2X3N0YXRlICpzKQpAQCAtMzI2LDcgKzMyNiw3IEBACiAJCQlzLT5oZGxjdHgubGVuID0gcGt0X2xlbisyOyAvKiB0aGUgYXBwZW5kZWQgQ1JDICovCiAJCQlzLT5oZGxjdHgudHhfc3RhdGUgPSAyOwogCQkJcy0+aGRsY3R4LmJpdHN0cmVhbSA9IDA7Ci0JCQlzLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCWJyZWFrOwogCQljYXNlIDI6CiAJCQlpZiAoIXMtPmhkbGN0eC5sZW4pIHsKQEAgLTQyNywxOSArNDI3LDYgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaGRsY2Rydl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaGRsY2Rydl9zdGF0ZSAqc20gPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JLyogCi0JICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLQkgKiBjYXJkIG9wZW4gb3IgY2xvc2VkLiAKLQkgKi8KLQlyZXR1cm4gJnNtLT5zdGF0czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKgogICogT3Blbi9pbml0aWFsaXplIHRoZSBib2FyZC4gVGhpcyBpcyBjYWxsZWQgKGluIHRoZSBjdXJyZW50IGtlcm5lbCkKICAqIHNvbWV0aW1lIGFmdGVyIGJvb3Rpbmcgd2hlbiB0aGUgJ2lmY29uZmlnJyBwcm9ncmFtIGlzIHJ1bi4KQEAgLTU2OCwxMCArNTU1LDEwIEBACiAJCWJpLmRhdGEuY3MucHR0ID0gaGRsY2Rydl9wdHQocyk7CiAJCWJpLmRhdGEuY3MuZGNkID0gcy0+aGRsY3J4LmRjZDsKIAkJYmkuZGF0YS5jcy5wdHRfa2V5ZWQgPSBzLT5wdHRfa2V5ZWQ7Ci0JCWJpLmRhdGEuY3MudHhfcGFja2V0cyA9IHMtPnN0YXRzLnR4X3BhY2tldHM7Ci0JCWJpLmRhdGEuY3MudHhfZXJyb3JzID0gcy0+c3RhdHMudHhfZXJyb3JzOwotCQliaS5kYXRhLmNzLnJ4X3BhY2tldHMgPSBzLT5zdGF0cy5yeF9wYWNrZXRzOwotCQliaS5kYXRhLmNzLnJ4X2Vycm9ycyA9IHMtPnN0YXRzLnJ4X2Vycm9yczsKKwkJYmkuZGF0YS5jcy50eF9wYWNrZXRzID0gZGV2LT5zdGF0cy50eF9wYWNrZXRzOworCQliaS5kYXRhLmNzLnR4X2Vycm9ycyA9IGRldi0+c3RhdHMudHhfZXJyb3JzOworCQliaS5kYXRhLmNzLnJ4X3BhY2tldHMgPSBkZXYtPnN0YXRzLnJ4X3BhY2tldHM7CisJCWJpLmRhdGEuY3MucnhfZXJyb3JzID0gZGV2LT5zdGF0cy5yeF9lcnJvcnM7CiAJCWJyZWFrOwkJCiAKIAljYXNlIEhETENEUlZDVExfT0xER0VUU1RBVDoKQEAgLTYzMCw2ICs2MTcsMTQgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaGRsY2Rydl9uZXRkZXYgPSB7CisJLm5kb19vcGVuCT0gaGRsY2Rydl9vcGVuLAorCS5uZG9fc3RvcAk9IGhkbGNkcnZfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY2Rydl9zZW5kX3BhY2tldCwKKwkubmRvX2RvX2lvY3RsCT0gaGRsY2Rydl9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGhkbGNkcnZfc2V0X21hY19hZGRyZXNzLAorfTsKKwogLyoKICAqIEluaXRpYWxpemUgZmllbGRzIGluIGhkbGNkcnYKICAqLwpAQCAtNjY5LDIxICs2NjQsMTMgQEAKIAlzLT5iaXRidWZfaGRsYy5zaHJlZyA9IDB4ODA7CiAjZW5kaWYgLyogSERMQ0RSVl9ERUJVRyAqLwogCi0JLyoKLQkgKiBpbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0Ci0JICovCi0JZGV2LT5vcGVuID0gaGRsY2Rydl9vcGVuOwotCWRldi0+c3RvcCA9IGhkbGNkcnZfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IGhkbGNkcnZfaW9jdGw7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBoZGxjZHJ2X3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzID0gaGRsY2Rydl9nZXRfc3RhdHM7CiAKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KIAogCXMtPnNrYiA9IE5VTEw7CiAJCisJZGV2LT5uZXRkZXZfb3BzID0gJmhkbGNkcnZfbmV0ZGV2OwogCWRldi0+aGVhZGVyX29wcyA9ICZheDI1X2hlYWRlcl9vcHM7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBoZGxjZHJ2X3NldF9tYWNfYWRkcmVzczsKIAkKIAlkZXYtPnR5cGUgPSBBUlBIUkRfQVgyNTsgICAgICAgICAgIC8qIEFGX0FYMjUgZGV2aWNlICovCiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBBWDI1X01BWF9IRUFERVJfTEVOICsgQVgyNV9CUFFfSEVBREVSX0xFTjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9ta2lzcy5jCmluZGV4IGJiZGIzMTEuLjAzMmMwZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL21raXNzLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vbWtpc3MuYwpAQCAtNTksOCArNTksNiBAQAogCXVuc2lnbmVkIGNoYXIJCSp4aGVhZDsJLyogcG9pbnRlciB0byBuZXh0IGJ5dGUgdG8gWE1JVCAqLwogCWludAkJCXhsZWZ0OwkvKiBieXRlcyBsZWZ0IGluIFhNSVQgcXVldWUgICAgICovCiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKLQogCS8qIERldGFpbGVkIFNMSVAgc3RhdGlzdGljcy4gKi8KIAlpbnQJCW10dTsJCS8qIE91ciBtdHUgKHRvIHNwb3QgY2hhbmdlcyEpICAgKi8KIAlpbnQJCWJ1ZmZzaXplOwkvKiBNYXggYnVmZmVycyBzaXplcyAgICAgICAgICAgICovCkBAIC0yNTMsNyArMjUxLDcgQEAKIAlpZiAoYXgtPnJidWZmWzBdID4gMHgwZikgewogCQlpZiAoYXgtPnJidWZmWzBdICYgMHg4MCkgewogCQkJaWYgKGNoZWNrX2NyY18xNihheC0+cmJ1ZmYsIGF4LT5yY291bnQpIDwgMCkgewotCQkJCWF4LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlheC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwogCiAJCQkJcmV0dXJuOwpAQCAtMjY4LDcgKzI2Niw3IEBACiAJCQkqYXgtPnJidWZmICY9IH4weDgwOwogCQl9IGVsc2UgaWYgKGF4LT5yYnVmZlswXSAmIDB4MjApICB7CiAJCQlpZiAoY2hlY2tfY3JjX2ZsZXgoYXgtPnJidWZmLCBheC0+cmNvdW50KSA8IDApIHsKLQkJCQlheC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJYXgtPmRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIAkJCQlyZXR1cm47CiAJCQl9CkBAIC0yOTUsNyArMjkzLDcgQEAKIAlpZiAoKHNrYiA9IGRldl9hbGxvY19za2IoY291bnQpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibWtpc3M6ICVzOiBtZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwKIAkJICAgICAgIGF4LT5kZXYtPm5hbWUpOwotCQlheC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlheC0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXNwaW5fdW5sb2NrX2JoKCZheC0+YnVmbG9jayk7CiAJCXJldHVybjsKIAl9CkBAIC0zMDMsOCArMzAxLDggQEAKIAltZW1jcHkoc2tiX3B1dChza2IsY291bnQpLCBheC0+cmJ1ZmYsIGNvdW50KTsKIAlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgYXgtPmRldik7CiAJbmV0aWZfcngoc2tiKTsKLQlheC0+c3RhdHMucnhfcGFja2V0cysrOwotCWF4LT5zdGF0cy5yeF9ieXRlcyArPSBjb3VudDsKKwlheC0+ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJYXgtPmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gY291bnQ7CiAJc3Bpbl91bmxvY2tfYmgoJmF4LT5idWZsb2NrKTsKIH0KIApAQCAtMzQ0LDcgKzM0Miw3IEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlheC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJYXgtPmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJc2V0X2JpdChBWEZfRVJST1IsICZheC0+ZmxhZ3MpOwogCX0KIAlzcGluX3VubG9ja19iaCgmYXgtPmJ1ZmxvY2spOwpAQCAtNDA2LDcgKzQwNCw3IEBACiAJCQltZW1jcHkoYXgtPnhidWZmLCBheC0+eGhlYWQsIGF4LT54bGVmdCk7CiAJCX0gZWxzZSAgewogCQkJYXgtPnhsZWZ0ID0gMDsKLQkJCWF4LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCX0KIApAQCAtNDE3LDcgKzQxNSw3IEBACiAJCQltZW1jcHkoYXgtPnJidWZmLCBvcmJ1ZmYsIGF4LT5yY291bnQpOwogCQl9IGVsc2UgIHsKIAkJCWF4LT5yY291bnQgPSAwOwotCQkJYXgtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CiAJCQlzZXRfYml0KEFYRl9FUlJPUiwgJmF4LT5mbGFncyk7CiAJCX0KIAl9CkBAIC00NDQsNyArNDQyLDcgQEAKIAlpZiAobGVuID4gYXgtPm10dSkgewkJLyogU2lnaCwgc2hvdWxkbid0IG9jY3VyIEJVVCAuLi4gKi8KIAkJbGVuID0gYXgtPm10dTsKIAkJcHJpbnRrKEtFUk5fRVJSICJta2lzczogJXM6IHRydW5jYXRpbmcgb3ZlcnNpemVkIHRyYW5zbWl0IHBhY2tldCFcbiIsIGF4LT5kZXYtPm5hbWUpOwotCQlheC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAkJcmV0dXJuOwogCX0KQEAgLTUxOCw4ICs1MTYsOCBAQAogCiAJc2V0X2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmYXgtPnR0eS0+ZmxhZ3MpOwogCWFjdHVhbCA9IGF4LT50dHktPm9wcy0+d3JpdGUoYXgtPnR0eSwgYXgtPnhidWZmLCBjb3VudCk7Ci0JYXgtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlheC0+c3RhdHMudHhfYnl0ZXMgKz0gYWN0dWFsOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gYWN0dWFsOwogCiAJYXgtPmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWF4LT54bGVmdCA9IGNvdW50IC0gYWN0dWFsOwpAQCAtNjY0LDMyICs2NjIsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpheF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbWtpc3MgKmF4ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAmYXgtPnN0YXRzOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgYXhfaGVhZGVyX29wcyA9IHsKIAkuY3JlYXRlICAgID0gYXhfaGVhZGVyLAogCS5yZWJ1aWxkICAgPSBheF9yZWJ1aWxkX2hlYWRlciwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICA9IGF4X29wZW5fZGV2LAorCS5uZG9fc3RvcCAgICAgICAgICAgID0gYXhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBheF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gYXhfc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIHZvaWQgYXhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBGaW5pc2ggc2V0dGluZyB1cCB0aGUgREVWSUNFIGluZm8uICovCiAJZGV2LT5tdHUgICAgICAgICAgICAgPSBBWF9NVFU7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBheF94bWl0OwotCWRldi0+b3BlbiAgICAgICAgICAgID0gYXhfb3Blbl9kZXY7Ci0JZGV2LT5zdG9wICAgICAgICAgICAgPSBheF9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cwkgICAgID0gYXhfZ2V0X3N0YXRzOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gYXhfc2V0X21hY19hZGRyZXNzOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gMDsKIAlkZXYtPmFkZHJfbGVuICAgICAgICA9IDA7CiAJZGV2LT50eXBlICAgICAgICAgICAgPSBBUlBIUkRfQVgyNTsKIAlkZXYtPnR4X3F1ZXVlX2xlbiAgICA9IDEwOwogCWRldi0+aGVhZGVyX29wcyAgICAgID0gJmF4X2hlYWRlcl9vcHM7CisJZGV2LT5uZXRkZXZfb3BzCSAgICAgPSAmYXhfbmV0ZGV2X29wczsKIAogCiAJbWVtY3B5KGRldi0+YnJvYWRjYXN0LCAmYXgyNV9iY2FzdCwgQVgyNV9BRERSX0xFTik7CkBAIC05MjksNyArOTIzLDcgQEAKIAl3aGlsZSAoY291bnQtLSkgewogCQlpZiAoZnAgIT0gTlVMTCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEFYRl9FUlJPUiwgJmF4LT5mbGFncykpCi0JCQkJYXgtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWF4LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJY3ArKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC05ODIsOSArOTc2LDkgQEAKIAkud3JpdGVfd2FrZXVwCT0gbWtpc3Nfd3JpdGVfd2FrZXVwCiB9OwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPIFwKK3N0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gXAogCSJta2lzczogQVguMjUgTXVsdGlraXNzLCBIYW5zIEFsYmFzIFBFMUFZWFxuIjsKLXN0YXRpYyBjaGFyIG1zZ19yZWdmYWlsW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSIFwKK3N0YXRpYyBjb25zdCBjaGFyIG1zZ19yZWdmYWlsW10gX19pbml0ZGF0YSA9IEtFUk5fRVJSIFwKIAkibWtpc3M6IGNhbid0IHJlZ2lzdGVyIGxpbmUgZGlzY2lwbGluZSAoZXJyID0gJWQpXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCBta2lzc19pbml0X2RyaXZlcih2b2lkKQpAQCAtOTkzLDggKzk4Nyw5IEBACiAKIAlwcmludGsoYmFubmVyKTsKIAotCWlmICgoc3RhdHVzID0gdHR5X3JlZ2lzdGVyX2xkaXNjKE5fQVgyNSwgJmF4X2xkaXNjKSkgIT0gMCkKLQkJcHJpbnRrKG1zZ19yZWdmYWlsKTsKKwlzdGF0dXMgPSB0dHlfcmVnaXN0ZXJfbGRpc2MoTl9BWDI1LCAmYXhfbGRpc2MpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJcHJpbnRrKG1zZ19yZWdmYWlsLCBzdGF0dXMpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hhbXJhZGlvL3NjYy5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKaW5kZXggYzAxMWFmNy4uZDcxMmU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKKysrIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vc2NjLmMKQEAgLTE4NCw3ICsxODQsOCBAQAogCiAjaW5jbHVkZSAiejg1MzAuaCIKIAotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiQVguMjU6IFo4NTMwIFNDQyBkcml2ZXIgdmVyc2lvbiAiVkVSU0lPTiIuZGwxYmtlXG4iOworc3RhdGljIGNvbnN0IGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBcCisJIkFYLjI1OiBaODUzMCBTQ0MgZHJpdmVyIHZlcnNpb24gIlZFUlNJT04iLmRsMWJrZVxuIjsKIAogc3RhdGljIHZvaWQgdF9kd2FpdCh1bnNpZ25lZCBsb25nKTsKIHN0YXRpYyB2b2lkIHRfdHhkZWxheSh1bnNpZ25lZCBsb25nKTsKQEAgLTE1NDIsMjMgKzE1NDMsMjQgQEAKIC8qICoJCQkgICAgTmV0d29yayBkcml2ZXIgbWV0aG9kcwkJICAgICAgKiAqLwogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzY2NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICA9IHNjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IHNjY19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBzY2NfbmV0X3R4LAorCS5uZG9fc2V0X21hY19hZGRyZXNzID0gc2NjX25ldF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19nZXRfc3RhdHMgICAgICAgPSBzY2NfbmV0X2dldF9zdGF0cywKKwkubmRvX2RvX2lvY3RsICAgICAgICA9IHNjY19uZXRfaW9jdGwsCit9OworCiAvKiAtLS0tPiBJbml0aWFsaXplIGRldmljZSA8LS0tLS0gKi8KIAogc3RhdGljIHZvaWQgc2NjX25ldF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+dHhfcXVldWVfbGVuICAgID0gMTY7CS8qIHNob3VsZCBiZSBlbm91Z2guLi4gKi8KIAotCWRldi0+b3BlbiAgICAgICAgICAgID0gc2NjX25ldF9vcGVuOwotCWRldi0+c3RvcAkgICAgID0gc2NjX25ldF9jbG9zZTsKLQotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc2NjX25ldF90eDsKKwlkZXYtPm5ldGRldl9vcHMJICAgICA9ICZzY2NfbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMgICAgICA9ICZheDI1X2hlYWRlcl9vcHM7CiAKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHNjY19uZXRfc2V0X21hY19hZGRyZXNzOwotCWRldi0+Z2V0X3N0YXRzICAgICAgID0gc2NjX25ldF9nZXRfc3RhdHM7Ci0JZGV2LT5kb19pb2N0bCAgICAgICAgPSBzY2NfbmV0X2lvY3RsOwotCWRldi0+dHhfdGltZW91dCAgICAgID0gTlVMTDsKLQogCW1lbWNweShkZXYtPmJyb2FkY2FzdCwgJmF4MjVfYmNhc3QsICBBWDI1X0FERFJfTEVOKTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgICZheDI1X2RlZmFkZHIsIEFYMjVfQUREUl9MRU4pOwogIApAQCAtMjA3Myw3ICsyMDc1LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NjX25ldF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY2NfbmV0X3NlcV9vcHMgPSB7CiAJLnN0YXJ0ICA9IHNjY19uZXRfc2VxX3N0YXJ0LAogCS5uZXh0ICAgPSBzY2NfbmV0X3NlcV9uZXh0LAogCS5zdG9wICAgPSBzY2NfbmV0X3NlcV9zdG9wLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8veWFtLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwppbmRleCA1NDA3Zjc0Li41MDBhNDBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby95YW0uYwpAQCAtNzcsNyArNzcsOCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBjaGFyIHlhbV9kcnZuYW1lW10gPSAieWFtIjsKLXN0YXRpYyBjaGFyIHlhbV9kcnZpbmZvW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiWUFNIGRyaXZlciB2ZXJzaW9uIDAuOCBieSBGMU9BVC9GNkZCQlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHlhbV9kcnZpbmZvW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBcCisJIllBTSBkcml2ZXIgdmVyc2lvbiAwLjggYnkgRjFPQVQvRjZGQkJcbiI7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMTUsMTAgKzExNiw2IEBACiAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JLyogU3RhdHMgc2VjdGlvbiAqLwotCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0KIAlpbnQgbmJfcnhpbnQ7CiAJaW50IG5iX21kaW50OwogCkBAIC01MDcsNyArNTA0LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWlmICghKHNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbikpKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXRcbiIsIGRldi0+bmFtZSk7Ci0JCQkJKyt5cC0+c3RhdHMucnhfZHJvcHBlZDsKKwkJCQkrK2Rldi0+c3RhdHMucnhfZHJvcHBlZDsKIAkJCX0gZWxzZSB7CiAJCQkJdW5zaWduZWQgY2hhciAqY3A7CiAJCQkJY3AgPSBza2JfcHV0KHNrYiwgcGt0X2xlbik7CkBAIC01MTUsNyArNTEyLDcgQEAKIAkJCQltZW1jcHkoY3AsIHlwLT5yeF9idWYsIHBrdF9sZW4gLSAxKTsKIAkJCQlza2ItPnByb3RvY29sID0gYXgyNV90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJCQluZXRpZl9yeChza2IpOwotCQkJCSsreXAtPnN0YXRzLnJ4X3BhY2tldHM7CisJCQkJKytkZXYtPnN0YXRzLnJ4X3BhY2tldHM7CiAJCQl9CiAJCX0KIAl9CkBAIC02NzcsNyArNjc0LDcgQEAKIAkJCXlwLT50eF9jb3VudCA9IDE7CiAJCQl5cC0+dHhfc3RhdGUgPSBUWF9IRUFEOwogCQl9Ci0JCSsreXAtPnN0YXRzLnR4X3BhY2tldHM7CisJCSsrZGV2LT5zdGF0cy50eF9wYWNrZXRzOwogCQlicmVhazsKIAljYXNlIFRYX1RBSUw6CiAJCWlmICgtLXlwLT50eF9jb3VudCA8PSAwKSB7CkBAIC03MTYsNyArNzEzLDcgQEAKIAkJCWhhbmRsZWQgPSAxOwogCiAJCQlpZiAobHNyICYgTFNSX09FKQotCQkJCSsreXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzOworCQkJCSsrZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9yczsKIAogCQkJeXAtPmRjZCA9IChtc3IgJiBSWF9EQ0QpID8gMSA6IDA7CiAKQEAgLTc3OCwxNiArNzc1LDE2IEBACiAJc2VxX3ByaW50ZihzZXEsICIgIFR4VGFpbCAgICV1XG4iLCB5cC0+dHh0YWlsKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgU2xvdFRpbWUgJXVcbiIsIHlwLT5zbG90KTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgUGVyc2lzdCAgJXVcbiIsIHlwLT5wZXJzKTsKLQlzZXFfcHJpbnRmKHNlcSwgIiAgVHhGcmFtZXMgJWx1XG4iLCB5cC0+c3RhdHMudHhfcGFja2V0cyk7Ci0Jc2VxX3ByaW50ZihzZXEsICIgIFJ4RnJhbWVzICVsdVxuIiwgeXAtPnN0YXRzLnJ4X3BhY2tldHMpOworCXNlcV9wcmludGYoc2VxLCAiICBUeEZyYW1lcyAlbHVcbiIsIGRldi0+c3RhdHMudHhfcGFja2V0cyk7CisJc2VxX3ByaW50ZihzZXEsICIgIFJ4RnJhbWVzICVsdVxuIiwgZGV2LT5zdGF0cy5yeF9wYWNrZXRzKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAgVHhJbnQgICAgJXVcbiIsIHlwLT5uYl9tZGludCk7CiAJc2VxX3ByaW50ZihzZXEsICIgIFJ4SW50ICAgICV1XG4iLCB5cC0+bmJfcnhpbnQpOwotCXNlcV9wcmludGYoc2VxLCAiICBSeE92ZXIgICAlbHVcbiIsIHlwLT5zdGF0cy5yeF9maWZvX2Vycm9ycyk7CisJc2VxX3ByaW50ZihzZXEsICIgIFJ4T3ZlciAgICVsdVxuIiwgZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyk7CiAJc2VxX3ByaW50ZihzZXEsICJcbiIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHlhbV9zZXFvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHlhbV9zZXFvcHMgPSB7CiAJLnN0YXJ0ID0geWFtX3NlcV9zdGFydCwKIAkubmV4dCA9IHlhbV9zZXFfbmV4dCwKIAkuc3RvcCA9IHlhbV9zZXFfc3RvcCwKQEAgLTgxMiwyNiArODA5LDYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqeWFtX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB5YW1fcG9ydCAqeXA7Ci0KLQlpZiAoIWRldikKLQkJcmV0dXJuIE5VTEw7Ci0KLQl5cCA9IG5ldGRldl9wcml2KGRldik7Ci0JaWYgKHlwLT5tYWdpYyAhPSBZQU1fTUFHSUMpCi0JCXJldHVybiBOVUxMOwotCi0JLyogCi0JICogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUKLQkgKiBjYXJkIG9wZW4gb3IgY2xvc2VkLiAKLQkgKi8KLQlyZXR1cm4gJnlwLT5zdGF0czsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyBpbnQgeWFtX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgeWFtX3BvcnQgKnlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTg3NywxMCArODU0LDEwIEBACiAKIAkvKiBSZXNldCBvdmVycnVucyBmb3IgYWxsIHBvcnRzIC0gRlBHQSBwcm9ncmFtbWluZyBtYWtlcyBvdmVycnVucyAqLwogCWZvciAoaSA9IDA7IGkgPCBOUl9QT1JUUzsgaSsrKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB5YW1fZGV2c1tpXTsKLQkJc3RydWN0IHlhbV9wb3J0ICp5cCA9IG5ldGRldl9wcml2KGRldik7Ci0JCWluYihMU1IoZGV2LT5iYXNlX2FkZHIpKTsKLQkJeXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzID0gMDsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKnlhbV9kZXYgPSB5YW1fZGV2c1tpXTsKKworCQlpbmIoTFNSKHlhbV9kZXYtPmJhc2VfYWRkcikpOworCQl5YW1fZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycyA9IDA7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgYXQgaW9iYXNlIDB4JWx4IGlycSAldSB1YXJ0ICVzXG4iLCBkZXYtPm5hbWUsIGRldi0+YmFzZV9hZGRyLCBkZXYtPmlycSwKQEAgLTEwNjgsNiArMTA0NSwxNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB5YW1fbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JICAgICA9IHlhbV9vcGVuLAorCS5uZG9fc3RvcAkgICAgID0geWFtX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAgID0geWFtX3NlbmRfcGFja2V0LAorCS5uZG9fZG9faW9jdGwgCSAgICAgPSB5YW1faW9jdGwsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSB5YW1fc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIHZvaWQgeWFtX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHlhbV9wb3J0ICp5cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMDg4LDE4ICsxMDczLDExIEBACiAJZGV2LT5iYXNlX2FkZHIgPSB5cC0+aW9iYXNlOwogCWRldi0+aXJxID0geXAtPmlycTsKIAotCWRldi0+b3BlbiA9IHlhbV9vcGVuOwotCWRldi0+c3RvcCA9IHlhbV9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsID0geWFtX2lvY3RsOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0geWFtX3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzID0geWFtX2dldF9zdGF0czsKLQogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnlwLT5zZW5kX3F1ZXVlKTsKIAorCWRldi0+bmV0ZGV2X29wcyA9ICZ5YW1fbmV0ZGV2X29wczsKIAlkZXYtPmhlYWRlcl9vcHMgPSAmYXgyNV9oZWFkZXJfb3BzOwogCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSB5YW1fc2V0X21hY19hZGRyZXNzOwotCiAJZGV2LT50eXBlID0gQVJQSFJEX0FYMjU7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBBWDI1X01BWF9IRUFERVJfTEVOOwogCWRldi0+bXR1ID0gQVgyNV9NVFU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKaW5kZXggNmZkN2FhNi4uYTgxNWUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAJCQkJICBFTUFDX0ZUUl80NDBFUF9QSFlfQ0xLX0ZJWCkpCiAJCURCRyhkZXYsICIlcyIgTkwsIGVycm9yKTsKIAllbHNlIGlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzXG4iLCBkZXYtPm5kZXYtPm5hbWUsIGVycm9yKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXNcbiIsIGRldi0+b2ZkZXYtPm5vZGUtPmZ1bGxfbmFtZSwgZXJyb3IpOwogfQogCiAvKiBFTUFDIFBIWSBjbG9jayB3b3JrYXJvdW5kOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCmluZGV4IDViNWJmOWYuLmMyNWJjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libWxhbmEuYworKysgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKQEAgLTkwNSw2ICs5MDUsMTcgQEAKIAlOVUxMCiB9OwogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWJtbGFuYV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gaWJtbGFuYV9vcGVuLAorCS5uZG9fc3RvcCAJCT0gaWJtbGFuYV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWJtbGFuYV90eCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGlibWxhbmFfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpYm1sYW5hX2luaXRfb25lKHN0cnVjdCBkZXZpY2UgKmtkZXYpCiB7CiAJc3RydWN0IG1jYV9kZXZpY2UgKm1kZXYgPSB0b19tY2FfZGV2aWNlKGtkZXYpOwpAQCAtOTczLDExICs5ODQsNyBAQAogCW1jYV9kZXZpY2Vfc2V0X2NsYWltKG1kZXYsIDEpOwogCiAJLyogc2V0IG1ldGhvZHMgKi8KLQotCWRldi0+b3BlbiA9IGlibWxhbmFfb3BlbjsKLQlkZXYtPnN0b3AgPSBpYm1sYW5hX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWJtbGFuYV90eDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGlibWxhbmFfc2V0X211bHRpY2FzdF9saXN0OworCWRldi0+bmV0ZGV2X29wcyA9ICZpYm1sYW5hX25ldGRldl9vcHM7CiAJZGV2LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOwogCiAJLyogY29weSBvdXQgTUFDIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libXZldGguYyBiL2RyaXZlcnMvbmV0L2libXZldGguYwppbmRleCBkZmE2MzQ4Li41YzYzMTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCkBAIC0xMDI4LDEwICsxMDI4LDEwIEBACiAKIAkJaWJtdmV0aF9hc3NlcnQobHBhcl9yYyA9PSBIX1NVQ0NFU1MpOwogCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCWlmIChpYm12ZXRoX3J4cV9wZW5kaW5nX2J1ZmZlcihhZGFwdGVyKSAmJgotCQkgICAgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkgeworCQkgICAgbmFwaV9yZXNjaGVkdWxlKG5hcGkpKSB7CiAJCQlscGFyX3JjID0gaF92aW9fc2lnbmFsKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywKIAkJCQkJICAgICAgIFZJT19JUlFfRElTQUJMRSk7CiAJCQlnb3RvIHJlc3RhcnRfcG9sbDsKQEAgLTEwNDcsMTEgKzEwNDcsMTEgQEAKIAlzdHJ1Y3QgaWJtdmV0aF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1bnNpZ25lZCBsb25nIGxwYXJfcmM7CiAKLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5uYXBpKSkgewogCQlscGFyX3JjID0gaF92aW9fc2lnbmFsKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywKIAkJCQkgICAgICAgVklPX0lSUV9ESVNBQkxFKTsKIAkJaWJtdmV0aF9hc3NlcnQobHBhcl9yYyA9PSBIX1NVQ0NFU1MpOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaWdiL01ha2VmaWxlCmluZGV4IDE5MjdiM2YuLjgzNzJjYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9pZ2IvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwogIyBJbnRlbCA4MjU3NSBQQ0ktRXhwcmVzcyBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorIyBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAjIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zMyw1ICszMyw1IEBACiBvYmotJChDT05GSUdfSUdCKSArPSBpZ2IubwogCiBpZ2Itb2JqcyA6PSBpZ2JfbWFpbi5vIGlnYl9ldGh0b29sLm8gZTEwMDBfODI1NzUubyBcCi0JICAgIGUxMDAwX21hYy5vIGUxMDAwX252bS5vIGUxMDAwX3BoeS5vCisJICAgIGUxMDAwX21hYy5vIGUxMDAwX252bS5vIGUxMDAwX3BoeS5vIGUxMDAwX21ieC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKaW5kZXggMTNjYTczZi4uZWZkOWJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNjIsMTcgKzYyLDEyIEBACiBzdGF0aWMgczMyICBpZ2JfcmVzZXRfaW5pdF9zY3JpcHRfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOwogc3RhdGljIHMzMiAgaWdiX3JlYWRfbWFjX2FkZHJfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOwogCi0KLXN0cnVjdCBlMTAwMF9kZXZfc3BlY184MjU3NSB7Ci0JYm9vbCBzZ21paV9hY3RpdmU7Ci19OwotCiBzdGF0aWMgczMyIGlnYl9nZXRfaW52YXJpYW50c184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CiAJc3RydWN0IGUxMDAwX252bV9pbmZvICpudm0gPSAmaHctPm52bTsKIAlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwotCXN0cnVjdCBlMTAwMF9kZXZfc3BlY184MjU3NSAqZGV2X3NwZWM7CisJc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICogZGV2X3NwZWMgPSAmaHctPmRldl9zcGVjLl84MjU3NTsKIAl1MzIgZWVjZDsKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgc2l6ZTsKQEAgLTg1LDggKzgwLDEwIEBACiAJCW1hYy0+dHlwZSA9IGUxMDAwXzgyNTc1OwogCQlicmVhazsKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3NjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9OUzoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUjoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVM6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVI6CiAJCW1hYy0+dHlwZSA9IGUxMDAwXzgyNTc2OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtOTQsMTcgKzkxLDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogTUFDIGluaXRpYWxpemF0aW9uICovCi0JaHctPmRldl9zcGVjX3NpemUgPSBzaXplb2Yoc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1KTsKLQotCS8qIERldmljZS1zcGVjaWZpYyBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiAqLwotCWh3LT5kZXZfc3BlYyA9IGt6YWxsb2MoaHctPmRldl9zcGVjX3NpemUsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFody0+ZGV2X3NwZWMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZGV2X3NwZWMgPSAoc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICopaHctPmRldl9zcGVjOwotCiAJLyogU2V0IG1lZGlhIHR5cGUgKi8KIAkvKgogCSAqIFRoZSA4MjU3NSB1c2VzIGJpdHMgMjI6MjMgZm9yIGxpbmsgbW9kZS4gVGhlIG1vZGUgY2FuIGJlIGNoYW5nZWQKQEAgLTE5NSwxMyArMTgxLDEzIEBACiAKIAkvKiBQSFkgZnVuY3Rpb24gcG9pbnRlcnMgKi8KIAlpZiAoaWdiX3NnbWlpX2FjdGl2ZV84MjU3NShodykpIHsKLQkJcGh5LT5vcHMucmVzZXRfcGh5ICAgICAgICAgID0gaWdiX3BoeV9od19yZXNldF9zZ21paV84MjU3NTsKLQkJcGh5LT5vcHMucmVhZF9waHlfcmVnICAgICAgID0gaWdiX3JlYWRfcGh5X3JlZ19zZ21paV84MjU3NTsKLQkJcGh5LT5vcHMud3JpdGVfcGh5X3JlZyAgICAgID0gaWdiX3dyaXRlX3BoeV9yZWdfc2dtaWlfODI1NzU7CisJCXBoeS0+b3BzLnJlc2V0ICAgICAgICAgICAgICA9IGlnYl9waHlfaHdfcmVzZXRfc2dtaWlfODI1NzU7CisJCXBoeS0+b3BzLnJlYWRfcmVnICAgICAgICAgICA9IGlnYl9yZWFkX3BoeV9yZWdfc2dtaWlfODI1NzU7CisJCXBoeS0+b3BzLndyaXRlX3JlZyAgICAgICAgICA9IGlnYl93cml0ZV9waHlfcmVnX3NnbWlpXzgyNTc1OwogCX0gZWxzZSB7Ci0JCXBoeS0+b3BzLnJlc2V0X3BoeSAgICAgICAgICA9IGlnYl9waHlfaHdfcmVzZXQ7Ci0JCXBoeS0+b3BzLnJlYWRfcGh5X3JlZyAgICAgICA9IGlnYl9yZWFkX3BoeV9yZWdfaWdwOwotCQlwaHktPm9wcy53cml0ZV9waHlfcmVnICAgICAgPSBpZ2Jfd3JpdGVfcGh5X3JlZ19pZ3A7CisJCXBoeS0+b3BzLnJlc2V0ICAgICAgICAgICAgICA9IGlnYl9waHlfaHdfcmVzZXQ7CisJCXBoeS0+b3BzLnJlYWRfcmVnICAgICAgICAgICA9IGlnYl9yZWFkX3BoeV9yZWdfaWdwOworCQlwaHktPm9wcy53cml0ZV9yZWcgICAgICAgICAgPSBpZ2Jfd3JpdGVfcGh5X3JlZ19pZ3A7CiAJfQogCiAJLyogU2V0IHBoeS0+cGh5X2FkZHIgYW5kIHBoeS0+aWQuICovCkBAIC0yMjksNiArMjE1LDEwIEBACiAJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKIAl9CiAKKwkvKiBpZiA4MjU3NiB0aGVuIGluaXRpYWxpemUgbWFpbGJveCBwYXJhbWV0ZXJzICovCisJaWYgKG1hYy0+dHlwZSA9PSBlMTAwMF84MjU3NikKKwkJaWdiX2luaXRfbWJ4X3BhcmFtc19wZihodyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDUxLDcgKzQ0MSw3IEBACiAJICogU0ZQIGRvY3VtZW50YXRpb24gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyB0byBjb25maWd1cmUgdGhlIFNQRiBtb2R1bGUKIAkgKiB0byB3b3JrIG9uIFNHTUlJLiAgTm8gZnVydGhlciBkb2N1bWVudGF0aW9uIGlzIGdpdmVuLgogCSAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFCLCAweDgwODQpOworCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUIsIDB4ODA4NCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC00ODAsMjggKzQ3MCwyOCBAQAogCXMzMiByZXRfdmFsOwogCXUxNiBkYXRhOwogCi0JcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwgJmRhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwgJmRhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCWlmIChhY3RpdmUpIHsKIAkJZGF0YSB8PSBJR1AwMkUxMDAwX1BNX0QwX0xQTFU7Ci0JCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAorCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAogCQkJCQkJIGRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCiAJCS8qIFdoZW4gTFBMVSBpcyBlbmFibGVkLCB3ZSBzaG91bGQgZGlzYWJsZSBTbWFydFNwZWVkICovCi0JCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAorCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkJJmRhdGEpOwogCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkJIGRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWRhdGEgJj0gfklHUDAyRTEwMDBfUE1fRDBfTFBMVTsKLQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCiAJCQkJCQkgZGF0YSk7CiAJCS8qCiAJCSAqIExQTFUgYW5kIFNtYXJ0U3BlZWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIExQTFUgaXMgdXNlZApAQCAtNTEwLDI0ICs1MDAsMjQgQEAKIAkJICogU21hcnRTcGVlZCwgc28gcGVyZm9ybWFuY2UgaXMgbWFpbnRhaW5lZC4KIAkJICovCiAJCWlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29uKSB7Ci0JCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9waHlfcmVnKGh3LAorCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LAogCQkJCQlJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAKIAkJCWRhdGEgfD0gSUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLQkJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywKIAkJCQkJSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsIGRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAocGh5LT5zbWFydF9zcGVlZCA9PSBlMTAwMF9zbWFydF9zcGVlZF9vZmYpIHsKLQkJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsCiAJCQkJCUlHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLCAmZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLQkJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywKIAkJCQkJSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsIGRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CkBAIC04MDMsNyArNzkzLDcgQEAKIH0KIAogLyoqCi0gKiAgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUgLSBVcGRhdGUgTXVsdGljYXN0IGFkZHJlc3NlcworICogIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0IC0gVXBkYXRlIE11bHRpY2FzdCBhZGRyZXNzZXMKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBtY19hZGRyX2xpc3Q6IGFycmF5IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQogICogIEBtY19hZGRyX2NvdW50OiBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCkBAIC04MTUsOSArODA1LDkgQEAKICAqICBUaGUgcGFyYW1ldGVyIHJhcl9jb3VudCB3aWxsIHVzdWFsbHkgYmUgaHctPm1hYy5yYXJfZW50cnlfY291bnQKICAqICB1bmxlc3MgdGhlcmUgYXJlIHdvcmthcm91bmRzIHRoYXQgY2hhbmdlIHRoaXMuCiAgKiovCi12b2lkIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICptY19hZGRyX2xpc3QsIHUzMiBtY19hZGRyX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcmFyX3VzZWRfY291bnQsIHUzMiByYXJfY291bnQpCit2b2lkIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0KHN0cnVjdCBlMTAwMF9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICptY19hZGRyX2xpc3QsIHUzMiBtY19hZGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgcmFyX3VzZWRfY291bnQsIHUzMiByYXJfY291bnQpCiB7CiAJdTMyIGhhc2hfdmFsdWU7CiAJdTMyIGk7CkBAIC0xMDUxLDcgKzEwNDEsNyBAQAogCQkgKiBkZXBlbmRpbmcgb24gdXNlciBzZXR0aW5ncy4KIAkJICovCiAJCWh3X2RiZygiRm9yY2luZyBTcGVlZCBhbmQgRHVwbGV4XG4iKTsKLQkJcmV0X3ZhbCA9IGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4KGh3KTsKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmZvcmNlX3NwZWVkX2R1cGxleChodyk7CiAJCWlmIChyZXRfdmFsKSB7CiAJCQlod19kYmcoIkVycm9yIEZvcmNpbmcgU3BlZWQgYW5kIER1cGxleFxuIik7CiAJCQlnb3RvIG91dDsKQEAgLTExMTAsNiArMTEwMCwxMyBAQAogCSAgICAgICBFMTAwMF9DVFJMX1NXRFBJTjE7CiAJd3IzMihFMTAwMF9DVFJMLCByZWcpOwogCisJLyogUG93ZXIgb24gcGh5IGZvciA4MjU3NiBmaWJlciBhZGFwdGVycyAqLworCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzYpIHsKKwkJcmVnID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7CisJCXJlZyAmPSB+RTEwMDBfQ1RSTF9FWFRfU0RQN19EQVRBOworCQl3cjMyKEUxMDAwX0NUUkxfRVhULCByZWcpOworCX0KKwogCS8qIFNldCBzd2l0Y2ggY29udHJvbCB0byBzZXJkZXMgZW5lcmd5IGRldGVjdCAqLwogCXJlZyA9IHJkMzIoRTEwMDBfQ09OTlNXKTsKIAlyZWcgfD0gRTEwMDBfQ09OTlNXX0VOUkdTUkM7CkBAIC0xMjI3LDIwICsxMjI0LDEyIEBACiAgKiovCiBzdGF0aWMgYm9vbCBpZ2Jfc2dtaWlfYWN0aXZlXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7Ci0Jc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICpkZXZfc3BlYzsKLQlib29sIHJldF92YWw7CisJc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICpkZXZfc3BlYyA9ICZody0+ZGV2X3NwZWMuXzgyNTc1OwogCi0JaWYgKGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NSkgewotCQlyZXRfdmFsID0gZmFsc2U7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoaHctPm1hYy50eXBlICE9IGUxMDAwXzgyNTc1ICYmIGh3LT5tYWMudHlwZSAhPSBlMTAwMF84MjU3NikKKwkJcmV0dXJuIGZhbHNlOwogCi0JZGV2X3NwZWMgPSAoc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTc1ICopaHctPmRldl9zcGVjOwotCi0JcmV0X3ZhbCA9IGRldl9zcGVjLT5zZ21paV9hY3RpdmU7Ci0KLW91dDoKLQlyZXR1cm4gcmV0X3ZhbDsKKwlyZXR1cm4gZGV2X3NwZWMtPnNnbWlpX2FjdGl2ZTsKIH0KIAogLyoqCkBAIC0xNDMwLDYgKzE0MTksNDQgQEAKIAlyZDMyKEUxMDAwX01QQyk7CiB9CiAKKy8qKgorICogIGlnYl92bWRxX3NldF9sb29wYmFja19wZiAtIGVuYWJsZSBvciBkaXNhYmxlIHZtZHEgbG9vcGJhY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdAorICogIEBlbmFibGU6IHN0YXRlIHRvIGVudGVyLCBlaXRoZXIgZW5hYmxlZCBvciBkaXNhYmxlZAorICoKKyAqICBlbmFibGVzL2Rpc2FibGVzIEwyIHN3aXRjaCBsb29wYmFjayBmdW5jdGlvbmFsaXR5LgorICoqLwordm9pZCBpZ2Jfdm1kcV9zZXRfbG9vcGJhY2tfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBlbmFibGUpCit7CisJdTMyIGR0eHN3YyA9IHJkMzIoRTEwMDBfRFRYU1dDKTsKKworCWlmIChlbmFibGUpCisJCWR0eHN3YyB8PSBFMTAwMF9EVFhTV0NfVk1EUV9MT09QQkFDS19FTjsKKwllbHNlCisJCWR0eHN3YyAmPSB+RTEwMDBfRFRYU1dDX1ZNRFFfTE9PUEJBQ0tfRU47CisKKwl3cjMyKEUxMDAwX0RUWFNXQywgZHR4c3djKTsKK30KKworLyoqCisgKiAgaWdiX3ZtZHFfc2V0X3JlcGxpY2F0aW9uX3BmIC0gZW5hYmxlIG9yIGRpc2FibGUgdm1kcSByZXBsaWNhdGlvbgorICogIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0CisgKiAgQGVuYWJsZTogc3RhdGUgdG8gZW50ZXIsIGVpdGhlciBlbmFibGVkIG9yIGRpc2FibGVkCisgKgorICogIGVuYWJsZXMvZGlzYWJsZXMgcmVwbGljYXRpb24gb2YgcGFja2V0cyBhY3Jvc3MgbXVsdGlwbGUgcG9vbHMuCisgKiovCit2b2lkIGlnYl92bWRxX3NldF9yZXBsaWNhdGlvbl9wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCBib29sIGVuYWJsZSkKK3sKKwl1MzIgdnRfY3RsID0gcmQzMihFMTAwMF9WVF9DVEwpOworCisJaWYgKGVuYWJsZSkKKwkJdnRfY3RsIHw9IEUxMDAwX1ZUX0NUTF9WTV9SRVBMX0VOOworCWVsc2UKKwkJdnRfY3RsICY9IH5FMTAwMF9WVF9DVExfVk1fUkVQTF9FTjsKKworCXdyMzIoRTEwMDBfVlRfQ1RMLCB2dF9jdGwpOworfQorCiBzdGF0aWMgc3RydWN0IGUxMDAwX21hY19vcGVyYXRpb25zIGUxMDAwX21hY19vcHNfODI1NzUgPSB7CiAJLnJlc2V0X2h3ICAgICAgICAgICAgID0gaWdiX3Jlc2V0X2h3XzgyNTc1LAogCS5pbml0X2h3ICAgICAgICAgICAgICA9IGlnYl9pbml0X2h3XzgyNTc1LApAQCAtMTQ0MCwxNiArMTQ2NywxNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBlMTAwMF9waHlfb3BlcmF0aW9ucyBlMTAwMF9waHlfb3BzXzgyNTc1ID0gewotCS5hY3F1aXJlX3BoeSAgICAgICAgICA9IGlnYl9hY3F1aXJlX3BoeV84MjU3NSwKKwkuYWNxdWlyZSAgICAgICAgICAgICAgPSBpZ2JfYWNxdWlyZV9waHlfODI1NzUsCiAJLmdldF9jZmdfZG9uZSAgICAgICAgID0gaWdiX2dldF9jZmdfZG9uZV84MjU3NSwKLQkucmVsZWFzZV9waHkgICAgICAgICAgPSBpZ2JfcmVsZWFzZV9waHlfODI1NzUsCisJLnJlbGVhc2UgICAgICAgICAgICAgID0gaWdiX3JlbGVhc2VfcGh5XzgyNTc1LAogfTsKIAogc3RhdGljIHN0cnVjdCBlMTAwMF9udm1fb3BlcmF0aW9ucyBlMTAwMF9udm1fb3BzXzgyNTc1ID0gewotCS5hY3F1aXJlX252bSAgICAgICAgICA9IGlnYl9hY3F1aXJlX252bV84MjU3NSwKLQkucmVhZF9udm0gICAgICAgICAgICAgPSBpZ2JfcmVhZF9udm1fZWVyZCwKLQkucmVsZWFzZV9udm0gICAgICAgICAgPSBpZ2JfcmVsZWFzZV9udm1fODI1NzUsCi0JLndyaXRlX252bSAgICAgICAgICAgID0gaWdiX3dyaXRlX252bV9zcGksCisJLmFjcXVpcmUgICAgICAgICAgICAgID0gaWdiX2FjcXVpcmVfbnZtXzgyNTc1LAorCS5yZWFkICAgICAgICAgICAgICAgICA9IGlnYl9yZWFkX252bV9lZXJkLAorCS5yZWxlYXNlICAgICAgICAgICAgICA9IGlnYl9yZWxlYXNlX252bV84MjU3NSwKKwkud3JpdGUgICAgICAgICAgICAgICAgPSBpZ2Jfd3JpdGVfbnZtX3NwaSwKIH07CiAKIGNvbnN0IHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTc1X2luZm8gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCmluZGV4IGMxOTI4YjUuLmVhZjk3NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTI4LDcgKzI4LDcgQEAKICNpZm5kZWYgX0UxMDAwXzgyNTc1X0hfCiAjZGVmaW5lIF9FMTAwMF84MjU3NV9IXwogCi12b2lkIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTc1KHN0cnVjdCBlMTAwMF9odyosIHU4KiwgdTMyLCB1MzIsIHUzMik7Cit2b2lkIGlnYl91cGRhdGVfbWNfYWRkcl9saXN0KHN0cnVjdCBlMTAwMF9odyosIHU4KiwgdTMyLCB1MzIsIHUzMik7CiBleHRlcm4gdm9pZCBpZ2Jfc2h1dGRvd25fZmliZXJfc2VyZGVzX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBpZ2JfcnhfZmlmb19mbHVzaF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIApAQCAtNDAsOCArNDAsMTEgQEAKICNkZWZpbmUgRTEwMDBfU1JSQ1RMX0JTSVpFSERSU0laRV9TSElGVCAgICAgICAgICAgICAgICAgMiAgLyogU2hpZnQgX2xlZnRfICovCiAjZGVmaW5lIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGICAgICAgICAgICAgICAgIDB4MDIwMDAwMDAKICNkZWZpbmUgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0hEUl9TUExJVF9BTFdBWVMgICAgICAgICAgMHgwQTAwMDAwMAorI2RlZmluZSBFMTAwMF9TUlJDVExfRFJPUF9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAwMDAwCiAKICNkZWZpbmUgRTEwMDBfTVJRQ19FTkFCTEVfUlNTXzRRICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFMTAwMF9NUlFDX0VOQUJMRV9WTURRICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIEUxMDAwX01SUUNfRU5BQkxFX1ZNRFFfUlNTXzJRICAgICAgIDB4MDAwMDAwMDUKICNkZWZpbmUgRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNF9VRFAgICAgICAgMHgwMDQwMDAwMAogI2RlZmluZSBFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY2X1VEUCAgICAgICAweDAwODAwMDAwCiAjZGVmaW5lIEUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQX0VYICAgIDB4MDEwMDAwMDAKQEAgLTU4LDkgKzYxLDYgQEAKICAgICBFMTAwMF9FSUNSX1JYX1FVRVVFMiB8ICAgIFwKICAgICBFMTAwMF9FSUNSX1JYX1FVRVVFMykKIAotI2RlZmluZSBFMTAwMF9FSU1TX1JYX1FVRVVFIEUxMDAwX0VJQ1JfUlhfUVVFVUUKLSNkZWZpbmUgRTEwMDBfRUlNU19UWF9RVUVVRSBFMTAwMF9FSUNSX1RYX1FVRVVFCi0KIC8qIEltbWVkaWF0ZSBJbnRlcnJ1cHQgUnggKEEuSy5BLiBMb3cgTGF0ZW5jeSBJbnRlcnJ1cHQpICovCiAKIC8qIFJlY2VpdmUgRGVzY3JpcHRvciAtIEFkdmFuY2VkICovCkBAIC05NSwxMiArOTUsNiBAQAogI2RlZmluZSBFMTAwMF9SWERBRFZfSERSQlVGTEVOX01BU0sgICAgICAweDdGRTAKICNkZWZpbmUgRTEwMDBfUlhEQURWX0hEUkJVRkxFTl9TSElGVCAgICAgNQogCi0vKiBSU1MgSGFzaCByZXN1bHRzICovCi0KLS8qIFJTUyBQYWNrZXQgVHlwZXMgYXMgaW5kaWNhdGVkIGluIHRoZSByZWNlaXZlIGRlc2NyaXB0b3IgKi8KLSNkZWZpbmUgRTEwMDBfUlhEQURWX1BLVFRZUEVfSVBWNCAgICAgICAgMHgwMDAwMDAxMCAvKiBJUFY0IGhkciBwcmVzZW50ICovCi0jZGVmaW5lIEUxMDAwX1JYREFEVl9QS1RUWVBFX1RDUCAgICAgICAgIDB4MDAwMDAxMDAgLyogVENQIGhkciBwcmVzZW50ICovCi0KIC8qIFRyYW5zbWl0IERlc2NyaXB0b3IgLSBBZHZhbmNlZCAqLwogdW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MgewogCXN0cnVjdCB7CkBAIC0xMTYsNiArMTEwLDcgQEAKIH07CiAKIC8qIEFkdiBUcmFuc21pdCBEZXNjcmlwdG9yIENvbmZpZyBNYXNrcyAqLworI2RlZmluZSBFMTAwMF9BRFZUWERfTUFDX1RTVEFNUCAgIDB4MDAwODAwMDAgLyogSUVFRTE1ODggVGltZXN0YW1wIHBhY2tldCAqLwogI2RlZmluZSBFMTAwMF9BRFZUWERfRFRZUF9DVFhUICAgIDB4MDAyMDAwMDAgLyogQWR2YW5jZWQgQ29udGV4dCBEZXNjcmlwdG9yICovCiAjZGVmaW5lIEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgICAgMHgwMDMwMDAwMCAvKiBBZHZhbmNlZCBEYXRhIERlc2NyaXB0b3IgKi8KICNkZWZpbmUgRTEwMDBfQURWVFhEX0RDTURfSUZDUyAgICAweDAyMDAwMDAwIC8qIEluc2VydCBGQ1MgKEV0aGVybmV0IENSQykgKi8KQEAgLTE0OSwxMSArMTQ0LDggQEAKICNkZWZpbmUgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSAgMHgwMjAwMDAwMCAvKiBFbmFibGUgc3BlY2lmaWMgUnggUXVldWUgKi8KIAogLyogRGlyZWN0IENhY2hlIEFjY2VzcyAoRENBKSBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBFMTAwMF9EQ0FfQ1RSTF9EQ0FfRU5BQkxFICAweDAwMDAwMDAwIC8qIERDQSBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfRENBX0NUUkxfRENBX0RJU0FCTEUgMHgwMDAwMDAwMSAvKiBEQ0EgRGlzYWJsZSAqLwotCi0jZGVmaW5lIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0NCMSAweDAwIC8qIERDQSBNb2RlIENCMSAqLwotI2RlZmluZSBFMTAwMF9EQ0FfQ1RSTF9EQ0FfTU9ERV9DQjIgMHgwMiAvKiBEQ0EgTW9kZSBDQjIgKi8KKyNkZWZpbmUgRTEwMDBfRENBX0NUUkxfRENBX01PREVfRElTQUJMRSAweDAxIC8qIERDQSBEaXNhYmxlICovCisjZGVmaW5lIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0NCMiAgICAgMHgwMiAvKiBEQ0EgTW9kZSBDQjIgKi8KIAogI2RlZmluZSBFMTAwMF9EQ0FfUlhDVFJMX0NQVUlEX01BU0sgMHgwMDAwMDAxRiAvKiBSeCBDUFVJRCBNYXNrICovCiAjZGVmaW5lIEUxMDAwX0RDQV9SWENUUkxfREVTQ19EQ0FfRU4gKDEgPDwgNSkgLyogRENBIFJ4IERlc2MgZW5hYmxlICovCkBAIC0xNzAsNCArMTYyLDQ0IEBACiAjZGVmaW5lIEUxMDAwX0RDQV9UWENUUkxfQ1BVSURfU0hJRlQgMjQgLyogVHggQ1BVSUQgbm93IGluIHRoZSBsYXN0IGJ5dGUgKi8KICNkZWZpbmUgRTEwMDBfRENBX1JYQ1RSTF9DUFVJRF9TSElGVCAyNCAvKiBSeCBDUFVJRCBub3cgaW4gdGhlIGxhc3QgYnl0ZSAqLwogCisjZGVmaW5lIE1BWF9OVU1fVkZTICAgICAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBFMTAwMF9EVFhTV0NfVk1EUV9MT09QQkFDS19FTiAoMSA8PCAzMSkgIC8qIGdsb2JhbCBWRiBMQiBlbmFibGUgKi8KKworLyogRWFzeSBkZWZpbmVzIGZvciBzZXR0aW5nIGRlZmF1bHQgcG9vbCwgd291bGQgbm9ybWFsbHkgYmUgbGVmdCBhIHplcm8gKi8KKyNkZWZpbmUgRTEwMDBfVlRfQ1RMX0RFRkFVTFRfUE9PTF9TSElGVCA3CisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9ERUZBVUxUX1BPT0xfTUFTSyAgKDB4NyA8PCBFMTAwMF9WVF9DVExfREVGQVVMVF9QT09MX1NISUZUKQorCisvKiBPdGhlciB1c2VmdWwgVk1EX0NUTCByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9JR05PUkVfTUFDICAgICAgICAgKDEgPDwgMjgpCisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9ESVNBQkxFX0RFRl9QT09MICAgKDEgPDwgMjkpCisjZGVmaW5lIEUxMDAwX1ZUX0NUTF9WTV9SRVBMX0VOICAgICAgICAgKDEgPDwgMzApCisKKy8qIFBlciBWTSBPZmZsb2FkIHJlZ2lzdGVyIHNldHVwICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1JMUE1MX01BU0sgMHgwMDAwM0ZGRiAvKiBMb25nIFBhY2tldCBNYXhpbXVtIExlbmd0aCBtYXNrICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX0xQRSAgICAgICAgMHgwMDAxMDAwMCAvKiBBY2NlcHQgTG9uZyBwYWNrZXQgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfUlNTRSAgICAgICAweDAwMDIwMDAwIC8qIEVuYWJsZSBSU1MgKi8KKyNkZWZpbmUgRTEwMDBfVk1PTFJfQVVQRSAgICAgICAweDAxMDAwMDAwIC8qIEFjY2VwdCB1bnRhZ2dlZCBwYWNrZXRzICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1JPTVBFICAgICAgMHgwMjAwMDAwMCAvKiBBY2NlcHQgb3ZlcmZsb3cgbXVsdGljYXN0ICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1JPUEUgICAgICAgMHgwNDAwMDAwMCAvKiBBY2NlcHQgb3ZlcmZsb3cgdW5pY2FzdCAqLworI2RlZmluZSBFMTAwMF9WTU9MUl9CQU0gICAgICAgIDB4MDgwMDAwMDAgLyogQWNjZXB0IEJyb2FkY2FzdCBwYWNrZXRzICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX01QTUUgICAgICAgMHgxMDAwMDAwMCAvKiBNdWx0aWNhc3QgcHJvbWlzY3VvdXMgbW9kZSAqLworI2RlZmluZSBFMTAwMF9WTU9MUl9TVFJWTEFOICAgIDB4NDAwMDAwMDAgLyogVmxhbiBzdHJpcHBpbmcgZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1ZNT0xSX1NUUkNSQyAgICAgMHg4MDAwMDAwMCAvKiBDUkMgc3RyaXBwaW5nIGVuYWJsZSAqLworCisjZGVmaW5lIEUxMDAwX1ZMVkZfQVJSQVlfU0laRSAgICAgMzIKKyNkZWZpbmUgRTEwMDBfVkxWRl9WTEFOSURfTUFTSyAgICAweDAwMDAwRkZGCisjZGVmaW5lIEUxMDAwX1ZMVkZfUE9PTFNFTF9TSElGVCAgMTIKKyNkZWZpbmUgRTEwMDBfVkxWRl9QT09MU0VMX01BU0sgICAoMHhGRiA8PCBFMTAwMF9WTFZGX1BPT0xTRUxfU0hJRlQpCisjZGVmaW5lIEUxMDAwX1ZMVkZfTFZMQU4gICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUgIDB4ODAwMDAwMDAKKworI2RlZmluZSBFMTAwMF9JT1ZDVEwgMHgwNUJCQworI2RlZmluZSBFMTAwMF9JT1ZDVExfUkVVU0VfVkZRIDB4MDAwMDAwMDEKKworI2RlZmluZSBBTExfUVVFVUVTICAgMHhGRkZGCisKK3ZvaWQgaWdiX3ZtZHFfc2V0X2xvb3BiYWNrX3BmKHN0cnVjdCBlMTAwMF9odyAqLCBib29sKTsKK3ZvaWQgaWdiX3ZtZHFfc2V0X3JlcGxpY2F0aW9uX3BmKHN0cnVjdCBlMTAwMF9odyAqLCBib29sKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaAppbmRleCA0MGQwMzQyLi5hZDJkMzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNDIsMzMgKzQyLDExIEBACiAjZGVmaW5lIEUxMDAwX1dVRkNfRVggICAweDAwMDAwMDA0IC8qIERpcmVjdGVkIEV4YWN0IFdha2V1cCBFbmFibGUgKi8KICNkZWZpbmUgRTEwMDBfV1VGQ19NQyAgIDB4MDAwMDAwMDggLyogRGlyZWN0ZWQgTXVsdGljYXN0IFdha2V1cCBFbmFibGUgKi8KICNkZWZpbmUgRTEwMDBfV1VGQ19CQyAgIDB4MDAwMDAwMTAgLyogQnJvYWRjYXN0IFdha2V1cCBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfV1VGQ19BUlAgIDB4MDAwMDAwMjAgLyogQVJQIFJlcXVlc3QgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfV1VGQ19JUFY0IDB4MDAwMDAwNDAgLyogRGlyZWN0ZWQgSVB2NCBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0lQVjYgMHgwMDAwMDA4MCAvKiBEaXJlY3RlZCBJUHY2IFBhY2tldCBXYWtldXAgRW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1dVRkNfRkxYMCAweDAwMDEwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAwIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0ZMWDEgMHgwMDAyMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMSBFbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfV1VGQ19GTFgyIDB4MDAwNDAwMDAgLyogRmxleGlibGUgRmlsdGVyIDIgRW5hYmxlICovCi0jZGVmaW5lIEUxMDAwX1dVRkNfRkxYMyAweDAwMDgwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAzIEVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9XVUZDX0ZMWF9GSUxURVJTIDB4MDAwRjAwMDAgLyogTWFzayBmb3IgdGhlIDQgZmxleGlibGUgZmlsdGVycyAqLwotCi0vKiBXYWtlIFVwIFN0YXR1cyAqLwotCi0vKiBXYWtlIFVwIFBhY2tldCBMZW5ndGggKi8KLQotLyogRm91ciBGbGV4aWJsZSBGaWx0ZXJzIGFyZSBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgRTEwMDBfRkxFWElCTEVfRklMVEVSX0NPVU5UX01BWCA0Ci0KLS8qIEVhY2ggRmxleGlibGUgRmlsdGVyIGlzIGF0IG1vc3QgMTI4ICgweDgwKSBieXRlcyBpbiBsZW5ndGggKi8KLSNkZWZpbmUgRTEwMDBfRkxFWElCTEVfRklMVEVSX1NJWkVfTUFYICAxMjgKLQogCiAvKiBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCAqLwotI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9HUEkxX0VOICAgMHgwMDAwMDAwMiAvKiBNYXBzIFNEUDUgdG8gR1BJMSAqLwotI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA0X0RBVEEgMHgwMDAwMDAxMCAvKiBWYWx1ZSBvZiBTVyBEZWZpbmVhYmxlIFBpbiA0ICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDVfREFUQSAweDAwMDAwMDIwIC8qIFZhbHVlIG9mIFNXIERlZmluZWFibGUgUGluIDUgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfU0RQN19EQVRBIDB4MDAwMDAwODAgLyogVmFsdWUgb2YgU1cgRGVmaW5lYWJsZSBQaW4gNyAqLwotI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA0X0RJUiAgMHgwMDAwMDEwMCAvKiBEaXJlY3Rpb24gb2YgU0RQNCAwPWluIDE9b3V0ICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0VFX1JTVCAgICAweDAwMDAyMDAwIC8qIFJlaW5pdGlhbGl6ZSBmcm9tIEVFUFJPTSAqLworLyogUGh5c2ljYWwgRnVuYyBSZXNldCBEb25lIEluZGljYXRpb24gKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfUEZSU1REICAgIDB4MDAwMDQwMDAKICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0sgMHgwMEMwMDAwMAogI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfUENJRV9TRVJERVMgIDB4MDBDMDAwMDAKICNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX1NHTUlJICAgMHgwMDgwMDAwMApAQCAtMTAzLDEzICs4MSw3IEBACiAjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX1ZQICAgICAgIDB4MDggICAgLyogSUVFRSBWTEFOIFBhY2tldCAqLwogI2RlZmluZSBFMTAwMF9SWERfU1RBVF9VRFBDUyAgICAweDEwICAgIC8qIFVEUCB4c3VtIGNhbGN1bGF0ZWQgKi8KICNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfVENQQ1MgICAgMHgyMCAgICAvKiBUQ1AgeHN1bSBjYWxjdWxhdGVkICovCi0jZGVmaW5lIEUxMDAwX1JYRF9TVEFUX0RZTklOVCAgIDB4ODAwICAgLyogUGt0IGNhdXNlZCBJTlQgdmlhIERZTklOVCAqLwotI2RlZmluZSBFMTAwMF9SWERfRVJSX0NFICAgICAgICAweDAxICAgIC8qIENSQyBFcnJvciAqLwotI2RlZmluZSBFMTAwMF9SWERfRVJSX1NFICAgICAgICAweDAyICAgIC8qIFN5bWJvbCBFcnJvciAqLwotI2RlZmluZSBFMTAwMF9SWERfRVJSX1NFUSAgICAgICAweDA0ICAgIC8qIFNlcXVlbmNlIEVycm9yICovCi0jZGVmaW5lIEUxMDAwX1JYRF9FUlJfQ1hFICAgICAgIDB4MTAgICAgLyogQ2FycmllciBFeHRlbnNpb24gRXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfUlhEX0VSUl9SWEUgICAgICAgMHg4MCAgICAvKiBSeCBEYXRhIEVycm9yICovCi0jZGVmaW5lIEUxMDAwX1JYRF9TUENfVkxBTl9NQVNLIDB4MEZGRiAgLyogVkxBTiBJRCBpcyBpbiBsb3dlciAxMiBiaXRzICovCisjZGVmaW5lIEUxMDAwX1JYRF9TVEFUX1RTICAgICAgIDB4MTAwMDAgLyogUGt0IHdhcyB0aW1lIHN0YW1wZWQgKi8KIAogI2RlZmluZSBFMTAwMF9SWERFWFRfU1RBVEVSUl9DRSAgICAweDAxMDAwMDAwCiAjZGVmaW5lIEUxMDAwX1JYREVYVF9TVEFURVJSX1NFICAgIDB4MDIwMDAwMDAKQEAgLTExOSwxNCArOTEsNiBAQAogI2RlZmluZSBFMTAwMF9SWERFWFRfU1RBVEVSUl9JUEUgICAweDQwMDAwMDAwCiAjZGVmaW5lIEUxMDAwX1JYREVYVF9TVEFURVJSX1JYRSAgIDB4ODAwMDAwMDAKIAotLyogbWFzayB0byBkZXRlcm1pbmUgaWYgcGFja2V0cyBzaG91bGQgYmUgZHJvcHBlZCBkdWUgdG8gZnJhbWUgZXJyb3JzICovCi0jZGVmaW5lIEUxMDAwX1JYRF9FUlJfRlJBTUVfRVJSX01BU0sgKCBcCi0gICAgRTEwMDBfUlhEX0VSUl9DRSAgfCAgICAgICAgICAgICAgICBcCi0gICAgRTEwMDBfUlhEX0VSUl9TRSAgfCAgICAgICAgICAgICAgICBcCi0gICAgRTEwMDBfUlhEX0VSUl9TRVEgfCAgICAgICAgICAgICAgICBcCi0gICAgRTEwMDBfUlhEX0VSUl9DWEUgfCAgICAgICAgICAgICAgICBcCi0gICAgRTEwMDBfUlhEX0VSUl9SWEUpCi0KIC8qIFNhbWUgbWFzaywgYnV0IGZvciBleHRlbmRlZCBhbmQgcGFja2V0IHNwbGl0IGRlc2NyaXB0b3JzICovCiAjZGVmaW5lIEUxMDAwX1JYREVYVF9FUlJfRlJBTUVfRVJSX01BU0sgKCBcCiAgICAgRTEwMDBfUlhERVhUX1NUQVRFUlJfQ0UgIHwgICAgICAgICAgICBcCkBAIC0xNDUsMTYgKzEwOSwxMSBAQAogLyogTWFuYWdlbWVudCBDb250cm9sICovCiAjZGVmaW5lIEUxMDAwX01BTkNfU01CVVNfRU4gICAgICAweDAwMDAwMDAxIC8qIFNNQnVzIEVuYWJsZWQgLSBSTyAqLwogI2RlZmluZSBFMTAwMF9NQU5DX0FTRl9FTiAgICAgICAgMHgwMDAwMDAwMiAvKiBBU0YgRW5hYmxlZCAtIFJPICovCi0jZGVmaW5lIEUxMDAwX01BTkNfQVJQX0VOICAgICAgICAweDAwMDAyMDAwIC8qIEVuYWJsZSBBUlAgUmVxdWVzdCBGaWx0ZXJpbmcgKi8KIC8qIEVuYWJsZSBOZWlnaGJvciBEaXNjb3ZlcnkgRmlsdGVyaW5nICovCiAjZGVmaW5lIEUxMDAwX01BTkNfUkNWX1RDT19FTiAgICAweDAwMDIwMDAwIC8qIFJlY2VpdmUgVENPIFBhY2tldHMgRW5hYmxlZCAqLwogI2RlZmluZSBFMTAwMF9NQU5DX0JMS19QSFlfUlNUX09OX0lERSAgIDB4MDAwNDAwMDAgLyogQmxvY2sgcGh5IHJlc2V0cyAqLwogLyogRW5hYmxlIE1BQyBhZGRyZXNzIGZpbHRlcmluZyAqLwogI2RlZmluZSBFMTAwMF9NQU5DX0VOX01BQ19BRERSX0ZJTFRFUiAgIDB4MDAxMDAwMDAKLS8qIEVuYWJsZSBNTkcgcGFja2V0cyB0byBob3N0IG1lbW9yeSAqLwotI2RlZmluZSBFMTAwMF9NQU5DX0VOX01ORzJIT1NUICAgMHgwMDIwMDAwMAotLyogRW5hYmxlIElQIGFkZHJlc3MgZmlsdGVyaW5nICovCi0KIAogLyogUmVjZWl2ZSBDb250cm9sICovCiAjZGVmaW5lIEUxMDAwX1JDVExfRU4gICAgICAgICAgICAgMHgwMDAwMDAwMiAgICAvKiBlbmFibGUgKi8KQEAgLTE2MiwxNCArMTIxLDExIEBACiAjZGVmaW5lIEUxMDAwX1JDVExfVVBFICAgICAgICAgICAgMHgwMDAwMDAwOCAgICAvKiB1bmljYXN0IHByb21pc2N1b3VzIGVuYWJsZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX01QRSAgICAgICAgICAgIDB4MDAwMDAwMTAgICAgLyogbXVsdGljYXN0IHByb21pc2N1b3VzIGVuYWIgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9MUEUgICAgICAgICAgICAweDAwMDAwMDIwICAgIC8qIGxvbmcgcGFja2V0IGVuYWJsZSAqLwotI2RlZmluZSBFMTAwMF9SQ1RMX0xCTV9OTyAgICAgICAgIDB4MDAwMDAwMDAgICAgLyogbm8gbG9vcGJhY2sgbW9kZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX0xCTV9NQUMgICAgICAgIDB4MDAwMDAwNDAgICAgLyogTUFDIGxvb3BiYWNrIG1vZGUgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9MQk1fVENWUiAgICAgICAweDAwMDAwMEMwICAgIC8qIHRjdnIgbG9vcGJhY2sgbW9kZSAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX1JETVRTX0hBTEYgICAgIDB4MDAwMDAwMDAgICAgLyogcnggZGVzYyBtaW4gdGhyZXNob2xkIHNpemUgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9NT19TSElGVCAgICAgICAxMiAgICAgICAgICAgIC8qIG11bHRpY2FzdCBvZmZzZXQgc2hpZnQgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9CQU0gICAgICAgICAgICAweDAwMDA4MDAwICAgIC8qIGJyb2FkY2FzdCBlbmFibGUgKi8KLSNkZWZpbmUgRTEwMDBfUkNUTF9TWl8yMDQ4ICAgICAgICAweDAwMDAwMDAwICAgIC8qIHJ4IGJ1ZmZlciBzaXplIDIwNDggKi8KLSNkZWZpbmUgRTEwMDBfUkNUTF9TWl8xMDI0ICAgICAgICAweDAwMDEwMDAwICAgIC8qIHJ4IGJ1ZmZlciBzaXplIDEwMjQgKi8KICNkZWZpbmUgRTEwMDBfUkNUTF9TWl81MTIgICAgICAgICAweDAwMDIwMDAwICAgIC8qIHJ4IGJ1ZmZlciBzaXplIDUxMiAqLwogI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzI1NiAgICAgICAgIDB4MDAwMzAwMDAgICAgLyogcnggYnVmZmVyIHNpemUgMjU2ICovCiAjZGVmaW5lIEUxMDAwX1JDVExfVkZFICAgICAgICAgICAgMHgwMDA0MDAwMCAgICAvKiB2bGFuIGZpbHRlciBlbmFibGUgKi8KQEAgLTIyNiwxMSArMTgyLDcgQEAKIC8qIGVuYWJsZSBsaW5rIHN0YXR1cyBmcm9tIGV4dGVybmFsIExJTktfMCBhbmQgTElOS18xIHBpbnMgKi8KICNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU4wICAweDAwMDQwMDAwICAvKiBTV0RQSU4gMCB2YWx1ZSAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTjEgIDB4MDAwODAwMDAgIC8qIFNXRFBJTiAxIHZhbHVlICovCi0jZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElOMiAgMHgwMDEwMDAwMCAgLyogU1dEUElOIDIgdmFsdWUgKi8KLSNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU4zICAweDAwMjAwMDAwICAvKiBTV0RQSU4gMyB2YWx1ZSAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTzAgIDB4MDA0MDAwMDAgIC8qIFNXRFBJTiAwIElucHV0IG9yIG91dHB1dCAqLwotI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTzIgIDB4MDEwMDAwMDAgIC8qIFNXRFBJTiAyIGlucHV0IG9yIG91dHB1dCAqLwotI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTzMgIDB4MDIwMDAwMDAgIC8qIFNXRFBJTiAzIGlucHV0IG9yIG91dHB1dCAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1JTVCAgICAgIDB4MDQwMDAwMDAgIC8qIEdsb2JhbCByZXNldCAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1JGQ0UgICAgIDB4MDgwMDAwMDAgIC8qIFJlY2VpdmUgRmxvdyBDb250cm9sIGVuYWJsZSAqLwogI2RlZmluZSBFMTAwMF9DVFJMX1RGQ0UgICAgIDB4MTAwMDAwMDAgIC8qIFRyYW5zbWl0IGZsb3cgY29udHJvbCBlbmFibGUgKi8KQEAgLTMwOCw5ICsyNjAsNyBAQAogI2RlZmluZSBBVVRPTkVHX0FEVkVSVElTRV9TUEVFRF9ERUZBVUxUICAgRTEwMDBfQUxMX1NQRUVEX0RVUExFWAogCiAvKiBMRUQgQ29udHJvbCAqLwotI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9NT0RFX01BU0sgICAgICAgMHgwMDAwMDAwRgogI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9NT0RFX1NISUZUICAgICAgMAotI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9JVlJUICAgICAgICAgICAgMHgwMDAwMDA0MAogI2RlZmluZSBFMTAwMF9MRURDVExfTEVEMF9CTElOSyAgICAgICAgICAgMHgwMDAwMDA4MAogCiAjZGVmaW5lIEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PTiAgICAgICAgMHhFCkBAIC0zNTcsMTIgKzMwNyw3IEBACiAKICNkZWZpbmUgTUFYX0pVTUJPX0ZSQU1FX1NJWkUgICAgMHgzRjAwCiAKLS8qIEV4dGVuZGVkIENvbmZpZ3VyYXRpb24gQ29udHJvbCBhbmQgU2l6ZSAqLwotI2RlZmluZSBFMTAwMF9QSFlfQ1RSTF9HQkVfRElTQUJMRSAgICAgICAgMHgwMDAwMDA0MAotCiAvKiBQQkEgY29uc3RhbnRzICovCi0jZGVmaW5lIEUxMDAwX1BCQV8xNksgMHgwMDEwICAgIC8qIDE2S0IsIGRlZmF1bHQgVFggYWxsb2NhdGlvbiAqLwotI2RlZmluZSBFMTAwMF9QQkFfMjRLIDB4MDAxOAogI2RlZmluZSBFMTAwMF9QQkFfMzRLIDB4MDAyMgogI2RlZmluZSBFMTAwMF9QQkFfNjRLIDB4MDA0MCAgICAvKiA2NEtCICovCiAKQEAgLTM3OCw0MSArMzIzLDE1IEBACiAKIC8qIEludGVycnVwdCBDYXVzZSBSZWFkICovCiAjZGVmaW5lIEUxMDAwX0lDUl9UWERXICAgICAgICAgIDB4MDAwMDAwMDEgLyogVHJhbnNtaXQgZGVzYyB3cml0dGVuIGJhY2sgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1RYUUUgICAgICAgICAgMHgwMDAwMDAwMiAvKiBUcmFuc21pdCBRdWV1ZSBlbXB0eSAqLwogI2RlZmluZSBFMTAwMF9JQ1JfTFNDICAgICAgICAgICAweDAwMDAwMDA0IC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLwogI2RlZmluZSBFMTAwMF9JQ1JfUlhTRVEgICAgICAgICAweDAwMDAwMDA4IC8qIHJ4IHNlcXVlbmNlIGVycm9yICovCiAjZGVmaW5lIEUxMDAwX0lDUl9SWERNVDAgICAgICAgIDB4MDAwMDAwMTAgLyogcnggZGVzYyBtaW4uIHRocmVzaG9sZCAoMCkgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1JYTyAgICAgICAgICAgMHgwMDAwMDA0MCAvKiByeCBvdmVycnVuICovCiAjZGVmaW5lIEUxMDAwX0lDUl9SWFQwICAgICAgICAgIDB4MDAwMDAwODAgLyogcnggdGltZXIgaW50ciAocmluZyAwKSAqLwotI2RlZmluZSBFMTAwMF9JQ1JfTURBQyAgICAgICAgICAweDAwMDAwMjAwIC8qIE1ESU8gYWNjZXNzIGNvbXBsZXRlICovCi0jZGVmaW5lIEUxMDAwX0lDUl9SWENGRyAgICAgICAgIDB4MDAwMDA0MDAgLyogUnggL2MvIG9yZGVyZWQgc2V0ICovCi0jZGVmaW5lIEUxMDAwX0lDUl9HUElfRU4wICAgICAgIDB4MDAwMDA4MDAgLyogR1AgSW50IDAgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0dQSV9FTjEgICAgICAgMHgwMDAwMTAwMCAvKiBHUCBJbnQgMSAqLwotI2RlZmluZSBFMTAwMF9JQ1JfR1BJX0VOMiAgICAgICAweDAwMDAyMDAwIC8qIEdQIEludCAyICovCi0jZGVmaW5lIEUxMDAwX0lDUl9HUElfRU4zICAgICAgIDB4MDAwMDQwMDAgLyogR1AgSW50IDMgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1RYRF9MT1cgICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBFMTAwMF9JQ1JfU1JQRCAgICAgICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIEUxMDAwX0lDUl9BQ0sgICAgICAgICAgIDB4MDAwMjAwMDAgLyogUmVjZWl2ZSBBY2sgZnJhbWUgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX01ORyAgICAgICAgICAgMHgwMDA0MDAwMCAvKiBNYW5hZ2VhYmlsaXR5IGV2ZW50ICovCi0jZGVmaW5lIEUxMDAwX0lDUl9ET0NLICAgICAgICAgIDB4MDAwODAwMDAgLyogRG9jay9VbmRvY2sgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1ZNTUIgICAgICAgICAgMHgwMDAwMDEwMCAvKiBWTSBNQiBldmVudCAqLwogLyogSWYgdGhpcyBiaXQgYXNzZXJ0ZWQsIHRoZSBkcml2ZXIgc2hvdWxkIGNsYWltIHRoZSBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCAgMHg4MDAwMDAwMAotLyogcXVldWUgMCBSeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCi0jZGVmaW5lIEUxMDAwX0lDUl9SWERfRklGT19QQVIwIDB4MDAxMDAwMDAKLS8qIHF1ZXVlIDAgVHggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLwotI2RlZmluZSBFMTAwMF9JQ1JfVFhEX0ZJRk9fUEFSMCAweDAwMjAwMDAwCi0vKiBob3N0IGFyYiByZWFkIGJ1ZmZlciBwYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0hPU1RfQVJCX1BBUiAgMHgwMDQwMDAwMAotI2RlZmluZSBFMTAwMF9JQ1JfUEJfUEFSICAgICAgICAweDAwODAwMDAwIC8qIHBhY2tldCBidWZmZXIgcGFyaXR5IGVycm9yICovCi0vKiBxdWV1ZSAxIFJ4IGRlc2NyaXB0b3IgRklGTyBwYXJpdHkgZXJyb3IgKi8KLSNkZWZpbmUgRTEwMDBfSUNSX1JYRF9GSUZPX1BBUjEgMHgwMTAwMDAwMAotLyogcXVldWUgMSBUeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCi0jZGVmaW5lIEUxMDAwX0lDUl9UWERfRklGT19QQVIxIDB4MDIwMDAwMDAKLS8qIEZXIGNoYW5nZWQgdGhlIHN0YXR1cyBvZiBESVNTVyBiaXQgaW4gdGhlIEZXU00gKi8KLSNkZWZpbmUgRTEwMDBfSUNSX0RTVyAgICAgICAgICAgMHgwMDAwMDAyMAogLyogTEFOIGNvbm5lY3RlZCBkZXZpY2UgZ2VuZXJhdGVzIGFuIGludGVycnVwdCAqLwotI2RlZmluZSBFMTAwMF9JQ1JfUEhZSU5UICAgICAgICAweDAwMDAxMDAwCi0jZGVmaW5lIEUxMDAwX0lDUl9FUFJTVCAgICAgICAgIDB4MDAxMDAwMDAgLyogTUUgaGFuZHdhcmUgcmVzZXQgb2NjdXJzICovCisjZGVmaW5lIEUxMDAwX0lDUl9ET1VUU1lOQyAgICAgIDB4MTAwMDAwMDAgLyogTklDIERNQSBvdXQgb2Ygc3luYyAqLwogCiAvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgQ2F1c2UgUmVhZCAqLwogI2RlZmluZSBFMTAwMF9FSUNSX1JYX1FVRVVFMCAgICAweDAwMDAwMDAxIC8qIFJ4IFF1ZXVlIDAgSW50ZXJydXB0ICovCkBAIC00MjMsNyArMzQyLDYgQEAKICNkZWZpbmUgRTEwMDBfRUlDUl9UWF9RVUVVRTEgICAgMHgwMDAwMDIwMCAvKiBUeCBRdWV1ZSAxIEludGVycnVwdCAqLwogI2RlZmluZSBFMTAwMF9FSUNSX1RYX1FVRVVFMiAgICAweDAwMDAwNDAwIC8qIFR4IFF1ZXVlIDIgSW50ZXJydXB0ICovCiAjZGVmaW5lIEUxMDAwX0VJQ1JfVFhfUVVFVUUzICAgIDB4MDAwMDA4MDAgLyogVHggUXVldWUgMyBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgRTEwMDBfRUlDUl9UQ1BfVElNRVIgICAgMHg0MDAwMDAwMCAvKiBUQ1AgVGltZXIgKi8KICNkZWZpbmUgRTEwMDBfRUlDUl9PVEhFUiAgICAgICAgMHg4MDAwMDAwMCAvKiBJbnRlcnJ1cHQgQ2F1c2UgQWN0aXZlICovCiAvKiBUQ1AgVGltZXIgKi8KIApAQCAtNDQxLDE3ICszNTksMTkgQEAKICAgICBFMTAwMF9JTVNfVFhEVyAgIHwgICAgXAogICAgIEUxMDAwX0lNU19SWERNVDAgfCAgICBcCiAgICAgRTEwMDBfSU1TX1JYU0VRICB8ICAgIFwKLSAgICBFMTAwMF9JTVNfTFNDKQorICAgIEUxMDAwX0lNU19MU0MgICAgfCAgICBcCisgICAgRTEwMDBfSU1TX0RPVVRTWU5DKQogCiAvKiBJbnRlcnJ1cHQgTWFzayBTZXQgKi8KICNkZWZpbmUgRTEwMDBfSU1TX1RYRFcgICAgICBFMTAwMF9JQ1JfVFhEVyAgICAgIC8qIFRyYW5zbWl0IGRlc2Mgd3JpdHRlbiBiYWNrICovCiAjZGVmaW5lIEUxMDAwX0lNU19MU0MgICAgICAgRTEwMDBfSUNSX0xTQyAgICAgICAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX1ZNTUIgICAgICBFMTAwMF9JQ1JfVk1NQiAgICAgIC8qIE1haWwgYm94IGFjdGl2aXR5ICovCiAjZGVmaW5lIEUxMDAwX0lNU19SWFNFUSAgICAgRTEwMDBfSUNSX1JYU0VRICAgICAvKiByeCBzZXF1ZW5jZSBlcnJvciAqLwogI2RlZmluZSBFMTAwMF9JTVNfUlhETVQwICAgIEUxMDAwX0lDUl9SWERNVDAgICAgLyogcnggZGVzYyBtaW4uIHRocmVzaG9sZCAqLwogI2RlZmluZSBFMTAwMF9JTVNfUlhUMCAgICAgIEUxMDAwX0lDUl9SWFQwICAgICAgLyogcnggdGltZXIgaW50ciAqLworI2RlZmluZSBFMTAwMF9JTVNfRE9VVFNZTkMgIEUxMDAwX0lDUl9ET1VUU1lOQyAvKiBOSUMgRE1BIG91dCBvZiBzeW5jICovCiAKIC8qIEV4dGVuZGVkIEludGVycnVwdCBNYXNrIFNldCAqLwotI2RlZmluZSBFMTAwMF9FSU1TX1RDUF9USU1FUiAgICBFMTAwMF9FSUNSX1RDUF9USU1FUiAvKiBUQ1AgVGltZXIgKi8KICNkZWZpbmUgRTEwMDBfRUlNU19PVEhFUiAgICAgICAgRTEwMDBfRUlDUl9PVEhFUiAgIC8qIEludGVycnVwdCBDYXVzZSBBY3RpdmUgKi8KIAogLyogSW50ZXJydXB0IENhdXNlIFNldCAqLwpAQCAtNDgxLDYgKzQwMSwxMCBAQAogICogbWFuYWdlYWJpbGl0eSBlbmFibGVkLCBhbGxvd2luZyB1cyByb29tIGZvciAxNSBtdWx0aWNhc3QgYWRkcmVzc2VzLgogICovCiAjZGVmaW5lIEUxMDAwX1JBSF9BViAgMHg4MDAwMDAwMCAgICAgICAgLyogUmVjZWl2ZSBkZXNjcmlwdG9yIHZhbGlkICovCisjZGVmaW5lIEUxMDAwX1JBTF9NQUNfQUREUl9MRU4gNAorI2RlZmluZSBFMTAwMF9SQUhfTUFDX0FERFJfTEVOIDIKKyNkZWZpbmUgRTEwMDBfUkFIX1BPT0xfTUFTSyAweDAzRkMwMDAwCisjZGVmaW5lIEUxMDAwX1JBSF9QT09MXzEgMHgwMDA0MDAwMAogCiAvKiBFcnJvciBDb2RlcyAqLwogI2RlZmluZSBFMTAwMF9FUlJfTlZNICAgICAgMQpAQCAtNDkwLDEwICs0MTQsMTAgQEAKICNkZWZpbmUgRTEwMDBfRVJSX01BQ19JTklUIDUKICNkZWZpbmUgRTEwMDBfRVJSX1JFU0VUICAgOQogI2RlZmluZSBFMTAwMF9FUlJfTUFTVEVSX1JFUVVFU1RTX1BFTkRJTkcgMTAKLSNkZWZpbmUgRTEwMDBfRVJSX0hPU1RfSU5URVJGQUNFX0NPTU1BTkQgMTEKICNkZWZpbmUgRTEwMDBfQkxLX1BIWV9SRVNFVCAgIDEyCiAjZGVmaW5lIEUxMDAwX0VSUl9TV0ZXX1NZTkMgMTMKICNkZWZpbmUgRTEwMDBfTk9UX0lNUExFTUVOVEVEIDE0CisjZGVmaW5lIEUxMDAwX0VSUl9NQlggICAgICAxNQogCiAvKiBMb29wIGxpbWl0IG9uIGhvdyBsb25nIHdlIHdhaXQgZm9yIGF1dG8tbmVnb3RpYXRpb24gdG8gY29tcGxldGUgKi8KICNkZWZpbmUgQ09QUEVSX0xJTktfVVBfTElNSVQgICAgICAgICAgICAgIDEwCkBAIC01MTAsMzAgKzQzNCw5IEBACiAvKiBGbG93IENvbnRyb2wgKi8KICNkZWZpbmUgRTEwMDBfRkNSVExfWE9ORSAweDgwMDAwMDAwICAgICAvKiBFbmFibGUgWE9OIGZyYW1lIHRyYW5zbWlzc2lvbiAqLwogCi0vKiBUcmFuc21pdCBDb25maWd1cmF0aW9uIFdvcmQgKi8KLSNkZWZpbmUgRTEwMDBfVFhDV19BTkUgICAgICAgIDB4ODAwMDAwMDAgICAgICAgIC8qIEF1dG8tbmVnIGVuYWJsZSAqLwotCi0vKiBSZWNlaXZlIENvbmZpZ3VyYXRpb24gV29yZCAqLwotCi0vKiBQQ0kgRXhwcmVzcyBDb250cm9sICovCi0jZGVmaW5lIEUxMDAwX0dDUl9SWERfTk9fU05PT1AgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBFMTAwMF9HQ1JfUlhEU0NXX05PX1NOT09QICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgRTEwMDBfR0NSX1JYRFNDUl9OT19TTk9PUCAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEUxMDAwX0dDUl9UWERfTk9fU05PT1AgICAgICAgICAgMHgwMDAwMDAwOAotI2RlZmluZSBFMTAwMF9HQ1JfVFhEU0NXX05PX1NOT09QICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgRTEwMDBfR0NSX1RYRFNDUl9OT19TTk9PUCAgICAgICAweDAwMDAwMDIwCi0KLSNkZWZpbmUgUENJRV9OT19TTk9PUF9BTEwgKEUxMDAwX0dDUl9SWERfTk9fU05PT1AgICAgICAgICB8IFwKLQkJCSAgIEUxMDAwX0dDUl9SWERTQ1dfTk9fU05PT1AgICAgICB8IFwKLQkJCSAgIEUxMDAwX0dDUl9SWERTQ1JfTk9fU05PT1AgICAgICB8IFwKLQkJCSAgIEUxMDAwX0dDUl9UWERfTk9fU05PT1AgICAgICAgICB8IFwKLQkJCSAgIEUxMDAwX0dDUl9UWERTQ1dfTk9fU05PT1AgICAgICB8IFwKLQkJCSAgIEUxMDAwX0dDUl9UWERTQ1JfTk9fU05PT1ApCi0KIC8qIFBIWSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9DUl9GVUxMX0RVUExFWCAgICAgIDB4MDEwMCAgLyogRkRYID0xLCBoYWxmIGR1cGxleCA9MCAqLwogI2RlZmluZSBNSUlfQ1JfUkVTVEFSVF9BVVRPX05FRyAweDAyMDAgIC8qIFJlc3RhcnQgYXV0byBuZWdvdGlhdGlvbiAqLwotI2RlZmluZSBNSUlfQ1JfUE9XRVJfRE9XTiAgICAgICAweDA4MDAgIC8qIFBvd2VyIGRvd24gKi8KICNkZWZpbmUgTUlJX0NSX0FVVE9fTkVHX0VOICAgICAgMHgxMDAwICAvKiBBdXRvIE5lZyBFbmFibGUgKi8KICNkZWZpbmUgTUlJX0NSX0xPT1BCQUNLICAgICAgICAgMHg0MDAwICAvKiAwID0gbm9ybWFsLCAxID0gbG9vcGJhY2sgKi8KICNkZWZpbmUgTUlJX0NSX1JFU0VUICAgICAgICAgICAgMHg4MDAwICAvKiAwID0gbm9ybWFsLCAxID0gUEhZIHJlc2V0ICovCkBAIC02MDksNiArNTEyLDcgQEAKICNkZWZpbmUgTlZNX0lEX0xFRF9TRVRUSU5HUyAgICAgICAgMHgwMDA0CiAvKiBGb3IgU0VSREVTIG91dHB1dCBhbXBsaXR1ZGUgYWRqdXN0bWVudC4gKi8KICNkZWZpbmUgTlZNX0lOSVRfQ09OVFJPTDJfUkVHICAgICAgMHgwMDBGCisjZGVmaW5lIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQiAgIDB4MDAxNAogI2RlZmluZSBOVk1fSU5JVF9DT05UUk9MM19QT1JUX0EgICAweDAwMjQKICNkZWZpbmUgTlZNX0FMVF9NQUNfQUREUl9QVFIgICAgICAgMHgwMDM3CiAjZGVmaW5lIE5WTV9DSEVDS1NVTV9SRUcgICAgICAgICAgIDB4MDAzRgpAQCAtNjYzLDEwICs1NjcsOCBAQAogI2RlZmluZSBJR1BfTEVEM19NT0RFICAgICAgICAgICAweDA3MDAwMDAwCiAKIC8qIFBDSS9QQ0ktWC9QQ0ktRVggQ29uZmlnIHNwYWNlICovCi0jZGVmaW5lIFBDSV9IRUFERVJfVFlQRV9SRUdJU1RFUiAgICAgMHgwRQogI2RlZmluZSBQQ0lFX0xJTktfU1RBVFVTICAgICAgICAgICAgIDB4MTIKIAotI2RlZmluZSBQQ0lfSEVBREVSX1RZUEVfTVVMVElGVU5DICAgIDB4ODAKICNkZWZpbmUgUENJRV9MSU5LX1dJRFRIX01BU0sgICAgICAgICAweDNGMAogI2RlZmluZSBQQ0lFX0xJTktfV0lEVEhfU0hJRlQgICAgICAgIDQKIApAQCAtNzYzLDQgKzY2NSw4IEBACiAjZGVmaW5lIEUxMDAwX0dFTl9DVExfQUREUkVTU19TSElGVCAgICAgOAogI2RlZmluZSBFMTAwMF9HRU5fUE9MTF9USU1FT1VUICAgICAgICAgIDY0MAogCisjZGVmaW5lIEUxMDAwX1ZGVEFfRU5UUllfU0hJRlQgICAgICAgICAgICAgICA1CisjZGVmaW5lIEUxMDAwX1ZGVEFfRU5UUllfTUFTSyAgICAgICAgICAgICAgICAweDdGCisjZGVmaW5lIEUxMDAwX1ZGVEFfRU5UUllfQklUX1NISUZUX01BU0sgICAgICAweDFGCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaAppbmRleCA5OTUwNGE2Li42OGFhYzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlICJlMTAwMF9tYWMuaCIKICNpbmNsdWRlICJlMTAwMF9yZWdzLmgiCiAjaW5jbHVkZSAiZTEwMDBfZGVmaW5lcy5oIgogCkBAIC00MSw2ICs0MCw4IEBACiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NiAgICAgICAgICAgICAgICAgICAgMHgxMEM5CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUiAgICAgICAgICAgICAgMHgxMEU2CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVMgICAgICAgICAgICAgMHgxMEU3CisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9RVUFEX0NPUFBFUiAgICAgICAgMHgxMEU4CisjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3Nl9OUyAgICAgICAgICAgICAgICAgMHgxNTBBCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUiAgICAgICAgICAgMHgxMEE3CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUyAgICAgMHgxMEE5CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3NUdCX1FVQURfQ09QUEVSICAgICAgMHgxMEQ2CkBAIC0xNDQsMTQ0ICsxNDUsNiBAQAogCWUxMDAwX2ZjX2RlZmF1bHQgPSAweEZGCiB9OwogCi0KLS8qIFJlY2VpdmUgRGVzY3JpcHRvciAqLwotc3RydWN0IGUxMDAwX3J4X2Rlc2MgewotCV9fbGU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovCi0JX19sZTE2IGxlbmd0aDsgICAgICAvKiBMZW5ndGggb2YgZGF0YSBETUFlZCBpbnRvIGRhdGEgYnVmZmVyICovCi0JX19sZTE2IGNzdW07ICAgICAgICAvKiBQYWNrZXQgY2hlY2tzdW0gKi8KLQl1OCAgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCi0JdTggIGVycm9yczsgICAgICAvKiBEZXNjcmlwdG9yIEVycm9ycyAqLwotCV9fbGUxNiBzcGVjaWFsOwotfTsKLQotLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gRXh0ZW5kZWQgKi8KLXVuaW9uIGUxMDAwX3J4X2Rlc2NfZXh0ZW5kZWQgewotCXN0cnVjdCB7Ci0JCV9fbGU2NCBidWZmZXJfYWRkcjsKLQkJX19sZTY0IHJlc2VydmVkOwotCX0gcmVhZDsKLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgewotCQkJX19sZTMyIG1ycTsgICAgICAgICAgICAgIC8qIE11bHRpcGxlIFJ4IFF1ZXVlcyAqLwotCQkJdW5pb24gewotCQkJCV9fbGUzMiByc3M7ICAgICAgICAgICAgLyogUlNTIEhhc2ggKi8KLQkJCQlzdHJ1Y3QgewotCQkJCQlfX2xlMTYgaXBfaWQ7ICAvKiBJUCBpZCAqLwotCQkJCQlfX2xlMTYgY3N1bTsgICAvKiBQYWNrZXQgQ2hlY2tzdW0gKi8KLQkJCQl9IGNzdW1faXA7Ci0JCQl9IGhpX2R3b3JkOwotCQl9IGxvd2VyOwotCQlzdHJ1Y3QgewotCQkJX19sZTMyIHN0YXR1c19lcnJvcjsgICAgIC8qIGV4dCBzdGF0dXMvZXJyb3IgKi8KLQkJCV9fbGUxNiBsZW5ndGg7Ci0JCQlfX2xlMTYgdmxhbjsgICAgICAgICAgICAgLyogVkxBTiB0YWcgKi8KLQkJfSB1cHBlcjsKLQl9IHdiOyAgLyogd3JpdGViYWNrICovCi19OwotCi0jZGVmaW5lIE1BWF9QU19CVUZGRVJTIDQKLS8qIFJlY2VpdmUgRGVzY3JpcHRvciAtIFBhY2tldCBTcGxpdCAqLwotdW5pb24gZTEwMDBfcnhfZGVzY19wYWNrZXRfc3BsaXQgewotCXN0cnVjdCB7Ci0JCS8qIG9uZSBidWZmZXIgZm9yIHByb3RvY29sIGhlYWRlcihzKSwgdGhyZWUgZGF0YSBidWZmZXJzICovCi0JCV9fbGU2NCBidWZmZXJfYWRkcltNQVhfUFNfQlVGRkVSU107Ci0JfSByZWFkOwotCXN0cnVjdCB7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgbXJxOyAgICAgICAgICAgICAgLyogTXVsdGlwbGUgUnggUXVldWVzICovCi0JCQl1bmlvbiB7Ci0JCQkJX19sZTMyIHJzczsgICAgICAgICAgICAgIC8qIFJTUyBIYXNoICovCi0JCQkJc3RydWN0IHsKLQkJCQkJX19sZTE2IGlwX2lkOyAgICAvKiBJUCBpZCAqLwotCQkJCQlfX2xlMTYgY3N1bTsgICAgIC8qIFBhY2tldCBDaGVja3N1bSAqLwotCQkJCX0gY3N1bV9pcDsKLQkJCX0gaGlfZHdvcmQ7Ci0JCX0gbG93ZXI7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMzIgc3RhdHVzX2Vycm9yOyAgICAgLyogZXh0IHN0YXR1cy9lcnJvciAqLwotCQkJX19sZTE2IGxlbmd0aDA7ICAgICAgICAgIC8qIGxlbmd0aCBvZiBidWZmZXIgMCAqLwotCQkJX19sZTE2IHZsYW47ICAgICAgICAgICAgIC8qIFZMQU4gdGFnICovCi0JCX0gbWlkZGxlOwotCQlzdHJ1Y3QgewotCQkJX19sZTE2IGhlYWRlcl9zdGF0dXM7Ci0JCQlfX2xlMTYgbGVuZ3RoWzNdOyAgICAgICAgLyogbGVuZ3RoIG9mIGJ1ZmZlcnMgMS0zICovCi0JCX0gdXBwZXI7Ci0JCV9fbGU2NCByZXNlcnZlZDsKLQl9IHdiOyAvKiB3cml0ZWJhY2sgKi8KLX07Ci0KLS8qIFRyYW5zbWl0IERlc2NyaXB0b3IgKi8KLXN0cnVjdCBlMTAwMF90eF9kZXNjIHsKLQlfX2xlNjQgYnVmZmVyX2FkZHI7ICAgICAgLyogQWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovCi0JdW5pb24gewotCQlfX2xlMzIgZGF0YTsKLQkJc3RydWN0IHsKLQkJCV9fbGUxNiBsZW5ndGg7ICAgIC8qIERhdGEgYnVmZmVyIGxlbmd0aCAqLwotCQkJdTggY3NvOyAgICAgICAgLyogQ2hlY2tzdW0gb2Zmc2V0ICovCi0JCQl1OCBjbWQ7ICAgICAgICAvKiBEZXNjcmlwdG9yIGNvbnRyb2wgKi8KLQkJfSBmbGFnczsKLQl9IGxvd2VyOwotCXVuaW9uIHsKLQkJX19sZTMyIGRhdGE7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBzdGF0dXM7ICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwotCQkJdTggY3NzOyAgICAgICAgLyogQ2hlY2tzdW0gc3RhcnQgKi8KLQkJCV9fbGUxNiBzcGVjaWFsOwotCQl9IGZpZWxkczsKLQl9IHVwcGVyOwotfTsKLQotLyogT2ZmbG9hZCBDb250ZXh0IERlc2NyaXB0b3IgKi8KLXN0cnVjdCBlMTAwMF9jb250ZXh0X2Rlc2MgewotCXVuaW9uIHsKLQkJX19sZTMyIGlwX2NvbmZpZzsKLQkJc3RydWN0IHsKLQkJCXU4IGlwY3NzOyAgICAgIC8qIElQIGNoZWNrc3VtIHN0YXJ0ICovCi0JCQl1OCBpcGNzbzsgICAgICAvKiBJUCBjaGVja3N1bSBvZmZzZXQgKi8KLQkJCV9fbGUxNiBpcGNzZTsgICAgIC8qIElQIGNoZWNrc3VtIGVuZCAqLwotCQl9IGlwX2ZpZWxkczsKLQl9IGxvd2VyX3NldHVwOwotCXVuaW9uIHsKLQkJX19sZTMyIHRjcF9jb25maWc7Ci0JCXN0cnVjdCB7Ci0JCQl1OCB0dWNzczsgICAgICAvKiBUQ1AgY2hlY2tzdW0gc3RhcnQgKi8KLQkJCXU4IHR1Y3NvOyAgICAgIC8qIFRDUCBjaGVja3N1bSBvZmZzZXQgKi8KLQkJCV9fbGUxNiB0dWNzZTsgICAgIC8qIFRDUCBjaGVja3N1bSBlbmQgKi8KLQkJfSB0Y3BfZmllbGRzOwotCX0gdXBwZXJfc2V0dXA7Ci0JX19sZTMyIGNtZF9hbmRfbGVuZ3RoOwotCXVuaW9uIHsKLQkJX19sZTMyIGRhdGE7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBzdGF0dXM7ICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwotCQkJdTggaGRyX2xlbjsgICAgLyogSGVhZGVyIGxlbmd0aCAqLwotCQkJX19sZTE2IG1zczsgICAgICAgLyogTWF4aW11bSBzZWdtZW50IHNpemUgKi8KLQkJfSBmaWVsZHM7Ci0JfSB0Y3Bfc2VnX3NldHVwOwotfTsKLQotLyogT2ZmbG9hZCBkYXRhIGRlc2NyaXB0b3IgKi8KLXN0cnVjdCBlMTAwMF9kYXRhX2Rlc2MgewotCV9fbGU2NCBidWZmZXJfYWRkcjsgICAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgYnVmZmVyIGFkZHJlc3MgKi8KLQl1bmlvbiB7Ci0JCV9fbGUzMiBkYXRhOwotCQlzdHJ1Y3QgewotCQkJX19sZTE2IGxlbmd0aDsgICAgLyogRGF0YSBidWZmZXIgbGVuZ3RoICovCi0JCQl1OCB0eXBfbGVuX2V4dDsKLQkJCXU4IGNtZDsKLQkJfSBmbGFnczsKLQl9IGxvd2VyOwotCXVuaW9uIHsKLQkJX19sZTMyIGRhdGE7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBzdGF0dXM7ICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqLwotCQkJdTggcG9wdHM7ICAgICAgLyogUGFja2V0IE9wdGlvbnMgKi8KLQkJCV9fbGUxNiBzcGVjaWFsOwotCQl9IGZpZWxkczsKLQl9IHVwcGVyOwotfTsKLQogLyogU3RhdGlzdGljcyBjb3VudGVycyBjb2xsZWN0ZWQgYnkgdGhlIE1BQyAqLwogc3RydWN0IGUxMDAwX2h3X3N0YXRzIHsKIAl1NjQgY3JjZXJyczsKQEAgLTM1OSw2ICsyMjIsNyBAQAogCXU2NCBsZW5lcnJzOwogCXU2NCBzY3ZwYzsKIAl1NjQgaHJtcGM7CisJdTY0IGRvb3N5bmM7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfcGh5X3N0YXRzIHsKQEAgLTQwOSw2ICsyNzMsNyBAQAogI2luY2x1ZGUgImUxMDAwX21hYy5oIgogI2luY2x1ZGUgImUxMDAwX3BoeS5oIgogI2luY2x1ZGUgImUxMDAwX252bS5oIgorI2luY2x1ZGUgImUxMDAwX21ieC5oIgogCiBzdHJ1Y3QgZTEwMDBfbWFjX29wZXJhdGlvbnMgewogCXMzMiAgKCpjaGVja19mb3JfbGluaykoc3RydWN0IGUxMDAwX2h3ICopOwpAQCAtNDIyLDI1ICsyODcsMjUgQEAKIH07CiAKIHN0cnVjdCBlMTAwMF9waHlfb3BlcmF0aW9ucyB7Ci0JczMyICAoKmFjcXVpcmVfcGh5KShzdHJ1Y3QgZTEwMDBfaHcgKik7CisJczMyICAoKmFjcXVpcmUpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqY2hlY2tfcmVzZXRfYmxvY2spKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqZm9yY2Vfc3BlZWRfZHVwbGV4KShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKmdldF9jZmdfZG9uZSkoc3RydWN0IGUxMDAwX2h3ICpodyk7CiAJczMyICAoKmdldF9jYWJsZV9sZW5ndGgpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqZ2V0X3BoeV9pbmZvKShzdHJ1Y3QgZTEwMDBfaHcgKik7Ci0JczMyICAoKnJlYWRfcGh5X3JlZykoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2ICopOwotCXZvaWQgKCpyZWxlYXNlX3BoeSkoc3RydWN0IGUxMDAwX2h3ICopOwotCXMzMiAgKCpyZXNldF9waHkpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqcmVhZF9yZWcpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIsIHUxNiAqKTsKKwl2b2lkICgqcmVsZWFzZSkoc3RydWN0IGUxMDAwX2h3ICopOworCXMzMiAgKCpyZXNldCkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpzZXRfZDBfbHBsdV9zdGF0ZSkoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOwogCXMzMiAgKCpzZXRfZDNfbHBsdV9zdGF0ZSkoc3RydWN0IGUxMDAwX2h3ICosIGJvb2wpOwotCXMzMiAgKCp3cml0ZV9waHlfcmVnKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYpOworCXMzMiAgKCp3cml0ZV9yZWcpKHN0cnVjdCBlMTAwMF9odyAqLCB1MzIsIHUxNik7CiB9OwogCiBzdHJ1Y3QgZTEwMDBfbnZtX29wZXJhdGlvbnMgewotCXMzMiAgKCphY3F1aXJlX252bSkoc3RydWN0IGUxMDAwX2h3ICopOwotCXMzMiAgKCpyZWFkX252bSkoc3RydWN0IGUxMDAwX2h3ICosIHUxNiwgdTE2LCB1MTYgKik7Ci0Jdm9pZCAoKnJlbGVhc2VfbnZtKShzdHJ1Y3QgZTEwMDBfaHcgKik7Ci0JczMyICAoKndyaXRlX252bSkoc3RydWN0IGUxMDAwX2h3ICosIHUxNiwgdTE2LCB1MTYgKik7CisJczMyICAoKmFjcXVpcmUpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqcmVhZCkoc3RydWN0IGUxMDAwX2h3ICosIHUxNiwgdTE2LCB1MTYgKik7CisJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqd3JpdGUpKHN0cnVjdCBlMTAwMF9odyAqLCB1MTYsIHUxNiwgdTE2ICopOwogfTsKIAogc3RydWN0IGUxMDAwX2luZm8gewpAQCAtNDgzLDcgKzM0OCw2IEBACiAJYm9vbCBhc2ZfZmlybXdhcmVfcHJlc2VudDsKIAlib29sIGF1dG9uZWc7CiAJYm9vbCBhdXRvbmVnX2ZhaWxlZDsKLQlib29sIGRpc2FibGVfYXY7CiAJYm9vbCBkaXNhYmxlX2h3X2luaXRfYml0czsKIAlib29sIGdldF9saW5rX3N0YXR1czsKIAlib29sIGlmc19wYXJhbXNfZm9yY2VkOwpAQCAtNTY1LDkgKzQyOSw0MCBAQAogCWVudW0gZTEwMDBfZmNfdHlwZSBvcmlnaW5hbF90eXBlOwogfTsKIAorc3RydWN0IGUxMDAwX21ieF9vcGVyYXRpb25zIHsKKwlzMzIgKCppbml0X3BhcmFtcykoc3RydWN0IGUxMDAwX2h3ICpodyk7CisJczMyICgqcmVhZCkoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsICB1MTYpOworCXMzMiAoKndyaXRlKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKKwlzMzIgKCpyZWFkX3Bvc3RlZCkoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsICB1MTYpOworCXMzMiAoKndyaXRlX3Bvc3RlZCkoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CisJczMyICgqY2hlY2tfZm9yX21zZykoc3RydWN0IGUxMDAwX2h3ICosIHUxNik7CisJczMyICgqY2hlY2tfZm9yX2Fjaykoc3RydWN0IGUxMDAwX2h3ICosIHUxNik7CisJczMyICgqY2hlY2tfZm9yX3JzdCkoc3RydWN0IGUxMDAwX2h3ICosIHUxNik7Cit9OworCitzdHJ1Y3QgZTEwMDBfbWJ4X3N0YXRzIHsKKwl1MzIgbXNnc190eDsKKwl1MzIgbXNnc19yeDsKKworCXUzMiBhY2tzOworCXUzMiByZXFzOworCXUzMiByc3RzOworfTsKKworc3RydWN0IGUxMDAwX21ieF9pbmZvIHsKKwlzdHJ1Y3QgZTEwMDBfbWJ4X29wZXJhdGlvbnMgb3BzOworCXN0cnVjdCBlMTAwMF9tYnhfc3RhdHMgc3RhdHM7CisJdTMyIHRpbWVvdXQ7CisJdTMyIHVzZWNfZGVsYXk7CisJdTE2IHNpemU7Cit9OworCitzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgeworCWJvb2wgc2dtaWlfYWN0aXZlOworfTsKKwogc3RydWN0IGUxMDAwX2h3IHsKIAl2b2lkICpiYWNrOwotCXZvaWQgKmRldl9zcGVjOwogCiAJdTggX19pb21lbSAqaHdfYWRkcjsKIAl1OCBfX2lvbWVtICpmbGFzaF9hZGRyZXNzOwpAQCAtNTc4LDkgKzQ3MywxMiBAQAogCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAgcGh5OwogCXN0cnVjdCBlMTAwMF9udm1faW5mbyAgbnZtOwogCXN0cnVjdCBlMTAwMF9idXNfaW5mbyAgYnVzOworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyBtYng7CiAJc3RydWN0IGUxMDAwX2hvc3RfbW5nX2RoY3BfY29va2llIG1uZ19jb29raWU7CiAKLQl1MzIgZGV2X3NwZWNfc2l6ZTsKKwl1bmlvbiB7CisJCXN0cnVjdCBlMTAwMF9kZXZfc3BlY184MjU3NQlfODI1NzU7CisJfSBkZXZfc3BlYzsKIAogCXUxNiBkZXZpY2VfaWQ7CiAJdTE2IHN1YnN5c3RlbV92ZW5kb3JfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKaW5kZXggOTdmMDA0OS4uZjRjMzE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTM3LDE5ICszNyw2IEBACiBzdGF0aWMgczMyIGlnYl9zZXRfZGVmYXVsdF9mYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgaWdiX3NldF9mY193YXRlcm1hcmtzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCi0vKioKLSAqICBpZ2JfcmVtb3ZlX2RldmljZSAtIEZyZWUgZGV2aWNlIHNwZWNpZmljIHN0cnVjdHVyZQotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIElmIGEgZGV2aWNlIHNwZWNpZmljIHN0cnVjdHVyZSB3YXMgYWxsb2NhdGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwKLSAqICBmcmVlIGl0LgotICoqLwotdm9pZCBpZ2JfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCS8qIEZyZWVpbmcgdGhlIGRldl9zcGVjIG1lbWJlciBvZiBlMTAwMF9odyBzdHJ1Y3R1cmUgKi8KLQlrZnJlZShody0+ZGV2X3NwZWMpOwotfQotCiBzdGF0aWMgczMyIGlnYl9yZWFkX3BjaWVfY2FwX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnLCB1MTYgKnZhbHVlKQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOwpAQCAtMTMxLDYgKzExOCwzNyBAQAogfQogCiAvKioKKyAqICBpZ2JfdmZ0YV9zZXQgLSBlbmFibGUgb3IgZGlzYWJsZSB2bGFuIGluIFZMQU4gZmlsdGVyIHRhYmxlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmlkOiBWTEFOIGlkIHRvIGFkZCBvciByZW1vdmUKKyAqICBAYWRkOiBpZiB0cnVlIGFkZCBmaWx0ZXIsIGlmIGZhbHNlIHJlbW92ZQorICoKKyAqICBTZXRzIG9yIGNsZWFycyBhIGJpdCBpbiB0aGUgVkxBTiBmaWx0ZXIgdGFibGUgYXJyYXkgYmFzZWQgb24gVkxBTiBpZAorICogIGFuZCBpZiB3ZSBhcmUgYWRkaW5nIG9yIHJlbW92aW5nIHRoZSBmaWx0ZXIKKyAqKi8KK3MzMiBpZ2JfdmZ0YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHZpZCwgYm9vbCBhZGQpCit7CisJdTMyIGluZGV4ID0gKHZpZCA+PiBFMTAwMF9WRlRBX0VOVFJZX1NISUZUKSAmIEUxMDAwX1ZGVEFfRU5UUllfTUFTSzsKKwl1MzIgbWFzayA9IDEgPDwgKHZpZCAmIEUxMDAwX1ZGVEFfRU5UUllfQklUX1NISUZUX01BU0spOworCXUzMiB2ZnRhID0gYXJyYXlfcmQzMihFMTAwMF9WRlRBLCBpbmRleCk7CisJczMyIHJldF92YWwgPSAwOworCisJLyogYml0IHdhcyBzZXQvY2xlYXJlZCBiZWZvcmUgd2Ugc3RhcnRlZCAqLworCWlmICgoISEodmZ0YSAmIG1hc2spKSA9PSBhZGQpIHsKKwkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfQ09ORklHOworCX0gZWxzZSB7CisJCWlmIChhZGQpCisJCQl2ZnRhIHw9IG1hc2s7CisJCWVsc2UKKwkJCXZmdGEgJj0gfm1hc2s7CisJfQorCisJaWdiX3dyaXRlX3ZmdGEoaHcsIGluZGV4LCB2ZnRhKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqICBpZ2JfY2hlY2tfYWx0X21hY19hZGRyIC0gQ2hlY2sgZm9yIGFsdGVybmF0ZSBNQUMgYWRkcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgpAQCAtMTQ4LDcgKzE2Niw3IEBACiAJdTE2IG9mZnNldCwgbnZtX2FsdF9tYWNfYWRkcl9vZmZzZXQsIG52bV9kYXRhOwogCXU4IGFsdF9tYWNfYWRkcltFVEhfQUxFTl07CiAKLQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIE5WTV9BTFRfTUFDX0FERFJfUFRSLCAxLAorCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBOVk1fQUxUX01BQ19BRERSX1BUUiwgMSwKIAkJCQkgJm52bV9hbHRfbWFjX2FkZHJfb2Zmc2V0KTsKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKQEAgLTE2NSw3ICsxODMsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpICs9IDIpIHsKIAkJb2Zmc2V0ID0gbnZtX2FsdF9tYWNfYWRkcl9vZmZzZXQgKyAoaSA+PiAxKTsKLQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBvZmZzZXQsIDEsICZudm1fZGF0YSk7CisJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBvZmZzZXQsIDEsICZudm1fZGF0YSk7CiAJCWlmIChyZXRfdmFsKSB7CiAJCQlod19kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKIAkJCWdvdG8gb3V0OwpAQCAtMjEzLDcgKzIzMSw4IEBACiAKIAlyYXJfaGlnaCA9ICgodTMyKSBhZGRyWzRdIHwgKCh1MzIpIGFkZHJbNV0gPDwgOCkpOwogCi0JaWYgKCFody0+bWFjLmRpc2FibGVfYXYpCisJLyogSWYgTUFDIGFkZHJlc3MgemVybywgbm8gbmVlZCB0byBzZXQgdGhlIEFWIGJpdCAqLworCWlmIChyYXJfbG93IHx8IHJhcl9oaWdoKQogCQlyYXJfaGlnaCB8PSBFMTAwMF9SQUhfQVY7CiAKIAl3cjMyKEUxMDAwX1JBTChpbmRleCksIHJhcl9sb3cpOwpAQCAtNTg4LDggKzYwNyw3IEBACiAJICogY29udHJvbCBzZXR0aW5nLCB0aGVuIHRoZSB2YXJpYWJsZSBody0+ZmMgd2lsbAogCSAqIGJlIGluaXRpYWxpemVkIGJhc2VkIG9uIGEgdmFsdWUgaW4gdGhlIEVFUFJPTS4KIAkgKi8KLQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIE5WTV9JTklUX0NPTlRST0wyX1JFRywgMSwKLQkJCQkgICAgICAgJm52bV9kYXRhKTsKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgTlZNX0lOSVRfQ09OVFJPTDJfUkVHLCAxLCAmbnZtX2RhdGEpOwogCiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CkBAIC03MjAsMTEgKzczOCwxMSBAQAogCQkgKiBoYXMgY29tcGxldGVkLiAgV2UgcmVhZCB0aGlzIHR3aWNlIGJlY2F1c2UgdGhpcyByZWcgaGFzCiAJCSAqIHNvbWUgInN0aWNreSIgKGxhdGNoZWQpIGJpdHMuCiAJCSAqLwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLAorCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9TVEFUVVMsCiAJCQkJCQkgICAmbWlpX3N0YXR1c19yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLAorCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9TVEFUVVMsCiAJCQkJCQkgICAmbWlpX3N0YXR1c19yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtNzQyLDExICs3NjAsMTEgQEAKIAkJICogUGFnZSBBYmlsaXR5IFJlZ2lzdGVyIChBZGRyZXNzIDUpIHRvIGRldGVybWluZSBob3cKIAkJICogZmxvdyBjb250cm9sIHdhcyBuZWdvdGlhdGVkLgogCQkgKi8KLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0FVVE9ORUdfQURWLAorCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9BVVRPTkVHX0FEViwKIAkJCQkJICAgICZtaWlfbndheV9hZHZfcmVnKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0xQX0FCSUxJVFksCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX0xQX0FCSUxJVFksCiAJCQkJCSAgICAmbWlpX253YXlfbHBfYWJpbGl0eV9yZWcpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtMTA0MSw3ICsxMDU5LDcgQEAKIHsKIAlzMzIgcmV0X3ZhbDsKIAotCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgTlZNX0lEX0xFRF9TRVRUSU5HUywgMSwgZGF0YSk7CisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9JRF9MRURfU0VUVElOR1MsIDEsIGRhdGEpOwogCWlmIChyZXRfdmFsKSB7CiAJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaAppbmRleCBjYmVlNmFmLi5hMzRkZTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNTgsMTIgKzU4LDEyIEBACiAKIHZvaWQgaWdiX2NsZWFyX2h3X2NudHJzX2Jhc2Uoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGlnYl9jbGVhcl92ZnRhKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyICBpZ2JfdmZ0YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIHZpZCwgYm9vbCBhZGQpOwogdm9pZCBpZ2JfY29uZmlnX2NvbGxpc2lvbl9kaXN0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogdm9pZCBpZ2JfbXRhX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaGFzaF92YWx1ZSk7CiB2b2lkIGlnYl9wdXRfaHdfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogdm9pZCBpZ2JfcmFyX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqYWRkciwgdTMyIGluZGV4KTsKIHMzMiAgaWdiX2NoZWNrX2FsdF9tYWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXZvaWQgaWdiX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGlnYl9yZXNldF9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHZvaWQgaWdiX3VwZGF0ZV9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHZvaWQgaWdiX3dyaXRlX3ZmdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTMyIHZhbHVlKTsKQEAgLTgzLDEzICs4Myw4IEBACiAjZGVmaW5lIEUxMDAwX0ZXU01fTU9ERV9NQVNLICAweEUKICNkZWZpbmUgRTEwMDBfRldTTV9NT0RFX1NISUZUIDEKIAotI2RlZmluZSBFMTAwMF9NTkdfREhDUF9DT01NQU5EX1RJTUVPVVQgICAgICAgMTAKICNkZWZpbmUgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX1NUQVRVU19WTEFOICAgIDB4MgogCi0jZGVmaW5lIEUxMDAwX0hJQ1JfRU4gICAgICAgICAgICAgIDB4MDEgIC8qIEVuYWJsZSBiaXQgLSBSTyAqLwotLyogRHJpdmVyIHNldHMgdGhpcyBiaXQgd2hlbiBkb25lIHRvIHB1dCBjb21tYW5kIGluIFJBTSAqLwotI2RlZmluZSBFMTAwMF9ISUNSX0MgICAgICAgICAgICAgICAweDAyCi0KIGV4dGVybiB2b2lkIGUxMDAwX2luaXRfZnVuY3Rpb25fcG9pbnRlcnNfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdTMyIGlnYl9oYXNoX21jX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodywgdTggKm1jX2FkZHIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWJ4LmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWJ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU3MWM3ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYnguYwpAQCAtMCwwICsxLDQ0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJlMTAwMF9tYnguaCIKKworLyoqCisgKiAgaWdiX3JlYWRfbWJ4IC0gUmVhZHMgYSBtZXNzYWdlIGZyb20gdGhlIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byByZWFkCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVseSByZWFkIG1lc3NhZ2UgZnJvbSBidWZmZXIKKyAqKi8KK3MzMiBpZ2JfcmVhZF9tYngoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCS8qIGxpbWl0IHJlYWQgdG8gc2l6ZSBvZiBtYWlsYm94ICovCisJaWYgKHNpemUgPiBtYngtPnNpemUpCisJCXNpemUgPSBtYngtPnNpemU7CisKKwlpZiAobWJ4LT5vcHMucmVhZCkKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLnJlYWQoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2Jfd3JpdGVfbWJ4IC0gV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIKKyAqKi8KK3MzMiBpZ2Jfd3JpdGVfbWJ4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gMDsKKworCWlmIChzaXplID4gbWJ4LT5zaXplKQorCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwllbHNlIGlmIChtYngtPm9wcy53cml0ZSkKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLndyaXRlKGh3LCBtc2csIHNpemUsIG1ieF9pZCk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2NoZWNrX2Zvcl9tc2cgLSBjaGVja3MgdG8gc2VlIGlmIHNvbWVvbmUgc2VudCB1cyBtYWlsCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIGNoZWNrCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgU3RhdHVzIGJpdCB3YXMgZm91bmQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzMzIgaWdiX2NoZWNrX2Zvcl9tc2coc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAobWJ4LT5vcHMuY2hlY2tfZm9yX21zZykKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLmNoZWNrX2Zvcl9tc2coaHcsIG1ieF9pZCk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2NoZWNrX2Zvcl9hY2sgLSBjaGVja3MgdG8gc2VlIGlmIHNvbWVvbmUgc2VudCB1cyBBQ0sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gY2hlY2sKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBTdGF0dXMgYml0IHdhcyBmb3VuZCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3MzMiBpZ2JfY2hlY2tfZm9yX2FjayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmIChtYngtPm9wcy5jaGVja19mb3JfYWNrKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMuY2hlY2tfZm9yX2FjayhodywgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9yX3JzdCAtIGNoZWNrcyB0byBzZWUgaWYgb3RoZXIgc2lkZSBoYXMgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gY2hlY2sKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBTdGF0dXMgYml0IHdhcyBmb3VuZCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3MzMiBpZ2JfY2hlY2tfZm9yX3JzdChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmIChtYngtPm9wcy5jaGVja19mb3JfcnN0KQorCQlyZXRfdmFsID0gbWJ4LT5vcHMuY2hlY2tfZm9yX3JzdChodywgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfcG9sbF9mb3JfbXNnIC0gV2FpdCBmb3IgbWVzc2FnZSBub3RpZmljYXRpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2Ugbm90aWZpY2F0aW9uCisgKiovCitzdGF0aWMgczMyIGlnYl9wb2xsX2Zvcl9tc2coc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCWludCBjb3VudGRvd24gPSBtYngtPnRpbWVvdXQ7CisKKwlpZiAoIW1ieC0+b3BzLmNoZWNrX2Zvcl9tc2cpCisJCWdvdG8gb3V0OworCisJd2hpbGUgKG1ieC0+b3BzLmNoZWNrX2Zvcl9tc2coaHcsIG1ieF9pZCkpIHsKKwkJaWYgKCFjb3VudGRvd24pCisJCQlicmVhazsKKwkJY291bnRkb3duLS07CisJCXVkZWxheShtYngtPnVzZWNfZGVsYXkpOworCX0KK291dDoKKwlyZXR1cm4gY291bnRkb3duID8gMCA6IC1FMTAwMF9FUlJfTUJYOworfQorCisvKioKKyAqICBpZ2JfcG9sbF9mb3JfYWNrIC0gV2FpdCBmb3IgbWVzc2FnZSBhY2tub3dsZWRnZW1lbnQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisgKiovCitzdGF0aWMgczMyIGlnYl9wb2xsX2Zvcl9hY2soc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCWludCBjb3VudGRvd24gPSBtYngtPnRpbWVvdXQ7CisKKwlpZiAoIW1ieC0+b3BzLmNoZWNrX2Zvcl9hY2spCisJCWdvdG8gb3V0OworCisJd2hpbGUgKG1ieC0+b3BzLmNoZWNrX2Zvcl9hY2soaHcsIG1ieF9pZCkpIHsKKwkJaWYgKCFjb3VudGRvd24pCisJCQlicmVhazsKKwkJY291bnRkb3duLS07CisJCXVkZWxheShtYngtPnVzZWNfZGVsYXkpOworCX0KK291dDoKKwlyZXR1cm4gY291bnRkb3duID8gMCA6IC1FMTAwMF9FUlJfTUJYOworfQorCisvKioKKyAqICBpZ2JfcmVhZF9wb3N0ZWRfbWJ4IC0gV2FpdCBmb3IgbWVzc2FnZSBub3RpZmljYXRpb24gYW5kIHJlY2VpdmUgbWVzc2FnZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQKKyAqICBjb3BpZWQgaXQgaW50byB0aGUgcmVjZWl2ZSBidWZmZXIuCisgKiovCitzMzIgaWdiX3JlYWRfcG9zdGVkX21ieChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsIHUxNiBtYnhfaWQpCit7CisJc3RydWN0IGUxMDAwX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKCFtYngtPm9wcy5yZWFkKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpZ2JfcG9sbF9mb3JfbXNnKGh3LCBtYnhfaWQpOworCisJaWYgKCFyZXRfdmFsKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZChodywgbXNnLCBzaXplLCBtYnhfaWQpOworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2Jfd3JpdGVfcG9zdGVkX21ieCAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveCwgd2FpdCBmb3IgYWNrCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIgYW5kCisgKiAgcmVjZWl2ZWQgYW4gYWNrIHRvIHRoYXQgbWVzc2FnZSB3aXRoaW4gZGVsYXkgKiB0aW1lb3V0IHBlcmlvZAorICoqLworczMyIGlnYl93cml0ZV9wb3N0ZWRfbWJ4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgZTEwMDBfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gMDsKKworCWlmICghbWJ4LT5vcHMud3JpdGUpCisJCWdvdG8gb3V0OworCisJLyogc2VuZCBtc2cqLworCXJldF92YWwgPSBtYngtPm9wcy53cml0ZShodywgbXNnLCBzaXplLCBtYnhfaWQpOworCisJLyogaWYgbXNnIHNlbnQgd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGFuIGFjayAqLworCWlmICghcmV0X3ZhbCkKKwkJcmV0X3ZhbCA9IGlnYl9wb2xsX2Zvcl9hY2soaHcsIG1ieF9pZCk7CitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGUxMDAwX2luaXRfbWJ4X29wc19nZW5lcmljIC0gSW5pdGlhbGl6ZSBOVk0gZnVuY3Rpb24gcG9pbnRlcnMKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBTZXR1cHMgdXAgdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIG5vLW9wIGZ1bmN0aW9ucworICoqLwordm9pZCBlMTAwMF9pbml0X21ieF9vcHNfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJbWJ4LT5vcHMucmVhZF9wb3N0ZWQgPSBpZ2JfcmVhZF9wb3N0ZWRfbWJ4OworCW1ieC0+b3BzLndyaXRlX3Bvc3RlZCA9IGlnYl93cml0ZV9wb3N0ZWRfbWJ4OworfQorCitzdGF0aWMgczMyIGlnYl9jaGVja19mb3JfYml0X3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBtYXNrKQoreworCXUzMiBtYnZmaWNyID0gcmQzMihFMTAwMF9NQlZGSUNSKTsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKG1idmZpY3IgJiBtYXNrKSB7CisJCXJldF92YWwgPSAwOworCQl3cjMyKEUxMDAwX01CVkZJQ1IsIG1hc2spOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9yX21zZ19wZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFZGIGhhcyBzZW50IG1haWwKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFZGIGhhcyBzZXQgdGhlIFN0YXR1cyBiaXQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzdGF0aWMgczMyIGlnYl9jaGVja19mb3JfbXNnX3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiB2Zl9udW1iZXIpCit7CisJczMyIHJldF92YWwgPSAtRTEwMDBfRVJSX01CWDsKKworCWlmICghaWdiX2NoZWNrX2Zvcl9iaXRfcGYoaHcsIEUxMDAwX01CVkZJQ1JfVkZSRVFfVkYxIDw8IHZmX251bWJlcikpIHsKKwkJcmV0X3ZhbCA9IDA7CisJCWh3LT5tYnguc3RhdHMucmVxcysrOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9yX2Fja19wZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFZGIGhhcyBBQ0tlZAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHZmX251bWJlcjogdGhlIFZGIGluZGV4CisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgVkYgaGFzIHNldCB0aGUgU3RhdHVzIGJpdCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3N0YXRpYyBzMzIgaWdiX2NoZWNrX2Zvcl9hY2tfcGYoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IHZmX251bWJlcikKK3sKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTUJYOworCisJaWYgKCFpZ2JfY2hlY2tfZm9yX2JpdF9wZihodywgRTEwMDBfTUJWRklDUl9WRkFDS19WRjEgPDwgdmZfbnVtYmVyKSkgeworCQlyZXRfdmFsID0gMDsKKwkJaHctPm1ieC5zdGF0cy5hY2tzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jaGVja19mb3JfcnN0X3BmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgVkYgaGFzIHJlc2V0CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBWRiBoYXMgc2V0IHRoZSBTdGF0dXMgYml0IG9yIGVsc2UgRVJSX01CWAorICoqLworc3RhdGljIHMzMiBpZ2JfY2hlY2tfZm9yX3JzdF9wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgdmZfbnVtYmVyKQoreworCXUzMiB2ZmxyZSA9IHJkMzIoRTEwMDBfVkZMUkUpOworCXMzMiByZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisKKwlpZiAodmZscmUgJiAoMSA8PCB2Zl9udW1iZXIpKSB7CisJCXJldF92YWwgPSAwOworCQl3cjMyKEUxMDAwX1ZGTFJFLCAoMSA8PCB2Zl9udW1iZXIpKTsKKwkJaHctPm1ieC5zdGF0cy5yc3RzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl93cml0ZV9tYnhfcGYgLSBQbGFjZXMgYSBtZXNzYWdlIGluIHRoZSBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlcgorICoqLworc3RhdGljIHMzMiBpZ2Jfd3JpdGVfbWJ4X3BmKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB2Zl9udW1iZXIpCit7CisJdTMyIHAydl9tYWlsYm94OworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgaTsKKworCS8qIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgKi8KKwl3cjMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSwgRTEwMDBfUDJWTUFJTEJPWF9QRlUpOworCisJLyogTWFrZSBzdXJlIHdlIGhhdmUgb3duZXJzaGlwIG5vdy4uLiAqLworCXAydl9tYWlsYm94ID0gcmQzMihFMTAwMF9QMlZNQUlMQk9YKHZmX251bWJlcikpOworCWlmICghKHAydl9tYWlsYm94ICYgRTEwMDBfUDJWTUFJTEJPWF9QRlUpKSB7CisJCS8qIGZhaWxlZCB0byBncmFiIG93bmVyc2hpcCAqLworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisJCWdvdG8gb3V0X25vX3dyaXRlOworCX0KKworCS8qCisJICogZmx1c2ggYW55IGFjayBvciBtc2cgd2hpY2ggbWF5IGFscmVhZHkgYmUgaW4gdGhlIHF1ZXVlCisJICogYXMgdGhleSBhcmUgbGlrZWx5IHRoZSByZXN1bHQgb2YgYW4gZXJyb3IKKwkgKi8KKwlpZ2JfY2hlY2tfZm9yX2Fja19wZihodywgdmZfbnVtYmVyKTsKKwlpZ2JfY2hlY2tfZm9yX21zZ19wZihodywgdmZfbnVtYmVyKTsKKworCS8qIGNvcHkgdGhlIGNhbGxlciBzcGVjaWZpZWQgbWVzc2FnZSB0byB0aGUgbWFpbGJveCBtZW1vcnkgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJYXJyYXlfd3IzMihFMTAwMF9WTUJNRU0odmZfbnVtYmVyKSwgaSwgbXNnW2ldKTsKKworCS8qIEludGVycnVwdCBWRiB0byB0ZWxsIGl0IGEgbWVzc2FnZSBoYXMgYmVlbiBzZW50IGFuZCByZWxlYXNlIGJ1ZmZlciovCisJd3IzMihFMTAwMF9QMlZNQUlMQk9YKHZmX251bWJlciksIEUxMDAwX1AyVk1BSUxCT1hfU1RTKTsKKworCS8qIHVwZGF0ZSBzdGF0cyAqLworCWh3LT5tYnguc3RhdHMubXNnc190eCsrOworCitvdXRfbm9fd3JpdGU6CisJcmV0dXJuIHJldF92YWw7CisKK30KKworLyoqCisgKiAgaWdiX3JlYWRfbWJ4X3BmIC0gUmVhZCBhIG1lc3NhZ2UgZnJvbSB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgYSBtZXNzYWdlIGZyb20gdGhlIG1haWxib3ggYnVmZmVyIHRvIHRoZSBjYWxsZXIncworICogIG1lbW9yeSBidWZmZXIuICBUaGUgcHJlc3VtcHRpb24gaXMgdGhhdCB0aGUgY2FsbGVyIGtub3dzIHRoYXQgdGhlcmUgd2FzCisgKiAgYSBtZXNzYWdlIGR1ZSB0byBhIFZGIHJlcXVlc3Qgc28gbm8gcG9sbGluZyBmb3IgbWVzc2FnZSBpcyBuZWVkZWQuCisgKiovCitzdGF0aWMgczMyIGlnYl9yZWFkX21ieF9wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB2Zl9udW1iZXIpCit7CisJdTMyIHAydl9tYWlsYm94OworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgaTsKKworCS8qIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgKi8KKwl3cjMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSwgRTEwMDBfUDJWTUFJTEJPWF9QRlUpOworCisJLyogTWFrZSBzdXJlIHdlIGhhdmUgb3duZXJzaGlwIG5vdy4uLiAqLworCXAydl9tYWlsYm94ID0gcmQzMihFMTAwMF9QMlZNQUlMQk9YKHZmX251bWJlcikpOworCWlmICghKHAydl9tYWlsYm94ICYgRTEwMDBfUDJWTUFJTEJPWF9QRlUpKSB7CisJCS8qIGZhaWxlZCB0byBncmFiIG93bmVyc2hpcCAqLworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9NQlg7CisJCWdvdG8gb3V0X25vX3JlYWQ7CisJfQorCisJLyogY29weSB0aGUgbWVzc2FnZSB0byB0aGUgbWFpbGJveCBtZW1vcnkgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJbXNnW2ldID0gYXJyYXlfcmQzMihFMTAwMF9WTUJNRU0odmZfbnVtYmVyKSwgaSk7CisKKwkvKiBBY2tub3dsZWRnZSB0aGUgbWVzc2FnZSBhbmQgcmVsZWFzZSBidWZmZXIgKi8KKwl3cjMyKEUxMDAwX1AyVk1BSUxCT1godmZfbnVtYmVyKSwgRTEwMDBfUDJWTUFJTEJPWF9BQ0spOworCisJLyogdXBkYXRlIHN0YXRzICovCisJaHctPm1ieC5zdGF0cy5tc2dzX3J4Kys7CisKKwlyZXRfdmFsID0gMDsKKworb3V0X25vX3JlYWQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGUxMDAwX2luaXRfbWJ4X3BhcmFtc19wZiAtIHNldCBpbml0aWFsIHZhbHVlcyBmb3IgcGYgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIEluaXRpYWxpemVzIHRoZSBody0+bWJ4IHN0cnVjdCB0byBjb3JyZWN0IHZhbHVlcyBmb3IgcGYgbWFpbGJveAorICovCitzMzIgaWdiX2luaXRfbWJ4X3BhcmFtc19wZihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisKKwlpZiAoaHctPm1hYy50eXBlID09IGUxMDAwXzgyNTc2KSB7CisJCW1ieC0+dGltZW91dCA9IDA7CisJCW1ieC0+dXNlY19kZWxheSA9IDA7CisKKwkJbWJ4LT5zaXplID0gRTEwMDBfVkZNQUlMQk9YX1NJWkU7CisKKwkJbWJ4LT5vcHMucmVhZCA9IGlnYl9yZWFkX21ieF9wZjsKKwkJbWJ4LT5vcHMud3JpdGUgPSBpZ2Jfd3JpdGVfbWJ4X3BmOworCQltYngtPm9wcy5yZWFkX3Bvc3RlZCA9IGlnYl9yZWFkX3Bvc3RlZF9tYng7CisJCW1ieC0+b3BzLndyaXRlX3Bvc3RlZCA9IGlnYl93cml0ZV9wb3N0ZWRfbWJ4OworCQltYngtPm9wcy5jaGVja19mb3JfbXNnID0gaWdiX2NoZWNrX2Zvcl9tc2dfcGY7CisJCW1ieC0+b3BzLmNoZWNrX2Zvcl9hY2sgPSBpZ2JfY2hlY2tfZm9yX2Fja19wZjsKKwkJbWJ4LT5vcHMuY2hlY2tfZm9yX3JzdCA9IGlnYl9jaGVja19mb3JfcnN0X3BmOworCisJCW1ieC0+c3RhdHMubXNnc190eCA9IDA7CisJCW1ieC0+c3RhdHMubXNnc19yeCA9IDA7CisJCW1ieC0+c3RhdHMucmVxcyA9IDA7CisJCW1ieC0+c3RhdHMuYWNrcyA9IDA7CisJCW1ieC0+c3RhdHMucnN0cyA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYnguaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWM5ODkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21ieC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9FMTAwMF9NQlhfSF8KKyNkZWZpbmUgX0UxMDAwX01CWF9IXworCisjaW5jbHVkZSAiZTEwMDBfaHcuaCIKKworI2RlZmluZSBFMTAwMF9QMlZNQUlMQk9YX1NUUyAgIDB4MDAwMDAwMDEgLyogSW5pdGlhdGUgbWVzc2FnZSBzZW5kIHRvIFZGICovCisjZGVmaW5lIEUxMDAwX1AyVk1BSUxCT1hfQUNLICAgMHgwMDAwMDAwMiAvKiBBY2sgbWVzc2FnZSByZWN2J2QgZnJvbSBWRiAqLworI2RlZmluZSBFMTAwMF9QMlZNQUlMQk9YX1ZGVSAgIDB4MDAwMDAwMDQgLyogVkYgb3ducyB0aGUgbWFpbGJveCBidWZmZXIgKi8KKyNkZWZpbmUgRTEwMDBfUDJWTUFJTEJPWF9QRlUgICAweDAwMDAwMDA4IC8qIFBGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIEUxMDAwX1AyVk1BSUxCT1hfUlZGVSAgMHgwMDAwMDAxMCAvKiBSZXNldCBWRlUgLSB1c2VkIHdoZW4gVkYgc3R1Y2sgKi8KKworI2RlZmluZSBFMTAwMF9NQlZGSUNSX1ZGUkVRX01BU0sgMHgwMDAwMDBGRiAvKiBiaXRzIGZvciBWRiBtZXNzYWdlcyAqLworI2RlZmluZSBFMTAwMF9NQlZGSUNSX1ZGUkVRX1ZGMSAgMHgwMDAwMDAwMSAvKiBiaXQgZm9yIFZGIDEgbWVzc2FnZSAqLworI2RlZmluZSBFMTAwMF9NQlZGSUNSX1ZGQUNLX01BU0sgMHgwMEZGMDAwMCAvKiBiaXRzIGZvciBWRiBhY2tzICovCisjZGVmaW5lIEUxMDAwX01CVkZJQ1JfVkZBQ0tfVkYxICAweDAwMDEwMDAwIC8qIGJpdCBmb3IgVkYgMSBhY2sgKi8KKworI2RlZmluZSBFMTAwMF9WRk1BSUxCT1hfU0laRSAgIDE2IC8qIDE2IDMyIGJpdCB3b3JkcyAtIDY0IGJ5dGVzICovCisKKy8qIElmIGl0J3MgYSBFMTAwMF9WRl8qIG1zZyB0aGVuIGl0IG9yaWdpbmF0ZXMgaW4gdGhlIFZGIGFuZCBpcyBzZW50IHRvIHRoZQorICogUEYuICBUaGUgcmV2ZXJzZSBpcyB0cnVlIGlmIGl0IGlzIEUxMDAwX1BGXyouCisgKiBNZXNzYWdlIEFDSydzIGFyZSB0aGUgdmFsdWUgb3InZCB3aXRoIDB4RjAwMDAwMDAKKyAqLworI2RlZmluZSBFMTAwMF9WVF9NU0dUWVBFX0FDSyAgICAgIDB4ODAwMDAwMDAgIC8qIE1lc3NhZ2VzIGJlbG93IG9yJ2Qgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoaXMgYXJlIHRoZSBBQ0sgKi8KKyNkZWZpbmUgRTEwMDBfVlRfTVNHVFlQRV9OQUNLICAgICAweDQwMDAwMDAwICAvKiBNZXNzYWdlcyBiZWxvdyBvcidkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGlzIGFyZSB0aGUgTkFDSyAqLworI2RlZmluZSBFMTAwMF9WVF9NU0dUWVBFX0NUUyAgICAgIDB4MjAwMDAwMDAgIC8qIEluZGljYXRlcyB0aGF0IFZGIGlzIHN0aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgdG8gc2VuZCByZXF1ZXN0cyAqLworI2RlZmluZSBFMTAwMF9WVF9NU0dJTkZPX1NISUZUICAgIDE2CisvKiBiaXRzIDIzOjE2IGFyZSB1c2VkIGZvciBleHJhIGluZm8gZm9yIGNlcnRhaW4gbWVzc2FnZXMgKi8KKyNkZWZpbmUgRTEwMDBfVlRfTVNHSU5GT19NQVNLICAgICAoMHhGRiA8PCBFMTAwMF9WVF9NU0dJTkZPX1NISUZUKQorCisjZGVmaW5lIEUxMDAwX1ZGX1JFU0VUICAgICAgICAgICAgMHgwMSAvKiBWRiByZXF1ZXN0cyByZXNldCAqLworI2RlZmluZSBFMTAwMF9WRl9TRVRfTUFDX0FERFIgICAgIDB4MDIgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IE1BQyBhZGRyICovCisjZGVmaW5lIEUxMDAwX1ZGX1NFVF9NVUxUSUNBU1QgICAgMHgwMyAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgTUMgYWRkciAqLworI2RlZmluZSBFMTAwMF9WRl9TRVRfVkxBTiAgICAgICAgIDB4MDQgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZMQU4gKi8KKyNkZWZpbmUgRTEwMDBfVkZfU0VUX0xQRSAgICAgICAgICAweDA1IC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBWTU9MUi5MUEUgKi8KKworI2RlZmluZSBFMTAwMF9QRl9DT05UUk9MX01TRyAgICAgIDB4MDEwMCAvKiBQRiBjb250cm9sIG1lc3NhZ2UgKi8KKworczMyIGlnYl9yZWFkX21ieChzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKK3MzMiBpZ2Jfd3JpdGVfbWJ4KHN0cnVjdCBlMTAwMF9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworczMyIGlnYl9yZWFkX3Bvc3RlZF9tYngoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaWdiX3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IGUxMDAwX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaWdiX2NoZWNrX2Zvcl9tc2coc3RydWN0IGUxMDAwX2h3ICosIHUxNik7CitzMzIgaWdiX2NoZWNrX2Zvcl9hY2soc3RydWN0IGUxMDAwX2h3ICosIHUxNik7CitzMzIgaWdiX2NoZWNrX2Zvcl9yc3Qoc3RydWN0IGUxMDAwX2h3ICosIHUxNik7CitzMzIgaWdiX2luaXRfbWJ4X3BhcmFtc19wZihzdHJ1Y3QgZTEwMDBfaHcgKik7CisKKyNlbmRpZiAvKiBfRTEwMDBfTUJYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMKaW5kZXggYTg0ZTRlNC4uYTg4YmZlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX252bS5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9udm0uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTQxOSw3ICs0MTksNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaHctPm52bS5vcHMuYWNxdWlyZV9udm0oaHcpOworCXJldF92YWwgPSBody0+bnZtLm9wcy5hY3F1aXJlKGh3KTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCiAJbXNsZWVwKDEwKTsKIHJlbGVhc2U6Ci0JaHctPm52bS5vcHMucmVsZWFzZV9udm0oaHcpOworCWh3LT5udm0ub3BzLnJlbGVhc2UoaHcpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC00ODcsMTQgKzQ4NywxNCBAQAogCXMzMiAgcmV0X3ZhbDsKIAl1MTYgbnZtX2RhdGE7CiAKLQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIE5WTV9QQkFfT0ZGU0VUXzAsIDEsICZudm1fZGF0YSk7CisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9QQkFfT0ZGU0VUXzAsIDEsICZudm1fZGF0YSk7CiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAkqcGFydF9udW0gPSAodTMyKShudm1fZGF0YSA8PCAxNik7CiAKLQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIE5WTV9QQkFfT0ZGU0VUXzEsIDEsICZudm1fZGF0YSk7CisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIE5WTV9QQkFfT0ZGU0VUXzEsIDEsICZudm1fZGF0YSk7CiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CiAJCWdvdG8gb3V0OwpAQCAtNTE1LDI5ICs1MTUsMjMgQEAKICAqKi8KIHMzMiBpZ2JfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotCXMzMiAgcmV0X3ZhbCA9IDA7Ci0JdTE2IG9mZnNldCwgbnZtX2RhdGEsIGk7CisJdTMyIHJhcl9oaWdoOworCXUzMiByYXJfbG93OworCXUxNiBpOwogCi0JZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpICs9IDIpIHsKLQkJb2Zmc2V0ID0gaSA+PiAxOwotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIG9mZnNldCwgMSwgJm52bV9kYXRhKTsKLQkJaWYgKHJldF92YWwpIHsKLQkJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaHctPm1hYy5wZXJtX2FkZHJbaV0gPSAodTgpKG52bV9kYXRhICYgMHhGRik7Ci0JCWh3LT5tYWMucGVybV9hZGRyW2krMV0gPSAodTgpKG52bV9kYXRhID4+IDgpOwotCX0KKwlyYXJfaGlnaCA9IHJkMzIoRTEwMDBfUkFIKDApKTsKKwlyYXJfbG93ID0gcmQzMihFMTAwMF9SQUwoMCkpOwogCi0JLyogRmxpcCBsYXN0IGJpdCBvZiBtYWMgYWRkcmVzcyBpZiB3ZSdyZSBvbiBzZWNvbmQgcG9ydCAqLwotCWlmIChody0+YnVzLmZ1bmMgPT0gRTEwMDBfRlVOQ18xKQotCQlody0+bWFjLnBlcm1fYWRkcls1XSBePSAxOworCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9SQUxfTUFDX0FERFJfTEVOOyBpKyspCisJCWh3LT5tYWMucGVybV9hZGRyW2ldID0gKHU4KShyYXJfbG93ID4+IChpKjgpKTsKKworCWZvciAoaSA9IDA7IGkgPCBFMTAwMF9SQUhfTUFDX0FERFJfTEVOOyBpKyspCisJCWh3LT5tYWMucGVybV9hZGRyW2krNF0gPSAodTgpKHJhcl9oaWdoID4+IChpKjgpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQlody0+bWFjLmFkZHJbaV0gPSBody0+bWFjLnBlcm1fYWRkcltpXTsKIAotb3V0OgotCXJldHVybiByZXRfdmFsOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTU1NCw3ICs1NDgsNyBAQAogCXUxNiBpLCBudm1fZGF0YTsKIAogCWZvciAoaSA9IDA7IGkgPCAoTlZNX0NIRUNLU1VNX1JFRyArIDEpOyBpKyspIHsKLQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBpLCAxLCAmbnZtX2RhdGEpOworCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgaSwgMSwgJm52bV9kYXRhKTsKIAkJaWYgKHJldF92YWwpIHsKIAkJCWh3X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOwogCQkJZ290byBvdXQ7CkBAIC01ODcsNyArNTgxLDcgQEAKIAl1MTYgaSwgbnZtX2RhdGE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlZNX0NIRUNLU1VNX1JFRzsgaSsrKSB7Ci0JCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkX252bShodywgaSwgMSwgJm52bV9kYXRhKTsKKwkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIGksIDEsICZudm1fZGF0YSk7CiAJCWlmIChyZXRfdmFsKSB7CiAJCQlod19kYmcoIk5WTSBSZWFkIEVycm9yIHdoaWxlIHVwZGF0aW5nIGNoZWNrc3VtLlxuIik7CiAJCQlnb3RvIG91dDsKQEAgLTU5NSw3ICs1ODksNyBAQAogCQljaGVja3N1bSArPSBudm1fZGF0YTsKIAl9CiAJY2hlY2tzdW0gPSAodTE2KSBOVk1fU1VNIC0gY2hlY2tzdW07Ci0JcmV0X3ZhbCA9IGh3LT5udm0ub3BzLndyaXRlX252bShodywgTlZNX0NIRUNLU1VNX1JFRywgMSwgJmNoZWNrc3VtKTsKKwlyZXRfdmFsID0gaHctPm52bS5vcHMud3JpdGUoaHcsIE5WTV9DSEVDS1NVTV9SRUcsIDEsICZjaGVja3N1bSk7CiAJaWYgKHJldF92YWwpCiAJCWh3X2RiZygiTlZNIFdyaXRlIEVycm9yIHdoaWxlIHVwZGF0aW5nIGNoZWNrc3VtLlxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYwppbmRleCAxN2ZkZGI5Li5kZTJkNDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzEsMTAgKzMxLDYgQEAKICNpbmNsdWRlICJlMTAwMF9tYWMuaCIKICNpbmNsdWRlICJlMTAwMF9waHkuaCIKIAotc3RhdGljIHMzMiAgaWdiX2dldF9waHlfY2ZnX2RvbmUoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgdm9pZCBpZ2JfcmVsZWFzZV9waHkoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgczMyICBpZ2JfYWNxdWlyZV9waHkoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zdGF0aWMgczMyICBpZ2JfcGh5X3Jlc2V0X2RzcChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyBzMzIgIGlnYl9waHlfc2V0dXBfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHN0YXRpYyB2b2lkIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcsCiAJCQkJCSAgICAgICB1MTYgKnBoeV9jdHJsKTsKQEAgLTQzLDkgKzM5LDYgQEAKIC8qIENhYmxlIGxlbmd0aCB0YWJsZXMgKi8KIHN0YXRpYyBjb25zdCB1MTYgZTEwMDBfbTg4X2NhYmxlX2xlbmd0aF90YWJsZVtdID0KIAl7IDAsIDUwLCA4MCwgMTEwLCAxNDAsIDE0MCwgRTEwMDBfQ0FCTEVfTEVOR1RIX1VOREVGSU5FRCB9OwotI2RlZmluZSBNODhFMTAwMF9DQUJMRV9MRU5HVEhfVEFCTEVfU0laRSBcCi0JCShzaXplb2YoZTEwMDBfbTg4X2NhYmxlX2xlbmd0aF90YWJsZSkgLyBcCi0JCSBzaXplb2YoZTEwMDBfbTg4X2NhYmxlX2xlbmd0aF90YWJsZVswXSkpCiAKIHN0YXRpYyBjb25zdCB1MTYgZTEwMDBfaWdwXzJfY2FibGVfbGVuZ3RoX3RhYmxlW10gPQogICAgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMywgNSwgOCwgMTEsIDEzLCAxNiwgMTgsIDIxLApAQCAtOTEsMTMgKzg0LDEzIEBACiAJczMyIHJldF92YWwgPSAwOwogCXUxNiBwaHlfaWQ7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfSUQxLCAmcGh5X2lkKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV9JRDEsICZwaHlfaWQpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeS0+aWQgPSAodTMyKShwaHlfaWQgPDwgMTYpOwogCXVkZWxheSgyMCk7Ci0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0lEMiwgJnBoeV9pZCk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfSUQyLCAmcGh5X2lkKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTExOCwxMSArMTExLDExIEBACiB7CiAJczMyIHJldF92YWw7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX0dFTl9DT05UUk9MLCAweEMxKTsKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCBNODhFMTAwMF9QSFlfR0VOX0NPTlRST0wsIDB4QzEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfR0VOX0NPTlRST0wsIDApOworCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIE04OEUxMDAwX1BIWV9HRU5fQ09OVFJPTCwgMCk7CiAKIG91dDoKIAlyZXR1cm4gcmV0X3ZhbDsKQEAgLTI1Nyw5ICsyNTAsMTIgQEAKICAqKi8KIHMzMiBpZ2JfcmVhZF9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCiB7Ci0JczMyIHJldF92YWw7CisJczMyIHJldF92YWwgPSAwOwogCi0JcmV0X3ZhbCA9IGlnYl9hY3F1aXJlX3BoeShodyk7CisJaWYgKCEoaHctPnBoeS5vcHMuYWNxdWlyZSkpCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmFjcXVpcmUoaHcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMjY4LDE2ICsyNjQsMTUgQEAKIAkJCQkJCSAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAogCQkJCQkJICAgKHUxNilvZmZzZXQpOwogCQlpZiAocmV0X3ZhbCkgewotCQkJaWdiX3JlbGVhc2VfcGh5KGh3KTsKKwkJCWh3LT5waHkub3BzLnJlbGVhc2UoaHcpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKLQlyZXRfdmFsID0gaWdiX3JlYWRfcGh5X3JlZ19tZGljKGh3LAotCQkJCQkgIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCi0JCQkJCSAgZGF0YSk7CisJcmV0X3ZhbCA9IGlnYl9yZWFkX3BoeV9yZWdfbWRpYyhodywgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKKwkJCQkJZGF0YSk7CiAKLQlpZ2JfcmVsZWFzZV9waHkoaHcpOworCWh3LT5waHkub3BzLnJlbGVhc2UoaHcpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC0yOTQsOSArMjg5LDEyIEBACiAgKiovCiBzMzIgaWdiX3dyaXRlX3BoeV9yZWdfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQogewotCXMzMiByZXRfdmFsOworCXMzMiByZXRfdmFsID0gMDsKIAotCXJldF92YWwgPSBpZ2JfYWNxdWlyZV9waHkoaHcpOworCWlmICghKGh3LT5waHkub3BzLmFjcXVpcmUpKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBody0+cGh5Lm9wcy5hY3F1aXJlKGh3KTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTMwNSwxNiArMzAzLDE1IEBACiAJCQkJCQkgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKIAkJCQkJCSAgICh1MTYpb2Zmc2V0KTsKIAkJaWYgKHJldF92YWwpIHsKLQkJCWlnYl9yZWxlYXNlX3BoeShodyk7CisJCQlody0+cGh5Lm9wcy5yZWxlYXNlKGh3KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQogCi0JcmV0X3ZhbCA9IGlnYl93cml0ZV9waHlfcmVnX21kaWMoaHcsCi0JCQkJCSAgIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCisJcmV0X3ZhbCA9IGlnYl93cml0ZV9waHlfcmVnX21kaWMoaHcsIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCiAJCQkJCSAgIGRhdGEpOwogCi0JaWdiX3JlbGVhc2VfcGh5KGh3KTsKKwlody0+cGh5Lm9wcy5yZWxlYXNlKGh3KTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpAQCAtMzM5LDggKzMzNiw3IEBACiAJfQogCiAJLyogRW5hYmxlIENSUyBvbiBUWC4gVGhpcyBtdXN0IGJlIHNldCBmb3IgaGFsZi1kdXBsZXggb3BlcmF0aW9uLiAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMzgzLDggKzM3OSw3IEBACiAJaWYgKHBoeS0+ZGlzYWJsZV9wb2xhcml0eV9jb3JyZWN0aW9uID09IDEpCiAJCXBoeV9kYXRhIHw9IE04OEUxMDAwX1BTQ1JfUE9MQVJJVFlfUkVWRVJTQUw7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgIHBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCBwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0zOTMsOCArMzg4LDcgQEAKIAkJICogRm9yY2UgVFhfQ0xLIGluIHRoZSBFeHRlbmRlZCBQSFkgU3BlY2lmaWMgQ29udHJvbCBSZWdpc3RlcgogCQkgKiB0byAyNU1IeiBjbG9jay4KIAkJICovCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCi0JCQkJCSAgICAgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsCisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsCiAJCQkJCSAgICAgJnBoeV9kYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKQEAgLTQxMyw4ICs0MDcsNyBAQAogCQkJcGh5X2RhdGEgfD0gKE04OEUxMDAwX0VQU0NSX01BU1RFUl9ET1dOU0hJRlRfMVggfAogCQkJCSAgICAgTTg4RTEwMDBfRVBTQ1JfU0xBVkVfRE9XTlNISUZUXzFYKTsKIAkJfQotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKLQkJCQkJICAgICBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsCiAJCQkJCSAgICAgcGh5X2RhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtNDQ5LDcgKzQ0Miw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZXNldF9waHkoaHcpOworCXJldF92YWwgPSBwaHktPm9wcy5yZXNldChodyk7CiAJaWYgKHJldF92YWwpIHsKIAkJaHdfZGJnKCJFcnJvciByZXNldHRpbmcgdGhlIFBIWS5cbiIpOwogCQlnb3RvIG91dDsKQEAgLTQ2NCw4ICs0NTcsOCBAQAogCSAqLwogCWlmIChwaHktPnR5cGUgPT0gZTEwMDBfcGh5X2lncCkgewogCQkvKiBkaXNhYmxlIGxwbHUgZDMgZHVyaW5nIGRyaXZlciBpbml0ICovCi0JCWlmIChody0+cGh5Lm9wcy5zZXRfZDNfbHBsdV9zdGF0ZSkKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy5zZXRfZDNfbHBsdV9zdGF0ZShodywgZmFsc2UpOworCQlpZiAocGh5LT5vcHMuc2V0X2QzX2xwbHVfc3RhdGUpCisJCQlyZXRfdmFsID0gcGh5LT5vcHMuc2V0X2QzX2xwbHVfc3RhdGUoaHcsIGZhbHNlKTsKIAkJaWYgKHJldF92YWwpIHsKIAkJCWh3X2RiZygiRXJyb3IgRGlzYWJsaW5nIExQTFUgRDNcbiIpOwogCQkJZ290byBvdXQ7CkBAIC00NzMsMTMgKzQ2NiwxMyBAQAogCX0KIAogCS8qIGRpc2FibGUgbHBsdSBkMCBkdXJpbmcgZHJpdmVyIGluaXQgKi8KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMuc2V0X2QwX2xwbHVfc3RhdGUoaHcsIGZhbHNlKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMuc2V0X2QwX2xwbHVfc3RhdGUoaHcsIGZhbHNlKTsKIAlpZiAocmV0X3ZhbCkgewogCQlod19kYmcoIkVycm9yIERpc2FibGluZyBMUExVIEQwXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCS8qIENvbmZpZ3VyZSBtZGktbWRpeCBzZXR0aW5ncyAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ1RSTCwgJmRhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCAmZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC00OTcsNyArNDkwLDcgQEAKIAkJZGF0YSB8PSBJR1AwMUUxMDAwX1BTQ1JfQVVUT19NRElYOwogCQlicmVhazsKIAl9Ci0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ1RSTCwgZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCBkYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTUxMCwzMyArNTAzLDMxIEBACiAJCSAqLwogCQlpZiAocGh5LT5hdXRvbmVnX2FkdmVydGlzZWQgPT0gQURWRVJUSVNFXzEwMDBfRlVMTCkgewogCQkJLyogRGlzYWJsZSBTbWFydFNwZWVkICovCi0JCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LAotCQkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKLQkJCQkJCSAgICAgJmRhdGEpOworCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LAorCQkJCQkJICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAorCQkJCQkJICAgICZkYXRhKTsKIAkJCWlmIChyZXRfdmFsKQogCQkJCWdvdG8gb3V0OwogCiAJCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKIAkJCQkJCSAgICAgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJLyogU2V0IGF1dG8gTWFzdGVyL1NsYXZlIHJlc29sdXRpb24gcHJvY2VzcyAqLwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsCi0JCQkJCQkJICAgJmRhdGEpOworCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAKIAkJCWRhdGEgJj0gfkNSXzEwMDBUX01TX0VOQUJMRTsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwKLQkJCQkJCQkgICAgZGF0YSk7CisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAkJfQogCi0JCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCAmZGF0YSk7CisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZXzEwMDBUX0NUUkwsICZkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIApAQCAtNTYwLDcgKzU1MSw3IEBACiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsIGRhdGEpOworCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAJfQpAQCAtNjA5LDEyICs2MDAsMTIgQEAKIAkgKiBSZXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24gYnkgc2V0dGluZyB0aGUgQXV0byBOZWcgRW5hYmxlIGJpdCBhbmQKIAkgKiB0aGUgQXV0byBOZWcgUmVzdGFydCBiaXQgaW4gdGhlIFBIWSBjb250cm9sIHJlZ2lzdGVyLgogCSAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2N0cmwpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfY3RybCk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5X2N0cmwgfD0gKE1JSV9DUl9BVVRPX05FR19FTiB8IE1JSV9DUl9SRVNUQVJUX0FVVE9fTkVHKTsKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsIHBoeV9jdHJsKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2N0cmwpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtNjU2LDE1ICs2NDcsMTMgQEAKIAlwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmPSBwaHktPmF1dG9uZWdfbWFzazsKIAogCS8qIFJlYWQgdGhlIE1JSSBBdXRvLU5lZyBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyIChBZGRyZXNzIDQpLiAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9BVVRPTkVHX0FEViwKLQkJCQkJICAgJm1paV9hdXRvbmVnX2Fkdl9yZWcpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZX0FVVE9ORUdfQURWLCAmbWlpX2F1dG9uZWdfYWR2X3JlZyk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJaWYgKHBoeS0+YXV0b25lZ19tYXNrICYgQURWRVJUSVNFXzEwMDBfRlVMTCkgewogCQkvKiBSZWFkIHRoZSBNSUkgMTAwMEJhc2UtVCBDb250cm9sIFJlZ2lzdGVyIChBZGRyZXNzIDkpLiAqLwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LAotCQkJCQkgICAgUEhZXzEwMDBUX0NUUkwsCisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZXzEwMDBUX0NUUkwsCiAJCQkJCSAgICAmbWlpXzEwMDB0X2N0cmxfcmVnKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKQEAgLTc4NSwxNyArNzc0LDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsCi0JCQkJCSAgICBtaWlfYXV0b25lZ19hZHZfcmVnKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCWh3X2RiZygiQXV0by1OZWcgQWR2ZXJ0aXNpbmcgJXhcbiIsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOwogCiAJaWYgKHBoeS0+YXV0b25lZ19tYXNrICYgQURWRVJUSVNFXzEwMDBfRlVMTCkgewotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKLQkJCQkJICAgICAgUEhZXzEwMDBUX0NUUkwsCi0JCQkJCSAgICAgIG1paV8xMDAwdF9jdHJsX3JlZyk7CisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsCisJCQkJCSAgICAgUEhZXzEwMDBUX0NUUkwsCisJCQkJCSAgICAgbWlpXzEwMDB0X2N0cmxfcmVnKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC04MTksMTMgKzgwNywxMyBAQAogCXUxNiBwaHlfZGF0YTsKIAlib29sIGxpbms7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCWlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X3NldHVwKGh3LCAmcGh5X2RhdGEpOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCBwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgUEhZX0NPTlRST0wsIHBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTgzMywxNiArODIxLDE0IEBACiAJICogQ2xlYXIgQXV0by1Dcm9zc292ZXIgdG8gZm9yY2UgTURJIG1hbnVhbGx5LiAgSUdQIHJlcXVpcmVzIE1ESQogCSAqIGZvcmNlZCB3aGVuZXZlciBzcGVlZCBhbmQgZHVwbGV4IGFyZSBmb3JjZWQuCiAJICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLAotCQkJCQkgICAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeV9kYXRhICY9IH5JR1AwMUUxMDAwX1BTQ1JfQVVUT19NRElYOwogCXBoeV9kYXRhICY9IH5JR1AwMUUxMDAwX1BTQ1JfRk9SQ0VfTURJX01ESVg7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLAotCQkJCQkgICAgcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ1RSTCwgcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtODk3LDIwICs4ODMsMTggQEAKIAkgKiBDbGVhciBBdXRvLUNyb3Nzb3ZlciB0byBmb3JjZSBNREkgbWFudWFsbHkuICBNODhFMTAwMCByZXF1aXJlcyBNREkKIAkgKiBmb3JjZWQgd2hlbmV2ZXIgc3BlZWQgYW5kIGR1cGxleCBhcmUgZm9yY2VkLgogCSAqLwotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeV9kYXRhICY9IH5NODhFMTAwMF9QU0NSX0FVVE9fWF9NT0RFOwotCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLAotCQkJCQkgICAgcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsIHBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlod19kYmcoIk04OEUxMDAwIFBTQ1I6ICVYXG4iLCBwaHlfZGF0YSk7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtOTE5LDcgKzkwMyw3IEBACiAJLyogUmVzZXQgdGhlIHBoeSB0byBjb21taXQgY2hhbmdlcy4gKi8KIAlwaHlfZGF0YSB8PSBNSUlfQ1JfUkVTRVQ7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsIHBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtOTQwLDcgKzkyNCw3IEBACiAJCQkgKiBXZSBkaWRuJ3QgZ2V0IGxpbmsuCiAJCQkgKiBSZXNldCB0aGUgRFNQIGFuZCBjcm9zcyBvdXIgZmluZ2Vycy4KIAkJCSAqLwotCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LAogCQkJCQkJICAgICAgTTg4RTEwMDBfUEhZX1BBR0VfU0VMRUNULAogCQkJCQkJICAgICAgMHgwMDFkKTsKIAkJCWlmIChyZXRfdmFsKQpAQCAtOTU3LDggKzk0MSw3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtOTY4LDggKzk1MSw3IEBACiAJICogdGhlIHJlc2V0IHZhbHVlIG9mIDIuNU1Iei4KIAkgKi8KIAlwaHlfZGF0YSB8PSBNODhFMTAwMF9FUFNDUl9UWF9DTEtfMjU7Ci0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLAotCQkJCQkgICAgcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIE04OEUxMDAwX0VYVF9QSFlfU1BFQ19DVFJMLCBwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC05NzcsMTQgKzk1OSwxMiBAQAogCSAqIEluIGFkZGl0aW9uLCB3ZSBtdXN0IHJlLWVuYWJsZSBDUlMgb24gVHggZm9yIGJvdGggaGFsZiBhbmQgZnVsbAogCSAqIGR1cGxleC4KIAkgKi8KLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLAotCQkJCQkgICAmcGh5X2RhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgJnBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKIAlwaHlfZGF0YSB8PSBNODhFMTAwMF9QU0NSX0FTU0VSVF9DUlNfT05fVFg7Ci0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICBwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgcGh5X2RhdGEpOwogCiBvdXQ6CiAJcmV0dXJuIHJldF92YWw7CkBAIC0xMDcxLDE1ICsxMDUxLDEzIEBACiAJczMyIHJldF92YWw7CiAJdTE2IGRhdGE7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAotCQkJCQkgICAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULCAmZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJaWYgKCFhY3RpdmUpIHsKIAkJZGF0YSAmPSB+SUdQMDJFMTAwMF9QTV9EM19MUExVOwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKLQkJCQkJICAgICBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAorCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAogCQkJCQkgICAgIGRhdGEpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWdvdG8gb3V0OwpAQCAtMTA5MCwyNyArMTA2OCwyNyBAQAogCQkgKiBTbWFydFNwZWVkLCBzbyBwZXJmb3JtYW5jZSBpcyBtYWludGFpbmVkLgogCQkgKi8KIAkJaWYgKHBoeS0+c21hcnRfc3BlZWQgPT0gZTEwMDBfc21hcnRfc3BlZWRfb24pIHsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsCiAJCQkJCQkgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkgICAgJmRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAKIAkJCWRhdGEgfD0gSUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywKIAkJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkgICAgIGRhdGEpOwogCQkJaWYgKHJldF92YWwpCiAJCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAocGh5LT5zbWFydF9zcGVlZCA9PSBlMTAwMF9zbWFydF9zcGVlZF9vZmYpIHsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsCisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsCiAJCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkJICAgICAmZGF0YSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlnb3RvIG91dDsKIAogCQkJZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLQkJCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3JlZyhodywKIAkJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAJCQkJCQkgICAgIGRhdGEpOwogCQkJaWYgKHJldF92YWwpCkBAIC0xMTIwLDIyICsxMDk4LDE5IEBACiAJCSAgIChwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSBFMTAwMF9BTExfTk9UX0dJRykgfHwKIAkJICAgKHBoeS0+YXV0b25lZ19hZHZlcnRpc2VkID09IEUxMDAwX0FMTF8xMF9TUEVFRCkpIHsKIAkJZGF0YSB8PSBJR1AwMkUxMDAwX1BNX0QzX0xQTFU7Ci0JCXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAotCQkJCQkgICAgICBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAorCQlyZXRfdmFsID0gcGh5LT5vcHMud3JpdGVfcmVnKGh3LCBJR1AwMkUxMDAwX1BIWV9QT1dFUl9NR01ULAogCQkJCQkgICAgICBkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAogCQkvKiBXaGVuIExQTFUgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkIGRpc2FibGUgU21hcnRTcGVlZCAqLwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LAotCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAorCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkgICAgICZkYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAogCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKLQkJCQkJICAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogCQkJCQkgICAgICBkYXRhKTsKIAl9CiAKQEAgLTExNzYsNyArMTE1MSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIG9mZnNldCwgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIG9mZnNldCwgJnBoeV9kYXRhKTsKIAogCWlmICghcmV0X3ZhbCkKIAkJcGh5LT5zcGVlZF9kb3duZ3JhZGVkID0gKHBoeV9kYXRhICYgbWFzaykgPyB0cnVlIDogZmFsc2U7CkBAIC0xMTk5LDcgKzExNzQsNyBAQAogCXMzMiByZXRfdmFsOwogCXUxNiBkYXRhOwogCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLCAmZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZkYXRhKTsKIAogCWlmICghcmV0X3ZhbCkKIAkJcGh5LT5jYWJsZV9wb2xhcml0eSA9IChkYXRhICYgTTg4RTEwMDBfUFNTUl9SRVZfUE9MQVJJVFkpCkBAIC0xMjI4LDggKzEyMDMsNyBAQAogCSAqIFBvbGFyaXR5IGlzIGRldGVybWluZWQgYmFzZWQgb24gdGhlIHNwZWVkIG9mCiAJICogb3VyIGNvbm5lY3Rpb24uCiAJICovCi0JcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9TVEFUVVMsCi0JCQkJCSAgICZkYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfU1RBVFVTLCAmZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0xMjQ2LDcgKzEyMjAsNyBAQAogCQltYXNrCT0gSUdQMDFFMTAwMF9QU1NSX1BPTEFSSVRZX1JFVkVSU0VEOwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIG9mZnNldCwgJmRhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgb2Zmc2V0LCAmZGF0YSk7CiAKIAlpZiAoIXJldF92YWwpCiAJCXBoeS0+Y2FibGVfcG9sYXJpdHkgPSAoZGF0YSAmIG1hc2spCkBAIC0xMjcxLDEwICsxMjQ1LDEwIEBACiAKIAkvKiBCcmVhayBhZnRlciBhdXRvbmVnIGNvbXBsZXRlcyBvciBQSFlfQVVUT19ORUdfTElNSVQgZXhwaXJlcy4gKi8KIAlmb3IgKGkgPSBQSFlfQVVUT19ORUdfTElNSVQ7IGkgPiAwOyBpLS0pIHsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfc3RhdHVzKTsKIAkJaWYgKHJldF92YWwpCiAJCQlicmVhazsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfc3RhdHVzKTsKIAkJaWYgKHJldF92YWwpCiAJCQlicmVhazsKIAkJaWYgKHBoeV9zdGF0dXMgJiBNSUlfU1JfQVVUT05FR19DT01QTEVURSkKQEAgLTEzMTAsMTAgKzEyODQsMTAgQEAKIAkJICogdHdpY2UgZHVlIHRvIHRoZSBsaW5rIGJpdCBiZWluZyBzdGlja3kuICBObyBoYXJtIGRvaW5nCiAJCSAqIGl0IGFjcm9zcyB0aGUgYm9hcmQuCiAJCSAqLwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWJyZWFrOwotCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9zdGF0dXMpOwogCQlpZiAocmV0X3ZhbCkKIAkJCWJyZWFrOwogCQlpZiAocGh5X3N0YXR1cyAmIE1JSV9TUl9MSU5LX1NUQVRVUykKQEAgLTEzNTAsOCArMTMyNCw3IEBACiAJczMyIHJldF92YWw7CiAJdTE2IHBoeV9kYXRhLCBpbmRleDsKIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUywKLQkJCQkJICAgJnBoeV9kYXRhKTsKKwlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUywgJnBoeV9kYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTEzNzIsOCArMTM0NSw4IEBACiAgKgogICogIFRoZSBhdXRvbWF0aWMgZ2FpbiBjb250cm9sIChhZ2MpIG5vcm1hbGl6ZXMgdGhlIGFtcGxpdHVkZSBvZiB0aGUKICAqICByZWNlaXZlZCBzaWduYWwsIGFkanVzdGluZyBmb3IgdGhlIGF0dGVudWF0aW9uIHByb2R1Y2VkIGJ5IHRoZQotICogIGNhYmxlLiAgQnkgcmVhZGluZyB0aGUgQUdDIHJlZ2lzdGVycywgd2hpY2ggcmVwZXJlc2VudCB0aGUKLSAqICBjb2JpbmF0aW9uIG9mIGNvdXJzZSBhbmQgZmluZSBnYWluIHZhbHVlLCB0aGUgdmFsdWUgY2FuIGJlIHB1dAorICogIGNhYmxlLiAgQnkgcmVhZGluZyB0aGUgQUdDIHJlZ2lzdGVycywgd2hpY2ggcmVwcmVzZW50IHRoZQorICogIGNvbWJpbmF0aW9uIG9mIGNvYXJzZSBhbmQgZmluZSBnYWluIHZhbHVlLCB0aGUgdmFsdWUgY2FuIGJlIHB1dAogICogIGludG8gYSBsb29rdXAgdGFibGUgdG8gb2J0YWluIHRoZSBhcHByb3hpbWF0ZSBjYWJsZSBsZW5ndGgKICAqICBmb3IgZWFjaCBjaGFubmVsLgogICoqLwpAQCAtMTM5MiwxNCArMTM2NSwxMyBAQAogCiAJLyogUmVhZCB0aGUgQUdDIHJlZ2lzdGVycyBmb3IgYWxsIGNoYW5uZWxzICovCiAJZm9yIChpID0gMDsgaSA8IElHUDAyRTEwMDBfUEhZX0NIQU5ORUxfTlVNOyBpKyspIHsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgYWdjX3JlZ19hcnJheVtpXSwKLQkJCQkJCSAgICZwaHlfZGF0YSk7CisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgYWdjX3JlZ19hcnJheVtpXSwgJnBoeV9kYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIAogCQkvKgogCQkgKiBHZXR0aW5nIGJpdHMgMTU6OSwgd2hpY2ggcmVwcmVzZW50IHRoZSBjb21iaW5hdGlvbiBvZgotCQkgKiBjb3Vyc2UgYW5kIGZpbmUgZ2FpbiB2YWx1ZXMuICBUaGUgcmVzdWx0IGlzIGEgbnVtYmVyCisJCSAqIGNvYXJzZSBhbmQgZmluZSBnYWluIHZhbHVlcy4gIFRoZSByZXN1bHQgaXMgYSBudW1iZXIKIAkJICogdGhhdCBjYW4gYmUgcHV0IGludG8gdGhlIGxvb2t1cCB0YWJsZSB0byBvYnRhaW4gdGhlCiAJCSAqIGFwcHJveGltYXRlIGNhYmxlIGxlbmd0aC4KIAkJICovCkBAIC0xNDU2LDcgKzE0MjgsNyBAQAogCXUxNiBwaHlfZGF0YTsKIAlib29sIGxpbms7CiAKLQlpZiAoaHctPnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CisJaWYgKHBoeS0+bWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogCQlod19kYmcoIlBoeSBpbmZvIGlzIG9ubHkgdmFsaWQgZm9yIGNvcHBlciBtZWRpYVxuIik7CiAJCXJldF92YWwgPSAtRTEwMDBfRVJSX0NPTkZJRzsKIAkJZ290byBvdXQ7CkBAIC0xNDcyLDMzICsxNDQ0LDI5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeS0+cG9sYXJpdHlfY29ycmVjdGlvbiA9IChwaHlfZGF0YSAmIE04OEUxMDAwX1BTQ1JfUE9MQVJJVFlfUkVWRVJTQUwpCi0JCQkJICAgPyB0cnVlCi0JCQkJICAgOiBmYWxzZTsKKwkJCQkgICA/IHRydWUgOiBmYWxzZTsKIAogCXJldF92YWwgPSBpZ2JfY2hlY2tfcG9sYXJpdHlfbTg4KGh3KTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsCi0JCQkJCSAgICZwaHlfZGF0YSk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZwaHlfZGF0YSk7CiAJaWYgKHJldF92YWwpCiAJCWdvdG8gb3V0OwogCiAJcGh5LT5pc19tZGl4ID0gKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9NRElYKSA/IHRydWUgOiBmYWxzZTsKIAogCWlmICgocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX1NQRUVEKSA9PSBNODhFMTAwMF9QU1NSXzEwMDBNQlMpIHsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmdldF9jYWJsZV9sZW5ndGgoaHcpOworCQlyZXRfdmFsID0gcGh5LT5vcHMuZ2V0X2NhYmxlX2xlbmd0aChodyk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywKLQkJCQkJCSAgICZwaHlfZGF0YSk7CisJCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywgJnBoeV9kYXRhKTsKIAkJaWYgKHJldF92YWwpCiAJCQlnb3RvIG91dDsKIApAQCAtMTU1Miw4ICsxNTIwLDcgQEAKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX1NUQVRVUywKLQkJCQkJICAgJmRhdGEpOworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9TVEFUVVMsICZkYXRhKTsKIAlpZiAocmV0X3ZhbCkKIAkJZ290byBvdXQ7CiAKQEAgLTE1NjEsMTIgKzE1MjgsMTEgQEAKIAogCWlmICgoZGF0YSAmIElHUDAxRTEwMDBfUFNTUl9TUEVFRF9NQVNLKSA9PQogCSAgICBJR1AwMUUxMDAwX1BTU1JfU1BFRURfMTAwME1CUFMpIHsKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmdldF9jYWJsZV9sZW5ndGgoaHcpOworCQlyZXRfdmFsID0gcGh5LT5vcHMuZ2V0X2NhYmxlX2xlbmd0aChodyk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAKLQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywKLQkJCQkJCSAgICZkYXRhKTsKKwkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLCAmZGF0YSk7CiAJCWlmIChyZXRfdmFsKQogCQkJZ290byBvdXQ7CiAKQEAgLTE1OTksMTIgKzE1NjUsMTIgQEAKIAlzMzIgcmV0X3ZhbDsKIAl1MTYgcGh5X2N0cmw7CiAKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgJnBoeV9jdHJsKTsKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2N0cmwpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIAogCXBoeV9jdHJsIHw9IE1JSV9DUl9SRVNFVDsKLQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsIHBoeV9jdHJsKTsKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X2N0cmwpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMTYzNSw3ICsxNjAxLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmV0X3ZhbCA9IGlnYl9hY3F1aXJlX3BoeShodyk7CisJcmV0X3ZhbCA9IHBoeS0+b3BzLmFjcXVpcmUoaHcpOwogCWlmIChyZXRfdmFsKQogCQlnb3RvIG91dDsKIApAQCAtMTY1MCw3NCArMTYxNiwxNCBAQAogCiAJdWRlbGF5KDE1MCk7CiAKLQlpZ2JfcmVsZWFzZV9waHkoaHcpOworCXBoeS0+b3BzLnJlbGVhc2UoaHcpOwogCi0JcmV0X3ZhbCA9IGlnYl9nZXRfcGh5X2NmZ19kb25lKGh3KTsKKwlyZXRfdmFsID0gcGh5LT5vcHMuZ2V0X2NmZ19kb25lKGh3KTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwogfQogCi0vKiBJbnRlcm5hbCBmdW5jdGlvbiBwb2ludGVycyAqLwotCi0vKioKLSAqICBpZ2JfZ2V0X3BoeV9jZmdfZG9uZSAtIEdlbmVyaWMgUEhZIGNvbmZpZ3VyYXRpb24gZG9uZQotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIFJldHVybiBzdWNjZXNzIGlmIHNpbGljb24gZmFtaWx5IGRpZCBub3QgaW1wbGVtZW50IGEgZmFtaWx5IHNwZWNpZmljCi0gKiAgZ2V0X2NmZ19kb25lIGZ1bmN0aW9uLgotICoqLwotc3RhdGljIHMzMiBpZ2JfZ2V0X3BoeV9jZmdfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQotewotCWlmIChody0+cGh5Lm9wcy5nZXRfY2ZnX2RvbmUpCi0JCXJldHVybiBody0+cGh5Lm9wcy5nZXRfY2ZnX2RvbmUoaHcpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogIGlnYl9yZWxlYXNlX3BoeSAtIEdlbmVyaWMgcmVsZWFzZSBQSFkKLSAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQotICoKLSAqICBSZXR1cm4gaWYgc2lsaWNvbiBmYW1pbHkgZG9lcyBub3QgcmVxdWlyZSBhIHNlbWFwaG9yZSB3aGVuIGFjY2Vzc2luZyB0aGUKLSAqICBQSFkuCi0gKiovCi1zdGF0aWMgdm9pZCBpZ2JfcmVsZWFzZV9waHkoc3RydWN0IGUxMDAwX2h3ICpodykKLXsKLQlpZiAoaHctPnBoeS5vcHMucmVsZWFzZV9waHkpCi0JCWh3LT5waHkub3BzLnJlbGVhc2VfcGh5KGh3KTsKLX0KLQotLyoqCi0gKiAgaWdiX2FjcXVpcmVfcGh5IC0gR2VuZXJpYyBhY3F1aXJlIFBIWQotICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCi0gKgotICogIFJldHVybiBzdWNjZXNzIGlmIHNpbGljb24gZmFtaWx5IGRvZXMgbm90IHJlcXVpcmUgYSBzZW1hcGhvcmUgd2hlbgotICogIGFjY2Vzc2luZyB0aGUgUEhZLgotICoqLwotc3RhdGljIHMzMiBpZ2JfYWNxdWlyZV9waHkoc3RydWN0IGUxMDAwX2h3ICpodykKLXsKLQlpZiAoaHctPnBoeS5vcHMuYWNxdWlyZV9waHkpCi0JCXJldHVybiBody0+cGh5Lm9wcy5hY3F1aXJlX3BoeShodyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiAgaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXggLSBHZW5lcmljIGZvcmNlIFBIWSBzcGVlZC9kdXBsZXgKLSAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQotICoKLSAqICBXaGVuIHRoZSBzaWxpY29uIGZhbWlseSBoYXMgbm90IGltcGxlbWVudGVkIGEgZm9yY2VkIHNwZWVkL2R1cGxleAotICogIGZ1bmN0aW9uIGZvciB0aGUgUEhZLCBzaW1wbHkgcmV0dXJuIDAuCi0gKiovCi1zMzIgaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXgoc3RydWN0IGUxMDAwX2h3ICpodykKLXsKLQlpZiAoaHctPnBoeS5vcHMuZm9yY2Vfc3BlZWRfZHVwbGV4KQotCQlyZXR1cm4gaHctPnBoeS5vcHMuZm9yY2Vfc3BlZWRfZHVwbGV4KGh3KTsKLQotCXJldHVybiAwOwotfQotCiAvKioKICAqICBpZ2JfcGh5X2luaXRfc2NyaXB0X2lncDMgLSBJbml0cyB0aGUgSUdQMyBQSFkKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQpAQCAtMTczMCw3NSArMTYzNiw3NSBAQAogCiAJLyogUEhZIGluaXQgSUdQIDMgKi8KIAkvKiBFbmFibGUgcmlzZS9mYWxsLCAxMC1tb2RlIHdvcmsgaW4gY2xhc3MtQSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MkY1QiwgMHg5MDE4KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MkY1QiwgMHg5MDE4KTsKIAkvKiBSZW1vdmUgYWxsIGNhcHMgZnJvbSBSZXBsaWNhIHBhdGggZmlsdGVyICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyRjUyLCAweDAwMDApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyRjUyLCAweDAwMDApOwogCS8qIEJpYXMgdHJpbW1pbmcgZm9yIEFEQywgQUZFIGFuZCBEcml2ZXIgKERlZmF1bHQpICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyRkIxLCAweDhCMjQpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyRkIxLCAweDhCMjQpOwogCS8qIEluY3JlYXNlIEh5YnJpZCBwb2x5IGJpYXMgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDJGQjIsIDB4RjhGMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDJGQjIsIDB4RjhGMCk7CiAJLyogQWRkIDQlIHRvIFRYIGFtcGxpdHVkZSBpbiBHaWdhIG1vZGUgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDIwMTAsIDB4MTBCMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDIwMTAsIDB4MTBCMCk7CiAJLyogRGlzYWJsZSB0cmltbWluZyAoVFRUKSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MjAxMSwgMHgwMDAwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MjAxMSwgMHgwMDAwKTsKIAkvKiBQb2x5IERDIGNvcnJlY3Rpb24gdG8gOTQuNiUgKyAyJSBmb3IgYWxsIGNoYW5uZWxzICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyMERELCAweDI0OUEpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyMERELCAweDI0OUEpOwogCS8qIEFCUyBEQyBjb3JyZWN0aW9uIHRvIDk1LjklICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyMERFLCAweDAwRDMpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgyMERFLCAweDAwRDMpOwogCS8qIEJHIHRlbXAgY3VydmUgdHJpbSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MjhCNCwgMHgwNENFKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MjhCNCwgMHgwNENFKTsKIAkvKiBJbmNyZWFzaW5nIEFEQyBPUEFNUCBzdGFnZSAxIGN1cnJlbnRzIHRvIG1heCAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MkY3MCwgMHgyOUU0KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MkY3MCwgMHgyOUU0KTsKIAkvKiBGb3JjZSAxMDAwICggcmVxdWlyZWQgZm9yIGVuYWJsaW5nIFBIWSByZWdzIGNvbmZpZ3VyYXRpb24pICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDAwLCAweDAxNDApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgwMDAwLCAweDAxNDApOwogCS8qIFNldCB1cGRfZnJlcSB0byA2ICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjMwLCAweDE2MDYpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjMwLCAweDE2MDYpOwogCS8qIERpc2FibGUgTlBERkUgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGMzEsIDB4QjgxNCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGMzEsIDB4QjgxNCk7CiAJLyogRGlzYWJsZSBhZGFwdGl2ZSBmaXhlZCBGRkUgKERlZmF1bHQpICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjM1LCAweDAwMkEpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjM1LCAweDAwMkEpOwogCS8qIEVuYWJsZSBGRkUgaHlzdGVyZXNpcyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUYzRSwgMHgwMDY3KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUYzRSwgMHgwMDY3KTsKIAkvKiBGaXhlZCBGRkUgZm9yIHNob3J0IGNhYmxlIGxlbmd0aHMgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNTQsIDB4MDA2NSk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNTQsIDB4MDA2NSk7CiAJLyogRml4ZWQgRkZFIGZvciBtZWRpdW0gY2FibGUgbGVuZ3RocyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY1NSwgMHgwMDJBKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY1NSwgMHgwMDJBKTsKIAkvKiBGaXhlZCBGRkUgZm9yIGxvbmcgY2FibGUgbGVuZ3RocyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY1NiwgMHgwMDJBKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MUY1NiwgMHgwMDJBKTsKIAkvKiBFbmFibGUgQWRhcHRpdmUgQ2xpcCBUaHJlc2hvbGQgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNzIsIDB4M0ZCMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNzIsIDB4M0ZCMCk7CiAJLyogQUhUIHJlc2V0IGxpbWl0IHRvIDEgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNzYsIDB4QzBGRik7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNzYsIDB4QzBGRik7CiAJLyogU2V0IEFIVCBtYXN0ZXIgZGVsYXkgdG8gMTI3IG1zZWMgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNzcsIDB4MURFQyk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNzcsIDB4MURFQyk7CiAJLyogU2V0IHNjYW4gYml0cyBmb3IgQUhUICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjc4LCAweEY5RUYpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxRjc4LCAweEY5RUYpOwogCS8qIFNldCBBSFQgUHJlc2V0IGJpdHMgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDFGNzksIDB4MDIxMCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDFGNzksIDB4MDIxMCk7CiAJLyogQ2hhbmdlIGludGVnX2ZhY3RvciBvZiBjaGFubmVsIEEgdG8gMyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MTg5NSwgMHgwMDAzKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MTg5NSwgMHgwMDAzKTsKIAkvKiBDaGFuZ2UgcHJvcF9mYWN0b3Igb2YgY2hhbm5lbHMgQkNEIHRvIDggKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDE3OTYsIDB4MDAwOCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDE3OTYsIDB4MDAwOCk7CiAJLyogQ2hhbmdlIGNnX2ljb3VudCArIGVuYWJsZSBpbnRlZ2JwIGZvciBjaGFubmVscyBCQ0QgKi8KLQlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDE3OTgsIDB4RDAwOCk7CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCAweDE3OTgsIDB4RDAwOCk7CiAJLyoKIAkgKiBDaGFuZ2UgY2dfaWNvdW50ICsgZW5hYmxlIGludGVnYnAgKyBjaGFuZ2UgcHJvcF9mYWN0b3JfbWFzdGVyCiAJICogdG8gOCBmb3IgY2hhbm5lbCBBCiAJICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxODk4LCAweEQ5MTgpOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxODk4LCAweEQ5MTgpOwogCS8qIERpc2FibGUgQUhUIGluIFNsYXZlIG1vZGUgb24gY2hhbm5lbCBBICovCi0JaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxODdBLCAweDA4MDApOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgMHgxODdBLCAweDA4MDApOwogCS8qCiAJICogRW5hYmxlIExQTFUgYW5kIGRpc2FibGUgQU4gdG8gMTAwMCBpbiBub24tRDBhIHN0YXRlcywKIAkgKiBFbmFibGUgU1BEK0IyQgogCSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MDAxOSwgMHgwMDhEKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MDAxOSwgMHgwMDhEKTsKIAkvKiBFbmFibGUgcmVzdGFydCBBTiBvbiBhbjEwMDBfZGlzIGNoYW5nZSAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MDAxQiwgMHgyMDgwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MDAxQiwgMHgyMDgwKTsKIAkvKiBFbmFibGUgd2hfZmlmbyByZWFkIGNsb2NrIGluIDEwLzEwMCBtb2RlcyAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MDAxNCwgMHgwMDQ1KTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MDAxNCwgMHgwMDQ1KTsKIAkvKiBSZXN0YXJ0IEFOLCBTcGVlZCBzZWxlY3Rpb24gaXMgMTAwMCAqLwotCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MDAwMCwgMHgxMzQwKTsKKwlody0+cGh5Lm9wcy53cml0ZV9yZWcoaHcsIDB4MDAwMCwgMHgxMzQwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5oCmluZGV4IDhmOGZlMGEuLjMyMjhhODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuaAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC00NCw3ICs0NCw2IEBACiBzMzIgIGlnYl9jaGVja19kb3duc2hpZnQoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBzMzIgIGlnYl9jaGVja19yZXNldF9ibG9jayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHMzMiAgaWdiX2NvcHBlcl9saW5rX2F1dG9uZWcoc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1zMzIgIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfY29wcGVyX2xpbmtfc2V0dXBfaWdwKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfY29wcGVyX2xpbmtfc2V0dXBfbTg4KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleF9pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaAppbmRleCBiZGY1ZDgzLi4wYmQ3NzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMjAwNy0yMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC03Myw4ICs3Myw3NSBAQAogI2RlZmluZSBFMTAwMF9UQ1BUSU1FUiAweDAxMDRDICAvKiBUQ1AgVGltZXIgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9GQ1JUTCAgICAweDAyMTYwICAvKiBGbG93IENvbnRyb2wgUmVjZWl2ZSBUaHJlc2hvbGQgTG93IC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfRkNSVEggICAgMHgwMjE2OCAgLyogRmxvdyBDb250cm9sIFJlY2VpdmUgVGhyZXNob2xkIEhpZ2ggLSBSVyAqLwotI2RlZmluZSBFMTAwMF9SREZQQ1EoX24pICAoMHgwMjQzMCArICgweDQgKiAoX24pKSkKICNkZWZpbmUgRTEwMDBfRkNSVFYgICAgMHgwMjQ2MCAgLyogRmxvdyBDb250cm9sIFJlZnJlc2ggVGltZXIgVmFsdWUgLSBSVyAqLworCisvKiBJRUVFIDE1ODggVElNRVNZTkNIICovCisjZGVmaW5lIEUxMDAwX1RTWU5DVFhDVEwgMHgwQjYxNAorI2RlZmluZSBFMTAwMF9UU1lOQ1RYQ1RMX1ZBTElEICgxPDwwKQorI2RlZmluZSBFMTAwMF9UU1lOQ1RYQ1RMX0VOQUJMRUQgKDE8PDQpCisjZGVmaW5lIEUxMDAwX1RTWU5DUlhDVEwgMHgwQjYyMAorI2RlZmluZSBFMTAwMF9UU1lOQ1JYQ1RMX1ZBTElEICgxPDwwKQorI2RlZmluZSBFMTAwMF9UU1lOQ1JYQ1RMX0VOQUJMRUQgKDE8PDQpCitlbnVtIHsKKwlFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfTDJfVjIgPSAwLAorCUUxMDAwX1RTWU5DUlhDVExfVFlQRV9MNF9WMSA9ICgxPDwxKSwKKwlFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfTDJfTDRfVjIgPSAoMTw8MiksCisJRTEwMDBfVFNZTkNSWENUTF9UWVBFX0FMTCA9ICgxPDwzKSwKKwlFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfRVZFTlRfVjIgPSAoMTw8MykgfCAoMTw8MSksCit9OworI2RlZmluZSBFMTAwMF9UU1lOQ1JYQ0ZHIDB4MDVGNTAKK2VudW0geworCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YxX1NZTkNfTUVTU0FHRSA9IDA8PDAsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjFfREVMQVlfUkVRX01FU1NBR0UgPSAxPDwwLAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YxX0ZPTExPV1VQX01FU1NBR0UgPSAyPDwwLAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YxX0RFTEFZX1JFU1BfTUVTU0FHRSA9IDM8PDAsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjFfTUFOQUdFTUVOVF9NRVNTQUdFID0gNDw8MCwKKworCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX1NZTkNfTUVTU0FHRSA9IDA8PDgsCisJRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfREVMQVlfUkVRX01FU1NBR0UgPSAxPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX1BBVEhfREVMQVlfUkVRX01FU1NBR0UgPSAyPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX1BBVEhfREVMQVlfUkVTUF9NRVNTQUdFID0gMzw8OCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9GT0xMT1dVUF9NRVNTQUdFID0gODw8OCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9ERUxBWV9SRVNQX01FU1NBR0UgPSA5PDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX1BBVEhfREVMQVlfRk9MTE9XVVBfTUVTU0FHRSA9IDB4QTw8OCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9BTk5PVU5DRV9NRVNTQUdFID0gMHhCPDw4LAorCUUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX1NJR05BTExJTkdfTUVTU0FHRSA9IDB4Qzw8OCwKKwlFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMl9NQU5BR0VNRU5UX01FU1NBR0UgPSAweEQ8PDgsCit9OworI2RlZmluZSBFMTAwMF9TWVNUSU1MIDB4MEI2MDAKKyNkZWZpbmUgRTEwMDBfU1lTVElNSCAweDBCNjA0CisjZGVmaW5lIEUxMDAwX1RJTUlOQ0EgMHgwQjYwOAorCisjZGVmaW5lIEUxMDAwX1JYTVRSTCAgICAgMHgwQjYzNAorI2RlZmluZSBFMTAwMF9SWFNUTVBMIDB4MEI2MjQKKyNkZWZpbmUgRTEwMDBfUlhTVE1QSCAweDBCNjI4CisjZGVmaW5lIEUxMDAwX1JYU0FUUkwgMHgwQjYyQworI2RlZmluZSBFMTAwMF9SWFNBVFJIIDB4MEI2MzAKKworI2RlZmluZSBFMTAwMF9UWFNUTVBMIDB4MEI2MTgKKyNkZWZpbmUgRTEwMDBfVFhTVE1QSCAweDBCNjFDCisKKyNkZWZpbmUgRTEwMDBfRVRRRjAgICAweDA1Q0IwCisjZGVmaW5lIEUxMDAwX0VUUUYxICAgMHgwNUNCNAorI2RlZmluZSBFMTAwMF9FVFFGMiAgIDB4MDVDQjgKKyNkZWZpbmUgRTEwMDBfRVRRRjMgICAweDA1Q0JDCisjZGVmaW5lIEUxMDAwX0VUUUY0ICAgMHgwNUNDMAorI2RlZmluZSBFMTAwMF9FVFFGNSAgIDB4MDVDQzQKKyNkZWZpbmUgRTEwMDBfRVRRRjYgICAweDA1Q0M4CisjZGVmaW5lIEUxMDAwX0VUUUY3ICAgMHgwNUNDQworCisvKiBGaWx0ZXJpbmcgUmVnaXN0ZXJzICovCisjZGVmaW5lIEUxMDAwX1NBUUYoX24pICgweDU5ODAgKyA0ICogKF9uKSkKKyNkZWZpbmUgRTEwMDBfREFRRihfbikgKDB4NTlBMCArIDQgKiAoX24pKQorI2RlZmluZSBFMTAwMF9TUFFGKF9uKSAoMHg1OUMwICsgNCAqIChfbikpCisjZGVmaW5lIEUxMDAwX0ZUUUYoX24pICgweDU5RTAgKyA0ICogKF9uKSkKKyNkZWZpbmUgRTEwMDBfU0FRRjAgRTEwMDBfU0FRRigwKQorI2RlZmluZSBFMTAwMF9EQVFGMCBFMTAwMF9EQVFGKDApCisjZGVmaW5lIEUxMDAwX1NQUUYwIEUxMDAwX1NQUUYoMCkKKyNkZWZpbmUgRTEwMDBfRlRRRjAgRTEwMDBfRlRRRigwKQorI2RlZmluZSBFMTAwMF9TWU5RRihfbikgKDB4MDU1RkMgKyAoNCAqIChfbikpKSAvKiBTWU4gUGFja2V0IFF1ZXVlIEZsdHIgKi8KKyNkZWZpbmUgRTEwMDBfRVRRRihfbikgICgweDA1Q0IwICsgKDQgKiAoX24pKSkgLyogRVR5cGUgUXVldWUgRmx0ciAqLworCiAvKiBTcGxpdCBhbmQgUmVwbGljYXRpb24gUlggQ29udHJvbCAtIFJXICovCiAvKgogICogQ29udmVuaWVuY2UgbWFjcm9zCkBAIC0xMTAsNyArMTc3LDYgQEAKIAkJCQkgICAgOiAoMHgwRTAxOCArICgoX24pICogMHg0MCkpKQogI2RlZmluZSBFMTAwMF9UWERDVEwoX24pICAoKF9uKSA8IDQgPyAoMHgwMzgyOCArICgoX24pICogMHgxMDApKSBcCiAJCQkJICAgIDogKDB4MEUwMjggKyAoKF9uKSAqIDB4NDApKSkKLSNkZWZpbmUgRTEwMDBfVEFSQyhfbikgICAgKDB4MDM4NDAgKyAoX24gPDwgOCkpCiAjZGVmaW5lIEUxMDAwX0RDQV9UWENUUkwoX24pICgweDAzODE0ICsgKF9uIDw8IDgpKQogI2RlZmluZSBFMTAwMF9EQ0FfUlhDVFJMKF9uKSAoMHgwMjgxNCArIChfbiA8PCA4KSkKICNkZWZpbmUgRTEwMDBfVERXQkFMKF9uKSAgKChfbikgPCA0ID8gKDB4MDM4MzggKyAoKF9uKSAqIDB4MTAwKSkgXApAQCAtMjI2LDE2ICsyOTIsMTQgQEAKICNkZWZpbmUgRTEwMDBfUkFIKF9pKSAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDA0ICsgKChfaSkgKiA4KSkgOiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwNTRFNCArICgoX2kgLSAxNikgKiA4KSkpCiAjZGVmaW5lIEUxMDAwX1ZGVEEgICAgIDB4MDU2MDAgIC8qIFZMQU4gRmlsdGVyIFRhYmxlIEFycmF5IC0gUlcgQXJyYXkgKi8KLSNkZWZpbmUgRTEwMDBfVk1EX0NUTCAgMHgwNTgxQyAgLyogVk1EcSBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfVlRfQ1RMICAgMHgwNTgxQyAgLyogVk1EcSBDb250cm9sIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfV1VDICAgICAgMHgwNTgwMCAgLyogV2FrZXVwIENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9XVUZDICAgICAweDA1ODA4ICAvKiBXYWtldXAgRmlsdGVyIENvbnRyb2wgLSBSVyAqLwogI2RlZmluZSBFMTAwMF9XVVMgICAgICAweDA1ODEwICAvKiBXYWtldXAgU3RhdHVzIC0gUk8gKi8KICNkZWZpbmUgRTEwMDBfTUFOQyAgICAgMHgwNTgyMCAgLyogTWFuYWdlbWVudCBDb250cm9sIC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfSVBBViAgICAgMHgwNTgzOCAgLyogSVAgQWRkcmVzcyBWYWxpZCAtIFJXICovCiAjZGVmaW5lIEUxMDAwX1dVUEwgICAgIDB4MDU5MDAgIC8qIFdha2V1cCBQYWNrZXQgTGVuZ3RoIC0gUlcgKi8KLSNkZWZpbmUgRTEwMDBfSE9TVF9JRiAgMHgwODgwMCAgLyogSG9zdCBJbnRlcmZhY2UgKi8KIAotI2RlZmluZSBFMTAwMF9NQU5DMkggICAgICAweDA1ODYwIC8qIE1hbmFnZW1lbnQgQ29udHJvbCBUbyBIb3N0IC0gUlcgKi8KICNkZWZpbmUgRTEwMDBfU1dfRldfU1lOQyAgMHgwNUI1QyAvKiBTb2Z0d2FyZS1GaXJtd2FyZSBTeW5jaHJvbml6YXRpb24gLSBSVyAqLwogI2RlZmluZSBFMTAwMF9DQ01DVEwgICAgICAweDA1QjQ4IC8qIENDTSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIEUxMDAwX0dJT0NUTCAgICAgIDB4MDVCNDQgLyogR0lPIEFuYWxvZyBDb250cm9sIFJlZ2lzdGVyICovCkBAIC0yNDMsOSArMzA3LDcgQEAKICNkZWZpbmUgRTEwMDBfRkFDVFBTICAgIDB4MDVCMzAgLyogRnVuY3Rpb24gQWN0aXZlIGFuZCBQb3dlciBTdGF0ZSB0byBNTkcgKi8KICNkZWZpbmUgRTEwMDBfU1dTTSAgICAgIDB4MDVCNTAgLyogU1cgU2VtYXBob3JlICovCiAjZGVmaW5lIEUxMDAwX0ZXU00gICAgICAweDA1QjU0IC8qIEZXIFNlbWFwaG9yZSAqLwotI2RlZmluZSBFMTAwMF9EQ0FfSUQgICAgMHgwNUI3MCAvKiBEQ0EgUmVxdWVzdGVyIElEIEluZm9ybWF0aW9uIC0gUk8gKi8KICNkZWZpbmUgRTEwMDBfRENBX0NUUkwgIDB4MDVCNzQgLyogRENBIENvbnRyb2wgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9ISUNSICAgICAgMHgwOEYwMCAvKiBIb3N0IEludGVmYWNlIENvbnRyb2wgKi8KIAogLyogUlNTIHJlZ2lzdGVycyAqLwogI2RlZmluZSBFMTAwMF9NUlFDICAgICAgMHgwNTgxOCAvKiBNdWx0aXBsZSBSZWNlaXZlIENvbnRyb2wgLSBSVyAqLwpAQCAtMjU0LDE4ICszMTYsMjcgQEAKICNkZWZpbmUgRTEwMDBfSU1JUlZQICAgIDB4MDVBQzAgLyogSW1tZWRpYXRlIEludGVycnVwdCBSWCBWTEFOIFByaW9yaXR5IC0gUlcgKi8KIC8qIE1TSS1YIEFsbG9jYXRpb24gUmVnaXN0ZXIgKF9pKSAtIFJXICovCiAjZGVmaW5lIEUxMDAwX01TSVhCTShfaSkgICAgKDB4MDE2MDAgKyAoKF9pKSAqIDQpKQotLyogTVNJLVggVGFibGUgZW50cnkgYWRkciBsb3cgcmVnIDAgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9NU0lYVEFERChfaSkgICgweDBDMDAwICsgKChfaSkgKiAweDEwKSkKLS8qIE1TSS1YIFRhYmxlIGVudHJ5IGFkZHIgdXBwZXIgcmVnIDAgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9NU0lYVFVBREQoX2kpICgweDBDMDA0ICsgKChfaSkgKiAweDEwKSkKLS8qIE1TSS1YIFRhYmxlIGVudHJ5IG1lc3NhZ2UgcmVnIDAgLSBSVyAqLwotI2RlZmluZSBFMTAwMF9NU0lYVE1TRyhfaSkgICgweDBDMDA4ICsgKChfaSkgKiAweDEwKSkKLS8qIE1TSS1YIFRhYmxlIGVudHJ5IHZlY3RvciBjdHJsIHJlZyAwIC0gUlcgKi8KLSNkZWZpbmUgRTEwMDBfTVNJWFZDVFJMKF9pKSAoMHgwQzAwQyArICgoX2kpICogMHgxMCkpCiAvKiBSZWRpcmVjdGlvbiBUYWJsZSAtIFJXIEFycmF5ICovCiAjZGVmaW5lIEUxMDAwX1JFVEEoX2kpICAoMHgwNUMwMCArICgoX2kpICogNCkpCiAjZGVmaW5lIEUxMDAwX1JTU1JLKF9pKSAoMHgwNUM4MCArICgoX2kpICogNCkpIC8qIFJTUyBSYW5kb20gS2V5IC0gUlcgQXJyYXkgKi8KIAorLyogVlQgUmVnaXN0ZXJzICovCisjZGVmaW5lIEUxMDAwX01CVkZJQ1IgICAweDAwQzgwIC8qIE1haWxib3ggVkYgQ2F1c2UgLSBSV0MgKi8KKyNkZWZpbmUgRTEwMDBfTUJWRklNUiAgIDB4MDBDODQgLyogTWFpbGJveCBWRiBpbnQgTWFzayAtIFJXICovCisjZGVmaW5lIEUxMDAwX1ZGTFJFICAgICAweDAwQzg4IC8qIFZGIFJlZ2lzdGVyIEV2ZW50cyAtIFJXQyAqLworI2RlZmluZSBFMTAwMF9WRlJFICAgICAgMHgwMEM4QyAvKiBWRiBSZWNlaXZlIEVuYWJsZXMgKi8KKyNkZWZpbmUgRTEwMDBfVkZURSAgICAgIDB4MDBDOTAgLyogVkYgVHJhbnNtaXQgRW5hYmxlcyAqLworI2RlZmluZSBFMTAwMF9RREUgICAgICAgMHgwMjQwOCAvKiBRdWV1ZSBEcm9wIEVuYWJsZSAtIFJXICovCisjZGVmaW5lIEUxMDAwX0RUWFNXQyAgICAweDAzNTAwIC8qIERNQSBUeCBTd2l0Y2ggQ29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1JQTE9MUiAgICAweDA1QUYwIC8qIFJlcGxpY2F0aW9uIE9mZmxvYWQgLSBSVyAqLworI2RlZmluZSBFMTAwMF9JT1ZUQ0wgICAgMHgwNUJCQyAvKiBJT1YgQ29udHJvbCBSZWdpc3RlciAqLworLyogVGhlc2UgYWN0IHBlciBWRiBzbyBhbiBhcnJheSBmcmllbmRseSBtYWNybyBpcyB1c2VkICovCisjZGVmaW5lIEUxMDAwX1AyVk1BSUxCT1goX24pICAgKDB4MDBDMDAgKyAoNCAqIChfbikpKQorI2RlZmluZSBFMTAwMF9WTUJNRU0oX24pICAgICAgICgweDAwODAwICsgKDY0ICogKF9uKSkpCisjZGVmaW5lIEUxMDAwX1ZNT0xSKF9uKSAgICAgICAgKDB4MDVBRDAgKyAoNCAqIChfbikpKQorI2RlZmluZSBFMTAwMF9WTFZGKF9uKSAgICAgICAgICgweDA1RDAwICsgKDQgKiAoX24pKSkgLyogVkxBTiBWaXJ0dWFsIE1hY2hpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEZpbHRlciAtIFJXICovCisKICNkZWZpbmUgd3IzMihyZWcsIHZhbHVlKSAod3JpdGVsKHZhbHVlLCBody0+aHdfYWRkciArIHJlZykpCiAjZGVmaW5lIHJkMzIocmVnKSAocmVhZGwoaHctPmh3X2FkZHIgKyByZWcpKQogI2RlZmluZSB3cmZsKCkgKCh2b2lkKXJkMzIoRTEwMDBfU1RBVFVTKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaCBiL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaAppbmRleCBhZWJlZjhlLi40ZTg0NjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzQsMjUgKzM0LDE1IEBACiAjaW5jbHVkZSAiZTEwMDBfbWFjLmgiCiAjaW5jbHVkZSAiZTEwMDBfODI1NzUuaCIKIAorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZWNvbXBhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+CisKIHN0cnVjdCBpZ2JfYWRhcHRlcjsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0jaW5jbHVkZSA8bGludXgvaW5ldF9scm8uaD4KLSNkZWZpbmUgTUFYX0xST19BR0dSICAgICAgICAgICAgICAgICAgICAgIDMyCi0jZGVmaW5lIE1BWF9MUk9fREVTQ1JJUFRPUlMgICAgICAgICAgICAgICAgOAotI2VuZGlmCi0KLS8qIEludGVycnVwdCBkZWZpbmVzICovCi0jZGVmaW5lIElHQl9NSU5fRFlOX0lUUiAzMDAwCi0jZGVmaW5lIElHQl9NQVhfRFlOX0lUUiA5NjAwMAotCiAvKiAoKDEwMDAwMDAwMDBucyAvICg2MDAwaW50cy9zICogMTAyNG5zKSkgPDwgMiA9IDY0OCAqLwogI2RlZmluZSBJR0JfU1RBUlRfSVRSIDY0OAogCi0jZGVmaW5lIElHQl9EWU5fSVRSX1BBQ0tFVF9USFJFU0hPTEQgMgotI2RlZmluZSBJR0JfRFlOX0lUUl9MRU5HVEhfTE9XIDIwMAotI2RlZmluZSBJR0JfRFlOX0lUUl9MRU5HVEhfSElHSCAxMDAwCi0KIC8qIFRYL1JYIGRlc2NyaXB0b3IgZGVmaW5lcyAqLwogI2RlZmluZSBJR0JfREVGQVVMVF9UWEQgICAgICAgICAgICAgICAgICAyNTYKICNkZWZpbmUgSUdCX01JTl9UWEQgICAgICAgICAgICAgICAgICAgICAgIDgwCkBAIC02Nyw4ICs1NywyMSBAQAogI2RlZmluZSBJR0JfTUlOX0lUUl9VU0VDUyAgICAgICAgICAgICAgICAgMTAKIAogLyogVHJhbnNtaXQgYW5kIHJlY2VpdmUgcXVldWVzICovCi0jZGVmaW5lIElHQl9NQVhfUlhfUVVFVUVTICAgICAgICAgICAgICAgICAgNAotI2RlZmluZSBJR0JfTUFYX1RYX1FVRVVFUyAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgSUdCX01BWF9SWF9RVUVVRVMgICAgIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ID8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ID4gNiA/IDEgOiAyKSA6IDQpCisjZGVmaW5lIElHQl9NQVhfVFhfUVVFVUVTICAgICBJR0JfTUFYX1JYX1FVRVVFUworI2RlZmluZSBJR0JfQUJTX01BWF9UWF9RVUVVRVMgICAgIDQKKworI2RlZmluZSBJR0JfTUFYX1ZGX01DX0VOVFJJRVMgICAgICAgICAgICAgIDMwCisjZGVmaW5lIElHQl9NQVhfVkZfRlVOQ1RJT05TICAgICAgICAgICAgICAgOAorI2RlZmluZSBJR0JfTUFYX1ZGVEFfRU5UUklFUyAgICAgICAgICAgICAgIDEyOAorCitzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlIHsKKwl1bnNpZ25lZCBjaGFyIHZmX21hY19hZGRyZXNzZXNbRVRIX0FMRU5dOworCXUxNiB2Zl9tY19oYXNoZXNbSUdCX01BWF9WRl9NQ19FTlRSSUVTXTsKKwl1MTYgbnVtX3ZmX21jX2hhc2hlczsKKwlib29sIGNsZWFyX3RvX3NlbmQ7Cit9OwogCiAvKiBSWCBkZXNjcmlwdG9yIGNvbnRyb2wgdGhyZXNob2xkcy4KICAqIFBUSFJFU0ggLSBNQUMgd2lsbCBjb25zaWRlciBwcmVmZXRjaCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiB0aGlzIG51bWJlciBvZgpAQCAtOTQsMTIgKzk3LDkgQEAKICNkZWZpbmUgSUdCX1JYQlVGRkVSXzUxMiAgIDUxMgogI2RlZmluZSBJR0JfUlhCVUZGRVJfMTAyNCAgMTAyNAogI2RlZmluZSBJR0JfUlhCVUZGRVJfMjA0OCAgMjA0OAotI2RlZmluZSBJR0JfUlhCVUZGRVJfNDA5NiAgNDA5NgotI2RlZmluZSBJR0JfUlhCVUZGRVJfODE5MiAgODE5MgogI2RlZmluZSBJR0JfUlhCVUZGRVJfMTYzODQgMTYzODQKIAotLyogUGFja2V0IEJ1ZmZlciBhbGxvY2F0aW9ucyAqLwotCisjZGVmaW5lIE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSA5MjM0CiAKIC8qIEhvdyBtYW55IFR4IERlc2NyaXB0b3JzIGRvIHdlIG5lZWQgdG8gY2FsbCBuZXRpZl93YWtlX3F1ZXVlID8gKi8KICNkZWZpbmUgSUdCX1RYX1FVRVVFX1dBS0UJMTYKQEAgLTE3NiwyOSArMTc2LDE4IEBACiAJCQlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAkJCWludCBzZXRfaXRyOwogCQkJc3RydWN0IGlnYl9yaW5nICpidWRkeTsKLSNpZmRlZiBDT05GSUdfSUdCX0xSTwotCQkJc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7Ci0JCQlib29sIGxyb191c2VkOwotI2VuZGlmCiAJCX07CiAJfTsKIAogCWNoYXIgbmFtZVtJRk5BTVNJWiArIDVdOwogfTsKIAotI2RlZmluZSBJR0JfREVTQ19VTlVTRUQoUikgXAotCSgoKChSKS0+bmV4dF90b19jbGVhbiA+IChSKS0+bmV4dF90b191c2UpID8gMCA6IChSKS0+Y291bnQpICsgXAotCShSKS0+bmV4dF90b19jbGVhbiAtIChSKS0+bmV4dF90b191c2UgLSAxKQotCiAjZGVmaW5lIEUxMDAwX1JYX0RFU0NfQURWKFIsIGkpCSAgICBcCiAJKCYoKCh1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYyAqKSgoUikuZGVzYykpW2ldKSkKICNkZWZpbmUgRTEwMDBfVFhfREVTQ19BRFYoUiwgaSkJICAgIFwKIAkoJigoKHVuaW9uIGUxMDAwX2Fkdl90eF9kZXNjICopKChSKS5kZXNjKSlbaV0pKQogI2RlZmluZSBFMTAwMF9UWF9DVFhUREVTQ19BRFYoUiwgaSkJICAgIFwKIAkoJigoKHN0cnVjdCBlMTAwMF9hZHZfdHhfY29udGV4dF9kZXNjICopKChSKS5kZXNjKSlbaV0pKQotI2RlZmluZSBFMTAwMF9HRVRfREVTQyhSLCBpLCB0eXBlKQkoJigoKHN0cnVjdCB0eXBlICopKChSKS5kZXNjKSlbaV0pKQotI2RlZmluZSBFMTAwMF9UWF9ERVNDKFIsIGkpCQlFMTAwMF9HRVRfREVTQyhSLCBpLCBlMTAwMF90eF9kZXNjKQotI2RlZmluZSBFMTAwMF9SWF9ERVNDKFIsIGkpCQlFMTAwMF9HRVRfREVTQyhSLCBpLCBlMTAwMF9yeF9kZXNjKQogCiAvKiBib2FyZCBzcGVjaWZpYyBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCiAKQEAgLTI0OCw3ICsyMzcsNiBAQAogCiAJdTY0IGh3X2NzdW1fZXJyOwogCXU2NCBod19jc3VtX2dvb2Q7Ci0JdTY0IHJ4X2hkcl9zcGxpdDsKIAl1MzIgYWxsb2NfcnhfYnVmZl9mYWlsZWQ7CiAJYm9vbCByeF9jc3VtOwogCXUzMiBnb3JjOwpAQCAtMjYyLDYgKzI1MCwxMCBAQAogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKKwlzdHJ1Y3QgY3ljbGVjb3VudGVyIGN5Y2xlczsKKwlzdHJ1Y3QgdGltZWNvdW50ZXIgY2xvY2s7CisJc3RydWN0IHRpbWVjb21wYXJlIGNvbXBhcmU7CisJc3RydWN0IGh3dHN0YW1wX2NvbmZpZyBod3RzdGFtcF9jb25maWc7CiAKIAkvKiBzdHJ1Y3RzIGRlZmluZWQgaW4gZTEwMDBfaHcuaCAqLwogCXN0cnVjdCBlMTAwMF9odyBodzsKQEAgLTI4MywyNyArMjc1LDE3IEBACiAJdW5zaWduZWQgaW50IGZsYWdzOwogCXUzMiBlZXByb21fd29sOwogCi0JLyogZm9yIGlvcG9ydCBmcmVlICovCi0JaW50IGJhcnM7Ci0JaW50IG5lZWRfaW9wb3J0OwotCi0Jc3RydWN0IGlnYl9yaW5nICptdWx0aV90eF90YWJsZVtJR0JfTUFYX1RYX1FVRVVFU107Ci0jaWZkZWYgQ09ORklHX0lHQl9MUk8KLQl1bnNpZ25lZCBpbnQgbHJvX21heF9hZ2dyOwotCXVuc2lnbmVkIGludCBscm9fYWdncmVnYXRlZDsKLQl1bnNpZ25lZCBpbnQgbHJvX2ZsdXNoZWQ7Ci0JdW5zaWduZWQgaW50IGxyb19ub19kZXNjOwotI2VuZGlmCisJc3RydWN0IGlnYl9yaW5nICptdWx0aV90eF90YWJsZVtJR0JfQUJTX01BWF9UWF9RVUVVRVNdOwogCXVuc2lnbmVkIGludCB0eF9yaW5nX2NvdW50OwogCXVuc2lnbmVkIGludCByeF9yaW5nX2NvdW50OworCXVuc2lnbmVkIGludCB2ZnNfYWxsb2NhdGVkX2NvdW50OworCXN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgKnZmX2RhdGE7CiB9OwogCiAjZGVmaW5lIElHQl9GTEFHX0hBU19NU0kgICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIElHQl9GTEFHX01TSV9FTkFCTEUgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElHQl9GTEFHX0RDQV9FTkFCTEVEICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIElHQl9GTEFHX0lOX05FVFBPTEwgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIElHQl9GTEFHX1FVQURfUE9SVF9BICAgICAgICgxIDw8IDQpCi0jZGVmaW5lIElHQl9GTEFHX05FRURfQ1RYX0lEWCAgICAgICgxIDw8IDUpCisjZGVmaW5lIElHQl9GTEFHX0RDQV9FTkFCTEVEICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElHQl9GTEFHX1FVQURfUE9SVF9BICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElHQl9GTEFHX05FRURfQ1RYX0lEWCAgICAgICgxIDw8IDMpCiAKIGVudW0gZTEwMDBfc3RhdGVfdCB7CiAJX19JR0JfVEVTVElORywKQEAgLTMzMywyNCArMzE1LDI0IEBACiAKIHN0YXRpYyBpbmxpbmUgczMyIGlnYl9yZXNldF9waHkoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKLQlpZiAoaHctPnBoeS5vcHMucmVzZXRfcGh5KQotCQlyZXR1cm4gaHctPnBoeS5vcHMucmVzZXRfcGh5KGh3KTsKKwlpZiAoaHctPnBoeS5vcHMucmVzZXQpCisJCXJldHVybiBody0+cGh5Lm9wcy5yZXNldChodyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBzMzIgaWdiX3JlYWRfcGh5X3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgKmRhdGEpCiB7Ci0JaWYgKGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZykKLQkJcmV0dXJuIGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgb2Zmc2V0LCBkYXRhKTsKKwlpZiAoaHctPnBoeS5vcHMucmVhZF9yZWcpCisJCXJldHVybiBody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgb2Zmc2V0LCBkYXRhKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHMzMiBpZ2Jfd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKIHsKLQlpZiAoaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZykKLQkJcmV0dXJuIGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIG9mZnNldCwgZGF0YSk7CisJaWYgKGh3LT5waHkub3BzLndyaXRlX3JlZykKKwkJcmV0dXJuIGh3LT5waHkub3BzLndyaXRlX3JlZyhodywgb2Zmc2V0LCBkYXRhKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwppbmRleCAzYzgzMWYxLi5mYjA5YzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvaWdiX2V0aHRvb2wuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTg4LDE2ICs4OCwxMSBAQAogCXsgInJ4X2xvbmdfYnl0ZV9jb3VudCIsIElHQl9TVEFUKHN0YXRzLmdvcmMpIH0sCiAJeyAicnhfY3N1bV9vZmZsb2FkX2dvb2QiLCBJR0JfU1RBVChod19jc3VtX2dvb2QpIH0sCiAJeyAicnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIsIElHQl9TVEFUKGh3X2NzdW1fZXJyKSB9LAotCXsgInJ4X2hlYWRlcl9zcGxpdCIsIElHQl9TVEFUKHJ4X2hkcl9zcGxpdCkgfSwKKwl7ICJ0eF9kbWFfb3V0X29mX3N5bmMiLCBJR0JfU1RBVChzdGF0cy5kb29zeW5jKSB9LAogCXsgImFsbG9jX3J4X2J1ZmZfZmFpbGVkIiwgSUdCX1NUQVQoYWxsb2NfcnhfYnVmZl9mYWlsZWQpIH0sCiAJeyAidHhfc21idXMiLCBJR0JfU1RBVChzdGF0cy5tZ3B0YykgfSwKIAl7ICJyeF9zbWJ1cyIsIElHQl9TVEFUKHN0YXRzLm1ncHJjKSB9LAogCXsgImRyb3BwZWRfc21idXMiLCBJR0JfU1RBVChzdGF0cy5tZ3BkYykgfSwKLSNpZmRlZiBDT05GSUdfSUdCX0xSTwotCXsgImxyb19hZ2dyZWdhdGVkIiwgSUdCX1NUQVQobHJvX2FnZ3JlZ2F0ZWQpIH0sCi0JeyAibHJvX2ZsdXNoZWQiLCBJR0JfU1RBVChscm9fZmx1c2hlZCkgfSwKLQl7ICJscm9fbm9fZGVzYyIsIElHQl9TVEFUKGxyb19ub19kZXNjKSB9LAotI2VuZGlmCiB9OwogCiAjZGVmaW5lIElHQl9RVUVVRV9TVEFUU19MRU4gXApAQCAtMjkzLDE1ICsyODgsMTUgQEAKIAogc3RhdGljIHUzMiBpZ2JfZ2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKLQlyZXR1cm4gKG5ldGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pICE9IDA7CisJcmV0dXJuIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9JUF9DU1VNKSAhPSAwOwogfQogCiBzdGF0aWMgaW50IGlnYl9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKIHsKIAlpZiAoZGF0YSkKLQkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX0NTVU07CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKTsKIAllbHNlCi0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfSFdfQ1NVTTsKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSVBWNl9DU1VNKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzEwLDE1ICszMDUsMTMgQEAKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JaWYgKGRhdGEpCisJaWYgKGRhdGEpIHsKIAkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKLQllbHNlCi0JCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOwotCi0JaWYgKGRhdGEpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwotCWVsc2UKKwl9IGVsc2UgeworCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKIAkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU082OworCX0KIAogCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJUU08gaXMgJXNcbiIsCiAJCSBkYXRhID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIik7CkBAIC00MDUsNyArMzk4LDcgQEAKIAlyZWdzX2J1ZmZbMzRdID0gcmQzMihFMTAwMF9STFBNTCk7CiAJcmVnc19idWZmWzM1XSA9IHJkMzIoRTEwMDBfUkZDVEwpOwogCXJlZ3NfYnVmZlszNl0gPSByZDMyKEUxMDAwX01SUUMpOwotCXJlZ3NfYnVmZlszN10gPSByZDMyKEUxMDAwX1ZNRF9DVEwpOworCXJlZ3NfYnVmZlszN10gPSByZDMyKEUxMDAwX1ZUX0NUTCk7CiAKIAkvKiBUcmFuc21pdCAqLwogCXJlZ3NfYnVmZlszOF0gPSByZDMyKEUxMDAwX1RDVEwpOwpAQCAtNTk4LDEyICs1OTEsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoaHctPm52bS50eXBlID09IGUxMDAwX252bV9lZXByb21fc3BpKQotCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIGZpcnN0X3dvcmQsCisJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBmaXJzdF93b3JkLAogCQkJCQkgICAgbGFzdF93b3JkIC0gZmlyc3Rfd29yZCArIDEsCiAJCQkJCSAgICBlZXByb21fYnVmZik7CiAJZWxzZSB7CiAJCWZvciAoaSA9IDA7IGkgPCBsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMTsgaSsrKSB7Ci0JCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0oaHcsIGZpcnN0X3dvcmQgKyBpLCAxLAorCQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWQoaHcsIGZpcnN0X3dvcmQgKyBpLCAxLAogCQkJCQkJICAgICZlZXByb21fYnVmZltpXSk7CiAJCQlpZiAocmV0X3ZhbCkKIAkJCQlicmVhazsKQEAgLTY1MCwxNCArNjQzLDE0IEBACiAJaWYgKGVlcHJvbS0+b2Zmc2V0ICYgMSkgewogCQkvKiBuZWVkIHJlYWQvbW9kaWZ5L3dyaXRlIG9mIGZpcnN0IGNoYW5nZWQgRUVQUk9NIHdvcmQgKi8KIAkJLyogb25seSB0aGUgc2Vjb25kIGJ5dGUgb2YgdGhlIHdvcmQgaXMgYmVpbmcgbW9kaWZpZWQgKi8KLQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBmaXJzdF93b3JkLCAxLAorCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZChodywgZmlyc3Rfd29yZCwgMSwKIAkJCQkJICAgICZlZXByb21fYnVmZlswXSk7CiAJCXB0cisrOwogCX0KIAlpZiAoKChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuKSAmIDEpICYmIChyZXRfdmFsID09IDApKSB7CiAJCS8qIG5lZWQgcmVhZC9tb2RpZnkvd3JpdGUgb2YgbGFzdCBjaGFuZ2VkIEVFUFJPTSB3b3JkICovCiAJCS8qIG9ubHkgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIHdvcmQgaXMgYmVpbmcgbW9kaWZpZWQgKi8KLQkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBsYXN0X3dvcmQsIDEsCisJCXJldF92YWwgPSBody0+bnZtLm9wcy5yZWFkKGh3LCBsYXN0X3dvcmQsIDEsCiAJCQkJICAgJmVlcHJvbV9idWZmW2xhc3Rfd29yZCAtIGZpcnN0X3dvcmRdKTsKIAl9CiAKQEAgLTY3MCw3ICs2NjMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMTsgaSsrKQogCQllZXByb21fYnVmZltpXSA9IGNwdV90b19sZTE2KGVlcHJvbV9idWZmW2ldKTsKIAotCXJldF92YWwgPSBody0+bnZtLm9wcy53cml0ZV9udm0oaHcsIGZpcnN0X3dvcmQsCisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLndyaXRlKGh3LCBmaXJzdF93b3JkLAogCQkJCSAgICAgbGFzdF93b3JkIC0gZmlyc3Rfd29yZCArIDEsIGVlcHJvbV9idWZmKTsKIAogCS8qIFVwZGF0ZSB0aGUgY2hlY2tzdW0gb3ZlciB0aGUgZmlyc3QgcGFydCBvZiB0aGUgRUVQUk9NIGlmIG5lZWRlZApAQCAtNjk0LDcgKzY4Nyw3IEBACiAKIAkvKiBFRVBST00gaW1hZ2UgdmVyc2lvbiAjIGlzIHJlcG9ydGVkIGFzIGZpcm13YXJlIHZlcnNpb24gIyBmb3IKIAkgKiA4MjU3NSBjb250cm9sbGVycyAqLwotCWFkYXB0ZXItPmh3Lm52bS5vcHMucmVhZF9udm0oJmFkYXB0ZXItPmh3LCA1LCAxLCAmZWVwcm9tX2RhdGEpOworCWFkYXB0ZXItPmh3Lm52bS5vcHMucmVhZCgmYWRhcHRlci0+aHcsIDUsIDEsICZlZXByb21fZGF0YSk7CiAJc3ByaW50ZihmaXJtd2FyZV92ZXJzaW9uLCAiJWQuJWQtJWQiLAogCQkoZWVwcm9tX2RhdGEgJiAweEYwMDApID4+IDEyLAogCQkoZWVwcm9tX2RhdGEgJiAweDBGRjApID4+IDQsCkBAIC04NjMsMjMgKzg1NiwyNiBAQAogCXsgRTEwMDBfUkRCQUwoMCksICAweDEwMCwgNCwgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCiAJeyBFMTAwMF9SREJBSCgwKSwgIDB4MTAwLCA0LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKIAl7IEUxMDAwX1JETEVOKDApLCAgMHgxMDAsIDQsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAotCXsgRTEwMDBfUkRCQUwoNCksICAweDQwLCAgOCwgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCi0JeyBFMTAwMF9SREJBSCg0KSwgIDB4NDAsICA4LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1JETEVOKDQpLCAgMHg0MCwgIDgsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAotCS8qIEVuYWJsZSBhbGwgZm91ciBSWCBxdWV1ZXMgYmVmb3JlIHRlc3RpbmcuICovCi0JeyBFMTAwMF9SWERDVEwoMCksIDB4MTAwLCAxLCAgV1JJVEVfTk9fVEVTVCwgMCwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSB9LAorCXsgRTEwMDBfUkRCQUwoNCksICAweDQwLCAxMiwgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9SREJBSCg0KSwgIDB4NDAsIDEyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1JETEVOKDQpLCAgMHg0MCwgMTIsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAorCS8qIEVuYWJsZSBhbGwgUlggcXVldWVzIGJlZm9yZSB0ZXN0aW5nLiAqLworCXsgRTEwMDBfUlhEQ1RMKDApLCAweDEwMCwgNCwgIFdSSVRFX05PX1RFU1QsIDAsIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUgfSwKKwl7IEUxMDAwX1JYRENUTCg0KSwgMHg0MCwgMTIsICBXUklURV9OT19URVNULCAwLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFIH0sCiAJLyogUkRIIGlzIHJlYWQtb25seSBmb3IgODI1NzYsIG9ubHkgdGVzdCBSRFQuICovCiAJeyBFMTAwMF9SRFQoMCksCSAgIDB4MTAwLCA0LCAgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweDAwMDBGRkZGIH0sCisJeyBFMTAwMF9SRFQoNCksCSAgIDB4NDAsIDEyLCAgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweDAwMDBGRkZGIH0sCiAJeyBFMTAwMF9SWERDVEwoMCksIDB4MTAwLCA0LCAgV1JJVEVfTk9fVEVTVCwgMCwgMCB9LAorCXsgRTEwMDBfUlhEQ1RMKDQpLCAweDQwLCAxMiwgIFdSSVRFX05PX1RFU1QsIDAsIDAgfSwKIAl7IEUxMDAwX0ZDUlRILAkgICAweDEwMCwgMSwgIFBBVFRFUk5fVEVTVCwgMHgwMDAwRkZGMCwgMHgwMDAwRkZGMCB9LAogCXsgRTEwMDBfRkNUVFYsCSAgIDB4MTAwLCAxLCAgUEFUVEVSTl9URVNULCAweDAwMDBGRkZGLCAweDAwMDBGRkZGIH0sCiAJeyBFMTAwMF9USVBHLAkgICAweDEwMCwgMSwgIFBBVFRFUk5fVEVTVCwgMHgzRkZGRkZGRiwgMHgzRkZGRkZGRiB9LAogCXsgRTEwMDBfVERCQUwoMCksICAweDEwMCwgNCwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkZGRiB9LAogCXsgRTEwMDBfVERCQUgoMCksICAweDEwMCwgNCwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAogCXsgRTEwMDBfVERMRU4oMCksICAweDEwMCwgNCwgIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAotCXsgRTEwMDBfVERCQUwoNCksICAweDQwLCA4LCAgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCi0JeyBFMTAwMF9UREJBSCg0KSwgIDB4NDAsIDgsICBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKLQl7IEUxMDAwX1RETEVOKDQpLCAgMHg0MCwgOCwgIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAorCXsgRTEwMDBfVERCQUwoNCksICAweDQwLCAxMiwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkY4MCwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfVERCQUgoNCksICAweDQwLCAxMiwgIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfVERMRU4oNCksICAweDQwLCAxMiwgIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkZGMCwgMHgwMDBGRkZGRiB9LAogCXsgRTEwMDBfUkNUTCwJICAgMHgxMDAsIDEsICBTRVRfUkVBRF9URVNULCAweEZGRkZGRkZGLCAweDAwMDAwMDAwIH0sCiAJeyBFMTAwMF9SQ1RMLCAJICAgMHgxMDAsIDEsICBTRVRfUkVBRF9URVNULCAweDA0Q0ZCMEZFLCAweDAwM0ZGRkZCIH0sCiAJeyBFMTAwMF9SQ1RMLCAJICAgMHgxMDAsIDEsICBTRVRfUkVBRF9URVNULCAweDA0Q0ZCMEZFLCAweEZGRkZGRkZGIH0sCkBAIC05MjYsMTIgKzkyMiwxMyBAQAogc3RhdGljIGJvb2wgcmVnX3BhdHRlcm5fdGVzdChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSwKIAkJCSAgICAgaW50IHJlZywgdTMyIG1hc2ssIHUzMiB3cml0ZSkKIHsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBwYXQsIHZhbDsKIAl1MzIgX3Rlc3RbXSA9CiAJCXsweDVBNUE1QTVBLCAweEE1QTVBNUE1LCAweDAwMDAwMDAwLCAweEZGRkZGRkZGfTsKIAlmb3IgKHBhdCA9IDA7IHBhdCA8IEFSUkFZX1NJWkUoX3Rlc3QpOyBwYXQrKykgewotCQl3cml0ZWwoKF90ZXN0W3BhdF0gJiB3cml0ZSksIChhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKSk7Ci0JCXZhbCA9IHJlYWRsKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpOworCQl3cjMyKHJlZywgKF90ZXN0W3BhdF0gJiB3cml0ZSkpOworCQl2YWwgPSByZDMyKHJlZyk7CiAJCWlmICh2YWwgIT0gKF90ZXN0W3BhdF0gJiB3cml0ZSAmIG1hc2spKSB7CiAJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJwYXR0ZXJuIHRlc3QgcmVnICUwNFggIgogCQkJCSJmYWlsZWQ6IGdvdCAweCUwOFggZXhwZWN0ZWQgMHglMDhYXG4iLApAQCAtOTQ2LDkgKzk0MywxMCBAQAogc3RhdGljIGJvb2wgcmVnX3NldF9hbmRfY2hlY2soc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEsCiAJCQkgICAgICBpbnQgcmVnLCB1MzIgbWFzaywgdTMyIHdyaXRlKQogeworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIHZhbDsKLQl3cml0ZWwoKHdyaXRlICYgbWFzayksIChhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKSk7Ci0JdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIHJlZyk7CisJd3IzMihyZWcsIHdyaXRlICYgbWFzayk7CisJdmFsID0gcmQzMihyZWcpOwogCWlmICgod3JpdGUgJiBtYXNrKSAhPSAodmFsICYgbWFzaykpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAic2V0L2NoZWNrIHJlZyAlMDRYIHRlc3QgZmFpbGVkOiIKIAkJCSIgZ290IDB4JTA4WCBleHBlY3RlZCAweCUwOFhcbiIsIHJlZywKQEAgLTEwMTQsMTIgKzEwMTIsMTQgQEAKIAkJZm9yIChpID0gMDsgaSA8IHRlc3QtPmFycmF5X2xlbjsgaSsrKSB7CiAJCQlzd2l0Y2ggKHRlc3QtPnRlc3RfdHlwZSkgewogCQkJY2FzZSBQQVRURVJOX1RFU1Q6Ci0JCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKyAoaSAqIHRlc3QtPnJlZ19vZmZzZXQpLAorCQkJCVJFR19QQVRURVJOX1RFU1QodGVzdC0+cmVnICsKKwkJCQkJCShpICogdGVzdC0+cmVnX29mZnNldCksCiAJCQkJCQl0ZXN0LT5tYXNrLAogCQkJCQkJdGVzdC0+d3JpdGUpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBTRVRfUkVBRF9URVNUOgotCQkJCVJFR19TRVRfQU5EX0NIRUNLKHRlc3QtPnJlZyArIChpICogdGVzdC0+cmVnX29mZnNldCksCisJCQkJUkVHX1NFVF9BTkRfQ0hFQ0sodGVzdC0+cmVnICsKKwkJCQkJCShpICogdGVzdC0+cmVnX29mZnNldCksCiAJCQkJCQl0ZXN0LT5tYXNrLAogCQkJCQkJdGVzdC0+d3JpdGUpOwogCQkJCWJyZWFrOwpAQCAtMTA2MSw3ICsxMDYxLDcgQEAKIAkqZGF0YSA9IDA7CiAJLyogUmVhZCBhbmQgYWRkIHVwIHRoZSBjb250ZW50cyBvZiB0aGUgRUVQUk9NICovCiAJZm9yIChpID0gMDsgaSA8IChOVk1fQ0hFQ0tTVU1fUkVHICsgMSk7IGkrKykgewotCQlpZiAoKGFkYXB0ZXItPmh3Lm52bS5vcHMucmVhZF9udm0oJmFkYXB0ZXItPmh3LCBpLCAxLCAmdGVtcCkpCisJCWlmICgoYWRhcHRlci0+aHcubnZtLm9wcy5yZWFkKCZhZGFwdGVyLT5odywgaSwgMSwgJnRlbXApKQogCQkgICAgPCAwKSB7CiAJCQkqZGF0YSA9IDE7CiAJCQlicmVhazsKQEAgLTEwOTEsMTYgKzEwOTEsMTcgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JdTMyIG1hc2ssIGkgPSAwLCBzaGFyZWRfaW50ID0gdHJ1ZTsKKwl1MzIgbWFzaywgaWNzX21hc2ssIGkgPSAwLCBzaGFyZWRfaW50ID0gdHJ1ZTsKIAl1MzIgaXJxID0gYWRhcHRlci0+cGRldi0+aXJxOwogCiAJKmRhdGEgPSAwOwogCiAJLyogSG9vayB1cCB0ZXN0IGludGVycnVwdCBoYW5kbGVyIGp1c3QgZm9yIHRoaXMgdGVzdCAqLwotCWlmIChhZGFwdGVyLT5tc2l4X2VudHJpZXMpIHsKKwlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKQogCQkvKiBOT1RFOiB3ZSBkb24ndCB0ZXN0IE1TSS1YIGludGVycnVwdHMgaGVyZSwgeWV0ICovCiAJCXJldHVybiAwOwotCX0gZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19IQVNfTVNJKSB7CisKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19IQVNfTVNJKSB7CiAJCXNoYXJlZF9pbnQgPSBmYWxzZTsKIAkJaWYgKHJlcXVlc3RfaXJxKGlycSwgJmlnYl90ZXN0X2ludHIsIDAsIG5ldGRldi0+bmFtZSwgbmV0ZGV2KSkgewogCQkJKmRhdGEgPSAxOwpAQCAtMTExNiwxNiArMTExNywzMSBAQAogCX0KIAlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAidGVzdGluZyAlcyBpbnRlcnJ1cHRcbiIsCiAJCShzaGFyZWRfaW50ID8gInNoYXJlZCIgOiAidW5zaGFyZWQiKSk7Ci0KIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwogCXdyMzIoRTEwMDBfSU1DLCAweEZGRkZGRkZGKTsKIAltc2xlZXAoMTApOwogCisJLyogRGVmaW5lIGFsbCB3cml0YWJsZSBiaXRzIGZvciBJQ1MgKi8KKwlzd2l0Y2goaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3NToKKwkJaWNzX21hc2sgPSAweDM3RjQ3RUREOworCQlicmVhazsKKwljYXNlIGUxMDAwXzgyNTc2OgorCQlpY3NfbWFzayA9IDB4NzdENEZCRkQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWljc19tYXNrID0gMHg3RkZGRkZGRjsKKwkJYnJlYWs7CisJfQorCiAJLyogVGVzdCBlYWNoIGludGVycnVwdCAqLwotCWZvciAoOyBpIDwgMTA7IGkrKykgeworCWZvciAoOyBpIDwgMzE7IGkrKykgewogCQkvKiBJbnRlcnJ1cHQgdG8gdGVzdCAqLwogCQltYXNrID0gMSA8PCBpOwogCisJCWlmICghKG1hc2sgJiBpY3NfbWFzaykpCisJCQljb250aW51ZTsKKwogCQlpZiAoIXNoYXJlZF9pbnQpIHsKIAkJCS8qIERpc2FibGUgdGhlIGludGVycnVwdCB0byBiZSByZXBvcnRlZCBpbgogCQkJICogdGhlIGNhdXNlIHJlZ2lzdGVyIGFuZCB0aGVuIGZvcmNlIHRoZSBzYW1lCkBAIC0xMTM0LDggKzExNTAsMTIgQEAKIAkJCSAqIHRlc3QgZmFpbGVkLgogCQkJICovCiAJCQlhZGFwdGVyLT50ZXN0X2ljciA9IDA7Ci0JCQl3cjMyKEUxMDAwX0lNQywgfm1hc2sgJiAweDAwMDA3RkZGKTsKLQkJCXdyMzIoRTEwMDBfSUNTLCB+bWFzayAmIDB4MDAwMDdGRkYpOworCisJCQkvKiBGbHVzaCBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJCQl3cjMyKEUxMDAwX0lDUiwgfjApOworCisJCQl3cjMyKEUxMDAwX0lNQywgbWFzayk7CisJCQl3cjMyKEUxMDAwX0lDUywgbWFzayk7CiAJCQltc2xlZXAoMTApOwogCiAJCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSB7CkBAIC0xMTUxLDYgKzExNzEsMTAgQEAKIAkJICogdGVzdCBmYWlsZWQuCiAJCSAqLwogCQlhZGFwdGVyLT50ZXN0X2ljciA9IDA7CisKKwkJLyogRmx1c2ggYW55IHBlbmRpbmcgaW50ZXJydXB0cyAqLworCQl3cjMyKEUxMDAwX0lDUiwgfjApOworCiAJCXdyMzIoRTEwMDBfSU1TLCBtYXNrKTsKIAkJd3IzMihFMTAwMF9JQ1MsIG1hc2spOwogCQltc2xlZXAoMTApOwpAQCAtMTE2OCwxMSArMTE5MiwxNSBAQAogCQkJICogdGVzdCBmYWlsZWQuCiAJCQkgKi8KIAkJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKLQkJCXdyMzIoRTEwMDBfSU1DLCB+bWFzayAmIDB4MDAwMDdGRkYpOwotCQkJd3IzMihFMTAwMF9JQ1MsIH5tYXNrICYgMHgwMDAwN0ZGRik7CisKKwkJCS8qIEZsdXNoIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwkJCXdyMzIoRTEwMDBfSUNSLCB+MCk7CisKKwkJCXdyMzIoRTEwMDBfSU1DLCB+bWFzayk7CisJCQl3cjMyKEUxMDAwX0lDUywgfm1hc2spOwogCQkJbXNsZWVwKDEwKTsKIAotCQkJaWYgKGFkYXB0ZXItPnRlc3RfaWNyKSB7CisJCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSB7CiAJCQkJKmRhdGEgPSA1OwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTE4MCw3ICsxMjA4LDcgQEAKIAl9CiAKIAkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyAqLwotCXdyMzIoRTEwMDBfSU1DLCAweEZGRkZGRkZGKTsKKwl3cjMyKEUxMDAwX0lNQywgfjApOwogCW1zbGVlcCgxMCk7CiAKIAkvKiBVbmhvb2sgdGVzdCBpbnRlcnJ1cHQgaGFuZGxlciAqLwpAQCAtMTI0NCw2ICsxMjcyLDcgQEAKIAlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+dGVzdF90eF9yaW5nOwogCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9ICZhZGFwdGVyLT50ZXN0X3J4X3Jpbmc7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBpZ2JfYnVmZmVyICpidWZmZXJfaW5mbzsKIAl1MzIgcmN0bDsKIAlpbnQgaSwgcmV0X3ZhbDsKIApAQCAtMTI2MCw3ICsxMjg5LDcgQEAKIAkJZ290byBlcnJfbm9tZW07CiAJfQogCi0JdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKTsKKwl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MpOwogCXR4X3JpbmctPnNpemUgPSBBTElHTih0eF9yaW5nLT5zaXplLCA0MDk2KTsKIAl0eF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgdHhfcmluZy0+c2l6ZSwKIAkJCQkJICAgICAmdHhfcmluZy0+ZG1hKTsKQEAgLTEyNzQsNyArMTMwMyw3IEBACiAJCQkoKHU2NCkgdHhfcmluZy0+ZG1hICYgMHgwMDAwMDAwMEZGRkZGRkZGKSk7CiAJd3IzMihFMTAwMF9UREJBSCgwKSwgKCh1NjQpIHR4X3JpbmctPmRtYSA+PiAzMikpOwogCXdyMzIoRTEwMDBfVERMRU4oMCksCi0JCQl0eF9yaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykpOworCQkJdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MpKTsKIAl3cjMyKEUxMDAwX1RESCgwKSwgMCk7CiAJd3IzMihFMTAwMF9URFQoMCksIDApOwogCXdyMzIoRTEwMDBfVENUTCwKQEAgLTEyODMsMjcgKzEzMTIsMzEgQEAKIAkJCUUxMDAwX0NPTExJU0lPTl9ESVNUQU5DRSA8PCBFMTAwMF9DT0xEX1NISUZUKTsKIAogCWZvciAoaSA9IDA7IGkgPCB0eF9yaW5nLT5jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBlMTAwMF90eF9kZXNjICp0eF9kZXNjID0gRTEwMDBfVFhfREVTQygqdHhfcmluZywgaSk7CisJCXVuaW9uIGUxMDAwX2Fkdl90eF9kZXNjICp0eF9kZXNjOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQl1bnNpZ25lZCBpbnQgc2l6ZSA9IDEwMjQ7CiAKKwkJdHhfZGVzYyA9IEUxMDAwX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBpKTsKIAkJc2tiID0gYWxsb2Nfc2tiKHNpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIXNrYikgewogCQkJcmV0X3ZhbCA9IDM7CiAJCQlnb3RvIGVycl9ub21lbTsKIAkJfQogCQlza2JfcHV0KHNrYiwgc2l6ZSk7Ci0JCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnNrYiA9IHNrYjsKLQkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubGVuZ3RoID0gc2tiLT5sZW47Ci0JCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLmRtYSA9Ci0JCQlwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAotCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJdHhfZGVzYy0+YnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NCh0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5kbWEpOwotCQl0eF9kZXNjLT5sb3dlci5kYXRhID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOwotCQl0eF9kZXNjLT5sb3dlci5kYXRhIHw9IGNwdV90b19sZTMyKEUxMDAwX1RYRF9DTURfRU9QIHwKLQkJCQkJCSAgIEUxMDAwX1RYRF9DTURfSUZDUyB8Ci0JCQkJCQkgICBFMTAwMF9UWERfQ01EX1JTKTsKLQkJdHhfZGVzYy0+dXBwZXIuZGF0YSA9IDA7CisJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOworCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gc2tiLT5sZW47CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCXR4X2Rlc2MtPnJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby0+ZG1hKTsKKwkJdHhfZGVzYy0+cmVhZC5vbGluZm9fc3RhdHVzID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pIDw8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQ7CisJCXR4X2Rlc2MtPnJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOworCQl0eF9kZXNjLT5yZWFkLmNtZF90eXBlX2xlbiB8PSBjcHVfdG9fbGUzMihFMTAwMF9UWERfQ01EX0VPUCB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX1RYRF9DTURfSUZDUyB8CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX1RYRF9DTURfUlMgfAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRTEwMDBfQURWVFhEX0RDTURfREVYVCk7CiAJfQogCiAJLyogU2V0dXAgUnggZGVzY3JpcHRvciByaW5nIGFuZCBSeCBidWZmZXJzICovCkBAIC0xMzE5LDcgKzEzNTIsNyBAQAogCQlnb3RvIGVycl9ub21lbTsKIAl9CiAKLQlyeF9yaW5nLT5zaXplID0gcnhfcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGUxMDAwX3J4X2Rlc2MpOworCXJ4X3JpbmctPnNpemUgPSByeF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYyk7CiAJcnhfcmluZy0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHJ4X3JpbmctPnNpemUsCiAJCQkJCSAgICAgJnJ4X3JpbmctPmRtYSk7CiAJaWYgKCFyeF9yaW5nLT5kZXNjKSB7CkBAIC0xMzM4LDE2ICsxMzcxLDE3IEBACiAJd3IzMihFMTAwMF9SREgoMCksIDApOwogCXdyMzIoRTEwMDBfUkRUKDApLCAwKTsKIAlyY3RsICY9IH4oRTEwMDBfUkNUTF9MQk1fVENWUiB8IEUxMDAwX1JDVExfTEJNX01BQyk7Ci0JcmN0bCA9IEUxMDAwX1JDVExfRU4gfCBFMTAwMF9SQ1RMX0JBTSB8IEUxMDAwX1JDVExfU1pfMjA0OCB8Ci0JCUUxMDAwX1JDVExfUkRNVFNfSEFMRiB8CisJcmN0bCA9IEUxMDAwX1JDVExfRU4gfCBFMTAwMF9SQ1RMX0JBTSB8IEUxMDAwX1JDVExfUkRNVFNfSEFMRiB8CiAJCShhZGFwdGVyLT5ody5tYWMubWNfZmlsdGVyX3R5cGUgPDwgRTEwMDBfUkNUTF9NT19TSElGVCk7CiAJd3IzMihFMTAwMF9SQ1RMLCByY3RsKTsKLQl3cjMyKEUxMDAwX1NSUkNUTCgwKSwgMCk7CisJd3IzMihFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTsKIAogCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nLT5jb3VudDsgaSsrKSB7Ci0JCXN0cnVjdCBlMTAwMF9yeF9kZXNjICpyeF9kZXNjID0gRTEwMDBfUlhfREVTQygqcnhfcmluZywgaSk7CisJCXVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjICpyeF9kZXNjOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCisJCWJ1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCQlyeF9kZXNjID0gRTEwMDBfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOwogCQlza2IgPSBhbGxvY19za2IoSUdCX1JYQlVGRkVSXzIwNDggKyBORVRfSVBfQUxJR04sCiAJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tiKSB7CkBAIC0xMzU1LDExICsxMzg5LDExIEBACiAJCQlnb3RvIGVycl9ub21lbTsKIAkJfQogCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0JCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLnNrYiA9IHNrYjsKLQkJcnhfcmluZy0+YnVmZmVyX2luZm9baV0uZG1hID0KLQkJCXBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgSUdCX1JYQlVGRkVSXzIwNDgsCi0JCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCXJ4X2Rlc2MtPmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQocnhfcmluZy0+YnVmZmVyX2luZm9baV0uZG1hKTsKKwkJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKKwkJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHQl9SWEJVRkZFUl8yMDQ4LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcnhfZGVzYy0+cmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5kbWEpOwogCQltZW1zZXQoc2tiLT5kYXRhLCAweDAwLCBza2ItPmxlbik7CiAJfQogCkBAIC0xNDU4LDcgKzE0OTIsNyBAQAogCQkJIEUxMDAwX0NUUkxfVEZDRSB8CiAJCQkgRTEwMDBfQ1RSTF9MUlNUKTsKIAkJcmVnIHw9IEUxMDAwX0NUUkxfU0xVIHwKLQkJICAgICAgIEUxMDAwX0NUUkxfRkQ7IAorCQkgICAgICAgRTEwMDBfQ1RSTF9GRDsKIAkJd3IzMihFMTAwMF9DVFJMLCByZWcpOwogCiAJCS8qIFVuc2V0IHN3aXRjaCBjb250cm9sIHRvIHNlcmRlcyBlbmVyZ3kgZGV0ZWN0ICovCkBAIC0xNzQ1LDYgKzE3NzksMTUgQEAKIAkJLyogcmV0dXJuIHN1Y2Nlc3MgZm9yIG5vbiBleGNsdWRlZCBhZGFwdGVyIHBvcnRzICovCiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSOgorCQkvKiBxdWFkIHBvcnQgYWRhcHRlcnMgb25seSBzdXBwb3J0IFdvTCBvbiBwb3J0IEEgKi8KKwkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19RVUFEX1BPUlRfQSkpIHsKKwkJCXdvbC0+c3VwcG9ydGVkID0gMDsKKwkJCWJyZWFrOworCQl9CisJCS8qIHJldHVybiBzdWNjZXNzIGZvciBub24gZXhjbHVkZWQgYWRhcHRlciBwb3J0cyAqLworCQlyZXR2YWwgPSAwOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBkdWFsIHBvcnQgY2FyZHMgb25seSBzdXBwb3J0IFdvTCBvbiBwb3J0IEEgZnJvbSBub3cgb24KIAkJICogdW5sZXNzIGl0IHdhcyBlbmFibGVkIGluIHRoZSBlZXByb20gZm9yIHBvcnQgQgpAQCAtMTgyNyw5ICsxODcwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogdG9nZ2xlIExFRCA0IHRpbWVzIHBlciBzZWNvbmQgPSAyICJibGlua3MiIHBlciBzZWNvbmQgKi8KLSNkZWZpbmUgSUdCX0lEX0lOVEVSVkFMCQkoSFovNCkKLQogLyogYml0IGRlZmluZXMgZm9yIGFkYXB0ZXItPmxlZF9zdGF0dXMgKi8KICNkZWZpbmUgSUdCX0xFRF9PTgkJMAogCkBAIC0xOTIxLDE4ICsxOTYxLDYgQEAKIAlpbnQgc3RhdF9jb3VudCA9IHNpemVvZihzdHJ1Y3QgaWdiX3F1ZXVlX3N0YXRzKSAvIHNpemVvZih1NjQpOwogCWludCBqOwogCWludCBpOwotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JaW50IGFnZ3JlZ2F0ZWQgPSAwLCBmbHVzaGVkID0gMCwgbm9fZGVzYyA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCWFnZ3JlZ2F0ZWQgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLnN0YXRzLmFnZ3JlZ2F0ZWQ7Ci0JCWZsdXNoZWQgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLnN0YXRzLmZsdXNoZWQ7Ci0JCW5vX2Rlc2MgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLnN0YXRzLm5vX2Rlc2M7Ci0JfQotCWFkYXB0ZXItPmxyb19hZ2dyZWdhdGVkID0gYWdncmVnYXRlZDsKLQlhZGFwdGVyLT5scm9fZmx1c2hlZCA9IGZsdXNoZWQ7Ci0JYWRhcHRlci0+bHJvX25vX2Rlc2MgPSBub19kZXNjOwotI2VuZGlmCiAKIAlpZ2JfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwogCWZvciAoaSA9IDA7IGkgPCBJR0JfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCmluZGV4IDlkZDEzYWQuLmNhODQyMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDIwMDctMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvbmV0X3RzdGFtcC5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CkBAIC00OCwxMiArNDksMTIgQEAKICNlbmRpZgogI2luY2x1ZGUgImlnYi5oIgogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIxLjIuNDUtazIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIxLjMuMTYtazIiCiBjaGFyIGlnYl9kcml2ZXJfbmFtZVtdID0gImlnYiI7CiBjaGFyIGlnYl9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY29uc3QgY2hhciBpZ2JfZHJpdmVyX3N0cmluZ1tdID0KIAkJCQkiSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBOZXR3b3JrIERyaXZlciI7Ci1zdGF0aWMgY29uc3QgY2hhciBpZ2JfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiI7CitzdGF0aWMgY29uc3QgY2hhciBpZ2JfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIjsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBlMTAwMF9pbmZvICppZ2JfaW5mb190YmxbXSA9IHsKIAlbYm9hcmRfODI1NzVdID0gJmUxMDAwXzgyNTc1X2luZm8sCkBAIC02MSw4ICs2MiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWdiX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzYpLCBib2FyZF84MjU3NSB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9OUyksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X0ZJQkVSKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfU0VSREVTKSwgYm9hcmRfODI1NzUgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzZfUVVBRF9DT1BQRVIpLCBib2FyZF84MjU3NSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUiksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc1RUJfRklCRVJfU0VSREVTKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzVHQl9RVUFEX0NPUFBFUiksIGJvYXJkXzgyNTc1IH0sCkBAIC0xMDUsNyArMTA4LDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpZ2JfbXNpeF9vdGhlcihpbnQgaXJxLCB2b2lkICopOwogc3RhdGljIGlycXJldHVybl90IGlnYl9tc2l4X3J4KGludCBpcnEsIHZvaWQgKik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgaWdiX21zaXhfdHgoaW50IGlycSwgdm9pZCAqKTsKLXN0YXRpYyBpbnQgaWdiX2NsZWFuX3J4X3JpbmdfbXNpeChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KTsKICNpZmRlZiBDT05GSUdfSUdCX0RDQQogc3RhdGljIHZvaWQgaWdiX3VwZGF0ZV9yeF9kY2Eoc3RydWN0IGlnYl9yaW5nICopOwogc3RhdGljIHZvaWQgaWdiX3VwZGF0ZV90eF9kY2Eoc3RydWN0IGlnYl9yaW5nICopOwpAQCAtMTE1LDkgKzExNyw2IEBACiBzdGF0aWMgaW50IGlnYl9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGJvb2wgaWdiX2NsZWFuX3J4X2lycV9hZHYoc3RydWN0IGlnYl9yaW5nICosIGludCAqLCBpbnQpOwogc3RhdGljIHZvaWQgaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KHN0cnVjdCBpZ2JfcmluZyAqLCBpbnQpOwotI2lmZGVmIENPTkZJR19JR0JfTFJPCi1zdGF0aWMgaW50IGlnYl9nZXRfc2tiX2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICoqLCB2b2lkICoqLCB1NjQgKiwgdm9pZCAqKTsKLSNlbmRpZgogc3RhdGljIGludCBpZ2JfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGlmcmVxICosIGludCBjbWQpOwogc3RhdGljIHZvaWQgaWdiX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCBpZ2JfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CkBAIC0xMjUsNiArMTI0LDE2IEBACiBzdGF0aWMgdm9pZCBpZ2Jfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICosIHUxNik7CiBzdGF0aWMgdm9pZCBpZ2Jfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MTYpOwogc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmxhbihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CitzdGF0aWMgdm9pZCBpZ2JfcGluZ19hbGxfdmZzKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyB2b2lkIGlnYl9tc2dfdGFzayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CitzdGF0aWMgaW50IGlnYl9yY3ZfbXNnX2Zyb21fdmYoc3RydWN0IGlnYl9hZGFwdGVyICosIHUzMik7CitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3NldF9yYWhfcG9vbChzdHJ1Y3QgZTEwMDBfaHcgKiwgaW50ICwgaW50KTsKK3N0YXRpYyB2b2lkIGlnYl9zZXRfbWNfbGlzdF9wb29scyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwgaW50LCB1MTYpOworc3RhdGljIHZvaWQgaWdiX3ZtbV9jb250cm9sKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfc2V0X3Ztb2xyKHN0cnVjdCBlMTAwMF9odyAqLCBpbnQpOworc3RhdGljIGlubGluZSBpbnQgaWdiX3NldF92Zl9ybHBtbChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwgaW50LCBpbnQpOworc3RhdGljIGludCBpZ2Jfc2V0X3ZmX21hYyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCwgdW5zaWduZWQgY2hhciAqKTsKK3N0YXRpYyB2b2lkIGlnYl9yZXN0b3JlX3ZmX211bHRpY2FzdHMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKTsKIAogc3RhdGljIGludCBpZ2Jfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqLCBwbV9tZXNzYWdlX3QpOwogI2lmZGVmIENPTkZJR19QTQpAQCAtMTM5LDEyICsxNDgsMTggQEAKIAkucHJpb3JpdHkJPSAwCiB9OwogI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogLyogZm9yIG5ldGR1bXAgLyBuZXQgY29uc29sZSAqLwogc3RhdGljIHZvaWQgaWdiX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKik7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QQ0lfSU9WCitzdGF0aWMgc3NpemVfdCBpZ2Jfc2V0X251bV92ZnMoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK3N0YXRpYyBzc2l6ZV90IGlnYl9zaG93X251bV92ZnMoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKik7CitERVZJQ0VfQVRUUihudW1fdmZzLCBTX0lSVUdPIHwgU19JV1VTUiwgaWdiX3Nob3dfbnVtX3ZmcywgaWdiX3NldF9udW1fdmZzKTsKKyNlbmRpZgogc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgaWdiX2lvX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICosCiAJCSAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCk7CiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBpZ2JfaW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqKTsKQEAgLTE3OCw2ICsxOTMsNTQgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIAorLyoqCisgKiBTY2FsZSB0aGUgTklDIGNsb2NrIGN5Y2xlIGJ5IGEgbGFyZ2UgZmFjdG9yIHNvIHRoYXQKKyAqIHJlbGF0aXZlbHkgc21hbGwgY2xvY2sgY29ycmVjdGlvbnMgY2FuIGJlIGFkZGVkIG9yCisgKiBzdWJzdHJhY3RlZCBhdCBlYWNoIGNsb2NrIHRpY2suIFRoZSBkcmF3YmFja3Mgb2YgYQorICogbGFyZ2UgZmFjdG9yIGFyZSBhKSB0aGF0IHRoZSBjbG9jayByZWdpc3RlciBvdmVyZmxvd3MKKyAqIG1vcmUgcXVpY2tseSAobm90IHN1Y2ggYSBiaWcgZGVhbCkgYW5kIGIpIHRoYXQgdGhlCisgKiBpbmNyZW1lbnQgcGVyIHRpY2sgaGFzIHRvIGZpdCBpbnRvIDI0IGJpdHMuCisgKgorICogTm90ZSB0aGF0CisgKiAgIFRJTUlOQ0EgPSBJR0JfVFNZTkNfQ1lDTEVfVElNRV9JTl9OQU5PU0VDT05EUyAqCisgKiAgICAgICAgICAgICBJR0JfVFNZTkNfU0NBTEUKKyAqICAgVElNSU5DQSArPSBUSU1JTkNBICogYWRqdXN0bWVudCBbcHBtXSAvIDFlOQorICoKKyAqIFRoZSBiYXNlIHNjYWxlIGZhY3RvciBpcyBpbnRlbnRpb25hbGx5IGEgcG93ZXIgb2YgdHdvCisgKiBzbyB0aGF0IHRoZSBkaXZpc2lvbiBpbiAlc3RydWN0IHRpbWVjb3VudGVyIGNhbiBiZSBkb25lIHdpdGgKKyAqIGEgc2hpZnQuCisgKi8KKyNkZWZpbmUgSUdCX1RTWU5DX1NISUZUICgxOSkKKyNkZWZpbmUgSUdCX1RTWU5DX1NDQUxFICgxPDxJR0JfVFNZTkNfU0hJRlQpCisKKy8qKgorICogVGhlIGR1cmF0aW9uIG9mIG9uZSBjbG9jayBjeWNsZSBvZiB0aGUgTklDLgorICoKKyAqIEB0b2RvIFRoaXMgaGFyZC1jb2RlZCB2YWx1ZSBpcyBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0aW9uIGFuZCBtaWdodCBjaGFuZ2UKKyAqIGluIGZ1dHVyZSBoYXJkd2FyZSByZXZpc2lvbnMuIEFkZCByZXZpc2lvbiBjaGVjay4KKyAqLworI2RlZmluZSBJR0JfVFNZTkNfQ1lDTEVfVElNRV9JTl9OQU5PU0VDT05EUyAxNgorCisjaWYgKElHQl9UU1lOQ19TQ0FMRSAqIElHQl9UU1lOQ19DWUNMRV9USU1FX0lOX05BTk9TRUNPTkRTKSA+PSAoMTw8MjQpCisjIGVycm9yIElHQl9UU1lOQ19TQ0FMRSBhbmQvb3IgSUdCX1RTWU5DX0NZQ0xFX1RJTUVfSU5fTkFOT1NFQ09ORFMgYXJlIHRvbyBsYXJnZSB0byBmaXQgaW50byBUSU1JTkNBCisjZW5kaWYKKworLyoqCisgKiBpZ2JfcmVhZF9jbG9jayAtIHJlYWQgcmF3IGN5Y2xlIGNvdW50ZXIgKHRvIGJlIHVzZWQgYnkgdGltZSBjb3VudGVyKQorICovCitzdGF0aWMgY3ljbGVfdCBpZ2JfcmVhZF9jbG9jayhjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICp0YykKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPQorCQljb250YWluZXJfb2YodGMsIHN0cnVjdCBpZ2JfYWRhcHRlciwgY3ljbGVzKTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXU2NCBzdGFtcDsKKworCXN0YW1wID0gIHJkMzIoRTEwMDBfU1lTVElNTCk7CisJc3RhbXAgfD0gKHU2NClyZDMyKEUxMDAwX1NZU1RJTUgpIDw8IDMyVUxMOworCisJcmV0dXJuIHN0YW1wOworfQorCiAjaWZkZWYgREVCVUcKIC8qKgogICogaWdiX2dldF9od19kZXZfbmFtZSAtIHJldHVybiBkZXZpY2UgbmFtZSBzdHJpbmcKQEAgLTE4OCw5ICsyNTEsNDQgQEAKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKIAlyZXR1cm4gYWRhcHRlci0+bmV0ZGV2LT5uYW1lOwogfQorCisvKioKKyAqIGlnYl9nZXRfdGltZV9zdHIgLSBmb3JtYXQgY3VycmVudCBOSUMgYW5kIHN5c3RlbSB0aW1lIGFzIHN0cmluZworICovCitzdGF0aWMgY2hhciAqaWdiX2dldF90aW1lX3N0cihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICBjaGFyIGJ1ZmZlclsxNjBdKQoreworCWN5Y2xlX3QgaHcgPSBhZGFwdGVyLT5jeWNsZXMucmVhZCgmYWRhcHRlci0+Y3ljbGVzKTsKKwlzdHJ1Y3QgdGltZXNwZWMgbmljID0gbnNfdG9fdGltZXNwZWModGltZWNvdW50ZXJfcmVhZCgmYWRhcHRlci0+Y2xvY2spKTsKKwlzdHJ1Y3QgdGltZXNwZWMgc3lzOworCXN0cnVjdCB0aW1lc3BlYyBkZWx0YTsKKwlnZXRuc3RpbWVvZmRheSgmc3lzKTsKKworCWRlbHRhID0gdGltZXNwZWNfc3ViKG5pYywgc3lzKTsKKworCXNwcmludGYoYnVmZmVyLAorCQkiSFcgJWxsdSwgTklDICVsZC4lMDlsdXMsIFNZUyAlbGQuJTA5bHVzLCBOSUMtU1lTICVsZHMgKyAlMDlsdW5zIiwKKwkJaHcsCisJCShsb25nKW5pYy50dl9zZWMsIG5pYy50dl9uc2VjLAorCQkobG9uZylzeXMudHZfc2VjLCBzeXMudHZfbnNlYywKKwkJKGxvbmcpZGVsdGEudHZfc2VjLCBkZWx0YS50dl9uc2VjKTsKKworCXJldHVybiBidWZmZXI7Cit9CiAjZW5kaWYKIAogLyoqCisgKiBpZ2JfZGVzY191bnVzZWQgLSBjYWxjdWxhdGUgaWYgd2UgaGF2ZSB1bnVzZWQgZGVzY3JpcHRvcnMKKyAqKi8KK3N0YXRpYyBpbnQgaWdiX2Rlc2NfdW51c2VkKHN0cnVjdCBpZ2JfcmluZyAqcmluZykKK3sKKwlpZiAocmluZy0+bmV4dF90b19jbGVhbiA+IHJpbmctPm5leHRfdG9fdXNlKQorCQlyZXR1cm4gcmluZy0+bmV4dF90b19jbGVhbiAtIHJpbmctPm5leHRfdG9fdXNlIC0gMTsKKworCXJldHVybiByaW5nLT5jb3VudCArIHJpbmctPm5leHRfdG9fY2xlYW4gLSByaW5nLT5uZXh0X3RvX3VzZSAtIDE7Cit9CisKKy8qKgogICogaWdiX2luaXRfbW9kdWxlIC0gRHJpdmVyIFJlZ2lzdHJhdGlvbiBSb3V0aW5lCiAgKgogICogaWdiX2luaXRfbW9kdWxlIGlzIHRoZSBmaXJzdCByb3V0aW5lIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMKQEAgLTI0Myw2ICszNDEsNyBAQAogc3RhdGljIHZvaWQgaWdiX2NhY2hlX3JpbmdfcmVnaXN0ZXIoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOworCXVuc2lnbmVkIGludCByYmFzZV9vZmZzZXQgPSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OwogCiAJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgewogCWNhc2UgZTEwMDBfODI1NzY6CkBAIC0yNTIsOSArMzUxLDExIEBACiAJCSAqIGFuZCBjb250aW51ZSBjb25zdW1pbmcgcXVldWVzIGluIHRoZSBzYW1lIHNlcXVlbmNlCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gUV9JRFhfODI1NzYoaSk7CisJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSByYmFzZV9vZmZzZXQgKworCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUV9JRFhfODI1NzYoaSk7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBRX0lEWF84MjU3NihpKTsKKwkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IHJiYXNlX29mZnNldCArCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRX0lEWF84MjU3NihpKTsKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3NToKIAlkZWZhdWx0OgpAQCAtMzU0LDcgKzQ1NSw3IEBACiAJCSAgIGEgdmVjdG9yIG51bWJlciBhbG9uZyB3aXRoIGEgInZhbGlkIiBiaXQuICBTYWRseSwgdGhlIGxheW91dAogCQkgICBvZiB0aGUgdGFibGUgaXMgc29tZXdoYXQgY291bnRlcmludHVpdGl2ZS4gKi8KIAkJaWYgKHJ4X3F1ZXVlID4gSUdCX04wX1FVRVVFKSB7Ci0JCQlpbmRleCA9IChyeF9xdWV1ZSA+PiAxKTsKKwkJCWluZGV4ID0gKHJ4X3F1ZXVlID4+IDEpICsgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsKIAkJCWl2YXIgPSBhcnJheV9yZDMyKEUxMDAwX0lWQVIwLCBpbmRleCk7CiAJCQlpZiAocnhfcXVldWUgJiAweDEpIHsKIAkJCQkvKiB2ZWN0b3IgZ29lcyBpbnRvIHRoaXJkIGJ5dGUgb2YgcmVnaXN0ZXIgKi8KQEAgLTM2OSw3ICs0NzAsNyBAQAogCQkJYXJyYXlfd3IzMihFMTAwMF9JVkFSMCwgaW5kZXgsIGl2YXIpOwogCQl9CiAJCWlmICh0eF9xdWV1ZSA+IElHQl9OMF9RVUVVRSkgewotCQkJaW5kZXggPSAodHhfcXVldWUgPj4gMSk7CisJCQlpbmRleCA9ICh0eF9xdWV1ZSA+PiAxKSArIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7CiAJCQlpdmFyID0gYXJyYXlfcmQzMihFMTAwMF9JVkFSMCwgaW5kZXgpOwogCQkJaWYgKHR4X3F1ZXVlICYgMHgxKSB7CiAJCQkJLyogdmVjdG9yIGdvZXMgaW50byBoaWdoIGJ5dGUgb2YgcmVnaXN0ZXIgKi8KQEAgLTQwNyw3ICs1MDgsNyBAQAogCQkvKiBUdXJuIG9uIE1TSS1YIGNhcGFiaWxpdHkgZmlyc3QsIG9yIG91ciBzZXR0aW5ncwogCQkgKiB3b24ndCBzdGljay4gIEFuZCBpdCB3aWxsIHRha2UgZGF5cyB0byBkZWJ1Zy4gKi8KIAkJd3IzMihFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8Ci0JCQkJICAgRTEwMDBfR1BJRV9QQkEgfCBFMTAwMF9HUElFX0VJQU1FIHwgCisJCQkJICAgRTEwMDBfR1BJRV9QQkEgfCBFMTAwMF9HUElFX0VJQU1FIHwKICAJCQkJICAgRTEwMDBfR1BJRV9OU0lDUik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CkBAIC01MDYsOSArNjA3LDYgQEAKIAkJCWdvdG8gb3V0OwogCQlyaW5nLT5pdHJfcmVnaXN0ZXIgPSBFMTAwMF9FSVRSKDApICsgKHZlY3RvciA8PCAyKTsKIAkJcmluZy0+aXRyX3ZhbCA9IGFkYXB0ZXItPml0cjsKLQkJLyogb3ZlcndyaXRlIHRoZSBwb2xsIHJvdXRpbmUgZm9yIE1TSVgsIHdlJ3ZlIGFscmVhZHkgZG9uZQotCQkgKiBuZXRpZl9uYXBpX2FkZCAqLwotCQlyaW5nLT5uYXBpLnBvbGwgPSAmaWdiX2NsZWFuX3J4X3JpbmdfbXNpeDsKIAkJdmVjdG9yKys7CiAJfQogCkBAIC01NDYsNiArNjQ0LDExIEBACiAJaW50IGVycjsKIAlpbnQgbnVtdmVjcywgaTsKIAorCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzLiAqLworCS8qIEhhdmluZyBtb3JlIHF1ZXVlcyB0aGFuIENQVXMgZG9lc24ndCBtYWtlIHNlbnNlLiAqLworCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSBtaW5fdCh1MzIsIElHQl9NQVhfUlhfUVVFVUVTLCBudW1fb25saW5lX2NwdXMoKSk7CisJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IG1pbl90KHUzMiwgSUdCX01BWF9UWF9RVUVVRVMsIG51bV9vbmxpbmVfY3B1cygpKTsKKwogCW51bXZlY3MgPSBhZGFwdGVyLT5udW1fdHhfcXVldWVzICsgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyArIDE7CiAJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0ga2NhbGxvYyhudW12ZWNzLCBzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpLAogCQkJCQlHRlBfS0VSTkVMKTsKQEAgLTY4Nyw3ICs3OTAsMTAgQEAKIAkJd3IzMihFMTAwMF9FSUFDLCBhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKIAkJd3IzMihFMTAwMF9FSUFNLCBhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKIAkJd3IzMihFMTAwMF9FSU1TLCBhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrKTsKLQkJd3IzMihFMTAwMF9JTVMsIEUxMDAwX0lNU19MU0MpOworCQlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJCXdyMzIoRTEwMDBfTUJWRklNUiwgMHhGRik7CisJCXdyMzIoRTEwMDBfSU1TLCAoRTEwMDBfSU1TX0xTQyB8IEUxMDAwX0lNU19WTU1CIHwKKwkJICAgICAgICAgICAgICAgICBFMTAwMF9JTVNfRE9VVFNZTkMpKTsKIAl9IGVsc2UgewogCQl3cjMyKEUxMDAwX0lNUywgSU1TX0VOQUJMRV9NQVNLKTsKIAkJd3IzMihFMTAwMF9JQU0sIElNU19FTkFCTEVfTUFTSyk7CkBAIC03NzgsMTIgKzg4NCwxMiBAQAogCiAJaWdiX3J4X2ZpZm9fZmx1c2hfODI1NzUoJmFkYXB0ZXItPmh3KTsKIAotCS8qIGNhbGwgSUdCX0RFU0NfVU5VU0VEIHdoaWNoIGFsd2F5cyBsZWF2ZXMKKwkvKiBjYWxsIGlnYl9kZXNjX3VudXNlZCB3aGljaCBhbHdheXMgbGVhdmVzCiAJICogYXQgbGVhc3QgMSBkZXNjcmlwdG9yIHVudXNlZCB0byBtYWtlIHN1cmUKIAkgKiBuZXh0X3RvX3VzZSAhPSBuZXh0X3RvX2NsZWFuICovCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewogCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpXTsKLQkJaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KHJpbmcsIElHQl9ERVNDX1VOVVNFRChyaW5nKSk7CisJCWlnYl9hbGxvY19yeF9idWZmZXJzX2FkdihyaW5nLCBpZ2JfZGVzY191bnVzZWQocmluZykpOwogCX0KIAogCkBAIC04MTEsNiArOTE3LDEwIEBACiAJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykKIAkJaWdiX2NvbmZpZ3VyZV9tc2l4KGFkYXB0ZXIpOwogCisJaWdiX3ZtbV9jb250cm9sKGFkYXB0ZXIpOworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQsIDApOworCWlnYl9zZXRfdm1vbHIoaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpOworCiAJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cy4gKi8KIAlyZDMyKEUxMDAwX0lDUik7CiAJaWdiX2lycV9lbmFibGUoYWRhcHRlcik7CkBAIC04NTYsNiArOTY2LDEwIEBACiAKIAluZXRkZXYtPnR4X3F1ZXVlX2xlbiA9IGFkYXB0ZXItPnR4X3F1ZXVlX2xlbjsKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCisJLyogcmVjb3JkIHRoZSBzdGF0cyBiZWZvcmUgcmVzZXQqLworCWlnYl91cGRhdGVfc3RhdHMoYWRhcHRlcik7CisKIAlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKIAlhZGFwdGVyLT5saW5rX2R1cGxleCA9IDA7CiAKQEAgLTg4NiwxMSArMTAwMCwxNCBAQAogCS8qIFJlcGFydGl0aW9uIFBiYSBmb3IgZ3JlYXRlciB0aGFuIDlrIG10dQogCSAqIFRvIHRha2UgZWZmZWN0IENUUkwuUlNUIGlzIHJlcXVpcmVkLgogCSAqLwotCWlmIChtYWMtPnR5cGUgIT0gZTEwMDBfODI1NzYpIHsKLQlwYmEgPSBFMTAwMF9QQkFfMzRLOwotCX0KLQllbHNlIHsKKwlzd2l0Y2ggKG1hYy0+dHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzY6CiAJCXBiYSA9IEUxMDAwX1BCQV82NEs7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfODI1NzU6CisJZGVmYXVsdDoKKwkJcGJhID0gRTEwMDBfUEJBXzM0SzsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKChhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSA+IEVUSF9GUkFNRV9MRU4gKyBFVEhfRkNTX0xFTikgJiYKQEAgLTkxMiw3ICsxMDI5LDcgQEAKIAkJLyogdGhlIHR4IGZpZm8gYWxzbyBzdG9yZXMgMTYgYnl0ZXMgb2YgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHR4CiAJCSAqIGJ1dCBkb24ndCBpbmNsdWRlIGV0aGVybmV0IEZDUyBiZWNhdXNlIGhhcmR3YXJlIGFwcGVuZHMgaXQgKi8KIAkJbWluX3R4X3NwYWNlID0gKGFkYXB0ZXItPm1heF9mcmFtZV9zaXplICsKLQkJCQlzaXplb2Yoc3RydWN0IGUxMDAwX3R4X2Rlc2MpIC0KKwkJCQlzaXplb2YodW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MpIC0KIAkJCQlFVEhfRkNTX0xFTikgKiAyOwogCQltaW5fdHhfc3BhY2UgPSBBTElHTihtaW5fdHhfc3BhY2UsIDEwMjQpOwogCQltaW5fdHhfc3BhY2UgPj49IDEwOwpAQCAtOTU2LDYgKzEwNzMsMjAgQEAKIAlmYy0+c2VuZF94b24gPSAxOwogCWZjLT50eXBlID0gZmMtPm9yaWdpbmFsX3R5cGU7CiAKKwkvKiBkaXNhYmxlIHJlY2VpdmUgZm9yIGFsbCBWRnMgYW5kIHdhaXQgb25lIHNlY29uZCAqLworCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwIDsgaSA8IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7IGkrKykKKwkJCWFkYXB0ZXItPnZmX2RhdGFbaV0uY2xlYXJfdG9fc2VuZCA9IGZhbHNlOworCisJCS8qIHBpbmcgYWxsIHRoZSBhY3RpdmUgdmZzIHRvIGxldCB0aGVtIGtub3cgd2UgYXJlIGdvaW5nIGRvd24gKi8KKwkJCWlnYl9waW5nX2FsbF92ZnMoYWRhcHRlcik7CisKKwkJLyogZGlzYWJsZSB0cmFuc21pdHMgYW5kIHJlY2VpdmVzICovCisJCXdyMzIoRTEwMDBfVkZSRSwgMCk7CisJCXdyMzIoRTEwMDBfVkZURSwgMCk7CisJfQorCiAJLyogQWxsb3cgdGltZSBmb3IgcGVuZGluZyBtYXN0ZXIgcmVxdWVzdHMgdG8gcnVuICovCiAJYWRhcHRlci0+aHcubWFjLm9wcy5yZXNldF9odygmYWRhcHRlci0+aHcpOwogCXdyMzIoRTEwMDBfV1VDLCAwKTsKQEAgLTk3MiwyMSArMTEwMyw2IEBACiAJaWdiX2dldF9waHlfaW5mbygmYWRhcHRlci0+aHcpOwogfQogCi0vKioKLSAqIGlnYl9pc19uZWVkX2lvcG9ydCAtIGRldGVybWluZSBpZiBhbiBhZGFwdGVyIG5lZWRzIGlvcG9ydCByZXNvdXJjZXMgb3Igbm90Ci0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgYW4gYWRhcHRlciBuZWVkcyBpb3BvcnQgcmVzb3VyY2VzCi0gKiovCi1zdGF0aWMgaW50IGlnYl9pc19uZWVkX2lvcG9ydChzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzd2l0Y2ggKHBkZXYtPmRldmljZSkgewotCS8qIEN1cnJlbnRseSB0aGVyZSBhcmUgbm8gYWRhcHRlcnMgdGhhdCBuZWVkIGlvcG9ydCByZXNvdXJjZXMgKi8KLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlnYl9uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbiAJCT0gaWdiX29wZW4sCiAJLm5kb19zdG9wCQk9IGlnYl9jbG9zZSwKQEAgLTEwMjUsMjEgKzExNDEsMTIgQEAKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3OwogCWNvbnN0IHN0cnVjdCBlMTAwMF9pbmZvICplaSA9IGlnYl9pbmZvX3RibFtlbnQtPmRyaXZlcl9kYXRhXTsKIAl1bnNpZ25lZCBsb25nIG1taW9fc3RhcnQsIG1taW9fbGVuOwotCWludCBpLCBlcnIsIHBjaV91c2luZ19kYWM7CisJaW50IGVyciwgcGNpX3VzaW5nX2RhYzsKIAl1MTYgZWVwcm9tX2RhdGEgPSAwOwogCXUxNiBlZXByb21fYXBtZV9tYXNrID0gSUdCX0VFUFJPTV9BUE1FOwogCXUzMiBwYXJ0X251bTsKLQlpbnQgYmFycywgbmVlZF9pb3BvcnQ7CiAKLQkvKiBkbyBub3QgYWxsb2NhdGUgaW9wb3J0IGJhcnMgd2hlbiBub3QgbmVlZGVkICovCi0JbmVlZF9pb3BvcnQgPSBpZ2JfaXNfbmVlZF9pb3BvcnQocGRldik7Ci0JaWYgKG5lZWRfaW9wb3J0KSB7Ci0JCWJhcnMgPSBwY2lfc2VsZWN0X2JhcnMocGRldiwgSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0lPKTsKLQkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JfSBlbHNlIHsKLQkJYmFycyA9IHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSk7Ci0JCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKLQl9CisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTEwNjEsNyArMTE2OCw5IEBACiAJCX0KIAl9CiAKLQllcnIgPSBwY2lfcmVxdWVzdF9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIGJhcnMsIGlnYl9kcml2ZXJfbmFtZSk7CisJZXJyID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBwY2lfc2VsZWN0X2JhcnMocGRldiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPUkVTT1VSQ0VfTUVNKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnYl9kcml2ZXJfbmFtZSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcGNpX3JlZzsKIApAQCAtMTA3Niw3ICsxMTg1LDggQEAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCWVyciA9IC1FTk9NRU07Ci0JbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBpZ2JfYWRhcHRlciksIElHQl9NQVhfVFhfUVVFVUVTKTsKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2Yoc3RydWN0IGlnYl9hZGFwdGVyKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICBJR0JfQUJTX01BWF9UWF9RVUVVRVMpOwogCWlmICghbmV0ZGV2KQogCQlnb3RvIGVycl9hbGxvY19ldGhlcmRldjsKIApAQCAtMTA4OSwxNSArMTE5OSwxMyBAQAogCWh3ID0gJmFkYXB0ZXItPmh3OwogCWh3LT5iYWNrID0gYWRhcHRlcjsKIAlhZGFwdGVyLT5tc2dfZW5hYmxlID0gTkVUSUZfTVNHX0RSViB8IE5FVElGX01TR19QUk9CRTsKLQlhZGFwdGVyLT5iYXJzID0gYmFyczsKLQlhZGFwdGVyLT5uZWVkX2lvcG9ydCA9IG5lZWRfaW9wb3J0OwogCiAJbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CiAKIAllcnIgPSAtRUlPOwotCWFkYXB0ZXItPmh3Lmh3X2FkZHIgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKLQlpZiAoIWFkYXB0ZXItPmh3Lmh3X2FkZHIpCisJaHctPmh3X2FkZHIgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKwlpZiAoIWh3LT5od19hZGRyKQogCQlnb3RvIGVycl9pb3JlbWFwOwogCiAJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmlnYl9uZXRkZXZfb3BzOwpAQCAtMTEyNSw4ICsxMjMzLDkgQEAKIAkvKiBJbml0aWFsaXplIHNrZXctc3BlY2lmaWMgY29uc3RhbnRzICovCiAJZXJyID0gZWktPmdldF9pbnZhcmlhbnRzKGh3KTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9od19pbml0OworCQlnb3RvIGVycl9zd19pbml0OwogCisJLyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovCiAJZXJyID0gaWdiX3N3X2luaXQoYWRhcHRlcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfc3dfaW5pdDsKQEAgLTExNTgsMjcgKzEyNjcsMjUgQEAKIAkJCSJQSFkgcmVzZXQgaXMgYmxvY2tlZCBkdWUgdG8gU09ML0lERVIgc2Vzc2lvbi5cbiIpOwogCiAJbmV0ZGV2LT5mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfAotCQkJICAgTkVUSUZfRl9IV19DU1VNIHwKKwkJCSAgIE5FVElGX0ZfSVBfQ1NVTSB8CiAJCQkgICBORVRJRl9GX0hXX1ZMQU5fVFggfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX1JYIHwKIAkJCSAgIE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CiAKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CiAKLSNpZmRlZiBDT05GSUdfSUdCX0xSTwotCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87Ci0jZW5kaWYKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwogCiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwogCiAJaWYgKHBjaV91c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCi0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xMVFg7CiAJYWRhcHRlci0+ZW5fbW5nX3B0ID0gaWdiX2VuYWJsZV9tbmdfcGFzc190aHJ1KCZhZGFwdGVyLT5odyk7CiAKIAkvKiBiZWZvcmUgcmVhZGluZyB0aGUgTlZNLCByZXNldCB0aGUgY29udHJvbGxlciB0byBwdXQgdGhlIGRldmljZSBpbiBhCkBAIC0xMjA1LDI1ICsxMzEyLDE1IEBACiAJCWdvdG8gZXJyX2VlcHJvbTsKIAl9CiAKLQlpbml0X3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7Ci0JYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZnVuY3Rpb24gPSAmaWdiX3dhdGNoZG9nOwotCWFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKLQotCWluaXRfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyKTsKLQlhZGFwdGVyLT5waHlfaW5mb190aW1lci5mdW5jdGlvbiA9ICZpZ2JfdXBkYXRlX3BoeV9pbmZvOwotCWFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKKwlzZXR1cF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsICZpZ2Jfd2F0Y2hkb2csCisJICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXIpOworCXNldHVwX3RpbWVyKCZhZGFwdGVyLT5waHlfaW5mb190aW1lciwgJmlnYl91cGRhdGVfcGh5X2luZm8sCisJICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGFkYXB0ZXIpOwogCiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5yZXNldF90YXNrLCBpZ2JfcmVzZXRfdGFzayk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrLCBpZ2Jfd2F0Y2hkb2dfdGFzayk7CiAKLQkvKiBJbml0aWFsaXplIGxpbmsgJiByaW5nIHByb3BlcnRpZXMgdGhhdCBhcmUgdXNlci1jaGFuZ2VhYmxlICovCi0JYWRhcHRlci0+dHhfcmluZy0+Y291bnQgPSAyNTY7Ci0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJYWRhcHRlci0+dHhfcmluZ1tpXS5jb3VudCA9IGFkYXB0ZXItPnR4X3JpbmctPmNvdW50OwotCWFkYXB0ZXItPnJ4X3JpbmctPmNvdW50ID0gMjU2OwotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0uY291bnQgPSBhZGFwdGVyLT5yeF9yaW5nLT5jb3VudDsKLQorCS8qIEluaXRpYWxpemUgbGluayBwcm9wZXJ0aWVzIHRoYXQgYXJlIHVzZXItY2hhbmdlYWJsZSAqLwogCWFkYXB0ZXItPmZjX2F1dG9uZWcgPSB0cnVlOwogCWh3LT5tYWMuYXV0b25lZyA9IHRydWU7CiAJaHctPnBoeS5hdXRvbmVnX2FkdmVydGlzZWQgPSAweDJmOwpAQCAtMTIzMSw3ICsxMzI4LDcgQEAKIAlody0+ZmMub3JpZ2luYWxfdHlwZSA9IGUxMDAwX2ZjX2RlZmF1bHQ7CiAJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19kZWZhdWx0OwogCi0JYWRhcHRlci0+aXRyX3NldHRpbmcgPSAzOworCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gSUdCX0RFRkFVTFRfSVRSOwogCWFkYXB0ZXItPml0ciA9IElHQl9TVEFSVF9JVFI7CiAKIAlpZ2JfdmFsaWRhdGVfbWRpX3NldHRpbmcoaHcpOwpAQCAtMTI0MiwxMCArMTMzOSwxMCBAQAogCSAqIGVuYWJsZSB0aGUgQUNQSSBNYWdpYyBQYWNrZXQgZmlsdGVyCiAJICovCiAKLQlpZiAoaHctPmJ1cy5mdW5jID09IDAgfHwKLQkgICAgaHctPmRldmljZV9pZCA9PSBFMTAwMF9ERVZfSURfODI1NzVFQl9DT1BQRVIpCi0JCWh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBOVk1fSU5JVF9DT05UUk9MM19QT1JUX0EsIDEsCi0JCQkJICAgICAmZWVwcm9tX2RhdGEpOworCWlmIChody0+YnVzLmZ1bmMgPT0gMCkKKwkJaHctPm52bS5vcHMucmVhZChodywgTlZNX0lOSVRfQ09OVFJPTDNfUE9SVF9BLCAxLCAmZWVwcm9tX2RhdGEpOworCWVsc2UgaWYgKGh3LT5idXMuZnVuYyA9PSAxKQorCQlody0+bnZtLm9wcy5yZWFkKGh3LCBOVk1fSU5JVF9DT05UUk9MM19QT1JUX0IsIDEsICZlZXByb21fZGF0YSk7CiAKIAlpZiAoZWVwcm9tX2RhdGEgJiBlZXByb21fYXBtZV9tYXNrKQogCQlhZGFwdGVyLT5lZXByb21fd29sIHw9IEUxMDAwX1dVRkNfTUFHOwpAQCAtMTI2NSw2ICsxMzYyLDE2IEBACiAJCWlmIChyZDMyKEUxMDAwX1NUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKQogCQkJYWRhcHRlci0+ZWVwcm9tX3dvbCA9IDA7CiAJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSOgorCQkvKiBpZiBxdWFkIHBvcnQgYWRhcHRlciwgZGlzYWJsZSBXb0wgb24gYWxsIGJ1dCBwb3J0IEEgKi8KKwkJaWYgKGdsb2JhbF9xdWFkX3BvcnRfYSAhPSAwKQorCQkJYWRhcHRlci0+ZWVwcm9tX3dvbCA9IDA7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmZsYWdzIHw9IElHQl9GTEFHX1FVQURfUE9SVF9BOworCQkvKiBSZXNldCBmb3IgbXVsdGlwbGUgcXVhZCBwb3J0IGFkYXB0ZXJzICovCisJCWlmICgrK2dsb2JhbF9xdWFkX3BvcnRfYSA9PSA0KQorCQkJZ2xvYmFsX3F1YWRfcG9ydF9hID0gMDsKKwkJYnJlYWs7CiAJfQogCiAJLyogaW5pdGlhbGl6ZSB0aGUgd29sIHNldHRpbmdzIGJhc2VkIG9uIHRoZSBlZXByb20gc2V0dGluZ3MgKi8KQEAgLTEyODcsMTcgKzEzOTQsODIgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZWdpc3RlcjsKIAorI2lmZGVmIENPTkZJR19QQ0lfSU9WCisJLyogc2luY2UgaW92IGZ1bmN0aW9uYWxpdHkgaXNuJ3QgY3JpdGljYWwgdG8gYmFzZSBkZXZpY2UgZnVuY3Rpb24gd2UKKwkgKiBjYW4gYWNjZXB0IGZhaWx1cmUuICBJZiBpdCBmYWlscyB3ZSBkb24ndCBhbGxvdyBpb3YgdG8gYmUgZW5hYmxlZCAqLworCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzYpIHsKKwkJZXJyID0gcGNpX2VuYWJsZV9zcmlvdihwZGV2LCAwKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ldGRldi0+ZGV2LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICZkZXZfYXR0cl9udW1fdmZzKTsKKwkJaWYgKGVycikKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIElPVlxuIik7CisJfQorCisjZW5kaWYKICNpZmRlZiBDT05GSUdfSUdCX0RDQQogCWlmIChkY2FfYWRkX3JlcXVlc3RlcigmcGRldi0+ZGV2KSA9PSAwKSB7CiAJCWFkYXB0ZXItPmZsYWdzIHw9IElHQl9GTEFHX0RDQV9FTkFCTEVEOwogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRENBIGVuYWJsZWRcbiIpOwogCQkvKiBBbHdheXMgdXNlIENCMiBtb2RlLCBkaWZmZXJlbmNlIGlzIG1hc2tlZAogCQkgKiBpbiB0aGUgQ0IgZHJpdmVyLiAqLwotCQl3cjMyKEUxMDAwX0RDQV9DVFJMLCAyKTsKKwkJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgRTEwMDBfRENBX0NUUkxfRENBX01PREVfQ0IyKTsKIAkJaWdiX3NldHVwX2RjYShhZGFwdGVyKTsKIAl9CiAjZW5kaWYKIAorCS8qCisJICogSW5pdGlhbGl6ZSBoYXJkd2FyZSB0aW1lcjogd2Uga2VlcCBpdCBydW5uaW5nIGp1c3QgaW4gY2FzZQorCSAqIHRoYXQgc29tZSBwcm9ncmFtIG5lZWRzIGl0IGxhdGVyIG9uLgorCSAqLworCW1lbXNldCgmYWRhcHRlci0+Y3ljbGVzLCAwLCBzaXplb2YoYWRhcHRlci0+Y3ljbGVzKSk7CisJYWRhcHRlci0+Y3ljbGVzLnJlYWQgPSBpZ2JfcmVhZF9jbG9jazsKKwlhZGFwdGVyLT5jeWNsZXMubWFzayA9IENMT0NLU09VUkNFX01BU0soNjQpOworCWFkYXB0ZXItPmN5Y2xlcy5tdWx0ID0gMTsKKwlhZGFwdGVyLT5jeWNsZXMuc2hpZnQgPSBJR0JfVFNZTkNfU0hJRlQ7CisJd3IzMihFMTAwMF9USU1JTkNBLAorCSAgICAgKDE8PDI0KSB8CisJICAgICBJR0JfVFNZTkNfQ1lDTEVfVElNRV9JTl9OQU5PU0VDT05EUyAqIElHQl9UU1lOQ19TQ0FMRSk7CisjaWYgMAorCS8qCisJICogQXZvaWQgcm9sbG92ZXIgd2hpbGUgd2UgaW5pdGlhbGl6ZSBieSByZXNldHRpbmcgdGhlIHRpbWUgY291bnRlci4KKwkgKi8KKwl3cjMyKEUxMDAwX1NZU1RJTUwsIDB4MDAwMDAwMDApOworCXdyMzIoRTEwMDBfU1lTVElNSCwgMHgwMDAwMDAwMCk7CisjZWxzZQorCS8qCisJICogU2V0IHJlZ2lzdGVycyBzbyB0aGF0IHJvbGxvdmVyIG9jY3VycyBzb29uIHRvIHRlc3QgdGhpcy4KKwkgKi8KKwl3cjMyKEUxMDAwX1NZU1RJTUwsIDB4MDAwMDAwMDApOworCXdyMzIoRTEwMDBfU1lTVElNSCwgMHhGRjgwMDAwMCk7CisjZW5kaWYKKwl3cmZsKCk7CisJdGltZWNvdW50ZXJfaW5pdCgmYWRhcHRlci0+Y2xvY2ssCisJCQkgJmFkYXB0ZXItPmN5Y2xlcywKKwkJCSBrdGltZV90b19ucyhrdGltZV9nZXRfcmVhbCgpKSk7CisKKwkvKgorCSAqIFN5bmNocm9uaXplIG91ciBOSUMgY2xvY2sgYWdhaW5zdCBzeXN0ZW0gd2FsbCBjbG9jay4gTklDCisJICogdGltZSBzdGFtcCByZWFkaW5nIHJlcXVpcmVzIH4zdXMgcGVyIHNhbXBsZSwgZWFjaCBzYW1wbGUKKwkgKiB3YXMgcHJldHR5IHN0YWJsZSBldmVuIHVuZGVyIGxvYWQgPT4gb25seSByZXF1aXJlIDEwCisJICogc2FtcGxlcyBmb3IgZWFjaCBvZmZzZXQgY29tcGFyaXNvbi4KKwkgKi8KKwltZW1zZXQoJmFkYXB0ZXItPmNvbXBhcmUsIDAsIHNpemVvZihhZGFwdGVyLT5jb21wYXJlKSk7CisJYWRhcHRlci0+Y29tcGFyZS5zb3VyY2UgPSAmYWRhcHRlci0+Y2xvY2s7CisJYWRhcHRlci0+Y29tcGFyZS50YXJnZXQgPSBrdGltZV9nZXRfcmVhbDsKKwlhZGFwdGVyLT5jb21wYXJlLm51bV9zYW1wbGVzID0gMTA7CisJdGltZWNvbXBhcmVfdXBkYXRlKCZhZGFwdGVyLT5jb21wYXJlLCAwKTsKKworI2lmZGVmIERFQlVHCisJeworCQljaGFyIGJ1ZmZlclsxNjBdOworCQlwcmludGsoS0VSTl9ERUJVRworCQkJImlnYjogJXM6IGh3ICVwIGluaXRpYWxpemVkIHRpbWVyXG4iLAorCQkJaWdiX2dldF90aW1lX3N0cihhZGFwdGVyLCBidWZmZXIpLAorCQkJJmFkYXB0ZXItPmh3KTsKKwl9CisjZW5kaWYKKwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IE5ldHdvcmsgQ29ubmVjdGlvblxuIik7CiAJLyogcHJpbnQgYnVzIHR5cGUvc3BlZWQvd2lkdGggaW5mbyAqLwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlczogKFBDSWU6JXM6JXMpICVwTVxuIiwKQEAgLTEzMzAsMTUgKzE1MDIsMTQgQEAKIAlpZiAoaHctPmZsYXNoX2FkZHJlc3MpCiAJCWlvdW5tYXAoaHctPmZsYXNoX2FkZHJlc3MpOwogCi0JaWdiX3JlbW92ZV9kZXZpY2UoaHcpOwogCWlnYl9mcmVlX3F1ZXVlcyhhZGFwdGVyKTsKIGVycl9zd19pbml0OgotZXJyX2h3X2luaXQ6CiAJaW91bm1hcChody0+aHdfYWRkcik7CiBlcnJfaW9yZW1hcDoKIAlmcmVlX25ldGRldihuZXRkZXYpOwogZXJyX2FsbG9jX2V0aGVyZGV2OgotCXBjaV9yZWxlYXNlX3NlbGVjdGVkX3JlZ2lvbnMocGRldiwgYmFycyk7CisJcGNpX3JlbGVhc2Vfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LCBwY2lfc2VsZWN0X2JhcnMocGRldiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElPUkVTT1VSQ0VfTUVNKSk7CiBlcnJfcGNpX3JlZzoKIGVycl9kbWE6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtMTM1OCw5ICsxNTI5LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0jaWZkZWYgQ09ORklHX0lHQl9EQ0EKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotI2VuZGlmCiAJaW50IGVycjsKIAogCS8qIGZsdXNoX3NjaGVkdWxlZCB3b3JrIG1heSByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0YXNrLCBzbwpAQCAtMTM3Niw3ICsxNTQ1LDcgQEAKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRDQSBkaXNhYmxlZFxuIik7CiAJCWRjYV9yZW1vdmVfcmVxdWVzdGVyKCZwZGV2LT5kZXYpOwogCQlhZGFwdGVyLT5mbGFncyAmPSB+SUdCX0ZMQUdfRENBX0VOQUJMRUQ7Ci0JCXdyMzIoRTEwMDBfRENBX0NUUkwsIDEpOworCQl3cjMyKEUxMDAwX0RDQV9DVFJMLCBFMTAwMF9EQ0FfQ1RSTF9EQ0FfTU9ERV9ESVNBQkxFKTsKIAl9CiAjZW5kaWYKIApAQCAtMTM4OSwxNSArMTU1OCwyOSBAQAogCWlmICghaWdiX2NoZWNrX3Jlc2V0X2Jsb2NrKCZhZGFwdGVyLT5odykpCiAJCWlnYl9yZXNldF9waHkoJmFkYXB0ZXItPmh3KTsKIAotCWlnYl9yZW1vdmVfZGV2aWNlKCZhZGFwdGVyLT5odyk7CiAJaWdiX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwogCiAJaWdiX2ZyZWVfcXVldWVzKGFkYXB0ZXIpOwogCi0JaW91bm1hcChhZGFwdGVyLT5ody5od19hZGRyKTsKLQlpZiAoYWRhcHRlci0+aHcuZmxhc2hfYWRkcmVzcykKLQkJaW91bm1hcChhZGFwdGVyLT5ody5mbGFzaF9hZGRyZXNzKTsKLQlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIGFkYXB0ZXItPmJhcnMpOworI2lmZGVmIENPTkZJR19QQ0lfSU9WCisJLyogcmVjbGFpbSByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIFZGcyAqLworCWlmIChhZGFwdGVyLT52Zl9kYXRhKSB7CisJCS8qIGRpc2FibGUgaW92IGFuZCBhbGxvdyB0aW1lIGZvciB0cmFuc2FjdGlvbnMgdG8gY2xlYXIgKi8KKwkJcGNpX2Rpc2FibGVfc3Jpb3YocGRldik7CisJCW1zbGVlcCg1MDApOworCisJCWtmcmVlKGFkYXB0ZXItPnZmX2RhdGEpOworCQlhZGFwdGVyLT52Zl9kYXRhID0gTlVMTDsKKwkJd3IzMihFMTAwMF9JT1ZDVEwsIEUxMDAwX0lPVkNUTF9SRVVTRV9WRlEpOworCQltc2xlZXAoMTAwKTsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIklPViBEaXNhYmxlZFxuIik7CisJfQorI2VuZGlmCisJaW91bm1hcChody0+aHdfYWRkcik7CisJaWYgKGh3LT5mbGFzaF9hZGRyZXNzKQorCQlpb3VubWFwKGh3LT5mbGFzaF9hZGRyZXNzKTsKKwlwY2lfcmVsZWFzZV9zZWxlY3RlZF9yZWdpb25zKHBkZXYsIHBjaV9zZWxlY3RfYmFycyhwZGV2LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU9SRVNPVVJDRV9NRU0pKTsKIAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAKQEAgLTE0MzIsMTEgKzE2MTUsNiBAQAogCWFkYXB0ZXItPm1heF9mcmFtZV9zaXplID0gbmV0ZGV2LT5tdHUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOOwogCWFkYXB0ZXItPm1pbl9mcmFtZV9zaXplID0gRVRIX1pMRU4gKyBFVEhfRkNTX0xFTjsKIAotCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzLiAqLwotCS8qIEhhdmluZyBtb3JlIHF1ZXVlcyB0aGFuIENQVXMgZG9lc24ndCBtYWtlIHNlbnNlLiAqLwotCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSBtaW5fdCh1MzIsIElHQl9NQVhfUlhfUVVFVUVTLCBudW1fb25saW5lX2NwdXMoKSk7Ci0JYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IG1pbl90KHUzMiwgSUdCX01BWF9UWF9RVUVVRVMsIG51bV9vbmxpbmVfY3B1cygpKTsKLQogCS8qIFRoaXMgY2FsbCBtYXkgZGVjcmVhc2UgdGhlIG51bWJlciBvZiBxdWV1ZXMgZGVwZW5kaW5nIG9uCiAJICogaW50ZXJydXB0IG1vZGUuICovCiAJaWdiX3NldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKQEAgLTE0OTksNiArMTY3NywxMCBAQAogCSAqIGNsZWFuX3J4IGhhbmRsZXIgYmVmb3JlIHdlIGRvIHNvLiAgKi8KIAlpZ2JfY29uZmlndXJlKGFkYXB0ZXIpOwogCisJaWdiX3ZtbV9jb250cm9sKGFkYXB0ZXIpOworCWlnYl9zZXRfcmFoX3Bvb2woaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQsIDApOworCWlnYl9zZXRfdm1vbHIoaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpOworCiAJZXJyID0gaWdiX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlcV9pcnE7CkBAIC0xNTc0LDcgKzE3NTYsNiBAQAogICoKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKICAqKi8KLQogaW50IGlnYl9zZXR1cF90eF9yZXNvdXJjZXMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nKQogewpAQCAtMTU4OCw3ICsxNzY5LDcgQEAKIAltZW1zZXQodHhfcmluZy0+YnVmZmVyX2luZm8sIDAsIHNpemUpOwogCiAJLyogcm91bmQgdXAgdG8gbmVhcmVzdCA0SyAqLwotCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5jb3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYyk7CisJdHhfcmluZy0+c2l6ZSA9IHR4X3JpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGUxMDAwX2Fkdl90eF9kZXNjKTsKIAl0eF9yaW5nLT5zaXplID0gQUxJR04odHhfcmluZy0+c2l6ZSwgNDA5Nik7CiAKIAl0eF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgdHhfcmluZy0+c2l6ZSwKQEAgLTE2MzUsNyArMTgxNiw3IEBACiAJZm9yIChpID0gMDsgaSA8IElHQl9NQVhfVFhfUVVFVUVTOyBpKyspIHsKIAkJcl9pZHggPSBpICUgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsKIAkJYWRhcHRlci0+bXVsdGlfdHhfdGFibGVbaV0gPSAmYWRhcHRlci0+dHhfcmluZ1tyX2lkeF07Ci0JfQkKKwl9CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTY1NCwxMyArMTgzNSwxMyBAQAogCWludCBpLCBqOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmKGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmYWRhcHRlci0+dHhfcmluZ1tpXTsKIAkJaiA9IHJpbmctPnJlZ19pZHg7CiAJCXdyMzIoRTEwMDBfVERMRU4oaiksCi0JCQkJcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGUxMDAwX3R4X2Rlc2MpKTsKKwkJICAgICByaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYykpOwogCQl0ZGJhID0gcmluZy0+ZG1hOwogCQl3cjMyKEUxMDAwX1REQkFMKGopLAotCQkJCXRkYmEgJiAweDAwMDAwMDAwZmZmZmZmZmZVTEwpOworCQkgICAgIHRkYmEgJiAweDAwMDAwMDAwZmZmZmZmZmZVTEwpOwogCQl3cjMyKEUxMDAwX1REQkFIKGopLCB0ZGJhID4+IDMyKTsKIAogCQlyaW5nLT5oZWFkID0gRTEwMDBfVERIKGopOwpAQCAtMTY4MCwxMiArMTg2MSwxMSBAQAogCQl3cjMyKEUxMDAwX0RDQV9UWENUUkwoaiksIHR4Y3RybCk7CiAJfQogCi0KLQotCS8qIFVzZSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBUeCBJbnRlciBQYWNrZXQgR2FwIChJUEcpIHRpbWVyICovCisJLyogZGlzYWJsZSBxdWV1ZSAwIHRvIHByZXZlbnQgdGFpbCBidW1wIHcvbyByZS1jb25maWd1cmF0aW9uICovCisJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCXdyMzIoRTEwMDBfVFhEQ1RMKDApLCAwKTsKIAogCS8qIFByb2dyYW0gdGhlIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KLQogCXRjdGwgPSByZDMyKEUxMDAwX1RDVEwpOwogCXRjdGwgJj0gfkUxMDAwX1RDVExfQ1Q7CiAJdGN0bCB8PSBFMTAwMF9UQ1RMX1BTUCB8IEUxMDAwX1RDVExfUlRMQyB8CkBAIC0xNzA5LDIxICsxODg5LDEyIEBACiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKICAqKi8KLQogaW50IGlnYl9zZXR1cF9yeF9yZXNvdXJjZXMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAogCQkJICAgc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlpbnQgc2l6ZSwgZGVzY19sZW47CiAKLSNpZmRlZiBDT05GSUdfSUdCX0xSTwotCXNpemUgPSBzaXplb2Yoc3RydWN0IG5ldF9scm9fZGVzYykgKiBNQVhfTFJPX0RFU0NSSVBUT1JTOwotCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IHZtYWxsb2Moc2l6ZSk7Ci0JaWYgKCFyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpCi0JCWdvdG8gZXJyOwotCW1lbXNldChyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIsIDAsIHNpemUpOwotI2VuZGlmCi0KIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpZ2JfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OwogCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKIAlpZiAoIXJ4X3JpbmctPmJ1ZmZlcl9pbmZvKQpAQCAtMTc1MCwxMCArMTkyMSw2IEBACiAJcmV0dXJuIDA7CiAKIGVycjoKLSNpZmRlZiBDT05GSUdfSUdCX0xSTwotCXZmcmVlKHJ4X3JpbmctPmxyb19tZ3IubHJvX2Fycik7Ci0JcnhfcmluZy0+bHJvX21nci5scm9fYXJyID0gTlVMTDsKLSNlbmRpZgogCXZmcmVlKHJ4X3JpbmctPmJ1ZmZlcl9pbmZvKTsKIAlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAiCiAJCSJ0aGUgcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmdcbiIpOwpAQCAtMTgwMiwxMyArMTk2OSwxMyBAQAogCXJjdGwgJj0gfihFMTAwMF9SQ1RMX0xCTV9UQ1ZSIHwgRTEwMDBfUkNUTF9MQk1fTUFDKTsKIAogCXJjdGwgfD0gRTEwMDBfUkNUTF9FTiB8IEUxMDAwX1JDVExfQkFNIHwgRTEwMDBfUkNUTF9SRE1UU19IQUxGIHwKLQkJKGFkYXB0ZXItPmh3Lm1hYy5tY19maWx0ZXJfdHlwZSA8PCBFMTAwMF9SQ1RMX01PX1NISUZUKTsKKwkJKGh3LT5tYWMubWNfZmlsdGVyX3R5cGUgPDwgRTEwMDBfUkNUTF9NT19TSElGVCk7CiAKIAkvKgogCSAqIGVuYWJsZSBzdHJpcHBpbmcgb2YgQ1JDLiBJdCdzIHVubGlrZWx5IHRoaXMgd2lsbCBicmVhayBCTUMKIAkgKiByZWRpcmVjdGlvbiBhcyBpdCBkaWQgd2l0aCBlMTAwMC4gTmV3ZXIgZmVhdHVyZXMgcmVxdWlyZQogCSAqIHRoYXQgdGhlIEhXIHN0cmlwcyB0aGUgQ1JDLgotCSovCisJICovCiAJcmN0bCB8PSBFMTAwMF9SQ1RMX1NFQ1JDOwogCiAJLyoKQEAgLTE4NTIsNiArMjAxOSwzMCBAQAogCQlzcnJjdGwgfD0gRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUY7CiAJfQogCisJLyogQXR0ZW50aW9uISEhICBGb3IgU1ItSU9WIFBGIGRyaXZlciBvcGVyYXRpb25zIHlvdSBtdXN0IGVuYWJsZQorCSAqIHF1ZXVlIGRyb3AgZm9yIGFsbCBWRiBhbmQgUEYgcXVldWVzIHRvIHByZXZlbnQgaGVhZCBvZiBsaW5lIGJsb2NraW5nCisJICogaWYgYW4gdW4tdHJ1c3RlZCBWRiBkb2VzIG5vdCBwcm92aWRlIGRlc2NyaXB0b3JzIHRvIGhhcmR3YXJlLgorCSAqLworCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KSB7CisJCXUzMiB2bW9scjsKKworCQlqID0gYWRhcHRlci0+cnhfcmluZ1swXS5yZWdfaWR4OworCisJCS8qIHNldCBhbGwgcXVldWUgZHJvcCBlbmFibGUgYml0cyAqLworCQl3cjMyKEUxMDAwX1FERSwgQUxMX1FVRVVFUyk7CisJCXNycmN0bCB8PSBFMTAwMF9TUlJDVExfRFJPUF9FTjsKKworCQkvKiBkaXNhYmxlIHF1ZXVlIDAgdG8gcHJldmVudCB0YWlsIHdyaXRlIHcvbyByZS1jb25maWcgKi8KKwkJd3IzMihFMTAwMF9SWERDVEwoMCksIDApOworCisJCXZtb2xyID0gcmQzMihFMTAwMF9WTU9MUihqKSk7CisJCWlmIChyY3RsICYgRTEwMDBfUkNUTF9MUEUpCisJCQl2bW9sciB8PSBFMTAwMF9WTU9MUl9MUEU7CisJCWlmIChhZGFwdGVyLT5udW1fcnhfcXVldWVzID4gMCkKKwkJCXZtb2xyIHw9IEUxMDAwX1ZNT0xSX1JTU0U7CisJCXdyMzIoRTEwMDBfVk1PTFIoaiksIHZtb2xyKTsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CiAJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CiAJCXdyMzIoRTEwMDBfU1JSQ1RMKGopLCBzcnJjdGwpOwpAQCAtMTg2MSw2ICsyMDUyLDU0IEBACiB9CiAKIC8qKgorICogaWdiX3JscG1sX3NldCAtIHNldCBtYXhpbXVtIHJlY2VpdmUgcGFja2V0IHNpemUKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBtYXhpbXVtIHJlY2VpdmFibGUgcGFja2V0IHNpemUuCisgKiovCitzdGF0aWMgdm9pZCBpZ2JfcmxwbWxfc2V0KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgbWF4X2ZyYW1lX3NpemUgPSBhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUxNiBwZl9pZCA9IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7CisKKwlpZiAoYWRhcHRlci0+dmxncnApCisJCW1heF9mcmFtZV9zaXplICs9IFZMQU5fVEFHX1NJWkU7CisKKwkvKiBpZiB2ZnMgYXJlIGVuYWJsZWQgd2Ugc2V0IFJMUE1MIHRvIHRoZSBsYXJnZXN0IHBvc3NpYmxlIHJlcXVlc3QKKwkgKiBzaXplIGFuZCBzZXQgdGhlIFZNT0xSIFJMUE1MIHRvIHRoZSBzaXplIHdlIG5lZWQgKi8KKwlpZiAocGZfaWQpIHsKKwkJaWdiX3NldF92Zl9ybHBtbChhZGFwdGVyLCBtYXhfZnJhbWVfc2l6ZSwgcGZfaWQpOworCQltYXhfZnJhbWVfc2l6ZSA9IE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSArIFZMQU5fVEFHX1NJWkU7CisJfQorCisJd3IzMihFMTAwMF9STFBNTCwgbWF4X2ZyYW1lX3NpemUpOworfQorCisvKioKKyAqIGlnYl9jb25maWd1cmVfdnRfZGVmYXVsdF9wb29sIC0gQ29uZmlndXJlIFZUIGRlZmF1bHQgcG9vbAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHRoZSBkZWZhdWx0IHBvb2wKKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl9jb25maWd1cmVfdnRfZGVmYXVsdF9wb29sKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUxNiBwZl9pZCA9IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7CisJdTMyIHZ0Y3RsOworCisJLyogbm90IGluIHNyLWlvdiBtb2RlIC0gZG8gbm90aGluZyAqLworCWlmICghcGZfaWQpCisJCXJldHVybjsKKworCXZ0Y3RsID0gcmQzMihFMTAwMF9WVF9DVEwpOworCXZ0Y3RsICY9IH4oRTEwMDBfVlRfQ1RMX0RFRkFVTFRfUE9PTF9NQVNLIHwKKwkJICAgRTEwMDBfVlRfQ1RMX0RJU0FCTEVfREVGX1BPT0wpOworCXZ0Y3RsIHw9IHBmX2lkIDw8IEUxMDAwX1ZUX0NUTF9ERUZBVUxUX1BPT0xfU0hJRlQ7CisJd3IzMihFMTAwMF9WVF9DVEwsIHZ0Y3RsKTsKK30KKworLyoqCiAgKiBpZ2JfY29uZmlndXJlX3J4IC0gQ29uZmlndXJlIHJlY2VpdmUgVW5pdCBhZnRlciBSZXNldAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKgpAQCAtMTg3Miw3ICsyMTExLDcgQEAKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiByY3RsLCByeGNzdW07CiAJdTMyIHJ4ZGN0bDsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAogCS8qIGRpc2FibGUgcmVjZWl2ZXMgd2hpbGUgc2V0dGluZyB1cCB0aGUgZGVzY3JpcHRvcnMgKi8KIAlyY3RsID0gcmQzMihFMTAwMF9SQ1RMKTsKQEAgLTE4ODYsMTQgKzIxMjUsMTQgQEAKIAkvKiBTZXR1cCB0aGUgSFcgUnggSGVhZCBhbmQgVGFpbCBEZXNjcmlwdG9yIFBvaW50ZXJzIGFuZAogCSAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZyAqLwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKLQkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW2ldKTsKLQkJaiA9IHJpbmctPnJlZ19pZHg7CisJCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nW2ldOworCQlpbnQgaiA9IHJpbmctPnJlZ19pZHg7CiAJCXJkYmEgPSByaW5nLT5kbWE7CiAJCXdyMzIoRTEwMDBfUkRCQUwoaiksCi0JCQkJcmRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCk7CisJCSAgICAgcmRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCk7CiAJCXdyMzIoRTEwMDBfUkRCQUgoaiksIHJkYmEgPj4gMzIpOwogCQl3cjMyKEUxMDAwX1JETEVOKGopLAotCQkJICAgICAgIHJpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjKSk7CisJCSAgICAgcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MpKTsKIAogCQlyaW5nLT5oZWFkID0gRTEwMDBfUkRIKGopOwogCQlyaW5nLT50YWlsID0gRTEwMDBfUkRUKGopOwpAQCAtMTkwNywxNiArMjE0Niw2IEBACiAJCXJ4ZGN0bCB8PSBJR0JfUlhfSFRIUkVTSCA8PCA4OwogCQlyeGRjdGwgfD0gSUdCX1JYX1dUSFJFU0ggPDwgMTY7CiAJCXdyMzIoRTEwMDBfUlhEQ1RMKGopLCByeGRjdGwpOwotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JCS8qIEludGl0aWFsIExSTyBTZXR0aW5ncyAqLwotCQlyaW5nLT5scm9fbWdyLm1heF9hZ2dyID0gTUFYX0xST19BR0dSOwotCQlyaW5nLT5scm9fbWdyLm1heF9kZXNjID0gTUFYX0xST19ERVNDUklQVE9SUzsKLQkJcmluZy0+bHJvX21nci5nZXRfc2tiX2hlYWRlciA9IGlnYl9nZXRfc2tiX2hkcjsKLQkJcmluZy0+bHJvX21nci5mZWF0dXJlcyA9IExST19GX05BUEkgfCBMUk9fRl9FWFRSQUNUX1ZMQU5fSUQ7Ci0JCXJpbmctPmxyb19tZ3IuZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCQlyaW5nLT5scm9fbWdyLmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQlyaW5nLT5scm9fbWdyLmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0jZW5kaWYKIAl9CiAKIAlpZiAoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA+IDEpIHsKQEAgLTE5NDEsNyArMjE3MCwxMCBAQAogCQkJCXdyaXRlbChyZXRhLmR3b3JkLAogCQkJCSAgICAgICBody0+aHdfYWRkciArIEUxMDAwX1JFVEEoMCkgKyAoaiAmIH4zKSk7CiAJCX0KLQkJbXJxYyA9IEUxMDAwX01SUUNfRU5BQkxFX1JTU180UTsKKwkJaWYgKGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCQltcnFjID0gRTEwMDBfTVJRQ19FTkFCTEVfVk1EUV9SU1NfMlE7CisJCWVsc2UKKwkJCW1ycWMgPSBFMTAwMF9NUlFDX0VOQUJMRV9SU1NfNFE7CiAKIAkJLyogRmlsbCBvdXQgaGFzaCBmdW5jdGlvbiBzZWVkcyAqLwogCQlmb3IgKGogPSAwOyBqIDwgMTA7IGorKykKQEAgLTE5NjYsMjcgKzIxOTgsMjMgQEAKIAkJcnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9QQ1NEOwogCQl3cjMyKEUxMDAwX1JYQ1NVTSwgcnhjc3VtKTsKIAl9IGVsc2UgeworCQkvKiBFbmFibGUgbXVsdGktcXVldWUgZm9yIHNyLWlvdiAqLworCQlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJCXdyMzIoRTEwMDBfTVJRQywgRTEwMDBfTVJRQ19FTkFCTEVfVk1EUSk7CiAJCS8qIEVuYWJsZSBSZWNlaXZlIENoZWNrc3VtIE9mZmxvYWQgZm9yIFRDUCBhbmQgVURQICovCiAJCXJ4Y3N1bSA9IHJkMzIoRTEwMDBfUlhDU1VNKTsKLQkJaWYgKGFkYXB0ZXItPnJ4X2NzdW0pIHsKLQkJCXJ4Y3N1bSB8PSBFMTAwMF9SWENTVU1fVFVPRkw7CisJCWlmIChhZGFwdGVyLT5yeF9jc3VtKQorCQkJcnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9UVU9GTCB8IEUxMDAwX1JYQ1NVTV9JUFBDU0U7CisJCWVsc2UKKwkJCXJ4Y3N1bSAmPSB+KEUxMDAwX1JYQ1NVTV9UVU9GTCB8IEUxMDAwX1JYQ1NVTV9JUFBDU0UpOwogCi0JCQkvKiBFbmFibGUgSVB2NCBwYXlsb2FkIGNoZWNrc3VtIGZvciBVRFAgZnJhZ21lbnRzCi0JCQkgKiBNdXN0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwYWNrZXQtc3BsaXQuICovCi0JCQlpZiAoYWRhcHRlci0+cnhfcHNfaGRyX3NpemUpCi0JCQkJcnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9JUFBDU0U7Ci0JCX0gZWxzZSB7Ci0JCQlyeGNzdW0gJj0gfkUxMDAwX1JYQ1NVTV9UVU9GTDsKLQkJCS8qIGRvbid0IG5lZWQgdG8gY2xlYXIgSVBQQ1NFIGFzIGl0IGRlZmF1bHRzIHRvIDAgKi8KLQkJfQogCQl3cjMyKEUxMDAwX1JYQ1NVTSwgcnhjc3VtKTsKIAl9CiAKLQlpZiAoYWRhcHRlci0+dmxncnApCi0JCXdyMzIoRTEwMDBfUkxQTUwsCi0JCQkJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgKyBWTEFOX1RBR19TSVpFKTsKLQllbHNlCi0JCXdyMzIoRTEwMDBfUkxQTUwsIGFkYXB0ZXItPm1heF9mcmFtZV9zaXplKTsKKwkvKiBTZXQgdGhlIGRlZmF1bHQgcG9vbCBmb3IgdGhlIFBGJ3MgZmlyc3QgcXVldWUgKi8KKwlpZ2JfY29uZmlndXJlX3Z0X2RlZmF1bHRfcG9vbChhZGFwdGVyKTsKKworCWlnYl9ybHBtbF9zZXQoYWRhcHRlcik7CiAKIAkvKiBFbmFibGUgUmVjZWl2ZXMgKi8KIAl3cjMyKEUxMDAwX1JDVEwsIHJjdGwpOwpAQCAtMjAyOSwxNCArMjI1NywxMCBAQAogc3RhdGljIHZvaWQgaWdiX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkJICAgc3RydWN0IGlnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvKQogewotCWlmIChidWZmZXJfaW5mby0+ZG1hKSB7Ci0JCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJYnVmZmVyX2luZm8tPmRtYSwKLQkJCQlidWZmZXJfaW5mby0+bGVuZ3RoLAotCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwotCQlidWZmZXJfaW5mby0+ZG1hID0gMDsKLQl9CisJYnVmZmVyX2luZm8tPmRtYSA9IDA7CiAJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKKwkJc2tiX2RtYV91bm1hcCgmYWRhcHRlci0+cGRldi0+ZGV2LCBidWZmZXJfaW5mby0+c2tiLAorCQkgICAgICAgICAgICAgIERNQV9UT19ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShidWZmZXJfaW5mby0+c2tiKTsKIAkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAJfQpAQCAtMjEwNSwxMSArMjMyOSw2IEBACiAJdmZyZWUocnhfcmluZy0+YnVmZmVyX2luZm8pOwogCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvID0gTlVMTDsKIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0JdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJyKTsKLQlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOwotI2VuZGlmIAotCiAJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCByeF9yaW5nLT5zaXplLCByeF9yaW5nLT5kZXNjLCByeF9yaW5nLT5kbWEpOwogCiAJcnhfcmluZy0+ZGVzYyA9IE5VTEw7CkBAIC0yMjA5LDE1ICsyNDI4LDE4IEBACiBzdGF0aWMgaW50IGlnYl9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKLQltZW1jcHkoYWRhcHRlci0+aHcubWFjLmFkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShody0+bWFjLmFkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCi0JYWRhcHRlci0+aHcubWFjLm9wcy5yYXJfc2V0KCZhZGFwdGVyLT5odywgYWRhcHRlci0+aHcubWFjLmFkZHIsIDApOworCWh3LT5tYWMub3BzLnJhcl9zZXQoaHcsIGh3LT5tYWMuYWRkciwgMCk7CisKKwlpZ2Jfc2V0X3JhaF9wb29sKGh3LCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50LCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjIzNyw3ICsyNDU5LDcgQEAKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CiAJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7Ci0JdTggICptdGFfbGlzdDsKKwl1OCAgKm10YV9saXN0ID0gTlVMTDsKIAl1MzIgcmN0bDsKIAlpbnQgaTsKIApAQCAtMjI1OCwxNyArMjQ4MCwxNSBAQAogCX0KIAl3cjMyKEUxMDAwX1JDVEwsIHJjdGwpOwogCi0JaWYgKCFuZXRkZXYtPm1jX2NvdW50KSB7Ci0JCS8qIG5vdGhpbmcgdG8gcHJvZ3JhbSwgc28gY2xlYXIgbWMgbGlzdCAqLwotCQlpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdF84MjU3NShodywgTlVMTCwgMCwgMSwKLQkJCQkJICBtYWMtPnJhcl9lbnRyeV9jb3VudCk7Ci0JCXJldHVybjsKKwlpZiAobmV0ZGV2LT5tY19jb3VudCkgeworCQltdGFfbGlzdCA9IGt6YWxsb2MobmV0ZGV2LT5tY19jb3VudCAqIDYsIEdGUF9BVE9NSUMpOworCQlpZiAoIW10YV9saXN0KSB7CisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkgICAgICAgICJmYWlsZWQgdG8gYWxsb2NhdGUgbXVsdGljYXN0IGZpbHRlciBsaXN0XG4iKTsKKwkJCXJldHVybjsKKwkJfQogCX0KIAotCW10YV9saXN0ID0ga3phbGxvYyhuZXRkZXYtPm1jX2NvdW50ICogNiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFtdGFfbGlzdCkKLQkJcmV0dXJuOwotCiAJLyogVGhlIHNoYXJlZCBmdW5jdGlvbiBleHBlY3RzIGEgcGFja2VkIGFycmF5IG9mIG9ubHkgYWRkcmVzc2VzLiAqLwogCW1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKIApAQCAtMjI3OCw4ICsyNDk4LDEzIEBACiAJCW1lbWNweShtdGFfbGlzdCArIChpKkVUSF9BTEVOKSwgbWNfcHRyLT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCQltY19wdHIgPSBtY19wdHItPm5leHQ7CiAJfQotCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTc1KGh3LCBtdGFfbGlzdCwgaSwgMSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWMtPnJhcl9lbnRyeV9jb3VudCk7CisJaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIG10YV9saXN0LCBpLAorCSAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgKyAxLAorCSAgICAgICAgICAgICAgICAgICAgICAgIG1hYy0+cmFyX2VudHJ5X2NvdW50KTsKKworCWlnYl9zZXRfbWNfbGlzdF9wb29scyhhZGFwdGVyLCBpLCBtYWMtPnJhcl9lbnRyeV9jb3VudCk7CisJaWdiX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhhZGFwdGVyKTsKKwogCWtmcmVlKG10YV9saXN0KTsKIH0KIApAQCAtMjI5Miw2ICsyNTE3LDQ2IEBACiB9CiAKIC8qKgorICogaWdiX2hhc19saW5rIC0gY2hlY2sgc2hhcmVkIGNvZGUgZm9yIGxpbmsgYW5kIGRldGVybWluZSB1cC9kb3duCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBkcml2ZXIgcHJpdmF0ZSBpbmZvCisgKiovCitzdGF0aWMgYm9vbCBpZ2JfaGFzX2xpbmsoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJYm9vbCBsaW5rX2FjdGl2ZSA9IGZhbHNlOworCXMzMiByZXRfdmFsID0gMDsKKworCS8qIGdldF9saW5rX3N0YXR1cyBpcyBzZXQgb24gTFNDIChsaW5rIHN0YXR1cykgaW50ZXJydXB0IG9yCisJICogcnggc2VxdWVuY2UgZXJyb3IgaW50ZXJydXB0LiAgZ2V0X2xpbmtfc3RhdHVzIHdpbGwgc3RheQorCSAqIGZhbHNlIHVudGlsIHRoZSBlMTAwMF9jaGVja19mb3JfbGluayBlc3RhYmxpc2hlcyBsaW5rCisJICogZm9yIGNvcHBlciBhZGFwdGVycyBPTkxZCisJICovCisJc3dpdGNoIChody0+cGh5Lm1lZGlhX3R5cGUpIHsKKwljYXNlIGUxMDAwX21lZGlhX3R5cGVfY29wcGVyOgorCQlpZiAoaHctPm1hYy5nZXRfbGlua19zdGF0dXMpIHsKKwkJCXJldF92YWwgPSBody0+bWFjLm9wcy5jaGVja19mb3JfbGluayhodyk7CisJCQlsaW5rX2FjdGl2ZSA9ICFody0+bWFjLmdldF9saW5rX3N0YXR1czsKKwkJfSBlbHNlIHsKKwkJCWxpbmtfYWN0aXZlID0gdHJ1ZTsKKwkJfQorCQlicmVhazsKKwljYXNlIGUxMDAwX21lZGlhX3R5cGVfZmliZXI6CisJCXJldF92YWwgPSBody0+bWFjLm9wcy5jaGVja19mb3JfbGluayhodyk7CisJCWxpbmtfYWN0aXZlID0gISEocmQzMihFMTAwMF9TVEFUVVMpICYgRTEwMDBfU1RBVFVTX0xVKTsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlczoKKwkJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLmNoZWNrX2Zvcl9saW5rKGh3KTsKKwkJbGlua19hY3RpdmUgPSBody0+bWFjLnNlcmRlc19oYXNfbGluazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwljYXNlIGUxMDAwX21lZGlhX3R5cGVfdW5rbm93bjoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxpbmtfYWN0aXZlOworfQorCisvKioKICAqIGlnYl93YXRjaGRvZyAtIFRpbWVyIENhbGwtYmFjawogICogQGRhdGE6IHBvaW50ZXIgdG8gYWRhcHRlciBjYXN0IGludG8gYW4gdW5zaWduZWQgbG9uZwogICoqLwpAQCAtMjMwNywzNCArMjU3MiwxNiBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCQlzdHJ1Y3QgaWdiX2FkYXB0ZXIsIHdhdGNoZG9nX3Rhc2spOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0KIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7Ci0Jc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmYWRhcHRlci0+aHcubWFjOwogCXUzMiBsaW5rOwogCXUzMiBlaWNzID0gMDsKLQlzMzIgcmV0X3ZhbDsKIAlpbnQgaTsKIAotCWlmICgobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSAmJgotCSAgICAocmQzMihFMTAwMF9TVEFUVVMpICYgRTEwMDBfU1RBVFVTX0xVKSkKKwlsaW5rID0gaWdiX2hhc19saW5rKGFkYXB0ZXIpOworCWlmICgobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSAmJiBsaW5rKQogCQlnb3RvIGxpbmtfdXA7CiAKLQlyZXRfdmFsID0gaHctPm1hYy5vcHMuY2hlY2tfZm9yX2xpbmsoJmFkYXB0ZXItPmh3KTsKLQlpZiAoKHJldF92YWwgPT0gRTEwMDBfRVJSX1BIWSkgJiYKLQkgICAgKGh3LT5waHkudHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpICYmCi0JICAgIChyZDMyKEUxMDAwX0NUUkwpICYKLQkgICAgIEUxMDAwX1BIWV9DVFJMX0dCRV9ESVNBQkxFKSkKLQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCSAiR2lnYWJpdCBoYXMgYmVlbiBkaXNhYmxlZCwgZG93bmdyYWRpbmcgc3BlZWRcbiIpOwotCi0JaWYgKChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpICYmCi0JICAgICEocmQzMihFMTAwMF9UWENXKSAmIEUxMDAwX1RYQ1dfQU5FKSkKLQkJbGluayA9IG1hYy0+c2VyZGVzX2hhc19saW5rOwotCWVsc2UKLQkJbGluayA9IHJkMzIoRTEwMDBfU1RBVFVTKSAmCi0JCQkJICAgICAgRTEwMDBfU1RBVFVTX0xVOwotCiAJaWYgKGxpbmspIHsKIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKIAkJCXUzMiBjdHJsOwpAQCAtMjM3Myw2ICsyNjIwLDkgQEAKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCisJCQlpZ2JfcGluZ19hbGxfdmZzKGFkYXB0ZXIpOworCisJCQkvKiBsaW5rIHN0YXRlIGhhcyBjaGFuZ2VkLCBzY2hlZHVsZSBwaHkgaW5mbyB1cGRhdGUgKi8KIAkJCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCQltb2RfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLAogCQkJCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIDIgKiBIWikpOwpAQCAtMjM4Niw2ICsyNjM2LDEwIEBACiAJCQkgICAgICAgbmV0ZGV2LT5uYW1lKTsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKKworCQkJaWdiX3BpbmdfYWxsX3ZmcyhhZGFwdGVyKTsKKworCQkJLyogbGluayBzdGF0ZSBoYXMgY2hhbmdlZCwgc2NoZWR1bGUgcGh5IGluZm8gdXBkYXRlICovCiAJCQlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT5waHlfaW5mb190aW1lciwKIAkJCQkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyAyICogSFopKTsKQEAgLTIzOTUsOSArMjY0OSw5IEBACiBsaW5rX3VwOgogCWlnYl91cGRhdGVfc3RhdHMoYWRhcHRlcik7CiAKLQltYWMtPnR4X3BhY2tldF9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLnRwdCAtIGFkYXB0ZXItPnRwdF9vbGQ7CisJaHctPm1hYy50eF9wYWNrZXRfZGVsdGEgPSBhZGFwdGVyLT5zdGF0cy50cHQgLSBhZGFwdGVyLT50cHRfb2xkOwogCWFkYXB0ZXItPnRwdF9vbGQgPSBhZGFwdGVyLT5zdGF0cy50cHQ7Ci0JbWFjLT5jb2xsaXNpb25fZGVsdGEgPSBhZGFwdGVyLT5zdGF0cy5jb2xjIC0gYWRhcHRlci0+Y29sY19vbGQ7CisJaHctPm1hYy5jb2xsaXNpb25fZGVsdGEgPSBhZGFwdGVyLT5zdGF0cy5jb2xjIC0gYWRhcHRlci0+Y29sY19vbGQ7CiAJYWRhcHRlci0+Y29sY19vbGQgPSBhZGFwdGVyLT5zdGF0cy5jb2xjOwogCiAJYWRhcHRlci0+Z29yYyA9IGFkYXB0ZXItPnN0YXRzLmdvcmMgLSBhZGFwdGVyLT5nb3JjX29sZDsKQEAgLTI0MDgsNyArMjY2Miw3IEBACiAJaWdiX3VwZGF0ZV9hZGFwdGl2ZSgmYWRhcHRlci0+aHcpOwogCiAJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKLQkJaWYgKElHQl9ERVNDX1VOVVNFRCh0eF9yaW5nKSArIDEgPCB0eF9yaW5nLT5jb3VudCkgeworCQlpZiAoaWdiX2Rlc2NfdW51c2VkKHR4X3JpbmcpICsgMSA8IHR4X3JpbmctPmNvdW50KSB7CiAJCQkvKiBXZSd2ZSBsb3N0IGxpbmssIHNvIHRoZSBjb250cm9sbGVyIHN0b3BzIERNQSwKIAkJCSAqIGJ1dCB3ZSd2ZSBnb3QgcXVldWVkIFR4IHdvcmsgdGhhdCdzIG5ldmVyIGdvaW5nCiAJCQkgKiB0byBnZXQgZG9uZSwgc28gcmVzZXQgY29udHJvbGxlciB0byBmbHVzaCBUeC4KQEAgLTI1NTQsNyArMjgwOCw3IEBACiAJCWlmIChieXRlcyA+IDI1MDAwKSB7CiAJCQlpZiAocGFja2V0cyA+IDM1KQogCQkJCXJldHZhbCA9IGxvd19sYXRlbmN5OwotCQl9IGVsc2UgaWYgKGJ5dGVzIDwgNjAwMCkgeworCQl9IGVsc2UgaWYgKGJ5dGVzIDwgMTUwMCkgewogCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7CiAJCX0KIAkJYnJlYWs7CkBAIC0yNTg2LDE1ICsyODQwLDEzIEBACiAJCQkJCSAgICBhZGFwdGVyLT50eF9pdHIsCiAJCQkJCSAgICBhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9wYWNrZXRzLAogCQkJCQkgICAgYWRhcHRlci0+dHhfcmluZy0+dG90YWxfYnl0ZXMpOwotCiAJCWN1cnJlbnRfaXRyID0gbWF4KGFkYXB0ZXItPnJ4X2l0ciwgYWRhcHRlci0+dHhfaXRyKTsKIAl9IGVsc2UgewogCQljdXJyZW50X2l0ciA9IGFkYXB0ZXItPnJ4X2l0cjsKIAl9CiAKIAkvKiBjb25zZXJ2YXRpdmUgbW9kZSAoaXRyIDMpIGVsaW1pbmF0ZXMgdGhlIGxvd2VzdF9sYXRlbmN5IHNldHRpbmcgKi8KLQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgPT0gMyAmJgotCSAgICBjdXJyZW50X2l0ciA9PSBsb3dlc3RfbGF0ZW5jeSkKKwlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgPT0gMyAmJiBjdXJyZW50X2l0ciA9PSBsb3dlc3RfbGF0ZW5jeSkKIAkJY3VycmVudF9pdHIgPSBsb3dfbGF0ZW5jeTsKIAogCXN3aXRjaCAoY3VycmVudF9pdHIpIHsKQEAgLTI2NDYsNiArMjg5OCw3IEBACiAjZGVmaW5lIElHQl9UWF9GTEFHU19WTEFOCQkweDAwMDAwMDAyCiAjZGVmaW5lIElHQl9UWF9GTEFHU19UU08JCTB4MDAwMDAwMDQKICNkZWZpbmUgSUdCX1RYX0ZMQUdTX0lQVjQJCTB4MDAwMDAwMDgKKyNkZWZpbmUgSUdCX1RYX0ZMQUdTX1RTVEFNUCAgICAgICAgICAgICAweDAwMDAwMDEwCiAjZGVmaW5lIElHQl9UWF9GTEFHU19WTEFOX01BU0sJMHhmZmZmMDAwMAogI2RlZmluZSBJR0JfVFhfRkxBR1NfVkxBTl9TSElGVAkxNgogCkBAIC0yNzExLDcgKzI5NjQsNyBAQAogCW1zc19sNGxlbl9pZHggPSAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA8PCBFMTAwMF9BRFZUWERfTVNTX1NISUZUKTsKIAltc3NfbDRsZW5faWR4IHw9IChsNGxlbiA8PCBFMTAwMF9BRFZUWERfTDRMRU5fU0hJRlQpOwogCi0JLyogQ29udGV4dCBpbmRleCBtdXN0IGJlIHVuaXF1ZSBwZXIgcmluZy4gKi8KKwkvKiBGb3IgODI1NzUsIGNvbnRleHQgaW5kZXggbXVzdCBiZSB1bmlxdWUgcGVyIHJpbmcuICovCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfTkVFRF9DVFhfSURYKQogCQltc3NfbDRsZW5faWR4IHw9IHR4X3JpbmctPnF1ZXVlX2luZGV4IDw8IDQ7CiAKQEAgLTI3NTYsMTMgKzMwMDksMjQgQEAKIAkJdHVfY21kIHw9IChFMTAwMF9UWERfQ01EX0RFWFQgfCBFMTAwMF9BRFZUWERfRFRZUF9DVFhUKTsKIAogCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewotCQkJc3dpdGNoIChza2ItPnByb3RvY29sKSB7Ci0JCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgorCQkJX19iZTE2IHByb3RvY29sOworCisJCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIHsKKwkJCQljb25zdCBzdHJ1Y3Qgdmxhbl9ldGhoZHIgKnZoZHIgPQorCQkJCSAgICAgICAgICAoY29uc3Qgc3RydWN0IHZsYW5fZXRoaGRyKilza2ItPmRhdGE7CisKKwkJCQlwcm90b2NvbCA9IHZoZHItPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CisJCQl9IGVsc2UgeworCQkJCXByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKKwkJCX0KKworCQkJc3dpdGNoIChwcm90b2NvbCkgeworCQkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9JUFY0OwogCQkJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCiAJCQkJCXR1X2NtZCB8PSBFMTAwMF9BRFZUWERfVFVDTURfTDRUX1RDUDsKIAkJCQlicmVhazsKLQkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwkJCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBWNik6CiAJCQkJLyogWFhYIHdoYXQgYWJvdXQgb3RoZXIgVjYgaGVhZGVycz8/ICovCiAJCQkJaWYgKGlwdjZfaGRyKHNrYiktPm5leHRoZHIgPT0gSVBQUk9UT19UQ1ApCiAJCQkJCXR1X2NtZCB8PSBFMTAwMF9BRFZUWERfVFVDTURfTDRUX1RDUDsKQEAgLTI3ODEsNiArMzA0NSw4IEBACiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX05FRURfQ1RYX0lEWCkKIAkJCWNvbnRleHRfZGVzYy0+bXNzX2w0bGVuX2lkeCA9CiAJCQkJY3B1X3RvX2xlMzIodHhfcmluZy0+cXVldWVfaW5kZXggPDwgNCk7CisJCWVsc2UKKwkJCWNvbnRleHRfZGVzYy0+bXNzX2w0bGVuX2lkeCA9IDA7CiAKIAkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOwogCQlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7CkBAIC0yNzkzLDggKzMwNTksNiBAQAogCiAJCXJldHVybiB0cnVlOwogCX0KLQotCiAJcmV0dXJuIGZhbHNlOwogfQogCkBAIC0yODA5LDI1ICszMDczLDMzIEBACiAJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAJdW5zaWduZWQgaW50IGNvdW50ID0gMCwgaTsKIAl1bnNpZ25lZCBpbnQgZjsKKwlkbWFfYWRkcl90ICptYXA7CiAKIAlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CiAKKwlpZiAoc2tiX2RtYV9tYXAoJmFkYXB0ZXItPnBkZXYtPmRldiwgc2tiLCBETUFfVE9fREVWSUNFKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJUWCBETUEgbWFwIGZhaWxlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCW1hcCA9IHNrYl9zaGluZm8oc2tiKS0+ZG1hX21hcHM7CisKIAlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAlCVUdfT04obGVuID49IElHQl9NQVhfREFUQV9QRVJfVFhEKTsKIAlidWZmZXJfaW5mby0+bGVuZ3RoID0gbGVuOwogCS8qIHNldCB0aW1lX3N0YW1wICpiZWZvcmUqIGRtYSB0byBoZWxwIGF2b2lkIGEgcG9zc2libGUgcmFjZSAqLwogCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAlidWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IGk7Ci0JYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIHNrYi0+ZGF0YSwgbGVuLAotCQkJCQkgIFBDSV9ETUFfVE9ERVZJQ0UpOworCWJ1ZmZlcl9pbmZvLT5kbWEgPSBtYXBbY291bnRdOwogCWNvdW50Kys7Ci0JaSsrOwotCWlmIChpID09IHR4X3JpbmctPmNvdW50KQotCQlpID0gMDsKIAogCWZvciAoZiA9IDA7IGYgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBmKyspIHsKIAkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKIAorCQlpKys7CisJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJaSA9IDA7CisKIAkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZdOwogCQlsZW4gPSBmcmFnLT5zaXplOwogCkBAIC0yODM2LDE5ICszMTA4LDEwIEBACiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBsZW47CiAJCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKIAkJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOwotCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCi0JCQkJCQlmcmFnLT5wYWdlLAotCQkJCQkJZnJhZy0+cGFnZV9vZmZzZXQsCi0JCQkJCQlsZW4sCi0JCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKLQorCQlidWZmZXJfaW5mby0+ZG1hID0gbWFwW2NvdW50XTsKIAkJY291bnQrKzsKLQkJaSsrOwotCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKLQkJCWkgPSAwOwogCX0KIAotCWkgPSAoKGkgPT0gMCkgPyB0eF9yaW5nLT5jb3VudCAtIDEgOiBpIC0gMSk7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOwogCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS5uZXh0X3RvX3dhdGNoID0gaTsKIApAQCAtMjg3MSw2ICszMTM0LDkgQEAKIAlpZiAodHhfZmxhZ3MgJiBJR0JfVFhfRkxBR1NfVkxBTikKIAkJY21kX3R5cGVfbGVuIHw9IEUxMDAwX0FEVlRYRF9EQ01EX1ZMRTsKIAorCWlmICh0eF9mbGFncyAmIElHQl9UWF9GTEFHU19UU1RBTVApCisJCWNtZF90eXBlX2xlbiB8PSBFMTAwMF9BRFZUWERfTUFDX1RTVEFNUDsKKwogCWlmICh0eF9mbGFncyAmIElHQl9UWF9GTEFHU19UU08pIHsKIAkJY21kX3R5cGVfbGVuIHw9IEUxMDAwX0FEVlRYRF9EQ01EX1RTRTsKIApAQCAtMjkzMyw3ICszMTk5LDcgQEAKIAogCS8qIFdlIG5lZWQgdG8gY2hlY2sgYWdhaW4gaW4gYSBjYXNlIGFub3RoZXIgQ1BVIGhhcyBqdXN0CiAJICogbWFkZSByb29tIGF2YWlsYWJsZS4gKi8KLQlpZiAoSUdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpIDwgc2l6ZSkKKwlpZiAoaWdiX2Rlc2NfdW51c2VkKHR4X3JpbmcpIDwgc2l6ZSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIEEgcmVwcmlldmUhICovCkBAIC0yOTQ1LDEzICszMjExLDExIEBACiBzdGF0aWMgaW50IGlnYl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkgICAgIHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZywgaW50IHNpemUpCiB7Ci0JaWYgKElHQl9ERVNDX1VOVVNFRCh0eF9yaW5nKSA+PSBzaXplKQorCWlmIChpZ2JfZGVzY191bnVzZWQodHhfcmluZykgPj0gc2l6ZSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIF9faWdiX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBzaXplKTsKIH0KIAotI2RlZmluZSBUWERfVVNFX0NPVU5UKFMpICgoKFMpID4+IChJR0JfTUFYX1RYRF9QV1IpKSArIDEpCi0KIHN0YXRpYyBpbnQgaWdiX3htaXRfZnJhbWVfcmluZ19hZHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCSAgIHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZykKQEAgLTI5NTksMTEgKzMyMjMsMTAgQEAKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXVuc2lnbmVkIGludCBmaXJzdDsKIAl1bnNpZ25lZCBpbnQgdHhfZmxhZ3MgPSAwOwotCXVuc2lnbmVkIGludCBsZW47CiAJdTggaGRyX2xlbiA9IDA7CisJaW50IGNvdW50ID0gMDsKIAlpbnQgdHNvID0gMDsKLQotCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJdW5pb24gc2tiX3NoYXJlZF90eCAqc2h0eDsKIAogCWlmICh0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC0yOTg0LDcgKzMyNDcsMjEgQEAKIAkJLyogdGhpcyBpcyBhIGhhcmQgZXJyb3IgKi8KIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KLQlza2Jfb3JwaGFuKHNrYik7CisKKwkvKgorCSAqIFRPRE86IGNoZWNrIHRoYXQgdGhlcmUgY3VycmVudGx5IGlzIG5vIG90aGVyIHBhY2tldCB3aXRoCisJICogdGltZSBzdGFtcGluZyBpbiB0aGUgcXVldWUKKwkgKgorCSAqIFdoZW4gZG9pbmcgdGltZSBzdGFtcGluZywga2VlcCB0aGUgY29ubmVjdGlvbiB0byB0aGUgc29ja2V0CisJICogYSB3aGlsZSBsb25nZXI6IGl0IGlzIHN0aWxsIG5lZWRlZCBieSBza2JfaHd0c3RhbXBfdHgoKSwKKwkgKiBjYWxsZWQgZWl0aGVyIGluIGlnYl90eF9od3RzdGFtcCgpIG9yIGJ5IG91ciBjYWxsZXIgd2hlbgorCSAqIGRvaW5nIHNvZnR3YXJlIHRpbWUgc3RhbXBpbmcuCisJICovCisJc2h0eCA9IHNrYl90eChza2IpOworCWlmICh1bmxpa2VseShzaHR4LT5oYXJkd2FyZSkpIHsKKwkJc2h0eC0+aW5fcHJvZ3Jlc3MgPSAxOworCQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfVFNUQU1QOworCX0KIAogCWlmIChhZGFwdGVyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKIAkJdHhfZmxhZ3MgfD0gSUdCX1RYX0ZMQUdTX1ZMQU47CkBAIC0yOTk1LDcgKzMyNzIsNiBAQAogCQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfSVBWNDsKIAogCWZpcnN0ID0gdHhfcmluZy0+bmV4dF90b191c2U7Ci0KIAl0c28gPSBza2JfaXNfZ3NvKHNrYikgPyBpZ2JfdHNvX2FkdihhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzLAogCQkJCQkgICAgICAmaGRyX2xlbikgOiAwOwogCkBAIC0zMDA2LDE4ICszMjgyLDI3IEBACiAKIAlpZiAodHNvKQogCQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfVFNPOwotCWVsc2UgaWYgKGlnYl90eF9jc3VtX2FkdihhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzKSkKLQkJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQotCQkJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19DU1VNOworCWVsc2UgaWYgKGlnYl90eF9jc3VtX2FkdihhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzKSAmJgorCSAgICAgICAgIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkKKwkJdHhfZmxhZ3MgfD0gSUdCX1RYX0ZMQUdTX0NTVU07CiAKLQlpZ2JfdHhfcXVldWVfYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHR4X2ZsYWdzLAotCQkJIGlnYl90eF9tYXBfYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgZmlyc3QpLAotCQkJIHNrYi0+bGVuLCBoZHJfbGVuKTsKKwkvKgorCSAqIGNvdW50IHJlZmxlY3RzIGRlc2NyaXB0b3JzIG1hcHBlZCwgaWYgMCB0aGVuIG1hcHBpbmcgZXJyb3IKKwkgKiBoYXMgb2NjdXJlZCBhbmQgd2UgbmVlZCB0byByZXdpbmQgdGhlIGRlc2NyaXB0b3IgcXVldWUKKwkgKi8KKwljb3VudCA9IGlnYl90eF9tYXBfYWR2KGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgZmlyc3QpOwogCi0JbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0KLQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc3BhY2UgaW4gdGhlIHJpbmcgZm9yIHRoZSBuZXh0IHNlbmQuICovCi0JaWdiX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBNQVhfU0tCX0ZSQUdTICsgNCk7CisJaWYgKGNvdW50KSB7CisJCWlnYl90eF9xdWV1ZV9hZHYoYWRhcHRlciwgdHhfcmluZywgdHhfZmxhZ3MsIGNvdW50LAorCQkJICAgICAgICAgc2tiLT5sZW4sIGhkcl9sZW4pOworCQluZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwkJLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNwYWNlIGluIHRoZSByaW5nIGZvciB0aGUgbmV4dCBzZW5kLiAqLworCQlpZ2JfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIE1BWF9TS0JfRlJBR1MgKyA0KTsKKwl9IGVsc2UgeworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tmaXJzdF0udGltZV9zdGFtcCA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gZmlyc3Q7CisJfQogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTMwMjgsNyArMzMxMyw3IEBACiAJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nOwogCiAJaW50IHJfaWR4ID0gMDsKLQlyX2lkeCA9IHNrYi0+cXVldWVfbWFwcGluZyAmIChJR0JfTUFYX1RYX1FVRVVFUyAtIDEpOworCXJfaWR4ID0gc2tiLT5xdWV1ZV9tYXBwaW5nICYgKElHQl9BQlNfTUFYX1RYX1FVRVVFUyAtIDEpOwogCXR4X3JpbmcgPSBhZGFwdGVyLT5tdWx0aV90eF90YWJsZVtyX2lkeF07CiAKIAkvKiBUaGlzIGdvZXMgYmFjayB0byB0aGUgcXVlc3Rpb24gb2YgaG93IHRvIGxvZ2ljYWxseSBtYXAgYSB0eCBxdWV1ZQpAQCAtMzA1MCw4ICszMzM1LDggQEAKIAkvKiBEbyB0aGUgcmVzZXQgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCAqLwogCWFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQrKzsKIAlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKLQl3cjMyKEUxMDAwX0VJQ1MsIGFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2sgJgotCQl+KEUxMDAwX0VJTVNfVENQX1RJTUVSIHwgRTEwMDBfRUlNU19PVEhFUikpOworCXdyMzIoRTEwMDBfRUlDUywKKwkgICAgIChhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrICYgfmFkYXB0ZXItPmVpbXNfb3RoZXIpKTsKIH0KIAogc3RhdGljIHZvaWQgaWdiX3Jlc2V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMzA2OSw4ICszMzU0LDcgQEAKICAqIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGRldmljZSBzdGF0aXN0aWNzIHN0cnVjdHVyZS4KICAqIFRoZSBzdGF0aXN0aWNzIGFyZSBhY3R1YWxseSB1cGRhdGVkIGZyb20gdGhlIHRpbWVyIGNhbGxiYWNrLgogICoqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKLWlnYl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaWdiX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKQEAgLTMwOTYsNyArMzM4MCw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotI2RlZmluZSBNQVhfU1REX0pVTUJPX0ZSQU1FX1NJWkUgOTIzNAogCWlmIChtYXhfZnJhbWUgPiBNQVhfU1REX0pVTUJPX0ZSQU1FX1NJWkUpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiTVRVID4gOTIxNiBub3Qgc3VwcG9ydGVkLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzEwNCw2ICszMzg3LDcgQEAKIAogCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKIAkJbXNsZWVwKDEpOworCiAJLyogaWdiX2Rvd24gaGFzIGEgZGVwZW5kZW5jeSBvbiBtYXhfZnJhbWVfc2l6ZSAqLwogCWFkYXB0ZXItPm1heF9mcmFtZV9zaXplID0gbWF4X2ZyYW1lOwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCkBAIC0zMTI5LDYgKzM0MTMsMTIgQEAKICNlbHNlCiAJCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBQQUdFX1NJWkUgLyAyOwogI2VuZGlmCisKKwkvKiBpZiBzci1pb3YgaXMgZW5hYmxlZCB3ZSBuZWVkIHRvIGZvcmNlIGJ1ZmZlciBzaXplIHRvIDFLIG9yIGxhcmdlciAqLworCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ICYmCisJICAgIChhZGFwdGVyLT5yeF9idWZmZXJfbGVuIDwgSUdCX1JYQlVGRkVSXzEwMjQpKQorCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gSUdCX1JYQlVGRkVSXzEwMjQ7CisKIAkvKiBhZGp1c3QgYWxsb2NhdGlvbiBpZiBMUEUgcHJvdGVjdHMgdXMsIGFuZCB3ZSBhcmVuJ3QgdXNpbmcgU0JQICovCiAJaWYgKChtYXhfZnJhbWUgPT0gRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOKSB8fAogCSAgICAgKG1heF9mcmFtZSA9PSBNQVhJTVVNX0VUSEVSTkVUX1ZMQU5fU0laRSkpCkBAIC0zMjczLDggKzM1NjMsNyBAQAogCS8qIFBoeSBTdGF0cyAqLwogCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKIAkJaWYgKChhZGFwdGVyLT5saW5rX3NwZWVkID09IFNQRUVEXzEwMDApICYmCi0JCSAgICghaWdiX3JlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywKLQkJCQkJICAgICAgJnBoeV90bXApKSkgeworCQkgICAoIWlnYl9yZWFkX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9TVEFUVVMsICZwaHlfdG1wKSkpIHsKIAkJCXBoeV90bXAgJj0gUEhZX0lETEVfRVJST1JfQ09VTlRfTUFTSzsKIAkJCWFkYXB0ZXItPnBoeV9zdGF0cy5pZGxlX2Vycm9ycyArPSBwaHlfdG1wOwogCQl9CkBAIC0zMjg2LDcgKzM1NzUsNiBAQAogCWFkYXB0ZXItPnN0YXRzLm1ncGRjICs9IHJkMzIoRTEwMDBfTUdUUERDKTsKIH0KIAotCiBzdGF0aWMgaXJxcmV0dXJuX3QgaWdiX21zaXhfb3RoZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZGF0YTsKQEAgLTMyOTUsMTUgKzM1ODMsMjQgQEAKIAl1MzIgaWNyID0gcmQzMihFMTAwMF9JQ1IpOwogCiAJLyogcmVhZGluZyBJQ1IgY2F1c2VzIGJpdCAzMSBvZiBFSUNSIHRvIGJlIGNsZWFyZWQgKi8KLQlpZiAoIShpY3IgJiBFMTAwMF9JQ1JfTFNDKSkKLQkJZ290byBub19saW5rX2ludGVycnVwdDsKLQlody0+bWFjLmdldF9saW5rX3N0YXR1cyA9IDE7Ci0JLyogZ3VhcmQgYWdhaW5zdCBpbnRlcnJ1cHQgd2hlbiB3ZSdyZSBnb2luZyBkb3duICovCi0JaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7Ci0JCi1ub19saW5rX2ludGVycnVwdDoKLQl3cjMyKEUxMDAwX0lNUywgRTEwMDBfSU1TX0xTQyk7CisKKwlpZihpY3IgJiBFMTAwMF9JQ1JfRE9VVFNZTkMpIHsKKwkJLyogSFcgaXMgcmVwb3J0aW5nIERNQSBpcyBvdXQgb2Ygc3luYyAqLworCQlhZGFwdGVyLT5zdGF0cy5kb29zeW5jKys7CisJfQorCisJLyogQ2hlY2sgZm9yIGEgbWFpbGJveCBldmVudCAqLworCWlmIChpY3IgJiBFMTAwMF9JQ1JfVk1NQikKKwkJaWdiX21zZ190YXNrKGFkYXB0ZXIpOworCisJaWYgKGljciAmIEUxMDAwX0lDUl9MU0MpIHsKKwkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOworCQkvKiBndWFyZCBhZ2FpbnN0IGludGVycnVwdCB3aGVuIHdlJ3JlIGdvaW5nIGRvd24gKi8KKwkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOworCX0KKworCXdyMzIoRTEwMDBfSU1TLCBFMTAwMF9JTVNfTFNDIHwgRTEwMDBfSU1TX0RPVVRTWU5DIHwgRTEwMDBfSU1TX1ZNTUIpOwogCXdyMzIoRTEwMDBfRUlNUywgYWRhcHRlci0+ZWltc19vdGhlcik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC0zMzE5LDYgKzM2MTYsNyBAQAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKQogCQlpZ2JfdXBkYXRlX3R4X2RjYSh0eF9yaW5nKTsKICNlbmRpZgorCiAJdHhfcmluZy0+dG90YWxfYnl0ZXMgPSAwOwogCXR4X3JpbmctPnRvdGFsX3BhY2tldHMgPSAwOwogCkBAIC0zMzM5LDEzICszNjM3LDExIEBACiAJaWYgKChyaW5nLT5hZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpICYmIHJpbmctPnNldF9pdHIpIHsKIAkJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAkJY2FzZSBlMTAwMF84MjU3NjoKLQkJCXdyMzIocmluZy0+aXRyX3JlZ2lzdGVyLAotCQkJICAgICByaW5nLT5pdHJfdmFsIHwKKwkJCXdyMzIocmluZy0+aXRyX3JlZ2lzdGVyLCByaW5nLT5pdHJfdmFsIHwKIAkJCSAgICAgMHg4MDAwMDAwMCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXdyMzIocmluZy0+aXRyX3JlZ2lzdGVyLAotCQkJICAgICByaW5nLT5pdHJfdmFsIHwKKwkJCXdyMzIocmluZy0+aXRyX3JlZ2lzdGVyLCByaW5nLT5pdHJfdmFsIHwKIAkJCSAgICAgKHJpbmctPml0cl92YWwgPDwgMTYpKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0zMzYzLDggKzM2NTksOCBAQAogCiAJaWdiX3dyaXRlX2l0cihyeF9yaW5nKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZyeF9yaW5nLT5uYXBpKSkKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmcnhfcmluZy0+bmFwaSk7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmcnhfcmluZy0+bmFwaSkpCisJCV9fbmFwaV9zY2hlZHVsZSgmcnhfcmluZy0+bmFwaSk7CiAKICNpZmRlZiBDT05GSUdfSUdCX0RDQQogCWlmIChyeF9yaW5nLT5hZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX0RDQV9FTkFCTEVEKQpAQCAtMzM4NiwxMSArMzY4MiwxMSBAQAogCQlkY2FfcnhjdHJsID0gcmQzMihFMTAwMF9EQ0FfUlhDVFJMKHEpKTsKIAkJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NikgewogCQkJZGNhX3J4Y3RybCAmPSB+RTEwMDBfRENBX1JYQ1RSTF9DUFVJRF9NQVNLXzgyNTc2OwotCQkJZGNhX3J4Y3RybCB8PSBkY2FfZ2V0X3RhZyhjcHUpIDw8CisJCQlkY2FfcnhjdHJsIHw9IGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpIDw8CiAJCQkgICAgICAgICAgICAgIEUxMDAwX0RDQV9SWENUUkxfQ1BVSURfU0hJRlQ7CiAJCX0gZWxzZSB7CiAJCQlkY2FfcnhjdHJsICY9IH5FMTAwMF9EQ0FfUlhDVFJMX0NQVUlEX01BU0s7Ci0JCQlkY2FfcnhjdHJsIHw9IGRjYV9nZXRfdGFnKGNwdSk7CisJCQlkY2FfcnhjdHJsIHw9IGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpOwogCQl9CiAJCWRjYV9yeGN0cmwgfD0gRTEwMDBfRENBX1JYQ1RSTF9ERVNDX0RDQV9FTjsKIAkJZGNhX3J4Y3RybCB8PSBFMTAwMF9EQ0FfUlhDVFJMX0hFQURfRENBX0VOOwpAQCAtMzQxMywxMSArMzcwOSwxMSBAQAogCQlkY2FfdHhjdHJsID0gcmQzMihFMTAwMF9EQ0FfVFhDVFJMKHEpKTsKIAkJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NikgewogCQkJZGNhX3R4Y3RybCAmPSB+RTEwMDBfRENBX1RYQ1RSTF9DUFVJRF9NQVNLXzgyNTc2OwotCQkJZGNhX3R4Y3RybCB8PSBkY2FfZ2V0X3RhZyhjcHUpIDw8CisJCQlkY2FfdHhjdHJsIHw9IGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpIDw8CiAJCQkgICAgICAgICAgICAgIEUxMDAwX0RDQV9UWENUUkxfQ1BVSURfU0hJRlQ7CiAJCX0gZWxzZSB7CiAJCQlkY2FfdHhjdHJsICY9IH5FMTAwMF9EQ0FfVFhDVFJMX0NQVUlEX01BU0s7Ci0JCQlkY2FfdHhjdHJsIHw9IGRjYV9nZXRfdGFnKGNwdSk7CisJCQlkY2FfdHhjdHJsIHw9IGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpOwogCQl9CiAJCWRjYV90eGN0cmwgfD0gRTEwMDBfRENBX1RYQ1RSTF9ERVNDX0RDQV9FTjsKIAkJd3IzMihFMTAwMF9EQ0FfVFhDVFJMKHEpLCBkY2FfdHhjdHJsKTsKQEAgLTM0NTcsNyArMzc1Myw3IEBACiAJCQlicmVhazsKIAkJLyogQWx3YXlzIHVzZSBDQjIgbW9kZSwgZGlmZmVyZW5jZSBpcyBtYXNrZWQKIAkJICogaW4gdGhlIENCIGRyaXZlci4gKi8KLQkJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgMik7CisJCXdyMzIoRTEwMDBfRENBX0NUUkwsIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0NCMik7CiAJCWlmIChkY2FfYWRkX3JlcXVlc3RlcihkZXYpID09IDApIHsKIAkJCWFkYXB0ZXItPmZsYWdzIHw9IElHQl9GTEFHX0RDQV9FTkFCTEVEOwogCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIkRDQSBlbmFibGVkXG4iKTsKQEAgLTM0NzIsNyArMzc2OCw3IEBACiAJCQlkY2FfcmVtb3ZlX3JlcXVlc3RlcihkZXYpOwogCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIkRDQSBkaXNhYmxlZFxuIik7CiAJCQlhZGFwdGVyLT5mbGFncyAmPSB+SUdCX0ZMQUdfRENBX0VOQUJMRUQ7Ci0JCQl3cjMyKEUxMDAwX0RDQV9DVFJMLCAxKTsKKwkJCXdyMzIoRTEwMDBfRENBX0NUUkwsIEUxMDAwX0RDQV9DVFJMX0RDQV9NT0RFX0RJU0FCTEUpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTM0OTIsNiArMzc4OCwzMjIgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSUdCX0RDQSAqLwogCitzdGF0aWMgdm9pZCBpZ2JfcGluZ19hbGxfdmZzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBwaW5nOworCWludCBpOworCisJZm9yIChpID0gMCA7IGkgPCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OyBpKyspIHsKKwkJcGluZyA9IEUxMDAwX1BGX0NPTlRST0xfTVNHOworCQlpZiAoYWRhcHRlci0+dmZfZGF0YVtpXS5jbGVhcl90b19zZW5kKQorCQkJcGluZyB8PSBFMTAwMF9WVF9NU0dUWVBFX0NUUzsKKwkJaWdiX3dyaXRlX21ieChodywgJnBpbmcsIDEsIGkpOworCX0KK30KKworc3RhdGljIGludCBpZ2Jfc2V0X3ZmX211bHRpY2FzdHMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgdTMyICptc2didWYsIHUzMiB2ZikKK3sKKwlpbnQgbiA9IChtc2didWZbMF0gJiBFMTAwMF9WVF9NU0dJTkZPX01BU0spID4+IEUxMDAwX1ZUX01TR0lORk9fU0hJRlQ7CisJdTE2ICpoYXNoX2xpc3QgPSAodTE2ICopJm1zZ2J1ZlsxXTsKKwlzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlICp2Zl9kYXRhID0gJmFkYXB0ZXItPnZmX2RhdGFbdmZdOworCWludCBpOworCisJLyogb25seSB1cCB0byAzMCBoYXNoIHZhbHVlcyBzdXBwb3J0ZWQgKi8KKwlpZiAobiA+IDMwKQorCQluID0gMzA7CisKKwkvKiBzYWx0IGF3YXkgdGhlIG51bWJlciBvZiBtdWx0aSBjYXN0IGFkZHJlc3NlcyBhc3NpZ25lZAorCSAqIHRvIHRoaXMgVkYgZm9yIGxhdGVyIHVzZSB0byByZXN0b3JlIHdoZW4gdGhlIFBGIG11bHRpIGNhc3QKKwkgKiBsaXN0IGNoYW5nZXMKKwkgKi8KKwl2Zl9kYXRhLT5udW1fdmZfbWNfaGFzaGVzID0gbjsKKworCS8qIFZGcyBhcmUgbGltaXRlZCB0byB1c2luZyB0aGUgTVRBIGhhc2ggdGFibGUgZm9yIHRoZWlyIG11bHRpY2FzdAorCSAqIGFkZHJlc3NlcyAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXZmX2RhdGEtPnZmX21jX2hhc2hlc1tpXSA9IGhhc2hfbGlzdFtpXTs7CisKKwkvKiBGbHVzaCBhbmQgcmVzZXQgdGhlIG10YSB3aXRoIHRoZSBuZXcgdmFsdWVzICovCisJaWdiX3NldF9tdWx0aShhZGFwdGVyLT5uZXRkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlnYl9yZXN0b3JlX3ZmX211bHRpY2FzdHMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IHZmX2RhdGFfc3RvcmFnZSAqdmZfZGF0YTsKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OyBpKyspIHsKKwkJdmZfZGF0YSA9ICZhZGFwdGVyLT52Zl9kYXRhW2ldOworCQlmb3IgKGogPSAwOyBqIDwgdmZfZGF0YS0+bnVtX3ZmX21jX2hhc2hlczsgaisrKQorCQkJaWdiX210YV9zZXQoaHcsIHZmX2RhdGEtPnZmX21jX2hhc2hlc1tqXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpZ2JfY2xlYXJfdmZfdmZ0YShzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBwb29sX21hc2ssIHJlZywgdmlkOworCWludCBpOworCisJcG9vbF9tYXNrID0gMSA8PCAoRTEwMDBfVkxWRl9QT09MU0VMX1NISUZUICsgdmYpOworCisJLyogRmluZCB0aGUgdmxhbiBmaWx0ZXIgZm9yIHRoaXMgaWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfVkxWRl9BUlJBWV9TSVpFOyBpKyspIHsKKwkJcmVnID0gcmQzMihFMTAwMF9WTFZGKGkpKTsKKworCQkvKiByZW1vdmUgdGhlIHZmIGZyb20gdGhlIHBvb2wgKi8KKwkJcmVnICY9IH5wb29sX21hc2s7CisKKwkJLyogaWYgcG9vbCBpcyBlbXB0eSB0aGVuIHJlbW92ZSBlbnRyeSBmcm9tIHZmdGEgKi8KKwkJaWYgKCEocmVnICYgRTEwMDBfVkxWRl9QT09MU0VMX01BU0spICYmCisJCSAgICAocmVnICYgRTEwMDBfVkxWRl9WTEFOSURfRU5BQkxFKSkgeworCQkJcmVnID0gMDsKKwkJCXZpZCA9IHJlZyAmIEUxMDAwX1ZMVkZfVkxBTklEX01BU0s7CisJCQlpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgZmFsc2UpOworCQl9CisKKwkJd3IzMihFMTAwMF9WTFZGKGkpLCByZWcpOworCX0KK30KKworc3RhdGljIHMzMiBpZ2Jfdmx2Zl9zZXQoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmlkLCBib29sIGFkZCwgdTMyIHZmKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHJlZywgaTsKKworCS8qIEl0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIFZGcyBhcmUgbm90IGVuYWJsZWQgKi8KKwlpZiAoIWFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCXJldHVybiAtMTsKKworCS8qIEZpbmQgdGhlIHZsYW4gZmlsdGVyIGZvciB0aGlzIGlkICovCisJZm9yIChpID0gMDsgaSA8IEUxMDAwX1ZMVkZfQVJSQVlfU0laRTsgaSsrKSB7CisJCXJlZyA9IHJkMzIoRTEwMDBfVkxWRihpKSk7CisJCWlmICgocmVnICYgRTEwMDBfVkxWRl9WTEFOSURfRU5BQkxFKSAmJgorCQkgICAgdmlkID09IChyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9NQVNLKSkKKwkJCWJyZWFrOworCX0KKworCWlmIChhZGQpIHsKKwkJaWYgKGkgPT0gRTEwMDBfVkxWRl9BUlJBWV9TSVpFKSB7CisJCQkvKiBEaWQgbm90IGZpbmQgYSBtYXRjaGluZyBWTEFOIElEIGVudHJ5IHRoYXQgd2FzCisJCQkgKiBlbmFibGVkLiAgU2VhcmNoIGZvciBhIGZyZWUgZmlsdGVyIGVudHJ5LCBpLmUuCisJCQkgKiBvbmUgd2l0aG91dCB0aGUgZW5hYmxlIGJpdCBzZXQKKwkJCSAqLworCQkJZm9yIChpID0gMDsgaSA8IEUxMDAwX1ZMVkZfQVJSQVlfU0laRTsgaSsrKSB7CisJCQkJcmVnID0gcmQzMihFMTAwMF9WTFZGKGkpKTsKKwkJCQlpZiAoIShyZWcgJiBFMTAwMF9WTFZGX1ZMQU5JRF9FTkFCTEUpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA8IEUxMDAwX1ZMVkZfQVJSQVlfU0laRSkgeworCQkJLyogRm91bmQgYW4gZW5hYmxlZC9hdmFpbGFibGUgZW50cnkgKi8KKwkJCXJlZyB8PSAxIDw8IChFMTAwMF9WTFZGX1BPT0xTRUxfU0hJRlQgKyB2Zik7CisKKwkJCS8qIGlmICFlbmFibGVkIHdlIG5lZWQgdG8gc2V0IHRoaXMgdXAgaW4gdmZ0YSAqLworCQkJaWYgKCEocmVnICYgRTEwMDBfVkxWRl9WTEFOSURfRU5BQkxFKSkgeworCQkJCS8qIGFkZCBWSUQgdG8gZmlsdGVyIHRhYmxlLCBpZiBiaXQgYWxyZWFkeSBzZXQKKwkJCQkgKiBQRiBtdXN0IGhhdmUgYWRkZWQgaXQgb3V0c2lkZSBvZiB0YWJsZSAqLworCQkJCWlmIChpZ2JfdmZ0YV9zZXQoaHcsIHZpZCwgdHJ1ZSkpCisJCQkJCXJlZyB8PSAxIDw8IChFMTAwMF9WTFZGX1BPT0xTRUxfU0hJRlQgKworCQkJCQkJYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCk7CisJCQkJcmVnIHw9IEUxMDAwX1ZMVkZfVkxBTklEX0VOQUJMRTsKKwkJCX0KKwkJCXJlZyAmPSB+RTEwMDBfVkxWRl9WTEFOSURfTUFTSzsKKwkJCXJlZyB8PSB2aWQ7CisKKwkJCXdyMzIoRTEwMDBfVkxWRihpKSwgcmVnKTsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGkgPCBFMTAwMF9WTFZGX0FSUkFZX1NJWkUpIHsKKwkJCS8qIHJlbW92ZSB2ZiBmcm9tIHRoZSBwb29sICovCisJCQlyZWcgJj0gfigxIDw8IChFMTAwMF9WTFZGX1BPT0xTRUxfU0hJRlQgKyB2ZikpOworCQkJLyogaWYgcG9vbCBpcyBlbXB0eSB0aGVuIHJlbW92ZSBlbnRyeSBmcm9tIHZmdGEgKi8KKwkJCWlmICghKHJlZyAmIEUxMDAwX1ZMVkZfUE9PTFNFTF9NQVNLKSkgeworCQkJCXJlZyA9IDA7CisJCQkJaWdiX3ZmdGFfc2V0KGh3LCB2aWQsIGZhbHNlKTsKKwkJCX0KKwkJCXdyMzIoRTEwMDBfVkxWRihpKSwgcmVnKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBpZ2Jfc2V0X3ZmX3ZsYW4oc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgKm1zZ2J1ZiwgdTMyIHZmKQoreworCWludCBhZGQgPSAobXNnYnVmWzBdICYgRTEwMDBfVlRfTVNHSU5GT19NQVNLKSA+PiBFMTAwMF9WVF9NU0dJTkZPX1NISUZUOworCWludCB2aWQgPSAobXNnYnVmWzFdICYgRTEwMDBfVkxWRl9WTEFOSURfTUFTSyk7CisKKwlyZXR1cm4gaWdiX3ZsdmZfc2V0KGFkYXB0ZXIsIHZpZCwgYWRkLCB2Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2JfdmZfcmVzZXRfZXZlbnQoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCS8qIGRpc2FibGUgbWFpbGJveCBmdW5jdGlvbmFsaXR5IGZvciB2ZiAqLworCWFkYXB0ZXItPnZmX2RhdGFbdmZdLmNsZWFyX3RvX3NlbmQgPSBmYWxzZTsKKworCS8qIHJlc2V0IG9mZmxvYWRzIHRvIGRlZmF1bHRzICovCisJaWdiX3NldF92bW9scihodywgdmYpOworCisJLyogcmVzZXQgdmxhbnMgZm9yIGRldmljZSAqLworCWlnYl9jbGVhcl92Zl92ZnRhKGFkYXB0ZXIsIHZmKTsKKworCS8qIHJlc2V0IG11bHRpY2FzdCB0YWJsZSBhcnJheSBmb3IgdmYgKi8KKwlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5udW1fdmZfbWNfaGFzaGVzID0gMDsKKworCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KKwlpZ2Jfc2V0X211bHRpKGFkYXB0ZXItPm5ldGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2JfdmZfcmVzZXRfbXNnKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdW5zaWduZWQgY2hhciAqdmZfbWFjID0gYWRhcHRlci0+dmZfZGF0YVt2Zl0udmZfbWFjX2FkZHJlc3NlczsKKwl1MzIgcmVnLCBtc2didWZbM107CisJdTggKmFkZHIgPSAodTggKikoJm1zZ2J1ZlsxXSk7CisKKwkvKiBwcm9jZXNzIGFsbCB0aGUgc2FtZSBpdGVtcyBjbGVhcmVkIGluIGEgZnVuY3Rpb24gbGV2ZWwgcmVzZXQgKi8KKwlpZ2JfdmZfcmVzZXRfZXZlbnQoYWRhcHRlciwgdmYpOworCisJLyogc2V0IHZmIG1hYyBhZGRyZXNzICovCisJaWdiX3Jhcl9zZXQoaHcsIHZmX21hYywgdmYgKyAxKTsKKwlpZ2Jfc2V0X3JhaF9wb29sKGh3LCB2ZiwgdmYgKyAxKTsKKworCS8qIGVuYWJsZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBmb3IgdmYgKi8KKwlyZWcgPSByZDMyKEUxMDAwX1ZGVEUpOworCXdyMzIoRTEwMDBfVkZURSwgcmVnIHwgKDEgPDwgdmYpKTsKKwlyZWcgPSByZDMyKEUxMDAwX1ZGUkUpOworCXdyMzIoRTEwMDBfVkZSRSwgcmVnIHwgKDEgPDwgdmYpKTsKKworCS8qIGVuYWJsZSBtYWlsYm94IGZ1bmN0aW9uYWxpdHkgZm9yIHZmICovCisJYWRhcHRlci0+dmZfZGF0YVt2Zl0uY2xlYXJfdG9fc2VuZCA9IHRydWU7CisKKwkvKiByZXBseSB0byByZXNldCB3aXRoIGFjayBhbmQgdmYgbWFjIGFkZHJlc3MgKi8KKwltc2didWZbMF0gPSBFMTAwMF9WRl9SRVNFVCB8IEUxMDAwX1ZUX01TR1RZUEVfQUNLOworCW1lbWNweShhZGRyLCB2Zl9tYWMsIDYpOworCWlnYl93cml0ZV9tYngoaHcsIG1zZ2J1ZiwgMywgdmYpOworfQorCitzdGF0aWMgaW50IGlnYl9zZXRfdmZfbWFjX2FkZHIoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgKm1zZywgaW50IHZmKQoreworCQl1bnNpZ25lZCBjaGFyICphZGRyID0gKGNoYXIgKikmbXNnWzFdOworCQlpbnQgZXJyID0gLTE7CisKKwkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkcikpCisJCQllcnIgPSBpZ2Jfc2V0X3ZmX21hYyhhZGFwdGVyLCB2ZiwgYWRkcik7CisKKwkJcmV0dXJuIGVycjsKKworfQorCitzdGF0aWMgdm9pZCBpZ2JfcmN2X2Fja19mcm9tX3ZmKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIG1zZyA9IEUxMDAwX1ZUX01TR1RZUEVfTkFDSzsKKworCS8qIGlmIGRldmljZSBpc24ndCBjbGVhciB0byBzZW5kIGl0IHNob3VsZG4ndCBiZSByZWFkaW5nIGVpdGhlciAqLworCWlmICghYWRhcHRlci0+dmZfZGF0YVt2Zl0uY2xlYXJfdG9fc2VuZCkKKwkJaWdiX3dyaXRlX21ieChodywgJm1zZywgMSwgdmYpOworfQorCisKK3N0YXRpYyB2b2lkIGlnYl9tc2dfdGFzayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgdmY7CisKKwlmb3IgKHZmID0gMDsgdmYgPCBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OyB2ZisrKSB7CisJCS8qIHByb2Nlc3MgYW55IHJlc2V0IHJlcXVlc3RzICovCisJCWlmICghaWdiX2NoZWNrX2Zvcl9yc3QoaHcsIHZmKSkgeworCQkJYWRhcHRlci0+dmZfZGF0YVt2Zl0uY2xlYXJfdG9fc2VuZCA9IGZhbHNlOworCQkJaWdiX3ZmX3Jlc2V0X2V2ZW50KGFkYXB0ZXIsIHZmKTsKKwkJfQorCisJCS8qIHByb2Nlc3MgYW55IG1lc3NhZ2VzIHBlbmRpbmcgKi8KKwkJaWYgKCFpZ2JfY2hlY2tfZm9yX21zZyhodywgdmYpKQorCQkJaWdiX3Jjdl9tc2dfZnJvbV92ZihhZGFwdGVyLCB2Zik7CisKKwkJLyogcHJvY2VzcyBhbnkgYWNrcyAqLworCQlpZiAoIWlnYl9jaGVja19mb3JfYWNrKGh3LCB2ZikpCisJCQlpZ2JfcmN2X2Fja19mcm9tX3ZmKGFkYXB0ZXIsIHZmKTsKKworCX0KK30KKworc3RhdGljIGludCBpZ2JfcmN2X21zZ19mcm9tX3ZmKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQoreworCXUzMiBtYnhfc2l6ZSA9IEUxMDAwX1ZGTUFJTEJPWF9TSVpFOworCXUzMiBtc2didWZbbWJ4X3NpemVdOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJczMyIHJldHZhbDsKKworCXJldHZhbCA9IGlnYl9yZWFkX21ieChodywgbXNnYnVmLCBtYnhfc2l6ZSwgdmYpOworCisJaWYgKHJldHZhbCkKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkgICAgICAgICJFcnJvciByZWNlaXZpbmcgbWVzc2FnZSBmcm9tIFZGXG4iKTsKKworCS8qIHRoaXMgaXMgYSBtZXNzYWdlIHdlIGFscmVhZHkgcHJvY2Vzc2VkLCBkbyBub3RoaW5nICovCisJaWYgKG1zZ2J1ZlswXSAmIChFMTAwMF9WVF9NU0dUWVBFX0FDSyB8IEUxMDAwX1ZUX01TR1RZUEVfTkFDSykpCisJCXJldHVybiByZXR2YWw7CisKKwkvKgorCSAqIHVudGlsIHRoZSB2ZiBjb21wbGV0ZXMgYSByZXNldCBpdCBzaG91bGQgbm90IGJlCisJICogYWxsb3dlZCB0byBzdGFydCBhbnkgY29uZmlndXJhdGlvbi4KKwkgKi8KKworCWlmIChtc2didWZbMF0gPT0gRTEwMDBfVkZfUkVTRVQpIHsKKwkJaWdiX3ZmX3Jlc2V0X21zZyhhZGFwdGVyLCB2Zik7CisKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisKKwlpZiAoIWFkYXB0ZXItPnZmX2RhdGFbdmZdLmNsZWFyX3RvX3NlbmQpIHsKKwkJbXNnYnVmWzBdIHw9IEUxMDAwX1ZUX01TR1RZUEVfTkFDSzsKKwkJaWdiX3dyaXRlX21ieChodywgbXNnYnVmLCAxLCB2Zik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJc3dpdGNoICgobXNnYnVmWzBdICYgMHhGRkZGKSkgeworCWNhc2UgRTEwMDBfVkZfU0VUX01BQ19BRERSOgorCQlyZXR2YWwgPSBpZ2Jfc2V0X3ZmX21hY19hZGRyKGFkYXB0ZXIsIG1zZ2J1ZiwgdmYpOworCQlicmVhazsKKwljYXNlIEUxMDAwX1ZGX1NFVF9NVUxUSUNBU1Q6CisJCXJldHZhbCA9IGlnYl9zZXRfdmZfbXVsdGljYXN0cyhhZGFwdGVyLCBtc2didWYsIHZmKTsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9WRl9TRVRfTFBFOgorCQlyZXR2YWwgPSBpZ2Jfc2V0X3ZmX3JscG1sKGFkYXB0ZXIsIG1zZ2J1ZlsxXSwgdmYpOworCQlicmVhazsKKwljYXNlIEUxMDAwX1ZGX1NFVF9WTEFOOgorCQlyZXR2YWwgPSBpZ2Jfc2V0X3ZmX3ZsYW4oYWRhcHRlciwgbXNnYnVmLCB2Zik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIlVuaGFuZGxlZCBNc2cgJTA4eFxuIiwgbXNnYnVmWzBdKTsKKwkJcmV0dmFsID0gLTE7CisJCWJyZWFrOworCX0KKworCS8qIG5vdGlmeSB0aGUgVkYgb2YgdGhlIHJlc3VsdHMgb2Ygd2hhdCBpdCBzZW50IHVzICovCisJaWYgKHJldHZhbCkKKwkJbXNnYnVmWzBdIHw9IEUxMDAwX1ZUX01TR1RZUEVfTkFDSzsKKwllbHNlCisJCW1zZ2J1ZlswXSB8PSBFMTAwMF9WVF9NU0dUWVBFX0FDSzsKKworCW1zZ2J1ZlswXSB8PSBFMTAwMF9WVF9NU0dUWVBFX0NUUzsKKworCWlnYl93cml0ZV9tYngoaHcsIG1zZ2J1ZiwgMSwgdmYpOworCisJcmV0dXJuIHJldHZhbDsKK30KKwogLyoqCiAgKiBpZ2JfaW50cl9tc2kgLSBJbnRlcnJ1cHQgSGFuZGxlcgogICogQGlycTogaW50ZXJydXB0IG51bWJlcgpAQCAtMzUwNywxOSArNDExOSwyNCBAQAogCiAJaWdiX3dyaXRlX2l0cihhZGFwdGVyLT5yeF9yaW5nKTsKIAorCWlmKGljciAmIEUxMDAwX0lDUl9ET1VUU1lOQykgeworCQkvKiBIVyBpcyByZXBvcnRpbmcgRE1BIGlzIG91dCBvZiBzeW5jICovCisJCWFkYXB0ZXItPnN0YXRzLmRvb3N5bmMrKzsKKwl9CisKIAlpZiAoaWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lDUl9MU0MpKSB7CiAJCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKIAkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOwogCX0KIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZhZGFwdGVyLT5yeF9yaW5nWzBdLm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPnJ4X3JpbmdbMF0ubmFwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIC8qKgotICogaWdiX2ludHIgLSBJbnRlcnJ1cHQgSGFuZGxlcgorICogaWdiX2ludHIgLSBMZWdhY3kgSW50ZXJydXB0IEhhbmRsZXIKICAqIEBpcnE6IGludGVycnVwdCBudW1iZXIKICAqIEBkYXRhOiBwb2ludGVyIHRvIGEgbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQogICoqLwpAQCAtMzUzMSw3ICs0MTQ4LDYgQEAKIAkvKiBJbnRlcnJ1cHQgQXV0by1NYXNrLi4udXBvbiByZWFkaW5nIElDUiwgaW50ZXJydXB0cyBhcmUgbWFza2VkLiAgTm8KIAkgKiBuZWVkIGZvciB0aGUgSU1DIHdyaXRlICovCiAJdTMyIGljciA9IHJkMzIoRTEwMDBfSUNSKTsKLQl1MzIgZWljciA9IDA7CiAJaWYgKCFpY3IpCiAJCXJldHVybiBJUlFfTk9ORTsgIC8qIE5vdCBvdXIgaW50ZXJydXB0ICovCiAKQEAgLTM1NDIsNyArNDE1OCwxMCBAQAogCWlmICghKGljciAmIEUxMDAwX0lDUl9JTlRfQVNTRVJURUQpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQllaWNyID0gcmQzMihFMTAwMF9FSUNSKTsKKwlpZihpY3IgJiBFMTAwMF9JQ1JfRE9VVFNZTkMpIHsKKwkJLyogSFcgaXMgcmVwb3J0aW5nIERNQSBpcyBvdXQgb2Ygc3luYyAqLworCQlhZGFwdGVyLT5zdGF0cy5kb29zeW5jKys7CisJfQogCiAJaWYgKGljciAmIChFMTAwMF9JQ1JfUlhTRVEgfCBFMTAwMF9JQ1JfTFNDKSkgewogCQlody0+bWFjLmdldF9saW5rX3N0YXR1cyA9IDE7CkBAIC0zNTUxLDExICs0MTcwLDMxIEBACiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJmFkYXB0ZXItPnJ4X3JpbmdbMF0ubmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+cnhfcmluZ1swXS5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGlnYl9yeF9pcnFfZW5hYmxlKHN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZykKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKSB7CisJCWlmIChhZGFwdGVyLT5udW1fcnhfcXVldWVzID09IDEpCisJCQlpZ2Jfc2V0X2l0cihhZGFwdGVyKTsKKwkJZWxzZQorCQkJaWdiX3VwZGF0ZV9yaW5nX2l0cihyeF9yaW5nKTsKKwl9CisKKwlpZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykKKwkJCXdyMzIoRTEwMDBfRUlNUywgcnhfcmluZy0+ZWltc192YWx1ZSk7CisJCWVsc2UKKwkJCWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCX0KK30KKwogLyoqCiAgKiBpZ2JfcG9sbCAtIE5BUEkgUnggcG9sbGluZyBjYWxsYmFjawogICogQG5hcGk6IG5hcGkgcG9sbGluZyBzdHJ1Y3R1cmUKQEAgLTM1NjQsNzAgKzQyMDMsNjQgQEAKIHN0YXRpYyBpbnQgaWdiX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaWdiX3JpbmcsIG5hcGkpOwotCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IHJ4X3JpbmctPmFkYXB0ZXI7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQlpbnQgdHhfY2xlYW5fY29tcGxldGUsIHdvcmtfZG9uZSA9IDA7Ci0KLQkvKiB0aGlzIHBvbGwgcm91dGluZSBvbmx5IHN1cHBvcnRzIG9uZSB0eCBhbmQgb25lIHJ4IHF1ZXVlICovCi0jaWZkZWYgQ09ORklHX0lHQl9EQ0EKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKLQkJaWdiX3VwZGF0ZV90eF9kY2EoJmFkYXB0ZXItPnR4X3JpbmdbMF0pOwotI2VuZGlmCi0JdHhfY2xlYW5fY29tcGxldGUgPSBpZ2JfY2xlYW5fdHhfaXJxKCZhZGFwdGVyLT50eF9yaW5nWzBdKTsKLQotI2lmZGVmIENPTkZJR19JR0JfRENBCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCi0JCWlnYl91cGRhdGVfcnhfZGNhKCZhZGFwdGVyLT5yeF9yaW5nWzBdKTsKLSNlbmRpZgotCWlnYl9jbGVhbl9yeF9pcnFfYWR2KCZhZGFwdGVyLT5yeF9yaW5nWzBdLCAmd29ya19kb25lLCBidWRnZXQpOwotCi0JLyogSWYgbm8gVHggYW5kIG5vdCBlbm91Z2ggUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KLQlpZiAoKHR4X2NsZWFuX2NvbXBsZXRlICYmICh3b3JrX2RvbmUgPCBidWRnZXQpKSB8fAotCSAgICAhbmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0JCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpCi0JCQlpZ2Jfc2V0X2l0cihhZGFwdGVyKTsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKLQkJCWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBpZ2JfY2xlYW5fcnhfcmluZ19tc2l4KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKLXsKLQlzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGlnYl9yaW5nLCBuYXBpKTsKLQlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOwotCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAlpbnQgd29ya19kb25lID0gMDsKIAogI2lmZGVmIENPTkZJR19JR0JfRENBCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCisJaWYgKHJ4X3JpbmctPmFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWlnYl91cGRhdGVfcnhfZGNhKHJ4X3JpbmcpOwogI2VuZGlmCiAJaWdiX2NsZWFuX3J4X2lycV9hZHYocnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKIAotCi0JLyogSWYgbm90IGVub3VnaCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwotCWlmICgod29ya19kb25lID09IDApIHx8ICFuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0KLQkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMykgewotCQkJaWYgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPT0gMSkKLQkJCQlpZ2Jfc2V0X2l0cihhZGFwdGVyKTsKLQkJCWVsc2UKLQkJCQlpZ2JfdXBkYXRlX3JpbmdfaXRyKHJ4X3JpbmcpOwotCQl9Ci0KLQkJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQotCQkJd3IzMihFMTAwMF9FSU1TLCByeF9yaW5nLT5laW1zX3ZhbHVlKTsKLQotCQlyZXR1cm4gMDsKKwlpZiAocnhfcmluZy0+YnVkZHkpIHsKKyNpZmRlZiBDT05GSUdfSUdCX0RDQQorCQlpZiAocnhfcmluZy0+YWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19EQ0FfRU5BQkxFRCkKKwkJCWlnYl91cGRhdGVfdHhfZGNhKHJ4X3JpbmctPmJ1ZGR5KTsKKyNlbmRpZgorCQlpZiAoIWlnYl9jbGVhbl90eF9pcnEocnhfcmluZy0+YnVkZHkpKQorCQkJd29ya19kb25lID0gYnVkZ2V0OwogCX0KIAotCXJldHVybiAxOworCS8qIElmIG5vdCBlbm91Z2ggUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWlnYl9yeF9pcnFfZW5hYmxlKHJ4X3JpbmcpOworCX0KKworCXJldHVybiB3b3JrX2RvbmU7Cit9CisKKy8qKgorICogaWdiX2h3dHN0YW1wIC0gdXRpbGl0eSBmdW5jdGlvbiB3aGljaCBjaGVja3MgZm9yIFRYIHRpbWUgc3RhbXAKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogQHNrYjogcGFja2V0IHRoYXQgd2FzIGp1c3Qgc2VudAorICoKKyAqIElmIHdlIHdlcmUgYXNrZWQgdG8gZG8gaGFyZHdhcmUgc3RhbXBpbmcgYW5kIHN1Y2ggYSB0aW1lIHN0YW1wIGlzCisgKiBhdmFpbGFibGUsIHRoZW4gaXQgbXVzdCBoYXZlIGJlZW4gZm9yIHRoaXMgc2tiIGhlcmUgYmVjYXVzZSB3ZSBvbmx5CisgKiBhbGxvdyBvbmx5IG9uZSBzdWNoIHBhY2tldCBpbnRvIHRoZSBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQgaWdiX3R4X2h3dHN0YW1wKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1bmlvbiBza2Jfc2hhcmVkX3R4ICpzaHR4ID0gc2tiX3R4KHNrYik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmICh1bmxpa2VseShzaHR4LT5oYXJkd2FyZSkpIHsKKwkJdTMyIHZhbGlkID0gcmQzMihFMTAwMF9UU1lOQ1RYQ1RMKSAmIEUxMDAwX1RTWU5DVFhDVExfVkFMSUQ7CisJCWlmICh2YWxpZCkgeworCQkJdTY0IHJlZ3ZhbCA9IHJkMzIoRTEwMDBfVFhTVE1QTCk7CisJCQl1NjQgbnM7CisJCQlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgc2hod3RzdGFtcHM7CisKKwkJCW1lbXNldCgmc2hod3RzdGFtcHMsIDAsIHNpemVvZihzaGh3dHN0YW1wcykpOworCQkJcmVndmFsIHw9ICh1NjQpcmQzMihFMTAwMF9UWFNUTVBIKSA8PCAzMjsKKwkJCW5zID0gdGltZWNvdW50ZXJfY3ljMnRpbWUoJmFkYXB0ZXItPmNsb2NrLAorCQkJCQkJICByZWd2YWwpOworCQkJdGltZWNvbXBhcmVfdXBkYXRlKCZhZGFwdGVyLT5jb21wYXJlLCBucyk7CisJCQlzaGh3dHN0YW1wcy5od3RzdGFtcCA9IG5zX3RvX2t0aW1lKG5zKTsKKwkJCXNoaHd0c3RhbXBzLnN5c3RzdGFtcCA9CisJCQkJdGltZWNvbXBhcmVfdHJhbnNmb3JtKCZhZGFwdGVyLT5jb21wYXJlLCBucyk7CisJCQlza2JfdHN0YW1wX3R4KHNrYiwgJnNoaHd0c3RhbXBzKTsKKwkJfQorCX0KIH0KIAogLyoqCkBAIC0zNjY4LDYgKzQzMDEsOCBAQAogCQkJCQkgICAgc2tiLT5sZW47CiAJCQkJdG90YWxfcGFja2V0cyArPSBzZWdzOwogCQkJCXRvdGFsX2J5dGVzICs9IGJ5dGVjb3VudDsKKworCQkJCWlnYl90eF9od3RzdGFtcChhZGFwdGVyLCBza2IpOwogCQkJfQogCiAJCQlpZ2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwgYnVmZmVyX2luZm8pOwpAQCAtMzY3Nyw3ICs0MzEyLDYgQEAKIAkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQogCQkJCWkgPSAwOwogCQl9Ci0KIAkJZW9wID0gdHhfcmluZy0+YnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKIAkJZW9wX2Rlc2MgPSBFMTAwMF9UWF9ERVNDX0FEVigqdHhfcmluZywgZW9wKTsKIAl9CkBAIC0zNjg2LDcgKzQzMjAsNyBAQAogCiAJaWYgKHVubGlrZWx5KGNvdW50ICYmCiAJCSAgICAgbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpICYmCi0JCSAgICAgSUdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpID49IElHQl9UWF9RVUVVRV9XQUtFKSkgeworCQkgICAgIGlnYl9kZXNjX3VudXNlZCh0eF9yaW5nKSA+PSBJR0JfVFhfUVVFVUVfV0FLRSkpIHsKIAkJLyogTWFrZSBzdXJlIHRoYXQgYW55Ym9keSBzdG9wcGluZyB0aGUgcXVldWUgYWZ0ZXIgdGhpcwogCQkgKiBzZWVzIHRoZSBuZXcgbmV4dF90b19jbGVhbi4KIAkJICovCkBAIC0zNzQyLDQ0ICs0Mzc2LDExIEBACiAJcmV0dXJuIChjb3VudCA8IHR4X3JpbmctPmNvdW50KTsKIH0KIAotI2lmZGVmIENPTkZJR19JR0JfTFJPCi0gLyoqCi0gKiBpZ2JfZ2V0X3NrYl9oZHIgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIExSTyBoZWFkZXIgcHJvY2Vzc2luZwotICogQHNrYjogcG9pbnRlciB0byBza19idWZmIHRvIGJlIGFkZGVkIHRvIExSTyBwYWNrZXQKLSAqIEBpcGhkcjogcG9pbnRlciB0byBpcCBoZWFkZXIgc3RydWN0dXJlCi0gKiBAdGNwaDogcG9pbnRlciB0byB0Y3AgaGVhZGVyIHN0cnVjdHVyZQotICogQGhkcl9mbGFnczogcG9pbnRlciB0byBoZWFkZXIgZmxhZ3MKLSAqIEBwcml2OiBwb2ludGVyIHRvIHRoZSByZWNlaXZlIGRlc2NyaXB0b3IgZm9yIHRoZSBjdXJyZW50IHNrX2J1ZmYKLSAqKi8KLXN0YXRpYyBpbnQgaWdiX2dldF9za2JfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKippcGhkciwgdm9pZCAqKnRjcGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQgKmhkcl9mbGFncywgdm9pZCAqcHJpdikKLXsKLQl1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYyAqcnhfZGVzYyA9IHByaXY7Ci0JdTE2IHBrdF90eXBlID0gcnhfZGVzYy0+d2IubG93ZXIubG9fZHdvcmQucGt0X2luZm8gJgotCSAgICAgICAgICAgICAgIChFMTAwMF9SWERBRFZfUEtUVFlQRV9JUFY0IHwgRTEwMDBfUlhEQURWX1BLVFRZUEVfVENQKTsKLQotCS8qIFZlcmlmeSB0aGF0IHRoaXMgaXMgYSB2YWxpZCBJUHY0IFRDUCBwYWNrZXQgKi8KLQlpZiAocGt0X3R5cGUgIT0gKEUxMDAwX1JYREFEVl9QS1RUWVBFX0lQVjQgfAotCSAgICAgICAgICAgICAgICAgIEUxMDAwX1JYREFEVl9QS1RUWVBFX1RDUCkpCi0JCXJldHVybiAtMTsKLQotCS8qIFNldCBuZXR3b3JrIGhlYWRlcnMgKi8KLQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKLQlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBpcF9oZHJsZW4oc2tiKSk7Ci0JKmlwaGRyID0gaXBfaGRyKHNrYik7Ci0JKnRjcGggPSB0Y3BfaGRyKHNrYik7Ci0JKmhkcl9mbGFncyA9IExST19JUFY0IHwgTFJPX1RDUDsKLQotCXJldHVybiAwOwotCi19Ci0jZW5kaWYgLyogQ09ORklHX0lHQl9MUk8gKi8KLQogLyoqCiAgKiBpZ2JfcmVjZWl2ZV9za2IgLSBoZWxwZXIgZnVuY3Rpb24gdG8gaGFuZGxlIHJ4IGluZGljYXRpb25zCi0gKiBAcmluZzogcG9pbnRlciB0byByZWNlaXZlIHJpbmcgcmVjZXZpbmcgdGhpcyBwYWNrZXQgCisgKiBAcmluZzogcG9pbnRlciB0byByZWNlaXZlIHJpbmcgcmVjZXZpbmcgdGhpcyBwYWNrZXQKICAqIEBzdGF0dXM6IGRlc2NyaXB0b3Igc3RhdHVzIGZpZWxkIGFzIHdyaXR0ZW4gYnkgaGFyZHdhcmUKLSAqIEB2bGFuOiBkZXNjcmlwdG9yIHZsYW4gZmllbGQgYXMgd3JpdHRlbiBieSBoYXJkd2FyZSAobm8gbGUvYmUgY29udmVyc2lvbikKKyAqIEByeF9kZXNjOiByZWNlaXZlIGRlc2NyaXB0b3IgY29udGFpbmluZyB2bGFuIGFuZCB0eXBlIGluZm9ybWF0aW9uLgogICogQHNrYjogcG9pbnRlciB0byBza19idWZmIHRvIGJlIGluZGljYXRlZCB0byBzdGFjawogICoqLwogc3RhdGljIHZvaWQgaWdiX3JlY2VpdmVfc2tiKHN0cnVjdCBpZ2JfcmluZyAqcmluZywgdTggc3RhdHVzLApAQCAtMzc4OSwzMSArNDM5MCwyMyBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqIGFkYXB0ZXIgPSByaW5nLT5hZGFwdGVyOwogCWJvb2wgdmxhbl9leHRyYWN0ZWQgPSAoYWRhcHRlci0+dmxncnAgJiYgKHN0YXR1cyAmIEUxMDAwX1JYRF9TVEFUX1ZQKSk7CiAKLSNpZmRlZiBDT05GSUdfSUdCX0xSTwotCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8gJiYKLQkgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcmluZy0+cXVldWVfaW5kZXgpOworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgewogCQlpZiAodmxhbl9leHRyYWN0ZWQpCi0JCQlscm9fdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKCZyaW5nLT5scm9fbWdyLCBza2IsCi0JCQkgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dmxncnAsCi0JCQkgICAgICAgICAgICAgICAgICAgbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIudmxhbiksCi0JCQkgICAgICAgICAgICAgICAgICAgcnhfZGVzYyk7CisJCQl2bGFuX2dyb19yZWNlaXZlKCZyaW5nLT5uYXBpLCBhZGFwdGVyLT52bGdycCwKKwkJCSAgICAgICAgICAgICAgICAgbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIudmxhbiksCisJCQkgICAgICAgICAgICAgICAgIHNrYik7CiAJCWVsc2UKLQkJCWxyb19yZWNlaXZlX3NrYigmcmluZy0+bHJvX21ncixza2IsIHJ4X2Rlc2MpOwotCQlyaW5nLT5scm9fdXNlZCA9IDE7CisJCQluYXBpX2dyb19yZWNlaXZlKCZyaW5nLT5uYXBpLCBza2IpOwogCX0gZWxzZSB7Ci0jZW5kaWYKIAkJaWYgKHZsYW5fZXh0cmFjdGVkKQogCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxncnAsCiAJCQkgICAgICAgICAgICAgICAgICBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci52bGFuKSk7CiAJCWVsc2UKLQogCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLSNpZmRlZiBDT05GSUdfSUdCX0xSTwogCX0KLSNlbmRpZgogfQogCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZ2JfcnhfY2hlY2tzdW1fYWR2KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkgICAgICAgdTMyIHN0YXR1c19lcnIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0zODQxLDE3ICs0NDM0LDE5IEBACiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gcnhfcmluZy0+YWRhcHRlcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjICpyeF9kZXNjICwgKm5leHRfcnhkOwogCXN0cnVjdCBpZ2JfYnVmZmVyICpidWZmZXJfaW5mbyAsICpuZXh0X2J1ZmZlcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGludCBpOwotCXUzMiBsZW5ndGgsIGhsZW4sIHN0YXRlcnI7CiAJYm9vbCBjbGVhbmVkID0gZmFsc2U7CiAJaW50IGNsZWFuZWRfY291bnQgPSAwOwogCXVuc2lnbmVkIGludCB0b3RhbF9ieXRlcyA9IDAsIHRvdGFsX3BhY2tldHMgPSAwOworCXVuc2lnbmVkIGludCBpOworCXUzMiBsZW5ndGgsIGhsZW4sIHN0YXRlcnI7CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b19jbGVhbjsKKwlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAlyeF9kZXNjID0gRTEwMDBfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOwogCXN0YXRlcnIgPSBsZTMyX3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IpOwogCkBAIC0zODU5LDcgKzQ0NTQsMzAgQEAKIAkJaWYgKCp3b3JrX2RvbmUgPj0gYnVkZ2V0KQogCQkJYnJlYWs7CiAJCSgqd29ya19kb25lKSsrOwotCQlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKKworCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOworCQlwcmVmZXRjaChza2ItPmRhdGEgLSBORVRfSVBfQUxJR04pOworCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKworCQlpKys7CisJCWlmIChpID09IHJ4X3JpbmctPmNvdW50KQorCQkJaSA9IDA7CisJCW5leHRfcnhkID0gRTEwMDBfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOworCQlwcmVmZXRjaChuZXh0X3J4ZCk7CisJCW5leHRfYnVmZmVyID0gJnJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCisJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLmxlbmd0aCk7CisJCWNsZWFuZWQgPSB0cnVlOworCQljbGVhbmVkX2NvdW50Kys7CisKKwkJaWYgKCFhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkgeworCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLAorCQkJCQkgYWRhcHRlci0+cnhfYnVmZmVyX2xlbiArCisJCQkJCSAgIE5FVF9JUF9BTElHTiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKKwkJCWdvdG8gc2VuZF91cDsKKwkJfQogCiAJCS8qIEhXIHdpbGwgbm90IERNQSBpbiBkYXRhIGxhcmdlciB0aGFuIHRoZSBnaXZlbiBidWZmZXIsIGV2ZW4KIAkJICogaWYgaXQgcGFyc2VzIHRoZSAoTkZTLCBvZiBjb3Vyc2UpIGhlYWRlciB0byBiZSBsYXJnZXIuICBJbgpAQCAtMzg3MSwyNiArNDQ4OSw5IEBACiAJCWlmIChobGVuID4gYWRhcHRlci0+cnhfcHNfaGRyX3NpemUpCiAJCQlobGVuID0gYWRhcHRlci0+cnhfcHNfaGRyX3NpemU7CiAKLQkJbGVuZ3RoID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIubGVuZ3RoKTsKLQkJY2xlYW5lZCA9IHRydWU7Ci0JCWNsZWFuZWRfY291bnQrKzsKLQotCQlza2IgPSBidWZmZXJfaW5mby0+c2tiOwotCQlwcmVmZXRjaChza2ItPmRhdGEgLSBORVRfSVBfQUxJR04pOwotCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKLQkJaWYgKCFhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkgewotCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLAotCQkJCQkgYWRhcHRlci0+cnhfYnVmZmVyX2xlbiArCi0JCQkJCSAgIE5FVF9JUF9BTElHTiwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKLQkJCWdvdG8gc2VuZF91cDsKLQkJfQotCiAJCWlmICghc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykgewogCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLAotCQkJCQkgYWRhcHRlci0+cnhfcHNfaGRyX3NpemUgKwotCQkJCQkgICBORVRfSVBfQUxJR04sCisJCQkJCSBhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSArIE5FVF9JUF9BTElHTiwKIAkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlza2JfcHV0KHNrYiwgaGxlbik7CiAJCX0KQEAgLTM5MTYsMTMgKzQ1MTcsNiBAQAogCiAJCQlza2ItPnRydWVzaXplICs9IGxlbmd0aDsKIAkJfQotc2VuZF91cDoKLQkJaSsrOwotCQlpZiAoaSA9PSByeF9yaW5nLT5jb3VudCkKLQkJCWkgPSAwOwotCQluZXh0X3J4ZCA9IEUxMDAwX1JYX0RFU0NfQURWKCpyeF9yaW5nLCBpKTsKLQkJcHJlZmV0Y2gobmV4dF9yeGQpOwotCQluZXh0X2J1ZmZlciA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAogCQlpZiAoIShzdGF0ZXJyICYgRTEwMDBfUlhEX1NUQVRfRU9QKSkgewogCQkJYnVmZmVyX2luZm8tPnNrYiA9IG5leHRfYnVmZmVyLT5za2I7CkBAIC0zOTMxLDYgKzQ1MjUsNDcgQEAKIAkJCW5leHRfYnVmZmVyLT5kbWEgPSAwOwogCQkJZ290byBuZXh0X2Rlc2M7CiAJCX0KK3NlbmRfdXA6CisJCS8qCisJCSAqIElmIHRoaXMgYml0IGlzIHNldCwgdGhlbiB0aGUgUlggcmVnaXN0ZXJzIGNvbnRhaW4KKwkJICogdGhlIHRpbWUgc3RhbXAuIE5vIG90aGVyIHBhY2tldCB3aWxsIGJlIHRpbWUKKwkJICogc3RhbXBlZCB1bnRpbCB3ZSByZWFkIHRoZXNlIHJlZ2lzdGVycywgc28gcmVhZCB0aGUKKwkJICogcmVnaXN0ZXJzIHRvIG1ha2UgdGhlbSBhdmFpbGFibGUgYWdhaW4uIEJlY2F1c2UKKwkJICogb25seSBvbmUgcGFja2V0IGNhbiBiZSB0aW1lIHN0YW1wZWQgYXQgYSB0aW1lLCB3ZQorCQkgKiBrbm93IHRoYXQgdGhlIHJlZ2lzdGVyIHZhbHVlcyBtdXN0IGJlbG9uZyB0byB0aGlzCisJCSAqIG9uZSBoZXJlIGFuZCB0aGVyZWZvcmUgd2UgZG9uJ3QgbmVlZCB0byBjb21wYXJlCisJCSAqIGFueSBvZiB0aGUgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIHN0b3JlZCBmb3IgaXQuCisJCSAqCisJCSAqIElmIG5vdGhpbmcgd2VudCB3cm9uZywgdGhlbiBpdCBzaG91bGQgaGF2ZSBhCisJCSAqIHNrYl9zaGFyZWRfdHggdGhhdCB3ZSBjYW4gdHVybiBpbnRvIGEKKwkJICogc2tiX3NoYXJlZF9od3RzdGFtcHMuCisJCSAqCisJCSAqIFRPRE86IGNhbiB0aW1lIHN0YW1waW5nIGJlIHRyaWdnZXJlZCAodGh1cyBsb2NraW5nCisJCSAqIHRoZSByZWdpc3RlcnMpIHdpdGhvdXQgdGhlIHBhY2tldCByZWFjaGluZyB0aGlzIHBvaW50CisJCSAqIGhlcmU/IEluIHRoYXQgY2FzZSBSWCB0aW1lIHN0YW1waW5nIHdvdWxkIGdldCBzdHVjay4KKwkJICoKKwkJICogVE9ETzogaW4gInRpbWUgc3RhbXAgYWxsIHBhY2tldHMiIG1vZGUgdGhpcyBiaXQgaXMKKwkJICogbm90IHNldC4gTmVlZCBhIGdsb2JhbCBmbGFnIGZvciB0aGlzIG1vZGUgYW5kIHRoZW4KKwkJICogYWx3YXlzIHJlYWQgdGhlIHJlZ2lzdGVycy4gQ2Fubm90IGJlIGRvbmUgd2l0aG91dAorCQkgKiBhIHJhY2UgY29uZGl0aW9uLgorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHN0YXRlcnIgJiBFMTAwMF9SWERfU1RBVF9UUykpIHsKKwkJCXU2NCByZWd2YWw7CisJCQl1NjQgbnM7CisJCQlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKnNoaHd0c3RhbXBzID0KKwkJCQlza2JfaHd0c3RhbXBzKHNrYik7CisKKwkJCVdBUk4oIShyZDMyKEUxMDAwX1RTWU5DUlhDVEwpICYgRTEwMDBfVFNZTkNSWENUTF9WQUxJRCksCisJCQkgICAgICJpZ2I6IG5vIFJYIHRpbWUgc3RhbXAgYXZhaWxhYmxlIGZvciB0aW1lIHN0YW1wZWQgcGFja2V0Iik7CisJCQlyZWd2YWwgPSByZDMyKEUxMDAwX1JYU1RNUEwpOworCQkJcmVndmFsIHw9ICh1NjQpcmQzMihFMTAwMF9SWFNUTVBIKSA8PCAzMjsKKwkJCW5zID0gdGltZWNvdW50ZXJfY3ljMnRpbWUoJmFkYXB0ZXItPmNsb2NrLCByZWd2YWwpOworCQkJdGltZWNvbXBhcmVfdXBkYXRlKCZhZGFwdGVyLT5jb21wYXJlLCBucyk7CisJCQltZW1zZXQoc2hod3RzdGFtcHMsIDAsIHNpemVvZigqc2hod3RzdGFtcHMpKTsKKwkJCXNoaHd0c3RhbXBzLT5od3RzdGFtcCA9IG5zX3RvX2t0aW1lKG5zKTsKKwkJCXNoaHd0c3RhbXBzLT5zeXN0c3RhbXAgPQorCQkJCXRpbWVjb21wYXJlX3RyYW5zZm9ybSgmYWRhcHRlci0+Y29tcGFyZSwgbnMpOworCQl9CiAKIAkJaWYgKHN0YXRlcnIgJiBFMTAwMF9SWERFWFRfRVJSX0ZSQU1FX0VSUl9NQVNLKSB7CiAJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwpAQCAtMzk1OCwxOSArNDU5MywxMSBAQAogCQkvKiB1c2UgcHJlZmV0Y2hlZCB2YWx1ZXMgKi8KIAkJcnhfZGVzYyA9IG5leHRfcnhkOwogCQlidWZmZXJfaW5mbyA9IG5leHRfYnVmZmVyOwotCiAJCXN0YXRlcnIgPSBsZTMyX3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IpOwogCX0KIAogCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwotCWNsZWFuZWRfY291bnQgPSBJR0JfREVTQ19VTlVTRUQocnhfcmluZyk7Ci0KLSNpZmRlZiBDT05GSUdfSUdCX0xSTwotCWlmIChyeF9yaW5nLT5scm9fdXNlZCkgewotCQlscm9fZmx1c2hfYWxsKCZyeF9yaW5nLT5scm9fbWdyKTsKLQkJcnhfcmluZy0+bHJvX3VzZWQgPSAwOwotCX0KLSNlbmRpZgorCWNsZWFuZWRfY291bnQgPSBpZ2JfZGVzY191bnVzZWQocnhfcmluZyk7CiAKIAlpZiAoY2xlYW5lZF9jb3VudCkKIAkJaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KHJ4X3JpbmcsIGNsZWFuZWRfY291bnQpOwpAQCAtMzk4NCw3ICs0NjExLDYgQEAKIAlyZXR1cm4gY2xlYW5lZDsKIH0KIAotCiAvKioKICAqIGlnYl9hbGxvY19yeF9idWZmZXJzX2FkdiAtIFJlcGxhY2UgdXNlZCByZWNlaXZlIGJ1ZmZlcnM7IHBhY2tldCBzcGxpdAogICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTM5OTksMTAgKzQ2MjUsMTcgQEAKIAlzdHJ1Y3QgaWdiX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgYnVmc3o7CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b191c2U7CiAJYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CiAKKwlpZiAoYWRhcHRlci0+cnhfcHNfaGRyX3NpemUpCisJCWJ1ZnN6ID0gYWRhcHRlci0+cnhfcHNfaGRyX3NpemU7CisJZWxzZQorCQlidWZzeiA9IGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW47CisJYnVmc3ogKz0gTkVUX0lQX0FMSUdOOworCiAJd2hpbGUgKGNsZWFuZWRfY291bnQtLSkgewogCQlyeF9kZXNjID0gRTEwMDBfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOwogCkBAIC00MDE4LDIzICs0NjUxLDE0IEBACiAJCQkJYnVmZmVyX2luZm8tPnBhZ2Vfb2Zmc2V0IF49IFBBR0VfU0laRSAvIDI7CiAJCQl9CiAJCQlidWZmZXJfaW5mby0+cGFnZV9kbWEgPQotCQkJCXBjaV9tYXBfcGFnZShwZGV2LAotCQkJCQkgICAgIGJ1ZmZlcl9pbmZvLT5wYWdlLAorCQkJCXBjaV9tYXBfcGFnZShwZGV2LCBidWZmZXJfaW5mby0+cGFnZSwKIAkJCQkJICAgICBidWZmZXJfaW5mby0+cGFnZV9vZmZzZXQsCiAJCQkJCSAgICAgUEFHRV9TSVpFIC8gMiwKIAkJCQkJICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQl9CiAKIAkJaWYgKCFidWZmZXJfaW5mby0+c2tiKSB7Ci0JCQlpbnQgYnVmc3o7Ci0KLQkJCWlmIChhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkKLQkJCQlidWZzeiA9IGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplOwotCQkJZWxzZQotCQkJCWJ1ZnN6ID0gYWRhcHRlci0+cnhfYnVmZmVyX2xlbjsKLQkJCWJ1ZnN6ICs9IE5FVF9JUF9BTElHTjsKIAkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LCBidWZzeik7Ci0KIAkJCWlmICghc2tiKSB7CiAJCQkJYWRhcHRlci0+YWxsb2NfcnhfYnVmZl9mYWlsZWQrKzsKIAkJCQlnb3RvIG5vX2J1ZmZlcnM7CkBAIC00MDUwLDcgKzQ2NzQsNiBAQAogCQkJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKIAkJCQkJCQkgIGJ1ZnN6LAogCQkJCQkJCSAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQogCQl9CiAJCS8qIFJlZnJlc2ggdGhlIGRlc2MgZXZlbiBpZiBidWZmZXJfYWRkcnMgZGlkbid0IGNoYW5nZSBiZWNhdXNlCiAJCSAqIGVhY2ggd3JpdGUtYmFjayBlcmFzZXMgdGhpcyBpbmZvLiAqLwpAQCAtNDEyMCw2ICs0NzQzLDE2MyBAQAogfQogCiAvKioKKyAqIGlnYl9od3RzdGFtcF9pb2N0bCAtIGNvbnRyb2wgaGFyZHdhcmUgdGltZSBzdGFtcGluZworICogQG5ldGRldjoKKyAqIEBpZnJlcToKKyAqIEBjbWQ6CisgKgorICogT3V0Z29pbmcgdGltZSBzdGFtcGluZyBjYW4gYmUgZW5hYmxlZCBhbmQgZGlzYWJsZWQuIFBsYXkgbmljZSBhbmQKKyAqIGRpc2FibGUgaXQgd2hlbiByZXF1ZXN0ZWQsIGFsdGhvdWdoIGl0IHNob3VsZG4ndCBjYXNlIGFueSBvdmVyaGVhZAorICogd2hlbiBubyBwYWNrZXQgbmVlZHMgaXQuIEF0IG1vc3Qgb25lIHBhY2tldCBpbiB0aGUgcXVldWUgbWF5IGJlCisgKiBtYXJrZWQgZm9yIHRpbWUgc3RhbXBpbmcsIG90aGVyd2lzZSBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIHRlbGwKKyAqIGZvciBzdXJlIHRvIHdoaWNoIHBhY2tldCB0aGUgaGFyZHdhcmUgdGltZSBzdGFtcCBiZWxvbmdzLgorICoKKyAqIEluY29taW5nIHRpbWUgc3RhbXBpbmcgaGFzIHRvIGJlIGNvbmZpZ3VyZWQgdmlhIHRoZSBoYXJkd2FyZQorICogZmlsdGVycy4gTm90IGFsbCBjb21iaW5hdGlvbnMgYXJlIHN1cHBvcnRlZCwgaW4gcGFydGljdWxhciBldmVudAorICogdHlwZSBoYXMgdG8gYmUgc3BlY2lmaWVkLiBNYXRjaGluZyB0aGUga2luZCBvZiBldmVudCBwYWNrZXQgaXMKKyAqIG5vdCBzdXBwb3J0ZWQsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiAiYWxsIFYyIGV2ZW50cyByZWdhcmRsZXNzIG9mCisgKiBsZXZlbCAyIG9yIDQiLgorICoKKyAqKi8KK3N0YXRpYyBpbnQgaWdiX2h3dHN0YW1wX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgICBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IGh3dHN0YW1wX2NvbmZpZyBjb25maWc7CisJdTMyIHRzeW5jX3R4X2N0bF9iaXQgPSBFMTAwMF9UU1lOQ1RYQ1RMX0VOQUJMRUQ7CisJdTMyIHRzeW5jX3J4X2N0bF9iaXQgPSBFMTAwMF9UU1lOQ1JYQ1RMX0VOQUJMRUQ7CisJdTMyIHRzeW5jX3J4X2N0bF90eXBlID0gMDsKKwl1MzIgdHN5bmNfcnhfY2ZnID0gMDsKKwlpbnQgaXNfbDQgPSAwOworCWludCBpc19sMiA9IDA7CisJc2hvcnQgcG9ydCA9IDMxOTsgLyogUFRQICovCisJdTMyIHJlZ3ZhbDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmY29uZmlnLCBpZnItPmlmcl9kYXRhLCBzaXplb2YoY29uZmlnKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBleHRlbnNpb25zICovCisJaWYgKGNvbmZpZy5mbGFncykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGNvbmZpZy50eF90eXBlKSB7CisJY2FzZSBIV1RTVEFNUF9UWF9PRkY6CisJCXRzeW5jX3R4X2N0bF9iaXQgPSAwOworCQlicmVhazsKKwljYXNlIEhXVFNUQU1QX1RYX09OOgorCQl0c3luY190eF9jdGxfYml0ID0gRTEwMDBfVFNZTkNUWENUTF9FTkFCTEVEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwlzd2l0Y2ggKGNvbmZpZy5yeF9maWx0ZXIpIHsKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOgorCQl0c3luY19yeF9jdGxfYml0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0VWRU5UOgorCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDoKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfQUxMOgorCQkvKgorCQkgKiByZWdpc3RlciBUU1lOQ1JYQ0ZHIG11c3QgYmUgc2V0LCB0aGVyZWZvcmUgaXQgaXMgbm90CisJCSAqIHBvc3NpYmxlIHRvIHRpbWUgc3RhbXAgYm90aCBTeW5jIGFuZCBEZWxheV9SZXEgbWVzc2FnZXMKKwkJICogPT4gZmFsbCBiYWNrIHRvIHRpbWUgc3RhbXBpbmcgYWxsIHBhY2tldHMKKwkJICovCisJCXRzeW5jX3J4X2N0bF90eXBlID0gRTEwMDBfVFNZTkNSWENUTF9UWVBFX0FMTDsKKwkJY29uZmlnLnJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7CisJCWJyZWFrOworCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DOgorCQl0c3luY19yeF9jdGxfdHlwZSA9IEUxMDAwX1RTWU5DUlhDVExfVFlQRV9MNF9WMTsKKwkJdHN5bmNfcnhfY2ZnID0gRTEwMDBfVFNZTkNSWENGR19QVFBfVjFfU1lOQ19NRVNTQUdFOworCQlpc19sNCA9IDE7CisJCWJyZWFrOworCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9ERUxBWV9SRVE6CisJCXRzeW5jX3J4X2N0bF90eXBlID0gRTEwMDBfVFNZTkNSWENUTF9UWVBFX0w0X1YxOworCQl0c3luY19yeF9jZmcgPSBFMTAwMF9UU1lOQ1JYQ0ZHX1BUUF9WMV9ERUxBWV9SRVFfTUVTU0FHRTsKKwkJaXNfbDQgPSAxOworCQlicmVhazsKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfU1lOQzoKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQzoKKwkJdHN5bmNfcnhfY3RsX3R5cGUgPSBFMTAwMF9UU1lOQ1JYQ1RMX1RZUEVfTDJfTDRfVjI7CisJCXRzeW5jX3J4X2NmZyA9IEUxMDAwX1RTWU5DUlhDRkdfUFRQX1YyX1NZTkNfTUVTU0FHRTsKKwkJaXNfbDIgPSAxOworCQlpc19sNCA9IDE7CisJCWNvbmZpZy5yeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfU09NRTsKKwkJYnJlYWs7CisJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0RFTEFZX1JFUToKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROgorCQl0c3luY19yeF9jdGxfdHlwZSA9IEUxMDAwX1RTWU5DUlhDVExfVFlQRV9MMl9MNF9WMjsKKwkJdHN5bmNfcnhfY2ZnID0gRTEwMDBfVFNZTkNSWENGR19QVFBfVjJfREVMQVlfUkVRX01FU1NBR0U7CisJCWlzX2wyID0gMTsKKwkJaXNfbDQgPSAxOworCQljb25maWcucnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX1NPTUU7CisJCWJyZWFrOworCWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDoKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfU1lOQzoKKwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROgorCQl0c3luY19yeF9jdGxfdHlwZSA9IEUxMDAwX1RTWU5DUlhDVExfVFlQRV9FVkVOVF9WMjsKKwkJY29uZmlnLnJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ7CisJCWlzX2wyID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisJLyogZW5hYmxlL2Rpc2FibGUgVFggKi8KKwlyZWd2YWwgPSByZDMyKEUxMDAwX1RTWU5DVFhDVEwpOworCXJlZ3ZhbCA9IChyZWd2YWwgJiB+RTEwMDBfVFNZTkNUWENUTF9FTkFCTEVEKSB8IHRzeW5jX3R4X2N0bF9iaXQ7CisJd3IzMihFMTAwMF9UU1lOQ1RYQ1RMLCByZWd2YWwpOworCisJLyogZW5hYmxlL2Rpc2FibGUgUlgsIGRlZmluZSB3aGljaCBQVFAgcGFja2V0cyBhcmUgdGltZSBzdGFtcGVkICovCisJcmVndmFsID0gcmQzMihFMTAwMF9UU1lOQ1JYQ1RMKTsKKwlyZWd2YWwgPSAocmVndmFsICYgfkUxMDAwX1RTWU5DUlhDVExfRU5BQkxFRCkgfCB0c3luY19yeF9jdGxfYml0OworCXJlZ3ZhbCA9IChyZWd2YWwgJiB+MHhFKSB8IHRzeW5jX3J4X2N0bF90eXBlOworCXdyMzIoRTEwMDBfVFNZTkNSWENUTCwgcmVndmFsKTsKKwl3cjMyKEUxMDAwX1RTWU5DUlhDRkcsIHRzeW5jX3J4X2NmZyk7CisKKwkvKgorCSAqIEV0aGVydHlwZSBGaWx0ZXIgUXVldWUgRmlsdGVyWzBdWzE1OjBdID0gMHg4OEY3CisJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRXRoZXJ0eXBlIHRvIGZpbHRlciBvbikKKwkgKiBFdGhlcnR5cGUgRmlsdGVyIFF1ZXVlIEZpbHRlclswXVsyNl0gPSAweDEgKEVuYWJsZSBmaWx0ZXIpCisJICogRXRoZXJ0eXBlIEZpbHRlciBRdWV1ZSBGaWx0ZXJbMF1bMzBdID0gMHgxIChFbmFibGUgVGltZXN0YW1waW5nKQorCSAqLworCXdyMzIoRTEwMDBfRVRRRjAsIGlzX2wyID8gMHg0NDAwODhmNyA6IDApOworCisJLyogTDQgUXVldWUgRmlsdGVyWzBdOiBvbmx5IGZpbHRlciBieSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvcnQgKi8KKwl3cjMyKEUxMDAwX1NQUUYwLCBodG9ucyhwb3J0KSk7CisJd3IzMihFMTAwMF9JTUlSRVhUKDApLCBpc19sNCA/CisJICAgICAoKDE8PDEyKSB8ICgxPDwxOSkgLyogYnlwYXNzIHNpemUgYW5kIGNvbnRyb2wgZmxhZ3MgKi8pIDogMCk7CisJd3IzMihFMTAwMF9JTUlSKDApLCBpc19sNCA/CisJICAgICAoaHRvbnMocG9ydCkKKwkgICAgICB8ICgwPDwxNikgLyogaW1tZWRpYXRlIGludGVycnVwdCBkaXNhYmxlZCAqLworCSAgICAgIHwgMCAvKiAoMTw8MTcpIGJpdCBjbGVhcmVkOiBkbyBub3QgYnlwYXNzCisJCSAgICAgZGVzdGluYXRpb24gcG9ydCBjaGVjayAqLykKKwkJOiAwKTsKKwl3cjMyKEUxMDAwX0ZUUUYwLCBpc19sNCA/CisJICAgICAoMHgxMSAvKiBVRFAgKi8KKwkgICAgICB8ICgxPDwxNSkgLyogVkYgbm90IGNvbXBhcmVkICovCisJICAgICAgfCAoMTw8MjcpIC8qIEVuYWJsZSBUaW1lc3RhbXBpbmcgKi8KKwkgICAgICB8ICg3PDwyOCkgLyogb25seSBzb3VyY2UgcG9ydCBmaWx0ZXIgZW5hYmxlZCwKKwkJCSAgIHNvdXJjZS90YXJnZXQgYWRkcmVzcyBhbmQgcHJvdG9jb2wKKwkJCSAgIG1hc2tlZCAqLykKKwkgICAgIDogKCgxPDwxNSkgfCAoMTU8PDI4KSAvKiBhbGwgbWFzayBiaXRzIHNldCA9IGZpbHRlciBub3QKKwkJCQkgICAgICBlbmFibGVkICovKSk7CisKKwl3cmZsKCk7CisKKwlhZGFwdGVyLT5od3RzdGFtcF9jb25maWcgPSBjb25maWc7CisKKwkvKiBjbGVhciBUWC9SWCB0aW1lIHN0YW1wIHJlZ2lzdGVycywganVzdCB0byBiZSBzdXJlICovCisJcmVndmFsID0gcmQzMihFMTAwMF9UWFNUTVBIKTsKKwlyZWd2YWwgPSByZDMyKEUxMDAwX1JYU1RNUEgpOworCisJcmV0dXJuIGNvcHlfdG9fdXNlcihpZnItPmlmcl9kYXRhLCAmY29uZmlnLCBzaXplb2YoY29uZmlnKSkgPworCQktRUZBVUxUIDogMDsKK30KKworLyoqCiAgKiBpZ2JfaW9jdGwgLQogICogQG5ldGRldjoKICAqIEBpZnJlcToKQEAgLTQxMzIsNiArNDkxMiw4IEBACiAJY2FzZSBTSU9DR01JSVJFRzoKIAljYXNlIFNJT0NTTUlJUkVHOgogCQlyZXR1cm4gaWdiX21paV9pb2N0bChuZXRkZXYsIGlmciwgY21kKTsKKwljYXNlIFNJT0NTSFdUU1RBTVA6CisJCXJldHVybiBpZ2JfaHd0c3RhbXBfaW9jdGwobmV0ZGV2LCBpZnIsIGNtZCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KQEAgLTQxNTgsOCArNDk0MCw2IEBACiAJCXJjdGwgJj0gfkUxMDAwX1JDVExfQ0ZJRU47CiAJCXdyMzIoRTEwMDBfUkNUTCwgcmN0bCk7CiAJCWlnYl91cGRhdGVfbW5nX3ZsYW4oYWRhcHRlcik7Ci0JCXdyMzIoRTEwMDBfUkxQTUwsCi0JCQkJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgKyBWTEFOX1RBR19TSVpFKTsKIAl9IGVsc2UgewogCQkvKiBkaXNhYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLwogCQljdHJsID0gcmQzMihFMTAwMF9DVFJMKTsKQEAgLTQxNzAsMTAgKzQ5NTAsMTAgQEAKIAkJCWlnYl92bGFuX3J4X2tpbGxfdmlkKG5ldGRldiwgYWRhcHRlci0+bW5nX3ZsYW5faWQpOwogCQkJYWRhcHRlci0+bW5nX3ZsYW5faWQgPSBJR0JfTU5HX1ZMQU5fTk9ORTsKIAkJfQotCQl3cjMyKEUxMDAwX1JMUE1MLAotCQkJCWFkYXB0ZXItPm1heF9mcmFtZV9zaXplKTsKIAl9CiAKKwlpZ2JfcmxwbWxfc2V0KGFkYXB0ZXIpOworCiAJaWYgKCF0ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQlpZ2JfaXJxX2VuYWJsZShhZGFwdGVyKTsKIH0KQEAgLTQxODIsMjQgKzQ5NjIsMjUgQEAKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0JdTMyIHZmdGEsIGluZGV4OworCWludCBwZl9pZCA9IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQ7CiAKLQlpZiAoKGFkYXB0ZXItPmh3Lm1uZ19jb29raWUuc3RhdHVzICYKKwlpZiAoKGh3LT5tbmdfY29va2llLnN0YXR1cyAmCiAJICAgICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4pICYmCiAJICAgICh2aWQgPT0gYWRhcHRlci0+bW5nX3ZsYW5faWQpKQogCQlyZXR1cm47Ci0JLyogYWRkIFZJRCB0byBmaWx0ZXIgdGFibGUgKi8KLQlpbmRleCA9ICh2aWQgPj4gNSkgJiAweDdGOwotCXZmdGEgPSBhcnJheV9yZDMyKEUxMDAwX1ZGVEEsIGluZGV4KTsKLQl2ZnRhIHw9ICgxIDw8ICh2aWQgJiAweDFGKSk7Ci0JaWdiX3dyaXRlX3ZmdGEoJmFkYXB0ZXItPmh3LCBpbmRleCwgdmZ0YSk7CisKKwkvKiBhZGQgdmlkIHRvIHZsdmYgaWYgc3ItaW92IGlzIGVuYWJsZWQsCisJICogaWYgdGhhdCBmYWlscyBhZGQgZGlyZWN0bHkgdG8gZmlsdGVyIHRhYmxlICovCisJaWYgKGlnYl92bHZmX3NldChhZGFwdGVyLCB2aWQsIHRydWUsIHBmX2lkKSkKKwkJaWdiX3ZmdGFfc2V0KGh3LCB2aWQsIHRydWUpOworCiB9CiAKIHN0YXRpYyB2b2lkIGlnYl92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiB2ZnRhLCBpbmRleDsKKwlpbnQgcGZfaWQgPSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50OwogCiAJaWdiX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwogCXZsYW5fZ3JvdXBfc2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkLCBOVUxMKTsKQEAgLTQyMTUsMTEgKzQ5OTYsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIHJlbW92ZSBWSUQgZnJvbSBmaWx0ZXIgdGFibGUgKi8KLQlpbmRleCA9ICh2aWQgPj4gNSkgJiAweDdGOwotCXZmdGEgPSBhcnJheV9yZDMyKEUxMDAwX1ZGVEEsIGluZGV4KTsKLQl2ZnRhICY9IH4oMSA8PCAodmlkICYgMHgxRikpOwotCWlnYl93cml0ZV92ZnRhKCZhZGFwdGVyLT5odywgaW5kZXgsIHZmdGEpOworCS8qIHJlbW92ZSB2aWQgZnJvbSB2bHZmIGlmIHNyLWlvdiBpcyBlbmFibGVkLAorCSAqIGlmIG5vdCBpbiB2bHZmIHJlbW92ZSBmcm9tIHZmdGEgKi8KKwlpZiAoaWdiX3ZsdmZfc2V0KGFkYXB0ZXIsIHZpZCwgZmFsc2UsIHBmX2lkKSkKKwkJaWdiX3ZmdGFfc2V0KGh3LCB2aWQsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgaWdiX3Jlc3RvcmVfdmxhbihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC00Mjc2LDcgKzUwNTYsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgaWdiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtNDM2OCwxMCArNTE0Nyw3IEBACiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCi0JaWYgKGFkYXB0ZXItPm5lZWRfaW9wb3J0KQotCQllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQllbHNlCi0JCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTsKKwllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiaWdiOiBDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UgZnJvbSBzdXNwZW5kXG4iKTsKQEAgLTQzOTIsNiArNTE2OCwxMSBAQAogCS8qIGUxMDAwX3Bvd2VyX3VwX3BoeShhZGFwdGVyKTsgKi8KIAogCWlnYl9yZXNldChhZGFwdGVyKTsKKworCS8qIGxldCB0aGUgZi93IGtub3cgdGhhdCB0aGUgaC93IGlzIG5vdyB1bmRlciB0aGUgY29udHJvbCBvZiB0aGUKKwkgKiBkcml2ZXIuICovCisJaWdiX2dldF9od19jb250cm9sKGFkYXB0ZXIpOworCiAJd3IzMihFMTAwMF9XVVMsIH4wKTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKQEAgLTQ0MDIsMTAgKzUxODMsNiBAQAogCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwogCi0JLyogbGV0IHRoZSBmL3cga25vdyB0aGF0IHRoZSBoL3cgaXMgbm93IHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZQotCSAqIGRyaXZlci4gKi8KLQlpZ2JfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7Ci0KIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtNDQyNCwyMiArNTIwMSwyNyBAQAogc3RhdGljIHZvaWQgaWdiX25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGk7Ci0JaW50IHdvcmtfZG9uZSA9IDA7CiAKLQlpZ2JfaXJxX2Rpc2FibGUoYWRhcHRlcik7Ci0JYWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfSU5fTkVUUE9MTDsKKwlpZiAoIWFkYXB0ZXItPm1zaXhfZW50cmllcykgeworCQlpZ2JfaXJxX2Rpc2FibGUoYWRhcHRlcik7CisJCW5hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPnJ4X3JpbmdbMF0ubmFwaSk7CisJCXJldHVybjsKKwl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlpZ2JfY2xlYW5fdHhfaXJxKCZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nW2ldOworCQl3cjMyKEUxMDAwX0VJTUMsIHR4X3JpbmctPmVpbXNfdmFsdWUpOworCQlpZ2JfY2xlYW5fdHhfaXJxKHR4X3JpbmcpOworCQl3cjMyKEUxMDAwX0VJTVMsIHR4X3JpbmctPmVpbXNfdmFsdWUpOworCX0KIAotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWlnYl9jbGVhbl9yeF9pcnFfYWR2KCZhZGFwdGVyLT5yeF9yaW5nW2ldLAotCQkJCSAgICAgJndvcmtfZG9uZSwKLQkJCQkgICAgIGFkYXB0ZXItPnJ4X3JpbmdbaV0ubmFwaS53ZWlnaHQpOwotCi0JYWRhcHRlci0+ZmxhZ3MgJj0gfklHQl9GTEFHX0lOX05FVFBPTEw7Ci0JaWdiX2lycV9lbmFibGUoYWRhcHRlcik7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpXTsKKwkJd3IzMihFMTAwMF9FSU1DLCByeF9yaW5nLT5laW1zX3ZhbHVlKTsKKwkJbmFwaV9zY2hlZHVsZSgmcnhfcmluZy0+bmFwaSk7CisJfQogfQogI2VuZGlmIC8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCiAKQEAgLTQ0ODIsMTIgKzUyNjQsNyBAQAogCXBjaV9lcnNfcmVzdWx0X3QgcmVzdWx0OwogCWludCBlcnI7CiAKLQlpZiAoYWRhcHRlci0+bmVlZF9pb3BvcnQpCi0JCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwotCWVsc2UKLQkJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwotCi0JaWYgKGVycikgeworCWlmIChwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOwogCQlyZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwpAQCAtNDU0MCw0ICs1MzE3LDE3MiBAQAogCWlnYl9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGlnYl9zZXRfdm1vbHIoc3RydWN0IGUxMDAwX2h3ICpodywgaW50IHZmbikKK3sKKwl1MzIgcmVnX2RhdGE7CisKKwlyZWdfZGF0YSA9IHJkMzIoRTEwMDBfVk1PTFIodmZuKSk7CisJcmVnX2RhdGEgfD0gRTEwMDBfVk1PTFJfQkFNIHwJIC8qIEFjY2VwdCBicm9hZGNhc3QgKi8KKwkgICAgICAgICAgICBFMTAwMF9WTU9MUl9ST1BFIHwgICAvKiBBY2NlcHQgcGFja2V0cyBtYXRjaGVkIGluIFVUQSAqLworCSAgICAgICAgICAgIEUxMDAwX1ZNT0xSX1JPTVBFIHwgIC8qIEFjY2VwdCBwYWNrZXRzIG1hdGNoZWQgaW4gTVRBICovCisJICAgICAgICAgICAgRTEwMDBfVk1PTFJfQVVQRSB8ICAgLyogQWNjZXB0IHVudGFnZ2VkIHBhY2tldHMgKi8KKwkgICAgICAgICAgICBFMTAwMF9WTU9MUl9TVFJWTEFOOyAvKiBTdHJpcCB2bGFuIHRhZ3MgKi8KKwl3cjMyKEUxMDAwX1ZNT0xSKHZmbiksIHJlZ19kYXRhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaWdiX3NldF92Zl9ybHBtbChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZmbikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiB2bW9scjsKKworCXZtb2xyID0gcmQzMihFMTAwMF9WTU9MUih2Zm4pKTsKKwl2bW9sciAmPSB+RTEwMDBfVk1PTFJfUkxQTUxfTUFTSzsKKwl2bW9sciB8PSBzaXplIHwgRTEwMDBfVk1PTFJfTFBFOworCXdyMzIoRTEwMDBfVk1PTFIodmZuKSwgdm1vbHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfc2V0X3JhaF9wb29sKHN0cnVjdCBlMTAwMF9odyAqaHcsIGludCBwb29sLCBpbnQgZW50cnkpCit7CisJdTMyIHJlZ19kYXRhOworCisJcmVnX2RhdGEgPSByZDMyKEUxMDAwX1JBSChlbnRyeSkpOworCXJlZ19kYXRhICY9IH5FMTAwMF9SQUhfUE9PTF9NQVNLOworCXJlZ19kYXRhIHw9IEUxMDAwX1JBSF9QT09MXzEgPDwgcG9vbDs7CisJd3IzMihFMTAwMF9SQUgoZW50cnkpLCByZWdfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGlnYl9zZXRfbWNfbGlzdF9wb29scyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICBpbnQgZW50cnlfY291bnQsIHUxNiB0b3RhbF9yYXJfZmlsdGVycykKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBpID0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCArIDE7CisKKwlpZiAoKGkgKyBlbnRyeV9jb3VudCkgPCB0b3RhbF9yYXJfZmlsdGVycykKKwkJdG90YWxfcmFyX2ZpbHRlcnMgPSBpICsgZW50cnlfY291bnQ7CisKKwlmb3IgKDsgaSA8IHRvdGFsX3Jhcl9maWx0ZXJzOyBpKyspCisJCWlnYl9zZXRfcmFoX3Bvb2woaHcsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQsIGkpOworfQorCitzdGF0aWMgaW50IGlnYl9zZXRfdmZfbWFjKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZmLCB1bnNpZ25lZCBjaGFyICptYWNfYWRkcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCByYXJfZW50cnkgPSB2ZiArIDE7IC8qIFZGIE1BQyBhZGRyZXNzZXMgc3RhcnQgYXQgZW50cnkgMSAqLworCisJaWdiX3Jhcl9zZXQoaHcsIG1hY19hZGRyLCByYXJfZW50cnkpOworCisJbWVtY3B5KGFkYXB0ZXItPnZmX2RhdGFbdmZdLnZmX21hY19hZGRyZXNzZXMsIG1hY19hZGRyLCBFVEhfQUxFTik7CisKKwlpZ2Jfc2V0X3JhaF9wb29sKGh3LCB2ZiwgcmFyX2VudHJ5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZ2Jfdm1tX2NvbnRyb2woc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHJlZ19kYXRhOworCisJaWYgKCFhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KQorCQlyZXR1cm47CisKKwkvKiBWRidzIG5lZWQgUEYgcmVzZXQgaW5kaWNhdGlvbiBiZWZvcmUgdGhleQorCSAqIGNhbiBzZW5kL3JlY2VpdmUgbWFpbCAqLworCXJlZ19kYXRhID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7CisJcmVnX2RhdGEgfD0gRTEwMDBfQ1RSTF9FWFRfUEZSU1REOworCXdyMzIoRTEwMDBfQ1RSTF9FWFQsIHJlZ19kYXRhKTsKKworCWlnYl92bWRxX3NldF9sb29wYmFja19wZihodywgdHJ1ZSk7CisJaWdiX3ZtZHFfc2V0X3JlcGxpY2F0aW9uX3BmKGh3LCB0cnVlKTsKK30KKworI2lmZGVmIENPTkZJR19QQ0lfSU9WCitzdGF0aWMgc3NpemVfdCBpZ2Jfc2hvd19udW1fdmZzKHN0cnVjdCBkZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdih0b19uZXRfZGV2KGRldikpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpOworfQorCitzdGF0aWMgc3NpemVfdCBpZ2Jfc2V0X251bV92ZnMoc3RydWN0IGRldmljZSAqZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB0b19uZXRfZGV2KGRldik7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1bnNpZ25lZCBpbnQgbnVtX3ZmcywgaTsKKwl1bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsKKwlpbnQgZXJyOworCisJc3NjYW5mKGJ1ZiwgIiV1IiwgJm51bV92ZnMpOworCisJaWYgKG51bV92ZnMgPiA3KQorCQludW1fdmZzID0gNzsKKworCS8qIHZhbHVlIHVuY2hhbmdlZCBkbyBub3RoaW5nICovCisJaWYgKG51bV92ZnMgPT0gYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkKKwkJcmV0dXJuIGNvdW50OworCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCWlnYl9jbG9zZShuZXRkZXYpOworCisJaWdiX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworCWlnYl9mcmVlX3F1ZXVlcyhhZGFwdGVyKTsKKwlhZGFwdGVyLT50eF9yaW5nID0gTlVMTDsKKwlhZGFwdGVyLT5yeF9yaW5nID0gTlVMTDsKKwlhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50ID0gMDsKKworCS8qIHJlY2xhaW0gcmVzb3VyY2VzIGFsbG9jYXRlZCB0byBWRnMgc2luY2Ugd2UgYXJlIGNoYW5naW5nIGNvdW50ICovCisJaWYgKGFkYXB0ZXItPnZmX2RhdGEpIHsKKwkJLyogZGlzYWJsZSBpb3YgYW5kIGFsbG93IHRpbWUgZm9yIHRyYW5zYWN0aW9ucyB0byBjbGVhciAqLworCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKKwkJbXNsZWVwKDUwMCk7CisKKwkJa2ZyZWUoYWRhcHRlci0+dmZfZGF0YSk7CisJCWFkYXB0ZXItPnZmX2RhdGEgPSBOVUxMOworCQl3cjMyKEUxMDAwX0lPVkNUTCwgRTEwMDBfSU9WQ1RMX1JFVVNFX1ZGUSk7CisJCW1zbGVlcCgxMDApOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSU9WIERpc2FibGVkXG4iKTsKKwl9CisKKwlpZiAobnVtX3ZmcykgeworCQlhZGFwdGVyLT52Zl9kYXRhID0ga2NhbGxvYyhudW1fdmZzLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHZmX2RhdGFfc3RvcmFnZSksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWFkYXB0ZXItPnZmX2RhdGEpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBWRiBwcml2YXRlICIKKwkJCQkiZGF0YSAtIElPViBlbmFibGUgZmFpbGVkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IHBjaV9lbmFibGVfc3Jpb3YocGRldiwgbnVtX3Zmcyk7CisJCQlpZiAoIWVycikgeworCQkJCWFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQgPSBudW1fdmZzOworCQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlZCB2ZnMgYWxsb2NhdGVkXG4iLCBudW1fdmZzKTsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudDsgaSsrKSB7CisJCQkJCXJhbmRvbV9ldGhlcl9hZGRyKG1hY19hZGRyKTsKKwkJCQkJaWdiX3NldF92Zl9tYWMoYWRhcHRlciwgaSwgbWFjX2FkZHIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJa2ZyZWUoYWRhcHRlci0+dmZfZGF0YSk7CisJCQkJYWRhcHRlci0+dmZfZGF0YSA9IE5VTEw7CisJCQl9CisJCX0KKwl9CisKKwlpZ2Jfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworCWlnYl9hbGxvY19xdWV1ZXMoYWRhcHRlcik7CisJaWdiX3Jlc2V0KGFkYXB0ZXIpOworCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCWlnYl9vcGVuKG5ldGRldik7CisKKwlyZXR1cm4gY291bnQ7Cit9CisjZW5kaWYgLyogQ09ORklHX1BDSV9JT1YgKi8KIC8qIGlnYl9tYWluLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYwppbmRleCAxNzc3OWY5Li5hZDE3OTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCkBAIC0yNTksNiArMjU5LDIwIEBACiAJSVJEQV9ERUJVRygyLCAiJXMoKSwgLS0tLS0tLS0tLS0tLS0tLS0gRW5kIC0tLS0tLS0tLS0tLS0tLS0tXG4iLCBfX2Z1bmNfXyk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWxpX2lyY2Nfc2lyX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBhbGlfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBhbGlfaXJjY19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gYWxpX2lyY2Nfc2lyX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBhbGlfaXJjY19uZXRfaW9jdGwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFsaV9pcmNjX2Zpcl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gYWxpX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gYWxpX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IGFsaV9pcmNjX2Zpcl9oYXJkX3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gYWxpX2lyY2NfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIGFsaV9pcmNjX29wZW4gKGludCBpLCBjaGlwaW9fdCAqaW5mKQogICoKQEAgLTM2MSwxMCArMzc1LDcgQEAKIAlzZWxmLT50eF9maWZvLnRhaWwgPSBzZWxmLT50eF9idWZmLmhlYWQ7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGFsaV9pcmNjX3Npcl9oYXJkX3htaXQ7Ci0JZGV2LT5vcGVuICAgICAgICAgICAgPSBhbGlfaXJjY19uZXRfb3BlbjsKLQlkZXYtPnN0b3AgICAgICAgICAgICA9IGFsaV9pcmNjX25ldF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsICAgICAgICA9IGFsaV9pcmNjX25ldF9pb2N0bDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYWxpX2lyY2Nfc2lyX29wczsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKQEAgLTk3NCw3ICs5ODUsNyBAQAogCQlhbGlfaXJjY19maXJfY2hhbmdlX3NwZWVkKHNlbGYsIGJhdWQpOwkJCQogCQkKIAkJLyogSW5zdGFsbCBGSVIgeG1pdCBoYW5kbGVyKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBhbGlfaXJjY19maXJfaGFyZF94bWl0OwkJCisJCWRldi0+bmV0ZGV2X29wcyA9ICZhbGlfaXJjY19maXJfb3BzOwogCQkJCQogCQkvKiBFbmFibGUgSW50ZXJ1dXB0ICovCiAJCXNlbGYtPmllciA9IElFUl9FT007IC8vIGJlbmphbWluIDIwMDAvMTEvMjAgMDc6MjRQTQkJCQkJCkBAIC05ODgsNyArOTk5LDcgQEAKIAkJYWxpX2lyY2Nfc2lyX2NoYW5nZV9zcGVlZChzZWxmLCBiYXVkKTsKIAkJCQkKIAkJLyogSW5zdGFsbCBTSVIgeG1pdCBoYW5kbGVyKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBhbGlfaXJjY19zaXJfaGFyZF94bWl0OworCQlkZXYtPm5ldGRldl9vcHMgPSAmYWxpX2lyY2Nfc2lyX29wczsKIAl9CiAJCiAJCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCmluZGV4IDZmM2U3ZjcuLjZiNjU0OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKQEAgLTE1MjQsNiArMTUyNCwxMyBAQAogICBmcmVlX25ldGRldihzZWxmLT5uZXRkZXYpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRvc2hvYm9lX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gdG9zaG9ib2VfbmV0X29wZW4sCisJLm5kb19zdG9wCT0gdG9zaG9ib2VfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAk9IHRvc2hvYm9lX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsCT0gdG9zaG9ib2VfbmV0X2lvY3RsLAorfTsKKwogc3RhdGljIGludAogdG9zaG9ib2Vfb3BlbiAoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwZGlkKQogewpAQCAtMTY1NywxMCArMTY2NCw3IEBACiAjZW5kaWYKIAogICBTRVRfTkVUREVWX0RFVihkZXYsICZwY2lfZGV2LT5kZXYpOwotICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHRvc2hvYm9lX2hhcmRfeG1pdDsKLSAgZGV2LT5vcGVuID0gdG9zaG9ib2VfbmV0X29wZW47Ci0gIGRldi0+c3RvcCA9IHRvc2hvYm9lX25ldF9jbG9zZTsKLSAgZGV2LT5kb19pb2N0bCA9IHRvc2hvYm9lX25ldF9pb2N0bDsKKyAgZGV2LT5uZXRkZXZfb3BzID0gJnRvc2hvYm9lX25ldGRldl9vcHM7CiAKICAgZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAgIGlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKaW5kZXggM2EyMmRjNC4uMDA2YmEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwpAQCAtMTQwMSw2ICsxNDAxLDE0IEBACiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXJkYV91c2JfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBpcmRhX3VzYl9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBpcmRhX3VzYl9uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCAgID0gaXJkYV91c2JfbmV0X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdCA9IGlyZGFfdXNiX2hhcmRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJPSBpcmRhX3VzYl9uZXRfdGltZW91dCwKK307CisKIC8qCiAgKiBJbml0aWFsaXNlIHRoZSBuZXR3b3JrIHNpZGUgb2YgdGhlIGlyZGEtdXNiIGluc3RhbmNlCiAgKiBDYWxsZWQgd2hlbiBhIG5ldyBVU0IgaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCBpbiBpcmRhX3VzYl9wcm9iZSgpCkBAIC0xNDExLDE1ICsxNDE5LDkgQEAKIAogCUlSREFfREVCVUcoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAotCWlyZGFfdXNiX2luaXRfcW9zKHNlbGYpOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZpcmRhX3VzYl9uZXRkZXZfb3BzOwogCi0JLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpcmRhX3VzYl9oYXJkX3htaXQ7Ci0JbmV0ZGV2LT50eF90aW1lb3V0CT0gaXJkYV91c2JfbmV0X3RpbWVvdXQ7Ci0JbmV0ZGV2LT53YXRjaGRvZ190aW1lbyAgPSAyNTAqSFovMTAwMDsJLyogMjUwIG1zID4gVVNCIHRpbWVvdXQgKi8KLQluZXRkZXYtPm9wZW4gICAgICAgICAgICA9IGlyZGFfdXNiX25ldF9vcGVuOwotCW5ldGRldi0+c3RvcCAgICAgICAgICAgID0gaXJkYV91c2JfbmV0X2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgICAgICAgID0gaXJkYV91c2JfbmV0X2lvY3RsOworCWlyZGFfdXNiX2luaXRfcW9zKHNlbGYpOwogCiAJcmV0dXJuIHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCmluZGV4IGI0YTYxNzEuLjlkODEzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKQEAgLTQxOCw2ICs0MTgsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGtpbmdzdW5fb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IGtpbmdzdW5faGFyZF94bWl0LAorCS5uZG9fb3BlbiAgICAgICAgICAgID0ga2luZ3N1bl9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgICAgICA9IGtpbmdzdW5fbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwgICAgICAgID0ga2luZ3N1bl9uZXRfaW9jdGwsCit9OwogCiAvKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlCkBAIC01MjAsMTAgKzUyNiw3IEBACiAJaXJkYV9xb3NfYml0c190b192YWx1ZSgma2luZ3N1bi0+cW9zKTsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5ldC0+aGFyZF9zdGFydF94bWl0ID0ga2luZ3N1bl9oYXJkX3htaXQ7Ci0JbmV0LT5vcGVuICAgICAgICAgICAgPSBraW5nc3VuX25ldF9vcGVuOwotCW5ldC0+c3RvcCAgICAgICAgICAgID0ga2luZ3N1bl9uZXRfY2xvc2U7Ci0JbmV0LT5kb19pb2N0bCAgICAgICAgPSBraW5nc3VuX25ldF9pb2N0bDsKKwluZXQtPm5ldGRldl9vcHMgPSAma2luZ3N1bl9vcHM7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmV0KTsKIAlpZiAocmV0ICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwppbmRleCA1NTMyMmZiLi5iNmZmZTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKQEAgLTY2OCw2ICs2NjgsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGtzOTU5X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQJPSBrczk1OV9oYXJkX3htaXQsCisJLm5kb19vcGVuCT0ga3M5NTlfbmV0X29wZW4sCisJLm5kb19zdG9wCT0ga3M5NTlfbmV0X2Nsb3NlLAorCS5uZG9fZG9faW9jdGwJPSBrczk1OV9uZXRfaW9jdGwsCit9OwogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gZm9yIGVhY2ggbmV3IGRldmljZQogICogaW4gdGhlIHN5c3RlbS4gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIG91cnMsIGFuZCBpbgpAQCAtNzgwLDEwICs3ODYsNyBAQAogCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJmtpbmdzdW4tPnFvcyk7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGtzOTU5X2hhcmRfeG1pdDsKLQluZXQtPm9wZW4gPSBrczk1OV9uZXRfb3BlbjsKLQluZXQtPnN0b3AgPSBrczk1OV9uZXRfY2xvc2U7Ci0JbmV0LT5kb19pb2N0bCA9IGtzOTU5X25ldF9pb2N0bDsKKwluZXQtPm5ldGRldl9vcHMgPSAma3M5NTlfb3BzOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEva3NkYXp6bGUtc2lyLmMKaW5kZXggNWIzMjdiMC4uNjRkZjI3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9rc2RhenpsZS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2tzZGF6emxlLXNpci5jCkBAIC01NjIsNiArNTYyLDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBrc2RhenpsZV9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CT0ga3NkYXp6bGVfaGFyZF94bWl0LAorCS5uZG9fb3Blbgk9IGtzZGF6emxlX25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGtzZGF6emxlX25ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCT0ga3NkYXp6bGVfbmV0X2lvY3RsLAorfTsKKwogLyoKICAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgdGhlIFVTQiBzdWJzeXN0ZW0gZm9yIGVhY2ggbmV3IGRldmljZQogICogaW4gdGhlIHN5c3RlbS4gV2UgbmVlZCB0byBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIG91cnMsIGFuZCBpbgpAQCAtNjg0LDEwICs2OTEsNyBAQAogCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJmtpbmdzdW4tPnFvcyk7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGtzZGF6emxlX2hhcmRfeG1pdDsKLQluZXQtPm9wZW4gPSBrc2RhenpsZV9uZXRfb3BlbjsKLQluZXQtPnN0b3AgPSBrc2RhenpsZV9uZXRfY2xvc2U7Ci0JbmV0LT5kb19pb2N0bCA9IGtzZGF6emxlX25ldF9pb2N0bDsKKwluZXQtPm5ldGRldl9vcHMgPSAma3NkYXp6bGVfb3BzOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CiAJaWYgKHJldCAhPSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwppbmRleCA4NWU4OGRhLi5mYWM1MDRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL21jczc3ODAuYwpAQCAtODczLDYgKzg3MywxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbWNzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gbWNzX25ldF9vcGVuLAorCS5uZG9fc3RvcCA9IG1jc19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gbWNzX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsID0gbWNzX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgVVNCIHN1YnN5c3RlbSBmb3IgZWFjaCBuZXcgZGV2aWNlIGluIHRoZQogICogc3lzdGVtLiAgTmVlZCB0byB2ZXJpZnkgdGhlIGRldmljZSBhbmQgaWYgaXQgaXMsIHRoZW4gc3RhcnQgaGFuZGxpbmcgaXQuCkBAIC05MTksMTEgKzkyNiw3IEBACiAJLyogU3BlZWQgY2hhbmdlIHdvcmsgaW5pdGlhbGlzYXRpb24qLwogCUlOSVRfV09SSygmbWNzLT53b3JrLCBtY3Nfc3BlZWRfd29yayk7CiAKLQkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBtY3NfaGFyZF94bWl0OwotCW5kZXYtPm9wZW4gPSBtY3NfbmV0X29wZW47Ci0JbmRldi0+c3RvcCA9IG1jc19uZXRfY2xvc2U7Ci0JbmRldi0+ZG9faW9jdGwgPSBtY3NfbmV0X2lvY3RsOworCW5kZXYtPm5ldGRldl9vcHMgPSAmbWNzX25ldGRldl9vcHM7CiAKIAlpZiAoIWludGYtPmN1cl9hbHRzZXR0aW5nKQogCQlnb3RvIGVycm9yMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYwppbmRleCA2MWU1MDljLi40NWZkOWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCkBAIC0zMzEsNiArMzMxLDIwIEBACiAJcG5wX3JlZ2lzdGVyZWQgPSAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5zY19pcmNjX3Npcl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gbnNjX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gbnNjX2lyY2NfbmV0X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9zaXIsCisJLm5kb19kb19pb2N0bCAgID0gbnNjX2lyY2NfbmV0X2lvY3RsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuc2NfaXJjY19maXJfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IG5zY19pcmNjX25ldF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IG5zY19pcmNjX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBuc2NfaXJjY19oYXJkX3htaXRfZmlyLAorCS5uZG9fZG9faW9jdGwgICA9IG5zY19pcmNjX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBGdW5jdGlvbiBuc2NfaXJjY19vcGVuIChpb2Jhc2UsIGlycSkKICAqCkBAIC00NDEsMTAgKzQ1NSw3IEBACiAJc2VsZi0+dHhfZmlmby50YWlsID0gc2VsZi0+dHhfYnVmZi5oZWFkOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBuc2NfaXJjY19oYXJkX3htaXRfc2lyOwotCWRldi0+b3BlbiAgICAgICAgICAgID0gbnNjX2lyY2NfbmV0X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICAgPSBuc2NfaXJjY19uZXRfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCAgICAgICAgPSBuc2NfaXJjY19uZXRfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJm5zY19pcmNjX3Npcl9vcHM7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC0xMzIwLDEyICsxMzMxLDEyIEBACiAJc3dpdGNoX2JhbmsoaW9iYXNlLCBCQU5LMCk7IAogCWlmIChzcGVlZCA+IDExNTIwMCkgewogCQkvKiBJbnN0YWxsIEZJUiB4bWl0IGhhbmRsZXIgKi8KLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBuc2NfaXJjY19oYXJkX3htaXRfZmlyOworCQlkZXYtPm5ldGRldl9vcHMgPSAmbnNjX2lyY2NfZmlyX29wczsKIAkJaWVyID0gSUVSX1NGSUZfSUU7CiAJCW5zY19pcmNjX2RtYV9yZWNlaXZlKHNlbGYpOwogCX0gZWxzZSB7CiAJCS8qIEluc3RhbGwgU0lSIHhtaXQgaGFuZGxlciAqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG5zY19pcmNjX2hhcmRfeG1pdF9zaXI7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZuc2NfaXJjY19zaXJfb3BzOwogCQlpZXIgPSBJRVJfUlhIRExfSUU7CiAJfQogCS8qIFNldCBvdXIgY3VycmVudCBpbnRlcnJ1cHQgbWFzayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9weGFmaWNwX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYwppbmRleCAzMTc5NGMyLi5lNzc1MzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3B4YWZpY3BfaXIuYwpAQCAtMjQsOSArMjQsOCBAQAogCiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2lyZGEuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLW9zdC5oPgogCiAjZGVmaW5lIEZJQ1AJCV9fUkVHKDB4NDA4MDAwMDApICAvKiBTdGFydCBvZiBGSUNQIGFyZWEgKi8KICNkZWZpbmUgSUNDUjAJCV9fUkVHKDB4NDA4MDAwMDApICAvKiBJQ1AgQ29udHJvbCBSZWdpc3RlciAwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Npcl9kZXYuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCmluZGV4IDViNTg2MjQuLmQ5NDA4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2lyX2Rldi5jCkBAIC03NTMsNyArNzUzLDggQEAKIAlkZXYtPnJ4X2J1ZmYudHJ1ZXNpemUgPSBJUkRBX1NLQl9NQVhfTVRVOyAKIAogCS8qIEJvb3RzdHJhcCBaZXJvQ29weSBSeCAqLwotCWRldi0+cnhfYnVmZi5za2IgPSBfX2Rldl9hbGxvY19za2IoZGV2LT5yeF9idWZmLnRydWVzaXplLCBHRlBfS0VSTkVMKTsKKwlkZXYtPnJ4X2J1ZmYuc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKGRldi0+bmV0ZGV2LCBkZXYtPnJ4X2J1ZmYudHJ1ZXNpemUsCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCWlmIChkZXYtPnJ4X2J1ZmYuc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXNrYl9yZXNlcnZlKGRldi0+cnhfYnVmZi5za2IsIDEpOwpAQCAtNzc5LDggKzc4MCw3IEBACiAKIHN0YXRpYyB2b2lkIHNpcmRldl9mcmVlX2J1ZmZlcnMoc3RydWN0IHNpcl9kZXYgKmRldikKIHsKLQlpZiAoZGV2LT5yeF9idWZmLnNrYikKLQkJa2ZyZWVfc2tiKGRldi0+cnhfYnVmZi5za2IpOworCWtmcmVlX3NrYihkZXYtPnJ4X2J1ZmYuc2tiKTsKIAlrZnJlZShkZXYtPnR4X2J1ZmYuaGVhZCk7CiAJZGV2LT5yeF9idWZmLmhlYWQgPSBkZXYtPnR4X2J1ZmYuaGVhZCA9IE5VTEw7CiAJZGV2LT5yeF9idWZmLnNrYiA9IE5VTEw7CkBAIC04NjUsNiArODY1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2lyZGV2X29wcyA9IHsKKwkubmRvX3N0YXJ0X3htaXQJPSBzaXJkZXZfaGFyZF94bWl0LAorCS5uZG9fb3Blbgk9IHNpcmRldl9vcGVuLAorCS5uZG9fc3RvcAk9IHNpcmRldl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCT0gc2lyZGV2X2lvY3RsLAorfTsKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBzaXJfZGV2ICogc2lyZGV2X2dldF9pbnN0YW5jZShjb25zdCBzdHJ1Y3Qgc2lyX2RyaXZlciAqZHJ2LCBjb25zdCBjaGFyICpuYW1lKQpAQCAtOTA4LDEwICs5MTQsNyBAQAogCWRldi0+bmV0ZGV2ID0gbmRldjsKIAogCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCW5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNpcmRldl9oYXJkX3htaXQ7Ci0JbmRldi0+b3BlbiA9IHNpcmRldl9vcGVuOwotCW5kZXYtPnN0b3AgPSBzaXJkZXZfY2xvc2U7Ci0JbmRldi0+ZG9faW9jdGwgPSBzaXJkZXZfaW9jdGw7CisJbmRldi0+bmV0ZGV2X29wcyA9ICZzaXJkZXZfb3BzOwogCiAJaWYgKHJlZ2lzdGVyX25ldGRldihuZGV2KSkgewogCQlJUkRBX0VSUk9SKCIlcygpLCByZWdpc3Rlcl9uZXRkZXYoKSBmYWlsZWQhXG4iLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Ntc2MtaXJjYzIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCmluZGV4IGRkNzNjY2UuLjU5ZDc5ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jCkBAIC00ODYsNiArNDg2LDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBzbXNjX2lyY2NfbmV0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21zY19pcmNjX2NiICpzZWxmID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChzZWxmLT5pby5zcGVlZCA+IDExNTIwMCkKKwkJcmV0dXJuIAlzbXNjX2lyY2NfaGFyZF94bWl0X2Zpcihza2IsIGRldik7CisJZWxzZQorCQlyZXR1cm4gCXNtc2NfaXJjY19oYXJkX3htaXRfc2lyKHNrYiwgZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbXNjX2lyY2NfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBzbXNjX2lyY2NfbmV0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gc21zY19pcmNjX25ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsICAgPSBzbXNjX2lyY2NfbmV0X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdCA9IHNtc2NfaXJjY19uZXRfeG1pdCwKKyNpZiBTTVNDX0lSQ0MyX0NfTkVUX1RJTUVPVVQKKwkubmRvX3R4X3RpbWVvdXQJPSBzbXNjX2lyY2NfdGltZW91dCwKKyNlbmRpZgorfTsKKwogLyoKICAqIEZ1bmN0aW9uIHNtc2NfaXJjY19vcGVuIChmaXJiYXNlLCBzaXJiYXNlLCBkbWEsIGlycSkKICAqCkBAIC01MTksMTQgKzUzOSwxMCBAQAogCQlnb3RvIGVycl9vdXQxOwogCX0KIAotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc21zY19pcmNjX2hhcmRfeG1pdF9zaXI7CiAjaWYgU01TQ19JUkNDMl9DX05FVF9USU1FT1VUCi0JZGV2LT50eF90aW1lb3V0CSAgICAgPSBzbXNjX2lyY2NfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvICA9IEhaICogMjsgIC8qIEFsbG93IGVub3VnaCB0aW1lIGZvciBzcGVlZCBjaGFuZ2UgKi8KICNlbmRpZgotCWRldi0+b3BlbiAgICAgICAgICAgID0gc21zY19pcmNjX25ldF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgID0gc21zY19pcmNjX25ldF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsICAgICAgICA9IHNtc2NfaXJjY19uZXRfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNtc2NfaXJjY19uZXRkZXZfb3BzOwogCiAJc2VsZiA9IG5ldGRldl9wcml2KGRldik7CiAJc2VsZi0+bmV0ZGV2ID0gZGV2OwpAQCAtOTk1LDkgKzEwMTEsNiBAQAogCiAJLyogUmVzZXQgZXZlcnl0aGluZyAqLwogCi0JLyogSW5zdGFsbCBGSVIgdHJhbnNtaXQgaGFuZGxlciAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gc21zY19pcmNjX2hhcmRfeG1pdF9maXI7Ci0KIAkvKiBDbGVhciBGSUZPICovCiAJb3V0YihpbmIoZmlyX2Jhc2UgKyBJUkNDX0xDUl9BKSB8IElSQ0NfTENSX0FfRklGT19SRVNFVCwgZmlyX2Jhc2UgKyBJUkNDX0xDUl9BKTsKIApAQCAtMTg5NCw3ICsxOTA3LDYgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCWRldiA9IHNlbGYtPm5ldGRldjsKIAlJUkRBX0FTU0VSVChkZXYgIT0gTlVMTCwgcmV0dXJuOyk7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc21zY19pcmNjX2hhcmRfeG1pdF9zaXI7CiAKIAlmaXJfYmFzZSA9IHNlbGYtPmlvLmZpcl9iYXNlOwogCXNpcl9iYXNlID0gc2VsZi0+aW8uc2lyX2Jhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKaW5kZXggOGIxNjU4Yy4uOGU1ZTQ1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYwpAQCAtMTAwNyw2ICsxMDA3LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzdGlyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gc3Rpcl9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBzdGlyX25ldF9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgPSBzdGlyX2hhcmRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBzdGlyX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHRoZSBVU0Igc3Vic3lzdGVtIGZvciBlYWNoIG5ldyBkZXZpY2UKICAqIGluIHRoZSBzeXN0ZW0uIFdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIGRldmljZSBpcyBvdXJzLCBhbmQgaW4KQEAgLTEwNTQsMTAgKzEwNjEsNyBAQAogCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJnN0aXItPnFvcyk7CiAKIAkvKiBPdmVycmlkZSB0aGUgbmV0d29yayBmdW5jdGlvbnMgd2UgbmVlZCB0byB1c2UgKi8KLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IHN0aXJfaGFyZF94bWl0OwotCW5ldC0+b3BlbiAgICAgICAgICAgID0gc3Rpcl9uZXRfb3BlbjsKLQluZXQtPnN0b3AgICAgICAgICAgICA9IHN0aXJfbmV0X2Nsb3NlOwotCW5ldC0+ZG9faW9jdGwgICAgICAgID0gc3Rpcl9uZXRfaW9jdGw7CisJbmV0LT5uZXRkZXZfb3BzID0gJnN0aXJfbmV0ZGV2X29wczsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZXQpOwogCWlmIChyZXQgIT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYwppbmRleCA4YjNlNTQ1Li44NjQ3OTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCkBAIC0zMTAsNiArMzEwLDE5IEBACiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyICgmdmlhX2RyaXZlcik7IAogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZpYV9pcmNjX3Npcl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0ID0gdmlhX2lyY2NfaGFyZF94bWl0X3NpciwKKwkubmRvX29wZW4gPSB2aWFfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgPSB2aWFfaXJjY19uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCA9IHZpYV9pcmNjX25ldF9pb2N0bCwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZpYV9pcmNjX2Zpcl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0ID0gdmlhX2lyY2NfaGFyZF94bWl0X2ZpciwKKwkubmRvX29wZW4gPSB2aWFfaXJjY19uZXRfb3BlbiwKKwkubmRvX3N0b3AgPSB2aWFfaXJjY19uZXRfY2xvc2UsCisJLm5kb19kb19pb2N0bCA9IHZpYV9pcmNjX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBGdW5jdGlvbiB2aWFfaXJjY19vcGVuIChpb2Jhc2UsIGlycSkKICAqCkBAIC00MjgsMTAgKzQ0MSw3IEBACiAJc2VsZi0+dHhfZmlmby50YWlsID0gc2VsZi0+dHhfYnVmZi5oZWFkOwogCiAJLyogT3ZlcnJpZGUgdGhlIG5ldHdvcmsgZnVuY3Rpb25zIHdlIG5lZWQgdG8gdXNlICovCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2aWFfaXJjY19oYXJkX3htaXRfc2lyOwotCWRldi0+b3BlbiA9IHZpYV9pcmNjX25ldF9vcGVuOwotCWRldi0+c3RvcCA9IHZpYV9pcmNjX25ldF9jbG9zZTsKLQlkZXYtPmRvX2lvY3RsID0gdmlhX2lyY2NfbmV0X2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZ2aWFfaXJjY19zaXJfb3BzOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikKQEAgLTc5OCwxMSArODA4LDExIEBACiAKIAlpZiAoc3BlZWQgPiAxMTUyMDApIHsKIAkJLyogSW5zdGFsbCBGSVIgeG1pdCBoYW5kbGVyICovCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdmlhX2lyY2NfaGFyZF94bWl0X2ZpcjsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJnZpYV9pcmNjX2Zpcl9vcHM7CiAJCXZpYV9pcmNjX2RtYV9yZWNlaXZlKHNlbGYpOwogCX0gZWxzZSB7CiAJCS8qIEluc3RhbGwgU0lSIHhtaXQgaGFuZGxlciAqLwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHZpYV9pcmNjX2hhcmRfeG1pdF9zaXI7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZ2aWFfaXJjY19zaXJfb3BzOwogCX0KIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCmluZGV4IDcyM2M0NTguLjEyNDNiYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCkBAIC0xNTczLDYgKzE1NzMsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2bHNpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gdmxzaV9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHZsc2lfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gdmxzaV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gdmxzaV9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSB2bHNpX3R4X3RpbWVvdXQsCit9OworCiBzdGF0aWMgaW50IHZsc2lfaXJkYV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewogCXZsc2lfaXJkYV9kZXZfdCAqaWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtMTYwOCwxMSArMTYxNiw3IEBACiAJbmRldi0+ZmxhZ3MgfD0gSUZGX1BPUlRTRUwgfCBJRkZfQVVUT01FRElBOwogCW5kZXYtPmlmX3BvcnQgPSBJRl9QT1JUX1VOS05PV047CiAgCi0JbmRldi0+b3BlbgkgICAgICA9IHZsc2lfb3BlbjsKLQluZGV2LT5zdG9wCSAgICAgID0gdmxzaV9jbG9zZTsKLQluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB2bHNpX2hhcmRfc3RhcnRfeG1pdDsKLQluZGV2LT5kb19pb2N0bAkgICAgICA9IHZsc2lfaW9jdGw7Ci0JbmRldi0+dHhfdGltZW91dCAgICAgID0gdmxzaV90eF90aW1lb3V0OworCW5kZXYtPm5ldGRldl9vcHMgPSAmdmxzaV9uZXRkZXZfb3BzOwogCW5kZXYtPndhdGNoZG9nX3RpbWVvICA9IDUwMCpIWi8xMDAwOwkvKiBtYXguIGFsbG93ZWQgdHVybiB0aW1lIGZvciBJckxBUCAqLwogCiAJU0VUX05FVERFVl9ERVYobmRldiwgJnBkZXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMKaW5kZXggZGMwYTJlNC4uZDA4ODM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdzgzOTc3YWZfaXIuYwpAQCAtMTQwLDYgKzE0MCwxMyBAQAogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB3ODM5NzdfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSB3ODM5NzdhZl9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSB3ODM5NzdhZl9uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gdzgzOTc3YWZfaGFyZF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHc4Mzk3N2FmX25ldF9pb2N0bCwKK307CisKIC8qCiAgKiBGdW5jdGlvbiB3ODM5NzdhZl9vcGVuIChpb2Jhc2UsIGlycSkKICAqCkBAIC0yMzEsMTEgKzIzOCw3IEBACiAJc2VsZi0+cnhfYnVmZi5kYXRhID0gc2VsZi0+cnhfYnVmZi5oZWFkOwogCXNlbGYtPm5ldGRldiA9IGRldjsKIAotCS8qIE92ZXJyaWRlIHRoZSBuZXR3b3JrIGZ1bmN0aW9ucyB3ZSBuZWVkIHRvIHVzZSAqLwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdzgzOTc3YWZfaGFyZF94bWl0OwotCWRldi0+b3BlbiAgICAgICAgICAgID0gdzgzOTc3YWZfbmV0X29wZW47Ci0JZGV2LT5zdG9wICAgICAgICAgICAgPSB3ODM5NzdhZl9uZXRfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCAgICAgICAgPSB3ODM5NzdhZl9uZXRfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzCT0gJnc4Mzk3N19uZXRkZXZfb3BzOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKaW5kZXggZWVlMjhkMy4uNGIwZWE2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCkBAIC04ODcsMTkgKzg4NywxMyBAQAogaXhnYl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQotCWlmIChidWZmZXJfaW5mby0+ZG1hKQotCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLCBidWZmZXJfaW5mby0+bGVuZ3RoLAotCQkgICAgICAgICAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQotCS8qIG9rYXkgdG8gY2FsbCBrZnJlZV9za2IgaGVyZSBpbnN0ZWFkIG9mIGtmcmVlX3NrYl9hbnkgYmVjYXVzZQotCSAqIHRoaXMgaXMgbmV2ZXIgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0ICovCi0JaWYgKGJ1ZmZlcl9pbmZvLT5za2IpCi0JCWRldl9rZnJlZV9za2IoYnVmZmVyX2luZm8tPnNrYik7Ci0KLQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKIAlidWZmZXJfaW5mby0+ZG1hID0gMDsKKwlpZiAoYnVmZmVyX2luZm8tPnNrYikgeworCQlza2JfZG1hX3VubWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGJ1ZmZlcl9pbmZvLT5za2IsCisJCSAgICAgICAgICAgICAgRE1BX1RPX0RFVklDRSk7CisJCWRldl9rZnJlZV9za2JfYW55KGJ1ZmZlcl9pbmZvLT5za2IpOworCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwl9CiAJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSAwOwogCS8qIHRoZXNlIGZpZWxkcyBtdXN0IGFsd2F5cyBiZSBpbml0aWFsaXplZCBpbiB0eAogCSAqIGJ1ZmZlcl9pbmZvLT5sZW5ndGggPSAwOwpAQCAtMTI3NSwxNyArMTI2OSwyMyBAQAogewogCXN0cnVjdCBpeGdiX2Rlc2NfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nOwogCXN0cnVjdCBpeGdiX2J1ZmZlciAqYnVmZmVyX2luZm87Ci0JaW50IGxlbiA9IHNrYi0+bGVuOworCWludCBsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCXVuc2lnbmVkIGludCBvZmZzZXQgPSAwLCBzaXplLCBjb3VudCA9IDAsIGk7CiAJdW5zaWduZWQgaW50IG1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CiAKIAl1bnNpZ25lZCBpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwogCXVuc2lnbmVkIGludCBmOwotCi0JbGVuIC09IHNrYi0+ZGF0YV9sZW47CisJZG1hX2FkZHJfdCAqbWFwOwogCiAJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOwogCisJaWYgKHNrYl9kbWFfbWFwKCZhZGFwdGVyLT5wZGV2LT5kZXYsIHNrYiwgRE1BX1RPX0RFVklDRSkpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVFggRE1BIG1hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwltYXAgPSBza2Jfc2hpbmZvKHNrYiktPmRtYV9tYXBzOworCiAJd2hpbGUgKGxlbikgewogCQlidWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAkJc2l6ZSA9IG1pbihsZW4sIElYR0JfTUFYX0RBVEFfUEVSX1RYRCk7CkBAIC0xMjk3LDcgKzEyOTcsNyBAQAogCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gc2l6ZTsKIAkJV0FSTl9PTihidWZmZXJfaW5mby0+ZG1hICE9IDApOwogCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7Ci0JCWJ1ZmZlcl9pbmZvLT5kbWEgPQorCQlidWZmZXJfaW5mby0+ZG1hID0gbWFwWzBdICsgb2Zmc2V0OwogCQkJcGNpX21hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKIAkJCQlza2ItPmRhdGEgKyBvZmZzZXQsCiAJCQkJc2l6ZSwKQEAgLTEzMDcsNyArMTMwNywxMSBAQAogCQlsZW4gLT0gc2l6ZTsKIAkJb2Zmc2V0ICs9IHNpemU7CiAJCWNvdW50Kys7Ci0JCWlmICgrK2kgPT0gdHhfcmluZy0+Y291bnQpIGkgPSAwOworCQlpZiAobGVuKSB7CisJCQlpKys7CisJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCQlpID0gMDsKKwkJfQogCX0KIAogCWZvciAoZiA9IDA7IGYgPCBucl9mcmFnczsgZisrKSB7CkBAIC0xMzE4LDYgKzEzMjIsMTAgQEAKIAkJb2Zmc2V0ID0gMDsKIAogCQl3aGlsZSAobGVuKSB7CisJCQlpKys7CisJCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCQlpID0gMDsKKwogCQkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVyX2luZm9baV07CiAJCQlzaXplID0gbWluKGxlbiwgSVhHQl9NQVhfREFUQV9QRVJfVFhEKTsKIApAQCAtMTMyOSwyMSArMTMzNywxNCBAQAogCiAJCQlidWZmZXJfaW5mby0+bGVuZ3RoID0gc2l6ZTsKIAkJCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKLQkJCWJ1ZmZlcl9pbmZvLT5kbWEgPQotCQkJCXBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAotCQkJCQlmcmFnLT5wYWdlLAotCQkJCQlmcmFnLT5wYWdlX29mZnNldCArIG9mZnNldCwKLQkJCQkJc2l6ZSwKLQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQlidWZmZXJfaW5mby0+ZG1hID0gbWFwW2YgKyAxXSArIG9mZnNldDsKIAkJCWJ1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gMDsKIAogCQkJbGVuIC09IHNpemU7CiAJCQlvZmZzZXQgKz0gc2l6ZTsKIAkJCWNvdW50Kys7Ci0JCQlpZiAoKytpID09IHR4X3JpbmctPmNvdW50KSBpID0gMDsKIAkJfQogCX0KLQlpID0gKGkgPT0gMCkgPyB0eF9yaW5nLT5jb3VudCAtIDEgOiBpIC0gMTsKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCkBAIC0xNDQ1LDYgKzE0NDYsNyBAQAogCXVuc2lnbmVkIGludCBmaXJzdDsKIAl1bnNpZ25lZCBpbnQgdHhfZmxhZ3MgPSAwOwogCWludCB2bGFuX2lkID0gMDsKKwlpbnQgY291bnQgPSAwOwogCWludCB0c287CiAKIAlpZiAodGVzdF9iaXQoX19JWEdCX0RPV04sICZhZGFwdGVyLT5mbGFncykpIHsKQEAgLTE0NzksMTMgKzE0ODEsMTkgQEAKIAllbHNlIGlmIChpeGdiX3R4X2NzdW0oYWRhcHRlciwgc2tiKSkKIAkJdHhfZmxhZ3MgfD0gSVhHQl9UWF9GTEFHU19DU1VNOwogCi0JaXhnYl90eF9xdWV1ZShhZGFwdGVyLCBpeGdiX3R4X21hcChhZGFwdGVyLCBza2IsIGZpcnN0KSwgdmxhbl9pZCwKLQkJCXR4X2ZsYWdzKTsKKwljb3VudCA9IGl4Z2JfdHhfbWFwKGFkYXB0ZXIsIHNrYiwgZmlyc3QpOwogCi0JbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJaWYgKGNvdW50KSB7CisJCWl4Z2JfdHhfcXVldWUoYWRhcHRlciwgY291bnQsIHZsYW5faWQsIHR4X2ZsYWdzKTsKKwkJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KKwkJaXhnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgJmFkYXB0ZXItPnR4X3JpbmcsIERFU0NfTkVFREVEKTsKIAotCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KLQlpeGdiX21heWJlX3N0b3BfdHgobmV0ZGV2LCAmYWRhcHRlci0+dHhfcmluZywgREVTQ19ORUVERUQpOworCX0gZWxzZSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCWFkYXB0ZXItPnR4X3JpbmcuYnVmZmVyX2luZm9bZmlyc3RdLnRpbWVfc3RhbXAgPSAwOworCQlhZGFwdGVyLT50eF9yaW5nLm5leHRfdG9fdXNlID0gZmlyc3Q7CisJfQogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTE3MjEsMTQgKzE3MjksMTQgQEAKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JfRE9XTiwgJmFkYXB0ZXItPmZsYWdzKSkKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmYWRhcHRlci0+bmFwaSkpIHsKIAogCQkvKiBEaXNhYmxlIGludGVycnVwdHMgYW5kIHJlZ2lzdGVyIGZvciBwb2xsLiBUaGUgZmx1c2gKIAkJICBvZiB0aGUgcG9zdGVkIHdyaXRlIGlzIGludGVudGlvbmFsbHkgbGVmdCBvdXQuCiAJCSovCiAKIAkJSVhHQl9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIH4wKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE3NDksNyArMTc1Nyw3IEBACiAKIAkvKiBJZiBidWRnZXQgbm90IGZ1bGx5IGNvbnN1bWVkLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlpZiAoIXRlc3RfYml0KF9fSVhHQl9ET1dOLCAmYWRhcHRlci0+ZmxhZ3MpKQogCQkJaXhnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogCX0KQEAgLTE4MTgsNyArMTgyNiw3IEBACiAJCS8qIGRldGVjdCBhIHRyYW5zbWl0IGhhbmcgaW4gaGFyZHdhcmUsIHRoaXMgc2VyaWFsaXplcyB0aGUKIAkJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgaSAqLwogCQlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IGZhbHNlOwotCQlpZiAodHhfcmluZy0+YnVmZmVyX2luZm9bZW9wXS5kbWEgJiYKKwkJaWYgKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCAmJgogCQkgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2VvcF0udGltZV9zdGFtcCArIEhaKQogCQkgICAmJiAhKElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpICYKIAkJICAgICAgICBJWEdCX1NUQVRVU19UWE9GRikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvaXhnYmUvTWFrZWZpbGUKaW5kZXggNmU3ZWY3Ni4uYjNmODIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwogIyBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotIyBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisjIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KICMKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTMzLDYgKzMzLDcgQEAKIG9iai0kKENPTkZJR19JWEdCRSkgKz0gaXhnYmUubwogCiBpeGdiZS1vYmpzIDo9IGl4Z2JlX21haW4ubyBpeGdiZV9jb21tb24ubyBpeGdiZV9ldGh0b29sLm8gXAotICAgICAgICAgICAgICBpeGdiZV84MjU5OC5vIGl4Z2JlX3BoeS5vCisgICAgICAgICAgICAgIGl4Z2JlXzgyNTk5Lm8gaXhnYmVfODI1OTgubyBpeGdiZV9waHkubwogCi1peGdiZS0kKENPTkZJR19JWEdCRV9EQ0IpICs9ICBpeGdiZV9kY2IubyBpeGdiZV9kY2JfODI1OTgubyBpeGdiZV9kY2JfbmwubworaXhnYmUtJChDT05GSUdfSVhHQkVfRENCKSArPSAgaXhnYmVfZGNiLm8gaXhnYmVfZGNiXzgyNTk4Lm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfZGNiXzgyNTk5Lm8gaXhnYmVfZGNiX25sLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCmluZGV4IGUxMTIwMDguLmMyNjQzM2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgPGxpbnV4L2Flci5oPgogCiAjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgpAQCAtNzIsNiArNzEsNyBAQAogI2RlZmluZSBJWEdCRV9SWEJVRkZFUl8xMjggICAxMjggICAgLyogVXNlZCBmb3IgcGFja2V0IHNwbGl0ICovCiAjZGVmaW5lIElYR0JFX1JYQlVGRkVSXzI1NiAgIDI1NiAgICAvKiBVc2VkIGZvciBwYWNrZXQgc3BsaXQgKi8KICNkZWZpbmUgSVhHQkVfUlhCVUZGRVJfMjA0OCAgMjA0OAorI2RlZmluZSBJWEdCRV9NQVhfUlhCVUZGRVIgICAxNjM4NCAgLyogbGFyZ2VzdCBzaXplIGZvciBhIHNpbmdsZSBkZXNjcmlwdG9yICovCiAKICNkZWZpbmUgSVhHQkVfUlhfSERSX1NJWkUgSVhHQkVfUlhCVUZGRVJfMjU2CiAKQEAgLTg4LDkgKzg4LDYgQEAKICNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfVkxBTl9QUklPX01BU0sgICAweDAwMDBlMDAwCiAjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQJMTYKIAotI2RlZmluZSBJWEdCRV9NQVhfTFJPX0RFU0NSSVBUT1JTICAgICAgIDgKLSNkZWZpbmUgSVhHQkVfTUFYX0xST19BR0dSRUdBVEUgICAgICAgICAzMgotCiAvKiB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyLAogICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgYnVmZmVyICovCiBzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyIHsKQEAgLTE0MiwyMSArMTM5LDI1IEBACiAJLyogY3B1IGZvciB0eCBxdWV1ZSAqLwogCWludCBjcHU7CiAjZW5kaWYKLQlzdHJ1Y3QgbmV0X2xyb19tZ3IgbHJvX21ncjsKLQlib29sIGxyb191c2VkOwogCXN0cnVjdCBpeGdiZV9xdWV1ZV9zdGF0cyBzdGF0czsKLQl1MTYgdl9pZHg7IC8qIG1hcHMgZGlyZWN0bHkgdG8gdGhlIGluZGV4IGZvciB0aGlzIHJpbmcgaW4gdGhlIGhhcmR3YXJlCi0JICAgICAgICAgICAqIHZlY3RvciBhcnJheSwgY2FuIGFsc28gYmUgdXNlZCBmb3IgZmluZGluZyB0aGUgYml0IGluIEVJQ1IKLQkgICAgICAgICAgICogYW5kIGZyaWVuZHMgdGhhdCByZXByZXNlbnRzIHRoZSB2ZWN0b3IgZm9yIHRoaXMgcmluZyAqLworCXU2NCB2X2lkeDsgLyogbWFwcyBkaXJlY3RseSB0byB0aGUgaW5kZXggZm9yIHRoaXMgcmluZyBpbiB0aGUgaGFyZHdhcmUKKwkgICAgICAgICAgICAqIHZlY3RvciBhcnJheSwgY2FuIGFsc28gYmUgdXNlZCBmb3IgZmluZGluZyB0aGUgYml0IGluIEVJQ1IKKwkgICAgICAgICAgICAqIGFuZCBmcmllbmRzIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVjdG9yIGZvciB0aGlzIHJpbmcgKi8KIAogCiAJdTE2IHdvcmtfbGltaXQ7ICAgICAgICAgICAgICAgIC8qIG1heCB3b3JrIHBlciBpbnRlcnJ1cHQgKi8KIAl1MTYgcnhfYnVmX2xlbjsKIH07CiAKLSNkZWZpbmUgUklOR19GX0RDQiAgMAotI2RlZmluZSBSSU5HX0ZfVk1EUSAxCi0jZGVmaW5lIFJJTkdfRl9SU1MgIDIKK2VudW0gaXhnYmVfcmluZ19mX2VudW0geworCVJJTkdfRl9OT05FID0gMCwKKwlSSU5HX0ZfRENCLAorCVJJTkdfRl9WTURRLAorCVJJTkdfRl9SU1MsCisKKwlSSU5HX0ZfQVJSQVlfU0laRSAgICAgIC8qIG11c3QgYmUgbGFzdCBpbiBlbnVtIHNldCAqLworfTsKKwogI2RlZmluZSBJWEdCRV9NQVhfRENCX0lORElDRVMgICA4CiAjZGVmaW5lIElYR0JFX01BWF9SU1NfSU5ESUNFUyAgMTYKICNkZWZpbmUgSVhHQkVfTUFYX1ZNRFFfSU5ESUNFUyAxNgpAQCAtMTY1LDggKzE2Niw4IEBACiAJaW50IG1hc2s7CiB9OwogCi0jZGVmaW5lIE1BWF9SWF9RVUVVRVMgNjQKLSNkZWZpbmUgTUFYX1RYX1FVRVVFUyAzMgorI2RlZmluZSBNQVhfUlhfUVVFVUVTIDEyOAorI2RlZmluZSBNQVhfVFhfUVVFVUVTIDEyOAogCiAjZGVmaW5lIE1BWF9SWF9QQUNLRVRfQlVGRkVSUyAoKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA4IDogMSkKQEAgLTE4OCwxMCArMTg5LDExIEBACiB9OwogCiAvKiBIZWxwZXIgbWFjcm9zIHRvIHN3aXRjaCBiZXR3ZWVuIGludHMvc2VjIGFuZCB3aGF0IHRoZSByZWdpc3RlciB1c2VzLgotICogQW5kIHllcywgaXQncyB0aGUgc2FtZSBtYXRoIGdvaW5nIGJvdGggd2F5cy4KKyAqIEFuZCB5ZXMsIGl0J3MgdGhlIHNhbWUgbWF0aCBnb2luZyBib3RoIHdheXMuICBUaGUgbG93ZXN0IHZhbHVlCisgKiBzdXBwb3J0ZWQgYnkgYWxsIG9mIHRoZSBpeGdiZSBoYXJkd2FyZSBpcyA4LgogICovCiAjZGVmaW5lIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhfZWl0cikgXAotCSgoX2VpdHIpID8gKDEwMDAwMDAwMDAgLyAoKF9laXRyKSAqIDI1NikpIDogMCkKKwkoKF9laXRyKSA/ICgxMDAwMDAwMDAwIC8gKChfZWl0cikgKiAyNTYpKSA6IDgpCiAjZGVmaW5lIEVJVFJfUkVHX1RPX0lOVFNfUEVSX1NFQyBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcKIAogI2RlZmluZSBJWEdCRV9ERVNDX1VOVVNFRChSKSBcCkBAIC0yMTAsOSArMjEyLDE1IEBACiAjZGVmaW5lIE9USEVSX1ZFQ1RPUiAxCiAjZGVmaW5lIE5PTl9RX1ZFQ1RPUlMgKE9USEVSX1ZFQ1RPUikKIAotI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlMgMTYKKyNkZWZpbmUgTUFYX01TSVhfVkVDVE9SU184MjU5OSA2NAorI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTkgNjQKKyNkZWZpbmUgTUFYX01TSVhfVkVDVE9SU184MjU5OCAxOAorI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlNfODI1OTggMTYKKworI2RlZmluZSBNQVhfTVNJWF9RX1ZFQ1RPUlMgTUFYX01TSVhfUV9WRUNUT1JTXzgyNTk5CisjZGVmaW5lIE1BWF9NU0lYX0NPVU5UIE1BWF9NU0lYX1ZFQ1RPUlNfODI1OTkKKwogI2RlZmluZSBNSU5fTVNJWF9RX1ZFQ1RPUlMgMgotI2RlZmluZSBNQVhfTVNJWF9DT1VOVCAoTUFYX01TSVhfUV9WRUNUT1JTICsgTk9OX1FfVkVDVE9SUykKICNkZWZpbmUgTUlOX01TSVhfQ09VTlQgKE1JTl9NU0lYX1FfVkVDVE9SUyArIE5PTl9RX1ZFQ1RPUlMpCiAKIC8qIGJvYXJkIHNwZWNpZmljIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KQEAgLTIyMiw3ICsyMzAsNyBAQAogCXUxNiBiZF9udW1iZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7CiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yIHFfdmVjdG9yW01BWF9NU0lYX1FfVkVDVE9SU107Ci0JY2hhciBuYW1lW01BWF9NU0lYX0NPVU5UXVtJRk5BTVNJWiArIDVdOworCWNoYXIgbmFtZVtNQVhfTVNJWF9DT1VOVF1bSUZOQU1TSVogKyA5XTsKIAlzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyBkY2JfY2ZnOwogCXN0cnVjdCBpeGdiZV9kY2JfY29uZmlnIHRlbXBfZGNiX2NmZzsKIAl1OCBkY2Jfc2V0X2JpdG1hcDsKQEAgLTI0NywxMCArMjU1LDEyIEBACiAJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3Jpbmc7CS8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCiAJaW50IG51bV9yeF9xdWV1ZXM7CiAJdTY0IGh3X2NzdW1fcnhfZXJyb3I7CisJdTY0IGh3X3J4X25vX2RtYV9yZXNvdXJjZXM7CiAJdTY0IGh3X2NzdW1fcnhfZ29vZDsKIAl1NjQgbm9uX2VvcF9kZXNjczsKIAlpbnQgbnVtX21zaXhfdmVjdG9yczsKLQlzdHJ1Y3QgaXhnYmVfcmluZ19mZWF0dXJlIHJpbmdfZmVhdHVyZVszXTsKKwlpbnQgbWF4X21zaXhfcV92ZWN0b3JzOyAgICAgICAgIC8qIHRydWUgY291bnQgb2YgcV92ZWN0b3JzIGZvciBkZXZpY2UgKi8KKwlzdHJ1Y3QgaXhnYmVfcmluZ19mZWF0dXJlIHJpbmdfZmVhdHVyZVtSSU5HX0ZfQVJSQVlfU0laRV07CiAJc3RydWN0IG1zaXhfZW50cnkgKm1zaXhfZW50cmllczsKIAogCXU2NCByeF9oZHJfc3BsaXQ7CkBAIC0yNzQsNiArMjg0LDcgQEAKICNkZWZpbmUgSVhHQkVfRkxBR19EQ0FfQ0FQQUJMRSAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTEpCiAjZGVmaW5lIElYR0JFX0ZMQUdfSU1JUl9FTkFCTEVEICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDEyKQogI2RlZmluZSBJWEdCRV9GTEFHX01RX0NBUEFCTEUgICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxMykKKyNkZWZpbmUgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTQpCiAjZGVmaW5lIElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQgICAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDE2KQogI2RlZmluZSBJWEdCRV9GTEFHX1JTU19DQVBBQkxFICAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAxNykKICNkZWZpbmUgSVhHQkVfRkxBR19WTURRX0NBUEFCTEUgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTgpCkBAIC0yODEsNyArMjkyLDggQEAKICNkZWZpbmUgSVhHQkVfRkxBR19GQU5fRkFJTF9DQVBBQkxFICAgICAgICAgICAgICh1MzIpKDEgPDwgMjApCiAjZGVmaW5lIElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURSAgICAgICAgICAgICAodTMyKSgxIDw8IDIyKQogI2RlZmluZSBJWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0sgICAgICAgICAgICAgKHUzMikoMSA8PCAyMykKLSNkZWZpbmUgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjQpCisjZGVmaW5lIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSyAgICAgICAgICAgICAodTMyKSgxIDw8IDI0KQorI2RlZmluZSBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSyAgICAgICAgICAgICAgKHUzMikoMSA8PCAyNSkKIAogLyogZGVmYXVsdCB0byB0cnlpbmcgZm9yIGZvdXIgc2Vjb25kcyAqLwogI2RlZmluZSBJWEdCRV9UUllfTElOS19USU1FT1VUICg0ICogSFopCkBAIC0zMDEsOSArMzEzLDYgQEAKIAogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CiAJdTY0IHR4X2J1c3k7Ci0JdTY0IGxyb19hZ2dyZWdhdGVkOwotCXU2NCBscm9fZmx1c2hlZDsKLQl1NjQgbHJvX25vX2Rlc2M7CiAJdW5zaWduZWQgaW50IHR4X3JpbmdfY291bnQ7CiAJdW5zaWduZWQgaW50IHJ4X3JpbmdfY291bnQ7CiAKQEAgLTMxNCw2ICszMjMsMTAgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2ZwX3Rhc2s7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc2ZwX3RpbWVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCBtdWx0aXNwZWVkX2ZpYmVyX3Rhc2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHNmcF9jb25maWdfbW9kdWxlX3Rhc2s7CisJdTMyIHdvbDsKKwl1MTYgZWVwcm9tX3ZlcnNpb247CiB9OwogCiBlbnVtIGl4YmdlX3N0YXRlX3QgewpAQCAtMzI1LDkgKzMzOCwxMSBAQAogCiBlbnVtIGl4Z2JlX2JvYXJkcyB7CiAJYm9hcmRfODI1OTgsCisJYm9hcmRfODI1OTksCiB9OwogCiBleHRlcm4gc3RydWN0IGl4Z2JlX2luZm8gaXhnYmVfODI1OThfaW5mbzsKK2V4dGVybiBzdHJ1Y3QgaXhnYmVfaW5mbyBpeGdiZV84MjU5OV9pbmZvOwogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKIGV4dGVybiBzdHJ1Y3QgZGNibmxfcnRubF9vcHMgZGNibmxfb3BzOwogZXh0ZXJuIGludCBpeGdiZV9jb3B5X2RjYl9jZmcoc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKnNyY19kY2JfY2ZnLApAQCAtMzUyLDUgKzM2Nyw2IEBACiBleHRlcm4gaW50IGl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGl4Z2JlX25hcGlfYWRkX2FsbChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIGl4Z2JlX25hcGlfZGVsX2FsbChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBpeGdiZV93cml0ZV9laXRyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICosIGludCwgdTMyKTsKIAogI2VuZGlmIC8qIF9JWEdCRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk4LmMKaW5kZXggYWQ1Njk5ZC4uZWQyNjVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTguYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNTAsNiArNTAsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4ICplZXByb21fZGF0YSk7CiAKIC8qKgorICogIGl4Z2JlX2dldF9wY2llX21zaXhfY291bnRfODI1OTggLSBHZXRzIE1TSS1YIHZlY3RvciBjb3VudAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVhZCBQQ0llIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGFuZCBnZXQgdGhlIE1TSS1YIHZlY3RvciBjb3VudCBmcm9tCisgKiAgdGhlIGNhcGFiaWxpdGllcyB0YWJsZS4KKyAqKi8KK3N0YXRpYyB1MTYgaXhnYmVfZ2V0X3BjaWVfbXNpeF9jb3VudF84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJdTE2IG1zaXhfY291bnQ7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgSVhHQkVfUENJRV9NU0lYXzgyNTk4X0NBUFMsCisJICAgICAgICAgICAgICAgICAgICAgJm1zaXhfY291bnQpOworCW1zaXhfY291bnQgJj0gSVhHQkVfUENJRV9NU0lYX1RCTF9TWl9NQVNLOworCisJLyogTVNJLVggY291bnQgaXMgemVyby1iYXNlZCBpbiBIVywgc28gaW5jcmVtZW50IHRvIGdpdmUgcHJvcGVyIHZhbHVlICovCisJbXNpeF9jb3VudCsrOworCisJcmV0dXJuIG1zaXhfY291bnQ7Cit9CisKKy8qKgogICovCiBzdGF0aWMgczMyIGl4Z2JlX2dldF9pbnZhcmlhbnRzXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CkBAIC01OCw2ICs3OSw5IEBACiAJczMyIHJldF92YWwgPSAwOwogCXUxNiBsaXN0X29mZnNldCwgZGF0YV9vZmZzZXQ7CiAKKwkvKiBTZXQgdGhlIGJ1cyBpbmZvcm1hdGlvbiBwcmlvciB0byBQSFkgaWRlbnRpZmljYXRpb24gKi8KKwltYWMtPm9wcy5nZXRfYnVzX2luZm8oaHcpOworCiAJLyogQ2FsbCBQSFkgaWRlbnRpZnkgcm91dGluZSB0byBnZXQgdGhlIHBoeSB0eXBlICovCiAJaXhnYmVfaWRlbnRpZnlfcGh5X2dlbmVyaWMoaHcpOwogCkBAIC0xMDYsNiArMTMwLDcgQEAKIAltYWMtPm51bV9yYXJfZW50cmllcyA9IElYR0JFXzgyNTk4X1JBUl9FTlRSSUVTOwogCW1hYy0+bWF4X3J4X3F1ZXVlcyA9IElYR0JFXzgyNTk4X01BWF9SWF9RVUVVRVM7CiAJbWFjLT5tYXhfdHhfcXVldWVzID0gSVhHQkVfODI1OThfTUFYX1RYX1FVRVVFUzsKKwltYWMtPm1heF9tc2l4X3ZlY3RvcnMgPSBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk4KGh3KTsKIAogb3V0OgogCXJldHVybiByZXRfdmFsOwpAQCAtMTI0LDE4ICsxNDksMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpCiB7CiAJczMyIHN0YXR1cyA9IDA7Ci0JczMyIGF1dG9jX3JlZzsKIAotCWF1dG9jX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7Ci0KLQlpZiAoaHctPm1hYy5saW5rX3NldHRpbmdzX2xvYWRlZCkgewotCQlhdXRvY19yZWcgJj0gfklYR0JFX0FVVE9DX0xNU19BVFRBQ0hfVFlQRTsKLQkJYXV0b2NfcmVnICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19hdHRhY2hfdHlwZTsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19tb2RlX3NlbGVjdDsKLQl9Ci0KLQlzd2l0Y2ggKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSB7CisJLyoKKwkgKiBEZXRlcm1pbmUgbGluayBjYXBhYmlsaXRpZXMgYmFzZWQgb24gdGhlIHN0b3JlZCB2YWx1ZSBvZiBBVVRPQywKKwkgKiB3aGljaCByZXByZXNlbnRzIEVFUFJPTSBkZWZhdWx0cy4KKwkgKi8KKwlzd2l0Y2ggKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSB7CiAJY2FzZSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTjoKIAkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKIAkJKmF1dG9uZWcgPSBmYWxzZTsKQEAgLTE1NCw5ICsxNzMsOSBAQAogCWNhc2UgSVhHQkVfQVVUT0NfTE1TX0tYNF9BTjoKIAljYXNlIElYR0JFX0FVVE9DX0xNU19LWDRfQU5fMUdfQU46CiAJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKLQkJaWYgKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0tYNF9TVVBQKQorCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1g0X1NVUFApCiAJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7Ci0JCWlmIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19LWF9TVVBQKQorCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1hfU1VQUCkKIAkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOwogCQkqYXV0b25lZyA9IHRydWU7CiAJCWJyZWFrOwpAQCAtMjEzLDYgKzIzMiwxMCBAQAogCiAJLyogTWVkaWEgdHlwZSBmb3IgSTgyNTk4IGlzIGJhc2VkIG9uIGRldmljZSBJRCAqLwogCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4OgorCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0JYOgorCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV9iYWNrcGxhbmU7CisJCWJyZWFrOwogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4QUZfRFVBTF9QT1JUOgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4QUZfU0lOR0xFX1BPUlQ6CiAJY2FzZSBJWEdCRV9ERVZfSURfODI1OThFQl9DWDQ6CkBAIC0yMzUsNiArMjU4LDEwMiBAQAogfQogCiAvKioKKyAqICBpeGdiZV9mY19lbmFibGVfODI1OTggLSBFbmFibGUgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBwYWNrZXRidWZfbnVtOiBwYWNrZXQgYnVmZmVyIG51bWJlciAoMC03KQorICoKKyAqICBFbmFibGUgZmxvdyBjb250cm9sIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzZXR0aW5ncy4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfZmNfZW5hYmxlXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MzIgZmN0cmxfcmVnOworCXUzMiBybWNzX3JlZzsKKwl1MzIgcmVnOworCisJZmN0cmxfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFJMKTsKKwlmY3RybF9yZWcgJj0gfihJWEdCRV9GQ1RSTF9SRkNFIHwgSVhHQkVfRkNUUkxfUlBGQ0UpOworCisJcm1jc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk1DUyk7CisJcm1jc19yZWcgJj0gfihJWEdCRV9STUNTX1RGQ0VfUFJJT1JJVFkgfCBJWEdCRV9STUNTX1RGQ0VfODAyXzNYKTsKKworCS8qCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBmYy5jdXJyZW50X21vZGUgYXJlOgorCSAqIDA6IEZsb3cgY29udHJvbCBpcyBjb21wbGV0ZWx5IGRpc2FibGVkCisJICogMTogUnggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiByZWNlaXZlIHBhdXNlIGZyYW1lcywKKwkgKiAgICBidXQgbm90IHNlbmQgcGF1c2UgZnJhbWVzKS4KKwkgKiAyOiAgVHggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiBzZW5kIHBhdXNlIGZyYW1lcyBidXQKKwkgKiAgICAgd2UgZG8gbm90IHN1cHBvcnQgcmVjZWl2aW5nIHBhdXNlIGZyYW1lcykuCisJICogMzogQm90aCBSeCBhbmQgVHggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgorCSAqIG90aGVyOiBJbnZhbGlkLgorCSAqLworCXN3aXRjaCAoaHctPmZjLmN1cnJlbnRfbW9kZSkgeworCWNhc2UgaXhnYmVfZmNfbm9uZToKKwkJLyogRmxvdyBjb250cm9sIGNvbXBsZXRlbHkgZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuICovCisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6CisJCS8qCisJCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkIGFuZCBUeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuIFNpbmNlIHRoZXJlIHJlYWxseQorCQkgKiBpc24ndCBhIHdheSB0byBhZHZlcnRpc2UgdGhhdCB3ZSBhcmUgY2FwYWJsZSBvZiBSWAorCQkgKiBQYXVzZSBPTkxZLCB3ZSB3aWxsIGFkdmVydGlzZSB0aGF0IHdlIHN1cHBvcnQgYm90aAorCQkgKiBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgUnggUEFVU0UuICBMYXRlciwgd2Ugd2lsbAorCQkgKiBkaXNhYmxlIHRoZSBhZGFwdGVyJ3MgYWJpbGl0eSB0byBzZW5kIFBBVVNFIGZyYW1lcy4KKwkJICovCisJCWZjdHJsX3JlZyB8PSBJWEdCRV9GQ1RSTF9SRkNFOworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3R4X3BhdXNlOgorCQkvKgorCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4KKwkJICovCisJCXJtY3NfcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV84MDJfM1g7CisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfZnVsbDoKKwkJLyogRmxvdyBjb250cm9sIChib3RoIFJ4IGFuZCBUeCkgaXMgZW5hYmxlZCBieSBTVyBvdmVycmlkZS4gKi8KKwkJZmN0cmxfcmVnIHw9IElYR0JFX0ZDVFJMX1JGQ0U7CisJCXJtY3NfcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV84MDJfM1g7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBwYXJhbSBzZXQgaW5jb3JyZWN0bHlcbiIpOworCQlyZXRfdmFsID0gLUlYR0JFX0VSUl9DT05GSUc7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisKKwkvKiBFbmFibGUgODAyLjN4IGJhc2VkIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFJMLCBmY3RybF9yZWcpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUk1DUywgcm1jc19yZWcpOworCisJLyogU2V0IHVwIGFuZCBlbmFibGUgUnggaGlnaC9sb3cgd2F0ZXIgbWFyayB0aHJlc2hvbGRzLCBlbmFibGUgWE9OLiAqLworCWlmIChody0+ZmMuY3VycmVudF9tb2RlICYgaXhnYmVfZmNfdHhfcGF1c2UpIHsKKwkJaWYgKGh3LT5mYy5zZW5kX3hvbikgeworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTChwYWNrZXRidWZfbnVtKSwKKwkJCSAgICAgICAgICAgICAgICAoaHctPmZjLmxvd193YXRlciB8IElYR0JFX0ZDUlRMX1hPTkUpKTsKKwkJfSBlbHNlIHsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEwocGFja2V0YnVmX251bSksCisJCQkgICAgICAgICAgICAgICAgaHctPmZjLmxvd193YXRlcik7CisJCX0KKworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRIKHBhY2tldGJ1Zl9udW0pLAorCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5oaWdoX3dhdGVyIHwgSVhHQkVfRkNSVEhfRkNFTikpOworCX0KKworCS8qIENvbmZpZ3VyZSBwYXVzZSB0aW1lICgyIFRDcyBwZXIgcmVnaXN0ZXIpICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFRWKHBhY2tldGJ1Zl9udW0pKTsKKwlpZiAoKHBhY2tldGJ1Zl9udW0gJiAxKSA9PSAwKQorCQlyZWcgPSAocmVnICYgMHhGRkZGMDAwMCkgfCBody0+ZmMucGF1c2VfdGltZTsKKwllbHNlCisJCXJlZyA9IChyZWcgJiAweDAwMDBGRkZGKSB8IChody0+ZmMucGF1c2VfdGltZSA8PCAxNik7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RUVihwYWNrZXRidWZfbnVtIC8gMiksIHJlZyk7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCAoaHctPmZjLnBhdXNlX3RpbWUgPj4gMSkpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGl4Z2JlX3NldHVwX2ZjXzgyNTk4IC0gQ29uZmlndXJlIGZsb3cgY29udHJvbCBzZXR0aW5ncwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqICBAcGFja2V0YnVmX251bTogcGFja2V0IGJ1ZmZlciBudW1iZXIgKDAtNykKQEAgLTI0NCwxMTAgKzM2Myw2NCBAQAogICoqLwogc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9mY184MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBzMzIgcGFja2V0YnVmX251bSkKIHsKLQl1MzIgZnJjdGxfcmVnOwotCXUzMiBybWNzX3JlZzsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBzcGVlZDsKKwlib29sIGxpbmtfdXA7CiAKKwkvKiBWYWxpZGF0ZSB0aGUgcGFja2V0YnVmIGNvbmZpZ3VyYXRpb24gKi8KIAlpZiAocGFja2V0YnVmX251bSA8IDAgfHwgcGFja2V0YnVmX251bSA+IDcpIHsKIAkJaHdfZGJnKGh3LCAiSW52YWxpZCBwYWNrZXQgYnVmZmVyIG51bWJlciBbJWRdLCBleHBlY3RlZCByYW5nZSBpcyIKIAkJICAgICAgICAgICIgMC03XG4iLCBwYWNrZXRidWZfbnVtKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OwogCX0KIAotCWZyY3RsX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RSTCk7Ci0JZnJjdGxfcmVnICY9IH4oSVhHQkVfRkNUUkxfUkZDRSB8IElYR0JFX0ZDVFJMX1JQRkNFKTsKLQotCXJtY3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwotCXJtY3NfcmVnICY9IH4oSVhHQkVfUk1DU19URkNFX1BSSU9SSVRZIHwgSVhHQkVfUk1DU19URkNFXzgwMl8zWCk7Ci0KIAkvKgotCSAqIDEwIGdpZyBwYXJ0cyBkbyBub3QgaGF2ZSBhIHdvcmQgaW4gdGhlIEVFUFJPTSB0byBkZXRlcm1pbmUgdGhlCi0JICogZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZywgc28gd2UgZXhwbGljaXRseSBzZXQgaXQgdG8gZnVsbC4KLQkgKi8KLQlpZiAoaHctPmZjLnR5cGUgPT0gaXhnYmVfZmNfZGVmYXVsdCkKLQkJaHctPmZjLnR5cGUgPSBpeGdiZV9mY19mdWxsOwotCi0JLyoKLQkgKiBXZSB3YW50IHRvIHNhdmUgb2ZmIHRoZSBvcmlnaW5hbCBGbG93IENvbnRyb2wgY29uZmlndXJhdGlvbiBqdXN0IGluCi0JICogY2FzZSB3ZSBnZXQgZGlzY29ubmVjdGVkIGFuZCB0aGVuIHJlY29ubmVjdGVkIGludG8gYSBkaWZmZXJlbnQgaHViCi0JICogb3Igc3dpdGNoIHdpdGggZGlmZmVyZW50IEZsb3cgQ29udHJvbCBjYXBhYmlsaXRpZXMuCi0JICovCi0JaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBody0+ZmMudHlwZTsKLQotCS8qCi0JICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgImZsb3dfY29udHJvbCIgcGFyYW1ldGVyIGFyZToKLQkgKiAwOiBGbG93IGNvbnRyb2wgaXMgY29tcGxldGVseSBkaXNhYmxlZAotCSAqIDE6IFJ4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gcmVjZWl2ZSBwYXVzZSBmcmFtZXMgYnV0IG5vdAotCSAqICAgIHNlbmQgcGF1c2UgZnJhbWVzKS4KLQkgKiAyOiBUeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHNlbmQgcGF1c2UgZnJhbWVzIGJ1dCB3ZSBkbyBub3QKLQkgKiAgICBzdXBwb3J0IHJlY2VpdmluZyBwYXVzZSBmcmFtZXMpCi0JICogMzogQm90aCBSeCBhbmQgVHggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgotCSAqIG90aGVyOiBJbnZhbGlkLgotCSAqLwotCXN3aXRjaCAoaHctPmZjLnR5cGUpIHsKLQljYXNlIGl4Z2JlX2ZjX25vbmU6Ci0JCWJyZWFrOwotCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6Ci0JCS8qCi0JCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkLAotCQkgKiBhbmQgVHggRmxvdyBjb250cm9sIGlzIGRpc2FibGVkLgotCQkgKi8KLQkJZnJjdGxfcmVnIHw9IElYR0JFX0ZDVFJMX1JGQ0U7Ci0JCWJyZWFrOwotCWNhc2UgaXhnYmVfZmNfdHhfcGF1c2U6Ci0JCS8qCi0JCSAqIFR4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkLCBhbmQgUnggRmxvdyBjb250cm9sIGlzIGRpc2FibGVkLAotCQkgKiBieSBhIHNvZnR3YXJlIG92ZXItcmlkZS4KLQkJICovCi0JCXJtY3NfcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV84MDJfM1g7Ci0JCWJyZWFrOwotCWNhc2UgaXhnYmVfZmNfZnVsbDoKLQkJLyoKLQkJICogRmxvdyBjb250cm9sIChib3RoIFJ4IGFuZCBUeCkgaXMgZW5hYmxlZCBieSBhIHNvZnR3YXJlCi0JCSAqIG92ZXItcmlkZS4KLQkJICovCi0JCWZyY3RsX3JlZyB8PSBJWEdCRV9GQ1RSTF9SRkNFOwotCQlybWNzX3JlZyB8PSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBXZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUuICBUaGUgdmFsdWUgc2hvdWxkIGJlIDAtMy4gKi8KLQkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7Ci0JCWJyZWFrOwotCX0KLQotCS8qIEVuYWJsZSA4MDIuM3ggYmFzZWQgZmxvdyBjb250cm9sIHNldHRpbmdzLiAqLwotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNUUkwsIGZyY3RsX3JlZyk7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9STUNTLCBybWNzX3JlZyk7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBpbnZhbGlkIHNvZnR3YXJlIGNvbmZpZ3VyYXRpb24sIHplcm9zIGFyZSBjb21wbGV0ZWx5Ci0JICogaW52YWxpZCBmb3IgYWxsIHBhcmFtZXRlcnMgdXNlZCBwYXN0IHRoaXMgcG9pbnQsIGFuZCBpZiB3ZSBlbmFibGUKLQkgKiBmbG93IGNvbnRyb2wgd2l0aCB6ZXJvIHdhdGVyIG1hcmtzLCB3ZSBibGFzdCBmbG93IGNvbnRyb2wgcGFja2V0cy4KKwkgKiBWYWxpZGF0ZSB0aGUgd2F0ZXIgbWFyayBjb25maWd1cmF0aW9uLiAgWmVybyB3YXRlciBtYXJrcyBhcmUgaW52YWxpZAorCSAqIGJlY2F1c2UgaXQgY2F1c2VzIHRoZSBjb250cm9sbGVyIHRvIGp1c3QgYmxhc3Qgb3V0IGZjIHBhY2tldHMuCiAJICovCiAJaWYgKCFody0+ZmMubG93X3dhdGVyIHx8ICFody0+ZmMuaGlnaF93YXRlciB8fCAhaHctPmZjLnBhdXNlX3RpbWUpIHsKLQkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHN0cnVjdHVyZSBpbml0aWFsaXplZCBpbmNvcnJlY3RseVxuIik7Ci0JCXJldHVybiBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlod19kYmcoaHcsICJJbnZhbGlkIHdhdGVyIG1hcmsgY29uZmlndXJhdGlvblxuIik7CisJCXJldF92YWwgPSBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKgotCSAqIFdlIG5lZWQgdG8gc2V0IHVwIHRoZSBSZWNlaXZlIFRocmVzaG9sZCBoaWdoIGFuZCBsb3cgd2F0ZXIKLQkgKiBtYXJrcyBhcyB3ZWxsIGFzIChvcHRpb25hbGx5KSBlbmFibGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mCi0JICogWE9OIGZyYW1lcy4KKwkgKiBWYWxpZGF0ZSB0aGUgcmVxdWVzdGVkIG1vZGUuICBTdHJpY3QgSUVFRSBtb2RlIGRvZXMgbm90IGFsbG93CisJICogaXhnYmVfZmNfcnhfcGF1c2UgYmVjYXVzZSBpdCB3aWxsIGNhdXNlIHRlc3RpbmcgYW5vbWFsaWVzLgogCSAqLwotCWlmIChody0+ZmMudHlwZSAmIGl4Z2JlX2ZjX3R4X3BhdXNlKSB7Ci0JCWlmIChody0+ZmMuc2VuZF94b24pIHsKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEwocGFja2V0YnVmX251bSksCi0JCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5sb3dfd2F0ZXIgfCBJWEdCRV9GQ1JUTF9YT05FKSk7Ci0JCX0gZWxzZSB7Ci0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMKHBhY2tldGJ1Zl9udW0pLAotCQkJICAgICAgICAgICAgICAgIGh3LT5mYy5sb3dfd2F0ZXIpOwotCQl9Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVEgocGFja2V0YnVmX251bSksCi0JCSAgICAgICAgICAgICAgICAoaHctPmZjLmhpZ2hfd2F0ZXIpfElYR0JFX0ZDUlRIX0ZDRU4pOworCWlmIChody0+ZmMuc3RyaWN0X2llZWUgJiYgaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CisJCWh3X2RiZyhodywgIml4Z2JlX2ZjX3J4X3BhdXNlIG5vdCB2YWxpZCBpbiBzdHJpY3QgSUVFRSBtb2RlXG4iKTsKKwkJcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX0xJTktfU0VUVElOR1M7CisJCWdvdG8gb3V0OwogCX0KIAotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNUVFYoMCksIGh3LT5mYy5wYXVzZV90aW1lKTsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCAoaHctPmZjLnBhdXNlX3RpbWUgPj4gMSkpOworCS8qCisJICogMTBnaWcgcGFydHMgZG8gbm90IGhhdmUgYSB3b3JkIGluIHRoZSBFRVBST00gdG8gZGV0ZXJtaW5lIHRoZQorCSAqIGRlZmF1bHQgZmxvdyBjb250cm9sIHNldHRpbmcsIHNvIHdlIGV4cGxpY2l0bHkgc2V0IGl0IHRvIGZ1bGwuCisJICovCisJaWYgKGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9PSBpeGdiZV9mY19kZWZhdWx0KQorCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY19mdWxsOwogCi0JcmV0dXJuIDA7CisJLyoKKwkgKiBTYXZlIG9mZiB0aGUgcmVxdWVzdGVkIGZsb3cgY29udHJvbCBtb2RlIGZvciB1c2UgbGF0ZXIuICBEZXBlbmRpbmcKKwkgKiBvbiB0aGUgbGluayBwYXJ0bmVyJ3MgY2FwYWJpbGl0aWVzLCB3ZSBtYXkgb3IgbWF5IG5vdCB1c2UgdGhpcyBtb2RlLgorCSAqLworCisJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGh3LT5mYy5yZXF1ZXN0ZWRfbW9kZTsKKworCS8qIERlY2lkZSB3aGV0aGVyIHRvIHVzZSBhdXRvbmVnIG9yIG5vdC4gKi8KKwlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7CisJaWYgKGh3LT5waHkubXVsdGlzcGVlZF9maWJlciAmJiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkpCisJCXJldF92YWwgPSBpeGdiZV9mY19hdXRvbmVnKGh3KTsKKworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpeGdiZV9mY19lbmFibGVfODI1OTgoaHcsIHBhY2tldGJ1Zl9udW0pOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7CiB9CiAKIC8qKgpAQCAtMzY0LDI3ICs0MzcsMTcgQEAKIAl1MzIgaTsKIAlzMzIgc3RhdHVzID0gMDsKIAotCWF1dG9jX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQyk7Ci0KLQlpZiAoaHctPm1hYy5saW5rX3NldHRpbmdzX2xvYWRlZCkgewotCQlhdXRvY19yZWcgJj0gfklYR0JFX0FVVE9DX0xNU19BVFRBQ0hfVFlQRTsKLQkJYXV0b2NfcmVnICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19hdHRhY2hfdHlwZTsKLQkJYXV0b2NfcmVnIHw9IGh3LT5tYWMubGlua19tb2RlX3NlbGVjdDsKLQotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCBhdXRvY19yZWcpOwotCQlJWEdCRV9XUklURV9GTFVTSChodyk7Ci0JCW1zbGVlcCg1MCk7Ci0JfQotCiAJLyogUmVzdGFydCBsaW5rICovCisJYXV0b2NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKIAlhdXRvY19yZWcgfD0gSVhHQkVfQVVUT0NfQU5fUkVTVEFSVDsKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DLCBhdXRvY19yZWcpOwogCiAJLyogT25seSBwb2xsIGZvciBhdXRvbmVnIHRvIGNvbXBsZXRlIGlmIHNwZWNpZmllZCB0byBkbyBzbyAqLwogCWlmIChody0+cGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgewotCQlpZiAoaHctPm1hYy5saW5rX21vZGVfc2VsZWN0ID09IElYR0JFX0FVVE9DX0xNU19LWDRfQU4gfHwKLQkJICAgIGh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOXzFHX0FOKSB7CisJCWlmICgoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfTE1TX01BU0spID09CisJCSAgICAgSVhHQkVfQVVUT0NfTE1TX0tYNF9BTiB8fAorCQkgICAgKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQorCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfQU5fMUdfQU4pIHsKIAkJCWxpbmtzX3JlZyA9IDA7IC8qIEp1c3QgaW4gY2FzZSBBdXRvbmVnIHRpbWUgPSAwICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfQVVUT19ORUdfVElNRTsgaSsrKSB7CiAJCQkJbGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xJTktTKTsKQEAgLTQwNCw3ICs0NjcsNiBAQAogCSAqIGNhc2Ugd2UgZ2V0IGRpc2Nvbm5lY3RlZCBhbmQgdGhlbiByZWNvbm5lY3RlZCBpbnRvIGEgZGlmZmVyZW50IGh1YgogCSAqIG9yIHN3aXRjaCB3aXRoIGRpZmZlcmVudCBGbG93IENvbnRyb2wgY2FwYWJpbGl0aWVzLgogCSAqLwotCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7CiAJaXhnYmVfc2V0dXBfZmNfODI1OTgoaHcsIDApOwogCiAJLyogQWRkIGRlbGF5IHRvIGZpbHRlciBvdXQgbm9pc2VzIGR1cmluZyBpbml0aWFsIGxpbmsgc2V0dXAgKi8KQEAgLTUwOCwzNyArNTcwLDQzIEBACiAgKiAgU2V0IHRoZSBsaW5rIHNwZWVkIGluIHRoZSBBVVRPQyByZWdpc3RlciBhbmQgcmVzdGFydHMgbGluay4KICAqKi8KIHN0YXRpYyBzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTgoc3RydWN0IGl4Z2JlX2h3ICpodywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLCBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCiB7Ci0JczMyIHN0YXR1cyA9IDA7CisJczMyICAgICAgICAgICAgICBzdGF0dXMgICAgICAgICAgICA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBsaW5rX2NhcGFiaWxpdGllcyA9IElYR0JFX0xJTktfU1BFRURfVU5LTk9XTjsKKwl1MzIgICAgICAgICAgICAgIGN1cnJfYXV0b2MgICAgICAgID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKKwl1MzIgICAgICAgICAgICAgIGF1dG9jICAgICAgICAgICAgID0gY3Vycl9hdXRvYzsKKwl1MzIgICAgICAgICAgICAgIGxpbmtfbW9kZSAgICAgICAgID0gYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSzsKIAotCS8qIElmIHNwZWVkIGlzIDEwRywgdGhlbiBjaGVjayBmb3IgQ1g0IG9yIFhBVUkuICovCi0JaWYgKChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkgJiYKLQkgICAgKCEoaHctPm1hYy5saW5rX2F0dGFjaF90eXBlICYgSVhHQkVfQVVUT0NfMTBHX0tYNCkpKSB7Ci0JCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTjsKLQl9IGVsc2UgaWYgKChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSAmJiAoIWF1dG9uZWcpKSB7Ci0JCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU18xR19MSU5LX05PX0FOOwotCX0gZWxzZSBpZiAoYXV0b25lZykgewotCQkvKiBCWCBtb2RlIC0gQXV0b25lZ290aWF0ZSAxRyAqLwotCQlpZiAoIShody0+bWFjLmxpbmtfYXR0YWNoX3R5cGUgJiBJWEdCRV9BVVRPQ18xR19QTUFfUE1EKSkKLQkJCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU18xR19BTjsKLQkJZWxzZSAvKiBLWC9LWDQgbW9kZSAqLwotCQkJaHctPm1hYy5saW5rX21vZGVfc2VsZWN0ID0gSVhHQkVfQVVUT0NfTE1TX0tYNF9BTl8xR19BTjsKLQl9IGVsc2UgeworCS8qIENoZWNrIHRvIHNlZSBpZiBzcGVlZCBwYXNzZWQgaW4gaXMgc3VwcG9ydGVkLiAqLworCWl4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc184MjU5OChodywgJmxpbmtfY2FwYWJpbGl0aWVzLCAmYXV0b25lZyk7CisJc3BlZWQgJj0gbGlua19jYXBhYmlsaXRpZXM7CisKKwlpZiAoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOKQogCQlzdGF0dXMgPSBJWEdCRV9FUlJfTElOS19TRVRVUDsKKworCS8qIFNldCBLWDQvS1ggc3VwcG9ydCBhY2NvcmRpbmcgdG8gc3BlZWQgcmVxdWVzdGVkICovCisJZWxzZSBpZiAobGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfQU4gfHwKKwkgICAgICAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9BTl8xR19BTikgeworCQlhdXRvYyAmPSB+SVhHQkVfQVVUT0NfS1g0X0tYX1NVUFBfTUFTSzsKKwkJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpCisJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LWDRfU1VQUDsKKwkJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkKKwkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0tYX1NVUFA7CisJCWlmIChhdXRvYyAhPSBjdXJyX2F1dG9jKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2MpOwogCX0KIAogCWlmIChzdGF0dXMgPT0gMCkgewogCQlody0+cGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSA9IGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTsKIAotCQlody0+bWFjLmxpbmtfc2V0dGluZ3NfbG9hZGVkID0gdHJ1ZTsKIAkJLyoKIAkJICogU2V0dXAgYW5kIHJlc3RhcnQgdGhlIGxpbmsgYmFzZWQgb24gdGhlIG5ldyB2YWx1ZXMgaW4KIAkJICogaXhnYmVfaHcgVGhpcyB3aWxsIHdyaXRlIHRoZSBBVVRPQyByZWdpc3RlciBiYXNlZCBvbiB0aGUgbmV3CiAJCSAqIHN0b3JlZCB2YWx1ZXMKIAkJICovCi0JCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKKwkJc3RhdHVzID0gaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTgoaHcpOwogCX0KIAogCXJldHVybiBzdGF0dXM7CkBAIC01NjEsMTAgKzYyOSw2IEBACiAJLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24gb24gUEhZICovCiAJc3RhdHVzID0gaHctPnBoeS5vcHMuc2V0dXBfbGluayhodyk7CiAKLQkvKiBTZXQgTUFDIHRvIEtYL0tYNCBhdXRvbmVnLCB3aGljaCBkZWZhdWx0cyB0byBQYXJhbGxlbCBkZXRlY3Rpb24gKi8KLQlody0+bWFjLmxpbmtfYXR0YWNoX3R5cGUgPSAoSVhHQkVfQVVUT0NfMTBHX0tYNCB8IElYR0JFX0FVVE9DXzFHX0tYKTsKLQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOOwotCiAJLyogU2V0IHVwIE1BQyAqLwogCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk4KGh3KTsKIApAQCAtNTkxLDEwICs2NTUsNiBAQAogCXN0YXR1cyA9IGh3LT5waHkub3BzLnNldHVwX2xpbmtfc3BlZWQoaHcsIHNwZWVkLCBhdXRvbmVnLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKIAotCS8qIFNldCBNQUMgdG8gS1gvS1g0IGF1dG9uZWcsIHdoaWNoIGRlZmF1bHRzIHRvIFBhcmFsbGVsIGRldGVjdGlvbiAqLwotCWh3LT5tYWMubGlua19hdHRhY2hfdHlwZSA9IChJWEdCRV9BVVRPQ18xMEdfS1g0IHwgSVhHQkVfQVVUT0NfMUdfS1gpOwotCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU19LWDRfQU47Ci0KIAkvKiBTZXQgdXAgTUFDICovCiAJaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTgoaHcpOwogCkBAIC02OTQsMjQgKzc1NCwxNiBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR0hFQ0NSLCBnaGVjY3IpOwogCiAJLyoKLQkgKiBBVVRPQyByZWdpc3RlciB3aGljaCBzdG9yZXMgbGluayBzZXR0aW5ncyBnZXRzIGNsZWFyZWQKLQkgKiBhbmQgcmVsb2FkZWQgZnJvbSBFRVBST00gYWZ0ZXIgcmVzZXQuIFdlIG5lZWQgdG8gcmVzdG9yZQotCSAqIG91ciBzdG9yZWQgdmFsdWUgZnJvbSBpbml0IGluIGNhc2UgU1cgY2hhbmdlZCB0aGUgYXR0YWNoCi0JICogdHlwZSBvciBzcGVlZC4gIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgYW5kIGxpbmsgc2V0dGluZ3MKLQkgKiBoYXZlIG5vdCBiZWVuIHN0b3JlZCwgc3RvcmUgZGVmYXVsdCBzZXR0aW5ncyBmcm9tIEFVVE9DLgorCSAqIFN0b3JlIHRoZSBvcmlnaW5hbCBBVVRPQyB2YWx1ZSBpZiBpdCBoYXMgbm90IGJlZW4KKwkgKiBzdG9yZWQgb2ZmIHlldC4gIE90aGVyd2lzZSByZXN0b3JlIHRoZSBzdG9yZWQgb3JpZ2luYWwKKwkgKiBBVVRPQyB2YWx1ZSBzaW5jZSB0aGUgcmVzZXQgb3BlcmF0aW9uIHNldHMgYmFjayB0byBkZWF1bHRzLgogCSAqLwogCWF1dG9jID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0FVVE9DKTsKLQlpZiAoaHctPm1hYy5saW5rX3NldHRpbmdzX2xvYWRlZCkgewotCQlhdXRvYyAmPSB+KElYR0JFX0FVVE9DX0xNU19BVFRBQ0hfVFlQRSk7Ci0JCWF1dG9jICY9IH4oSVhHQkVfQVVUT0NfTE1TX01BU0spOwotCQlhdXRvYyB8PSBody0+bWFjLmxpbmtfYXR0YWNoX3R5cGU7Ci0JCWF1dG9jIHw9IGh3LT5tYWMubGlua19tb2RlX3NlbGVjdDsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2MpOwotCX0gZWxzZSB7Ci0JCWh3LT5tYWMubGlua19hdHRhY2hfdHlwZSA9Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgICAoYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfQVRUQUNIX1RZUEUpOwotCQlody0+bWFjLmxpbmtfbW9kZV9zZWxlY3QgPSAoYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSyk7Ci0JCWh3LT5tYWMubGlua19zZXR0aW5nc19sb2FkZWQgPSB0cnVlOworCWlmIChody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPT0gZmFsc2UpIHsKKwkJaHctPm1hYy5vcmlnX2F1dG9jID0gYXV0b2M7CisJCWh3LT5tYWMub3JpZ19saW5rX3NldHRpbmdzX3N0b3JlZCA9IHRydWU7CisJfSBlbHNlIGlmIChhdXRvYyAhPSBody0+bWFjLm9yaWdfYXV0b2MpIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgaHctPm1hYy5vcmlnX2F1dG9jKTsKIAl9CiAKIAkvKiBTdG9yZSB0aGUgcGVybWFuZW50IG1hYyBhZGRyZXNzICovCkBAIC05OTcsMTEgKzEwNDksMTggQEAKICAqCiAgKiAgRGV0ZXJtaW5lcyBwaHlzaWNhbCBsYXllciBjYXBhYmlsaXRpZXMgb2YgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KICAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHUzMiBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk4KHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7Ci0JczMyIHBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfVU5LTk9XTjsKKwl1MzIgcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOwogCiAJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTg6CisJCS8qIERlZmF1bHQgZGV2aWNlIElEIGlzIG1lenphbmluZSBjYXJkIEtYL0tYNCAqLworCQlwaHlzaWNhbF9sYXllciA9IChJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMEdCQVNFX0tYNCB8CisJCQkJICBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMDAwQkFTRV9LWCk7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0JYOgorCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMDBCQVNFX0JYOwogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4RUJfQ1g0OgogCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0NYNF9EVUFMX1BPUlQ6CiAJCXBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9DWDQ7CkBAIC0xMDU1LDggKzExMTQsMTEgQEAKIAkuY2xlYXJfaHdfY250cnMJCT0gJml4Z2JlX2NsZWFyX2h3X2NudHJzX2dlbmVyaWMsCiAJLmdldF9tZWRpYV90eXBlCQk9ICZpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OCwKIAkuZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllciA9ICZpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk4LAorCS5lbmFibGVfcnhfZG1hICAgICAgICAgID0gJml4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYywKIAkuZ2V0X21hY19hZGRyCQk9ICZpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYywKIAkuc3RvcF9hZGFwdGVyCQk9ICZpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYywKKwkuZ2V0X2J1c19pbmZvICAgICAgICAgICA9ICZpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYywKKwkuc2V0X2xhbl9pZCAgICAgICAgICAgICA9ICZpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZSwKIAkucmVhZF9hbmFsb2dfcmVnOAk9ICZpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk4LAogCS53cml0ZV9hbmFsb2dfcmVnOAk9ICZpeGdiZV93cml0ZV9hbmFsb2dfcmVnOF84MjU5OCwKIAkuc2V0dXBfbGluawkJPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWFlN2UwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYwpAQCAtMCwwICsxLDEyOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpbmNsdWRlICJpeGdiZS5oIgorI2luY2x1ZGUgIml4Z2JlX3BoeS5oIgorCisjZGVmaW5lIElYR0JFXzgyNTk5X01BWF9UWF9RVUVVRVMgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X01BWF9SWF9RVUVVRVMgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X1JBUl9FTlRSSUVTICAgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X01DX1RCTF9TSVpFICAgMTI4CisjZGVmaW5lIElYR0JFXzgyNTk5X1ZGVF9UQkxfU0laRSAgMTI4CisKK3MzMiBpeGdiZV9nZXRfbGlua19jYXBhYmlsaXRpZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgKmF1dG9uZWcpOworZW51bSBpeGdiZV9tZWRpYV90eXBlIGl4Z2JlX2dldF9tZWRpYV90eXBlXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfbXVsdGlzcGVlZF9maWJlcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpsaW5rX3VwLCBib29sIGxpbmtfdXBfd2FpdF90b19jb21wbGV0ZSk7CitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CitzdGF0aWMgczMyIGl4Z2JlX2dldF9jb3BwZXJfbGlua19jYXBhYmlsaXRpZXNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXV0b25lZyk7CitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2NvcHBlcl9saW5rXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9jb3BwZXJfbGlua19zcGVlZF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpeGdiZV9saW5rX3NwZWVkIHNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKK3MzMiBpeGdiZV9yZXNldF9od184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9zZXRfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSk7CitzMzIgaXhnYmVfY2xlYXJfdm1kcV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmFyLCB1MzIgdm1kcSk7CitzMzIgaXhnYmVfc2V0X3ZmdGFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZsYW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZpbmQsIGJvb2wgdmxhbl9vbik7CitzMzIgaXhnYmVfY2xlYXJfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9ibGlua19sZWRfc3RvcF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOworczMyIGl4Z2JlX2JsaW5rX2xlZF9zdGFydF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpOworczMyIGl4Z2JlX2luaXRfdXRhX3RhYmxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9yZWFkX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4ICp2YWwpOworczMyIGl4Z2JlX3dyaXRlX2FuYWxvZ19yZWc4XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByZWcsIHU4IHZhbCk7CitzMzIgaXhnYmVfc3RhcnRfaHdfcmV2XzBfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzMzIgaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX3N0YXJ0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpOwordTMyIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodyk7CisKK3ZvaWQgaXhnYmVfaW5pdF9tYWNfbGlua19vcHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIpIHsKKwkJLyogU2V0IHVwIGR1YWwgc3BlZWQgU0ZQKyBzdXBwb3J0ICovCisJCW1hYy0+b3BzLnNldHVwX2xpbmsgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rX211bHRpc3BlZWRfZmliZXI7CisJCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXI7CisJfSBlbHNlIHsKKwkJbWFjLT5vcHMuc2V0dXBfbGluayA9CisJCSAgICAgICAgICAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTk7CisJCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQorCQkgICAgICAgICAgJml4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkXzgyNTk5OworCX0KK30KKworczMyIGl4Z2JlX3NldHVwX3NmcF9tb2R1bGVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSAwOworCXUxNiBsaXN0X29mZnNldCwgZGF0YV9vZmZzZXQsIGRhdGFfdmFsdWU7CisKKwlpZiAoaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV91bmtub3duKSB7CisJCWl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzXzgyNTk5KGh3KTsKKwkJcmV0X3ZhbCA9IGl4Z2JlX2dldF9zZnBfaW5pdF9zZXF1ZW5jZV9vZmZzZXRzKGh3LCAmbGlzdF9vZmZzZXQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YV9vZmZzZXQpOworCisJCWlmIChyZXRfdmFsICE9IDApCisJCQlnb3RvIHNldHVwX3NmcF9vdXQ7CisKKwkJaHctPmVlcHJvbS5vcHMucmVhZChodywgKytkYXRhX29mZnNldCwgJmRhdGFfdmFsdWUpOworCQl3aGlsZSAoZGF0YV92YWx1ZSAhPSAweGZmZmYpIHsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgZGF0YV92YWx1ZSk7CisJCQlJWEdCRV9XUklURV9GTFVTSChodyk7CisJCQlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCArK2RhdGFfb2Zmc2V0LCAmZGF0YV92YWx1ZSk7CisJCX0KKwkJLyogTm93IHJlc3RhcnQgRFNQICovCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgMHgwMDAwMDEwMik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ09SRUNUTCwgMHgwMDAwMGIxZCk7CisJCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKwl9CisKK3NldHVwX3NmcF9vdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2dldF9wY2llX21zaXhfY291bnRfODI1OTkgLSBHZXRzIE1TSS1YIHZlY3RvciBjb3VudAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVhZCBQQ0llIGNvbmZpZ3VyYXRpb24gc3BhY2UsIGFuZCBnZXQgdGhlIE1TSS1YIHZlY3RvciBjb3VudCBmcm9tCisgKiAgdGhlIGNhcGFiaWxpdGllcyB0YWJsZS4KKyAqKi8KK3UzMiBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKKwl1MTYgbXNpeF9jb3VudDsKKwlwY2lfcmVhZF9jb25maWdfd29yZChhZGFwdGVyLT5wZGV2LCBJWEdCRV9QQ0lFX01TSVhfODI1OTlfQ0FQUywKKwkgICAgICAgICAgICAgICAgICAgICAmbXNpeF9jb3VudCk7CisJbXNpeF9jb3VudCAmPSBJWEdCRV9QQ0lFX01TSVhfVEJMX1NaX01BU0s7CisKKwkvKiBNU0ktWCBjb3VudCBpcyB6ZXJvLWJhc2VkIGluIEhXLCBzbyBpbmNyZW1lbnQgdG8gZ2l2ZSBwcm9wZXIgdmFsdWUgKi8KKwltc2l4X2NvdW50Kys7CisKKwlyZXR1cm4gbXNpeF9jb3VudDsKK30KKworc3RhdGljIHMzMiBpeGdiZV9nZXRfaW52YXJpYW50c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN0cnVjdCBpeGdiZV9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJc3RydWN0IGl4Z2JlX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwlzMzIgcmV0X3ZhbDsKKworCS8qIFNldCB0aGUgYnVzIGluZm9ybWF0aW9uIHByaW9yIHRvIFBIWSBpZGVudGlmaWNhdGlvbiAqLworCW1hYy0+b3BzLmdldF9idXNfaW5mbyhodyk7CisKKwkvKiBDYWxsIFBIWSBpZGVudGlmeSByb3V0aW5lIHRvIGdldCB0aGUgQ3Ugb3IgU0ZJIHBoeSB0eXBlICovCisJcmV0X3ZhbCA9IHBoeS0+b3BzLmlkZW50aWZ5KGh3KTsKKworCWlmIChyZXRfdmFsID09IElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRCkKKwkJZ290byBnZXRfaW52YXJpYW50c19vdXQ7CisKKwlpeGdiZV9pbml0X21hY19saW5rX29wc184MjU5OShodyk7CisKKwkvKiBTZXR1cCBTRlAgbW9kdWxlIGlmIHRoZXJlIGlzIG9uZSBwcmVzZW50LiAqLworCXJldF92YWwgPSBtYWMtPm9wcy5zZXR1cF9zZnAoaHcpOworCisJLyogSWYgY29wcGVyIG1lZGlhLCBvdmVyd3JpdGUgd2l0aCBjb3BwZXIgZnVuY3Rpb24gcG9pbnRlcnMgKi8KKwlpZiAobWFjLT5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSB7CisJCW1hYy0+b3BzLnNldHVwX2xpbmsgPSAmaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTk7CisJCW1hYy0+b3BzLnNldHVwX2xpbmtfc3BlZWQgPQorCQkgICAgICAgICAgICAgICAgICAmaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTk7CisJCW1hYy0+b3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyA9CisJCSAgICAgICAgICAgICAgICAgICZpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5OworCX0KKworCS8qIFBIWSBJbml0ICovCisJc3dpdGNoIChody0+cGh5LnR5cGUpIHsKKwljYXNlIGl4Z2JlX3BoeV90bjoKKwkJcGh5LT5vcHMuY2hlY2tfbGluayA9ICZpeGdiZV9jaGVja19waHlfbGlua190bng7CisJCXBoeS0+b3BzLmdldF9maXJtd2FyZV92ZXJzaW9uID0KKwkJICAgICAgICAgICAgICAgICAgJml4Z2JlX2dldF9waHlfZmlybXdhcmVfdmVyc2lvbl90bng7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCW1hYy0+bWNmdF9zaXplID0gSVhHQkVfODI1OTlfTUNfVEJMX1NJWkU7CisJbWFjLT52ZnRfc2l6ZSA9IElYR0JFXzgyNTk5X1ZGVF9UQkxfU0laRTsKKwltYWMtPm51bV9yYXJfZW50cmllcyA9IElYR0JFXzgyNTk5X1JBUl9FTlRSSUVTOworCW1hYy0+bWF4X3J4X3F1ZXVlcyA9IElYR0JFXzgyNTk5X01BWF9SWF9RVUVVRVM7CisJbWFjLT5tYXhfdHhfcXVldWVzID0gSVhHQkVfODI1OTlfTUFYX1RYX1FVRVVFUzsKKwltYWMtPm1heF9tc2l4X3ZlY3RvcnMgPSBpeGdiZV9nZXRfcGNpZV9tc2l4X2NvdW50XzgyNTk5KGh3KTsKKworZ2V0X2ludmFyaWFudHNfb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfbGlua19jYXBhYmlsaXRpZXNfODI1OTkgLSBEZXRlcm1pbmVzIGxpbmsgY2FwYWJpbGl0aWVzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogcG9pbnRlciB0byBsaW5rIHNwZWVkCisgKiAgQG5lZ290aWF0aW9uOiB0cnVlIHdoZW4gYXV0b25lZyBvciBhdXRvdHJ5IGlzIGVuYWJsZWQKKyAqCisgKiAgRGV0ZXJtaW5lcyB0aGUgbGluayBjYXBhYmlsaXRpZXMgYnkgcmVhZGluZyB0aGUgQVVUT0MgcmVnaXN0ZXIuCisgKiovCitzMzIgaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgKnNwZWVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sICpuZWdvdGlhdGlvbikKK3sKKwlzMzIgc3RhdHVzID0gMDsKKworCXN3aXRjaCAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfTE1TX01BU0spIHsKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xR19MSU5LX05PX0FOOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTjoKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCSpuZWdvdGlhdGlvbiA9IGZhbHNlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TXzFHX0FOOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TXzEwR19TRVJJQUw6CisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1I6CisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSXzFHX0FOOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV047CisJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LUl9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1g0X1NVUFApCisJCQkqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LWF9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJCSpuZWdvdGlhdGlvbiA9IHRydWU7CisJCWJyZWFrOworCisJY2FzZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSX1NHTUlJOgorCQkqc3BlZWQgPSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1JfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKKwkJaWYgKGh3LT5tYWMub3JpZ19hdXRvYyAmIElYR0JFX0FVVE9DX0tYNF9TVVBQKQorCQkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCQlpZiAoaHctPm1hYy5vcmlnX2F1dG9jICYgSVhHQkVfQVVUT0NfS1hfU1VQUCkKKwkJCSpzcGVlZCB8PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMOworCQkqbmVnb3RpYXRpb24gPSB0cnVlOworCQlicmVhazsKKworCWNhc2UgSVhHQkVfQVVUT0NfTE1TX1NHTUlJXzFHXzEwME06CisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwgfCBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOworCQkqbmVnb3RpYXRpb24gPSBmYWxzZTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlzdGF0dXMgPSBJWEdCRV9FUlJfTElOS19TRVRVUDsKKwkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKworCWlmIChody0+cGh5Lm11bHRpc3BlZWRfZmliZXIpIHsKKwkJKnNwZWVkIHw9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMIHwKKwkJICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEw7CisJCSpuZWdvdGlhdGlvbiA9IHRydWU7CisJfQorCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfZ2V0X2NvcHBlcl9saW5rX2NhcGFiaWxpdGllc184MjU5OSAtIERldGVybWluZXMgbGluayBjYXBhYmlsaXRpZXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBwb2ludGVyIHRvIGxpbmsgc3BlZWQKKyAqICBAYXV0b25lZzogYm9vbGVhbiBhdXRvLW5lZ290aWF0aW9uIHZhbHVlCisgKgorICogIERldGVybWluZXMgdGhlIGxpbmsgY2FwYWJpbGl0aWVzIGJ5IHJlYWRpbmcgdGhlIEFVVE9DIHJlZ2lzdGVyLgorICoqLworc3RhdGljIHMzMiBpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqYXV0b25lZykKK3sKKwlzMzIgc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisJdTE2IHNwZWVkX2FiaWxpdHk7CisKKwkqc3BlZWQgPSAwOworCSphdXRvbmVnID0gdHJ1ZTsKKworCXN0YXR1cyA9IGh3LT5waHkub3BzLnJlYWRfcmVnKGh3LCBJWEdCRV9NRElPX1BIWV9TUEVFRF9BQklMSVRZLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX01ESU9fUE1BX1BNRF9ERVZfVFlQRSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3BlZWRfYWJpbGl0eSk7CisKKwlpZiAoc3RhdHVzID09IDApIHsKKwkJaWYgKHNwZWVkX2FiaWxpdHkgJiBJWEdCRV9NRElPX1BIWV9TUEVFRF8xMEcpCisJCSAgICAqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWlmIChzcGVlZF9hYmlsaXR5ICYgSVhHQkVfTURJT19QSFlfU1BFRURfMUcpCisJCSAgICAqc3BlZWQgfD0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfbWVkaWFfdHlwZV84MjU5OSAtIEdldCBtZWRpYSB0eXBlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBSZXR1cm5zIHRoZSBtZWRpYSB0eXBlIChmaWJlciwgY29wcGVyLCBiYWNrcGxhbmUpCisgKiovCitlbnVtIGl4Z2JlX21lZGlhX3R5cGUgaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwllbnVtIGl4Z2JlX21lZGlhX3R5cGUgbWVkaWFfdHlwZTsKKworCS8qIERldGVjdCBpZiB0aGVyZSBpcyBhIGNvcHBlciBQSFkgYXR0YWNoZWQuICovCisJaWYgKGh3LT5waHkudHlwZSA9PSBpeGdiZV9waHlfY3VfdW5rbm93biB8fAorCSAgICBody0+cGh5LnR5cGUgPT0gaXhnYmVfcGh5X3RuKSB7CisJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX2NvcHBlcjsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChody0+ZGV2aWNlX2lkKSB7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTk6CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfS1g0OgorCQkvKiBEZWZhdWx0IGRldmljZSBJRCBpcyBtZXp6YW5pbmUgY2FyZCBLWC9LWDQgKi8KKwkJbWVkaWFfdHlwZSA9IGl4Z2JlX21lZGlhX3R5cGVfYmFja3BsYW5lOworCQlicmVhazsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9TRlA6CisJCW1lZGlhX3R5cGUgPSBpeGdiZV9tZWRpYV90eXBlX2ZpYmVyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQltZWRpYV90eXBlID0gaXhnYmVfbWVkaWFfdHlwZV91bmtub3duOworCQlicmVhazsKKwl9CitvdXQ6CisJcmV0dXJuIG1lZGlhX3R5cGU7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5IC0gU2V0dXAgTUFDIGxpbmsgc2V0dGluZ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENvbmZpZ3VyZXMgbGluayBzZXR0aW5ncyBiYXNlZCBvbiB2YWx1ZXMgaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdC4KKyAqICBSZXN0YXJ0cyB0aGUgbGluay4gIFBlcmZvcm1zIGF1dG9uZWdvdGlhdGlvbiBpZiBuZWVkZWQuCisgKiovCitzMzIgaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgYXV0b2NfcmVnOworCXUzMiBsaW5rc19yZWc7CisJdTMyIGk7CisJczMyIHN0YXR1cyA9IDA7CisKKwkvKiBSZXN0YXJ0IGxpbmsgKi8KKwlhdXRvY19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOworCWF1dG9jX3JlZyB8PSBJWEdCRV9BVVRPQ19BTl9SRVNUQVJUOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIGF1dG9jX3JlZyk7CisKKwkvKiBPbmx5IHBvbGwgZm9yIGF1dG9uZWcgdG8gY29tcGxldGUgaWYgc3BlY2lmaWVkIHRvIGRvIHNvICovCisJaWYgKGh3LT5waHkuYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKSB7CisJCWlmICgoYXV0b2NfcmVnICYgSVhHQkVfQVVUT0NfTE1TX01BU0spID09CisJCSAgICAgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiB8fAorCQkgICAgKGF1dG9jX3JlZyAmIElYR0JFX0FVVE9DX0xNU19NQVNLKSA9PQorCQkgICAgIElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gfHwKKwkJICAgIChhdXRvY19yZWcgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSykgPT0KKwkJICAgICBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSX1NHTUlJKSB7CisJCQlsaW5rc19yZWcgPSAwOyAvKiBKdXN0IGluIGNhc2UgQXV0b25lZyB0aW1lID0gMCAqLworCQkJZm9yIChpID0gMDsgaSA8IElYR0JFX0FVVE9fTkVHX1RJTUU7IGkrKykgeworCQkJCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MSU5LUyk7CisJCQkJaWYgKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX0tYX0FOX0NPTVApCisJCQkJCWJyZWFrOworCQkJCW1zbGVlcCgxMDApOworCQkJfQorCQkJaWYgKCEobGlua3NfcmVnICYgSVhHQkVfTElOS1NfS1hfQU5fQ09NUCkpIHsKKwkJCQlzdGF0dXMgPSBJWEdCRV9FUlJfQVVUT05FR19OT1RfQ09NUExFVEU7CisJCQkJaHdfZGJnKGh3LCAiQXV0b25lZyBkaWQgbm90IGNvbXBsZXRlLlxuIik7CisJCQl9CisJCX0KKwl9CisKKwkvKiBTZXQgdXAgZmxvdyBjb250cm9sICovCisJc3RhdHVzID0gaXhnYmVfc2V0dXBfZmNfZ2VuZXJpYyhodywgMCk7CisKKwkvKiBBZGQgZGVsYXkgdG8gZmlsdGVyIG91dCBub2lzZXMgZHVyaW5nIGluaXRpYWwgbGluayBzZXR1cCAqLworCW1zbGVlcCg1MCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyIC0gU2V0dXAgTUFDIGxpbmsgc2V0dGluZ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENvbmZpZ3VyZXMgbGluayBzZXR0aW5ncyBiYXNlZCBvbiB2YWx1ZXMgaW4gdGhlIGl4Z2JlX2h3IHN0cnVjdC4KKyAqICBSZXN0YXJ0cyB0aGUgbGluayBmb3IgbXVsdGktc3BlZWQgZmliZXIgYXQgMUcgc3BlZWQsIGlmIGxpbmsKKyAqICBmYWlscyBhdCAxMEcuCisgKiAgUGVyZm9ybXMgYXV0b25lZ290aWF0aW9uIGlmIG5lZWRlZC4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19tdWx0aXNwZWVkX2ZpYmVyKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1cyA9IDA7CisJaXhnYmVfbGlua19zcGVlZCBsaW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF84MjU5OV9BVVRPTkVHOworCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoaHcsIGxpbmtfc3BlZWQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0cnVlKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF9tdWx0aXNwZWVkX2ZpYmVyIC0gU2V0IE1BQyBsaW5rIHNwZWVkCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBzcGVlZDogbmV3IGxpbmsgc3BlZWQKKyAqICBAYXV0b25lZzogdHJ1ZSBpZiBhdXRvbmVnb3RpYXRpb24gZW5hYmxlZAorICogIEBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGU6IHRydWUgd2hlbiB3YWl0aW5nIGZvciBjb21wbGV0aW9uIGlzIG5lZWRlZAorICoKKyAqICBTZXQgdGhlIGxpbmsgc3BlZWQgaW4gdGhlIEFVVE9DIHJlZ2lzdGVyIGFuZCByZXN0YXJ0cyBsaW5rLgorICoqLworczMyIGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwlpeGdiZV9saW5rX3NwZWVkIHBoeV9saW5rX3NwZWVkOworCWl4Z2JlX2xpbmtfc3BlZWQgaGlnaGVzdF9saW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOworCXUzMiBzcGVlZGNudCA9IDA7CisJdTMyIGVzZHBfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0VTRFApOworCWJvb2wgbGlua191cCA9IGZhbHNlOworCWJvb2wgbmVnb3RpYXRpb247CisKKwkvKiBNYXNrIG9mZiByZXF1ZXN0ZWQgYnV0IG5vbi1zdXBwb3J0ZWQgc3BlZWRzICovCisJaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmcGh5X2xpbmtfc3BlZWQsICZuZWdvdGlhdGlvbik7CisJc3BlZWQgJj0gcGh5X2xpbmtfc3BlZWQ7CisKKwkvKgorCSAqIFRyeSBlYWNoIHNwZWVkIG9uZSBieSBvbmUsIGhpZ2hlc3QgcHJpb3JpdHkgZmlyc3QuICBXZSBkbyB0aGlzIGluCisJICogc29mdHdhcmUgYmVjYXVzZSAxMGdiIGZpYmVyIGRvZXNuJ3Qgc3VwcG9ydCBzcGVlZCBhdXRvbmVnb3RpYXRpb24uCisJICovCisJaWYgKHNwZWVkICYgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpIHsKKwkJc3BlZWRjbnQrKzsKKwkJaGlnaGVzdF9saW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisKKwkJLyogU2V0IGhhcmR3YXJlIFNEUCdzICovCisJCWVzZHBfcmVnIHw9IChJWEdCRV9FU0RQX1NEUDVfRElSIHwgSVhHQkVfRVNEUF9TRFA1KTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FU0RQLCBlc2RwX3JlZyk7CisKKwkJaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoaHcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpOworCisJCW1zbGVlcCg1MCk7CisKKwkJLyogSWYgd2UgaGF2ZSBsaW5rLCBqdXN0IGp1bXAgb3V0ICovCisJCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZwaHlfbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKwkJaWYgKGxpbmtfdXApCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc3BlZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSB7CisJCXNwZWVkY250Kys7CisJCWlmIChoaWdoZXN0X2xpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOKQorCQkJaGlnaGVzdF9saW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKworCQkvKiBTZXQgaGFyZHdhcmUgU0RQJ3MgKi8KKwkJZXNkcF9yZWcgJj0gfklYR0JFX0VTRFBfU0RQNTsKKwkJZXNkcF9yZWcgfD0gSVhHQkVfRVNEUF9TRFA1X0RJUjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FU0RQLCBlc2RwX3JlZyk7CisKKwkJaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTkoCisJCQlodywgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCwgYXV0b25lZywKKwkJCWF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CisKKwkJbXNsZWVwKDUwKTsKKworCQkvKiBJZiB3ZSBoYXZlIGxpbmssIGp1c3QganVtcCBvdXQgKi8KKwkJaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJnBoeV9saW5rX3NwZWVkLCAmbGlua191cCwgZmFsc2UpOworCQlpZiAobGlua191cCkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogV2UgZGlkbid0IGdldCBsaW5rLiAgQ29uZmlndXJlIGJhY2sgdG8gdGhlIGhpZ2hlc3Qgc3BlZWQgd2UgdHJpZWQsCisJICogKGlmIHRoZXJlIHdhcyBtb3JlIHRoYW4gb25lKS4gIFdlIGNhbGwgb3Vyc2VsdmVzIGJhY2sgd2l0aCBqdXN0IHRoZQorCSAqIHNpbmdsZSBoaWdoZXN0IHNwZWVkIHRoYXQgdGhlIHVzZXIgcmVxdWVzdGVkLgorCSAqLworCWlmIChzcGVlZGNudCA+IDEpCisJCXN0YXR1cyA9IGl4Z2JlX3NldHVwX21hY19saW5rX3NwZWVkX211bHRpc3BlZWRfZmliZXIoaHcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0X2xpbmtfc3BlZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKTsKKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX21hY19saW5rXzgyNTk5IC0gRGV0ZXJtaW5lIGxpbmsgYW5kIHNwZWVkIHN0YXR1cworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IHBvaW50ZXIgdG8gbGluayBzcGVlZAorICogIEBsaW5rX3VwOiB0cnVlIHdoZW4gbGluayBpcyB1cAorICogIEBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGU6IGJvb2wgdXNlZCB0byB3YWl0IGZvciBsaW5rIHVwIG9yIG5vdAorICoKKyAqICBSZWFkcyB0aGUgbGlua3MgcmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIGlmIGxpbmsgaXMgdXAgYW5kIHRoZSBjdXJyZW50IHNwZWVkCisgKiovCitzMzIgaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAqbGlua191cCwgYm9vbCBsaW5rX3VwX3dhaXRfdG9fY29tcGxldGUpCit7CisJdTMyIGxpbmtzX3JlZzsKKwl1MzIgaTsKKworCWxpbmtzX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MSU5LUyk7CisJaWYgKGxpbmtfdXBfd2FpdF90b19jb21wbGV0ZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfTElOS19VUF9USU1FOyBpKyspIHsKKwkJCWlmIChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19VUCkgeworCQkJCSpsaW5rX3VwID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJKmxpbmtfdXAgPSBmYWxzZTsKKwkJCX0KKwkJCW1zbGVlcCgxMDApOworCQkJbGlua3NfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xJTktTKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19VUCkKKwkJCSpsaW5rX3VwID0gdHJ1ZTsKKwkJZWxzZQorCQkJKmxpbmtfdXAgPSBmYWxzZTsKKwl9CisKKwlpZiAoKGxpbmtzX3JlZyAmIElYR0JFX0xJTktTX1NQRUVEXzgyNTk5KSA9PQorCSAgICBJWEdCRV9MSU5LU19TUEVFRF8xMEdfODI1OTkpCisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCWVsc2UgaWYgKChsaW5rc19yZWcgJiBJWEdCRV9MSU5LU19TUEVFRF84MjU5OSkgPT0KKwkgICAgICAgICBJWEdCRV9MSU5LU19TUEVFRF8xR184MjU5OSkKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKwllbHNlCisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEw7CisKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OSAtIFNldCBNQUMgbGluayBzcGVlZAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IG5ldyBsaW5rIHNwZWVkCisgKiAgQGF1dG9uZWc6IHRydWUgaWYgYXV0b25lZ290aWF0aW9uIGVuYWJsZWQKKyAqICBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB0cnVlIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbiBpcyBuZWVkZWQKKyAqCisgKiAgU2V0IHRoZSBsaW5rIHNwZWVkIGluIHRoZSBBVVRPQyByZWdpc3RlciBhbmQgcmVzdGFydHMgbGluay4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9tYWNfbGlua19zcGVlZF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX2xpbmtfc3BlZWQgc3BlZWQsIGJvb2wgYXV0b25lZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKwl1MzIgYXV0b2MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOworCXUzMiBhdXRvYzIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MyKTsKKwl1MzIgbGlua19tb2RlID0gYXV0b2MgJiBJWEdCRV9BVVRPQ19MTVNfTUFTSzsKKwl1MzIgcG1hX3BtZF8xZyA9IGF1dG9jICYgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9NQVNLOworCXUzMiBwbWFfcG1kXzEwZ19zZXJpYWwgPSBhdXRvYzIgJiBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX01BU0s7CisJdTMyIGxpbmtzX3JlZzsKKwl1MzIgaTsKKwlpeGdiZV9saW5rX3NwZWVkIGxpbmtfY2FwYWJpbGl0aWVzID0gSVhHQkVfTElOS19TUEVFRF9VTktOT1dOOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHNwZWVkIHBhc3NlZCBpbiBpcyBzdXBwb3J0ZWQuICovCisJaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmbGlua19jYXBhYmlsaXRpZXMsICZhdXRvbmVnKTsKKwlzcGVlZCAmPSBsaW5rX2NhcGFiaWxpdGllczsKKworCWlmIChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEX1VOS05PV04pIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisJfSBlbHNlIGlmIChsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiB8fAorCSAgICAgICAgICAgbGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gfHwKKwkgICAgICAgICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSX1NHTUlJKSB7CisJCS8qIFNldCBLWDQvS1gvS1Igc3VwcG9ydCBhY2NvcmRpbmcgdG8gc3BlZWQgcmVxdWVzdGVkICovCisJCWF1dG9jICY9IH4oSVhHQkVfQVVUT0NfS1g0X0tYX1NVUFBfTUFTSyB8IElYR0JFX0FVVE9DX0tSX1NVUFApOworCQlpZiAoc3BlZWQgJiBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkKKwkJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LWDRfU1VQUCkKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LWDRfU1VQUDsKKwkJCWlmIChody0+bWFjLm9yaWdfYXV0b2MgJiBJWEdCRV9BVVRPQ19LUl9TVVBQKQorCQkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0tSX1NVUFA7CisJCWlmIChzcGVlZCAmIElYR0JFX0xJTktfU1BFRURfMUdCX0ZVTEwpCisJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19LWF9TVVBQOworCX0gZWxzZSBpZiAoKHBtYV9wbWRfMWcgPT0gSVhHQkVfQVVUT0NfMUdfU0ZJKSAmJgorCSAgICAgICAgICAgKGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTiB8fAorCSAgICAgICAgICAgIGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfMUdfQU4pKSB7CisJCS8qIFN3aXRjaCBmcm9tIDFHIFNGSSB0byAxMEcgU0ZJIGlmIHJlcXVlc3RlZCAqLworCQlpZiAoKHNwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSAmJgorCQkgICAgKHBtYV9wbWRfMTBnX3NlcmlhbCA9PSBJWEdCRV9BVVRPQzJfMTBHX1NGSSkpIHsKKwkJCWF1dG9jICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKKwkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0xNU18xMEdfU0VSSUFMOworCQl9CisJfSBlbHNlIGlmICgocG1hX3BtZF8xMGdfc2VyaWFsID09IElYR0JFX0FVVE9DMl8xMEdfU0ZJKSAmJgorCSAgICAgICAgICAgKGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfMTBHX1NFUklBTCkpIHsKKwkJLyogU3dpdGNoIGZyb20gMTBHIFNGSSB0byAxRyBTRkkgaWYgcmVxdWVzdGVkICovCisJCWlmICgoc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkgJiYKKwkJICAgIChwbWFfcG1kXzFnID09IElYR0JFX0FVVE9DXzFHX1NGSSkpIHsKKwkJCWF1dG9jICY9IH5JWEdCRV9BVVRPQ19MTVNfTUFTSzsKKwkJCWlmIChhdXRvbmVnKQorCQkJCWF1dG9jIHw9IElYR0JFX0FVVE9DX0xNU18xR19BTjsKKwkJCWVsc2UKKwkJCQlhdXRvYyB8PSBJWEdCRV9BVVRPQ19MTVNfMUdfTElOS19OT19BTjsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgPT0gMCkgeworCQkvKiBSZXN0YXJ0IGxpbmsgKi8KKwkJYXV0b2MgfD0gSVhHQkVfQVVUT0NfQU5fUkVTVEFSVDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9BVVRPQywgYXV0b2MpOworCisJCS8qIE9ubHkgcG9sbCBmb3IgYXV0b25lZyB0byBjb21wbGV0ZSBpZiBzcGVjaWZpZWQgdG8gZG8gc28gKi8KKwkJaWYgKGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkgeworCQkJaWYgKGxpbmtfbW9kZSA9PSBJWEdCRV9BVVRPQ19MTVNfS1g0X0tYX0tSIHx8CisJCQkgICAgbGlua19tb2RlID09IElYR0JFX0FVVE9DX0xNU19LWDRfS1hfS1JfMUdfQU4gfHwKKwkJCSAgICBsaW5rX21vZGUgPT0gSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSSkgeworCQkJCWxpbmtzX3JlZyA9IDA7IC8qSnVzdCBpbiBjYXNlIEF1dG9uZWcgdGltZT0wKi8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfQVVUT19ORUdfVElNRTsgaSsrKSB7CisJCQkJCWxpbmtzX3JlZyA9CisJCQkJCSAgICAgICBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTElOS1MpOworCQkJCQlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfS1hfQU5fQ09NUCkKKwkJCQkJCWJyZWFrOworCQkJCQltc2xlZXAoMTAwKTsKKwkJCQl9CisJCQkJaWYgKCEobGlua3NfcmVnICYgSVhHQkVfTElOS1NfS1hfQU5fQ09NUCkpIHsKKwkJCQkJc3RhdHVzID0KKwkJCQkJICAgICAgICBJWEdCRV9FUlJfQVVUT05FR19OT1RfQ09NUExFVEU7CisJCQkJCWh3X2RiZyhodywgIkF1dG9uZWcgZGlkIG5vdCAiCisJCQkJCSAgICAgICAiY29tcGxldGUuXG4iKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBTZXQgdXAgZmxvdyBjb250cm9sICovCisJCXN0YXR1cyA9IGl4Z2JlX3NldHVwX2ZjX2dlbmVyaWMoaHcsIDApOworCisJCS8qIEFkZCBkZWxheSB0byBmaWx0ZXIgb3V0IG5vaXNlcyBkdXJpbmcgaW5pdGlhbCBsaW5rIHNldHVwICovCisJCW1zbGVlcCg1MCk7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkgLSBTZXR1cCBjb3BwZXIgbGluayBzZXR0aW5ncworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVzdGFydHMgdGhlIGxpbmsgb24gUEhZIGFuZCB0aGVuIE1BQy4gUGVyZm9ybXMgYXV0b25lZ290aWF0aW9uIGlmIG5lZWRlZC4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgc3RhdHVzOworCisJLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24gb24gUEhZICovCisJc3RhdHVzID0gaHctPnBoeS5vcHMuc2V0dXBfbGluayhodyk7CisKKwkvKiBTZXQgdXAgTUFDICovCisJaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTkoaHcpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkgLSBTZXQgdGhlIFBIWSBhdXRvbmVnIGFkdmVydGlzZWQgZmllbGQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBuZXcgbGluayBzcGVlZAorICogIEBhdXRvbmVnOiB0cnVlIGlmIGF1dG9uZWdvdGlhdGlvbiBlbmFibGVkCisgKiAgQGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTogdHJ1ZSBpZiB3YWl0aW5nIGlzIG5lZWRlZCB0byBjb21wbGV0ZQorICoKKyAqICBSZXN0YXJ0cyBsaW5rIG9uIFBIWSBhbmQgTUFDIGJhc2VkIG9uIHNldHRpbmdzIHBhc3NlZCBpbi4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfc2V0dXBfY29wcGVyX2xpbmtfc3BlZWRfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhdXRvbmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwlzMzIgc3RhdHVzOworCisJLyogU2V0dXAgdGhlIFBIWSBhY2NvcmRpbmcgdG8gaW5wdXQgc3BlZWQgKi8KKwlzdGF0dXMgPSBody0+cGh5Lm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBzcGVlZCwgYXV0b25lZywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSk7CisJLyogU2V0IHVwIE1BQyAqLworCWl4Z2JlX3NldHVwX21hY19saW5rXzgyNTk5KGh3KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3Jlc2V0X2h3XzgyNTk5IC0gUGVyZm9ybSBoYXJkd2FyZSByZXNldAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVzZXRzIHRoZSBoYXJkd2FyZSBieSByZXNldHRpbmcgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzLCBtYXNrcworICogIGFuZCBjbGVhcnMgYWxsIGludGVycnVwdHMsIHBlcmZvcm0gYSBQSFkgcmVzZXQsIGFuZCBwZXJmb3JtIGEgbGluayAoTUFDKQorICogIHJlc2V0LgorICoqLworczMyIGl4Z2JlX3Jlc2V0X2h3XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1cyA9IDA7CisJdTMyIGN0cmwsIGN0cmxfZXh0OworCXUzMiBpOworCXUzMiBhdXRvYzsKKwl1MzIgYXV0b2MyOworCisJLyogQ2FsbCBhZGFwdGVyIHN0b3AgdG8gZGlzYWJsZSB0eC9yeCBhbmQgY2xlYXIgaW50ZXJydXB0cyAqLworCWh3LT5tYWMub3BzLnN0b3BfYWRhcHRlcihodyk7CisKKwkvKiBSZXNldCBQSFkgKi8KKwlody0+cGh5Lm9wcy5yZXNldChodyk7CisKKwkvKgorCSAqIFByZXZlbnQgdGhlIFBDSS1FIGJ1cyBmcm9tIGZyb20gaGFuZ2luZyBieSBkaXNhYmxpbmcgUENJLUUgbWFzdGVyCisJICogYWNjZXNzIGFuZCB2ZXJpZnkgbm8gcGVuZGluZyByZXF1ZXN0cyBiZWZvcmUgcmVzZXQKKwkgKi8KKwlpZiAoaXhnYmVfZGlzYWJsZV9wY2llX21hc3RlcihodykgIT0gMCkgeworCQlzdGF0dXMgPSBJWEdCRV9FUlJfTUFTVEVSX1JFUVVFU1RTX1BFTkRJTkc7CisJCWh3X2RiZyhodywgIlBDSS1FIE1hc3RlciBkaXNhYmxlIHBvbGxpbmcgaGFzIGZhaWxlZC5cbiIpOworCX0KKworCS8qCisJICogSXNzdWUgZ2xvYmFsIHJlc2V0IHRvIHRoZSBNQUMuICBUaGlzIG5lZWRzIHRvIGJlIGEgU1cgcmVzZXQuCisJICogSWYgbGluayByZXNldCBpcyB1c2VkLCBpdCBtaWdodCByZXNldCB0aGUgTUFDIHdoZW4gbW5nIGlzIHVzaW5nIGl0CisJICovCisJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkwsIChjdHJsIHwgSVhHQkVfQ1RSTF9SU1QpKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwkvKiBQb2xsIGZvciByZXNldCBiaXQgdG8gc2VsZi1jbGVhciBpbmRpY2F0aW5nIHJlc2V0IGlzIGNvbXBsZXRlICovCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJdWRlbGF5KDEpOworCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NUUkwpOworCQlpZiAoIShjdHJsICYgSVhHQkVfQ1RSTF9SU1QpKQorCQkJYnJlYWs7CisJfQorCWlmIChjdHJsICYgSVhHQkVfQ1RSTF9SU1QpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX1JFU0VUX0ZBSUxFRDsKKwkJaHdfZGJnKGh3LCAiUmVzZXQgcG9sbGluZyBmYWlsZWQgdG8gY29tcGxldGUuXG4iKTsKKwl9CisJLyogQ2xlYXIgUEYgUmVzZXQgRG9uZSBiaXQgc28gUEYvVkYgTWFpbCBPcHMgY2FuIHdvcmsgKi8KKwljdHJsX2V4dCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMX0VYVCk7CisJY3RybF9leHQgfD0gSVhHQkVfQ1RSTF9FWFRfUEZSU1REOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTF9FWFQsIGN0cmxfZXh0KTsKKworCW1zbGVlcCg1MCk7CisKKworCisJLyoKKwkgKiBTdG9yZSB0aGUgb3JpZ2luYWwgQVVUT0MvQVVUT0MyIHZhbHVlcyBpZiB0aGV5IGhhdmUgbm90IGJlZW4KKwkgKiBzdG9yZWQgb2ZmIHlldC4gIE90aGVyd2lzZSByZXN0b3JlIHRoZSBzdG9yZWQgb3JpZ2luYWwKKwkgKiB2YWx1ZXMgc2luY2UgdGhlIHJlc2V0IG9wZXJhdGlvbiBzZXRzIGJhY2sgdG8gZGVmYXVsdHMuCisJICovCisJYXV0b2MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQVVUT0MpOworCWF1dG9jMiA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9BVVRPQzIpOworCWlmIChody0+bWFjLm9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQgPT0gZmFsc2UpIHsKKwkJaHctPm1hYy5vcmlnX2F1dG9jID0gYXV0b2M7CisJCWh3LT5tYWMub3JpZ19hdXRvYzIgPSBhdXRvYzI7CisJCWh3LT5tYWMub3JpZ19saW5rX3NldHRpbmdzX3N0b3JlZCA9IHRydWU7CisJfSBlbHNlIHsKKwkJaWYgKGF1dG9jICE9IGh3LT5tYWMub3JpZ19hdXRvYykKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQVVUT0MsIChody0+bWFjLm9yaWdfYXV0b2MgfAorCQkJICAgICAgICAgICAgICAgIElYR0JFX0FVVE9DX0FOX1JFU1RBUlQpKTsKKworCQlpZiAoKGF1dG9jMiAmIElYR0JFX0FVVE9DMl9VUFBFUl9NQVNLKSAhPQorCQkgICAgKGh3LT5tYWMub3JpZ19hdXRvYzIgJiBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSykpIHsKKwkJCWF1dG9jMiAmPSB+SVhHQkVfQVVUT0MyX1VQUEVSX01BU0s7CisJCQlhdXRvYzIgfD0gKGh3LT5tYWMub3JpZ19hdXRvYzIgJgorCQkJICAgICAgICAgICBJWEdCRV9BVVRPQzJfVVBQRVJfTUFTSyk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0FVVE9DMiwgYXV0b2MyKTsKKwkJfQorCX0KKworCS8qIFN0b3JlIHRoZSBwZXJtYW5lbnQgbWFjIGFkZHJlc3MgKi8KKwlody0+bWFjLm9wcy5nZXRfbWFjX2FkZHIoaHcsIGh3LT5tYWMucGVybV9hZGRyKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkgLSBEaXNhc3NvY2lhdGUgYSBWTURxIHBvb2wgaW5kZXggZnJvbSBhIHJ4IGFkZHJlc3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0CisgKiAgQHJhcjogcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVyIGluZGV4IHRvIGRpc2Fzc29jaWF0ZQorICogIEB2bWRxOiBWTURxIHBvb2wgaW5kZXggdG8gcmVtb3ZlIGZyb20gdGhlIHJhcgorICoqLworczMyIGl4Z2JlX2NsZWFyX3ZtZHFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJhciwgdTMyIHZtZHEpCit7CisJdTMyIG1wc2FyX2xvLCBtcHNhcl9oaTsKKwl1MzIgcmFyX2VudHJpZXMgPSBody0+bWFjLm51bV9yYXJfZW50cmllczsKKworCWlmIChyYXIgPCByYXJfZW50cmllcykgeworCQltcHNhcl9sbyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NUFNBUl9MTyhyYXIpKTsKKwkJbXBzYXJfaGkgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSk7CisKKwkJaWYgKCFtcHNhcl9sbyAmJiAhbXBzYXJfaGkpCisJCQlnb3RvIGRvbmU7CisKKwkJaWYgKHZtZHEgPT0gSVhHQkVfQ0xFQVJfVk1EUV9BTEwpIHsKKwkJCWlmIChtcHNhcl9sbykgeworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSwgMCk7CisJCQkJbXBzYXJfbG8gPSAwOworCQkJfQorCQkJaWYgKG1wc2FyX2hpKSB7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9ISShyYXIpLCAwKTsKKwkJCQltcHNhcl9oaSA9IDA7CisJCQl9CisJCX0gZWxzZSBpZiAodm1kcSA8IDMyKSB7CisJCQltcHNhcl9sbyAmPSB+KDEgPDwgdm1kcSk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0xPKHJhciksIG1wc2FyX2xvKTsKKwkJfSBlbHNlIHsKKwkJCW1wc2FyX2hpICY9IH4oMSA8PCAodm1kcSAtIDMyKSk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01QU0FSX0hJKHJhciksIG1wc2FyX2hpKTsKKwkJfQorCisJCS8qIHdhcyB0aGF0IHRoZSBsYXN0IHBvb2wgdXNpbmcgdGhpcyByYXI/ICovCisJCWlmIChtcHNhcl9sbyA9PSAwICYmIG1wc2FyX2hpID09IDAgJiYgcmFyICE9IDApCisJCQlody0+bWFjLm9wcy5jbGVhcl9yYXIoaHcsIHJhcik7CisJfSBlbHNlIHsKKwkJaHdfZGJnKGh3LCAiUkFSIGluZGV4ICVkIGlzIG91dCBvZiByYW5nZS5cbiIsIHJhcik7CisJfQorCitkb25lOgorCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9zZXRfdm1kcV84MjU5OSAtIEFzc29jaWF0ZSBhIFZNRHEgcG9vbCBpbmRleCB3aXRoIGEgcnggYWRkcmVzcworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3QKKyAqICBAcmFyOiByZWNlaXZlIGFkZHJlc3MgcmVnaXN0ZXIgaW5kZXggdG8gYXNzb2NpYXRlIHdpdGggYSBWTURxIGluZGV4CisgKiAgQHZtZHE6IFZNRHEgcG9vbCBpbmRleAorICoqLworczMyIGl4Z2JlX3NldF92bWRxXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiByYXIsIHUzMiB2bWRxKQoreworCXUzMiBtcHNhcjsKKwl1MzIgcmFyX2VudHJpZXMgPSBody0+bWFjLm51bV9yYXJfZW50cmllczsKKworCWlmIChyYXIgPCByYXJfZW50cmllcykgeworCQlpZiAodm1kcSA8IDMyKSB7CisJCQltcHNhciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NUFNBUl9MTyhyYXIpKTsKKwkJCW1wc2FyIHw9IDEgPDwgdm1kcTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVBTQVJfTE8ocmFyKSwgbXBzYXIpOworCQl9IGVsc2UgeworCQkJbXBzYXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVBTQVJfSEkocmFyKSk7CisJCQltcHNhciB8PSAxIDw8ICh2bWRxIC0gMzIpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUFNBUl9ISShyYXIpLCBtcHNhcik7CisJCX0KKwl9IGVsc2UgeworCQlod19kYmcoaHcsICJSQVIgaW5kZXggJWQgaXMgb3V0IG9mIHJhbmdlLlxuIiwgcmFyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldF92ZnRhXzgyNTk5IC0gU2V0IFZMQU4gZmlsdGVyIHRhYmxlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEB2bGFuOiBWTEFOIGlkIHRvIHdyaXRlIHRvIFZMQU4gZmlsdGVyCisgKiAgQHZpbmQ6IFZNRHEgb3V0cHV0IGluZGV4IHRoYXQgbWFwcyBxdWV1ZSB0byBWTEFOIGlkIGluIFZGVkZCCisgKiAgQHZsYW5fb246IGJvb2xlYW4gZmxhZyB0byB0dXJuIG9uL29mZiBWTEFOIGluIFZGVkYKKyAqCisgKiAgVHVybiBvbi9vZmYgc3BlY2lmaWVkIFZMQU4gaW4gdGhlIFZMQU4gZmlsdGVyIHRhYmxlLgorICoqLworczMyIGl4Z2JlX3NldF92ZnRhXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2bGFuLCB1MzIgdmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHZsYW5fb24pCit7CisJdTMyIHJlZ2luZGV4OworCXUzMiBiaXRpbmRleDsKKwl1MzIgYml0czsKKwl1MzIgZmlyc3RfZW1wdHlfc2xvdDsKKworCWlmICh2bGFuID4gNDA5NSkKKwkJcmV0dXJuIElYR0JFX0VSUl9QQVJBTTsKKworCS8qCisJICogdGhpcyBpcyBhIDIgcGFydCBvcGVyYXRpb24gLSBmaXJzdCB0aGUgVkZUQSwgdGhlbiB0aGUKKwkgKiBWTFZGIGFuZCBWTFZGQiBpZiB2aW5kIGlzIHNldAorCSAqLworCisJLyogUGFydCAxCisJICogVGhlIFZGVEEgaXMgYSBiaXRzdHJpbmcgbWFkZSB1cCBvZiAxMjggMzItYml0IHJlZ2lzdGVycworCSAqIHRoYXQgZW5hYmxlIHRoZSBwYXJ0aWN1bGFyIFZMQU4gaWQsIG11Y2ggbGlrZSB0aGUgTVRBOgorCSAqICAgIGJpdHNbMTEtNV06IHdoaWNoIHJlZ2lzdGVyCisJICogICAgYml0c1s0LTBdOiAgd2hpY2ggYml0IGluIHRoZSByZWdpc3RlcgorCSAqLworCXJlZ2luZGV4ID0gKHZsYW4gPj4gNSkgJiAweDdGOworCWJpdGluZGV4ID0gdmxhbiAmIDB4MUY7CisJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRBKHJlZ2luZGV4KSk7CisJaWYgKHZsYW5fb24pCisJCWJpdHMgfD0gKDEgPDwgYml0aW5kZXgpOworCWVsc2UKKwkJYml0cyAmPSB+KDEgPDwgYml0aW5kZXgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZUQShyZWdpbmRleCksIGJpdHMpOworCisKKwkvKiBQYXJ0IDIKKwkgKiBJZiB0aGUgdmluZCBpcyBzZXQKKwkgKiAgIEVpdGhlciB2bGFuX29uCisJICogICAgIG1ha2Ugc3VyZSB0aGUgdmxhbiBpcyBpbiBWTFZGCisJICogICAgIHNldCB0aGUgdmluZCBiaXQgaW4gdGhlIG1hdGNoaW5nIFZMVkZCCisJICogICBPciAhdmxhbl9vbgorCSAqICAgICBjbGVhciB0aGUgcG9vbCBiaXQgYW5kIHBvc3NpYmx5IHRoZSB2aW5kCisJICovCisJaWYgKHZpbmQpIHsKKwkJLyogZmluZCB0aGUgdmxhbmlkIG9yIHRoZSBmaXJzdCBlbXB0eSBzbG90ICovCisJCWZpcnN0X2VtcHR5X3Nsb3QgPSAwOworCisJCWZvciAocmVnaW5kZXggPSAxOyByZWdpbmRleCA8IElYR0JFX1ZMVkZfRU5UUklFUzsgcmVnaW5kZXgrKykgeworCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTFZGKHJlZ2luZGV4KSk7CisJCQlpZiAoIWJpdHMgJiYgIWZpcnN0X2VtcHR5X3Nsb3QpCisJCQkJZmlyc3RfZW1wdHlfc2xvdCA9IHJlZ2luZGV4OworCQkJZWxzZSBpZiAoKGJpdHMgJiAweDBGRkYpID09IHZsYW4pCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAocmVnaW5kZXggPj0gSVhHQkVfVkxWRl9FTlRSSUVTKSB7CisJCQlpZiAoZmlyc3RfZW1wdHlfc2xvdCkKKwkJCQlyZWdpbmRleCA9IGZpcnN0X2VtcHR5X3Nsb3Q7CisJCQllbHNlIHsKKwkJCQlod19kYmcoaHcsICJObyBzcGFjZSBpbiBWTFZGLlxuIik7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQlpZiAodmxhbl9vbikgeworCQkJLyogc2V0IHRoZSBwb29sIGJpdCAqLworCQkJaWYgKHZpbmQgPCAzMikgeworCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMikpOworCQkJCWJpdHMgfD0gKDEgPDwgdmluZCk7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIocmVnaW5kZXggKiAyKSwgYml0cyk7CisJCQl9IGVsc2UgeworCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSkpOworCQkJCWJpdHMgfD0gKDEgPDwgdmluZCk7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCSAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSwgYml0cyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBjbGVhciB0aGUgcG9vbCBiaXQgKi8KKwkJCWlmICh2aW5kIDwgMzIpIHsKKwkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKKwkJCWJpdHMgJj0gfigxIDw8IHZpbmQpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMiksIGJpdHMpOworCQkJCWJpdHMgfD0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQigocmVnaW5kZXggKiAyKSArIDEpKTsKKwkJCX0gZWxzZSB7CisJCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSk7CisJCQkJYml0cyAmPSB+KDEgPDwgdmluZCk7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCSAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSwgYml0cyk7CisJCQkJYml0cyB8PSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkgICAgICAgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMikpOworCQkJfQorCQl9CisKKwkJaWYgKGJpdHMpCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkYocmVnaW5kZXgpLAorCQkJICAgICAgICAgICAgICAgIChJWEdCRV9WTFZGX1ZJRU4gfCB2bGFuKSk7CisJCWVsc2UKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxWRihyZWdpbmRleCksIDApOworCX0KKworb3V0OgorCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9jbGVhcl92ZnRhXzgyNTk5IC0gQ2xlYXIgVkxBTiBmaWx0ZXIgdGFibGUKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENsZWFycyB0aGUgVkxBTiBmaWxlciB0YWJsZSwgYW5kIHRoZSBWTURxIGluZGV4IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsdGVyCisgKiovCitzMzIgaXhnYmVfY2xlYXJfdmZ0YV84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiBvZmZzZXQ7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGh3LT5tYWMudmZ0X3NpemU7IG9mZnNldCsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVEEob2Zmc2V0KSwgMCk7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IElYR0JFX1ZMVkZfRU5UUklFUzsgb2Zmc2V0KyspIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKG9mZnNldCksIDApOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkZCKG9mZnNldCAqIDIpLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGQigob2Zmc2V0ICogMikgKyAxKSwgMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JlX2JsaW5rX2xlZF9zdGFydF84MjU5OSAtIEJsaW5rIExFRCBiYXNlZCBvbiBpbmRleC4KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGluZGV4OiBsZWQgbnVtYmVyIHRvIGJsaW5rCisgKiovCitzMzIgaXhnYmVfYmxpbmtfbGVkX3N0YXJ0XzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCkKK3sKKwl1MzIgbGVkX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MRURDVEwpOworCisJbGVkX3JlZyAmPSB+SVhHQkVfTEVEX01PREVfTUFTSyhpbmRleCk7CisJbGVkX3JlZyB8PSBJWEdCRV9MRURfQkxJTksoaW5kZXgpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTEVEQ1RMLCBsZWRfcmVnKTsKKwlJWEdCRV9XUklURV9GTFVTSChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTkgLSBTdG9wIGJsaW5raW5nIExFRCBiYXNlZCBvbiBpbmRleC4KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGluZGV4OiBsZWQgbnVtYmVyIHRvIHN0b3AgYmxpbmtpbmcKKyAqKi8KK3MzMiBpeGdiZV9ibGlua19sZWRfc3RvcF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgaW5kZXgpCit7CisJdTMyIGxlZF9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTEVEQ1RMKTsKKworCWxlZF9yZWcgJj0gfklYR0JFX0xFRF9NT0RFX01BU0soaW5kZXgpOworCWxlZF9yZWcgJj0gfklYR0JFX0xFRF9CTElOSyhpbmRleCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9MRURDVEwsIGxlZF9yZWcpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTkgLSBJbml0aWFsaXplIHRoZSBVbmljYXN0IFRhYmxlIEFycmF5CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoqLworczMyIGl4Z2JlX2luaXRfdXRhX3RhYmxlc184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCWludCBpOworCWh3X2RiZyhodywgIiBDbGVhcmluZyBVVEFcbiIpOworCisJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1VUQShpKSwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OSAtIFJlYWRzIDggYml0IE9tZXIgYW5hbG9nIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEByZWc6IGFuYWxvZyByZWdpc3RlciB0byByZWFkCisgKiAgQHZhbDogcmVhZCB2YWx1ZQorICoKKyAqICBQZXJmb3JtcyByZWFkIG9wZXJhdGlvbiB0byBPbWVyIGFuYWxvZyByZWdpc3RlciBzcGVjaWZpZWQuCisgKiovCitzMzIgaXhnYmVfcmVhZF9hbmFsb2dfcmVnOF84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnLCB1OCAqdmFsKQoreworCXUzMiAgY29yZV9jdGw7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NPUkVDVEwsIElYR0JFX0NPUkVDVExfV1JJVEVfQ01EIHwKKwkgICAgICAgICAgICAgICAgKHJlZyA8PCA4KSk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCXVkZWxheSgxMCk7CisJY29yZV9jdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ09SRUNUTCk7CisJKnZhbCA9ICh1OCljb3JlX2N0bDsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9hbmFsb2dfcmVnOF84MjU5OSAtIFdyaXRlcyA4IGJpdCBPbWVyIGFuYWxvZyByZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAcmVnOiBhdGxhcyByZWdpc3RlciB0byB3cml0ZQorICogIEB2YWw6IHZhbHVlIHRvIHdyaXRlCisgKgorICogIFBlcmZvcm1zIHdyaXRlIG9wZXJhdGlvbiB0byBPbWVyIGFuYWxvZyByZWdpc3RlciBzcGVjaWZpZWQuCisgKiovCitzMzIgaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZywgdTggdmFsKQoreworCXUzMiAgY29yZV9jdGw7CisKKwljb3JlX2N0bCA9IChyZWcgPDwgOCkgfCB2YWw7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DT1JFQ1RMLCBjb3JlX2N0bCk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCXVkZWxheSgxMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc3RhcnRfaHdfODI1OTkgLSBQcmVwYXJlIGhhcmR3YXJlIGZvciBUeC9SeAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU3RhcnRzIHRoZSBoYXJkd2FyZSB1c2luZyB0aGUgZ2VuZXJpYyBzdGFydF9odyBmdW5jdGlvbi4KKyAqICBUaGVuIHBlcmZvcm1zIGRldmljZS1zcGVjaWZpYzoKKyAqICBDbGVhcnMgdGhlIHJhdGUgbGltaXRlciByZWdpc3RlcnMuCisgKiovCitzMzIgaXhnYmVfc3RhcnRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgcV9udW07CisKKwlpeGdiZV9zdGFydF9od19nZW5lcmljKGh3KTsKKworCS8qIENsZWFyIHRoZSByYXRlIGxpbWl0ZXJzICovCisJZm9yIChxX251bSA9IDA7IHFfbnVtIDwgaHctPm1hYy5tYXhfdHhfcXVldWVzOyBxX251bSsrKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURFFTRUwsIHFfbnVtKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFRCQ05SQywgMCk7CisJfQorCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpeGdiZV9pZGVudGlmeV9waHlfODI1OTkgLSBHZXQgcGh5c2ljYWwgbGF5ZXIgbW9kdWxlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBEZXRlcm1pbmVzIHRoZSBwaHlzaWNhbCBsYXllciBtb2R1bGUgZm91bmQgb24gdGhlIGN1cnJlbnQgYWRhcHRlci4KKyAqKi8KK3MzMiBpeGdiZV9pZGVudGlmeV9waHlfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgc3RhdHVzID0gSVhHQkVfRVJSX1BIWV9BRERSX0lOVkFMSUQ7CisJc3RhdHVzID0gaXhnYmVfaWRlbnRpZnlfcGh5X2dlbmVyaWMoaHcpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJc3RhdHVzID0gaXhnYmVfaWRlbnRpZnlfc2ZwX21vZHVsZV9nZW5lcmljKGh3KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyXzgyNTk5IC0gUmV0dXJucyBwaHlzaWNhbCBsYXllciB0eXBlCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBEZXRlcm1pbmVzIHBoeXNpY2FsIGxheWVyIGNhcGFiaWxpdGllcyBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorICoqLwordTMyIGl4Z2JlX2dldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgcGh5c2ljYWxfbGF5ZXIgPSBJWEdCRV9QSFlTSUNBTF9MQVlFUl9VTktOT1dOOworCXU4IGNvbXBfY29kZXNfMTBnID0gMDsKKworCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5OgorCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk5X0tYNDoKKwkJLyogRGVmYXVsdCBkZXZpY2UgSUQgaXMgbWV6emFuaW5lIGNhcmQgS1gvS1g0ICovCisJCXBoeXNpY2FsX2xheWVyID0gKElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfS1g0IHwKKwkJICAgICAgICAgICAgICAgICAgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTAwMEJBU0VfS1gpOworCQlicmVhazsKKwljYXNlIElYR0JFX0RFVl9JRF84MjU5OV9TRlA6CisJCWh3LT5waHkub3BzLmlkZW50aWZ5X3NmcChodyk7CisKKwkJc3dpdGNoIChody0+cGh5LnNmcF90eXBlKSB7CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfZGFfY3U6CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTA6CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTE6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1NGUF9QTFVTX0NVOworCQkJYnJlYWs7CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfc3I6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwR0JBU0VfU1I7CisJCQlicmVhazsKKwkJY2FzZSBpeGdiZV9zZnBfdHlwZV9scjoKKwkJCXBoeXNpY2FsX2xheWVyID0gSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9MUjsKKwkJCWJyZWFrOworCQljYXNlIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTA6CisJCWNhc2UgaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMToKKwkJCWh3LT5waHkub3BzLnJlYWRfaTJjX2VlcHJvbShodywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9TRkZfMTBHQkVfQ09NUF9DT0RFUywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tcF9jb2Rlc18xMGcpOworCQkJaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VTUl9DQVBBQkxFKQorCQkJCXBoeXNpY2FsX2xheWVyID0KKwkJCQkgICAgICAgICAgICAgICAgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9TUjsKKwkJCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VMUl9DQVBBQkxFKQorCQkJCXBoeXNpY2FsX2xheWVyID0KKwkJCQkgICAgICAgICAgICAgICAgSVhHQkVfUEhZU0lDQUxfTEFZRVJfMTBHQkFTRV9MUjsKKwkJCWVsc2UKKwkJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJCWRlZmF1bHQ6CisJCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwaHlzaWNhbF9sYXllciA9IElYR0JFX1BIWVNJQ0FMX0xBWUVSX1VOS05PV047CisJCWJyZWFrOworCX0KKworCXJldHVybiBwaHlzaWNhbF9sYXllcjsKK30KKworLyoqCisgKiAgaXhnYmVfZW5hYmxlX3J4X2RtYV84MjU5OSAtIEVuYWJsZSB0aGUgUnggRE1BIHVuaXQgb24gODI1OTkKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHJlZ3ZhbDogcmVnaXN0ZXIgdmFsdWUgdG8gd3JpdGUgdG8gUlhDVFJMCisgKgorICogIEVuYWJsZXMgdGhlIFJ4IERNQSB1bml0IGZvciA4MjU5OQorICoqLworczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCkKK3sKKyNkZWZpbmUgSVhHQkVfTUFYX1NFQ1JYX1BPTEwgMzAKKwlpbnQgaTsKKwlpbnQgc2VjcnhyZWc7CisKKwkvKgorCSAqIFdvcmthcm91bmQgZm9yIDgyNTk5IHNpbGljb24gZXJyYXRhIHdoZW4gZW5hYmxpbmcgdGhlIFJ4IGRhdGFwYXRoLgorCSAqIElmIHRyYWZmaWMgaXMgaW5jb21pbmcgYmVmb3JlIHdlIGVuYWJsZSB0aGUgUnggdW5pdCwgaXQgY291bGQgaGFuZworCSAqIHRoZSBSeCBETUEgdW5pdC4gIFRoZXJlZm9yZSwgbWFrZSBzdXJlIHRoZSBzZWN1cml0eSBlbmdpbmUgaXMKKwkgKiBjb21wbGV0ZWx5IGRpc2FibGVkIHByaW9yIHRvIGVuYWJsaW5nIHRoZSBSeCB1bml0LgorCSAqLworCXNlY3J4cmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCk7CisJc2VjcnhyZWcgfD0gSVhHQkVfU0VDUlhDVFJMX1JYX0RJUzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCwgc2VjcnhyZWcpOworCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9NQVhfU0VDUlhfUE9MTDsgaSsrKSB7CisJCXNlY3J4cmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1NFQ1JYU1RBVCk7CisJCWlmIChzZWNyeHJlZyAmIElYR0JFX1NFQ1JYU1RBVF9TRUNSWF9SRFkpCisJCQlicmVhazsKKwkJZWxzZQorCQkJdWRlbGF5KDEwKTsKKwl9CisKKwkvKiBGb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5ICovCisJaWYgKGkgPj0gSVhHQkVfTUFYX1NFQ1JYX1BPTEwpCisJCWh3X2RiZyhodywgIlJ4IHVuaXQgYmVpbmcgZW5hYmxlZCBiZWZvcmUgc2VjdXJpdHkgIgorCQkgICAgICAgInBhdGggZnVsbHkgZGlzYWJsZWQuICBDb250aW51aW5nIHdpdGggaW5pdC5cbiIpOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWENUUkwsIHJlZ3ZhbCk7CisJc2VjcnhyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfU0VDUlhDVFJMKTsKKwlzZWNyeHJlZyAmPSB+SVhHQkVfU0VDUlhDVFJMX1JYX0RJUzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1NFQ1JYQ1RSTCwgc2VjcnhyZWcpOworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIG1hY19vcHNfODI1OTkgPSB7CisJLmluaXRfaHcgICAgICAgICAgICAgICAgPSAmaXhnYmVfaW5pdF9od19nZW5lcmljLAorCS5yZXNldF9odyAgICAgICAgICAgICAgID0gJml4Z2JlX3Jlc2V0X2h3XzgyNTk5LAorCS5zdGFydF9odyAgICAgICAgICAgICAgID0gJml4Z2JlX3N0YXJ0X2h3XzgyNTk5LAorCS5jbGVhcl9od19jbnRycyAgICAgICAgID0gJml4Z2JlX2NsZWFyX2h3X2NudHJzX2dlbmVyaWMsCisJLmdldF9tZWRpYV90eXBlICAgICAgICAgPSAmaXhnYmVfZ2V0X21lZGlhX3R5cGVfODI1OTksCisJLmdldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXIgPSAmaXhnYmVfZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcl84MjU5OSwKKwkuZW5hYmxlX3J4X2RtYSAgICAgICAgICA9ICZpeGdiZV9lbmFibGVfcnhfZG1hXzgyNTk5LAorCS5nZXRfbWFjX2FkZHIgICAgICAgICAgID0gJml4Z2JlX2dldF9tYWNfYWRkcl9nZW5lcmljLAorCS5zdG9wX2FkYXB0ZXIgICAgICAgICAgID0gJml4Z2JlX3N0b3BfYWRhcHRlcl9nZW5lcmljLAorCS5nZXRfYnVzX2luZm8gICAgICAgICAgID0gJml4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljLAorCS5zZXRfbGFuX2lkICAgICAgICAgICAgID0gJml4Z2JlX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llLAorCS5yZWFkX2FuYWxvZ19yZWc4ICAgICAgID0gJml4Z2JlX3JlYWRfYW5hbG9nX3JlZzhfODI1OTksCisJLndyaXRlX2FuYWxvZ19yZWc4ICAgICAgPSAmaXhnYmVfd3JpdGVfYW5hbG9nX3JlZzhfODI1OTksCisJLnNldHVwX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfODI1OTksCisJLnNldHVwX2xpbmtfc3BlZWQgICAgICAgPSAmaXhnYmVfc2V0dXBfbWFjX2xpbmtfc3BlZWRfODI1OTksCisJLmNoZWNrX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfY2hlY2tfbWFjX2xpbmtfODI1OTksCisJLmdldF9saW5rX2NhcGFiaWxpdGllcyAgPSAmaXhnYmVfZ2V0X2xpbmtfY2FwYWJpbGl0aWVzXzgyNTk5LAorCS5sZWRfb24gICAgICAgICAgICAgICAgID0gJml4Z2JlX2xlZF9vbl9nZW5lcmljLAorCS5sZWRfb2ZmICAgICAgICAgICAgICAgID0gJml4Z2JlX2xlZF9vZmZfZ2VuZXJpYywKKwkuYmxpbmtfbGVkX3N0YXJ0ICAgICAgICA9ICZpeGdiZV9ibGlua19sZWRfc3RhcnRfODI1OTksCisJLmJsaW5rX2xlZF9zdG9wICAgICAgICAgPSAmaXhnYmVfYmxpbmtfbGVkX3N0b3BfODI1OTksCisJLnNldF9yYXIgICAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X3Jhcl9nZW5lcmljLAorCS5jbGVhcl9yYXIgICAgICAgICAgICAgID0gJml4Z2JlX2NsZWFyX3Jhcl9nZW5lcmljLAorCS5zZXRfdm1kcSAgICAgICAgICAgICAgID0gJml4Z2JlX3NldF92bWRxXzgyNTk5LAorCS5jbGVhcl92bWRxICAgICAgICAgICAgID0gJml4Z2JlX2NsZWFyX3ZtZHFfODI1OTksCisJLmluaXRfcnhfYWRkcnMgICAgICAgICAgPSAmaXhnYmVfaW5pdF9yeF9hZGRyc19nZW5lcmljLAorCS51cGRhdGVfdWNfYWRkcl9saXN0ICAgID0gJml4Z2JlX3VwZGF0ZV91Y19hZGRyX2xpc3RfZ2VuZXJpYywKKwkudXBkYXRlX21jX2FkZHJfbGlzdCAgICA9ICZpeGdiZV91cGRhdGVfbWNfYWRkcl9saXN0X2dlbmVyaWMsCisJLmVuYWJsZV9tYyAgICAgICAgICAgICAgPSAmaXhnYmVfZW5hYmxlX21jX2dlbmVyaWMsCisJLmRpc2FibGVfbWMgICAgICAgICAgICAgPSAmaXhnYmVfZGlzYWJsZV9tY19nZW5lcmljLAorCS5jbGVhcl92ZnRhICAgICAgICAgICAgID0gJml4Z2JlX2NsZWFyX3ZmdGFfODI1OTksCisJLnNldF92ZnRhICAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0X3ZmdGFfODI1OTksCisJLnNldHVwX2ZjICAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfZmNfZ2VuZXJpYywKKwkuaW5pdF91dGFfdGFibGVzICAgICAgICA9ICZpeGdiZV9pbml0X3V0YV90YWJsZXNfODI1OTksCisJLnNldHVwX3NmcCAgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfc2ZwX21vZHVsZXNfODI1OTksCit9OworCitzdGF0aWMgc3RydWN0IGl4Z2JlX2VlcHJvbV9vcGVyYXRpb25zIGVlcHJvbV9vcHNfODI1OTkgPSB7CisJLmluaXRfcGFyYW1zICAgICAgICAgICAgPSAmaXhnYmVfaW5pdF9lZXByb21fcGFyYW1zX2dlbmVyaWMsCisJLnJlYWQgICAgICAgICAgICAgICAgICAgPSAmaXhnYmVfcmVhZF9lZXByb21fZ2VuZXJpYywKKwkud3JpdGUgICAgICAgICAgICAgICAgICA9ICZpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYywKKwkudmFsaWRhdGVfY2hlY2tzdW0gICAgICA9ICZpeGdiZV92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW1fZ2VuZXJpYywKKwkudXBkYXRlX2NoZWNrc3VtICAgICAgICA9ICZpeGdiZV91cGRhdGVfZWVwcm9tX2NoZWNrc3VtX2dlbmVyaWMsCit9OworCitzdGF0aWMgc3RydWN0IGl4Z2JlX3BoeV9vcGVyYXRpb25zIHBoeV9vcHNfODI1OTkgPSB7CisJLmlkZW50aWZ5ICAgICAgICAgICAgICAgPSAmaXhnYmVfaWRlbnRpZnlfcGh5XzgyNTk5LAorCS5pZGVudGlmeV9zZnAgICAgICAgICAgID0gJml4Z2JlX2lkZW50aWZ5X3NmcF9tb2R1bGVfZ2VuZXJpYywKKwkucmVzZXQgICAgICAgICAgICAgICAgICA9ICZpeGdiZV9yZXNldF9waHlfZ2VuZXJpYywKKwkucmVhZF9yZWcgICAgICAgICAgICAgICA9ICZpeGdiZV9yZWFkX3BoeV9yZWdfZ2VuZXJpYywKKwkud3JpdGVfcmVnICAgICAgICAgICAgICA9ICZpeGdiZV93cml0ZV9waHlfcmVnX2dlbmVyaWMsCisJLnNldHVwX2xpbmsgICAgICAgICAgICAgPSAmaXhnYmVfc2V0dXBfcGh5X2xpbmtfZ2VuZXJpYywKKwkuc2V0dXBfbGlua19zcGVlZCAgICAgICA9ICZpeGdiZV9zZXR1cF9waHlfbGlua19zcGVlZF9nZW5lcmljLAorCS5yZWFkX2kyY19ieXRlICAgICAgICAgID0gJml4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpYywKKwkud3JpdGVfaTJjX2J5dGUgICAgICAgICA9ICZpeGdiZV93cml0ZV9pMmNfYnl0ZV9nZW5lcmljLAorCS5yZWFkX2kyY19lZXByb20gICAgICAgID0gJml4Z2JlX3JlYWRfaTJjX2VlcHJvbV9nZW5lcmljLAorCS53cml0ZV9pMmNfZWVwcm9tICAgICAgID0gJml4Z2JlX3dyaXRlX2kyY19lZXByb21fZ2VuZXJpYywKK307CisKK3N0cnVjdCBpeGdiZV9pbmZvIGl4Z2JlXzgyNTk5X2luZm8gPSB7CisJLm1hYyAgICAgICAgICAgICAgICAgICAgPSBpeGdiZV9tYWNfODI1OTlFQiwKKwkuZ2V0X2ludmFyaWFudHMgICAgICAgICA9ICZpeGdiZV9nZXRfaW52YXJpYW50c184MjU5OSwKKwkubWFjX29wcyAgICAgICAgICAgICAgICA9ICZtYWNfb3BzXzgyNTk5LAorCS5lZXByb21fb3BzICAgICAgICAgICAgID0gJmVlcHJvbV9vcHNfODI1OTksCisJLnBoeV9vcHMgICAgICAgICAgICAgICAgPSAmcGh5X29wc184MjU5OSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCmluZGV4IGY2N2M2ODQuLjhjZmQzZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAorI2luY2x1ZGUgIml4Z2JlLmgiCiAjaW5jbHVkZSAiaXhnYmVfY29tbW9uLmgiCiAjaW5jbHVkZSAiaXhnYmVfcGh5LmgiCiAKQEAgLTgwLDkgKzgxLDYgQEAKIAkvKiBDbGVhciB0aGUgVkxBTiBmaWx0ZXIgdGFibGUgKi8KIAlody0+bWFjLm9wcy5jbGVhcl92ZnRhKGh3KTsKIAotCS8qIFNldCB1cCBsaW5rICovCi0JaHctPm1hYy5vcHMuc2V0dXBfbGluayhodyk7Ci0KIAkvKiBDbGVhciBzdGF0aXN0aWNzIHJlZ2lzdGVycyAqLwogCWh3LT5tYWMub3BzLmNsZWFyX2h3X2NudHJzKGh3KTsKIApAQCAtMjU0LDYgKzI1Miw4MSBAQAogfQogCiAvKioKKyAqICBpeGdiZV9nZXRfYnVzX2luZm9fZ2VuZXJpYyAtIEdlbmVyaWMgc2V0IFBDSSBidXMgaW5mbworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0cyB0aGUgUENJIGJ1cyBpbmZvIChzcGVlZCwgd2lkdGgsIHR5cGUpIHdpdGhpbiB0aGUgaXhnYmVfaHcgc3RydWN0dXJlCisgKiovCitzMzIgaXhnYmVfZ2V0X2J1c19pbmZvX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5iYWNrOworCXN0cnVjdCBpeGdiZV9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJdTE2IGxpbmtfc3RhdHVzOworCisJaHctPmJ1cy50eXBlID0gaXhnYmVfYnVzX3R5cGVfcGNpX2V4cHJlc3M7CisKKwkvKiBHZXQgdGhlIG5lZ290aWF0ZWQgbGluayB3aWR0aCBhbmQgc3BlZWQgZnJvbSBQQ0kgY29uZmlnIHNwYWNlICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgSVhHQkVfUENJX0xJTktfU1RBVFVTLAorCSAgICAgICAgICAgICAgICAgICAgICZsaW5rX3N0YXR1cyk7CisKKwlzd2l0Y2ggKGxpbmtfc3RhdHVzICYgSVhHQkVfUENJX0xJTktfV0lEVEgpIHsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1dJRFRIXzE6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfcGNpZV94MTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19XSURUSF8yOgorCQlody0+YnVzLndpZHRoID0gaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDI7CisJCWJyZWFrOworCWNhc2UgSVhHQkVfUENJX0xJTktfV0lEVEhfNDoKKwkJaHctPmJ1cy53aWR0aCA9IGl4Z2JlX2J1c193aWR0aF9wY2llX3g0OworCQlicmVhazsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1dJRFRIXzg6CisJCWh3LT5idXMud2lkdGggPSBpeGdiZV9idXNfd2lkdGhfcGNpZV94ODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaHctPmJ1cy53aWR0aCA9IGl4Z2JlX2J1c193aWR0aF91bmtub3duOworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGxpbmtfc3RhdHVzICYgSVhHQkVfUENJX0xJTktfU1BFRUQpIHsKKwljYXNlIElYR0JFX1BDSV9MSU5LX1NQRUVEXzI1MDA6CisJCWh3LT5idXMuc3BlZWQgPSBpeGdiZV9idXNfc3BlZWRfMjUwMDsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9QQ0lfTElOS19TUEVFRF81MDAwOgorCQlody0+YnVzLnNwZWVkID0gaXhnYmVfYnVzX3NwZWVkXzUwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWh3LT5idXMuc3BlZWQgPSBpeGdiZV9idXNfc3BlZWRfdW5rbm93bjsKKwkJYnJlYWs7CisJfQorCisJbWFjLT5vcHMuc2V0X2xhbl9pZChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUgLSBTZXQgTEFOIGlkIGZvciBQQ0llIG11bHRpcGxlIHBvcnQgZGV2aWNlcworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIERldGVybWluZXMgdGhlIExBTiBmdW5jdGlvbiBpZCBieSByZWFkaW5nIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzCisgKiAgYW5kIHN3YXBzIHRoZSBwb3J0IHZhbHVlIGlmIHJlcXVlc3RlZC4KKyAqKi8KK3ZvaWQgaXhnYmVfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfYnVzX2luZm8gKmJ1cyA9ICZody0+YnVzOworCXUzMiByZWc7CisKKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfU1RBVFVTKTsKKwlidXMtPmZ1bmMgPSAocmVnICYgSVhHQkVfU1RBVFVTX0xBTl9JRCkgPj4gSVhHQkVfU1RBVFVTX0xBTl9JRF9TSElGVDsKKwlidXMtPmxhbl9pZCA9IGJ1cy0+ZnVuYzsKKworCS8qIGNoZWNrIGZvciBhIHBvcnQgc3dhcCAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQUNUUFMpOworCWlmIChyZWcgJiBJWEdCRV9GQUNUUFNfTEZTKQorCQlidXMtPmZ1bmMgXj0gMHgxOworfQorCisvKioKICAqICBpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYyAtIEdlbmVyaWMgc3RvcCBUeC9SeCB1bml0cwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC0zOTMsNiArNDY2LDczIEBACiB9CiAKIC8qKgorICogIGl4Z2JlX3dyaXRlX2VlcHJvbV9nZW5lcmljIC0gV3JpdGVzIDE2IGJpdCB2YWx1ZSB0byBFRVBST00KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHdyaXR0ZW4gdG8KKyAqICBAZGF0YTogMTYgYml0IHdvcmQgdG8gYmUgd3JpdHRlbiB0byB0aGUgRUVQUk9NCisgKgorICogIElmIGl4Z2JlX2VlcHJvbV91cGRhdGVfY2hlY2tzdW0gaXMgbm90IGNhbGxlZCBhZnRlciB0aGlzIGZ1bmN0aW9uLCB0aGUKKyAqICBFRVBST00gd2lsbCBtb3N0IGxpa2VseSBjb250YWluIGFuIGludmFsaWQgY2hlY2tzdW0uCisgKiovCitzMzIgaXhnYmVfd3JpdGVfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IGRhdGEpCit7CisJczMyIHN0YXR1czsKKwl1OCB3cml0ZV9vcGNvZGUgPSBJWEdCRV9FRVBST01fV1JJVEVfT1BDT0RFX1NQSTsKKworCWh3LT5lZXByb20ub3BzLmluaXRfcGFyYW1zKGh3KTsKKworCWlmIChvZmZzZXQgPj0gaHctPmVlcHJvbS53b3JkX3NpemUpIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0VFUFJPTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUHJlcGFyZSB0aGUgRUVQUk9NIGZvciB3cml0aW5nICAqLworCXN0YXR1cyA9IGl4Z2JlX2FjcXVpcmVfZWVwcm9tKGh3KTsKKworCWlmIChzdGF0dXMgPT0gMCkgeworCQlpZiAoaXhnYmVfcmVhZHlfZWVwcm9tKGh3KSAhPSAwKSB7CisJCQlpeGdiZV9yZWxlYXNlX2VlcHJvbShodyk7CisJCQlzdGF0dXMgPSBJWEdCRV9FUlJfRUVQUk9NOworCQl9CisJfQorCisJaWYgKHN0YXR1cyA9PSAwKSB7CisJCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKworCQkvKiAgU2VuZCB0aGUgV1JJVEUgRU5BQkxFIGNvbW1hbmQgKDggYml0IG9wY29kZSApICAqLworCQlpeGdiZV9zaGlmdF9vdXRfZWVwcm9tX2JpdHMoaHcsIElYR0JFX0VFUFJPTV9XUkVOX09QQ09ERV9TUEksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9FRVBST01fT1BDT0RFX0JJVFMpOworCisJCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKworCQkvKgorCQkgKiBTb21lIFNQSSBlZXByb21zIHVzZSB0aGUgOHRoIGFkZHJlc3MgYml0IGVtYmVkZGVkIGluIHRoZQorCQkgKiBvcGNvZGUKKwkJICovCisJCWlmICgoaHctPmVlcHJvbS5hZGRyZXNzX2JpdHMgPT0gOCkgJiYgKG9mZnNldCA+PSAxMjgpKQorCQkJd3JpdGVfb3Bjb2RlIHw9IElYR0JFX0VFUFJPTV9BOF9PUENPREVfU1BJOworCisJCS8qIFNlbmQgdGhlIFdyaXRlIGNvbW1hbmQgKDgtYml0IG9wY29kZSArIGFkZHIpICovCisJCWl4Z2JlX3NoaWZ0X291dF9lZXByb21fYml0cyhodywgd3JpdGVfb3Bjb2RlLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfRUVQUk9NX09QQ09ERV9CSVRTKTsKKwkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCAodTE2KShvZmZzZXQqMiksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBody0+ZWVwcm9tLmFkZHJlc3NfYml0cyk7CisKKwkJLyogU2VuZCB0aGUgZGF0YSAqLworCQlkYXRhID0gKGRhdGEgPj4gOCkgfCAoZGF0YSA8PCA4KTsKKwkJaXhnYmVfc2hpZnRfb3V0X2VlcHJvbV9iaXRzKGh3LCBkYXRhLCAxNik7CisJCWl4Z2JlX3N0YW5kYnlfZWVwcm9tKGh3KTsKKworCQltc2xlZXAoaHctPmVlcHJvbS5zZW1hcGhvcmVfZGVsYXkpOworCQkvKiBEb25lIHdpdGggd3JpdGluZyAtIHJlbGVhc2UgdGhlIEVFUFJPTSAqLworCQlpeGdiZV9yZWxlYXNlX2VlcHJvbShodyk7CisJfQorCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCiAgKiAgaXhnYmVfcmVhZF9lZXByb21fYml0X2JhbmdfZ2VuZXJpYyAtIFJlYWQgRUVQUk9NIHdvcmQgdXNpbmcgYml0LWJhbmcKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiAgQG9mZnNldDogb2Zmc2V0IHdpdGhpbiB0aGUgRUVQUk9NIHRvIGJlIHJlYWQKQEAgLTUyMSw3ICs2NjEsNyBAQAogc3RhdGljIHMzMiBpeGdiZV9hY3F1aXJlX2VlcHJvbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXMzMiBzdGF0dXMgPSAwOwotCXUzMiBlZWM7CisJdTMyIGVlYyA9IDA7CiAJdTMyIGk7CiAKIAlpZiAoaXhnYmVfYWNxdWlyZV9zd2Z3X3N5bmMoaHcsIElYR0JFX0dTU1JfRUVQX1NNKSAhPSAwKQpAQCAtMTQ5MCw2ICsxNjMwLDMyNiBAQAogfQogCiAvKioKKyAqICBpeGdiZV9mY19lbmFibGUgLSBFbmFibGUgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBwYWNrZXRidWZfbnVtOiBwYWNrZXQgYnVmZmVyIG51bWJlciAoMC03KQorICoKKyAqICBFbmFibGUgZmxvdyBjb250cm9sIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBzZXR0aW5ncy4KKyAqKi8KK3MzMiBpeGdiZV9mY19lbmFibGUoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2tldGJ1Zl9udW0pCit7CisJczMyIHJldF92YWwgPSAwOworCXUzMiBtZmxjbl9yZWc7CisJdTMyIGZjY2ZnX3JlZzsKKwl1MzIgcmVnOworCisJbWZsY25fcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKKwltZmxjbl9yZWcgJj0gfihJWEdCRV9NRkxDTl9SRkNFIHwgSVhHQkVfTUZMQ05fUlBGQ0UpOworCisJZmNjZmdfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDQ0ZHKTsKKwlmY2NmZ19yZWcgJj0gfihJWEdCRV9GQ0NGR19URkNFXzgwMl8zWCB8IElYR0JFX0ZDQ0ZHX1RGQ0VfUFJJT1JJVFkpOworCisJLyoKKwkgKiBUaGUgcG9zc2libGUgdmFsdWVzIG9mIGZjLmN1cnJlbnRfbW9kZSBhcmU6CisJICogMDogRmxvdyBjb250cm9sIGlzIGNvbXBsZXRlbHkgZGlzYWJsZWQKKwkgKiAxOiBSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHJlY2VpdmUgcGF1c2UgZnJhbWVzLAorCSAqICAgIGJ1dCBub3Qgc2VuZCBwYXVzZSBmcmFtZXMpLgorCSAqIDI6IFR4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4gc2VuZCBwYXVzZSBmcmFtZXMgYnV0CisJICogICAgd2UgZG8gbm90IHN1cHBvcnQgcmVjZWl2aW5nIHBhdXNlIGZyYW1lcykuCisJICogMzogQm90aCBSeCBhbmQgVHggZmxvdyBjb250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgorCSAqIDQ6IFByaW9yaXR5IEZsb3cgQ29udHJvbCBpcyBlbmFibGVkLgorCSAqIG90aGVyOiBJbnZhbGlkLgorCSAqLworCXN3aXRjaCAoaHctPmZjLmN1cnJlbnRfbW9kZSkgeworCWNhc2UgaXhnYmVfZmNfbm9uZToKKwkJLyogRmxvdyBjb250cm9sIGNvbXBsZXRlbHkgZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuICovCisJCWJyZWFrOworCWNhc2UgaXhnYmVfZmNfcnhfcGF1c2U6CisJCS8qCisJCSAqIFJ4IEZsb3cgY29udHJvbCBpcyBlbmFibGVkIGFuZCBUeCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlzYWJsZWQgYnkgc29mdHdhcmUgb3ZlcnJpZGUuIFNpbmNlIHRoZXJlIHJlYWxseQorCQkgKiBpc24ndCBhIHdheSB0byBhZHZlcnRpc2UgdGhhdCB3ZSBhcmUgY2FwYWJsZSBvZiBSWAorCQkgKiBQYXVzZSBPTkxZLCB3ZSB3aWxsIGFkdmVydGlzZSB0aGF0IHdlIHN1cHBvcnQgYm90aAorCQkgKiBzeW1tZXRyaWMgYW5kIGFzeW1tZXRyaWMgUnggUEFVU0UuICBMYXRlciwgd2Ugd2lsbAorCQkgKiBkaXNhYmxlIHRoZSBhZGFwdGVyJ3MgYWJpbGl0eSB0byBzZW5kIFBBVVNFIGZyYW1lcy4KKwkJICovCisJCW1mbGNuX3JlZyB8PSBJWEdCRV9NRkxDTl9SRkNFOworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3R4X3BhdXNlOgorCQkvKgorCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4KKwkJICovCisJCWZjY2ZnX3JlZyB8PSBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWDsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY19mdWxsOgorCQkvKiBGbG93IGNvbnRyb2wgKGJvdGggUnggYW5kIFR4KSBpcyBlbmFibGVkIGJ5IFNXIG92ZXJyaWRlLiAqLworCQltZmxjbl9yZWcgfD0gSVhHQkVfTUZMQ05fUkZDRTsKKwkJZmNjZmdfcmVnIHw9IElYR0JFX0ZDQ0ZHX1RGQ0VfODAyXzNYOworCQlicmVhazsKKyNpZmRlZiBDT05GSUdfRENCCisJY2FzZSBpeGdiZV9mY19wZmM6CisJCWdvdG8gb3V0OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWh3X2RiZyhodywgIkZsb3cgY29udHJvbCBwYXJhbSBzZXQgaW5jb3JyZWN0bHlcbiIpOworCQlyZXRfdmFsID0gLUlYR0JFX0VSUl9DT05GSUc7CisJCWdvdG8gb3V0OworCQlicmVhazsKKwl9CisKKwkvKiBFbmFibGUgODAyLjN4IGJhc2VkIGZsb3cgY29udHJvbCBzZXR0aW5ncy4gKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01GTENOLCBtZmxjbl9yZWcpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNDRkcsIGZjY2ZnX3JlZyk7CisKKwkvKiBTZXQgdXAgYW5kIGVuYWJsZSBSeCBoaWdoL2xvdyB3YXRlciBtYXJrIHRocmVzaG9sZHMsIGVuYWJsZSBYT04uICovCisJaWYgKGh3LT5mYy5jdXJyZW50X21vZGUgJiBpeGdiZV9mY190eF9wYXVzZSkgeworCQlpZiAoaHctPmZjLnNlbmRfeG9uKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShwYWNrZXRidWZfbnVtKSwKKwkJCSAgICAgICAgICAgICAgICAoaHctPmZjLmxvd193YXRlciB8IElYR0JFX0ZDUlRMX1hPTkUpKTsKKwkJZWxzZQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUTF84MjU5OShwYWNrZXRidWZfbnVtKSwKKwkJCSAgICAgICAgICAgICAgICBody0+ZmMubG93X3dhdGVyKTsKKworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRIXzgyNTk5KHBhY2tldGJ1Zl9udW0pLAorCQkgICAgICAgICAgICAgICAgKGh3LT5mYy5oaWdoX3dhdGVyIHwgSVhHQkVfRkNSVEhfRkNFTikpOworCX0KKworCS8qIENvbmZpZ3VyZSBwYXVzZSB0aW1lICgyIFRDcyBwZXIgcmVnaXN0ZXIpICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZDVFRWKHBhY2tldGJ1Zl9udW0pKTsKKwlpZiAoKHBhY2tldGJ1Zl9udW0gJiAxKSA9PSAwKQorCQlyZWcgPSAocmVnICYgMHhGRkZGMDAwMCkgfCBody0+ZmMucGF1c2VfdGltZTsKKwllbHNlCisJCXJlZyA9IChyZWcgJiAweDAwMDBGRkZGKSB8IChody0+ZmMucGF1c2VfdGltZSA8PCAxNik7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1RUVihwYWNrZXRidWZfbnVtIC8gMiksIHJlZyk7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRWLCAoaHctPmZjLnBhdXNlX3RpbWUgPj4gMSkpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2ZjX2F1dG9uZWcgLSBDb25maWd1cmUgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBOZWdvdGlhdGVzIGZsb3cgY29udHJvbCBjYXBhYmlsaXRpZXMgd2l0aCBsaW5rIHBhcnRuZXIgdXNpbmcgYXV0b25lZyBhbmQKKyAqICBhcHBsaWVzIHRoZSByZXN1bHRzLgorICoqLworczMyIGl4Z2JlX2ZjX2F1dG9uZWcoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIGksIHJlZywgcGNzX2FuYWR2X3JlZywgcGNzX2xwYWJfcmVnOworCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHQU5BKTsKKworCS8qCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBmYy5jdXJyZW50X21vZGUgYXJlOgorCSAqIDA6ICBGbG93IGNvbnRyb2wgaXMgY29tcGxldGVseSBkaXNhYmxlZAorCSAqIDE6ICBSeCBmbG93IGNvbnRyb2wgaXMgZW5hYmxlZCAod2UgY2FuIHJlY2VpdmUgcGF1c2UgZnJhbWVzLAorCSAqICAgICBidXQgbm90IHNlbmQgcGF1c2UgZnJhbWVzKS4KKwkgKiAyOiAgVHggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNhbiBzZW5kIHBhdXNlIGZyYW1lcyBidXQKKwkgKiAgICAgd2UgZG8gbm90IHN1cHBvcnQgcmVjZWl2aW5nIHBhdXNlIGZyYW1lcykuCisJICogMzogIEJvdGggUnggYW5kIFR4IGZsb3cgY29udHJvbCAoc3ltbWV0cmljKSBhcmUgZW5hYmxlZC4KKwkgKiA0OiAgUHJpb3JpdHkgRmxvdyBDb250cm9sIGlzIGVuYWJsZWQuCisJICogb3RoZXI6IEludmFsaWQuCisJICovCisJc3dpdGNoIChody0+ZmMuY3VycmVudF9tb2RlKSB7CisJY2FzZSBpeGdiZV9mY19ub25lOgorCQkvKiBGbG93IGNvbnRyb2wgY29tcGxldGVseSBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4gKi8KKwkJcmVnICY9IH4oSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFIHwgSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY19yeF9wYXVzZToKKwkJLyoKKwkJICogUnggRmxvdyBjb250cm9sIGlzIGVuYWJsZWQgYW5kIFR4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4gU2luY2UgdGhlcmUgcmVhbGx5CisJCSAqIGlzbid0IGEgd2F5IHRvIGFkdmVydGlzZSB0aGF0IHdlIGFyZSBjYXBhYmxlIG9mIFJYCisJCSAqIFBhdXNlIE9OTFksIHdlIHdpbGwgYWR2ZXJ0aXNlIHRoYXQgd2Ugc3VwcG9ydCBib3RoCisJCSAqIHN5bW1ldHJpYyBhbmQgYXN5bW1ldHJpYyBSeCBQQVVTRS4gIExhdGVyLCB3ZSB3aWxsCisJCSAqIGRpc2FibGUgdGhlIGFkYXB0ZXIncyBhYmlsaXR5IHRvIHNlbmQgUEFVU0UgZnJhbWVzLgorCQkgKi8KKwkJcmVnIHw9IChJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UgfCBJWEdCRV9QQ1MxR0FOQV9BU01fUEFVU0UpOworCQlicmVhazsKKwljYXNlIGl4Z2JlX2ZjX3R4X3BhdXNlOgorCQkvKgorCQkgKiBUeCBGbG93IGNvbnRyb2wgaXMgZW5hYmxlZCwgYW5kIFJ4IEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCBieSBzb2Z0d2FyZSBvdmVycmlkZS4KKwkJICovCisJCXJlZyB8PSAoSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFKTsKKwkJcmVnICY9IH4oSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKTsKKwkJYnJlYWs7CisJY2FzZSBpeGdiZV9mY19mdWxsOgorCQkvKiBGbG93IGNvbnRyb2wgKGJvdGggUnggYW5kIFR4KSBpcyBlbmFibGVkIGJ5IFNXIG92ZXJyaWRlLiAqLworCQlyZWcgfD0gKElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSB8IElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSk7CisJCWJyZWFrOworI2lmZGVmIENPTkZJR19EQ0IKKwljYXNlIGl4Z2JlX2ZjX3BmYzoKKwkJZ290byBvdXQ7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJaHdfZGJnKGh3LCAiRmxvdyBjb250cm9sIHBhcmFtIHNldCBpbmNvcnJlY3RseVxuIik7CisJCXJldF92YWwgPSAtSVhHQkVfRVJSX0NPTkZJRzsKKwkJZ290byBvdXQ7CisJCWJyZWFrOworCX0KKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUENTMUdBTkEsIHJlZyk7CisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHTENUTCk7CisKKwkvKiBTZXQgUENTIHJlZ2lzdGVyIGZvciBhdXRvbmVnICovCisJLyogRW5hYmxlIGFuZCByZXN0YXJ0IGF1dG9uZWcgKi8KKwlyZWcgfD0gSVhHQkVfUENTMUdMQ1RMX0FOX0VOQUJMRSB8IElYR0JFX1BDUzFHTENUTF9BTl9SRVNUQVJUOworCisJLyogRGlzYWJsZSBBTiB0aW1lb3V0ICovCisJaWYgKGh3LT5mYy5zdHJpY3RfaWVlZSkKKwkJcmVnICY9IH5JWEdCRV9QQ1MxR0xDVExfQU5fMUdfVElNRU9VVF9FTjsKKworCWh3X2RiZyhodywgIkNvbmZpZ3VyaW5nIEF1dG9uZWc7IFBDU19MQ1RMID0gMHglMDhYXG4iLCByZWcpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUENTMUdMQ1RMLCByZWcpOworCisJLyogU2VlIGlmIGF1dG9uZWdvdGlhdGlvbiBoYXMgc3VjY2VlZGVkICovCisJaHctPm1hYy5hdXRvbmVnX3N1Y2NlZWRlZCA9IDA7CisJZm9yIChpID0gMDsgaSA8IEZJQkVSX0xJTktfVVBfTElNSVQ7IGkrKykgeworCQltc2xlZXAoMTApOworCQlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUENTMUdMU1RBKTsKKwkJaWYgKChyZWcgJiAoSVhHQkVfUENTMUdMU1RBX0xJTktfT0sgfAorCQkgICAgIElYR0JFX1BDUzFHTFNUQV9BTl9DT01QTEVURSkpID09CisJCSAgICAoSVhHQkVfUENTMUdMU1RBX0xJTktfT0sgfAorCQkgICAgIElYR0JFX1BDUzFHTFNUQV9BTl9DT01QTEVURSkpIHsKKwkJCWlmICghKHJlZyAmIElYR0JFX1BDUzFHTFNUQV9BTl9USU1FRF9PVVQpKQorCQkJCWh3LT5tYWMuYXV0b25lZ19zdWNjZWVkZWQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWh3LT5tYWMuYXV0b25lZ19zdWNjZWVkZWQpIHsKKwkJLyogQXV0b25lZyBmYWlsZWQgdG8gYWNoaWV2ZSBhIGxpbmssIHNvIHdlIHR1cm4gZmMgb2ZmICovCisJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19ub25lOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBOT05FLlxuIik7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogUmVhZCB0aGUgQU4gYWR2ZXJ0aXNlbWVudCBhbmQgTFAgYWJpbGl0eSByZWdpc3RlcnMgYW5kIHJlc29sdmUKKwkgKiBsb2NhbCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgYWNjb3JkaW5nbHkKKwkgKi8KKwlwY3NfYW5hZHZfcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1BDUzFHQU5BKTsKKwlwY3NfbHBhYl9yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUENTMUdBTkxQKTsKKwlpZiAoKHBjc19hbmFkdl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpICYmCisJCShwY3NfbHBhYl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpKSB7CisJCS8qCisJCSAqIE5vdyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSB1c2VyIHNlbGVjdGVkIFJ4IE9OTFkKKwkJICogb2YgcGF1c2UgZnJhbWVzLiAgSW4gdGhpcyBjYXNlLCB3ZSBoYWQgdG8gYWR2ZXJ0aXNlCisJCSAqIEZVTEwgZmxvdyBjb250cm9sIGJlY2F1c2Ugd2UgY291bGQgbm90IGFkdmVydGlzZSBSWAorCQkgKiBPTkxZLiBIZW5jZSwgd2UgbXVzdCBub3cgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8KKwkJICogdHVybiBPRkYgdGhlIFRSQU5TTUlTU0lPTiBvZiBQQVVTRSBmcmFtZXMuCisJCSAqLworCQlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX2Z1bGwpIHsKKwkJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19mdWxsOworCQkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gRlVMTC5cbiIpOworCQl9IGVsc2UgeworCQkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOworCQkJaHdfZGJnKGh3LCAiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKKwkJfQorCX0gZWxzZSBpZiAoIShwY3NfYW5hZHZfcmVnICYgSVhHQkVfUENTMUdBTkFfU1lNX1BBVVNFKSAmJgorCQkgICAocGNzX2FuYWR2X3JlZyAmIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSkgJiYKKwkJICAgKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSkgJiYKKwkJICAgKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSkpIHsKKwkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGl4Z2JlX2ZjX3R4X3BhdXNlOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBUWCBQQVVTRSBmcmFtZXMgb25seS5cbiIpOworCX0gZWxzZSBpZiAoKHBjc19hbmFkdl9yZWcgJiBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UpICYmCisJCSAgIChwY3NfYW5hZHZfcmVnICYgSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFKSAmJgorCQkgICAhKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX1NZTV9QQVVTRSkgJiYKKwkJICAgKHBjc19scGFiX3JlZyAmIElYR0JFX1BDUzFHQU5BX0FTTV9QQVVTRSkpIHsKKwkJaHctPmZjLmN1cnJlbnRfbW9kZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBSWCBQQVVTRSBmcmFtZXMgb25seS5cbiIpOworCX0gZWxzZSB7CisJCWh3LT5mYy5jdXJyZW50X21vZGUgPSBpeGdiZV9mY19ub25lOworCQlod19kYmcoaHcsICJGbG93IENvbnRyb2wgPSBOT05FLlxuIik7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldHVwX2ZjX2dlbmVyaWMgLSBTZXQgdXAgZmxvdyBjb250cm9sCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBTZXRzIHVwIGZsb3cgY29udHJvbC4KKyAqKi8KK3MzMiBpeGdiZV9zZXR1cF9mY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKQoreworCXMzMiByZXRfdmFsID0gMDsKKwlpeGdiZV9saW5rX3NwZWVkIHNwZWVkOworCWJvb2wgbGlua191cDsKKworI2lmZGVmIENPTkZJR19EQ0IKKwlpZiAoaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX3BmYykgeworCQlody0+ZmMuY3VycmVudF9tb2RlID0gaHctPmZjLnJlcXVlc3RlZF9tb2RlOworCQlnb3RvIG91dDsKKwl9CisKKyNlbmRpZgorCS8qIFZhbGlkYXRlIHRoZSBwYWNrZXRidWYgY29uZmlndXJhdGlvbiAqLworCWlmIChwYWNrZXRidWZfbnVtIDwgMCB8fCBwYWNrZXRidWZfbnVtID4gNykgeworCQlod19kYmcoaHcsICJJbnZhbGlkIHBhY2tldCBidWZmZXIgbnVtYmVyIFslZF0sIGV4cGVjdGVkIHJhbmdlICIKKwkJICAgICAgICJpcyAwLTdcbiIsIHBhY2tldGJ1Zl9udW0pOworCQlyZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGUgd2F0ZXIgbWFyayBjb25maWd1cmF0aW9uLiAgWmVybyB3YXRlciBtYXJrcyBhcmUgaW52YWxpZAorCSAqIGJlY2F1c2UgaXQgY2F1c2VzIHRoZSBjb250cm9sbGVyIHRvIGp1c3QgYmxhc3Qgb3V0IGZjIHBhY2tldHMuCisJICovCisJaWYgKCFody0+ZmMubG93X3dhdGVyIHx8ICFody0+ZmMuaGlnaF93YXRlciB8fCAhaHctPmZjLnBhdXNlX3RpbWUpIHsKKwkJaHdfZGJnKGh3LCAiSW52YWxpZCB3YXRlciBtYXJrIGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXRfdmFsID0gSVhHQkVfRVJSX0lOVkFMSURfTElOS19TRVRUSU5HUzsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBWYWxpZGF0ZSB0aGUgcmVxdWVzdGVkIG1vZGUuICBTdHJpY3QgSUVFRSBtb2RlIGRvZXMgbm90IGFsbG93CisJICogaXhnYmVfZmNfcnhfcGF1c2UgYmVjYXVzZSBpdCB3aWxsIGNhdXNlIHRlc3RpbmcgYW5vbWFsaWVzLgorCSAqLworCWlmIChody0+ZmMuc3RyaWN0X2llZWUgJiYgaHctPmZjLnJlcXVlc3RlZF9tb2RlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CisJCWh3X2RiZyhodywgIml4Z2JlX2ZjX3J4X3BhdXNlIG5vdCB2YWxpZCBpbiBzdHJpY3QgIgorCQkgICAgICAgIklFRUUgbW9kZVxuIik7CisJCXJldF92YWwgPSBJWEdCRV9FUlJfSU5WQUxJRF9MSU5LX1NFVFRJTkdTOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIDEwZ2lnIHBhcnRzIGRvIG5vdCBoYXZlIGEgd29yZCBpbiB0aGUgRUVQUk9NIHRvIGRldGVybWluZSB0aGUKKwkgKiBkZWZhdWx0IGZsb3cgY29udHJvbCBzZXR0aW5nLCBzbyB3ZSBleHBsaWNpdGx5IHNldCBpdCB0byBmdWxsLgorCSAqLworCWlmIChody0+ZmMucmVxdWVzdGVkX21vZGUgPT0gaXhnYmVfZmNfZGVmYXVsdCkKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfZnVsbDsKKworCS8qCisJICogU2F2ZSBvZmYgdGhlIHJlcXVlc3RlZCBmbG93IGNvbnRyb2wgbW9kZSBmb3IgdXNlIGxhdGVyLiAgRGVwZW5kaW5nCisJICogb24gdGhlIGxpbmsgcGFydG5lcidzIGNhcGFiaWxpdGllcywgd2UgbWF5IG9yIG1heSBub3QgdXNlIHRoaXMgbW9kZS4KKwkgKi8KKwlody0+ZmMuY3VycmVudF9tb2RlID0gaHctPmZjLnJlcXVlc3RlZF9tb2RlOworCisJLyogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIGF1dG9uZWcgb3Igbm90LiAqLworCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZzcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKwlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyICYmIChzcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMKSkKKwkJcmV0X3ZhbCA9IGl4Z2JlX2ZjX2F1dG9uZWcoaHcpOworCisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGl4Z2JlX2ZjX2VuYWJsZShodywgcGFja2V0YnVmX251bSk7CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCiAgKiAgaXhnYmVfZGlzYWJsZV9wY2llX21hc3RlciAtIERpc2FibGUgUENJLWV4cHJlc3MgbWFzdGVyIGFjY2VzcwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCkBAIC0xNTk3LDMgKzIwNTcsMTYgQEAKIAlpeGdiZV9yZWxlYXNlX2VlcHJvbV9zZW1hcGhvcmUoaHcpOwogfQogCisvKioKKyAqICBpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMgLSBFbmFibGUgdGhlIFJ4IERNQSB1bml0CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEByZWd2YWw6IHJlZ2lzdGVyIHZhbHVlIHRvIHdyaXRlIHRvIFJYQ1RSTAorICoKKyAqICBFbmFibGVzIHRoZSBSeCBETUEgdW5pdAorICoqLworczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVndmFsKQoreworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByZWd2YWwpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCmluZGV4IDE5MmY4ZDAuLjdlOTRkNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzcsMTIgKzM3LDE0IEBACiBzMzIgaXhnYmVfcmVhZF9wYmFfbnVtX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICpwYmFfbnVtKTsKIHMzMiBpeGdiZV9nZXRfbWFjX2FkZHJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqbWFjX2FkZHIpOwogczMyIGl4Z2JlX2dldF9idXNfaW5mb19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwordm9pZCBpeGdiZV9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9zdG9wX2FkYXB0ZXJfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIAogczMyIGl4Z2JlX2xlZF9vbl9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCk7CiBzMzIgaXhnYmVfbGVkX29mZl9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBpbmRleCk7CiAKIHMzMiBpeGdiZV9pbml0X2VlcHJvbV9wYXJhbXNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV93cml0ZV9lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgZGF0YSk7CiBzMzIgaXhnYmVfcmVhZF9lZXByb21fZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpOwogczMyIGl4Z2JlX3JlYWRfZWVwcm9tX2JpdF9iYW5nX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YSk7CkBAIC02MSw2ICs2MywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgYWRkcl9jb3VudCwgaXhnYmVfbWNfYWRkcl9pdHIgZnVuYyk7CiBzMzIgaXhnYmVfZW5hYmxlX21jX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodyk7CiBzMzIgaXhnYmVfZGlzYWJsZV9tY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOworczMyIGl4Z2JlX2VuYWJsZV9yeF9kbWFfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVndmFsKTsKK3MzMiBpeGdiZV9zZXR1cF9mY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHMzMiBwYWNrZXRidWZfbnVtKTsKK3MzMiBpeGdiZV9mY19lbmFibGUoc3RydWN0IGl4Z2JlX2h3ICpodywgczMyIHBhY2t0ZXRidWZfbnVtKTsKK3MzMiBpeGdiZV9mY19hdXRvbmVnKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogCiBzMzIgaXhnYmVfdmFsaWRhdGVfbWFjX2FkZHIodTggKm1hY19hZGRyKTsKIHMzMiBpeGdiZV9hY3F1aXJlX3N3Zndfc3luYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWFzayk7CkBAIC03Miw2ICs3OCwxMyBAQAogCiAjZGVmaW5lIElYR0JFX1dSSVRFX1JFRyhhLCByZWcsIHZhbHVlKSB3cml0ZWwoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIChyZWcpKSkKIAorI2lmbmRlZiB3cml0ZXEKKyNkZWZpbmUgd3JpdGVxKHZhbCwgYWRkcikgd3JpdGVsKCh1MzIpICh2YWwpLCBhZGRyKTsgXAorICAgIHdyaXRlbCgodTMyKSAodmFsID4+IDMyKSwgKGFkZHIgKyA0KSk7CisjZW5kaWYKKworI2RlZmluZSBJWEdCRV9XUklURV9SRUc2NChhLCByZWcsIHZhbHVlKSB3cml0ZXEoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIChyZWcpKSkKKwogI2RlZmluZSBJWEdCRV9SRUFEX1JFRyhhLCByZWcpIHJlYWRsKChhKS0+aHdfYWRkciArIChyZWcpKQogCiAjZGVmaW5lIElYR0JFX1dSSVRFX1JFR19BUlJBWShhLCByZWcsIG9mZnNldCwgdmFsdWUpIChcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCmluZGV4IGUyZTI4YWMuLmExNTYyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYi5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKICNpbmNsdWRlICJpeGdiZV9kY2IuaCIKICNpbmNsdWRlICJpeGdiZV9kY2JfODI1OTguaCIKKyNpbmNsdWRlICJpeGdiZV9kY2JfODI1OTkuaCIKIAogLyoqCiAgKiBpeGdiZV9kY2JfY29uZmlnIC0gU3RydWN0IGNvbnRhaW5pbmcgRENCIHNldHRpbmdzLgpAQCAtMjE1LDYgKzIxNiw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2dldF90Y19zdGF0c184MjU5OChodywgc3RhdHMsIHRjX2NvdW50KTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9nZXRfdGNfc3RhdHNfODI1OTkoaHcsIHN0YXRzLCB0Y19jb3VudCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjMyLDYgKzIzNSw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2dldF9wZmNfc3RhdHNfODI1OTgoaHcsIHN0YXRzLCB0Y19jb3VudCk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OShodywgc3RhdHMsIHRjX2NvdW50KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNDgsNiArMjUzLDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3J4X2FyYml0ZXJfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNjQsNiArMjcxLDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OChodywgZGNiX2NvbmZpZyk7CisJZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjgwLDYgKzI4OSw4IEBACiAJczMyIHJldCA9IDA7CiAJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKIAkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI5Niw2ICszMDcsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk4KGh3LCBkY2JfY29uZmlnKTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMTEsNiArMzI0LDggQEAKIAlzMzIgcmV0ID0gMDsKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlyZXQgPSBpeGdiZV9kY2JfY29uZmlnX3RjX3N0YXRzXzgyNTk4KGh3KTsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXJldCA9IGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoaHcpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMyNyw2ICszNDIsOCBAQAogCXMzMiByZXQgPSAwOwogCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCiAJCXJldCA9IGl4Z2JlX2RjYl9od19jb25maWdfODI1OTgoaHcsIGRjYl9jb25maWcpOworCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0ID0gaXhnYmVfZGNiX2h3X2NvbmZpZ184MjU5OShodywgZGNiX2NvbmZpZyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaAppbmRleCA3NWY2ZWZlLi42NGE5ZmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2IuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTc1LDYgKzc1LDI2IEBACiAJcHJpb19saW5rCiB9OwogCisvKiBEQ0IgY2FwYWJpbGl0eSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBJWEdCRV9EQ0JfUEdfU1VQUE9SVCAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9EQ0JfUEZDX1NVUFBPUlQgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJWEdCRV9EQ0JfQkNOX1NVUFBPUlQgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJWEdCRV9EQ0JfVVAyVENfU1VQUE9SVCAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJWEdCRV9EQ0JfR1NQX1NVUFBPUlQgICAgICAgMHgwMDAwMDAxMAorCisjZGVmaW5lIElYR0JFX0RDQl84X1RDX1NVUFBPUlQgICAgICAweDgwCisKK3N0cnVjdCBkY2Jfc3VwcG9ydCB7CisJLyogRENCIGNhcGFiaWxpdGllcyAqLworCXUzMiBjYXBhYmlsaXRpZXM7CisKKwkvKiBFYWNoIGJpdCByZXByZXNlbnRzIGEgbnVtYmVyIG9mIFRDcyBjb25maWd1cmFibGUgaW4gdGhlIGh3LgorCSAqIElmIDggdHJhZmZpYyBjbGFzc2VzIGNhbiBiZSBjb25maWd1cmVkLCB0aGUgdmFsdWUgaXMgMHg4MC4KKwkgKi8KKwl1OCAgdHJhZmZpY19jbGFzc2VzOworCXU4ICBwZmNfdHJhZmZpY19jbGFzc2VzOworfTsKKwogLyogVHJhZmZpYyBjbGFzcyBiYW5kd2lkdGggYWxsb2NhdGlvbiBwZXIgZGlyZWN0aW9uICovCiBzdHJ1Y3QgdGNfYndfYWxsb2MgewogCXU4IGJ3Z19pZDsJCSAgLyogQmFuZHdpZHRoIEdyb3VwIChCV0cpIElEICovCkBAIC0xMDgsMzggKzEyOCwxOCBAQAogCXBiYV84MF80OCAgICAgIC8qIFBCQVswLTNdIGVhY2ggdXNlIDgwS0IsIFBCQVs0LTddIGVhY2ggdXNlIDQ4S0IgKi8KIH07CiAKLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBtYW55IHZhbHVlcyBlbmNvZGVkIGFzIGZpeGVkLXBvaW50Ci0gKiBudW1iZXJzLCBtZWFuaW5nIHRoYXQgc29tZSBvZiBiaXRzIGFyZSBkZWRpY2F0ZWQgdG8gdGhlCi0gKiBtYWduaXR1ZGUgYW5kIG90aGVycyB0byB0aGUgZnJhY3Rpb24gcGFydC4gSW4gdGhlIGNvbW1lbnRzCi0gKiB0aGlzIGlzIHNob3duIGFzIGY9biwgd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uIGJpdHMuCi0gKiBUaGVzZSBmcmFjdGlvbiBiaXRzIGFyZSBhbHdheXMgdGhlIGxvdy1vcmRlciBiaXRzLiBUaGUgc2l6ZQotICogb2YgdGhlIG1hZ25pdHVkZSBpcyBub3Qgc3BlY2lmaWVkLgotICovCi1zdHJ1Y3QgYmNuX2NvbmZpZyB7Ci0JdTMyIHJwX2FkbWluX21vZGVbTUFYX1RSQUZGSUNfQ0xBU1NdOyAvKiBCQ04gZW5hYmxlZCwgcGVyIFRDICovCi0JdTMyIGJjbmFfb3B0aW9uWzJdOyAvKiBCQ05BIFBvcnQgKyBNQUMgQWRkciAqLwotCXUzMiBycF93OyAgICAgICAgLyogRGVyaXZhdGl2ZSBXZWlnaHQsIGY9MyAqLwotCXUzMiBycF9naTsgICAgICAgLyogSW5jcmVhc2UgR2FpbiwgZj0xMiAqLwotCXUzMiBycF9nZDsgICAgICAgLyogRGVjcmVhc2UgR2FpbiwgZj0xMiAqLwotCXUzMiBycF9ydTsgICAgICAgLyogUmF0ZSBVbml0ICovCi0JdTMyIHJwX2FscGhhOyAgICAvKiBNYXggRGVjcmVhc2UgRmFjdG9yLCBmPTEyICovCi0JdTMyIHJwX2JldGE7ICAgICAvKiBNYXggSW5jcmVhc2UgRmFjdG9yLCBmPTEyICovCi0JdTMyIHJwX3JpOyAgICAgICAvKiBJbml0aWFsIFJhdGUgKi8KLQl1MzIgcnBfdGQ7ICAgICAgIC8qIERyaWZ0IEludGVydmFsIFRpbWVyICovCi0JdTMyIHJwX3JkOyAgICAgICAvKiBEcmlmdCBJbmNyZWFzZSAqLwotCXUzMiBycF90bWF4OyAgICAgLyogU2V2ZXJlIENvbmdlc3Rpb24gQmFja29mZiBUaW1lciBSYW5nZSAqLwotCXUzMiBycF9ybWluOyAgICAgLyogU2V2ZXJlIENvbmdlc3Rpb24gUmVzdGFydCBSYXRlICovCi0JdTMyIHJwX3dydHQ7ICAgICAvKiBSVFQgTW92aW5nIEF2ZXJhZ2UgV2VpZ2h0ICovCitzdHJ1Y3QgZGNiX251bV90Y3MgeworCXU4IHBnX3RjczsKKwl1OCBwZmNfdGNzOwogfTsKIAogc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgewotCXN0cnVjdCBiY25fY29uZmlnIGJjbjsKLQorCXN0cnVjdCBkY2Jfc3VwcG9ydCBzdXBwb3J0OworCXN0cnVjdCBkY2JfbnVtX3RjcyBudW1fdGNzOwogCXN0cnVjdCB0Y19jb25maWd1cmF0aW9uIHRjX2NvbmZpZ1tNQVhfVFJBRkZJQ19DTEFTU107CiAJdTggICAgIGJ3X3BlcmNlbnRhZ2VbMl1bTUFYX0JXX0dST1VQXTsgLyogT25lIGVhY2ggZm9yIFR4L1J4ICovCi0KLQlib29sICByb3VuZF9yb2Jpbl9lbmFibGU7CisJYm9vbCAgIHBmY19tb2RlX2VuYWJsZTsKKwlib29sICAgcm91bmRfcm9iaW5fZW5hYmxlOwogCiAJZW51bSBkY2JfcnhfcGJhX2NmZyByeF9wYmFfY2ZnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCmluZGV4IDJjMDQ2YjAuLjYyMjA2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMjk4LDcgKzI5OCw2IEBACiAJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwogCXJlZyAmPSB+SVhHQkVfUk1DU19URkNFXzgwMl8zWDsKIAkvKiBjb3JyZWN0IHRoZSByZXBvcnRpbmcgb2Ygb3VyIGZsb3cgY29udHJvbCBzdGF0dXMgKi8KLQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX25vbmU7CiAJcmVnIHw9IElYR0JFX1JNQ1NfVEZDRV9QUklPUklUWTsKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JNQ1MsIHJlZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OC5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmgKaW5kZXggMWU2YTMxMy4uZWJiZTUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk4LmgKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl84MjU5OS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MGI2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuYwpAQCAtMCwwICsxLDQ2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIml4Z2JlLmgiCisjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgorI2luY2x1ZGUgIml4Z2JlX2RjYi5oIgorI2luY2x1ZGUgIml4Z2JlX2RjYl84MjU5OS5oIgorCisvKioKKyAqIGl4Z2JlX2RjYl9nZXRfdGNfc3RhdHNfODI1OTkgLSBSZXR1cm5zIHN0YXR1cyBmb3IgZWFjaCB0cmFmZmljIGNsYXNzCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAc3RhdHM6IHBvaW50ZXIgdG8gc3RhdGlzdGljcyBzdHJ1Y3R1cmUKKyAqIEB0Y19jb3VudDogIE51bWJlciBvZiBlbGVtZW50cyBpbiBid2dfYXJyYXkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGF0dXMgZGF0YSBmb3IgZWFjaCBvZiB0aGUgVHJhZmZpYyBDbGFzc2VzIGluIHVzZS4KKyAqLworczMyIGl4Z2JlX2RjYl9nZXRfdGNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9od19zdGF0cyAqc3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCB0Y19jb3VudCkKK3sKKwlpbnQgdGM7CisKKwlpZiAodGNfY291bnQgPiBNQVhfVFJBRkZJQ19DTEFTUykKKwkJcmV0dXJuIERDQl9FUlJfUEFSQU07CisJLyogU3RhdGlzdGljcyBwZXJ0YWluaW5nIHRvIGVhY2ggdHJhZmZpYyBjbGFzcyAqLworCWZvciAodGMgPSAwOyB0YyA8IHRjX2NvdW50OyB0YysrKSB7CisJCS8qIFRyYW5zbWl0dGVkIFBhY2tldHMgKi8KKwkJc3RhdHMtPnFwdGNbdGNdICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFRDKHRjKSk7CisJCS8qIFRyYW5zbWl0dGVkIEJ5dGVzICovCisJCXN0YXRzLT5xYnRjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUUJUQyh0YykpOworCQkvKiBSZWNlaXZlZCBQYWNrZXRzICovCisJCXN0YXRzLT5xcHJjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSQyh0YykpOworCQkvKiBSZWNlaXZlZCBCeXRlcyAqLworCQlzdGF0cy0+cWJyY1t0Y10gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FCUkModGMpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OSAtIFJldHVybiBDQkZDIHN0YXR1cyBkYXRhCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAc3RhdHM6IHBvaW50ZXIgdG8gc3RhdGlzdGljcyBzdHJ1Y3R1cmUKKyAqIEB0Y19jb3VudDogIE51bWJlciBvZiBlbGVtZW50cyBpbiBid2dfYXJyYXkuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBDQkZDIHN0YXR1cyBkYXRhIGZvciBlYWNoIG9mIHRoZSBUcmFmZmljIENsYXNzZXMuCisgKi8KK3MzMiBpeGdiZV9kY2JfZ2V0X3BmY19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9od19zdGF0cyAqc3RhdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpCit7CisJaW50IHRjOworCisJaWYgKHRjX2NvdW50ID4gTUFYX1RSQUZGSUNfQ0xBU1MpCisJCXJldHVybiBEQ0JfRVJSX1BBUkFNOworCWZvciAodGMgPSAwOyB0YyA8IHRjX2NvdW50OyB0YysrKSB7CisJCS8qIFByaW9yaXR5IFhPRkYgVHJhbnNtaXR0ZWQgKi8KKwkJc3RhdHMtPnB4b2ZmdHhjW3RjXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUFhPRkZUWEModGMpKTsKKwkJLyogUHJpb3JpdHkgWE9GRiBSZWNlaXZlZCAqLworCQlzdGF0cy0+cHhvZmZyeGNbdGNdICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QWE9GRlJYQ05UKHRjKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ19wYWNrZXRfYnVmZmVyc184MjU5OSAtIENvbmZpZ3VyZSBEQ0IgcGFja2V0IGJ1ZmZlcnMKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBkY2JfY29uZmlnOiBwb2ludGVyIHRvIGl4Z2JlX2RjYl9jb25maWcgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHBhY2tldCBidWZmZXJzIGZvciBEQ0IgbW9kZS4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcGFja2V0X2J1ZmZlcnNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MzIgdmFsdWUgPSBJWEdCRV9SWFBCU0laRV82NEtCOworCXU4ICBpID0gMDsKKworCS8qIFNldHVwIFJ4IHBhY2tldCBidWZmZXIgc2l6ZXMgKi8KKwlzd2l0Y2ggKGRjYl9jb25maWctPnJ4X3BiYV9jZmcpIHsKKwljYXNlIHBiYV84MF80ODoKKwkJLyogU2V0dXAgdGhlIGZpcnN0IGZvdXIgYXQgODBLQiAqLworCQl2YWx1ZSA9IElYR0JFX1JYUEJTSVpFXzgwS0I7CisJCWZvciAoOyBpIDwgNDsgaSsrKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWFBCU0laRShpKSwgdmFsdWUpOworCQkvKiBTZXR1cCB0aGUgbGFzdCBmb3VyIGF0IDQ4S0IuLi5kb24ndCByZS1pbml0IGkgKi8KKwkJdmFsdWUgPSBJWEdCRV9SWFBCU0laRV80OEtCOworCQkvKiBGYWxsIFRocm91Z2ggKi8KKwljYXNlIHBiYV9lcXVhbDoKKwlkZWZhdWx0OgorCQlmb3IgKDsgaSA8IElYR0JFX01BWF9QQUNLRVRfQlVGRkVSUzsgaSsrKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWFBCU0laRShpKSwgdmFsdWUpOworCisJCS8qIFNldHVwIFR4IHBhY2tldCBidWZmZXIgc2l6ZXMgKi8KKwkJZm9yIChpID0gMDsgaSA8IElYR0JFX01BWF9QQUNLRVRfQlVGRkVSUzsgaSsrKSB7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYUEJTSVpFKGkpLAorCQkJICAgICAgICAgICAgICAgIElYR0JFX1RYUEJTSVpFXzIwS0IpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UWFBCVEhSRVNIKGkpLAorCQkJICAgICAgICAgICAgICAgIElYR0JFX1RYUEJUSFJFU0hfRENCKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnX3J4X2FyYml0ZXJfODI1OTkgLSBDb25maWcgUnggRGF0YSBhcmJpdGVyCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBSeCBQYWNrZXQgQXJiaXRlciBhbmQgY3JlZGl0cyBmb3IgZWFjaCB0cmFmZmljIGNsYXNzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCXN0cnVjdCB0Y19id19hbGxvYyAgICAqcDsKKwl1MzIgICAgcmVnICAgICAgICAgICA9IDA7CisJdTMyICAgIGNyZWRpdF9yZWZpbGwgPSAwOworCXUzMiAgICBjcmVkaXRfbWF4ICAgID0gMDsKKwl1OCAgICAgaSAgICAgICAgICAgICA9IDA7CisKKwkvKiBEaXNhYmxlIHRoZSBhcmJpdGVyIGJlZm9yZSBjaGFuZ2luZyBwYXJhbWV0ZXJzICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJQQ1MsIElYR0JFX1JUUlBDU19BUkJESVMpOworCisJLyogTWFwIGFsbCB0cmFmZmljIGNsYXNzZXMgdG8gdGhlaXIgVVAsIDEgdG8gMSAqLworCXJlZyA9IDA7CisJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspCisJCXJlZyB8PSAoaSA8PCAoaSAqIElYR0JFX1JUUlVQMlRDX1VQX1NISUZUKSk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJVUDJUQywgcmVnKTsKKworCS8qIENvbmZpZ3VyZSB0cmFmZmljIGNsYXNzIGNyZWRpdHMgYW5kIHByaW9yaXR5ICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspIHsKKwkJcCA9ICZkY2JfY29uZmlnLT50Y19jb25maWdbaV0ucGF0aFtEQ0JfUlhfQ09ORklHXTsKKworCQljcmVkaXRfcmVmaWxsID0gcC0+ZGF0YV9jcmVkaXRzX3JlZmlsbDsKKwkJY3JlZGl0X21heCAgICA9IHAtPmRhdGFfY3JlZGl0c19tYXg7CisJCXJlZyA9IGNyZWRpdF9yZWZpbGwgfCAoY3JlZGl0X21heCA8PCBJWEdCRV9SVFJQVDRDX01DTF9TSElGVCk7CisKKwkJcmVnIHw9ICh1MzIpKHAtPmJ3Z19pZCkgPDwgSVhHQkVfUlRSUFQ0Q19CV0dfU0hJRlQ7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2xpbmspCisJCQlyZWcgfD0gSVhHQkVfUlRSUFQ0Q19MU1A7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJQVDRDKGkpLCByZWcpOworCX0KKworCS8qCisJICogQ29uZmlndXJlIFJ4IHBhY2tldCBwbGFuZSAocmVjeWNsZSBtb2RlOyBXU1ApIGFuZAorCSAqIGVuYWJsZSBhcmJpdGVyCisJICovCisJcmVnID0gSVhHQkVfUlRSUENTX1JSTSB8IElYR0JFX1JUUlBDU19SQUM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFJQQ1MsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnX3R4X2Rlc2NfYXJiaXRlcl84MjU5OSAtIENvbmZpZyBUeCBEZXNjLiBhcmJpdGVyCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBUeCBEZXNjcmlwdG9yIEFyYml0ZXIgYW5kIGNyZWRpdHMgZm9yIGVhY2ggdHJhZmZpYyBjbGFzcy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdHhfZGVzY19hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpCit7CisJc3RydWN0IHRjX2J3X2FsbG9jICpwOworCXUzMiAgICByZWcsIG1heF9jcmVkaXRzOworCXU4ICAgICBpOworCisJLyogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycyAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURENTLCBJWEdCRV9SVFREQ1NfQVJCRElTKTsKKworCS8qIENsZWFyIHRoZSBwZXItVHggcXVldWUgY3JlZGl0czsgd2UgdXNlIHBlci1UQyBpbnN0ZWFkICovCisJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURFFTRUwsIGkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERUMUMsIDApOworCX0KKworCS8qIENvbmZpZ3VyZSB0cmFmZmljIGNsYXNzIGNyZWRpdHMgYW5kIHByaW9yaXR5ICovCisJZm9yIChpID0gMDsgaSA8IE1BWF9UUkFGRklDX0NMQVNTOyBpKyspIHsKKwkJcCA9ICZkY2JfY29uZmlnLT50Y19jb25maWdbaV0ucGF0aFtEQ0JfVFhfQ09ORklHXTsKKwkJbWF4X2NyZWRpdHMgPSBkY2JfY29uZmlnLT50Y19jb25maWdbaV0uZGVzY19jcmVkaXRzX21heDsKKwkJcmVnID0gbWF4X2NyZWRpdHMgPDwgSVhHQkVfUlRURFQyQ19NQ0xfU0hJRlQ7CisJCXJlZyB8PSBwLT5kYXRhX2NyZWRpdHNfcmVmaWxsOworCQlyZWcgfD0gKHUzMikocC0+YndnX2lkKSA8PCBJWEdCRV9SVFREVDJDX0JXR19TSElGVDsKKworCQlpZiAocC0+cHJpb190eXBlID09IHByaW9fZ3JvdXApCisJCQlyZWcgfD0gSVhHQkVfUlRURFQyQ19HU1A7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2xpbmspCisJCQlyZWcgfD0gSVhHQkVfUlRURFQyQ19MU1A7CisKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREVDJDKGkpLCByZWcpOworCX0KKworCS8qCisJICogQ29uZmlndXJlIFR4IGRlc2NyaXB0b3IgcGxhbmUgKHJlY3ljbGUgbW9kZTsgV1NQKSBhbmQKKwkgKiBlbmFibGUgYXJiaXRlcgorCSAqLworCXJlZyA9IElYR0JFX1JUVERDU19URFBBQyB8IElYR0JFX1JUVERDU19URFJNOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRURENTLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkgLSBDb25maWcgVHggRGF0YSBhcmJpdGVyCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBUeCBQYWNrZXQgQXJiaXRlciBhbmQgY3JlZGl0cyBmb3IgZWFjaCB0cmFmZmljIGNsYXNzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwlzdHJ1Y3QgdGNfYndfYWxsb2MgKnA7CisJdTMyIHJlZzsKKwl1OCBpOworCisJLyogRGlzYWJsZSB0aGUgYXJiaXRlciBiZWZvcmUgY2hhbmdpbmcgcGFyYW1ldGVycyAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUUENTLCBJWEdCRV9SVFRQQ1NfQVJCRElTKTsKKworCS8qIE1hcCBhbGwgdHJhZmZpYyBjbGFzc2VzIHRvIHRoZWlyIFVQLCAxIHRvIDEgKi8KKwlyZWcgPSAwOworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKQorCQlyZWcgfD0gKGkgPDwgKGkgKiBJWEdCRV9SVFRVUDJUQ19VUF9TSElGVCkpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUVVAyVEMsIHJlZyk7CisKKwkvKiBDb25maWd1cmUgdHJhZmZpYyBjbGFzcyBjcmVkaXRzIGFuZCBwcmlvcml0eSAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCXAgPSAmZGNiX2NvbmZpZy0+dGNfY29uZmlnW2ldLnBhdGhbRENCX1RYX0NPTkZJR107CisJCXJlZyA9IHAtPmRhdGFfY3JlZGl0c19yZWZpbGw7CisJCXJlZyB8PSAodTMyKShwLT5kYXRhX2NyZWRpdHNfbWF4KSA8PCBJWEdCRV9SVFRQVDJDX01DTF9TSElGVDsKKwkJcmVnIHw9ICh1MzIpKHAtPmJ3Z19pZCkgPDwgSVhHQkVfUlRUUFQyQ19CV0dfU0hJRlQ7CisKKwkJaWYgKHAtPnByaW9fdHlwZSA9PSBwcmlvX2dyb3VwKQorCQkJcmVnIHw9IElYR0JFX1JUVFBUMkNfR1NQOworCisJCWlmIChwLT5wcmlvX3R5cGUgPT0gcHJpb19saW5rKQorCQkJcmVnIHw9IElYR0JFX1JUVFBUMkNfTFNQOworCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlRUUFQyQyhpKSwgcmVnKTsKKwl9CisKKwkvKgorCSAqIENvbmZpZ3VyZSBUeCBwYWNrZXQgcGxhbmUgKHJlY3ljbGUgbW9kZTsgU1A7IGFyYiBkZWxheSkgYW5kCisJICogZW5hYmxlIGFyYml0ZXIKKwkgKi8KKwlyZWcgPSBJWEdCRV9SVFRQQ1NfVFBQQUMgfCBJWEdCRV9SVFRQQ1NfVFBSTSB8CisJICAgICAgKElYR0JFX1JUVFBDU19BUkJEX0RDQiA8PCBJWEdCRV9SVFRQQ1NfQVJCRF9TSElGVCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFRQQ1MsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OSAtIENvbmZpZ3VyZSBwcmlvcml0eSBmbG93IGNvbnRyb2wKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBkY2JfY29uZmlnOiBwb2ludGVyIHRvIGl4Z2JlX2RjYl9jb25maWcgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIFByaW9yaXR5IEZsb3cgQ29udHJvbCAoUEZDKSBmb3IgZWFjaCB0cmFmZmljIGNsYXNzLgorICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ19wZmNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZykKK3sKKwl1MzIgaSwgcmVnOworCisJLyogSWYgUEZDIGlzIGRpc2FibGVkIGdsb2JhbGx5IHRoZW4gZmFsbCBiYWNrIHRvIExGQy4gKi8KKwlpZiAoIWRjYl9jb25maWctPnBmY19tb2RlX2VuYWJsZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykKKwkJCWh3LT5tYWMub3BzLnNldHVwX2ZjKGh3LCBpKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogQ29uZmlndXJlIFBGQyBUeCB0aHJlc2hvbGRzIHBlciBUQyAqLworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7CisJCS8qIENvbmZpZyBhbmQgcmVtZW1iZXIgVHggKi8KKwkJaWYgKGRjYl9jb25maWctPnRjX2NvbmZpZ1tpXS5kY2JfcGZjID09IHBmY19lbmFibGVkX2Z1bGwgfHwKKwkJICAgIGRjYl9jb25maWctPnRjX2NvbmZpZ1tpXS5kY2JfcGZjID09IHBmY19lbmFibGVkX3R4KSB7CisJCQlyZWcgPSBody0+ZmMuaGlnaF93YXRlciB8IElYR0JFX0ZDUlRIX0ZDRU47CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRIXzgyNTk5KGkpLCByZWcpOworCQkJcmVnID0gaHctPmZjLmxvd193YXRlciB8IElYR0JFX0ZDUlRMX1hPTkU7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMXzgyNTk5KGkpLCByZWcpOworCQl9IGVsc2UgeworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JUSF84MjU5OShpKSwgMCk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDUlRMXzgyNTk5KGkpLCAwKTsKKwkJfQorCX0KKworCS8qIENvbmZpZ3VyZSBwYXVzZSB0aW1lICgyIFRDcyBwZXIgcmVnaXN0ZXIpICovCisJcmVnID0gaHctPmZjLnBhdXNlX3RpbWUgfCAoaHctPmZjLnBhdXNlX3RpbWUgPDwgMTYpOworCWZvciAoaSA9IDA7IGkgPCAoTUFYX1RSQUZGSUNfQ0xBU1MgLyAyKTsgaSsrKQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFRWKGkpLCByZWcpOworCisJLyogQ29uZmlndXJlIGZsb3cgY29udHJvbCByZWZyZXNoIHRocmVzaG9sZCB2YWx1ZSAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSVFYsIGh3LT5mYy5wYXVzZV90aW1lIC8gMik7CisKKwkvKiBFbmFibGUgVHJhbnNtaXQgUEZDICovCisJcmVnID0gSVhHQkVfRkNDRkdfVEZDRV9QUklPUklUWTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDQ0ZHLCByZWcpOworCisJLyoKKwkgKiBFbmFibGUgUmVjZWl2ZSBQRkMKKwkgKiBXZSB3aWxsIGFsd2F5cyBob25vciBYT0ZGIGZyYW1lcyB3ZSByZWNlaXZlIHdoZW4KKwkgKiB3ZSBhcmUgaW4gUEZDIG1vZGUuCisJICovCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01GTENOKTsKKwlyZWcgJj0gfklYR0JFX01GTENOX1JGQ0U7CisJcmVnIHw9IElYR0JFX01GTENOX1JQRkNFOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTUZMQ04sIHJlZyk7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OSAtIENvbmZpZyB0cmFmZmljIGNsYXNzIHN0YXRpc3RpY3MKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgcXVldWUgc3RhdGlzdGljcyByZWdpc3RlcnMsIGFsbCBxdWV1ZXMgYmVsb25naW5nIHRvIHNhbWUgdHJhZmZpYworICogY2xhc3MgdXNlcyBhIHNpbmdsZSBzZXQgb2YgcXVldWUgc3RhdGlzdGljcyBjb3VudGVycy4KKyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfdGNfc3RhdHNfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgcmVnID0gMDsKKwl1OCAgaSAgID0gMDsKKworCS8qCisJICogUmVjZWl2ZSBRdWV1ZXMgc3RhdHMgc2V0dGluZworCSAqIDMyIFJRU01SIHJlZ2lzdGVycywgZWFjaCBjb25maWd1cmluZyA0IHF1ZXVlcy4KKwkgKiBTZXQgYWxsIDE2IHF1ZXVlcyBvZiBlYWNoIFRDIHRvIHRoZSBzYW1lIHN0YXQKKwkgKiB3aXRoIFRDICduJyBnb2luZyB0byBzdGF0ICduJy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlyZWcgPSAweDAxMDEwMTAxICogKGkgLyA0KTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SUVNNUihpKSwgcmVnKTsKKwl9CisJLyoKKwkgKiBUcmFuc21pdCBRdWV1ZXMgc3RhdHMgc2V0dGluZworCSAqIDMyIFRRU00gcmVnaXN0ZXJzLCBlYWNoIGNvbnRyb2xsaW5nIDQgcXVldWVzLgorCSAqIFNldCBhbGwgcXVldWVzIG9mIGVhY2ggVEMgdG8gdGhlIHNhbWUgc3RhdAorCSAqIHdpdGggVEMgJ24nIGdvaW5nIHRvIHN0YXQgJ24nLgorCSAqIFR4IHF1ZXVlcyBhcmUgYWxsb2NhdGVkIG5vbi11bmlmb3JtbHkgdG8gVENzOgorCSAqIDMyLCAzMiwgMTYsIDE2LCA4LCA4LCA4LCA4LgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmIChpIDwgOCkKKwkJCXJlZyA9IDB4MDAwMDAwMDA7CisJCWVsc2UgaWYgKGkgPCAxNikKKwkJCXJlZyA9IDB4MDEwMTAxMDE7CisJCWVsc2UgaWYgKGkgPCAyMCkKKwkJCXJlZyA9IDB4MDIwMjAyMDI7CisJCWVsc2UgaWYgKGkgPCAyNCkKKwkJCXJlZyA9IDB4MDMwMzAzMDM7CisJCWVsc2UgaWYgKGkgPCAyNikKKwkJCXJlZyA9IDB4MDQwNDA0MDQ7CisJCWVsc2UgaWYgKGkgPCAyOCkKKwkJCXJlZyA9IDB4MDUwNTA1MDU7CisJCWVsc2UgaWYgKGkgPCAzMCkKKwkJCXJlZyA9IDB4MDYwNjA2MDY7CisJCWVsc2UKKwkJCXJlZyA9IDB4MDcwNzA3MDc7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFFTTShpKSwgcmVnKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfY29uZmlnXzgyNTk5IC0gQ29uZmlndXJlIGdlbmVyYWwgRENCIHBhcmFtZXRlcnMKKyAqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqIEBkY2JfY29uZmlnOiBwb2ludGVyIHRvIGl4Z2JlX2RjYl9jb25maWcgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIGdlbmVyYWwgRENCIHBhcmFtZXRlcnMuCisgKi8KK3MzMiBpeGdiZV9kY2JfY29uZmlnXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHJlZzsKKwl1MzIgcTsKKworCS8qIERpc2FibGUgdGhlIFR4IGRlc2MgYXJiaXRlciBzbyB0aGF0IE1UUUMgY2FuIGJlIGNoYW5nZWQgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlRURENTKTsKKwlyZWcgfD0gSVhHQkVfUlRURENTX0FSQkRJUzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JUVERDUywgcmVnKTsKKworCS8qIEVuYWJsZSBEQ0IgZm9yIFJ4IHdpdGggOCBUQ3MgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTVJRQyk7CisJc3dpdGNoIChyZWcgJiBJWEdCRV9NUlFDX01SUUVfTUFTSykgeworCWNhc2UgMDoKKwljYXNlIElYR0JFX01SUUNfUlQ0VENFTjoKKwkJLyogUlNTIGRpc2FibGVkIGNhc2VzICovCisJCXJlZyA9IChyZWcgJiB+SVhHQkVfTVJRQ19NUlFFX01BU0spIHwgSVhHQkVfTVJRQ19SVDhUQ0VOOworCQlicmVhazsKKwljYXNlIElYR0JFX01SUUNfUlNTRU46CisJY2FzZSBJWEdCRV9NUlFDX1JUUlNTNFRDRU46CisJCS8qIFJTUyBlbmFibGVkIGNhc2VzICovCisJCXJlZyA9IChyZWcgJiB+SVhHQkVfTVJRQ19NUlFFX01BU0spIHwgSVhHQkVfTVJRQ19SVFJTUzhUQ0VOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBVbnN1cHBvcnRlZCB2YWx1ZSwgYXNzdW1lIHN0YWxlIGRhdGEsIG92ZXJ3cml0ZSBubyBSU1MgKi8KKwkJcmVnID0gKHJlZyAmIH5JWEdCRV9NUlFDX01SUUVfTUFTSykgfCBJWEdCRV9NUlFDX1JUOFRDRU47CisJfQorCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVJRQywgcmVnKTsKKworCS8qIEVuYWJsZSBEQ0IgZm9yIFR4IHdpdGggOCBUQ3MgKi8KKwlyZWcgPSBJWEdCRV9NVFFDX1JUX0VOQSB8IElYR0JFX01UUUNfOFRDXzhUUTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsIHJlZyk7CisKKwkvKiBEaXNhYmxlIGRyb3AgZm9yIGFsbCBxdWV1ZXMgKi8KKwlmb3IgKHEgPSAwOyBxIDwgMTI4OyBxKyspCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUURFLCBxIDw8IElYR0JFX1FERV9JRFhfU0hJRlQpOworCisJLyogRW5hYmxlIHRoZSBUeCBkZXNjIGFyYml0ZXIgKi8KKwlyZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlRURENTKTsKKwlyZWcgJj0gfklYR0JFX1JUVERDU19BUkJESVM7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREQ1MsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk5IC0gQ29uZmlndXJlIGFuZCBlbmFibGUgRENCCisgKiBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiBAZGNiX2NvbmZpZzogcG9pbnRlciB0byBpeGdiZV9kY2JfY29uZmlnIHN0cnVjdHVyZQorICoKKyAqIENvbmZpZ3VyZSBkY2Igc2V0dGluZ3MgYW5kIGVuYWJsZSBkY2IgbW9kZS4KKyAqLworczMyIGl4Z2JlX2RjYl9od19jb25maWdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKQoreworCWl4Z2JlX2RjYl9jb25maWdfcGFja2V0X2J1ZmZlcnNfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfODI1OTkoaHcpOworCWl4Z2JlX2RjYl9jb25maWdfcnhfYXJiaXRlcl84MjU5OShodywgZGNiX2NvbmZpZyk7CisJaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTkoaHcsIGRjYl9jb25maWcpOworCWl4Z2JlX2RjYl9jb25maWdfdHhfZGF0YV9hcmJpdGVyXzgyNTk5KGh3LCBkY2JfY29uZmlnKTsKKwlpeGdiZV9kY2JfY29uZmlnX3BmY184MjU5OShodywgZGNiX2NvbmZpZyk7CisJaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OShodyk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9kY2JfODI1OTkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTVlMjgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiXzgyNTk5LmgKQEAgLTAsMCArMSwxMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0RDQl84MjU5OV9DT05GSUdfSF8KKyNkZWZpbmUgX0RDQl84MjU5OV9DT05GSUdfSF8KKworLyogRENCIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIElYR0JFX1JUVERDU19URFBBQyAgICAgIDB4MDAwMDAwMDEgLyogMCBSb3VuZCBSb2JpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAxIFdTUCAtIFdlaWdodGVkIFN0cmljdCBQcmlvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfVk1QQUMgICAgICAweDAwMDAwMDAyIC8qIDAgUm91bmQgUm9iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMSBXUlIgLSBXZWlnaHRlZCBSb3VuZCBSb2JpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfVERSTSAgICAgICAweDAwMDAwMDEwIC8qIFRyYW5zbWl0IFJlY3ljbGUgTW9kZSAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfQVJCRElTICAgICAweDAwMDAwMDQwIC8qIERDQiBhcmJpdGVyIGRpc2FibGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX0JEUE0gICAgICAgMHgwMDQwMDAwMCAvKiBCeXBhc3MgRGF0YSBQaXBlIC0gbXVzdCBjbGVhciEgKi8KKyNkZWZpbmUgSVhHQkVfUlRURENTX0JQQkZTTSAgICAgMHgwMDgwMDAwMCAvKiBCeXBhc3MgUEIgRnJlZSBTcGFjZSAtIG11c3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2xlYXIhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFREQ1NfU1BFRURfQ0hHICAweDgwMDAwMDAwIC8qIExpbmsgc3BlZWQgY2hhbmdlICovCisKKy8qIFJlY2VpdmUgVVAyVEMgbWFwcGluZyAqLworI2RlZmluZSBJWEdCRV9SVFJVUDJUQ19VUF9TSElGVCAzCisvKiBUcmFuc21pdCBVUDJUQyBtYXBwaW5nICovCisjZGVmaW5lIElYR0JFX1JUVFVQMlRDX1VQX1NISUZUIDMKKworI2RlZmluZSBJWEdCRV9SVFJQVDRDX01DTF9TSElGVCAxMiAvKiBPZmZzZXQgdG8gTWF4IENyZWRpdCBMaW1pdCBzZXR0aW5nICovCisjZGVmaW5lIElYR0JFX1JUUlBUNENfQldHX1NISUZUIDkgIC8qIE9mZnNldCB0byBCV0cgaW5kZXggKi8KKyNkZWZpbmUgSVhHQkVfUlRSUFQ0Q19HU1AgICAgICAgMHg0MDAwMDAwMCAvKiBHU1AgZW5hYmxlIGJpdCAqLworI2RlZmluZSBJWEdCRV9SVFJQVDRDX0xTUCAgICAgICAweDgwMDAwMDAwIC8qIExTUCBlbmFibGUgYml0ICovCisKKyNkZWZpbmUgSVhHQkVfUkRSWENUTF9NUEJFTiAgICAgMHgwMDAwMDAxMCAvKiBETUEgY29uZmlnIGZvciBtdWx0aXBsZSBwYWNrZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBidWZmZXJzIGVuYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SRFJYQ1RMX01DRU4gICAgICAweDAwMDAwMDQwIC8qIERNQSBjb25maWcgZm9yIG11bHRpcGxlIGNvcmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogKFJTUykgZW5hYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIFJUUlBDUyBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUENTX1JSTSAgICAgICAgMHgwMDAwMDAwMiAvKiBSZWNlaXZlIFJlY3ljbGUgTW9kZSBlbmFibGUgKi8KKy8qIFJlY2VpdmUgQXJiaXRyYXRpb24gQ29udHJvbDogMCBSb3VuZCBSb2JpbiwgMSBERlAgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUENTX1JBQyAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJWEdCRV9SVFJQQ1NfQVJCRElTICAgICAweDAwMDAwMDQwIC8qIEFyYml0cmF0aW9uIGRpc2FibGUgYml0ICovCisKKy8qIFJUVERUMkMgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1JUVERUMkNfTUNMX1NISUZUIDEyCisjZGVmaW5lIElYR0JFX1JUVERUMkNfQldHX1NISUZUIDkKKyNkZWZpbmUgSVhHQkVfUlRURFQyQ19HU1AgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJWEdCRV9SVFREVDJDX0xTUCAgICAgICAweDgwMDAwMDAwCisKKyNkZWZpbmUgSVhHQkVfUlRUUFQyQ19NQ0xfU0hJRlQgMTIKKyNkZWZpbmUgSVhHQkVfUlRUUFQyQ19CV0dfU0hJRlQgOQorI2RlZmluZSBJWEdCRV9SVFRQVDJDX0dTUCAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElYR0JFX1JUVFBUMkNfTFNQICAgICAgIDB4ODAwMDAwMDAKKworLyogUlRUUENTIEJpdCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9SVFRQQ1NfVFBQQUMgICAgICAweDAwMDAwMDIwIC8qIDAgUm91bmQgUm9iaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMSBTUCAtIFN0cmljdCBQcmlvcml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBJWEdCRV9SVFRQQ1NfQVJCRElTICAgICAweDAwMDAwMDQwIC8qIEFyYml0ZXIgZGlzYWJsZSAqLworI2RlZmluZSBJWEdCRV9SVFRQQ1NfVFBSTSAgICAgICAweDAwMDAwMTAwIC8qIFRyYW5zbWl0IFJlY3ljbGUgTW9kZSBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUENTX0FSQkRfU0hJRlQgMjIKKyNkZWZpbmUgSVhHQkVfUlRUUENTX0FSQkRfRENCICAgMHg0ICAgICAgICAvKiBBcmJpdHJhdGlvbiBkZWxheSBpbiBEQ0IgbW9kZSAqLworCisjZGVmaW5lIElYR0JFX1RYUEJTSVpFXzIwS0IgICAgIDB4MDAwMDUwMDAgLyogMjBLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1RYUEJTSVpFXzQwS0IgICAgIDB4MDAwMEEwMDAgLyogNDBLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzQ4S0IgICAgIDB4MDAwMEMwMDAgLyogNDhLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzY0S0IgICAgIDB4MDAwMTAwMDAgLyogNjRLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzgwS0IgICAgIDB4MDAwMTQwMDAgLyogODBLQiBQYWNrZXQgQnVmZmVyICovCisjZGVmaW5lIElYR0JFX1JYUEJTSVpFXzEyOEtCICAgIDB4MDAwMjAwMDAgLyogMTI4S0IgUGFja2V0IEJ1ZmZlciAqLworCisjZGVmaW5lIElYR0JFX1RYUEJUSFJFU0hfRENCICAgIDB4QSAgICAgICAgLyogVEhSRVNIIHZhbHVlIGZvciBEQ0IgbW9kZSAqLworCisKKy8qIERDQiBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIgQVBJcyAqLworCisvKiBEQ0IgUEZDIGZ1bmN0aW9ucyAqLworczMyIGl4Z2JlX2RjYl9jb25maWdfcGZjXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRjYl9jb25maWcpOworczMyIGl4Z2JlX2RjYl9nZXRfcGZjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2h3X3N0YXRzICpzdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCB0Y19jb3VudCk7CisKKy8qIERDQiB0cmFmZmljIGNsYXNzIHN0YXRzICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ190Y19zdGF0c184MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3MzMiBpeGdiZV9kY2JfZ2V0X3RjX3N0YXRzXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfaHdfc3RhdHMgKnN0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdGNfY291bnQpOworCisvKiBEQ0IgY29uZmlnIGFyYml0ZXJzICovCitzMzIgaXhnYmVfZGNiX2NvbmZpZ190eF9kZXNjX2FyYml0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZyk7CitzMzIgaXhnYmVfZGNiX2NvbmZpZ190eF9kYXRhX2FyYml0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqZGNiX2NvbmZpZyk7CitzMzIgaXhnYmVfZGNiX2NvbmZpZ19yeF9hcmJpdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpkY2JfY29uZmlnKTsKKworCisvKiBEQ0IgaHcgaW5pdGlhbGl6YXRpb24gKi8KK3MzMiBpeGdiZV9kY2JfaHdfY29uZmlnXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfZGNiX2NvbmZpZyAqY29uZmlnKTsKKworI2VuZGlmIC8qIF9EQ0JfODI1OTlfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZGNiX25sLmMKaW5kZXggNDEyOTk3NjkuLjBhODczMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2RjYl9ubC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtMzUsNiArMzUsNyBAQAogI2RlZmluZSBCSVRfUEdfUlgJMHgwNAogI2RlZmluZSBCSVRfUEdfVFgJMHgwOAogI2RlZmluZSBCSVRfQkNOICAgICAgICAgMHgxMAorI2RlZmluZSBCSVRfTElOS1NQRUVEICAgMHg4MAogCiBpbnQgaXhnYmVfY29weV9kY2JfY2ZnKHN0cnVjdCBpeGdiZV9kY2JfY29uZmlnICpzcmNfZGNiX2NmZywKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2RjYl9jb25maWcgKmRzdF9kY2JfY2ZnLCBpbnQgdGNfbWF4KQpAQCAtODksMjUgKzkwLDYgQEAKIAkJCXNyY19kY2JfY2ZnLT50Y19jb25maWdbaSAtIERDQl9QRkNfVVBfQVRUUl8wXS5kY2JfcGZjOwogCX0KIAotCWZvciAoaSA9IERDQl9CQ05fQVRUUl9SUF8wOyBpIDwgRENCX0JDTl9BVFRSX1JQX0FMTDsgaSsrKSB7Ci0JCWRzdF9kY2JfY2ZnLT5iY24ucnBfYWRtaW5fbW9kZVtpIC0gRENCX0JDTl9BVFRSX1JQXzBdID0KLQkJCXNyY19kY2JfY2ZnLT5iY24ucnBfYWRtaW5fbW9kZVtpIC0gRENCX0JDTl9BVFRSX1JQXzBdOwotCX0KLQlkc3RfZGNiX2NmZy0+YmNuLmJjbmFfb3B0aW9uWzBdID0gc3JjX2RjYl9jZmctPmJjbi5iY25hX29wdGlvblswXTsKLQlkc3RfZGNiX2NmZy0+YmNuLmJjbmFfb3B0aW9uWzFdID0gc3JjX2RjYl9jZmctPmJjbi5iY25hX29wdGlvblsxXTsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX2FscGhhID0gc3JjX2RjYl9jZmctPmJjbi5ycF9hbHBoYTsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX2JldGEgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX2JldGE7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9nZCA9IHNyY19kY2JfY2ZnLT5iY24ucnBfZ2Q7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9naSA9IHNyY19kY2JfY2ZnLT5iY24ucnBfZ2k7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF90bWF4ID0gc3JjX2RjYl9jZmctPmJjbi5ycF90bWF4OwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfdGQgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3RkOwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfcm1pbiA9IHNyY19kY2JfY2ZnLT5iY24ucnBfcm1pbjsKLQlkc3RfZGNiX2NmZy0+YmNuLnJwX3cgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3c7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9yZCA9IHNyY19kY2JfY2ZnLT5iY24ucnBfcmQ7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF9ydSA9IHNyY19kY2JfY2ZnLT5iY24ucnBfcnU7Ci0JZHN0X2RjYl9jZmctPmJjbi5ycF93cnR0ID0gc3JjX2RjYl9jZmctPmJjbi5ycF93cnR0OwotCWRzdF9kY2JfY2ZnLT5iY24ucnBfcmkgPSBzcmNfZGNiX2NmZy0+YmNuLnJwX3JpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMCwxMiArMTAyLDYgQEAKIAlyZXR1cm4gISEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKTsKIH0KIAotc3RhdGljIHUxNiBpeGdiZV9kY2Jfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0JLyogQWxsIHRyYWZmaWMgc2hvdWxkIGRlZmF1bHQgdG8gY2xhc3MgMCAqLwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTggaXhnYmVfZGNibmxfc2V0X3N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU4IHN0YXRlKQogewogCXU4IGVyciA9IDA7CkBAIC0xNTMsOCArMTI5LDggQEAKIAkJa2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7CiAJCWFkYXB0ZXItPnR4X3JpbmcgPSBOVUxMOwogCQlhZGFwdGVyLT5yeF9yaW5nID0gTlVMTDsKLQkJbmV0ZGV2LT5zZWxlY3RfcXVldWUgPSAmaXhnYmVfZGNiX3NlbGVjdF9xdWV1ZTsKIAorCQlhZGFwdGVyLT5ody5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX3BmYzsKIAkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlNTX0VOQUJMRUQ7CiAJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQ7CiAJCWl4Z2JlX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKQEAgLTE2Myw2ICsxMzksNyBAQAogCX0gZWxzZSB7CiAJCS8qIFR1cm4gb2ZmIERDQiAqLwogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CisJCQlhZGFwdGVyLT5ody5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX2RlZmF1bHQ7CiAJCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQkJCW5ldGRldi0+bmV0ZGV2X29wcy0+bmRvX3N0b3AobmV0ZGV2KTsKIAkJCWl4Z2JlX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOwpAQCAtMTcyLDcgKzE0OSw2IEBACiAJCQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKIAkJCWFkYXB0ZXItPnR4X3JpbmcgPSBOVUxMOwogCQkJYWRhcHRlci0+cnhfcmluZyA9IE5VTEw7Ci0JCQluZXRkZXYtPnNlbGVjdF9xdWV1ZSA9IE5VTEw7CiAKIAkJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0RDQl9FTkFCTEVEOwogCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKQEAgLTQ0NCwxNzUgKzQyMCw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBpeGdiZV9kY2JubF9nZXRiY25ycChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcHJpb3JpdHksCi0JCQkJICB1OCAqc2V0dGluZykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2FkbWluX21vZGVbcHJpb3JpdHldOwotfQotCi0KLXN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX2dldGJjbmNmZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgZW51bV9pbmRleCwKLQkJCQkgIHUzMiAqc2V0dGluZykKLXsKLQlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0KLQlzd2l0Y2ggKGVudW1faW5kZXgpIHsKLQljYXNlIERDQl9CQ05fQVRUUl9CQ05BXzA6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMF07Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0JDTkFfMToKLQkJKnNldHRpbmcgPSBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5iY25hX29wdGlvblsxXTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQUxQSEE6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYWxwaGE7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0JFVEE6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYmV0YTsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfR0Q6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfZ2Q7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX0dJOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX2dpOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9UTUFYOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3RtYXg7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1REOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3RkOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9STUlOOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JtaW47Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1c6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfdzsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUkQ6Ci0JCSpzZXR0aW5nID0gYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcmQ7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JVOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3J1OwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9XUlRUOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3dydHQ7Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JJOgotCQkqc2V0dGluZyA9IGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkqc2V0dGluZyA9IC0xOwotCX0KLX0KLQotc3RhdGljIHZvaWQgaXhnYmVfZGNibmxfc2V0YmNucnAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHByaW9yaXR5LAotCQkJCSB1OCBzZXR0aW5nKQotewotCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQotCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYWRtaW5fbW9kZVtwcmlvcml0eV0gPSBzZXR0aW5nOwotCi0JaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYWRtaW5fbW9kZVtwcmlvcml0eV0gIT0KLQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYWRtaW5fbW9kZVtwcmlvcml0eV0pCi0JCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci19Ci0KLXN0YXRpYyB2b2lkIGl4Z2JlX2RjYm5sX3NldGJjbmNmZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgZW51bV9pbmRleCwKLQkJCQkgdTMyIHNldHRpbmcpCi17Ci0Jc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCi0Jc3dpdGNoIChlbnVtX2luZGV4KSB7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkNOQV8wOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzBdID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMF0gIT0KLQkJCWFkYXB0ZXItPmRjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzBdKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQkNOQV8xOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzFdID0gc2V0dGluZzsKLQkJaWYgKGFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24uYmNuYV9vcHRpb25bMV0gIT0KLQkJCWFkYXB0ZXItPmRjYl9jZmcuYmNuLmJjbmFfb3B0aW9uWzFdKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfQUxQSEE6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfYWxwaGEgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9hbHBoYSAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfYWxwaGEpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9CRVRBOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2JldGEgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9iZXRhICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9iZXRhKQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfR0Q6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfZ2QgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9nZCAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfZ2QpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9HSToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9naSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX2dpICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9naSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1RNQVg6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfdG1heCA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3RtYXggIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3RtYXgpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9URDoKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF90ZCA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3RkICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF90ZCkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1JNSU46Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcm1pbiA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JtaW4gIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3JtaW4pCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9XOgotCQlhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3cgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF93ICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF93KQotCQkJYWRhcHRlci0+ZGNiX3NldF9iaXRtYXAgfD0gQklUX0JDTjsKLQkJYnJlYWs7Ci0JY2FzZSBEQ0JfQkNOX0FUVFJfUkQ6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfcmQgPSBzZXR0aW5nOwotCQlpZiAoYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9yZCAhPQotCQkgICAgYWRhcHRlci0+ZGNiX2NmZy5iY24ucnBfcmQpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SVToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9ydSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3J1ICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9ydSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWNhc2UgRENCX0JDTl9BVFRSX1dSVFQ6Ci0JCWFkYXB0ZXItPnRlbXBfZGNiX2NmZy5iY24ucnBfd3J0dCA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3dydHQgIT0KLQkJICAgIGFkYXB0ZXItPmRjYl9jZmcuYmNuLnJwX3dydHQpCi0JCQlhZGFwdGVyLT5kY2Jfc2V0X2JpdG1hcCB8PSBCSVRfQkNOOwotCQlicmVhazsKLQljYXNlIERDQl9CQ05fQVRUUl9SSToKLQkJYWRhcHRlci0+dGVtcF9kY2JfY2ZnLmJjbi5ycF9yaSA9IHNldHRpbmc7Ci0JCWlmIChhZGFwdGVyLT50ZW1wX2RjYl9jZmcuYmNuLnJwX3JpICE9Ci0JCSAgICBhZGFwdGVyLT5kY2JfY2ZnLmJjbi5ycF9yaSkKLQkJCWFkYXB0ZXItPmRjYl9zZXRfYml0bWFwIHw9IEJJVF9CQ047Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQogc3RydWN0IGRjYm5sX3J0bmxfb3BzIGRjYm5sX29wcyA9IHsKIAkuZ2V0c3RhdGUJPSBpeGdiZV9kY2JubF9nZXRfc3RhdGUsCiAJLnNldHN0YXRlCT0gaXhnYmVfZGNibmxfc2V0X3N0YXRlLApAQCAtNjMzLDkgKzQ0MCw1IEBACiAJLnNldG51bXRjcwk9IGl4Z2JlX2RjYm5sX3NldG51bXRjcywKIAkuZ2V0cGZjc3RhdGUJPSBpeGdiZV9kY2JubF9nZXRwZmNzdGF0ZSwKIAkuc2V0cGZjc3RhdGUJPSBpeGdiZV9kY2JubF9zZXRwZmNzdGF0ZSwKLQkuZ2V0YmNuY2ZnICAgICAgPSBpeGdiZV9kY2JubF9nZXRiY25jZmcsCi0JLmdldGJjbnJwICAgICAgID0gaXhnYmVfZGNibmxfZ2V0YmNucnAsCi0JLnNldGJjbmNmZyAgICAgID0gaXhnYmVfZGNibmxfc2V0YmNuY2ZnLAotCS5zZXRiY25ycCAgICAgICA9IGl4Z2JlX2RjYm5sX3NldGJjbnJwCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKaW5kZXggNjdmODdhNy4uMThlY2JhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTg5LDggKzg5LDcgQEAKIAl7InJ4X2hlYWRlcl9zcGxpdCIsIElYR0JFX1NUQVQocnhfaGRyX3NwbGl0KX0sCiAJeyJhbGxvY19yeF9wYWdlX2ZhaWxlZCIsIElYR0JFX1NUQVQoYWxsb2NfcnhfcGFnZV9mYWlsZWQpfSwKIAl7ImFsbG9jX3J4X2J1ZmZfZmFpbGVkIiwgSVhHQkVfU1RBVChhbGxvY19yeF9idWZmX2ZhaWxlZCl9LAotCXsibHJvX2FnZ3JlZ2F0ZWQiLCBJWEdCRV9TVEFUKGxyb19hZ2dyZWdhdGVkKX0sCi0JeyJscm9fZmx1c2hlZCIsIElYR0JFX1NUQVQobHJvX2ZsdXNoZWQpfSwKKwl7InJ4X25vX2RtYV9yZXNvdXJjZXMiLCBJWEdCRV9TVEFUKGh3X3J4X25vX2RtYV9yZXNvdXJjZXMpfSwKIH07CiAKICNkZWZpbmUgSVhHQkVfUVVFVUVfU1RBVFNfTEVOIFwKQEAgLTEzMiw2ICsxMzEsMjYgQEAKIAkJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CiAKIAkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJfSBlbHNlIGlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gaXhnYmVfbWVkaWFfdHlwZV9iYWNrcGxhbmUpIHsKKwkJLyogU2V0IGFzIEZJQlJFIHVudGlsIFNFUkRFUyBkZWZpbmVkIGluIGtlcm5lbCAqLworCQlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKKwkJY2FzZSBJWEdCRV9ERVZfSURfODI1OTg6CisJCQllY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJU1VQUE9SVEVEX0ZJQlJFKTsKKwkJCWVjbWQtPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTAwMDBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEX0ZJQlJFKTsKKwkJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQkJYnJlYWs7CisJCWNhc2UgSVhHQkVfREVWX0lEXzgyNTk4X0JYOgorCQkJZWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkJCSAgIFNVUFBPUlRFRF9GSUJSRSk7CisJCQllY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKKwkJCQkJICAgICBBRFZFUlRJU0VEX0ZJQlJFKTsKKwkJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwkJCWJyZWFrOworCQl9CiAJfSBlbHNlIHsKIAkJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9GSUJSRTsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSAoQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGwgfApAQCAtMjA2LDEzICsyMjUsMTMgQEAKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotCXBhdXNlLT5hdXRvbmVnID0gKGh3LT5mYy50eXBlID09IGl4Z2JlX2ZjX2Z1bGwgPyAxIDogMCk7CisJcGF1c2UtPmF1dG9uZWcgPSAoaHctPmZjLmN1cnJlbnRfbW9kZSA9PSBpeGdiZV9mY19mdWxsID8gMSA6IDApOwogCi0JaWYgKGh3LT5mYy50eXBlID09IGl4Z2JlX2ZjX3J4X3BhdXNlKSB7CisJaWYgKGh3LT5mYy5jdXJyZW50X21vZGUgPT0gaXhnYmVfZmNfcnhfcGF1c2UpIHsKIAkJcGF1c2UtPnJ4X3BhdXNlID0gMTsKLQl9IGVsc2UgaWYgKGh3LT5mYy50eXBlID09IGl4Z2JlX2ZjX3R4X3BhdXNlKSB7CisJfSBlbHNlIGlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX3R4X3BhdXNlKSB7CiAJCXBhdXNlLT50eF9wYXVzZSA9IDE7Ci0JfSBlbHNlIGlmIChody0+ZmMudHlwZSA9PSBpeGdiZV9mY19mdWxsKSB7CisJfSBlbHNlIGlmIChody0+ZmMuY3VycmVudF9tb2RlID09IGl4Z2JlX2ZjX2Z1bGwpIHsKIAkJcGF1c2UtPnJ4X3BhdXNlID0gMTsKIAkJcGF1c2UtPnR4X3BhdXNlID0gMTsKIAl9CkBAIC0yMjYsMjIgKzI0NSwxNyBAQAogCiAJaWYgKChwYXVzZS0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgfHwKIAkgICAgKHBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpKQotCQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX2Z1bGw7CisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX2Z1bGw7CiAJZWxzZSBpZiAocGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCi0JCWh3LT5mYy50eXBlID0gaXhnYmVfZmNfcnhfcGF1c2U7CisJCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX3J4X3BhdXNlOwogCWVsc2UgaWYgKCFwYXVzZS0+cnhfcGF1c2UgJiYgcGF1c2UtPnR4X3BhdXNlKQotCQlody0+ZmMudHlwZSA9IGl4Z2JlX2ZjX3R4X3BhdXNlOworCQlody0+ZmMucmVxdWVzdGVkX21vZGUgPSBpeGdiZV9mY190eF9wYXVzZTsKIAllbHNlIGlmICghcGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCi0JCWh3LT5mYy50eXBlID0gaXhnYmVfZmNfbm9uZTsKKwkJaHctPmZjLnJlcXVlc3RlZF9tb2RlID0gaXhnYmVfZmNfbm9uZTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBody0+ZmMudHlwZTsKLQotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCWl4Z2JlX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7Ci0JZWxzZQotCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKKwlody0+bWFjLm9wcy5zZXR1cF9mYyhodywgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1Niw3ICs0NzAsNyBAQAogCXJlZ3NfYnVmZls4MjVdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0lQNkFUKTsKIAlyZWdzX2J1ZmZbODI2XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9XVVBMKTsKIAlyZWdzX2J1ZmZbODI3XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9XVVBNKTsKLQlyZWdzX2J1ZmZbODI4XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GSEZUKTsKKwlyZWdzX2J1ZmZbODI4XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GSEZUKDApKTsKIAogCXJlZ3NfYnVmZls4MjldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JNQ1MpOwogCXJlZ3NfYnVmZls4MzBdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0RQTUNTKTsKQEAgLTY2MSwxMCArNjc1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwljaGFyIGZpcm13YXJlX3ZlcnNpb25bMzJdOwogCiAJc3RybmNweShkcnZpbmZvLT5kcml2ZXIsIGl4Z2JlX2RyaXZlcl9uYW1lLCAzMik7CiAJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBpeGdiZV9kcml2ZXJfdmVyc2lvbiwgMzIpOwotCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVyc2lvbiwgIk4vQSIsIDMyKTsKKworCXNwcmludGYoZmlybXdhcmVfdmVyc2lvbiwgIiVkLiVkLSVkIiwKKwkgICAgICAgIChhZGFwdGVyLT5lZXByb21fdmVyc2lvbiAmIDB4RjAwMCkgPj4gMTIsCisJICAgICAgICAoYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24gJiAweDBGRjApID4+IDQsCisJICAgICAgICBhZGFwdGVyLT5lZXByb21fdmVyc2lvbiAmIDB4MDAwRik7CisKKwlzdHJuY3B5KGRydmluZm8tPmZ3X3ZlcnNpb24sIGZpcm13YXJlX3ZlcnNpb24sIDMyKTsKIAlzdHJuY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhZGFwdGVyLT5wZGV2KSwgMzIpOwogCWRydmluZm8tPm5fc3RhdHMgPSBJWEdCRV9TVEFUU19MRU47CiAJZHJ2aW5mby0+cmVnZHVtcF9sZW4gPSBpeGdiZV9nZXRfcmVnc19sZW4obmV0ZGV2KTsKQEAgLTgwOCwxNSArODI5LDYgQEAKIAlpbnQgc3RhdF9jb3VudCA9IHNpemVvZihzdHJ1Y3QgaXhnYmVfcXVldWVfc3RhdHMpIC8gc2l6ZW9mKHU2NCk7CiAJaW50IGosIGs7CiAJaW50IGk7Ci0JdTY0IGFnZ3JlZ2F0ZWQgPSAwLCBmbHVzaGVkID0gMCwgbm9fZGVzYyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQlhZ2dyZWdhdGVkICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5zdGF0cy5hZ2dyZWdhdGVkOwotCQlmbHVzaGVkICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5zdGF0cy5mbHVzaGVkOwotCQlub19kZXNjICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5zdGF0cy5ub19kZXNjOwotCX0KLQlhZGFwdGVyLT5scm9fYWdncmVnYXRlZCA9IGFnZ3JlZ2F0ZWQ7Ci0JYWRhcHRlci0+bHJvX2ZsdXNoZWQgPSBmbHVzaGVkOwotCWFkYXB0ZXItPmxyb19ub19kZXNjID0gbm9fZGVzYzsKIAogCWl4Z2JlX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKIAlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7CkBAIC04OTcsMTIgKzkwOSw1MCBAQAogc3RhdGljIHZvaWQgaXhnYmVfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7Ci0Jd29sLT5zdXBwb3J0ZWQgPSAwOworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9VQ0FTVCB8IFdBS0VfTUNBU1QgfAorCSAgICAgICAgICAgICAgICAgV0FLRV9CQ0FTVCB8IFdBS0VfTUFHSUM7CiAJd29sLT53b2xvcHRzID0gMDsKIAorCWlmICghZGV2aWNlX2Nhbl93YWtldXAoJmFkYXB0ZXItPnBkZXYtPmRldikpCisJCXJldHVybjsKKworCWlmIChhZGFwdGVyLT53b2wgJiBJWEdCRV9XVUZDX0VYKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9VQ0FTVDsKKwlpZiAoYWRhcHRlci0+d29sICYgSVhHQkVfV1VGQ19NQykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfTUNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIElYR0JFX1dVRkNfQkMpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX0JDQVNUOworCWlmIChhZGFwdGVyLT53b2wgJiBJWEdCRV9XVUZDX01BRykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfTUFHSUM7CisKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyBpbnQgaXhnYmVfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKHdvbC0+d29sb3B0cyAmIChXQUtFX1BIWSB8IFdBS0VfQVJQIHwgV0FLRV9NQUdJQ1NFQ1VSRSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWFkYXB0ZXItPndvbCA9IDA7CisKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9VQ0FTVCkKKwkJYWRhcHRlci0+d29sIHw9IElYR0JFX1dVRkNfRVg7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUNBU1QpCisJCWFkYXB0ZXItPndvbCB8PSBJWEdCRV9XVUZDX01DOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX0JDQVNUKQorCQlhZGFwdGVyLT53b2wgfD0gSVhHQkVfV1VGQ19CQzsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9NQUdJQykKKwkJYWRhcHRlci0+d29sIHw9IElYR0JFX1dVRkNfTUFHOworCisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZhZGFwdGVyLT5wZGV2LT5kZXYsIGFkYXB0ZXItPndvbCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBpeGdiZV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwpAQCAtOTY1LDQwICsxMDE1LDQ3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGk7CiAKIAlpZiAoZWMtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSkKIAkJYWRhcHRlci0+dHhfcmluZ1swXS53b3JrX2xpbWl0ID0gZWMtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycTsKIAogCWlmIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgPiAxKSB7CisJCS8qIGNoZWNrIHRoZSBsaW1pdHMgKi8KKwkJaWYgKCgxMDAwMDAwL2VjLT5yeF9jb2FsZXNjZV91c2VjcyA+IElYR0JFX01BWF9JTlRfUkFURSkgfHwKKwkJICAgICgxMDAwMDAwL2VjLT5yeF9jb2FsZXNjZV91c2VjcyA8IElYR0JFX01JTl9JTlRfUkFURSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQkvKiBzdG9yZSB0aGUgdmFsdWUgaW4gaW50cy9zZWNvbmQgKi8KIAkJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IDEwMDAwMDAvZWMtPnJ4X2NvYWxlc2NlX3VzZWNzOwogCiAJCS8qIHN0YXRpYyB2YWx1ZSBvZiBpbnRlcnJ1cHQgcmF0ZSAqLwogCQlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IGFkYXB0ZXItPmVpdHJfcGFyYW07Ci0JCS8qIGNsZWFyIHRoZSBsb3dlciBiaXQgKi8KKwkJLyogY2xlYXIgdGhlIGxvd2VyIGJpdCBhcyBpdHMgdXNlZCBmb3IgZHluYW1pYyBzdGF0ZSAqLwogCQlhZGFwdGVyLT5pdHJfc2V0dGluZyAmPSB+MTsKIAl9IGVsc2UgaWYgKGVjLT5yeF9jb2FsZXNjZV91c2VjcyA9PSAxKSB7CiAJCS8qIDEgbWVhbnMgZHluYW1pYyBtb2RlICovCiAJCWFkYXB0ZXItPmVpdHJfcGFyYW0gPSAyMDAwMDsKIAkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSAxOwogCX0gZWxzZSB7Ci0JCS8qIGFueSBvdGhlciB2YWx1ZSBtZWFucyBkaXNhYmxlIGVpdHIsIHdoaWNoIGlzIGJlc3QKLQkJICogc2VydmVkIGJ5IHNldHRpbmcgdGhlIGludGVycnVwdCByYXRlIHZlcnkgaGlnaCAqLwotCQlhZGFwdGVyLT5laXRyX3BhcmFtID0gMzAwMDAwMDsKKwkJLyoKKwkJICogYW55IG90aGVyIHZhbHVlIG1lYW5zIGRpc2FibGUgZWl0ciwgd2hpY2ggaXMgYmVzdAorCQkgKiBzZXJ2ZWQgYnkgc2V0dGluZyB0aGUgaW50ZXJydXB0IHJhdGUgdmVyeSBoaWdoCisJCSAqLworCQlhZGFwdGVyLT5laXRyX3BhcmFtID0gSVhHQkVfTUFYX0lOVF9SQVRFOwogCQlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IDA7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOyBpKyspIHsKIAkJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9ICZhZGFwdGVyLT5xX3ZlY3RvcltpXTsKIAkJaWYgKHFfdmVjdG9yLT50eHJfY291bnQgJiYgIXFfdmVjdG9yLT5yeHJfY291bnQpCisJCQkvKiB0eCB2ZWN0b3IgZ2V0cyBoYWxmIHRoZSByYXRlICovCiAJCQlxX3ZlY3Rvci0+ZWl0ciA9IChhZGFwdGVyLT5laXRyX3BhcmFtID4+IDEpOwogCQllbHNlCiAJCQkvKiByeCBvbmx5IG9yIG1peGVkICovCiAJCQlxX3ZlY3Rvci0+ZWl0ciA9IGFkYXB0ZXItPmVpdHJfcGFyYW07Ci0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUihpKSwKLQkJICAgICAgICAgICAgICAgIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhxX3ZlY3Rvci0+ZWl0cikpOworCQlpeGdiZV93cml0ZV9laXRyKGFkYXB0ZXIsIGksCisJCSAgICAgICAgICAgICAgICAgRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKHFfdmVjdG9yLT5laXRyKSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMDEyLDYgKzEwNjksNyBAQAogCS5nZXRfcmVnc19sZW4gICAgICAgICAgID0gaXhnYmVfZ2V0X3JlZ3NfbGVuLAogCS5nZXRfcmVncyAgICAgICAgICAgICAgID0gaXhnYmVfZ2V0X3JlZ3MsCiAJLmdldF93b2wgICAgICAgICAgICAgICAgPSBpeGdiZV9nZXRfd29sLAorCS5zZXRfd29sICAgICAgICAgICAgICAgID0gaXhnYmVfc2V0X3dvbCwKIAkubndheV9yZXNldCAgICAgICAgICAgICA9IGl4Z2JlX253YXlfcmVzZXQsCiAJLmdldF9saW5rICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfZWVwcm9tX2xlbiAgICAgICAgID0gaXhnYmVfZ2V0X2VlcHJvbV9sZW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggNWQzNjRhOS4uNzlhYTgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYwpAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTQ3LDEyICs0NywxMyBAQAogc3RhdGljIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3N0cmluZ1tdID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlbChSKSAxMCBHaWdhYml0IFBDSSBFeHByZXNzIE5ldHdvcmsgRHJpdmVyIjsKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4zLjMwLWsyIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjgtazIiCiBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKLXN0YXRpYyBjaGFyIGl4Z2JlX2NvcHlyaWdodFtdID0gIkNvcHlyaWdodCAoYykgMTk5OS0yMDA3IEludGVsIENvcnBvcmF0aW9uLiI7CitzdGF0aWMgY2hhciBpeGdiZV9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl4Z2JlX2luZm8gKml4Z2JlX2luZm9fdGJsW10gPSB7CiAJW2JvYXJkXzgyNTk4XSA9ICZpeGdiZV84MjU5OF9pbmZvLAorCVtib2FyZF84MjU5OV0gPSAmaXhnYmVfODI1OTlfaW5mbywKIH07CiAKIC8qIGl4Z2JlX3BjaV90YmwgLSBQQ0kgRGV2aWNlIElEIFRhYmxlCkBAIC02NCw2ICs2NSw4IEBACiAgKiAgIENsYXNzLCBDbGFzcyBNYXNrLCBwcml2YXRlIGRhdGEgKG5vdCB1c2VkKSB9CiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpeGdiZV9wY2lfdGJsW10gPSB7CisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTgpLAorCSBib2FyZF84MjU5OCB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4QUZfRFVBTF9QT1JUKSwKIAkgYm9hcmRfODI1OTggfSwKIAl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OEFGX1NJTkdMRV9QT1JUKSwKQEAgLTgyLDYgKzg1LDEyIEBACiAJIGJvYXJkXzgyNTk4IH0sCiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OThFQl9TRlBfTE9NKSwKIAkgYm9hcmRfODI1OTggfSwKKwl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OF9CWCksCisJIGJvYXJkXzgyNTk4IH0sCisJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTlfS1g0KSwKKwkgYm9hcmRfODI1OTkgfSwKKwl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OV9TRlApLAorCSBib2FyZF84MjU5OSB9LAogCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLCB9CkBAIC0xMjUsMTcgKzEzNCw1MyBAQAogCSAgICAgICAgICAgICAgICBjdHJsX2V4dCB8IElYR0JFX0NUUkxfRVhUX0RSVl9MT0FEKTsKIH0KIAotc3RhdGljIHZvaWQgaXhnYmVfc2V0X2l2YXIoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBpbnRfYWxsb2NfZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBtc2l4X3ZlY3RvcikKKy8qCisgKiBpeGdiZV9zZXRfaXZhciAtIHNldCB0aGUgSVZBUiByZWdpc3RlcnMsIG1hcHBpbmcgaW50ZXJydXB0IGNhdXNlcyB0byB2ZWN0b3JzCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBhZGFwdGVyIHN0cnVjdAorICogQGRpcmVjdGlvbjogMCBmb3IgUngsIDEgZm9yIFR4LCAtMSBmb3Igb3RoZXIgY2F1c2VzCisgKiBAcXVldWU6IHF1ZXVlIHRvIG1hcCB0aGUgY29ycmVzcG9uZGluZyBpbnRlcnJ1cHQgdG8KKyAqIEBtc2l4X3ZlY3RvcjogdGhlIHZlY3RvciB0byBtYXAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgcXVldWUKKyAqCisgKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3NldF9pdmFyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBzOCBkaXJlY3Rpb24sCisJICAgICAgICAgICAgICAgICAgIHU4IHF1ZXVlLCB1OCBtc2l4X3ZlY3RvcikKIHsKIAl1MzIgaXZhciwgaW5kZXg7Ci0KLQltc2l4X3ZlY3RvciB8PSBJWEdCRV9JVkFSX0FMTE9DX1ZBTDsKLQlpbmRleCA9IChpbnRfYWxsb2NfZW50cnkgPj4gMikgJiAweDFGOwotCWl2YXIgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0lWQVIoaW5kZXgpKTsKLQlpdmFyICY9IH4oMHhGRiA8PCAoOCAqIChpbnRfYWxsb2NfZW50cnkgJiAweDMpKSk7Ci0JaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgKDggKiAoaW50X2FsbG9jX2VudHJ5ICYgMHgzKSkpOwotCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0lWQVIoaW5kZXgpLCBpdmFyKTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKKwkJbXNpeF92ZWN0b3IgfD0gSVhHQkVfSVZBUl9BTExPQ19WQUw7CisJCWlmIChkaXJlY3Rpb24gPT0gLTEpCisJCQlkaXJlY3Rpb24gPSAwOworCQlpbmRleCA9ICgoKGRpcmVjdGlvbiAqIDY0KSArIHF1ZXVlKSA+PiAyKSAmIDB4MUY7CisJCWl2YXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSVZBUihpbmRleCkpOworCQlpdmFyICY9IH4oMHhGRiA8PCAoOCAqIChxdWV1ZSAmIDB4MykpKTsKKwkJaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgKDggKiAocXVldWUgJiAweDMpKSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfSVZBUihpbmRleCksIGl2YXIpOworCQlicmVhazsKKwljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCQlpZiAoZGlyZWN0aW9uID09IC0xKSB7CisJCQkvKiBvdGhlciBjYXVzZXMgKi8KKwkJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQkJaW5kZXggPSAoKHF1ZXVlICYgMSkgKiA4KTsKKwkJCWl2YXIgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0lWQVJfTUlTQyk7CisJCQlpdmFyICY9IH4oMHhGRiA8PCBpbmRleCk7CisJCQlpdmFyIHw9IChtc2l4X3ZlY3RvciA8PCBpbmRleCk7CisJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9JVkFSX01JU0MsIGl2YXIpOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQkvKiB0eCBvciByeCBjYXVzZXMgKi8KKwkJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQkJaW5kZXggPSAoKDE2ICogKHF1ZXVlICYgMSkpICsgKDggKiBkaXJlY3Rpb24pKTsKKwkJCWl2YXIgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSVZBUihxdWV1ZSA+PiAxKSk7CisJCQlpdmFyICY9IH4oMHhGRiA8PCBpbmRleCk7CisJCQlpdmFyIHw9IChtc2l4X3ZlY3RvciA8PCBpbmRleCk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0lWQVIocXVldWUgPj4gMSksIGl2YXIpOworCQkJYnJlYWs7CisJCX0KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMjAwLDM5ICsyNDUsMzkgQEAKICNkZWZpbmUgREVTQ19ORUVERUQgKFRYRF9VU0VfQ09VTlQoSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCkgLyogc2tiLT5kYXRhICovICsgXAogCU1BWF9TS0JfRlJBR1MgKiBUWERfVVNFX0NPVU5UKFBBR0VfU0laRSkgKyAxKSAvKiBmb3IgY29udGV4dCAqLwogCi0jZGVmaW5lIEdFVF9UWF9IRUFEX0ZST01fUklORyhyaW5nKSAoXAotCSoodm9sYXRpbGUgdTMyICopIFwKLQkoKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjICopKHJpbmcpLT5kZXNjICsgKHJpbmcpLT5jb3VudCkpCiBzdGF0aWMgdm9pZCBpeGdiZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogCiAvKioKICAqIGl4Z2JlX2NsZWFuX3R4X2lycSAtIFJlY2xhaW0gcmVzb3VyY2VzIGFmdGVyIHRyYW5zbWl0IGNvbXBsZXRlcwogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKiBAdHhfcmluZzogdHggcmluZyB0byBjbGVhbgorICoKKyAqIHJldHVybnMgdHJ1ZSBpZiB0cmFuc21pdCB3b3JrIGlzIGRvbmUKICAqKi8KIHN0YXRpYyBib29sIGl4Z2JlX2NsZWFuX3R4X2lycShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZykKIHsKLQl1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqdHhfZGVzYzsKLQlzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIGhlYWQsIG9sZGhlYWQ7Ci0JdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwl1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqdHhfZGVzYywgKmVvcF9kZXNjOworCXN0cnVjdCBpeGdiZV90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOworCXVuc2lnbmVkIGludCBpLCBlb3AsIGNvdW50ID0gMDsKIAl1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXMgPSAwLCB0b3RhbF9wYWNrZXRzID0gMDsKIAotCXJtYigpOwotCWhlYWQgPSBHRVRfVFhfSEVBRF9GUk9NX1JJTkcodHhfcmluZyk7Ci0JaGVhZCA9IGxlMzJfdG9fY3B1KGhlYWQpOwogCWkgPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuOwotCXdoaWxlICgxKSB7Ci0JCXdoaWxlIChpICE9IGhlYWQpIHsKKwllb3AgPSB0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXS5uZXh0X3RvX3dhdGNoOworCWVvcF9kZXNjID0gSVhHQkVfVFhfREVTQ19BRFYoKnR4X3JpbmcsIGVvcCk7CisKKwl3aGlsZSAoKGVvcF9kZXNjLT53Yi5zdGF0dXMgJiBjcHVfdG9fbGUzMihJWEdCRV9UWERfU1RBVF9ERCkpICYmCisJICAgICAgIChjb3VudCA8IHR4X3JpbmctPndvcmtfbGltaXQpKSB7CisJCWJvb2wgY2xlYW5lZCA9IGZhbHNlOworCQlmb3IgKCA7ICFjbGVhbmVkOyBjb3VudCsrKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQkJdHhfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBpKTsKIAkJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOworCQkJY2xlYW5lZCA9IChpID09IGVvcCk7CiAJCQlza2IgPSB0eF9idWZmZXJfaW5mby0+c2tiOwogCi0JCQlpZiAoc2tiKSB7CisJCQlpZiAoY2xlYW5lZCAmJiBza2IpIHsKIAkJCQl1bnNpZ25lZCBpbnQgc2VncywgYnl0ZWNvdW50OwogCiAJCQkJLyogZ3NvX3NlZ3MgaXMgY3VycmVudGx5IG9ubHkgdmFsaWQgZm9yIHRjcCAqLwpAQCAtMjQ3LDIzICsyOTIsMTcgQEAKIAkJCWl4Z2JlX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKGFkYXB0ZXIsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eF9idWZmZXJfaW5mbyk7CiAKKwkJCXR4X2Rlc2MtPndiLnN0YXR1cyA9IDA7CisKIAkJCWkrKzsKIAkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQogCQkJCWkgPSAwOwotCi0JCQljb3VudCsrOwotCQkJaWYgKGNvdW50ID09IHR4X3JpbmctPmNvdW50KQotCQkJCWdvdG8gZG9uZV9jbGVhbmluZzsKIAkJfQotCQlvbGRoZWFkID0gaGVhZDsKLQkJcm1iKCk7Ci0JCWhlYWQgPSBHRVRfVFhfSEVBRF9GUk9NX1JJTkcodHhfcmluZyk7Ci0JCWhlYWQgPSBsZTMyX3RvX2NwdShoZWFkKTsKLQkJaWYgKGhlYWQgPT0gb2xkaGVhZCkKLQkJCWdvdG8gZG9uZV9jbGVhbmluZzsKLQl9IC8qIHdoaWxlICgxKSAqLwogCi1kb25lX2NsZWFuaW5nOgorCQllb3AgPSB0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXS5uZXh0X3RvX3dhdGNoOworCQllb3BfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOworCX0KKwogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOwogCiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpCkBAIC0yOTEsMTcgKzMzMCwxNiBAQAogCX0KIAogCS8qIHJlLWFybSB0aGUgaW50ZXJydXB0ICovCi0JaWYgKCh0b3RhbF9wYWNrZXRzID49IHR4X3JpbmctPndvcmtfbGltaXQpIHx8Ci0JICAgIChjb3VudCA9PSB0eF9yaW5nLT5jb3VudCkpCisJaWYgKGNvdW50ID49IHR4X3JpbmctPndvcmtfbGltaXQpCiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJQ1MsIHR4X3JpbmctPnZfaWR4KTsKIAogCXR4X3JpbmctPnRvdGFsX2J5dGVzICs9IHRvdGFsX2J5dGVzOwogCXR4X3JpbmctPnRvdGFsX3BhY2tldHMgKz0gdG90YWxfcGFja2V0czsKLQl0eF9yaW5nLT5zdGF0cy5ieXRlcyArPSB0b3RhbF9ieXRlczsKIAl0eF9yaW5nLT5zdGF0cy5wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7CisJdHhfcmluZy0+c3RhdHMuYnl0ZXMgKz0gdG90YWxfYnl0ZXM7CiAJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2J5dGVzICs9IHRvdGFsX2J5dGVzOwogCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7Ci0JcmV0dXJuICh0b3RhbF9wYWNrZXRzID8gdHJ1ZSA6IGZhbHNlKTsKKwlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+d29ya19saW1pdCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCkBAIC0zMTQsMTMgKzM1MiwxOSBAQAogCiAJaWYgKHJ4X3JpbmctPmNwdSAhPSBjcHUpIHsKIAkJcnhjdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfUlhDVFJMKHEpKTsKLQkJcnhjdHJsICY9IH5JWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX01BU0s7Ci0JCXJ4Y3RybCB8PSBkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KTsKKwkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCQlyeGN0cmwgJj0gfklYR0JFX0RDQV9SWENUUkxfQ1BVSURfTUFTSzsKKwkJCXJ4Y3RybCB8PSBkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KTsKKwkJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJcnhjdHJsICY9IH5JWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX01BU0tfODI1OTk7CisJCQlyeGN0cmwgfD0gKGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpIDw8CisJCQkgICAgICAgICAgIElYR0JFX0RDQV9SWENUUkxfQ1BVSURfU0hJRlRfODI1OTkpOworCQl9CiAJCXJ4Y3RybCB8PSBJWEdCRV9EQ0FfUlhDVFJMX0RFU0NfRENBX0VOOwogCQlyeGN0cmwgfD0gSVhHQkVfRENBX1JYQ1RSTF9IRUFEX0RDQV9FTjsKIAkJcnhjdHJsICY9IH4oSVhHQkVfRENBX1JYQ1RSTF9ERVNDX1JST19FTik7CiAJCXJ4Y3RybCAmPSB+KElYR0JFX0RDQV9SWENUUkxfREVTQ19XUk9fRU4gfAotCQkJICAgIElYR0JFX0RDQV9SWENUUkxfREVTQ19IU1JPX0VOKTsKKwkJICAgICAgICAgICAgSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0hTUk9fRU4pOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfUlhDVFJMKHEpLCByeGN0cmwpOwogCQlyeF9yaW5nLT5jcHUgPSBjcHU7CiAJfQpAQCAtMzM2LDggKzM4MCwxNCBAQAogCiAJaWYgKHR4X3JpbmctPmNwdSAhPSBjcHUpIHsKIAkJdHhjdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfVFhDVFJMKHEpKTsKLQkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0s7Ci0JCXR4Y3RybCB8PSBkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KTsKKwkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCQl0eGN0cmwgJj0gfklYR0JFX0RDQV9UWENUUkxfQ1BVSURfTUFTSzsKKwkJCXR4Y3RybCB8PSBkY2EzX2dldF90YWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgY3B1KTsKKwkJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJdHhjdHJsICY9IH5JWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0tfODI1OTk7CisJCQl0eGN0cmwgfD0gKGRjYTNfZ2V0X3RhZygmYWRhcHRlci0+cGRldi0+ZGV2LCBjcHUpIDw8CisJCQkgICAgICAgICAgIElYR0JFX0RDQV9UWENUUkxfQ1BVSURfU0hJRlRfODI1OTkpOworCQl9CiAJCXR4Y3RybCB8PSBJWEdCRV9EQ0FfVFhDVFJMX0RFU0NfRENBX0VOOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9EQ0FfVFhDVFJMKHEpLCB0eGN0cmwpOwogCQl0eF9yaW5nLT5jcHUgPSBjcHU7CkBAIC00MDMsMjMgKzQ1MywyMSBAQAogICogQHJ4X3Jpbmc6IHJ4IGRlc2NyaXB0b3IgcmluZyAoZm9yIGEgc3BlY2lmaWMgcXVldWUpIHRvIHNldHVwCiAgKiBAcnhfZGVzYzogcnggZGVzY3JpcHRvcgogICoqLwotc3RhdGljIHZvaWQgaXhnYmVfcmVjZWl2ZV9za2Ioc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCitzdGF0aWMgdm9pZCBpeGdiZV9yZWNlaXZlX3NrYihzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggc3RhdHVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYykKIHsKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9ICZxX3ZlY3Rvci0+bmFwaTsKIAlib29sIGlzX3ZsYW4gPSAoc3RhdHVzICYgSVhHQkVfUlhEX1NUQVRfVlApOwogCXUxNiB0YWcgPSBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci52bGFuKTsKIAotCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8gJiYKLQkgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcV92ZWN0b3IgLSAmYWRhcHRlci0+cV92ZWN0b3JbMF0pOworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSkgewogCQlpZiAoYWRhcHRlci0+dmxncnAgJiYgaXNfdmxhbiAmJiAodGFnICE9IDApKQotCQkJbHJvX3ZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYigmcmluZy0+bHJvX21nciwgc2tiLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT52bGdycCwgdGFnLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9kZXNjKTsKKwkJCXZsYW5fZ3JvX3JlY2VpdmUobmFwaSwgYWRhcHRlci0+dmxncnAsIHRhZywgc2tiKTsKIAkJZWxzZQotCQkJbHJvX3JlY2VpdmVfc2tiKCZyaW5nLT5scm9fbWdyLCBza2IsIHJ4X2Rlc2MpOwotCQlyaW5nLT5scm9fdXNlZCA9IHRydWU7CisJCQluYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYik7CiAJfSBlbHNlIHsKIAkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX05FVFBPTEwpKSB7CiAJCQlpZiAoYWRhcHRlci0+dmxncnAgJiYgaXNfdmxhbiAmJiAodGFnICE9IDApKQpAQCAtNDcwLDYgKzUxOCwxOSBAQAogCWFkYXB0ZXItPmh3X2NzdW1fcnhfZ29vZCsrOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfcmVsZWFzZV9yeF9kZXNjKHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nLCB1MzIgdmFsKQoreworCS8qCisJICogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKKwkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQorCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCisJICogc3VjaCBhcyBJQS02NCkuCisJICovCisJd21iKCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SRFQocnhfcmluZy0+cmVnX2lkeCksIHZhbCk7Cit9CisKIC8qKgogICogaXhnYmVfYWxsb2NfcnhfYnVmZmVycyAtIFJlcGxhY2UgdXNlZCByZWNlaXZlIGJ1ZmZlcnM7IHBhY2tldCBzcGxpdAogICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKQEAgLTQ4Miw2ICs1NDMsNyBAQAogCXVuaW9uIGl4Z2JlX2Fkdl9yeF9kZXNjICpyeF9kZXNjOwogCXN0cnVjdCBpeGdiZV9yeF9idWZmZXIgKmJpOwogCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBidWZzeiA9IHJ4X3JpbmctPnJ4X2J1Zl9sZW4gKyBORVRfSVBfQUxJR047CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b191c2U7CiAJYmkgPSAmcnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV07CkBAIC01MTEsOSArNTczLDcgQEAKIAogCQlpZiAoIWJpLT5za2IpIHsKIAkJCXN0cnVjdCBza19idWZmICpza2I7Ci0JCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPm5ldGRldiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgKHJ4X3JpbmctPnJ4X2J1Zl9sZW4gKwotCQkJICAgICAgICAgICAgICAgICAgICAgICAgTkVUX0lQX0FMSUdOKSk7CisJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPm5ldGRldiwgYnVmc3opOwogCiAJCQlpZiAoIXNrYikgewogCQkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CkBAIC01MjgsOCArNTg4LDcgQEAKIAkJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKIAogCQkJYmktPnNrYiA9IHNrYjsKLQkJCWJpLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgcnhfcmluZy0+cnhfYnVmX2xlbiwKKwkJCWJpLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIGJ1ZnN6LAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0KIAkJLyogUmVmcmVzaCB0aGUgZGVzYyBldmVuIGlmIGJ1ZmZlcl9hZGRycyBkaWRuJ3QgY2hhbmdlIGJlY2F1c2UKQEAgLTU1MywxNCArNjEyLDcgQEAKIAkJaWYgKGktLSA9PSAwKQogCQkJaSA9IChyeF9yaW5nLT5jb3VudCAtIDEpOwogCi0JCS8qCi0JCSAqIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVmb3JlIGxldHRpbmcgaC93Ci0JCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5Ci0JCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCi0JCSAqIHN1Y2ggYXMgSUEtNjQpLgotCQkgKi8KLQkJd21iKCk7Ci0JCXdyaXRlbChpLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7CisJCWl4Z2JlX3JlbGVhc2VfcnhfZGVzYygmYWRhcHRlci0+aHcsIHJ4X3JpbmcsIGkpOwogCX0KIH0KIApAQCAtNTc0LDEwICs2MjYsMTEgQEAKIAlyZXR1cm4gcnhfZGVzYy0+d2IubG93ZXIubG9fZHdvcmQuaHNfcnNzLnBrdF9pbmZvOwogfQogCi1zdGF0aWMgYm9vbCBpeGdiZV9jbGVhbl9yeF9pcnEoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCitzdGF0aWMgYm9vbCBpeGdiZV9jbGVhbl9yeF9pcnEoc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCiB7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAJdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MsICpuZXh0X3J4ZDsKIAlzdHJ1Y3QgaXhnYmVfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbywgKm5leHRfYnVmZmVyOwpAQCAtNjc4LDcgKzczMSw3IEBACiAJCXRvdGFsX3J4X3BhY2tldHMrKzsKIAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBhZGFwdGVyLT5uZXRkZXYpOwotCQlpeGdiZV9yZWNlaXZlX3NrYihhZGFwdGVyLCBza2IsIHN0YXRlcnIsIHJ4X3JpbmcsIHJ4X2Rlc2MpOworCQlpeGdiZV9yZWNlaXZlX3NrYihxX3ZlY3Rvciwgc2tiLCBzdGF0ZXJyLCByeF9kZXNjKTsKIAogbmV4dF9kZXNjOgogCQlyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IgPSAwOwpAQCAtNjk2LDExICs3NDksNiBAQAogCQlzdGF0ZXJyID0gbGUzMl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIuc3RhdHVzX2Vycm9yKTsKIAl9CiAKLQlpZiAocnhfcmluZy0+bHJvX3VzZWQpIHsKLQkJbHJvX2ZsdXNoX2FsbCgmcnhfcmluZy0+bHJvX21ncik7Ci0JCXJ4X3JpbmctPmxyb191c2VkID0gZmFsc2U7Ci0JfQotCiAJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IGk7CiAJY2xlYW5lZF9jb3VudCA9IElYR0JFX0RFU0NfVU5VU0VEKHJ4X3JpbmcpOwogCkBAIC03MzEsNyArNzc5LDggQEAKIAogCXFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOwogCi0JLyogUG9wdWxhdGUgdGhlIElWQVIgdGFibGUgYW5kIHNldCB0aGUgSVRSIHZhbHVlcyB0byB0aGUKKwkvKgorCSAqIFBvcHVsYXRlIHRoZSBJVkFSIHRhYmxlIGFuZCBzZXQgdGhlIElUUiB2YWx1ZXMgdG8gdGhlCiAJICogY29ycmVzcG9uZGluZyByZWdpc3Rlci4KIAkgKi8KIAlmb3IgKHZfaWR4ID0gMDsgdl9pZHggPCBxX3ZlY3RvcnM7IHZfaWR4KyspIHsKQEAgLTc0Miw3ICs3OTEsNyBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKIAkJCWogPSBhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XS5yZWdfaWR4OwotCQkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9SWF9RVUVVRShqKSwgdl9pZHgpOworCQkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgMCwgaiwgdl9pZHgpOwogCQkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT5yeHJfaWR4LAogCQkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgcl9pZHggKyAxKTsKQEAgLTc1Miw3ICs4MDEsNyBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+dHhyX2NvdW50OyBpKyspIHsKIAkJCWogPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XS5yZWdfaWR4OwotCQkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9UWF9RVUVVRShqKSwgdl9pZHgpOworCQkJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgMSwgaiwgdl9pZHgpOwogCQkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT50eHJfaWR4LAogCQkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgcl9pZHggKyAxKTsKQEAgLTc2MSwxNSArODEwLDIzIEBACiAJCS8qIGlmIHRoaXMgaXMgYSB0eCBvbmx5IHZlY3RvciBoYWx2ZSB0aGUgaW50ZXJydXB0IHJhdGUgKi8KIAkJaWYgKHFfdmVjdG9yLT50eHJfY291bnQgJiYgIXFfdmVjdG9yLT5yeHJfY291bnQpCiAJCQlxX3ZlY3Rvci0+ZWl0ciA9IChhZGFwdGVyLT5laXRyX3BhcmFtID4+IDEpOwotCQllbHNlCisJCWVsc2UgaWYgKHFfdmVjdG9yLT5yeHJfY291bnQpCiAJCQkvKiByeCBvbmx5ICovCiAJCQlxX3ZlY3Rvci0+ZWl0ciA9IGFkYXB0ZXItPmVpdHJfcGFyYW07CiAKKwkJLyoKKwkJICogc2luY2UgdGhpcyBpcyBpbml0aWFsIHNldCB1cCBkb24ndCBuZWVkIHRvIGNhbGwKKwkJICogaXhnYmVfd3JpdGVfZWl0ciBoZWxwZXIKKwkJICovCiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJVFIodl9pZHgpLAogCQkgICAgICAgICAgICAgICAgRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKHFfdmVjdG9yLT5laXRyKSk7CiAJfQogCi0JaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9PVEhFUl9DQVVTRVNfSU5ERVgsIHZfaWR4KTsKKwlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIC0xLCBJWEdCRV9JVkFSX09USEVSX0NBVVNFU19JTkRFWCwKKwkJICAgICAgICAgICAgICAgdl9pZHgpOworCWVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCAtMSwgMSwgdl9pZHgpOwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJVFIodl9pZHgpLCAxOTUwKTsKIAogCS8qIHNldCB1cCB0byBhdXRvY2xlYXIgdGltZXIsIGFuZCB0aGUgdmVjdG9ycyAqLwpAQCAtODQ1LDEwICs5MDIsMzUgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCisvKioKKyAqIGl4Z2JlX3dyaXRlX2VpdHIgLSB3cml0ZSBFSVRSIHJlZ2lzdGVyIGluIGhhcmR3YXJlIHNwZWNpZmljIHdheQorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBzdHJ1Y3QKKyAqIEB2X2lkeDogdmVjdG9yIGluZGV4IGludG8gcV92ZWN0b3IgYXJyYXkKKyAqIEBpdHJfcmVnOiBuZXcgdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiAqcmVnaXN0ZXIqIGZvcm1hdCwgbm90IGludHMvcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbWFkZSB0byBiZSBjYWxsZWQgYnkgZXRodG9vbCBhbmQgYnkgdGhlIGRyaXZlcgorICogd2hlbiBpdCBuZWVkcyB0byB1cGRhdGUgRUlUUiByZWdpc3RlcnMgYXQgcnVudGltZS4gIEhhcmR3YXJlCisgKiBzcGVjaWZpYyBxdWlya3MvZGlmZmVyZW5jZXMgYXJlIHRha2VuIGNhcmUgb2YgaGVyZS4KKyAqLwordm9pZCBpeGdiZV93cml0ZV9laXRyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBpbnQgdl9pZHgsIHUzMiBpdHJfcmVnKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCS8qIG11c3Qgd3JpdGUgaGlnaCBhbmQgbG93IDE2IGJpdHMgdG8gcmVzZXQgY291bnRlciAqLworCQlpdHJfcmVnIHw9IChpdHJfcmVnIDw8IDE2KTsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCS8qCisJCSAqIHNldCB0aGUgV0RJUyBiaXQgdG8gbm90IGNsZWFyIHRoZSB0aW1lciBiaXRzIGFuZCBjYXVzZSBhbgorCQkgKiBpbW1lZGlhdGUgYXNzZXJ0aW9uIG9mIHRoZSBpbnRlcnJ1cHQKKwkJICovCisJCWl0cl9yZWcgfD0gSVhHQkVfRUlUUl9DTlRfV0RJUzsKKwl9CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSVRSKHZfaWR4KSwgaXRyX3JlZyk7Cit9CisKIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF9pdHJfbXNpeChzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgbmV3X2l0cjsKIAl1OCBjdXJyZW50X2l0ciwgcmV0X2l0cjsKIAlpbnQgaSwgcl9pZHgsIHZfaWR4ID0gKCh2b2lkICopcV92ZWN0b3IgLSAodm9pZCAqKShhZGFwdGVyLT5xX3ZlY3RvcikpIC8KQEAgLTkwMywxNCArOTg1LDEzIEBACiAKIAlpZiAobmV3X2l0ciAhPSBxX3ZlY3Rvci0+ZWl0cikgewogCQl1MzIgaXRyX3JlZzsKKworCQkvKiBzYXZlIHRoZSBhbGdvcml0aG0gdmFsdWUgaGVyZSwgbm90IHRoZSBzbW9vdGhlZCBvbmUgKi8KKwkJcV92ZWN0b3ItPmVpdHIgPSBuZXdfaXRyOwogCQkvKiBkbyBhbiBleHBvbmVudGlhbCBzbW9vdGhpbmcgKi8KIAkJbmV3X2l0ciA9ICgocV92ZWN0b3ItPmVpdHIgKiA5MCkvMTAwKSArICgobmV3X2l0ciAqIDEwKS8xMDApOwotCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CiAJCWl0cl9yZWcgPSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcobmV3X2l0cik7Ci0JCS8qIG11c3Qgd3JpdGUgaGlnaCBhbmQgbG93IDE2IGJpdHMgdG8gcmVzZXQgY291bnRlciAqLwotCQlEUFJJTlRLKFRYX0VSUiwgREVCVUcsICJ3cml0aW5nIGVpdHIoJWQpOiAlMDhYXG4iLCB2X2lkeCwKLQkJICAgICAgICBpdHJfcmVnKTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSVRSKHZfaWR4KSwgaXRyX3JlZyB8IChpdHJfcmVnKTw8MTYpOworCQlpeGdiZV93cml0ZV9laXRyKGFkYXB0ZXIsIHZfaWR4LCBpdHJfcmVnKTsKIAl9CiAKIAlyZXR1cm47CkBAIC05MjgsNiArMTAwOSwyNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgaXhnYmVfY2hlY2tfc2ZwX2V2ZW50KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgZWljcikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAxKSB7CisJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0dQSV9TRFAxKTsKKwkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwl9IGVsc2UgaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0dQSV9TRFAyKSB7CisJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNSLCBJWEdCRV9FSUNSX0dQSV9TRFAyKTsKKwkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CisJfSBlbHNlIHsKKwkJLyogSW50ZXJydXB0IGlzbid0IGZvciB1cy4uLiAqLworCQlyZXR1cm47CisJfQorfQorCiBzdGF0aWMgdm9pZCBpeGdiZV9jaGVja19sc2Moc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKQEAgLTk0NiwxMyArMTA0NSwyNSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkYXRhOwogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiBlaWNyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0VJQ1IpOworCXUzMiBlaWNyOworCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBTaWxpY29uIGVycmF0YS4gIFVzZSBjbGVhci1ieS13cml0ZSBpbnN0ZWFkCisJICogb2YgY2xlYXItYnktcmVhZC4gIFJlYWRpbmcgd2l0aCBFSUNTIHdpbGwgcmV0dXJuIHRoZQorCSAqIGludGVycnVwdCBjYXVzZXMgd2l0aG91dCBjbGVhcmluZywgd2hpY2ggbGF0ZXIgYmUgZG9uZQorCSAqIHdpdGggdGhlIHdyaXRlIHRvIEVJQ1IuCisJICovCisJZWljciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FSUNTKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1IsIGVpY3IpOwogCiAJaWYgKGVpY3IgJiBJWEdCRV9FSUNSX0xTQykKIAkJaXhnYmVfY2hlY2tfbHNjKGFkYXB0ZXIpOwogCi0JaXhnYmVfY2hlY2tfZmFuX2ZhaWx1cmUoYWRhcHRlciwgZWljcik7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJaXhnYmVfY2hlY2tfZmFuX2ZhaWx1cmUoYWRhcHRlciwgZWljcik7CiAKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlpeGdiZV9jaGVja19zZnBfZXZlbnQoYWRhcHRlciwgZWljcik7CiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlNUywgSVhHQkVfRUlNU19PVEhFUik7CiAKQEAgLTEwMTUsNyArMTEyNiw3IEBACiAJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOwogCS8qIGRpc2FibGUgaW50ZXJydXB0cyBvbiB0aGlzIHZlY3RvciBvbmx5ICovCiAJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQywgcnhfcmluZy0+dl9pZHgpOwotCW5ldGlmX3J4X3NjaGVkdWxlKCZxX3ZlY3Rvci0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmcV92ZWN0b3ItPm5hcGkpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTA1MiwxMiArMTE2MywxMiBAQAogCQlpeGdiZV91cGRhdGVfcnhfZGNhKGFkYXB0ZXIsIHJ4X3JpbmcpOwogI2VuZGlmCiAKLQlpeGdiZV9jbGVhbl9yeF9pcnEoYWRhcHRlciwgcnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKKwlpeGdiZV9jbGVhbl9yeF9pcnEocV92ZWN0b3IsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKIAkvKiBJZiBhbGwgUnggd29yayBkb25lLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKQorCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAxKQogCQkJaXhnYmVfc2V0X2l0cl9tc2l4KHFfdmVjdG9yKTsKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLCByeF9yaW5nLT52X2lkeCk7CkBAIC0xMDk1LDcgKzEyMDYsNyBAQAogCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQV9FTkFCTEVEKQogCQkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCByeF9yaW5nKTsKICNlbmRpZgotCQlpeGdiZV9jbGVhbl9yeF9pcnEoYWRhcHRlciwgcnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKKwkJaXhnYmVfY2xlYW5fcnhfaXJxKHFfdmVjdG9yLCByeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOwogCQllbmFibGVfbWFzayB8PSByeF9yaW5nLT52X2lkeDsKIAkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzLAogCQkgICAgICAgICAgICAgICAgICAgICAgcl9pZHggKyAxKTsKQEAgLTExMDUsOCArMTIxNiw4IEBACiAJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOwogCS8qIElmIGFsbCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7Ci0JCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpCisJCW5hcGlfY29tcGxldGUobmFwaSk7CisJCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyAmIDEpCiAJCQlpeGdiZV9zZXRfaXRyX21zaXgocV92ZWN0b3IpOwogCQlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIGVuYWJsZV9tYXNrKTsKQEAgLTEyNzYsNyArMTM4Nyw2IEBACiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3NldF9pdHIoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IgKnFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3I7CiAJdTggY3VycmVudF9pdHI7CiAJdTMyIG5ld19pdHIgPSBxX3ZlY3Rvci0+ZWl0cjsKQEAgLTEzMTEsMzUgKzE0MjEsMTkgQEAKIAogCWlmIChuZXdfaXRyICE9IHFfdmVjdG9yLT5laXRyKSB7CiAJCXUzMiBpdHJfcmVnOworCisJCS8qIHNhdmUgdGhlIGFsZ29yaXRobSB2YWx1ZSBoZXJlLCBub3QgdGhlIHNtb290aGVkIG9uZSAqLworCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CiAJCS8qIGRvIGFuIGV4cG9uZW50aWFsIHNtb290aGluZyAqLwogCQluZXdfaXRyID0gKChxX3ZlY3Rvci0+ZWl0ciAqIDkwKS8xMDApICsgKChuZXdfaXRyICogMTApLzEwMCk7Ci0JCXFfdmVjdG9yLT5laXRyID0gbmV3X2l0cjsKIAkJaXRyX3JlZyA9IEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhuZXdfaXRyKTsKLQkJLyogbXVzdCB3cml0ZSBoaWdoIGFuZCBsb3cgMTYgYml0cyB0byByZXNldCBjb3VudGVyICovCi0JCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlUUigwKSwgaXRyX3JlZyB8IChpdHJfcmVnKTw8MTYpOworCQlpeGdiZV93cml0ZV9laXRyKGFkYXB0ZXIsIDAsIGl0cl9yZWcpOwogCX0KIAogCXJldHVybjsKIH0KIAogLyoqCi0gKiBpeGdiZV9pcnFfZGlzYWJsZSAtIE1hc2sgb2ZmIGludGVycnVwdCBnZW5lcmF0aW9uIG9uIHRoZSBOSUMKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQotICoqLwotc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX2lycV9kaXNhYmxlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQotewotCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIH4wKTsKLQlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9yczsgaSsrKQotCQkJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IpOwotCX0gZWxzZSB7Ci0JCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOwotCX0KLX0KLQotLyoqCiAgKiBpeGdiZV9pcnFfZW5hYmxlIC0gRW5hYmxlIGRlZmF1bHQgaW50ZXJydXB0IGdlbmVyYXRpb24gc2V0dGluZ3MKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwpAQCAtMTM0OSw3ICsxNDQzLDIxIEBACiAJbWFzayA9IElYR0JFX0VJTVNfRU5BQkxFX01BU0s7CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GQU5fRkFJTF9DQVBBQkxFKQogCQltYXNrIHw9IElYR0JFX0VJTVNfR1BJX1NEUDE7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCW1hc2sgfD0gSVhHQkVfRUlNU19FQ0M7CisJCW1hc2sgfD0gSVhHQkVfRUlNU19HUElfU0RQMTsKKwkJbWFzayB8PSBJWEdCRV9FSU1TX0dQSV9TRFAyOworCX0KKwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVMsIG1hc2spOworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkvKiBlbmFibGUgdGhlIHJlc3Qgb2YgdGhlIHF1ZXVlIHZlY3RvcnMgKi8KKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNU19FWCgxKSwKKwkJICAgICAgICAgICAgICAgIChJWEdCRV9FSU1TX1JUWF9RVUVVRSA8PCAxNikpOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TX0VYKDIpLAorCQkgICAgICAgICAgICAgICAgKChJWEdCRV9FSU1TX1JUWF9RVUVVRSA8PCAxNikgfAorCQkgICAgICAgICAgICAgICAgICBJWEdCRV9FSU1TX1JUWF9RVUVVRSkpOworCX0KIAlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwogfQogCkBAIC0xMzY1LDYgKzE0NzMsMTIgQEAKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXUzMiBlaWNyOwogCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBzaWxpY29uIGVycmF0YS4gIE1hc2sgdGhlIGludGVycnVwdHMKKwkgKiBiZWZvcmUgdGhlIHJlYWQgb2YgRUlDUi4KKwkgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJTUMsIElYR0JFX0lSUV9DTEVBUl9NQVNLKTsKKwogCS8qIGZvciBOQVBJLCB1c2luZyBFSUFNIHRvIGF1dG8tbWFzayB0eC9yeCBpbnRlcnJ1cHQgYml0cyBvbiByZWFkCiAJICogdGhlcmVmb3JlIG5vIGV4cGxpY3QgaW50ZXJydXB0IGRpc2FibGUgaXMgbmVjZXNzYXJ5ICovCiAJZWljciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9FSUNSKTsKQEAgLTEzNzksMTUgKzE0OTMsMTggQEAKIAlpZiAoZWljciAmIElYR0JFX0VJQ1JfTFNDKQogCQlpeGdiZV9jaGVja19sc2MoYWRhcHRlcik7CiAKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQlpeGdiZV9jaGVja19zZnBfZXZlbnQoYWRhcHRlciwgZWljcik7CisKIAlpeGdiZV9jaGVja19mYW5fZmFpbHVyZShhZGFwdGVyLCBlaWNyKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZhZGFwdGVyLT5xX3ZlY3RvclswXS5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmFkYXB0ZXItPnFfdmVjdG9yWzBdLm5hcGkpKSB7CiAJCWFkYXB0ZXItPnR4X3JpbmdbMF0udG90YWxfcGFja2V0cyA9IDA7CiAJCWFkYXB0ZXItPnR4X3JpbmdbMF0udG90YWxfYnl0ZXMgPSAwOwogCQlhZGFwdGVyLT5yeF9yaW5nWzBdLnRvdGFsX3BhY2tldHMgPSAwOwogCQlhZGFwdGVyLT5yeF9yaW5nWzBdLnRvdGFsX2J5dGVzID0gMDsKIAkJLyogd291bGQgZGlzYWJsZSBpbnRlcnJ1cHRzIGhlcmUgYnV0IEVJQU0gZGlzYWJsZWQgaXQgKi8KLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmYWRhcHRlci0+cV92ZWN0b3JbMF0ubmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+cV92ZWN0b3JbMF0ubmFwaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTQ1OSw2ICsxNTc2LDM5IEBACiB9CiAKIC8qKgorICogaXhnYmVfaXJxX2Rpc2FibGUgLSBNYXNrIG9mZiBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBvbiB0aGUgTklDCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9pcnFfZGlzYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DLCB+MCk7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUNfRVgoMSksIH4wKTsKKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNQ19FWCgyKSwgfjApOworCX0KKwlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9yczsgaSsrKQorCQkJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IpOworCX0gZWxzZSB7CisJCXN5bmNocm9uaXplX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JlX2lycV9lbmFibGVfcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBtYXNrID0gSVhHQkVfRUlNU19SVFhfUVVFVUU7CisJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRUlNUywgbWFzayk7CisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTVNfRVgoMSksIG1hc2sgPDwgMTYpOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TX0VYKDIpLAorCQkgICAgICAgICAgICAgICAgKG1hc2sgPDwgMTYgfCBtYXNrKSk7CisJfQorCS8qIHNraXAgdGhlIGZsdXNoICovCit9CisKKy8qKgogICogaXhnYmVfY29uZmlndXJlX21zaV9hbmRfbGVnYWN5IC0gSW5pdGlhbGl6ZSBQSU4gKElOVEEuLi4pIGFuZCBNU0kgaW50ZXJydXB0cwogICoKICAqKi8KQEAgLTE0NjksOCArMTYxOSw4IEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSVRSKDApLAogCSAgICAgICAgICAgICAgICBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcoYWRhcHRlci0+ZWl0cl9wYXJhbSkpOwogCi0JaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9SWF9RVUVVRSgwKSwgMCk7Ci0JaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgSVhHQkVfSVZBUl9UWF9RVUVVRSgwKSwgMCk7CisJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgMCwgMCwgMCk7CisJaXhnYmVfc2V0X2l2YXIoYWRhcHRlciwgMSwgMCwgMCk7CiAKIAltYXBfdmVjdG9yX3RvX3J4cShhZGFwdGVyLCAwLCAwKTsKIAltYXBfdmVjdG9yX3RvX3R4cShhZGFwdGVyLCAwLCAwKTsKQEAgLTE0ODYsNyArMTYzNiw3IEBACiAgKiovCiBzdGF0aWMgdm9pZCBpeGdiZV9jb25maWd1cmVfdHgoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JdTY0IHRkYmEsIHRkd2JhOworCXU2NCB0ZGJhOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTMyIGksIGosIHRkbGVuLCB0eGN0cmw7CiAKQEAgLTE0OTksMTEgKzE2NDksNiBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1REQkFMKGopLAogCQkgICAgICAgICAgICAgICAgKHRkYmEgJiBETUFfMzJCSVRfTUFTSykpOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1REQkFIKGopLCAodGRiYSA+PiAzMikpOwotCQl0ZHdiYSA9IHJpbmctPmRtYSArCi0JCSAgICAgICAgKHJpbmctPmNvdW50ICogc2l6ZW9mKHVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjKSk7Ci0JCXRkd2JhIHw9IElYR0JFX1REV0JBTF9IRUFEX1dCX0VOQUJMRTsKLQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFdCQUwoaiksIHRkd2JhICYgRE1BXzMyQklUX01BU0spOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1REV0JBSChqKSwgKHRkd2JhID4+IDMyKSk7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERMRU4oaiksIHRkbGVuKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9UREgoaiksIDApOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1REVChqKSwgMCk7CkBAIC0xNTE2LDI2ICsxNjYxLDI1IEBACiAJCXR4Y3RybCAmPSB+SVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTjsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9EQ0FfVFhDVFJMKGopLCB0eGN0cmwpOwogCX0KKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCS8qIFdlIGVuYWJsZSA4IHRyYWZmaWMgY2xhc3NlcywgRENCIG9ubHkgKi8KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVRRQywgKElYR0JFX01UUUNfUlRfRU5BIHwKKwkJCSAgICAgICAgICAgICAgICBJWEdCRV9NVFFDXzhUQ184VFEpKTsKKwl9CiB9CiAKLSNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFSERSU0laRV9TSElGVAkyCisjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQgMgogCiBzdGF0aWMgdm9pZCBpeGdiZV9jb25maWd1cmVfc3JyY3RsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3Jpbmc7CiAJdTMyIHNycmN0bDsKLQlpbnQgcXVldWUwOworCWludCBxdWV1ZTAgPSAwOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAotCS8qIHByb2dyYW0gb25lIHNycmN0bCByZWdpc3RlciBwZXIgVk1EcSBpbmRleCAqLwotCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfVk1EUV9FTkFCTEVEKSB7Ci0JCWxvbmcgc2hpZnQsIGxlbjsKLQkJbWFzayA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10ubWFzazsKLQkJbGVuID0gc2l6ZW9mKGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfVk1EUV0ubWFzaykgKiA4OwotCQlzaGlmdCA9IGZpbmRfZmlyc3RfYml0KCZtYXNrLCBsZW4pOwotCQlxdWV1ZTAgPSBpbmRleCAmIG1hc2s7Ci0JCWluZGV4ID0gKGluZGV4ICYgbWFzaykgPj4gc2hpZnQ7Ci0JLyogcHJvZ3JhbSBvbmUgc3JyY3RsIHBlciBSU1MgcXVldWUgc2luY2UgUkRSWENUTC5NVk1FTiBpcyBlbmFibGVkICovCisJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCXF1ZXVlMCA9IGluZGV4OwogCX0gZWxzZSB7CiAJCW1hc2sgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9SU1NdLm1hc2s7CiAJCXF1ZXVlMCA9IGluZGV4ICYgbWFzazsKQEAgLTE1NTAsNyArMTY5NCwxNCBAQAogCXNycmN0bCAmPSB+SVhHQkVfU1JSQ1RMX0JTSVpFUEtUX01BU0s7CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQpIHsKLQkJc3JyY3RsIHw9IElYR0JFX1JYQlVGRkVSXzIwNDggPj4gSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOworCQl1MTYgYnVmc3ogPSBJWEdCRV9SWEJVRkZFUl8yMDQ4OworCQkvKiBncm93IHRoZSBhbW91bnQgd2UgY2FuIHJlY2VpdmUgb24gbGFyZ2UgcGFnZSBtYWNoaW5lcyAqLworCQlpZiAoYnVmc3ogPCAoUEFHRV9TSVpFIC8gMikpCisJCQlidWZzeiA9IChQQUdFX1NJWkUgLyAyKTsKKwkJLyogY2FwIHRoZSBidWZzeiBhdCBvdXIgbGFyZ2VzdCBkZXNjcmlwdG9yIHNpemUgKi8KKwkJYnVmc3ogPSBtaW4oKHUxNilJWEdCRV9NQVhfUlhCVUZGRVIsIGJ1ZnN6KTsKKworCQlzcnJjdGwgfD0gYnVmc3ogPj4gSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOwogCQlzcnJjdGwgfD0gSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0hEUl9TUExJVF9BTFdBWVM7CiAJCXNycmN0bCB8PSAoKElYR0JFX1JYX0hEUl9TSVpFIDw8CiAJCSAgICAgICAgICAgIElYR0JFX1NSUkNUTF9CU0laRUhEUlNJWkVfU0hJRlQpICYKQEAgLTE1NjUsNDAgKzE3MTYsMTEgQEAKIAkJCXNycmN0bCB8PSByeF9yaW5nLT5yeF9idWZfbGVuID4+CiAJCQkgICAgICAgICAgSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOwogCX0KKwogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1NSUkNUTChpbmRleCksIHNycmN0bCk7CiB9CiAKIC8qKgotICogaXhnYmVfZ2V0X3NrYl9oZHIgLSBoZWxwZXIgZnVuY3Rpb24gZm9yIExSTyBoZWFkZXIgcHJvY2Vzc2luZwotICogQHNrYjogcG9pbnRlciB0byBza19idWZmIHRvIGJlIGFkZGVkIHRvIExSTyBwYWNrZXQKLSAqIEBpcGhkcjogcG9pbnRlciB0byBpcCBoZWFkZXIgc3RydWN0dXJlCi0gKiBAdGNwaDogcG9pbnRlciB0byB0Y3AgaGVhZGVyIHN0cnVjdHVyZQotICogQGhkcl9mbGFnczogcG9pbnRlciB0byBoZWFkZXIgZmxhZ3MKLSAqIEBwcml2OiBwcml2YXRlIGRhdGEKLSAqKi8KLXN0YXRpYyBpbnQgaXhnYmVfZ2V0X3NrYl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqKmlwaGRyLCB2b2lkICoqdGNwaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCi17Ci0JdW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MgPSBwcml2OwotCi0JLyogVmVyaWZ5IHRoYXQgdGhpcyBpcyBhIHZhbGlkIElQdjQgVENQIHBhY2tldCAqLwotCWlmICghKChpeGdiZV9nZXRfcGt0X2luZm8ocnhfZGVzYykgJiBJWEdCRV9SWERBRFZfUEtUVFlQRV9JUFY0KSAmJgotCSAgICAgKGl4Z2JlX2dldF9wa3RfaW5mbyhyeF9kZXNjKSAmIElYR0JFX1JYREFEVl9QS1RUWVBFX1RDUCkpKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBTZXQgbmV0d29yayBoZWFkZXJzICovCi0Jc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7Ci0Jc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgaXBfaGRybGVuKHNrYikpOwotCSppcGhkciA9IGlwX2hkcihza2IpOwotCSp0Y3BoID0gdGNwX2hkcihza2IpOwotCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNCB8IExST19UQ1A7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgUEFHRV9VU0VfQ09VTlQoUykgKCgoUykgPj4gUEFHRV9TSElGVCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoKChTKSAmIChQQUdFX1NJWkUgLSAxKSkgPyAxIDogMCkpCi0KLS8qKgogICogaXhnYmVfY29uZmlndXJlX3J4IC0gQ29uZmlndXJlIDgyNTl4IFJlY2VpdmUgVW5pdCBhZnRlciBSZXNldAogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCiAgKgpAQCAtMTYxNiw4ICsxNzM4LDcgQEAKIAkgICAgICAgICAgICAgICAgICAweEE1NEYyQkVDLCAweEVBNDlBRjdDLCAweEUyMTRBRDNELCAweEI4NTVBQUJFLAogCSAgICAgICAgICAgICAgICAgIDB4NkEzRTY3RUEsIDB4MTQzNjREMTcsIDB4M0JFRDIwMER9OwogCXUzMiBmY3RybCwgaGxyZWcwOwotCXUzMiBwYWdlczsKLQl1MzIgcmV0YSA9IDAsIG1ycWM7CisJdTMyIHJldGEgPSAwLCBtcnFjID0gMDsKIAl1MzIgcmRyeGN0bDsKIAlpbnQgcnhfYnVmX2xlbjsKIApAQCAtMTYyNyw2ICsxNzQ4LDE0IEBACiAJLyogU2V0IHRoZSBSWCBidWZmZXIgbGVuZ3RoIGFjY29yZGluZyB0byB0aGUgbW9kZSAqLwogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgewogCQlyeF9idWZfbGVuID0gSVhHQkVfUlhfSERSX1NJWkU7CisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCS8qIFBTUlRZUEUgbXVzdCBiZSBpbml0aWFsaXplZCBpbiA4MjU5OSAqLworCQkJdTMyIHBzcnR5cGUgPSBJWEdCRV9QU1JUWVBFX1RDUEhEUiB8CisJCQkgICAgICAgICAgICAgIElYR0JFX1BTUlRZUEVfVURQSERSIHwKKwkJCSAgICAgICAgICAgICAgSVhHQkVfUFNSVFlQRV9JUFY0SERSIHwKKwkJCSAgICAgICAgICAgICAgSVhHQkVfUFNSVFlQRV9JUFY2SERSOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QU1JUWVBFKDApLCBwc3J0eXBlKTsKKwkJfQogCX0gZWxzZSB7CiAJCWlmIChuZXRkZXYtPm10dSA8PSBFVEhfREFUQV9MRU4pCiAJCQlyeF9idWZfbGVuID0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkU7CkBAIC0xNjM3LDYgKzE3NjYsNyBAQAogCWZjdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9GQ1RSTCk7CiAJZmN0cmwgfD0gSVhHQkVfRkNUUkxfQkFNOwogCWZjdHJsIHw9IElYR0JFX0ZDVFJMX0RQRjsgLyogZGlzY2FyZCBwYXVzZSBmcmFtZXMgd2hlbiBGQyBlbmFibGVkICovCisJZmN0cmwgfD0gSVhHQkVfRkNUUkxfUE1DRjsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9GQ1RSTCwgZmN0cmwpOwogCiAJaGxyZWcwID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0hMUkVHMCk7CkBAIC0xNjQ2LDggKzE3NzYsNiBAQAogCQlobHJlZzAgfD0gSVhHQkVfSExSRUcwX0pVTUJPRU47CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9ITFJFRzAsIGhscmVnMCk7CiAKLQlwYWdlcyA9IFBBR0VfVVNFX0NPVU5UKGFkYXB0ZXItPm5ldGRldi0+bXR1KTsKLQogCXJkbGVuID0gYWRhcHRlci0+cnhfcmluZ1swXS5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyk7CiAJLyogZGlzYWJsZSByZWNlaXZlcyB3aGlsZSBzZXR0aW5nIHVwIHRoZSBkZXNjcmlwdG9ycyAqLwogCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENUUkwpOwpAQCAtMTY2NiwzNyArMTc5NCw0NCBAQAogCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmhlYWQgPSBJWEdCRV9SREgoaik7CiAJCWFkYXB0ZXItPnJ4X3JpbmdbaV0udGFpbCA9IElYR0JFX1JEVChqKTsKIAkJYWRhcHRlci0+cnhfcmluZ1tpXS5yeF9idWZfbGVuID0gcnhfYnVmX2xlbjsKLQkJLyogSW50aXRpYWwgTFJPIFNldHRpbmdzICovCi0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5tYXhfYWdnciA9IElYR0JFX01BWF9MUk9fQUdHUkVHQVRFOwotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IubWF4X2Rlc2MgPSBJWEdCRV9NQVhfTFJPX0RFU0NSSVBUT1JTOwotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IuZ2V0X3NrYl9oZWFkZXIgPSBpeGdiZV9nZXRfc2tiX2hkcjsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmZlYXR1cmVzID0gTFJPX0ZfRVhUUkFDVF9WTEFOX0lEOwotCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fTkVUUE9MTCkpCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IuZmVhdHVyZXMgfD0gTFJPX0ZfTkFQSTsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmRldiA9IGFkYXB0ZXItPm5ldGRldjsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5scm9fbWdyLmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmxyb19tZ3IuaXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAogCQlpeGdiZV9jb25maWd1cmVfc3JyY3RsKGFkYXB0ZXIsIGopOwogCX0KIAotCS8qCi0JICogRm9yIFZNRHEgc3VwcG9ydCBvZiBkaWZmZXJlbnQgZGVzY3JpcHRvciB0eXBlcyBvcgotCSAqIGJ1ZmZlciBzaXplcyB0aHJvdWdoIHRoZSB1c2Ugb2YgbXVsdGlwbGUgU1JSQ1RMCi0JICogcmVnaXN0ZXJzLCBSRFJYQ1RMLk1WTUVOIG11c3QgYmUgc2V0IHRvIDEKLQkgKgotCSAqIGFsc28sIHRoZSBtYW51YWwgZG9lc24ndCBtZW50aW9uIGl0IGNsZWFybHkgYnV0IERDQSBoaW50cwotCSAqIHdpbGwgb25seSB1c2UgcXVldWUgMCdzIHRhZ3MgdW5sZXNzIHRoaXMgYml0IGlzIHNldC4gIFNpZGUKLQkgKiBlZmZlY3RzIG9mIHNldHRpbmcgdGhpcyBiaXQgYXJlIG9ubHkgdGhhdCBTUlJDVEwgbXVzdCBiZQotCSAqIGZ1bGx5IHByb2dyYW1tZWQgWzAuLjE1XQotCSAqLwotCWlmIChhZGFwdGVyLT5mbGFncyAmCi0JICAgIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEIHwgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQpKSB7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkvKgorCQkgKiBGb3IgVk1EcSBzdXBwb3J0IG9mIGRpZmZlcmVudCBkZXNjcmlwdG9yIHR5cGVzIG9yCisJCSAqIGJ1ZmZlciBzaXplcyB0aHJvdWdoIHRoZSB1c2Ugb2YgbXVsdGlwbGUgU1JSQ1RMCisJCSAqIHJlZ2lzdGVycywgUkRSWENUTC5NVk1FTiBtdXN0IGJlIHNldCB0byAxCisJCSAqCisJCSAqIGFsc28sIHRoZSBtYW51YWwgZG9lc24ndCBtZW50aW9uIGl0IGNsZWFybHkgYnV0IERDQSBoaW50cworCQkgKiB3aWxsIG9ubHkgdXNlIHF1ZXVlIDAncyB0YWdzIHVubGVzcyB0aGlzIGJpdCBpcyBzZXQuICBTaWRlCisJCSAqIGVmZmVjdHMgb2Ygc2V0dGluZyB0aGlzIGJpdCBhcmUgb25seSB0aGF0IFNSUkNUTCBtdXN0IGJlCisJCSAqIGZ1bGx5IHByb2dyYW1tZWQgWzAuLjE1XQorCQkgKi8KIAkJcmRyeGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SRFJYQ1RMKTsKIAkJcmRyeGN0bCB8PSBJWEdCRV9SRFJYQ1RMX01WTUVOOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JEUlhDVEwsIHJkcnhjdGwpOwogCX0KIAorCS8qIFByb2dyYW0gTVJRQyBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiBxdWV1ZXMgKi8KKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCWludCBtYXNrID0gYWRhcHRlci0+ZmxhZ3MgJiAoCisJCQkJSVhHQkVfRkxBR19SU1NfRU5BQkxFRAorCQkJCXwgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRAorCQkJCSk7CisKKwkJc3dpdGNoIChtYXNrKSB7CisJCWNhc2UgKElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpOgorCQkJbXJxYyA9IElYR0JFX01SUUNfUlNTRU47CisJCQlicmVhazsKKwkJY2FzZSAoSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6CisJCQltcnFjID0gSVhHQkVfTVJRQ19SVDhUQ0VOOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSB7CiAJCS8qIEZpbGwgb3V0IHJlZGlyZWN0aW9uIHRhYmxlICovCiAJCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgMTI4OyBpKyssIGorKykgewpAQCAtMTcxMywxOSArMTg0OCwxNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKIAkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlNTUksoaSksIHNlZWRbaV0pOwogCi0JCW1ycWMgPSBJWEdCRV9NUlFDX1JTU0VOCisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCQltcnFjIHw9IElYR0JFX01SUUNfUlNTRU47CiAJCSAgICAvKiBQZXJmb3JtIGhhc2ggb24gdGhlc2UgcGFja2V0IHR5cGVzICovCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjQKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9UQ1AKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9VRFAKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9FWF9UQ1AKLQkJICAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9FWAotCQkgICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2Ci0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVENQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVURQCi0JCSAgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfRVhfVURQOwotCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01SUUMsIG1ycWMpOworCQltcnFjIHw9IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjQKKwkJICAgICAgfCBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY0X1RDUAorCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVURQCisJCSAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNgorCQkgICAgICB8IElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfVENQCisJCSAgICAgIHwgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNl9VRFA7CiAJfQorCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVJRQywgbXJxYyk7CiAKIAlyeGNzdW0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDU1VNKTsKIApAQCAtMTc0Miw2ICsxODc1LDEyIEBACiAJfQogCiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWENTVU0sIHJ4Y3N1bSk7CisKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCXJkcnhjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUkRSWENUTCk7CisJCXJkcnhjdGwgfD0gSVhHQkVfUkRSWENUTF9DUkNTVFJJUDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SRFJYQ1RMLCByZHJ4Y3RsKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQpAQCAtMTc3NSw2ICsxOTE0LDcgQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTMyIGN0cmw7CisJaW50IGksIGo7CiAKIAlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJaXhnYmVfaXJxX2Rpc2FibGUoYWRhcHRlcik7CkBAIC0xNzg2LDE4ICsxOTI2LDI0IEBACiAJICogbm90IGluIERDQiBtb2RlLgogCSAqLwogCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwpOwotCWN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WTUU7Ci0JY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKLQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMLCBjdHJsKTsKLQlpeGdiZV92bGFuX3J4X2FkZF92aWQobmV0ZGV2LCAwKTsKLQotCWlmIChncnApIHsKLQkJLyogZW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLwotCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMKTsKLQkJY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZNRTsKKwlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZNRSB8IElYR0JFX1ZMTkNUUkxfVkZFOwogCQljdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMLCBjdHJsKTsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCWN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WRkU7CisJCS8qIGVuYWJsZSBWTEFOIHRhZyBpbnNlcnQvc3RyaXAgKi8KKwkJY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfVkxOQ1RSTCk7CisJCWN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47CisJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwsIGN0cmwpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OworCQkJY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfUlhEQ1RMKGopKTsKKwkJCWN0cmwgfD0gSVhHQkVfUlhEQ1RMX1ZNRTsKKwkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JYRENUTChqKSwgY3RybCk7CisJCX0KIAl9CisJaXhnYmVfdmxhbl9yeF9hZGRfdmlkKG5ldGRldiwgMCk7CiAKIAlpZiAoIXRlc3RfYml0KF9fSVhHQkVfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJaXhnYmVfaXJxX2VuYWJsZShhZGFwdGVyKTsKQEAgLTE5NjAsOSArMjEwNiwyMSBAQAogCX0KIAkvKiBFbmFibGUgVkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCiAJdmxuY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTE5DVFJMKTsKLQl2bG5jdHJsIHw9IElYR0JFX1ZMTkNUUkxfVk1FIHwgSVhHQkVfVkxOQ1RSTF9WRkU7Ci0JdmxuY3RybCAmPSB+SVhHQkVfVkxOQ1RSTF9DRklFTjsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMTkNUUkwsIHZsbmN0cmwpOworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKKwkJdmxuY3RybCB8PSBJWEdCRV9WTE5DVFJMX1ZNRSB8IElYR0JFX1ZMTkNUUkxfVkZFOworCQl2bG5jdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMTkNUUkwsIHZsbmN0cmwpOworCX0gZWxzZSBpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCXZsbmN0cmwgfD0gSVhHQkVfVkxOQ1RSTF9WRkU7CisJCXZsbmN0cmwgJj0gfklYR0JFX1ZMTkNUUkxfQ0ZJRU47CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxOQ1RSTCwgdmxuY3RybCk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CisJCQl2bG5jdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYRENUTChqKSk7CisJCQl2bG5jdHJsIHw9IElYR0JFX1JYRENUTF9WTUU7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYRENUTChqKSwgdmxuY3RybCk7CisJCX0KKwl9CiAJaHctPm1hYy5vcHMuc2V0X3ZmdGEoJmFkYXB0ZXItPmh3LCAwLCAwLCB0cnVlKTsKIH0KIApAQCAtMTk5MywxMyArMjE1MSwxMTUgQEAKIAkJICAgICAgICAgICAgICAgICAgICAgICAoYWRhcHRlci0+cnhfcmluZ1tpXS5jb3VudCAtIDEpKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGl4Z2JlX2lzX3NmcChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXN3aXRjaCAoaHctPnBoeS50eXBlKSB7CisJY2FzZSBpeGdiZV9waHlfc2ZwX2F2YWdvOgorCWNhc2UgaXhnYmVfcGh5X3NmcF9mdGw6CisJY2FzZSBpeGdiZV9waHlfc2ZwX2ludGVsOgorCWNhc2UgaXhnYmVfcGh5X3NmcF91bmtub3duOgorCWNhc2UgaXhnYmVfcGh5X3R3X3R5Y286CisJY2FzZSBpeGdiZV9waHlfdHdfdW5rbm93bjoKKwkJcmV0dXJuIHRydWU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworLyoqCisgKiBpeGdiZV9zZnBfbGlua19jb25maWcgLSBzZXQgdXAgU0ZQKyBsaW5rCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBwcml2YXRlIGFkYXB0ZXIgc3RydWN0CisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9zZnBfbGlua19jb25maWcoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCQlpZiAoaHctPnBoeS5tdWx0aXNwZWVkX2ZpYmVyKSB7CisJCQkvKgorCQkJICogSW4gbXVsdGlzcGVlZCBmaWJlciBzZXR1cHMsIHRoZSBkZXZpY2UgbWF5IG5vdCBoYXZlCisJCQkgKiBoYWQgYSBwaHlzaWNhbCBjb25uZWN0aW9uIHdoZW4gdGhlIGRyaXZlciBsb2FkZWQuCisJCQkgKiBJZiB0aGF0J3MgdGhlIGNhc2UsIHRoZSBpbml0aWFsIGxpbmsgY29uZmlndXJhdGlvbgorCQkJICogY291bGRuJ3QgZ2V0IHRoZSBNQUMgaW50byAxMEcgb3IgMUcgbW9kZSwgc28gd2UnbGwKKwkJCSAqIG5ldmVyIGhhdmUgYSBsaW5rIHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0IGZpcmUuCisJCQkgKiBXZSBuZWVkIHRvIHRyeSBhbmQgZm9yY2UgYW4gYXV0b25lZ290aWF0aW9uCisJCQkgKiBzZXNzaW9uLCB0aGVuIGJyaW5nIHVwIGxpbmsuCisJCQkgKi8KKwkJCWh3LT5tYWMub3BzLnNldHVwX3NmcChodyk7CisJCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSykpCisJCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBEaXJlY3QgQXR0YWNoIEN1IGFuZCBub24tbXVsdGlzcGVlZCBmaWJlciBtb2R1bGVzCisJCQkgKiBzdGlsbCBuZWVkIHRvIGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkgcHJpb3IgdG8KKwkJCSAqIGF0dGVtcHRpbmcgbGluay4KKwkJCSAqLworCQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSykpCisJCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CisJCX0KK30KKworLyoqCisgKiBpeGdiZV9ub25fc2ZwX2xpbmtfY29uZmlnIC0gc2V0IHVwIG5vbi1TRlArIGxpbmsKKyAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgaW50IGl4Z2JlX25vbl9zZnBfbGlua19jb25maWcoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgYXV0b25lZzsKKwlib29sIGxpbmtfdXAgPSBmYWxzZTsKKwl1MzIgcmV0ID0gSVhHQkVfRVJSX0xJTktfU0VUVVA7CisKKwlpZiAoaHctPm1hYy5vcHMuY2hlY2tfbGluaykKKwkJcmV0ID0gaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJmF1dG9uZWcsICZsaW5rX3VwLCBmYWxzZSk7CisKKwlpZiAocmV0KQorCQlnb3RvIGxpbmtfY2ZnX291dDsKKworCWlmIChody0+bWFjLm9wcy5nZXRfbGlua19jYXBhYmlsaXRpZXMpCisJCXJldCA9IGh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcyhodywgJmF1dG9uZWcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHctPm1hYy5hdXRvbmVnKTsKKwlpZiAocmV0KQorCQlnb3RvIGxpbmtfY2ZnX291dDsKKworCWlmIChody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKQorCQlyZXQgPSBody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBhdXRvbmVnLCB0cnVlLCBsaW5rX3VwKTsKK2xpbmtfY2ZnX291dDoKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIElYR0JFX01BWF9SWF9ERVNDX1BPTEwgMTAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9yeF9kZXNjX3F1ZXVlX2VuYWJsZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByeHIpCit7CisJaW50IGogPSBhZGFwdGVyLT5yeF9yaW5nW3J4cl0ucmVnX2lkeDsKKwlpbnQgazsKKworCWZvciAoayA9IDA7IGsgPCBJWEdCRV9NQVhfUlhfREVTQ19QT0xMOyBrKyspIHsKKwkJaWYgKElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywKKwkJICAgICAgICAgICAgICAgICAgIElYR0JFX1JYRENUTChqKSkgJiBJWEdCRV9SWERDVExfRU5BQkxFKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCW1zbGVlcCgxKTsKKwl9CisJaWYgKGsgPj0gSVhHQkVfTUFYX1JYX0RFU0NfUE9MTCkgeworCQlEUFJJTlRLKERSViwgRVJSLCAiUlhEQ1RMLkVOQUJMRSBvbiBSeCBxdWV1ZSAlZCAiCisJCSAgICAgICAgIm5vdCBzZXQgd2l0aGluIHRoZSBwb2xsaW5nIHBlcmlvZFxuIiwgcnhyKTsKKwl9CisJaXhnYmVfcmVsZWFzZV9yeF9kZXNjKCZhZGFwdGVyLT5odywgJmFkYXB0ZXItPnJ4X3JpbmdbcnhyXSwKKwkgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnJ4X3JpbmdbcnhyXS5jb3VudCAtIDEpKTsKK30KKwogc3RhdGljIGludCBpeGdiZV91cF9jb21wbGV0ZShzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGksIGogPSAwOworCWludCBudW1fcnhfcmluZ3MgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCWludCBlcnI7CiAJaW50IG1heF9mcmFtZSA9IG5ldGRldi0+bXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNTX0xFTjsKIAl1MzIgdHhkY3RsLCByeGRjdGwsIG1oYWRkOworCXUzMiBkbWF0eGN0bDsKIAl1MzIgZ3BpZTsKIAogCWl4Z2JlX2dldF9od19jb250cm9sKGFkYXB0ZXIpOwpAQCAtMjAzMSw2ICsyMjkxLDEzIEBACiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR1BJRSwgZ3BpZSk7CiAJfQogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlncGllID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dQSUUpOworCQlncGllIHw9IElYR0JFX1NEUDFfR1BJRU47CisJCWdwaWUgfD0gSVhHQkVfU0RQMl9HUElFTjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9HUElFLCBncGllKTsKKwl9CisKIAltaGFkZCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NSEFERCk7CiAJaWYgKG1heF9mcmFtZSAhPSAobWhhZGQgPj4gSVhHQkVfTUhBRERfTUZTX1NISUZUKSkgewogCQltaGFkZCAmPSB+SVhHQkVfTUhBRERfTUZTX01BU0s7CkBAIC0yMDQ0LDExICsyMzExLDIzIEBACiAJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UWERDVEwoaikpOwogCQkvKiBlbmFibGUgV1RIUkVTSD04IGRlc2NyaXB0b3JzLCB0byBlbmNvdXJhZ2UgYnVyc3Qgd3JpdGViYWNrICovCiAJCXR4ZGN0bCB8PSAoOCA8PCAxNik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopLCB0eGRjdGwpOworCX0KKworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJLyogRE1BVFhDVEwuRU4gbXVzdCBiZSBzZXQgYWZ0ZXIgYWxsIFR4IHF1ZXVlIGNvbmZpZyBpcyBkb25lICovCisJCWRtYXR4Y3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0RNQVRYQ1RMKTsKKwkJZG1hdHhjdGwgfD0gSVhHQkVfRE1BVFhDVExfVEU7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRE1BVFhDVEwsIGRtYXR4Y3RsKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4OworCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopKTsKIAkJdHhkY3RsIHw9IElYR0JFX1RYRENUTF9FTkFCTEU7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopLCB0eGRjdGwpOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3J4X3JpbmdzOyBpKyspIHsKIAkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKIAkJcnhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYRENUTChqKSk7CiAJCS8qIGVuYWJsZSBQVEhSRVNIPTMyIGRlc2NyaXB0b3JzIChoYWxmIHRoZSBpbnRlcm5hbCBjYWNoZSkKQEAgLTIwNTcsMTkgKzIzMzYsMjIgQEAKIAkJcnhkY3RsIHw9IDB4MDAyMDsKIAkJcnhkY3RsIHw9IElYR0JFX1JYRENUTF9FTkFCTEU7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhEQ1RMKGopLCByeGRjdGwpOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKQorCQkJaXhnYmVfcnhfZGVzY19xdWV1ZV9lbmFibGUoYWRhcHRlciwgaSk7CiAJfQogCS8qIGVuYWJsZSBhbGwgcmVjZWl2ZXMgKi8KIAlyeGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhDVFJMKTsKLQlyeGRjdGwgfD0gKElYR0JFX1JYQ1RSTF9ETUJZUFMgfCBJWEdCRV9SWENUUkxfUlhFTik7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWENUUkwsIHJ4ZGN0bCk7CisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJcnhkY3RsIHw9IChJWEdCRV9SWENUUkxfRE1CWVBTIHwgSVhHQkVfUlhDVFJMX1JYRU4pOworCWVsc2UKKwkJcnhkY3RsIHw9IElYR0JFX1JYQ1RSTF9SWEVOOworCWh3LT5tYWMub3BzLmVuYWJsZV9yeF9kbWEoaHcsIHJ4ZGN0bCk7CiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkKIAkJaXhnYmVfY29uZmlndXJlX21zaXgoYWRhcHRlcik7CiAJZWxzZQogCQlpeGdiZV9jb25maWd1cmVfbXNpX2FuZF9sZWdhY3koYWRhcHRlcik7CiAKLQlpeGdiZV9uYXBpX2FkZF9hbGwoYWRhcHRlcik7Ci0KIAljbGVhcl9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwogCWl4Z2JlX25hcGlfZW5hYmxlX2FsbChhZGFwdGVyKTsKIApAQCAtMjA3OCw2ICsyMzYwLDI4IEBACiAKIAlpeGdiZV9pcnFfZW5hYmxlKGFkYXB0ZXIpOwogCisJLyoKKwkgKiBGb3IgaG90LXBsdWdnYWJsZSBTRlArIGRldmljZXMsIGEgbmV3IFNGUCsgbW9kdWxlIG1heSBoYXZlCisJICogYXJyaXZlZCBiZWZvcmUgaW50ZXJydXB0cyB3ZXJlIGVuYWJsZWQuICBXZSBuZWVkIHRvIGtpY2sgb2ZmCisJICogdGhlIFNGUCsgbW9kdWxlIHNldHVwIGZpcnN0LCB0aGVuIHRyeSB0byBicmluZyB1cCBsaW5rLgorCSAqIElmIHdlJ3JlIG5vdCBob3QtcGx1Z2dhYmxlIFNGUCssIHdlIGp1c3QgbmVlZCB0byBjb25maWd1cmUgbGluaworCSAqIGFuZCBicmluZyBpdCB1cC4KKwkgKi8KKwllcnIgPSBody0+cGh5Lm9wcy5pZGVudGlmeShodyk7CisJaWYgKGVyciA9PSBJWEdCRV9FUlJfU0ZQX05PVF9TVVBQT1JURUQpIHsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLCAiUEhZIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBOSUMgJWRcbiIsIGVycik7CisJCWl4Z2JlX2Rvd24oYWRhcHRlcik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGl4Z2JlX2lzX3NmcChodykpIHsKKwkJaXhnYmVfc2ZwX2xpbmtfY29uZmlnKGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCWVyciA9IGl4Z2JlX25vbl9zZnBfbGlua19jb25maWcoaHcpOworCQlpZiAoZXJyKQorCQkJRFBSSU5USyhQUk9CRSwgRVJSLCAibGlua19jb25maWcgRkFJTEVEICVkXG4iLCBlcnIpOworCX0KKwogCS8qIGVuYWJsZSB0cmFuc21pdHMgKi8KIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CiAKQEAgLTIxMDQsNiArMjQwOCw4IEBACiAJLyogaGFyZHdhcmUgaGFzIGJlZW4gcmVzZXQsIHdlIG5lZWQgdG8gcmVsb2FkIHNvbWUgdGhpbmdzICovCiAJaXhnYmVfY29uZmlndXJlKGFkYXB0ZXIpOwogCisJaXhnYmVfbmFwaV9hZGRfYWxsKGFkYXB0ZXIpOworCiAJcmV0dXJuIGl4Z2JlX3VwX2NvbXBsZXRlKGFkYXB0ZXIpOwogfQogCkBAIC0yMTY1LDggKzI0NzEsMTAgQEAKIAlyeF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKIAlyeF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CiAKLQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJ4X3JpbmctPmhlYWQpOwotCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7CisJaWYgKHJ4X3JpbmctPmhlYWQpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+aGVhZCk7CisJaWYgKHJ4X3JpbmctPnRhaWwpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7CiB9CiAKIC8qKgpAQCAtMjE5Nyw4ICsyNTA1LDEwIEBACiAJdHhfcmluZy0+bmV4dF90b191c2UgPSAwOwogCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOwogCi0Jd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT5oZWFkKTsKLQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRhaWwpOworCWlmICh0eF9yaW5nLT5oZWFkKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPmhlYWQpOworCWlmICh0eF9yaW5nLT50YWlsKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRhaWwpOwogfQogCiAvKioKQEAgLTIyNjEsNiArMjU3MSwxMSBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChqKSwKIAkJICAgICAgICAgICAgICAgICh0eGRjdGwgJiB+SVhHQkVfVFhEQ1RMX0VOQUJMRSkpOwogCX0KKwkvKiBEaXNhYmxlIHRoZSBUeCBETUEgZW5naW5lIG9uIDgyNTk5ICovCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9ETUFUWENUTCwKKwkJICAgICAgICAgICAgICAgIChJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRE1BVFhDVEwpICYKKwkJICAgICAgICAgICAgICAgICB+SVhHQkVfRE1BVFhDVExfVEUpKTsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAKQEAgLTIyOTcsMTAgKzI2MTIsMTAgQEAKICAqKi8KIHN0YXRpYyBpbnQgaXhnYmVfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0Jc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IGNvbnRhaW5lcl9vZihuYXBpLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9xX3ZlY3RvciwgbmFwaSk7CisJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9CisJICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBpeGdiZV9xX3ZlY3RvciwgbmFwaSk7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKLQlpbnQgdHhfY2xlYW5lZCwgd29ya19kb25lID0gMDsKKwlpbnQgdHhfY2xlYW5fY29tcGxldGUsIHdvcmtfZG9uZSA9IDA7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkgewpAQCAtMjMwOSwxOSArMjYyNCwxOSBAQAogCX0KICNlbmRpZgogCi0JdHhfY2xlYW5lZCA9IGl4Z2JlX2NsZWFuX3R4X2lycShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nKTsKLQlpeGdiZV9jbGVhbl9yeF9pcnEoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZywgJndvcmtfZG9uZSwgYnVkZ2V0KTsKKwl0eF9jbGVhbl9jb21wbGV0ZSA9IGl4Z2JlX2NsZWFuX3R4X2lycShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nKTsKKwlpeGdiZV9jbGVhbl9yeF9pcnEocV92ZWN0b3IsIGFkYXB0ZXItPnJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CiAKLQlpZiAodHhfY2xlYW5lZCkKKwlpZiAoIXR4X2NsZWFuX2NvbXBsZXRlKQogCQl3b3JrX2RvbmUgPSBidWRnZXQ7CiAKIAkvKiBJZiBidWRnZXQgbm90IGZ1bGx5IGNvbnN1bWVkLCBleGl0IHRoZSBwb2xsaW5nIG1vZGUgKi8KIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOwotCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAzKQorCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAxKQogCQkJaXhnYmVfc2V0X2l0cihhZGFwdGVyKTsKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCi0JCQlpeGdiZV9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQkJaXhnYmVfaXJxX2VuYWJsZV9xdWV1ZXMoYWRhcHRlcik7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CiB9CkBAIC0yMzUzLDY4ICsyNjY4LDc2IEBACiAJaXhnYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKIH0KIAotc3RhdGljIHZvaWQgaXhnYmVfc2V0X251bV9xdWV1ZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCisjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgorc3RhdGljIGlubGluZSBib29sIGl4Z2JlX3NldF9kY2JfcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCWludCBucnEgPSAxLCBudHEgPSAxOwotCWludCBmZWF0dXJlX21hc2sgPSAwLCByc3NfaSwgcnNzX207Ci0JaW50IGRjYl9pLCBkY2JfbTsKKwlib29sIHJldCA9IGZhbHNlOwogCi0JLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMgKi8KLQlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7Ci0JY2FzZSBpeGdiZV9tYWNfODI1OThFQjoKLQkJZGNiX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlczsKLQkJZGNiX20gPSAwOwotCQlyc3NfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzOwotCQlyc3NfbSA9IDA7Ci0JCWZlYXR1cmVfbWFzayB8PSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEOwotCQlmZWF0dXJlX21hc2sgfD0gSVhHQkVfRkxBR19EQ0JfRU5BQkxFRDsKLQotCQlzd2l0Y2ggKGFkYXB0ZXItPmZsYWdzICYgZmVhdHVyZV9tYXNrKSB7Ci0JCWNhc2UgKElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQgfCBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKToKLQkJCWRjYl9tID0gMHg3IDw8IDM7Ci0JCQlyc3NfaSA9IG1pbig4LCByc3NfaSk7Ci0JCQlyc3NfbSA9IDB4NzsKLQkJCW5ycSA9IGRjYl9pICogcnNzX2k7Ci0JCQludHEgPSBtaW4oTUFYX1RYX1FVRVVFUywgZGNiX2kgKiByc3NfaSk7Ci0JCQlicmVhazsKLQkJY2FzZSAoSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6Ci0JCQlkY2JfbSA9IDB4NyA8PCAzOwotCQkJbnJxID0gZGNiX2k7Ci0JCQludHEgPSBkY2JfaTsKLQkJCWJyZWFrOwotCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEKToKLQkJCXJzc19tID0gMHhGOwotCQkJbnJxID0gcnNzX2k7Ci0JCQludHEgPSByc3NfaTsKLQkJCWJyZWFrOwotCQljYXNlIDA6Ci0JCWRlZmF1bHQ6Ci0JCQlkY2JfaSA9IDA7Ci0JCQlkY2JfbSA9IDA7Ci0JCQlyc3NfaSA9IDA7Ci0JCQlyc3NfbSA9IDA7Ci0JCQlucnEgPSAxOwotCQkJbnRxID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogU2FuaXR5IGNoZWNrLCB3ZSBzaG91bGQgbmV2ZXIgaGF2ZSB6ZXJvIHF1ZXVlcyAqLwotCQlucnEgPSAobnJxID86MSk7Ci0JCW50cSA9IChudHEgPzoxKTsKLQotCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlcyA9IGRjYl9pOwotCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0ubWFzayA9IGRjYl9tOwotCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlcyA9IHJzc19pOwotCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10ubWFzayA9IHJzc19tOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlucnEgPSAxOwotCQludHEgPSAxOwotCQlicmVhazsKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7CisJCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5tYXNrID0gMHg3IDw8IDM7CisJCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPQorCQkgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7CisJCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPQorCQkgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXM7CisJCXJldCA9IHRydWU7CisJfSBlbHNlIHsKKwkJcmV0ID0gZmFsc2U7CiAJfQogCi0JYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IG5ycTsKLQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gbnRxOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworLyoqCisgKiBpeGdiZV9zZXRfcnNzX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBSU1MKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogVGhpcyBpcyBvdXIgImJhc2UiIG11bHRpcXVldWUgbW9kZS4gIFJTUyAoUmVjZWl2ZSBTaWRlIFNjYWxpbmcpIHdpbGwgdHJ5CisgKiB0byBhbGxvY2F0ZSBvbmUgUnggcXVldWUgcGVyIENQVSwgYW5kIGlmIGF2YWlsYWJsZSwgb25lIFR4IHF1ZXVlIHBlciBDUFUuCisgKgorICoqLworc3RhdGljIGlubGluZSBib29sIGl4Z2JlX3NldF9yc3NfcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSB7CisJCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5tYXNrID0gMHhGOworCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0KKwkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzOworCQlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0KKwkJICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzOworCQlyZXQgPSB0cnVlOworCX0gZWxzZSB7CisJCXJldCA9IGZhbHNlOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBpeGdiZV9zZXRfbnVtX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBkZXZpY2UsIGZlYXR1cmUgZGVwZW5kYW50CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBxdWV1ZSBhbGxvY2F0aW9uIHJvdXRpbmUuICBUaGUgb3JkZXIgaGVyZSBpcyB2ZXJ5CisgKiBpbXBvcnRhbnQsIHN0YXJ0aW5nIHdpdGggdGhlICJtb3N0IiBudW1iZXIgb2YgZmVhdHVyZXMgdHVybmVkIG9uIGF0IG9uY2UsCisgKiBhbmQgZW5kaW5nIHdpdGggdGhlIHNtYWxsZXN0IHNldCBvZiBmZWF0dXJlcy4gIFRoaXMgd2F5IGxhcmdlIGNvbWJpbmF0aW9ucworICogY2FuIGJlIGFsbG9jYXRlZCBpZiB0aGV5J3JlIHR1cm5lZCBvbiwgYW5kIHNtYWxsZXIgY29tYmluYXRpb25zIGFyZSB0aGUKKyAqIGZhbGx0aHJvdWdoIGNvbmRpdGlvbnMuCisgKgorICoqLworc3RhdGljIHZvaWQgaXhnYmVfc2V0X251bV9xdWV1ZXMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJLyogU3RhcnQgd2l0aCBiYXNlIGNhc2UgKi8KKwlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMTsKKwlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMTsKKworI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKKwlpZiAoaXhnYmVfc2V0X2RjYl9xdWV1ZXMoYWRhcHRlcikpCisJCXJldHVybjsKKworI2VuZGlmCisJaWYgKGl4Z2JlX3NldF9yc3NfcXVldWVzKGFkYXB0ZXIpKQorCQlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGl4Z2JlX2FjcXVpcmVfbXNpeF92ZWN0b3JzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMjQ2MCw3MSArMjc4MywxMDQgQEAKIAkJaXhnYmVfc2V0X251bV9xdWV1ZXMoYWRhcHRlcik7CiAJfSBlbHNlIHsKIAkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQ7IC8qIFdvb3QhICovCi0JCWFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgPSB2ZWN0b3JzOworCQkvKgorCQkgKiBBZGp1c3QgZm9yIG9ubHkgdGhlIHZlY3RvcnMgd2UnbGwgdXNlLCB3aGljaCBpcyBtaW5pbXVtCisJCSAqIG9mIG1heF9tc2l4X3FfdmVjdG9ycyArIE5PTl9RX1ZFQ1RPUlMsIG9yIHRoZSBudW1iZXIgb2YKKwkJICogdmVjdG9ycyB3ZSB3ZXJlIGFsbG9jYXRlZC4KKwkJICovCisJCWFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgPSBtaW4odmVjdG9ycywKKwkJICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPm1heF9tc2l4X3FfdmVjdG9ycyArIE5PTl9RX1ZFQ1RPUlMpOwogCX0KIH0KIAogLyoqCisgKiBpeGdiZV9jYWNoZV9yaW5nX3JzcyAtIERlc2NyaXB0b3IgcmluZyB0byByZWdpc3RlciBtYXBwaW5nIGZvciBSU1MKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogQ2FjaGUgdGhlIGRlc2NyaXB0b3IgcmluZyBvZmZzZXRzIGZvciBSU1MgdG8gdGhlIGFzc2lnbmVkIHJpbmdzLgorICoKKyAqKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9jYWNoZV9yaW5nX3JzcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKwlib29sIHJldCA9IGZhbHNlOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCkgeworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGk7CisJCXJldCA9IHRydWU7CisJfSBlbHNlIHsKKwkJcmV0ID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKKy8qKgorICogaXhnYmVfY2FjaGVfcmluZ19kY2IgLSBEZXNjcmlwdG9yIHJpbmcgdG8gcmVnaXN0ZXIgbWFwcGluZyBmb3IgRENCCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIENhY2hlIHRoZSBkZXNjcmlwdG9yIHJpbmcgb2Zmc2V0cyBmb3IgRENCIHRvIHRoZSBhc3NpZ25lZCByaW5ncy4KKyAqCisgKiovCitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfY2FjaGVfcmluZ19kY2Ioc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJYm9vbCByZXQgPSBmYWxzZTsKKwlpbnQgZGNiX2kgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlczsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpIHsKKwkJaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSB7CisJCQkvKiB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBpcyBhc3N1bWVkIHRvIGJlIHN5bW1ldHJpYyAqLworCQkJZm9yIChpID0gMDsgaSA8IGRjYl9pOyBpKyspIHsKKwkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDM7CisJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCAyOworCQkJfQorCQkJcmV0ID0gdHJ1ZTsKKwkJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJZm9yIChpID0gMDsgaSA8IGRjYl9pOyBpKyspIHsKKwkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDQ7CisJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCA0OworCQkJfQorCQkJcmV0ID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IGZhbHNlOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gZmFsc2U7CisJfQorCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisvKioKICAqIGl4Z2JlX2NhY2hlX3JpbmdfcmVnaXN0ZXIgLSBEZXNjcmlwdG9yIHJpbmcgdG8gcmVnaXN0ZXIgbWFwcGluZwogICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKICAqCiAgKiBPbmNlIHdlIGtub3cgdGhlIGZlYXR1cmUtc2V0IGVuYWJsZWQgZm9yIHRoZSBkZXZpY2UsIHdlJ2xsIGNhY2hlCiAgKiB0aGUgcmVnaXN0ZXIgb2Zmc2V0IHRoZSBkZXNjcmlwdG9yIHJpbmcgaXMgYXNzaWduZWQgdG8uCisgKgorICogTm90ZSwgdGhlIG9yZGVyIHRoZSB2YXJpb3VzIGZlYXR1cmUgY2FsbHMgaXMgaW1wb3J0YW50LiAgSXQgbXVzdCBzdGFydCB3aXRoCisgKiB0aGUgIm1vc3QiIGZlYXR1cmVzIGVuYWJsZWQgYXQgdGhlIHNhbWUgdGltZSwgdGhlbiB0cmlja2xlIGRvd24gdG8gdGhlCisgKiBsZWFzdCBhbW91bnQgb2YgZmVhdHVyZXMgdHVybmVkIG9uIGF0IG9uY2UuCiAgKiovCiBzdGF0aWMgdm9pZCBpeGdiZV9jYWNoZV9yaW5nX3JlZ2lzdGVyKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewotCWludCBmZWF0dXJlX21hc2sgPSAwLCByc3NfaTsKLQlpbnQgaSwgdHhyX2lkeCwgcnhyX2lkeDsKLQlpbnQgZGNiX2k7CisJLyogc3RhcnQgd2l0aCBkZWZhdWx0IGNhc2UgKi8KKwlhZGFwdGVyLT5yeF9yaW5nWzBdLnJlZ19pZHggPSAwOworCWFkYXB0ZXItPnR4X3JpbmdbMF0ucmVnX2lkeCA9IDA7CiAKLQkvKiBOdW1iZXIgb2Ygc3VwcG9ydGVkIHF1ZXVlcyAqLwotCXN3aXRjaCAoYWRhcHRlci0+aHcubWFjLnR5cGUpIHsKLQljYXNlIGl4Z2JlX21hY184MjU5OEVCOgotCQlkY2JfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzOwotCQlyc3NfaSA9IGFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfUlNTXS5pbmRpY2VzOwotCQl0eHJfaWR4ID0gMDsKLQkJcnhyX2lkeCA9IDA7Ci0JCWZlYXR1cmVfbWFzayB8PSBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEOwotCQlmZWF0dXJlX21hc2sgfD0gSVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKLQkJc3dpdGNoIChhZGFwdGVyLT5mbGFncyAmIGZlYXR1cmVfbWFzaykgewotCQljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEIHwgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6Ci0JCQlmb3IgKGkgPSAwOyBpIDwgZGNiX2k7IGkrKykgewotCQkJCWludCBqOwotCQkJCS8qIFJ4IGZpcnN0ICovCi0JCQkJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGorKykgewotCQkJCQlhZGFwdGVyLT5yeF9yaW5nW3J4cl9pZHhdLnJlZ19pZHggPQotCQkJCQkJaSA8PCAzIHwgajsKLQkJCQkJcnhyX2lkeCsrOwotCQkJCX0KLQkJCQkvKiBUeCBub3cgKi8KLQkJCQlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaisrKSB7Ci0JCQkJCWFkYXB0ZXItPnR4X3JpbmdbdHhyX2lkeF0ucmVnX2lkeCA9Ci0JCQkJCQlpIDw8IDIgfCAoaiA+PiAxKTsKLQkJCQkJaWYgKGogJiAxKQotCQkJCQkJdHhyX2lkeCsrOwotCQkJCX0KLQkJCX0KLQkJY2FzZSAoSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6Ci0JCQkvKiB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBpcyBhc3N1bWVkIHRvIGJlIHN5bW1ldHJpYyAqLwotCQkJZm9yIChpID0gMDsgaSA8IGRjYl9pOyBpKyspIHsKLQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDM7Ci0JCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCAyOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgKElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQpOgotCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpOwotCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMDoKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KKyNpZmRlZiBDT05GSUdfSVhHQkVfRENCCisJaWYgKGl4Z2JlX2NhY2hlX3JpbmdfZGNiKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKKyNlbmRpZgorCWlmIChpeGdiZV9jYWNoZV9yaW5nX3JzcyhhZGFwdGVyKSkKKwkJcmV0dXJuOwogfQogCiAvKioKQEAgLTI1MzIsNyArMjg4OCw4IEBACiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQogICoKICAqIFdlIGFsbG9jYXRlIG9uZSByaW5nIHBlciBxdWV1ZSBhdCBydW4tdGltZSBzaW5jZSB3ZSBkb24ndCBrbm93IHRoZQotICogbnVtYmVyIG9mIHF1ZXVlcyBhdCBjb21waWxlLXRpbWUuCisgKiBudW1iZXIgb2YgcXVldWVzIGF0IGNvbXBpbGUtdGltZS4gIFRoZSBwb2xsaW5nX25ldGRldiBhcnJheSBpcworICogaW50ZW5kZWQgZm9yIE11bHRpcXVldWUsIGJ1dCBzaG91bGQgd29yayBmaW5lIHdpdGggYSBzaW5nbGUgcXVldWUuCiAgKiovCiBzdGF0aWMgaW50IGl4Z2JlX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTI3MTEsNyArMzA2OCw4IEBACiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKilkYXRhOwogCi0JLyogRG8gdGhlIHNmcF90aW1lciBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0IGR1ZSB0byB0aGUKKwkvKgorCSAqIERvIHRoZSBzZnBfdGltZXIgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCBkdWUgdG8gdGhlCiAJICogZGVsYXlzIHRoYXQgc2ZwKyBkZXRlY3Rpb24gcmVxdWlyZXMKIAkgKi8KIAlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5zZnBfdGFzayk7CkBAIC0yNzg1LDYgKzMxNDMsMTAgQEAKIAlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10uaW5kaWNlcyA9IHJzczsKIAlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JTU19FTkFCTEVEOwogCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRENCXS5pbmRpY2VzID0gSVhHQkVfTUFYX0RDQl9JTkRJQ0VTOworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCWFkYXB0ZXItPm1heF9tc2l4X3FfdmVjdG9ycyA9IE1BWF9NU0lYX1FfVkVDVE9SU184MjU5ODsKKwllbHNlIGlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCWFkYXB0ZXItPm1heF9tc2l4X3FfdmVjdG9ycyA9IE1BWF9NU0lYX1FfVkVDVE9SU184MjU5OTsKIAogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0IKIAkvKiBDb25maWd1cmUgRENCIHRyYWZmaWMgY2xhc3NlcyAqLwpAQCAtMjgwNSwyMSArMzE2NywxNCBAQAogCSAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlcyk7CiAKICNlbmRpZgotCWlmIChody0+bWFjLm9wcy5nZXRfbWVkaWFfdHlwZSAmJgotCSAgICAoaHctPm1hYy5vcHMuZ2V0X21lZGlhX3R5cGUoaHcpID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSkKLQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19GQU5fRkFJTF9DQVBBQkxFOwogCiAJLyogZGVmYXVsdCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KLQlody0+ZmMub3JpZ2luYWxfdHlwZSA9IGl4Z2JlX2ZjX25vbmU7Ci0JaHctPmZjLnR5cGUgPSBpeGdiZV9mY19ub25lOworCWh3LT5mYy5yZXF1ZXN0ZWRfbW9kZSA9IGl4Z2JlX2ZjX25vbmU7CiAJaHctPmZjLmhpZ2hfd2F0ZXIgPSBJWEdCRV9ERUZBVUxUX0ZDUlRIOwogCWh3LT5mYy5sb3dfd2F0ZXIgPSBJWEdCRV9ERUZBVUxUX0ZDUlRMOwogCWh3LT5mYy5wYXVzZV90aW1lID0gSVhHQkVfREVGQVVMVF9GQ1BBVVNFOwogCWh3LT5mYy5zZW5kX3hvbiA9IHRydWU7CiAKLQkvKiBzZWxlY3QgMTBHIGxpbmsgYnkgZGVmYXVsdCAqLwotCWh3LT5tYWMubGlua19tb2RlX3NlbGVjdCA9IElYR0JFX0FVVE9DX0xNU18xMEdfTElOS19OT19BTjsKLQogCS8qIGVuYWJsZSBpdHIgYnkgZGVmYXVsdCBpbiBkeW5hbWljIG1vZGUgKi8KIAlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IDE7CiAJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IDIwMDAwOwpAQCAtMjg2Niw4ICszMjIxLDcgQEAKIAltZW1zZXQodHhfcmluZy0+dHhfYnVmZmVyX2luZm8sIDAsIHNpemUpOwogCiAJLyogcm91bmQgdXAgdG8gbmVhcmVzdCA0SyAqLwotCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYykgKwotCSAgICAgICAgICAgICAgICBzaXplb2YodTMyKTsKKwl0eF9yaW5nLT5zaXplID0gdHhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MpOwogCXR4X3JpbmctPnNpemUgPSBBTElHTih0eF9yaW5nLT5zaXplLCA0MDk2KTsKIAogCXR4X3JpbmctPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCB0eF9yaW5nLT5zaXplLApAQCAtMjkyNiwxMiArMzI4MCw2IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCWludCBzaXplOwogCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmV0X2xyb19kZXNjKSAqIElYR0JFX01BWF9MUk9fREVTQ1JJUFRPUlM7Ci0JcnhfcmluZy0+bHJvX21nci5scm9fYXJyID0gdm1hbGxvYyhzaXplKTsKLQlpZiAoIXJ4X3JpbmctPmxyb19tZ3IubHJvX2FycikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KHJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciwgMCwgc2l6ZSk7Ci0KIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpeGdiZV9yeF9idWZmZXIpICogcnhfcmluZy0+Y291bnQ7CiAJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmICghcnhfcmluZy0+cnhfYnVmZmVyX2luZm8pIHsKQEAgLTI5NjAsOCArMzMwOCw2IEBACiAJcmV0dXJuIDA7CiAKIGFsbG9jX2ZhaWxlZDoKLQl2ZnJlZShyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpOwotCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IE5VTEw7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTMwMjQsNyArMzM3MCw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCWlmIChhZGFwdGVyLT50eF9yaW5nW2ldLmRlc2MpCisJCQlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+dHhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtMzAzOSw5ICszMzg2LDYgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQl2ZnJlZShyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIpOwotCXJ4X3JpbmctPmxyb19tZ3IubHJvX2FyciA9IE5VTEw7Ci0KIAlpeGdiZV9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIsIHJ4X3JpbmcpOwogCiAJdmZyZWUocnhfcmluZy0+cnhfYnVmZmVyX2luZm8pOwpAQCAtMzA2Myw3ICszNDA3LDggQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWl4Z2JlX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJaWYgKGFkYXB0ZXItPnJ4X3JpbmdbaV0uZGVzYykKKwkJCWl4Z2JlX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIH0KIAogLyoqCkBAIC0zMTI2LDYgKzM0NzEsOCBAQAogCiAJaXhnYmVfY29uZmlndXJlKGFkYXB0ZXIpOwogCisJaXhnYmVfbmFwaV9hZGRfYWxsKGFkYXB0ZXIpOworCiAJZXJyID0gaXhnYmVfcmVxdWVzdF9pcnEoYWRhcHRlcik7CiAJaWYgKGVycikKIAkJZ290byBlcnJfcmVxX2lycTsKQEAgLTMxODAsNiArMzUyNyw3IEBACiAvKioKICAqIGl4Z2JlX25hcGlfYWRkX2FsbCAtIHByZXAgbmFwaSBzdHJ1Y3RzIGZvciB1c2UKICAqIEBhZGFwdGVyOiBwcml2YXRlIHN0cnVjdAorICoKICAqIGhlbHBlciBmdW5jdGlvbiB0byBuYXBpX2FkZCBlYWNoIHBvc3NpYmxlIHFfdmVjdG9yLT5uYXBpCiAgKi8KIHZvaWQgaXhnYmVfbmFwaV9hZGRfYWxsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMzI1Miw3ICszNjAwLDYgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpeGdiZV9uYXBpX2FkZF9hbGwoYWRhcHRlcik7CiAJaXhnYmVfcmVzZXQoYWRhcHRlcik7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CkBAIC0zMjcxLDYgKzM2MTgsOSBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGN0cmwsIGZjdHJsOworCXUzMiB3dWZjID0gYWRhcHRlci0+d29sOwogI2lmZGVmIENPTkZJR19QTQogCWludCByZXR2YWwgPSAwOwogI2VuZGlmCkBAIC0zMjkzLDEwICszNjQzLDM1IEBACiAJcmV0dmFsID0gcGNpX3NhdmVfc3RhdGUocGRldik7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKLSNlbmRpZgogCi0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7Ci0JcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOworI2VuZGlmCisJaWYgKHd1ZmMpIHsKKwkJaXhnYmVfc2V0X3J4X21vZGUobmV0ZGV2KTsKKworCQkvKiB0dXJuIG9uIGFsbC1tdWx0aSBtb2RlIGlmIHdha2Ugb24gbXVsdGljYXN0IGlzIGVuYWJsZWQgKi8KKwkJaWYgKHd1ZmMgJiBJWEdCRV9XVUZDX01DKSB7CisJCQlmY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RSTCk7CisJCQlmY3RybCB8PSBJWEdCRV9GQ1RSTF9NUEU7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZDVFJMLCBmY3RybCk7CisJCX0KKworCQljdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NUUkwpOworCQljdHJsIHw9IElYR0JFX0NUUkxfR0lPX0RJUzsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DVFJMLCBjdHJsKTsKKworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1dVRkMsIHd1ZmMpOworCX0gZWxzZSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfV1VDLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9XVUZDLCAwKTsKKwl9CisKKwlpZiAod3VmYyAmJiBody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKKwl9IGVsc2UgeworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOworCX0KIAogCWl4Z2JlX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKIApAQCAtMzMyMiw2ICszNjk3LDEyIEBACiAJdTY0IHRvdGFsX21wYyA9IDA7CiAJdTMyIGksIG1pc3NlZF9yeCA9IDAsIG1wYywgYnByYywgbHhvbiwgbHhvZmYsIHhvbl9vZmZfdG90OwogCisJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJCWFkYXB0ZXItPmh3X3J4X25vX2RtYV9yZXNvdXJjZXMgKz0KKwkJCSAgICAgICAgICAgICAgICAgICAgIElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFJEQyhpKSk7CisJfQorCiAJYWRhcHRlci0+c3RhdHMuY3JjZXJycyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1JDRVJSUyk7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQkvKiBmb3IgcGFja2V0IGJ1ZmZlcnMgbm90IHVzZWQsIHRoZSByZWdpc3RlciBzaG91bGQgcmVhZCAwICovCkBAIC0zMzI5LDMyICszNzEwLDU1IEBACiAJCW1pc3NlZF9yeCArPSBtcGM7CiAJCWFkYXB0ZXItPnN0YXRzLm1wY1tpXSArPSBtcGM7CiAJCXRvdGFsX21wYyArPSBhZGFwdGVyLT5zdGF0cy5tcGNbaV07Ci0JCWFkYXB0ZXItPnN0YXRzLnJuYmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JOQkMoaSkpOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQkJYWRhcHRlci0+c3RhdHMucm5iY1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk5CQyhpKSk7CiAJCWFkYXB0ZXItPnN0YXRzLnFwdGNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FQVEMoaSkpOwogCQlhZGFwdGVyLT5zdGF0cy5xYnRjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RQlRDKGkpKTsKIAkJYWRhcHRlci0+c3RhdHMucXByY1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSQyhpKSk7CiAJCWFkYXB0ZXItPnN0YXRzLnFicmNbaV0gKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1FCUkMoaSkpOwotCQlhZGFwdGVyLT5zdGF0cy5weG9ucnhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT05SWEMoaSkpOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9ucnhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPTlJYQ05UKGkpKTsKKwkJCWFkYXB0ZXItPnN0YXRzLnB4b2ZmcnhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlJYQ05UKGkpKTsKKwkJCWFkYXB0ZXItPnN0YXRzLnFwcmRjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9RUFJEQyhpKSk7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT5zdGF0cy5weG9ucnhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9OUlhDKGkpKTsKKwkJCWFkYXB0ZXItPnN0YXRzLnB4b2ZmcnhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT0ZGUlhDKGkpKTsKKwkJfQogCQlhZGFwdGVyLT5zdGF0cy5weG9udHhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT05UWEMoaSkpOwotCQlhZGFwdGVyLT5zdGF0cy5weG9mZnJ4Y1tpXSArPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9QWE9GRlJYQyhpKSk7CiAJCWFkYXB0ZXItPnN0YXRzLnB4b2ZmdHhjW2ldICs9IElYR0JFX1JFQURfUkVHKGh3LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1BYT0ZGVFhDKGkpKTsKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfUFhPRkZUWEMoaSkpOwogCX0KIAlhZGFwdGVyLT5zdGF0cy5ncHJjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HUFJDKTsKIAkvKiB3b3JrIGFyb3VuZCBoYXJkd2FyZSBjb3VudGluZyBpc3N1ZSAqLwogCWFkYXB0ZXItPnN0YXRzLmdwcmMgLT0gbWlzc2VkX3J4OwogCiAJLyogODI1OTggaGFyZHdhcmUgb25seSBoYXMgYSAzMiBiaXQgY291bnRlciBpbiB0aGUgaGlnaCByZWdpc3RlciAqLwotCWFkYXB0ZXItPnN0YXRzLmdvcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNIKTsKLQlhZGFwdGVyLT5zdGF0cy5nb3RjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1RDSCk7Ci0JYWRhcHRlci0+c3RhdHMudG9yICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UT1JIKTsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCWFkYXB0ZXItPnN0YXRzLmdvcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNMKTsKKwkJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dPUkNIKTsgLyogdG8gY2xlYXIgKi8KKwkJYWRhcHRlci0+c3RhdHMuZ290YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0wpOworCQlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09UQ0gpOyAvKiB0byBjbGVhciAqLworCQlhZGFwdGVyLT5zdGF0cy50b3IgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RPUkwpOworCQlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVE9SSCk7IC8qIHRvIGNsZWFyICovCisJCWFkYXB0ZXItPnN0YXRzLmx4b25yeGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT05SWENOVCk7CisJCWFkYXB0ZXItPnN0YXRzLmx4b2ZmcnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9GRlJYQ05UKTsKKwl9IGVsc2UgeworCQlhZGFwdGVyLT5zdGF0cy5seG9ucnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9OUlhDKTsKKwkJYWRhcHRlci0+c3RhdHMubHhvZmZyeGMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT0ZGUlhDKTsKKwkJYWRhcHRlci0+c3RhdHMuZ29yYyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfR09SQ0gpOworCQlhZGFwdGVyLT5zdGF0cy5nb3RjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HT1RDSCk7CisJCWFkYXB0ZXItPnN0YXRzLnRvciArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVE9SSCk7CisJfQogCWJwcmMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQlBSQyk7CiAJYWRhcHRlci0+c3RhdHMuYnByYyArPSBicHJjOwogCWFkYXB0ZXItPnN0YXRzLm1wcmMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX01QUkMpOwotCWFkYXB0ZXItPnN0YXRzLm1wcmMgLT0gYnByYzsKKwlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQorCQlhZGFwdGVyLT5zdGF0cy5tcHJjIC09IGJwcmM7CiAJYWRhcHRlci0+c3RhdHMucm9jICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9ST0MpOwogCWFkYXB0ZXItPnN0YXRzLnByYzY0ICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QUkM2NCk7CiAJYWRhcHRlci0+c3RhdHMucHJjMTI3ICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QUkMxMjcpOwpAQCAtMzM2Myw4ICszNzY3LDYgQEAKIAlhZGFwdGVyLT5zdGF0cy5wcmMxMDIzICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QUkMxMDIzKTsKIAlhZGFwdGVyLT5zdGF0cy5wcmMxNTIyICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QUkMxNTIyKTsKIAlhZGFwdGVyLT5zdGF0cy5ybGVjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9STEVDKTsKLQlhZGFwdGVyLT5zdGF0cy5seG9ucnhjICs9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9MWE9OUlhDKTsKLQlhZGFwdGVyLT5zdGF0cy5seG9mZnJ4YyArPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPRkZSWEMpOwogCWx4b24gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTFhPTlRYQyk7CiAJYWRhcHRlci0+c3RhdHMubHhvbnR4YyArPSBseG9uOwogCWx4b2ZmID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0xYT0ZGVFhDKTsKQEAgLTM0MTYsMTcgKzM4MTgsNTQgQEAKIAkvKiBEbyB0aGUgd2F0Y2hkb2cgb3V0c2lkZSBvZiBpbnRlcnJ1cHQgY29udGV4dCBkdWUgdG8gdGhlIGxvdmVseQogCSAqIGRlbGF5cyB0aGF0IHNvbWUgb2YgdGhlIG5ld2VyIGhhcmR3YXJlIHJlcXVpcmVzICovCiAJaWYgKCF0ZXN0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJdTY0IGVpY3MgPSAwOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7IGkrKykKKwkJCWVpY3MgfD0gKDEgPDwgaSk7CisKIAkJLyogQ2F1c2Ugc29mdHdhcmUgaW50ZXJydXB0IHRvIGVuc3VyZSByeCByaW5ncyBhcmUgY2xlYW5lZCAqLwotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgewotCQkJdTMyIGVpY3MgPQotCQkJICgxIDw8IChhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUykpIC0gMTsKLQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywgZWljcyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBGb3IgbGVnYWN5IGFuZCBNU0kgaW50ZXJydXB0cyBkb24ndCBzZXQgYW55IGJpdHMgdGhhdAotCQkJICogYXJlIGVuYWJsZWQgZm9yIEVJQU0sIGJlY2F1c2UgdGhpcyBvcGVyYXRpb24gd291bGQKLQkJCSAqIHNldCAqYm90aCogRUlNUyBhbmQgRUlDUyBmb3IgYW55IGJpdCBpbiBFSUFNICovCi0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0VJQ1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSVhHQkVfRUlDU19UQ1BfVElNRVIgfCBJWEdCRV9FSUNTX09USEVSKSk7CisJCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJCWNhc2UgaXhnYmVfbWFjXzgyNTk4RUI6CisJCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX01TSVhfRU5BQkxFRCkgeworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywgKHUzMillaWNzKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBmb3IgbGVnYWN5IGFuZCBNU0kgaW50ZXJydXB0cyBkb24ndCBzZXQgYW55CisJCQkJICogYml0cyB0aGF0IGFyZSBlbmFibGVkIGZvciBFSUFNLCBiZWNhdXNlIHRoaXMKKwkJCQkgKiBvcGVyYXRpb24gd291bGQgc2V0ICpib3RoKiBFSU1TIGFuZCBFSUNTIGZvcgorCQkJCSAqIGFueSBiaXQgaW4gRUlBTQorCQkJCSAqLworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDUywKKwkJCQkgICAgIChJWEdCRV9FSUNTX1RDUF9USU1FUiB8IElYR0JFX0VJQ1NfT1RIRVIpKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIGl4Z2JlX21hY184MjU5OUVCOgorCQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19NU0lYX0VOQUJMRUQpIHsKKwkJCQkvKgorCQkJCSAqIEVJQ1MoMC4uMTUpIGZpcnN0IDAtMTUgcSB2ZWN0b3JzCisJCQkJICogRUlDU1sxXSAoMTYuLjMxKSBxIHZlY3RvcnMgMTYtMzEKKwkJCQkgKiBFSUNTWzJdICgwLi4zMSkgcSB2ZWN0b3JzIDMyLTYzCisJCQkJICovCisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNTLAorCQkJCSAgICAgICAgICAgICAgICAodTMyKShlaWNzICYgMHhGRkZGKSk7CisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNTX0VYKDEpLAorCQkJCSAgICAgICAgICAgICAgICAodTMyKShlaWNzICYgMHhGRkZGMDAwMCkpOworCQkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRUlDU19FWCgyKSwKKwkJCQkgICAgICAgICAgICAgICAgKHUzMikoZWljcyA+PiAzMikpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIGZvciBsZWdhY3kgYW5kIE1TSSBpbnRlcnJ1cHRzIGRvbid0IHNldCBhbnkKKwkJCQkgKiBiaXRzIHRoYXQgYXJlIGVuYWJsZWQgZm9yIEVJQU0sIGJlY2F1c2UgdGhpcworCQkJCSAqIG9wZXJhdGlvbiB3b3VsZCBzZXQgKmJvdGgqIEVJTVMgYW5kIEVJQ1MgZm9yCisJCQkJICogYW55IGJpdCBpbiBFSUFNCisJCQkJICovCisJCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FSUNTLAorCQkJCSAgICAgKElYR0JFX0VJQ1NfVENQX1RJTUVSIHwgSVhHQkVfRUlDU19PVEhFUikpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQogCQkvKiBSZXNldCB0aGUgdGltZXIgKi8KIAkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwKQEAgLTM0MzcsNiArMzg3Niw1NSBAQAogfQogCiAvKioKKyAqIGl4Z2JlX211bHRpc3BlZWRfZmliZXJfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gY29uZmlndXJlIG11bHRpc3BlZWQgZmliZXIKKyAqIEB3b3JrOiBwb2ludGVyIHRvIHdvcmtfc3RydWN0IGNvbnRhaW5pbmcgb3VyIGRhdGEKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX211bHRpc3BlZWRfZmliZXJfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYWRhcHRlciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGF1dG9uZWc7CisKKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0s7CisJaWYgKGh3LT5tYWMub3BzLmdldF9saW5rX2NhcGFiaWxpdGllcykKKwkJaHctPm1hYy5vcHMuZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKGh3LCAmYXV0b25lZywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZody0+bWFjLmF1dG9uZWcpOworCWlmIChody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKQorCQlody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBhdXRvbmVnLCB0cnVlLCB0cnVlKTsKKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEU7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSzsKK30KKworLyoqCisgKiBpeGdiZV9zZnBfY29uZmlnX21vZHVsZV90YXNrIC0gd29ya2VyIHRocmVhZCB0byBjb25maWd1cmUgYSBuZXcgU0ZQKyBtb2R1bGUKKyAqIEB3b3JrOiBwb2ludGVyIHRvIHdvcmtfc3RydWN0IGNvbnRhaW5pbmcgb3VyIGRhdGEKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX3NmcF9jb25maWdfbW9kdWxlX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2FkYXB0ZXIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgZXJyOworCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19JTl9TRlBfTU9EX1RBU0s7CisJZXJyID0gaHctPnBoeS5vcHMuaWRlbnRpZnlfc2ZwKGh3KTsKKwlpZiAoZXJyID09IElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRCkgeworCQlEUFJJTlRLKFBST0JFLCBFUlIsICJQSFkgbm90IHN1cHBvcnRlZCBvbiB0aGlzIE5JQyAlZFxuIiwgZXJyKTsKKwkJaXhnYmVfZG93bihhZGFwdGVyKTsKKwkJcmV0dXJuOworCX0KKwlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOworCisJaWYgKCFhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSykKKwkJLyogVGhpcyB3aWxsIGFsc28gd29yayBmb3IgREEgVHdpbmF4IGNvbm5lY3Rpb25zICovCisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfSU5fU0ZQX01PRF9UQVNLOworfQorCisvKioKICAqIGl4Z2JlX3dhdGNoZG9nX3Rhc2sgLSB3b3JrZXIgdGhyZWFkIHRvIGJyaW5nIGxpbmsgdXAKICAqIEB3b3JrOiBwb2ludGVyIHRvIHdvcmtfc3RydWN0IGNvbnRhaW5pbmcgb3VyIGRhdGEKICAqKi8KQEAgLTM0NjYsMTAgKzM5NTQsMjAgQEAKIAogCWlmIChsaW5rX3VwKSB7CiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7Ci0JCQl1MzIgZnJjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkNUUkwpOwotCQkJdTMyIHJtY3MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk1DUyk7Ci0jZGVmaW5lIEZMT1dfUlggKGZyY3RsICYgSVhHQkVfRkNUUkxfUkZDRSkKLSNkZWZpbmUgRkxPV19UWCAocm1jcyAmIElYR0JFX1JNQ1NfVEZDRV84MDJfM1gpCisJCQlib29sIGZsb3dfcngsIGZsb3dfdHg7CisKKwkJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKKwkJCQl1MzIgbWZsY24gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUZMQ04pOworCQkJCXUzMiBmY2NmZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ0NGRyk7CisJCQkJZmxvd19yeCA9IChtZmxjbiAmIElYR0JFX01GTENOX1JGQ0UpOworCQkJCWZsb3dfdHggPSAoZmNjZmcgJiBJWEdCRV9GQ0NGR19URkNFXzgwMl8zWCk7CisJCQl9IGVsc2UgeworCQkJCXUzMiBmcmN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GQ1RSTCk7CisJCQkJdTMyIHJtY3MgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUk1DUyk7CisJCQkJZmxvd19yeCA9IChmcmN0bCAmIElYR0JFX0ZDVFJMX1JGQ0UpOworCQkJCWZsb3dfdHggPSAocm1jcyAmIElYR0JFX1JNQ1NfVEZDRV84MDJfM1gpOworCQkJfQorCiAJCQlwcmludGsoS0VSTl9JTkZPICJpeGdiZTogJXMgTklDIExpbmsgaXMgVXAgJXMsICIKIAkJCSAgICAgICAiRmxvdyBDb250cm9sOiAlc1xuIiwKIAkJCSAgICAgICBuZXRkZXYtPm5hbWUsCkBAIC0zNDc3LDkgKzM5NzUsOSBAQAogCQkJICAgICAgICAiMTAgR2JwcyIgOgogCQkJICAgICAgICAobGlua19zcGVlZCA9PSBJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMID8KIAkJCSAgICAgICAgICIxIEdicHMiIDogInVua25vd24gc3BlZWQiKSksCi0JCQkgICAgICAgKChGTE9XX1JYICYmIEZMT1dfVFgpID8gIlJYL1RYIiA6Ci0JCQkgICAgICAgIChGTE9XX1JYID8gIlJYIiA6Ci0JCQkgICAgICAgIChGTE9XX1RYID8gIlRYIiA6ICJOb25lIikpKSk7CisJCQkgICAgICAgKChmbG93X3J4ICYmIGZsb3dfdHgpID8gIlJYL1RYIiA6CisJCQkgICAgICAgIChmbG93X3J4ID8gIlJYIiA6CisJCQkgICAgICAgIChmbG93X3R4ID8gIlRYIiA6ICJOb25lIikpKSk7CiAKIAkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAkJfSBlbHNlIHsKQEAgLTM2MTksMTMgKzQxMTcsMTMgQEAKIAogCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewogCQkJc3dpdGNoIChza2ItPnByb3RvY29sKSB7Ci0JCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgorCQkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCQkJdHlwZV90dWNtZF9tbGhsIHw9IElYR0JFX0FEVlRYRF9UVUNNRF9JUFY0OwogCQkJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCiAJCQkJCXR5cGVfdHVjbWRfbWxobCB8PQogCQkJCQkgICAgICAgIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVENQOwogCQkJCWJyZWFrOwotCQkJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCQkJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJCQkvKiBYWFggd2hhdCBhYm91dCBvdGhlciBWNiBoZWFkZXJzPz8gKi8KIAkJCQlpZiAoaXB2Nl9oZHIoc2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKIAkJCQkJdHlwZV90dWNtZF9tbGhsIHw9CkBAIC0zODIzLDYgKzQzMjEsMTYgQEAKIAlyZXR1cm4gX19peGdiZV9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgc2l6ZSk7CiB9CiAKK3N0YXRpYyB1MTYgaXhnYmVfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkKKwkJcmV0dXJuIDA7ICAvKiBBbGwgdHJhZmZpYyBzaG91bGQgZGVmYXVsdCB0byBjbGFzcyAwICovCisKKwlyZXR1cm4gc2tiX3R4X2hhc2goZGV2LCBza2IpOworfQorCiBzdGF0aWMgaW50IGl4Z2JlX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CkBAIC0zOTQ4LDMwICs0NDU2LDExIEBACiB9CiAjZW5kaWYKIAotLyoqCi0gKiBpeGdiZV9saW5rX2NvbmZpZyAtIHNldCB1cCBpbml0aWFsIGxpbmsgd2l0aCBkZWZhdWx0IHNwZWVkIGFuZCBkdXBsZXgKLSAqIEBodzogcG9pbnRlciB0byBwcml2YXRlIGhhcmR3YXJlIHN0cnVjdAotICoKLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCi0gKiovCi1zdGF0aWMgaW50IGl4Z2JlX2xpbmtfY29uZmlnKHN0cnVjdCBpeGdiZV9odyAqaHcpCi17Ci0JdTMyIGF1dG9uZWcgPSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDsKLQotCS8qIG11c3QgYWx3YXlzIGF1dG9uZWcgZm9yIGJvdGggMUcgYW5kIDEwRyBsaW5rICovCi0JaHctPm1hYy5hdXRvbmVnID0gdHJ1ZTsKLQotCWlmICgoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKSAmJgotCSAgICAoaHctPnBoeS5tZWRpYV90eXBlID09IGl4Z2JlX21lZGlhX3R5cGVfY29wcGVyKSkKLQkJYXV0b25lZyA9IElYR0JFX0xJTktfU1BFRURfODI1OThfQVVUT05FRzsKLQotCXJldHVybiBody0+bWFjLm9wcy5zZXR1cF9saW5rX3NwZWVkKGh3LCBhdXRvbmVnLCB0cnVlLCB0cnVlKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpeGdiZV9uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbiAJCT0gaXhnYmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gaXhnYmVfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGl4Z2JlX3htaXRfZnJhbWUsCisJLm5kb19zZWxlY3RfcXVldWUJPSBpeGdiZV9zZWxlY3RfcXVldWUsCiAJLm5kb19nZXRfc3RhdHMJCT0gaXhnYmVfZ2V0X3N0YXRzLAogCS5uZG9fc2V0X3J4X21vZGUgICAgICAgID0gaXhnYmVfc2V0X3J4X21vZGUsCiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBpeGdiZV9zZXRfcnhfbW9kZSwKQEAgLTQwMDcsNyArNDQ5Niw3IEBACiAJY29uc3Qgc3RydWN0IGl4Z2JlX2luZm8gKmlpID0gaXhnYmVfaW5mb190YmxbZW50LT5kcml2ZXJfZGF0YV07CiAJc3RhdGljIGludCBjYXJkc19mb3VuZDsKIAlpbnQgaSwgZXJyLCBwY2lfdXNpbmdfZGFjOwotCXUxNiBsaW5rX3N0YXR1cywgbGlua19zcGVlZCwgbGlua193aWR0aDsKKwl1MTYgcG1fdmFsdWUgPSAwOwogCXUzMiBwYXJ0X251bSwgZWVjOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CkBAIC00MTA2LDYgKzQ1OTUsMTMgQEAKIAogCUlOSVRfV09SSygmYWRhcHRlci0+c2ZwX3Rhc2ssIGl4Z2JlX3NmcF90YXNrKTsKIAorCS8qIG11bHRpc3BlZWQgZmliZXIgaGFzIGl0cyBvd24gdGFza2xldCwgY2FsbGVkIGZyb20gR1BJIFNEUDEgY29udGV4dCAqLworCUlOSVRfV09SSygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrLCBpeGdiZV9tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCisJLyogYSBuZXcgU0ZQKyBtb2R1bGUgYXJyaXZhbCwgY2FsbGVkIGZyb20gR1BJIFNEUDIgY29udGV4dCAqLworCUlOSVRfV09SSygmYWRhcHRlci0+c2ZwX2NvbmZpZ19tb2R1bGVfdGFzaywKKwkgICAgICAgICAgaXhnYmVfc2ZwX2NvbmZpZ19tb2R1bGVfdGFzayk7CisKIAllcnIgPSBpaS0+Z2V0X2ludmFyaWFudHMoaHcpOwogCWlmIChlcnIgPT0gSVhHQkVfRVJSX1NGUF9OT1RfUFJFU0VOVCkgewogCQkvKiBzdGFydCBhIGtlcm5lbCB0aHJlYWQgdG8gd2F0Y2ggZm9yIGEgbW9kdWxlIHRvIGFycml2ZSAqLwpAQCAtNDE0Miw3ICs0NjM4LDcgQEAKIAluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwogCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CiAJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1JPOwogCiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CkBAIC00MTg2LDI2ICs0NjgyLDQxIEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfc3dfaW5pdDsKIAorCXN3aXRjaCAocGRldi0+ZGV2aWNlKSB7CisJY2FzZSBJWEdCRV9ERVZfSURfODI1OTlfS1g0OgorI2RlZmluZSBJWEdCRV9QQ0lFX1BNQ1NSIDB4NDQKKwkJYWRhcHRlci0+d29sID0gSVhHQkVfV1VGQ19NQUc7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIElYR0JFX1BDSUVfUE1DU1IsICZwbV92YWx1ZSk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBJWEdCRV9QQ0lFX1BNQ1NSLAorCQkgICAgICAgICAgICAgICAgICAgICAgKHBtX3ZhbHVlIHwgKDEgPDwgOCkpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYWRhcHRlci0+d29sID0gMDsKKwkJYnJlYWs7CisJfQorCWRldmljZV9pbml0X3dha2V1cCgmYWRhcHRlci0+cGRldi0+ZGV2LCB0cnVlKTsKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmFkYXB0ZXItPnBkZXYtPmRldiwgYWRhcHRlci0+d29sKTsKKwogCS8qIHByaW50IGJ1cyB0eXBlL3NwZWVkL3dpZHRoIGluZm8gKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBJWEdCRV9QQ0lfTElOS19TVEFUVVMsICZsaW5rX3N0YXR1cyk7Ci0JbGlua19zcGVlZCA9IGxpbmtfc3RhdHVzICYgSVhHQkVfUENJX0xJTktfU1BFRUQ7Ci0JbGlua193aWR0aCA9IGxpbmtfc3RhdHVzICYgSVhHQkVfUENJX0xJTktfV0lEVEg7CiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIihQQ0kgRXhwcmVzczolczolcykgJXBNXG4iLAotCSAgICAgICAgKChsaW5rX3NwZWVkID09IElYR0JFX1BDSV9MSU5LX1NQRUVEXzUwMDApID8gIjUuMEdiL3MiIDoKLQkgICAgICAgICAobGlua19zcGVlZCA9PSBJWEdCRV9QQ0lfTElOS19TUEVFRF8yNTAwKSA/ICIyLjVHYi9zIiA6Ci0JICAgICAgICAgIlVua25vd24iKSwKLQkgICAgICAgICgobGlua193aWR0aCA9PSBJWEdCRV9QQ0lfTElOS19XSURUSF84KSA/ICJXaWR0aCB4OCIgOgotCSAgICAgICAgIChsaW5rX3dpZHRoID09IElYR0JFX1BDSV9MSU5LX1dJRFRIXzQpID8gIldpZHRoIHg0IiA6Ci0JICAgICAgICAgKGxpbmtfd2lkdGggPT0gSVhHQkVfUENJX0xJTktfV0lEVEhfMikgPyAiV2lkdGggeDIiIDoKLQkgICAgICAgICAobGlua193aWR0aCA9PSBJWEdCRV9QQ0lfTElOS19XSURUSF8xKSA/ICJXaWR0aCB4MSIgOgorCSAgICAgICAgKChody0+YnVzLnNwZWVkID09IGl4Z2JlX2J1c19zcGVlZF81MDAwKSA/ICI1LjBHYi9zIjoKKwkgICAgICAgICAoaHctPmJ1cy5zcGVlZCA9PSBpeGdiZV9idXNfc3BlZWRfMjUwMCkgPyAiMi41R2IvcyI6IlVua25vd24iKSwKKwkgICAgICAgICgoaHctPmJ1cy53aWR0aCA9PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94OCkgPyAiV2lkdGggeDgiIDoKKwkgICAgICAgICAoaHctPmJ1cy53aWR0aCA9PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94NCkgPyAiV2lkdGggeDQiIDoKKwkgICAgICAgICAoaHctPmJ1cy53aWR0aCA9PSBpeGdiZV9idXNfd2lkdGhfcGNpZV94MSkgPyAiV2lkdGggeDEiIDoKIAkgICAgICAgICAiVW5rbm93biIpLAogCSAgICAgICAgbmV0ZGV2LT5kZXZfYWRkcik7CiAJaXhnYmVfcmVhZF9wYmFfbnVtX2dlbmVyaWMoaHcsICZwYXJ0X251bSk7Ci0JZGV2X2luZm8oJnBkZXYtPmRldiwgIk1BQzogJWQsIFBIWTogJWQsIFBCQSBObzogJTA2eC0lMDN4XG4iLAotCSAgICAgICAgIGh3LT5tYWMudHlwZSwgaHctPnBoeS50eXBlLAotCSAgICAgICAgIChwYXJ0X251bSA+PiA4KSwgKHBhcnRfbnVtICYgMHhmZikpOworCWlmIChpeGdiZV9pc19zZnAoaHcpICYmIGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfbm90X3ByZXNlbnQpCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNQUM6ICVkLCBQSFk6ICVkLCBTRlArOiAlZCwgUEJBIE5vOiAlMDZ4LSUwM3hcbiIsCisJCSAgICAgICAgIGh3LT5tYWMudHlwZSwgaHctPnBoeS50eXBlLCBody0+cGh5LnNmcF90eXBlLAorCQkgICAgICAgICAocGFydF9udW0gPj4gOCksIChwYXJ0X251bSAmIDB4ZmYpKTsKKwllbHNlCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNQUM6ICVkLCBQSFk6ICVkLCBQQkEgTm86ICUwNngtJTAzeFxuIiwKKwkJICAgICAgICAgaHctPm1hYy50eXBlLCBody0+cGh5LnR5cGUsCisJCSAgICAgICAgIChwYXJ0X251bSA+PiA4KSwgKHBhcnRfbnVtICYgMHhmZikpOwogCi0JaWYgKGxpbmtfd2lkdGggPD0gSVhHQkVfUENJX0xJTktfV0lEVEhfNCkgeworCWlmIChody0+YnVzLndpZHRoIDw9IGl4Z2JlX2J1c193aWR0aF9wY2llX3g0KSB7CiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICJQQ0ktRXhwcmVzcyBiYW5kd2lkdGggYXZhaWxhYmxlIGZvciAiCiAJCSAgICAgICAgICJ0aGlzIGNhcmQgaXMgbm90IHN1ZmZpY2llbnQgZm9yIG9wdGltYWwgIgogCQkgICAgICAgICAicGVyZm9ybWFuY2UuXG4iKTsKQEAgLTQyMTMsMTYgKzQ3MjQsMTIgQEAKIAkJICAgICAgICAgIlBDSS1FeHByZXNzIHNsb3QgaXMgcmVxdWlyZWQuXG4iKTsKIAl9CiAKKwkvKiBzYXZlIG9mZiBFRVBST00gdmVyc2lvbiBudW1iZXIgKi8KKwlody0+ZWVwcm9tLm9wcy5yZWFkKGh3LCAweDI5LCAmYWRhcHRlci0+ZWVwcm9tX3ZlcnNpb24pOworCiAJLyogcmVzZXQgdGhlIGhhcmR3YXJlIHdpdGggdGhlIG5ldyBzZXR0aW5ncyAqLwogCWh3LT5tYWMub3BzLnN0YXJ0X2h3KGh3KTsKIAotCS8qIGxpbmtfY29uZmlnIGRlcGVuZHMgb24gc3RhcnRfaHcgYmVpbmcgY2FsbGVkIGF0IGxlYXN0IG9uY2UgKi8KLQllcnIgPSBpeGdiZV9saW5rX2NvbmZpZyhodyk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJzZXR1cF9saW5rX3NwZWVkIEZBSUxFRCAlZFxuIiwgZXJyKTsKLQkJZ290byBlcnJfcmVnaXN0ZXI7Ci0JfQotCiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAogCXN0cmNweShuZXRkZXYtPm5hbWUsICJldGglZCIpOwpAQCAtNDI1Myw2ICs0NzYwLDggQEAKIAljbGVhcl9iaXQoX19JWEdCRV9TRlBfTU9EVUxFX05PVF9GT1VORCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+c2ZwX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfdGFzayk7CisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+bXVsdGlzcGVlZF9maWJlcl90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfY29uZmlnX21vZHVsZV90YXNrKTsKIAlpb3VubWFwKGh3LT5od19hZGRyKTsKIGVycl9pb3JlbWFwOgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CkBAIC00Mjg5LDYgKzQ3OTgsOCBAQAogCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5zZnBfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOwogCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF90YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5tdWx0aXNwZWVkX2ZpYmVyX3Rhc2spOworCWNhbmNlbF93b3JrX3N5bmMoJmFkYXB0ZXItPnNmcF9jb25maWdfbW9kdWxlX3Rhc2spOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCkBAIC00MzcyLDcgKzQ4ODMsNyBAQAogCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMCk7CiAKIAkJaXhnYmVfcmVzZXQoYWRhcHRlcik7Ci0KKwkJSVhHQkVfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfV1VTLCB+MCk7CiAJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMKaW5kZXggNWE4NjY5YS4uMTRlOTYwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfcGh5LmMKQEAgLTEsNyArMSw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiAgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCkBAIC0zMiw2ICszMiwxOCBAQAogI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgogI2luY2x1ZGUgIml4Z2JlX3BoeS5oIgogCitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfc3RhcnQoc3RydWN0IGl4Z2JlX2h3ICpodyk7CitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfc3RvcChzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfaW5faTJjX2J5dGUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKmRhdGEpOworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggZGF0YSk7CitzdGF0aWMgczMyIGl4Z2JlX2dldF9pMmNfYWNrKHN0cnVjdCBpeGdiZV9odyAqaHcpOworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19pbl9pMmNfYml0KHN0cnVjdCBpeGdiZV9odyAqaHcsIGJvb2wgKmRhdGEpOworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19vdXRfaTJjX2JpdChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBib29sIGRhdGEpOworc3RhdGljIHMzMiBpeGdiZV9yYWlzZV9pMmNfY2xrKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsKTsKK3N0YXRpYyB2b2lkIGl4Z2JlX2xvd2VyX2kyY19jbGsoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwpOworc3RhdGljIHMzMiBpeGdiZV9zZXRfaTJjX2RhdGEoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICppMmNjdGwsIGJvb2wgZGF0YSk7CitzdGF0aWMgYm9vbCBpeGdiZV9nZXRfaTJjX2RhdGEodTMyICppMmNjdGwpOworc3RhdGljIHZvaWQgaXhnYmVfaTJjX2J1c19jbGVhcihzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHN0YXRpYyBib29sIGl4Z2JlX3ZhbGlkYXRlX3BoeV9hZGRyKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBwaHlfYWRkcik7CiBzdGF0aWMgZW51bSBpeGdiZV9waHlfdHlwZSBpeGdiZV9nZXRfcGh5X3R5cGVfZnJvbV9pZCh1MzIgcGh5X2lkKTsKIHN0YXRpYyBzMzIgaXhnYmVfZ2V0X3BoeV9pZChzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKQEAgLTU0Myw4ICs1NTUsOSBAQAogCXU4IGlkZW50aWZpZXIgPSAwOwogCXU4IGNvbXBfY29kZXNfMWcgPSAwOwogCXU4IGNvbXBfY29kZXNfMTBnID0gMDsKLQl1OCBvdWlfYnl0ZXNbNF0gPSB7MCwgMCwgMCwgMH07CisJdTggb3VpX2J5dGVzWzNdID0gezAsIDAsIDB9OwogCXU4IHRyYW5zbWlzc2lvbl9tZWRpYSA9IDA7CisJdTE2IGVuZm9yY2Vfc2ZwID0gMDsKIAogCXN0YXR1cyA9IGh3LT5waHkub3BzLnJlYWRfaTJjX2VlcHJvbShodywgSVhHQkVfU0ZGX0lERU5USUZJRVIsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpZGVudGlmaWVyKTsKQEAgLTU2NCwxOCArNTc3LDQ4IEBACiAKIAkJLyogSUQgTW9kdWxlCiAJCSAqID09PT09PT09PQotCQkgKiAwCVNGUF9EQV9DVQotCQkgKiAxCVNGUF9TUgotCQkgKiAyCVNGUF9MUgorCQkgKiAwICAgIFNGUF9EQV9DVQorCQkgKiAxICAgIFNGUF9TUgorCQkgKiAyICAgIFNGUF9MUgorCQkgKiAzICAgIFNGUF9EQV9DT1JFMCAtIDgyNTk5LXNwZWNpZmljCisJCSAqIDQgICAgU0ZQX0RBX0NPUkUxIC0gODI1OTktc3BlY2lmaWMKKwkJICogNSAgICBTRlBfU1IvTFJfQ09SRTAgLSA4MjU5OS1zcGVjaWZpYworCQkgKiA2ICAgIFNGUF9TUi9MUl9DT1JFMSAtIDgyNTk5LXNwZWNpZmljCiAJCSAqLwotCQlpZiAodHJhbnNtaXNzaW9uX21lZGlhICYgSVhHQkVfU0ZGX1RXSU5fQVhfQ0FQQUJMRSkKLQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV9kYV9jdTsKLQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRVNSX0NBUEFCTEUpCi0JCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfc3I7Ci0JCWVsc2UgaWYgKGNvbXBfY29kZXNfMTBnICYgSVhHQkVfU0ZGXzEwR0JBU0VMUl9DQVBBQkxFKQotCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX2xyOwotCQllbHNlCi0JCQlody0+cGh5LnNmcF90eXBlID0gaXhnYmVfc2ZwX3R5cGVfdW5rbm93bjsKKwkJaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikgeworCQkJaWYgKHRyYW5zbWlzc2lvbl9tZWRpYSAmIElYR0JFX1NGRl9UV0lOX0FYX0NBUEFCTEUpCisJCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX2RhX2N1OworCQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRVNSX0NBUEFCTEUpCisJCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX3NyOworCQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRUxSX0NBUEFCTEUpCisJCQkJaHctPnBoeS5zZnBfdHlwZSA9IGl4Z2JlX3NmcF90eXBlX2xyOworCQkJZWxzZQorCQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV91bmtub3duOworCQl9IGVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgeworCQkJaWYgKHRyYW5zbWlzc2lvbl9tZWRpYSAmIElYR0JFX1NGRl9UV0lOX0FYX0NBUEFCTEUpCisJCQkJaWYgKGh3LT5idXMubGFuX2lkID09IDApCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTA7CisJCQkJZWxzZQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX2RhX2N1X2NvcmUxOworCQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRVNSX0NBUEFCTEUpCisJCQkJaWYgKGh3LT5idXMubGFuX2lkID09IDApCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTA7CisJCQkJZWxzZQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUxOworCQkJZWxzZSBpZiAoY29tcF9jb2Rlc18xMGcgJiBJWEdCRV9TRkZfMTBHQkFTRUxSX0NBUEFCTEUpCisJCQkJaWYgKGh3LT5idXMubGFuX2lkID09IDApCisJCQkJCWh3LT5waHkuc2ZwX3R5cGUgPQorCQkJCQkgICAgICAgICAgICAgIGl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTA7CisJCQkJZWxzZQorCQkJCQlody0+cGh5LnNmcF90eXBlID0KKwkJCQkJICAgICAgICAgICAgICBpeGdiZV9zZnBfdHlwZV9zcmxyX2NvcmUxOworCQkJZWxzZQorCQkJCWh3LT5waHkuc2ZwX3R5cGUgPSBpeGdiZV9zZnBfdHlwZV91bmtub3duOworCQl9CiAKIAkJLyogRGV0ZXJtaW5lIFBIWSB2ZW5kb3IgKi8KIAkJaWYgKGh3LT5waHkudHlwZSA9PSBpeGdiZV9waHlfdW5rbm93bikgewpAQCAtNjA3LDYgKzY1MCw5IEBACiAJCQljYXNlIElYR0JFX1NGRl9WRU5ET1JfT1VJX0FWQUdPOgogCQkJCWh3LT5waHkudHlwZSA9IGl4Z2JlX3BoeV9zZnBfYXZhZ287CiAJCQkJYnJlYWs7CisJCQljYXNlIElYR0JFX1NGRl9WRU5ET1JfT1VJX0lOVEVMOgorCQkJCWh3LT5waHkudHlwZSA9IGl4Z2JlX3BoeV9zZnBfaW50ZWw7CisJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWlmICh0cmFuc21pc3Npb25fbWVkaWEgJgogCQkJCSAgICBJWEdCRV9TRkZfVFdJTl9BWF9DQVBBQkxFKQpAQCAtNjE2LDcgKzY2MiwyOCBAQAogCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCXN0YXR1cyA9IDA7CisJCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIgfHwKKwkJICAgIChody0+cGh5LnNmcF90eXBlICE9IGl4Z2JlX3NmcF90eXBlX3NyICYmCisJCSAgICAgaHctPnBoeS5zZnBfdHlwZSAhPSBpeGdiZV9zZnBfdHlwZV9sciAmJgorCQkgICAgIGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMCAmJgorCQkgICAgIGh3LT5waHkuc2ZwX3R5cGUgIT0gaXhnYmVfc2ZwX3R5cGVfc3Jscl9jb3JlMSkpIHsKKwkJCXN0YXR1cyA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWh3LT5lZXByb20ub3BzLnJlYWQoaHcsIElYR0JFX1BIWV9FTkZPUkNFX0lOVEVMX1NGUF9PRkZTRVQsCisJCSAgICAgICAgICAgICAgICAgICAgJmVuZm9yY2Vfc2ZwKTsKKwkJaWYgKCEoZW5mb3JjZV9zZnAgJiBJWEdCRV9QSFlfQUxMT1dfQU5ZX1NGUCkpIHsKKwkJCS8qIE1ha2Ugc3VyZSB3ZSdyZSBhIHN1cHBvcnRlZCBQSFkgdHlwZSAqLworCQkJaWYgKGh3LT5waHkudHlwZSA9PSBpeGdiZV9waHlfc2ZwX2ludGVsKSB7CisJCQkJc3RhdHVzID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJaHdfZGJnKGh3LCAiU0ZQKyBtb2R1bGUgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJc3RhdHVzID0gSVhHQkVfRVJSX1NGUF9OT1RfU1VQUE9SVEVEOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RhdHVzID0gMDsKKwkJfQogCX0KIAogb3V0OgpAQCAtNjUxLDcgKzcxOCw3IEBACiAJaHctPmVlcHJvbS5vcHMucmVhZChodywgSVhHQkVfUEhZX0lOSVRfT0ZGU0VUX05MLCBsaXN0X29mZnNldCk7CiAKIAlpZiAoKCEqbGlzdF9vZmZzZXQpIHx8ICgqbGlzdF9vZmZzZXQgPT0gMHhGRkZGKSkKLQkJcmV0dXJuIElYR0JFX0VSUl9QSFk7CisJCXJldHVybiBJWEdCRV9FUlJfU0ZQX05PX0lOSVRfU0VRX1BSRVNFTlQ7CiAKIAkvKiBTaGlmdCBvZmZzZXQgdG8gZmlyc3QgSUQgd29yZCAqLwogCSgqbGlzdF9vZmZzZXQpKys7CkBAIC02ODgsNiArNzU1LDUwMSBAQAogfQogCiAvKioKKyAqICBpeGdiZV9yZWFkX2kyY19lZXByb21fZ2VuZXJpYyAtIFJlYWRzIDggYml0IEVFUFJPTSB3b3JkIG92ZXIgSTJDIGludGVyZmFjZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAYnl0ZV9vZmZzZXQ6IEVFUFJPTSBieXRlIG9mZnNldCB0byByZWFkCisgKiAgQGVlcHJvbV9kYXRhOiB2YWx1ZSByZWFkCisgKgorICogIFBlcmZvcm1zIGJ5dGUgcmVhZCBvcGVyYXRpb24gdG8gU0ZQIG1vZHVsZSdzIEVFUFJPTSBvdmVyIEkyQyBpbnRlcmZhY2UuCisgKiovCitzMzIgaXhnYmVfcmVhZF9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKmVlcHJvbV9kYXRhKQoreworCXJldHVybiBody0+cGh5Lm9wcy5yZWFkX2kyY19ieXRlKGh3LCBieXRlX29mZnNldCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9JMkNfRUVQUk9NX0RFVl9BRERSLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVlcHJvbV9kYXRhKTsKK30KKworLyoqCisgKiAgaXhnYmVfd3JpdGVfaTJjX2VlcHJvbV9nZW5lcmljIC0gV3JpdGVzIDggYml0IEVFUFJPTSB3b3JkIG92ZXIgSTJDIGludGVyZmFjZQorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAYnl0ZV9vZmZzZXQ6IEVFUFJPTSBieXRlIG9mZnNldCB0byB3cml0ZQorICogIEBlZXByb21fZGF0YTogdmFsdWUgdG8gd3JpdGUKKyAqCisgKiAgUGVyZm9ybXMgYnl0ZSB3cml0ZSBvcGVyYXRpb24gdG8gU0ZQIG1vZHVsZSdzIEVFUFJPTSBvdmVyIEkyQyBpbnRlcmZhY2UuCisgKiovCitzMzIgaXhnYmVfd3JpdGVfaTJjX2VlcHJvbV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBlZXByb21fZGF0YSkKK3sKKwlyZXR1cm4gaHctPnBoeS5vcHMud3JpdGVfaTJjX2J5dGUoaHcsIGJ5dGVfb2Zmc2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9JMkNfRUVQUk9NX0RFVl9BRERSLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZXByb21fZGF0YSk7Cit9CisKKy8qKgorICogIGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpYyAtIFJlYWRzIDggYml0IHdvcmQgb3ZlciBJMkMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGJ5dGVfb2Zmc2V0OiBieXRlIG9mZnNldCB0byByZWFkCisgKiAgQGRhdGE6IHZhbHVlIHJlYWQKKyAqCisgKiAgUGVyZm9ybXMgYnl0ZSByZWFkIG9wZXJhdGlvbiB0byBTRlAgbW9kdWxlJ3MgRUVQUk9NIG92ZXIgSTJDIGludGVyZmFjZSBhdAorICogIGEgc3BlY2lmaWVkIGRlaXZjZSBhZGRyZXNzLgorICoqLworczMyIGl4Z2JlX3JlYWRfaTJjX2J5dGVfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggZGV2X2FkZHIsIHU4ICpkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCXUzMiBtYXhfcmV0cnkgPSAxOworCXUzMiByZXRyeSA9IDA7CisJYm9vbCBuYWNrID0gMTsKKworCWRvIHsKKwkJaXhnYmVfaTJjX3N0YXJ0KGh3KTsKKworCQkvKiBEZXZpY2UgQWRkcmVzcyBhbmQgd3JpdGUgaW5kaWNhdGlvbiAqLworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIGRldl9hZGRyKTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgYnl0ZV9vZmZzZXQpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJc3RhdHVzID0gaXhnYmVfZ2V0X2kyY19hY2soaHcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQlnb3RvIGZhaWw7CisKKwkJaXhnYmVfaTJjX3N0YXJ0KGh3KTsKKworCQkvKiBEZXZpY2UgQWRkcmVzcyBhbmQgcmVhZCBpbmRpY2F0aW9uICovCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgKGRldl9hZGRyIHwgMHgxKSk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19pbl9pMmNfYnl0ZShodywgZGF0YSk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2JpdChodywgbmFjayk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlpeGdiZV9pMmNfc3RvcChodyk7CisJCWJyZWFrOworCitmYWlsOgorCQlpeGdiZV9pMmNfYnVzX2NsZWFyKGh3KTsKKwkJcmV0cnkrKzsKKwkJaWYgKHJldHJ5IDwgbWF4X3JldHJ5KQorCQkJaHdfZGJnKGh3LCAiSTJDIGJ5dGUgcmVhZCBlcnJvciAtIFJldHJ5aW5nLlxuIik7CisJCWVsc2UKKwkJCWh3X2RiZyhodywgIkkyQyBieXRlIHJlYWQgZXJyb3IuXG4iKTsKKworCX0gd2hpbGUgKHJldHJ5IDwgbWF4X3JldHJ5KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX3dyaXRlX2kyY19ieXRlX2dlbmVyaWMgLSBXcml0ZXMgOCBiaXQgd29yZCBvdmVyIEkyQworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAYnl0ZV9vZmZzZXQ6IGJ5dGUgb2Zmc2V0IHRvIHdyaXRlCisgKiAgQGRhdGE6IHZhbHVlIHRvIHdyaXRlCisgKgorICogIFBlcmZvcm1zIGJ5dGUgd3JpdGUgb3BlcmF0aW9uIHRvIFNGUCBtb2R1bGUncyBFRVBST00gb3ZlciBJMkMgaW50ZXJmYWNlIGF0CisgKiAgYSBzcGVjaWZpZWQgZGV2aWNlIGFkZHJlc3MuCisgKiovCitzMzIgaXhnYmVfd3JpdGVfaTJjX2J5dGVfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBieXRlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGRldl9hZGRyLCB1OCBkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCXUzMiBtYXhfcmV0cnkgPSAxOworCXUzMiByZXRyeSA9IDA7CisKKwlkbyB7CisJCWl4Z2JlX2kyY19zdGFydChodyk7CisKKwkJc3RhdHVzID0gaXhnYmVfY2xvY2tfb3V0X2kyY19ieXRlKGh3LCBkZXZfYWRkcik7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUoaHcsIGJ5dGVfb2Zmc2V0KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2dldF9pMmNfYWNrKGh3KTsKKwkJaWYgKHN0YXR1cyAhPSAwKQorCQkJZ290byBmYWlsOworCisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShodywgZGF0YSk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlzdGF0dXMgPSBpeGdiZV9nZXRfaTJjX2Fjayhodyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWdvdG8gZmFpbDsKKworCQlpeGdiZV9pMmNfc3RvcChodyk7CisJCWJyZWFrOworCitmYWlsOgorCQlpeGdiZV9pMmNfYnVzX2NsZWFyKGh3KTsKKwkJcmV0cnkrKzsKKwkJaWYgKHJldHJ5IDwgbWF4X3JldHJ5KQorCQkJaHdfZGJnKGh3LCAiSTJDIGJ5dGUgd3JpdGUgZXJyb3IgLSBSZXRyeWluZy5cbiIpOworCQllbHNlCisJCQlod19kYmcoaHcsICJJMkMgYnl0ZSB3cml0ZSBlcnJvci5cbiIpOworCX0gd2hpbGUgKHJldHJ5IDwgbWF4X3JldHJ5KTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2kyY19zdGFydCAtIFNldHMgSTJDIHN0YXJ0IGNvbmRpdGlvbgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0cyBJMkMgc3RhcnQgY29uZGl0aW9uIChIaWdoIC0+IExvdyBvbiBTREEgd2hpbGUgU0NMIGlzIEhpZ2gpCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9pMmNfc3RhcnQoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisKKwkvKiBTdGFydCBjb25kaXRpb24gbXVzdCBiZWdpbiB3aXRoIGRhdGEgYW5kIGNsb2NrIGhpZ2ggKi8KKwlpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIDEpOworCWl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJLyogU2V0dXAgdGltZSBmb3Igc3RhcnQgY29uZGl0aW9uICg0Ljd1cykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfU1VfU1RBKTsKKworCWl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgMCk7CisKKwkvKiBIb2xkIHRpbWUgZm9yIHN0YXJ0IGNvbmRpdGlvbiAoNHVzKSAqLworCXVkZWxheShJWEdCRV9JMkNfVF9IRF9TVEEpOworCisJaXhnYmVfbG93ZXJfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBNaW5pbXVtIGxvdyBwZXJpb2Qgb2YgY2xvY2sgaXMgNC43IHVzICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0xPVyk7CisKK30KKworLyoqCisgKiAgaXhnYmVfaTJjX3N0b3AgLSBTZXRzIEkyQyBzdG9wIGNvbmRpdGlvbgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0cyBJMkMgc3RvcCBjb25kaXRpb24gKExvdyAtPiBIaWdoIG9uIFNEQSB3aGlsZSBTQ0wgaXMgSGlnaCkKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX2kyY19zdG9wKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCisJLyogU3RvcCBjb25kaXRpb24gbXVzdCBiZWdpbiB3aXRoIGRhdGEgbG93IGFuZCBjbG9jayBoaWdoICovCisJaXhnYmVfc2V0X2kyY19kYXRhKGh3LCAmaTJjY3RsLCAwKTsKKwlpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIFNldHVwIHRpbWUgZm9yIHN0b3AgY29uZGl0aW9uICg0dXMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX1NVX1NUTyk7CisKKwlpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIDEpOworCisJLyogYnVzIGZyZWUgdGltZSBiZXR3ZWVuIHN0b3AgYW5kIHN0YXJ0ICg0Ljd1cykqLworCXVkZWxheShJWEdCRV9JMkNfVF9CVUYpOworfQorCisvKioKKyAqICBpeGdiZV9jbG9ja19pbl9pMmNfYnl0ZSAtIENsb2NrcyBpbiBvbmUgYnl0ZSB2aWEgSTJDCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBkYXRhOiBkYXRhIGJ5dGUgdG8gY2xvY2sgaW4KKyAqCisgKiAgQ2xvY2tzIGluIG9uZSBieXRlIGRhdGEgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX2luX2kyY19ieXRlKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4ICpkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCXMzMiBpOworCWJvb2wgYml0ID0gMDsKKworCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7CisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX2luX2kyY19iaXQoaHcsICZiaXQpOworCQkqZGF0YSB8PSBiaXQgPDwgaTsKKworCQlpZiAoc3RhdHVzICE9IDApCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jbG9ja19vdXRfaTJjX2J5dGUgLSBDbG9ja3Mgb3V0IG9uZSBieXRlIHZpYSBJMkMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGRhdGE6IGRhdGEgYnl0ZSBjbG9ja2VkIG91dAorICoKKyAqICBDbG9ja3Mgb3V0IG9uZSBieXRlIGRhdGEgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2Nsb2NrX291dF9pMmNfYnl0ZShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCBkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCXMzMiBpOworCXUzMiBpMmNjdGw7CisJYm9vbCBiaXQgPSAwOworCisJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKKwkJYml0ID0gKGRhdGEgPj4gaSkgJiAweDE7CisJCXN0YXR1cyA9IGl4Z2JlX2Nsb2NrX291dF9pMmNfYml0KGh3LCBiaXQpOworCisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWJyZWFrOworCX0KKworCS8qIFJlbGVhc2UgU0RBIGxpbmUgKHNldCBoaWdoKSAqLworCWkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCWkyY2N0bCB8PSBJWEdCRV9JMkNfREFUQV9PVVQ7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JMkNDVEwsIGkyY2N0bCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfaTJjX2FjayAtIFBvbGxzIGZvciBJMkMgQUNLCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBDbG9ja3MgaW4vb3V0IG9uZSBiaXQgdmlhIEkyQyBkYXRhL2Nsb2NrCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2dldF9pMmNfYWNrKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHN0YXR1czsKKwl1MzIgaSA9IDA7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCXUzMiB0aW1lb3V0ID0gMTA7CisJYm9vbCBhY2sgPSAxOworCisJc3RhdHVzID0gaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwlpZiAoc3RhdHVzICE9IDApCisJCWdvdG8gb3V0OworCisJLyogTWluaW11bSBoaWdoIHBlcmlvZCBvZiBjbG9jayBpcyA0dXMgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfSElHSCk7CisKKwkvKiBQb2xsIGZvciBBQ0suICBOb3RlIHRoYXQgQUNLIGluIEkyQyBzcGVjIGlzCisJICogdHJhbnNpdGlvbiBmcm9tIDEgdG8gMCAqLworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKyspIHsKKwkJaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisJCWFjayA9IGl4Z2JlX2dldF9pMmNfZGF0YSgmaTJjY3RsKTsKKworCQl1ZGVsYXkoMSk7CisJCWlmIChhY2sgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChhY2sgPT0gMSkgeworCQlod19kYmcoaHcsICJJMkMgYWNrIHdhcyBub3QgcmVjZWl2ZWQuXG4iKTsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0kyQzsKKwl9CisKKwlpeGdiZV9sb3dlcl9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCS8qIE1pbmltdW0gbG93IHBlcmlvZCBvZiBjbG9jayBpcyA0LjcgdXMgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfTE9XKTsKKworb3V0OgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgorICogIGl4Z2JlX2Nsb2NrX2luX2kyY19iaXQgLSBDbG9ja3MgaW4gb25lIGJpdCB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGRhdGE6IHJlYWQgZGF0YSB2YWx1ZQorICoKKyAqICBDbG9ja3MgaW4gb25lIGJpdCB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfY2xvY2tfaW5faTJjX2JpdChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBib29sICpkYXRhKQoreworCXMzMiBzdGF0dXM7CisJdTMyIGkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCisJc3RhdHVzID0gaXhnYmVfcmFpc2VfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBNaW5pbXVtIGhpZ2ggcGVyaW9kIG9mIGNsb2NrIGlzIDR1cyAqLworCXVkZWxheShJWEdCRV9JMkNfVF9ISUdIKTsKKworCWkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCSpkYXRhID0gaXhnYmVfZ2V0X2kyY19kYXRhKCZpMmNjdGwpOworCisJaXhnYmVfbG93ZXJfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkvKiBNaW5pbXVtIGxvdyBwZXJpb2Qgb2YgY2xvY2sgaXMgNC43IHVzICovCisJdWRlbGF5KElYR0JFX0kyQ19UX0xPVyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9jbG9ja19vdXRfaTJjX2JpdCAtIENsb2NrcyBpbi9vdXQgb25lIGJpdCB2aWEgSTJDIGRhdGEvY2xvY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQGRhdGE6IGRhdGEgdmFsdWUgdG8gd3JpdGUKKyAqCisgKiAgQ2xvY2tzIG91dCBvbmUgYml0IHZpYSBJMkMgZGF0YS9jbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9jbG9ja19vdXRfaTJjX2JpdChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBib29sIGRhdGEpCit7CisJczMyIHN0YXR1czsKKwl1MzIgaTJjY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0kyQ0NUTCk7CisKKwlzdGF0dXMgPSBpeGdiZV9zZXRfaTJjX2RhdGEoaHcsICZpMmNjdGwsIGRhdGEpOworCWlmIChzdGF0dXMgPT0gMCkgeworCQlzdGF0dXMgPSBpeGdiZV9yYWlzZV9pMmNfY2xrKGh3LCAmaTJjY3RsKTsKKworCQkvKiBNaW5pbXVtIGhpZ2ggcGVyaW9kIG9mIGNsb2NrIGlzIDR1cyAqLworCQl1ZGVsYXkoSVhHQkVfSTJDX1RfSElHSCk7CisKKwkJaXhnYmVfbG93ZXJfaTJjX2NsayhodywgJmkyY2N0bCk7CisKKwkJLyogTWluaW11bSBsb3cgcGVyaW9kIG9mIGNsb2NrIGlzIDQuNyB1cy4KKwkJICogVGhpcyBhbHNvIHRha2VzIGNhcmUgb2YgdGhlIGRhdGEgaG9sZCB0aW1lLgorCQkgKi8KKwkJdWRlbGF5KElYR0JFX0kyQ19UX0xPVyk7CisJfSBlbHNlIHsKKwkJc3RhdHVzID0gSVhHQkVfRVJSX0kyQzsKKwkJaHdfZGJnKGh3LCAiSTJDIGRhdGEgd2FzIG5vdCBzZXQgdG8gJVhcbiIsIGRhdGEpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisvKioKKyAqICBpeGdiZV9yYWlzZV9pMmNfY2xrIC0gUmFpc2VzIHRoZSBJMkMgU0NMIGNsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBpMmNjdGw6IEN1cnJlbnQgdmFsdWUgb2YgSTJDQ1RMIHJlZ2lzdGVyCisgKgorICogIFJhaXNlcyB0aGUgSTJDIGNsb2NrIGxpbmUgJzAnLT4nMScKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfcmFpc2VfaTJjX2NsayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCkKK3sKKwlzMzIgc3RhdHVzID0gMDsKKworCSppMmNjdGwgfD0gSVhHQkVfSTJDX0NMS19PVVQ7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0kyQ0NUTCwgKmkyY2N0bCk7CisKKwkvKiBTQ0wgcmlzZSB0aW1lICgxMDAwbnMpICovCisJdWRlbGF5KElYR0JFX0kyQ19UX1JJU0UpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmVfbG93ZXJfaTJjX2NsayAtIExvd2VycyB0aGUgSTJDIFNDTCBjbG9jaworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAaTJjY3RsOiBDdXJyZW50IHZhbHVlIG9mIEkyQ0NUTCByZWdpc3RlcgorICoKKyAqICBMb3dlcnMgdGhlIEkyQyBjbG9jayBsaW5lICcxJy0+JzAnCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZV9sb3dlcl9pMmNfY2xrKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqaTJjY3RsKQoreworCisJKmkyY2N0bCAmPSB+SVhHQkVfSTJDX0NMS19PVVQ7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0kyQ0NUTCwgKmkyY2N0bCk7CisKKwkvKiBTQ0wgZmFsbCB0aW1lICgzMDBucykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfRkFMTCk7Cit9CisKKy8qKgorICogIGl4Z2JlX3NldF9pMmNfZGF0YSAtIFNldHMgdGhlIEkyQyBkYXRhIGJpdAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAaTJjY3RsOiBDdXJyZW50IHZhbHVlIG9mIEkyQ0NUTCByZWdpc3RlcgorICogIEBkYXRhOiBJMkMgZGF0YSB2YWx1ZSAoMCBvciAxKSB0byBzZXQKKyAqCisgKiAgU2V0cyB0aGUgSTJDIGRhdGEgYml0CisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3NldF9pMmNfZGF0YShzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKmkyY2N0bCwgYm9vbCBkYXRhKQoreworCXMzMiBzdGF0dXMgPSAwOworCisJaWYgKGRhdGEpCisJCSppMmNjdGwgfD0gSVhHQkVfSTJDX0RBVEFfT1VUOworCWVsc2UKKwkJKmkyY2N0bCAmPSB+SVhHQkVfSTJDX0RBVEFfT1VUOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9JMkNDVEwsICppMmNjdGwpOworCisJLyogRGF0YSByaXNlL2ZhbGwgKDEwMDBucy8zMDBucykgYW5kIHNldC11cCB0aW1lICgyNTBucykgKi8KKwl1ZGVsYXkoSVhHQkVfSTJDX1RfUklTRSArIElYR0JFX0kyQ19UX0ZBTEwgKyBJWEdCRV9JMkNfVF9TVV9EQVRBKTsKKworCS8qIFZlcmlmeSBkYXRhIHdhcyBzZXQgY29ycmVjdGx5ICovCisJKmkyY2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9JMkNDVEwpOworCWlmIChkYXRhICE9IGl4Z2JlX2dldF9pMmNfZGF0YShpMmNjdGwpKSB7CisJCXN0YXR1cyA9IElYR0JFX0VSUl9JMkM7CisJCWh3X2RiZyhodywgIkVycm9yIC0gSTJDIGRhdGEgd2FzIG5vdCBzZXQgdG8gJVguXG4iLCBkYXRhKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqICBpeGdiZV9nZXRfaTJjX2RhdGEgLSBSZWFkcyB0aGUgSTJDIFNEQSBkYXRhIGJpdAorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAaTJjY3RsOiBDdXJyZW50IHZhbHVlIG9mIEkyQ0NUTCByZWdpc3RlcgorICoKKyAqICBSZXR1cm5zIHRoZSBJMkMgZGF0YSBiaXQgdmFsdWUKKyAqKi8KK3N0YXRpYyBib29sIGl4Z2JlX2dldF9pMmNfZGF0YSh1MzIgKmkyY2N0bCkKK3sKKwlib29sIGRhdGE7CisKKwlpZiAoKmkyY2N0bCAmIElYR0JFX0kyQ19EQVRBX0lOKQorCQlkYXRhID0gMTsKKwllbHNlCisJCWRhdGEgPSAwOworCisJcmV0dXJuIGRhdGE7Cit9CisKKy8qKgorICogIGl4Z2JlX2kyY19idXNfY2xlYXIgLSBDbGVhcnMgdGhlIEkyQyBidXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIENsZWFycyB0aGUgSTJDIGJ1cyBieSBzZW5kaW5nIG5pbmUgY2xvY2sgcHVsc2VzLgorICogIFVzZWQgd2hlbiBkYXRhIGxpbmUgaXMgc3R1Y2sgbG93LgorICoqLworc3RhdGljIHZvaWQgaXhnYmVfaTJjX2J1c19jbGVhcihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXUzMiBpMmNjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfSTJDQ1RMKTsKKwl1MzIgaTsKKworCWl4Z2JlX3NldF9pMmNfZGF0YShodywgJmkyY2N0bCwgMSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7CisJCWl4Z2JlX3JhaXNlX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJCS8qIE1pbiBoaWdoIHBlcmlvZCBvZiBjbG9jayBpcyA0dXMgKi8KKwkJdWRlbGF5KElYR0JFX0kyQ19UX0hJR0gpOworCisJCWl4Z2JlX2xvd2VyX2kyY19jbGsoaHcsICZpMmNjdGwpOworCisJCS8qIE1pbiBsb3cgcGVyaW9kIG9mIGNsb2NrIGlzIDQuN3VzKi8KKwkJdWRlbGF5KElYR0JFX0kyQ19UX0xPVyk7CisJfQorCisJLyogUHV0IHRoZSBpMmMgYnVzIGJhY2sgdG8gZGVmYXVsdCBzdGF0ZSAqLworCWl4Z2JlX2kyY19zdG9wKGh3KTsKK30KKworLyoqCiAgKiAgaXhnYmVfY2hlY2tfcGh5X2xpbmtfdG54IC0gRGV0ZXJtaW5lIGxpbmsgYW5kIHNwZWVkIHN0YXR1cwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9waHkuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5oCmluZGV4IDQzYTk3YmMuLmNjNWYxYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3BoeS5oCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgotICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApAQCAtNTQsMTQgKzU0LDE1IEBACiAjZGVmaW5lIElYR0JFX0kyQ19FRVBST01fU1RBVFVTX0lOX1BST0dSRVNTICAweDMKIAogLyogQml0LXNoaWZ0IG1hY3JvcyAqLwotI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9CWVRFMF9TSElGVCAgICAxMgotI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9CWVRFMV9TSElGVCAgICA4Ci0jZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0JZVEUyX1NISUZUICAgIDQKKyNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTBfU0hJRlQgICAgMjQKKyNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTFfU0hJRlQgICAgMTYKKyNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfQllURTJfU0hJRlQgICAgOAogCiAvKiBWZW5kb3IgT1VJczogZm9ybWF0IG9mIE9VSSBpcyAweFtieXRlMF1bYnl0ZTFdW2J5dGUyXVswMF0gKi8KICNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfVFlDTyAgICAgMHgwMDQwNzYwMAogI2RlZmluZSBJWEdCRV9TRkZfVkVORE9SX09VSV9GVEwgICAgICAweDAwOTA2NTAwCiAjZGVmaW5lIElYR0JFX1NGRl9WRU5ET1JfT1VJX0FWQUdPICAgIDB4MDAxNzZBMDAKKyNkZWZpbmUgSVhHQkVfU0ZGX1ZFTkRPUl9PVUlfSU5URUwgICAgMHgwMDFCMjEwMAogCiAvKiBJMkMgU0RBIGFuZCBTQ0wgdGltaW5nIHBhcmFtZXRlcnMgZm9yIHN0YW5kYXJkIG1vZGUgKi8KICNkZWZpbmUgSVhHQkVfSTJDX1RfSERfU1RBICA0CkBAIC0xMDEsNSArMTAyLDEyIEBACiBzMzIgaXhnYmVfZ2V0X3NmcF9pbml0X3NlcXVlbmNlX29mZnNldHMoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgKmxpc3Rfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiAqZGF0YV9vZmZzZXQpOwotCitzMzIgaXhnYmVfcmVhZF9pMmNfYnl0ZV9nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4IGJ5dGVfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkZXZfYWRkciwgdTggKmRhdGEpOworczMyIGl4Z2JlX3dyaXRlX2kyY19ieXRlX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBkZXZfYWRkciwgdTggZGF0YSk7CitzMzIgaXhnYmVfcmVhZF9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKmVlcHJvbV9kYXRhKTsKK3MzMiBpeGdiZV93cml0ZV9pMmNfZWVwcm9tX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggYnl0ZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGVlcHJvbV9kYXRhKTsKICNlbmRpZiAvKiBfSVhHQkVfUEhZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV90eXBlLmgKaW5kZXggZjAxMWM1Ny4uMmIyZWNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaApAQCAtMSw3ICsxLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgSW50ZWwgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBMaW51eCBkcml2ZXIKLSAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKQEAgLTM0LDYgKzM0LDggQEAKICNkZWZpbmUgSVhHQkVfSU5URUxfVkVORE9SX0lEICAgMHg4MDg2CiAKIC8qIERldmljZSBJRHMgKi8KKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4ICAgICAgICAgICAgICAgMHgxMEI2CisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OF9CWCAgICAgICAgICAgIDB4MTUwOAogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThBRl9EVUFMX1BPUlQgICAweDEwQzYKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4QUZfU0lOR0xFX1BPUlQgMHgxMEM3CiAjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OEVCX1NGUF9MT00gICAgIDB4MTBEQgpAQCAtNDMsNiArNDUsOSBAQAogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThfREFfRFVBTF9QT1JUICAweDEwRjEKICNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk4X1NSX0RVQUxfUE9SVF9FTSAgICAgIDB4MTBFMQogI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OThFQl9YRl9MUiAgICAgICAweDEwRjQKKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5ICAgICAgICAgICAgICAgMHgxMEQ4CisjZGVmaW5lIElYR0JFX0RFVl9JRF84MjU5OV9LWDQgICAgICAgICAgIDB4MTBGNworI2RlZmluZSBJWEdCRV9ERVZfSURfODI1OTlfU0ZQICAgICAgICAgICAweDEwRkIKIAogLyogR2VuZXJhbCBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfQ1RSTCAgICAgIDB4MDAwMDAKQEAgLTUwLDkgKzU1LDEyIEBACiAjZGVmaW5lIElYR0JFX0NUUkxfRVhUICAweDAwMDE4CiAjZGVmaW5lIElYR0JFX0VTRFAgICAgICAweDAwMDIwCiAjZGVmaW5lIElYR0JFX0VPRFNEUCAgICAweDAwMDI4CisjZGVmaW5lIElYR0JFX0kyQ0NUTCAgICAweDAwMDI4CiAjZGVmaW5lIElYR0JFX0xFRENUTCAgICAweDAwMjAwCiAjZGVmaW5lIElYR0JFX0ZSVElNRVIgICAweDAwMDQ4CiAjZGVmaW5lIElYR0JFX1RDUFRJTUVSICAweDAwMDRDCisjZGVmaW5lIElYR0JFX0NPUkVTUEFSRSAweDAwNjAwCisjZGVmaW5lIElYR0JFX0VYVkVUICAgICAweDA1MDc4CiAKIC8qIE5WTSBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfRUVDICAgICAgIDB4MTAwMTAKQEAgLTY2LDYgKzc0LDE5IEBACiAjZGVmaW5lIElYR0JFX0ZMT1AgICAgICAweDEwMTNDCiAjZGVmaW5lIElYR0JFX0dSQyAgICAgICAweDEwMjAwCiAKKy8qIEdlbmVyYWwgUmVjZWl2ZSBDb250cm9sICovCisjZGVmaW5lIElYR0JFX0dSQ19NTkcgIDB4MDAwMDAwMDEgLyogTWFuYWdlYWJpbGl0eSBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfR1JDX0FQTUUgMHgwMDAwMDAwMiAvKiBBZHZhbmNlZCBQb3dlciBNYW5hZ2VtZW50IEVuYWJsZSAqLworCisjZGVmaW5lIElYR0JFX1ZQRERJQUcwICAweDEwMjA0CisjZGVmaW5lIElYR0JFX1ZQRERJQUcxICAweDEwMjA4CisKKy8qIEkyQ0NUTCBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfSTJDX0NMS19JTiAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX0kyQ19DTEtfT1VUICAgMHgwMDAwMDAwMgorI2RlZmluZSBJWEdCRV9JMkNfREFUQV9JTiAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVhHQkVfSTJDX0RBVEFfT1VUICAweDAwMDAwMDA4CisKIC8qIEludGVycnVwdCBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfRUlDUiAgICAgIDB4MDA4MDAKICNkZWZpbmUgSVhHQkVfRUlDUyAgICAgIDB4MDA4MDgKQEAgLTczLDI4ICs5NCw2MyBAQAogI2RlZmluZSBJWEdCRV9FSU1DICAgICAgMHgwMDg4OAogI2RlZmluZSBJWEdCRV9FSUFDICAgICAgMHgwMDgxMAogI2RlZmluZSBJWEdCRV9FSUFNICAgICAgMHgwMDg5MAotI2RlZmluZSBJWEdCRV9FSVRSKF9pKSAgKCgoX2kpIDw9IDIzKSA/ICgweDAwODIwICsgKChfaSkgKiA0KSkgOiAoMHgwMTIzMDAgKyAoKF9pKSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfRUlDU19FWChfaSkgICAoMHgwMEE5MCArIChfaSkgKiA0KQorI2RlZmluZSBJWEdCRV9FSU1TX0VYKF9pKSAgICgweDAwQUEwICsgKF9pKSAqIDQpCisjZGVmaW5lIElYR0JFX0VJTUNfRVgoX2kpICAgKDB4MDBBQjAgKyAoX2kpICogNCkKKyNkZWZpbmUgSVhHQkVfRUlBTV9FWChfaSkgICAoMHgwMEFEMCArIChfaSkgKiA0KQorLyoKKyAqIDgyNTk4IEVJVFIgaXMgMTYgYml0cyBidXQgc2V0IHRoZSBsaW1pdHMgYmFzZWQgb24gdGhlIG1heAorICogc3VwcG9ydGVkIGJ5IGFsbCBpeGdiZSBoYXJkd2FyZS4gIDgyNTk5IEVJVFIgaXMgb25seSAxMiBiaXRzLAorICogd2l0aCB0aGUgbG93ZXIgMyBhbHdheXMgemVyby4KKyAqLworI2RlZmluZSBJWEdCRV9NQVhfSU5UX1JBVEUgNDg4MjgxCisjZGVmaW5lIElYR0JFX01JTl9JTlRfUkFURSA5NTYKKyNkZWZpbmUgSVhHQkVfTUFYX0VJVFIgICAgIDB4MDAwMDBGRjgKKyNkZWZpbmUgSVhHQkVfTUlOX0VJVFIgICAgIDgKKyNkZWZpbmUgSVhHQkVfRUlUUihfaSkgICgoKF9pKSA8PSAyMykgPyAoMHgwMDgyMCArICgoX2kpICogNCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDAxMjMwMCArICgoKF9pKSAtIDI0KSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfRUlUUl9JVFJfSU5UX01BU0sgMHgwMDAwMEZGOAorI2RlZmluZSBJWEdCRV9FSVRSX0xMSV9NT0QgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIElYR0JFX0VJVFJfQ05UX1dESVMgICAgIDB4ODAwMDAwMDAKICNkZWZpbmUgSVhHQkVfSVZBUihfaSkgICgweDAwOTAwICsgKChfaSkgKiA0KSkgLyogMjQgYXQgMHg5MDAtMHg5NjAgKi8KKyNkZWZpbmUgSVhHQkVfSVZBUl9NSVNDIDB4MDBBMDAgLyogbWlzYyBNU0ktWCBpbnRlcnJ1cHQgY2F1c2VzICovCisjZGVmaW5lIElYR0JFX0VJVFJTRUwgICAweDAwODk0CiAjZGVmaW5lIElYR0JFX01TSVhUICAgICAweDAwMDAwIC8qIE1TSS1YIFRhYmxlLiAweDAwMDAgLSAweDAxQyAqLwogI2RlZmluZSBJWEdCRV9NU0lYUEJBICAgMHgwMjAwMCAvKiBNU0ktWCBQZW5kaW5nIGJpdCBhcnJheSAqLwogI2RlZmluZSBJWEdCRV9QQkFDTChfaSkgKCgoX2kpID09IDApID8gKDB4MTEwNjgpIDogKDB4MTEwQzAgKyAoKF9pKSAqIDQpKSkKICNkZWZpbmUgSVhHQkVfR1BJRSAgICAgIDB4MDA4OTgKIAogLyogRmxvdyBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBJWEdCRV9GQ0FEQlVMICAgMHgwMzIxMAorI2RlZmluZSBJWEdCRV9GQ0FEQlVIICAgMHgwMzIxNAorI2RlZmluZSBJWEdCRV9GQ0FNQUNMICAgMHgwNDMyOAorI2RlZmluZSBJWEdCRV9GQ0FNQUNIICAgMHgwNDMyQworI2RlZmluZSBJWEdCRV9GQ1JUSF84MjU5OShfaSkgKDB4MDMyNjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX0ZDUlRMXzgyNTk5KF9pKSAoMHgwMzIyMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfUEZDVE9QICAgIDB4MDMwMDgKICNkZWZpbmUgSVhHQkVfRkNUVFYoX2kpICgweDAzMjAwICsgKChfaSkgKiA0KSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLwogI2RlZmluZSBJWEdCRV9GQ1JUTChfaSkgKDB4MDMyMjAgKyAoKF9pKSAqIDgpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCiAjZGVmaW5lIElYR0JFX0ZDUlRIKF9pKSAoMHgwMzI2MCArICgoX2kpICogOCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfRkNSVFYgICAgIDB4MDMyQTAKKyNkZWZpbmUgSVhHQkVfRkNDRkcgICAgIDB4MDNEMDAKICNkZWZpbmUgSVhHQkVfVEZDUyAgICAgIDB4MENFMDAKIAogLyogUmVjZWl2ZSBETUEgUmVnaXN0ZXJzICovCi0jZGVmaW5lIElYR0JFX1JEQkFMKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwMCArICgoX2kpICogMHg0MCkpIDogKDB4MEQwMDAgKyAoKF9pIC0gNjQpICogMHg0MCkpKQotI2RlZmluZSBJWEdCRV9SREJBSChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDQgKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDA0ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUkRMRU4oX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDA4ICsgKChfaSkgKiAweDQwKSkgOiAoMHgwRDAwOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCi0jZGVmaW5lIElYR0JFX1JESChfaSkgICAoKChfaSkgPCA2NCkgPyAoMHgwMTAxMCArICgoX2kpICogMHg0MCkpIDogKDB4MEQwMTAgKyAoKF9pIC0gNjQpICogMHg0MCkpKQotI2RlZmluZSBJWEdCRV9SRFQoX2kpICAgKCgoX2kpIDwgNjQpID8gKDB4MDEwMTggKyAoKF9pKSAqIDB4NDApKSA6ICgweDBEMDE4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKLSNkZWZpbmUgSVhHQkVfUlhEQ1RMKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAyOCArICgoX2kpICogMHg0MCkpIDogKDB4MEQwMjggKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SREJBTChfaSkgKCgoX2kpIDwgNjQpID8gKDB4MDEwMDAgKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAwMCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JEQkFIKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAwNCArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDA0ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUkRMRU4oX2kpICgoKF9pKSA8IDY0KSA/ICgweDAxMDA4ICsgKChfaSkgKiAweDQwKSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEQwMDggKyAoKF9pIC0gNjQpICogMHg0MCkpKQorI2RlZmluZSBJWEdCRV9SREgoX2kpICAgKCgoX2kpIDwgNjQpID8gKDB4MDEwMTAgKyAoKF9pKSAqIDB4NDApKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAxMCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JEVChfaSkgICAoKChfaSkgPCA2NCkgPyAoMHgwMTAxOCArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBEMDE4ICsgKChfaSAtIDY0KSAqIDB4NDApKSkKKyNkZWZpbmUgSVhHQkVfUlhEQ1RMKF9pKSAoKChfaSkgPCA2NCkgPyAoMHgwMTAyOCArICgoX2kpICogMHg0MCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRDAyOCArICgoX2kgLSA2NCkgKiAweDQwKSkpCisjZGVmaW5lIElYR0JFX1JERENDICAgICAgMHgwMkYyMAorI2RlZmluZSBJWEdCRV9SWE1FTVdSQVAgIDB4MDMxOTAKKyNkZWZpbmUgSVhHQkVfU1RBUkNUUkwgICAweDAzMDI0CiAvKgogICogU3BsaXQgYW5kIFJlcGxpY2F0aW9uIFJlY2VpdmUgQ29udHJvbCBSZWdpc3RlcnMKICAqIDAwLTE1IDogMHgwMjEwMCArIG4qNApAQCAtMTI3LDEwICsxODMsMTUgQEAKICNkZWZpbmUgSVhHQkVfRFJFQ0NDVExfRElTQUJMRSAwCiAvKiBNdWx0aWNhc3QgVGFibGUgQXJyYXkgLSAxMjggZW50cmllcyAqLwogI2RlZmluZSBJWEdCRV9NVEEoX2kpICAgKDB4MDUyMDAgKyAoKF9pKSAqIDQpKQotI2RlZmluZSBJWEdCRV9SQUwoX2kpICAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDAwICsgKChfaSkgKiA4KSkgOiAoMHgwQTIwMCArICgoX2kpICogOCkpKQotI2RlZmluZSBJWEdCRV9SQUgoX2kpICAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDA0ICsgKChfaSkgKiA4KSkgOiAoMHgwQTIwNCArICgoX2kpICogOCkpKQorI2RlZmluZSBJWEdCRV9SQUwoX2kpICAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDAwICsgKChfaSkgKiA4KSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MEEyMDAgKyAoKF9pKSAqIDgpKSkKKyNkZWZpbmUgSVhHQkVfUkFIKF9pKSAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQwNCArICgoX2kpICogOCkpIDogXAorICAgICAgICAgICAgICAgICAgICAgICAgICgweDBBMjA0ICsgKChfaSkgKiA4KSkpCisjZGVmaW5lIElYR0JFX01QU0FSX0xPKF9pKSAoMHgwQTYwMCArICgoX2kpICogOCkpCisjZGVmaW5lIElYR0JFX01QU0FSX0hJKF9pKSAoMHgwQTYwNCArICgoX2kpICogOCkpCiAvKiBQYWNrZXQgc3BsaXQgcmVjZWl2ZSB0eXBlICovCi0jZGVmaW5lIElYR0JFX1BTUlRZUEUoX2kpICAgICgoKF9pKSA8PSAxNSkgPyAoMHgwNTQ4MCArICgoX2kpICogNCkpIDogKDB4MEVBMDAgKyAoKF9pKSAqIDQpKSkKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRShfaSkgICAgKCgoX2kpIDw9IDE1KSA/ICgweDA1NDgwICsgKChfaSkgKiA0KSkgOiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwRUEwMCArICgoX2kpICogNCkpKQogLyogYXJyYXkgb2YgNDA5NiAxLWJpdCB2bGFuIGZpbHRlcnMgKi8KICNkZWZpbmUgSVhHQkVfVkZUQShfaSkgICgweDBBMDAwICsgKChfaSkgKiA0KSkKIC8qYXJyYXkgb2YgNDA5NiA0LWJpdCB2bGFuIHZtZHEgaW5kaWNlcyAqLwpAQCAtMTM5LDYgKzIwMCwyOCBAQAogI2RlZmluZSBJWEdCRV9WTE5DVFJMICAgMHgwNTA4OAogI2RlZmluZSBJWEdCRV9NQ1NUQ1RSTCAgMHgwNTA5MAogI2RlZmluZSBJWEdCRV9NUlFDICAgICAgMHgwNTgxOAorI2RlZmluZSBJWEdCRV9TQVFGKF9pKSAgKDB4MEUwMDAgKyAoKF9pKSAqIDQpKSAvKiBTb3VyY2UgQWRkcmVzcyBRdWV1ZSBGaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfREFRRihfaSkgICgweDBFMjAwICsgKChfaSkgKiA0KSkgLyogRGVzdC4gQWRkcmVzcyBRdWV1ZSBGaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfU0RQUUYoX2kpICgweDBFNDAwICsgKChfaSkgKiA0KSkgLyogU3JjIERlc3QuIEFkZHIgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX0ZUUUYoX2kpICAoMHgwRTYwMCArICgoX2kpICogNCkpIC8qIEZpdmUgVHVwbGUgUXVldWUgRmlsdGVyICovCisjZGVmaW5lIElYR0JFX0VUUUYoX2kpICAoMHgwNTEyOCArICgoX2kpICogNCkpIC8qIEVUeXBlIFF1ZXVlIEZpbHRlciAqLworI2RlZmluZSBJWEdCRV9FVFFTKF9pKSAgKDB4MEVDMDAgKyAoKF9pKSAqIDQpKSAvKiBFVHlwZSBRdWV1ZSBTZWxlY3QgKi8KKyNkZWZpbmUgSVhHQkVfU1lOUUYgICAgIDB4MEVDMzAgLyogU1lOIFBhY2tldCBRdWV1ZSBGaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfUlFUQyAgICAgIDB4MEVDNzAKKyNkZWZpbmUgSVhHQkVfTVRRQyAgICAgIDB4MDgxMjAKKyNkZWZpbmUgSVhHQkVfVkxWRihfaSkgICgweDBGMTAwICsgKChfaSkgKiA0KSkgIC8qIDY0IG9mIHRoZXNlICgwLTYzKSAqLworI2RlZmluZSBJWEdCRV9WTFZGQihfaSkgKDB4MEYyMDAgKyAoKF9pKSAqIDQpKSAgLyogMTI4IG9mIHRoZXNlICgwLTEyNykgKi8KKyNkZWZpbmUgSVhHQkVfVlRfQ1RMICAgIDB4MDUxQjAKKyNkZWZpbmUgSVhHQkVfVkZSRShfaSkgICgweDA1MUUwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVkZURShfaSkgICgweDA4MTEwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfUURFICAgICAgIDB4MkYwNAorI2RlZmluZSBJWEdCRV9WTU9MUihfaSkgKDB4MEYwMDAgKyAoKF9pKSAqIDQpKSAvKiA2NCB0b3RhbCAqLworI2RlZmluZSBJWEdCRV9VVEEoX2kpICAgKDB4MEY0MDAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9WTVJDVEwoX2kpICAgICAgICAoMHgwRjYwMCArICgoX2kpICogNCkpCisjZGVmaW5lIElYR0JFX1ZNUlZMQU4oX2kpICAgICAgICgweDBGNjEwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVk1SVk0oX2kpICAgICAgICAgKDB4MEY2MzAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9MMzRUX0lNSVIoX2kpICAgICAgKDB4MEU4MDAgKyAoKF9pKSAqIDQpKSAvKjEyOCBvZiB0aGVzZSAoMC0xMjcpKi8KKyNkZWZpbmUgSVhHQkVfTExJVEhSRVNIIDB4MEVDOTAKICNkZWZpbmUgSVhHQkVfSU1JUihfaSkgICgweDA1QTgwICsgKChfaSkgKiA0KSkgIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KICNkZWZpbmUgSVhHQkVfSU1JUkVYVChfaSkgICAgICAgKDB4MDVBQTAgKyAoKF9pKSAqIDQpKSAgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogI2RlZmluZSBJWEdCRV9JTUlSVlAgICAgMHgwNUFDMApAQCAtMTQ2LDcgKzIyOSw2IEBACiAjZGVmaW5lIElYR0JFX1JFVEEoX2kpICAoMHgwNUMwMCArICgoX2kpICogNCkpICAvKiAzMiBvZiB0aGVzZSAoMC0zMSkgKi8KICNkZWZpbmUgSVhHQkVfUlNTUksoX2kpICgweDA1QzgwICsgKChfaSkgKiA0KSkgIC8qIDEwIG9mIHRoZXNlICgwLTkpICovCiAKLQogLyogVHJhbnNtaXQgRE1BIHJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9UREJBTChfaSkgKDB4MDYwMDAgKyAoKF9pKSAqIDB4NDApKSAvKiAzMiBvZiB0aGVzZSAoMC0zMSkqLwogI2RlZmluZSBJWEdCRV9UREJBSChfaSkgKDB4MDYwMDQgKyAoKF9pKSAqIDB4NDApKQpAQCAtMTU4LDcgKzI0MCwyMCBAQAogI2RlZmluZSBJWEdCRV9URFdCQUgoX2kpICgweDA2MDNDICsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgSVhHQkVfRFRYQ1RMICAgIDB4MDdFMDAKIAorI2RlZmluZSBJWEdCRV9ETUFUWENUTCAgMHgwNEE4MAorI2RlZmluZSBJWEdCRV9EVFhNWFNaUlEgICAgIDB4MDgxMDAKKyNkZWZpbmUgSVhHQkVfRFRYVENQRkxHTCAgICAweDA0QTg4CisjZGVmaW5lIElYR0JFX0RUWFRDUEZMR0ggICAgMHgwNEE4QworI2RlZmluZSBJWEdCRV9MQkRSUEVOICAgICAgIDB4MENBMDAKKyNkZWZpbmUgSVhHQkVfVFhQQlRIUkVTSChfaSkgKDB4MDQ5NTAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIDAgLSA3ICovCisKKyNkZWZpbmUgSVhHQkVfRE1BVFhDVExfVEUgICAgICAgMHgxIC8qIFRyYW5zbWl0IEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9ETUFUWENUTF9OUyAgICAgICAweDIgLyogTm8gU25vb3AgTFNPIGhkciBidWZmZXIgKi8KKyNkZWZpbmUgSVhHQkVfRE1BVFhDVExfR0RWICAgICAgMHg4IC8qIEdsb2JhbCBEb3VibGUgVkxBTiAqLworI2RlZmluZSBJWEdCRV9ETUFUWENUTF9WVF9TSElGVCAxNiAgLyogVkxBTiBFdGhlclR5cGUgKi8KICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTChfaSkgICAgKDB4MDcyMDAgKyAoKF9pKSAqIDQpKSAvKiAxNiBvZiB0aGVzZSAoMC0xNSkgKi8KKy8qIFR4IERDQSBDb250cm9sIHJlZ2lzdGVyIDogMTI4IG9mIHRoZXNlICgwLTEyNykgKi8KKyNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF84MjU5OShfaSkgICgweDA2MDBDICsgKChfaSkgKiAweDQwKSkKICNkZWZpbmUgSVhHQkVfVElQRyAgICAgIDB4MENCMDAKICNkZWZpbmUgSVhHQkVfVFhQQlNJWkUoX2kpICAgICAgKDB4MENDMDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICovCiAjZGVmaW5lIElYR0JFX01OR1RYTUFQICAweDBDRDEwCkBAIC0xNzUsOSArMjcwLDY5IEBACiAKICNkZWZpbmUgSVhHQkVfV1VQTCAgICAgIDB4MDU5MDAKICNkZWZpbmUgSVhHQkVfV1VQTSAgICAgIDB4MDVBMDAgLyogd2FrZSB1cCBwa3QgbWVtb3J5IDB4NUEwMC0weDVBN0MgKi8KLSNkZWZpbmUgSVhHQkVfRkhGVCAgICAgIDB4MDkwMDAgLyogRmxleCBob3N0IGZpbHRlciB0YWJsZSA5MDAwLTkzRkMgKi8KKyNkZWZpbmUgSVhHQkVfRkhGVChfbikgICAgICgweDA5MDAwICsgKF9uICogMHgxMDApKSAvKiBGbGV4IGhvc3QgZmlsdGVyIHRhYmxlICovCisjZGVmaW5lIElYR0JFX0ZIRlRfRVhUKF9uKSAoMHgwOTgwMCArIChfbiAqIDB4MTAwKSkgLyogRXh0IEZsZXhpYmxlIEhvc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBGaWx0ZXIgVGFibGUgKi8KIAotLyogTXVzaWMgcmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX0ZMRVhJQkxFX0ZJTFRFUl9DT1VOVF9NQVggICAgICAgICA0CisjZGVmaW5lIElYR0JFX0VYVF9GTEVYSUJMRV9GSUxURVJfQ09VTlRfTUFYICAgICAyCisKKy8qIEVhY2ggRmxleGlibGUgRmlsdGVyIGlzIGF0IG1vc3QgMTI4ICgweDgwKSBieXRlcyBpbiBsZW5ndGggKi8KKyNkZWZpbmUgSVhHQkVfRkxFWElCTEVfRklMVEVSX1NJWkVfTUFYICAxMjgKKyNkZWZpbmUgSVhHQkVfRkhGVF9MRU5HVEhfT0ZGU0VUICAgICAgICAweEZDICAvKiBMZW5ndGggYnl0ZSBpbiBGSEZUICovCisjZGVmaW5lIElYR0JFX0ZIRlRfTEVOR1RIX01BU0sgICAgICAgICAgMHgwRkYgLyogTGVuZ3RoIGluIGxvd2VyIGJ5dGUgKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHdha2V1cCByZWdpc3RlcnMgKi8KKy8qIFdha2UgVXAgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9XVUNfUE1FX0VOICAgICAweDAwMDAwMDAyIC8qIFBNRSBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VDX1BNRV9TVEFUVVMgMHgwMDAwMDAwNCAvKiBQTUUgU3RhdHVzICovCisjZGVmaW5lIElYR0JFX1dVQ19BRFZEM1dVQyAgIDB4MDAwMDAwMTAgLyogRDNDb2xkIHdha2UgdXAgY2FwLiBlbmFibGUqLworCisvKiBXYWtlIFVwIEZpbHRlciBDb250cm9sICovCisjZGVmaW5lIElYR0JFX1dVRkNfTE5LQyAweDAwMDAwMDAxIC8qIExpbmsgU3RhdHVzIENoYW5nZSBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfTUFHICAweDAwMDAwMDAyIC8qIE1hZ2ljIFBhY2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRVggICAweDAwMDAwMDA0IC8qIERpcmVjdGVkIEV4YWN0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19NQyAgIDB4MDAwMDAwMDggLyogRGlyZWN0ZWQgTXVsdGljYXN0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19CQyAgIDB4MDAwMDAwMTAgLyogQnJvYWRjYXN0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19BUlAgIDB4MDAwMDAwMjAgLyogQVJQIFJlcXVlc3QgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19JUFY0IDB4MDAwMDAwNDAgLyogRGlyZWN0ZWQgSVB2NCBQYWNrZXQgV2FrZXVwIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0lQVjYgMHgwMDAwMDA4MCAvKiBEaXJlY3RlZCBJUHY2IFBhY2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfTU5HICAweDAwMDAwMTAwIC8qIERpcmVjdGVkIE1nbXQgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKworI2RlZmluZSBJWEdCRV9XVUZDX0lHTk9SRV9UQ08gICAweDAwMDA4MDAwIC8qIElnbm9yZSBXYWtlT24gVENPIHBhY2tldHMgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFgwIDB4MDAwMTAwMDAgLyogRmxleGlibGUgRmlsdGVyIDAgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYMSAweDAwMDIwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAxIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDIgMHgwMDA0MDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMiBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFgzIDB4MDAwODAwMDAgLyogRmxleGlibGUgRmlsdGVyIDMgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX1dVRkNfRkxYNCAweDAwMTAwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciA0IEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWDUgMHgwMDIwMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgNSBFbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfV1VGQ19GTFhfRklMVEVSUyAgICAgMHgwMDBGMDAwMCAvKiBNYXNrIGZvciA0IGZsZXggZmlsdGVycyAqLworI2RlZmluZSBJWEdCRV9XVUZDX0VYVF9GTFhfRklMVEVSUyAweDAwMzAwMDAwIC8qIE1hc2sgZm9yIEV4dC4gZmxleCBmaWx0ZXJzICovCisjZGVmaW5lIElYR0JFX1dVRkNfQUxMX0ZJTFRFUlMgICAgIDB4MDAzRjAwRkYgLyogTWFzayBmb3IgYWxsIDYgd2FrZXVwIGZpbHRlcnMqLworI2RlZmluZSBJWEdCRV9XVUZDX0ZMWF9PRkZTRVQgICAgICAxNiAvKiBPZmZzZXQgdG8gdGhlIEZsZXhpYmxlIEZpbHRlcnMgYml0cyAqLworCisvKiBXYWtlIFVwIFN0YXR1cyAqLworI2RlZmluZSBJWEdCRV9XVVNfTE5LQyAgSVhHQkVfV1VGQ19MTktDCisjZGVmaW5lIElYR0JFX1dVU19NQUcgICBJWEdCRV9XVUZDX01BRworI2RlZmluZSBJWEdCRV9XVVNfRVggICAgSVhHQkVfV1VGQ19FWAorI2RlZmluZSBJWEdCRV9XVVNfTUMgICAgSVhHQkVfV1VGQ19NQworI2RlZmluZSBJWEdCRV9XVVNfQkMgICAgSVhHQkVfV1VGQ19CQworI2RlZmluZSBJWEdCRV9XVVNfQVJQICAgSVhHQkVfV1VGQ19BUlAKKyNkZWZpbmUgSVhHQkVfV1VTX0lQVjQgIElYR0JFX1dVRkNfSVBWNAorI2RlZmluZSBJWEdCRV9XVVNfSVBWNiAgSVhHQkVfV1VGQ19JUFY2CisjZGVmaW5lIElYR0JFX1dVU19NTkcgICBJWEdCRV9XVUZDX01ORworI2RlZmluZSBJWEdCRV9XVVNfRkxYMCAgSVhHQkVfV1VGQ19GTFgwCisjZGVmaW5lIElYR0JFX1dVU19GTFgxICBJWEdCRV9XVUZDX0ZMWDEKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDIgIElYR0JFX1dVRkNfRkxYMgorI2RlZmluZSBJWEdCRV9XVVNfRkxYMyAgSVhHQkVfV1VGQ19GTFgzCisjZGVmaW5lIElYR0JFX1dVU19GTFg0ICBJWEdCRV9XVUZDX0ZMWDQKKyNkZWZpbmUgSVhHQkVfV1VTX0ZMWDUgIElYR0JFX1dVRkNfRkxYNQorI2RlZmluZSBJWEdCRV9XVVNfRkxYX0ZJTFRFUlMgIElYR0JFX1dVRkNfRkxYX0ZJTFRFUlMKKworLyogV2FrZSBVcCBQYWNrZXQgTGVuZ3RoICovCisjZGVmaW5lIElYR0JFX1dVUExfTEVOR1RIX01BU0sgMHhGRkZGCisKKy8qIERDQiByZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfUk1DUyAgICAgIDB4MDNEMDAKICNkZWZpbmUgSVhHQkVfRFBNQ1MgICAgIDB4MDdGNDAKICNkZWZpbmUgSVhHQkVfUERQTUNTICAgIDB4MENEMDAKQEAgLTE5MCw2ICszNDUsMTIyIEBACiAjZGVmaW5lIElYR0JFX1REUFQyVENTUihfaSkgICAgICgweDBDRDQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLwogCiAKKy8qIFNlY3VyaXR5IENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX1NFQ1RYQ1RSTCAgICAgICAgIDB4MDg4MDAKKyNkZWZpbmUgSVhHQkVfU0VDVFhTVEFUICAgICAgICAgMHgwODgwNAorI2RlZmluZSBJWEdCRV9TRUNUWEJVRkZBRiAgICAgICAweDA4ODA4CisjZGVmaW5lIElYR0JFX1NFQ1RYTUlOSUZHICAgICAgIDB4MDg4MTAKKyNkZWZpbmUgSVhHQkVfU0VDVFhTVEFUICAgICAgICAgMHgwODgwNAorI2RlZmluZSBJWEdCRV9TRUNSWENUUkwgICAgICAgICAweDA4RDAwCisjZGVmaW5lIElYR0JFX1NFQ1JYU1RBVCAgICAgICAgIDB4MDhEMDQKKworLyogU2VjdXJpdHkgQml0IEZpZWxkcyBhbmQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfU0VDVFhDVFJMX1NFQ1RYX0RJUyAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX1NFQ1RYQ1RSTF9UWF9ESVMgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJWEdCRV9TRUNUWENUUkxfU1RPUkVfRk9SV0FSRCAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBJWEdCRV9TRUNUWFNUQVRfU0VDVFhfUkRZICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfU0VDVFhTVEFUX0VDQ19UWEVSUiAgICAgICAweDAwMDAwMDAyCisKKyNkZWZpbmUgSVhHQkVfU0VDUlhDVFJMX1NFQ1JYX0RJUyAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX1NFQ1JYQ1RSTF9SWF9ESVMgICAgICAgICAgMHgwMDAwMDAwMgorCisjZGVmaW5lIElYR0JFX1NFQ1JYU1RBVF9TRUNSWF9SRFkgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9TRUNSWFNUQVRfRUNDX1JYRVJSICAgICAgIDB4MDAwMDAwMDIKKworLyogTGlua1NlYyAoTWFjU2VjKSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ0FQICAgICAgICAgMHgwOEEwMAorI2RlZmluZSBJWEdCRV9MU0VDUlhDQVAgICAgICAgICAweDA4RjAwCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkwgICAgICAgIDB4MDhBMDQKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYU0NMICAgICAgICAgMHgwOEEwOCAvKiBTQ0kgTG93ICovCisjZGVmaW5lIElYR0JFX0xTRUNUWFNDSCAgICAgICAgIDB4MDhBMEMgLyogU0NJIEhpZ2ggKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYU0EgICAgICAgICAgMHgwOEExMAorI2RlZmluZSBJWEdCRV9MU0VDVFhQTjAgICAgICAgICAweDA4QTE0CisjZGVmaW5lIElYR0JFX0xTRUNUWFBOMSAgICAgICAgIDB4MDhBMTgKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYS0VZMChfbikgICAgKDB4MDhBMUMgKyAoNCAqIChfbikpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCisjZGVmaW5lIElYR0JFX0xTRUNUWEtFWTEoX24pICAgICgweDA4QTJDICsgKDQgKiAoX24pKSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMICAgICAgICAweDA4RjA0CisjZGVmaW5lIElYR0JFX0xTRUNSWFNDTCAgICAgICAgIDB4MDhGMDgKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYU0NIICAgICAgICAgMHgwOEYwQworI2RlZmluZSBJWEdCRV9MU0VDUlhTQShfaSkgICAgICAoMHgwOEYxMCArICg0ICogKF9pKSkpIC8qIDIgb2YgdGhlc2UgKDAtMSkgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYUE4oX2kpICAgICAgKDB4MDhGMTggKyAoNCAqIChfaSkpKSAvKiAyIG9mIHRoZXNlICgwLTEpICovCisjZGVmaW5lIElYR0JFX0xTRUNSWEtFWShfbiwgX20pICgweDA4RjIwICsgKCgweDEwICogKF9uKSkgKyAoNCAqIChfbSkpKSkKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYVVQgICAgICAgICAgMHgwOEEzQyAvKiBPdXRQa3RzVW50YWdnZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1RYUEtURSAgICAgICAgMHgwOEE0MCAvKiBPdXRQa3RzRW5jcnlwdGVkICovCisjZGVmaW5lIElYR0JFX0xTRUNUWFBLVFAgICAgICAgIDB4MDhBNDQgLyogT3V0UGt0c1Byb3RlY3RlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhPQ1RFICAgICAgICAweDA4QTQ4IC8qIE91dE9jdGV0c0VuY3J5cHRlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhPQ1RQICAgICAgICAweDA4QTRDIC8qIE91dE9jdGV0c1Byb3RlY3RlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhVVCAgICAgICAgICAweDA4RjQwIC8qIEluUGt0c1VudGFnZ2VkL0luUGt0c05vVGFnICovCisjZGVmaW5lIElYR0JFX0xTRUNSWE9DVEQgICAgICAgIDB4MDhGNDQgLyogSW5PY3RldHNEZWNyeXB0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYT0NUViAgICAgICAgMHgwOEY0OCAvKiBJbk9jdGV0c1ZhbGlkYXRlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhCQUQgICAgICAgICAweDA4RjRDIC8qIEluUGt0c0JhZFRhZyAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhOT1NDSSAgICAgICAweDA4RjUwIC8qIEluUGt0c05vU2NpICovCisjZGVmaW5lIElYR0JFX0xTRUNSWFVOU0NJICAgICAgIDB4MDhGNTQgLyogSW5Qa3RzVW5rbm93blNjaSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhVTkNIICAgICAgICAweDA4RjU4IC8qIEluUGt0c1VuY2hlY2tlZCAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhERUxBWSAgICAgICAweDA4RjVDIC8qIEluUGt0c0RlbGF5ZWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYTEFURSAgICAgICAgMHgwOEY2MCAvKiBJblBrdHNMYXRlICovCisjZGVmaW5lIElYR0JFX0xTRUNSWE9LKF9uKSAgICAgICgweDA4RjY0ICsgKDB4MDQgKiAoX24pKSkgLyogSW5Qa3RzT2sgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYSU5WKF9uKSAgICAgKDB4MDhGNkMgKyAoMHgwNCAqIChfbikpKSAvKiBJblBrdHNJbnZhbGlkICovCisjZGVmaW5lIElYR0JFX0xTRUNSWE5WKF9uKSAgICAgICgweDA4Rjc0ICsgKDB4MDQgKiAoX24pKSkgLyogSW5Qa3RzTm90VmFsaWQgKi8KKyNkZWZpbmUgSVhHQkVfTFNFQ1JYVU5TQSAgICAgICAgMHgwOEY3QyAvKiBJblBrdHNVbnVzZWRTYSAqLworI2RlZmluZSBJWEdCRV9MU0VDUlhOVVNBICAgICAgICAweDA4RjgwIC8qIEluUGt0c05vdFVzaW5nU2EgKi8KKworLyogTGlua1NlYyAoTWFjU2VjKSBCaXQgRmllbGRzIGFuZCBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9MU0VDVFhDQVBfU1VNX01BU0sgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ0FQX1NVTV9TSElGVCAgICAgICAxNgorI2RlZmluZSBJWEdCRV9MU0VDUlhDQVBfU1VNX01BU0sgICAgICAgIDB4MDBGRjAwMDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ0FQX1NVTV9TSElGVCAgICAgICAxNgorCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkxfRU5fTUFTSyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX0RJU0FCTEUgICAgICAgIDB4MAorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX0FVVEggICAgICAgICAgIDB4MQorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX0FVVEhfRU5DUllQVCAgIDB4MgorI2RlZmluZSBJWEdCRV9MU0VDVFhDVFJMX0FJU0NJICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgSVhHQkVfTFNFQ1RYQ1RSTF9QTlRIUlNIX01BU0sgICAweEZGRkZGRjAwCisjZGVmaW5lIElYR0JFX0xTRUNUWENUUkxfUlNWX01BU0sgICAgICAgMHgwMDAwMDBEOAorCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfRU5fTUFTSyAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX0VOX1NISUZUICAgICAgIDIKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9ESVNBQkxFICAgICAgICAweDAKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9DSEVDSyAgICAgICAgICAweDEKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9TVFJJQ1QgICAgICAgICAweDIKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9EUk9QICAgICAgICAgICAweDMKKyNkZWZpbmUgSVhHQkVfTFNFQ1JYQ1RSTF9QTFNIICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIElYR0JFX0xTRUNSWENUUkxfUlAgICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBJWEdCRV9MU0VDUlhDVFJMX1JTVl9NQVNLICAgICAgIDB4RkZGRkZGMzMKKworLyogSXBTZWMgUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX0lQU1RYSURYICAgICAgICAgIDB4MDg5MDAKKyNkZWZpbmUgSVhHQkVfSVBTVFhTQUxUICAgICAgICAgMHgwODkwNAorI2RlZmluZSBJWEdCRV9JUFNUWEtFWShfaSkgICAgICAoMHgwODkwOCArICg0ICogKF9pKSkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfSVBTUlhJRFggICAgICAgICAgMHgwOEUwMAorI2RlZmluZSBJWEdCRV9JUFNSWElQQUREUihfaSkgICAoMHgwOEUwNCArICg0ICogKF9pKSkpIC8qIDQgb2YgdGhlc2UgKDAtMykgKi8KKyNkZWZpbmUgSVhHQkVfSVBTUlhTUEkgICAgICAgICAgMHgwOEUxNAorI2RlZmluZSBJWEdCRV9JUFNSWElQSURYICAgICAgICAweDA4RTE4CisjZGVmaW5lIElYR0JFX0lQU1JYS0VZKF9pKSAgICAgICgweDA4RTFDICsgKDQgKiAoX2kpKSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLworI2RlZmluZSBJWEdCRV9JUFNSWFNBTFQgICAgICAgICAweDA4RTJDCisjZGVmaW5lIElYR0JFX0lQU1JYTU9EICAgICAgICAgIDB4MDhFMzAKKworI2RlZmluZSBJWEdCRV9TRUNUWENUUkxfU1RPUkVfRk9SV0FSRF9FTkFCTEUgICAgMHg0CisKKy8qIERDQiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSVhHQkVfUlRSUENTICAgICAgMHgwMjQzMAorI2RlZmluZSBJWEdCRV9SVFREQ1MgICAgICAweDA0OTAwCisjZGVmaW5lIElYR0JFX1JUVFBDUyAgICAgIDB4MENEMDAKKyNkZWZpbmUgSVhHQkVfUlRSVVAyVEMgICAgMHgwMzAyMAorI2RlZmluZSBJWEdCRV9SVFRVUDJUQyAgICAweDBDODAwCisjZGVmaW5lIElYR0JFX1JUUlBUNEMoX2kpICgweDAyMTQwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFJQVDRTKF9pKSAoMHgwMjE2MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRURFQyQyhfaSkgKDB4MDQ5MTAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUVERUMlMoX2kpICgweDA0OTMwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAoMC03KSAqLworI2RlZmluZSBJWEdCRV9SVFRQVDJDKF9pKSAoMHgwQ0QyMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKDAtNykgKi8KKyNkZWZpbmUgSVhHQkVfUlRUUFQyUyhfaSkgKDB4MENENDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX1JUVERRU0VMICAgIDB4MDQ5MDQKKyNkZWZpbmUgSVhHQkVfUlRURFQxQyAgICAgMHgwNDkwOAorI2RlZmluZSBJWEdCRV9SVFREVDFTICAgICAweDA0OTBDCisjZGVmaW5lIElYR0JFX1JUVERURUNDICAgIDB4MDQ5OTAKKyNkZWZpbmUgSVhHQkVfUlRURFRFQ0NfTk9fQkNOICAgMHgwMDAwMDEwMAorI2RlZmluZSBJWEdCRV9SVFRCQ05SQyAgICAweDA0OTg0CiAKIC8qIFN0YXRzIHJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9DUkNFUlJTICAgMHgwNDAwMApAQCAtMjA0LDYgKzQ3NSwxMSBAQAogI2RlZmluZSBJWEdCRV9MWE9OUlhDICAgMHgwQ0Y2MAogI2RlZmluZSBJWEdCRV9MWE9GRlRYQyAgMHgwM0Y2OAogI2RlZmluZSBJWEdCRV9MWE9GRlJYQyAgMHgwQ0Y2OAorI2RlZmluZSBJWEdCRV9MWE9OUlhDTlQgMHgwNDFBNAorI2RlZmluZSBJWEdCRV9MWE9GRlJYQ05UIDB4MDQxQTgKKyNkZWZpbmUgSVhHQkVfUFhPTlJYQ05UKF9pKSAgICAgKDB4MDQxNDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICovCisjZGVmaW5lIElYR0JFX1BYT0ZGUlhDTlQoX2kpICAgICgweDA0MTYwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSAqLworI2RlZmluZSBJWEdCRV9QWE9OMk9GRkNOVChfaSkgICAoMHgwMzI0MCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgKi8KICNkZWZpbmUgSVhHQkVfUFhPTlRYQyhfaSkgICAgICAgKDB4MDNGMDAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlIDNGMDAtM0YxQyovCiAjZGVmaW5lIElYR0JFX1BYT05SWEMoX2kpICAgICAgICgweDBDRjAwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSBDRjAwLUNGMUMqLwogI2RlZmluZSBJWEdCRV9QWE9GRlRYQyhfaSkgICAgICAoMHgwM0YyMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgM0YyMC0zRjNDKi8KQEAgLTI0MywxNCArNTE5LDIwIEBACiAjZGVmaW5lIElYR0JFX01QVEMgICAgICAweDA0MEYwCiAjZGVmaW5lIElYR0JFX0JQVEMgICAgICAweDA0MEY0CiAjZGVmaW5lIElYR0JFX1hFQyAgICAgICAweDA0MTIwCisjZGVmaW5lIElYR0JFX1NTVlBDICAgICAweDA4NzgwCiAKLSNkZWZpbmUgSVhHQkVfUlFTTVIoX2kpICgweDAyMzAwICsgKChfaSkgKiA0KSkgLyogMTYgb2YgdGhlc2UgKi8KLSNkZWZpbmUgSVhHQkVfVFFTTVIoX2kpICgoKF9pKSA8PSA3KSA/ICgweDA3MzAwICsgKChfaSkgKiA0KSkgOiAoMHgwODYwMCArICgoX2kpICogNCkpKQorI2RlZmluZSBJWEdCRV9SUVNNUihfaSkgKDB4MDIzMDAgKyAoKF9pKSAqIDQpKQorI2RlZmluZSBJWEdCRV9UUVNNUihfaSkgKCgoX2kpIDw9IDcpID8gKDB4MDczMDAgKyAoKF9pKSAqIDQpKSA6IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMHgwODYwMCArICgoX2kpICogNCkpKQorI2RlZmluZSBJWEdCRV9UUVNNKF9pKSAgKDB4MDg2MDAgKyAoKF9pKSAqIDQpKQogCiAjZGVmaW5lIElYR0JFX1FQUkMoX2kpICgweDAxMDMwICsgKChfaSkgKiAweDQwKSkgLyogMTYgb2YgdGhlc2UgKi8KICNkZWZpbmUgSVhHQkVfUVBUQyhfaSkgKDB4MDYwMzAgKyAoKF9pKSAqIDB4NDApKSAvKiAxNiBvZiB0aGVzZSAqLwogI2RlZmluZSBJWEdCRV9RQlJDKF9pKSAoMHgwMTAzNCArICgoX2kpICogMHg0MCkpIC8qIDE2IG9mIHRoZXNlICovCiAjZGVmaW5lIElYR0JFX1FCVEMoX2kpICgweDA2MDM0ICsgKChfaSkgKiAweDQwKSkgLyogMTYgb2YgdGhlc2UgKi8KKyNkZWZpbmUgSVhHQkVfUVBSREMoX2kpICgweDAxNDMwICsgKChfaSkgKiAweDQwKSkgLyogMTYgb2YgdGhlc2UgKi8KKyNkZWZpbmUgSVhHQkVfUUJUQ19MKF9pKSAoMHgwODcwMCArICgoX2kpICogMHg4KSkgLyogMTYgb2YgdGhlc2UgKi8KKyNkZWZpbmUgSVhHQkVfUUJUQ19IKF9pKSAoMHgwODcwNCArICgoX2kpICogMHg4KSkgLyogMTYgb2YgdGhlc2UgKi8KIAogLyogTWFuYWdlbWVudCAqLwogI2RlZmluZSBJWEdCRV9NQVZUVihfaSkgKDB4MDUwMTAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCkBAIC0yNjMsNiArNTQ1LDkgQEAKICNkZWZpbmUgSVhHQkVfTU1BTChfaSkgICgweDA1OTEwICsgKChfaSkgKiA4KSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLwogI2RlZmluZSBJWEdCRV9NTUFIKF9pKSAgKDB4MDU5MTQgKyAoKF9pKSAqIDgpKSAvKiA0IG9mIHRoZXNlICgwLTMpICovCiAjZGVmaW5lIElYR0JFX0ZURlQgICAgICAweDA5NDAwIC8qIDB4OTQwMC0weDk3RkMgKi8KKyNkZWZpbmUgSVhHQkVfTUVURihfaSkgICgweDA1MTkwICsgKChfaSkgKiA0KSkgLyogNCBvZiB0aGVzZSAoMC0zKSAqLworI2RlZmluZSBJWEdCRV9NREVGX0VYVChfaSkgKDB4MDUxNjAgKyAoKF9pKSAqIDQpKSAvKiA4IG9mIHRoZXNlICgwLTcpICovCisjZGVmaW5lIElYR0JFX0xTV0ZXICAgICAweDE1MDE0CiAKIC8qIEFSQyBTdWJzeXN0ZW0gcmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX0hJQ1IgICAgICAweDE1RjAwCkBAIC0yOTUsMTYgKzU4MCw2NSBAQAogI2RlZmluZSBJWEdCRV9EQ0FfSUQgICAgMHgxMTA3MAogI2RlZmluZSBJWEdCRV9EQ0FfQ1RSTCAgMHgxMTA3NAogCisvKiBQQ0llIHJlZ2lzdGVycyA4MjU5OS1zcGVjaWZpYyAqLworI2RlZmluZSBJWEdCRV9HQ1JfRVhUICAgICAgICAgICAweDExMDUwCisjZGVmaW5lIElYR0JFX0dTQ0xfNV84MjU5OSAgICAgIDB4MTEwMzAKKyNkZWZpbmUgSVhHQkVfR1NDTF82XzgyNTk5ICAgICAgMHgxMTAzNAorI2RlZmluZSBJWEdCRV9HU0NMXzdfODI1OTkgICAgICAweDExMDM4CisjZGVmaW5lIElYR0JFX0dTQ0xfOF84MjU5OSAgICAgIDB4MTEwM0MKKyNkZWZpbmUgSVhHQkVfUEhZQURSXzgyNTk5ICAgICAgMHgxMTA0MAorI2RlZmluZSBJWEdCRV9QSFlEQVRfODI1OTkgICAgICAweDExMDQ0CisjZGVmaW5lIElYR0JFX1BIWUNUTF84MjU5OSAgICAgIDB4MTEwNDgKKyNkZWZpbmUgSVhHQkVfUEJBQ0xSXzgyNTk5ICAgICAgMHgxMTA2OAorI2RlZmluZSBJWEdCRV9DSUFBXzgyNTk5ICAgICAgICAweDExMDg4CisjZGVmaW5lIElYR0JFX0NJQURfODI1OTkgICAgICAgIDB4MTEwOEMKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzBfODI1OTkgMHgxMTA5MAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfMV84MjU5OSAweDExMDk0CisjZGVmaW5lIElYR0JFX1BDSUVfRElBR18yXzgyNTk5IDB4MTEwOTgKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzNfODI1OTkgMHgxMTA5QworI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfNF84MjU5OSAweDExMEEwCisjZGVmaW5lIElYR0JFX1BDSUVfRElBR181XzgyNTk5IDB4MTEwQTQKKyNkZWZpbmUgSVhHQkVfUENJRV9ESUFHXzZfODI1OTkgMHgxMTBBOAorI2RlZmluZSBJWEdCRV9QQ0lFX0RJQUdfN184MjU5OSAweDExMEMwCisjZGVmaW5lIElYR0JFX0lOVFJQVF9DU1JfODI1OTkgIDB4MTEwQjAKKyNkZWZpbmUgSVhHQkVfSU5UUlBUX01BU0tfODI1OTkgMHgxMTBCOAorI2RlZmluZSBJWEdCRV9DRFFfTUJSXzgyNTk5ICAgICAweDExMEI0CisjZGVmaW5lIElYR0JFX01JU0NfUkVHXzgyNTk5ICAgIDB4MTEwRjAKKyNkZWZpbmUgSVhHQkVfRUNDX0NUUkxfMF84MjU5OSAgMHgxMTEwMAorI2RlZmluZSBJWEdCRV9FQ0NfQ1RSTF8xXzgyNTk5ICAweDExMTA0CisjZGVmaW5lIElYR0JFX0VDQ19TVEFUVVNfODI1OTkgIDB4MTEwRTAKKyNkZWZpbmUgSVhHQkVfQkFSX0NUUkxfODI1OTkgICAgMHgxMTBGNAorCisvKiBUaW1lIFN5bmMgUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX1RTWU5DUlhDVEwgMHgwNTE4OCAvKiBSeCBUaW1lIFN5bmMgQ29udHJvbCByZWdpc3RlciAtIFJXICovCisjZGVmaW5lIElYR0JFX1RTWU5DVFhDVEwgMHgwOEMwMCAvKiBUeCBUaW1lIFN5bmMgQ29udHJvbCByZWdpc3RlciAtIFJXICovCisjZGVmaW5lIElYR0JFX1JYU1RNUEwgICAgMHgwNTFFOCAvKiBSeCB0aW1lc3RhbXAgTG93IC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfUlhTVE1QSCAgICAweDA1MUE0IC8qIFJ4IHRpbWVzdGFtcCBIaWdoIC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfUlhTQVRSTCAgICAweDA1MUEwIC8qIFJ4IHRpbWVzdGFtcCBhdHRyaWJ1dGUgbG93IC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfUlhTQVRSSCAgICAweDA1MUE4IC8qIFJ4IHRpbWVzdGFtcCBhdHRyaWJ1dGUgaGlnaCAtIFJPICovCisjZGVmaW5lIElYR0JFX1JYTVRSTCAgICAgMHgwNTEyMCAvKiBSWCBtZXNzYWdlIHR5cGUgcmVnaXN0ZXIgbG93IC0gUlcgKi8KKyNkZWZpbmUgSVhHQkVfVFhTVE1QTCAgICAweDA4QzA0IC8qIFR4IHRpbWVzdGFtcCB2YWx1ZSBMb3cgLSBSTyAqLworI2RlZmluZSBJWEdCRV9UWFNUTVBIICAgIDB4MDhDMDggLyogVHggdGltZXN0YW1wIHZhbHVlIEhpZ2ggLSBSTyAqLworI2RlZmluZSBJWEdCRV9TWVNUSU1MICAgIDB4MDhDMEMgLyogU3lzdGVtIHRpbWUgcmVnaXN0ZXIgTG93IC0gUk8gKi8KKyNkZWZpbmUgSVhHQkVfU1lTVElNSCAgICAweDA4QzEwIC8qIFN5c3RlbSB0aW1lIHJlZ2lzdGVyIEhpZ2ggLSBSTyAqLworI2RlZmluZSBJWEdCRV9USU1JTkNBICAgIDB4MDhDMTQgLyogSW5jcmVtZW50IGF0dHJpYnV0ZXMgcmVnaXN0ZXIgLSBSVyAqLworI2RlZmluZSBJWEdCRV9SWFVEUCAgICAgIDB4MDhDMUMgLyogVGltZSBTeW5jIFJ4IFVEUCBQb3J0IC0gUlcgKi8KKwogLyogRGlhZ25vc3RpYyBSZWdpc3RlcnMgKi8KICNkZWZpbmUgSVhHQkVfUkRTVEFUQ1RMICAgMHgwMkMyMAogI2RlZmluZSBJWEdCRV9SRFNUQVQoX2kpICAoMHgwMkMwMCArICgoX2kpICogNCkpIC8qIDB4MDJDMDAtMHgwMkMxQyAqLwogI2RlZmluZSBJWEdCRV9SREhNUE4gICAgICAweDAyRjA4CiAjZGVmaW5lIElYR0JFX1JJQ19EVyhfaSkgICgweDAyRjEwICsgKChfaSkgKiA0KSkKICNkZWZpbmUgSVhHQkVfUkRQUk9CRSAgICAgMHgwMkYyMAorI2RlZmluZSBJWEdCRV9SRE1BTSAgICAgICAweDAyRjMwCisjZGVmaW5lIElYR0JFX1JETUFEICAgICAgIDB4MDJGMzQKICNkZWZpbmUgSVhHQkVfVERTVEFUQ1RMICAgMHgwN0MyMAogI2RlZmluZSBJWEdCRV9URFNUQVQoX2kpICAoMHgwN0MwMCArICgoX2kpICogNCkpIC8qIDB4MDdDMDAgLSAweDA3QzFDICovCiAjZGVmaW5lIElYR0JFX1RESE1QTiAgICAgIDB4MDdGMDgKKyNkZWZpbmUgSVhHQkVfVERITVBOMiAgICAgMHgwODJGQworI2RlZmluZSBJWEdCRV9UWERFU0NJQyAgICAweDA4MkNDCiAjZGVmaW5lIElYR0JFX1RJQ19EVyhfaSkgICgweDA3RjEwICsgKChfaSkgKiA0KSkKKyNkZWZpbmUgSVhHQkVfVElDX0RXMihfaSkgKDB4MDgyQjAgKyAoKF9pKSAqIDQpKQogI2RlZmluZSBJWEdCRV9URFBST0JFICAgICAweDA3RjIwCiAjZGVmaW5lIElYR0JFX1RYQlVGQ1RSTCAgIDB4MEM2MDAKICNkZWZpbmUgSVhHQkVfVFhCVUZEQVRBMCAgMHgwQzYxMApAQCAtMzMyLDYgKzY2Niw4IEBACiAjZGVmaW5lIElYR0JFX1RYREFUQVJEUFRSKF9pKSAgICgweDBDNzIwICsgKChfaSkgKiA0KSkgLyogOCBvZiB0aGVzZSBDNzIwLUM3MkMqLwogI2RlZmluZSBJWEdCRV9UWERFU0NSRFBUUihfaSkgICAoMHgwQzczMCArICgoX2kpICogNCkpIC8qIDggb2YgdGhlc2UgQzczMC1DNzNDKi8KICNkZWZpbmUgSVhHQkVfUENJRUVDQ0NUTCAweDExMDZDCisjZGVmaW5lIElYR0JFX1BDSUVFQ0NDVEwwIDB4MTExMDAKKyNkZWZpbmUgSVhHQkVfUENJRUVDQ0NUTDEgMHgxMTEwNAogI2RlZmluZSBJWEdCRV9QQlRYRUNDICAgMHgwQzMwMAogI2RlZmluZSBJWEdCRV9QQlJYRUNDICAgMHgwMzMwMAogI2RlZmluZSBJWEdCRV9HSEVDQ1IgICAgMHgxMTBCMApAQCAtMzU3LDI0ICs2OTMsNjEgQEAKICNkZWZpbmUgSVhHQkVfTVNSV0QgICAgIDB4MDQyNjAKICNkZWZpbmUgSVhHQkVfTUxBREQgICAgIDB4MDQyNjQKICNkZWZpbmUgSVhHQkVfTUhBREQgICAgIDB4MDQyNjgKKyNkZWZpbmUgSVhHQkVfTUFYRlJTICAgIDB4MDQyNjgKICNkZWZpbmUgSVhHQkVfVFJFRyAgICAgIDB4MDQyNkMKICNkZWZpbmUgSVhHQkVfUENTUzEgICAgIDB4MDQyODgKICNkZWZpbmUgSVhHQkVfUENTUzIgICAgIDB4MDQyOEMKICNkZWZpbmUgSVhHQkVfWFBDU1MgICAgIDB4MDQyOTAKKyNkZWZpbmUgSVhHQkVfTUZMQ04gICAgIDB4MDQyOTQKICNkZWZpbmUgSVhHQkVfU0VSREVTQyAgIDB4MDQyOTgKICNkZWZpbmUgSVhHQkVfTUFDUyAgICAgIDB4MDQyOUMKICNkZWZpbmUgSVhHQkVfQVVUT0MgICAgIDB4MDQyQTAKICNkZWZpbmUgSVhHQkVfTElOS1MgICAgIDB4MDQyQTQKKyNkZWZpbmUgSVhHQkVfTElOS1MyICAgIDB4MDQzMjQKICNkZWZpbmUgSVhHQkVfQVVUT0MyICAgIDB4MDQyQTgKICNkZWZpbmUgSVhHQkVfQVVUT0MzICAgIDB4MDQyQUMKICNkZWZpbmUgSVhHQkVfQU5MUDEgICAgIDB4MDQyQjAKICNkZWZpbmUgSVhHQkVfQU5MUDIgICAgIDB4MDQyQjQKICNkZWZpbmUgSVhHQkVfQVRMQVNDVEwgIDB4MDQ4MDAKKyNkZWZpbmUgSVhHQkVfTU1OR0MgICAgIDB4MDQyRDAKKyNkZWZpbmUgSVhHQkVfQU5MUE5QMSAgIDB4MDQyRDQKKyNkZWZpbmUgSVhHQkVfQU5MUE5QMiAgIDB4MDQyRDgKKyNkZWZpbmUgSVhHQkVfS1JQQ1NGQyAgIDB4MDQyRTAKKyNkZWZpbmUgSVhHQkVfS1JQQ1NTICAgIDB4MDQyRTQKKyNkZWZpbmUgSVhHQkVfRkVDUzEgICAgIDB4MDQyRTgKKyNkZWZpbmUgSVhHQkVfRkVDUzIgICAgIDB4MDQyRUMKKyNkZWZpbmUgSVhHQkVfU01BREFSQ1RMIDB4MTRGMTAKKyNkZWZpbmUgSVhHQkVfTVBWQyAgICAgIDB4MDQzMTgKKyNkZWZpbmUgSVhHQkVfU0dNSUlDICAgIDB4MDQzMTQKKworLyogT21lciBDT1JFQ1RMICovCisjZGVmaW5lIElYR0JFX0NPUkVDVEwgICAgICAgICAgIDB4MDE0RjAwCisvKiBCQVJDVFJMICovCisjZGVmaW5lIElYR0JFX0JBUkNUUkwgICAgICAgICAgIDB4MTEwRjQKKyNkZWZpbmUgSVhHQkVfQkFSQ1RSTF9GTFNJWkUgICAgMHgwNzAwCisjZGVmaW5lIElYR0JFX0JBUkNUUkxfQ1NSU0laRSAgIDB4MjAwMAogCiAvKiBSRFJYQ1RMIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9SRFJYQ1RMX1JETVRTXzFfMiAgICAgMHgwMDAwMDAwMCAvKiBSeCBEZXNjIE1pbiBUaHJlc2hvbGQgU2l6ZSAqLworI2RlZmluZSBJWEdCRV9SRFJYQ1RMX0NSQ1NUUklQICAgICAgMHgwMDAwMDAwMiAvKiBDUkMgU3RyaXAgKi8KICNkZWZpbmUgSVhHQkVfUkRSWENUTF9NVk1FTiAgICAgICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgSVhHQkVfUkRSWENUTF9ETUFJRE9ORSAgICAgIDB4MDAwMDAwMDggLyogRE1BIGluaXQgY3ljbGUgZG9uZSAqLworI2RlZmluZSBJWEdCRV9SRFJYQ1RMX0FHR0RJUyAgICAgICAgMHgwMDAxMDAwMCAvKiBBZ2dyZWdhdGlvbiBkaXNhYmxlICovCisKKy8qIFJRVEMgQml0IE1hc2tzIGFuZCBTaGlmdHMgKi8KKyNkZWZpbmUgSVhHQkVfUlFUQ19TSElGVF9UQyhfaSkgICAgICgoX2kpICogNCkKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzBfTUFTSyAgICAgICAgICgweDcgPDwgMCkKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzFfTUFTSyAgICAgICAgICgweDcgPDwgNCkKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzJfTUFTSyAgICAgICAgICgweDcgPDwgOCkKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzNfTUFTSyAgICAgICAgICgweDcgPDwgMTIpCisjZGVmaW5lIElYR0JFX1JRVENfVEM0X01BU0sgICAgICAgICAoMHg3IDw8IDE2KQorI2RlZmluZSBJWEdCRV9SUVRDX1RDNV9NQVNLICAgICAgICAgKDB4NyA8PCAyMCkKKyNkZWZpbmUgSVhHQkVfUlFUQ19UQzZfTUFTSyAgICAgICAgICgweDcgPDwgMjQpCisjZGVmaW5lIElYR0JFX1JRVENfVEM3X01BU0sgICAgICAgICAoMHg3IDw8IDI4KQorCisvKiBQU1JUWVBFLlJRUEwgQml0IG1hc2tzIGFuZCBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9QU1JUWVBFX1JRUExfTUFTSyAgICAgMHg3CisjZGVmaW5lIElYR0JFX1BTUlRZUEVfUlFQTF9TSElGVCAgICAyOQogCiAvKiBDVFJMIEJpdCBNYXNrcyAqLwogI2RlZmluZSBJWEdCRV9DVFJMX0dJT19ESVMgICAgICAweDAwMDAwMDA0IC8qIEdsb2JhbCBJTyBNYXN0ZXIgRGlzYWJsZSBiaXQgKi8KQEAgLTM4OSw2ICs3NjIsNyBAQAogI2RlZmluZSBJWEdCRV9NSEFERF9NRlNfU0hJRlQgICAxNgogCiAvKiBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9DVFJMX0VYVF9QRlJTVEQgICAweDAwMDA0MDAwIC8qIFBoeXNpY2FsIEZ1bmN0aW9uIFJlc2V0IERvbmUgKi8KICNkZWZpbmUgSVhHQkVfQ1RSTF9FWFRfTlNfRElTICAgMHgwMDAxMDAwMCAvKiBObyBTbm9vcCBkaXNhYmxlICovCiAjZGVmaW5lIElYR0JFX0NUUkxfRVhUX1JPX0RJUyAgIDB4MDAwMjAwMDAgLyogUmVsYXhlZCBPcmRlcmluZyBkaXNhYmxlICovCiAjZGVmaW5lIElYR0JFX0NUUkxfRVhUX0RSVl9MT0FEIDB4MTAwMDAwMDAgLyogRHJpdmVyIGxvYWRlZCBiaXQgZm9yIEZXICovCkBAIC00MDEsNiArNzc1LDggQEAKICNkZWZpbmUgSVhHQkVfRENBX0NUUkxfRENBX01PREVfQ0IyIDB4MDIgLyogRENBIE1vZGUgQ0IyICovCiAKICNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9DUFVJRF9NQVNLIDB4MDAwMDAwMUYgLyogUnggQ1BVSUQgTWFzayAqLworI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX01BU0tfODI1OTkgIDB4RkYwMDAwMDAgLyogUnggQ1BVSUQgTWFzayAqLworI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0NQVUlEX1NISUZUXzgyNTk5IDI0IC8qIFJ4IENQVUlEIFNoaWZ0ICovCiAjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfREVTQ19EQ0FfRU4gKDEgPDwgNSkgLyogRENBIFJ4IERlc2MgZW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0RDQV9SWENUUkxfSEVBRF9EQ0FfRU4gKDEgPDwgNikgLyogRENBIFJ4IERlc2MgaGVhZGVyIGVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9EQ0FfUlhDVFJMX0RBVEFfRENBX0VOICgxIDw8IDcpIC8qIERDQSBSeCBEZXNjIHBheWxvYWQgZW5hYmxlICovCkBAIC00MDksNiArNzg1LDggQEAKICNkZWZpbmUgSVhHQkVfRENBX1JYQ1RSTF9ERVNDX0hTUk9fRU4gKDEgPDwgMTUpIC8qIERDQSBSeCBTcGxpdCBIZWFkZXIgUk8gKi8KIAogI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX0NQVUlEX01BU0sgMHgwMDAwMDAxRiAvKiBUeCBDUFVJRCBNYXNrICovCisjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfQ1BVSURfTUFTS184MjU5OSAgMHhGRjAwMDAwMCAvKiBUeCBDUFVJRCBNYXNrICovCisjZGVmaW5lIElYR0JFX0RDQV9UWENUUkxfQ1BVSURfU0hJRlRfODI1OTkgMjQgLyogVHggQ1BVSUQgU2hpZnQgKi8KICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF9ERVNDX0RDQV9FTiAoMSA8PCA1KSAvKiBEQ0EgVHggRGVzYyBlbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTF9UWF9XQl9ST19FTiAoMSA8PCAxMSkgLyogVHggRGVzYyB3cml0ZWJhY2sgUk8gYml0ICovCiAjZGVmaW5lIElYR0JFX0RDQV9NQVhfUVVFVUVTXzgyNTk4ICAgMTYgLyogRENBIHJlZ3Mgb25seSBvbiAxNiBxdWV1ZXMgKi8KQEAgLTQ1Miw2ICs4MzAsOCBAQAogI2RlZmluZSBJWEdCRV9BVExBU19QRE5fVFhfMUdfUUxfQUxMICAgIDB4RjAKICNkZWZpbmUgSVhHQkVfQVRMQVNfUEROX1RYX0FOX1FMX0FMTCAgICAweEYwCiAKKy8qIE9tZXIgYml0IG1hc2tzICovCisjZGVmaW5lIElYR0JFX0NPUkVDVExfV1JJVEVfQ01EICAgICAgICAgMHgwMDAxMDAwMAogCiAvKiBEZXZpY2UgVHlwZSBkZWZpbml0aW9ucyBmb3IgbmV3IHByb3RvY29sIE1ESU8gY29tbWFuZHMgKi8KICNkZWZpbmUgSVhHQkVfTURJT19QTUFfUE1EX0RFVl9UWVBFICAgICAgICAgICAgICAgMHgxCkBAIC00NzksOCArODU5LDExIEBACiAjZGVmaW5lIElYR0JFX01ESU9fUEhZX1NQRUVEX0FCSUxJVFkgICAweDQgLyogU3BlZWQgQWJpbGl0eSBSZWcgKi8KICNkZWZpbmUgSVhHQkVfTURJT19QSFlfU1BFRURfMTBHICAgICAgIDB4MDAwMSAvKiAxMEcgY2FwYWJsZSAqLwogI2RlZmluZSBJWEdCRV9NRElPX1BIWV9TUEVFRF8xRyAgICAgICAgMHgwMDEwIC8qIDFHIGNhcGFibGUgKi8KKyNkZWZpbmUgSVhHQkVfTURJT19QSFlfRVhUX0FCSUxJVFkgICAgICAgIDB4QiAvKiBFeHQgQWJpbGl0eSBSZWcgKi8KKyNkZWZpbmUgSVhHQkVfTURJT19QSFlfMTBHQkFTRVRfQUJJTElUWSAgIDB4MDAwNCAvKiAxMEdCYXNlVCBjYXBhYmxlICovCisjZGVmaW5lIElYR0JFX01ESU9fUEhZXzEwMDBCQVNFVF9BQklMSVRZICAweDAwMjAgLyogMTAwMEJhc2VUIGNhcGFibGUgKi8KIAotI2RlZmluZSBJWEdCRV9NRElPX1BNQV9QTURfU0RBX1NDTF9BRERSICAgICAweEMzMEEgLyogUEhZX1hTIFNEQS9TQ0wgQWRkcmVzcyBSZWcgKi8KKyNkZWZpbmUgSVhHQkVfTURJT19QTUFfUE1EX1NEQV9TQ0xfQUREUiAgICAgMHhDMzBBIC8qIFBIWV9YUyBTREEvU0NMIEFkZHIgUmVnICovCiAjZGVmaW5lIElYR0JFX01ESU9fUE1BX1BNRF9TREFfU0NMX0RBVEEgICAgIDB4QzMwQiAvKiBQSFlfWFMgU0RBL1NDTCBEYXRhIFJlZyAqLwogI2RlZmluZSBJWEdCRV9NRElPX1BNQV9QTURfU0RBX1NDTF9TVEFUICAgICAweEMzMEMgLyogUEhZX1hTIFNEQS9TQ0wgU3RhdHVzIFJlZyAqLwogCkBAIC00OTUsNyArODc4LDcgQEAKICNkZWZpbmUgSVhHQkVfUEhZX1JFVklTSU9OX01BU0sgICAgICAgIDB4RkZGRkZGRjAKICNkZWZpbmUgSVhHQkVfTUFYX1BIWV9BRERSICAgICAgICAgICAgIDMyCiAKLS8qIFBIWSBJRHMgKi8KKy8qIFBIWSBJRHMqLwogI2RlZmluZSBUTjEwMTBfUEhZX0lEICAgIDB4MDBBMTk0MTAKICNkZWZpbmUgVE5YX0ZXX1JFViAgICAgICAweEIKICNkZWZpbmUgUVQyMDIyX1BIWV9JRCAgICAweDAwNDNBNDAwCkBAIC01MTUsMTUgKzg5OCwyMiBAQAogI2RlZmluZSBJWEdCRV9DT05UUk9MX05MICAgICAgICAgMHgwMDBGCiAjZGVmaW5lIElYR0JFX0NPTlRST0xfRU9MX05MICAgICAweDBGRkYKICNkZWZpbmUgSVhHQkVfQ09OVFJPTF9TT0xfTkwgICAgIDB4MDAwMAorI2RlZmluZSBJWEdCRV9QSFlfRU5GT1JDRV9JTlRFTF9TRlBfT0ZGU0VUIDB4MDAyQworI2RlZmluZSBJWEdCRV9QSFlfQUxMT1dfQU5ZX1NGUCAgICAgICAgICAgIDB4MQogCiAvKiBHZW5lcmFsIHB1cnBvc2UgSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9TRFAwX0dQSUVOICAgICAgICAgMHgwMDAwMDAwMSAvKiBTRFAwICovCiAjZGVmaW5lIElYR0JFX1NEUDFfR1BJRU4gICAgICAgICAweDAwMDAwMDAyIC8qIFNEUDEgKi8KKyNkZWZpbmUgSVhHQkVfU0RQMl9HUElFTiAgICAgICAgIDB4MDAwMDAwMDQgLyogU0RQMiAqLwogI2RlZmluZSBJWEdCRV9HUElFX01TSVhfTU9ERSAgICAgMHgwMDAwMDAxMCAvKiBNU0ktWCBtb2RlICovCiAjZGVmaW5lIElYR0JFX0dQSUVfT0NEICAgICAgICAgICAweDAwMDAwMDIwIC8qIE90aGVyIENsZWFyIERpc2FibGUgKi8KICNkZWZpbmUgSVhHQkVfR1BJRV9FSU1FTiAgICAgICAgIDB4MDAwMDAwNDAgLyogSW1tZWRpYXRlIEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfR1BJRV9FSUFNRSAgICAgICAgIDB4NDAwMDAwMDAKICNkZWZpbmUgSVhHQkVfR1BJRV9QQkFfU1VQUE9SVCAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfR1BJRV9WVE1PREVfTUFTSyAgIDB4MDAwMEMwMDAgLyogVlQgTW9kZSBNYXNrICovCisjZGVmaW5lIElYR0JFX0dQSUVfVlRNT0RFXzE2ICAgICAweDAwMDA0MDAwIC8qIDE2IFZGcyA4IHF1ZXVlcyBwZXIgVkYgKi8KKyNkZWZpbmUgSVhHQkVfR1BJRV9WVE1PREVfMzIgICAgIDB4MDAwMDgwMDAgLyogMzIgVkZzIDQgcXVldWVzIHBlciBWRiAqLworI2RlZmluZSBJWEdCRV9HUElFX1ZUTU9ERV82NCAgICAgMHgwMDAwQzAwMCAvKiA2NCBWRnMgMiBxdWV1ZXMgcGVyIFZGICovCiAKIC8qIFRyYW5zbWl0IEZsb3cgQ29udHJvbCBzdGF0dXMgKi8KICNkZWZpbmUgSVhHQkVfVEZDU19UWE9GRiAgICAgICAgIDB4MDAwMDAwMDEKQEAgLTU2NCw2ICs5NTQsMjEgQEAKICNkZWZpbmUgSVhHQkVfVk1EX0NUTF9WTURRX0VOICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIElYR0JFX1ZNRF9DVExfVk1EUV9GSUxURVIgMHgwMDAwMDAwMgogCisvKiBWVF9DVEwgYml0bWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfVlRfQ1RMX0RJU19ERUZQTCAgMHgyMDAwMDAwMCAvKiBkaXNhYmxlIGRlZmF1bHQgcG9vbCAqLworI2RlZmluZSBJWEdCRV9WVF9DVExfUkVQTEVOICAgICAweDQwMDAwMDAwIC8qIHJlcGxpY2F0aW9uIGVuYWJsZWQgKi8KKyNkZWZpbmUgSVhHQkVfVlRfQ1RMX1ZUX0VOQUJMRSAgMHgwMDAwMDAwMSAgLyogRW5hYmxlIFZUIE1vZGUgKi8KKworLyogVk1PTFIgYml0bWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfVk1PTFJfQVVQRSAgICAgICAgMHgwMTAwMDAwMCAvKiBhY2NlcHQgdW50YWdnZWQgcGFja2V0cyAqLworI2RlZmluZSBJWEdCRV9WTU9MUl9ST01QRSAgICAgICAweDAyMDAwMDAwIC8qIGFjY2VwdCBwYWNrZXRzIGluIE1UQSB0YmwgKi8KKyNkZWZpbmUgSVhHQkVfVk1PTFJfUk9QRSAgICAgICAgMHgwNDAwMDAwMCAvKiBhY2NlcHQgcGFja2V0cyBpbiBVQyB0YmwgKi8KKyNkZWZpbmUgSVhHQkVfVk1PTFJfQkFNICAgICAgICAgMHgwODAwMDAwMCAvKiBhY2NlcHQgYnJvYWRjYXN0IHBhY2tldHMgKi8KKyNkZWZpbmUgSVhHQkVfVk1PTFJfTVBFICAgICAgICAgMHgxMDAwMDAwMCAvKiBtdWx0aWNhc3QgcHJvbWlzY3VvdXMgKi8KKworLyogVkZSRSBiaXRtYXNrICovCisjZGVmaW5lIElYR0JFX1ZGUkVfRU5BQkxFX0FMTCAgIDB4RkZGRkZGRkYKKwogLyogUkRITVBOIGFuZCBUREhNUE4gYml0bWFza3MgKi8KICNkZWZpbmUgSVhHQkVfUkRITVBOX1JESUNBRERSICAgICAgIDB4MDA3RkY4MDAKICNkZWZpbmUgSVhHQkVfUkRITVBOX1JESUNSRFJFUSAgICAgIDB4MDA4MDAwMDAKQEAgLTU3MiwxMyArOTc3LDM5IEBACiAjZGVmaW5lIElYR0JFX1RESE1QTl9URElDUkRSRVEgICAgICAweDAwODAwMDAwCiAjZGVmaW5lIElYR0JFX1RESE1QTl9URElDQUREUl9TSElGVCAxMQogCisjZGVmaW5lIElYR0JFX1JETUFNX01FTV9TRUxfU0hJRlQgICAxMworI2RlZmluZSBJWEdCRV9SRE1BTV9EV09SRF9TSElGVCAgICAgOQorI2RlZmluZSBJWEdCRV9SRE1BTV9ERVNDX0NPTVBfRklGTyAgMQorI2RlZmluZSBJWEdCRV9SRE1BTV9ERkNfQ01EX0ZJRk8gICAgMgorI2RlZmluZSBJWEdCRV9SRE1BTV9UQ05fU1RBVFVTX1JBTSAgNAorI2RlZmluZSBJWEdCRV9SRE1BTV9XQl9DT0xMX0ZJRk8gICAgNQorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfQ05UX1JBTSAgICAgNgorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfUVVFVUVfQ05UICAgOAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfUVVFVUVfUkFNICAgMHhBCisjZGVmaW5lIElYR0JFX1JETUFNX0RFU0NfQ09NX0ZJRk9fUkFOR0UgICAgIDEzNQorI2RlZmluZSBJWEdCRV9SRE1BTV9ERVNDX0NPTV9GSUZPX0NPVU5UICAgICA0CisjZGVmaW5lIElYR0JFX1JETUFNX0RGQ19DTURfRklGT19SQU5HRSAgICAgIDQ4CisjZGVmaW5lIElYR0JFX1JETUFNX0RGQ19DTURfRklGT19DT1VOVCAgICAgIDcKKyNkZWZpbmUgSVhHQkVfUkRNQU1fVENOX1NUQVRVU19SQU1fUkFOR0UgICAgMjU2CisjZGVmaW5lIElYR0JFX1JETUFNX1RDTl9TVEFUVVNfUkFNX0NPVU5UICAgIDkKKyNkZWZpbmUgSVhHQkVfUkRNQU1fV0JfQ09MTF9GSUZPX1JBTkdFICAgICAgOAorI2RlZmluZSBJWEdCRV9SRE1BTV9XQl9DT0xMX0ZJRk9fQ09VTlQgICAgICA0CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19DTlRfUkFNX1JBTkdFICAgICAgIDY0CisjZGVmaW5lIElYR0JFX1JETUFNX1FTQ19DTlRfUkFNX0NPVU5UICAgICAgIDQKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX0NOVF9SQU5HRSAgICAgMzIKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX0NOVF9DT1VOVCAgICAgNAorI2RlZmluZSBJWEdCRV9SRE1BTV9RU0NfUVVFVUVfUkFNX1JBTkdFICAgICAxMjgKKyNkZWZpbmUgSVhHQkVfUkRNQU1fUVNDX1FVRVVFX1JBTV9DT1VOVCAgICAgOAorCisjZGVmaW5lIElYR0JFX1RYREVTQ0lDX1JFQURZICAgICAgICAweDgwMDAwMDAwCisKIC8qIFJlY2VpdmUgQ2hlY2tzdW0gQ29udHJvbCAqLwogI2RlZmluZSBJWEdCRV9SWENTVU1fSVBQQ1NFICAgICAweDAwMDAxMDAwICAgLyogSVAgcGF5bG9hZCBjaGVja3N1bSBlbmFibGUgKi8KICNkZWZpbmUgSVhHQkVfUlhDU1VNX1BDU0QgICAgICAgMHgwMDAwMjAwMCAgIC8qIHBhY2tldCBjaGVja3N1bSBkaXNhYmxlZCAqLwogCiAvKiBGQ1JUTCBCaXQgTWFza3MgKi8KLSNkZWZpbmUgSVhHQkVfRkNSVExfWE9ORSAgICAgICAgMHg4MDAwMDAwMCAgLyogYml0IDMxLCBYT04gZW5hYmxlICovCi0jZGVmaW5lIElYR0JFX0ZDUlRIX0ZDRU4gICAgICAgIDB4ODAwMDAwMDAgIC8qIFJ4IEZsb3cgY29udHJvbCBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfRkNSVExfWE9ORSAgICAgICAgMHg4MDAwMDAwMCAgLyogWE9OIGVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9GQ1JUSF9GQ0VOICAgICAgICAweDgwMDAwMDAwICAvKiBQYWNrZXQgYnVmZmVyIGZjIGVuYWJsZSAqLwogCiAvKiBQQVAgYml0IG1hc2tzKi8KICNkZWZpbmUgSVhHQkVfUEFQX1RYUEFVU0VDTlRfTUFTSyAgIDB4MDAwMEZGRkYgLyogUGF1c2UgY291bnRlciBtYXNrICovCkBAIC01ODgsMTkgKzEwMTksMjkgQEAKIC8qIFJlY2VpdmUgQXJiaXRyYXRpb24gQ29udHJvbDogMCBSb3VuZCBSb2JpbiwgMSBERlAgKi8KICNkZWZpbmUgSVhHQkVfUk1DU19SQUMgICAgICAgICAgMHgwMDAwMDAwNAogI2RlZmluZSBJWEdCRV9STUNTX0RGUCAgICAgICAgICBJWEdCRV9STUNTX1JBQyAvKiBEZWZpY2l0IEZpeGVkIFByaW9yaXR5IGVuYSAqLwotI2RlZmluZSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYICAweDAwMDAwMDA4IC8qIFR4IFByaW9yaXR5IGZsb3cgY29udHJvbCBlbmEgKi8KLSNkZWZpbmUgSVhHQkVfUk1DU19URkNFX1BSSU9SSVRZIDB4MDAwMDAwMTAgLyogVHggUHJpb3JpdHkgZmxvdyBjb250cm9sIGVuYSAqLworI2RlZmluZSBJWEdCRV9STUNTX1RGQ0VfODAyXzNYICAgICAgICAgMHgwMDAwMDAwOCAvKiBUeCBQcmlvcml0eSBGQyBlbmEgKi8KKyNkZWZpbmUgSVhHQkVfUk1DU19URkNFX1BSSU9SSVRZICAgICAgIDB4MDAwMDAwMTAgLyogVHggUHJpb3JpdHkgRkMgZW5hICovCiAjZGVmaW5lIElYR0JFX1JNQ1NfQVJCRElTICAgICAgIDB4MDAwMDAwNDAgLyogQXJiaXRyYXRpb24gZGlzYWJsZSBiaXQgKi8KIAorLyogRkNDRkcgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX0ZDQ0ZHX1RGQ0VfODAyXzNYICAgICAgICAgMHgwMDAwMDAwOCAvKiBUeCBsaW5rIEZDIGVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9GQ0NGR19URkNFX1BSSU9SSVRZICAgICAgIDB4MDAwMDAwMTAgLyogVHggcHJpb3JpdHkgRkMgZW5hYmxlICovCiAKIC8qIEludGVycnVwdCByZWdpc3RlciBiaXRtYXNrcyAqLwogCiAvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgQ2F1c2UgUmVhZCAqLwogI2RlZmluZSBJWEdCRV9FSUNSX1JUWF9RVUVVRSAgICAweDAwMDBGRkZGIC8qIFJUeCBRdWV1ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9GTE9XX0RJUiAgICAgMHgwMDAxMDAwMCAvKiBGRGlyIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSUNSX1JYX01JU1MgICAgICAweDAwMDIwMDAwIC8qIFBhY2tldCBCdWZmZXIgT3ZlcnJ1biAqLworI2RlZmluZSBJWEdCRV9FSUNSX1BDSSAgICAgICAgICAweDAwMDQwMDAwIC8qIFBDSSBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9NQUlMQk9YICAgICAgMHgwMDA4MDAwMCAvKiBWRiB0byBQRiBNYWlsYm94IEludGVycnVwdCAqLwogI2RlZmluZSBJWEdCRV9FSUNSX0xTQyAgICAgICAgICAweDAwMTAwMDAwIC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLworI2RlZmluZSBJWEdCRV9FSUNSX0xJTktTRUMgICAgICAweDAwMjAwMDAwIC8qIFBOIFRocmVzaG9sZCAqLwogI2RlZmluZSBJWEdCRV9FSUNSX01ORyAgICAgICAgICAweDAwNDAwMDAwIC8qIE1hbmFnZWFiaWxpdHkgRXZlbnQgSW50ZXJydXB0ICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfR1BJX1NEUDAgICAgIDB4MDEwMDAwMDAgLyogR2VuIFB1cnBvc2UgSW50ZXJydXB0IG9uIFNEUDAgKi8KICNkZWZpbmUgSVhHQkVfRUlDUl9HUElfU0RQMSAgICAgMHgwMjAwMDAwMCAvKiBHZW4gUHVycG9zZSBJbnRlcnJ1cHQgb24gU0RQMSAqLworI2RlZmluZSBJWEdCRV9FSUNSX0dQSV9TRFAyICAgICAweDA0MDAwMDAwIC8qIEdlbiBQdXJwb3NlIEludGVycnVwdCBvbiBTRFAyICovCisjZGVmaW5lIElYR0JFX0VJQ1JfRUNDICAgICAgICAgIDB4MTAwMDAwMDAgLyogRUNDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfUEJVUiAgICAgICAgIDB4MTAwMDAwMDAgLyogUGFja2V0IEJ1ZmZlciBIYW5kbGVyIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfREhFUiAgICAgICAgIDB4MjAwMDAwMDAgLyogRGVzY3JpcHRvciBIYW5kbGVyIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJQ1JfVENQX1RJTUVSICAgIDB4NDAwMDAwMDAgLyogVENQIFRpbWVyICovCkBAIC02MDgsMTAgKzEwNDksMTYgQEAKIAogLyogRXh0ZW5kZWQgSW50ZXJydXB0IENhdXNlIFNldCAqLwogI2RlZmluZSBJWEdCRV9FSUNTX1JUWF9RVUVVRSAgICBJWEdCRV9FSUNSX1JUWF9RVUVVRSAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJQ1NfRkxPV19ESVIgICAgIElYR0JFX0VJQ1JfRkxPV19ESVIgIC8qIEZEaXIgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJQ1NfUlhfTUlTUyAgICAgIElYR0JFX0VJQ1JfUlhfTUlTUyAgIC8qIFBrdCBCdWZmZXIgT3ZlcnJ1biAqLworI2RlZmluZSBJWEdCRV9FSUNTX1BDSSAgICAgICAgICBJWEdCRV9FSUNSX1BDSSAgICAgICAvKiBQQ0kgRXhjZXB0aW9uICovCisjZGVmaW5lIElYR0JFX0VJQ1NfTUFJTEJPWCAgICAgIElYR0JFX0VJQ1JfTUFJTEJPWCAgIC8qIFZGIHRvIFBGIE1haWxib3ggSW50ICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfTFNDICAgICAgICAgIElYR0JFX0VJQ1JfTFNDICAgICAgIC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLwogI2RlZmluZSBJWEdCRV9FSUNTX01ORyAgICAgICAgICBJWEdCRV9FSUNSX01ORyAgICAgICAvKiBNTkcgRXZlbnQgSW50ZXJydXB0ICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfR1BJX1NEUDAgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDAgIC8qIFNEUDAgR2VuIFB1cnBvc2UgSW50ICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfR1BJX1NEUDEgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDEgIC8qIFNEUDEgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJQ1NfR1BJX1NEUDIgICAgIElYR0JFX0VJQ1JfR1BJX1NEUDIgIC8qIFNEUDIgR2VuIFB1cnBvc2UgSW50ICovCisjZGVmaW5lIElYR0JFX0VJQ1NfRUNDICAgICAgICAgIElYR0JFX0VJQ1JfRUNDICAgICAgIC8qIEVDQyBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNTX1BCVVIgICAgICAgICBJWEdCRV9FSUNSX1BCVVIgICAgICAvKiBQa3QgQnVmIEhhbmRsZXIgRXJyICovCiAjZGVmaW5lIElYR0JFX0VJQ1NfREhFUiAgICAgICAgIElYR0JFX0VJQ1JfREhFUiAgICAgIC8qIERlc2MgSGFuZGxlciBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9FSUNTX1RDUF9USU1FUiAgICBJWEdCRV9FSUNSX1RDUF9USU1FUiAvKiBUQ1AgVGltZXIgKi8KQEAgLTYxOSwxMCArMTA2NiwxNiBAQAogCiAvKiBFeHRlbmRlZCBJbnRlcnJ1cHQgTWFzayBTZXQgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19SVFhfUVVFVUUgICAgSVhHQkVfRUlDUl9SVFhfUVVFVUUgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSU1TX0ZMT1dfRElSICAgICBJWEdCRV9FSUNSX0ZMT1dfRElSICAvKiBGRGlyIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSU1TX1JYX01JU1MgICAgICBJWEdCRV9FSUNSX1JYX01JU1MgICAvKiBQYWNrZXQgQnVmZmVyIE92ZXJydW4gKi8KKyNkZWZpbmUgSVhHQkVfRUlNU19QQ0kgICAgICAgICAgSVhHQkVfRUlDUl9QQ0kgICAgICAgLyogUENJIEV4Y2VwdGlvbiAqLworI2RlZmluZSBJWEdCRV9FSU1TX01BSUxCT1ggICAgICBJWEdCRV9FSUNSX01BSUxCT1ggICAvKiBWRiB0byBQRiBNYWlsYm94IEludCAqLwogI2RlZmluZSBJWEdCRV9FSU1TX0xTQyAgICAgICAgICBJWEdCRV9FSUNSX0xTQyAgICAgICAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19NTkcgICAgICAgICAgSVhHQkVfRUlDUl9NTkcgICAgICAgLyogTU5HIEV2ZW50IEludGVycnVwdCAqLwogI2RlZmluZSBJWEdCRV9FSU1TX0dQSV9TRFAwICAgICBJWEdCRV9FSUNSX0dQSV9TRFAwICAvKiBTRFAwIEdlbiBQdXJwb3NlIEludCAqLwogI2RlZmluZSBJWEdCRV9FSU1TX0dQSV9TRFAxICAgICBJWEdCRV9FSUNSX0dQSV9TRFAxICAvKiBTRFAxIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSU1TX0dQSV9TRFAyICAgICBJWEdCRV9FSUNSX0dQSV9TRFAyICAvKiBTRFAyIEdlbiBQdXJwb3NlIEludCAqLworI2RlZmluZSBJWEdCRV9FSU1TX0VDQyAgICAgICAgICBJWEdCRV9FSUNSX0VDQyAgICAgICAvKiBFQ0MgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfRUlNU19QQlVSICAgICAgICAgSVhHQkVfRUlDUl9QQlVSICAgICAgLyogUGt0IEJ1ZiBIYW5kbGVyIEVyciAqLwogI2RlZmluZSBJWEdCRV9FSU1TX0RIRVIgICAgICAgICBJWEdCRV9FSUNSX0RIRVIgICAgICAvKiBEZXNjciBIYW5kbGVyIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJTVNfVENQX1RJTUVSICAgIElYR0JFX0VJQ1JfVENQX1RJTUVSIC8qIFRDUCBUaW1lciAqLwpAQCAtNjMwLDEwICsxMDgzLDE2IEBACiAKIC8qIEV4dGVuZGVkIEludGVycnVwdCBNYXNrIENsZWFyICovCiAjZGVmaW5lIElYR0JFX0VJTUNfUlRYX1FVRVVFICAgIElYR0JFX0VJQ1JfUlRYX1FVRVVFIC8qIFJUeCBRdWV1ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19GTE9XX0RJUiAgICAgSVhHQkVfRUlDUl9GTE9XX0RJUiAgLyogRkRpciBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19SWF9NSVNTICAgICAgSVhHQkVfRUlDUl9SWF9NSVNTICAgLyogUGFja2V0IEJ1ZmZlciBPdmVycnVuICovCisjZGVmaW5lIElYR0JFX0VJTUNfUENJICAgICAgICAgIElYR0JFX0VJQ1JfUENJICAgICAgIC8qIFBDSSBFeGNlcHRpb24gKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19NQUlMQk9YICAgICAgSVhHQkVfRUlDUl9NQUlMQk9YICAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19MU0MgICAgICAgICAgSVhHQkVfRUlDUl9MU0MgICAgICAgLyogTGluayBTdGF0dXMgQ2hhbmdlICovCiAjZGVmaW5lIElYR0JFX0VJTUNfTU5HICAgICAgICAgIElYR0JFX0VJQ1JfTU5HICAgICAgIC8qIE1ORyBFdmVudCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19HUElfU0RQMCAgICAgSVhHQkVfRUlDUl9HUElfU0RQMCAgLyogU0RQMCBHZW4gUHVycG9zZSBJbnQgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19HUElfU0RQMSAgICAgSVhHQkVfRUlDUl9HUElfU0RQMSAgLyogU0RQMSBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19HUElfU0RQMiAgICAgSVhHQkVfRUlDUl9HUElfU0RQMiAgLyogU0RQMiBHZW4gUHVycG9zZSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19FQ0MgICAgICAgICAgSVhHQkVfRUlDUl9FQ0MgICAgICAgLyogRUNDIEVycm9yICovCiAjZGVmaW5lIElYR0JFX0VJTUNfUEJVUiAgICAgICAgIElYR0JFX0VJQ1JfUEJVUiAgICAgIC8qIFBrdCBCdWYgSGFuZGxlciBFcnIgKi8KICNkZWZpbmUgSVhHQkVfRUlNQ19ESEVSICAgICAgICAgSVhHQkVfRUlDUl9ESEVSICAgICAgLyogRGVzYyBIYW5kbGVyIEVyciAqLwogI2RlZmluZSBJWEdCRV9FSU1DX1RDUF9USU1FUiAgICBJWEdCRV9FSUNSX1RDUF9USU1FUiAvKiBUQ1AgVGltZXIgKi8KQEAgLTY1Niw2ICsxMTE1LDMzIEBACiAjZGVmaW5lIElYR0JFX0lNSVJFWFRfQ1RSTF9TWU4gICAgMHgwMDAyMDAwMCAgLyogQ2hlY2sgU1lOIGJpdCBpbiBoZWFkZXIgKi8KICNkZWZpbmUgSVhHQkVfSU1JUkVYVF9DVFJMX0ZJTiAgICAweDAwMDQwMDAwICAvKiBDaGVjayBGSU4gYml0IGluIGhlYWRlciAqLwogI2RlZmluZSBJWEdCRV9JTUlSRVhUX0NUUkxfQlAgICAgIDB4MDAwODAwMDAgIC8qIEJ5cGFzcyBjaGVjayBvZiBjb250cm9sIGJpdHMgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9TSVpFX0JQXzgyNTk5ICAweDAwMDAxMDAwIC8qIFBhY2tldCBzaXplIGJ5cGFzcyAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfVVJHXzgyNTk5IDB4MDAwMDIwMDAgLyogQ2hlY2sgVVJHIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX0FDS184MjU5OSAweDAwMDA0MDAwIC8qIENoZWNrIEFDSyBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9QU0hfODI1OTkgMHgwMDAwODAwMCAvKiBDaGVjayBQU0ggYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfUlNUXzgyNTk5IDB4MDAwMTAwMDAgLyogQ2hlY2sgUlNUIGJpdCBpbiBoZWFkZXIgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9DVFJMX1NZTl84MjU5OSAweDAwMDIwMDAwIC8qIENoZWNrIFNZTiBiaXQgaW4gaGVhZGVyICovCisjZGVmaW5lIElYR0JFX0lNSVJfQ1RSTF9GSU5fODI1OTkgMHgwMDA0MDAwMCAvKiBDaGVjayBGSU4gYml0IGluIGhlYWRlciAqLworI2RlZmluZSBJWEdCRV9JTUlSX0NUUkxfQlBfODI1OTkgIDB4MDAwODAwMDAgLyogQnlwYXNzIGNoZWNrIG9mIGNvbnRyb2wgYml0cyAqLworI2RlZmluZSBJWEdCRV9JTUlSX0xMSV9FTl84MjU5OSAgIDB4MDAxMDAwMDAgLyogRW5hYmxlcyBsb3cgbGF0ZW5jeSBJbnQgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9SWF9RVUVVRV9NQVNLXzgyNTk5ICAweDAwMDAwMDdGIC8qIFJ4IFF1ZXVlIE1hc2sgKi8KKyNkZWZpbmUgSVhHQkVfSU1JUl9SWF9RVUVVRV9TSElGVF84MjU5OSAyMSAvKiBSeCBRdWV1ZSBTaGlmdCAqLworI2RlZmluZSBJWEdCRV9JTUlSVlBfUFJJT1JJVFlfTUFTSyAgICAgIDB4MDAwMDAwMDcgLyogVkxBTiBwcmlvcml0eSBtYXNrICovCisjZGVmaW5lIElYR0JFX0lNSVJWUF9QUklPUklUWV9FTiAgICAgICAgMHgwMDAwMDAwOCAvKiBWTEFOIHByaW9yaXR5IGVuYWJsZSAqLworCisjZGVmaW5lIElYR0JFX01BWF9GVFFGX0ZJTFRFUlMgICAgICAgICAgMTI4CisjZGVmaW5lIElYR0JFX0ZUUUZfUFJPVE9DT0xfTUFTSyAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBJWEdCRV9GVFFGX1BST1RPQ09MX1RDUCAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUk9UT0NPTF9VRFAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX0ZUUUZfUFJPVE9DT0xfU0NUUCAgICAgICAgMgorI2RlZmluZSBJWEdCRV9GVFFGX1BSSU9SSVRZX01BU0sgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgSVhHQkVfRlRRRl9QUklPUklUWV9TSElGVCAgICAgICAyCisjZGVmaW5lIElYR0JFX0ZUUUZfUE9PTF9NQVNLICAgICAgICAgICAgMHgwMDAwMDAzRgorI2RlZmluZSBJWEdCRV9GVFFGX1BPT0xfU0hJRlQgICAgICAgICAgIDgKKyNkZWZpbmUgSVhHQkVfRlRRRl81VFVQTEVfTUFTS19NQVNLICAgICAweDAwMDAwMDFGCisjZGVmaW5lIElYR0JFX0ZUUUZfNVRVUExFX01BU0tfU0hJRlQgICAgMjUKKyNkZWZpbmUgSVhHQkVfRlRRRl9QT09MX01BU0tfRU4gICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIElYR0JFX0ZUUUZfUVVFVUVfRU5BQkxFICAgICAgICAgMHg4MDAwMDAwMAogCiAvKiBJbnRlcnJ1cHQgY2xlYXIgbWFzayAqLwogI2RlZmluZSBJWEdCRV9JUlFfQ0xFQVJfTUFTSyAgICAweEZGRkZGRkZGCkBAIC02NzUsNiArMTE2MSwzMSBAQAogCiAjZGVmaW5lIElYR0JFX0lWQVJfQUxMT0NfVkFMICAgIDB4ODAgLyogSW50ZXJydXB0IEFsbG9jYXRpb24gdmFsaWQgKi8KIAorLyogRVRZUEUgUXVldWUgRmlsdGVyL1NlbGVjdCBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfTUFYX0VUUUZfRklMVEVSUyAgOAorI2RlZmluZSBJWEdCRV9FVFFGX0JDTiAgICAgICAgICAweDEwMDAwMDAwIC8qIGJpdCAyOCAqLworI2RlZmluZSBJWEdCRV9FVFFGXzE1ODggICAgICAgICAweDQwMDAwMDAwIC8qIGJpdCAzMCAqLworI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl9FTiAgICAweDgwMDAwMDAwIC8qIGJpdCAzMSAqLworI2RlZmluZSBJWEdCRV9FVFFGX1BPT0xfRU5BQkxFICAgKDEgPDwgMjYpIC8qIGJpdCAyNiAqLworCisjZGVmaW5lIElYR0JFX0VUUVNfUlhfUVVFVUUgICAgIDB4MDA3RjAwMDAgLyogYml0cyAyMjoxNiAqLworI2RlZmluZSBJWEdCRV9FVFFTX1JYX1FVRVVFX1NISUZUICAgICAgIDE2CisjZGVmaW5lIElYR0JFX0VUUVNfTExJICAgICAgICAgIDB4MjAwMDAwMDAgLyogYml0IDI5ICovCisjZGVmaW5lIElYR0JFX0VUUVNfUVVFVUVfRU4gICAgIDB4ODAwMDAwMDAgLyogYml0IDMxICovCisKKy8qCisgKiBFVFFGIGZpbHRlciBsaXN0OiBvbmUgc3RhdGljIGZpbHRlciBwZXIgZmlsdGVyIGNvbnN1bWVyLiBUaGlzIGlzCisgKiAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBmaWx0ZXIgY29sbGlzaW9ucyBsYXRlci4gQWRkIG5ldyBmaWx0ZXJzCisgKiAgICAgICAgICAgICAgICAgICBoZXJlISEKKyAqCisgKiBDdXJyZW50IGZpbHRlcnM6CisgKiAgICBFQVBPTCA4MDIuMXggKDB4ODg4ZSk6IEZpbHRlciAwCisgKiAgICBCQ04gKDB4ODkwNCk6ICAgICAgICAgIEZpbHRlciAxCisgKiAgICAxNTg4ICgweDg4ZjcpOiAgICAgICAgIEZpbHRlciAzCisgKi8KKyNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfRUFQT0wgICAgICAgICAgMAorI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl9CQ04gICAgICAgICAgICAxCisjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSXzE1ODggICAgICAgICAgIDMKIC8qIFZMQU4gQ29udHJvbCBCaXQgTWFza3MgKi8KICNkZWZpbmUgSVhHQkVfVkxOQ1RSTF9WRVQgICAgICAgMHgwMDAwRkZGRiAgLyogYml0cyAwLTE1ICovCiAjZGVmaW5lIElYR0JFX1ZMTkNUUkxfQ0ZJICAgICAgIDB4MTAwMDAwMDAgIC8qIGJpdCAyOCAqLwpAQCAtNjgyLDIxICsxMTkzLDI4IEBACiAjZGVmaW5lIElYR0JFX1ZMTkNUUkxfVkZFICAgICAgIDB4NDAwMDAwMDAgIC8qIGJpdCAzMCAqLwogI2RlZmluZSBJWEdCRV9WTE5DVFJMX1ZNRSAgICAgICAweDgwMDAwMDAwICAvKiBiaXQgMzEgKi8KIAorLyogVkxBTiBwb29sIGZpbHRlcmluZyBtYXNrcyAqLworI2RlZmluZSBJWEdCRV9WTFZGX1ZJRU4gICAgICAgICAweDgwMDAwMDAwICAvKiBmaWx0ZXIgaXMgdmFsaWQgKi8KKyNkZWZpbmUgSVhHQkVfVkxWRl9FTlRSSUVTICAgICAgNjQKIAogI2RlZmluZSBJWEdCRV9FVEhFUk5FVF9JRUVFX1ZMQU5fVFlQRSAweDgxMDAgIC8qIDgwMi4xcSBwcm90b2NvbCAqLwogCiAvKiBTVEFUVVMgQml0IE1hc2tzICovCi0jZGVmaW5lIElYR0JFX1NUQVRVU19MQU5fSUQgICAgIDB4MDAwMDAwMEMgLyogTEFOIElEICovCi0jZGVmaW5lIElYR0JFX1NUQVRVU19HSU8gICAgICAgIDB4MDAwODAwMDAgLyogR0lPIE1hc3RlciBFbmFibGUgU3RhdHVzICovCisjZGVmaW5lIElYR0JFX1NUQVRVU19MQU5fSUQgICAgICAgICAweDAwMDAwMDBDIC8qIExBTiBJRCAqLworI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEX1NISUZUICAgMiAgICAgICAgICAvKiBMQU4gSUQgU2hpZnQqLworI2RlZmluZSBJWEdCRV9TVEFUVVNfR0lPICAgICAgICAgICAgMHgwMDA4MDAwMCAvKiBHSU8gTWFzdGVyIEVuYWJsZSBTdGF0dXMgKi8KIAogI2RlZmluZSBJWEdCRV9TVEFUVVNfTEFOX0lEXzAgICAweDAwMDAwMDAwIC8qIExBTiBJRCAwICovCiAjZGVmaW5lIElYR0JFX1NUQVRVU19MQU5fSURfMSAgIDB4MDAwMDAwMDQgLyogTEFOIElEIDEgKi8KIAogLyogRVNEUCBCaXQgTWFza3MgKi8KLSNkZWZpbmUgSVhHQkVfRVNEUF9TRFA0IDB4MDAwMDAwMDEgLyogU0RQNCBEYXRhIFZhbHVlICovCi0jZGVmaW5lIElYR0JFX0VTRFBfU0RQNSAweDAwMDAwMDAyIC8qIFNEUDUgRGF0YSBWYWx1ZSAqLworI2RlZmluZSBJWEdCRV9FU0RQX1NEUDAgMHgwMDAwMDAwMQorI2RlZmluZSBJWEdCRV9FU0RQX1NEUDEgMHgwMDAwMDAwMgorI2RlZmluZSBJWEdCRV9FU0RQX1NEUDQgMHgwMDAwMDAxMCAvKiBTRFA0IERhdGEgVmFsdWUgKi8KKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFA1IDB4MDAwMDAwMjAgLyogU0RQNSBEYXRhIFZhbHVlICovCisjZGVmaW5lIElYR0JFX0VTRFBfU0RQNiAweDAwMDAwMDQwIC8qIFNEUDYgRGF0YSBWYWx1ZSAqLwogI2RlZmluZSBJWEdCRV9FU0RQX1NEUDRfRElSICAgICAweDAwMDAwMDA0IC8qIFNEUDQgSU8gZGlyZWN0aW9uICovCi0jZGVmaW5lIElYR0JFX0VTRFBfU0RQNV9ESVIgICAgIDB4MDAwMDAwMDggLyogU0RQNSBJTyBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgSVhHQkVfRVNEUF9TRFA1X0RJUiAgICAgMHgwMDAwMjAwMCAvKiBTRFA1IElPIGRpcmVjdGlvbiAqLwogCiAvKiBMRURDVEwgQml0IE1hc2tzICovCiAjZGVmaW5lIElYR0JFX0xFRF9JVlJUX0JBU0UgICAgICAweDAwMDAwMDQwCkBAIC03MTksNiArMTIzNyw3IEBACiAjZGVmaW5lIElYR0JFX0xFRF9PRkYgICAgICAgICAgIDB4RgogCiAvKiBBVVRPQyBCaXQgTWFza3MgKi8KKyNkZWZpbmUgSVhHQkVfQVVUT0NfS1g0X0tYX1NVUFBfTUFTSyAweEMwMDAwMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0tYNF9TVVBQICAgIDB4ODAwMDAwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfS1hfU1VQUCAgICAgMHg0MDAwMDAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19QQVVTRSAgICAgICAweDMwMDAwMDAwCkBAIC03MjcsOSArMTI0NiwxNyBAQAogI2RlZmluZSBJWEdCRV9BVVRPQ19BTl9SWF9MT09TRSAweDAxMDAwMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0FOX1JYX0RSSUZUIDB4MDA4MDAwMDAKICNkZWZpbmUgSVhHQkVfQVVUT0NfQU5fUlhfQUxJR04gMHgwMDdDMDAwMAorI2RlZmluZSBJWEdCRV9BVVRPQ19GRUNBICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIElYR0JFX0FVVE9DX0ZFQ1IgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSVhHQkVfQVVUT0NfS1JfU1VQUCAgICAgMHgwMDAxMDAwMAogI2RlZmluZSBJWEdCRV9BVVRPQ19BTl9SRVNUQVJUICAweDAwMDAxMDAwCiAjZGVmaW5lIElYR0JFX0FVVE9DX0ZMVSAgICAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX1NISUZUICAgMTMKKyNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TXzEwR19TRVJJQUwgICAgICAoMHgzIDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUiAgICAgICAoMHg0IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX1NHTUlJXzFHXzEwME0gICAoMHg1IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl8xR19BTiAoMHg2IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX0tYNF9LWF9LUl9TR01JSSAoMHg3IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TX01BU0sgICAgICAgICAgICAoMHg3IDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TXzFHX0xJTktfTk9fQU4gICAoMHgwIDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfTE1TXzEwR19MSU5LX05PX0FOICAoMHgxIDw8IElYR0JFX0FVVE9DX0xNU19TSElGVCkKQEAgLTczOCwxNSArMTI2NSwyNCBAQAogI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfS1g0X0FOXzFHX0FOICAgICgweDYgPDwgSVhHQkVfQVVUT0NfTE1TX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ19MTVNfQVRUQUNIX1RZUEUgICAgICgweDcgPDwgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQpCiAKLSNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRCAgICAgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTUQgICAgICAgIDB4MDAwMDAxODAKLSNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQgNwotI2RlZmluZSBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUIDkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9NQVNLICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCAgIDkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfTUFTSyAgIDB4MDAwMDAxODAKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQgIDcKICNkZWZpbmUgSVhHQkVfQVVUT0NfMTBHX1hBVUkgICAoMHgwIDw8IElYR0JFX0FVVE9DXzEwR19QTUFfUE1EX1NISUZUKQogI2RlZmluZSBJWEdCRV9BVVRPQ18xMEdfS1g0ICAgICgweDEgPDwgSVhHQkVfQVVUT0NfMTBHX1BNQV9QTURfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DXzEwR19DWDQgICAgKDB4MiA8PCBJWEdCRV9BVVRPQ18xMEdfUE1BX1BNRF9TSElGVCkKICNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfQlggICAgICAoMHgwIDw8IElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQpCiAjZGVmaW5lIElYR0JFX0FVVE9DXzFHX0tYICAgICAgKDB4MSA8PCBJWEdCRV9BVVRPQ18xR19QTUFfUE1EX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQ18xR19TRkkgICAgICgweDAgPDwgSVhHQkVfQVVUT0NfMUdfUE1BX1BNRF9TSElGVCkKKyNkZWZpbmUgSVhHQkVfQVVUT0NfMUdfS1hfQlggICAoMHgxIDw8IElYR0JFX0FVVE9DXzFHX1BNQV9QTURfU0hJRlQpCisKKyNkZWZpbmUgSVhHQkVfQVVUT0MyX1VQUEVSX01BU0sgIDB4RkZGRjAwMDAKKyNkZWZpbmUgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9NQVNLICAweDAwMDMwMDAwCisjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfU0hJRlQgMTYKKyNkZWZpbmUgSVhHQkVfQVVUT0MyXzEwR19LUiAgKDB4MCA8PCBJWEdCRV9BVVRPQzJfMTBHX1NFUklBTF9QTUFfUE1EX1NISUZUKQorI2RlZmluZSBJWEdCRV9BVVRPQzJfMTBHX1hGSSAoMHgxIDw8IElYR0JFX0FVVE9DMl8xMEdfU0VSSUFMX1BNQV9QTURfU0hJRlQpCisjZGVmaW5lIElYR0JFX0FVVE9DMl8xMEdfU0ZJICgweDIgPDwgSVhHQkVfQVVUT0MyXzEwR19TRVJJQUxfUE1BX1BNRF9TSElGVCkKIAogLyogTElOS1MgQml0IE1hc2tzICovCiAjZGVmaW5lIElYR0JFX0xJTktTX0tYX0FOX0NPTVAgIDB4ODAwMDAwMDAKQEAgLTc1Niw2ICsxMjkyLDcgQEAKICNkZWZpbmUgSVhHQkVfTElOS1NfUlhfTU9ERSAgICAgMHgwNjAwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LU19UWF9NT0RFICAgICAweDAxODAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktTX1hHWFNfRU4gICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgSVhHQkVfTElOS1NfU0dNSUlfRU4gICAgMHgwMjAwMDAwMAogI2RlZmluZSBJWEdCRV9MSU5LU19QQ1NfMUdfRU4gICAweDAwMjAwMDAwCiAjZGVmaW5lIElYR0JFX0xJTktTXzFHX0FOX0VOICAgIDB4MDAxMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS1NfS1hfQU5fSURMRSAgMHgwMDA4MDAwMApAQCAtNzY1LDkgKzEzMDIsMzUgQEAKICNkZWZpbmUgSVhHQkVfTElOS1NfVExfRkFVTFQgICAgMHgwMDAwMTAwMAogI2RlZmluZSBJWEdCRV9MSU5LU19TSUdOQUwgICAgICAweDAwMDAwRjAwCiAKKyNkZWZpbmUgSVhHQkVfTElOS1NfU1BFRURfODI1OTkgICAgIDB4MzAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfTElOS1NfU1BFRURfMTBHXzgyNTk5IDB4MzAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfTElOS1NfU1BFRURfMUdfODI1OTkgIDB4MjAwMDAwMDAKKyNkZWZpbmUgSVhHQkVfTElOS1NfU1BFRURfMTAwXzgyNTk5IDB4MTAwMDAwMDAKICNkZWZpbmUgSVhHQkVfTElOS19VUF9USU1FICAgICAgOTAgLyogOS4wIFNlY29uZHMgKi8KICNkZWZpbmUgSVhHQkVfQVVUT19ORUdfVElNRSAgICAgNDUgLyogNC41IFNlY29uZHMgKi8KIAorI2RlZmluZSBGSUJFUl9MSU5LX1VQX0xJTUlUICAgICA1MAorCisvKiBQQ1MxR0xTVEEgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9MSU5LX09LICAgICAgICAgMQorI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfU1lOS19PSyAgICAgICAgIDB4MTAKKyNkZWZpbmUgSVhHQkVfUENTMUdMU1RBX0FOX0NPTVBMRVRFICAgICAweDEwMDAwCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9BTl9QQUdFX1JYICAgICAgMHgyMDAwMAorI2RlZmluZSBJWEdCRV9QQ1MxR0xTVEFfQU5fVElNRURfT1VUICAgIDB4NDAwMDAKKyNkZWZpbmUgSVhHQkVfUENTMUdMU1RBX0FOX1JFTU9URV9GQVVMVCAweDgwMDAwCisjZGVmaW5lIElYR0JFX1BDUzFHTFNUQV9BTl9FUlJPUl9SV1MgICAgMHgxMDAwMDAKKworI2RlZmluZSBJWEdCRV9QQ1MxR0FOQV9TWU1fUEFVU0UgICAgICAgIDB4ODAKKyNkZWZpbmUgSVhHQkVfUENTMUdBTkFfQVNNX1BBVVNFICAgICAgICAweDEwMAorCisvKiBQQ1MxR0xDVEwgQml0IE1hc2tzICovCisjZGVmaW5lIElYR0JFX1BDUzFHTENUTF9BTl8xR19USU1FT1VUX0VOICAweDAwMDQwMDAwIC8qIFBDUyAxRyBhdXRvbmVnIHRvIGVuICovCisjZGVmaW5lIElYR0JFX1BDUzFHTENUTF9GTFZfTElOS19VUCAgICAgMQorI2RlZmluZSBJWEdCRV9QQ1MxR0xDVExfRk9SQ0VfTElOSyAgICAgIDB4MjAKKyNkZWZpbmUgSVhHQkVfUENTMUdMQ1RMX0xPV19MSU5LX0xBVENIICAweDQwCisjZGVmaW5lIElYR0JFX1BDUzFHTENUTF9BTl9FTkFCTEUgICAgICAgMHgxMDAwMAorI2RlZmluZSBJWEdCRV9QQ1MxR0xDVExfQU5fUkVTVEFSVCAgICAgIDB4MjAwMDAKKwogLyogU1cgU2VtYXBob3JlIFJlZ2lzdGVyIGJpdG1hc2tzICovCiAjZGVmaW5lIElYR0JFX1NXU01fU01CSSAweDAwMDAwMDAxIC8qIERyaXZlciBTZW1hcGhvcmUgYml0ICovCiAjZGVmaW5lIElYR0JFX1NXU01fU1dFU01CSSAweDAwMDAwMDAyIC8qIEZXIFNlbWFwaG9yZSBiaXQgKi8KQEAgLTgxOSw2ICsxMzgyLDExIEBACiAjZGVmaW5lIElYR0JFX0ZXX1BUUiAgICAgICAgICAgIDB4MEYKICNkZWZpbmUgSVhHQkVfUEJBTlVNMF9QVFIgICAgICAgMHgxNQogI2RlZmluZSBJWEdCRV9QQkFOVU0xX1BUUiAgICAgICAweDE2CisjZGVmaW5lIElYR0JFX1BDSUVfTVNJWF84MjU5OV9DQVBTICAweDcyCisjZGVmaW5lIElYR0JFX1BDSUVfTVNJWF84MjU5OF9DQVBTICAweDYyCisKKy8qIE1TSS1YIGNhcGFiaWxpdHkgZmllbGRzIG1hc2tzICovCisjZGVmaW5lIElYR0JFX1BDSUVfTVNJWF9UQkxfU1pfTUFTSyAgICAgMHg3RkYKIAogLyogTGVnYWN5IEVFUFJPTSB3b3JkIG9mZnNldHMgKi8KICNkZWZpbmUgSVhHQkVfSVNDU0lfQk9PVF9DQVBTICAgICAgICAgICAweDAwMzMKQEAgLTg2Nyw2ICsxNDM1LDggQEAKICNkZWZpbmUgSVhHQkVfUENJX0xJTktfU1BFRUQgICAgICAweEYKICNkZWZpbmUgSVhHQkVfUENJX0xJTktfU1BFRURfMjUwMCAweDEKICNkZWZpbmUgSVhHQkVfUENJX0xJTktfU1BFRURfNTAwMCAweDIKKyNkZWZpbmUgSVhHQkVfUENJX0hFQURFUl9UWVBFX1JFR0lTVEVSICAweDBFCisjZGVmaW5lIElYR0JFX1BDSV9IRUFERVJfVFlQRV9NVUxUSUZVTkMgMHg4MAogCiAvKiBOdW1iZXIgb2YgMTAwIG1pY3Jvc2Vjb25kcyB3ZSB3YWl0IGZvciBQQ0kgRXhwcmVzcyBtYXN0ZXIgZGlzYWJsZSAqLwogI2RlZmluZSBJWEdCRV9QQ0lfTUFTVEVSX0RJU0FCTEVfVElNRU9VVCA4MDAKQEAgLTkxOSw2ICsxNDg5LDcgQEAKICNkZWZpbmUgSVhHQkVfUlhDVFJMX1JYRU4gICAgICAgMHgwMDAwMDAwMSAgLyogRW5hYmxlIFJlY2VpdmVyICovCiAjZGVmaW5lIElYR0JFX1JYQ1RSTF9ETUJZUFMgICAgIDB4MDAwMDAwMDIgIC8qIERlc2NyaXB0b3IgTW9uaXRvciBCeXBhc3MgKi8KICNkZWZpbmUgSVhHQkVfUlhEQ1RMX0VOQUJMRSAgICAgMHgwMjAwMDAwMCAgLyogRW5hYmxlIHNwZWNpZmljIFJ4IFF1ZXVlICovCisjZGVmaW5lIElYR0JFX1JYRENUTF9WTUUgICAgICAgIDB4NDAwMDAwMDAgIC8qIFZMQU4gbW9kZSBlbmFibGUgKi8KIAogI2RlZmluZSBJWEdCRV9GQ1RSTF9TQlAgMHgwMDAwMDAwMiAvKiBTdG9yZSBCYWQgUGFja2V0ICovCiAjZGVmaW5lIElYR0JFX0ZDVFJMX01QRSAweDAwMDAwMTAwIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyBFbmEqLwpAQCAtOTI5LDkgKzE1MDAsMjMgQEAKIC8qIFJlY2VpdmUgUHJpb3JpdHkgRmxvdyBDb250cm9sIEVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9GQ1RSTF9SUEZDRSAweDAwMDA0MDAwCiAjZGVmaW5lIElYR0JFX0ZDVFJMX1JGQ0UgMHgwMDAwODAwMCAvKiBSZWNlaXZlIEZsb3cgQ29udHJvbCBFbmEgKi8KKyNkZWZpbmUgSVhHQkVfTUZMQ05fUE1DRiAgICAgICAgMHgwMDAwMDAwMSAvKiBQYXNzIE1BQyBDb250cm9sIEZyYW1lcyAqLworI2RlZmluZSBJWEdCRV9NRkxDTl9EUEYgICAgICAgICAweDAwMDAwMDAyIC8qIERpc2NhcmQgUGF1c2UgRnJhbWUgKi8KKyNkZWZpbmUgSVhHQkVfTUZMQ05fUlBGQ0UgICAgICAgMHgwMDAwMDAwNCAvKiBSZWNlaXZlIFByaW9yaXR5IEZDIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9NRkxDTl9SRkNFICAgICAgICAweDAwMDAwMDA4IC8qIFJlY2VpdmUgRkMgRW5hYmxlICovCiAKIC8qIE11bHRpcGxlIFJlY2VpdmUgUXVldWUgQ29udHJvbCAqLwogI2RlZmluZSBJWEdCRV9NUlFDX1JTU0VOICAgICAgICAgICAgICAgICAweDAwMDAwMDAxICAvKiBSU1MgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX01SUUNfTVJRRV9NQVNLICAgICAgICAgICAgICAgICAgICAweEYgLyogQml0cyAzOjAgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19SVDhUQ0VOICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAvKiA4IFRDIG5vIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1JUNFRDRU4gICAgICAgICAgICAgICAweDAwMDAwMDAzIC8qIDQgVEMgbm8gUlNTICovCisjZGVmaW5lIElYR0JFX01SUUNfUlRSU1M4VENFTiAgICAgICAgICAgIDB4MDAwMDAwMDQgLyogOCBUQyB3LyBSU1MgKi8KKyNkZWZpbmUgSVhHQkVfTVJRQ19SVFJTUzRUQ0VOICAgICAgICAgICAgMHgwMDAwMDAwNSAvKiA0IFRDIHcvIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFFTiAgICAgICAgICAgICAgICAweDAwMDAwMDA4IC8qIFZNRHEyIDY0IHBvb2xzIG5vIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSU1MzMkVOICAgICAgICAgICAweDAwMDAwMDBBIC8qIFZNRHEyIDMyIHBvb2xzIHcvIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSU1M2NEVOICAgICAgICAgICAweDAwMDAwMDBCIC8qIFZNRHEyIDY0IHBvb2xzIHcvIFJTUyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSVDhUQ0VOICAgICAgICAgICAweDAwMDAwMDBDIC8qIFZNRHEyL1JUIDE2IHBvb2wgOCBUQyAqLworI2RlZmluZSBJWEdCRV9NUlFDX1ZNRFFSVDRUQ0VOICAgICAgICAgICAweDAwMDAwMDBEIC8qIFZNRHEyL1JUIDMyIHBvb2wgNCBUQyAqLwogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9NQVNLICAgICAgICAweEZGRkYwMDAwCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjRfVENQICAgIDB4MDAwMTAwMDAKICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNCAgICAgICAgMHgwMDAyMDAwMApAQCAtOTQyLDYgKzE1MjcsMTIgQEAKICNkZWZpbmUgSVhHQkVfTVJRQ19SU1NfRklFTERfSVBWNF9VRFAgICAgMHgwMDQwMDAwMAogI2RlZmluZSBJWEdCRV9NUlFDX1JTU19GSUVMRF9JUFY2X1VEUCAgICAweDAwODAwMDAwCiAjZGVmaW5lIElYR0JFX01SUUNfUlNTX0ZJRUxEX0lQVjZfRVhfVURQIDB4MDEwMDAwMDAKKyNkZWZpbmUgSVhHQkVfTVJRQ19MM0w0VFhTV0VOICAgICAgICAgICAgMHgwMDAwODAwMAorCisvKiBRdWV1ZSBEcm9wIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9RREVfRU5BQkxFICAgICAweDAwMDAwMDAxCisjZGVmaW5lIElYR0JFX1FERV9JRFhfTUFTSyAgIDB4MDAwMDdGMDAKKyNkZWZpbmUgSVhHQkVfUURFX0lEWF9TSElGVCAgICAgICAgICAgOAogCiAjZGVmaW5lIElYR0JFX1RYRF9QT1BUU19JWFNNIDB4MDEgICAgICAgLyogSW5zZXJ0IElQIGNoZWNrc3VtICovCiAjZGVmaW5lIElYR0JFX1RYRF9QT1BUU19UWFNNIDB4MDIgICAgICAgLyogSW5zZXJ0IFRDUC9VRFAgY2hlY2tzdW0gKi8KQEAgLTk1MywxMCArMTU0NCwyNSBAQAogI2RlZmluZSBJWEdCRV9UWERfQ01EX1ZMRSAgICAweDQwMDAwMDAwIC8qIEFkZCBWTEFOIHRhZyAqLwogI2RlZmluZSBJWEdCRV9UWERfU1RBVF9ERCAgICAweDAwMDAwMDAxIC8qIERlc2NyaXB0b3IgRG9uZSAqLwogCisjZGVmaW5lIElYR0JFX1JYREFEVl9JUFNFQ19TVEFUVVNfU0VDUCAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0lQU0VDX0VSUk9SX0lOVkFMSURfUFJPVE9DT0wgICAgICAgMHgwODAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfSVBTRUNfRVJST1JfSU5WQUxJRF9MRU5HVEggICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIElYR0JFX1JYREFEVl9JUFNFQ19FUlJPUl9BVVRIX0ZBSUxFRCAgICAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0lQU0VDX0VSUk9SX0JJVF9NQVNLICAgICAgICAgICAgICAgMHgxODAwMDAwMAorLyogTXVsdGlwbGUgVHJhbnNtaXQgUXVldWUgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBJWEdCRV9NVFFDX1JUX0VOQSAgICAgICAweDEgLyogRENCIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9NVFFDX1ZUX0VOQSAgICAgICAweDIgLyogVk1EUTIgRW5hYmxlICovCisjZGVmaW5lIElYR0JFX01UUUNfNjRRXzFQQiAgICAgIDB4MCAvKiA2NCBxdWV1ZXMgMSBwYWNrIGJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9NVFFDXzY0VkYgICAgICAgICAweDggLyogMiBUWCBRdWV1ZXMgcGVyIHBvb2wgdy82NFZGJ3MgKi8KKyNkZWZpbmUgSVhHQkVfTVRRQ184VENfOFRRICAgICAgMHhDIC8qIDggVEMgaWYgUlRfRU5BIG9yIDggVFEgaWYgVlRfRU5BICovCisKIC8qIFJlY2VpdmUgRGVzY3JpcHRvciBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfREQgICAgICAgMHgwMSAgICAvKiBEZXNjcmlwdG9yIERvbmUgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfRU9QICAgICAgMHgwMiAgICAvKiBFbmQgb2YgUGFja2V0ICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0ZMTSAgICAgIDB4MDQgICAgLyogRkRpciBNYXRjaCAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9WUCAgICAgICAweDA4ICAgIC8qIElFRUUgVkxBTiBQYWNrZXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX05FWFRQX01BU0sgICAweDAwMEZGRkYwIC8qIE5leHQgRGVzY3JpcHRvciBJbmRleCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfTkVYVFBfU0hJRlQgIDB4MDAwMDAwMDQKICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVURQQ1MgICAgMHgxMCAgICAvKiBVRFAgeHN1bSBjYWxjdWxhdGVkICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0w0Q1MgICAgIDB4MjAgICAgLyogTDQgeHN1bSBjYWxjdWxhdGVkICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0lQQ1MgICAgIDB4NDAgICAgLyogSVAgeHN1bSBjYWxjdWxhdGVkICovCkBAIC05NjUsNiArMTU3MSwxMCBAQAogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9WRVhUICAgICAweDIwMCAgIC8qIDFzdCBWTEFOIGZvdW5kICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1VEUFYgICAgIDB4NDAwICAgLyogVmFsaWQgVURQIGNoZWNrc3VtICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0RZTklOVCAgIDB4ODAwICAgLyogUGt0IGNhdXNlZCBJTlQgdmlhIERZTklOVCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9MTElOVCAgICAweDgwMCAgIC8qIFBrdCBjYXVzZWQgTG93IExhdGVuY3kgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1RTICAgICAgIDB4MTAwMDAgLyogVGltZSBTdGFtcCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9TRUNQICAgICAweDIwMDAwIC8qIFNlY3VyaXR5IFByb2Nlc3NpbmcgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfTEIgICAgICAgMHg0MDAwMCAvKiBMb29wYmFjayBTdGF0dXMgKi8KICNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfQUNLICAgICAgMHg4MDAwICAvKiBBQ0sgUGFja2V0IGluZGljYXRpb24gKi8KICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9DRSAgICAgICAgMHgwMSAgICAvKiBDUkMgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9MRSAgICAgICAgMHgwMiAgICAvKiBMZW5ndGggRXJyb3IgKi8KQEAgLTk3Myw2ICsxNTgzLDggQEAKICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9VU0UgICAgICAgMHgyMCAgICAvKiBVbmRlcnNpemUgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9UQ1BFICAgICAgMHg0MCAgICAvKiBUQ1AvVURQIENoZWNrc3VtIEVycm9yICovCiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfSVBFICAgICAgIDB4ODAgICAgLyogSVAgQ2hlY2tzdW0gRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9NQVNLICAgICAgICAgICAweGZmZjAwMDAwIC8qIFJERVNDLkVSUk9SUyBtYXNrICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfU0hJRlQgICAgICAgICAgMjAgICAgICAgICAvKiBSREVTQy5FUlJPUlMgc2hpZnQgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9IQk8gICAgMHgwMDgwMDAwMCAvKkhlYWRlciBCdWZmZXIgT3ZlcmZsb3cgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9DRSAgICAgMHgwMTAwMDAwMCAvKiBDUkMgRXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9MRSAgICAgMHgwMjAwMDAwMCAvKiBMZW5ndGggRXJyb3IgKi8KQEAgLTk4Nyw5ICsxNTk5LDIzIEBACiAjZGVmaW5lIElYR0JFX1JYRF9DRklfTUFTSyAgICAgIDB4MTAwMCAgLyogQ0ZJIGlzIGJpdCAxMiAqLwogI2RlZmluZSBJWEdCRV9SWERfQ0ZJX1NISUZUICAgICAxMgogCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0REICAgICAgICAgICAgSVhHQkVfUlhEX1NUQVRfREQgIC8qIERvbmUgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRU9QICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9FT1AgLyogRW5kIG9mIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9GTE0gICAgICAgICAgIElYR0JFX1JYRF9TVEFUX0ZMTSAvKiBGRGlyIE1hdGNoICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX1ZQICAgICAgICAgICAgSVhHQkVfUlhEX1NUQVRfVlAgIC8qIElFRUUgVkxBTiBQa3QgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfTUFTSyAgICAgICAgICAweDAwMGZmZmZmIC8qIFN0YXQvTkVYVFA6IGJpdCAwLTE5ICovCisKKy8qIFBTUlRZUEUgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfVENQSERSICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9VRFBIRFIgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJWEdCRV9QU1JUWVBFX0lQVjRIRFIgICAweDAwMDAwMTAwCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfSVBWNkhEUiAgIDB4MDAwMDAyMDAKIAogLyogU1JSQ1RMIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVQS1RfU0hJRlQgICAgIDEwICAgICAvKiBzbyBtYW55IEtCcyAqLworI2RlZmluZSBJWEdCRV9TUlJDVExfUkRNVFNfU0hJRlQgICAgICAgIDIyCisjZGVmaW5lIElYR0JFX1NSUkNUTF9SRE1UU19NQVNLICAgICAgICAgMHgwMUMwMDAwMAorI2RlZmluZSBJWEdCRV9TUlJDVExfRFJPUF9FTiAgICAgICAgICAgIDB4MTAwMDAwMDAKICNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX01BU0sgICAgICAweDAwMDAwMDdGCiAjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRUhEUl9NQVNLICAgICAgMHgwMDAwM0YwMAogI2RlZmluZSBJWEdCRV9TUlJDVExfREVTQ1RZUEVfTEVHQUNZICAgIDB4MDAwMDAwMDAKQEAgLTEwMDQsNiArMTYzMCw3IEBACiAKICNkZWZpbmUgSVhHQkVfUlhEQURWX1JTU1RZUEVfTUFTSyAgICAgICAweDAwMDAwMDBGCiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX01BU0sgICAgICAgMHgwMDAwRkZGMAorI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9NQVNLX0VYICAgIDB4MDAwMUZGRjAKICNkZWZpbmUgSVhHQkVfUlhEQURWX0hEUkJVRkxFTl9NQVNLICAgICAweDAwMDA3RkUwCiAjZGVmaW5lIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fU0hJRlQgICAgNQogI2RlZmluZSBJWEdCRV9SWERBRFZfU1BMSVRIRUFERVJfRU4gICAgIDB4MDAwMDEwMDAKQEAgLTEwMzEsNiArMTY1OCwyMCBAQAogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9VRFAgICAgICAgIDB4MDAwMDAyMDAgLyogVURQIGhkciBwcmVzZW50ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX1NDVFAgICAgICAgMHgwMDAwMDQwMCAvKiBTQ1RQIGhkciBwcmVzZW50ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX05GUyAgICAgICAgMHgwMDAwMDgwMCAvKiBORlMgaGRyIHByZXNlbnQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfSVBTRUNfRVNQICAweDAwMDAxMDAwIC8qIElQU2VjIEVTUCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9JUFNFQ19BSCAgIDB4MDAwMDIwMDAgLyogSVBTZWMgQUggKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfTElOS1NFQyAgICAweDAwMDA0MDAwIC8qIExpbmtTZWMgRW5jYXAgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfRVRRRiAgICAgICAweDAwMDA4MDAwIC8qIFBLVFRZUEUgaXMgRVRRRiBpbmRleCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9FVFFGX01BU0sgIDB4MDAwMDAwNzAgLyogRVRRRiBoYXMgOCBpbmRpY2VzICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0VUUUZfU0hJRlQgNCAgICAgICAgICAvKiBSaWdodC1zaGlmdCA0IGJpdHMgKi8KKworLyogU2VjdXJpdHkgUHJvY2Vzc2luZyBiaXQgSW5kaWNhdGlvbiAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfTE5LU0VDX1NUQVRVU19TRUNQICAgICAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfTE5LU0VDX0VSUk9SX05PX1NBX01BVENIICAgMHgwODAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfTE5LU0VDX0VSUk9SX1JFUExBWV9FUlJPUiAgMHgxMDAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfTE5LU0VDX0VSUk9SX0JJVF9NQVNLICAgICAgMHgxODAwMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfTE5LU0VDX0VSUk9SX0JBRF9TSUcgICAgICAgMHgxODAwMDAwMAorCiAvKiBNYXNrcyB0byBkZXRlcm1pbmUgaWYgcGFja2V0cyBzaG91bGQgYmUgZHJvcHBlZCBkdWUgdG8gZnJhbWUgZXJyb3JzICovCiAjZGVmaW5lIElYR0JFX1JYRF9FUlJfRlJBTUVfRVJSX01BU0sgKCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX1JYRF9FUlJfQ0UgfCBcCkBAIC0xMDYwLDYgKzE3MDEsMTQgQEAKICNkZWZpbmUgSVhHQkVfUlhfREVTQ19TUEVDSUFMX1BSSV9TSElGVCAgMHgwMDBEIC8qIFByaW9yaXR5IGluIHVwcGVyIDMgb2YgMTYgKi8KICNkZWZpbmUgSVhHQkVfVFhfREVTQ19TUEVDSUFMX1BSSV9TSElGVCAgSVhHQkVfUlhfREVTQ19TUEVDSUFMX1BSSV9TSElGVAogCisvKiBMaXR0bGUgRW5kaWFuIGRlZmluZXMgKi8KKyNpZm5kZWYgX19sZTMyCisjZGVmaW5lIF9fbGUzMiAgdTMyCisjZW5kaWYKKyNpZm5kZWYgX19sZTY0CisjZGVmaW5lIF9fbGU2NCAgdTY0CisKKyNlbmRpZgogCiAvKiBUcmFuc21pdCBEZXNjcmlwdG9yIC0gTGVnYWN5ICovCiBzdHJ1Y3QgaXhnYmVfbGVnYWN5X3R4X2Rlc2MgewpAQCAtMTE0Nyw2ICsxNzk2LDkgQEAKIAogLyogQWR2IFRyYW5zbWl0IERlc2NyaXB0b3IgQ29uZmlnIE1hc2tzICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9EVEFMRU5fTUFTSyAgICAgIDB4MDAwMEZGRkYgLyogRGF0YSBidWYgbGVuZ3RoKGJ5dGVzKSAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfTUFDX0xJTktTRUMgICAgICAweDAwMDQwMDAwIC8qIEluc2VydCBMaW5rU2VjICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9JUFNFQ19TQV9JTkRFWF9NQVNLICAgMHgwMDAwMDNGRiAvKiBJUFNlYyBTQSBpbmRleCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfSVBTRUNfRVNQX0xFTl9NQVNLICAgIDB4MDAwMDAxRkYgLyogSVBTZWMgRVNQIGxlbmd0aCAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9NQVNLICAweDAwRjAwMDAwIC8qIERUWVAgbWFzayAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9DVFhUICAweDAwMjAwMDAwIC8qIEFkdmFuY2VkIENvbnRleHQgRGVzYyAqLwogI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9EQVRBICAweDAwMzAwMDAwIC8qIEFkdmFuY2VkIERhdGEgRGVzY3JpcHRvciAqLwpAQCAtMTE4MSw2ICsxODMzLDkgQEAKICNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9UQ1AgICAweDAwMDAwODAwICAvKiBMNCBQYWNrZXQgVFlQRSBvZiBUQ1AgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9TQ1RQICAweDAwMDAxMDAwICAvKiBMNCBQYWNrZXQgVFlQRSBvZiBTQ1RQICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9NS1JSRVEgICAgMHgwMDAwMjAwMCAvKlJlcSByZXF1aXJlcyBNYXJrZXJzIGFuZCBDUkMqLworI2RlZmluZSBJWEdCRV9BRFZUWERfUE9QVFNfSVBTRUMgICAgICAweDAwMDAwNDAwIC8qIElQU2VjIG9mZmxvYWQgcmVxdWVzdCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfSVBTRUNfVFlQRV9FU1AgMHgwMDAwMjAwMCAvKiBJUFNlYyBUeXBlIEVTUCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfSVBTRUNfRU5DUllQVF9FTiAweDAwMDA0MDAwLyogRVNQIEVuY3J5cHQgRW5hYmxlICovCiAjZGVmaW5lIElYR0JFX0FEVlRYRF9MNExFTl9TSElGVCAgICAgOCAgLyogQWR2IGN0eHQgTDRMRU4gc2hpZnQgKi8KICNkZWZpbmUgSVhHQkVfQURWVFhEX01TU19TSElGVCAgICAgICAxNiAgLyogQWR2IGN0eHQgTVNTIHNoaWZ0ICovCiAKQEAgLTExOTQsNiArMTg0OSwxMiBAQAogI2RlZmluZSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCAweDAwODAKICNkZWZpbmUgSVhHQkVfTElOS19TUEVFRF84MjU5OF9BVVRPTkVHIChJWEdCRV9MSU5LX1NQRUVEXzFHQl9GVUxMIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKQorI2RlZmluZSBJWEdCRV9MSU5LX1NQRUVEXzgyNTk5X0FVVE9ORUcgKElYR0JFX0xJTktfU1BFRURfMTAwX0ZVTEwgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTCkKKworI2RlZmluZSBJWEdCRV9QQ0lFX0RFVl9DVFJMXzIgMHhDOAorI2RlZmluZSBQQ0lFX0NPTVBMX1RPX1ZBTFVFIDB4MDUKIAogLyogUGh5c2ljYWwgbGF5ZXIgdHlwZSAqLwogdHlwZWRlZiB1MzIgaXhnYmVfcGh5c2ljYWxfbGF5ZXI7CkBAIC0xMjEwLDcgKzE4NzEsNiBAQAogI2RlZmluZSBJWEdCRV9QSFlTSUNBTF9MQVlFUl8xMDAwQkFTRV9LWCAgMHgwMjAwCiAjZGVmaW5lIElYR0JFX1BIWVNJQ0FMX0xBWUVSXzEwMDBCQVNFX0JYICAweDA0MDAKIAotCiBlbnVtIGl4Z2JlX2VlcHJvbV90eXBlIHsKIAlpeGdiZV9lZXByb21fdW5pbml0aWFsaXplZCA9IDAsCiAJaXhnYmVfZWVwcm9tX3NwaSwKQEAgLTEyMjAsMTIgKzE4ODAsMTQgQEAKIGVudW0gaXhnYmVfbWFjX3R5cGUgewogCWl4Z2JlX21hY191bmtub3duID0gMCwKIAlpeGdiZV9tYWNfODI1OThFQiwKKwlpeGdiZV9tYWNfODI1OTlFQiwKIAlpeGdiZV9udW1fbWFjcwogfTsKIAogZW51bSBpeGdiZV9waHlfdHlwZSB7CiAJaXhnYmVfcGh5X3Vua25vd24gPSAwLAogCWl4Z2JlX3BoeV90biwKKwlpeGdiZV9waHlfY3VfdW5rbm93biwKIAlpeGdiZV9waHlfcXQsCiAJaXhnYmVfcGh5X3hhdWksCiAJaXhnYmVfcGh5X25sLApAQCAtMTIzNCwyMiArMTg5NiwzMSBAQAogCWl4Z2JlX3BoeV9zZnBfYXZhZ28sCiAJaXhnYmVfcGh5X3NmcF9mdGwsCiAJaXhnYmVfcGh5X3NmcF91bmtub3duLAorCWl4Z2JlX3BoeV9zZnBfaW50ZWwsCiAJaXhnYmVfcGh5X2dlbmVyaWMKIH07CiAKIC8qCiAgKiBTRlArIG1vZHVsZSB0eXBlIElEczoKICAqCi0gKiBJRAlNb2R1bGUgVHlwZQorICogSUQgICBNb2R1bGUgVHlwZQogICogPT09PT09PT09PT09PQotICogMAlTRlBfREFfQ1UKLSAqIDEJU0ZQX1NSCi0gKiAyCVNGUF9MUgorICogMCAgICBTRlBfREFfQ1UKKyAqIDEgICAgU0ZQX1NSCisgKiAyICAgIFNGUF9MUgorICogMyAgICBTRlBfREFfQ1VfQ09SRTAgLSA4MjU5OS1zcGVjaWZpYworICogNCAgICBTRlBfREFfQ1VfQ09SRTEgLSA4MjU5OS1zcGVjaWZpYworICogNSAgICBTRlBfU1IvTFJfQ09SRTAgLSA4MjU5OS1zcGVjaWZpYworICogNiAgICBTRlBfU1IvTFJfQ09SRTEgLSA4MjU5OS1zcGVjaWZpYwogICovCiBlbnVtIGl4Z2JlX3NmcF90eXBlIHsKIAlpeGdiZV9zZnBfdHlwZV9kYV9jdSA9IDAsCiAJaXhnYmVfc2ZwX3R5cGVfc3IgPSAxLAogCWl4Z2JlX3NmcF90eXBlX2xyID0gMiwKKwlpeGdiZV9zZnBfdHlwZV9kYV9jdV9jb3JlMCA9IDMsCisJaXhnYmVfc2ZwX3R5cGVfZGFfY3VfY29yZTEgPSA0LAorCWl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTAgPSA1LAorCWl4Z2JlX3NmcF90eXBlX3NybHJfY29yZTEgPSA2LAogCWl4Z2JlX3NmcF90eXBlX25vdF9wcmVzZW50ID0gMHhGRkZFLAogCWl4Z2JlX3NmcF90eXBlX3Vua25vd24gPSAweEZGRkYKIH07CkBAIC0xMjYzLDE0ICsxOTM0LDUxIEBACiB9OwogCiAvKiBGbG93IENvbnRyb2wgU2V0dGluZ3MgKi8KLWVudW0gaXhnYmVfZmNfdHlwZSB7CitlbnVtIGl4Z2JlX2ZjX21vZGUgewogCWl4Z2JlX2ZjX25vbmUgPSAwLAogCWl4Z2JlX2ZjX3J4X3BhdXNlLAogCWl4Z2JlX2ZjX3R4X3BhdXNlLAogCWl4Z2JlX2ZjX2Z1bGwsCisjaWZkZWYgQ09ORklHX0RDQgorCWl4Z2JlX2ZjX3BmYywKKyNlbmRpZgogCWl4Z2JlX2ZjX2RlZmF1bHQKIH07CiAKKy8qIFBDSSBidXMgdHlwZXMgKi8KK2VudW0gaXhnYmVfYnVzX3R5cGUgeworCWl4Z2JlX2J1c190eXBlX3Vua25vd24gPSAwLAorCWl4Z2JlX2J1c190eXBlX3BjaSwKKwlpeGdiZV9idXNfdHlwZV9wY2l4LAorCWl4Z2JlX2J1c190eXBlX3BjaV9leHByZXNzLAorCWl4Z2JlX2J1c190eXBlX3Jlc2VydmVkCit9OworCisvKiBQQ0kgYnVzIHNwZWVkcyAqLworZW51bSBpeGdiZV9idXNfc3BlZWQgeworCWl4Z2JlX2J1c19zcGVlZF91bmtub3duID0gMCwKKwlpeGdiZV9idXNfc3BlZWRfMzMsCisJaXhnYmVfYnVzX3NwZWVkXzY2LAorCWl4Z2JlX2J1c19zcGVlZF8xMDAsCisJaXhnYmVfYnVzX3NwZWVkXzEyMCwKKwlpeGdiZV9idXNfc3BlZWRfMTMzLAorCWl4Z2JlX2J1c19zcGVlZF8yNTAwLAorCWl4Z2JlX2J1c19zcGVlZF81MDAwLAorCWl4Z2JlX2J1c19zcGVlZF9yZXNlcnZlZAorfTsKKworLyogUENJIGJ1cyB3aWR0aHMgKi8KK2VudW0gaXhnYmVfYnVzX3dpZHRoIHsKKwlpeGdiZV9idXNfd2lkdGhfdW5rbm93biA9IDAsCisJaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDEsCisJaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDIsCisJaXhnYmVfYnVzX3dpZHRoX3BjaWVfeDQgPSA0LAorCWl4Z2JlX2J1c193aWR0aF9wY2llX3g4ID0gOCwKKwlpeGdiZV9idXNfd2lkdGhfMzIsCisJaXhnYmVfYnVzX3dpZHRoXzY0LAorCWl4Z2JlX2J1c193aWR0aF9yZXNlcnZlZAorfTsKKwogc3RydWN0IGl4Z2JlX2FkZHJfZmlsdGVyX2luZm8gewogCXUzMiBudW1fbWNfYWRkcnM7CiAJdTMyIHJhcl91c2VkX2NvdW50OwpAQCAtMTI4MCw2ICsxOTg4LDE2IEBACiAJYm9vbCB1c2VyX3NldF9wcm9taXNjOwogfTsKIAorLyogQnVzIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBpeGdiZV9idXNfaW5mbyB7CisJZW51bSBpeGdiZV9idXNfc3BlZWQgc3BlZWQ7CisJZW51bSBpeGdiZV9idXNfd2lkdGggd2lkdGg7CisJZW51bSBpeGdiZV9idXNfdHlwZSB0eXBlOworCisJdTE2IGZ1bmM7CisJdTE2IGxhbl9pZDsKK307CisKIC8qIEZsb3cgY29udHJvbCBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgaXhnYmVfZmNfaW5mbyB7CiAJdTMyIGhpZ2hfd2F0ZXI7IC8qIEZsb3cgQ29udHJvbCBIaWdoLXdhdGVyICovCkBAIC0xMjg3LDggKzIwMDUsOCBAQAogCXUxNiBwYXVzZV90aW1lOyAvKiBGbG93IENvbnRyb2wgUGF1c2UgdGltZXIgKi8KIAlib29sIHNlbmRfeG9uOyAvKiBGbG93IGNvbnRyb2wgc2VuZCBYT04gKi8KIAlib29sIHN0cmljdF9pZWVlOyAvKiBTdHJpY3QgSUVFRSBtb2RlICovCi0JZW51bSBpeGdiZV9mY190eXBlIHR5cGU7IC8qIFR5cGUgb2YgZmxvdyBjb250cm9sICovCi0JZW51bSBpeGdiZV9mY190eXBlIG9yaWdpbmFsX3R5cGU7CisJZW51bSBpeGdiZV9mY19tb2RlIGN1cnJlbnRfbW9kZTsgLyogRkMgbW9kZSBpbiBlZmZlY3QgKi8KKwllbnVtIGl4Z2JlX2ZjX21vZGUgcmVxdWVzdGVkX21vZGU7IC8qIEZDIG1vZGUgcmVxdWVzdGVkIGJ5IGNhbGxlciAqLwogfTsKIAogLyogU3RhdGlzdGljcyBjb3VudGVycyBjb2xsZWN0ZWQgYnkgdGhlIE1BQyAqLwpAQCAtMTM0OCw2ICsyMDY2LDE0IEBACiAJdTY0IHFwdGNbMTZdOwogCXU2NCBxYnJjWzE2XTsKIAl1NjQgcWJ0Y1sxNl07CisJdTY0IHFwcmRjWzE2XTsKKwl1NjQgcHhvbjJvZmZjWzhdOworCXU2NCBmZGlydXN0YXRfYWRkOworCXU2NCBmZGlydXN0YXRfcmVtb3ZlOworCXU2NCBmZGlyZnN0YXRfZmFkZDsKKwl1NjQgZmRpcmZzdGF0X2ZyZW1vdmU7CisJdTY0IGZkaXJtYXRjaDsKKwl1NjQgZmRpcm1pc3M7CiB9OwogCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCkBAIC0xMzcyLDEyICsyMDk4LDE1IEBACiAJczMyICgqc3RhcnRfaHcpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAlzMzIgKCpjbGVhcl9od19jbnRycykoc3RydWN0IGl4Z2JlX2h3ICopOwogCWVudW0gaXhnYmVfbWVkaWFfdHlwZSAoKmdldF9tZWRpYV90eXBlKShzdHJ1Y3QgaXhnYmVfaHcgKik7Ci0JczMyICgqZ2V0X3N1cHBvcnRlZF9waHlzaWNhbF9sYXllcikoc3RydWN0IGl4Z2JlX2h3ICopOworCXUzMiAoKmdldF9zdXBwb3J0ZWRfcGh5c2ljYWxfbGF5ZXIpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAlzMzIgKCpnZXRfbWFjX2FkZHIpKHN0cnVjdCBpeGdiZV9odyAqLCB1OCAqKTsKIAlzMzIgKCpzdG9wX2FkYXB0ZXIpKHN0cnVjdCBpeGdiZV9odyAqKTsKIAlzMzIgKCpnZXRfYnVzX2luZm8pKHN0cnVjdCBpeGdiZV9odyAqKTsKKwl2b2lkICgqc2V0X2xhbl9pZCkoc3RydWN0IGl4Z2JlX2h3ICopOwogCXMzMiAoKnJlYWRfYW5hbG9nX3JlZzgpKHN0cnVjdCBpeGdiZV9odyosIHUzMiwgdTgqKTsKIAlzMzIgKCp3cml0ZV9hbmFsb2dfcmVnOCkoc3RydWN0IGl4Z2JlX2h3KiwgdTMyLCB1OCk7CisJczMyICgqc2V0dXBfc2ZwKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqZW5hYmxlX3J4X2RtYSkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMik7CiAKIAkvKiBMaW5rICovCiAJczMyICgqc2V0dXBfbGluaykoc3RydWN0IGl4Z2JlX2h3ICopOwpAQCAtMTQzMyw3ICsyMTYyLDcgQEAKIHN0cnVjdCBpeGdiZV9lZXByb21faW5mbyB7CiAJc3RydWN0IGl4Z2JlX2VlcHJvbV9vcGVyYXRpb25zICBvcHM7CiAJZW51bSBpeGdiZV9lZXByb21fdHlwZSAgICAgICAgICB0eXBlOwotCXUzMgkJCQlzZW1hcGhvcmVfZGVsYXk7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW1hcGhvcmVfZGVsYXk7CiAJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkX3NpemU7CiAJdTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX2JpdHM7CiB9OwpAQCAtMTQ0OSwxMSArMjE3OCwxMiBAQAogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3Jhcl9lbnRyaWVzOwogCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X3R4X3F1ZXVlczsKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9yeF9xdWV1ZXM7Ci0JdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rX2F0dGFjaF90eXBlOwotCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua19tb2RlX3NlbGVjdDsKLQlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfc2V0dGluZ3NfbG9hZGVkOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X21zaXhfdmVjdG9yczsKKwl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfYXV0b2M7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnX2F1dG9jMjsKKwlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfbGlua19zZXR0aW5nc19zdG9yZWQ7CiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnOwotCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b25lZ19mYWlsZWQ7CisJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvbmVnX3N1Y2NlZWRlZDsKIH07CiAKIHN0cnVjdCBpeGdiZV9waHlfaW5mbyB7CkBAIC0xNDY3LDYgKzIxOTcsNyBAQAogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfZGlzYWJsZTsKIAlpeGdiZV9hdXRvbmVnX2FkdmVydGlzZWQgICAgICAgIGF1dG9uZWdfYWR2ZXJ0aXNlZDsKIAlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTsKKwlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpc3BlZWRfZmliZXI7CiB9OwogCiBzdHJ1Y3QgaXhnYmVfaHcgewpAQCAtMTQ3Nyw2ICsyMjA4LDcgQEAKIAlzdHJ1Y3QgaXhnYmVfZmNfaW5mbwkJZmM7CiAJc3RydWN0IGl4Z2JlX3BoeV9pbmZvCQlwaHk7CiAJc3RydWN0IGl4Z2JlX2VlcHJvbV9pbmZvCWVlcHJvbTsKKwlzdHJ1Y3QgaXhnYmVfYnVzX2luZm8JCWJ1czsKIAl1MTYJCQkJZGV2aWNlX2lkOwogCXUxNgkJCQl2ZW5kb3JfaWQ7CiAJdTE2CQkJCXN1YnN5c3RlbV9kZXZpY2VfaWQ7CkBAIC0xNTE1LDYgKzIyNDcsNyBAQAogI2RlZmluZSBJWEdCRV9FUlJfSTJDICAgICAgICAgICAgICAgICAgICAgICAgICAgLTE4CiAjZGVmaW5lIElYR0JFX0VSUl9TRlBfTk9UX1NVUFBPUlRFRCAgICAgICAgICAgICAtMTkKICNkZWZpbmUgSVhHQkVfRVJSX1NGUF9OT1RfUFJFU0VOVCAgICAgICAgICAgICAgIC0yMAorI2RlZmluZSBJWEdCRV9FUlJfU0ZQX05PX0lOSVRfU0VRX1BSRVNFTlQgICAgICAgLTIxCiAjZGVmaW5lIElYR0JFX05PVF9JTVBMRU1FTlRFRCAgICAgICAgICAgICAgICAgICAweDdGRkZGRkZGCiAKICNlbmRpZiAvKiBfSVhHQkVfVFlQRV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYyBiL2RyaXZlcnMvbmV0L2l4cDIwMDAvaXhwZGV2LmMKaW5kZXggMDE0NzQ1Ny4uZDNiZjJmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhwMjAwMC9peHBkZXYuYworKysgYi9kcml2ZXJzL25ldC9peHAyMDAwL2l4cGRldi5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAkJCWJyZWFrOwogCX0gd2hpbGUgKGl4cDIwMDBfcmVnX3JlYWQoSVhQMjAwMF9JUlFfVEhEX1JBV19TVEFUVVNfQV8wKSAmIDB4MDBmZik7CiAKLQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwluYXBpX2NvbXBsZXRlKG5hcGkpOwogCWl4cDIwMDBfcmVnX3dyaXRlKElYUDIwMDBfSVJRX1RIRF9FTkFCTEVfU0VUX0FfMCwgMHgwMGZmKTsKIAogCXJldHVybiByeDsKQEAgLTIwNCw3ICsyMDQsNyBAQAogCiAJCWl4cDIwMDBfcmVnX3dyYihJWFAyMDAwX0lSUV9USERfRU5BQkxFX0NMRUFSX0FfMCwgMHgwMGZmKTsKIAkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJmlwLT5uYXBpKSkpIHsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmlwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmaXAtPm5hcGkpOwogCQl9IGVsc2UgewogCQkJcHJpbnRrKEtFUk5fQ1JJVCAiaXhwMjAwMDogaXJxIHdoaWxlIHBvbGxpbmchIVxuIik7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2phenpzb25pYy5jIGIvZHJpdmVycy9uZXQvamF6enNvbmljLmMKaW5kZXggMzM0ZmY5ZS4uMTQyNDhjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvamF6enNvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvamF6enNvbmljLmMKQEAgLTEzMSw3ICsxMzEsOCBAQAogCWlmIChzb25pY19kZWJ1ZyAgJiYgIHZlcnNpb25fcHJpbnRlZCsrID09IDApCiAJCXByaW50ayh2ZXJzaW9uKTsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBTb25pYyBldGhlcm5ldCBmb3VuZCBhdCAweCUwOGx4LCAiLCBscC0+ZGV2aWNlLT5idXNfaWQsIGRldi0+YmFzZV9hZGRyKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogU29uaWMgZXRoZXJuZXQgZm91bmQgYXQgMHglMDhseCwgIiwKKwkgICAgICAgZGV2X25hbWUobHAtPmRldmljZSksIGRldi0+YmFzZV9hZGRyKTsKIAogCS8qCiAJICogUHV0IHRoZSBzb25pYyBpbnRvIHNvZnR3YXJlIHJlc2V0LCB0aGVuCkBAIC0xNTYsNyArMTU3LDggQEAKIAlpZiAoKGxwLT5kZXNjcmlwdG9ycyA9IGRtYV9hbGxvY19jb2hlcmVudChscC0+ZGV2aWNlLAogCQkJCVNJWkVPRl9TT05JQ19ERVNDICogU09OSUNfQlVTX1NDQUxFKGxwLT5kbWFfYml0bW9kZSksCiAJCQkJJmxwLT5kZXNjcmlwdG9yc19sYWRkciwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgYWxsb2MgRE1BIG1lbW9yeSBmb3IgZGVzY3JpcHRvcnMuXG4iLCBscC0+ZGV2aWNlLT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZG4ndCBhbGxvYyBETUEgbWVtb3J5IGZvciBkZXNjcmlwdG9ycy5cbiIsCisJCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSk7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmMgYi9kcml2ZXJzL25ldC9qbWUuYwppbmRleCBhNmUxYTM1Li44NjBkY2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuYworKysgYi9kcml2ZXJzL25ldC9qbWUuYwpAQCAtNDI5LDEwICs0MjksOSBAQAogCiAJCWptZS0+cGh5bGluayA9IHBoeWxpbms7CiAKLQkJZ2hjID0gam1lLT5yZWdfZ2hjICYgfihHSENfU1BFRURfMTBNIHwKLQkJCQkJR0hDX1NQRUVEXzEwME0gfAotCQkJCQlHSENfU1BFRURfMTAwME0gfAotCQkJCQlHSENfRFBYKTsKKwkJZ2hjID0gam1lLT5yZWdfZ2hjICYgfihHSENfU1BFRUQgfCBHSENfRFBYIHwKKwkJCQlHSENfVE9fQ0xLX1BDSUUgfCBHSENfVFhNQUNfQ0xLX1BDSUUgfAorCQkJCUdIQ19UT19DTEtfR1BIWSB8IEdIQ19UWE1BQ19DTEtfR1BIWSk7CiAJCXN3aXRjaCAocGh5bGluayAmIFBIWV9MSU5LX1NQRUVEX01BU0spIHsKIAkJY2FzZSBQSFlfTElOS19TUEVFRF8xME06CiAJCQlnaGMgfD0gR0hDX1NQRUVEXzEwTSB8CkBAIC0xODM0LDcgKzE4MzMsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1qbWVfZmlsbF9maXJzdF90eF9kZXNjKHN0cnVjdCBqbWVfYWRhcHRlciAqam1lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaWR4KQoram1lX2ZpbGxfdHhfZGVzYyhzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGlkeCkKIHsKIAlzdHJ1Y3Qgam1lX3JpbmcgKnR4cmluZyA9IGptZS0+dHhyaW5nOwogCXN0cnVjdCB0eGRlc2MgKnR4ZGVzYzsKQEAgLTE4NjQsNiArMTg2Myw3IEBACiAJaWYgKGptZV90eF90c28oc2tiLCAmdHhkZXNjLT5kZXNjMS5tc3MsICZmbGFncykpCiAJCWptZV90eF9jc3VtKGptZSwgc2tiLCAmZmxhZ3MpOwogCWptZV90eF92bGFuKHNrYiwgJnR4ZGVzYy0+ZGVzYzEudmxhbiwgJmZsYWdzKTsKKwlqbWVfbWFwX3R4X3NrYihqbWUsIHNrYiwgaWR4KTsKIAl0eGRlc2MtPmRlc2MxLmZsYWdzID0gZmxhZ3M7CiAJLyoKIAkgKiBTZXQgdHggYnVmZmVyIGluZm8gYWZ0ZXIgdGVsbGluZyBOSUMgdG8gc2VuZApAQCAtMTkzMyw4ICsxOTMzLDcgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAotCWptZV9tYXBfdHhfc2tiKGptZSwgc2tiLCBpZHgpOwotCWptZV9maWxsX2ZpcnN0X3R4X2Rlc2Moam1lLCBza2IsIGlkeCk7CisJam1lX2ZpbGxfdHhfZGVzYyhqbWUsIHNrYiwgaWR4KTsKIAogCWp3cml0ZTMyKGptZSwgSk1FX1RYQ1MsIGptZS0+cmVnX3R4Y3MgfAogCQkJCVRYQ1NfU0VMRUNUX1FVRVVFMCB8CkBAIC0yNTkxLDYgKzI1OTAsMTYgQEAKIHN0YXRpYyBpbnQKIGptZV9wY2lfZG1hNjQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJaWYgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwICYmCisJICAgICFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82NEJJVF9NQVNLKSkKKwkJaWYgKCFwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKQorCQkJcmV0dXJuIDE7CisKKwlpZiAocGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUMyNTAgJiYKKwkgICAgIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzQwQklUX01BU0spKQorCQlpZiAoIXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfNDBCSVRfTUFTSykpCisJCQlyZXR1cm4gMTsKKwogCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpCiAJCWlmICghcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkKIAkJCXJldHVybiAwOwpAQCAtMjg1Nyw3ICsyODY2LDExIEBACiAJCWdvdG8gZXJyX291dF9mcmVlX3NoYWRvdzsKIAl9CiAKLQltc2dfcHJvYmUoam1lLCAiSk1DMjUwIGdpZ2FiaXQlcyB2ZXI6JXggcmV2OiV4IG1hY2FkZHI6JXBNXG4iLAorCW1zZ19wcm9iZShqbWUsICIlcyVzIHZlcjoleCByZXY6JXggbWFjYWRkcjolcE1cbiIsCisJCShqbWUtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwKSA/CisJCQkiSk1DMjUwIEdpZ2FiaXQgRXRoZXJuZXQiIDoKKwkJCShqbWUtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjYwKSA/CisJCQkJIkpNQzI2MCBGYXN0IEV0aGVybmV0IiA6ICJVbmtub3duIiwKIAkJKGptZS0+ZnBnYXZlciAhPSAwKSA/ICIgKEZQR0EpIiA6ICIiLAogCQkoam1lLT5mcGdhdmVyICE9IDApID8gam1lLT5mcGdhdmVyIDogam1lLT5jaGlwcmV2LAogCQlqbWUtPnJldiwgbmV0ZGV2LT5kZXZfYWRkcik7CkBAIC0zMDAzLDcgKzMwMTYsNyBAQAogc3RhdGljIGludCBfX2luaXQKIGptZV9pbml0X21vZHVsZSh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gUEZYICJKTWljcm9uIEpNQzI1MCBnaWdhYml0IGV0aGVybmV0ICIKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiSk1pY3JvbiBKTUMyWFggZXRoZXJuZXQgIgogCSAgICAgICAiZHJpdmVyIHZlcnNpb24gJXNcbiIsIERSVl9WRVJTSU9OKTsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmam1lX2RyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qbWUuaCBiL2RyaXZlcnMvbmV0L2ptZS5oCmluZGV4IDUxNTQ0MTEuLjA5OTZhMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ptZS5oCisrKyBiL2RyaXZlcnMvbmV0L2ptZS5oCkBAIC0yNSw3ICsyNSw3IEBACiAjZGVmaW5lIF9fSk1FX0hfSU5DTFVERURfXwogCiAjZGVmaW5lIERSVl9OQU1FCSJqbWUiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAuMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMC40IgogI2RlZmluZSBQRlgJCURSVl9OQU1FICI6ICIKIAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwCTB4MDI1MApAQCAtMzk4LDE1ICszOTgsMTUgQEAKICNkZWZpbmUgSk1FX05BUElfV0VJR0hUKHcpIGludCB3CiAjZGVmaW5lIEpNRV9OQVBJX1dFSUdIVF9WQUwodykgdwogI2RlZmluZSBKTUVfTkFQSV9XRUlHSFRfU0VUKHcsIHIpCi0jZGVmaW5lIEpNRV9SWF9DT01QTEVURShkZXYsIG5hcGlzKSBuZXRpZl9yeF9jb21wbGV0ZShuYXBpcykKKyNkZWZpbmUgSk1FX1JYX0NPTVBMRVRFKGRldiwgbmFwaXMpIG5hcGlfY29tcGxldGUobmFwaXMpCiAjZGVmaW5lIEpNRV9OQVBJX0VOQUJMRShwcml2KSBuYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CiAjZGVmaW5lIEpNRV9OQVBJX0RJU0FCTEUocHJpdikgXAogCWlmICghbmFwaV9kaXNhYmxlX3BlbmRpbmcoJnByaXYtPm5hcGkpKSBcCiAJCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CiAjZGVmaW5lIEpNRV9SWF9TQ0hFRFVMRV9QUkVQKHByaXYpIFwKLQluZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKQorCW5hcGlfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkKICNkZWZpbmUgSk1FX1JYX1NDSEVEVUxFKHByaXYpIFwKLQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwlfX25hcGlfc2NoZWR1bGUoJnByaXYtPm5hcGkpOwogCiAvKgogICogSm1hYyBBZGFwdGVyIFByaXZhdGUgZGF0YQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQva29yaW5hLmMgYi9kcml2ZXJzL25ldC9rb3JpbmEuYwppbmRleCA3NTAxMGNhLi4zOGQ2NjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9rb3JpbmEuYworKysgYi9kcml2ZXJzL25ldC9rb3JpbmEuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJCQkJRE1BX1NUQVRfSEFMVCB8IERNQV9TVEFUX0VSUiksCiAJCQkJJmxwLT5yeF9kbWFfcmVncy0+ZG1hc20pOwogCi0JCW5ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAogCQlpZiAoZG1hcyAmIERNQV9TVEFUX0VSUikKIAkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiJXM6IERNQSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCiAJd29ya19kb25lID0ga29yaW5hX3J4KGRldiwgYnVkZ2V0KTsKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCXdyaXRlbChyZWFkbCgmbHAtPnJ4X2RtYV9yZWdzLT5kbWFzbSkgJgogCQkJfihETUFfU1RBVF9ET05FIHwgRE1BX1NUQVRfSEFMVCB8IERNQV9TVEFUX0VSUiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sYW5jZS5jIGIvZHJpdmVycy9uZXQvbGFuY2UuYwppbmRleCBkN2FmYjkzLi42MzM4MDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2xhbmNlLmMKQEAgLTM5MSw3ICszOTEsOCBAQAogICAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGRvX2xhbmNlX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaW50ICpwb3J0LCByZXN1bHQ7CisJdW5zaWduZWQgaW50ICpwb3J0OworCWludCByZXN1bHQ7CiAKIAlpZiAoaGlnaF9tZW1vcnkgPD0gcGh5c190b192aXJ0KDE2KjEwMjQqMTAyNCkpCiAJCWxhbmNlX25lZWRfaXNhX2JvdW5jZV9idWZmZXJzID0gMDsKQEAgLTQ1MywxNiArNDU0LDI4IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsYW5jZV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gbGFuY2Vfb3BlbiwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGFuY2Vfc3RhcnRfeG1pdCwKKwkubmRvX3N0b3AJCT0gbGFuY2VfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gbGFuY2VfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBsYW5jZV90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBsYW5jZV9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkciwgaW50IGlycSwgaW50IG9wdGlvbnMpCiB7CiAJc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwOwotCWxvbmcgZG1hX2NoYW5uZWxzOwkJCS8qIE1hcmsgc3B1cmlvdXNseS1idXN5IERNQSBjaGFubmVscyAqLworCXVuc2lnbmVkIGxvbmcgZG1hX2NoYW5uZWxzOwkvKiBNYXJrIHNwdXJpb3VzbHktYnVzeSBETUEgY2hhbm5lbHMgKi8KIAlpbnQgaSwgcmVzZXRfdmFsLCBsYW5jZV92ZXJzaW9uOwogCWNvbnN0IGNoYXIgKmNoaXBuYW1lOwogCS8qIEZsYWdzIGZvciBzcGVjaWZpYyBjaGlwcyBvciBib2FyZHMuICovCi0JdW5zaWduZWQgY2hhciBocEoyNDA1QSA9IDA7CQkvKiBIUCBJU0EgYWRhcHRvciAqLwotCWludCBocF9idWlsdGluID0gMDsJCQkvKiBIUCBvbi1ib2FyZCBldGhlcm5ldC4gKi8KLQlzdGF0aWMgaW50IGRpZF92ZXJzaW9uOwkJCS8qIEFscmVhZHkgcHJpbnRlZCB2ZXJzaW9uIGluZm8uICovCisJdW5zaWduZWQgY2hhciBocEoyNDA1QSA9IDA7CS8qIEhQIElTQSBhZGFwdG9yICovCisJaW50IGhwX2J1aWx0aW4gPSAwOwkJLyogSFAgb24tYm9hcmQgZXRoZXJuZXQuICovCisJc3RhdGljIGludCBkaWRfdmVyc2lvbjsJCS8qIEFscmVhZHkgcHJpbnRlZCB2ZXJzaW9uIGluZm8uICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAl2b2lkIF9faW9tZW0gKmJpb3M7CkBAIC03MTMsMTIgKzcyNiw3IEBACiAJCXByaW50ayh2ZXJzaW9uKTsKIAogCS8qIFRoZSBMQU5DRS1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9IGxhbmNlX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsYW5jZV9zdGFydF94bWl0OwotCWRldi0+c3RvcCA9IGxhbmNlX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gbGFuY2VfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+dHhfdGltZW91dCA9IGxhbmNlX3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJmxhbmNlX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xwNDg2ZS5jIGIvZHJpdmVycy9uZXQvbHA0ODZlLmMKaW5kZXggNGQxYTA1OS4uZDQ0YmRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbHA0ODZlLmMKKysrIGIvZHJpdmVycy9uZXQvbHA0ODZlLmMKQEAgLTk1Miw2ICs5NTIsMTcgQEAKIAkJKHVuc2lnbmVkIGNoYXIpIGFkZFsxMl0sICh1bnNpZ25lZCBjaGFyKSBhZGRbMTNdKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpNTk2X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGk1OTZfb3BlbiwKKwkubmRvX3N0b3AJCT0gaTU5Nl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaTU5Nl9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBpNTk2X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGxwNDg2ZV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7CiAJc3RydWN0IGk1OTZfcHJpdmF0ZSAqbHA7CiAJdW5zaWduZWQgY2hhciBldGhfYWRkcls2XSA9IHsgMCwgMHhhYSwgMCwgMCwgMCwgMCB9OwpAQCAtMTAxNCwxMiArMTAyNSw4IEBACiAJcHJpbnRrKCJcbiIpOwogCiAJLyogVGhlIExQNDg2RS1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotCWRldi0+b3BlbiA9ICZpNTk2X29wZW47Ci0JZGV2LT5zdG9wID0gJmk1OTZfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmaTU5Nl9zdGFydF94bWl0OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmaTU5Nl9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwotCWRldi0+dHhfdGltZW91dCA9IGk1OTZfdHhfdGltZW91dDsKIAogI2lmIDAKIAkvKiBzZWxmdGVzdCByZXBvcnRzIDB4MzIwOTI1YWUgLSBkb24ndCBrbm93IHdoYXQgdGhhdCBtZWFucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjYi5jIGIvZHJpdmVycy9uZXQvbWFjYi5jCmluZGV4IGY2YzQ5MzYuLmY1MDUwMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2IuYworKysgYi9kcml2ZXJzL25ldC9tYWNiLmMKQEAgLTIxMSwxMCArMjExLDEwIEBACiAKIAkvKiBhdHRhY2ggdGhlIG1hYyB0byB0aGUgcGh5ICovCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5pc19ybWlpKSB7Ci0JCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCQkmbWFjYl9oYW5kbGVfbGlua19jaGFuZ2UsIDAsIFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKTsKIAl9IGVsc2UgewotCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwKKwkJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAogCQkJJm1hY2JfaGFuZGxlX2xpbmtfY2hhbmdlLCAwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKIAl9CiAKQEAgLTUxMyw3ICs1MTMsNiBAQAogc3RhdGljIGludCBtYWNiX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBtYWNiICpicCA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgbWFjYiwgbmFwaSk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJwLT5kZXY7CiAJaW50IHdvcmtfZG9uZTsKIAl1MzIgc3RhdHVzOwogCkBAIC01MjcsNyArNTI2LDcgQEAKIAkJICogdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkIGxhc3QgdGltZSwgYW5kIG5vIHBhY2tldHMKIAkJICogaGF2ZSBiZWVuIHJlY2VpdmVkIHNpbmNlLgogCQkgKi8KLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTM4LDEzICs1MzcsMTMgQEAKIAkJZGV2X3dhcm4oJmJwLT5wZGV2LT5kZXYsCiAJCQkgIk5vIFJYIGJ1ZmZlcnMgY29tcGxldGUsIHN0YXR1cyA9ICUwMmx4XG4iLAogCQkJICh1bnNpZ25lZCBsb25nKXN0YXR1cyk7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlnb3RvIG91dDsKIAl9CiAKIAl3b3JrX2RvbmUgPSBtYWNiX3J4KGJwLCBidWRnZXQpOwogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJLyoKIAkgKiBXZSd2ZSBkb25lIHdoYXQgd2UgY2FuIHRvIGNsZWFuIHRoZSBidWZmZXJzLiBNYWtlIHN1cmUgd2UKQEAgLTU3OSw3ICs1NzgsNyBAQAogCQl9CiAKIAkJaWYgKHN0YXR1cyAmIE1BQ0JfUlhfSU5UX0ZMQUdTKSB7Ci0JCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmYnAtPm5hcGkpKSB7CisJCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZicC0+bmFwaSkpIHsKIAkJCQkvKgogCQkJCSAqIFRoZXJlJ3Mgbm8gcG9pbnQgdGFraW5nIGFueSBtb3JlIGludGVycnVwdHMKIAkJCQkgKiB1bnRpbCB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUgYnVmZmVycwpAQCAtNTg3LDcgKzU4Niw3IEBACiAJCQkJbWFjYl93cml0ZWwoYnAsIElEUiwgTUFDQl9SWF9JTlRfRkxBR1MpOwogCQkJCWRldl9kYmcoJmJwLT5wZGV2LT5kZXYsCiAJCQkJCSJzY2hlZHVsaW5nIFJYIHNvZnRpcnFcbiIpOwotCQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmJwLT5uYXBpKTsKKwkJCQlfX25hcGlfc2NoZWR1bGUoJmJwLT5uYXBpKTsKIAkJCX0KIAkJfQogCkBAIC0xMDc3LDcgKzEwNzYsNyBAQAogCiAJc3RyY3B5KGluZm8tPmRyaXZlciwgYnAtPnBkZXYtPmRldi5kcml2ZXItPm5hbWUpOwogCXN0cmNweShpbmZvLT52ZXJzaW9uLCAiJFJldmlzaW9uOiAxLjE0ICQiKTsKLQlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGJwLT5wZGV2LT5kZXYuYnVzX2lkKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKCZicC0+cGRldi0+ZGV2KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbWFjYl9ldGh0b29sX29wcyA9IHsKQEAgLTEyMzQsOCArMTIzMyw4IEBACiAKIAlwaHlkZXYgPSBicC0+cGh5X2RldjsKIAlwcmludGsoS0VSTl9JTkZPICIlczogYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdICIKLQkJIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLAotCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBwaHlkZXYtPmRldi5idXNfaWQsIHBoeWRldi0+aXJxKTsKKwkJIihtaWlfYnVzOnBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLCBkZXYtPm5hbWUsCisJCXBoeWRldi0+ZHJ2LT5uYW1lLCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCBwaHlkZXYtPmlycSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYyBiL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKaW5kZXggMjA1YmIwNS4uNTI3MTY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjc29uaWMuYworKysgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCkBAIC0xNzYsNyArMTc2LDggQEAKIAlpZiAoKGxwLT5kZXNjcmlwdG9ycyA9IGRtYV9hbGxvY19jb2hlcmVudChscC0+ZGV2aWNlLAogCSAgICAgICAgICAgIFNJWkVPRl9TT05JQ19ERVNDICogU09OSUNfQlVTX1NDQUxFKGxwLT5kbWFfYml0bW9kZSksCiAJICAgICAgICAgICAgJmxwLT5kZXNjcmlwdG9yc19sYWRkciwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgYWxsb2MgRE1BIG1lbW9yeSBmb3IgZGVzY3JpcHRvcnMuXG4iLCBscC0+ZGV2aWNlLT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZG4ndCBhbGxvYyBETUEgbWVtb3J5IGZvciBkZXNjcmlwdG9ycy5cbiIsCisJCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzM3LDcgKzMzOCw3IEBACiAJCXNvbmljX3ZlcnNpb25fcHJpbnRlZCA9IDE7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiBvbmJvYXJkIC8gY29tbS1zbG90IFNPTklDIGF0IDB4JTA4bHhcbiIsCi0JICAgICAgIGxwLT5kZXZpY2UtPmJ1c19pZCwgZGV2LT5iYXNlX2FkZHIpOworCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSwgZGV2LT5iYXNlX2FkZHIpOwogCiAJLyogVGhlIFBvd2VyQm9vaydzIFNPTklDIGlzIDE2IGJpdCBhbHdheXMuICovCiAJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9QQjUyMCkgewpAQCAtMzcwLDEwICszNzEsMTAgQEAKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAiJXM6IHJldmlzaW9uIDB4JTA0eCwgdXNpbmcgJWQgYml0IERNQSBhbmQgcmVnaXN0ZXIgb2Zmc2V0ICVkXG4iLAotCSAgICAgICBscC0+ZGV2aWNlLT5idXNfaWQsIHNyLCBscC0+ZG1hX2JpdG1vZGU/MzI6MTYsIGxwLT5yZWdfb2Zmc2V0KTsKKwkgICAgICAgZGV2X25hbWUobHAtPmRldmljZSksIHNyLCBscC0+ZG1hX2JpdG1vZGU/MzI6MTYsIGxwLT5yZWdfb2Zmc2V0KTsKIAogI2lmIDAgLyogVGhpcyBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGZpbmQgb3V0IGhvdyBNYWNPUyBjb25maWd1cmVkIHRoZSBjYXJkLiAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEQ1I6IDB4JTA0eCwgRENSMjogMHglMDR4XG4iLCBscC0+ZGV2aWNlLT5idXNfaWQsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDUjogMHglMDR4LCBEQ1IyOiAweCUwNHhcbiIsIGRldl9uYW1lKGxwLT5kZXZpY2UpLAogCSAgICAgICBTT05JQ19SRUFEKFNPTklDX0RDUikgJiAweGZmZmYsIFNPTklDX1JFQUQoU09OSUNfRENSMikgJiAweGZmZmYpOwogI2VuZGlmCiAKQEAgLTUyNSwxMiArNTI2LDEyIEBACiAJCXNvbmljX3ZlcnNpb25fcHJpbnRlZCA9IDE7CiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBpbiBzbG90ICVYXG4iLAotCSAgICAgICBscC0+ZGV2aWNlLT5idXNfaWQsIG5kZXYtPmJvYXJkLT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCk7CisJICAgICAgIGRldl9uYW1lKGxwLT5kZXZpY2UpLCBuZGV2LT5ib2FyZC0+bmFtZSwgbmRldi0+Ym9hcmQtPnNsb3QpOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiByZXZpc2lvbiAweCUwNHgsIHVzaW5nICVkIGJpdCBETUEgYW5kIHJlZ2lzdGVyIG9mZnNldCAlZFxuIiwKLQkgICAgICAgbHAtPmRldmljZS0+YnVzX2lkLCBTT05JQ19SRUFEKFNPTklDX1NSKSwgZG1hX2JpdG1vZGU/MzI6MTYsIHJlZ19vZmZzZXQpOworCSAgICAgICBkZXZfbmFtZShscC0+ZGV2aWNlKSwgU09OSUNfUkVBRChTT05JQ19TUiksIGRtYV9iaXRtb2RlPzMyOjE2LCByZWdfb2Zmc2V0KTsKIAogI2lmIDAgLyogVGhpcyBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGZpbmQgb3V0IGhvdyBNYWNPUyBjb25maWd1cmVkIHRoZSBjYXJkLiAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBEQ1I6IDB4JTA0eCwgRENSMjogMHglMDR4XG4iLCBscC0+ZGV2aWNlLT5idXNfaWQsCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERDUjogMHglMDR4LCBEQ1IyOiAweCUwNHhcbiIsIGRldl9uYW1lKGxwLT5kZXZpY2UpLAogCSAgICAgICBTT05JQ19SRUFEKFNPTklDX0RDUikgJiAweGZmZmYsIFNPTklDX1JFQUQoU09OSUNfRENSMikgJiAweGZmZmYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwppbmRleCA3ZTI0YjUwLi43MGQzZWY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjdmxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwpAQCAtNjAsNiArNjAsNDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHZvaWQgbWFjdmxhbl9oYXNoX2FkZChzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4pCit7CisJc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCA9IHZsYW4tPnBvcnQ7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciA9IHZsYW4tPmRldi0+ZGV2X2FkZHI7CisKKwlobGlzdF9hZGRfaGVhZF9yY3UoJnZsYW4tPmhsaXN0LCAmcG9ydC0+dmxhbl9oYXNoW2FkZHJbNV1dKTsKK30KKworc3RhdGljIHZvaWQgbWFjdmxhbl9oYXNoX2RlbChzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4pCit7CisJaGxpc3RfZGVsX3JjdSgmdmxhbi0+aGxpc3QpOworCXN5bmNocm9uaXplX3JjdSgpOworfQorCitzdGF0aWMgdm9pZCBtYWN2bGFuX2hhc2hfY2hhbmdlX2FkZHIoc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuLAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCW1hY3ZsYW5faGFzaF9kZWwodmxhbik7CisJLyogTm93IHRoYXQgd2UgYXJlIHVuaGFzaGVkIGl0IGlzIHNhZmUgdG8gY2hhbmdlIHRoZSBkZXZpY2UKKwkgKiBhZGRyZXNzIHdpdGhvdXQgY29uZnVzaW5nIHBhY2tldCBkZWxpdmVyeS4KKwkgKi8KKwltZW1jcHkodmxhbi0+ZGV2LT5kZXZfYWRkciwgYWRkciwgRVRIX0FMRU4pOworCW1hY3ZsYW5faGFzaF9hZGQodmxhbik7Cit9CisKK3N0YXRpYyBpbnQgbWFjdmxhbl9hZGRyX2J1c3koY29uc3Qgc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCS8qIFRlc3QgdG8gc2VlIGlmIHRoZSBzcGVjaWZpZWQgbXVsdGljYXN0IGFkZHJlc3MgaXMKKwkgKiBjdXJyZW50bHkgaW4gdXNlIGJ5IHRoZSB1bmRlcmx5aW5nIGRldmljZSBvcgorCSAqIGFub3RoZXIgbWFjdmxhbi4KKwkgKi8KKwlpZiAobWVtY21wKHBvcnQtPmRldi0+ZGV2X2FkZHIsIGFkZHIsIEVUSF9BTEVOKSA9PSAwKQorCQlyZXR1cm4gMTsKKworCWlmIChtYWN2bGFuX2hhc2hfbG9va3VwKHBvcnQsIGFkZHIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBtYWN2bGFuX2Jyb2FkY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgY29uc3Qgc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCkKIHsKQEAgLTE4NCwxMCArMjI1LDEzIEBACiBzdGF0aWMgaW50IG1hY3ZsYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG1hY3ZsYW5fcG9ydCAqcG9ydCA9IHZsYW4tPnBvcnQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmxvd2VyZGV2ID0gdmxhbi0+bG93ZXJkZXY7CiAJaW50IGVycjsKIAorCWVyciA9IC1FQlVTWTsKKwlpZiAobWFjdmxhbl9hZGRyX2J1c3kodmxhbi0+cG9ydCwgZGV2LT5kZXZfYWRkcikpCisJCWdvdG8gb3V0OworCiAJZXJyID0gZGV2X3VuaWNhc3RfYWRkKGxvd2VyZGV2LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0OwpAQCAtMTk2LDggKzI0MCw3IEBACiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBkZWxfdW5pY2FzdDsKIAl9Ci0KLQlobGlzdF9hZGRfaGVhZF9yY3UoJnZsYW4tPmhsaXN0LCAmcG9ydC0+dmxhbl9oYXNoW2Rldi0+ZGV2X2FkZHJbNV1dKTsKKwltYWN2bGFuX2hhc2hfYWRkKHZsYW4pOwogCXJldHVybiAwOwogCiBkZWxfdW5pY2FzdDoKQEAgLTIxNyw4ICsyNjAsNyBAQAogCiAJZGV2X3VuaWNhc3RfZGVsZXRlKGxvd2VyZGV2LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAKLQlobGlzdF9kZWxfcmN1KCZ2bGFuLT5obGlzdCk7Ci0Jc3luY2hyb25pemVfcmN1KCk7CisJbWFjdmxhbl9oYXNoX2RlbCh2bGFuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMyLDE2ICsyNzQsMjEgQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAotCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKQotCQlnb3RvIG91dDsKKwlpZiAoIShkZXYtPmZsYWdzICYgSUZGX1VQKSkgeworCQkvKiBKdXN0IGNvcHkgaW4gdGhlIG5ldyBhZGRyZXNzICovCisJCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJLyogUmVoYXNoIGFuZCB1cGRhdGUgdGhlIGRldmljZSBmaWx0ZXJzICovCisJCWlmIChtYWN2bGFuX2FkZHJfYnVzeSh2bGFuLT5wb3J0LCBhZGRyLT5zYV9kYXRhKSkKKwkJCXJldHVybiAtRUJVU1k7CiAKLQllcnIgPSBkZXZfdW5pY2FzdF9hZGQobG93ZXJkZXYsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlkZXZfdW5pY2FzdF9kZWxldGUobG93ZXJkZXYsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJaWYgKChlcnIgPSBkZXZfdW5pY2FzdF9hZGQobG93ZXJkZXYsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKSkpCisJCQlyZXR1cm4gZXJyOwogCi1vdXQ6Ci0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKwkJZGV2X3VuaWNhc3RfZGVsZXRlKGxvd2VyZGV2LCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKKwkJbWFjdmxhbl9oYXNoX2NoYW5nZV9hZGRyKHZsYW4sIGFkZHItPnNhX2RhdGEpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYxLDEyICs1MDgsMTMgQEAKIAlpZiAobG93ZXJkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQkvKiBEb24ndCBhbGxvdyBtYWN2bGFucyBvbiB0b3Agb2Ygb3RoZXIgbWFjdmxhbnMgLSBpdHMgbm90IHJlYWxseQotCSAqIHdyb25nLCBidXQgbG9ja2RlcCBjYW4ndCBoYW5kbGUgaXQgYW5kIGl0cyBub3QgdXNlZnVsIGZvciBhbnl0aGluZwotCSAqIHlvdSBjb3VsZG4ndCBkbyBkaXJlY3RseSBvbiB0b3Agb2YgdGhlIHJlYWwgZGV2aWNlLgorCS8qIFdoZW4gY3JlYXRpbmcgbWFjdmxhbnMgb24gdG9wIG9mIG90aGVyIG1hY3ZsYW5zIC0gdXNlCisJICogdGhlIHJlYWwgZGV2aWNlIGFzIHRoZSBsb3dlcmRldi4KIAkgKi8KLQlpZiAobG93ZXJkZXYtPnJ0bmxfbGlua19vcHMgPT0gZGV2LT5ydG5sX2xpbmtfb3BzKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAobG93ZXJkZXYtPnJ0bmxfbGlua19vcHMgPT0gZGV2LT5ydG5sX2xpbmtfb3BzKSB7CisJCXN0cnVjdCBtYWN2bGFuX2RldiAqbG93ZXJ2bGFuID0gbmV0ZGV2X3ByaXYobG93ZXJkZXYpOworCQlsb3dlcmRldiA9IGxvd2Vydmxhbi0+bG93ZXJkZXY7CisJfQogCiAJaWYgKCF0YltJRkxBX01UVV0pCiAJCWRldi0+bXR1ID0gbG93ZXJkZXYtPm10dTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21pcHNuZXQuYyBiL2RyaXZlcnMvbmV0L21pcHNuZXQuYwppbmRleCA0ZTdhNWZhLi42NjQ4MzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9taXBzbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvbWlwc25ldC5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIHsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbWlwc25ldF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBtaXBzbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCWludCBlcnI7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgbmV0ZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIG5ldGRldik7CiAKIAluZXRkZXYtPm9wZW4JCQk9IG1pcHNuZXRfb3BlbjsKIAluZXRkZXYtPnN0b3AJCQk9IG1pcHNuZXRfY2xvc2U7CkBAIC0yOTMsMjMgKzI5MywyNSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IG1pcHNuZXRfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtaXBzbmV0X2RldmljZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIHNpemVvZihzdHJ1Y3QgbWlwc25ldF9yZWdzKSk7CiAJZnJlZV9uZXRkZXYoZGV2KTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBOVUxMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXZpY2UsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBtaXBzbmV0X2RyaXZlciA9IHsKLQkubmFtZQk9IG1pcHNuZXRfc3RyaW5nLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCT0gbWlwc25ldF9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AobWlwc25ldF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1pcHNuZXRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9IG1pcHNuZXRfc3RyaW5nLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gbWlwc25ldF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1pcHNuZXRfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtaXBzbmV0X2luaXRfbW9kdWxlKHZvaWQpCkBAIC0zMTksNyArMzIxLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJNSVBTTmV0IEV0aGVybmV0IGRyaXZlci4gVmVyc2lvbjogJXMuICIKIAkgICAgICAgIihjKTIwMDUgTUlQUyBUZWNobm9sb2dpZXMsIEluYy5cbiIsIE1JUFNORVRfVkVSU0lPTik7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJm1pcHNuZXRfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1pcHNuZXRfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlwcmludGsoS0VSTl9FUlIgIkRyaXZlciByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIApAQCAtMzI4LDcgKzMzMCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtaXBzbmV0X2V4aXRfbW9kdWxlKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJm1pcHNuZXRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWlwc25ldF9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChtaXBzbmV0X2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9tbHg0L01ha2VmaWxlCmluZGV4IGE3YTk3YmYuLjIxMDQwYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIG9iai0kKENPTkZJR19NTFg0X0NPUkUpCQkrPSBtbHg0X2NvcmUubwogCiBtbHg0X2NvcmUteSA6PQlhbGxvYy5vIGNhdGFzLm8gY21kLm8gY3EubyBlcS5vIGZ3Lm8gaWNtLm8gaW50Zi5vIG1haW4ubyBtY2cubyBcCi0JCW1yLm8gcGQubyBwb3J0Lm8gcHJvZmlsZS5vIHFwLm8gcmVzZXQubyBzcnEubworCQltci5vIHBkLm8gcG9ydC5vIHByb2ZpbGUubyBxcC5vIHJlc2V0Lm8gc2Vuc2UubyBzcnEubwogCiBvYmotJChDT05GSUdfTUxYNF9FTikgICAgICAgICAgICAgICArPSBtbHg0X2VuLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jIGIvZHJpdmVycy9uZXQvbWx4NC9jYXRhcy5jCmluZGV4IGYwOTRlZTAuLmFhOTY3NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvY2F0YXMuYworKysgYi9kcml2ZXJzL25ldC9tbHg0L2NhdGFzLmMKQEAgLTQyLDcgKzQyLDYgQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2F0YXNfbG9jayk7CiAKIHN0YXRpYyBMSVNUX0hFQUQoY2F0YXNfbGlzdCk7Ci1zdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNhdGFzX3dxOwogc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCBjYXRhc193b3JrOwogCiBzdGF0aWMgaW50IGludGVybmFsX2Vycl9yZXNldCA9IDE7CkBAIC03Nyw3ICs3Niw3IEBACiAJCQlsaXN0X2FkZCgmcHJpdi0+Y2F0YXNfZXJyLmxpc3QsICZjYXRhc19saXN0KTsKIAkJCXNwaW5fdW5sb2NrKCZjYXRhc19sb2NrKTsKIAotCQkJcXVldWVfd29yayhjYXRhc193cSwgJmNhdGFzX3dvcmspOworCQkJcXVldWVfd29yayhtbHg0X3dxLCAmY2F0YXNfd29yayk7CiAJCX0KIAl9IGVsc2UKIAkJbW9kX3RpbWVyKCZwcml2LT5jYXRhc19lcnIudGltZXIsCkBAIC0xNDYsMTggKzE0NSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZjYXRhc19sb2NrKTsKIH0KIAotaW50IF9faW5pdCBtbHg0X2NhdGFzX2luaXQodm9pZCkKK3ZvaWQgIF9faW5pdCBtbHg0X2NhdGFzX2luaXQodm9pZCkKIHsKIAlJTklUX1dPUksoJmNhdGFzX3dvcmssIGNhdGFzX3Jlc2V0KTsKLQotCWNhdGFzX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm1seDRfZXJyIik7Ci0JaWYgKCFjYXRhc193cSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBtbHg0X2NhdGFzX2NsZWFudXAodm9pZCkKLXsKLQlkZXN0cm95X3dvcmtxdWV1ZShjYXRhc193cSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKaW5kZXggYzYxYjBiZC4uYTQxMzBlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYwpAQCAtNzY4LDYgKzc2OCw3IEBACiAKIAkJc2tiLT5pcF9zdW1tZWQgPSBpcF9zdW1tZWQ7CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBjcS0+cmluZyk7CiAKIAkJLyogUHVzaCBpdCB1cCB0aGUgc3RhY2sgKi8KIAkJaWYgKHByaXYtPnZsZ3JwICYmIChiZTMyX3RvX2NwdShjcWUtPnZsYW5fbXlfcXBuKSAmCkBAIC04MTQsNyArODE1LDcgQEAKIAlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoY3EtPmRldik7CiAKIAlpZiAocHJpdi0+cG9ydF91cCkKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJmNxLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmY3EtPm5hcGkpOwogCWVsc2UKIAkJbWx4NF9lbl9hcm1fY3EocHJpdiwgY3EpOwogfQpAQCAtODM0LDcgKzgzNSw3IEBACiAJCUlOQ19QRVJGX0NPVU5URVIocHJpdi0+cHN0YXRzLm5hcGlfcXVvdGEpOwogCWVsc2UgewogCQkvKiBEb25lIGZvciBub3cgKi8KLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCW1seDRfZW5fYXJtX2NxKHByaXYsIGNxKTsKIAl9CiAJcmV0dXJuIGRvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VxLmMgYi9kcml2ZXJzL25ldC9tbHg0L2VxLmMKaW5kZXggMmMxOWJmZjdjLi44ODMwZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L2VxLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9lcS5jCkBAIC0xNjMsNiArMTYzLDcgQEAKIAlpbnQgY3FuOwogCWludCBlcWVzX2ZvdW5kID0gMDsKIAlpbnQgc2V0X2NpID0gMDsKKwlpbnQgcG9ydDsKIAogCXdoaWxlICgoZXFlID0gbmV4dF9lcWVfc3coZXEpKSkgewogCQkvKgpAQCAtMjAzLDExICsyMDQsMTYgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX1BPUlRfQ0hBTkdFOgotCQkJbWx4NF9kaXNwYXRjaF9ldmVudChkZXYsCi0JCQkJCSAgICBlcWUtPnN1YnR5cGUgPT0gTUxYNF9QT1JUX0NIQU5HRV9TVUJUWVBFX0FDVElWRSA/Ci0JCQkJCSAgICBNTFg0X0RFVl9FVkVOVF9QT1JUX1VQIDoKLQkJCQkJICAgIE1MWDRfREVWX0VWRU5UX1BPUlRfRE9XTiwKLQkJCQkJICAgIGJlMzJfdG9fY3B1KGVxZS0+ZXZlbnQucG9ydF9jaGFuZ2UucG9ydCkgPj4gMjgpOworCQkJcG9ydCA9IGJlMzJfdG9fY3B1KGVxZS0+ZXZlbnQucG9ydF9jaGFuZ2UucG9ydCkgPj4gMjg7CisJCQlpZiAoZXFlLT5zdWJ0eXBlID09IE1MWDRfUE9SVF9DSEFOR0VfU1VCVFlQRV9ET1dOKSB7CisJCQkJbWx4NF9kaXNwYXRjaF9ldmVudChkZXYsIE1MWDRfREVWX0VWRU5UX1BPUlRfRE9XTiwKKwkJCQkJCSAgICBwb3J0KTsKKwkJCQltbHg0X3ByaXYoZGV2KS0+c2Vuc2UuZG9fc2Vuc2VfcG9ydFtwb3J0XSA9IDE7CisJCQl9IGVsc2UgeworCQkJCW1seDRfZGlzcGF0Y2hfZXZlbnQoZGV2LCBNTFg0X0RFVl9FVkVOVF9QT1JUX1VQLAorCQkJCQkJICAgIHBvcnQpOworCQkJCW1seDRfcHJpdihkZXYpLT5zZW5zZS5kb19zZW5zZV9wb3J0W3BvcnRdID0gMDsKKwkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2UgTUxYNF9FVkVOVF9UWVBFX0NRX0VSUk9SOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCA2ZWYyNDkwLi5hNjZmNWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpAQCAtNTEsNiArNTEsOCBAQAogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbWx4NF93cTsKKwogI2lmZGVmIENPTkZJR19NTFg0X0RFQlVHCiAKIGludCBtbHg0X2RlYnVnX2xldmVsID0gMDsKQEAgLTk4LDI0ICsxMDAsMjMgQEAKIE1PRFVMRV9QQVJNX0RFU0ModXNlX3ByaW8sICJFbmFibGUgc3RlZXJpbmcgYnkgVkxBTiBwcmlvcml0eSBvbiBFVEggcG9ydHMgIgogCQkgICIoMC8xLCBkZWZhdWx0IDApIik7CiAKLXN0YXRpYyBpbnQgbWx4NF9jaGVja19wb3J0X3BhcmFtcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKLQkJCQkgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZSkKK2ludCBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJICAgZW51bSBtbHg0X3BvcnRfdHlwZSAqcG9ydF90eXBlKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGRldi0+Y2Fwcy5udW1fcG9ydHMgLSAxOyBpKyspIHsKLQkJaWYgKHBvcnRfdHlwZVtpXSAhPSBwb3J0X3R5cGVbaSsxXSAmJgotCQkgICAgIShkZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19EUERQKSkgewotCQkJbWx4NF9lcnIoZGV2LCAiT25seSBzYW1lIHBvcnQgdHlwZXMgc3VwcG9ydGVkICIKLQkJCQkgIm9uIHRoaXMgSENBLCBhYm9ydGluZy5cbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChwb3J0X3R5cGVbaV0gIT0gcG9ydF90eXBlW2kgKyAxXSkgeworCQkJaWYgKCEoZGV2LT5jYXBzLmZsYWdzICYgTUxYNF9ERVZfQ0FQX0ZMQUdfRFBEUCkpIHsKKwkJCQltbHg0X2VycihkZXYsICJPbmx5IHNhbWUgcG9ydCB0eXBlcyBzdXBwb3J0ZWQgIgorCQkJCQkgIm9uIHRoaXMgSENBLCBhYm9ydGluZy5cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWYgKHBvcnRfdHlwZVtpXSA9PSBNTFg0X1BPUlRfVFlQRV9FVEggJiYKKwkJCSAgICBwb3J0X3R5cGVbaSArIDFdID09IE1MWDRfUE9SVF9UWVBFX0lCKQorCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCWlmICgocG9ydF90eXBlWzBdID09IE1MWDRfUE9SVF9UWVBFX0VUSCkgJiYKLQkgICAgKHBvcnRfdHlwZVsxXSA9PSBNTFg0X1BPUlRfVFlQRV9JQikpIHsKLQkJbWx4NF9lcnIoZGV2LCAiZXRoLWliIGNvbmZpZ3VyYXRpb24gaXMgbm90IHN1cHBvcnRlZC5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKSB7CiAJCWlmICghKHBvcnRfdHlwZVtpXSAmIGRldi0+Y2Fwcy5zdXBwb3J0ZWRfdHlwZVtpKzFdKSkgewpAQCAtMjI1LDYgKzIyNiw5IEBACiAJCQlkZXYtPmNhcHMucG9ydF90eXBlW2ldID0gTUxYNF9QT1JUX1RZUEVfSUI7CiAJCWVsc2UKIAkJCWRldi0+Y2Fwcy5wb3J0X3R5cGVbaV0gPSBNTFg0X1BPUlRfVFlQRV9FVEg7CisJCWRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2ldID0gZGV2LT5jYXBzLnBvcnRfdHlwZVtpXTsKKwkJbWx4NF9wcml2KGRldiktPnNlbnNlLnNlbnNlX2FsbG93ZWRbaV0gPQorCQkJZGV2LT5jYXBzLnN1cHBvcnRlZF90eXBlW2ldID09IE1MWDRfUE9SVF9UWVBFX0FVVE87CiAKIAkJaWYgKGRldi0+Y2Fwcy5sb2dfbnVtX21hY3MgPiBkZXZfY2FwLT5sb2dfbWF4X21hY3NbaV0pIHsKIAkJCWRldi0+Y2Fwcy5sb2dfbnVtX21hY3MgPSBkZXZfY2FwLT5sb2dfbWF4X21hY3NbaV07CkBAIC0yNjMsMTQgKzI2NywxNiBAQAogICogQ2hhbmdlIHRoZSBwb3J0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRldmljZS4KICAqIEV2ZXJ5IHVzZXIgb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGhvbGQgdGhlIHBvcnQgbXV0ZXguCiAgKi8KLXN0YXRpYyBpbnQgbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKLQkJCQkgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZXMpCitpbnQgbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZXMpCiB7CiAJaW50IGVyciA9IDA7CiAJaW50IGNoYW5nZSA9IDA7CiAJaW50IHBvcnQ7CiAKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgIGRldi0+Y2Fwcy5udW1fcG9ydHM7IHBvcnQrKykgeworCQkvKiBDaGFuZ2UgdGhlIHBvcnQgdHlwZSBvbmx5IGlmIHRoZSBuZXcgdHlwZSBpcyBkaWZmZXJlbnQKKwkJICogZnJvbSB0aGUgY3VycmVudCwgYW5kIG5vdCBzZXQgdG8gQXV0byAqLwogCQlpZiAocG9ydF90eXBlc1twb3J0XSAhPSBkZXYtPmNhcHMucG9ydF90eXBlW3BvcnQgKyAxXSkgewogCQkJY2hhbmdlID0gMTsKIAkJCWRldi0+Y2Fwcy5wb3J0X3R5cGVbcG9ydCArIDFdID0gcG9ydF90eXBlc1twb3J0XTsKQEAgLTMwMiwxMCArMzA4LDE3IEBACiAJc3RydWN0IG1seDRfcG9ydF9pbmZvICppbmZvID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBtbHg0X3BvcnRfaW5mbywKIAkJCQkJCSAgIHBvcnRfYXR0cik7CiAJc3RydWN0IG1seDRfZGV2ICptZGV2ID0gaW5mby0+ZGV2OworCWNoYXIgdHlwZVs4XTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAotCQkgICAgICAgbWRldi0+Y2Fwcy5wb3J0X3R5cGVbaW5mby0+cG9ydF0gPT0gTUxYNF9QT1JUX1RZUEVfSUIgPwotCQkgICAgICAgImliIiA6ICJldGgiKTsKKwlzcHJpbnRmKHR5cGUsICIlcyIsCisJCShtZGV2LT5jYXBzLnBvcnRfdHlwZVtpbmZvLT5wb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9JQikgPworCQkiaWIiIDogImV0aCIpOworCWlmIChtZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaW5mby0+cG9ydF0gPT0gTUxYNF9QT1JUX1RZUEVfQVVUTykKKwkJc3ByaW50ZihidWYsICJhdXRvICglcylcbiIsIHR5cGUpOworCWVsc2UKKwkJc3ByaW50ZihidWYsICIlc1xuIiwgdHlwZSk7CisKKwlyZXR1cm4gc3RybGVuKGJ1Zik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNldF9wb3J0X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMzE3LDYgKzMzMCw3IEBACiAJc3RydWN0IG1seDRfZGV2ICptZGV2ID0gaW5mby0+ZGV2OwogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYobWRldik7CiAJZW51bSBtbHg0X3BvcnRfdHlwZSB0eXBlc1tNTFg0X01BWF9QT1JUU107CisJZW51bSBtbHg0X3BvcnRfdHlwZSBuZXdfdHlwZXNbTUxYNF9NQVhfUE9SVFNdOwogCWludCBpOwogCWludCBlcnIgPSAwOwogCkBAIC0zMjQsMjYgKzMzOCw1NiBAQAogCQlpbmZvLT50bXBfdHlwZSA9IE1MWDRfUE9SVF9UWVBFX0lCOwogCWVsc2UgaWYgKCFzdHJjbXAoYnVmLCAiZXRoXG4iKSkKIAkJaW5mby0+dG1wX3R5cGUgPSBNTFg0X1BPUlRfVFlQRV9FVEg7CisJZWxzZSBpZiAoIXN0cmNtcChidWYsICJhdXRvXG4iKSkKKwkJaW5mby0+dG1wX3R5cGUgPSBNTFg0X1BPUlRfVFlQRV9BVVRPOwogCWVsc2UgewogCQltbHg0X2VycihtZGV2LCAiJXMgaXMgbm90IHN1cHBvcnRlZCBwb3J0IHR5cGVcbiIsIGJ1Zik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCW1seDRfc3RvcF9zZW5zZShtZGV2KTsKIAltdXRleF9sb2NrKCZwcml2LT5wb3J0X211dGV4KTsKLQlmb3IgKGkgPSAwOyBpIDwgbWRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKLQkJdHlwZXNbaV0gPSBwcml2LT5wb3J0W2krMV0udG1wX3R5cGUgPyBwcml2LT5wb3J0W2krMV0udG1wX3R5cGUgOgotCQkJCQltZGV2LT5jYXBzLnBvcnRfdHlwZVtpKzFdOworCS8qIFBvc3NpYmxlIHR5cGUgaXMgYWx3YXlzIHRoZSBvbmUgdGhhdCB3YXMgZGVsaXZlcmVkICovCisJbWRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2luZm8tPnBvcnRdID0gaW5mby0+dG1wX3R5cGU7CiAKLQllcnIgPSBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKG1kZXYsIHR5cGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgbWRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykgeworCQl0eXBlc1tpXSA9IHByaXYtPnBvcnRbaSsxXS50bXBfdHlwZSA/IHByaXYtPnBvcnRbaSsxXS50bXBfdHlwZSA6CisJCQkJCW1kZXYtPmNhcHMucG9zc2libGVfdHlwZVtpKzFdOworCQlpZiAodHlwZXNbaV0gPT0gTUxYNF9QT1JUX1RZUEVfQVVUTykKKwkJCXR5cGVzW2ldID0gbWRldi0+Y2Fwcy5wb3J0X3R5cGVbaSsxXTsKKwl9CisKKwlpZiAoIShtZGV2LT5jYXBzLmZsYWdzICYgTUxYNF9ERVZfQ0FQX0ZMQUdfRFBEUCkpIHsKKwkJZm9yIChpID0gMTsgaSA8PSBtZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKSB7CisJCQlpZiAobWRldi0+Y2Fwcy5wb3NzaWJsZV90eXBlW2ldID09IE1MWDRfUE9SVF9UWVBFX0FVVE8pIHsKKwkJCQltZGV2LT5jYXBzLnBvc3NpYmxlX3R5cGVbaV0gPSBtZGV2LT5jYXBzLnBvcnRfdHlwZVtpXTsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJfQorCQl9CisJfQorCWlmIChlcnIpIHsKKwkJbWx4NF9lcnIobWRldiwgIkF1dG8gc2Vuc2luZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgSENBLiAiCisJCQkgICAgICAgIlNldCBvbmx5ICdldGgnIG9yICdpYicgZm9yIGJvdGggcG9ydHMgIgorCQkJICAgICAgICIoc2hvdWxkIGJlIHRoZSBzYW1lKVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCW1seDRfZG9fc2Vuc2VfcG9ydHMobWRldiwgbmV3X3R5cGVzLCB0eXBlcyk7CisKKwllcnIgPSBtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKG1kZXYsIG5ld190eXBlcyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlmb3IgKGkgPSAxOyBpIDw9IG1kZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspCi0JCXByaXYtPnBvcnRbaV0udG1wX3R5cGUgPSAwOworCS8qIFdlIGFyZSBhYm91dCB0byBhcHBseSB0aGUgY2hhbmdlcyBhZnRlciB0aGUgY29uZmlndXJhdGlvbgorCSAqIHdhcyB2ZXJpZmllZCwgbm8gbmVlZCB0byByZW1lbWJlciB0aGUgdGVtcG9yYXJ5IHR5cGVzCisJICogYW55IG1vcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWRldi0+Y2Fwcy5udW1fcG9ydHM7IGkrKykKKwkJcHJpdi0+cG9ydFtpICsgMV0udG1wX3R5cGUgPSAwOwogCi0JZXJyID0gbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhtZGV2LCB0eXBlcyk7CisJZXJyID0gbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhtZGV2LCBuZXdfdHlwZXMpOwogCiBvdXQ6CisJbWx4NF9zdGFydF9zZW5zZShtZGV2KTsKIAltdXRleF91bmxvY2soJnByaXYtPnBvcnRfbXV0ZXgpOwogCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKIH0KQEAgLTExMTcsNiArMTE2MSw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfcG9ydDsKIAorCW1seDRfc2Vuc2VfaW5pdChkZXYpOworCW1seDRfc3RhcnRfc2Vuc2UoZGV2KTsKKwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTgyLDYgKzEyMjksNyBAQAogCWludCBwOwogCiAJaWYgKGRldikgeworCQltbHg0X3N0b3Bfc2Vuc2UoZGV2KTsKIAkJbWx4NF91bnJlZ2lzdGVyX2RldmljZShkZXYpOwogCiAJCWZvciAocCA9IDE7IHAgPD0gZGV2LT5jYXBzLm51bV9wb3J0czsgcCsrKSB7CkBAIC0xMjMwLDYgKzEyNzgsOCBAQAogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4NjczYykgfSwgLyogTVQyNTQwOCAiSGVybW9uIiBRRFIgUENJZSBnZW4yICovCiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzY4KSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIEVOIDEwR2lnRSAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc1MCkgfSwgLyogTVQyNTQwOCAiSGVybW9uIiBFTiAxMEdpZ0UgUENJZSBnZW4yICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzcyKSB9LCAvKiBNVDI1NDU4IENvbm5lY3RYIEVOIDEwR0JBU0UtVCAxMEdpZ0UgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NWEpIH0sIC8qIE1UMjU0NTggQ29ubmVjdFggRU4gMTBHQkFTRS1UK0dlbjIgMTBHaWdFICovCiAJeyAwLCB9CiB9OwogCkBAIC0xMjY0LDkgKzEzMTQsMTEgQEAKIAlpZiAobWx4NF92ZXJpZnlfcGFyYW1zKCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gbWx4NF9jYXRhc19pbml0KCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwltbHg0X2NhdGFzX2luaXQoKTsKKworCW1seDRfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibWx4NCIpOworCWlmICghbWx4NF93cSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtbHg0X2RyaXZlcik7CiAJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwpAQCAtMTI3NSw3ICsxMzI3LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBtbHg0X2NsZWFudXAodm9pZCkKIHsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm1seDRfZHJpdmVyKTsKLQltbHg0X2NhdGFzX2NsZWFudXAoKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShtbHg0X3dxKTsKIH0KIAogbW9kdWxlX2luaXQobWx4NF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oIGIvZHJpdmVycy9uZXQvbWx4NC9tbHg0LmgKaW5kZXggZTAyMTNiYWQuLjViZDc5YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCisrKyBiL2RyaXZlcnMvbmV0L21seDQvbWx4NC5oCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9yYWRpeC10cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21seDQvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWx4NC9kcml2ZXIuaD4KQEAgLTI3Niw2ICsyNzcsMTMgQEAKIAlzdHJ1Y3QgbWx4NF92bGFuX3RhYmxlCXZsYW5fdGFibGU7CiB9OwogCitzdHJ1Y3QgbWx4NF9zZW5zZSB7CisJc3RydWN0IG1seDRfZGV2CQkqZGV2OworCXU4CQkJZG9fc2Vuc2VfcG9ydFtNTFg0X01BWF9QT1JUUyArIDFdOworCXU4CQkJc2Vuc2VfYWxsb3dlZFtNTFg0X01BWF9QT1JUUyArIDFdOworCXN0cnVjdCBkZWxheWVkX3dvcmsJc2Vuc2VfcG9sbDsKK307CisKIHN0cnVjdCBtbHg0X3ByaXYgewogCXN0cnVjdCBtbHg0X2RldgkJZGV2OwogCkBAIC0zMDUsNiArMzEzLDcgQEAKIAlzdHJ1Y3QgbWx4NF91YXIJCWRyaXZlcl91YXI7CiAJdm9pZCBfX2lvbWVtCSAgICAgICAqa2FyOwogCXN0cnVjdCBtbHg0X3BvcnRfaW5mbwlwb3J0W01MWDRfTUFYX1BPUlRTICsgMV07CisJc3RydWN0IG1seDRfc2Vuc2UgICAgICAgc2Vuc2U7CiAJc3RydWN0IG11dGV4CQlwb3J0X211dGV4OwogfTsKIApAQCAtMzEzLDYgKzMyMiwxMCBAQAogCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbWx4NF9wcml2LCBkZXYpOwogfQogCisjZGVmaW5lIE1MWDRfU0VOU0VfUkFOR0UJKEhaICogMykKKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptbHg0X3dxOworCiB1MzIgbWx4NF9iaXRtYXBfYWxsb2Moc3RydWN0IG1seDRfYml0bWFwICpiaXRtYXApOwogdm9pZCBtbHg0X2JpdG1hcF9mcmVlKHN0cnVjdCBtbHg0X2JpdG1hcCAqYml0bWFwLCB1MzIgb2JqKTsKIHUzMiBtbHg0X2JpdG1hcF9hbGxvY19yYW5nZShzdHJ1Y3QgbWx4NF9iaXRtYXAgKmJpdG1hcCwgaW50IGNudCwgaW50IGFsaWduKTsKQEAgLTM0Niw4ICszNTksNyBAQAogCiB2b2lkIG1seDRfc3RhcnRfY2F0YXNfcG9sbChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CiB2b2lkIG1seDRfc3RvcF9jYXRhc19wb2xsKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKLWludCBtbHg0X2NhdGFzX2luaXQodm9pZCk7Ci12b2lkIG1seDRfY2F0YXNfY2xlYW51cCh2b2lkKTsKK3ZvaWQgbWx4NF9jYXRhc19pbml0KHZvaWQpOwogaW50IG1seDRfcmVzdGFydF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogaW50IG1seDRfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIHZvaWQgbWx4NF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CkBAIC0zNzksNiArMzkxLDE3IEBACiAKIHZvaWQgbWx4NF9oYW5kbGVfY2F0YXNfZXJyKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIAordm9pZCBtbHg0X2RvX3NlbnNlX3BvcnRzKHN0cnVjdCBtbHg0X2RldiAqZGV2LAorCQkJIGVudW0gbWx4NF9wb3J0X3R5cGUgKnN0eXBlLAorCQkJIGVudW0gbWx4NF9wb3J0X3R5cGUgKmRlZmF1bHRzKTsKK3ZvaWQgbWx4NF9zdGFydF9zZW5zZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfc3RvcF9zZW5zZShzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfc2Vuc2VfaW5pdChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CitpbnQgbWx4NF9jaGVja19wb3J0X3BhcmFtcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZSk7CitpbnQgbWx4NF9jaGFuZ2VfcG9ydF90eXBlcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCSAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnBvcnRfdHlwZXMpOworCiB2b2lkIG1seDRfaW5pdF9tYWNfdGFibGUoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X21hY190YWJsZSAqdGFibGUpOwogdm9pZCBtbHg0X2luaXRfdmxhbl90YWJsZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfdmxhbl90YWJsZSAqdGFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L3BvcnQuYyBiL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCmluZGV4IDBhMDU3ZTUuLjdjY2UzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvcG9ydC5jCkBAIC0yOTgsMjAgKzI5OCwxNyBAQAogewogCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OwogCWludCBlcnI7Ci0JdTggaXNfZXRoID0gZGV2LT5jYXBzLnBvcnRfdHlwZVtwb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9FVEg7CiAKIAltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOwogCWlmIChJU19FUlIobWFpbGJveCkpCiAJCXJldHVybiBQVFJfRVJSKG1haWxib3gpOwogCiAJbWVtc2V0KG1haWxib3gtPmJ1ZiwgMCwgMjU2KTsKLQlpZiAoaXNfZXRoKSB7Ci0JCSgodTggKikgbWFpbGJveC0+YnVmKVszXSA9IDY7Ci0JCSgoX19iZTE2ICopIG1haWxib3gtPmJ1ZilbNF0gPSBjcHVfdG9fYmUxNigxIDw8IDE1KTsKLQkJKChfX2JlMTYgKikgbWFpbGJveC0+YnVmKVs2XSA9IGNwdV90b19iZTE2KDEgPDwgMTUpOwotCX0gZWxzZQotCQkoKF9fYmUzMiAqKSBtYWlsYm94LT5idWYpWzFdID0gZGV2LT5jYXBzLmliX3BvcnRfZGVmX2NhcFtwb3J0XTsKLQllcnIgPSBtbHg0X2NtZChkZXYsIG1haWxib3gtPmRtYSwgcG9ydCwgaXNfZXRoLCBNTFg0X0NNRF9TRVRfUE9SVCwKKwlpZiAoZGV2LT5jYXBzLnBvcnRfdHlwZVtwb3J0XSA9PSBNTFg0X1BPUlRfVFlQRV9FVEgpCisJCXJldHVybiAwOworCisJKChfX2JlMzIgKikgbWFpbGJveC0+YnVmKVsxXSA9IGRldi0+Y2Fwcy5pYl9wb3J0X2RlZl9jYXBbcG9ydF07CisJZXJyID0gbWx4NF9jbWQoZGV2LCBtYWlsYm94LT5kbWEsIHBvcnQsIDAsIE1MWDRfQ01EX1NFVF9QT1JULAogCQkgICAgICAgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKIAogCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9zZW5zZS5jIGIvZHJpdmVycy9uZXQvbWx4NC9zZW5zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNTA4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9tbHg0L3NlbnNlLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbHg0L2NtZC5oPgorCisjaW5jbHVkZSAibWx4NC5oIgorCitzdGF0aWMgaW50IG1seDRfU0VOU0VfUE9SVChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHBvcnQsCisJCQkgICBlbnVtIG1seDRfcG9ydF90eXBlICp0eXBlKQoreworCXU2NCBvdXRfcGFyYW07CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBtbHg0X2NtZF9pbW0oZGV2LCAwLCAmb3V0X3BhcmFtLCBwb3J0LCAwLAorCQkJICAgTUxYNF9DTURfU0VOU0VfUE9SVCwgTUxYNF9DTURfVElNRV9DTEFTU19CKTsKKwlpZiAoZXJyKSB7CisJCW1seDRfZXJyKGRldiwgIlNlbnNlIGNvbW1hbmQgZmFpbGVkIGZvciBwb3J0OiAlZFxuIiwgcG9ydCk7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKG91dF9wYXJhbSA+IDIpIHsKKwkJbWx4NF9lcnIoZGV2LCAiU2Vuc2UgcmV0dXJuZWQgaWxsZWdhbCB2YWx1ZTogMHglbGx4XG4iLCBvdXRfcGFyYW0pOworCQlyZXR1cm4gRUlOVkFMOworCX0KKworCSp0eXBlID0gb3V0X3BhcmFtOworCXJldHVybiAwOworfQorCit2b2lkIG1seDRfZG9fc2Vuc2VfcG9ydHMoc3RydWN0IG1seDRfZGV2ICpkZXYsCisJCQkgZW51bSBtbHg0X3BvcnRfdHlwZSAqc3R5cGUsCisJCQkgZW51bSBtbHg0X3BvcnRfdHlwZSAqZGVmYXVsdHMpCit7CisJc3RydWN0IG1seDRfc2Vuc2UgKnNlbnNlID0gJm1seDRfcHJpdihkZXYpLT5zZW5zZTsKKwlpbnQgZXJyOworCWludCBpOworCisJZm9yIChpID0gMTsgaSA8PSBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspIHsKKwkJc3R5cGVbaSAtIDFdID0gMDsKKwkJaWYgKHNlbnNlLT5kb19zZW5zZV9wb3J0W2ldICYmIHNlbnNlLT5zZW5zZV9hbGxvd2VkW2ldICYmCisJCSAgICBkZXYtPmNhcHMucG9zc2libGVfdHlwZVtpXSA9PSBNTFg0X1BPUlRfVFlQRV9BVVRPKSB7CisJCQllcnIgPSBtbHg0X1NFTlNFX1BPUlQoZGV2LCBpLCAmc3R5cGVbaSAtIDFdKTsKKwkJCWlmIChlcnIpCisJCQkJc3R5cGVbaSAtIDFdID0gZGVmYXVsdHNbaSAtIDFdOworCQl9IGVsc2UKKwkJCXN0eXBlW2kgLSAxXSA9IGRlZmF1bHRzW2kgLSAxXTsKKwl9CisKKwkvKgorCSAqIEFkanVzdCBwb3J0IGNvbmZpZ3VyYXRpb246CisJICogSWYgcG9ydCAxIHNlbnNlZCBub3RoaW5nIGFuZCBwb3J0IDIgaXMgSUIsIHNldCBib3RoIGFzIElCCisJICogSWYgcG9ydCAyIHNlbnNlZCBub3RoaW5nIGFuZCBwb3J0IDEgaXMgRXRoLCBzZXQgYm90aCBhcyBFdGgKKwkgKi8KKwlpZiAoc3R5cGVbMF0gPT0gTUxYNF9QT1JUX1RZUEVfRVRIKSB7CisJCWZvciAoaSA9IDE7IGkgPCBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspCisJCQlzdHlwZVtpXSA9IHN0eXBlW2ldID8gc3R5cGVbaV0gOiBNTFg0X1BPUlRfVFlQRV9FVEg7CisJfQorCWlmIChzdHlwZVtkZXYtPmNhcHMubnVtX3BvcnRzIC0gMV0gPT0gTUxYNF9QT1JUX1RZUEVfSUIpIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+Y2Fwcy5udW1fcG9ydHMgLSAxOyBpKyspCisJCQlzdHlwZVtpXSA9IHN0eXBlW2ldID8gc3R5cGVbaV0gOiBNTFg0X1BPUlRfVFlQRV9JQjsKKwl9CisKKwkvKgorCSAqIElmIHNlbnNlZCBub3RoaW5nLCByZW1haW4gaW4gY3VycmVudCBjb25maWd1cmF0aW9uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspCisJCXN0eXBlW2ldID0gc3R5cGVbaV0gPyBzdHlwZVtpXSA6IGRlZmF1bHRzW2ldOworCit9CisKK3N0YXRpYyB2b2lkIG1seDRfc2Vuc2VfcG9ydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXkgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CisJc3RydWN0IG1seDRfc2Vuc2UgKnNlbnNlID0gY29udGFpbmVyX29mKGRlbGF5LCBzdHJ1Y3QgbWx4NF9zZW5zZSwKKwkJCQkJCXNlbnNlX3BvbGwpOworCXN0cnVjdCBtbHg0X2RldiAqZGV2ID0gc2Vuc2UtPmRldjsKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJZW51bSBtbHg0X3BvcnRfdHlwZSBzdHlwZVtNTFg0X01BWF9QT1JUU107CisKKwltdXRleF9sb2NrKCZwcml2LT5wb3J0X211dGV4KTsKKwltbHg0X2RvX3NlbnNlX3BvcnRzKGRldiwgc3R5cGUsICZkZXYtPmNhcHMucG9ydF90eXBlWzFdKTsKKworCWlmIChtbHg0X2NoZWNrX3BvcnRfcGFyYW1zKGRldiwgc3R5cGUpKQorCQlnb3RvIHNlbnNlX2FnYWluOworCisJaWYgKG1seDRfY2hhbmdlX3BvcnRfdHlwZXMoZGV2LCBzdHlwZSkpCisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBjaGFuZ2UgcG9ydF90eXBlc1xuIik7CisKK3NlbnNlX2FnYWluOgorCW11dGV4X3VubG9jaygmcHJpdi0+cG9ydF9tdXRleCk7CisJcXVldWVfZGVsYXllZF93b3JrKG1seDRfd3EgLCAmc2Vuc2UtPnNlbnNlX3BvbGwsCisJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKE1MWDRfU0VOU0VfUkFOR0UpKTsKK30KKwordm9pZCBtbHg0X3N0YXJ0X3NlbnNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWx4NF9zZW5zZSAqc2Vuc2UgPSAmcHJpdi0+c2Vuc2U7CisKKwlpZiAoIShkZXYtPmNhcHMuZmxhZ3MgJiBNTFg0X0RFVl9DQVBfRkxBR19EUERQKSkKKwkJcmV0dXJuOworCisJcXVldWVfZGVsYXllZF93b3JrKG1seDRfd3EgLCAmc2Vuc2UtPnNlbnNlX3BvbGwsCisJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKE1MWDRfU0VOU0VfUkFOR0UpKTsKK30KKwordm9pZCBtbHg0X3N0b3Bfc2Vuc2Uoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZtbHg0X3ByaXYoZGV2KS0+c2Vuc2Uuc2Vuc2VfcG9sbCk7Cit9CisKK3ZvaWQgIG1seDRfc2Vuc2VfaW5pdChzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJc3RydWN0IG1seDRfc2Vuc2UgKnNlbnNlID0gJnByaXYtPnNlbnNlOworCWludCBwb3J0OworCisJc2Vuc2UtPmRldiA9IGRldjsKKwlmb3IgKHBvcnQgPSAxOyBwb3J0IDw9IGRldi0+Y2Fwcy5udW1fcG9ydHM7IHBvcnQrKykKKwkJc2Vuc2UtPmRvX3NlbnNlX3BvcnRbcG9ydF0gPSAxOworCisJSU5JVF9ERUxBWUVEX1dPUktfREVGRVJSQUJMRSgmc2Vuc2UtPnNlbnNlX3BvbGwsIG1seDRfc2Vuc2VfcG9ydCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwppbmRleCBiMGJjM2JjLi5hNTZkOWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogc3RhdGljIGNoYXIgbXY2NDN4eF9ldGhfZHJpdmVyX25hbWVbXSA9ICJtdjY0M3h4X2V0aCI7CkBAIC0yMjcsNiArMjI4LDEyIEBACiAjZGVmaW5lIFJYX0VOQUJMRV9JTlRFUlJVUFQJCTB4MjAwMDAwMDAKICNkZWZpbmUgUlhfRklSU1RfREVTQwkJCTB4MDgwMDAwMDAKICNkZWZpbmUgUlhfTEFTVF9ERVNDCQkJMHgwNDAwMDAwMAorI2RlZmluZSBSWF9JUF9IRFJfT0sJCQkweDAyMDAwMDAwCisjZGVmaW5lIFJYX1BLVF9JU19JUFY0CQkJMHgwMTAwMDAwMAorI2RlZmluZSBSWF9QS1RfSVNfRVRIRVJORVRWMgkJMHgwMDgwMDAwMAorI2RlZmluZSBSWF9QS1RfTEFZRVI0X1RZUEVfTUFTSwkJMHgwMDYwMDAwMAorI2RlZmluZSBSWF9QS1RfTEFZRVI0X1RZUEVfVENQX0lQVjQJMHgwMDAwMDAwMAorI2RlZmluZSBSWF9QS1RfSVNfVkxBTl9UQUdHRUQJCTB4MDAwODAwMDAKIAogLyogVFggZGVzY3JpcHRvciBjb21tYW5kICovCiAjZGVmaW5lIFRYX0VOQUJMRV9JTlRFUlJVUFQJCTB4MDA4MDAwMDAKQEAgLTI4Niw2ICsyOTMsOSBAQAogI2RlZmluZSBUWF9CV19DT05UUk9MX09MRF9MQVlPVVQJMQogI2RlZmluZSBUWF9CV19DT05UUk9MX05FV19MQVlPVVQJMgogCitzdGF0aWMgaW50IG12NjQzeHhfZXRoX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IG12NjQzeHhfZXRoX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIAogLyogcGVyLXBvcnQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgbWliX2NvdW50ZXJzIHsKQEAgLTMyMSw2ICszMzEsMTIgQEAKIAl1MzIgbGF0ZV9jb2xsaXNpb247CiB9OwogCitzdHJ1Y3QgbHJvX2NvdW50ZXJzIHsKKwl1MzIgbHJvX2FnZ3JlZ2F0ZWQ7CisJdTMyIGxyb19mbHVzaGVkOworCXUzMiBscm9fbm9fZGVzYzsKK307CisKIHN0cnVjdCByeF9xdWV1ZSB7CiAJaW50IGluZGV4OwogCkBAIC0zMzQsNiArMzUwLDkgQEAKIAlkbWFfYWRkcl90IHJ4X2Rlc2NfZG1hOwogCWludCByeF9kZXNjX2FyZWFfc2l6ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYjsKKworCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOworCXN0cnVjdCBuZXRfbHJvX2Rlc2MgbHJvX2Fycls4XTsKIH07CiAKIHN0cnVjdCB0eF9xdWV1ZSB7CkBAIC0zNjksNiArMzg4LDggQEAKIAlzcGlubG9ja190IG1pYl9jb3VudGVyc19sb2NrOwogCXN0cnVjdCBtaWJfY291bnRlcnMgbWliX2NvdW50ZXJzOwogCisJc3RydWN0IGxyb19jb3VudGVycyBscm9fY291bnRlcnM7CisKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfdGltZW91dF90YXNrOwogCiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CkBAIC0zODUsNyArNDA2LDcgQEAKIAkvKgogCSAqIFJYIHN0YXRlLgogCSAqLwotCWludCBkZWZhdWx0X3J4X3Jpbmdfc2l6ZTsKKwlpbnQgcnhfcmluZ19zaXplOwogCXVuc2lnbmVkIGxvbmcgcnhfZGVzY19zcmFtX2FkZHI7CiAJaW50IHJ4X2Rlc2Nfc3JhbV9zaXplOwogCWludCByeHFfY291bnQ7CkBAIC0zOTUsNyArNDE2LDcgQEAKIAkvKgogCSAqIFRYIHN0YXRlLgogCSAqLwotCWludCBkZWZhdWx0X3R4X3Jpbmdfc2l6ZTsKKwlpbnQgdHhfcmluZ19zaXplOwogCXVuc2lnbmVkIGxvbmcgdHhfZGVzY19zcmFtX2FkZHI7CiAJaW50IHR4X2Rlc2Nfc3JhbV9zaXplOwogCWludCB0eHFfY291bnQ7CkBAIC00OTMsMTIgKzUxNCw0MCBAQAogCiAKIC8qIHJ4IG5hcGkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorbXY2NDN4eF9nZXRfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICoqaXBoZHIsIHZvaWQgKip0Y3BoLAorCQkgICAgICAgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyBjbWRfc3RzID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKKworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgdGhpcyBwYWNrZXQgaXMgRXRoZXJuZXQgSUksIGlzIG5vdCBWTEFOCisJICogdGFnZ2VkLCBpcyBJUHY0LCBoYXMgYSB2YWxpZCBJUCBoZWFkZXIsIGFuZCBpcyBUQ1AuCisJICovCisJaWYgKChjbWRfc3RzICYgKFJYX0lQX0hEUl9PSyB8IFJYX1BLVF9JU19JUFY0IHwKKwkJICAgICAgIFJYX1BLVF9JU19FVEhFUk5FVFYyIHwgUlhfUEtUX0xBWUVSNF9UWVBFX01BU0sgfAorCQkgICAgICAgUlhfUEtUX0lTX1ZMQU5fVEFHR0VEKSkgIT0KKwkgICAgKFJYX0lQX0hEUl9PSyB8IFJYX1BLVF9JU19JUFY0IHwKKwkgICAgIFJYX1BLVF9JU19FVEhFUk5FVFYyIHwgUlhfUEtUX0xBWUVSNF9UWVBFX1RDUF9JUFY0KSkKKwkJcmV0dXJuIC0xOworCisJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgaXBfaGRybGVuKHNrYikpOworCSppcGhkciA9IGlwX2hkcihza2IpOworCSp0Y3BoID0gdGNwX2hkcihza2IpOworCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNCB8IExST19UQ1A7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCByeHFfcHJvY2VzcyhzdHJ1Y3QgcnhfcXVldWUgKnJ4cSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSByeHFfdG9fbXAocnhxKTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbXAtPmRldi0+c3RhdHM7CisJaW50IGxyb19mbHVzaF9uZWVkZWQ7CiAJaW50IHJ4OwogCisJbHJvX2ZsdXNoX25lZWRlZCA9IDA7CiAJcnggPSAwOwogCXdoaWxlIChyeCA8IGJ1ZGdldCAmJiByeHEtPnJ4X2Rlc2NfY291bnQpIHsKIAkJc3RydWN0IHJ4X2Rlc2MgKnJ4X2Rlc2M7CkBAIC01NTgsNyArNjA3LDEzIEBACiAJCWlmIChjbWRfc3RzICYgTEFZRVJfNF9DSEVDS1NVTV9PSykKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG1wLT5kZXYpOwotCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJCWlmIChza2ItPmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTyAmJgorCQkgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKKwkJCWxyb19yZWNlaXZlX3NrYigmcnhxLT5scm9fbWdyLCBza2IsICh2b2lkICopY21kX3N0cyk7CisJCQlscm9fZmx1c2hfbmVlZGVkID0gMTsKKwkJfSBlbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCiAJCWNvbnRpbnVlOwogCkBAIC01NzksNiArNjM0LDkgQEAKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KIAorCWlmIChscm9fZmx1c2hfbmVlZGVkKQorCQlscm9fZmx1c2hfYWxsKCZyeHEtPmxyb19tZ3IpOworCiAJaWYgKHJ4IDwgYnVkZ2V0KQogCQltcC0+d29ya19yeCAmPSB+KDEgPDwgcnhxLT5pbmRleCk7CiAKQEAgLTkwNyw3ICs5NjUsNyBAQAogCiAJCWlmIChza2IgIT0gTlVMTCkgewogCQkJaWYgKHNrYl9xdWV1ZV9sZW4oJm1wLT5yeF9yZWN5Y2xlKSA8Ci0JCQkJCW1wLT5kZWZhdWx0X3J4X3Jpbmdfc2l6ZSAmJgorCQkJCQltcC0+cnhfcmluZ19zaXplICYmCiAJCQkgICAgc2tiX3JlY3ljbGVfY2hlY2soc2tiLCBtcC0+c2tiX3NpemUgKwogCQkJCQlkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpIC0gMSkpCiAJCQkJX19za2JfcXVldWVfaGVhZCgmbXAtPnJ4X3JlY3ljbGUsIHNrYik7CkBAIC0xMTU4LDYgKzEyMTYsMjYgQEAKIAlyZXR1cm4gc3RhdHM7CiB9CiAKK3N0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2dyYWJfbHJvX3N0YXRzKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCkKK3sKKwl1MzIgbHJvX2FnZ3JlZ2F0ZWQgPSAwOworCXUzMiBscm9fZmx1c2hlZCA9IDA7CisJdTMyIGxyb19ub19kZXNjID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtcC0+cnhxX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IHJ4X3F1ZXVlICpyeHEgPSBtcC0+cnhxICsgaTsKKworCQlscm9fYWdncmVnYXRlZCArPSByeHEtPmxyb19tZ3Iuc3RhdHMuYWdncmVnYXRlZDsKKwkJbHJvX2ZsdXNoZWQgKz0gcnhxLT5scm9fbWdyLnN0YXRzLmZsdXNoZWQ7CisJCWxyb19ub19kZXNjICs9IHJ4cS0+bHJvX21nci5zdGF0cy5ub19kZXNjOworCX0KKworCW1wLT5scm9fY291bnRlcnMubHJvX2FnZ3JlZ2F0ZWQgPSBscm9fYWdncmVnYXRlZDsKKwltcC0+bHJvX2NvdW50ZXJzLmxyb19mbHVzaGVkID0gbHJvX2ZsdXNoZWQ7CisJbXAtPmxyb19jb3VudGVycy5scm9fbm9fZGVzYyA9IGxyb19ub19kZXNjOworfQorCiBzdGF0aWMgaW5saW5lIHUzMiBtaWJfcmVhZChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIGludCBvZmZzZXQpCiB7CiAJcmV0dXJuIHJkbChtcCwgTUlCX0NPVU5URVJTKG1wLT5wb3J0X251bSkgKyBvZmZzZXQpOwpAQCAtMTIyMSw2ICsxMjk5LDg1IEBACiB9CiAKIAorLyogaW50ZXJydXB0IGNvYWxlc2NpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSGFyZHdhcmUgY29hbGVzY2luZyBwYXJhbWV0ZXJzIGFyZSBzZXQgaW4gdW5pdHMgb2YgNjQgdF9jbGsKKyAqIGN5Y2xlcy4gIEkuZS46CisgKgorICoJY29hbF9kZWxheV9pbl91c2VjID0gNjQwMDAwMDAgKiByZWdpc3Rlcl92YWx1ZSAvIHRfY2xrX3JhdGUKKyAqCisgKglyZWdpc3Rlcl92YWx1ZSA9IGNvYWxfZGVsYXlfaW5fdXNlYyAqIHRfY2xrX3JhdGUgLyA2NDAwMDAwMAorICoKKyAqIEluIHRoZSAtPnNldCooKSBtZXRob2RzLCB3ZSByb3VuZCB0aGUgY29tcHV0ZWQgcmVnaXN0ZXIgdmFsdWUKKyAqIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3J4X2NvYWwoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wKQoreworCXUzMiB2YWwgPSByZGxwKG1wLCBTRE1BX0NPTkZJRyk7CisJdTY0IHRlbXA7CisKKwlpZiAobXAtPnNoYXJlZC0+ZXh0ZW5kZWRfcnhfY29hbF9saW1pdCkKKwkJdGVtcCA9ICgodmFsICYgMHgwMjAwMDAwMCkgPj4gMTApIHwgKCh2YWwgJiAweDAwM2ZmZjgwKSA+PiA3KTsKKwllbHNlCisJCXRlbXAgPSAodmFsICYgMHgwMDNmZmYwMCkgPj4gODsKKworCXRlbXAgKj0gNjQwMDAwMDA7CisJZG9fZGl2KHRlbXAsIG1wLT5zaGFyZWQtPnRfY2xrKTsKKworCXJldHVybiAodW5zaWduZWQgaW50KXRlbXA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9yeF9jb2FsKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgdW5zaWduZWQgaW50IHVzZWMpCit7CisJdTY0IHRlbXA7CisJdTMyIHZhbDsKKworCXRlbXAgPSAodTY0KXVzZWMgKiBtcC0+c2hhcmVkLT50X2NsazsKKwl0ZW1wICs9IDMxOTk5OTk5OworCWRvX2Rpdih0ZW1wLCA2NDAwMDAwMCk7CisKKwl2YWwgPSByZGxwKG1wLCBTRE1BX0NPTkZJRyk7CisJaWYgKG1wLT5zaGFyZWQtPmV4dGVuZGVkX3J4X2NvYWxfbGltaXQpIHsKKwkJaWYgKHRlbXAgPiAweGZmZmYpCisJCQl0ZW1wID0gMHhmZmZmOworCQl2YWwgJj0gfjB4MDIzZmZmODA7CisJCXZhbCB8PSAodGVtcCAmIDB4ODAwMCkgPDwgMTA7CisJCXZhbCB8PSAodGVtcCAmIDB4N2ZmZikgPDwgNzsKKwl9IGVsc2UgeworCQlpZiAodGVtcCA+IDB4M2ZmZikKKwkJCXRlbXAgPSAweDNmZmY7CisJCXZhbCAmPSB+MHgwMDNmZmYwMDsKKwkJdmFsIHw9ICh0ZW1wICYgMHgzZmZmKSA8PCA4OworCX0KKwl3cmxwKG1wLCBTRE1BX0NPTkZJRywgdmFsKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBnZXRfdHhfY29hbChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXApCit7CisJdTY0IHRlbXA7CisKKwl0ZW1wID0gKHJkbHAobXAsIFRYX0ZJRk9fVVJHRU5UX1RIUkVTSE9MRCkgJiAweDNmZmYwKSA+PiA0OworCXRlbXAgKj0gNjQwMDAwMDA7CisJZG9fZGl2KHRlbXAsIG1wLT5zaGFyZWQtPnRfY2xrKTsKKworCXJldHVybiAodW5zaWduZWQgaW50KXRlbXA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF90eF9jb2FsKHN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCwgdW5zaWduZWQgaW50IHVzZWMpCit7CisJdTY0IHRlbXA7CisKKwl0ZW1wID0gKHU2NCl1c2VjICogbXAtPnNoYXJlZC0+dF9jbGs7CisJdGVtcCArPSAzMTk5OTk5OTsKKwlkb19kaXYodGVtcCwgNjQwMDAwMDApOworCisJaWYgKHRlbXAgPiAweDNmZmYpCisJCXRlbXAgPSAweDNmZmY7CisKKwl3cmxwKG1wLCBUWF9GSUZPX1VSR0VOVF9USFJFU0hPTEQsIHRlbXAgPDwgNCk7Cit9CisKKwogLyogZXRodG9vbCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgbXY2NDN4eF9ldGhfc3RhdHMgewogCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKQEAgLTEyMzcsNiArMTM5NCwxMCBAQAogCXsgI20sIEZJRUxEX1NJWkVPRihzdHJ1Y3QgbWliX2NvdW50ZXJzLCBtKSwJCVwKIAkgIC0xLCBvZmZzZXRvZihzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSwgbWliX2NvdW50ZXJzLm0pIH0KIAorI2RlZmluZSBMUk9TVEFUKG0pCQkJCQkJXAorCXsgI20sIEZJRUxEX1NJWkVPRihzdHJ1Y3QgbHJvX2NvdW50ZXJzLCBtKSwJCVwKKwkgIC0xLCBvZmZzZXRvZihzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSwgbHJvX2NvdW50ZXJzLm0pIH0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBtdjY0M3h4X2V0aF9zdGF0cyBtdjY0M3h4X2V0aF9zdGF0c1tdID0gewogCVNTVEFUKHJ4X3BhY2tldHMpLAogCVNTVEFUKHR4X3BhY2tldHMpLApAQCAtMTI3NiwxMiArMTQzNywxNSBAQAogCU1JQlNUQVQoYmFkX2NyY19ldmVudCksCiAJTUlCU1RBVChjb2xsaXNpb24pLAogCU1JQlNUQVQobGF0ZV9jb2xsaXNpb24pLAorCUxST1NUQVQobHJvX2FnZ3JlZ2F0ZWQpLAorCUxST1NUQVQobHJvX2ZsdXNoZWQpLAorCUxST1NUQVQobHJvX25vX2Rlc2MpLAogfTsKIAogc3RhdGljIGludAotbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQorbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzX3BoeShzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGVycjsKIAogCWVyciA9IHBoeV9yZWFkX3N0YXR1cyhtcC0+cGh5KTsKQEAgLTEyOTgsMTAgKzE0NjIsOSBAQAogfQogCiBzdGF0aWMgaW50Ci1tdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3NfcGh5bGVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorbXY2NDN4eF9ldGhfZ2V0X3NldHRpbmdzX3BoeWxlc3Moc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLAogCQkJCSBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKLQlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBwb3J0X3N0YXR1czsKIAogCXBvcnRfc3RhdHVzID0gcmRscChtcCwgUE9SVF9TVEFUVVMpOwpAQCAtMTMzNCwxMCArMTQ5NywyNCBAQAogfQogCiBzdGF0aWMgaW50CittdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChtcC0+cGh5ICE9IE5VTEwpCisJCXJldHVybiBtdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3NfcGh5KG1wLCBjbWQpOworCWVsc2UKKwkJcmV0dXJuIG12NjQzeHhfZXRoX2dldF9zZXR0aW5nc19waHlsZXNzKG1wLCBjbWQpOworfQorCitzdGF0aWMgaW50CiBtdjY0M3h4X2V0aF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCWlmIChtcC0+cGh5ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCiAJLyoKIAkgKiBUaGUgTUFDIGRvZXMgbm90IHN1cHBvcnQgMTAwMGJhc2VUX0hhbGYuCiAJICovCkBAIC0xMzQ2LDEzICsxNTIzLDYgQEAKIAlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldChtcC0+cGh5LCBjbWQpOwogfQogCi1zdGF0aWMgaW50Ci1tdjY0M3h4X2V0aF9zZXRfc2V0dGluZ3NfcGh5bGVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKLXsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQogc3RhdGljIHZvaWQgbXY2NDN4eF9ldGhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqZHJ2aW5mbykKIHsKQEAgLTEzNjcsMTIgKzE1MzcsMTAgQEAKIHsKIAlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcobXAtPnBoeSk7Ci19CisJaWYgKG1wLT5waHkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLXN0YXRpYyBpbnQgbXY2NDN4eF9ldGhfbndheV9yZXNldF9waHlsZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGdlbnBoeV9yZXN0YXJ0X2FuZWcobXAtPnBoeSk7CiB9CiAKIHN0YXRpYyB1MzIgbXY2NDN4eF9ldGhfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTEzODAsNiArMTU0OCw4NiBAQAogCXJldHVybiAhIW5ldGlmX2NhcnJpZXJfb2soZGV2KTsKIH0KIAorc3RhdGljIGludAorbXY2NDN4eF9ldGhfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplYykKK3sKKwlzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZWMtPnJ4X2NvYWxlc2NlX3VzZWNzID0gZ2V0X3J4X2NvYWwobXApOworCWVjLT50eF9jb2FsZXNjZV91c2VjcyA9IGdldF90eF9jb2FsKG1wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CittdjY0M3h4X2V0aF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlzZXRfcnhfY29hbChtcCwgZWMtPnJ4X2NvYWxlc2NlX3VzZWNzKTsKKwlzZXRfdHhfY29hbChtcCwgZWMtPnR4X2NvYWxlc2NlX3VzZWNzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorbXY2NDN4eF9ldGhfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwllci0+cnhfbWF4X3BlbmRpbmcgPSA0MDk2OworCWVyLT50eF9tYXhfcGVuZGluZyA9IDQwOTY7CisJZXItPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOworCWVyLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7CisKKwllci0+cnhfcGVuZGluZyA9IG1wLT5yeF9yaW5nX3NpemU7CisJZXItPnR4X3BlbmRpbmcgPSBtcC0+dHhfcmluZ19zaXplOworCWVyLT5yeF9taW5pX3BlbmRpbmcgPSAwOworCWVyLT5yeF9qdW1ib19wZW5kaW5nID0gMDsKK30KKworc3RhdGljIGludAorbXY2NDN4eF9ldGhfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyKQoreworCXN0cnVjdCBtdjY0M3h4X2V0aF9wcml2YXRlICptcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAoZXItPnJ4X21pbmlfcGVuZGluZyB8fCBlci0+cnhfanVtYm9fcGVuZGluZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltcC0+cnhfcmluZ19zaXplID0gZXItPnJ4X3BlbmRpbmcgPCA0MDk2ID8gZXItPnJ4X3BlbmRpbmcgOiA0MDk2OworCW1wLT50eF9yaW5nX3NpemUgPSBlci0+dHhfcGVuZGluZyA8IDQwOTYgPyBlci0+dHhfcGVuZGluZyA6IDQwOTY7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW12NjQzeHhfZXRoX3N0b3AoZGV2KTsKKwkJaWYgKG12NjQzeHhfZXRoX29wZW4oZGV2KSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmRldi0+ZGV2LAorCQkJCSAgICJmYXRhbCBlcnJvciBvbiByZS1vcGVuaW5nIGRldmljZSBhZnRlciAiCisJCQkJICAgInJpbmcgcGFyYW0gY2hhbmdlXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIKK212NjQzeHhfZXRoX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiAhIShyZGxwKG1wLCBQT1JUX0NPTkZJRykgJiAweDAyMDAwMDAwKTsKK30KKworc3RhdGljIGludAorbXY2NDN4eF9ldGhfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHJ4X2NzdW0pCit7CisJc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXdybHAobXAsIFBPUlRfQ09ORklHLCByeF9jc3VtID8gMHgwMjAwMDAwMCA6IDB4MDAwMDAwMDApOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIG12NjQzeHhfZXRoX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgIHVpbnQzMl90IHN0cmluZ3NldCwgdWludDhfdCAqZGF0YSkKIHsKQEAgLTE0MDMsNiArMTY1MSw3IEBACiAKIAltdjY0M3h4X2V0aF9nZXRfc3RhdHMoZGV2KTsKIAltaWJfY291bnRlcnNfdXBkYXRlKG1wKTsKKwltdjY0M3h4X2V0aF9ncmFiX2xyb19zdGF0cyhtcCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdjY0M3h4X2V0aF9zdGF0cyk7IGkrKykgewogCQljb25zdCBzdHJ1Y3QgbXY2NDN4eF9ldGhfc3RhdHMgKnN0YXQ7CkBAIC0xNDM0LDIxICsxNjgzLDE4IEBACiAJLmdldF9kcnZpbmZvCQk9IG12NjQzeHhfZXRoX2dldF9kcnZpbmZvLAogCS5ud2F5X3Jlc2V0CQk9IG12NjQzeHhfZXRoX253YXlfcmVzZXQsCiAJLmdldF9saW5rCQk9IG12NjQzeHhfZXRoX2dldF9saW5rLAorCS5nZXRfY29hbGVzY2UJCT0gbXY2NDN4eF9ldGhfZ2V0X2NvYWxlc2NlLAorCS5zZXRfY29hbGVzY2UJCT0gbXY2NDN4eF9ldGhfc2V0X2NvYWxlc2NlLAorCS5nZXRfcmluZ3BhcmFtCQk9IG12NjQzeHhfZXRoX2dldF9yaW5ncGFyYW0sCisJLnNldF9yaW5ncGFyYW0JCT0gbXY2NDN4eF9ldGhfc2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3J4X2NzdW0JCT0gbXY2NDN4eF9ldGhfZ2V0X3J4X2NzdW0sCisJLnNldF9yeF9jc3VtCQk9IG12NjQzeHhfZXRoX3NldF9yeF9jc3VtLAorCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9jc3VtLAogCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfc3RyaW5ncwkJPSBtdjY0M3h4X2V0aF9nZXRfc3RyaW5ncywKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBtdjY0M3h4X2V0aF9nZXRfZXRodG9vbF9zdGF0cywKLQkuZ2V0X3NzZXRfY291bnQJCT0gbXY2NDN4eF9ldGhfZ2V0X3NzZXRfY291bnQsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG12NjQzeHhfZXRoX2V0aHRvb2xfb3BzX3BoeWxlc3MgPSB7Ci0JLmdldF9zZXR0aW5ncwkJPSBtdjY0M3h4X2V0aF9nZXRfc2V0dGluZ3NfcGh5bGVzcywKLQkuc2V0X3NldHRpbmdzCQk9IG12NjQzeHhfZXRoX3NldF9zZXR0aW5nc19waHlsZXNzLAotCS5nZXRfZHJ2aW5mbwkJPSBtdjY0M3h4X2V0aF9nZXRfZHJ2aW5mbywKLQkubndheV9yZXNldAkJPSBtdjY0M3h4X2V0aF9ud2F5X3Jlc2V0X3BoeWxlc3MsCi0JLmdldF9saW5rCQk9IG12NjQzeHhfZXRoX2dldF9saW5rLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAotCS5nZXRfc3RyaW5ncwkJPSBtdjY0M3h4X2V0aF9nZXRfc3RyaW5ncywKLQkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBtdjY0M3h4X2V0aF9nZXRfZXRodG9vbF9zdGF0cywKKwkuZ2V0X2ZsYWdzCQk9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAorCS5zZXRfZmxhZ3MJCT0gZXRodG9vbF9vcF9zZXRfZmxhZ3MsCiAJLmdldF9zc2V0X2NvdW50CQk9IG12NjQzeHhfZXRoX2dldF9zc2V0X2NvdW50LAogfTsKIApAQCAtMTYzNyw3ICsxODgzLDcgQEAKIAogCXJ4cS0+aW5kZXggPSBpbmRleDsKIAotCXJ4cS0+cnhfcmluZ19zaXplID0gbXAtPmRlZmF1bHRfcnhfcmluZ19zaXplOworCXJ4cS0+cnhfcmluZ19zaXplID0gbXAtPnJ4X3Jpbmdfc2l6ZTsKIAogCXJ4cS0+cnhfZGVzY19jb3VudCA9IDA7CiAJcnhxLT5yeF9jdXJyX2Rlc2MgPSAwOwpAQCAtMTY4Myw2ICsxOTI5LDE5IEBACiAJCQkJCW5leHRpICogc2l6ZW9mKHN0cnVjdCByeF9kZXNjKTsKIAl9CiAKKwlyeHEtPmxyb19tZ3IuZGV2ID0gbXAtPmRldjsKKwltZW1zZXQoJnJ4cS0+bHJvX21nci5zdGF0cywgMCwgc2l6ZW9mKHJ4cS0+bHJvX21nci5zdGF0cykpOworCXJ4cS0+bHJvX21nci5mZWF0dXJlcyA9IExST19GX05BUEk7CisJcnhxLT5scm9fbWdyLmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXJ4cS0+bHJvX21nci5pcF9zdW1tZWRfYWdnciA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXJ4cS0+bHJvX21nci5tYXhfZGVzYyA9IEFSUkFZX1NJWkUocnhxLT5scm9fYXJyKTsKKwlyeHEtPmxyb19tZ3IubWF4X2FnZ3IgPSAzMjsKKwlyeHEtPmxyb19tZ3IuZnJhZ19hbGlnbl9wYWQgPSAwOworCXJ4cS0+bHJvX21nci5scm9fYXJyID0gcnhxLT5scm9fYXJyOworCXJ4cS0+bHJvX21nci5nZXRfc2tiX2hlYWRlciA9IG12NjQzeHhfZ2V0X3NrYl9oZWFkZXI7CisKKwltZW1zZXQoJnJ4cS0+bHJvX2FyciwgMCwgc2l6ZW9mKHJ4cS0+bHJvX2FycikpOworCiAJcmV0dXJuIDA7CiAKIApAQCAtMTczNyw3ICsxOTk2LDcgQEAKIAogCXR4cS0+aW5kZXggPSBpbmRleDsKIAotCXR4cS0+dHhfcmluZ19zaXplID0gbXAtPmRlZmF1bHRfdHhfcmluZ19zaXplOworCXR4cS0+dHhfcmluZ19zaXplID0gbXAtPnR4X3Jpbmdfc2l6ZTsKIAogCXR4cS0+dHhfZGVzY19jb3VudCA9IDA7CiAJdHhxLT50eF9jdXJyX2Rlc2MgPSAwOwpAQCAtMjA2MSwzNiArMjMyMCw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXRfcnhfY29hbChzdHJ1Y3QgbXY2NDN4eF9ldGhfcHJpdmF0ZSAqbXAsIHVuc2lnbmVkIGludCBkZWxheSkKLXsKLQl1bnNpZ25lZCBpbnQgY29hbCA9ICgobXAtPnNoYXJlZC0+dF9jbGsgLyAxMDAwMDAwKSAqIGRlbGF5KSAvIDY0OwotCXUzMiB2YWw7Ci0KLQl2YWwgPSByZGxwKG1wLCBTRE1BX0NPTkZJRyk7Ci0JaWYgKG1wLT5zaGFyZWQtPmV4dGVuZGVkX3J4X2NvYWxfbGltaXQpIHsKLQkJaWYgKGNvYWwgPiAweGZmZmYpCi0JCQljb2FsID0gMHhmZmZmOwotCQl2YWwgJj0gfjB4MDIzZmZmODA7Ci0JCXZhbCB8PSAoY29hbCAmIDB4ODAwMCkgPDwgMTA7Ci0JCXZhbCB8PSAoY29hbCAmIDB4N2ZmZikgPDwgNzsKLQl9IGVsc2UgewotCQlpZiAoY29hbCA+IDB4M2ZmZikKLQkJCWNvYWwgPSAweDNmZmY7Ci0JCXZhbCAmPSB+MHgwMDNmZmYwMDsKLQkJdmFsIHw9IChjb2FsICYgMHgzZmZmKSA8PCA4OwotCX0KLQl3cmxwKG1wLCBTRE1BX0NPTkZJRywgdmFsKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X3R4X2NvYWwoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wLCB1bnNpZ25lZCBpbnQgZGVsYXkpCi17Ci0JdW5zaWduZWQgaW50IGNvYWwgPSAoKG1wLT5zaGFyZWQtPnRfY2xrIC8gMTAwMDAwMCkgKiBkZWxheSkgLyA2NDsKLQotCWlmIChjb2FsID4gMHgzZmZmKQotCQljb2FsID0gMHgzZmZmOwotCXdybHAobXAsIFRYX0ZJRk9fVVJHRU5UX1RIUkVTSE9MRCwgKGNvYWwgJiAweDNmZmYpIDw8IDQpOwotfQotCiBzdGF0aWMgdm9pZCBtdjY0M3h4X2V0aF9yZWNhbGNfc2tiX3NpemUoc3RydWN0IG12NjQzeHhfZXRoX3ByaXZhdGUgKm1wKQogewogCWludCBza2Jfc2l6ZTsKQEAgLTIxNTksMTMgKzIzODgsOCBAQAogCQl9CiAJfQogCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQogCXBvcnRfc3RhcnQobXApOwogCi0Jc2V0X3J4X2NvYWwobXAsIDApOwotCXNldF90eF9jb2FsKG1wLCAwKTsKLQogCXdybHAobXAsIElOVF9NQVNLX0VYVCwgSU5UX0VYVF9MSU5LX1BIWSB8IElOVF9FWFRfVFgpOwogCXdybHAobXAsIElOVF9NQVNLLCBJTlRfVFhfRU5EIHwgSU5UX1JYIHwgSU5UX0VYVCk7CiAKQEAgLTI1MzEsMTcgKzI3NTUsMTcgQEAKIAllbHNlCiAJCXVjX2FkZHJfZ2V0KG1wLCBkZXYtPmRldl9hZGRyKTsKIAotCW1wLT5kZWZhdWx0X3J4X3Jpbmdfc2l6ZSA9IERFRkFVTFRfUlhfUVVFVUVfU0laRTsKKwltcC0+cnhfcmluZ19zaXplID0gREVGQVVMVF9SWF9RVUVVRV9TSVpFOwogCWlmIChwZC0+cnhfcXVldWVfc2l6ZSkKLQkJbXAtPmRlZmF1bHRfcnhfcmluZ19zaXplID0gcGQtPnJ4X3F1ZXVlX3NpemU7CisJCW1wLT5yeF9yaW5nX3NpemUgPSBwZC0+cnhfcXVldWVfc2l6ZTsKIAltcC0+cnhfZGVzY19zcmFtX2FkZHIgPSBwZC0+cnhfc3JhbV9hZGRyOwogCW1wLT5yeF9kZXNjX3NyYW1fc2l6ZSA9IHBkLT5yeF9zcmFtX3NpemU7CiAKIAltcC0+cnhxX2NvdW50ID0gcGQtPnJ4X3F1ZXVlX2NvdW50ID8gOiAxOwogCi0JbXAtPmRlZmF1bHRfdHhfcmluZ19zaXplID0gREVGQVVMVF9UWF9RVUVVRV9TSVpFOworCW1wLT50eF9yaW5nX3NpemUgPSBERUZBVUxUX1RYX1FVRVVFX1NJWkU7CiAJaWYgKHBkLT50eF9xdWV1ZV9zaXplKQotCQltcC0+ZGVmYXVsdF90eF9yaW5nX3NpemUgPSBwZC0+dHhfcXVldWVfc2l6ZTsKKwkJbXAtPnR4X3Jpbmdfc2l6ZSA9IHBkLT50eF9xdWV1ZV9zaXplOwogCW1wLT50eF9kZXNjX3NyYW1fYWRkciA9IHBkLT50eF9zcmFtX2FkZHI7CiAJbXAtPnR4X2Rlc2Nfc3JhbV9zaXplID0gcGQtPnR4X3NyYW1fc2l6ZTsKIApAQCAtMjU4OCw3ICsyODEyLDcgQEAKIAogCXBoeV9yZXNldChtcCk7CiAKLQlwaHlfYXR0YWNoKG1wLT5kZXYsIHBoeS0+ZGV2LmJ1c19pZCwgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOworCXBoeV9hdHRhY2gobXAtPmRldiwgZGV2X25hbWUoJnBoeS0+ZGV2KSwgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOwogCiAJaWYgKHNwZWVkID09IDApIHsKIAkJcGh5LT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CkBAIC0yNjMyLDYgKzI4NTYsMjEgQEAKIAl3cmxwKG1wLCBQT1JUX1NFUklBTF9DT05UUk9MLCBwc2NyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtdjY0M3h4X2V0aF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBtdjY0M3h4X2V0aF9vcGVuLAorCS5uZG9fc3RvcAkJPSBtdjY0M3h4X2V0aF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBtdjY0M3h4X2V0aF94bWl0LAorCS5uZG9fc2V0X3J4X21vZGUJPSBtdjY0M3h4X2V0aF9zZXRfcnhfbW9kZSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG12NjQzeHhfZXRoX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2RvX2lvY3RsCQk9IG12NjQzeHhfZXRoX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBtdjY0M3h4X2V0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dAkJPSBtdjY0M3h4X2V0aF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IG12NjQzeHhfZXRoX2dldF9zdGF0cywKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gbXY2NDN4eF9ldGhfbmV0cG9sbCwKKyNlbmRpZgorfTsKKwogc3RhdGljIGludCBtdjY0M3h4X2V0aF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhICpwZDsKQEAgLTI2NzIsMTIgKzI5MTEsMTAgQEAKIAlpZiAocGQtPnBoeV9hZGRyICE9IE1WNjQzWFhfRVRIX1BIWV9OT05FKQogCQltcC0+cGh5ID0gcGh5X3NjYW4obXAsIHBkLT5waHlfYWRkcik7CiAKLQlpZiAobXAtPnBoeSAhPSBOVUxMKSB7CisJaWYgKG1wLT5waHkgIT0gTlVMTCkKIAkJcGh5X2luaXQobXAsIHBkLT5zcGVlZCwgcGQtPmR1cGxleCk7Ci0JCVNFVF9FVEhUT09MX09QUyhkZXYsICZtdjY0M3h4X2V0aF9ldGh0b29sX29wcyk7Ci0JfSBlbHNlIHsKLQkJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm12NjQzeHhfZXRoX2V0aHRvb2xfb3BzX3BoeWxlc3MpOwotCX0KKworCVNFVF9FVEhUT09MX09QUyhkZXYsICZtdjY0M3h4X2V0aF9ldGh0b29sX29wcyk7CiAKIAlpbml0X3BzY3IobXAsIHBkLT5zcGVlZCwgcGQtPmR1cGxleCk7CiAKQEAgLTI3MDUsMTggKzI5NDIsOCBAQAogCUJVR19PTighcmVzKTsKIAlkZXYtPmlycSA9IHJlcy0+c3RhcnQ7CiAKLQlkZXYtPmdldF9zdGF0cyA9IG12NjQzeHhfZXRoX2dldF9zdGF0czsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG12NjQzeHhfZXRoX3htaXQ7Ci0JZGV2LT5vcGVuID0gbXY2NDN4eF9ldGhfb3BlbjsKLQlkZXYtPnN0b3AgPSBtdjY0M3h4X2V0aF9zdG9wOwotCWRldi0+c2V0X3J4X21vZGUgPSBtdjY0M3h4X2V0aF9zZXRfcnhfbW9kZTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IG12NjQzeHhfZXRoX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmRvX2lvY3RsID0gbXY2NDN4eF9ldGhfaW9jdGw7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gbXY2NDN4eF9ldGhfY2hhbmdlX210dTsKLQlkZXYtPnR4X3RpbWVvdXQgPSBtdjY0M3h4X2V0aF90eF90aW1lb3V0OwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBtdjY0M3h4X2V0aF9uZXRwb2xsOwotI2VuZGlmCisJZGV2LT5uZXRkZXZfb3BzID0gJm12NjQzeHhfZXRoX25ldGRldl9vcHM7CisKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMiAqIEhaOwogCWRldi0+YmFzZV9hZGRyID0gMDsKIApAQCAtMjcyOCw2ICsyOTU1LDExIEBACiAJaWYgKG1wLT5zaGFyZWQtPndpbl9wcm90ZWN0KQogCQl3cmwobXAsIFdJTkRPV19QUk9URUNUKG1wLT5wb3J0X251bSksIG1wLT5zaGFyZWQtPndpbl9wcm90ZWN0KTsKIAorCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwlzZXRfcnhfY29hbChtcCwgMjUwKTsKKwlzZXRfdHhfY29hbChtcCwgMCk7CisKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCmluZGV4IGU5YzEyOTYuLmFlYTlmZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKKysrIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwpAQCAtMTMyNCw2ICsxMzI0LDcgQEAKIAkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IDA7CiAJfQogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHNzIC0gJm1ncC0+c3NbMF0pOwogCiAJaWYgKG1ncC0+Y3N1bV9mbGFnKSB7CiAJCWlmICgoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHx8CkBAIC0xNTE0LDcgKzE1MTUsNyBAQAogCXdvcmtfZG9uZSA9IG15cmkxMGdlX2NsZWFuX3J4X2RvbmUoc3MsIGJ1ZGdldCk7CiAKIAlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlwdXRfYmUzMihodG9ubCgzKSwgc3MtPmlycV9jbGFpbSk7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNTMyLDcgKzE1MzMsNyBAQAogCS8qIGFuIGludGVycnVwdCBvbiBhIG5vbi16ZXJvIHJlY2VpdmUtb25seSBzbGljZSBpcyBpbXBsaWNpdGx5CiAJICogdmFsaWQgIHNpbmNlIE1TSS1YIGlycXMgYXJlIG5vdCBzaGFyZWQgKi8KIAlpZiAoKG1ncC0+ZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPT0gMSkgJiYgKHNzICE9IG1ncC0+c3MpKSB7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZzcy0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnNzLT5uYXBpKTsKIAkJcmV0dXJuIChJUlFfSEFORExFRCk7CiAJfQogCkBAIC0xNTQzLDcgKzE1NDQsNyBAQAogCS8qIGxvdyBiaXQgaW5kaWNhdGVzIHJlY2VpdmVzIGFyZSBwcmVzZW50LCBzbyBzY2hlZHVsZQogCSAqIG5hcGkgcG9sbCBoYW5kbGVyICovCiAJaWYgKHN0YXRzLT52YWxpZCAmIDEpCi0JCW5ldGlmX3J4X3NjaGVkdWxlKCZzcy0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnNzLT5uYXBpKTsKIAogCWlmICghbWdwLT5tc2lfZW5hYmxlZCAmJiAhbWdwLT5tc2l4X2VuYWJsZWQpIHsKIAkJcHV0X2JlMzIoMCwgbWdwLT5pcnFfZGVhc3NlcnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaCBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlX21jcF9nZW5faGVhZGVyLmgKaW5kZXggY2FhNmNiYi4uNjJhMWNiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaAorKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3BfZ2VuX2hlYWRlci5oCkBAIC05LDYgKzksNyBAQAogI2RlZmluZSBNQ1BfVFlQRV9FVEggMHg0NTU0NDgyMAkvKiAiRVRIICIgKi8KICNkZWZpbmUgTUNQX1RZUEVfTUNQMCAweDRkNDM1MDMwCS8qICJNQ1AwIiAqLwogI2RlZmluZSBNQ1BfVFlQRV9ERkxUIDB4MjAyMDIwMjAJLyogIiAgICAiICovCisjZGVmaW5lIE1DUF9UWVBFX0VUSFogMHg0NTU0NDg1YQkvKiAiRVRIWiIgKi8KIAogc3RydWN0IG1jcF9nZW5faGVhZGVyIHsKIAkvKiB0aGUgZmlyc3QgNCBmaWVsZHMgYXJlIGZpbGxlZCBhdCBjb21waWxlIHRpbWUgKi8KQEAgLTQzLDcgKzQ0LDE1IEBACiAJdW5zaWduZWQgbXNpeF90YWJsZV9hZGRyOwkvKiBzdGFydCBhZGRyZXNzIG9mIG1zaXggdGFibGUgaW4gZmlybXdhcmUgKi8KIAl1bnNpZ25lZCBic3NfYWRkcjsJLyogc3RhcnQgb2YgYnNzICovCiAJdW5zaWduZWQgZmVhdHVyZXM7CisJdW5zaWduZWQgZWVfaGRyX2FkZHI7CiAJLyogOCAqLwogfTsKIAorc3RydWN0IHptY3BfaW5mbyB7CisJdW5zaWduZWQgaW5mb19sZW47CisJdW5zaWduZWQgem1jcF9hZGRyOworCXVuc2lnbmVkIHptY3BfbGVuOworCXVuc2lnbmVkIG1jcF9lZGF0YTsKK307CisKICNlbmRpZgkJCQkvKiBfX01ZUkkxMEdFX01DUF9HRU5fSEVBREVSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwppbmRleCA4OTllZDA2Li4wODUzNGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYworKysgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwpAQCAtNzQ4LDcgKzc0OCw3IEBACiAJc3dpdGNoIChldGgtPmhfcHJvdG8pCiAJewogI2lmZGVmIENPTkZJR19JTkVUCi0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKICAJCXJldHVybiBhcnBfZmluZChldGgtPmhfZGVzdCwgc2tiKTsKICNlbmRpZgogCkBAIC04OTYsNiArODk2LDE3IEBACiAJLmNhY2hlX3VwZGF0ZQk9IG15cmlfaGVhZGVyX2NhY2hlX3VwZGF0ZSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXlyaV9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG15cmlfb3BlbiwKKwkubmRvX3N0b3AJCT0gbXlyaV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbXlyaV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gbXlyaV9zZXRfbXVsdGljYXN0LAorCS5uZG9fdHhfdGltZW91dAkJPSBteXJpX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IG15cmlfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IG15cmlfc2J1c19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5ub2RlOwpAQCAtMTA0OCwxMyArMTA1OSw5IEBACiAJc2J1c193cml0ZWwoKDEgPDwgaSksIG1wLT5jcmVncyArIE1ZUklDVFJMX0lSUUxWTCk7CiAKIAltcC0+ZGV2ID0gZGV2OwotCWRldi0+b3BlbiA9ICZteXJpX29wZW47Ci0JZGV2LT5zdG9wID0gJm15cmlfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbXlyaV9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9ICZteXJpX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmbXlyaV9zZXRfbXVsdGljYXN0OwogCWRldi0+aXJxID0gb3AtPmlycXNbMF07CisJZGV2LT5uZXRkZXZfb3BzID0gJm15cmlfb3BzOwogCiAJLyogUmVnaXN0ZXIgaW50ZXJydXB0IGhhbmRsZXIgbm93LiAqLwogCURFVCgoIlJlcXVlc3RpbmcgTVlSSWNvbSBJUlEgbGluZS5cbiIpKTsKQEAgLTEwNjUsNyArMTA3Miw2IEBACiAJfQogCiAJZGV2LT5tdHUJCT0gTVlSSU5FVF9NVFU7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IG15cmlfY2hhbmdlX210dTsKIAlkZXYtPmhlYWRlcl9vcHMJCT0gJm15cmlfaGVhZGVyX29wczsKIAogCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gKEVUSF9ITEVOICsgTVlSSV9QQURfTEVOKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCBjNWRlYzU0Li5jOWJmZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC0xMjcsNyArMTI3LDcgQEAKICNkZWZpbmUgTkFUU0VNSV9SWF9MSU1JVAkyMDQ2CS8qIG1heGltdW0gc3VwcG9ydGVkIGJ5IGhhcmR3YXJlICovCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogICBLRVJOX0lORk8gRFJWX05BTUUgIiBkcDgzODF4IGRyaXZlciwgdmVyc2lvbiAiCiAgICAgICBEUlZfVkVSU0lPTiAiLCAiIERSVl9SRUxEQVRFICJcbiIKICAgS0VSTl9JTkZPICIgIG9yaWdpbmFsbHkgYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKQEAgLTIxOTgsMTAgKzIxOTgsMTAgQEAKIAogCXByZWZldGNoKCZucC0+cnhfc2tidWZmW25wLT5jdXJfcnggJSBSWF9SSU5HX1NJWkVdKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZucC0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZucC0+bmFwaSkpIHsKIAkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCByZWdpc3RlciBmb3IgcG9sbCAqLwogCQluYXRzZW1pX2lycV9kaXNhYmxlKGRldik7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiAJfSBlbHNlCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkgICAgICAgCSAgICAgICAiJXM6IElnbm9yaW5nIGludGVycnVwdCwgc3RhdHVzICUjMDh4LCBtYXNrICUjMDh4LlxuIiwKQEAgLTIyNTMsNyArMjI1Myw3IEBACiAJCW5wLT5pbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIEludHJTdGF0dXMpOwogCX0gd2hpbGUgKG5wLT5pbnRyX3N0YXR1cyk7CiAKLQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJLyogUmVlbmFibGUgaW50ZXJydXB0cyBwcm92aWRpbmcgbm90aGluZyBpcyB0cnlpbmcgdG8gc2h1dAogCSAqIHRoZSBjaGlwIGRvd24uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwppbmRleCBmMDkwZDNiLi5lYjY2ZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKQEAgLTYyLDggKzYyLDkgQEAKICNpbmNsdWRlICI4MzkwLmgiCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiIEQuIEJlY2tlci9QLiBHb3J0bWFrZXJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFCisJIiBELiBCZWNrZXIvUC4gR29ydG1ha2VyXG4iOwogCiAjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKICNkZWZpbmUgaW5sX2xlKGFkZHIpICBsZTMyX3RvX2NwdShpbmwoYWRkcikpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKaW5kZXggOGU3YzRjOS4uY2YwMWE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIxLDExICsyMSwxMCBAQAogIyAKICMgQ29udGFjdCBJbmZvcm1hdGlvbjoKICMgICAgaW5mb0BuZXR4ZW4uY29tCi0jIE5ldFhlbiwKLSMgMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotIyBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyMgTmV0WGVuIEluYywKKyMgMTg5MjIgRm9yZ2UgRHJpdmUKKyMgQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAjCi0jIE1ha2VmaWxlIGZvciB0aGUgTmV0WGVuIE5JQyBEcml2ZXIKICMKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAppbmRleCAxZmYwNjZiLi5jNDA4MTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDEwIEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQorICoKICAqLwogCiAjaWZuZGVmIF9ORVRYRU5fTklDX0hfCkBAIC02NSw4ICs2Niw4IEBACiAKICNkZWZpbmUgX05FVFhFTl9OSUNfTElOVVhfTUFKT1IgNAogI2RlZmluZSBfTkVUWEVOX05JQ19MSU5VWF9NSU5PUiAwCi0jZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04gMTEKLSNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICI0LjAuMTEiCisjZGVmaW5lIF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04gMzAKKyNkZWZpbmUgTkVUWEVOX05JQ19MSU5VWF9WRVJTSU9OSUQgICI0LjAuMzAiCiAKICNkZWZpbmUgTkVUWEVOX1ZFUlNJT05fQ09ERShhLCBiLCBjKQkoKChhKSA8PCAxNikgKyAoKGIpIDw8IDgpICsgKGMpKQogCkBAIC03NywxOSArNzgsMTkgQEAKIAogI2RlZmluZSBQSEFOX1ZFTkRPUl9JRCAweDQwNDAKIAotI2RlZmluZSBSQ1ZfREVTQ19SSU5HU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgcmN2X2Rlc2MpICogYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpCi0jZGVmaW5lIFNUQVRVU19ERVNDX1JJTkdTSVpFCVwKLQkoc2l6ZW9mKHN0cnVjdCBzdGF0dXNfZGVzYykqIGFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50KQotI2RlZmluZSBMUk9fREVTQ19SSU5HU0laRQlcCi0JKHNpemVvZihyY3ZEZXNjX3QpICogYWRhcHRlci0+bWF4X2xyb19yeF9kZXNjX2NvdW50KQotI2RlZmluZSBUWF9SSU5HU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIpICogYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQpCi0jZGVmaW5lIFJDVl9CVUZGU0laRQlcCi0JKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlcikgKiByZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpCisjZGVmaW5lIFJDVl9ERVNDX1JJTkdTSVpFKHJkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3QgcmN2X2Rlc2MpICogKHJkc19yaW5nKS0+bnVtX2Rlc2MpCisjZGVmaW5lIFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3QgbmV0eGVuX3J4X2J1ZmZlcikgKiByZHNfcmluZy0+bnVtX2Rlc2MpCisjZGVmaW5lIFNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3Qgc3RhdHVzX2Rlc2MpICogKHNkc19yaW5nKS0+bnVtX2Rlc2MpCisjZGVmaW5lIFRYX0JVRkZfUklOR1NJWkUoYWRhcHRlcikJXAorCShzaXplb2Yoc3RydWN0IG5ldHhlbl9jbWRfYnVmZmVyKSAqIGFkYXB0ZXItPm51bV90eGQpCisjZGVmaW5lIFRYX0RFU0NfUklOR1NJWkUoYWRhcHRlcikJXAorCShzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAqIGFkYXB0ZXItPm51bV90eGQpCisKICNkZWZpbmUgZmluZF9kaWZmX2Ftb25nKGEsYixyYW5nZSkgKChhKTwoYik/KChiKS0oYSkpOigoYikrKHJhbmdlKS0oYSkpKQogCi0jZGVmaW5lIE5FVFhFTl9ORVRERVZfU1RBVFVTCQkweDEKICNkZWZpbmUgTkVUWEVOX1JDVl9QUk9EVUNFUl9PRkZTRVQJMAogI2RlZmluZSBORVRYRU5fUkNWX1BFR19EQl9JRAkJMgogI2RlZmluZSBORVRYRU5fSE9TVF9EVU1NWV9ETUFfU0laRSAxMDI0CkBAIC0xODgsMjIgKzE4OSwxMiBAQAogLyogSG9zdCB3cml0ZXMgdGhlIGZvbGxvd2luZyB0byBub3RpZnkgdGhhdCBpdCBoYXMgZG9uZSB0aGUgaW5pdC1oYW5kc2hha2UgKi8KICNkZWZpbmUgUEhBTl9JTklUSUFMSVpFX0FDSwkweGYwMGYKIAotI2RlZmluZSBOVU1fUkNWX0RFU0NfUklOR1MJMwkvKiBObyBvZiBSY3YgRGVzY3JpcHRvciBjb250ZXh0cyAqLworI2RlZmluZSBOVU1fUkNWX0RFU0NfUklOR1MJMworI2RlZmluZSBOVU1fU1RTX0RFU0NfUklOR1MJNAogCi0vKiBkZXNjcmlwdG9yIHR5cGVzICovCi0jZGVmaW5lIFJDVl9ERVNDX05PUk1BTAkJMHgwMQotI2RlZmluZSBSQ1ZfREVTQ19KVU1CTwkJMHgwMgotI2RlZmluZSBSQ1ZfREVTQ19MUk8JCTB4MDQKLSNkZWZpbmUgUkNWX0RFU0NfTk9STUFMX0NUWElECTAKLSNkZWZpbmUgUkNWX0RFU0NfSlVNQk9fQ1RYSUQJMQotI2RlZmluZSBSQ1ZfREVTQ19MUk9fQ1RYSUQJMgotCi0jZGVmaW5lIFJDVl9ERVNDX1RZUEUoSUQpIFwKLQkoKElEID09IFJDVl9ERVNDX0pVTUJPX0NUWElEKQlcCi0JCT8gUkNWX0RFU0NfSlVNQk8JXAotCQk6ICgoSUQgPT0gUkNWX0RFU0NfTFJPX0NUWElEKQlcCi0JCQk/IFJDVl9ERVNDX0xSTyA6CVwKLQkJCShSQ1ZfREVTQ19OT1JNQUwpKSkKKyNkZWZpbmUgUkNWX1JJTkdfTk9STUFMCTAKKyNkZWZpbmUgUkNWX1JJTkdfSlVNQk8JMQorI2RlZmluZSBSQ1ZfUklOR19MUk8JMgogCiAjZGVmaW5lIE1BWF9DTURfREVTQ1JJUFRPUlMJCTQwOTYKICNkZWZpbmUgTUFYX1JDVl9ERVNDUklQVE9SUwkJMTYzODQKQEAgLTM1NywxMCArMzQ4LDcgQEAKIAkJX19sZTY0IGFkZHJfYnVmZmVyMTsKIAl9OwogCi0JX19sZTE2IGJ1ZmZlcjFfbGVuZ3RoOwotCV9fbGUxNiBidWZmZXIyX2xlbmd0aDsKLQlfX2xlMTYgYnVmZmVyM19sZW5ndGg7Ci0JX19sZTE2IGJ1ZmZlcjRfbGVuZ3RoOworCV9fbGUxNiBidWZmZXJfbGVuZ3RoWzRdOwogCiAJdW5pb24gewogCQlzdHJ1Y3QgewpAQCAtMzkxLDExICszNzksOCBAQAogI2RlZmluZSBTVEFUVVNfQ0tTVU1fT0sJCSgyKQogCiAvKiBvd25lciBiaXRzIG9mIHN0YXR1c19kZXNjICovCi0jZGVmaW5lIFNUQVRVU19PV05FUl9IT1NUCSgweDEpCi0jZGVmaW5lIFNUQVRVU19PV05FUl9QSEFOVE9NCSgweDIpCi0KLSNkZWZpbmUgTkVUWEVOX1BST1RfSVAJCSgxKQotI2RlZmluZSBORVRYRU5fUFJPVF9VTktOT1dOCSgwKQorI2RlZmluZSBTVEFUVVNfT1dORVJfSE9TVAkoMHgxVUxMIDw8IDU2KQorI2RlZmluZSBTVEFUVVNfT1dORVJfUEhBTlRPTQkoMHgyVUxMIDw8IDU2KQogCiAvKiBOb3RlOiBzaXplb2Yoc3RhdHVzX2Rlc2MpIHNob3VsZCBhbHdheXMgYmUgYSBtdXRsaXBsZSBvZiAyICovCiAKQEAgLTQyMSwxNSArNDA2LDYgQEAKICNkZWZpbmUgbmV0eGVuX2dldF9zdHNfb3Bjb2RlKHN0c19kYXRhKQlcCiAJKCgoc3RzX2RhdGEpID4+IDU4KSAmIDB4MDNGKQogCi0jZGVmaW5lIG5ldHhlbl9nZXRfc3RzX293bmVyKHN0YXR1c19kZXNjKQlcCi0JKChsZTY0X3RvX2NwdSgoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhKSA+PiA1NikgJiAweDAzKQotI2RlZmluZSBuZXR4ZW5fc2V0X3N0c19vd25lcihzdGF0dXNfZGVzYywgdmFsKQl7IFwKLQkoc3RhdHVzX2Rlc2MpLT5zdGF0dXNfZGVzY19kYXRhID0gXAotCQkoKHN0YXR1c19kZXNjKS0+c3RhdHVzX2Rlc2NfZGF0YSAmIFwKLQkJfmNwdV90b19sZTY0KDB4M1VMTCA8PCA1NikpIHwgXAotCQljcHVfdG9fbGU2NCgodTY0KSgodmFsKSAmIDB4MykgPDwgNTYpOyBcCi19Ci0KIHN0cnVjdCBzdGF0dXNfZGVzYyB7CiAJLyogQml0IHBhdHRlcm46IDAtMyBwb3J0LCA0LTcgc3RhdHVzLCA4LTExIHR5cGUsIDEyLTI3IHRvdGFsX2xlbmd0aAogCSAgIDI4LTQzIHJlZmVyZW5jZV9oYW5kbGUsIDQ0LTQ3IHByb3RvY29sLCA0OC01MiBwa3Rfb2Zmc2V0CkBAIC03MTIsNiArNjg4LDE1IEBACiAJTkVUWEVOX0ZJWEVEX1NUQVJUID0gMHgzRjAwMDAJLyogYmFja3VwIG9mIGNyYmluaXQgKi8KIH0gbmV0eGVuX2ZsYXNoX21hcF90OwogCisjZGVmaW5lIE5YX0ZXX1ZFUlNJT05fT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDQwOCkKKyNkZWZpbmUgTlhfRldfU0laRV9PRkZTRVQJKE5FVFhFTl9VU0VSX1NUQVJUKzB4NDBjKQorI2RlZmluZSBOWF9CSU9TX1ZFUlNJT05fT0ZGU0VUCShORVRYRU5fVVNFUl9TVEFSVCsweDgzYykKKyNkZWZpbmUgTlhfRldfTUFHSUNfT0ZGU0VUCShORVRYRU5fQlJEQ0ZHX1NUQVJUKzB4MTI4KQorI2RlZmluZSBOWF9GV19NSU5fU0laRQkJKDB4M2ZmZmZmKQorI2RlZmluZSBOWF9QMl9NTl9ST01JTUFHRQkwCisjZGVmaW5lIE5YX1AzX0NUX1JPTUlNQUdFCTEKKyNkZWZpbmUgTlhfUDNfTU5fUk9NSU1BR0UJMgorCiAjZGVmaW5lIE5FVFhFTl9VU0VSX1NUQVJUX09MRCBORVRYRU5fUFhFX1NUQVJUCS8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAKICNkZWZpbmUgTkVUWEVOX0ZMQVNIX1NUQVJUCQkoTkVUWEVOX0NSQklOSVRfU1RBUlQpCkBAIC03MzksNyArNzI0LDcgQEAKICNlbmRpZgogCiAvKiBOdW1iZXIgb2Ygc3RhdHVzIGRlc2NyaXB0b3JzIHRvIGhhbmRsZSBwZXIgaW50ZXJydXB0ICovCi0jZGVmaW5lIE1BWF9TVEFUVVNfSEFORExFCSgxMjgpCisjZGVmaW5lIE1BWF9TVEFUVVNfSEFORExFCSg2NCkKIAogLyoKICAqIG5ldHhlbl9za2JfZnJhZ3t9IGlzIHRvIGNvbnRhaW4gbWFwcGluZyBpbmZvIGZvciBlYWNoIFNHIGxpc3QuIFRoaXMKQEAgLTc4Myw5ICs3NjgsNiBAQAogCXU2NCBkbWE7CiAJdTE2IHJlZl9oYW5kbGU7CiAJdTE2IHN0YXRlOwotCXUzMiBscm9fZXhwZWN0ZWRfZnJhZ3M7Ci0JdTMyIGxyb19jdXJyZW50X2ZyYWdzOwotCXUzMiBscm9fbGVuZ3RoOwogfTsKIAogLyogQm9hcmQgdHlwZXMgKi8KQEAgLTgwMCwyMSArNzgyLDE5IEBACiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTA7CiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTE7CiAJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTI7Ci0JdW5zaWduZWQgbG9uZyBmaXJzdF9wYWdlX2dyb3VwX2VuZDsKLQl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2VfZ3JvdXBfc3RhcnQ7CiAJdm9pZCBfX2lvbWVtICpkYl9iYXNlOwogCXVuc2lnbmVkIGxvbmcgZGJfbGVuOwogCXVuc2lnbmVkIGxvbmcgcGNpX2xlbjA7CiAKLQl1OCBjdXRfdGhyb3VnaDsKIAlpbnQgcWRyX3NuX3dpbmRvdzsKIAlpbnQgZGRyX21uX3dpbmRvdzsKIAl1bnNpZ25lZCBsb25nIG1uX3dpbl9jcmI7CiAJdW5zaWduZWQgbG9uZyBtc193aW5fY3JiOwogCisJdTggY3V0X3Rocm91Z2g7CiAJdTggcmV2aXNpb25faWQ7Ci0JdTE2IGJvYXJkX3R5cGU7Ci0Jc3RydWN0IG5ldHhlbl9ib2FyZF9pbmZvIGJvYXJkY2ZnOworCXUxNiBwb3J0X3R5cGU7CisJaW50IGJvYXJkX3R5cGU7CiAJdTMyIGxpbmt1cDsKIAkvKiBBZGRyZXNzIG9mIGNtZCByaW5nIGluIFBoYW50b20gKi8KIAlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmNtZF9kZXNjX2hlYWQ7CkBAIC04MjMsOCArODAzLDYgQEAKIAlpbnQgcGNpX2Z1bmM7CiB9OwogCi0jZGVmaW5lIFJDVl9SSU5HX0xSTwlSQ1ZfREVTQ19MUk8KLQogI2RlZmluZSBNSU5JTVVNX0VUSEVSTkVUX0ZSQU1FX1NJWkUJNjQJLyogV2l0aCBGQ1MgKi8KICNkZWZpbmUgRVRIRVJORVRfRkNTX1NJWkUJCTQKIApAQCAtODUwLDE2ICs4MjgsMzYgQEAKICAqIGJlIG9uZSBSY3YgRGVzY3JpcHRvciBmb3Igbm9ybWFsIHBhY2tldHMsIG9uZSBmb3IganVtYm8gYW5kIG1heSBiZSBvdGhlcnMuCiAgKi8KIHN0cnVjdCBueF9ob3N0X3Jkc19yaW5nIHsKLQl1MzIgZmxhZ3M7CiAJdTMyIHByb2R1Y2VyOwotCWRtYV9hZGRyX3QgcGh5c19hZGRyOwotCXUzMiBjcmJfcmN2X3Byb2R1Y2VyOwkvKiByZWcgb2Zmc2V0ICovCi0Jc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CS8qIGFkZHJlc3Mgb2YgcnggcmluZyBpbiBQaGFudG9tICovCi0JdTMyIG1heF9yeF9kZXNjX2NvdW50OworCXUzMiBjcmJfcmN2X3Byb2R1Y2VyOworCXUzMiBudW1fZGVzYzsKIAl1MzIgZG1hX3NpemU7CiAJdTMyIHNrYl9zaXplOwotCXN0cnVjdCBuZXR4ZW5fcnhfYnVmZmVyICpyeF9idWZfYXJyOwkvKiByeCBidWZmZXJzIGZvciByZWNlaXZlICAgKi8KKwl1MzIgZmxhZ3M7CisJc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CisJc3RydWN0IG5ldHhlbl9yeF9idWZmZXIgKnJ4X2J1Zl9hcnI7CiAJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJc3BpbmxvY2tfdCBsb2NrOworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworfTsKKworc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgeworCXUzMiBjb25zdW1lcjsKKwl1MzIgY3JiX3N0c19jb25zdW1lcjsKKwl1MzIgY3JiX2ludHJfbWFzazsKKwl1MzIgbnVtX2Rlc2M7CisKKwlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmRlc2NfaGVhZDsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3RbTlVNX1JDVl9ERVNDX1JJTkdTXTsKKworCXUxNiBjbGVhbl90eDsKKwl1MTYgcG9zdF9yeGQ7CisJaW50IGlycTsKKworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCWNoYXIgbmFtZVtJRk5BTVNJWis0XTsKIH07CiAKIC8qCkBAIC04NzQsMTAgKzg3Miw3IEBACiAJdTE2IHZpcnRfcG9ydDsKIAogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nIHJkc19yaW5nc1tOVU1fUkNWX0RFU0NfUklOR1NdOwotCXUzMiBzdGF0dXNfcnhfY29uc3VtZXI7Ci0JdTMyIGNyYl9zdHNfY29uc3VtZXI7CS8qIHJlZyBvZmZzZXQgKi8KLQlkbWFfYWRkcl90IHJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHI7Ci0Jc3RydWN0IHN0YXR1c19kZXNjICpyY3Zfc3RhdHVzX2Rlc2NfaGVhZDsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyBzZHNfcmluZ3NbTlVNX1NUU19ERVNDX1JJTkdTXTsKIH07CiAKIC8qIE5ldyBIVyBjb250ZXh0IGNyZWF0aW9uICovCkBAIC0xMjAzLDEzICsxMTk4LDEzIEBACiAjZGVmaW5lIE5FVFhFTl9JU19NU0lfRkFNSUxZKGFkYXB0ZXIpIFwKIAkoKGFkYXB0ZXIpLT5mbGFncyAmIChORVRYRU5fTklDX01TSV9FTkFCTEVEIHwgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpKQogCi0jZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUgkxCisjZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUglOVU1fU1RTX0RFU0NfUklOR1MKICNkZWZpbmUgTkVUWEVOX01TSVhfVEJMX1NQQUNFCQk4MTkyCiAjZGVmaW5lIE5FVFhFTl9QQ0lfUkVHX01TSVhfVEJMCQkweDQ0CiAKICNkZWZpbmUgTkVUWEVOX0RCX01BUFNJWkVfQllURVMgICAgCTB4MTAwMAogCi0jZGVmaW5lIE5FVFhFTl9ORVRERVZfV0VJR0hUIDEyMAorI2RlZmluZSBORVRYRU5fTkVUREVWX1dFSUdIVCAxMjgKICNkZWZpbmUgTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMgNzc3CiAjZGVmaW5lIE5FVFhFTl9OSUNfUEVHX1RVTkUgMAogCkBAIC0xMjI0LDcgKzEyMTksNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJaW50IHBjaV91c2luZ19kYWM7Ci0Jc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOwogCWludCBtdHU7CiAJaW50IHBvcnRudW07CkBAIC0xMjM2LDcgKzEyMzAsNiBAQAogCW54X21hY19saXN0X3QJKm1hY19saXN0OwogCiAJc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgbGVnYWN5X2ludHI7Ci0JdTMyCWNyYl9pbnRyX21hc2s7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKQEAgLTEyNDYsMjAgKzEyMzksMjAgQEAKIAl1MzIgY3JiX3dpbjsKIAlyd2xvY2tfdCBhZGFwdGVyX2xvY2s7CiAKLQl1aW50NjRfdCBkbWFfbWFzazsKLQogCXUzMiBjbWRfcHJvZHVjZXI7CiAJX19sZTMyICpjbWRfY29uc3VtZXI7CiAJdTMyIGxhc3RfY21kX2NvbnN1bWVyOwogCXUzMiBjcmJfYWRkcl9jbWRfcHJvZHVjZXI7CiAJdTMyIGNyYl9hZGRyX2NtZF9jb25zdW1lcjsKKwlzcGlubG9ja190IHR4X2NsZWFuX2xvY2s7CiAKLQl1MzIgbWF4X3R4X2Rlc2NfY291bnQ7Ci0JdTMyIG1heF9yeF9kZXNjX2NvdW50OwotCXUzMiBtYXhfanVtYm9fcnhfZGVzY19jb3VudDsKLQl1MzIgbWF4X2xyb19yeF9kZXNjX2NvdW50OworCXUzMiBudW1fdHhkOworCXUzMiBudW1fcnhkOworCXUzMiBudW1fanVtYm9fcnhkOworCXUzMiBudW1fbHJvX3J4ZDsKIAogCWludCBtYXhfcmRzX3JpbmdzOworCWludCBtYXhfc2RzX3JpbmdzOwogCiAJdTMyIGZsYWdzOwogCXUzMiBpcnE7CkBAIC0xMjY3LDkgKzEyNjAsOSBAQAogCXUzMiB0ZW1wOwogCiAJdTMyIGZ3X21ham9yOworCXUzMiBmd192ZXJzaW9uOwogCi0JdTggbXNpeF9zdXBwb3J0ZWQ7Ci0JdTggbWF4X3Bvc3NpYmxlX3Jzc19yaW5nczsKKwlpbnQgbXNpeF9zdXBwb3J0ZWQ7CiAJc3RydWN0IG1zaXhfZW50cnkgbXNpeF9lbnRyaWVzW01TSVhfRU5UUklFU19QRVJfQURBUFRFUl07CiAKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXJfc3RhdHMgc3RhdHM7CkBAIC0xMjc5LDcgKzEyNzIsNiBAQAogCXUxNiBzdGF0ZTsKIAl1MTYgbGlua19hdXRvbmVnOwogCWludCByeF9jc3VtOwotCWludCBzdGF0dXM7CiAKIAlzdHJ1Y3QgbmV0eGVuX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOwkvKiBDb21tYW5kIGJ1ZmZlcnMgZm9yIHhtaXQgKi8KIApAQCAtMTI4Nyw3ICsxMjc5LDcgQEAKIAkgKiBSZWNlaXZlIGluc3RhbmNlcy4gVGhlc2UgY2FuIGJlIGVpdGhlciBvbmUgcGVyIHBvcnQsCiAJICogb3Igb25lIHBlciBwZWcsIGV0Yy4KIAkgKi8KLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCByZWN2X2N0eFtNQVhfUkNWX0NUWF07CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgcmVjdl9jdHg7CiAKIAlpbnQgaXNfdXA7CiAJc3RydWN0IG5ldHhlbl9kdW1teV9kbWEgZHVtbXlfZG1hOwpAQCAtMTM5OCw2ICsxMzkwLDggQEAKIHZvaWQgbmV0eGVuX25pY19yZWFkX3cxKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTMyIGluZGV4LCB1MzIgKnZhbHVlKTsKIAogaW50IG5ldHhlbl9uaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgbmV0eGVuX25pY19nZXRfZmlybXdhcmVfaW5mbyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCiBpbnQgbmV0eGVuX25pY19od19yZWFkX3d4XzEyOE0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAogCQl1bG9uZyBvZmYsIHZvaWQgKmRhdGEsIGludCBsZW4pOwpAQCAtMTQ3MSwxNSArMTQ2NSwxNiBAQAogaW50IG5ldHhlbl9pbml0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiB2b2lkIG5ldHhlbl9uaWNfY2xlYXJfc3RhdHMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgbmV0eGVuX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXZvaWQgbmV0eGVuX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBjdHgsCi0JCQkgICAgdTMyIHJpbmdpZCk7Cit2b2lkIG5ldHhlbl9wb3N0X3J4X2J1ZmZlcnMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1MzIgcmluZ2lkLAorCQlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpOwogaW50IG5ldHhlbl9wcm9jZXNzX2NtZF9yaW5nKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7Ci11MzIgbmV0eGVuX3Byb2Nlc3NfcmN2X3Jpbmcoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgY3R4LCBpbnQgbWF4KTsKK2ludCBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsIGludCBtYXgpOwogdm9pZCBuZXR4ZW5fcDJfbmljX3NldF9tdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIHZvaWQgbmV0eGVuX3AzX25pY19zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiB2b2lkIG5ldHhlbl9wM19mcmVlX21hY19saXN0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgbmV0eGVuX3AzX25pY19zZXRfcHJvbWlzYyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMik7CiBpbnQgbmV0eGVuX2NvbmZpZ19pbnRyX2NvYWxlc2NlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CitpbnQgbmV0eGVuX2NvbmZpZ19yc3Moc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKTsKIAogaW50IG54X2Z3X2NtZF9zZXRfbXR1KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgaW50IG10dSk7CiBpbnQgbmV0eGVuX25pY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBuZXdfbXR1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2N0eC5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKaW5kZXggNzQ2YmRiNC4uOTIzNDQ3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOCBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTE0MSw3ICsxNDEsNyBAQAogbnhfZndfY21kX3NldF9tdHUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgbXR1KQogewogCXUzMiByY29kZSA9IE5YX1JDT0RFX1NVQ0NFU1M7Ci0Jc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4WzBdOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAogCWlmIChyZWN2X2N0eC0+c3RhdGUgPT0gTlhfSE9TVF9DVFhfU1RBVEVfQUNUSVZFKQogCQlyY29kZSA9IG5ldHhlbl9pc3N1ZV9jbWQoYWRhcHRlciwKQEAgLTE2OSw2ICsxNjksNyBAQAogCW54X2NhcmRyc3BfcmRzX3JpbmdfdCAqcHJzcF9yZHM7CiAJbnhfY2FyZHJzcF9zZHNfcmluZ190ICpwcnNwX3NkczsKIAlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOwogCiAJZG1hX2FkZHJfdCBob3N0cnFfcGh5c19hZGRyLCBjYXJkcnNwX3BoeXNfYWRkcjsKIAl1NjQgcGh5c19hZGRyOwpAQCAtMTc5LDExICsxODAsMTAgQEAKIAogCWludCBlcnI7CiAKLQlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbMF07CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCi0JLyogb25seSBvbmUgc2RzIHJpbmcgZm9yIG5vdyAqLwogCW5yZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOwotCW5zZHNfcmluZ3MgPSAxOworCW5zZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOwogCiAJcnFfc2l6ZSA9CiAJCVNJWkVPRl9IT1NUUlFfUlgobnhfaG9zdHJxX3J4X2N0eF90LCBucmRzX3JpbmdzLCBuc2RzX3JpbmdzKTsKQEAgLTIzMSw3ICsyMzEsNyBAQAogCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW2ldOwogCiAJCXBycV9yZHNbaV0uaG9zdF9waHlzX2FkZHIgPSBjcHVfdG9fbGU2NChyZHNfcmluZy0+cGh5c19hZGRyKTsKLQkJcHJxX3Jkc1tpXS5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihyZHNfcmluZy0+bWF4X3J4X2Rlc2NfY291bnQpOworCQlwcnFfcmRzW2ldLnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5udW1fZGVzYyk7CiAJCXBycV9yZHNbaV0ucmluZ19raW5kID0gY3B1X3RvX2xlMzIoaSk7CiAJCXBycV9yZHNbaV0uYnVmZl9zaXplID0gY3B1X3RvX2xlNjQocmRzX3JpbmctPmRtYV9zaXplKTsKIAl9CkBAIC0yMzksMTEgKzIzOSwxNCBAQAogCXBycV9zZHMgPSAobnhfaG9zdHJxX3Nkc19yaW5nX3QgKikocHJxLT5kYXRhICsKIAkJCWxlMzJfdG9fY3B1KHBycS0+c2RzX3Jpbmdfb2Zmc2V0KSk7CiAKLQlwcnFfc2RzWzBdLmhvc3RfcGh5c19hZGRyID0KLQkJY3B1X3RvX2xlNjQocmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIpOwotCXBycV9zZHNbMF0ucmluZ19zaXplID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+bWF4X3J4X2Rlc2NfY291bnQpOwotCS8qIG9ubHkgb25lIG1zaXggdmVjdG9yIGZvciBub3cgKi8KLQlwcnFfc2RzWzBdLm1zaV9pbmRleCA9IGNwdV90b19sZTE2KDApOworCWZvciAoaSA9IDA7IGkgPCBuc2RzX3JpbmdzOyBpKyspIHsKKworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW2ldOworCisJCXBycV9zZHNbaV0uaG9zdF9waHlzX2FkZHIgPSBjcHVfdG9fbGU2NChzZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJcHJxX3Nkc1tpXS5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihzZHNfcmluZy0+bnVtX2Rlc2MpOworCQlwcnFfc2RzW2ldLm1zaV9pbmRleCA9IGNwdV90b19sZTE2KGkpOworCX0KIAogCXBoeXNfYWRkciA9IGhvc3RycV9waHlzX2FkZHI7CiAJZXJyID0gbmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLApAQCAtMjcyLDExICsyNzUsMTYgQEAKIAogCXByc3Bfc2RzID0gKChueF9jYXJkcnNwX3Nkc19yaW5nX3QgKikKIAkJCSZwcnNwLT5kYXRhW2xlMzJfdG9fY3B1KHByc3AtPnNkc19yaW5nX29mZnNldCldKTsKLQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1swXS5ob3N0X2NvbnN1bWVyX2NyYik7Ci0JcmVjdl9jdHgtPmNyYl9zdHNfY29uc3VtZXIgPSBORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCk7CiAKLQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1swXS5pbnRlcnJ1cHRfY3JiKTsKLQlhZGFwdGVyLT5jcmJfaW50cl9tYXNrID0gTkVUWEVOX05JQ19SRUcocmVnIC0gMHgyMDApOworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwcnNwLT5udW1fc2RzX3JpbmdzKTsgaSsrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbaV07CisKKwkJcmVnID0gbGUzMl90b19jcHUocHJzcF9zZHNbaV0uaG9zdF9jb25zdW1lcl9jcmIpOworCQlzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lciA9IE5FVFhFTl9OSUNfUkVHKHJlZyAtIDB4MjAwKTsKKworCQlyZWcgPSBsZTMyX3RvX2NwdShwcnNwX3Nkc1tpXS5pbnRlcnJ1cHRfY3JiKTsKKwkJc2RzX3JpbmctPmNyYl9pbnRyX21hc2sgPSBORVRYRU5fTklDX1JFRyhyZWcgLSAweDIwMCk7CisJfQogCiAJcmVjdl9jdHgtPnN0YXRlID0gbGUzMl90b19jcHUocHJzcC0+aG9zdF9jdHhfc3RhdGUpOwogCXJlY3ZfY3R4LT5jb250ZXh0X2lkID0gbGUxNl90b19jcHUocHJzcC0+Y29udGV4dF9pZCk7CkBAIC0yOTIsNyArMzAwLDcgQEAKIHN0YXRpYyB2b2lkCiBueF9md19jbWRfZGVzdHJveV9yeF9jdHgoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFswXTsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CiAKIAlpZiAobmV0eGVuX2lzc3VlX2NtZChhZGFwdGVyLAogCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLApAQCAtMzYyLDcgKzM3MCw3IEBACiAJcHJxX2Nkcy0+aG9zdF9waHlzX2FkZHIgPQogCQljcHVfdG9fbGU2NChhZGFwdGVyLT5haHcuY21kX2Rlc2NfcGh5c19hZGRyKTsKIAotCXBycV9jZHMtPnJpbmdfc2l6ZSA9IGNwdV90b19sZTMyKGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKKwlwcnFfY2RzLT5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihhZGFwdGVyLT5udW1fdHhkKTsKIAogCXBoeXNfYWRkciA9IHJxX3BoeXNfYWRkcjsKIAllcnIgPSBuZXR4ZW5faXNzdWVfY21kKGFkYXB0ZXIsCkBAIC00ODgsMzAgKzQ5NiwyOCBAQAogewogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKIAlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7Ci0JaW50IGN0eCwgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJaW50IHJpbmc7CiAJaW50IGZ1bmNfaWQgPSBhZGFwdGVyLT5wb3J0bnVtOwogCiAJYWRhcHRlci0+Y3R4X2Rlc2MtPmNtZF9yaW5nX2FkZHIgPQogCQljcHVfdG9fbGU2NChhZGFwdGVyLT5haHcuY21kX2Rlc2NfcGh5c19hZGRyKTsKIAlhZGFwdGVyLT5jdHhfZGVzYy0+Y21kX3Jpbmdfc2l6ZSA9Ci0JCWNwdV90b19sZTMyKGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKKwkJY3B1X3RvX2xlMzIoYWRhcHRlci0+bnVtX3R4ZCk7CiAKLQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgewotCQlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eFtjdHhdOworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OwogCi0JCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKLQkJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwogCi0JCQlhZGFwdGVyLT5jdHhfZGVzYy0+cmN2X2N0eFtyaW5nXS5yY3ZfcmluZ19hZGRyID0KLQkJCQljcHVfdG9fbGU2NChyZHNfcmluZy0+cGh5c19hZGRyKTsKLQkJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX3NpemUgPQotCQkJCWNwdV90b19sZTMyKHJkc19yaW5nLT5tYXhfcnhfZGVzY19jb3VudCk7Ci0JCX0KLQkJYWRhcHRlci0+Y3R4X2Rlc2MtPnN0c19yaW5nX2FkZHIgPQotCQkJY3B1X3RvX2xlNjQocmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19waHlzX2FkZHIpOwotCQlhZGFwdGVyLT5jdHhfZGVzYy0+c3RzX3Jpbmdfc2l6ZSA9Ci0JCQljcHVfdG9fbGUzMihhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCk7CisJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX2FkZHIgPQorCQkJY3B1X3RvX2xlNjQocmRzX3JpbmctPnBoeXNfYWRkcik7CisJCWFkYXB0ZXItPmN0eF9kZXNjLT5yY3ZfY3R4W3JpbmddLnJjdl9yaW5nX3NpemUgPQorCQkJY3B1X3RvX2xlMzIocmRzX3JpbmctPm51bV9kZXNjKTsKIAl9CisJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1swXTsKKwlhZGFwdGVyLT5jdHhfZGVzYy0+c3RzX3JpbmdfYWRkciA9IGNwdV90b19sZTY0KHNkc19yaW5nLT5waHlzX2FkZHIpOworCWFkYXB0ZXItPmN0eF9kZXNjLT5zdHNfcmluZ19zaXplID0gY3B1X3RvX2xlMzIoc2RzX3JpbmctPm51bV9kZXNjKTsKIAogCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX0NUWF9BRERSX1JFR19MTyhmdW5jX2lkKSwKIAkJCWxvd2VyMzIoYWRhcHRlci0+Y3R4X2Rlc2NfcGh5c19hZGRyKSk7CkBAIC01MzMsOSArNTM5LDEzIEBACiAJdTMyIHN0YXRlID0gMDsKIAl2b2lkICphZGRyOwogCWludCBlcnIgPSAwOwotCWludCBjdHgsIHJpbmc7CisJaW50IHJpbmc7CiAJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OwogCXN0cnVjdCBueF9ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAogCWVyciA9IG5ldHhlbl9yZWNlaXZlX3BlZ19yZWFkeShhZGFwdGVyKTsKIAlpZiAoZXJyKSB7CkBAIC01NDQsMTIgKzU1NCwxMiBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LAogCQkJc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpICsgc2l6ZW9mKHVpbnQzMl90KSwKIAkJCSZhZGFwdGVyLT5jdHhfZGVzY19waHlzX2FkZHIpOwogCiAJaWYgKGFkZHIgPT0gTlVMTCkgewotCQlEUFJJTlRLKEVSUiwgImZhaWxlZCB0byBhbGxvY2F0ZSBodyBjb250ZXh0XG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGh3IGNvbnRleHRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KGFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgbmV0eGVuX3JpbmdfY3R4KSk7CkBAIC01NjIsNjEgKzU3Miw1NyBAQAogCQkoX19sZTMyICopKCgoY2hhciAqKWFkZHIpICsgc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fcmluZ19jdHgpKTsKIAogCS8qIGNtZCBkZXNjIHJpbmcgKi8KLQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCXNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApICoKLQkJCWFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50LAorCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LAorCQkJVFhfREVTQ19SSU5HU0laRShhZGFwdGVyKSwKIAkJCSZody0+Y21kX2Rlc2NfcGh5c19hZGRyKTsKIAogCWlmIChhZGRyID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyBmYWlsZWQgdG8gYWxsb2NhdGUgdHggZGVzYyByaW5nXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHR4IGRlc2MgcmluZ1xuIiwKKwkJCQluZXRkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlody0+Y21kX2Rlc2NfaGVhZCA9IChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKilhZGRyOwogCi0JZm9yIChjdHggPSAwOyBjdHggPCBNQVhfUkNWX0NUWDsgKytjdHgpIHsKLQkJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHhbY3R4XTsKKwlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKIAotCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7Ci0JCQkvKiByeCBkZXNjIHJpbmcgKi8KLQkJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107Ci0JCQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCQkJUkNWX0RFU0NfUklOR1NJWkUsCi0JCQkJCSZyZHNfcmluZy0+cGh5c19hZGRyKTsKLQkJCWlmIChhZGRyID09IE5VTEwpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCB0byBhbGxvY2F0ZSByeCAiCi0JCQkJCSJkZXNjIHJpbmdbJWRdXG4iLAotCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCByaW5nKTsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyX291dF9mcmVlOwotCQkJfQotCQkJcmRzX3JpbmctPmRlc2NfaGVhZCA9IChzdHJ1Y3QgcmN2X2Rlc2MgKilhZGRyOwotCi0JCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQkJCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyID0KLQkJCQkJcmVjdl9jcmJfcmVnaXN0ZXJzW2FkYXB0ZXItPnBvcnRudW1dLgotCQkJCQljcmJfcmN2X3Byb2R1Y2VyW3JpbmddOwotCQl9Ci0KLQkJLyogc3RhdHVzIGRlc2MgcmluZyAqLworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKIAkJYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCi0JCQkJU1RBVFVTX0RFU0NfUklOR1NJWkUsCi0JCQkJJnJlY3ZfY3R4LT5yY3Zfc3RhdHVzX2Rlc2NfcGh5c19hZGRyKTsKKwkJCQlSQ1ZfREVTQ19SSU5HU0laRShyZHNfcmluZyksCisJCQkJJnJkc19yaW5nLT5waHlzX2FkZHIpOwogCQlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzIGZhaWxlZCB0byBhbGxvY2F0ZSBzdHMgZGVzYyByaW5nXG4iLAotCQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSByZHMgcmluZyBbJWRdXG4iLAorCQkJCW5ldGRldi0+bmFtZSwgcmluZyk7CiAJCQllcnIgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfb3V0X2ZyZWU7CiAJCX0KLQkJcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkID0gKHN0cnVjdCBzdGF0dXNfZGVzYyAqKWFkZHI7CisJCXJkc19yaW5nLT5kZXNjX2hlYWQgPSAoc3RydWN0IHJjdl9kZXNjICopYWRkcjsKIAogCQlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQkJcmVjdl9jdHgtPmNyYl9zdHNfY29uc3VtZXIgPQorCQkJcmRzX3JpbmctPmNyYl9yY3ZfcHJvZHVjZXIgPQogCQkJCXJlY3ZfY3JiX3JlZ2lzdGVyc1thZGFwdGVyLT5wb3J0bnVtXS4KLQkJCQljcmJfc3RzX2NvbnN1bWVyOworCQkJCWNyYl9yY3ZfcHJvZHVjZXJbcmluZ107CiAJfQogCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCisJCWFkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCVNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKSwKKwkJCQkmc2RzX3JpbmctPnBoeXNfYWRkcik7CisJCWlmIChhZGRyID09IE5VTEwpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBzZHMgcmluZyBbJWRdXG4iLAorCQkJCW5ldGRldi0+bmFtZSwgcmluZyk7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCX0KKwkJc2RzX3JpbmctPmRlc2NfaGVhZCA9IChzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKilhZGRyOworCX0KKworCiAJaWYgKGFkYXB0ZXItPmZ3X21ham9yID49IDQpIHsKIAkJYWRhcHRlci0+aW50cl9zY2hlbWUgPSBJTlRSX1NDSEVNRV9QRVJQT1JUOwogCQlhZGFwdGVyLT5tc2lfbW9kZSA9IE1TSV9NT0RFX01VTFRJRlVOQzsKQEAgLTYyOCwxMiArNjM0LDE2IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9IGVsc2UgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzWzBdOworCQlzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lciA9CisJCQlyZWN2X2NyYl9yZWdpc3RlcnNbYWRhcHRlci0+cG9ydG51bV0uY3JiX3N0c19jb25zdW1lcjsKIAogCQlhZGFwdGVyLT5pbnRyX3NjaGVtZSA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLAogCQkJCUNSQl9OSUNfQ0FQQUJJTElUSUVTX0ZXKTsKIAkJYWRhcHRlci0+bXNpX21vZGUgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKIAkJCQlDUkJfTklDX01TSV9NT0RFX0ZXKTsKLQkJYWRhcHRlci0+Y3JiX2ludHJfbWFzayA9IHN3X2ludF9tYXNrW2FkYXB0ZXItPnBvcnRudW1dOworCQlyZWN2X2N0eC0+c2RzX3JpbmdzWzBdLmNyYl9pbnRyX21hc2sgPQorCQkJCXN3X2ludF9tYXNrW2FkYXB0ZXItPnBvcnRudW1dOwogCiAJCWVyciA9IG5ldHhlbl9pbml0X29sZF9jdHgoYWRhcHRlcik7CiAJCWlmIChlcnIpIHsKQEAgLTY1NCw3ICs2NjQsOCBAQAogewogCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKIAlzdHJ1Y3QgbnhfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7Ci0JaW50IGN0eCwgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJaW50IHJpbmc7CiAKIAlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPj0gNCkgewogCQlueF9md19jbWRfZGVzdHJveV90eF9jdHgoYWRhcHRlcik7CkBAIC02NzMsMzIgKzY4NCwzNCBAQAogCWlmIChhZGFwdGVyLT5haHcuY21kX2Rlc2NfaGVhZCAhPSBOVUxMKSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKIAkJCQlzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAqCi0JCQkJYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQsCisJCQkJYWRhcHRlci0+bnVtX3R4ZCwKIAkJCQlhZGFwdGVyLT5haHcuY21kX2Rlc2NfaGVhZCwKIAkJCQlhZGFwdGVyLT5haHcuY21kX2Rlc2NfcGh5c19hZGRyKTsKIAkJYWRhcHRlci0+YWh3LmNtZF9kZXNjX2hlYWQgPSBOVUxMOwogCX0KIAotCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7Ci0JCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4W2N0eF07Ci0JCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKLQkJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOwogCi0JCQlpZiAocmRzX3JpbmctPmRlc2NfaGVhZCAhPSBOVUxMKSB7Ci0JCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJCQkJUkNWX0RFU0NfUklOR1NJWkUsCi0JCQkJCQlyZHNfcmluZy0+ZGVzY19oZWFkLAotCQkJCQkJcmRzX3JpbmctPnBoeXNfYWRkcik7Ci0JCQkJcmRzX3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQotCQlpZiAocmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkICE9IE5VTEwpIHsKKwkJaWYgKHJkc19yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgewogCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJCQlTVEFUVVNfREVTQ19SSU5HU0laRSwKLQkJCQkJcmVjdl9jdHgtPnJjdl9zdGF0dXNfZGVzY19oZWFkLAotCQkJCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX3BoeXNfYWRkcik7Ci0JCQlyZWN2X2N0eC0+cmN2X3N0YXR1c19kZXNjX2hlYWQgPSBOVUxMOworCQkJCQlSQ1ZfREVTQ19SSU5HU0laRShyZHNfcmluZyksCisJCQkJCXJkc19yaW5nLT5kZXNjX2hlYWQsCisJCQkJCXJkc19yaW5nLT5waHlzX2FkZHIpOworCQkJcmRzX3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7CisJCX0KKwl9CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisKKwkJaWYgKHNkc19yaW5nLT5kZXNjX2hlYWQgIT0gTlVMTCkgeworCQkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCVNUQVRVU19ERVNDX1JJTkdTSVpFKHNkc19yaW5nKSwKKwkJCQlzZHNfcmluZy0+ZGVzY19oZWFkLAorCQkJCXNkc19yaW5nLT5waHlzX2FkZHIpOworCQkJc2RzX3JpbmctPmRlc2NfaGVhZCA9IE5VTEw7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKaW5kZXggMDg5NGE3Yi4uYTY3N2ZmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKLSAqCi0gKgotICogZXRodG9vbCBzdXBwb3J0IGZvciBuZXR4ZW4gbmljCisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQogICoKICAqLwogCkBAIC0xMTgsMTAgKzExNSw5IEBACiBuZXR4ZW5fbmljX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkaW5mbyA9ICZhZGFwdGVyLT5haHcuYm9hcmRjZmc7CiAKIAkvKiByZWFkIHdoaWNoIG1vZGUgKi8KLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewogCQllY21kLT5zdXBwb3J0ZWQgPSAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CiAJCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8CiAJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfApAQCAtMTQwLDcgKzEzNiw3IEBACiAJCWVjbWQtPmR1cGxleCA9IGFkYXB0ZXItPmxpbmtfZHVwbGV4OwogCQllY21kLT5hdXRvbmVnID0gYWRhcHRlci0+bGlua19hdXRvbmVnOwogCi0JfSBlbHNlIGlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CiAJCXUzMiB2YWw7CiAKIAkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fUE9SVF9NT0RFX0FERFIsICZ2YWwsIDQpOwpAQCAtMTcyLDcgKzE2OCw3IEBACiAJZWNtZC0+cGh5X2FkZHJlc3MgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAotCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSkgeworCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpIHsKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzVfNEc6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzJHOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfUkVGX1FHOgpAQCAtMTg4LDcgKzE4NCw3IEBACiAJCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfVFA7CiAJCWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfVFA7CiAJCWVjbWQtPnBvcnQgPSBQT1JUX1RQOwotCQllY21kLT5hdXRvbmVnID0gKGJvYXJkaW5mby0+Ym9hcmRfdHlwZSA9PQorCQllY21kLT5hdXRvbmVnID0gKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09CiAJCQkJIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0NYNCkgPwogCQkgICAgKEFVVE9ORUdfRElTQUJMRSkgOiAoYWRhcHRlci0+bGlua19hdXRvbmVnKTsKIAkJYnJlYWs7CkBAIC0yMTUsNyArMjExLDcgQEAKIAkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAkJYnJlYWs7CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA6Ci0JCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKKwkJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CiAJCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCQkJZWNtZC0+c3VwcG9ydGVkIHw9IChTVVBQT1JURURfRklCUkUgfCBTVVBQT1JURURfVFApOwogCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0KQEAgLTIzMSw3ICsyMjcsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIm5ldHhlbi1uaWM6IFVuc3VwcG9ydGVkIGJvYXJkIG1vZGVsICVkXG4iLAotCQkgICAgICAgKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSk7CisJCSAgICAgICAobmV0eGVuX2JyZHR5cGVfdClhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjQ1LDcgKzI0MSw3IEBACiAJX191MzIgc3RhdHVzOwogCiAJLyogcmVhZCB3aGljaCBtb2RlICovCi0JaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJLyogYXV0b25lZ290aWF0aW9uICovCiAJCWlmIChhZGFwdGVyLT5waHlfd3JpdGUKIAkJICAgICYmIGFkYXB0ZXItPnBoeV93cml0ZShhZGFwdGVyLApAQCAtNDMzLDcgKzQyOSw3IEBACiAJaW50IHZhbDsKIAogCS8qIHJlYWQgd2hpY2ggbW9kZSAqLwotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CiAJCWlmIChhZGFwdGVyLT5waHlfcmVhZAogCQkgICAgJiYgYWRhcHRlci0+cGh5X3JlYWQoYWRhcHRlciwKIAkJCQkJIE5FVFhFTl9OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLApAQCAtNDQzLDcgKzQzOSw3IEBACiAJCQl2YWwgPSBuZXR4ZW5fZ2V0X3BoeV9saW5rKHN0YXR1cyk7CiAJCQlyZXR1cm4gIXZhbDsKIAkJfQotCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKSB7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgewogCQl2YWwgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwgQ1JCX1hHX1NUQVRFKTsKIAkJcmV0dXJuICh2YWwgPT0gWEdfTElOS19VUCkgPyAwIDogMTsKIAl9CkBAIC00NzMsOTUgKzQ2OSwyMCBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMAotc3RhdGljIGludAotbmV0eGVuX25pY19zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLAotCQkJdTggKiBieXRlcykKLXsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBvZmZzZXQgPSBlZXByb20tPm9mZnNldDsKLQlzdGF0aWMgaW50IGZsYXNoX3N0YXJ0OwotCXN0YXRpYyBpbnQgcmVhZHlfdG9fZmxhc2g7Ci0JaW50IHJldDsKLQotCWlmIChmbGFzaF9zdGFydCA9PSAwKSB7Ci0JCW5ldHhlbl9oYWx0X3BlZ3MoYWRhcHRlcik7Ci0JCXJldCA9IG5ldHhlbl9mbGFzaF91bmxvY2soYWRhcHRlcik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGbGFzaCB1bmxvY2sgZmFpbGVkLlxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGZsYXNoIHVubG9ja2VkLiBcbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJcmV0ID0gbmV0eGVuX2ZsYXNoX2VyYXNlX3NlY29uZGFyeShhZGFwdGVyKTsKLQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGbGFzaCBlcmFzZSBmYWlsZWQuXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQlwcmludGsoS0VSTl9JTkZPICIlczogc2Vjb25kYXJ5IGZsYXNoIGVyYXNlZCBzdWNjZXNzZnVsbHkuXG4iLAotCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCWZsYXNoX3N0YXJ0ID0gMTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKG9mZnNldCA9PSBORVRYRU5fQk9PVExEX1NUQVJUKSB7Ci0JCXJldCA9IG5ldHhlbl9mbGFzaF9lcmFzZV9wcmltYXJ5KGFkYXB0ZXIpOwotCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZsYXNoIGVyYXNlIGZhaWxlZC5cbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJcmV0ID0gbmV0eGVuX3JvbV9zZShhZGFwdGVyLCBORVRYRU5fVVNFUl9TVEFSVCk7Ci0JCWlmIChyZXQgIT0gRkxBU0hfU1VDQ0VTUykKLQkJCXJldHVybiByZXQ7Ci0JCXJldCA9IG5ldHhlbl9yb21fc2UoYWRhcHRlciwgTkVUWEVOX0ZJWEVEX1NUQVJUKTsKLQkJaWYgKHJldCAhPSBGTEFTSF9TVUNDRVNTKQotCQkJcmV0dXJuIHJldDsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogcHJpbWFyeSBmbGFzaCBlcmFzZWQgc3VjY2Vzc2Z1bGx5XG4iLAotCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0KLQkJcmV0ID0gbmV0eGVuX2JhY2t1cF9jcmJpbml0KGFkYXB0ZXIpOwotCQlpZiAocmV0ICE9IEZMQVNIX1NVQ0NFU1MpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENSQmluaXQgYmFja3VwIGZhaWxlZC5cbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDUkJpbml0IGJhY2t1cCBkb25lLlxuIiwKLQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQlyZWFkeV90b19mbGFzaCA9IDE7Ci0JfQotCi0JaWYgKCFyZWFkeV90b19mbGFzaCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIHdyaXRlIHNlcXVlbmNlLCByZXR1cm5pbmcuLi5cbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIG5ldHhlbl9yb21fZmFzdF93cml0ZV93b3JkcyhhZGFwdGVyLCBvZmZzZXQsIGJ5dGVzLCBlZXByb20tPmxlbik7Ci19Ci0jZW5kaWYgLyogMCAqLwotCiBzdGF0aWMgdm9pZAogbmV0eGVuX25pY19nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwogCiAJcmluZy0+cnhfcGVuZGluZyA9IDA7CiAJcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9SQ1ZfQ1RYOyArK2kpIHsKLQkJcmluZy0+cnhfcGVuZGluZyArPSBhZGFwdGVyLT5yZWN2X2N0eFtpXS4KLQkJICAgIHJkc19yaW5nc1tSQ1ZfREVTQ19OT1JNQUxfQ1RYSURdLm1heF9yeF9kZXNjX2NvdW50OwotCQlyaW5nLT5yeF9qdW1ib19wZW5kaW5nICs9IGFkYXB0ZXItPnJlY3ZfY3R4W2ldLgotCQkgICAgcmRzX3JpbmdzW1JDVl9ERVNDX0pVTUJPX0NUWElEXS5tYXhfcnhfZGVzY19jb3VudDsKLQl9Ci0JcmluZy0+dHhfcGVuZGluZyA9IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OworCXJpbmctPnJ4X3BlbmRpbmcgKz0gYWRhcHRlci0+cmVjdl9jdHguCisJCXJkc19yaW5nc1tSQ1ZfUklOR19OT1JNQUxdLm51bV9kZXNjOworCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgKz0gYWRhcHRlci0+cmVjdl9jdHguCisJCXJkc19yaW5nc1tSQ1ZfUklOR19KVU1CT10ubnVtX2Rlc2M7CisJcmluZy0+dHhfcGVuZGluZyA9IGFkYXB0ZXItPm51bV90eGQ7CiAKLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCiAJCXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKIAllbHNlCiAJCXJpbmctPnJ4X21heF9wZW5kaW5nID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7CkBAIC01NzksNyArNTAwLDcgQEAKIAlfX3UzMiB2YWw7CiAJaW50IHBvcnQgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwogCi0JaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBORVRYRU5fTklVX01BWF9HQkVfUE9SVFMpKQogCQkJcmV0dXJuOwogCQkvKiBnZXQgZmxvdyBjb250cm9sIHNldHRpbmdzICovCkBAIC02MDIsNyArNTIzLDcgQEAKIAkJCQlwYXVzZS0+dHhfcGF1c2UgPSAhKG5ldHhlbl9nYl9nZXRfZ2IzX21hc2sodmFsKSk7CiAJCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykpCiAJCQlyZXR1cm47CiAJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CkBAIC02MTMsNyArNTM0LDcgQEAKIAkJCXBhdXNlLT50eF9wYXVzZSA9ICEobmV0eGVuX3hnX2dldF94ZzFfbWFzayh2YWwpKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIiJXM6IFVua25vd24gYm9hcmQgdHlwZTogJXhcbiIsCi0JCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSwgYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUpOworCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIGFkYXB0ZXItPmFody5wb3J0X3R5cGUpOwogCX0KIH0KIApAQCAtNjI1LDcgKzU0Niw3IEBACiAJX191MzIgdmFsOwogCWludCBwb3J0ID0gYWRhcHRlci0+cGh5c2ljYWxfcG9ydDsKIAkvKiByZWFkIG1vZGUgKi8KLQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpIHsKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgewogCQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCiAJCQlyZXR1cm4gLUVJTzsKIAkJLyogc2V0IGZsb3cgY29udHJvbCAqLwpAQCAtNjY5LDcgKzU5MCw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJbmV0eGVuX25pY193cml0ZV93MChhZGFwdGVyLCBORVRYRU5fTklVX0dCX1BBVVNFX0NUTCwgdmFsKTsKLQl9IGVsc2UgaWYgKGFkYXB0ZXItPmFody5ib2FyZF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpIHsKIAkJaWYgKChwb3J0IDwgMCkgfHwgKHBvcnQgPiBORVRYRU5fTklVX01BWF9YR19QT1JUUykpCiAJCQlyZXR1cm4gLUVJTzsKIAkJbmV0eGVuX25pY19yZWFkX3cwKGFkYXB0ZXIsIE5FVFhFTl9OSVVfWEdfUEFVU0VfQ1RMLCAmdmFsKTsKQEAgLTY4OCw3ICs2MDksNyBAQAogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVua25vd24gYm9hcmQgdHlwZTogJXhcbiIsCiAJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSk7CisJCQkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODEwLDYgKzczMSw1MyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorbmV0eGVuX25pY19nZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiB3b2xfY2ZnID0gMDsKKworCXdvbC0+c3VwcG9ydGVkID0gMDsKKwl3b2wtPndvbG9wdHMgPSAwOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AyKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCXJldHVybjsKKworCXdvbF9jZmcgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHX05WKTsKKwlpZiAod29sX2NmZyAmICgxVUwgPDwgYWRhcHRlci0+cG9ydG51bSkpCisJCXdvbC0+c3VwcG9ydGVkIHw9IFdBS0VfTUFHSUM7CisKKwl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJRyk7CisJaWYgKHdvbF9jZmcgJiAoMVVMIDw8IGFkYXB0ZXItPnBvcnRudW0pKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKK30KKworc3RhdGljIGludAorbmV0eGVuX25pY19zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiB3b2xfY2ZnID0gMDsKKworCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAod29sLT53b2xvcHRzICYgfldBS0VfTUFHSUMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXdvbF9jZmcgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHX05WKTsKKwlpZiAoISh3b2xfY2ZnICYgKDEgPDwgYWRhcHRlci0+cG9ydG51bSkpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwl3b2xfY2ZnID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLCBORVRYRU5fV09MX0NPTkZJRyk7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCisJCXdvbF9jZmcgfD0gMVVMIDw8IGFkYXB0ZXItPnBvcnRudW07CisJZWxzZQorCQl3b2xfY2ZnICY9IH4oMVVMIDw8IGFkYXB0ZXItPnBvcnRudW0pOworCW5ldHhlbl9uaWNfcmVnX3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9XT0xfQ09ORklHLCB3b2xfY2ZnKTsKKworCXJldHVybiAwOworfQorCiAvKgogICogU2V0IHRoZSBjb2FsZXNjaW5nIHBhcmFtZXRlcnMuIEN1cnJlbnRseSBvbmx5IG5vcm1hbCBpcyBzdXBwb3J0ZWQuCiAgKiBJZiByeF9jb2FsZXNjZV91c2VjcyA9PSAwIG9yIHJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID09IDAgdGhlbiBzZXQgdGhlCkBAIC05MDYsOSArODc0LDYgQEAKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfZWVwcm9tX2xlbiA9IG5ldHhlbl9uaWNfZ2V0X2VlcHJvbV9sZW4sCiAJLmdldF9lZXByb20gPSBuZXR4ZW5fbmljX2dldF9lZXByb20sCi0jaWYgMAotCS5zZXRfZWVwcm9tID0gbmV0eGVuX25pY19zZXRfZWVwcm9tLAotI2VuZGlmCiAJLmdldF9yaW5ncGFyYW0gPSBuZXR4ZW5fbmljX2dldF9yaW5ncGFyYW0sCiAJLmdldF9wYXVzZXBhcmFtID0gbmV0eGVuX25pY19nZXRfcGF1c2VwYXJhbSwKIAkuc2V0X3BhdXNlcGFyYW0gPSBuZXR4ZW5fbmljX3NldF9wYXVzZXBhcmFtLApAQCAtOTE2LDYgKzg4MSw4IEBACiAJLnNldF9zZyA9IGV0aHRvb2xfb3Bfc2V0X3NnLAogCS5nZXRfdHNvID0gbmV0eGVuX25pY19nZXRfdHNvLAogCS5zZXRfdHNvID0gbmV0eGVuX25pY19zZXRfdHNvLAorCS5nZXRfd29sID0gbmV0eGVuX25pY19nZXRfd29sLAorCS5zZXRfd29sID0gbmV0eGVuX25pY19zZXRfd29sLAogCS5zZWxmX3Rlc3QgPSBuZXR4ZW5fbmljX2RpYWdfdGVzdCwKIAkuZ2V0X3N0cmluZ3MgPSBuZXR4ZW5fbmljX2dldF9zdHJpbmdzLAogCS5nZXRfZXRodG9vbF9zdGF0cyA9IG5ldHhlbl9uaWNfZ2V0X2V0aHRvb2xfc3RhdHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCmluZGV4IGU4MGY5ZTMuLjAxNmM2MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiw5ICsyMiwxMCBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKKyAqCiAgKi8KIAogI2lmbmRlZiBfX05FVFhFTl9OSUNfSERSX0hfCkBAIC0zNjIsMTIgKzM2Myw2IEBACiAjZGVmaW5lIE5FVFhFTl9IV19DUkJfSFVCX0FHVF9BRFJfTFBDCVwKIAkoKE5FVFhFTl9IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgTkVUWEVOX0hXX0xQQ19DUkJfQUdUX0FEUikKIAotLyoKLSAqIE1BWF9SQ1ZfQ1RYIDogVGhlIG51bWJlciBvZiByZWNlaXZlIGNvbnRleHRzIHRoYXQgYXJlIGF2YWlsYWJsZSBvbgotICogdGhlIHBoYW50b20uCi0gKi8KLSNkZWZpbmUgTUFYX1JDVl9DVFgJCQkxCi0KICNkZWZpbmUgTkVUWEVOX1NSRV9JTlRfU1RBVFVTCQkoTkVUWEVOX0NSQl9TUkUgKyAweDAwMDM0KQogI2RlZmluZSBORVRYRU5fU1JFX1BCSV9BQ1RJVkVfU1RBVFVTCShORVRYRU5fQ1JCX1NSRSArIDB4MDEwMTQpCiAjZGVmaW5lIE5FVFhFTl9TUkVfTDFSRV9DVEwJCShORVRYRU5fQ1JCX1NSRSArIDB4MDMwMDApCkBAIC04NTgsNiArODUzLDEyIEBACiAjZGVmaW5lIE5FVFhFTl9QT1JUX01PREVfQUREUgkJKE5FVFhFTl9DQU1fUkFNKDB4MjQpKQogI2RlZmluZSBORVRYRU5fV09MX1BPUlRfTU9ERQkJKE5FVFhFTl9DQU1fUkFNKDB4MTk4KSkKIAorI2RlZmluZSBORVRYRU5fV09MX0NPTkZJR19OVgkJKE5FVFhFTl9DQU1fUkFNKDB4MTg0KSkKKyNkZWZpbmUgTkVUWEVOX1dPTF9DT05GSUcJCShORVRYRU5fQ0FNX1JBTSgweDE4OCkpCisKKyNkZWZpbmUgTlhfUEVHX1RVTkVfTU5fUFJFU0VOVAkJMHgxCisjZGVmaW5lIE5YX1BFR19UVU5FX0NBUEFCSUxJVFkJCShORVRYRU5fQ0FNX1JBTSgweDAyYykpCisKICNkZWZpbmUgTkVUWEVOX0NBTV9SQU1fRE1BX1dBVENIRE9HX0NUUkwJCSgweDE0KQogCiAjZGVmaW5lCUlTUl9NU0lfSU5UX1RSSUdHRVIoRlVOQykgKE5FVFhFTl9QQ0lYX1BTX1JFRyhQQ0lYX01TSV9GKEZVTkMpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCmluZGV4IDdmZWE3NzAuLjUwMjY4MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA2IE5ldFhlbiwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwOSBOZXRYZW4sIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjIsMTIgKzIyLDkgQEAKICAqCiAgKiBDb250YWN0IEluZm9ybWF0aW9uOgogICogICAgaW5mb0BuZXR4ZW4uY29tCi0gKiBOZXRYZW4sCi0gKiAzOTY1IEZyZWVkb20gQ2lyY2xlLCBGb3VydGggZmxvb3IsCi0gKiBTYW50YSBDbGFyYSwgQ0EgOTUwNTQKLSAqCi0gKgotICogU291cmNlIGZpbGUgZm9yIE5JQyByb3V0aW5lcyB0byBhY2Nlc3MgdGhlIFBoYW50b20gaGFyZHdhcmUKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTM1LDcgKzMyLDcgQEAKICNpbmNsdWRlICJuZXR4ZW5fbmljX2h3LmgiCiAjaW5jbHVkZSAibmV0eGVuX25pY19waGFuX3JlZy5oIgogCi0KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogCiAjZGVmaW5lIE1BU0sobikgKCgxVUxMPDwobikpLTEpCkBAIC01MTgsNyArNTE1LDcgQEAKIAkJCSZjbWRfZGVzY19hcnJbaV0sIHNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApKTsKIAogCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLAotCQkJCWFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50KTsKKwkJCQlhZGFwdGVyLT5udW1fdHhkKTsKIAkJaSsrOwogCiAJfSB3aGlsZSAoaSAhPSBucl9lbGVtZW50cyk7CkBAIC02NzMsNiArNjcwLDUzIEBACiAJcmV0dXJuIHJ2OwogfQogCisjZGVmaW5lIFJTU19IQVNIVFlQRV9JUF9UQ1AJMHgzCisKK2ludCBuZXR4ZW5fY29uZmlnX3JzcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpCit7CisJbnhfbmljX3JlcV90IHJlcTsKKwl1NjQgd29yZDsKKwlpbnQgaSwgcnY7CisKKwl1NjQga2V5W10gPSB7IDB4YmVhYzAxZmE2YTQyYjczYlVMTCwgMHg4MDMwZjIwYzc3Y2IyZGEzVUxMLAorCQkJMHhhZTdiMzBiNGQwY2EyYmNiVUxMLCAweDQzYTM4ZmIwNDE2NzI1M2RVTEwsCisJCQkweDI1NWIwZWMyNmQ1YTU2ZGFVTEwgfTsKKworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihueF9uaWNfcmVxX3QpKTsKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KE5YX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gTlhfTklDX0gyQ19PUENPREVfQ09ORklHX1JTUyB8ICgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwkvKgorCSAqIFJTUyByZXF1ZXN0OgorCSAqIGJpdHMgMy0wOiBoYXNoX21ldGhvZAorCSAqICAgICAgNS00OiBoYXNoX3R5cGVfaXB2NAorCSAqCTctNjogaGFzaF90eXBlX2lwdjYKKwkgKgkgIDg6IGVuYWJsZQorCSAqICAgICAgICA5OiB1c2UgaW5kaXJlY3Rpb24gdGFibGUKKwkgKiAgICA0Ny0xMDogcmVzZXJ2ZWQKKwkgKiAgICA2My00ODogaW5kaXJlY3Rpb24gdGFibGUgbWFzaworCSAqLworCXdvcmQgPSAgKCh1NjQpKFJTU19IQVNIVFlQRV9JUF9UQ1AgJiAweDMpIDw8IDQpIHwKKwkJKCh1NjQpKFJTU19IQVNIVFlQRV9JUF9UQ1AgJiAweDMpIDw8IDYpIHwKKwkJKCh1NjQpKGVuYWJsZSAmIDB4MSkgPDwgOCkgfAorCQkoKDB4N1VMTCkgPDwgNDgpOworCXJlcS53b3Jkc1swXSA9IGNwdV90b19sZTY0KHdvcmQpOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCisJCXJlcS53b3Jkc1tpKzFdID0gY3B1X3RvX2xlNjQoa2V5W2ldKTsKKworCisJcnYgPSBuZXR4ZW5fc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydiAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBjb25maWd1cmUgUlNTXG4iLAorCQkJCWFkYXB0ZXItPm5ldGRldi0+bmFtZSk7CisJfQorCisJcmV0dXJuIHJ2OworfQorCiAvKgogICogbmV0eGVuX25pY19jaGFuZ2VfbXR1IC0gQ2hhbmdlIHRoZSBNYXhpbXVtIFRyYW5zZmVyIFVuaXQKICAqIEByZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQpAQCAtNzA5LDkgKzc1Myw4IEBACiBzdGF0aWMgaW50IG5ldHhlbl9nZXRfZmxhc2hfYmxvY2soc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYmFzZSwKIAkJCQkgIGludCBzaXplLCBfX2xlMzIgKiBidWYpCiB7Ci0JaW50IGksIGFkZHI7CisJaW50IGksIHYsIGFkZHI7CiAJX19sZTMyICpwdHIzMjsKLQl1MzIgdjsKIAogCWFkZHIgPSBiYXNlOwogCXB0cjMyID0gYnVmOwpAQCAtOTE0LDEzICs5NTcsMTIgQEAKIAl1MzIgd2luX3JlYWQ7CiAKIAlhZGFwdGVyLT5jcmJfd2luID0gQ1JCX0hJKCpvZmYpOwotCXdyaXRlbChhZGFwdGVyLT5jcmJfd2luLCAodm9pZCAqKShDUkJfV0lORE9XXzJNICsKLQkJYWRhcHRlci0+YWh3LnBjaV9iYXNlMCkpOworCXdyaXRlbChhZGFwdGVyLT5jcmJfd2luLCAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIENSQl9XSU5ET1dfMk0pKTsKIAkvKgogCSAqIFJlYWQgYmFjayB2YWx1ZSB0byBtYWtlIHN1cmUgd3JpdGUgaGFzIGdvbmUgdGhyb3VnaCBiZWZvcmUgdHJ5aW5nCiAJICogdG8gdXNlIGl0LgogCSAqLwotCXdpbl9yZWFkID0gcmVhZGwoKHZvaWQgKikoQ1JCX1dJTkRPV18yTSArIGFkYXB0ZXItPmFody5wY2lfYmFzZTApKTsKKwl3aW5fcmVhZCA9IHJlYWRsKGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBDUkJfV0lORE9XXzJNKTsKIAlpZiAod2luX3JlYWQgIT0gYWRhcHRlci0+Y3JiX3dpbikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXcml0dGVuIGNyYndpbiAoMHgleCkgIT0gIgogCQkJCSJSZWFkIGNyYndpbiAoMHgleCksIG9mZj0weCVseFxuIiwKQEAgLTkzMCwyNCArOTcyLDY5IEBACiAJCSh1bG9uZylhZGFwdGVyLT5haHcucGNpX2Jhc2UwOwogfQogCi1pbnQgbmV0eGVuX2xvYWRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludAorbmV0eGVuX2RvX2xvYWRfZmlybXdhcmUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBjb25zdCBjaGFyICpmd25hbWUsCisJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCiB7Ci0JaW50IGk7Ci0JdTMyIGRhdGEsIHNpemUgPSAwOwotCXUzMiBmbGFzaGFkZHIgPSBORVRYRU5fQk9PVExEX1NUQVJUOworCXU2NCAqcHRyNjQ7CisJdTMyIGksIGZsYXNoYWRkciwgc2l6ZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKLQlzaXplID0gKE5FVFhFTl9JTUFHRV9TVEFSVCAtIE5FVFhFTl9CT09UTERfU1RBUlQpLzQ7CisJaWYgKGZ3KQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibG9hZGluZyBmaXJtd2FyZSBmcm9tIGZpbGUgJXNcbiIsIGZ3bmFtZSk7CisJZWxzZQorCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibG9hZGluZyBmaXJtd2FyZSBmcm9tIGZsYXNoXG4iKTsKIAogCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQogCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsCiAJCQkJTkVUWEVOX1JPTVVTQl9HTEJfQ0FTX1JTVCwgMSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBmbGFzaGFkZHIsIChpbnQgKikmZGF0YSkgIT0gMCkKLQkJCXJldHVybiAtRUlPOworCWlmIChmdykgeworCQlfX2xlNjQgZGF0YTsKIAotCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsIGZsYXNoYWRkciwgJmRhdGEsIDQpOwotCQlmbGFzaGFkZHIgKz0gNDsKKwkJc2l6ZSA9IChORVRYRU5fSU1BR0VfU1RBUlQgLSBORVRYRU5fQk9PVExEX1NUQVJUKSAvIDg7CisKKwkJcHRyNjQgPSAodTY0ICopJmZ3LT5kYXRhW05FVFhFTl9CT09UTERfU1RBUlRdOworCQlmbGFzaGFkZHIgPSBORVRYRU5fQk9PVExEX1NUQVJUOworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWRhdGEgPSBjcHVfdG9fbGU2NChwdHI2NFtpXSk7CisJCQlhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsIGZsYXNoYWRkciwgJmRhdGEsIDgpOworCQkJZmxhc2hhZGRyICs9IDg7CisJCX0KKworCQlzaXplID0gKih1MzIgKikmZnctPmRhdGFbTlhfRldfU0laRV9PRkZTRVRdOworCQlzaXplID0gKF9fZm9yY2UgdTMyKWNwdV90b19sZTMyKHNpemUpIC8gODsKKworCQlwdHI2NCA9ICh1NjQgKikmZnctPmRhdGFbTkVUWEVOX0lNQUdFX1NUQVJUXTsKKwkJZmxhc2hhZGRyID0gTkVUWEVOX0lNQUdFX1NUQVJUOworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWRhdGEgPSBjcHVfdG9fbGU2NChwdHI2NFtpXSk7CisKKwkJCWlmIChhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsCisJCQkJCQlmbGFzaGFkZHIsICZkYXRhLCA4KSkKKwkJCQlyZXR1cm4gLUVJTzsKKworCQkJZmxhc2hhZGRyICs9IDg7CisJCX0KKwl9IGVsc2UgeworCQl1MzIgZGF0YTsKKworCQlzaXplID0gKE5FVFhFTl9JTUFHRV9TVEFSVCAtIE5FVFhFTl9CT09UTERfU1RBUlQpIC8gNDsKKwkJZmxhc2hhZGRyID0gTkVUWEVOX0JPT1RMRF9TVEFSVDsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwKKwkJCQkJZmxhc2hhZGRyLCAoaW50ICopJmRhdGEpICE9IDApCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCWlmIChhZGFwdGVyLT5wY2lfbWVtX3dyaXRlKGFkYXB0ZXIsCisJCQkJCQlmbGFzaGFkZHIsICZkYXRhLCA0KSkKKwkJCQlyZXR1cm4gLUVJTzsKKworCQkJZmxhc2hhZGRyICs9IDQ7CisJCX0KIAl9CiAJbXNsZWVwKDEpOwogCkBAIC05NjQsMTIgKzEwNTEsMTM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK25ldHhlbl92YWxpZGF0ZV9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGNoYXIgKmZ3bmFtZSwKKwkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlfX2xlMzIgdmFsOworCXUzMiBtYWpvciwgbWlub3IsIGJ1aWxkLCB2ZXIsIG1pbl92ZXIsIGJpb3M7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJaWYgKGZ3LT5zaXplIDwgTlhfRldfTUlOX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsID0gY3B1X3RvX2xlMzIoKih1MzIgKikmZnctPmRhdGFbTlhfRldfTUFHSUNfT0ZGU0VUXSk7CisJaWYgKChfX2ZvcmNlIHUzMil2YWwgIT0gTkVUWEVOX0JESU5GT19NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgPSBjcHVfdG9fbGUzMigqKHUzMiAqKSZmdy0+ZGF0YVtOWF9GV19WRVJTSU9OX09GRlNFVF0pOworCW1ham9yID0gKF9fZm9yY2UgdTMyKXZhbCAmIDB4ZmY7CisJbWlub3IgPSAoKF9fZm9yY2UgdTMyKXZhbCA+PiA4KSAmIDB4ZmY7CisJYnVpbGQgPSAoX19mb3JjZSB1MzIpdmFsID4+IDE2OworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCisJCW1pbl92ZXIgPSBORVRYRU5fVkVSU0lPTl9DT0RFKDQsIDAsIDIxNik7CisJZWxzZQorCQltaW5fdmVyID0gTkVUWEVOX1ZFUlNJT05fQ09ERSgzLCA0LCAyMTYpOworCisJdmVyID0gTkVUWEVOX1ZFUlNJT05fQ09ERShtYWpvciwgbWlub3IsIGJ1aWxkKTsKKworCWlmICgobWFqb3IgPiBfTkVUWEVOX05JQ19MSU5VWF9NQUpPUikgfHwgKHZlciA8IG1pbl92ZXIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiJXM6IGZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQgdW5zdXBwb3J0ZWRcbiIsCisJCQkJZnduYW1lLCBtYWpvciwgbWlub3IsIGJ1aWxkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmFsID0gY3B1X3RvX2xlMzIoKih1MzIgKikmZnctPmRhdGFbTlhfQklPU19WRVJTSU9OX09GRlNFVF0pOworCW5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIE5YX0JJT1NfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmYmlvcyk7CisJaWYgKChfX2ZvcmNlIHUzMil2YWwgIT0gYmlvcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogZmlybXdhcmUgYmlvcyBpcyBpbmNvbXBhdGlibGVcbiIsCisJCQkJZnduYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogY2hlY2sgaWYgZmxhc2hlZCBmaXJtd2FyZSBpcyBuZXdlciAqLworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJTlhfRldfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmdmFsKSkKKwkJcmV0dXJuIC1FSU87CisJbWFqb3IgPSAoX19mb3JjZSB1MzIpdmFsICYgMHhmZjsKKwltaW5vciA9ICgoX19mb3JjZSB1MzIpdmFsID4+IDgpICYgMHhmZjsKKwlidWlsZCA9IChfX2ZvcmNlIHUzMil2YWwgPj4gMTY7CisJaWYgKE5FVFhFTl9WRVJTSU9OX0NPREUobWFqb3IsIG1pbm9yLCBidWlsZCkgPiB2ZXIpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV0eGVuX25pY19yZWdfd3JpdGUoYWRhcHRlciwgTkVUWEVOX0NBTV9SQU0oMHgxZmMpLAorCQkJTkVUWEVOX0JESU5GT19NQUdJQyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpmd19uYW1lW10gPSB7ICJueHJvbWltZy5iaW4iLCAibngzZndjdC5iaW4iLCAibngzZndtbi5iaW4iIH07CisKK2ludCBuZXR4ZW5fbG9hZF9maXJtd2FyZShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGNhcGFiaWxpdHksIGZsYXNoZWRfdmVyOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJaW50IGZ3X3R5cGU7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCByYyA9IDA7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkgeworCQlmd190eXBlID0gTlhfUDJfTU5fUk9NSU1BR0U7CisJCWdvdG8gcmVxdWVzdF9mdzsKKwl9IGVsc2UgeworCQlmd190eXBlID0gTlhfUDNfQ1RfUk9NSU1BR0U7CisJCWdvdG8gcmVxdWVzdF9mdzsKKwl9CisKK3JlcXVlc3RfbW46CisJY2FwYWJpbGl0eSA9IDA7CisKKwluZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJTlhfRldfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmZmxhc2hlZF92ZXIpOworCWlmIChmbGFzaGVkX3ZlciA+PSBORVRYRU5fVkVSU0lPTl9DT0RFKDQsIDAsIDIyMCkpIHsKKwkJYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLAorCQkJCU5YX1BFR19UVU5FX0NBUEFCSUxJVFksICZjYXBhYmlsaXR5LCA0KTsKKwkJaWYgKGNhcGFiaWxpdHkgJiBOWF9QRUdfVFVORV9NTl9QUkVTRU5UKSB7CisJCQlmd190eXBlID0gTlhfUDNfTU5fUk9NSU1BR0U7CisJCQlnb3RvIHJlcXVlc3RfZnc7CisJCX0KKwl9CisKK3JlcXVlc3RfZnc6CisJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZVtmd190eXBlXSwgJnBkZXYtPmRldik7CisJaWYgKHJjICE9IDApIHsKKwkJaWYgKGZ3X3R5cGUgPT0gTlhfUDNfQ1RfUk9NSU1BR0UpIHsKKwkJCW1zbGVlcCgxKTsKKwkJCWdvdG8gcmVxdWVzdF9tbjsKKwkJfQorCisJCWZ3ID0gTlVMTDsKKwkJZ290byBsb2FkX2Z3OworCX0KKworCXJjID0gbmV0eGVuX3ZhbGlkYXRlX2Zpcm13YXJlKGFkYXB0ZXIsIGZ3X25hbWVbZndfdHlwZV0sIGZ3KTsKKwlpZiAocmMgIT0gMCkgeworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKworCQlpZiAoZndfdHlwZSA9PSBOWF9QM19DVF9ST01JTUFHRSkgeworCQkJbXNsZWVwKDEpOworCQkJZ290byByZXF1ZXN0X21uOworCQl9CisKKwkJZncgPSBOVUxMOworCX0KKworbG9hZF9mdzoKKwlyYyA9IG5ldHhlbl9kb19sb2FkX2Zpcm13YXJlKGFkYXB0ZXIsIGZ3X25hbWVbZndfdHlwZV0sIGZ3KTsKKworCWlmIChmdykKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJcmV0dXJuIHJjOworfQorCiBpbnQKIG5ldHhlbl9uaWNfaHdfd3JpdGVfd3hfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXVsb25nIG9mZiwgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHI7CiAKKwlCVUdfT04obGVuICE9IDQpOworCiAJaWYgKEFERFJfSU5fV0lORE9XMShvZmYpKSB7CiAJCWFkZHIgPSBORVRYRU5fQ1JCX05PUk1BTElaRShhZGFwdGVyLCBvZmYpOwogCX0gZWxzZSB7CQkvKiBXaW5kb3cgMCAqLwpAQCAtOTc3LDM3ICsxMTg3LDEzIEBACiAJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAwKTsKIAl9CiAKLQlEUFJJTlRLKElORk8sICJ3cml0aW5nIHRvIGJhc2UgJWx4IG9mZnNldCAlbGx4IGFkZHIgJXAiCi0JCSIgZGF0YSAlbGx4IGxlbiAlZFxuIiwKLQkJcGNpX2Jhc2UoYWRhcHRlciwgb2ZmKSwgb2ZmLCBhZGRyLAotCQkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEsIGxlbik7CiAJaWYgKCFhZGRyKSB7CiAJCW5ldHhlbl9uaWNfcGNpX2NoYW5nZV9jcmJ3aW5kb3dfMTI4TShhZGFwdGVyLCAxKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDE6Ci0JCXdyaXRlYigqKHU4ICopIGRhdGEsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXdyaXRldygqKHUxNiAqKSBkYXRhLCBhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQl3cml0ZWwoKih1MzIgKikgZGF0YSwgYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgODoKLQkJd3JpdGVxKCoodTY0ICopIGRhdGEsIGFkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFJJTlRLKElORk8sCi0JCQkid3JpdGluZyBkYXRhICVseCB0byBvZmZzZXQgJWxseCwgbnVtIHdvcmRzPSVkXG4iLAotCQkJKih1bnNpZ25lZCBsb25nICopZGF0YSwgb2ZmLCAobGVuID4+IDMpKTsKKwl3cml0ZWwoKih1MzIgKikgZGF0YSwgYWRkcik7CiAKLQkJbmV0eGVuX25pY19od19ibG9ja193cml0ZTY0KCh1NjQgX19pb21lbSAqKSBkYXRhLCBhZGRyLAotCQkJCQkgICAgKGxlbiA+PiAzKSk7Ci0JCWJyZWFrOwotCX0KIAlpZiAoIUFERFJfSU5fV0lORE9XMShvZmYpKQogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CiAKQEAgLTEwMjAsNiArMTIwNiw4IEBACiB7CiAJdm9pZCBfX2lvbWVtICphZGRyOwogCisJQlVHX09OKGxlbiAhPSA0KTsKKwogCWlmIChBRERSX0lOX1dJTkRPVzEob2ZmKSkgewkvKiBXaW5kb3cgMSAqLwogCQlhZGRyID0gTkVUWEVOX0NSQl9OT1JNQUxJWkUoYWRhcHRlciwgb2ZmKTsKIAl9IGVsc2UgewkJLyogV2luZG93IDAgKi8KQEAgLTEwMjcsMzEgKzEyMTUsMTIgQEAKIAkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDApOwogCX0KIAotCURQUklOVEsoSU5GTywgInJlYWRpbmcgZnJvbSBiYXNlICVseCBvZmZzZXQgJWxseCBhZGRyICVwXG4iLAotCQlwY2lfYmFzZShhZGFwdGVyLCBvZmYpLCBvZmYsIGFkZHIpOwogCWlmICghYWRkcikgewogCQluZXR4ZW5fbmljX3BjaV9jaGFuZ2VfY3Jid2luZG93XzEyOE0oYWRhcHRlciwgMSk7CiAJCXJldHVybiAxOwogCX0KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJKih1OCAqKSBkYXRhID0gcmVhZGIoYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJKih1MTYgKikgZGF0YSA9IHJlYWR3KGFkZHIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCSoodTMyICopIGRhdGEgPSByZWFkbChhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQkqKHU2NCAqKSBkYXRhID0gcmVhZHEoYWRkcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCW5ldHhlbl9uaWNfaHdfYmxvY2tfcmVhZDY0KCh1NjQgX19pb21lbSAqKSBkYXRhLCBhZGRyLAotCQkJCQkgICAobGVuID4+IDMpKTsKLQkJYnJlYWs7Ci0JfQotCURQUklOVEsoSU5GTywgInJlYWQgJWx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgKilkYXRhKTsKKworCSoodTMyICopZGF0YSA9IHJlYWRsKGFkZHIpOwogCiAJaWYgKCFBRERSX0lOX1dJTkRPVzEob2ZmKSkKIAkJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDEpOwpAQCAtMTA2Niw2ICsxMjM1LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlpbnQgcnY7CiAKKwlCVUdfT04obGVuICE9IDQpOworCiAJcnYgPSBuZXR4ZW5fbmljX3BjaV9nZXRfY3JiX2FkZHJfMk0oYWRhcHRlciwgJm9mZiwgbGVuKTsKIAogCWlmIChydiA9PSAtMSkgewpAQCAtMTA3OSwzNCArMTI1MCwxMiBAQAogCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwogCQljcmJfd2luX2xvY2soYWRhcHRlcik7CiAJCW5ldHhlbl9uaWNfcGNpX3NldF9jcmJ3aW5kb3dfMk0oYWRhcHRlciwgJm9mZik7Ci0JfQotCi0JRFBSSU5USygxLCBJTkZPLCAid3JpdGUgZGF0YSAlbHggdG8gb2Zmc2V0ICVsbHgsIGxlbj0lZFxuIiwKLQkJCSoodW5zaWduZWQgbG9uZyAqKWRhdGEsIG9mZiwgbGVuKTsKLQotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCQl3cml0ZWIoKih1aW50OF90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXdyaXRldygqKHVpbnQxNl90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXdyaXRlbCgqKHVpbnQzMl90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQljYXNlIDg6Ci0JCXdyaXRlcSgqKHVpbnQ2NF90ICopZGF0YSwgKHZvaWQgKilvZmYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlEUFJJTlRLKDEsIElORk8sCi0JCQkid3JpdGluZyBkYXRhICVseCB0byBvZmZzZXQgJWxseCwgbnVtIHdvcmRzPSVkXG4iLAotCQkJKih1bnNpZ25lZCBsb25nICopZGF0YSwgb2ZmLCAobGVuPj4zKSk7Ci0JCWJyZWFrOwotCX0KLQlpZiAocnYgPT0gMSkgeworCQl3cml0ZWwoKih1aW50MzJfdCAqKWRhdGEsICh2b2lkIF9faW9tZW0gKilvZmYpOwogCQljcmJfd2luX3VubG9jayhhZGFwdGVyKTsKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCX0KKwl9IGVsc2UKKwkJd3JpdGVsKCoodWludDMyX3QgKilkYXRhLCAodm9pZCBfX2lvbWVtICopb2ZmKTsKKwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTE4LDYgKzEyNjcsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCWludCBydjsKIAorCUJVR19PTihsZW4gIT0gNCk7CisKIAlydiA9IG5ldHhlbl9uaWNfcGNpX2dldF9jcmJfYWRkcl8yTShhZGFwdGVyLCAmb2ZmLCBsZW4pOwogCiAJaWYgKHJ2ID09IC0xKSB7CkBAIC0xMTMxLDMzICsxMjgyLDExIEBACiAJCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJCWNyYl93aW5fbG9jayhhZGFwdGVyKTsKIAkJbmV0eGVuX25pY19wY2lfc2V0X2NyYndpbmRvd18yTShhZGFwdGVyLCAmb2ZmKTsKLQl9Ci0KLQlEUFJJTlRLKDEsIElORk8sICJyZWFkIGZyb20gb2Zmc2V0ICVseCwgbGVuPSVkXG4iLCBvZmYsIGxlbik7Ci0KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJKih1aW50OF90ICopZGF0YSA9IHJlYWRiKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqKHVpbnQxNl90ICopZGF0YSA9IHJlYWR3KCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQkqKHVpbnQzMl90ICopZGF0YSA9IHJlYWRsKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JY2FzZSA4OgotCQkqKHVpbnQ2NF90ICopZGF0YSA9IHJlYWRxKCh2b2lkICopb2ZmKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbHhcbiIsICoodW5zaWduZWQgbG9uZyAqKWRhdGEpOwotCi0JaWYgKHJ2ID09IDEpIHsKKwkJKih1aW50MzJfdCAqKWRhdGEgPSByZWFkbCgodm9pZCBfX2lvbWVtICopb2ZmKTsKIAkJY3JiX3dpbl91bmxvY2soYWRhcHRlcik7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQl9CisJfSBlbHNlCisJCSoodWludDMyX3QgKilkYXRhID0gcmVhZGwoKHZvaWQgX19pb21lbSAqKW9mZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE0MTksMTAgKzE1NDgsOSBAQAogCQkJdTY0IG9mZiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl2b2lkICphZGRyOworCXZvaWQgX19pb21lbSAqYWRkciwgKm1lbV9wdHIgPSBOVUxMOwogCWludCByZXQgPSAwOwogCXU2NCBzdGFydDsKLQl1aW50OF90ICptZW1fcHRyID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIG1lbV9iYXNlOwogCXVuc2lnbmVkIGxvbmcgbWVtX3BhZ2U7CiAKQEAgLTE0NDIsNyArMTU3MCw3IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlhZGRyID0gKHZvaWQgKikocGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIHN0YXJ0KSk7CisJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBzdGFydCk7CiAJaWYgKCFhZGRyKSB7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKIAkJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoYWRhcHRlci0+cGRldiwgMCk7CkBAIC0xNDgxLDcgKzE2MDksNiBAQAogCQlicmVhazsKIAl9CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jaywgZmxhZ3MpOwotCURQUklOVEsoMSwgSU5GTywgInJlYWQgJWxseFxuIiwgKih1bnNpZ25lZCBsb25nIGxvbmcgKilkYXRhKTsKIAogCWlmIChtZW1fcHRyKQogCQlpb3VubWFwKG1lbV9wdHIpOwpAQCAtMTQ5MywxMCArMTYyMCw5IEBACiAJCXZvaWQgKmRhdGEsIGludCBzaXplKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jdm9pZCAqYWRkcjsKKwl2b2lkIF9faW9tZW0gKmFkZHIsICptZW1fcHRyID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKIAl1NjQgc3RhcnQ7Ci0JdWludDhfdCAqbWVtX3B0ciA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBtZW1fYmFzZTsKIAl1bnNpZ25lZCBsb25nIG1lbV9wYWdlOwogCkBAIC0xNTE2LDcgKzE2NDIsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JYWRkciA9ICh2b2lkICopKHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBzdGFydCkpOworCWFkZHIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgc3RhcnQpOwogCWlmICghYWRkcikgewogCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPnBkZXYsIDApOwpAQCAtMTU1Myw4ICsxNjc5LDYgQEAKIAkJYnJlYWs7CiAJfQogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5hZGFwdGVyX2xvY2ssIGZsYWdzKTsKLQlEUFJJTlRLKDEsIElORk8sICJ3cml0aW5nIGRhdGEgJWxseCB0byBvZmZzZXQgJWxseFxuIiwKLQkJCSoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSwgc3RhcnQpOwogCWlmIChtZW1fcHRyKQogCQlpb3VubWFwKG1lbV9wdHIpOwogCXJldHVybiByZXQ7CkBAIC0xNTY2LDEwICsxNjkwLDExIEBACiBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewotCXVuc2lnbmVkIGxvbmcgICBmbGFncywgbWVtX2NyYjsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CiAJaW50CSAgICAgaSwgaiwgcmV0ID0gMCwgbG9vcCwgc3pbMl0sIG9mZjA7CiAJdWludDMyX3QgICAgICB0ZW1wOwogCXVpbnQ2NF90ICAgICAgb2ZmOCwgdG1wdywgd29yZFsyXSA9IHswLCAwfTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CiAKIAkvKgogCSAqIElmIG5vdCBNTiwgZ28gY2hlY2sgZm9yIE1TIG9yIGludmFsaWQuCkBAIC0xNTgzLDcgKzE3MDgsNyBAQAogCXN6WzBdID0gKHNpemUgPCAoOCAtIG9mZjApKSA/IHNpemUgOiAoOCAtIG9mZjApOwogCXN6WzFdID0gc2l6ZSAtIHN6WzBdOwogCWxvb3AgPSAoKG9mZjAgKyBzaXplIC0gMSkgPj4gMykgKyAxOwotCW1lbV9jcmIgPSAodW5zaWduZWQgbG9uZylwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKKwltZW1fY3JiID0gcGNpX2Jhc2Vfb2Zmc2V0KGFkYXB0ZXIsIE5FVFhFTl9DUkJfRERSX05FVCk7CiAKIAlpZiAoKHNpemUgIT0gOCkgfHwgKG9mZjAgIT0gMCkpICB7CiAJCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKQEAgLTE2MjEsMjggKzE3NDYsMjkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBsb29wOyBpKyspIHsKIAkJd3JpdGVsKCh1aW50MzJfdCkob2ZmOCArIChpIDw8IDMpKSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0xPKSk7CiAJCXdyaXRlbCgwLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSkpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfSEkpKTsKIAkJd3JpdGVsKHdvcmRbaV0gJiAweGZmZmZmZmZmLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0xPKSk7CiAJCXdyaXRlbCgod29yZFtpXSA+PiAzMikgJiAweGZmZmZmZmZmLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0hJKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfV1JEQVRBX0hJKSk7CiAJCXdyaXRlbChNSVVfVEFfQ1RMX0VOQUJMRXxNSVVfVEFfQ1RMX1dSSVRFLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKIAkJd3JpdGVsKE1JVV9UQV9DVExfU1RBUlR8TUlVX1RBX0NUTF9FTkFCTEV8TUlVX1RBX0NUTF9XUklURSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9DVExfQ0hFQ0s7IGorKykgewogCQkJdGVtcCA9IHJlYWRsKAotCQkJICAgICAodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCQkgICAgIChtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAJCQlpZiAoKHRlbXAgJiBNSVVfVEFfQ1RMX0JVU1kpID09IDApCiAJCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7Ci0JCQlwcmludGsoIiVzOiAlcyBGYWlsIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCV9fZnVuY19fLCBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIpOwogCQkJcmV0ID0gLTE7CiAJCQlicmVhazsKIAkJfQpAQCAtMTY1NywxMCArMTc4MywxMSBAQAogbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMTI4TShzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCXU2NCBvZmYsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewotCXVuc2lnbmVkIGxvbmcgICBmbGFncywgbWVtX2NyYjsKKwl1bnNpZ25lZCBsb25nICAgZmxhZ3M7CiAJaW50CSAgICAgaSwgaiA9IDAsIGssIHN0YXJ0LCBlbmQsIGxvb3AsIHN6WzJdLCBvZmYwWzJdOwogCXVpbnQzMl90ICAgICAgdGVtcDsKIAl1aW50NjRfdCAgICAgIG9mZjgsIHZhbCwgd29yZFsyXSA9IHswLCAwfTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CiAKIAogCS8qCkBAIC0xNjc1LDMxICsxODAyLDMyIEBACiAJc3pbMF0gPSAoc2l6ZSA8ICg4IC0gb2ZmMFswXSkpID8gc2l6ZSA6ICg4IC0gb2ZmMFswXSk7CiAJc3pbMV0gPSBzaXplIC0gc3pbMF07CiAJbG9vcCA9ICgob2ZmMFswXSArIHNpemUgLSAxKSA+PiAzKSArIDE7Ci0JbWVtX2NyYiA9ICh1bnNpZ25lZCBsb25nKXBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBORVRYRU5fQ1JCX0REUl9ORVQpOworCW1lbV9jcmIgPSBwY2lfYmFzZV9vZmZzZXQoYWRhcHRlciwgTkVUWEVOX0NSQl9ERFJfTkVUKTsKIAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+YWRhcHRlcl9sb2NrLCBmbGFncyk7CiAJbmV0eGVuX25pY19wY2lfY2hhbmdlX2NyYndpbmRvd18xMjhNKGFkYXB0ZXIsIDApOwogCiAJZm9yIChpID0gMDsgaSA8IGxvb3A7IGkrKykgewogCQl3cml0ZWwoKHVpbnQzMl90KShvZmY4ICsgKGkgPDwgMykpLAotCQkJKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9MTykpOworCQkJKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0FERFJfTE8pKTsKIAkJd3JpdGVsKDAsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9BRERSX0hJKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfQUREUl9ISSkpOwogCQl3cml0ZWwoTUlVX1RBX0NUTF9FTkFCTEUsCi0JCQkodm9pZCAqKShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CisJCQkobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOwogCQl3cml0ZWwoTUlVX1RBX0NUTF9TVEFSVHxNSVVfVEFfQ1RMX0VOQUJMRSwKLQkJCSh2b2lkICopKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKKwkJCShtZW1fY3JiK01JVV9URVNUX0FHVF9DVFJMKSk7CiAKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9DVExfQ0hFQ0s7IGorKykgewogCQkJdGVtcCA9IHJlYWRsKAotCQkJICAgICAgKHZvaWQgKikobWVtX2NyYitNSVVfVEVTVF9BR1RfQ1RSTCkpOworCQkJICAgICAgKG1lbV9jcmIrTUlVX1RFU1RfQUdUX0NUUkwpKTsKIAkJCWlmICgodGVtcCAmIE1JVV9UQV9DVExfQlVTWSkgPT0gMCkKIAkJCQlicmVhazsKIAkJfQogCiAJCWlmIChqID49IE1BWF9DVExfQ0hFQ0spIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICVzIEZhaWwgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iLAotCQkJCQlfX2Z1bmNfXywgbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJImZhaWxlZCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTcwNyw3ICsxODM1LDcgQEAKIAkJZW5kICAgPSAob2ZmMFtpXSArIHN6W2ldIC0gMSkgPj4gMjsKIAkJZm9yIChrID0gc3RhcnQ7IGsgPD0gZW5kOyBrKyspIHsKIAkJCXdvcmRbaV0gfD0gKCh1aW50NjRfdCkgcmVhZGwoCi0JCQkJICAgICh2b2lkICopKG1lbV9jcmIgKworCQkJCSAgICAobWVtX2NyYiArCiAJCQkJICAgIE1JVV9URVNUX0FHVF9SRERBVEEoaykpKSA8PCAoMzIqaykpOwogCQl9CiAJfQpAQCAtMTczOSw3ICsxODY3LDYgQEAKIAkJKih1aW50NjRfdCAqKWRhdGEgPSB2YWw7CiAJCWJyZWFrOwogCX0KLQlEUFJJTlRLKDEsIElORk8sICJyZWFkICVsbHhcbiIsICoodW5zaWduZWQgbG9uZyBsb25nICopZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4MzUsOCArMTk2Miw5IEBACiAJCX0KIAogCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsIHRvIHdyaXRlIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gd3JpdGUgdGhyb3VnaCBhZ2VudFxuIik7CiAJCQlyZXQgPSAtMTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xOTA1LDggKzIwMzMsOSBAQAogCQl9CiAKIAkJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbCB0byByZWFkIHRocm91Z2ggYWdlbnRcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOworCQkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gcmVhZCB0aHJvdWdoIGFnZW50XG4iKTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTE5NDgsNyArMjA3Nyw2IEBACiAJCSoodWludDY0X3QgKilkYXRhID0gdmFsOwogCQlicmVhazsKIAl9Ci0JRFBSSU5USygxLCBJTkZPLCAicmVhZCAlbGx4XG4iLCAqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWRhdGEpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTgzLDYyICsyMTExLDQ2IEBACiAJcmV0dXJuIHRlbXA7CiB9CiAKLSNpZiAwCi1pbnQKLW5ldHhlbl9uaWNfZXJhc2VfcHhlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAobmV0eGVuX3JvbV9mYXN0X3dyaXRlKGFkYXB0ZXIsIE5FVFhFTl9QWEVfU1RBUlQsIDApID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVyYXNlIHB4ZSBmYWlsZWRcbiIsCi0JCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIGludCBuZXR4ZW5fbmljX2dldF9ib2FyZF9pbmZvKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgcnYgPSAwOwotCWludCBhZGRyID0gTkVUWEVOX0JSRENGR19TVEFSVDsKLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkaW5mbzsKLQlpbnQgaW5kZXg7Ci0JdTMyICpwdHIzMjsKKwlpbnQgb2Zmc2V0LCBib2FyZF90eXBlLCBtYWdpYywgaGVhZGVyX3ZlcnNpb247CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCi0JYm9hcmRpbmZvID0gJmFkYXB0ZXItPmFody5ib2FyZGNmZzsKLQlwdHIzMiA9ICh1MzIgKikgYm9hcmRpbmZvOworCW9mZnNldCA9IE5FVFhFTl9CUkRDRkdfU1RBUlQgKworCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8sIG1hZ2ljKTsKKwlpZiAobmV0eGVuX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgb2Zmc2V0LCAmbWFnaWMpKQorCQlyZXR1cm4gLUVJTzsKIAotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNpemVvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8pIC8gc2l6ZW9mKHUzMik7Ci0JICAgICBpbmRleCsrKSB7Ci0JCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBhZGRyLCBwdHIzMikgPT0gLTEpIHsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JCXB0cjMyKys7Ci0JCWFkZHIgKz0gc2l6ZW9mKHUzMik7Ci0JfQotCWlmIChib2FyZGluZm8tPm1hZ2ljICE9IE5FVFhFTl9CRElORk9fTUFHSUMpIHsKLQkJcHJpbnRrKCIlczogRVJST1IgcmVhZGluZyAlcyBib2FyZCBjb25maWcuIgotCQkgICAgICAgIiBSZWFkICV4LCBleHBlY3RlZCAleFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJICAgICAgIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCSAgICAgICBib2FyZGluZm8tPm1hZ2ljLCBORVRYRU5fQkRJTkZPX01BR0lDKTsKLQkJcnYgPSAtMTsKLQl9Ci0JaWYgKGJvYXJkaW5mby0+aGVhZGVyX3ZlcnNpb24gIT0gTkVUWEVOX0JESU5GT19WRVJTSU9OKSB7Ci0JCXByaW50aygiJXM6IFVua25vd24gYm9hcmQgY29uZmlnIHZlcnNpb24uIgotCQkgICAgICAgIiBSZWFkICV4LCBleHBlY3RlZCAleFxuIiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJICAgICAgIGJvYXJkaW5mby0+aGVhZGVyX3ZlcnNpb24sIE5FVFhFTl9CRElORk9fVkVSU0lPTik7Ci0JCXJ2ID0gLTE7CisJb2Zmc2V0ID0gTkVUWEVOX0JSRENGR19TVEFSVCArCisJCW9mZnNldG9mKHN0cnVjdCBuZXR4ZW5fYm9hcmRfaW5mbywgaGVhZGVyX3ZlcnNpb24pOworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZoZWFkZXJfdmVyc2lvbikpCisJCXJldHVybiAtRUlPOworCisJaWYgKG1hZ2ljICE9IE5FVFhFTl9CRElORk9fTUFHSUMgfHwKKwkJCWhlYWRlcl92ZXJzaW9uICE9IE5FVFhFTl9CRElORk9fVkVSU0lPTikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiaW52YWxpZCBib2FyZCBjb25maWcsIG1hZ2ljPSUwOHgsIHZlcnNpb249JTA4eFxuIiwKKwkJCW1hZ2ljLCBoZWFkZXJfdmVyc2lvbik7CisJCXJldHVybiAtRUlPOwogCX0KIAotCWlmIChib2FyZGluZm8tPmJvYXJkX3R5cGUgPT0gTkVUWEVOX0JSRFRZUEVfUDNfNF9HQl9NTSkgeworCW9mZnNldCA9IE5FVFhFTl9CUkRDRkdfU1RBUlQgKworCQlvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8sIGJvYXJkX3R5cGUpOworCWlmIChuZXR4ZW5fcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZib2FyZF90eXBlKSkKKwkJcmV0dXJuIC1FSU87CisKKwlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IGJvYXJkX3R5cGU7CisKKwlpZiAoYm9hcmRfdHlwZSA9PSBORVRYRU5fQlJEVFlQRV9QM180X0dCX01NKSB7CiAJCXUzMiBncGlvID0gbmV0eGVuX25pY19yZWdfcmVhZChhZGFwdGVyLAogCQkJCU5FVFhFTl9ST01VU0JfR0xCX1BBRF9HUElPX0kpOwogCQlpZiAoKGdwaW8gJiAweDgwMDApID09IDApCi0JCQlib2FyZGluZm8tPmJvYXJkX3R5cGUgPSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA7CisJCQlib2FyZF90eXBlID0gTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1RQOwogCX0KIAotCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpIGJvYXJkaW5mby0+Ym9hcmRfdHlwZSkgeworCXN3aXRjaCAoKG5ldHhlbl9icmR0eXBlX3QpYm9hcmRfdHlwZSkgewogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzNV80RzoKLQkJYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPSBORVRYRU5fTklDX0dCRTsKKwkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9IE5FVFhFTl9OSUNfR0JFOwogCQlicmVhazsKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWjoKQEAgLTIwNTQsNyArMjE2Niw3IEBACiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfU0ZQX1FUOgogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1hGUDoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwMDAwX0JBU0VfVDoKLQkJYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CiAJCWJyZWFrOwogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDFfQkQ6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QMV9TQjoKQEAgLTIwNjMsMjAgKzIxNzUsMTkgQEAKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzX1JFRl9RRzoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzRfR0I6CiAJY2FzZSBORVRYRU5fQlJEVFlQRV9QM180X0dCX01NOgotCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IE5FVFhFTl9OSUNfR0JFOworCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gTkVUWEVOX05JQ19HQkU7CiAJCWJyZWFrOwogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1RQOgotCQlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IChhZGFwdGVyLT5wb3J0bnVtIDwgMikgPworCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gKGFkYXB0ZXItPnBvcnRudW0gPCAyKSA/CiAJCQlORVRYRU5fTklDX1hHQkUgOiBORVRYRU5fTklDX0dCRTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogVW5rbm93bigleClcbiIsIG5ldHhlbl9uaWNfZHJpdmVyX25hbWUsCi0JCSAgICAgICBib2FyZGluZm8tPmJvYXJkX3R5cGUpOwotCQlydiA9IC1FTk9ERVY7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVua25vd24gYm9hcmQgdHlwZSAleFxuIiwgYm9hcmRfdHlwZSk7CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBORVRYRU5fTklDX1hHQkU7CiAJCWJyZWFrOwogCX0KIAotCXJldHVybiBydjsKKwlyZXR1cm4gMDsKIH0KIAogLyogTklVIGFjY2VzcyBzZWN0aW9ucyAqLwpAQCAtMjEyMiw3ICsyMjMzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX0dCRSkgeworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKSB7CiAJCWFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwKIAkJCQlORVRYRU5fUE9SVF9NT0RFX0FERFIsICZwb3J0X21vZGUsIDQpOwogCQlpZiAocG9ydF9tb2RlID09IE5FVFhFTl9QT1JUX01PREVfODAyXzNfQVApIHsKQEAgLTIxNzcsMzIgKzIyODgsMjcgQEAKIAl9CiB9CiAKLXZvaWQgbmV0eGVuX25pY19mbGFzaF9wcmludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIG5ldHhlbl9uaWNfZ2V0X2Zpcm13YXJlX2luZm8oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewotCXUzMiBmd19tYWpvciA9IDA7Ci0JdTMyIGZ3X21pbm9yID0gMDsKLQl1MzIgZndfYnVpbGQgPSAwOworCXUzMiBmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkOwogCWNoYXIgYnJkX25hbWVbTkVUWEVOX01BWF9TSE9SVF9OQU1FXTsKIAljaGFyIHNlcmlhbF9udW1bMzJdOwotCWludCBpLCBhZGRyOwotCV9fbGUzMiAqcHRyMzI7Ci0KLQlzdHJ1Y3QgbmV0eGVuX2JvYXJkX2luZm8gKmJvYXJkX2luZm8gPSAmKGFkYXB0ZXItPmFody5ib2FyZGNmZyk7CisJaW50IGksIGFkZHIsIHZhbDsKKwlpbnQgKnB0cjMyOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAogCWFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCA9IDA7CiAKLQlwdHIzMiA9ICh1MzIgKikmc2VyaWFsX251bTsKKwlwdHIzMiA9IChpbnQgKikmc2VyaWFsX251bTsKIAlhZGRyID0gTkVUWEVOX1VTRVJfU1RBUlQgKwogCSAgICAgICBvZmZzZXRvZihzdHJ1Y3QgbmV0eGVuX25ld191c2VyX2luZm8sIHNlcmlhbF9udW0pOwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsIHB0cjMyKSA9PSAtMSkgewotCQkJcHJpbnRrKCIlczogRVJST1IgcmVhZGluZyAlcyBib2FyZCB1c2VyYXJlYS5cbiIsCi0JCQkgICAgICAgbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKLQkJCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lKTsKKwkJaWYgKG5ldHhlbl9yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsICZ2YWwpID09IC0xKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciByZWFkaW5nIGJvYXJkIGluZm9cbiIpOwogCQkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKIAkJCXJldHVybjsKIAkJfQotCQlwdHIzMisrOworCQlwdHIzMltpXSA9IGNwdV90b19sZTMyKHZhbCk7CiAJCWFkZHIgKz0gc2l6ZW9mKHUzMik7CiAJfQogCkBAIC0yMjExLDIzICsyMzE3LDQ4IEBACiAJYWRhcHRlci0+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+bnVtX2Rlc2MgLSAxKSk7CiAJCQl3bWIoKTsKIAl9CisJc3Bpbl91bmxvY2soJnJkc19yaW5nLT5sb2NrKTsKIH0KIAogdm9pZCBuZXR4ZW5fbmljX2NsZWFyX3N0YXRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwppbmRleCBjMTcyYjZlLi4xYWY0NzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwxMiArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICoKLSAqCi0gKiAgTWFpbiBzb3VyY2UgZmlsZSBmb3IgTmV0WGVuIE5JQyBEcml2ZXIgb24gTGludXgKKyAqIE5ldFhlbiBJbmMsCisgKiAxODkyMiBGb3JnZSBEcml2ZQorICogQ3VwZXJ0aW5vLCBDQSA5NTAxNC0wNzAxCiAgKgogICovCiAKQEAgLTk3LDIwICs5NCw2IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuZXR4ZW5fcGNpX3RibCk7CiAKLS8qCi0gKiBJbiBuZXR4ZW5fbmljX2Rvd24oKSwgd2UgbXVzdCB3YWl0IGZvciBhbnkgcGVuZGluZyBjYWxsYmFjayByZXF1ZXN0cyBpbnRvCi0gKiBuZXR4ZW5fd2F0Y2hkb2dfdGFzaygpIHRvIGNvbXBsZXRlOyBlZyBvdGhlcndpc2UgdGhlIHdhdGNoZG9nX3RpbWVyIGNvdWxkIGJlCi0gKiByZWVuYWJsZWQgcmlnaHQgYWZ0ZXIgaXQgaXMgZGVsZXRlZCBpbiBuZXR4ZW5fbmljX2Rvd24oKS4KLSAqIEZMVVNIX1NDSEVEVUxFRF9XT1JLKCkgIGRvZXMgdGhpcyBzeW5jaHJvbml6YXRpb24uCi0gKgotICogTm9ybWFsbHksIHNjaGVkdWxlX3dvcmsoKS9mbHVzaF9zY2hlZHVsZWRfd29yaygpIGNvdWxkIGhhdmUgd29ya2VkLCBidXQKLSAqIG5ldHhlbl9uaWNfY2xvc2UoKSBpcyBpbnZva2VkIHdpdGgga2VybmVsIHJ0bmwgbG9jayBoZWxkLiBuZXRpZl9jYXJyaWVyX29mZigpCi0gKiBjYWxsIGluIG5ldHhlbl9uaWNfY2xvc2UoKSB0cmlnZ2VycyBhIHNjaGVkdWxlX3dvcmsoJmxpbmt3YXRjaF93b3JrKSwgYW5kIGEKLSAqIHN1YnNlcXVlbnQgY2FsbCB0byBmbHVzaF9zY2hlZHVsZWRfd29yaygpIGluIG5ldHhlbl9uaWNfZG93bigpIHdvdWxkIGNhdXNlCi0gKiBsaW5rd2F0Y2hfZXZlbnQoKSB0byBiZSBleGVjdXRlZCB3aGljaCBhbHNvIGF0dGVtcHRzIHRvIGFjcXVpcmUgdGhlIHJ0bmwKLSAqIGxvY2sgdGh1cyBjYXVzaW5nIGEgZGVhZGxvY2suCi0gKi8KLQogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpuZXR4ZW5fd29ya3E7CiAjZGVmaW5lIFNDSEVEVUxFX1dPUksodHApCXF1ZXVlX3dvcmsobmV0eGVuX3dvcmtxLCB0cCkKICNkZWZpbmUgRkxVU0hfU0NIRURVTEVEX1dPUksoKQlmbHVzaF93b3JrcXVldWUobmV0eGVuX3dvcmtxKQpAQCAtMTUyLDEzMCArMTM1LDE0OCBAQAogCiBzdGF0aWMgc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgbGVnYWN5X2ludHJbXSA9IE5YX0xFR0FDWV9JTlRSX0NPTkZJRzsKIAotc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nKQogewotCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUoYWRhcHRlciwgYWRhcHRlci0+Y3JiX2ludHJfbWFzaywgMCk7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrLCAwKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5ldHhlbl9uaWNfZW5hYmxlX2ludChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgaW5saW5lIHZvaWQgbmV0eGVuX25pY19lbmFibGVfaW50KHN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZykKIHsKLQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIGFkYXB0ZXItPmNyYl9pbnRyX21hc2ssIDB4MSk7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrLCAweDEpOwogCiAJaWYgKCFORVRYRU5fSVNfTVNJX0ZBTUlMWShhZGFwdGVyKSkKIAkJYWRhcHRlci0+cGNpX3dyaXRlX2ltbWVkaWF0ZShhZGFwdGVyLAogCQkJCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9tYXNrX3JlZywgMHhmYmZmKTsKIH0KIAorc3RhdGljIHZvaWQKK25ldHhlbl9uYXBpX2FkZChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJpbmc7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXN0cnVjdCBuZXR4ZW5fcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQorCQlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gKG51bV9vbmxpbmVfY3B1cygpID49IDQpID8gNCA6IDI7CisJZWxzZQorCQlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gMTsKKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmc2RzX3JpbmctPm5hcGksCisJCQkJbmV0eGVuX25pY19wb2xsLCBORVRYRU5fTkVUREVWX1dFSUdIVCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorbmV0eGVuX25hcGlfZW5hYmxlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQluYXBpX2VuYWJsZSgmc2RzX3JpbmctPm5hcGkpOworCQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoc2RzX3JpbmcpOworCX0KK30KKworc3RhdGljIHZvaWQKK25ldHhlbl9uYXBpX2Rpc2FibGUoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCByaW5nOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlzdHJ1Y3QgbmV0eGVuX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisJCW5ldHhlbl9uaWNfZGlzYWJsZV9pbnQoc2RzX3JpbmcpOworCQluYXBpX2Rpc2FibGUoJnNkc19yaW5nLT5uYXBpKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgbnhfc2V0X2RtYV9tYXNrKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdWludDhfdCByZXZpc2lvbl9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0JaW50IGVycjsKLQl1aW50NjRfdCBtYXNrOworCXVpbnQ2NF90IG1hc2ssIGNtYXNrOwogCi0jaWZkZWYgQ09ORklHX0lBNjQKLQlhZGFwdGVyLT5kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOwotI2Vsc2UKLQlpZiAocmV2aXNpb25faWQgPj0gTlhfUDNfQjApIHsKLQkJLyogc2hvdWxkIGdvIHRvIERNQV82NEJJVF9NQVNLICovCi0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM5QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKLQl9IGVsc2UgaWYgKHJldmlzaW9uX2lkID09IE5YX1AzX0EyKSB7Ci0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM5QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKLQl9IGVsc2UgaWYgKHJldmlzaW9uX2lkID09IE5YX1AyX0MxKSB7Ci0JCWFkYXB0ZXItPmRtYV9tYXNrID0gRE1BXzM1QklUX01BU0s7Ci0JCW1hc2sgPSBETUFfMzVCSVRfTUFTSzsKLQl9IGVsc2UgewotCQlhZGFwdGVyLT5kbWFfbWFzayA9IERNQV8zMkJJVF9NQVNLOwotCQltYXNrID0gRE1BXzMyQklUX01BU0s7Ci0JCWdvdG8gc2V0XzMyX2JpdF9tYXNrOwotCX0KKwlhZGFwdGVyLT5wY2lfdXNpbmdfZGFjID0gMDsKIAorCW1hc2sgPSBETUFfMzJCSVRfTUFTSzsKIAkvKgogCSAqIENvbnNpc3RlbnQgRE1BIG1hc2sgaXMgc2V0IHRvIDMyIGJpdCBiZWNhdXNlIGl0IGNhbm5vdCBiZSBzZXQgdG8KIAkgKiAzNSBiaXRzLiBGb3IgUDMgYWxzbyBsZWF2ZSBpdCBhdCAzMiBiaXRzIGZvciBub3cuIE9ubHkgdGhlIHJpbmdzCiAJICogY29tZSBvZmYgdGhpcyBwb29sLgogCSAqLworCWNtYXNrID0gRE1BXzMyQklUX01BU0s7CisKKyNpZm5kZWYgQ09ORklHX0lBNjQKKwlpZiAocmV2aXNpb25faWQgPj0gTlhfUDNfQjApCisJCW1hc2sgPSBETUFfMzlCSVRfTUFTSzsKKwllbHNlIGlmIChyZXZpc2lvbl9pZCA9PSBOWF9QMl9DMSkKKwkJbWFzayA9IERNQV8zNUJJVF9NQVNLOworI2VuZGlmCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFzaykgPT0gMCAmJgotCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spID09IDApIHsKKwkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIGNtYXNrKSA9PSAwKSB7CiAJCWFkYXB0ZXItPnBjaV91c2luZ19kYWMgPSAxOwogCQlyZXR1cm4gMDsKIAl9Ci1zZXRfMzJfYml0X21hc2s6Ci0jZW5kaWYgLyogQ09ORklHX0lBNjQgKi8KIAotCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCWlmICghZXJyKQotCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwotCWlmIChlcnIpIHsKLQkJRFBSSU5USyhFUlIsICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nOiVkXG4iLCBlcnIpOwotCQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlPOworfQorCisvKiBVcGRhdGUgYWRkcmVzc2FibGUgcmFuZ2UgaWYgZmlybXdhcmUgc3VwcG9ydHMgaXQgKi8KK3N0YXRpYyBpbnQKK254X3VwZGF0ZV9kbWFfbWFzayhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGNoYW5nZSwgc2hpZnQsIGVycjsKKwl1aW50NjRfdCBtYXNrLCBvbGRfbWFzazsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwljaGFuZ2UgPSAwOworCisJc2hpZnQgPSBuZXR4ZW5fbmljX3JlZ19yZWFkKGFkYXB0ZXIsIENSQl9ETUFfU0hJRlQpOworCWlmIChzaGlmdCA+PSAzMikKKwkJcmV0dXJuIDA7CisKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSAmJiAoc2hpZnQgPiA5KSkKKwkJY2hhbmdlID0gMTsKKwllbHNlIGlmICgoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkID09IE5YX1AyX0MxKSAmJiAoc2hpZnQgPD0gNCkpCisJCWNoYW5nZSA9IDE7CisKKwlpZiAoY2hhbmdlKSB7CisJCW9sZF9tYXNrID0gcGRldi0+ZG1hX21hc2s7CisJCW1hc2sgPSAoMVVMTDw8KDMyK3NoaWZ0KSkgLSAxOworCisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgbWFzayk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBvbGRfbWFzayk7CiAJfQogCi0JYWRhcHRlci0+cGNpX3VzaW5nX2RhYyA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIG5ldHhlbl9jaGVja19vcHRpb25zKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKSB7Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM19ITUVaOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfWEdfTE9NOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX0NYNDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19DWDRfTFA6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM19JTUVaOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9QTFVTOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTBHX1NGUF9RVDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzEwR19TRlBfQ1Q6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfWEZQOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfMTAwMDBfQkFTRV9UOgorCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfWEdCRSkKKwkJYWRhcHRlci0+bnVtX3J4ZCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCWVsc2UgaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCisJCWFkYXB0ZXItPm51bV9yeGQgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOworCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCkpCiAJCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7Ci0JCWJyZWFrOwotCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwRzoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0NYNDoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0lNRVo6Ci0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjMxXzEwR19ITUVaOgorCWVsc2UKIAkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOwotCQlicmVhazsKIAotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfUkVGX1FHOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDNfNF9HQjoKLQljYXNlIE5FVFhFTl9CUkRUWVBFX1AzXzRfR0JfTU06Ci0JCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWFkYXB0ZXItPm1heF9yeF9kZXNjX2NvdW50ID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKLQkJYnJlYWs7CisJYWRhcHRlci0+bnVtX3R4ZCA9IE1BWF9DTURfREVTQ1JJUFRPUlNfSE9TVDsKKwlhZGFwdGVyLT5udW1fanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SUzsKKwlhZGFwdGVyLT5udW1fbHJvX3J4ZCA9IE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTOwogCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QMl9TQjM1XzRHOgotCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8yRzoKLQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0JCWJyZWFrOwotCi0JY2FzZSBORVRYRU5fQlJEVFlQRV9QM18xMEdfVFA6Ci0JCWFkYXB0ZXItPm1zaXhfc3VwcG9ydGVkID0gISF1c2VfbXNpX3g7Ci0JCWlmIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9PSBORVRYRU5fTklDX1hHQkUpCi0JCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOwotCQllbHNlCi0JCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQgPSAwOwotCQlhZGFwdGVyLT5tYXhfcnhfZGVzY19jb3VudCA9IE1BWF9SQ1ZfREVTQ1JJUFRPUlNfMUc7Ci0KLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBib2FyZCB0eXBlKDB4JXgpXG4iLAotCQkJCWFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKTsKLQkJYnJlYWs7Ci0JfQotCi0JYWRhcHRlci0+bWF4X3R4X2Rlc2NfY291bnQgPSBNQVhfQ01EX0RFU0NSSVBUT1JTX0hPU1Q7Ci0JYWRhcHRlci0+bWF4X2p1bWJvX3J4X2Rlc2NfY291bnQgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTOwotCWFkYXB0ZXItPm1heF9scm9fcnhfZGVzY19jb3VudCA9IE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTOwotCi0JYWRhcHRlci0+bWF4X3Bvc3NpYmxlX3Jzc19yaW5ncyA9IDE7CiAJcmV0dXJuOwogfQogCkBAIC0zMzYsNyArMzM3LDcgQEAKIHsKIAl1MzIgdmFsLCBkYXRhOwogCi0JdmFsID0gYWRhcHRlci0+YWh3LmJvYXJkY2ZnLmJvYXJkX3R5cGU7CisJdmFsID0gYWRhcHRlci0+YWh3LmJvYXJkX3R5cGU7CiAJaWYgKCh2YWwgPT0gTkVUWEVOX0JSRFRZUEVfUDNfSE1FWikgfHwKIAkJKHZhbCA9PSBORVRYRU5fQlJEVFlQRV9QM19YR19MT00pKSB7CiAJCWlmIChwb3J0X21vZGUgPT0gTkVUWEVOX1BPUlRfTU9ERV84MDJfM19BUCkgewpAQCAtNDU0LDQyICs0NTUsNDU4IEBACiAjZW5kaWYKIH07CiAKLS8qCi0gKiBuZXR4ZW5fbmljX3Byb2JlKCkKLSAqCi0gKiBUaGUgTGludXggc3lzdGVtIHdpbGwgaW52b2tlIHRoaXMgYWZ0ZXIgaWRlbnRpZnlpbmcgdGhlIHZlbmRvciBJRCBhbmQKLSAqIGRldmljZSBJZCBpbiB0aGUgcGNpX3RibCBzdXBwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuCi0gKgotICogQSBxdWFkIHBvcnQgY2FyZCBoYXMgb25lIG9wZXJhdGlvbmFsIFBDSSBjb25maWcgc3BhY2UsIChmdW5jdGlvbiAwKSwKLSAqIHdoaWNoIGlzIHVzZWQgdG8gYWNjZXNzIGFsbCBmb3VyIHBvcnRzLgotICoKLSAqIFRoaXMgcm91dGluZSB3aWxsIGluaXRpYWxpemUgdGhlIGFkYXB0ZXIsIGFuZCBzZXR1cCB0aGUgZ2xvYmFsIHBhcmFtZXRlcnMKLSAqIGFsb25nIHdpdGggdGhlIHBvcnQncyBzcGVjaWZpYyBzdHJ1Y3R1cmUuCi0gKi8KK3N0YXRpYyB2b2lkCituZXR4ZW5fc2V0dXBfaW50cihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldHhlbl9sZWdhY3lfaW50cl9zZXQgKmxlZ2FjeV9pbnRycDsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+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+ZGV2Zm4pOwotCXN0cnVjdCBuZXR4ZW5fbGVnYWN5X2ludHJfc2V0ICpsZWdhY3lfaW50cnA7CiAJdWludDhfdCByZXZpc2lvbl9pZDsKIAotCWlmIChwY2lfZnVuY19pZCA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgbmV0eGVuX25pY19kcml2ZXJfc3RyaW5nKTsKLQogCWlmIChwZGV2LT5jbGFzcyAhPSAweDAyMDAwMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiTmV0WGVuIGZ1bmN0aW9uICVkLCBjbGFzcyAleCB3aWxsIG5vdCAiCiAJCQkJImJlIGVuYWJsZWQuXG4iLHBjaV9mdW5jX2lkLCBwZGV2LT5jbGFzcyk7CkBAIC01MzksMTMwICs5NTYsMTQgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwogCiAJcndsb2NrX2luaXQoJmFkYXB0ZXItPmFkYXB0ZXJfbG9jayk7Ci0JYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAtMTsKLQlhZGFwdGVyLT5haHcuZGRyX21uX3dpbmRvdyA9IC0xOworCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT50eF9jbGVhbl9sb2NrKTsKIAotCS8qIHJlbWFwIHBoeXMgYWRkcmVzcyAqLwotCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwkvKiAwIGlzIGZvciBCQVIgMCAqLwotCW1lbV9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwotCXBjaV9sZW4wID0gMDsKLQotCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8xMjhNOwotCWFkYXB0ZXItPmh3X3JlYWRfd3ggPSBuZXR4ZW5fbmljX2h3X3JlYWRfd3hfMTI4TTsKLQlhZGFwdGVyLT5wY2lfcmVhZF9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX2ltbWVkaWF0ZV8xMjhNOwotCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9pbW1lZGlhdGVfMTI4TTsKLQlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8xMjhNOwotCWFkYXB0ZXItPnBjaV93cml0ZV9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMTI4TTsKLQlhZGFwdGVyLT5wY2lfc2V0X3dpbmRvdyA9IG5ldHhlbl9uaWNfcGNpX3NldF93aW5kb3dfMTI4TTsKLQlhZGFwdGVyLT5wY2lfbWVtX3JlYWQgPSBuZXR4ZW5fbmljX3BjaV9tZW1fcmVhZF8xMjhNOwotCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMTI4TTsKLQotCS8qIDEyOCBNZWcgb2YgbWVtb3J5ICovCi0JaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8xMjhNQl9TSVpFKSB7Ci0JCW1lbV9wdHIwID0gaW9yZW1hcChtZW1fYmFzZSwgRklSU1RfUEFHRV9HUk9VUF9TSVpFKTsKLQkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlICsgU0VDT05EX1BBR0VfR1JPVVBfU1RBUlQsCi0JCQkJU0VDT05EX1BBR0VfR1JPVVBfU0laRSk7Ci0JCW1lbV9wdHIyID0gaW9yZW1hcChtZW1fYmFzZSArIFRISVJEX1BBR0VfR1JPVVBfU1RBUlQsCi0JCQkJVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IEZJUlNUX1BBR0VfR1JPVVBfU1RBUlQ7Ci0JCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSBGSVJTVF9QQUdFX0dST1VQX0VORDsKLQl9IGVsc2UgaWYgKG1lbV9sZW4gPT0gTkVUWEVOX1BDSV8zMk1CX1NJWkUpIHsKLQkJbWVtX3B0cjEgPSBpb3JlbWFwKG1lbV9iYXNlLCBTRUNPTkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJbWVtX3B0cjIgPSBpb3JlbWFwKG1lbV9iYXNlICsgVEhJUkRfUEFHRV9HUk9VUF9TVEFSVCAtCi0JCQlTRUNPTkRfUEFHRV9HUk9VUF9TVEFSVCwgVEhJUkRfUEFHRV9HUk9VUF9TSVpFKTsKLQkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IDA7Ci0JCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSAwOwotCX0gZWxzZSBpZiAobWVtX2xlbiA9PSBORVRYRU5fUENJXzJNQl9TSVpFKSB7Ci0JCWFkYXB0ZXItPmh3X3dyaXRlX3d4ID0gbmV0eGVuX25pY19od193cml0ZV93eF8yTTsKLQkJYWRhcHRlci0+aHdfcmVhZF93eCA9IG5ldHhlbl9uaWNfaHdfcmVhZF93eF8yTTsKLQkJYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlID0gbmV0eGVuX25pY19wY2lfcmVhZF9pbW1lZGlhdGVfMk07Ci0JCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUgPQotCQkJbmV0eGVuX25pY19wY2lfd3JpdGVfaW1tZWRpYXRlXzJNOwotCQlhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUgPSBuZXR4ZW5fbmljX3BjaV9yZWFkX25vcm1hbGl6ZV8yTTsKLQkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZSA9Ci0JCQluZXR4ZW5fbmljX3BjaV93cml0ZV9ub3JtYWxpemVfMk07Ci0JCWFkYXB0ZXItPnBjaV9zZXRfd2luZG93ID0gbmV0eGVuX25pY19wY2lfc2V0X3dpbmRvd18yTTsKLQkJYWRhcHRlci0+cGNpX21lbV9yZWFkID0gbmV0eGVuX25pY19wY2lfbWVtX3JlYWRfMk07Ci0JCWFkYXB0ZXItPnBjaV9tZW1fd3JpdGUgPSBuZXR4ZW5fbmljX3BjaV9tZW1fd3JpdGVfMk07Ci0KLQkJbWVtX3B0cjAgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7Ci0JCWlmIChtZW1fcHRyMCA9PSBOVUxMKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIFBDSSBiYXIgMFxuIik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCXBjaV9sZW4wID0gbWVtX2xlbjsKLQkJZmlyc3RfcGFnZV9ncm91cF9zdGFydCA9IDA7Ci0JCWZpcnN0X3BhZ2VfZ3JvdXBfZW5kICAgPSAwOwotCi0JCWFkYXB0ZXItPmFody5kZHJfbW5fd2luZG93ID0gMDsKLQkJYWRhcHRlci0+YWh3LnFkcl9zbl93aW5kb3cgPSAwOwotCi0JCWFkYXB0ZXItPmFody5tbl93aW5fY3JiID0gMHgxMDAwMDAgKyBQQ0lYX01OX1dJTkRPVyArCi0JCQkocGNpX2Z1bmNfaWQgKiAweDIwKTsKLQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgPSAweDEwMDAwMCArIFBDSVhfU05fV0lORE9XOwotCQlpZiAocGNpX2Z1bmNfaWQgPCA0KQotCQkJYWRhcHRlci0+YWh3Lm1zX3dpbl9jcmIgKz0gKHBjaV9mdW5jX2lkICogMHgyMCk7Ci0JCWVsc2UKLQkJCWFkYXB0ZXItPmFody5tc193aW5fY3JiICs9Ci0JCQkJCTB4QTAgKyAoKHBjaV9mdW5jX2lkIC0gNCkgKiAweDEwKTsKLQl9IGVsc2UgewotCQllcnIgPSAtRUlPOworCWVyciA9IG5ldHhlbl9zZXR1cF9wY2lfbWFwKGFkYXB0ZXIpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKLQl9Ci0KLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJWRNQiBtZW1vcnkgbWFwXG4iLCAoaW50KShtZW1fbGVuPj4yMCkpOwotCi0JZGJfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KTsJLyogZG9vcmJlbGwgaXMgb24gYmFyIDQgKi8KLQlkYl9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDQpOwotCi0JaWYgKGRiX2xlbiA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGRvb3JiZWxsIGlzIGRpc2FibGVkXG4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKLQl9Ci0JRFBSSU5USyhJTkZPLCAiZG9vcmJlbGwgaW9yZW1hcCBmcm9tICVseCBhIHNpemUgb2YgJWx4XG4iLCBkYl9iYXNlLAotCQlkYl9sZW4pOwotCi0JZGJfcHRyID0gaW9yZW1hcChkYl9iYXNlLCBORVRYRU5fREJfTUFQU0laRV9CWVRFUyk7Ci0JaWYgKCFkYl9wdHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGFsbG9jYXRlIGRvb3JiZWxsIG1hcC4iLAotCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQllcnIgPSAtRUlPOwotCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKLQl9Ci0JRFBSSU5USyhJTkZPLCAiZG9vcmJlbGwgaW9yZW1hcGVkIGF0ICVwXG4iLCBkYl9wdHIpOwotCi0JYWRhcHRlci0+YWh3LnBjaV9iYXNlMCA9IG1lbV9wdHIwOwotCWFkYXB0ZXItPmFody5wY2lfbGVuMCA9IHBjaV9sZW4wOwotCWFkYXB0ZXItPmFody5maXJzdF9wYWdlX2dyb3VwX3N0YXJ0ID0gZmlyc3RfcGFnZV9ncm91cF9zdGFydDsKLQlhZGFwdGVyLT5haHcuZmlyc3RfcGFnZV9ncm91cF9lbmQgICA9IGZpcnN0X3BhZ2VfZ3JvdXBfZW5kOwotCWFkYXB0ZXItPmFody5wY2lfYmFzZTEgPSBtZW1fcHRyMTsKLQlhZGFwdGVyLT5haHcucGNpX2Jhc2UyID0gbWVtX3B0cjI7Ci0JYWRhcHRlci0+YWh3LmRiX2Jhc2UgPSBkYl9wdHI7Ci0JYWRhcHRlci0+YWh3LmRiX2xlbiA9IGRiX2xlbjsKLQotCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPm5hcGksCi0JCQluZXR4ZW5fbmljX3BvbGwsIE5FVFhFTl9ORVRERVZfV0VJR0hUKTsKLQotCWlmIChyZXZpc2lvbl9pZCA+PSBOWF9QM19CMCkKLQkJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyW3BjaV9mdW5jX2lkXTsKLQllbHNlCi0JCWxlZ2FjeV9pbnRycCA9ICZsZWdhY3lfaW50clswXTsKLQotCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLmludF92ZWNfYml0ID0gbGVnYWN5X2ludHJwLT5pbnRfdmVjX2JpdDsKLQlhZGFwdGVyLT5sZWdhY3lfaW50ci50Z3Rfc3RhdHVzX3JlZyA9IGxlZ2FjeV9pbnRycC0+dGd0X3N0YXR1c19yZWc7Ci0JYWRhcHRlci0+bGVnYWN5X2ludHIudGd0X21hc2tfcmVnID0gbGVnYWN5X2ludHJwLT50Z3RfbWFza19yZWc7Ci0JYWRhcHRlci0+bGVnYWN5X2ludHIucGNpX2ludF9yZWcgPSBsZWdhY3lfaW50cnAtPnBjaV9pbnRfcmVnOwotCi0JLyogdGhpcyB3aWxsIGJlIHJlYWQgZnJvbSBGVyBsYXRlciAqLwotCWFkYXB0ZXItPmludHJfc2NoZW1lID0gLTE7Ci0JYWRhcHRlci0+bXNpX21vZGUgPSAtMTsKIAogCS8qIFRoaXMgd2lsbCBiZSByZXNldCBmb3IgbWV6eiBjYXJkcyAgKi8KIAlhZGFwdGVyLT5wb3J0bnVtID0gcGNpX2Z1bmNfaWQ7Ci0JYWRhcHRlci0+c3RhdHVzICAgJj0gfk5FVFhFTl9ORVRERVZfU1RBVFVTOwogCWFkYXB0ZXItPnJ4X2NzdW0gPSAxOwogCWFkYXB0ZXItPm1jX2VuYWJsZWQgPSAwOwogCWlmIChOWF9JU19SRVZJU0lPTl9QMyhyZXZpc2lvbl9pZCkpCkBAIC02OTAsMTIgKzk5MSw2IEBACiAJCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAJfQogCi0JLyoKLQkgKiBTZXQgdGhlIENSQiB3aW5kb3cgdG8gaW52YWxpZC4gSWYgYW55IHJlZ2lzdGVyIGluIHdpbmRvdyAwIGlzCi0JICogYWNjZXNzZWQgaXQgc2hvdWxkIHNldCB0aGUgd2luZG93IHRvIDAgYW5kIHRoZW4gcmVzZXQgaXQgdG8gMS4KLQkgKi8KLQlhZGFwdGVyLT5jdXJyX3dpbmRvdyA9IDI1NTsKLQogCWlmIChuZXR4ZW5fbmljX2dldF9ib2FyZF9pbmZvKGFkYXB0ZXIpICE9IDApIHsKIAkJcHJpbnRrKCIlczogRXJyb3IgZ2V0dGluZyBib2FyZCBjb25maWcgaW5mby5cbiIsCiAJCQkJbmV0eGVuX25pY19kcml2ZXJfbmFtZSk7CkBAIC03MDYsNyArMTAwMSw3IEBACiAJbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9vcHMoYWRhcHRlcik7CiAKIAkvKiBNZXp6IGNhcmRzIGhhdmUgUENJIGZ1bmN0aW9uIDAsMiwzIGVuYWJsZWQgKi8KLQlzd2l0Y2ggKGFkYXB0ZXItPmFody5ib2FyZGNmZy5ib2FyZF90eXBlKSB7CisJc3dpdGNoIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgewogCWNhc2UgTkVUWEVOX0JSRFRZUEVfUDJfU0IzMV8xMEdfSU1FWjoKIAljYXNlIE5FVFhFTl9CUkRUWVBFX1AyX1NCMzFfMTBHX0hNRVo6CiAJCWlmIChwY2lfZnVuY19pZCA+PSAyKQpAQCAtNzE2LDgyICsxMDExLDEzIEBACiAJCWJyZWFrOwogCX0KIAotCS8qCi0JICogVGhpcyBjYWxsIHdpbGwgc2V0dXAgdmFyaW91cyBtYXggcngvdHggY291bnRzLgotCSAqIEl0IG11c3QgYmUgZG9uZSBiZWZvcmUgYW55IGJ1ZmZlci9yaW5nIGFsbG9jYXRpb25zLgotCSAqLwotCW5ldHhlbl9jaGVja19vcHRpb25zKGFkYXB0ZXIpOworCWVyciA9IG5ldHhlbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAotCWZpcnN0X2RyaXZlciA9IDA7Ci0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkgewotCQlpZiAoYWRhcHRlci0+YWh3LnBjaV9mdW5jID09IDApCi0JCQlmaXJzdF9kcml2ZXIgPSAxOwotCX0gZWxzZSB7Ci0JCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApCi0JCQlmaXJzdF9kcml2ZXIgPSAxOwotCX0KKwlueF91cGRhdGVfZG1hX21hc2soYWRhcHRlcik7CiAKLQlpZiAoZmlyc3RfZHJpdmVyKSB7Ci0JCWZpcnN0X2Jvb3QgPSBhZGFwdGVyLT5wY2lfcmVhZF9ub3JtYWxpemUoYWRhcHRlciwKLQkJCQlORVRYRU5fQ0FNX1JBTSgweDFmYykpOwotCi0JCWVyciA9IG5ldHhlbl9jaGVja19od19pbml0KGFkYXB0ZXIsIGZpcnN0X2Jvb3QpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBpbiBpbml0IEhXIGluaXQgc2VxdWVuY2VcbiIsCi0JCQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUpOwotCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7Ci0JCX0KLQotCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKQotCQkJbmV0eGVuX3NldF9wb3J0X21vZGUoYWRhcHRlcik7Ci0KLQkJaWYgKGZpcnN0X2Jvb3QgIT0gMHg1NTU1NTU1NSkgewotCQkJYWRhcHRlci0+cGNpX3dyaXRlX25vcm1hbGl6ZShhZGFwdGVyLAotCQkJCQkJQ1JCX0NNRFBFR19TVEFURSwgMCk7Ci0JCQluZXR4ZW5fcGluaXRfZnJvbV9yb20oYWRhcHRlciwgMCk7Ci0JCQltc2xlZXAoMSk7Ci0JCX0KLQkJbmV0eGVuX2xvYWRfZmlybXdhcmUoYWRhcHRlcik7Ci0KLQkJaWYgKE5YX0lTX1JFVklTSU9OX1AyKHJldmlzaW9uX2lkKSkgewotCi0JCQkvKiBJbml0aWFsaXplIG11bHRpY2FzdCBhZGRyIHBvb2wgb3duZXJzICovCi0JCQl2YWwgPSAweDc2NTQ7Ci0JCQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19YR0JFKQotCQkJCXZhbCB8PSAweDBmMDAwMDAwOwotCQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsCi0JCQkJCU5FVFhFTl9NQUNfQUREUl9DTlRMX1JFRywgdmFsKTsKLQotCQl9Ci0KLQkJZXJyID0gbmV0eGVuX2luaXRpYWxpemVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7Ci0KLQkJLyoKLQkJICogVGVsbCB0aGUgaGFyZHdhcmUgb3VyIHZlcnNpb24gbnVtYmVyLgotCQkgKi8KLQkJaSA9IChfTkVUWEVOX05JQ19MSU5VWF9NQUpPUiA8PCAxNikKLQkJCXwgKChfTkVUWEVOX05JQ19MSU5VWF9NSU5PUiA8PCA4KSkKLQkJCXwgKF9ORVRYRU5fTklDX0xJTlVYX1NVQlZFUlNJT04pOwotCQlhZGFwdGVyLT5wY2lfd3JpdGVfbm9ybWFsaXplKGFkYXB0ZXIsIENSQl9EUklWRVJfVkVSU0lPTiwgaSk7Ci0KLQkJLyogSGFuZHNoYWtlIHdpdGggdGhlIGNhcmQgYmVmb3JlIHdlIHJlZ2lzdGVyIHRoZSBkZXZpY2VzLiAqLwotCQllcnIgPSBuZXR4ZW5fcGhhbnRvbV9pbml0KGFkYXB0ZXIsIE5FVFhFTl9OSUNfUEVHX1RVTkUpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfb3V0X2ZyZWVfb2ZmbG9hZDsKLQotCX0JLyogZmlyc3RfZHJpdmVyICovCi0KLQluZXR4ZW5fbmljX2ZsYXNoX3ByaW50KGFkYXB0ZXIpOwotCi0JaWYgKE5YX0lTX1JFVklTSU9OX1AzKHJldmlzaW9uX2lkKSkgewotCQlhZGFwdGVyLT5od19yZWFkX3d4KGFkYXB0ZXIsCi0JCQkJTkVUWEVOX01JVV9NTl9DT05UUk9MLCAmdmFsLCA0KTsKLQkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID0gKHZhbCAmIDB4NCkgPyAxIDogMDsKLQkJZGV2X2luZm8oJnBkZXYtPmRldiwgImZpcm13YXJlIHJ1bm5pbmcgaW4gJXMgbW9kZVxuIiwKLQkJYWRhcHRlci0+YWh3LmN1dF90aHJvdWdoID8gImN1dCB0aHJvdWdoIiA6ICJsZWdhY3kiKTsKLQl9CisJbmV0eGVuX25pY19nZXRfZmlybXdhcmVfaW5mbyhhZGFwdGVyKTsKIAogCS8qCiAJICogU2VlIGlmIHRoZSBmaXJtd2FyZSBnYXZlIHVzIGEgdmlydHVhbC1waHlzaWNhbCBwb3J0IG1hcHBpbmcuCkBAIC04MDQsNDEgKzEwMzAsMTMgQEAKIAkJCWFkYXB0ZXItPnBoeXNpY2FsX3BvcnQgPSBpOwogCX0KIAotCWFkYXB0ZXItPmZsYWdzICY9IH4oTkVUWEVOX05JQ19NU0lfRU5BQkxFRCB8IE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKTsKKwluZXR4ZW5fY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKIAotCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMCk7CisJbmV0eGVuX3NldHVwX2ludHIoYWRhcHRlcik7CiAKLQlpZiAoTlhfSVNfUkVWSVNJT05fUDMocmV2aXNpb25faWQpKSB7Ci0JCWlmICgobWVtX2xlbiAhPSBORVRYRU5fUENJXzEyOE1CX1NJWkUpICYmCi0JCQltZW1fbGVuICE9IE5FVFhFTl9QQ0lfMk1CX1NJWkUpCi0JCQlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9IDA7Ci0JfQorCW5ldGRldi0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKIAotCWlmIChhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCkgewotCi0JCW5ldHhlbl9pbml0X21zaXhfZW50cmllcyhhZGFwdGVyKTsKLQotCQlpZiAocGNpX2VuYWJsZV9tc2l4KHBkZXYsIGFkYXB0ZXItPm1zaXhfZW50cmllcywKLQkJCQkJTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSKSkKLQkJCWdvdG8gcmVxdWVzdF9tc2k7Ci0KLQkJYWRhcHRlci0+ZmxhZ3MgfD0gTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQ7Ci0JCW5ldHhlbl9zZXRfbXNpeF9iaXQocGRldiwgMSk7Ci0JCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBtc2kteCBpbnRlcnJ1cHRzXG4iKTsKLQotCX0gZWxzZSB7Ci1yZXF1ZXN0X21zaToKLQkJaWYgKHVzZV9tc2kgJiYgIXBjaV9lbmFibGVfbXNpKHBkZXYpKSB7Ci0JCQlhZGFwdGVyLT5mbGFncyB8PSBORVRYRU5fTklDX01TSV9FTkFCTEVEOwotCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaSBpbnRlcnJ1cHRzXG4iKTsKLQkJfSBlbHNlCi0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbGVnYWN5IGludGVycnVwdHNcbiIpOwotCX0KLQotCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQotCQluZXRkZXYtPmlycSA9IGFkYXB0ZXItPm1zaXhfZW50cmllc1swXS52ZWN0b3I7Ci0JZWxzZQotCQluZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKKwluZXR4ZW5fbmFwaV9hZGQoYWRhcHRlciwgbmV0ZGV2KTsKIAogCWVyciA9IG5ldHhlbl9yZWNlaXZlX3BlZ19yZWFkeShhZGFwdGVyKTsKIAlpZiAoZXJyKQpAQCAtODY3LDcgKzEwNjUsNyBAQAogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGFkYXB0ZXIpOwogCi0Jc3dpdGNoIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgeworCXN3aXRjaCAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSkgewogCWNhc2UgTkVUWEVOX05JQ19HQkU6CiAJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICIlczogR2JFIHBvcnQgaW5pdGlhbGl6ZWRcbiIsCiAJCQkJYWRhcHRlci0+bmV0ZGV2LT5uYW1lKTsKQEAgLTg4MSwyNSArMTA3OSwxMiBAQAogCXJldHVybiAwOwogCiBlcnJfb3V0X2Rpc2FibGVfbXNpOgotCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJWF9FTkFCTEVEKQotCQlwY2lfZGlzYWJsZV9tc2l4KHBkZXYpOwotCWlmIChhZGFwdGVyLT5mbGFncyAmIE5FVFhFTl9OSUNfTVNJX0VOQUJMRUQpCi0JCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKKwluZXR4ZW5fdGVhcmRvd25faW50cihhZGFwdGVyKTsKIAotZXJyX291dF9mcmVlX29mZmxvYWQ6Ci0JaWYgKGZpcnN0X2RyaXZlcikKLQkJbmV0eGVuX2ZyZWVfYWRhcHRlcl9vZmZsb2FkKGFkYXB0ZXIpOworCW5ldHhlbl9mcmVlX2FkYXB0ZXJfb2ZmbG9hZChhZGFwdGVyKTsKIAogZXJyX291dF9pb3VubWFwOgotCWlmIChkYl9wdHIpCi0JCWlvdW5tYXAoZGJfcHRyKTsKLQotCWlmIChtZW1fcHRyMCkKLQkJaW91bm1hcChtZW1fcHRyMCk7Ci0JaWYgKG1lbV9wdHIxKQotCQlpb3VubWFwKG1lbV9wdHIxKTsKLQlpZiAobWVtX3B0cjIpCi0JCWlvdW5tYXAobWVtX3B0cjIpOworCW5ldHhlbl9jbGVhbnVwX3BjaV9tYXAoYWRhcHRlcik7CiAKIGVycl9vdXRfZnJlZV9uZXRkZXY6CiAJZnJlZV9uZXRkZXYobmV0ZGV2KTsKQEAgLTkyNyw5ICsxMTEyLDcgQEAKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCiAJaWYgKGFkYXB0ZXItPmlzX3VwID09IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKSB7Ci0JCW5ldHhlbl9mcmVlX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKLQkJbmV0eGVuX3JlbGVhc2VfcnhfYnVmZmVycyhhZGFwdGVyKTsKLQkJbmV0eGVuX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCQluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKIAogCQlpZiAoTlhfSVNfUkVWSVNJT05fUDMoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKIAkJCW5ldHhlbl9wM19mcmVlX21hY19saXN0KGFkYXB0ZXIpOwpAQCAtOTM4LDIwICsxMTIxLDkgQEAKIAlpZiAoYWRhcHRlci0+cG9ydG51bSA9PSAwKQogCQluZXR4ZW5fZnJlZV9hZGFwdGVyX29mZmxvYWQoYWRhcHRlcik7CiAKLQlpZiAoYWRhcHRlci0+aXJxKQotCQlmcmVlX2lycShhZGFwdGVyLT5pcnEsIGFkYXB0ZXIpOworCW5ldHhlbl90ZWFyZG93bl9pbnRyKGFkYXB0ZXIpOwogCi0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCi0JCXBjaV9kaXNhYmxlX21zaXgocGRldik7Ci0JaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lfRU5BQkxFRCkKLQkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwotCi0JaW91bm1hcChhZGFwdGVyLT5haHcuZGJfYmFzZSk7Ci0JaW91bm1hcChhZGFwdGVyLT5haHcucGNpX2Jhc2UwKTsKLQlpZiAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMSAhPSBOVUxMKQotCQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTEpOwotCWlmIChhZGFwdGVyLT5haHcucGNpX2Jhc2UyICE9IE5VTEwpCi0JCWlvdW5tYXAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMik7CisJbmV0eGVuX2NsZWFudXBfcGNpX21hcChhZGFwdGVyKTsKIAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtOTYwLDEyNSArMTEzMiw5NSBAQAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiB9CiAKLS8qCi0gKiBDYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUgYWN0aXZlCi0gKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUKLSAqLworc3RhdGljIGludAorbmV0eGVuX25pY19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCW5ldHhlbl9uaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOworCisJaWYgKGFkYXB0ZXItPmlzX3VwID09IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDKQorCQluZXR4ZW5fbmljX2RldGFjaChhZGFwdGVyKTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCisJaWYgKG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChhZGFwdGVyKSkgeworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCX0KKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgZXJyOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWFkYXB0ZXItPmN1cnJfd2luZG93ID0gMjU1OworCisJZXJyID0gbmV0eGVuX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0IGZpcm13YXJlXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCWVyciA9IG5ldHhlbl9uaWNfYXR0YWNoKGFkYXB0ZXIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQllcnIgPSBuZXR4ZW5fbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBuZXR4ZW5fbmljX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCWludCBlcnIgPSAwOwotCWludCBjdHgsIHJpbmc7Ci0JaXJxX2hhbmRsZXJfdCBoYW5kbGVyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET007CiAKIAlpZiAoYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoKQogCQlyZXR1cm4gLUVJTzsKIAogCWlmIChhZGFwdGVyLT5pc191cCAhPSBORVRYRU5fQURBUFRFUl9VUF9NQUdJQykgewotCQllcnIgPSBuZXR4ZW5faW5pdF9maXJtd2FyZShhZGFwdGVyKTsKLQkJaWYgKGVyciAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBpbml0IGZpcm13YXJlXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkKLQkJCWFkYXB0ZXItPm1heF9yZHNfcmluZ3MgPSAzOwotCQllbHNlCi0JCQlhZGFwdGVyLT5tYXhfcmRzX3JpbmdzID0gMjsKLQotCQllcnIgPSBuZXR4ZW5fYWxsb2Nfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIHN3IHJlc291cmNlc1xuIiwKLQkJCQkJbmV0ZGV2LT5uYW1lKTsKKwkJZXJyID0gbmV0eGVuX25pY19hdHRhY2goYWRhcHRlcik7CisJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJbmV0eGVuX25pY19jbGVhcl9zdGF0cyhhZGFwdGVyKTsKLQotCQllcnIgPSBuZXR4ZW5fYWxsb2NfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpbiBzZXR0aW5nIGh3IHJlc291cmNlc1xuIiwKLQkJCQkJbmV0ZGV2LT5uYW1lKTsKLQkJCWdvdG8gZXJyX291dF9mcmVlX3N3OwotCQl9Ci0KLQkJaWYgKChhZGFwdGVyLT5tc2lfbW9kZSAhPSBNU0lfTU9ERV9NVUxUSUZVTkMpIHx8Ci0JCQkoYWRhcHRlci0+aW50cl9zY2hlbWUgIT0gSU5UUl9TQ0hFTUVfUEVSUE9SVCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpcm13YXJlIGludGVycnVwdCBzY2hlbWUgaXMgIgotCQkJCQkiaW5jb21wYXRpYmxlIHdpdGggZHJpdmVyXG4iLAotCQkJCQluZXRkZXYtPm5hbWUpOwotCQkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKLQkJCWdvdG8gZXJyX291dF9mcmVlX2h3OwotCQl9Ci0KLQkJaWYgKGFkYXB0ZXItPmZ3X21ham9yIDwgNCkgewotCQkJYWRhcHRlci0+Y3JiX2FkZHJfY21kX3Byb2R1Y2VyID0KLQkJCQljcmJfY21kX3Byb2R1Y2VyW2FkYXB0ZXItPnBvcnRudW1dOwotCQkJYWRhcHRlci0+Y3JiX2FkZHJfY21kX2NvbnN1bWVyID0KLQkJCQljcmJfY21kX2NvbnN1bWVyW2FkYXB0ZXItPnBvcnRudW1dOwotCi0JCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfcHJvZHVjZXIoYWRhcHRlciwgMCk7Ci0JCQluZXR4ZW5fbmljX3VwZGF0ZV9jbWRfY29uc3VtZXIoYWRhcHRlciwgMCk7Ci0JCX0KLQotCQlmb3IgKGN0eCA9IDA7IGN0eCA8IE1BWF9SQ1ZfQ1RYOyArK2N0eCkgewotCQkJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykKLQkJCQluZXR4ZW5fcG9zdF9yeF9idWZmZXJzKGFkYXB0ZXIsIGN0eCwgcmluZyk7Ci0JCX0KLQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgTkVUWEVOX05JQ19NU0lYX0VOQUJMRUQpCi0JCQloYW5kbGVyID0gbmV0eGVuX21zaXhfaW50cjsKLQkJZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBORVRYRU5fTklDX01TSV9FTkFCTEVEKQotCQkJaGFuZGxlciA9IG5ldHhlbl9tc2lfaW50cjsKLQkJZWxzZSB7Ci0JCQlmbGFncyB8PSBJUlFGX1NIQVJFRDsKLQkJCWhhbmRsZXIgPSBuZXR4ZW5faW50cjsKLQkJfQotCQlhZGFwdGVyLT5pcnEgPSBuZXRkZXYtPmlycTsKLQkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+aXJxLCBoYW5kbGVyLAotCQkJCSAgZmxhZ3MsIG5ldGRldi0+bmFtZSwgYWRhcHRlcik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicmVxdWVzdF9pcnEgZmFpbGVkIHdpdGg6ICVkXG4iLCBlcnIpOwotCQkJZ290byBlcnJfb3V0X2ZyZWVfcnhidWY7Ci0JCX0KLQotCQlhZGFwdGVyLT5pc191cCA9IE5FVFhFTl9BREFQVEVSX1VQX01BR0lDOwogCX0KIAotCS8qIERvbmUgaGVyZSBhZ2FpbiBzbyB0aGF0IGV2ZW4gaWYgcGhhbnRvbSBzdyBvdmVyd3JvdGUgaXQsCi0JICogd2Ugc2V0IGl0ICovCi0JZXJyID0gYWRhcHRlci0+aW5pdF9wb3J0KGFkYXB0ZXIsIGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGluaXRpYWxpemUgcG9ydCAlZFxuIiwKLQkJCQluZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5wb3J0bnVtKTsKLQkJZ290byBlcnJfb3V0X2ZyZWVfaXJxOwotCX0KLQlhZGFwdGVyLT5tYWNhZGRyX3NldChhZGFwdGVyLCBuZXRkZXYtPmRldl9hZGRyKTsKLQotCW5ldHhlbl9uaWNfc2V0X2xpbmtfcGFyYW1ldGVycyhhZGFwdGVyKTsKLQotCW5ldHhlbl9zZXRfbXVsdGljYXN0X2xpc3QobmV0ZGV2KTsKLQlpZiAoYWRhcHRlci0+c2V0X210dSkKLQkJYWRhcHRlci0+c2V0X210dShhZGFwdGVyLCBuZXRkZXYtPm10dSk7Ci0KLQlhZGFwdGVyLT5haHcubGlua3VwID0gMDsKLQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzKTsKLQotCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKLQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoYWRhcHRlcik7CisJZXJyID0gbmV0eGVuX25pY191cChhZGFwdGVyLCBuZXRkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAKIAlyZXR1cm4gMDsKIAotZXJyX291dF9mcmVlX2lycToKLQlmcmVlX2lycShhZGFwdGVyLT5pcnEsIGFkYXB0ZXIpOwotZXJyX291dF9mcmVlX3J4YnVmOgotCW5ldHhlbl9yZWxlYXNlX3J4X2J1ZmZlcnMoYWRhcHRlcik7Ci1lcnJfb3V0X2ZyZWVfaHc6Ci0JbmV0eGVuX2ZyZWVfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOwotZXJyX291dF9mcmVlX3N3OgotCW5ldHhlbl9mcmVlX3N3X3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl9vdXQ6CisJbmV0eGVuX25pY19kZXRhY2goYWRhcHRlcik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA4OSwyMCArMTIzMSw3IEBACiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCW5hcGlfZGlzYWJsZSgmYWRhcHRlci0+bmFwaSk7Ci0KLQlpZiAoYWRhcHRlci0+c3RvcF9wb3J0KQotCQlhZGFwdGVyLT5zdG9wX3BvcnQoYWRhcHRlcik7Ci0KLQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KGFkYXB0ZXIpOwotCi0JbmV0eGVuX3JlbGVhc2VfdHhfYnVmZmVycyhhZGFwdGVyKTsKLQotCUZMVVNIX1NDSEVEVUxFRF9XT1JLKCk7Ci0JZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQorCW5ldHhlbl9uaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTE0LDcgKzEyNDMsNyBAQAogCV9fYmUxNiBwcm90b2NvbCA9IHNrYi0+cHJvdG9jb2w7CiAJdTE2IGZsYWdzID0gMDsKIAotCWlmIChwcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCWlmIChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpIHsKIAkJc3RydWN0IHZsYW5fZXRoaGRyICp2aCA9IChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilza2ItPmRhdGE7CiAJCXByb3RvY29sID0gdmgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CiAJCWZsYWdzID0gRkxBR1NfVkxBTl9UQUdHRUQ7CkBAIC0xMTI3LDIxICsxMjU2LDIxIEBACiAJCWRlc2MtPnRvdGFsX2hkcl9sZW5ndGggPQogCQkJc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSArIHRjcF9oZHJsZW4oc2tiKTsKIAotCQlvcGNvZGUgPSAocHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSkgPworCQlvcGNvZGUgPSAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpID8KIAkJCQlUWF9UQ1BfTFNPNiA6IFRYX1RDUF9MU087CiAJCXRzbyA9IHRydWU7CiAKIAl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKIAkJdTggbDRwcm90bzsKIAotCQlpZiAocHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCkpIHsKKwkJaWYgKHByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX0lQKSkgewogCQkJbDRwcm90byA9IGlwX2hkcihza2IpLT5wcm90b2NvbDsKIAogCQkJaWYgKGw0cHJvdG8gPT0gSVBQUk9UT19UQ1ApCiAJCQkJb3Bjb2RlID0gVFhfVENQX1BLVDsKIAkJCWVsc2UgaWYobDRwcm90byA9PSBJUFBST1RPX1VEUCkKIAkJCQlvcGNvZGUgPSBUWF9VRFBfUEtUOwotCQl9IGVsc2UgaWYgKHByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNikpIHsKKwkJfSBlbHNlIGlmIChwcm90b2NvbCA9PSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KSkgewogCQkJbDRwcm90byA9IGlwdjZfaGRyKHNrYiktPm5leHRoZHI7CiAKIAkJCWlmIChsNHByb3RvID09IElQUFJPVE9fVENQKQpAQCAtMTE3NCw3ICsxMzAzLDE2IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG5ldHhlbl9uaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIGlubGluZSB2b2lkCituZXR4ZW5fY2xlYXJfY21kZGVzYyh1NjQgKmRlc2MpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJZGVzY1tpXSA9IDBVTEw7Cit9CisKK3N0YXRpYyBpbnQKK25ldHhlbl9uaWNfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IG5ldHhlbl9oYXJkd2FyZV9jb250ZXh0ICpodyA9ICZhZGFwdGVyLT5haHc7CkBAIC0xMTg4LDcgKzEzMjYsNyBAQAogCiAJdTMyIHByb2R1Y2VyLCBjb25zdW1lcjsKIAlpbnQgZnJhZ19jb3VudCwgbm9fb2ZfZGVzYzsKLQl1MzIgbnVtX3R4ZCA9IGFkYXB0ZXItPm1heF90eF9kZXNjX2NvdW50OworCXUzMiBudW1fdHhkID0gYWRhcHRlci0+bnVtX3R4ZDsKIAlib29sIGlzX3RzbyA9IGZhbHNlOwogCiAJZnJhZ19jb3VudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOwpAQCAtMTIwNyw3ICsxMzQ1LDcgQEAKIAogCS8qIENvcHkgdGhlIGRlc2NyaXB0b3JzIGludG8gdGhlIGhhcmR3YXJlICAgICovCiAJaHdkZXNjID0gJmh3LT5jbWRfZGVzY19oZWFkW3Byb2R1Y2VyXTsKLQltZW1zZXQoaHdkZXNjLCAwLCBzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSk7CisJbmV0eGVuX2NsZWFyX2NtZGRlc2MoKHU2NCAqKWh3ZGVzYyk7CiAJLyogVGFrZSBza2ItPmRhdGEgaXRzZWxmICovCiAJcGJ1ZiA9ICZhZGFwdGVyLT5jbWRfYnVmX2Fycltwcm9kdWNlcl07CiAKQEAgLTEyMjYsNyArMTM2NCw3IEBACiAJbmV0eGVuX3NldF90eF9mcmFnc19sZW4oaHdkZXNjLCBmcmFnX2NvdW50LCBza2ItPmxlbik7CiAJbmV0eGVuX3NldF90eF9wb3J0KGh3ZGVzYywgYWRhcHRlci0+cG9ydG51bSk7CiAKLQlod2Rlc2MtPmJ1ZmZlcjFfbGVuZ3RoID0gY3B1X3RvX2xlMTYoZmlyc3Rfc2VnX2xlbik7CisJaHdkZXNjLT5idWZmZXJfbGVuZ3RoWzBdID0gY3B1X3RvX2xlMTYoZmlyc3Rfc2VnX2xlbik7CiAJaHdkZXNjLT5hZGRyX2J1ZmZlcjEgPSBjcHVfdG9fbGU2NChidWZmcmFnLT5kbWEpOwogCiAJZm9yIChpID0gMSwgayA9IDE7IGkgPCBmcmFnX2NvdW50OyBpKyssIGsrKykgewpAQCAtMTIzOSw3ICsxMzc3LDcgQEAKIAkJCWsgPSAwOwogCQkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgbnVtX3R4ZCk7CiAJCQlod2Rlc2MgPSAmaHctPmNtZF9kZXNjX2hlYWRbcHJvZHVjZXJdOwotCQkJbWVtc2V0KGh3ZGVzYywgMCwgc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkpOworCQkJbmV0eGVuX2NsZWFyX2NtZGRlc2MoKHU2NCAqKWh3ZGVzYyk7CiAJCQlwYnVmID0gJmFkYXB0ZXItPmNtZF9idWZfYXJyW3Byb2R1Y2VyXTsKIAkJCXBidWYtPnNrYiA9IE5VTEw7CiAJCX0KQEAgLTEyNTksMjEgKzEzOTcsMTggQEAKIAkJYnVmZnJhZy0+ZG1hID0gdGVtcF9kbWE7CiAJCWJ1ZmZyYWctPmxlbmd0aCA9IHRlbXBfbGVuOwogCisJCWh3ZGVzYy0+YnVmZmVyX2xlbmd0aFtrXSA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKIAkJc3dpdGNoIChrKSB7CiAJCWNhc2UgMDoKLQkJCWh3ZGVzYy0+YnVmZmVyMV9sZW5ndGggPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CiAJCQlod2Rlc2MtPmFkZHJfYnVmZmVyMSA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQlod2Rlc2MtPmJ1ZmZlcjJfbGVuZ3RoID0gY3B1X3RvX2xlMTYodGVtcF9sZW4pOwogCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjIgPSBjcHVfdG9fbGU2NCh0ZW1wX2RtYSk7CiAJCQlicmVhazsKIAkJY2FzZSAyOgotCQkJaHdkZXNjLT5idWZmZXIzX2xlbmd0aCA9IGNwdV90b19sZTE2KHRlbXBfbGVuKTsKIAkJCWh3ZGVzYy0+YWRkcl9idWZmZXIzID0gY3B1X3RvX2xlNjQodGVtcF9kbWEpOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKLQkJCWh3ZGVzYy0+YnVmZmVyNF9sZW5ndGggPSBjcHVfdG9fbGUxNih0ZW1wX2xlbik7CiAJCQlod2Rlc2MtPmFkZHJfYnVmZmVyNCA9IGNwdV90b19sZTY0KHRlbXBfZG1hKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMzg4LDcgKzE1MjMsNyBAQAogCQlsaW5rdXAgPSAodmFsID09IFhHX0xJTktfVVBfUDMpOwogCX0gZWxzZSB7CiAJCXZhbCA9IGFkYXB0ZXItPnBjaV9yZWFkX25vcm1hbGl6ZShhZGFwdGVyLCBDUkJfWEdfU1RBVEUpOwotCQlpZiAoYWRhcHRlci0+YWh3LmJvYXJkX3R5cGUgPT0gTkVUWEVOX05JQ19HQkUpCisJCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IE5FVFhFTl9OSUNfR0JFKQogCQkJbGlua3VwID0gKHZhbCA+PiBwb3J0KSAmIDE7CiAJCWVsc2UgewogCQkJdmFsID0gKHZhbCA+PiBwb3J0KjgpICYgMHhmZjsKQEAgLTE0NTUsMTMgKzE1OTAsMTEgQEAKIAlwcmludGsoS0VSTl9FUlIgIiVzICVzOiB0cmFuc21pdCB0aW1lb3V0LCByZXNldHRpbmcuXG4iLAogCSAgICAgICBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLCBhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOwogCi0JbmV0eGVuX25pY19kaXNhYmxlX2ludChhZGFwdGVyKTsKLQluYXBpX2Rpc2FibGUoJmFkYXB0ZXItPm5hcGkpOworCW5ldHhlbl9uYXBpX2Rpc2FibGUoYWRhcHRlcik7CiAKIAlhZGFwdGVyLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAotCW5hcGlfZW5hYmxlKCZhZGFwdGVyLT5uYXBpKTsKLQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoYWRhcHRlcik7CisJbmV0eGVuX25hcGlfZW5hYmxlKGFkYXB0ZXIpOwogCW5ldGlmX3dha2VfcXVldWUoYWRhcHRlci0+bmV0ZGV2KTsKIH0KIApAQCAtMTQ5OSw3ICsxNjMyLDggQEAKIAogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gZGF0YTsKKwlzdHJ1Y3QgbnhfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcgPSBkYXRhOworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOwogCXUzMiBzdGF0dXMgPSAwOwogCiAJc3RhdHVzID0gYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKTsKQEAgLTE1MzAsNyArMTY2NCw3IEBACiAKIAkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KIAlpZiAoYWRhcHRlci0+ZndfbWFqb3IgPCA0KQotCQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KGFkYXB0ZXIpOworCQluZXR4ZW5fbmljX2Rpc2FibGVfaW50KHNkc19yaW5nKTsKIAogCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwKIAkJCWFkYXB0ZXItPmxlZ2FjeV9pbnRyLnRndF9zdGF0dXNfcmVnLApAQCAtMTUzOSw2MSArMTY3Myw0OSBAQAogCWFkYXB0ZXItPnBjaV9yZWFkX2ltbWVkaWF0ZShhZGFwdGVyLCBJU1JfSU5UX1ZFQ1RPUik7CiAJYWRhcHRlci0+cGNpX3JlYWRfaW1tZWRpYXRlKGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKTsKIAotCW5hcGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnNkc19yaW5nLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9tc2lfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IGRhdGE7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0gZGF0YTsKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKIAogCS8qIGNsZWFyIGludGVycnVwdCAqLwogCWFkYXB0ZXItPnBjaV93cml0ZV9pbW1lZGlhdGUoYWRhcHRlciwKIAkJCW1zaV90Z3Rfc3RhdHVzW2FkYXB0ZXItPmFody5wY2lfZnVuY10sIDB4ZmZmZmZmZmYpOwogCi0JbmFwaV9zY2hlZHVsZSgmYWRhcHRlci0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmc2RzX3JpbmctPm5hcGkpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IG5ldHhlbl9tc2l4X2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkYXRhOworCXN0cnVjdCBueF9ob3N0X3Nkc19yaW5nICpzZHNfcmluZyA9IGRhdGE7CiAKLQluYXBpX3NjaGVkdWxlKCZhZGFwdGVyLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZzZHNfcmluZy0+bmFwaSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCiBzdGF0aWMgaW50IG5ldHhlbl9uaWNfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBuZXR4ZW5fYWRhcHRlciwgbmFwaSk7CisJc3RydWN0IG54X2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0KKwkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBueF9ob3N0X3Nkc19yaW5nLCBuYXBpKTsKKworCXN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOworCiAJaW50IHR4X2NvbXBsZXRlOwotCWludCBjdHg7CiAJaW50IHdvcmtfZG9uZTsKIAogCXR4X2NvbXBsZXRlID0gbmV0eGVuX3Byb2Nlc3NfY21kX3JpbmcoYWRhcHRlcik7CiAKLQl3b3JrX2RvbmUgPSAwOwotCWZvciAoY3R4ID0gMDsgY3R4IDwgTUFYX1JDVl9DVFg7ICsrY3R4KSB7Ci0JCS8qCi0JCSAqIEZhaXJuZXNzIGlzc3VlLiBUaGlzIHdpbGwgZ2l2ZSB1bmR1ZSB3ZWlnaHQgdG8gdGhlCi0JCSAqIHJlY2VpdmUgY29udGV4dCAwLgotCQkgKi8KLQotCQkvKgotCQkgKiBUbyBhdm9pZCBzdGFydmF0aW9uLCB3ZSBnaXZlIGVhY2ggb2Ygb3VyIHJlY2VpdmVycywKLQkJICogYSBmcmFjdGlvbiBvZiB0aGUgcXVvdGEuIFNvbWV0aW1lcywgaXQgbWlnaHQgaGFwcGVuIHRoYXQgd2UKLQkJICogaGF2ZSBlbm91Z2ggcXVvdGEgdG8gcHJvY2VzcyBldmVyeSBwYWNrZXQsIGJ1dCBzaW5jZSBhbGwgdGhlCi0JCSAqIHBhY2tldHMgYXJlIG9uIG9uZSBjb250ZXh0LCBpdCBnZXRzIG9ubHkgaGFsZiBvZiB0aGUgcXVvdGEsCi0JCSAqIGFuZCBlbmRzIHVwIG5vdCBwcm9jZXNzaW5nIGl0LgotCQkgKi8KLQkJd29ya19kb25lICs9IG5ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKGFkYXB0ZXIsIGN0eCwKLQkJCQkJCSAgICAgYnVkZ2V0IC8gTUFYX1JDVl9DVFgpOwotCX0KKwl3b3JrX2RvbmUgPSBuZXR4ZW5fcHJvY2Vzc19yY3ZfcmluZyhzZHNfcmluZywgYnVkZ2V0KTsKIAogCWlmICgod29ya19kb25lIDwgYnVkZ2V0KSAmJiB0eF9jb21wbGV0ZSkgewotCQluZXRpZl9yeF9jb21wbGV0ZSgmYWRhcHRlci0+bmFwaSk7Ci0JCW5ldHhlbl9uaWNfZW5hYmxlX2ludChhZGFwdGVyKTsKKwkJbmFwaV9jb21wbGV0ZSgmc2RzX3JpbmctPm5hcGkpOworCQluZXR4ZW5fbmljX2VuYWJsZV9pbnQoc2RzX3JpbmcpOwogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNjEzLDEzICsxNzM1LDE3IEBACiAJLm5hbWUgPSBuZXR4ZW5fbmljX2RyaXZlcl9uYW1lLAogCS5pZF90YWJsZSA9IG5ldHhlbl9wY2lfdGJsLAogCS5wcm9iZSA9IG5ldHhlbl9uaWNfcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG5ldHhlbl9uaWNfcmVtb3ZlKQorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChuZXR4ZW5fbmljX3JlbW92ZSksCisJLnN1c3BlbmQgPSBuZXR4ZW5fbmljX3N1c3BlbmQsCisJLnJlc3VtZSA9IG5ldHhlbl9uaWNfcmVzdW1lCiB9OwogCiAvKiBEcml2ZXIgUmVnaXN0cmF0aW9uIG9uIE5ldFhlbiBjYXJkICAgICovCiAKIHN0YXRpYyBpbnQgX19pbml0IG5ldHhlbl9pbml0X21vZHVsZSh2b2lkKQogeworCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBuZXR4ZW5fbmljX2RyaXZlcl9zdHJpbmcpOworCiAJaWYgKChuZXR4ZW5fd29ya3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgibmV0eGVuIikpID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19uaXUuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCmluZGV4IGMzYjljODMuLmQ4NTIwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX25pdS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgTmV0WGVuLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgLSAyMDA5IE5ldFhlbiwgSW5jLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMiwxMiArMjIsOSBAQAogICoKICAqIENvbnRhY3QgSW5mb3JtYXRpb246CiAgKiAgICBpbmZvQG5ldHhlbi5jb20KLSAqIE5ldFhlbiwKLSAqIDM5NjUgRnJlZWRvbSBDaXJjbGUsIEZvdXJ0aCBmbG9vciwKLSAqIFNhbnRhIENsYXJhLCBDQSA5NTA1NAotICoKLSAqCi0gKiBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIE5ldHdvcmsgSW50ZXJmYWNlIFVuaXQgaC93IGJsb2NrLgorICogTmV0WGVuIEluYywKKyAqIDE4OTIyIEZvcmdlIERyaXZlCisgKiBDdXBlcnRpbm8sIENBIDk1MDE0LTA3MDEKICAqCiAgKi8KIApAQCAtMjk5LDE0ICsyOTYsNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiAwCi1pbnQgbmV0eGVuX25pdV94Z2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKLXsKLQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9BQ1RJVkVfSU5ULCAtMSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgIC8qICAwICAqLwotCiBzdGF0aWMgaW50IG5ldHhlbl9uaXVfZ2JlX2NsZWFyX3BoeV9pbnRlcnJ1cHRzKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgcmVzdWx0ID0gMDsKQEAgLTQ2NywxMDQgKzQ1Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi0vKgotICogbmV0eGVuX25pdV9nYmVfaGFuZGxlX3BoeV9pbnRlcnJ1cHQgLSBIYW5kbGVzIEdiRSBQSFkgaW50ZXJydXB0cwotICogQHBhcmFtIGVuYWJsZSAwIG1lYW5zIGRvbid0IGVuYWJsZSB0aGUgcG9ydAotICoJCSAxIG1lYW5zIGVuYWJsZSAob3IgcmUtZW5hYmxlKSB0aGUgcG9ydAotICovCi1pbnQgbmV0eGVuX25pdV9nYmVfaGFuZGxlX3BoeV9pbnRlcnJ1cHQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJCQlpbnQgcG9ydCwgbG9uZyBlbmFibGUpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JX191MzIgaW50X3NyYzsKLQotCXByaW50ayhLRVJOX0lORk8gUEZYICJORVRYRU46IEhhbmRsaW5nIFBIWSBpbnRlcnJ1cHQgb24gcG9ydCAlZCIKLQkgICAgICAgIiAoZGV2aWNlIGVuYWJsZSA9ICVkKVxuIiwgKGludClwb3J0LCAoaW50KWVuYWJsZSk7Ci0KLQkvKgotCSAqIFRoZSByZWFkIG9mIHRoZSBQSFkgSU5UIHN0YXR1cyB3aWxsIGNsZWFyIHRoZSBwZW5kaW5nCi0JICogaW50ZXJydXB0IHN0YXR1cwotCSAqLwotCWlmIChuZXR4ZW5fbml1X2diZV9waHlfcmVhZChhZGFwdGVyLAotCQkJCSAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfSU5UX1NUQVRVUywKLQkJCQkgICAgJmludF9zcmMpICE9IDApCi0JCXJlc3VsdCA9IC1FSU5WQUw7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQSFkgSW50ZXJydXB0IHNvdXJjZSA9IDB4JXggXG4iLCBpbnRfc3JjKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9qYWJiZXIoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiamFiYmVyIEludGVycnVwdCAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9wb2xhcml0eV9jaGFuZ2VkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInBvbGFyaXR5IGNoYW5nZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZW5lcmd5X2RldGVjdChpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJlbmVyZ3kgZGV0ZWN0IFxuIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZG93bnNoaWZ0KGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImRvd25zaGlmdCBcbiIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X21kaV94b3Zlcl9jaGFuZ2VkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIm1kaV94b3Zlcl9jaGFuZ2VkICIpOwotCQlpZiAobmV0eGVuX2dldF9waHlfaW50X2ZpZm9fb3Zlcl91bmRlcmZsb3coaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZmlmb19vdmVyX3VuZGVyZmxvdyAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9mYWxzZV9jYXJyaWVyKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImZhbHNlX2NhcnJpZXIgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfc3ltYm9sX2Vycm9yKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInN5bWJvbF9lcnJvciAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9hdXRvbmVnX2NvbXBsZXRlZChpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJhdXRvbmVnX2NvbXBsZXRlZCAiKTsKLQkJaWYgKG5ldHhlbl9nZXRfcGh5X2ludF9wYWdlX3JlY2VpdmVkKGludF9zcmMpKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggInBhZ2VfcmVjZWl2ZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfZHVwbGV4X2NoYW5nZWQoaW50X3NyYykpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZHVwbGV4X2NoYW5nZWQgIik7Ci0JCWlmIChuZXR4ZW5fZ2V0X3BoeV9pbnRfYXV0b25lZ19lcnJvcihpbnRfc3JjKSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJhdXRvbmVnX2Vycm9yICIpOwotCQlpZiAoKG5ldHhlbl9nZXRfcGh5X2ludF9zcGVlZF9jaGFuZ2VkKGludF9zcmMpKQotCQkgICAgfHwgKG5ldHhlbl9nZXRfcGh5X2ludF9saW5rX3N0YXR1c19jaGFuZ2VkKGludF9zcmMpKSkgewotCQkJX191MzIgc3RhdHVzOwotCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkJICAgICAgICJzcGVlZF9jaGFuZ2VkIG9yIGxpbmsgc3RhdHVzIGNoYW5nZWQiKTsKLQkJCWlmIChuZXR4ZW5fbml1X2diZV9waHlfcmVhZAotCQkJICAgIChhZGFwdGVyLAotCQkJICAgICBORVRYRU5fTklVX0dCX01JSV9NR01UX0FERFJfUEhZX1NUQVRVUywKLQkJCSAgICAgJnN0YXR1cykgPT0gMCkgewotCQkJCWlmIChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDIpIHsKLQkJCQkJcHJpbnRrCi0JCQkJCSAgICAoS0VSTl9JTkZPIFBGWCAiTGluayBzcGVlZCBjaGFuZ2VkIgotCQkJCQkgICAgICIgdG8gMTAwMCBNYnBzXG4iKTsKLQkJCQkJbmV0eGVuX25pdV9nYmVfc2V0X2dtaWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgIHBvcnQsCi0JCQkJCQkJCSAgICAgZW5hYmxlKTsKLQkJCQl9IGVsc2UgaWYgKG5ldHhlbl9nZXRfcGh5X3NwZWVkKHN0YXR1cykgPT0gMSkgewotCQkJCQlwcmludGsKLQkJCQkJICAgIChLRVJOX0lORk8gUEZYICJMaW5rIHNwZWVkIGNoYW5nZWQiCi0JCQkJCSAgICAgIiB0byAxMDAgTWJwc1xuIik7Ci0JCQkJCW5ldHhlbl9uaXVfZ2JlX3NldF9taWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgcG9ydCwKLQkJCQkJCQkJICAgIGVuYWJsZSk7Ci0JCQkJfSBlbHNlIGlmIChuZXR4ZW5fZ2V0X3BoeV9zcGVlZChzdGF0dXMpID09IDApIHsKLQkJCQkJcHJpbnRrCi0JCQkJCSAgICAoS0VSTl9JTkZPIFBGWCAiTGluayBzcGVlZCBjaGFuZ2VkIgotCQkJCQkgICAgICIgdG8gMTAgTWJwc1xuIik7Ci0JCQkJCW5ldHhlbl9uaXVfZ2JlX3NldF9taWlfbW9kZShhZGFwdGVyLAotCQkJCQkJCQkgICAgcG9ydCwKLQkJCQkJCQkJICAgIGVuYWJsZSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRVJST1IgcmVhZGluZyAiCi0JCQkJCSAgICAgICAiUEhZIHN0YXR1cy4gSW52YWxpZCBzcGVlZC5cbiIpOwotCQkJCQlyZXN1bHQgPSAtMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCQkgICAgICAgIkVSUk9SIHJlYWRpbmcgUEhZIHN0YXR1cy5cbiIpOwotCQkJCXJlc3VsdCA9IC0xOwotCQkJfQotCi0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQl9Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIC8qCiAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4KICAqIE5vdGUgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlIG11c3QgYWxyZWFkeSBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCkBAIC02NDEsODYgKzUzMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZiAwCi0vKiBFbmFibGUgYSBHYkUgaW50ZXJmYWNlICovCi1pbnQgbmV0eGVuX25pdV9lbmFibGVfZ2JlX3BvcnQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICAgIGludCBwb3J0LCBuZXR4ZW5fbml1X2diZV9pZm1vZGVfdCBtb2RlKQotewotCV9fdTMyIG1hY19jZmcwOwotCV9fdTMyIG1hY19jZmcxOwotCV9fdTMyIG1paV9jZmc7Ci0KLQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IE5FVFhFTl9OSVVfTUFYX0dCRV9QT1JUUykpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWFjX2NmZzAgPSAwOwotCW5ldHhlbl9nYl9zb2Z0X3Jlc2V0KG1hY19jZmcwKTsKLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCi0JCQkJICAgJm1hY19jZmcwLCA0KSkKLQkJcmV0dXJuIC1FSU87Ci0JbWFjX2NmZzAgPSAwOwotCW5ldHhlbl9nYl9lbmFibGVfdHgobWFjX2NmZzApOwotCW5ldHhlbl9nYl9lbmFibGVfcngobWFjX2NmZzApOwotCW5ldHhlbl9nYl91bnNldF9yeF9mbG93Y3RsKG1hY19jZmcwKTsKLQluZXR4ZW5fZ2JfdHhfcmVzZXRfcGIobWFjX2NmZzApOwotCW5ldHhlbl9nYl9yeF9yZXNldF9wYihtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3R4X3Jlc2V0X21hYyhtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3J4X3Jlc2V0X21hYyhtYWNfY2ZnMCk7Ci0KLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzAocG9ydCksCi0JCQkJICAgJm1hY19jZmcwLCA0KSkKLQkJcmV0dXJuIC1FSU87Ci0JbWFjX2NmZzEgPSAwOwotCW5ldHhlbl9nYl9zZXRfcHJlYW1ibGVsZW4obWFjX2NmZzEsIDB4Zik7Ci0JbmV0eGVuX2diX3NldF9kdXBsZXgobWFjX2NmZzEpOwotCW5ldHhlbl9nYl9zZXRfY3JjX2VuYWJsZShtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9wYWRzaG9ydChtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9jaGVja2xlbmd0aChtYWNfY2ZnMSk7Ci0JbmV0eGVuX2diX3NldF9odWdlZnJhbWVzKG1hY19jZmcxKTsKLQotCWlmIChtb2RlID09IE5FVFhFTl9OSVVfMTBfMTAwX01CKSB7Ci0JCW5ldHhlbl9nYl9zZXRfaW50Zm1vZGUobWFjX2NmZzEsIDEpOwotCQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKLQkJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksCi0JCQkJCSAgICZtYWNfY2ZnMSwgNCkpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQkvKiBzZXQgbWlpIG1vZGUgKi8KLQkJbmV0eGVuX2NyYl93cml0ZWxpdF9hZGFwdGVyKGFkYXB0ZXIsIE5FVFhFTl9OSVVfR0IwX0dNSUlfTU9ERSArCi0JCQkJCSAgICAocG9ydCA8PCAzKSwgMCk7Ci0JCW5ldHhlbl9jcmJfd3JpdGVsaXRfYWRhcHRlcihhZGFwdGVyLCBORVRYRU5fTklVX0dCMF9NSUlfTU9ERSArCi0JCQkJCSAgICAocG9ydCA8PCAzKSwgMSk7Ci0KLQl9IGVsc2UgaWYgKG1vZGUgPT0gTkVUWEVOX05JVV8xMDAwX01CKSB7Ci0JCW5ldHhlbl9nYl9zZXRfaW50Zm1vZGUobWFjX2NmZzEsIDIpOwotCQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwKLQkJCQkJICAgTkVUWEVOX05JVV9HQl9NQUNfQ09ORklHXzEocG9ydCksCi0JCQkJCSAgICZtYWNfY2ZnMSwgNCkpCi0JCQlyZXR1cm4gLUVJTzsKLQkJLyogc2V0IGdtaWkgbW9kZSAqLwotCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfTUlJX01PREUgKwotCQkJCQkgICAgKHBvcnQgPDwgMyksIDApOwotCQluZXR4ZW5fY3JiX3dyaXRlbGl0X2FkYXB0ZXIoYWRhcHRlciwgTkVUWEVOX05JVV9HQjBfR01JSV9NT0RFICsKLQkJCQkJICAgIChwb3J0IDw8IDMpLCAxKTsKLQl9Ci0JbWlpX2NmZyA9IDA7Ci0JbmV0eGVuX2diX3NldF9taWlfbWdtdF9jbG9ja3NlbGVjdChtaWlfY2ZnLCA3KTsKLQlpZiAoYWRhcHRlci0+aHdfd3JpdGVfd3goYWRhcHRlciwgTkVUWEVOX05JVV9HQl9NSUlfTUdNVF9DT05GSUcocG9ydCksCi0JCQkJICAgJm1paV9jZmcsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQltYWNfY2ZnMCA9IDA7Ci0JbmV0eGVuX2diX2VuYWJsZV90eChtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX2VuYWJsZV9yeChtYWNfY2ZnMCk7Ci0JbmV0eGVuX2diX3Vuc2V0X3J4X2Zsb3djdGwobWFjX2NmZzApOwotCW5ldHhlbl9nYl91bnNldF90eF9mbG93Y3RsKG1hY19jZmcwKTsKLQotCWlmIChhZGFwdGVyLT5od193cml0ZV93eChhZGFwdGVyLCBORVRYRU5fTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSwKLQkJCQkgICAmbWFjX2NmZzAsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIC8qIERpc2FibGUgYSBHYkUgaW50ZXJmYWNlICovCiBpbnQgbmV0eGVuX25pdV9kaXNhYmxlX2diZV9wb3J0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTg2OSwzOSArNjgwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKLS8qCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGlvbiBNQUMgYWRkcmVzcy4KLSAqIE5vdGUgdGhhdCB0aGUgcGFzc2VkLWluIHZhbHVlIG11c3QgYWxyZWFkeSBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCi0gKi8KLWludCBuZXR4ZW5fbml1X3hnX21hY2FkZHJfZ2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgICAgIG5ldHhlbl9ldGhlcm5ldF9tYWNhZGRyX3QgKiBhZGRyKQotewotCWludCBwaHkgPSBhZGFwdGVyLT5waHlzaWNhbF9wb3J0OwotCXUzMiBzdGF0aW9uaGlnaDsKLQl1MzIgc3RhdGlvbmxvdzsKLQl1OCB2YWxbOF07Ci0KLQlpZiAoYWRkciA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAocGh5ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFkYXB0ZXItPmh3X3JlYWRfd3goYWRhcHRlciwgTkVUWEVOX05JVV9YR0VfU1RBVElPTl9BRERSXzBfSEksCi0JCQkJICAmc3RhdGlvbmhpZ2gsIDQpKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoYWRhcHRlci0+aHdfcmVhZF93eChhZGFwdGVyLCBORVRYRU5fTklVX1hHRV9TVEFUSU9OX0FERFJfMF8xLAotCQkJCSAgJnN0YXRpb25sb3csIDQpKQotCQlyZXR1cm4gLUVJTzsKLQkoKF9fbGUzMiAqKXZhbClbMV0gPSBjcHVfdG9fbGUzMihzdGF0aW9uaGlnaCk7Ci0JKChfX2xlMzIgKil2YWwpWzBdID0gY3B1X3RvX2xlMzIoc3RhdGlvbmxvdyk7Ci0KLQltZW1jcHkoYWRkciwgdmFsICsgMiwgNik7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAgLyogIDAgICovCi0KIGludCBuZXR4ZW5fbml1X3hnX3NldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwKIAkJdTMyIG1vZGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfcGhhbl9yZWcuaAppbmRleCBiMjkzYWRjLi41MDE4MzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19waGFuX3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX3BoYW5fcmVnLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIC0gMjAwNiBOZXRYZW4sIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDkgTmV0WGVuLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTIyLDkgKzIyLDEwIEBACiAgKgogICogQ29udGFjdCBJbmZvcm1hdGlvbjoKICAqICAgIGluZm9AbmV0eGVuLmNvbQotICogTmV0WGVuLAotICogMzk2NSBGcmVlZG9tIENpcmNsZSwgRm91cnRoIGZsb29yLAotICogU2FudGEgQ2xhcmEsIENBIDk1MDU0CisgKiBOZXRYZW4gSW5jLAorICogMTg5MjIgRm9yZ2UgRHJpdmUKKyAqIEN1cGVydGlubywgQ0EgOTUwMTQtMDcwMQorICoKICAqLwogCiAjaWZuZGVmIF9fTklDX1BIQU5fUkVHX0hfCkBAIC05MCw2ICs5MSw3IEBACiAjZGVmaW5lIENSQl9SWF9MUk9fU1RBUlRfTlVNICAgICAgICBORVRYRU5fTklDX1JFRygweGMwKQogI2RlZmluZSBDUkJfTVBPUlRfTU9ERSAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhjNCkJLyogTXVsdGlwb3J0IE1vZGUgKi8KICNkZWZpbmUgQ1JCX0NNRF9SSU5HX1NJWkUgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4YzgpCisjZGVmaW5lIENSQl9ETUFfU0hJRlQgICAgICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGNjKQogI2RlZmluZSBDUkJfSU5UX1ZFQ1RPUiAgICAgICAgICAgICAgTkVUWEVOX05JQ19SRUcoMHhkNCkKICNkZWZpbmUgQ1JCX0NUWF9SRVNFVCAgICAgICAgICAgICAgIE5FVFhFTl9OSUNfUkVHKDB4ZDgpCiAjZGVmaW5lIENSQl9IT1NUX1NUU19QUk9EICAgICAgICAgICBORVRYRU5fTklDX1JFRygweGRjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmk1Mi5jIGIvZHJpdmVycy9uZXQvbmk1Mi5jCmluZGV4IGE4YmNjMDAuLjc3ZDQ0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNTIuYworKysgYi9kcml2ZXJzL25ldC9uaTUyLmMKQEAgLTQ0MSw2ICs0NDEsMTggQEAKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5pNTJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbmk1Ml9vcGVuLAorCS5uZG9fc3RvcAkJPSBuaTUyX2Nsb3NlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IG5pNTJfZ2V0X3N0YXRzLAorCS5uZG9fdHhfdGltZW91dCAJPSBuaTUyX3RpbWVvdXQsCisJLm5kb19zdGFydF94bWl0IAk9IG5pNTJfc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IG5pNTJfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7CiAJaW50IGksIHNpemUsIHJldHZhbDsKQEAgLTU2MSwxNSArNTczLDggQEAKIAkJcHJpbnRrKCJJUlEgJWQgKGFzc2lnbmVkIGFuZCBub3QgY2hlY2tlZCEpLlxuIiwgZGV2LT5pcnEpOwogCX0KIAotCWRldi0+b3BlbgkJPSBuaTUyX29wZW47Ci0JZGV2LT5zdG9wCQk9IG5pNTJfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gbmk1Ml9nZXRfc3RhdHM7Ci0JZGV2LT50eF90aW1lb3V0IAk9IG5pNTJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJm5pNTJfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gSFovMjA7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgCT0gbmk1Ml9zZW5kX3BhY2tldDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdDsKLQotCWRldi0+aWZfcG9ydCAJCT0gMDsKIAogCXJldHVybiAwOwogb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmk2NS5jIGIvZHJpdmVycy9uZXQvbmk2NS5jCmluZGV4IDI1NDA1NzIuLjY0NzRmMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNjUuYworKysgYi9kcml2ZXJzL25ldC9uaTY1LmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXZvaWQgKnRtZGJvdW5jZVtUTUROVU1dOwogCWludCB0bWRib3VuY2VudW07CiAJaW50IGxvY2sseG1pdF9xdWV1ZWQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisKIAl2b2lkICpzZWxmOwogCWludCBjbWRyX2FkZHI7CiAJaW50IGNhcmRubzsKQEAgLTI1Nyw3ICsyNTcsNiBAQAogc3RhdGljIGludCAgbmk2NV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgIG5pNjVfYWxsb2NfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgbmk2NV9mcmVlX2J1ZmZlcihzdHJ1Y3QgcHJpdiAqcCk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5pNjVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgaW50IGlycXRhYltdIF9faW5pdGRhdGEgPSB7IDksMTIsMTUsNSB9OyAvKiBpcnEgY29uZmlnLXRyYW5zbGF0ZSAqLwpAQCAtNDAxLDYgKzQwMCwxNyBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmk2NV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBuaTY1X29wZW4sCisJLm5kb19zdG9wCQk9IG5pNjVfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG5pNjVfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CQk9IG5pNjVfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIHRoaXMgaXMgdGhlIHJlYWwgY2FyZCBwcm9iZSAuLgogICovCkBAIC00ODEsOCArNDkxLDkgQEAKIAllbHNlIHsKIAkJaWYoZGV2LT5kbWEgPT0gMCkgewogCQkvKiAnc3R1Y2sgdGVzdCcgZnJvbSBsYW5jZS5jICovCi0JCQlsb25nIGRtYV9jaGFubmVscyA9ICgoaW5iKERNQTFfU1RBVF9SRUcpID4+IDQpICYgMHgwZikgfAotCQkJCQkgICAgKGluYihETUEyX1NUQVRfUkVHKSAmIDB4ZjApOworCQkJdW5zaWduZWQgbG9uZyBkbWFfY2hhbm5lbHMgPQorCQkJCSgoaW5iKERNQTFfU1RBVF9SRUcpID4+IDQpICYgMHgwZikKKwkJCQl8IChpbmIoRE1BMl9TVEFUX1JFRykgJiAweGYwKTsKIAkJCWZvcihpPTE7aTw1O2krKykgewogCQkJCWludCBkbWEgPSBkbWF0YWJbaV07CiAJCQkJaWYodGVzdF9iaXQoZG1hLCZkbWFfY2hhbm5lbHMpIHx8IHJlcXVlc3RfZG1hKGRtYSwibmk2NTEwIikpCkBAIC01NDgsMTMgKzU1OSw5IEBACiAJfQogCiAJZGV2LT5iYXNlX2FkZHIgPSBpb2FkZHI7Ci0JZGV2LT5vcGVuCQk9IG5pNjVfb3BlbjsKLQlkZXYtPnN0b3AJCT0gbmk2NV9jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IG5pNjVfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0CQk9IG5pNjVfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbmk2NV9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWi8yOwotCWRldi0+Z2V0X3N0YXRzCQk9IG5pNjVfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0OworCiAJcmV0dXJuIDA7IC8qIGV2ZXJ5dGhpbmcgaXMgT0sgKi8KIH0KIApAQCAtODk3LDE3ICs5MDQsMTYgQEAKIAogCQlpZihjc3IwICYgQ1NSMF9FUlIpCiAJCXsKLQkJCXN0cnVjdCBwcml2ICpwID0gZGV2LT5tbF9wcml2OwogCQkJaWYoZGVidWdsZXZlbCA+IDEpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZ2VuZXJhbCBlcnJvcjogJTA0eC5cbiIsZGV2LT5uYW1lLGNzcjApOwogCQkJaWYoY3NyMCAmIENTUjBfQkFCTCkKLQkJCQlwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJaWYoY3NyMCAmIENTUjBfTUlTUykgewogCQkJCWludCBpOwogCQkJCWZvcihpPTA7aTxSTUROVU07aSsrKQogCQkJCQlwcmludGsoIiUwMnggIixwLT5ybWRoZWFkW2ldLnUucy5zdGF0dXMpOwogCQkJCXByaW50aygiXG4iKTsKLQkJCQlwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJfQogCQkJaWYoY3NyMCAmIENTUjBfTUVSUikgewogCQkJCWlmKGRlYnVnbGV2ZWwgPiAxKQpAQCAtOTIyLDggKzkyOCw3IEBACiAgaW50IGo7CiAgZm9yKGo9MDtqPFJNRE5VTTtqKyspCiAgewotCXN0cnVjdCBwcml2ICpwID0gZGV2LT5tbF9wcml2OwotCWludCBpLGssbnVtMSxudW0yOworCWludCBpLCBudW0yOwogCWZvcihpPVJNRE5VTS0xO2k+MDtpLS0pIHsKIAkJIG51bTIgPSAocC0+cm1kbnVtICsgaSkgJiAoUk1ETlVNLTEpOwogCQkgaWYoIShwLT5ybWRoZWFkW251bTJdLnUucy5zdGF0dXMgJiBSQ1ZfT1dOKSkKQEAgLTkzMSw2ICs5MzYsNyBAQAogCX0KIAogCWlmKGkpIHsKKwkJaW50IGssIG51bTE7CiAJCWZvcihrPTA7azxSTUROVU07aysrKSB7CiAJCQludW0xID0gKHAtPnJtZG51bSArIGspICYgKFJNRE5VTS0xKTsKIAkJCWlmKCEocC0+cm1kaGVhZFtudW0xXS51LnMuc3RhdHVzICYgUkNWX09XTikpCkBAIC05NDIsNyArOTQ4LDYgQEAKIAkJaWYoZGVidWdsZXZlbCA+IDApCiAJCXsKIAkJCWNoYXIgYnVmWzI1Nl0sKmJ1ZjE7Ci0JCQlpbnQgazsKIAkJCWJ1ZjEgPSBidWY7CiAJCQlmb3Ioaz0wO2s8Uk1ETlVNO2srKykgewogCQkJCXNwcmludGYoYnVmMSwiJTAyeCAiLChwLT5ybWRoZWFkW2tdLnUucy5zdGF0dXMpKTsgLyogJiBSQ1ZfT1dOKSApOyAqLwpAQCAtOTk4LDEyICsxMDAzLDEyIEBACiAjZW5kaWYKIAkJIC8qIGNoZWNraW5nIHNvbWUgZXJyb3JzICovCiAJCQlpZih0bWRwLT5zdGF0dXMyICYgWE1JVF9SVFJZKQotCQkJCXAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJaWYodG1kcC0+c3RhdHVzMiAmIFhNSVRfTENBUikKLQkJCQlwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCWlmKHRtZHAtPnN0YXR1czIgJiAoWE1JVF9CVUZGIHwgWE1JVF9VRkxPICkpIHsKIAkJLyogdGhpcyBzdG9wcyB0aGUgeG1pdHRlciAqLwotCQkJCXAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJCWlmKGRlYnVnbGV2ZWwgPiAwKQogCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBYbWl0IEZJRk8vQlVGRiBlcnJvclxuIixkZXYtPm5hbWUpOwogCQkJCWlmKHAtPmZlYXR1cmVzICYgSU5JVF9SSU5HX0JFRk9SRV9TVEFSVCkgewpAQCAtMTAxNywxMiArMTAyMiwxMiBAQAogCQkJaWYoZGVidWdsZXZlbCA+IDIpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogeG1pdC1lcnJvcjogJTA0eCAlMDJ4LSUwNHhcbiIsZGV2LT5uYW1lLGNzcjAsKGludCkgdG1kc3RhdCwoaW50KSB0bWRwLT5zdGF0dXMyKTsKIAkJCWlmKCEoY3NyMCAmIENTUjBfQkFCTCkpIC8qIGRvbid0IGNvdW50IGVycm9ycyB0d2ljZSAqLwotCQkJCXAtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQl0bWRwLT5zdGF0dXMyID0gMDsKIAkJfQogCQllbHNlIHsKLQkJCXAtPnN0YXRzLnR4X2J5dGVzIC09IChzaG9ydCkodG1kcC0+Ymxlbik7Ci0JCQlwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X2J5dGVzIC09IChzaG9ydCkodG1kcC0+Ymxlbik7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJfQogCiAjaWZkZWYgWE1UX1ZJQV9TS0IKQEAgLTEwNTgsNyArMTA2Myw3IEBACiAJCQlpZighKHJtZHN0YXQgJiBSQ1ZfRVJSKSkgewogCQkJCWlmKHJtZHN0YXQgJiBSQ1ZfU1RBUlQpCiAJCQkJewotCQkJCQlwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWN2LCBwYWNrZXQgdG9vIGxvbmc6ICVkXG4iLGRldi0+bmFtZSxybWRwLT5tbGVuICYgMHgwZmZmKTsKIAkJCQl9CiAJCQl9CkBAIC0xMDY3LDE2ICsxMDcyLDE2IEBACiAJCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlY2VpdmUtZXJyb3I6ICUwNHgsIGxhbmNlLXN0YXR1czogJTA0eC8lMDR4XG4iLAogCQkJCQkJCQkJZGV2LT5uYW1lLChpbnQpIHJtZHN0YXQsY3NyMCwoaW50KSBpbncoUE9SVCtMX0RBVEFSRUcpICk7CiAJCQkJaWYocm1kc3RhdCAmIFJDVl9GUkFNKQotCQkJCQlwLT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKIAkJCQlpZihybWRzdGF0ICYgUkNWX09GTE8pCi0JCQkJCXAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJCQlpZihybWRzdGF0ICYgUkNWX0NSQykKLQkJCQkJcC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCQlpZihybWRzdGF0ICYgUkNWX0JVRl9FUlIpCi0JCQkJCXAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJCX0KIAkJCWlmKCEoY3NyMCAmIENTUjBfTUlTUykpIC8qIGRvbid0IGNvdW50IGVycm9ycyB0d2ljZSAqLwotCQkJCXAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCX0KIAkJZWxzZSBpZiggKGxlbiA9IChybWRwLT5tbGVuICYgMHgwZmZmKSAtIDQpID49IDYwKQogCQl7CkBAIC0xMTA3LDIwICsxMTEyLDIwIEBACiAJCQkJc2tiX3B1dChza2IsbGVuKTsKIAkJCQlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsICh1bnNpZ25lZCBjaGFyICopIHAtPnJlY3Zib3VuY2VbcC0+cm1kbnVtXSxsZW4pOwogI2VuZGlmCi0JCQkJcC0+c3RhdHMucnhfcGFja2V0cysrOwotCQkJCXAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKKwkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIAkJCQlza2ItPnByb3RvY29sPWV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwogCQkJCW5ldGlmX3J4KHNrYik7CiAJCQl9CiAJCQllbHNlCiAJCQl7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgYWxsb2MgbmV3IHNrX2J1ZmZcbiIsZGV2LT5uYW1lKTsKLQkJCQlwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQl9CiAJCX0KIAkJZWxzZSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVjZWl2ZWQgcnVudCBwYWNrZXRcbiIsZGV2LT5uYW1lKTsKLQkJCXAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJfQogCQlybWRwLT5ibGVuID0gLShSX0JVRl9TSVpFLTgpOwogCQlybWRwLT5tbGVuID0gMDsKQEAgLTEyMTQsMjMgKzEyMTksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5pNjVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0KLSNpZiAwCi0JaW50IGk7Ci0Jc3RydWN0IHByaXYgKnAgPSBkZXYtPm1sX3ByaXY7Ci0JZm9yKGk9MDtpPFJNRE5VTTtpKyspCi0JewotCQlzdHJ1Y3Qgcm1kICpybWRwID0gcC0+cm1kaGVhZCArICgocC0+cm1kbnVtICsgaSkgJiAoUk1ETlVNLTEpKTsKLQkJcHJpbnRrKCIlMDJ4ICIscm1kcC0+dS5zLnN0YXR1cyk7Ci0JfQotCXByaW50aygiXG4iKTsKLSNlbmRpZgotCi0JcmV0dXJuICYoKHN0cnVjdCBwcml2ICopZGV2LT5tbF9wcml2KS0+c3RhdHM7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWlmKCFuaTY1X2xhbmNlX3JlaW5pdChkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCAwYzBiNzUyLi41MGMxMTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtMTExNSw2ICsxMTE1LDEzMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGxpbmtfc3RhdHVzX21paShzdHJ1Y3Qgbml1ICpucCwgaW50ICpsaW5rX3VwX3ApCit7CisJc3RydWN0IG5pdV9saW5rX2NvbmZpZyAqbHAgPSAmbnAtPmxpbmtfY29uZmlnOworCWludCBlcnI7CisJaW50IGJtc3IsIGFkdmVydCwgY3RybDEwMDAsIHN0YXQxMDAwLCBscGEsIGJtY3IsIGVzdGF0dXM7CisJaW50IHN1cHBvcnRlZCwgYWR2ZXJ0aXNpbmcsIGFjdGl2ZV9zcGVlZCwgYWN0aXZlX2R1cGxleDsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTUNSKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJYm1jciA9IGVycjsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTVNSKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJYm1zciA9IGVycjsKKworCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOworCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJcmV0dXJuIGVycjsKKwlhZHZlcnQgPSBlcnI7CisKKwllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfTFBBKTsKKwlpZiAodW5saWtlbHkoZXJyIDwgMCkpCisJCXJldHVybiBlcnI7CisJbHBhID0gZXJyOworCisJaWYgKGxpa2VseShibXNyICYgQk1TUl9FU1RBVEVOKSkgeworCQllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfRVNUQVRVUyk7CisJCWlmICh1bmxpa2VseShlcnIgPCAwKSkKKwkJCXJldHVybiBlcnI7CisJCWVzdGF0dXMgPSBlcnI7CisKKwkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0NUUkwxMDAwKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKQorCQkJcmV0dXJuIGVycjsKKwkJY3RybDEwMDAgPSBlcnI7CisKKwkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX1NUQVQxMDAwKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKQorCQkJcmV0dXJuIGVycjsKKwkJc3RhdDEwMDAgPSBlcnI7CisJfSBlbHNlCisJCWVzdGF0dXMgPSBjdHJsMTAwMCA9IHN0YXQxMDAwID0gMDsKKworCXN1cHBvcnRlZCA9IDA7CisJaWYgKGJtc3IgJiBCTVNSX0FORUdDQVBBQkxFKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0F1dG9uZWc7CisJaWYgKGJtc3IgJiBCTVNSXzEwSEFMRikKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGY7CisJaWYgKGJtc3IgJiBCTVNSXzEwRlVMTCkKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGw7CisJaWYgKGJtc3IgJiBCTVNSXzEwMEhBTEYpCisJCXN1cHBvcnRlZCB8PSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZjsKKwlpZiAoYm1zciAmIEJNU1JfMTAwRlVMTCkKKwkJc3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsOworCWlmIChlc3RhdHVzICYgRVNUQVRVU18xMDAwX1RIQUxGKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmOworCWlmIChlc3RhdHVzICYgRVNUQVRVU18xMDAwX1RGVUxMKQorCQlzdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOworCWxwLT5zdXBwb3J0ZWQgPSBzdXBwb3J0ZWQ7CisKKwlhZHZlcnRpc2luZyA9IDA7CisJaWYgKGFkdmVydCAmIEFEVkVSVElTRV8xMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmOworCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTBGVUxMKQorCQlhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbDsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZjsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFXzEwMEZVTEwpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKwlpZiAoY3RybDEwMDAgJiBBRFZFUlRJU0VfMTAwMEhBTEYpCisJCWFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGY7CisJaWYgKGN0cmwxMDAwICYgQURWRVJUSVNFXzEwMDBGVUxMKQorCQlhZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsOworCisJaWYgKGJtY3IgJiBCTUNSX0FORU5BQkxFKSB7CisJCWludCBuZWcsIG5lZzEwMDA7CisKKwkJbHAtPmFjdGl2ZV9hdXRvbmVnID0gMTsKKwkJYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOworCisJCW5lZyA9IGFkdmVydCAmIGxwYTsKKwkJbmVnMTAwMCA9IChjdHJsMTAwMCA8PCAyKSAmIHN0YXQxMDAwOworCisJCWlmIChuZWcxMDAwICYgKExQQV8xMDAwRlVMTCB8IExQQV8xMDAwSEFMRikpCisJCQlhY3RpdmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQllbHNlIGlmIChuZWcgJiBMUEFfMTAwKQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTAwOworCQllbHNlIGlmIChuZWcgJiAoTFBBXzEwSEFMRiB8IExQQV8xMEZVTEwpKQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTA7CisJCWVsc2UKKwkJCWFjdGl2ZV9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7CisKKwkJaWYgKChuZWcxMDAwICYgTFBBXzEwMDBGVUxMKSB8fCAobmVnICYgTFBBX0RVUExFWCkpCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCWVsc2UgaWYgKGFjdGl2ZV9zcGVlZCAhPSBTUEVFRF9JTlZBTElEKQorCQkJYWN0aXZlX2R1cGxleCA9IERVUExFWF9IQUxGOworCQllbHNlCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CisJfSBlbHNlIHsKKwkJbHAtPmFjdGl2ZV9hdXRvbmVnID0gMDsKKworCQlpZiAoKGJtY3IgJiBCTUNSX1NQRUVEMTAwMCkgJiYgIShibWNyICYgQk1DUl9TUEVFRDEwMCkpCisJCQlhY3RpdmVfc3BlZWQgPSBTUEVFRF8xMDAwOworCQllbHNlIGlmIChibWNyICYgQk1DUl9TUEVFRDEwMCkKKwkJCWFjdGl2ZV9zcGVlZCA9IFNQRUVEXzEwMDsKKwkJZWxzZQorCQkJYWN0aXZlX3NwZWVkID0gU1BFRURfMTA7CisKKwkJaWYgKGJtY3IgJiBCTUNSX0ZVTExEUExYKQorCQkJYWN0aXZlX2R1cGxleCA9IERVUExFWF9GVUxMOworCQllbHNlCisJCQlhY3RpdmVfZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJfQorCisJbHAtPmFjdGl2ZV9hZHZlcnRpc2luZyA9IGFkdmVydGlzaW5nOworCWxwLT5hY3RpdmVfc3BlZWQgPSBhY3RpdmVfc3BlZWQ7CisJbHAtPmFjdGl2ZV9kdXBsZXggPSBhY3RpdmVfZHVwbGV4OworCSpsaW5rX3VwX3AgPSAhIShibXNyICYgQk1TUl9MU1RBVFVTKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnX3JnbWlpKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKIHsKIAlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CkBAIC0xMTcxLDYgKzEyOTUsMjIgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKK3sKKwlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CisKKwllcnIgPSBsaW5rX3N0YXR1c19taWkobnAsIGxpbmtfdXBfcCk7CisJbHAtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfVFA7CisJbHAtPmFjdGl2ZV9hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX1RQOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGJjbTg3MDRfcmVzZXQoc3RydWN0IG5pdSAqbnApCiB7CiAJaW50IGVyciwgbGltaXQ7CkBAIC0xNjc2LDM5ICsxODE2LDg4IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCS8qIFhYWCBjb25maWd1cmFibGUgWFhYICovCi0JLyogWFhYIGZvciBub3cgZG9uJ3QgYWR2ZXJ0aXNlIGhhbGYtZHVwbGV4IG9yIGFzeW0gcGF1c2UuLi4gWFhYICovCi0JYWR2ID0gQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQOwotCWlmIChibXNyICYgQk1TUl8xMEZVTEwpCi0JCWFkdiB8PSBBRFZFUlRJU0VfMTBGVUxMOwotCWlmIChibXNyICYgQk1TUl8xMDBGVUxMKQotCQlhZHYgfD0gQURWRVJUSVNFXzEwMEZVTEw7Ci0JZXJyID0gbWlpX3dyaXRlKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UsIGFkdik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlpZiAobHAtPmF1dG9uZWcpIHsKKwkJdTE2IGN0cmwxMDAwOwogCi0JaWYgKGJtc3IgJiBCTVNSX0VTVEFURU4pIHsKLQkJdTE2IGN0cmwxMDAwID0gMDsKLQotCQlpZiAoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEZVTEwpCi0JCQljdHJsMTAwMCB8PSBBRFZFUlRJU0VfMTAwMEZVTEw7Ci0JCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLCBNSUlfQ1RSTDEwMDAsIGN0cmwxMDAwKTsKKwkJYWR2ID0gQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQOworCQlpZiAoKGJtc3IgJiBCTVNSXzEwSEFMRikgJiYKKwkJCShscC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikpCisJCQlhZHYgfD0gQURWRVJUSVNFXzEwSEFMRjsKKwkJaWYgKChibXNyICYgQk1TUl8xMEZVTEwpICYmCisJCQkobHAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwpKQorCQkJYWR2IHw9IEFEVkVSVElTRV8xMEZVTEw7CisJCWlmICgoYm1zciAmIEJNU1JfMTAwSEFMRikgJiYKKwkJCShscC0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpKQorCQkJYWR2IHw9IEFEVkVSVElTRV8xMDBIQUxGOworCQlpZiAoKGJtc3IgJiBCTVNSXzEwMEZVTEwpICYmCisJCQkobHAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKSkKKwkJCWFkdiB8PSBBRFZFUlRJU0VfMTAwRlVMTDsKKwkJZXJyID0gbWlpX3dyaXRlKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UsIGFkdik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOworCisJCWlmIChsaWtlbHkoYm1zciAmIEJNU1JfRVNUQVRFTikpIHsKKwkJCWN0cmwxMDAwID0gMDsKKwkJCWlmICgoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEhBTEYpICYmCisJCQkJKGxwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpKQorCQkJCWN0cmwxMDAwIHw9IEFEVkVSVElTRV8xMDAwSEFMRjsKKwkJCWlmICgoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEZVTEwpICYmCisJCQkJKGxwLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpKQorCQkJCWN0cmwxMDAwIHw9IEFEVkVSVElTRV8xMDAwRlVMTDsKKwkJCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLAorCQkJCQlNSUlfQ1RSTDEwMDAsIGN0cmwxMDAwKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWJtY3IgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CisJfSBlbHNlIHsKKwkJLyogIWxwLT5hdXRvbmVnICovCisJCWludCBmdWxsZHB4OworCisJCWlmIChscC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKSB7CisJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7CisJCQlmdWxsZHB4ID0gMTsKKwkJfSBlbHNlIGlmIChscC0+ZHVwbGV4ID09IERVUExFWF9IQUxGKQorCQkJZnVsbGRweCA9IDA7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmIChscC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQkJLyogaWYgWC1mdWxsIHJlcXVlc3RlZCB3aGlsZSBub3Qgc3VwcG9ydGVkLCBvcgorCQkJICAgWC1oYWxmIHJlcXVlc3RlZCB3aGlsZSBub3Qgc3VwcG9ydGVkLi4uICovCisJCQlpZiAoKGZ1bGxkcHggJiYgIShlc3RhdCAmIEVTVEFUVVNfMTAwMF9URlVMTCkpIHx8CisJCQkJKCFmdWxsZHB4ICYmICEoZXN0YXQgJiBFU1RBVFVTXzEwMDBfVEhBTEYpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJtY3IgfD0gQk1DUl9TUEVFRDEwMDA7CisJCX0gZWxzZSBpZiAobHAtPnNwZWVkID09IFNQRUVEXzEwMCkgeworCQkJaWYgKChmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTAwRlVMTCkpIHx8CisJCQkJKCFmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTAwSEFMRikpKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYm1jciB8PSBCTUNSX1NQRUVEMTAwOworCQl9IGVsc2UgaWYgKGxwLT5zcGVlZCA9PSBTUEVFRF8xMCkgeworCQkJaWYgKChmdWxsZHB4ICYmICEoYm1zciAmIEJNU1JfMTBGVUxMKSkgfHwKKwkJCQkoIWZ1bGxkcHggJiYgIShibXNyICYgQk1TUl8xMEhBTEYpKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JYm1jciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKIAogCWVyciA9IG1paV93cml0ZShucCwgbnAtPnBoeV9hZGRyLCBNSUlfQk1DUiwgYm1jcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorI2lmIDAKIAllcnIgPSBtaWlfcmVhZChucCwgbnAtPnBoeV9hZGRyLCBNSUlfQk1DUik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CisJYm1jciA9IGVycjsKKwogCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9CTVNSKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLSNpZiAwCisJYm1zciA9IGVycjsKKwogCXByX2luZm8oUEZYICJQb3J0ICV1IGFmdGVyIE1JSSBpbml0IGJtY3JbJTA0eF0gYm1zclslMDR4XVxuIiwKIAkJbnAtPnBvcnQsIGJtY3IsIGJtc3IpOwogI2VuZGlmCkBAIC0yMDU0LDg3ICsyMjQzLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGxpbmtfc3RhdHVzXzFnKHN0cnVjdCBuaXUgKm5wLCBpbnQgKmxpbmtfdXBfcCkKLXsKLQlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7Ci0JdTE2IGN1cnJlbnRfc3BlZWQsIGJtc3I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1OCBjdXJyZW50X2R1cGxleDsKLQlpbnQgZXJyLCBsaW5rX3VwOwotCi0JbGlua191cCA9IDA7Ci0JY3VycmVudF9zcGVlZCA9IFNQRUVEX0lOVkFMSUQ7Ci0JY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSU5WQUxJRDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JZXJyID0gLUVJTlZBTDsKLQlpZiAobnAtPmxpbmtfY29uZmlnLmxvb3BiYWNrX21vZGUgIT0gTE9PUEJBQ0tfRElTQUJMRUQpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0JNU1IpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKLQotCWJtc3IgPSBlcnI7Ci0JaWYgKGJtc3IgJiBCTVNSX0xTVEFUVVMpIHsKLQkJdTE2IGFkdiwgbHBhLCBjb21tb24sIGVzdGF0OwotCi0JCWVyciA9IG1paV9yZWFkKG5wLCBucC0+cGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0OwotCQlhZHYgPSBlcnI7Ci0KLQkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0xQQSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXQ7Ci0JCWxwYSA9IGVycjsKLQotCQljb21tb24gPSBhZHYgJiBscGE7Ci0KLQkJZXJyID0gbWlpX3JlYWQobnAsIG5wLT5waHlfYWRkciwgTUlJX0VTVEFUVVMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0OwotCQllc3RhdCA9IGVycjsKLQotCQlsaW5rX3VwID0gMTsKLQkJaWYgKGVzdGF0ICYgKEVTVEFUVVNfMTAwMF9URlVMTCB8IEVTVEFUVVNfMTAwMF9USEFMRikpIHsKLQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDAwOwotCQkJaWYgKGVzdGF0ICYgRVNUQVRVU18xMDAwX1RGVUxMKQotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0JCQllbHNlCi0JCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJfSBlbHNlIHsKLQkJCWlmIChjb21tb24gJiBBRFZFUlRJU0VfMTAwQkFTRTQpIHsKLQkJCQljdXJyZW50X3NwZWVkID0gU1BFRURfMTAwOwotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCQl9IGVsc2UgaWYgKGNvbW1vbiAmIEFEVkVSVElTRV8xMDBGVUxMKSB7Ci0JCQkJY3VycmVudF9zcGVlZCA9IFNQRUVEXzEwMDsKLQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9GVUxMOwotCQkJfSBlbHNlIGlmIChjb21tb24gJiBBRFZFUlRJU0VfMTAwSEFMRikgewotCQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDA7Ci0JCQkJY3VycmVudF9kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJCX0gZWxzZSBpZiAoY29tbW9uICYgQURWRVJUSVNFXzEwRlVMTCkgewotCQkJCWN1cnJlbnRfc3BlZWQgPSBTUEVFRF8xMDsKLQkJCQljdXJyZW50X2R1cGxleCA9IERVUExFWF9GVUxMOwotCQkJfSBlbHNlIGlmIChjb21tb24gJiBBRFZFUlRJU0VfMTBIQUxGKSB7Ci0JCQkJY3VycmVudF9zcGVlZCA9IFNQRUVEXzEwOwotCQkJCWN1cnJlbnRfZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCQl9IGVsc2UKLQkJCQlsaW5rX3VwID0gMDsKLQkJfQotCX0KLQlscC0+YWN0aXZlX3NwZWVkID0gY3VycmVudF9zcGVlZDsKLQlscC0+YWN0aXZlX2R1cGxleCA9IGN1cnJlbnRfZHVwbGV4OwotCWVyciA9IDA7Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JKmxpbmtfdXBfcCA9IGxpbmtfdXA7Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGludCBuaXVfbGlua19zdGF0dXMoc3RydWN0IG5pdSAqbnAsIGludCAqbGlua191cF9wKQogewogCWNvbnN0IHN0cnVjdCBuaXVfcGh5X29wcyAqb3BzID0gbnAtPnBoeV9vcHM7CkBAIC0yMjg0LDcgKzIzOTIsNiBAQAogCXN0cnVjdCBuaXVfbGlua19jb25maWcgKmxwID0gJm5wLT5saW5rX2NvbmZpZzsKIAl1bnNpZ25lZCBsb25nIGN0cmxfcmVnLCB0ZXN0X2NmZ19yZWcsIHBsbF9jZmcsIGk7CiAJdTY0IGN0cmxfdmFsLCB0ZXN0X2NmZ192YWwsIHNpZywgbWFzaywgdmFsOwotCWludCBlcnI7CiAJdTY0IHJlc2V0X3ZhbDsKIAogCXN3aXRjaCAobnAtPnBvcnQpIHsKQEAgLTIzMzcsNiArMjQ0NCw3IEBACiAJLyogSW5pdGlhbGl6ZSBhbGwgNCBsYW5lcyBvZiB0aGUgU0VSREVTLiAgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCXUzMiByeHR4X2N0cmwsIGdsdWUwOworCQlpbnQgZXJyOwogCiAJCWVyciA9IGVzcl9yZWFkX3J4dHhfY3RybChucCwgaSwgJnJ4dHhfY3RybCk7CiAJCWlmIChlcnIpCkBAIC0yNDU2LDcgKzI1NjQsNyBAQAogCiAJCWNhc2UgTklVX0ZMQUdTXzEwRzoKIAkJCS8qIDEwRyBjb3BwZXIgKi8KLQkJCXRwID0gJnBoeV90ZW1wbGF0ZV8xZ19jb3BwZXI7CisJCQl0cCA9ICZwaHlfdGVtcGxhdGVfMTBnX2NvcHBlcjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgTklVX0ZMQUdTX0ZJQkVSOgpAQCAtMjg3Myw3ICsyOTgxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIDAKIHN0YXRpYyBpbnQgdGNhbV91c2VyX2lwX2NsYXNzX3NldChzdHJ1Y3Qgbml1ICpucCwgdW5zaWduZWQgbG9uZyBjbGFzcywKIAkJCQkgIGludCBpcHY2LCB1NjQgcHJvdG9jb2xfaWQsCiAJCQkJICB1NjQgdG9zX21hc2ssIHU2NCB0b3NfdmFsKQpAQCAtMjkwMSw3ICszMDA4LDYgQEAKIAogCXJldHVybiAwOwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgdGNhbV9lYXJseV9pbml0KHN0cnVjdCBuaXUgKm5wKQogewpAQCAtMzE2OCw2ICszMjc0LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIEVudHJpZXMgZm9yIHRoZSBwb3J0cyBhcmUgaW50ZXJsZWF2ZWQgaW4gdGhlIFRDQU0gKi8KK3N0YXRpYyB1MTYgdGNhbV9nZXRfaW5kZXgoc3RydWN0IG5pdSAqbnAsIHUxNiBpZHgpCit7CisJLyogT25lIGVudHJ5IHJlc2VydmVkIGZvciBJUCBmcmFnbWVudCBydWxlICovCisJaWYgKGlkeCA+PSAobnAtPmNsYXMudGNhbV9zeiAtIDEpKQorCQlpZHggPSAwOworCXJldHVybiAobnAtPmNsYXMudGNhbV90b3AgKyAoKGlkeCsxKSAqIG5wLT5wYXJlbnQtPm51bV9wb3J0cykpOworfQorCitzdGF0aWMgdTE2IHRjYW1fZ2V0X3NpemUoc3RydWN0IG5pdSAqbnApCit7CisJLyogT25lIGVudHJ5IHJlc2VydmVkIGZvciBJUCBmcmFnbWVudCBydWxlICovCisJcmV0dXJuIG5wLT5jbGFzLnRjYW1fc3ogLSAxOworfQorCitzdGF0aWMgdTE2IHRjYW1fZ2V0X3ZhbGlkX2VudHJ5X2NudChzdHJ1Y3Qgbml1ICpucCkKK3sKKwkvKiBPbmUgZW50cnkgcmVzZXJ2ZWQgZm9yIElQIGZyYWdtZW50IHJ1bGUgKi8KKwlyZXR1cm4gbnAtPmNsYXMudGNhbV92YWxpZF9lbnRyaWVzIC0gMTsKK30KKwogc3RhdGljIHZvaWQgbml1X3J4X3NrYl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkgICAgICB1MzIgb2Zmc2V0LCB1MzIgc2l6ZSkKIHsKQEAgLTMzOTAsNiArMzUxNyw3IEBACiAJcnAtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbnAtPmRldik7CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJwLT5yeF9jaGFubmVsKTsKIAluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCiAJcmV0dXJuIG51bV9yY3I7CkBAIC0zNjY5LDcgKzM3OTcsNyBAQAogCXdvcmtfZG9uZSA9IG5pdV9wb2xsX2NvcmUobnAsIGxwLCBidWRnZXQpOwogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJbml1X2xkZ19yZWFybShucCwgbHAsIDEpOwogCX0KIAlyZXR1cm4gd29ya19kb25lOwpAQCAtNDA4OCwxMiArNDIxNiwxMiBAQAogc3RhdGljIHZvaWQgbml1X3NjaGVkdWxlX25hcGkoc3RydWN0IG5pdSAqbnAsIHN0cnVjdCBuaXVfbGRnICpscCwKIAkJCSAgICAgIHU2NCB2MCwgdTY0IHYxLCB1NjQgdjIpCiB7Ci0JaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpKSB7CisJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkpIHsKIAkJbHAtPnYwID0gdjA7CiAJCWxwLT52MSA9IHYxOwogCQlscC0+djIgPSB2MjsKIAkJX19uaXVfZmFzdHBhdGhfaW50ZXJydXB0KG5wLCBscC0+bGRnX251bSwgdjApOwotCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCV9fbmFwaV9zY2hlZHVsZSgmbHAtPm5hcGkpOwogCX0KIH0KIApAQCAtNDg5MCw4ICs1MDE4LDcgQEAKIAlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOwogCWludCBpbmRleCwgZXJyOwogCi0JLyogWFhYIGZpeCB0aGlzIGFsbG9jYXRpb24gc2NoZW1lIFhYWCAqLwotCWluZGV4ID0gY3AtPnRjYW1faW5kZXg7CisJaW5kZXggPSBjcC0+dGNhbV90b3A7CiAJdHAgPSAmcGFyZW50LT50Y2FtW2luZGV4XTsKIAogCS8qIE5vdGUgdGhhdCB0aGUgbm9wb3J0IGJpdCBpcyB0aGUgc2FtZSBpbiBib3RoIGlwdjQgYW5kCkBAIC00OTA4LDYgKzUwMzUsOCBAQAogCWVyciA9IHRjYW1fYXNzb2Nfd3JpdGUobnAsIGluZGV4LCB0cC0+YXNzb2NfZGF0YSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKKwl0cC0+dmFsaWQgPSAxOworCWNwLT50Y2FtX3ZhbGlkX2VudHJpZXMrKzsKIAogCXJldHVybiAwOwogfQpAQCAtNTIxMSwxMCArNTM0MCwxMCBAQAogCWlmIChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfMTBHKSB7CiAJCXZhbCB8PSBYTUFDX0NPTkZJR19NT0RFX1hHTUlJOwogCX0gZWxzZSB7Ci0JCWlmIChscC0+YWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMCkKLQkJCXZhbCB8PSBYTUFDX0NPTkZJR19NT0RFX01JSTsKLQkJZWxzZQorCQlpZiAobHAtPmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAwKQogCQkJdmFsIHw9IFhNQUNfQ09ORklHX01PREVfR01JSTsKKwkJZWxzZQorCQkJdmFsIHw9IFhNQUNfQ09ORklHX01PREVfTUlJOwogCX0KIAogCW53NjRfbWFjKFhNQUNfQ09ORklHLCB2YWwpOwpAQCAtNjQ0NiwxMSArNjU3NSwxMSBAQAogCiAJaXB2NiA9IGlobCA9IDA7CiAJc3dpdGNoIChza2ItPnByb3RvY29sKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQKToKIAkJaXBfcHJvdG8gPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7CiAJCWlobCA9IGlwX2hkcihza2IpLT5paGw7CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQlpcF9wcm90byA9IGlwdjZfaGRyKHNrYiktPm5leHRoZHI7CiAJCWlobCA9ICg0MCA+PiAyKTsKIAkJaXB2NiA9IDE7CkBAIC02NzAyLDE3ICs2ODMxLDI3IEBACiAJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKCpjbWQpKTsKIAljbWQtPnBoeV9hZGRyZXNzID0gbnAtPnBoeV9hZGRyOwogCWNtZC0+c3VwcG9ydGVkID0gbHAtPnN1cHBvcnRlZDsKLQljbWQtPmFkdmVydGlzaW5nID0gbHAtPmFkdmVydGlzaW5nOwotCWNtZC0+YXV0b25lZyA9IGxwLT5hdXRvbmVnOworCWNtZC0+YWR2ZXJ0aXNpbmcgPSBscC0+YWN0aXZlX2FkdmVydGlzaW5nOworCWNtZC0+YXV0b25lZyA9IGxwLT5hY3RpdmVfYXV0b25lZzsKIAljbWQtPnNwZWVkID0gbHAtPmFjdGl2ZV9zcGVlZDsKIAljbWQtPmR1cGxleCA9IGxwLT5hY3RpdmVfZHVwbGV4OworCWNtZC0+cG9ydCA9IChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfRklCRVIpID8gUE9SVF9GSUJSRSA6IFBPUlRfVFA7CisJY21kLT50cmFuc2NlaXZlciA9IChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfWENWUl9TRVJERVMpID8KKwkJWENWUl9FWFRFUk5BTCA6IFhDVlJfSU5URVJOQUw7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBuaXVfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgbml1X2xpbmtfY29uZmlnICpscCA9ICZucC0+bGlua19jb25maWc7CisKKwlscC0+YWR2ZXJ0aXNpbmcgPSBjbWQtPmFkdmVydGlzaW5nOworCWxwLT5zcGVlZCA9IGNtZC0+c3BlZWQ7CisJbHAtPmR1cGxleCA9IGNtZC0+ZHVwbGV4OworCWxwLT5hdXRvbmVnID0gY21kLT5hdXRvbmVnOworCXJldHVybiBuaXVfaW5pdF9saW5rKG5wKTsKIH0KIAogc3RhdGljIHUzMiBuaXVfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC02NzI3LDYgKzY4NjYsMTYgQEAKIAlucC0+bXNnX2VuYWJsZSA9IHZhbHVlOwogfQogCitzdGF0aWMgaW50IG5pdV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG5wLT5saW5rX2NvbmZpZy5hdXRvbmVnKQorCQlyZXR1cm4gbml1X2luaXRfbGluayhucCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBuaXVfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CkBAIC02Nzc4LDYgKzY5MjcsNzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbml1X2V0aGZsb3dfdG9fbDNwcm90byhpbnQgZmxvd190eXBlLCB1OCAqcGlkKQoreworCXN3aXRjaCAoZmxvd190eXBlKSB7CisJY2FzZSBUQ1BfVjRfRkxPVzoKKwljYXNlIFRDUF9WNl9GTE9XOgorCQkqcGlkID0gSVBQUk9UT19UQ1A7CisJCWJyZWFrOworCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBVRFBfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fVURQOworCQlicmVhazsKKwljYXNlIFNDVFBfVjRfRkxPVzoKKwljYXNlIFNDVFBfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fU0NUUDsKKwkJYnJlYWs7CisJY2FzZSBBSF9WNF9GTE9XOgorCWNhc2UgQUhfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fQUg7CisJCWJyZWFrOworCWNhc2UgRVNQX1Y0X0ZMT1c6CisJY2FzZSBFU1BfVjZfRkxPVzoKKwkJKnBpZCA9IElQUFJPVE9fRVNQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqcGlkID0gMDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG5pdV9jbGFzc190b19ldGhmbG93KHU2NCBjbGFzcywgaW50ICpmbG93X3R5cGUpCit7CisJc3dpdGNoIChjbGFzcykgeworCWNhc2UgQ0xBU1NfQ09ERV9UQ1BfSVBWNDoKKwkJKmZsb3dfdHlwZSA9IFRDUF9WNF9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfVURQX0lQVjQ6CisJCSpmbG93X3R5cGUgPSBVRFBfVjRfRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBDTEFTU19DT0RFX0FIX0VTUF9JUFY0OgorCQkqZmxvd190eXBlID0gQUhfVjRfRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBDTEFTU19DT0RFX1NDVFBfSVBWNDoKKwkJKmZsb3dfdHlwZSA9IFNDVFBfVjRfRkxPVzsKKwkJYnJlYWs7CisJY2FzZSBDTEFTU19DT0RFX1RDUF9JUFY2OgorCQkqZmxvd190eXBlID0gVENQX1Y2X0ZMT1c7CisJCWJyZWFrOworCWNhc2UgQ0xBU1NfQ09ERV9VRFBfSVBWNjoKKwkJKmZsb3dfdHlwZSA9IFVEUF9WNl9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfQUhfRVNQX0lQVjY6CisJCSpmbG93X3R5cGUgPSBBSF9WNl9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfU0NUUF9JUFY2OgorCQkqZmxvd190eXBlID0gU0NUUF9WNl9GTE9XOworCQlicmVhazsKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HMToKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HMjoKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HMzoKKwljYXNlIENMQVNTX0NPREVfVVNFUl9QUk9HNDoKKwkJKmZsb3dfdHlwZSA9IElQX1VTRVJfRkxPVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgbml1X2V0aGZsb3dfdG9fY2xhc3MoaW50IGZsb3dfdHlwZSwgdTY0ICpjbGFzcykKIHsKIAlzd2l0Y2ggKGZsb3dfdHlwZSkgewpAQCAtNjc4Nyw3ICs3MDA1LDggQEAKIAljYXNlIFVEUF9WNF9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX1VEUF9JUFY0OwogCQlicmVhazsKLQljYXNlIEFIX0VTUF9WNF9GTE9XOgorCWNhc2UgQUhfVjRfRkxPVzoKKwljYXNlIEVTUF9WNF9GTE9XOgogCQkqY2xhc3MgPSBDTEFTU19DT0RFX0FIX0VTUF9JUFY0OwogCQlicmVhazsKIAljYXNlIFNDVFBfVjRfRkxPVzoKQEAgLTY3OTksNyArNzAxOCw4IEBACiAJY2FzZSBVRFBfVjZfRkxPVzoKIAkJKmNsYXNzID0gQ0xBU1NfQ09ERV9VRFBfSVBWNjsKIAkJYnJlYWs7Ci0JY2FzZSBBSF9FU1BfVjZfRkxPVzoKKwljYXNlIEFIX1Y2X0ZMT1c6CisJY2FzZSBFU1BfVjZfRkxPVzoKIAkJKmNsYXNzID0gQ0xBU1NfQ09ERV9BSF9FU1BfSVBWNjsKIAkJYnJlYWs7CiAJY2FzZSBTQ1RQX1Y2X0ZMT1c6CkBAIC02ODE2LDggKzcwMzYsNiBAQAogewogCXU2NCBldGhmbG93ID0gMDsKIAotCWlmIChmbG93X2tleSAmIEZMT1dfS0VZX1BPUlQpCi0JCWV0aGZsb3cgfD0gUlhIX0RFVl9QT1JUOwogCWlmIChmbG93X2tleSAmIEZMT1dfS0VZX0wyREEpCiAJCWV0aGZsb3cgfD0gUlhIX0wyREE7CiAJaWYgKGZsb3dfa2V5ICYgRkxPV19LRVlfVkxBTikKQEAgLTY4NDEsOCArNzA1OSw2IEBACiB7CiAJdTY0IGtleSA9IDA7CiAKLQlpZiAoZXRoZmxvdyAmIFJYSF9ERVZfUE9SVCkKLQkJa2V5IHw9IEZMT1dfS0VZX1BPUlQ7CiAJaWYgKGV0aGZsb3cgJiBSWEhfTDJEQSkKIAkJa2V5IHw9IEZMT1dfS0VZX0wyREE7CiAJaWYgKGV0aGZsb3cgJiBSWEhfVkxBTikKQEAgLTY4NjQsNDEgKzcwODAsMjc5IEBACiAKIH0KIAotc3RhdGljIGludCBuaXVfZ2V0X2hhc2hfb3B0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqY21kKQorc3RhdGljIGludCBuaXVfZ2V0X2hhc2hfb3B0cyhzdHJ1Y3Qgbml1ICpucCwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKIHsKLQlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdTY0IGNsYXNzOwogCi0JY21kLT5kYXRhID0gMDsKKwluZmMtPmRhdGEgPSAwOwogCi0JaWYgKCFuaXVfZXRoZmxvd190b19jbGFzcyhjbWQtPmZsb3dfdHlwZSwgJmNsYXNzKSkKKwlpZiAoIW5pdV9ldGhmbG93X3RvX2NsYXNzKG5mYy0+Zmxvd190eXBlLCAmY2xhc3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChucC0+cGFyZW50LT50Y2FtX2tleVtjbGFzcyAtIENMQVNTX0NPREVfVVNFUl9QUk9HMV0gJgogCSAgICBUQ0FNX0tFWV9ESVNDKQotCQljbWQtPmRhdGEgPSBSWEhfRElTQ0FSRDsKKwkJbmZjLT5kYXRhID0gUlhIX0RJU0NBUkQ7CiAJZWxzZQotCi0JCWNtZC0+ZGF0YSA9IG5pdV9mbG93a2V5X3RvX2V0aGZsb3cobnAtPnBhcmVudC0+Zmxvd19rZXlbY2xhc3MgLQorCQluZmMtPmRhdGEgPSBuaXVfZmxvd2tleV90b19ldGhmbG93KG5wLT5wYXJlbnQtPmZsb3dfa2V5W2NsYXNzIC0KIAkJCQkJCSAgICAgIENMQVNTX0NPREVfVVNFUl9QUk9HMV0pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5pdV9zZXRfaGFzaF9vcHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpCitzdGF0aWMgdm9pZCBuaXVfZ2V0X2lwNGZzX2Zyb21fdGNhbV9rZXkoc3RydWN0IG5pdV90Y2FtX2VudHJ5ICp0cCwKKwkJCQkJc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmc3ApCit7CisKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0c3JjID0gKHRwLT5rZXlbM10gJiBUQ0FNX1Y0S0VZM19TQUREUikgPj4KKwkJVENBTV9WNEtFWTNfU0FERFJfU0hJRlQ7CisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNGRzdCA9ICh0cC0+a2V5WzNdICYgVENBTV9WNEtFWTNfREFERFIpID4+CisJCVRDQU1fVjRLRVkzX0RBRERSX1NISUZUOworCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRzcmMgPSAodHAtPmtleV9tYXNrWzNdICYgVENBTV9WNEtFWTNfU0FERFIpID4+CisJCVRDQU1fVjRLRVkzX1NBRERSX1NISUZUOworCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRkc3QgPSAodHAtPmtleV9tYXNrWzNdICYgVENBTV9WNEtFWTNfREFERFIpID4+CisJCVRDQU1fVjRLRVkzX0RBRERSX1NISUZUOworCisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNHNyYyA9CisJCWNwdV90b19iZTMyKGZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRzcmMpOworCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRzcmMgPQorCQljcHVfdG9fYmUzMihmc3AtPm1fdS50Y3BfaXA0X3NwZWMuaXA0c3JjKTsKKwlmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0ID0KKwkJY3B1X3RvX2JlMzIoZnNwLT5oX3UudGNwX2lwNF9zcGVjLmlwNGRzdCk7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNGRzdCA9CisJCWNwdV90b19iZTMyKGZzcC0+bV91LnRjcF9pcDRfc3BlYy5pcDRkc3QpOworCisJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnRvcyA9ICh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfVE9TKSA+PgorCQlUQ0FNX1Y0S0VZMl9UT1NfU0hJRlQ7CisJZnNwLT5tX3UudGNwX2lwNF9zcGVjLnRvcyA9ICh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9UT1MpID4+CisJCVRDQU1fVjRLRVkyX1RPU19TSElGVDsKKworCXN3aXRjaCAoZnNwLT5mbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJCWZzcC0+aF91LnRjcF9pcDRfc3BlYy5wc3JjID0KKwkJCSgodHAtPmtleVsyXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJIFRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUKSA+PiAxNjsKKwkJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBkc3QgPQorCQkJKCh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQkgVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQpICYgMHhmZmZmOworCQlmc3AtPm1fdS50Y3BfaXA0X3NwZWMucHNyYyA9CisJCQkoKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJIFRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUKSA+PiAxNjsKKwkJZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBkc3QgPQorCQkJKCh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCSBUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVCkgJiAweGZmZmY7CisKKwkJZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMgPQorCQkJY3B1X3RvX2JlMTYoZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMpOworCQlmc3AtPmhfdS50Y3BfaXA0X3NwZWMucGRzdCA9CisJCQljcHVfdG9fYmUxNihmc3AtPmhfdS50Y3BfaXA0X3NwZWMucGRzdCk7CisJCWZzcC0+bV91LnRjcF9pcDRfc3BlYy5wc3JjID0KKwkJCWNwdV90b19iZTE2KGZzcC0+bV91LnRjcF9pcDRfc3BlYy5wc3JjKTsKKwkJZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBkc3QgPQorCQkJY3B1X3RvX2JlMTYoZnNwLT5tX3UudGNwX2lwNF9zcGVjLnBkc3QpOworCQlicmVhazsKKwljYXNlIEFIX1Y0X0ZMT1c6CisJY2FzZSBFU1BfVjRfRkxPVzoKKwkJZnNwLT5oX3UuYWhfaXA0X3NwZWMuc3BpID0KKwkJCSh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQlUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVDsKKwkJZnNwLT5tX3UuYWhfaXA0X3NwZWMuc3BpID0KKwkJCSh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9QT1JUX1NQSSkgPj4KKwkJCVRDQU1fVjRLRVkyX1BPUlRfU1BJX1NISUZUOworCisJCWZzcC0+aF91LmFoX2lwNF9zcGVjLnNwaSA9CisJCQljcHVfdG9fYmUzMihmc3AtPmhfdS5haF9pcDRfc3BlYy5zcGkpOworCQlmc3AtPm1fdS5haF9pcDRfc3BlYy5zcGkgPQorCQkJY3B1X3RvX2JlMzIoZnNwLT5tX3UuYWhfaXA0X3NwZWMuc3BpKTsKKwkJYnJlYWs7CisJY2FzZSBJUF9VU0VSX0ZMT1c6CisJCWZzcC0+aF91LnVzcl9pcDRfc3BlYy5sNF80X2J5dGVzID0KKwkJCSh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUE9SVF9TUEkpID4+CisJCQlUQ0FNX1Y0S0VZMl9QT1JUX1NQSV9TSElGVDsKKwkJZnNwLT5tX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMgPQorCQkJKHRwLT5rZXlfbWFza1syXSAmIFRDQU1fVjRLRVkyX1BPUlRfU1BJKSA+PgorCQkJVENBTV9WNEtFWTJfUE9SVF9TUElfU0hJRlQ7CisKKwkJZnNwLT5oX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMgPQorCQkJY3B1X3RvX2JlMzIoZnNwLT5oX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMpOworCQlmc3AtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyA9CisJCQljcHVfdG9fYmUzMihmc3AtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyk7CisKKwkJZnNwLT5oX3UudXNyX2lwNF9zcGVjLnByb3RvID0KKwkJCSh0cC0+a2V5WzJdICYgVENBTV9WNEtFWTJfUFJPVE8pID4+CisJCQlUQ0FNX1Y0S0VZMl9QUk9UT19TSElGVDsKKwkJZnNwLT5tX3UudXNyX2lwNF9zcGVjLnByb3RvID0KKwkJCSh0cC0+a2V5X21hc2tbMl0gJiBUQ0FNX1Y0S0VZMl9QUk9UTykgPj4KKwkJCVRDQU1fVjRLRVkyX1BST1RPX1NISUZUOworCisJCWZzcC0+aF91LnVzcl9pcDRfc3BlYy5pcF92ZXIgPSBFVEhfUlhfTkZDX0lQNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IG5pdV9nZXRfZXRodG9vbF90Y2FtX2VudHJ5KHN0cnVjdCBuaXUgKm5wLAorCQkJCSAgICAgIHN0cnVjdCBldGh0b29sX3J4bmZjICpuZmMpCit7CisJc3RydWN0IG5pdV9wYXJlbnQgKnBhcmVudCA9IG5wLT5wYXJlbnQ7CisJc3RydWN0IG5pdV90Y2FtX2VudHJ5ICp0cDsKKwlzdHJ1Y3QgZXRodG9vbF9yeF9mbG93X3NwZWMgKmZzcCA9ICZuZmMtPmZzOworCXUxNiBpZHg7CisJdTY0IGNsYXNzOworCWludCByZXQgPSAwOworCisJaWR4ID0gdGNhbV9nZXRfaW5kZXgobnAsICh1MTYpbmZjLT5mcy5sb2NhdGlvbik7CisKKwl0cCA9ICZwYXJlbnQtPnRjYW1baWR4XTsKKwlpZiAoIXRwLT52YWxpZCkgeworCQlwcl9pbmZvKFBGWCAibml1JWQ6ICVzIGVudHJ5IFslZF0gaW52YWxpZCBmb3IgaWR4WyVkXVxuIiwKKwkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgKHUxNiluZmMtPmZzLmxvY2F0aW9uLCBpZHgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBmaWxsIHRoZSBmbG93IHNwZWMgZW50cnkgKi8KKwljbGFzcyA9ICh0cC0+a2V5WzBdICYgVENBTV9WNEtFWTBfQ0xBU1NfQ09ERSkgPj4KKwkJVENBTV9WNEtFWTBfQ0xBU1NfQ09ERV9TSElGVDsKKwlyZXQgPSBuaXVfY2xhc3NfdG9fZXRoZmxvdyhjbGFzcywgJmZzcC0+Zmxvd190eXBlKTsKKworCWlmIChyZXQgPCAwKSB7CisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgbml1X2NsYXNzX3RvX2V0aGZsb3cgZmFpbGVkXG4iLAorCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGZzcC0+Zmxvd190eXBlID09IEFIX1Y0X0ZMT1cgfHwgZnNwLT5mbG93X3R5cGUgPT0gQUhfVjZfRkxPVykgeworCQl1MzIgcHJvdG8gPSAodHAtPmtleVsyXSAmIFRDQU1fVjRLRVkyX1BST1RPKSA+PgorCQkJVENBTV9WNEtFWTJfUFJPVE9fU0hJRlQ7CisJCWlmIChwcm90byA9PSBJUFBST1RPX0VTUCkgeworCQkJaWYgKGZzcC0+Zmxvd190eXBlID09IEFIX1Y0X0ZMT1cpCisJCQkJZnNwLT5mbG93X3R5cGUgPSBFU1BfVjRfRkxPVzsKKwkJCWVsc2UKKwkJCQlmc3AtPmZsb3dfdHlwZSA9IEVTUF9WNl9GTE9XOworCQl9CisJfQorCisJc3dpdGNoIChmc3AtPmZsb3dfdHlwZSkgeworCWNhc2UgVENQX1Y0X0ZMT1c6CisJY2FzZSBVRFBfVjRfRkxPVzoKKwljYXNlIFNDVFBfVjRfRkxPVzoKKwljYXNlIEFIX1Y0X0ZMT1c6CisJY2FzZSBFU1BfVjRfRkxPVzoKKwkJbml1X2dldF9pcDRmc19mcm9tX3RjYW1fa2V5KHRwLCBmc3ApOworCQlicmVhazsKKwljYXNlIFRDUF9WNl9GTE9XOgorCWNhc2UgVURQX1Y2X0ZMT1c6CisJY2FzZSBTQ1RQX1Y2X0ZMT1c6CisJY2FzZSBBSF9WNl9GTE9XOgorCWNhc2UgRVNQX1Y2X0ZMT1c6CisJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBJUF9VU0VSX0ZMT1c6CisJCW5pdV9nZXRfaXA0ZnNfZnJvbV90Y2FtX2tleSh0cCwgZnNwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKHRwLT5hc3NvY19kYXRhICYgVENBTV9BU1NPQ0RBVEFfRElTQykKKwkJZnNwLT5yaW5nX2Nvb2tpZSA9IFJYX0NMU19GTE9XX0RJU0M7CisJZWxzZQorCQlmc3AtPnJpbmdfY29va2llID0gKHRwLT5hc3NvY19kYXRhICYgVENBTV9BU1NPQ0RBVEFfT0ZGU0VUKSA+PgorCQkJVENBTV9BU1NPQ0RBVEFfT0ZGU0VUX1NISUZUOworCisJLyogcHV0IHRoZSB0Y2FtIHNpemUgaGVyZSAqLworCW5mYy0+ZGF0YSA9IHRjYW1fZ2V0X3NpemUobnApOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbml1X2dldF9ldGh0b29sX3RjYW1fYWxsKHN0cnVjdCBuaXUgKm5wLAorCQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqbmZjLAorCQkJCSAgICB1MzIgKnJ1bGVfbG9jcykKK3sKKwlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKKwlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOworCWludCBpLCBpZHgsIGNudDsKKwl1MTYgbl9lbnRyaWVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKworCS8qIHB1dCB0aGUgdGNhbSBzaXplIGhlcmUgKi8KKwluZmMtPmRhdGEgPSB0Y2FtX2dldF9zaXplKG5wKTsKKworCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCW5fZW50cmllcyA9IG5mYy0+cnVsZV9jbnQ7CisJZm9yIChjbnQgPSAwLCBpID0gMDsgaSA8IG5mYy0+ZGF0YTsgaSsrKSB7CisJCWlkeCA9IHRjYW1fZ2V0X2luZGV4KG5wLCBpKTsKKwkJdHAgPSAmcGFyZW50LT50Y2FtW2lkeF07CisJCWlmICghdHAtPnZhbGlkKQorCQkJY29udGludWU7CisJCXJ1bGVfbG9jc1tjbnRdID0gaTsKKwkJY250Kys7CisJfQorCW5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlpZiAobl9lbnRyaWVzICE9IGNudCkgeworCQkvKiBwcmludCB3YXJuaW5nLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuICovCisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2dldF9ldGh0b29sX3RjYW1fYWxsLCAiCisJCQkibl9lbnRyaWVzWyVkXSAhPSBjbnRbJWRdISEhXG5cbiIsCisJCQlucC0+cGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgbl9lbnRyaWVzLCBjbnQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5pdV9nZXRfbmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQsCisJCSAgICAgICB2b2lkICpydWxlX2xvY3MpCiB7CiAJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQtPmNtZCkgeworCWNhc2UgRVRIVE9PTF9HUlhGSDoKKwkJcmV0ID0gbml1X2dldF9oYXNoX29wdHMobnAsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HUlhSSU5HUzoKKwkJY21kLT5kYXRhID0gbnAtPm51bV9yeF9yaW5nczsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWENMU1JMQ05UOgorCQljbWQtPnJ1bGVfY250ID0gdGNhbV9nZXRfdmFsaWRfZW50cnlfY250KG5wKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhUT09MX0dSWENMU1JVTEU6CisJCXJldCA9IG5pdV9nZXRfZXRodG9vbF90Y2FtX2VudHJ5KG5wLCBjbWQpOworCQlicmVhazsKKwljYXNlIEVUSFRPT0xfR1JYQ0xTUkxBTEw6CisJCXJldCA9IG5pdV9nZXRfZXRodG9vbF90Y2FtX2FsbChucCwgY21kLCAodTMyICopcnVsZV9sb2NzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuaXVfc2V0X2hhc2hfb3B0cyhzdHJ1Y3Qgbml1ICpucCwgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKK3sKIAl1NjQgY2xhc3M7CiAJdTY0IGZsb3dfa2V5ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFuaXVfZXRoZmxvd190b19jbGFzcyhjbWQtPmZsb3dfdHlwZSwgJmNsYXNzKSkKKwlpZiAoIW5pdV9ldGhmbG93X3RvX2NsYXNzKG5mYy0+Zmxvd190eXBlLCAmY2xhc3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjbGFzcyA8IENMQVNTX0NPREVfVVNFUl9QUk9HMSB8fAogCSAgICBjbGFzcyA+IENMQVNTX0NPREVfU0NUUF9JUFY2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjbWQtPmRhdGEgJiBSWEhfRElTQ0FSRCkgeworCWlmIChuZmMtPmRhdGEgJiBSWEhfRElTQ0FSRCkgewogCQluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKIAkJZmxvd19rZXkgPSBucC0+cGFyZW50LT50Y2FtX2tleVtjbGFzcyAtCiAJCQkJCSAgICAgICBDTEFTU19DT0RFX1VTRVJfUFJPRzFdOwpAQCAtNjkyMyw3ICs3Mzc3LDcgQEAKIAkJfQogCX0KIAotCWlmICghbml1X2V0aGZsb3dfdG9fZmxvd2tleShjbWQtPmRhdGEsICZmbG93X2tleSkpCisJaWYgKCFuaXVfZXRoZmxvd190b19mbG93a2V5KG5mYy0+ZGF0YSwgJmZsb3dfa2V5KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKQEAgLTY5MzQsNiArNzM4OCwzMzEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbml1X2dldF90Y2Fta2V5X2Zyb21faXA0ZnMoc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjICpmc3AsCisJCQkJICAgICAgIHN0cnVjdCBuaXVfdGNhbV9lbnRyeSAqdHAsCisJCQkJICAgICAgIGludCBsMl9yZGNfdGFiLCB1NjQgY2xhc3MpCit7CisJdTggcGlkID0gMDsKKwl1MzIgc2lwLCBkaXAsIHNpcG0sIGRpcG0sIHNwaSwgc3BpbTsKKwl1MTYgc3BvcnQsIGRwb3J0LCBzcG0sIGRwbTsKKworCXNpcCA9IGJlMzJfdG9fY3B1KGZzcC0+aF91LnRjcF9pcDRfc3BlYy5pcDRzcmMpOworCXNpcG0gPSBiZTMyX3RvX2NwdShmc3AtPm1fdS50Y3BfaXA0X3NwZWMuaXA0c3JjKTsKKwlkaXAgPSBiZTMyX3RvX2NwdShmc3AtPmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KTsKKwlkaXBtID0gYmUzMl90b19jcHUoZnNwLT5tX3UudGNwX2lwNF9zcGVjLmlwNGRzdCk7CisKKwl0cC0+a2V5WzBdID0gY2xhc3MgPDwgVENBTV9WNEtFWTBfQ0xBU1NfQ09ERV9TSElGVDsKKwl0cC0+a2V5X21hc2tbMF0gPSBUQ0FNX1Y0S0VZMF9DTEFTU19DT0RFOworCXRwLT5rZXlbMV0gPSAodTY0KWwyX3JkY190YWIgPDwgVENBTV9WNEtFWTFfTDJSRENOVU1fU0hJRlQ7CisJdHAtPmtleV9tYXNrWzFdID0gVENBTV9WNEtFWTFfTDJSRENOVU07CisKKwl0cC0+a2V5WzNdID0gKHU2NClzaXAgPDwgVENBTV9WNEtFWTNfU0FERFJfU0hJRlQ7CisJdHAtPmtleVszXSB8PSBkaXA7CisKKwl0cC0+a2V5X21hc2tbM10gPSAodTY0KXNpcG0gPDwgVENBTV9WNEtFWTNfU0FERFJfU0hJRlQ7CisJdHAtPmtleV9tYXNrWzNdIHw9IGRpcG07CisKKwl0cC0+a2V5WzJdIHw9ICgodTY0KWZzcC0+aF91LnRjcF9pcDRfc3BlYy50b3MgPDwKKwkJICAgICAgIFRDQU1fVjRLRVkyX1RPU19TSElGVCk7CisJdHAtPmtleV9tYXNrWzJdIHw9ICgodTY0KWZzcC0+bV91LnRjcF9pcDRfc3BlYy50b3MgPDwKKwkJCSAgICBUQ0FNX1Y0S0VZMl9UT1NfU0hJRlQpOworCXN3aXRjaCAoZnNwLT5mbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCWNhc2UgVURQX1Y0X0ZMT1c6CisJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJCXNwb3J0ID0gYmUxNl90b19jcHUoZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBzcmMpOworCQlzcG0gPSBiZTE2X3RvX2NwdShmc3AtPm1fdS50Y3BfaXA0X3NwZWMucHNyYyk7CisJCWRwb3J0ID0gYmUxNl90b19jcHUoZnNwLT5oX3UudGNwX2lwNF9zcGVjLnBkc3QpOworCQlkcG0gPSBiZTE2X3RvX2NwdShmc3AtPm1fdS50Y3BfaXA0X3NwZWMucGRzdCk7CisKKwkJdHAtPmtleVsyXSB8PSAoKCh1NjQpc3BvcnQgPDwgMTYpIHwgZHBvcnQpOworCQl0cC0+a2V5X21hc2tbMl0gfD0gKCgodTY0KXNwbSA8PCAxNikgfCBkcG0pOworCQluaXVfZXRoZmxvd190b19sM3Byb3RvKGZzcC0+Zmxvd190eXBlLCAmcGlkKTsKKwkJYnJlYWs7CisJY2FzZSBBSF9WNF9GTE9XOgorCWNhc2UgRVNQX1Y0X0ZMT1c6CisJCXNwaSA9IGJlMzJfdG9fY3B1KGZzcC0+aF91LmFoX2lwNF9zcGVjLnNwaSk7CisJCXNwaW0gPSBiZTMyX3RvX2NwdShmc3AtPm1fdS5haF9pcDRfc3BlYy5zcGkpOworCisJCXRwLT5rZXlbMl0gfD0gc3BpOworCQl0cC0+a2V5X21hc2tbMl0gfD0gc3BpbTsKKwkJbml1X2V0aGZsb3dfdG9fbDNwcm90byhmc3AtPmZsb3dfdHlwZSwgJnBpZCk7CisJCWJyZWFrOworCWNhc2UgSVBfVVNFUl9GTE9XOgorCQlzcGkgPSBiZTMyX3RvX2NwdShmc3AtPmhfdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyk7CisJCXNwaW0gPSBiZTMyX3RvX2NwdShmc3AtPm1fdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcyk7CisKKwkJdHAtPmtleVsyXSB8PSBzcGk7CisJCXRwLT5rZXlfbWFza1syXSB8PSBzcGltOworCQlwaWQgPSBmc3AtPmhfdS51c3JfaXA0X3NwZWMucHJvdG87CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXRwLT5rZXlbMl0gfD0gKCh1NjQpcGlkIDw8IFRDQU1fVjRLRVkyX1BST1RPX1NISUZUKTsKKwlpZiAocGlkKSB7CisJCXRwLT5rZXlfbWFza1syXSB8PSBUQ0FNX1Y0S0VZMl9QUk9UTzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnkoc3RydWN0IG5pdSAqbnAsCisJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfcnhuZmMgKm5mYykKK3sKKwlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKKwlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOworCXN0cnVjdCBldGh0b29sX3J4X2Zsb3dfc3BlYyAqZnNwID0gJm5mYy0+ZnM7CisJc3RydWN0IG5pdV9yZGNfdGFibGVzICpyZGNfdGFibGUgPSAmcGFyZW50LT5yZGNfZ3JvdXBfY2ZnW25wLT5wb3J0XTsKKwlpbnQgbDJfcmRjX3RhYmxlID0gcmRjX3RhYmxlLT5maXJzdF90YWJsZV9udW07CisJdTE2IGlkeDsKKwl1NjQgY2xhc3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyLCByZXQ7CisKKwlyZXQgPSAwOworCisJaWR4ID0gbmZjLT5mcy5sb2NhdGlvbjsKKwlpZiAoaWR4ID49IHRjYW1fZ2V0X3NpemUobnApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmc3AtPmZsb3dfdHlwZSA9PSBJUF9VU0VSX0ZMT1cpIHsKKwkJaW50IGk7CisJCWludCBhZGRfdXNyX2NscyA9IDA7CisJCWludCBpcHY2ID0gMDsKKwkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMgKnVzcGVjID0gJmZzcC0+aF91LnVzcl9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMgKnVtYXNrID0gJmZzcC0+bV91LnVzcl9pcDRfc3BlYzsKKworCQluaXVfbG9ja19wYXJlbnQobnAsIGZsYWdzKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgTklVX0wzX1BST0dfQ0xTOyBpKyspIHsKKwkJCWlmIChwYXJlbnQtPmwzX2Nsc1tpXSkgeworCQkJCWlmICh1c3BlYy0+cHJvdG8gPT0gcGFyZW50LT5sM19jbHNfcGlkW2ldKSB7CisJCQkJCWNsYXNzID0gcGFyZW50LT5sM19jbHNbaV07CisJCQkJCXBhcmVudC0+bDNfY2xzX3JlZmNudFtpXSsrOworCQkJCQlhZGRfdXNyX2NscyA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogUHJvZ3JhbSBuZXcgdXNlciBJUCBjbGFzcyAqLworCQkJCXN3aXRjaCAoaSkgeworCQkJCWNhc2UgMDoKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMToKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMjoKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzM7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzoKKwkJCQkJY2xhc3MgPSBDTEFTU19DT0RFX1VTRVJfUFJPRzQ7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAodXNwZWMtPmlwX3ZlciA9PSBFVEhfUlhfTkZDX0lQNikKKwkJCQkJaXB2NiA9IDE7CisJCQkJcmV0ID0gdGNhbV91c2VyX2lwX2NsYXNzX3NldChucCwgY2xhc3MsIGlwdjYsCisJCQkJCQkJICAgICB1c3BlYy0+cHJvdG8sCisJCQkJCQkJICAgICB1c3BlYy0+dG9zLAorCQkJCQkJCSAgICAgdW1hc2stPnRvcyk7CisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBvdXQ7CisKKwkJCQlyZXQgPSB0Y2FtX3VzZXJfaXBfY2xhc3NfZW5hYmxlKG5wLCBjbGFzcywgMSk7CisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBvdXQ7CisJCQkJcGFyZW50LT5sM19jbHNbaV0gPSBjbGFzczsKKwkJCQlwYXJlbnQtPmwzX2Nsc19waWRbaV0gPSB1c3BlYy0+cHJvdG87CisJCQkJcGFyZW50LT5sM19jbHNfcmVmY250W2ldKys7CisJCQkJYWRkX3Vzcl9jbHMgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghYWRkX3Vzcl9jbHMpIHsKKwkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCQkiQ291bGQgbm90IGZpbmQvaW5zZXJ0IGNsYXNzIGZvciBwaWQgJWRcbiIsCisJCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgdXNwZWMtPnByb3RvKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQluaXVfdW5sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCX0gZWxzZSB7CisJCWlmICghbml1X2V0aGZsb3dfdG9fY2xhc3MoZnNwLT5mbG93X3R5cGUsICZjbGFzcykpIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJbml1X2xvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlpZHggPSB0Y2FtX2dldF9pbmRleChucCwgaWR4KTsKKwl0cCA9ICZwYXJlbnQtPnRjYW1baWR4XTsKKworCW1lbXNldCh0cCwgMCwgc2l6ZW9mKCp0cCkpOworCisJLyogZmlsbCBpbiB0aGUgdGNhbSBrZXkgYW5kIG1hc2sgKi8KKwlzd2l0Y2ggKGZzcC0+Zmxvd190eXBlKSB7CisJY2FzZSBUQ1BfVjRfRkxPVzoKKwljYXNlIFVEUF9WNF9GTE9XOgorCWNhc2UgU0NUUF9WNF9GTE9XOgorCWNhc2UgQUhfVjRfRkxPVzoKKwljYXNlIEVTUF9WNF9GTE9XOgorCQluaXVfZ2V0X3RjYW1rZXlfZnJvbV9pcDRmcyhmc3AsIHRwLCBsMl9yZGNfdGFibGUsIGNsYXNzKTsKKwkJYnJlYWs7CisJY2FzZSBUQ1BfVjZfRkxPVzoKKwljYXNlIFVEUF9WNl9GTE9XOgorCWNhc2UgU0NUUF9WNl9GTE9XOgorCWNhc2UgQUhfVjZfRkxPVzoKKwljYXNlIEVTUF9WNl9GTE9XOgorCQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCSJmbG93ICVkIGZvciBJUHY2IG5vdCBpbXBsZW1lbnRlZFxuXG4iLAorCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgZnNwLT5mbG93X3R5cGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwljYXNlIElQX1VTRVJfRkxPVzoKKwkJaWYgKGZzcC0+aF91LnVzcl9pcDRfc3BlYy5pcF92ZXIgPT0gRVRIX1JYX05GQ19JUDQpIHsKKwkJCW5pdV9nZXRfdGNhbWtleV9mcm9tX2lwNGZzKGZzcCwgdHAsIGwyX3JkY190YWJsZSwKKwkJCQkJCSAgIGNsYXNzKTsKKwkJfSBlbHNlIHsKKwkJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCSJ1c3IgZmxvdyBmb3IgSVB2NiBub3QgaW1wbGVtZW50ZWRcblxuIiwKKwkJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKKwkJCSJVbmtub3duIGZsb3cgdHlwZSAlZFxuXG4iLAorCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwgZnNwLT5mbG93X3R5cGUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBmaWxsIGluIHRoZSBhc3NvYyBkYXRhICovCisJaWYgKGZzcC0+cmluZ19jb29raWUgPT0gUlhfQ0xTX0ZMT1dfRElTQykgeworCQl0cC0+YXNzb2NfZGF0YSA9IFRDQU1fQVNTT0NEQVRBX0RJU0M7CisJfSBlbHNlIHsKKwkJaWYgKGZzcC0+cmluZ19jb29raWUgPj0gbnAtPm51bV9yeF9yaW5ncykgeworCQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfYWRkX2V0aHRvb2xfdGNhbV9lbnRyeTogIgorCQkJCSJJbnZhbGlkIFJYIHJpbmcgJWxsZFxuXG4iLAorCQkJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUsCisJCQkJKGxvbmcgbG9uZykgZnNwLT5yaW5nX2Nvb2tpZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJdHAtPmFzc29jX2RhdGEgPSAoVENBTV9BU1NPQ0RBVEFfVFJFU19VU0VfT0ZGU0VUIHwKKwkJCQkgIChmc3AtPnJpbmdfY29va2llIDw8CisJCQkJICAgVENBTV9BU1NPQ0RBVEFfT0ZGU0VUX1NISUZUKSk7CisJfQorCisJZXJyID0gdGNhbV93cml0ZShucCwgaWR4LCB0cC0+a2V5LCB0cC0+a2V5X21hc2spOworCWlmIChlcnIpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWVyciA9IHRjYW1fYXNzb2Nfd3JpdGUobnAsIGlkeCwgdHAtPmFzc29jX2RhdGEpOworCWlmIChlcnIpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogdmFsaWRhdGUgdGhlIGVudHJ5ICovCisJdHAtPnZhbGlkID0gMTsKKwlucC0+Y2xhcy50Y2FtX3ZhbGlkX2VudHJpZXMrKzsKK291dDoKKwluaXVfdW5sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBuaXVfZGVsX2V0aHRvb2xfdGNhbV9lbnRyeShzdHJ1Y3Qgbml1ICpucCwgdTMyIGxvYykKK3sKKwlzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50ID0gbnAtPnBhcmVudDsKKwlzdHJ1Y3Qgbml1X3RjYW1fZW50cnkgKnRwOworCXUxNiBpZHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1NjQgY2xhc3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAobG9jID49IHRjYW1fZ2V0X3NpemUobnApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpOworCisJaWR4ID0gdGNhbV9nZXRfaW5kZXgobnAsIGxvYyk7CisJdHAgPSAmcGFyZW50LT50Y2FtW2lkeF07CisKKwkvKiBpZiB0aGUgZW50cnkgaXMgb2YgYSB1c2VyIGRlZmluZWQgY2xhc3MsIHRoZW4gdXBkYXRlKi8KKwljbGFzcyA9ICh0cC0+a2V5WzBdICYgVENBTV9WNEtFWTBfQ0xBU1NfQ09ERSkgPj4KKwkJVENBTV9WNEtFWTBfQ0xBU1NfQ09ERV9TSElGVDsKKworCWlmIChjbGFzcyA+PSBDTEFTU19DT0RFX1VTRVJfUFJPRzEgJiYgY2xhc3MgPD0gQ0xBU1NfQ09ERV9VU0VSX1BST0c0KSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgTklVX0wzX1BST0dfQ0xTOyBpKyspIHsKKwkJCWlmIChwYXJlbnQtPmwzX2Nsc1tpXSA9PSBjbGFzcykgeworCQkJCXBhcmVudC0+bDNfY2xzX3JlZmNudFtpXS0tOworCQkJCWlmICghcGFyZW50LT5sM19jbHNfcmVmY250W2ldKSB7CisJCQkJCS8qIGRpc2FibGUgY2xhc3MgKi8KKwkJCQkJcmV0ID0gdGNhbV91c2VyX2lwX2NsYXNzX2VuYWJsZShucCwKKwkJCQkJCQkJCWNsYXNzLAorCQkJCQkJCQkJMCk7CisJCQkJCWlmIChyZXQpCisJCQkJCQlnb3RvIG91dDsKKwkJCQkJcGFyZW50LT5sM19jbHNbaV0gPSAwOworCQkJCQlwYXJlbnQtPmwzX2Nsc19waWRbaV0gPSAwOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaSA9PSBOSVVfTDNfUFJPR19DTFMpIHsKKwkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2RlbF9ldGh0b29sX3RjYW1fZW50cnksIgorCQkJCSJVc3IgY2xhc3MgMHglbGx4IG5vdCBmb3VuZCBcbiIsCisJCQkJcGFyZW50LT5pbmRleCwgbnAtPmRldi0+bmFtZSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSBjbGFzcyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlyZXQgPSB0Y2FtX2ZsdXNoKG5wLCBpZHgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogaW52YWxpZGF0ZSB0aGUgZW50cnkgKi8KKwl0cC0+dmFsaWQgPSAwOworCW5wLT5jbGFzLnRjYW1fdmFsaWRfZW50cmllcy0tOworb3V0OgorCW5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5pdV9zZXRfbmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3J4bmZjICpjbWQpCit7CisJc3RydWN0IG5pdSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjbWQtPmNtZCkgeworCWNhc2UgRVRIVE9PTF9TUlhGSDoKKwkJcmV0ID0gbml1X3NldF9oYXNoX29wdHMobnAsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9TUlhDTFNSTElOUzoKKwkJcmV0ID0gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnkobnAsIGNtZCk7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9TUlhDTFNSTERFTDoKKwkJcmV0ID0gbml1X2RlbF9ldGh0b29sX3RjYW1fZW50cnkobnAsIGNtZC0+ZnMubG9jYXRpb24pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHsKIAljb25zdCBjaGFyIHN0cmluZ1tFVEhfR1NUUklOR19MRU5dOwogfSBuaXVfeG1hY19zdGF0X2tleXNbXSA9IHsKQEAgLTcxNTgsNiArNzkzNyw3IEBACiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9tc2dsZXZlbAkJPSBuaXVfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gbml1X3NldF9tc2dsZXZlbCwKKwkubndheV9yZXNldAkJPSBuaXVfbndheV9yZXNldCwKIAkuZ2V0X2VlcHJvbV9sZW4JCT0gbml1X2dldF9lZXByb21fbGVuLAogCS5nZXRfZWVwcm9tCQk9IG5pdV9nZXRfZWVwcm9tLAogCS5nZXRfc2V0dGluZ3MJCT0gbml1X2dldF9zZXR0aW5ncywKQEAgLTcxNjYsOCArNzk0Niw4IEBACiAJLmdldF9zdGF0c19jb3VudAk9IG5pdV9nZXRfc3RhdHNfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gbml1X2dldF9ldGh0b29sX3N0YXRzLAogCS5waHlzX2lkCQk9IG5pdV9waHlzX2lkLAotCS5nZXRfcnhoYXNoCQk9IG5pdV9nZXRfaGFzaF9vcHRzLAotCS5zZXRfcnhoYXNoCQk9IG5pdV9zZXRfaGFzaF9vcHRzLAorCS5nZXRfcnhuZmMJCT0gbml1X2dldF9uZmMsCisJLnNldF9yeG5mYwkJPSBuaXVfc2V0X25mYywKIH07CiAKIHN0YXRpYyBpbnQgbml1X2xkZ19hc3NpZ25fbGRuKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3Qgbml1X3BhcmVudCAqcGFyZW50LApAQCAtODIzNyw3ICs5MDE3LDggQEAKIAluaXVkYmcoUFJPQkUsICJuaXVfY2xhc3NpZmllcl9zd3N0YXRlX2luaXQ6IG51bV90Y2FtKCVkKVxuIiwKIAkgICAgICAgbnAtPnBhcmVudC0+dGNhbV9udW1fZW50cmllcyk7CiAKLQljcC0+dGNhbV9pbmRleCA9ICh1MTYpIG5wLT5wb3J0OworCWNwLT50Y2FtX3RvcCA9ICh1MTYpIG5wLT5wb3J0OworCWNwLT50Y2FtX3N6ID0gbnAtPnBhcmVudC0+dGNhbV9udW1fZW50cmllcyAvIG5wLT5wYXJlbnQtPm51bV9wb3J0czsKIAljcC0+aDFfaW5pdCA9IDB4ZmZmZmZmZmY7CiAJY3AtPmgyX2luaXQgPSAweGZmZmY7CiAKQEAgLTgyNTcsNyArOTAzOCw5IEBACiAJCQkgICBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8CiAJCQkgICBBRFZFUlRJU0VEX0F1dG9uZWcpOwogCWxwLT5zcGVlZCA9IGxwLT5hY3RpdmVfc3BlZWQgPSBTUEVFRF9JTlZBTElEOwotCWxwLT5kdXBsZXggPSBscC0+YWN0aXZlX2R1cGxleCA9IERVUExFWF9JTlZBTElEOworCWxwLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKKwlscC0+YWN0aXZlX2R1cGxleCA9IERVUExFWF9JTlZBTElEOworCWxwLT5hdXRvbmVnID0gMTsKICNpZiAwCiAJbHAtPmxvb3BiYWNrX21vZGUgPSBMT09QQkFDS19NQUM7CiAJbHAtPmFjdGl2ZV9zcGVlZCA9IFNQRUVEXzEwMDAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmggYi9kcml2ZXJzL25ldC9uaXUuaAppbmRleCBlMWE3MzkyLi44NzU0ZTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuaAorKysgYi9kcml2ZXJzL25ldC9uaXUuaApAQCAtMzAwNCw3ICszMDA0LDkgQEAKIAlzdHJ1Y3Qgbml1X2FsdG1hY19yZGMJYWx0X21hY19tYXBwaW5nc1sxNl07CiAJc3RydWN0IG5pdV92bGFuX3JkYwl2bGFuX21hcHBpbmdzW0VORVRfVkxBTl9UQkxfTlVNX0VOVFJJRVNdOwogCi0JdTE2CQkJdGNhbV9pbmRleDsKKwl1MTYJCQl0Y2FtX3RvcDsKKwl1MTYJCQl0Y2FtX3N6OworCXUxNgkJCXRjYW1fdmFsaWRfZW50cmllczsKIAl1MTYJCQludW1fYWx0X21hY19tYXBwaW5nczsKIAogCXUzMgkJCWgxX2luaXQ7CkBAIC0zMDQwLDYgKzMwNDIsNyBAQAogfTsKIAogc3RydWN0IG5pdV90Y2FtX2VudHJ5IHsKKwl1OAkJCXZhbGlkOwogCXU2NAkJCWtleVs0XTsKIAl1NjQJCQlrZXlfbWFza1s0XTsKIAl1NjQJCQlhc3NvY19kYXRhOwpAQCAtMzEwNywxMCArMzExMCwxNSBAQAogCXN0cnVjdCBwaHlfcHJvYmVfaW5mbwlwaHlfcHJvYmVfaW5mbzsKIAogCXN0cnVjdCBuaXVfdGNhbV9lbnRyeQl0Y2FtW05JVV9UQ0FNX0VOVFJJRVNfTUFYXTsKLQl1NjQJCQlsMl9jbHNbMl07Ci0JdTY0CQkJbDNfY2xzWzRdOworCisjZGVmaW5lCU5JVV9MMl9QUk9HX0NMUwkJMgorI2RlZmluZQlOSVVfTDNfUFJPR19DTFMJCTQKKwl1NjQJCQlsMl9jbHNbTklVX0wyX1BST0dfQ0xTXTsKKwl1NjQJCQlsM19jbHNbTklVX0wzX1BST0dfQ0xTXTsKIAl1NjQJCQl0Y2FtX2tleVsxMl07CiAJdTY0CQkJZmxvd19rZXlbMTJdOworCXUxNgkJCWwzX2Nsc19yZWZjbnRbTklVX0wzX1BST0dfQ0xTXTsKKwl1OAkJCWwzX2Nsc19waWRbTklVX0wzX1BST0dfQ0xTXTsKIH07CiAKIHN0cnVjdCBuaXVfb3BzIHsKQEAgLTMxMzEsMTYgKzMxMzksMTkgQEAKIH07CiAKIHN0cnVjdCBuaXVfbGlua19jb25maWcgeworCXUzMgkJCQlzdXBwb3J0ZWQ7CisKIAkvKiBEZXNjcmliZXMgd2hhdCB3ZSdyZSB0cnlpbmcgdG8gZ2V0LiAqLwogCXUzMgkJCQlhZHZlcnRpc2luZzsKLQl1MzIJCQkJc3VwcG9ydGVkOwogCXUxNgkJCQlzcGVlZDsKIAl1OAkJCQlkdXBsZXg7CiAJdTgJCQkJYXV0b25lZzsKIAogCS8qIERlc2NyaWJlcyB3aGF0IHdlIGFjdHVhbGx5IGhhdmUuICovCisJdTMyCQkJCWFjdGl2ZV9hZHZlcnRpc2luZzsKIAl1MTYJCQkJYWN0aXZlX3NwZWVkOwogCXU4CQkJCWFjdGl2ZV9kdXBsZXg7CisJdTgJCQkJYWN0aXZlX2F1dG9uZWc7CiAjZGVmaW5lIFNQRUVEX0lOVkFMSUQJCTB4ZmZmZgogI2RlZmluZSBEVVBMRVhfSU5WQUxJRAkJMHhmZgogI2RlZmluZSBBVVRPTkVHX0lOVkFMSUQJCTB4ZmYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwppbmRleCBlODAyOTRkLi4yMjFiMGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uczgzODIwLmMKKysrIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCkBAIC00MDksNyArNDA5LDcgQEAKIHN0cnVjdCByeF9pbmZvIHsKIAlzcGlubG9ja190CWxvY2s7CiAJaW50CQl1cDsKLQlsb25nCQlpZGxlOworCXVuc2lnbmVkIGxvbmcJaWRsZTsKIAogCXN0cnVjdCBza19idWZmCSpza2JzW05SX1JYX0RFU0NdOwogCkBAIC04MjIsOCArODIyLDcgQEAKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGRldi0+cnhfaW5mby5za2JzW2ldOwogCQlkZXYtPnJ4X2luZm8uc2tic1tpXSA9IE5VTEw7CiAJCWNsZWFyX3J4X2Rlc2MoZGV2LCBpKTsKLQkJaWYgKHNrYikKLQkJCWtmcmVlX3NrYihza2IpOworCQlrZnJlZV9za2Ioc2tiKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYyBiL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYwppbmRleCBkMDM0OWU3Li41ZWViNWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCkBAIC05NzAsNyArOTcwLDcgQEAKIAlpZiAoKmNoYW4tPnN0YXR1cyAmIFBBU19TVEFUVVNfRVJST1IpCiAJCXJlZyB8PSBQQVNfSU9CX0RNQV9SWENIX1JFU0VUX0RJTlRDOwogCi0JbmV0aWZfcnhfc2NoZWR1bGUoJm1hYy0+bmFwaSk7CisJbmFwaV9zY2hlZHVsZSgmbWFjLT5uYXBpKTsKIAogCXdyaXRlX2lvYl9yZWcoUEFTX0lPQl9ETUFfUlhDSF9SRVNFVChjaGFuLT5jaG5vKSwgcmVnKTsKIApAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIAogCW1vZF90aW1lcigmdHhyaW5nLT5jbGVhbl90aW1lciwgamlmZmllcyArIChUWF9DTEVBTl9JTlRFUlZBTCkqMik7CiAKLQluZXRpZl9yeF9zY2hlZHVsZSgmbWFjLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZtYWMtPm5hcGkpOwogCiAJaWYgKHJlZykKIAkJd3JpdGVfaW9iX3JlZyhQQVNfSU9CX0RNQV9UWENIX1JFU0VUKGNoYW4tPmNobm8pLCByZWcpOwpAQCAtMTYzOSw3ICsxNjM5LDcgQEAKIAlwa3RzID0gcGFzZW1pX21hY19jbGVhbl9yeChyeF9yaW5nKG1hYyksIGJ1ZGdldCk7CiAJaWYgKHBrdHMgPCBidWRnZXQpIHsKIAkJLyogYWxsIGRvbmUsIG5vIG1vcmUgcGFja2V0cyBwcmVzZW50ICovCi0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCXBhc2VtaV9tYWNfcmVzdGFydF9yeF9pbnRyKG1hYyk7CiAJCXBhc2VtaV9tYWNfcmVzdGFydF90eF9pbnRyKG1hYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCmluZGV4IDI0MDRhODMuLjhmMzg3MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC0yNTcsNiArMjU3LDE4IEBACiAJbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCiAJd2l0aCBDYXJkIFNlcnZpY2VzLgogKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZWwzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBlbDNfb3BlbiwKKwkubmRvX3N0b3AgCQk9IGVsM19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gZWwzX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IGVsM190eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGVsM19nZXRfc3RhdHMsCisJLm5kb19kb19pb2N0bAkJPSBlbDNfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfcnhfbW9kZSwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogc3RhdGljIGludCB0YzU3NF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKQEAgLTI4NCwxOCArMjk2LDkgQEAKIAlsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAlsaW5rLT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKIAotCS8qIFRoZSBFTDMtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZlbDNfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9ICZlbDNfZ2V0X3N0YXRzOwotCWRldi0+ZG9faW9jdGwgPSAmZWwzX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZlbDNfbmV0ZGV2X29wczsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLQlkZXYtPm9wZW4gPSAmZWwzX29wZW47Ci0JZGV2LT5zdG9wID0gJmVsM19jbG9zZTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLQlkZXYtPnR4X3RpbWVvdXQgPSBlbDNfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgogCiAJcmV0dXJuIHRjNTc0X2NvbmZpZyhsaW5rKTsKIH0gLyogdGM1NzRfYXR0YWNoICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IDFlMDFiOGE2Li5jZGY2NjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwpAQCAtMTY5LDYgKzE2OSwxOSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlbDNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IGVsM19vcGVuLAorCS5uZG9fc3RvcCAJCT0gZWwzX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBlbDNfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQgCT0gZWwzX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfY29uZmlnCQk9IGVsM19jb25maWcsCisJLm5kb19nZXRfc3RhdHMJCT0gZWwzX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCB0YzU4OV9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwOwpAQCAtMTk1LDE3ICsyMDgsOSBAQAogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogICAgIGxpbmstPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCi0gICAgLyogVGhlIEVMMy1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqLwotICAgIGRldi0+aGFyZF9zdGFydF94bWl0ID0gJmVsM19zdGFydF94bWl0OwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZlbDNfY29uZmlnOwotICAgIGRldi0+Z2V0X3N0YXRzID0gJmVsM19nZXRfc3RhdHM7Ci0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwotICAgIGRldi0+b3BlbiA9ICZlbDNfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmZWwzX2Nsb3NlOwotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAotICAgIGRldi0+dHhfdGltZW91dCA9IGVsM190eF90aW1lb3V0OworICAgIGRldi0+bmV0ZGV2X29wcyA9ICZlbDNfbmV0ZGV2X29wczsKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgorCiAgICAgU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CiAKICAgICByZXR1cm4gdGM1ODlfY29uZmlnKGxpbmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCAwYWZhNzIwLi41MDFhOGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlICIuLi84MzkwLmgiCiAKQEAgLTkxLDYgKzkyLDEwIEBACiBzdGF0aWMgaW50IGF4bmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4bmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBheG5ldF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKK3N0YXRpYyBpbnQgYXhuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgYXhuZXRfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwogc3RhdGljIGlycXJldHVybl90IGVpX2lycV93cmFwcGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCBlaV93YXRjaGRvZyh1X2xvbmcgYXJnKTsKQEAgLTEwOCw3ICsxMTMsNiBAQAogCiBzdGF0aWMgdm9pZCBheG5ldF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKIAotc3RhdGljIHZvaWQgYXhkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBBWDg4MTkwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0YXJ0cCk7CiBzdGF0aWMgaW50IGF4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTM0LDYgKzEzOCwxOSBAQAogCXJldHVybiBwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4bmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBheG5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSBheG5ldF9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGF4bmV0X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBheG5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBheG5ldF90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IGdldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHNldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBheG5ldF9hdHRhY2goKSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZwpAQCAtMTQ2LDE1ICsxNjMsMTcgQEAKIHsKICAgICBheG5ldF9kZXZfdCAqaW5mbzsKICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworICAgIHN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsOwogCiAgICAgREVCVUcoMCwgImF4bmV0X2F0dGFjaCgpXG4iKTsKIAotICAgIGRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGVpX2RldmljZSkgKyBzaXplb2YoYXhuZXRfZGV2X3QpLAotCQkJImV0aCVkIiwgYXhkZXZfc2V0dXApOwotCisgICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBlaV9kZXZpY2UpICsgc2l6ZW9mKGF4bmV0X2Rldl90KSk7CiAgICAgaWYgKCFkZXYpCiAJcmV0dXJuIC1FTk9NRU07CiAKKyAgICBlaV9sb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisgICAgc3Bpbl9sb2NrX2luaXQoJmVpX2xvY2FsLT5wYWdlX2xvY2spOworCiAgICAgaW5mbyA9IFBSSVYoZGV2KTsKICAgICBpbmZvLT5wX2RldiA9IGxpbms7CiAgICAgbGluay0+cHJpdiA9IGRldjsKQEAgLTE2MywxMCArMTgyLDEwIEBACiAgICAgbGluay0+Y29uZi5BdHRyaWJ1dGVzID0gQ09ORl9FTkFCTEVfSVJROwogICAgIGxpbmstPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwogCi0gICAgZGV2LT5vcGVuID0gJmF4bmV0X29wZW47Ci0gICAgZGV2LT5zdG9wID0gJmF4bmV0X2Nsb3NlOwotICAgIGRldi0+ZG9faW9jdGwgPSAmYXhuZXRfaW9jdGw7CisgICAgZGV2LT5uZXRkZXZfb3BzID0gJmF4bmV0X25ldGRldl9vcHM7CisKICAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKKyAgICBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAogICAgIHJldHVybiBheG5ldF9jb25maWcobGluayk7CiB9IC8qIGF4bmV0X2F0dGFjaCAqLwpAQCAtODYxLDcgKzg4MCw3IEBACiAKICAgKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb25fODM5MCA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uXzgzOTBbXSA9IEtFUk5fSU5GTyBcCiAgICAgIjgzOTAuYzp2MS4xMGN2cyA5LzIzLzk0IERvbmFsZCBCZWNrZXIgKGJlY2tlckBzY3lsZC5jb20pXG4iOwogCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC05MDUsMTQgKzkyNCwxMiBAQAogLyogSW5kZXggdG8gZnVuY3Rpb25zLiAqLwogc3RhdGljIHZvaWQgZWlfdHhfaW50cihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGVpX3R4X2VycihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGF4bmV0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlaV9yZWNlaXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZWlfcnhfb3ZlcnJ1bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyogUm91dGluZXMgZ2VuZXJpYyB0byBOUzgzOTAtYmFzZWQgYm9hcmRzLiAqLwogc3RhdGljIHZvaWQgTlM4MzkwX3RyaWdnZXJfc2VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAogCQkJCQkJCQlpbnQgc3RhcnRfcGFnZSk7Ci1zdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBkb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIC8qCkBAIC05NTQsMTUgKzk3MSw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7CiAKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLQkvKiBUaGUgY2FyZCBJL08gcGFydCBvZiB0aGUgZHJpdmVyIChlLmcuIDNjNTAzKSBjYW4gaG9vayBhIFR4IHRpbWVvdXQKLQkgICAgd3JhcHBlciB0aGF0IGRvZXMgZS5nLiBtZWRpYSBjaGVjayAmIHRoZW4gY2FsbHMgYXhuZXRfdHhfdGltZW91dC4gKi8KLQlpZiAoZGV2LT50eF90aW1lb3V0ID09IE5VTEwpCi0JCSBkZXYtPnR4X3RpbWVvdXQgPSBheG5ldF90eF90aW1lb3V0OwotCWlmIChkZXYtPndhdGNoZG9nX3RpbWVvIDw9IDApCi0JCSBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSNlbmRpZgotCiAJLyoKIAkgKglHcmFiIHRoZSBwYWdlIGxvY2sgc28gd2Ugb3duIHRoZSByZWdpc3RlciBzZXQsIHRoZW4gY2FsbAogCSAqCXRoZSBpbml0IGZ1bmN0aW9uLgpAQCAtMTcwMSwzMCArMTcwOSw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X2xvY2soZGV2KSwgZmxhZ3MpOwogfQkKIAotLyoqCi0gKiBheGRldl9zZXR1cCAtIGluaXQgcmVzdCBvZiA4MzkwIGRldmljZSBzdHJ1Y3QKLSAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHN0cnVjdHVyZSB0byBpbml0Ci0gKgotICogSW5pdGlhbGl6ZSB0aGUgcmVzdCBvZiB0aGUgODM5MCBkZXZpY2Ugc3RydWN0dXJlLiAgRG8gTk9UIF9faW5pdAotICogdGhpcywgYXMgaXQgaXMgdXNlZCBieSA4MzkwIGJhc2VkIG1vZHVsYXIgZHJpdmVycyB0b28uCi0gKi8KLQotc3RhdGljIHZvaWQgYXhkZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbDsKLQlpZiAoZWlfZGVidWcgPiAxKQotCQlwcmludGsodmVyc2lvbl84MzkwKTsKLSAgICAKLQllaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopbmV0ZGV2X3ByaXYoZGV2KTsKLQlzcGluX2xvY2tfaW5pdCgmZWlfbG9jYWwtPnBhZ2VfbG9jayk7Ci0gICAgCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYXhuZXRfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwk9IGdldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7Ci0KLQlldGhlcl9zZXR1cChkZXYpOwotfQotCiAvKiBUaGlzIHBhZ2Ugb2YgZnVuY3Rpb25zIHNob3VsZCBiZSA4MzkwIGdlbmVyaWMgKi8KIC8qIEZvbGxvdyBOYXRpb25hbCBTZW1pJ3MgcmVjb21tZW5kYXRpb25zIGZvciBpbml0aWFsaXppbmcgdGhlICJOSUMiLiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwppbmRleCA2OWRjZmJiLi44MWU2NjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKQEAgLTEwMCw3ICsxMDAsNiBAQAogc3RhdGljIGlycXJldHVybl90IGZqbl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIGZqbl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGZqbl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZmpuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZmpuX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKQEAgLTExOCw3ICsxMTcsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZQkqcF9kZXY7CiAgICAgZGV2X25vZGVfdCBub2RlOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgIGxvbmcgb3Blbl90aW1lOwogICAgIHVpbnQgdHhfc3RhcnRlZDoxOwogICAgIHVpbnQgdHhfcXVldWU7CkBAIC0yMjksNiArMjI3LDE4IEBACiAjZGVmaW5lIEJBTktfMVUgICAgICAgICAgICAgIDB4MjQgLyogYmFuayAxIChDT05GSUdfMSkgKi8KICNkZWZpbmUgQkFOS18yVSAgICAgICAgICAgICAgMHgyOCAvKiBiYW5rIDIgKENPTkZJR18xKSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZqbl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gZmpuX29wZW4sCisJLm5kb19zdG9wCQk9IGZqbl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gZmpuX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IGZqbl90eF90aW1lb3V0LAorCS5uZG9fc2V0X2NvbmZpZyAJPSBmam5fY29uZmlnLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gc2V0X3J4X21vZGUsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgZm12ajE4eF9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBsb2NhbF9pbmZvX3QgKmxwOwpAQCAtMjYwLDE3ICsyNzAsOSBAQAogICAgIGxpbmstPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKICAgICBsaW5rLT5jb25mLkludFR5cGUgPSBJTlRfTUVNT1JZX0FORF9JTzsKIAotICAgIC8qIFRoZSBGTVZKMTh4IHNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0gICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZmpuX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5zZXRfY29uZmlnID0gJmZqbl9jb25maWc7Ci0gICAgZGV2LT5nZXRfc3RhdHMgPSAmZmpuX2dldF9zdGF0czsKLSAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfcnhfbW9kZTsKLSAgICBkZXYtPm9wZW4gPSAmZmpuX29wZW47Ci0gICAgZGV2LT5zdG9wID0gJmZqbl9jbG9zZTsKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKLSAgICBkZXYtPnR4X3RpbWVvdXQgPSBmam5fdHhfdGltZW91dDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmZmpuX25ldGRldl9vcHM7CiAgICAgZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7Ci0jZW5kaWYKKwogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCiAgICAgcmV0dXJuIGZtdmoxOHhfY29uZmlnKGxpbmspOwpAQCAtNzkzLDcgKzc5NSw3IEBACiAJZmpuX3J4KGRldik7CiAgICAgfQogICAgIGlmICh0eF9zdGF0ICYgRl9UTVRfUkRZKSB7Ci0JbHAtPnN0YXRzLnR4X3BhY2tldHMgKz0gbHAtPnNlbnQgOworCWRldi0+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+c3RhdHM7Ci19Ci0KIC8qKioqKioqKioqKioqKioqCiAgKiBTZXQgYWxsIGFkZHJlc3NlczogVGhpcyBmaXJzdCBvbmUgaXMgdGhlIGluZGl2aWR1YWwgYWRkcmVzcywKICAqIHRoZSBuZXh0IDkgYWRkcmVzc2VzIGFyZSB0YWtlbiBmcm9tIHRoZSBtdWx0aWNhc3QgbGlzdCBhbmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCA2NjVhNDI4Li44MDEyNGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0xMzk3LDcgKzEzOTcsNyBAQAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCS8qIGNsZWFyIGludGVycnVwdCBtYXNrcyAqLwogCQl2YWwgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjMpOwpAQCAtMjU5MiwxNCArMjU5MiwxNCBAQAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjApOwogCQkJLyogdW5saWtlIGZvciB0aGUgbGFuY2UsIHRoZXJlIGlzIG5vIHJlc3RhcnQgbmVlZGVkICovCiAJCX0KLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkgeworCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpIHsKIAkJCXUxNiB2YWw7CiAJCQkvKiBzZXQgaW50ZXJydXB0IG1hc2tzICovCiAJCQl2YWwgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjMpOwogCQkJdmFsIHw9IDB4NWYwMDsKIAkJCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIENTUjMsIHZhbCk7CiAJCQltbWlvd2IoKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmxwLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmbHAtPm5hcGkpOwogCQkJYnJlYWs7CiAJCX0KIAkJY3NyMCA9IGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpby1ncGlvLmMKaW5kZXggYWYyOGZmNy4uMzM5ODRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21kaW8tZ3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWdwaW8uYwpAQCAtMjAyLDE2ICsyMDIsMjEgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gTlVMTDsKIAlzdHJ1Y3QgbWRpb19ncGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCByZXQ7CiAKIAlwZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghcGRhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcGRhdGEtPm1kYyA9IG9mX2dldF9ncGlvKG9mZGV2LT5ub2RlLCAwKTsKLQlwZGF0YS0+bWRpbyA9IG9mX2dldF9ncGlvKG9mZGV2LT5ub2RlLCAxKTsKLQotCWlmIChwZGF0YS0+bWRjIDwgMCB8fCBwZGF0YS0+bWRpbyA8IDApCisJcmV0ID0gb2ZfZ2V0X2dwaW8ob2ZkZXYtPm5vZGUsIDApOworCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF9mcmVlOworCXBkYXRhLT5tZGMgPSByZXQ7CisKKwlyZXQgPSBvZl9nZXRfZ3BpbyhvZmRldi0+bm9kZSwgMSk7CisJaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgZ290byBvdXRfZnJlZTsKKwlwZGF0YS0+bWRpbyA9IHJldDsKIAogCXdoaWxlICgobnAgPSBvZl9nZXRfbmV4dF9jaGlsZChvZmRldi0+bm9kZSwgbnApKSkKIAkJaWYgKCFzdHJjbXAobnAtPnR5cGUsICJldGhlcm5ldC1waHkiKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMKaW5kZXggODExYTYzNzY5Li5iNzU0MDIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC05OCw3ICs5OSw3IEBACiAJYnVzLT5kZXYucGFyZW50ID0gYnVzLT5wYXJlbnQ7CiAJYnVzLT5kZXYuY2xhc3MgPSAmbWRpb19idXNfY2xhc3M7CiAJYnVzLT5kZXYuZ3JvdXBzID0gTlVMTDsKLQlkZXZfc2V0X25hbWUoJmJ1cy0+ZGV2LCBidXMtPmlkKTsKKwlkZXZfc2V0X25hbWUoJmJ1cy0+ZGV2LCAiJXMiLCBidXMtPmlkKTsKIAogCWVyciA9IGRldmljZV9yZWdpc3RlcigmYnVzLT5kZXYpOwogCWlmIChlcnIpIHsKQEAgLTI4NiwzMyArMjg3LDU4IEBACiAJCShwaHlkZXYtPnBoeV9pZCAmIHBoeWRydi0+cGh5X2lkX21hc2spKTsKIH0KIAorc3RhdGljIGJvb2wgbWRpb19idXNfcGh5X21heV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IHBoeWRldi0+ZGV2LmRyaXZlcjsKKwlzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2ID0gdG9fcGh5X2RyaXZlcihkcnYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwaHlkZXYtPmF0dGFjaGVkX2RldjsKKworCWlmICghZHJ2IHx8ICFwaHlkcnYtPnN1c3BlbmQpCisJCXJldHVybiBmYWxzZTsKKworCS8qIFBIWSBub3QgYXR0YWNoZWQ/IE1heSBzdXNwZW5kLiAqLworCWlmICghbmV0ZGV2KQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qCisJICogRG9uJ3Qgc3VzcGVuZCBQSFkgaWYgdGhlIGF0dGNoZWQgbmV0ZGV2IHBhcmVudCBtYXkgd2FrZXVwLgorCSAqIFRoZSBwYXJlbnQgbWF5IHBvaW50IHRvIGEgUENJIGRldmljZSwgYXMgaW4gdGczIGRyaXZlci4KKwkgKi8KKwlpZiAobmV0ZGV2LT5kZXYucGFyZW50ICYmIGRldmljZV9tYXlfd2FrZXVwKG5ldGRldi0+ZGV2LnBhcmVudCkpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogQWxzbyBkb24ndCBzdXNwZW5kIFBIWSBpZiB0aGUgbmV0ZGV2IGl0c2VsZiBtYXkgd2FrZXVwLiBUaGlzCisJICogaXMgdGhlIGNhc2UgZm9yIGRldmljZXMgdy9vIHVuZGVybGF5aW5nIHB3ci4gbWdtdC4gYXdhcmUgYnVzLAorCSAqIGUuZy4gU29DIGRldmljZXMuCisJICovCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZuZXRkZXYtPmRldikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCiAvKiBTdXNwZW5kIGFuZCByZXN1bWUuICBDb3BpZWQgZnJvbSBwbGF0Zm9ybV9zdXNwZW5kIGFuZAogICogcGxhdGZvcm1fcmVzdW1lCiAgKi8KIHN0YXRpYyBpbnQgbWRpb19idXNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICogZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwotCXN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYgPSB0b19waHlfZHJpdmVyKGRydik7CisJc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydiA9IHRvX3BoeV9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0b19waHlfZGV2aWNlKGRldik7CiAKLQlpZiAoZHJ2ICYmIHBoeWRydi0+c3VzcGVuZCAmJiAhZGV2aWNlX21heV93YWtldXAocGh5ZGV2LT5kZXYucGFyZW50KSkKLQkJcmV0ID0gcGh5ZHJ2LT5zdXNwZW5kKHBoeWRldik7Ci0KLQlyZXR1cm4gcmV0OworCWlmICghbWRpb19idXNfcGh5X21heV9zdXNwZW5kKHBoeWRldikpCisJCXJldHVybiAwOworCXJldHVybiBwaHlkcnYtPnN1c3BlbmQocGh5ZGV2KTsKIH0KIAogc3RhdGljIGludCBtZGlvX2J1c19yZXN1bWUoc3RydWN0IGRldmljZSAqIGRldikKIHsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7Ci0Jc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydiA9IHRvX3BoeV9kcml2ZXIoZHJ2KTsKKwlzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2ID0gdG9fcGh5X2RyaXZlcihkZXYtPmRyaXZlcik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKIAotCWlmIChkcnYgJiYgcGh5ZHJ2LT5yZXN1bWUgJiYgIWRldmljZV9tYXlfd2FrZXVwKHBoeWRldi0+ZGV2LnBhcmVudCkpCi0JCXJldCA9IHBoeWRydi0+cmVzdW1lKHBoeWRldik7Ci0KLQlyZXR1cm4gcmV0OworCWlmICghbWRpb19idXNfcGh5X21heV9zdXNwZW5kKHBoeWRldikpCisJCXJldHVybiAwOworCXJldHVybiBwaHlkcnYtPnJlc3VtZShwaHlkZXYpOwogfQogCiBzdHJ1Y3QgYnVzX3R5cGUgbWRpb19idXNfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwppbmRleCBlNGVkZTYwLi41OGI3M2IwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCkBAIC00MTQsNyArNDE0LDYgQEAKIAogc3RhdGljIHZvaWQgcGh5X2NoYW5nZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgcGh5X3N0YXRlX21hY2hpbmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLXN0YXRpYyB2b2lkIHBoeV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogCiAvKioKICAqIHBoeV9zdGFydF9tYWNoaW5lIC0gc3RhcnQgUEhZIHN0YXRlIG1hY2hpbmUgdHJhY2tpbmcKQEAgLTQzNCwxMSArNDMzLDggQEAKIHsKIAlwaHlkZXYtPmFkanVzdF9zdGF0ZSA9IGhhbmRsZXI7CiAKLQlJTklUX1dPUksoJnBoeWRldi0+c3RhdGVfcXVldWUsIHBoeV9zdGF0ZV9tYWNoaW5lKTsKLQlpbml0X3RpbWVyKCZwaHlkZXYtPnBoeV90aW1lcik7Ci0JcGh5ZGV2LT5waHlfdGltZXIuZnVuY3Rpb24gPSAmcGh5X3RpbWVyOwotCXBoeWRldi0+cGh5X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgcGh5ZGV2OwotCW1vZF90aW1lcigmcGh5ZGV2LT5waHlfdGltZXIsIGppZmZpZXMgKyBIWik7CisJSU5JVF9ERUxBWUVEX1dPUksoJnBoeWRldi0+c3RhdGVfcXVldWUsIHBoeV9zdGF0ZV9tYWNoaW5lKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBoeWRldi0+c3RhdGVfcXVldWUsIGppZmZpZXMgKyBIWik7CiB9CiAKIC8qKgpAQCAtNDUxLDggKzQ0Nyw3IEBACiAgKi8KIHZvaWQgcGh5X3N0b3BfbWFjaGluZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCWRlbF90aW1lcl9zeW5jKCZwaHlkZXYtPnBoeV90aW1lcik7Ci0JY2FuY2VsX3dvcmtfc3luYygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKIAogCW11dGV4X2xvY2soJnBoeWRldi0+bG9jayk7CiAJaWYgKHBoeWRldi0+c3RhdGUgPiBQSFlfVVApCkBAIC02ODAsMTEgKzY3NSw5IEBACiAJaWYgKGVycikKIAkJZ290byBpcnFfZW5hYmxlX2VycjsKIAotCS8qIFN0b3AgdGltZXIgYW5kIHJ1biB0aGUgc3RhdGUgcXVldWUgbm93LiAgVGhlIHdvcmsgZnVuY3Rpb24gZm9yCi0JICogc3RhdGVfcXVldWUgd2lsbCBzdGFydCB0aGUgdGltZXIgdXAgYWdhaW4uCi0JICovCi0JZGVsX3RpbWVyKCZwaHlkZXYtPnBoeV90aW1lcik7Ci0Jc2NoZWR1bGVfd29yaygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSk7CisJLyogcmVzY2hlZHVsZSBzdGF0ZSBxdWV1ZSB3b3JrIHRvIHJ1biBhcyBzb29uIGFzIHBvc3NpYmxlICovCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwaHlkZXYtPnN0YXRlX3F1ZXVlKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnBoeWRldi0+c3RhdGVfcXVldWUsIDApOwogCiAJcmV0dXJuOwogCkBAIC03NjEsMTQgKzc1NCwxMyBAQAogLyoqCiAgKiBwaHlfc3RhdGVfbWFjaGluZSAtIEhhbmRsZSB0aGUgc3RhdGUgbWFjaGluZQogICogQHdvcms6IHdvcmtfc3RydWN0IHRoYXQgZGVzY3JpYmVzIHRoZSB3b3JrIHRvIGJlIGRvbmUKLSAqCi0gKiBEZXNjcmlwdGlvbjogU2NoZWR1bGVkIGJ5IHRoZSBzdGF0ZV9xdWV1ZSB3b3JrcXVldWUgZWFjaCB0aW1lCi0gKiAgIHBoeV90aW1lciBpcyB0cmlnZ2VyZWQuCiAgKi8KIHN0YXRpYyB2b2lkIHBoeV9zdGF0ZV9tYWNoaW5lKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9Ci0JCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHBoeV9kZXZpY2UsIHN0YXRlX3F1ZXVlKTsKKwkJCWNvbnRhaW5lcl9vZihkd29yaywgc3RydWN0IHBoeV9kZXZpY2UsIHN0YXRlX3F1ZXVlKTsKIAlpbnQgbmVlZHNfYW5lZyA9IDA7CiAJaW50IGVyciA9IDA7CiAKQEAgLTk0NiwxNyArOTM4LDYgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcGh5X2Vycm9yKHBoeWRldik7CiAKLQltb2RfdGltZXIoJnBoeWRldi0+cGh5X3RpbWVyLCBqaWZmaWVzICsgUEhZX1NUQVRFX1RJTUUgKiBIWik7Ci19Ci0KLS8qIFBIWSB0aW1lciB3aGljaCBzY2hlZHVsZXMgdGhlIHN0YXRlIG1hY2hpbmUgd29yayAqLwotc3RhdGljIHZvaWQgcGh5X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gKHN0cnVjdCBwaHlfZGV2aWNlICopZGF0YTsKLQotCS8qCi0JICogUEhZIEkvTyBvcGVyYXRpb25zIGNhbiBwb3RlbnRpYWxseSBzbGVlcCBzbyB3ZSBlbnN1cmUgdGhhdAotCSAqIGl0J3MgZG9uZSBmcm9tIGEgcHJvY2VzcyBjb250ZXh0Ci0JICovCi0Jc2NoZWR1bGVfd29yaygmcGh5ZGV2LT5zdGF0ZV9xdWV1ZSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwaHlkZXYtPnN0YXRlX3F1ZXVlLAorCQkJCWppZmZpZXMgKyBQSFlfU1RBVEVfVElNRSAqIEhaKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMgYi9kcml2ZXJzL25ldC9waHkvc21zYy5jCmluZGV4IDEzODcxODcuLjUxMjNiYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYwpAQCAtMTU5LDYgKzE1OSwzMCBAQAogCS5kcml2ZXIJCT0geyAub3duZXIgPSBUSElTX01PRFVMRSwgfQogfTsKIAorc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGxhbjg3MTBfZHJpdmVyID0geworCS5waHlfaWQJCT0gMHgwMDA3YzBmMCwgLyogT1VJPTB4MDA4MDBmLCBNb2RlbCM9MHgwZiAqLworCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCisJLm5hbWUJCT0gIlNNU0MgTEFOODcxMC9MQU44NzIwIiwKKworCS5mZWF0dXJlcwk9IChQSFlfQkFTSUNfRkVBVFVSRVMgfCBTVVBQT1JURURfUGF1c2UKKwkJCQl8IFNVUFBPUlRFRF9Bc3ltX1BhdXNlKSwKKwkuZmxhZ3MJCT0gUEhZX0hBU19JTlRFUlJVUFQgfCBQSFlfSEFTX01BR0lDQU5FRywKKworCS8qIGJhc2ljIGZ1bmN0aW9ucyAqLworCS5jb25maWdfYW5lZwk9IGdlbnBoeV9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCisJLmNvbmZpZ19pbml0CT0gc21zY19waHlfY29uZmlnX2luaXQsCisKKwkvKiBJUlEgcmVsYXRlZCAqLworCS5hY2tfaW50ZXJydXB0CT0gc21zY19waHlfYWNrX2ludGVycnVwdCwKKwkuY29uZmlnX2ludHIJPSBzbXNjX3BoeV9jb25maWdfaW50ciwKKworCS5zdXNwZW5kCT0gZ2VucGh5X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAorCisJLmRyaXZlcgkJPSB7IC5vd25lciA9IFRISVNfTU9EVUxFLCB9Cit9OworCiBzdGF0aWMgaW50IF9faW5pdCBzbXNjX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMTc5LDggKzIwMywxNCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyNDsKIAorCXJldCA9IHBoeV9kcml2ZXJfcmVnaXN0ZXIgKCZsYW44NzEwX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBlcnI1OworCiAJcmV0dXJuIDA7CiAKK2VycjU6CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuOTExeF9pbnRfZHJpdmVyKTsKIGVycjQ6CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODcwMF9kcml2ZXIpOwogZXJyMzoKQEAgLTE5Myw2ICsyMjMsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc21zY19leGl0KHZvaWQpCiB7CisJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODcxMF9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlciAoJmxhbjkxMXhfaW50X2RyaXZlcik7CiAJcGh5X2RyaXZlcl91bnJlZ2lzdGVyICgmbGFuODcwMF9kcml2ZXIpOwogCXBoeV9kcml2ZXJfdW5yZWdpc3RlciAoJmxhbjgxODdfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKaW5kZXggNjU2N2ZhYi4uNmRlODM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKQEAgLTE1Nyw2ICsxNTcsNyBAQAogewogCXN0cnVjdCBhc3luY3BwcCAqYXA7CiAJaW50IGVycjsKKwlpbnQgc3BlZWQ7CiAKIAlpZiAodHR5LT5vcHMtPndyaXRlID09IE5VTEwpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTE4Nyw2ICsxODgsOCBAQAogCWFwLT5jaGFuLnByaXZhdGUgPSBhcDsKIAlhcC0+Y2hhbi5vcHMgPSAmYXN5bmNfb3BzOwogCWFwLT5jaGFuLm10dSA9IFBQUF9NUlU7CisJc3BlZWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOworCWFwLT5jaGFuLnNwZWVkID0gc3BlZWQ7CiAJZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJmFwLT5jaGFuKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwpAQCAtMjMzLDExICsyMzYsOSBAQAogCXRhc2tsZXRfa2lsbCgmYXAtPnRzayk7CiAKIAlwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKCZhcC0+Y2hhbik7Ci0JaWYgKGFwLT5ycGt0KQotCQlrZnJlZV9za2IoYXAtPnJwa3QpOworCWtmcmVlX3NrYihhcC0+cnBrdCk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZhcC0+cnF1ZXVlKTsKLQlpZiAoYXAtPnRwa3QpCi0JCWtmcmVlX3NrYihhcC0+dHBrdCk7CisJa2ZyZWVfc2tiKGFwLT50cGt0KTsKIAlrZnJlZShhcCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCmluZGV4IDdiMjcyOGIuLjhlZTkxNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwpAQCAtNDksNiArNDksMTAgQEAKICNpbmNsdWRlIDxuZXQvc2xoY192ai5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CisKICNkZWZpbmUgUFBQX1ZFUlNJT04JIjIuNC4yIgogCiAvKgpAQCAtMTMxLDYgKzEzNSw3IEBACiAJc3RydWN0IHNvY2tfZmlsdGVyICphY3RpdmVfZmlsdGVyOy8qIGZpbHRlciBmb3IgcGt0cyB0byByZXNldCBpZGxlICovCiAJdW5zaWduZWQgcGFzc19sZW4sIGFjdGl2ZV9sZW47CiAjZW5kaWYgLyogQ09ORklHX1BQUF9GSUxURVIgKi8KKwlzdHJ1Y3QgbmV0CSpwcHBfbmV0OwkvKiB0aGUgbmV0IHdlIGJlbG9uZyB0byAqLwogfTsKIAogLyoKQEAgLTE1NSwxMiArMTYwLDE0IEBACiAJc3RydWN0IHJ3X3NlbWFwaG9yZSBjaGFuX3NlbTsJLyogcHJvdGVjdHMgYGNoYW4nIGR1cmluZyBjaGFuIGlvY3RsICovCiAJc3BpbmxvY2tfdAlkb3dubDsJCS8qIHByb3RlY3RzIGBjaGFuJywgZmlsZS54cSBkZXF1ZXVlICovCiAJc3RydWN0IHBwcAkqcHBwOwkJLyogcHBwIHVuaXQgd2UncmUgY29ubmVjdGVkIHRvICovCisJc3RydWN0IG5ldAkqY2hhbl9uZXQ7CS8qIHRoZSBuZXQgY2hhbm5lbCBiZWxvbmdzIHRvICovCiAJc3RydWN0IGxpc3RfaGVhZCBjbGlzdDsJCS8qIGxpbmsgaW4gbGlzdCBvZiBjaGFubmVscyBwZXIgdW5pdCAqLwogCXJ3bG9ja190CXVwbDsJCS8qIHByb3RlY3RzIGBwcHAnICovCiAjaWZkZWYgQ09ORklHX1BQUF9NVUxUSUxJTksKIAl1OAkJYXZhaWw7CQkvKiBmbGFnIHVzZWQgaW4gbXVsdGlsaW5rIHN0dWZmICovCiAJdTgJCWhhZF9mcmFnOwkvKiA+PSAxIGZyYWdtZW50cyBoYXZlIGJlZW4gc2VudCAqLwogCXUzMgkJbGFzdHNlcTsJLyogTVA6IGxhc3Qgc2VxdWVuY2UgIyByZWNlaXZlZCAqLworCWludCAgICAgc3BlZWQ7CQkvKiBzcGVlZCBvZiB0aGUgY29ycmVzcG9uZGluZyBwcHAgY2hhbm5lbCovCiAjZW5kaWYgLyogQ09ORklHX1BQUF9NVUxUSUxJTksgKi8KIH07CiAKQEAgLTE3MywyNiArMTgwLDM1IEBACiAgKiBjaGFubmVsLmRvd25sLgogICovCiAKLS8qCi0gKiBhbGxfcHBwX211dGV4IHByb3RlY3RzIHRoZSBhbGxfcHBwX3VuaXRzIG1hcHBpbmcuCi0gKiBJdCBhbHNvIGVuc3VyZXMgdGhhdCBmaW5kaW5nIGEgcHBwIHVuaXQgaW4gdGhlIGFsbF9wcHBfdW5pdHMgbWFwCi0gKiBhbmQgdXBkYXRpbmcgaXRzIGZpbGUucmVmY250IGZpZWxkIGlzIGF0b21pYy4KLSAqLwotc3RhdGljIERFRklORV9NVVRFWChhbGxfcHBwX211dGV4KTsKIHN0YXRpYyBhdG9taWNfdCBwcHBfdW5pdF9jb3VudCA9IEFUT01JQ19JTklUKDApOwotc3RhdGljIERFRklORV9JRFIocHBwX3VuaXRzX2lkcik7Ci0KLS8qCi0gKiBhbGxfY2hhbm5lbHNfbG9jayBwcm90ZWN0cyBhbGxfY2hhbm5lbHMgYW5kIGxhc3RfY2hhbm5lbF9pbmRleCwKLSAqIGFuZCB0aGUgYXRvbWljaXR5IG9mIGZpbmQgYSBjaGFubmVsIGFuZCB1cGRhdGluZyBpdHMgZmlsZS5yZWZjbnQKLSAqIGZpZWxkLgotICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFsbF9jaGFubmVsc19sb2NrKTsKLXN0YXRpYyBMSVNUX0hFQUQoYWxsX2NoYW5uZWxzKTsKLXN0YXRpYyBMSVNUX0hFQUQobmV3X2NoYW5uZWxzKTsKLXN0YXRpYyBpbnQgbGFzdF9jaGFubmVsX2luZGV4Owogc3RhdGljIGF0b21pY190IGNoYW5uZWxfY291bnQgPSBBVE9NSUNfSU5JVCgwKTsKIAorLyogcGVyLW5ldCBwcml2YXRlIGRhdGEgZm9yIHRoaXMgbW9kdWxlICovCitzdGF0aWMgaW50IHBwcF9uZXRfaWQ7CitzdHJ1Y3QgcHBwX25ldCB7CisJLyogdW5pdHMgdG8gcHBwIG1hcHBpbmcgKi8KKwlzdHJ1Y3QgaWRyIHVuaXRzX2lkcjsKKworCS8qCisJICogYWxsX3BwcF9tdXRleCBwcm90ZWN0cyB0aGUgdW5pdHNfaWRyIG1hcHBpbmcuCisJICogSXQgYWxzbyBlbnN1cmVzIHRoYXQgZmluZGluZyBhIHBwcCB1bml0IGluIHRoZSB1bml0c19pZHIKKwkgKiBtYXAgYW5kIHVwZGF0aW5nIGl0cyBmaWxlLnJlZmNudCBmaWVsZCBpcyBhdG9taWMuCisJICovCisJc3RydWN0IG11dGV4IGFsbF9wcHBfbXV0ZXg7CisKKwkvKiBjaGFubmVscyAqLworCXN0cnVjdCBsaXN0X2hlYWQgYWxsX2NoYW5uZWxzOworCXN0cnVjdCBsaXN0X2hlYWQgbmV3X2NoYW5uZWxzOworCWludCBsYXN0X2NoYW5uZWxfaW5kZXg7CisKKwkvKgorCSAqIGFsbF9jaGFubmVsc19sb2NrIHByb3RlY3RzIGFsbF9jaGFubmVscyBhbmQKKwkgKiBsYXN0X2NoYW5uZWxfaW5kZXgsIGFuZCB0aGUgYXRvbWljaXR5IG9mIGZpbmQKKwkgKiBhIGNoYW5uZWwgYW5kIHVwZGF0aW5nIGl0cyBmaWxlLnJlZmNudCBmaWVsZC4KKwkgKi8KKwlzcGlubG9ja190IGFsbF9jaGFubmVsc19sb2NrOworfTsKKwogLyogR2V0IHRoZSBQUFAgcHJvdG9jb2wgbnVtYmVyIGZyb20gYSBza2IgKi8KICNkZWZpbmUgUFBQX1BST1RPKHNrYikJKCgoc2tiKS0+ZGF0YVswXSA8PCA4KSArIChza2IpLT5kYXRhWzFdKQogCkBAIC0yMTYsOCArMjMyLDggQEAKICNkZWZpbmUgc2VxX2FmdGVyKGEsIGIpCQkoKHMzMikoKGEpIC0gKGIpKSA+IDApCiAKIC8qIFByb3RvdHlwZXMuICovCi1zdGF0aWMgaW50IHBwcF91bmF0dGFjaGVkX2lvY3RsKHN0cnVjdCBwcHBfZmlsZSAqcGYsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKK3N0YXRpYyBpbnQgcHBwX3VuYXR0YWNoZWRfaW9jdGwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHBwX2ZpbGUgKnBmLAorCQkJc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKIHN0YXRpYyB2b2lkIHBwcF94bWl0X3Byb2Nlc3Moc3RydWN0IHBwcCAqcHBwKTsKIHN0YXRpYyB2b2lkIHBwcF9zZW5kX2ZyYW1lKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgdm9pZCBwcHBfcHVzaChzdHJ1Y3QgcHBwICpwcHApOwpAQCAtMjQwLDEyICsyNTYsMTIgQEAKIHN0YXRpYyB2b2lkIHBwcF9jY3BfY2xvc2VkKHN0cnVjdCBwcHAgKnBwcCk7CiBzdGF0aWMgc3RydWN0IGNvbXByZXNzb3IgKmZpbmRfY29tcHJlc3NvcihpbnQgdHlwZSk7CiBzdGF0aWMgdm9pZCBwcHBfZ2V0X3N0YXRzKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHBwcF9zdGF0cyAqc3QpOwotc3RhdGljIHN0cnVjdCBwcHAgKnBwcF9jcmVhdGVfaW50ZXJmYWNlKGludCB1bml0LCBpbnQgKnJldHApOworc3RhdGljIHN0cnVjdCBwcHAgKnBwcF9jcmVhdGVfaW50ZXJmYWNlKHN0cnVjdCBuZXQgKm5ldCwgaW50IHVuaXQsIGludCAqcmV0cCk7CiBzdGF0aWMgdm9pZCBpbml0X3BwcF9maWxlKHN0cnVjdCBwcHBfZmlsZSAqcGYsIGludCBraW5kKTsKIHN0YXRpYyB2b2lkIHBwcF9zaHV0ZG93bl9pbnRlcmZhY2Uoc3RydWN0IHBwcCAqcHBwKTsKIHN0YXRpYyB2b2lkIHBwcF9kZXN0cm95X2ludGVyZmFjZShzdHJ1Y3QgcHBwICpwcHApOwotc3RhdGljIHN0cnVjdCBwcHAgKnBwcF9maW5kX3VuaXQoaW50IHVuaXQpOwotc3RhdGljIHN0cnVjdCBjaGFubmVsICpwcHBfZmluZF9jaGFubmVsKGludCB1bml0KTsKK3N0YXRpYyBzdHJ1Y3QgcHBwICpwcHBfZmluZF91bml0KHN0cnVjdCBwcHBfbmV0ICpwbiwgaW50IHVuaXQpOworc3RhdGljIHN0cnVjdCBjaGFubmVsICpwcHBfZmluZF9jaGFubmVsKHN0cnVjdCBwcHBfbmV0ICpwbiwgaW50IHVuaXQpOwogc3RhdGljIGludCBwcHBfY29ubmVjdF9jaGFubmVsKHN0cnVjdCBjaGFubmVsICpwY2gsIGludCB1bml0KTsKIHN0YXRpYyBpbnQgcHBwX2Rpc2Nvbm5lY3RfY2hhbm5lbChzdHJ1Y3QgY2hhbm5lbCAqcGNoKTsKIHN0YXRpYyB2b2lkIHBwcF9kZXN0cm95X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCk7CkBAIC0yNTYsNiArMjcyLDE0IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKnBwcF9jbGFzczsKIAorLyogcGVyIG5ldC1uYW1lc3BhY2UgZGF0YSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwX25ldCAqcHBwX3Blcm5ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJQlVHX09OKCFuZXQpOworCisJcmV0dXJuIG5ldF9nZW5lcmljKG5ldCwgcHBwX25ldF9pZCk7Cit9CisKIC8qIFRyYW5zbGF0ZXMgYSBQUFAgcHJvdG9jb2wgbnVtYmVyIHRvIGEgTlAgaW5kZXggKE5QID09IG5ldHdvcmsgcHJvdG9jb2wpICovCiBzdGF0aWMgaW5saW5lIGludCBwcm90b190b19ucGluZGV4KGludCBwcm90bykKIHsKQEAgLTU0NCw3ICs1NjgsOCBAQAogCWludCBfX3VzZXIgKnAgPSBhcmdwOwogCiAJaWYgKCFwZikKLQkJcmV0dXJuIHBwcF91bmF0dGFjaGVkX2lvY3RsKHBmLCBmaWxlLCBjbWQsIGFyZyk7CisJCXJldHVybiBwcHBfdW5hdHRhY2hlZF9pb2N0bChjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnMsCisJCQkJCXBmLCBmaWxlLCBjbWQsIGFyZyk7CiAKIAlpZiAoY21kID09IFBQUElPQ0RFVEFDSCkgewogCQkvKgpAQCAtNzYzLDEyICs3ODgsMTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHBwcF91bmF0dGFjaGVkX2lvY3RsKHN0cnVjdCBwcHBfZmlsZSAqcGYsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBwcHBfdW5hdHRhY2hlZF9pb2N0bChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBwcHBfZmlsZSAqcGYsCisJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IHVuaXQsIGVyciA9IC1FRkFVTFQ7CiAJc3RydWN0IHBwcCAqcHBwOwogCXN0cnVjdCBjaGFubmVsICpjaGFuOworCXN0cnVjdCBwcHBfbmV0ICpwbjsKIAlpbnQgX191c2VyICpwID0gKGludCBfX3VzZXIgKilhcmc7CiAKIAlsb2NrX2tlcm5lbCgpOwpAQCAtNzc3LDcgKzgwMyw3IEBACiAJCS8qIENyZWF0ZSBhIG5ldyBwcHAgdW5pdCAqLwogCQlpZiAoZ2V0X3VzZXIodW5pdCwgcCkpCiAJCQlicmVhazsKLQkJcHBwID0gcHBwX2NyZWF0ZV9pbnRlcmZhY2UodW5pdCwgJmVycik7CisJCXBwcCA9IHBwcF9jcmVhdGVfaW50ZXJmYWNlKG5ldCwgdW5pdCwgJmVycik7CiAJCWlmICghcHBwKQogCQkJYnJlYWs7CiAJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZwcHAtPmZpbGU7CkBAIC03OTIsMjkgKzgxOCwzMSBAQAogCQkvKiBBdHRhY2ggdG8gYW4gZXhpc3RpbmcgcHBwIHVuaXQgKi8KIAkJaWYgKGdldF91c2VyKHVuaXQsIHApKQogCQkJYnJlYWs7Ci0JCW11dGV4X2xvY2soJmFsbF9wcHBfbXV0ZXgpOwogCQllcnIgPSAtRU5YSU87Ci0JCXBwcCA9IHBwcF9maW5kX3VuaXQodW5pdCk7CisJCXBuID0gcHBwX3Blcm5ldChuZXQpOworCQltdXRleF9sb2NrKCZwbi0+YWxsX3BwcF9tdXRleCk7CisJCXBwcCA9IHBwcF9maW5kX3VuaXQocG4sIHVuaXQpOwogCQlpZiAocHBwKSB7CiAJCQlhdG9taWNfaW5jKCZwcHAtPmZpbGUucmVmY250KTsKIAkJCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZwcHAtPmZpbGU7CiAJCQllcnIgPSAwOwogCQl9Ci0JCW11dGV4X3VubG9jaygmYWxsX3BwcF9tdXRleCk7CisJCW11dGV4X3VubG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCQlicmVhazsKIAogCWNhc2UgUFBQSU9DQVRUQ0hBTjoKIAkJaWYgKGdldF91c2VyKHVuaXQsIHApKQogCQkJYnJlYWs7Ci0JCXNwaW5fbG9ja19iaCgmYWxsX2NoYW5uZWxzX2xvY2spOwogCQllcnIgPSAtRU5YSU87Ci0JCWNoYW4gPSBwcHBfZmluZF9jaGFubmVsKHVuaXQpOworCQlwbiA9IHBwcF9wZXJuZXQobmV0KTsKKwkJc3Bpbl9sb2NrX2JoKCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOworCQljaGFuID0gcHBwX2ZpbmRfY2hhbm5lbChwbiwgdW5pdCk7CiAJCWlmIChjaGFuKSB7CiAJCQlhdG9taWNfaW5jKCZjaGFuLT5maWxlLnJlZmNudCk7CiAJCQlmaWxlLT5wcml2YXRlX2RhdGEgPSAmY2hhbi0+ZmlsZTsKIAkJCWVyciA9IDA7CiAJCX0KLQkJc3Bpbl91bmxvY2tfYmgoJmFsbF9jaGFubmVsc19sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnBuLT5hbGxfY2hhbm5lbHNfbG9jayk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTgzNCw2ICs4NjIsNTEgQEAKIAkucmVsZWFzZQk9IHBwcF9yZWxlYXNlCiB9OwogCitzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHBwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcHBwX25ldCAqcG47CisJaW50IGVycjsKKworCXBuID0ga3phbGxvYyhzaXplb2YoKnBuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZHJfaW5pdCgmcG4tPnVuaXRzX2lkcik7CisJbXV0ZXhfaW5pdCgmcG4tPmFsbF9wcHBfbXV0ZXgpOworCisJSU5JVF9MSVNUX0hFQUQoJnBuLT5hbGxfY2hhbm5lbHMpOworCUlOSVRfTElTVF9IRUFEKCZwbi0+bmV3X2NoYW5uZWxzKTsKKworCXNwaW5fbG9ja19pbml0KCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOworCisJZXJyID0gbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwX25ldF9pZCwgcG4pOworCWlmIChlcnIpIHsKKwkJa2ZyZWUocG4pOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHBwcF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBwcF9uZXQgKnBuOworCisJcG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHBwcF9uZXRfaWQpOworCWlkcl9kZXN0cm95KCZwbi0+dW5pdHNfaWRyKTsKKwkvKgorCSAqIGlmIHNvbWVvbmUgaGFzIGNhY2hlZCBvdXIgbmV0IHRoZW4KKwkgKiBmdXJ0aGVyIG5ldF9nZW5lcmljIGNhbGwgd2lsbCByZXR1cm4gTlVMTAorCSAqLworCW5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHBwcF9uZXRfaWQsIE5VTEwpOworCWtmcmVlKHBuKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBwcHBfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHBwcF9pbml0X25ldCwKKwkuZXhpdCA9IHBwcF9leGl0X25ldCwKK307CisKICNkZWZpbmUgUFBQX01BSk9SCTEwOAogCiAvKiBDYWxsZWQgYXQgYm9vdCB0aW1lIGlmIHBwcCBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsCkBAIC04NDMsMjUgKzkxNiwzNiBAQAogCWludCBlcnI7CiAKIAlwcmludGsoS0VSTl9JTkZPICJQUFAgZ2VuZXJpYyBkcml2ZXIgdmVyc2lvbiAiIFBQUF9WRVJTSU9OICJcbiIpOwotCWVyciA9IHJlZ2lzdGVyX2NocmRldihQUFBfTUFKT1IsICJwcHAiLCAmcHBwX2RldmljZV9mb3BzKTsKLQlpZiAoIWVycikgewotCQlwcHBfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJwcHAiKTsKLQkJaWYgKElTX0VSUihwcHBfY2xhc3MpKSB7Ci0JCQllcnIgPSBQVFJfRVJSKHBwcF9jbGFzcyk7Ci0JCQlnb3RvIG91dF9jaHJkZXY7Ci0JCX0KLQkJZGV2aWNlX2NyZWF0ZShwcHBfY2xhc3MsIE5VTEwsIE1LREVWKFBQUF9NQUpPUiwgMCksIE5VTEwsCi0JCQkgICAgICAicHBwIik7CisKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZSgmcHBwX25ldF9pZCwgJnBwcF9uZXRfb3BzKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIFBQUCBwZXJuZXQgZGV2aWNlICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OwogCX0KIAotb3V0OgotCWlmIChlcnIpCisJZXJyID0gcmVnaXN0ZXJfY2hyZGV2KFBQUF9NQUpPUiwgInBwcCIsICZwcHBfZGV2aWNlX2ZvcHMpOworCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgUFBQIGRldmljZSAoJWQpXG4iLCBlcnIpOwotCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X25ldDsKKwl9CisKKwlwcHBfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJwcHAiKTsKKwlpZiAoSVNfRVJSKHBwcF9jbGFzcykpIHsKKwkJZXJyID0gUFRSX0VSUihwcHBfY2xhc3MpOworCQlnb3RvIG91dF9jaHJkZXY7CisJfQorCisJLyogbm90IGEgYmlnIGRlYWwgaWYgd2UgZmFpbCBoZXJlIDotKSAqLworCWRldmljZV9jcmVhdGUocHBwX2NsYXNzLCBOVUxMLCBNS0RFVihQUFBfTUFKT1IsIDApLCBOVUxMLCAicHBwIik7CisKKwlyZXR1cm4gMDsKIAogb3V0X2NocmRldjoKIAl1bnJlZ2lzdGVyX2NocmRldihQUFBfTUFKT1IsICJwcHAiKTsKLQlnb3RvIG91dDsKK291dF9uZXQ6CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShwcHBfbmV0X2lkLCAmcHBwX25ldF9vcHMpOworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC05MDgsNyArOTkyLDcgQEAKIAogIG91dGY6CiAJa2ZyZWVfc2tiKHNrYik7Ci0JKytwcHAtPmRldi0+c3RhdHMudHhfZHJvcHBlZDsKKwkrK2Rldi0+c3RhdHMudHhfZHJvcHBlZDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTY5LDYgKzEwNTMsNyBAQAogCWRldi0+dHhfcXVldWVfbGVuID0gMzsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfUFBQOwogCWRldi0+ZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlAgfCBJRkZfTVVMVElDQVNUOworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ORVROU19MT0NBTDsKIH0KIAogLyoKQEAgLTExNjEsOCArMTI0Niw3IEBACiAJcmV0dXJuOwogCiAgZHJvcDoKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAkrK3BwcC0+ZGV2LT5zdGF0cy50eF9lcnJvcnM7CiB9CiAKQEAgLTEyMjQsMTM4ICsxMzA4LDE4MSBAQAogICovCiBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgbGVuLCBmcmFnc2l6ZTsKLQlpbnQgaSwgYml0cywgaGRybGVuLCBtdHU7Ci0JaW50IGZsZW47Ci0JaW50IG5hdmFpbCwgbmZyZWU7Ci0JaW50IG5iaWdnZXI7CisJaW50CWxlbiwgdG90bGVuOworCWludAlpLCBiaXRzLCBoZHJsZW4sIG10dTsKKwlpbnQJZmxlbjsKKwlpbnQJbmF2YWlsLAluZnJlZSwgbnplcm87CisJaW50CW5iaWdnZXI7CisJaW50CXRvdHNwZWVkOworCWludAl0b3RmcmVlOwogCXVuc2lnbmVkIGNoYXIgKnAsICpxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAJc3RydWN0IGNoYW5uZWwgKnBjaDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZzsKIAlzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW47CiAKLQluZnJlZSA9IDA7CS8qICMgY2hhbm5lbHMgd2hpY2ggaGF2ZSBubyBwYWNrZXQgYWxyZWFkeSBxdWV1ZWQgKi8KKwl0b3RzcGVlZCA9IDA7IC8qdG90YWwgYml0cmF0ZSBvZiB0aGUgYnVuZGxlKi8KKwluZnJlZSA9CTA7CS8qICMgY2hhbm5lbHMgd2hpY2gJaGF2ZSBubwlwYWNrZXQgYWxyZWFkeSBxdWV1ZWQgKi8KIAluYXZhaWwgPSAwOwkvKiB0b3RhbCAjIG9mIHVzYWJsZSBjaGFubmVscyAobm90IGRlcmVnaXN0ZXJlZCkgKi8KKwluemVybyA9CTA7IC8qIG51bWJlciBvZgljaGFubmVscyB3aXRoIHplcm8gc3BlZWQgYXNzb2NpYXRlZCovCisJdG90ZnJlZQk9IDA7IC8qdG90YWwgIyBvZiBjaGFubmVscyBhdmFpbGFibGUgYW5kCisJCQkJICAqaGF2aW5nIG5vIHF1ZXVlZCBwYWNrZXRzIGJlZm9yZQorCQkJCSAgKnN0YXJ0aW5nIHRoZSBmcmFnbWVudGF0aW9uKi8KKwogCWhkcmxlbiA9IChwcHAtPmZsYWdzICYgU0NfTVBfWFNIT1JUU0VRKT8gTVBIRFJMRU5fU1NOOiBNUEhEUkxFTjsKLQlpID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJnBwcC0+Y2hhbm5lbHMsIGNsaXN0KSB7CisJaSA9CTA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZwcHAtPmNoYW5uZWxzLCBjbGlzdCkJewogCQluYXZhaWwgKz0gcGNoLT5hdmFpbCA9IChwY2gtPmNoYW4gIT0gTlVMTCk7Ci0JCWlmIChwY2gtPmF2YWlsKSB7CisJCXBjaC0+c3BlZWQgPSBwY2gtPmNoYW4tPnNwZWVkOworCQlpZiAocGNoLT5hdmFpbCkJewogCQkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcGNoLT5maWxlLnhxKSB8fAotCQkJICAgICFwY2gtPmhhZF9mcmFnKSB7Ci0JCQkJcGNoLT5hdmFpbCA9IDI7Ci0JCQkJKytuZnJlZTsKLQkJCX0KLQkJCWlmICghcGNoLT5oYWRfZnJhZyAmJiBpIDwgcHBwLT5ueGNoYW4pCi0JCQkJcHBwLT5ueGNoYW4gPSBpOworCQkJCSFwY2gtPmhhZF9mcmFnKQl7CisJCQkJCWlmIChwY2gtPnNwZWVkID09IDApCisJCQkJCQluemVybysrOworCQkJCQllbHNlCisJCQkJCQl0b3RzcGVlZCArPSBwY2gtPnNwZWVkOworCisJCQkJCXBjaC0+YXZhaWwgPSAyOworCQkJCQkrK25mcmVlOworCQkJCQkrK3RvdGZyZWU7CisJCQkJfQorCQkJaWYgKCFwY2gtPmhhZF9mcmFnICYmIGkJPCBwcHAtPm54Y2hhbikKKwkJCQlwcHAtPm54Y2hhbgk9IGk7CiAJCX0KIAkJKytpOwogCX0KLQogCS8qCi0JICogRG9uJ3Qgc3RhcnQgc2VuZGluZyB0aGlzIHBhY2tldCB1bmxlc3MgYXQgbGVhc3QgaGFsZiBvZgotCSAqIHRoZSBjaGFubmVscyBhcmUgZnJlZS4gIFRoaXMgZ2l2ZXMgbXVjaCBiZXR0ZXIgVENQCi0JICogcGVyZm9ybWFuY2UgaWYgd2UgaGF2ZSBhIGxvdCBvZiBjaGFubmVscy4KKwkgKiBEb24ndCBzdGFydCBzZW5kaW5nIHRoaXMJcGFja2V0IHVubGVzcyBhdCBsZWFzdCBoYWxmCW9mCisJICogdGhlIGNoYW5uZWxzCWFyZQlmcmVlLiAgVGhpcwlnaXZlcyBtdWNoIGJldHRlciBUQ1AKKwkgKiBwZXJmb3JtYW5jZSBpZiB3ZSBoYXZlIGEJbG90CW9mIGNoYW5uZWxzLgogCSAqLwotCWlmIChuZnJlZSA9PSAwIHx8IG5mcmVlIDwgbmF2YWlsIC8gMikKLQkJcmV0dXJuIDA7CS8qIGNhbid0IHRha2Ugbm93LCBsZWF2ZSBpdCBpbiB4bWl0X3BlbmRpbmcgKi8KKwlpZiAobmZyZWUgPT0gMCB8fCBuZnJlZQk8IG5hdmFpbCAvIDIpCisJCXJldHVybiAwOyAvKiBjYW4ndCB0YWtlIG5vdywgbGVhdmUgaXQgaW4geG1pdF9wZW5kaW5nCSovCiAKIAkvKiBEbyBwcm90b2NvbCBmaWVsZCBjb21wcmVzc2lvbiAoWFhYIHRoaXMgc2hvdWxkIGJlIG9wdGlvbmFsKSAqLwotCXAgPSBza2ItPmRhdGE7Ci0JbGVuID0gc2tiLT5sZW47CisJcCA9CXNrYi0+ZGF0YTsKKwlsZW4JPSBza2ItPmxlbjsKIAlpZiAoKnAgPT0gMCkgewogCQkrK3A7CiAJCS0tbGVuOwogCX0KIAotCS8qCi0JICogRGVjaWRlIG9uIGZyYWdtZW50IHNpemUuCi0JICogV2UgY3JlYXRlIGEgZnJhZ21lbnQgZm9yIGVhY2ggZnJlZSBjaGFubmVsIHJlZ2FyZGxlc3Mgb2YKLQkgKiBob3cgc21hbGwgdGhleSBhcmUgKGkuZS4gZXZlbiAwIGxlbmd0aCkgaW4gb3JkZXIgdG8gbWluaW1pemUKLQkgKiB0aGUgdGltZSB0aGF0IGl0IHdpbGwgdGFrZSB0byBkZXRlY3Qgd2hlbiBhIGNoYW5uZWwgZHJvcHMKLQkgKiBhIGZyYWdtZW50LgotCSAqLwotCWZyYWdzaXplID0gbGVuOwotCWlmIChuZnJlZSA+IDEpCi0JCWZyYWdzaXplID0gRElWX1JPVU5EX1VQKGZyYWdzaXplLCBuZnJlZSk7Ci0JLyogbmJpZ2dlciBjaGFubmVscyBnZXQgZnJhZ3NpemUgYnl0ZXMsIHRoZSByZXN0IGdldCBmcmFnc2l6ZS0xLAotCSAgIGV4Y2VwdCBpZiBuYmlnZ2VyPT0wLCB0aGVuIHRoZXkgYWxsIGdldCBmcmFnc2l6ZS4gKi8KLQluYmlnZ2VyID0gbGVuICUgbmZyZWU7CisJdG90bGVuID0gbGVuOworCW5iaWdnZXIJPSBsZW4gJQluZnJlZTsKIAotCS8qIHNraXAgdG8gdGhlIGNoYW5uZWwgYWZ0ZXIgdGhlIG9uZSB3ZSBsYXN0IHVzZWQKLQkgICBhbmQgc3RhcnQgYXQgdGhhdCBvbmUgKi8KKwkvKiBza2lwCXRvIHRoZSBjaGFubmVsIGFmdGVyIHRoZSBvbmUgd2UJbGFzdCB1c2VkCisJICAgYW5kIHN0YXJ0IGF0CXRoYXQgb25lICovCiAJbGlzdCA9ICZwcHAtPmNoYW5uZWxzOwotCWZvciAoaSA9IDA7IGkgPCBwcHAtPm54Y2hhbjsgKytpKSB7CisJZm9yCShpID0gMDsJaSA8CXBwcC0+bnhjaGFuOyArK2kpIHsKIAkJbGlzdCA9IGxpc3QtPm5leHQ7Ci0JCWlmIChsaXN0ID09ICZwcHAtPmNoYW5uZWxzKSB7Ci0JCQlpID0gMDsKKwkJaWYgKGxpc3QgPT0JJnBwcC0+Y2hhbm5lbHMpCXsKKwkJCWkgPQkwOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQkvKiBjcmVhdGUgYSBmcmFnbWVudCBmb3IgZWFjaCBjaGFubmVsICovCisJLyogY3JlYXRlIGEJZnJhZ21lbnQgZm9yIGVhY2ggY2hhbm5lbCAqLwogCWJpdHMgPSBCOwotCXdoaWxlIChuZnJlZSA+IDAgfHwgbGVuID4gMCkgeworCXdoaWxlIChuZnJlZSA+IDAgJiYJbGVuCT4gMCkgewogCQlsaXN0ID0gbGlzdC0+bmV4dDsKLQkJaWYgKGxpc3QgPT0gJnBwcC0+Y2hhbm5lbHMpIHsKLQkJCWkgPSAwOworCQlpZiAobGlzdCA9PQkmcHBwLT5jaGFubmVscykJeworCQkJaSA9CTA7CiAJCQljb250aW51ZTsKIAkJfQotCQlwY2ggPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBjaGFubmVsLCBjbGlzdCk7CisJCXBjaAk9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGNoYW5uZWwsIGNsaXN0KTsKIAkJKytpOwogCQlpZiAoIXBjaC0+YXZhaWwpCiAJCQljb250aW51ZTsKIAogCQkvKgotCQkgKiBTa2lwIHRoaXMgY2hhbm5lbCBpZiBpdCBoYXMgYSBmcmFnbWVudCBwZW5kaW5nIGFscmVhZHkgYW5kCi0JCSAqIHdlIGhhdmVuJ3QgZ2l2ZW4gYSBmcmFnbWVudCB0byBhbGwgb2YgdGhlIGZyZWUgY2hhbm5lbHMuCisJCSAqIFNraXAJdGhpcyBjaGFubmVsIGlmCWl0IGhhcyBhIGZyYWdtZW50IHBlbmRpbmcgYWxyZWFkeSBhbmQKKwkJICogd2UgaGF2ZW4ndCBnaXZlbglhIGZyYWdtZW50IHRvIGFsbCBvZiB0aGUgZnJlZSBjaGFubmVscy4KIAkJICovCiAJCWlmIChwY2gtPmF2YWlsID09IDEpIHsKLQkJCWlmIChuZnJlZSA+IDApCisJCQlpZiAobmZyZWUgPgkwKQogCQkJCWNvbnRpbnVlOwogCQl9IGVsc2UgewotCQkJLS1uZnJlZTsKIAkJCXBjaC0+YXZhaWwgPSAxOwogCQl9CiAKIAkJLyogY2hlY2sgdGhlIGNoYW5uZWwncyBtdHUgYW5kIHdoZXRoZXIgaXQgaXMgc3RpbGwgYXR0YWNoZWQuICovCiAJCXNwaW5fbG9ja19iaCgmcGNoLT5kb3dubCk7CiAJCWlmIChwY2gtPmNoYW4gPT0gTlVMTCkgewotCQkJLyogY2FuJ3QgdXNlIHRoaXMgY2hhbm5lbCwgaXQncyBiZWluZyBkZXJlZ2lzdGVyZWQgKi8KKwkJCS8qIGNhbid0IHVzZSB0aGlzIGNoYW5uZWwsIGl0J3MJYmVpbmcgZGVyZWdpc3RlcmVkICovCisJCQlpZiAocGNoLT5zcGVlZCA9PSAwKQorCQkJCW56ZXJvLS07CisJCQllbHNlCisJCQkJdG90c3BlZWQgLT0JcGNoLT5zcGVlZDsKKwogCQkJc3Bpbl91bmxvY2tfYmgoJnBjaC0+ZG93bmwpOwogCQkJcGNoLT5hdmFpbCA9IDA7Ci0JCQlpZiAoLS1uYXZhaWwgPT0gMCkKKwkJCXRvdGxlbiA9IGxlbjsKKwkJCXRvdGZyZWUtLTsKKwkJCW5mcmVlLS07CisJCQlpZiAoLS1uYXZhaWwgPT0JMCkKIAkJCQlicmVhazsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyoKLQkJICogQ3JlYXRlIGEgZnJhZ21lbnQgZm9yIHRoaXMgY2hhbm5lbCBvZgotCQkgKiBtaW4obWF4KG10dSsyLWhkcmxlbiwgNCksIGZyYWdzaXplLCBsZW4pIGJ5dGVzLgotCQkgKiBJZiBtdHUrMi1oZHJsZW4gPCA0LCB0aGF0IGlzIGEgcmlkaWN1bG91c2x5IHNtYWxsCi0JCSAqIE1UVSwgc28gd2UgdXNlIG10dSA9IDIgKyBoZHJsZW4uCisJCSppZiB0aGUgY2hhbm5lbCBzcGVlZCBpcyBub3Qgc2V0IGRpdmlkZQorCQkqdGhlIHBhY2tldAlldmVubHkgYW1vbmcgdGhlIGZyZWUgY2hhbm5lbHM7CisJCSpvdGhlcndpc2UgZGl2aWRlIGl0IGFjY29yZGluZyB0byB0aGUgc3BlZWQKKwkJKm9mIHRoZSBjaGFubmVsIHdlIGFyZSBnb2luZyB0byB0cmFuc21pdCBvbgorCQkqLworCQlpZiAocGNoLT5zcGVlZCA9PSAwKSB7CisJCQlmbGVuID0gdG90bGVuL25mcmVlCTsKKwkJCWlmIChuYmlnZ2VyID4gMCkgeworCQkJCWZsZW4rKzsKKwkJCQluYmlnZ2VyLS07CisJCQl9CisJCX0gZWxzZSB7CisJCQlmbGVuID0gKCgodG90ZnJlZSAtIG56ZXJvKSoodG90bGVuICsgaGRybGVuKnRvdGZyZWUpKSAvCisJCQkJKCh0b3RzcGVlZCp0b3RmcmVlKS9wY2gtPnNwZWVkKSkgLSBoZHJsZW47CisJCQlpZiAobmJpZ2dlciA+IDApIHsKKwkJCQlmbGVuICs9ICgodG90ZnJlZSAtIG56ZXJvKSpwY2gtPnNwZWVkKS90b3RzcGVlZDsKKwkJCQluYmlnZ2VyIC09ICgodG90ZnJlZSAtIG56ZXJvKSpwY2gtPnNwZWVkKS8KKwkJCQkJCQl0b3RzcGVlZDsKKwkJCX0KKwkJfQorCQluZnJlZS0tOworCisJCS8qCisJCSAqY2hlY2sJaWYgd2UgYXJlIG9uIHRoZSBsYXN0IGNoYW5uZWwgb3IKKwkJICp3ZSBleGNlZGVkIHRoZSBsZW5naHQJb2YgdGhlIGRhdGEJdG8KKwkJICpmcmFnbWVudAogCQkgKi8KLQkJaWYgKGZyYWdzaXplID4gbGVuKQotCQkJZnJhZ3NpemUgPSBsZW47Ci0JCWZsZW4gPSBmcmFnc2l6ZTsKLQkJbXR1ID0gcGNoLT5jaGFuLT5tdHUgKyAyIC0gaGRybGVuOwotCQlpZiAobXR1IDwgNCkKLQkJCW10dSA9IDQ7CisJCWlmICgobmZyZWUgPT0gMCkgfHwgKGZsZW4gPiBsZW4pKQorCQkJZmxlbiA9IGxlbjsKKwkJLyoKKwkJICppdCBpcyBub3Qgd29ydGggdG8gdHggb24gc2xvdyBjaGFubmVsczoKKwkJICppbiB0aGF0IGNhc2UgZnJvbSB0aGUgcmVzdWx0aW5nIGZsZW4gYWNjb3JkaW5nIHRvIHRoZQorCQkgKmFib3ZlIGZvcm11bGEgd2lsbCBiZSBlcXVhbCBvciBsZXNzIHRoYW4gemVyby4KKwkJICpTa2lwIHRoZSBjaGFubmVsIGluIHRoaXMgY2FzZQorCQkgKi8KKwkJaWYgKGZsZW4gPD0JMCkgeworCQkJcGNoLT5hdmFpbCA9IDI7CisJCQlzcGluX3VubG9ja19iaCgmcGNoLT5kb3dubCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW10dQk9IHBjaC0+Y2hhbi0+bXR1ICsgMiAtIGhkcmxlbjsKKwkJaWYgKG10dQk8IDQpCisJCQltdHUJPSA0OwogCQlpZiAoZmxlbiA+IG10dSkKIAkJCWZsZW4gPSBtdHU7Ci0JCWlmIChmbGVuID09IGxlbiAmJiBuZnJlZSA9PSAwKQotCQkJYml0cyB8PSBFOwotCQlmcmFnID0gYWxsb2Nfc2tiKGZsZW4gKyBoZHJsZW4gKyAoZmxlbiA9PSAwKSwgR0ZQX0FUT01JQyk7CisJCWlmIChmbGVuID09CWxlbikKKwkJCWJpdHMgfD0JRTsKKwkJZnJhZyA9IGFsbG9jX3NrYihmbGVuICsJaGRybGVuICsgKGZsZW4gPT0gMCksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWZyYWcpCiAJCQlnb3RvIG5vc2tiOwotCQlxID0gc2tiX3B1dChmcmFnLCBmbGVuICsgaGRybGVuKTsKKwkJcSA9CXNrYl9wdXQoZnJhZywgZmxlbiArIGhkcmxlbik7CiAKLQkJLyogbWFrZSB0aGUgTVAgaGVhZGVyICovCisJCS8qIG1ha2UJdGhlCU1QIGhlYWRlciAqLwogCQlxWzBdID0gUFBQX01QID4+IDg7CiAJCXFbMV0gPSBQUFBfTVA7CiAJCWlmIChwcHAtPmZsYWdzICYgU0NfTVBfWFNIT1JUU0VRKSB7Ci0JCQlxWzJdID0gYml0cyArICgocHBwLT5ueHNlcSA+PiA4KSAmIDB4Zik7CisJCQlxWzJdID0gYml0cwkrICgocHBwLT5ueHNlcSA+PiA4KSAmIDB4Zik7CiAJCQlxWzNdID0gcHBwLT5ueHNlcTsKIAkJfSBlbHNlIHsKIAkJCXFbMl0gPSBiaXRzOwpAQCAtMTM2NCw0MyArMTQ5MSwyOCBAQAogCQkJcVs1XSA9IHBwcC0+bnhzZXE7CiAJCX0KIAotCQkvKgotCQkgKiBDb3B5IHRoZSBkYXRhIGluLgotCQkgKiBVbmZvcnR1bmF0ZWx5IHRoZXJlIGlzIGEgYnVnIGluIG9sZGVyIHZlcnNpb25zIG9mCi0JCSAqIHRoZSBMaW51eCBQUFAgbXVsdGlsaW5rIHJlY29uc3RydWN0aW9uIGNvZGUgd2hlcmUgaXQKLQkJICogZHJvcHMgMC1sZW5ndGggZnJhZ21lbnRzLiAgVGhlcmVmb3JlIHdlIG1ha2Ugc3VyZSB0aGUKLQkJICogZnJhZ21lbnQgaGFzIGF0IGxlYXN0IG9uZSBieXRlIG9mIGRhdGEuICBBbnkgYnl0ZXMKLQkJICogd2UgYWRkIGluIHRoaXMgc2l0dWF0aW9uIHdpbGwgZW5kIHVwIGFzIHBhZGRpbmcgb24gdGhlCi0JCSAqIGVuZCBvZiB0aGUgcmVjb25zdHJ1Y3RlZCBwYWNrZXQuCi0JCSAqLwotCQlpZiAoZmxlbiA9PSAwKQotCQkJKnNrYl9wdXQoZnJhZywgMSkgPSAwOwotCQllbHNlCi0JCQltZW1jcHkocSArIGhkcmxlbiwgcCwgZmxlbik7CisJCW1lbWNweShxICsgaGRybGVuLCBwLCBmbGVuKTsKIAogCQkvKiB0cnkgdG8gc2VuZCBpdCBkb3duIHRoZSBjaGFubmVsICovCiAJCWNoYW4gPSBwY2gtPmNoYW47Ci0JCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZwY2gtPmZpbGUueHEpIHx8Ci0JCSAgICAhY2hhbi0+b3BzLT5zdGFydF94bWl0KGNoYW4sIGZyYWcpKQorCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmcGNoLT5maWxlLnhxKQl8fAorCQkJIWNoYW4tPm9wcy0+c3RhcnRfeG1pdChjaGFuLCBmcmFnKSkKIAkJCXNrYl9xdWV1ZV90YWlsKCZwY2gtPmZpbGUueHEsIGZyYWcpOwotCQlwY2gtPmhhZF9mcmFnID0gMTsKKwkJcGNoLT5oYWRfZnJhZyA9CTE7CiAJCXAgKz0gZmxlbjsKLQkJbGVuIC09IGZsZW47CisJCWxlbgktPSBmbGVuOwogCQkrK3BwcC0+bnhzZXE7CiAJCWJpdHMgPSAwOwogCQlzcGluX3VubG9ja19iaCgmcGNoLT5kb3dubCk7Ci0KLQkJaWYgKC0tbmJpZ2dlciA9PSAwICYmIGZyYWdzaXplID4gMCkKLQkJCS0tZnJhZ3NpemU7CiAJfQotCXBwcC0+bnhjaGFuID0gaTsKKwlwcHAtPm54Y2hhbgk9IGk7CiAKIAlyZXR1cm4gMTsKIAogIG5vc2tiOgogCXNwaW5fdW5sb2NrX2JoKCZwY2gtPmRvd25sKTsKIAlpZiAocHBwLT5kZWJ1ZyAmIDEpCi0JCXByaW50ayhLRVJOX0VSUiAiUFBQOiBubyBtZW1vcnkgKGZyYWdtZW50KVxuIik7CisJCXByaW50ayhLRVJOX0VSUgkiUFBQOiBubyBtZW1vcnkJKGZyYWdtZW50KVxuIik7CiAJKytwcHAtPmRldi0+c3RhdHMudHhfZXJyb3JzOwogCSsrcHBwLT5ueHNlcTsKIAlyZXR1cm4gMTsJLyogYWJhbmRvbiB0aGUgZnJhbWUgKi8KQEAgLTE5ODYsMTkgKzIwOTgsMjcgQEAKICAqIENoYW5uZWwgaW50ZXJmYWNlLgogICovCiAKLS8qCi0gKiBDcmVhdGUgYSBuZXcsIHVuYXR0YWNoZWQgcHBwIGNoYW5uZWwuCi0gKi8KLWludAotcHBwX3JlZ2lzdGVyX2NoYW5uZWwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQorLyogQ3JlYXRlIGEgbmV3LCB1bmF0dGFjaGVkIHBwcCBjaGFubmVsLiAqLworaW50IHBwcF9yZWdpc3Rlcl9jaGFubmVsKHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbikKK3sKKwlyZXR1cm4gcHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucywgY2hhbik7Cit9CisKKy8qIENyZWF0ZSBhIG5ldywgdW5hdHRhY2hlZCBwcHAgY2hhbm5lbCBmb3Igc3BlY2lmaWVkIG5ldC4gKi8KK2ludCBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4pCiB7CiAJc3RydWN0IGNoYW5uZWwgKnBjaDsKKwlzdHJ1Y3QgcHBwX25ldCAqcG47CiAKIAlwY2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hhbm5lbCksIEdGUF9LRVJORUwpOwogCWlmICghcGNoKQogCQlyZXR1cm4gLUVOT01FTTsKKworCXBuID0gcHBwX3Blcm5ldChuZXQpOworCiAJcGNoLT5wcHAgPSBOVUxMOwogCXBjaC0+Y2hhbiA9IGNoYW47CisJcGNoLT5jaGFuX25ldCA9IG5ldDsKIAljaGFuLT5wcHAgPSBwY2g7CiAJaW5pdF9wcHBfZmlsZSgmcGNoLT5maWxlLCBDSEFOTkVMKTsKIAlwY2gtPmZpbGUuaGRybGVuID0gY2hhbi0+aGRybGVuOwpAQCAtMjAwOCwxMSArMjEyOCwxMyBAQAogCWluaXRfcndzZW0oJnBjaC0+Y2hhbl9zZW0pOwogCXNwaW5fbG9ja19pbml0KCZwY2gtPmRvd25sKTsKIAlyd2xvY2tfaW5pdCgmcGNoLT51cGwpOwotCXNwaW5fbG9ja19iaCgmYWxsX2NoYW5uZWxzX2xvY2spOwotCXBjaC0+ZmlsZS5pbmRleCA9ICsrbGFzdF9jaGFubmVsX2luZGV4OwotCWxpc3RfYWRkKCZwY2gtPmxpc3QsICZuZXdfY2hhbm5lbHMpOworCisJc3Bpbl9sb2NrX2JoKCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOworCXBjaC0+ZmlsZS5pbmRleCA9ICsrcG4tPmxhc3RfY2hhbm5lbF9pbmRleDsKKwlsaXN0X2FkZCgmcGNoLT5saXN0LCAmcG4tPm5ld19jaGFubmVscyk7CiAJYXRvbWljX2luYygmY2hhbm5lbF9jb3VudCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFsbF9jaGFubmVsc19sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG4tPmFsbF9jaGFubmVsc19sb2NrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMDUzLDkgKzIxNzUsMTEgQEAKIHBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoc3RydWN0IHBwcF9jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBjaGFubmVsICpwY2ggPSBjaGFuLT5wcHA7CisJc3RydWN0IHBwcF9uZXQgKnBuOwogCiAJaWYgKCFwY2gpCiAJCXJldHVybjsJCS8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwogCWNoYW4tPnBwcCA9IE5VTEw7CiAKIAkvKgpAQCAtMjA2OCw5ICsyMTkyLDEyIEBACiAJc3Bpbl91bmxvY2tfYmgoJnBjaC0+ZG93bmwpOwogCXVwX3dyaXRlKCZwY2gtPmNoYW5fc2VtKTsKIAlwcHBfZGlzY29ubmVjdF9jaGFubmVsKHBjaCk7Ci0Jc3Bpbl9sb2NrX2JoKCZhbGxfY2hhbm5lbHNfbG9jayk7CisKKwlwbiA9IHBwcF9wZXJuZXQocGNoLT5jaGFuX25ldCk7CisJc3Bpbl9sb2NrX2JoKCZwbi0+YWxsX2NoYW5uZWxzX2xvY2spOwogCWxpc3RfZGVsKCZwY2gtPmxpc3QpOwotCXNwaW5fdW5sb2NrX2JoKCZhbGxfY2hhbm5lbHNfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuLT5hbGxfY2hhbm5lbHNfbG9jayk7CisKIAlwY2gtPmZpbGUuZGVhZCA9IDE7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwY2gtPmZpbGUucndhaXQpOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwY2gtPmZpbGUucmVmY250KSkKQEAgLTIzOTUsOSArMjUyMiwxMCBAQAogICogdW5pdCA9PSAtMSBtZWFucyBhbGxvY2F0ZSBhIG5ldyBudW1iZXIuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcHBwICoKLXBwcF9jcmVhdGVfaW50ZXJmYWNlKGludCB1bml0LCBpbnQgKnJldHApCitwcHBfY3JlYXRlX2ludGVyZmFjZShzdHJ1Y3QgbmV0ICpuZXQsIGludCB1bml0LCBpbnQgKnJldHApCiB7CiAJc3RydWN0IHBwcCAqcHBwOworCXN0cnVjdCBwcHBfbmV0ICpwbjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgaTsKQEAgLTI0MDYsNiArMjUzNCw4IEBACiAJaWYgKCFkZXYpCiAJCWdvdG8gb3V0MTsKIAorCXBuID0gcHBwX3Blcm5ldChuZXQpOworCiAJcHBwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlwcHAtPmRldiA9IGRldjsKIAlwcHAtPm1ydSA9IFBQUF9NUlU7CkBAIC0yNDIxLDE3ICsyNTUxLDIzIEBACiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHBwLT5tcnEpOwogI2VuZGlmIC8qIENPTkZJR19QUFBfTVVMVElMSU5LICovCiAKKwkvKgorCSAqIGRydW0gcm9sbDogZG9uJ3QgZm9yZ2V0IHRvIHNldAorCSAqIHRoZSBuZXQgZGV2aWNlIGlzIGJlbG9uZyB0bworCSAqLworCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKKwogCXJldCA9IC1FRVhJU1Q7Ci0JbXV0ZXhfbG9jaygmYWxsX3BwcF9tdXRleCk7CisJbXV0ZXhfbG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCiAJaWYgKHVuaXQgPCAwKSB7Ci0JCXVuaXQgPSB1bml0X2dldCgmcHBwX3VuaXRzX2lkciwgcHBwKTsKKwkJdW5pdCA9IHVuaXRfZ2V0KCZwbi0+dW5pdHNfaWRyLCBwcHApOwogCQlpZiAodW5pdCA8IDApIHsKIAkJCSpyZXRwID0gdW5pdDsKIAkJCWdvdG8gb3V0MjsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmICh1bml0X2ZpbmQoJnBwcF91bml0c19pZHIsIHVuaXQpKQorCQlpZiAodW5pdF9maW5kKCZwbi0+dW5pdHNfaWRyLCB1bml0KSkKIAkJCWdvdG8gb3V0MjsgLyogdW5pdCBhbHJlYWR5IGV4aXN0cyAqLwogCQkvKgogCQkgKiBpZiBjYWxsZXIgbmVlZCBhIHNwZWNpZmllZCB1bml0IG51bWJlcgpAQCAtMjQ0Miw3ICsyNTc4LDcgQEAKIAkJICogZmFpciBidXQgYXQgbGVhc3QgcHBwZCB3aWxsIGFzayB1cyB0byBhbGxvY2F0ZQogCQkgKiBuZXcgdW5pdCBpbiB0aGlzIGNhc2Ugc28gdXNlciBpcyBoYXBweSA6KQogCQkgKi8KLQkJdW5pdCA9IHVuaXRfc2V0KCZwcHBfdW5pdHNfaWRyLCBwcHAsIHVuaXQpOworCQl1bml0ID0gdW5pdF9zZXQoJnBuLT51bml0c19pZHIsIHBwcCwgdW5pdCk7CiAJCWlmICh1bml0IDwgMCkKIAkJCWdvdG8gb3V0MjsKIAl9CkBAIC0yNDUzLDIwICsyNTg5LDIyIEBACiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKLQkJdW5pdF9wdXQoJnBwcF91bml0c19pZHIsIHVuaXQpOworCQl1bml0X3B1dCgmcG4tPnVuaXRzX2lkciwgdW5pdCk7CiAJCXByaW50ayhLRVJOX0VSUiAiUFBQOiBjb3VsZG4ndCByZWdpc3RlciBkZXZpY2UgJXMgKCVkKVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KIAorCXBwcC0+cHBwX25ldCA9IG5ldDsKKwogCWF0b21pY19pbmMoJnBwcF91bml0X2NvdW50KTsKLQltdXRleF91bmxvY2soJmFsbF9wcHBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCiAJKnJldHAgPSAwOwogCXJldHVybiBwcHA7CiAKIG91dDI6Ci0JbXV0ZXhfdW5sb2NrKCZhbGxfcHBwX211dGV4KTsKKwltdXRleF91bmxvY2soJnBuLT5hbGxfcHBwX211dGV4KTsKIAlmcmVlX25ldGRldihkZXYpOwogb3V0MToKIAkqcmV0cCA9IHJldDsKQEAgLTI0OTIsNyArMjYzMCwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBwcHBfc2h1dGRvd25faW50ZXJmYWNlKHN0cnVjdCBwcHAgKnBwcCkKIHsKLQltdXRleF9sb2NrKCZhbGxfcHBwX211dGV4KTsKKwlzdHJ1Y3QgcHBwX25ldCAqcG47CisKKwlwbiA9IHBwcF9wZXJuZXQocHBwLT5wcHBfbmV0KTsKKwltdXRleF9sb2NrKCZwbi0+YWxsX3BwcF9tdXRleCk7CisKIAkvKiBUaGlzIHdpbGwgY2FsbCBkZXZfY2xvc2UoKSBmb3IgdXMuICovCiAJcHBwX2xvY2socHBwKTsKIAlpZiAoIXBwcC0+Y2xvc2luZykgewpAQCAtMjUwMiwxMSArMjY0NCwxMiBAQAogCX0gZWxzZQogCQlwcHBfdW5sb2NrKHBwcCk7CiAKLQl1bml0X3B1dCgmcHBwX3VuaXRzX2lkciwgcHBwLT5maWxlLmluZGV4KTsKKwl1bml0X3B1dCgmcG4tPnVuaXRzX2lkciwgcHBwLT5maWxlLmluZGV4KTsKIAlwcHAtPmZpbGUuZGVhZCA9IDE7CiAJcHBwLT5vd25lciA9IE5VTEw7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcHAtPmZpbGUucndhaXQpOwotCW11dGV4X3VubG9jaygmYWxsX3BwcF9tdXRleCk7CisKKwltdXRleF91bmxvY2soJnBuLT5hbGxfcHBwX211dGV4KTsKIH0KIAogLyoKQEAgLTI1NDMsOCArMjY4Niw3IEBACiAJcHBwLT5hY3RpdmVfZmlsdGVyID0gTlVMTDsKICNlbmRpZiAvKiBDT05GSUdfUFBQX0ZJTFRFUiAqLwogCi0JaWYgKHBwcC0+eG1pdF9wZW5kaW5nKQotCQlrZnJlZV9za2IocHBwLT54bWl0X3BlbmRpbmcpOworCWtmcmVlX3NrYihwcHAtPnhtaXRfcGVuZGluZyk7CiAKIAlmcmVlX25ldGRldihwcHAtPmRldik7CiB9CkBAIC0yNTU0LDkgKzI2OTYsOSBAQAogICogVGhlIGNhbGxlciBzaG91bGQgaGF2ZSBsb2NrZWQgdGhlIGFsbF9wcHBfbXV0ZXguCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcHBwICoKLXBwcF9maW5kX3VuaXQoaW50IHVuaXQpCitwcHBfZmluZF91bml0KHN0cnVjdCBwcHBfbmV0ICpwbiwgaW50IHVuaXQpCiB7Ci0JcmV0dXJuIHVuaXRfZmluZCgmcHBwX3VuaXRzX2lkciwgdW5pdCk7CisJcmV0dXJuIHVuaXRfZmluZCgmcG4tPnVuaXRzX2lkciwgdW5pdCk7CiB9CiAKIC8qCkBAIC0yNTY4LDIwICsyNzEwLDIyIEBACiAgKiB3aGVuIHdlIGhhdmUgYSBsb3Qgb2YgY2hhbm5lbHMgaW4gdXNlLgogICovCiBzdGF0aWMgc3RydWN0IGNoYW5uZWwgKgotcHBwX2ZpbmRfY2hhbm5lbChpbnQgdW5pdCkKK3BwcF9maW5kX2NoYW5uZWwoc3RydWN0IHBwcF9uZXQgKnBuLCBpbnQgdW5pdCkKIHsKIAlzdHJ1Y3QgY2hhbm5lbCAqcGNoOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZuZXdfY2hhbm5lbHMsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJnBuLT5uZXdfY2hhbm5lbHMsIGxpc3QpIHsKIAkJaWYgKHBjaC0+ZmlsZS5pbmRleCA9PSB1bml0KSB7Ci0JCQlsaXN0X21vdmUoJnBjaC0+bGlzdCwgJmFsbF9jaGFubmVscyk7CisJCQlsaXN0X21vdmUoJnBjaC0+bGlzdCwgJnBuLT5hbGxfY2hhbm5lbHMpOwogCQkJcmV0dXJuIHBjaDsKIAkJfQogCX0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjaCwgJmFsbF9jaGFubmVscywgbGlzdCkgeworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZwbi0+YWxsX2NoYW5uZWxzLCBsaXN0KSB7CiAJCWlmIChwY2gtPmZpbGUuaW5kZXggPT0gdW5pdCkKIAkJCXJldHVybiBwY2g7CiAJfQorCiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI1OTIsMTEgKzI3MzYsMTQgQEAKIHBwcF9jb25uZWN0X2NoYW5uZWwoc3RydWN0IGNoYW5uZWwgKnBjaCwgaW50IHVuaXQpCiB7CiAJc3RydWN0IHBwcCAqcHBwOworCXN0cnVjdCBwcHBfbmV0ICpwbjsKIAlpbnQgcmV0ID0gLUVOWElPOwogCWludCBoZHJsZW47CiAKLQltdXRleF9sb2NrKCZhbGxfcHBwX211dGV4KTsKLQlwcHAgPSBwcHBfZmluZF91bml0KHVuaXQpOworCXBuID0gcHBwX3Blcm5ldChwY2gtPmNoYW5fbmV0KTsKKworCW11dGV4X2xvY2soJnBuLT5hbGxfcHBwX211dGV4KTsKKwlwcHAgPSBwcHBfZmluZF91bml0KHBuLCB1bml0KTsKIAlpZiAoIXBwcCkKIAkJZ290byBvdXQ7CiAJd3JpdGVfbG9ja19iaCgmcGNoLT51cGwpOwpAQCAtMjYyMCw3ICsyNzY3LDcgQEAKICBvdXRsOgogCXdyaXRlX3VubG9ja19iaCgmcGNoLT51cGwpOwogIG91dDoKLQltdXRleF91bmxvY2soJmFsbF9wcHBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmcG4tPmFsbF9wcHBfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI2NzcsNyArMjgyNCw3IEBACiAJdW5yZWdpc3Rlcl9jaHJkZXYoUFBQX01BSk9SLCAicHBwIik7CiAJZGV2aWNlX2Rlc3Ryb3kocHBwX2NsYXNzLCBNS0RFVihQUFBfTUFKT1IsIDApKTsKIAljbGFzc19kZXN0cm95KHBwcF9jbGFzcyk7Ci0JaWRyX2Rlc3Ryb3koJnBwcF91bml0c19pZHIpOworCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UocHBwX25ldF9pZCwgJnBwcF9uZXRfb3BzKTsKIH0KIAogLyoKQEAgLTI3NDMsNiArMjg5MCw3IEBACiBtb2R1bGVfaW5pdChwcHBfaW5pdCk7CiBtb2R1bGVfZXhpdChwcHBfY2xlYW51cCk7CiAKK0VYUE9SVF9TWU1CT0wocHBwX3JlZ2lzdGVyX25ldF9jaGFubmVsKTsKIEVYUE9SVF9TWU1CT0wocHBwX3JlZ2lzdGVyX2NoYW5uZWwpOwogRVhQT1JUX1NZTUJPTChwcHBfdW5yZWdpc3Rlcl9jaGFubmVsKTsKIEVYUE9SVF9TWU1CT0wocHBwX2NoYW5uZWxfaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKaW5kZXggMWU4OTJiNy4uZDJmYTJkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYworKysgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCkBAIC0yMDYsNiArMjA2LDcgQEAKIHsKIAlzdHJ1Y3Qgc3luY3BwcCAqYXA7CiAJaW50IGVycjsKKwlpbnQgc3BlZWQ7CiAKIAlpZiAodHR5LT5vcHMtPndyaXRlID09IE5VTEwpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTIzNCw2ICsyMzUsOCBAQAogCWFwLT5jaGFuLm9wcyA9ICZzeW5jX29wczsKIAlhcC0+Y2hhbi5tdHUgPSBQUFBfTVJVOwogCWFwLT5jaGFuLmhkcmxlbiA9IDI7CS8qIGZvciBBL0MgYnl0ZXMgKi8KKwlzcGVlZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisJYXAtPmNoYW4uc3BlZWQgPSBzcGVlZDsKIAllcnIgPSBwcHBfcmVnaXN0ZXJfY2hhbm5lbCgmYXAtPmNoYW4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0yODEsOCArMjg0LDcgQEAKIAogCXBwcF91bnJlZ2lzdGVyX2NoYW5uZWwoJmFwLT5jaGFuKTsKIAlza2JfcXVldWVfcHVyZ2UoJmFwLT5ycXVldWUpOwotCWlmIChhcC0+dHBrdCkKLQkJa2ZyZWVfc2tiKGFwLT50cGt0KTsKKwlrZnJlZV9za2IoYXAtPnRwa3QpOwogCWtmcmVlKGFwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb2UuYyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKaW5kZXggYzIyYjMwNS4uZjAwMzFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb2UuYworKysgYi9kcml2ZXJzL25ldC9wcHBvZS5jCkBAIC03OCwzOCArNzgsNzMgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNkZWZpbmUgUFBQT0VfSEFTSF9CSVRTIDQKLSNkZWZpbmUgUFBQT0VfSEFTSF9TSVpFICgxPDxQUFBPRV9IQVNIX0JJVFMpCi0KLXN0YXRpYyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzOworI2RlZmluZSBQUFBPRV9IQVNIX1NJWkUgKDEgPDwgUFBQT0VfSEFTSF9CSVRTKQorI2RlZmluZSBQUFBPRV9IQVNIX01BU0sJKFBQUE9FX0hBU0hfU0laRSAtIDEpCiAKIHN0YXRpYyBpbnQgcHBwb2VfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogc3RhdGljIGludCBwcHBvZV94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgaW50IF9fcHBwb2VfeG1pdChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwcHBvZV9vcHM7Ci1zdGF0aWMgREVGSU5FX1JXTE9DSyhwcHBvZV9oYXNoX2xvY2spOwotCiBzdGF0aWMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wczsKIAorLyogcGVyLW5ldCBwcml2YXRlIGRhdGEgZm9yIHRoaXMgbW9kdWxlICovCitzdGF0aWMgaW50IHBwcG9lX25ldF9pZDsKK3N0cnVjdCBwcHBvZV9uZXQgeworCS8qCisJICogd2UgY291bGQgdXNlIF9zaW5nbGVfIGhhc2ggdGFibGUgZm9yIGFsbAorCSAqIG5ldHMgYnkgaW5qZWN0aW5nIG5ldCBpZCBpbnRvIHRoZSBoYXNoIGJ1dAorCSAqIGl0IHdvdWxkIGluY3JlYXNlIGhhc2ggY2hhaW5zIGFuZCBhZGQKKwkgKiBhIGZldyBhZGRpdGlvbmFsIG1hdGggY29tcGFyYXRpb25zIG1lc3N5CisJICogYXMgd2VsbCwgbW9yZW92ZXIgaW4gY2FzZSBvZiBTTVAgbGVzcyBsb2NraW5nCisJICogY29udHJvdmVyc3kgaGVyZQorCSAqLworCXN0cnVjdCBwcHBveF9zb2NrICpoYXNoX3RhYmxlW1BQUE9FX0hBU0hfU0laRV07CisJcndsb2NrX3QgaGFzaF9sb2NrOworfTsKKworLyogdG8gZWxpbWluYXRlIGEgcmFjZSBidHcgcHBwb2VfZmx1c2hfZGV2IGFuZCBwcHBvZV9yZWxlYXNlICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZsdXNoX2xvY2spOworCisvKgorICogUFBQb0UgY291bGQgYmUgaW4gdGhlIGZvbGxvd2luZyBzdGFnZXM6CisgKiAxKSBEaXNjb3Zlcnkgc3RhZ2UgKHRvIG9idGFpbiByZW1vdGUgTUFDIGFuZCBTZXNzaW9uIElEKQorICogMikgU2Vzc2lvbiBzdGFnZSAoTUFDIGFuZCBTSUQgYXJlIGtub3duKQorICoKKyAqIEV0aGVybmV0IGZyYW1lcyBoYXZlIGEgc3BlY2lhbCB0YWcgZm9yIHRoaXMgYnV0CisgKiB3ZSB1c2Ugc2ltcGxpZXIgYXBwcm9hY2ggYmFzZWQgb24gc2Vzc2lvbiBpZAorICovCitzdGF0aWMgaW5saW5lIGJvb2wgc3RhZ2Vfc2Vzc2lvbihfX2JlMTYgc2lkKQoreworCXJldHVybiBzaWQgIT0gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2VfbmV0ICpwcHBvZV9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCUJVR19PTighbmV0KTsKKworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNtcF8yX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIHN0cnVjdCBwcHBvZV9hZGRyICpiKQogewotCXJldHVybiAoYS0+c2lkID09IGItPnNpZCAmJgotCQkobWVtY21wKGEtPnJlbW90ZSwgYi0+cmVtb3RlLCBFVEhfQUxFTikgPT0gMCkpOworCXJldHVybiBhLT5zaWQgPT0gYi0+c2lkICYmICFtZW1jbXAoYS0+cmVtb3RlLCBiLT5yZW1vdGUsIEVUSF9BTEVOKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY21wX2FkZHIoc3RydWN0IHBwcG9lX2FkZHIgKmEsIF9fYmUxNiBzaWQsIGNoYXIgKmFkZHIpCiB7Ci0JcmV0dXJuIChhLT5zaWQgPT0gc2lkICYmCi0JCShtZW1jbXAoYS0+cmVtb3RlLGFkZHIsRVRIX0FMRU4pID09IDApKTsKKwlyZXR1cm4gYS0+c2lkID09IHNpZCAmJiAhbWVtY21wKGEtPnJlbW90ZSwgYWRkciwgRVRIX0FMRU4pOwogfQogCi0jaWYgOCVQUFBPRV9IQVNIX0JJVFMKKyNpZiA4ICUgUFBQT0VfSEFTSF9CSVRTCiAjZXJyb3IgOCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgUFBQT0VfSEFTSF9CSVRTCiAjZW5kaWYKIApAQCAtMTE4LDY5ICsxNTMsNzEgQEAKIAl1bnNpZ25lZCBjaGFyIGhhc2ggPSAwOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpID0gMCA7IGkgPCBFVEhfQUxFTiA7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQloYXNoIF49IGFkZHJbaV07Ci0JfQotCWZvciAoaSA9IDAgOyBpIDwgc2l6ZW9mKHNpZF90KSo4IDsgaSArPSA4ICl7Ci0JCWhhc2ggXj0gKF9fZm9yY2UgX191MzIpc2lkPj5pOwotCX0KLQlmb3IgKGkgPSA4IDsgKGk+Pj0xKSA+PSBQUFBPRV9IQVNIX0JJVFMgOyApIHsKLQkJaGFzaCBePSBoYXNoPj5pOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNpZF90KSAqIDg7IGkgKz0gOCkKKwkJaGFzaCBePSAoX19mb3JjZSBfX3UzMilzaWQgPj4gaTsKKwlmb3IgKGkgPSA4OyAoaSA+Pj0gMSkgPj0gUFBQT0VfSEFTSF9CSVRTOykKKwkJaGFzaCBePSBoYXNoID4+IGk7CiAKLQlyZXR1cm4gaGFzaCAmICggUFBQT0VfSEFTSF9TSVpFIC0gMSApOworCXJldHVybiBoYXNoICYgUFBQT0VfSEFTSF9NQVNLOwogfQogCi0vKiB6ZXJvZWQgYmVjYXVzZSBpdHMgaW4gLmJzcyAqLwotc3RhdGljIHN0cnVjdCBwcHBveF9zb2NrICppdGVtX2hhc2hfdGFibGVbUFBQT0VfSEFTSF9TSVpFXTsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiAgU2V0L2dldC9kZWxldGUvcmVoYXNoIGl0ZW1zICAoaW50ZXJuYWwgdmVyc2lvbnMpCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZ2V0X2l0ZW0oX19iZTE2IHNpZCwgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCitzdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZ2V0X2l0ZW0oc3RydWN0IHBwcG9lX25ldCAqcG4sIF9fYmUxNiBzaWQsCisJCQkJdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCiB7CiAJaW50IGhhc2ggPSBoYXNoX2l0ZW0oc2lkLCBhZGRyKTsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcmV0OwogCi0JcmV0ID0gaXRlbV9oYXNoX3RhYmxlW2hhc2hdOworCXJldCA9IHBuLT5oYXNoX3RhYmxlW2hhc2hdOworCXdoaWxlIChyZXQpIHsKKwkJaWYgKGNtcF9hZGRyKCZyZXQtPnBwcG9lX3BhLCBzaWQsIGFkZHIpICYmCisJCSAgICByZXQtPnBwcG9lX2lmaW5kZXggPT0gaWZpbmRleCkKKwkJCXJldHVybiByZXQ7CiAKLQl3aGlsZSAocmV0ICYmICEoY21wX2FkZHIoJnJldC0+cHBwb2VfcGEsIHNpZCwgYWRkcikgJiYgcmV0LT5wcHBvZV9pZmluZGV4ID09IGlmaW5kZXgpKQogCQlyZXQgPSByZXQtPm5leHQ7CisJfQogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBfX3NldF9pdGVtKHN0cnVjdCBwcHBveF9zb2NrICpwbykKK3N0YXRpYyBpbnQgX19zZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgc3RydWN0IHBwcG94X3NvY2sgKnBvKQogewogCWludCBoYXNoID0gaGFzaF9pdGVtKHBvLT5wcHBvZV9wYS5zaWQsIHBvLT5wcHBvZV9wYS5yZW1vdGUpOwogCXN0cnVjdCBwcHBveF9zb2NrICpyZXQ7CiAKLQlyZXQgPSBpdGVtX2hhc2hfdGFibGVbaGFzaF07CisJcmV0ID0gcG4tPmhhc2hfdGFibGVbaGFzaF07CiAJd2hpbGUgKHJldCkgewotCQlpZiAoY21wXzJfYWRkcigmcmV0LT5wcHBvZV9wYSwgJnBvLT5wcHBvZV9wYSkgJiYgcmV0LT5wcHBvZV9pZmluZGV4ID09IHBvLT5wcHBvZV9pZmluZGV4KQorCQlpZiAoY21wXzJfYWRkcigmcmV0LT5wcHBvZV9wYSwgJnBvLT5wcHBvZV9wYSkgJiYKKwkJICAgIHJldC0+cHBwb2VfaWZpbmRleCA9PSBwby0+cHBwb2VfaWZpbmRleCkKIAkJCXJldHVybiAtRUFMUkVBRFk7CiAKIAkJcmV0ID0gcmV0LT5uZXh0OwogCX0KIAotCXBvLT5uZXh0ID0gaXRlbV9oYXNoX3RhYmxlW2hhc2hdOwotCWl0ZW1faGFzaF90YWJsZVtoYXNoXSA9IHBvOworCXBvLT5uZXh0ID0gcG4tPmhhc2hfdGFibGVbaGFzaF07CisJcG4tPmhhc2hfdGFibGVbaGFzaF0gPSBwbzsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZGVsZXRlX2l0ZW0oX19iZTE2IHNpZCwgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCitzdGF0aWMgc3RydWN0IHBwcG94X3NvY2sgKl9fZGVsZXRlX2l0ZW0oc3RydWN0IHBwcG9lX25ldCAqcG4sIF9fYmUxNiBzaWQsCisJCQkJCWNoYXIgKmFkZHIsIGludCBpZmluZGV4KQogewogCWludCBoYXNoID0gaGFzaF9pdGVtKHNpZCwgYWRkcik7CiAJc3RydWN0IHBwcG94X3NvY2sgKnJldCwgKipzcmM7CiAKLQlyZXQgPSBpdGVtX2hhc2hfdGFibGVbaGFzaF07Ci0Jc3JjID0gJml0ZW1faGFzaF90YWJsZVtoYXNoXTsKKwlyZXQgPSBwbi0+aGFzaF90YWJsZVtoYXNoXTsKKwlzcmMgPSAmcG4tPmhhc2hfdGFibGVbaGFzaF07CiAKIAl3aGlsZSAocmV0KSB7Ci0JCWlmIChjbXBfYWRkcigmcmV0LT5wcHBvZV9wYSwgc2lkLCBhZGRyKSAmJiByZXQtPnBwcG9lX2lmaW5kZXggPT0gaWZpbmRleCkgeworCQlpZiAoY21wX2FkZHIoJnJldC0+cHBwb2VfcGEsIHNpZCwgYWRkcikgJiYKKwkJICAgIHJldC0+cHBwb2VfaWZpbmRleCA9PSBpZmluZGV4KSB7CiAJCQkqc3JjID0gcmV0LT5uZXh0OwogCQkJYnJlYWs7CiAJCX0KQEAgLTE5Nyw0NiArMjM0LDU0IEBACiAgKiAgU2V0L2dldC9kZWxldGUvcmVoYXNoIGl0ZW1zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbShfX2JlMTYgc2lkLAotCQkJCQkgdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbShzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgX19iZTE2IHNpZCwKKwkJCQkJdW5zaWduZWQgY2hhciAqYWRkciwgaW50IGlmaW5kZXgpCiB7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOwogCi0JcmVhZF9sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOwotCXBvID0gX19nZXRfaXRlbShzaWQsIGFkZHIsIGlmaW5kZXgpOworCXJlYWRfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJcG8gPSBfX2dldF9pdGVtKHBuLCBzaWQsIGFkZHIsIGlmaW5kZXgpOwogCWlmIChwbykKIAkJc29ja19ob2xkKHNrX3BwcG94KHBvKSk7Ci0JcmVhZF91bmxvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7CisJcmVhZF91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCiAJcmV0dXJuIHBvOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbV9ieV9hZGRyKHN0cnVjdCBzb2NrYWRkcl9wcHBveCAqc3ApCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcHBveF9zb2NrICpnZXRfaXRlbV9ieV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9wcHBveCAqc3ApCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKwlzdHJ1Y3QgcHBwb3hfc29jayAqcHBwb3hfc29jazsKKwogCWludCBpZmluZGV4OwogCi0JZGV2ID0gZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgc3AtPnNhX2FkZHIucHBwb2UuZGV2KTsKLQlpZighZGV2KQorCWRldiA9IGRldl9nZXRfYnlfbmFtZShuZXQsIHNwLT5zYV9hZGRyLnBwcG9lLmRldik7CisJaWYgKCFkZXYpCiAJCXJldHVybiBOVUxMOworCiAJaWZpbmRleCA9IGRldi0+aWZpbmRleDsKKwlwbiA9IG5ldF9nZW5lcmljKG5ldCwgcHBwb2VfbmV0X2lkKTsKKwlwcHBveF9zb2NrID0gZ2V0X2l0ZW0ocG4sIHNwLT5zYV9hZGRyLnBwcG9lLnNpZCwKKwkJCQlzcC0+c2FfYWRkci5wcHBvZS5yZW1vdGUsIGlmaW5kZXgpOwogCWRldl9wdXQoZGV2KTsKLQlyZXR1cm4gZ2V0X2l0ZW0oc3AtPnNhX2FkZHIucHBwb2Uuc2lkLCBzcC0+c2FfYWRkci5wcHBvZS5yZW1vdGUsIGlmaW5kZXgpOworCisJcmV0dXJuIHBwcG94X3NvY2s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBwcG94X3NvY2sgKmRlbGV0ZV9pdGVtKF9fYmUxNiBzaWQsIGNoYXIgKmFkZHIsIGludCBpZmluZGV4KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb3hfc29jayAqZGVsZXRlX2l0ZW0oc3RydWN0IHBwcG9lX25ldCAqcG4sIF9fYmUxNiBzaWQsCisJCQkJCWNoYXIgKmFkZHIsIGludCBpZmluZGV4KQogewogCXN0cnVjdCBwcHBveF9zb2NrICpyZXQ7CiAKLQl3cml0ZV9sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOwotCXJldCA9IF9fZGVsZXRlX2l0ZW0oc2lkLCBhZGRyLCBpZmluZGV4KTsKLQl3cml0ZV91bmxvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7CisJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJcmV0ID0gX19kZWxldGVfaXRlbShwbiwgc2lkLCBhZGRyLCBpZmluZGV4KTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiAgSGFuZGxlciBmb3IgZGV2aWNlIGV2ZW50cy4KQEAgLTI0NiwyNSArMjkxLDMzIEBACiAKIHN0YXRpYyB2b2lkIHBwcG9lX2ZsdXNoX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWludCBoYXNoOworCXN0cnVjdCBwcHBvZV9uZXQgKnBuOworCWludCBpOworCiAJQlVHX09OKGRldiA9PSBOVUxMKTsKIAotCXdyaXRlX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7Ci0JZm9yIChoYXNoID0gMDsgaGFzaCA8IFBQUE9FX0hBU0hfU0laRTsgaGFzaCsrKSB7Ci0JCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IGl0ZW1faGFzaF90YWJsZVtoYXNoXTsKKwlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpOworCWlmICghcG4pIC8qIGFscmVhZHkgZnJlZWQgKi8KKwkJcmV0dXJuOworCisJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IFBQUE9FX0hBU0hfU0laRTsgaSsrKSB7CisJCXN0cnVjdCBwcHBveF9zb2NrICpwbyA9IHBuLT5oYXNoX3RhYmxlW2ldOwogCiAJCXdoaWxlIChwbyAhPSBOVUxMKSB7Ci0JCQlzdHJ1Y3Qgc29jayAqc2sgPSBza19wcHBveChwbyk7CisJCQlzdHJ1Y3Qgc29jayAqc2s7CiAJCQlpZiAocG8tPnBwcG9lX2RldiAhPSBkZXYpIHsKIAkJCQlwbyA9IHBvLT5uZXh0OwogCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJc2sgPSBza19wcHBveChwbyk7CisJCQlzcGluX2xvY2soJmZsdXNoX2xvY2spOwogCQkJcG8tPnBwcG9lX2RldiA9IE5VTEw7CisJCQlzcGluX3VubG9jaygmZmx1c2hfbG9jayk7CiAJCQlkZXZfcHV0KGRldik7CiAKLQogCQkJLyogV2UgYWx3YXlzIGdyYWIgdGhlIHNvY2tldCBsb2NrLCBmb2xsb3dlZCBieSB0aGUKLQkJCSAqIHBwcG9lX2hhc2hfbG9jaywgaW4gdGhhdCBvcmRlci4gIFNpbmNlIHdlIHNob3VsZAorCQkJICogaGFzaF9sb2NrLCBpbiB0aGF0IG9yZGVyLiAgU2luY2Ugd2Ugc2hvdWxkCiAJCQkgKiBob2xkIHRoZSBzb2NrIGxvY2sgd2hpbGUgZG9pbmcgYW55IHVuYmluZGluZywKIAkJCSAqIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgbG9jayB3ZSdyZSBob2xkaW5nLgogCQkJICogSG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgc29jayBzbyBpdCBkb2Vzbid0IGRpc2FwcGVhcgpAQCAtMjczLDcgKzMyNiw3IEBACiAKIAkJCXNvY2tfaG9sZChzayk7CiAKLQkJCXdyaXRlX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwkJCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAJCQlsb2NrX3NvY2soc2spOwogCiAJCQlpZiAoc2stPnNrX3N0YXRlICYgKFBQUE9YX0NPTk5FQ1RFRCB8IFBQUE9YX0JPVU5EKSkgewpAQCAtMjg5LDIwICszNDIsMTcgQEAKIAkJCSAqIFdoaWxlIHRoZSBsb2NrIHdhcyBkcm9wcGVkIHRoZSBjaGFpbiBjb250ZW50cyBtYXkKIAkJCSAqIGhhdmUgY2hhbmdlZC4KIAkJCSAqLwotCQkJd3JpdGVfbG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKLQkJCXBvID0gaXRlbV9oYXNoX3RhYmxlW2hhc2hdOworCQkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJCQlwbyA9IHBuLT5oYXNoX3RhYmxlW2ldOwogCQl9CiAJfQotCXdyaXRlX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHBwcG9lX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBwdHI7Ci0KLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKLQkJcmV0dXJuIE5PVElGWV9ET05FOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilwdHI7CiAKIAkvKiBPbmx5IGxvb2sgYXQgc29ja2V0cyB0aGF0IGFyZSB1c2luZyB0aGlzIHNwZWNpZmljIGRldmljZS4gKi8KIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC0zMjQsMTIgKzM3NCwxMCBAQAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBwcG9lX25vdGlmaWVyID0gewogCS5ub3RpZmllcl9jYWxsID0gcHBwb2VfZGV2aWNlX2V2ZW50LAogfTsKIAotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRG8gdGhlIHJlYWwgd29yayBvZiByZWNlaXZpbmcgYSBQUFBvRSBTZXNzaW9uIGZyYW1lLgpAQCAtMzQzLDggKzM5MSw4IEBACiAJaWYgKHNrLT5za19zdGF0ZSAmIFBQUE9YX0JPVU5EKSB7CiAJCXBwcF9pbnB1dCgmcG8tPmNoYW4sIHNrYik7CiAJfSBlbHNlIGlmIChzay0+c2tfc3RhdGUgJiBQUFBPWF9SRUxBWSkgewotCQlyZWxheV9wbyA9IGdldF9pdGVtX2J5X2FkZHIoJnBvLT5wcHBvZV9yZWxheSk7Ci0KKwkJcmVsYXlfcG8gPSBnZXRfaXRlbV9ieV9hZGRyKGRldl9uZXQocG8tPnBwcG9lX2RldiksCisJCQkJCQkmcG8tPnBwcG9lX3JlbGF5KTsKIAkJaWYgKHJlbGF5X3BvID09IE5VTEwpCiAJCQlnb3RvIGFib3J0X2tmcmVlOwogCkBAIC0zNzMsMjIgKzQyMSwxOCBAQAogICogUmVjZWl2ZSB3cmFwcGVyIGNhbGxlZCBpbiBCSCBjb250ZXh0LgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcHBwb2VfcmN2KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LAotCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKLQorc3RhdGljIGludCBwcHBvZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CiAJc3RydWN0IHBwcG9lX2hkciAqcGg7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvOworCXN0cnVjdCBwcHBvZV9uZXQgKnBuOwogCWludCBsZW47CiAKLQlpZiAoIShza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkpCisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGRldl9uZXQoZGV2KSAhPSAmaW5pdF9uZXQpCi0JCWdvdG8gZHJvcDsKLQogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSkpCiAJCWdvdG8gZHJvcDsKIApAQCAtNDAyLDcgKzQ0Niw4IEBACiAJaWYgKHBza2JfdHJpbV9yY3N1bShza2IsIGxlbikpCiAJCWdvdG8gZHJvcDsKIAotCXBvID0gZ2V0X2l0ZW0ocGgtPnNpZCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgZGV2LT5pZmluZGV4KTsKKwlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpOworCXBvID0gZ2V0X2l0ZW0ocG4sIHBoLT5zaWQsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIGRldi0+aWZpbmRleCk7CiAJaWYgKCFwbykKIAkJZ290byBkcm9wOwogCkBAIC00MjAsMTkgKzQ2NSwxNiBAQAogICogVGhpcyBpcyBzb2xlbHkgZm9yIGRldGVjdGlvbiBvZiBQQURUIGZyYW1lcwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyBpbnQgcHBwb2VfZGlzY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgc3RydWN0IHBhY2tldF90eXBlICpwdCwKLQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQorc3RhdGljIGludCBwcHBvZV9kaXNjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiAKIHsKIAlzdHJ1Y3QgcHBwb2VfaGRyICpwaDsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87CisJc3RydWN0IHBwcG9lX25ldCAqcG47CiAKLQlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKLQkJZ290byBhYm9ydDsKLQotCWlmICghKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSkKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKIAkJZ290byBvdXQ7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpKQpAQCAtNDQyLDcgKzQ4NCw4IEBACiAJaWYgKHBoLT5jb2RlICE9IFBBRFRfQ09ERSkKIAkJZ290byBhYm9ydDsKIAotCXBvID0gZ2V0X2l0ZW0ocGgtPnNpZCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSwgZGV2LT5pZmluZGV4KTsKKwlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KGRldikpOworCXBvID0gZ2V0X2l0ZW0ocG4sIHBoLT5zaWQsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UsIGRldi0+aWZpbmRleCk7CiAJaWYgKHBvKSB7CiAJCXN0cnVjdCBzb2NrICpzayA9IHNrX3BwcG94KHBvKTsKIApAQCAtNDcwLDE3ICs1MTMsMTcgQEAKIAlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7IC8qIExpZXMuLi4gOi0pICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwb2VzX3B0eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBfU0VTKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwb2VzX3B0eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9QUFBfU0VTKSwKIAkuZnVuYwk9IHBwcG9lX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwb2VkX3B0eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBfRElTQyksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBwcG9lZF9wdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX0RJU0MpLAogCS5mdW5jCT0gcHBwb2VfZGlzY19yY3YsCiB9OwogCi1zdGF0aWMgc3RydWN0IHByb3RvIHBwcG9lX3NrX3Byb3RvID0geworc3RhdGljIHN0cnVjdCBwcm90byBwcHBvZV9za19wcm90byBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCSAgPSAiUFBQT0UiLAogCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCiAJLm9ial9zaXplID0gc2l6ZW9mKHN0cnVjdCBwcHBveF9zb2NrKSwKQEAgLTQ5MywzOCArNTM2LDM3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgcHBwb2VfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaykKIHsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCXN0cnVjdCBzb2NrICpzazsKIAogCXNrID0gc2tfYWxsb2MobmV0LCBQRl9QUFBPWCwgR0ZQX0tFUk5FTCwgJnBwcG9lX3NrX3Byb3RvKTsKIAlpZiAoIXNrKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CiAKLQlzb2NrLT5zdGF0ZSA9IFNTX1VOQ09OTkVDVEVEOwotCXNvY2stPm9wcyAgID0gJnBwcG9lX29wczsKKwlzb2NrLT5zdGF0ZQk9IFNTX1VOQ09OTkVDVEVEOworCXNvY2stPm9wcwk9ICZwcHBvZV9vcHM7CiAKLQlzay0+c2tfYmFja2xvZ19yY3YgPSBwcHBvZV9yY3ZfY29yZTsKLQlzay0+c2tfc3RhdGUJICAgPSBQUFBPWF9OT05FOwotCXNrLT5za190eXBlCSAgID0gU09DS19TVFJFQU07Ci0Jc2stPnNrX2ZhbWlseQkgICA9IFBGX1BQUE9YOwotCXNrLT5za19wcm90b2NvbAkgICA9IFBYX1BST1RPX09FOworCXNrLT5za19iYWNrbG9nX3Jjdgk9IHBwcG9lX3Jjdl9jb3JlOworCXNrLT5za19zdGF0ZQkJPSBQUFBPWF9OT05FOworCXNrLT5za190eXBlCQk9IFNPQ0tfU1RSRUFNOworCXNrLT5za19mYW1pbHkJCT0gUEZfUFBQT1g7CisJc2stPnNrX3Byb3RvY29sCQk9IFBYX1BST1RPX09FOwogCi0JZXJyb3IgPSAwOwotb3V0OglyZXR1cm4gZXJyb3I7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcHBwb2VfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbzsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKIAogCWlmICghc2spCiAJCXJldHVybiAwOwogCiAJbG9ja19zb2NrKHNrKTsKLQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKXsKKwlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXJldHVybiAtRUJBREY7CiAJfQpAQCAtNTM0LDI2ICs1NzYsMzkgQEAKIAkvKiBTaWduYWwgdGhlIGRlYXRoIG9mIHRoZSBzb2NrZXQuICovCiAJc2stPnNrX3N0YXRlID0gUFBQT1hfREVBRDsKIAorCS8qCisJICogcHBwb2VfZmx1c2hfZGV2IGNvdWxkIGxlYWQgdG8gYSByYWNlIHdpdGgKKwkgKiB0aGlzIHJvdXRpbmUgc28gd2UgdXNlIGZsdXNoX2xvY2sgdG8gZWxpbWluYXRlCisJICogc3VjaCBhIGNhc2UgKHdlIG9ubHkgbmVlZCBwZXItbmV0IHNwZWNpZmljIGRhdGEpCisJICovCisJc3Bpbl9sb2NrKCZmbHVzaF9sb2NrKTsKKwlwbyA9IHBwcG94X3NrKHNrKTsKKwlpZiAoIXBvLT5wcHBvZV9kZXYpIHsKKwkJc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOworCQlnb3RvIG91dDsKKwl9CisJcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChwby0+cHBwb2VfZGV2KSk7CisJc3Bpbl91bmxvY2soJmZsdXNoX2xvY2spOwogCi0JLyogV3JpdGUgbG9jayBvbiBoYXNoIGxvY2sgcHJvdGVjdHMgdGhlIGVudGlyZSAicG8iIHN0cnVjdCBmcm9tCi0JICogY29uY3VycmVudCB1cGRhdGVzIHZpYSBwcHBvZV9mbHVzaF9kZXYuIFRoZSAicG8iIHN0cnVjdCBzaG91bGQKLQkgKiBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGhhc2ggdGFibGUgY29udGVudHMsIHRodXMgcHJvdGVjdGVkCi0JICogYnkgdGhlIGhhc2ggdGFibGUgbG9jayAqLwotCXdyaXRlX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7CisJLyoKKwkgKiBwcm90ZWN0ICJwbyIgZnJvbSBjb25jdXJyZW50IHVwZGF0ZXMKKwkgKiBvbiBwcHBvZV9mbHVzaF9kZXYKKwkgKi8KKwl3cml0ZV9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKIAogCXBvID0gcHBwb3hfc2soc2spOwotCWlmIChwby0+cHBwb2VfcGEuc2lkKSB7Ci0JCV9fZGVsZXRlX2l0ZW0ocG8tPnBwcG9lX3BhLnNpZCwKLQkJCSAgICAgIHBvLT5wcHBvZV9wYS5yZW1vdGUsIHBvLT5wcHBvZV9pZmluZGV4KTsKLQl9CisJaWYgKHN0YWdlX3Nlc3Npb24ocG8tPnBwcG9lX3BhLnNpZCkpCisJCV9fZGVsZXRlX2l0ZW0ocG4sIHBvLT5wcHBvZV9wYS5zaWQsIHBvLT5wcHBvZV9wYS5yZW1vdGUsCisJCQkJcG8tPnBwcG9lX2lmaW5kZXgpOwogCiAJaWYgKHBvLT5wcHBvZV9kZXYpIHsKIAkJZGV2X3B1dChwby0+cHBwb2VfZGV2KTsKIAkJcG8tPnBwcG9lX2RldiA9IE5VTEw7CiAJfQogCi0Jd3JpdGVfdW5sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CiAKK291dDoKIAlzb2NrX29ycGhhbihzayk7CiAJc29jay0+c2sgPSBOVUxMOwogCkBAIC01NjQsMTQgKzYxOSwxNCBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBpbnQgcHBwb2VfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVzZXJ2YWRkciwKIAkJICBpbnQgc29ja2FkZHJfbGVuLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggKnNwID0gKHN0cnVjdCBzb2NrYWRkcl9wcHBveCAqKSB1c2VydmFkZHI7CisJc3RydWN0IHNvY2thZGRyX3BwcG94ICpzcCA9IChzdHJ1Y3Qgc29ja2FkZHJfcHBwb3ggKil1c2VydmFkZHI7CiAJc3RydWN0IHBwcG94X3NvY2sgKnBvID0gcHBwb3hfc2soc2spOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHBwcG9lX25ldCAqcG47CiAJaW50IGVycm9yOwogCiAJbG9ja19zb2NrKHNrKTsKQEAgLTU4Miw0NCArNjM3LDQ1IEBACiAKIAkvKiBDaGVjayBmb3IgYWxyZWFkeSBib3VuZCBzb2NrZXRzICovCiAJZXJyb3IgPSAtRUJVU1k7Ci0JaWYgKChzay0+c2tfc3RhdGUgJiBQUFBPWF9DT05ORUNURUQpICYmIHNwLT5zYV9hZGRyLnBwcG9lLnNpZCkKKwlpZiAoKHNrLT5za19zdGF0ZSAmIFBQUE9YX0NPTk5FQ1RFRCkgJiYKKwkgICAgIHN0YWdlX3Nlc3Npb24oc3AtPnNhX2FkZHIucHBwb2Uuc2lkKSkKIAkJZ290byBlbmQ7CiAKIAkvKiBDaGVjayBmb3IgYWxyZWFkeSBkaXNjb25uZWN0ZWQgc29ja2V0cywgb24gYXR0ZW1wdHMgdG8gZGlzY29ubmVjdCAqLwogCWVycm9yID0gLUVBTFJFQURZOwotCWlmICgoc2stPnNrX3N0YXRlICYgUFBQT1hfREVBRCkgJiYgIXNwLT5zYV9hZGRyLnBwcG9lLnNpZCApCisJaWYgKChzay0+c2tfc3RhdGUgJiBQUFBPWF9ERUFEKSAmJgorCSAgICAgIXN0YWdlX3Nlc3Npb24oc3AtPnNhX2FkZHIucHBwb2Uuc2lkKSkKIAkJZ290byBlbmQ7CiAKIAllcnJvciA9IDA7Ci0JaWYgKHBvLT5wcHBvZV9wYS5zaWQpIHsKKworCS8qIERlbGV0ZSB0aGUgb2xkIGJpbmRpbmcgKi8KKwlpZiAoc3RhZ2Vfc2Vzc2lvbihwby0+cHBwb2VfcGEuc2lkKSkgewogCQlwcHBveF91bmJpbmRfc29jayhzayk7Ci0KLQkJLyogRGVsZXRlIHRoZSBvbGQgYmluZGluZyAqLwotCQlkZWxldGVfaXRlbShwby0+cHBwb2VfcGEuc2lkLHBvLT5wcHBvZV9wYS5yZW1vdGUscG8tPnBwcG9lX2lmaW5kZXgpOwotCi0JCWlmKHBvLT5wcHBvZV9kZXYpCisJCWlmIChwby0+cHBwb2VfZGV2KSB7CisJCQlwbiA9IHBwcG9lX3Blcm5ldChkZXZfbmV0KHBvLT5wcHBvZV9kZXYpKTsKKwkJCWRlbGV0ZV9pdGVtKHBuLCBwby0+cHBwb2VfcGEuc2lkLAorCQkJCXBvLT5wcHBvZV9wYS5yZW1vdGUsIHBvLT5wcHBvZV9pZmluZGV4KTsKIAkJCWRldl9wdXQocG8tPnBwcG9lX2Rldik7Ci0KKwkJfQogCQltZW1zZXQoc2tfcHBwb3gocG8pICsgMSwgMCwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgcHBwb3hfc29jaykgLSBzaXplb2Yoc3RydWN0IHNvY2spKTsKLQogCQlzay0+c2tfc3RhdGUgPSBQUFBPWF9OT05FOwogCX0KIAotCS8qIERvbid0IHJlLWJpbmQgaWYgc2lkPT0wICovCi0JaWYgKHNwLT5zYV9hZGRyLnBwcG9lLnNpZCAhPSAwKSB7Ci0JCWRldiA9IGRldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIHNwLT5zYV9hZGRyLnBwcG9lLmRldik7Ci0KKwkvKiBSZS1iaW5kIGluIHNlc3Npb24gc3RhZ2Ugb25seSAqLworCWlmIChzdGFnZV9zZXNzaW9uKHNwLT5zYV9hZGRyLnBwcG9lLnNpZCkpIHsKIAkJZXJyb3IgPSAtRU5PREVWOworCQlkZXYgPSBkZXZfZ2V0X2J5X25hbWUoc29ja19uZXQoc2spLCBzcC0+c2FfYWRkci5wcHBvZS5kZXYpOwogCQlpZiAoIWRldikKIAkJCWdvdG8gZW5kOwogCiAJCXBvLT5wcHBvZV9kZXYgPSBkZXY7CiAJCXBvLT5wcHBvZV9pZmluZGV4ID0gZGV2LT5pZmluZGV4OwotCi0JCXdyaXRlX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7Ci0JCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKXsKLQkJCXdyaXRlX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwkJcG4gPSBwcHBvZV9wZXJuZXQoZGV2X25ldChkZXYpKTsKKwkJd3JpdGVfbG9ja19iaCgmcG4tPmhhc2hfbG9jayk7CisJCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7CisJCQl3cml0ZV91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogCQkJZ290byBlcnJfcHV0OwogCQl9CiAKQEAgLTYyNyw4ICs2ODMsOCBAQAogCQkgICAgICAgJnNwLT5zYV9hZGRyLnBwcG9lLAogCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwcHBvZV9hZGRyKSk7CiAKLQkJZXJyb3IgPSBfX3NldF9pdGVtKHBvKTsKLQkJd3JpdGVfdW5sb2NrX2JoKCZwcHBvZV9oYXNoX2xvY2spOworCQllcnJvciA9IF9fc2V0X2l0ZW0ocG4sIHBvKTsKKwkJd3JpdGVfdW5sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKIAkJaWYgKGVycm9yIDwgMCkKIAkJCWdvdG8gZXJyX3B1dDsKIApAQCAtNjM5LDcgKzY5NSw3IEBACiAJCXBvLT5jaGFuLnByaXZhdGUgPSBzazsKIAkJcG8tPmNoYW4ub3BzID0gJnBwcG9lX2NoYW5fb3BzOwogCi0JCWVycm9yID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJnBvLT5jaGFuKTsKKwkJZXJyb3IgPSBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoZGV2X25ldChkZXYpLCAmcG8tPmNoYW4pOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGVycl9wdXQ7CiAKQEAgLTY0OCw3ICs3MDQsNyBAQAogCiAJcG8tPm51bSA9IHNwLT5zYV9hZGRyLnBwcG9lLnNpZDsKIAotIGVuZDoKK2VuZDoKIAlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnJvcjsKIGVycl9wdXQ6CkBAIC02NTksNyArNzE1LDYgQEAKIAlnb3RvIGVuZDsKIH0KIAotCiBzdGF0aWMgaW50IHBwcG9lX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKIAkJICBpbnQgKnVzb2NrYWRkcl9sZW4sIGludCBwZWVyKQogewpAQCAtNjc4LDcgKzczMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGludCBwcHBvZV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLAogCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKQEAgLTY5MCw3ICs3NDQsNiBAQAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBQUFBJT0NHTVJVOgogCQllcnIgPSAtRU5YSU87Ci0KIAkJaWYgKCEoc2stPnNrX3N0YXRlICYgUFBQT1hfQ09OTkVDVEVEKSkKIAkJCWJyZWFrOwogCkBAIC02OTgsNyArNzUxLDcgQEAKIAkJaWYgKHB1dF91c2VyKHBvLT5wcHBvZV9kZXYtPm10dSAtCiAJCQkgICAgIHNpemVvZihzdHJ1Y3QgcHBwb2VfaGRyKSAtCiAJCQkgICAgIFBQUF9IRFJMRU4sCi0JCQkgICAgIChpbnQgX191c2VyICopIGFyZykpCisJCQkgICAgIChpbnQgX191c2VyICopYXJnKSkKIAkJCWJyZWFrOwogCQllcnIgPSAwOwogCQlicmVhazsKQEAgLTcwOSw3ICs3NjIsNyBAQAogCQkJYnJlYWs7CiAKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGdldF91c2VyKHZhbCwoaW50IF9fdXNlciAqKSBhcmcpKQorCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKWFyZykpCiAJCQlicmVhazsKIAogCQlpZiAodmFsIDwgKHBvLT5wcHBvZV9kZXYtPm10dQpAQCAtNzIyLDcgKzc3NSw3IEBACiAKIAljYXNlIFBQUElPQ1NGTEFHUzoKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKikgYXJnKSkKKwkJaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmcpKQogCQkJYnJlYWs7CiAJCWVyciA9IDA7CiAJCWJyZWFrOwpAQCAtNzQ5LDEzICs4MDIsMTIgQEAKIAogCQllcnIgPSAtRUlOVkFMOwogCQlpZiAocG8tPnBwcG9lX3JlbGF5LnNhX2ZhbWlseSAhPSBBRl9QUFBPWCB8fAotCQkgICAgcG8tPnBwcG9lX3JlbGF5LnNhX3Byb3RvY29sIT0gUFhfUFJPVE9fT0UpCisJCSAgICBwby0+cHBwb2VfcmVsYXkuc2FfcHJvdG9jb2wgIT0gUFhfUFJPVE9fT0UpCiAJCQlicmVhazsKIAogCQkvKiBDaGVjayB0aGF0IHRoZSBzb2NrZXQgcmVmZXJlbmNlZCBieSB0aGUgYWRkcmVzcwogCQkgICBhY3R1YWxseSBleGlzdHMuICovCi0JCXJlbGF5X3BvID0gZ2V0X2l0ZW1fYnlfYWRkcigmcG8tPnBwcG9lX3JlbGF5KTsKLQorCQlyZWxheV9wbyA9IGdldF9pdGVtX2J5X2FkZHIoc29ja19uZXQoc2spLCAmcG8tPnBwcG9lX3JlbGF5KTsKIAkJaWYgKCFyZWxheV9wbykKIAkJCWJyZWFrOwogCkBAIC03ODEsNyArODMzLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0KIHN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCSAgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbikKIHsKQEAgLTgwOCw3ICs4NTksNyBAQAogCWRldiA9IHBvLT5wcHBvZV9kZXY7CiAKIAllcnJvciA9IC1FTVNHU0laRTsKLSAJaWYgKHRvdGFsX2xlbiA+IChkZXYtPm10dSArIGRldi0+aGFyZF9oZWFkZXJfbGVuKSkKKwlpZiAodG90YWxfbGVuID4gKGRldi0+bXR1ICsgZGV2LT5oYXJkX2hlYWRlcl9sZW4pKQogCQlnb3RvIGVuZDsKIAogCkBAIC04MjYsMTMgKzg3NywxMiBAQAogCXNrYi0+ZGV2ID0gZGV2OwogCiAJc2tiLT5wcmlvcml0eSA9IHNrLT5za19wcmlvcml0eTsKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9QUFBfU0VTKTsKKwlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQX1NFUyk7CiAKLQlwaCA9IChzdHJ1Y3QgcHBwb2VfaGRyICopIHNrYl9wdXQoc2tiLCB0b3RhbF9sZW4gKyBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpOwotCXN0YXJ0ID0gKGNoYXIgKikgJnBoLT50YWdbMF07CisJcGggPSAoc3RydWN0IHBwcG9lX2hkciAqKXNrYl9wdXQoc2tiLCB0b3RhbF9sZW4gKyBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpOworCXN0YXJ0ID0gKGNoYXIgKikmcGgtPnRhZ1swXTsKIAogCWVycm9yID0gbWVtY3B5X2Zyb21pb3ZlYyhzdGFydCwgbS0+bXNnX2lvdiwgdG90YWxfbGVuKTsKLQogCWlmIChlcnJvciA8IDApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZW5kOwpAQCAtODUzLDcgKzkwMyw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiB4bWl0IGZ1bmN0aW9uIGZvciBpbnRlcm5hbCB1c2UuCkBAIC04ODgsNyArOTM3LDcgQEAKIAlwaC0+c2lkCT0gcG8tPm51bTsKIAlwaC0+bGVuZ3RoID0gaHRvbnMoZGF0YV9sZW4pOwogCi0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUFBQX1NFUyk7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX1BQUF9TRVMpOwogCXNrYi0+ZGV2ID0gZGV2OwogCiAJZGV2X2hhcmRfaGVhZGVyKHNrYiwgZGV2LCBFVEhfUF9QUFBfU0VTLApAQCAtOTAzLDcgKzk1Miw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHhtaXQgZnVuY3Rpb24gY2FsbGVkIGJ5IGdlbmVyaWMgUFBQIGRyaXZlcgpAQCAtOTEyLDExICs5NjAsMTAgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgcHBwb2VfeG1pdChzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopIGNoYW4tPnByaXZhdGU7CisJc3RydWN0IHNvY2sgKnNrID0gKHN0cnVjdCBzb2NrICopY2hhbi0+cHJpdmF0ZTsKIAlyZXR1cm4gX19wcHBvZV94bWl0KHNrLCBza2IpOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgcHBwX2NoYW5uZWxfb3BzIHBwcG9lX2NoYW5fb3BzID0gewogCS5zdGFydF94bWl0ID0gcHBwb2VfeG1pdCwKIH07CkBAIC05MzUsNyArOTgyLDYgQEAKIAogCXNrYiA9IHNrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncyAmIH5NU0dfRE9OVFdBSVQsCiAJCQkJZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnJvcik7Ci0KIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIGVuZDsKIApAQCAtOTY4LDQ0ICsxMDE0LDQ3IEBACiAJZGV2X25hbWUgPSBwby0+cHBwb2VfcGEuZGV2OwogCiAJc2VxX3ByaW50ZihzZXEsICIlMDhYICVwTSAlOHNcbiIsCi0JCSAgIHBvLT5wcHBvZV9wYS5zaWQsIHBvLT5wcHBvZV9wYS5yZW1vdGUsIGRldl9uYW1lKTsKKwkJcG8tPnBwcG9lX3BhLnNpZCwgcG8tPnBwcG9lX3BhLnJlbW90ZSwgZGV2X25hbWUpOwogb3V0OgogCXJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgcHBwb3hfc29jayAqcHBwb2VfZ2V0X2lkeChsb2ZmX3QgcG9zKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb3hfc29jayAqcHBwb2VfZ2V0X2lkeChzdHJ1Y3QgcHBwb2VfbmV0ICpwbiwgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgcHBwb3hfc29jayAqcG87Ci0JaW50IGkgPSAwOworCWludCBpOwogCi0JZm9yICg7IGkgPCBQUFBPRV9IQVNIX1NJWkU7IGkrKykgewotCQlwbyA9IGl0ZW1faGFzaF90YWJsZVtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgUFBQT0VfSEFTSF9TSVpFOyBpKyspIHsKKwkJcG8gPSBwbi0+aGFzaF90YWJsZVtpXTsKIAkJd2hpbGUgKHBvKSB7CiAJCQlpZiAoIXBvcy0tKQogCQkJCWdvdG8gb3V0OwogCQkJcG8gPSBwby0+bmV4dDsKIAkJfQogCX0KKwogb3V0OgogCXJldHVybiBwbzsKIH0KIAogc3RhdGljIHZvaWQgKnBwcG9lX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi0JX19hY3F1aXJlcyhwcHBvZV9oYXNoX2xvY2spCisJX19hY3F1aXJlcyhwbi0+aGFzaF9sb2NrKQogeworCXN0cnVjdCBwcHBvZV9uZXQgKnBuID0gcHBwb2VfcGVybmV0KHNlcV9maWxlX25ldChzZXEpKTsKIAlsb2ZmX3QgbCA9ICpwb3M7CiAKLQlyZWFkX2xvY2tfYmgoJnBwcG9lX2hhc2hfbG9jayk7Ci0JcmV0dXJuIGwgPyBwcHBvZV9nZXRfaWR4KC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CisJcmVhZF9sb2NrX2JoKCZwbi0+aGFzaF9sb2NrKTsKKwlyZXR1cm4gbCA/IHBwcG9lX2dldF9pZHgocG4sIC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKIHN0YXRpYyB2b2lkICpwcHBvZV9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CisJc3RydWN0IHBwcG9lX25ldCAqcG4gPSBwcHBvZV9wZXJuZXQoc2VxX2ZpbGVfbmV0KHNlcSkpOwogCXN0cnVjdCBwcHBveF9zb2NrICpwbzsKIAogCSsrKnBvczsKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKLQkJcG8gPSBwcHBvZV9nZXRfaWR4KDApOworCQlwbyA9IHBwcG9lX2dldF9pZHgocG4sIDApOwogCQlnb3RvIG91dDsKIAl9CiAJcG8gPSB2OwpAQCAtMTAxNSwyMiArMTA2NCwyNCBAQAogCQlpbnQgaGFzaCA9IGhhc2hfaXRlbShwby0+cHBwb2VfcGEuc2lkLCBwby0+cHBwb2VfcGEucmVtb3RlKTsKIAogCQl3aGlsZSAoKytoYXNoIDwgUFBQT0VfSEFTSF9TSVpFKSB7Ci0JCQlwbyA9IGl0ZW1faGFzaF90YWJsZVtoYXNoXTsKKwkJCXBvID0gcG4tPmhhc2hfdGFibGVbaGFzaF07CiAJCQlpZiAocG8pCiAJCQkJYnJlYWs7CiAJCX0KIAl9CisKIG91dDoKIAlyZXR1cm4gcG87CiB9CiAKIHN0YXRpYyB2b2lkIHBwcG9lX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotCV9fcmVsZWFzZXMocHBwb2VfaGFzaF9sb2NrKQorCV9fcmVsZWFzZXMocG4tPmhhc2hfbG9jaykKIHsKLQlyZWFkX3VubG9ja19iaCgmcHBwb2VfaGFzaF9sb2NrKTsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbiA9IHBwcG9lX3Blcm5ldChzZXFfZmlsZV9uZXQoc2VxKSk7CisJcmVhZF91bmxvY2tfYmgoJnBuLT5oYXNoX2xvY2spOwogfQogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9lX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9lX3NlcV9vcHMgPSB7CiAJLnN0YXJ0CQk9IHBwcG9lX3NlcV9zdGFydCwKIAkubmV4dAkJPSBwcHBvZV9zZXFfbmV4dCwKIAkuc3RvcAkJPSBwcHBvZV9zZXFfc3RvcCwKQEAgLTEwMzksNyArMTA5MCw4IEBACiAKIHN0YXRpYyBpbnQgcHBwb2Vfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZwcHBvZV9zZXFfb3BzKTsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmcHBwb2Vfc2VxX29wcywKKwkJCXNpemVvZihzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHBwcG9lX3NlcV9mb3BzID0gewpAQCAtMTA0Nyw3NCArMTA5OSwxMTUgQEAKIAkub3BlbgkJPSBwcHBvZV9zZXFfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAotc3RhdGljIGludCBfX2luaXQgcHBwb2VfcHJvY19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwOwotCi0JcCA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgInBwcG9lIiwgU19JUlVHTywgJnBwcG9lX3NlcV9mb3BzKTsKLQlpZiAoIXApCi0JCXJldHVybiAtRU5PTUVNOwotCXJldHVybiAwOwotfQotI2Vsc2UgLyogQ09ORklHX1BST0NfRlMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBwcG9lX3Byb2NfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgcHBwb2Vfb3BzID0gewotICAgIC5mYW1pbHkJCT0gQUZfUFBQT1gsCi0gICAgLm93bmVyCQk9IFRISVNfTU9EVUxFLAotICAgIC5yZWxlYXNlCQk9IHBwcG9lX3JlbGVhc2UsCi0gICAgLmJpbmQJCT0gc29ja19ub19iaW5kLAotICAgIC5jb25uZWN0CQk9IHBwcG9lX2Nvbm5lY3QsCi0gICAgLnNvY2tldHBhaXIJCT0gc29ja19ub19zb2NrZXRwYWlyLAotICAgIC5hY2NlcHQJCT0gc29ja19ub19hY2NlcHQsCi0gICAgLmdldG5hbWUJCT0gcHBwb2VfZ2V0bmFtZSwKLSAgICAucG9sbAkJPSBkYXRhZ3JhbV9wb2xsLAotICAgIC5saXN0ZW4JCT0gc29ja19ub19saXN0ZW4sCi0gICAgLnNodXRkb3duCQk9IHNvY2tfbm9fc2h1dGRvd24sCi0gICAgLnNldHNvY2tvcHQJCT0gc29ja19ub19zZXRzb2Nrb3B0LAotICAgIC5nZXRzb2Nrb3B0CQk9IHNvY2tfbm9fZ2V0c29ja29wdCwKLSAgICAuc2VuZG1zZwkJPSBwcHBvZV9zZW5kbXNnLAotICAgIC5yZWN2bXNnCQk9IHBwcG9lX3JlY3Ztc2csCi0gICAgLm1tYXAJCT0gc29ja19ub19tbWFwLAotICAgIC5pb2N0bAkJPSBwcHBveF9pb2N0bCwKKwkuZmFtaWx5CQk9IEFGX1BQUE9YLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVsZWFzZQk9IHBwcG9lX3JlbGVhc2UsCisJLmJpbmQJCT0gc29ja19ub19iaW5kLAorCS5jb25uZWN0CT0gcHBwb2VfY29ubmVjdCwKKwkuc29ja2V0cGFpcgk9IHNvY2tfbm9fc29ja2V0cGFpciwKKwkuYWNjZXB0CQk9IHNvY2tfbm9fYWNjZXB0LAorCS5nZXRuYW1lCT0gcHBwb2VfZ2V0bmFtZSwKKwkucG9sbAkJPSBkYXRhZ3JhbV9wb2xsLAorCS5saXN0ZW4JCT0gc29ja19ub19saXN0ZW4sCisJLnNodXRkb3duCT0gc29ja19ub19zaHV0ZG93biwKKwkuc2V0c29ja29wdAk9IHNvY2tfbm9fc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAk9IHNvY2tfbm9fZ2V0c29ja29wdCwKKwkuc2VuZG1zZwk9IHBwcG9lX3NlbmRtc2csCisJLnJlY3Ztc2cJPSBwcHBvZV9yZWN2bXNnLAorCS5tbWFwCQk9IHNvY2tfbm9fbW1hcCwKKwkuaW9jdGwJCT0gcHBwb3hfaW9jdGwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBwcG94X3Byb3RvIHBwcG9lX3Byb3RvID0gewotICAgIC5jcmVhdGUJPSBwcHBvZV9jcmVhdGUsCi0gICAgLmlvY3RsCT0gcHBwb2VfaW9jdGwsCi0gICAgLm93bmVyCT0gVEhJU19NT0RVTEUsCisJLmNyZWF0ZQk9IHBwcG9lX2NyZWF0ZSwKKwkuaW9jdGwJPSBwcHBvZV9pb2N0bCwKKwkub3duZXIJPSBUSElTX01PRFVMRSwKIH07CiAKLQotc3RhdGljIGludCBfX2luaXQgcHBwb2VfaW5pdCh2b2lkKQorc3RhdGljIF9fbmV0X2luaXQgaW50IHBwcG9lX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpbnQgZXJyID0gcHJvdG9fcmVnaXN0ZXIoJnBwcG9lX3NrX3Byb3RvLCAwKTsKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKKwlpbnQgZXJyOwogCisJcG4gPSBremFsbG9jKHNpemVvZigqcG4pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBuKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJ3bG9ja19pbml0KCZwbi0+aGFzaF9sb2NrKTsKKworCWVyciA9IG5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCwgcG4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0gCWVyciA9IHJlZ2lzdGVyX3BwcG94X3Byb3RvKFBYX1BST1RPX09FLCAmcHBwb2VfcHJvdG8pOworCXBkZSA9IHByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgInBwcG9lIiwgU19JUlVHTywgJnBwcG9lX3NlcV9mb3BzKTsKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCWlmICghcGRlKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7CisKK291dDoKKwlrZnJlZShwbik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIF9fbmV0X2V4aXQgdm9pZCBwcHBvZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBwcG9lX25ldCAqcG47CisKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAicHBwb2UiKTsKKwlwbiA9IG5ldF9nZW5lcmljKG5ldCwgcHBwb2VfbmV0X2lkKTsKKwkvKgorCSAqIGlmIHNvbWVvbmUgaGFzIGNhY2hlZCBvdXIgbmV0IHRoZW4KKwkgKiBmdXJ0aGVyIG5ldF9nZW5lcmljIGNhbGwgd2lsbCByZXR1cm4gTlVMTAorCSAqLworCW5ldF9hc3NpZ25fZ2VuZXJpYyhuZXQsIHBwcG9lX25ldF9pZCwgTlVMTCk7CisJa2ZyZWUocG4pOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHBwcG9lX25ldF9vcHMgPSB7CisJLmluaXQgPSBwcHBvZV9pbml0X25ldCwKKwkuZXhpdCA9IHBwcG9lX2V4aXRfbmV0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHBwb2VfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBwcm90b19yZWdpc3RlcigmcHBwb2Vfc2tfcHJvdG8sIDApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gcmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0UsICZwcHBvZV9wcm90byk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5yZWdpc3Rlcl9wcHBvZV9wcm90bzsKIAotCWVyciA9IHBwcG9lX3Byb2NfaW5pdCgpOworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZwcHBvZV9uZXRfaWQsICZwcHBvZV9uZXRfb3BzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOwogCiAJZGV2X2FkZF9wYWNrKCZwcHBvZXNfcHR5cGUpOwogCWRldl9hZGRfcGFjaygmcHBwb2VkX3B0eXBlKTsKIAlyZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnBwcG9lX25vdGlmaWVyKTsKLW91dDoKLQlyZXR1cm4gZXJyOworCisJcmV0dXJuIDA7CisKIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOgogCXVucmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0UpOwogb3V0X3VucmVnaXN0ZXJfcHBwb2VfcHJvdG86CiAJcHJvdG9fdW5yZWdpc3RlcigmcHBwb2Vfc2tfcHJvdG8pOwotCWdvdG8gb3V0Oworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvZV9leGl0KHZvaWQpCkBAIC0xMTIzLDcgKzEyMTYsNyBAQAogCWRldl9yZW1vdmVfcGFjaygmcHBwb2VzX3B0eXBlKTsKIAlkZXZfcmVtb3ZlX3BhY2soJnBwcG9lZF9wdHlwZSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnBwcG9lX25vdGlmaWVyKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgicHBwb2UiLCBpbml0X25ldC5wcm9jX25ldCk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX2RldmljZShwcHBvZV9uZXRfaWQsICZwcHBvZV9uZXRfb3BzKTsKIAlwcm90b191bnJlZ2lzdGVyKCZwcHBvZV9za19wcm90byk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcG9sMnRwLmMgYi9kcml2ZXJzL25ldC9wcHBvbDJ0cC5jCmluZGV4IGYxYTk0NjcuLjViMDdkZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcG9sMnRwLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwb2wydHAuYwpAQCAtOTAsNyArOTAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC91ZHAuaD4KQEAgLTIwNCw2ICsyMDYsNyBAQAogCXN0cnVjdCBzb2NrCQkqc29jazsJCS8qIFBhcmVudCBzb2NrZXQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CQkvKiBLZWVwIGEgbGlzdCBvZiBhbGwgb3BlbgogCQkJCQkJICogcHJlcGFyZWQgc29ja2V0cyAqLworCXN0cnVjdCBuZXQJCSpwcHBvbDJ0cF9uZXQ7CS8qIHRoZSBuZXQgd2UgYmVsb25nIHRvICovCiAKIAlhdG9taWNfdAkJcmVmX2NvdW50OwogfTsKQEAgLTIyNyw4ICsyMzAsMjAgQEAKIHN0YXRpYyBhdG9taWNfdCBwcHBvbDJ0cF9zZXNzaW9uX2NvdW50Owogc3RhdGljIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2wydHBfY2hhbl9vcHMgPSB7IHBwcG9sMnRwX3htaXQgLCBOVUxMIH07CiBzdGF0aWMgc3RydWN0IHByb3RvX29wcyBwcHBvbDJ0cF9vcHM7Ci1zdGF0aWMgTElTVF9IRUFEKHBwcG9sMnRwX3R1bm5lbF9saXN0KTsKLXN0YXRpYyBERUZJTkVfUldMT0NLKHBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCisvKiBwZXItbmV0IHByaXZhdGUgZGF0YSBmb3IgdGhpcyBtb2R1bGUgKi8KK3N0YXRpYyBpbnQgcHBwb2wydHBfbmV0X2lkOworc3RydWN0IHBwcG9sMnRwX25ldCB7CisJc3RydWN0IGxpc3RfaGVhZCBwcHBvbDJ0cF90dW5uZWxfbGlzdDsKKwlyd2xvY2tfdCBwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwcHBvbDJ0cF9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCUJVR19PTighbmV0KTsKKworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIHBwcG9sMnRwX25ldF9pZCk7Cit9CiAKIC8qIEhlbHBlcnMgdG8gb2J0YWluIHR1bm5lbC9zZXNzaW9uIGNvbnRleHRzIGZyb20gc29ja2V0cy4KICAqLwpAQCAtMzIxLDE4ICszMzYsMTkgQEAKIAogLyogTG9va3VwIGEgdHVubmVsIGJ5IGlkCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICpwcHBvbDJ0cF90dW5uZWxfZmluZCh1MTYgdHVubmVsX2lkKQorc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnBwcG9sMnRwX3R1bm5lbF9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTE2IHR1bm5lbF9pZCkKIHsKLQlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWwgPSBOVUxMOworCXN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKnR1bm5lbDsKKwlzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwbiA9IHBwcG9sMnRwX3Blcm5ldChuZXQpOwogCi0JcmVhZF9sb2NrX2JoKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR1bm5lbCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0LCBsaXN0KSB7CisJcmVhZF9sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0dW5uZWwsICZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHR1bm5lbC0+c3RhdHMudHVubmVsX2lkID09IHR1bm5lbF9pZCkgewotCQkJcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCQkJcmVhZF91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAkJCXJldHVybiB0dW5uZWw7CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTEyODcsMTAgKzEzMDMsMTIgQEAKICAqLwogc3RhdGljIHZvaWQgcHBwb2wydHBfdHVubmVsX2ZyZWUoc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsKQogeworCXN0cnVjdCBwcHBvbDJ0cF9uZXQgKnBuID0gcHBwb2wydHBfcGVybmV0KHR1bm5lbC0+cHBwb2wydHBfbmV0KTsKKwogCS8qIFJlbW92ZSBmcm9tIHNvY2tldCBsaXN0ICovCi0Jd3JpdGVfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CisJd3JpdGVfbG9ja19iaCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOwogCWxpc3RfZGVsX2luaXQoJnR1bm5lbC0+bGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZwcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAogCWF0b21pY19kZWMoJnBwcG9sMnRwX3R1bm5lbF9jb3VudCk7CiAJa2ZyZWUodHVubmVsKTsKQEAgLTE0NDQsMTMgKzE0NjIsMTQgQEAKIC8qIEludGVybmFsIGZ1bmN0aW9uIHRvIHByZXBhcmUgYSB0dW5uZWwgKFVEUCkgc29ja2V0IHRvIGhhdmUgUFBQb1gKICAqIHNvY2tldHMgYXR0YWNoZWQgdG8gaXQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgc29jayAqcHBwb2wydHBfcHJlcGFyZV90dW5uZWxfc29ja2V0KGludCBmZCwgdTE2IHR1bm5lbF9pZCwKLQkJCQkJCSAgIGludCAqZXJyb3IpCitzdGF0aWMgc3RydWN0IHNvY2sgKnBwcG9sMnRwX3ByZXBhcmVfdHVubmVsX3NvY2tldChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCWludCBmZCwgdTE2IHR1bm5lbF9pZCwgaW50ICplcnJvcikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBOVUxMOwogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWw7CisJc3RydWN0IHBwcG9sMnRwX25ldCAqcG47CiAJc3RydWN0IHNvY2sgKnJldCA9IE5VTEw7CiAKIAkvKiBHZXQgdGhlIHR1bm5lbCBVRFAgc29ja2V0IGZyb20gdGhlIGZkLCB3aGljaCB3YXMgb3BlbmVkIGJ5CkBAIC0xNTI0LDExICsxNTQzLDE1IEBACiAJLyogTWlzYyBpbml0ICovCiAJcndsb2NrX2luaXQoJnR1bm5lbC0+aGxpc3RfbG9jayk7CiAKKwkvKiBUaGUgbmV0IHdlIGJlbG9uZyB0byAqLworCXR1bm5lbC0+cHBwb2wydHBfbmV0ID0gbmV0OworCXBuID0gcHBwb2wydHBfcGVybmV0KG5ldCk7CisKIAkvKiBBZGQgdHVubmVsIHRvIG91ciBsaXN0ICovCiAJSU5JVF9MSVNUX0hFQUQoJnR1bm5lbC0+bGlzdCk7Ci0Jd3JpdGVfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJnR1bm5lbC0+bGlzdCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKLQl3cml0ZV91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXdyaXRlX2xvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZCgmdHVubmVsLT5saXN0LCAmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKKwl3cml0ZV91bmxvY2tfYmgoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdF9sb2NrKTsKIAlhdG9taWNfaW5jKCZwcHBvbDJ0cF90dW5uZWxfY291bnQpOwogCiAJLyogQnVtcCB0aGUgcmVmZXJlbmNlIGNvdW50LiBUaGUgdHVubmVsIGNvbnRleHQgaXMgZGVsZXRlZApAQCAtMTYyOSw3ICsxNjUyLDggQEAKIAkgKiB0dW5uZWwgaWQuCiAJICovCiAJaWYgKChzcC0+cHBwb2wydHAuc19zZXNzaW9uID09IDApICYmIChzcC0+cHBwb2wydHAuZF9zZXNzaW9uID09IDApKSB7Ci0JCXR1bm5lbF9zb2NrID0gcHBwb2wydHBfcHJlcGFyZV90dW5uZWxfc29ja2V0KHNwLT5wcHBvbDJ0cC5mZCwKKwkJdHVubmVsX3NvY2sgPSBwcHBvbDJ0cF9wcmVwYXJlX3R1bm5lbF9zb2NrZXQoc29ja19uZXQoc2spLAorCQkJCQkJCSAgICAgc3AtPnBwcG9sMnRwLmZkLAogCQkJCQkJCSAgICAgc3AtPnBwcG9sMnRwLnNfdHVubmVsLAogCQkJCQkJCSAgICAgJmVycm9yKTsKIAkJaWYgKHR1bm5lbF9zb2NrID09IE5VTEwpCkBAIC0xNjM3LDcgKzE2NjEsNyBAQAogCiAJCXR1bm5lbCA9IHR1bm5lbF9zb2NrLT5za191c2VyX2RhdGE7CiAJfSBlbHNlIHsKLQkJdHVubmVsID0gcHBwb2wydHBfdHVubmVsX2ZpbmQoc3AtPnBwcG9sMnRwLnNfdHVubmVsKTsKKwkJdHVubmVsID0gcHBwb2wydHBfdHVubmVsX2ZpbmQoc29ja19uZXQoc2spLCBzcC0+cHBwb2wydHAuc190dW5uZWwpOwogCiAJCS8qIEVycm9yIGlmIHdlIGNhbid0IGZpbmQgdGhlIHR1bm5lbCAqLwogCQllcnJvciA9IC1FTk9FTlQ7CkBAIC0xNzI1LDcgKzE3NDksNyBAQAogCXBvLT5jaGFuLm9wcwkgPSAmcHBwb2wydHBfY2hhbl9vcHM7CiAJcG8tPmNoYW4ubXR1CSA9IHNlc3Npb24tPm10dTsKIAotCWVycm9yID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJnBvLT5jaGFuKTsKKwllcnJvciA9IHBwcF9yZWdpc3Rlcl9uZXRfY2hhbm5lbChzb2NrX25ldChzayksICZwby0+Y2hhbik7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVuZF9wdXRfdHVuOwogCkBAIC0yMzQ3LDggKzIzNzEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKIHN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSB7Ci0Jc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsOyAvKiBjdXJyZW50IHR1bm5lbCAqLwotCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOyAvKiBOVUxMIG1lYW5zIGdldCBmaXJzdCBzZXNzaW9uIGluIHR1bm5lbCAqLworCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKKwlzdHJ1Y3QgcHBwb2wydHBfdHVubmVsICp0dW5uZWw7CQkvKiBjdXJyZW50IHR1bm5lbCAqLworCXN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpzZXNzaW9uOwkvKiBOVUxMIG1lYW5zIGdldCBmaXJzdCBzZXNzaW9uIGluIHR1bm5lbCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF9zZXNzaW9uICpuZXh0X3Nlc3Npb24oc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsLCBzdHJ1Y3QgcHBwb2wydHBfc2Vzc2lvbiAqY3VycikKQEAgLTIzODQsMTcgKzI0MDksMTggQEAKIAlyZXR1cm4gc2Vzc2lvbjsKIH0KIAotc3RhdGljIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKm5leHRfdHVubmVsKHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKmN1cnIpCitzdGF0aWMgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqbmV4dF90dW5uZWwoc3RydWN0IHBwcG9sMnRwX25ldCAqcG4sCisJCQkJCSAgIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwgKmN1cnIpCiB7CiAJc3RydWN0IHBwcG9sMnRwX3R1bm5lbCAqdHVubmVsID0gTlVMTDsKIAotCXJlYWRfbG9ja19iaCgmcHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7Ci0JaWYgKGxpc3RfaXNfbGFzdCgmY3Vyci0+bGlzdCwgJnBwcG9sMnRwX3R1bm5lbF9saXN0KSkgeworCXJlYWRfbG9ja19iaCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCWlmIChsaXN0X2lzX2xhc3QoJmN1cnItPmxpc3QsICZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QpKSB7CiAJCWdvdG8gb3V0OwogCX0KIAl0dW5uZWwgPSBsaXN0X2VudHJ5KGN1cnItPmxpc3QubmV4dCwgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCwgbGlzdCk7CiBvdXQ6Ci0JcmVhZF91bmxvY2tfYmgoJnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCXJlYWRfdW5sb2NrX2JoKCZwbi0+cHBwb2wydHBfdHVubmVsX2xpc3RfbG9jayk7CiAKIAlyZXR1cm4gdHVubmVsOwogfQpAQCAtMjQwMiw2ICsyNDI4LDcgQEAKIHN0YXRpYyB2b2lkICpwcHBvbDJ0cF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKm9mZnMpCiB7CiAJc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZCA9IFNFUV9TVEFSVF9UT0tFTjsKKwlzdHJ1Y3QgcHBwb2wydHBfbmV0ICpwbjsKIAlsb2ZmX3QgcG9zID0gKm9mZnM7CiAKIAlpZiAoIXBvcykKQEAgLTI0MDksMTQgKzI0MzYsMTUgQEAKIAogCUJVR19PTihtLT5wcml2YXRlID09IE5VTEwpOwogCXBkID0gbS0+cHJpdmF0ZTsKKwlwbiA9IHBwcG9sMnRwX3Blcm5ldChzZXFfZmlsZV9uZXQobSkpOwogCiAJaWYgKHBkLT50dW5uZWwgPT0gTlVMTCkgewotCQlpZiAoIWxpc3RfZW1wdHkoJnBwcG9sMnRwX3R1bm5lbF9saXN0KSkKLQkJCXBkLT50dW5uZWwgPSBsaXN0X2VudHJ5KHBwcG9sMnRwX3R1bm5lbF9saXN0Lm5leHQsIHN0cnVjdCBwcHBvbDJ0cF90dW5uZWwsIGxpc3QpOworCQlpZiAoIWxpc3RfZW1wdHkoJnBuLT5wcHBvbDJ0cF90dW5uZWxfbGlzdCkpCisJCQlwZC0+dHVubmVsID0gbGlzdF9lbnRyeShwbi0+cHBwb2wydHBfdHVubmVsX2xpc3QubmV4dCwgc3RydWN0IHBwcG9sMnRwX3R1bm5lbCwgbGlzdCk7CiAJfSBlbHNlIHsKIAkJcGQtPnNlc3Npb24gPSBuZXh0X3Nlc3Npb24ocGQtPnR1bm5lbCwgcGQtPnNlc3Npb24pOwogCQlpZiAocGQtPnNlc3Npb24gPT0gTlVMTCkgewotCQkJcGQtPnR1bm5lbCA9IG5leHRfdHVubmVsKHBkLT50dW5uZWwpOworCQkJcGQtPnR1bm5lbCA9IG5leHRfdHVubmVsKHBuLCBwZC0+dHVubmVsKTsKIAkJfQogCX0KIApAQCAtMjUxNyw3ICsyNTQ1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0gewogCS5zdGFydAkJPSBwcHBvbDJ0cF9zZXFfc3RhcnQsCiAJLm5leHQJCT0gcHBwb2wydHBfc2VxX25leHQsCiAJLnN0b3AJCT0gcHBwb2wydHBfc2VxX3N0b3AsCkBAIC0yNTMwLDUxICsyNTU4LDE4IEBACiAgKi8KIHN0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzZXFfZmlsZSAqbTsKLQlzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkOwotCWludCByZXQgPSAwOwotCi0JcmV0ID0gc2VxX29wZW4oZmlsZSwgJnBwcG9sMnRwX3NlcV9vcHMpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQkvKiBBbGxvY2F0ZSBhbmQgZmlsbCBvdXIgcHJvY19kYXRhIGZvciBhY2Nlc3MgbGF0ZXIgKi8KLQlyZXQgPSAtRU5PTUVNOwotCW0tPnByaXZhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAobS0+cHJpdmF0ZSA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQotCXBkID0gbS0+cHJpdmF0ZTsKLQlyZXQgPSAwOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmcHBwb2wydHBfc2VxX29wcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhKSk7CiB9CiAKLS8qIENhbGxlZCB3aGVuIC9wcm9jIGZpbGUgYWNjZXNzIGNvbXBsZXRlcy4KLSAqLwotc3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHNlcV9maWxlICptID0gKHN0cnVjdCBzZXFfZmlsZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWtmcmVlKG0tPnByaXZhdGUpOwotCW0tPnByaXZhdGUgPSBOVUxMOwotCi0JcmV0dXJuIHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHBwb2wydHBfcHJvY19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHBwb2wydHBfcHJvY19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBwcHBvbDJ0cF9wcm9jX29wZW4sCiAJLnJlYWQJCT0gc2VxX3JlYWQsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBwcHBvbDJ0cF9wcm9jX3JlbGVhc2UsCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcHBvbDJ0cF9wcm9jOwotCiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNjA2LDYgKzI2MDEsNTcgQEAKIAkuaW9jdGwJCT0gcHBwb2wydHBfaW9jdGwKIH07CiAKK3N0YXRpYyBfX25ldF9pbml0IGludCBwcHBvbDJ0cF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBwcG9sMnRwX25ldCAqcG47CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7CisJaW50IGVycjsKKworCXBuID0ga3phbGxvYyhzaXplb2YoKnBuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0KTsKKwlyd2xvY2tfaW5pdCgmcG4tPnBwcG9sMnRwX3R1bm5lbF9saXN0X2xvY2spOworCisJZXJyID0gbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwb2wydHBfbmV0X2lkLCBwbik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlwZGUgPSBwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJwcHBvbDJ0cCIsIFNfSVJVR08sICZwcHBvbDJ0cF9wcm9jX2ZvcHMpOworI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJaWYgKCFwZGUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKKworb3V0OgorCWtmcmVlKHBuKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgX19uZXRfZXhpdCB2b2lkIHBwcG9sMnRwX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcHBwb2VfbmV0ICpwbjsKKworCXByb2NfbmV0X3JlbW92ZShuZXQsICJwcHBvbDJ0cCIpOworCXBuID0gbmV0X2dlbmVyaWMobmV0LCBwcHBvbDJ0cF9uZXRfaWQpOworCS8qCisJICogaWYgc29tZW9uZSBoYXMgY2FjaGVkIG91ciBuZXQgdGhlbgorCSAqIGZ1cnRoZXIgbmV0X2dlbmVyaWMgY2FsbCB3aWxsIHJldHVybiBOVUxMCisJICovCisJbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcHBwb2wydHBfbmV0X2lkLCBOVUxMKTsKKwlrZnJlZShwbik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgcHBwb2wydHBfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHBwcG9sMnRwX2luaXRfbmV0LAorCS5leGl0ID0gcHBwb2wydHBfZXhpdF9uZXQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBwcHBvbDJ0cF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKQEAgLTI2MTcsMjMgKzI2NjMsMTcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG9sMnRwX3Byb3RvOwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKLQlwcHBvbDJ0cF9wcm9jID0gcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAicHBwb2wydHAiLCAwLAotCQkJCQkgICAgICZwcHBvbDJ0cF9wcm9jX2ZvcHMpOwotCWlmICghcHBwb2wydHBfcHJvYykgewotCQllcnIgPSAtRU5PTUVNOworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZwcHBvbDJ0cF9uZXRfaWQsICZwcHBvbDJ0cF9uZXRfb3BzKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLworCiAJcHJpbnRrKEtFUk5fSU5GTyAiUFBQb0wyVFAga2VybmVsIGRyaXZlciwgJXNcbiIsCiAJICAgICAgIFBQUE9MMlRQX0RSVl9WRVJTSU9OKTsKIAogb3V0OgogCXJldHVybiBlcnI7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKIG91dF91bnJlZ2lzdGVyX3BwcG94X3Byb3RvOgogCXVucmVnaXN0ZXJfcHBwb3hfcHJvdG8oUFhfUFJPVE9fT0wyVFApOwotI2VuZGlmCiBvdXRfdW5yZWdpc3Rlcl9wcHBvbDJ0cF9wcm90bzoKIAlwcm90b191bnJlZ2lzdGVyKCZwcHBvbDJ0cF9za19wcm90byk7CiAJZ290byBvdXQ7CkBAIC0yNjQyLDEwICsyNjgyLDYgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcHBvbDJ0cF9leGl0KHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9wcHBveF9wcm90byhQWF9QUk9UT19PTDJUUCk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCXJlbW92ZV9wcm9jX2VudHJ5KCJwcHBvbDJ0cCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLSNlbmRpZgogCXByb3RvX3VucmVnaXN0ZXIoJnBwcG9sMnRwX3NrX3Byb3RvKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwb3guYyBiL2RyaXZlcnMvbmV0L3BwcG94LmMKaW5kZXggMDNhZWNjOS4uNGY2ZDMzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwb3guYworKysgYi9kcml2ZXJzL25ldC9wcHBveC5jCkBAIC0xMDgsOSArMTA4LDYgQEAKIHsKIAlpbnQgcmMgPSAtRVBST1RPVFlQRTsKIAotCWlmIChuZXQgIT0gJmluaXRfbmV0KQotCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKLQogCWlmIChwcm90b2NvbCA8IDAgfHwgcHJvdG9jb2wgPiBQWF9NQVhfUFJPVE8pCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKaW5kZXggNGI1NjRlZC4uMzA5MDBiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYwpAQCAtNzQ1LDcgKzc0NSw3IEBACiAJLyogTW92ZSB0aGUgbWFjIGFkZHJlc3NlcyB0byB0aGUgdG9wIG9mIGJ1ZmZlciAqLwogCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyBWTEFOX0hMRU4sIDIgKiBFVEhfQUxFTik7CiAKLQl2ZXRoLT5oX3ZsYW5fcHJvdG8gPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKTsKKwl2ZXRoLT5oX3ZsYW5fcHJvdG8gPSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSk7CiAJdmV0aC0+aF92bGFuX1RDSSA9IGh0b25zKHRhZyk7CiAKIAlyZXR1cm4gc2tiOwpAQCAtMTQwMyw2ICsxNDAzLDE5IEBACiAJCWF0b21pY19kZWMoJmNhcmQtPnR4X3RpbWVvdXRfdGFza19jb3VudGVyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBnZWxpY19uZXRkZXZpY2Vfb3BzID0geworCS5uZG9fb3BlbiA9IGdlbGljX25ldF9vcGVuLAorCS5uZG9fc3RvcCA9IGdlbGljX25ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdlbGljX25ldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2VsaWNfbmV0X3NldF9tdWx0aSwKKwkubmRvX2NoYW5nZV9tdHUgPSBnZWxpY19uZXRfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgPSBnZWxpY19uZXRfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gZ2VsaWNfbmV0X3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogLyoqCiAgKiBnZWxpY19ldGhlcl9zZXR1cF9uZXRkZXZfb3BzIC0gaW5pdGlhbGl6YXRpb24gb2YgbmV0X2RldmljZSBvcGVyYXRpb25zCiAgKiBAbmV0ZGV2OiBuZXRfZGV2aWNlIHN0cnVjdHVyZQpAQCAtMTQxMiwyMSArMTQyNSwxMiBAQAogc3RhdGljIHZvaWQgZ2VsaWNfZXRoZXJfc2V0dXBfbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQogewotCW5ldGRldi0+b3BlbiA9ICZnZWxpY19uZXRfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmZ2VsaWNfbmV0X3N0b3A7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmZ2VsaWNfbmV0X3htaXQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmZ2VsaWNfbmV0X3NldF9tdWx0aTsKLQluZXRkZXYtPmNoYW5nZV9tdHUgPSAmZ2VsaWNfbmV0X2NoYW5nZV9tdHU7Ci0JLyogdHggd2F0Y2hkb2cgKi8KLQluZXRkZXYtPnR4X3RpbWVvdXQgPSAmZ2VsaWNfbmV0X3R4X3RpbWVvdXQ7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IEdFTElDX05FVF9XQVRDSERPR19USU1FT1VUOwogCS8qIE5BUEkgKi8KIAluZXRpZl9uYXBpX2FkZChuZXRkZXYsIG5hcGksCiAJCSAgICAgICBnZWxpY19uZXRfcG9sbCwgR0VMSUNfTkVUX05BUElfV0VJR0hUKTsKIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJmdlbGljX2V0aGVyX2V0aHRvb2xfb3BzOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JbmV0ZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBnZWxpY19uZXRfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmdlbGljX25ldGRldmljZV9vcHM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYwppbmRleCAzMzVkYTQ4My4uYTVhYzJiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMKQEAgLTI2OTcsNiArMjY5NywxOSBAQAogCiAvKiAtLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdlbGljX3dsX25ldGRldmljZV9vcHMgPSB7CisJLm5kb19vcGVuID0gZ2VsaWNfd2xfb3BlbiwKKwkubmRvX3N0b3AgPSBnZWxpY193bF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdlbGljX25ldF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZ2VsaWNfbmV0X3NldF9tdWx0aSwKKwkubmRvX2NoYW5nZV9tdHUgPSBnZWxpY19uZXRfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgPSBnZWxpY19uZXRfdHhfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gZ2VsaWNfbmV0X3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKwogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBnZWxpY193bF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JPSBnZWxpY19uZXRfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCT0gZ2VsaWNfd2xfZ2V0X2xpbmssCkBAIC0yNzExLDIxICsyNzI0LDEyIEBACiAJc3RydWN0IGdlbGljX3dsX2luZm8gKndsOwogCXdsID0gcG9ydF93bChuZXRkZXZfcHJpdihuZXRkZXYpKTsKIAlCVUdfT04oIXdsKTsKLQluZXRkZXYtPm9wZW4gPSAmZ2VsaWNfd2xfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmZ2VsaWNfd2xfc3RvcDsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZnZWxpY19uZXRfeG1pdDsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZnZWxpY19uZXRfc2V0X211bHRpOwotCW5ldGRldi0+Y2hhbmdlX210dSA9ICZnZWxpY19uZXRfY2hhbmdlX210dTsKLQluZXRkZXYtPndpcmVsZXNzX2RhdGEgPSAmd2wtPndpcmVsZXNzX2RhdGE7Ci0JbmV0ZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZnZWxpY193bF93ZXh0X2hhbmRsZXJfZGVmOwotCS8qIHR4IHdhdGNoZG9nICovCi0JbmV0ZGV2LT50eF90aW1lb3V0ID0gJmdlbGljX25ldF90eF90aW1lb3V0OwogCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSBHRUxJQ19ORVRfV0FUQ0hET0dfVElNRU9VVDsKIAogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmZ2VsaWNfd2xfZXRodG9vbF9vcHM7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQluZXRkZXYtPnBvbGxfY29udHJvbGxlciA9IGdlbGljX25ldF9wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmZ2VsaWNfd2xfbmV0ZGV2aWNlX29wczsKKwluZXRkZXYtPndpcmVsZXNzX2RhdGEgPSAmd2wtPndpcmVsZXNzX2RhdGE7CisJbmV0ZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZnZWxpY193bF93ZXh0X2hhbmRsZXJfZGVmOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCmluZGV4IDE4OWVjMjkuLjhiMjgyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYworKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKQEAgLTIyOTIsNyArMjI5Miw3IEBACiAKIAlpZiAodHhfY2xlYW5lZCArIHJ4X2NsZWFuZWQgIT0gYnVkZ2V0KSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJcWxfdXBkYXRlX3NtYWxsX2J1ZnFfcHJvZF9pbmRleChxZGV2KTsKIAkJcWxfdXBkYXRlX2xyZ19idWZxX3Byb2RfaW5kZXgocWRldik7CiAJCXdyaXRlbChxZGV2LT5yc3BfY29uc3VtZXJfaW5kZXgsCkBAIC0yMzUxLDggKzIzNTEsOCBAQAogCQlzcGluX3VubG9jaygmcWRldi0+YWRhcHRlcl9sb2NrKTsKIAl9IGVsc2UgaWYgKHZhbHVlICYgSVNQX0lNUl9ESVNBQkxFX0NNUExfSU5UKSB7CiAJCXFsX2Rpc2FibGVfaW50ZXJydXB0cyhxZGV2KTsKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZxZGV2LT5uYXBpKSkpIHsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnFkZXYtPm5hcGkpOworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmcWRldi0+bmFwaSkpKSB7CisJCQlfX25hcGlfc2NoZWR1bGUoJnFkZXYtPm5hcGkpOwogCQl9CiAJfSBlbHNlIHsKIAkJcmV0dXJuIElSUV9OT05FOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmggYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAppbmRleCBhZmY5YzVmLi5mY2IxNTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAorKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaApAQCAtMjgsOCArMjgsOCBAQAogICAgICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUUxHRV9WRU5ET1JfSUQgICAgMHgxMDc3Ci0jZGVmaW5lIFFMR0VfREVWSUNFX0lEICAgIDB4ODAxMgotCisjZGVmaW5lIFFMR0VfREVWSUNFX0lEXzgwMTIJMHg4MDEyCisjZGVmaW5lIFFMR0VfREVWSUNFX0lEXzgwMDAJMHg4MDAwCiAjZGVmaW5lIE1BWF9DUFVTIDgKICNkZWZpbmUgTUFYX1RYX1JJTkdTIE1BWF9DUFVTCiAjZGVmaW5lIE1BWF9SWF9SSU5HUyAoKE1BWF9DUFVTICogMikgKyAxKQpAQCAtMTY0LDcgKzE2NCw3IEBACiAJQ1NSX1JQID0gKDEgPDwgMTApLAogCUNTUl9DTURfUEFSTV9TSElGVCA9IDIyLAogCUNTUl9DTURfTk9QID0gMHgwMDAwMDAwMCwKLQlDU1JfQ01EX1NFVF9SU1QgPSAweDEwMDAwMDAsCisJQ1NSX0NNRF9TRVRfUlNUID0gMHgxMDAwMDAwMCwKIAlDU1JfQ01EX0NMUl9SU1QgPSAweDIwMDAwMDAwLAogCUNTUl9DTURfU0VUX1BBVVNFID0gMHgzMDAwMDAwMCwKIAlDU1JfQ01EX0NMUl9QQVVTRSA9IDB4NDAwMDAwMDAsCkBAIC00MjQsNyArNDI0LDcgQEAKIAlSWF9TWU1CT0xfRVJSID0gMHgwMDAwMDM3MCwKIAlSWF9NQUNfRVJSID0gMHgwMDAwMDM3OCwKIAlSWF9DVExfUEtUUyA9IDB4MDAwMDAzODAsCi0JUlhfUEFVU0VfUEtUUyA9IDB4MDAwMDAzODQsCisJUlhfUEFVU0VfUEtUUyA9IDB4MDAwMDAzODgsCiAJUlhfNjRfUEtUUyA9IDB4MDAwMDAzOTAsCiAJUlhfNjVfVE9fMTI3X1BLVFMgPSAweDAwMDAwMzk4LAogCVJYXzEyOF8yNTVfUEtUUyA9IDB4MDAwMDAzYTAsCkBAIC03MzMsNiArNzMzLDExIEBACiAJQUVOX0xJTktfRE9XTiA9IDB4MDAwMDgwMTIsCiAJQUVOX0lEQ19DTVBMVCA9IDB4MDAwMDgxMDAsCiAJQUVOX0lEQ19SRVEgPSAweDAwMDA4MTAxLAorCUFFTl9JRENfRVhUID0gMHgwMDAwODEwMiwKKwlBRU5fRENCWF9DSEcgPSAweDAwMDA4MTEwLAorCUFFTl9BRU5fTE9TVCA9IDB4MDAwMDgxMjAsCisJQUVOX0FFTl9TRlBfSU4gPSAweDAwMDA4MTMwLAorCUFFTl9BRU5fU0ZQX09VVCA9IDB4MDAwMDgxMzEsCiAJQUVOX0ZXX0lOSVRfRE9ORSA9IDB4MDAwMDg0MDAsCiAJQUVOX0ZXX0lOSVRfRkFJTCA9IDB4MDAwMDg0MDEsCiAKQEAgLTc0Miw0MCArNzQ3LDQ4IEBACiAJTUJfQ01EX01CX1RFU1QgPSAweDAwMDAwMDA2LAogCU1CX0NNRF9DU1VNX1RFU1QgPSAweDAwMDAwMDA3LAkvKiBWZXJpZnkgQ2hlY2tzdW0gKi8KIAlNQl9DTURfQUJPVVRfRlcgPSAweDAwMDAwMDA4LAorCU1CX0NNRF9DT1BZX1JJU0NfUkFNID0gMHgwMDAwMDAwYSwKIAlNQl9DTURfTE9BRF9SSVNDX1JBTSA9IDB4MDAwMDAwMGIsCiAJTUJfQ01EX0RVTVBfUklTQ19SQU0gPSAweDAwMDAwMDBjLAogCU1CX0NNRF9XUklURV9SQU0gPSAweDAwMDAwMDBkLAorCU1CX0NNRF9JTklUX1JJU0NfUkFNID0gMHgwMDAwMDAwZSwKIAlNQl9DTURfUkVBRF9SQU0gPSAweDAwMDAwMDBmLAogCU1CX0NNRF9TVE9QX0ZXID0gMHgwMDAwMDAxNCwKIAlNQl9DTURfTUFLRV9TWVNfRVJSID0gMHgwMDAwMDAyYSwKKwlNQl9DTURfV1JJVEVfU0ZQID0gMHgwMDAwMDAzMCwKKwlNQl9DTURfUkVBRF9TRlAgPSAweDAwMDAwMDMxLAogCU1CX0NNRF9JTklUX0ZXID0gMHgwMDAwMDA2MCwKLQlNQl9DTURfR0VUX0lOSVRfQ0IgPSAweDAwMDAwMDYxLAorCU1CX0NNRF9HRVRfSUZDQiA9IDB4MDAwMDAwNjEsCiAJTUJfQ01EX0dFVF9GV19TVEFURSA9IDB4MDAwMDAwNjksCiAJTUJfQ01EX0lEQ19SRVEgPSAweDAwMDAwMTAwLAkvKiBJbnRlci1Ecml2ZXIgQ29tbXVuaWNhdGlvbiAqLwogCU1CX0NNRF9JRENfQUNLID0gMHgwMDAwMDEwMSwJLyogSW50ZXItRHJpdmVyIENvbW11bmljYXRpb24gKi8KIAlNQl9DTURfU0VUX1dPTF9NT0RFID0gMHgwMDAwMDExMCwJLyogV2FrZSBPbiBMYW4gKi8KLQlNQl9XT0xfRElTQUJMRSA9IDB4MDAwMDAwMDAsCi0JTUJfV09MX01BR0lDX1BLVCA9IDB4MDAwMDAwMDEsCi0JTUJfV09MX0ZMVFIgPSAweDAwMDAwMDAyLAotCU1CX1dPTF9VQ0FTVCA9IDB4MDAwMDAwMDQsCi0JTUJfV09MX01DQVNUID0gMHgwMDAwMDAwOCwKLQlNQl9XT0xfQkNBU1QgPSAweDAwMDAwMDEwLAotCU1CX1dPTF9MSU5LX1VQID0gMHgwMDAwMDAyMCwKLQlNQl9XT0xfTElOS19ET1dOID0gMHgwMDAwMDA0MCwKKwlNQl9XT0xfRElTQUJMRSA9IDAsCisJTUJfV09MX01BR0lDX1BLVCA9ICgxIDw8IDEpLAorCU1CX1dPTF9GTFRSID0gKDEgPDwgMiksCisJTUJfV09MX1VDQVNUID0gKDEgPDwgMyksCisJTUJfV09MX01DQVNUID0gKDEgPDwgNCksCisJTUJfV09MX0JDQVNUID0gKDEgPDwgNSksCisJTUJfV09MX0xJTktfVVAgPSAoMSA8PCA2KSwKKwlNQl9XT0xfTElOS19ET1dOID0gKDEgPDwgNyksCiAJTUJfQ01EX1NFVF9XT0xfRkxUUiA9IDB4MDAwMDAxMTEsCS8qIFdha2UgT24gTGFuIEZpbHRlciAqLwotCU1CX0NNRF9DTEVBUl9XT0xfRkxUUiA9IDB4MDAwMDAxMTIsCS8qIFdha2UgT24gTGFuIEZpbHRlciAqLworCU1CX0NNRF9DTEVBUl9XT0xfRkxUUiA9IDB4MDAwMDAxMTIsIC8qIFdha2UgT24gTGFuIEZpbHRlciAqLwogCU1CX0NNRF9TRVRfV09MX01BR0lDID0gMHgwMDAwMDExMywJLyogV2FrZSBPbiBMYW4gTWFnaWMgUGFja2V0ICovCi0JTUJfQ01EX0NMRUFSX1dPTF9NQUdJQyA9IDB4MDAwMDAxMTQsCS8qIFdha2UgT24gTGFuIE1hZ2ljIFBhY2tldCAqLworCU1CX0NNRF9DTEVBUl9XT0xfTUFHSUMgPSAweDAwMDAwMTE0LC8qIFdha2UgT24gTGFuIE1hZ2ljIFBhY2tldCAqLworCU1CX0NNRF9TRVRfV09MX0lNTUVEID0gMHgwMDAwMDExNSwKIAlNQl9DTURfUE9SVF9SRVNFVCA9IDB4MDAwMDAxMjAsCiAJTUJfQ01EX1NFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjIsCiAJTUJfQ01EX0dFVF9QT1JUX0NGRyA9IDB4MDAwMDAxMjMsCi0JTUJfQ01EX1NFVF9BU0lDX1ZPTFRTID0gMHgwMDAwMDEzMCwKLQlNQl9DTURfR0VUX1NOU19EQVRBID0gMHgwMDAwMDEzMSwJLyogVGVtcCBhbmQgVm9sdCBTZW5zZSBkYXRhLiAqLworCU1CX0NNRF9HRVRfTElOS19TVFMgPSAweDAwMDAwMTI0LAogCiAJLyogTWFpbGJveCBDb21tYW5kIFN0YXR1cy4gKi8KIAlNQl9DTURfU1RTX0dPT0QgPSAweDAwMDA0MDAwLAkvKiBTdWNjZXNzLiAqLwogCU1CX0NNRF9TVFNfSU5UUk1EVCA9IDB4MDAwMDEwMDAsCS8qIEludGVybWVkaWF0ZSBDb21wbGV0ZS4gKi8KLQlNQl9DTURfU1RTX0VSUiA9IDB4MDAwMDQwMDUsCS8qIEVycm9yLiAqLworCU1CX0NNRF9TVFNfSU5WTERfQ01EID0gMHgwMDAwNDAwMSwJLyogSW52YWxpZC4gKi8KKwlNQl9DTURfU1RTX1hGQ19FUlIgPSAweDAwMDA0MDAyLAkvKiBJbnRlcmZhY2UgRXJyb3IuICovCisJTUJfQ01EX1NUU19DU1VNX0VSUiA9IDB4MDAwMDQwMDMsCS8qIENzdW0gRXJyb3IuICovCisJTUJfQ01EX1NUU19FUlIgPSAweDAwMDA0MDA1LAkvKiBTeXN0ZW0gRXJyb3IuICovCisJTUJfQ01EX1NUU19QQVJBTV9FUlIgPSAweDAwMDA0MDA2LAkvKiBQYXJhbWV0ZXIgRXJyb3IuICovCiB9OwogCiBzdHJ1Y3QgbWJveF9wYXJhbXMgewpAQCAtNzg1LDcgKzc5OCw3IEBACiAJaW50IG91dF9jb3VudDsKIH07CiAKLXN0cnVjdCBmbGFzaF9wYXJhbXMgeworc3RydWN0IGZsYXNoX3BhcmFtc184MDEyIHsKIAl1OCBkZXZfaWRfc3RyWzRdOwogCV9fbGUxNiBzaXplOwogCV9fbGUxNiBjc3VtOwpAQCAtNzk1LDYgKzgwOCw0MyBAQAogCV9fbGUxNiByZXM7CiB9OwogCisvKiA4MDAwIGRldmljZSdzIGZsYXNoIGlzIGEgZGlmZmVyZW50IHN0cnVjdHVyZQorICogYXQgYSBkaWZmZXJlbnQgb2Zmc2V0IGluIGZsYXNoLgorICovCisjZGVmaW5lIEZVTkMwX0ZMQVNIX09GRlNFVCAweDE0MDIwMAorI2RlZmluZSBGVU5DMV9GTEFTSF9PRkZTRVQgMHgxNDA2MDAKKworLyogRmxhc2ggcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMuICovCitzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMDAgeworCXU4IGRldl9pZF9zdHJbNF07CS8qICI4MDAwIiAqLworCV9fbGUxNiB2ZXI7CisJX19sZTE2IHNpemU7CisJX19sZTE2IGNzdW07CisJX19sZTE2IHJlc2VydmVkMDsKKwlfX2xlMTYgdG90YWxfc2l6ZTsKKwlfX2xlMTYgZW50cnlfY291bnQ7CisJdTggZGF0YV90eXBlMDsKKwl1OCBkYXRhX3NpemUwOworCXU4IG1hY19hZGRyWzZdOworCXU4IGRhdGFfdHlwZTE7CisJdTggZGF0YV9zaXplMTsKKwl1OCBtYWNfYWRkcjFbNl07CisJdTggZGF0YV90eXBlMjsKKwl1OCBkYXRhX3NpemUyOworCV9fbGUxNiB2bGFuX2lkOworCXU4IGRhdGFfdHlwZTM7CisJdTggZGF0YV9zaXplMzsKKwlfX2xlMTYgbGFzdDsKKwl1OCByZXNlcnZlZDFbNDY0XTsKKwlfX2xlMTYJc3Vic3lzX3Zlbl9pZDsKKwlfX2xlMTYJc3Vic3lzX2Rldl9pZDsKKwl1OCByZXNlcnZlZDJbNF07Cit9OworCit1bmlvbiBmbGFzaF9wYXJhbXMgeworCXN0cnVjdCBmbGFzaF9wYXJhbXNfODAxMiBmbGFzaF9wYXJhbXNfODAxMjsKKwlzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMDAgZmxhc2hfcGFyYW1zXzgwMDA7Cit9OwogCiAvKgogICogZG9vcmJlbGwgc3BhY2UgZm9yIHRoZSByeCByaW5nIGNvbnRleHQKQEAgLTk2OCw2ICsxMDE4LDcgQEAKIAlfX2xlMTYgdmxhbl9pZDsJCS8qIDEyIGJpdHMgKi8KICNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX0MJMHgxMDAwCS8qIFZMQU4gQ0ZJIGJpdCAqLwogI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfQ09TX1NISUZUCTEyCS8qIGNsYXNzIG9mIHNlcnZpY2UgdmFsdWUgKi8KKyNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX1ZMQU5fTUFTSwkweDBmZmZmCiAKIAlfX2xlMTYgcmVzZXJ2ZWQxOwogCV9fbGUzMiByZXNlcnZlZDJbNl07CkBAIC0xMDMzLDYgKzEwODQsNyBAQAogI2RlZmluZSBRX0xFTl9DUFBfMTYJMHgwMDAxCiAjZGVmaW5lIFFfTEVOX0NQUF8zMgkweDAwMDIKICNkZWZpbmUgUV9MRU5fQ1BQXzY0CTB4MDAwMworI2RlZmluZSBRX0xFTl9DUFBfNTEyCTB4MDAwNgogCV9fbGUxNiBmbGFnczsKICNkZWZpbmUgUV9QUklfU0hJRlQJMQogI2RlZmluZSBRX0ZMQUdTX0xDCTB4MTAwMApAQCAtMTMxNCwyNyArMTM2Niw0OSBAQAogCVFMX0RNQTY0ID0gKDEgPDwgNSksCiAJUUxfUFJPTUlTQ1VPVVMgPSAoMSA8PCA2KSwKIAlRTF9BTExNVUxUSSA9ICgxIDw8IDcpLAorCVFMX1BPUlRfQ0ZHID0gKDEgPDwgOCksCisJUUxfQ0FNX1JUX1NFVCA9ICgxIDw8IDkpLAogfTsKIAogLyogbGlua19zdGF0dXMgYml0IGRlZmluaXRpb25zICovCiBlbnVtIHsKLQlMT09QQkFDS19NQVNLID0gMHgwMDAwMDcwMCwKLQlMT09QQkFDS19QQ1MgPSAweDAwMDAwMTAwLAotCUxPT1BCQUNLX0hTUyA9IDB4MDAwMDAyMDAsCi0JTE9PUEJBQ0tfRVhUID0gMHgwMDAwMDMwMCwKLQlQQVVTRV9NQVNLID0gMHgwMDAwMDBjMCwKLQlQQVVTRV9TVEQgPSAweDAwMDAwMDQwLAotCVBBVVNFX1BSSSA9IDB4MDAwMDAwODAsCi0JU1BFRURfTUFTSyA9IDB4MDAwMDAwMzgsCi0JU1BFRURfMTAwTWIgPSAweDAwMDAwMDAwLAotCVNQRUVEXzFHYiA9IDB4MDAwMDAwMDgsCi0JU1BFRURfMTBHYiA9IDB4MDAwMDAwMTAsCi0JTElOS19UWVBFX01BU0sgPSAweDAwMDAwMDA3LAotCUxJTktfVFlQRV9YRkkgPSAweDAwMDAwMDAxLAotCUxJTktfVFlQRV9YQVVJID0gMHgwMDAwMDAwMiwKLQlMSU5LX1RZUEVfWEZJX0JQID0gMHgwMDAwMDAwMywKLQlMSU5LX1RZUEVfWEFVSV9CUCA9IDB4MDAwMDAwMDQsCi0JTElOS19UWVBFXzEwR0JBU0VUID0gMHgwMDAwMDAwNSwKKwlTVFNfTE9PUEJBQ0tfTUFTSyA9IDB4MDAwMDA3MDAsCisJU1RTX0xPT1BCQUNLX1BDUyA9IDB4MDAwMDAxMDAsCisJU1RTX0xPT1BCQUNLX0hTUyA9IDB4MDAwMDAyMDAsCisJU1RTX0xPT1BCQUNLX0VYVCA9IDB4MDAwMDAzMDAsCisJU1RTX1BBVVNFX01BU0sgPSAweDAwMDAwMGMwLAorCVNUU19QQVVTRV9TVEQgPSAweDAwMDAwMDQwLAorCVNUU19QQVVTRV9QUkkgPSAweDAwMDAwMDgwLAorCVNUU19TUEVFRF9NQVNLID0gMHgwMDAwMDAzOCwKKwlTVFNfU1BFRURfMTAwTWIgPSAweDAwMDAwMDAwLAorCVNUU19TUEVFRF8xR2IgPSAweDAwMDAwMDA4LAorCVNUU19TUEVFRF8xMEdiID0gMHgwMDAwMDAxMCwKKwlTVFNfTElOS19UWVBFX01BU0sgPSAweDAwMDAwMDA3LAorCVNUU19MSU5LX1RZUEVfWEZJID0gMHgwMDAwMDAwMSwKKwlTVFNfTElOS19UWVBFX1hBVUkgPSAweDAwMDAwMDAyLAorCVNUU19MSU5LX1RZUEVfWEZJX0JQID0gMHgwMDAwMDAwMywKKwlTVFNfTElOS19UWVBFX1hBVUlfQlAgPSAweDAwMDAwMDA0LAorCVNUU19MSU5LX1RZUEVfMTBHQkFTRVQgPSAweDAwMDAwMDA1LAorfTsKKworLyogbGlua19jb25maWcgYml0IGRlZmluaXRpb25zICovCitlbnVtIHsKKwlDRkdfSlVNQk9fRlJBTUVfU0laRSA9IDB4MDAwMTAwMDAsCisJQ0ZHX1BBVVNFX01BU0sgPSAweDAwMDAwMDYwLAorCUNGR19QQVVTRV9TVEQgPSAweDAwMDAwMDIwLAorCUNGR19QQVVTRV9QUkkgPSAweDAwMDAwMDQwLAorCUNGR19EQ0JYID0gMHgwMDAwMDAxMCwKKwlDRkdfTE9PUEJBQ0tfTUFTSyA9IDB4MDAwMDAwMDcsCisJQ0ZHX0xPT1BCQUNLX1BDUyA9IDB4MDAwMDAwMDIsCisJQ0ZHX0xPT1BCQUNLX0hTUyA9IDB4MDAwMDAwMDQsCisJQ0ZHX0xPT1BCQUNLX0VYVCA9IDB4MDAwMDAwMDYsCisJQ0ZHX0RFRkFVTFRfTUFYX0ZSQU1FX1NJWkUgPSAweDAwMDAyNTgwLAorfTsKKworc3RydWN0IG5pY19vcGVyYXRpb25zIHsKKworCWludCAoKmdldF9mbGFzaCkgKHN0cnVjdCBxbF9hZGFwdGVyICopOworCWludCAoKnBvcnRfaW5pdGlhbGl6ZSkgKHN0cnVjdCBxbF9hZGFwdGVyICopOwogfTsKIAogLyoKQEAgLTEzNzcsNiArMTQ1MSw4IEBACiAKIAl1MzIgbWFpbGJveF9pbjsKIAl1MzIgbWFpbGJveF9vdXQ7CisJc3RydWN0IG1ib3hfcGFyYW1zIGlkY19tYmM7CisJc3RydWN0IG11dGV4CW1waV9tdXRleDsKIAogCWludCB0eF9yaW5nX3NpemU7CiAJaW50IHJ4X3Jpbmdfc2l6ZTsKQEAgLTE0MTIsOCArMTQ4OCwxMCBAQAogCXUzMiBwb3J0X2xpbmtfdXA7CiAJdTMyIHBvcnRfaW5pdDsKIAl1MzIgbGlua19zdGF0dXM7CisJdTMyIGxpbmtfY29uZmlnOworCXUzMiBtYXhfZnJhbWVfc2l6ZTsKIAotCXN0cnVjdCBmbGFzaF9wYXJhbXMgZmxhc2g7CisJdW5pb24gZmxhc2hfcGFyYW1zIGZsYXNoOwogCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnFfd29ya3F1ZXVlOwpAQCAtMTQyMSw2ICsxNDk5LDExIEBACiAJc3RydWN0IGRlbGF5ZWRfd29yayBhc2ljX3Jlc2V0X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfcmVzZXRfd29yazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1waV93b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgbXBpX3BvcnRfY2ZnX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfaWRjX3dvcms7CisJc3RydWN0IGNvbXBsZXRpb24gaWRlX2NvbXBsZXRpb247CisJc3RydWN0IG5pY19vcGVyYXRpb25zICpuaWNfb3BzOworCXUxNiBkZXZpY2VfaWQ7CiB9OwogCiAvKgpAQCAtMTQ5Myw2ICsxNTc2LDEwIEBACiB1MzIgcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgaW50cik7CiB2b2lkIHFsX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiBpbnQgcWxfcmVhZF94Z21hY19yZWc2NChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTY0ICpkYXRhKTsKK3ZvaWQgcWxfbXBpX2lkY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIHFsX21waV9wb3J0X2NmZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitpbnQgcWxfbWJfZ2V0X2Z3X3N0YXRlKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKK2ludCBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiAKICNpZiAxCiAjZGVmaW5lIFFMX0FMTF9EVU1QCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMKaW5kZXggMzc5Yjg5NS4uNDBhNzBjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYwpAQCAtODMsNiArODMsMTAgQEAKIHsKIAlpbnQgaTsKIAl1MzIgdmFsdWVbM107CisKKwlpID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoaSkKKwkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJaWYgKHFsX2dldF9tYWNfYWRkcl9yZWcocWRldiwgTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBpLCB2YWx1ZSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlgKQEAgLTExMSwxMiArMTE1LDE2IEBACiAJCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUsIGksIHZhbHVlWzFdLCB2YWx1ZVswXSk7CiAJCX0KIAl9CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiB9CiAKIHZvaWQgcWxfZHVtcF9yb3V0aW5nX2VudHJpZXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IGk7CiAJdTMyIHZhbHVlOworCWkgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlpZiAoaSkKKwkJcmV0dXJuOwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXZhbHVlID0gMDsKIAkJaWYgKHFsX2dldF9yb3V0aW5nX3JlZyhxZGV2LCBpLCAmdmFsdWUpKSB7CkBAIC0xMzEsNiArMTM5LDcgQEAKIAkJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSwgaSwgdmFsdWUpOwogCQl9CiAJfQorCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIH0KIAogdm9pZCBxbF9kdW1wX3JlZ3Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYwppbmRleCA5ZDkyMmUyLi5hNTAwNzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKQEAgLTI3MSw3ICsyNzEsOCBAQAogCWVjbWQtPmFkdmVydGlzaW5nID0gQURWRVJUSVNFRF8xMDAwMGJhc2VUX0Z1bGw7CiAJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwogCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKLQlpZiAoKHFkZXYtPmxpbmtfc3RhdHVzICYgTElOS19UWVBFX01BU0spID09IExJTktfVFlQRV8xMEdCQVNFVCkgeworCWlmICgocWRldi0+bGlua19zdGF0dXMgJiBTVFNfTElOS19UWVBFX01BU0spID09CisJCQkJU1RTX0xJTktfVFlQRV8xMEdCQVNFVCkgewogCQllY21kLT5zdXBwb3J0ZWQgfD0gKFNVUFBPUlRFRF9UUCB8IFNVUFBPUlRFRF9BdXRvbmVnKTsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gKEFEVkVSVElTRURfVFAgfCBBRFZFUlRJU0VEX0F1dG9uZWcpOwogCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IDkxMTkxZjcuLjE3MGQzNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwpAQCAtNTgsOCArNTgsOCBAQAogICAgIE5FVElGX01TR19JRlVQIHwKICAgICBORVRJRl9NU0dfUlhfRVJSIHwKICAgICBORVRJRl9NU0dfVFhfRVJSIHwKLSAgICBORVRJRl9NU0dfVFhfUVVFVUVEIHwKLSAgICBORVRJRl9NU0dfSU5UUiB8IE5FVElGX01TR19UWF9ET05FIHwgTkVUSUZfTVNHX1JYX1NUQVRVUyB8CisvKiAgTkVUSUZfTVNHX1RYX1FVRVVFRCB8ICovCisvKiAgTkVUSUZfTVNHX0lOVFIgfCBORVRJRl9NU0dfVFhfRE9ORSB8IE5FVElGX01TR19SWF9TVEFUVVMgfCAqLwogLyogTkVUSUZfTVNHX1BLVERBVEEgfCAqLwogICAgIE5FVElGX01TR19IVyB8IE5FVElGX01TR19XT0wgfCAwOwogCkBAIC03NSw3ICs3NSw4IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlycV90eXBlLCAiMCA9IE1TSS1YLCAxID0gTVNJLCAyID0gTGVnYWN5LiIpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcWxnZV9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSUQpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUxHRV9ERVZJQ0VfSURfODAxMil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBRTEdFX0RFVklDRV9JRF84MDAwKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLH0KIH07CkBAIC0yNDcsOSArMjQ4LDYgQEAKIAl1MzIgb2Zmc2V0ID0gMDsKIAlpbnQgc3RhdHVzOwogCi0Jc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKLQlpZiAoc3RhdHVzKQotCQlyZXR1cm4gc3RhdHVzOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTUFDX0FERFJfVFlQRV9NVUxUSV9NQUM6CiAJY2FzZSBNQUNfQUREUl9UWVBFX0NBTV9NQUM6CkBAIC0zMDgsNyArMzA2LDYgQEAKIAkJc3RhdHVzID0gLUVQRVJNOwogCX0KIGV4aXQ6Ci0JcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzIxLDkgKzMxOCw2IEBACiAJdTMyIG9mZnNldCA9IDA7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBNQUNfQUREUl9UWVBFX01VTFRJX01BQzoKIAljYXNlIE1BQ19BRERSX1RZUEVfQ0FNX01BQzoKQEAgLTMzNCw3ICszMjgsNyBAQAogCQkJICAgIChhZGRyWzJdIDw8IDI0KSB8IChhZGRyWzNdIDw8IDE2KSB8IChhZGRyWzRdIDw8IDgpIHwKIAkJCSAgICAoYWRkcls1XSk7CiAKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJIkFkZGluZyAlcyBhZGRyZXNzICVwTSIKIAkJCQkiIGF0IGluZGV4ICVkIGluIHRoZSBDQU0uXG4iLAogCQkJCSgodHlwZSA9PQpAQCAtNDE1LDcgKzQwOSw2IEBACiAJCXN0YXR1cyA9IC1FUEVSTTsKIAl9CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTQyNiwxMCArNDE5LDYgQEAKIHsKIAlpbnQgc3RhdHVzID0gMDsKIAotCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwotCWlmIChzdGF0dXMpCi0JCWdvdG8gZXhpdDsKLQogCXN0YXR1cyA9IHFsX3dhaXRfcmVnX3JkeShxZGV2LCBSVF9JRFgsIFJUX0lEWF9NVywgMCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBleGl0OwpAQCAtNDQxLDcgKzQzMCw2IEBACiAJCWdvdG8gZXhpdDsKIAkqdmFsdWUgPSBxbF9yZWFkMzIocWRldiwgUlRfREFUQSk7CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC00NTMsMTMgKzQ0MSw5IEBACiBzdGF0aWMgaW50IHFsX3NldF9yb3V0aW5nX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGluZGV4LCB1MzIgbWFzaywKIAkJCSAgICAgIGludCBlbmFibGUpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzID0gLUVJTlZBTDsgLyogUmV0dXJuIGVycm9yIGlmIG5vIG1hc2sgbWF0Y2guICovCiAJdTMyIHZhbHVlID0gMDsKIAotCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7Ci0KIAlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAogCQkiJXMgJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMgbWFzayAlcyB0aGUgcm91dGluZyByZWcuXG4iLAogCQkoZW5hYmxlID8gIkFkZGluZyIgOiAiUmVtb3ZpbmciKSwKQEAgLTU1NSw3ICs1MzksNiBAQAogCQlxbF93cml0ZTMyKHFkZXYsIFJUX0RBVEEsIGVuYWJsZSA/IG1hc2sgOiAwKTsKIAl9CiBleGl0OgotCXFsX3NlbV91bmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC02MDQsNyArNTg3LDYgQEAKIHN0YXRpYyB1MzIgcWxfZGlzYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGludHIpCiB7CiAJdTMyIHZhciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBod19mbGFnczsKIAlzdHJ1Y3QgaW50cl9jb250ZXh0ICpjdHg7CiAKIAkvKiBIVyBkaXNhYmxlcyBmb3IgdXMgaWYgd2UncmUgTVNJWCBtdWx0aSBpbnRlcnJ1cHRzIGFuZApAQCAtNjE0LDE0ICs1OTYsMTQgQEAKIAkJcmV0dXJuIDA7CiAKIAljdHggPSBxZGV2LT5pbnRyX2NvbnRleHQgKyBpbnRyOwotCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlpZiAoIWF0b21pY19yZWFkKCZjdHgtPmlycV9jbnQpKSB7CiAJCXFsX3dyaXRlMzIocWRldiwgSU5UUl9FTiwKIAkJY3R4LT5pbnRyX2Rpc19tYXNrKTsKIAkJdmFyID0gcWxfcmVhZDMyKHFkZXYsIFNUUyk7CiAJfQogCWF0b21pY19pbmMoJmN0eC0+aXJxX2NudCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlyZXR1cm4gdmFyOwogfQogCkBAIC02NDEsNiArNjIzLDI4IEBACiAKIH0KIAorc3RhdGljIGludCBxbF92YWxpZGF0ZV9mbGFzaChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHNpemUsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgc3RhdHVzLCBpOworCXUxNiBjc3VtID0gMDsKKwlfX2xlMTYgKmZsYXNoID0gKF9fbGUxNiAqKSZxZGV2LT5mbGFzaDsKKworCXN0YXR1cyA9IHN0cm5jbXAoKGNoYXIgKikmcWRldi0+Zmxhc2gsIHN0ciwgNCk7CisJaWYgKHN0YXR1cykgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkludmFsaWQgZmxhc2ggc2lnbmF0dXJlLlxuIik7CisJCXJldHVybglzdGF0dXM7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJY3N1bSArPSBsZTE2X3RvX2NwdSgqZmxhc2grKyk7CisKKwlpZiAoY3N1bSkKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCisJCQkiSW52YWxpZCBmbGFzaCBjaGVja3N1bSwgY3N1bSA9IDB4JS4wNHguXG4iLCBjc3VtKTsKKworCXJldHVybiBjc3VtOworfQorCiBzdGF0aWMgaW50IHFsX3JlYWRfZmxhc2hfd29yZChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgaW50IG9mZnNldCwgX19sZTMyICpkYXRhKQogewogCWludCBzdGF0dXMgPSAwOwpAQCAtNjY1LDIzICs2NjksNzUgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IHFsX2dldF9mbGFzaF9wYXJhbXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCitzdGF0aWMgaW50IHFsX2dldF84MDAwX2ZsYXNoX3BhcmFtcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwl1MzIgaSwgc2l6ZTsKKwlpbnQgc3RhdHVzOworCV9fbGUzMiAqcCA9IChfX2xlMzIgKikmcWRldi0+Zmxhc2g7CisJdTMyIG9mZnNldDsKKworCS8qIEdldCBmbGFzaCBvZmZzZXQgZm9yIGZ1bmN0aW9uIGFuZCBhZGp1c3QKKwkgKiBmb3IgZHdvcmQgYWNjZXNzLgorCSAqLworCWlmICghcWRldi0+ZnVuYykKKwkJb2Zmc2V0ID0gRlVOQzBfRkxBU0hfT0ZGU0VUIC8gc2l6ZW9mKHUzMik7CisJZWxzZQorCQlvZmZzZXQgPSBGVU5DMV9GTEFTSF9PRkZTRVQgLyBzaXplb2YodTMyKTsKKworCWlmIChxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX0ZMQVNIX01BU0spKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDAwKSAvIHNpemVvZih1MzIpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyssIHArKykgeworCQlzdGF0dXMgPSBxbF9yZWFkX2ZsYXNoX3dvcmQocWRldiwgaStvZmZzZXQsIHApOworCQlpZiAoc3RhdHVzKSB7CisJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkVycm9yIHJlYWRpbmcgZmxhc2guXG4iKTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCXN0YXR1cyA9IHFsX3ZhbGlkYXRlX2ZsYXNoKHFkZXYsCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDAwKSAvIHNpemVvZih1MTYpLAorCQkJIjgwMDAiKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLmZsYXNoX3BhcmFtc184MDAwLm1hY19hZGRyKSkgeworCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkludmFsaWQgTUFDIGFkZHJlc3MuXG4iKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBleGl0OworCX0KKworCW1lbWNweShxZGV2LT5uZGV2LT5kZXZfYWRkciwKKwkJcWRldi0+Zmxhc2guZmxhc2hfcGFyYW1zXzgwMDAubWFjX2FkZHIsCisJCXFkZXYtPm5kZXYtPmFkZHJfbGVuKTsKKworZXhpdDoKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9GTEFTSF9NQVNLKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHFsX2dldF84MDEyX2ZsYXNoX3BhcmFtcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKIAlpbnQgaTsKIAlpbnQgc3RhdHVzOwogCV9fbGUzMiAqcCA9IChfX2xlMzIgKikmcWRldi0+Zmxhc2g7CiAJdTMyIG9mZnNldCA9IDA7CisJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDEyKSAvIHNpemVvZih1MzIpOwogCiAJLyogU2Vjb25kIGZ1bmN0aW9uJ3MgcGFyYW1ldGVycyBmb2xsb3cgdGhlIGZpcnN0CiAJICogZnVuY3Rpb24ncy4KIAkgKi8KIAlpZiAocWRldi0+ZnVuYykKLQkJb2Zmc2V0ID0gc2l6ZW9mKHFkZXYtPmZsYXNoKSAvIHNpemVvZih1MzIpOworCQlvZmZzZXQgPSBzaXplOwogCiAJaWYgKHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fRkxBU0hfTUFTSykpCiAJCXJldHVybiAtRVRJTUVET1VUOwogCi0JZm9yIChpID0gMDsgaSA8IHNpemVvZihxZGV2LT5mbGFzaCkgLyBzaXplb2YodTMyKTsgaSsrLCBwKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBwKyspIHsKIAkJc3RhdHVzID0gcWxfcmVhZF9mbGFzaF93b3JkKHFkZXYsIGkrb2Zmc2V0LCBwKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJFcnJvciByZWFkaW5nIGZsYXNoLlxuIik7CkBAIC02ODksNiArNzQ1LDI1IEBACiAJCX0KIAogCX0KKworCXN0YXR1cyA9IHFsX3ZhbGlkYXRlX2ZsYXNoKHFkZXYsCisJCQlzaXplb2Yoc3RydWN0IGZsYXNoX3BhcmFtc184MDEyKSAvIHNpemVvZih1MTYpLAorCQkJIjgwMTIiKTsKKwlpZiAoc3RhdHVzKSB7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBmbGFzaC5cbiIpOworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLmZsYXNoX3BhcmFtc184MDEyLm1hY19hZGRyKSkgeworCQlzdGF0dXMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJbWVtY3B5KHFkZXYtPm5kZXYtPmRldl9hZGRyLAorCQlxZGV2LT5mbGFzaC5mbGFzaF9wYXJhbXNfODAxMi5tYWNfYWRkciwKKwkJcWRldi0+bmRldi0+YWRkcl9sZW4pOworCiBleGl0OgogCXFsX3NlbV91bmxvY2socWRldiwgU0VNX0ZMQVNIX01BU0spOwogCXJldHVybiBzdGF0dXM7CkBAIC03NTksMTMgKzgzNCwyNSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBpbnQgcWxfODAwMF9wb3J0X2luaXRpYWxpemUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IHN0YXR1czsKKwlzdGF0dXMgPSBxbF9tYl9nZXRfZndfc3RhdGUocWRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0OworCS8qIFdha2UgdXAgYSB3b3JrZXIgdG8gZ2V0L3NldCB0aGUgVFgvUlggZnJhbWUgc2l6ZXMuICovCisJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwgJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrLCAwKTsKK2V4aXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKwogLyogVGFrZSB0aGUgTUFDIENvcmUgb3V0IG9mIHJlc2V0LgogICogRW5hYmxlIHN0YXRpc3RpY3MgY291bnRpbmcuCiAgKiBUYWtlIHRoZSB0cmFuc21pdHRlci9yZWNlaXZlciBvdXQgb2YgcmVzZXQuCiAgKiBUaGlzIGZ1bmN0aW9uYWxpdHkgbWF5IGJlIGRvbmUgaW4gdGhlIE1QSSBmaXJtd2FyZSBhdCBhCiAgKiBsYXRlciBkYXRlLgogICovCi1zdGF0aWMgaW50IHFsX3BvcnRfaW5pdGlhbGl6ZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3N0YXRpYyBpbnQgcWxfODAxMl9wb3J0X2luaXRpYWxpemUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJaW50IHN0YXR1cyA9IDA7CiAJdTMyIGRhdGE7CkBAIC04ODEsNyArOTY4LDggQEAKIC8qIFByb2Nlc3MgKHJlZmlsbCkgYSBsYXJnZSBidWZmZXIgcXVldWUuICovCiBzdGF0aWMgdm9pZCBxbF91cGRhdGVfbGJxKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZykKIHsKLQlpbnQgY2xlYW5faWR4ID0gcnhfcmluZy0+bGJxX2NsZWFuX2lkeDsKKwl1MzIgY2xlYW5faWR4ID0gcnhfcmluZy0+bGJxX2NsZWFuX2lkeDsKKwl1MzIgc3RhcnRfaWR4ID0gY2xlYW5faWR4OwogCXN0cnVjdCBicV9kZXNjICpsYnFfZGVzYzsKIAl1NjQgbWFwOwogCWludCBpOwpAQCAtOTI4LDE5ICsxMDE2LDIzIEBACiAJCXJ4X3JpbmctPmxicV9wcm9kX2lkeCArPSAxNjsKIAkJaWYgKHJ4X3JpbmctPmxicV9wcm9kX2lkeCA9PSByeF9yaW5nLT5sYnFfbGVuKQogCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4ID0gMDsKKwkJcnhfcmluZy0+bGJxX2ZyZWVfY250IC09IDE2OworCX0KKworCWlmIChzdGFydF9pZHggIT0gY2xlYW5faWR4KSB7CiAJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKIAkJCSJsYnE6IHVwZGF0aW5nIHByb2QgaWR4ID0gJWQuXG4iLAogCQkJcnhfcmluZy0+bGJxX3Byb2RfaWR4KTsKIAkJcWxfd3JpdGVfZGJfcmVnKHJ4X3JpbmctPmxicV9wcm9kX2lkeCwKIAkJCQlyeF9yaW5nLT5sYnFfcHJvZF9pZHhfZGJfcmVnKTsKLQkJcnhfcmluZy0+bGJxX2ZyZWVfY250IC09IDE2OwogCX0KIH0KIAogLyogUHJvY2VzcyAocmVmaWxsKSBhIHNtYWxsIGJ1ZmZlciBxdWV1ZS4gKi8KIHN0YXRpYyB2b2lkIHFsX3VwZGF0ZV9zYnEoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewotCWludCBjbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfY2xlYW5faWR4OworCXUzMiBjbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfY2xlYW5faWR4OworCXUzMiBzdGFydF9pZHggPSBjbGVhbl9pZHg7CiAJc3RydWN0IGJxX2Rlc2MgKnNicV9kZXNjOwogCXU2NCBtYXA7CiAJaW50IGk7CkBAIC05OTAsMTMgKzEwODIsMTUgQEAKIAkJcnhfcmluZy0+c2JxX3Byb2RfaWR4ICs9IDE2OwogCQlpZiAocnhfcmluZy0+c2JxX3Byb2RfaWR4ID09IHJ4X3JpbmctPnNicV9sZW4pCiAJCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHggPSAwOworCQlyeF9yaW5nLT5zYnFfZnJlZV9jbnQgLT0gMTY7CisJfQorCisJaWYgKHN0YXJ0X2lkeCAhPSBjbGVhbl9pZHgpIHsKIAkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAogCQkJInNicTogdXBkYXRpbmcgcHJvZCBpZHggPSAlZC5cbiIsCiAJCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHgpOwogCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+c2JxX3Byb2RfaWR4LAogCQkJCXJ4X3JpbmctPnNicV9wcm9kX2lkeF9kYl9yZWcpOwotCi0JCXJ4X3JpbmctPnNicV9mcmVlX2NudCAtPSAxNjsKIAl9CiB9CiAKQEAgLTE0MTIsNiArMTUwNiw4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXUxNiB2bGFuX2lkID0gKGxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpICYKKwkJCUlCX01BQ19JT0NCX1JTUF9WTEFOX01BU0spCiAKIAlRTF9EVU1QX0lCX01BQ19SU1AoaWJfbWFjX3JzcCk7CiAKQEAgLTE0NjMsMTggKzE1NTksMjYgQEAKIAkJCX0KIAkJfQogCX0KKwogCXFkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlxZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKLQlpZiAocWRldi0+dmxncnAgJiYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSkgewotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkiUGFzc2luZyBhIFZMQU4gcGFja2V0IHVwc3RyZWFtLlxuIik7Ci0JCXZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIHFkZXYtPnZsZ3JwLAotCQkJCWxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpKTsKKwlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwKKwkJcnhfcmluZy0+Y3FfaWQgLSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZCk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJCWlmIChxZGV2LT52bGdycCAmJgorCQkJKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9WKSAmJgorCQkJKHZsYW5faWQgIT0gMCkpCisJCQl2bGFuX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBxZGV2LT52bGdycCwKKwkJCQl2bGFuX2lkLCBza2IpOworCQllbHNlCisJCQluYXBpX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBza2IpOwogCX0gZWxzZSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCSJQYXNzaW5nIGEgbm9ybWFsIHBhY2tldCB1cHN0cmVhbS5cbiIpOwotCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQlpZiAocWRldi0+dmxncnAgJiYKKwkJCShpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVikgJiYKKwkJCSh2bGFuX2lkICE9IDApKQorCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcWRldi0+dmxncnAsIHZsYW5faWQpOworCQllbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0KIH0KIApAQCAtMTUyMSwxNCArMTYyNSwxMiBAQAogLyogRmlyZSB1cCBhIGhhbmRsZXIgdG8gcmVzZXQgdGhlIE1QSSBwcm9jZXNzb3IuICovCiB2b2lkIHFsX3F1ZXVlX2Z3X2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCW5ldGlmX3N0b3BfcXVldWUocWRldi0+bmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwgJnFkZXYtPm1waV9yZXNldF93b3JrLCAwKTsKIH0KIAogdm9pZCBxbF9xdWV1ZV9hc2ljX2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCW5ldGlmX3N0b3BfcXVldWUocWRldi0+bmRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CiAJcWxfZGlzYWJsZV9pbnRlcnJ1cHRzKHFkZXYpOwogCS8qIENsZWFyIGFkYXB0ZXIgdXAgYml0IHRvIHNpZ25hbCB0aGUgcmVjb3ZlcnkKQEAgLTE1ODMsNiArMTY4NSw3IEBACiAJc3RydWN0IG9iX21hY19pb2NiX3JzcCAqbmV0X3JzcCA9IE5VTEw7CiAJaW50IGNvdW50ID0gMDsKIAorCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nOwogCS8qIFdoaWxlIHRoZXJlIGFyZSBlbnRyaWVzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlLiAqLwogCXdoaWxlIChwcm9kICE9IHJ4X3JpbmctPmNuc21yX2lkeCkgewogCkBAIC0xNjA4LDE1ICsxNzExLDE2IEBACiAJCXByb2QgPSBxbF9yZWFkX3NoX3JlZyhyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcpOwogCX0KIAlxbF93cml0ZV9jcV9pZHgocnhfcmluZyk7Ci0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocWRldi0+bmRldikgJiYgbmV0X3JzcCAhPSBOVUxMKSB7Ci0JCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nID0gJnFkZXYtPnR4X3JpbmdbbmV0X3JzcC0+dHhxX2lkeF07CisJdHhfcmluZyA9ICZxZGV2LT50eF9yaW5nW25ldF9yc3AtPnR4cV9pZHhdOworCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQocWRldi0+bmRldiwgdHhfcmluZy0+d3FfaWQpICYmCisJCQkJCW5ldF9yc3AgIT0gTlVMTCkgewogCQlpZiAoYXRvbWljX3JlYWQoJnR4X3JpbmctPnF1ZXVlX3N0b3BwZWQpICYmCiAJCSAgICAoYXRvbWljX3JlYWQoJnR4X3JpbmctPnR4X2NvdW50KSA+ICh0eF9yaW5nLT53cV9sZW4gLyA0KSkpCiAJCQkvKgogCQkJICogVGhlIHF1ZXVlIGdvdCBzdG9wcGVkIGJlY2F1c2UgdGhlIHR4X3Jpbmcgd2FzIGZ1bGwuCiAJCQkgKiBXYWtlIGl0IHVwLCBiZWNhdXNlIGl0J3Mgbm93IGF0IGxlYXN0IDI1JSBlbXB0eS4KIAkJCSAqLwotCQkJbmV0aWZfd2FrZV9xdWV1ZShxZGV2LT5uZGV2KTsKKwkJCW5ldGlmX3dha2Vfc3VicXVldWUocWRldi0+bmRldiwgdHhfcmluZy0+d3FfaWQpOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTE2NzcsNyArMTc4MSw3IEBACiAJCXJ4X3JpbmctPmNxX2lkKTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJcWxfZW5hYmxlX2NvbXBsZXRpb25faW50ZXJydXB0KHFkZXYsIHJ4X3JpbmctPmlycSk7CiAJfQogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNzAzLDE5ICsxODA3LDI5IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1MzIgZW5hYmxlX2JpdCA9IE1BQ19BRERSX0U7CisJaW50IHN0YXR1czsKIAorCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuOwogCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7CiAJaWYgKHFsX3NldF9tYWNfYWRkcl9yZWcKIAkgICAgKHFkZXYsICh1OCAqKSAmZW5hYmxlX2JpdCwgTUFDX0FERFJfVFlQRV9WTEFOLCB2aWQpKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGluaXQgdmxhbiBhZGRyZXNzLlxuIik7CiAJfQogCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgcWxfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTE2IHZpZCkKIHsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXUzMiBlbmFibGVfYml0ID0gMDsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm47CiAKIAlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwogCWlmIChxbF9zZXRfbWFjX2FkZHJfcmVnCkBAIC0xNzIzLDYgKzE4MzcsNyBAQAogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBjbGVhciB2bGFuIGFkZHJlc3MuXG4iKTsKIAl9CiAJc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOworCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCiB9CiAKQEAgLTE3NjIsNyArMTg3Nyw3IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgcWxnZV9tc2l4X3J4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcgPSBkZXZfaWQ7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnJ4X3JpbmctPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnJ4X3JpbmctPm5hcGkpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTg0OCw3ICsxOTYzLDcgQEAKIAkJCQkJCQkgICAgICAmcnhfcmluZy0+cnhfd29yaywKIAkJCQkJCQkgICAgICAwKTsKIAkJCQllbHNlCi0JCQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKKwkJCQkJbmFwaV9zY2hlZHVsZSgmcnhfcmluZy0+bmFwaSk7CiAJCQkJd29ya19kb25lKys7CiAJCQl9CiAJCX0KQEAgLTE5MzcsNyArMjA1Miw3IEBACiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgdHNvOwogCXN0cnVjdCB0eF9yaW5nICp0eF9yaW5nOwotCXUzMiB0eF9yaW5nX2lkeCA9ICh1MzIpIFFMX1RYUV9JRFgocWRldiwgc2tiKTsKKwl1MzIgdHhfcmluZ19pZHggPSAodTMyKSBza2ItPnF1ZXVlX21hcHBpbmc7CiAKIAl0eF9yaW5nID0gJnFkZXYtPnR4X3JpbmdbdHhfcmluZ19pZHhdOwogCkBAIC0xOTQ4LDcgKzIwNjMsNyBAQAogCQlRUFJJTlRLKHFkZXYsIFRYX1FVRVVFRCwgSU5GTywKIAkJCSIlczogc2h1dHRpbmcgZG93biB0eCBxdWV1ZSAlZCBkdSB0byBsYWNrIG9mIHJlc291cmNlcy5cbiIsCiAJCQlfX2Z1bmNfXywgdHhfcmluZ19pZHgpOwotCQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOworCQluZXRpZl9zdG9wX3N1YnF1ZXVlKG5kZXYsIHR4X3JpbmctPndxX2lkKTsKIAkJYXRvbWljX2luYygmdHhfcmluZy0+cXVldWVfc3RvcHBlZCk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CkBAIC0yMDI5LDYgKzIxNDQsNyBAQAogCQkJIkFsbG9jYXRpb24gb2YgUlggc2hhZG93IHNwYWNlIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJbWVtc2V0KHFkZXYtPnJ4X3Jpbmdfc2hhZG93X3JlZ19hcmVhLCAwLCBQQUdFX1NJWkUpOwogCXFkZXYtPnR4X3Jpbmdfc2hhZG93X3JlZ19hcmVhID0KIAkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocWRldi0+cGRldiwgUEFHRV9TSVpFLAogCQkJCSAmcWRldi0+dHhfcmluZ19zaGFkb3dfcmVnX2RtYSk7CkBAIC0yMDM3LDYgKzIxNTMsNyBAQAogCQkJIkFsbG9jYXRpb24gb2YgVFggc2hhZG93IHNwYWNlIGZhaWxlZC5cbiIpOwogCQlnb3RvIGVycl93cXBfc2hfYXJlYTsKIAl9CisJbWVtc2V0KHFkZXYtPnR4X3Jpbmdfc2hhZG93X3JlZ19hcmVhLCAwLCBQQUdFX1NJWkUpOwogCXJldHVybiAwOwogCiBlcnJfd3FwX3NoX2FyZWE6CkBAIC0yMTIxLDQ3ICsyMjM4LDYgQEAKIAl9CiB9CiAKLS8qCi0gKiBBbGxvY2F0ZSBhbmQgbWFwIGEgcGFnZSBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBsYnEuCi0gKi8KLXN0YXRpYyBpbnQgcWxfYWxsb2NfbGJxX2J1ZmZlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCi0JCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGJxX2Rlc2MgKmxicV9kZXNjOwotCXU2NCBtYXA7Ci0JX19sZTY0ICpicSA9IHJ4X3JpbmctPmxicV9iYXNlOwotCi0JZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmxicV9sZW47IGkrKykgewotCQlsYnFfZGVzYyA9ICZyeF9yaW5nLT5sYnFbaV07Ci0JCW1lbXNldChsYnFfZGVzYywgMCwgc2l6ZW9mKGxicV9kZXNjKSk7Ci0JCWxicV9kZXNjLT5hZGRyID0gYnE7Ci0JCWxicV9kZXNjLT5pbmRleCA9IGk7Ci0JCWxicV9kZXNjLT5wLmxicV9wYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDKTsKLQkJaWYgKHVubGlrZWx5KCFsYnFfZGVzYy0+cC5sYnFfcGFnZSkpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiZmFpbGVkIGFsbG9jX3BhZ2UoKS5cbiIpOwotCQkJZ290byBtZW1fZXJyb3I7Ci0JCX0gZWxzZSB7Ci0JCQltYXAgPSBwY2lfbWFwX3BhZ2UocWRldi0+cGRldiwKLQkJCQkJICAgbGJxX2Rlc2MtPnAubGJxX3BhZ2UsCi0JCQkJCSAgIDAsIFBBR0VfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKSkgewotCQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCQkiUENJIG1hcHBpbmcgZmFpbGVkLlxuIik7Ci0JCQkJZ290byBtZW1fZXJyb3I7Ci0JCQl9Ci0JCQlwY2lfdW5tYXBfYWRkcl9zZXQobGJxX2Rlc2MsIG1hcGFkZHIsIG1hcCk7Ci0JCQlwY2lfdW5tYXBfbGVuX3NldChsYnFfZGVzYywgbWFwbGVuLCBQQUdFX1NJWkUpOwotCQkJKmxicV9kZXNjLT5hZGRyID0gY3B1X3RvX2xlNjQobWFwKTsKLQkJfQotCQlicSsrOwotCX0KLQlyZXR1cm4gMDsKLW1lbV9lcnJvcjoKLQlxbF9mcmVlX2xicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCXJldHVybiAtRU5PTUVNOwotfQotCiBzdGF0aWMgdm9pZCBxbF9mcmVlX3NicV9idWZmZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZykKIHsKIAlpbnQgaTsKQEAgLTIxODQsNjMgKzIyNjAsNzIgQEAKIAl9CiB9CiAKLS8qIEFsbG9jYXRlIGFuZCBtYXAgYW4gc2tiIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIHNicS4gKi8KLXN0YXRpYyBpbnQgcWxfYWxsb2Nfc2JxX2J1ZmZlcnMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisvKiBGcmVlIGFsbCBsYXJnZSBhbmQgc21hbGwgcnggYnVmZmVycyBhc3NvY2lhdGVkCisgKiB3aXRoIHRoZSBjb21wbGV0aW9uIHF1ZXVlcyBmb3IgdGhpcyBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIHFsX2ZyZWVfcnhfYnVmZmVycyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZzsKKworCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspIHsKKwkJcnhfcmluZyA9ICZxZGV2LT5yeF9yaW5nW2ldOworCQlpZiAocnhfcmluZy0+bGJxKQorCQkJcWxfZnJlZV9sYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKTsKKwkJaWYgKHJ4X3JpbmctPnNicSkKKwkJCXFsX2ZyZWVfc2JxX2J1ZmZlcnMocWRldiwgcnhfcmluZyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBxbF9hbGxvY19yeF9idWZmZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgeworCQlyeF9yaW5nID0gJnFkZXYtPnJ4X3JpbmdbaV07CisJCWlmIChyeF9yaW5nLT50eXBlICE9IFRYX1EpCisJCQlxbF91cGRhdGVfYnVmZmVyX3F1ZXVlcyhxZGV2LCByeF9yaW5nKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX2luaXRfbGJxX3Jpbmcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcpCit7CisJaW50IGk7CisJc3RydWN0IGJxX2Rlc2MgKmxicV9kZXNjOworCV9fbGU2NCAqYnEgPSByeF9yaW5nLT5sYnFfYmFzZTsKKworCW1lbXNldChyeF9yaW5nLT5sYnEsIDAsIHJ4X3JpbmctPmxicV9sZW4gKiBzaXplb2Yoc3RydWN0IGJxX2Rlc2MpKTsKKwlmb3IgKGkgPSAwOyBpIDwgcnhfcmluZy0+bGJxX2xlbjsgaSsrKSB7CisJCWxicV9kZXNjID0gJnJ4X3JpbmctPmxicVtpXTsKKwkJbWVtc2V0KGxicV9kZXNjLCAwLCBzaXplb2YoKmxicV9kZXNjKSk7CisJCWxicV9kZXNjLT5pbmRleCA9IGk7CisJCWxicV9kZXNjLT5hZGRyID0gYnE7CisJCWJxKys7CisJfQorfQorCitzdGF0aWMgdm9pZCBxbF9pbml0X3NicV9yaW5nKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAogCQkJCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewogCWludCBpOwogCXN0cnVjdCBicV9kZXNjICpzYnFfZGVzYzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXU2NCBtYXA7CiAJX19sZTY0ICpicSA9IHJ4X3JpbmctPnNicV9iYXNlOwogCisJbWVtc2V0KHJ4X3JpbmctPnNicSwgMCwgcnhfcmluZy0+c2JxX2xlbiAqIHNpemVvZihzdHJ1Y3QgYnFfZGVzYykpOwogCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nLT5zYnFfbGVuOyBpKyspIHsKIAkJc2JxX2Rlc2MgPSAmcnhfcmluZy0+c2JxW2ldOwotCQltZW1zZXQoc2JxX2Rlc2MsIDAsIHNpemVvZihzYnFfZGVzYykpOworCQltZW1zZXQoc2JxX2Rlc2MsIDAsIHNpemVvZigqc2JxX2Rlc2MpKTsKIAkJc2JxX2Rlc2MtPmluZGV4ID0gaTsKIAkJc2JxX2Rlc2MtPmFkZHIgPSBicTsKLQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihxZGV2LT5uZGV2LCByeF9yaW5nLT5zYnFfYnVmX3NpemUpOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCS8qIEJldHRlciBsdWNrIG5leHQgcm91bmQgKi8KLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJzbWFsbCBidWZmIGFsbG9jIGZhaWxlZCBmb3IgJWQgYnl0ZXMgYXQgaW5kZXggJWQuXG4iLAotCQkJCXJ4X3JpbmctPnNicV9idWZfc2l6ZSwgaSk7Ci0JCQlnb3RvIG1lbV9lcnI7Ci0JCX0KLQkJc2tiX3Jlc2VydmUoc2tiLCBRTEdFX1NCX1BBRCk7Ci0JCXNicV9kZXNjLT5wLnNrYiA9IHNrYjsKLQkJLyoKLQkJICogTWFwIG9ubHkgaGFsZiB0aGUgYnVmZmVyLiBCZWNhdXNlIHRoZQotCQkgKiBvdGhlciBoYWxmIG1heSBnZXQgc29tZSBkYXRhIGNvcGllZCB0byBpdAotCQkgKiB3aGVuIHRoZSBjb21wbGV0aW9uIGFycml2ZXMuCi0JCSAqLwotCQltYXAgPSBwY2lfbWFwX3NpbmdsZShxZGV2LT5wZGV2LAotCQkJCSAgICAgc2tiLT5kYXRhLAotCQkJCSAgICAgcnhfcmluZy0+c2JxX2J1Zl9zaXplIC8gMiwKLQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKSkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJQQ0kgbWFwcGluZyBmYWlsZWQuXG4iKTsKLQkJCWdvdG8gbWVtX2VycjsKLQkJfQotCQlwY2lfdW5tYXBfYWRkcl9zZXQoc2JxX2Rlc2MsIG1hcGFkZHIsIG1hcCk7Ci0JCXBjaV91bm1hcF9sZW5fc2V0KHNicV9kZXNjLCBtYXBsZW4sIHJ4X3JpbmctPnNicV9idWZfc2l6ZSAvIDIpOwotCQkqc2JxX2Rlc2MtPmFkZHIgPSBjcHVfdG9fbGU2NChtYXApOwogCQlicSsrOwogCX0KLQlyZXR1cm4gMDsKLW1lbV9lcnI6Ci0JcWxfZnJlZV9zYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKTsKLQlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgcWxfZnJlZV9yeF9yZXNvdXJjZXMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCiAJCQkJIHN0cnVjdCByeF9yaW5nICpyeF9yaW5nKQogewotCWlmIChyeF9yaW5nLT5zYnFfbGVuKQotCQlxbF9mcmVlX3NicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCWlmIChyeF9yaW5nLT5sYnFfbGVuKQotCQlxbF9mcmVlX2xicV9idWZmZXJzKHFkZXYsIHJ4X3JpbmcpOwotCiAJLyogRnJlZSB0aGUgc21hbGwgYnVmZmVyIHF1ZXVlLiAqLwogCWlmIChyeF9yaW5nLT5zYnFfYmFzZSkgewogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHFkZXYtPnBkZXYsCkBAIC0yMzE4LDExICsyNDAzLDcgQEAKIAkJCWdvdG8gZXJyX21lbTsKIAkJfQogCi0JCWlmIChxbF9hbGxvY19zYnFfYnVmZmVycyhxZGV2LCByeF9yaW5nKSkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIlNtYWxsIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwotCQkJZ290byBlcnJfbWVtOwotCQl9CisJCXFsX2luaXRfc2JxX3JpbmcocWRldiwgcnhfcmluZyk7CiAJfQogCiAJaWYgKHJ4X3JpbmctPmxicV9sZW4pIHsKQEAgLTIzNTAsMTQgKzI0MzEsNyBAQAogCQkJZ290byBlcnJfbWVtOwogCQl9CiAKLQkJLyoKLQkJICogQWxsb2NhdGUgdGhlIGJ1ZmZlcnMuCi0JCSAqLwotCQlpZiAocWxfYWxsb2NfbGJxX2J1ZmZlcnMocWRldiwgcnhfcmluZykpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJMYXJnZSBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKLQkJCWdvdG8gZXJyX21lbTsKLQkJfQorCQlxbF9pbml0X2xicV9yaW5nKHFkZXYsIHJ4X3JpbmcpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjQ1MSw2ICsyNTI1LDcgQEAKIAkgICAgcWRldi0+ZG9vcmJlbGxfYXJlYSArIChEQl9QQUdFX1NJWkUgKiAoMTI4ICsgcnhfcmluZy0+Y3FfaWQpKTsKIAlpbnQgZXJyID0gMDsKIAl1MTYgYnFfbGVuOworCXU2NCB0bXA7CiAKIAkvKiBTZXQgdXAgdGhlIHNoYWRvdyByZWdpc3RlcnMgZm9yIHRoaXMgcmluZy4gKi8KIAlyeF9yaW5nLT5wcm9kX2lkeF9zaF9yZWcgPSBzaGFkb3dfcmVnOwpAQCAtMjQ5Niw3ICsyNTcxLDggQEAKIAkgICAgRkxBR1NfTEk7CQkvKiBMb2FkIGlycSBkZWxheSB2YWx1ZXMgKi8KIAlpZiAocnhfcmluZy0+bGJxX2xlbikgewogCQljcWljYi0+ZmxhZ3MgfD0gRkxBR1NfTEw7CS8qIExvYWQgbGJxIHZhbHVlcyAqLwotCQkqKCh1NjQgKikgcnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3QpID0gcnhfcmluZy0+bGJxX2Jhc2VfZG1hOworCQl0bXAgPSAodTY0KXJ4X3JpbmctPmxicV9iYXNlX2RtYTs7CisJCSooKF9fbGU2NCAqKSByeF9yaW5nLT5sYnFfYmFzZV9pbmRpcmVjdCkgPSBjcHVfdG9fbGU2NCh0bXApOwogCQljcWljYi0+bGJxX2FkZHIgPQogCQkgICAgY3B1X3RvX2xlNjQocnhfcmluZy0+bGJxX2Jhc2VfaW5kaXJlY3RfZG1hKTsKIAkJYnFfbGVuID0gKHJ4X3JpbmctPmxicV9idWZfc2l6ZSA9PSA2NTUzNikgPyAwIDoKQEAgLTI1MDUsMjUgKzI1ODEsMjYgQEAKIAkJYnFfbGVuID0gKHJ4X3JpbmctPmxicV9sZW4gPT0gNjU1MzYpID8gMCA6CiAJCQkodTE2KSByeF9yaW5nLT5sYnFfbGVuOwogCQljcWljYi0+bGJxX2xlbiA9IGNwdV90b19sZTE2KGJxX2xlbik7Ci0JCXJ4X3JpbmctPmxicV9wcm9kX2lkeCA9IHJ4X3JpbmctPmxicV9sZW4gLSAxNjsKKwkJcnhfcmluZy0+bGJxX3Byb2RfaWR4ID0gMDsKIAkJcnhfcmluZy0+bGJxX2N1cnJfaWR4ID0gMDsKLQkJcnhfcmluZy0+bGJxX2NsZWFuX2lkeCA9IHJ4X3JpbmctPmxicV9wcm9kX2lkeDsKLQkJcnhfcmluZy0+bGJxX2ZyZWVfY250ID0gMTY7CisJCXJ4X3JpbmctPmxicV9jbGVhbl9pZHggPSAwOworCQlyeF9yaW5nLT5sYnFfZnJlZV9jbnQgPSByeF9yaW5nLT5sYnFfbGVuOwogCX0KIAlpZiAocnhfcmluZy0+c2JxX2xlbikgewogCQljcWljYi0+ZmxhZ3MgfD0gRkxBR1NfTFM7CS8qIExvYWQgc2JxIHZhbHVlcyAqLwotCQkqKCh1NjQgKikgcnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3QpID0gcnhfcmluZy0+c2JxX2Jhc2VfZG1hOworCQl0bXAgPSAodTY0KXJ4X3JpbmctPnNicV9iYXNlX2RtYTs7CisJCSooKF9fbGU2NCAqKSByeF9yaW5nLT5zYnFfYmFzZV9pbmRpcmVjdCkgPSBjcHVfdG9fbGU2NCh0bXApOwogCQljcWljYi0+c2JxX2FkZHIgPQogCQkgICAgY3B1X3RvX2xlNjQocnhfcmluZy0+c2JxX2Jhc2VfaW5kaXJlY3RfZG1hKTsKIAkJY3FpY2ItPnNicV9idWZfc2l6ZSA9Ci0JCSAgICBjcHVfdG9fbGUxNigoKHJ4X3JpbmctPnNicV9idWZfc2l6ZSAvIDIpICsgOCkgJiAweGZmZmZmZmY4KTsKKwkJICAgIGNwdV90b19sZTE2KCh1MTYpKHJ4X3JpbmctPnNicV9idWZfc2l6ZS8yKSk7CiAJCWJxX2xlbiA9IChyeF9yaW5nLT5zYnFfbGVuID09IDY1NTM2KSA/IDAgOgogCQkJKHUxNikgcnhfcmluZy0+c2JxX2xlbjsKIAkJY3FpY2ItPnNicV9sZW4gPSBjcHVfdG9fbGUxNihicV9sZW4pOwotCQlyeF9yaW5nLT5zYnFfcHJvZF9pZHggPSByeF9yaW5nLT5zYnFfbGVuIC0gMTY7CisJCXJ4X3JpbmctPnNicV9wcm9kX2lkeCA9IDA7CiAJCXJ4X3JpbmctPnNicV9jdXJyX2lkeCA9IDA7Ci0JCXJ4X3JpbmctPnNicV9jbGVhbl9pZHggPSByeF9yaW5nLT5zYnFfcHJvZF9pZHg7Ci0JCXJ4X3JpbmctPnNicV9mcmVlX2NudCA9IDE2OworCQlyeF9yaW5nLT5zYnFfY2xlYW5faWR4ID0gMDsKKwkJcnhfcmluZy0+c2JxX2ZyZWVfY250ID0gcnhfcmluZy0+c2JxX2xlbjsKIAl9CiAJc3dpdGNoIChyeF9yaW5nLT50eXBlKSB7CiAJY2FzZSBUWF9ROgpAQCAtMjU2OSwyNCArMjY0NiwxMyBAQAogCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiSW52YWxpZCByeF9yaW5nLT50eXBlID0gJWQuXG4iLAogCQkJcnhfcmluZy0+dHlwZSk7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIkluaXRpYWxpemluZyByeCB3b3JrIHF1ZXVlLlxuIik7CisJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIkluaXRpYWxpemluZyByeCB3b3JrIHF1ZXVlLlxuIik7CiAJZXJyID0gcWxfd3JpdGVfY2ZnKHFkZXYsIGNxaWNiLCBzaXplb2Yoc3RydWN0IGNxaWNiKSwKIAkJCSAgIENGR19MQ1EsIHJ4X3JpbmctPmNxX2lkKTsKIAlpZiAoZXJyKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGxvYWQgQ1FJQ0IuXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiU3VjY2Vzc2Z1bGx5IGxvYWRlZCBDUUlDQi5cbiIpOwotCS8qCi0JICogQWR2YW5jZSB0aGUgcHJvZHVjZXIgaW5kZXggZm9yIHRoZSBidWZmZXIgcXVldWVzLgotCSAqLwotCXdtYigpOwotCWlmIChyeF9yaW5nLT5sYnFfbGVuKQotCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+bGJxX3Byb2RfaWR4LAotCQkJCXJ4X3JpbmctPmxicV9wcm9kX2lkeF9kYl9yZWcpOwotCWlmIChyeF9yaW5nLT5zYnFfbGVuKQotCQlxbF93cml0ZV9kYl9yZWcocnhfcmluZy0+c2JxX3Byb2RfaWR4LAotCQkJCXJ4X3JpbmctPnNicV9wcm9kX2lkeF9kYl9yZWcpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI2MzMsNyArMjY5OSw3IEBACiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGxvYWQgdHhfcmluZy5cbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICJTdWNjZXNzZnVsbHkgbG9hZGVkIFdRSUNCLlxuIik7CisJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgV1FJQ0IuXG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yNjc1LDcgKzI3NDEsNyBAQAogCQkgICAgKHFkZXYtPnBkZXYsIHFkZXYtPm1zaV94X2VudHJ5LCBxZGV2LT5yeF9yaW5nX2NvdW50KSkgewogCQkJc2V0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncyk7CiAJCQlxZGV2LT5pbnRyX2NvdW50ID0gcWRldi0+cnhfcmluZ19jb3VudDsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywKKwkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJIk1TSS1YIEVuYWJsZWQsIGdvdCAlZCB2ZWN0b3JzLlxuIiwKIAkJCQlxZGV2LT5pbnRyX2NvdW50KTsKIAkJCXJldHVybjsKQEAgLTI4MDIsMTEgKzI4NjgsMTEgQEAKIAkJCWlmICh0ZXN0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncykpIHsKIAkJCQlmcmVlX2lycShxZGV2LT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IsCiAJCQkJCSAmcWRldi0+cnhfcmluZ1tpXSk7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKKwkJCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgREVCVUcsCiAJCQkJCSJmcmVlaW5nIG1zaXggaW50ZXJydXB0ICVkLlxuIiwgaSk7CiAJCQl9IGVsc2UgewogCQkJCWZyZWVfaXJxKHFkZXYtPnBkZXYtPmlycSwgJnFkZXYtPnJ4X3JpbmdbMF0pOwotCQkJCVFQUklOVEsocWRldiwgSUZET1dOLCBFUlIsCisJCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIERFQlVHLAogCQkJCQkiZnJlZWluZyBtc2kgaW50ZXJydXB0ICVkLlxuIiwgaSk7CiAJCQl9CiAJCX0KQEAgLTI4MzcsNyArMjkwMyw3IEBACiAJCQkJCWkpOwogCQkJCWdvdG8gZXJyX2lycTsKIAkJCX0gZWxzZSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLAorCQkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCiAJCQkJCSJIb29rZWQgaW50ciAlZCwgcXVldWUgdHlwZSAlcyVzJXMsIHdpdGggbmFtZSAlcy5cbiIsCiAJCQkJCWksCiAJCQkJCXFkZXYtPnJ4X3JpbmdbaV0udHlwZSA9PQpAQCAtMjkxMiwxNCArMjk3OCwxNCBAQAogCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2Nl9oYXNoX2tleVswXSwgNDApOwogCWdldF9yYW5kb21fYnl0ZXMoKHZvaWQgKikmcmljYi0+aXB2NF9oYXNoX2tleVswXSwgMTYpOwogCi0JUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiSW5pdGlhbGl6aW5nIFJTUy5cbiIpOworCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJJbml0aWFsaXppbmcgUlNTLlxuIik7CiAKIAlzdGF0dXMgPSBxbF93cml0ZV9jZmcocWRldiwgcmljYiwgc2l6ZW9mKHJpY2IpLCBDRkdfTFIsIDApOwogCWlmIChzdGF0dXMpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gbG9hZCBSSUNCLlxuIik7CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgUklDQi5cbiIpOworCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJTdWNjZXNzZnVsbHkgbG9hZGVkIFJJQ0IuXG4iKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0yOTI5LDEzICsyOTk1LDE3IEBACiAJaW50IHN0YXR1cyA9IDA7CiAJaW50IGk7CiAKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX1JUX0lEWF9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCiAJLyogQ2xlYXIgYWxsIHRoZSBlbnRyaWVzIGluIHRoZSByb3V0aW5nIHRhYmxlLiAqLwogCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCXN0YXR1cyA9IHFsX3NldF9yb3V0aW5nX3JlZyhxZGV2LCBpLCAwLCAwKTsKIAkJaWYgKHN0YXR1cykgewogCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCiAJCQkJIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIENBTSBwYWNrZXRzLlxuIik7Ci0JCQlyZXR1cm4gc3RhdHVzOworCQkJZ290byBleGl0OwogCQl9CiAJfQogCkBAIC0yOTQzLDEzICszMDEzLDEzIEBACiAJaWYgKHN0YXR1cykgewogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBlcnJvciBwYWNrZXRzLlxuIik7Ci0JCXJldHVybiBzdGF0dXM7CisJCWdvdG8gZXhpdDsKIAl9CiAJc3RhdHVzID0gcWxfc2V0X3JvdXRpbmdfcmVnKHFkZXYsIFJUX0lEWF9CQ0FTVF9TTE9ULCBSVF9JRFhfQkNBU1QsIDEpOwogCWlmIChzdGF0dXMpIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCiAJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgYnJvYWRjYXN0IHBhY2tldHMuXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKKwkJZ290byBleGl0OwogCX0KIAkvKiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgaW5ib3VuZCBxdWV1ZSwgdGhlbiB0dXJuIG9uIFJTUyBpbiB0aGUKIAkgKiByb3V0aW5nIGJsb2NrLgpAQCAtMjk2MCwxNyArMzAzMCwzOSBAQAogCQlpZiAoc3RhdHVzKSB7CiAJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgTUFUQ0ggUlNTIHBhY2tldHMuXG4iKTsKLQkJCXJldHVybiBzdGF0dXM7CisJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CiAKIAlzdGF0dXMgPSBxbF9zZXRfcm91dGluZ19yZWcocWRldiwgUlRfSURYX0NBTV9ISVRfU0xPVCwKIAkJCQkgICAgUlRfSURYX0NBTV9ISVQsIDEpOwotCWlmIChzdGF0dXMpIHsKKwlpZiAoc3RhdHVzKQogCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKIAkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBDQU0gcGFja2V0cy5cbiIpOworZXhpdDoKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9SVF9JRFhfTUFTSyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworaW50IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisJc3RhdHVzID0gcWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgcWRldi0+bmRldi0+cGVybV9hZGRyLAorCQkJICAgICBNQUNfQUREUl9UWVBFX0NBTV9NQUMsIHFkZXYtPmZ1bmMgKiBNQVhfQ1EpOworCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCWlmIChzdGF0dXMpIHsKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCBtYWMgYWRkcmVzcy5cbiIpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KKworCXN0YXR1cyA9IHFsX3JvdXRlX2luaXRpYWxpemUocWRldik7CisJaWYgKHN0YXR1cykKKwkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHRhYmxlLlxuIik7CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zMDM4LDI4ICszMTMwLDI0IEBACiAJCX0KIAl9CiAKLQlzdGF0dXMgPSBxbF9wb3J0X2luaXRpYWxpemUocWRldik7Ci0JaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBzdGFydCBwb3J0LlxuIik7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQorCS8qIEluaXRpYWxpemUgdGhlIHBvcnQgYW5kIHNldCB0aGUgbWF4IGZyYW1lc2l6ZS4gKi8KKwlzdGF0dXMgPSBxZGV2LT5uaWNfb3BzLT5wb3J0X2luaXRpYWxpemUocWRldik7CisgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAgICBRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBzdGFydCBwb3J0LlxuIik7CisgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgfQogCi0Jc3RhdHVzID0gcWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgcWRldi0+bmRldi0+cGVybV9hZGRyLAotCQkJCSAgICAgTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBxZGV2LT5mdW5jKTsKKwkvKiBTZXQgdXAgdGhlIE1BQyBhZGRyZXNzIGFuZCBmcmFtZSByb3V0aW5nIGZpbHRlci4gKi8KKwlzdGF0dXMgPSBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShxZGV2KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGluaXQgbWFjIGFkZHJlc3MuXG4iKTsKLQkJcmV0dXJuIHN0YXR1czsKLQl9Ci0KLQlzdGF0dXMgPSBxbF9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOwotCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHRhYmxlLlxuIik7CisJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAorCQkJCSJGYWlsZWQgdG8gaW5pdCBDQU0vUm91dGluZyB0YWJsZXMuXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAkvKiBTdGFydCBOQVBJIGZvciB0aGUgUlNTIHF1ZXVlcy4gKi8KIAlmb3IgKGkgPSBxZGV2LT5yc3NfcmluZ19maXJzdF9jcV9pZDsgaSA8IHFkZXYtPnJ4X3JpbmdfY291bnQ7IGkrKykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sICJFbmFibGluZyBOQVBJIGZvciByeF9yaW5nWyVkXS5cbiIsCisJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJFbmFibGluZyBOQVBJIGZvciByeF9yaW5nWyVkXS5cbiIsCiAJCQlpKTsKIAkJbmFwaV9lbmFibGUoJnFkZXYtPnJ4X3JpbmdbaV0ubmFwaSk7CiAJfQpAQCAtMzA3MSwzNiArMzE1OSwyMyBAQAogc3RhdGljIGludCBxbF9hZGFwdGVyX3Jlc2V0KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewogCXUzMiB2YWx1ZTsKLQlpbnQgbWF4X3dhaXRfdGltZTsKIAlpbnQgc3RhdHVzID0gMDsKLQlpbnQgcmVzZXRDbnQgPSAwOworCXVuc2lnbmVkIGxvbmcgZW5kX2ppZmZpZXMgPSBqaWZmaWVzICsKKwkJbWF4KCh1bnNpZ25lZCBsb25nKTEsIHVzZWNzX3RvX2ppZmZpZXMoMzApKTsKIAotI2RlZmluZSBNQVhfUkVTRVRfQ05UICAgMQotaXNzdWVSZXNldDoKLQlyZXNldENudCsrOwotCVFQUklOVEsocWRldiwgSUZET1dOLCBERUJVRywgIklzc3VlIHNvZnQgcmVzZXQgdG8gY2hpcC5cbiIpOwogCXFsX3dyaXRlMzIocWRldiwgUlNUX0ZPLCAoUlNUX0ZPX0ZSIDw8IDE2KSB8IFJTVF9GT19GUik7Ci0JLyogV2FpdCBmb3IgcmVzZXQgdG8gY29tcGxldGUuICovCi0JbWF4X3dhaXRfdGltZSA9IDM7Ci0JUVBSSU5USyhxZGV2LCBJRkRPV04sIERFQlVHLCAiV2FpdCAlZCBzZWNvbmRzIGZvciByZXNldCB0byBjb21wbGV0ZS5cbiIsCi0JCW1heF93YWl0X3RpbWUpOworCiAJZG8gewogCQl2YWx1ZSA9IHFsX3JlYWQzMihxZGV2LCBSU1RfRk8pOwogCQlpZiAoKHZhbHVlICYgUlNUX0ZPX0ZSKSA9PSAwKQogCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF9qaWZmaWVzKSk7CiAKLQkJc3NsZWVwKDEpOwotCX0gd2hpbGUgKCgtLW1heF93YWl0X3RpbWUpKTsKIAlpZiAodmFsdWUgJiBSU1RfRk9fRlIpIHsKIAkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKLQkJCSJTdHVjayBpbiBTb2Z0UmVzZXQ6ICBGU0NfU1I6MHglMDh4XG4iLCB2YWx1ZSk7Ci0JCWlmIChyZXNldENudCA8IE1BWF9SRVNFVF9DTlQpCi0JCQlnb3RvIGlzc3VlUmVzZXQ7Ci0JfQotCWlmIChtYXhfd2FpdF90aW1lID09IDApIHsKLQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKLQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIEVSUiwKIAkJCSJFVElNRU9VVCEhISBlcnJvcmVkIG91dCBvZiByZXNldHRpbmcgdGhlIGNoaXAhXG4iKTsKKwkJc3RhdHVzID0gLUVUSU1FRE9VVDsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMzEyMywxMiArMzE5OCwxMCBAQAogCiBzdGF0aWMgaW50IHFsX2FkYXB0ZXJfZG93bihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHFkZXYtPm5kZXY7CiAJaW50IGksIHN0YXR1cyA9IDA7CiAJc3RydWN0IHJ4X3JpbmcgKnJ4X3Jpbmc7CiAKLQluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOwogCiAJLyogRG9uJ3Qga2lsbCB0aGUgcmVzZXQgd29ya2VyIHRocmVhZCBpZiB3ZQogCSAqIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiByZWNvdmVyeS4KQEAgLTMxMzcsNiArMzIxMCw4IEBACiAJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+YXNpY19yZXNldF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9yZXNldF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9pZGNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CiAKIAkvKiBUaGUgZGVmYXVsdCBxdWV1ZSBhdCBpbmRleCAwIGlzIGFsd2F5cyBwcm9jZXNzZWQgaW4KIAkgKiBhIHdvcmtxdWV1ZS4KQEAgLTMxNzEsNiArMzI0Niw4IEBACiAJZm9yIChpID0gcWRldi0+cnNzX3JpbmdfZmlyc3RfY3FfaWQ7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspCiAJCW5ldGlmX25hcGlfZGVsKCZxZGV2LT5yeF9yaW5nW2ldLm5hcGkpOwogCisJcWxfZnJlZV9yeF9idWZmZXJzKHFkZXYpOworCiAJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlzdGF0dXMgPSBxbF9hZGFwdGVyX3Jlc2V0KHFkZXYpOwogCWlmIChzdGF0dXMpCkBAIC0zMTg0LDIxICszMjYxLDE5IEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwogCWVyciA9IHFsX2FkYXB0ZXJfaW5pdGlhbGl6ZShxZGV2KTsKIAlpZiAoZXJyKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIlVuYWJsZSB0byBpbml0aWFsaXplIGFkYXB0ZXIuXG4iKTsKIAkJc3Bpbl91bmxvY2soJnFkZXYtPmh3X2xvY2spOwogCQlnb3RvIGVycl9pbml0OwogCX0KLQlzcGluX3VubG9jaygmcWRldi0+aHdfbG9jayk7CiAJc2V0X2JpdChRTF9BREFQVEVSX1VQLCAmcWRldi0+ZmxhZ3MpOworCXFsX2FsbG9jX3J4X2J1ZmZlcnMocWRldik7CisJaWYgKChxbF9yZWFkMzIocWRldiwgU1RTKSAmIHFkZXYtPnBvcnRfaW5pdCkpCisJCW5ldGlmX2NhcnJpZXJfb24ocWRldi0+bmRldik7CiAJcWxfZW5hYmxlX2ludGVycnVwdHMocWRldik7CiAJcWxfZW5hYmxlX2FsbF9jb21wbGV0aW9uX2ludGVycnVwdHMocWRldik7Ci0JaWYgKChxbF9yZWFkMzIocWRldiwgU1RTKSAmIHFkZXYtPnBvcnRfaW5pdCkpIHsKLQkJbmV0aWZfY2Fycmllcl9vbihxZGV2LT5uZGV2KTsKLQkJbmV0aWZfc3RhcnRfcXVldWUocWRldi0+bmRldik7Ci0JfQorCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMocWRldi0+bmRldik7CiAKIAlyZXR1cm4gMDsKIGVycl9pbml0OgpAQCAtMzIwNiwyOCArMzI4MSw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBxbF9jeWNsZV9hZGFwdGVyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQotewotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBxbF9hZGFwdGVyX2Rvd24ocWRldik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBlcnJvcjsKLQotCXN0YXR1cyA9IHFsX2FkYXB0ZXJfdXAocWRldik7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBlcnJvcjsKLQotCXJldHVybiBzdGF0dXM7Ci1lcnJvcjoKLQlRUFJJTlRLKHFkZXYsIElGVVAsIEFMRVJULAotCQkiRHJpdmVyIHVwL2Rvd24gY3ljbGUgZmFpbGVkLCBjbG9zaW5nIGRldmljZVxuIik7Ci0JcnRubF9sb2NrKCk7Ci0JZGV2X2Nsb3NlKHFkZXYtPm5kZXYpOwotCXJ0bmxfdW5sb2NrKCk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQogc3RhdGljIHZvaWQgcWxfcmVsZWFzZV9hZGFwdGVyX3Jlc291cmNlcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKIAlxbF9mcmVlX21lbV9yZXNvdXJjZXMocWRldik7CkBAIC0zMzA4LDYgKzMzNjEsNyBAQAogCSAqIGNvbXBsZXRpb24gaGFuZGxlciByeF9yaW5ncy4KIAkgKi8KIAlxZGV2LT5yeF9yaW5nX2NvdW50ID0gcWRldi0+dHhfcmluZ19jb3VudCArIHFkZXYtPnJzc19yaW5nX2NvdW50ICsgMTsKKwluZXRpZl9zZXRfZ3NvX21heF9zaXplKHFkZXYtPm5kZXYsIDY1NTM2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBxZGV2LT50eF9yaW5nX2NvdW50OyBpKyspIHsKIAkJdHhfcmluZyA9ICZxZGV2LT50eF9yaW5nW2ldOwpAQCAtMzQxNCw2ICszNDY4LDggQEAKIAogCWlmIChuZGV2LT5tdHUgPT0gMTUwMCAmJiBuZXdfbXR1ID09IDkwMDApIHsKIAkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJDaGFuZ2luZyB0byBqdW1ibyBNVFUuXG4iKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKHFkZXYtPndvcmtxdWV1ZSwKKwkJCQkmcWRldi0+bXBpX3BvcnRfY2ZnX3dvcmssIDApOwogCX0gZWxzZSBpZiAobmRldi0+bXR1ID09IDkwMDAgJiYgbmV3X210dSA9PSAxNTAwKSB7CiAJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiQ2hhbmdpbmcgdG8gbm9ybWFsIE1UVS5cbiIpOwogCX0gZWxzZSBpZiAoKG5kZXYtPm10dSA9PSAxNTAwICYmIG5ld19tdHUgPT0gMTUwMCkgfHwKQEAgLTM0MzYsOCArMzQ5MiwxMSBAQAogewogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gKHN0cnVjdCBxbF9hZGFwdGVyICopbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7Ci0JaW50IGk7CisJaW50IGksIHN0YXR1czsKIAorCXN0YXR1cyA9IHFsX3NlbV9zcGlubG9jayhxZGV2LCBTRU1fUlRfSURYX01BU0spOworCWlmIChzdGF0dXMpCisJCXJldHVybjsKIAlzcGluX2xvY2soJnFkZXYtPmh3X2xvY2spOwogCS8qCiAJICogU2V0IG9yIGNsZWFyIHByb21pc2N1b3VzIG1vZGUgaWYgYQpAQCAtMzQ5MywxNCArMzU1MiwxOSBAQAogCX0KIAogCWlmIChuZGV2LT5tY19jb3VudCkgeworCQlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBleGl0OwogCQlmb3IgKGkgPSAwLCBtY19wdHIgPSBuZGV2LT5tY19saXN0OyBtY19wdHI7CiAJCSAgICAgaSsrLCBtY19wdHIgPSBtY19wdHItPm5leHQpCiAJCQlpZiAocWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgbWNfcHRyLT5kbWlfYWRkciwKIAkJCQkJCU1BQ19BRERSX1RZUEVfTVVMVElfTUFDLCBpKSkgewogCQkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKIAkJCQkJIkZhaWxlZCB0byBsb2FkbXVsdGljYXN0IGFkZHJlc3MuXG4iKTsKKwkJCQlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CisJCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCQlpZiAocWxfc2V0X3JvdXRpbmdfcmVnCiAJCSAgICAocWRldiwgUlRfSURYX01DQVNUX01BVENIX1NMT1QsIFJUX0lEWF9NQ0FTVF9NQVRDSCwgMSkpIHsKIAkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKQEAgLTM1MTEsMTMgKzM1NzUsMTQgQEAKIAl9CiBleGl0OgogCXNwaW5fdW5sb2NrKCZxZGV2LT5od19sb2NrKTsKKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9SVF9JRFhfTUFTSyk7CiB9CiAKIHN0YXRpYyBpbnQgcWxnZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnApCiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwotCWludCByZXQgPSAwOworCWludCBzdGF0dXM7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTM1MjYsMTUgKzM1OTEsMTcgQEAKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCW1lbWNweShuZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmRldi0+YWRkcl9sZW4pOwogCisJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOwogCXNwaW5fbG9jaygmcWRldi0+aHdfbG9jayk7Ci0JaWYgKHFsX3NldF9tYWNfYWRkcl9yZWcocWRldiwgKHU4ICopIG5kZXYtPmRldl9hZGRyLAotCQkJTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBxZGV2LT5mdW5jKSkgey8qIFVuaWNhc3QgKi8KLQkJUVBSSU5USyhxZGV2LCBIVywgRVJSLCAiRmFpbGVkIHRvIGxvYWQgTUFDIGFkZHJlc3MuXG4iKTsKLQkJcmV0ID0gLTE7Ci0JfQorCXN0YXR1cyA9IHFsX3NldF9tYWNfYWRkcl9yZWcocWRldiwgKHU4ICopIG5kZXYtPmRldl9hZGRyLAorCQkJTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBxZGV2LT5mdW5jICogTUFYX0NRKTsKIAlzcGluX3VubG9jaygmcWRldi0+aHdfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OworCWlmIChzdGF0dXMpCisJCVFQUklOVEsocWRldiwgSFcsIEVSUiwgIkZhaWxlZCB0byBsb2FkIE1BQyBhZGRyZXNzLlxuIik7CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIHZvaWQgcWxnZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQpAQCAtMzU0Nyw5ICszNjE0LDM3IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFsX2FkYXB0ZXIsIGFzaWNfcmVzZXRfd29yay53b3JrKTsKLQlxbF9jeWNsZV9hZGFwdGVyKHFkZXYpOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBxbF9hZGFwdGVyX2Rvd24ocWRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnJvcjsKKworCXN0YXR1cyA9IHFsX2FkYXB0ZXJfdXAocWRldik7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnJvcjsKKworCXJldHVybjsKK2Vycm9yOgorCVFQUklOVEsocWRldiwgSUZVUCwgQUxFUlQsCisJCSJEcml2ZXIgdXAvZG93biBjeWNsZSBmYWlsZWQsIGNsb3NpbmcgZGV2aWNlXG4iKTsKKwlydG5sX2xvY2soKTsKKwlzZXRfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncyk7CisJZGV2X2Nsb3NlKHFkZXYtPm5kZXYpOworCXJ0bmxfdW5sb2NrKCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgcWxhODAxMl9uaWNfb3BzID0geworCS5nZXRfZmxhc2gJCT0gcWxfZ2V0XzgwMTJfZmxhc2hfcGFyYW1zLAorCS5wb3J0X2luaXRpYWxpemUJPSBxbF84MDEyX3BvcnRfaW5pdGlhbGl6ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmljX29wZXJhdGlvbnMgcWxhODAwMF9uaWNfb3BzID0geworCS5nZXRfZmxhc2gJCT0gcWxfZ2V0XzgwMDBfZmxhc2hfcGFyYW1zLAorCS5wb3J0X2luaXRpYWxpemUJPSBxbF84MDAwX3BvcnRfaW5pdGlhbGl6ZSwKK307CisKKwogc3RhdGljIHZvaWQgcWxfZ2V0X2JvYXJkX2luZm8oc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCiB7CiAJcWRldi0+ZnVuYyA9CkBAIC0zNTY4LDYgKzM2NjMsMTEgQEAKIAkJcWRldi0+bWFpbGJveF9vdXQgPSBQUk9DX0FERFJfTVBJX1JJU0MgfCBQUk9DX0FERFJfRlVOQzBfTUJPOwogCX0KIAlxZGV2LT5jaGlwX3Jldl9pZCA9IHFsX3JlYWQzMihxZGV2LCBSRVZfSUQpOworCXFkZXYtPmRldmljZV9pZCA9IHFkZXYtPnBkZXYtPmRldmljZTsKKwlpZiAocWRldi0+ZGV2aWNlX2lkID09IFFMR0VfREVWSUNFX0lEXzgwMTIpCisJCXFkZXYtPm5pY19vcHMgPSAmcWxhODAxMl9uaWNfb3BzOworCWVsc2UgaWYgKHFkZXYtPmRldmljZV9pZCA9PSBRTEdFX0RFVklDRV9JRF84MDAwKQorCQlxZGV2LT5uaWNfb3BzID0gJnFsYTgwMDBfbmljX29wczsKIH0KIAogc3RhdGljIHZvaWQgcWxfcmVsZWFzZV9hbGwoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0zNjYwLDI0ICszNzYwLDIwIEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlxbF9nZXRfYm9hcmRfaW5mbyhxZGV2KTsKIAlxZGV2LT5uZGV2ID0gbmRldjsKIAlxZGV2LT5wZGV2ID0gcGRldjsKKwlxbF9nZXRfYm9hcmRfaW5mbyhxZGV2KTsKIAlxZGV2LT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIGRlZmF1bHRfbXNnKTsKIAlzcGluX2xvY2tfaW5pdCgmcWRldi0+aHdfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnFkZXYtPnN0YXRzX2xvY2spOwogCiAJLyogbWFrZSBzdXJlIHRoZSBFRVBST00gaXMgZ29vZCAqLwotCWVyciA9IHFsX2dldF9mbGFzaF9wYXJhbXMocWRldik7CisJZXJyID0gcWRldi0+bmljX29wcy0+Z2V0X2ZsYXNoKHFkZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBGTEFTSC5cbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHFkZXYtPmZsYXNoLm1hY19hZGRyKSkKLQkJZ290byBlcnJfb3V0OwotCi0JbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBxZGV2LT5mbGFzaC5tYWNfYWRkciwgbmRldi0+YWRkcl9sZW4pOwogCW1lbWNweShuZGV2LT5wZXJtX2FkZHIsIG5kZXYtPmRldl9hZGRyLCBuZGV2LT5hZGRyX2xlbik7CiAKIAkvKiBTZXQgdXAgdGhlIGRlZmF1bHQgcmluZyBzaXplcy4gKi8KQEAgLTM3MDAsNiArMzc5NiwxMCBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5hc2ljX3Jlc2V0X3dvcmssIHFsX2FzaWNfcmVzZXRfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9yZXNldF93b3JrLCBxbF9tcGlfcmVzZXRfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV93b3JrLCBxbF9tcGlfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrLCBxbF9tcGlfcG9ydF9jZmdfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9pZGNfd29yaywgcWxfbXBpX2lkY193b3JrKTsKKwltdXRleF9pbml0KCZxZGV2LT5tcGlfbXV0ZXgpOworCWluaXRfY29tcGxldGlvbigmcWRldi0+aWRlX2NvbXBsZXRpb24pOwogCiAJaWYgKCFjYXJkc19mb3VuZCkgewogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXNcbiIsIERSVl9TVFJJTkcpOwpAQCAtMzczNyw3ICszODM3LDggQEAKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kID0gMDsKIAlpbnQgZXJyID0gMDsKIAotCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHFsX2FkYXB0ZXIpKTsKKwluZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBxbF9hZGFwdGVyKSwKKwkJCW1pbihNQVhfQ1BVUywgKGludCludW1fb25saW5lX2NwdXMoKSkpOwogCWlmICghbmRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTM3NTcsNiArMzg1OCw3IEBACiAJCQkgIHwgTkVUSUZfRl9UU09fRUNOCiAJCQkgIHwgTkVUSUZfRl9IV19WTEFOX1RYCiAJCQkgIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUik7CisJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9HUk87CiAKIAlpZiAodGVzdF9iaXQoUUxfRE1BNjQsICZxZGV2LT5mbGFncykpCiAJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKQEAgLTM3NzksNyArMzg4MSw2IEBACiAJCXJldHVybiBlcnI7CiAJfQogCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmRldik7CiAJcWxfZGlzcGxheV9kZXZfaW5mbyhuZGV2KTsKIAljYXJkc19mb3VuZCsrOwogCXJldHVybiAwOwpAQCAtMzgzMyw3ICszOTM0LDYgQEAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwotCW5ldGlmX3N0b3BfcXVldWUobmRldik7CiAJcWxfYWRhcHRlcl9yZXNldChxZGV2KTsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgRUVQUk9NIGlzIGdvb2QgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYwppbmRleCBmYTMxODkxLi45ZjgxYjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCkBAIC0xLDYgKzEsMjYgQEAKICNpbmNsdWRlICJxbGdlLmgiCiAKLXN0YXRpYyBpbnQgcWxfcmVhZF9tYm94X3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyICpkYXRhKQorc3RhdGljIHZvaWQgcWxfZGlzcGxheV9tYl9zdHMoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJCQlzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCit7CisJaW50IGk7CisJc3RhdGljIGNoYXIgKmVycl9zdHNbXSA9IHsKKwkJIkNvbW1hbmQgQ29tcGxldGUiLAorCQkiQ29tbWFuZCBOb3QgU3VwcG9ydGVkIiwKKwkJIkhvc3QgSW50ZXJmYWNlIEVycm9yIiwKKwkJIkNoZWNrc3VtIEVycm9yIiwKKwkJIlVudXNlZCBDb21wbGV0aW9uIFN0YXR1cyIsCisJCSJUZXN0IEZhaWxlZCIsCisJCSJDb21tYW5kIFBhcmFtZXRlciBFcnJvciJ9OworCisJUVBSSU5USyhxZGV2LCBEUlYsIERFQlVHLCAiJXMuXG4iLAorCQllcnJfc3RzW21iY3AtPm1ib3hfb3V0WzBdICYgMHgwMDAwMDAwZl0pOworCWZvciAoaSA9IDA7IGkgPCBtYmNwLT5vdXRfY291bnQ7IGkrKykKKwkJUVBSSU5USyhxZGV2LCBEUlYsIERFQlVHLCAibWJveF9vdXRbJWRdID0gMHglLjA4eC5cbiIsCisJCQkJaSwgbWJjcC0+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+b3V0X2NvdW50ID0gMTsKKwkJcWxfbXBpX2hhbmRsZXIocWRldiwgbWJjcCk7CiAJfQorCisJbXV0ZXhfdW5sb2NrKCZxZGV2LT5tcGlfbXV0ZXgpOwogCXFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChxZGV2LCAwKTsKIH0KIApAQCAtMTQyLDkgKzg0OCw4IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHFsX2FkYXB0ZXIsIG1waV9yZXNldF93b3JrLndvcmspOwotCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCSJFbnRlciwgcWRldiA9ICVwLi5cbiIsIHFkZXYpOwotCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX1NFVF9SU1QpOwotCW1zbGVlcCg1MCk7Ci0JcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1JTVCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfaWRjX3dvcmspOworCXFsX3NvZnRfcmVzZXRfbXBpX3Jpc2MocWRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yNjA0MC5jIGIvZHJpdmVycy9uZXQvcjYwNDAuYwppbmRleCBiMmRjZGI1Li4wYTM3Zjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yNjA0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3I2MDQwLmMKQEAgLTQ5LDEyICs0OSwxMiBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicjYwNDAiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIxIgotI2RlZmluZSBEUlZfUkVMREFURQkiMDlKYW4yMDA5IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4yMiIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIjI1TWFyMjAwOSIKIAogLyogUEhZIENISVAgQWRkcmVzcyAqLwogI2RlZmluZSBQSFkxX0FERFIJMQkvKiBGb3IgTUFDMSAqLwotI2RlZmluZSBQSFkyX0FERFIJMgkvKiBGb3IgTUFDMiAqLworI2RlZmluZSBQSFkyX0FERFIJMwkvKiBGb3IgTUFDMiAqLwogI2RlZmluZSBQSFlfTU9ERQkweDMxMDAJLyogUEhZIENISVAgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBQSFlfQ0FQCQkweDAxRTEJLyogUEhZIENISVAgUmVnaXN0ZXIgNCAqLwogCkBAIC00ODQsMTIgKzQ4NCwxMiBAQAogCS8qIEZyZWUgRGVzY3JpcHRvciBtZW1vcnkgKi8KIAlpZiAobHAtPnJ4X3JpbmcpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBSWF9ERVNDX1NJWkUsIGxwLT5yeF9yaW5nLCBscC0+cnhfcmluZ19kbWEpOwotCQlscC0+cnhfcmluZyA9IDA7CisJCWxwLT5yeF9yaW5nID0gTlVMTDsKIAl9CiAKIAlpZiAobHAtPnR4X3JpbmcpIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBUWF9ERVNDX1NJWkUsIGxwLT50eF9yaW5nLCBscC0+dHhfcmluZ19kbWEpOwotCQlscC0+dHhfcmluZyA9IDA7CisJCWxwLT50eF9yaW5nID0gTlVMTDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTY3Niw3ICs2NzYsNyBAQAogCXdvcmtfZG9uZSA9IHI2MDQwX3J4KGRldiwgYnVkZ2V0KTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCS8qIEVuYWJsZSBSWCBpbnRlcnJ1cHQgKi8KIAkJaW93cml0ZTE2KGlvcmVhZDE2KGlvYWRkciArIE1JRVIpIHwgUlhfSU5UUywgaW9hZGRyICsgTUlFUik7CiAJfQpAQCAtNzEzLDcgKzcxMyw3IEBACiAKIAkJLyogTWFzayBvZmYgUlggaW50ZXJydXB0ICovCiAJCW1pc3IgJj0gflJYX0lOVFM7Ci0JCW5ldGlmX3J4X3NjaGVkdWxlKCZscC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAl9CiAKIAkvKiBUWCBpbnRlcnJ1cHQgcmVxdWVzdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggNDNmZWRiOS4uMDZjNTM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0zNTkzLDggKzM1OTMsOCBAQAogCQlSVExfVzE2KEludHJNYXNrLCB0cC0+aW50cl9ldmVudCAmIH50cC0+bmFwaV9ldmVudCk7CiAJCXRwLT5pbnRyX21hc2sgPSB+dHAtPm5hcGlfZXZlbnQ7CiAKLQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpKQotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmdHAtPm5hcGkpKSkKKwkJCV9fbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCQllbHNlIGlmIChuZXRpZl9tc2dfaW50cih0cCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnRlcnJ1cHQgJTA0eCBpbiBwb2xsXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKQEAgLTM2MTUsNyArMzYxNSw3IEBACiAJcnRsODE2OV90eF9pbnRlcnJ1cHQoZGV2LCB0cCwgaW9hZGRyKTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXRwLT5pbnRyX21hc2sgPSAweGZmZmY7CiAJCS8qCiAJCSAqIDIwMDQwNDI2OiB0aGUgYmFycmllciBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQgYnV0IHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcmlvbmV0LmMgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwppbmRleCBhNmZkMjdhLi5lYzU5ZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yaW9uZXQuYworKysgYi9kcml2ZXJzL25ldC9yaW9uZXQuYwpAQCAtMzYyLDggKzM2Miw3IEBACiAJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgUklPTkVUX1JYX1JJTkdfU0laRTsgaSsrKQotCQlpZiAocm5ldC0+cnhfc2tiW2ldKQotCQkJa2ZyZWVfc2tiKHJuZXQtPnJ4X3NrYltpXSk7CisJCWtmcmVlX3NrYihybmV0LT5yeF9za2JbaV0pOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBlZXIsIHRtcCwgJnJpb25ldF9wZWVycywgbm9kZSkgewogCQlpZiAocmlvbmV0X2FjdGl2ZVtwZWVyLT5yZGV2LT5kZXN0aWRdKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggZjVjNTdjMC4uMTY4NjhiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtMjg1Miw3ICsyODUyLDcgQEAKIAlzMmlvX2Noa19yeF9idWZmZXJzKG5pYywgcmluZyk7CiAKIAlpZiAocGt0c19wcm9jZXNzZWQgPCBidWRnZXRfb3JnKSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkvKlJlIEVuYWJsZSBNU0ktUnggVmVjdG9yKi8KIAkJYWRkciA9ICh1OCBfX2lvbWVtICopJmJhcjAtPnhtc2lfbWFza19yZWc7CiAJCWFkZHIgKz0gNyAtIHJpbmctPnJpbmdfbm87CkBAIC0yODg5LDcgKzI4ODksNyBAQAogCQkJYnJlYWs7CiAJfQogCWlmIChwa3RzX3Byb2Nlc3NlZCA8IGJ1ZGdldF9vcmcpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCS8qIFJlIGVuYWJsZSB0aGUgUnggaW50ZXJydXB0cyBmb3IgdGhlIHJpbmcgKi8KIAkJd3JpdGVxKDAsICZiYXIwLT5yeF90cmFmZmljX21hc2spOwogCQlyZWFkbCgmYmFyMC0+cnhfdHJhZmZpY19tYXNrKTsKQEAgLTM4NjIsNyArMzg2Miw3IEBACiAJcmV0ID0gcGNpX2VuYWJsZV9tc2l4KG5pYy0+cGRldiwgbmljLT5lbnRyaWVzLCBuaWMtPm51bV9lbnRyaWVzKTsKIAkvKiBXZSBmYWlsIGluaXQgaWYgZXJyb3Igb3Igd2UgZ2V0IGxlc3MgdmVjdG9ycyB0aGFuIG1pbiByZXF1aXJlZCAqLwogCWlmIChyZXQpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogRW5hYmxpbmcgTVNJWCBmYWlsZWRcbiIsIG5pYy0+ZGV2LT5uYW1lKTsKKwkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBFbmFibGluZyBNU0ktWCBmYWlsZWRcbiIpOwogCQlrZnJlZShuaWMtPmVudHJpZXMpOwogCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQubWVtX2ZyZWVkCiAJCQkrPSAobmljLT5udW1fZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSkpOwpAQCAtNDM0Miw3ICs0MzQyLDcgQEAKIAkJdmFsOCA9IChyaW5nLT5yaW5nX25vID09IDApID8gMHg3ZiA6IDB4ZmY7CiAJCXdyaXRlYih2YWw4LCBhZGRyKTsKIAkJdmFsOCA9IHJlYWRiKGFkZHIpOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmcmluZy0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnJpbmctPm5hcGkpOwogCX0gZWxzZSB7CiAJCXJ4X2ludHJfaGFuZGxlcihyaW5nLCAwKTsKIAkJczJpb19jaGtfcnhfYnVmZmVycyhzcCwgcmluZyk7CkBAIC00Nzg5LDcgKzQ3ODksNyBAQAogCiAJCWlmIChjb25maWctPm5hcGkpIHsKIAkJCWlmIChyZWFzb24gJiBHRU5fSU5UUl9SWFRSQUZGSUMpIHsKLQkJCQluZXRpZl9yeF9zY2hlZHVsZSgmc3AtPm5hcGkpOworCQkJCW5hcGlfc2NoZWR1bGUoJnNwLT5uYXBpKTsKIAkJCQl3cml0ZXEoUzJJT19NSU5VU19PTkUsICZiYXIwLT5yeF90cmFmZmljX21hc2spOwogCQkJCXdyaXRlcShTMklPX01JTlVTX09ORSwgJmJhcjAtPnJ4X3RyYWZmaWNfaW50KTsKIAkJCQlyZWFkbCgmYmFyMC0+cnhfdHJhZmZpY19pbnQpOwpAQCAtNzIyMCw3ICs3MjIwLDYgQEAKIAogCS8qIEluaXRpYWxpc2UgbmFwaSAqLwogCWlmIChjb25maWctPm5hcGkpIHsKLQkJaW50IGk7CiAJCWlmIChjb25maWctPmludHJfdHlwZSA9PSAgTVNJX1gpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCBzcC0+Y29uZmlnLnJ4X3JpbmdfbnVtOyBpKyspCiAJCQkJbmFwaV9lbmFibGUoJnNwLT5tYWNfY29udHJvbC5yaW5nc1tpXS5uYXBpKTsKQEAgLTc1NDIsNiArNzU0MSw3IEBACiAKIAlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5tZW1fZnJlZWQgKz0gc2tiLT50cnVlc2l6ZTsKIHNlbmRfdXA6CisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJpbmdfbm8pOwogCXF1ZXVlX3J4X2ZyYW1lKHNrYiwgUlhEX0dFVF9WTEFOX1RBRyhyeGRwLT5Db250cm9sXzIpKTsKIGFnZ3JlZ2F0ZToKIAlzcC0+bWFjX2NvbnRyb2wucmluZ3NbcmluZ19ub10ucnhfYnVmc19sZWZ0IC09IDE7CkBAIC04MDA5LDggKzgwMDksNyBAQAogCQlpZiAocmV0KSB7CiAKIAkJCURCR19QUklOVChFUlJfREJHLAotCQkJICAiJXM6IE1TSS1YIHJlcXVlc3RlZCBidXQgZmFpbGVkIHRvIGVuYWJsZVxuIiwKLQkJCSAgZGV2LT5uYW1lKTsKKwkJCSAgInMyaW86IE1TSS1YIHJlcXVlc3RlZCBidXQgZmFpbGVkIHRvIGVuYWJsZVxuIik7CiAJCQlzcC0+Y29uZmlnLmludHJfdHlwZSA9IElOVEE7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMgYi9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKaW5kZXggMzFlMzhmYS4uODhkZDJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYwpAQCAtMjAzOSw5ICsyMDM5LDkgQEAKIAkJc2JkbWFfdHhfcHJvY2VzcyhzYywmKHNjLT5zYm1fdHhkbWEpLCAwKTsKIAogCWlmIChpc3IgJiAoTV9NQUNfSU5UX0NIQU5ORUwgPDwgU19NQUNfUlhfQ0gwKSkgewotCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmc2MtPm5hcGkpKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnNjLT5uYXBpKSkgewogCQkJX19yYXdfd3JpdGVxKDAsIHNjLT5zYm1faW1yKTsKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnNjLT5uYXBpKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmc2MtPm5hcGkpOwogCQkJLyogRGVwZW5kIG9uIHRoZSBleGl0IGZyb20gcG9sbCB0byByZWVuYWJsZSBpbnRyICovCiAJCX0KIAkJZWxzZSB7CkBAIC0yNDc4LDcgKzI0NzgsNyBAQAogCQlyZXR1cm4gLUVOWElPOwogCX0KIAotCXBoeV9kZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeV9kZXYtPmRldi5idXNfaWQsICZzYm1hY19taWlfcG9sbCwgMCwKKwlwaHlfZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5X2Rldi0+ZGV2KSwgJnNibWFjX21paV9wb2xsLCAwLAogCQkJICAgICAgUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkpOwogCWlmIChJU19FUlIocGh5X2RldikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7CkBAIC0yNTAwLDcgKzI1MDAsNyBAQAogCiAJcHJfaW5mbygiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKIAkJZGV2LT5uYW1lLCBwaHlfZGV2LT5kcnYtPm5hbWUsCi0JCXBoeV9kZXYtPmRldi5idXNfaWQsIHBoeV9kZXYtPmlycSk7CisJCWRldl9uYW1lKCZwaHlfZGV2LT5kZXYpLCBwaHlfZGV2LT5pcnEpOwogCiAJc2MtPnBoeV9kZXYgPSBwaHlfZGV2OwogCkBAIC0yNjY3LDcgKzI2NjcsNyBAQAogCXNiZG1hX3R4X3Byb2Nlc3Moc2MsICYoc2MtPnNibV90eGRtYSksIDEpOwogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAogI2lmZGVmIENPTkZJR19TQk1BQ19DT0FMRVNDRQogCQlfX3Jhd193cml0ZXEoKChNX01BQ19JTlRfRU9QX0NPVU5UIHwgTV9NQUNfSU5UX0VPUF9USU1FUikgPDwgU19NQUNfVFhfQ0gwKSB8CkBAIC0yNjk3LDcgKzI2OTcsNyBAQAogCXNibV9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwogCWlmICghc2JtX2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIG1hcCBkZXZpY2UgcmVnaXN0ZXJzXG4iLAotCQkgICAgICAgcGxkZXYtPmRldi5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoJnBsZGV2LT5kZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXRfb3V0OwogCX0KQEAgLTI3MDgsNyArMjcwOCw3IEBACiAJICogSWYgd2UgZmluZCBhIHplcm8sIHNraXAgdGhpcyBNQUMuCiAJICovCiAJc2JtYWNfb3JpZ19od2FkZHIgPSBfX3Jhd19yZWFkcShzYm1fYmFzZSArIFJfTUFDX0VUSEVSTkVUX0FERFIpOwotCXByX2RlYnVnKCIlczogJXNjb25maWd1cmluZyBNQUMgYXQgMHglMDhMeFxuIiwgcGxkZXYtPmRldi5idXNfaWQsCisJcHJfZGVidWcoIiVzOiAlc2NvbmZpZ3VyaW5nIE1BQyBhdCAweCUwOEx4XG4iLCBkZXZfbmFtZSgmcGxkZXYtPmRldiksCiAJCSBzYm1hY19vcmlnX2h3YWRkciA/ICIiIDogIm5vdCAiLCAobG9uZyBsb25nKXJlcy0+c3RhcnQpOwogCWlmIChzYm1hY19vcmlnX2h3YWRkciA9PSAwKSB7CiAJCWVyciA9IDA7CkBAIC0yNzIxLDcgKzI3MjEsNyBAQAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgc2JtYWNfc29mdGMpKTsKIAlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgZXRoZXJkZXZcbiIsCi0JCSAgICAgICBwbGRldi0+ZGV2LmJ1c19pZCk7CisJCSAgICAgICBkZXZfbmFtZSgmcGxkZXYtPmRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dF91bm1hcDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYzkyMDMxLmMgYi9kcml2ZXJzL25ldC9zYzkyMDMxLmMKaW5kZXggOGI3NWJlZi4uYzEzY2JmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2M5MjAzMS5jCisrKyBiL2RyaXZlcnMvbmV0L3NjOTIwMzEuYwpAQCAtMTMsNiArMTMsOSBAQAogICogIEJvdGggYXJlIGFsbW9zdCBpZGVudGljYWwgYW5kIHNlZW0gdG8gYmUgYmFzZWQgb24gcGNpLXNrZWxldG9uLmMKICAqCiAgKiAgUmV3cml0dGVuIGZvciAyLjYgYnkgQ2VzYXIgRWR1YXJkbyBCYXJyb3MKKyAqCisgKiAgQSBkYXRhc2hlZXQgZm9yIHRoaXMgY2hpcCBjYW4gYmUgZm91bmQgYXQKKyAqICBodHRwOi8vd3d3LnNpbGFuLmNvbS5jbi9lbmdsaXNoL3Byb2R1Y3RzL3BkZi9TQzkyMDMxQVkucGRmCiAgKi8KIAogLyogTm90ZSBhYm91dCBzZXRfbWFjX2FkZHJlc3M6IEkgZG9uJ3Qga25vdyBob3cgdG8gY2hhbmdlIHRoZSBoYXJkd2FyZQpAQCAtMzEsMTMgKzM0LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJTEFOCQkweDE5MDQKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUxBTl9TQzkyMDMxCTB4MjAzMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJTEFOXzgxMzlECTB4ODEzOQotCiAjZGVmaW5lIFNDOTIwMzFfTkFNRSAic2M5MjAzMSIKLSNkZWZpbmUgU0M5MjAzMV9ERVNDUklQVElPTiAiU2lsYW4gU0M5MjAzMSBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIGRyaXZlciIKLSNkZWZpbmUgU0M5MjAzMV9WRVJTSU9OICIyLjBjIgogCiAvKiBCQVIgMCBpcyBNTUlPLCBCQVIgMSBpcyBQSU8gKi8KICNpZm5kZWYgU0M5MjAzMV9VU0VfQkFSCkBAIC0xMjY0LDcgKzEyNjEsNiBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcHJpdi0+cGRldjsKIAogCXN0cmNweShkcnZpbmZvLT5kcml2ZXIsIFNDOTIwMzFfTkFNRSk7Ci0Jc3RyY3B5KGRydmluZm8tPnZlcnNpb24sIFNDOTIwMzFfVkVSU0lPTik7CiAJc3RyY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShwZGV2KSk7CiB9CiAKQEAgLTE0MjMsNiArMTQxOSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc2M5MjAzMV9wcml2ICpwcml2OwogCXUzMiBtYWMwLCBtYWMxOworCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHVubGlrZWx5KGVyciA8IDApKQpAQCAtMTQ5Nyw2ICsxNDk0LDE0IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X3JlZ2lzdGVyX25ldGRldjsKIAorI2lmIFNDOTIwMzFfVVNFX0JBUiA9PSAwCisJYmFzZV9hZGRyID0gZGV2LT5tZW1fc3RhcnQ7CisjZWxpZiBTQzkyMDMxX1VTRV9CQVIgPT0gMQorCWJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOworI2VuZGlmCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNDOTIwMzEgYXQgMHglbHgsICVwTSwgSVJRICVkXG4iLCBkZXYtPm5hbWUsCisJCQliYXNlX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+aXJxKTsKKwogCXJldHVybiAwOwogCiBvdXRfcmVnaXN0ZXJfbmV0ZGV2OgpAQCAtMTU4Niw4ICsxNTkxLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNjOTIwMzFfcGNpX2RldmljZV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0lMQU4sIFBDSV9ERVZJQ0VfSURfU0lMQU5fU0M5MjAzMSkgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSUxBTiwgUENJX0RFVklDRV9JRF9TSUxBTl84MTM5RCkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSUxBTiwgMHgyMDMxKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJTEFOLCAweDgxMzkpIH0sCiAJeyAwLCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNjOTIwMzFfcGNpX2RldmljZV9pZF90YWJsZSk7CkBAIC0xNjAzLDcgKzE2MDgsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzYzkyMDMxX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPIFNDOTIwMzFfREVTQ1JJUFRJT04gIiAiIFNDOTIwMzFfVkVSU0lPTiAiXG4iKTsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2M5MjAzMV9wY2lfZHJpdmVyKTsKIH0KIApAQCAtMTYxNyw1ICsxNjIxLDQgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQ2VzYXIgRWR1YXJkbyBCYXJyb3MgPGNlc2FyYkBjZXNhcmIubmV0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKFNDOTIwMzFfREVTQ1JJUFRJT04pOwotTU9EVUxFX1ZFUlNJT04oU0M5MjAzMV9WRVJTSU9OKTsKK01PRFVMRV9ERVNDUklQVElPTigiU2lsYW4gU0M5MjAzMSBQQ0kgRmFzdCBFdGhlcm5ldCBBZGFwdGVyIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2VlcTgwMDUuYyBiL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmMKaW5kZXggMTJhOGZmZi4uZWJiYmUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2VlcTgwMDUuYworKysgYi9kcml2ZXJzL25ldC9zZWVxODAwNS5jCkBAIC0xNDMsNiArMTQzLDE3IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzZWVxODAwNV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBzZWVxODAwNV9vcGVuLAorCS5uZG9fc3RvcAkJPSBzZWVxODAwNV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gc2VlcTgwMDVfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CQk9IHNlZXE4MDA1X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIFRoaXMgaXMgdGhlIHJlYWwgcHJvYmUgcm91dGluZS4gIExpbnV4IGhhcyBhIGhpc3Rvcnkgb2YgZnJpZW5kbHkgZGV2aWNlCiAgICBwcm9iZXMgb24gdGhlIElTQSBidXMuICBBIGdvb2QgZGV2aWNlIHByb2JlcyBhdm9pZHMgZG9pbmcgd3JpdGVzLCBhbmQKICAgIHZlcmlmaWVzIHRoYXQgdGhlIGNvcnJlY3QgZGV2aWNlIGV4aXN0cyBhbmQgZnVuY3Rpb25zLiAgKi8KQEAgLTMzMiwxMiArMzQzLDggQEAKIAkJIH0KIAl9CiAjZW5kaWYKLQlkZXYtPm9wZW4JCT0gc2VlcTgwMDVfb3BlbjsKLQlkZXYtPnN0b3AJCT0gc2VlcTgwMDVfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgCT0gc2VlcTgwMDVfc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0CQk9IHNlZXE4MDA1X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnNlZXE4MDA1X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaLzIwOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc2V0X211bHRpY2FzdF9saXN0OwogCWRldi0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9LY29uZmlnIGIvZHJpdmVycy9uZXQvc2ZjL0tjb25maWcKaW5kZXggYzUzNTQwOC4uMTJhODI5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvc2ZjL0tjb25maWcKQEAgLTIsNyArMiw2IEBACiAJdHJpc3RhdGUgIlNvbGFyZmxhcmUgU29sYXJzdG9ybSBTRkM0MDAwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAogCXNlbGVjdCBNSUkKLQlzZWxlY3QgSU5FVF9MUk8KIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgSTJDCiAJc2VsZWN0IEkyQ19BTEdPQklUCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvYml0ZmllbGQuaCBiL2RyaXZlcnMvbmV0L3NmYy9iaXRmaWVsZC5oCmluZGV4IGQ5NWMyMTguLmQ1NGQ4NGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9iaXRmaWVsZC5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9iaXRmaWVsZC5oCkBAIC01NDMsNyArNTQzLDcgQEAKIAogLyogU3RhdGljIGluaXRpYWxpc2VyICovCiAjZGVmaW5lIEVGWF9PV09SRDMyKGEsIGIsIGMsIGQpCQkJCQkJXAotCXsgLnUzMiA9IHsgX19jb25zdGFudF9jcHVfdG9fbGUzMihhKSwgX19jb25zdGFudF9jcHVfdG9fbGUzMihiKSwgXAotCQkgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKGMpLCBfX2NvbnN0YW50X2NwdV90b19sZTMyKGQpIH0gfQorCXsgLnUzMiA9IHsgY3B1X3RvX2xlMzIoYSksIGNwdV90b19sZTMyKGIpLCBcCisJCSAgIGNwdV90b19sZTMyKGMpLCBjcHVfdG9fbGUzMihkKSB9IH0KIAogI2VuZGlmIC8qIEVGWF9CSVRGSUVMRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmMgYi9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmMKaW5kZXggNjQ5MDM0OS4uNTE4MmFjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuYwpAQCAtMjYsNyArMjYsNyBAQAogewogCXN0cnVjdCBlZnhfbmljICplZnggPSAoc3RydWN0IGVmeF9uaWMgKiljb250ZXh0OwogCXN0cnVjdCBlZnhfYmxpbmtlciAqYmwgPSAmZWZ4LT5ib2FyZF9pbmZvLmJsaW5rZXI7Ci0JZWZ4LT5ib2FyZF9pbmZvLnNldF9mYXVsdF9sZWQoZWZ4LCBibC0+c3RhdGUpOworCWVmeC0+Ym9hcmRfaW5mby5zZXRfaWRfbGVkKGVmeCwgYmwtPnN0YXRlKTsKIAlibC0+c3RhdGUgPSAhYmwtPnN0YXRlOwogCWlmIChibC0+cmVzdWJtaXQpCiAJCW1vZF90aW1lcigmYmwtPnRpbWVyLCBqaWZmaWVzICsgQkxJTktfSU5URVJWQUwpOwpAQCAtNDgsNyArNDgsNyBAQAogCQlibGlua2VyLT5yZXN1Ym1pdCA9IGZhbHNlOwogCQlpZiAoYmxpbmtlci0+dGltZXIuZnVuY3Rpb24pCiAJCQlkZWxfdGltZXJfc3luYygmYmxpbmtlci0+dGltZXIpOwotCQllZngtPmJvYXJkX2luZm8uc2V0X2ZhdWx0X2xlZChlZngsIGZhbHNlKTsKKwkJZWZ4LT5ib2FyZF9pbmZvLmluaXRfbGVkcyhlZngpOwogCX0KIH0KIApAQCAtMTg1LDcgKzE4NSw3IEBACiAjZGVmaW5lIFNGRTQwMDJfUlhfTEVEICAgICgwKQkvKiBHcmVlbiAqLwogI2RlZmluZSBTRkU0MDAyX1RYX0xFRCAgICAoMSkJLyogQW1iZXIgKi8KIAotc3RhdGljIGludCBzZmU0MDAyX2luaXRfbGVkcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQorc3RhdGljIHZvaWQgc2ZlNDAwMl9pbml0X2xlZHMoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAkvKiBTZXQgdGhlIFRYIGFuZCBSWCBMRURzIHRvIHJlZmxlY3Qgc3RhdHVzIGFuZCBhY3Rpdml0eSwgYW5kIHRoZQogCSAqIGZhdWx0IExFRCBvZmYgKi8KQEAgLTE5NCwxMSArMTk0LDkgQEAKIAl4ZnBfc2V0X2xlZChlZngsIFNGRTQwMDJfUlhfTEVELAogCQkgICAgUVVBS0VfTEVEX1JYTElOSyB8IFFVQUtFX0xFRF9MSU5LX0FDVFNUQVQpOwogCXhmcF9zZXRfbGVkKGVmeCwgU0ZFNDAwMl9GQVVMVF9MRUQsIFFVQUtFX0xFRF9PRkYpOwotCWVmeC0+Ym9hcmRfaW5mby5ibGlua2VyLmxlZF9udW0gPSBTRkU0MDAyX0ZBVUxUX0xFRDsKLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc2ZlNDAwMl9mYXVsdF9sZWQoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHNmZTQwMDJfc2V0X2lkX2xlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIHN0YXRlKQogewogCXhmcF9zZXRfbGVkKGVmeCwgU0ZFNDAwMl9GQVVMVF9MRUQsIHN0YXRlID8gUVVBS0VfTEVEX09OIDoKIAkJCVFVQUtFX0xFRF9PRkYpOwpAQCAtMjIyLDcgKzIyMCw2NyBAQAogCQlyZXR1cm4gcmM7CiAJZWZ4LT5ib2FyZF9pbmZvLm1vbml0b3IgPSBzZmU0MDAyX2NoZWNrX2h3OwogCWVmeC0+Ym9hcmRfaW5mby5pbml0X2xlZHMgPSBzZmU0MDAyX2luaXRfbGVkczsKLQllZngtPmJvYXJkX2luZm8uc2V0X2ZhdWx0X2xlZCA9IHNmZTQwMDJfZmF1bHRfbGVkOworCWVmeC0+Ym9hcmRfaW5mby5zZXRfaWRfbGVkID0gc2ZlNDAwMl9zZXRfaWRfbGVkOworCWVmeC0+Ym9hcmRfaW5mby5ibGluayA9IGJvYXJkX2JsaW5rOworCWVmeC0+Ym9hcmRfaW5mby5maW5pID0gZWZ4X2ZpbmlfbG04NzsKKwlyZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTdXBwb3J0IGZvciB0aGUgU0ZONDExMkYKKyAqCisgKi8KK3N0YXRpYyB1OCBzZm40MTEyZl9sbTg3X2NoYW5uZWwgPSAweDAzOyAvKiB1c2UgQUlOIG5vdCBGQU4gaW5wdXRzICovCisKK3N0YXRpYyBjb25zdCB1OCBzZm40MTEyZl9sbTg3X3JlZ3NbXSA9IHsKKwlMTTg3X0lOX0xJTUlUUygwLCAweDgzLCAweDkxKSwJCS8qIDIuNVY6ICAxLjhWICsvLSA1JSAqLworCUxNODdfSU5fTElNSVRTKDEsIDB4NTEsIDB4NWEpLAkJLyogVmNjcDE6IDEuMlYgKy8tIDUlICovCisJTE04N19JTl9MSU1JVFMoMiwgMHhiNiwgMHhjYSksCQkvKiAzLjNWOiAgMy4zViArLy0gNSUgKi8KKwlMTTg3X0lOX0xJTUlUUyg0LCAweGIwLCAweGUwKSwJCS8qIDEyVjogICAxMS0xNFYgKi8KKwlMTTg3X0lOX0xJTUlUUyg1LCAweDQ0LCAweDRiKSwJCS8qIFZjY3AyOiAxLjBWICsvLSA1JSAqLworCUxNODdfQUlOX0xJTUlUUygxLCAweDkxLCAweGExKSwJCS8qIEFJTjI6ICAxLjVWICsvLSA1JSAqLworCUxNODdfVEVNUF9JTlRfTElNSVRTKDEwLCA2MCksCQkvKiBib2FyZCAqLworCUxNODdfVEVNUF9FWFQxX0xJTUlUUygxMCwgNzApLAkJLyogRmFsY29uICovCisJMAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBzZm40MTEyZl9od21vbl9pbmZvID0geworCUkyQ19CT0FSRF9JTkZPKCJsbTg3IiwgMHgyZSksCisJLnBsYXRmb3JtX2RhdGEJPSAmc2ZuNDExMmZfbG04N19jaGFubmVsLAorCS5pcnEJCT0gLTEsCit9OworCisjZGVmaW5lIFNGTjQxMTJGX0FDVF9MRUQJMAorI2RlZmluZSBTRk40MTEyRl9MSU5LX0xFRAkxCisKK3N0YXRpYyB2b2lkIHNmbjQxMTJmX2luaXRfbGVkcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXhmcF9zZXRfbGVkKGVmeCwgU0ZONDExMkZfQUNUX0xFRCwKKwkJICAgIFFVQUtFX0xFRF9SWExJTksgfCBRVUFLRV9MRURfTElOS19BQ1QpOworCXhmcF9zZXRfbGVkKGVmeCwgU0ZONDExMkZfTElOS19MRUQsCisJCSAgICBRVUFLRV9MRURfUlhMSU5LIHwgUVVBS0VfTEVEX0xJTktfU1RBVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNmbjQxMTJmX3NldF9pZF9sZWQoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBzdGF0ZSkKK3sKKwl4ZnBfc2V0X2xlZChlZngsIFNGTjQxMTJGX0xJTktfTEVELAorCQkgICAgc3RhdGUgPyBRVUFLRV9MRURfT04gOiBRVUFLRV9MRURfT0ZGKTsKK30KKworc3RhdGljIGludCBzZm40MTEyZl9jaGVja19odyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCS8qIE1hc2sgb3V0IHVudXNlZCBzZW5zb3JzICovCisJcmV0dXJuIGVmeF9jaGVja19sbTg3KGVmeCwgfjB4NDgpOworfQorCitzdGF0aWMgaW50IHNmbjQxMTJmX2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwlpbnQgcmMgPSBlZnhfaW5pdF9sbTg3KGVmeCwgJnNmbjQxMTJmX2h3bW9uX2luZm8sIHNmbjQxMTJmX2xtODdfcmVncyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJZWZ4LT5ib2FyZF9pbmZvLm1vbml0b3IgPSBzZm40MTEyZl9jaGVja19odzsKKwllZngtPmJvYXJkX2luZm8uaW5pdF9sZWRzID0gc2ZuNDExMmZfaW5pdF9sZWRzOworCWVmeC0+Ym9hcmRfaW5mby5zZXRfaWRfbGVkID0gc2ZuNDExMmZfc2V0X2lkX2xlZDsKIAllZngtPmJvYXJkX2luZm8uYmxpbmsgPSBib2FyZF9ibGluazsKIAllZngtPmJvYXJkX2luZm8uZmluaSA9IGVmeF9maW5pX2xtODc7CiAJcmV0dXJuIDA7CkBAIC0yNDMsNiArMzAxLDggQEAKIAl7IEVGWF9CT0FSRF9TRkU0MDAyLCAiU0ZFNDAwMiIsICJYRlAgYWRhcHRlciIsIHNmZTQwMDJfaW5pdCB9LAogCXsgRUZYX0JPQVJEX1NGTjQxMTFULCAiU0ZONDExMVQiLCAiMTAwLzEwMDAvMTBHQkFTRS1UIGFkYXB0ZXIiLAogCSAgc2ZuNDExMXRfaW5pdCB9LAorCXsgRUZYX0JPQVJEX1NGTjQxMTJGLCAiU0ZONDExMkYiLCAiU0ZQKyBhZGFwdGVyIiwKKwkgIHNmbjQxMTJmX2luaXQgfSwKIH07CiAKIHZvaWQgZWZ4X3NldF9ib2FyZF9pbmZvKHN0cnVjdCBlZnhfbmljICplZngsIHUxNiByZXZpc2lvbl9pbmZvKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5oIGIvZHJpdmVycy9uZXQvc2ZjL2JvYXJkcy5oCmluZGV4IGQ5M2M2YzYuLjQ0OTQyZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9ib2FyZHMuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvYm9hcmRzLmgKQEAgLTE1LDYgKzE1LDcgQEAKIAlFRlhfQk9BUkRfU0ZFNDAwMSA9IDEsCiAJRUZYX0JPQVJEX1NGRTQwMDIgPSAyLAogCUVGWF9CT0FSRF9TRk40MTExVCA9IDB4NTEsCisJRUZYX0JPQVJEX1NGTjQxMTJGID0gMHg1MiwKIH07CiAKIGV4dGVybiB2b2lkIGVmeF9zZXRfYm9hcmRfaW5mbyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCB1MTYgcmV2aXNpb25faW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKaW5kZXggYWIwZTA5Yi4uNmVmZjljYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwpAQCAtMTMzLDYgKzEzMywxNiBAQAogbW9kdWxlX3BhcmFtKHBoeV9mbGFzaF9jZmcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHBoeV9mbGFzaF9jZmcsICJTZXQgUEhZcyBpbnRvIHJlZmxhc2ggbW9kZSBpbml0aWFsbHkiKTsKIAorc3RhdGljIHVuc2lnbmVkIGlycV9hZGFwdF9sb3dfdGhyZXNoID0gMTAwMDA7Cittb2R1bGVfcGFyYW0oaXJxX2FkYXB0X2xvd190aHJlc2gsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpcnFfYWRhcHRfbG93X3RocmVzaCwKKwkJICJUaHJlc2hvbGQgc2NvcmUgZm9yIHJlZHVjaW5nIElSUSBtb2RlcmF0aW9uIik7CisKK3N0YXRpYyB1bnNpZ25lZCBpcnFfYWRhcHRfaGlnaF90aHJlc2ggPSAyMDAwMDsKK21vZHVsZV9wYXJhbShpcnFfYWRhcHRfaGlnaF90aHJlc2gsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpcnFfYWRhcHRfaGlnaF90aHJlc2gsCisJCSAiVGhyZXNob2xkIHNjb3JlIGZvciBpbmNyZWFzaW5nIElSUSBtb2RlcmF0aW9uIik7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFV0aWxpdHkgZnVuY3Rpb25zIGFuZCBwcm90b3R5cGVzCkBAIC0xODIsNyArMTkyLDYgQEAKIAkJY2hhbm5lbC0+cnhfcGt0ID0gTlVMTDsKIAl9CiAKLQllZnhfZmx1c2hfbHJvKGNoYW5uZWwpOwogCWVmeF9yeF9zdHJhdGVneShjaGFubmVsKTsKIAogCWVmeF9mYXN0X3B1c2hfcnhfZGVzY3JpcHRvcnMoJmVmeC0+cnhfcXVldWVbY2hhbm5lbC0+Y2hhbm5lbF0pOwpAQCAtMjI0LDEyICsyMzMsNDEgQEAKIAlyeF9wYWNrZXRzID0gZWZ4X3Byb2Nlc3NfY2hhbm5lbChjaGFubmVsLCBidWRnZXQpOwogCiAJaWYgKHJ4X3BhY2tldHMgPCBidWRnZXQpIHsKKwkJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKKworCQlpZiAoY2hhbm5lbC0+dXNlZF9mbGFncyAmIEVGWF9VU0VEX0JZX1JYICYmCisJCSAgICBlZngtPmlycV9yeF9hZGFwdGl2ZSAmJgorCQkgICAgdW5saWtlbHkoKytjaGFubmVsLT5pcnFfY291bnQgPT0gMTAwMCkpIHsKKwkJCXVuc2lnbmVkIG9sZF9pcnFfbW9kZXJhdGlvbiA9IGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uOworCisJCQlpZiAodW5saWtlbHkoY2hhbm5lbC0+aXJxX21vZF9zY29yZSA8CisJCQkJICAgICBpcnFfYWRhcHRfbG93X3RocmVzaCkpIHsKKwkJCQljaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9CisJCQkJCW1heF90KGludCwKKwkJCQkJICAgICAgY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gLQorCQkJCQkgICAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OLAorCQkJCQkgICAgICBGQUxDT05fSVJRX01PRF9SRVNPTFVUSU9OKTsKKwkJCX0gZWxzZSBpZiAodW5saWtlbHkoY2hhbm5lbC0+aXJxX21vZF9zY29yZSA+CisJCQkJCSAgICBpcnFfYWRhcHRfaGlnaF90aHJlc2gpKSB7CisJCQkJY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPQorCQkJCQltaW4oY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gKworCQkJCQkgICAgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTiwKKwkJCQkJICAgIGVmeC0+aXJxX3J4X21vZGVyYXRpb24pOworCQkJfQorCisJCQlpZiAoY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gIT0gb2xkX2lycV9tb2RlcmF0aW9uKQorCQkJCWZhbGNvbl9zZXRfaW50X21vZGVyYXRpb24oY2hhbm5lbCk7CisKKwkJCWNoYW5uZWwtPmlycV9jb3VudCA9IDA7CisJCQljaGFubmVsLT5pcnFfbW9kX3Njb3JlID0gMDsKKwkJfQorCiAJCS8qIFRoZXJlIGlzIG5vIHJhY2UgaGVyZTsgYWx0aG91Z2ggbmFwaV9kaXNhYmxlKCkgd2lsbAotCQkgKiBvbmx5IHdhaXQgZm9yIG5ldGlmX3J4X2NvbXBsZXRlKCksIHRoaXMgaXNuJ3QgYSBwcm9ibGVtCisJCSAqIG9ubHkgd2FpdCBmb3IgbmFwaV9jb21wbGV0ZSgpLCB0aGlzIGlzbid0IGEgcHJvYmxlbQogCQkgKiBzaW5jZSBlZnhfY2hhbm5lbF9wcm9jZXNzZWQoKSB3aWxsIGhhdmUgbm8gZWZmZWN0IGlmCiAJCSAqIGludGVycnVwdHMgaGF2ZSBhbHJlYWR5IGJlZW4gZGlzYWJsZWQuCiAJCSAqLwotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJZWZ4X2NoYW5uZWxfcHJvY2Vzc2VkKGNoYW5uZWwpOwogCX0KIApAQCAtNTU4LDYgKzU5Niw4IEBACiAKIH0KIAorc3RhdGljIHZvaWQgZWZ4X2ZpbmlfcG9ydChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKKwogLyogVGhpcyBjYWxsIHJlaW5pdGlhbGlzZXMgdGhlIE1BQyB0byBwaWNrIHVwIG5ldyBQSFkgc2V0dGluZ3MuIFRoZQogICogY2FsbGVyIG11c3QgaG9sZCB0aGUgbWFjX2xvY2sgKi8KIHZvaWQgX19lZnhfcmVjb25maWd1cmVfcG9ydChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQpAQCAtNTkzLDggKzYzMyw4IEBACiAKIGZhaWw6CiAJRUZYX0VSUihlZngsICJmYWlsZWQgdG8gcmVjb25maWd1cmUgTUFDXG4iKTsKLQllZngtPnBoeV9vcC0+ZmluaShlZngpOwotCWVmeC0+cG9ydF9pbml0aWFsaXplZCA9IGZhbHNlOworCWVmeC0+cG9ydF9lbmFibGVkID0gZmFsc2U7CisJZWZ4X2ZpbmlfcG9ydChlZngpOwogfQogCiAvKiBSZWluaXRpYWxpc2UgdGhlIE1BQyB0byBwaWNrIHVwIG5ldyBQSFkgc2V0dGluZ3MsIGV2ZW4gaWYgdGhlIHBvcnQgaXMKQEAgLTk5MCw3ICsxMDMwLDcgQEAKIAllZnhfc2V0X2NoYW5uZWxzKGVmeCk7CiAKIAkvKiBJbml0aWFsaXNlIHRoZSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBzZXR0aW5ncyAqLwotCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfaXJxX21vZF91c2VjLCByeF9pcnFfbW9kX3VzZWMpOworCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfaXJxX21vZF91c2VjLCByeF9pcnFfbW9kX3VzZWMsIHRydWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTg3LDcgKzEyMjcsOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBTZXQgaW50ZXJydXB0IG1vZGVyYXRpb24gcGFyYW1ldGVycyAqLwotdm9pZCBlZnhfaW5pdF9pcnFfbW9kZXJhdGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgdHhfdXNlY3MsIGludCByeF91c2VjcykKK3ZvaWQgZWZ4X2luaXRfaXJxX21vZGVyYXRpb24oc3RydWN0IGVmeF9uaWMgKmVmeCwgaW50IHR4X3VzZWNzLCBpbnQgcnhfdXNlY3MsCisJCQkgICAgIGJvb2wgcnhfYWRhcHRpdmUpCiB7CiAJc3RydWN0IGVmeF90eF9xdWV1ZSAqdHhfcXVldWU7CiAJc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWU7CkBAIC0xMTk3LDYgKzEyMzgsOCBAQAogCWVmeF9mb3JfZWFjaF90eF9xdWV1ZSh0eF9xdWV1ZSwgZWZ4KQogCQl0eF9xdWV1ZS0+Y2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPSB0eF91c2VjczsKIAorCWVmeC0+aXJxX3J4X2FkYXB0aXZlID0gcnhfYWRhcHRpdmU7CisJZWZ4LT5pcnFfcnhfbW9kZXJhdGlvbiA9IHJ4X3VzZWNzOwogCWVmeF9mb3JfZWFjaF9yeF9xdWV1ZShyeF9xdWV1ZSwgZWZ4KQogCQlyeF9xdWV1ZS0+Y2hhbm5lbC0+aXJxX21vZGVyYXRpb24gPSByeF91c2VjczsKIH0KQEAgLTEyNjksMTggKzEzMTIsMTEgQEAKIHN0YXRpYyBpbnQgZWZ4X2luaXRfbmFwaShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbDsKLQlpbnQgcmM7CiAKIAllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKIAkJY2hhbm5lbC0+bmFwaV9kZXYgPSBlZngtPm5ldF9kZXY7Ci0JCXJjID0gZWZ4X2xyb19pbml0KCZjaGFubmVsLT5scm9fbWdyLCBlZngpOwotCQlpZiAocmMpCi0JCQlnb3RvIGVycjsKIAl9CiAJcmV0dXJuIDA7Ci0gZXJyOgotCWVmeF9maW5pX25hcGkoZWZ4KTsKLQlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyB2b2lkIGVmeF9maW5pX25hcGkoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTEyODgsNyArMTMyNCw2IEBACiAJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwogCiAJZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KSB7Ci0JCWVmeF9scm9fZmluaSgmY2hhbm5lbC0+bHJvX21ncik7CiAJCWNoYW5uZWwtPm5hcGlfZGV2ID0gTlVMTDsKIAl9CiB9CkBAIC0xNjc2LDcgKzE3MTEsOCBAQAogCQkJcmMgPSBlZngtPnBoeV9vcC0+aW5pdChlZngpOwogCQkJaWYgKHJjKQogCQkJCW9rID0gZmFsc2U7Ci0JCX0gZWxzZQorCQl9CisJCWlmICghb2spCiAJCQllZngtPnBvcnRfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAl9CiAKQEAgLTE4NTcsOCArMTg5Myw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZWZ4X2JvYXJkIGVmeF9kdW1teV9ib2FyZF9pbmZvID0gewogCS5pbml0CQk9IGVmeF9wb3J0X2R1bW15X29wX2ludCwKLQkuaW5pdF9sZWRzCT0gZWZ4X3BvcnRfZHVtbXlfb3BfaW50LAotCS5zZXRfZmF1bHRfbGVkCT0gZWZ4X3BvcnRfZHVtbXlfb3BfYmxpbmssCisJLmluaXRfbGVkcwk9IGVmeF9wb3J0X2R1bW15X29wX3ZvaWQsCisJLnNldF9pZF9sZWQJPSBlZnhfcG9ydF9kdW1teV9vcF9ibGluaywKIAkubW9uaXRvcgk9IGVmeF9wb3J0X2R1bW15X29wX2ludCwKIAkuYmxpbmsJCT0gZWZ4X3BvcnRfZHVtbXlfb3BfYmxpbmssCiAJLmZpbmkJCT0gZWZ4X3BvcnRfZHVtbXlfb3Bfdm9pZCwKQEAgLTIxMjAsNyArMjE1Niw3IEBACiAJbmV0X2Rldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfU0cgfAogCQkJICAgICAgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9UU08pOwogCWlmIChscm8pCi0JCW5ldF9kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTFJPOworCQluZXRfZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0dSTzsKIAkvKiBNYXNrIGZvciBmZWF0dXJlcyB0aGF0IGFsc28gYXBwbHkgdG8gVkxBTiBkZXZpY2VzICovCiAJbmV0X2Rldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9BTExfQ1NVTSB8IE5FVElGX0ZfU0cgfAogCQkJCSAgIE5FVElGX0ZfSElHSERNQSB8IE5FVElGX0ZfVFNPKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguaCBiL2RyaXZlcnMvbmV0L3NmYy9lZnguaAppbmRleCA1NWQwZjEzLi5kYTE1N2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCkBAIC01Miw3ICs1Miw3IEBACiBleHRlcm4gdm9pZCBlZnhfc3VzcGVuZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiB2b2lkIGVmeF9yZXN1bWUoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiBleHRlcm4gdm9pZCBlZnhfaW5pdF9pcnFfbW9kZXJhdGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgdHhfdXNlY3MsCi0JCQkJICAgIGludCByeF91c2Vjcyk7CisJCQkJICAgIGludCByeF91c2VjcywgYm9vbCByeF9hZGFwdGl2ZSk7CiBleHRlcm4gaW50IGVmeF9yZXF1ZXN0X3Bvd2VyKHN0cnVjdCBlZnhfbmljICplZngsIGludCBtdywgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBlZnhfaGV4X2R1bXAoY29uc3QgdTggKiwgdW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOwogCkBAIC04MCw3ICs4MCw3IEBACiAJCSAgY2hhbm5lbC0+Y2hhbm5lbCwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAJY2hhbm5lbC0+d29ya19wZW5kaW5nID0gdHJ1ZTsKIAotCW5ldGlmX3J4X3NjaGVkdWxlKCZjaGFubmVsLT5uYXBpX3N0cik7CisJbmFwaV9zY2hlZHVsZSgmY2hhbm5lbC0+bmFwaV9zdHIpOwogfQogCiAjZW5kaWYgLyogRUZYX0VGWF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwppbmRleCA3YjU5MjRjMC4uNjQzMDlmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCkBAIC01MjksNyArNTI5LDE0IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCi0JcmV0dXJuIG1paV9ud2F5X3Jlc3RhcnQoJmVmeC0+bWlpKTsKKwlpZiAoZWZ4LT5waHlfb3AtPm1tZHMgJiBERVZfUFJFU0VOVF9CSVQoTURJT19NTURfQU4pKSB7CisJCW1kaW9fY2xhdXNlNDVfc2V0X2ZsYWcoZWZ4LCBlZngtPm1paS5waHlfaWQsIE1ESU9fTU1EX0FOLAorCQkJCSAgICAgICBNRElPX01NRFJFR19DVFJMMSwKKwkJCQkgICAgICAgX19mZnMoQk1DUl9BTlJFU1RBUlQpLCB0cnVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCiBzdGF0aWMgdTMyIGVmeF9ldGh0b29sX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KQpAQCAtNTk3LDcgKzYwNCw2IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwogCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOwotCXN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlOwogCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbDsKIAogCW1lbXNldChjb2FsZXNjZSwgMCwgc2l6ZW9mKCpjb2FsZXNjZSkpOwpAQCAtNjE1LDE0ICs2MjEsOCBAQAogCQl9CiAJfQogCi0JLyogRmluZCBsb3dlc3QgSVJRIG1vZGVyYXRpb24gYWNyb3NzIGFsbCB1c2VkIFJYIHF1ZXVlcyAqLwotCWNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19pcnEgPSB+KCh1MzIpIDApOwotCWVmeF9mb3JfZWFjaF9yeF9xdWV1ZShyeF9xdWV1ZSwgZWZ4KSB7Ci0JCWNoYW5uZWwgPSByeF9xdWV1ZS0+Y2hhbm5lbDsKLQkJaWYgKGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIDwgY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSkKLQkJCWNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2Vjc19pcnEgPQotCQkJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uOwotCX0KKwljb2FsZXNjZS0+dXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlID0gZWZ4LT5pcnFfcnhfYWRhcHRpdmU7CisJY29hbGVzY2UtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSA9IGVmeC0+aXJxX3J4X21vZGVyYXRpb247CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYzNiwxMCArNjM2LDkgQEAKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7CiAJc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwogCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOwotCXVuc2lnbmVkIHR4X3VzZWNzLCByeF91c2VjczsKKwl1bnNpZ25lZCB0eF91c2VjcywgcnhfdXNlY3MsIGFkYXB0aXZlOwogCi0JaWYgKGNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgfHwKLQkgICAgY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZSkKKwlpZiAoY29hbGVzY2UtPnVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGNvYWxlc2NlLT5yeF9jb2FsZXNjZV91c2VjcyB8fCBjb2FsZXNjZS0+dHhfY29hbGVzY2VfdXNlY3MpIHsKQEAgLTY1MCw2ICs2NDksNyBAQAogCiAJcnhfdXNlY3MgPSBjb2FsZXNjZS0+cnhfY29hbGVzY2VfdXNlY3NfaXJxOwogCXR4X3VzZWNzID0gY29hbGVzY2UtPnR4X2NvYWxlc2NlX3VzZWNzX2lycTsKKwlhZGFwdGl2ZSA9IGNvYWxlc2NlLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2U7CiAKIAkvKiBJZiB0aGUgY2hhbm5lbCBpcyBzaGFyZWQgb25seSBhbGxvdyBSWCBwYXJhbWV0ZXJzIHRvIGJlIHNldCAqLwogCWVmeF9mb3JfZWFjaF90eF9xdWV1ZSh0eF9xdWV1ZSwgZWZ4KSB7CkBAIC02NjEsNyArNjYxLDcgQEAKIAkJfQogCX0KIAotCWVmeF9pbml0X2lycV9tb2RlcmF0aW9uKGVmeCwgdHhfdXNlY3MsIHJ4X3VzZWNzKTsKKwllZnhfaW5pdF9pcnFfbW9kZXJhdGlvbihlZngsIHR4X3VzZWNzLCByeF91c2VjcywgYWRhcHRpdmUpOwogCiAJLyogUmVzZXQgY2hhbm5lbCB0byBwaWNrIHVwIG5ldyBtb2RlcmF0aW9uIHZhbHVlLiAgTm90ZSB0aGF0CiAJICogdGhpcyBtYXkgY2hhbmdlIHRoZSB2YWx1ZSBvZiB0aGUgaXJxX21vZGVyYXRpb24gZmllbGQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYwppbmRleCBkNTM3OGU2Li4yM2ExYjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCkBAIC0zOSwxMSArMzksMTYgQEAKICAqIEBuZXh0X2J1ZmZlcl90YWJsZTogRmlyc3QgYXZhaWxhYmxlIGJ1ZmZlciB0YWJsZSBpZAogICogQHBjaV9kZXYyOiBUaGUgc2Vjb25kYXJ5IFBDSSBkZXZpY2UgaWYgcHJlc2VudAogICogQGkyY19kYXRhOiBPcGVyYXRpb25zIGFuZCBzdGF0ZSBmb3IgSTJDIGJpdC1iYXNoaW5nIGFsZ29yaXRobQorICogQGludF9lcnJvcl9jb3VudDogTnVtYmVyIG9mIGludGVybmFsIGVycm9ycyBzZWVuIHJlY2VudGx5CisgKiBAaW50X2Vycm9yX2V4cGlyZTogVGltZSBhdCB3aGljaCBlcnJvciBjb3VudCB3aWxsIGJlIGV4cGlyZWQKICAqLwogc3RydWN0IGZhbGNvbl9uaWNfZGF0YSB7CiAJdW5zaWduZWQgbmV4dF9idWZmZXJfdGFibGU7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYyOwogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBpMmNfZGF0YTsKKworCXVuc2lnbmVkIGludF9lcnJvcl9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGludF9lcnJvcl9leHBpcmU7CiB9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTExOSw4ICsxMjQsMTIgQEAKICNkZWZpbmUgRkFMQ09OX0VWUV9TSVpFIDQwOTYKICNkZWZpbmUgRkFMQ09OX0VWUV9NQVNLIChGQUxDT05fRVZRX1NJWkUgLSAxKQogCi0vKiBNYXggbnVtYmVyIG9mIGludGVybmFsIGVycm9ycy4gQWZ0ZXIgdGhpcyByZXNldHMgd2lsbCBub3QgYmUgcGVyZm9ybWVkICovCi0jZGVmaW5lIEZBTENPTl9NQVhfSU5UX0VSUk9SUyA0CisvKiBJZiBGQUxDT05fTUFYX0lOVF9FUlJPUlMgaW50ZXJuYWwgZXJyb3JzIG9jY3VyIHdpdGhpbgorICogRkFMQ09OX0lOVF9FUlJPUl9FWFBJUkUgc2Vjb25kcywgd2UgY29uc2lkZXIgdGhlIE5JQyBicm9rZW4gYW5kCisgKiBkaXNhYmxlIGl0LgorICovCisjZGVmaW5lIEZBTENPTl9JTlRfRVJST1JfRVhQSVJFIDM2MDAKKyNkZWZpbmUgRkFMQ09OX01BWF9JTlRfRVJST1JTIDUKIAogLyogV2UgcG9sbCBmb3IgZXZlbnRzIGV2ZXJ5IEZMVVNIX0lOVEVSVkFMIG1zLCBhbmQgY2hlY2sgRkxVU0hfUE9MTF9DT1VOVCB0aW1lcwogICovCkBAIC0xNDYsMTMgKzE1NSw2IEBACiAvKiBEdW1teSBTUkFNIHNpemUgY29kZSAqLwogI2RlZmluZSBTUk1fTkJfQlNaX09OQ0hJUF9PTkxZICgtMSkKIAotLyogQmUgbmljZSBpZiB0aGVzZSAob3IgZXF1aXYuKSB3ZXJlIGluIGxpbnV4L3BjaV9yZWdzLmgsIGJ1dCB0aGV5J3JlIG5vdC4gKi8KLSNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUFdSX1ZBTF9MQk4JMTgKLSNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUFdSX1NDTF9MQk4JMjYKLSNkZWZpbmUgUENJX0VYUF9ERVZDVExfUEFZTE9BRF9MQk4JNQotI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9MTktfV0lECQkweDNmMAotI2RlZmluZSBQQ0lfRVhQX0xOS1NUQV9MTktfV0lEX0xCTgk0Ci0KICNkZWZpbmUgRkFMQ09OX0lTX0RVQUxfRlVOQyhlZngpCQlcCiAJKGZhbGNvbl9yZXYoZWZ4KSA8IEZBTENPTl9SRVZfQjApCiAKQEAgLTcyNyw2ICs3MjksOSBAQAogCQl0eF9ldl9kZXNjX3B0ciA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIFRYX0VWX0RFU0NfUFRSKTsKIAkJdHhfZXZfcV9sYWJlbCA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIFRYX0VWX1FfTEFCRUwpOwogCQl0eF9xdWV1ZSA9ICZlZngtPnR4X3F1ZXVlW3R4X2V2X3FfbGFiZWxdOworCQljaGFubmVsLT5pcnFfbW9kX3Njb3JlICs9CisJCQkodHhfZXZfZGVzY19wdHIgLSB0eF9xdWV1ZS0+cmVhZF9jb3VudCkgJgorCQkJZWZ4LT50eXBlLT50eGRfcmluZ19tYXNrOwogCQllZnhfeG1pdF9kb25lKHR4X3F1ZXVlLCB0eF9ldl9kZXNjX3B0cik7CiAJfSBlbHNlIGlmIChFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBUWF9FVl9XUV9GRl9GVUxMKSkgewogCQkvKiBSZXdyaXRlIHRoZSBGSUZPIHdyaXRlIHBvaW50ZXIgKi8KQEAgLTg5Niw2ICs5MDEsOCBAQAogCQkJZGlzY2FyZCA9IHRydWU7CiAJfQogCisJY2hhbm5lbC0+aXJxX21vZF9zY29yZSArPSAyOworCiAJLyogSGFuZGxlIHJlY2VpdmVkIHBhY2tldCAqLwogCWVmeF9yeF9wYWNrZXQocnhfcXVldWUsIHJ4X2V2X2Rlc2NfcHRyLCByeF9ldl9ieXRlX2NudCwKIAkJICAgICAgY2hlY2tzdW1tZWQsIGRpc2NhcmQpOwpAQCAtMTA3MywxNCArMTA4MCwxNSBAQAogCQkgKiBwcm9ncmFtIGlzIGJhc2VkIGF0IDAuICBTbyBhY3R1YWwgaW50ZXJydXB0IG1vZGVyYXRpb24KIAkJICogYWNoaWV2ZWQgaXMgKCh4ICsgMSkgKiByZXMpLgogCQkgKi8KLQkJdW5zaWduZWQgaW50IHJlcyA9IDU7Ci0JCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC09IChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAlIHJlcyk7Ci0JCWlmIChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA8IHJlcykKLQkJCWNoYW5uZWwtPmlycV9tb2RlcmF0aW9uID0gcmVzOworCQljaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAtPSAoY2hhbm5lbC0+aXJxX21vZGVyYXRpb24gJQorCQkJCQkgICAgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTik7CisJCWlmIChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA8IEZBTENPTl9JUlFfTU9EX1JFU09MVVRJT04pCisJCQljaGFubmVsLT5pcnFfbW9kZXJhdGlvbiA9IEZBTENPTl9JUlFfTU9EX1JFU09MVVRJT047CiAJCUVGWF9QT1BVTEFURV9EV09SRF8yKHRpbWVyX2NtZCwKIAkJCQkgICAgIFRJTUVSX01PREUsIFRJTUVSX01PREVfSU5UX0hMRE9GRiwKIAkJCQkgICAgIFRJTUVSX1ZBTCwKLQkJCQkgICAgIChjaGFubmVsLT5pcnFfbW9kZXJhdGlvbiAvIHJlcykgLSAxKTsKKwkJCQkgICAgIGNoYW5uZWwtPmlycV9tb2RlcmF0aW9uIC8KKwkJCQkgICAgIEZBTENPTl9JUlFfTU9EX1JFU09MVVRJT04gLSAxKTsKIAl9IGVsc2UgewogCQlFRlhfUE9QVUxBVEVfRFdPUkRfMih0aW1lcl9jbWQsCiAJCQkJICAgICBUSU1FUl9NT0RFLCBUSU1FUl9NT0RFX0RJUywKQEAgLTExODcsMzEgKzExOTUsMjkgQEAKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwgPSAmZWZ4LT5jaGFubmVsWzBdOwogCXN0cnVjdCBlZnhfdHhfcXVldWUgKnR4X3F1ZXVlOwogCXN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlOwotCXVuc2lnbmVkIGludCByZWFkX3B0ciwgaTsKKwl1bnNpZ25lZCBpbnQgcmVhZF9wdHIgPSBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHI7CisJdW5zaWduZWQgaW50IGVuZF9wdHIgPSAocmVhZF9wdHIgLSAxKSAmIEZBTENPTl9FVlFfTUFTSzsKIAotCXJlYWRfcHRyID0gY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyOwotCWZvciAoaSA9IDA7IGkgPCBGQUxDT05fRVZRX1NJWkU7ICsraSkgeworCWRvIHsKIAkJZWZ4X3F3b3JkX3QgKmV2ZW50ID0gZmFsY29uX2V2ZW50KGNoYW5uZWwsIHJlYWRfcHRyKTsKIAkJaW50IGV2X2NvZGUsIGV2X3N1Yl9jb2RlLCBldl9xdWV1ZTsKIAkJYm9vbCBldl9mYWlsZWQ7CisKIAkJaWYgKCFmYWxjb25fZXZlbnRfcHJlc2VudChldmVudCkpCiAJCQlicmVhazsKIAogCQlldl9jb2RlID0gRUZYX1FXT1JEX0ZJRUxEKCpldmVudCwgRVZfQ09ERSk7Ci0JCWlmIChldl9jb2RlICE9IERSSVZFUl9FVl9ERUNPREUpCi0JCQljb250aW51ZTsKLQogCQlldl9zdWJfY29kZSA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsIERSSVZFUl9FVl9TVUJfQ09ERSk7Ci0JCXN3aXRjaCAoZXZfc3ViX2NvZGUpIHsKLQkJY2FzZSBUWF9ERVNDUV9GTFNfRE9ORV9FVl9ERUNPREU6CisJCWlmIChldl9jb2RlID09IERSSVZFUl9FVl9ERUNPREUgJiYKKwkJICAgIGV2X3N1Yl9jb2RlID09IFRYX0RFU0NRX0ZMU19ET05FX0VWX0RFQ09ERSkgewogCQkJZXZfcXVldWUgPSBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LAogCQkJCQkJICAgRFJJVkVSX0VWX1RYX0RFU0NRX0lEKTsKIAkJCWlmIChldl9xdWV1ZSA8IEVGWF9UWF9RVUVVRV9DT1VOVCkgewogCQkJCXR4X3F1ZXVlID0gZWZ4LT50eF9xdWV1ZSArIGV2X3F1ZXVlOwogCQkJCXR4X3F1ZXVlLT5mbHVzaGVkID0gdHJ1ZTsKIAkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFJYX0RFU0NRX0ZMU19ET05FX0VWX0RFQ09ERToKKwkJfSBlbHNlIGlmIChldl9jb2RlID09IERSSVZFUl9FVl9ERUNPREUgJiYKKwkJCSAgIGV2X3N1Yl9jb2RlID09IFJYX0RFU0NRX0ZMU19ET05FX0VWX0RFQ09ERSkgewogCQkJZXZfcXVldWUgPSBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LAogCQkJCQkJICAgRFJJVkVSX0VWX1JYX0RFU0NRX0lEKTsKIAkJCWV2X2ZhaWxlZCA9IEVGWF9RV09SRF9GSUVMRCgqZXZlbnQsCkBAIC0xMjI1LDExICsxMjMxLDEwIEBACiAJCQkJZWxzZQogCQkJCQlyeF9xdWV1ZS0+Zmx1c2hlZCA9IHRydWU7CiAJCQl9Ci0JCQlicmVhazsKIAkJfQogCiAJCXJlYWRfcHRyID0gKHJlYWRfcHRyICsgMSkgJiBGQUxDT05fRVZRX01BU0s7Ci0JfQorCX0gd2hpbGUgKHJlYWRfcHRyICE9IGVuZF9wdHIpOwogfQogCiAvKiBIYW5kbGUgdHggYW5kIHJ4IGZsdXNoZXMgYXQgdGhlIHNhbWUgdGltZSwgc2luY2UgdGhleSBydW4gaW4KQEAgLTEzNzcsNyArMTM4Miw2IEBACiAJZWZ4X293b3JkX3QgKmludF9rZXIgPSBlZngtPmlycV9zdGF0dXMuYWRkcjsKIAllZnhfb3dvcmRfdCBmYXRhbF9pbnRyOwogCWludCBlcnJvciwgbWVtX3BlcnI7Ci0Jc3RhdGljIGludCBuX2ludF9lcnJvcnM7CiAKIAlmYWxjb25fcmVhZChlZngsICZmYXRhbF9pbnRyLCBGQVRBTF9JTlRSX1JFR19LRVIpOwogCWVycm9yID0gRUZYX09XT1JEX0ZJRUxEKGZhdGFsX2ludHIsIElOVF9LRVJfRVJST1IpOwpAQCAtMTQwNCw3ICsxNDA4LDE0IEBACiAJCXBjaV9jbGVhcl9tYXN0ZXIobmljX2RhdGEtPnBjaV9kZXYyKTsKIAlmYWxjb25fZGlzYWJsZV9pbnRlcnJ1cHRzKGVmeCk7CiAKLQlpZiAoKytuX2ludF9lcnJvcnMgPCBGQUxDT05fTUFYX0lOVF9FUlJPUlMpIHsKKwkvKiBDb3VudCBlcnJvcnMgYW5kIHJlc2V0IG9yIGRpc2FibGUgdGhlIE5JQyBhY2NvcmRpbmdseSAqLworCWlmIChuaWNfZGF0YS0+aW50X2Vycm9yX2NvdW50ID09IDAgfHwKKwkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBuaWNfZGF0YS0+aW50X2Vycm9yX2V4cGlyZSkpIHsKKwkJbmljX2RhdGEtPmludF9lcnJvcl9jb3VudCA9IDA7CisJCW5pY19kYXRhLT5pbnRfZXJyb3JfZXhwaXJlID0KKwkJCWppZmZpZXMgKyBGQUxDT05fSU5UX0VSUk9SX0VYUElSRSAqIEhaOworCX0KKwlpZiAoKytuaWNfZGF0YS0+aW50X2Vycm9yX2NvdW50IDwgRkFMQ09OX01BWF9JTlRfRVJST1JTKSB7CiAJCUVGWF9FUlIoZWZ4LCAiU1lTVEVNIEVSUk9SIC0gcmVzZXQgc2NoZWR1bGVkXG4iKTsKIAkJZWZ4X3NjaGVkdWxlX3Jlc2V0KGVmeCwgUkVTRVRfVFlQRV9JTlRfRVJST1IpOwogCX0gZWxzZSB7CkBAIC0xNDIzLDYgKzE0MzQsNyBAQAogewogCXN0cnVjdCBlZnhfbmljICplZnggPSBkZXZfaWQ7CiAJZWZ4X293b3JkX3QgKmludF9rZXIgPSBlZngtPmlycV9zdGF0dXMuYWRkcjsKKwlpcnFyZXR1cm5fdCByZXN1bHQgPSBJUlFfTk9ORTsKIAlzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWw7CiAJZWZ4X2R3b3JkX3QgcmVnOwogCXUzMiBxdWV1ZXM7CkBAIC0xNDM3LDIzICsxNDQ5LDI0IEBACiAJaWYgKHVubGlrZWx5KHN5c2VycikpCiAJCXJldHVybiBmYWxjb25fZmF0YWxfaW50ZXJydXB0KGVmeCk7CiAKLQlpZiAocXVldWVzID09IDApCi0JCXJldHVybiBJUlFfTk9ORTsKLQotCWVmeC0+bGFzdF9pcnFfY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlFRlhfVFJBQ0UoZWZ4LCAiSVJRICVkIG9uIENQVSAlZCBzdGF0dXMgIiBFRlhfRFdPUkRfRk1UICJcbiIsCi0JCSAgaXJxLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBFRlhfRFdPUkRfVkFMKHJlZykpOwotCiAJLyogU2NoZWR1bGUgcHJvY2Vzc2luZyBvZiBhbnkgaW50ZXJydXB0aW5nIHF1ZXVlcyAqLwotCWNoYW5uZWwgPSAmZWZ4LT5jaGFubmVsWzBdOwotCXdoaWxlIChxdWV1ZXMpIHsKLQkJaWYgKHF1ZXVlcyAmIDB4MDEpCisJZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KSB7CisJCWlmICgocXVldWVzICYgMSkgfHwKKwkJICAgIGZhbGNvbl9ldmVudF9wcmVzZW50KAorCQkJICAgIGZhbGNvbl9ldmVudChjaGFubmVsLCBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHIpKSkgewogCQkJZWZ4X3NjaGVkdWxlX2NoYW5uZWwoY2hhbm5lbCk7Ci0JCWNoYW5uZWwrKzsKKwkJCXJlc3VsdCA9IElSUV9IQU5ETEVEOworCQl9CiAJCXF1ZXVlcyA+Pj0gMTsKIAl9CiAKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJaWYgKHJlc3VsdCA9PSBJUlFfSEFORExFRCkgeworCQllZngtPmxhc3RfaXJxX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CisJCUVGWF9UUkFDRShlZngsICJJUlEgJWQgb24gQ1BVICVkIHN0YXR1cyAiIEVGWF9EV09SRF9GTVQgIlxuIiwKKwkJCSAgaXJxLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBFRlhfRFdPUkRfVkFMKHJlZykpOworCX0KKworCXJldHVybiByZXN1bHQ7CiB9CiAKIApAQCAtMjI0OSw2ICsyMjYyLDcgQEAKIAkJZWZ4LT5waHlfb3AgPSAmZmFsY29uX3NmdDkwMDFfcGh5X29wczsKIAkJYnJlYWs7CiAJY2FzZSBQSFlfVFlQRV9RVDIwMjJDMjoKKwljYXNlIFBIWV9UWVBFX1FUMjAyNUM6CiAJCWVmeC0+cGh5X29wID0gJmZhbGNvbl94ZnBfcGh5X29wczsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTMxMTMsOCArMzEyNywxMCBAQAogCXN0cnVjdCBmYWxjb25fbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKIAlpbnQgcmM7CiAKKwkvKiBSZW1vdmUgSTJDIGFkYXB0ZXIgYW5kIGNsZWFyIGl0IGluIHByZXBhcmF0aW9uIGZvciBhIHJldHJ5ICovCiAJcmMgPSBpMmNfZGVsX2FkYXB0ZXIoJmVmeC0+aTJjX2FkYXApOwogCUJVR19PTihyYyk7CisJbWVtc2V0KCZlZngtPmkyY19hZGFwLCAwLCBzaXplb2YoZWZ4LT5pMmNfYWRhcCkpOwogCiAJZmFsY29uX3JlbW92ZV9zcGlfZGV2aWNlcyhlZngpOwogCWZhbGNvbl9mcmVlX2J1ZmZlcihlZngsICZlZngtPmlycV9zdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5oIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5oCmluZGV4IDc4NjljM2QuLjc3ZjJlMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uaAorKysgYi9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmgKQEAgLTg1LDYgKzg1LDggQEAKIGV4dGVybiB2b2lkIGZhbGNvbl9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiBleHRlcm4gdm9pZCBmYWxjb25fZmluaV9pbnRlcnJ1cHQoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiAKKyNkZWZpbmUgRkFMQ09OX0lSUV9NT0RfUkVTT0xVVElPTiA1CisKIC8qIEdsb2JhbCBSZXNvdXJjZXMgKi8KIGV4dGVybiBpbnQgZmFsY29uX3Byb2JlX25pYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKIGV4dGVybiBpbnQgZmFsY29uX3Byb2JlX3Jlc291cmNlcyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25faW8uaCBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb25faW8uaAppbmRleCBjMTZkYTMxLi44ODgzMDkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uX2lvLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbl9pby5oCkBAIC0yMzgsMTggKzIzOCwyMSBAQAogLyogV3JpdGUgZHdvcmQgdG8gRmFsY29uIHBhZ2UtbWFwcGVkIHJlZ2lzdGVyIHdpdGggYW4gZXh0cmEgbG9jay4KICAqCiAgKiBBcyBmb3IgZmFsY29uX3dyaXRlbF9wYWdlKCksIGJ1dCBmb3IgYSByZWdpc3RlciB0aGF0IHN1ZmZlcnMgZnJvbQotICogU0ZDIGJ1ZyAzMTgxLiBUYWtlIG91dCBhIGxvY2sgc28gdGhlIEJJVSBjb2xsZWN0b3IgY2Fubm90IGJlCi0gKiBjb25mdXNlZC4gKi8KKyAqIFNGQyBidWcgMzE4MS4gIElmIHdyaXRpbmcgdG8gcGFnZSAwLCB0YWtlIG91dCBhIGxvY2sgc28gdGhlIEJJVQorICogY29sbGVjdG9yIGNhbm5vdCBiZSBjb25mdXNlZC4KKyAqLwogc3RhdGljIGlubGluZSB2b2lkIGZhbGNvbl93cml0ZWxfcGFnZV9sb2NrZWQoc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJCQkJICAgICBlZnhfZHdvcmRfdCAqdmFsdWUsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IHJlZywKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgcGFnZSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVmeC0+Yml1X2xvY2ssIGZsYWdzKTsKKwlpZiAocGFnZSA9PSAwKQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOwogCWZhbGNvbl93cml0ZWwoZWZ4LCB2YWx1ZSwgRkFMQ09OX1BBR0VEX1JFRyhwYWdlLCByZWcpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CisJaWYgKHBhZ2UgPT0gMCkKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWZ4LT5iaXVfbG9jaywgZmxhZ3MpOwogfQogCiAjZW5kaWYgLyogRUZYX0ZBTENPTl9JT19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuYyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCmluZGV4IGY5ZTJmOTUuLjlmNWVjM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCkBAIC0xNyw2ICsxNywyMSBAQAogI2luY2x1ZGUgImJvYXJkcy5oIgogI2luY2x1ZGUgIndvcmthcm91bmRzLmgiCiAKK3Vuc2lnbmVkIG1kaW9faWRfb3VpKHUzMiBpZCkKK3sKKwl1bnNpZ25lZCBvdWkgPSAwOworCWludCBpOworCisJLyogVGhlIGJpdHMgb2YgdGhlIE9VSSBhcmUgZGVzaWduYXRlZCBhLi54LCB3aXRoIGE9MCBhbmQgYiB2YXJpYWJsZS4KKwkgKiBJbiB0aGUgaWQgcmVnaXN0ZXIgYyBpcyB0aGUgTVNCIGJ1dCB0aGUgT1VJIGlzIGNvbnZlbnRpb25hbGx5CisJICogd3JpdHRlbiBhcyBieXRlcyBoLi5hLCBwLi5pLCB4Li5xLiAgUmVvcmRlciB0aGUgYml0cyBhY2NvcmRpbmdseS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjI7ICsraSkKKwkJaWYgKGlkICYgKDEgPDwgKGkgKyAxMCkpKQorCQkJb3VpIHw9IDEgPDwgKGkgXiA3KTsKKworCXJldHVybiBvdWk7Cit9CisKIGludCBtZGlvX2NsYXVzZTQ1X3Jlc2V0X21tZChzdHJ1Y3QgZWZ4X25pYyAqcG9ydCwgaW50IG1tZCwKIAkJCSAgICBpbnQgc3BpbnMsIGludCBzcGludGltZSkKIHsKQEAgLTEyNSwyNCArMTQwLDI1IEBACiBpbnQgbWRpb19jbGF1c2U0NV9jaGVja19tbWRzKHN0cnVjdCBlZnhfbmljICplZngsCiAJCQkgICAgIHVuc2lnbmVkIGludCBtbWRfbWFzaywgdW5zaWduZWQgaW50IGZhdGFsX21hc2spCiB7CisJaW50IG1tZCA9IDAsIHByb2JlX21tZCwgZGV2czAsIGRldnMxOwogCXUzMiBkZXZpY2VzOwotCWludCBtbWQgPSAwLCBwcm9iZV9tbWQ7CiAKIAkvKiBIaXN0b3JpY2FsbHkgd2UgaGF2ZSBwcm9iZWQgdGhlIFBIWVhTIHRvIGZpbmQgb3V0IHdoYXQgZGV2aWNlcyBhcmUKIAkgKiBwcmVzZW50LGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayBzbyB3ZWxsIGlmIHRoZSBQSFlYUyBpc24ndCBleHBlY3RlZAogCSAqIHRvIGV4aXN0LCBpZiBzbyBqdXN0IGZpbmQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3Qgc3VwcGxpZWQuICovCiAJcHJvYmVfbW1kID0gKG1tZF9tYXNrICYgTURJT19NTURSRUdfREVWU19QSFlYUykgPyBNRElPX01NRF9QSFlYUyA6CiAJICAgIF9fZmZzKG1tZF9tYXNrKTsKLQlkZXZpY2VzID0gKG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIGVmeC0+bWlpLnBoeV9pZCwKLQkJCQkgICAgICBwcm9iZV9tbWQsIE1ESU9fTU1EUkVHX0RFVlMwKSB8Ci0JCSAgIG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIGVmeC0+bWlpLnBoeV9pZCwKLQkJCQkgICAgICBwcm9iZV9tbWQsIE1ESU9fTU1EUkVHX0RFVlMxKSA8PCAxNik7CiAKIAkvKiBDaGVjayBhbGwgdGhlIGV4cGVjdGVkIE1NRHMgYXJlIHByZXNlbnQgKi8KLQlpZiAoZGV2aWNlcyA8IDApIHsKKwlkZXZzMCA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIGVmeC0+bWlpLnBoeV9pZCwKKwkJCQkgICBwcm9iZV9tbWQsIE1ESU9fTU1EUkVHX0RFVlMwKTsKKwlkZXZzMSA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIGVmeC0+bWlpLnBoeV9pZCwKKwkJCQkgICBwcm9iZV9tbWQsIE1ESU9fTU1EUkVHX0RFVlMxKTsKKwlpZiAoZGV2czAgPCAwIHx8IGRldnMxIDwgMCkgewogCQlFRlhfRVJSKGVmeCwgImZhaWxlZCB0byByZWFkIGRldmljZXMgcHJlc2VudFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KKwlkZXZpY2VzID0gZGV2czAgfCAoZGV2czEgPDwgMTYpOwogCWlmICgoZGV2aWNlcyAmIG1tZF9tYXNrKSAhPSBtbWRfbWFzaykgewogCQlFRlhfRVJSKGVmeCwgInJlcXVpcmVkIE1NRHMgbm90IHByZXNlbnQ6IGdvdCAleCwgIgogCQkJIndhbnRlZCAleFxuIiwgZGV2aWNlcywgbW1kX21hc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmggYi9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaAppbmRleCA4YmE0OTc3Li43MDE0ZDIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuaApAQCAtNzAsMTAgKzcwLDEwIEBACiAjZGVmaW5lIE1ESU9fTU1EUkVHX1NUQVQxX0xQQUJMRV9MQk4JKDEpCiAjZGVmaW5lIE1ESU9fTU1EUkVHX1NUQVQxX0xQQUJMRV9XSURUSAkoMSkKIAotLyogQml0cyBpbiBJRCByZWcgKi8KLSNkZWZpbmUgTURJT19JRF9SRVYoX2lkMzIpCShfaWQzMiAmIDB4ZikKLSNkZWZpbmUgTURJT19JRF9NT0RFTChfaWQzMikJKChfaWQzMiA+PiA0KSAmIDB4M2YpCi0jZGVmaW5lIE1ESU9fSURfT1VJKF9pZDMyKQkoX2lkMzIgPj4gMTApCisvKiBCaXRzIGluIGNvbWJpbmVkIElEIHJlZ3MgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWRpb19pZF9yZXYodTMyIGlkKSB7IHJldHVybiBpZCAmIDB4ZjsgfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBtZGlvX2lkX21vZGVsKHUzMiBpZCkgeyByZXR1cm4gKGlkID4+IDQpICYgMHgzZjsgfQorZXh0ZXJuIHVuc2lnbmVkIG1kaW9faWRfb3VpKHUzMiBpZCk7CiAKIC8qIEJpdHMgaW4gTU1EUkVHX0RFVlMwLzEuIFNvbWVvbmUgdGhvdWdodGZ1bGx5IGxheWVkIHRoaW5ncyBvdXQKICAqIHNvIHRoZSAnYml0IHByZXNlbnQnIGJpdCBudW1iZXIgb2YgYW4gTU1EIGlzIHRoZSBudW1iZXIgb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tdGQuYyBiL2RyaXZlcnMvbmV0L3NmYy9tdGQuYwppbmRleCA2NjVjYWZiLi44MjBjMjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbXRkLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL210ZC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIEVGWF9EUklWRVJfTkFNRSAic2ZjX210ZCIKICNpbmNsdWRlICJuZXRfZHJpdmVyLmgiCiAjaW5jbHVkZSAic3BpLmgiCisjaW5jbHVkZSAiZWZ4LmgiCiAKICNkZWZpbmUgRUZYX1NQSV9WRVJJRllfQlVGX0xFTiAxNgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAppbmRleCBlMDE5YWQxLi5lMTY5ZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKQEAgLTI1LDE1ICsyNSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbmV0X2xyby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCiAjaW5jbHVkZSAiZW51bS5oIgogI2luY2x1ZGUgImJpdGZpZWxkLmgiCiAKLSNkZWZpbmUgRUZYX01BWF9MUk9fREVTQ1JJUFRPUlMgOAotI2RlZmluZSBFRlhfTUFYX0xST19BR0dSIE1BWF9TS0JfRlJBR1MKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogQnVpbGQgZGVmaW5pdGlvbnMKQEAgLTM0MCwxMyArMzM2LDEyIEBACiAgKiBAZXZlbnRxX3JlYWRfcHRyOiBFdmVudCBxdWV1ZSByZWFkIHBvaW50ZXIKICAqIEBsYXN0X2V2ZW50cV9yZWFkX3B0cjogTGFzdCBldmVudCBxdWV1ZSByZWFkIHBvaW50ZXIgdmFsdWUuCiAgKiBAZXZlbnRxX21hZ2ljOiBFdmVudCBxdWV1ZSBtYWdpYyB2YWx1ZSBmb3IgZHJpdmVyLWdlbmVyYXRlZCB0ZXN0IGV2ZW50cwotICogQGxyb19tZ3I6IExSTyBzdGF0ZQorICogQGlycV9jb3VudDogTnVtYmVyIG9mIElSUXMgc2luY2UgbGFzdCBhZGFwdGl2ZSBtb2RlcmF0aW9uIGRlY2lzaW9uCisgKiBAaXJxX21vZF9zY29yZTogSVJRIG1vZGVyYXRpb24gc2NvcmUKICAqIEByeF9hbGxvY19sZXZlbDogV2F0ZXJtYXJrIGJhc2VkIGhldXJpc3RpYyBjb3VudGVyIGZvciBwdXNoaW5nIGRlc2NyaXB0b3JzCiAgKglhbmQgZGlhZ25vc3RpYyBjb3VudGVycwogICogQHJ4X2FsbG9jX3B1c2hfcGFnZXM6IFJYIGFsbG9jYXRpb24gbWV0aG9kIGN1cnJlbnRseSBpbiB1c2UgZm9yIHB1c2hpbmcKICAqCWRlc2NyaXB0b3JzCi0gKiBAcnhfYWxsb2NfcG9wX3BhZ2VzOiBSWCBhbGxvY2F0aW9uIG1ldGhvZCBjdXJyZW50bHkgaW4gdXNlIGZvciBwb3BwaW5nCi0gKglkZXNjcmlwdG9ycwogICogQG5fcnhfdG9iZV9kaXNjOiBDb3VudCBvZiBSWF9UT0JFX0RJU0MgZXJyb3JzCiAgKiBAbl9yeF9pcF9mcmFnX2VycjogQ291bnQgb2YgUlggSVAgZnJhZ21lbnQgZXJyb3JzCiAgKiBAbl9yeF9pcF9oZHJfY2hrc3VtX2VycjogQ291bnQgb2YgUlggSVAgaGVhZGVyIGNoZWNrc3VtIGVycm9ycwpAQCAtMzcxLDEwICszNjYsMTEgQEAKIAl1bnNpZ25lZCBpbnQgbGFzdF9ldmVudHFfcmVhZF9wdHI7CiAJdW5zaWduZWQgaW50IGV2ZW50cV9tYWdpYzsKIAotCXN0cnVjdCBuZXRfbHJvX21nciBscm9fbWdyOworCXVuc2lnbmVkIGludCBpcnFfY291bnQ7CisJdW5zaWduZWQgaW50IGlycV9tb2Rfc2NvcmU7CisKIAlpbnQgcnhfYWxsb2NfbGV2ZWw7CiAJaW50IHJ4X2FsbG9jX3B1c2hfcGFnZXM7Ci0JaW50IHJ4X2FsbG9jX3BvcF9wYWdlczsKIAogCXVuc2lnbmVkIG5fcnhfdG9iZV9kaXNjOwogCXVuc2lnbmVkIG5fcnhfaXBfZnJhZ19lcnI7CkBAIC0zOTQsMTMgKzM5MCwxMSBAQAogCiAvKioKICAqIHN0cnVjdCBlZnhfYmxpbmtlciAtIFMvVyBMRUQgYmxpbmtpbmcgY29udGV4dAotICogQGxlZF9udW06IExFRCBJRCAoYm9hcmQtc3BlY2lmaWMgbWVhbmluZykKICAqIEBzdGF0ZTogQ3VycmVudCBzdGF0ZSAtIG9uIG9yIG9mZgogICogQHJlc3VibWl0OiBUaW1lciByZXN1Ym1pc3Npb24gZmxhZwogICogQHRpbWVyOiBDb250cm9sIHRpbWVyIGZvciBibGlua2luZwogICovCiBzdHJ1Y3QgZWZ4X2JsaW5rZXIgewotCWludCBsZWRfbnVtOwogCWJvb2wgc3RhdGU7CiAJYm9vbCByZXN1Ym1pdDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKQEAgLTQxMyw4ICs0MDcsOCBAQAogICogQG1ham9yOiBNYWpvciByZXYuICgnQScsICdCJyAuLi4pCiAgKiBAbWlub3I6IE1pbm9yIHJldi4gKDAsIDEsIC4uLikKICAqIEBpbml0OiBJbml0aWFsaXNhdGlvbiBmdW5jdGlvbgotICogQGluaXRfbGVkczogU2V0cyB1cCBib2FyZCBMRURzCi0gKiBAc2V0X2ZhdWx0X2xlZDogVHVybnMgdGhlIGZhdWx0IExFRCBvbiBvciBvZmYKKyAqIEBpbml0X2xlZHM6IFNldHMgdXAgYm9hcmQgTEVEcy4gTWF5IGJlIGNhbGxlZCByZXBlYXRlZGx5LgorICogQHNldF9pZF9sZWQ6IFR1cm5zIHRoZSBpZGVudGlmaWNhdGlvbiBMRUQgb24gb3Igb2ZmCiAgKiBAYmxpbms6IFN0YXJ0cy9zdG9wcyBibGlua2luZwogICogQG1vbml0b3I6IEJvYXJkLXNwZWNpZmljIGhlYWx0aCBjaGVjayBmdW5jdGlvbgogICogQGZpbmk6IENsZWFudXAgZnVuY3Rpb24KQEAgLTQzMCw5ICs0MjQsOSBAQAogCS8qIEFzIHRoZSBMRURzIGFyZSB0eXBpY2FsbHkgYXR0YWNoZWQgdG8gdGhlIFBIWSwgTEVEcwogCSAqIGhhdmUgYSBzZXBhcmF0ZSBpbml0IGNhbGxiYWNrIHRoYXQgaGFwcGVucyBsYXRlciB0aGFuCiAJICogYm9hcmQgaW5pdC4gKi8KLQlpbnQgKCppbml0X2xlZHMpKHN0cnVjdCBlZnhfbmljICplZngpOworCXZvaWQgKCppbml0X2xlZHMpKHN0cnVjdCBlZnhfbmljICplZngpOworCXZvaWQgKCpzZXRfaWRfbGVkKSAoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBzdGF0ZSk7CiAJaW50ICgqbW9uaXRvcikgKHN0cnVjdCBlZnhfbmljICpuaWMpOwotCXZvaWQgKCpzZXRfZmF1bHRfbGVkKSAoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBzdGF0ZSk7CiAJdm9pZCAoKmJsaW5rKSAoc3RydWN0IGVmeF9uaWMgKmVmeCwgYm9vbCBzdGFydCk7CiAJdm9pZCAoKmZpbmkpIChzdHJ1Y3QgZWZ4X25pYyAqbmljKTsKIAlzdHJ1Y3QgZWZ4X2JsaW5rZXIgYmxpbmtlcjsKQEAgLTQ1OSw2ICs0NTMsNyBAQAogCVBIWV9UWVBFX1FUMjAyMkMyID0gNCwKIAlQSFlfVFlQRV9QTTgzNTggPSA2LAogCVBIWV9UWVBFX1NGVDkwMDFBID0gOCwKKwlQSFlfVFlQRV9RVDIwMjVDID0gOSwKIAlQSFlfVFlQRV9TRlQ5MDAxQiA9IDEwLAogCVBIWV9UWVBFX01BWAkvKiBJbnNlcnQgYW55IG5ldyBpdGVtcyBiZWZvcmUgdGhpcyAqLwogfTsKQEAgLTcxMyw2ICs3MDgsOCBAQAogICogQG1lbWJhc2U6IE1lbW9yeSBCQVIgdmFsdWUKICAqIEBiaXVfbG9jazogQklVIChidXMgaW50ZXJmYWNlIHVuaXQpIGxvY2sKICAqIEBpbnRlcnJ1cHRfbW9kZTogSW50ZXJydXB0IG1vZGUKKyAqIEBpcnFfcnhfYWRhcHRpdmU6IEFkYXB0aXZlIElSUSBtb2RlcmF0aW9uIGVuYWJsZWQgZm9yIFJYIGV2ZW50IHF1ZXVlcworICogQGlycV9yeF9tb2RlcmF0aW9uOiBJUlEgbW9kZXJhdGlvbiB0aW1lIGZvciBSWCBldmVudCBxdWV1ZXMKICAqIEBpMmNfYWRhcDogSTJDIGFkYXB0ZXIKICAqIEBib2FyZF9pbmZvOiBCb2FyZC1sZXZlbCBpbmZvcm1hdGlvbgogICogQHN0YXRlOiBEZXZpY2Ugc3RhdGUgZmxhZy4gU2VyaWFsaXNlZCBieSB0aGUgcnRubF9sb2NrLgpAQCAtNzk0LDYgKzc5MSw4IEBACiAJdm9pZCBfX2lvbWVtICptZW1iYXNlOwogCXNwaW5sb2NrX3QgYml1X2xvY2s7CiAJZW51bSBlZnhfaW50X21vZGUgaW50ZXJydXB0X21vZGU7CisJYm9vbCBpcnFfcnhfYWRhcHRpdmU7CisJdW5zaWduZWQgaW50IGlycV9yeF9tb2RlcmF0aW9uOwogCiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwOwogCXN0cnVjdCBlZnhfYm9hcmQgYm9hcmRfaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9waHkuaCBiL2RyaXZlcnMvbmV0L3NmYy9waHkuaAppbmRleCAwN2U4NTVjLi5jMWNmZjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3BoeS5oCkBAIC0xOCwxMiArMTgsMTYgQEAKIAogZXh0ZXJuIHZvaWQgdGVueHByZXNzX3BoeV9ibGluayhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBib29sIGJsaW5rKTsKIAorLyogV2FpdCBmb3IgdGhlIFBIWSB0byBib290LiBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtRUlOVkFMIGlmIHRoZSBQSFkgZmFpbGVkCisgKiB0byBib290IGR1ZSB0byBjb3JydXB0IGZsYXNoLCBvciBzb21lIG90aGVyIG5lZ2F0aXZlIGVycm9yIGNvZGUuICovCitleHRlcm4gaW50IHNmdDkwMDFfd2FpdF9ib290KHN0cnVjdCBlZnhfbmljICplZngpOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRXhwb3J0ZWQgZnVuY3Rpb25zIGZyb20gdGhlIGRyaXZlciBmb3IgWEZQIG9wdGljYWwgUEhZcworICogQU1DQy9RdWFrZSBRVDIweHggUEhZcwogICovCiBleHRlcm4gc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBmYWxjb25feGZwX3BoeV9vcHM7CiAKLS8qIFRoZSBRVUFLRSBYRlAgUEhZIHByb3ZpZGVzIHZhcmlvdXMgSC9XIGNvbnRyb2wgc3RhdGVzIGZvciBMRURzICovCisvKiBUaGVzZSBQSFlzIHByb3ZpZGUgdmFyaW91cyBIL1cgY29udHJvbCBzdGF0ZXMgZm9yIExFRHMgKi8KICNkZWZpbmUgUVVBS0VfTEVEX0xJTktfSU5WQUwJKDApCiAjZGVmaW5lIFFVQUtFX0xFRF9MSU5LX1NUQVQJKDEpCiAjZGVmaW5lIFFVQUtFX0xFRF9MSU5LX0FDVAkoMikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9yeC5jIGIvZHJpdmVycy9uZXQvc2ZjL3J4LmMKaW5kZXggYjhiYTRiYi4uNjZkN2ZlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3J4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3J4LmMKQEAgLTk5LDEwOSArOTksNiBAQAogfQogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIExpbnV4IGdlbmVyaWMgTFJPIGhhbmRsaW5nCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotc3RhdGljIGludCBlZnhfbHJvX2dldF9za2JfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKippcF9oZHIsCi0JCQkgICAgICAgdm9pZCAqKnRjcHVkcF9oZHIsIHU2NCAqaGRyX2ZsYWdzLCB2b2lkICpwcml2KQotewotCXN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCA9IHByaXY7Ci0Jc3RydWN0IGlwaGRyICppcGg7Ci0Jc3RydWN0IHRjcGhkciAqdGg7Ci0KLQlpcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwotCWlmIChza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQKSB8fCBpcGgtPnByb3RvY29sICE9IElQUFJPVE9fVENQKQotCQlnb3RvIGZhaWw7Ci0KLQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0+ZGF0YSArIGlwaC0+aWhsICogNCk7Ci0KLQkqdGNwdWRwX2hkciA9IHRoOwotCSppcF9oZHIgPSBpcGg7Ci0JKmhkcl9mbGFncyA9IExST19JUFY0IHwgTFJPX1RDUDsKLQotCWNoYW5uZWwtPnJ4X2FsbG9jX2xldmVsICs9IFJYX0FMTE9DX0ZBQ1RPUl9MUk87Ci0JcmV0dXJuIDA7Ci1mYWlsOgotCWNoYW5uZWwtPnJ4X2FsbG9jX2xldmVsICs9IFJYX0FMTE9DX0ZBQ1RPUl9TS0I7Ci0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IGVmeF9nZXRfZnJhZ19oZHIoc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZywgdm9pZCAqKm1hY19oZHIsCi0JCQkgICAgdm9pZCAqKmlwX2hkciwgdm9pZCAqKnRjcHVkcF9oZHIsIHU2NCAqaGRyX2ZsYWdzLAotCQkJICAgIHZvaWQgKnByaXYpCi17Ci0Jc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsID0gcHJpdjsKLQlzdHJ1Y3QgZXRoaGRyICplaDsKLQlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQotCS8qIFdlIHN1cHBvcnQgRXRoZXJJSSBhbmQgVkxBTiBlbmNhcHN1bGF0ZWQgSVB2NCAqLwotCWVoID0gcGFnZV9hZGRyZXNzKGZyYWctPnBhZ2UpICsgZnJhZy0+cGFnZV9vZmZzZXQ7Ci0JKm1hY19oZHIgPSBlaDsKLQotCWlmIChlaC0+aF9wcm90byA9PSBodG9ucyhFVEhfUF9JUCkpIHsKLQkJaXBoID0gKHN0cnVjdCBpcGhkciAqKShlaCArIDEpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCB2bGFuX2V0aGhkciAqdmVoID0gKHN0cnVjdCB2bGFuX2V0aGhkciAqKWVoOwotCQlpZiAodmVoLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvICE9IGh0b25zKEVUSF9QX0lQKSkKLQkJCWdvdG8gZmFpbDsKLQotCQlpcGggPSAoc3RydWN0IGlwaGRyICopKHZlaCArIDEpOwotCX0KLQkqaXBfaGRyID0gaXBoOwotCi0JLyogV2UgY2FuIG9ubHkgZG8gTFJPIG92ZXIgVENQICovCi0JaWYgKGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19UQ1ApCi0JCWdvdG8gZmFpbDsKLQotCSpoZHJfZmxhZ3MgPSBMUk9fSVBWNCB8IExST19UQ1A7Ci0JKnRjcHVkcF9oZHIgPSAoc3RydWN0IHRjcGhkciAqKSgodTggKikgaXBoICsgaXBoLT5paGwgKiA0KTsKLQotCWNoYW5uZWwtPnJ4X2FsbG9jX2xldmVsICs9IFJYX0FMTE9DX0ZBQ1RPUl9MUk87Ci0JcmV0dXJuIDA7Ci0gZmFpbDoKLQljaGFubmVsLT5yeF9hbGxvY19sZXZlbCArPSBSWF9BTExPQ19GQUNUT1JfU0tCOwotCXJldHVybiAtMTsKLX0KLQotaW50IGVmeF9scm9faW5pdChzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IsIHN0cnVjdCBlZnhfbmljICplZngpCi17Ci0Jc2l6ZV90IHMgPSBzaXplb2Yoc3RydWN0IG5ldF9scm9fZGVzYykgKiBFRlhfTUFYX0xST19ERVNDUklQVE9SUzsKLQlzdHJ1Y3QgbmV0X2xyb19kZXNjICpscm9fYXJyOwotCi0JLyogQWxsb2NhdGUgdGhlIExSTyBkZXNjcmlwdG9ycyBzdHJ1Y3R1cmUgKi8KLQlscm9fYXJyID0ga3phbGxvYyhzLCBHRlBfS0VSTkVMKTsKLQlpZiAobHJvX2FyciA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxyb19tZ3ItPmxyb19hcnIgPSBscm9fYXJyOwotCWxyb19tZ3ItPm1heF9kZXNjID0gRUZYX01BWF9MUk9fREVTQ1JJUFRPUlM7Ci0JbHJvX21nci0+bWF4X2FnZ3IgPSBFRlhfTUFYX0xST19BR0dSOwotCWxyb19tZ3ItPmZyYWdfYWxpZ25fcGFkID0gRUZYX1BBR0VfU0tCX0FMSUdOOwotCi0JbHJvX21nci0+Z2V0X3NrYl9oZWFkZXIgPSBlZnhfbHJvX2dldF9za2JfaGRyOwotCWxyb19tZ3ItPmdldF9mcmFnX2hlYWRlciA9IGVmeF9nZXRfZnJhZ19oZHI7Ci0JbHJvX21nci0+ZGV2ID0gZWZ4LT5uZXRfZGV2OwotCi0JbHJvX21nci0+ZmVhdHVyZXMgPSBMUk9fRl9OQVBJOwotCi0JLyogV2UgY2FuIHBhc3MgcGFja2V0cyB1cCB3aXRoIHRoZSBjaGVja3N1bSBpbnRhY3QgKi8KLQlscm9fbWdyLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQotCWxyb19tZ3ItPmlwX3N1bW1lZF9hZ2dyID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBlZnhfbHJvX2Zpbmkoc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyKQotewotCWtmcmVlKGxyb19tZ3ItPmxyb19hcnIpOwotCWxyb19tZ3ItPmxyb19hcnIgPSBOVUxMOwotfQotCiAvKioKICAqIGVmeF9pbml0X3J4X2J1ZmZlcl9za2IgLSBjcmVhdGUgbmV3IFJYIGJ1ZmZlciB1c2luZyBza2ItYmFzZWQgYWxsb2NhdGlvbgogICoKQEAgLTU0OSw3NyArNDQ2LDMxIEBACiBzdGF0aWMgdm9pZCBlZnhfcnhfcGFja2V0X2xybyhzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwsCiAJCQkgICAgICBzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmKQogewotCXN0cnVjdCBuZXRfbHJvX21nciAqbHJvX21nciA9ICZjaGFubmVsLT5scm9fbWdyOwotCXZvaWQgKnByaXYgPSBjaGFubmVsOworCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9ICZjaGFubmVsLT5uYXBpX3N0cjsKIAogCS8qIFBhc3MgdGhlIHNrYi9wYWdlIGludG8gdGhlIExSTyBlbmdpbmUgKi8KIAlpZiAocnhfYnVmLT5wYWdlKSB7Ci0JCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgZnJhZ3M7CisJCXN0cnVjdCBuYXBpX2dyb19mcmFnaW5mbyBpbmZvOwogCi0JCWZyYWdzLnBhZ2UgPSByeF9idWYtPnBhZ2U7Ci0JCWZyYWdzLnBhZ2Vfb2Zmc2V0ID0gZWZ4X3J4X2J1Zl9vZmZzZXQocnhfYnVmKTsKLQkJZnJhZ3Muc2l6ZSA9IHJ4X2J1Zi0+bGVuOworCQlpbmZvLmZyYWdzWzBdLnBhZ2UgPSByeF9idWYtPnBhZ2U7CisJCWluZm8uZnJhZ3NbMF0ucGFnZV9vZmZzZXQgPSBlZnhfcnhfYnVmX29mZnNldChyeF9idWYpOworCQlpbmZvLmZyYWdzWzBdLnNpemUgPSByeF9idWYtPmxlbjsKKwkJaW5mby5ucl9mcmFncyA9IDE7CisJCWluZm8uaXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCWluZm8ubGVuID0gcnhfYnVmLT5sZW47CiAKLQkJbHJvX3JlY2VpdmVfZnJhZ3MobHJvX21nciwgJmZyYWdzLCByeF9idWYtPmxlbiwKLQkJCQkgIHJ4X2J1Zi0+bGVuLCBwcml2LCAwKTsKKwkJbmFwaV9ncm9fZnJhZ3MobmFwaSwgJmluZm8pOwogCiAJCUVGWF9CVUdfT05fUEFSQU5PSUQocnhfYnVmLT5za2IpOwogCQlyeF9idWYtPnBhZ2UgPSBOVUxMOwogCX0gZWxzZSB7CiAJCUVGWF9CVUdfT05fUEFSQU5PSUQoIXJ4X2J1Zi0+c2tiKTsKIAotCQlscm9fcmVjZWl2ZV9za2IobHJvX21nciwgcnhfYnVmLT5za2IsIHByaXYpOworCQluYXBpX2dyb19yZWNlaXZlKG5hcGksIHJ4X2J1Zi0+c2tiKTsKIAkJcnhfYnVmLT5za2IgPSBOVUxMOwogCX0KIH0KIAotLyogQWxsb2NhdGUgYW5kIGNvbnN0cnVjdCBhbiBTS0IgYXJvdW5kIGEgc3RydWN0IHBhZ2UuKi8KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZWZ4X3J4X21rX3NrYihzdHJ1Y3QgZWZ4X3J4X2J1ZmZlciAqcnhfYnVmLAotCQkJCSAgICAgc3RydWN0IGVmeF9uaWMgKmVmeCwKLQkJCQkgICAgIGludCBoZHJfbGVuKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkvKiBBbGxvY2F0ZSBhbiBTS0IgdG8gc3RvcmUgdGhlIGhlYWRlcnMgKi8KLQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGVmeC0+bmV0X2RldiwgaGRyX2xlbiArIEVGWF9QQUdFX1NLQl9BTElHTik7Ci0JaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgewotCQlFRlhfRVJSX1JMKGVmeCwgIlJYIG91dCBvZiBtZW1vcnkgZm9yIHNrYlxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCUVGWF9CVUdfT05fUEFSQU5PSUQoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyk7Ci0JRUZYX0JVR19PTl9QQVJBTk9JRChyeF9idWYtPmxlbiA8IGhkcl9sZW4pOwotCi0Jc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKLQlza2JfcmVzZXJ2ZShza2IsIEVGWF9QQUdFX1NLQl9BTElHTik7Ci0KLQlza2ItPmxlbiA9IHJ4X2J1Zi0+bGVuOwotCXNrYi0+dHJ1ZXNpemUgPSByeF9idWYtPmxlbiArIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZik7Ci0JbWVtY3B5KHNrYi0+ZGF0YSwgcnhfYnVmLT5kYXRhLCBoZHJfbGVuKTsKLQlza2ItPnRhaWwgKz0gaGRyX2xlbjsKLQotCS8qIEFwcGVuZCB0aGUgcmVtYWluaW5nIHBhZ2Ugb250byB0aGUgZnJhZyBsaXN0ICovCi0JaWYgKHVubGlrZWx5KHJ4X2J1Zi0+bGVuID4gaGRyX2xlbikpIHsKLQkJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZyA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3M7Ci0JCWZyYWctPnBhZ2UgPSByeF9idWYtPnBhZ2U7Ci0JCWZyYWctPnBhZ2Vfb2Zmc2V0ID0gZWZ4X3J4X2J1Zl9vZmZzZXQocnhfYnVmKSArIGhkcl9sZW47Ci0JCWZyYWctPnNpemUgPSBza2ItPmxlbiAtIGhkcl9sZW47Ci0JCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPSAxOwotCQlza2ItPmRhdGFfbGVuID0gZnJhZy0+c2l6ZTsKLQl9IGVsc2UgewotCQlfX2ZyZWVfcGFnZXMocnhfYnVmLT5wYWdlLCBlZngtPnJ4X2J1ZmZlcl9vcmRlcik7Ci0JCXNrYi0+ZGF0YV9sZW4gPSAwOwotCX0KLQotCS8qIE93bmVyc2hpcCBoYXMgdHJhbnNmZXJyZWQgZnJvbSB0aGUgcnhfYnVmIHRvIHNrYiAqLwotCXJ4X2J1Zi0+cGFnZSA9IE5VTEw7Ci0KLQkvKiBNb3ZlIHBhc3QgdGhlIGV0aGVybmV0IGhlYWRlciAqLwotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGVmeC0+bmV0X2Rldik7Ci0KLQlyZXR1cm4gc2tiOwotfQotCiB2b2lkIGVmeF9yeF9wYWNrZXQoc3RydWN0IGVmeF9yeF9xdWV1ZSAqcnhfcXVldWUsIHVuc2lnbmVkIGludCBpbmRleCwKIAkJICAgdW5zaWduZWQgaW50IGxlbiwgYm9vbCBjaGVja3N1bW1lZCwgYm9vbCBkaXNjYXJkKQogewpAQCAtNjg3LDcgKzUzOCw2IEBACiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWJvb2wgbHJvID0gISEoZWZ4LT5uZXRfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKTsKIAogCS8qIElmIHdlJ3JlIGluIGxvb3BiYWNrIHRlc3QsIHRoZW4gcGFzcyB0aGUgcGFja2V0IGRpcmVjdGx5IHRvIHRoZQogCSAqIGxvb3BiYWNrIGxheWVyLCBhbmQgZnJlZSB0aGUgcnhfYnVmIGhlcmUKQEAgLTcwOSw0MSArNTU5LDIzIEBACiAJCQkJCQkgICAgICAgZWZ4LT5uZXRfZGV2KTsKIAl9CiAKLQkvKiBCb3RoIG91ciBnZW5lcmljLUxSTyBhbmQgU0ZDLVNTUiBzdXBwb3J0IHNrYiBhbmQgcGFnZSBiYXNlZAotCSAqIGFsbG9jYXRpb24sIGJ1dCBuZWl0aGVyIHN1cHBvcnQgc3dpdGNoaW5nIGZyb20gb25lIHRvIHRoZQotCSAqIG90aGVyIG9uIHRoZSBmbHkuIElmIHdlIHNwb3QgdGhhdCB0aGUgYWxsb2NhdGlvbiBtb2RlIGhhcwotCSAqIGNoYW5nZWQsIHRoZW4gZmx1c2ggdGhlIExSTyBzdGF0ZS4KLQkgKi8KLQlpZiAodW5saWtlbHkoY2hhbm5lbC0+cnhfYWxsb2NfcG9wX3BhZ2VzICE9IChyeF9idWYtPnBhZ2UgIT0gTlVMTCkpKSB7Ci0JCWVmeF9mbHVzaF9scm8oY2hhbm5lbCk7Ci0JCWNoYW5uZWwtPnJ4X2FsbG9jX3BvcF9wYWdlcyA9IChyeF9idWYtPnBhZ2UgIT0gTlVMTCk7Ci0JfQotCWlmIChsaWtlbHkoY2hlY2tzdW1tZWQgJiYgbHJvKSkgeworCWlmIChsaWtlbHkoY2hlY2tzdW1tZWQgfHwgcnhfYnVmLT5wYWdlKSkgewogCQllZnhfcnhfcGFja2V0X2xybyhjaGFubmVsLCByeF9idWYpOwogCQlnb3RvIGRvbmU7CiAJfQogCi0JLyogRm9ybSBhbiBza2IgaWYgcmVxdWlyZWQgKi8KLQlpZiAocnhfYnVmLT5wYWdlKSB7Ci0JCWludCBoZHJfbGVuID0gbWluKHJ4X2J1Zi0+bGVuLCBFRlhfU0tCX0hFQURFUlMpOwotCQlza2IgPSBlZnhfcnhfbWtfc2tiKHJ4X2J1ZiwgZWZ4LCBoZHJfbGVuKTsKLQkJaWYgKHVubGlrZWx5KHNrYiA9PSBOVUxMKSkgewotCQkJZWZ4X2ZyZWVfcnhfYnVmZmVyKGVmeCwgcnhfYnVmKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIFdlIG5vdyBvd24gdGhlIFNLQiAqLwotCQlza2IgPSByeF9idWYtPnNrYjsKLQkJcnhfYnVmLT5za2IgPSBOVUxMOwotCX0KKwkvKiBXZSBub3cgb3duIHRoZSBTS0IgKi8KKwlza2IgPSByeF9idWYtPnNrYjsKKwlyeF9idWYtPnNrYiA9IE5VTEw7CiAKIAlFRlhfQlVHX09OX1BBUkFOT0lEKHJ4X2J1Zi0+cGFnZSk7CiAJRUZYX0JVR19PTl9QQVJBTk9JRChyeF9idWYtPnNrYik7CiAJRUZYX0JVR19PTl9QQVJBTk9JRCghc2tiKTsKIAogCS8qIFNldCB0aGUgU0tCIGZsYWdzICovCi0JaWYgKHVubGlrZWx5KCFjaGVja3N1bW1lZCB8fCAhZWZ4LT5yeF9jaGVja3N1bV9lbmFibGVkKSkKLQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCBjaGFubmVsLT5jaGFubmVsKTsKIAogCS8qIFBhc3MgdGhlIHBhY2tldCB1cCAqLwogCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CkBAIC03NjAsNyArNTkyLDcgQEAKIAllbnVtIGVmeF9yeF9hbGxvY19tZXRob2QgbWV0aG9kID0gcnhfYWxsb2NfbWV0aG9kOwogCiAJLyogT25seSBtYWtlcyBzZW5zZSB0byB1c2UgcGFnZSBiYXNlZCBhbGxvY2F0aW9uIGlmIExSTyBpcyBlbmFibGVkICovCi0JaWYgKCEoY2hhbm5lbC0+ZWZ4LT5uZXRfZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKSkgeworCWlmICghKGNoYW5uZWwtPmVmeC0+bmV0X2Rldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0dSTykpIHsKIAkJbWV0aG9kID0gUlhfQUxMT0NfTUVUSE9EX1NLQjsKIAl9IGVsc2UgaWYgKG1ldGhvZCA9PSBSWF9BTExPQ19NRVRIT0RfQVVUTykgewogCQkvKiBDb25zdHJhaW4gdGhlIHJ4X2FsbG9jX2xldmVsICovCkBAIC04NjUsMTEgKzY5Nyw2IEBACiAJcnhfcXVldWUtPmJ1ZmZlciA9IE5VTEw7CiB9CiAKLXZvaWQgZWZ4X2ZsdXNoX2xybyhzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0JbHJvX2ZsdXNoX2FsbCgmY2hhbm5lbC0+bHJvX21ncik7Ci19Ci0KIAogbW9kdWxlX3BhcmFtKHJ4X2FsbG9jX21ldGhvZCwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocnhfYWxsb2NfbWV0aG9kLCAiQWxsb2NhdGlvbiBtZXRob2QgdXNlZCBmb3IgUlggYnVmZmVycyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3J4LmggYi9kcml2ZXJzL25ldC9zZmMvcnguaAppbmRleCAwZTg4YTlkLi40MmVlNzU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcnguaAorKysgYi9kcml2ZXJzL25ldC9zZmMvcnguaApAQCAtMTcsOSArMTcsNiBAQAogdm9pZCBlZnhfaW5pdF9yeF9xdWV1ZShzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSk7CiB2b2lkIGVmeF9maW5pX3J4X3F1ZXVlKHN0cnVjdCBlZnhfcnhfcXVldWUgKnJ4X3F1ZXVlKTsKIAotaW50IGVmeF9scm9faW5pdChzdHJ1Y3QgbmV0X2xyb19tZ3IgKmxyb19tZ3IsIHN0cnVjdCBlZnhfbmljICplZngpOwotdm9pZCBlZnhfbHJvX2Zpbmkoc3RydWN0IG5ldF9scm9fbWdyICpscm9fbWdyKTsKLXZvaWQgZWZ4X2ZsdXNoX2xybyhzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpOwogdm9pZCBlZnhfcnhfc3RyYXRlZ3koc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKTsKIHZvaWQgZWZ4X2Zhc3RfcHVzaF9yeF9kZXNjcmlwdG9ycyhzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZSk7CiB2b2lkIGVmeF9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jIGIvZHJpdmVycy9uZXQvc2ZjL3NmZTQwMDEuYwppbmRleCBjYjI1YWU1Li40ZWFjNWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2ZlNDAwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zZmU0MDAxLmMKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlICJuZXRfZHJpdmVyLmgiCiAjaW5jbHVkZSAiZWZ4LmgiCiAjaW5jbHVkZSAicGh5LmgiCkBAIC0zOTgsNiArMzk5LDcgQEAKIAogaW50IHNmbjQxMTF0X2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKKwlpbnQgaSA9IDA7CiAJaW50IHJjOwogCiAJZWZ4LT5ib2FyZF9pbmZvLmh3bW9uX2NsaWVudCA9CkBAIC00MTYsMTMgKzQxOCwyMCBAQAogCWlmIChyYykKIAkJZ290byBmYWlsX2h3bW9uOwogCi0JaWYgKGVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9TUEVDSUFMKSB7Ci0JCWVmeF9zdGF0c19kaXNhYmxlKGVmeCk7Ci0JCXNmbjQxMTF0X3Jlc2V0KGVmeCk7Ci0JfQorCWRvIHsKKwkJaWYgKGVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9TUEVDSUFMKSB7CisJCQkvKiBQSFkgbWF5IG5vdCBnZW5lcmF0ZSBhIDE1Ni4yNSBNSHogY2xvY2sgYW5kIE1BQworCQkJICogc3RhdHMgZmV0Y2ggd2lsbCBmYWlsLiAqLworCQkJZWZ4X3N0YXRzX2Rpc2FibGUoZWZ4KTsKKwkJCXNmbjQxMTF0X3Jlc2V0KGVmeCk7CisJCX0KKwkJcmMgPSBzZnQ5MDAxX3dhaXRfYm9vdChlZngpOworCQlpZiAocmMgPT0gMCkKKwkJCXJldHVybiAwOworCQllZngtPnBoeV9tb2RlID0gUEhZX01PREVfU1BFQ0lBTDsKKwl9IHdoaWxlIChyYyA9PSAtRUlOVkFMICYmICsraSA8IDIpOwogCi0JcmV0dXJuIDA7Ci0KKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmVmeC0+cGNpX2Rldi0+ZGV2LCAmZGV2X2F0dHJfcGh5X2ZsYXNoX2NmZyk7CiBmYWlsX2h3bW9uOgogCWkyY191bnJlZ2lzdGVyX2RldmljZShlZngtPmJvYXJkX2luZm8uaHdtb25fY2xpZW50KTsKIAlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMgYi9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKaW5kZXggZjBlZmQyNC4uZTYxZGM0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYwpAQCAtOCw2ICs4LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgImVmeC5oIgogI2luY2x1ZGUgIm1kaW9fMTBnLmgiCkBAIC0xNTcsMTQgKzE1OCwxNiBAQAogI2RlZmluZSBQQ1NfMTBHQkFTRVRfQkxLTEtfV0lEVEggMQogCiAvKiBCb290IHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSBQQ1NfQk9PVF9TVEFUVVNfUkVHCTUzMjQ4Ci0jZGVmaW5lIFBDU19CT09UX0ZBVEFMX0VSUl9MQk4JKDApCi0jZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0xCTgkoMSkKLSNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfV0lEVEgJKDIpCi0jZGVmaW5lIFBDU19CT09UX0NPTVBMRVRFX0xCTgkoMykKLQotI2RlZmluZSBQQ1NfQk9PVF9NQVhfREVMQVkJKDEwMCkKLSNkZWZpbmUgUENTX0JPT1RfUE9MTF9ERUxBWQkoMTApCisjZGVmaW5lIFBDU19CT09UX1NUQVRVU19SRUcJCTUzMjQ4CisjZGVmaW5lIFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTgkwCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0xCTgkJMQorI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19XSURUSAkJMgorI2RlZmluZSBQQ1NfQk9PVF9QUk9HUkVTU19JTklUCQkwCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX1dBSVRfTURJTwkxCisjZGVmaW5lIFBDU19CT09UX1BST0dSRVNTX0NIRUNLU1VNCTIKKyNkZWZpbmUgUENTX0JPT1RfUFJPR1JFU1NfSlVNUAkJMworI2RlZmluZSBQQ1NfQk9PVF9ET1dOTE9BRF9XQUlUX0xCTgkzCisjZGVmaW5lIFBDU19CT09UX0NPREVfU1RBUlRFRF9MQk4JNAogCiAvKiAxMDBNLzFHIFBIWSByZWdpc3RlcnMgKi8KICNkZWZpbmUgR1BIWV9YQ09OVFJPTF9SRUcJNDkxNTIKQEAgLTIyOSw0MCArMjMyLDYyIEBACiBzdGF0aWMgREVWSUNFX0FUVFIocGh5X3Nob3J0X3JlYWNoLCAwNjQ0LCBzaG93X3BoeV9zaG9ydF9yZWFjaCwKIAkJICAgc2V0X3BoeV9zaG9ydF9yZWFjaCk7CiAKLS8qIENoZWNrIHRoYXQgdGhlIEMxNjYgaGFzIGJvb3RlZCBzdWNjZXNzZnVsbHkgKi8KLXN0YXRpYyBpbnQgdGVueHByZXNzX3BoeV9jaGVjayhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoraW50IHNmdDkwMDFfd2FpdF9ib290KHN0cnVjdCBlZnhfbmljICplZngpCiB7Ci0JaW50IHBoeV9pZCA9IGVmeC0+bWlpLnBoeV9pZDsKLQlpbnQgY291bnQgPSBQQ1NfQk9PVF9NQVhfREVMQVkgLyBQQ1NfQk9PVF9QT0xMX0RFTEFZOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBIWiArIDE7CiAJaW50IGJvb3Rfc3RhdDsKIAotCS8qIFdhaXQgZm9yIHRoZSBib290IHRvIGNvbXBsZXRlIChvciBub3QpICovCi0Jd2hpbGUgKGNvdW50KSB7Ci0JCWJvb3Rfc3RhdCA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIHBoeV9pZCwKKwlmb3IgKDs7KSB7CisJCWJvb3Rfc3RhdCA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIGVmeC0+bWlpLnBoeV9pZCwKIAkJCQkJICAgICAgIE1ESU9fTU1EX1BDUywKIAkJCQkJICAgICAgIFBDU19CT09UX1NUQVRVU19SRUcpOwotCQlpZiAoYm9vdF9zdGF0ICYgKDEgPDwgUENTX0JPT1RfQ09NUExFVEVfTEJOKSkKLQkJCWJyZWFrOwotCQljb3VudC0tOwotCQl1ZGVsYXkoUENTX0JPT1RfUE9MTF9ERUxBWSk7Ci0JfQorCQlpZiAoYm9vdF9zdGF0ID49IDApIHsKKwkJCUVGWF9MT0coZWZ4LCAiUEhZIGJvb3Qgc3RhdHVzID0gJSN4XG4iLCBib290X3N0YXQpOworCQkJc3dpdGNoIChib290X3N0YXQgJgorCQkJCSgoMSA8PCBQQ1NfQk9PVF9GQVRBTF9FUlJPUl9MQk4pIHwKKwkJCQkgKDMgPDwgUENTX0JPT1RfUFJPR1JFU1NfTEJOKSB8CisJCQkJICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSB8CisJCQkJICgxIDw8IFBDU19CT09UX0NPREVfU1RBUlRFRF9MQk4pKSkgeworCQkJY2FzZSAoKDEgPDwgUENTX0JPT1RfRkFUQUxfRVJST1JfTEJOKSB8CisJCQkgICAgICAoUENTX0JPT1RfUFJPR1JFU1NfQ0hFQ0tTVU0gPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pKToKKwkJCWNhc2UgKCgxIDw8IFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTikgfAorCQkJICAgICAgKFBDU19CT09UX1BST0dSRVNTX0lOSVQgPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSk6CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljYXNlICgoUENTX0JPT1RfUFJPR1JFU1NfV0FJVF9NRElPIDw8CisJCQkgICAgICAgUENTX0JPT1RfUFJPR1JFU1NfTEJOKSB8CisJCQkgICAgICAoMSA8PCBQQ1NfQk9PVF9ET1dOTE9BRF9XQUlUX0xCTikpOgorCQkJCXJldHVybiAoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1NQRUNJQUwpID8KKwkJCQkJMCA6IC1FSU87CisJCQljYXNlICgoUENTX0JPT1RfUFJPR1JFU1NfSlVNUCA8PAorCQkJICAgICAgIFBDU19CT09UX1BST0dSRVNTX0xCTikgfAorCQkJICAgICAgKDEgPDwgUENTX0JPT1RfQ09ERV9TVEFSVEVEX0xCTikpOgorCQkJY2FzZSAoKFBDU19CT09UX1BST0dSRVNTX0pVTVAgPDwKKwkJCSAgICAgICBQQ1NfQk9PVF9QUk9HUkVTU19MQk4pIHwKKwkJCSAgICAgICgxIDw8IFBDU19CT09UX0RPV05MT0FEX1dBSVRfTEJOKSB8CisJCQkgICAgICAoMSA8PCBQQ1NfQk9PVF9DT0RFX1NUQVJURURfTEJOKSk6CisJCQkJcmV0dXJuIChlZngtPnBoeV9tb2RlICYgUEhZX01PREVfU1BFQ0lBTCkgPworCQkJCQktRUlPIDogMDsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGJvb3Rfc3RhdCAmICgxIDw8IFBDU19CT09UX0ZBVEFMX0VSUk9SX0xCTikpCisJCQkJCXJldHVybiAtRUlPOworCQkJCWJyZWFrOworCQkJfQorCQl9CiAKLQlpZiAoIWNvdW50KSB7Ci0JCUVGWF9FUlIoZWZ4LCAiJXM6IFBIWSBib290IHRpbWVkIG91dC4gTGFzdCBzdGF0dXMgIgotCQkJIiV4XG4iLCBfX2Z1bmNfXywKLQkJCShib290X3N0YXQgPj4gUENTX0JPT1RfUFJPR1JFU1NfTEJOKSAmCi0JCQkoKDEgPDwgUENTX0JPT1RfUFJPR1JFU1NfV0lEVEgpIC0gMSkpOwotCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQl9CisJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAKLQlyZXR1cm4gMDsKKwkJbXNsZWVwKDUwKTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgdGVueHByZXNzX2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlpbnQgcGh5X2lkID0gZWZ4LT5taWkucGh5X2lkOwogCWludCByZWc7Ci0JaW50IHJjOwogCiAJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfU0ZYNzEwMSkgewogCQkvKiBFbmFibGUgMzEyLjUgTUh6IGNsb2NrICovCkBAIC0yODUsMTAgKzMxMCw2IEBACiAJCQkJICAgICAgIGZhbHNlKTsKIAl9CiAKLQlyYyA9IHRlbnhwcmVzc19waHlfY2hlY2soZWZ4KTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KIAkvKiBTZXQgdGhlIExFRHMgdXAgYXM6IEdyZWVuID0gTGluaywgQW1iZXIgPSBMaW5rL0FjdCwgUmVkID0gT2ZmICovCiAJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfU0ZYNzEwMSkgewogCQltZGlvX2NsYXVzZTQ1X3NldF9mbGFnKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCkBAIC0yOTksNyArMzIwLDcgQEAKIAkJCQkgICAgUE1BX1BNRF9MRURfT1ZFUlJfUkVHLCBQTUFfUE1EX0xFRF9ERUZBVUxUKTsKIAl9CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdGVueHByZXNzX3BoeV9pbml0KHN0cnVjdCBlZnhfbmljICplZngpCkBAIC01NzEsMTUgKzU5MiwxNCBAQAogc3RhdGljIHZvaWQgdGVueHByZXNzX3BoeV9wb2xsKHN0cnVjdCBlZnhfbmljICplZngpCiB7CiAJc3RydWN0IHRlbnhwcmVzc19waHlfZGF0YSAqcGh5X2RhdGEgPSBlZngtPnBoeV9kYXRhOwotCWJvb2wgY2hhbmdlID0gZmFsc2UsIGxpbmtfb2s7Ci0JdW5zaWduZWQgbGlua19mYzsKKwlib29sIGNoYW5nZSA9IGZhbHNlOwogCiAJaWYgKGVmeC0+cGh5X3R5cGUgPT0gUEhZX1RZUEVfU0ZYNzEwMSkgewotCQlsaW5rX29rID0gc2Z4NzEwMV9saW5rX29rKGVmeCk7CisJCWJvb2wgbGlua19vayA9IHNmeDcxMDFfbGlua19vayhlZngpOwogCQlpZiAobGlua19vayAhPSBlZngtPmxpbmtfdXApIHsKIAkJCWNoYW5nZSA9IHRydWU7CiAJCX0gZWxzZSB7Ci0JCQlsaW5rX2ZjID0gbWRpb19jbGF1c2U0NV9nZXRfcGF1c2UoZWZ4KTsKKwkJCXVuc2lnbmVkIGludCBsaW5rX2ZjID0gbWRpb19jbGF1c2U0NV9nZXRfcGF1c2UoZWZ4KTsKIAkJCWlmIChsaW5rX2ZjICE9IGVmeC0+bGlua19mYykKIAkJCQljaGFuZ2UgPSB0cnVlOwogCQl9CkBAIC02NzksMTIgKzY5OSwxMCBAQAogewogCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOwogCWludCBwaHlfaWQgPSBlZngtPm1paS5waHlfaWQ7Ci0JaW50IHJjID0gMCwgcmMyLCBpLCByZXNfcmVnOworCWludCByYyA9IDAsIHJjMiwgaSwgY3RybF9yZWcsIHJlc19yZWc7CiAKLQlpZiAoIShmbGFncyAmIEVUSF9URVNUX0ZMX09GRkxJTkUpKQotCQlyZXR1cm4gMDsKLQotCWVmeC0+cGh5X29wLT5nZXRfc2V0dGluZ3MoZWZ4LCAmZWNtZCk7CisJaWYgKGZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkKKwkJZWZ4LT5waHlfb3AtPmdldF9zZXR0aW5ncyhlZngsICZlY21kKTsKIAogCS8qIEluaXRpYWxpc2UgY2FibGUgZGlhZ25vc3RpYyByZXN1bHRzIHRvIHVua25vd24gZmFpbHVyZSAqLwogCWZvciAoaSA9IDE7IGkgPCA5OyArK2kpCkBAIC02OTIsMTggKzcxMCwyMiBAQAogCiAJLyogUnVuIGNhYmxlIGRpYWdub3N0aWNzOyB3YWl0IHVwIHRvIDUgc2Vjb25kcyBmb3IgdGhlbSB0byBjb21wbGV0ZS4KIAkgKiBBIGNhYmxlIGZhdWx0IGlzIG5vdCBhIHNlbGYtdGVzdCBmYWlsdXJlLCBidXQgYSB0aW1lb3V0IGlzLiAqLworCWN0cmxfcmVnID0gKCgxIDw8IENESUFHX0NUUkxfSU1NRURfTEJOKSB8CisJCSAgICAoQ0RJQUdfQ1RSTF9MRU5fTUVUUkVTIDw8IENESUFHX0NUUkxfTEVOX1VOSVRfTEJOKSk7CisJaWYgKGZsYWdzICYgRVRIX1RFU1RfRkxfT0ZGTElORSkgeworCQkvKiBCcmVhayB0aGUgbGluayBpbiBvcmRlciB0byBydW4gZnVsbCBkaWFnbm9zdGljcy4gIFdlCisJCSAqIG11c3QgcmVzZXQgdGhlIFBIWSB0byByZXN1bWUgbm9ybWFsIHNlcnZpY2UuICovCisJCWN0cmxfcmVnIHw9ICgxIDw8IENESUFHX0NUUkxfQlJLX0xJTktfTEJOKTsKKwl9CiAJbWRpb19jbGF1c2U0NV93cml0ZShlZngsIHBoeV9pZCwgTURJT19NTURfUE1BUE1ELAotCQkJICAgIFBNQV9QTURfQ0RJQUdfQ1RSTF9SRUcsCi0JCQkgICAgKDEgPDwgQ0RJQUdfQ1RSTF9JTU1FRF9MQk4pIHwKLQkJCSAgICAoMSA8PCBDRElBR19DVFJMX0JSS19MSU5LX0xCTikgfAotCQkJICAgIChDRElBR19DVFJMX0xFTl9NRVRSRVMgPDwgQ0RJQUdfQ1RSTF9MRU5fVU5JVF9MQk4pKTsKKwkJCSAgICBQTUFfUE1EX0NESUFHX0NUUkxfUkVHLCBjdHJsX3JlZyk7CiAJaSA9IDA7CiAJd2hpbGUgKG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIHBoeV9pZCwgTURJT19NTURfUE1BUE1ELAogCQkJCSAgUE1BX1BNRF9DRElBR19DVFJMX1JFRykgJgogCSAgICAgICAoMSA8PCBDRElBR19DVFJMX0lOX1BST0dfTEJOKSkgewogCQlpZiAoKytpID09IDUwKSB7CiAJCQlyYyA9IC1FVElNRURPVVQ7Ci0JCQlnb3RvIHJlc2V0OworCQkJZ290byBvdXQ7CiAJCX0KIAkJbXNsZWVwKDEwMCk7CiAJfQpAQCAtNzI4LDE3ICs3NTAsMTggQEAKIAkJCXJlc3VsdHNbNSArIGldID0gbGVuX3JlZzsKIAl9CiAKLQkvKiBXZSBtdXN0IHJlc2V0IHRvIGV4aXQgY2FibGUgZGlhZ25vc3RpYyBtb2RlLiAgVGhlIEJJU1Qgd2lsbAotCSAqIGFsc28gcnVuIHdoZW4gd2UgZG8gdGhpcy4gKi8KLXJlc2V0OgotCXJjMiA9IHRlbnhwcmVzc19zcGVjaWFsX3Jlc2V0KGVmeCk7Ci0JcmVzdWx0c1swXSA9IHJjMiA/IC0xIDogMTsKLQlpZiAoIXJjKQotCQlyYyA9IHJjMjsKK291dDoKKwlpZiAoZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CisJCS8qIFJlc2V0LCBydW5uaW5nIHRoZSBCSVNUIGFuZCB0aGVuIHJlc3VtaW5nIG5vcm1hbCBzZXJ2aWNlLiAqLworCQlyYzIgPSB0ZW54cHJlc3Nfc3BlY2lhbF9yZXNldChlZngpOworCQlyZXN1bHRzWzBdID0gcmMyID8gLTEgOiAxOworCQlpZiAoIXJjKQorCQkJcmMgPSByYzI7CiAKLQlyYzIgPSBlZngtPnBoeV9vcC0+c2V0X3NldHRpbmdzKGVmeCwgJmVjbWQpOwotCWlmICghcmMpCi0JCXJjID0gcmMyOworCQlyYzIgPSBlZngtPnBoeV9vcC0+c2V0X3NldHRpbmdzKGVmeCwgJmVjbWQpOworCQlpZiAoIXJjKQorCQkJcmMgPSByYzI7CisJfQogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3R4LmMgYi9kcml2ZXJzL25ldC9zZmMvdHguYwppbmRleCBkYTNlOWZmLi5kNjY4MWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvdHguYworKysgYi9kcml2ZXJzL25ldC9zZmMvdHguYwpAQCAtMTYyLDYgKzE2MiwxNCBAQAogCS8qIEdldCBzaXplIG9mIHRoZSBpbml0aWFsIGZyYWdtZW50ICovCiAJbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAorCS8qIFBhZCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoRUZYX1dPUktBUk9VTkRfMTU1OTIoZWZ4KSAmJiBza2ItPmxlbiA8PSAzMikgeworCQlFRlhfQlVHX09OX1BBUkFOT0lEKHNrYi0+ZGF0YV9sZW4pOworCQlsZW4gPSAzMiArIDE7CisJCWlmIChza2JfcGFkKHNrYiwgbGVuIC0gc2tiLT5sZW4pKQorCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKIAlmaWxsX2xldmVsID0gdHhfcXVldWUtPmluc2VydF9jb3VudCAtIHR4X3F1ZXVlLT5vbGRfcmVhZF9jb3VudDsKIAlxX3NwYWNlID0gZWZ4LT50eXBlLT50eGRfcmluZ19tYXNrIC0gMSAtIGZpbGxfbGV2ZWw7CiAKQEAgLTM3Niw2ICszODQsOSBAQAogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZTsKIAorCWlmICh1bmxpa2VseShlZngtPnBvcnRfaW5oaWJpdGVkKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCiAJaWYgKGxpa2VseShza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSkKIAkJdHhfcXVldWUgPSAmZWZ4LT50eF9xdWV1ZVtFRlhfVFhfUVVFVUVfT0ZGTE9BRF9DU1VNXTsKIAllbHNlCkBAIC0zOTcsNyArNDA4LDcgQEAKIAkgKiBzZXBhcmF0ZXMgdGhlIHVwZGF0ZSBvZiByZWFkX2NvdW50IGZyb20gdGhlIHRlc3Qgb2YKIAkgKiBzdG9wcGVkLiAqLwogCXNtcF9tYigpOwotCWlmICh1bmxpa2VseSh0eF9xdWV1ZS0+c3RvcHBlZCkpIHsKKwlpZiAodW5saWtlbHkodHhfcXVldWUtPnN0b3BwZWQpICYmIGxpa2VseShlZngtPnBvcnRfZW5hYmxlZCkpIHsKIAkJZmlsbF9sZXZlbCA9IHR4X3F1ZXVlLT5pbnNlcnRfY291bnQgLSB0eF9xdWV1ZS0+cmVhZF9jb3VudDsKIAkJaWYgKGZpbGxfbGV2ZWwgPCBFRlhfTkVUREVWX1RYX1RIUkVTSE9MRCh0eF9xdWV1ZSkpIHsKIAkJCUVGWF9CVUdfT05fUEFSQU5PSUQoIWVmeF9kZXZfcmVnaXN0ZXJlZChlZngpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy93b3JrYXJvdW5kcy5oIGIvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmgKaW5kZXggNzhkZTY4Zi4uYzgyMWMxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3dvcmthcm91bmRzLmgKQEAgLTM2LDYgKzM2LDggQEAKICNkZWZpbmUgRUZYX1dPUktBUk9VTkRfMTE0ODIgRUZYX1dPUktBUk9VTkRfQUxXQVlTCiAvKiBGbHVzaCBldmVudHMgY2FuIHRha2UgYSB2ZXJ5IGxvbmcgdGltZSB0byBhcHBlYXIgKi8KICNkZWZpbmUgRUZYX1dPUktBUk9VTkRfMTE1NTcgRUZYX1dPUktBUk9VTkRfQUxXQVlTCisvKiBUcnVuY2F0ZWQgSVB2NCBwYWNrZXRzIGNhbiBjb25mdXNlIHRoZSBUWCBwYWNrZXQgcGFyc2VyICovCisjZGVmaW5lIEVGWF9XT1JLQVJPVU5EXzE1NTkyIEVGWF9XT1JLQVJPVU5EX0FMV0FZUwogCiAvKiBTcHVyaW91cyBwYXJpdHkgZXJyb3JzIGluIFRTT1JUIGJ1ZmZlcnMgKi8KICNkZWZpbmUgRUZYX1dPUktBUk9VTkRfNTEyOSBFRlhfV09SS0FST1VORF9GQUxDT05fQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYyBiL2RyaXZlcnMvbmV0L3NmYy94ZnBfcGh5LmMKaW5kZXggMmQ1MGI2ZS4uYmIxZWY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3hmcF9waHkuYworKysgYi9kcml2ZXJzL25ldC9zZmMveGZwX3BoeS5jCkBAIC03LDggKzcsOCBAQAogICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKi8KIC8qCi0gKiBEcml2ZXIgZm9yIFhGUCBvcHRpY2FsIFBIWXMgKHBsdXMgc29tZSBzdXBwb3J0IHNwZWNpZmljIHRvIHRoZSBRdWFrZSAyMDIyLzMyKQotICogU2VlIHd3dy5hbWNjLmNvbSBmb3IgZGV0YWlscyAoc2VhcmNoIGZvciBxdDIwMzIpCisgKiBEcml2ZXIgZm9yIFNGUCsgYW5kIFhGUCBvcHRpY2FsIFBIWXMgcGx1cyBzb21lIHN1cHBvcnQgc3BlY2lmaWMgdG8gdGhlCisgKiBBTUNDIFFUMjB4eCBhZGFwdGVyczsgc2VlIHd3dy5hbWNjLmNvbSBmb3IgZGV0YWlscwogICovCiAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtMzEsNiArMzEsMjEgQEAKIC8qIFF1YWtlLXNwZWNpZmljIE1ESU8gcmVnaXN0ZXJzICovCiAjZGVmaW5lIE1ESU9fUVVBS0VfTEVEMF9SRUcJKDB4RDAwNikKIAorLyogUVQyMDI1QyBvbmx5ICovCisjZGVmaW5lIFBDU19GV19IRUFSVEJFQVRfUkVHCTB4ZDdlZQorI2RlZmluZSBQQ1NfRldfSEVBUlRCX0xCTgkwCisjZGVmaW5lIFBDU19GV19IRUFSVEJfV0lEVEgJOAorI2RlZmluZSBQQ1NfVUM4MDUxX1NUQVRVU19SRUcJMHhkN2ZkCisjZGVmaW5lIFBDU19VQ19TVEFUVVNfTEJOCTAKKyNkZWZpbmUgUENTX1VDX1NUQVRVU19XSURUSAk4CisjZGVmaW5lIFBDU19VQ19TVEFUVVNfRldfU0FWRQkweDIwCisjZGVmaW5lIFBNQV9QTURfRlRYX0NUUkwyX1JFRwkweGMzMDkKKyNkZWZpbmUgUE1BX1BNRF9GVFhfU1RBVElDX0xCTgkxMworI2RlZmluZSBQTUFfUE1EX1ZFTkQxX1JFRwkweGMwMDEKKyNkZWZpbmUgUE1BX1BNRF9WRU5EMV9MQlRYRF9MQk4JMTUKKyNkZWZpbmUgUENTX1ZFTkQxX1JFRwkgICAJMHhjMDAwCisjZGVmaW5lIFBDU19WRU5EMV9MQlRYRF9MQk4JNQorCiB2b2lkIHhmcF9zZXRfbGVkKHN0cnVjdCBlZnhfbmljICpwLCBpbnQgbGVkLCBpbnQgbW9kZSkKIHsKIAlpbnQgYWRkciA9IE1ESU9fUVVBS0VfTEVEMF9SRUcgKyBsZWQ7CkBAIC00NSw3ICs2MCw0OSBAQAogI2RlZmluZSBYRlBfTUFYX1JFU0VUX1RJTUUgNTAwCiAjZGVmaW5lIFhGUF9SRVNFVF9XQUlUIDEwCiAKLS8qIFJlc2V0IHRoZSBQSFlYUyBNTUQuIFRoaXMgaXMgZG9jdW1lbnRlZCAoZm9yIHRoZSBRdWFrZSBQSFkpIGFzIGRvaW5nCitzdGF0aWMgaW50IHF0MjAyNWNfd2FpdF9yZXNldChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAxMCAqIEhaOworCWludCBwaHlfaWQgPSBlZngtPm1paS5waHlfaWQ7CisJaW50IHJlZywgb2xkX2NvdW50ZXIgPSAwOworCisJLyogV2FpdCBmb3IgZmlybXdhcmUgaGVhcnRiZWF0IHRvIHN0YXJ0ICovCisJZm9yICg7OykgeworCQlpbnQgY291bnRlcjsKKwkJcmVnID0gbWRpb19jbGF1c2U0NV9yZWFkKGVmeCwgcGh5X2lkLCBNRElPX01NRF9QQ1MsCisJCQkJCSBQQ1NfRldfSEVBUlRCRUFUX1JFRyk7CisJCWlmIChyZWcgPCAwKQorCQkJcmV0dXJuIHJlZzsKKwkJY291bnRlciA9ICgocmVnID4+IFBDU19GV19IRUFSVEJfTEJOKSAmCisJCQkgICAgKCgxIDw8IFBDU19GV19IRUFSVEJfV0lEVEgpIC0gMSkpOworCQlpZiAob2xkX2NvdW50ZXIgPT0gMCkKKwkJCW9sZF9jb3VudGVyID0gY291bnRlcjsKKwkJZWxzZSBpZiAoY291bnRlciAhPSBvbGRfY291bnRlcikKKwkJCWJyZWFrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQltc2xlZXAoMTApOworCX0KKworCS8qIFdhaXQgZm9yIGZpcm13YXJlIHN0YXR1cyB0byBsb29rIGdvb2QgKi8KKwlmb3IgKDs7KSB7CisJCXJlZyA9IG1kaW9fY2xhdXNlNDVfcmVhZChlZngsIHBoeV9pZCwgTURJT19NTURfUENTLAorCQkJCQkgUENTX1VDODA1MV9TVEFUVVNfUkVHKTsKKwkJaWYgKHJlZyA8IDApCisJCQlyZXR1cm4gcmVnOworCQlpZiAoKHJlZyAmCisJCSAgICAgKCgxIDw8IFBDU19VQ19TVEFUVVNfV0lEVEgpIC0gMSkgPDwgUENTX1VDX1NUQVRVU19MQk4pID49CisJCSAgICBQQ1NfVUNfU1RBVFVTX0ZXX1NBVkUpCisJCQlicmVhazsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJbXNsZWVwKDEwMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIFJlc2V0IHRoZSBQSFlYUyBNTUQuIFRoaXMgaXMgZG9jdW1lbnRlZCAoZm9yIHRoZSBRdWFrZSBQSFlzKSBhcyBkb2luZwogICogYSBjb21wbGV0ZSBzb2Z0IHJlc2V0LgogICovCiBzdGF0aWMgaW50IHhmcF9yZXNldF9waHkoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTU4LDYgKzExNSwxMiBAQAogCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbDsKIAorCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1FUMjAyNUMpIHsKKwkJcmMgPSBxdDIwMjVjX3dhaXRfcmVzZXQoZWZ4KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gZmFpbDsKKwl9CisKIAkvKiBXYWl0IDI1MG1zIGZvciB0aGUgUEhZIHRvIGNvbXBsZXRlIGJvb3R1cCAqLwogCW1zbGVlcCgyNTApOwogCkBAIC03Myw3ICsxMzYsNyBAQAogCXJldHVybiByYzsKIAogIGZhaWw6Ci0JRUZYX0VSUihlZngsICJYRlA6IHJlc2V0IHRpbWVkIG91dCFcbiIpOworCUVGWF9FUlIoZWZ4LCAiUEhZIHJlc2V0IHRpbWVkIG91dFxuIik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC04OCwxNSArMTUxLDE1IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWVmeC0+cGh5X2RhdGEgPSBwaHlfZGF0YTsKIAotCUVGWF9JTkZPKGVmeCwgIlhGUDogUEhZIElEIHJlZyAleCAoT1VJICV4IG1vZGVsICV4IHJldmlzaW9uIgotCQkgIiAleClcbiIsIGRldmlkLCBNRElPX0lEX09VSShkZXZpZCksIE1ESU9fSURfTU9ERUwoZGV2aWQpLAotCQkgTURJT19JRF9SRVYoZGV2aWQpKTsKKwlFRlhfSU5GTyhlZngsICJQSFkgSUQgcmVnICV4IChPVUkgJTA2eCBtb2RlbCAlMDJ4IHJldmlzaW9uICV4KVxuIiwKKwkJIGRldmlkLCBtZGlvX2lkX291aShkZXZpZCksIG1kaW9faWRfbW9kZWwoZGV2aWQpLAorCQkgbWRpb19pZF9yZXYoZGV2aWQpKTsKIAogCXBoeV9kYXRhLT5waHlfbW9kZSA9IGVmeC0+cGh5X21vZGU7CiAKIAlyYyA9IHhmcF9yZXNldF9waHkoZWZ4KTsKIAotCUVGWF9JTkZPKGVmeCwgIlhGUDogUEhZIGluaXQgJXMuXG4iLAorCUVGWF9JTkZPKGVmeCwgIlBIWSBpbml0ICVzLlxuIiwKIAkJIHJjID8gImZhaWxlZCIgOiAic3VjY2Vzc2Z1bCIpOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZmFpbDsKQEAgLTEzMSwxMiArMTk0LDI4IEBACiB7CiAJc3RydWN0IHhmcF9waHlfZGF0YSAqcGh5X2RhdGEgPSBlZngtPnBoeV9kYXRhOwogCi0JLyogUmVzZXQgdGhlIFBIWSB3aGVuIG1vdmluZyBmcm9tIHR4IG9mZiB0byB0eCBvbiAqLwotCWlmICghKGVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9UWF9ESVNBQkxFRCkgJiYKLQkgICAgKHBoeV9kYXRhLT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSkKLQkJeGZwX3Jlc2V0X3BoeShlZngpOworCWlmIChlZngtPnBoeV90eXBlID09IFBIWV9UWVBFX1FUMjAyNUMpIHsKKwkJLyogVGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IHJlZ2lzdGVyIGJpdHMgd2hpY2ggY2FuCisJCSAqIGRpc2FibGUgVFggKGFuZCBzYXZlIHBvd2VyKSBvbiBkaXJlY3QtYXR0YWNoIGNhYmxlcworCQkgKiBvciBvcHRpY2FsIHRyYW5zY2VpdmVycywgdmFyeWluZyBzb21ld2hhdCBiZXR3ZWVuCisJCSAqIGZpcm13YXJlIHZlcnNpb25zLiAgT25seSAnc3RhdGljIG1vZGUnIGFwcGVhcnMgdG8KKwkJICogY292ZXIgZXZlcnl0aGluZy4gKi8KKwkJbWRpb19jbGF1c2U0NV9zZXRfZmxhZygKKwkJCWVmeCwgZWZ4LT5taWkucGh5X2lkLCBNRElPX01NRF9QTUFQTUQsCisJCQlQTUFfUE1EX0ZUWF9DVFJMMl9SRUcsIFBNQV9QTURfRlRYX1NUQVRJQ19MQk4sCisJCQllZngtPnBoeV9tb2RlICYgUEhZX01PREVfVFhfRElTQUJMRUQgfHwKKwkJCWVmeC0+cGh5X21vZGUgJiBQSFlfTU9ERV9MT1dfUE9XRVIgfHwKKwkJCWVmeC0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19QQ1MgfHwKKwkJCWVmeC0+bG9vcGJhY2tfbW9kZSA9PSBMT09QQkFDS19QTUFQTUQpOworCX0gZWxzZSB7CisJCS8qIFJlc2V0IHRoZSBQSFkgd2hlbiBtb3ZpbmcgZnJvbSB0eCBvZmYgdG8gdHggb24gKi8KKwkJaWYgKCEoZWZ4LT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSAmJgorCQkgICAgKHBoeV9kYXRhLT5waHlfbW9kZSAmIFBIWV9NT0RFX1RYX0RJU0FCTEVEKSkKKwkJCXhmcF9yZXNldF9waHkoZWZ4KTsKIAotCW1kaW9fY2xhdXNlNDVfdHJhbnNtaXRfZGlzYWJsZShlZngpOworCQltZGlvX2NsYXVzZTQ1X3RyYW5zbWl0X2Rpc2FibGUoZWZ4KTsKKwl9CisKIAltZGlvX2NsYXVzZTQ1X3BoeV9yZWNvbmZpZ3VyZShlZngpOwogCiAJcGh5X2RhdGEtPnBoeV9tb2RlID0gZWZ4LT5waHlfbW9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKaW5kZXggN2Y4ZTUxNC4uN2IxODgyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvc2hfZXRoLmMKQEAgLTY4Nyw2ICs2ODcsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbmV0ZGV2OwogCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CiAJdTMyIGlvYWRkciwgYm9ndXNjbnQgPSBSWF9SSU5HX1NJWkU7CiAJdTMyIGludHJfc3RhdHVzID0gMDsKIApAQCAtNjk2LDcgKzY5NywxMyBAQAogCS8qIEdldCBpbnRlcnJwdCBzdGF0ICovCiAJaW50cl9zdGF0dXMgPSBjdHJsX2lubChpb2FkZHIgKyBFRVNSKTsKIAkvKiBDbGVhciBpbnRlcnJ1cHQgKi8KLQljdHJsX291dGwoaW50cl9zdGF0dXMsIGlvYWRkciArIEVFU1IpOworCWlmIChpbnRyX3N0YXR1cyAmIChFRVNSX0ZSQyB8IEVFU1JfUk1BRiB8IEVFU1JfUlJGIHwKKwkJCUVFU1JfUlRMRiB8IEVFU1JfUlRTRiB8IEVFU1JfUFJFIHwgRUVTUl9DRVJGIHwKKwkJCVRYX0NIRUNLIHwgRUVTUl9FUlJfQ0hFQ0spKSB7CisJCWN0cmxfb3V0bChpbnRyX3N0YXR1cywgaW9hZGRyICsgRUVTUik7CisJCXJldCA9IElSUV9IQU5ETEVEOworCX0gZWxzZQorCQlnb3RvIG90aGVyX2lycTsKIAogCWlmIChpbnRyX3N0YXR1cyAmIChFRVNSX0ZSQyB8IC8qIEZyYW1lIHJlY3YqLwogCQkJRUVTUl9STUFGIHwgLyogTXVsdGkgY2FzdCBhZGRyZXNzIHJlY3YqLwpAQCAtNzIzLDkgKzczMCwxMCBAQAogCQkgICAgICAgbmRldi0+bmFtZSwgaW50cl9zdGF0dXMpOwogCX0KIAorb3RoZXJfaXJxOgogCXNwaW5fdW5sb2NrKCZtZHAtPmxvY2spOwogCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNoX2V0aF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC04NDQsNyArODUyLDEzIEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAotCXJldCA9IHJlcXVlc3RfaXJxKG5kZXYtPmlycSwgJnNoX2V0aF9pbnRlcnJ1cHQsIDAsIG5kZXYtPm5hbWUsIG5kZXYpOworCXJldCA9IHJlcXVlc3RfaXJxKG5kZXYtPmlycSwgJnNoX2V0aF9pbnRlcnJ1cHQsCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjQpCisJCQkJSVJRRl9TSEFSRUQsCisjZWxzZQorCQkJCTAsCisjZW5kaWYKKwkJCQluZGV2LT5uYW1lLCBuZGV2KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ2FuIG5vdCBhc3NpZ24gSVJRIG51bWJlciB0byAlc1xuIiwgQ0FSRE5BTUUpOwogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2hfZXRoLmggYi9kcml2ZXJzL25ldC9zaF9ldGguaAppbmRleCA3M2JjNzE4Li4xNTM3ZTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaF9ldGguaAorKysgYi9kcml2ZXJzL25ldC9zaF9ldGguaApAQCAtNDMsOCArNDMsOCBAQAogCiAjZGVmaW5lIFNINzc2M19TS0JfQUxJR04gMzIKIC8qIENoaXAgQmFzZSBBZGRyZXNzICovCi0jIGRlZmluZSBTSF9UU1VfQUREUiAgMHhGRkUwMTgwMAotIyBkZWZpbmUgQVJTVFIgCQkgIDB4RkZFMDE4MDAKKyMgZGVmaW5lIFNIX1RTVV9BRERSCTB4RkVFMDE4MDAKKyMgZGVmaW5lIEFSU1RSCQkJU0hfVFNVX0FERFIKIAogLyogQ2hpcCBSZWdpc3RlcnMgKi8KIC8qIEUtRE1BQyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCBiZTQ0NjViYy4uOGE3MGRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTgwLDggKzgwLDggQEAKICNkZWZpbmUgU0lTOTAwX01PRFVMRV9OQU1FICJzaXM5MDAiCiAjZGVmaW5lIFNJUzkwMF9EUlZfVkVSU0lPTiAidjEuMDguMTAgQXByLiAyIDIwMDYiCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLUtFUk5fSU5GTyAic2lzOTAwLmM6ICIgU0lTOTAwX0RSVl9WRVJTSU9OICJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyAic2lzOTAwLmM6ICIgU0lTOTAwX0RSVl9WRVJTSU9OICJcbiI7CiAKIHN0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gNDA7CiBzdGF0aWMgaW50IG11bHRpY2FzdF9maWx0ZXJfbGltaXQgPSAxMjg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmggYi9kcml2ZXJzL25ldC9za2ZwL2gvc21jLmgKaW5kZXggOTQzMjU5MS4uMTc1OGQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9oL3NtYy5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZnAvaC9zbWMuaApAQCAtNDY3LDUgKzQ2NywyMiBAQAogI2VuZGlmCS8qIERFQlVHX0JSRCAmJiBERUJVRyAqLwogfSA7CiAKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmRkaV9hZGRyIGZkZGlfYnJvYWRjYXN0OworCitleHRlcm4gdm9pZCBhbGxfc2VsZWN0aW9uX2NyaXRlcmlhKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIGNhcmRfc3RvcChzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCBpbml0X2JvYXJkKHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKm1hY19hZGRyKTsKK2V4dGVybiBpbnQgaW5pdF9mcGx1cyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gdm9pZCBpbml0X3BsYyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CitleHRlcm4gaW50IGluaXRfc210KHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKiBtYWNfYWRkcik7CitleHRlcm4gdm9pZCBtYWMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBzdHUsIHVfc2hvcnQgc3RsKTsKK2V4dGVybiB2b2lkIG1hYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczJ1LCB1X3Nob3J0IGNvZGVfczJsKTsKK2V4dGVybiB2b2lkIG1hYzNfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczN1LCB1X3Nob3J0IGNvZGVfczNsKTsKK2V4dGVybiBpbnQgcGNtX3N0YXR1c190d2lzdGVkKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHBsYzFfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHBsYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKK2V4dGVybiB2b2lkIHJlYWRfYWRkcmVzcyhzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICogbWFjX2FkZHIpOworZXh0ZXJuIHZvaWQgdGltZXJfaXJxKHN0cnVjdCBzX3NtYyAqc21jKTsKKwogI2VuZGlmCS8qIF9TQ01FQ01fICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYyBiL2RyaXZlcnMvbmV0L3NrZnAvaHdtdG0uYwppbmRleCA0MjE4ZTk3Li5kMzIyZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2ZwL2h3bXRtLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9od210bS5jCkBAIC05NywyMyArOTcsMTUgQEAKIAogZXh0ZXJuIHZvaWQqIG1hY19kcnZfZ2V0X3NwYWNlKHN0cnVjdCBzX3NtYyAqc21jLCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiBleHRlcm4gdm9pZCogbWFjX2Rydl9nZXRfZGVzY19tZW0oc3RydWN0IHNfc21jICpzbWMsIHVuc2lnbmVkIGludCBzaXplKTsKLWV4dGVybiB2b2lkIGluaXRfYm9hcmQoc3RydWN0IHNfc21jICpzbWMsIHVfY2hhciAqbWFjX2FkZHIpOwogZXh0ZXJuIHZvaWQgbWFjX2Rydl9maWxsX3J4ZChzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci1leHRlcm4gdm9pZCBwbGMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3R4X2NvbXBsZXRlKHN0cnVjdCBzX3NtYyAqc21jLAogCQkJCXZvbGF0aWxlIHN0cnVjdCBzX3NtdF9mcF90eGQgKnR4ZCk7Ci1leHRlcm4gdm9pZCBwbGMyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci1leHRlcm4gdm9pZCBtYWMxX2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBzdHUsIHVfc2hvcnQgc3RsKTsKLWV4dGVybiB2b2lkIG1hYzJfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczJ1LCB1X3Nob3J0IGNvZGVfczJsKTsKLWV4dGVybiB2b2lkIG1hYzNfaXJxKHN0cnVjdCBzX3NtYyAqc21jLCB1X3Nob3J0IGNvZGVfczN1LCB1X3Nob3J0IGNvZGVfczNsKTsKLWV4dGVybiB2b2lkIHRpbWVyX2lycShzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3J4X2NvbXBsZXRlKHN0cnVjdCBzX3NtYyAqc21jLAogCQkJCXZvbGF0aWxlIHN0cnVjdCBzX3NtdF9mcF9yeGQgKnJ4ZCwKIAkJCQlpbnQgZnJhZ19jb3VudCwgaW50IGxlbik7CiBleHRlcm4gdm9pZCBtYWNfZHJ2X3JlcXVldWVfcnhkKHN0cnVjdCBzX3NtYyAqc21jLCAKIAkJCQl2b2xhdGlsZSBzdHJ1Y3Qgc19zbXRfZnBfcnhkICpyeGQsCiAJCQkJaW50IGZyYWdfY291bnQpOwotZXh0ZXJuIHZvaWQgaW5pdF9wbGMoc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIHZvaWQgbWFjX2Rydl9jbGVhcl9yeGQoc3RydWN0IHNfc21jICpzbWMsCiAJCQkgICAgICB2b2xhdGlsZSBzdHJ1Y3Qgc19zbXRfZnBfcnhkICpyeGQsIGludCBmcmFnX2NvdW50KTsKIApAQCAtMTM2LDcgKzEyOCw2IEBACiAJCQkgaW50IGZsYWcpOwogI2VuZGlmCiAKLWV4dGVybiBpbnQgaW5pdF9mcGx1cyhzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gaW50IG1hY19kcnZfcnhfaW5pdChzdHJ1Y3Qgc19zbWMgKnNtYywgaW50IGxlbiwgaW50IGZjLCBjaGFyICpsb29rX2FoZWFkLAogCQkJICAgaW50IGxhX2xlbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMgYi9kcml2ZXJzL25ldC9za2ZwL3BjbXBsYy5jCmluZGV4IDc0ZTEyOWYuLmYxZGYyZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvcGNtcGxjLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9wY21wbGMuYwpAQCAtMTk4LDkgKzE5OCw2IEBACiBzdGF0aWMgY29uc3QgaW50IHBsY19pbXNrX2FjdCA9IFBMX1BDTV9DT0RFIHwgUExfVFJBQ0VfUFJPUCB8IFBMX1BDTV9CUkVBSyB8CiAJCQlQTF9QQ01fRU5BQkxFRCB8IFBMX1NFTEZfVEVTVCB8IFBMX0VCVUZfRVJSOwogCi0vKiBleHRlcm5hbCBmdW5jdGlvbnMgKi8KLXZvaWQgYWxsX3NlbGVjdGlvbl9jcml0ZXJpYShzdHJ1Y3Qgc19zbWMgKnNtYyk7Ci0KIC8qIGludGVybmFsIGZ1bmN0aW9ucyAqLwogc3RhdGljIHZvaWQgcGNtX2ZzbShzdHJ1Y3Qgc19zbWMgKnNtYywgc3RydWN0IHNfcGh5ICpwaHksIGludCBjbWQpOwogc3RhdGljIHZvaWQgcGNfcmNvZGVfYWN0aW9ucyhzdHJ1Y3Qgc19zbWMgKnNtYywgaW50IGJpdCwgc3RydWN0IHNfcGh5ICpwaHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKaW5kZXggOWEwMGU1NS4uZTE0YWVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCkBAIC0xMzUsMTQgKzEzNSwxMSBAQAogCiAvLyBFeHRlcm5hbCBmdW5jdGlvbnMgZnJvbSB0aGUgaGFyZHdhcmUgbW9kdWxlCiBleHRlcm4gdV9pbnQgbWFjX2Rydl9jaGVja19zcGFjZSh2b2lkKTsKLWV4dGVybiB2b2lkIHJlYWRfYWRkcmVzcyhzdHJ1Y3Qgc19zbWMgKnNtYywgdV9jaGFyICogbWFjX2FkZHIpOwotZXh0ZXJuIHZvaWQgY2FyZF9zdG9wKHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiBpbnQgbWFjX2Rydl9pbml0KHN0cnVjdCBzX3NtYyAqc21jKTsKIGV4dGVybiB2b2lkIGh3bV90eF9mcmFnKHN0cnVjdCBzX3NtYyAqc21jLCBjaGFyIGZhciAqIHZpcnQsIHVfbG9uZyBwaHlzLAogCQkJaW50IGxlbiwgaW50IGZyYW1lX3N0YXR1cyk7CiBleHRlcm4gaW50IGh3bV90eF9pbml0KHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgZmMsIGludCBmcmFnX2NvdW50LAogCQkgICAgICAgaW50IGZyYW1lX2xlbiwgaW50IGZyYW1lX3N0YXR1cyk7Ci1leHRlcm4gaW50IGluaXRfc210KHN0cnVjdCBzX3NtYyAqc21jLCB1X2NoYXIgKiBtYWNfYWRkcik7CiBleHRlcm4gdm9pZCBmZGRpX2lzcihzdHJ1Y3Qgc19zbWMgKnNtYyk7CiBleHRlcm4gdm9pZCBod21fcnhfZnJhZyhzdHJ1Y3Qgc19zbWMgKnNtYywgY2hhciBmYXIgKiB2aXJ0LCB1X2xvbmcgcGh5cywKIAkJCWludCBsZW4sIGludCBmcmFtZV9zdGF0dXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9zbXQuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc210LmMKaW5kZXggODA1MzgzYi4uODNkMTZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9zbXQuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3NtdC5jCkBAIC01NSwxNiArNTUsNiBAQAogfSA7CiAKIC8qCi0gKiBleHRlcm5hbCB2YXJpYWJsZXMKLSAqLwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmZGRpX2FkZHIgZmRkaV9icm9hZGNhc3QgOwotCi0vKgotICogZXh0ZXJuYWwgZnVuY3Rpb25zCi0gKi8KLWludCBwY21fc3RhdHVzX3R3aXN0ZWQoc3RydWN0IHNfc21jICpzbWMpOwotCi0vKgogICogZnVuY3Rpb24gcHJvdG90eXBlcwogICovCiAjaWZkZWYJTElUVExFX0VORElBTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IGM5ZGJiMDYuLjk1MmQzN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTMyMTQsNyArMzIxNCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5od19sb2NrLCBmbGFncyk7Ci0JCV9fbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCV9fbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJaHctPmludHJfbWFzayB8PSBuYXBpbWFza1tza2dlLT5wb3J0XTsKIAkJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKIAkJc2tnZV9yZWFkMzIoaHcsIEIwX0lNU0spOwpAQCAtMzM3Nyw3ICszMzc3LDcgQEAKIAlpZiAoc3RhdHVzICYgKElTX1hBMV9GfElTX1IxX0YpKSB7CiAJCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihody0+ZGV2WzBdKTsKIAkJaHctPmludHJfbWFzayAmPSB+KElTX1hBMV9GfElTX1IxX0YpOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmc2tnZS0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnNrZ2UtPm5hcGkpOwogCX0KIAogCWlmIChzdGF0dXMgJiBJU19QQV9UT19UWDEpCkBAIC0zMzk3LDcgKzMzOTcsNyBAQAogCiAJCWlmIChzdGF0dXMgJiAoSVNfWEEyX0Z8SVNfUjJfRikpIHsKIAkJCWh3LT5pbnRyX21hc2sgJj0gfihJU19YQTJfRnxJU19SMl9GKTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZza2dlLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnNrZ2UtPm5hcGkpOwogCQl9CiAKIAkJaWYgKHN0YXR1cyAmIElTX1BBX1RPX1JYMikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDk5NDcwM2MuLmQwMWM1NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTEwNjgsMTMgKzEwNjgsMTYgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBza3kyX3J4X21hcF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJlLAorc3RhdGljIGludCBza3kyX3J4X21hcF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJlLAogCQkJICAgIHVuc2lnbmVkIHNpemUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJlLT5za2I7CiAJaW50IGk7CiAKIAlyZS0+ZGF0YV9hZGRyID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLCBzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgcmUtPmRhdGFfYWRkcikpKQorCQlyZXR1cm4gLUVJTzsKKwogCXBjaV91bm1hcF9sZW5fc2V0KHJlLCBkYXRhX3NpemUsIHNpemUpOwogCiAJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykKQEAgLTEwODMsNiArMTA4Niw3IEBACiAJCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0LAogCQkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplLAogCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9yeF91bm1hcF9za2Ioc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJlKQpAQCAtMTM1NCw3ICsxMzU4LDEyIEBACiAJCWlmICghcmUtPnNrYikKIAkJCWdvdG8gbm9tZW07CiAKLQkJc2t5Ml9yeF9tYXBfc2tiKGh3LT5wZGV2LCByZSwgc2t5Mi0+cnhfZGF0YV9zaXplKTsKKwkJaWYgKHNreTJfcnhfbWFwX3NrYihody0+cGRldiwgcmUsIHNreTItPnJ4X2RhdGFfc2l6ZSkpIHsKKwkJCWRldl9rZnJlZV9za2IocmUtPnNrYik7CisJCQlyZS0+c2tiID0gTlVMTDsKKwkJCWdvdG8gbm9tZW07CisJCX0KKwogCQlza3kyX3J4X3N1Ym1pdChza3kyLCByZSk7CiAJfQogCkBAIC0xNTQ3LDcgKzE1NTYsNyBAQAogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXN0cnVjdCBza3kyX3R4X2xlICpsZSA9IE5VTEw7CiAJc3RydWN0IHR4X3JpbmdfaW5mbyAqcmU7Ci0JdW5zaWduZWQgaSwgbGVuOworCXVuc2lnbmVkIGksIGxlbiwgZmlyc3Rfc2xvdDsKIAlkbWFfYWRkcl90IG1hcHBpbmc7CiAJdTE2IG1zczsKIAl1OCBjdHJsOwpAQCAtMTU1NSwxMyArMTU2NCwxNyBAQAogIAlpZiAodW5saWtlbHkodHhfYXZhaWwoc2t5MikgPCB0eF9sZV9yZXEoc2tiKSkpCiAgIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCi0JaWYgKHVubGlrZWx5KG5ldGlmX21zZ190eF9xdWV1ZWQoc2t5MikpKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IHF1ZXVlZCwgc2xvdCAldSwgbGVuICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBza3kyLT50eF9wcm9kLCBza2ItPmxlbik7Ci0KIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShody0+cGRldiwgc2tiLT5kYXRhLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihody0+cGRldiwgbWFwcGluZykpCisJCWdvdG8gbWFwcGluZ19lcnJvcjsKKworCWZpcnN0X3Nsb3QgPSBza3kyLT50eF9wcm9kOworCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfcXVldWVkKHNreTIpKSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJXUsIGxlbiAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZmlyc3Rfc2xvdCwgc2tiLT5sZW4pOworCiAJLyogU2VuZCBoaWdoIGJpdHMgaWYgbmVlZGVkICovCiAJaWYgKHNpemVvZihkbWFfYWRkcl90KSA+IHNpemVvZih1MzIpKSB7CiAJCWxlID0gZ2V0X3R4X2xlKHNreTIpOwpAQCAtMTY0OCw2ICsxNjYxLDkgQEAKIAkJbWFwcGluZyA9IHBjaV9tYXBfcGFnZShody0+cGRldiwgZnJhZy0+cGFnZSwgZnJhZy0+cGFnZV9vZmZzZXQsCiAJCQkJICAgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCisJCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoaHctPnBkZXYsIG1hcHBpbmcpKQorCQkJZ290byBtYXBwaW5nX3Vud2luZDsKKwogCQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpIHsKIAkJCWxlID0gZ2V0X3R4X2xlKHNreTIpOwogCQkJbGUtPmFkZHIgPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKG1hcHBpbmcpKTsKQEAgLTE2NzYsNiArMTY5MiwzNCBAQAogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworbWFwcGluZ191bndpbmQ6CisJZm9yIChpID0gZmlyc3Rfc2xvdDsgaSAhPSBza3kyLT50eF9wcm9kOyBpID0gUklOR19ORVhUKGksIFRYX1JJTkdfU0laRSkpIHsKKwkJbGUgPSBza3kyLT50eF9sZSArIGk7CisJCXJlID0gc2t5Mi0+dHhfcmluZyArIGk7CisKKwkJc3dpdGNoKGxlLT5vcGNvZGUgJiB+SFdfT1dORVIpIHsKKwkJY2FzZSBPUF9MQVJHRVNFTkQ6CisJCWNhc2UgT1BfUEFDS0VUOgorCQkJcGNpX3VubWFwX3NpbmdsZShody0+cGRldiwKKwkJCQkJIHBjaV91bm1hcF9hZGRyKHJlLCBtYXBhZGRyKSwKKwkJCQkJIHBjaV91bm1hcF9sZW4ocmUsIG1hcGxlbiksCisJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWJyZWFrOworCQljYXNlIE9QX0JVRkZFUjoKKwkJCXBjaV91bm1hcF9wYWdlKGh3LT5wZGV2LCBwY2lfdW5tYXBfYWRkcihyZSwgbWFwYWRkciksCisJCQkJICAgICAgIHBjaV91bm1hcF9sZW4ocmUsIG1hcGxlbiksCisJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlza3kyLT50eF9wcm9kID0gZmlyc3Rfc2xvdDsKK21hcHBpbmdfZXJyb3I6CisJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJZGV2X3dhcm4oJmh3LT5wZGV2LT5kZXYsICIlczogdHggbWFwcGluZyBlcnJvclxuIiwgZGV2LT5uYW1lKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogLyoKQEAgLTIxOTEsNyArMjIzNSwxMSBAQAogCiAJcHJlZmV0Y2goc2tiLT5kYXRhKTsKIAlyZS0+c2tiID0gbnNrYjsKLQlza3kyX3J4X21hcF9za2Ioc2t5Mi0+aHctPnBkZXYsIHJlLCBoZHJfc3BhY2UpOworCWlmIChza3kyX3J4X21hcF9za2Ioc2t5Mi0+aHctPnBkZXYsIHJlLCBoZHJfc3BhY2UpKSB7CisJCWRldl9rZnJlZV9za2IobnNrYik7CisJCXJlLT5za2IgPSBza2I7CisJCXJldHVybiBOVUxMOworCX0KIAogCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKQogCQlza2JfcHV0X2ZyYWdzKHNrYiwgaGRyX3NwYWNlLCBsZW5ndGgpOwpAQCAtMjY4NywxMyArMjczNSw2IEBACiAJCQlnb3RvIGRvbmU7CiAJfQogCi0JLyogQnVnL0VycmF0YSB3b3JrYXJvdW5kPwotCSAqIE5lZWQgdG8ga2ljayB0aGUgVFggaXJxIG1vZGVyYXRpb24gdGltZXIuCi0JICovCi0JaWYgKHNreTJfcmVhZDgoaHcsIFNUQVRfVFhfVElNRVJfQ1RSTCkgPT0gVElNX1NUQVJUKSB7Ci0JCXNreTJfd3JpdGU4KGh3LCBTVEFUX1RYX1RJTUVSX0NUUkwsIFRJTV9TVE9QKTsKLQkJc2t5Ml93cml0ZTgoaHcsIFNUQVRfVFhfVElNRVJfQ1RSTCwgVElNX1NUQVJUKTsKLQl9CiAJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAlza3kyX3JlYWQzMihodywgQjBfWTJfU1BfTElTUik7CiBkb25lOgpAQCAtMzg2NCw2ICszOTA1LDg2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpza3kyX2RlYnVnOwogCisKKy8qCisgKiBSZWFkIGFuZCBwYXJzZSB0aGUgZmlyc3QgcGFydCBvZiBWaXRhbCBQcm9kdWN0IERhdGEKKyAqLworI2RlZmluZSBWUERfU0laRQkxMjgKKyNkZWZpbmUgVlBEX01BR0lDCTB4ODIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2cGRfdGFnIHsKKwljaGFyIHRhZ1syXTsKKwljaGFyICpsYWJlbDsKK30gdnBkX3RhZ3NbXSA9IHsKKwl7ICJQTiIsCSJQYXJ0IE51bWJlciIgfSwKKwl7ICJFQyIsICJFbmdpbmVlcmluZyBMZXZlbCIgfSwKKwl7ICJNTiIsICJNYW51ZmFjdHVyZXIiIH0sCisJeyAiU04iLCAiU2VyaWFsIE51bWJlciIgfSwKKwl7ICJZQSIsICJBc3NldCBUYWciIH0sCisJeyAiVkwiLCAiRmlyc3QgRXJyb3IgTG9nIE1lc3NhZ2UiIH0sCisJeyAiVkYiLCAiU2Vjb25kIEVycm9yIExvZyBNZXNzYWdlIiB9LAorCXsgIlZCIiwgIkJvb3QgQWdlbnQgUk9NIENvbmZpZ3VyYXRpb24iIH0sCisJeyAiVkUiLCAiRUZJIFVOREkgQ29uZmlndXJhdGlvbiIgfSwKK307CisKK3N0YXRpYyB2b2lkIHNreTJfc2hvd192cGQoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBza3kyX2h3ICpodykKK3sKKwlzaXplX3QgdnBkX3NpemU7CisJbG9mZl90IG9mZnM7CisJdTggbGVuOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwl1MTYgcmVnMjsKKworCXJlZzIgPSBza3kyX3BjaV9yZWFkMTYoaHcsIFBDSV9ERVZfUkVHMik7CisJdnBkX3NpemUgPSAxIDw8ICggKChyZWcyICYgUENJX1ZQRF9ST01fU1opID4+IDE0KSArIDgpOworCisJc2VxX3ByaW50ZihzZXEsICIlcyBQcm9kdWN0IERhdGFcbiIsIHBjaV9uYW1lKGh3LT5wZGV2KSk7CisJYnVmID0ga21hbGxvYyh2cGRfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJc2VxX3B1dHMoc2VxLCAibm8gbWVtb3J5IVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAocGNpX3JlYWRfdnBkKGh3LT5wZGV2LCAwLCB2cGRfc2l6ZSwgYnVmKSA8IDApIHsKKwkJc2VxX3B1dHMoc2VxLCAiVlBEIHJlYWQgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGJ1ZlswXSAhPSBWUERfTUFHSUMpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJWUEQgdGFnIG1pc21hdGNoOiAlI3hcbiIsIGJ1ZlswXSk7CisJCWdvdG8gb3V0OworCX0KKwlsZW4gPSBidWZbMV07CisJaWYgKGxlbiA9PSAwIHx8IGxlbiA+IHZwZF9zaXplIC0gNCkgeworCQlzZXFfcHJpbnRmKHNlcSwgIkludmFsaWQgaWQgbGVuZ3RoOiAlZFxuIiwgbGVuKTsKKwkJZ290byBvdXQ7CisJfQorCisJc2VxX3ByaW50ZihzZXEsICIlLipzXG4iLCBsZW4sIGJ1ZiArIDMpOworCW9mZnMgPSBsZW4gKyAzOworCisJd2hpbGUgKG9mZnMgPCB2cGRfc2l6ZSAtIDQpIHsKKwkJaW50IGk7CisKKwkJaWYgKCFtZW1jbXAoIlJXIiwgYnVmICsgb2ZmcywgMikpCS8qIGVuZCBtYXJrZXIgKi8KKwkJCWJyZWFrOworCQlsZW4gPSBidWZbb2ZmcyArIDJdOworCQlpZiAob2ZmcyArIGxlbiArIDMgPj0gdnBkX3NpemUpCisJCQlicmVhazsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2cGRfdGFncyk7IGkrKykgeworCQkJaWYgKCFtZW1jbXAodnBkX3RhZ3NbaV0udGFnLCBidWYgKyBvZmZzLCAyKSkgeworCQkJCXNlcV9wcmludGYoc2VxLCAiICVzOiAlLipzXG4iLAorCQkJCQkgICB2cGRfdGFnc1tpXS5sYWJlbCwgbGVuLCBidWYgKyBvZmZzICsgMyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJb2ZmcyArPSBsZW4gKyAzOworCX0KK291dDoKKwlrZnJlZShidWYpOworfQorCiBzdGF0aWMgaW50IHNreTJfZGVidWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2VxLT5wcml2YXRlOwpAQCAtMzg3MywxNCArMzk5NCwxOCBAQAogCXVuc2lnbmVkIGlkeCwgbGFzdDsKIAlpbnQgc29wOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRU5FVERPV047CisJc2t5Ml9zaG93X3ZwZChzZXEsIGh3KTsKIAotCXNlcV9wcmludGYoc2VxLCAiSVJRIHNyYz0leCBtYXNrPSV4IGNvbnRyb2w9JXhcbiIsCisJc2VxX3ByaW50ZihzZXEsICJcbklSUSBzcmM9JXggbWFzaz0leCBjb250cm9sPSV4XG4iLAogCQkgICBza3kyX3JlYWQzMihodywgQjBfSVNSQyksCiAJCSAgIHNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKSwKIAkJICAgc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0lDUikpOwogCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJc2VxX3ByaW50ZihzZXEsICJuZXR3b3JrIG5vdCBydW5uaW5nXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJbmFwaV9kaXNhYmxlKCZody0+bmFwaSk7CiAJbGFzdCA9IHNreTJfcmVhZDE2KGh3LCBTVEFUX1BVVF9JRFgpOwogCkBAIC00MjA0LDY5ICs0MzI5LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKgotICogUmVhZCBhbmQgcGFyc2UgdGhlIGZpcnN0IHBhcnQgb2YgVml0YWwgUHJvZHVjdCBEYXRhCi0gKi8KLSNkZWZpbmUgVlBEX1NJWkUJMTI4Ci0jZGVmaW5lIFZQRF9NQUdJQwkweDgyCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBza3kyX3ZwZF9pbmZvKHN0cnVjdCBza3kyX2h3ICpodykKLXsKLQlpbnQgY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShody0+cGRldiwgUENJX0NBUF9JRF9WUEQpOwotCWNvbnN0IHU4ICpwOwotCXU4ICp2cGRfYnVmID0gTlVMTDsKLQl1MTYgbGVuOwotCXN0YXRpYyBzdHJ1Y3QgdnBkX3RhZyB7Ci0JCWNoYXIgdGFnWzJdOwotCQljaGFyICpsYWJlbDsKLQl9IHZwZF90YWdzW10gPSB7Ci0JCXsgIlBOIiwJIlBhcnQgTnVtYmVyIiB9LAotCQl7ICJFQyIsICJFbmdpbmVlcmluZyBMZXZlbCIgfSwKLQkJeyAiTU4iLCAiTWFudWZhY3R1cmVyIiB9LAotCX07Ci0KLQlpZiAoIWNhcCkKLQkJZ290byBvdXQ7Ci0KLQl2cGRfYnVmID0ga21hbGxvYyhWUERfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF2cGRfYnVmKQotCQlnb3RvIG91dDsKLQotCWlmIChza3kyX3ZwZF9yZWFkKGh3LCBjYXAsIHZwZF9idWYsIDAsIFZQRF9TSVpFKSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAodnBkX2J1ZlswXSAhPSBWUERfTUFHSUMpCi0JCWdvdG8gb3V0OwotCWxlbiA9IHZwZF9idWZbMV07Ci0JaWYgKGxlbiA9PSAwIHx8IGxlbiA+IFZQRF9TSVpFIC0gNCkKLQkJZ290byBvdXQ7Ci0JcCA9IHZwZF9idWYgKyAzOwotCWRldl9pbmZvKCZody0+cGRldi0+ZGV2LCAiJS4qc1xuIiwgbGVuLCBwKTsKLQlwICs9IGxlbjsKLQotCXdoaWxlIChwIDwgdnBkX2J1ZiArIFZQRF9TSVpFIC0gNCkgewotCQlpbnQgaTsKLQotCQlpZiAoIW1lbWNtcCgiUlciLCBwLCAyKSkJLyogZW5kIG1hcmtlciAqLwotCQkJYnJlYWs7Ci0KLQkJbGVuID0gcFsyXTsKLQkJaWYgKGxlbiA+IChwIC0gdnBkX2J1ZikgLSA0KQotCQkJYnJlYWs7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnBkX3RhZ3MpOyBpKyspIHsKLQkJCWlmICghbWVtY21wKHZwZF90YWdzW2ldLnRhZywgcCwgMikpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiICVzOiAlLipzXG4iLAotCQkJCSAgICAgICB2cGRfdGFnc1tpXS5sYWJlbCwgbGVuLCBwICsgMyk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJcCArPSBsZW4gKyAzOwotCX0KLW91dDoKLQlrZnJlZSh2cGRfYnVmKTsKLX0KLQogLyogVGhpcyBkcml2ZXIgc3VwcG9ydHMgeXVrb24yIGNoaXBzZXQgb25seSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnNreTJfbmFtZSh1OCBjaGlwaWQsIGNoYXIgKmJ1ZiwgaW50IHN6KQogewpAQCAtNDI5NCw2ICs0MzU2LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBza3kyX2h3ICpodzsKIAlpbnQgZXJyLCB1c2luZ19kYWMgPSAwLCB3b2xfZGVmYXVsdDsKKwl1MzIgcmVnOwogCWNoYXIgYnVmMVsxNl07CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKQEAgLTQzMjcsNiArNDM5MCwzNCBAQAogCQl9CiAJfQogCisJLyogR2V0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKwkgKiBOb3RlOiBvbmx5IHJlZ3VsYXIgUENJIGNvbmZpZyBhY2Nlc3Mgb25jZSB0byB0ZXN0IGZvciBIVyBpc3N1ZXMKKwkgKiAgICAgICBvdGhlciBQQ0kgYWNjZXNzIHRocm91Z2ggc2hhcmVkIG1lbW9yeSBmb3Igc3BlZWQgYW5kIHRvCisJICoJIGF2b2lkIE1NQ09ORklHIHByb2JsZW1zLgorCSAqLworCWVyciA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfREVWX1JFRzIsICZyZWcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIHJlYWQgY29uZmlnIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbnM7CisJfQorCisJLyogc2l6ZSBvZiBhdmFpbGFibGUgVlBELCBvbmx5IGltcGFjdCBzeXNmcyAqLworCWVyciA9IHBjaV92cGRfdHJ1bmNhdGUocGRldiwgMXVsIDw8ICgoKHJlZyAmIFBDSV9WUERfUk9NX1NaKSA+PiAxNCkgKyA4KSk7CisJaWYgKGVycikKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkNhbid0IHNldCBWUEQgc2l6ZVxuIik7CisKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkvKiBUaGUgc2s5OGxpbiB2ZW5kb3IgZHJpdmVyIHVzZXMgaGFyZHdhcmUgYnl0ZSBzd2FwcGluZyBidXQKKwkgKiB0aGlzIGRyaXZlciB1c2VzIHNvZnR3YXJlIHN3YXBwaW5nLgorCSAqLworCXJlZyAmPSB+UENJX1JFVl9ERVNDOworCWVyciA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldixQQ0lfREVWX1JFRzIsIHJlZyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJQQ0kgd3JpdGUgY29uZmlnIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbnM7CisJfQorI2VuZGlmCisKIAl3b2xfZGVmYXVsdCA9IGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpID8gV0FLRV9NQUdJQyA6IDA7CiAKIAllcnIgPSAtRU5PTUVNOwpAQCAtNDM0NCwxOCArNDQzNSw2IEBACiAJCWdvdG8gZXJyX291dF9mcmVlX2h3OwogCX0KIAotI2lmZGVmIF9fQklHX0VORElBTgotCS8qIFRoZSBzazk4bGluIHZlbmRvciBkcml2ZXIgdXNlcyBoYXJkd2FyZSBieXRlIHN3YXBwaW5nIGJ1dAotCSAqIHRoaXMgZHJpdmVyIHVzZXMgc29mdHdhcmUgc3dhcHBpbmcuCi0JICovCi0JewotCQl1MzIgcmVnOwotCQlyZWcgPSBza3kyX3BjaV9yZWFkMzIoaHcsIFBDSV9ERVZfUkVHMik7Ci0JCXJlZyAmPSB+UENJX1JFVl9ERVNDOwotCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzIsIHJlZyk7Ci0JfQotI2VuZGlmCi0KIAkvKiByaW5nIGZvciBzdGF0dXMgcmVzcG9uc2VzICovCiAJaHctPnN0X2xlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgU1RBVFVTX0xFX0JZVEVTLCAmaHctPnN0X2RtYSk7CiAJaWYgKCFody0+c3RfbGUpCkBAIC00MzcwLDggKzQ0NDksNiBAQAogCiAJc2t5Ml9yZXNldChodyk7CiAKLQlza3kyX3ZwZF9pbmZvKGh3KTsKLQogCWRldiA9IHNreTJfaW5pdF9uZXRkZXYoaHcsIDAsIHVzaW5nX2RhYywgd29sX2RlZmF1bHQpOwogCWlmICghZGV2KSB7CiAJCWVyciA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWMtdWx0cmEuYyBiL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jCmluZGV4IDIwMzNmZWUuLjAyOTFlYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jCkBAIC0xNDIsOSArMTQyLDYgQEAKIAlpbnQgYmFzZV9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJaW50IGlycSA9IGRldi0+aXJxOwogCi0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9ICZ1bHRyYV9wb2xsOwotI2VuZGlmCiAJaWYgKGJhc2VfYWRkciA+IDB4MWZmKQkJLyogQ2hlY2sgYSBzaW5nbGUgc3BlY2lmaWVkIGxvY2F0aW9uLiAqLwogCQlyZXR1cm4gdWx0cmFfcHJvYmUxKGRldiwgYmFzZV9hZGRyKTsKIAllbHNlIGlmIChiYXNlX2FkZHIgIT0gMCkJLyogRG9uJ3QgcHJvYmUgYXQgYWxsLiAqLwpAQCAtMTk5LDcgKzE5Niw3IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCS5uZG9fcG9sbF9jb250cm9sbGVyIAk9IGVpX3BvbGwsCisJLm5kb19wb2xsX2NvbnRyb2xsZXIgCT0gdWx0cmFfcG9sbCwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jLXVsdHJhMzIuYyBiL2RyaXZlcnMvbmV0L3NtYy11bHRyYTMyLmMKaW5kZXggY2I2YzA5Ny4uN2E1NTRhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jLXVsdHJhMzIuYworKysgYi9kcml2ZXJzL25ldC9zbWMtdWx0cmEzMi5jCkBAIC0xNTMsNiArMTUzLDIyIEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHVsdHJhMzJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gCQk9IHVsdHJhMzJfb3BlbiwKKwkubmRvX3N0b3AgCQk9IHVsdHJhMzJfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGVpX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGVpX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gZWlfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gZWlfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IGVpX3BvbGwsCisjZW5kaWYKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHVsdHJhMzJfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7CiAJaW50IGksIGVkZ2UsIG1lZGlhLCByZXR2YWw7CkBAIC0yNzMsMTEgKzI4OSw4IEBACiAJZWlfc3RhdHVzLmJsb2NrX291dHB1dCA9ICZ1bHRyYTMyX2Jsb2NrX291dHB1dDsKIAllaV9zdGF0dXMuZ2V0XzgzOTBfaGRyID0gJnVsdHJhMzJfZ2V0XzgzOTBfaGRyOwogCWVpX3N0YXR1cy5yZXNldF84MzkwID0gJnVsdHJhMzJfcmVzZXRfODM5MDsKLQlkZXYtPm9wZW4gPSAmdWx0cmEzMl9vcGVuOwotCWRldi0+c3RvcCA9ICZ1bHRyYTMyX2Nsb3NlOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBlaV9wb2xsOwotI2VuZGlmCisKKwlkZXYtPm5ldGRldl9vcHMgPSAmdWx0cmEzMl9uZXRkZXZfb3BzOwogCU5TODM5MF9pbml0KGRldiwgMCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYyBiL2RyaXZlcnMvbmV0L3NtYzkxMXguYwppbmRleCAyMjNjZGUwLi4yOTM2MTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCkBAIC0xNTQ1LDcgKzE1NDUsNyBAQAogewogCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBDQVJETkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwogCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgdmVyc2lvbiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKLQlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXYtPmRldi5wYXJlbnQtPmJ1c19pZCwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CisJc3RybmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CiB9CiAKIHN0YXRpYyBpbnQgc21jOTExeF9ldGh0b29sX253YXlyZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5oIGIvZHJpdmVycy9uZXQvc21jOTExeC5oCmluZGV4IGE0NTk1MmUuLjgxNDBmN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmgKQEAgLTIzNiw4ICsyMzYsNyBAQAogICogVXNlIGEgRE1BIGZvciBSWCBhbmQgVFggcGFja2V0cy4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCiBzdGF0aWMgZG1hX2FkZHJfdCByeF9kbWFidWYsIHR4X2RtYWJ1ZjsKIHN0YXRpYyBpbnQgcnhfZG1hbGVuLCB0eF9kbWFsZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTk0LmMgYi9kcml2ZXJzL25ldC9zbWM5MTk0LmMKaW5kZXggMThkNjUzYi4uOWE3OTczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTE5NC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxOTQuYwpAQCAtODMxLDYgKzgzMSwxNyBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21jX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQkgPSBzbWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gc21jX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAJPSBzbWNfd2FpdF90b19zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQJICAgIAk9IHNtY190aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc21jX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLiBGdW5jdGlvbjogc21jX3Byb2JlKCBpbnQgaW9hZGRyICkKICAuCkBAIC0xMDQ0LDEyICsxMDU1LDggQEAKICAgCSAgCWdvdG8gZXJyX291dDsKICAgICAgIAl9CiAKLQlkZXYtPm9wZW4JCSAgICAgICAgPSBzbWNfb3BlbjsKLQlkZXYtPnN0b3AJCSAgICAgICAgPSBzbWNfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgICAgCT0gc21jX3dhaXRfdG9fc2VuZF9wYWNrZXQ7Ci0JZGV2LT50eF90aW1lb3V0CQkgICAgCT0gc21jX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzCQkJPSAmc21jX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwkJPSBIWi8yMDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCAJPSBzbWNfc2V0X211bHRpY2FzdF9saXN0OwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggYjIxNWE4ZC4uZmRjYmFmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTE2MTQsNyArMTYxNCw3IEBACiB7CiAJc3RybmNweShpbmZvLT5kcml2ZXIsIENBUkROQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybmNweShpbmZvLT52ZXJzaW9uLCB2ZXJzaW9uLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwotCXN0cm5jcHkoaW5mby0+YnVzX2luZm8sIGRldi0+ZGV2LnBhcmVudC0+YnVzX2lkLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKKwlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLCBzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIH0KIAogc3RhdGljIGludCBzbWNfZXRodG9vbF9ud2F5cmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE2NDMsNiArMTY0MywxMTcgQEAKIAlscC0+bXNnX2VuYWJsZSA9IGxldmVsOwogfQogCitzdGF0aWMgaW50IHNtY193cml0ZV9lZXByb21fd29yZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgYWRkciwgdTE2IHdvcmQpCit7CisJdTE2IGN0bDsKKwlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKKworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwkvKiBsb2FkIHdvcmQgaW50byBHUCByZWdpc3RlciAqLworCVNNQ19TRUxFQ1RfQkFOSyhscCwgMSk7CisJU01DX1NFVF9HUChscCwgd29yZCk7CisJLyogc2V0IHRoZSBhZGRyZXNzIHRvIHB1dCB0aGUgZGF0YSBpbiBFRVBST00gKi8KKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCVNNQ19TRVRfUFRSKGxwLCBhZGRyKTsKKwkvKiB0ZWxsIGl0IHRvIHdyaXRlICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAxKTsKKwljdGwgPSBTTUNfR0VUX0NUTChscCk7CisJU01DX1NFVF9DVEwobHAsIGN0bCB8IChDVExfRUVQUk9NX1NFTEVDVCB8IENUTF9TVE9SRSkpOworCS8qIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCAqLworCWRvIHsKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKFNNQ19HRVRfQ1RMKGxwKSAmIENUTF9TVE9SRSk7CisJLyogY2xlYW4gdXAgKi8KKwlTTUNfU0VUX0NUTChscCwgY3RsKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19yZWFkX2VlcHJvbV93b3JkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBhZGRyLCB1MTYgKndvcmQpCit7CisJdTE2IGN0bDsKKwlzdHJ1Y3Qgc21jX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBscC0+YmFzZTsKKworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKKwkvKiBzZXQgdGhlIEVFUFJPTSBhZGRyZXNzIHRvIGdldCB0aGUgZGF0YSBmcm9tICovCisJU01DX1NFTEVDVF9CQU5LKGxwLCAyKTsKKwlTTUNfU0VUX1BUUihscCwgYWRkciB8IFBUUl9SRUFEKTsKKwkvKiB0ZWxsIGl0IHRvIGxvYWQgKi8KKwlTTUNfU0VMRUNUX0JBTksobHAsIDEpOworCVNNQ19TRVRfR1AobHAsIDB4ZmZmZik7CS8qIGluaXQgdG8ga25vd24gKi8KKwljdGwgPSBTTUNfR0VUX0NUTChscCk7CisJU01DX1NFVF9DVEwobHAsIGN0bCB8IChDVExfRUVQUk9NX1NFTEVDVCB8IENUTF9SRUxPQUQpKTsKKwkvKiB3YWl0IGZvciBpdCB0byBmaW5pc2ggKi8KKwlkbyB7CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlIChTTUNfR0VUX0NUTChscCkgJiBDVExfUkVMT0FEKTsKKwkvKiByZWFkIHdvcmQgZnJvbSBHUCByZWdpc3RlciAqLworCSp3b3JkID0gU01DX0dFVF9HUChscCk7CisJLyogY2xlYW4gdXAgKi8KKwlTTUNfU0VUX0NUTChscCwgY3RsKTsKKwlTTUNfU0VMRUNUX0JBTksobHAsIDIpOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gMHgyMyAqIDI7Cit9CisKK3N0YXRpYyBpbnQgc21jX2V0aHRvb2xfZ2V0ZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSkKK3sKKwlpbnQgaTsKKwlpbnQgaW1heDsKKworCURCRygxLCAiUmVhZGluZyAlZCBieXRlcyBhdCAlZCgweCV4KVxuIiwKKwkJZWVwcm9tLT5sZW4sIGVlcHJvbS0+b2Zmc2V0LCBlZXByb20tPm9mZnNldCk7CisJaW1heCA9IHNtY19ldGh0b29sX2dldGVlcHJvbV9sZW4oZGV2KTsKKwlmb3IgKGkgPSAwOyBpIDwgZWVwcm9tLT5sZW47IGkgKz0gMikgeworCQlpbnQgcmV0OworCQl1MTYgd2J1ZjsKKwkJaW50IG9mZnNldCA9IGkgKyBlZXByb20tPm9mZnNldDsKKwkJaWYgKG9mZnNldCA+IGltYXgpCisJCQlicmVhazsKKwkJcmV0ID0gc21jX3JlYWRfZWVwcm9tX3dvcmQoZGV2LCBvZmZzZXQgPj4gMSwgJndidWYpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCQlEQkcoMiwgIlJlYWQgMHgleCBmcm9tIDB4JXhcbiIsIHdidWYsIG9mZnNldCA+PiAxKTsKKwkJZGF0YVtpXSA9ICh3YnVmID4+IDgpICYgMHhmZjsKKwkJZGF0YVtpKzFdID0gd2J1ZiAmIDB4ZmY7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNtY19ldGh0b29sX3NldGVlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpCit7CisJaW50IGk7CisJaW50IGltYXg7CisKKwlEQkcoMSwgIldyaXRpbmcgJWQgYnl0ZXMgdG8gJWQoMHgleClcbiIsCisJCQllZXByb20tPmxlbiwgZWVwcm9tLT5vZmZzZXQsIGVlcHJvbS0+b2Zmc2V0KTsKKwlpbWF4ID0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tX2xlbihkZXYpOworCWZvciAoaSA9IDA7IGkgPCBlZXByb20tPmxlbjsgaSArPSAyKSB7CisJCWludCByZXQ7CisJCXUxNiB3YnVmOworCQlpbnQgb2Zmc2V0ID0gaSArIGVlcHJvbS0+b2Zmc2V0OworCQlpZiAob2Zmc2V0ID4gaW1heCkKKwkJCWJyZWFrOworCQl3YnVmID0gKGRhdGFbaV0gPDwgOCkgfCBkYXRhW2kgKyAxXTsKKwkJREJHKDIsICJXcml0aW5nIDB4JXggdG8gMHgleFxuIiwgd2J1Ziwgb2Zmc2V0ID4+IDEpOworCQlyZXQgPSBzbWNfd3JpdGVfZWVwcm9tX3dvcmQoZGV2LCBvZmZzZXQgPj4gMSwgd2J1Zik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc21jX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJPSBzbWNfZXRodG9vbF9nZXRzZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCT0gc21jX2V0aHRvb2xfc2V0c2V0dGluZ3MsCkBAIC0xNjUyLDggKzE3NjMsMjIgQEAKIAkuc2V0X21zZ2xldmVsCT0gc21jX2V0aHRvb2xfc2V0bXNnbGV2ZWwsCiAJLm53YXlfcmVzZXQJPSBzbWNfZXRodG9vbF9ud2F5cmVzZXQsCiAJLmdldF9saW5rCT0gZXRodG9vbF9vcF9nZXRfbGluaywKLS8vCS5nZXRfZWVwcm9tCT0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tLAotLy8JLnNldF9lZXByb20JPSBzbWNfZXRodG9vbF9zZXRlZXByb20sCisJLmdldF9lZXByb21fbGVuID0gc21jX2V0aHRvb2xfZ2V0ZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbQk9IHNtY19ldGh0b29sX2dldGVlcHJvbSwKKwkuc2V0X2VlcHJvbQk9IHNtY19ldGh0b29sX3NldGVlcHJvbSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc21jX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNtY19vcGVuLAorCS5uZG9fc3RvcAkJPSBzbWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHNtY19oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHNtY190aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc21jX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IHNtY19wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYKIH07CiAKIC8qCkBAIC0xODY1LDE2ICsxOTkwLDkgQEAKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBldGhlcm5ldCB2YWx1ZXMuICovCiAJZXRoZXJfc2V0dXAoZGV2KTsKIAotCWRldi0+b3BlbiA9IHNtY19vcGVuOwotCWRldi0+c3RvcCA9IHNtY19jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHNtY19oYXJkX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gc21jX3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMod2F0Y2hkb2cpOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gc21jX3NldF9tdWx0aWNhc3RfbGlzdDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmc21jX25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZzbWNfZXRodG9vbF9vcHM7Ci0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHNtY19wb2xsX2NvbnRyb2xsZXI7Ci0jZW5kaWYKIAogCXRhc2tsZXRfaW5pdCgmbHAtPnR4X3Rhc2ssIHNtY19oYXJkd2FyZV9zZW5kX3BrdCwgKHVuc2lnbmVkIGxvbmcpZGV2KTsKIAlJTklUX1dPUksoJmxwLT5waHlfY29uZmlndXJlLCBzbWNfcGh5X2NvbmZpZ3VyZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCmluZGV4IGM0Y2NkMTIuLjZjNDRmODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC00NCw2ICs0NCw3IEBACiAgICAgZGVmaW5lZChDT05GSUdfTUFDSF9NQUlOU1RPTkUpIHx8XAogICAgIGRlZmluZWQoQ09ORklHX01BQ0hfWllMT05JVEUpIHx8XAogICAgIGRlZmluZWQoQ09ORklHX01BQ0hfTElUVExFVE9OKSB8fFwKKyAgICBkZWZpbmVkKENPTkZJR19NQUNIX1pZTE9OSVRFMikgfHxcCiAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9WSVBFUikKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC00OTQsOCArNDk1LDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogCiAjaWZkZWYgU01DX2luc2wKICN1bmRlZiBTTUNfaW5zbApAQCAtMTE0MSw2ICsxMTQwLDE2IEBACiAKICNkZWZpbmUgU01DX0dFVF9NSUkobHApCQlTTUNfaW53KGlvYWRkciwgTUlJX1JFRyhscCkpCiAKKyNkZWZpbmUgU01DX0dFVF9HUChscCkJCVNNQ19pbncoaW9hZGRyLCBHUF9SRUcobHApKQorCisjZGVmaW5lIFNNQ19TRVRfR1AobHAsIHgpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKFNNQ19NVVNUX0FMSUdOX1dSSVRFKGxwKSkJCQkJXAorCQkJU01DX291dGwoKHgpPDwxNiwgaW9hZGRyLCBTTUNfUkVHKGxwLCA4LCAxKSk7CVwKKwkJZWxzZQkJCQkJCQlcCisJCQlTTUNfb3V0dyh4LCBpb2FkZHIsIEdQX1JFRyhscCkpOwkJXAorCX0gd2hpbGUgKDApCisKICNkZWZpbmUgU01DX1NFVF9NSUkobHAsIHgpCQlTTUNfb3V0dyh4LCBpb2FkZHIsIE1JSV9SRUcobHApKQogCiAjZGVmaW5lIFNNQ19HRVRfTUlSKGxwKQkJU01DX2ludyhpb2FkZHIsIE1JUl9SRUcobHApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguYyBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKaW5kZXggOWE3OGRhZS4uYWY4ZjYwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCkBAIC0zNjgsNDggKzM2OCw1MyBAQAogCXJldHVybiByZWc7CiB9CiAKLS8qIEF1dG9kZXRlY3RzIGFuZCBpbml0aWFsaXNlcyBleHRlcm5hbCBwaHkgZm9yIFNNU0M5MTE1IGFuZCBTTVNDOTExNyBmbGF2b3JzLgotICogSWYgc29tZXRoaW5nIGdvZXMgd3JvbmcsIHJldHVybnMgLUVOT0RFViB0byByZXZlcnQgYmFjayB0byBpbnRlcm5hbCBwaHkuCi0gKiBQZXJmb3JtZWQgYXQgaW5pdGlhbGlzYXRpb24gb25seSwgc28gaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqLwotc3RhdGljIGludCBzbXNjOTExeF9waHlfaW5pdGlhbGlzZV9leHRlcm5hbChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEpCisvKiBTd2l0Y2ggdG8gZXh0ZXJuYWwgcGh5LiBBc3N1bWVzIHR4IGFuZCByeCBhcmUgc3RvcHBlZC4gKi8KK3N0YXRpYyB2b2lkIHNtc2M5MTF4X3BoeV9lbmFibGVfZXh0ZXJuYWwoc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhKQogewogCXVuc2lnbmVkIGludCBod2NmZyA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBIV19DRkcpOwogCi0JLyogRXh0ZXJuYWwgcGh5IGlzIHJlcXVlc3RlZCwgc3VwcG9ydGVkLCBhbmQgZGV0ZWN0ZWQgKi8KLQlpZiAoaHdjZmcgJiBIV19DRkdfRVhUX1BIWV9ERVRfKSB7CisJLyogRGlzYWJsZSBwaHkgY2xvY2tzIHRvIHRoZSBNQUMgKi8KKwlod2NmZyAmPSAofkhXX0NGR19QSFlfQ0xLX1NFTF8pOworCWh3Y2ZnIHw9IEhXX0NGR19QSFlfQ0xLX1NFTF9DTEtfRElTXzsKKwlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOworCXVkZWxheSgxMCk7CS8qIEVub3VnaCB0aW1lIGZvciBjbG9ja3MgdG8gc3RvcCAqLwogCi0JCS8qIFN3aXRjaCB0byBleHRlcm5hbCBwaHkuIEFzc3VtaW5nIHR4IGFuZCByeCBhcmUgc3RvcHBlZAotCQkgKiBiZWNhdXNlIHNtc2M5MTF4X3BoeV9pbml0aWFsaXNlIGlzIGNhbGxlZCBiZWZvcmUKLQkJICogc21zYzkxMXhfcnhfaW5pdGlhbGlzZSBhbmQgdHhfaW5pdGlhbGlzZS4gKi8KKwkvKiBTd2l0Y2ggdG8gZXh0ZXJuYWwgcGh5ICovCisJaHdjZmcgfD0gSFdfQ0ZHX0VYVF9QSFlfRU5fOworCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSFdfQ0ZHLCBod2NmZyk7CiAKLQkJLyogRGlzYWJsZSBwaHkgY2xvY2tzIHRvIHRoZSBNQUMgKi8KLQkJaHdjZmcgJj0gKH5IV19DRkdfUEhZX0NMS19TRUxfKTsKLQkJaHdjZmcgfD0gSFdfQ0ZHX1BIWV9DTEtfU0VMX0NMS19ESVNfOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOwotCQl1ZGVsYXkoMTApOwkvKiBFbm91Z2ggdGltZSBmb3IgY2xvY2tzIHRvIHN0b3AgKi8KKwkvKiBFbmFibGUgcGh5IGNsb2NrcyB0byB0aGUgTUFDICovCisJaHdjZmcgJj0gKH5IV19DRkdfUEhZX0NMS19TRUxfKTsKKwlod2NmZyB8PSBIV19DRkdfUEhZX0NMS19TRUxfRVhUX1BIWV87CisJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKKwl1ZGVsYXkoMTApOwkvKiBFbm91Z2ggdGltZSBmb3IgY2xvY2tzIHRvIHJlc3RhcnQgKi8KIAotCQkvKiBTd2l0Y2ggdG8gZXh0ZXJuYWwgcGh5ICovCi0JCWh3Y2ZnIHw9IEhXX0NGR19FWFRfUEhZX0VOXzsKLQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKKwlod2NmZyB8PSBIV19DRkdfU01JX1NFTF87CisJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKK30KIAotCQkvKiBFbmFibGUgcGh5IGNsb2NrcyB0byB0aGUgTUFDICovCi0JCWh3Y2ZnICY9ICh+SFdfQ0ZHX1BIWV9DTEtfU0VMXyk7Ci0JCWh3Y2ZnIHw9IEhXX0NGR19QSFlfQ0xLX1NFTF9FWFRfUEhZXzsKLQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBIV19DRkcsIGh3Y2ZnKTsKLQkJdWRlbGF5KDEwKTsJLyogRW5vdWdoIHRpbWUgZm9yIGNsb2NrcyB0byByZXN0YXJ0ICovCisvKiBBdXRvZGV0ZWN0cyBhbmQgZW5hYmxlcyBleHRlcm5hbCBwaHkgaWYgcHJlc2VudCBvbiBzdXBwb3J0ZWQgY2hpcHMuCisgKiBhdXRvZGV0ZWN0aW9uIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNwZWNpZnlpbmcgU01TQzkxMVhfRk9SQ0VfSU5URVJOQUxfUEhZCisgKiBvciBTTVNDOTExWF9GT1JDRV9FWFRFUk5BTF9QSFkgaW4gdGhlIHBsYXRmb3JtX2RhdGEgZmxhZ3MuICovCitzdGF0aWMgdm9pZCBzbXNjOTExeF9waHlfaW5pdGlhbGlzZV9leHRlcm5hbChzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEpCit7CisJdW5zaWduZWQgaW50IGh3Y2ZnID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEhXX0NGRyk7CiAKLQkJaHdjZmcgfD0gSFdfQ0ZHX1NNSV9TRUxfOwotCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIEhXX0NGRywgaHdjZmcpOwotCi0JCVNNU0NfVFJBQ0UoSFcsICJTdWNjZXNzZnVsbHkgc3dpdGNoZWQgdG8gZXh0ZXJuYWwgUEhZIik7CisJaWYgKHBkYXRhLT5jb25maWcuZmxhZ3MgJiBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkpIHsKKwkJU01TQ19UUkFDRShIVywgIkZvcmNpbmcgaW50ZXJuYWwgUEhZIik7CisJCXBkYXRhLT51c2luZ19leHRwaHkgPSAwOworCX0gZWxzZSBpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX0ZPUkNFX0VYVEVSTkFMX1BIWSkgeworCQlTTVNDX1RSQUNFKEhXLCAiRm9yY2luZyBleHRlcm5hbCBQSFkiKTsKKwkJc21zYzkxMXhfcGh5X2VuYWJsZV9leHRlcm5hbChwZGF0YSk7CisJCXBkYXRhLT51c2luZ19leHRwaHkgPSAxOworCX0gZWxzZSBpZiAoaHdjZmcgJiBIV19DRkdfRVhUX1BIWV9ERVRfKSB7CisJCVNNU0NfVFJBQ0UoSFcsICJIV19DRkcgRVhUX1BIWV9ERVQgc2V0LCB1c2luZyBleHRlcm5hbCBQSFkiKTsKKwkJc21zYzkxMXhfcGh5X2VuYWJsZV9leHRlcm5hbChwZGF0YSk7CiAJCXBkYXRhLT51c2luZ19leHRwaHkgPSAxOwogCX0gZWxzZSB7Ci0JCVNNU0NfV0FSTklORyhIVywgIk5vIGV4dGVybmFsIFBIWSBkZXRlY3RlZCwgIgotCQkJIlVzaW5nIGludGVybmFsIFBIWSBpbnN0ZWFkLiIpOwotCQkvKiBVc2UgaW50ZXJuYWwgcGh5ICovCi0JCXJldHVybiAtRU5PREVWOworCQlTTVNDX1RSQUNFKEhXLCAiSFdfQ0ZHIEVYVF9QSFlfREVUIGNsZWFyLCB1c2luZyBpbnRlcm5hbCBQSFkiKTsKKwkJcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7CiAJfQotCXJldHVybiAwOwogfQogCiAvKiBGZXRjaGVzIGEgdHggc3RhdHVzIG91dCBvZiB0aGUgc3RhdHVzIGZpZm8gKi8KQEAgLTc2OSw3ICs3NzQsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIHBoeWRldi0+ZGV2LmJ1c19pZCwKKwlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksCiAJCSZzbXNjOTExeF9waHlfYWRqdXN0X2xpbmssIDAsIHBkYXRhLT5jb25maWcucGh5X2ludGVyZmFjZSk7CiAKIAlpZiAoSVNfRVJSKHBoeWRldikpIHsKQEAgLTc3OCw3ICs3ODMsOCBAQAogCX0KIAogCXByX2luZm8oIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCi0JCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIHBoeWRldi0+ZGV2LmJ1c19pZCwgcGh5ZGV2LT5pcnEpOworCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLAorCQlkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCBwaHlkZXYtPmlycSk7CiAKIAkvKiBtYXNrIHdpdGggTUFDIHN1cHBvcnRlZCBmZWF0dXJlcyAqLwogCXBoeWRldi0+c3VwcG9ydGVkICY9IChQSFlfQkFTSUNfRkVBVFVSRVMgfCBTVVBQT1JURURfUGF1c2UgfApAQCAtODI0LDIyICs4MzAsMTggQEAKIAogCXBkYXRhLT5taWlfYnVzLT5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCi0JcGRhdGEtPnVzaW5nX2V4dHBoeSA9IDA7Ci0KIAlzd2l0Y2ggKHBkYXRhLT5pZHJldiAmIDB4RkZGRjAwMDApIHsKIAljYXNlIDB4MDExNzAwMDA6CiAJY2FzZSAweDAxMTUwMDAwOgogCWNhc2UgMHgxMTdBMDAwMDoKIAljYXNlIDB4MTE1QTAwMDA6CiAJCS8qIEV4dGVybmFsIFBIWSBzdXBwb3J0ZWQsIHRyeSB0byBhdXRvZGV0ZWN0ICovCi0JCWlmIChzbXNjOTExeF9waHlfaW5pdGlhbGlzZV9leHRlcm5hbChwZGF0YSkgPCAwKSB7Ci0JCQlTTVNDX1RSQUNFKEhXLCAiTm8gZXh0ZXJuYWwgUEhZIGRldGVjdGVkLCAiCi0JCQkJInVzaW5nIGludGVybmFsIFBIWSIpOwotCQl9CisJCXNtc2M5MTF4X3BoeV9pbml0aWFsaXNlX2V4dGVybmFsKHBkYXRhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJU01TQ19UUkFDRShIVywgIkV4dGVybmFsIFBIWSBpcyBub3Qgc3VwcG9ydGVkLCAiCiAJCQkidXNpbmcgaW50ZXJuYWwgUEhZIik7CisJCXBkYXRhLT51c2luZ19leHRwaHkgPSAwOwogCQlicmVhazsKIAl9CiAKQEAgLTg5MywyMiArODk1LDIyIEBACiAJCQlTTVNDX1dBUk5JTkcoSFcsCiAJCQkJIlBhY2tldCB0YWcgcmVzZXJ2ZWQgYml0IGlzIGhpZ2giKTsKIAkJfSBlbHNlIHsKLQkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgMHgwMDAwODAwMCkpIHsKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0VTXykpIHsKIAkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJfSBlbHNlIHsKIAkJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9ICh0eF9zdGF0ID4+IDE2KTsKIAkJCX0KLQkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgMHgwMDAwMDEwMCkpIHsKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0VYQ0VTU19DT0xfKSkgewogCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSAxNjsKIAkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IDE7CiAJCQl9IGVsc2UgewogCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPQogCQkJCSAgICAoKHR4X3N0YXQgPj4gMykgJiAweEYpOwogCQkJfQotCQkJaWYgKHVubGlrZWx5KHR4X3N0YXQgJiAweDAwMDAwODAwKSkKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0xPU1RfQ0FSUklFUl8pKQogCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMgKz0gMTsKLQkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgMHgwMDAwMDIwMCkpIHsKKwkJCWlmICh1bmxpa2VseSh0eF9zdGF0ICYgVFhfU1RTX0xBVEVfQ09MXykpIHsKIAkJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMrKzsKIAkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCQl9CkBAIC05MjIsMTkgKzkyNCwxNyBAQAogewogCWludCBjcmNfZXJyID0gMDsKIAotCWlmICh1bmxpa2VseShyeHN0YXQgJiAweDAwMDA4MDAwKSkgeworCWlmICh1bmxpa2VseShyeHN0YXQgJiBSWF9TVFNfRVNfKSkgewogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQlpZiAodW5saWtlbHkocnhzdGF0ICYgMHgwMDAwMDAwMikpIHsKKwkJaWYgKHVubGlrZWx5KHJ4c3RhdCAmIFJYX1NUU19DUkNfRVJSXykpIHsKIAkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJY3JjX2VyciA9IDE7CiAJCX0KIAl9CiAJaWYgKGxpa2VseSghY3JjX2VycikpIHsKLQkJaWYgKHVubGlrZWx5KChyeHN0YXQgJiAweDAwMDAxMDIwKSA9PSAweDAwMDAxMDIwKSkgewotCQkJLyogRnJhbWUgdHlwZSBpbmRpY2F0ZXMgbGVuZ3RoLAotCQkJICogYW5kIGxlbmd0aCBlcnJvciBpcyBzZXQgKi8KKwkJaWYgKHVubGlrZWx5KChyeHN0YXQgJiBSWF9TVFNfRlJBTUVfVFlQRV8pICYmCisJCQkgICAgIChyeHN0YXQgJiBSWF9TVFNfTEVOR1RIX0VSUl8pKSkKIAkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQl9CiAJCWlmIChyeHN0YXQgJiBSWF9TVFNfTUNBU1RfKQogCQkJZGV2LT5zdGF0cy5tdWx0aWNhc3QrKzsKIAl9CkBAIC05NTMsNyArOTUzLDcgQEAKIAkJZG8gewogCQkJdWRlbGF5KDEpOwogCQkJdmFsID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIFJYX0RQX0NUUkwpOwotCQl9IHdoaWxlICgtLXRpbWVvdXQgJiYgKHZhbCAmIFJYX0RQX0NUUkxfUlhfRkZXRF8pKTsKKwkJfSB3aGlsZSAoKHZhbCAmIFJYX0RQX0NUUkxfUlhfRkZXRF8pICYmIC0tdGltZW91dCk7CiAKIAkJaWYgKHVubGlrZWx5KHRpbWVvdXQgPT0gMCkpCiAJCQlTTVNDX1dBUk5JTkcoSFcsICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgIgpAQCAtOTg0LDcgKzk4NCw3IEBACiAJCQkvKiBXZSBwcm9jZXNzZWQgYWxsIHBhY2tldHMgYXZhaWxhYmxlLiAgVGVsbCBOQVBJIGl0IGNhbgogCQkJICogc3RvcCBwb2xsaW5nIHRoZW4gcmUtZW5hYmxlIHJ4IGludGVycnVwdHMgKi8KIAkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX1NUUywgSU5UX1NUU19SU0ZMXyk7Ci0JCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7CiAJCQl0ZW1wIHw9IElOVF9FTl9SU0ZMX0VOXzsKIAkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKQEAgLTExMTksNyArMTExOSw3IEBACiAKIC8qIFNldHMgdGhlIGRldmljZSBNQUMgYWRkcmVzcyB0byBkZXZfYWRkciwgY2FsbGVkIHdpdGggbWFjX2xvY2sgaGVsZCAqLwogc3RhdGljIHZvaWQKLXNtc2M5MTF4X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEsIHU4IGRldl9hZGRyWzZdKQorc21zYzkxMXhfc2V0X2h3X21hY19hZGRyZXNzKHN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YSwgdTggZGV2X2FkZHJbNl0pCiB7CiAJdTMyIG1hY19oaWdoMTYgPSAoZGV2X2FkZHJbNV0gPDwgOCkgfCBkZXZfYWRkcls0XTsKIAl1MzIgbWFjX2xvdzMyID0gKGRldl9hZGRyWzNdIDw8IDI0KSB8IChkZXZfYWRkclsyXSA8PCAxNikgfApAQCAtMTE2MCw4ICsxMTYwLDggQEAKIAogCS8qIE1ha2Ugc3VyZSBFRVBST00gaGFzIGZpbmlzaGVkIGxvYWRpbmcgYmVmb3JlIHNldHRpbmcgR1BJT19DRkcgKi8KIAl0aW1lb3V0ID0gNTA7Ci0Jd2hpbGUgKCh0aW1lb3V0LS0pICYmCi0JICAgICAgIChzbXNjOTExeF9yZWdfcmVhZChwZGF0YSwgRTJQX0NNRCkgJiBFMlBfQ01EX0VQQ19CVVNZXykpIHsKKwl3aGlsZSAoKHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBFMlBfQ01EKSAmIEUyUF9DTURfRVBDX0JVU1lfKSAmJgorCSAgICAgICAtLXRpbWVvdXQpIHsKIAkJdWRlbGF5KDEwKTsKIAl9CiAKQEAgLTExNzQsNyArMTE3NCw3IEBACiAJLyogVGhlIHNvZnQgcmVzZXQgYWJvdmUgY2xlYXJlZCB0aGUgZGV2aWNlJ3MgTUFDIGFkZHJlc3MsCiAJICogcmVzdG9yZSBpdCBmcm9tIGxvY2FsIGNvcHkgKHNldCBpbiBwcm9iZSkgKi8KIAlzcGluX2xvY2tfaXJxKCZwZGF0YS0+bWFjX2xvY2spOwotCXNtc2M5MTF4X3NldF9tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CisJc21zYzkxMXhfc2V0X2h3X21hY19hZGRyZXNzKHBkYXRhLCBkZXYtPmRldl9hZGRyKTsKIAlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CiAKIAkvKiBJbml0aWFsaXNlIGlycXMsIGJ1dCBsZWF2ZSBhbGwgc291cmNlcyBkaXNhYmxlZCAqLwpAQCAtMTIyNSw2ICsxMjI1LDEwIEBACiAJZGV2X2luZm8oJmRldi0+ZGV2LCAiU01TQzkxMXgvOTIxeCBpZGVudGlmaWVkIGF0ICUjMDhseCwgSVJROiAlZFxuIiwKIAkJICh1bnNpZ25lZCBsb25nKXBkYXRhLT5pb2FkZHIsIGRldi0+aXJxKTsKIAorCS8qIFJlc2V0IHRoZSBsYXN0IGtub3duIGR1cGxleCBhbmQgY2FycmllciAqLworCXBkYXRhLT5sYXN0X2R1cGxleCA9IC0xOworCXBkYXRhLT5sYXN0X2NhcnJpZXIgPSAtMTsKKwogCS8qIEJyaW5nIHRoZSBQSFkgdXAgKi8KIAlwaHlfc3RhcnQocGRhdGEtPnBoeV9kZXYpOwogCkBAIC0xMjQ2LDcgKzEyNTAsNyBAQAogCW5hcGlfZW5hYmxlKCZwZGF0YS0+bmFwaSk7CiAKIAl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7Ci0JdGVtcCB8PSAoSU5UX0VOX1RERkFfRU5fIHwgSU5UX0VOX1JTRkxfRU5fKTsKKwl0ZW1wIHw9IChJTlRfRU5fVERGQV9FTl8gfCBJTlRfRU5fUlNGTF9FTl8gfCBJTlRfRU5fUlhTVE9QX0lOVF9FTl8pOwogCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKIAogCXNwaW5fbG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CkBAIC0xNDE4LDExICsxNDIyLDYgQEAKIAogCQkJLyogUmVxdWVzdCB0aGUgaGFyZHdhcmUgdG8gc3RvcCwgdGhlbiBwZXJmb3JtIHRoZQogCQkJICogdXBkYXRlIHdoZW4gd2UgZ2V0IGFuIFJYX1NUT1AgaW50ZXJydXB0ICovCi0JCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9TVFMsIElOVF9TVFNfUlhTVE9QX0lOVF8pOwotCQkJdGVtcCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBJTlRfRU4pOwotCQkJdGVtcCB8PSBJTlRfRU5fUlhTVE9QX0lOVF9FTl87Ci0JCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9FTiwgdGVtcCk7Ci0KIAkJCXRlbXAgPSBzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgTUFDX0NSKTsKIAkJCXRlbXAgJj0gfihNQUNfQ1JfUlhFTl8pOwogCQkJc21zYzkxMXhfbWFjX3dyaXRlKHBkYXRhLCBNQUNfQ1IsIHRlbXApOwpAQCAtMTQ2MSwxMSArMTQ2MCw5IEBACiAJCS8qIENhbGxlZCB3aGVuIHRoZXJlIGlzIGEgbXVsdGljYXN0IHVwZGF0ZSBzY2hlZHVsZWQgYW5kCiAJCSAqIGl0IGlzIG5vdyBzYWZlIHRvIGNvbXBsZXRlIHRoZSB1cGRhdGUgKi8KIAkJU01TQ19UUkFDRShJTlRSLCAiUlggU3RvcCBpbnRlcnJ1cHQiKTsKLQkJdGVtcCA9IHNtc2M5MTF4X3JlZ19yZWFkKHBkYXRhLCBJTlRfRU4pOwotCQl0ZW1wICY9ICh+SU5UX0VOX1JYU1RPUF9JTlRfRU5fKTsKLQkJc21zYzkxMXhfcmVnX3dyaXRlKHBkYXRhLCBJTlRfRU4sIHRlbXApOwogCQlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9TVFMsIElOVF9TVFNfUlhTVE9QX0lOVF8pOwotCQlzbXNjOTExeF9yeF9tdWx0aWNhc3RfdXBkYXRlX3dvcmthcm91bmQocGRhdGEpOworCQlpZiAocGRhdGEtPm11bHRpY2FzdF91cGRhdGVfcGVuZGluZykKKwkJCXNtc2M5MTF4X3J4X211bHRpY2FzdF91cGRhdGVfd29ya2Fyb3VuZChwZGF0YSk7CiAJCXNlcnZpY2VkID0gSVJRX0hBTkRMRUQ7CiAJfQogCkBAIC0xNDg1LDE2ICsxNDgyLDE2IEBACiAJfQogCiAJaWYgKGxpa2VseShpbnRzdHMgJiBpbnRlbiAmIElOVF9TVFNfUlNGTF8pKSB7Ci0JCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmcGRhdGEtPm5hcGkpKSkgeworCQlpZiAobGlrZWx5KG5hcGlfc2NoZWR1bGVfcHJlcCgmcGRhdGEtPm5hcGkpKSkgewogCQkJLyogRGlzYWJsZSBSeCBpbnRlcnJ1cHRzICovCiAJCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIElOVF9FTik7CiAJCQl0ZW1wICY9ICh+SU5UX0VOX1JTRkxfRU5fKTsKIAkJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCB0ZW1wKTsKIAkJCS8qIFNjaGVkdWxlIGEgTkFQSSBwb2xsICovCi0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZwZGF0YS0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnBkYXRhLT5uYXBpKTsKIAkJfSBlbHNlIHsKIAkJCVNNU0NfV0FSTklORyhSWF9FUlIsCi0JCQkJIm5ldGlmX3J4X3NjaGVkdWxlX3ByZXAgZmFpbGVkIik7CisJCQkJIm5hcGlfc2NoZWR1bGVfcHJlcCBmYWlsZWQiKTsKIAkJfQogCQlzZXJ2aWNlZCA9IElSUV9IQU5ETEVEOwogCX0KQEAgLTE1MTEsNiArMTUwOCwzMSBAQAogfQogI2VuZGlmCQkJCS8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCiAKK3N0YXRpYyBpbnQgc21zYzkxMXhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJLyogT24gb2xkZXIgaGFyZHdhcmUgcmV2aXNpb25zIHdlIGNhbm5vdCBjaGFuZ2UgdGhlIG1hYyBhZGRyZXNzCisJICogcmVnaXN0ZXJzIHdoaWxlIHJlY2VpdmluZyBkYXRhLiAgTmV3ZXIgZGV2aWNlcyBjYW4gc2FmZWx5IGNoYW5nZQorCSAqIHRoaXMgYXQgYW55IHRpbWUuICovCisJaWYgKHBkYXRhLT5nZW5lcmF0aW9uIDw9IDEgJiYgbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgRVRIX0FMRU4pOworCisJc3Bpbl9sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKKwlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOworCXNwaW5fdW5sb2NrX2lycSgmcGRhdGEtPm1hY19sb2NrKTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgIk1BQyBBZGRyZXNzOiAlcE1cbiIsIGRldi0+ZGV2X2FkZHIpOworCisJcmV0dXJuIDA7Cit9CisKIC8qIFN0YW5kYXJkIGlvY3RscyBmb3IgbWlpLXRvb2wgKi8KIHN0YXRpYyBpbnQgc21zYzkxMXhfZG9faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7CkBAIC0xNTQ1LDcgKzE1NjcsNyBAQAogewogCXN0cmxjcHkoaW5mby0+ZHJpdmVyLCBTTVNDX0NISVBOQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybGNweShpbmZvLT52ZXJzaW9uLCBTTVNDX0RSVl9WRVJTSU9OLCBzaXplb2YoaW5mby0+dmVyc2lvbikpOwotCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIGRldi0+ZGV2LnBhcmVudC0+YnVzX2lkLAorCXN0cmxjcHkoaW5mby0+YnVzX2luZm8sIGRldl9uYW1lKGRldi0+ZGV2LnBhcmVudCksCiAJCXNpemVvZihpbmZvLT5idXNfaW5mbykpOwogfQogCkBAIC0xNjU4LDYgKzE2ODAsNyBAQAogCQkJCQkgIHU4IGFkZHJlc3MsIHU4IGRhdGEpCiB7CiAJdTMyIG9wID0gRTJQX0NNRF9FUENfQ01EX0VSQVNFXyB8IGFkZHJlc3M7CisJdTMyIHRlbXA7CiAJaW50IHJldDsKIAogCVNNU0NfVFJBQ0UoRFJWLCAiYWRkcmVzcyAweCV4LCBkYXRhIDB4JXgiLCBhZGRyZXNzLCBkYXRhKTsKQEAgLTE2NjYsNiArMTY4OSwxMCBAQAogCWlmICghcmV0KSB7CiAJCW9wID0gRTJQX0NNRF9FUENfQ01EX1dSSVRFXyB8IGFkZHJlc3M7CiAJCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgRTJQX0RBVEEsICh1MzIpZGF0YSk7CisKKwkJLyogV29ya2Fyb3VuZCBmb3IgaGFyZHdhcmUgcmVhZC1hZnRlci13cml0ZSByZXN0cmljdGlvbiAqLworCQl0ZW1wID0gc21zYzkxMXhfcmVnX3JlYWQocGRhdGEsIEJZVEVfVEVTVCk7CisKIAkJcmV0ID0gc21zYzkxMXhfZWVwcm9tX3NlbmRfY21kKHBkYXRhLCBvcCk7CiAJfQogCkBAIC0xNzQxLDEyICsxNzY4LDI3IEBACiAJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzbXNjOTExeF9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19kb19pb2N0bAkJPSBzbXNjOTExeF9kb19pb2N0bCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gc21zYzkxMXhfc2V0X21hY19hZGRyZXNzLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBzbXNjOTExeF9wb2xsX2NvbnRyb2xsZXIsCiAjZW5kaWYKIH07CiAKKy8qIGNvcGllcyB0aGUgY3VycmVudCBtYWMgYWRkcmVzcyBmcm9tIGhhcmR3YXJlIHRvIGRldi0+ZGV2X2FkZHIgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBzbXNjOTExeF9yZWFkX21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNtc2M5MTF4X2RhdGEgKnBkYXRhID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgbWFjX2hpZ2gxNiA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBBRERSSCk7CisJdTMyIG1hY19sb3czMiA9IHNtc2M5MTF4X21hY19yZWFkKHBkYXRhLCBBRERSTCk7CisKKwlkZXYtPmRldl9hZGRyWzBdID0gKHU4KShtYWNfbG93MzIpOworCWRldi0+ZGV2X2FkZHJbMV0gPSAodTgpKG1hY19sb3czMiA+PiA4KTsKKwlkZXYtPmRldl9hZGRyWzJdID0gKHU4KShtYWNfbG93MzIgPj4gMTYpOworCWRldi0+ZGV2X2FkZHJbM10gPSAodTgpKG1hY19sb3czMiA+PiAyNCk7CisJZGV2LT5kZXZfYWRkcls0XSA9ICh1OCkobWFjX2hpZ2gxNik7CisJZGV2LT5kZXZfYWRkcls1XSA9ICh1OCkobWFjX2hpZ2gxNiA+PiA4KTsKK30KKwogLyogSW5pdGlhbGl6aW5nIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZXMsIG9ubHkgY2FsbGVkIGZyb20gcHJvYmUgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IHNtc2M5MTF4X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTE4MzQsNiArMTg3NiwxMiBAQAogCQlTTVNDX1dBUk5JTkcoUFJPQkUsCiAJCQkiVGhpcyBkcml2ZXIgaXMgbm90IGludGVuZGVkIGZvciB0aGlzIGNoaXAgcmV2aXNpb24iKTsKIAorCS8qIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aXRob3V0IGFuIGVlcHJvbSwgd2hlcmUgdGhlIG1hYyBhZGRyZXNzCisJICogaXMgc3RvcmVkIGVsc2V3aGVyZSBhbmQgc2V0IGJ5IHRoZSBib290bG9hZGVyLiAgVGhpcyBzYXZlcyB0aGUKKwkgKiBtYWMgYWRkcmVzcyBiZWZvcmUgcmVzZXR0aW5nIHRoZSBkZXZpY2UgKi8KKwlpZiAocGRhdGEtPmNvbmZpZy5mbGFncyAmIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MpCisJCXNtc2M5MTF4X3JlYWRfbWFjX2FkZHJlc3MoZGV2KTsKKwogCS8qIFJlc2V0IHRoZSBMQU45MTF4ICovCiAJaWYgKHNtc2M5MTF4X3NvZnRfcmVzZXQocGRhdGEpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE4OTIsMTEgKzE5NDAsMTAgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBzbXNjOTExeF9kYXRhICpwZGF0YTsKIAlzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnICpjb25maWcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgKmlycV9yZXM7CiAJdW5zaWduZWQgaW50IGludGNmZyA9IDA7Ci0JaW50IHJlc19zaXplOworCWludCByZXNfc2l6ZSwgaXJxX2ZsYWdzOwogCWludCByZXR2YWw7Ci0JREVDTEFSRV9NQUNfQlVGKG1hYyk7CiAKIAlwcl9pbmZvKCIlczogRHJpdmVyIHZlcnNpb24gJXMuXG4iLCBTTVNDX0NISVBOQU1FLCBTTVNDX0RSVl9WRVJTSU9OKTsKIApAQCAtMTkxOSw2ICsxOTY2LDE0IEBACiAJfQogCXJlc19zaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0OwogCisJaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcnFfcmVzKSB7CisJCXByX3dhcm5pbmcoIiVzOiBDb3VsZCBub3QgYWxsb2NhdGUgaXJxIHJlc291cmNlLlxuIiwKKwkJCVNNU0NfQ0hJUE5BTUUpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIG91dF8wOworCX0KKwogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc19zaXplLCBTTVNDX0NISVBOQU1FKSkgewogCQlyZXR2YWwgPSAtRUJVU1k7CiAJCWdvdG8gb3V0XzA7CkBAIC0xOTM1LDcgKzE5OTAsOCBAQAogCiAJcGRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWRldi0+aXJxID0gaXJxX3Jlcy0+c3RhcnQ7CisJaXJxX2ZsYWdzID0gaXJxX3Jlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKIAlwZGF0YS0+aW9hZGRyID0gaW9yZW1hcF9ub2NhY2hlKHJlcy0+c3RhcnQsIHJlc19zaXplKTsKIAogCS8qIGNvcHkgY29uZmlnIHBhcmFtZXRlcnMgYWNyb3NzIHRvIHBkYXRhICovCkBAIC0xOTY4LDggKzIwMjQsOCBAQAogCXNtc2M5MTF4X3JlZ193cml0ZShwZGF0YSwgSU5UX0VOLCAwKTsKIAlzbXNjOTExeF9yZWdfd3JpdGUocGRhdGEsIElOVF9TVFMsIDB4RkZGRkZGRkYpOwogCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHNtc2M5MTF4X2lycWhhbmRsZXIsIElSUUZfRElTQUJMRUQsCi0JCQkgICAgIGRldi0+bmFtZSwgZGV2KTsKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgc21zYzkxMXhfaXJxaGFuZGxlciwKKwkJCSAgICAgaXJxX2ZsYWdzIHwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCVNNU0NfV0FSTklORyhQUk9CRSwKIAkJCSJVbmFibGUgdG8gY2xhaW0gcmVxdWVzdGVkIGlycTogJWQiLCBkZXYtPmlycSk7CkBAIC0yMDAwLDE5ICsyMDU2LDEyIEBACiAKIAkvKiBDaGVjayBpZiBtYWMgYWRkcmVzcyBoYXMgYmVlbiBzcGVjaWZpZWQgd2hlbiBicmluZ2luZyBpbnRlcmZhY2UgdXAgKi8KIAlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgewotCQlzbXNjOTExeF9zZXRfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOworCQlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwogCQlTTVNDX1RSQUNFKFBST0JFLCAiTUFDIEFkZHJlc3MgaXMgc3BlY2lmaWVkIGJ5IGNvbmZpZ3VyYXRpb24iKTsKIAl9IGVsc2UgewogCQkvKiBUcnkgcmVhZGluZyBtYWMgYWRkcmVzcyBmcm9tIGRldmljZS4gaWYgRUVQUk9NIGlzIHByZXNlbnQKIAkJICogaXQgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBzZXQgKi8KLQkJdTMyIG1hY19oaWdoMTYgPSBzbXNjOTExeF9tYWNfcmVhZChwZGF0YSwgQUREUkgpOwotCQl1MzIgbWFjX2xvdzMyID0gc21zYzkxMXhfbWFjX3JlYWQocGRhdGEsIEFERFJMKTsKLQkJZGV2LT5kZXZfYWRkclswXSA9ICh1OCkobWFjX2xvdzMyKTsKLQkJZGV2LT5kZXZfYWRkclsxXSA9ICh1OCkobWFjX2xvdzMyID4+IDgpOwotCQlkZXYtPmRldl9hZGRyWzJdID0gKHU4KShtYWNfbG93MzIgPj4gMTYpOwotCQlkZXYtPmRldl9hZGRyWzNdID0gKHU4KShtYWNfbG93MzIgPj4gMjQpOwotCQlkZXYtPmRldl9hZGRyWzRdID0gKHU4KShtYWNfaGlnaDE2KTsKLQkJZGV2LT5kZXZfYWRkcls1XSA9ICh1OCkobWFjX2hpZ2gxNiA+PiA4KTsKKwkJc21zYzkxMXhfcmVhZF9tYWNfYWRkcmVzcyhkZXYpOwogCiAJCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7CiAJCQkvKiBlZXByb20gdmFsdWVzIGFyZSB2YWxpZCAgc28gdXNlIHRoZW0gKi8KQEAgLTIwMjEsNyArMjA3MCw3IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBlZXByb20gdmFsdWVzIGFyZSBpbnZhbGlkLCBnZW5lcmF0ZSByYW5kb20gTUFDICovCiAJCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKLQkJCXNtc2M5MTF4X3NldF9tYWNfYWRkcmVzcyhwZGF0YSwgZGV2LT5kZXZfYWRkcik7CisJCQlzbXNjOTExeF9zZXRfaHdfbWFjX2FkZHJlc3MocGRhdGEsIGRldi0+ZGV2X2FkZHIpOwogCQkJU01TQ19UUkFDRShQUk9CRSwKIAkJCQkiTUFDIEFkZHJlc3MgaXMgc2V0IHRvIHJhbmRvbV9ldGhlcl9hZGRyIik7CiAJCX0KQEAgLTIwMjksOCArMjA3OCw3IEBACiAKIAlzcGluX3VubG9ja19pcnEoJnBkYXRhLT5tYWNfbG9jayk7CiAKLQlkZXZfaW5mbygmZGV2LT5kZXYsICJNQUMgQWRkcmVzczogJXNcbiIsCi0JCSBwcmludF9tYWMobWFjLCBkZXYtPmRldl9hZGRyKSk7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiTUFDIEFkZHJlc3M6ICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21zYzkxMXguaCBiL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmgKaW5kZXggMmI3NjY1NC4uYjU3MTZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21zYzkxMXguaAorKysgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5oCkBAIC04MSwxMiArODEsMTkgQEAKIAogI2RlZmluZSBSWF9TVEFUVVNfRklGTwkJCTB4NDAKICNkZWZpbmUgUlhfU1RTX0VTXwkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgUlhfU1RTX0xFTkdUSF9FUlJfCQkweDAwMDAxMDAwCiAjZGVmaW5lIFJYX1NUU19NQ0FTVF8JCQkweDAwMDAwNDAwCisjZGVmaW5lIFJYX1NUU19GUkFNRV9UWVBFXwkJMHgwMDAwMDAyMAorI2RlZmluZSBSWF9TVFNfQ1JDX0VSUl8JCQkweDAwMDAwMDAyCiAKICNkZWZpbmUgUlhfU1RBVFVTX0ZJRk9fUEVFSwkJMHg0NAogCiAjZGVmaW5lIFRYX1NUQVRVU19GSUZPCQkJMHg0OAogI2RlZmluZSBUWF9TVFNfRVNfCQkJMHgwMDAwODAwMAorI2RlZmluZSBUWF9TVFNfTE9TVF9DQVJSSUVSXwkJMHgwMDAwMDgwMAorI2RlZmluZSBUWF9TVFNfTk9fQ0FSUklFUl8JCTB4MDAwMDA0MDAKKyNkZWZpbmUgVFhfU1RTX0xBVEVfQ09MXwkJMHgwMDAwMDIwMAorI2RlZmluZSBUWF9TVFNfRVhDRVNTX0NPTF8JCTB4MDAwMDAxMDAKIAogI2RlZmluZSBUWF9TVEFUVVNfRklGT19QRUVLCQkweDRDCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCmluZGV4IDRlMTVhZTAuLjU5NTlhZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuYwpAQCAtNjcwLDcgKzY3MCw3IEBACiAJCQlzbXNjOTQyMF9wY2lfZmx1c2hfd3JpdGUocGQpOwogCiAJCQlpbnRzX3RvX2NsZWFyIHw9IChETUFDX1NUU19SWF8gfCBETUFDX1NUU19OSVNfKTsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZwZC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZwZC0+bmFwaSk7CiAJCX0KIAogCQlpZiAoaW50c190b19jbGVhcikKQEAgLTgwNyw3ICs4MDcsNyBAQAogCWlmIChwZC0+cnhfY3N1bSkgewogCQl1MTYgaHdfY3N1bSA9IGdldF91bmFsaWduZWRfbGUxNihza2JfdGFpbF9wb2ludGVyKHNrYikgKwogCQkJTkVUX0lQX0FMSUdOICsgcGFja2V0X2xlbmd0aCArIDQpOwotCQlwdXRfdW5hbGlnbmVkX2xlMTYoY3B1X3RvX2xlMTYoaHdfY3N1bSksICZza2ItPmNzdW0pOworCQlwdXRfdW5hbGlnbmVkX2xlMTYoaHdfY3N1bSwgJnNrYi0+Y3N1bSk7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fQ09NUExFVEU7CiAJfQogCkBAIC04OTMsNyArODkzLDcgQEAKIAlzbXNjOTQyMF9wY2lfZmx1c2hfd3JpdGUocGQpOwogCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZSgmcGQtPm5hcGkpOworCQluYXBpX2NvbXBsZXRlKCZwZC0+bmFwaSk7CiAKIAkJLyogcmUtZW5hYmxlIFJYIERNQSBpbnRlcnJ1cHRzICovCiAJCWRtYV9pbnRyX2VuYSA9IHNtc2M5NDIwX3JlZ19yZWFkKHBkLCBETUFDX0lOVFJfRU5BKTsKQEAgLTExNjAsNyArMTE2MCw3IEBACiAJc21zY19pbmZvKFBST0JFLCAiUEhZIGFkZHIgJWQsIHBoeV9pZCAweCUwOFgiLCBwaHlkZXYtPmFkZHIsCiAJCXBoeWRldi0+cGh5X2lkKTsKIAotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwKIAkJJnNtc2M5NDIwX3BoeV9hZGp1c3RfbGluaywgMCwgUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CiAKIAlpZiAoSVNfRVJSKHBoeWRldikpIHsKQEAgLTExNjksNyArMTE2OSw3IEBACiAJfQogCiAJcHJfaW5mbygiJXM6IGF0dGFjaGVkIFBIWSBkcml2ZXIgWyVzXSAobWlpX2J1czpwaHlfYWRkcj0lcywgaXJxPSVkKVxuIiwKLQkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgcGh5ZGV2LT5kZXYuYnVzX2lkLCBwaHlkZXYtPmlycSk7CisJCWRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsIGRldl9uYW1lKCZwaHlkZXYtPmRldiksIHBoeWRldi0+aXJxKTsKIAogCS8qIG1hc2sgd2l0aCBNQUMgc3VwcG9ydGVkIGZlYXR1cmVzICovCiAJcGh5ZGV2LT5zdXBwb3J0ZWQgJj0gKFBIWV9CQVNJQ19GRUFUVVJFUyB8IFNVUFBPUlRFRF9QYXVzZSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKaW5kZXggODhkMmM2Ny4uOTBlNjYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwpAQCAtMTMwMSw3ICsxMzAxLDcgQEAKIAkvKiBpZiBhbGwgcGFja2V0cyBhcmUgaW4gdGhlIHN0YWNrLCBlbmFibGUgaW50ZXJydXB0cyBhbmQgcmV0dXJuIDAgKi8KIAkvKiBpZiBub3QsIHJldHVybiAxICovCiAJaWYgKHBhY2tldHNfZG9uZSA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJc3BpZGVyX25ldF9yeF9pcnFfb24oY2FyZCk7CiAJCWNhcmQtPmlnbm9yZV9yeF9yYW1mdWxsID0gMDsKIAl9CkBAIC0xNTI4LDcgKzE1MjgsNyBAQAogCQkJc3BpZGVyX25ldF9yZWZpbGxfcnhfY2hhaW4oY2FyZCk7CiAJCQlzcGlkZXJfbmV0X2VuYWJsZV9yeGRtYWMoY2FyZCk7CiAJCQljYXJkLT5udW1fcnhfaW50cyArKzsKLQkJCW5ldGlmX3J4X3NjaGVkdWxlKCZjYXJkLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQl9CiAJCXNob3dfZXJyb3IgPSAwOwogCQlicmVhazsKQEAgLTE1NDgsNyArMTU0OCw3IEBACiAJCXNwaWRlcl9uZXRfcmVmaWxsX3J4X2NoYWluKGNhcmQpOwogCQlzcGlkZXJfbmV0X2VuYWJsZV9yeGRtYWMoY2FyZCk7CiAJCWNhcmQtPm51bV9yeF9pbnRzICsrOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQlzaG93X2Vycm9yID0gMDsKIAkJYnJlYWs7CiAKQEAgLTE1NjIsNyArMTU2Miw3IEBACiAJCXNwaWRlcl9uZXRfcmVmaWxsX3J4X2NoYWluKGNhcmQpOwogCQlzcGlkZXJfbmV0X2VuYWJsZV9yeGRtYWMoY2FyZCk7CiAJCWNhcmQtPm51bV9yeF9pbnRzICsrOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQlzaG93X2Vycm9yID0gMDsKIAkJYnJlYWs7CiAKQEAgLTE2NTYsMTEgKzE2NTYsMTEgQEAKIAogCWlmIChzdGF0dXNfcmVnICYgU1BJREVSX05FVF9SWElOVCApIHsKIAkJc3BpZGVyX25ldF9yeF9pcnFfb2ZmKGNhcmQpOwotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCQljYXJkLT5udW1fcnhfaW50cyArKzsKIAl9CiAJaWYgKHN0YXR1c19yZWcgJiBTUElERVJfTkVUX1RYSU5UKQotCQluZXRpZl9yeF9zY2hlZHVsZSgmY2FyZC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJmNhcmQtPm5hcGkpOwogCiAJaWYgKHN0YXR1c19yZWcgJiBTUElERVJfTkVUX0xJTktJTlQpCiAJCXNwaWRlcl9uZXRfbGlua19yZXNldChuZXRkZXYpOwpAQCAtMjI1OSw2ICsyMjU5LDIzIEBACiAJY2FyZC0+c3BpZGVyX3N0YXRzLnR4X3RpbWVvdXRzKys7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3BpZGVyX25ldF9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNwaWRlcl9uZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gc3BpZGVyX25ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBzcGlkZXJfbmV0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBzcGlkZXJfbmV0X3NldF9tdWx0aSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHNwaWRlcl9uZXRfc2V0X21hYywKKwkubmRvX2NoYW5nZV9tdHUJCT0gc3BpZGVyX25ldF9jaGFuZ2VfbXR1LAorCS5uZG9fZG9faW9jdGwJCT0gc3BpZGVyX25ldF9kb19pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gc3BpZGVyX25ldF90eF90aW1lb3V0LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS8qIEhXIFZMQU4gKi8KKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS8qIHBvbGwgY29udHJvbGxlciAqLworCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gc3BpZGVyX25ldF9wb2xsX2NvbnRyb2xsZXIsCisjZW5kaWYgLyogQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgKi8KK307CisKIC8qKgogICogc3BpZGVyX25ldF9zZXR1cF9uZXRkZXZfb3BzIC0gaW5pdGlhbGl6YXRpb24gb2YgbmV0X2RldmljZSBvcGVyYXRpb25zCiAgKiBAbmV0ZGV2OiBuZXRfZGV2aWNlIHN0cnVjdHVyZQpAQCAtMjI2OCwyMSArMjI4NSw4IEBACiBzdGF0aWMgdm9pZAogc3BpZGVyX25ldF9zZXR1cF9uZXRkZXZfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7Ci0JbmV0ZGV2LT5vcGVuID0gJnNwaWRlcl9uZXRfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSAmc3BpZGVyX25ldF9zdG9wOwotCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gJnNwaWRlcl9uZXRfeG1pdDsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzcGlkZXJfbmV0X3NldF9tdWx0aTsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZzcGlkZXJfbmV0X3NldF9tYWM7Ci0JbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gJnNwaWRlcl9uZXRfY2hhbmdlX210dTsKLQluZXRkZXYtPmRvX2lvY3RsID0gJnNwaWRlcl9uZXRfZG9faW9jdGw7Ci0JLyogdHggd2F0Y2hkb2cgKi8KLQluZXRkZXYtPnR4X3RpbWVvdXQgPSAmc3BpZGVyX25ldF90eF90aW1lb3V0OworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZzcGlkZXJfbmV0X29wczsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gU1BJREVSX05FVF9XQVRDSERPR19USU1FT1VUOwotCS8qIEhXIFZMQU4gKi8KLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCS8qIHBvbGwgY29udHJvbGxlciAqLwotCW5ldGRldi0+cG9sbF9jb250cm9sbGVyID0gJnNwaWRlcl9uZXRfcG9sbF9jb250cm9sbGVyOwotI2VuZGlmIC8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCiAJLyogZXRodG9vbCBvcHMgKi8KIAluZXRkZXYtPmV0aHRvb2xfb3BzID0gJnNwaWRlcl9uZXRfZXRodG9vbF9vcHM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCBkYTNhNzZiLi5mY2I5NDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogI2RlZmluZSBGSVJNV0FSRV9UWAkiYWRhcHRlYy9zdGFyZmlyZV90eC5iaW4iCiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KIEtFUk5fSU5GTyAic3RhcmZpcmUuYzp2MS4wMyA3LzI2LzIwMDAgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKIEtFUk5fSU5GTyAiICh1bm9mZmljaWFsIDIuMi8yLjQga2VybmVsIHBvcnQsIHZlcnNpb24gIiBEUlZfVkVSU0lPTiAiLCAiIERSVl9SRUxEQVRFICIpXG4iOwogCkBAIC0xMzQyLDggKzEzNDIsOCBAQAogCQlpZiAoaW50cl9zdGF0dXMgJiAoSW50clJ4RG9uZSB8IEludHJSeEVtcHR5KSkgewogCQkJdTMyIGVuYWJsZTsKIAotCQkJaWYgKGxpa2VseShuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZucC0+bmFwaSkpKSB7Ci0JCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCQkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJm5wLT5uYXBpKSkpIHsKKwkJCQlfX25hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAkJCQllbmFibGUgPSByZWFkbChpb2FkZHIgKyBJbnRyRW5hYmxlKTsKIAkJCQllbmFibGUgJj0gfihJbnRyUnhEb25lIHwgSW50clJ4RW1wdHkpOwogCQkJCXdyaXRlbChlbmFibGUsIGlvYWRkciArIEludHJFbmFibGUpOwpAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKIAkJaW50cl9zdGF0dXMgPSByZWFkbChpb2FkZHIgKyBJbnRyU3RhdHVzKTsKIAl9IHdoaWxlIChpbnRyX3N0YXR1cyAmIChJbnRyUnhEb25lIHwgSW50clJ4RW1wdHkpKTsKIAotCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCW5hcGlfY29tcGxldGUobmFwaSk7CiAJaW50cl9zdGF0dXMgPSByZWFkbChpb2FkZHIgKyBJbnRyRW5hYmxlKTsKIAlpbnRyX3N0YXR1cyB8PSBJbnRyUnhEb25lIHwgSW50clJ4RW1wdHk7CiAJd3JpdGVsKGludHJfc3RhdHVzLCBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYyBiL2RyaXZlcnMvbmV0L3N1bmJtYWMuYwppbmRleCA3ZjY5YzdmLi41MDE3ZDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCkBAIC0xMDc0LDYgKzEwNzQsMTggQEAKIAkuZ2V0X2xpbmsJCT0gYmlnbWFjX2dldF9saW5rLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBiaWdtYWNfb3BzID0geworCS5uZG9fb3BlbgkJPSBiaWdtYWNfb3BlbiwKKwkubmRvX3N0b3AJCT0gYmlnbWFjX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBiaWdtYWNfc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBiaWdtYWNfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gYmlnbWFjX3NldF9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGJpZ21hY190eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGJpZ21hY19ldGhlcl9pbml0KHN0cnVjdCBvZl9kZXZpY2UgKm9wLAogCQkJCSAgICAgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpxZWNfb3ApCiB7CkBAIC0xMTg3LDE2ICsxMTk5LDggQEAKIAlicC0+ZGV2ID0gZGV2OwogCiAJLyogU2V0IGxpbmtzIHRvIG91ciBCaWdNQUMgb3BlbiBhbmQgY2xvc2Ugcm91dGluZXMuICovCi0JZGV2LT5vcGVuID0gJmJpZ21hY19vcGVuOwotCWRldi0+c3RvcCA9ICZiaWdtYWNfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYmlnbWFjX3N0YXJ0X3htaXQ7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZiaWdtYWNfZXRodG9vbF9vcHM7Ci0KLQkvKiBTZXQgbGlua3MgdG8gQmlnTUFDIHN0YXRpc3RpYyBhbmQgbXVsdGktY2FzdCBsb2FkaW5nIGNvZGUuICovCi0JZGV2LT5nZXRfc3RhdHMgPSAmYmlnbWFjX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZiaWdtYWNfc2V0X211bHRpY2FzdDsKLQotCWRldi0+dHhfdGltZW91dCA9ICZiaWdtYWNfdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYmlnbWFjX29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSpIWjsKIAogCS8qIEZpbmlzaCBuZXQgZGV2aWNlIHJlZ2lzdHJhdGlvbi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCmluZGV4IDQzNjk1YjcuLmMzOTliMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwpAQCAtMTA5LDggKzEwOSw5IEBACiAjZW5kaWYKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFCisJIiBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiI7CiAKIE1PRFVMRV9BVVRIT1IoIkRvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlN1bmRhbmNlIEFsdGEgRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5nZW0uYyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCmluZGV4IDBmY2I3NTAuLmMwMjQzNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmdlbS5jCkBAIC05MjEsNyArOTIxLDcgQEAKIAkJZ3AtPnN0YXR1cyA9IHJlYWRsKGdwLT5yZWdzICsgR1JFR19TVEFUKTsKIAl9IHdoaWxlIChncC0+c3RhdHVzICYgR1JFR19TVEFUX05BUEkpOwogCi0JX19uZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwlfX25hcGlfY29tcGxldGUobmFwaSk7CiAJZ2VtX2VuYWJsZV9pbnRzKGdwKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CkBAIC05NDQsNyArOTQ0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZncC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmdwLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmdwLT5uYXBpKSkgewogCQl1MzIgZ2VtX3N0YXR1cyA9IHJlYWRsKGdwLT5yZWdzICsgR1JFR19TVEFUKTsKIAogCQlpZiAoZ2VtX3N0YXR1cyA9PSAwKSB7CkBAIC05NTQsNyArOTU0LDcgQEAKIAkJfQogCQlncC0+c3RhdHVzID0gZ2VtX3N0YXR1czsKIAkJZ2VtX2Rpc2FibGVfaW50cyhncCk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmdwLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZncC0+bmFwaSk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKQEAgLTI5OTgsOCArMjk5OCwxMSBAQAogCS5uZG9fZG9faW9jdGwJCT0gZ2VtX2lvY3RsLAogCS5uZG9fdHhfdGltZW91dAkJPSBnZW1fdHhfdGltZW91dCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gZ2VtX2NoYW5nZV9tdHUsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzICAgID0gZ2VtX3NldF9tYWNfYWRkcmVzcywKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyICAgID0gZ2VtX3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgZ2VtX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtMzE2MSwxMCArMzE2NCw2IEBACiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUgKiBIWjsKIAlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAlkZXYtPmRtYSA9IDA7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBnZW1fc2V0X21hY19hZGRyZXNzOwotI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBnZW1fcG9sbF9jb250cm9sbGVyOwotI2VuZGlmCiAKIAkvKiBTZXQgdGhhdCBub3csIGluIGNhc2UgUE0ga2lja3MgaW4gbm93ICovCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwppbmRleCAxNmM1MjhkLi5hZmM3YjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKQEAgLTEzMTEsNiArMTMxMSwxNyBAQAogCS5nZXRfbGluawkJPSBzcGFyY19sYW5jZV9nZXRfbGluaywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc3BhcmNfbGFuY2Vfb3BzID0geworCS5uZG9fb3BlbgkJPSBsYW5jZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBsYW5jZV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGFuY2Vfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGxhbmNlX3NldF9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0CQk9IGxhbmNlX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgc3BhcmNfbGFuY2VfcHJvYmVfb25lKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAogCQkJCQkgICBzdHJ1Y3Qgb2ZfZGV2aWNlICpsZWRtYSwKIAkJCQkJICAgc3RydWN0IG9mX2RldmljZSAqbGVidWZmZXIpCkBAIC0xNDYyLDEzICsxNDczLDkgQEAKIAogCWxwLT5kZXYgPSBkZXY7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmb3AtPmRldik7Ci0JZGV2LT5vcGVuID0gJmxhbmNlX29wZW47Ci0JZGV2LT5zdG9wID0gJmxhbmNlX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmxhbmNlX3N0YXJ0X3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gJmxhbmNlX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IDUqSFo7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmbGFuY2Vfc2V0X211bHRpY2FzdDsKIAlkZXYtPmV0aHRvb2xfb3BzID0gJnNwYXJjX2xhbmNlX2V0aHRvb2xfb3BzOworCWRldi0+bmV0ZGV2X29wcyA9ICZzcGFyY19sYW5jZV9vcHM7CiAKIAlkZXYtPmlycSA9IG9wLT5pcnFzWzBdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5xZS5jIGIvZHJpdmVycy9uZXQvc3VucWUuYwppbmRleCBmZTBjM2YyLi5jNmVjNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5xZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bnFlLmMKQEAgLTgyOSw2ICs4MjksMTcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBxZWNfb3BzID0geworCS5uZG9fb3BlbgkJPSBxZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBxZV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gcWVfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHFlX3NldF9tdWx0aWNhc3QsCisJLm5kb190eF90aW1lb3V0CQk9IHFlX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgcWVjX2V0aGVyX2luaXQoc3RydWN0IG9mX2RldmljZSAqb3ApCiB7CiAJc3RhdGljIHVuc2lnbmVkIHZlcnNpb25fcHJpbnRlZDsKQEAgLTg5MywxNSArOTA0LDExIEBACiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZvcC0+ZGV2KTsKIAotCWRldi0+b3BlbiA9IHFlX29wZW47Ci0JZGV2LT5zdG9wID0gcWVfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBxZV9zdGFydF94bWl0OwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gcWVfc2V0X211bHRpY2FzdDsKLQlkZXYtPnR4X3RpbWVvdXQgPSBxZV90eF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSA1KkhaOwogCWRldi0+aXJxID0gb3AtPmlycXNbMF07CiAJZGV2LT5kbWEgPSAwOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmcWVfZXRodG9vbF9vcHM7CisJZGV2LT5uZXRkZXZfb3BzID0gJnFlY19vcHM7CiAKIAlyZXMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3Vudm5ldC5jIGIvZHJpdmVycy9uZXQvc3Vudm5ldC5jCmluZGV4IDYxMTIzMGYuLmE4MmZiMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bnZuZXQuYworKysgYi9kcml2ZXJzL25ldC9zdW52bmV0LmMKQEAgLTEwMTIsNiArMTAxMiwxNiBAQAogc3RhdGljIExJU1RfSEVBRCh2bmV0X2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWCh2bmV0X2xpc3RfbXV0ZXgpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHZuZXRfb3BzID0geworCS5uZG9fb3BlbgkJPSB2bmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHZuZXRfY2xvc2UsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSB2bmV0X3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gdm5ldF9zZXRfbWFjX2FkZHIsCisJLm5kb190eF90aW1lb3V0CQk9IHZuZXRfdHhfdGltZW91dCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gdm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdAkJPSB2bmV0X3N0YXJ0X3htaXQsCit9OworCiBzdGF0aWMgc3RydWN0IHZuZXQgKiBfX2RldmluaXQgdm5ldF9uZXcoY29uc3QgdTY0ICpsb2NhbF9tYWMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTEwNDAsMTUgKzEwNTAsOSBAQAogCUlOSVRfTElTVF9IRUFEKCZ2cC0+bGlzdCk7CiAJdnAtPmxvY2FsX21hYyA9ICpsb2NhbF9tYWM7CiAKLQlkZXYtPm9wZW4gPSB2bmV0X29wZW47Ci0JZGV2LT5zdG9wID0gdm5ldF9jbG9zZTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHZuZXRfc2V0X3J4X21vZGU7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSB2bmV0X3NldF9tYWNfYWRkcjsKLQlkZXYtPnR4X3RpbWVvdXQgPSB2bmV0X3R4X3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnZuZXRfb3BzOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmdm5ldF9ldGh0b29sX29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVk5FVF9UWF9USU1FT1VUOwotCWRldi0+Y2hhbmdlX210dSA9IHZuZXRfY2hhbmdlX210dTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHZuZXRfc3RhcnRfeG1pdDsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwppbmRleCBiY2QwZTYwLi5iNTJhMWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90YzM1ODE1LmMKKysrIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCkBAIC03MjUsNyArNzI1LDcgQEAKIAl9CiAKIAkvKiBhdHRhY2ggdGhlIG1hYyB0byB0aGUgcGh5ICovCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBwaHlkZXYtPmRldi5idXNfaWQsCisJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAogCQkJICAgICAmdGNfaGFuZGxlX2xpbmtfY2hhbmdlLCAwLAogCQkJICAgICBscC0+Y2hpcHR5cGUgPT0gVEMzNTgxNV9UWDQ5MzkgPwogCQkJICAgICBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA6IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOwpAQCAtNzM1LDcgKzczNSw3IEBACiAJfQogCXByaW50ayhLRVJOX0lORk8gIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gIgogCQkiKG1paV9idXM6cGh5X2FkZHI9JXMsIGlkPSV4KVxuIiwKLQkJZGV2LT5uYW1lLCBwaHlkZXYtPmRydi0+bmFtZSwgcGh5ZGV2LT5kZXYuYnVzX2lkLAorCQlkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAogCQlwaHlkZXYtPnBoeV9pZCk7CiAKIAkvKiBtYXNrIHdpdGggTUFDIHN1cHBvcnRlZCBmZWF0dXJlcyAqLwpAQCAtMTYwOSw4ICsxNjA5LDggQEAKIAlpZiAoIShkbWFjdGwgJiBETUFfSW50TWFzaykpIHsKIAkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJCXRjX3dyaXRlbChkbWFjdGwgfCBETUFfSW50TWFzaywgJnRyLT5ETUFfQ3RsKTsKLQkJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJmxwLT5uYXBpKSkKLQkJCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmxwLT5uYXBpKTsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmbHAtPm5hcGkpKQorCQkJX19uYXBpX3NjaGVkdWxlKCZscC0+bmFwaSk7CiAJCWVsc2UgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW50ZXJydXB0IHRha2VuIGluIHBvbGxcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKQEAgLTE5MTksNyArMTkxOSw3IEBACiAJc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKIAogCWlmIChyZWNlaXZlZCA8IGJ1ZGdldCkgewotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJLyogZW5hYmxlIGludGVycnVwdHMgKi8KIAkJdGNfd3JpdGVsKHRjX3JlYWRsKCZ0ci0+RE1BX0N0bCkgJiB+RE1BX0ludE1hc2ssICZ0ci0+RE1BX0N0bCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVodXRpLmMgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwppbmRleCBhN2E0ZGM0Li43ZGViZDFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWh1dGkuYworKysgYi9kcml2ZXJzL25ldC90ZWh1dGkuYwpAQCAtNjMsNyArNjMsNiBAQAogICovCiAKICNpbmNsdWRlICJ0ZWh1dGkuaCIKLSNpbmNsdWRlICJ0ZWh1dGlfZncuaCIKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgYmR4X3BjaV90YmxbXSA9IHsKIAl7MHgxRkM5LCAweDMwMDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LApAQCAtMjY1LDggKzI2NCw4IEBACiAJCWJkeF9pc3JfZXh0cmEocHJpdiwgaXNyKTsKIAogCWlmIChpc3IgJiAoSVJfUlhfREVTQ18wIHwgSVJfVFhfRlJFRV8wKSkgewotCQlpZiAobGlrZWx5KG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSkgewotCQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJCWlmIChsaWtlbHkobmFwaV9zY2hlZHVsZV9wcmVwKCZwcml2LT5uYXBpKSkpIHsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CiAJCQlSRVQoSVJRX0hBTkRMRUQpOwogCQl9IGVsc2UgewogCQkJLyogTk9URTogd2UgZ2V0IGhlcmUgaWYgaW50ciBoYXMgc2xpcHBlZCBpbnRvIHdpbmRvdwpAQCAtMzAyLDcgKzMwMSw3IEBACiAJCSAqIGRldmljZSBsb2NrIGFuZCBhbGxvdyB3YWl0aW5nIHRhc2tzIChlZyBybW1vZCkgdG8gYWR2YW5jZSkgKi8KIAkJcHJpdi0+bmFwaV9zdG9wID0gMDsKIAotCQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKIAkJYmR4X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCX0KIAlyZXR1cm4gd29ya19kb25lOwpAQCAtMzE4LDI4ICszMTcsNDEgQEAKIAogc3RhdGljIGludCBiZHhfZndfbG9hZChzdHJ1Y3QgYmR4X3ByaXYgKnByaXYpCiB7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CiAJaW50IG1hc3RlciwgaTsKKwlpbnQgcmM7CiAKIAlFTlRFUjsKIAltYXN0ZXIgPSBSRUFEX1JFRyhwcml2LCByZWdJTklUX1NFTUFQSE9SRSk7CiAJaWYgKCFSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUykgJiYgbWFzdGVyKSB7Ci0JCWJkeF90eF9wdXNoX2Rlc2Nfc2FmZShwcml2LCBzX2Zpcm1Mb2FkLCBzaXplb2Yoc19maXJtTG9hZCkpOworCQlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCAidGVodXRpL2Zpcm13YXJlLmJpbiIsICZwcml2LT5wZGV2LT5kZXYpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDsKKwkJYmR4X3R4X3B1c2hfZGVzY19zYWZlKHByaXYsIChjaGFyICopZnctPmRhdGEsIGZ3LT5zaXplKTsKIAkJbWRlbGF5KDEwMCk7CiAJfQogCWZvciAoaSA9IDA7IGkgPCAyMDA7IGkrKykgewotCQlpZiAoUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TVEFUVVMpKQotCQkJYnJlYWs7CisJCWlmIChSRUFEX1JFRyhwcml2LCByZWdJTklUX1NUQVRVUykpIHsKKwkJCXJjID0gMDsKKwkJCWdvdG8gb3V0OworCQl9CiAJCW1kZWxheSgyKTsKIAl9CisJcmMgPSAtRUlPOworb3V0OgogCWlmIChtYXN0ZXIpCiAJCVdSSVRFX1JFRyhwcml2LCByZWdJTklUX1NFTUFQSE9SRSwgMSk7CisJaWYgKGZ3KQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAotCWlmIChpID09IDIwMCkgeworCWlmIChyYykgewogCQlFUlIoIiVzOiBmaXJtd2FyZSBsb2FkaW5nIGZhaWxlZFxuIiwgcHJpdi0+bmRldi0+bmFtZSk7Ci0JCURCRygiVlBDID0gMHgleCBWSUMgPSAweCV4IElOSVRfU1RBVFVTID0gMHgleCBpPSVkXG4iLAotCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnVlBDKSwKLQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ1ZJQyksIFJFQURfUkVHKHByaXYsIHJlZ0lOSVRfU1RBVFVTKSwgaSk7Ci0JCVJFVCgtRUlPKTsKKwkJaWYgKHJjID09IC1FSU8pCisJCQlEQkcoIlZQQyA9IDB4JXggVklDID0gMHgleCBJTklUX1NUQVRVUyA9IDB4JXggaT0lZFxuIiwKKwkJCSAgICBSRUFEX1JFRyhwcml2LCByZWdWUEMpLAorCQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ1ZJQyksCisJCQkgICAgUkVBRF9SRUcocHJpdiwgcmVnSU5JVF9TVEFUVVMpLCBpKTsKKwkJUkVUKHJjKTsKIAl9IGVsc2UgewogCQlEQkcoIiVzOiBmaXJtd2FyZSBsb2FkaW5nIHN1Y2Nlc3NcbiIsIHByaXYtPm5kZXYtPm5hbWUpOwogCQlSRVQoMCk7CkBAIC02MTcsMTMgKzYyOSw2IEBACiAJUkVUKHJjKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGJkeF9maXJtd2FyZV9lbmRpYW5lc3Modm9pZCkKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzX2Zpcm1Mb2FkKTsgaSsrKQotCQlzX2Zpcm1Mb2FkW2ldID0gQ1BVX0NISVBfU1dBUDMyKHNfZmlybUxvYWRbaV0pOwotfQotCiBzdGF0aWMgaW50IGJkeF9yYW5nZV9jaGVjayhzdHJ1Y3QgYmR4X3ByaXYgKnByaXYsIHUzMiBvZmZzZXQpCiB7CiAJcmV0dXJuIChvZmZzZXQgPiAodTMyKSAoQkRYX1JFR1NfU0laRSAvIHByaXYtPm5pYy0+cG9ydF9udW0pKSA/CkBAIC0yNTAxLDcgKzI1MDYsNiBAQAogc3RhdGljIGludCBfX2luaXQgYmR4X21vZHVsZV9pbml0KHZvaWQpCiB7CiAJRU5URVI7Ci0JYmR4X2Zpcm13YXJlX2VuZGlhbmVzcygpOwogCWluaXRfdHhkX3NpemVzKCk7CiAJcHJpbnRfZHJpdmVyX2lkKCk7CiAJUkVUKHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJkeF9wY2lfZHJpdmVyKSk7CkBAIC0yNTIxLDMgKzI1MjUsNCBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihCRFhfRFJWX0RFU0MpOworTU9EVUxFX0ZJUk1XQVJFKCJ0ZWh1dGkvZmlybXdhcmUuYmluIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGkuaCBiL2RyaXZlcnMvbmV0L3RlaHV0aS5oCmluZGV4IGVmYWY4NGQuLmRlYzY3ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aS5oCisrKyBiL2RyaXZlcnMvbmV0L3RlaHV0aS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogLyogQ29tcGlsZSBUaW1lIFN3aXRjaGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWh1dGlfZncuaCBiL2RyaXZlcnMvbmV0L3RlaHV0aV9mdy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzYwM2E4Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3RlaHV0aV9mdy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA3MTIgKzAsMCBAQAotLyoKLSAqIFRlaHV0aSBOZXR3b3JrcyhSKSBOZXR3b3JrIERyaXZlcgotICogQ29weXJpZ2h0IChDKSAyMDA3IFRlaHV0aSBOZXR3b3JrcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0KLS8qIExvYWRpbmcgRmlybXdhcmUgKi8KLS8qIElOVF9NRU0gVmVyICovCi1zdGF0aWMgdTMyIHNfZmlybUxvYWRbXSA9IHsKLQkweDAwMGYwMDAyLAotCTB4NDA3MTgwMDAsCi0JMHgwMDAwMDAyZCwKLQkweGMwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMSwKLQkweDAwMDAwMDJkLAotCTB4YzA4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAyLAotCTB4MDAwMDAwMmQsCi0JMHhjMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDMsCi0JMHgwMDAwMDAyZCwKLQkweGMxODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNCwKLQkweDAwMDAwMDJkLAotCTB4YzIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA1LAotCTB4MDAwMDAwMmQsCi0JMHhjMjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDYsCi0JMHgwMDAwMDAyZCwKLQkweGMzMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNywKLQkweDAwMDAwMDJkLAotCTB4YzM4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA4LAotCTB4MDAwMDAwMmQsCi0JMHhjNDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDksCi0JMHgwMDAwMDAyZCwKLQkweGM0ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYSwKLQkweDAwMDAwMDJkLAotCTB4YzUwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBiLAotCTB4MDAwMDAwMmQsCi0JMHhjNTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGMsCi0JMHgwMDAwMDAyZCwKLQkweGM2MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZCwKLQkweDAwMDAwMDJkLAotCTB4YzY4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBlLAotCTB4MDAwMDAwMmQsCi0JMHhjNzAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGYsCi0JMHgwMDAwMDAyZCwKLQkweGM3ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMCwKLQkweDAwMDAwMDJkLAotCTB4YzgwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDExLAotCTB4MDAwMDAwMmQsCi0JMHhjODgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTIsCi0JMHgwMDAwMDAyZCwKLQkweGM5MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMywKLQkweDAwMDAwMDJkLAotCTB4Yzk4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE0LAotCTB4MDAwMDAwMmQsCi0JMHhjYTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTUsCi0JMHgwMDAwMDAyZCwKLQkweGNhODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNiwKLQkweDAwMDAwMDJkLAotCTB4Y2IwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE3LAotCTB4MDAwMDAwMmQsCi0JMHhjYjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTgsCi0JMHgwMDAwMDAyZCwKLQkweGNjMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxOSwKLQkweDAwMDAwMDJkLAotCTB4Y2M4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFhLAotCTB4MDAwMDAwMmQsCi0JMHhjZDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWIsCi0JMHgwMDAwMDAyZCwKLQkweGNkODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYywKLQkweDAwMDAwMDJkLAotCTB4Y2UwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFkLAotCTB4MDAwMDAwMmQsCi0JMHhjZTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWUsCi0JMHgwMDAwMDAyZCwKLQkweGNmMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZiwKLQkweDAwMDAwMDJkLAotCTB4Y2Y4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIwLAotCTB4MDAwMDAwMmQsCi0JMHhkMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjEsCi0JMHgwMDAwMDAyZCwKLQkweGQwODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMiwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIzLAotCTB4MDAwMDAwMmQsCi0JMHhkMTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjQsCi0JMHgwMDAwMDAyZCwKLQkweGQyMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNSwKLQkweDAwMDAwMDJkLAotCTB4ZDI4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI2LAotCTB4MDAwMDAwMmQsCi0JMHhkMzAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjcsCi0JMHgwMDAwMDAyZCwKLQkweGQzODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyOCwKLQkweDAwMDAwMDJkLAotCTB4ZDQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI5LAotCTB4MDAwMDAwMmQsCi0JMHhkNDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmEsCi0JMHgwMDAwMDAyZCwKLQkweGQ1MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYiwKLQkweDAwMDAwMDJkLAotCTB4ZDU4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJjLAotCTB4MDAwMDAwMmQsCi0JMHhkNjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmQsCi0JMHgwMDAwMDAyZCwKLQkweGQ2ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZSwKLQkweDAwMDAwMDJkLAotCTB4ZDcwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJmLAotCTB4MDAwMDAwMmQsCi0JMHhkNzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzAsCi0JMHgwMDAwMDAyZCwKLQkweGQ4MDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMSwKLQkweDAwMDAwMDJkLAotCTB4ZDg4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMyLAotCTB4MDAwMDAwMmQsCi0JMHhkOTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzMsCi0JMHgwMDAwMDAyZCwKLQkweGQ5ODAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNCwKLQkweDAwMDAwMDJkLAotCTB4ZGEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM1LAotCTB4MDAwMDAwMmQsCi0JMHhkYTgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzYsCi0JMHgwMDAwMDAyZCwKLQkweGRiMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNywKLQkweDAwMDAwMDJkLAotCTB4ZGI4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM4LAotCTB4MDAwMDAwN2IsCi0JMHhkZDYwODAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzksCi0JMHgwMDAwMDAyZCwKLQkweGRkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYSwKLQkweDAwMDAwMDJkLAotCTB4ZGI4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2MsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NCwKLQkweDAwMDAwMDJkLAotCTB4ZGIwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDgwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjksCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzZDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNzA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzcwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI5MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2IsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YywKLQkweDAwMDAwMDNmLAotCTB4ZGQwNGFhMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2UsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyODA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgzLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMmI4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAxZTQwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4OCwKLQkweDAwMDAwMDNmLAotCTB4ZDc4MDAwODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg5LAotCTB4MDAwMDAwM2YsCi0JMHhkNzk4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGEsCi0JMHgwMDAwMDA1OSwKLQkweGQ3ODAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhjLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZSwKLQkweDAwMDAwMDJkLAotCTB4ZDdkNjAyN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhmLAotCTB4MDAwMDAwMTgsCi0JMHgxN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTAsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkyLAotCTB4MDAwMDAwMmQsCi0JMHhkN2Q4MDBiOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTMsCi0JMHgwMDAwMDAxOCwKLQkweDE3ZWIwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI5MDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk1LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NywKLQkweDAwMDAwMDNmLAotCTB4ZGQwNGFhODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDliLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDllLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjk4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGExLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJhMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDkxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAxOTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhOSwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFhLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDJiMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI2LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMGM4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjcsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiOCwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI5LAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJmLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMGY4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzAsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMyLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyYTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzksCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMzc4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2MsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZCwKLQkweDAwMDAwMDJkLAotCTB4ZDM4MDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNlLAotCTB4MDAwMDAwM2YsCi0JMHhkMjAwMzc4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2YsCi0JMHgwMDAwMDAzZiwKLQkweGQxODAwNDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMCwKLQkweDAwMDAwMDNmLAotCTB4ZDE4NDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ0LAotCTB4MDAwMDAwM2YsCi0JMHhkMTdmZmY4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDUsCi0JMHgwMDAwMDAzZiwKLQkweGQxN2ZmZjgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDgsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkOSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRhLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDA3ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRkLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGUsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZiwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUwLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTEsCi0JMHgwMDAwMDA1OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUzLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAyN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU2LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTcsCi0JMHgwMDAwMDA0NSwKLQkweGRkMDAzMTM5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlOCwKLQkweDAwMDAwMDk0LAotCTB4MDAwYjMxM2IsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU5LAotCTB4MDAwMDAwOTQsCi0JMHgwMDA5MzEzZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWEsCi0JMHgwMDAwMDA5NCwKLQkweDAwMDczMTNmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYiwKLQkweDAwMDAwMDk0LAotCTB4MDAwNTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVjLAotCTB4MDAwMDAwMDksCi0JMHhjMWVkM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWQsCi0JMHgwMDAwMDAzZiwKLQkweGQyMDBiNzgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDI4ODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYyLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDc4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjMsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNCwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY1LAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjYsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNywKLQkweDAwMDAwMDU5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY4LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjksCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmMsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZCwKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxM2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZlLAotCTB4MDAwMDAwMTgsCi0JMHgxZDJkM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmYsCi0JMHgwMDAwMDA0NSwKLQkweGRkMDAzMTNjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMCwKLQkweDAwMDAwMDE4LAotCTB4MWQxMzNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAxLAotCTB4MDAwMDAwNDUsCi0JMHhkZDAwMzEzZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDIsCi0JMHgwMDAwMDAxOCwKLQkweDFkMWIzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDgsCi0JMHgwMDAwMDAwOSwKLQkweGM1MmQzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwOSwKLQkweDAwMDAwMDI5LAotCTB4ZDIwMTAwNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGUsCi0JMHgwMDAwMDAwOSwKLQkweGMyMjkzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZiwKLQkweDAwMDAwMDI5LAotCTB4ZDIwMDAwNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTQsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNSwKLQkweDAwMDAwMDU5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE2LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTcsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExOCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE5LAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDI3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWEsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYiwKLQkweDAwMDAwMDQ1LAotCTB4ZGQwMDMxM2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFjLAotCTB4MDAwMDAwMTgsCi0JMHgxZDBmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIyLAotCTB4MDAwMDAwMDksCi0JMHhjNTJkM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjMsCi0JMHgwMDAwMDAyZCwKLQkweGQxMDgwMDgyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNCwKLQkweDAwMDAwMDA4LAotCTB4MjNjMzNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI1LAotCTB4MDAwMDAwNDksCi0JMHhkNjAwM2IwYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjYsCi0JMHgwMDAwMDAzZiwKLQkweGQzMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNywKLQkweDAwMDAwMDNmLAotCTB4ZDMwNDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI4LAotCTB4MDAwMDAwMmYsCi0JMHhkNjgxNDA4NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjksCi0JMHgwMDAwMDAzZiwKLQkweGQ0ZmZmZjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYSwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MDA3ODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJiLAotCTB4MDAwMDAwM2YsCi0JMHhkMWZmZmY4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmMsCi0JMHgwMDAwMDAzZiwKLQkweGQxODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZCwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDM2NjYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNiwKLQkweDAwMDAwMDYxLAotCTB4ZjYwMDA0NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM3LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzgsCi0JMHgwMDAwMDAxOCwKLQkweDNkNmIwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzOSwKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDA1OGIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNhLAotCTB4MDAwMDAwMmYsCi0JMHhkNjgxMDEwNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2IsCi0JMHgwMDAwMDAyZCwKLQkweGQyMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYywKLQkweDAwMDAwMDIxLAotCTB4ZDIwMDAwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNkLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2UsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZiwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQwLAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDEsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MiwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQzLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDQsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NSwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ2LAotCTB4MDAwMDAwNDksCi0JMHhkMTdhMzNlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDcsCi0JMHgwMDAwMDAyZiwKLQkweGQxNzEwMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0OCwKLQkweDAwMDAwMDJmLAotCTB4ZDE2MTAxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ5LAotCTB4MDAwMDAwNDksCi0JMHhkMTQwMzNlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRjLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGQsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRmLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTAsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTMsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NCwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU1LAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTYsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NywKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU4LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTksCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YSwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTViLAotCTB4MDAwMDAwMmQsCi0JMHhkMTZjMDdlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWMsCi0JMHgwMDAwMDA0OSwKLQkweGQxNDAzM2UzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVlLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWYsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MCwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYxLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MywKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY0LAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjUsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY3LAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjgsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2OSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZhLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YywKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZkLAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmUsCi0JMHgwMDAwMDA0OSwKLQkweGQxNzgzM2U0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZiwKLQkweDAwMDAwMDJmLAotCTB4ZDE3MTAxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcwLAotCTB4MDAwMDAwMmYsCi0JMHhkMTYxMDE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzEsCi0JMHgwMDAwMDA0OSwKLQkweGQxNDAzM2UzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTczLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDE3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzQsCi0JMHgwMDAwMDAxOCwKLQkweDFkN2YzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NSwKLQkweDAwMDAwMDQ5LAotCTB4ZDgwMDM2NmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc2LAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzcsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3OCwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM3ZWYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc5LAotCTB4MDAwMDAwMzEsCi0JMHhkNjAwMDE2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2EsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAxN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdjLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2QsCi0JMHgwMDAwMDA0OSwKLQkweGQ4MDAzNjZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdmLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzNlNywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODAsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzN2VmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MSwKLQkweDAwMDAwMDMxLAotCTB4ZDYwMDAxNmMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgyLAotCTB4MDAwMDAwMmQsCi0JMHhkMTAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODMsCi0JMHgwMDAwMDAyZCwKLQkweGQxNjgwN2U0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NCwKLQkweDAwMDAwMDQ5LAotCTB4ZDE0MDMzZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg1LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODYsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg4LAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODksCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThiLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGMsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZCwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThlLAotCTB4MDAwMDAwMDgsCi0JMHgyMjc5MDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGYsCi0JMHgwMDAwMDA0OSwKLQkweGQ2MDAwNjBjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MCwKLQkweDAwMDAwMDJmLAotCTB4ZDY4MTAxMDYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkxLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgwMDAwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTIsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODAwMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MywKLQkweDAwMDAwMDNmLAotCTB4ZDUwMDAxMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk0LAotCTB4MDAwMDAwM2YsCi0JMHhkNTAwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTUsCi0JMHgwMDAwMDAzZiwKLQkweGQ1ODAwMjAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NiwKLQkweDAwMDAwMDNmLAotCTB4ZDU4MDAyMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk3LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTgsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5OSwKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlhLAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWIsCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzNGU5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YywKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDM1NmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlkLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWUsCi0JMHgwMDAwMDAzMSwKLQkweGQ2MDAwMTZjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZiwKLQkweDAwMDAwMDQxLAotCTB4ZDQ4MDM0ZWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEwLAotCTB4MDAwMDAwNDEsCi0JMHhkNTAwMzU2YiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTEsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMiwKLQkweDAwMDAwMDE4LAotCTB4MzdlYjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEzLAotCTB4MDAwMDAwNDksCi0JMHhkNjAwM2IwZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTQsCi0JMHgwMDAwMDA0OSwKLQkweGQ2ODAzYjA3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNSwKLQkweDAwMDAwMDJkLAotCTB4ZDEwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE2LAotCTB4MDAwMDAwNDksCi0JMHhkZDAwMzY2NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhOCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFmLAotCTB4MDAwMDAwNjEsCi0JMHhmNjAwMDQ2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjAsCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMSwKLQkweDAwMDAwMDE4LAotCTB4MzdlYjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIyLAotCTB4MDAwMDAwNDksCi0JMHhkNjAwM2IwZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjMsCi0JMHgwMDAwMDA0OSwKLQkweGQ2ODAzYjA4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNCwKLQkweDAwMDAwMDQ5LAotCTB4ZDU4MDNiMDksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI1LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjYsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDYwMTdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNywKLQkweDAwMDAwMDE4LAotCTB4MWQ3ZjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI4LAotCTB4MDAwMDAwNDksCi0JMHhkODAwMzY2YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjksCi0JMHgwMDAwMDA2OSwKLQkweGQ4MDAzNWViLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYSwKLQkweDAwMDAwMDY5LAotCTB4ZDgwMDMzZTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJiLAotCTB4MDAwMDAwNjksCi0JMHhkODAwMzdlZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmMsCi0JMHgwMDAwMDA0MSwKLQkweGQ2MDAwN2VjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZCwKLQkweDAwMDAwMDQxLAotCTB4ZDU4MDA4NmIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJlLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmYsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZWQwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMCwKLQkweDAwMDAwMDNmLAotCTB4ZDRmZmZmODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMxLAotCTB4MDAwMDAwM2YsCi0JMHhkNTAyMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzIsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMywKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNiwKLQkweDAwMDAwMDIxLAotCTB4ZDUwMDAwZWEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM3LAotCTB4MDAwMDAwNDksCi0JMHhkZDBlM2I2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzgsCi0JMHgwMDAwMDAzNSwKLQkweGQxMDQwMDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjOSwKLQkweDAwMDAwMDE4LAotCTB4MzdmNTAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNhLAotCTB4MDAwMDAwM2YsCi0JMHhkNGZmZmY4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2IsCi0JMHgwMDAwMDAzZiwKLQkweGQ1MDQwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYywKLQkweDAwMDAwMDNmLAotCTB4ZDUxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2UsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjY5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQwLAotCTB4MDAwMDAwNTEsCi0JMHhmNTAwMDBlYSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQzLAotCTB4MDAwMDAwNDksCi0JMHhkZDBlM2I2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDQsCi0JMHgwMDAwMDAzNSwKLQkweGQxMDQ4MDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNSwKLQkweDAwMDAwMDE4LAotCTB4MzdmNTAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ2LAotCTB4MDAwMDAwM2YsCi0JMHhjNzdmN2YwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDcsCi0JMHgwMDAwMDAzZiwKLQkweGM3N2Y3ZjAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkOCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDQwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ5LAotCTB4MDAwMDAwM2YsCi0JMHhkMTAzYzAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGEsCi0JMHgwMDAwMDAyNSwKLQkweGRlMjAwMGUyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYiwKLQkweDAwMDAwMDQ5LAotCTB4ZGU4MDI3NGUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRjLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZSwKLQkweDAwMDAwMDM1LAotCTB4ZDEwMDAwZTIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRmLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTAsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZjUwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDMwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAxZDNhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU1LAotCTB4MDAwMDAwN2QsCi0JMHhjNzYwYTcxMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTYsCi0JMHgwMDAwMDAzMSwKLQkweGMwODAwMDQxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNywKLQkweDAwMDAwMDMxLAotCTB4YzQwMDAwNDgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU4LAotCTB4MDAwMDAwMzEsCi0JMHhjMjgwMDA0NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY0LAotCTB4MDAwMDAwMmQsCi0JMHhkYjAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAzMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmOSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZhLAotCTB4MDAwMDAwMmQsCi0JMHhkMzgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZkLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGExNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZiwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDMzOTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDQ4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGE5NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDcsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwOCwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDMzOTUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDU4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwNjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBmLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjEyLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBiMTYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE4LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAxODAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDExMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTYwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyOSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTIwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDEyODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMwLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzEsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxMzA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM2LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzOCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM5LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTM4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2EsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNjLAotCTB4MDAwMDAwM2YsCi0JMHhkZDA1MDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2QsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDAsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMDg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDE5MDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjEwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDksCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRiLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDA4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRlLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUxLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTIsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAyMjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MywKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU0LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMjg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU3LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMjI4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1OSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YywKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDIzMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWUsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxODA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGI5NywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NSwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDMzOTcsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY2LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTg4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjcsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2OCwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY5LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxOTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZjLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGMxOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZSwKLQkweDAwMDAwMDQ5LAotCTB4ZDEwNDMzOTgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMTk4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzAsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcyLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzMsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxYTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc1LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzYsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc4LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzksCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBiMTYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2MsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAxYzA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZCwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdlLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwMGM5OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2YsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFjODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgxLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAwZDFhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg0LAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWQwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBkOWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg3LAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODgsCi0JMHgwMDAwMDA0OSwKLQkweGQxMDQzMzliLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDFkODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhhLAotCTB4MDAwMDAwM2YsCi0JMHhkZDE4MDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGIsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzMTYyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YywKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhkLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMWUwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGUsCi0JMHgwMDAwMDAzZiwKLQkweGRkMTgwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZiwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDBlMWMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkwLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTQsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwZjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk2LAotCTB4MDAwMDAwN2QsCi0JMHhjNzYwYTcxMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTcsCi0JMHgwMDAwMDAzMSwKLQkweGMwODAwMDQxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5OCwKLQkweDAwMDAwMDMxLAotCTB4YzQwMDAwNDgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk5LAotCTB4MDAwMDAwMzEsCi0JMHhjMjgwMDA0NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWEsCi0JMHgwMDAwMDAzMSwKLQkweGQ2ODAwMDZkLAotLyogQlJEWF9JTklUX1NEUkFNICovCi0JMHgwMDBmMDAwZiwKLQkweDAwNzAwMDY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwNDAsCi0JMHgwMDAwMDEwMCwKLQkweDAwMDAwNDAwLAotCTB4MDAwMDAwNjQsCi0JMHgwMDAwMDA1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDI0MDAsCi0JMHgwMDAwMjgwMCwKLQkweDAwMDAwNDAwLAotCTB4MDAwMDI4ODAsCi0JMHgwMDAwMDE4MCwKLQkweDAwMDAwMDAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwNTEsCi0JMHgwMDAwMDE3ZCwKLQkweDAwMDAwMDA4LAotCTB4MDAwMDAwNTEsCi0JMHgwMDAwMDA1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDksCi0JMHgwMDAwNTAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0vKiBCUkRYX0lOSVQgKi8KLQkweDAwMGYwMDBmLAotCTB4MDA3MDAxZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDA0MCwKLQkweDAwMDAwMTAwLAotCTB4MDAwMDA0MDAsCi0JMHgwMDAwMDA2NCwKLQkweDAwMDAwMDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMjQwMCwKLQkweDAwMDAyODAwLAotCTB4MDAwMDA0MDAsCi0JMHgwMDAwMjg4MCwKLQkweDAwMDAwMTgwLAotCTB4MDAwMDAwMDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDA1MSwKLQkweDAwMDAwMTdkLAotCTB4MDAwMDAwMDgsCi0JMHgwMDAwMDA1MSwKLQkweDAwMDAwMDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwOSwKLQkweDAwMDA1MDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLS8qIFpFUk9fSU5JVCAqLwotCTB4MDAwZjAwMDIsCi0JMHgwMDcwMDAwMCwKLQkweDAwMDAwMDAxLAotCTB4MDAwMDAwMDAsCi0vKiBaRVJPX0lOSVQgKi8KLQkweDAwMGYwMDAyLAotCTB4MDA3MDAwMDAsCi0JMHgwMDAwMDAwMSwKLQkweDAwMDAwMDAwLAotLyogTG9hZGluZyBvcGVyYXRpb25hbCBGaXJtd2FyZSAqLwotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMCwKLQkweDAwMDAwMDI1LAotCTB4ZGQwZTAwMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDAxLAotCTB4MDAwMDAwMDQsCi0JMHgwMWQxM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDIsCi0JMHgwMDAwMDAyNSwKLQkweGRkMGUwMDgyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwMywKLQkweDAwMDAwMDA0LAotCTB4MDI4OTNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA0LAotCTB4MDAwMDAwMjUsCi0JMHhkZDBlMDEwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDUsCi0JMHgwMDAwMDAwNCwKLQkweDAyODUzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwNiwKLQkweDAwMDAwMDI1LAotCTB4ZGQwZTAxODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDA3LAotCTB4MDAwMDAwMDQsCi0JMHgwM2ZkM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMDgsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDI4LAotCTB4MDAwMDAwNDksCi0JMHhjMDAwM2IwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMjksCi0JMHgwMDAwMDA0OSwKLQkweGMwODAzYjAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyYSwKLQkweDAwMDAwMDQ5LAotCTB4YzEwMDNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJiLAotCTB4MDAwMDAwNDksCi0JMHhjMTgwM2IwNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmMsCi0JMHgwMDAwMDAyOSwKLQkweGRmNjAwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAyZCwKLQkweDAwMDAwMDQ5LAotCTB4ZGY0NDNiN2QsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDJlLAotCTB4MDAwMDAwNzksCi0JMHhmZDYwOTA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMmYsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDMxLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzIsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwMzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODAzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MCwKLQkweDAwMDAwMDNmLAotCTB4ZGYwMDAwMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDYxLAotCTB4MDAwMDAwMmQsCi0JMHhkZGUwMGY4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjIsCi0JMHgwMDAwMDAzZiwKLQkweGRkODAwMjgzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2MywKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDAxODAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY0LAotCTB4MDAwMDAwN2QsCi0JMHhmZDE1MDA4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjUsCi0JMHgwMDAwMDA3YSwKLQkweDEwMjAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2NiwKLQkweDAwMDAwMDdhLAotCTB4MzAyMDdiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDY3LAotCTB4MDAwMDAwMjEsCi0JMHhkMDI0MDA2MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNjgsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDAwMTA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2OSwKLQkweDAwMDAwMDNmLAotCTB4ZGQ0MDAyODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZhLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxYmIwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmIsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzFmYjA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2YywKLQkweDAwMDAwMDc5LAotCTB4ZGQzMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDZkLAotCTB4MDAwMDAwNzksCi0JMHhkZDMxZmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNmUsCi0JMHgwMDAwMDA3OSwKLQkweGZkMjEwMTAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA2ZiwKLQkweDAwMDAwMDdkLAotCTB4ZmQyYjQwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDcwLAotCTB4MDAwMDAwNDAsCi0JMHgzZDAwMzAwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzEsCi0JMHgwMDAwMDA0OCwKLQkweDFkMDAzYjAyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3MiwKLQkweDAwMDAwMDc5LAotCTB4ZGQyMTdiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDczLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0MDU3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzQsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3NSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc2LAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwNzcsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3OCwKLQkweDAwMDAwMDIxLAotCTB4ZTMzNzFmNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDc5LAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2EsCi0JMHgwMDAwMDA3OSwKLQkweGRkMjFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3YiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdjLAotCTB4MDAwMDAwNzksCi0JMHhkZDIxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwN2QsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA3ZSwKLQkweDAwMDAwMDc5LAotCTB4ZGQyMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDdmLAotCTB4MDAwMDAwNzksCi0JMHhmZDYwOTA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODAsCi0JMHgwMDAwMDA3OSwKLQkweGRkMjFmYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4MSwKLQkweDAwMDAwMDNmLAotCTB4ZGYwMDAwODMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDgyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MDlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwOWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODA5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEwLAotCTB4MDAwMDAwMmQsCi0JMHhkMDA4MDgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTEsCi0JMHgwMDAwMDAwOCwKLQkweDIxYjVmYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhMiwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMTAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGEzLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxODEwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTQsCi0JMHgwMDAwMDA3ZCwKLQkweGZkMDE4MDgzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhNSwKLQkweDAwMDAwMDc5LAotCTB4ZDA5MDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE2LAotCTB4MDAwMDAwNDksCi0JMHhkMDU4M2I3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYTcsCi0JMHgwMDAwMDA0OSwKLQkweGQyMDQzYjAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhOCwKLQkweDAwMDAwMDNkLAotCTB4ZGQ0MDAwMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGE5LAotCTB4MDAwMDAwMjQsCi0JMHgzMjAwMDI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWEsCi0JMHgwMDAwMDAzZCwKLQkweGRkN2ZmODAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhYiwKLQkweDAwMDAwMDI5LAotCTB4ZDAyMDAxN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFjLAotCTB4MDAwMDAwNDksCi0JMHhkMGE0M2IwZSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYWQsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQ0MmZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBhZSwKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGFmLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA2MDA4MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjAsCi0JMHgwMDAwMDAzOCwKLQkweDMwMDAwMWUwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiMSwKLQkweDAwMDAwMDM5LAotCTB4ZDAwMDAxNjAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGIyLAotCTB4MDAwMDAwNzksCi0JMHhkMWIxM2I3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjMsCi0JMHgwMDAwMDAyZCwKLQkweGRkZTAwZmUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNCwKLQkweDAwMDAwMDQ5LAotCTB4ZDA4MDMwZTQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI1LAotCTB4MDAwMDAwNzksCi0JMHhkZDMxN2I3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjYsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzEzYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiNywKLQkweDAwMDAwMDdkLAotCTB4ZmQzNzQwODIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGI4LAotCTB4MDAwMDAwMDgsCi0JMHgwMTdkM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYjksCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiYSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJiLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwMDM4NywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmMsCi0JMHgwMDAwMDA3OSwKLQkweGRkMzEwNDA4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBiZCwKLQkweDAwMDAwMDc5LAotCTB4ZGQzMTdkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGJlLAotCTB4MDAwMDAwNDksCi0JMHhkMzAwM2I3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYmYsCi0JMHgwMDAwMDA3OSwKLQkweGQzODFiYjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMCwKLQkweDAwMDAwMDdmLAotCTB4ZDEwMWIyN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGMxLAotCTB4MDAwMDAwNDgsCi0JMHg1MTAwMzI2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzIsCi0JMHgwMDAwMDAzZCwKLQkweGRkNDAwMDAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjMywKLQkweDAwMDAwMDA4LAotCTB4MDE5NTMxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM0LAotCTB4MDAwMDAwMjEsCi0JMHhkMzAwMDY2NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzUsCi0JMHgwMDAwMDAyMCwKLQkweDUzODAwMGU3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjNiwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDA4MDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGM3LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYjM2NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwYzgsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiM2U3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjOSwKLQkweDAwMDAwMDc1LAotCTB4ZjEwMTg2NjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNhLAotCTB4MDAwMDAwNzUsCi0JMHhkMjAxYjE2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2IsCi0JMHgwMDAwMDA3OCwKLQkweDFkMDA3Yjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjYywKLQkweDAwMDAwMDI1LAotCTB4ZGQwMDAxZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGNkLAotCTB4MDAwMDAwMDgsCi0JMHgwMWIxMzE2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwY2UsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBjZiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQwLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDEsCi0JMHgwMDAwMDAyMSwKLQkweGUzMzc5ZjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkMiwKLQkweDAwMDAwMDQ5LAotCTB4ZDMwMDNiN2MsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQzLAotCTB4MDAwMDAwNzksCi0JMHhkMzgxYmI3YywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDQsCi0JMHgwMDAwMDA3ZiwKLQkweGQxMDFiMjdjLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkNSwKLQkweDAwMDAwMDQ4LAotCTB4NTEwMDMyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ2LAotCTB4MDAwMDAwNzUsCi0JMHhkMjAxYjE2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZDcsCi0JMHgwMDAwMDA3OCwKLQkweDFkMDA3Yjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkOCwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGQ5LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYzA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGEsCi0JMHgwMDAwMDA3OSwKLQkweGZkNjA5MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkYiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwODA4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRjLAotCTB4MDAwMDAwNzgsCi0JMHgzZDAxYzA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZGQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGU4LAotCTB4MDAwMDAwNDksCi0JMHhkMThlM2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZTksCi0JMHgwMDAwMDAyZiwKLQkweGQxODEwMGUzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlYSwKLQkweDAwMDAwMDNmLAotCTB4ZDE4MDE4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGViLAotCTB4MDAwMDAwNDksCi0JMHhkMTA0M2IwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWMsCi0JMHgwMDAwMDAzZiwKLQkweGRkODAwMjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBlZCwKLQkweDAwMDAwMDQ5LAotCTB4ZDIwNDNiMDIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGVlLAotCTB4MDAwMDAwNDksCi0JMHhkMjg0M2IwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZWYsCi0JMHgwMDAwMDAyNSwKLQkweGRkMDAwMGUyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMCwKLQkweDAwMDAwMDk0LAotCTB4MDAxMzQxNjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGYxLAotCTB4MDAwMDAwOTQsCi0JMHgwMDBiNDM2MiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjIsCi0JMHgwMDAwMDA5NCwKLQkweDAwMTU0OGUyLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmMywKLQkweDAwMDAwMDk0LAotCTB4MDAxYjQ5NjIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY0LAotCTB4MDAwMDAwOTQsCi0JMHgwMDJmNDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjUsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmNiwKLQkweDAwMDAwMDFkLAotCTB4ZmQyYjgwZTUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGY3LAotCTB4MDAwMDAwMzAsCi0JMHgzMTgzODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZjgsCi0JMHgwMDAwMDAzMCwKLQkweDExODI4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmOSwKLQkweDAwMDAwMDFkLAotCTB4ZmQyNTgwZTUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZhLAotCTB4MDAwMDAwMzAsCi0JMHgzMTgzMDA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmIsCi0JMHgwMDAwMDAzMCwKLQkweDExODIwMDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmYywKLQkweDAwMDAwMDJmLAotCTB4ZDE4MTAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MGZkLAotCTB4MDAwMDAwMWQsCi0JMHhmZDA5ODBlNSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgwZmUsCi0JMHgwMDAwMDAzMCwKLQkweDMxODNkMzYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODBmZiwKLQkweDAwMDAwMDMwLAotCTB4MTE4M2QyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAwLAotCTB4MDAwMDAwMmYsCi0JMHhkMTgxMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDEsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwMiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTAzLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDQsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwNSwKLQkweDAwMDAwMDI1LAotCTB4ZDIwMDAyNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA2LAotCTB4MDAwMDAwMTgsCi0JMHg3ZDc3ZmQ3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMDcsCi0JMHgwMDAwMDA0OSwKLQkweGRlMjAzYjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwOCwKLQkweDAwMDAwMDQ5LAotCTB4ZGU4MDNiNzksCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTA5LAotCTB4MDAwMDAwMjEsCi0JMHhkMTgwMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGEsCi0JMHgwMDAwMDAwOSwKLQkweGNmODEzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwYiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDMxZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBjLAotCTB4MDAwMDAwNjksCi0JMHhkZDBlM2I3OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMGQsCi0JMHgwMDAwMDA2MSwKLQkweGRkMDAzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEwZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTBmLAotCTB4MDAwMDAwM2YsCi0JMHhkZDAwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTAsCi0JMHgwMDAwMDAzNSwKLQkweGRkMDAwMGZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExMSwKLQkweDAwMDAwMDE4LAotCTB4M2I3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTEyLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTMsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNCwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE1LAotCTB4MDAwMDAwMjEsCi0JMHhkMTgwMDBlMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTYsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDQzYjc5LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExNywKLQkweDAwMDAwMDYxLAotCTB4ZjE4MDAwZTMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTE4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMTksCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExYSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFiLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWMsCi0JMHgwMDAwMDAyNSwKLQkweGQyMDAwMjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODExZCwKLQkweDAwMDAwMDk4LAotCTB4NjA1ZGJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTFlLAotCTB4MDAwMDAwMDksCi0JMHhjZjgxM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxMzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxM2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODEzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDAsCi0JMHgwMDAwMDA0OSwKLQkweGQ0MDgzYjAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0MSwKLQkweDAwMDAwMDA5LAotCTB4YzI4YjNkN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQyLAotCTB4MDAwMDAwM2YsCi0JMHhkNDAwMDM4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDMsCi0JMHgwMDAwMDAwOSwKLQkweGMyOGIzZDdhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NCwKLQkweDAwMDAwMDQ5LAotCTB4ZDQwZTNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ1LAotCTB4MDAwMDAwM2YsCi0JMHhkNjQyMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDYsCi0JMHgwMDAwMDAyZiwKLQkweGQyODE0MDgwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0NywKLQkweDAwMDAwMDJkLAotCTB4ZDI4NDAzNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTQ4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDA4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNDksCi0JMHgwMDAwMDAzZiwKLQkweGRkMDQwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0YSwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRiLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2ZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGMsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjZkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE0ZCwKLQkweDAwMDAwMDMxLAotCTB4ZDMwM2QyNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTRlLAotCTB4MDAwMDAwNDksCi0JMHhkZTQwM2I2NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNGYsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTUxLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTIsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1MywKLQkweDAwMDAwMDQ5LAotCTB4ZDU4MDNiN2UsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU0LAotCTB4MDAwMDAwMjEsCi0JMHhkZTQwMDBlNiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTUsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1NiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTU3LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNTgsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1OSwKLQkweDAwMDAwMDQ5LAotCTB4ZDUwMDNiN2UsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVhLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQ0MDdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1YywKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTVkLAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNWUsCi0JMHgwMDAwMDA3NSwKLQkweGZkMDE4MGU4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE1ZiwKLQkweDAwMDAwMDk0LAotCTB4MDAxNTQxNjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYwLAotCTB4MDAwMDAwOTQsCi0JMHgwMDI1NDRlOCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjEsCi0JMHgwMDAwMDA5NCwKLQkweDAwMjM0MWU4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2MiwKLQkweDAwMDAwMDk0LAotCTB4MDAxNzQ1NjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTYzLAotCTB4MDAwMDAwOTQsCi0JMHgwMDE1NDI2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjQsCi0JMHgwMDAwMDA5NCwKLQkweDAwMjc0MmU4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2NSwKLQkweDAwMDAwMDk0LAotCTB4MDAyZDQzNjgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY2LAotCTB4MDAwMDAwOTQsCi0JMHgwMDJkNDQ2OCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNjcsCi0JMHgwMDAwMDA5NCwKLQkweDAwMzM0M2U4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2OCwKLQkweDAwMDAwMDA0LAotCTB4MDM5NzNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTY5LAotCTB4MDAwMDAwMGQsCi0JMHhlMzBkYzE2NSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmEsCi0JMHgwMDAwMDAzMCwKLQkweDMyMDMwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2YiwKLQkweDAwMDAwMDMwLAotCTB4MTIwMjAwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZjLAotCTB4MDAwMDAwM2YsCi0JMHhkNDgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNmQsCi0JMHgwMDAwMDAzZiwKLQkweGQxODA4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE2ZSwKLQkweDAwMDAwMDBkLAotCTB4ZTMzZmMxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTZmLAotCTB4MDAwMDAwMzAsCi0JMHgzMjA0NjA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzAsCi0JMHgwMDAwMDAzMCwKLQkweDEyMDQ0MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3MSwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MjgwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTcyLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgwODAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzMsCi0JMHgwMDAwMDAwZCwKLQkweGUzM2ZjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NCwKLQkweDAwMDAwMDMwLAotCTB4MzIwNDIwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc1LAotCTB4MDAwMDAwMzAsCi0JMHgxMjA0MDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzYsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODIwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3NywKLQkweDAwMDAwMDBkLAotCTB4ZTM2M2MxNjUsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTc4LAotCTB4MDAwMDAwMzAsCi0JMHgzMjAzMjA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxNzksCi0JMHgwMDAwMDAzMCwKLQkweDEyMDMwMDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3YSwKLQkweDAwMDAwMDNmLAotCTB4ZDQ4MzAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdiLAotCTB4MDAwMDAwNDksCi0JMHhkMjgwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2MsCi0JMHgwMDAwMDAwZCwKLQkweGUzMGRjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE3ZCwKLQkweDAwMDAwMDMwLAotCTB4MzIwMzgwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTdlLAotCTB4MDAwMDAwMzAsCi0JMHgxMjAyODA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxN2YsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODEwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MCwKLQkweDAwMDAwMDNmLAotCTB4ZDYwMjAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTgxLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgxMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODIsCi0JMHgwMDAwMDAwZCwKLQkweGUzM2ZjMTY1LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4MywKLQkweDAwMDAwMDMwLAotCTB4MzIwNDIwNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg0LAotCTB4MDAwMDAwMzAsCi0JMHgxMjA0MDA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODUsCi0JMHgwMDAwMDAzZiwKLQkweGQ0ODIwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4NiwKLQkweDAwMDAwMDQxLAotCTB4ZDQ4MDM0ZWIsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTg3LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxYmI2YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxODgsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4OSwKLQkweDAwMDAwMDNmLAotCTB4ZDIwMDE4MDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThhLAotCTB4MDAwMDAwM2YsCi0JMHhkMTgxMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGIsCi0JMHgwMDAwMDA3NSwKLQkweGZkMDE4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4YywKLQkweDAwMDAwMDk4LAotCTB4ODA2OTNiNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MThkLAotCTB4MDAwMDAwNTEsCi0JMHhmMjAwMDBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOGUsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE4ZiwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkwLAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTEsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5MiwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNDQwN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTkzLAotCTB4MDAwMDAwMTgsCi0JMHgzZDdmM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTQsCi0JMHgwMDAwMDA0OSwKLQkweGQzYzAzYjM4LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5NSwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk2LAotCTB4MDAwMDAwNTEsCi0JMHhmMjAwMDBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOTcsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMTg0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5OCwKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTk5LAotCTB4MDAwMDAwMzUsCi0JMHhkNjgwMDBlZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWEsCi0JMHgwMDAwMDAxOCwKLQkweDM3ZmYwMDgxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5YiwKLQkweDAwMDAwMDQ5LAotCTB4ZDNhMDNiMzgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTljLAotCTB4MDAwMDAwMTksCi0JMHhkZDYxYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxOWQsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjY3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODE5ZSwKLQkweDAwMDAwMDc1LAotCTB4ZjE4MTgyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MTlmLAotCTB4MDAwMDAwNDEsCi0JMHhkNDgwMzRlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTAsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhMSwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWEyLAotCTB4MDAwMDAwM2YsCi0JMHhkMjAwMTgwMywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTMsCi0JMHgwMDAwMDAzZiwKLQkweGQxODA4MDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNCwKLQkweDAwMDAwMDc1LAotCTB4ZmQwMTgwNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE1LAotCTB4MDAwMDAwOTgsCi0JMHg4MDM3M2I2NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTYsCi0JMHgwMDAwMDA1MSwKLQkweGYyMDAwMGU0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhNywKLQkweDAwMDAwMDNmLAotCTB4ZDY4MDAxODQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWE4LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYTksCi0JMHgwMDAwMDAzNSwKLQkweGQ2ODAwMGVkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhYSwKLQkweDAwMDAwMDE4LAotCTB4MzdmZjAwODEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFiLAotCTB4MDAwMDAwMmQsCi0JMHhkZDA0NDA3ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWMsCi0JMHgwMDAwMDAxOCwKLQkweDNkN2YzYjc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFhZCwKLQkweDAwMDAwMDQ5LAotCTB4ZDM4MDNiMzgsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWFlLAotCTB4MDAwMDAwMTksCi0JMHhkZDZmYmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYWYsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjY3LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMCwKLQkweDAwMDAwMDc1LAotCTB4ZjE4MTgyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWIxLAotCTB4MDAwMDAwNDEsCi0JMHhkNDgwMzRlYiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjIsCi0JMHgwMDAwMDA3OSwKLQkweGRkMDFiYjZhLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiMywKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI0LAotCTB4MDAwMDAwNzUsCi0JMHhmZDAxODA2MywKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjUsCi0JMHgwMDAwMDA5OCwKLQkweDgwMTczYjY0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiNiwKLQkweDAwMDAwMDQ5LAotCTB4ZGU0MDNiNjQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWI3LAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDE4NCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYjgsCi0JMHgwMDAwMDAzZiwKLQkweGQ2ODAwMDAxLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiOSwKLQkweDAwMDAwMDM1LAotCTB4ZDY4MDAwZWQsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJhLAotCTB4MDAwMDAwMTgsCi0JMHgzN2ZmMDA4MSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmIsCi0JMHgwMDAwMDAyZCwKLQkweGRkMDQ0MDdmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiYywKLQkweDAwMDAwMDE4LAotCTB4M2Q3ZjNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWJkLAotCTB4MDAwMDAwMjEsCi0JMHhkMjAwMDBlNCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYmUsCi0JMHgwMDAwMDAxOSwKLQkweGQzZWY3YjdlLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFiZiwKLQkweDAwMDAwMDc1LAotCTB4ZjE4MTgyNjMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMwLAotCTB4MDAwMDAwM2YsCi0JMHhkNjgwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzEsCi0JMHgwMDAwMDAzZiwKLQkweGRkMDQwMDA0LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjMiwKLQkweDAwMDAwMDNmLAotCTB4ZGQxODAwMDEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWMzLAotCTB4MDAwMDAwNjksCi0JMHhkZDAwM2I2ZCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzQsCi0JMHgwMDAwMDA2OSwKLQkweGRkMDAzYjZkLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjNSwKLQkweDAwMDAwMDNmLAotCTB4ZGQwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM2LAotCTB4MDAwMDAwMmQsCi0JMHhkZDU0MDE4MCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxYzcsCi0JMHgwMDAwMDA3OSwKLQkweGYzZTA4MDc2LAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjOCwKLQkweDAwMDAwMDQ5LAotCTB4ZDYwMDM2N2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWM5LAotCTB4MDAwMDAwNzksCi0JMHhkZDAxZmI3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2EsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjYiwKLQkweDAwMDAwMDQ5LAotCTB4ZGQwMDNiMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNjLAotCTB4MDAwMDAwNTksCi0JMHhmZDAwM2I3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxY2QsCi0JMHgwMDAwMDAzZiwKLQkweGRkODAxYzAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFjZSwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWNmLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDAsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkMSwKLQkweDAwMDAwMDJkLAotCTB4ZGQwNjAyN2YsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQyLAotCTB4MDAwMDAwMTgsCi0JMHgxZDdmM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDMsCi0JMHgwMDAwMDAzMSwKLQkweGQ0ODM4ODZiLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNCwKLQkweDAwMDAwMDc5LAotCTB4ZGQwMWJiNmEsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ1LAotCTB4MDAwMDAwNzksCi0JMHhmMTgxOTA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDYsCi0JMHgwMDAwMDA3NSwKLQkweGZkMDE4MDYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkNywKLQkweDAwMDAwMDk4LAotCTB4ODA1M2JiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWQ4LAotCTB4MDAwMDAwMTksCi0JMHhkZDdmN2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZDksCi0JMHgwMDAwMDA3NSwKLQkweGYxODE4MjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgxZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODFmZSwKLQkweDAwMDAwMDNmLAotCTB4ZGQ4MDAyMDMsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MWZmLAotCTB4MDAwMDAwNDksCi0JMHhkMTg0M2IwMiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDAsCi0JMHgwMDAwMDA0OSwKLQkweGRkMDAzYjAzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwMSwKLQkweDAwMDAwMDY5LAotCTB4ZGQwMDNiN2EsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjAyLAotCTB4MDAwMDAwNDksCi0JMHhkZDAwM2I3OSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDMsCi0JMHgwMDAwMDA2NSwKLQkweGYxODAwMjYzLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNCwKLQkweDAwMDAwMDE4LAotCTB4N2Q3ZDNiNzYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA1LAotCTB4MDAwMDAwMDksCi0JMHhjZjgxM2Q3YSwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyMzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODIzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyM2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyNzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyN2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjhmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mjk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODI5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MjllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyOWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJiZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyYzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJjZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyY2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODJmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MmZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgyZmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzAxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzMzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzM2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODMzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzNzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzN2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Mzk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4MzlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzOWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODM5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2EwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2EzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2E5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2FmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2IyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2I4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNiZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2JlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2MxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2M3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzYzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2NkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzY2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2QwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2QzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Q5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2RmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2UyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2U4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2VlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2YxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2Y3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4M2ZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTgzZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODNmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0MzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0M2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQzZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0NzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0N2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0OWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODQ5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NDlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0YzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0Y2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRjZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRkZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRlZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg0ZmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODRmZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NGZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTAyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTA4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUwZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTBlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUxZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUyZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1MzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODUzZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1M2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU0ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU1ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU2ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTcxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTc3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1NzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTdkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1N2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU3ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTgwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTgzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ODcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTg5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU4ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NThmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTkyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTk4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTliLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODU5ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NTllLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1OWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWExLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWE3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWFkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVhZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWIwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWIzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWI5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODViZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWJmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWMyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWM4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1YzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVjZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWNlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1Y2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWQ3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWRkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVkZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWUwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWUzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWU5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWVjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVlZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWVmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWYyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWY4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODVmZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NWZlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg1ZmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjAxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjA3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MDgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjBkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYwZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYxZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYyZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2MzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2M2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODYzZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY0ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY1ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY2ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjcwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjczLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2NzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njc5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2N2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY3ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjdmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjgyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njg4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ODksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY4ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjhlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjkxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Njk3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjlhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NjlkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2OWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODY5ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmEwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmEzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmE5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZhZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmFmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmIyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmI4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YjksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZiZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmJlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YmYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmMxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmM3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2YzgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2IsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmNkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2Y2UsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZjZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmQ5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZkZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmRmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmUyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmViLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZlZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmVlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmYxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmY3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NmZkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg2ZmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODZmZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzAzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MDcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzA5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MGQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcwZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzBmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzEyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzE4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcxZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzFlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzIxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzI3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzJkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODcyZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzMwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczMiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzMzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczNSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3MzcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczOCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzM5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2EsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczYiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3M2QsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODczZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzNmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzQ4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NDksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc0ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzRlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NGYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzUxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzU3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NTgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzVkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NWUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc1ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzYwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzYzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NjcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzY5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZjLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NmQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc2ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzZmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3MSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzcyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3NCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3NywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzc4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3NzksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3YSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2MsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc3ZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzdlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3N2YsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4MCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzgxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4MywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4NiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzg3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3ODgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4OSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4YywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzhkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OGUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc4ZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzkwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5MiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzkzLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5NSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk2LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OTcsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5OCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4Nzk5LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWEsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5YiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzljLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3OWQsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODc5ZSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4NzlmLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhMSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2EyLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhNCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E1LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhNywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2E4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YTksCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhYSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FiLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWMsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdhZCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2FlLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YWYsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2IxLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiMywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I0LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiNiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2I3LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YjgsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiOSwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JhLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmIsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiYywKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2JkLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YmUsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdiZiwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2MwLAotCTB4MDAwMDAwNzksCi0JMHhmZDYwOTA3NiwKLQkweDAwMGYwMDAyLAotCTB4MDA3MTg3YzEsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotCTB4MDAwZjAwMDIsCi0JMHgwMDcxODdjMiwKLQkweDAwMDAwMDNkLAotCTB4Zjc4MDAwNmYsCi0JMHgwMDBmMDAwMiwKLQkweDAwNzE4N2MzLAotCTB4MDAwMDAwM2QsCi0JMHhmNzgwMDA2ZiwKLS8qIEZJTklTSCBJTklUIERlc2NyaXB0b3IgKi8KLQkweDAwMGYwMDAyLAotCTB4ODA3MTg3YzQsCi0JMHgwMDAwMDAzZCwKLQkweGY3ODAwMDZmLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggZGFiZGY1OS4uZjdlZmNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzIEplZmYgR2FyemlrIChqZ2FyemlrQHBvYm94LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNCBTdW4gTWljcm9zeXN0ZW1zIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCiAgKgogICogRmlybXdhcmUgaXM6CiAgKglEZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQgc291cmNlIGNvZGUsCkBAIC02OCw4ICs2OCw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjk3IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkRlY2VtYmVyIDEwLCAyMDA4IgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuOTgiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiRmVicnVhcnkgMjUsIDIwMDkiCiAKICNkZWZpbmUgVEczX0RFRl9NQUNfTU9ERQkwCiAjZGVmaW5lIFRHM19ERUZfUlhfTU9ERQkJMApAQCAtODYwLDcgKzg2MCw3IEBACiAKIHN0YXRpYyBpbnQgdGczX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnAsIGludCBtaWlfaWQsIGludCByZWcpCiB7Ci0Jc3RydWN0IHRnMyAqdHAgPSAoc3RydWN0IHRnMyAqKWJwLT5wcml2OworCXN0cnVjdCB0ZzMgKnRwID0gYnAtPnByaXY7CiAJdTMyIHZhbDsKIAogCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX01ESU9CVVNfUEFVU0VEKQpAQCAtODc0LDcgKzg3NCw3IEBACiAKIHN0YXRpYyBpbnQgdGczX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJwLCBpbnQgbWlpX2lkLCBpbnQgcmVnLCB1MTYgdmFsKQogewotCXN0cnVjdCB0ZzMgKnRwID0gKHN0cnVjdCB0ZzMgKilicC0+cHJpdjsKKwlzdHJ1Y3QgdGczICp0cCA9IGJwLT5wcml2OwogCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTURJT0JVU19QQVVTRUQpCiAJCXJldHVybiAtRUFHQUlOOwpAQCAtMjA1MCw4ICsyMDUwLDYgQEAKIAogc3RhdGljIHZvaWQgdGczX3dyaXRlX3NpZ19wb3N0X3Jlc2V0KHN0cnVjdCB0ZzMgKiwgaW50KTsKIHN0YXRpYyBpbnQgdGczX2hhbHRfY3B1KHN0cnVjdCB0ZzMgKiwgdTMyKTsKLXN0YXRpYyBpbnQgdGczX252cmFtX2xvY2soc3RydWN0IHRnMyAqKTsKLXN0YXRpYyB2b2lkIHRnM19udnJhbV91bmxvY2soc3RydWN0IHRnMyAqKTsKIAogc3RhdGljIHZvaWQgdGczX3Bvd2VyX2Rvd25fcGh5KHN0cnVjdCB0ZzMgKnRwLCBib29sIGRvX2xvd19wb3dlcikKIHsKQEAgLTIxMDgsNiArMjEwNiwxOTQgQEAKIH0KIAogLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KK3N0YXRpYyBpbnQgdGczX252cmFtX2xvY2soc3RydWN0IHRnMyAqdHApCit7CisJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgeworCQlpbnQgaTsKKworCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID09IDApIHsKKwkJCXR3MzIoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9TRVQxKTsKKwkJCWZvciAoaSA9IDA7IGkgPCA4MDAwOyBpKyspIHsKKwkJCQlpZiAodHIzMihOVlJBTV9TV0FSQikgJiBTV0FSQl9HTlQxKQorCQkJCQlicmVhazsKKwkJCQl1ZGVsYXkoMjApOworCQkJfQorCQkJaWYgKGkgPT0gODAwMCkgeworCQkJCXR3MzIoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9DTFIxKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KKwkJfQorCQl0cC0+bnZyYW1fbG9ja19jbnQrKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIHRwLT5sb2NrIGlzIGhlbGQuICovCitzdGF0aWMgdm9pZCB0ZzNfbnZyYW1fdW5sb2NrKHN0cnVjdCB0ZzMgKnRwKQoreworCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pIHsKKwkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA+IDApCisJCQl0cC0+bnZyYW1fbG9ja19jbnQtLTsKKwkJaWYgKHRwLT5udnJhbV9sb2NrX2NudCA9PSAwKQorCQkJdHczMl9mKE5WUkFNX1NXQVJCLCBTV0FSQl9SRVFfQ0xSMSk7CisJfQorfQorCisvKiB0cC0+bG9jayBpcyBoZWxkLiAqLworc3RhdGljIHZvaWQgdGczX2VuYWJsZV9udnJhbV9hY2Nlc3Moc3RydWN0IHRnMyAqdHApCit7CisJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3NTBfUExVUykgJiYKKwkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BST1RFQ1RFRF9OVlJBTSkpIHsKKwkJdTMyIG52YWNjZXNzID0gdHIzMihOVlJBTV9BQ0NFU1MpOworCisJCXR3MzIoTlZSQU1fQUNDRVNTLCBudmFjY2VzcyB8IEFDQ0VTU19FTkFCTEUpOworCX0KK30KKworLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KK3N0YXRpYyB2b2lkIHRnM19kaXNhYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgorCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNKSkgeworCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7CisKKwkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzICYgfkFDQ0VTU19FTkFCTEUpOworCX0KK30KKworc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF91c2luZ19lZXByb20oc3RydWN0IHRnMyAqdHAsCisJCQkJCXUzMiBvZmZzZXQsIHUzMiAqdmFsKQoreworCXUzMiB0bXA7CisJaW50IGk7CisKKwlpZiAob2Zmc2V0ID4gRUVQUk9NX0FERFJfQUREUl9NQVNLIHx8IChvZmZzZXQgJSA0KSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRtcCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKSAmIH4oRUVQUk9NX0FERFJfQUREUl9NQVNLIHwKKwkJCQkJRUVQUk9NX0FERFJfREVWSURfTUFTSyB8CisJCQkJCUVFUFJPTV9BRERSX1JFQUQpOworCXR3MzIoR1JDX0VFUFJPTV9BRERSLAorCSAgICAgdG1wIHwKKwkgICAgICgwIDw8IEVFUFJPTV9BRERSX0RFVklEX1NISUZUKSB8CisJICAgICAoKG9mZnNldCA8PCBFRVBST01fQUREUl9BRERSX1NISUZUKSAmCisJICAgICAgRUVQUk9NX0FERFJfQUREUl9NQVNLKSB8CisJICAgICBFRVBST01fQUREUl9SRUFEIHwgRUVQUk9NX0FERFJfU1RBUlQpOworCisJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgeworCQl0bXAgPSB0cjMyKEdSQ19FRVBST01fQUREUik7CisKKwkJaWYgKHRtcCAmIEVFUFJPTV9BRERSX0NPTVBMRVRFKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisJaWYgKCEodG1wICYgRUVQUk9NX0FERFJfQ09NUExFVEUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJKnZhbCA9IHRyMzIoR1JDX0VFUFJPTV9EQVRBKTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBOVlJBTV9DTURfVElNRU9VVCAxMDAwMAorCitzdGF0aWMgaW50IHRnM19udnJhbV9leGVjX2NtZChzdHJ1Y3QgdGczICp0cCwgdTMyIG52cmFtX2NtZCkKK3sKKwlpbnQgaTsKKworCXR3MzIoTlZSQU1fQ01ELCBudnJhbV9jbWQpOworCWZvciAoaSA9IDA7IGkgPCBOVlJBTV9DTURfVElNRU9VVDsgaSsrKSB7CisJCXVkZWxheSgxMCk7CisJCWlmICh0cjMyKE5WUkFNX0NNRCkgJiBOVlJBTV9DTURfRE9ORSkgeworCQkJdWRlbGF5KDEwKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGkgPT0gTlZSQU1fQ01EX1RJTUVPVVQpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiB0ZzNfbnZyYW1fcGh5c19hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCisJICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMpICYmCisJICAgICh0cC0+bnZyYW1famVkZWNudW0gPT0gSkVERUNfQVRNRUwpKQorCisJCWFkZHIgPSAoKGFkZHIgLyB0cC0+bnZyYW1fcGFnZXNpemUpIDw8CisJCQlBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSArCisJCSAgICAgICAoYWRkciAlIHRwLT5udnJhbV9wYWdlc2l6ZSk7CisKKwlyZXR1cm4gYWRkcjsKK30KKworc3RhdGljIHUzMiB0ZzNfbnZyYW1fbG9naWNhbF9hZGRyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgYWRkcikKK3sKKwlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTV9CVUZGRVJFRCkgJiYKKwkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfRkxBU0gpICYmCisJICAgISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX05PX05WUkFNX0FERFJfVFJBTlMpICYmCisJICAgICh0cC0+bnZyYW1famVkZWNudW0gPT0gSkVERUNfQVRNRUwpKQorCisJCWFkZHIgPSAoKGFkZHIgPj4gQVRNRUxfQVQ0NURCMFgxQl9QQUdFX1BPUykgKgorCQkJdHAtPm52cmFtX3BhZ2VzaXplKSArCisJCSAgICAgICAoYWRkciAmICgoMSA8PCBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSAtIDEpKTsKKworCXJldHVybiBhZGRyOworfQorCisvKiBOT1RFOiBEYXRhIHJlYWQgaW4gZnJvbSBOVlJBTSBpcyBieXRlc3dhcHBlZCBhY2NvcmRpbmcgdG8KKyAqIHRoZSBieXRlc3dhcHBpbmcgc2V0dGluZ3MgZm9yIGFsbCBvdGhlciByZWdpc3RlciBhY2Nlc3Nlcy4KKyAqIHRnMyBkZXZpY2VzIGFyZSBCRSBkZXZpY2VzLCBzbyBvbiBhIEJFIG1hY2hpbmUsIHRoZSBkYXRhCisgKiByZXR1cm5lZCB3aWxsIGJlIGV4YWN0bHkgYXMgaXQgaXMgc2VlbiBpbiBOVlJBTS4gIE9uIGEgTEUKKyAqIG1hY2hpbmUsIHRoZSAzMi1iaXQgdmFsdWUgd2lsbCBiZSBieXRlc3dhcHBlZC4KKyAqLworc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZChzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpCit7CisJaW50IHJldDsKKworCWlmICghKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkpCisJCXJldHVybiB0ZzNfbnZyYW1fcmVhZF91c2luZ19lZXByb20odHAsIG9mZnNldCwgdmFsKTsKKworCW9mZnNldCA9IHRnM19udnJhbV9waHlzX2FkZHIodHAsIG9mZnNldCk7CisKKwlpZiAob2Zmc2V0ID4gTlZSQU1fQUREUl9NU0spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gdGczX252cmFtX2xvY2sodHApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl0ZzNfZW5hYmxlX252cmFtX2FjY2Vzcyh0cCk7CisKKwl0dzMyKE5WUkFNX0FERFIsIG9mZnNldCk7CisJcmV0ID0gdGczX252cmFtX2V4ZWNfY21kKHRwLCBOVlJBTV9DTURfUkQgfCBOVlJBTV9DTURfR08gfAorCQlOVlJBTV9DTURfRklSU1QgfCBOVlJBTV9DTURfTEFTVCB8IE5WUkFNX0NNRF9ET05FKTsKKworCWlmIChyZXQgPT0gMCkKKwkJKnZhbCA9IHRyMzIoTlZSQU1fUkREQVRBKTsKKworCXRnM19kaXNhYmxlX252cmFtX2FjY2Vzcyh0cCk7CisKKwl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEVuc3VyZXMgTlZSQU0gZGF0YSBpcyBpbiBieXRlc3RyZWFtIGZvcm1hdC4gKi8KK3N0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfYmUzMihzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgX19iZTMyICp2YWwpCit7CisJdTMyIHY7CisJaW50IHJlcyA9IHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2KTsKKwlpZiAoIXJlcykKKwkJKnZhbCA9IGNwdV90b19iZTMyKHYpOworCXJldHVybiByZXM7Cit9CisKKy8qIHRwLT5sb2NrIGlzIGhlbGQuICovCiBzdGF0aWMgdm9pZCBfX3RnM19zZXRfbWFjX2FkZHIoc3RydWN0IHRnMyAqdHAsIGludCBza2lwX21hY18xKQogewogCXUzMiBhZGRyX2hpZ2gsIGFkZHJfbG93OwpAQCAtNDMzOSw2ICs0NTI1LDEzIEBACiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgdHAtPmRldik7CisKKwkJaWYgKGxlbiA+ICh0cC0+ZGV2LT5tdHUgKyBFVEhfSExFTikgJiYKKwkJICAgIHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlnb3RvIG5leHRfcGt0OworCQl9CisKICNpZiBURzNfVkxBTl9UQUdfVVNFRAogCQlpZiAodHAtPnZsZ3JwICE9IE5VTEwgJiYKIAkJICAgIGRlc2MtPnR5cGVfZmxhZ3MgJiBSWERfRkxBR19WTEFOKSB7CkBAIC00NDYxLDcgKzQ2NTQsNyBAQAogCQkJc2Jsay0+c3RhdHVzICY9IH5TRF9TVEFUVVNfVVBEQVRFRDsKIAogCQlpZiAobGlrZWx5KCF0ZzNfaGFzX3dvcmsodHApKSkgewotCQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJdGczX3Jlc3RhcnRfaW50cyh0cCk7CiAJCQlicmVhazsKIAkJfQpAQCAtNDQ3MSw3ICs0NjY0LDcgQEAKIAogdHhfcmVjb3Zlcnk6CiAJLyogd29ya19kb25lIGlzIGd1YXJhbnRlZWQgdG8gYmUgbGVzcyB0aGFuIGJ1ZGdldC4gKi8KLQluZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKwluYXBpX2NvbXBsZXRlKG5hcGkpOwogCXNjaGVkdWxlX3dvcmsoJnRwLT5yZXNldF90YXNrKTsKIAlyZXR1cm4gd29ya19kb25lOwogfQpAQCAtNDUyMCw3ICs0NzEzLDcgQEAKIAlwcmVmZXRjaCgmdHAtPnJ4X3JjYlt0cC0+cnhfcmNiX3B0cl0pOwogCiAJaWYgKGxpa2VseSghdGczX2lycV9zeW5jKHRwKSkpCi0JCW5ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTQ1NDUsNyArNDczOCw3IEBACiAJICovCiAJdHczMl9tYWlsYm94KE1BSUxCT1hfSU5URVJSVVBUXzAgKyBURzNfNjRCSVRfUkVHX0xPVywgMHgwMDAwMDAwMSk7CiAJaWYgKGxpa2VseSghdGczX2lycV9zeW5jKHRwKSkpCi0JCW5ldGlmX3J4X3NjaGVkdWxlKCZ0cC0+bmFwaSk7CisJCW5hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAogCXJldHVybiBJUlFfUkVUVkFMKDEpOwogfQpAQCAtNDU4Nyw3ICs0NzgwLDcgQEAKIAlzYmxrLT5zdGF0dXMgJj0gflNEX1NUQVRVU19VUERBVEVEOwogCWlmIChsaWtlbHkodGczX2hhc193b3JrKHRwKSkpIHsKIAkJcHJlZmV0Y2goJnRwLT5yeF9yY2JbdHAtPnJ4X3JjYl9wdHJdKTsKLQkJbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCX0gZWxzZSB7CiAJCS8qIE5vIHdvcmssIHNoYXJlZCBpbnRlcnJ1cHQgcGVyaGFwcz8gIHJlLWVuYWJsZQogCQkgKiBpbnRlcnJ1cHRzLCBhbmQgZmx1c2ggdGhhdCBQQ0kgd3JpdGUKQEAgLTQ2MzMsNyArNDgyNiw3IEBACiAJdHczMl9tYWlsYm94X2YoTUFJTEJPWF9JTlRFUlJVUFRfMCArIFRHM182NEJJVF9SRUdfTE9XLCAweDAwMDAwMDAxKTsKIAlpZiAodGczX2lycV9zeW5jKHRwKSkKIAkJZ290byBvdXQ7Ci0JaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkgewogCQlwcmVmZXRjaCgmdHAtPnJ4X3JjYlt0cC0+cnhfcmNiX3B0cl0pOwogCQkvKiBVcGRhdGUgbGFzdF90YWcgdG8gbWFyayB0aGF0IHRoaXMgc3RhdHVzIGhhcyBiZWVuCiAJCSAqIHNlZW4uIEJlY2F1c2UgaW50ZXJydXB0IG1heSBiZSBzaGFyZWQsIHdlIG1heSBiZQpAQCAtNDY0MSw3ICs0ODM0LDcgQEAKIAkJICogaWYgdGczX3BvbGwoKSBpcyBub3Qgc2NoZWR1bGVkLgogCQkgKi8KIAkJdHAtPmxhc3RfdGFnID0gc2Jsay0+c3RhdHVzX3RhZzsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdHAtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAl9CiBvdXQ6CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CkBAIC01NjMxLDYyICs1ODI0LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIGludCB0ZzNfbnZyYW1fbG9jayhzdHJ1Y3QgdGczICp0cCkKLXsKLQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSB7Ci0JCWludCBpOwotCi0JCWlmICh0cC0+bnZyYW1fbG9ja19jbnQgPT0gMCkgewotCQkJdHczMihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX1NFVDEpOwotCQkJZm9yIChpID0gMDsgaSA8IDgwMDA7IGkrKykgewotCQkJCWlmICh0cjMyKE5WUkFNX1NXQVJCKSAmIFNXQVJCX0dOVDEpCi0JCQkJCWJyZWFrOwotCQkJCXVkZWxheSgyMCk7Ci0JCQl9Ci0JCQlpZiAoaSA9PSA4MDAwKSB7Ci0JCQkJdHczMihOVlJBTV9TV0FSQiwgU1dBUkJfUkVRX0NMUjEpOwotCQkJCXJldHVybiAtRU5PREVWOwotCQkJfQotCQl9Ci0JCXRwLT5udnJhbV9sb2NrX2NudCsrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogdHAtPmxvY2sgaXMgaGVsZC4gKi8KLXN0YXRpYyB2b2lkIHRnM19udnJhbV91bmxvY2soc3RydWN0IHRnMyAqdHApCi17Ci0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19OVlJBTSkgewotCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID4gMCkKLQkJCXRwLT5udnJhbV9sb2NrX2NudC0tOwotCQlpZiAodHAtPm52cmFtX2xvY2tfY250ID09IDApCi0JCQl0dzMyX2YoTlZSQU1fU1dBUkIsIFNXQVJCX1JFUV9DTFIxKTsKLQl9Ci19Ci0KLS8qIHRwLT5sb2NrIGlzIGhlbGQuICovCi1zdGF0aWMgdm9pZCB0ZzNfZW5hYmxlX252cmFtX2FjY2VzcyhzdHJ1Y3QgdGczICp0cCkKLXsKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc1MF9QTFVTKSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUFJPVEVDVEVEX05WUkFNKSkgewotCQl1MzIgbnZhY2Nlc3MgPSB0cjMyKE5WUkFNX0FDQ0VTUyk7Ci0KLQkJdHczMihOVlJBTV9BQ0NFU1MsIG52YWNjZXNzIHwgQUNDRVNTX0VOQUJMRSk7Ci0JfQotfQotCi0vKiB0cC0+bG9jayBpcyBoZWxkLiAqLwotc3RhdGljIHZvaWQgdGczX2Rpc2FibGVfbnZyYW1fYWNjZXNzKHN0cnVjdCB0ZzMgKnRwKQotewotCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpICYmCi0JICAgICEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QUk9URUNURURfTlZSQU0pKSB7Ci0JCXUzMiBudmFjY2VzcyA9IHRyMzIoTlZSQU1fQUNDRVNTKTsKLQotCQl0dzMyKE5WUkFNX0FDQ0VTUywgbnZhY2Nlc3MgJiB+QUNDRVNTX0VOQUJMRSk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCB0ZzNfYXBlX3NlbmRfZXZlbnQoc3RydWN0IHRnMyAqdHAsIHUzMiBldmVudCkKIHsKIAlpbnQgaTsKQEAgLTY4MjQsNyArNjk2MSw4IEBACiAJX190ZzNfc2V0X21hY19hZGRyKHRwLCAwKTsKIAogCS8qIE1UVSArIGV0aGVybmV0IGhlYWRlciArIEZDUyArIG9wdGlvbmFsIFZMQU4gdGFnICovCi0JdHczMihNQUNfUlhfTVRVX1NJWkUsIHRwLT5kZXYtPm10dSArIEVUSF9ITEVOICsgOCk7CisJdHczMihNQUNfUlhfTVRVX1NJWkUsCisJICAgICB0cC0+ZGV2LT5tdHUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOICsgVkxBTl9ITEVOKTsKIAogCS8qIFRoZSBzbG90IHRpbWUgaXMgY2hhbmdlZCBieSB0ZzNfc2V0dXBfcGh5IGlmIHdlCiAJICogcnVuIGF0IGdpZ2FiaXQgd2l0aCBoYWxmIGR1cGxleC4KQEAgLTgzODYsMTcgKzg1MjQsMTMgQEAKIAlyZXR1cm4gdHAtPm52cmFtX3NpemU7CiB9CiAKLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWQoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKTsKLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfbGUoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIF9fbGUzMiAqdmFsKTsKLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfc3dhYihzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyICp2YWwpOwotCiBzdGF0aWMgaW50IHRnM19nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSkKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKIAl1OCAgKnBkOwogCXUzMiBpLCBvZmZzZXQsIGxlbiwgYl9vZmZzZXQsIGJfY291bnQ7Ci0JX19sZTMyIHZhbDsKKwlfX2JlMzIgdmFsOwogCiAJaWYgKHRwLT5saW5rX2NvbmZpZy5waHlfaXNfbG93X3Bvd2VyKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTg0MTUsNyArODU0OSw3IEBACiAJCQkvKiBpLmUuIG9mZnNldD0xIGxlbj0yICovCiAJCQliX2NvdW50ID0gbGVuOwogCQl9Ci0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQtYl9vZmZzZXQsICZ2YWwpOworCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBvZmZzZXQtYl9vZmZzZXQsICZ2YWwpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJbWVtY3B5KGRhdGEsICgoY2hhciopJnZhbCkgKyBiX29mZnNldCwgYl9jb3VudCk7CkBAIC04NDI3LDcgKzg1NjEsNyBAQAogCS8qIHJlYWQgYnl0ZXMgdXB0byB0aGUgbGFzdCA0IGJ5dGUgYm91bmRhcnkgKi8KIAlwZCA9ICZkYXRhW2VlcHJvbS0+bGVuXTsKIAlmb3IgKGkgPSAwOyBpIDwgKGxlbiAtIChsZW4gJiAzKSk7IGkgKz0gNCkgewotCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0ICsgaSwgJnZhbCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldCArIGksICZ2YWwpOwogCQlpZiAocmV0KSB7CiAJCQllZXByb20tPmxlbiArPSBpOwogCQkJcmV0dXJuIHJldDsKQEAgLTg0NDEsNyArODU3NSw3IEBACiAJCXBkID0gJmRhdGFbZWVwcm9tLT5sZW5dOwogCQliX2NvdW50ID0gbGVuICYgMzsKIAkJYl9vZmZzZXQgPSBvZmZzZXQgKyBsZW4gLSBiX2NvdW50OwotCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgYl9vZmZzZXQsICZ2YWwpOworCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9iZTMyKHRwLCBiX29mZnNldCwgJnZhbCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQltZW1jcHkocGQsICZ2YWwsIGJfY291bnQpOwpAQCAtODQ1OCw3ICs4NTkyLDcgQEAKIAlpbnQgcmV0OwogCXUzMiBvZmZzZXQsIGxlbiwgYl9vZmZzZXQsIG9kZF9sZW47CiAJdTggKmJ1ZjsKLQlfX2xlMzIgc3RhcnQsIGVuZDsKKwlfX2JlMzIgc3RhcnQsIGVuZDsKIAogCWlmICh0cC0+bGlua19jb25maWcucGh5X2lzX2xvd19wb3dlcikKIAkJcmV0dXJuIC1FQUdBSU47CkBAIC04NDcxLDcgKzg2MDUsNyBAQAogCiAJaWYgKChiX29mZnNldCA9IChvZmZzZXQgJiAzKSkpIHsKIAkJLyogYWRqdXN0bWVudHMgdG8gc3RhcnQgb24gcmVxdWlyZWQgNCBieXRlIGJvdW5kYXJ5ICovCi0JCXJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQtYl9vZmZzZXQsICZzdGFydCk7CisJCXJldCA9IHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldC1iX29mZnNldCwgJnN0YXJ0KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJCWxlbiArPSBiX29mZnNldDsKQEAgLTg0ODUsNyArODYxOSw3IEBACiAJCS8qIGFkanVzdG1lbnRzIHRvIGVuZCBvbiByZXF1aXJlZCA0IGJ5dGUgYm91bmRhcnkgKi8KIAkJb2RkX2xlbiA9IDE7CiAJCWxlbiA9IChsZW4gKyAzKSAmIH4zOwotCQlyZXQgPSB0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0K2xlbi00LCAmZW5kKTsKKwkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0K2xlbi00LCAmZW5kKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtODU0NCw3ICs4Njc4LDcgQEAKIAkJY21kLT5kdXBsZXggPSB0cC0+bGlua19jb25maWcuYWN0aXZlX2R1cGxleDsKIAl9CiAJY21kLT5waHlfYWRkcmVzcyA9IFBIWV9BRERSOwotCWNtZC0+dHJhbnNjZWl2ZXIgPSAwOworCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCWNtZC0+YXV0b25lZyA9IHRwLT5saW5rX2NvbmZpZy5hdXRvbmVnOwogCWNtZC0+bWF4dHhwa3QgPSAwOwogCWNtZC0+bWF4cnhwa3QgPSAwOwpAQCAtODU2MSwyNiArODY5NSw1OCBAQAogCQlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldCh0cC0+bWRpb19idXMtPnBoeV9tYXBbUEhZX0FERFJdLCBjbWQpOwogCX0KIAotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpIHsKLQkJLyogVGhlc2UgYXJlIHRoZSBvbmx5IHZhbGlkIGFkdmVydGlzZW1lbnQgYml0cyBhbGxvd2VkLiAgKi8KLQkJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSAmJgotCQkgICAgKGNtZC0+YWR2ZXJ0aXNpbmcgJiB+KEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAotCQkJCQkgIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAotCQkJCQkgIEFEVkVSVElTRURfQXV0b25lZyB8Ci0JCQkJCSAgQURWRVJUSVNFRF9GSUJSRSkpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCS8qIEZpYmVyIGNhbiBvbmx5IGRvIFNQRUVEXzEwMDAuICAqLwotCQllbHNlIGlmICgoY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRU5BQkxFKSAmJgotCQkJIChjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDApKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JLyogQ29wcGVyIGNhbm5vdCBmb3JjZSBTUEVFRF8xMDAwLiAgKi8KLQl9IGVsc2UgaWYgKChjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpICYmCi0JCSAgIChjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApKQorCWlmIChjbWQtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUgJiYKKwkgICAgY21kLT5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZWxzZSBpZiAoKGNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgJiYKLQkJICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpKQorCisJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0RJU0FCTEUgJiYKKwkgICAgY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwgJiYKKwkgICAgY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQl1MzIgbWFzayA9IEFEVkVSVElTRURfQXV0b25lZyB8CisJCQkgICBBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCSAgIEFEVkVSVElTRURfQXN5bV9QYXVzZTsKKworCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEFHXzEwXzEwMF9PTkxZKSkKKwkJCW1hc2sgfD0gQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkJQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbDsKKworCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0FOWV9TRVJERVMpKQorCQkJbWFzayB8PSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJCUFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCB8CisJCQkJQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAorCQkJCUFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKKwkJCQlBRFZFUlRJU0VEX1RQOworCQllbHNlCisJCQltYXNrIHw9IEFEVkVSVElTRURfRklCUkU7CisKKwkJaWYgKGNtZC0+YWR2ZXJ0aXNpbmcgJiB+bWFzaykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1hc2sgJj0gKEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAorCQkJIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJIEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8CisJCQkgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwpOworCisJCWNtZC0+YWR2ZXJ0aXNpbmcgJj0gbWFzazsKKwl9IGVsc2UgeworCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSB7CisJCQlpZiAoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0ZVTEwpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQlpZiAoY21kLT5zcGVlZCAhPSBTUEVFRF8xMDAgJiYKKwkJCSAgICBjbWQtPnNwZWVkICE9IFNQRUVEXzEwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCiAJdGczX2Z1bGxfbG9jayh0cCwgMCk7CiAKIAl0cC0+bGlua19jb25maWcuYXV0b25lZyA9IGNtZC0+YXV0b25lZzsKQEAgLTkwMjUsMTAgKzkxOTEsMTAgQEAKIHN0YXRpYyBpbnQgdGczX3Rlc3RfbnZyYW0oc3RydWN0IHRnMyAqdHApCiB7CiAJdTMyIGNzdW0sIG1hZ2ljOwotCV9fbGUzMiAqYnVmOworCV9fYmUzMiAqYnVmOwogCWludCBpLCBqLCBrLCBlcnIgPSAwLCBzaXplOwogCi0JaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDAsICZtYWdpYykgIT0gMCkKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDAsICZtYWdpYykgIT0gMCkKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAobWFnaWMgPT0gVEczX0VFUFJPTV9NQUdJQykKQEAgLTkwNjIsMTQgKzkyMjgsMTUgQEAKIAogCWVyciA9IC1FSU87CiAJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBzaXplOyBpICs9IDQsIGorKykgewotCQlpZiAoKGVyciA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBpLCAmYnVmW2pdKSkgIT0gMCkKKwkJZXJyID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgaSwgJmJ1ZltqXSk7CisJCWlmIChlcnIpCiAJCQlicmVhazsKIAl9CiAJaWYgKGkgPCBzaXplKQogCQlnb3RvIG91dDsKIAogCS8qIFNlbGZib290IGZvcm1hdCAqLwotCW1hZ2ljID0gc3dhYjMyKGxlMzJfdG9fY3B1KGJ1ZlswXSkpOworCW1hZ2ljID0gYmUzMl90b19jcHUoYnVmWzBdKTsKIAlpZiAoKG1hZ2ljICYgVEczX0VFUFJPTV9NQUdJQ19GV19NU0spID09CiAJICAgIFRHM19FRVBST01fTUFHSUNfRlcpIHsKIAkJdTggKmJ1ZjggPSAodTggKikgYnVmLCBjc3VtOCA9IDA7CkBAIC05MDk4LDcgKzkyNjUsNyBAQAogCWlmICgobWFnaWMgJiBURzNfRUVQUk9NX01BR0lDX0hXX01TSykgPT0KIAkgICAgVEczX0VFUFJPTV9NQUdJQ19IVykgewogCQl1OCBkYXRhW05WUkFNX1NFTEZCT09UX0RBVEFfU0laRV07Ci0JICAgICAgIAl1OCBwYXJpdHlbTlZSQU1fU0VMRkJPT1RfREFUQV9TSVpFXTsKKwkJdTggcGFyaXR5W05WUkFNX1NFTEZCT09UX0RBVEFfU0laRV07CiAJCXU4ICpidWY4ID0gKHU4ICopIGJ1ZjsKIAogCQkvKiBTZXBhcmF0ZSB0aGUgcGFyaXR5IGJpdHMgYW5kIHRoZSBkYXRhIGJ5dGVzLiAgKi8KQEAgLTkxNDEsMTMgKzkzMDgsMTMgQEAKIAogCS8qIEJvb3RzdHJhcCBjaGVja3N1bSBhdCBvZmZzZXQgMHgxMCAqLwogCWNzdW0gPSBjYWxjX2NyYygodW5zaWduZWQgY2hhciAqKSBidWYsIDB4MTApOwotCWlmKGNzdW0gIT0gbGUzMl90b19jcHUoYnVmWzB4MTAvNF0pKQorCWlmIChjc3VtICE9IGJlMzJfdG9fY3B1KGJ1ZlsweDEwLzRdKSkKIAkJZ290byBvdXQ7CiAKIAkvKiBNYW51ZmFjdHVyaW5nIGJsb2NrIHN0YXJ0cyBhdCBvZmZzZXQgMHg3NCwgY2hlY2tzdW0gYXQgMHhmYyAqLwogCWNzdW0gPSBjYWxjX2NyYygodW5zaWduZWQgY2hhciAqKSAmYnVmWzB4NzQvNF0sIDB4ODgpOwotCWlmIChjc3VtICE9IGxlMzJfdG9fY3B1KGJ1ZlsweGZjLzRdKSkKLQkJIGdvdG8gb3V0OworCWlmIChjc3VtICE9IGJlMzJfdG9fY3B1KGJ1ZlsweGZjLzRdKSkKKwkJZ290byBvdXQ7CiAKIAllcnIgPSAwOwogCkBAIC05ODU2LDggKzEwMDIzLDEyIEBACiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJdGczX25ldGlmX3N0b3AodHApOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXRwLT52bGdycCA9IGdycDsKKwkJcmV0dXJuOworCX0KKworCXRnM19uZXRpZl9zdG9wKHRwKTsKIAogCXRnM19mdWxsX2xvY2sodHAsIDApOwogCkBAIC05ODY2LDggKzEwMDM3LDcgQEAKIAkvKiBVcGRhdGUgUlhfTU9ERV9LRUVQX1ZMQU5fVEFHIGJpdCBpbiBSWF9NT0RFIHJlZ2lzdGVyLiAqLwogCV9fdGczX3NldF9yeF9tb2RlKGRldik7CiAKLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKQotCQl0ZzNfbmV0aWZfc3RhcnQodHApOworCXRnM19uZXRpZl9zdGFydCh0cCk7CiAKIAl0ZzNfZnVsbF91bmxvY2sodHApOwogfQpAQCAtOTk3NCw3ICsxMDE0NCw3IEBACiAKIAl0cC0+bnZyYW1fc2l6ZSA9IEVFUFJPTV9DSElQX1NJWkU7CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJm1hZ2ljKSAhPSAwKQorCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMCwgJm1hZ2ljKSAhPSAwKQogCQlyZXR1cm47CiAKIAlpZiAoKG1hZ2ljICE9IFRHM19FRVBST01fTUFHSUMpICYmCkBAIC05OTkwLDcgKzEwMTYwLDcgQEAKIAljdXJzaXplID0gMHgxMDsKIAogCXdoaWxlIChjdXJzaXplIDwgdHAtPm52cmFtX3NpemUpIHsKLQkJaWYgKHRnM19udnJhbV9yZWFkX3N3YWIodHAsIGN1cnNpemUsICZ2YWwpICE9IDApCisJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgY3Vyc2l6ZSwgJnZhbCkgIT0gMCkKIAkJCXJldHVybjsKIAogCQlpZiAodmFsID09IG1hZ2ljKQpAQCAtMTAwMDYsNyArMTAxNzYsNyBAQAogewogCXUzMiB2YWw7CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJnZhbCkgIT0gMCkKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDAsICZ2YWwpICE9IDApCiAJCXJldHVybjsKIAogCS8qIFNlbGZib290IGZvcm1hdCAqLwpAQCAtMTAwMTcsNyArMTAxODcsMTggQEAKIAogCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgMHhmMCwgJnZhbCkgPT0gMCkgewogCQlpZiAodmFsICE9IDApIHsKLQkJCXRwLT5udnJhbV9zaXplID0gKHZhbCA+PiAxNikgKiAxMDI0OworCQkJLyogVGhpcyBpcyBjb25mdXNpbmcuICBXZSB3YW50IHRvIG9wZXJhdGUgb24gdGhlCisJCQkgKiAxNi1iaXQgdmFsdWUgYXQgb2Zmc2V0IDB4ZjIuICBUaGUgdGczX252cmFtX3JlYWQoKQorCQkJICogY2FsbCB3aWxsIHJlYWQgZnJvbSBOVlJBTSBhbmQgYnl0ZXN3YXAgdGhlIGRhdGEKKwkJCSAqIGFjY29yZGluZyB0byB0aGUgYnl0ZXN3YXBwaW5nIHNldHRpbmdzIGZvciBhbGwKKwkJCSAqIG90aGVyIHJlZ2lzdGVyIGFjY2Vzc2VzLiAgVGhpcyBlbnN1cmVzIHRoZSBkYXRhIHdlCisJCQkgKiB3YW50IHdpbGwgYWx3YXlzIHJlc2lkZSBpbiB0aGUgbG93ZXIgMTYtYml0cy4KKwkJCSAqIEhvd2V2ZXIsIHRoZSBkYXRhIGluIE5WUkFNIGlzIGluIExFIGZvcm1hdCwgd2hpY2gKKwkJCSAqIG1lYW5zIHRoZSBkYXRhIGZyb20gdGhlIE5WUkFNIHJlYWQgd2lsbCBhbHdheXMgYmUKKwkJCSAqIG9wcG9zaXRlIHRoZSBlbmRpYW5uZXNzIG9mIHRoZSBDUFUuICBUaGUgMTYtYml0CisJCQkgKiBieXRlc3dhcCB0aGVuIGJyaW5ncyB0aGUgZGF0YSB0byBDUFUgZW5kaWFubmVzcy4KKwkJCSAqLworCQkJdHAtPm52cmFtX3NpemUgPSBzd2FiMTYoKHUxNikodmFsICYgMHgwMDAwZmZmZikpICogMTAyNDsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTEwNDY4LDE0MSArMTA2NDksNiBAQAogCX0KIH0KIAotc3RhdGljIGludCB0ZzNfbnZyYW1fcmVhZF91c2luZ19lZXByb20oc3RydWN0IHRnMyAqdHAsCi0JCQkJCXUzMiBvZmZzZXQsIHUzMiAqdmFsKQotewotCXUzMiB0bXA7Ci0JaW50IGk7Ci0KLQlpZiAob2Zmc2V0ID4gRUVQUk9NX0FERFJfQUREUl9NQVNLIHx8Ci0JICAgIChvZmZzZXQgJSA0KSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXRtcCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKSAmIH4oRUVQUk9NX0FERFJfQUREUl9NQVNLIHwKLQkJCQkJRUVQUk9NX0FERFJfREVWSURfTUFTSyB8Ci0JCQkJCUVFUFJPTV9BRERSX1JFQUQpOwotCXR3MzIoR1JDX0VFUFJPTV9BRERSLAotCSAgICAgdG1wIHwKLQkgICAgICgwIDw8IEVFUFJPTV9BRERSX0RFVklEX1NISUZUKSB8Ci0JICAgICAoKG9mZnNldCA8PCBFRVBST01fQUREUl9BRERSX1NISUZUKSAmCi0JICAgICAgRUVQUk9NX0FERFJfQUREUl9NQVNLKSB8Ci0JICAgICBFRVBST01fQUREUl9SRUFEIHwgRUVQUk9NX0FERFJfU1RBUlQpOwotCi0JZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgewotCQl0bXAgPSB0cjMyKEdSQ19FRVBST01fQUREUik7Ci0KLQkJaWYgKHRtcCAmIEVFUFJPTV9BRERSX0NPTVBMRVRFKQotCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKLQl9Ci0JaWYgKCEodG1wICYgRUVQUk9NX0FERFJfQ09NUExFVEUpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JKnZhbCA9IHRyMzIoR1JDX0VFUFJPTV9EQVRBKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBOVlJBTV9DTURfVElNRU9VVCAxMDAwMAotCi1zdGF0aWMgaW50IHRnM19udnJhbV9leGVjX2NtZChzdHJ1Y3QgdGczICp0cCwgdTMyIG52cmFtX2NtZCkKLXsKLQlpbnQgaTsKLQotCXR3MzIoTlZSQU1fQ01ELCBudnJhbV9jbWQpOwotCWZvciAoaSA9IDA7IGkgPCBOVlJBTV9DTURfVElNRU9VVDsgaSsrKSB7Ci0JCXVkZWxheSgxMCk7Ci0JCWlmICh0cjMyKE5WUkFNX0NNRCkgJiBOVlJBTV9DTURfRE9ORSkgewotCQkJdWRlbGF5KDEwKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChpID09IE5WUkFNX0NNRF9USU1FT1VUKSB7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTMyIHRnM19udnJhbV9waHlzX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQotewotCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgotCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKLQkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKLQkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCi0KLQkJYWRkciA9ICgoYWRkciAvIHRwLT5udnJhbV9wYWdlc2l6ZSkgPDwKLQkJCUFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpICsKLQkJICAgICAgIChhZGRyICUgdHAtPm52cmFtX3BhZ2VzaXplKTsKLQotCXJldHVybiBhZGRyOwotfQotCi1zdGF0aWMgdTMyIHRnM19udnJhbV9sb2dpY2FsX2FkZHIoc3RydWN0IHRnMyAqdHAsIHUzMiBhZGRyKQotewotCWlmICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNKSAmJgotCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX05WUkFNX0JVRkZFUkVEKSAmJgotCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9GTEFTSCkgJiYKLQkgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfTk9fTlZSQU1fQUREUl9UUkFOUykgJiYKLQkgICAgKHRwLT5udnJhbV9qZWRlY251bSA9PSBKRURFQ19BVE1FTCkpCi0KLQkJYWRkciA9ICgoYWRkciA+PiBBVE1FTF9BVDQ1REIwWDFCX1BBR0VfUE9TKSAqCi0JCQl0cC0+bnZyYW1fcGFnZXNpemUpICsKLQkJICAgICAgIChhZGRyICYgKCgxIDw8IEFUTUVMX0FUNDVEQjBYMUJfUEFHRV9QT1MpIC0gMSkpOwotCi0JcmV0dXJuIGFkZHI7Ci19Ci0KLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWQoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKQotewotCWludCByZXQ7Ci0KLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfTlZSQU0pKQotCQlyZXR1cm4gdGczX252cmFtX3JlYWRfdXNpbmdfZWVwcm9tKHRwLCBvZmZzZXQsIHZhbCk7Ci0KLQlvZmZzZXQgPSB0ZzNfbnZyYW1fcGh5c19hZGRyKHRwLCBvZmZzZXQpOwotCi0JaWYgKG9mZnNldCA+IE5WUkFNX0FERFJfTVNLKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IHRnM19udnJhbV9sb2NrKHRwKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JdGczX2VuYWJsZV9udnJhbV9hY2Nlc3ModHApOwotCi0JdHczMihOVlJBTV9BRERSLCBvZmZzZXQpOwotCXJldCA9IHRnM19udnJhbV9leGVjX2NtZCh0cCwgTlZSQU1fQ01EX1JEIHwgTlZSQU1fQ01EX0dPIHwKLQkJTlZSQU1fQ01EX0ZJUlNUIHwgTlZSQU1fQ01EX0xBU1QgfCBOVlJBTV9DTURfRE9ORSk7Ci0KLQlpZiAocmV0ID09IDApCi0JCSp2YWwgPSBzd2FiMzIodHIzMihOVlJBTV9SRERBVEEpKTsKLQotCXRnM19kaXNhYmxlX252cmFtX2FjY2Vzcyh0cCk7Ci0KLQl0ZzNfbnZyYW1fdW5sb2NrKHRwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdGczX252cmFtX3JlYWRfbGUoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIF9fbGUzMiAqdmFsKQotewotCXUzMiB2OwotCWludCByZXMgPSB0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdik7Ci0JaWYgKCFyZXMpCi0JCSp2YWwgPSBjcHVfdG9fbGUzMih2KTsKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50IHRnM19udnJhbV9yZWFkX3N3YWIoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmZzZXQsIHUzMiAqdmFsKQotewotCWludCBlcnI7Ci0JdTMyIHRtcDsKLQotCWVyciA9IHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ0bXApOwotCSp2YWwgPSBzd2FiMzIodG1wKTsKLQlyZXR1cm4gZXJyOwotfQotCiBzdGF0aWMgaW50IHRnM19udnJhbV93cml0ZV9ibG9ja191c2luZ19lZXByb20oc3RydWN0IHRnMyAqdHAsCiAJCQkJICAgIHUzMiBvZmZzZXQsIHUzMiBsZW4sIHU4ICpidWYpCiB7CkBAIC0xMDYxMSwxMyArMTA2NTcsMTMgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkgewogCQl1MzIgYWRkcjsKLQkJX19sZTMyIGRhdGE7CisJCV9fYmUzMiBkYXRhOwogCiAJCWFkZHIgPSBvZmZzZXQgKyBpOwogCiAJCW1lbWNweSgmZGF0YSwgYnVmICsgaSwgNCk7CiAKLQkJdHczMihHUkNfRUVQUk9NX0RBVEEsIGxlMzJfdG9fY3B1KGRhdGEpKTsKKwkJdHczMihHUkNfRUVQUk9NX0RBVEEsIGJlMzJfdG9fY3B1KGRhdGEpKTsKIAogCQl2YWwgPSB0cjMyKEdSQ19FRVBST01fQUREUik7CiAJCXR3MzIoR1JDX0VFUFJPTV9BRERSLCB2YWwgfCBFRVBST01fQUREUl9DT01QTEVURSk7CkBAIC0xMDY2Nyw4ICsxMDcxMyw5IEBACiAJCXBoeV9hZGRyID0gb2Zmc2V0ICYgfnBhZ2VtYXNrOwogCiAJCWZvciAoaiA9IDA7IGogPCBwYWdlc2l6ZTsgaiArPSA0KSB7Ci0JCQlpZiAoKHJldCA9IHRnM19udnJhbV9yZWFkX2xlKHRwLCBwaHlfYWRkciArIGosCi0JCQkJCQkoX19sZTMyICopICh0bXAgKyBqKSkpKQorCQkJcmV0ID0gdGczX252cmFtX3JlYWRfYmUzMih0cCwgcGh5X2FkZHIgKyBqLAorCQkJCQkJICAoX19iZTMyICopICh0bXAgKyBqKSk7CisJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChyZXQpCkBAIC0xMDcxNSw3ICsxMDc2Miw3IEBACiAJCQlfX2JlMzIgZGF0YTsKIAogCQkJZGF0YSA9ICooKF9fYmUzMiAqKSAodG1wICsgaikpOwotCQkJLyogc3dhYjMyKGxlMzJfdG9fY3B1KGRhdGEpKSwgYWN0dWFsbHkgKi8KKwogCQkJdHczMihOVlJBTV9XUkRBVEEsIGJlMzJfdG9fY3B1KGRhdGEpKTsKIAogCQkJdHczMihOVlJBTV9BRERSLCBwaHlfYWRkciArIGopOwpAQCAtMTEzMDEsMjQgKzExMzQ4LDI1IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9wYXJ0bm8oc3RydWN0IHRnMyAqdHApCiB7Ci0JdW5zaWduZWQgY2hhciB2cGRfZGF0YVsyNTZdOworCXVuc2lnbmVkIGNoYXIgdnBkX2RhdGFbMjU2XTsgICAvKiBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAqLwogCXVuc2lnbmVkIGludCBpOwogCXUzMiBtYWdpYzsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAweDAsICZtYWdpYykpCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAweDAsICZtYWdpYykpCiAJCWdvdG8gb3V0X25vdF9mb3VuZDsKIAogCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKSB7CiAJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkgKz0gNCkgewogCQkJdTMyIHRtcDsKIAotCQkJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAweDEwMCArIGksICZ0bXApKQorCQkJLyogVGhlIGRhdGEgaXMgaW4gbGl0dGxlLWVuZGlhbiBmb3JtYXQgaW4gTlZSQU0uCisJCQkgKiBVc2UgdGhlIGJpZy1lbmRpYW4gcmVhZCByb3V0aW5lcyB0byBwcmVzZXJ2ZQorCQkJICogdGhlIGJ5dGUgb3JkZXIgYXMgaXQgZXhpc3RzIGluIE5WUkFNLgorCQkJICovCisJCQlpZiAodGczX252cmFtX3JlYWRfYmUzMih0cCwgMHgxMDAgKyBpLCAmdG1wKSkKIAkJCQlnb3RvIG91dF9ub3RfZm91bmQ7CiAKLQkJCXZwZF9kYXRhW2kgKyAwXSA9ICgodG1wID4+ICAwKSAmIDB4ZmYpOwotCQkJdnBkX2RhdGFbaSArIDFdID0gKCh0bXAgPj4gIDgpICYgMHhmZik7Ci0JCQl2cGRfZGF0YVtpICsgMl0gPSAoKHRtcCA+PiAxNikgJiAweGZmKTsKLQkJCXZwZF9kYXRhW2kgKyAzXSA9ICgodG1wID4+IDI0KSAmIDB4ZmYpOworCQkJbWVtY3B5KCZ2cGRfZGF0YVtpXSwgJnRtcCwgc2l6ZW9mKHRtcCkpOwogCQl9CiAJfSBlbHNlIHsKIAkJaW50IHZwZF9jYXA7CkBAIC0xMTM0NCw3ICsxMTM5Miw3IEBACiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsIHZwZF9jYXAgKyBQQ0lfVlBEX0RBVEEsCiAJCQkJCSAgICAgICZ0bXApOwogCQkJdiA9IGNwdV90b19sZTMyKHRtcCk7Ci0JCQltZW1jcHkoJnZwZF9kYXRhW2ldLCAmdiwgNCk7CisJCQltZW1jcHkoJnZwZF9kYXRhW2ldLCAmdiwgc2l6ZW9mKHYpKTsKIAkJfQogCX0KIApAQCAtMTE0MDQsMTUgKzExNDUyLDc5IEBACiB7CiAJdTMyIHZhbDsKIAotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQsICZ2YWwpIHx8CisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQsICZ2YWwpIHx8CiAJICAgICh2YWwgJiAweGZjMDAwMDAwKSAhPSAweDBjMDAwMDAwIHx8Ci0JICAgIHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCArIDQsICZ2YWwpIHx8CisJICAgIHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgKyA0LCAmdmFsKSB8fAogCSAgICB2YWwgIT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX2JjX3ZlcihzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgdmFsLCBvZmZzZXQsIHN0YXJ0LCB2ZXJfb2Zmc2V0OworCWludCBpOworCWJvb2wgbmV3dmVyID0gZmFsc2U7CisKKwlpZiAodGczX252cmFtX3JlYWQodHAsIDB4YywgJm9mZnNldCkgfHwKKwkgICAgdGczX252cmFtX3JlYWQodHAsIDB4NCwgJnN0YXJ0KSkKKwkJcmV0dXJuOworCisJb2Zmc2V0ID0gdGczX252cmFtX2xvZ2ljYWxfYWRkcih0cCwgb2Zmc2V0KTsKKworCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0LCAmdmFsKSkKKwkJcmV0dXJuOworCisJaWYgKCh2YWwgJiAweGZjMDAwMDAwKSA9PSAweDBjMDAwMDAwKSB7CisJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgNCwgJnZhbCkpCisJCQlyZXR1cm47CisKKwkJaWYgKHZhbCA9PSAwKQorCQkJbmV3dmVyID0gdHJ1ZTsKKwl9CisKKwlpZiAobmV3dmVyKSB7CisJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgOCwgJnZlcl9vZmZzZXQpKQorCQkJcmV0dXJuOworCisJCW9mZnNldCA9IG9mZnNldCArIHZlcl9vZmZzZXQgLSBzdGFydDsKKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpICs9IDQpIHsKKwkJCV9fYmUzMiB2OworCQkJaWYgKHRnM19udnJhbV9yZWFkX2JlMzIodHAsIG9mZnNldCArIGksICZ2KSkKKwkJCQlyZXR1cm47CisKKwkJCW1lbWNweSh0cC0+ZndfdmVyICsgaSwgJnYsIHNpemVvZih2KSk7CisJCX0KKwl9IGVsc2UgeworCQl1MzIgbWFqb3IsIG1pbm9yOworCisJCWlmICh0ZzNfbnZyYW1fcmVhZCh0cCwgVEczX05WTV9QVFJFVl9CQ1ZFUiwgJnZlcl9vZmZzZXQpKQorCQkJcmV0dXJuOworCisJCW1ham9yID0gKHZlcl9vZmZzZXQgJiBURzNfTlZNX0JDVkVSX01BSk1TSykgPj4KKwkJCVRHM19OVk1fQkNWRVJfTUFKU0ZUOworCQltaW5vciA9IHZlcl9vZmZzZXQgJiBURzNfTlZNX0JDVkVSX01JTk1TSzsKKwkJc25wcmludGYoJnRwLT5md192ZXJbMF0sIDMyLCAidiVkLiUwMmQiLCBtYWpvciwgbWlub3IpOworCX0KK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX2h3c2JfdmVyKHN0cnVjdCB0ZzMgKnRwKQoreworCXUzMiB2YWwsIG1ham9yLCBtaW5vcjsKKworCS8qIFVzZSBuYXRpdmUgZW5kaWFuIHJlcHJlc2VudGF0aW9uICovCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCBURzNfTlZNX0hXU0JfQ0ZHMSwgJnZhbCkpCisJCXJldHVybjsKKworCW1ham9yID0gKHZhbCAmIFRHM19OVk1fSFdTQl9DRkcxX01BSk1TSykgPj4KKwkJVEczX05WTV9IV1NCX0NGRzFfTUFKU0ZUOworCW1pbm9yID0gKHZhbCAmIFRHM19OVk1fSFdTQl9DRkcxX01JTk1TSykgPj4KKwkJVEczX05WTV9IV1NCX0NGRzFfTUlOU0ZUOworCisJc25wcmludGYoJnRwLT5md192ZXJbMF0sIDMyLCAic2IgdiVkLiUwMmQiLCBtYWpvciwgbWlub3IpOworfQorCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfc2JfdmVyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgdmFsKQogewogCXUzMiBvZmZzZXQsIG1ham9yLCBtaW5vciwgYnVpbGQ7CkBAIC0xMTQzOCw3ICsxMTU1MCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0LCAmdmFsKSkKKwlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnZhbCkpCiAJCXJldHVybjsKIAogCWJ1aWxkID0gKHZhbCAmIFRHM19FRVBST01fU0JfRURIX0JMRF9NQVNLKSA+PgpAQCAtMTE0NTgsNDkgKzExNTcwLDE1IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfZndfdmVyKHN0cnVjdCB0ZzMgKnRwKQorc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX21nbXRmd192ZXIoc3RydWN0IHRnMyAqdHApCiB7CiAJdTMyIHZhbCwgb2Zmc2V0LCBzdGFydDsKLQl1MzIgdmVyX29mZnNldDsKLQlpbnQgaSwgYmNudDsKLQotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAwLCAmdmFsKSkKLQkJcmV0dXJuOwotCi0JaWYgKHZhbCAhPSBURzNfRUVQUk9NX01BR0lDKSB7Ci0JCWlmICgodmFsICYgVEczX0VFUFJPTV9NQUdJQ19GV19NU0spID09IFRHM19FRVBST01fTUFHSUNfRlcpCi0JCQl0ZzNfcmVhZF9zYl92ZXIodHAsIHZhbCk7Ci0KLQkJcmV0dXJuOwotCX0KLQotCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCAweGMsICZvZmZzZXQpIHx8Ci0JICAgIHRnM19udnJhbV9yZWFkX3N3YWIodHAsIDB4NCwgJnN0YXJ0KSkKLQkJcmV0dXJuOwotCi0Jb2Zmc2V0ID0gdGczX252cmFtX2xvZ2ljYWxfYWRkcih0cCwgb2Zmc2V0KTsKLQotCWlmICghdGczX2Z3X2ltZ19pc192YWxpZCh0cCwgb2Zmc2V0KSB8fAotCSAgICB0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgKyA4LCAmdmVyX29mZnNldCkpCi0JCXJldHVybjsKLQotCW9mZnNldCA9IG9mZnNldCArIHZlcl9vZmZzZXQgLSBzdGFydDsKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gNCkgewotCQlfX2xlMzIgdjsKLQkJaWYgKHRnM19udnJhbV9yZWFkX2xlKHRwLCBvZmZzZXQgKyBpLCAmdikpCi0JCQlyZXR1cm47Ci0KLQkJbWVtY3B5KHRwLT5md192ZXIgKyBpLCAmdiwgNCk7Ci0JfQotCi0JaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpIHx8Ci0JICAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSkKLQkJcmV0dXJuOworCWludCBpLCB2bGVuOwogCiAJZm9yIChvZmZzZXQgPSBURzNfTlZNX0RJUl9TVEFSVDsKIAkgICAgIG9mZnNldCA8IFRHM19OVk1fRElSX0VORDsKIAkgICAgIG9mZnNldCArPSBURzNfTlZNX0RJUkVOVF9TSVpFKSB7Ci0JCWlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQsICZ2YWwpKQorCQlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCwgJnZhbCkpCiAJCQlyZXR1cm47CiAKIAkJaWYgKCh2YWwgPj4gVEczX05WTV9ESVJUWVBFX1NISUZUKSA9PSBURzNfTlZNX0RJUlRZUEVfQVNGSU5JKQpAQCAtMTE1MTIsMzYgKzExNTkwLDg3IEBACiAKIAlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpCiAJCXN0YXJ0ID0gMHgwODAwMDAwMDsKLQllbHNlIGlmICh0ZzNfbnZyYW1fcmVhZF9zd2FiKHRwLCBvZmZzZXQgLSA0LCAmc3RhcnQpKQorCWVsc2UgaWYgKHRnM19udnJhbV9yZWFkKHRwLCBvZmZzZXQgLSA0LCAmc3RhcnQpKQogCQlyZXR1cm47CiAKLQlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgb2Zmc2V0ICsgNCwgJm9mZnNldCkgfHwKKwlpZiAodGczX252cmFtX3JlYWQodHAsIG9mZnNldCArIDQsICZvZmZzZXQpIHx8CiAJICAgICF0ZzNfZndfaW1nX2lzX3ZhbGlkKHRwLCBvZmZzZXQpIHx8Ci0JICAgIHRnM19udnJhbV9yZWFkX3N3YWIodHAsIG9mZnNldCArIDgsICZ2YWwpKQorCSAgICB0ZzNfbnZyYW1fcmVhZCh0cCwgb2Zmc2V0ICsgOCwgJnZhbCkpCiAJCXJldHVybjsKIAogCW9mZnNldCArPSB2YWwgLSBzdGFydDsKIAotCWJjbnQgPSBzdHJsZW4odHAtPmZ3X3Zlcik7CisJdmxlbiA9IHN0cmxlbih0cC0+ZndfdmVyKTsKIAotCXRwLT5md192ZXJbYmNudCsrXSA9ICcsJzsKLQl0cC0+ZndfdmVyW2JjbnQrK10gPSAnICc7CisJdHAtPmZ3X3Zlclt2bGVuKytdID0gJywnOworCXRwLT5md192ZXJbdmxlbisrXSA9ICcgJzsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJX19sZTMyIHY7Ci0JCWlmICh0ZzNfbnZyYW1fcmVhZF9sZSh0cCwgb2Zmc2V0LCAmdikpCisJCV9fYmUzMiB2OworCQlpZiAodGczX252cmFtX3JlYWRfYmUzMih0cCwgb2Zmc2V0LCAmdikpCiAJCQlyZXR1cm47CiAKIAkJb2Zmc2V0ICs9IHNpemVvZih2KTsKIAotCQlpZiAoYmNudCA+IFRHM19WRVJfU0laRSAtIHNpemVvZih2KSkgewotCQkJbWVtY3B5KCZ0cC0+ZndfdmVyW2JjbnRdLCAmdiwgVEczX1ZFUl9TSVpFIC0gYmNudCk7CisJCWlmICh2bGVuID4gVEczX1ZFUl9TSVpFIC0gc2l6ZW9mKHYpKSB7CisJCQltZW1jcHkoJnRwLT5md192ZXJbdmxlbl0sICZ2LCBURzNfVkVSX1NJWkUgLSB2bGVuKTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJbWVtY3B5KCZ0cC0+ZndfdmVyW2JjbnRdLCAmdiwgc2l6ZW9mKHYpKTsKLQkJYmNudCArPSBzaXplb2Yodik7CisJCW1lbWNweSgmdHAtPmZ3X3Zlclt2bGVuXSwgJnYsIHNpemVvZih2KSk7CisJCXZsZW4gKz0gc2l6ZW9mKHYpOwogCX0KK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX2Rhc2hfdmVyKHN0cnVjdCB0ZzMgKnRwKQoreworCWludCB2bGVuOworCXUzMiBhcGVkYXRhOworCisJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSB8fAorCSAgICAhKHRwLT50ZzNfZmxhZ3MgICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCisJCXJldHVybjsKKworCWFwZWRhdGEgPSB0ZzNfYXBlX3JlYWQzMih0cCwgVEczX0FQRV9TRUdfU0lHKTsKKwlpZiAoYXBlZGF0YSAhPSBBUEVfU0VHX1NJR19NQUdJQykKKwkJcmV0dXJuOworCisJYXBlZGF0YSA9IHRnM19hcGVfcmVhZDMyKHRwLCBURzNfQVBFX0ZXX1NUQVRVUyk7CisJaWYgKCEoYXBlZGF0YSAmIEFQRV9GV19TVEFUVVNfUkVBRFkpKQorCQlyZXR1cm47CisKKwlhcGVkYXRhID0gdGczX2FwZV9yZWFkMzIodHAsIFRHM19BUEVfRldfVkVSU0lPTik7CisKKwl2bGVuID0gc3RybGVuKHRwLT5md192ZXIpOworCisJc25wcmludGYoJnRwLT5md192ZXJbdmxlbl0sIFRHM19WRVJfU0laRSAtIHZsZW4sICIgREFTSCB2JWQuJWQuJWQuJWQiLAorCQkgKGFwZWRhdGEgJiBBUEVfRldfVkVSU0lPTl9NQUpNU0spID4+IEFQRV9GV19WRVJTSU9OX01BSlNGVCwKKwkJIChhcGVkYXRhICYgQVBFX0ZXX1ZFUlNJT05fTUlOTVNLKSA+PiBBUEVfRldfVkVSU0lPTl9NSU5TRlQsCisJCSAoYXBlZGF0YSAmIEFQRV9GV19WRVJTSU9OX1JFVk1TSykgPj4gQVBFX0ZXX1ZFUlNJT05fUkVWU0ZULAorCQkgKGFwZWRhdGEgJiBBUEVfRldfVkVSU0lPTl9CTERNU0spKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19yZWFkX2Z3X3ZlcihzdHJ1Y3QgdGczICp0cCkKK3sKKwl1MzIgdmFsOworCisJaWYgKHRnM19udnJhbV9yZWFkKHRwLCAwLCAmdmFsKSkKKwkJcmV0dXJuOworCisJaWYgKHZhbCA9PSBURzNfRUVQUk9NX01BR0lDKQorCQl0ZzNfcmVhZF9iY192ZXIodHApOworCWVsc2UgaWYgKCh2YWwgJiBURzNfRUVQUk9NX01BR0lDX0ZXX01TSykgPT0gVEczX0VFUFJPTV9NQUdJQ19GVykKKwkJdGczX3JlYWRfc2JfdmVyKHRwLCB2YWwpOworCWVsc2UgaWYgKCh2YWwgJiBURzNfRUVQUk9NX01BR0lDX0hXX01TSykgPT0gVEczX0VFUFJPTV9NQUdJQ19IVykKKwkJdGczX3JlYWRfaHdzYl92ZXIodHApOworCWVsc2UKKwkJcmV0dXJuOworCisJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpIHx8CisJICAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSkKKwkJcmV0dXJuOworCisJdGczX3JlYWRfbWdtdGZ3X3Zlcih0cCk7CiAKIAl0cC0+ZndfdmVyW1RHM19WRVJfU0laRSAtIDFdID0gMDsKIH0KQEAgLTEyMzEyLDE0ICsxMjQ0MSwxMCBAQAogCX0KIAlpZiAoIWFkZHJfb2spIHsKIAkJLyogTmV4dCwgdHJ5IE5WUkFNLiAqLwotCQlpZiAoIXRnM19udnJhbV9yZWFkKHRwLCBtYWNfb2Zmc2V0ICsgMCwgJmhpKSAmJgotCQkgICAgIXRnM19udnJhbV9yZWFkKHRwLCBtYWNfb2Zmc2V0ICsgNCwgJmxvKSkgewotCQkJZGV2LT5kZXZfYWRkclswXSA9ICgoaGkgPj4gMTYpICYgMHhmZik7Ci0JCQlkZXYtPmRldl9hZGRyWzFdID0gKChoaSA+PiAyNCkgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbMl0gPSAoKGxvID4+ICAwKSAmIDB4ZmYpOwotCQkJZGV2LT5kZXZfYWRkclszXSA9ICgobG8gPj4gIDgpICYgMHhmZik7Ci0JCQlkZXYtPmRldl9hZGRyWzRdID0gKChsbyA+PiAxNikgJiAweGZmKTsKLQkJCWRldi0+ZGV2X2FkZHJbNV0gPSAoKGxvID4+IDI0KSAmIDB4ZmYpOworCQlpZiAoIXRnM19udnJhbV9yZWFkX2JlMzIodHAsIG1hY19vZmZzZXQgKyAwLCAmaGkpICYmCisJCSAgICAhdGczX252cmFtX3JlYWRfYmUzMih0cCwgbWFjX29mZnNldCArIDQsICZsbykpIHsKKwkJCW1lbWNweSgmZGV2LT5kZXZfYWRkclswXSwgKChjaGFyICopJmhpKSArIDIsIDIpOworCQkJbWVtY3B5KCZkZXYtPmRldl9hZGRyWzJdLCAoY2hhciAqKSZsbywgc2l6ZW9mKGxvKSk7CiAJCX0KIAkJLyogRmluYWxseSBqdXN0IGZldGNoIGl0IG91dCBvZiB0aGUgTUFDIGNvbnRyb2wgcmVncy4gKi8KIAkJZWxzZSB7CkBAIC0xMzIwMCw2ICsxMzMyNSw5IEBACiAJCX0KIAogCQl0ZzNfYXBlX2xvY2tfaW5pdCh0cCk7CisKKwkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKQorCQkJdGczX3JlYWRfZGFzaF92ZXIodHApOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IDUwOGRlZjMuLmNiNGM2MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5oCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5oCkBAIC0xNzE5LDYgKzE3MTksMTIgQEAKIAogI2RlZmluZSBURzNfT1RQX0RFRkFVTFQJCQkweDI4NmMxNjQwCiAKKy8qIEhhcmR3YXJlIFNlbGZib290IE5WUkFNIGxheW91dCAqLworI2RlZmluZSBURzNfTlZNX0hXU0JfQ0ZHMQkJMHgwMDAwMDAwNAorI2RlZmluZSAgVEczX05WTV9IV1NCX0NGRzFfTUFKTVNLCTB4ZjgwMDAwMDAKKyNkZWZpbmUgIFRHM19OVk1fSFdTQl9DRkcxX01BSlNGVAkyNworI2RlZmluZSAgVEczX05WTV9IV1NCX0NGRzFfTUlOTVNLCTB4MDdjMDAwMDAKKyNkZWZpbmUgIFRHM19OVk1fSFdTQl9DRkcxX01JTlNGVAkyMgogCiAjZGVmaW5lIFRHM19FRVBST01fTUFHSUMJCTB4NjY5OTU1YWEKICNkZWZpbmUgVEczX0VFUFJPTV9NQUdJQ19GVwkJMHhhNTAwMDAwMApAQCAtMTczNyw2ICsxNzQzLDEwIEBACiAjZGVmaW5lIFRHM19OVk1fRElSRU5UX1NJWkUJCTB4YwogI2RlZmluZSBURzNfTlZNX0RJUlRZUEVfU0hJRlQJCTI0CiAjZGVmaW5lIFRHM19OVk1fRElSVFlQRV9BU0ZJTkkJCTEKKyNkZWZpbmUgVEczX05WTV9QVFJFVl9CQ1ZFUgkJMHg5NAorI2RlZmluZSBURzNfTlZNX0JDVkVSX01BSk1TSwkJMHgwMDAwZmYwMAorI2RlZmluZSBURzNfTlZNX0JDVkVSX01BSlNGVAkJOAorI2RlZmluZSBURzNfTlZNX0JDVkVSX01JTk1TSwkJMHgwMDAwMDBmZgogCiAjZGVmaW5lIFRHM19FRVBST01fU0JfRjFSMF9FREhfT0ZGCTB4MTAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9GMVIyX0VESF9PRkYJMHgxNApAQCAtMTk2Nyw2ICsxOTc3LDE0IEBACiAvKiBBUEUgc2hhcmVkIG1lbW9yeS4gIEFjY2Vzc2libGUgdGhyb3VnaCBCQVIxICovCiAjZGVmaW5lIFRHM19BUEVfRldfU1RBVFVTCQkweDQwMGMKICNkZWZpbmUgIEFQRV9GV19TVEFUVVNfUkVBRFkJCSAweDAwMDAwMTAwCisjZGVmaW5lIFRHM19BUEVfRldfVkVSU0lPTgkJMHg0MDE4CisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9NQUpNU0sJCSAweGZmMDAwMDAwCisjZGVmaW5lICBBUEVfRldfVkVSU0lPTl9NQUpTRlQJCSAyNAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fTUlOTVNLCQkgMHgwMGZmMDAwMAorI2RlZmluZSAgQVBFX0ZXX1ZFUlNJT05fTUlOU0ZUCQkgMTYKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX1JFVk1TSwkJIDB4MDAwMGZmMDAKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX1JFVlNGVAkJIDgKKyNkZWZpbmUgIEFQRV9GV19WRVJTSU9OX0JMRE1TSwkJIDB4MDAwMDAwZmYKICNkZWZpbmUgVEczX0FQRV9IT1NUX1NFR19TSUcJCTB4NDIwMAogI2RlZmluZSAgQVBFX0hPU1RfU0VHX1NJR19NQUdJQwkJIDB4NDg0ZjUzNTQKICNkZWZpbmUgVEczX0FQRV9IT1NUX1NFR19MRU4JCTB4NDIwNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwppbmRleCA0Mzg1M2UzLi40YTY1ZmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwpAQCAtMjc0LDYgKzI3NCwxNSBAQAogCQogCXJldHVybiA7IAogfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHhsX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHhsX29wZW4sCisJLm5kb19zdG9wCQk9IHhsX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB4bF94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSB4bF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0geGxfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB4bF9zZXRfbWFjX2FkZHJlc3MsCit9OwogIAogc3RhdGljIGludCBfX2RldmluaXQgeGxfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KSAKQEAgLTMzNywxMyArMzQ2LDcgQEAKIAkJcmV0dXJuIGkgOyAKIAl9CQkJCQogCi0JZGV2LT5vcGVuPSZ4bF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0PSZ4bF94bWl0OwotCWRldi0+Y2hhbmdlX210dT0meGxfY2hhbmdlX210dTsKLQlkZXYtPnN0b3A9JnhsX2Nsb3NlOwotCWRldi0+ZG9faW9jdGw9TlVMTDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdD0meGxfc2V0X3J4X21vZGU7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3M9JnhsX3NldF9tYWNfYWRkcmVzcyA7IAorCWRldi0+bmV0ZGV2X29wcyA9ICZ4bF9uZXRkZXZfb3BzOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldixkZXYpIDsgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvYWJ5c3MuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9hYnlzcy5jCmluZGV4IGI1NjZkNmQuLmI5ZGIxYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9hYnlzcy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9hYnlzcy5jCkBAIC05Miw2ICs5Miw4IEBACiAJb3V0dyh2YWwsIGRldi0+YmFzZV9hZGRyICsgcmVnKTsKIH0KIAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhYnlzc19uZXRkZXZfb3BzOworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhYnlzc19hdHRhY2goc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CQogCXN0YXRpYyBpbnQgdmVyc2lvbnByaW50ZWQ7CkBAIC0xNTcsOCArMTU5LDcgQEAKIAogCW1lbWNweSh0cC0+UHJvZHVjdElELCAiTWFkZ2UgUENJIDE2LzQgTWsyIiwgUFJPRF9JRF9TSVpFICsgMSk7CiAJCQotCWRldi0+b3BlbiA9IGFieXNzX29wZW47Ci0JZGV2LT5zdG9wID0gYWJ5c3NfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzID0gJmFieXNzX25ldGRldl9vcHM7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwpAQCAtNDUwLDYgKzQ1MSwxMSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhYnlzc19pbml0ICh2b2lkKQogeworCWFieXNzX25ldGRldl9vcHMgPSB0bXMzODB0cl9uZXRkZXZfb3BzOworCisJYWJ5c3NfbmV0ZGV2X29wcy5uZG9fb3BlbiA9IGFieXNzX29wZW47CisJYWJ5c3NfbmV0ZGV2X29wcy5uZG9fc3RvcCA9IGFieXNzX2Nsb3NlOworCiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFieXNzX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMKaW5kZXggZmE3YmNlNmUwLi45ZDg5NjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwpAQCAtMjAwLDcgKzIwMCw2IEBACiBzdGF0aWMgdm9pZAlpYm10cl9yZXNldF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCp0bXIsc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZAl0b2tfcmVydW4odW5zaWduZWQgbG9uZyBkZXZfYWRkcik7CiBzdGF0aWMgdm9pZAlpYm10cl9yZWFkbG9nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCAJbmV0X2RldmljZV9zdGF0cyAqdG9rX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQJaWJtdHJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbXR1KTsKIHN0YXRpYyB2b2lkCWZpbmRfdHVyYm9fYWRhcHRlcnMoaW50ICppb2xpc3QpOwogCkBAIC04MTYsMTggKzgxNSwyMSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHJkZXZfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdG9rX29wZW4sCisJLm5kb19zdG9wCQk9IHRva19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdG9rX3NlbmRfcGFja2V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gdG9rX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gaWJtdHJfY2hhbmdlX210dSwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRyZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdG9rX2luZm8gKnRpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCVNFVF9QQUdFKHRpLT5zcmJfcGFnZSk7CiAgICAgICAgIHRpLT5vcGVuX2ZhaWx1cmUgPSBOTyAgICA7Ci0JZGV2LT5vcGVuID0gdG9rX29wZW47Ci0JZGV2LT5zdG9wID0gdG9rX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gdG9rX3NlbmRfcGFja2V0OwotCWRldi0+Z2V0X3N0YXRzID0gdG9rX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHRva19zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gaWJtdHJfY2hhbmdlX210dTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmdHJkZXZfbmV0ZGV2X29wczsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ2MCw3ICsxNDYyLDcgQEAKIAkJCQkJIiUwMlhcbiIsCiAJCQkJCShpbnQpcmV0Y29kZSwgKGludClyZWFkYih0aS0+c3NiICsgNikpOwogCQkJZWxzZQotCQkJCXRpLT50cl9zdGF0cy50eF9wYWNrZXRzKys7CisJCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQlicmVhazsKIAkJY2FzZSBYTUlUX1hJRF9DTUQ6CiAJCQlEUFJJTlRLKCJ4bWl0IHhpZCByZXRfY29kZTogJTAyWFxuIiwKQEAgLTE2NDYsNyArMTY0OCw3IEBACiAJCWJyZWFrOwogCX0KIAl3cml0ZWIoUkVTUF9JTl9BU0IsIHRpLT5tbWlvICsgQUNBX09GRlNFVCArIEFDQV9TRVQgKyBJU1JBX09ERCk7Ci0JdGktPnRyX3N0YXRzLnR4X2J5dGVzICs9IHRpLT5jdXJyZW50X3NrYi0+bGVuOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gdGktPmN1cnJlbnRfc2tiLT5sZW47CiAJZGV2X2tmcmVlX3NrYl9pcnEodGktPmN1cnJlbnRfc2tiKTsKIAl0aS0+Y3VycmVudF9za2IgPSBOVUxMOwogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKQEAgLTE3MjIsNyArMTcyNCw3IEBACiAJaWYgKHJlYWRiKGxsYyArIG9mZnNldG9mKHN0cnVjdCB0cmxsYywgbGxjKSkgIT0gVUlfQ01EKSB7CiAJCVNFVF9QQUdFKHRpLT5hc2JfcGFnZSk7CiAJCXdyaXRlYihEQVRBX0xPU1QsIHRpLT5hc2IgKyBSRVRDT0RFX09GU1QpOwotCQl0aS0+dHJfc3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJd3JpdGViKFJFU1BfSU5fQVNCLCB0aS0+bW1pbyArIEFDQV9PRkZTRVQgKyBBQ0FfU0VUICsgSVNSQV9PREQpOwogCQlyZXR1cm47CiAJfQpAQCAtMTc1Nyw3ICsxNzU5LDcgQEAKIAogCWlmICghKHNrYiA9IGRldl9hbGxvY19za2Ioc2tiX3NpemUpKSkgewogCQlEUFJJTlRLKCJvdXQgb2YgbWVtb3J5LiBmcmFtZSBkcm9wcGVkLlxuIik7Ci0JCXRpLT50cl9zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlTRVRfUEFHRSh0aS0+YXNiX3BhZ2UpOwogCQl3cml0ZWIoREFUQV9MT1NULCB0aS0+YXNiICsgb2Zmc2V0b2Yoc3RydWN0IGFzYl9yZWMsIHJldF9jb2RlKSk7CiAJCXdyaXRlYihSRVNQX0lOX0FTQiwgdGktPm1taW8gKyBBQ0FfT0ZGU0VUICsgQUNBX1NFVCArIElTUkFfT0REKTsKQEAgLTE4MTMsOCArMTgxNSw4IEBACiAKIAl3cml0ZWIoUkVTUF9JTl9BU0IsIHRpLT5tbWlvICsgQUNBX09GRlNFVCArIEFDQV9TRVQgKyBJU1JBX09ERCk7CiAKLQl0aS0+dHJfc3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JdGktPnRyX3N0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCiAJc2tiLT5wcm90b2NvbCA9IHRyX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCWlmIChJUHY0X3ApIHsKQEAgLTE4NzYsMjEgKzE4NzgsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIHRva19nZXRfc3RhdHMoKTogIEJhc2ljYWxseSBhIHNjYWZmb2xkIHJvdXRpbmUgd2hpY2ggd2lsbCByZXR1cm4KLSAgIHRoZSBhZGRyZXNzIG9mIHRoZSB0cl9zdGF0aXN0aWNzIHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGgKLSAgIHRoaXMgZGV2aWNlIC0tIHRoZSB0ci4uLi4gc3RydWN0dXJlIGlzIGFuIGV0aG5ldCBsb29rLWFsaWtlCi0gICBzbyBhdCBsZWFzdCBmb3IgdGhpcyBpdGVyYXRpb24gbWF5IHN1ZmZpY2UuICAgKi8KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp0b2tfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0KLQlzdHJ1Y3QgdG9rX2luZm8gKnRva2k7Ci0JdG9raSA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKSAmdG9raS0+dHJfc3RhdHM7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQogc3RhdGljIGludCBpYm10cl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpCiB7CiAJc3RydWN0IHRva19pbmZvICp0aSA9IG5ldGRldl9wcml2KGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCmluZGV4IDIzOWM3NTIuLmYzMDliOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCkBAIC0yMDcsNyArMjA3LDYgQEAKIHN0YXRpYyBpbnQgc3RyZWFtZXJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzdHJlYW1lcl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBzdHJlYW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RyZWFtZXJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzdHJlYW1lcl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcik7CiBzdGF0aWMgdm9pZCBzdHJlYW1lcl9hcmJfY21kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzdHJlYW1lcl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBtdHUpOwpAQCAtMjIyLDYgKzIyMSwxOCBAQAogI2VuZGlmCiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzdHJlYW1lcl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBzdHJlYW1lcl9vcGVuLAorCS5uZG9fc3RvcAkJPSBzdHJlYW1lcl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc3RyZWFtZXJfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gc3RyZWFtZXJfY2hhbmdlX210dSwKKyNpZiBTVFJFQU1FUl9JT0NUTAorCS5uZG9fZG9faW9jdGwJCT0gc3RyZWFtZXJfaW9jdGwsCisjZW5kaWYKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHN0cmVhbWVyX3NldF9yeF9tb2RlLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gc3RyZWFtZXJfc2V0X21hY19hZGRyZXNzLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgc3RyZWFtZXJfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CkBAIC0zMjEsMTggKzMzMiw3IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc3RyZWFtZXJfcHJpdi0+c3JiX3dhaXQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN0cmVhbWVyX3ByaXYtPnRyYl93YWl0KTsKIAotCWRldi0+b3BlbiA9ICZzdHJlYW1lcl9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJnN0cmVhbWVyX3htaXQ7Ci0JZGV2LT5jaGFuZ2VfbXR1ID0gJnN0cmVhbWVyX2NoYW5nZV9tdHU7Ci0JZGV2LT5zdG9wID0gJnN0cmVhbWVyX2Nsb3NlOwotI2lmIFNUUkVBTUVSX0lPQ1RMCi0JZGV2LT5kb19pb2N0bCA9ICZzdHJlYW1lcl9pb2N0bDsKLSNlbHNlCi0JZGV2LT5kb19pb2N0bCA9IE5VTEw7Ci0jZW5kaWYKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzdHJlYW1lcl9zZXRfcnhfbW9kZTsKLQlkZXYtPmdldF9zdGF0cyA9ICZzdHJlYW1lcl9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmc3RyZWFtZXJfc2V0X21hY19hZGRyZXNzOworCWRldi0+bmV0ZGV2X29wcyA9ICZzdHJlYW1lcl9uZXRkZXZfb3BzOwogCWRldi0+aXJxID0gcGRldi0+aXJxOwogCWRldi0+YmFzZV9hZGRyPXBpb19zdGFydDsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwpAQCAtNjE2LDggKzYxNiw2IEBACiAJcHJpbnRrKCJTSVNSIE1hc2sgPSAlMDR4XG4iLCByZWFkdyhzdHJlYW1lcl9tbWlvICsgU0lTUl9NQVNLKSk7CiAjZW5kaWYKIAlkbyB7Ci0JCWludCBpOwotCiAJCWZvciAoaSA9IDA7IGkgPCBTUkJfQ09NTUFORF9TSVpFOyBpICs9IDIpIHsKIAkJCXdyaXRldygwLCBzdHJlYW1lcl9tbWlvICsgTEFQRElOQyk7CiAJCX0KQEAgLTkzNyw3ICs5MzUsNyBAQAogCQkJaWYgKHNrYiA9PSBOVUxMKSAKIAkJCXsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnkgdG8gY29weSBwYWNrZXQgdG8gdXBwZXIgbGF5ZXJzLiBcbiIsCWRldi0+bmFtZSk7Ci0JCQkJc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfc3RhdHMucnhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJfSBlbHNlIHsJLyogd2UgYWxsb2NhdGVkIGFuIHNrYiBPSyAqLwogCQkJCWlmIChidWZmZXJfY250ID09IDEpIHsKIAkJCQkJLyogcmVsZWFzZSB0aGUgRE1BIG1hcHBpbmcgKi8KQEAgLTEwMDksOCArMTAwNyw4IEBACiAJCQkJCS8qIHNlbmQgdXAgdG8gdGhlIHByb3RvY29sICovCiAJCQkJCW5ldGlmX3J4KHNrYik7CiAJCQkJfQotCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3N0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGg7CisJCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGg7CiAJCQl9CS8qIGlmIHNrYiA9PSBudWxsICovCiAJCX0JCS8qIGVuZCByZWNlaXZlZCB3aXRob3V0IGVycm9ycyAqLwogCkBAIC0xMDUzLDggKzEwNTEsOCBAQAogCQkJCXdoaWxlKHN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3R4X3JpbmdbKHN0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXMgKyAxKSAmIChTVFJFQU1FUl9UWF9SSU5HX1NJWkUgLSAxKV0uc3RhdHVzKSB7CiAJCQkJc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1cyA9IChzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzICsgMSkgJiAoU1RSRUFNRVJfVFhfUklOR19TSVpFIC0gMSk7CiAJCQkJc3RyZWFtZXJfcHJpdi0+ZnJlZV90eF9yaW5nX2VudHJpZXMrKzsKLQkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl9zdGF0cy50eF9ieXRlcyArPSBzdHJlYW1lcl9wcml2LT50eF9yaW5nX3NrYltzdHJlYW1lcl9wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS0+bGVuOwotCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3N0YXRzLnR4X3BhY2tldHMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHN0cmVhbWVyX3ByaXYtPnR4X3Jpbmdfc2tiW3N0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLT5sZW47CisJCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQkJZGV2X2tmcmVlX3NrYl9pcnEoc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19za2Jbc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10pOwogCQkJCXN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3R4X3Jpbmdbc3RyZWFtZXJfcHJpdi0+dHhfcmluZ19sYXN0X3N0YXR1c10uYnVmZmVyID0gMHhkZWFkYmVlZjsKIAkJCQlzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl90eF9yaW5nW3N0cmVhbWVyX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLnN0YXR1cyA9IDA7CkBAIC0xNDg0LDEzICsxNDgyLDYgQEAKIAl9CQkJLyogc3dpdGNoIHNyYlswXSAqLwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0cmVhbWVyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBzdHJlYW1lcl9wcml2YXRlICpzdHJlYW1lcl9wcml2OwotCXN0cmVhbWVyX3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKikgJnN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3N0YXRzOwotfQotCiBzdGF0aWMgaW50IHN0cmVhbWVyX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKQogewogCXN0cnVjdCBzb2NrYWRkciAqc2FkZHIgPSBhZGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmggYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuaAppbmRleCAxM2NjZWU2Li4zYzU4ZDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuaAorKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuaApAQCAtMjk5LDcgKzI5OSw2IEBACiAJaW50IHR4X3JpbmdfZnJlZSwgdHhfcmluZ19sYXN0X3N0YXR1cywgcnhfcmluZ19sYXN0X3JlY2VpdmVkLAogCSAgICBmcmVlX3R4X3JpbmdfZW50cmllczsKIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0cmVhbWVyX3N0YXRzOwogCV9fdTE2IHN0cmVhbWVyX2xhbl9zdGF0dXM7CiAJX191OCBzdHJlYW1lcl9yaW5nX3NwZWVkOwogCV9fdTE2IHBrdF9idWZfc3o7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL21hZGdlbWMuYwppbmRleCA5MTdiNGQyLi40NTZmOGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbWFkZ2VtYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9tYWRnZW1jLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCXJldHVybjsKIH0KIAotCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1hZGdlbWNfbmV0ZGV2X29wcyBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtYWRnZW1jX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsJCkBAIC0xNjgsNyArMTY4LDcgQEAKIAkJZ290byBnZXRvdXQ7CiAJfQogCi0JZGV2LT5kbWEgPSAwOworCWRldi0+bmV0ZGV2X29wcyA9ICZtYWRnZW1jX25ldGRldl9vcHM7CiAKIAljYXJkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhcmRfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmIChjYXJkPT1OVUxMKSB7CkBAIC0zNDgsOSArMzQ4LDYgQEAKIAogCW1lbWNweSh0cC0+UHJvZHVjdElELCAiTWFkZ2UgTUNBIDE2LzQgICAgIiwgUFJPRF9JRF9TSVpFICsgMSk7CiAKLQlkZXYtPm9wZW4gPSBtYWRnZW1jX29wZW47Ci0JZGV2LT5zdG9wID0gbWFkZ2VtY19jbG9zZTsKLQogCXRwLT50bXNwcml2ID0gY2FyZDsKIAlkZXZfc2V0X2RydmRhdGEoZGV2aWNlLCBkZXYpOwogCkBAIC02OTIsOCArNjg5LDYgQEAKIAkKIAlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiLS0tLS0tLVxuIik7CiAJaWYgKGN1cmNhcmQpIHsKLQkJc3RydWN0IG5ldF9sb2NhbCAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkKIAkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIkNhcmQgUmV2aXNpb246ICVkXG4iLCBjdXJjYXJkLT5jYXJkcmV2KTsKIAkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIlJBTSBTaXplOiAlZGtiXG4iLCBjdXJjYXJkLT5yYW1zaXplKTsKIAkJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIkNhYmxlIHR5cGU6ICVzXG4iLCAoY3VyY2FyZC0+Y2FibGV0eXBlKT8iU1RQL0RCOSI6IlVUUC9SSi00NSIpOwpAQCAtNzYwLDYgKzc1NSwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBtYWRnZW1jX2luaXQgKHZvaWQpCiB7CisJbWFkZ2VtY19uZXRkZXZfb3BzID0gdG1zMzgwdHJfbmV0ZGV2X29wczsKKwltYWRnZW1jX25ldGRldl9vcHMubmRvX29wZW4gPSBtYWRnZW1jX29wZW47CisJbWFkZ2VtY19uZXRkZXZfb3BzLm5kb19zdG9wID0gbWFkZ2VtY19jbG9zZTsKKwogCXJldHVybiBtY2FfcmVnaXN0ZXJfZHJpdmVyICgmbWFkZ2VtY19kcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwppbmRleCBlY2I1YzdjLi5kMDY4YTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKQEAgLTE4Nyw3ICsxODcsNiBAQAogc3RhdGljIHZvaWQgb2x5bXBpY19zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIG9seW1waWNfZnJlZW1lbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSA7ICAKIHN0YXRpYyBpcnFyZXR1cm5fdCBvbHltcGljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICogb2x5bXBpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IG9seW1waWNfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpIDsgCiBzdGF0aWMgdm9pZCBvbHltcGljX2FyYl9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IG9seW1waWNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbXR1KTsKQEAgLTE5NSw2ICsxOTQsMTUgQEAKIHN0YXRpYyB2b2lkIG9seW1waWNfYXNiX2JoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIDsgCiBzdGF0aWMgaW50IG9seW1waWNfcHJvY19pbmZvKGNoYXIgKmJ1ZmZlciwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmZzZXQsIGludCBsZW5ndGgsIGludCAqZW9mLCB2b2lkICpkYXRhKSA7IAogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG9seW1waWNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gb2x5bXBpY19vcGVuLAorCS5uZG9fc3RvcAkJPSBvbHltcGljX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBvbHltcGljX3htaXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IG9seW1waWNfY2hhbmdlX210dSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IG9seW1waWNfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBvbHltcGljX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IG9seW1waWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA7IApAQCAtMjUzLDE0ICsyNjEsNyBAQAogCQlnb3RvIG9wX2ZyZWVfaW9tYXA7CiAJfQkJCQkKIAotCWRldi0+b3Blbj0mb2x5bXBpY19vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0PSZvbHltcGljX3htaXQ7Ci0JZGV2LT5jaGFuZ2VfbXR1PSZvbHltcGljX2NoYW5nZV9tdHU7Ci0JZGV2LT5zdG9wPSZvbHltcGljX2Nsb3NlOwotCWRldi0+ZG9faW9jdGw9TlVMTDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdD0mb2x5bXBpY19zZXRfcnhfbW9kZTsKLQlkZXYtPmdldF9zdGF0cz0mb2x5bXBpY19nZXRfc3RhdHMgOwotCWRldi0+c2V0X21hY19hZGRyZXNzPSZvbHltcGljX3NldF9tYWNfYWRkcmVzcyA7ICAKKwlkZXYtPm5ldGRldl9vcHMgPSAmb2x5bXBpY19uZXRkZXZfb3BzOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldixkZXYpIDsgCkBAIC02OTgsNyArNjk5LDYgQEAKIAlpZiAob2x5bXBpY19wcml2LT5vbHltcGljX25ldHdvcmtfbW9uaXRvcikgeyAKIAkJdTggX19pb21lbSAqb2F0OwogCQl1OCBfX2lvbWVtICpvcHQ7Ci0JCWludCBpOwogCQl1OCBhZGRyWzZdOwogCQlvYXQgPSAob2x5bXBpY19wcml2LT5vbHltcGljX2xhcCArIG9seW1waWNfcHJpdi0+b2x5bXBpY19hZGRyX3RhYmxlX2FkZHIpOwogCQlvcHQgPSAob2x5bXBpY19wcml2LT5vbHltcGljX2xhcCArIG9seW1waWNfcHJpdi0+b2x5bXBpY19wYXJtc19hZGRyKTsKQEAgLTc4NSw3ICs3ODUsNyBAQAogCQkJCX0gCiAJCQkJb2x5bXBpY19wcml2LT5yeF9yaW5nX2xhc3RfcmVjZWl2ZWQgKz0gaSA7IAogCQkJCW9seW1waWNfcHJpdi0+cnhfcmluZ19sYXN0X3JlY2VpdmVkICY9IChPTFlNUElDX1JYX1JJTkdfU0laRSAtMSkgOyAKLQkJCQlvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHMucnhfZXJyb3JzKys7CSAKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJfSBlbHNlIHsJCiAJCQkKIAkJCQlpZiAoYnVmZmVyX2NudCA9PSAxKSB7CkBAIC03OTYsNyArNzk2LDcgQEAKIAogCQkJCWlmIChza2IgPT0gTlVMTCkgewogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnkgdG8gY29weSBwYWNrZXQgdG8gdXBwZXIgbGF5ZXJzLiBcbiIsZGV2LT5uYW1lKSA7Ci0JCQkJCW9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0cy5yeF9kcm9wcGVkKysgOyAKKwkJCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkJCS8qIFVwZGF0ZSBjb3VudGVycyBldmVuIHRob3VnaCB3ZSBkb24ndCB0cmFuc2ZlciB0aGUgZnJhbWUgKi8KIAkJCQkJb2x5bXBpY19wcml2LT5yeF9yaW5nX2xhc3RfcmVjZWl2ZWQgKz0gaSA7IAogCQkJCQlvbHltcGljX3ByaXYtPnJ4X3JpbmdfbGFzdF9yZWNlaXZlZCAmPSAoT0xZTVBJQ19SWF9SSU5HX1NJWkUgLTEpIDsgIApAQCAtODYyLDggKzg2Miw4IEBACiAJCQkJCQlza2ItPnByb3RvY29sID0gdHJfdHlwZV90cmFucyhza2IsZGV2KTsKIAkJCQkJCW5ldGlmX3J4KHNrYikgOyAKIAkJCQkJfSAKLQkJCQkJb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzLnJ4X3BhY2tldHMrKyA7IAotCQkJCQlvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoIDsgCisJCQkJCWRldi0+c3RhdHMucnhfcGFja2V0cysrIDsKKwkJCQkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGggOwogCQkJCX0gLyogaWYgc2tiID09IG51bGwgKi8KIAkJCX0gLyogSWYgc3RhdHVzICYgMHgzYiAqLwogCkBAIC05NzEsOCArOTcxLDggQEAKIAkJCQlvbHltcGljX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXMrKzsKIAkJCQlvbHltcGljX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXMgJj0gKE9MWU1QSUNfVFhfUklOR19TSVpFLTEpOwogCQkJCW9seW1waWNfcHJpdi0+ZnJlZV90eF9yaW5nX2VudHJpZXMrKzsKLQkJCQlvbHltcGljX3ByaXYtPm9seW1waWNfc3RhdHMudHhfYnl0ZXMgKz0gb2x5bXBpY19wcml2LT50eF9yaW5nX3NrYltvbHltcGljX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLT5sZW47Ci0JCQkJb2x5bXBpY19wcml2LT5vbHltcGljX3N0YXRzLnR4X3BhY2tldHMrKyA7IAorCQkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gb2x5bXBpY19wcml2LT50eF9yaW5nX3NrYltvbHltcGljX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLT5sZW47CisJCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKysgOwogCQkJCXBjaV91bm1hcF9zaW5nbGUob2x5bXBpY19wcml2LT5wZGV2LCAKIAkJCQkJbGUzMl90b19jcHUob2x5bXBpY19wcml2LT5vbHltcGljX3R4X3Jpbmdbb2x5bXBpY19wcml2LT50eF9yaW5nX2xhc3Rfc3RhdHVzXS5idWZmZXIpLCAKIAkJCQkJb2x5bXBpY19wcml2LT50eF9yaW5nX3NrYltvbHltcGljX3ByaXYtPnR4X3JpbmdfbGFzdF9zdGF0dXNdLT5sZW4sUENJX0RNQV9UT0RFVklDRSk7CkBAIC0xMzQ0LDEzICsxMzQ0LDYgQEAKIAogfSAKIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICogb2x5bXBpY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb2x5bXBpY19wcml2YXRlICpvbHltcGljX3ByaXYgOwotCW9seW1waWNfcHJpdj1uZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKikgJm9seW1waWNfcHJpdi0+b2x5bXBpY19zdGF0czsgCi19Ci0KIHN0YXRpYyBpbnQgb2x5bXBpY19zZXRfbWFjX2FkZHJlc3MgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpIAogewogCXN0cnVjdCBzb2NrYWRkciAqc2FkZHIgPSBhZGRyIDsgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5oIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuaAppbmRleCAxMGZiYmEwLi4zMDYzMWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5oCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmgKQEAgLTI3NSw3ICsyNzUsNiBAQAogCXN0cnVjdCBza19idWZmICp0eF9yaW5nX3NrYltPTFlNUElDX1RYX1JJTkdfU0laRV0sICpyeF9yaW5nX3NrYltPTFlNUElDX1JYX1JJTkdfU0laRV07CQogCWludCB0eF9yaW5nX2ZyZWUsIHR4X3JpbmdfbGFzdF9zdGF0dXMsIHJ4X3JpbmdfbGFzdF9yZWNlaXZlZCxyeF9zdGF0dXNfbGFzdF9yZWNlaXZlZCwgZnJlZV90eF9yaW5nX2VudHJpZXM7CiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBvbHltcGljX3N0YXRzIDsKIAl1MTYgb2x5bXBpY19sYW5fc3RhdHVzIDsKIAl1OCBvbHltcGljX3Jpbmdfc3BlZWQgOwogCXUxNiBwa3RfYnVmX3N6IDsgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Byb3Rlb24uYwppbmRleCBiOGM5NTVmLi4xNmU4NzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvcHJvdGVvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9wcm90ZW9uLmMKQEAgLTExNiw2ICsxMTYsOCBAQAogCXJldHVybiAtRU5PREVWOwogfQogCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHByb3Rlb25fbmV0ZGV2X29wcyBfX3JlYWRfbW9zdGx5OworCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqdHA7CkBAIC0xNjcsOCArMTY5LDcgQEAKIAogCXRwLT50bXNwcml2ID0gTlVMTDsKIAotCWRldi0+b3BlbiA9IHByb3Rlb25fb3BlbjsKLQlkZXYtPnN0b3AgPSB0bXMzODB0cl9jbG9zZTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmcHJvdGVvbl9uZXRkZXZfb3BzOwogCiAJaWYgKGRldi0+aXJxID09IDApCiAJewpAQCAtMzUyLDYgKzM1MywxMCBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IGksIG51bSA9IDAsIGVyciA9IDA7CiAKKwlwcm90ZW9uX25ldGRldl9vcHMgPSB0bXMzODB0cl9uZXRkZXZfb3BzOworCXByb3Rlb25fbmV0ZGV2X29wcy5uZG9fb3BlbiA9IHByb3Rlb25fb3BlbjsKKwlwcm90ZW9uX25ldGRldl9vcHMubmRvX3N0b3AgPSB0bXMzODB0cl9jbG9zZTsKKwogCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHJvdGVvbl9kcml2ZXIpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc2tpc2EuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9za2lzYS5jCmluZGV4IGMwZjU4ZjAuLjQ2ZGI1YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9za2lzYS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9za2lzYS5jCkBAIC0xMzMsNiArMTMzLDggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX29wcyBza19pc2FfbmV0ZGV2X29wcyBfX3JlYWRfbW9zdGx5OworCiBzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqdHA7CkBAIC0xODQsOCArMTg2LDcgQEAKIAogCXRwLT50bXNwcml2ID0gTlVMTDsKIAotCWRldi0+b3BlbiA9IHNrX2lzYV9vcGVuOwotCWRldi0+c3RvcCA9IHRtczM4MHRyX2Nsb3NlOworCWRldi0+bmV0ZGV2X29wcyA9ICZza19pc2FfbmV0ZGV2X29wczsKIAogCWlmIChkZXYtPmlycSA9PSAwKQogCXsKQEAgLTM2Miw2ICszNjMsMTAgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCWludCBpLCBudW0gPSAwLCBlcnIgPSAwOwogCisJc2tfaXNhX25ldGRldl9vcHMgPSB0bXMzODB0cl9uZXRkZXZfb3BzOworCXNrX2lzYV9uZXRkZXZfb3BzLm5kb19vcGVuID0gc2tfaXNhX29wZW47CisJc2tfaXNhX25ldGRldl9vcHMubmRvX3N0b3AgPSB0bXMzODB0cl9jbG9zZTsKKwogCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2tfaXNhX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKaW5kZXggNTBlYjI5Yy4uYTkxZDljNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMKQEAgLTYxLDcgKzYxLDggQEAKIAogI2luY2x1ZGUgInNtY3RyLmgiICAgICAgICAgICAgICAgLyogT3VyIFN0dWZmICovCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0gS0VSTl9JTkZPICJzbWN0ci5jOiB2MS40IDcvMTIvMDAgYnkganNjaGxzdEBzYW1iYS5vcmdcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9CisJS0VSTl9JTkZPICJzbWN0ci5jOiB2MS40IDcvMTIvMDAgYnkganNjaGxzdEBzYW1iYS5vcmdcbiI7CiBzdGF0aWMgY29uc3QgY2hhciBjYXJkbmFtZVtdID0gInNtY3RyIjsKIAogCkBAIC0xMjMsNyArMTI0LDYgQEAKIHN0YXRpYyBpbnQgc21jdHJfZ2V0X3BoeXNpY2FsX2Ryb3BfbnVtYmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIF9fdTggKnNtY3RyX2dldF9yeF9wb2ludGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHNob3J0IHF1ZXVlKTsKIHN0YXRpYyBpbnQgc21jdHJfZ2V0X3N0YXRpb25faWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNtY3RyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBGQ0Jsb2NrICpzbWN0cl9nZXRfdHhfZmNiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fdTE2IHF1ZXVlLAogICAgICAgICBfX3UxNiBieXRlc19jb3VudCk7CiBzdGF0aWMgaW50IHNtY3RyX2dldF91cHN0cmVhbV9uZWlnaGJvcl9hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMzYzMiw2ICszNjMyLDE0IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzbWN0cl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAgICAgICAgICA9IHNtY3RyX29wZW4sCisJLm5kb19zdG9wICAgICAgICAgID0gc21jdHJfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ICAgID0gc21jdHJfc2VuZF9wYWNrZXQsCisJLm5kb190eF90aW1lb3V0CSAgID0gc21jdHJfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cyAgICAgPSBzbWN0cl9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzbWN0cl9zZXRfbXVsdGljYXN0X2xpc3QsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzbWN0cl9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcikKIHsKQEAgLTM2ODIsMTMgKzM2OTAsOCBAQAogICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpZGV2LT5iYXNlX2FkZHIsCiAgICAgICAgICAgICAgICAgZGV2LT5pcnEsIHRwLT5yb21fYmFzZSwgdHAtPnJhbV9iYXNlKTsKIAotICAgICAgICBkZXYtPm9wZW4gICAgICAgICAgICAgICA9IHNtY3RyX29wZW47Ci0gICAgICAgIGRldi0+c3RvcCAgICAgICAgICAgICAgID0gc21jdHJfY2xvc2U7Ci0gICAgICAgIGRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gc21jdHJfc2VuZF9wYWNrZXQ7Ci0gICAgICAgIGRldi0+dHhfdGltZW91dAkJPSBzbWN0cl90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZzbWN0cl9uZXRkZXZfb3BzOwogICAgICAgICBkZXYtPndhdGNoZG9nX3RpbWVvCT0gSFo7Ci0gICAgICAgIGRldi0+Z2V0X3N0YXRzICAgICAgICAgID0gc21jdHJfZ2V0X3N0YXRzOwotICAgICAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzbWN0cl9zZXRfbXVsdGljYXN0X2xpc3Q7CiAgICAgICAgIHJldHVybiAoMCk7CiAKIG91dDoKQEAgLTQzOTIsNTIgKzQzOTUsNDIgQEAKICAgICAgICAgewogICAgICAgICAgICAgICAgIGNhc2UgUklOR19SRUNPVkVSWToKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSaW5nIFJlY292ZXJ5XG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gUklOR19SRUNPVkVSWTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBTSU5HTEVfU1RBVElPTjoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBTaW5nbGUgU3RhdGlub25cbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBTSU5HTEVfU1RBVElPTjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBDT1VOVEVSX09WRVJGTE9XOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvdW50ZXIgT3ZlcmZsb3dcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBDT1VOVEVSX09WRVJGTE9XOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFJFTU9WRV9SRUNFSVZFRDoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBSZW1vdmUgUmVjZWl2ZWRcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBSRU1PVkVfUkVDRUlWRUQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgQVVUT19SRU1PVkFMX0VSUk9SOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEF1dG8gUmVtb3ZlIEVycm9yXG4iLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHAtPmN1cnJlbnRfcmluZ19zdGF0dXMgfD0gQVVUT19SRU1PVkFMX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIExPQkVfV0lSRV9GQVVMVDoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBMb2JlIFdpcmUgRmF1bHRcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBMT0JFX1dJUkVfRkFVTFQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgVFJBTlNNSVRfQkVBQ09OOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRyYW5zbWl0IEJlYWNvblxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IFRSQU5TTUlUX0JFQUNPTjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBTT0ZUX0VSUk9SOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNvZnQgRXJyb3JcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBTT0ZUX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIEhBUkRfRVJST1I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogSGFyZCBFcnJvclxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5jdXJyZW50X3Jpbmdfc3RhdHVzIHw9IEhBUkRfRVJST1I7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGNhc2UgU0lHTkFMX0xPU1M6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogU2lnbmFsIExvc3NcbiIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y3VycmVudF9yaW5nX3N0YXR1cyB8PSBTSUdOQUxfTE9TUzsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9zbWN0ci5oIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmgKaW5kZXggNTJkZjdkZC4uNmU1NzAwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmgKQEAgLTk3Nyw3ICs5NzcsNiBAQAogCV9fdTgJCW1vbml0b3Jfc3RhdGVfcmVhZHk7CiAJX191MTYJCXJpbmdfc3RhdHVzOwogCV9fdTgJCXJpbmdfc3RhdHVzX2ZsYWdzOwotCV9fdTgJCWN1cnJlbnRfcmluZ19zdGF0dXM7CiAJX191OAkJc3RhdGU7CiAKIAlfX3U4CQlqb2luX3N0YXRlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYwppbmRleCA1YmUzNGMyLi5iMTFiYjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zMzgwdHIuYwpAQCAtMjMzMCw2ICsyMzMwLDE3IEBACiAJCURNQV9CSURJUkVDVElPTkFMKTsKIH0KIAorY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRtczM4MHRyX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHRtczM4MHRyX29wZW4sCisJLm5kb19zdG9wCQk9IHRtczM4MHRyX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB0bXMzODB0cl9zZW5kX3BhY2tldCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdG1zMzgwdHJfdGltZW91dCwKKwkubmRvX2dldF9zdGF0cwkJPSB0bXMzODB0cl9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB0bXMzODB0cl9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB0bXMzODB0cl9zZXRfbWFjX2FkZHJlc3MsCit9OworRVhQT1JUX1NZTUJPTCh0bXMzODB0cl9uZXRkZXZfb3BzKTsKKwogaW50IHRtc2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqdG1zX2xvY2FsOwpAQCAtMjM1MywxNiArMjM2NCw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAkKLQkvKiBUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgY2FyZCBkcml2ZXIgaWYgbmVlZGVkICovCi0JZGV2LT5vcGVuCQk9IHRtczM4MHRyX29wZW47Ci0JZGV2LT5zdG9wCQk9IHRtczM4MHRyX2Nsb3NlOwotCWRldi0+ZG9faW9jdGwJCT0gTlVMTDsgCi0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSB0bXMzODB0cl9zZW5kX3BhY2tldDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0gdG1zMzgwdHJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJnRtczM4MHRyX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaOwotCWRldi0+Z2V0X3N0YXRzCQk9IHRtczM4MHRyX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZ0bXMzODB0cl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MJPSB0bXMzODB0cl9zZXRfbWFjX2FkZHJlc3M7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5oIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmgKaW5kZXggN2FmNzZkNy4uNjBiMzBlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmgKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogLyogbW9kdWxlIHByb3RvdHlwZXMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdG1zMzgwdHJfbmV0ZGV2X29wczsKIGludCB0bXMzODB0cl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IHRtczM4MHRyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaXJxcmV0dXJuX3QgdG1zMzgwdHJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMKaW5kZXggZTIxNTBiMy4uZjkyZmU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXNwY2kuYwpAQCAtMTUyLDEzICsxNTIsMTMgQEAKIAogCXRwLT50bXNwcml2ID0gY2FyZGluZm87CiAKKwlkZXYtPm5ldGRldl9vcHMgPSAmdG1zMzgwdHJfbmV0ZGV2X29wczsKKwogCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgdG1zMzgwdHJfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKIAkJCSAgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX291dF90bXNkZXY7CiAKLQlkZXYtPm9wZW4gPSB0bXMzODB0cl9vcGVuOwotCWRldi0+c3RvcCA9IHRtczM4MHRyX2Nsb3NlOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCVNFVF9ORVRERVZfREVWKGRldiwgJnBkZXYtPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwppbmRleCBhOWZkMmIyLi5iYjQzZTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCkBAIC04ODgsNyArODg4LDcgQEAKIAogCWlmIChudW1fcmVjZWl2ZWQgPCBidWRnZXQpIHsKIAkJZGF0YS0+cnhwZW5kaW5nID0gMDsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJVFNJX1dSSVRFKFRTSTEwOF9FQ19JTlRNQVNLLAogCQkJCSAgICAgVFNJX1JFQUQoVFNJMTA4X0VDX0lOVE1BU0spCkBAIC05MTUsMTEgKzkxNSwxMSBAQAogCSAqCiAJICogVGhpcyBjYW4gaGFwcGVuIGlmIHRoaXMgY29kZSByYWNlcyB3aXRoIHRzaTEwOF9wb2xsKCksIHdoaWNoIG1hc2tzCiAJICogdGhlIGludGVycnVwdHMgYWZ0ZXIgdHNpMTA4X2lycV9vbmUoKSByZWFkIHRoZSBtYXNrLCBidXQgYmVmb3JlCi0JICogbmV0aWZfcnhfc2NoZWR1bGUgaXMgY2FsbGVkLiAgSXQgY291bGQgYWxzbyBoYXBwZW4gZHVlIHRvIGNhbGxzCisJICogbmFwaV9zY2hlZHVsZSBpcyBjYWxsZWQuICBJdCBjb3VsZCBhbHNvIGhhcHBlbiBkdWUgdG8gY2FsbHMKIAkgKiBmcm9tIHRzaTEwOF9jaGVja19yeHJpbmcoKS4KIAkgKi8KIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZkYXRhLT5uYXBpKSkgeworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJmRhdGEtPm5hcGkpKSB7CiAJCS8qIE1hc2ssIHJhdGhlciB0aGFuIGFjaywgdGhlIHJlY2VpdmUgaW50ZXJydXB0cy4gIFRoZSBhY2sKIAkJICogd2lsbCBoYXBwZW4gaW4gdHNpMTA4X3BvbGwoKS4KIAkJICovCkBAIC05MzAsNyArOTMwLDcgQEAKIAkJCQkgICAgIHwgVFNJMTA4X0lOVF9SWFRIUkVTSCB8CiAJCQkJICAgICBUU0kxMDhfSU5UX1JYT1ZFUlJVTiB8IFRTSTEwOF9JTlRfUlhFUlJPUiB8CiAJCQkJICAgICBUU0kxMDhfSU5UX1JYV0FJVCk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJmRhdGEtPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJmRhdGEtPm5hcGkpOwogCX0gZWxzZSB7CiAJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQkvKiBUaGlzIGNhbiBoYXBwZW4gaWYgYW4gaW50ZXJydXB0IG9jY3VycyB3aGlsZSB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCmluZGV4IDY0MThmNzQuLmY5NDkxYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwpAQCAtNDc5LDcgKzQ3OSw4IEBACiAKICNpbmNsdWRlICJkZTR4NS5oIgogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9ICJkZTR4NS5jOlYwLjU0NiAyMDAxLzAyLzIyIGRhdmllc0BtYW5pYWMudWx0cmFuZXQuY29tXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gImRlNHg1LmM6VjAuNTQ2IDIwMDEvMDIvMjIgZGF2aWVzQG1hbmlhYy51bHRyYW5ldC5jb21cbiI7CiAKICNkZWZpbmUgY19jaGFyIGNvbnN0IGNoYXIKIApAQCAtMzk0MSw4ICszOTQyLDggQEAKIAlzdHJjcHkobmFtZSwgIkRFNDM0LzUiKTsKIAlyZXR1cm4gc3RhdHVzOwogICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2VhcmNoIGZvciBhIERFQyBuYW1lIGluIHRoZSBTUk9NICovCi0JaW50IGkgPSAqKChjaGFyICopJmxwLT5zcm9tICsgMTkpICogMzsKLQlzdHJuY3B5KG5hbWUsIChjaGFyICopJmxwLT5zcm9tICsgMjYgKyBpLCA4KTsKKwlpbnQgdG1wID0gKigoY2hhciAqKSZscC0+c3JvbSArIDE5KSAqIDM7CisJc3RybmNweShuYW1lLCAoY2hhciAqKSZscC0+c3JvbSArIDI2ICsgdG1wLCA4KTsKICAgICB9CiAgICAgbmFtZVs4XSA9ICdcMCc7CiAgICAgZm9yIChpPTA7IGk8c2lnbGVuOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwppbmRleCAyZTVjOTk5Li5lMmM5ZDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAogLyogR2xvYmFsIHZhcmlhYmxlIGRlY2xhcmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdGRhdGEgcHJpbnRlZF92ZXJzaW9uOwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KIAlLRVJOX0lORk8gRFJWX05BTUUgIjogRGF2aWNvbSBETTl4eHggbmV0IGRyaXZlciwgdmVyc2lvbiAiCiAJRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKVxuIjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwppbmRleCA2YzM0MjhhLi5jOGQyMjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiB7CiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwogCXN0cnVjdCB0dWxpcF9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiB9CiAKIGludCB0dWxpcF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKQEAgLTE0MCw2ICsxNDAsNyBAQAogICAgICAgICAgICAgICAgLyogSWYgd2Ugb3duIHRoZSBuZXh0IGVudHJ5LCBpdCBpcyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCiAgICAgICAgICAgICAgICB3aGlsZSAoICEgKHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgJiBjcHVfdG9fbGUzMihEZXNjT3duZWQpKSkgewogICAgICAgICAgICAgICAgICAgICAgICBzMzIgc3RhdHVzID0gbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCSAgICAgICBzaG9ydCBwa3RfbGVuOwogCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cC0+ZGlydHlfcnggKyBSWF9SSU5HX1NJWkUgPT0gdHAtPmN1cl9yeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE1MSw4ICsxNTIsMjggQEAKIAkJICAgICAgIGlmICgrK3dvcmtfZG9uZSA+PSBidWRnZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBub3RfZG9uZTsKIAotICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyAmIDB4MzgwMDgzMDApICE9IDB4MDMwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RhdHVzICYgMHgzODAwMDMwMCkgIT0gMHgwMzAwKSB7CisJCSAgICAgICAvKgorCQkJKiBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguCisJCQkqIChNYXkgbm90IGJlIGNvbnNpZGVyZWQgdmFsaWQgdW50aWwgd2UgaGF2ZQorCQkJKiBjaGVja2VkIHN0YXR1cyBmb3IgUnhMZW5ndGhPdmVyMjA0NyBiaXRzKQorCQkJKi8KKwkJICAgICAgIHBrdF9sZW4gPSAoKHN0YXR1cyA+PiAxNikgJiAweDdmZikgLSA0OworCisJCSAgICAgICAvKgorCQkJKiBNYXhpbXVtIHBrdF9sZW4gaXMgMTUxOCAoMTUxNCArIHZsYW4gaGVhZGVyKQorCQkJKiBBbnl0aGluZyBoaWdoZXIgdGhhbiB0aGlzIGlzIGFsd2F5cyBpbnZhbGlkCisJCQkqIHJlZ2FyZGxlc3Mgb2YgUnhMZW5ndGhPdmVyMjA0NyBiaXRzCisJCQkqLworCisJCSAgICAgICBpZiAoKHN0YXR1cyAmIChSeExlbmd0aE92ZXIyMDQ3IHwKKwkJCQkgICAgICBSeERlc2NDUkNFcnJvciB8CisJCQkJICAgICAgUnhEZXNjQ29sbGlzaW9uU2VlbiB8CisJCQkJICAgICAgUnhEZXNjUnVudCB8CisJCQkJICAgICAgUnhEZXNjRGVzY0VyciB8CisJCQkJICAgICAgUnhXaG9sZVBrdCkpICE9IFJ4V2hvbGVQa3QKKwkJCSAgIHx8IHBrdF9sZW4gPiAxNTE4KSB7CisJCQkgICAgICAgaWYgKChzdGF0dXMgJiAoUnhMZW5ndGhPdmVyMjA0NyB8CisJCQkJCSAgICAgIFJ4V2hvbGVQa3QpKSAhPSBSeFdob2xlUGt0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEluZ29yZSBlYXJsaWVyIGJ1ZmZlcnMuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyAmIDB4ZmZmZikgIT0gMHg3ZmZmKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dWxpcF9kZWJ1ZyA+IDEpCkBAIC0xNjEsMzAgKzE4MiwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgJiBSeERlc2NGYXRhbEVycikgeworCQkJICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXJlIHdhcyBhIGZhdGFsIGVycm9yLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTguOHguXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBlbmQgb2YgYSBwYWNrZXQuKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgJiAweDA4OTApIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJICAgICAgIGlmIChwa3RfbGVuID4gMTUxOCB8fAorCQkJCQkgICAoc3RhdHVzICYgUnhEZXNjUnVudCkpCisJCQkJCSAgICAgICB0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgMHgwMDA0KSB0cC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgMHgwMDAyKSB0cC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIDB4MDAwMSkgdHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9taXQgdGhlIGZvdXIgb2N0ZXQgQ1JDIGZyb20gdGhlIGxlbmd0aC4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCBwa3RfbGVuID0gKChzdGF0dXMgPj4gMTYpICYgMHg3ZmYpIC0gNDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0jaWZuZGVmIGZpbmFsX3ZlcnNpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGt0X2xlbiA+IDE1MTgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBCb2d1cyBwYWNrZXQgc2l6ZSBvZiAlZCAoJSN4KS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBwa3RfbGVuLCBwa3RfbGVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrdF9sZW4gPSAxNTE4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGUgcGFja2V0IGlzIGxvbmcgZW5vdWdoIHRvIGFjY2VwdCB3aXRob3V0IGNvcHlpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhIG1pbmltYWxseS1zaXplZCBza2J1ZmYuICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBrdF9sZW4gPCB0dWxpcF9yeF9jb3B5YnJlYWsKQEAgLTMwMCw3ICszMTQsNyBAQAogCiAgICAgICAgICAvKiBSZW1vdmUgdXMgZnJvbSBwb2xsaW5nIGxpc3QgYW5kIGVuYWJsZSBSWCBpbnRyLiAqLwogCi0gICAgICAgICBuZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKyAgICAgICAgIG5hcGlfY29tcGxldGUobmFwaSk7CiAgICAgICAgICBpb3dyaXRlMzIodHVsaXBfdGJsW3RwLT5jaGlwX2lkXS52YWxpZF9pbnRycywgdHAtPmJhc2VfYWRkcitDU1I3KTsKIAogICAgICAgICAgLyogVGhlIGxhc3Qgb3AgaGFwcGVucyBhZnRlciBwb2xsIGNvbXBsZXRpb24uIFdoaWNoIG1lYW5zIHRoZSBmb2xsb3dpbmc6CkBAIC0zMzMsMTAgKzM0NywxMCBAQAogCiAgICAgICAgICAvKiBUaGluazogdGltZXJfcGVuZGluZygpIHdhcyBhbiBleHBsaWNpdCBzaWduYXR1cmUgb2YgYnVnLgogICAgICAgICAgICogVGltZXIgY2FuIGJlIHBlbmRpbmcgbm93IGJ1dCBmaXJlZCBhbmQgY29tcGxldGVkCi0gICAgICAgICAgKiBiZWZvcmUgd2UgZGlkIG5ldGlmX3J4X2NvbXBsZXRlKCkuIFNlZT8gV2Ugd291bGQgbG9zZSBpdC4gKi8KKyAgICAgICAgICAqIGJlZm9yZSB3ZSBkaWQgbmFwaV9jb21wbGV0ZSgpLiBTZWU/IFdlIHdvdWxkIGxvc2UgaXQuICovCiAKICAgICAgICAgIC8qIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgcG9sbGluZyBsaXN0ICovCi0gICAgICAgICBuZXRpZl9yeF9jb21wbGV0ZShuYXBpKTsKKyAgICAgICAgIG5hcGlfY29tcGxldGUobmFwaSk7CiAKICAgICAgICAgIHJldHVybiB3b3JrX2RvbmU7CiB9CkBAIC0zNTYsMTQgKzM3MCwzNSBAQAogCS8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQgaXMgYSBuZXcgcGFja2V0LiBTZW5kIGl0IHVwLiAqLwogCXdoaWxlICggISAodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyAmIGNwdV90b19sZTMyKERlc2NPd25lZCkpKSB7CiAJCXMzMiBzdGF0dXMgPSBsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKKwkJc2hvcnQgcGt0X2xlbjsKIAogCQlpZiAodHVsaXBfZGVidWcgPiA1KQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlOC44eC5cbiIsCiAJCQkJICAgZGV2LT5uYW1lLCBlbnRyeSwgc3RhdHVzKTsKIAkJaWYgKC0tcnhfd29ya19saW1pdCA8IDApCiAJCQlicmVhazsKLQkJaWYgKChzdGF0dXMgJiAweDM4MDA4MzAwKSAhPSAweDAzMDApIHsKLQkJCWlmICgoc3RhdHVzICYgMHgzODAwMDMwMCkgIT0gMHgwMzAwKSB7CisKKwkJLyoKKwkJICBPbWl0IHRoZSBmb3VyIG9jdGV0IENSQyBmcm9tIHRoZSBsZW5ndGguCisJCSAgKE1heSBub3QgYmUgY29uc2lkZXJlZCB2YWxpZCB1bnRpbCB3ZSBoYXZlCisJCSAgY2hlY2tlZCBzdGF0dXMgZm9yIFJ4TGVuZ3RoT3ZlcjIwNDcgYml0cykKKwkJKi8KKwkJcGt0X2xlbiA9ICgoc3RhdHVzID4+IDE2KSAmIDB4N2ZmKSAtIDQ7CisJCS8qCisJCSAgTWF4aW11bSBwa3RfbGVuIGlzIDE1MTggKDE1MTQgKyB2bGFuIGhlYWRlcikKKwkJICBBbnl0aGluZyBoaWdoZXIgdGhhbiB0aGlzIGlzIGFsd2F5cyBpbnZhbGlkCisJCSAgcmVnYXJkbGVzcyBvZiBSeExlbmd0aE92ZXIyMDQ3IGJpdHMKKwkJKi8KKworCQlpZiAoKHN0YXR1cyAmIChSeExlbmd0aE92ZXIyMDQ3IHwKKwkJCSAgICAgICBSeERlc2NDUkNFcnJvciB8CisJCQkgICAgICAgUnhEZXNjQ29sbGlzaW9uU2VlbiB8CisJCQkgICAgICAgUnhEZXNjUnVudCB8CisJCQkgICAgICAgUnhEZXNjRGVzY0VyciB8CisJCQkgICAgICAgUnhXaG9sZVBrdCkpICAgICAgICAhPSBSeFdob2xlUGt0CisJCSAgICAgfHwgcGt0X2xlbiA+IDE1MTgpIHsKKwkJCWlmICgoc3RhdHVzICYgKFJ4TGVuZ3RoT3ZlcjIwNDcgfAorCQkJICAgICBSeFdob2xlUGt0KSkgICAgICAgICAhPSBSeFdob2xlUGt0KSB7CiAJCQkJLyogSW5nb3JlIGVhcmxpZXIgYnVmZmVycy4gKi8KIAkJCQlpZiAoKHN0YXR1cyAmIDB4ZmZmZikgIT0gMHg3ZmZmKSB7CiAJCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCkBAIC0zNzIsMzEgKzQwNywyMiBAQAogCQkJCQkJCSAgIGRldi0+bmFtZSwgc3RhdHVzKTsKIAkJCQkJdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQl9Ci0JCQl9IGVsc2UgaWYgKHN0YXR1cyAmIFJ4RGVzY0ZhdGFsRXJyKSB7CisJCQl9IGVsc2UgewogCQkJCS8qIFRoZXJlIHdhcyBhIGZhdGFsIGVycm9yLiAqLwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCiAJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZSBlcnJvciwgUnggc3RhdHVzICU4Ljh4LlxuIiwKIAkJCQkJCSAgIGRldi0+bmFtZSwgc3RhdHVzKTsKIAkJCQl0cC0+c3RhdHMucnhfZXJyb3JzKys7IC8qIGVuZCBvZiBhIHBhY2tldC4qLwotCQkJCWlmIChzdGF0dXMgJiAweDA4OTApIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJaWYgKHBrdF9sZW4gPiAxNTE4IHx8CisJCQkJICAgIChzdGF0dXMgJiBSeERlc2NSdW50KSkKKwkJCQkJdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgMHgwMDA0KSB0cC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CiAJCQkJaWYgKHN0YXR1cyAmIDB4MDAwMikgdHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgMHgwMDAxKSB0cC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCS8qIE9taXQgdGhlIGZvdXIgb2N0ZXQgQ1JDIGZyb20gdGhlIGxlbmd0aC4gKi8KLQkJCXNob3J0IHBrdF9sZW4gPSAoKHN0YXR1cyA+PiAxNikgJiAweDdmZikgLSA0OwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotI2lmbmRlZiBmaW5hbF92ZXJzaW9uCi0JCQlpZiAocGt0X2xlbiA+IDE1MTgpIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQm9ndXMgcGFja2V0IHNpemUgb2YgJWQgKCUjeCkuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIHBrdF9sZW4sIHBrdF9sZW4pOwotCQkJCXBrdF9sZW4gPSAxNTE4OwotCQkJCXRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQl9Ci0jZW5kaWYKLQogCQkJLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBpcyBsb25nIGVub3VnaCB0byBhY2NlcHQgd2l0aG91dCBjb3B5aW5nCiAJCQkgICB0byBhIG1pbmltYWxseS1zaXplZCBza2J1ZmYuICovCiAJCQlpZiAocGt0X2xlbiA8IHR1bGlwX3J4X2NvcHlicmVhawpAQCAtNTE5LDcgKzU0NSw3IEBACiAJCQlyeGQrKzsKIAkJCS8qIE1hc2sgUlggaW50cnMgYW5kIGFkZCB0aGUgZGV2aWNlIHRvIHBvbGwgbGlzdC4gKi8KIAkJCWlvd3JpdGUzMih0dWxpcF90YmxbdHAtPmNoaXBfaWRdLnZhbGlkX2ludHJzJn5SeFBvbGxJbnQsIGlvYWRkciArIENTUjcpOwotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnRwLT5uYXBpKTsKIAogCQkJaWYgKCEoY3NyNSZ+KEFibm9ybWFsSW50cnxOb3JtYWxJbnRyfFJ4UG9sbEludHxUUExua1Bhc3MpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMgYi9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCmluZGV4IDkxY2Y5YzguLmRhZGRmYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYwpAQCAtNjksMTEgKzY5LDEwIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPm1paV9sb2NrLCBmbGFncyk7CiAJaWYgKHRwLT5jaGlwX2lkID09IExDODJDMTY4KSB7Ci0JCWludCBpID0gMTAwMDsKIAkJaW93cml0ZTMyKDB4NjAwMjAwMDAgKyAocGh5X2lkPDwyMykgKyAobG9jYXRpb248PDE4KSwgaW9hZGRyICsgMHhBMCk7CiAJCWlvcmVhZDMyKGlvYWRkciArIDB4QTApOwogCQlpb3JlYWQzMihpb2FkZHIgKyAweEEwKTsKLQkJd2hpbGUgKC0taSA+IDApIHsKKwkJZm9yIChpID0gMTAwMDsgaSA+PSAwOyAtLWkpIHsKIAkJCWJhcnJpZXIoKTsKIAkJCWlmICggISAoKHJldHZhbCA9IGlvcmVhZDMyKGlvYWRkciArIDB4QTApKSAmIDB4ODAwMDAwMDApKQogCQkJCWJyZWFrOwpAQCAtMTMxLDEzICsxMzAsMTIgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+bWlpX2xvY2ssIGZsYWdzKTsKIAlpZiAodHAtPmNoaXBfaWQgPT0gTEM4MkMxNjgpIHsKLQkJaW50IGkgPSAxMDAwOwogCQlpb3dyaXRlMzIoY21kLCBpb2FkZHIgKyAweEEwKTsKLQkJZG8geworCQlmb3IgKGkgPSAxMDAwOyBpID49IDA7IC0taSkgewogCQkJYmFycmllcigpOwogCQkJaWYgKCAhIChpb3JlYWQzMihpb2FkZHIgKyAweEEwKSAmIDB4ODAwMDAwMDApKQogCQkJCWJyZWFrOwotCQl9IHdoaWxlICgtLWkgPiAwKTsKKwkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bWlpX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmggYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCmluZGV4IDE5YWJiYzMuLjBhZmEyZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaApAQCAtMjAxLDggKzIwMSwzOCBAQAogCURlc2NTdGFydFBrdCA9IDB4MjAwMDAwMDAsCiAJRGVzY0VuZFJpbmcgID0gMHgwMjAwMDAwMCwKIAlEZXNjVXNlTGluayAgPSAweDAxMDAwMDAwLAotCVJ4RGVzY0ZhdGFsRXJyID0gMHgwMDgwMDAsCisKKwkvKgorCSAqIEVycm9yIHN1bW1hcnkgZmxhZyBpcyBsb2dpY2FsIG9yIG9mICdDUkMgRXJyb3InLCAnQ29sbGlzaW9uIFNlZW4nLAorCSAqICdGcmFtZSBUb28gTG9uZycsICdSdW50JyBhbmQgJ0Rlc2NyaXB0b3IgRXJyb3InIGZsYWdzIGdlbmVyYXRlZAorCSAqIHdpdGhpbiB0dWxpcCBjaGlwLgorCSAqLworCVJ4RGVzY0Vycm9yU3VtbWFyeSA9IDB4ODAwMCwKKwlSeERlc2NDUkNFcnJvciA9IDB4MDAwMiwKKwlSeERlc2NDb2xsaXNpb25TZWVuID0gMHgwMDQwLAorCisJLyoKKwkgKiAnRnJhbWUgVG9vIExvbmcnIGZsYWcgaXMgc2V0IGlmIHBhY2tldCBsZW5ndGggaW5jbHVkaW5nIENSQyBleGNlZWRzCisJICogMTUxOC4gIEhvd2V2ZXIsIGEgZnVsbCBzaXplZCBWTEFOIHRhZ2dlZCBmcmFtZSBpcyAxNTIyIGJ5dGVzCisJICogaW5jbHVkaW5nIENSQy4KKwkgKgorCSAqIFRoZSB0dWxpcCBjaGlwIGRvZXMgbm90IGJsb2NrIG92ZXJzaXplZCBmcmFtZXMsIGFuZCBpZiB0aGlzIGZsYWcgaXMKKwkgKiBzZXQgb24gYSByZWNlaXZlIGRlc2NyaXB0b3IgaXQgZG9lcyBub3QgaW5kaWNhdGUgdGhlIGZyYW1lIGhhcyBiZWVuCisJICogdHJ1bmNhdGVkLiAgVGhlIHJlY2VpdmUgZGVzY3JpcHRvciBhbHNvIGluY2x1ZGVzIHRoZSBhY3R1YWwgbGVuZ3RoLgorCSAqIFRoZXJlZm9yZSB3ZSBjYW4gc2FmZXR5IGlnbm9yZSB0aGlzIGZsYWcgYW5kIGNoZWNrIHRoZSBsZW5ndGgKKwkgKiBvdXJzZWx2ZXMuCisJICovCisJUnhEZXNjRnJhbWVUb29Mb25nID0gMHgwMDgwLAorCVJ4RGVzY1J1bnQgPSAweDA4MDAsCisJUnhEZXNjRGVzY0VyciA9IDB4NDAwMCwKIAlSeFdob2xlUGt0ICAgPSAweDAwMDAwMzAwLAorCS8qCisJICogVG9wIHRocmVlIGJpdHMgb2YgMTQgYml0IGZyYW1lIGxlbmd0aCAoc3RhdHVzIGJpdHMgMjctMjkpIHNob3VsZAorCSAqIG5ldmVyIGJlIHNldCBhcyB0aGF0IHdvdWxkIG1ha2UgZnJhbWUgb3ZlciAyMDQ3IGJ5dGVzLiBUaGUgUmVjZWl2ZQorCSAqIFdhdGNoZG9nIGZsYWcgKGJpdCA0KSBtYXkgaW5kaWNhdGUgdGhlIGxlbmd0aCBpcyBvdmVyIDIwNDggYW5kIHRoZQorCSAqIGxlbmd0aCBmaWVsZCBpcyBpbnZhbGlkLgorCSAqLworCVJ4TGVuZ3RoT3ZlcjIwNDcgPSAweDM4MDAwMDEwCiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwppbmRleCBiZWU3NWZhLi4yYWJiNWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCkBAIC0yNTUsNiArMjU1LDcgQEAKIAogc3RhdGljIHZvaWQgdHVsaXBfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHR1bGlwX2luaXRfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIHR1bGlwX2ZyZWVfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgdHVsaXBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgdHVsaXBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgdHVsaXBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC01MDIsMTYgKzUwMywyMSBAQAogewogCWludCByZXR2YWw7CiAKLQlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmdHVsaXBfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKSkKLQkJcmV0dXJuIHJldHZhbDsKLQogCXR1bGlwX2luaXRfcmluZyAoZGV2KTsKIAorCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmdHVsaXBfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZnJlZV9yaW5nOworCiAJdHVsaXBfdXAgKGRldik7CiAKIAluZXRpZl9zdGFydF9xdWV1ZSAoZGV2KTsKIAogCXJldHVybiAwOworCitmcmVlX3Jpbmc6CisJdHVsaXBfZnJlZV9yaW5nIChkZXYpOworCXJldHVybiByZXR2YWw7CiB9CiAKIApAQCAtNzY4LDIzICs3NzQsMTEgQEAKIAl0dWxpcF9zZXRfcG93ZXJfc3RhdGUgKHRwLCAwLCAxKTsKIH0KIAotCi1zdGF0aWMgaW50IHR1bGlwX2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgdHVsaXBfZnJlZV9yaW5nIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0dWxpcF9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+YmFzZV9hZGRyOwogCWludCBpOwogCi0JbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKLQotCXR1bGlwX2Rvd24gKGRldik7Ci0KLQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsgKEtFUk5fREVCVUcgIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMi4yeC5cbiIsCi0JCQlkZXYtPm5hbWUsIGlvcmVhZDMyIChpb2FkZHIgKyBDU1I1KSk7Ci0KLQlmcmVlX2lycSAoZGV2LT5pcnEsIGRldik7Ci0KIAkvKiBGcmVlIGFsbCB0aGUgc2tidWZmcyBpbiB0aGUgUnggcXVldWUuICovCiAJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKSB7CiAJCXN0cnVjdCBza19idWZmICpza2IgPSB0cC0+cnhfYnVmZmVyc1tpXS5za2I7CkBAIC04MDMsNiArNzk3LDcgQEAKIAkJCWRldl9rZnJlZV9za2IgKHNrYik7CiAJCX0KIAl9CisKIAlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRwLT50eF9idWZmZXJzW2ldLnNrYjsKIApAQCAtODE0LDYgKzgwOSwyNCBAQAogCQl0cC0+dHhfYnVmZmVyc1tpXS5za2IgPSBOVUxMOwogCQl0cC0+dHhfYnVmZmVyc1tpXS5tYXBwaW5nID0gMDsKIAl9Cit9CisKK3N0YXRpYyBpbnQgdHVsaXBfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHR1bGlwX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5iYXNlX2FkZHI7CisKKwluZXRpZl9zdG9wX3F1ZXVlIChkZXYpOworCisJdHVsaXBfZG93biAoZGV2KTsKKworCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCisJCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICUyLjJ4LlxuIiwKKwkJCWRldi0+bmFtZSwgaW9yZWFkMzIgKGlvYWRkciArIENTUjUpKTsKKworCWZyZWVfaXJxIChkZXYtPmlycSwgZGV2KTsKKworCXR1bGlwX2ZyZWVfcmluZyAoZGV2KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCmluZGV4IDAzMGUwMmUuLmMyMjdkYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCiAvKiBHbG9iYWwgdmFyaWFibGUgZGVjbGFyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSBwcmludGVkX3ZlcnNpb247Ci1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQogCUtFUk5fSU5GTyBEUlZfTkFNRSAiOiBVTGkgTTUyNjEvTTUyNjMgbmV0IGRyaXZlciwgdmVyc2lvbiAiCiAJRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKVxuIjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKaW5kZXggZjQ2N2JmOC4uYzYxYTAxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCkBAIC0xMzksOSArMTM5LDEwIEBACiAjZGVmaW5lIFBLVF9CVUZfU1oJCTE1MzYJLyogU2l6ZSBvZiBlYWNoIHRlbXBvcmFyeSBSeCBidWZmZXIuKi8KIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgKDIuNCBwb3J0KSAiIERSVl9SRUxEQVRFICIgIERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+XG4iCi1LRVJOX0lORk8gIiAgaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay9kcml2ZXJzLmh0bWxcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19pbml0Y29uc3QgPQorCUtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAoMi40IHBvcnQpICIKKwlEUlZfUkVMREFURSAiICBEb25hbGQgQmVja2VyIDxiZWNrZXJAc2N5bGQuY29tPlxuIgorCUtFUk5fSU5GTyAiICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL2RyaXZlcnMuaHRtbFxuIjsKIAogTU9EVUxFX0FVVEhPUigiRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiV2luYm9uZCBXODljODQwIEV0aGVybmV0IGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCAwOWZlYTMxLi5hMWIwNjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYworKysgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtNjMsNiArNjMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19uZXQuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CisjaW5jbHVkZSA8bmV0L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTg3LDI2ICs4OSwxMjcgQEAKIAl1bnNpZ25lZCBjaGFyCWFkZHJbRkxUX0VYQUNUX0NPVU5UXVtFVEhfQUxFTl07CiB9OwogCitzdHJ1Y3QgdHVuX2ZpbGUgeworCWF0b21pY190IGNvdW50OworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW47CisJc3RydWN0IG5ldCAqbmV0OworCXdhaXRfcXVldWVfaGVhZF90CXJlYWRfd2FpdDsKK307CisKK3N0cnVjdCB0dW5fc29jazsKKwogc3RydWN0IHR1bl9zdHJ1Y3QgewotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGxpc3Q7CisJc3RydWN0IHR1bl9maWxlCQkqdGZpbGU7CiAJdW5zaWduZWQgaW50IAkJZmxhZ3M7Ci0JaW50CQkJYXR0YWNoZWQ7CiAJdWlkX3QJCQlvd25lcjsKIAlnaWRfdAkJCWdyb3VwOwogCi0Jd2FpdF9xdWV1ZV9oZWFkX3QJcmVhZF93YWl0OwogCXN0cnVjdCBza19idWZmX2hlYWQJcmVhZHE7CiAKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogCXN0cnVjdCBmYXN5bmNfc3RydWN0CSpmYXN5bmM7CiAKIAlzdHJ1Y3QgdGFwX2ZpbHRlciAgICAgICB0eGZsdDsKKwlzdHJ1Y3Qgc29jawkJKnNrOworCXN0cnVjdCBzb2NrZXQJCXNvY2tldDsKIAogI2lmZGVmIFRVTl9ERUJVRwogCWludCBkZWJ1ZzsKICNlbmRpZgogfTsKIAorc3RydWN0IHR1bl9zb2NrIHsKKwlzdHJ1Y3Qgc29jawkJc2s7CisJc3RydWN0IHR1bl9zdHJ1Y3QJKnR1bjsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHR1bl9zb2NrICp0dW5fc2soc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2ssIHN0cnVjdCB0dW5fc29jaywgc2spOworfQorCitzdGF0aWMgaW50IHR1bl9hdHRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOworCWludCBlcnI7CisKKwlBU1NFUlRfUlROTCgpOworCisJLyogQ2hlY2sgcGVybWlzc2lvbnMgKi8KKwlpZiAoKCh0dW4tPm93bmVyICE9IC0xICYmIGNyZWQtPmV1aWQgIT0gdHVuLT5vd25lcikgfHwKKwkgICAgICh0dW4tPmdyb3VwICE9IC0xICYmICFpbl9lZ3JvdXBfcCh0dW4tPmdyb3VwKSkpICYmCisJCSFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJbmV0aWZfdHhfbG9ja19iaCh0dW4tPmRldik7CisKKwllcnIgPSAtRUlOVkFMOworCWlmICh0ZmlsZS0+dHVuKQorCQlnb3RvIG91dDsKKworCWVyciA9IC1FQlVTWTsKKwlpZiAodHVuLT50ZmlsZSkKKwkJZ290byBvdXQ7CisKKwllcnIgPSAwOworCXRmaWxlLT50dW4gPSB0dW47CisJdHVuLT50ZmlsZSA9IHRmaWxlOworCWRldl9ob2xkKHR1bi0+ZGV2KTsKKwlhdG9taWNfaW5jKCZ0ZmlsZS0+Y291bnQpOworCitvdXQ6CisJbmV0aWZfdHhfdW5sb2NrX2JoKHR1bi0+ZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX3R1bl9kZXRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bikKK3sKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gdHVuLT50ZmlsZTsKKworCS8qIERldGFjaCBmcm9tIG5ldCBkZXZpY2UgKi8KKwluZXRpZl90eF9sb2NrX2JoKHR1bi0+ZGV2KTsKKwl0ZmlsZS0+dHVuID0gTlVMTDsKKwl0dW4tPnRmaWxlID0gTlVMTDsKKwluZXRpZl90eF91bmxvY2tfYmgodHVuLT5kZXYpOworCisJLyogRHJvcCByZWFkIHF1ZXVlICovCisJc2tiX3F1ZXVlX3B1cmdlKCZ0dW4tPnJlYWRxKTsKKworCS8qIERyb3AgdGhlIGV4dHJhIGNvdW50IG9uIHRoZSBuZXQgZGV2aWNlICovCisJZGV2X3B1dCh0dW4tPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIHR1bl9kZXRhY2goc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bikKK3sKKwlydG5sX2xvY2soKTsKKwlfX3R1bl9kZXRhY2godHVuKTsKKwlydG5sX3VubG9jaygpOworfQorCitzdGF0aWMgc3RydWN0IHR1bl9zdHJ1Y3QgKl9fdHVuX2dldChzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlKQoreworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBOVUxMOworCisJaWYgKGF0b21pY19pbmNfbm90X3plcm8oJnRmaWxlLT5jb3VudCkpCisJCXR1biA9IHRmaWxlLT50dW47CisKKwlyZXR1cm4gdHVuOworfQorCitzdGF0aWMgc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bl9nZXQoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIF9fdHVuX2dldChmaWxlLT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCB0dW5fcHV0KHN0cnVjdCB0dW5fc3RydWN0ICp0dW4pCit7CisJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IHR1bi0+dGZpbGU7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmdGZpbGUtPmNvdW50KSkKKwkJdHVuX2RldGFjaCh0ZmlsZS0+dHVuKTsKK30KKwogLyogVEFQIGZpbHRlcnRpbmcgKi8KIHN0YXRpYyB2b2lkIGFkZHJfaGFzaF9zZXQodTMyICptYXNrLCBjb25zdCB1OCAqYWRkcikKIHsKQEAgLTIxOSwxMyArMzIyLDIzIEBACiAKIC8qIE5ldHdvcmsgZGV2aWNlIHBhcnQgb2YgdGhlIGRyaXZlciAqLwogCi1zdGF0aWMgaW50IHR1bl9uZXRfaWQ7Ci1zdHJ1Y3QgdHVuX25ldCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDsKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHVuX2V0aHRvb2xfb3BzOwogCisvKiBOZXQgZGV2aWNlIGRldGFjaCBmcm9tIGZkLiAqLworc3RhdGljIHZvaWQgdHVuX25ldF91bmluaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gdHVuLT50ZmlsZTsKKworCS8qIEluZm9ybSB0aGUgbWV0aG9kcyB0aGV5IG5lZWQgdG8gc3RvcCB1c2luZyB0aGUgZGV2LgorCSAqLworCWlmICh0ZmlsZSkgeworCQl3YWtlX3VwX2FsbCgmdGZpbGUtPnJlYWRfd2FpdCk7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ0ZmlsZS0+Y291bnQpKQorCQkJX190dW5fZGV0YWNoKHR1bik7CisJfQorfQorCiAvKiBOZXQgZGV2aWNlIG9wZW4uICovCiBzdGF0aWMgaW50IHR1bl9uZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMjQ4LDcgKzM2MSw3IEBACiAJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9uZXRfeG1pdCAlZFxuIiwgdHVuLT5kZXYtPm5hbWUsIHNrYi0+bGVuKTsKIAogCS8qIERyb3AgcGFja2V0IGlmIGludGVyZmFjZSBpcyBub3QgYXR0YWNoZWQgKi8KLQlpZiAoIXR1bi0+YXR0YWNoZWQpCisJaWYgKCF0dW4tPnRmaWxlKQogCQlnb3RvIGRyb3A7CiAKIAkvKiBEcm9wIGlmIHRoZSBmaWx0ZXIgZG9lcyBub3QgbGlrZSBpdC4KQEAgLTI4MCw3ICszOTMsNyBAQAogCS8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqLwogCWlmICh0dW4tPmZsYWdzICYgVFVOX0ZBU1lOQykKIAkJa2lsbF9mYXN5bmMoJnR1bi0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dW4tPnJlYWRfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dW4tPnRmaWxlLT5yZWFkX3dhaXQpOwogCXJldHVybiAwOwogCiBkcm9wOgpAQCAtMzEyLDYgKzQyNSw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdHVuX25ldGRldl9vcHMgPSB7CisJLm5kb191bmluaXQJCT0gdHVuX25ldF91bmluaXQsCiAJLm5kb19vcGVuCQk9IHR1bl9uZXRfb3BlbiwKIAkubmRvX3N0b3AJCT0gdHVuX25ldF9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gdHVuX25ldF94bWl0LApAQCAtMzE5LDYgKzQzMyw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHRhcF9uZXRkZXZfb3BzID0geworCS5uZG9fdW5pbml0CQk9IHR1bl9uZXRfdW5pbml0LAogCS5uZG9fb3BlbgkJPSB0dW5fbmV0X29wZW4sCiAJLm5kb19zdG9wCQk9IHR1bl9uZXRfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IHR1bl9uZXRfeG1pdCwKQEAgLTM2NSw4NiArNDgwLDY2IEBACiAvKiBQb2xsICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHR1bl9jaHJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCiB7Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IFBPTExPVVQgfCBQT0xMV1JOT1JNOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IF9fdHVuX2dldCh0ZmlsZSk7CisJc3RydWN0IHNvY2sgKnNrID0gdHVuLT5zazsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAKIAlpZiAoIXR1bikKLQkJcmV0dXJuIC1FQkFERkQ7CisJCXJldHVybiBQT0xMRVJSOwogCiAJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9jaHJfcG9sbFxuIiwgdHVuLT5kZXYtPm5hbWUpOwogCi0JcG9sbF93YWl0KGZpbGUsICZ0dW4tPnJlYWRfd2FpdCwgd2FpdCk7CisJcG9sbF93YWl0KGZpbGUsICZ0ZmlsZS0+cmVhZF93YWl0LCB3YWl0KTsKIAogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZ0dW4tPnJlYWRxKSkKIAkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCisJaWYgKHNvY2tfd3JpdGVhYmxlKHNrKSB8fAorCSAgICAoIXRlc3RfYW5kX3NldF9iaXQoU09DS19BU1lOQ19OT1NQQUNFLCAmc2stPnNrX3NvY2tldC0+ZmxhZ3MpICYmCisJICAgICBzb2NrX3dyaXRlYWJsZShzaykpKQorCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOworCisJaWYgKHR1bi0+ZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpCisJCW1hc2sgPSBQT0xMRVJSOworCisJdHVuX3B1dCh0dW4pOwogCXJldHVybiBtYXNrOwogfQogCiAvKiBwcmVwYWQgaXMgdGhlIGFtb3VudCB0byByZXNlcnZlIGF0IGZyb250LiAgbGVuIGlzIGxlbmd0aCBhZnRlciB0aGF0LgogICogbGluZWFyIGlzIGEgaGludCBhcyB0byBob3cgbXVjaCB0byBjb3B5ICh1c3VhbGx5IGhlYWRlcnMpLiAqLwotc3RhdGljIHN0cnVjdCBza19idWZmICp0dW5fYWxsb2Nfc2tiKHNpemVfdCBwcmVwYWQsIHNpemVfdCBsZW4sIHNpemVfdCBsaW5lYXIsCi0JCQkJICAgICBnZnBfdCBnZnApCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp0dW5fYWxsb2Nfc2tiKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sCisJCQkJCSAgICBzaXplX3QgcHJlcGFkLCBzaXplX3QgbGVuLAorCQkJCQkgICAgc2l6ZV90IGxpbmVhciwgaW50IG5vYmxvY2spCiB7CisJc3RydWN0IHNvY2sgKnNrID0gdHVuLT5zazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGludCBpOwotCi0Jc2tiID0gYWxsb2Nfc2tiKHByZXBhZCArIGxlbiwgZ2ZwfF9fR0ZQX05PV0FSTik7Ci0JaWYgKHNrYikgewotCQlza2JfcmVzZXJ2ZShza2IsIHByZXBhZCk7Ci0JCXNrYl9wdXQoc2tiLCBsZW4pOwotCQlyZXR1cm4gc2tiOwotCX0KKwlpbnQgZXJyOwogCiAJLyogVW5kZXIgYSBwYWdlPyAgRG9uJ3QgYm90aGVyIHdpdGggcGFnZWQgc2tiLiAqLwogCWlmIChwcmVwYWQgKyBsZW4gPCBQQUdFX1NJWkUpCi0JCXJldHVybiBOVUxMOworCQlsaW5lYXIgPSBsZW47CiAKLQkvKiBTdGFydCB3aXRoIGEgbm9ybWFsIHNrYiwgYW5kIGFkZCBwYWdlcy4gKi8KLQlza2IgPSBhbGxvY19za2IocHJlcGFkICsgbGluZWFyLCBnZnApOworCXNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9wc2tiKHNrLCBwcmVwYWQgKyBsaW5lYXIsIGxlbiAtIGxpbmVhciwgbm9ibG9jaywKKwkJCQkgICAmZXJyKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBFUlJfUFRSKGVycik7CiAKIAlza2JfcmVzZXJ2ZShza2IsIHByZXBhZCk7CiAJc2tiX3B1dChza2IsIGxpbmVhcik7Ci0KLQlsZW4gLT0gbGluZWFyOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9TS0JfRlJBR1M7IGkrKykgewotCQlza2JfZnJhZ190ICpmID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07Ci0KLQkJZi0+cGFnZSA9IGFsbG9jX3BhZ2UoZ2ZwfF9fR0ZQX1pFUk8pOwotCQlpZiAoIWYtPnBhZ2UpCi0JCQlicmVhazsKLQotCQlmLT5wYWdlX29mZnNldCA9IDA7Ci0JCWYtPnNpemUgPSBQQUdFX1NJWkU7Ci0KLQkJc2tiLT5kYXRhX2xlbiArPSBQQUdFX1NJWkU7Ci0JCXNrYi0+bGVuICs9IFBBR0VfU0laRTsKLQkJc2tiLT50cnVlc2l6ZSArPSBQQUdFX1NJWkU7Ci0JCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MrKzsKLQotCQlpZiAobGVuIDwgUEFHRV9TSVpFKSB7Ci0JCQlsZW4gPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQkJbGVuIC09IFBBR0VfU0laRTsKLQl9Ci0KLQkvKiBUb28gbGFyZ2UsIG9yIGFsbG9jIGZhaWw/ICovCi0JaWYgKHVubGlrZWx5KGxlbikpIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXNrYiA9IE5VTEw7Ci0JfQorCXNrYi0+ZGF0YV9sZW4gPSBsZW4gLSBsaW5lYXI7CisJc2tiLT5sZW4gKz0gbGVuIC0gbGluZWFyOwogCiAJcmV0dXJuIHNrYjsKIH0KIAogLyogR2V0IHBhY2tldCBmcm9tIHVzZXIgc3BhY2UgYnVmZmVyICovCi1zdGF0aWMgX19pbmxpbmVfXyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCBzdHJ1Y3QgaW92ZWMgKml2LCBzaXplX3QgY291bnQpCitzdGF0aWMgX19pbmxpbmVfXyBzc2l6ZV90IHR1bl9nZXRfdXNlcihzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLAorCQkJCSAgICAgICBzdHJ1Y3QgaW92ZWMgKml2LCBzaXplX3QgY291bnQsCisJCQkJICAgICAgIGludCBub2Jsb2NrKQogewotCXN0cnVjdCB0dW5fcGkgcGkgPSB7IDAsIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApIH07CisJc3RydWN0IHR1bl9waSBwaSA9IHsgMCwgY3B1X3RvX2JlMTYoRVRIX1BfSVApIH07CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzaXplX3QgbGVuID0gY291bnQsIGFsaWduID0gMDsKIAlzdHJ1Y3QgdmlydGlvX25ldF9oZHIgZ3NvID0geyAwIH07CkBAIC00NzQsOSArNTY5LDExIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoIShza2IgPSB0dW5fYWxsb2Nfc2tiKGFsaWduLCBsZW4sIGdzby5oZHJfbGVuLCBHRlBfS0VSTkVMKSkpIHsKLQkJdHVuLT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkJcmV0dXJuIC1FTk9NRU07CisJc2tiID0gdHVuX2FsbG9jX3NrYih0dW4sIGFsaWduLCBsZW4sIGdzby5oZHJfbGVuLCBub2Jsb2NrKTsKKwlpZiAoSVNfRVJSKHNrYikpIHsKKwkJaWYgKFBUUl9FUlIoc2tiKSAhPSAtRUFHQUlOKQorCQkJdHVuLT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKIAl9CiAKIAlpZiAoc2tiX2NvcHlfZGF0YWdyYW1fZnJvbV9pb3ZlYyhza2IsIDAsIGl2LCBsZW4pKSB7CkBAIC01NjIsMTQgKzY1OSwyMCBAQAogc3RhdGljIHNzaXplX3QgdHVuX2Nocl9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKml2LAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHBvcykKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gaW9jYi0+a2lfZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gdHVuX2dldChmaWxlKTsKKwlzc2l6ZV90IHJlc3VsdDsKIAogCWlmICghdHVuKQogCQlyZXR1cm4gLUVCQURGRDsKIAogCURCRyhLRVJOX0lORk8gIiVzOiB0dW5fY2hyX3dyaXRlICVsZFxuIiwgdHVuLT5kZXYtPm5hbWUsIGNvdW50KTsKIAotCXJldHVybiB0dW5fZ2V0X3VzZXIodHVuLCAoc3RydWN0IGlvdmVjICopIGl2LCBpb3ZfbGVuZ3RoKGl2LCBjb3VudCkpOworCXJlc3VsdCA9IHR1bl9nZXRfdXNlcih0dW4sIChzdHJ1Y3QgaW92ZWMgKilpdiwgaW92X2xlbmd0aChpdiwgY291bnQpLAorCQkJICAgICAgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCisJdHVuX3B1dCh0dW4pOworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qIFB1dCBwYWNrZXQgdG8gdGhlIHVzZXIgc3BhY2UgYnVmZmVyICovCkBAIC02NDIsNyArNzQ1LDggQEAKIAkJCSAgICB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IF9fdHVuX2dldCh0ZmlsZSk7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzc2l6ZV90IGxlbiwgcmV0ID0gMDsKQEAgLTY1MywxMCArNzU3LDEyIEBACiAJREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9jaHJfcmVhZFxuIiwgdHVuLT5kZXYtPm5hbWUpOwogCiAJbGVuID0gaW92X2xlbmd0aChpdiwgY291bnQpOwotCWlmIChsZW4gPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAobGVuIDwgMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CiAKLQlhZGRfd2FpdF9xdWV1ZSgmdHVuLT5yZWFkX3dhaXQsICZ3YWl0KTsKKwlhZGRfd2FpdF9xdWV1ZSgmdGZpbGUtPnJlYWRfd2FpdCwgJndhaXQpOwogCXdoaWxlIChsZW4pIHsKIAkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CiAKQEAgLTY3MCw2ICs3NzYsMTAgQEAKIAkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7CiAJCQkJYnJlYWs7CiAJCQl9CisJCQlpZiAodHVuLT5kZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkgeworCQkJCXJldCA9IC1FSU87CisJCQkJYnJlYWs7CisJCQl9CiAKIAkJCS8qIE5vdGhpbmcgdG8gcmVhZCwgbGV0J3Mgc2xlZXAgKi8KIAkJCXNjaGVkdWxlKCk7CkBAIC02ODMsOCArNzkzLDEwIEBACiAJfQogCiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnR1bi0+cmVhZF93YWl0LCAmd2FpdCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJnRmaWxlLT5yZWFkX3dhaXQsICZ3YWl0KTsKIAorb3V0OgorCXR1bl9wdXQodHVuKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02OTMsNTQgKzgwNSw3OCBAQAogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdHVuLT5yZWFkcSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmdHVuLT5yZWFkX3dhaXQpOwogCiAJdHVuLT5vd25lciA9IC0xOwogCXR1bi0+Z3JvdXAgPSAtMTsKIAogCWRldi0+ZXRodG9vbF9vcHMgPSAmdHVuX2V0aHRvb2xfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ORVROU19MT0NBTDsKIH0KIAotc3RhdGljIHN0cnVjdCB0dW5fc3RydWN0ICp0dW5fZ2V0X2J5X25hbWUoc3RydWN0IHR1bl9uZXQgKnRuLCBjb25zdCBjaGFyICpuYW1lKQorLyogVHJpdmlhbCBzZXQgb2YgbmV0bGluayBvcHMgdG8gYWxsb3cgZGVsZXRpbmcgdHVuIG9yIHRhcAorICogZGV2aWNlIHdpdGggbmV0bGluay4KKyAqLworc3RhdGljIGludCB0dW5fdmFsaWRhdGUoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgdHVuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CisJLmtpbmQJCT0gRFJWX05BTUUsCisJLnByaXZfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgdHVuX3N0cnVjdCksCisJLnNldHVwCQk9IHR1bl9zZXR1cCwKKwkudmFsaWRhdGUJPSB0dW5fdmFsaWRhdGUsCit9OworCitzdGF0aWMgdm9pZCB0dW5fc29ja193cml0ZV9zcGFjZShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKIAotCUFTU0VSVF9SVE5MKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0dW4sICZ0bi0+ZGV2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKCFzdHJuY21wKHR1bi0+ZGV2LT5uYW1lLCBuYW1lLCBJRk5BTVNJWikpCi0JCSAgICByZXR1cm4gdHVuOwotCX0KKwlpZiAoIXNvY2tfd3JpdGVhYmxlKHNrKSkKKwkJcmV0dXJuOwogCi0JcmV0dXJuIE5VTEw7CisJaWYgKHNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5za19zbGVlcCkpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jKHNrLT5za19zbGVlcCk7CisKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncykpCisJCXJldHVybjsKKworCXR1biA9IGNvbnRhaW5lcl9vZihzaywgc3RydWN0IHR1bl9zb2NrLCBzayktPnR1bjsKKwlraWxsX2Zhc3luYygmdHVuLT5mYXN5bmMsIFNJR0lPLCBQT0xMX09VVCk7CiB9CiAKK3N0YXRpYyB2b2lkIHR1bl9zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlkZXZfcHV0KGNvbnRhaW5lcl9vZihzaywgc3RydWN0IHR1bl9zb2NrLCBzayktPnR1bi0+ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwcm90byB0dW5fcHJvdG8gPSB7CisJLm5hbWUJCT0gInR1biIsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgdHVuX3NvY2spLAorfTsKKwogc3RhdGljIGludCB0dW5fc2V0X2lmZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaWZyZXEgKmlmcikKIHsKLQlzdHJ1Y3QgdHVuX25ldCAqdG47CisJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW47CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IGVycjsKIAotCXRuID0gbmV0X2dlbmVyaWMobmV0LCB0dW5fbmV0X2lkKTsKLQl0dW4gPSB0dW5fZ2V0X2J5X25hbWUodG4sIGlmci0+aWZyX25hbWUpOwotCWlmICh0dW4pIHsKLQkJaWYgKHR1bi0+YXR0YWNoZWQpCi0JCQlyZXR1cm4gLUVCVVNZOworCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgaWZyLT5pZnJfbmFtZSk7CisJaWYgKGRldikgeworCQlpZiAoKGlmci0+aWZyX2ZsYWdzICYgSUZGX1RVTikgJiYgZGV2LT5uZXRkZXZfb3BzID09ICZ0dW5fbmV0ZGV2X29wcykKKwkJCXR1biA9IG5ldGRldl9wcml2KGRldik7CisJCWVsc2UgaWYgKChpZnItPmlmcl9mbGFncyAmIElGRl9UQVApICYmIGRldi0+bmV0ZGV2X29wcyA9PSAmdGFwX25ldGRldl9vcHMpCisJCQl0dW4gPSBuZXRkZXZfcHJpdihkZXYpOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBDaGVjayBwZXJtaXNzaW9ucyAqLwotCQlpZiAoKCh0dW4tPm93bmVyICE9IC0xICYmCi0JCSAgICAgIGNyZWQtPmV1aWQgIT0gdHVuLT5vd25lcikgfHwKLQkJICAgICAodHVuLT5ncm91cCAhPSAtMSAmJgotCQkgICAgICBjcmVkLT5lZ2lkICE9IHR1bi0+Z3JvdXApKSAmJgotCQkgICAgIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0KKwkJZXJyID0gdHVuX2F0dGFjaCh0dW4sIGZpbGUpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CiAJfQotCWVsc2UgaWYgKF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgaWZyLT5pZnJfbmFtZSkpCi0JCXJldHVybiAtRUlOVkFMOwogCWVsc2UgewogCQljaGFyICpuYW1lOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKQEAgLTc3MSwyNSArOTA3LDQ1IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAogCQlkZXZfbmV0X3NldChkZXYsIG5ldCk7CisJCWRldi0+cnRubF9saW5rX29wcyA9ICZ0dW5fbGlua19vcHM7CiAKIAkJdHVuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJdHVuLT5kZXYgPSBkZXY7CiAJCXR1bi0+ZmxhZ3MgPSBmbGFnczsKIAkJdHVuLT50eGZsdC5jb3VudCA9IDA7CiAKKwkJZXJyID0gLUVOT01FTTsKKwkJc2sgPSBza19hbGxvYyhuZXQsIEFGX1VOU1BFQywgR0ZQX0tFUk5FTCwgJnR1bl9wcm90byk7CisJCWlmICghc2spCisJCQlnb3RvIGVycl9mcmVlX2RldjsKKworCQkvKiBUaGlzIHJlZiBjb3VudCBpcyBmb3IgdHVuLT5zay4gKi8KKwkJZGV2X2hvbGQoZGV2KTsKKwkJc29ja19pbml0X2RhdGEoJnR1bi0+c29ja2V0LCBzayk7CisJCXNrLT5za193cml0ZV9zcGFjZSA9IHR1bl9zb2NrX3dyaXRlX3NwYWNlOworCQlzay0+c2tfZGVzdHJ1Y3QgPSB0dW5fc29ja19kZXN0cnVjdDsKKwkJc2stPnNrX3NuZGJ1ZiA9IElOVF9NQVg7CisJCXNrLT5za19zbGVlcCA9ICZ0ZmlsZS0+cmVhZF93YWl0OworCisJCXR1bi0+c2sgPSBzazsKKwkJY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgdHVuX3NvY2ssIHNrKS0+dHVuID0gdHVuOworCiAJCXR1bl9uZXRfaW5pdChkZXYpOwogCiAJCWlmIChzdHJjaHIoZGV2LT5uYW1lLCAnJScpKSB7CiAJCQllcnIgPSBkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSk7CiAJCQlpZiAoZXJyIDwgMCkKLQkJCQlnb3RvIGVycl9mcmVlX2RldjsKKwkJCQlnb3RvIGVycl9mcmVlX3NrOwogCQl9CiAKKwkJZXJyID0gLUVJTlZBTDsKIAkJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVycl9mcmVlX2RldjsKIAotCQlsaXN0X2FkZCgmdHVuLT5saXN0LCAmdG4tPmRldl9saXN0KTsKKwkJZXJyID0gdHVuX2F0dGFjaCh0dW4sIGZpbGUpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCX0KIAogCURCRyhLRVJOX0lORk8gIiVzOiB0dW5fc2V0X2lmZlxuIiwgdHVuLT5kZXYtPm5hbWUpOwpAQCAtODA5LDEwICs5NjUsNiBAQAogCWVsc2UKIAkJdHVuLT5mbGFncyAmPSB+VFVOX1ZORVRfSERSOwogCi0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gdHVuOwotCXR1bi0+YXR0YWNoZWQgPSAxOwotCWdldF9uZXQoZGV2X25ldCh0dW4tPmRldikpOwotCiAJLyogTWFrZSBzdXJlIHBlcnNpc3RlbnQgZGV2aWNlcyBkbyBub3QgZ2V0IHN0dWNrIGluCiAJICogeG9mZiBzdGF0ZS4KIAkgKi8KQEAgLTgyMiw2ICs5NzQsOCBAQAogCXN0cmNweShpZnItPmlmcl9uYW1lLCB0dW4tPmRldi0+bmFtZSk7CiAJcmV0dXJuIDA7CiAKKyBlcnJfZnJlZV9zazoKKwlzb2NrX3B1dChzayk7CiAgZXJyX2ZyZWVfZGV2OgogCWZyZWVfbmV0ZGV2KGRldik7CiAgZmFpbGVkOgpAQCAtODMwLDcgKzk4NCw3IEBACiAKIHN0YXRpYyBpbnQgdHVuX2dldF9pZmYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGlmcmVxICppZnIpCiB7Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gdHVuX2dldChmaWxlKTsKIAogCWlmICghdHVuKQogCQlyZXR1cm4gLUVCQURGRDsKQEAgLTg1NSw2ICsxMDA5LDcgQEAKIAlpZiAodHVuLT5mbGFncyAmIFRVTl9WTkVUX0hEUikKIAkJaWZyLT5pZnJfZmxhZ3MgfD0gSUZGX1ZORVRfSERSOwogCisJdHVuX3B1dCh0dW4pOwogCXJldHVybiAwOwogfQogCkBAIC05MDEsMzIgKzEwNTYsMTcgQEAKIHN0YXRpYyBpbnQgdHVuX2Nocl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKIAl2b2lkIF9fdXNlciogYXJncCA9ICh2b2lkIF9fdXNlciopYXJnOwogCXN0cnVjdCBpZnJlcSBpZnI7CisJaW50IHNuZGJ1ZjsKIAlpbnQgcmV0OwogCiAJaWYgKGNtZCA9PSBUVU5TRVRJRkYgfHwgX0lPQ19UWVBFKGNtZCkgPT0gMHg4OSkKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZnIsIGFyZ3AsIHNpemVvZiBpZnIpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoY21kID09IFRVTlNFVElGRiAmJiAhdHVuKSB7Ci0JCWludCBlcnI7Ci0KLQkJaWZyLmlmcl9uYW1lW0lGTkFNU0laLTFdID0gJ1wwJzsKLQotCQlydG5sX2xvY2soKTsKLQkJZXJyID0gdHVuX3NldF9pZmYoY3VycmVudC0+bnNwcm94eS0+bmV0X25zLCBmaWxlLCAmaWZyKTsKLQkJcnRubF91bmxvY2soKTsKLQotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZnIsIHNpemVvZihpZnIpKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAoY21kID09IFRVTkdFVEZFQVRVUkVTKSB7CiAJCS8qIEN1cnJlbnRseSB0aGlzIGp1c3QgbWVhbnM6ICJ3aGF0IElGRiBmbGFncyBhcmUgdmFsaWQ/Ii4KIAkJICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBuZXZlciBjaGVja2VkIGZvciBpbnZhbGlkIGZsYWdzIG9uCkBAIC05MzYsMTkgKzEwNzYsMzkgQEAKIAkJCQkodW5zaWduZWQgaW50IF9fdXNlciopYXJncCk7CiAJfQogCisJdHVuID0gX190dW5fZ2V0KHRmaWxlKTsKKwlpZiAoY21kID09IFRVTlNFVElGRiAmJiAhdHVuKSB7CisJCWludCBlcnI7CisKKwkJaWZyLmlmcl9uYW1lW0lGTkFNU0laLTFdID0gJ1wwJzsKKworCQlydG5sX2xvY2soKTsKKwkJZXJyID0gdHVuX3NldF9pZmYodGZpbGUtPm5ldCwgZmlsZSwgJmlmcik7CisJCXJ0bmxfdW5sb2NrKCk7CisKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWZyLCBzaXplb2YoaWZyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorCisKIAlpZiAoIXR1bikKIAkJcmV0dXJuIC1FQkFERkQ7CiAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9pb2N0bCBjbWQgJWRcbiIsIHR1bi0+ZGV2LT5uYW1lLCBjbWQpOwogCisJcmV0ID0gMDsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVFVOR0VUSUZGOgogCQlyZXQgPSB0dW5fZ2V0X2lmZihjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnMsIGZpbGUsICZpZnIpOwogCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwkJCWJyZWFrOwogCiAJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlmciwgc2l6ZW9mKGlmcikpKQotCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXQgPSAtRUZBVUxUOwogCQlicmVhazsKIAogCWNhc2UgVFVOU0VUTk9DU1VNOgpAQCAtMTAwMCw3ICsxMTYwLDcgQEAKIAkJCXJldCA9IDA7CiAJCX0KIAkJcnRubF91bmxvY2soKTsKLQkJcmV0dXJuIHJldDsKKwkJYnJlYWs7CiAKICNpZmRlZiBUVU5fREVCVUcKIAljYXNlIFRVTlNFVERFQlVHOgpAQCAtMTAxMSwyNCArMTE3MSwyNSBAQAogCQlydG5sX2xvY2soKTsKIAkJcmV0ID0gc2V0X29mZmxvYWQodHVuLT5kZXYsIGFyZyk7CiAJCXJ0bmxfdW5sb2NrKCk7Ci0JCXJldHVybiByZXQ7CisJCWJyZWFrOwogCiAJY2FzZSBUVU5TRVRUWEZJTFRFUjoKIAkJLyogQ2FuIGJlIHNldCBvbmx5IGZvciBUQVBzICovCisJCXJldCA9IC1FSU5WQUw7CiAJCWlmICgodHVuLT5mbGFncyAmIFRVTl9UWVBFX01BU0spICE9IFRVTl9UQVBfREVWKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlicmVhazsKIAkJcnRubF9sb2NrKCk7CiAJCXJldCA9IHVwZGF0ZV9maWx0ZXIoJnR1bi0+dHhmbHQsICh2b2lkIF9fdXNlciAqKWFyZyk7CiAJCXJ0bmxfdW5sb2NrKCk7Ci0JCXJldHVybiByZXQ7CisJCWJyZWFrOwogCiAJY2FzZSBTSU9DR0lGSFdBRERSOgogCQkvKiBHZXQgaHcgYWRkcmVzICovCiAJCW1lbWNweShpZnIuaWZyX2h3YWRkci5zYV9kYXRhLCB0dW4tPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAkJaWZyLmlmcl9od2FkZHIuc2FfZmFtaWx5ID0gdHVuLT5kZXYtPnR5cGU7CiAJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmlmciwgc2l6ZW9mIGlmcikpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIDA7CisJCQlyZXQgPSAtRUZBVUxUOworCQlicmVhazsKIAogCWNhc2UgU0lPQ1NJRkhXQUREUjoKIAkJLyogU2V0IGh3IGFkZHJlc3MgKi8KQEAgLTEwMzgsMTggKzExOTksMzUgQEAKIAkJcnRubF9sb2NrKCk7CiAJCXJldCA9IGRldl9zZXRfbWFjX2FkZHJlc3ModHVuLT5kZXYsICZpZnIuaWZyX2h3YWRkcik7CiAJCXJ0bmxfdW5sb2NrKCk7Ci0JCXJldHVybiByZXQ7CisJCWJyZWFrOworCisJY2FzZSBUVU5HRVRTTkRCVUY6CisJCXNuZGJ1ZiA9IHR1bi0+c2stPnNrX3NuZGJ1ZjsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmc25kYnVmLCBzaXplb2Yoc25kYnVmKSkpCisJCQlyZXQgPSAtRUZBVUxUOworCQlicmVhazsKKworCWNhc2UgVFVOU0VUU05EQlVGOgorCQlpZiAoY29weV9mcm9tX3VzZXIoJnNuZGJ1ZiwgYXJncCwgc2l6ZW9mKHNuZGJ1ZikpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQl0dW4tPnNrLT5za19zbmRidWYgPSBzbmRidWY7CisJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOwogCX07CiAKLQlyZXR1cm4gMDsKKwl0dW5fcHV0KHR1bik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB0dW5fY2hyX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgb24pCiB7Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gdHVuX2dldChmaWxlKTsKIAlpbnQgcmV0OwogCiAJaWYgKCF0dW4pCkBAIC0xMDcxLDQyICsxMjQ5LDUwIEBACiAJcmV0ID0gMDsKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7CisJdHVuX3B1dCh0dW4pOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdHVuX2Nocl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKIHsKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlOwogCWN5Y2xlX2tlcm5lbF9sb2NrKCk7CiAJREJHMShLRVJOX0lORk8gInR1blg6IHR1bl9jaHJfb3BlblxuIik7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCXRmaWxlID0ga21hbGxvYyhzaXplb2YoKnRmaWxlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZmlsZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJYXRvbWljX3NldCgmdGZpbGUtPmNvdW50LCAwKTsKKwl0ZmlsZS0+dHVuID0gTlVMTDsKKwl0ZmlsZS0+bmV0ID0gZ2V0X25ldChjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnMpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnRmaWxlLT5yZWFkX3dhaXQpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IHRmaWxlOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHR1bl9jaHJfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdHVuX2ZpbGUgKnRmaWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBfX3R1bl9nZXQodGZpbGUpOwogCi0JaWYgKCF0dW4pCi0JCXJldHVybiAwOwogCi0JREJHKEtFUk5fSU5GTyAiJXM6IHR1bl9jaHJfY2xvc2VcbiIsIHR1bi0+ZGV2LT5uYW1lKTsKKwlpZiAodHVuKSB7CisJCURCRyhLRVJOX0lORk8gIiVzOiB0dW5fY2hyX2Nsb3NlXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKLQlydG5sX2xvY2soKTsKKwkJcnRubF9sb2NrKCk7CisJCV9fdHVuX2RldGFjaCh0dW4pOwogCi0JLyogRGV0YWNoIGZyb20gbmV0IGRldmljZSAqLwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JdHVuLT5hdHRhY2hlZCA9IDA7Ci0JcHV0X25ldChkZXZfbmV0KHR1bi0+ZGV2KSk7CisJCS8qIElmIGRlc2lyZWFibGUsIHVucmVnaXN0ZXIgdGhlIG5ldGRldmljZS4gKi8KKwkJaWYgKCEodHVuLT5mbGFncyAmIFRVTl9QRVJTSVNUKSkgeworCQkJc29ja19wdXQodHVuLT5zayk7CisJCQl1bnJlZ2lzdGVyX25ldGRldmljZSh0dW4tPmRldik7CisJCX0KIAotCS8qIERyb3AgcmVhZCBxdWV1ZSAqLwotCXNrYl9xdWV1ZV9wdXJnZSgmdHVuLT5yZWFkcSk7Ci0KLQlpZiAoISh0dW4tPmZsYWdzICYgVFVOX1BFUlNJU1QpKSB7Ci0JCWxpc3RfZGVsKCZ0dW4tPmxpc3QpOwotCQl1bnJlZ2lzdGVyX25ldGRldmljZSh0dW4tPmRldik7CisJCXJ0bmxfdW5sb2NrKCk7CiAJfQogCi0JcnRubF91bmxvY2soKTsKKwlwdXRfbmV0KHRmaWxlLT5uZXQpOworCWtmcmVlKHRmaWxlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE4Nyw3ICsxMzczLDcgQEAKIHN0YXRpYyB1MzIgdHVuX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuIHR1bi0+YXR0YWNoZWQ7CisJcmV0dXJuICEhdHVuLT50ZmlsZTsKIH0KIAogc3RhdGljIHUzMiB0dW5fZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTEyMTYsNDUgKzE0MDIsNiBAQAogCS5zZXRfcnhfY3N1bQk9IHR1bl9zZXRfcnhfY3N1bQogfTsKIAotc3RhdGljIGludCB0dW5faW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQotewotCXN0cnVjdCB0dW5fbmV0ICp0bjsKLQotCXRuID0ga21hbGxvYyhzaXplb2YoKnRuKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHRuID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JSU5JVF9MSVNUX0hFQUQoJnRuLT5kZXZfbGlzdCk7Ci0KLQlpZiAobmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgdHVuX25ldF9pZCwgdG4pKSB7Ci0JCWtmcmVlKHRuKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHR1bl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCi17Ci0Jc3RydWN0IHR1bl9uZXQgKnRuOwotCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4sICpueHQ7Ci0KLQl0biA9IG5ldF9nZW5lcmljKG5ldCwgdHVuX25ldF9pZCk7Ci0KLQlydG5sX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHVuLCBueHQsICZ0bi0+ZGV2X2xpc3QsIGxpc3QpIHsKLQkJREJHKEtFUk5fSU5GTyAiJXMgY2xlYW5lZCB1cFxuIiwgdHVuLT5kZXYtPm5hbWUpOwotCQl1bnJlZ2lzdGVyX25ldGRldmljZSh0dW4tPmRldik7Ci0JfQotCXJ0bmxfdW5sb2NrKCk7Ci0KLQlrZnJlZSh0bik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgdHVuX25ldF9vcHMgPSB7Ci0JLmluaXQgPSB0dW5faW5pdF9uZXQsCi0JLmV4aXQgPSB0dW5fZXhpdF9uZXQsCi19OwogCiBzdGF0aWMgaW50IF9faW5pdCB0dW5faW5pdCh2b2lkKQogewpAQCAtMTI2MywxMCArMTQxMCwxMCBAQAogCXByaW50ayhLRVJOX0lORk8gInR1bjogJXMsICVzXG4iLCBEUlZfREVTQ1JJUFRJT04sIERSVl9WRVJTSU9OKTsKIAlwcmludGsoS0VSTl9JTkZPICJ0dW46ICVzXG4iLCBEUlZfQ09QWVJJR0hUKTsKIAotCXJldCA9IHJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKCZ0dW5fbmV0X2lkLCAmdHVuX25ldF9vcHMpOworCXJldCA9IHJ0bmxfbGlua19yZWdpc3RlcigmdHVuX2xpbmtfb3BzKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidHVuOiBDYW4ndCByZWdpc3RlciBwZXJuZXQgb3BzXG4iKTsKLQkJZ290byBlcnJfcGVybmV0OworCQlwcmludGsoS0VSTl9FUlIgInR1bjogQ2FuJ3QgcmVnaXN0ZXIgbGlua19vcHNcbiIpOworCQlnb3RvIGVycl9saW5rb3BzOwogCX0KIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnR1bl9taXNjZGV2KTsKQEAgLTEyNzQsMTggKzE0MjEsMTcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJ0dW46IENhbid0IHJlZ2lzdGVyIG1pc2MgZGV2aWNlICVkXG4iLCBUVU5fTUlOT1IpOwogCQlnb3RvIGVycl9taXNjOwogCX0KLQlyZXR1cm4gMDsKLQorCXJldHVybiAgMDsKIGVycl9taXNjOgotCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UodHVuX25ldF9pZCwgJnR1bl9uZXRfb3BzKTsKLWVycl9wZXJuZXQ6CisJcnRubF9saW5rX3VucmVnaXN0ZXIoJnR1bl9saW5rX29wcyk7CitlcnJfbGlua29wczoKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCB0dW5fY2xlYW51cCh2b2lkKQogewogCW1pc2NfZGVyZWdpc3RlcigmdHVuX21pc2NkZXYpOwotCXVucmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UodHVuX25ldF9pZCwgJnR1bl9uZXRfb3BzKTsKKwlydG5sX2xpbmtfdW5yZWdpc3RlcigmdHVuX2xpbmtfb3BzKTsKIH0KIAogbW9kdWxlX2luaXQodHVuX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi1maXJtd2FyZS5oIGIvZHJpdmVycy9uZXQvdHlwaG9vbi1maXJtd2FyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODJkNjllLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24tZmlybXdhcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3NzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAxOTk5LTIwMDQgM0NvbSBDb3Jwb3JhdGlvbi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBvZiB0aGUgM2M5OTBpbWcuaAotICogbWljcm9jb2RlIHNvZnR3YXJlIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gVGhlIG5hbWUgb2YgM0NvbSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgM0NPTSBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBVU0VSIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTIFRIQVQgUFVSQ0hBU0UgT1IgVVNFIE9GIFRIRSAzYzk5MGltZy5oCi0gKiBNSUNST0NPREUgU09GVFdBUkUgV0lMTCBOT1QgQ1JFQVRFIE9SIEdJVkUgR1JPVU5EUyBGT1IgQSBMSUNFTlNFIEJZCi0gKiBJTVBMSUNBVElPTiwgRVNUT1BQRUwsIE9SIE9USEVSV0lTRSBJTiBBTlkgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUwotICogKFBBVEVOVCwgQ09QWVJJR0hULCBUUkFERSBTRUNSRVQsIE1BU0sgV09SSywgT1IgT1RIRVIgUFJPUFJJRVRBUlkgUklHSFQpCi0gKiBFTUJPRElFRCBJTiBBTlkgT1RIRVIgM0NPTSBIQVJEV0FSRSBPUiBTT0ZUV0FSRSBFSVRIRVIgU09MRUxZIE9SIElOCi0gKiBDT01CSU5BVElPTiBXSVRIIFRIRSAzYzk5MGltZy5oIE1JQ1JPQ09ERSBTT0ZUV0FSRQotICovCi0KLSAvKiB2ZXIgMDMuMDAxLjAwOCAqLwotc3RhdGljIGNvbnN0IHU4IHR5cGhvb25fZmlybXdhcmVfaW1hZ2VbXSA9IHsKLTB4NTQsIDB4NTksIDB4NTAsIDB4NDgsIDB4NGYsIDB4NGYsIDB4NGUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGNiLCAweDk5LCAweGIxLCAweGQ0LAotMHg0YywgMHhiOCwgMHhkMCwgMHg0YiwgMHgzMiwgMHgwMiwgMHhkNCwgMHhlZSwgMHg3MywgMHg3ZSwgMHgwYiwgMHgxMywKLTB4OWIsIDB4YzAsIDB4YWUsIDB4ZjQsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4ZmMsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweGZmLCAweGZmLCAweDM5LCAweDAwLCAweDAwLCAweGVhLCAweDA1LCAweDAwLCAweDAwLCAweGVhLAotMHgwNCwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwMCwgMHgwMCwgMHhlYSwKLTB4MDEsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MzIsIDB4MDIsIDB4MDAsIDB4ZWEsIDB4YzUsIDB4MTQsIDB4MDAsIDB4ZWEsCi0weDA3LCAweDAwLCAweDJkLCAweGU5LCAweDBlLCAweDAwLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDBmLCAweGUxLAotMHhkMCwgMHgyMCwgMHg5ZiwgMHhlNSwgMHgxMiwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4MDEsIDB4MDAsIDB4ODAsIDB4ZTAsIDB4MDQsIDB4MjAsIDB4ODEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4ZTEsCi0weGZjLCAweGZmLCAweGZmLCAweDFhLCAweDBlLCAweGYwLCAweGEwLCAweGUxLCAweDAwLCAweGEwLCAweGEwLCAweGUxLAotMHgwZSwgMHhiMCwgMHhhMCwgMHhlMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywgMHhhOCwgMHgxMCwgMHg5ZiwgMHhlNSwKLTB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsIDB4YTQsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsCi0weDAxLCAweDE2LCAweGEwLCAweGUzLCAweDAwLCAweDAwLCAweDkxLCAweGU1LCAweDAxLCAweDAwLCAweDgwLCAweGUzLAotMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwgMHhkNywgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4ODgsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4ZGIsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDdjLCAweGQwLCAweDlmLCAweGU1LCAweGQyLCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAotMHg3NCwgMHhkMCwgMHg5ZiwgMHhlNSwgMHhkMSwgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4NmMsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4OWIsIDB4MTQsIDB4MDAsIDB4ZWIsIDB4ZDMsIDB4MDAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweGYwLCAweDIxLCAweGUxLCAweDYwLCAweGQwLCAweDlmLCAweGU1LCAweDYwLCAweDAwLCAweDlmLCAweGU1LAotMHg2MCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHg2MCwgMHgyMCwgMHg5ZiwgMHhlNSwgMHhkYiwgMHhmZiwgMHhmZiwgMHhlYiwKLTB4NWMsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4NWMsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4YTAsIDB4ZTMsCi0weGQ3LCAweGZmLCAweGZmLCAweGViLCAweDU0LCAweDAwLCAweDlmLCAweGU1LCAweDU0LCAweDEwLCAweDlmLCAweGU1LAotMHhkNCwgMHhmZiwgMHhmZiwgMHhlYiwgMHgwYSwgMHgwMCwgMHhhMCwgMHhlMSwgMHgwYiwgMHhmMCwgMHhhMCwgMHhlMSwKLTB4ZDMsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4ZDQsIDB4ZmYsIDB4ZmYsIDB4ZWIsCi0weDNjLCAweGEwLCAweDlmLCAweGU1LCAweDFhLCAweGZmLCAweDJmLCAweGUxLCAweGM2LCAweGZmLCAweGZmLCAweGVhLAotMHgxNSwgMHgyMSwgMHhmZiwgMHhmZiwgMHgwYywgMHgwMCwgMHgxMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgxMCwgMHgwMCwKLTB4M2MsIDB4MzgsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MzcsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4M2YsIDB4MDAsIDB4ODAsCi0weDdjLCAweDM0LCAweDAwLCAweDgwLCAweDgwLCAweDBmLCAweDAwLCAweDAwLCAweDgwLCAweDMwLCAweDAwLCAweDgwLAotMHhhZCwgMHhkZSwgMHhhZCwgMHhkZSwgMHhiMCwgMHhiYiwgMHgwMCwgMHgwMCwgMHgyNCwgMHhhYiwgMHgyMCwgMHg0MCwKLTB4NDgsIDB4MjksIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4YmQsIDB4YmEsIDB4MjEsIDB4NDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4NTgsIDB4NTcsIDB4MDAsIDB4MDAsIDB4ODYsIDB4NGIsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsIDB4ZmYsIDB4ZmYsCi0weGIwLCAweGI1LCAweDA3LCAweDFjLCAweDEyLCAweDRkLCAweDAwLCAweDI0LCAweDI4LCAweDY4LCAweDAwLCAweDI4LAotMHgxZSwgMHhkMCwgMHgzOCwgMHgxYywgMHgxMCwgMHg0OSwgMHgwNCwgMHhmMCwgMHg3YiwgMHhmZCwgMHgyOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDAsIDB4MjgsIDB4MTUsIDB4ZDAsIDB4MzgsIDB4MDEsIDB4MGQsIDB4NDksCi0weDQwLCAweDE4LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDQxLCAweDZiLCAweDgwLCAweDI5LAotMHgwYywgMHhkMiwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MywgMHgyOCwgMHg2OCwgMHhjMSwgMHg2OSwgMHhjMCwgMHg0NiwKLTB4MjksIDB4NjAsIDB4MzksIDB4MDcsIDB4NDEsIDB4NjAsIDB4MDQsIDB4NjIsIDB4YzcsIDB4NjIsIDB4YjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDIwLCAweDFjLCAweGZhLCAweGU3LCAweGU4LCAweDE3LCAweDAwLCAweDgwLAotMHhlZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHgwMiwgMHg0OSwgMHgwYSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4YzIsIDB4NjEsIDB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsCi0weGU4LCAweDE3LCAweDAwLCAweDgwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMSwKLTB4YzAsIDB4MTAsIDB4ODEsIDB4ZTMsIDB4MDEsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsCi0weDAwLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDBmLCAweGUxLAotMHhjMCwgMHgwMCwgMHg4MCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwKLTB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4YzAsIDB4MDAsIDB4YzAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDBmLCAweGUxLCAweDQwLCAweDAwLCAweDgwLCAweGUzLAotMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwKLTB4ODAsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCi0weDAwLCAweDAwLCAweDAwLCAweDEyLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDUwLCAweGUzLAotMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHg4MCwgMHgwMCwgMHhjMCwgMHgxMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4YzAsIDB4ZTMsCi0weDAwLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDkxLCAweDAwLCAweDAwLCAweGUwLAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMSwgMHgyMCwgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMCwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ODAsIDB4YjUsIDB4MDgsIDB4NGYsIDB4NjQsIDB4MjgsIDB4MDQsIDB4ZDMsCi0weDY0LCAweDIwLCAweDM4LCAweDYzLCAweDAwLCAweDIwLCAweGMwLCAweDQzLCAweDAzLCAweGUwLCAweDM4LCAweDYzLAotMHgwNCwgMHg0OSwgMHgwNSwgMHhmMCwgMHgwMSwgMHhmYiwgMHg3OCwgMHg2MywgMHhiOCwgMHg2MywgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODgsIDB4MTMsIDB4MDAsIDB4MDAsCi0weDgwLCAweGI0LCAweDEwLCAweDRiLCAweDAwLCAweDIyLCAweDFmLCAweDZiLCAweDY0LCAweDJmLCAweDAzLCAweGQyLAotMHgwOSwgMHg2OCwgMHgwOSwgMHg2OCwgMHg0OSwgMHgwOCwgMHgwMiwgMHhkMiwgMHgxMCwgMHgxYywgMHg4MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4MTksIDB4MWMsIDB4ZGIsIDB4NmIsIDB4NGYsIDB4NmIsIDB4YmIsIDB4NDIsIDB4MDUsIDB4ZDIsCi0weDQwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDE4LCAweDE4LCAweGM4LCAweDYzLCAweGYxLCAweGU3LAotMHg0MSwgMHg2OCwgMHgwNSwgMHg0YiwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MCwgMHgwNCwgMHg0OCwgMHhjMSwgMHg2YiwKLTB4MDEsIDB4MzEsIDB4YzEsIDB4NjMsIDB4MDIsIDB4MjAsIDB4ZTgsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLAotMHgxNSwgMHg0YywgMHgwMCwgMHgyMCwgMHgyMSwgMHg2YiwgMHg2NCwgMHgyOSwgMHgwYiwgMHhkMiwgMHhiOSwgMHg2ZSwKLTB4NDksIDB4MDgsIDB4MDgsIDB4ZDMsIDB4MjEsIDB4NmMsIDB4YTIsIDB4NmIsIDB4OTEsIDB4NDIsIDB4MDcsIDB4ZDIsCi0weGZhLCAweDFkLCAweDM5LCAweDMyLCAweDUyLCAweDhiLCAweDg5LCAweDE4LCAweDIxLCAweDY0LCAweDkwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3OCwgMHg2YSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MiwKLTB4MzgsIDB4NmIsIDB4MDIsIDB4ZjAsIDB4MmQsIDB4ZmUsIDB4MzgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4ZTgsIDB4ZmEsCi0weDAxLCAweDIwLCAweGJiLCAweDIzLCAweDFiLCAweDAxLCAweGUxLCAweDE4LCAweGM4LCAweDczLCAweDA1LCAweDQ5LAotMHgwYSwgMHg2YywgMHgxMiwgMHgxOCwgMHgwYSwgMHg2NCwgMHgwNCwgMHg0OSwgMHg4YSwgMHg2ZCwgMHgxMiwgMHgxOCwKLTB4OGEsIDB4NjUsIDB4ZTQsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweDgwLCAweGI0LCAweDBhLCAweDQ4LCAweGMwLCAweDZkLCAweDAyLCAweDIzLAotMHgxOCwgMHg0MCwgMHgwOSwgMHg0YSwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHhkMSwgMHg2MywKLTB4MTEsIDB4NjQsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDYsIDB4NDgsIDB4MDcsIDB4NjgsIDB4N2IsIDB4MWMsCi0weDAzLCAweDYwLCAweDBhLCAweDJmLCAweGY3LCAweGQzLCAweDAxLCAweDYwLCAweGYzLCAweGU3LCAweDAwLCAweDAwLAotMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg4MCwKLTB4NzAsIDB4NDcsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MDAsIDB4MGMsIDB4MTAsIDB4MTgsIDB4MGEsIDB4MDQsCi0weDEyLCAweDBjLCAweDA5LCAweDBjLCAweDUxLCAweDE4LCAweDA4LCAweDE4LCAweDAxLCAweDBjLCAweDA1LCAweGQwLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMCwgMHgwYywgMHgwOCwgMHgxOCwgMHgwMSwgMHgwYywgMHhmOSwgMHhkMSwKLTB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjksCi0weDE4LCAweGQwLCAweDRmLCAweDA4LCAweDdiLCAweDFlLCAweDAwLCAweDJmLAotMHgwNiwgMHhkMCwgMHgwNywgMHg4OCwgMHhiYSwgMHgxOCwgMHgwMiwgMHgzMCwgMHgxZiwgMHgxYywgMHgwMSwgMHgzYiwKLTB4MDAsIDB4MmYsIDB4ZjgsIDB4ZDEsIDB4NDksIDB4MDgsIDB4MDMsIDB4ZDMsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDgyLCAweDE4LCAweDEwLCAweDBjLCAweDA1LCAweGQwLCAweDEwLCAweDA0LCAweDAwLCAweDBjLAotMHgxMSwgMHgwYywgMHg0MiwgMHgxOCwgMHgxMCwgMHgwYywgMHhmOSwgMHhkMSwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwYywKLTB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjUsIDB4ODMsIDB4ODksIDB4YzcsIDB4ODksIDB4ZmIsIDB4MTgsCi0weDA3LCAweDhhLCAweGZiLCAweDE4LCAweDQ3LCAweDhhLCAweGZiLCAweDE4LCAweDQwLCAweDdhLCAweDAwLCAweDAyLAotMHhjNywgMHgxOCwgMHgzOCwgMHgwYywgMHgwNSwgMHhkMCwgMHgzOCwgMHgwNCwgMHgwMCwgMHgwYywgMHgzYiwgMHgwYywKLTB4YzcsIDB4MTgsIDB4MzgsIDB4MGMsIDB4ZjksIDB4ZDEsIDB4MDgsIDB4MWMsIDB4MTEsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weGM4LCAweGZmLCAweDAxLCAweDFjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweGIwLCAweGZmLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHgwMiwgMHgyMywgMHg4MiwgMHg2OCwgMHgxYSwgMHg0MCwKLTB4MDAsIDB4MjcsIDB4MDAsIDB4MmEsIDB4MGYsIDB4ZDAsIDB4MGEsIDB4NGEsIDB4OTMsIDB4NjksIDB4MDEsIDB4MzMsCi0weDkzLCAweDYxLCAweDBhLCAweDY4LCAweDhiLCAweDY4LCAweDlhLCAweDE4LCAweDAwLCAweDY4LCAweDFjLCAweDE4LAotMHg1NywgMHg4MSwgMHgwOSwgMHg2OSwgMHgxMCwgMHgxYywgMHhmZiwgMHhmNywgMHhhYywgMHhmZiwgMHhjMCwgMHg0MywKLTB4NjAsIDB4ODEsIDB4MzgsIDB4MWMsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA0LCAweDIzLCAweDgyLCAweDY4LCAweDFhLCAweDQwLAotMHgwMCwgMHgyNywgMHgwMCwgMHgyYSwgMHgxMSwgMHhkMCwgMHg0YSwgMHg2OCwgMHg1MiwgMHgwOSwgMHgwZSwgMHhkMywKLTB4MDksIDB4NGEsIDB4MTMsIDB4NmEsIDB4MDEsIDB4MzMsIDB4MTMsIDB4NjIsIDB4Y2IsIDB4NjgsIDB4MDIsIDB4NjgsCi0weDljLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDNhLCAweDFhLCAweDQzLCAweDEyLCAweDY4LAotMHgwMCwgMHhmMCwgMHgyZSwgMHhmOCwgMHgyMCwgMHg4MiwgMHgzOCwgMHgxYywgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4ODAsIDB4MjMsCi0weDgyLCAweDY4LCAweDFhLCAweDQwLCAweDAwLCAweDI0LCAweDAwLCAweDJhLCAweDE1LCAweGQwLCAweDRhLCAweDY4LAotMHg5MiwgMHgwOSwgMHgxMiwgMHhkMywgMHgwYiwgMHg0YSwgMHhkMywgMHg2OSwgMHgwMSwgMHgzMywgMHhkMywgMHg2MSwKLTB4Y2IsIDB4NjgsIDB4MDIsIDB4NjgsIDB4OWYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4M2EsCi0weDFhLCAweDQzLCAweDEyLCAweDY4LCAweDAwLCAweGYwLCAweDBlLCAweGY4LCAweDAwLCAweDI4LCAweDAwLCAweGQxLAotMHgwNCwgMHg0OCwgMHhjMCwgMHg0NiwgMHhmOCwgMHg4MCwgMHgyMCwgMHgxYywgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weGIwLCAweGI1LCAweDE0LCAweDFjLCAweDA1LCAweDFjLCAweDBmLCAweDFjLCAweDM4LCAweDY5LCAweGI5LCAweDY4LAotMHg0MSwgMHgxOCwgMHgzOCwgMHg2OCwgMHhmZiwgMHhmNywgMHg1MywgMHhmZiwgMHhjMCwgMHg0MywgMHgwMSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MzksIDB4ZmYsIDB4MDQsIDB4MWMsIDB4YjgsIDB4NjgsCi0weDc5LCAweDY5LCAweDQwLCAweDE4LCAweDY5LCAweDY4LCAweDg4LCAweDQyLCAweDBjLCAweGQyLCAweDJhLCAweDY4LAotMHgxMiwgMHgxOCwgMHgwOSwgMHgxYSwgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwNSwgMHhmOSwgMHhjMCwgMHg0MywKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MjYsIDB4ZmYsIDB4MDQsIDB4MWMsCi0weGUwLCAweDQzLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhiOCwgMHg2YiwgMHhjMCwgMHgwOCwgMHgxYSwgMHhkMywgMHhiOCwgMHg2YSwKLTB4ZjksIDB4NmIsIDB4NDAsIDB4MTgsIDB4NzksIDB4NmMsIDB4MDAsIDB4ZjAsIDB4ZWQsIDB4ZjgsIDB4YzAsIDB4NDMsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDBhLCAweDQ4LCAweDA3LCAweGQwLCAweDIwLCAweDIzLCAweGI5LCAweDY5LAotMHgxOSwgMHg0MywgMHhiOSwgMHg2MSwgMHgwMSwgMHg2YiwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2MywgMHgwNywgMHhlMCwKLTB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsIDB4YjksIDB4NjksIDB4MTksIDB4NDMsIDB4YjksIDB4NjEsIDB4NDEsIDB4NmEsCi0weDAxLCAweDMxLCAweDQxLCAweDYyLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhiOCwgMHg2YiwgMHg0MSwgMHgwOSwKLTB4MWMsIDB4ZDMsIDB4YzAsIDB4MDgsIDB4MWEsIDB4ZDMsIDB4ZjgsIDB4MWQsIDB4MzksIDB4MzAsIDB4MDAsIDB4N2IsCi0weDA2LCAweDI4LCAweDE1LCAweGQxLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDUzLCAweGY4LCAweDAxLCAweDFjLAotMHgwYSwgMHg0OCwgMHgwNywgMHhkMCwgMHg0MCwgMHgyMywgMHhiOSwgMHg2OSwKLTB4MTksIDB4NDMsIDB4YjksIDB4NjEsIDB4ODEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODEsIDB4NjMsIDB4MDcsIDB4ZTAsCi0weDAxLCAweDIzLCAweDliLCAweDAyLCAweGI5LCAweDY5LCAweDE5LCAweDQzLCAweGI5LCAweDYxLCAweGMxLCAweDZhLAotMHgwMSwgMHgzMSwgMHhjMSwgMHg2MiwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4YjgsIDB4NmIsIDB4ODEsIDB4MDksCi0weDJjLCAweGQzLCAweGMwLCAweDA4LCAweDJhLCAweGQzLCAweGY4LCAweDFkLCAweDM5LCAweDMwLCAweDAwLCAweDdiLAotMHgxMSwgMHgyOCwgMHgyNSwgMHhkMSwgMHhiOCwgMHg2YSwgMHgzOSwgMHg2YywgMHg0MCwgMHgxOCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MDYsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDUsIDB4MDQsIDB4MmQsIDB4MGMsCi0weDBmLCAweDRjLCAweDExLCAweGQwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDFmLCAweGY4LCAweDAwLCAweDI4LAotMHgwYywgMHhkMCwgMHhhOCwgMHg0MiwgMHgwMiwgMHhkMSwgMHgwYywgMHg0YiwgMHg5OCwgMHg0MiwgMHgwNywgMHhkMCwKLTB4ODAsIDB4MjMsIDB4YjgsIDB4NjksIDB4MTgsIDB4NDMsIDB4YjgsIDB4NjEsIDB4NjAsIDB4NmIsIDB4MDEsIDB4MzAsCi0weDYwLCAweDYzLCAweDA3LCAweGUwLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweGI4LCAweDY5LCAweDE4LCAweDQzLAotMHhiOCwgMHg2MSwgMHhhMCwgMHg2YSwgMHgwMSwgMHgzMCwgMHhhMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHhiMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weGYwLCAweGI1LCAweGZmLCAweGIwLCAweDk5LCAweGIwLCAweDA0LCAweDFjLCAweGUwLCAweDZiLCAweDYxLCAweDZjLAotMHgwOSwgMHgxOCwgMHgwMywgMHhhYSwgMHg4NSwgMHgxOCwgMHhhMywgMHg2YSwgMHgwMCwgMHgyMCwgMHg4YSwgMHgwOCwKLTB4MDEsIDB4MzIsIDB4OTcsIDB4OTIsIDB4MDcsIDB4ZDAsIDB4ODIsIDB4MDAsIDB4OWYsIDB4NTgsIDB4MDMsIDB4YWUsCi0weGI3LCAweDUwLCAweDk3LCAweDlhLCAweDAxLCAweDMwLCAweDgyLCAweDQyLCAweGY3LCAweGQ4LCAweDYwLCAweDZhLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwNCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4MDIsIDB4OTAsIDB4MDIsIDB4YWYsIDB4M2YsIDB4ODgsIDB4MDMsIDB4YTgsIDB4ZmYsIDB4ZjcsIDB4ODcsIDB4ZmUsCi0weGMwLCAweDQzLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDZkLCAweGZlLAotMHgwNywgMHgxYywgMHhlMCwgMHg2YiwgMHhhMSwgMHg2YywgMHg0MCwgMHgxOCwgMHg2MSwgMHg2YSwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MDgsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4OTEsCi0weDAxLCAweGE5LCAweDA5LCAweDg4LCAweDAxLCAweDMxLCAweDg4LCAweDQyLCAweDBjLCAweGQyLCAweGEyLCAweDZhLAotMHgxMiwgMHgxOCwgMHgwOSwgMHgxYSwgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgyZiwgMHhmOCwgMHhjMCwgMHg0MywKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NTAsIDB4ZmUsIDB4MDcsIDB4MWMsCi0weGE4LCAweDg5LCAweGU5LCAweDg5LCAweDA4LCAweDE4LCAweDI5LCAweDhhLCAweDA4LCAweDE4LCAweDY5LCAweDhhLAotMHgwOCwgMHgxOCwgMHg2OSwgMHg3YSwgMHgwOSwgMHgwMiwgMHgwOCwgMHgxOCwgMHhhMSwgMHg2YywgMHg2MiwgMHg2YywKLTB4ODksIDB4MWEsIDB4MGEsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MTEsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDA5LCAweDE4LCAweDA4LCAweDBjLCAweDA1LCAweGQwLCAweDA4LCAweDA0LAotMHgwMCwgMHgwYywgMHgwOSwgMHgwYywgMHg0MSwgMHgxOCwgMHgwOCwgMHgwYywgMHhmOSwgMHhkMSwgMHgzOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4MmYsIDB4ZmUsIDB4YzAsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4N2YsIDB4YjAsCi0weDE5LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGIwLCAweGI0LCAweDAwLCAweDIyLAotMHgwMCwgMHgyOSwgMHgyZSwgMHhkMCwgMHg4MywgMHgwNywgMHg5YiwgMHgwZiwgMHhkYywgMHgwMCwgMHg0NywgMHgxOCwKLTB4MDQsIDB4MjUsIDB4ZWYsIDB4MWIsIDB4YmYsIDB4MDcsIDB4YmYsIDB4MGYsIDB4ZmYsIDB4MDAsIDB4ODAsIDB4MDgsCi0weDgwLCAweDAwLCAweDU5LCAweDE4LCAweDAzLCAweDMxLCAweDg5LCAweDA4LCAweDRkLCAweDFlLCAweDAyLCAweGM4LAotMHhlMSwgMHg0MCwgMHhhMSwgMHg0MCwgMHg2YiwgMHgxZSwgMHgwMCwgMHgyZCwgMHgwOSwgMHhkMCwgMHgwYywgMHgwNCwKLTB4MjQsIDB4MGMsIDB4YTIsIDB4MTgsIDB4MDksIDB4MGMsIDB4OGEsIDB4MTgsIDB4MDIsIDB4YzgsIDB4MWMsIDB4MWMsCi0weDAxLCAweDNiLCAweDAwLCAweDJjLCAweGY1LCAweGQxLCAweGI5LCAweDQwLCAweDA4LCAweDFjLCAweGY4LCAweDQwLAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHg4OSwgMHgxOCwgMHgwMCwgMHgwYywgMHg0MiwgMHgxOCwgMHgxMCwgMHgwYywKLTB4MDUsIDB4ZDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTEsIDB4MGMsIDB4NDIsIDB4MTgsIDB4MTAsIDB4MGMsCi0weGY5LCAweGQxLCAweDEwLCAweDA0LCAweDAwLCAweDBjLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHg5MCwgMHhiNCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgyNywgMHgxMSwgMHg0OSwgMHg0MiwgMHgwMCwgMHgxMiwgMHgxOCwKLTB4ZDIsIDB4MDAsIDB4NTMsIDB4MTgsIDB4OWMsIDB4NjgsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDAzLCAweDFiLCAweDBiLCAweDhhLCAweDU4LAotMHgxMiwgMHgwMywgMHgxMiwgMHgwYiwgMHg5MywgMHg0MiwgMHgwYywgMHhkMSwgMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwKLTB4ZWMsIDB4ZDMsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NmEsIDB4MDEsIDB4MDMsIDB4MDksIDB4MGIsIDB4MDcsIDB4NDgsCi0weDAwLCAweDZmLCAweDAwLCAweDAzLCAweDAwLCAweDBiLCAweDgxLCAweDQyLCAweDAyLCAweGQwLCAweDM4LCAweDFjLAotMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYiwgMHhlNywgMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwKLTB4MDAsIDB4NDAsIDB4MTQsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTgsIDB4YjQsIDB4MTQsIDB4NGEsCi0weGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDgzLCAweDAwLCAweDEzLCAweDQ4LCAweGMwLCAweDU4LCAweDA3LCAweDAzLAotMHgzZiwgMHgwYiwgMHgxMiwgMHg0OCwgMHhjMCwgMHg1OCwgMHgwMiwgMHgwMywgMHgxMiwgMHgwYiwgMHgxMSwgMHg0OCwKLTB4YzAsIDB4NTgsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4MTAsIDB4NGMsIDB4ZTQsIDB4NTgsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDliLCAweDAwLCAweGNjLCAweDAwLCAweDAxLCAweDIxLAotMHg5OCwgMHg0MiwgMHgwMSwgMHhkMSwgMHgwOCwgMHgxYywgMHgwOSwgMHhlMCwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwKLTB4MTAsIDB4MWEsIDB4ZGEsIDB4MWIsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4MTgsIDB4MWEsIDB4ODQsIDB4NDIsCi0weGY0LCAweGQzLCAweDAwLCAweDIwLCAweDk4LCAweGJjLCAweDcwLCAweDQ3LCAweDU1LCAweDU1LCAweDU1LCAweDU1LAotMHgyMCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4MTgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MTMsIDB4MDQsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4M2EsCi0weDgwLCAweDAwLCAweDBiLCAweDFjLCAweDEzLCAweDQ5LCAweDBmLCAweDU4LCAweGMwLCAweDQ2LCAweDNiLCAweDYwLAotMHgwYiwgMHg1OCwgMHhjMCwgMHg0NiwgMHg1YSwgMHg2MCwgMHgwYSwgMHg1OCwgMHgwOCwgMHgzMiwgMHgxMCwgMHg0YiwKLTB4MWIsIDB4NTgsIDB4OWEsIDB4NDIsIDB4MDEsIDB4ZDMsIDB4MGYsIDB4NGEsIDB4MTIsIDB4NTgsIDB4MGYsIDB4NGIsCi0weDFmLCAweDU4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDNiLCAweDQzLCAweDFiLCAweDY4LCAweDliLCAweDAwLAotMHgxNywgMHgwMywgMHgzZiwgMHgwYiwgMHg5ZiwgMHg0MiwgMHgwNiwgMHhkMSwgMHgwYSwgMHg0OCwgMHhjMSwgMHg2OCwKLTB4MDEsIDB4MzEsIDB4YzEsIDB4NjAsIDB4MDEsIDB4MjAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDgsIDB4NGIsCi0weDFiLCAweDU4LCAweGMwLCAweDQ2LCAweDFhLCAweDYwLCAweDBhLCAweDUwLCAweDAwLCAweDIwLCAweGY2LCAweGU3LAotMHgwOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4MTgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4ODAsCi0weGZmLCAweDVmLCAweDJkLCAweGU5LCAweDQ4LCAweGZlLCAweGZmLCAweGViLCAweDAxLCAweGI2LCAweGEwLCAweGUzLAotMHgwMSwgMHhiMSwgMHg4YiwgMHhlMiwgMHgwMiwgMHg4YSwgMHhhMCwgMHhlMywgMHgwMSwgMHg3YSwgMHhhMCwgMHhlMywKLTB4MDEsIDB4YTksIDB4YTAsIDB4ZTMsIDB4MDEsIDB4NTYsIDB4YTAsIDB4ZTMsIDB4YzgsIDB4NjAsIDB4OWYsIDB4ZTUsCi0weGM4LCAweDkwLCAweDlmLCAweGU1LCAweDE0LCAweDQwLCAweDliLCAweGU1LCAweDAwLCAweDAwLCAweDU0LCAweGUzLAotMHgyYywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMywgMHgwYSwgMHgxNCwgMHhlMywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwYSwKLTB4MGMsIDB4MDAsIDB4OTYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTMsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MGEsCi0weDAxLCAweDBhLCAweDE0LCAweGUzLCAweDA1LCAweDAwLCAweDAwLCAweDBhLCAweDFjLCAweDAwLCAweDk2LCAweGU1LAotMHgwMSwgMHgwYSwgMHhjMCwgMHhlMywgMHgxYywgMHgwMCwgMHg4NiwgMHhlNSwgMHgxYywgMHgwMCwgMHg4NSwgMHhlNSwKLTB4MTQsIDB4NzAsIDB4ODUsIDB4ZTUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDIsIDB4MGEsIDB4MTQsIDB4ZTMsCi0weDA0LCAweDAwLCAweDAwLCAweDBhLCAweDFjLCAweDAwLCAweDk2LCAweGU1LCAweDAyLCAweDBhLCAweGMwLCAweGUzLAotMHgxYywgMHgwMCwgMHg4NiwgMHhlNSwgMHgxYywgMHgwMCwgMHg4NSwgMHhlNSwgMHgxNCwgMHg4MCwgMHg4NSwgMHhlNSwKLTB4MDEsIDB4MDksIDB4MTQsIDB4ZTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsCi0weDAxLCAweDA5LCAweGMwLCAweGUzLCAweDFjLCAweDAwLCAweDg2LCAweGU1LCAweDFjLCAweDAwLCAweDg1LCAweGU1LAotMHgxNCwgMHhhMCwgMHg4NSwgMHhlNSwgMHgwMiwgMHgwMCwgMHgxNCwgMHhlMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgxYiwKLTB4MDEsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4NTQsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDIsIDB4MGIsIDB4MTQsIDB4ZTMsCi0weDY3LCAweDAwLCAweDAwLCAweDFiLCAweDAxLCAweDBiLCAweDE0LCAweGUzLCAweDIwLCAweDAwLCAweDAwLCAweDFiLAotMHgxOCwgMHgwMCwgMHg5OSwgMHhlNSwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHgxOCwgMHgwMCwgMHg4OSwgMHhlNSwKLTB4ZDUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsIDB4MDEsIDB4MGEsIDB4YzAsIDB4ZTMsCi0weDFjLCAweDAwLCAweDg2LCAweGU1LCAweDFjLCAweDAwLCAweDg1LCAweGU1LAotMHgxNCwgMHg3MCwgMHg4NSwgMHhlNSwgMHhlMSwgMHhmZiwgMHhmZiwgMHhlYSwgMHhmZiwgMHg1ZiwgMHhiZCwgMHhlOCwKLTB4MDQsIDB4ZjAsIDB4NWUsIDB4ZTIsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCi0weDEwLCAweDEwLCAweDFmLCAweGU1LCAweDE0LCAweDMwLCAweDkxLCAweGU1LCAweDAwLCAweDIwLCAweGMzLCAweGUxLAotMHgxNCwgMHgyMCwgMHg4MSwgMHhlNSwgMHgwMSwgMHgxNiwgMHhhMCwgMHhlMywgMHgwYywgMHgyMCwgMHg4MSwgMHhlNSwKLTB4MGIsIDB4MTIsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsIDB4MTgsIDB4MTAsIDB4OWYsIDB4ZTUsCi0weGIwLCAweDI0LCAweGQxLCAweGUxLCAweDAxLCAweDIwLCAweDgyLCAweGUyLCAweGIwLCAweDI0LCAweGMxLCAweGUxLAotMHgzYywgMHgyMCwgMHg5MSwgMHhlNSwgMHgwMCwgMHgwMCwgMHg4MiwgMHhlMSwgMHgzYywgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weGZlLCAweGZmLCAweGZmLCAweGVhLCAweDAxLCAweDBiLCAweGEwLCAweGUzLCAweDAxLCAweDE2LCAweGEwLCAweGUzLAotMHgxNCwgMHgwMCwgMHg4MSwgMHhlNSwgMHgwMCwgMHgxYSwgMHg4MSwgMHhlMSwgMHgyNCwgMHgyMCwgMHg5MSwgMHhlNSwKLTB4NzAsIDB4MDAsIDB4MWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MjAsIDB4ODAsIDB4ZTUsCi0weDI4LCAweDEwLCAweDkxLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDEwLCAweDgwLCAweGU1LAotMHgyYywgMHgyMCwgMHg5MCwgMHhlNSwgMHgwMSwgMHgyMCwgMHg4MiwgMHhlMiwgMHgyYywgMHgyMCwgMHg4MCwgMHhlNSwKLTB4M2YsIDB4MDAsIDB4MDEsIDB4ZTIsIDB4M2YsIDB4MDAsIDB4NTAsIDB4ZTMsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4MTEsCi0weDE4LCAweDAwLCAweDlmLCAweGU1LCAweDAwLCAweDEwLCAweDkwLCAweGU1LCAweDAxLCAweDEwLCAweDgxLCAweGUyLAotMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgwMiwgMHgxOCwgMHhhMCwgMHhlMywgMHgwYiwgMHgwMiwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzAsIDB4MDQsIDB4MDAsIDB4ODAsCi0weDAxLCAweDA2LCAweGEwLCAweGUzLCAweDAxLCAweDAxLCAweDgwLCAweGUyLCAweDAwLCAweDEwLCAweDkwLCAweGU1LAotMHgwMSwgMHgwOCwgMHgxMSwgMHhlMywgMHgwYiwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMiwgMHgxOSwgMHg4MSwgMHhlMiwKLTB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MjAsIDB4OTAsIDB4ZTUsIDB4NDIsIDB4MjgsIDB4YjAsIDB4ZTEsCi0weDA1LCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDkwLCAweGU1LCAweDAyLCAweDBjLCAweDEwLCAweGUzLAotMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNiwgMHgwNywgMHhhMCwgMHhlMywgMHg0YywgMHgxMSwgMHg4MCwgMHhlNSwKLTB4MDMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MGMsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDQwLCAweDEwLCAweDgwLCAweGU1LCAweGZmLCAweGZmLCAweGZmLCAweGVhLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwNiwgMHhhMCwgMHhlMywgMHgwMSwgMHgwMSwgMHg4MCwgMHhlMiwKLTB4MDAsIDB4MTAsIDB4OTAsIDB4ZTUsIDB4MDEsIDB4MDgsIDB4MTEsIDB4ZTMsIDB4MGMsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAyLCAweDE5LCAweDgxLCAweGUyLCAweDA1LCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDIwLCAweDkwLCAweGU1LAotMHg0MiwgMHgyOCwgMHhiMCwgMHhlMSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg5MCwgMHhlNSwKLTB4MDIsIDB4MGMsIDB4MTAsIDB4ZTMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDYsIDB4MDcsIDB4YTAsIDB4ZTMsCi0weDRjLCAweDExLCAweDgwLCAweGU1LCAweDAzLCAweDAwLCAweDAwLCAweGVhLCAweDRjLCAweDAwLCAweDFmLCAweGU1LAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHg4MCwgMHhlNSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYSwKLTB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDIsIDB4MWIsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsCi0weDE0LCAweDEwLCAweDgwLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDgwLCAweDIxLCAweDFmLCAweGU1LAotMHgxNCwgMHgzMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4MCwgMHhlNSwKLTB4MWMsIDB4MDAsIDB4OTIsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDE0LCAweDEwLCAweDgyLCAweGU1LCAweDAxLCAweDA2LCAweGEwLCAweGUzLAotMHgxYywgMHgxMCwgMHg4MiwgMHhlNSwgMHgwYywgMHgxMCwgMHg4MCwgMHhlNSwgMHgxYywgMHgxMCwgMHg5MiwgMHhlNSwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsCi0weGMwLCAweDIxLCAweDFmLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDEwLCAweDgyLCAweGU1LAotMHgwMSwgMHgxNiwgMHhhMCwgMHhlMywgMHgxNCwgMHgwMCwgMHg4MiwgMHhlNSwgMHgwYywgMHgwMCwgMHg4MSwgMHhlNSwKLTB4MWMsIDB4MDAsIDB4OTIsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4ODEsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDgwLCAweGI1LCAweDBmLCAweDFjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHgxNywgMHhmOCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4OTIsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDgwLCAweGI1LCAweDBmLCAweDFjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDA5LCAweGY4LCAweDAwLCAweDI4LAotMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg4NCwgMHhmOCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjAsIDB4YjQsIDB4MDcsIDB4NjgsIDB4M2EsIDB4NzgsIDB4ZDIsIDB4MDcsCi0weGQyLCAweDBmLCAweDAwLCAweDI0LCAweDAwLCAweDJhLCAweDAzLCAweGQwLCAweGZmLCAweDIyLCAweDAxLCAweDMyLAotMHg0MiwgMHg2MCwgMHgwMCwgMHhlMCwgMHg0NCwgMHg2MCwgMHgzYSwgMHg3YiwgMHg3YiwgMHg3YiwgMHgxYiwgMHgwMiwKLTB4MWEsIDB4NDMsIDB4ODEsIDB4MmEsIDB4MDgsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4NDIsIDB4NjgsCi0weDFhLCAweDQzLCAweDQyLCAweDYwLCAweDA0LCAweDIyLCAweGJmLCAweDE4LCAweDgyLCAweDYwLCAweDAwLCAweGUwLAotMHg4NCwgMHg2MCwgMHgzYSwgMHg3YiwgMHg3YiwgMHg3YiwgMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywgMHgwOCwgMHgyYSwKLTB4MDYsIDB4ZDEsIDB4MDYsIDB4MjMsIDB4NDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjAsIDB4ODEsIDB4NjgsCi0weDBlLCAweDMxLCAweDNjLCAweGUwLCAweGMxLCAweDIzLCAweGRiLCAweDAwLCAweDlhLCAweDQyLCAweDAzLCAweGQxLAotMHg0MSwgMHg2OCwgMHgyNCwgMHg0YiwgMHgxOSwgMHg0MywgMHgzZSwgMHhlMCwgMHgyMywgMHg0YiwgMHg5YSwgMHg0MiwKLTB4MDQsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDMsIDB4NDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MzYsIDB4ZTAsCi0weDEzLCAweDAyLCAweDEyLCAweDBhLCAweDEyLCAweDA2LCAweDEyLCAweDBlLCAweDFhLCAweDQzLCAweDEyLCAweDA0LAotMHgxMiwgMHgwYywgMHgyZSwgMHgzYSwgMHgxYywgMHg0YiwgMHg5YSwgMHg0MiwgMHgyZCwgMHhkOCwgMHgwMSwgMHgyNSwKLTB4NDIsIDB4NjgsIDB4MTUsIDB4NDMsIDB4NDUsIDB4NjAsIDB4YmEsIDB4N2IsIDB4ZmIsIDB4N2IsIDB4MWIsIDB4MDIsCi0weDFhLCAweDQzLCAweDE4LCAweDRiLCAweDlhLCAweDQyLCAweDIyLCAweGQxLCAweGZiLCAweDFkLCAweDA5LCAweDMzLAotMHg0NCwgMHhjYiwgMHg5YiwgMHgwNywgMHhkYiwgMHgwZSwgMHhkYSwgMHg0MCwgMHg1YiwgMHg0MiwgMHgyMCwgMHgzMywKLTB4OWUsIDB4NDAsIDB4MTYsIDB4NDMsIDB4MDMsIDB4MmUsIDB4MTgsIDB4ZDEsIDB4MzksIDB4N2QsIDB4N2IsIDB4N2QsCi0weDFiLCAweDAyLCAweDE5LCAweDQzLCAweDA4LCAweDI5LCAweDA3LCAweGQxLCAweDA0LCAweDIxLCAweDI5LCAweDQzLAotMHg0MSwgMHg2MCwgMHg4MSwgMHg2OCwgMHgxNiwgMHgzMSwgMHg4MSwgMHg2MCwgMHgwMSwgMHgyMSwgMHgwYSwgMHhlMCwKLTB4YzEsIDB4MjMsIDB4ZGIsIDB4MDAsIDB4OTksIDB4NDIsIDB4MDQsIDB4ZDEsIDB4MDEsIDB4MjEsIDB4ODksIDB4MDMsCi0weDI5LCAweDQzLCAweDQxLCAweDYwLCAweDAwLCAweGUwLCAweDg0LCAweDYwLCAweDAwLCAweDIxLCAweDA4LCAweDFjLAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4MCwgMHgwMCwgMHgwMCwKLTB4YWUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4YWEsIDB4YWEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjQsIDB4NDIsIDB4NjgsCi0weGQxLCAweDA4LCAweDNmLCAweGQzLCAweDAxLCAweDY4LCAweDgzLCAweDY4LCAweDU5LCAweDE4LCAweDAyLCAweDM5LAotMHg4ZiwgMHg3OCwgMHgzZiwgMHgwNywgMHgzZiwgMHgwZiwgMHgwNSwgMHgyZiwgMHgwMywgMHhkMSwgMHhkYSwgMHgxZCwKLTB4MGQsIDB4MzIsIDB4YzIsIDB4NjAsIDB4MDUsIDB4ZTAsIDB4YmYsIDB4MDAsIDB4ZGIsIDB4MTksIDB4YzMsIDB4NjAsCi0weDA4LCAweDIzLCAweDFhLCAweDQzLCAweDQyLCAweDYwLCAweDhhLCAweDc4LCAweDEyLCAweDA3LCAweDEyLCAweDBmLAotMHg5MiwgMHgwMCwgMHgwMiwgMHg2MSwgMHgwYSwgMHg3OSwgMHg0YiwgMHg3OSwgMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywKLTB4MTMsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MWEsIDB4NDMsIDB4MTIsIDB4MDQsCi0weDEyLCAweDBjLCAweDQyLCAweDYxLCAweGNhLCAweDdhLCAweDA2LCAweDJhLCAweDAzLCAweGQxLCAweDEwLCAweDIzLAotMHg0MiwgMHg2OCwgMHgxYSwgMHg0MywgMHgxMCwgMHhlMCwgMHgxMSwgMHgyYSwgMHgwMywgMHhkMSwgMHgyMCwgMHgyMywKLTB4NDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MGEsIDB4ZTAsIDB4MzMsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4NDAsIDB4MjMsCi0weDQyLCAweDY4LCAweDFhLCAweDQzLCAweDA0LCAweGUwLCAweDMyLCAweDJhLCAweDAzLCAweGQxLCAweDgwLCAweDIzLAotMHg0MiwgMHg2OCwgMHgxYSwgMHg0MywgMHg0MiwgMHg2MCwgMHhjOSwgMHg3YSwgMHhjMCwgMHg0NiwgMHgwMSwgMHg3NiwKLTB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MGEsIDB4NzgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4NjAsIDB4NGIsIDB4NzgsCi0weDFiLCAweDAyLCAweDFhLCAweDQzLCAweDAyLCAweDYwLCAweDhiLCAweDc4LCAweDFiLCAweDA0LCAweDFhLCAweDQzLAotMHgwMiwgMHg2MCwgMHhjOSwgMHg3OCwgMHgwOSwgMHgwNiwgMHgxMSwgMHg0MywgMHgwMSwgMHg2MCwgMHg3MCwgMHg0NywKLTB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4NDgsIDB4NjgsIDB4ODAsIDB4MDksIDB4MjYsIDB4ZDMsIDB4YjgsIDB4NmEsCi0weGM5LCAweDY4LCAweDQwLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDAyLCAweDMwLCAweDE4LCAweDQzLAotMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMSwgMHgyMywgMHg5YiwgMHgwMiwgMHg5OCwgMHg0MiwKLTB4MTgsIDB4ZDEsIDB4NzgsIDB4NmEsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsCi0weDQ4LCAweDYyLCAweDM4LCAweDZiLCAweDAyLCAweGYwLCAweGRhLCAweGY4LCAweDM4LCAweDFjLCAweDAxLCAweGYwLAotMHg5NSwgMHhmZCwgMHgwMSwgMHgyMCwgMHgwNywgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg3MywgMHgwNywgMHg0OSwKLTB4NGEsIDB4NmMsIDB4MTIsIDB4MTgsIDB4NGEsIDB4NjQsIDB4MDYsIDB4NDksIDB4OGEsIDB4NmQsIDB4MTIsIDB4MTgsCi0weDhhLCAweDY1LCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIwLCAweGZhLCAweGU3LAotMHgxOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKLTB4ODEsIDB4MDcsIDB4MTksIDB4ZDAsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDAxLCAweDFkLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDAyLCAweDAyLAotMHgxMiwgMHgwZSwgMHgxMiwgMHgwNiwgMHgwMCwgMHgwYSwgMHhmZiwgMHgyMywgMHgxYiwgMHgwNCwgMHgxOCwgMHg0MCwKLTB4MTAsIDB4NDMsIDB4MGEsIDB4MGEsIDB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MTAsIDB4NDMsIDB4MDksIDB4MDIsCi0weDFiLCAweDBhLCAweDE5LCAweDQwLCAweDA4LCAweDQzLCAweDcwLCAweDQ3LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMSwgMHgwNiwgMHgwMiwgMHgwMiwgMHhmZiwgMHgyMywgMHgxYiwgMHgwNCwKLTB4MWEsIDB4NDAsIDB4MTEsIDB4NDMsIDB4MDIsIDB4MGEsIDB4MWIsIDB4MGEsIDB4MWEsIDB4NDAsIDB4MTEsIDB4NDMsCi0weDAwLCAweDBlLCAweDA4LCAweDQzLCAweGVkLCAweGU3LCAweDAwLCAweDAwLCAweGYwLCAweGI1LCAweDA0LCAweDIzLAotMHg4MSwgMHg2YiwgMHgxOSwgMHg0MCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwgMHg0NiwgMHhkMCwgMHhjNywgMHgxZCwKLTB4MzksIDB4MzcsIDB4MzksIDB4N2IsIDB4MzMsIDB4MjksIDB4MDEsIDB4ZDAsIDB4MzIsIDB4MjksIDB4M2YsIDB4ZDEsCi0weDAxLCAweDZiLCAweGMwLCAweDQ2LCAweDRhLCAweDY1LCAweGM0LCAweDFkLCAweDJkLCAweDM0LCAweGNkLCAweDFkLAotMHgyZCwgMHgzNSwgMHgwMCwgMHgyMiwgMHg5MywgMHgwMCwgMHhlNiwgMHg1OCwgMHhjMCwgMHg0NiwgMHhlZSwgMHg1MCwKLTB4MDEsIDB4MzIsIDB4MDcsIDB4MmEsIDB4ZjgsIDB4ZDMsIDB4ODIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NGEsIDB4NjMsCi0weDgyLCAweDZhLCAweGMwLCAweDQ2LCAweDhhLCAweDYyLCAweDdhLCAweDhiLCAweGNiLCAweDFkLCAweDM5LCAweDMzLAotMHg1YSwgMHg4MywgMHg0MCwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MiwgMHgxMiwgMHg0OCwgMHgwMSwgMHgyNywKLTB4NDIsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MTAsIDB4ZDEsIDB4YzIsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MTMsIDB4ZDEsCi0weDQyLCAweDY5LCAweDAwLCAweDJhLCAweDBkLCAweGQxLCAweDAxLCAweDYxLCAweGMxLCAweDYwLCAweDAxLCAweDZhLAotMHgwMiwgMHgyOSwgMHgwMiwgMHhkMywgMHgyMCwgMHgzMCwgMHgwNywgMHg3MSwgMHgwYywgMHhlMCwgMHgwMCwgMHhmMCwKLTB4MTMsIDB4ZjgsIDB4MDksIDB4ZTAsIDB4YzIsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDEsIDB4MDEsIDB4NjEsCi0weGMxLCAweDYwLCAweDAzLCAweGUwLCAweDAyLCAweDY5LCAweGMwLCAweDQ2LCAweDUxLCAweDY1LCAweDAxLCAweDYxLAotMHgzOCwgMHgxYywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgxMCwgMHgxYywgMHhmYSwgMHhlNywKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MWUsIDB4NDksIDB4MDAsIDB4MjIsIDB4Y2IsIDB4NjgsCi0weDAwLCAweDJiLCAweDM0LCAweGQwLCAweGM4LCAweDFkLCAweGY5LCAweDMwLCAweDgzLCAweDYyLCAweGNiLCAweDY4LAotMHg5YiwgMHg2YSwgMHhjMCwgMHg0NiwgMHhjMywgMHg2MiwgMHhjZiwgMHg2OSwgMHg3YiwgMHgwMCwgMHhkZiwgMHgxOSwKLTB4N2YsIDB4MDIsIDB4MTcsIDB4NGIsIDB4ZmYsIDB4MTgsIDB4ZmYsIDB4MzcsIDB4NjUsIDB4MzcsIDB4ODMsIDB4NjMsCi0weDA3LCAweDYzLCAweGNiLCAweDFkLCAweGZmLCAweDMzLCAweDVhLCAweDMzLCAweDFhLCAweDcyLCAweGNiLCAweDY5LAotMHgwMCwgMHgyYiwgMHgwMSwgMHhkMCwgMHhjYSwgMHg2MSwgMHgwMSwgMHhlMCwgMHgwMSwgMHgyMywgMHhjYiwgMHg2MSwKLTB4MGYsIDB4MWMsIDB4YzksIDB4NjgsIDB4NDksIDB4NmEsIDB4MDksIDB4ODksIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjMsCi0weGY4LCAweDFkLCAweGZmLCAweDMwLCAweDNhLCAweDMwLCAweDQyLCAweDYwLCAweDAyLCAweDgyLCAweDgyLCAweDYwLAotMHhjMiwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhjZSwgMHhmYSwgMHgzOCwgMHg2YSwgMHgwMSwgMHgzMCwKLTB4MzgsIDB4NjIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGEsIDB4ZjgsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDEwLCAweDFjLCAweGZhLCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywgMHhmOSwgMHgxZCwgMHhmOSwgMHgzMSwKLTB4ODgsIDB4NmEsIDB4YzIsIDB4MWQsIDB4MmQsIDB4MzIsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzIsCi0weDFhLCAweDQzLCAweGM4LCAweDZhLCAweDEyLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDgwLCAweDE4LAotMHg4MiwgMHg3OSwgMHhjMywgMHg3OSwgMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywgMHgxMywgMHgwMiwgMHgxMiwgMHgwYSwKLTB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MWEsIDB4NDMsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MDIsIDB4MzgsCi0weDkyLCAweDA0LCAweDkyLCAweDBjLCAweDAwLCAweDI2LCAweDI1LCAweDRkLAotMHhlYywgMHgxZCwgMHhmZiwgMHgzNCwgMHgzYSwgMHgzNCwgMHgwMCwgMHgyYSwgMHgwNCwgMHhkMCwgMHgyMCwgMHg4YSwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4MTgsIDB4NDMsIDB4MmIsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weGMyLCAweDFkLCAweDBkLCAweDMyLCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDMwLAotMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMCwgMHg0MywgMHgwMywgMHgxYywKLTB4ZjgsIDB4MWQsIDB4ZmYsIDB4MzAsIDB4NGEsIDB4MzAsIDB4ODIsIDB4NzgsIDB4YzgsIDB4NmIsIDB4MTksIDB4MWMsCi0weDAyLCAweGYwLCAweDAyLCAweGY4LCAweDAwLCAweDI4LCAweDA0LCAweGRhLCAweDIwLCAweDhhLCAweGZmLCAweDIzLAotMHgwMSwgMHgzMywgMHgxOCwgMHg0MywgMHgwZSwgMHhlMCwgMHhmOSwgMHgxZCwgMHhmZiwgMHgzMSwgMHgzYSwgMHgzMSwKLTB4MDgsIDB4NjAsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MWMsIDB4ZjgsCi0weDAwLCAweDI4LCAweDE0LCAweGQxLCAweDIwLCAweDhhLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDE4LCAweDQzLAotMHgyMCwgMHg4MiwgMHgyMSwgMHg4YSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhhMiwgMHhmYiwgMHhlOCwgMHg2OCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4NTQsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsCi0weGU4LCAweDYwLCAweDMwLCAweDFjLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAxLCAweDIwLAotMHhmYSwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhmOCwgMHhiNSwgMHgwNywgMHgxYywKLTB4ZmMsIDB4MWQsIDB4ZjksIDB4MzQsIDB4YTAsIDB4NmIsIDB4YTYsIDB4NmEsIDB4YzUsIDB4MWQsIDB4MGQsIDB4MzUsCi0weDM4LCAweDQ4LCAweGMwLCAweDZhLCAweDRiLCAweDAwLCAweDU5LCAweDE4LCAweDQ5LCAweDAxLCAweDQyLCAweDE4LAotMHgwMSwgMHgyMCwgMHg4MCwgMHgwNywgMHgxMCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywKLTB4MDAsIDB4OTAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDAsIDB4MWQsIDB4MDUsIDB4MzAsIDB4MTgsIDB4NDMsCi0weDAwLCAweDY4LCAweDM4LCAweDFjLCAweDI5LCAweDFjLCAweDAwLCAweGYwLCAweGMyLCAweGZhLCAweGE4LCAweDg4LAotMHg0MSwgMHgwNywgMHgwMSwgMHhkMCwgMHgwMCwgMHgyMCwgMHg1MSwgMHhlMCwgMHgyOSwgMHg4OSwgMHgwOSwgMHgxOCwKLTB4NjAsIDB4NmIsIDB4ODEsIDB4NDIsIDB4ZjgsIDB4ZDgsIDB4NjksIDB4ODksIDB4ZWEsIDB4ODgsIDB4ODksIDB4MTgsCi0weDgxLCAweDQyLCAweGYzLCAweGQ4LCAweDAwLCAweDk4LCAweDAxLCAweDI4LCAweDI1LCAweGQxLCAweGUwLCAweDZhLAotMHhmMSwgMHg2YiwgMHg0MCwgMHgxOCwgMHg3MSwgMHg2YywgMHhmYSwgMHgxZCwgMHhjZCwgMHgzMiwgMHgwMSwgMHhmMCwKLTB4MzMsIDB4ZjksIDB4ZmEsIDB4MWQsIDB4ZmYsIDB4MzIsIDB4M2EsIDB4MzIsIDB4ZTAsIDB4NmEsIDB4NTEsIDB4NjksCi0weDQwLCAweDE4LCAweGMzLCAweDFkLCAweDAzLCAweDMzLCAweDAwLCAweDIwLCAweDgxLCAweDAwLCAweDVlLCAweDU4LAotMHhjOSwgMHgxOSwgMHhmZiwgMHgzMSwgMHgwMSwgMHgzMSwgMHg0ZSwgMHg2MSwgMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwKLTB4ZjYsIDB4ZDMsIDB4ZTAsIDB4NmEsIDB4NTEsIDB4NjksIDB4NDAsIDB4MTgsIDB4YzEsIDB4MWQsIDB4MDUsIDB4MzEsCi0weDAwLCAweDIwLCAweDAwLCAweDIyLCAweDQzLCAweDAwLCAweGNhLCAweDUyLCAweDAxLCAweDMwLCAweDA2LCAweDI4LAotMHhmYSwgMHhkMywgMHgyOSwgMHgxYywgMHgxMSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHhhZSwgMHhmYiwKLTB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsIDB4NjAsIDB4NmIsIDB4MDIsIDB4NDMsIDB4MDEsIDB4MjAsIDB4MjEsIDB4NmIsCi0weGZmLCAweGY3LCAweGE2LCAweGZiLCAweDAxLCAweDIyLCAweDUyLCAweDA0LCAweDYwLCAweDZiLCAweDAyLCAweDQzLAotMHgwMCwgMHgyMCwgMHhlMSwgMHg2YSwgMHhmZiwgMHhmNywgMHg5ZSwgMHhmYiwgMHhhMSwgMHg2YiwgMHgwOCwgMHg0YSwKLTB4MDEsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4OTksIDB4ZmIsIDB4MDMsIDB4MjAsIDB4MDYsIDB4NDksIDB4YzAsIDB4NDYsCi0weDQ4LCAweDYyLCAweDAxLCAweDIwLCAweGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMCwgMHgxNCwgMHgwMCwgMHgwZiwgMHgwMCwKLTB4NmMsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4OGQsIDB4YjAsIDB4MDAsIDB4MjAsIDB4YjUsIDB4NGEsCi0weGQ1LCAweDFkLCAweGY5LCAweDM1LCAweDY4LCAweDYyLCAweDAxLCAweDIwLCAweDAwLCAweDA1LCAweGIzLCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhhOCwgMHg2YSwgMHhjNCwgMHgxZCwgMHgyZCwgMHgzNCwgMHhiMSwgMHg0OCwKLTB4YzAsIDB4NmEsIDB4ZDcsIDB4MWQsIDB4ZmYsIDB4MzcsIDB4M2EsIDB4MzcsIDB4MzksIDB4NjgsIDB4NGIsIDB4MDAsCi0weDU5LCAweDE4LCAweDQ5LCAweDAxLCAweDQwLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGMxLCAweDFkLAotMHgwNSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDksIDB4OTAsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MGEsCi0weDBhLCAweDkwLCAweDBhLCAweDk4LCAweGE0LCAweDRlLCAweDAxLCAweDI4LCAweDU5LCAweGQxLCAweDI4LCAweDZiLAotMHhhMiwgMHg2OCwgMHg4MCwgMHgxOCwgMHhhMiwgMHg0YSwgMHgyMSwgMHg2OSwKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4ZjAsIDB4MjYsIDB4ZjksIDB4MjgsIDB4NmIsIDB4NzksIDB4NjksCi0weDQwLCAweDE4LCAweGMxLCAweDFkLCAweDA1LCAweDMxLCAweDAwLCAweDIwLCAweDgyLCAweDAwLCAweDk4LCAweDRiLAotMHhkMywgMHgxOCwgMHhmZiwgMHgzMywgMHgwMSwgMHgzMywgMHg1YiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg4YiwgMHg1MCwKLTB4MDEsIDB4MzAsIDB4MDQsIDB4MjgsIDB4ZjQsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4MzEsIDB4MWMsIDB4ODIsIDB4MDAsCi0weDU2LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDA0LCAweGFlLAotMHhiMywgMHg1MCwgMHgwMSwgMHgzMCwgMHgwMywgMHgyOCwgMHhmNCwgMHhkMywgMHgwMCwgMHgyMCwgMHgwOCwgMHg5MCwKLTB4OTAsIDB4NDksIDB4NDIsIDB4MDAsIDB4OGIsIDB4NWEsIDB4YjIsIDB4NWEsIDB4OTMsIDB4NDIsIDB4MTMsIDB4ZDAsCi0weDhlLCAweDQ4LCAweGMxLCAweDg5LCAweDAxLCAweDMxLCAweGMxLCAweDgxLCAweGI4LCAweDY4LCAweDAwLCAweDI4LAotMHgwMywgMHhkMSwgMHgzOCwgMHg4YSwgMHgxMCwgMHgyMywgMHgxOCwgMHg0MywgMHg3MSwgMHhlMCwgMHgzOCwgMHg4YSwKLTB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NmQsIDB4ZTAsIDB4MDAsIDB4ZjAsIDB4MTEsIDB4ZjksIDB4MDEsIDB4ZjAsCi0weDY3LCAweGZmLCAweGY1LCAweGUwLCAweDAxLCAweDMwLCAweDA2LCAweDI4LCAweGUzLCAweGQzLCAweDA4LCAweDk4LAotMHgwMCwgMHgyOCwgMHgwYywgMHhkMSwgMHhiOCwgMHg2OCwgMHg0MSwgMHgxYywgMHhiOSwgMHg2MCwgMHgwMCwgMHgyOCwKLTB4MDMsIDB4ZDEsIDB4MzgsIDB4OGEsIDB4MDEsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDIsIDB4ZTAsIDB4MzgsIDB4OGEsCi0weDA0LCAweDIzLCAweDE4LCAweDQzLCAweDM4LCAweDgyLCAweDc4LCAweDY4LCAweDAxLCAweDMwLCAweDc4LCAweDYwLAotMHg2MiwgMHhlMCwgMHgwYSwgMHg5OCwgMHgwMiwgMHgyOCwgMHg1ZiwgMHhkMSwgMHgwOSwgMHg5OCwgMHg0MCwgMHgwYywKLTB4NzMsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZTAsIDB4MWQsIDB4MDEsIDB4MzAsIDB4MTgsIDB4NDMsCi0weDAwLCAweDY4LCAweGUxLCAweDFkLCAweDBkLCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDQwLCAweDE4LAotMHgwYywgMHgzOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyMSwgMHg4YSwgMHgwMCwgMHg2YiwgMHg0YiwKLTB4ZDYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDQsIDB4YWUsCi0weGIzLCAweDUwLCAweDAxLCAweDMxLCAweDAzLCAweDI5LCAweGYzLCAweGQzLCAweDAwLCAweDIxLCAweDgzLCAweDFlLAotMHgwYywgMHg5MywgMHg2OCwgMHg0YSwgMHgxNiwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwYiwgMHg5NiwgMHg4YSwgMHgwMCwKLTB4MGMsIDB4OWIsIDB4OWIsIDB4MTgsIDB4MGIsIDB4OWUsIDB4OWUsIDB4MTksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDMzLCAweDQzLCAweDFiLCAweDY4LCAweDZlLCAweDQ2LCAweGIzLCAweDUwLCAweDAxLCAweDMxLCAweDA0LCAweDI5LAotMHhmMSwgMHhkMywgMHg2OSwgMHg0NiwgMHg4YiwgMHgxYywgMHgwNywgMHg5MywgMHgwMCwgMHgyMSwgMHgwOCwgMHg5MSwKLTB4MDQsIDB4YWUsIDB4NGEsIDB4MDAsIDB4MDcsIDB4OWIsIDB4OWIsIDB4NWEsIDB4YjIsIDB4NWEsIDB4OTMsIDB4NDIsCi0weDExLCAweGQwLCAweDU4LCAweDQ4LCAweGMxLCAweDg5LCAweDAxLCAweDMxLCAweGMxLCAweDgxLCAweGY4LCAweDY4LAotMHg0MSwgMHgxYywgMHhmOSwgMHg2MCwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgMHgzOCwgMHg4YSwgMHgyMCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4MDIsIDB4ZTAsIDB4MzgsIDB4OGEsIDB4ODAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4ODIsCi0weDhmLCAweGU3LCAweDAxLCAweDMxLCAweDA2LCAweDI5LCAweGU0LCAweGQzLCAweDA4LCAweDk5LCAweDAwLCAweDI5LAotMHgwZCwgMHhkMSwgMHhmOSwgMHg2OCwgMHg0YSwgMHgxYywgMHhmYSwgMHg2MCwgMHgwMCwgMHgyOSwgMHgwNCwgMHhkMSwKLTB4MzksIDB4OGEsIDB4MDIsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDMsIDB4ZTAsIDB4MGMsIDB4ZTAsIDB4MzksIDB4OGEsCi0weDA4LCAweDIzLCAweDE5LCAweDQzLCAweDM5LCAweDgyLCAweDI5LCAweDZiLCAweDA4LCAweDE4LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgwMSwgMHgzOCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg3NiwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZTAsIDB4MWQsIDB4MTEsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsCi0weDAxLCAweDA2LCAweDA5LCAweDBlLCAweDAwLCAweGUwLCAweDE5LCAweGUwLCAweDM1LCAweDQ4LCAweDJhLCAweDZiLAotMHhjMCwgMHg0NiwgMHhlYSwgMHg2MiwgMHgwNCwgMHgyOSwgMHg0ZiwgMHhkMSwgMHgwMSwgMHgyMSwgMHhjNiwgMHgxZCwKLTB4ZmYsIDB4MzYsIDB4NWEsIDB4MzYsIDB4MzEsIDB4NzIsIDB4MGEsIDB4OTksIDB4MDIsIDB4MjksIDB4MWUsIDB4ZDEsCi0weDA5LCAweDk5LCAweDA5LCAweDBlLCAweDQ5LCAweDA2LCAweDFhLCAweGQxLCAweGUxLCAweDFkLCAweDA1LCAweDMxLAotMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwOCwgMHgzOSwgMHgxYSwgMHhlMCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZTAsIDB4MWQsIDB4MDEsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsCi0weGUxLCAweDFkLCAweDBkLCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDQwLCAweDE4LCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHhmOSwgMHg2OCwgMHg0YSwgMHgxYywgMHhmYSwgMHg2MCwgMHgwMCwgMHgyOSwgMHhiYywgMHhkMSwKLTB4YjYsIDB4ZTcsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZTEsIDB4MWQsCi0weDA1LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA2LCAweDA5LCAweDBlLCAweGExLCAweDYwLAotMHhlOCwgMHg2YSwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MCwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHg4OCwgMHhmYywKLTB4MjAsIDB4N2UsIDB4MzMsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4MzIsIDB4MjgsIDB4MTEsIDB4ZDEsIDB4MDEsIDB4MjEsCi0weDE0LCAweDRjLCAweGMwLCAweDQ2LCAweGY5LCAweDYwLCAweGI5LCAweDYwLCAweDIwLCAweDFjLCAweDAwLCAweGYwLAotMHg4NSwgMHhmOCwgMHgyOCwgMHg2YiwgMHhhOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MiwgMHgyMCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4YzAsIDB4ZmQsIDB4MDAsIDB4MjgsIDB4MTEsIDB4ZDEsIDB4MGUsIDB4ZTAsIDB4MDAsIDB4MjAsCi0weDMwLCAweDcyLCAweDExLCAweGUwLCAweDMzLCAweDI5LCAweDAxLCAweGQwLCAweDMyLCAweDI5LCAweDBkLCAweGQxLAotMHgwNywgMHgxYywgMHgwMCwgMHhmMCwgMHg3MSwgMHhmOCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhiMCwgMHhmZCwKLTB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4ZjAsIDB4NzAsIDB4ZmUsIDB4MGQsIDB4YjAsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGYwLCAweDEyLCAweGY4LCAweGY2LCAweGU3LCAweDAwLCAweDAwLAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwKLTB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4NDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MDcsIDB4MDAsIDB4ODAsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDZjLCAweDA3LCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDI1LCAweDQ4LAotMHg0MSwgMHg2OCwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MCwgMHgyNCwgMHg0ZiwgMHhmOSwgMHgxZCwgMHhmOSwgMHgzMSwKLTB4MDAsIDB4MjQsIDB4ODgsIDB4NmEsIDB4ZmEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OTQsIDB4NjEsIDB4MDQsIDB4MjIsCi0weGZiLCAweDY4LCAweGMwLCAweDQ2LCAweGRhLCAweDYwLCAweDEwLCAweDIyLCAweGZiLCAweDY4LCAweGMwLCAweDQ2LAotMHg5YSwgMHg2MSwgMHhmYSwgMHgxZCwgMHhmZiwgMHgzMiwgMHg1YSwgMHgzMiwgMHgxMywgMHg3YSwgMHgxYiwgMHg0YSwKLTB4MDAsIDB4MmIsIDB4MGIsIDB4ZDAsIDB4MTUsIDB4OGEsIDB4MmUsIDB4MGEsIDB4MzYsIDB4MDIsIDB4MzMsIDB4MjMsCi0weDJiLCAweDQwLCAweDliLCAweDAwLCAweDFlLCAweDQzLCAweGNjLCAweDIzLCAweDJiLCAweDQwLCAweDliLCAweDA4LAotMHgzMywgMHg0MywgMHgxMywgMHg4MiwgMHgxMiwgMHg4YSwgMHhmYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg4MywKLTB4NGEsIDB4NmIsIDB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4ODEsIDB4MGEsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDgyLCAweDYyLCAweGM0LCAweDYyLCAweGMzLCAweDFkLCAweDM5LCAweDMzLCAweDRhLCAweDZiLCAweGMwLCAweDQ2LAotMHg1YSwgMHg4MywgMHgwNCwgMHgyMywgMHgwMiwgMHg2OCwgMHgxYSwgMHg0MywgMHgwMiwgMHg2MCwgMHg4OCwgMHg2YSwKLTB4MDEsIDB4ZjAsIDB4MzIsIDB4ZmEsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4NTQsIDB4MzAsCi0weDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweGY4LCAweDYwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4YWMsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4YzEsIDB4MWQsIDB4ZjksIDB4MzEsIDB4OGEsIDB4NmEsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGQxLCAweDFkLCAweDQ1LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHgwYiwgMHgwNiwgMHgxYiwgMHgwZSwgMHgwMSwgMHgyNywgMHhjMSwgMHgxZCwgMHhmZiwgMHgzMSwgMHg0YSwgMHgzMSwKLTB4MzMsIDB4MmIsIDB4MDUsIDB4ZDEsIDB4OGIsIDB4NzAsIDB4MDEsIDB4MWMsIDB4MTAsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDBmLCAweGY4LCAweDA2LCAweGUwLCAweDMyLCAweDJiLCAweDA4LCAweGQxLCAweDhiLCAweDcwLCAweDAxLCAweDFjLAotMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgzYywgMHhmOCwgMHgzOCwgMHgxYywgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ODgsIDB4NzAsIDB4ZjksIDB4ZTcsIDB4OTAsIDB4YjQsIDB4Y2EsIDB4MWQsCi0weGY5LCAweDMyLCAweDMzLCAweDI3LCAweGNjLCAweDFkLCAweGZmLCAweDM0LCAweDRhLCAweDM0LCAweGQzLCAweDZhLAotMHhjMCwgMHg0NiwgMHhhNywgMHg3MCwgMHhmZiwgMHgzMSwgMHg0MSwgMHgzMSwgMHgwNywgMHg2YywgMHhjMCwgMHg0NiwKLTB4NGYsIDB4NjEsIDB4ZmIsIDB4MTgsIDB4MzksIDB4MWMsIDB4OWYsIDB4MWUsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weGZjLCAweDFjLCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LCAweDFiLCAweDBlLCAweDliLCAweDAwLAotMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywgMHhjOSwgMHgxOCwgMHgwOCwgMHgzMSwgMHgwMSwgMHg2NCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4YjksIDB4MWMsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MzQsIDB4MzAsIDB4MDEsIDB4NzYsCi0weGY4LCAweDFkLCAweDAxLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweGI5LCAweDFkLAotMHgxOSwgMHg0MywgMHhkMCwgMHg2MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOCwgMHg0MywKLTB4ZDAsIDB4NjMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4YjAsIDB4YjUsIDB4Y2EsIDB4MWQsIDB4ZjksIDB4MzIsCi0weGM1LCAweDFkLCAweDJkLCAweDM1LCAweDMyLCAweDIwLCAweGNmLCAweDFkLAotMHhmZiwgMHgzNywgMHg0YSwgMHgzNywgMHhkMywgMHg2YSwgMHhjMCwgMHg0NiwgMHhiOCwgMHg3MCwgMHhjYywgMHgxZCwKLTB4ZmYsIDB4MzQsIDB4M2EsIDB4MzQsIDB4ZTgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjEsIDB4MTAsIDB4MzAsCi0weGU4LCAweDYwLCAweDYwLCAweDY5LCAweGMwLCAweDE4LCAweDg3LCAweDFlLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgzOCwgMHgxZCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHhiOSwgMHgxYywgMHgxOSwgMHg0MywKLTB4ZDAsIDB4NjMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDgsIDB4NDMsIDB4ZDAsIDB4NjMsCi0weGY4LCAweDFkLCAweDAzLCAweDMwLCAweGZmLCAweGY3LCAweGZjLCAweGZiLCAweDIwLCAweDYyLCAweGY4LCAweDFkLAotMHgwNywgMHgzMCwgMHhmZiwgMHhmNywgMHhmNywgMHhmYiwgMHg2MCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgyOCwgMHg3NiwKLTB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjcsIDB4YjUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4OTgsCi0weGM3LCAweDFkLCAweGY5LCAweDM3LCAweGI4LCAweDZhLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLAotMHgwNSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYywgMHg2OCwgMHhmZiwgMHgyMywgMHhmZSwgMHgzMywgMHgyMywgMHg0MCwKLTB4N2YsIDB4NmIsIDB4M2YsIDB4MDQsIDB4M2IsIDB4NDMsIDB4MGIsIDB4NjAsIDB4MzQsIDB4MzAsIDB4MWMsIDB4MWMsCi0weDgwLCAweDIzLCAweDIzLCAweDQwLCAweDAxLCAweDlmLCAweGZmLCAweDM3LCAweDQxLCAweDM3LCAweDAwLCAweDJiLAotMHgzYywgMHhkMCwgMHgwYywgMHgyMywgMHgwMCwgMHg5MywgMHgwMCwgMHgyMywgMHg5ZCwgMHgwMCwgMHhhZSwgMHgxOCwKLTB4MzYsIDB4NjksIDB4NmQsIDB4MTgsIDB4NmUsIDB4NjEsIDB4MDEsIDB4MzMsIDB4MDUsIDB4MmIsIDB4ZjcsIDB4ZDMsCi0weDAwLCAweDIzLCAweDlkLCAweDAwLCAweGFlLCAweDE4LCAweDc2LCAweDZhLCAweDZkLCAweDE4LCAweGFlLCAweDYyLAotMHgwMSwgMHgzMywgMHgwNSwgMHgyYiwgMHhmNywgMHhkMywgMHgwMSwgMHg5YiwgMHhmZiwgMHgzMywgMHg1MSwgMHgzMywKLTB4OWIsIDB4NzgsIDB4MzMsIDB4MmIsIDB4MGUsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzUsIDB4MWQsCi0weDAxLCAweDM1LCAweDJiLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDRiLCAweDgxLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhjNSwgMHgxZCwgMHgwZCwgMHgzNSwgMHgyYiwgMHg0MywgMHgxYiwgMHg2OCwgMHgxNiwgMHhlMCwKLTB4N2IsIDB4NjksIDB4YzAsIDB4NDYsIDB4NGIsIDB4ODEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzUsIDB4MWQsCi0weDBkLCAweDM1LCAweDJiLCAweDQzLCAweDFiLCAweDY4LCAweDdkLCAweDY5LCAweDVkLCAweDFiLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhjNiwgMHgxZCwgMHgwMSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHhlYiwgMHgxOCwKLTB4MGMsIDB4M2IsIDB4MDIsIDB4ZTAsIDB4MDAsIDB4MjMsIDB4MDAsIDB4OTMsIDB4NGIsIDB4ODEsIDB4Y2IsIDB4ODAsCi0weDYzLCAweDA5LCAweDQ5LCAweGQzLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGM0LCAweDFkLCAweDA1LCAweDM0LAotMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYiwgMHg4MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4YzQsIDB4MWQsIDB4MGQsIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MGMsIDB4ODksIDB4MWIsIDB4MWIsCi0weDAwLCAweDljLCAweDFjLCAweDFiLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDMwLCAweDE4LCAweDQzLAotMHgwMCwgMHg2OCwgMHgyMCwgMHgxOCwgMHg4OCwgMHg4MCwgMHgzOCwgMHg2YSwgMHgwNCwgMHgwZSwgMHhmZiwgMHgyMywKLTB4MWIsIDB4MDQsIDB4MDMsIDB4NDAsIDB4MWIsIDB4MGEsIDB4MWMsIDB4NDMsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsCi0weDAzLCAweDQwLCAweDFiLCAweDAyLCAweDIzLCAweDQzLCAweDAwLCAweDA2LCAweDE4LCAweDQzLCAweGM4LCAweDYwLAotMHg3OCwgMHg2YSwgMHgwNywgMHgwZSwgMHhmZiwgMHgyMywgMHgxYiwgMHgwNCwgMHgwMywgMHg0MCwgMHgxYiwgMHgwYSwKLTB4MWYsIDB4NDMsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4MDMsIDB4NDAsIDB4MWIsIDB4MDIsIDB4M2IsIDB4NDMsCi0weDAwLCAweDA2LCAweDE4LCAweDQzLCAweDA4LCAweDYxLCAweGQwLCAweDZiLCAweGMwLCAweDQ2LCAweGM4LCAweDYzLAotMHg5MCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2NCwgMHg1MCwgMHg2YywgMHhjMCwgMHg0NiwgMHg0OCwgMHg2NCwKLTB4MTAsIDB4NmMsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjQsIDB4ZDAsIDB4NmMsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjQsCi0weDkwLCAweDZjLCAweGMwLCAweDQ2LCAweDA4LCAweDY1LCAweDAyLCAweGUwLCAweDAwLCAweDIzLCAweDBiLCAweDgxLAotMHg4YiwgMHg4MCwgMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKLTB4MGYsIDB4NGEsIDB4OTMsIDB4ODksIDB4MDEsIDB4MzMsIDB4OTMsIDB4ODEsIDB4YzIsIDB4MWQsIDB4ZjksIDB4MzIsCi0weDA0LCAweDIzLCAweDkwLCAweDZhLCAweGMwLCAweDQ2LCAweGMzLCAweDYwLCAweDEwLCAweDIzLCAweDgzLCAweDYxLAotMHhjYiwgMHgwYSwgMHgwMSwgMHhkMywgMHgxOCwgMHgyMywgMHg4MywgMHg2MSwgMHhjMSwgMHg4MywgMHg1MSwgMHg2YiwKLTB4YzAsIDB4NDYsIDB4YzEsIDB4ODEsIDB4NTEsIDB4NmIsIDB4YzIsIDB4MWQsIDB4MzksIDB4MzIsIDB4NTEsIDB4ODMsCi0weDA0LCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDAxLCAweGYwLCAweGMyLCAweGY4LAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4YjAsIDB4YjUsIDB4MWIsIDB4NGMsIDB4MjAsIDB4NmEsIDB4MDIsIDB4MjgsIDB4MWIsIDB4ZDIsIDB4MDAsIDB4MjAsCi0weGU3LCAweDFkLCAweDE5LCAweDM3LCAweDM4LCAweDcxLCAweGUxLCAweDY4LCAweGUwLCAweDFkLCAweGY5LCAweDMwLAotMHgwMCwgMHgyOSwgMHgxNSwgMHhkMCwgMHg0MiwgMHg2YSwgMHgwMCwgMHgyYSwgMHgxMiwgMHhkMSwgMHgwMSwgMHgyNSwKLTB4MGEsIDB4ZTAsIDB4ZmYsIDB4ZjcsIDB4ODksIDB4ZmIsIDB4MDAsIDB4MjgsIDB4MDksIDB4ZDEsIDB4MjAsIDB4NmEsCi0weDAyLCAweDI4LCAweDAwLCAweGQzLCAweDNkLCAweDcxLCAweGUwLCAweDY4LCAweDAwLCAweDI4LCAweDAyLCAweGQwLAotMHgzOCwgMHg3OSwgMHgwMCwgMHgyOCwgMHhmMSwgMHhkMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NDAsIDB4NmEsIDB4MDAsIDB4MjgsIDB4ZjksIDB4ZDEsIDB4MDAsIDB4MjksIDB4ZjcsIDB4ZDEsIDB4NjAsIDB4NjksCi0weDAwLCAweDI4LCAweDA0LCAweGQwLCAweDA2LCAweDQ4LCAweDAwLCAweDY4LCAweDAzLCAweGYwLCAweGE4LCAweGZjLAotMHhlZiwgMHhlNywgMHg2MCwgMHg2OCwgMHgwMCwgMHgyOCwgMHhlYywgMHhkMCwgMHgwMCwgMHhmMCwgMHg1YSwgMHhmOCwKLTB4ZTksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MzQsIDB4MDQsIDB4MDAsIDB4ODAsCi0weGIwLCAweGI1LCAweDA3LCAweDFjLCAweDIwLCAweDIzLCAweGI4LCAweDY4LCAweDE4LCAweDQwLCAweDAxLCAweDI0LAotMHgwMCwgMHgyNSwgMHgwMCwgMHgyOCwgMHgwYiwgMHhkMSwgMHgzOCwgMHg2YSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwKLTB4MjgsIDB4MWMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MWYsIDB4NDgsIDB4MDEsIDB4NmUsCi0weDAxLCAweDMxLCAweDAxLCAweDY2LCAweDAzLCAweGUwLCAweDQ4LCAweDY4LCAweGM0LCAweDIzLCAweDE4LCAweDQwLAotMHgwMywgMHhkMSwgMHgzOCwgMHg2YSwgMHgwMCwgMHhmMCwgMHgwYywgMHhmYywgMHgyZiwgMHhlMCwgMHgzOCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4MWMsIDB4ZmMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4N2IsIDB4ZmEsIDB4YjgsIDB4NjgsCi0weGMwLCAweDA4LCAweDAyLCAweGQzLCAweDM4LCAweDZhLCAweDAwLCAweGYwLCAweGQxLCAweGZiLCAweGI4LCAweDY4LAotMHgzOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MCwgMHgzOCwgMHg2YSwgMHhjMCwgMHg0NiwgMHhjNSwgMHg2MCwKLTB4MTAsIDB4NDgsIDB4NDEsIDB4NjgsIDB4MDAsIDB4MjksIDB4MTEsIDB4ZDEsIDB4YzEsIDB4NjgsIDB4MDAsIDB4MjksCi0weDA5LCAweGQxLCAweDQxLCAweDY5LCAweDAwLCAweDI5LCAweDA2LCAweGQxLCAweDM5LCAweDZhLCAweGMwLCAweDQ2LAotMHg4MSwgMHg2MCwgMHg0MSwgMHg2MCwgMHgwMCwgMHhmMCwgMHgxNCwgMHhmOCwgMHgwYiwgMHhlMCwgMHgzOSwgMHg2YSwKLTB4YzAsIDB4NDYsIDB4ODEsIDB4NjAsIDB4NDEsIDB4NjAsIDB4MDYsIDB4ZTAsIDB4MzksIDB4NmEsIDB4ODIsIDB4NjgsCi0weGMwLCAweDQ2LCAweGQxLCAweDYwLCAweDM5LCAweDZhLCAweGMwLCAweDQ2LCAweDgxLCAweDYwLCAweDIwLCAweDFjLAotMHhiZCwgMHhlNywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4YjUsIDB4MGIsIDB4NGMsIDB4NjcsIDB4NjgsIDB4MDAsIDB4MmYsIDB4MGYsIDB4ZDAsIDB4MzgsIDB4MWMsCi0weDAwLCAweGYwLCAweDEyLCAweGY4LCAweDAwLCAweDI4LCAweDBhLCAweGQxLCAweDYwLCAweDY4LCAweGMwLCAweDY4LAotMHhjMCwgMHg0NiwgMHg2MCwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhjMywgMHhmYiwgMHgwMCwgMHgyMCwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsIDB4ZmEsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDA3LCAweDFjLCAweGZlLCAweDFkLCAweDQ5LCAweDM2LAotMHgzMCwgMHg3OCwgMHg0MCwgMHgwMCwgMHhjMCwgMHgxOSwgMHg4NSwgMHg4YiwgMHgzMywgMHg0YywgMHgzNCwgMHg0YiwKLTB4OWQsIDB4NDIsIDB4M2MsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MjEsIDB4MWMsIDB4MmEsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDFkLCAweGY5LCAweDMxLCAweDQ4LCAweDgwLCAweDZhLCAweDU4LCAweDIxLCAweDY5LCAweDQzLCAweDQwLCAweDE4LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywKLTB4MmMsIDB4NGQsIDB4MDEsIDB4MjgsIDB4MWEsIDB4ZDEsIDB4MzAsIDB4NzgsIDB4YzAsIDB4MTksIDB4YzEsIDB4MWQsCi0weDE5LCAweDMxLCAweDA4LCAweDdhLCAweDNhLCAweDY4LCAweDgwLCAweDE4LCAweDA5LCAweDdiLCAweGVhLCAweDFkLAotMHgyMSwgMHgzMiwgMHgwMCwgMHhmMCwgMHhlMywgMHhmYywgMHgzMCwgMHg3OCwgMHhjMCwgMHgxOSwgMHgyMCwgMHgzMCwKLTB4MDAsIDB4NzksIDB4MzksIDB4NjgsIDB4NDAsIDB4MTgsIDB4YzEsIDB4MWQsIDB4MDUsIDB4MzEsIDB4MDAsIDB4MjAsCi0weDAwLCAweDIzLCAweDQyLCAweDAwLCAweDhiLCAweDUyLCAweDAxLCAweDMwLCAweDA2LCAweDI4LCAweGZhLCAweGQzLAotMHhhMCwgMHg4OCwgMHg0MSwgMHgwNywgMHgwYiwgMHhkMSwgMHgyMSwgMHg4OSwgMHgwOSwgMHgxOCwgMHg3OCwgMHg2OCwKLTB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4ODEsIDB4NDIsIDB4MDQsIDB4ZDgsIDB4NjEsIDB4ODksIDB4ZTIsIDB4ODgsCi0weDg5LCAweDE4LCAweDgxLCAweDQyLCAweDAzLCAweGQ5LCAweDAwLCAweDIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgyMSwgMHgxYywgMHgxNCwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmZSwgMHhmNywgMHg1YSwgMHhmZiwKLTB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsIDB4NzgsIDB4NjgsIDB4MDIsIDB4NDMsCi0weDAxLCAweDIwLCAweDM5LCAweDY4LCAweGZlLCAweGY3LCAweDUyLCAweGZmLCAweDAxLCAweDIyLCAweDUyLCAweDA0LAotMHg3OCwgMHg2OCwgMHgwMiwgMHg0MywgMHgwMCwgMHgyMCwgMHgzOSwgMHg2OCwgMHhmZSwgMHhmNywgMHg0YSwgMHhmZiwKLTB4MGIsIDB4NDksIDB4MGMsIDB4NGEsIDB4MDEsIDB4MjAsIDB4ZmUsIDB4ZjcsIDB4NDUsIDB4ZmYsIDB4MDEsIDB4MjAsCi0weGU5LCAweDFkLCAweDE5LCAweDMxLCAweDQ4LCAweDcxLCAweDAyLCAweDIxLCAweGVhLCAweDFkLCAweGY5LCAweDMyLAotMHg1MSwgMHg2MiwgMHhkOSwgMHhlNywgMHgyOCwgMHhhYywgMHgyMCwgMHg0MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4NTQsIDB4MDAsIDB4MDMsIDB4MDAsCi0weDE0LCAweGFjLCAweDIwLCAweDQwLCAweDE0LCAweDAwLCAweDA3LCAweDAwLCAweGYwLCAweGI1LCAweDgzLCAweGIwLAotMHgwMCwgMHgyMSwgMHg0ZiwgMHg0OCwgMHhjMiwgMHgxZCwgMHhmOSwgMHgzMiwgMHg1MSwgMHg2MiwgMHgwMSwgMHgyMSwKLTB4YzksIDB4MDQsIDB4NGQsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4YzEsIDB4MWQsIDB4MTksIDB4MzEsCi0weDQ5LCAweDc5LCAweDAwLCAweDI5LCAweDA0LCAweGQxLCAweDRhLCAweDQ4LCAweDAwLCAweDY4LCAweDAzLCAweGYwLAotMHg5YiwgMHhmYiwgMHg4NywgMHhlMCwgMHg0NSwgMHg0OCwgMHg0NywgMHg2OCwgMHhmYywgMHgxZCwgMHg0OSwgMHgzNCwKLTB4MjEsIDB4NzgsIDB4NDgsIDB4MDAsIDB4YzAsIDB4MTksIDB4ODAsIDB4OGIsIDB4NDQsIDB4NGEsIDB4OTIsIDB4NmEsCi0weDU4LCAweDIzLCAweDU4LCAweDQzLCAweDE1LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGVhLCAweDFkLAotMHgwNSwgMHgzMiwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHgwOCwgMHgzNSwgMHgyYiwgMHg0MywgMHgxZCwgMHg2OCwKLTB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4MmIsIDB4NDAsIDB4MWIsIDB4MGEsIDB4M2MsIDB4NGQsIDB4MDEsIDB4MmIsCi0weDI0LCAweGQxLCAweGM4LCAweDE5LCAweGMxLCAweDFkLCAweDE5LCAweDMxLCAweDA4LCAweDdhLCAweDNhLCAweDY4LAotMHg4MCwgMHgxOCwgMHgzOSwgMHg0YSwgMHgwOSwgMHg3YiwgMHgwMCwgMHhmMCwgMHhjNSwgMHhmYywgMHgyMCwgMHg3OCwKLTB4YzAsIDB4MTksIDB4MjAsIDB4MzAsIDB4MDAsIDB4NzksIDB4MzksIDB4NjgsIDB4NDEsIDB4MTgsIDB4MDAsIDB4MjAsCi0weDgyLCAweDAwLCAweDUzLCAweDE5LCAweDliLCAweDZlLCAweDZlLCAweDQ2LCAweGIzLCAweDUwLCAweDAxLCAweDMwLAotMHgwMywgMHgyOCwgMHhmNywgMHhkMywgMHhjYSwgMHgxZCwgMHgwNSwgMHgzMiwgMHg2OSwgMHg0NiwgMHgwMCwgMHgyMCwKLTB4NDMsIDB4MDAsIDB4Y2QsIDB4NWEsIDB4YzAsIDB4NDYsIDB4ZDUsIDB4NTIsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsCi0weGY4LCAweGQzLCAweDJkLCAweGUwLCAweDAyLCAweDJiLCAweDJiLCAweGQxLCAweDExLCAweDBhLCAweDI5LCAweGQzLAotMHgwMCwgMHgyMSwgMHg4YSwgMHgwMCwgMHg1MywgMHgxOSwgMHg5YiwgMHg2ZSwgMHg2ZSwgMHg0NiwgMHhiMywgMHg1MCwKLTB4MDEsIDB4MzEsIDB4MDMsIDB4MjksIDB4ZjcsIDB4ZDMsIDB4MjEsIDB4NzgsIDB4NDksIDB4MDAsIDB4YzksIDB4MTksCi0weDA5LCAweDhmLCAweDNhLCAweDY4LCAweDhiLCAweDE4LCAweDZhLCAweDQ2LCAweDAwLCAweDIxLCAweDRkLCAweDAwLAotMHg1NiwgMHg1YiwgMHhjMCwgMHg0NiwgMHg1ZSwgMHg1MywgMHgwMSwgMHgzMSwgMHgwNiwgMHgyOSwgMHhmOCwgMHhkMywKLTB4MTksIDB4NDksIDB4OGEsIDB4NmEsIDB4MTMsIDB4MTgsIDB4MWEsIDB4NmQsIDB4MDAsIDB4OWQsIDB4NTUsIDB4NDAsCi0weDE5LCAweDRhLCAweGQ2LCAweDY4LCAweDc1LCAweDQwLCAweDFkLCAweDY1LCAweDg5LCAweDZhLCAweDA4LCAweDE4LAotMHg0MSwgMHg2ZCwgMHgwMiwgMHg5YiwgMHg1OSwgMHg0MCwgMHg5MiwgMHg2OSwgMHg1MSwgMHg0MCwgMHg0MSwgMHg2NSwKLTB4MjAsIDB4NzgsIDB4NDEsIDB4MWUsIDB4MjEsIDB4NzAsIDB4MDAsIDB4MjgsIDB4MGQsIDB4ZDAsIDB4MzgsIDB4MWMsCi0weGZmLCAweGY3LCAweGY0LCAweGZlLCAweDAwLCAweDI4LCAweDBkLCAweGQxLCAweDA4LCAweDRhLCAweDUwLCAweDY4LAotMHhjMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhhNCwgMHhmYSwKLTB4MDIsIDB4ZTAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NzMsIDB4ZmEsIDB4MDEsIDB4ZjAsIDB4ZGUsIDB4ZmEsCi0weDAzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgzOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwKLTB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4OTQsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCi0weGYwLCAweGI1LCAweDgyLCAweGIwLCAweDY5LCAweDRiLCAweDlmLCAweDZhLCAweDU4LCAweDIzLCAweDVhLCAweDQzLAotMHhiYSwgMHgxOCwgMHhjMywgMHgxZCwgMHg0OSwgMHgzMywgMHgxZiwgMHg3OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4ZDQsIDB4MWQsIDB4MDEsIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWQsIDB4NjgsIDB4NDMsIDB4NjgsIDB4MWMsIDB4MDQsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ2LCAweDFkLCAweDA1LCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LAotMHgxYywgMHg0MywgMHg0MiwgMHgyMywgMHgxYywgMHg0MywgMHgwYywgMHg2MCwgMHhmZiwgMHgyNiwgMHgzNiwgMHgwMiwKLTB4MmUsIDB4NDAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4OWUsIDB4NDIsIDB4NzQsIDB4ZDEsIDB4NmIsIDB4MGMsCi0weDJiLCAweGQzLCAweGMzLCAweDE5LCAweDIwLCAweDMzLCAweDFiLCAweDc5LAotMHhjMCwgMHg0NiwgMHg0YiwgMHg4MSwgMHg3YiwgMHgwMCwgMHgxYiwgMHgxOCwgMHgxYiwgMHg4ZiwgMHg0YywgMHg4OSwKLTB4MWIsIDB4MWIsIDB4Y2IsIDB4ODAsIDB4MDAsIDB4MjQsIDB4YTYsIDB4MDAsIDB4MDEsIDB4OTYsIDB4YjMsIDB4MTgsCi0weGRlLCAweDFkLCAweDA5LCAweDM2LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LAotMHgwMSwgMHg5ZSwgMHg3NiwgMHgxOCwgMHg3MywgMHg2MSwgMHgwMSwgMHgzNCwgMHgwNSwgMHgyYywgMHhmMCwgMHhkMywKLTB4MDAsIDB4MjQsIDB4YTYsIDB4MDAsIDB4MDAsIDB4OTYsIDB4YjMsIDB4MTgsIDB4ZGUsIDB4MWQsIDB4MWQsIDB4MzYsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDAwLCAweDllLCAweDc2LCAweDE4LAotMHhiMywgMHg2MiwgMHgwMSwgMHgzNCwgMHgwNSwgMHgyYywgMHhmMCwgMHhkMywgMHgwNiwgMHhlMCwgMHgwMCwgMHgyMywKLTB4NGIsIDB4ODEsIDB4Y2IsIDB4ODAsIDB4NDAsIDB4MjMsIDB4OWMsIDB4NDMsIDB4MGMsIDB4NjAsIDB4MjMsIDB4MWMsCi0weDZiLCAweDBlLCAweDRhLCAweGQzLCAweGMzLCAweDE5LCAweDIwLCAweDMzLCAweDFiLCAweDc5LCAweDEwLCAweDMzLAotMHgwYiwgMHg4MSwgMHg3YiwgMHgwMCwgMHgxYiwgMHgxOCwgMHgxYiwgMHg4ZiwgMHgwZiwgMHg4OSwgMHhkYiwgMHgxYiwKLTB4OGIsIDB4ODAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIDB4MzUsIDB4MzQsIDB4MjMsIDB4NDMsCi0weDFiLCAweDY4LCAweGMwLCAweDQ2LCAweGNiLCAweDYzLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLAotMHgzMSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYiwgMHg2NCwgMHhhYiwgMHgwZSwKLTB4MjEsIDB4ZDIsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIDB4M2QsIDB4MzQsIDB4MjMsIDB4NDMsCi0weDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDRiLCAweDY0LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLAotMHgzOSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg4YiwgMHg2NCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIDB4NDUsIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsCi0weGNiLCAweDY0LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLCAweDQxLCAweDM0LCAweDIzLCAweDQzLAotMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYiwgMHg2NSwgMHgwMCwgMHhlMCwgMHgwZiwgMHhlMCwgMHhmYiwgMHgxZiwKLTB4MDEsIDB4M2IsIDB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsIDB4MDcsIDB4NjgsIDB4ZmYsIDB4MTgsIDB4MDMsIDB4NjksCi0weDA4LCAweDFjLCAweDM5LCAweDFjLCAweDAwLCAweGYwLCAweDM0LCAweGY4LCAweDJjLCAweGUwLCAweDAwLCAweDIzLAotMHgwYiwgMHg4MSwgMHg4YiwgMHg4MCwgMHgyOCwgMHhlMCwgMHgwMCwgMHgyMywgMHg4YiwgMHg4MCwgMHgwYiwgMHg4MSwKLTB4YzMsIDB4MTksIDB4MjAsIDB4MzMsIDB4MWIsIDB4N2EsIDB4YzAsIDB4NDYsIDB4NGIsIDB4ODEsIDB4N2IsIDB4MDAsCi0weDE4LCAweDE4LCAweDAwLCAweDhlLCAweGMwLCAweDQ2LCAweGM4LCAweDgwLCAweDAwLCAweDIwLCAweDg3LCAweDAwLAotMHhiYiwgMHgxOCwgMHhkYywgMHgxZCwgMHgwOSwgMHgzNCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyMywgMHg0MywKLTB4MWIsIDB4NjgsIDB4N2YsIDB4MTgsIDB4N2IsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDUsIDB4MjgsIDB4ZjIsIDB4ZDMsCi0weDAwLCAweDIwLCAweDg3LCAweDAwLCAweGJiLCAweDE4LCAweGRjLCAweDFkLCAweDFkLCAweDM0LCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHg3ZiwgMHgxOCwgMHhiYiwgMHg2MiwgMHgwMSwgMHgzMCwKLTB4MDUsIDB4MjgsIDB4ZjIsIDB4ZDMsIDB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDgwLCAweGI0LCAweDFmLCAweDFjLCAweDNiLCAweDBjLCAweDE4LCAweGQyLAotMHgxNywgMHg2ZCwgMHgxMSwgMHg0YiwgMHhjMCwgMHg0NiwgMHhkZiwgMHg2MCwgMHg1MiwgMHg2ZCwgMHhjMCwgMHg0NiwKLTB4MWEsIDB4NjEsIDB4YzcsIDB4NjAsIDB4MWEsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDIsIDB4NjEsIDB4ZDgsIDB4NjgsCi0weGMwLCAweDQ2LCAweDA4LCAweDgwLCAweGQ4LCAweDY4LCAweDAwLCAweDBjLCAweDQ4LCAweDgwLCAweDE4LCAweDY5LAotMHhjMCwgMHg0NiwgMHg4OCwgMHg4MCwgMHgxOCwgMHg2OSwgMHgwMCwgMHgwYywgMHhjOCwgMHg4MCwgMHg4MCwgMHhiYywKLTB4NzAsIDB4NDcsIDB4NGEsIDB4ODgsIDB4MTIsIDB4MDQsIDB4MGIsIDB4ODgsIDB4MWEsIDB4NDMsIDB4YzIsIDB4NjAsCi0weDhhLCAweDg4LCAweGM5LCAweDg4LCAweDA5LCAweDA0LCAweDExLCAweDQzLCAweDAxLCAweDYxLCAweGYyLCAweGU3LAotMHgyYywgMHgwNywgMHgwMCwgMHg4MCwgMHhmMSwgMHhiNSwgMHg4OCwgMHhiMCwgMHgwMCwgMHgyMiwgMHgwOCwgMHg5OCwKLTB4MDAsIDB4NmEsIDB4MDgsIDB4OWIsIDB4OTksIDB4NjgsIDB4NDksIDB4MGEsIDB4MDIsIDB4ZDMsIDB4MDEsIDB4MjcsCi0weGZmLCAweDAzLCAweDAwLCAweGUwLCAweDAwLCAweDI3LCAweDAzLCAweDhiLCAweDAwLCAweDJiLCAweDE5LCAweGQwLAotMHhhMywgMHg0OSwgMHg4OSwgMHg2YSwgMHgxYywgMHgxYywgMHg1OCwgMHgyMywgMHg2MywgMHg0MywgMHhjOSwgMHgxOCwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4NTgsIDB4MzksIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDQsCi0weDA5LCAweDBjLCAweDAyLCAweDI5LCAweDAyLCAweGQxLCAweDA4LCAweDIzLCAweDFmLCAweDQzLCAweDA3LCAweGUwLAotMHg0MSwgMHg4YiwgMHgwMCwgMHgyOSwgMHgwMiwgMHhkMCwgMHgwYywgMHgyMywKLTB4MWYsIDB4NDMsIDB4MDEsIDB4ZTAsIDB4MDQsIDB4MjMsIDB4MWYsIDB4NDMsIDB4ODMsIDB4OGEsIDB4MDAsIDB4MmIsCi0weDE4LCAweGQwLCAweDk1LCAweDQ5LCAweDg5LCAweDZhLCAweDFjLCAweDFjLCAweDU4LCAweDIzLCAweDYzLCAweDQzLAotMHhjOSwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1OCwgMHgzOSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDIsIDB4MjksIDB4MDEsIDB4ZDEsIDB4MGYsIDB4NDMsIDB4MDcsIDB4ZTAsCi0weGMxLCAweDhhLCAweDAwLCAweDI5LCAweDAyLCAweGQwLCAweDAzLCAweDIzLCAweDFmLCAweDQzLCAweDAxLCAweGUwLAotMHgwMSwgMHgyMywgMHgxZiwgMHg0MywgMHhjMSwgMHgxZCwgMHgzOSwgMHgzMSwgMHgwNywgMHg5MSwgMHg0YiwgMHg4OSwKLTB4MGMsIDB4ODksIDB4MWMsIDB4MTksIDB4MjQsIDB4MDQsIDB4MjQsIDB4MGMsIDB4MDgsIDB4OWQsIDB4MmQsIDB4NjgsCi0weGMwLCAweDQ2LCAweDAxLCAweDk1LCAweGM5LCAweDg4LCAweDdkLCAweDA4LCAweDFhLCAweGQzLCAweDFhLCAweDFjLAotMHhjMywgMHgxZCwgMHgxOSwgMHgzMywgMHgxYSwgMHg3MiwgMHgwNywgMHg5YSwgMHg5MiwgMHg4OSwgMHhjMCwgMHg0NiwKLTB4MWEsIDB4NzMsIDB4MDcsIDB4OWEsIDB4MTIsIDB4ODksIDB4YzAsIDB4NDYsIDB4MDIsIDB4ODYsIDB4MDQsIDB4ODcsCi0weDgyLCAweDhhLCAweDAxLCAweDNhLCAweDgyLCAweDgzLCAweDAxLCAweDIyLCAweDE5LCAweDcxLCAweDA4LCAweDliLAotMHgxYiwgMHg2OCwgMHg1YiwgMHgxOCwgMHg1YiwgMHg3OCwgMHg5YiwgMHgwMCwgMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywKLTB4MDgsIDB4MzMsIDB4NTksIDB4MTgsIDB4YmIsIDB4MDgsIDB4NDcsIDB4ZDMsIDB4MDcsIDB4OWIsIDB4NWIsIDB4ODksCi0weDg1LCAweDE4LCAweDA2LCAweDk1LCAweDIwLCAweDM1LCAweDJiLCAweDcyLCAweDA3LCAweDliLCAweDliLCAweDg5LAotMHhjMCwgMHg0NiwgMHgyYiwgMHg3MywgMHgwNywgMHg5YiwgMHgxYiwgMHg4OSwgMHgyZSwgMHgxYywgMHg1NSwgMHgwMCwKLTB4MmQsIDB4MTgsIDB4MDUsIDB4OTUsIDB4MmIsIDB4ODYsIDB4MDAsIDB4MmEsIDB4MDEsIDB4ZDAsIDB4YzMsIDB4OGEsCi0weDAwLCAweGUwLCAweDgzLCAweDhhLCAweDAxLCAweDNiLCAweDA1LCAweDlkLCAweGMwLCAweDQ2LCAweGFiLCAweDgzLAotMHgzMSwgMHg3MSwgMHg2NSwgMHg0YiwgMHg5ZCwgMHg2YSwgMHgwNSwgMHg5YiwgMHg5ZSwgMHg4YiwgMHg1OCwgMHgyMywKLTB4NzMsIDB4NDMsIDB4ZWIsIDB4MTgsIDB4ZGQsIDB4MWQsIDB4MDEsIDB4MzUsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDJiLCAweDQzLCAweDFkLCAweDY4LCAweDJiLCAweDBlLCAweDViLCAweDA2LCAweDAxLCAweGQxLCAweDA4LCAweDMxLAotMHgwMCwgMHhlMCwgMHgxMCwgMHgzMSwgMHg4MSwgMHgyMywgMHg1YiwgMHgwMiwgMHgxZCwgMHg0MCwgMHg5ZCwgMHg0MiwKLTB4MDMsIDB4ZDEsIDB4ZTMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MWMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4MDUsIDB4OWIsCi0weGMwLCAweDQ2LCAweDFjLCAweDg3LCAweDA4LCAweDliLCAweDFiLCAweDY4LCAweDFiLCAweDE5LCAweDEwLCAweDNiLAotMHg5YiwgMHg3YiwgMHgwNiwgMHg5ZCwgMHg0MCwgMHgzNSwgMHgyYiwgMHg3MCwgMHgyYiwgMHg3OCwgMHgwMiwgMHgzMywKLTB4ZTMsIDB4MWEsIDB4MWMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4MDEsIDB4MzIsIDB4YmIsIDB4MDgsIDB4OWIsIDB4MDcsCi0weDZkLCAweGQwLCAweDgzLCAweDE4LCAweDIwLCAweDMzLCAweDA0LCAweDkzLCAweDE5LCAweDcyLCAweDAxLCAweDliLAotMHg1ZCwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyYiwgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNywKLTB4MWIsIDB4MGYsIDB4OWIsIDB4MDAsIDB4MDQsIDB4OWUsIDB4YzAsIDB4NDYsIDB4MzMsIDB4NzMsIDB4MDAsIDB4OTUsCi0weDJiLCAweDc4LCAweDFiLCAweDA3LCAweDFiLCAweDBmLCAweDliLCAweDAwLCAweDA0LCAweDlkLCAweGMwLCAweDQ2LAotMHgyYiwgMHg3MywgMHgwMCwgMHg5ZCwgMHhlYiwgMHg3OCwgMHhhZCwgMHg3OCwgMHgxYiwgMHgwMiwgMHgxZCwgMHg0MywKLTB4MmIsIDB4MDIsIDB4MmQsIDB4MGEsIDB4MmQsIDB4MDYsIDB4MmQsIDB4MGUsIDB4MmIsIDB4NDMsIDB4NTUsIDB4MDAsCi0weDJkLCAweDE4LCAweDJiLCAweDg2LCAweDA0LCAweDliLCAweGMwLCAweDQ2LCAweDU5LCAweDcyLCAweDA0LCAweDliLAotMHgxYiwgMHg3YiwgMHgyZSwgMHgxYywgMHgwNCwgMHg5ZCwgMHhjMCwgMHg0NiwgMHg2YiwgMHg3MywgMHgzMywgMHg4ZSwKLTB4YzAsIDB4NDYsIDB4NzMsIDB4ODYsIDB4MDAsIDB4OWQsIDB4MmIsIDB4NzgsIDB4MWIsIDB4MDcsIDB4MWIsIDB4MGYsCi0weDliLCAweDAwLCAweDFiLCAweDA0LCAweDFiLCAweDBjLCAweDU5LCAweDE4LCAweDA0LCAweDI1LCAweDNkLCAweDQwLAotMHgwZSwgMHhkMCwgMHgzNCwgMHg4NywgMHgwMywgMHg4YiwgMHgwMSwgMHgzYiwgMHhiMywgMHg4MywgMHgxMywgMHgxYywKLTB4MWIsIDB4MTgsIDB4MjAsIDB4MzMsIDB4MTksIDB4NzEsIDB4MDEsIDB4OWIsIDB4NWIsIDB4MTgsIDB4NWIsIDB4NzgsCi0weDliLCAweDAwLCAweDU5LCAweDE4LCAweDA4LCAweDMxLCAweDAxLCAweDMyLCAweDNiLCAweDA5LCAweDM3LCAweGQzLAotMHgwMCwgMHgyZCwgMHgwMSwgMHhkMCwgMHg0MywgMHg4YiwgMHgwMCwgMHhlMCwgMHgwMywgMHg4YiwgMHg1NSwgMHgwMCwKLTB4MmQsIDB4MTgsIDB4MDEsIDB4M2IsIDB4YWIsIDB4ODMsIDB4ODMsIDB4MTgsIDB4MDMsIDB4OTMsIDB4MjAsIDB4MzMsCi0weDE5LCAweDcxLCAweDIwLCAweDRiLCAweDlkLCAweDZhLCAweDUzLCAweDAwLCAweDFiLCAweDE4LCAweDAyLCAweDkzLAotMHg5ZSwgMHg4YiwgMHg1OCwgMHgyMywgMHg3MywgMHg0MywgMHhlYiwgMHgxOCwgMHhkZCwgMHgxZCwgMHgwMSwgMHgzNSwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MmIsIDB4NDMsIDB4MWQsIDB4NjgsCi0weDJiLCAweDBlLCAweDViLCAweDA2LCAweDAyLCAweGQxLCAweDA4LCAweDMxLCAweDAxLCAweGUwLCAweDE1LCAweGUwLAotMHgxMCwgMHgzMSwgMHg4MSwgMHgyMywgMHg1YiwgMHgwMiwgMHgxZCwgMHg0MCwgMHg5ZCwgMHg0MiwgMHgwMywgMHhkMSwKLTB4ZTMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MWMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4MDIsIDB4OWIsIDB4YzAsIDB4NDYsCi0weDFjLCAweDg3LCAweDA4LCAweDliLCAweDFiLCAweDY4LCAweDFiLCAweDE5LCAweDEwLCAweDNiLCAweDliLCAweDdiLAotMHgwMywgMHg5YywgMHg0MCwgMHgzNCwgMHgyMywgMHg3MCwgMHgwMSwgMHgzMiwgMHgwNywgMHg5YiwgMHhjMCwgMHg0NiwKLTB4ZDksIDB4ODAsIDB4NTEsIDB4MWUsIDB4YzMsIDB4MWQsIDB4NDksIDB4MzMsIDB4MTksIDB4NzAsIDB4MDcsIDB4NjEsCi0weDA0LCAweDJhLCAweDA2LCAweGQyLCAweDA2LCAweDQ5LCAweDUzLCAweDAwLCAweDFiLCAweDE4LCAweDk5LCAweDgzLAotMHgwMSwgMHgzMiwgMHgwNCwgMHgyYSwgMHhmOSwgMHhkMywgMHgwOSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDcwLCAweDQ3LCAweDgwLCAweGI1LCAweDhjLCAweGIwLCAweDA3LCAweDFjLCAweDEyLCAweDQ4LCAweDAxLCAweDY4LAotMHgwMSwgMHgzMSwgMHgwMSwgMHg2MCwgMHgzOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHg3OCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDEsIDB4OTAsIDB4YjgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MGQsIDB4NDgsCi0weDQxLCAweDY4LCAweGM5LCAweDY4LCAweGMwLCAweDQ2LCAweDQxLCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHg0ZiwgMHhmOCwgMHhiOCwgMHg2OCwgMHg0MCwgMHgwOSwgMHgwNiwgMHhkMywgMHgxMCwgMHgyMywgMHgwMiwgMHg5OCwKLTB4MTgsIDB4NDMsIDB4MDIsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDIsIDB4ZjAsIDB4ZTEsIDB4ZmYsIDB4NjgsIDB4NDYsCi0weDAyLCAweGYwLCAweDlhLCAweGZlLCAweDBjLCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHg4YywgMHhiMCwKLTB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDEsIDB4NjgsIDB4MDUsIDB4NGIsIDB4MTksIDB4NDMsCi0weDAxLCAweDkxLCAweDAwLCAweGYwLCAweDJmLCAweGY4LCAweDY4LCAweDQ2LCAweDAyLCAweGYwLCAweDg0LCAweGZlLAotMHgwYywgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKLTB4MDIsIDB4NmEsIDB4MDMsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MTMsIDB4NjAsIDB4NDAsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDUwLCAweDYwLCAweDQwLCAweDMyLCAweDQ4LCAweDY4LCAweGMwLCAweDQ2LCAweDkwLCAweDgwLCAweGM4LCAweDY4LAotMHhjMCwgMHg0NiwgMHhkMCwgMHg4MCwgMHg0OCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg4MSwgMHg4OCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4NTAsIDB4ODEsIDB4MDgsIDB4N2UsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NzMsIDB4MDgsIDB4NjksCi0weGMwLCAweDQ2LCAweDkwLCAweDgxLCAweDcwLCAweDQ3LCAweDA0LCAweDQ5LCAweDA4LCAweDY4LCAweDAwLCAweDI4LAotMHgwMCwgMHhkMSwgMHg3MCwgMHg0NywgMHhjMiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYSwgMHg2MCwgMHhmYSwgMHhlNywKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDksIDB4MGEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YzIsIDB4NjAsCi0weDA4LCAweDYwLCAweDcwLCAweDQ3LCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweGIwLCAweGI0LCAweDAwLCAweDIyLAotMHgxMiwgMHg0ZiwgMHg3YywgMHg3ZiwgMHgwMSwgMHgzNCwgMHg3YywgMHg3NywgMHgwMywgMHgyMywgMHhmYywgMHgxZCwKLTB4MTksIDB4MzQsIDB4MzgsIDB4NjIsIDB4NzksIDB4NjIsIDB4MjMsIDB4NzIsIDB4MGUsIDB4NGMsIDB4MjUsIDB4NjgsCi0weDZiLCAweDBjLCAweDA1LCAweGQyLCAweDIzLCAweDY4LCAweDFiLCAweDBjLCAweDEwLCAweGQxLCAweDI0LCAweDY4LAotMHhhMywgMHgwYSwgMHgwZCwgMHhkMywgMHgwMSwgMHgyMywgMHgwYSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHhmYiwgMHg2MiwKLTB4MDksIDB4NGYsIDB4MGEsIDB4NGIsIDB4YzAsIDB4NDYsIDB4ZGYsIDB4NjAsIDB4OTksIDB4NjAsIDB4NTgsIDB4NjAsCi0weDEwLCAweDFjLCAweDE4LCAweDYwLCAweDAxLCAweDMyLCAweGZiLCAweGU3LCAweDEwLCAweDFjLCAweDM4LCAweDY0LAotMHgwMSwgMHgzMiwgMHhmYiwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsCi0weGYwLCAweGI1LCAweDQ3LCAweDRmLCAweDM4LCAweDY4LCAweDQ3LCAweDRlLCAweDQ3LCAweDRkLCAweDA3LCAweDIzLAotMHg1YiwgMHgwMiwgMHhlYywgMHgxOCwgMHgwMCwgMHgyOCwgMHgxZCwgMHhkMSwgMHgyMCwgMHg2YiwgMHgwMSwgMHgzMCwKLTB4MjAsIDB4NjMsIDB4NDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4NDMsIDB4NDgsIDB4NDEsIDB4NjksCi0weDAwLCAweDI5LCAweDEzLCAweGQwLCAweGMxLCAweDFkLCAweDY5LCAweDMxLCAweDA5LCAweDdiLCAweDAwLCAweDI5LAotMHgwZSwgMHhkMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwMSwgMHg2ZCwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4ODEsIDB4NjEsIDB4YzIsIDB4NjksIDB4OTEsIDB4NDIsIDB4MDQsIDB4ZDAsIDB4ZjEsIDB4NmMsCi0weDAxLCAweDMxLCAweGYxLCAweDY0LCAweDAxLCAweGYwLCAweDUwLCAweGZlLAotMHgzOCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgxNywgMHhkMSwgMHgzNywgMHg0OCwgMHg0MSwgMHg2OSwgMHgwMCwgMHgyOSwKLTB4MTMsIDB4ZDAsIDB4YzEsIDB4MWQsIDB4NjksIDB4MzEsIDB4MDksIDB4N2IsIDB4MDAsIDB4MjksIDB4MGUsIDB4ZDAsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDAxLCAweDZkLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweGMwLCAweDQ2LAotMHg4MSwgMHg2MSwgMHhjMiwgMHg2OSwgMHg5MSwgMHg0MiwgMHgwNCwgMHhkMCwgMHhmMSwgMHg2YywgMHgwMSwgMHgzMSwKLTB4ZjEsIDB4NjQsIDB4MDEsIDB4ZjAsIDB4MzUsIDB4ZmUsIDB4MzgsIDB4NjgsIDB4MDIsIDB4MjgsIDB4MmYsIDB4ZDEsCi0weGJiLCAweDIzLCAweDFiLCAweDAxLCAweGVlLCAweDE4LCAweDcwLCAweDdiLCAweDAwLCAweDI4LCAweDAzLCAweGQwLAotMHgwMCwgMHgyMCwgMHg3MCwgMHg3MywgMHgwMCwgMHhmMCwgMHg0YSwgMHhmZCwgMHgzMCwgMHg3YiwgMHgwMCwgMHgyOCwKLTB4MDIsIDB4ZDAsIDB4NzgsIDB4NjgsIDB4MDIsIDB4ZjAsIDB4YWEsIDB4ZmYsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsCi0weGU4LCAweDE4LCAweGMwLCAweDhiLCAweDA0LCAweDI2LCAweDA2LCAweDQwLCAweGUwLCAweDZhLCAweGIwLCAweDQyLAotMHgxNCwgMHhkMCwgMHhmOCwgMHg2OCwgMHgwMSwgMHgzMCwgMHhmOCwgMHg2MCwgMHgxOSwgMHgyOCwgMHgxMSwgMHhkMywKLTB4MWIsIDB4NDgsIDB4MDEsIDB4N2IsIDB4MDAsIDB4MjksIDB4MGQsIDB4ZDEsIDB4ZmYsIDB4MzAsIDB4NDEsIDB4MzAsCi0weDQwLCAweDc4LCAweDAwLCAweDI4LCAweDA4LCAweGQxLCAweGI4LCAweDY4LCAweDAyLCAweGYwLCAweDkwLCAweGZmLAotMHgwMCwgMHgyMCwgMHhmOCwgMHg2MCwgMHhlNiwgMHg2MiwgMHgwMSwgMHhlMCwgMHgwMCwgMHgyMCwgMHhmOCwgMHg2MCwKLTB4MzgsIDB4NjgsIDB4MDMsIDB4MjgsIDB4MGIsIDB4ZDEsIDB4ZWMsIDB4MWQsIDB4NzksIDB4MzQsIDB4ZTAsIDB4NmIsCi0weDgwLCAweDA4LCAweDAyLCAweGQzLCAweDAyLCAweDIwLCAweDAyLCAweGYwLCAweDA3LCAweGZjLCAweDAyLCAweDIzLAotMHhlMCwgMHg2YiwgMHg5OCwgMHg0MywgMHhlMCwgMHg2MywgMHgzOCwgMHg2OCwgMHgwMSwgMHgzMCwgMHgzOCwgMHg2MCwKLTB4MDMsIDB4MjgsIDB4MDEsIDB4ZDksIDB4MDAsIDB4MjAsIDB4MzgsIDB4NjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDNjLCAweDA0LCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwKLTB4ZTQsIDB4MmMsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjQsIDB4MWQsIDB4NDgsCi0weDg0LCAweDhhLCAweDFkLCAweDRhLCAweDEzLCAweDhhLCAweGMxLCAweDFkLCAweDA5LCAweDMxLCAweDAxLCAweDI3LAotMHg5YywgMHg0MiwgMHgwMywgMHhkMSwgMHg0MywgMHg4YSwgMHg1NCwgMHg4YSwgMHhhMywgMHg0MiwgMHgxMCwgMHhkMCwKLTB4MGIsIDB4NzgsIDB4MDAsIDB4MmIsIDB4MGQsIDB4ZDAsIDB4NGIsIDB4NzgsIDB4MDAsIDB4MmIsIDB4MGEsIDB4ZDAsCi0weDQ0LCAweDhiLCAweDkzLCAweDhhLCAweDljLCAweDQyLCAweDA0LCAweGRjLCAweDEzLCAweDRiLCAweGMwLCAweDQ2LAotMHg1ZiwgMHg2MCwgMHg5NywgMHg4MiwgMHgwMSwgMHhlMCwgMHgwMSwgMHgzMywgMHg5MywgMHg4MiwgMHhjMywgMHg4YiwKLTB4NWMsIDB4MWMsIDB4YzQsIDB4ODMsIDB4ODQsIDB4OGIsIDB4YTMsIDB4NDIsIDB4MGUsIDB4ZGIsIDB4ODQsIDB4OGEsCi0weDA1LCAweDhiLCAweDAwLCAweDIzLCAweGFjLCAweDQyLCAweDA1LCAweGRhLCAweDQ0LCAweDhhLCAweGM1LCAweDhhLAotMHhhYywgMHg0MiwgMHgwMSwgMHhkYSwgMHg0YiwgMHg3MCwgMHgwMCwgMHhlMCwgMHg0ZiwgMHg3MCwgMHg0MywgMHg4MiwKLTB4ODMsIDB4ODIsIDB4YzMsIDB4ODMsIDB4NDEsIDB4OGEsIDB4YzAsIDB4NDYsIDB4NTEsIDB4ODIsIDB4ODAsIDB4OGEsCi0weGMwLCAweDQ2LCAweDEwLCAweDgyLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweGU4LCAweDBlLCAweDAwLCAweDgwLAotMHgzYywgMHgwNCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHhmNywgMHhiNSwgMHg5MSwgMHhiMCwKLTB4NmIsIDB4NDYsIDB4ODQsIDB4MWUsIDB4MTIsIDB4OTksIDB4MTQsIDB4MjksIDB4MWEsIDB4ZDksIDB4MDAsIDB4MjAsCi0weDgxLCAweDAwLCAweDY3LCAweDU4LCAweGMwLCAweDQ2LCAweDU3LCAweDUwLCAweDAxLCAweDMwLCAweDAwLCAweDA2LAotMHgwMCwgMHgwZSwgMHgxMCwgMHgyOCwgMHhmNiwgMHhkMywgMHgwMCwgMHgyMSwgMHgwNSwgMHgyMCwgMHg4NywgMHgwMCwKLTB4ZDYsIDB4NTksIDB4NGYsIDB4MWMsIDB4M2QsIDB4MDYsIDB4MmQsIDB4MGUsIDB4MGYsIDB4MWMsIDB4YmYsIDB4MDAsCi0weGRlLCAweDUxLCAweDI5LCAweDFjLCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDEwLCAweDI4LAotMHhmMSwgMHhkMywgMHgwOSwgMHhlMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg2MywgMHg1OCwgMHhjMCwgMHg0NiwKLTB4NTMsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDYsIDB4MjgsIDB4ZjYsIDB4ZDMsCi0weDAwLCAweDIwLCAweGUwLCAweDcwLCAweDIwLCAweDcyLCAweDYwLCAweDcyLCAweGEwLCAweDcyLCAweDIwLCAweDczLAotMHg2MCwgMHg3MywgMHgxMiwgMHg5OSwgMHgxNCwgMHgyOSwgMHgzNywgMHhkOSwgMHg2OSwgMHg0NiwgMHg4ZSwgMHgxYywKLTB4OTEsIDB4NzgsIDB4MDksIDB4MDcsIDB4MDksIDB4MGYsIDB4ODksIDB4MDAsIDB4MTQsIDB4MzksIDB4MGQsIDB4MDYsCi0weDJkLCAweDE2LCAweDAwLCAweDI3LCAweDAwLCAweDJkLCAweDFiLCAweGRkLCAweGYwLCAweDE5LCAweDEwLCAweGE5LAotMHgwMCwgMHhmMCwgMHgzZCwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwZSwgMHhkMCwKLTB4MDAsIDB4MjAsIDB4MTAsIDB4YTksIDB4MDksIDB4NzgsIDB4MDAsIDB4MjksIDB4MDksIDB4ZGQsIDB4MDAsIDB4MjIsCi0weDM5LCAweDE4LCAweDcyLCAweDU0LCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDEwLCAweGE5LAotMHgwOSwgMHg3OCwgMHg4OCwgMHg0MiwgMHhmNiwgMHhkYiwgMHgxMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHgzOCwgMHgxOCwKLTB4MDcsIDB4MDYsIDB4M2YsIDB4MGUsIDB4YWYsIDB4NDIsIDB4ZTMsIDB4ZGIsIDB4NjgsIDB4NDYsIDB4ZTIsIDB4MWQsCi0weDBkLCAweDMyLCAweDAwLCAweDIxLCAweGFiLCAweDA4LCAweDVmLCAweDFjLCAweDA4LCAweGQwLCAweDhiLCAweDAwLAotMHhjNCwgMHg1OCwgMHhjMCwgMHg0NiwgMHhkNCwgMHg1MCwgMHgwMSwgMHgzMSwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwKLTB4OGYsIDB4NDIsIDB4ZjYsIDB4ZDgsIDB4MTQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDkwLCAweGI0LCAweDg3LCAweDFlLCAweDAwLCAweDIwLCAweDg5LCAweDA4LCAweDRiLCAweDFjLCAweDA4LCAweGQwLAotMHg4MSwgMHgwMCwgMHg1NCwgMHg1OCwgMHhjMCwgMHg0NiwgMHg3YywgMHg1MCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwKLTB4MDAsIDB4MGUsIDB4ODMsIDB4NDIsIDB4ZjYsIDB4ZDgsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjQsCi0weDAyLCAweDc4LCAweGQyLCAweDA2LCAweGQyLCAweDBlLCAweDAwLCAweDIzLCAweDAxLCAweDI3LCAweDAxLCAweDJhLAotMHgwMSwgMHhkYywgMHgwZiwgMHg3MCwgMHgxMSwgMHhlMCwgMHg0MCwgMHg3OCwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MCwKLTB4MTQsIDB4MmEsIDB4MDQsIDB4ZDEsIDB4MDgsIDB4NDgsIDB4MDEsIDB4N2EsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NzIsCi0weDA3LCAweGUwLCAweDAyLCAweDJhLCAweDA1LCAweGQwLCAweDA1LCAweDJhLCAweDAzLCAweGQwLCAweDA2LCAweDJhLAotMHgwMSwgMHhkMCwgMHgxNSwgMHgyYSwgMHgwMiwgMHhkMSwgMHgxOCwgMHgxYywgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MzgsIDB4MWMsIDB4ZmIsIDB4ZTcsIDB4ZTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4YjUsIDB4MGYsIDB4NDgsCi0weDAxLCAweDIzLCAweDFiLCAweDA2LCAweDQxLCAweDY5LCAweDk5LCAweDQzLCAweDFhLCAweDA5LCAweDQxLCAweDYxLAotMHhkMSwgMHg2MCwgMHgwMCwgMHgyMSwgMHhhMSwgMHgyMiwgMHg1MiwgMHgwMywgMHg5MSwgMHg2MSwgMHgxOSwgMHgxYywKLTB4MDksIDB4NGEsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsCi0weDgwLCAweDY5LCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweDAyLCAweGYwLCAweDYxLCAweGZlLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwNCwgMHg0OCwgMHg0MSwgMHg4OCwgMHgwMSwgMHgzMSwgMHg0MSwgMHg4MCwgMHhmOCwgMHhlNywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ZTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGYwLCAweGI1LCAweDg2LCAweGIwLCAweDk1LCAweDRhLCAweGQwLCAweDY4LAotMHhkNywgMHgxZCwgMHg3OSwgMHgzNywgMHgwMSwgMHgyOCwgMHgwOSwgMHhkMSwgMHgzOCwgMHg4OSwgMHgwMCwgMHgyOCwKLTB4MDYsIDB4ZDEsIDB4ZDAsIDB4NmYsIDB4MDIsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsCi0weDE0LCAweDIwLCAweDM4LCAweDgxLCAweDhlLCAweDRjLCAweDYxLCAweDZhLCAweDhlLCAweDQ4LCAweGMzLCAweDZiLAotMHg1OSwgMHgxOCwgMHhjMSwgMHg2MywgMHhhMCwgMHg2YSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhkNCwgMHgxOCwKLTB4YTAsIDB4NjIsIDB4MjEsIDB4NmEsIDB4MDksIDB4MDMsIDB4MDksIDB4MGIsIDB4ODEsIDB4NDIsIDB4MDUsIDB4ZDEsCi0weDAxLCAweDIwLCAweDQwLCAweDA0LCAweDg3LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGYzLCAweGUwLAotMHhiYiwgMHg4YSwgMHg1OCwgMHgxYywgMHhiOCwgMHg4MiwgMHgzZCwgMHg4YiwgMHgwMSwgMHgyMCwgMHgwMCwgMHgyMSwKLTB4YWIsIDB4NDIsIDB4MDQsIDB4ZGIsIDB4ZDMsIDB4MWQsIDB4ODksIDB4MzMsIDB4NTgsIDB4NzAsIDB4YjksIDB4ODIsCi0weGY5LCAweDgzLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGQzLCAweDE4LCAweDA1LCAweDkzLCAweDViLCAweDY5LAotMHgwZiwgMHgyYiwgMHg3MywgMHhkMiwgMHgwMCwgMHgyMSwgMHg3YywgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzOSwgMHg2MSwKLTB4MjEsIDB4NmEsIDB4OGEsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4NGIsIDB4NjgsIDB4MWUsIDB4MGMsCi0weDM2LCAweDA0LCAweGZkLCAweDFmLCAweDA5LCAweDNkLCAweDAwLCAweDJlLCAweDA1LCAweGQxLCAweDNiLCAweDJhLAotMHgwMywgMHhkMywgMHgwMSwgMHgyMywgMHhkYiwgMHgwMiwgMHg5YSwgMHg0MiwgMHgwMSwgMHhkOSwgMHhhOCwgMHg3MywKLTB4YzgsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weGMwLCAweDQ2LCAweDAzLCAweDkxLCAweDAzLCAweGE5LCAweDA5LCAweDg4LCAweDAxLCAweDMxLCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHg3OSwgMHg4MiwgMHg0OSwgMHgwOSwgMHgwNSwgMHgzMSwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwKLTB4NjksIDB4NGUsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTYsIDB4NjksIDB4NDgsIDB4NDMsIDB4NmEsIDB4YzAsIDB4NDYsCi0weDAxLCAweDkzLCAweDgzLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkzLCAweGMyLCAweDFkLCAweDExLCAweDMyLAotMHg4MCwgMHg2OSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHg5MiwgMHg2OCwgMHhiMywgMHgwNywgMHgxYSwgMHg0MywKLTB4MTIsIDB4NjgsIDB4OTAsIDB4NDIsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjAsCi0weDBkLCAweGUwLCAweDkwLCAweDQyLCAweDA1LCAweGQ5LCAweDAwLCAweDliLCAweDE4LCAweDFhLCAweDAxLCAweDliLAotMHhkMiwgMHgxYSwgMHg4MiwgMHgxOCwgMHgwMCwgMHhlMCwgMHgxMiwgMHgxYSwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMSwKLTB4OTEsIDB4NDIsIDB4MDAsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjgsIDB4NjUsIDB4ZDEsIDB4NTEsIDB4NDksCi0weDIwLCAweDY5LCAweDAwLCAweDI4LCAweDYyLCAweGQwLCAweDA1LCAweDk5LCAweDQ4LCAweDY5LCAweDAxLCAweDMwLAotMHg0OCwgMHg2MSwgMHgwMiwgMHgyMCwgMHgyMSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHhmMCwKLTB4YTcsIDB4ZmMsIDB4NzgsIDB4NjMsIDB4YmUsIDB4NjAsIDB4NDksIDB4NDksIDB4MjIsIDB4NmEsIDB4YTMsIDB4NmIsCi0weGQzLCAweDE4LCAweDY2LCAweDZiLCAweGIzLCAweDQyLCAweDAwLCAweGQ5LCAweDIyLCAweDZiLCAweGMwLCAweDQ2LAotMHhiYSwgMHg2MiwgMHhiYSwgMHg2YSwgMHgwYywgMHgzMiwgMHhmYSwgMHg2MiwgMHgwMCwgMHgyMiwgMHhmYSwgMHg2MSwKLTB4MDMsIDB4YWEsIDB4NTIsIDB4ODgsIDB4ZDIsIDB4MDksIDB4MDMsIDB4ZDMsIDB4MDEsIDB4MjIsIDB4MDAsIDB4ZTAsCi0weDdiLCAweGUwLCAweDAwLCAweGUwLCAweDAwLCAweDIyLCAweDdhLCAweDYwLCAweDdhLCAweDY4LCAweGMwLCAweDQ2LAotMHgwMiwgMHg2MCwgMHg3OCwgMHg4YSwgMHg0MSwgMHg0ZSwgMHg2MCwgMHgyOCwgMHgwNCwgMHhkYywgMHhiMCwgMHg4MywKLTB4NzgsIDB4OGEsIDB4YzAsIDB4NDYsIDB4ZjAsIDB4ODMsIDB4MDgsIDB4ZTAsIDB4NjAsIDB4MjAsIDB4YjAsIDB4ODMsCi0weDc5LCAweDhhLCAweGY4LCAweDZhLCAweDQyLCAweDE4LCAweDYzLCAweDZiLCAweDlhLCAweDQyLCAweDAzLCAweGQ4LAotMHhmMSwgMHg4MywgMHgwMCwgMHgyMiwgMHgzYSwgMHg2MywgMHgwNSwgMHhlMCwgMHgyMSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4MzksIDB4NjMsIDB4NjEsIDB4NmIsIDB4MDgsIDB4MWEsIDB4ZjAsIDB4ODMsIDB4MmQsIDB4NDksIDB4NzgsIDB4NmIsCi0weDQyLCAweDY4LCAweGMwLCAweDQ2LCAweGJhLCAweDYwLCAweDgyLCAweDY4LCAweGMwLCAweDQ2LCAweGZhLCAweDYwLAotMHgwMiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg3YSwgMHg2MSwgMHg0MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MSwKLTB4MmUsIDB4NGIsIDB4YzgsIDB4MTgsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZjAsIDB4MzcsIDB4ZjksIDB4MDQsIDB4OTgsCi0weDAwLCAweGYwLCAweDg4LCAweGY4LCAweDAwLCAweGYwLCAweGY2LCAweGZhLCAweDc4LCAweDhhLCAweGYxLCAweDhiLAotMHg4OCwgMHg0MiwgMHgwNCwgMHhkMSwgMHhmOSwgMHg2YSwgMHgwOCwgMHgxOCwgMHgwNCwgMHhlMCwgMHgzOCwgMHhlMCwKLTB4MzIsIDB4ZTAsIDB4M2EsIDB4NmIsIDB4MTAsIDB4MTgsIDB4NDAsIDB4MWEsIDB4ODEsIDB4MDcsIDB4MDIsIDB4ZDAsCi0weDgwLCAweDA4LCAweDgwLCAweDAwLCAweDA0LCAweDMwLCAweDYxLCAweDZiLCAweDA5LCAweDFhLCAweGEyLCAweDZiLAotMHg5MSwgMHg0MiwgMHgwMCwgMHhkMiwgMHgyMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MiwgMHhlOCwgMHg3YiwKLTB4MDAsIDB4MjgsIDB4MDgsIDB4ZDAsIDB4MDAsIDB4MjIsIDB4ZWEsIDB4NzMsIDB4MDUsIDB4OTksIDB4NDgsIDB4NjksCi0weDAxLCAweDM4LCAweDQ4LCAweDYxLCAweDc4LCAweDZiLCAweDAwLCAweGYwLCAweDczLCAweGZhLCAweDE4LCAweDQ4LAotMHg4MCwgMHg2YSwgMHg4MCwgMHgwNiwgMHg4MCwgMHgwZSwgMHgwMSwgMHgyOCwgMHgwYSwgMHhkMSwgMHgyMCwgMHg2YSwKLTB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4MGIsIDB4NGMsIDB4YTEsIDB4NmEsIDB4ODgsIDB4NDIsIDB4MDMsIDB4ZDAsCi0weDA2LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAxLCAweDIwLCAweDQwLCAweDA0LAotMHgwOCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwNiwgMHhlMCwgMHhlMCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4MDEsIDB4ZDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ZmEsIDB4MDEsIDB4MjAsIDB4YTgsIDB4NzMsIDB4ZWQsIDB4ZTcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDE0LCAweDQwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgyOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwKLTB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4YzQsIDB4MGIsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgwLCAweGI1LCAweDA3LCAweDFjLCAweDc4LCAweDZhLCAweDQwLCAweDg5LAotMHhmZiwgMHgyMSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg0MCwgMHgxMCwgMHg0OCwgMHgwMiwgMHhkMSwgMHg4MSwgMHg2YywKLTB4MDEsIDB4MzEsIDB4ODEsIDB4NjQsIDB4NzksIDB4NmEsIDB4NDksIDB4ODksIDB4NDksIDB4MGIsIDB4MDIsIDB4ZDIsCi0weDQxLCAweDZjLCAweDAxLCAweDMxLCAweDQxLCAweDY0LCAweDBiLCAweDQ4LCAweDQxLCAweDZhLCAweDAxLCAweDMxLAotMHg0MSwgMHg2MiwgMHg3OCwgMHg2YSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MiwgMHgzOCwgMHg2YiwKLTB4MDAsIDB4ZjAsIDB4ZjgsIDB4ZmIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjMsIDB4ZjgsIDB4MDEsIDB4MjAsCi0weDA0LCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDczLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgxOCwgMHgxYSwgMHgwMCwgMHg4MCwKLTB4ZjgsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MDAsIDB4MjIsIDB4ZjksIDB4MWQsIDB4NjEsIDB4MzEsIDB4MGQsIDB4MWMsCi0weDc4LCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDQwLCAweDg5LAotMHgwMywgMHgwYywgMHgwMSwgMHhkMiwgMHg0MCwgMHgwYSwgMHgwMywgMHhkMiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywKLTB4YzEsIDB4ZmYsIDB4NjcsIDB4ZTAsIDB4MzUsIDB4NDgsIDB4YzAsIDB4NmIsIDB4MDAsIDB4MDksIDB4MWYsIDB4ZDMsCi0weDA4LCAweDc4LCAweDQwLCAweDA4LCAweDFjLCAweGQyLCAweDAwLCAweDIwLCAweDQzLCAweDAwLCAweGNjLCAweDVhLAotMHgzMSwgMHg0ZSwgMHg5ZSwgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhmMywgMHgxOCwgMHgxYiwgMHg4OCwKLTB4OWMsIDB4NDIsIDB4MGUsIDB4ZDAsIDB4YjgsIDB4NjksIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjEsCi0weGY4LCAweDY4LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHgyNywgMHhmOSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3NCwgMHhmOCwgMHg0NiwgMHhlMCwgMHgwMSwgMHgzMCwKLTB4MDMsIDB4MjgsIDB4ZTMsIDB4ZGIsIDB4MDIsIDB4MjAsIDB4NDMsIDB4MDAsIDB4NWMsIDB4MTgsIDB4ZTQsIDB4ODgsCi0weDIyLCAweDRlLCAweDllLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGYzLCAweDE4LCAweDFiLCAweDg4LAotMHg5YywgMHg0MiwgMHgwMywgMHhkMSwgMHgwMSwgMHgyMywgMHgwMSwgMHgzOCwgMHhkOCwgMHg0MiwgMHhmMCwgMHhkYywKLTB4MDEsIDB4MjMsIDB4ZDgsIDB4NDIsIDB4YzQsIDB4ZDAsIDB4MWIsIDB4NGUsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsCi0weGYwLCAweDE4LCAweDQwLCAweDY5LCAweDAwLCAweDI4LCAweDI0LCAweGQwLCAweDdkLCAweDYzLCAweDAwLCAweDk4LAotMHg0MCwgMHg4OSwgMHgwMCwgMHgwYywgMHgxZiwgMHhkMiwgMHgwMCwgMHgyNCwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwKLTB4ZjAsIDB4MTgsIDB4YzAsIDB4NmIsIDB4MzUsIDB4MWMsIDB4MDAsIDB4MjgsIDB4MTcsIDB4ZDAsIDB4ZmUsIDB4MWQsCi0weDJkLCAweDM2LCAweGEyLCAweDAwLCAweDUyLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLCAweGQyLCAweDE4LAotMHhkMiwgMHg2YiwgMHgzOCwgMHgxYywgMHgzMSwgMHgxYywgMHgwMiwgMHhmMCwgMHg3YiwgMHhmYywgMHgwMSwgMHgyOCwKLTB4MGUsIDB4ZDAsIDB4MDEsIDB4MzQsIDB4YTAsIDB4MDAsIDB4NDAsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsCi0weGMwLCAweDE4LCAweGMwLCAweDZiLCAweDAwLCAweDI4LCAweGVhLCAweGQxLCAweDAxLCAweGUwLCAweDAxLCAweDJhLAotMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwOCwgMHhmOCwgMHhmOCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDgwLCAweGI1LCAweDA3LCAweDFjLCAweGI4LCAweDY5LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDg4LCAweDYxLAotMHhmOCwgMHg2OCwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHg3OCwgMHg2YSwgMHg0MCwgMHg4OSwKLTB4MDEsIDB4MGMsIDB4MGUsIDB4ZDIsIDB4NDAsIDB4MGEsIDB4MGMsIDB4ZDMsIDB4MzgsIDB4NjgsIDB4NDAsIDB4MDgsCi0weDAyLCAweGQzLCAweDM4LCAweDFjLCAweDAyLCAweGYwLCAweDBjLCAweGZjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHhiYiwgMHhmOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwOCwgMHhmOCwgMHgwMiwgMHhlMCwgMHgzOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4MzAsIDB4ZmYsIDB4MDEsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAxLCAweDIxLCAweDAwLCAweDZiLCAweDQwLCAweDZhLCAweGMwLCAweDQ2LCAweDAxLCAweDYwLCAweDcwLCAweDQ3LAotMHhiMCwgMHhiNCwgMHhjMSwgMHgxZCwgMHgzOSwgMHgzMSwgMHgwOSwgMHg4YiwgMHg4OSwgMHgwOCwgMHgwOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4ODQsIDB4NmEsIDB4YzIsIDB4MWQsIDB4NjEsIDB4MzIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjksCi0weDBjLCAweGRkLCAweDg3LCAweDAwLCAweDNkLCAweDE5LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDJiLCAweDQzLAotMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkMywgMHg1MSwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywKLTB4ODgsIDB4NDIsIDB4ZjIsIDB4ZGIsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YTAsIDB4YjAsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGMxLCAweDFkLCAweDIxLCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwYiwgMHg5MSwgMHhjMSwgMHgxZCwgMHg1MywgMHgzMSwgMHgxOSwgMHg0MywgMHgxZiwgMHg5MSwKLTB4MDksIDB4NjgsIDB4MDEsIDB4YWYsIDB4ZmEsIDB4MWQsIDB4MzksIDB4MzIsIDB4MWUsIDB4OTIsIDB4MTcsIDB4YWIsCi0weDU5LCAweDgwLCAweDNhLCAweDQ5LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDBhLCAweDZhLCAweDEzLCAweDQzLAotMHhjYywgMHgxZCwgMHgxMSwgMHgzNCwgMHg4OSwgMHg2OSwgMHgwOSwgMHgwMywgMHgwOSwgMHgwYiwgMHgyMiwgMHg2OSwKLTB4ZTUsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MWQsIDB4OTUsIDB4ZmMsIDB4MWQsIDB4MzksIDB4MzQsIDB4NjQsIDB4OGIsCi0weDY0LCAweDA5LCAweDA1LCAweDM0LCAweDI0LCAweDA2LCAweDI0LCAweDBlLCAweDFjLCAweDk0LCAweDU2LCAweDFhLAotMHgxYiwgMHg5NiwgMHgxYywgMHg5YywgMHgyZSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwMSwgMHgyNiwKLTB4MWQsIDB4OWQsIDB4MWEsIDB4NjgsIDB4OTEsIDB4NDIsIDB4MDEsIDB4ZDEsIDB4MzIsIDB4MWMsIDB4MGIsIDB4ZTAsCi0weDkxLCAweDQyLCAweDAzLCAweGQ5LCAweDUyLCAweDFiLCAweDFiLCAweDllLCAweGI1LCAweDE4LCAweDAwLCAweGUwLAotMHg1NSwgMHgxYSwgMHgwMSwgMHgyMiwgMHgyNCwgMHgwMSwgMHhhYywgMHg0MiwKLTB4MDAsIDB4ZDMsIDB4MDAsIDB4MjIsIDB4MDEsIDB4MmEsIDB4ZTYsIDB4ZDEsIDB4OTEsIDB4MDcsIDB4MDEsIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweDM5LCAweDYwLCAweDkzLCAweDA3LCAweDAxLCAweDFkLCAweDE5LCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHg3OSwgMHg2MCwgMHhjMSwgMHgxZCwgMHgwMSwgMHgzMSwgMHgxOSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4YjksIDB4NjAsIDB4MWYsIDB4OTksIDB4MDksIDB4NjgsIDB4MWUsIDB4OWEsCi0weGMwLCAweDQ2LCAweDUxLCAweDgzLCAweGMxLCAweDFkLCAweDFkLCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgzOCwgMHg2MywgMHg3OSwgMHg2MiwgMHhjMSwgMHgxZCwgMHgxMSwgMHgzMSwgMHgxOSwgMHg0MywKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4YjksIDB4NjEsIDB4YzEsIDB4MWQsIDB4MDUsIDB4MzEsIDB4MTksIDB4NDMsCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweGY5LCAweDYwLCAweGMxLCAweDFkLCAweDE3LCAweDMxLCAweDE5LCAweDQzLAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOSwgMHg4MywgMHgwZSwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4ZjgsIDB4ODEsIDB4MzgsIDB4NjgsIDB4NDAsIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MzgsIDB4MWMsCi0weDAyLCAweGYwLCAweDVjLCAweGZiLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBiLCAweGY4LCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHg1OCwgMHhmZiwgMHgyMCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4ZjgsIDB4YjUsIDB4MDcsIDB4MWMsCi0weGY4LCAweDFkLCAweDM5LCAweDMwLCAweDQxLCAweDhiLCAweDM5LCAweDRhLCAweDkxLCAweDQyLCAweDAwLCAweGRkLAotMHg0MiwgMHg4MywgMHg0MiwgMHg4YiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwMSwgMHgyMCwgMHgzYSwgMHgxZCwKLTB4MDYsIDB4Y2EsIDB4YmIsIDB4NmEsIDB4MDIsIDB4ZjAsIDB4MGUsIDB4ZmYsIDB4MzMsIDB4NGEsIDB4YzAsIDB4NDYsCi0weDAwLCAweDkyLCAweDMzLCAweDRlLCAweDMwLCAweDZhLCAweDMzLCAweDRjLCAweGUxLCAweDZkLCAweDQxLCAweDE4LAotMHgzOCwgMHg2YiwgMHhjMywgMHgxZCwgMHgwNSwgMHgzMywgMHgwMSwgMHgyMCwgMHg3MiwgMHg2YSwgMHgwMiwgMHhmMCwKLTB4ZmIsIDB4ZmUsIDB4ZTAsIDB4NmQsIDB4MTgsIDB4MzAsIDB4MDAsIDB4MjUsIDB4YjEsIDB4NmEsIDB4ODEsIDB4NDIsCi0weDAxLCAweGQ4LCAweGU1LCAweDY1LCAweDAwLCAweGUwLCAweGUwLCAweDY1LCAweDJmLCAweDIzLCAweDliLCAweDAxLAotMHgyMCwgMHgxYywgMHhlMSwgMHg2ZCwgMHhlNCwgMHgxOCwgMHgyMiwgMHg2OCwgMHg5MiwgMHgwMCwgMHgyNywgMHg0YiwKLTB4YzAsIDB4NDYsIDB4OTksIDB4NTAsIDB4MjYsIDB4NDgsIDB4YzEsIDB4NmIsIDB4NGEsIDB4MDgsIDB4MDUsIDB4ZDMsCi0weDQ5LCAweDA4LCAweDQ5LCAweDAwLCAweGMxLCAweDYzLCAweDAxLCAweDIwLCAweDAxLCAweGYwLCAweGQ2LCAweGZmLAotMHgyMiwgMHg0YSwgMHgxZiwgMHg0OCwgMHhjMSwgMHgxZCwgMHg4OSwgMHgzMSwgMHgwYiwgMHg3OCwgMHgwMCwgMHgyYiwKLTB4MDIsIDB4ZDAsIDB4NDksIDB4NzgsIDB4MDAsIDB4MjksIDB4MDAsIDB4ZDEsIDB4MWUsIDB4NGEsIDB4YzAsIDB4NDYsCi0weDAwLCAweDkyLCAweDIwLCAweDY4LCAweDgwLCAweDAwLCAweDE5LCAweDRiLCAweGMzLCAweDE4LCAweDA1LCAweGNlLAotMHhjMSwgMHgxZCwgMHgxMSwgMHgzMSwgMHgwMSwgMHgyMCwgMHgwMiwgMHhmMCwgMHhjNywgMHhmZSwgMHgxNCwgMHg0OCwKLTB4MjEsIDB4NjgsIDB4MDEsIDB4MzEsIDB4MjEsIDB4NjAsIDB4MTcsIDB4MjksIDB4MDAsIDB4ZDMsIDB4MjUsIDB4NjAsCi0weDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDBkLCAweDY1LCAweDc5LCAweDZhLCAweDNhLCAweDZiLCAweGMwLCAweDQ2LAotMHg1MSwgMHg2MiwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg2OCwgMHgwMCwgMHgyOSwKLTB4MDMsIDB4ZDEsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4ODEsIDB4NjAsIDB4MDQsIDB4ZTAsIDB4MzksIDB4NmIsCi0weGMyLCAweDY4LCAweGMwLCAweDQ2LCAweDExLCAweDY1LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweGMxLCAweDYwLAotMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwNSwgMHgwMCwgMHgwMCwKLTB4MTgsIDB4MDAsIDB4MTQsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDQ0LCAweDgyLCAweDIwLCAweDQwLCAweGU4LCAweDBlLCAweDAwLCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAyLAotMHgwNCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiNSwgMHgxMSwgMHg0ZSwgMHhmZiwgMHgyNSwgMHgwMSwgMHgzNSwKLTB4MTAsIDB4NGYsIDB4YzAsIDB4NDYsIDB4MzUsIDB4NjAsIDB4NzgsIDB4NjksIDB4MDEsIDB4MzgsIDB4NzgsIDB4NjEsCi0weGJjLCAweDY4LCAweDAwLCAweDJjLCAweDEwLCAweGQwLCAweDIwLCAweDZkLCAweGMwLCAweDQ2LCAweGI4LCAweDYwLAotMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgyMSwgMHhmOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwNCwgMHhmYSwKLTB4MDgsIDB4NDgsIDB4ODAsIDB4NmEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDcsIDB4ZTksIDB4ZDEsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDA1LCAweDQ4LCAweGMxLCAweDc5LCAweDAxLCAweDMxLCAweGMxLCAweDcxLAotMHhmNywgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgyOCwgMHgxYiwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDAxLCAweDIwLCAweDgwLCAweDAzLCAweDAxLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDcwLCAweDQ3LAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgMHgzOCwgMHg2OCwgMHhjMCwgMHgwOCwKLTB4MDksIDB4ZDMsIDB4MWQsIDB4NDgsIDB4MDEsIDB4NmEsIDB4MDEsIDB4MzksIDB4MDEsIDB4NjIsIDB4MjAsIDB4MzAsCi0weDAwLCAweDc5LCAweDAwLCAweDI4LCAweDAxLCAweGQwLCAweGZlLCAweGY3LCAweGU5LCAweGZkLCAweDAxLCAweDIzLAotMHg5YiwgMHgwNywgMHhmOCwgMHgxZCwgMHgxZCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgxNiwgMHg0YywKLTB4NjEsIDB4NmEsIDB4ODEsIDB4NDIsIDB4MjEsIDB4ZDEsIDB4MDEsIDB4MWMsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweDI5LCAweDFhLCAweGQxLCAweDAwLCAweGYwLCAweDIyLCAweGY4LAotMHg2MCwgMHg2MiwgMHg2MCwgMHg2YSwgMHgyMSwgMHg2YSwgMHg4OCwgMHg0MiwgMHgwNSwgMHhkMCwgMHgwMSwgMHgyMSwKLTB4ODksIDB4MDcsIDB4MDEsIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDQsIDB4ZjIsIDB4ZDAsIDB4NTEsIDB4MjEsCi0weDg5LCAweDAzLCAweDYyLCAweDZhLCAweDIzLCAweDZiLCAweDlhLCAweDQyLCAweDAyLCAweGQxLCAweDYwLCAweDZiLAotMHhhMiwgMHg2YiwgMHg4MCwgMHgxYSwgMHgwNCwgMHgzOCwgMHhjOCwgMHg2MCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzksIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZjcsIDB4ZTcsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHhjMSwgMHgxZCwgMHgwMSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywKLTB4MDgsIDB4MTgsIDB4MGQsIDB4MzAsIDB4ODEsIDB4MDcsIDB4MDIsIDB4ZDAsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsCi0weDA0LCAweDMwLCAweDA0LCAweDQ5LCAweDhhLCAweDZiLCAweDEyLCAweDE4LCAweDRiLCAweDZiLCAweDlhLCAweDQyLAotMHgwMCwgMHhkOSwgMHgwOCwgMHg2YiwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4YjUsIDB4MDQsIDB4NDgsIDB4YzAsIDB4NjgsIDB4MTAsIDB4MjgsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4ZjAsCi0weDA1LCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLAotMHg4OCwgMHhiNSwgMHgwYywgMHg0ZiwgMHgzOCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgxMSwgMHhkMSwgMHgwYiwgMHg0OSwKLTB4MTAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4ZjUsIDB4ZmQsIDB4MDAsIDB4MjgsIDB4MGIsIDB4ZDAsIDB4MDEsIDB4MjAsCi0weDM4LCAweDcxLCAweDA4LCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDA3LCAweDQ4LCAweDQyLCAweDY4LAotMHgwNywgMHg0YiwgMHgwMSwgMHg2OCwgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHhkZiwgMHhmZCwgMHg4OCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4ZjUsIDB4MmMsIDB4ZmYsIDB4ZmYsCi0weDEwLCAweDAwLCAweDM1LCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDQ0LCAweDgwLCAweDIwLCAweDQwLAotMHg5MCwgMHhiNSwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwMiwgMHgxMCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwKLTB4MGYsIDB4NGYsIDB4MTAsIDB4MjEsIDB4ZjgsIDB4MWQsIDB4M2QsIDB4MzAsIDB4MDIsIDB4ZjAsIDB4NGMsIDB4ZmMsCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGZjLCAweDE4LCAweGUwLCAweDY4LCAweDAwLCAweDI4LCAweDAxLCAweGQwLAotMHgwMCwgMHhmMCwgMHgxNCwgMHhmOCwgMHgwMCwgMHgyMCwgMHhjOSwgMHgyMywgMHgxYiwgMHgwMSwgMHhmOSwgMHgxOCwKLTB4MDgsIDB4NzEsIDB4ZTAsIDB4NjgsIDB4MTAsIDB4MjgsIDB4MDQsIDB4ZDMsIDB4MDEsIDB4MjAsIDB4YmIsIDB4MjMsCi0weDFiLCAweDAxLCAweGY5LCAweDE4LCAweDQ4LCAweDczLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmOCwgMHhiNSwgMHgzNywgMHg0OCwKLTB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzEsIDB4MTgsIDB4YzksIDB4NjgsIDB4MzUsIDB4NGQsIDB4MTAsIDB4MjksCi0weDAwLCAweGQ5LCAweDEwLCAweDIxLCAweDY5LCAweDYyLCAweDMyLCAweDQ4LCAweGMxLCAweDZjLCAweDAwLCAweDZlLAotMHg4MSwgMHg0MiwgMHgwNywgMHhkOSwgMHgwOCwgMHgxYSwgMHgwNywgMHgwOSwgMHgwMCwgMHgyNCwgMHg2OCwgMHg2YSwKLTB4YjgsIDB4NDIsIDB4MTIsIDB4ZDIsIDB4MDcsIDB4MWMsIDB4MTAsIDB4ZTAsIDB4ODEsIDB4NDIsIDB4MmEsIDB4ZDIsCi0weDJjLCAweDRhLCAweDUyLCAweDZiLCAweDEwLCAweDFhLCAweDA3LCAweDA5LCAweDY4LCAweDZhLCAweGI4LCAweDQyLAotMHgwNSwgMHhkOSwgMHgwYywgMHgwOSwgMHgzOSwgMHgxOSwgMHg4OCwgMHg0MiwgMHgwMywgMHhkMiwgMHhjNCwgMHgxYiwKLTB4MDEsIDB4ZTAsIDB4MDAsIDB4MjQsIDB4MDcsIDB4MWMsIDB4M2UsIDB4MTksIDB4MzAsIDB4MDEsIDB4MjUsIDB4NDksCi0weDAyLCAweGYwLCAweDg0LCAweGZkLCAweDAwLCAweDI4LCAweDNkLCAweGQwLCAweDIzLCAweDQ4LCAweDAwLCAweDJjLAotMHgxYSwgMHhkMSwgMHgxZSwgMHg0OSwgMHgzYSwgMHgwMSwgMHg2ZiwgMHg2MiwgMHgwOSwgMHg2ZSwgMHg4YywgMHgxOCwKLTB4MWQsIDB4NGQsIDB4NmIsIDB4NmIsIDB4YTMsIDB4NDIsIDB4MDAsIDB4ZDgsIDB4ZTQsIDB4MWEsIDB4MWUsIDB4NGIsCi0weDFhLCAweDQzLCAweDAwLCAweDkyLCAweGVhLCAweDZhLCAweDUxLCAweDE4LAotMHgyYSwgMHg2YiwgMHgwMywgMHgxYywgMHgyMCwgMHhlMCwgMHgxYiwgMHg0OCwgMHgwMSwgMHg2YiwgMHgwMSwgMHgzMSwKLTB4MDEsIDB4NjMsIDB4MDAsIDB4MjAsIDB4NjgsIDB4NjIsIDB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDEwLCAweDQ5LCAweDI0LCAweDAxLCAweDNmLCAweDAxLCAweDExLCAweDIyLCAweDUyLCAweDA1LCAweDNhLCAweDQzLAotMHg2ZSwgMHg2MiwgMHgwMCwgMHg5MiwgMHgwZSwgMHg0ZCwgMHhlYSwgMHg2YSwgMHgwOSwgMHg2ZSwgMHg1MSwgMHgxOCwKLTB4MDMsIDB4MWMsIDB4MDYsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MmEsIDB4NmIsIDB4MDIsIDB4ZjAsIDB4NGEsIDB4ZmQsCi0weDBjLCAweDRhLCAweDIyLCAweDQzLCAweDAwLCAweDkyLCAweGJiLCAweDE5LCAweGU5LCAweDZhLCAweDJhLCAweDZiLAotMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg0MSwgMHhmZCwgMHgwMywgMHg0OCwgMHhjMCwgMHg0NiwgMHgwNCwgMHg2NiwKLTB4MDAsIDB4ZjAsIDB4MTAsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4ZGEsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDI4LCAweDFiLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDVkLCAweDJlLCAweGZmLCAweGZmLAotMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMiwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKLTB4MDQsIDB4NDgsIDB4MDEsIDB4NmUsIDB4MDQsIDB4NGEsIDB4ODAsIDB4MzAsIDB4ZDEsIDB4NjAsIDB4MDIsIDB4MjMsCi0weGMxLCAweDZiLCAweDE5LCAweDQzLCAweGMxLCAweDYzLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwMSwgMHgyMCwgMHg4MCwgMHgwMiwKLTB4MWMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDAsIDB4MjcsIDB4MWIsIDB4NGUsIDB4MzMsIDB4MjMsCi0weDliLCAweDAxLCAweGY1LCAweDE4LCAweDY4LCAweDZhLCAweDAwLCAweDI4LCAweDFkLCAweGQ5LCAweDE5LCAweDRjLAotMHg2OCwgMHg0NiwgMHgxMCwgMHgyMSwgMHgwMiwgMHhmMCwgMHg5MCwgMHhmYiwgMHg2OCwgMHg0NiwgMHgwMCwgMHhmMCwKLTB4MzMsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZDAsIDB4MTUsIDB4NDksIDB4NDgsIDB4NjksIDB4MDEsIDB4MzAsCi0weDQ4LCAweDYxLCAweDBhLCAweGUwLCAweDEzLCAweDQ5LCAweDYwLCAweDdiLCAweDAxLCAweDMwLCAweDYwLCAweDczLAotMHg4OCwgMHg3OSwgMHgwMSwgMHgzMCwgMHg4OCwgMHg3MSwgMHgxMSwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhmMCwKLTB4NjUsIDB4ZjksIDB4NjgsIDB4NmEsIDB4MDEsIDB4MzcsIDB4YjgsIDB4NDIsIDB4ZTIsIDB4ZDgsIDB4YmIsIDB4MjMsCi0weDFiLCAweDAxLCAweGYwLCAweDE4LCAweDgxLCAweDdiLCAweDAwLCAweDI5LCAweDAzLCAweGQwLCAweDAwLCAweDIxLAotMHg4MSwgMHg3MywgMHhmZiwgMHhmNywgMHgwNSwgMHhmYiwgMHhmZiwgMHhmNywgMHhlMywgMHhmZSwgMHgwNCwgMHhiMCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGIwLCAweDgyLCAweDIwLCAweDQwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg1OCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNCwgMHgxNywgMHg0ZiwKLTB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZjksIDB4MTgsIDB4MDAsIDB4MjIsIDB4Y2IsIDB4NjgsIDB4MDAsIDB4MmIsCi0weDIzLCAweGQwLCAweDAxLCAweDNiLCAweGNiLCAweDYwLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGZmLCAweDE4LAotMHhiYiwgMHg2OSwgMHgxYywgMHg2ZCwgMHhjMCwgMHg0NiwgMHhiYywgMHg2MSwgMHgwNCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4NWMsIDB4NjAsIDB4NDQsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OWMsIDB4NjAsIDB4ODQsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDFjLCAweDYxLCAweGMwLCAweDY4LCAweGMwLCAweDQ2LCAweDU4LCAweDYxLCAweDFhLCAweDY1LCAweDA4LCAweDY5LAotMHg0MiwgMHgxYywgMHgwYSwgMHg2MSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHgzOCwgMHg2YSwgMHhjMCwgMHg0NiwKLTB4MDMsIDB4NjUsIDB4MDAsIDB4ZTAsIDB4ZmIsIDB4NjEsIDB4M2IsIDB4NjIsIDB4MTgsIDB4MWMsIDB4OTAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDEwLCAweDFjLCAweGZiLCAweGU3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwYSwgMHg0YSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhkMSwgMHgxOCwgMHhjOCwgMHg2OSwgMHgxOSwgMHgyMywKLTB4ZGIsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4MTMsIDB4NjksIDB4MDAsIDB4MmIsIDB4MDYsIDB4ZDAsIDB4MDEsIDB4M2IsCi0weDEzLCAweDYxLCAweGNhLCAweDY5LCAweDEyLCAweDZkLCAweGMwLCAweDQ2LCAweGNhLCAweDYxLCAweDcwLCAweDQ3LAotMHgwMCwgMHgyMSwgMHgxMSwgMHg2MSwgMHhmYiwgMHhlNywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDYsIDB4NGEsIDB4MTEsIDB4NjksIDB4NGIsIDB4MWMsIDB4MTMsIDB4NjEsIDB4NDAsIDB4MzIsIDB4MDAsIDB4MjksCi0weDAxLCAweGQwLCAweGQxLCAweDY5LCAweDAwLCAweGUwLCAweDAwLCAweDIxLCAweDAxLCAweDY1LCAweGQwLCAweDYxLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHgwNiwgMHg0YSwgMHhkMSwgMHg2OCwKLTB4NGIsIDB4MWMsIDB4ZDMsIDB4NjAsIDB4NDAsIDB4MzIsIDB4MDAsIDB4MjksIDB4MDEsIDB4ZDAsIDB4OTEsIDB4NjksCi0weDAwLCAweGUwLCAweDAwLCAweDIxLCAweDAxLCAweDY1LCAweDkwLCAweDYxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNCwgMHgwMCwgMHgyMSwKLTB4MGYsIDB4NGEsIDB4OTcsIDB4ODksIDB4OTIsIDB4NmEsIDB4NGIsIDB4MDAsIDB4MWIsIDB4MTgsIDB4OWIsIDB4OGEsCi0weDAwLCAweDJiLCAweDEyLCAweGQwLCAweGJiLCAweDQyLCAweDEwLCAweGRjLCAweDFjLCAweDFjLCAweDU4LCAweDIzLAotMHg2MywgMHg0MywgMHhkMywgMHgxOCwgMHhkYywgMHgxZiwgMHg0OSwgMHgzYywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsIDB4MWIsIDB4MGUsIDB4MDMsIDB4MmIsIDB4MDIsIDB4ZDAsCi0weDAwLCAweDIwLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAxLCAweDMxLCAweDA0LCAweDI5LCAweGU0LCAweGQzLAotMHgwMSwgMHgyMCwgMHhmOCwgMHhlNywgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHhmNywgMHhiNSwgMHg4NiwgMHhiMCwKLTB4M2QsIDB4NGEsIDB4MDcsIDB4MWMsIDB4ZDEsIDB4NjksIDB4OGYsIDB4NDAsIDB4MDMsIDB4MWMsIDB4MTQsIDB4NmEsCi0weGUzLCAweDQwLCAweDVmLCAweDQwLCAweDA3LCAweDllLCAweDhlLCAweDQwLCAweDc3LCAweDQwLCAweGNmLCAweDQwLAotMHg5NCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5NCwgMHgwMywgMHgxYywgMHhhMywgMHg0MCwgMHgwMCwgMHgyNSwKLTB4MTQsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDQsIDB4OTQsIDB4MDAsIDB4MmMsIDB4NWQsIDB4ZDksIDB4MWMsIDB4MWMsCi0weDMyLCAweDRlLCAweDI2LCAweDQzLCAweDk0LCAweDY5LCAweGU2LCAweDQwLCAweDMzLCAweDFjLCAweDAzLCAweDk2LAotMHg1MywgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MywgMHhkMiwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MiwKLTB4YmIsIDB4MDAsIDB4MDIsIDB4OWEsIDB4ZDIsIDB4NTgsIDB4MTMsIDB4MWMsIDB4MDUsIDB4OWMsIDB4ZTMsIDB4NDAsCi0weDAzLCAweDljLCAweGEzLCAweDQyLCAweDNlLCAweGQxLCAweDhhLCAweDQwLCAweGNhLCAweDQwLCAweDE0LCAweDFjLAotMHg2MywgMHgwMCwgMHgxYiwgMHgxOSwgMHg1YiwgMHgwMSwgMHgwMSwgMHg5YSwgMHhkMiwgMHgxOCwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4MDEsIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsCi0weDFiLCAweDBlLCAweDAzLCAweDJiLCAweDJjLCAweGQxLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ2LCAweDFkLAotMHg1MSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwNywgMHg5ZSwgMHgxZSwgMHg0MCwgMHgwMCwgMHg5NiwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4NDksIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsCi0weDgzLCAweDQyLCAweDFiLCAweGQxLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ2LCAweDFkLCAweDRkLCAweDM2LAotMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwMCwgMHg5ZSwgMHhiMywgMHg0MiwgMHgxMiwgMHhkMSwgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MDgsIDB4OWIsCi0weDMyLCAweDJiLCAweDA0LCAweGQxLCAweDAyLCAweDJhLCAweDA3LCAweGQxLCAweDIwLCAweDA0LCAweDAwLCAweDE0LAotMHgwZiwgMHhlMCwgMHgwOCwgMHg5YiwgMHgzMywgMHgyYiwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyYSwgMHhmNywgMHhkMCwKLTB4MDQsIDB4OWEsIDB4MDEsIDB4MzcsIDB4OTcsIDB4NDIsIDB4MDAsIDB4ZDMsIDB4MDAsIDB4MjcsIDB4MDQsIDB4OWEsCi0weDAxLCAweDM1LCAweGFhLCAweDQyLCAweGFlLCAweGQ4LCAweDAwLCAweDIwLCAweGMwLCAweDQzLCAweDA5LCAweGIwLAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MjcsIDB4NGQsIDB4NjgsIDB4NjksIDB4MDAsIDB4MjgsCi0weDA2LCAweGQwLCAweDI2LCAweDQ4LCAweDAwLCAweDY4LCAweDAyLCAweGYwLCAweDJiLCAweGY4LCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyMywgMHg0YywgMHgwMCwgMHgyNiwgMHhhMCwgMHg2OCwgMHgyMywgMHg0ZiwKLTB4MDAsIDB4MjgsIDB4MTYsIDB4ZDAsIDB4MGYsIDB4ZTAsIDB4MjgsIDB4NmEsIDB4MDIsIDB4MjgsIDB4MDIsIDB4ZDMsCi0weDAxLCAweDIwLCAweDM4LCAweDcxLCAweDBmLCAweGUwLCAweGE2LCAweDYwLCAweGZkLCAweGY3LCAweGRlLCAweGZlLAotMHgwMCwgMHgyOCwgMHhlYSwgMHhkMSwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgwMSwgMHhkMywgMHgwMSwgMHgyMCwKLTB4MzgsIDB4NzEsIDB4ZTgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4NzksIDB4MDAsIDB4MjgsCi0weGU5LCAweGQwLCAweDY4LCAweDY4LCAweDAwLCAweDI4LCAweDFiLCAweGQwLCAweDAxLCAweDIwLCAweGEwLCAweDYwLAotMHhmZSwgMHhmNywgMHhiYywgMHhmYiwgMHgwMCwgMHgyOCwgMHhkNiwgMHhkMSwgMHg2OCwgMHg2OCwgMHgwMCwgMHgyOCwKLTB4ZjYsIDB4ZDEsIDB4MTEsIDB4ZTAsIDB4MDAsIDB4MjgsIDB4ZDAsIDB4ZDEsIDB4MjgsIDB4NmEsIDB4MDIsIDB4MjgsCi0weDAyLCAweGQzLCAweDAxLCAweDIwLCAweDM4LCAweDcxLCAweGNhLCAweGU3LCAweGE2LCAweDYwLCAweGZkLCAweGY3LAotMHhiOSwgMHhmZSwgMHgwMCwgMHgyOCwgMHhjNSwgMHhkMSwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgwMSwgMHhkMywKLTB4MDEsIDB4MjAsIDB4MzgsIDB4NzEsIDB4ZTgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4YmQsIDB4ZDAsIDB4MzgsIDB4NzksCi0weDAwLCAweDI4LCAweGU3LCAweGQwLCAweGI5LCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHg1YywgMHgwNCwgMHgwMCwgMHg4MCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHg4YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDkwLCAweGI1LCAweDQwLCAweDIwLCAweDFkLCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MCwgMHgwMSwgMHhmMCwgMHg5ZCwgMHhmYywgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHg0MSwgMHg2OCwKLTB4MTksIDB4NDAsIDB4MGMsIDB4MGYsIDB4NjEsIDB4MDEsIDB4MDksIDB4MWIsIDB4ODksIDB4MDAsIDB4MTgsIDB4NGEsCi0weDhmLCAweDE4LCAweDAxLCAweDIxLCAweDM5LCAweDgwLCAweDgxLCAweDZhLCAweGMwLCAweDQ2LCAweDc5LCAweDY1LAotMHg0MSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg3OSwgMHg2NywgMHhiOSwgMHg2YywgMHhmYSwgMHg2YywgMHg4OSwgMHgxOCwKLTB4YjksIDB4NjQsIDB4MDAsIDB4MjEsIDB4ZjksIDB4NjQsIDB4YmEsIDB4NmIsIDB4M2IsIDB4NmQsIDB4ZDIsIDB4MTgsCi0weGJhLCAweDYzLCAweDM5LCAweDY1LCAweDQyLCAweDZhLCAweDIwLCAweDMyLCAweDUxLCAweDcxLCAweDc5LCAweDZkLAotMHg3YSwgMHg2ZiwgMHhkMiwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHhmYywgMHhmNywgMHhjYSwgMHhmZiwKLTB4MjAsIDB4MDEsIDB4MDksIDB4NDksIDB4NDAsIDB4MTgsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsCi0weDQxLCAweDZiLCAweDAxLCAweDM5LCAweDQxLCAweDYzLCAweDc4LCAweDZmLCAweDAxLCAweGYwLCAweGM2LCAweGZiLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4NDAsIDB4MjAsCi0weDEyLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAxLCAweGYwLCAweDU5LCAweGZjLCAweDA3LCAweDFjLAotMHg0MCwgMHg2OCwgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHgxOCwgMHg0MCwgMHgwNiwgMHgwZiwgMHg3MCwgMHgwMSwKLTB4ODAsIDB4MWIsIDB4ODAsIDB4MDAsIDB4MGMsIDB4NDksIDB4NDQsIDB4MTgsIDB4YjgsIDB4NmEsIDB4YzAsIDB4NDYsCi0weDYwLCAweDY1LCAweDc4LCAweDZhLCAweGMwLCAweDQ2LCAweDYwLCAweDY3LCAweDgwLCAweDZmLCAweDA1LCAweDFkLAotMHhlNSwgMHg2MywgMHhiOSwgMHg2OSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHg4OSwgMHhmOSwgMHgzOCwgMHgxYywKLTB4MjEsIDB4MWMsIDB4MzIsIDB4MWMsIDB4MmIsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MjAsIDB4ZjgsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDVjLCAweDJiLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHg0YiwgMHg2ZiwgMHg5YiwgMHg2ZiwgMHgxZiwgMHgxZCwgMHhjZiwgMHg2MywgMHgwNSwgMHg2OCwKLTB4MDAsIDB4MjMsIDB4ODQsIDB4NjksIDB4YTQsIDB4MDgsIDB4MDgsIDB4ZDAsIDB4OWMsIDB4MDAsIDB4MmUsIDB4NTksCi0weGMwLCAweDQ2LCAweDNlLCAweDUxLCAweDg0LCAweDY5LCAweGE0LCAweDA4LCAweDAxLCAweDMzLCAweDljLCAweDQyLAotMHhmNiwgMHhkOCwgMHgzYiwgMHgxYywgMHgwMCwgMHhmMCwgMHgwMywgMHhmOCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4ZmYsIDB4YjUsIDB4ODEsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MWQsIDB4MWMsIDB4MGYsIDB4MWMsCi0weDQ2LCAweDQ4LCAweDAxLCAweDY5LCAweDAxLCAweDMxLCAweDAxLCAweDYxLCAweGY5LCAweDFkLCAweDUxLCAweDMxLAotMHhiZCwgMHg2NSwgMHgwMCwgMHg5MSwgMHgyMCwgMHgxYywgMHhmZCwgMHhmNywgMHg1ZCwgMHhmYywgMHhmOCwgMHg2ZCwKLTB4NDAsIDB4MDksIDB4MzYsIDB4ZDIsIDB4YjgsIDB4NmQsIDB4MDYsIDB4N2IsIDB4NDMsIDB4N2IsIDB4MWIsIDB4MDIsCi0weDFlLCAweDQzLCAweDE3LCAweDIxLCAweDQ5LCAweDAyLCAweDAxLCAweDczLCAweDBiLCAweDBhLCAweDQzLCAweDczLAotMHgwMCwgMHg5OSwgMHgyMCwgMHgxYywgMHhmZCwgMHhmNywgMHg0YywgMHhmYywgMHhiOCwgMHg2ZCwgMHhjMCwgMHg0NiwKLTB4MDYsIDB4NzMsIDB4MzMsIDB4MGEsIDB4NDMsIDB4NzMsIDB4ZjgsIDB4NmQsIDB4NDAsIDB4MDksIDB4MjAsIDB4ZDIsCi0weDYwLCAweDY4LCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAzLCAweDk4LCAweDAxLCAweGYwLCAweGNjLCAweGZjLAotMHg2MCwgMHg2OCwgMHgzMiwgMHg0YiwgMHgxOCwgMHg0MywgMHg2MCwgMHg2MCwgMHgyMCwgMHgxYywgMHgwMSwgMHhmMCwKLTB4MzUsIDB4ZmQsIDB4MDAsIDB4MjUsIDB4N2QsIDB4NjAsIDB4YmQsIDB4NjAsIDB4M2QsIDB4NjQsIDB4N2QsIDB4NjQsCi0weDIwLCAweDFjLCAweGZjLCAweGY3LCAweDMxLCAweGZmLCAweDM4LCAweDg4LCAweDQwLCAweDIzLCAweDE4LCAweDQzLAotMHgzOCwgMHg4MCwgMHg3ZCwgMHg2MiwgMHgyOSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MiwgMHgzOCwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4YTAsIDB4ZmIsIDB4NDQsIDB4ZTAsIDB4MjAsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDA4LCAweDM4LCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweDc4LCAweDY0LCAweDYwLCAweDY4LAotMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg3OCwgMHg2ZSwgMHgwMSwgMHgyNiwgMHhjMSwgMHgxZCwgMHgwZCwgMHgzMSwKLTB4OGEsIDB4NDIsIDB4MDIsIDB4ZDIsIDB4M2EsIDB4NjQsIDB4MDgsIDB4MWMsIDB4MGUsIDB4ZTAsIDB4NDEsIDB4MTksCi0weDg5LCAweDg5LCAweGYwLCAweDIzLCAweDE5LCAweDQwLCAweDA5LCAweDA5LCAweDg5LCAweDAwLCAweDQwLCAweDE4LAotMHhmOCwgMHg2MCwgMHhmOSwgMHg2MSwgMHg2MSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHg4MSwgMHg0MiwKLTB4MTYsIDB4ZDIsIDB4MzksIDB4NjQsIDB4NjMsIDB4NjgsIDB4MTksIDB4MDQsIDB4MDksIDB4MGMsIDB4NDAsIDB4MWEsCi0weDAzLCAweDMwLCAweDgwLCAweDA4LCAweDgyLCAweDAwLCAweGEwLCAweDYxLAotMHgyMCwgMHg2OCwgMHgwOSwgMHgxOCwgMHg5YiwgMHgxOCwgMHg2MywgMHg2MCwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwKLTB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZmEsIDB4N2UsIDB4ODAsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGJmLCAweGZiLCAweDBiLCAweGUwLCAweGI5LCAweDY4LCAweDA4LCAweDFhLCAweDAwLCAweDI1LCAweDc4LCAweDYyLAotMHhiZCwgMHg2MiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgzYywgMHhmYywgMHgyMCwgMHgxYywgMHgzOSwgMHgxYywKLTB4MDAsIDB4ZjAsIDB4NjQsIDB4ZjgsIDB4MDUsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweGMwLAotMHhmMCwgMHhiNSwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHgzOCwgMHg2YywgMHhmOSwgMHg2YiwgMHgwZCwgMHgxOCwKLTB4MjEsIDB4NjgsIDB4NDEsIDB4MTgsIDB4MDAsIDB4MjAsIDB4YTIsIDB4NjksIDB4MDAsIDB4MmEsIDB4MGIsIDB4ZDksCi0weDgyLCAweDAwLCAweDU2LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LAotMHhjMCwgMHg0NiwgMHhhYiwgMHg1MCwgMHhhMiwgMHg2OSwgMHgwMSwgMHgzMCwgMHg4MiwgMHg0MiwgMHhmMywgMHhkOCwKLTB4NzgsIDB4NmUsIDB4ZjksIDB4NmIsIDB4MDksIDB4MTgsIDB4ODksIDB4ODksIDB4ZjAsIDB4MjMsIDB4MTksIDB4NDAsCi0weDA5LCAweDA5LCAweDg5LCAweDAwLCAweDQwLCAweDE4LCAweGY4LCAweDYwLCAweGY5LCAweDYxLCAweDIwLCAweDY4LAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzOCwgMHgxOCwgMHg0MywgMHgwMSwgMHg2OCwgMHg3OCwgMHg2YywKLTB4ZmMsIDB4ZjcsIDB4OTUsIDB4ZmYsIDB4NzgsIDB4NjQsIDB4NjAsIDB4NjgsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCi0weGY4LCAweDY4LCAweDgxLCAweDQyLCAweDE5LCAweGQyLCAweDM5LCAweDY0LCAweDYzLCAweDY4LCAweDE5LCAweDA0LAotMHgwOSwgMHgwYywgMHg0MCwgMHgxYSwgMHgwMywgMHgzMCwgMHg4MCwgMHgwOCwgMHg4MiwgMHgwMCwgMHhhMCwgMHg2MSwKLTB4MjAsIDB4NjgsIDB4MDksIDB4MTgsIDB4OWIsIDB4MTgsIDB4NjMsIDB4NjAsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsCi0weDM4LCAweDFjLCAweDAwLCAweGYwLCAweDU2LCAweGZhLCAweDAxLCAweDIwLCAweDc4LCAweDgwLCAweDIwLCAweDFjLAotMHgwMCwgMHhmMCwgMHg1ZSwgMHhmYiwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhiOSwgMHg2OCwKLTB4MDgsIDB4MWEsIDB4NzgsIDB4NjIsIDB4MDAsIDB4MjAsIDB4YjgsIDB4NjIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGQ5LCAweGZiLCAweDIwLCAweDFjLCAweDM5LCAweDFjLCAweDAwLCAweGYwLCAweDAxLCAweGY4LCAweGVmLCAweGU3LAotMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHg4ZSwgMHg0OCwgMHg0MSwgMHg2OSwKLTB4MDEsIDB4MzEsIDB4NDEsIDB4NjEsIDB4MDMsIDB4MjAsIDB4MDAsIDB4MDcsIDB4NjEsIDB4NjgsIDB4MDgsIDB4NDAsCi0weDA2LCAweDBmLCAweDBhLCAweDA0LCAweDEyLCAweDBjLCAweDIwLCAweDY4LCAweDExLCAweDE4LCAweGZiLCAweDY4LAotMHhkMiwgMHgxYSwgMHg3YiwgMHg2OCwgMHg5ZCwgMHgxYSwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgzOCwgMHgxYywKLTB4MmEsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MjYsIDB4ZmEsIDB4MDAsIDB4MjAsIDB4NzgsIDB4ODAsIDB4MjAsIDB4MWMsCi0weDAwLCAweGYwLCAweDJlLCAweGZiLCAweDYwLCAweDY4LCAweDQwLCAweDE5LCAweDAxLCAweDA0LCAweDA5LCAweDBjLAotMHg2MCwgMHg2MCwgMHgzMCwgMHgxYywgMHgwMSwgMHhmMCwgMHhlMCwgMHhmYiwgMHg3ZCwgMHg0ZSwgMHgwYiwgMHgyMywKLTB4MWIsIDB4MDIsIDB4ZjAsIDB4MTgsIDB4MDAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MTksIDB4ZDAsIDB4MDAsIDB4MjUsCi0weDJkLCAweDIzLCAweDliLCAweDAxLCAweGYwLCAweDE4LCAweGMwLCAweDY4LCAweDAwLCAweDI4LCAweDEyLCAweGQwLAotMHhhYSwgMHgwMCwgMHg5MiwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhkMiwgMHgxOCwgMHhkMiwgMHg2OCwKLTB4MjAsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDEsIDB4ZjAsIDB4MWMsIDB4ZmUsIDB4MDEsIDB4MzUsIDB4YTgsIDB4MDAsCi0weDgwLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweGMwLCAweDY4LCAweDAwLCAweDI4LAotMHhlYywgMHhkMSwgMHhmOCwgMHg2YiwgMHgwMSwgMHgxZiwgMHg4YSwgMHgxYywgMHhmYSwgMHg2MywgMHhmYSwgMHg2OCwKLTB4N2QsIDB4NmMsIDB4MDAsIDB4ZjAsIDB4YmIsIDB4ZjksIDB4YzAsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCi0weDI4LCAweDFjLCAweGZjLCAweGY3LCAweDEwLCAweGZmLCAweDAzLCAweDkwLCAweGY5LCAweDZiLCAweDNhLCAweDZlLAotMHg4ZSwgMHgxOCwgMHgyMCwgMHg2OCwgMHgxMiwgMHgxOCwgMHgwMSwgMHg5MiwgMHg3YSwgMHg2ZSwgMHg4ZCwgMHgxOCwKLTB4MTEsIDB4MTgsIDB4MDIsIDB4OTEsIDB4YzgsIDB4MWQsIDB4MDksIDB4MzAsIDB4ZTAsIDB4NjAsIDB4YjEsIDB4ODgsCi0weDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA5LCAweDA2LCAweDA5LCAweDBlLCAweDA4LCAweDQzLCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHg3OCwgMHg2MSwgMHg2OCwgMHg2OCwgMHgwMSwgMHgwZSwgMHhmZiwgMHgyMiwgMHgxMiwgMHgwNCwKLTB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDIsIDB4MDIsIDB4NDAsCi0weDEyLCAweDAyLCAweDExLCAweDQzLCAweDAwLCAweDA2LCAweDA4LCAweDQzLCAweDM4LCAweDYxLCAweGE4LCAweDg5LAotMHgwOSwgMHgyMywgMHgxYiwgMHgwMiwgMHgxOCwgMHg0MCwgMHhiOCwgMHg2MSwKLTB4YTgsIDB4ODksIDB4OTgsIDB4NDMsIDB4YTgsIDB4ODEsIDB4YTgsIDB4ODksIDB4MDIsIDB4OTksIDB4YzAsIDB4NDYsCi0weDg4LCAweDgxLCAweDAwLCAweDIwLCAweDcwLCAweDgwLCAweGIwLCAweDgwLCAweDcwLCAweDgxLCAweDY4LCAweDYwLAotMHgyOCwgMHg4MiwgMHhiOSwgMHg2ZSwgMHgzMCwgMHgxYywgMHhmYywgMHhmNywgMHhlOCwgMHhmZSwgMHgzOCwgMHg4NiwKLTB4ZmEsIDB4NjksIDB4MzAsIDB4MWMsIDB4MjksIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MDMsIDB4ZmYsIDB4NzgsIDB4ODYsCi0weDNkLCAweDhlLCAweDc4LCAweDhlLCAweDAzLCAweDk5LCAweGZjLCAweGY3LCAweGM4LCAweGZlLCAweDAwLCAweDkwLAotMHg2MCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgzOSwgMHg2ZSwgMHg0MSwgMHgxYSwgMHgwOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4N2EsIDB4NmUsIDB4ODIsIDB4MWEsIDB4MTMsIDB4MDQsIDB4MWIsIDB4MGMsIDB4MWEsIDB4MDIsCi0weDFiLCAweDBhLCAweDFhLCAweDQzLCAweDE2LCAweDA0LCAweDM2LCAweDBjLCAweGJhLCAweDY4LCAweDgyLCAweDQyLAotMHgwMSwgMHhkMiwgMHgwMCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgxMCwgMHgxYSwgMHhiOCwgMHg2MCwgMHgwOCwgMHgwMiwKLTB4MDksIDB4MTIsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4MDgsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCi0weDAxLCAweDk4LCAweGMwLCAweDQ2LCAweDQxLCAweDgwLCAweDI4LCAweDFjLCAweGZjLCAweGY3LCAweGEzLCAweGZlLAotMHgwNSwgMHgxYywgMHgwMCwgMHg5OCwgMHgzMSwgMHgxYywgMHhmYywgMHhmNywgMHg5ZSwgMHhmZSwgMHgwNiwgMHgxYywKLTB4NzgsIDB4NjksIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MGEsIDB4MDgsIDB4NDMsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweDk4LCAweGMwLCAweDQ2LCAweDgxLCAweDgwLCAweDI4LCAweDFjLAotMHhmYywgMHhmNywgMHg4ZiwgMHhmZSwgMHg3OSwgMHg2OSwgMHgwMSwgMHgzMSwgMHhjMCwgMHg0MywgMHg3OSwgMHg2MSwKLTB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4ODEsIDB4MzgsIDB4NjksIDB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsCi0weDEyLCAweDA0LCAweDAyLCAweDQwLCAweDEyLCAweDBhLCAweDExLCAweDQzLCAweGZmLCAweDIyLCAweDEyLCAweDAyLAotMHgwMiwgMHg0MCwgMHgxMiwgMHgwMiwgMHgxMSwgMHg0MywgMHgwMCwgMHgwNiwgMHgwMSwgMHg0MywgMHgzMCwgMHgxYywKLTB4ZmMsIDB4ZjcsIDB4NzcsIDB4ZmUsIDB4MzksIDB4NjksIDB4N2EsIDB4NjgsIDB4ODksIDB4MTgsIDB4MzksIDB4NjEsCi0weGI5LCAweDY4LCAweDAwLCAweDI5LCAweDA5LCAweGQxLCAweDAyLCAweDk5LCAweDg5LCAweDg5LCAweGJhLCAweDY5LAotMHgxMSwgMHg0MywgMHgwMiwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MSwgMHg4MSwgMHhiOSwgMHg2OSwgMHhmYywgMHhmNywKLTB4NjYsIDB4ZmUsIDB4MjAsIDB4ODIsIDB4MDAsIDB4MjAsIDB4NjAsIDB4ODIsIDB4ZjgsIDB4NmQsIDB4NDEsIDB4MDgsCi0weDE2LCAweGQzLCAweDgwLCAweDBhLCAweDBhLCAweGQzLCAweDYwLCAweDY4LCAweDEwLCAweDM4LCAweDAxLCAweDA0LAotMHgwOSwgMHgwYywgMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgyMSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4ODIsIDB4MDksIDB4ZTAsIDB4NjAsIDB4NjgsIDB4MGMsIDB4MzgsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCi0weDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDIxLCAweDY4LCAweGMwLCAweDQ2LCAweDg4LCAweDgxLAotMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjEsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NmUsIDB4NGQsIDB4MjgsIDB4NjksCi0weDAxLCAweDIyLCAweDA0LCAweDk5LCAweDhhLCAweDQwLCAweDkwLCAweDQzLCAweDI4LCAweDYxLCAweDA0LCAweDk4LAotMHg0MywgMHgwMSwgMHgxOCwgMHgxYSwgMHg4MCwgMHgwMCwgMHgxNiwgMHgxYywgMHg2OSwgMHg0OSwgMHg0NCwgMHgxOCwKLTB4ZTAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4YTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsCi0weDAwLCAweDI2LCAweDI2LCAweGUwLCAweDY1LCAweDQ4LCAweDQxLCAweDY5LCAweDAxLCAweDMxLCAweDQxLCAweDYxLAotMHgwNCwgMHg5OCwgMHhmYywgMHhmNywgMHgwOSwgMHhmZCwgMHgwNywgMHgxYywgMHgwMywgMHhkMSwgMHgyOCwgMHg2OSwKLTB4MzAsIDB4NDMsIDB4MjgsIDB4NjEsIDB4YjUsIDB4ZTAsIDB4YTAsIDB4NjgsIDB4NjUsIDB4NjgsIDB4YTgsIDB4NDIsCi0weDAwLCAweGQyLCAweDA1LCAweDFjLCAweGExLCAweDZjLCAweGE5LCAweDQyLCAweDE2LCAweGQyLCAweDQwLCAweDFhLAotMHg2MiwgMHg2YSwgMHgxMCwgMHgxYSwgMHgwMCwgMHgyNiwgMHg2MCwgMHg2MiwgMHhhNiwgMHg2MCwgMHhhNiwgMHg2MiwKLTB4MjAsIDB4ODgsIDB4NDgsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MjAsIDB4ODAsIDB4MGQsIDB4MWMsIDB4MDksIDB4ZDEsCi0weDM4LCAweDFjLCAweGZjLCAweGY3LCAweDE5LCAweGZkLCAweDAzLCAweDIwLCAweDYwLCAweDgwLCAweDY2LCAweDYwLAotMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg4ZCwgMHhmOSwgMHg5NiwgMHhlMCwgMHhlMSwgMHg2OCwgMHgzOCwgMHg2OCwKLTB4MDksIDB4MTgsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MjAsIDB4MWMsIDB4MDIsIDB4MzksIDB4MmEsIDB4MWMsCi0weDAwLCAweGYwLCAweGNkLCAweGY4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGQ3LCAweGY5LCAweGUwLCAweDY4LAotMHg0NiwgMHgxOSwgMHg3OCwgMHg2OCwgMHgzMCwgMHg0MywgMHg3OCwgMHg2MCwgMHgwNCwgMHg5OCwgMHgzMSwgMHgxYywKLTB4MDEsIDB4ZjAsIDB4ODgsIDB4ZmEsIDB4MjEsIDB4NmUsIDB4MDAsIDB4OTgsCi0weDA4LCAweDE4LCAweDAxLCAweDkwLCAweDcwLCAweDFhLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDYxLCAweDZlLAotMHg3MSwgMHgxYSwgMHgwYSwgMHgwNCwgMHgxMiwgMHgwYywgMHgxMSwgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDIsIDB4OTEsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MGEsIDB4MDgsIDB4NDMsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweDk4LCAweGMwLCAweDQ2LCAweDQxLCAweDgwLCAweDIwLCAweDhlLAotMHhmYywgMHhmNywgMHhjYiwgMHhmZCwgMHgwNiwgMHgxYywgMHg2MCwgMHg4ZSwgMHgwMiwgMHg5OSwgMHhmYywgMHhmNywKLTB4YzYsIDB4ZmQsIDB4MDMsIDB4OTAsIDB4NjAsIDB4NjksIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDgsIDB4MDIsCi0weDA5LCAweDBhLCAweDA4LCAweDQzLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweDk4LCAweGMwLCAweDQ2LAotMHg4MSwgMHg4MCwgMHgzMCwgMHgxYywgMHhmYywgMHhmNywgMHhiNywgMHhmZCwgMHg2MSwgMHg2OSwgMHgwMSwgMHgzMSwKLTB4YzAsIDB4NDMsIDB4NjEsIDB4NjEsIDB4MDEsIDB4OTksIDB4YzAsIDB4NDYsIDB4NDgsIDB4ODEsIDB4NjAsIDB4NmUsCi0weDAwLCAweDk5LCAweDQ2LCAweDE4LCAweDIwLCAweDY5LCAweDAxLCAweDBlLCAweGZmLCAweDIyLCAweDEyLCAweDA0LAotMHgwMiwgMHg0MCwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywgMHhmZiwgMHgyMiwgMHgxMiwgMHgwMiwgMHgwMiwgMHg0MCwKLTB4MTIsIDB4MDIsIDB4MTEsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MDEsIDB4NDMsIDB4NzEsIDB4NjAsIDB4MDMsIDB4OTgsCi0weGZjLCAweGY3LCAweDliLCAweGZkLCAweDIxLCAweDY5LCAweDQ5LCAweDE5LCAweDIxLCAweDYxLCAweGExLCAweDY4LAotMHg0OSwgMHgxYiwgMHhhMSwgMHg2MCwgMHgwNiwgMHhkMSwgMHhiMSwgMHg4OSwgMHhhMiwgMHg2OSwgMHgxMSwgMHg0MywKLTB4YjEsIDB4ODEsIDB4YTEsIDB4NjksIDB4ZmMsIDB4ZjcsIDB4OGQsIDB4ZmQsIDB4MzgsIDB4ODIsIDB4NjEsIDB4NmUsCi0weDM4LCAweDY4LCAweDA5LCAweDE4LCAweDBlLCAweDMxLCAweGY5LCAweDYwLCAweGUyLCAweDY4LCAweDAwLCAweDk5LAotMHgwNCwgMHgzOCwgMHgwMCwgMHhmMCwgMHg0YywgMHhmOCwgMHgwMiwgMHgyMCwgMHg3OCwgMHg4MiwgMHhlMCwgMHg2ZCwKLTB4NDEsIDB4MDgsIDB4MTYsIDB4ZDMsIDB4ODAsIDB4MGEsIDB4MGEsIDB4ZDMsIDB4NzgsIDB4NjgsIDB4MTAsIDB4MzgsCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDM5LCAweDY4LAotMHhjMCwgMHg0NiwgMHhjOCwgMHg4MSwgMHgwOSwgMHhlMCwgMHg3OCwgMHg2OCwgMHgwYywgMHgzOCwgMHgwMSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MzksIDB4NjgsIDB4YzAsIDB4NDYsCi0weDQ4LCAweDgxLCAweDA1LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4ZjcsIDB4YjUsIDB4MDMsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MWMsIDB4NjgsIDB4MjYsIDB4MDQsCi0weDMxLCAweDFjLCAweDFkLCAweDFkLCAweGZjLCAweGY3LCAweDUxLCAweGZkLCAweDQwLCAweGM3LCAweDAyLCAweDlhLAotMHhkMSwgMHgxYywgMHg4OSwgMHgwOCwgMHgwMSwgMHgzOSwgMHg0YSwgMHgxZSwgMHgwMiwgMHg5MiwgMHgwMCwgMHgyOSwKLTB4MGQsIDB4ZDAsIDB4MjEsIDB4MGMsIDB4MTAsIDB4Y2QsIDB4MjIsIDB4MDQsIDB4MGEsIDB4NDMsIDB4MTEsIDB4MWMsCi0weDE2LCAweDFjLCAweGZjLCAweGY3LCAweDQwLCAweGZkLCAweDQwLCAweGM3LCAweDAyLCAweDk5LCAweDRhLCAweDFlLAotMHgwMiwgMHg5MiwgMHgwMCwgMHgyOSwgMHhmMSwgMHhkMSwgMHgwMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4ODksIDB4MDgsIDB4ODksIDB4MDAsIDB4MDMsIDB4MzIsCi0weDkzLCAweDA4LCAweDVhLCAweDFlLCAweDAwLCAweDJiLCAweDA1LCAweGQwLCAweDA4LCAweGM5LCAweDA4LCAweGMwLAotMHgxMywgMHgxYywgMHgwMSwgMHgzYSwgMHgwMCwgMHgyYiwgMHhmOSwgMHhkMSwgMHg3MCwgMHg0NywgMHhmZiwgMHhiNSwKLTB4ODYsIDB4YjAsIDB4MTcsIDB4MWMsIDB4MDAsIDB4MjYsIDB4MDYsIDB4OTgsIDB4ODAsIDB4NmMsIDB4YzAsIDB4MWIsCi0weDA2LCAweDk5LCAweGMwLCAweDQ2LCAweDg4LCAweDY0LCAweDAxLCAweDIwLCAweGMwLCAweDA1LCAweDA2LCAweDk5LAotMHg4OSwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MSwgMHgwNiwgMHg5OSwgMHg0YywgMHg2YiwgMHg2NywgMHhlMCwKLTB4MjEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTEsIDB4NjEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDMsIDB4OTEsCi0weGExLCAweDY4LCAweGMwLCAweDQ2LCAweDA0LCAweDkxLCAweDAyLCAweGE5LCAweDQ5LCAweDg4LCAweGI5LCAweDQyLAotMHgwOCwgMHhkMiwgMHgwMiwgMHhhZCwgMHg2ZCwgMHg4OCwgMHgwMiwgMHhhOSwgMHg0OSwgMHg4OCwgMHg3ZiwgMHgxYSwKLTB4MDAsIDB4MjEsIDB4MDIsIDB4YWIsIDB4NTksIDB4ODAsIDB4MTksIDB4ZTAsIDB4MDIsIDB4YTksIDB4NDksIDB4ODgsCi0weGM5LCAweDFiLCAweDAyLCAweGFiLCAweDU5LCAweDgwLCAweDNkLCAweDFjLCAweDAwLCAweDI3LCAweDAxLCAweDIxLAotMHg0OSwgMHgwNiwgMHgwNywgMHg5YiwgMHg5YSwgMHgwNywgMHg5MiwgMHgwZiwgMHgwZCwgMHhkMCwgMHhlYiwgMHgwNiwKLTB4ZGIsIDB4MGUsIDB4MDgsIDB4ZDAsIDB4MWUsIDB4MmIsIDB4MDgsIDB4ZDMsIDB4MWUsIDB4MmIsIDB4MDIsIDB4ZDEsCi0weDAzLCAweDJhLCAweDA0LCAweGQxLCAweDAxLCAweGUwLCAweDAyLCAweDJhLAotMHgwMSwgMHhkMywgMHgwMSwgMHgyNiwgMHgwMCwgMHgyMSwgMHgyOSwgMHg0MywgMHgwMSwgMHg0MywgMHgwYSwgMHgxYywKLTB4MDAsIDB4OTEsIDB4MDAsIDB4MjAsIDB4MDMsIDB4OTksIDB4MDQsIDB4OWEsIDB4MDcsIDB4OWIsIDB4MDEsIDB4ZjAsCi0weDViLCAweGZmLCAweDA3LCAweDk5LCAweDQ5LCAweDE5LCAweDA3LCAweDkxLCAweDAwLCAweDJlLCAweDBhLCAweGQwLAotMHgxZCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgxZCwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwKLTB4MDAsIDB4MjAsIDB4MDcsIDB4OWIsIDB4MDEsIDB4ZjAsIDB4NGMsIDB4ZmYsIDB4MDAsIDB4MjYsIDB4MDIsIDB4YTgsCi0weDQwLCAweDg4LCAweDAwLCAweDI4LCAweDBjLCAweGQwLCAweDAzLCAweDk4LCAweDQwLCAweDE5LCAweDAzLCAweDkwLAotMHgwMiwgMHg5OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MCwgMHgwMywgMHg5OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MCwKLTB4MDQsIDB4OTgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjAsIDB4MDMsIDB4ZTAsIDB4MDEsIDB4OTgsIDB4MDEsIDB4MzgsCi0weDAxLCAweDkwLCAweDEwLCAweDM0LCAweDA2LCAweDk4LCAweGMwLCAweDQ2LCAweDQ0LCAweDYzLCAweDAxLCAweDk4LAotMHgwNiwgMHg5OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MywgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZiwgMHgwMiwgMHhkMCwKLTB4MDEsIDB4OTksIDB4MDAsIDB4MjksIDB4OTIsIDB4ZDEsIDB4MDksIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsCi0weDA2LCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLCAweDAwLCAweDIwLCAweDA5LCAweDliLCAweDAxLCAweGYwLAotMHgxZiwgMHhmZiwgMHgwYSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDAsIDB4NTMsIDB4MDIsCi0weDkwLCAweGI1LCAweDBjLCAweDFjLCAweDA3LCAweDFjLCAweDM4LCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LAotMHgwOCwgMHgzOCwgMHgxOCwgMHg0MywgMHgwMSwgMHg2OCwgMHgzOCwgMHg4YSwgMHhmYywgMHhmNywgMHg4NSwgMHhmYywKLTB4YzAsIDB4NDMsIDB4ZjksIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDgsIDB4ODAsIDB4NzgsIDB4OGEsIDB4MzksIDB4NjgsCi0weDA4LCAweDFhLCAweDM4LCAweDYwLCAweDM4LCAweDFjLCAweDAxLCAweGYwLCAweDhiLCAweGY5LCAweDM4LCAweDFjLAotMHhmYywgMHhmNywgMHg4YywgMHhmYiwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgzMywgMHhmZSwgMHg5MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4MDEsIDB4ODgsIDB4OGEsIDB4MDksIDB4MjEsIDB4ZDMsCi0weGNhLCAweDA5LCAweDFmLCAweGQyLCAweDhhLCAweDA4LCAweDFkLCAweGQzLCAweDAwLCAweDIxLCAweDAxLCAweDgwLAotMHg0MSwgMHg4MCwgMHg0NywgMHg2ZiwgMHg0MCwgMHg2ZCwgMHhmYSwgMHgxZCwgMHgxOSwgMHgzMiwgMHg1MSwgMHg3MSwKLTB4ZmEsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MTAsIDB4NjAsIDB4M2EsIDB4NmUsIDB4YzAsIDB4NDYsIDB4MTAsIDB4NjAsCi0weDBjLCAweDQ4LCAweGMwLCAweDQ2LCAweDgxLCAweDYzLCAweGMxLCAweDZiLCAweDQ5LCAweDA4LCAweDQ5LCAweDAwLAotMHhjMSwgMHg2MywgMHgwMSwgMHgyMCwgMHgwMCwgMHhmMCwgMHhjYywgMHhmZiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4NmIsIDB4ZmYsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4MjMsIDB4MTksIDB4NDMsCi0weDAxLCAweDgwLCAweDAxLCAweDg4LCAweDQ5LCAweDA5LCAweGY2LCAweGQyLCAweDAwLCAweGYwLCAweGIwLCAweGY4LAotMHhmMywgMHhlNywgMHgwMCwgMHgwMCwgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MTAsIDB4MWMsIDB4MGQsIDB4MWMsIDB4MDAsIDB4MjQsIDB4NWUsIDB4MWUsIDB4MDAsIDB4MmIsIDB4MTksIDB4ZDAsCi0weDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDM5LCAweDYwLCAweDQxLCAweDg4LCAweDBjLCAweDE5LCAweDQxLCAweDY4LAotMHhjMCwgMHg0NiwgMHg3OSwgMHg2MCwgMHg4MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiOSwgMHg2MCwgMHhjMSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4MTAsIDB4MzAsIDB4MTAsIDB4MzcsIDB4ZTksIDB4NmEsIDB4ODEsIDB4NDIsCi0weDAyLCAweGQ4LCAweDI4LCAweDFjLCAweDAwLCAweGYwLCAweGVjLCAweGZmLCAweDMxLCAweDFjLCAweDAxLCAweDNlLAotMHgwMCwgMHgyOSwgMHhlNSwgMHhkMSwgMHgyMCwgMHgxYywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4MjEsIDB4YzEsIDB4NjEsIDB4MDUsIDB4NDksIDB4MGEsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MDEsIDB4ZDEsCi0weDA4LCAweDYwLCAweDAyLCAweGUwLCAweDRhLCAweDY4LCAweGMwLCAweDQ2LCAweGQwLCAweDYxLCAweDQ4LCAweDYwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHgwMywgMHg0OSwgMHgwOCwgMHg2OCwKLTB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4YzIsIDB4NjksIDB4YzAsIDB4NDYsIDB4MGEsIDB4NjAsIDB4NzAsIDB4NDcsCi0weGQwLCAweDJjLCAweDAwLCAweDgwLCAweDAwLCAweDIxLCAweDgxLCAweDY3LCAweDA1LCAweDQ5LCAweDhhLCAweDY4LAotMHgwMCwgMHgyYSwgMHgwMSwgMHhkMSwgMHg4OCwgMHg2MCwgMHgwMiwgMHhlMCwgMHhjYSwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4OTAsIDB4NjcsIDB4YzgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsCi0weDAzLCAweDQ5LCAweDg4LCAweDY4LCAweDAwLCAweDI4LCAweDAyLCAweGQwLCAweDgyLCAweDZmLCAweGMwLCAweDQ2LAotMHg4YSwgMHg2MCwgMHg3MCwgMHg0NywgMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwKLTB4MDAsIDB4YjUsIDB4ODAsIDB4MjAsIDB4MTMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZmYsIDB4ZjcsCi0weGQ1LCAweGZmLCAweDAwLCAweDI4LCAweDFiLCAweGQwLCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDQxLCAweDY4LAotMHgxOSwgMHg0MCwgMHgwYSwgMHgwZiwgMHg1MSwgMHgwMSwgMHg4OSwgMHgxYSwgMHg4OSwgMHgwMCwgMHgwZCwgMHg0YiwKLTB4YzksIDB4MTgsIDB4NGIsIDB4ODgsIDB4MDAsIDB4MmIsIDB4MDQsIDB4ZDEsIDB4MTEsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDNiLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAxLCAweDJiLCAweDAyLCAweGQxLCAweGZmLCAweGY3LAotMHgwNSwgMHhmYywgMHhmOCwgMHhlNywgMHgwMiwgMHgyYiwgMHhmNiwgMHhkMSwgMHhmZiwgMHhmNywgMHg0ZSwgMHhmYiwKLTB4ZjMsIDB4ZTcsIDB4MDQsIDB4NDgsIDB4MDEsIDB4NmQsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjUsIDB4ZWUsIDB4ZTcsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDVjLCAweDJiLCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHgwMCwgMHhiNSwgMHgyMCwgMHgyMCwgMHgwZCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmZiwgMHhmNywKLTB4YmYsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MGUsIDB4ZDAsIDB4MDEsIDB4ODgsIDB4MjAsIDB4MjMsIDB4MTksIDB4NDMsCi0weDAxLCAweDgwLCAweDAxLCAweDg4LCAweDEwLCAweDIzLCAweDk5LCAweDQzLCAweDAxLCAweDgwLCAweDAxLCAweDg4LAotMHgwOSwgMHgwYSwgMHgwMSwgMHhkMywgMHhmZiwgMHhmNywgMHgyZSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDMsIDB4NDgsIDB4MDEsIDB4NmQsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjUsIDB4ZjgsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDk4LCAweGI1LCAweDA3LCAweDFjLAotMHgyMiwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHgyMiwgMHg0OCwgMHhjMywgMHgxZCwgMHg0MSwgMHgzMywKLTB4NDEsIDB4NmQsIDB4ODIsIDB4NmQsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4OWMsIDB4NjgsCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDk4LCAweDQyLCAweDAwLCAweGQxLAotMHgwYywgMHhlMCwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwgMHgxMCwgMHgxYSwgMHg1OSwgMHgxYSwgMHg0MSwgMHgxOCwKLTB4MDAsIDB4ZTAsIDB4MTksIDB4MWEsIDB4MDEsIDB4MjAsIDB4MTAsIDB4MjksIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MjAsCi0weDAwLCAweDI4LCAweDFmLCAweGQwLCAweDc4LCAweDZhLCAweGY5LCAweDZhLCAweGMwLCAweDQ2LCAweDA4LCAweDYwLAotMHhiOCwgMHg2YSwgMHhmOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MCwgMHgxMCwgMHg0YSwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTIsIDB4ZmIsIDB4NmEsIDB4MGYsIDB4NDgsIDB4NDIsIDB4NmQsIDB4MDMsIDB4MjAsIDB4MzksIDB4NmEsCi0weDAxLCAweGYwLCAweGUyLCAweGZkLCAweDM4LCAweDg4LCAweDEwLCAweDIzLCAweDE4LCAweDQzLCAweDM4LCAweDgwLAotMHgzOCwgMHg4OCwgMHg0MCwgMHgyMywgMHg5OCwgMHg0MywgMHgzOCwgMHg4MCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywKLTB4NTUsIDB4ZmYsIDB4OTgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MzgsIDB4ODgsIDB4NDAsIDB4MjMsCi0weDE4LCAweDQzLCAweDM4LCAweDgwLCAweGY3LCAweGU3LCAweDAwLCAweDAwLCAweDU1LCAweDU1LCAweDU1LCAweDU1LAotMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHgwOCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4YjAsIDB4YjUsIDB4NDAsIDB4MjAsIDB4MmMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDAsIDB4ZjAsCi0weGZkLCAweGZlLCAweDA3LCAweDFjLCAweDQwLCAweDY4LCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDE4LCAweDQwLAotMHgwNSwgMHgwZiwgMHg2OCwgMHgwMSwgMHg0MCwgMHgxYiwgMHg4MCwgMHgwMCwgMHgyNiwgMHg0OSwgMHg0NCwgMHgxOCwKLTB4MjAsIDB4ODgsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MjAsIDB4ODAsIDB4MjAsIDB4ODgsIDB4NDEsIDB4MDgsCi0weDM0LCAweGQzLCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweDIwLCAweDgwLCAweGEwLCAweDZjLCAweGUxLCAweDZjLAotMHg0MCwgMHgxOCwgMHhhMCwgMHg2NCwgMHgwMCwgMHgyMCwgMHhlMCwgMHg2NCwgMHhhMSwgMHg2YiwgMHgyMiwgMHg2ZCwKLTB4ODksIDB4MTgsIDB4YTEsIDB4NjMsIDB4MjAsIDB4NjUsIDB4YjgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjUsCi0weDAzLCAweDIzLCAweDFiLCAweDA3LCAweDc4LCAweDY4LCAweDE4LCAweDQwLCAweDc4LCAweDYwLCAweDYxLCAweDY4LAotMHgzNiwgMHgzMSwgMHg5NCwgMHgyOSwgMHgwNCwgMHhkOCwgMHgzOCwgMHgyMywgMHgxOCwgMHg0MywgMHg3OCwgMHg2MCwKLTB4MzgsIDB4MjAsIDB4MDMsIDB4ZTAsIDB4OTQsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NzgsIDB4NjAsIDB4OTQsIDB4MjAsCi0weGI4LCAweDYxLCAweDM5LCAweDY4LCAweDc4LCAweDY4LCAweDAyLCAweDA0LCAweDEyLCAweDBjLCAweDIwLCAweDFjLAotMHhjYiwgMHgxZiwgMHgwNSwgMHgzYiwgMHhmZiwgMHhmNywgMHhkNywgMHhmZCwgMHgwMiwgMHgyMCwgMHg2MCwgMHg4MCwKLTB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZGYsIDB4ZmUsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDM4LCAweDFjLCAweGZjLCAweGY3LCAweDA3LCAweGZhLCAweDI4LCAweDAxLCAweDA2LCAweDQ5LCAweDQwLCAweDE4LAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg0MSwgMHg2YiwgMHgwMSwgMHgzOSwgMHg0MSwgMHg2MywKLTB4ZWYsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCi0weDVjLCAweDJiLCAweDAwLCAweDgwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDAwLCAweDI3LAotMHgwZiwgMHg0YywgMHgwZCwgMHhlMCwgMHg0MiwgMHg2YiwgMHgwMSwgMHgzYSwgMHg0MiwgMHg2MywgMHgwMCwgMHgyYSwKLTB4MDUsIDB4ZGMsIDB4MDIsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NDIsIDB4NjMsIDB4YzAsIDB4NmEsIDB4MDEsIDB4ZjAsCi0weGM2LCAweGY5LCAweDAxLCAweDM3LCAweDBiLCAweDJmLCAweDA3LCAweGQyLCAweDM4LCAweDAxLCAweDAwLCAweDE5LAotMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg2YSwgMHgwMCwgMHgyOSwgMHhlOSwgMHhkMSwKLTB4MDEsIDB4MjAsIDB4NDAsIDB4MDYsIDB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4OTAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHgxMCwgMHg0OCwgMHhjMSwgMHg2OCwgMHgwMSwgMHgzMSwgMHhjMSwgMHg2MCwgMHgwZiwgMHg0OSwgMHhjOCwgMHg2OCwKLTB4MDEsIDB4MjgsIDB4MTcsIDB4ZDEsIDB4YzgsIDB4MWQsIDB4NzksIDB4MzAsIDB4MDIsIDB4ODksIDB4MDAsIDB4MmEsCi0weDEyLCAweGQwLCAweDAxLCAweDNhLCAweDAyLCAweDgxLCAweDAyLCAweDg5LCAweDAwLCAweDJhLCAweDBkLCAweGQxLAotMHg0MiwgMHg4OSwgMHgwMCwgMHgyYSwgMHgwOCwgMHhkMSwgMHhjOSwgMHg2ZiwgMHgwMiwgMHgyMywgMHgwYSwgMHg2OCwKLTB4MWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4MDQsIDB4MjEsIDB4MDEsIDB4ODEsIDB4MDEsIDB4MjEsIDB4MDAsIDB4ZTAsCi0weDAwLCAweDIxLCAweDQxLCAweDgxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNSwgMHgwNywgMHgxYywgMHgwMSwgMHgyMywgMHhmOCwgMHgxZCwKLTB4NjksIDB4MzAsIDB4MDMsIDB4NzMsIDB4MWUsIDB4NDgsIDB4YzIsIDB4MWQsIDB4NzksIDB4MzIsIDB4NTQsIDB4OGEsCi0weDYxLCAweDFjLCAweDUxLCAweDgyLCAweGQ1LCAweDhhLCAweDAwLCAweDIxLCAweGFjLCAweDQyLCAweDA0LCAweGRiLAotMHhjNCwgMHgxZCwgMHg4OSwgMHgzNCwgMHg2MywgMHg3MCwgMHg1MSwgMHg4MiwgMHhkMSwgMHg4MywgMHgwMSwgMHgyMywKLTB4OWIsIDB4MDcsIDB4M2EsIDB4NmQsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YmEsIDB4NjEsCi0weGZiLCAweDY5LCAweDlhLCAweDQyLCAweDA2LCAweGQxLCAweGY4LCAweDZjLCAweDEyLCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3OSwgMHg2MSwgMHg0MSwgMHg2OSwKLTB4ZmEsIDB4NmMsIDB4OTEsIDB4NDMsIDB4NDEsIDB4NjEsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDUsIDB4YzEsIDB4NjAsCi0weDM4LCAweDY5LCAweDAyLCAweDI4LCAweGYxLCAweGQwLCAweGI4LCAweDY5LCAweGY5LCAweDY5LCAweDQxLCAweDFhLAotMHgwMSwgMHhkNSwgMHg3OCwgMHg2ZCwgMHg0MSwgMHgxOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwZSwgMHhmOCwKLTB4ZjksIDB4NjksIDB4MDksIDB4MTgsIDB4ZjksIDB4NjEsIDB4NzgsIDB4NmQsIDB4ODEsIDB4NDIsIDB4ZTIsIDB4ZDMsCi0weDA4LCAweDFhLCAweGY4LCAweDYxLCAweGRmLCAweGU3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhmOCwgMHhiNSwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHhmZiwgMHgyMywKLTB4MjEsIDB4MzMsIDB4OWYsIDB4NDIsIDB4MDEsIDB4ZDksIDB4ZmYsIDB4MjcsIDB4MjEsIDB4MzcsIDB4ZTEsIDB4NmUsCi0weDM4LCAweDFjLCAweDAxLCAweGYwLCAweGNiLCAweGZjLCAweDJkLCAweDRkLCAweDAwLCAweDI4LCAweDEzLCAweGQxLAotMHhlMCwgMHgxZCwgMHg0OSwgMHgzMCwgMHgwMSwgMHg3YSwgMHgwMSwgMHgyMywgMHgxOSwgMHg0MywgMHgwMSwgMHg3MiwKLTB4MjksIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MjksIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsCi0weDAwLCAweDIwLCAweDJiLCAweDFjLCAweDAxLCAweGYwLCAweGIwLCAweGZjLCAweDAwLCAweDIwLCAweGY4LCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyMCwgMHg2OSwgMHgwMSwgMHgzMCwgMHgyMCwgMHg2MSwgMHgyMywgMHg0OSwKLTB4YzgsIDB4MWQsIDB4YjksIDB4MzAsIDB4MDIsIDB4NmIsIDB4OTIsIDB4MDAsIDB4NTEsIDB4MTgsIDB4YzAsIDB4MzEsCi0weDBmLCAweDYxLCAweDAxLCAweDZiLCAweDAxLCAweDMxLCAweDg5LCAweDA3LCAweDg5LCAweDBmLCAweDAxLCAweDYzLAotMHgyMCwgMHg2YiwgMHhjMiwgMHgxOSwgMHg2MSwgMHg2ZCwgMHg4YSwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMywgMHgyMiwKLTB4MTIsIDB4MDUsIDB4M2EsIDB4NDMsIDB4MDUsIDB4ZTAsIDB4MDksIDB4MWEsIDB4N2UsIDB4MWEsIDB4MDcsIDB4ZDEsCi0weDIzLCAweDIyLCAweDEyLCAweDA1LCAweDBhLCAweDQzLCAweDAwLCAweDkyLCAweDYxLCAweDZlLCAweDA5LCAweDE4LAotMHhhMiwgMHg2ZSwgMHgxMCwgMHhlMCwgMHgxMSwgMHgyMiwgMHg1MiwgMHgwNSwgMHgwYSwgMHg0MywgMHgwMCwgMHg5MiwKLTB4NjEsIDB4NmUsIDB4MDksIDB4MTgsIDB4MDAsIDB4MjAsIDB4YTIsIDB4NmUsIDB4MmIsIDB4MWMsIDB4MDEsIDB4ZjAsCi0weDdkLCAweGZjLCAweDIzLCAweDIyLCAweDEyLCAweDA1LCAweDMyLCAweDQzLCAweDAwLCAweDkyLCAweDYxLCAweDZlLAotMHhhMiwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgyYiwgMHgxYywgMHgwMSwgMHhmMCwgMHg3MywgMHhmYywgMHgyMCwgMHg2YiwKLTB4YzAsIDB4MTksIDB4MDAsIDB4MDksIDB4MDAsIDB4MDEsIDB4NjEsIDB4NmQsIDB4ODEsIDB4NDIsIDB4MDAsIDB4ZDgsCi0weDQwLCAweDFhLCAweDIwLCAweDYzLCAweDM4LCAweDFjLCAweGI4LCAweGU3LAotMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxYiwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MDEsIDB4MjAsIDB4YzAsIDB4MDMsIDB4MGQsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDBjLCAweDQ5LCAweGM4LCAweDFkLCAweDQ5LCAweDMwLCAweDAyLCAweDdhLAotMHgwMCwgMHgyNywgMHgwMCwgMHgyYSwgMHgwMywgMHhkMCwgMHgwNywgMHg3MiwgMHgwOCwgMHgxYywgMHhmZiwgMHhmNywKLTB4MzcsIDB4ZmYsIDB4MDgsIDB4NDksIDB4YzgsIDB4MWQsIDB4NDksIDB4MzAsIDB4MDIsIDB4N2EsIDB4MDAsIDB4MmEsCi0weDAzLCAweGQwLCAweDA3LCAweDcyLCAweDA4LCAweDFjLCAweGZmLCAweGY3LCAweDJkLCAweGZmLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwKLTB4ZTQsIDB4MmMsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MTAsIDB4MjAsIDB4MTgsIDB4NDksCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGY4LCAweDY4LCAweDAxLCAweDMwLCAweGY4LCAweDYwLCAweDE2LCAweDQ4LAotMHhjNCwgMHgxZCwgMHhiOSwgMHgzNCwgMHg2MSwgMHg2YiwgMHg4OSwgMHgwMCwgMHgwOSwgMHgxOCwgMHhjMCwgMHgzMSwKLTB4MDksIDB4NjksIDB4N2EsIDB4NjgsIDB4OTIsIDB4MDAsIDB4ZDIsIDB4MTksIDB4NTEsIDB4NjQsIDB4NjEsIDB4NmIsCi0weDg5LCAweDAwLCAweDA4LCAweDE4LCAweGMwLCAweDMwLCAweDAxLCAweDY5LCAweDc4LCAweDY4LCAweDgwLCAweDAwLAotMHhjMCwgMHgxOSwgMHhjMCwgMHg2YiwgMHgwMSwgMHhmMCwgMHhhMiwgMHhmYSwgMHgwMSwgMHgyMywgMHg3OCwgMHg2OCwKLTB4NTgsIDB4NDAsIDB4NzgsIDB4NjAsIDB4NjAsIDB4NmIsIDB4MDEsIDB4MzAsIDB4ODAsIDB4MDcsIDB4ODAsIDB4MGYsCi0weDYwLCAweDYzLCAweGY4LCAweDFkLCAweDE5LCAweDMwLCAweDQwLCAweDc5LCAweDAwLCAweDI4LCAweDAyLCAweGQxLAotMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwNywgMHhmOCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDM5LCAweDQ4LCAweGMwLCAweDY4LCAweDAwLCAweDI4LCAweDA1LCAweGQwLCAweGI4LCAweDZhLCAweGMwLCAweDY4LAotMHg4MCwgMHgwOSwgMHgwMSwgMHhkMywgMHgwMiwgMHgyMCwgMHgwMCwgMHhlMCwgMHg3OCwgMHg2ZiwgMHhmYywgMHhmNywKLTB4NTksIDB4ZjgsIDB4MDQsIDB4MWMsIDB4MDYsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4ZjksIDB4MWQsIDB4MTksIDB4MzEsCi0weDA4LCAweDcxLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGY4LCAweDZjLCAweDJmLCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhiYSwgMHg2YSwgMHgzOCwgMHgxYywgMHgyMSwgMHgxYywgMHgwMCwgMHhmMCwKLTB4NTksIDB4ZjgsIDB4NjcsIDB4NjIsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDBiLCAweGZkLCAweGVjLCAweGU3LCAweGY5LCAweDZkLCAweDA5LCAweDY4LCAweDA5LCAweDE4LCAweDA5LCAweDA5LAotMHgwOSwgMHgwMSwgMHg3YSwgMHg2ZCwgMHg4YSwgMHg0MiwgMHgwMCwgMHhkOCwgMHg4OSwgMHgxYSwgMHhhMSwgMHg2MiwKLTB4YjksIDB4NjgsIDB4ODksIDB4MDAsIDB4YzksIDB4MTksIDB4NGEsIDB4NmMsIDB4MDAsIDB4MmEsIDB4MDcsIDB4ZDAsCi0weDRhLCAweDZjLCAweDEyLCAweDFhLCAweDRhLCAweDY0LCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweGI5LCAweDZhLAotMHgwOCwgMHgxOCwgMHhiOCwgMHg2MiwgMHgzOCwgMHg2OCwgMHhiOSwgMHg2YSwgMHg4MCwgMHgwMCwgMHhjMCwgMHgxOSwKLTB4NDIsIDB4NmIsIDB4OTEsIDB4NDIsIDB4MGUsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4NDEsIDB4NjQsIDB4YjgsIDB4NmEsCi0weDM5LCAweDY4LCAweDg5LCAweDAwLCAweGM5LCAweDE5LCAweDQ5LCAweDZiLCAweDQwLCAweDFhLCAweGI4LCAweDYyLAotMHhiOSwgMHg2OCwgMHg4OSwgMHgwMCwgMHhjOSwgMHgxOSwgMHhjOSwgMHg2YiwgMHg0MCwgMHgxOCwgMHhiOCwgMHg2MiwKLTB4YjgsIDB4NjgsIDB4ODEsIDB4MDAsIDB4YzksIDB4MTksIDB4NDksIDB4NmMsIDB4MDAsIDB4MjksIDB4YjgsIDB4ZDEsCi0weGI5LCAweDZhLCAweGZhLCAweDZiLCAweDkxLCAweDQyLCAweGI0LCAweGQwLCAweDNhLCAweDZjLCAweDkxLCAweDQyLAotMHhiMSwgMHhkMCwgMHgwMSwgMHgyMywgMHg1OCwgMHg0MCwgMHhiOCwgMHg2MCwgMHg4MCwgMHgwMCwgMHhjMCwgMHgxOSwKLTB4YzAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjIsIDB4ZjgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsCi0weDAxLCAweDM4LCAweGY4LCAweDYwLCAweDM4LCAweDY5LCAweDAwLCAweDI4LCAweGExLCAweGQwLCAweDAxLCAweDM4LAotMHgzOCwgMHg2MSwgMHg5ZSwgMHhlNywgMHg2OCwgMHgxOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4ZjcsIDB4YjUsIDB4OTAsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MGQsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MDUsIDB4OTAsCi0weDAyLCAweDkwLCAweDAwLCAweDIyLCAweDAxLCAweDkyLCAweGY5LCAweDQ4LCAweGMwLCAweDZhLCAweGMwLCAweDQ2LAotMHhhOCwgMHg2MSwgMHhhMCwgMHg2OCwgMHg4MSwgMHgwMCwgMHgwOSwgMHgxOSwgMHg0OSwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4MjAsIDB4NjAsIDB4ZTEsIDB4NjIsIDB4MTIsIDB4OWEsIDB4ZDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YTgsIDB4NjAsCi0weDEyLCAweDlhLCAweDUxLCAweDc4LCAweGMwLCAweDQ2LCAweDBjLCAweDkxLCAweGYwLCAweDQ4LCAweGMwLCAweDQ2LAotMHgwMywgMHg5MCwgMHhkNywgMHgxZCwgMHgwOSwgMHgzNywgMHhlMCwgMHg2YSwKLTB4YzEsIDB4MWIsIDB4MDksIDB4MDksIDB4ZTMsIDB4MWQsIDB4MTksIDB4MzMsIDB4MGMsIDB4OWEsIDB4YzAsIDB4NDYsCi0weDBmLCAweDkzLCAweGViLCAweDRiLCAweGMwLCAweDQ2LCAweDBlLCAweDkzLCAweDkxLCAweDQyLCAweDAxLCAweGQzLAotMHhiOCwgMHg0MiwgMHgyMSwgMHhkOCwgMHhlMSwgMHg2OCwgMHgwMiwgMHgyOSwgMHgxZSwgMHhkMiwgMHgwMSwgMHgyMCwKLTB4MGYsIDB4OTksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NzEsIDB4MDAsIDB4MjAsIDB4MDMsIDB4OTksIDB4MDEsIDB4ZjAsCi0weDU3LCAweGZiLCAweDAwLCAweDI4LCAweDAzLCAweGQxLCAweDBlLCAweDliLCAweGQ4LCAweDZiLCAweDAxLCAweDMwLAotMHhkOCwgMHg2MywgMHgwMSwgMHgyMCwgMHg4MCwgMHgwNiwgMHgwMCwgMHgyNywgMHg2OCwgMHg2MCwgMHhhZiwgMHg2MSwKLTB4ZGQsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4ZGQsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsCi0weGRjLCAweDRiLCAweDAwLCAweDIwLCAweDAxLCAweGYwLCAweDNhLCAweGZiLCAweDM4LCAweDFjLCAweDVjLCAweGUzLAotMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3YiwgMHhmYywgMHgwNywgMHgxYywKLTB4ZDcsIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4NjQsIDB4ZDAsIDB4MzgsIDB4NzgsIDB4NDAsIDB4MDcsCi0weDQwLCAweDBmLCAweDAzLCAweDI4LCAweDYwLCAweGQxLCAweDA1LCAweDk4LCAweDAxLCAweDMwLCAweDAwLCAweDA2LAotMHgwMCwgMHgwZSwgMHgwNSwgMHg5MCwgMHgzOCwgMHg3OCwgMHhmMCwgMHgyMywgMHgxOCwgMHg0MCwgMHg1OCwgMHhkMSwKLTB4ZTAsIDB4NmEsIDB4YzAsIDB4MWIsIDB4MDAsIDB4MDksIDB4MGMsIDB4OTksIDB4ODgsIDB4NDIsIDB4MDIsIDB4ZDIsCi0weGUwLCAweDY4LCAweDAyLCAweDI4LCAweDA1LCAweGQzLCAweGNiLCAweDQ5LCAweDg4LCAweDY4LCAweDAwLCAweGYwLAotMHg4MywgMHhmZiwgMHgwNiwgMHgxYywgMHgwNiwgMHhkMSwgMHgwMywgMHg5YiwgMHgyOCwgMHgxYywgMHgzOSwgMHgxYywKLTB4MjIsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OGIsIDB4ZmMsIDB4MTYsIDB4ZTEsIDB4MmUsIDB4NjIsIDB4ZjgsIDB4NjgsCi0weDAwLCAweDI4LCAweDBkLCAweGQwLCAweGI4LCAweDg5LCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweGMxLCAweDQ5LAotMHhjOSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg3MCwgMHhmZiwgMHhmOCwgMHg4OSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwKLTB4YmQsIDB4NDksIDB4YzksIDB4NjgsIDB4MDAsIDB4ZjAsIDB4NjksIDB4ZmYsIDB4N2EsIDB4NjgsIDB4YzAsIDB4NDYsCi0weDcyLCAweDYxLCAweGI5LCAweDY4LCAweGMwLCAweDQ2LCAweGIxLCAweDYxLCAweDMwLCAweDFjLCAweGI4LCAweDQ5LAotMHgwOSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg1ZSwgMHhmZiwgMHgwMCwgMHgyOCwgMHgxNywgMHhkMSwgMHgzMCwgMHgxYywKLTB4YjQsIDB4NDksIDB4NDksIDB4NjgsIDB4MDAsIDB4ZjAsIDB4NTcsIDB4ZmYsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsCi0weGI4LCAweDQyLCAweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDI3LCAweGZjLCAweDA3LCAweDFjLAotMHg2OCwgMHg2OCwgMHhhZiwgMHg0YiwgMHgxOCwgMHg0MywgMHg2OCwgMHg2MCwgMHgwMCwgMHgyMCwgMHhhOCwgMHg2MSwKLTB4YWMsIDB4MjMsIDB4YTgsIDB4NjgsIDB4OTgsIDB4NDMsIDB4YTgsIDB4NjAsIDB4YjAsIDB4ZTAsIDB4YTgsIDB4NjksCi0weGE4LCAweDI4LCAweDAxLCAweGQyLCAweGE4LCAweDIwLCAweGE4LCAweDYxLCAweDEwLCAweDM3LCAweGUwLCAweDZhLAotMHhiOCwgMHg0MiwgMHg2YywgMHhkOCwgMHg5YywgMHhlMCwgMHhhNSwgMHhlMCwgMHhhNCwgMHhlMCwgMHgxMCwgMHgyOCwKLTB4NjgsIDB4ZDEsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NjgsIDB4NjgsIDB4MTgsIDB4NDAsIDB4MDEsIDB4MGYsCi0weDQ4LCAweDAxLCAweDQwLCAweDFhLCAweDgwLCAweDAwLCAweGEwLCAweDRhLCAweDgyLCAweDE4LCAweDAxLCAweDkyLAotMHg3OCwgMHg4OCwgMHg0MiwgMHgwYiwgMHgzMSwgMHhkMywgMHg4MiwgMHgwYiwgMHgyZiwgMHhkMywgMHg5ZCwgMHg0OCwKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsIDB4MDIsIDB4MjAsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4MTAsIDB4ODAsCi0weDc4LCAweDg4LCAweDAwLCAweDA1LCAweDAwLCAweDBkLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDYwLAotMHhiOCwgMHg2OCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2MCwgMHg3OCwgMHg2OCwgMHgwMSwgMHg5YSwKLTB4YzAsIDB4NDYsIDB4MTAsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjQsCi0weDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDYzLCAweDg4LCAweDAyLCAweDhmLCAweDQ5LCAweDQwLCAweDE4LAotMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MywgMHgwMSwgMHg5YSwgMHg1MCwgMHg2OCwgMHgzNiwgMHgzMCwKLTB4OTQsIDB4MjgsIDB4MDEsIDB4ZDgsIDB4MzgsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4OTQsIDB4MjAsIDB4YTgsIDB4NjEsCi0weDEwLCAweDM3LCAweGUwLCAweDZhLCAweGI4LCAweDQyLCAweDI4LCAweGQ4LCAweDU4LCAweGUwLCAweDdhLCAweDg4LAotMHg5MiwgMHgwYiwgMHgwMywgMHhkMywgMHg4NSwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwgMHgyMywgMHhlMCwKLTB4MDEsIDB4MjIsIDB4MTIsIDB4MDMsIDB4MDIsIDB4NDAsIDB4ODMsIDB4NGIsIDB4MWQsIDB4ZDAsIDB4MDMsIDB4OTMsCi0weDAwLCAweDA1LCAweDAwLCAweDBkLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDYwLCAweGI4LCAweDY4LAotMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2MCwgMHg3OCwgMHg2OCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwKLTB4MTAsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsCi0weDkwLCAweDY0LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDYzLCAweDg4LCAweDAyLCAweDc1LCAweDQ5LAotMHg0MCwgMHgxOCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MywgMHgwMiwgMHhlMCwgMHgzMywgMHhlMCwKLTB4MmEsIDB4ZTAsIDB4MDMsIDB4OTMsIDB4MDEsIDB4MjAsIDB4MGYsIDB4OTksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NzEsCi0weDEyLCAweDlhLCAweDUwLCAweDc4LCAweDA1LCAweDk5LCAweDQzLCAweDFhLCAweDBiLCAweDkzLCAweDEwLCAweDM3LAotMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5MiwgMHhmYiwKLTB4MDcsIDB4MWMsIDB4MDEsIDB4OWEsIDB4NTAsIDB4NmIsIDB4OTEsIDB4NmIsIDB4MDksIDB4MDEsIDB4NDAsIDB4MTgsCi0weDBiLCAweDliLCAweDIxLCAweDFjLCAweDNhLCAweDFjLCAweGZmLCAweGY3LCAweDdkLCAweGZiLCAweDAxLCAweDlhLAotMHhjMCwgMHg0NiwgMHhkMCwgMHg2NCwgMHgwMSwgMHg5YSwgMHgwYiwgMHg5YiwgMHhjMCwgMHg0NiwgMHgxMywgMHg2NSwKLTB4MDEsIDB4MjMsIDB4NWIsIDB4MDYsIDB4NjgsIDB4NjgsIDB4MTgsIDB4NDMsIDB4NjgsIDB4NjAsIDB4MDAsIDB4MjAsCi0weGE4LCAweDYxLCAweDBkLCAweGUwLCAweDEwLCAweDM3LCAweGUwLCAweDZhLCAweGI4LCAweDQyLCAweDAzLCAweGQ4LAotMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3MSwgMHhmYiwgMHgwNywgMHgxYywgMHgzOCwgMHg3OCwgMHg0MCwgMHgwNywKLTB4NDAsIDB4MGYsIDB4MDMsIDB4MjgsIDB4MDAsIDB4ZDEsIDB4ZjgsIDB4ZTYsIDB4YTgsIDB4NjksIDB4MDMsIDB4OTksCi0weDAxLCAweGYwLCAweDI2LCAweGZhLCAweDAwLCAweDI4LCAweDJhLCAweGQxLCAweDM4LCAweDFjLCAweDIxLCAweDFjLAotMHgwMCwgMHhmMCwgMHg3OSwgMHhmYiwgMHhhOCwgMHg2OCwgMHg4MCwgMHgwOSwgMHgwNCwgMHhkMywgMHgzMCwgMHgxYywKLTB4NDksIDB4NDksIDB4NDksIDB4NjgsIDB4MDAsIDB4ZjAsIDB4ODEsIDB4ZmUsIDB4NDEsIDB4NDksIDB4MDAsIDB4MjAsCi0weDAxLCAweGYwLCAweDE0LCAweGZhLCAweDAwLCAweDI4LCAweDA0LCAweGQxLCAweDBlLCAweDliLCAweGQ4LCAweDZiLAotMHgwMSwgMHgzMCwgMHhkOCwgMHg2MywgMHgxMSwgMHhlMCwgMHgwMSwgMHgyMCwgMHgwZiwgMHg5OSwgMHhjMCwgMHg0NiwKLTB4NDgsIDB4NzEsIDB4ODAsIDB4MDYsIDB4MDAsIDB4MjcsIDB4NjgsIDB4NjAsIDB4YWYsIDB4NjEsIDB4M2EsIDB4NGEsCi0weGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDM5LCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLCAweDM5LCAweDRiLAotMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHhmMywgMHhmOSwgMHgwMCwgMHgyMCwgMHgxNSwgMHhlMiwgMHgwNSwgMHg5OCwKLTB4MGMsIDB4OTksIDB4MDgsIDB4MWEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MGMsIDB4OTAsIDB4MGIsIDB4OTAsCi0weDBjLCAweDk4LCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweDAxLCAweDIwLCAweDBmLCAweDk5LCAweGMwLCAweDQ2LAotMHg0OCwgMHg3MSwgMHgyOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNCwgMHg5MCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgyMCwKLTB4MDgsIDB4OTAsIDB4MDAsIDB4MjIsIDB4MGEsIDB4OTIsIDB4MGMsIDB4OTgsIDB4MDEsIDB4MzgsIDB4MGQsIDB4OTAsCi0weGEzLCAweGUwLCAweDc4LCAweDg4LCAweDhhLCAweDFiLCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDkwLCAweDQyLAotMHgwNSwgMHhkZCwgMHgwNywgMHg5MiwgMHg4MCwgMHgxYSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOCwgMHg5MCwKLTB4MDAsIDB4ZTAsIDB4MDcsIDB4OTAsIDB4MDgsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MDcsIDB4ZDEsIDB4MGQsIDB4OTgsCi0weDBhLCAweDlhLCAweDkwLCAweDQyLCAweDA3LCAweGRkLCAweDA3LCAweDk4LCAweDMwLCAweDE4LCAweDg4LCAweDQyLAotMHgwMywgMHhkOCwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwNSwgMHgwNiwgMHg5MCwgMHgxYywgMHhlMCwgMHgxMSwgMHgyMCwKLTB4NDAsIDB4MDUsIDB4MDYsIDB4OTAsIDB4YTgsIDB4NjgsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDIsIDB4ZDEsCi0weDIwLCAweDQ4LCAweGMwLCAweDQ2LCAweDA2LCAweDkwLCAweGIxLCAweDA3LCAweDg5LCAweDBmLCAweDBmLCAweGQwLAotMHgwNywgMHg5OCwgMHhjMCwgMHgwNiwgMHhjMCwgMHgwZSwgMHgwOCwgMHhkMCwgMHgxZSwgMHgyOCwgMHgwOSwgMHhkYiwKLTB4MWUsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MDMsIDB4MjksIDB4MDUsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDIsIDB4MjksCi0weDAyLCAweGQzLCAweDAxLCAweDIwLCAweDAyLCAweDkwLCAweGRlLCAweGU3LCAweDBhLCAweDlhLCAweDAwLCAweDJhLAotMHgwNCwgMHhkMSwgMHgwMSwgMHgyMywgMHhkYiwgMHgwNSwgMHgwNiwgMHg5OCwgMHgxOCwgMHg0MywgMHgwNiwgMHg5MCwKLTB4MDcsIDB4OTgsIDB4MDYsIDB4OTksIDB4MDgsIDB4NDMsIDB4MDIsIDB4MWMsIDB4MDAsIDB4OTAsIDB4MDQsIDB4OTgsCi0weDgzLCAweDE5LCAweDFkLCAweGUwLCAweGU4LCAweDBlLCAweDAwLCAweDgwLCAweDAxLCAweDQ5LCAweGZmLCAweGZmLAotMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHgxMiwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIDB4NjgsIDB4MTksIDB4MDAsIDB4ODAsIDB4NjAsIDB4MDQsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVjLCAweDJiLCAweDAwLCAweDgwLCAweDU1LCAweDMyLCAweGZmLCAweGZmLAotMHhhYywgMHg1ZSwgMHgyMSwgMHg0MCwgMHgwZCwgMHgzZCwgMHhmZiwgMHhmZiwgMHhjZCwgMHgzMSwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4MDAsIDB4MzIsIDB4MDIsIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsIDB4MDYsIDB4Y2EsIDB4MDEsIDB4ZjAsCi0weDZiLCAweGY5LCAweDA3LCAweDk4LCAweDM2LCAweDE4LCAweDAyLCAweDk4LAotMHgwMCwgMHgyOCwgMHgxNiwgMHhkMCwgMHhhOCwgMHg2OCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwNCwgMHhkMSwKLTB4MDksIDB4MjMsIDB4NWIsIDB4MDQsIDB4MDYsIDB4OTgsIDB4MTgsIDB4NDMsIDB4MDYsIDB4OTAsIDB4MDYsIDB4OTgsCi0weGMyLCAweDRhLCAweDAyLCAweDQzLCAweDAwLCAweDkyLCAweDA0LCAweDk4LCAweDgzLCAweDE5LCAweGMxLCAweDQ4LAotMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHg1MSwgMHhmOSwgMHgwMCwgMHgyMCwKLTB4MDIsIDB4OTAsIDB4MDgsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MGIsIDB4ZDEsIDB4MGIsIDB4OWIsIDB4MDEsIDB4M2IsCi0weDBiLCAweDkzLCAweDEwLCAweDM3LCAweGUwLCAweDZhLCAweGI4LCAweDQyLCAweDBjLCAweGQ4LCAweDIwLCAweDFjLAotMHgwMCwgMHhmMCwgMHg4YSwgMHhmYSwgMHgwNywgMHgxYywgMHgwNywgMHhlMCwgMHg3OCwgMHg2OCwgMHgwNywgMHg5YSwKLTB4ODAsIDB4MTgsIDB4NzgsIDB4NjAsIDB4NzgsIDB4ODgsIDB4MDcsIDB4OWEsIDB4ODAsIDB4MWEsIDB4NzgsIDB4ODAsCi0weDBhLCAweDlhLCAweDUwLCAweDFjLCAweDAyLCAweDA0LCAweDEyLCAweDBjLCAweDBhLCAweDkyLCAweDBjLCAweDk4LAotMHgwYSwgMHg5YSwgMHg4MiwgMHg0MiwgMHgwMywgMHhkYSwgMHhhOSwgMHg2OSwgMHhiMSwgMHg0MiwgMHgwMCwgMHhkOSwKLTB4NTMsIDB4ZTcsIDB4YTgsIDB4NjksIDB4YjAsIDB4NDIsIDB4NmIsIDB4ZDEsIDB4YTgsIDB4NjgsIDB4MDEsIDB4MDksCi0weDY5LCAweGQyLCAweDA4LCAweDlhLCAweDAwLCAweDJhLCAweDU2LCAweGQwLCAweDBjLCAweDk5LCAweDBhLCAweDlhLAotMHg4YSwgMHg0MiwgMHgzZSwgMHhkYiwgMHhiMSwgMHgwNywgMHg4OSwgMHgwZiwgMHgwYywgMHhkMCwgMHgwOCwgMHg5YSwKLTB4ZDIsIDB4MDYsIDB4ZDIsIDB4MGUsIDB4MGIsIDB4ZDAsIDB4MWUsIDB4MmEsIDB4MDYsIDB4ZGIsIDB4MWUsIDB4MmEsCi0weDAyLCAweGQxLCAweDAzLCAweDI5LCAweDA1LCAweGQwLCAweDAxLCAweGUwLCAweDAyLCAweDI5LCAweDAyLCAweGQyLAotMHgwMiwgMHg5OSwgMHgwMCwgMHgyOSwgMHgyMSwgMHhkMCwgMHgwOCwgMHg5YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwKLTB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsIDB4MDYsIDB4Y2EsIDB4MDEsIDB4ZjAsCi0weDAxLCAweGY5LCAweDA4LCAweDk4LCAweDM2LCAweDE4LCAweGE4LCAweDY4LCAweDhjLCAweDIzLCAweDE4LCAweDQwLAotMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwNiwgMHgwMCwgMHhlMCwgMHg5MiwgMHg0OCwgMHgwMSwgMHgyMiwKLTB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4OGUsIDB4NDgsIDB4MDEsIDB4NmQsCi0weDQyLCAweDZkLCAweDAwLCAweDIwLCAweDAxLCAweGYwLCAweGVjLCAweGY4LCAweDAwLCAweDIwLCAweDAyLCAweDkwLAotMHgxNSwgMHhlMCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwNiwKLTB4MDAsIDB4ZTAsIDB4ODgsIDB4NDgsIDB4MDgsIDB4OWEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4ZTAsIDB4MDgsIDB4OWEsCi0weGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDA0LCAweDk4LCAweDgzLCAweDE5LCAweDAwLCAweDIwLCAweDNhLCAweDFkLAotMHgwNiwgMHhjYSwgMHgwMSwgMHhmMCwgMHhkNSwgMHhmOCwgMHgwOCwgMHg5OCwgMHgzNiwgMHgxOCwgMHgxMCwgMHgzNywKLTB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MTQsIDB4ZmEsCi0weDA3LCAweDFjLCAweDY4LCAweDY4LCAweDgwLCAweDBlLCAweDZiLCAweGQyLCAweDBhLCAweDk4LCAweGMwLCAweDQ2LAotMHgwOSwgMHg5MCwgMHgwYywgMHg5OSwgMHg4OCwgMHg0MiwgMHg1YywgMHhkYSwgMHgwZCwgMHg5OCwgMHgwOSwgMHg5OSwKLTB4ODgsIDB4NDIsIDB4MDMsIDB4ZDAsIDB4N2EsIDB4ODgsIDB4MWUsIDB4ZTAsIDB4NWYsIDB4ZTAsIDB4NWUsIDB4ZTAsCi0weDc4LCAweDg4LCAweDAxLCAweDIyLCAweDUyLCAweDA2LCAweDAyLCAweDQzLCAweGE5LCAweDY4LCAweDhjLCAweDIzLAotMHgxOSwgMHg0MCwgMHgwMiwgMHhkMSwgMHgwOSwgMHgyMywgMHg1YiwgMHgwNCwgMHgxYSwgMHg0MywgMHhiMSwgMHgwNywKLTB4ODksIDB4MGYsIDB4MGUsIDB4ZDAsIDB4YzMsIDB4MDYsIDB4ZGIsIDB4MGUsIDB4MDgsIDB4ZDAsIDB4MWUsIDB4MmIsCi0weDA5LCAweGRiLCAweDFlLCAweDJiLCAweDAyLCAweGQxLCAweDAzLCAweDI5LCAweDA1LCAweGQxLCAweDAxLCAweGUwLAotMHgwMiwgMHgyOSwgMHgwMiwgMHhkMywgMHgwMSwgMHgyMSwgMHgwMiwgMHg5MSwgMHgwMiwgMHgxYywgMHgwOSwgMHg5OCwKLTB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDUsIDB4MWEsIDB4NDMsIDB4MDAsIDB4OTIsCi0weDA0LCAweDk4LCAweDgzLCAweDE5LCAweDAwLCAweDIwLCAweDNhLCAweDFkLCAweDA2LCAweGNhLCAweDAxLCAweGYwLAotMHg4ZiwgMHhmOCwgMHg3OCwgMHg4OCwgMHg4NiwgMHgxOSwgMHgxMCwgMHgzNywgMHgwMiwgMHg5OCwgMHgwMCwgMHgyOCwKLTB4MTQsIDB4ZDAsIDB4YTgsIDB4NjgsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MjAsCi0weDQwLCAweDA2LCAweDAwLCAweGUwLCAweDU3LCAweDQ4LCAweDAxLCAweDIyLCAweDAyLCAweDQzLCAweDAwLCAweDkyLAotMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHg1MywgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgwMCwgMHgyMCwKLTB4MDEsIDB4ZjAsIDB4NzYsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4MDIsIDB4OTAsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsCi0weDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweGI2LCAweGY5LCAweDA3LCAweDFjLCAweDA5LCAweDk4LAotMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOSwgMHg5MCwKLTB4MGMsIDB4OTksIDB4ODgsIDB4NDIsIDB4YTIsIDB4ZGIsIDB4NjgsIDB4NjgsIDB4MzAsIDB4NDMsIDB4MDEsIDB4MDQsCi0weDA5LCAweDBjLCAweDY4LCAweDYwLCAweGU4LCAweDZhLCAweDAwLCAweGYwLCAweDdiLCAweGZhLCAweDI4LCAweGUwLAotMHgyNywgMHhlMCwgMHhhOCwgMHg2OCwgMHgwMCwgMHgwOSwgMHgxNCwgMHhkMywgMHg2OCwgMHg2OCwgMHg4MCwgMHgwZSwKLTB4MTUsIDB4ZDIsIDB4MDEsIDB4OWEsIDB4MDAsIDB4MmEsIDB4MTIsIDB4ZDAsIDB4MDEsIDB4OWEsIDB4NTAsIDB4NmIsCi0weDBiLCAweDliLCAweDIxLCAweDFjLCAweDNhLCAweDFjLCAweGZmLCAweGY3LCAweDg5LCAweGY5LCAweDAxLCAweDlhLAotMHhjMCwgMHg0NiwgMHg5MCwgMHg2NCwgMHgwMSwgMHg5YSwgMHgwYiwgMHg5YiwgMHhjMCwgMHg0NiwgMHg5MywgMHg2MywKLTB4MDMsIDB4ZTAsIDB4ZTgsIDB4NmEsIDB4MzEsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NWQsIDB4ZmEsIDB4NjgsIDB4NjgsCi0weDMwLCAweDQzLCAweDY4LCAweDYwLCAweGE4LCAweDY5LCAweGIwLCAweDQyLCAweDA1LCAweGQ5LCAweDAwLCAweDA0LAotMHgwMCwgMHgwYywgMHg4MCwgMHgxYiwgMHgwMCwgMHhmMCwgMHhlZSwgMHhmOSwgMHhhZSwgMHg2MSwgMHhhOCwgMHg2OCwKLTB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MGIsIDB4ZDAsIDB4MmYsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsCi0weDA0LCAweDk4LCAweGMzLCAweDFmLCAweDA1LCAweDNiLCAweDJhLCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLAotMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHgyMywgMHhmOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyMCwgMHg2ZCwKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjEsIDB4ZTEsIDB4NjksIDB4ODEsIDB4NDIsCi0weDEyLCAweGQwLCAweDIyLCAweDY5LCAweDAyLCAweDJhLCAweDBmLCAweGQyLCAweDQxLCAweDFhLCAweDAxLCAweGQ1LAotMHg2MCwgMHg2ZCwgMHg0MSwgMHgxOCwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgzZiwgMHhmYiwgMHhlMSwgMHg2OSwKLTB4NDAsIDB4MTgsIDB4ZTAsIDB4NjEsIDB4NjEsIDB4NmQsIDB4ODgsIDB4NDIsIDB4MjQsIDB4ZDMsIDB4NDAsIDB4MWEsCi0weGUwLCAweDYxLCAweDIxLCAweGUwLCAweDgxLCAweDQyLCAweDFmLCAweGQxLCAweDIwLCAweDY5LCAweDAyLCAweDI4LAotMHgxYywgMHhkMiwgMHgwMSwgMHgyMCwgMHg2MCwgMHg2MSwgMHgxOCwgMHg0OCwgMHg0MSwgMHg2OSwgMHhlMiwgMHg2YywKLTB4MGEsIDB4NDMsIDB4NDIsIDB4NjEsIDB4ODEsIDB4NjksIDB4ZTMsIDB4NmMsIDB4OTksIDB4NDMsIDB4ODEsIDB4NjEsCi0weDAxLCAweDIxLCAweDA5LCAweDA1LCAweGNhLCAweDYwLCAweDgwLCAweDY5LCAweGMwLCAweDQ2LCAweDA4LCAweDYxLAotMHg4YiwgMHgwMiwgMHgyMCwgMHg2ZCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MSwKLTB4ZTEsIDB4NjksIDB4ODEsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4Y2MsIDB4ZmEsCi0weDI4LCAweDFjLCAweDAwLCAweGYwLCAweDBmLCAweGY5LCAweDBjLCAweDk4LCAweDA1LCAweDk5LCAweDQwLCAweDE4LAotMHgwMCwgMHgwMSwgMHgxMCwgMHgzMCwgMHg2OCwgMHg2MSwgMHgxMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDEyLCAweDAyLCAweDA0LCAweDAwLCAweDUyLCAweDAyLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHg0MCwgMHgyMCwgMHgyZCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHhmMCwKLTB4MDMsIDB4ZjksIDB4MDcsIDB4MWMsIDB4ODEsIDB4NjksIDB4NDQsIDB4NmEsIDB4YTAsIDB4NmYsIDB4MDAsIDB4ZjAsCi0weDQ1LCAweGZlLCAweDAwLCAweDIwLCAweGUxLCAweDFkLCAweDE5LCAweDMxLCAweDQ4LCAweDcxLCAweDc5LCAweDY4LAotMHhjOSwgMHgwZSwgMHgwOSwgMHhkMywgMHhmOCwgMHg2YSwgMHgwMCwgMHgwMSwgMHgyNCwgMHg0OSwgMHg0MCwgMHgxOCwKLTB4MjQsIDB4NGIsIDB4YzAsIDB4MTgsIDB4MDEsIDB4NjgsIDB4MDEsIDB4MzksIDB4MDEsIDB4NjAsIDB4MzYsIDB4ZTAsCi0weGUxLCAweDZkLCAweDA5LCAweDY4LCAweDIyLCAweDZlLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweDIwLCAweDRlLAotMHhmNSwgMHgxZCwgMHg3OSwgMHgzNSwgMHgwMSwgMHgyMywgMHhlOSwgMHg2YiwgMHgxOSwgMHg0MywgMHhlOSwgMHg2MywKLTB4YjksIDB4NmEsIDB4ZTIsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4YjksIDB4NmEsIDB4MjIsIDB4NmUsCi0weGMwLCAweDQ2LCAweDExLCAweDYwLCAweDYxLCAweDY5LCAweDAwLCAweDI5LCAweDA0LCAweGQxLCAweGE5LCAweDZiLAotMHgwMSwgMHgzMSwgMHhhOSwgMHg2MywgMHgwOCwgMHgyOSwgMHgwNywgMHhkMywgMHhhOCwgMHg2MywgMHgwMSwgMHgyMCwKLTB4MDAsIDB4ZjAsIDB4ODYsIDB4ZjgsIDB4ZTgsIDB4NmIsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4ZTgsIDB4NjMsCi0weDc4LCAweDY4LCAweDgxLCAweDBlLCAweDBmLCAweGQyLCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAweGYxLCAweDE4LAotMHhjOSwgMHg2OCwgMHgwMCwgMHgyOSwgMHgwNiwgMHhkMCwgMHgwMCwgMHgwOCwgMHgwNCwgMHhkMiwgMHgyMCwgMHgxYywKLTB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NDMsIDB4ZjgsIDB4MDIsIDB4ZTAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weDA1LCAweGZhLCAweDM4LCAweDFjLCAweGZiLCAweGY3LCAweDA2LCAweGZjLCAweDIwLCAweDFjLCAweDAwLCAweGYwLAotMHgwYiwgMHhmOCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4YjQsIDB4MGMsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDA3LCAweDFjLCAweGY4LCAweDFkLCAweDE5LCAweDMwLAotMHgwMSwgMHg3OSwgMHgwMCwgMHgyOSwgMHgwNCwgMHhkMCwgMHgwMCwgMHgyMSwgMHgwMSwgMHg3MSwgMHgzOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4NTYsIDB4ZmIsIDB4ZjgsIDB4NjgsIDB4MDIsIDB4MjgsIDB4MGQsIDB4ZDAsIDB4YjgsIDB4NjgsCi0weDgwLCAweDAwLCAweGMyLCAweDE5LCAweDUwLCAweDZjLCAweDAwLCAweDI4LCAweDExLCAweGQwLCAweGI4LCAweDZhLAotMHg0MSwgMHg3OCwgMHgwOSwgMHgwMSwgMHgxMCwgMHgzMSwgMHg1MiwgMHg2YiwgMHgxMCwgMHgxYSwgMHg4OCwgMHg0MiwKLTB4MDUsIDB4ZDMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NDIsIDB4ZmIsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDI4LCAweGZhLCAweGY4LCAweGU3LCAweDc4LCAweDY4LAotMHg4MCwgMHgwMCwgMHhjMCwgMHgxOSwgMHhjMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MiwgMHhmMSwgMHhlNywKLTB4YjAsIDB4YjUsIDB4ODcsIDB4YjAsIDB4MGYsIDB4MWMsIDB4ODAsIDB4NmYsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsCi0weDAwLCAweDI0LCAweDEzLCAweDRkLCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAweGU4LCAweDE4LCAweDgwLCAweDY5LAotMHgwMCwgMHgyOCwgMHgxNywgMHhkMCwgMHg2OSwgMHg0NiwgMHhhMiwgMHgwMCwgMHg1MiwgMHgxOSwgMHgwYiwgMHgyMywKLTB4MWIsIDB4MDIsIDB4ZDIsIDB4MTgsIDB4OTIsIDB4NjksIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4ZmIsCi0weDAwLCAweDI4LCAweDA5LCAweGQxLCAweDAxLCAweDM0LCAweGEwLCAweDAwLCAweDQwLCAweDE5LCAweDBiLCAweDIzLAotMHgxYiwgMHgwMiwgMHhjMCwgMHgxOCwgMHg4MCwgMHg2OSwgMHgwMCwgMHgyOCwgMHhlYSwgMHhkMSwgMHgwMSwgMHhlMCwKLTB4MDEsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OWQsIDB4ZjksIDB4MDcsIDB4YjAsCi0weGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhiOCwgMHhiNSwgMHhjMiwgMHgwNywgMHhkMiwgMHgwZiwgMHgxNiwgMHg0YywgMHgxNiwgMHg0OSwgMHgwMSwgMHhkMCwKLTB4MDgsIDB4MjIsIDB4MDgsIDB4ZTAsIDB4ODIsIDB4MDgsIDB4MDUsIDB4ZDMsIDB4MGMsIDB4MjIsIDB4YTQsIDB4MTgsCi0weDBiLCAweDY4LCAweGRmLCAweDFkLCAweDE1LCAweDM3LCAweDAzLCAweGUwLCAweDFjLCAweDIyLCAweDBiLCAweDY4LAotMHhkZiwgMHgxZCwgMHgwOSwgMHgzNywgMHgwZiwgMHg0YiwgMHgxZCwgMHg3OCwgMHgwMCwgMHgyZCwgMHgxMywgMHhkMCwKLTB4NWIsIDB4NzgsIDB4MDAsIDB4MmIsIDB4MTAsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDYsIDB4MWEsIDB4NDMsCi0weDAwLCAweDI4LCAweDAxLCAweGQxLCAweDViLCAweDA4LCAweDFhLCAweDQzLCAweDAwLCAweDkyLCAweDRhLCAweDY4LAotMHgwMSwgMHgyMCwgMHgzOSwgMHgxYywgMHgyMywgMHgxYywgMHgwMCwgMHhmMCwgMHhkZiwgMHhmZSwgMHhiOCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDYsIDB4MWEsIDB4NDMsIDB4ZjEsIDB4ZTcsCi0weDkwLCAweGVlLCAweDIwLCAweDQwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweGY4LCAweDBlLCAweDAwLCAweDgwLAotMHgwMCwgMHgyMSwgMHhjMSwgMHg2MSwgMHgwNSwgMHg0OSwgMHg4YSwgMHg2OCwgMHgwMCwgMHgyYSwgMHgwMSwgMHhkMSwKLTB4ODgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4Y2EsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZDAsIDB4NjEsIDB4YzgsIDB4NjAsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDI4LCAweDBmLCAweDAwLCAweDgwLCAweDAzLCAweDQ5LCAweDg4LCAweDY4LAotMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHhjMiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg4YSwgMHg2MCwgMHg3MCwgMHg0NywKLTB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MWMsIDB4MDEsIDB4MjMsIDB4ODgsIDB4NjgsIDB4NTgsIDB4NDAsCi0weDg4LCAweDYwLCAweGNhLCAweDY4LCAweDAxLCAweDNhLCAweGNhLCAweDYwLCAweDBhLCAweDY5LCAweDAxLCAweDNhLAotMHg4MCwgMHgwMCwgMHgwYSwgMHg2MSwgMHg0MiwgMHgxOCwgMHhkMCwgMHg2YiwgMHg1MywgMHg2YiwgMHhjMCwgMHg0NiwKLTB4Y2IsIDB4NjIsIDB4MGIsIDB4NjgsIDB4OWIsIDB4MDAsIDB4NTksIDB4MTgsIDB4NDksIDB4NmMsIDB4NTMsIDB4NmMsCi0weGM5LCAweDE4LCAweDUxLCAweDY0LCAweDcwLCAweDQ3LCAweDhhLCAweDY4LCAweDkyLCAweDAwLCAweDUyLCAweDE4LAotMHhkMywgMHg2YiwgMHg4MywgMHg0MiwgMHgxNywgMHhkMSwgMHhkMCwgMHgxZCwgMHgzZCwgMHgzMCwgMHgwYSwgMHg2OCwKLTB4OTIsIDB4MDAsIDB4NTIsIDB4MTgsIDB4NTIsIDB4NmMsIDB4MDMsIDB4NjgsIDB4OWEsIDB4MWEsIDB4MDIsIDB4NjAsCi0weDAxLCAweDIzLCAweDg4LCAweDY4LCAweDU4LCAweDQwLCAweDg4LCAweDYwLCAweGNhLCAweDY4LCAweDAxLCAweDMyLAotMHhjYSwgMHg2MCwgMHgwYSwgMHg2OSwgMHgwMSwgMHgzMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHgxOCwgMHgwYSwgMHg2MSwKLTB4NDAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjIsIDB4NzAsIDB4NDcsIDB4YjgsIDB4YjUsIDB4MDQsIDB4MWMsCi0weDFkLCAweDFjLCAweDE3LCAweDFjLCAweDA4LCAweDFjLCAweDM5LCAweDFjLCAweGZmLCAweGY3LCAweGQ5LCAweGZmLAotMHgwMCwgMHgyMCwgMHgyOSwgMHgxYywgMHgwMCwgMHhmMCwgMHg3YywgMHhmZSwgMHgwMSwgMHgyMCwgMHhmOSwgMHgxZCwKLTB4MTksIDB4MzEsIDB4NDgsIDB4NzEsIDB4ODAsIDB4MDYsIDB4NjAsIDB4NjAsIDB4MDAsIDB4MjAsIDB4YTAsIDB4NjEsCi0weDA2LCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDA2LCAweDQ4LAotMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgwNSwgMHg0YiwgMHgwMCwgMHgyMCwgMHgwMCwgMHhmMCwgMHg2MiwgMHhmZSwKLTB4YjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4MDIsCi0weDdjLCAweDI5LCAweDAwLCAweDgwLCAweDQ0LCAweDgwLCAweDIwLCAweDQwLCAweDA2LCAweDQ5LCAweDBhLCAweDY4LAotMHgxMCwgMHgxOCwgMHgwOCwgMHg2MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwKLTB4MDMsIDB4NDksIDB4MGEsIDB4NzksIDB4MDEsIDB4MzIsIDB4MGEsIDB4NzEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGU0LCAweDJkLCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLAotMHgwNiwgMHg0OSwgMHgwYSwgMHg2OCwgMHgxMCwgMHgxOCwgMHgwOCwgMHg2MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwKLTB4OTgsIDB4NDIsIDB4MDMsIDB4ZDksIDB4MDMsIDB4NDksIDB4MGEsIDB4NzksIDB4MDEsIDB4MzIsIDB4MGEsIDB4NzEsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGU0LCAweDJkLCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHgwMywgMHgzMCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwNiwgMHg0OSwgMHgwYSwgMHg2OCwgMHgxMCwgMHgxOCwKLTB4MDgsIDB4NjAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4OTgsIDB4NDIsIDB4MDMsIDB4ZDksIDB4MDMsIDB4NDksCi0weDBhLCAweDc5LCAweDAxLCAweDMyLCAweDBhLCAweDcxLCAweDcwLCAweDQ3LCAweGU0LCAweDJkLCAweDAwLCAweDgwLAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMiwgMHg0OCwgMHg0MSwgMHg3OSwgMHgwMSwgMHgzMSwgMHg0MSwgMHg3MSwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4OTAsIDB4YjQsIDB4ODIsIDB4MDAsCi0weDE3LCAweDRiLCAweDlhLCAweDU4LCAweDhiLCAweDA3LCAweDAyLCAweGQwLCAweDg5LCAweDA4LCAweDBiLCAweDFkLAotMHgwMSwgMHhlMCwgMHg4OSwgMHgwOCwgMHhjYiwgMHgxYywgMHgxMSwgMHg2OSwgMHhkNywgMHg2OCwgMHgxMiwgMHg0YywKLTB4ODAsIDB4MDAsIDB4MjAsIDB4NTgsIDB4NDAsIDB4NjgsIDB4YjksIDB4NDIsIDB4MDMsIDB4ZDEsIDB4ODEsIDB4NDIsCi0weDE5LCAweGQ5LCAweDExLCAweDY4LCAweDE3LCAweGUwLCAweDAwLCAweDI0LCAweGI5LCAweDQyLCAweDA5LCAweGQ5LAotMHg4MSwgMHg0MiwgMHgxMiwgMHhkOSwgMHgxMSwgMHg2OCwgMHg3OCwgMHgxYSwgMHgwMCwgMHhkNSwgMHgwMywgMHgzMCwKLTB4ODAsIDB4MTAsIDB4OTgsIDB4NDIsIDB4MGIsIDB4ZDgsIDB4MDcsIDB4ZTAsIDB4ODEsIDB4NDIsIDB4MDUsIDB4ZDgsCi0weDc4LCAweDFhLCAweDAwLCAweGQ1LCAweDAzLCAweDMwLCAweDgwLCAweDEwLCAweDk4LCAweDQyLCAweDAyLCAweGQ4LAotMHgyMCwgMHgxYywgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHhjOCwgMHgxZCwgMHgwNSwgMHgzMCwgMHhmYSwgMHhlNywKLTB4NzAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODAsIDB4MDAsIDB4MGYsIDB4NGEsIDB4MTcsIDB4NTgsCi0weDg4LCAweDA3LCAweDAyLCAweGQwLCAweDg4LCAweDA4LCAweDA0LCAweDMwLCAweDAxLCAweGUwLCAweDg4LCAweDA4LAotMHgwMywgMHgzMCwgMHgzOSwgMHg2OSwgMHg3YSwgMHg2OCwgMHg5MSwgMHg0MiwgMHgwOSwgMHhkOSwgMHgzOSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MzksIDB4NjEsIDB4ZjksIDB4NjgsIDB4N2EsIDB4NjgsIDB4OTEsIDB4NDIsIDB4MDIsIDB4ZDksCi0weDM5LCAweDY4LCAweGMwLCAweDQ2LCAweGY5LCAweDYwLCAweDgxLCAweDAwLCAweDM4LCAweDY5LCAweDAwLCAweGYwLAotMHhkMSwgMHhmZCwgMHgzOCwgMHg2MSwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4NzAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDMsIDB4MjEsIDB4MDksIDB4MDcsIDB4MDEsIDB4NDAsCi0weDBjLCAweDBmLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweDIyLCAweDkyLCAweDA3LCAweDAyLCAweDQwLAotMHhhMywgMHgwMCwgMHgxYywgMHg0ZiwgMHhmZiwgMHg1OCwgMHg4OSwgMHgwNywgMHg4OSwgMHgwZiwgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MjksIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MmEsCi0weDAxLCAweGQwLCAweDAyLCAweDMwLCAweDAwLCAweGUwLCAweDAzLCAweDMwLCAweGY5LCAweDY4LCAweDdhLCAweDY4LAotMHg5MSwgMHg0MiwgMHgwMiwgMHhkOSwgMHgzOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHg4MSwgMHgwMCwKLTB4ZjgsIDB4NjgsIDB4MDAsIDB4ZjAsIDB4YTUsIDB4ZmQsIDB4ZjgsIDB4NjAsIDB4MGYsIDB4NDgsIDB4MDAsIDB4NjksCi0weDAwLCAweDI4LCAweDA1LCAweGQwLCAweDAxLCAweDIwLCAweGEwLCAweDQwLCAweDAyLCAweGQwLCAweDIwLCAweDFjLAotMHhmZSwgMHhmNywgMHhjYSwgMHhmYywgMHgwYiwgMHg0OSwgMHhjOCwgMHgxZCwgMHgxOSwgMHgzMCwgMHgwMywgMHg3OSwKLTB4MDAsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MDUsIDB4ZDEsIDB4MDksIDB4NDksIDB4YzgsIDB4MWQsIDB4MTksIDB4MzAsCi0weDAzLCAweDc5LCAweDAwLCAweDJiLCAweDAzLCAweGQwLCAweDAyLCAweDcxLCAweDA4LCAweDFjLCAweGZmLCAweGY3LAotMHg3OSwgMHhmOSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3MCwgMHgwNCwgMHgwMCwgMHg4MCwKLTB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4ZTQsIDB4MmMsIDB4MDAsIDB4ODAsCi0weGIwLCAweGI1LCAweDJiLCAweDQ5LCAweDA5LCAweDc5LCAweDAwLCAweDI5LCAweDAzLCAweGQxLCAweDQxLCAweDY4LAotMHgyOSwgMHg0YiwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MCwgMHg4MSwgMHg2OCwKLTB4NDksIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MDksIDB4MjEsIDB4MDksIDB4MDQsIDB4MDEsIDB4ZTAsIDB4MGQsIDB4MjEsCi0weDA5LCAweDA0LCAweDBjLCAweGM4LCAweDA4LCAweDM4LCAweDE5LCAweDQzLCAweDg3LCAweDY4LCAweGJiLCAweDBhLAotMHgwMywgMHhkMywgMHg0MywgMHg2OCwgMHg1YiwgMHgwOCwgMHgwMCwgMHhkMywgMHgwMSwgMHgzMSwgMHg0MCwgMHg2OCwKLTB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4MTgsIDB4NDAsIDB4MDcsIDB4MGYsIDB4ZjgsIDB4MDAsIDB4MWQsIDB4NGMsCi0weDAwLCAweDE5LCAweDIzLCAweDY4LCAweGMwLCAweDE4LCAweDUwLCAweDMwLCAweDAwLCAweDc5LCAweDAxLCAweDI4LAotMHgxMCwgMHhkMSwgMHg2MCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwZCwgMHhkMCwgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4NzEsIDB4ZjgsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MTksIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsCi0weDQxLCAweDZiLCAweDAxLCAweDM5LCAweDQxLCAweDYzLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgzOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHgwMywgMHg2YiwKLTB4NWQsIDB4MWMsIDB4MDUsIDB4NjMsIDB4YmQsIDB4MDIsIDB4MmQsIDB4MTksIDB4ZGIsIDB4MDAsIDB4ZWIsIDB4MTgsCi0weDgwLCAweDMzLCAweDE5LCAweDYzLCAweGRhLCAweDYyLCAweDgxLCAweDZiLCAweDAxLCAweDMxLCAweDgxLCAweDYzLAotMHgwMSwgMHgyMSwgMHhiOSwgMHg0MCwgMHgyMiwgMHg2OCwgMHgxMSwgMHg0MywgMHgyMSwgMHg2MCwgMHgwMSwgMHg2YiwKLTB4ODAsIDB4MjksIDB4ZTIsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NjMsIDB4ZGYsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDI4LCAweDBmLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLAotMHhmMCwgMHhiNSwgMHgxZiwgMHg0ZSwgMHg3MCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgzNiwgMHhkMSwgMHgwMCwgMHgyNCwKLTB4YjEsIDB4NjgsIDB4NDgsIDB4MWMsIDB4YzksIDB4MDAsIDB4ODksIDB4MTksIDB4YjAsIDB4NjAsIDB4MzIsIDB4NjgsCi0weDg5LCAweDE4LCAweDYwLCAweDMxLCAweDBkLCAweDdiLCAweDA4LCAweDI4LCAweDAwLCAweGQzLCAweGI0LCAweDYwLAotMHgyOCwgMHgwMSwgMHg4MCwgMHgxOSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4NywgMHg2YiwKLTB4MDAsIDB4MmYsIDB4MjEsIDB4ZDAsIDB4YzEsIDB4NmEsIDB4NGIsIDB4MWMsIDB4YWEsIDB4MDIsIDB4OTIsIDB4MTksCi0weGM5LCAweDAwLCAweDUxLCAweDE4LCAweDgwLCAweDMxLCAweGMzLCAweDYyLCAweGNhLCAweDZhLCAweDA5LCAweDZiLAotMHgwMSwgMHgzZiwgMHg4NywgMHg2MywgMHg4MCwgMHgyYiwgMHgwMCwgMHhkMywgMHhjNCwgMHg2MiwgMHgwMCwgMHgyZiwKLTB4MDYsIDB4ZDEsIDB4MDEsIDB4MjcsIDB4YWYsIDB4NDAsIDB4M2IsIDB4MWMsIDB4ZGIsIDB4NDMsIDB4MzcsIDB4NjgsCi0weDNiLCAweDQwLCAweDMzLCAweDYwLCAweDQzLCAweDZiLCAweDAxLCAweDNiLCAweDQzLCAweDYzLCAweDEwLCAweDFjLAotMHgzNywgMHgxYywgMHgwMCwgMHhmMCwgMHgwOSwgMHhmOCwgMHg3OCwgMHg2OCwgMHgwMCwgMHgyOCwgMHhjOSwgMHhkMCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI1LCAweGNkLCAweDBmLCAweGVkLCAweDA3LCAweDAxLCAweDI0LCAweDAwLCAweDI3LCAweDJlLCAweDRiLAotMHgyZSwgMHg0YSwgMHgwMCwgMHgyZCwgMHgxZCwgMHhkMCwgMHhkOCwgMHg2YSwgMHgwMSwgMHgzMCwgMHhkOCwgMHg2MiwKLTB4MTAsIDB4MWMsIDB4NTIsIDB4NjksIDB4MDAsIDB4MmEsIDB4MTIsIDB4ZDAsIDB4MDIsIDB4NjksIDB4NTMsIDB4MWMsCi0weDkyLCAweDAwLCAweDEyLCAweDE4LCAweDAzLCAweDYxLCAweDkxLCAweDYxLCAweDQxLCAweDY5LCAweDAxLCAweDMxLAotMHg0MSwgMHg2MSwgMHgwMiwgMHg2OSwgMHgwZiwgMHgyYSwgMHgwMCwgMHhkMywgMHgwNywgMHg2MSwgMHgwZiwgMHgyOSwKLTB4MDAsIDB4ZDMsIDB4NDQsIDB4NjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDgsIDB4MWMsCi0weGZmLCAweGY3LCAweGVlLCAweGZlLCAweGY4LCAweGU3LCAweDE1LCAweDY5LCAweDZlLCAweDFjLCAweGFkLCAweDAwLAotMHhhZCwgMHgxOCwgMHgxNiwgMHg2MSwgMHhhOSwgMHg2MSwgMHg1NSwgMHg2OSwgMHgwMSwgMHgzNSwgMHg1NSwgMHg2MSwKLTB4MTYsIDB4NjksIDB4MGYsIDB4MmUsIDB4MDAsIDB4ZDMsIDB4MTcsIDB4NjEsIDB4MGYsIDB4MmQsIDB4MDAsIDB4ZDMsCi0weDU0LCAweDYwLCAweDhjLCAweDAyLCAweGE0LCAweDBhLCAweDE2LCAweDRmLCAweDNhLCAweDZmLCAweGZkLCAweDY4LAotMHhmOSwgMHgxZCwgMHg3OSwgMHgzMSwgMHgwMSwgMHgyZCwgMHgwYywgMHhkMSwgMHhkYiwgMHg2ZCwgMHg1YiwgMHgwOCwKLTB4MDksIDB4ZDMsIDB4MGIsIDB4ODksIDB4MDAsIDB4MmIsIDB4MDYsIDB4ZDEsIDB4ZmQsIDB4NmYsIDB4MDMsIDB4M2IsCi0weDJlLCAweDY4LCAweDMzLCAweDQwLCAweDJiLCAweDYwLCAweDE0LCAweDIzLCAweDBiLCAweDgxLCAweDEwLCAweDYwLAotMHg4MCwgMHgwNywgMHg4MCwgMHgwYSwgMHgyMCwgMHg0MywgMHgwMywgMHgwNCwgMHgwMCwgMHhkMCwgMHgwMSwgMHgzOCwKLTB4NTAsIDB4NjAsIDB4MDksIDB4NmEsIDB4MDgsIDB4MzIsIDB4OTEsIDB4NDIsIDB4MDAsIDB4ZDgsIDB4MDcsIDB4NGEsCi0weDAwLCAweDBkLCAweDAyLCAweGQzLCAweDUxLCAweDIwLCAweDgwLCAweDAzLCAweDgyLCAweDYxLCAweDNhLCAweDY3LAotMHhiZSwgMHhlNywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsCi0weGIwLCAweGI1LCAweDAwLCAweDI4LCAweDA0LCAweGQxLCAweDAxLCAweDIwLCAweGMwLCAweDA1LCAweDE2LCAweDQ5LAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgxNSwgMHg0YywgMHgwMCwgMHgyNSwgMHg2NywgMHg2OSwgMHgwMCwgMHgyZiwKLTB4MTYsIDB4ZDAsIDB4ZTAsIDB4NjgsIDB4NDEsIDB4MWMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4ZTEsIDB4NjAsCi0weDgwLCAweDY5LCAweDAxLCAweDNmLCAweGZmLCAweGY3LCAweDk0LCAweGZlLCAweGUwLCAweDY4LCAweDBmLCAweDI4LAotMHgwMCwgMHhkMywgMHhlNSwgMHg2MCwgMHhlMCwgMHg2OCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg4MCwgMHg2OSwKLTB4MDAsIDB4MDgsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4MmYsIDB4ZWEsIDB4ZDEsIDB4NjcsIDB4NjEsIDB4MDMsIDB4ZTAsCi0weDA4LCAweDQ4LCAweDAxLCAweDZkLCAweDAxLCAweDMxLCAweDAxLCAweDY1LCAweDY1LCAweDYwLCAweDIwLCAweDY4LAotMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwgMHhmZiwgMHhmNywgMHgyNiwgMHhmZiwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweGIwLCAweGI0LCAweDEwLCAweDIzLAotMHg4MiwgMHg2OCwgMHgxMywgMHg0MCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyYiwgMHgxNSwgMHhkMCwgMHgwYywgMHg0YiwKLTB4MWEsIDB4NDAsIDB4MTIsIDB4MDEsIDB4ODEsIDB4MjQsIDB4MTQsIDB4NDMsIDB4MDIsIDB4NjgsIDB4MTUsIDB4NjgsCi0weDEzLCAweDFkLCAweDgwLCAweGNiLCAweDFiLCAweDY4LCAweDA0LCAweDNhLCAweDAyLCAweDYwLCAweDIwLCAweGMyLAotMHg4MCwgMHhjMiwgMHgwOCwgMHhjMiwgMHgxNCwgMHg2MCwgMHg0MiwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKLTB4MDQsIDB4MzIsIDB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4MDgsIDB4MWMsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDAwLCAweGYwLCAweGZmLCAweDBmLCAweGYwLCAweGI0LCAweDgyLCAweDY4LCAweDUzLCAweDA5LCAweDM0LCAweGQzLAotMHgxYiwgMHg0YiwgMHgxYSwgMHg0MCwgMHgxMiwgMHgwMSwgMHg4MSwgMHgyNiwgMHgxNiwgMHg0MywgMHgwMywgMHg2OCwKLTB4MWQsIDB4NjgsIDB4MWYsIDB4MWQsIDB4MTAsIDB4Y2YsIDB4M2YsIDB4NjgsIDB4MDQsIDB4M2IsIDB4MDMsIDB4NjAsCi0weDIwLCAweGMzLCAweDEwLCAweGMzLCAweDgwLCAweGMzLCAweDFlLCAweDYwLCAweDQzLCAweDY4LCAweDFmLCAweDFkLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzYiwgMHg0MywgMHg0MywgMHg2MCwgMHhjYiwgMHg2YiwgMHgxOCwgMHgxZiwKLTB4YzgsIDB4NjMsIDB4ODAsIDB4Y2IsIDB4ODAsIDB4YzAsIDB4MWMsIDB4NjgsIDB4MWYsIDB4MWQsIDB4MDMsIDB4MWQsCi0weDA0LCAweDYwLCAweDM4LCAweDFjLCAweDNmLCAweDY4LCAweGMwLCAweDQ2LCAweDFmLCAweDYwLCAweDFmLCAweDFkLAotMHg0MywgMHg2OCwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHg4MSwgMHgyMywgMHgyMywgMHg0MywgMHgzYiwgMHg2MCwKLTB4NDAsIDB4NjgsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDQsIDB4MTAsIDB4NDMsIDB4NzgsIDB4NjAsIDB4MDgsIDB4NmUsCi0weDA0LCAweDMwLCAweDA4LCAweDY2LCAweDQ4LCAweDZlLCAweDA0LCAweDMwLCAweDQ4LCAweDY2LCAweDAwLCAweDIwLAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHhmMCwgMHhmZiwgMHgwZiwgMHg4MCwgMHhiNCwgMHg4MSwgMHg2YSwKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4Y2EsIDB4MWQsIDB4MDUsIDB4MzIsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsCi0weGNmLCAweDFkLCAweDAxLCAweDM3LCAweDNiLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweGNiLCAweDYwLAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwZiwgMHgxZCwgMHgzYiwgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4OGIsIDB4NjAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MGIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MGMsIDB4YzEsCi0weDAyLCAweDYyLCAweDAxLCAweDZiLCAweGMwLCAweDQ2LCAweDBhLCAweDYyLCAweDA0LCAweDIzLCAweDgxLCAweDY5LAotMHgxOSwgMHg0MywgMHg4MSwgMHg2MSwgMHgwMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHg5MSwgMHg2MSwgMHg4MSwgMHg2YSwKLTB4MDQsIDB4MzEsIDB4ODEsIDB4NjIsIDB4MDIsIDB4NmIsIDB4YzAsIDB4NDYsIDB4OTEsIDB4NjIsIDB4YzEsIDB4MWQsCi0weDM5LCAweDMxLCAweDRhLCAweDhiLCAweDA0LCAweDNhLCAweDRhLCAweDgzLCAweDQ5LCAweDhiLCAweDAyLCAweDZiLAotMHg0MCwgMHgzMiwgMHg1MSwgMHg4MywgMHhjMSwgMHg4OSwgMHgwNCwgMHgzOSwgMHhjMSwgMHg4MSwgMHhjMSwgMHg2OCwKLTB4MDAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzEsIDB4NjAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsCi0weDAwLCAweDQ3LCAweDA4LCAweDQ3LCAweDEwLCAweDQ3LCAweDE4LCAweDQ3LCAweDIwLCAweDQ3LCAweDI4LCAweDQ3LAotMHgzMCwgMHg0NywgMHgzOCwgMHg0NywgMHgzMCwgMHg0MCwgMHgyZCwgMHhlOSwgMHgwYywgMHhjMCwgMHg5ZCwgMHhlNSwKLTB4MGMsIDB4NDgsIDB4YTAsIDB4ZTEsIDB4MjQsIDB4NDgsIDB4YjAsIDB4ZTEsIDB4MWUsIDB4MDAsIDB4MDAsIDB4MGEsCi0weDAxLCAweGMwLCAweDRjLCAweGUyLCAweDE4LCAweDQwLCAweGEwLCAweGUzLCAweDY0LCAweDUxLCAweDlmLCAweGU1LAotMHg5NCwgMHg1MCwgMHgyMCwgMHhlMCwgMHgwMCwgMHg1MCwgMHg5MCwgMHhlNSwgMHgxNCwgMHg0MCwgMHg5MCwgMHhlNSwKLTB4MDAsIDB4MzAsIDB4ODUsIDB4ZTUsIDB4MDQsIDB4YzAsIDB4ODUsIDB4ZTUsIDB4MDgsIDB4MTAsIDB4ODUsIDB4ZTUsCi0weDBjLCAweDIwLCAweDg1LCAweGU1LCAweDEwLCAweDEwLCAweDkwLCAweGU1LAotMHgxMCwgMHg1MCwgMHg4NSwgMHhlMiwgMHgwMSwgMHgwMCwgMHg1NSwgMHhlMSwgMHgwYywgMHg1MCwgMHg5MCwgMHg1NSwKLTB4MDQsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDQsIDB4MTAsIDB4OTAsIDB4ZTUsCi0weDAwLCAweDUwLCAweDgwLCAweGU1LCAweDAwLCAweDUwLCAweDgxLCAweGU1LCAweDAwLCAweDAwLCAweGEwLCAweGUzLAotMHgzMCwgMHg0MCwgMHhiZCwgMHhlOCwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgzMCwgMHg5MywgMHhlNSwKLTB4MDgsIDB4MjAsIDB4OTAsIDB4ZTUsIDB4MDEsIDB4MzEsIDB4ODMsIDB4ZTMsIDB4MDIsIDB4MzYsIDB4ODMsIDB4ZTMsCi0weDAzLCAweDAwLCAweDU1LCAweGUxLCAweDE0LCAweDMwLCAweDgwLCAweGU1LCAweGYyLCAweGZmLCAweGZmLCAweDFhLAotMHgwMSwgMHgwMCwgMHhhMCwgMHhlMywgMHhmNCwgMHhmZiwgMHhmZiwgMHhlYSwgMHgwMSwgMHgwNiwgMHgxYywgMHhlMywKLTB4ZjEsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4ZWMsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4MDIsIDB4YzYsIDB4Y2MsIDB4ZTMsCi0weDU0LCAweDIwLCAweDkxLCAweGU1LCAweGU0LCAweDMwLCAweDlmLCAweGU1LCAweDUwLCAweDEwLCAweDkxLCAweGU1LAotMHhkOSwgMHhmZiwgMHhmZiwgMHhlYSwgMHhmMCwgMHg0NywgMHgyZCwgMHhlOSwgMHgyMCwgMHhjMCwgMHg5ZCwgMHhlNSwKLTB4MGMsIDB4NjgsIDB4YTAsIDB4ZTEsIDB4MjYsIDB4NjgsIDB4YjAsIDB4ZTEsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MGEsCi0weDE4LCAweDQwLCAweGEwLCAweGUzLCAweGI4LCAweDUwLCAweDlmLCAweGU1LCAweDk0LCAweDAwLCAweDAwLCAweGUwLAotMHgwNSwgMHgwMCwgMHg4MCwgMHhlMCwgMHgwOCwgMHg0MCwgMHg5MCwgMHhlNSwgMHgwNCwgMHg4MCwgMHg5MCwgMHhlNSwKLTB4MDAsIDB4NzAsIDB4YTAsIDB4ZTMsIDB4MWYsIDB4YzAsIDB4YTAsIDB4ZTMsIDB4MDIsIDB4YzQsIDB4OGMsIDB4ZTMsCi0weDAwLCAweDUwLCAweDkwLCAweGU1LCAweDEwLCAweDkwLCAweDkwLCAweGU1LCAweDE0LCAweGEwLCAweDkwLCAweGU1LAotMHgwMCwgMHgzMCwgMHg4NSwgMHhlNSwgMHgwNCwgMHhjMCwgMHg4NSwgMHhlNSwgMHgwOCwgMHgxMCwgMHg4NSwgMHhlNSwKLTB4MGMsIDB4MjAsIDB4ODUsIDB4ZTUsIDB4MTAsIDB4NTAsIDB4ODUsIDB4ZTIsIDB4MDksIDB4MDAsIDB4NTUsIDB4ZTEsCi0weDBjLCAweDUwLCAweDkwLCAweDU1LCAweDBhLCAweDAwLCAweDU1LCAweGUxLCAweDE1LCAweDAwLCAweDAwLCAweDBhLAotMHgwMywgMHg3MCwgMHgxNywgMHhlMiwgMHgyMCwgMHgxMCwgMHg4MSwgMHhlMiwgMHgyMCwgMHgzMCwgMHg4MywgMHhlMiwKLTB4MGEsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NjAsIDB4OTYsIDB4ZTIsIDB4MDEsIDB4NzAsIDB4ODcsIDB4ZTIsCi0weDA5LCAweDAwLCAweDAwLCAweDBhLCAweDIwLCAweDYwLCAweDQ2LCAweGUyLCAweDIwLCAweDAwLCAweDU2LCAweGUzLAotMHhlYywgMHhmZiwgMHhmZiwgMHhjYSwgMHgwMCwgMHg3MCwgMHhhMCwgMHhlMywgMHgwMSwgMHhjMCwgMHg0NiwgMHhlMiwKLTB4MDIsIDB4YzQsIDB4OGMsIDB4ZTMsIDB4MDAsIDB4NjAsIDB4YTAsIDB4ZTMsIDB4ZTcsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDAwLCAweDUwLCAweDg4LCAweGU1LCAweGYyLCAweGZmLCAweGZmLCAweGVhLCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHg1MCwgMHg4MCwgMHhlNSwgMHgwMSwgMHgwMCwgMHhhMCwgMHhlMSwgMHhmMCwgMHg0NywgMHhiZCwgMHhlOCwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4YTAsIDB4OTQsIDB4ZTUsIDB4MGEsIDB4MDAsIDB4NTUsIDB4ZTEsCi0weDE0LCAweGEwLCAweDgwLCAweGU1LCAweGU1LCAweGZmLCAweGZmLCAweDFhLCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHhmNSwgMHhmZiwgMHhmZiwgMHhlYSwgMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4ODAsIDB4MjAsIDB4NDAsIDB4NjgsIDB4ODIsIDB4OWYsIDB4ZTUsIDB4MGIsIDB4OTIsIDB4YTAsIDB4ZTMsCi0weDY0LCAweGEyLCAweDlmLCAweGU1LCAweDU4LCAweGIwLCAweDlhLCAweGU1LCAweDBlLCAweGYwLCAweGEwLCAweGUxLAotMHg1NCwgMHhiMCwgMHg5YSwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzZiwgMHg0MCwgMHgyZCwgMHhlOSwKLTB4MDAsIDB4MDAsIDB4NGYsIDB4ZTEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MTIsIDB4MDAsIDB4NTAsIDB4ZTMsCi0weDU0LCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDBmLCAweGUxLCAweDgwLCAweDAwLCAweGMwLCAweGUzLAotMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgwNCwgMHg1MCwgMHhhMCwgMHhlMywgMHgwMCwgMHg0MCwgMHg5OSwgMHhlNSwKLTB4MDksIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDIsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4NTMsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDgwLCAweDAwLCAweDE0LCAweGUzLCAweDU5LCAweDAwLCAweDAwLCAweDFiLCAweDIwLCAweDAwLCAweDE0LCAweGUzLAotMHg1OSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMiwgMHgwNywgMHgxNCwgMHhlMywgMHg1OSwgMHgwMCwgMHgwMCwgMHgxYiwKLTB4MDEsIDB4MDYsIDB4MTQsIDB4ZTMsIDB4NTksIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDgsIDB4MDAsIDB4MTQsIDB4ZTMsCi0weDQ1LCAweDAwLCAweDAwLCAweDFiLCAweDAyLCAweDA1LCAweDE0LCAweGUzLCAweDRhLCAweDAwLCAweDAwLCAweDFiLAotMHgwMiwgMHgwOCwgMHgxNCwgMHhlMywgMHg0YiwgMHgwMCwgMHgwMCwgMHgxYiwgMHhlNSwgMHgwZSwgMHgxNCwgMHhlMywKLTB4MDcsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDQsIDB4MjAsIDB4OTgsIDB4ZTUsIDB4MGMsIDB4MTAsIDB4OTgsIDB4ZTUsCi0weDA0LCAweDMwLCAweDUyLCAweGUyLCAweDNjLCAweDMwLCAweGEwLCAweGIzLCAweDA0LCAweDMwLCAweDg4LCAweGU1LAotMHgwMiwgMHgwMCwgMHg5MSwgMHhlNywgMHgwZiwgMHhlMCwgMHhhMCwgMHhlMSwKLTB4MTAsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDEsIDB4NTAsIDB4NTUsIDB4ZTIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MGEsCi0weDAwLCAweDQwLCAweDk5LCAweGU1LCAweDBjLCAweDAwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweDE0LCAweGUxLAotMHgxYiwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwOCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgxNCwgMHhlMSwKLTB4MGIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4MGMsIDB4MTQsIDB4ZTMsIDB4OTgsIDB4MDEsIDB4OWYsIDB4MTUsCi0weDBmLCAweGUwLCAweGEwLCAweDExLCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAyLCAweDA0LCAweDE0LCAweGUzLAotMHg4YywgMHgwMSwgMHg5ZiwgMHgxNSwgMHgwZiwgMHhlMCwgMHhhMCwgMHgxMSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwKLTB4MDEsIDB4MDksIDB4MTQsIDB4ZTMsIDB4ODAsIDB4MDEsIDB4OWYsIDB4MTUsIDB4MGYsIDB4ZTAsIDB4YTAsIDB4MTEsCi0weDEwLCAweGZmLCAweDJmLCAweDExLCAweDA0LCAweDAwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweDE0LCAweGUxLAotMHgxNiwgMHgwMCwgMHgwMCwgMHgwYSwgMHg1NCwgMHhlMCwgMHg4ZiwgMHhlMiwgMHgwNCwgMHgwMCwgMHgxNCwgMHhlMywKLTB4NDAsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDIsIDB4MGEsIDB4MTQsIDB4ZTMsCi0weDQ0LCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAyLCAweDA5LCAweDE0LCAweGUzLAotMHg0OCwgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMSwgMHgwMiwgMHgxNCwgMHhlMywKLTB4NGMsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDEsIDB4MDQsIDB4MTQsIDB4ZTMsCi0weDUwLCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAxLCAweDBhLCAweDE0LCAweGUzLAotMHgyMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMiwgMHgwMCwgMHgxNCwgMHhlMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgxYiwKLTB4MTAsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWIsCi0weDAwLCAweDQwLCAweDk5LCAweGU1LCAweDA0LCAweDUwLCAweGEwLCAweGUzLCAweDAwLCAweDQwLCAweDk0LCAweGUyLAotMHgxYiwgMHhmZiwgMHgyZiwgMHgxMSwgMHgzZiwgMHg0MCwgMHhiZCwgMHhlOCwgMHgwNCwgMHhmMCwgMHg1ZSwgMHhlMiwKLTB4YzAsIDB4MDAsIDB4ODAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4NjEsIDB4ZTEsIDB4ZmEsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDE4LCAweDAwLCAweDlhLCAweGU1LCAweDFjLCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLAotMHg1NCwgMHhiMCwgMHg5YSwgMHhlNSwgMHgxYywgMHgxMCwgMHg5YSwgMHhlNSwgMHgxNCwgMHgwMCwgMHg5YSwgMHhlNSwKLTB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MjAsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsCi0weDExLCAweGZmLCAweDJmLCAweGUxLCAweDI0LCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLAotMHgyOCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgyYywgMHgxMCwgMHg5YSwgMHhlNSwKLTB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzAsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsCi0weDM0LCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAotMHgzOCwgMHhlMCwgMHg5YSwgMHhlNSwgMHgzYywgMHgxMCwgMHg5YSwgMHhlNSwgMHgxOCwgMHgwMCwgMHg5YSwgMHhlNSwKLTB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzgsIDB4ZTAsIDB4OWEsIDB4ZTUsIDB4M2MsIDB4MTAsIDB4OWEsIDB4ZTUsCi0weDE0LCAweDAwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLCAweDY0LCAweDIwLCAweDlmLCAweGU1LAotMHgwMCwgMHgzMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgzMCwgMHg1MywgMHhlMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHhiYSwKLTB4MDAsIDB4MzAsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4MDAsIDB4OTIsIDB4ZTUsIDB4MDgsIDB4MzAsIDB4OTIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDkxLCAweGUyLCAweDAzLCAweDAwLCAweDAwLCAweDBhLCAweDAzLCAweDEwLCAweDgwLCAweGU3LAotMHgwNCwgMHgzMCwgMHg1MywgMHhlMiwgMHgzYywgMHgzMCwgMHhhMCwgMHhiMywgMHgwOCwgMHgzMCwgMHg4MiwgMHhlNSwKLTB4MDEsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4M2MsIDB4MTAsIDB4OWYsIDB4ZTUsCi0weDAwLCAweDAwLCAweDkxLCAweGU1LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDAwLCAweDAwLCAweDgxLCAweGU1LAotMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywgMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwgMHgxMCwgMHgwMCwgMHg5ZiwgMHhlNSwKLTB4MDgsIDB4MTAsIDB4OTAsIDB4ZTUsIDB4MDQsIDB4MTAsIDB4NTEsIDB4ZTIsIDB4M2MsIDB4MTAsIDB4YTAsIDB4YjMsCi0weDA4LCAweDEwLCAweDgwLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweGU0LCAweDJkLCAweDAwLCAweDgwLAotMHhjYywgMHgwNCwgMHgwMCwgMHg4MCwgMHg3MSwgMHgyYiwgMHhmZiwgMHhmZiwgMHhkMSwgMHgzZCwgMHhmZiwgMHhmZiwKLTB4YzksIDB4MmIsIDB4ZmYsIDB4ZmYsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4YzksIDB4MWMsIDB4ODksIDB4MDgsCi0weDg5LCAweDAwLCAweDAxLCAweDIzLCAweDg1LCAweDRhLCAweDViLCAweDA3LCAweDE4LCAweDQzLCAweDEzLCAweDY4LAotMHg1YiwgMHgxOCwgMHgxMywgMHg2MCwgMHgwMCwgMHgxZiwgMHg4MSwgMHhhMywgMHg1YiwgMHgxYSwgMHgxOCwgMHg0NywKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweGU0LCAweDJkLCAweDAwLCAweDgwLAotMHg5OCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHg5OCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMCwKLTB4OTQsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDMsIDB4MDAsIDB4NTAsIDB4ZTEsCi0weDAzLCAweDAwLCAweDAwLCAweDFhLCAweDA0LCAweDEwLCAweDgxLCAweGUyLCAweDA0LCAweDIwLCAweDUyLCAweGUyLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwgMHg3OCwgMHgwMCwgMHg5ZiwgMHhlNSwKLTB4MDAsIDB4MjAsIDB4ODAsIDB4ZTUsIDB4NzQsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4NzQsIDB4MTAsIDB4OWYsIDB4ZTUsCi0weDAxLCAweDIwLCAweDQwLCAweGUwLCAweDYwLCAweDMwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweDkxLCAweGU1LAotMHgwMywgMHgwMCwgMHg1MCwgMHhlMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgxYSwgMHgwNCwgMHgxMCwgMHg4MSwgMHhlMiwKLTB4MDQsIDB4MjAsIDB4NTIsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZWEsCi0weDUwLCAweDAwLCAweDlmLCAweGU1LCAweDAwLCAweDIwLCAweDgwLCAweGU1LCAweDRjLCAweDAwLCAweDlmLCAweGU1LAotMHg0YywgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMCwgMHgyYywgMHgzMCwgMHg5ZiwgMHhlNSwKLTB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDMsIDB4MDAsIDB4NTAsIDB4ZTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MWEsCi0weDA0LCAweDEwLCAweDgxLCAweGUyLCAweDA0LCAweDIwLCAweDUyLCAweGUyLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAotMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwgMHgyOCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgyMCwgMHg4MCwgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4N2MsIDB4MzQsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzAsIDB4MDAsIDB4ODAsCi0weGFkLCAweGRlLCAweGFkLCAweGRlLCAweGMwLCAweDA0LCAweDAwLCAweDgwLCAweGZjLCAweDM3LCAweDAwLCAweDgwLAotMHg4MCwgMHgzNCwgMHgwMCwgMHg4MCwgMHhjNCwgMHgwNCwgMHgwMCwgMHg4MCwgMHhmYywgMHgzZiwgMHgwMCwgMHg4MCwKLTB4NDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4YzgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDcxLCAweGVhLCAweGZmLCAweGVhLCAweDc4LCAweDQ3LCAweDAwLCAweDAwLCAweDM5LCAweGZlLCAweGZmLCAweGVhLAotMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2MywgMHhmZSwgMHhmZiwgMHhlYSwgMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MWIsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ZWEsIDB4ZmYsIDB4ZWEsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAotMHgyOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4MGIsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDBiLCAweGZmLCAweGZmLCAweDAzLCAweGZmLCAweDA2LCAweDU0LAotMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHgwNCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4YTEsIDB4MDUsIDB4ZmYsIDB4ZmYsIDB4MDQsIDB4ZmYsIDB4MDcsIDB4NTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCi0weGI1LCAweDA0LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweDA1LCAweGZmLCAweGZmLAotMHgwNSwgMHhmZiwgMHgwNSwgMHg1NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwNCwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDUsIDB4ZmYsIDB4ZmYsIDB4MDEsIDB4ZmYsIDB4MDQsIDB4MDAsCi0weDAzLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE4LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHg2MSwgMHgwZSwgMHhmZiwgMHhmZiwgMHgwMiwgMHhmZiwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4YTEsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDIsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweDAxLCAweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwZCwgMHhmZiwgMHhmZiwgMHgwNiwgMHgwMCwgMHhmZiwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4NTAsIDB4ZmYsIDB4ZmYsIDB4ODEsIDB4NTAsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDQ4LCAweDA1LCAweDAwLCAweDgwLCAweDExLCAweDc1LCAweDIxLCAweDQwLCAweDFiLCAweDc1LCAweDIxLCAweDQwLAotMHgzMSwgMHg3NSwgMHgyMSwgMHg0MCwgMHg0OSwgMHg3NSwgMHgyMSwgMHg0MCwKLTB4NTUsIDB4NzUsIDB4MjEsIDB4NDAsIDB4NjMsIDB4NzUsIDB4MjEsIDB4NDAsIDB4N2QsIDB4NzUsIDB4MjEsIDB4NDAsCi0weGE5LCAweDc1LCAweDIxLCAweDQwLCAweDZkLCAweDc2LCAweDIxLCAweDQwLCAweGM1LCAweDc2LCAweDIxLCAweDQwLAotMHhkMywgMHg3NiwgMHgyMSwgMHg0MCwgMHhkZCwgMHg3NiwgMHgyMSwgMHg0MCwgMHhlNywgMHg3NiwgMHgyMSwgMHg0MCwKLTB4OTksIDB4NzcsIDB4MjEsIDB4NDAsIDB4YTcsIDB4NzcsIDB4MjEsIDB4NDAsIDB4YjUsIDB4NzcsIDB4MjEsIDB4NDAsCi0weDYxLCAweDc4LCAweDIxLCAweDQwLCAweDVmLCAweDdjLCAweDIxLCAweDQwLCAweGU5LCAweDdjLCAweDIxLCAweDQwLAotMHg4OSwgMHg3ZCwgMHgyMSwgMHg0MCwgMHhiZCwgMHg3ZSwgMHgyMSwgMHg0MCwgMHhjOSwgMHg3ZSwgMHgyMSwgMHg0MCwKLTB4MjksIDB4N2YsIDB4MjEsIDB4NDAsIDB4OGQsIDB4N2YsIDB4MjEsIDB4NDAsIDB4YjksIDB4N2YsIDB4MjEsIDB4NDAsCi0weGRkLCAweDdmLCAweDIxLCAweDQwLCAweDFkLCAweDgwLCAweDIxLCAweDQwLCAweDQ1LCAweDgwLCAweDIxLCAweDQwLAotMHg4ZCwgMHg4MCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg4MCwgMHgyMSwgMHg0MCwgMHhjNSwgMHg4MCwgMHgyMSwgMHg0MCwKLTB4ZDUsIDB4ODAsIDB4MjEsIDB4NDAsIDB4MWQsIDB4ODEsIDB4MjEsIDB4NDAsIDB4NWIsIDB4ODEsIDB4MjEsIDB4NDAsCi0weGIxLCAweDgxLCAweDIxLCAweDQwLCAweDExLCAweDgyLCAweDIxLCAweDQwLCAweDFiLCAweDgyLCAweDIxLCAweDQwLAotMHgxZiwgMHg4MiwgMHgyMSwgMHg0MCwgMHg4ZCwgMHg4MiwgMHgyMSwgMHg0MCwgMHhkOSwgMHg4MiwgMHgyMSwgMHg0MCwKLTB4MzEsIDB4ODMsIDB4MjEsIDB4NDAsIDB4NmQsIDB4ODMsIDB4MjEsIDB4NDAsIDB4ZDEsIDB4ODMsIDB4MjEsIDB4NDAsCi0weDA5LCAweDg0LCAweDIxLCAweDQwLCAweDE5LCAweDg0LCAweDIxLCAweDQwLCAweDUxLCAweDg0LCAweDIxLCAweDQwLAotMHg2MSwgMHg4NCwgMHgyMSwgMHg0MCwgMHg3NSwgMHg4NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg4NCwgMHgyMSwgMHg0MCwKLTB4YTcsIDB4ODQsIDB4MjEsIDB4NDAsIDB4YjEsIDB4ODQsIDB4MjEsIDB4NDAsIDB4MTUsIDB4ODUsIDB4MjEsIDB4NDAsCi0weDQ1LCAweDg1LCAweDIxLCAweDQwLCAweDUxLCAweDg1LCAweDIxLCAweDQwLCAweGM1LCAweDg1LCAweDIxLCAweDQwLAotMHhjZiwgMHg4NSwgMHgyMSwgMHg0MCwgMHhkOSwgMHg4NSwgMHgyMSwgMHg0MCwgMHhlMywgMHg4NSwgMHgyMSwgMHg0MCwKLTB4ZWQsIDB4ODUsIDB4MjEsIDB4NDAsIDB4ZjcsIDB4ODUsIDB4MjEsIDB4NDAsIDB4MDEsIDB4ODYsIDB4MjEsIDB4NDAsCi0weDBiLCAweDg2LCAweDIxLCAweDQwLCAweDE1LCAweDg2LCAweDIxLCAweDQwLCAweDAxLCAweDg5LCAweDIxLCAweDQwLAotMHgxZiwgMHg4NiwgMHgyMSwgMHg0MCwgMHgyOSwgMHg4NiwgMHgyMSwgMHg0MCwgMHgzMywgMHg4NiwgMHgyMSwgMHg0MCwKLTB4M2QsIDB4ODYsIDB4MjEsIDB4NDAsIDB4NjUsIDB4ODYsIDB4MjEsIDB4NDAsIDB4NmYsIDB4ODYsIDB4MjEsIDB4NDAsCi0weGQxLCAweDg2LCAweDIxLCAweDQwLCAweGRiLCAweDg2LCAweDIxLCAweDQwLCAweGU1LCAweDg2LCAweDIxLCAweDQwLAotMHhlZiwgMHg4NiwgMHgyMSwgMHg0MCwgMHhmOSwgMHg4NiwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4MDMsIDB4ODcsIDB4MjEsIDB4NDAsIDB4NjksIDB4ODcsIDB4MjEsIDB4NDAsIDB4YjUsIDB4ODcsIDB4MjEsIDB4NDAsCi0weGY5LCAweDg3LCAweDIxLCAweDQwLCAweDA5LCAweDg4LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAotMHg1NSwgMHg4OCwgMHgyMSwgMHg0MCwgMHg1OSwgMHg4OCwgMHgyMSwgMHg0MCwgMHg1ZCwgMHg4OCwgMHgyMSwgMHg0MCwKLTB4YjUsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZGQsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZTksIDB4ODgsIDB4MjEsIDB4NDAsCi0weGVkLCAweDg4LCAweDIxLCAweDQwLCAweGYxLCAweDg4LCAweDIxLCAweDQwLCAweGY1LCAweDg4LCAweDIxLCAweDQwLAotMHhmOSwgMHg4OCwgMHgyMSwgMHg0MCwgMHhmZCwgMHg4OCwgMHgyMSwgMHg0MCwgMHgyZCwgMHg4NSwgMHgyMSwgMHg0MCwKLTB4ODksIDB4ODUsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDBkLCAweDg5LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAweGUxLCAweDc0LCAweDIxLCAweDQwLAotMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKLTB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsCi0weDZiLCAweDc4LCAweDIxLCAweDQwLCAweGY1LCAweDdiLCAweDIxLCAweDQwLCAweDMxLCAweDdjLCAweDIxLCAweDQwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NTgsIDB4MDEsIDB4MTgsIDB4NDAsCi0weDI0LCAweGEzLCAweDIwLCAweDQwLCAweDI0LCAweGE3LCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHgwMSwgMHgxOCwgMHg0MCwgMHg2OCwgMHgwMSwgMHgxOCwgMHg0MCwKLTB4MjQsIDB4ODMsIDB4MjAsIDB4NDAsIDB4MjQsIDB4YTMsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDdjLCAweDAxLCAweDE4LCAweDQwLCAweDc4LCAweDAxLCAweDE4LCAweDQwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MTgsIDB4NDAsCi0weDg4LCAweDAxLCAweDE4LCAweDQwLCAweDI0LCAweGE5LCAweDIwLCAweDQwLCAweDI0LCAweGFiLCAweDIwLCAweDQwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDgsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MTIsIDB4MDAsCi0weDFjLCAweDAwLCAweDEyLCAweDAwLCAweDI0LCAweGE4LCAweDIwLCAweDQwLCAweGE0LCAweGE4LCAweDIwLCAweDQwLAotMHhhNCwgMHhhOCwgMHgyMCwgMHg0MCwgMHgyNCwgMHhhOSwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4ZDEsIDB4YTgsIDB4MjEsIDB4NDAsIDB4MmQsIDB4YWEsIDB4MjEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDg5LCAweDcwLCAweDIxLCAweDQwLCAweGM5LCAweGExLCAweDIxLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4NTcsIDB4ODksIDB4MjEsIDB4NDAsIDB4ZDEsIDB4YTgsIDB4MjEsIDB4NDAsIDB4YzUsIDB4MmYsIDB4ZmYsIDB4ZmYsCi0weDA1LCAweDIxLCAweGZmLCAweGZmLCAweGVmLCAweDIwLCAweGZmLCAweGZmLCAweDU5LCAweGE3LCAweDIxLCAweDQwLAotMHgzNCwgMHgyZSwgMHgwMCwgMHg4MCwgMHg0OCwgMHgyZSwgMHgwMCwgMHg4MCwgMHg1YywgMHgyZSwgMHgwMCwgMHg4MCwKLTB4MzAsIDB4MzMsIDB4M2EsIDB4MzEsIDB4MzEsIDB4M2EsIDB4MzEsIDB4MzEsIDB4MDAsIDB4MzAsIDB4MzcsIDB4MmYsCi0weDMyLCAweDMzLCAweDJmLCAweDMwLCAweDMxLCAweDAwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMxLCAweDM1LAotMHgzNiwgMHgzOSwgMHgwMCwgMHg0MywgMHg2ZiwgMHg3MCwgMHg3OSwgMHg3MiwgMHg2OSwgMHg2NywgMHg2OCwgMHg3NCwKLTB4MjAsIDB4MjgsIDB4NjMsIDB4MjksIDB4MjAsIDB4MzIsIDB4MzAsIDB4MzAsIDB4MzEsIDB4MjAsIDB4MzMsIDB4NDMsCi0weDZmLCAweDZkLCAweDIwLCAweDQzLCAweDZmLCAweDcyLCAweDcwLCAweDZmLCAweDcyLCAweDYxLCAweDc0LCAweDY5LAotMHg2ZiwgMHg2ZSwgMHgwYSwgMHgwMCwgMHgwOCwgMHgxMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4NTMsIDB4ZmYsIDB4ZmYsCi0weDI3LCAweGYwLCAweDdkLCAweGZkLCAweDAwLCAweDAxLCAweDAwLCAweDAyLCAweGRhLCAweDBlLCAweDgyLCAweDAwLAotMHgwMSwgMHg0MCwgMHg2NCwgMHgwNCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwgMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwKLTB4NjksIDB4M2UsIDB4ZmYsIDB4ZmYsIDB4YzksIDB4NGYsIDB4ZmYsIDB4ZmYsIDB4ZDUsIDB4MjQsIDB4ZmYsIDB4ZmYsCi0weGM5LCAweDNiLCAweGZmLCAweGZmLCAweDI5LCAweDNjLCAweGZmLCAweGZmLCAweDE5LCAweDFhLCAweGZmLCAweGZmLAotMHg2NSwgMHgxMSwgMHhmZiwgMHhmZiwgMHhjYywgMHg1MywgMHhmZiwgMHhmZiwgMHgyMSwgMHg0MCwgMHhmZiwgMHhmZiwKLTB4ODksIDB4NzAsIDB4MjEsIDB4NDAsIDB4NDksIDB4NzIsIDB4MjEsIDB4NDAsIDB4ZDksIDB4M2YsIDB4ZmYsIDB4ZmYsCi0weDIxLCAweDlhLCAweDIxLCAweDQwLCAweDg1LCAweDI0LCAweGZmLCAweGZmLCAweDY0LCAweDUzLCAweGZmLCAweGZmLAotMHg4YywgMHg1MywgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4ODAsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDIwLCAweDQwLCAweGIwLCAweDUwLCAweDAwLCAweDAwLCAweDdiLCAweDBlLCAweDAwLCAweDAwLAotMHgwMCwgMHg2ZSwgMHgyMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4ZWQsIDB4ODksIDB4MjEsIDB4NDAsIDB4OGIsIDB4ODksIDB4MjEsIDB4NDAsIDB4YTUsIDB4OGMsIDB4MjEsIDB4NDAsCi0weDA1LCAweDhkLCAweDIxLCAweDQwLCAweGNkLCAweDhkLCAweDIxLCAweDQwLCAweDhiLCAweDhiLCAweDIxLCAweDQwLAotMHhhOSwgMHg4ZSwgMHgyMSwgMHg0MCwgMHgxNSwgMHg4ZiwgMHgyMSwgMHg0MCwgMHg2OSwgMHg4YiwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4NTksIDB4YmQsIDB4MjEsIDB4NDAsIDB4YzEsIDB4YmQsIDB4MjEsIDB4NDAsIDB4MmQsIDB4YmUsIDB4MjEsIDB4NDAsCi0weDAwLCAweDIwLCAweDBhLCAweDRhLCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAweGQxLCAweDE4LCAweDJkLCAweDIzLAotMHg5YiwgMHgwMSwgMHhkMywgMHgxOCwgMHg4OCwgMHg2MSwgMHhkOCwgMHg2MCwgMHhkOCwgMHg2MywgMHg4MCwgMHgzMiwKLTB4YzgsIDB4NjAsIDB4MDgsIDB4NjEsIDB4NDgsIDB4NjEsIDB4ZDAsIDB4NjIsIDB4MDMsIDB4NDgsIDB4YzAsIDB4NDYsCi0weDQ4LCAweDYwLCAweDg4LCAweDYwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhmZSwgMHgwMywgMHgwMCwgMHgwMCwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwYywgMHgxYywgMHgwNSwgMHgxYywKLTB4MDAsIDB4MjMsIDB4MDAsIDB4OTMsIDB4ZmYsIDB4ZjcsIDB4ZGUsIDB4ZmYsIDB4NjgsIDB4NDksIDB4MGIsIDB4MjMsCi0weDFiLCAweDAyLCAweGNmLCAweDE4LCAweDc4LCAweDY4LCAweDI4LCAweDQwLAotMHgwMCwgMHgyMiwgMHhmOCwgMHg2MCwgMHgzYSwgMHg2MSwgMHhiYSwgMHg2OCwgMHgyMiwgMHg0MCwgMHg3YSwgMHg2MSwKLTB4MGMsIDB4MWMsIDB4NDEsIDB4MDksIDB4MDMsIDB4ZDIsIDB4NTEsIDB4MDksIDB4MDEsIDB4ZDIsIDB4ODAsIDB4MGEsCi0weDAyLCAweGQzLCAweDYwLCAweDQ4LCAweDAwLCAweGYwLCAweGMyLCAweGY4LCAweDAxLCAweDIwLCAweGY5LCAweDY4LAotMHg0OSwgMHgwOSwgMHgwMywgMHhkMiwgMHg3OSwgMHg2OSwgMHg0OSwgMHgwOSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMCwKLTB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDMsIDB4ZjAsIDB4ZDQsIDB4ZmEsIDB4ZjgsIDB4NjgsIDB4MDAsIDB4MjgsCi0weDcwLCAweGQwLCAweDAwLCAweDIzLCAweDAyLCAweDkzLCAweDAxLCAweDkzLCAweDU0LCAweDRhLCAweDAxLCAweDIzLAotMHgxOCwgMHg0MywgMHhmOCwgMHg2MCwgMHgwMCwgMHgyMCwgMHhkNSwgMHgxZCwgMHg3OSwgMHgzNSwgMHgwMywgMHg5NSwKLTB4MDEsIDB4MjQsIDB4MDAsIDB4MjEsIDB4NGYsIDB4NGQsIDB4ZmEsIDB4NjgsIDB4MjIsIDB4NDAsIDB4MzksIDB4ZDAsCi0weDhhLCAweDAwLCAweDUyLCAweDE4LCAweDkyLCAweDAwLCAweDRlLCAweDRiLCAweDliLCAweDVjLCAweDFlLCAweDFjLAotMHg4MywgMHg0MiwgMHgwNCwgMHhkMCwgMHg0YiwgMHg0YiwgMHhkMywgMHgxOCwgMHg1YiwgMHg3OCwgMHg4MywgMHg0MiwKLTB4MmMsIDB4ZDEsIDB4NDksIDB4NGIsIDB4ZDIsIDB4MTgsIDB4ZDMsIDB4NzgsIDB4MDMsIDB4OWQsIDB4ZWQsIDB4NmEsCi0weGFiLCAweDQyLCAweDAyLCAweGQ5LCAweDAzLCAweDlkLCAweGMwLCAweDQ2LCAweGViLCAweDYyLCAweDUzLCAweDY4LAotMHg1YiwgMHgwOCwgMHgwMSwgMHhkMywgMHgwMSwgMHgyMywgMHgwMCwgMHg5MywgMHg4NiwgMHg0MiwgMHgwYSwgMHhkMSwKLTB4OTUsIDB4NjgsIDB4MDIsIDB4OWIsIDB4NWUsIDB4MWMsIDB4MDIsIDB4OTYsIDB4OWIsIDB4MDAsIDB4M2MsIDB4NGUsCi0weDllLCAweDE5LCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAweGYzLCAweDE4LCAweDlkLCAweDYxLCAweDUzLCAweDc4LAotMHg4MywgMHg0MiwgMHgwZCwgMHhkMSwgMHhkMiwgMHg2OCwgMHgwMSwgMHg5YiwgMHg1ZCwgMHgxYywgMHgwMSwgMHg5NSwKLTB4OWIsIDB4MDAsIDB4MzUsIDB4NGQsIDB4NWQsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZWIsIDB4MTgsCi0weGRhLCAweDYwLCAweDNhLCAweDY5LCAweDAxLCAweDMyLCAweDNhLCAweDYxLCAweDY0LCAweDAwLCAweDAxLCAweDMxLAotMHgwYiwgMHgyOSwgMHhiZCwgMHhkMywgMHgwMSwgMHgzMCwgMHgwOSwgMHgyOCwgMHhiOCwgMHhkMywgMHgwMCwgMHgyMCwKLTB4MDIsIDB4OWIsIDB4OTksIDB4MDAsIDB4MmIsIDB4NGEsIDB4ODksIDB4MTgsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsCi0weGM5LCAweDE4LCAweDg4LCAweDYxLCAweDAxLCAweDliLCAweDk5LCAweDAwLCAweDg5LCAweDE4LCAweDJkLCAweDIzLAotMHg5YiwgMHgwMSwgMHhjOSwgMHgxOCwgMHhjOCwgMHg2MCwgMHgwMCwgMHg5YiwgMHgwMCwgMHgyYiwgMHgwYywgMHhkMSwKLTB4ODEsIDB4MDAsIDB4ODksIDB4MTgsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4YzksIDB4MTgsIDB4Y2IsIDB4NjksCi0weGMwLCAweDQ2LCAweDhiLCAweDYxLCAweDAxLCAweDMwLCAweDBiLCAweDI4LCAweGY0LCAweGQzLCAweDA4LCAweGUwLAotMHgwNywgMHhlMCwgMHgwMywgMHg5ZCwgMHhlOCwgMHg2YSwgMHgzMCwgMHgyOCwgMHgwMywgMHhkMiwgMHgzMCwgMHgyMCwKLTB4MDMsIDB4OWQsIDB4YzAsIDB4NDYsIDB4ZTgsIDB4NjIsIDB4MTksIDB4NGEsIDB4NzgsIDB4NjksIDB4MDAsIDB4MjgsCi0weDJhLCAweGQwLCAweDAwLCAweDIxLCAweDAxLCAweDIzLCAweDE4LCAweDQzLCAweDc4LCAweDYxLCAweDAwLCAweDIwLAotMHgwMSwgMHgyNCwgMHgwMCwgMHgyMiwgMHgxMywgMHg0ZSwgMHg3YiwgMHg2OSwgMHgyMywgMHg0MCwgMHgxMCwgMHhkMCwKLTB4OTMsIDB4MDAsIDB4OWIsIDB4MTgsIDB4OWIsIDB4MDAsIDB4MTIsIDB4NGQsIDB4NWIsIDB4MTksIDB4OWQsIDB4NzgsCi0weDg1LCAweDQyLCAweDA4LCAweGQxLCAweDFkLCAweDY5LCAweDBiLCAweDFjLCAweDliLCAweDAwLCAweDllLCAweDE5LAotMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhmMywgMHgxOCwgMHhkZCwgMHg2MywgMHgwMSwgMHgzMSwgMHg2NCwgMHgwMCwKLTB4MDEsIDB4MzIsIDB4MGIsIDB4MmEsIDB4ZTYsIDB4ZDMsIDB4MDEsIDB4MzAsIDB4MDksIDB4MjgsIDB4ZTEsIDB4ZDMsCi0weDAwLCAweDIwLCAweDg5LCAweDAwLCAweDA0LCAweDRhLCAweDg5LCAweDE4LCAweDJkLCAweDIzLCAweDliLCAweDAxLAotMHhjOSwgMHgxOCwgMHhjOCwgMHg2MywgMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MzAsIDB4NTMsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsCi0weDAwLCAweDQ3LCAweDA4LCAweDQ3LCAweDEwLCAweDQ3LCAweDE4LCAweDQ3LCAweDc4LCAweDQ3LCAweGMwLCAweDQ2LAotMHgxOCwgMHhjMCwgMHg5ZiwgMHhlNSwgMHgxYywgMHhmZiwgMHgyZiwgMHhlMSwgMHg3OCwgMHg0NywgMHhjMCwgMHg0NiwKLTB4MTAsIDB4YzAsIDB4OWYsIDB4ZTUsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4NzgsIDB4NDcsIDB4YzAsIDB4NDYsCi0weDA4LCAweGMwLCAweDlmLCAweGU1LCAweDFjLCAweGZmLCAweDJmLCAweGUxLCAweDM4LCAweDUyLCAweGZmLCAweGZmLAotMHg4OCwgMHg1MSwgMHhmZiwgMHhmZiwgMHhkNSwgMHhiMCwgMHgyMSwgMHg0MCwgMHhmMCwgMHhiNSwgMHgwNCwgMHgyMCwKLTB4MWEsIDB4NDksIDB4MDEsIDB4MjUsIDB4MDgsIDB4NjAsIDB4MWEsIDB4NGYsIDB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsCi0weGY4LCAweDE4LCAweDA1LCAweDczLCAweDE4LCAweDQ4LCAweDQxLCAweDZiLCAweDJjLCAweDA1LCAweDAwLCAweDIwLAotMHg3YSwgMHg2ZSwgMHgxNywgMHg0YiwgMHg4YSwgMHg0MiwgMHgxZCwgMHhkMCwKLTB4MTksIDB4N2IsIDB4MDAsIDB4MjksIDB4MTcsIDB4ZDEsIDB4ZDksIDB4MWQsIDB4ZmYsIDB4MzEsIDB4M2EsIDB4MzEsCi0weDQ5LCAweDc4LCAweDFlLCAweDFjLCAweDAwLCAweDI5LCAweDEwLCAweGQxLCAweGIwLCAweDYwLCAweDEwLCAweDIwLAotMHg3MCwgMHg2MCwgMHgxMCwgMHg0YSwgMHgxMCwgMHg0OSwgMHhmZiwgMHhmNywgMHhjMywgMHhmZiwgMHgwMCwgMHgyOCwKLTB4MDcsIDB4ZDAsIDB4MzUsIDB4NzMsIDB4MDQsIDB4MjMsIDB4YjgsIDB4NjksIDB4MTgsIDB4NDMsIDB4YjgsIDB4NjEsCi0weDIwLCAweDYxLCAweDAwLCAweGYwLCAweDE3LCAweGY4LCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgxOCwgMHg3MywgMHgwNCwgMHgyMywgMHhiOCwgMHg2OSwgMHg5OCwgMHg0MywgMHhiOCwgMHg2MSwgMHgyMCwgMHg2MSwKLTB4ZjUsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAxLCAweDE4LCAweDQwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLCAweDIwLCAweDU1LCAweGZmLCAweGZmLAotMHg3ZCwgMHg3MSwgMHgyMSwgMHg0MCwgMHhmOCwgMHhiNSwgMHgxNSwgMHg0ZiwgMHgzOSwgMHg2YywgMHgxNSwgMHg0OCwKLTB4NDAsIDB4NmUsIDB4MGMsIDB4MWEsIDB4MTQsIDB4NGUsIDB4NzEsIDB4NjgsIDB4MTQsIDB4NGQsIDB4YTEsIDB4NDIsCi0weDA2LCAweGQ4LCAweDE0LCAweDRhLCAweDBhLCAweDQzLCAweDAwLCAweDkyLCAweGI5LCAweDZiLCAweDA5LCAweDE4LAotMHhmYSwgMHg2YiwgMHgxMSwgMHhlMCwgMHgxMSwgMHgyMiwgMHg1MiwgMHgwNSwgMHgyMiwgMHg0MywgMHgwMCwgMHg5MiwKLTB4YjksIDB4NmIsIDB4MDksIDB4MTgsIDB4MDAsIDB4MjAsIDB4ZmEsIDB4NmIsIDB4MmIsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDhkLCAweGZmLCAweDcwLCAweDY4LCAweDAwLCAweDFiLCAweDBhLCAweDRhLCAweDAyLCAweDQzLCAweDAwLCAweDkyLAotMHhiOSwgMHg2YiwgMHhmYSwgMHg2YiwgMHgwMCwgMHgyMCwgMHgyYiwgMHgxYywgMHhmZiwgMHhmNywgMHg4MiwgMHhmZiwKLTB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLCAweDQ0LCAweDgwLCAweDIwLCAweDQwLAotMHgwMCwgMHgwMCwgMHgzNywgMHgwMiwgMHhmMCwgMHhiNSwgMHgyYiwgMHg0ZiwgMHhiOCwgMHg2OCwgMHg3OSwgMHg2OCwKLTB4YzAsIDB4MTksIDB4MjAsIDB4MzAsIDB4MjksIDB4NGEsIDB4ZmYsIDB4ZjcsIDB4NjMsIDB4ZmYsIDB4MDEsIDB4MjAsCi0weGMwLCAweDAyLCAweDI4LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGI5LCAweDY4LCAweDM4LCAweDFjLAotMHgyNiwgMHg0ZCwgMHgwMCwgMHgyNCwgMHgyNiwgMHg0ZSwgMHhlZiwgMHgxZCwgMHg3OSwgMHgzNywgMHgwMCwgMHgyOSwKLTB4MzEsIDB4ZDEsIDB4MzEsIDB4NjgsIDB4MGEsIDB4NzgsIDB4MTIsIDB4MGEsIDB4MDMsIDB4ZDIsIDB4MDQsIDB4NzMsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDQ5LCAweDc4LCAweDAwLCAweDI5LCAweDBjLCAweGQxLAotMHgwNSwgMHgxYywgMHg0MCwgMHg2OCwgMHgwMCwgMHhmMCwgMHgzZSwgMHhmOSwgMHgzMCwgMHg2OCwgMHgwMCwgMHhmMCwKLTB4NjcsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MjYsIDB4ZDEsIDB4MmMsIDB4NzMsIDB4ZmYsIDB4ZjcsIDB4NTgsIDB4ZmYsCi0weDIyLCAweGUwLCAweDA5LCAweDAxLCAweDA3LCAweDFjLCAweDQxLCAweDYwLCAweDA4LCAweDFjLCAweDE3LCAweDRhLAotMHgxNywgMHg0OSwgMHhmZiwgMHhmNywgMHgzNSwgMHhmZiwgMHgwMCwgMHgyOCwgMHgwNywgMHhkMSwgMHgzYywgMHg3MywKLTB4MDQsIDB4MjMsIDB4YTgsIDB4NjksIDB4OTgsIDB4NDMsIDB4OTksIDB4MDQsIDB4YTgsIDB4NjEsIDB4MDgsIDB4NjEsCi0weGRhLCAweGU3LCAweDEwLCAweDIwLCAweDAwLCAweGYwLCAweDIwLCAweGY5LCAweDEwLCAweDIwLCAweGI4LCAweDYwLAotMHhmZiwgMHhmNywgMHg4MiwgMHhmZiwgMHhkMiwgMHhlNywgMHgwNSwgMHgxYywgMHg0MCwgMHg2OCwgMHgwMCwgMHhmMCwKLTB4MTcsIDB4ZjksIDB4MzAsIDB4NjgsIDB4MDAsIDB4ZjAsIDB4NDAsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4ZDAsCi0weDAyLCAweDIzLCAweGY4LCAweDZiLCAweDE4LCAweDQzLCAweGY4LCAweDYzLCAweGM0LCAweGU3LCAweDAwLCAweDAwLAotMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHhhNSwgMHg1NSwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjAsIDB4NTUsIDB4ZmYsIDB4ZmYsCi0weDdkLCAweDcxLCAweDIxLCAweDQwLCAweDkwLCAweGI1LCAweDAxLCAweDIwLCAweDQwLCAweDAzLCAweDEwLCAweDQ5LAotMHgwMCwgMHgyNywgMHgwOCwgMHg2MCwgMHgwZiwgMHg0YywgMHhlMCwgMHgxZCwgMHhmZiwgMHgzMCwgMHgzYSwgMHgzMCwKLTB4NDcsIDB4NzAsIDB4ZTAsIDB4NjksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NjksIDB4MDAsIDB4ZjAsCi0weGQ3LCAweGY4LCAweGUwLCAweDY5LCAweDAwLCAweDI4LCAweDAxLCAweGQwLCAweGU3LCAweDYxLCAweDAxLCAweGUwLAotMHgwMSwgMHgyMCwgMHhlMCwgMHg2MSwgMHgwNywgMHg0OCwgMHgwMiwgMHgyMywgMHhjMSwgMHg2YiwgMHgxOSwgMHg0MywKLTB4YzEsIDB4NjMsIDB4MjcsIDB4NzMsIDB4ZmYsIDB4ZjcsIDB4MDAsIDB4ZmYsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLAotMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHg3OCwgMHg4OCwKLTB4NmQsIDB4MjgsIDB4MDMsIDB4ZGIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCi0weGY3LCAweGY4LCAweDE3LCAweGUwLCAweDgwLCAweDAwLCAweDBkLCAweDQ5LCAweDA5LCAweDU4LCAweDM4LCAweDFjLAotMHhmZiwgMHhmNywgMHhjYiwgMHhmZSwgMHgwMCwgMHgyOCwgMHgwZiwgMHhkMSwgMHgzOSwgMHg3OCwgMHhjOSwgMHgwOSwKLTB4MGMsIDB4ZDMsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2YsIDB4ZjgsIDB4NjgsIDB4NDYsCi0weDAwLCAweDIxLCAweDAwLCAweGYwLCAweDBiLCAweGY4LCAweDAwLCAweDI4LCAweDAxLCAweGQxLCAweDAxLCAweDIwLAotMHgwMCwgMHhlMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ZTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsIDB4MDIsIDB4MWMsIDB4NDEsIDB4NGIsCi0weGRkLCAweDFkLCAweGZmLCAweDM1LCAweDNhLCAweDM1LCAweDJmLCAweDc4LCAweDAwLCAweDJmLCAweDAxLCAweGQwLAotMHgwMCwgMHgyNywgMHgwMCwgMHhlMCwgMHgwMSwgMHgyNywgMHgyZiwgMHg3MCwgMHgyZiwgMHg3OCwgMHhmYiwgMHgwMCwKLTB4ZGIsIDB4MTksIDB4NWIsIDB4MDEsIDB4M2EsIDB4NGYsIDB4ZGMsIDB4MTksIDB4NDAsIDB4NzgsIDB4MDAsIDB4MDEsCi0weGM3LCAweDFkLCAweDA5LCAweDM3LCAweDAwLCAweDIwLCAweDgzLCAweDAwLCAweGQ2LCAweDU4LCAweGMwLCAweDQ2LAotMHhlNiwgMHg1MCwgMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwgMHhmOCwgMHhkMywgMHgwMCwgMHgyOSwgMHgwZiwgMHhkMCwKLTB4MDAsIDB4MjIsIDB4YmIsIDB4MDgsIDB4MDEsIDB4OTMsIDB4ODMsIDB4NDIsIDB4MGIsIDB4ZDksIDB4MTMsIDB4MWMsCi0weDliLCAweDAwLCAweGNiLCAweDU4LCAweDg2LCAweDAwLCAweGEzLCAweDUxLCAweDAxLCAweDliLCAweDAxLCAweDMwLAotMHgwMSwgMHgzMiwgMHg4MywgMHg0MiwgMHhmNSwgMHhkOCwgMHgwMCwgMHhlMCwgMHgxMCwgMHgyNywgMHgyYiwgMHg0OCwKLTB4MDIsIDB4NmQsIDB4ODAsIDB4NmUsIDB4MmEsIDB4NDksIDB4ODIsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4ODIsIDB4MWEsCi0weGNiLCAweDZjLCAweDlhLCAweDFhLCAweDAwLCAweGUwLCAweDEyLCAweDFhLCAweGJhLCAweDQyLCAweDA1LCAweGQ4LAotMHgyNiwgMHg0OCwgMHg4MSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg4MSwgMHg2MywgMHgwMSwgMHgyMCwgMHgzNywgMHhlMCwKLTB4YzMsIDB4MTksIDB4Y2EsIDB4NmMsIDB4OTMsIDB4NDIsIDB4MDgsIDB4ZDgsIDB4MjIsIDB4NGEsIDB4M2EsIDB4NDMsCi0weDAwLCAweDkyLCAweDBhLCAweDFjLCAweDQ5LCAweDZjLCAweDA5LCAweDE4LCAweDkyLCAweDZjLCAweDIzLCAweDFjLAotMHgxMiwgMHhlMCwgMHgxNiwgMHgxYSwgMHgwMCwgMHg5NiwgMHgxYiwgMHg0OSwgMHg0OSwgMHg2YywgMHgwOSwgMHgxOCwKLTB4MTksIDB4NDgsIDB4ODIsIDB4NmMsIDB4MDMsIDB4MjAsIDB4MjMsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NWUsIDB4ZmUsCi0weGI4LCAweDFiLCAweDE4LCAweDRhLCAweDAyLCAweDQzLCAweDAwLCAweDkyLCAweGEzLCAweDE5LCAweDE0LCAweDQ4LAotMHg4MiwgMHg2YywgMHg0MSwgMHg2YywgMHgwMywgMHgyMCwgMHhmZiwgMHhmNywgMHg1MywgMHhmZSwgMHgwMSwgMHgyMCwKLTB4MGQsIDB4NDksIDB4YzAsIDB4NDYsIDB4NjgsIDB4NzAsIDB4OGEsIDB4NjksIDB4OTIsIDB4MDAsIDB4NTIsIDB4MTgsCi0weDE3LCAweDYxLCAweDhhLCAweDY5LCAweDAwLCAweDJhLCAweDAyLCAweGQwLCAweDAwLCAweDI3LCAweDhmLCAweDYxLAotMHgwMCwgMHhlMCwgMHg4OCwgMHg2MSwgMHgwYywgMHg0OCwgMHgwMiwgMHgyMywgMHhjMSwgMHg2YiwgMHgxOSwgMHg0MywKLTB4YzEsIDB4NjMsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjcsIDB4MGEsIDB4NDksIDB4YzAsIDB4NDYsIDB4NGYsIDB4NzMsCi0weDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDI4LCAweDA1LCAweDAwLCAweDgwLAotMHg1MCwgMHhiYSwgMHgyMCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDIsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDE4LCAweDFhLCAweDAwLCAweDgwLCAweDA3LCAweDQ5LCAweDhhLCAweDZlLCAweDEwLCAweDE4LCAweDA3LCAweDRhLAotMHhkMiwgMHg2YywgMHgxMywgMHgwNCwgMHgxYiwgMHgwYywgMHg4MywgMHg0MiwgMHgwMCwgMHhkOCwgMHg4MCwgMHgxYSwKLTB4ODgsIDB4NjYsIDB4ODgsIDB4NmUsIDB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjEsIDB4NzAsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDkwLCAweGVlLCAweDIwLCAweDQwLAotMHgwNiwgMHg0OSwgMHg0YSwgMHg2ZSwgMHgxMCwgMHgxOCwgMHgwNiwgMHg0YSwgMHgxMiwgMHg2YywgMHg4MiwgMHg0MiwKLTB4MDAsIDB4ZDgsIDB4ODAsIDB4MWEsIDB4NDgsIDB4NjYsIDB4NDgsIDB4NmUsIDB4MDMsIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYxLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAotMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHgwNSwgMHgyMiwgMHgwYSwgMHg2MCwgMHg4MiwgMHg4OCwgMHhjMCwgMHg0NiwKLTB4OGEsIDB4ODAsIDB4MDAsIDB4MjIsIDB4NGEsIDB4NzAsIDB4NDAsIDB4ODgsIDB4YzAsIDB4NDYsIDB4NDgsIDB4ODAsCi0weGNhLCAweDgwLCAweDhhLCAweDYwLCAweGNhLCAweDYwLCAweDcwLCAweDQ3LCAweDA1LCAweDIyLCAweDAyLCAweDYwLAotMHgwMCwgMHgyMiwgMHg4MiwgMHg4MCwgMHg0MiwgMHg3MCwgMHg0MSwgMHg4MCwgMHhjMiwgMHg4MCwgMHg4MiwgMHg2MCwKLTB4YzIsIDB4NjAsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MGUsIDB4NDgsCi0weDQxLCAweDZiLCAweDAxLCAweDMxLCAweDQxLCAweDYzLCAweDY5LCAweDQ2LAotMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhkZCwgMHhmZiwgMHgzOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwKLTB4NDUsIDB4MjAsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDEsIDB4MjcsIDB4ZGYsIDB4ODAsIDB4NjgsIDB4NDYsCi0weDAwLCAweDIxLCAweGZmLCAweGY3LCAweDExLCAweGZmLCAweDAwLCAweDI4LCAweDAxLCAweGQxLCAweDM4LCAweDFjLAotMHgwMCwgMHhlMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4YzEsIDB4ODgsIDB4MDksIDB4NGEsCi0weGMwLCAweDQ2LCAweDkxLCAweDgxLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LCAweGJkLCAweGZmLCAweDAxLCAweDIwLAotMHg0MCwgMHgwMiwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywKLTB4ZjUsIDB4ZmUsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGU4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweGZmLCAweGY3LCAweGMzLCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMSwgMHgyMCwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MSwgMHhhMSwgMHgyMSwKLTB4NDksIDB4MDMsIDB4ODgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsCi0weDAwLCAweDIwLCAweDA0LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDcxLCAweGZmLCAweDIxLCAweGExLCAweDIyLAotMHg1MiwgMHgwMywgMHgwMSwgMHgzMSwgMHg5MSwgMHg2MCwgMHg3MCwgMHg0NywgMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwKLTB4MDIsIDB4MjAsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4ODgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDAxLCAweDIwLCAweDQwLCAweDAyLCAweGExLCAweDIxLCAweDQ5LCAweDAzLCAweDg4LCAweDYwLCAweDAwLCAweDIwLAotMHg3MCwgMHg0NywgMHhjMCwgMHg4OCwgMHhjMCwgMHgwNiwgMHhjMCwgMHgwZSwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywKLTB4NDgsIDB4NjEsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjMsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weGU4LCAweDFhLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA4LCAweDQ5LCAweDBmLCAweDZiLAotMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHg3MSwgMHhmZiwgMHhmOCwgMHgwNiwgMHhjMCwgMHgwZSwgMHgwMSwgMHhhYiwKLTB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4YTksIDB4ZmUsIDB4MDEsIDB4MjAsCi0weDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweDAwLCAweDE0LCAweDQwLAotMHg4MCwgMHhiNSwgMHg4NSwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywKLTB4NWIsIDB4ZmYsIDB4ZjgsIDB4ODgsIDB4MDQsIDB4YTksIDB4MDMsIDB4ZjAsIDB4YzksIDB4ZmYsIDB4MDEsIDB4YWIsCi0weDU4LCAweDgwLCAweDAxLCAweGE4LCAweDQwLCAweDg4LCAweDAwLCAweDI4LCAweDBmLCAweGQwLCAweDAxLCAweGE4LAotMHg0MCwgMHg4OCwgMHg4MCwgMHgwOCwgMHgwMywgMHgzOCwgMHg4MCwgMHgwOCwgMHgwMSwgMHgzMCwgMHgwNCwgMHgzYiwKLTB4NTgsIDB4NzAsIDB4MDQsIDB4OTgsIDB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTEsIDB4NDAsIDB4NjgsCi0weGMwLCAweDQ2LCAweDAzLCAweDkwLCAweDA1LCAweGUwLCAweDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLAotMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwNCwgMHg5OCwgMHhjMSwgMHgxZCwgMHgwMSwgMHgzMSwKLTB4NjgsIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4NzUsIDB4ZmUsIDB4MDEsIDB4MjAsIDB4MDUsIDB4YjAsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDE0LCAweDRmLCAweDM5LCAweDdiLAotMHgwMCwgMHgyOSwgMHgyMCwgMHhkMSwgMHhmOSwgMHgxZCwgMHhmZiwgMHgzMSwgMHgzYSwgMHgzMSwgMHg0OSwgMHg3OCwKLTB4MDAsIDB4MjksIDB4MWEsIDB4ZDEsIDB4MTAsIDB4NDksIDB4MDUsIDB4MjIsIDB4MDAsIDB4OTIsIDB4MDgsIDB4MjIsCi0weDAwLCAweGFiLCAweDVhLCAweDgwLCAweDk4LCAweDgwLCAweDA2LCAweDIwLCAweDAwLCAweGFiLCAweDU4LCAweDcwLAotMHgwMCwgMHgyNCwgMHhkYywgMHg4MCwgMHgwOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHg0OCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsIDB4MDEsIDB4MjAsIDB4MzgsIDB4NzMsIDB4NjgsIDB4NDYsIDB4MDgsIDB4MzEsCi0weGZmLCAweGY3LCAweDRjLCAweGZlLCAweDAwLCAweDI4LCAweDAwLCAweGQwLCAweDNjLCAweDczLCAweDA0LCAweGIwLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwKLTB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsCi0weDM4LCAweDFjLCAweGZmLCAweGY3LCAweGY5LCAweGZlLCAweGJhLCAweDY4LCAweDBkLCAweDRjLCAweDBlLCAweDQ4LAotMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwZCwgMHg0OSwgMHhmZiwgMHhmNywgMHhlNCwgMHhmYywgMHgwMCwgMHgyOCwKLTB4MGMsIDB4ZGEsIDB4MDUsIDB4ZTAsIDB4YjksIDB4ODgsIDB4MGIsIDB4NGIsIDB4ZmYsIDB4ZjcsIDB4ZGYsIDB4ZmMsCi0weDAwLCAweDI4LCAweDA1LCAweGRhLCAweDAxLCAweGFiLCAweDVjLCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLAotMHhmZiwgMHhmNywgMHgyMiwgMHhmZSwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCi0weDBkLCAweDc2LCAweDIxLCAweDQwLCAweGMxLCAweGJkLCAweDIxLCAweDQwLCAweDU5LCAweGJkLCAweDIxLCAweDQwLAotMHgwMCwgMHhiNSwgMHhjMCwgMHg4OCwgMHgwMywgMHhmMCwgMHgyZSwgMHhmZiwgMHgwMCwgMHgyMCwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4ZTIsIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweGI1LCAweGZmLCAweGY3LCAweGRkLCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHgwMSwgMHgxYywgMHgwMiwgMHgyMCwgMHgwMCwgMHhmMCwgMHgwMiwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4YjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MDgsIDB4MWMsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsCi0weGI1LCAweGZlLCAweDIxLCAweDQ4LCAweGZmLCAweGY3LCAweGE0LCAweGZjLCAweDA0LCAweDFjLCAweDIwLCAweDRhLAotMHgwMCwgMHgyMSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhhMCwgMHhmYywgMHgwMCwgMHgyOCwgMHgyNywgMHhkMCwKLTB4MDQsIDB4YTksIDB4MWQsIDB4NGEsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4OTksIDB4ZmMsIDB4MDQsIDB4YTgsCi0weDAwLCAweDIzLCAweDAxLCAweDJmLCAweDA2LCAweGQxLCAweDBjLCAweGFhLCAweDAyLCAweDMyLCAweDAwLCAweDIxLAotMHgxMywgMHg2MCwgMHgwMSwgMHgzMSwgMHgxMCwgMHgyOSwgMHhmYiwgMHhkMywgMHgwMSwgMHg2OCwgMHgwNCwgMHgyOSwKLTB4MDQsIDB4ZDksIDB4ODksIDB4MDgsIDB4MDMsIDB4MzksIDB4ODksIDB4MDgsIDB4MDEsIDB4MzEsIDB4MDAsIDB4ZTAsCi0weDE5LCAweDFjLCAweDAwLCAweGFiLCAweDU5LCAweDcwLCAweDA2LCAweGE5LCAweDA5LCAweDc4LCAweGMwLCAweDQ2LAotMHhkOSwgMHg4MCwgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHgwNywgMHg5OCwgMHhjMCwgMHg0NiwKLTB4MDMsIDB4OTAsIDB4MDQsIDB4MzMsIDB4MDgsIDB4YWQsIDB4MDIsIDB4ZTAsIDB4NDUsIDB4MjAsIDB4MDAsIDB4YWIsCi0weDE4LCAweDcwLCAweDA5LCAweDQ5LCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDZlLCAweGZjLCAweDY4LCAweDQ2LAotMHgyOSwgMHgxYywgMHhmZiwgMHhmNywgMHhiNywgMHhmZCwgMHgwMSwgMHgyMCwgMHg0NiwgMHhiMCwgMHhiMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4NTksIDB4YjEsIDB4MjEsIDB4NDAsCi0weDlkLCAweGFmLCAweDIxLCAweDQwLCAweDNjLCAweDAyLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweDAxLCAweDFjLAotMHgwMiwgMHgyMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKLTB4MDEsIDB4MWMsIDB4MDEsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4YTIsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweGI1LCAweDAxLCAweDFjLCAweDAxLCAweDIwLCAweDAwLCAweGYwLCAweDAyLCAweGY4LCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHhmMCwgMHhiNSwgMHhjNywgMHhiMCwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHgzOCwgMHgxYywKLTB4MDEsIDB4YTksIDB4ZmYsIDB4ZjcsIDB4NGQsIDB4ZmUsIDB4MjEsIDB4NDgsIDB4ZmYsIDB4ZjcsIDB4M2MsIDB4ZmMsCi0weDAwLCAweDkwLCAweDc4LCAweDc4LCAweDAwLCAweDAxLCAweGJhLCAweDY4LCAweDA0LCAweDMwLCAweGZjLCAweDJhLAotMHgyNSwgMHhkOCwgMHhmZiwgMHgyMywgMHgwOSwgMHgzMywgMHg5OCwgMHg0MiwgMHgyMSwgMHhkOCwgMHgxOSwgMHgyYywKLTB4MWYsIDB4ZDgsIDB4ZmQsIDB4ODgsIDB4ZjgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDUsIDB4OTAsIDB4ZjksIDB4MWQsCi0weDA5LCAweDMxLCAweDA2LCAweGFiLCAweDAwLCAweDIwLCAweDdlLCAweDc4LCAweDAwLCAweDJlLCAweDBkLCAweGRkLAotMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywgMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywgMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywKLTB4NDAsIDB4YzksIDB4NDAsIDB4YzMsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4N2UsIDB4NzgsCi0weDg2LCAweDQyLCAweGYxLCAweGRjLCAweDIwLCAweDFjLCAweDA1LCAweGE5LCAweDJiLCAweDFjLCAweGZmLCAweGY3LAotMHgyMSwgMHhmYywgMHgwMCwgMHgyOCwgMHgwNSwgMHhkMCwgMHgwMSwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywKLTB4MTgsIDB4NDMsIDB4MDEsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDcsIDB4NDksIDB4MDAsIDB4OTgsIDB4ZmYsIDB4ZjcsCi0weDA2LCAweGZjLCAweDAwLCAweDIxLCAweDAxLCAweGE4LCAweGZmLCAweGY3LCAweDRmLCAweGZkLCAweDAxLCAweDIwLAotMHg0NywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwKLTB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4MWIsIDB4ZmUsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweGYwLCAweGI1LCAweGM2LCAweGIwLCAweDA3LCAweDFjLCAweGZjLCAweDg4LCAweDI1LCAweDRkLAotMHg2OCwgMHg2OCwgMHgwMSwgMHgzMCwgMHg2OSwgMHg0NiwgMHg2OCwgMHg2MCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywKLTB4ZjUsIDB4ZmQsIDB4MTAsIDB4MmMsIDB4MDgsIDB4ZDMsIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsCi0weDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAyLCAweDIwLCAweGQ4LCAweDgwLCAweDE3LCAweGUwLAotMHg3OCwgMHg3OCwgMHg4MiwgMHgwMCwgMHhmYiwgMHgxZCwgMHgwOSwgMHgzMywgMHgwMCwgMHgyMCwgMHhiOSwgMHg2OCwKLTB4MDAsIDB4MmEsIDB4MTUsIDB4ZDksIDB4NDAsIDB4Y2IsIDB4MGYsIDB4MWMsCi0weDAxLCAweDMxLCAweGJlLCAweDQyLCAweDBkLCAweGQwLCAweDAwLCAweGFhLCAweDEyLCAweDc4LCAweDQwLCAweDIzLAotMHgxYSwgMHg0MywgMHgwMCwgMHhhYiwgMHgxYSwgMHg3MCwgMHgwNCwgMHgyMiwgMHhkYSwgMHg4MCwgMHgwMiwgMHg5MCwKLTB4MDMsIDB4OTEsIDB4MDQsIDB4MzMsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4MTUsIDB4ZTAsIDB4MDEsIDB4MzAsCi0weDkwLCAweDQyLCAweGU5LCAweGQzLCAweDAwLCAweGFiLCAweDVjLCAweDcwLCAweDAyLCAweDk0LCAweDY5LCAweDY4LAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MSwgMHhhMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHgzMywgMHgwMCwgMHgyYSwKLTB4MDUsIDB4ZDksIDB4MGYsIDB4MWMsIDB4ODAsIDB4YzMsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzEsIDB4OTAsIDB4NDIsCi0weGY5LCAweGQzLCAweDY4LCAweDQ2LCAweDA0LCAweGE5LCAweGZmLCAweGY3LCAweGY3LCAweGZjLCAweDAxLCAweDIwLAotMHg0NiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5YywgMHgwMywgMHgwMCwgMHg4MCwKLTB4OTAsIDB4YjQsIDB4MjMsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MjEsIDB4NDIsIDB4MDksIDB4MDAsIDB4ZDMsCi0weDAwLCAweDIxLCAweDAwLCAweDI3LCAweDNhLCAweDFjLCAweDQzLCAweDBiLCAweDAwLCAweGQyLCAweDAyLCAweDIyLAotMHgxMSwgMHg0MywgMHgxZSwgMHg0YSwgMHgyMCwgMHgyNCwgMHhkMywgMHg2OCwgMHgwMSwgMHgyYiwgMHgyZSwgMHhkMSwKLTB4ODAsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjQsIDB4MGMsIDB4NDMsIDB4MjAsIDB4MWMsIDB4MWIsIDB4MjMsCi0weGRiLCAweDAxLCAweGQxLCAweDE4LCAweDg5LCAweDhiLCAweDA5LCAweDBiLCAweDAwLCAweGQyLCAweDA0LCAweDI3LAotMHgzOCwgMHg0MywgMHhkMSwgMHg2ZiwgMHgwOSwgMHg2OCwgMHgwOSwgMHgwYSwgMHgwNywgMHhkMiwgMHhkMSwgMHgxZCwKLTB4NzksIDB4MzEsIDB4MDksIDB4NjgsIDB4MDksIDB4NjgsIDB4MDksIDB4MGEsIDB4MDEsIDB4ZDMsIDB4MDgsIDB4MjMsCi0weDE4LCAweDQzLCAweGUzLCAweDIzLCAweDFiLCAweDAxLCAweGQxLCAweDE4LCAweDg5LCAweDc5LCAweDAzLCAweDI5LAotMHgwMiwgMHhkMSwgMHhmZiwgMHgyMywgMHgwMSwgMHgzMywgMHgxOCwgMHg0MywgMHgwYiwgMHg0OSwgMHgwOSwgMHg2YSwKLTB4MTAsIDB4MjIsIDB4NGIsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjIsIDB4MTAsIDB4NDMsIDB4ODksIDB4MDcsCi0weDg5LCAweDBmLCAweDg5LCAweDAxLCAweDA4LCAweDQzLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDQwLCAweDBjLAotMHgwMCwgMHhkMiwgMHgwMCwgMHgyNCwgMHgwYywgMHg0MywgMHgyMCwgMHgxYywgMHhlYywgMHhlNywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsCi0weGYwLCAweGI1LCAweDNhLCAweDRjLCAweDIwLCAweDFjLCAweDA0LCAweGYwLCAweDA3LCAweGZhLCAweDM5LCAweDQ4LAotMHhlMywgMHgyMywgMHgxYiwgMHgwMSwgMHhjNywgMHgxOCwgMHhiOSwgMHg3OSwgMHgzNywgMHg0ZSwgMHhjNSwgMHgxZCwKLTB4NzksIDB4MzUsIDB4MDYsIDB4MjksIDB4NjIsIDB4ZDIsIDB4MDIsIDB4YTMsIDB4NWIsIDB4NWMsIDB4NWIsIDB4MDAsCi0weDlmLCAweDQ0LCAweDAwLCAweDFjLCAweDAzLCAweDBlLCAweDFlLCAweDM3LCAweDRlLCAweDU1LCAweDAxLCAweDIwLAotMHhiOCwgMHg3MSwgMHgwMCwgMHgyMCwgMHhiMCwgMHg2MCwgMHhmZiwgMHhmNywgMHg5NSwgMHhmZiwgMHgwNSwgMHgyMywKLTB4OTgsIDB4NDMsIDB4MDAsIDB4ZjAsIDB4NmYsIDB4ZjgsIDB4MGMsIDB4ZTAsIDB4ZmYsIDB4ZjcsIDB4OGUsIDB4ZmYsCi0weGMwLCAweDA4LCAweDA2LCAweGQzLCAweGIwLCAweDY4LCAweDQxLCAweDFjLCAweGIxLCAweDYwLCAweDBhLCAweDI4LAotMHgwMywgMHhkOSwgMHgwNCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwMiwgMHgyMCwgMHhiOCwgMHg3MSwgMHg2NCwgMHgyMiwKLTB4MjAsIDB4MWMsIDB4MmIsIDB4ZTAsIDB4MDYsIDB4MWMsIDB4YzAsIDB4NmYsIDB4ODAsIDB4MjMsIDB4MDEsIDB4NjgsCi0weDE5LCAweDQzLCAweDAxLCAweDYwLCAweDAzLCAweDIwLCAweGI4LCAweDcxLCAweDIwLCAweDFjLCAweDIwLCAweDRhLAotMHgwMCwgMHgyMSwgMHgwNCwgMHhmMCwgMHg5OSwgMHhmOSwgMHhmMCwgMHg2ZiwgMHgwNCwgMHgyMywgMHgwMSwgMHg2OCwKLTB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MjgsIDB4NjgsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDA1LCAweDIxLCAweGI5LCAweDcxLCAweDI5LCAweDY4LAotMHgwNCwgMHgyMywgMHgwYSwgMHg2OCwgMHg5YSwgMHg0MywgMHgwYSwgMHg2MCwgMHhjMCwgMHg2ZiwgMHgwMSwgMHg2OCwKLTB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZmYsIDB4ZjcsIDB4NWEsIDB4ZmYsIDB4MDgsIDB4MjMsIDB4MTgsIDB4NDMsCi0weDAwLCAweGYwLCAweDM0LCAweGY4LCAweDIwLCAweDFjLCAweDEwLCAweDRhLCAweDAwLCAweDIxLCAweDA0LCAweGYwLAotMHg3NywgMHhmOSwgMHhlNSwgMHhlNywgMHhmZiwgMHhmNywgMHg0ZSwgMHhmZiwgMHgwNCwgMHgyMywgMHgxOCwgMHg0MywKLTB4MDAsIDB4ZjAsIDB4MjgsIDB4ZjgsIDB4ZGUsIDB4ZTcsIDB4MDAsIDB4MjAsIDB4MjksIDB4NjgsIDB4NjAsIDB4MjMsCi0weDBhLCAweDY4LCAweDlhLCAweDQzLCAweDBhLCAweDYwLCAweGZmLCAweGY3LCAweGUzLCAweGZhLCAweGQ1LCAweGU3LAotMHgwNiwgMHgyMCwgMHhiOCwgMHg3MSwgMHhkMiwgMHhlNywgMHgwMCwgMHgwMCwgMHhhOSwgMHg3OSwgMHgyMSwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OWMsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MzAsIDB4NzUsIDB4MDAsIDB4MDAsCi0weDEwLCAweDI3LCAweDAwLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDIwLAotMHgwNCwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg3MSwgMHgwNCwgMHg0OCwgMHgwMSwgMHgyMiwgMHgwMCwgMHgyMSwKLTB4MDQsIDB4ZjAsIDB4NGUsIDB4ZjksIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTgsIDB4MWMsIDB4MDAsIDB4ODAsCi0weGE5LCAweDc5LCAweDIxLCAweDQwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLCAweDMxLCAweDQ4LCAweDAwLCAweDY4LAotMHg3OSwgMHgwOCwgMHgwMywgMHhkMywgMHgxMCwgMHgyMywgMHgwMSwgMHgxYywgMHg5OSwgMHg0MywgMHgwMSwgMHhlMCwKLTB4MTAsIDB4MjEsIDB4MDEsIDB4NDMsIDB4MmQsIDB4NGMsIDB4ZTIsIDB4NjgsIDB4MDEsIDB4MmEsIDB4MDUsIDB4ZDEsCi0weDIyLCAweDc5LCAweDAwLCAweDJhLCAweDAyLCAweGQwLCAweDAxLCAweDIzLCAweDliLCAweDAyLCAweDE5LCAweDQzLAotMHg4MSwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNSwgMHgwMSwgMHg2MCwgMHhlMCwgMHg2OCwKLTB4MDEsIDB4MjgsIDB4MjAsIDB4ZDEsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZTAsIDB4MTgsIDB4ODAsIDB4OGIsCi0weGY5LCAweDA4LCAweDA0LCAweGQzLCAweDAxLCAweDIzLCAweGRiLCAweDAyLCAweDAxLCAweDFjLCAweDk5LCAweDQzLAotMHgwMSwgMHhlMCwgMHgwMSwgMHgyMSwgMHhjOSwgMHgwMiwgMHg4MSwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwMCwgMHgyMCwKLTB4MDIsIDB4ZjAsIDB4MWEsIDB4ZmIsIDB4MzgsIDB4MDksIDB4MDcsIDB4ZDMsIDB4ZTAsIDB4NmYsIDB4ODAsIDB4MjMsCi0weDAxLCAweDY4LCAweDk5LCAweDQzLCAweDAxLCAweDYwLCAweGUwLCAweDE4LCAweDAwLCAweDY4LCAweDAwLCAweGUwLAotMHhlMCwgMHg2ZiwgMHg4MCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgxNSwgMHg0OCwKLTB4MDEsIDB4NmEsIDB4NzgsIDB4MDksIDB4MDMsIDB4ZDMsIDB4ZmYsIDB4MjAsIDB4MDEsIDB4MzAsIDB4MDgsIDB4NDMsCi0weDAzLCAweGUwLCAweGZmLCAweDIzLCAweDA4LCAweDFjLCAweDAxLCAweDMzLCAweDk4LCAweDQzLCAweDgwLCAweDA4LAotMHg4MCwgMHgwMCwgMHhiYSwgMHgwOSwgMHg5MiwgMHgwNywgMHg5MiwgMHgwZiwgMHgxMCwgMHg0MywgMHg4OCwgMHg0MiwKLTB4MDIsIDB4ZDAsIDB4MGMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjIsIDB4ZTEsIDB4NjgsIDB4MDEsIDB4MjksCi0weDA4LCAweGQxLCAweDc5LCAweDBhLCAweDA2LCAweGQzLCAweGZmLCAweDIzLCAweDA0LCAweDMzLCAweDE4LCAweDQwLAotMHgwMywgMHgyOCwgMHgwMSwgMHhkMSwgMHhmZiwgMHhmNywgMHg4ZSwgMHhmZiwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weGMwLCAweDAwLCAweDE4LCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweDgwLCAweGI1LCAweGZmLCAweGY3LAotMHhiMSwgMHhmZSwgMHg4MCwgMHgwOSwgMHgxYiwgMHhkMiwgMHgwZiwgMHg0OCwgMHhlMywgMHgyMywgMHgxYiwgMHgwMSwKLTB4YzEsIDB4MTgsIDB4NGEsIDB4NzksIDB4MDAsIDB4MmEsIDB4MTQsIDB4ZDEsIDB4MDEsIDB4MjIsIDB4NGEsIDB4NzEsCi0weDAwLCAweDI3LCAweDgwLCAweDMwLCAweDAwLCAweDY4LCAweDYwLCAweDIzLCAweDAxLCAweDY4LCAweDk5LCAweDQzLAotMHgwMSwgMHg2MCwgMHgwOCwgMHg0OCwgMHgwNiwgMHhlMCwgMHgwMiwgMHgyMCwgMHgwMiwgMHhmMCwgMHg4YywgMHhmYywKLTB4MDcsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NWIsIDB4ZmMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MzYsIDB4ZmEsCi0weGY1LCAweGU3LCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhmNCwgMHgwMSwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywKLTB4MzcsIDB4ZmMsIDB4ZmYsIDB4ZjcsIDB4ODUsIDB4ZmUsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4MDgsIDB4NDgsCi0weDAwLCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDA3LCAweDQ4LCAweDAwLCAweDZhLCAweGMwLCAweDQ2LAotMHgwMywgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHg2NywgMHhmYiwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weGMwLCAweDAwLCAweDE4LCAweDQwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LAotMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgxNywgMHhmYywgMHhmOCwgMHg4OCwgMHhmZiwgMHhmNywgMHg0MiwgMHhmZiwKLTB4ZmYsIDB4ZjcsIDB4NjIsIDB4ZmUsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCi0weGZmLCAweGY3LCAweDRjLCAweGZiLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHhiMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHhjNywgMHg4OCwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywKLTB4MDEsIDB4ZmMsIDB4MDEsIDB4MjQsIDB4MWEsIDB4NGIsIDB4OWYsIDB4NDIsIDB4MGEsIDB4ZDksIDB4MDAsIDB4YTgsCi0weDAwLCAweDc4LCAweDQwLCAweDIzLCAweDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAyLCAweDIwLAotMHhkOCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgyMCwgMHhlMCwgMHgxNCwgMHg0OCwgMHhmZiwgMHhmNywKLTB4ZTEsIDB4ZjksIDB4MDUsIDB4MWMsIDB4MTMsIDB4NGEsIDB4MzgsIDB4MWMsIDB4MDQsIDB4YTksIDB4ZmYsIDB4ZjcsCi0weGRkLCAweGY5LCAweDEyLCAweDQ5LCAweDI4LCAweDFjLCAweGZmLCAweGY3LCAweGQ4LCAweGY5LCAweDAxLCAweDJmLAotMHgwNiwgMHhkMSwgMHgwYywgMHhhOSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMiwKLTB4MGEsIDB4NjAsIDB4MDEsIDB4MzAsIDB4MTAsIDB4MjgsIDB4ZmIsIDB4ZDMsIDB4MTAsIDB4MjAsIDB4MDAsIDB4YWIsCi0weDU4LCAweDcwLCAweDA0LCAweDk4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDA1LCAweDk4LCAweGMwLCAweDQ2LAotMHgwMywgMHg5MCwgMHg2OCwgMHg0NiwgMHgwNiwgMHhhOSwgMHhmZiwgMHhmNywgMHgwZiwgMHhmYiwgMHgyMCwgMHgxYywKLTB4NDYsIDB4YjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4MDAsCi0weDI0LCAweDAyLCAweGZmLCAweGZmLCAweDlkLCAweGFmLCAweDIxLCAweDQwLCAweDNjLCAweDAyLCAweGZmLCAweGZmLAotMHhmMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywKLTB4YmIsIDB4ZmIsIDB4ZmMsIDB4ODgsIDB4NzgsIDB4NzgsIDB4MDEsIDB4MjUsIDB4MTAsIDB4MjgsIDB4MDEsIDB4ZDEsCi0weDE5LCAweDJjLCAweDA5LCAweGQ5LCAweDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLCAweDE4LCAweDQzLAotMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwgMHhkOCwgMHg4MCwgMHgwNCwgMHgzMywgMHgyNywgMHhlMCwKLTB4YjgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDQsIDB4OTAsIDB4ZjgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDUsIDB4OTAsCi0weDA2LCAweGFhLCAweGZiLCAweDFkLCAweDA5LCAweDMzLCAweDAwLCAweDIxLCAweDc4LCAweDc4LCAweDAwLCAweDI4LAotMHgwZCwgMHhkZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhjYiwgMHg0MCwgMHhjMiwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4MDQsIDB4MjgsIDB4ZjgsIDB4ZGIsIDB4NDgsIDB4MWMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCi0weDc4LCAweDc4LCAweDg4LCAweDQyLCAweGYxLCAweGRjLCAweDBiLCAweDQ4LCAweGZmLCAweGY3LCAweDdlLCAweGY5LAotMHgwNywgMHgxYywgMHgwYSwgMHg0YSwgMHgyMCwgMHgxYywgMHgwNCwgMHhhOSwgMHhmZiwgMHhmNywgMHg3YSwgMHhmOSwKLTB4MDgsIDB4NDksIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NzUsIDB4ZjksIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCi0weGZmLCAweGY3LCAweGJlLCAweGZhLCAweDI4LCAweDFjLCAweDQ2LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHhjNSwgMHhhZiwgMHgyMSwgMHg0MCwKLTB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4ZjAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MDAsIDB4MjcsCi0weGU2LCAweDg4LCAweGEyLCAweDY4LCAweDQ3LCAweDQ5LCAweDA4LCAweDc5LCAweDAwLCAweDI4LCAweDA4LCAweGQwLAotMHgwMCwgMHgyZSwgMHgwMSwgMHhkMCwgMHgwMSwgMHgyZSwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyNywgMHgwMSwgMHhlMCwKLTB4MDQsIDB4MmUsIDB4MDAsIDB4ZDEsIDB4MDMsIDB4MjYsIDB4MDEsIDB4MjUsIDB4NDEsIDB4NDgsIDB4MDUsIDB4MmUsCi0weDY2LCAweGQyLCAweDAyLCAweGEzLCAweDliLCAweDVkLCAweDViLCAweDAwLCAweDlmLCAweDQ0LCAweDAwLCAweDFjLAotMHgwMywgMHgwNiwgMHgwOCwgMHgwYywgMHgxMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgwMCwgMHgyMywgMHgwMywgMHhlMCwKLTB4MDUsIDB4ODAsIDB4MDUsIDB4ZTAsIDB4MDAsIDB4MjMsIDB4MDMsIDB4ODAsIDB4NDMsIDB4ODAsIDB4MDYsIDB4ZTAsCi0weDAwLCAweDIzLCAweDAzLCAweDgwLCAweDQ1LCAweDgwLCAweDAyLCAweGUwLCAweGZmLCAweDIzLCAweDAxLCAweDMzLAotMHgwMywgMHg4MCwgMHhjYiwgMHgxZCwgMHg3OSwgMHgzMywgMHg5ZSwgMHg4OSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwKLTB4OWUsIDB4NDIsIDB4MDIsIDB4ZGIsIDB4ZDIsIDB4MDcsIDB4ZDIsIDB4MGYsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4MjIsCi0weDZkLCAweDIzLCAweDViLCAweDAxLCAweGM5LCAweDE4LCAweDg5LCAweDg4LCAweGZmLCAweDIzLCAweGUxLCAweDMzLAotMHg5OSwgMHg0MywgMHgwMSwgMHgyMywgMHgxOSwgMHg0MywgMHgwNiwgMHg4OCwgMHhmZiwgMHgzMywgMHg5ZSwgMHg0MiwKLTB4MGQsIDB4ZDEsIDB4ZmYsIDB4MjAsIDB4ZTEsIDB4MzAsIDB4MDgsIDB4NDMsIDB4MDAsIDB4MmEsIDB4MDQsIDB4ZDEsCi0weDAxLCAweDIzLCAweDliLCAweDAyLCAweDk4LCAweDQzLCAweDAxLCAweDFjLCAweDIwLCAweGUwLCAweDAxLCAweDIxLAotMHg4OSwgMHgwMiwgMHgwMSwgMHg0MywgMHgxYywgMHhlMCwgMHgwMSwgMHgyZSwgMHgwYSwgMHhkMSwgMHg0MCwgMHg4OCwKLTB4MDEsIDB4MjgsIDB4MDQsIDB4ZDEsIDB4NjAsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDAsIDB4MmEsIDB4MTMsIDB4ZDAsCi0weDBjLCAweGUwLCAweDIwLCAweDIzLCAweDE5LCAweDQzLCAweDBmLCAweGUwLCAweDAwLCAweDJlLCAweDBkLCAweGQxLAotMHg0MCwgMHg4OCwgMHgwMSwgMHgyOCwgMHgwOCwgMHhkMSwgMHhmZiwgMHgyMywgMHg4MSwgMHgzMywgMHgxOSwgMHg0MywKLTB4MDAsIDB4MmEsIDB4MDUsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4MTksIDB4NDMsIDB4MDEsIDB4ZTAsCi0weDgwLCAweDIzLCAweDE5LCAweDQzLCAweDA0LCAweDIwLCAweDAyLCAweGYwLCAweDc1LCAweGY5LCAweDA5LCAweDIxLAotMHg0OSwgMHgwMiwgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg3MCwgMHhmOSwgMHgwMCwgMHgyZiwgMHgwMiwgMHhkMSwKLTB4MDAsIDB4MjAsIDB4MTIsIDB4ZTAsIDB4ZmYsIDB4ZTcsIDB4NjksIDB4NDYsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weGVmLCAweGZhLCAweDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLCAweDE4LCAweDQzLCAweDAwLCAweGFiLAotMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwgMHhkOCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgwNCwgMHgzMywKLTB4ZmYsIDB4ZjcsIDB4MjIsIDB4ZmEsIDB4MjgsIDB4MWMsIDB4MDQsIDB4YjAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg4OCwgMHgxYywgMHgwMCwgMHg4MCwgMHhjMCwgMHg4OCwgMHg1MSwgMHgyMSwgMHg4OSwgMHgwMywgMHgwOCwgMHg2MiwKLTB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjUsIDB4MTYsIDB4NGYsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MjgsCi0weDA3LCAweGQxLCAweDM3LCAweDIzLCAweDliLCAweDAxLCAweGY4LCAweDE4LCAweDQwLCAweDhhLCAweDgwLCAweDIxLAotMHgwMSwgMHg0MywgMHgxYiwgMHgyMCwgMHgwNywgMHhlMCwgMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwgMHhmOCwgMHgxOCwKLTB4ODAsIDB4OGIsIDB4MDEsIDB4MjEsIDB4NDksIDB4MDMsIDB4MDEsIDB4NDMsIDB4MTAsIDB4MjAsIDB4MDIsIDB4ZjAsCi0weDMzLCAweGY5LCAweDAxLCAweDIwLCAweDcxLCAweDIzLCAweDViLCAweDAxLCAweGY5LCAweDE4LCAweDA4LCAweDgwLAotMHg0OCwgMHg4MCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhmOCwgMHgxOCwgMHg4MCwgMHg4YiwgMHgwMSwgMHgyMywKLTB4MWIsIDB4MDMsIDB4OTgsIDB4NDMsIDB4NDEsIDB4MjEsIDB4MDksIDB4MDIsIDB4MDEsIDB4NDMsIDB4MDAsIDB4MjAsCi0weDAyLCAweGYwLCAweDIwLCAweGY5LCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgxNywgMHg0ZiwgMHhmOCwgMHg2OCwgMHgwMSwgMHgyOCwKLTB4MDgsIDB4ZDEsIDB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjgsIDB4MTgsIDB4NDAsIDB4OGEsIDB4ODAsIDB4MjMsCi0weDk4LCAweDQzLCAweDAxLCAweDFjLCAweDFiLCAweDIwLCAweDA4LCAweGUwLCAweDZkLCAweDIzLCAweDViLCAweDAxLAotMHhmOCwgMHgxOCwgMHg4MCwgMHg4YiwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMywgMHg5OCwgMHg0MywgMHgwMSwgMHgxYywKLTB4MTAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MDEsIDB4ZjksIDB4ZmYsIDB4MjAsIDB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsCi0weGY5LCAweDE4LCAweDAxLCAweDMwLCAweDA4LCAweDgwLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGY4LCAweDE4LAotMHg4MCwgMHg4YiwgMHg0MSwgMHgyMywgMHgxYiwgMHgwMiwgMHg5OCwgMHg0MywgMHgwOSwgMHgyMSwgMHg0OSwgMHgwMiwKLTB4MDEsIDB4NDMsIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4ZWUsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLAotMHgwOCwgMHg0OSwgMHhjZiwgMHg2YSwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHg2OSwgMHhmYSwgMHhiOCwgMHgwNSwKLTB4ODAsIDB4MGQsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsCi0weGExLCAweGY5LCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwgMHhjMCwgMHg4OCwgMHg5ZiwgMHgyMywgMHgxOCwgMHg0MCwgMHgwNSwgMHg0OSwKLTB4YzksIDB4NmEsIDB4MWIsIDB4MjMsIDB4NWIsIDB4MDEsIDB4MTksIDB4NDAsIDB4MDgsIDB4NDMsIDB4MDMsIDB4NDksCi0weGMwLCAweDQ2LCAweGM4LCAweDYyLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDQwLCAweDAwLCAweDE0LCAweDQwLAotMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwZCwgMHg0OSwgMHgwZiwgMHg2YSwKLTB4MDEsIDB4MmYsIDB4MDEsIDB4ZDEsIDB4ZmYsIDB4MDMsIDB4MDcsIDB4ZTAsIDB4MDIsIDB4MmYsIDB4MDEsIDB4ZDEsCi0weDNmLCAweDAzLCAweDAzLCAweGUwLCAweDAwLCAweDJmLCAweDAxLCAweGQxLCAweDAxLCAweDI3LCAweGZmLCAweDAyLAotMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHgzNSwgMHhmYSwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4NmYsIDB4ZjksIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDE0LCAweDQwLCAweGMyLCAweDg4LCAweGExLCAweDIwLAotMHg0MCwgMHgwMywgMHgwMCwgMHgyMSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMywgMHg5YSwgMHg0MiwgMHgwMSwgMHhkMSwKLTB4MDIsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4OWEsIDB4NDIsIDB4MDIsIDB4ZDEsCi0weDAxLCAweDIyLCAweDAyLCAweDYyLCAweDAwLCAweGUwLCAweDAxLCAweDYyLCAweDA4LCAweDFjLCAweDcwLCAweDQ3LAotMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHgwMiwgMHhmMCwgMHg5ZiwgMHhmOCwgMHg2OSwgMHg0NiwKLTB4MDQsIDB4MWMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MGEsIDB4ZmEsIDB4MDEsIDB4YWIsIDB4NWMsIDB4ODAsCi0weDA5LCAweDRmLCAweGY4LCAweDZkLCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLAotMHhmZiwgMHhmNywgMHg0MCwgMHhmOSwgMHhmOCwgMHg2ZCwgMHhjMCwgMHgwNywgMHhjMCwgMHgwZiwgMHgwNSwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4YzgsIDB4NjIsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDY4LCAweDFjLCAweDAwLCAweDgwLAotMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MSwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4ODAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsCi0weGUzLCAweGY5LCAweDA2LCAweDQ4LCAweGMwLCAweDY4LCAweDAxLCAweGFiLAotMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHgxYiwgMHhmOSwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsCi0weGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHg4MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHg4NywgMHg2OCwKLTB4ZmYsIDB4ZjcsIDB4YzYsIDB4ZjksIDB4MjAsIDB4MmYsIDB4MDcsIDB4ZDIsIDB4NzgsIDB4MDAsIDB4MGMsIDB4NDksCi0weDQwLCAweDE4LCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDgwLCAweDhiLCAweDA2LCAweGUwLAotMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwKLTB4MDIsIDB4MjAsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsCi0weGVmLCAweGY4LCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHhjMSwgMHg4OCwgMHg4MiwgMHg2OCwKLTB4MjAsIDB4MmEsIDB4MDQsIDB4ZDIsIDB4MTAsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MTcsIDB4ZjgsIDB4MDAsIDB4MjAsCi0weDEwLCAweGUwLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDlhLCAweGY5LCAweDAwLCAweGE4LCAweDAwLCAweDc4LAotMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwgMHhkOCwgMHg4MCwKLTB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4MDQsIDB4MzMsIDB4ZmYsIDB4ZjcsIDB4Y2QsIDB4ZjgsIDB4MDEsIDB4MjAsCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweGM3LCAweDg4LAotMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHg4MywgMHhmOSwgMHgxMCwgMHg0OCwgMHhmZSwgMHhmNywgMHg3MiwgMHhmZiwKLTB4MDIsIDB4MjAsIDB4MzksIDB4MWMsIDB4MDIsIDB4ZjAsIDB4ZjIsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MDYsIDB4ZDAsCi0weDAyLCAweDIwLCAweDM5LCAweDFjLCAweDAyLCAweGYwLCAweDM2LCAweGZmLCAweDAxLCAweGFiLCAweDU4LCAweDgwLAotMHgwMiwgMHhlMCwgMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwNywgMHg0OSwgMHgyMCwgMHgxYywKLTB4ZmUsIDB4ZjcsIDB4NWYsIDB4ZmYsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4YTgsIDB4ZjgsCi0weDAxLCAweDIwLCAweDA0LCAweGIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHhiMCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4YzcsIDB4ODgsIDB4NjksIDB4NDYsIDB4ODQsIDB4NjgsIDB4ZmYsIDB4ZjcsIDB4NTcsIDB4ZjksIDB4MTAsIDB4NDgsCi0weGZlLCAweGY3LCAweDQ2LCAweGZmLCAweDBmLCAweDRhLCAweDAyLCAweDIwLCAweDM5LCAweDFjLCAweGZlLCAweGY3LAotMHg0MywgMHhmZiwgMHgwMCwgMHgyOCwgMHgwNiwgMHhkMCwgMHgwZCwgMHg0YiwgMHgwMiwgMHgyMCwgMHgzOSwgMHgxYywKLTB4MjIsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4M2MsIDB4ZmYsIDB4MDIsIDB4ZTAsIDB4NDUsIDB4MjAsIDB4MDAsIDB4YWIsCi0weDE4LCAweDcwLCAweDA5LCAweDQ5LCAweDI4LCAweDFjLCAweGZlLCAweGY3LCAweDMyLCAweGZmLCAweDY4LCAweDQ2LAotMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHg3YiwgMHhmOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHhiMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4NTksIDB4YjEsIDB4MjEsIDB4NDAsCi0weDU5LCAweGIwLCAweDIxLCAweDQwLCAweDNjLCAweDAyLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweGZmLCAweGY3LAotMHg0MywgMHhmOSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHg4MCwgMHhiNCwKLTB4YzIsIDB4ODgsIDB4MTksIDB4NGIsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4MDAsIDB4MmEsIDB4MDMsIDB4ZDEsCi0weDE4LCAweDZiLCAweDEwLCAweDIzLCAweDk4LCAweDQzLCAweDA0LCAweGUwLCAweDAxLCAweDJhLCAweDA0LCAweGQxLAotMHgxOCwgMHg2YiwgMHgxMCwgMHgyMywgMHgxOCwgMHg0MywgMHg0OCwgMHg2MSwgMHgxZiwgMHhlMCwgMHgwMiwgMHgyYSwKLTB4MWQsIDB4ZDEsIDB4YzIsIDB4NjgsIDB4ODcsIDB4NjgsIDB4MDAsIDB4MjAsIDB4M2IsIDB4MWMsIDB4YzMsIDB4NDAsCi0weGRiLCAweDA3LCAweGRiLCAweDBmLCAweDliLCAweDAyLCAweDAzLCAweDQzLCAweDBiLCAweDYxLCAweDAxLCAweDMwLAotMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgyMCwgMHgyOCwgMHhmMywgMHhkYiwgMHgwMCwgMHgyMCwgMHgxMywgMHgxYywKLTB4YzMsIDB4NDAsIDB4ZGIsIDB4MDcsIDB4ZGIsIDB4MGYsIDB4OWIsIDB4MDIsIDB4YzcsIDB4MWQsIDB4MTksIDB4MzcsCi0weDNiLCAweDQzLCAweDBiLCAweDYxLCAweDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDIwLCAweDI4LAotMHhmMSwgMHhkYiwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4ODAsIDB4YjQsIDB4YzIsIDB4ODgsIDB4ODEsIDB4NjgsIDB4MTAsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTAsIDB4NDMsCi0weDAyLCAweDA0LCAweDEyLCAweDBjLCAweDBjLCAweDQ4LCAweGMwLCAweDQ2LCAweDAyLCAweDYwLCAweDBjLCAweDRiLAotMHhjMCwgMHg0NiwgMHgxYSwgMHg4MCwgMHgwYSwgMHgwYywgMHgxNywgMHgwMiwKLTB4MTIsIDB4MTIsIDB4M2EsIDB4NDMsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4NDIsIDB4NjAsIDB4NWEsIDB4ODAsCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDBhLCAweDAyLCAweDA5LCAweDBhLCAweDExLCAweDQzLCAweDA5LCAweDA0LAotMHgwOSwgMHgwYywgMHg4MSwgMHg2MCwgMHg5OSwgMHg4MCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywKLTB4NDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjgsIDB4MWIsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weDEzLCAweDQ5LCAweDBhLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDEzLCAweDAyLCAweDEyLCAweDEyLAotMHgxMywgMHg0MywgMHg0YSwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgxZiwgMHgxYywgMHgxMywgMHgwMiwKLTB4MTIsIDB4MTIsIDB4MTMsIDB4NDMsIDB4ODksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MGEsIDB4MDIsCi0weDA5LCAweDEyLCAweDExLCAweDQzLCAweDBjLCAweDA0LCAweDI0LCAweDBjLCAweDY5LCAweDQ2LCAweDFkLCAweDFjLAotMHhmZiwgMHhmNywgMHhhZSwgMHhmOCwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwgMHgyOCwgMHgwNCwgMHgyMCwgMHg0MywKLTB4MDIsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4ZTUsIDB4ZmYsIDB4MDEsIDB4MjAsCi0weDA0LCAweGIwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDQwLCAweDAwLCAweDE0LCAweDQwLAotMHhjMSwgMHg4OCwgMHg4MiwgMHg2OCwgMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgwMCwgMHgwNCwKLTB4MDAsIDB4MGMsIDB4MGEsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MTAsIDB4MGMsIDB4MDMsIDB4MDIsCi0weDAwLCAweDEyLCAweDE4LCAweDQzLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA4LCAweDYxLCAweDEwLCAweDA0LAotMHgwMCwgMHgwYywgMHgwMiwgMHgwMiwgMHgwMCwgMHgwYSwgMHgxMCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywKLTB4NDgsIDB4NjEsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MTQsIDB4MDAsCi0weDkwLCAweGI1LCAweDg0LCAweGIwLCAweDE2LCAweDRiLCAweGQ5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLAotMHgwYSwgMHgwMiwgMHgwOSwgMHgxMiwgMHgxMSwgMHg0MywgMHgxYSwgMHg2OSwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywKLTB4MTcsIDB4MDIsIDB4MTIsIDB4MTIsIDB4M2EsIDB4NDMsIDB4NWIsIDB4NjksIDB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsCi0weDFmLCAweDAyLCAweDFiLCAweDEyLCAweDNiLCAweDQzLCAweDFmLCAweDA0LCAweDNmLCAweDBjLCAweDA1LCAweDIzLAotMHgwMCwgMHg5MywgMHg4NCwgMHg4OCwgMHgwMSwgMHhhYiwgMHgxYywgMHg4MCwgMHgwMCwgMHgyNCwgMHgwNCwgMHgzYiwKLTB4NWMsIDB4NzAsIDB4NDAsIDB4ODgsIDB4MDAsIDB4YWIsIDB4NTgsIDB4ODAsIDB4ZDksIDB4ODAsIDB4MTAsIDB4MDQsCi0weDM4LCAweDQzLCAweDAyLCAweDkwLCAweDAzLCAweDk0LCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LAotMHg5NSwgMHhmZiwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MGIsIDB4NDksIDB4OGEsIDB4NmEsCi0weDA1LCAweDIxLCAweDAwLCAweDkxLCAweDgxLCAweDg4LCAweDAxLCAweGFiLCAweDE5LCAweDgwLCAweDAwLCAweDIxLAotMHgwNCwgMHgzYiwgMHg1OSwgMHg3MCwgMHg0MCwgMHg4OCwgMHgwMCwgMHhhYiwgMHg1OCwgMHg4MCwgMHhkYSwgMHg4MCwKLTB4MDIsIDB4OTEsIDB4MDMsIDB4OTEsIDB4NjgsIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4NzksIDB4ZmYsIDB4MDEsIDB4MjAsCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDE0LCAweDQwLAotMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MiwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4YzAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MGIsIDB4NDksIDB4MGEsIDB4NmEsCi0weDA1LCAweDIxLCAweDAwLCAweDkxLCAweDgxLCAweDg4LCAweDAxLCAweGFiLCAweDE5LCAweDgwLCAweDAwLCAweDIxLAotMHgwNCwgMHgzYiwgMHg1OSwgMHg3MCwgMHg0MCwgMHg4OCwgMHgwMCwgMHhhYiwgMHg1OCwgMHg4MCwgMHhkYSwgMHg4MCwKLTB4MDIsIDB4OTEsIDB4MDMsIDB4OTEsIDB4NjgsIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4NTUsIDB4ZmYsIDB4MDEsIDB4MjAsCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDE0LCAweDQwLAotMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MiwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4YzAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4YjUsIDB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4ZmUsIDB4ZjcsCi0weGY0LCAweGZkLCAweDAwLCAweDIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDc1LCAweDAyLCAweGZmLCAweGZmLAotMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHhmZSwgMHhmNywgMHhmNywgMHhmZiwgMHgwNiwgMHg0OCwKLTB4MDAsIDB4NmIsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsCi0weDJmLCAweGZmLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhmZCwgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZjgsIDB4ZmYsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGYzLCAweGZmLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHgxMCwgMHg0OCwgMHhmZSwgMHhmNywgMHhjNiwgMHhmZCwKLTB4MDEsIDB4MjAsIDB4NDAsIDB4MDIsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4ODgsIDB4NjAsIDB4MDAsIDB4MjEsCi0weDBjLCAweDQ4LCAweGMwLCAweDQ2LCAweDAxLCAweDcxLCAweDBjLCAweDQ4LCAweDAyLCAweDY4LCAweDUyLCAweDBjLAotMHgwNSwgMHhkMiwgMHgwMiwgMHg2OCwgMHgxMiwgMHgwYywgMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwKLTB4MDMsIDB4ZDMsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YzcsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MDcsIDB4NDgsCi0weGMwLCAweDQ2LCAweDA3LCAweDY0LCAweDA4LCAweDFjLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhkNSwgMHg5NCwgMHgyMSwgMHg0MCwgMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MjAsCi0weDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDcyLCAweDEyLCAweDIwLCAweGZmLCAweGY3LCAweGNiLCAweGZmLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4OCwgMHgxYywgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMCwKLTB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NzIsIDB4MTUsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4YmYsIDB4ZmYsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDg4LCAweDFjLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweGYwLAotMHhmOSwgMHhmZiwgMHgwMSwgMHgyMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4MDcsIDB4MWMsIDB4ZjgsIDB4ODgsIDB4MDIsIDB4ZjAsIDB4ZmUsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MGMsIDB4ZDEsCi0weDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZlLCAweGY3LCAweDgyLCAweGZmLCAweDA2LCAweDQ4LCAweDAxLCAweGFiLAotMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHhiYiwgMHhmZSwgMHgwMSwgMHgyMCwKLTB4MDAsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGZmLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweGZlLCAweGY3LAotMHg2ZCwgMHhmZiwgMHgwMSwgMHgyNywgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwgMHgwOSwgMHg0OCwgMHg4MSwgMHg4OSwKLTB4MDksIDB4MDQsIDB4YzIsIDB4ODksIDB4MTEsIDB4NDMsIDB4MDIsIDB4OTEsIDB4ODEsIDB4ODgsIDB4MDksIDB4MDQsCi0weGMwLCAweDg4LCAweDA4LCAweDQzLCAweDAzLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LAotMHg5YiwgMHhmZSwgMHgzOCwgMHgxYywgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NjksIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDY0LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg1ZiwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKLTB4ZmUsIDB4ZjcsIDB4NWEsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsCi0weDU1LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDUwLCAweGZmLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg0YiwgMHhmZiwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NDYsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweGI1LCAweGZlLCAweGY3LCAweDQxLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAotMHhmZSwgMHhmNywgMHgzYywgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywKLTB4MzcsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4MzIsIDB4ZmYsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweDhjLCAweGIwLCAweDA4LCAweGE5LCAweGZlLCAweGY3LAotMHgxMywgMHhmZiwgMHg2OSwgMHg0NiwgMHgwOCwgMHhhOCwgMHgwMiwgMHhmMCwgMHhhOSwgMHhmZiwgMHgwMiwgMHgyMCwKLTB4MDgsIDB4YWIsIDB4NTgsIDB4NzAsIDB4NjksIDB4NDYsIDB4MDgsIDB4YTgsIDB4ZmUsIDB4ZjcsIDB4NDgsIDB4ZmUsCi0weDAxLCAweDIwLCAweDBjLCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LAotMHgxOSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywKLTB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4ZjgsIDB4ZmUsIDB4ZmEsIDB4ODgsIDB4MTIsIDB4NDksCi0weDAxLCAweDI0LCAweGM4LCAweDFkLCAweDg5LCAweDMwLCAweDAwLCAweDJhLCAweDBmLCAweGQwLCAweDA0LCAweDcwLAotMHg0NCwgMHg3MCwgMHhiOCwgMHg2OCwgMHgwMCwgMHgwYywgMHg4MCwgMHgzMSwgMHhjOCwgMHg4MiwgMHhiOCwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4ODMsIDB4ZjgsIDB4NjgsIDB4MDAsIDB4MGMsIDB4NDgsIDB4ODMsIDB4ZjgsIDB4NjgsCi0weGMwLCAweDQ2LCAweDg4LCAweDgzLCAweDAyLCAweGUwLCAweDAwLCAweDIxLAotMHgwMSwgMHg3MCwgMHg0MSwgMHg3MCwgMHgwNiwgMHg0OCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MTcsIDB4ZmUsIDB4MjAsIDB4MWMsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAotMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhlMywgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKLTB4ZmUsIDB4ZjcsIDB4ZGUsIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsCi0weGQ5LCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGQ0LCAweGZlLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhjZiwgMHhmZSwgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsCi0weGZlLCAweGY3LCAweGFlLCAweGZlLCAweGY4LCAweDg4LCAweDAzLCAweDI0LCAweGU0LCAweDA0LCAweDA0LCAweDQzLAotMHgwMywgMHgyMywgMHhkYiwgMHgwNCwgMHg5YywgMHg0MiwgMHgwMiwgMHhkMywgMHgwZiwgMHg0YiwgMHg5YywgMHg0MiwKLTB4MDYsIDB4ZDksIDB4MGYsIDB4NDgsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCi0weGZlLCAweGY3LCAweGRjLCAweGZkLCAweDAxLCAweDIwLCAweDgwLCAweDA3LCAweDIwLCAweDQzLCAweDAwLCAweDY4LAotMHgwMCwgMHgyMSwgMHgwMCwgMHhhYiwgMHg1OSwgMHg3MCwgMHhmYSwgMHg4OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg4MCwKLTB4MDIsIDB4OTAsIDB4MDMsIDB4OTEsIDB4NjgsIDB4NDYsIDB4MDQsIDB4MzMsIDB4ZmUsIDB4ZjcsIDB4Y2MsIDB4ZmQsCi0weDAxLCAweDIwLCAweDA0LCAweGIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHhlMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4MDcsIDB4MWMsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4N2IsIDB4ZmUsIDB4ZjgsIDB4ODgsCi0weDAzLCAweDIzLCAweGRiLCAweDA0LCAweDE4LCAweDQzLCAweDk4LCAweDQyLCAweDAyLCAweGQzLCAweDBhLCAweDRiLAotMHg5OCwgMHg0MiwgMHgwOCwgMHhkOSwgMHgwOSwgMHg0OCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4YWIsIDB4ZmQsIDB4MDEsIDB4MjAsIDB4MDMsIDB4ZTAsIDB4YjksIDB4NjgsCi0weGMwLCAweDQ2LCAweDAxLCAweDYwLCAweDAwLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLTB4ODAsIDB4YjUsIDB4ODYsIDB4YjAsIDB4MDIsIDB4YTksIDB4ZmUsIDB4ZjcsIDB4NTcsIDB4ZmUsIDB4MDEsIDB4MjcsCi0weDAyLCAweGFiLCAweDVmLCAweDcwLCAweDAwLCAweDIwLCAweGQ4LCAweDgwLCAweDBhLCAweDQ4LCAweDQxLCAweDY4LAotMHhjMCwgMHg0NiwgMHgwNCwgMHg5MSwgMHg4MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5MSwgMHhjMSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDEsIDB4OTAsIDB4NjksIDB4NDYsCi0weDAyLCAweGE4LCAweGZlLCAweGY3LCAweDgxLCAweGZkLCAweDM4LCAweDFjLCAweDA2LCAweGIwLCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgxOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHhjMSwgMHg2OCwKLTB4ODAsIDB4NjgsIDB4ZmUsIDB4ZjcsIDB4NDcsIDB4ZmIsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA0LCAweDFjLCAweDBmLCAweDFjLAotMHg2OCwgMHg0NiwgMHg1MCwgMHgyMSwgMHhmZSwgMHhmNywgMHgzNiwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1YywgMHg4MCwKLTB4MDIsIDB4OTcsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4NjEsIDB4ZmQsIDB4MDQsIDB4YjAsCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLAotMHg2OCwgMHg0NiwgMHg1MSwgMHgyMSwgMHhmZSwgMHhmNywgMHgyNCwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwKLTB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4NTAsIDB4ZmQsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAotMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwMCwgMHgyNywgMHgxMiwgMHg0OSwgMHgwOSwgMHg2OCwgMHgxMiwgMHg0YSwKLTB4MTIsIDB4NmIsIDB4MTAsIDB4MjMsIDB4MWEsIDB4NDAsIDB4MDEsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MDAsIDB4ZDAsCi0weDAxLCAweDI3LCAweDhhLCAweDBjLCAweDAzLCAweGQzLCAweDNhLCAweDA0LCAweDEyLCAweDBjLCAweDAyLCAweDI3LAotMHgxNywgMHg0MywgMHhjOSwgMHgwYywgMHgwMywgMHhkMywgMHgzOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwNCwgMHgyNywKLTB4MGYsIDB4NDMsIDB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4ZWMsIDB4ZmQsIDB4MDEsIDB4YWIsIDB4NWYsIDB4ODAsCi0weDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweDI2LCAweGZkLCAweDIwLCAweDFjLCAweDA0LCAweGIwLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsCi0weDY5LCAweDQ2LCAweGZlLCAweGY3LCAweGQ3LCAweGZkLCAweDA2LCAweDQ4LCAweGMwLCAweDZkLCAweDAxLCAweGFiLAotMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHgwZiwgMHhmZCwgMHgwMSwgMHgyMCwKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCi0weDAwLCAweGI1LCAweGZlLCAweGY3LCAweGRkLCAweGZkLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDcwLCAweDQ3LAotMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKLTB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCi0weDAwLCAweGI1LCAweGZlLCAweGY3LCAweGNiLCAweGZkLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHg4MCwgMHhiNSwgMHg4NSwgMHhiMCwgMHgwMSwgMHhhOSwgMHhmZSwgMHhmNywgMHhhYiwgMHhmZCwgMHgwMCwgMHgyMCwKLTB4MDEsIDB4YWIsIDB4NTgsIDB4NzAsIDB4MGMsIDB4NDksIDB4YzksIDB4NjgsIDB4MDEsIDB4MjcsIDB4MDEsIDB4MjksCi0weDAyLCAweGQxLCAweDAzLCAweDk3LCAweDA0LCAweDk3LCAweDAxLCAweGUwLCAweDAzLCAweDk3LCAweDA0LCAweDkwLAotMHg2OCwgMHg0NiwgMHgwMSwgMHhmMCwgMHgzMywgMHhmZCwgMHgwMiwgMHhhYiwgMHgwMCwgMHg5OCwgMHhjMCwgMHg0NiwKLTB4NTgsIDB4ODAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4YTgsIDB4ZmUsIDB4ZjcsIDB4ZDMsIDB4ZmMsIDB4MzgsIDB4MWMsCi0weDA1LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg3MCwgMHg0NywgMHgwNCwgMHg0OSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg3MCwgMHgwMSwgMHgzMCwKLTB4MDEsIDB4MzEsIDB4NjgsIDB4MjgsIDB4ZmEsIDB4ZDMsIDB4NzAsIDB4NDcsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDAwLCAweDIyLCAweDg4LCAweDQyLCAweDAzLCAweGQzLCAweDQwLCAweDFhLCAweDAxLCAweDMyLCAweDg4LCAweDQyLAotMHhmYiwgMHhkMiwgMHgxMCwgMHgxYywgMHg3MCwgMHg0NywgMHg4OCwgMHg0MiwgMHgwMiwgMHhkMywgMHg0MCwgMHgxYSwKLTB4ODgsIDB4NDIsIDB4ZmMsIDB4ZDIsIDB4NzAsIDB4NDcsIDB4OTAsIDB4YjQsIDB4MDEsIDB4MWMsIDB4ZmYsIDB4MjcsCi0weDA0LCAweDI5LCAweDI3LCAweGRhLCAweDAwLCAweDIwLCAweDE0LCAweDRhLCAweDQzLCAweDAwLCAweDFiLCAweDE4LAotMHhkYiwgMHgwMCwgMHhkNCwgMHg1OCwgMHg2MywgMHgwYywgMHgxYSwgMHhkMiwgMHg0YiwgMHgwMCwgMHg1OSwgMHgxOCwKLTB4YzksIDB4MDAsIDB4NTcsIDB4NTgsIDB4NDMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4ZGIsIDB4MDAsIDB4ZDcsIDB4NTAsCi0weDg5LCAweDE4LCAweDlhLCAweDE4LCAweDRmLCAweDY4LCAweGMwLCAweDQ2LCAweDU3LCAweDYwLCAweDhiLCAweDY4LAotMHhjMCwgMHg0NiwgMHg5MywgMHg2MCwgMHgwYiwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxMywgMHg2MSwgMHg0YiwgMHg2OSwKLTB4YzAsIDB4NDYsIDB4NTMsIDB4NjEsIDB4YzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZDEsIDB4NjAsIDB4OTAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDA0LCAweDI4LCAweGQ5LCAweGRiLAotMHgzOCwgMHgxYywgMHhmNiwgMHhlNywgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHhmNywgMHhiNSwgMHhjNCwgMHhiMCwKLTB4MDQsIDB4MWMsIDB4MDAsIDB4MjAsIDB4NDYsIDB4OWEsIDB4MTEsIDB4MjEsIDB4MTEsIDB4NDAsIDB4NmUsIDB4ZDAsCi0weDAwLCAweDI3LCAweDc5LCAweDAwLCAweGM5LCAweDE5LCAweGM5LCAweDAwLCAweDU3LCAweDRhLCAweDUxLCAweDU4LAotMHg0OSwgMHgwYywgMHgwMywgMHhkMiwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwNCwgMHhlMCwKLTB4NzksIDB4MWMsIDB4MGYsIDB4MDYsIDB4M2YsIDB4MGUsIDB4MDQsIDB4MmYsIDB4ZWYsIDB4ZGIsIDB4MDAsIDB4MjgsCi0weDViLCAweGQwLCAweDAwLCAweDI2LCAweDAwLCAweDIyLCAweDAwLCAweDkyLCAweDQwLCAweDIzLCAweDAwLCAweDIxLAotMHgwMCwgMHgyMCwgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgMHg4OCwgMHhmYSwgMHgwNCwgMHhhOSwgMHgwMCwgMHgyMCwKLTB4ODIsIDB4MDAsIDB4OGEsIDB4NTgsIDB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4YTIsIDB4NDIsIDB4MDMsIDB4ZDEsCi0weDcyLCAweDFjLCAweDE2LCAweDA2LCAweDM2LCAweDBlLCAweDA0LCAweGUwLCAweDAxLCAweDMwLCAweDAwLCAweDA2LAotMHgwMCwgMHgwZSwgMHgxMCwgMHgyOCwgMHhmMCwgMHhkYiwgMHgwMCwgMHgyZSwgMHgzZCwgMHhkMCwgMHgwNCwgMHgyYywKLTB4M2UsIDB4ZDEsIDB4ODAsIDB4MDAsIDB4MDgsIDB4NTgsIDB4NDAsIDB4MDEsIDB4ODAsIDB4MGQsIDB4MDAsIDB4MjIsCi0weDAwLCAweDkyLCAweDEwLCAweDIzLCAweDAwLCAweDIxLCAweDAyLCAweGFhLCAweDAwLCAweGYwLCAweDY4LCAweGZhLAotMHgwMCwgMHgyMSwgMHgwMSwgMHg5MSwgMHgwMiwgMHhhOCwgMHgwNSwgMHg5OSwgMHg0OSwgMHgwYywgMHg4OSwgMHgwNSwKLTB4MjksIDB4ZDAsIDB4YzEsIDB4NjgsIDB4MGEsIDB4MDYsIDB4MTIsIDB4MGUsIDB4NDUsIDB4OWIsIDB4OWEsIDB4NDIsCi0weDExLCAweGQxLCAweGMwLCAweDY4LCAweDQwLCAweDAxLCAweDg2LCAweDBkLCAweDAwLCAweDIyLCAweDAwLCAweDkyLAotMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHgzMCwgMHgxYywgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgMHg1MCwgMHhmYSwKLTB4MDEsIDB4OTksIDB4MDIsIDB4OWQsIDB4NDgsIDB4MWMsIDB4MDEsIDB4MDYsCi0weDA5LCAweDBlLCAweDAxLCAweDkxLCAweDBlLCAweGUwLCAweDQ4LCAweDAxLCAweDg2LCAweDBkLCAweDAwLCAweDIyLAotMHgwMCwgMHg5MiwgMHgxMCwgMHgyMywgMHgwMCwgMHgyMSwgMHgzMCwgMHgxYywgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwKLTB4M2YsIDB4ZmEsIDB4MDIsIDB4YTgsIDB4MDUsIDB4OTksIDB4NDksIDB4MGMsIDB4ODksIDB4MDUsIDB4ZDgsIDB4ZDEsCi0weDAxLCAweDk5LCAweDAwLCAweDI5LCAweDBmLCAweGQxLCAweGZmLCAweDIwLCAweDNkLCAweGUwLCAweDQwLCAweGUwLAotMHg4MCwgMHgwMCwgMHgwOCwgMHg1OCwgMHg0MCwgMHgwMSwgMHg4NiwgMHgwZCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwKLTB4MGMsIDB4MjMsIDB4MDAsIDB4MjEsIDB4MzAsIDB4MWMsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4MjgsIDB4ZmEsCi0weDAyLCAweDlkLCAweDAxLCAweDIwLCAweDAwLCAweDA0LCAweDQ2LCAweDlhLCAweDEwLCAweDQzLCAweDc5LCAweDAwLAotMHhjOSwgMHgxOSwgMHhjOSwgMHgwMCwgMHgxNywgMHg0YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg1MCwgMHgzMCwgMHgxYywKLTB4OGUsIDB4MTgsIDB4NzAsIDB4NjAsIDB4MTAsIDB4MjAsIDB4MDQsIDB4MmMsIDB4MDAsIDB4ZDAsIDB4MGMsIDB4MjAsCi0weDA0LCAweDFjLCAweGIwLCAweDYwLCAweDAwLCAweDIwLCAweDIwLCAweDIxLCAweDQ2LCAweDlhLCAweDExLCAweDQwLAotMHgyMCwgMHgyOSwgMHgwMCwgMHhkMCwgMHgyOCwgMHgxYywgMHgzMCwgMHg2MSwgMHgyOCwgMHgxOSwgMHhmZiwgMHgyMSwKLTB4ZmYsIDB4MzAsIDB4MDgsIDB4MzAsIDB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4MTksIDB4ZmYsIDB4NDMsIDB4MDEsCi0weDE4LCAweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDFiLCAweDcwLCAweDYxLCAweDAwLCAweDIwLCAweDUwLCAweDIxLAotMHg0NiwgMHg5YSwgMHgxMSwgMHg0MCwgMHg1MCwgMHgyOSwgMHgwMCwgMHhkMSwgMHgyOCwgMHgxYywgMHhmMCwgMHg2MCwKLTB4MzgsIDB4MWMsIDB4NDcsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZmYsIDB4MjAsCi0weGY5LCAweGU3LCAweDAwLCAweDAwLCAweDQwLCAweGFiLCAweDIwLCAweDQwLCAweDgwLCAweGI0LCAweDAwLCAweDIzLAotMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwgMHgwNiwgMHhkOSwgMHg4NywgMHg1YywgMHg3YiwgMHg0MCwgMHgxYiwgMHgwNiwKLTB4MWIsIDB4MGUsIDB4MDEsIDB4MzIsIDB4OGEsIDB4NDIsIDB4ZjgsIDB4ZDMsIDB4ZDgsIDB4NDMsIDB4MDAsIDB4MDYsCi0weDAwLCAweDBlLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweGYwLCAweGI1LCAweGM2LCAweGIwLCAweDA0LCAweDI4LAotMHgwNywgMHhkYSwgMHg0MSwgMHgwMCwgMHgwOSwgMHgxOCwgMHhjOSwgMHgwMCwgMHg0NSwgMHg5MSwgMHg0MSwgMHg0YSwKLTB4NTEsIDB4NTgsIDB4NGIsIDB4MGMsIDB4MDIsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4NzYsIDB4ZTAsCi0weDAxLCAweDIzLCAweDViLCAweDA0LCAweDE5LCAweDQwLCAweDQzLCAweDAwLCAweDE4LCAweDE4LCAweGMwLCAweDAwLAotMHgzYSwgMHg0YSwgMHgxNCwgMHgxOCwgMHgwMCwgMHgyOSwgMHg2MSwgMHhkMCwgMHgwMCwgMHgyMSwgMHgwMiwgMHg5MSwKLTB4MjAsIDB4NjksIDB4YTEsIDB4NjgsIDB4NDUsIDB4MTgsIDB4MzAsIDB4ZDAsIDB4ZmYsIDB4MjEsIDB4NjgsIDB4MWUsCi0weDA5LCAweDMxLCAweGZmLCAweGY3LCAweGNkLCAweGZlLCAweDYxLCAweDY4LCAweDQwLCAweDE4LCAweDAxLCAweDkwLAotMHgwMSwgMHg5OCwgMHg4MSwgMHg0MiwgMHgwMiwgMHhkMSwgMHhhNiwgMHg2OCwgMHhhZiwgMHgxYiwgMHgwOSwgMHhlMCwKLTB4MDAsIDB4MjYsIDB4ZmYsIDB4MjEsIDB4MjgsIDB4MWMsIDB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4YzcsIDB4ZmUsCi0weDA3LCAweDFjLCAweDAxLCAweGQxLCAweGZmLCAweDI3LCAweDA5LCAweDM3LCAweDAwLCAweDIyLCAweDAwLCAweDkyLAotMHgwMSwgMHg5OCwgMHgzMSwgMHgxYywgMHgwMywgMHhhYSwgMHgzYiwgMHgxYywgMHgwMCwgMHhmMCwgMHg5ZSwgMHhmOSwKLTB4MDMsIDB4YTgsIDB4MzksIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YWMsIDB4ZmYsIDB4YzAsIDB4NDMsIDB4MDIsIDB4OTksCi0weDQ4LCAweDQwLCAweDAxLCAweDA2LCAweDA5LCAweDBlLCAweDAyLCAweDkxLCAweGVkLCAweDFiLCAweGEwLCAweDY4LAotMHhhOCwgMHg0MiwgMHgwMCwgMHhkMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyZCwgMHhjZSwgMHhkOCwgMHgwMiwgMHg5OSwKLTB4Y2YsIDB4NDMsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsIDB4MGMsIDB4MjMsIDB4MDAsIDB4MjEsIDB4NjAsIDB4NjgsCi0weDAzLCAweGFhLCAweDAwLCAweGYwLCAweDgzLCAweGY5LCAweDIwLCAweDY5LCAweGMwLCAweDQ2LCAweDAzLCAweDkwLAotMHgwNSwgMHg5OCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgzOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwOCwgMHg0MywKLTB4MDUsIDB4OTAsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4OTgsIDB4NDMsIDB4MDUsIDB4OTAsIDB4MGMsIDB4MjEsCi0weDAzLCAweGE4LCAweGZmLCAweGY3LCAweDgzLCAweGZmLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAweDA1LCAweDk5LAotMHg5OSwgMHg0MywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMiwgMHgwOCwgMHg0MywgMHgwNSwgMHg5MCwKLTB4MGMsIDB4MjMsIDB4MDAsIDB4MjEsIDB4NjAsIDB4NjgsIDB4MDMsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4Y2EsIDB4ZjksCi0weDAwLCAweDIwLCAweDQ1LCAweDk5LCAweDA2LCAweDRhLCAweGMwLCAweDQ2LCAweDUwLCAweDUwLCAweGMxLCAweDQzLAotMHg2MSwgMHg2MCwgMHhhMSwgMHg2MCwgMHhlMSwgMHg2MCwgMHgyMSwgMHg2MSwgMHg2MSwgMHg2MSwgMHg0NiwgMHhiMCwKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsCi0weGIwLCAweGI0LCAweDRjLCAweDQyLCAweDAwLCAweDI5LCAweDAwLCAweGRiLAotMHgwYywgMHgxYywgMHgwMCwgMHgyNywgMHhmZiwgMHg0MywgMHgwNCwgMHgyOCwgMHgyMSwgMHhkYSwgMHgxMiwgMHg0ZCwKLTB4NDMsIDB4MDAsIDB4MTgsIDB4MTgsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MTksIDB4MDEsIDB4MmEsIDB4MDUsIDB4ZDAsCi0weDAyLCAweDJhLCAweDA5LCAweGQwLCAweDAzLCAweDJhLCAweDE2LCAweGQxLCAweDAxLCAweDY5LCAweDBiLCAweGUwLAotMHgwMCwgMHgyOSwgMHgxMiwgMHhkYiwgMHgwMiwgMHg2OSwgMHg4YSwgMHg0MiwgMHgwZiwgMHhkMywgMHgwNSwgMHhlMCwKLTB4MDAsIDB4MjksIDB4MDcsIDB4ZGEsIDB4YzEsIDB4NjgsIDB4YTEsIDB4NDIsIDB4MDksIDB4ZDMsIDB4MDksIDB4MWIsCi0weGMxLCAweDYwLCAweGMwLCAweDY4LCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweGMxLCAweDY4LCAweDA5LCAweDE5LAotMHgwMiwgMHg2OSwgMHg5MSwgMHg0MiwgMHhmNiwgMHhkOSwgMHgzOCwgMHgxYywgMHhmNiwgMHhlNywgMHgwMCwgMHgwMCwKLTB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4ZjAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MTcsIDB4MWMsIDB4MGQsIDB4MWMsCi0weDAwLCAweDIxLCAweDAyLCAweDkxLCAweDQyLCAweDAwLCAweDEyLCAweDE4LCAweGQyLCAweDAwLCAweDJjLCAweDQ5LAotMHg4YiwgMHg1OCwgMHgxYiwgMHgwNiwgMHgxYiwgMHgwZSwgMHgwMSwgMHg5MywgMHgwMCwgMHgyMywgMHhkYiwgMHg0MywKLTB4MDQsIDB4MjgsIDB4MDIsIDB4ZGEsIDB4MDEsIDB4OTgsIDB4NDAsIDB4MDgsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4MWMsCi0weDQ2LCAweGUwLCAweDU0LCAweDE4LCAweGUwLCAweDY4LCAweGMyLCAweDE5LCAweDIxLCAweDY5LCAweDhhLCAweDQyLAotMHgwMCwgMHhkOSwgMHgwZiwgMHgxYSwgMHgwMCwgMHgyZiwgMHgzYywgMHhkOSwgMHhhMCwgMHg2OCwgMHhlMSwgMHg2OCwKLTB4NDAsIDB4MTgsIDB4ZmYsIDB4MjEsIDB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4MGQsIDB4ZmUsIDB4NjEsIDB4NjgsCi0weDQ2LCAweDE4LCAweGEwLCAweDY4LCAweGUxLCAweDY4LCAweDQwLCAweDE4LCAweGZmLCAweDIxLCAweDA5LCAweDMxLAotMHhmZiwgMHhmNywgMHgwZCwgMHhmZSwgMHhjMiwgMHgxOSwgMHhmZiwgMHgyMSwgMHgwOSwgMHgzMSwgMHg4YSwgMHg0MiwKLTB4MTQsIDB4ZDksIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MGIsIDB4MWEsIDB4MDMsIDB4OTMsCi0weDAxLCAweDFjLCAweDMwLCAweDFjLCAweDJhLCAweDFjLCAweDAwLCAweGYwLCAweGUxLCAweGY4LCAweGUwLCAweDY4LAotMHgwMywgMHg5YiwgMHhjMCwgMHgxOCwgMHhlMCwgMHg2MCwgMHgwMywgMHg5YiwgMHg1ZCwgMHgxOSwgMHhmZiwgMHgxYSwKLTB4MDIsIDB4OTgsIDB4MTgsIDB4MTgsIDB4MDIsIDB4OTAsIDB4MTAsIDB4ZTAsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsCi0weDAwLCAweDkyLCAweDAxLCAweDFjLCAweDMwLCAweDFjLCAweDJhLCAweDFjLCAweDNiLCAweDFjLCAweDAwLCAweGYwLAotMHhjZCwgMHhmOCwgMHhlMCwgMHg2OCwgMHhjMCwgMHgxOSwgMHhlZCwgMHgxOSwgMHhlMCwgMHg2MCwgMHgwMiwgMHg5OCwKLTB4YzAsIDB4MTksIDB4MDIsIDB4OTAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MmYsIDB4YzIsIDB4ZDgsIDB4MDIsIDB4OTgsCi0weDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDQwLCAweGFiLCAweDIwLCAweDQwLAotMHhmMCwgMHhiNSwgMHg4MywgMHhiMCwgMHgxNywgMHgxYywgMHgwZCwgMHgxYywgMHgwMCwgMHgyMSwgMHgwMSwgMHg5MSwKLTB4NDIsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZDIsIDB4MDAsIDB4MDIsIDB4OTIsIDB4MzAsIDB4NDksIDB4OGEsIDB4NTgsCi0weDEyLCAweDA2LCAweDEyLCAweDBlLCAweDAwLCAweDI0LCAweGU0LCAweDQzLCAweDA0LCAweDI4LCAweDAxLCAweGRhLAotMHg1MCwgMHgwOSwgMHgwMSwgMHhkMiwgMHgyMCwgMHgxYywgMHg1MSwgMHhlMCwgMHgwMiwgMHg5YSwgMHg1NCwgMHgxOCwKLTB4ZTAsIDB4NjgsIDB4YzIsIDB4MTksIDB4NjAsIDB4NjksIDB4ODIsIDB4NDIsIDB4MDEsIDB4ZDksIDB4MjIsIDB4NjksCi0weDg3LCAweDFhLCAweDAwLCAweDJmLCAweDQ1LCAweGQ5LCAweDI1LCAweDRlLCAweGEwLCAweDY4LCAweGUxLCAweDY4LAotMHg0MCwgMHgxOCwgMHhmZiwgMHgyMSwgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHhhNywgMHhmZCwgMHg2MSwgMHg2OCwKLTB4NDAsIDB4MTgsIDB4MDAsIDB4OTAsIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsIDB4NDAsIDB4MTgsIDB4ZmYsIDB4MjEsCi0weDA5LCAweDMxLCAweGZmLCAweGY3LCAweGE2LCAweGZkLCAweDAyLCAweDlhLCAweGIxLCAweDU4LCAweDAxLCAweDIzLAotMHg1YiwgMHgwNCwgMHgxOSwgMHg0MywgMHhiMSwgMHg1MCwgMHhjMSwgMHgxOSwgMHhmZiwgMHgyMiwgMHgwOSwgMHgzMiwKLTB4OTEsIDB4NDIsIDB4MTMsIDB4ZDksIDB4MTMsIDB4MWEsIDB4MDEsIDB4MWMsIDB4MDAsIDB4OTgsIDB4MmEsIDB4MWMsCi0weDFlLCAweDFjLCAweDAwLCAweGYwLCAweGRmLCAweGY4LCAweGUwLCAweDY4LCAweDgwLCAweDE5LCAweDc1LCAweDE5LAotMHhlMCwgMHg2MCwgMHgyMSwgMHg2OSwgMHg4OCwgMHg0MiwgMHgwMCwgMHhkOSwgMHgyMCwgMHg2MSwgMHhiZiwgMHgxYiwKLTB4MDEsIDB4OTgsIDB4MzAsIDB4MTgsIDB4MDEsIDB4OTAsIDB4MTIsIDB4ZTAsIDB4MDEsIDB4MWMsIDB4MDAsIDB4OWUsCi0weDMwLCAweDFjLCAweDJhLCAweDFjLCAweDNiLCAweDFjLCAweDAwLCAweGYwLCAweGNiLCAweGY4LCAweGUwLCAweDY4LAotMHhjMCwgMHgxOSwgMHhlZCwgMHgxOSwgMHhlMCwgMHg2MCwgMHgyMSwgMHg2OSwgMHg4OCwgMHg0MiwgMHgwMCwgMHhkOSwKLTB4MjAsIDB4NjEsIDB4MDEsIDB4OTgsIDB4YzAsIDB4MTksIDB4MDEsIDB4OTAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MmYsCi0weGI5LCAweGQ4LCAweDAxLCAweDk4LCAweDAzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHhiMCwgMHhiNSwgMHhjMywgMHhiMCwKLTB4MGMsIDB4MWMsIDB4MDAsIDB4MjcsIDB4ZmEsIDB4NDMsIDB4MDQsIDB4MjgsIDB4MDYsIDB4ZGEsIDB4NDEsIDB4MDAsCi0weDA5LCAweDE4LCAweGM5LCAweDAwLCAweDE0LCAweDQ4LCAweDQ1LCAweDU4LCAweDZiLCAweDBjLCAweDA0LCAweGQyLAotMHgxMCwgMHgxYywgMHg0MywgMHhiMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2MiwgMHgwOSwKLTB4MWIsIDB4ZDMsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsIDB4MDgsIDB4MTgsIDB4NDAsIDB4NjgsIDB4MGMsIDB4MjMsCi0weDAwLCAweDIxLCAweDAxLCAweGFhLCAweDAwLCAweGYwLCAweDMwLCAweGY4LCAweDExLCAweDJjLCAweDBkLCAweGQwLAotMHgxMiwgMHgyYywgMHgwZCwgMHhkMCwgMHgxMywgMHgyYywgMHgwNSwgMHhkMCwgMHgxNCwgMHgyYywgMHgwYSwgMHhkMSwKLTB4MDMsIDB4OTgsIDB4MDAsIDB4MDQsIDB4MDcsIDB4MGUsIDB4MDYsIDB4ZTAsIDB4MDMsIDB4OTgsIDB4MDcsIDB4MDYsCi0weDNmLCAweDBlLCAweDAyLCAweGUwLCAweDAxLCAweDlmLCAweDAwLCAweGUwLCAweDAyLCAweDlmLCAweDM4LCAweDFjLAotMHhkYiwgMHhlNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHgwMywgMHg0OSwgMHgwMCwgMHgyMCwKLTB4MDAsIDB4MjIsIDB4MGEsIDB4NTQsIDB4MDEsIDB4MzAsIDB4NjAsIDB4MjgsIDB4ZmIsIDB4ZDMsIDB4NzAsIDB4NDcsCi0weDQwLCAweGFiLCAweDIwLCAweDQwLCAweDAwLCAweGI1LCAweDAyLCAweGYwLCAweDZmLCAweGZhLCAweDU3LCAweDIwLAotMHgwMiwgMHhmMCwgMHhjYywgMHhmOSwgMHgwMiwgMHhmMCwgMHg0MCwgMHhmOSwgMHgwMCwgMHgwYSwgMHhmYiwgMHhkMywKLTB4MDIsIDB4ZjAsIDB4NGUsIDB4ZmEsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsCi0weDA3LCAweDlkLCAweDE0LCAweDFjLCAweDFmLCAweDFjLCAweDMwLCAweDRhLCAweGQyLCAweDZmLCAweDIwLCAweDIzLAotMHgxNiwgMHg2OCwgMHg5ZSwgMHg0MywgMHgxNiwgMHg2MCwgMHgzMywgMHgxYywgMHhmZiwgMHgyMiwgMHgwMSwgMHgzMiwKLTB4MmEsIDB4NDAsIDB4NDAsIDB4MDIsIDB4MDgsIDB4NDMsIDB4MDUsIDB4MGEsIDB4MDYsIDB4MWMsIDB4MDAsIDB4MGMsCi0weDAxLCAweDkwLCAweDAwLCAweDJhLCAweDIwLCAweGQwLCAweDAyLCAweGYwLCAweDRiLCAweGZhLCAweDUzLCAweDIwLAotMHgwMiwgMHhmMCwgMHhhOCwgMHhmOSwgMHgwMSwgMHg5OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHgwMiwgMHhmMCwKLTB4YTMsIDB4ZjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4YTAsIDB4ZjksIDB4MzAsIDB4MWMsIDB4MDIsIDB4ZjAsCi0weDlkLCAweGY5LCAweDAyLCAweGYwLCAweDIzLCAweGZhLCAweGZmLCAweGY3LCAweGM3LCAweGZmLCAweDAyLCAweGYwLAotMHgzNywgMHhmYSwgMHg1NCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg5NCwgMHhmOSwgMHgwMCwgMHg5OCwgMHgwMiwgMHhmMCwKLTB4OTEsIDB4ZjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4OGUsIDB4ZjksIDB4MzAsIDB4MWMsIDB4MTQsIDB4ZTAsCi0weDAyLCAweGYwLCAweDJhLCAweGZhLCAweDUyLCAweDIwLCAweDAyLCAweGYwLCAweDg3LCAweGY5LCAweDAxLCAweDk4LAotMHgwMiwgMHhmMCwgMHg4NCwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHg4MSwgMHhmOSwgMHgzMCwgMHgxYywKLTB4MDIsIDB4ZjAsIDB4N2UsIDB4ZjksIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4N2IsIDB4ZjksIDB4MDAsIDB4MjAsCi0weDAyLCAweGYwLCAweDc4LCAweGY5LCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweDc1LCAweGY5LCAweDAwLCAweDIwLAotMHgwMiwgMHhmMCwgMHg3MiwgMHhmOSwgMHgwMCwgMHgyZiwgMHgwNSwgMHhkOSwgMHgwMiwgMHhmMCwgMHhlNCwgMHhmOCwKLTB4MjAsIDB4NzAsIDB4MDEsIDB4MzQsIDB4MDEsIDB4M2YsIDB4ZjksIDB4ZDEsIDB4MDIsIDB4ZjAsIDB4ZjAsIDB4ZjksCi0weDA0LCAweDRhLCAweGQwLCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLAotMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsIDB4MTQsIDB4MWMsIDB4MWYsIDB4MWMsIDB4NDIsIDB4MDIsIDB4MGEsIDB4NDMsCi0weDE1LCAweDFjLCAweDAxLCAweDI4LCAweDU0LCAweGQwLCAweDJjLCAweDQ5LCAweGM4LCAweDZmLCAweDIwLCAweDIzLAotMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywgMHgwMiwgMHg2MCwgMHhjOCwgMHg2ZiwgMHg0MCwgMHgyMywgMHgwMSwgMHg2OCwKLTB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDIsIDB4ZjAsIDB4ZTYsIDB4ZjksIDB4NTMsIDB4MjAsIDB4MDIsIDB4ZjAsCi0weDQzLCAweGY5LCAweDI4LCAweDBjLCAweDA2LCAweDFjLCAweDAyLCAweGYwLCAweDNmLCAweGY5LCAweDI4LCAweDBhLAotMHgwMSwgMHg5MCwgMHgwMCwgMHg5MCwgMHgwMiwgMHhmMCwgMHgzYSwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwKLTB4MzcsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4YmQsIDB4ZjksIDB4ZmYsIDB4ZjcsIDB4NjEsIDB4ZmYsIDB4MDIsIDB4ZjAsCi0weGQxLCAweGY5LCAweDg0LCAweDIwLCAweDAyLCAweGYwLCAweDJlLCAweGY5LCAweDMwLCAweDFjLCAweDAyLCAweGYwLAotMHgyYiwgMHhmOSwgMHgwMCwgMHg5OCwgMHgwMiwgMHhmMCwgMHgyOCwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwKLTB4MjUsIDB4ZjksIDB4MDAsIDB4MmYsIDB4MDUsIDB4ZDksIDB4MjAsIDB4NzgsIDB4MDEsIDB4MzQsIDB4MDIsIDB4ZjAsCi0weDFmLCAweGY5LCAweDAxLCAweDNmLCAweGY5LCAweGQxLCAweDAyLCAweGYwLCAweGEzLCAweGY5LCAweDAyLCAweGYwLAotMHhiOSwgMHhmOSwgMHg4MywgMHgyMCwgMHgwMiwgMHhmMCwgMHgxNiwgMHhmOSwgMHgzMCwgMHgxYywgMHgwMiwgMHhmMCwKLTB4MTMsIDB4ZjksIDB4MDEsIDB4OTgsIDB4MDIsIDB4ZjAsIDB4MTAsIDB4ZjksCi0weDI4LCAweDFjLCAweDAyLCAweGYwLCAweDBkLCAweGY5LCAweDAyLCAweGYwLCAweDkzLCAweGY5LCAweGZmLCAweGY3LAotMHgzNywgMHhmZiwgMHgwNywgMHg0OSwgMHhjOCwgMHg2ZiwgMHg0MCwgMHgyMywgMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywKLTB4MDIsIDB4NjAsIDB4YzgsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsCi0weDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNSwgMHgwMSwgMHhmMCwgMHg4ZiwgMHhmOCwgMHgwNiwgMHg0ZiwKLTB4YzAsIDB4NDYsIDB4ZjgsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4ZjIsIDB4ZjgsIDB4NzgsIDB4ODAsIDB4MDEsIDB4ZjAsCi0weGIxLCAweGY4LCAweDM4LCAweDcxLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHhmMCwgMHgwNSwgMHhmOSwgMHgwMiwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDgsIDB4ODAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDBiLCAweDQ4LCAweGMxLCAweDY4LCAweDAxLCAweDI5LCAweDExLCAweGQxLCAweGMxLCAweDZmLCAweDAyLCAweDIzLAotMHgwYSwgMHg2OCwgMHgxYSwgMHg0MywgMHgwYSwgMHg2MCwgMHhjMSwgMHg2ZiwgMHg4MCwgMHgyMywgMHgwYSwgMHg2OCwKLTB4MWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4YzEsIDB4MTgsIDB4MDgsIDB4NjgsIDB4ODIsIDB4MjMsIDB4MDIsIDB4NjgsCi0weDFhLCAweDQzLCAweDAyLCAweDYwLCAweDAwLCAweDIwLCAweDA4LCAweDgxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNCwgMHg0YSwgMHg0OSwgMHhjYSwgMHgxZCwgMHg5ZCwgMHgzMiwKLTB4MDAsIDB4MjAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ZDcsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MTcsIDB4MjgsCi0weGZhLCAweGQzLCAweDQ2LCAweDRjLCAweDAwLCAweDIwLCAweDgyLCAweDAwLCAweGE3LCAweDUwLCAweDAxLCAweDMwLAotMHgyMCwgMHgyOCwgMHhmYSwgMHhkMywgMHg0MywgMHg0YSwgMHgwMCwgMHgyMCwgMHg4MywgMHgwMCwgMHhkNywgMHg1MCwKLTB4MDEsIDB4MzAsIDB4MjAsIDB4MjgsIDB4ZmEsIDB4ZDMsIDB4YTcsIDB4NjEsIDB4OTcsIDB4NjEsIDB4NGYsIDB4NjUsCi0weDhmLCAweDY1LCAweDNmLCAweDRkLCAweGMwLCAweDQ2LCAweDJmLCAweDYwLCAweDZmLCAweDYwLCAweGFmLCAweDYwLAotMHhhZiwgMHg2MSwgMHhlZiwgMHg2MCwgMHgyZiwgMHg2MSwgMHg2ZiwgMHg2MSwgMHgwMCwgMHgyMCwgMHhjMSwgMHgwMCwKLTB4MDksIDB4MTgsIDB4NDksIDB4MDEsIDB4MzUsIDB4NGIsIDB4YzksIDB4MTgsIDB4ODYsIDB4MDAsIDB4Y2IsIDB4MWQsCi0weGY5LCAweDMzLCAweDM0LCAweDRjLCAweDM0LCAweDE5LCAweGUzLCAweDYzLCAweDExLCAweDIzLCAweDViLCAweDAxLAotMHhjYiwgMHgxOCwgMHg2MywgMHg2MywgMHgwZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhjYiwgMHgxOCwgMHhiNCwgMHgxOCwKLTB4ZTMsIDB4NjMsIDB4MjMsIDB4MjMsIDB4NWIsIDB4MDEsIDB4YzksIDB4MTgsIDB4NjEsIDB4NjMsIDB4MDEsIDB4MzAsCi0weDAyLCAweDI4LCAweGU0LCAweGRiLCAweDI5LCAweDQ4LCAweGMxLCAweDFkLCAweGY5LCAweDMxLCAweDI5LCAweDRjLAotMHhjMCwgMHg0NiwgMHhhMSwgMHg2MiwgMHg2MSwgMHg2YiwgMHgwZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhlMSwgMHg2MiwKLTB4YzEsIDB4MTgsIDB4OTEsIDB4NjIsIDB4NTEsIDB4NmIsIDB4YzAsIDB4NDYsIDB4ZDEsIDB4NjIsIDB4MDgsIDB4MjEsCi0weGUxLCAweDY0LCAweDI1LCAweDQ5LCAweGMwLCAweDQ2LCAweDIxLCAweDY1LCAweDI0LCAweDQ5LCAweDBiLCAweDY5LAotMHhjMCwgMHg0NiwgMHg2MywgMHg2NSwgMHhjMywgMHgxZCwgMHg0ZCwgMHgzMywgMHhlMywgMHg2NSwgMHgyNSwgMHg2NiwKLTB4OGIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NjMsIDB4NjYsIDB4Y2IsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YTMsIDB4NjYsCi0weDFlLCAweDRiLCAweGMwLCAweDQ2LCAweGUzLCAweDY2LCAweDI3LCAweDY3LCAweDBiLCAweDIzLCAweGRiLCAweDAxLAotMHhjMywgMHgxOCwgMHhhMywgMHg2NywgMHg2NywgMHg2NywgMHgwMSwgMHgyNiwgMHhlMywgMHgxZCwgMHg2OSwgMHgzMywKLTB4NjYsIDB4NjEsIDB4ZTcsIDB4NjEsIDB4MWYsIDB4NzMsIDB4MDIsIDB4MjMsIDB4ZDMsIDB4NjQsIDB4MTcsIDB4NGIsCi0weGMwLCAweDQ2LCAweDEzLCAweDY1LCAweGNiLCAweDY5LCAweGMwLCAweDQ2LCAweDUzLCAweDY1LCAweGMzLCAweDFkLAotMHg1MSwgMHgzMywgMHhkMywgMHg2NSwgMHgyYiwgMHgxZCwgMHgxMywgMHg2NiwgMHg0YiwgMHg2OSwgMHhjMCwgMHg0NiwKLTB4NTMsIDB4NjYsIDB4ODksIDB4NjksIDB4YzAsIDB4NDYsIDB4OTEsIDB4NjYsIDB4MGYsIDB4NDksIDB4YzAsIDB4NDYsCi0weGQxLCAweDY2LCAweDE2LCAweDY3LCAweDBmLCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDkwLCAweDY3LAotMHg1NiwgMHg2NywgMHhkNywgMHg2MSwgMHhkMCwgMHgxZCwgMHg2OSwgMHgzMCwgMHg1NiwgMHg2MSwgMHgwNywgMHg3MywKLTB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZTQsIDB4MmMsIDB4MDAsIDB4ODAsCi0weDY0LCAweDJkLCAweDAwLCAweDgwLCAweDkwLCAweGVlLCAweDIwLCAweDQwLCAweDMwLCAweDAxLCAweDE4LCAweDAwLAotMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHg1NSwgMHhmZiwgMHhmZiwgMHgzOCwgMHgwMSwgMHgxOCwgMHgwMCwKLTB4MTAsIDB4NTUsIDB4ZmYsIDB4ZmYsIDB4OTAsIDB4YjQsIDB4MDAsIDB4MjEsIDB4MWUsIDB4NGEsIDB4YmIsIDB4MjMsCi0weDFiLCAweDAxLCAweGQ3LCAweDE4LCAweGY5LCAweDczLCAweDE5LCAweDIzLAotMHhkYiwgMHgwMSwgMHhkMCwgMHgxOCwgMHgwMSwgMHgyNCwgMHhjZCwgMHgyMywgMHgxYiwgMHgwMSwgMHhkMywgMHgxOCwKLTB4YzEsIDB4NjEsIDB4MWMsIDB4NzAsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4OTksIDB4NjAsCi0weGI5LCAweDczLCAweDU5LCAweDYxLCAweDJmLCAweDIzLCAweDliLCAweDAxLCAweGQzLCAweDE4LCAweDE5LCAweDYwLAotMHgxMywgMHg0YiwgMHg1MSwgMHgyNywgMHhiZiwgMHgwMywgMHgwMywgMHg2MywgMHgzYiwgMHg2MCwgMHg4NCwgMHg2OSwKLTB4ZTQsIDB4MTgsIDB4NDQsIDB4NjMsIDB4MDQsIDB4M2MsIDB4N2MsIDB4NjAsIDB4MDEsIDB4MjQsIDB4ZTQsIDB4MDIsCi0weDg0LCAweDYzLCAweDBlLCAweDRjLCAweGMwLCAweDQ2LCAweGJjLCAweDYwLCAweDA0LCAweDZiLCAweGMwLCAweDQ2LAotMHg0NCwgMHg2MiwgMHg4NCwgMHg2OSwgMHhlNCwgMHgxOCwgMHgwYiwgMHg0YiwgMHhlMywgMHgxOCwgMHhmYiwgMHg2MCwKLTB4MDMsIDB4NmIsIDB4YzAsIDB4NDYsIDB4ODMsIDB4NjIsIDB4NDMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDMsIDB4NjIsCi0weGMxLCAweDYzLCAweDUxLCAweDY0LCAweDkxLCAweDY0LCAweGQxLCAweDY1LCAweGQxLCAweDY2LCAweDkwLCAweGJjLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwKLTB4ZmMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4OTAsIDB4YjQsIDB4MDAsIDB4MjIsCi0weDFiLCAweDQ5LCAweGM5LCAweDIzLCAweDFiLCAweDAxLCAweGM4LCAweDE4LCAweDAyLCAweDcxLCAweDAxLCAweDIwLAotMHhiYiwgMHgyMywgMHgxYiwgMHgwMSwgMHhjYiwgMHgxOCwgMHg1OCwgMHg3MywgMHgxNywgMHg0OCwgMHgwMywgMHgxYywKLTB4MDAsIDB4MjcsIDB4ZGMsIDB4MWQsIDB4YzEsIDB4MzQsIDB4MWMsIDB4NjUsIDB4MjMsIDB4MWMsIDB4MDEsIDB4MzcsCi0weDNmLCAweDJmLCAweGY4LCAweGQzLCAweDFhLCAweDY1LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGNmLCAweDE4LAotMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjYiwgMHgxOCwgMHgzYSwgMHg2MSwgMHg5OCwgMHg2MSwgMHg0MCwgMHgyMCwKLTB4ZjgsIDB4NjAsIDB4ZGEsIDB4NjEsIDB4MWEsIDB4NjIsIDB4Y2EsIDB4NjQsIDB4MGEsIDB4NjYsIDB4MGMsIDB4NDgsCi0weGMwLCAweDQ2LCAweGMyLCAweDYwLCAweDBiLCAweDQ4LCAweDAwLCAweDZiLCAweGMwLCAweDA2LCAweGMwLCAweDBlLAotMHhmOCwgMHg2MywgMHgwYSwgMHg0OCwgMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgxOSwgMHg4MCwgMHg0MSwgMHg2OCwKLTB4YzAsIDB4NDYsIDB4NTksIDB4ODAsIDB4ODAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OTgsIDB4ODAsIDB4OTAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGJjLCAweDIwLCAweDQwLAotMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwKLTB4MDAsIDB4MjAsIDB4MGEsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzMsIDB4Y2IsIDB4MWQsIDB4ZmYsIDB4MzMsCi0weDNhLCAweDMzLCAweDg4LCAweDYxLCAweGM4LCAweDYxLCAweDE4LCAweDcwLCAweDA2LCAweDRhLCAweGMwLCAweDQ2LAotMHgxMCwgMHg2NSwgMHg1MCwgMHg2NiwgMHg5MCwgMHg2NiwgMHgwOCwgMHg3MCwgMHg1OCwgMHg3MCwgMHhiYiwgMHgyMywKLTB4MWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4MDgsIDB4NzMsIDB4NzAsIDB4NDcsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI0LCAweDJmLCAweDQ5LCAweDJmLCAweDRhLCAweGMwLCAweDQ2LAotMHgxMSwgMHg2MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHhjOCwgMHgxOCwgMHg1MCwgMHg2MSwgMHgyZCwgMHg0OCwKLTB4YzAsIDB4NDYsIDB4MTAsIDB4NjIsIDB4ZGIsIDB4MDAsIDB4YzMsIDB4MTgsIDB4NTMsIDB4NjIsIDB4MDAsIDB4MjMsCi0weDEzLCAweDYzLCAweDUzLCAweDYzLCAweDI5LCAweDRhLCAweDJhLCAweDRmLCAweGQ0LCAweDFkLCAweGZmLCAweDM0LAotMHhmYSwgMHgzNCwgMHgxNCwgMHhjNywgMHgwOCwgMHgzZiwgMHgzYiwgMHg2MSwgMHgxYywgMHgxZiwgMHg3YywgMHg2MSwKLTB4MjYsIDB4NGYsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjAsIDB4YjgsIDB4NjEsIDB4NzksIDB4NjEsIDB4ZjgsIDB4NjIsCi0weDNiLCAweDYzLCAweDdiLCAweDY0LCAweGJhLCAweDY0LCAweGZhLCAweDY1LCAweDIyLCAweDRmLCAweGZlLCAweDFkLAotMHhmOSwgMHgzNiwgMHgyMiwgMHg0ZCwgMHhlYywgMHgxZCwgMHg3OSwgMHgzNCwgMHgyNiwgMHg2MiwgMHg1MSwgMHgyNiwKLTB4YjYsIDB4MDMsIDB4MzcsIDB4NjEsIDB4MjQsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NzQsIDB4NjEsIDB4MmYsIDB4NjcsCi0weDFkLCAweDRkLCAweDA5LCAweDI3LCAweDdmLCAweDA0LCAweGVjLCAweDFkLCAweDc1LCAweDM0LCAweDdjLCAweDYwLAotMHgzZCwgMHg2MCwgMHgxYiwgMHg0YywgMHhjMCwgMHg0NiwgMHgzYywgMHg2MSwgMHhlNiwgMHgxZCwgMHg3NSwgMHgzNiwKLTB4N2UsIDB4NjEsIDB4MTksIDB4NGYsIDB4YzAsIDB4NDYsIDB4N2MsIDB4NjAsIDB4M2QsIDB4NjAsIDB4MGYsIDB4MWMsCi0weDAwLCAweDIxLCAweGZmLCAweDI0LCAweDAxLCAweDM0LCAweDFkLCAweDFjLCAweDhiLCAweDAwLCAweGZkLCAweDUwLAotMHgwMSwgMHgzMSwgMHhhMSwgMHg0MiwgMHhmYSwgMHhkMywgMHgwMSwgMHgxYywgMHgwMCwgMHgyMCwgMHgwMSwgMHgyNywKLTB4ZmYsIDB4MDIsIDB4ODMsIDB4MDAsIDB4Y2QsIDB4NTAsIDB4MDEsIDB4MzAsIDB4YjgsIDB4NDIsIDB4ZmEsIDB4ZDMsCi0weDAwLCAweDIwLCAweDgxLCAweDAwLCAweDU1LCAweDUwLCAweDAxLCAweDMwLCAweDgwLCAweDI4LCAweGZhLCAweGQzLAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgyNCwgMHhhMywgMHgyMCwgMHg0MCwKLTB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4MjQsIDB4ODMsIDB4MjAsIDB4NDAsIDB4MjQsIDB4YTksIDB4MjAsIDB4NDAsCi0weDgwLCAweDAxLCAweDE4LCAweDAwLCAweGE4LCAweDAzLCAweDAwLCAweDgwLCAweDI0LCAweGE3LCAweDIwLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyNCwgMHhhOCwgMHgyMCwgMHg0MCwgMHhhNCwgMHhhOCwgMHgyMCwgMHg0MCwKLTB4MDgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4YjgsIDB4YjUsIDB4MmMsIDB4NDgsIDB4ZmQsIDB4ZjcsIDB4YmEsIDB4ZmQsCi0weDAxLCAweDIwLCAweDJiLCAweDQ5LCAweDBhLCAweDY4LCAweDUyLCAweDBjLCAweDA2LCAweGQyLCAweDBhLCAweDY4LAotMHgxMiwgMHgwYywgMHgwMiwgMHhkMSwgMHgwYSwgMHg2OCwgMHg5MiwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMCwKLTB4MDQsIDB4MDYsIDB4MjQsIDB4MGUsIDB4MjUsIDB4NGEsIDB4ZDcsIDB4MWQsIDB4MGQsIDB4MzcsIDB4MDAsIDB4MjMsCi0weDAwLCAweDIwLCAweDlkLCAweDAwLCAweDc4LCAweDUxLCAweDAxLCAweDMzLCAweDA0LCAweDJiLCAweGZhLCAweGQzLAotMHgwMSwgMHgyNywgMHgzZiwgMHgwNSwgMHg1MCwgMHg2MSwgMHhmOCwgMHg2MCwgMHhkMCwgMHg2MSwgMHhmOCwgMHg2MSwKLTB4MDAsIDB4MjMsIDB4ZGIsIDB4NDMsIDB4OTMsIDB4NjEsIDB4M2IsIDB4NjEsIDB4MTMsIDB4NjIsIDB4M2IsIDB4NjIsCi0weDAwLCAweDI3LCAweDFiLCAweDRiLCAweDhkLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDk1LCAweDhkLCAweDY5LAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5NSwgMHgwMCwgMHgyYywgMHgwYiwgMHhkMCwgMHhkZCwgMHg2YiwgMHhjMCwgMHg0NiwKLTB4MDAsIDB4OTUsIDB4OWQsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4NWQsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDAwLCAweDk1LCAweDFkLCAweDZiLCAweGMwLCAweDQ2LCAweDAwLCAweDk1LCAweDAxLCAweDM3LCAweDQwLCAweDJmLAotMHhlOCwgMHhkMywgMHgwMCwgMHgyNywgMHg2YywgMHg0NiwgMHgwMSwgMHgyMywgMHg1YiwgMHgwNywgMHgxYywgMHg0MywKLTB4MDEsIDB4ZTAsIDB4MjAsIDB4NjAsIDB4MDEsIDB4MzcsIDB4MGQsIDB4NjgsIDB4MmIsIDB4MDksIDB4MDIsIDB4ZDIsCi0weDgwLCAweDJmLCAweGY4LCAweGQzLCAweDAxLCAweGUwLCAweDgwLCAweDJmLCAweDAzLCAweGQzLCAweDA4LCAweDQ5LAotMHg0YiwgMHg2ZSwgMHgwMSwgMHgzMywgMHg0YiwgMHg2NiwgMHhkMCwgMHg2MiwgMHhiOCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAxLCAweDE4LCAweDQwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAotMHg5MCwgMHhiNCwgMHgwMCwgMHgyMSwgMHgwZSwgMHg0ZiwgMHgwZiwgMHg0YSwgMHgwMCwgMHgyMCwgMHg0YywgMHgwMSwKLTB4NjQsIDB4MWEsIDB4YTQsIDB4MDAsIDB4YTMsIDB4MTgsIDB4NTgsIDB4NjAsIDB4OTgsIDB4NjAsIDB4MTgsIDB4NjQsCi0weDU4LCAweDY0LCAweDEwLCAweDUzLCAweDU4LCAweDgwLCAweGNjLCAweDAwLCAweGU0LCAweDE5LCAweDk4LCAweDY3LAotMHhkYywgMHg2MiwgMHgwMSwgMHgzMSwgMHgwMywgMHgyOSwgMHhlZSwgMHhkMywgMHgwNiwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4MDgsIDB4NjAsIDB4NDgsIDB4NjAsIDB4ODgsIDB4NjAsIDB4YzgsIDB4NjAsIDB4MDgsIDB4NjEsIDB4OTAsIDB4YmMsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGFjLCAweDY2LCAweDIxLCAweDQwLCAweDVjLCAweDJiLCAweDAwLCAweDgwLAotMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHg2NCwgMHgyMSwgMHgwNSwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg2MywKLTB4MDAsIDB4MjEsIDB4YzksIDB4NDMsIDB4NDEsIDB4NjMsIDB4ODEsIDB4NjMsIDB4MDAsIDB4MjEsIDB4YzEsIDB4NjMsCi0weDAxLCAweDY0LCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI0LCAweDAxLCAweDIwLAotMHg0MCwgMHgwMiwgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgzYywgMHgyMCwgMHg0OCwgMHg2MCwKLTB4ODgsIDB4NjAsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MDcsIDB4NGEsCi0weDg3LCAweDAwLCAweGNiLCAweDY4LCAweGMwLCAweDQ2LCAweGRhLCAweDUxLCAweDAxLCAweDMwLCAweDEwLCAweDI4LAotMHhmOCwgMHhkMywgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwKLTB4ZjQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4NWQsIDB4NGMsIDB4ZmYsIDB4ZmYsIDB4MTIsIDB4NDksIDB4MTMsIDB4NDgsCi0weDY3LCAweDIzLCAweDliLCAweDAxLCAweGNhLCAweDE4LCAweDA2LCAweGMwLCAweDA4LCAweDM4LCAweDExLCAweDRiLAotMHhjYSwgMHgxOCwgMHhjMSwgMHg2MCwgMHg4MiwgMHg2MCwgMHgwMSwgMHg2MSwgMHgwZiwgMHg0OSwgMHgxMCwgMHg0OCwKLTB4YTcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4Y2EsIDB4MTgsIDB4MDYsIDB4YzAsIDB4MDgsIDB4MzgsIDB4MGUsIDB4NGIsCi0weGNhLCAweDE4LCAweGMxLCAweDYwLCAweDgyLCAweDYwLCAweDAxLCAweDYxLCAweDBjLCAweDQ4LCAweDBkLCAweDQ5LAotMHg2NywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMiwgMHgxOCwgMHgwNSwgMHhjMSwgMHgwOCwgMHgzOSwgMHgwNSwgMHg0YiwKLTB4YzIsIDB4MTgsIDB4YzgsIDB4NjAsIDB4OGEsIDB4NjAsIDB4MDgsIDB4NjEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGFjLCAweDFlLCAweDIxLCAweDQwLCAweDQ4LCAweDJlLCAweDAwLCAweDgwLCAweGZjLCAweDFmLCAweDAwLCAweDAwLAotMHhhYywgMHhlZSwgMHgyMCwgMHg0MCwgMHgzNCwgMHgyZSwgMHgwMCwgMHg4MCwgMHhmYywgMHgyZiwgMHgwMCwgMHgwMCwKLTB4YWMsIDB4M2UsIDB4MjEsIDB4NDAsIDB4NWMsIDB4MmUsIDB4MDAsIDB4ODAsCi0weDkwLCAweGI0LCAweDAwLCAweDIxLCAweDQwLCAweDRjLCAweDAwLCAweDIwLCAweDBhLCAweDAxLCAweDEyLCAweDE5LAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhkMiwgMHgxOCwgMHhkMCwgMHg2MiwgMHgxMCwgMHg2MywgMHg1MCwgMHg2MywKLTB4OTAsIDB4NjMsIDB4MDEsIDB4MzEsIDB4MDMsIDB4MjksIDB4ZjMsIDB4ZDMsIDB4M2EsIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYzLCAweDQ4LCAweDYzLCAweDg4LCAweDYzLCAweDIwLCAweDYwLCAweDAxLCAweDIxLCAweGUzLCAweDFkLAotMHg1OSwgMHgzMywgMHg2MCwgMHg2MCwgMHgxOSwgMHg3MSwgMHgxOCwgMHg3MiwgMHg5OCwgMHg3MSwgMHg5OCwgMHg3MiwKLTB4NTksIDB4NzEsIDB4NTgsIDB4NzIsIDB4ZDgsIDB4NzEsIDB4ZDgsIDB4NzIsIDB4ZTIsIDB4MWQsIDB4NDksIDB4MzIsCi0weDExLCAweDczLCAweDE5LCAweDcwLCAweDkwLCAweDczLCAweDk4LCAweDcwLCAweDUxLCAweDczLCAweDU5LCAweDcwLAotMHhkMCwgMHg3MywgMHhkOCwgMHg3MCwgMHgxMSwgMHg3MSwgMHgxMSwgMHg3MiwgMHg5MCwgMHg3MSwgMHg5MCwgMHg3MiwKLTB4NTAsIDB4NzEsIDB4NTAsIDB4NzIsIDB4ZDAsIDB4NzEsIDB4ZDAsIDB4NzIsIDB4MTgsIDB4NzMsIDB4MDIsIDB4MjIsCi0weGU3LCAweDFkLCAweDY5LCAweDM3LCAweDNhLCAweDcwLCAweDk5LCAweDczLCAweGJhLCAweDcwLCAweDU4LCAweDczLAotMHg3OCwgMHg3MCwgMHhkOCwgMHg3MywgMHhmOCwgMHg3MCwgMHgzOSwgMHg3MSwgMHgzYSwgMHg3MiwgMHhiOSwgMHg3MSwKLTB4YjksIDB4NzIsIDB4NzgsIDB4NzEsIDB4N2EsIDB4NzIsIDB4ZjksIDB4NzEsIDB4ZjksIDB4NzIsIDB4MzksIDB4NzMsCi0weGUzLCAweDFkLCAweDc5LCAweDMzLCAweDFhLCAweDcwLCAweGI5LCAweDczLCAweDk5LCAweDcwLCAweDc4LCAweDczLAotMHg1YSwgMHg3MCwgMHhmOSwgMHg3MywgMHhkOSwgMHg3MCwgMHgxYSwgMHg3MSwgMHgxYSwgMHg3MiwgMHg5OSwgMHg3MSwKLTB4OWEsIDB4NzIsIDB4NTgsIDB4NzEsIDB4NWEsIDB4NzIsIDB4ZDksIDB4NzEsIDB4ZGEsIDB4NzIsIDB4MTksIDB4NzMsCi0weGU3LCAweDFkLCAweDg5LCAweDM3LCAweDNhLCAweDcwLCAweDk5LCAweDczLCAweGI5LCAweDcwLCAweDU4LCAweDczLAotMHg3YSwgMHg3MCwgMHhkOSwgMHg3MywgMHhmOSwgMHg3MCwgMHgzOSwgMHg3MSwgMHgzYSwgMHg3MiwgMHhiOSwgMHg3MSwKLTB4YjksIDB4NzIsIDB4NzgsIDB4NzEsIDB4N2EsIDB4NzIsIDB4ZjksIDB4NzEsIDB4ZjksIDB4NzIsIDB4M2EsIDB4NzMsCi0weGUzLCAweDFkLCAweDk5LCAweDMzLCAweDFhLCAweDcwLCAweGI5LCAweDczLCAweDlhLCAweDcwLCAweDc4LCAweDczLAotMHg1YSwgMHg3MCwgMHhmOSwgMHg3MywgMHhkYSwgMHg3MCwgMHgxOSwgMHg3MSwgMHgxYSwgMHg3MiwgMHg5OSwgMHg3MSwKLTB4OTksIDB4NzIsIDB4NTgsIDB4NzEsIDB4NWEsIDB4NzIsIDB4ZDksIDB4NzEsIDB4ZDksIDB4NzIsIDB4MjAsIDB4NjEsCi0weGUwLCAweDYwLCAweDYwLCAweDYxLCAweGEwLCAweDYwLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHhlOCwgMHgxOSwgMHgwMCwgMHg4MCwgMHg4MSwgMHgyMCwgMHgwMCwgMHgwMiwKLTB4MDEsIDB4NDksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjIsIDB4NzAsIDB4NDcsIDB4YzAsIDB4MDAsIDB4MTQsIDB4MDAsCi0weDA5LCAweDQ5LCAweDBhLCAweDRiLCAweGM4LCAweDE4LCAweDA0LCAweDNiLCAweGM5LCAweDE4LCAweDA4LCAweDYwLAotMHgwMCwgMHgyMSwgMHhjMiwgMHgxZCwgMHgyOSwgMHgzMiwgMHhjMiwgMHg2MSwgMHgxMCwgMHgxYywgMHgwMSwgMHgzMSwKLTB4MDgsIDB4MjksIDB4ZjgsIDB4ZDMsIDB4YzEsIDB4MWYsIDB4MjksIDB4MzksIDB4MDAsIDB4MjAsIDB4YzgsIDB4NjEsCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDg0LCAweDA5LCAweDAwLCAweDAwLAotMHgwNiwgMHg0OCwgMHgwNywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg4MCwgMHg0OCwgMHg4MCwgMHgwMCwgMHgyMCwKLTB4ODgsIDB4ODAsIDB4YzgsIDB4ODAsIDB4ODgsIDB4NjAsIDB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjEsCi0weDg4LCAweDYxLCAweDcwLCAweDQ3LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyMSwgMHgwNiwgMHg0OCwgMHhjMiwgMHgxZCwgMHgxOSwgMHgzMiwKLTB4YzEsIDB4NjAsIDB4MDEsIDB4NjEsIDB4YzEsIDB4NjEsIDB4MDEsIDB4NjIsIDB4MTEsIDB4NzEsIDB4ZmYsIDB4MzAsCi0weDAxLCAweDMwLCAweDQxLCAweDYyLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAotMHgwOSwgMHg0OCwgMHgwYSwgMHg0YiwgMHhjMCwgMHg0NiwgMHgxOCwgMHg2MCwgMHgwMCwgMHgyMSwgMHhjMiwgMHgxZCwKLTB4NGQsIDB4MzIsIDB4YzIsIDB4NjAsIDB4MTAsIDB4MWMsIDB4MDEsIDB4MzEsIDB4MTQsIDB4MjksIDB4ZjgsIDB4ZDMsCi0weGMxLCAweDFmLCAweDRkLCAweDM5LCAweDAwLCAweDIwLCAweGM4LCAweDYwLCAweDU4LCAweDYwLCAweDk4LCAweDYwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhkOCwgMHgwNywgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4YjUsIDB4MGIsIDB4NDksIDB4MGIsIDB4NDgsIDB4ZmQsIDB4ZjcsIDB4ZWEsIDB4ZmIsIDB4MGIsIDB4NDgsCi0weDAwLCAweDZhLCAweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDk4LCAweDQzLCAweDA5LCAweDQ5LCAweGMwLCAweDQ2LAotMHgwOCwgMHg2MiwgMHgwOSwgMHg0OCwgMHhjMSwgMHg2OCwgMHgwMSwgMHgyOSwgMHgwNCwgMHhkMSwgMHhjMCwgMHg2ZiwKLTB4ODAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGMxLCAweGJkLCAweDIxLCAweDQwLCAweDc1LCAweDk4LCAweDIxLCAweDQwLAotMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4MDAsIDB4YjUsIDB4MGYsIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDEsIDB4MjksIDB4MDQsIDB4ZDEsIDB4YzAsIDB4NmYsCi0weDgwLCAweDIzLCAweDAxLCAweDY4LCAweDk5LCAweDQzLCAweDAxLCAweDYwLCAweDBiLCAweDRiLCAweDBjLCAweDQ4LAotMHgwYywgMHg0YSwgMHgwMCwgMHgyMSwgMHhmZCwgMHhmNywgMHhiZiwgMHhmYiwgMHgwYiwgMHg0OCwgMHg0MSwgMHg4ZCwKLTB4MDEsIDB4MzEsIDB4NDEsIDB4ODUsIDB4MDAsIDB4MjEsIDB4YzEsIDB4ODUsIDB4MDksIDB4NDgsIDB4MDAsIDB4NmEsCi0weDAxLCAweDIzLCAweGRiLCAweDAzLCAweDE4LCAweDQzLCAweDA4LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYyLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg1OSwgMHhiZCwgMHgyMSwgMHg0MCwKLTB4NzUsIDB4OTgsIDB4MjEsIDB4NDAsIDB4YjgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weGMwLCAweDAwLCAweDE4LCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweGYwLCAweGI1LCAweDFiLCAweDRjLAotMHgxMCwgMHgyNiwgMHhlMCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwOCwgMHhkMSwgMHg2MCwgMHg4OCwgMHgwMCwgMHgyOCwKLTB4MDUsIDB4ZDEsIDB4MjAsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MTksIDB4MjAsIDB4YTAsIDB4NjcsCi0weDAwLCAweGUwLCAweGE2LCAweDY3LCAweDAwLCAweDIwLCAweDA3LCAweDIzLCAweDViLCAweDAyLCAweGU1LCAweDE4LAotMHhjMSwgMHg0MywgMHhlOCwgMHg2MSwgMHg2OSwgMHg2MiwgMHg1OSwgMHgwOCwgMHhhMSwgMHgyNywgMHg3ZiwgMHgwMywKLTB4NzksIDB4NjAsIDB4MGYsIDB4MjEsIDB4NzksIDB4NjAsIDB4ZTEsIDB4MWQsIDB4YjksIDB4MzEsIDB4MDgsIDB4NzEsCi0weDAxLCAweDIwLCAweGI4LCAweDYwLCAweDQwLCAweDAyLCAweGI4LCAweDYwLCAweDAwLCAweGYwLCAweDRjLCAweGZhLAotMHgwMCwgMHhmMCwgMHhmMCwgMHhmYSwgMHgwNCwgMHgyMCwgMHhiOCwgMHg2MCwgMHgwNywgMHgyMCwgMHg3OCwgMHg2MSwKLTB4N2UsIDB4NjAsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZTAsIDB4MTgsIDB4YzAsIDB4OGIsIDB4MDQsIDB4MjMsCi0weDE4LCAweDQwLCAweGU4LCAweDYyLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNCwgMHgwMiwgMHgxYywgMHgwMCwgMHgyMCwgMHhmZiwgMHgyMywKLTB4MDEsIDB4MzMsIDB4OWEsIDB4NDIsIDB4MDgsIDB4ZDAsIDB4MDEsIDB4MjksIDB4MDAsIDB4ZDEsIDB4MDEsIDB4MjAsCi0weDAwLCAweDJhLCAweDAxLCAweGQxLCAweDAyLCAweDIzLCAweDE4LCAweDQzLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LAotMHgxYiwgMHg0YSwgMHhkNywgMHg2OCwgMHgxYSwgMHg0YiwgMHgxOSwgMHg3OSwgMHgxYywgMHgxYywgMHgzNywgMHgyMywKLTB4OWIsIDB4MDEsIDB4ZTMsIDB4MTgsIDB4MDEsIDB4MmYsIDB4MGQsIDB4ZDEsIDB4NTcsIDB4ODgsIDB4MDAsIDB4MmYsCi0weDBhLCAweGQxLCAweDAwLCAweDI5LCAweDBhLCAweGQxLCAweDU5LCAweDhiLCAweDBhLCAweDA5LCAweDAwLCAweGQzLAotMHgwMiwgMHgyMCwgMHg0OSwgMHgwOSwgMHhlOCwgMHhkMywgMHgwMSwgMHgyMywgMHgxOCwgMHg0MywgMHhlNSwgMHhlNywKLTB4MDAsIDB4MjksIDB4MDMsIDB4ZDAsIDB4OTgsIDB4OGEsIDB4ODAsIDB4MDcsIDB4ODAsIDB4MGYsIDB4ZGYsIDB4ZTcsCi0weDZkLCAweDIzLCAweDViLCAweDAxLCAweGQxLCAweDE4LCAweDhhLCAweDg4LCAweGZmLCAweDI3LCAweDAxLCAweDM3LAotMHgxNywgMHg0MCwgMHgwYSwgMHg0OSwgMHhjOSwgMHg4OCwgMHgwMywgMHhkMCwgMHg0YiwgMHgwYSwgMHgwMSwgMHhkMywKLTB4MDMsIDB4MjAsIDB4ZDEsIDB4ZTcsIDB4MTMsIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MGIsIDB4MGEsIDB4MDEsIDB4ZDMsCi0weDAyLCAweDIwLCAweGNiLCAweGU3LCAweGQyLCAweDA5LCAweGM5LCAweGQzLCAweGM5LCAweDA5LCAweGM3LCAweGQzLAotMHgwMSwgMHgyMCwgMHhjNSwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwOCwgMHgxYywgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4YzEsIDB4YjAsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDcsIDB4NTIsIDB4NDksIDB4YzAsIDB4NDYsCi0weDA4LCAweDYwLCAweDUyLCAweDQ4LCAweDQyLCAweDY5LCAweDQwLCAweDBkLCAweGExLCAweDIxLCAweDQ5LCAweDAzLAotMHg0OCwgMHg2MCwgMHg1MCwgMHg0OCwgMHhjMCwgMHg2YSwgMHg1MCwgMHg0YiwgMHgxOCwgMHg0MywgMHgwMCwgMHgyMSwKLTB4MDMsIDB4MDMsIDB4MWIsIDB4MGIsIDB4NGUsIDB4NGMsIDB4MjcsIDB4NmYsIDB4M2QsIDB4MDMsIDB4MmQsIDB4MGIsCi0weGU3LCAweDFkLCAweDc5LCAweDM3LCAweGFiLCAweDQyLCAweDFjLCAweGQwLCAweGUzLCAweDFkLCAweDc5LCAweDMzLAotMHgxYiwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0MCwgMHg5MywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwMywgMHg0MywKLTB4MWIsIDB4NjgsIDB4Y2MsIDB4MDAsIDB4NmUsIDB4NDYsIDB4MzMsIDB4NTEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCi0weDA2LCAweDFkLCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDZjLCAweDQ0LCAweDYzLCAweDYwLCAweDA4LCAweDMwLAotMHgwMSwgMHgzMSwgMHg0MCwgMHg5YiwgMHg4MywgMHg0MiwgMHgwMCwgMHhkOCwgMHgzZiwgMHg0OCwgMHgwMywgMHgwMywKLTB4MWIsIDB4MGIsIDB4YWIsIDB4NDIsIDB4ZTcsIDB4ZDEsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDMsCi0weDEzLCAweDQwLCAweDNjLCAweDRjLCAweDAzLCAweGQwLCAweDYzLCAweDZhLCAweDAxLCAweDMzLCAweDYzLCAweDYyLAotMHgwOSwgMHhlMCwgMHgxMywgMHgwYiwgMHgwMywgMHhkMywgMHgyMywgMHg2YSwKLTB4MDEsIDB4MzMsIDB4MjMsIDB4NjIsIDB4MDMsIDB4ZTAsIDB4MzcsIDB4NGIsIDB4NWMsIDB4NmQsIDB4MDEsIDB4MzQsCi0weDVjLCAweDY1LCAweDAwLCAweDI5LCAweDA5LCAweGQwLCAweDAzLCAweDFjLCAweGRjLCAweDAwLCAweDIzLCAweDFjLAotMHg2YiwgMHg0NCwgMHg1YywgMHg2OCwgMHgwMSwgMHgzMCwgMHgyMywgMHgwZCwgMHgwMSwgMHhkMiwgMHg4OCwgMHg0MiwKLTB4ZjUsIDB4ZDEsIDB4MzAsIDB4NGMsIDB4MjUsIDB4NjgsIDB4NmIsIDB4MGMsIDB4MDUsIDB4ZDIsIDB4MjMsIDB4NjgsCi0weDFiLCAweDBjLCAweDA4LCAweGQxLCAweDI0LCAweDY4LCAweGEzLCAweDBhLCAweDA1LCAweGQzLCAweDIwLCAweDI0LAotMHgyYiwgMHg0YiwgMHhjMCwgMHg0NiwgMHg1YywgMHg2MiwgMHgwMCwgMHgyNCwgMHg1YywgMHg2MiwgMHgyNSwgMHg0YiwKLTB4MjMsIDB4NGMsIDB4NTEsIDB4MjYsIDB4YjYsIDB4MDMsIDB4MjMsIDB4NjcsIDB4MzMsIDB4NjEsIDB4M2QsIDB4NmEsCi0weGMwLCAweDQ2LCAweDc1LCAweDYxLCAweDAyLCAweDI1LCAweGExLCAweDI2LCAweDc2LCAweDAzLCAweDc1LCAweDYwLAotMHgwMSwgMHgyNSwgMHhiNSwgMHg2MCwgMHhlNiwgMHgxZCwgMHhiOSwgMHgzNiwgMHgzNSwgMHg3MSwgMHg4OCwgMHg0MiwKLTB4MjEsIDB4ZDAsIDB4MjUsIDB4MWMsIDB4YzMsIDB4MDAsIDB4NmMsIDB4NDYsIDB4ZTQsIDB4NTgsIDB4MmUsIDB4NmYsCi0weDZiLCAweDQ0LCAweDM0LCAweDYwLCAweDViLCAweDY4LCAweDJjLCAweDZmLCAweGMwLCAweDQ2LCAweDYzLCAweDYwLAotMHgyYiwgMHg2ZiwgMHgwOCwgMHgzMywgMHgyYiwgMHg2NywgMHgzYywgMHg2YSwgMHhhMywgMHg0MiwgMHgwMiwgMHhkMywKLTB4MTIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4MmIsIDB4NjcsIDB4MDMsIDB4MWMsIDB4ZGIsIDB4MDAsIDB4NmIsIDB4NDQsCi0weDVjLCAweDY4LCAweDAxLCAweDMwLCAweDIzLCAweDBkLCAweDA0LCAweGQzLCAweDUxLCAweDI0LCAweGE0LCAweDAzLAotMHgyYiwgMHg2ZiwgMHhjMCwgMHg0NiwgMHhhMywgMHg2MSwgMHg4OCwgMHg0MiwgMHhkZSwgMHhkMSwgMHgxMCwgMHgwYiwKLTB4MDMsIDB4ZDMsIDB4MGUsIDB4NDksIDB4MDEsIDB4MjAsIDB4ZmQsIDB4ZjcsIDB4NzQsIDB4ZmEsIDB4NDEsIDB4YjAsCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAotMHgwMCwgMHgwMSwgMHgxNCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgxNCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLAotMHhjOSwgMHg0ZiwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyMywgMHgwNywgMHgyMiwKLTB4MDYsIDB4MjQsIDB4NDcsIDB4NGYsIDB4YzAsIDB4NDYsIDB4M2MsIDB4NjEsIDB4M2EsIDB4NjEsIDB4MDEsIDB4MzMsCi0weDIwLCAweDJiLCAweGY5LCAweGQzLCAweDA0LCAweDI1LCAweDNkLCAweDYxLCAweDA1LCAweDIzLCAweDNiLCAweDYxLAotMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzZCwgMHg2MSwgMHgzYiwgMHg2MSwKLTB4M2YsIDB4NGQsIDB4YWIsIDB4NmYsIDB4ZGUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWUsIDB4NDAsIDB4MDQsIDB4MjMsCi0weDMzLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLCAweGFiLCAweDZmLAotMHg5ZSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZSwgMHg0MCwgMHgwNCwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwKLTB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4YWIsIDB4NmYsIDB4NWUsIDB4MDgsIDB4MDIsIDB4MjMsCi0weDFlLCAweDQwLCAweDA0LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDMzLCAweDQzLAotMHgzYiwgMHg2MSwgMHgwMiwgMHgyMywgMHhhZSwgMHg2ZiwgMHgxZSwgMHg0MCwgMHgwNCwgMHgyMywgMHgzMywgMHg0MywKLTB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4YWIsIDB4NmYsIDB4NWQsIDB4MDAsCi0weDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLAotMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHhjNSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywKLTB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4ODUsIDB4MDgsCi0weDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLAotMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHg0NSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywKLTB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDIsIDB4MjUsCi0weDA1LCAweDQwLCAweDA0LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDJiLCAweDQzLAotMHgzYiwgMHg2MSwgMHg0MCwgMHgwMCwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MCwgMHgwNCwgMHgyMywgMHgwMywgMHg0MywKLTB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4NjEsIDB4MDAsIDB4MjUsIDB4M2QsIDB4NjEsCi0weDAxLCAweDIzLCAweDNiLCAweDYxLCAweDNkLCAweDYxLCAweDNiLCAweDYxLCAweDAwLCAweDIwLCAweDNkLCAweDYxLAotMHgwZCwgMHg0YiwgMHgxYiwgMHg2OSwgMHg0OSwgMHgwMCwgMHgxZSwgMHgxYywgMHgwMiwgMHgyMywgMHgzMywgMHg0MCwKLTB4MTksIDB4NDMsIDB4MDEsIDB4MjMsIDB4M2IsIDB4NjEsIDB4MDEsIDB4MzAsCi0weDEwLCAweDI4LCAweGYyLCAweGQzLCAweDAyLCAweDIwLCAweDM4LCAweDYxLCAweDAzLCAweDIwLCAweDM4LCAweDYxLAotMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzOCwgMHg2MSwgMHg0OCwgMHgwOCwKLTB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ODAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDgwLCAweDAwLCAweDE0LCAweDQwLCAweGYwLCAweGI0LCAweDAwLCAweDI0LCAweDA3LCAweDIzLCAweDA2LCAweDI3LAotMHg0NCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgxNywgMHg2MSwgMHgxMywgMHg2MSwgMHgwMSwgMHgzNCwgMHgyMCwgMHgyYywKLTB4ZjksIDB4ZDMsIDB4MDQsIDB4MjYsIDB4MTYsIDB4NjEsIDB4MDUsIDB4MjQsIDB4MTQsIDB4NjEsIDB4MTcsIDB4NjEsCi0weDA3LCAweDIzLCAweDEzLCAweDYxLCAweDE2LCAweDYxLCAweDE0LCAweDYxLCAweDE3LCAweDYxLCAweDEzLCAweDYxLAotMHgzYywgMHg0YiwgMHg5YiwgMHg2ZiwgMHhkZCwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywKLTB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4MzcsIDB4NGIsIDB4OWIsIDB4NmYsCi0weDlkLCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLAotMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHgzMiwgMHg0YiwgMHg5YiwgMHg2ZiwgMHg1ZCwgMHgwOCwgMHgwMiwgMHgyMywKLTB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsCi0weDJkLCAweDRiLCAweDlkLCAweDZmLCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLAotMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHgyOSwgMHg0YiwgMHg5YiwgMHg2ZiwgMHg1ZCwgMHgwMCwKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsCi0weDE1LCAweDYxLCAweGM1LCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLAotMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHg4NSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwKLTB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4NDUsIDB4MDgsCi0weDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLAotMHgxNSwgMHg2MSwgMHgwMiwgMHgyNSwgMHgwNSwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwKLTB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4NDAsIDB4MDAsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDMsIDB4MWMsCi0weDMzLCAweDQzLCAweDEzLCAweDYxLCAweDIwLCAweDQzLCAweDEwLCAweDYxLCAweDE3LCAweDYxLCAweDA3LCAweDIzLAotMHgxMywgMHg2MSwgMHgxNiwgMHg2MSwgMHgxNCwgMHg2MSwgMHg0YywgMHgwMCwgMHgwMCwgMHgyMCwgMHgwZiwgMHgyMSwKLTB4MjUsIDB4MWMsIDB4Y2QsIDB4NDAsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsCi0weDEzLCAweDYxLCAweDA1LCAweDIzLCAweDJiLCAweDQzLCAweDEzLCAweDYxLCAweDAxLCAweDMwLCAweDAxLCAweDM5LAotMHgxMCwgMHgyOCwgMHhmMSwgMHhkMywgMHgxNywgMHg2MSwgMHgwNywgMHgyMywgMHgxMywgMHg2MSwgMHgxNywgMHg2MSwKLTB4MTMsIDB4NjEsIDB4MDMsIDB4MjAsIDB4MTAsIDB4NjEsIDB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDgwLCAweDAwLCAweDE0LCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDRmLCAweDRkLAotMHgwOCwgMHgyMSwgMHgwMiwgMHgyMCwgMHgyYSwgMHgxYywgMHhmZCwgMHhmNywgMHgyNywgMHhmOSwgMHg0ZCwgMHg0YywKLTB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZTcsIDB4MTgsIDB4MzgsIDB4ODAsIDB4MWEsIDB4MjEsIDB4MDIsIDB4MjAsCi0weDJhLCAweDFjLCAweGZkLCAweGY3LCAweDFkLCAweGY5LCAweDc4LCAweDgwLCAweDIwLCAweDc5LCAweDAwLCAweDI4LAotMHgwYiwgMHhkMCwgMHgwMCwgMHgyMCwgMHgzOCwgMHg4MCwgMHhlMCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgxMCwgMHhkMSwKLTB4NDQsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4MTgsIDB4NDMsIDB4OTksIDB4MDIsCi0weDA4LCAweDYwLCAweGUwLCAweDY4LCAweDAxLCAweDI4LCAweDA2LCAweGQxLCAweDYwLCAweDg4LCAweDAwLCAweDI4LAotMHgwMywgMHhkMSwgMHhmOSwgMHgyMSwgMHgxMiwgMHgyMCwgMHhmZiwgMHhmNywgMHg0MywgMHhmZiwgMHgwMSwgMHgyMSwKLTB4YzksIDB4MDMsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4M2UsIDB4ZmYsIDB4MDAsIDB4MjUsIDB4N2QsIDB4MjYsCi0weGY2LCAweDAwLCAweDAwLCAweGUwLCAweDAxLCAweDM1LCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDljLCAweGZlLAotMHgwMCwgMHgwYywgMHgwMSwgMHhkMywgMHhiNSwgMHg0MiwgMHhmNywgMHhkMywgMHgwMCwgMHgyNSwgMHgwNSwgMHhlMCwKLTB4MDMsIDB4MjEsIDB4MDksIDB4MDMsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4MmIsIDB4ZmYsIDB4MDEsIDB4MzUsCi0weDAwLCAweDIwLCAweGZmLCAweGY3LCAweDhkLCAweGZlLCAweDQwLCAweDBiLCAweDAxLCAweGQyLCAweGI1LCAweDQyLAotMHhmMiwgMHhkMywgMHgwNCwgMHgyMCwgMHhmZiwgMHhmNywgMHg4NiwgMHhmZSwgMHhmZiwgMHgyMywgMHhlMSwgMHgzMywKLTB4OTgsIDB4NDMsIDB4MDEsIDB4MjEsIDB4MDEsIDB4NDMsIDB4MzgsIDB4ODgsIDB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsCi0weDk4LCAweDQyLCAweDAzLCAweGQxLCAweDJmLCAweDIzLCAweDViLCAweDAxLAotMHgxOSwgMHg0MywgMHgxNiwgMHhlMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHhkMSwgMHg3OCwgMHg4OCwgMHgwMSwgMHgyOCwKLTB4MDMsIDB4ZDEsIDB4MjMsIDB4MjMsIDB4NWIsIDB4MDEsIDB4MTksIDB4NDMsIDB4MGQsIDB4ZTAsIDB4MjAsIDB4MjMsCi0weDE5LCAweDQzLCAweDBhLCAweGUwLCAweDAwLCAweDI4LCAweDA4LCAweGQxLCAweDc4LCAweDg4LCAweDAxLCAweDI4LAotMHgwMywgMHhkMSwgMHgwYiwgMHgyMywgMHhkYiwgMHgwMSwgMHgxOSwgMHg0MywgMHgwMSwgMHhlMCwgMHg4MCwgMHgyMywKLTB4MTksIDB4NDMsIDB4MDQsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZjgsIDB4ZmUsIDB4MDksIDB4MjEsIDB4NDksIDB4MDIsCi0weDAwLCAweDIwLCAweGZmLCAweGY3LCAweGYzLCAweGZlLCAweGUwLCAweDY4LCAweDAwLCAweDI4LCAweDBjLCAweGQxLAotMHgwMCwgMHgyMSwgMHgxYiwgMHgyMCwgMHhmZiwgMHhmNywgMHhlYywgMHhmZSwgMHgxYSwgMHgyMCwgMHhmZiwgMHhmNywKLTB4NGYsIDB4ZmUsIDB4MDEsIDB4MjEsIDB4YzksIDB4MDMsIDB4MDEsIDB4NDMsIDB4MWEsIDB4MjAsIDB4ZmYsIDB4ZjcsCi0weGUzLCAweGZlLCAweDAwLCAweDI3LCAweDAzLCAweGUwLCAweDA4LCAweDJmLCAweDAxLCAweGQzLCAweDBmLCAweDJmLAotMHgwOCwgMHhkOSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg0MCwgMHhmZSwgMHg3OSwgMHgwMCwgMHgwOSwgMHgxOSwKLTB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzksIDB4MTgsIDB4ODgsIDB4ODMsIDB4MDEsIDB4MzcsIDB4MjAsIDB4MmYsCi0weGVmLCAweGQzLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGVkLCAweGFmLCAweDIxLCAweDQwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgxMywgMHg0OCwKLTB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCi0weDgxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweGMxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLAotMHgwMSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKLTB4ODEsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4YzEsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCi0weDAxLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQxLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkxLAotMHg4MSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHhjMCwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwKLTB4MDEsIDB4YjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDgsIDB4MTQsIDB4NDAsIDB4ZjAsIDB4YjUsIDB4ODMsIDB4YjAsCi0weDY4LCAweDRkLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGVmLCAweDE4LCAweGY4LCAweDhiLCAweDA0LCAweDIyLAotMHgwMiwgMHg0MCwgMHgwMiwgMHg5MiwgMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwgMHhlOCwgMHgxOCwgMHgwMSwgMHg4OCwKLTB4YzAsIDB4NDYsIDB4MDEsIDB4OTEsIDB4NDAsIDB4ODgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MjQsCi0weDAzLCAweGUwLCAweDA4LCAweDJjLCAweDAxLCAweGQzLCAweDBmLCAweDJjLCAweDA4LCAweGQ5LCAweDIwLCAweDFjLAotMHhmZiwgMHhmNywgMHhlOCwgMHhmZCwgMHg2MSwgMHgwMCwgMHg0OSwgMHgxOSwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwKLTB4YzksIDB4MTgsIDB4ODgsIDB4ODMsIDB4MDEsIDB4MzQsIDB4MjAsIDB4MmMsIDB4ZWYsIDB4ZDMsIDB4NTgsIDB4NGMsCi0weGUwLCAweDY5LCAweDAwLCAweDI4LCAweDE1LCAweGQwLCAweDU3LCAweDRlLCAweDIwLCAweDI1LCAweDAxLCAweDNkLAotMHg1MywgMHg0OSwgMHhlMCwgMHg2OSwgMHgzMCwgMHg0MCwgMHgwYiwgMHhkMCwgMHg2OCwgMHgwMCwgMHg0MCwgMHgxOCwKLTB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODEsIDB4OGIsIDB4MjgsIDB4MWMsIDB4ZmYsIDB4ZjcsCi0weDY1LCAweGZlLCAweGUwLCAweDY5LCAweGIwLCAweDQzLCAweGUwLCAweDYxLCAweDc2LCAweDA4LCAweDAwLCAweDJkLAotMHhlYiwgMHhkMSwgMHgwMSwgMHgyMCwgMHhmZiwgMHhmNywgMHhjMiwgMHhmZCwgMHg0OCwgMHg0OSwgMHhjMCwgMHg0NiwKLTB4ZjgsIDB4ODMsIDB4ZjgsIDB4OGIsIDB4YzIsIDB4MDgsIDB4MjUsIDB4ZDMsIDB4Y2EsIDB4NjgsIDB4MDEsIDB4MmEsCi0weDEzLCAweGQxLCAweDBhLCAweDc5LCAweDAwLCAweDJhLCAweDFmLCAweGQxLCAweDQ5LCAweDg4LCAweDAwLCAweDI5LAotMHgxYywgMHhkMSwgMHgwMSwgMHg5OSwgMHg0MywgMHg0YSwgMHgwMCwgMHgyOSwgMHgwNSwgMHhkMCwgMHgwMSwgMHgyOSwKLTB4MTYsIDB4ZDEsIDB4NTEsIDB4OGIsIDB4YzksIDB4MDgsIDB4MTMsIDB4ZDIsIDB4MGYsIDB4ZTAsIDB4NTEsIDB4OGIsCi0weDA5LCAweDA5LCAweDBmLCAweGQyLCAweDBiLCAweGUwLCAweDBhLCAweDc5LCAweDAwLCAweDJhLCAweDBiLCAweGQxLAotMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwgMHhjOSwgMHgxOCwgMHg4YSwgMHg4OCwgMHhjOSwgMHg4OCwgMHgxMSwgMHg0MCwKLTB4NDksIDB4MDksIDB4MDksIDB4MDcsIDB4MDIsIDB4ZDEsIDB4MDQsIDB4MjMsIDB4OTgsIDB4NDMsIDB4ZjgsIDB4ODMsCi0weGY4LCAweDhiLCAweDA0LCAweDIxLCAweDAxLCAweDQwLCAweDAyLCAweDlhLCAweDFmLCAweGQwLCAweGI5LCAweDhiLAotMHg0YSwgMHgwYiwgMHgyNywgMHhkMywgMHg4MCwgMHgwOSwgMHgyNSwgMHhkMywgMHhmZiwgMHgyMywgMHgwMSwgMHg5OCwKLTB4MDEsIDB4MzMsIDB4OTgsIDB4NDIsIDB4MjAsIDB4ZDAsIDB4MDAsIDB4MjUsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsCi0weDAwLCAweGQxLCAweDA1LCAweDAyLCAweDAxLCAweDk4LCAweDAwLCAweDI4LCAweDAyLCAweGQxLCAweDAxLCAweDIzLAotMHg1YiwgMHgwMywgMHgxZCwgMHg0MywgMHhhOSwgMHg0MiwgMHgxMywgMHhkMCwKLTB4MDAsIDB4MjAsIDB4MjksIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MTAsIDB4ZmUsIDB4YmQsIDB4ODMsIDB4MDAsIDB4MjAsCi0weGMwLCAweDQzLCAweDYwLCAweDYyLCAweDBhLCAweGUwLCAweGI4LCAweDhiLCAweDQwLCAweDBiLCAweDA3LCAweGQyLAotMHgwOSwgMHgyMSwgMHg0OSwgMHgwMiwgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHgwMywgMHhmZSwgMHgwOSwgMHgyMCwKLTB4NDAsIDB4MDIsIDB4YjgsIDB4ODMsIDB4ZjgsIDB4OGIsIDB4YzAsIDB4MDgsIDB4MmQsIDB4ZDMsIDB4MWQsIDB4NDgsCi0weGM3LCAweDZhLCAweDAxLCAweDk4LCAweDAwLCAweDk5LCAweGZmLCAweGY3LCAweDUxLCAweGZjLCAweGMyLCAweDA3LAotMHhkMiwgMHgwZiwgMHgxYSwgMHg0OSwgMHgwMywgMHhkMCwgMHgwNCwgMHgyMywgMHhjZCwgMHg2ZCwgMHgyYiwgMHg0MywKLTB4MDMsIDB4ZTAsIDB4MDQsIDB4MjMsIDB4Y2QsIDB4NmQsIDB4OWQsIDB4NDMsIDB4MmIsIDB4MWMsIDB4Y2IsIDB4NjUsCi0weDgzLCAweDA4LCAweDAzLCAweGQzLCAweDAyLCAweDIzLCAweGNkLCAweDZkLCAweDJiLCAweDQzLCAweDAzLCAweGUwLAotMHgwMiwgMHgyMywgMHhjZCwgMHg2ZCwgMHg5ZCwgMHg0MywgMHgyYiwgMHgxYywgMHhjYiwgMHg2NSwgMHg2MSwgMHg2YSwKLTB4ODEsIDB4NDIsIDB4MGMsIDB4ZDAsIDB4NjAsIDB4NjIsIDB4MGUsIDB4NDgsIDB4MDAsIDB4MmEsIDB4MDMsIDB4ZDAsCi0weGZmLCAweDIxLCAweDIxLCAweDMxLCAweDM5LCAweDQzLCAweDAzLCAweGUwLCAweGZmLCAweDIzLCAweDIxLCAweDMzLAotMHg5ZiwgMHg0MywgMHgzOSwgMHgxYywgMHhjMSwgMHg2MiwgMHgwMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MWMsIDB4MDAsIDB4ODAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweDI4LCAweDFjLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDE0LCAweDQwLAotMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg5MCwgMHhiNCwgMHgwMSwgMHgyMiwKLTB4MjAsIDB4MjgsIDB4MGYsIDB4ZDIsIDB4NDMsIDB4MDAsIDB4MGYsIDB4MWMsIDB4MDcsIDB4NDksIDB4NWMsIDB4MTgsCi0weDM3LCAweDIzLCAweDliLCAweDAxLCAweGUzLCAweDE4LCAweDlmLCAweDgzLCAweDgyLCAweDQwLCAweDA3LCAweDIzLAotMHg1YiwgMHgwMiwgMHhjOSwgMHgxOCwgMHgxMCwgMHgxYywgMHhjYSwgMHg2OSwgMHgxMCwgMHg0MywgMHhjOCwgMHg2MSwKLTB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MGIsIDB4NDgsIDB4NDAsIDB4NjksCi0weDBiLCAweDQ5LCAweGM5LCAweDhiLCAweDA0LCAweDIyLCAweDBhLCAweDQwLCAweDBhLCAweDQ5LCAweDA2LCAweGQwLAotMHgwMSwgMHgyMywgMHhkYiwgMHgwMiwgMHg5OCwgMHg0MywgMHgwMSwgMHgyMywgMHhjYSwgMHg2ZCwgMHgxYSwgMHg0MywKLTB4MDUsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDIsIDB4MTgsIDB4NDMsIDB4Y2EsIDB4NmQsIDB4NTIsIDB4MDgsCi0weDUyLCAweDAwLCAweGNhLCAweDY1LCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE0LCAweDQwLAotMHhlOCwgMHgxYiwgMHgwMCwgMHg4MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwKLTB4ZmYsIDB4ZjcsIDB4ZGUsIDB4ZmYsIDB4MDEsIDB4MWMsIDB4MDUsIDB4MjAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MjAsCi0weDAxLCAweGFiLCAweDE4LCAweDgwLCAweDA0LCAweDNiLCAweDU4LCAweDcwLCAweDFiLCAweDIyLCAweDAwLCAweGFiLAotMHg1YSwgMHg4MCwgMHhkOSwgMHg4MCwgMHgwNSwgMHg0OSwgMHhjOSwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MSwKLTB4MDMsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmQsIDB4ZjcsIDB4NzksIDB4ZjgsIDB4MDQsIDB4YjAsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDBmLCAweDQ4LCAweDAxLCAweDY4LAotMHg0OSwgMHgwYywgMHgwNSwgMHhkMiwgMHgwMSwgMHg2OCwgMHgwOSwgMHgwYywgMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwKLTB4ODAsIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MGIsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MGMsIDB4MDEsIDB4ZTAsCi0weDBhLCAweDQ4LCAweDgwLCAweDZjLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA5LCAweDRiLCAweDk4LCAweDQyLAotMHgwNSwgMHhkMCwgMHgwMiwgMHgzMywgMHg5OCwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwNywgMHg0YiwgMHg5OCwgMHg0MiwKLTB4MDEsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAotMHgwNCwgMHg5OSwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OSwgMHgwMCwgMHgwMCwgMHg5MCwgMHhiNCwgMHgwMSwgMHgyNCwKLTB4MjEsIDB4MWMsIDB4MTgsIDB4NDgsIDB4MDIsIDB4NjgsIDB4NTIsIDB4MGMsIDB4MDYsIDB4ZDIsIDB4MDIsIDB4NjgsCi0weDEyLCAweDBjLCAweDAyLCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDIxLAotMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgxMiwgMHg0ZiwgMHgxMywgMHg0YSwgMHgwMiwgMHhkMCwgMHgzOCwgMHg2OCwKLTB4MDAsIDB4MGMsIDB4MDAsIDB4ZTAsIDB4OTAsIDB4NmMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTAsIDB4NGIsCi0weDk4LCAweDQyLCAweDA4LCAweGQwLCAweDAyLCAweDMzLCAweDk4LCAweDQyLCAweDA1LCAweGQwLCAweDBlLCAweDRiLAotMHg5OCwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwMiwgMHgzYiwgMHg5OCwgMHg0MiwgMHgwYywgMHhkMSwgMHgwMCwgMHgyOSwKLTB4MDIsIDB4ZDAsIDB4ZjgsIDB4NmEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4ZTAsCi0weGQwLCAweDZjLCAweDQwLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDI0LCAweDIwLCAweDA2LCAweDAwLCAweDBlLAotMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYiwgMHhlNywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsIDB4OTksIDB4MDAsIDB4MDAsCi0weDA3LCAweDk5LCAweDAwLCAweDAwLCAweDBjLCAweDQ4LCAweDAxLCAweDY4LCAweDQ5LCAweDBjLCAweDA1LCAweGQyLAotMHgwMSwgMHg2OCwgMHgwOSwgMHgwYywgMHgwNSwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwMiwgMHhkMywKLTB4MDgsIDB4NDgsIDB4ODAsIDB4NjgsIDB4MDEsIDB4ZTAsIDB4MDgsIDB4NDgsIDB4NDAsIDB4NmMsIDB4MDAsIDB4MDQsCi0weDAwLCAweDBjLCAweDAwLCAweDIxLCAweDAzLCAweDI4LCAweDAzLCAweGQwLCAweDQwLCAweDA4LCAweDAxLCAweGQzLAotMHgwMSwgMHgyMCwgMHg3MCwgMHg0NywgMHgwOCwgMHgxYywgMHhmYywgMHhlNywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MDEsIDB4MjcsCi0weDFhLCAweDRjLCAweDI1LCAweDY4LCAweGZmLCAweGY3LCAweDcyLCAweGZmLCAweDAzLCAweDFjLCAweDE5LCAweDRhLAotMHgwMiwgMHgyMSwgMHgwMSwgMHgyNiwgMHgxOCwgMHg0OCwgMHgwMSwgMHgyYiwgMHgxYiwgMHhkMSwgMHhjYiwgMHgwNCwKLTB4MWUsIDB4NjAsIDB4NTUsIDB4MjMsIDB4MDMsIDB4NjAsIDB4MDAsIDB4MjMsIDB4NDMsIDB4NjAsIDB4MDYsIDB4NjgsCi0weDU1LCAweDJlLCAweDFiLCAweGQxLCAweGFhLCAweDI2LCAweDA2LCAweDYwLCAweDQzLCAweDYwLCAweDAzLCAweDY4LAotMHhhYSwgMHgyYiwgMHgxNSwgMHhkMSwgMHgwOSwgMHgyMywgMHgwMywgMHg2MCwgMHgwNSwgMHgyMywgMHgwZiwgMHg0ZiwKLTB4YzAsIDB4NDYsIDB4M2IsIDB4NjAsIDB4MDMsIDB4MjMsIDB4MGUsIDB4NGYsIDB4YzAsIDB4NDYsIDB4M2IsIDB4NjAsCi0weDExLCAweDYwLCAweDA3LCAweDY4LCAweDA4LCAweGUwLCAweDA4LCAweDIzLCAweDIzLCAweDYwLCAweDA0LCAweDIzLAotMHgwYSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzYiwgMHg2MCwgMHgxMSwgMHg2MCwgMHgwNiwgMHg2MCwgMHgyNywgMHg2OCwKLTB4YzAsIDB4NDYsIDB4MjUsIDB4NjAsIDB4MzgsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDI0LCAweDQwLCAweDAwLCAweDAwLCAweDIyLCAweDQwLAotMHgwMCwgMHgwMCwgMHgyYSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg0MCwKLTB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MzAsIDB4ZmYsIDB4MDEsIDB4MjgsIDB4MDUsIDB4ZDEsCi0weDE5LCAweDQ4LCAweDAwLCAweDY4LCAweDE5LCAweDQ5LCAweDQ5LCAweDZiLCAweDA4LCAweDQwLCAweDIyLCAweGUwLAotMHgxOCwgMHg0OCwgMHgwMSwgMHg2OCwgMHg0OSwgMHgwYywgMHgwNSwgMHhkMiwgMHgwMSwgMHg2OCwgMHgwOSwgMHgwYywKLTB4MDYsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MTQsIDB4NDgsIDB4MDAsIDB4NjgsCi0weDAwLCAweDBjLCAweDAxLCAweGUwLCAweDEzLCAweDQ4LCAweDgwLCAweDZjLCAweDAwLCAweDA0LCAweDAwLCAweDBjLAotMHgxMiwgMHg0YiwgMHhjMCwgMHgxOCwgMHgwOCwgMHgyOCwgMHgwYiwgMHhkMiwgMHgwMSwgMHhhMywgMHgxYiwgMHg1YywKLTB4NWIsIDB4MDAsIDB4OWYsIDB4NDQsIDB4MDUsIDB4MDMsIDB4MDcsIDB4MDMsIDB4MDcsIDB4MDcsIDB4MDUsIDB4MDMsCi0weDAzLCAweDIwLCAweDAyLCAweGUwLCAweDAxLCAweDIwLCAweDAwLCAweGUwLCAweDAwLCAweDIwLCAweDAxLCAweDIxLAotMHgzOCwgMHg2MCwgMHg4MCwgMHgwNywgMHgwMCwgMHhkMSwgMHgwMCwgMHgyMSwgMHgwOCwgMHgwNiwgMHgwMCwgMHgwZSwKLTB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MzQsIDB4NmUsIDB4MjEsIDB4NDAsCi0weDAwLCAweDAwLCAweDExLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmZSwgMHg2NiwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwKLTB4MDcsIDB4MWMsIDB4MDEsIDB4MjAsIDB4MDEsIDB4OTAsIDB4ZmYsIDB4ZjcsIDB4ZTcsIDB4ZmUsIDB4MDEsIDB4MjgsCi0weDEzLCAweGQxLCAweDM4LCAweDJmLCAweDAxLCAweGQwLCAweGE4LCAweDJmLCAweDA3LCAweGQxLCAweDAwLCAweDI2LAotMHhmNiwgMHg0MywgMHgzNCwgMHgxYywgMHhhOCwgMHgyZiwgMHgwMiwgMHhkMSwgMHgzMCwgMHgxYywgMHgwMCwgMHg5NiwKLTB4MzUsIDB4MWMsIDB4MTEsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDYsIDB4NjIsIDB4NDQsIDB4NjIsIDB4ODUsIDB4NjIsCi0weDAwLCAweDk5LCAweGMwLCAweDQ2LCAweGMxLCAweDYyLCAweDAwLCAweDIxLCAweDA4LCAweDQ4LCAweGMwLCAweDQ2LAotMHgwMSwgMHg2MCwgMHgzOCwgMHgyZiwgMHgwMSwgMHhkMCwgMHhhOCwgMHgyZiwgMHgwNSwgMHhkMSwgMHgwMSwgMHgyMSwKLTB4MDEsIDB4NjAsIDB4YTgsIDB4MmYsIDB4MDEsIDB4ZDEsIDB4MDMsIDB4MjEsIDB4MDEsIDB4NjAsIDB4MDEsIDB4OTgsCi0weDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDM0LCAweDZlLCAweDIxLCAweDQwLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MTIsIDB4NGMsIDB4MjEsIDB4NjgsIDB4MTIsIDB4NDgsIDB4ODEsIDB4NDIsIDB4MGIsIDB4ZDAsIDB4MDAsIDB4MjMsCi0weDIxLCAweDFjLCAweGUyLCAweDFkLCAweGMxLCAweDMyLCAweDAwLCAweGUwLAotMHgwOCwgMHhjMSwgMHg5MSwgMHg0MiwgMHhmYywgMHhkMywgMHgyMCwgMHg2MCwgMHhjOCwgMHgyMCwgMHhhMCwgMHg4MCwKLTB4NjcsIDB4NzIsIDB4MzgsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4ZjgsIDB4MjcsIDB4NzIsIDB4MGEsIDB4NDgsCi0weGMwLCAweDQ2LCAweGUwLCAweDYwLCAweDA5LCAweDJmLCAweDAwLCAweGRiLCAweDAwLCAweDI3LCAweGUwLCAweDE5LAotMHgwMSwgMHg3ZCwgMHgwMSwgMHgzMSwgMHgwMSwgMHg3NSwgMHhlMCwgMHg4OCwgMHgwMSwgMHgzMCwgMHhlMCwgMHg4MCwKLTB4MDEsIDB4MjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCi0weGVlLCAweGZmLCAweGMwLCAweGQwLCAweDA4LCAweDEwLCAweDAwLCAweDAzLCAweDgwLCAweGI0LCAweDA4LCAweDRhLAotMHhkMSwgMHgxZCwgMHg4OSwgMHgzMSwgMHgwYiwgMHg3YSwgMHgyMCwgMHgyYiwgMHgwMSwgMHhkMywgMHgwMCwgMHgyMywKLTB4MGIsIDB4NzIsIDB4MDcsIDB4MWMsIDB4MDgsIDB4N2EsIDB4NDMsIDB4MWMsIDB4MGIsIDB4NzIsIDB4ODAsIDB4MTgsCi0weDkwLCAweDMwLCAweDQ3LCAweDcyLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLAotMHgwNywgMHg0OSwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNCwgMHgwOCwgMHg2OCwgMHgwMiwgMHg0MCwgMHgwMSwgMHgyMCwKLTB4MDAsIDB4MmEsIDB4MDYsIDB4ZDEsIDB4MGEsIDB4NjgsIDB4MTIsIDB4MGMsIDB4MDIsIDB4ZDEsIDB4MDksIDB4NjgsCi0weDg5LCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAotMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgMHgwOSwgMHg0YywgMHgzOCwgMHgxYywgMHgyMSwgMHgxYywgMHhmYywgMHhmNywKLTB4OTEsIDB4ZmYsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGUsIDB4ZjgsIDB4MDEsIDB4MjMsIDB4ZDgsIDB4NDIsCi0weDAxLCAweGQxLCAweDAwLCAweDBjLCAweGUwLCAweDgwLCAweDAwLCAweDIxLCAweDIwLCAweDFjLCAweGZjLCAweGY3LAotMHhjNSwgMHhmZSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhjNCwgMHg2NiwgMHgyMSwgMHg0MCwKLTB4ZjgsIDB4YjUsIDB4MDcsIDB4MWMsIDB4NzksIDB4N2EsIDB4NzYsIDB4NDgsIDB4MDAsIDB4MjMsIDB4NzYsIDB4NGMsCi0weDAxLCAweDI5LCAweDVkLCAweGQxLCAweGEyLCAweDg4LCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweGExLCAweDg5LAotMHg4YSwgMHg0MiwgMHg3NCwgMHhkYSwgMHhmYSwgMHg3YSwgMHgwMCwgMHgyYSwgMHgxNSwgMHhkMCwgMHg3YSwgMHg2YywKLTB4MDAsIDB4MmEsIDB4MTIsIDB4ZDAsIDB4OGEsIDB4NDIsIDB4MTAsIDB4ZDgsIDB4MDAsIDB4OWEsIDB4NTEsIDB4MWMsCi0weGExLCAweDgwLCAweGExLCAweDg4LCAweGMwLCAweDQ2LCAweDQxLCAweDgxLCAweDc4LCAweDZjLCAweDZiLCAweDRlLAotMHhjMCwgMHg0NiwgMHhmMCwgMHg4MCwgMHhhMCwgMHg2YSwgMHg1OCwgMHgyMywgMHg3OSwgMHg2YywgMHg1OSwgMHg0MywKLTB4NDAsIDB4MTgsIDB4YzEsIDB4MWEsIDB4MjgsIDB4ZTAsIDB4MjIsIDB4ODgsIDB4MDEsIDB4MzIsIDB4MTIsIDB4MDQsCi0weDEyLCAweDBjLCAweDIyLCAweDgwLCAweDhhLCAweDQyLCAweDAwLCAweGRiLCAweDIzLCAweDgwLCAweDAwLCAweDIyLAotMHgwMCwgMHgyOSwgMHg2OSwgMHhkZCwgMHg1ZiwgMHg0YywgMHhhNCwgMHg2YSwgMHg1ZSwgMHg0YiwgMHgxZCwgMHg4OCwKLTB4NTgsIDB4MjMsIDB4NmIsIDB4NDMsIDB4ZTMsIDB4MTgsIDB4ZGUsIDB4MWQsIDB4MDEsIDB4MzYsIDB4MDEsIDB4MjMsCi0weDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LCAweDE1LCAweGQxLCAweDU4LCAweDQ5LAotMHgwMCwgMHg5YSwgMHgwMSwgMHgzMiwgMHg4YSwgMHg4MCwgMHg4YSwgMHg4OCwgMHhjMCwgMHg0NiwgMHg0MiwgMHg4MSwKLTB4MDgsIDB4ODgsIDB4MDEsIDB4MzAsIDB4NTQsIDB4NGUsIDB4YzAsIDB4NDYsIDB4ZjAsIDB4ODAsIDB4NTgsIDB4MjAsCi0weDY4LCAweDQzLCAweDIxLCAweDE4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDM5LCAweGZiLCAweGYwLCAweDg4LAotMHgwMCwgMHgwNCwgMHgwMCwgMHgxNCwgMHg5NSwgMHhlMCwgMHg0ZCwgMHg0YiwgMHgwMSwgMHgzNSwgMHgyZCwgMHgwNCwKLTB4MmQsIDB4MGMsIDB4MWQsIDB4ODAsIDB4OGQsIDB4NDIsIDB4MDEsIDB4ZGIsIDB4MDAsIDB4MjUsIDB4MWQsIDB4ODAsCi0weDAxLCAweDMyLCAweDEyLCAweDA0LCAweDEyLCAweDE0LCAweDkxLCAweDQyLCAweGNlLCAweGRjLCAweDgxLCAweGUwLAotMHhlMSwgMHg4OCwgMHhlMiwgMHg4OSwgMHg5MSwgMHg0MiwgMHgxOCwgMHhkYSwgMHhmOSwgMHg3YSwgMHgwMCwgMHgyOSwKLTB4MmYsIDB4ZDAsIDB4NzksIDB4NmMsIDB4NDksIDB4MDQsIDB4NDksIDB4MGMsIDB4NzksIDB4NjQsIDB4MmEsIDB4ZDAsCi0weGUyLCAweDg5LCAweDkxLCAweDQyLCAweDI3LCAweGQ4LCAweGUxLCAweDg4LCAweDAxLCAweDMxLCAweGUxLCAweDgwLAotMHhlMSwgMHg4OCwgMHhjMCwgMHg0NiwgMHg4MSwgMHg4MSwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHg3OCwgMHg2YywKLTB4MTgsIDB4NDMsIDB4M2EsIDB4NGUsIDB4YzAsIDB4NDYsIDB4ZjAsIDB4ODAsIDB4MDAsIDB4ZTAsIDB4NjMsIDB4ZTAsCi0weGUwLCAweDZhLCAweDc5LCAweDZjLCAweDRiLCAweDAwLCAweDU5LCAweDE4LCAweDQ5LCAweDAxLCAweDQwLCAweDE4LAotMHhjMSwgMHgxZiwgMHg1OSwgMHgzOSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwZiwgMHhmYiwgMHhlMCwgMHg2YSwKLTB4NzksIDB4NmMsIDB4NGEsIDB4MDAsIDB4NTIsIDB4MTgsIDB4NTIsIDB4MDEsIDB4ODAsIDB4MTgsIDB4MDEsIDB4MzksCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDYwLCAweDM4LCAweDAwLCAweGYwLCAweDg5LCAweGZiLCAweGI2LCAweGU3LAotMHg0YSwgMHhlMCwgMHg2MSwgMHg4OCwgMHgwMSwgMHgzMSwgMHgwOSwgMHgwNCwKLTB4MDksIDB4MGMsIDB4NjEsIDB4ODAsIDB4ZTIsIDB4ODksIDB4OTEsIDB4NDIsIDB4MDAsIDB4ZGIsIDB4NjMsIDB4ODAsCi0weDAwLCAweDIxLCAweDAwLCAweDJhLCAweDNlLCAweGRkLCAweDI0LCAweDRjLCAweGU0LCAweDZhLCAweDIzLCAweDRiLAotMHg1ZCwgMHg4OCwgMHg2YiwgMHgwMCwgMHg1YiwgMHgxOSwgMHg1YiwgMHgwMSwgMHhlMywgMHgxOCwgMHhkZSwgMHgxZCwKLTB4MDEsIDB4MzYsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsCi0weDIwLCAweGQxLCAweDFjLCAweDRlLCAweGYxLCAweDg4LCAweDAxLCAweDMxLCAweGYxLCAweDgwLCAweGYxLCAweDg4LAotMHhjMCwgMHg0NiwgMHg4MSwgMHg4MSwgMHg3MCwgMHg4OCwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHgwMSwgMHgzMCwKLTB4MTgsIDB4NDMsIDB4MTcsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4ODAsIDB4NjgsIDB4MDAsIDB4NDAsIDB4MTksCi0weDQwLCAweDAxLCAweDIxLCAweDE4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGNmLCAweGZhLCAweDcxLCAweDg4LAotMHg0YSwgMHgwMCwgMHg1MiwgMHgxOCwgMHg1MiwgMHgwMSwgMHhmMCwgMHg2YSwgMHg4MCwgMHgxOCwgMHgwMCwgMHhmMCwKLTB4NGQsIDB4ZmIsIDB4MGUsIDB4NDksIDB4YzgsIDB4ODgsIDB4NzksIDB4ZTcsIDB4MGIsIDB4NGIsIDB4MDEsIDB4MzUsCi0weDJkLCAweDA0LCAweDJkLCAweDBjLCAweDVkLCAweDgwLCAweDk1LCAweDQyLCAweDAxLCAweGRiLCAweDAwLCAweDI1LAotMHg1ZCwgMHg4MCwgMHgwMSwgMHgzMSwgMHgwOSwgMHgwNCwgMHgwOSwgMHgxNCwgMHg4YSwgMHg0MiwgMHhjMiwgMHhkYywKLTB4MDEsIDB4ODksIDB4MDEsIDB4MzEsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4ZjgsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDRjLCAweDJiLCAweDAwLCAweDgwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAotMHhjNCwgMHg2NiwgMHgyMSwgMHg0MCwgMHhmMCwgMHhiNCwgMHgwNiwgMHgxYywgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywKLTB4MzMsIDB4NDAsIDB4MDEsIDB4MjQsIDB4NDQsIDB4NGYsIDB4MDAsIDB4MjAsIDB4NDQsIDB4NGEsIDB4NDUsIDB4NGQsCi0weGQxLCAweDFkLCAweDM5LCAweDMxLCAweDAwLCAweDJiLCAweDQxLCAweGQwLCAweGUzLCAweDAzLCAweGYzLCAweDFhLAotMHg3MywgMHhkMCwgMHhlZSwgMHg4OSwgMHg5ZSwgMHg0MiwgMHg3MSwgMHhkMywgMHhlZSwgMHg4OCwgMHgwMCwgMHgyZSwKLTB4NmQsIDB4ZDAsIDB4ZWQsIDB4NmEsIDB4NWUsIDB4MWUsIDB4NzMsIDB4MDAsIDB4OWIsIDB4MTksIDB4NWIsIDB4MDEsCi0weGVkLCAweDE4LCAweGFlLCAweDY4LCAweDM2LCAweDA2LCAweDM2LCAweDBlLCAweDAzLCAweDJlLCAweDAyLCAweGQwLAotMHhjZSwgMHg4OSwgMHgwMSwgMHgzNiwgMHhjZSwgMHg4MSwgMHg0MCwgMHgzNSwgMHhhZCwgMHg4YiwgMHhhZCwgMHgwMCwKLTB4MzUsIDB4NGUsIDB4NzYsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NzAsIDB4NTEsIDB4NTUsIDB4ODksIDB4MDEsIDB4MzUsCi0weDU1LCAweDgxLCAweDMyLCAweDRlLCAweGYyLCAweDZhLCAweGQyLCAweDE4LCAweDkwLCAweDYwLCAweGYyLCAweDZhLAotMHhkMiwgMHgxOCwgMHg5MCwgMHg2MywgMHhmMiwgMHg2YSwgMHhkMiwgMHgxOCwgMHhkMCwgMHg2MywgMHhmMiwgMHg2YSwKLTB4ZDIsIDB4MTgsIDB4MTAsIDB4NjQsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4NTAsIDB4NjQsIDB4ZjIsIDB4NmEsCi0weGQyLCAweDE4LCAweDkwLCAweDY0LCAweGYyLCAweDZhLCAweGQyLCAweDE4LCAweGQwLCAweDY0LCAweGYwLCAweDg4LAotMHgwMSwgMHgzOCwgMHhmMCwgMHg4MCwgMHhmMCwgMHg4OCwgMHhjMCwgMHg0NiwgMHg4OCwgMHg4MSwgMHgyNCwgMHg0OSwKLTB4MDAsIDB4MjgsIDB4MzksIDB4ZDEsIDB4NGYsIDB4ODAsIDB4MzcsIDB4ZTAsIDB4MDAsIDB4MmUsIDB4MzgsIDB4ZDksCi0weGFiLCAweDg5LCAweGIzLCAweDQyLCAweDMwLCAweGQzLCAweGFiLCAweDg4LCAweDAwLCAweDJiLCAweDJjLCAweGQwLAotMHg1MywgMHg4OSwgMHgwMSwgMHgzMywgMHg1MywgMHg4MSwgMHgyYSwgMHgxYywgMHhhZCwgMHg2YSwgMHg1OCwgMHgyMywKLTB4MDEsIDB4M2UsIDB4NzMsIDB4NDMsIDB4ZWQsIDB4MTgsIDB4YWUsIDB4NjgsIDB4MzYsIDB4MDYsIDB4MzYsIDB4MGUsCi0weDAzLCAweDJlLCAweDAyLCAweGQwLCAweGNlLCAweDg5LCAweDAxLCAweDM2LCAweGNlLCAweDgxLCAweGE4LCAweDYwLAotMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHhhOCwgMHg2MywgMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHhlOCwgMHg2MywKLTB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4MjgsIDB4NjQsIDB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4NjgsIDB4NjQsCi0weDk1LCAweDZhLCAweGVkLCAweDE4LCAweGE4LCAweDY0LCAweDk1LCAweDZhLCAweGViLCAweDE4LCAweGQ4LCAweDY0LAotMHg5MCwgMHg4OCwgMHgwMSwgMHgzOCwgMHg5MCwgMHg4MCwgMHg5MCwgMHg4OCwgMHhjMCwgMHg0NiwgMHg0OCwgMHg4MSwKLTB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDQsIDB4ZTAsIDB4MDMsIDB4ZTAsIDB4MTcsIDB4ODAsCi0weDIwLCAweDFjLCAweGYwLCAweGJjLCAweDcwLCAweDQ3LCAweGNhLCAweDg5LCAweDAxLCAweDMyLCAweGNhLCAweDgxLAotMHhmOSwgMHhlNywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MjEsIDB4NDEsIDB4NjAsIDB4MTAsIDB4NDksCi0weDRhLCAweDY4LCAweDAwLCAweDJhLCAweDEwLCAweGQxLCAweGNhLCAweDY4LCAweDAwLCAweDJhLCAweDA0LCAweGQwLAotMHhjYSwgMHgxZCwgMHgxOSwgMHgzMiwgMHgxMiwgMHg3OSwgMHgwMCwgMHgyYSwgMHgwOCwgMHhkMCwgMHg0YSwgMHg2OSwKLTB4MDAsIDB4MmEsIDB4MGIsIDB4ZDEsIDB4ODgsIDB4NjEsIDB4NDgsIDB4NjEsCi0weDAwLCAweGYwLCAweDEwLCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDRhLCAweDY5LCAweDAwLCAweDJhLAotMHgwMiwgMHhkMSwgMHg4OCwgMHg2MSwgMHg0OCwgMHg2MSwgMHhmNywgMHhlNywgMHg4YSwgMHg2OSwgMHhjMCwgMHg0NiwKLTB4NTAsIDB4NjAsIDB4ODgsIDB4NjEsIDB4ZjIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCi0weGIwLCAweGI1LCAweDJhLCAweDQ4LCAweDQwLCAweDY5LCAweDAwLCAweDI4LCAweDRjLCAweGQwLCAweDA4LCAweDIyLAotMHhjMSwgMHg2OCwgMHgwYSwgMHg0MCwgMHgwMCwgMHgyNywgMHgyNywgMHg0YiwgMHhkOSwgMHgxZCwgMHhiOSwgMHgzMSwKLTB4MDAsIDB4MmEsIDB4MTEsIDB4ZDAsIDB4MDQsIDB4MjIsIDB4MjUsIDB4NGMsIDB4YzAsIDB4NDYsIDB4MGMsIDB4NjEsCi0weDI0LCAweDRjLCAweGMwLCAweDQ2LCAweDRjLCAweDYyLCAweDI0LCAweDRjLCAweGMwLCAweDQ2LCAweDhjLCAweDYyLAotMHgyMywgMHg0YywgMHhjMCwgMHg0NiwgMHhjYywgMHg2MiwgMHgyMywgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MywKLTB4NGYsIDB4NjMsIDB4MTIsIDB4ZTAsIDB4MDUsIDB4MjIsIDB4MjEsIDB4NGMsIDB4YzAsIDB4NDYsIDB4MGMsIDB4NjEsCi0weDIwLCAweDRjLCAweGMwLCAweDQ2LCAweDRjLCAweDYyLCAweDIwLCAweDRjLCAweGMwLCAweDQ2LCAweDhjLCAweDYyLAotMHgxZiwgMHg0YywgMHhjMCwgMHg0NiwgMHhjYywgMHg2MiwgMHgxZiwgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MywKLTB4MWUsIDB4NGMsIDB4YzAsIDB4NDYsIDB4NGMsIDB4NjMsIDB4NDAsIDB4MjQsIDB4Y2MsIDB4ODIsIDB4NGYsIDB4ODMsCi0weDFjLCAweDRmLCAweDAwLCAweDIxLCAweDAwLCAweDJhLCAweDBjLCAweGQ5LCAweDhjLCAweDAwLCAweDA1LCAweDE5LAotMHg2ZCwgMHg2YSwgMHg3ZCwgMHg0MCwgMHhlNCwgMHgxOCwgMHhmZiwgMHgzNCwgMHgwMSwgMHgzNCwgMHg2NSwgMHg2MiwKLTB4MDEsIDB4MzEsIDB4OTEsIDB4NDIsIDB4ZjQsIDB4ZDMsIDB4MTAsIDB4MjksIDB4MDcsIDB4ZDIsIDB4OGEsIDB4MDAsCi0weGQyLCAweDE4LCAweGZmLCAweDMyLCAweDAxLCAweDMyLCAweDU3LCAweDYyLCAweDAxLCAweDMxLCAweDEwLCAweDI5LAotMHhmNywgMHhkMywgMHgxMSwgMHg0OSwgMHgwMCwgMHhmMCwgMHgyMiwgMHhmOCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsCi0weDI4LCAweDAxLCAweDQwLCAweDAwLCAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAotMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCwgMHgyMCwgMHgwMSwgMHg0MCwgMHgwMCwKLTB4NjcsIDB4NDUsIDB4MjMsIDB4MDEsIDB4ZWYsIDB4Y2QsIDB4YWIsIDB4ODksIDB4OTgsIDB4YmEsIDB4ZGMsIDB4ZmUsCi0weDEwLCAweDMyLCAweDU0LCAweDc2LCAweGMzLCAweGQyLCAweGUxLCAweGYwLCAweDM2LCAweDM2LCAweDM2LCAweDM2LAotMHgzMCwgMHg4MCwgMHgyMCwgMHg0MCwgMHhiMCwgMHhiNSwgMHgwZiwgMHgxYywgMHgxNSwgMHg0ZCwgMHhlOSwgMHgxZCwKLTB4YzksIDB4MzEsIDB4MTUsIDB4NGMsIDB4MjMsIDB4MWMsIDB4MTUsIDB4NGEsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4ZjcsCi0weDQ0LCAweGZiLCAweGU5LCAweDFkLCAweGZmLCAweDMxLCAweDFlLCAweDMxLCAweDIzLCAweDFjLCAweDBkLCAweDFjLAotMHgxMSwgMHg0YSwgMHgwMSwgMHgyMCwgMHhmYywgMHhmNywgMHgzYiwgMHhmYiwgMHgyOSwgMHgxYywgMHgyMywgMHgxYywKLTB4MGUsIDB4NGEsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4MzUsIDB4ZmIsIDB4MzksIDB4MWMsIDB4MjMsIDB4MWMsCi0weDBjLCAweDRhLCAweDAxLCAweDIwLCAweGZjLCAweGY3LCAweDJmLCAweGZiLCAweDAwLCAweDIxLCAweDBiLCAweDQ4LAotMHhjMiwgMHgxZCwgMHgxOSwgMHgzMiwgMHg1MSwgMHg3MSwgMHgwMSwgMHgyMSwgMHhmZiwgMHgzMCwgMHgwMSwgMHgzMCwKLTB4NDEsIDB4NjIsIDB4MDgsIDB4MWMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweDc1LCAweDA4LCAweGZmLCAweGZmLCAweDI4LCAweDAwLCAweDAzLCAweDAwLAotMHg0MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwNywgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKLTB4ZjAsIDB4YjUsIDB4MzcsIDB4NGEsIDB4NTAsIDB4NjksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzAsCi0weDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAxLCAweDA2LCAweDA5LCAweDBlLCAweDMzLCAweDRiLCAweDAxLCAweDI5LAotMHg0OSwgMHhkMSwgMHgxZiwgMHg2OCwgMHgxOSwgMHgxYywgMHgzMiwgMHg0YiwgMHg5ZiwgMHg0MiwgMHgwNCwgMHhkMSwKLTB4ZmYsIDB4ZjcsIDB4M2UsIDB4ZmYsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjMsCi0weDlmLCAweDAwLCAweGNjLCAweDU5LCAweDU1LCAweDY5LCAweGVmLCAweDE5LCAweDNjLCAweDYxLCAweDAxLCAweDMzLAotMHgwNSwgMHgyYiwgMHhmNywgMHhkMywgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MywKLTB4NTMsIDB4NjksIDB4YzAsIDB4NDYsIDB4OTgsIDB4NjAsIDB4NTAsIDB4NjksIDB4MDgsIDB4MjMsIDB4YzIsIDB4NjgsCi0weDEzLCAweDQwLCAweDI1LCAweDRmLCAweGZhLCAweDFkLCAweGI5LCAweDMyLCAweDAwLCAweDJiLCAweDAyLCAweGQwLAotMHgwNCwgMHgyMywgMHgyMywgMHg0YywgMHgwMSwgMHhlMCwgMHgwNSwgMHgyMywgMHgyMiwgMHg0YywgMHhjMCwgMHg0NiwKLTB4MTQsIDB4NjEsIDB4NDAsIDB4MjQsIDB4ZDQsIDB4ODIsIDB4MDAsIDB4MjQsIDB4NTQsIDB4ODMsIDB4MjAsIDB4NGMsCi0weDAwLCAweDIyLCAweDAwLCAweDJiLCAweDBjLCAweGQ5LCAweDk1LCAweDAwLAotMHg0NiwgMHgxOSwgMHg3NiwgMHg2YSwgMHg2NiwgMHg0MCwgMHhlZCwgMHgxOSwgMHhmZiwgMHgzNSwgMHgwMSwgMHgzNSwKLTB4NmUsIDB4NjIsIDB4MDEsIDB4MzIsIDB4OWEsIDB4NDIsIDB4ZjQsIDB4ZDMsIDB4MTAsIDB4MmEsIDB4MDcsIDB4ZDIsCi0weDkzLCAweDAwLCAweGRiLCAweDE5LCAweGZmLCAweDMzLCAweDAxLCAweDMzLCAweDVjLCAweDYyLCAweDAxLCAweDMyLAotMHgxMCwgMHgyYSwgMHhmNywgMHhkMywgMHhmZiwgMHhmNywgMHg3MCwgMHhmZiwgMHhiYywgMHhlNywgMHgwMCwgMHgyMSwKLTB4OGYsIDB4MDAsIDB4ZGMsIDB4NTksIDB4NTUsIDB4NjksIDB4ZWYsIDB4MTksIDB4N2MsIDB4NjIsIDB4MDEsIDB4MzEsCi0weDA1LCAweDI5LCAweGY3LCAweGQzLCAweDAwLCAweDBhLCAweDAwLCAweDAyLCAweDAzLCAweDIzLCAweDE4LCAweDQzLAotMHg1MSwgMHg2OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MCwgMHg1MCwgMHg2OSwgMHg0MCwgMHg2OCwgMHhjMCwgMHg0NiwKLTB4NTAsIDB4NjEsIDB4MDksIDB4NDgsIDB4ZmMsIDB4ZjcsIDB4YTQsIDB4ZmEsIDB4YTQsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDMwLCAweDgwLCAweDIwLCAweDQwLCAweDY3LCAweDQ1LCAweDIzLCAweDAxLAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHgyOCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwMSwgMHg0MCwgMHgwMCwKLTB4NWMsIDB4NWMsIDB4NWMsIDB4NWMsIDB4MTEsIDB4MzEsIDB4ZmYsIDB4ZmYsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDNiLCAweDQ4LCAweDNjLCAweDRjLCAweDA4LCAweDIxLCAweDIwLCAweDYwLCAweGExLCAweDgwLCAweDAwLCAweDIwLAotMHgyMCwgMHg4MSwgMHhlMSwgMHg4MCwgMHg2MCwgMHg4MSwgMHgzOSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2MCwKLTB4MzgsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjEsIDB4MzgsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjEsCi0weDM3LCAweDQ4LCAweGMwLCAweDQ2LCAweGEwLCAweDYxLCAweDM3LCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDYxLAotMHgzNiwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MiwgMHgzNiwgMHg0OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MiwKLTB4MzUsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjIsIDB4MzUsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjIsCi0weDM0LCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDYzLCAweDM0LCAweDQ4LCAweGMwLCAweDQ2LCAweDYwLCAweDYzLAotMHgzMywgMHg0OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MywgMHgzMywgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2MywKLTB4MzIsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjQsIDB4MzIsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjQsCi0weDMxLCAweDQ4LCAweGMwLCAweDQ2LCAweGEwLCAweDY0LCAweDMxLCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDY0LAotMHgzMCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2NSwgMHgzMCwgMHg0OSwgMHhjOCwgMHg2OCwgMHgwMiwgMHgwNCwKLTB4ODksIDB4NjksIDB4NGEsIDB4NDAsIDB4ZTMsIDB4MWQsIDB4NzksIDB4MzMsIDB4MDksIDB4MDQsIDB4YzksIDB4NDMsCi0weGMwLCAweDQzLCAweDQ4LCAweDQwLCAweGUxLCAweDFkLCAweGI5LCAweDMxLCAweGRhLCAweDYzLCAweDA4LCAweDYwLAotMHgyOSwgMHg0ZCwgMHgyMSwgMHgxYywgMHgyYiwgMHgxYywgMHgyOSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmYywgMHhmNywKLTB4M2UsIDB4ZmEsIDB4MjgsIDB4NGEsIDB4ZTEsIDB4MWQsIDB4YjUsIDB4MzEsIDB4MDEsIDB4MjAsIDB4MmIsIDB4MWMsCi0weDBlLCAweDFjLCAweGZjLCAweGY3LCAweDM2LCAweGZhLCAweDI0LCAweDRhLCAweDAwLCAweDIwLCAweDMxLCAweDFjLAotMHgyYiwgMHgxYywgMHhmYywgMHhmNywgMHgzMCwgMHhmYSwgMHhlMSwgMHgxZCwgMHg0ZCwgMHgzMSwgMHgyYiwgMHgxYywKLTB4MjAsIDB4NGEsIDB4MDEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4MjksIDB4ZmEsIDB4ZTAsIDB4MWQsIDB4NWQsIDB4MzAsCi0weDAxLCAweDY4LCAweDAwLCAweDI5LCAweGZjLCAweGQwLCAweDYwLCAweDZkLCAweGMwLCAweDQ2LCAweDM4LCAweDY1LAotMHgyMCwgMHg2ZSwgMHhjMCwgMHg0NiwgMHg3OCwgMHg2NSwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4ODAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4YjksIDB4MjAsIDB4NDAsIDB4ODEsIDB4ODEsIDB4NDgsIDB4YmQsCi0weDc5LCAweDU2LCAweDIzLCAweDhjLCAweDkzLCAweDBjLCAweDgyLCAweDk1LCAweDFkLCAweDBlLCAweDEyLCAweGNmLAotMHg5YiwgMHgzYiwgMHhjMCwgMHhlOSwgMHhlNiwgMHg1NSwgMHg3YywgMHg4MiwgMHg5OSwgMHhmNiwgMHg3OCwgMHgwMiwKLTB4ZDEsIDB4ZDcsIDB4MjUsIDB4NzMsIDB4NzIsIDB4OGMsIDB4MzMsIDB4MTAsIDB4ZjcsIDB4MDMsIDB4ZjEsIDB4NDIsCi0weDZjLCAweDliLCAweDRhLCAweGE3LCAweDgyLCAweDhlLCAweDIzLCAweGE5LCAweDkwLCAweGIxLCAweDgyLCAweDhlLAotMHhkYywgMHgzZiwgMHhmYiwgMHgyOSwgMHgwMCwgMHg2MiwgMHgyMiwgMHg0NSwgMHg4OCwgMHgyYiwgMHhmMSwgMHg4NSwKLTB4MTIsIDB4NjEsIDB4ZDEsIDB4NzMsIDB4NmUsIDB4YjEsIDB4MTEsIDB4MTYsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCi0weDc1LCAweDA4LCAweGZmLCAweGZmLCAweDU0LCAweDAwLCAweDAzLCAweDAwLCAweDA4LCAweDAwLCAweDAyLCAweDAwLAotMHgxNCwgMHgwMCwgMHgwMywgMHgwMCwgMHg4MCwgMHhiNSwgMHgwZiwgMHgxYywgMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwKLTB4MzMsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NGMsIDB4ZmYsIDB4MDMsIDB4NDgsIDB4MDEsIDB4ODksCi0weDAxLCAweDMxLCAweDAxLCAweDgxLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNCwgMHgxYywKLTB4MGYsIDB4MWMsIDB4MjAsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MWYsIDB4ZjgsIDB4ZTAsIDB4NjgsCi0weDAxLCAweDBlLCAweGZmLCAweDIyLCAweDEyLCAweDA0LCAweDAyLCAweDQwLCAweDEyLCAweDBhLCAweDExLCAweDQzLAotMHhmZiwgMHgyMiwgMHgxMiwgMHgwMiwgMHgwMiwgMHg0MCwgMHgxMiwgMHgwMiwgMHgxMSwgMHg0MywgMHgwMCwgMHgwNiwKLTB4MDgsIDB4NDMsIDB4MzgsIDB4NjUsIDB4MjAsIDB4NjksIDB4YzAsIDB4NDYsIDB4NzgsIDB4NjUsIDB4NjAsIDB4NjksCi0weGMwLCAweDQ2LCAweGI4LCAweDY1LCAweDAzLCAweDQ4LCAweDAxLCAweDg5LCAweDAxLCAweDMxLCAweDAxLCAweDgxLAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4YjUsIDB4MDAsIDB4MjIsIDB4OTMsIDB4MDAsIDB4MWYsIDB4MTgsIDB4YmYsIDB4NjksIDB4NWIsIDB4MTgsCi0weDVmLCAweDYyLCAweDAxLCAweDMyLCAweDA1LCAweDJhLCAweGY3LCAweGQzLCAweDA3LCAweDdhLCAweGZiLCAweDA4LAotMHgwMywgMHhkMywgMHgwMCwgMHgyMywgMHg5MiwgMHgwMCwgMHg1MiwgMHgxOCwgMHgxMywgMHg2MiwgMHgwNywgMHg2YiwKLTB4YzAsIDB4NDYsIDB4OGYsIDB4NjMsIDB4YzcsIDB4NmEsIDB4YzAsIDB4NDYsIDB4Y2YsIDB4NjMsIDB4ODcsIDB4NmIsCi0weGMwLCAweDQ2LCAweDBmLCAweDY0LCAweDQ3LCAweDZiLCAweGMwLCAweDQ2LCAweDRmLCAweDY0LCAweDA3LCAweDZjLAotMHhjMCwgMHg0NiwgMHg4ZiwgMHg2NCwgMHhjMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjYSwgMHg2NCwgMHhjMiwgMHg4OCwKLTB4YzAsIDB4NDYsIDB4MGEsIDB4ODAsIDB4ODIsIDB4N2EsIDB4MTIsIDB4MDYsIDB4MDMsIDB4N2EsIDB4MWIsIDB4MDQsCi0weDFhLCAweDQzLCAweGMzLCAweDg4LCAweDFiLCAweDAyLCAweDFhLCAweDQzLCAweDQzLCAweDdhLCAweGRiLCAweDA3LAotMHgxYSwgMHg0MywgMHg4YSwgMHg2MCwgMHgxNywgMHgxYywgMHg4MywgMHg3YSwgMHg1YSwgMHgwOCwgMHgwNSwgMHhkMywKLTB4MTQsIDB4MjIsIDB4MWMsIDB4MWMsIDB4YTMsIDB4MDgsIDB4MDIsIDB4ZDIsIDB4MTUsIDB4MjIsIDB4MDAsIDB4ZTAsCi0weDAwLCAweDIyLCAweDAwLCAweDdhLCAweDQzLCAweDA4LCAweDEwLCAweGQzLCAweGMwLCAweDA4LCAweDAyLCAweGQzLAotMHg4OCwgMHgyMCwgMHgxMCwgMHg0MywgMHgwMSwgMHhlMCwgMHg4MCwgMHgyMCwgMHgxMCwgMHg0MywgMHgzYSwgMHgwYSwKLTB4MTIsIDB4MDIsIDB4MDEsIDB4MjMsIDB4MWEsIDB4NDMsIDB4YzgsIDB4NjAsIDB4OGEsIDB4NjAsIDB4MDgsIDB4MWMsCi0weGZmLCAweGY3LCAweDc4LCAweGZkLCAweDA1LCAweGUwLCAweDM4LCAweDBhLCAweDAwLCAweDAyLCAweDAzLCAweDIzLAotMHgxOCwgMHg0MywgMHg4OCwgMHg2MCwgMHhjYSwgMHg2MCwgMHgwMywgMHg0OCwgMHgwMSwgMHg4OSwgMHgwMSwgMHgzMSwKLTB4MDEsIDB4ODEsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCi0weGYwLCAweGI0LCAweDAyLCAweDZkLCAweDE0LCAweDRjLCAweDE1LCAweDFjLCAweGU3LCAweDY5LCAweGJkLCAweDQwLAotMHgxMywgMHgxYywgMHgyNiwgMHg2YSwgMHhmMywgMHg0MCwgMHg1ZCwgMHg0MCwgMHgyZSwgMHgxYywgMHg0NSwgMHg2ZCwKLTB4YmQsIDB4NDAsIDB4NmUsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzUsIDB4MWMsIDB4ZmQsIDB4NDAsIDB4MmYsIDB4MWMsCi0weGJiLCAweDAwLCAweDY1LCAweDZhLCAweGViLCAweDU4LCAweDAwLCAweDJiLCAweDA4LCAweGQwLCAweDIzLCAweDY5LAotMHgwMSwgMHgzNywgMHg5ZiwgMHg0MiwgMHgwMCwgMHhkMywgMHgwMCwgMHgyNywgMHhiZSwgMHgwMCwgMHhhZSwgMHg1OSwKLTB4MDAsIDB4MmUsIDB4ZjcsIDB4ZDEsIDB4YTQsIDB4NjksIDB4YTIsIDB4NDAsIDB4MTEsIDB4NDMsIDB4MDUsIDB4NGIsCi0weDE5LCAweDQzLCAweGJhLCAweDAwLCAweGE5LCAweDUwLCAweDQwLCAweDMwLCAweDg3LCAweDgzLCAweGYwLCAweGJjLAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKLTB4ODAsIDB4YjQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjMsIDB4MDAsIDB4MjksIDB4MDUsIDB4ZDksIDB4MDcsIDB4NzgsCi0weDdhLCAweDQwLCAweDAxLCAweDMwLCAweDAxLCAweDMzLCAweDhiLCAweDQyLCAweGY5LCAweGQzLCAweGQwLCAweDQzLAotMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywKLTB4MDAsIDB4MjQsIDB4ZmYsIDB4MjYsIDB4MDksIDB4MzYsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4ZjgsCi0weDAwLCAweGYwLCAweGI4LCAweGY5LCAweDA1LCAweDFjLCAweDAwLCAweGYwLCAweGM3LCAweGZhLCAweDNkLCAweDcwLAotMHgyOCwgMHgxYywgMHgwMSwgMHgzNywgMHgwMSwgMHgzNCwgMHhiNCwgMHg0MiwgMHhmMSwgMHhkMywgMHhmMCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4MDAsIDB4ZjAsIDB4OTMsIDB4ZjgsIDB4MDAsIDB4ZjAsCi0weGE3LCAweGY5LCAweDA3LCAweDFjLCAweDAwLCAweGYwLCAweGI2LCAweGZhLCAweDM4LCAweDBhLCAweGY2LCAweGQzLAotMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMywgMHhiNSwgMHg4MiwgMHhiMCwgMHgwMiwgMHg5OCwKLTB4NDEsIDB4MDIsIDB4NTMsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4NjQsIDB4ZjgsIDB4MDAsIDB4ZjAsIDB4YTgsIDB4ZmEsCi0weGZmLCAweGY3LCAweGU4LCAweGZmLCAweDAwLCAweDI0LCAweDAwLCAweDIwLCAweDAxLCAweDkwLCAweDJlLCAweDIwLAotMHgwMCwgMHg5MCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyNywgMHgwMiwgMHg5OCwgMHgwMSwgMHgyOCwgMHgwNCwgMHhkMSwKLTB4MDAsIDB4OTgsIDB4ODQsIDB4NDIsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4MjYsCi0weDA5LCAweGUwLCAweDAxLCAweDk4LCAweDQxLCAweDFjLCAweDAxLCAweDkxLCAweDAwLCAweGYwLCAweDYwLCAweGY4LAotMHgwMCwgMHhmMCwgMHg3ZSwgMHhmOSwgMHgwNiwgMHgxYywgMHgwMCwgMHhmMCwgMHg4ZCwgMHhmYSwgMHhmOCwgMHgwMCwKLTB4ODYsIDB4NDAsIDB4MzUsIDB4NDMsIDB4MDEsIDB4MzQsIDB4MDEsIDB4MzcsIDB4MDQsIDB4MmYsIDB4ZTYsIDB4ZDMsCi0weDAzLCAweDk5LCAweDIwLCAweGMxLCAweDAzLCAweDkxLCAweGZmLCAweDIzLCAweDA5LCAweDMzLCAweDljLCAweDQyLAotMHhkZCwgMHhkMywgMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMCwgMHhiNSwKLTB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MDEsIDB4MmMsIDB4MmEsIDB4ZDAsIDB4MTYsIDB4NDgsIDB4YzAsIDB4NmYsCi0weDQwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDAwLCAweDI2LCAweDIwLCAweGNmLAotMHhiMSwgMHgwMCwgMHg4NCwgMHgyMCwgMHgwMCwgMHhmMCwgMHgyNCwgMHhmOCwgMHgyOCwgMHgxYywgMHgwMCwgMHhmMCwKLTB4ZGYsIDB4ZjksIDB4MjgsIDB4MGEsIDB4MDAsIDB4ZjAsIDB4ZGMsIDB4ZjksIDB4MjgsIDB4MGMsIDB4MDAsIDB4ZjAsCi0weGQ5LCAweGY5LCAweDI4LCAweDBlLCAweDAwLCAweGYwLCAweGQ2LCAweGY5LCAweDAwLCAweGYwLCAweDVjLCAweGZhLAotMHgwMSwgMHgzNiwgMHg0MiwgMHgyZSwgMHhlOSwgMHhkMywgMHg2MSwgMHgwMiwgMHg4MywgMHgyMCwgMHgwMCwgMHhmMCwKLTB4MGYsIDB4ZjgsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4ZmEsIDB4ZmYsIDB4ZjcsIDB4OTMsIDB4ZmYsIDB4MDQsIDB4NDgsCi0weGMwLCAweDZmLCAweDQwLCAweDIzLCAweDAxLCAweDY4LCAweDk5LCAweDQzLCAweDAxLCAweDYwLCAweGYwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNCwgMHgxYywKLTB4MGYsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NTksIDB4ZmEsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZjksCi0weDM4LCAweDBjLCAweDAwLCAweGYwLCAweGIzLCAweGY5LCAweDM4LCAweDBhLCAweDAwLCAweGYwLCAweGIwLCAweGY5LAotMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhhZCwgMHhmOSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4MDAsIDB4YjUsIDB4MDEsIDB4MWMsIDB4NTQsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZTcsIDB4ZmYsIDB4MDAsIDB4MjAsCi0weDAwLCAweGYwLCAweGEyLCAweGY5LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweDAwLCAweGYwLAotMHgzZCwgMHhmYSwgMHg1NywgMHgyMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhmOSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4OTAsIDB4YjUsIDB4MDgsIDB4NGYsIDB4ZmEsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MTQsIDB4NjgsIDB4OWMsIDB4NDMsCi0weDE0LCAweDYwLCAweDIzLCAweDFjLCAweGZmLCAweGY3LCAweDY1LCAweGZmLCAweGY4LCAweDZmLCAweDIwLCAweDIzLAotMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDgsIDB4NGYsIDB4ZmEsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDE0LCAweDY4LCAweDljLCAweDQzLCAweDE0LCAweDYwLCAweDIzLCAweDFjLCAweGZmLCAweGY3LCAweDg3LCAweGZmLAotMHhmOCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHg5MCwgMHhiYywKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MDQsIDB4MWMsCi0weDBmLCAweDFjLCAweDE4LCAweDRlLCAweGYwLCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDk5LCAweDQzLAotMHgwMSwgMHg2MCwgMHg2MSwgMHgwMiwgMHg1MywgMHgyMCwgMHhmZiwgMHhmNywgMHhhNSwgMHhmZiwgMHgwMCwgMHhmMCwKLTB4ZTksIDB4ZjksIDB4ZmYsIDB4ZjcsIDB4MjksIDB4ZmYsIDB4ZjgsIDB4MWQsIDB4MDUsIDB4MzAsIDB4MDEsIDB4MmMsCi0weDAzLCAweGQxLCAweDIyLCAweDJmLCAweDAxLCAweGQzLCAweDAwLCAweDI3LCAweDBmLCAweGUwLCAweDQ0LCAweDFjLAotMHhmZiwgMHhmNywgMHhhYSwgMHhmZiwgMHgwMCwgMHhmMCwgMHhjOCwgMHhmOCwgMHgwNywgMHgxYywgMHgwMCwgMHhmMCwKLTB4ZDcsIDB4ZjksIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YTIsIDB4ZmYsIDB4MDAsIDB4ZjAsIDB4YzAsIDB4ZjgsCi0weDA1LCAweDFjLCAweDAwLCAweGYwLCAweGNmLCAweGY5LCAweGYwLCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LAotMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgyOCwgMHgwMiwgMHgzOCwgMHg0MywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4YzIsIDB4YjAsCi0weDE0LCAweDFjLCAweDBkLCAweDFjLCAweDA3LCAweDFjLCAweDAxLCAweDJmLCAweDJmLCAweGQwLCAweDc5LCAweDAyLAotMHgxOSwgMHg0ZSwgMHhmMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywgMHgwMiwgMHg2MCwKLTB4NTMsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4NmIsIDB4ZmYsIDB4MDAsIDB4ZjAsIDB4YWYsIDB4ZjksIDB4ZmYsIDB4ZjcsCi0weGVmLCAweGZlLCAweDY4LCAweDQ2LCAweGZmLCAweGY3LCAweGQ2LCAweGZlLCAweDZhLCAweDQ2LCAweGU4LCAweDFkLAotMHgwNSwgMHgzMCwgMHgxNCwgMHg1NCwgMHgyMSwgMHgwYSwgMHg2OCwgMHg0NCwgMHg0MSwgMHg3MCwgMHg2OCwgMHg0NiwKLTB4MDAsIDB4OTksIDB4MGMsIDB4MzAsIDB4ZmYsIDB4ZjcsIDB4YmEsIDB4ZmUsIDB4MDIsIDB4YWIsIDB4MTgsIDB4NzAsCi0weDAwLCAweDIwLCAweDU4LCAweDcwLCAweDY4LCAweDQ2LCAweDBjLCAweDIxLAotMHhmZiwgMHhmNywgMHhiMiwgMHhmZSwgMHgwMiwgMHhhYiwgMHg1OCwgMHg3MCwgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywKLTB4ZmYsIDB4ZjcsIDB4MTUsIDB4ZmYsIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsCi0weDAxLCAweDYwLCAweDQyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmZiwgMHhiNSwgMHhjMiwgMHhiMCwgMHgwNywgMHgxYywgMHgwMSwgMHgyZiwKLTB4MDEsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4MzYsIDB4ZTAsIDB4NmIsIDB4NDYsIDB4MDAsIDB4MjAsIDB4YzQsIDB4NDMsCi0weDEwLCAweGMzLCAweDAxLCAweDMwLCAweDQyLCAweDI4LCAweGZiLCAweGQzLCAweDY4LCAweDQ2LCAweDBjLCAweDMwLAotMHgwMywgMHgxYywgMHgwMCwgMHgyNCwgMHgwMCwgMHgyYSwgMHgwYSwgMHhkOSwgMHgwZSwgMHg4OCwgMHhjMCwgMHg0NiwKLTB4MDYsIDB4NzAsIDB4MGUsIDB4ODgsIDB4MzYsIDB4MTIsIDB4NDYsIDB4NzAsIDB4MDIsIDB4MzAsIDB4MDIsIDB4MzEsCi0weDAyLCAweDM0LCAweDk0LCAweDQyLCAweGY0LCAweGQzLCAweDAwLCAweDkyLCAweDE4LCAweDFjLCAweDExLCAweDFjLAotMHhmZiwgMHhmNywgMHg3YywgMHhmZSwgMHgwNCwgMHgxYywgMHgwMCwgMHgyMCwgMHgwMSwgMHg5MCwgMHgwMiwgMHhhYiwKLTB4MWMsIDB4NzAsIDB4NTgsIDB4NzAsIDB4OWQsIDB4NzAsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MjEsIDB4ZmYsIDB4ZjcsCi0weDcxLCAweGZlLCAweDAyLCAweGFiLCAweDU4LCAweDcwLCAweDQ1LCAweDliLCAweDFkLCAweDA2LCAweDJkLCAweDBlLAotMHhhYywgMHg0MiwgMHgwMywgMHhkMSwgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgzZSwgMHhmZiwKLTB4MDEsIDB4MjAsIDB4YWMsIDB4NDIsIDB4MDAsIDB4ZDEsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjAsIDB4ZjAsIDB4YmMsCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGIwLCAweGI1LCAweGMyLCAweGIwLCAweDBmLCAweDFjLCAweDQxLCAweDAyLAotMHgxNCwgMHg0YywgMHhlMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywgMHgwMiwgMHg2MCwKLTB4NTMsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZWYsIDB4ZmUsIDB4MDAsIDB4ZjAsIDB4MzMsIDB4ZjksIDB4ZmYsIDB4ZjcsCi0weDczLCAweGZlLCAweDY4LCAweDQ2LCAweGZmLCAweGY3LCAweDVhLCAweGZlLCAweGUwLCAweDZmLCAweDIwLCAweDIzLAotMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMiwgMHhhZCwgMHgwMSwgMHg2MCwgMHg2ZCwgMHg3OCwgMHgwMCwgMHgyNCwKLTB4MDIsIDB4YWIsIDB4NWMsIDB4NzAsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4M2MsIDB4ZmUsCi0weGE4LCAweDQyLCAweDAyLCAweGQxLCAweDAwLCAweDk4LCAweDg3LCAweDQyLCAweDAxLCAweGQzLCAweDIwLCAweDFjLAotMHgwMCwgMHhlMCwgMHgwMSwgMHgyMCwgMHg0MiwgMHhiMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsCi0weGI0LCAweDIyLCAweDlmLCAweGU1LCAweGI0LCAweDMyLCAweDlmLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsCi0weDgxLCAweDAzLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsIDB4MDEsIDB4MDMsIDB4ODAsIDB4ZTEsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsIDB4ODEsIDB4MDIsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwKLTB4MDEsIDB4MDIsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHg4MSwgMHgwMSwgMHg4MCwgMHhlMSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHgwMSwgMHgwMSwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LAotMHg4MSwgMHgwMCwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LAotMHgwMSwgMHgwMCwgMHg4MCwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywKLTB4YTQsIDB4MjEsIDB4OWYsIDB4ZTUsIDB4YTgsIDB4MzEsIDB4OWYsIDB4ZTUsIDB4YTAsIDB4MTMsIDB4YTAsIDB4ZTEsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MjAsIDB4MTMsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4YTAsIDB4MTIsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgyMCwgMHgxMiwgMHhhMCwgMHhlMSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHhhMCwgMHgxMSwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgyMCwgMHgxMSwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweGEwLCAweDEwLCAweGEwLCAweGUxLAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LCAweGEwLCAweDMwLCAweDlmLCAweGU1LAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgMHg3MCwgMHgzMCwgMHg5ZiwgMHhlNSwKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsIDB4MzQsIDB4MjAsIDB4OWYsIDB4ZTUsCi0weDNjLCAweDMwLCAweDlmLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmOCwgMHgwMCwgMHgxOCwgMHg0MCwKLTB4MDQsIDB4MDEsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4ZmMsIDB4MDAsIDB4MTgsIDB4NDAsCi0weDgwLCAweGI1LCAweDAwLCAweGYwLCAweDBjLCAweGY4LCAweDAwLCAweDI3LCAweDM4LCAweDFjLCAweDAwLCAweGYwLAotMHg0NywgMHhmOCwgMHg3OCwgMHgxYywgMHgwNywgMHgwNCwgMHgzZiwgMHgwYywgMHgwYywgMHgyZiwgMHhmNywgMHhkZCwKLTB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MWQsIDB4NDgsCi0weDAyLCAweDY4LCAweDFkLCAweDQ5LCAweDhiLCAweDY5LCAweGQyLCAweDE4LCAweDAyLCAweDYwLCAweDAyLCAweDY2LAotMHg4YSwgMHg2YSwgMHg0MywgMHg2OCwgMHg5YiwgMHgxOCwgMHg0MywgMHg2MCwgMHg5MywgMHg0MiwgMHgwMiwgMHhkMiwKLTB4ODIsIDB4NjgsIDB4MDEsIDB4MzIsIDB4ODIsIDB4NjAsIDB4YzIsIDB4NjgsIDB4MGIsIDB4NmEsIDB4ZDIsIDB4MTgsCi0weGMyLCAweDYwLCAweDQyLCAweDY5LCAweGNiLCAweDY4LCAweGQyLCAweDE4LCAweDQyLCAweDYxLCAweGMyLCAweDY5LAotMHg4YiwgMHg2OCwgMHhkMiwgMHgxOCwgMHhjMiwgMHg2MSwgMHgwMiwgMHg2OSwgMHgwYiwgMHg2OSwgMHhkMiwgMHgxOCwKLTB4MDIsIDB4NjEsIDB4ODIsIDB4NjksIDB4MGIsIDB4NjgsIDB4ZDIsIDB4MTgsIDB4ODIsIDB4NjEsIDB4MDIsIDB4NmIsCi0weGNiLCAweDY5LCAweGQyLCAweDE4LCAweDAyLCAweDYzLCAweDRhLCAweDZhLCAweDQzLCAweDZiLCAweDliLCAweDE4LAotMHg0MywgMHg2MywgMHg5MywgMHg0MiwgMHgwMiwgMHhkMiwgMHg4MiwgMHg2YiwgMHgwMSwgMHgzMiwgMHg4MiwgMHg2MywKLTB4YzIsIDB4NmIsIDB4NGIsIDB4NjksIDB4ZDIsIDB4MTgsIDB4YzIsIDB4NjMsIDB4MDIsIDB4NmMsIDB4YzksIDB4NmEsCi0weDUxLCAweDE4LCAweDAxLCAweDY0LCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLAotMHgwMCwgMHgwOCwgMHgxNCwgMHg0MCwgMHg4OCwgMHhiNSwgMHg2OSwgMHg0NiwgMHgwMCwgMHhmMCwgMHgxNywgMHhmOCwKLTB4ODEsIDB4MDgsIDB4MGEsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjksIDB4MDcsIDB4ZDksIDB4MDAsIDB4MjIsCi0weDgzLCAweDAwLCAweDAwLCAweDlmLCAweGMwLCAweDQ2LCAweGZhLCAweDUwLCAweDAxLCAweDMwLCAweDg4LCAweDQyLAotMHhmOCwgMHhkMywgMHg4OCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHgwMCwgMHhmMCwKLTB4MDQsIDB4ZjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjIsCi0weDAwLCAweDI4LCAweDBhLCAweGQwLCAweDAxLCAweDI4LCAweDBhLCAweGQwLCAweDAyLCAweDI4LCAweDBjLCAweGQwLAotMHgwMywgMHgyOCwgMHgwMiwgMHhkMSwgMHgwNywgMHg0OCwgMHgxYywgMHgyMiwgMHgwOCwgMHg2MCwgMHgxMCwgMHgxYywKLTB4NzAsIDB4NDcsIDB4MDYsIDB4NDgsIDB4MDQsIDB4ZTAsIDB4MDYsIDB4NDgsIDB4NTAsIDB4MjIsIDB4MDgsIDB4NjAsCi0weGY3LCAweGU3LCAweDA1LCAweDQ4LCAweDY4LCAweDIyLCAweDA4LCAweDYwLCAweGYzLCAweGU3LCAweDAwLCAweDAwLAotMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4YjQsIDB4MDMsIDB4MjIsIDB4YzIsIDB4ODAsIDB4MTUsIDB4NGEsCi0weGMwLCAweDQ2LCAweDgyLCAweDYwLCAweDE0LCAweDRhLCAweDEyLCAweDg4LCAweDAxLCAweDMyLCAweGMyLCAweDYwLAotMHgwMCwgMHgyMCwgMHgxMywgMHg0YSwgMHgxMywgMHg1YywgMHhjMCwgMHg0NiwgMHgwYiwgMHg3MCwgMHgwMSwgMHgzMCwKLTB4MDEsIDB4MzEsIDB4MDgsIDB4MjgsIDB4ZjgsIDB4ZDMsIDB4MjAsIDB4MjIsIDB4MGEsIDB4NzAsIDB4MDEsIDB4MzEsCi0weDAwLCAweDIwLCAweDBlLCAweDRiLCAweDFmLCAweDVjLCAweGMwLCAweDQ2LCAweDBmLCAweDcwLCAweDAxLCAweDMwLAotMHgwMSwgMHgzMSwgMHgwOCwgMHgyOCwgMHhmOCwgMHhkMywgMHgwYSwgMHg3MCwgMHgwMSwgMHgzMSwgMHgwMCwgMHgyMCwKLTB4MDksIDB4NGEsIDB4MTMsIDB4NWMsIDB4YzAsIDB4NDYsIDB4MGIsIDB4NzAsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzEsCi0weDA4LCAweDI4LCAweGY4LCAweGQzLCAweDAwLCAweDIwLCAweDA4LCAweDcwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LAotMHgwOCwgMHgxMCwgMHgwMCwgMHgwMywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg3YywgMHgwNCwgMHgwMCwgMHg4MCwKLTB4ODUsIDB4MDQsIDB4MDAsIDB4ODAsIDB4OGUsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MjMsCi0weDBhLCAweDQ4LCAweGMxLCAweDFkLCAweDg5LCAweDMxLCAweDRiLCAweDcwLCAweDAwLCAweDIyLCAweDBhLCAweDcwLAotMHg2NCwgMHgyMSwgMHg4MCwgMHgzMCwgMHhjMSwgMHg4MiwgMHgwMSwgMHg4MywgMHg0MywgMHg4MywgMHg3ZCwgMHgyMSwKLTB4YzksIDB4MDAsIDB4ODEsIDB4ODMsIDB4YzIsIDB4ODMsIDB4MDQsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MjEsCi0weDAwLCAweGYwLCAweDhlLCAweGZiLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHhiNSwgMHgyMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHhlMSwgMHhmZiwgMHgxMywgMHg0OCwKLTB4MDIsIDB4MjIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4ODAsIDB4ZmIsIDB4MDEsIDB4MjMsIDB4ZDgsIDB4NDIsCi0weDBhLCAweGQxLCAweDEwLCAweDQ4LCAweGMxLCAweDFkLCAweDM5LCAweDMxLCAweGNhLCAweDg4LCAweDAxLCAweDMyLAotMHhjYSwgMHg4MCwgMHg4MSwgMHg3OSwgMHgwMSwgMHgzMSwgMHg4MSwgMHg3MSwgMHhmZCwgMHhmNywgMHg3MCwgMHhmOSwKLTB4MGIsIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDUsIDB4ZDEsIDB4MGEsIDB4NDgsIDB4N2QsIDB4MjIsCi0weGQyLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweGYwLCAweDY4LCAweGZiLCAweDA4LCAweDQ4LCAweGZiLCAweGY3LAotMHhlMSwgMHhmYywgMHgwOCwgMHg0OCwgMHgyOCwgMHgyMiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHg2MCwgMHhmYiwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzksIDB4MjEsIDB4ZmYsIDB4ZmYsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGE1LCAweDdiLCAweDIxLCAweDQwLAotMHg5NSwgMHgyYywgMHhmZiwgMHhmZiwgMHg1OSwgMHgwMywgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHgxMCwgMHgyMCwKLTB4MGYsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MGYsIDB4NGEsIDB4MGYsIDB4NDgsIDB4NjQsIDB4MjEsCi0weGZiLCAweGY3LCAweGM2LCAweGZjLCAweDBlLCAweDQ4LCAweDAxLCAweDIyLCAweDEyLCAweDA0LCAweDAxLCAweDY4LAotMHgwYSwgMHg0MCwgMHgwOCwgMHgyMSwgMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwMiwgMHg2OCwgMHgxMiwgMHgwYywKLTB4MDcsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDQsIDB4ZDMsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NDYsCi0weGMxLCAweDYwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDA3LCAweDQ4LCAweGMwLCAweDQ2LCAweDAxLCAweDY0LAotMHhmOSwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhhNSwgMHg1NSwgMHhmZiwgMHhmZiwKLTB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweGY4LCAweGI1LCAweDI3LCAweDQ4LCAweDAxLCAweDIyLCAweDEyLCAweDA0LAotMHgwMSwgMHg2OCwgMHgwYSwgMHg0MCwgMHgwNywgMHgyMSwgMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwMiwgMHg2OCwKLTB4MTIsIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MjEsIDB4NDgsCi0weGMwLCAweDQ2LCAweGMxLCAweDYwLCAweDAyLCAweGUwLCAweDIwLCAweDQ4LCAweGMwLCAweDQ2LCAweDAxLCAweDY0LAotMHgxZiwgMHg0OCwgMHhmYiwgMHhmNywgMHg4NywgMHhmYywgMHgxZiwgMHg0OCwgMHhjMSwgMHg2YiwgMHhmZiwgMHgyOSwKLTB4ZmMsIDB4ZDEsIDB4ODEsIDB4NmIsIDB4NDIsIDB4NmIsIDB4MTYsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MWMsIDB4NGMsCi0weDEwLCAweDIzLCAweDYwLCAweDY5LCAweDE4LCAweDQzLCAweDYwLCAweDYxLCAweGExLCAweDY5LCAweDk5LCAweDQzLAotMHgxZCwgMHgwNCwgMHhhMSwgMHg2MSwgMHhlOCwgMHg2MCwgMHhhMCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgyOCwgMHg2MSwKLTB4MTYsIDB4NGEsIDB4MTcsIDB4NDksIDB4NjQsIDB4MjAsIDB4ZmIsIDB4ZjcsIDB4NmYsIDB4ZmMsIDB4MTYsIDB4NGEsCi0weGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDE1LCAweDRiLCAweDAwLCAweDIwLCAweDM5LCAweDFjLCAweDMyLCAweDFjLAotMHhmYiwgMHhmNywgMHg2ZSwgMHhmYywgMHgxMywgMHg0OCwgMHhjMSwgMHg2OCwgMHgwOCwgMHgyOSwgMHhmYywgMHhkMSwKLTB4MTIsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4NWQsIDB4ZmMsIDB4MTAsIDB4MjMsIDB4NjAsIDB4NjksIDB4OTgsIDB4NDMsCi0weDYwLCAweDYxLCAweGU4LCAweDYwLCAweDAxLCAweDIwLCAweGUzLCAweDIzLCAweDFiLCAweDAxLCAweGUxLCAweDE4LAotMHhjOCwgMHg3MSwgMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDIsIDB4ZmYsIDB4ZmYsCi0weDAwLCAweDAxLCAweDE4LCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDIwLCAweDU1LCAweGZmLCAweGZmLAotMHhiNSwgMHhiNiwgMHgyMSwgMHg0MCwgMHg2NCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwKLTB4NDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4ZjQsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ZmQsIDB4ZjcsCi0weDAxLCAweGZmLCAweDA2LCAweDQ4LCAweGZiLCAweGY3LCAweDMyLCAweGZjLCAweGZkLCAweGY3LCAweGQ2LCAweGZlLAotMHhmZSwgMHhmNywgMHgwNCwgMHhmOCwgMHhmZSwgMHhmNywgMHgxNiwgMHhmOCwgMHhmZSwgMHhmNywgMHgyNCwgMHhmOCwKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTEsIDB4MDMsIDB4ZmYsIDB4ZmYsIDB4OTAsIDB4YjUsIDB4ZmQsIDB4ZjcsCi0weDZiLCAweGZjLCAweDM0LCAweDRmLCAweDAwLCAweDI0LCAweGY5LCAweDY4LCAweGY4LCAweDFkLCAweDc5LCAweDMwLAotMHgwMSwgMHgyOSwgMHgwZiwgMHhkMSwgMHgzMSwgMHg0OSwgMHhjMCwgMHg0NiwgMHhmOSwgMHg2NywgMHgzMSwgMHg0OSwKLTB4YzAsIDB4NDYsIDB4MDEsIDB4NjAsIDB4MzAsIDB4NDksIDB4YzAsIDB4NDYsIDB4MGMsIDB4NjAsIDB4NGMsIDB4NjAsCi0weDhjLCAweDYwLCAweGNjLCAweDYwLCAweDBjLCAweDYxLCAweDRjLCAweDYxLCAweDhjLCAweDYxLCAweDA0LCAweGUwLAotMHhmOSwgMHgxZCwgMHg3ZCwgMHgzMSwgMHhmOSwgMHg2NywgMHgxMiwgMHhjMCwgMHgwOCwgMHgzOCwgMHgwMCwgMHg2OCwKLTB4NjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZjgsIDB4NmYsIDB4MjAsIDB4MjMsCi0weDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweGY4LCAweDZmLCAweDQwLCAweDIzLCAweDAxLCAweDY4LAotMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMCwgMHhmMCwgMHg1NCwgMHhmOCwgMHhmZCwgMHhmNywgMHg0ZSwgMHhmYywKLTB4MDAsIDB4ZjAsIDB4NWUsIDB4ZjksIDB4ZmQsIDB4ZjcsIDB4NzMsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4MGMsIDB4ZmUsCi0weGZkLCAweGY3LCAweDJlLCAweGZlLCAweGZkLCAweGY3LCAweGI2LCAweGZkLCAweGZkLCAweGY3LCAweGMyLCAweGZlLAotMHhmZCwgMHhmNywgMHg1NCwgMHhmZCwgMHhmZCwgMHhmNywgMHgwYSwgMHhmZCwgMHhmZCwgMHhmNywgMHg5NCwgMHhmZCwKLTB4MDAsIDB4ZjAsIDB4MWEsIDB4ZmEsIDB4ZmQsIDB4ZjcsIDB4OWMsIDB4ZmYsIDB4ZmQsIDB4ZjcsIDB4MGEsIDB4ZmYsCi0weGZkLCAweGY3LCAweGQyLCAweGZlLCAweGZkLCAweGY3LCAweDNjLCAweGZjLCAweGZiLCAweGY3LCAweGRjLCAweGZhLAotMHhmZiwgMHhmNywgMHg5YywgMHhmZiwgMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwKLTB4ZjgsIDB4MTgsIDB4MDQsIDB4NzIsIDB4NDQsIDB4NzIsIDB4MDcsIDB4MjMsIDB4NWIsIDB4MDIsIDB4ZjgsIDB4MTgsCi0weDA0LCAweDYzLCAweGY4LCAweDY4LCAweDAxLCAweDI4LCAweDAyLCAweGQxLCAweGE4LCAweDIwLCAweGZlLCAweGY3LAotMHhiMSwgMHhmZCwgMHgwOSwgMHg0OCwgMHhjMCwgMHg0NiwgMHg0NCwgMHg2MiwgMHgwMCwgMHhmMCwgMHgxOCwgMHhmYSwKLTB4MDcsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4YmQsIDB4ZmIsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAxLCAweDExLCAweDQwLCAweDA0LCAweDAxLCAweDExLCAweDQwLAotMHgwMCwgMHgwMSwgMHgxMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgxNSwgMHg4ZiwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4YjUsIDB4MDQsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4YWEsIDB4ZmIsIDB4ZmQsIDB4ZjcsIDB4NWUsIDB4ZmYsCi0weGZkLCAweGY3LCAweDI0LCAweGZjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDE1LCAweDk5LCAweDIxLCAweDQwLAotMHhmYSwgMHgyMSwgMHgwMywgMHg0OCwgMHhjMCwgMHg0NiwgMHg0MSwgMHg2MiwgMHg0MCwgMHgyMSwgMHg0MSwgMHg2MiwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4NDgsIDB4NDEsIDB4NjksCi0weDA3LCAweDRiLCAweDE5LCAweDQzLCAweDQxLCAweDYxLCAweDgyLCAweDY5LCAweDlhLCAweDQzLCAweDgyLCAweDYxLAotMHgwMSwgMHgyMiwgMHgxMiwgMHgwNSwgMHhkMSwgMHg2MCwgMHg4MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg2MSwKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZmUsIDB4YWYsIDB4OWEsIDB4MTAsCi0weDAwLCAweGI1LCAweDAyLCAweDQ4LCAweGZiLCAweGY3LCAweDgwLCAweGZiLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAotMHhjOCwgMHg1NywgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHgyNCwgMHg0YywgMHgwMSwgMHgyMSwgMHgwOSwgMHgwNCwKLTB4MjAsIDB4NjgsIDB4MDEsIDB4NDAsIDB4MDksIDB4MjAsIDB4MjIsIDB4NGUsIDB4MjIsIDB4NGQsIDB4MDAsIDB4MjksCi0weDA1LCAweGQxLCAweDIxLCAweDY4LCAweDA5LCAweDBjLCAweDA0LCAweGQxLCAweDIxLCAweDY4LCAweDg5LCAweDBhLAotMHgwMSwgMHhkMywgMHhmMCwgMHg2MCwgMHgwMCwgMHhlMCwgMHgyOCwgMHg2NCwgMHgxZCwgMHg0OCwgMHhmYiwgMHhmNywKLTB4NjUsIDB4ZmIsIDB4MWQsIDB4NGYsIDB4MWQsIDB4NDksIDB4ODgsIDB4NjksIDB4MDEsIDB4MzAsIDB4ODgsIDB4NjEsCi0weDM4LCAweDdhLCAweDAwLCAweDI4LCAweDAyLCAweGQxLCAweDc4LCAweDdhLCAweDAwLCAweDI4LCAweDFmLCAweGQwLAotMHgxOSwgMHg0OCwgMHhmYiwgMHhmNywgMHg1NywgMHhmYiwgMHgxOSwgMHg0OCwgMHhmYiwgMHhmNywgMHg1NCwgMHhmYiwKLTB4MDAsIDB4MjgsIDB4ZmEsIDB4ZDEsIDB4MzgsIDB4N2EsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4MTYsIDB4NDgsCi0weGZiLCAweGY3LCAweDRjLCAweGZiLCAweDAxLCAweDIxLCAweDA5LCAweDA0LCAweDIwLCAweDY4LCAweDAxLCAweDQwLAotMHgxNCwgMHgyMCwgMHgwMCwgMHgyOSwgMHgwNSwgMHhkMSwgMHgyMSwgMHg2OCwgMHgwOSwgMHgwYywgMHgwNCwgMHhkMSwKLTB4MjEsIDB4NjgsIDB4ODksIDB4MGEsIDB4MDEsIDB4ZDMsIDB4ZjAsIDB4NjAsIDB4MDEsIDB4ZTAsIDB4MjgsIDB4NjQsCi0weGZmLCAweGU3LCAweGZlLCAweGU3LCAweGZmLCAweGY3LCAweDY1LCAweGZkLCAweDBiLCAweDQ4LCAweGZiLCAweGY3LAotMHgzNSwgMHhmYiwgMHhmZiwgMHhmNywgMHhhZiwgMHhmZiwgMHhjZCwgMHhlNywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKLTB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDIsIDB4ZmYsIDB4ZmYsCi0weDg4LCAweDFjLCAweDAwLCAweDgwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLCAweGY0LCAweDAxLCAweGZmLCAweGZmLAotMHhiNSwgMHgwNywgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHg5OSwgMHg5ZiwgMHgyMSwgMHg0MCwKLTB4MDAsIDB4MjAsIDB4MDcsIDB4NGEsIDB4MDEsIDB4MjEsIDB4MDksIDB4MDUsIDB4NTAsIDB4NjEsIDB4YzgsIDB4NjAsCi0weGQwLCAweDYxLCAweGM4LCAweDYxLCAweDAzLCAweDIzLCAweGRiLCAweDA0LCAweDAzLCAweDRhLCAweDAxLCAweDIxLAotMHhkMSwgMHg2MywgMHg1OCwgMHg2MCwgMHhmYywgMHhlNywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4YjUsIDB4YzAsIDB4YjAsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MjEsCi0weDBhLCAweDIwLCAweGZjLCAweGY3LCAweGQxLCAweGZmLCAweDA3LCAweDFjLCAweGZmLCAweDJmLCAweDI4LCAweGQwLAotMHg2OSwgMHg0NiwgMHhmZiwgMHgyMiwgMHgzOCwgMHgxYywgMHgwMSwgMHgzMiwgMHhmZCwgMHhmNywgMHg1NCwgMHhmOSwKLTB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsIDB4OTgsIDB4NDIsIDB4MWIsIDB4ZDEsIDB4MGQsIDB4OTgsIDB4MDAsIDB4MDksCi0weDE4LCAweGQzLCAweDM4LCAweDFjLCAweGZkLCAweGY3LCAweDhkLCAweGY4LCAweDBlLCAweDQ5LCAweDAxLCAweDIyLAotMHgxMiwgMHgwNCwgMHgwOCwgMHg2OCwgMHgwMiwgMHg0MCwgMHgwZCwgMHg0OCwgMHgwNSwgMHhkMSwgMHgwYSwgMHg2OCwKLTB4MTIsIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDksIDB4NjgsIDB4ODksIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MGEsIDB4NDksCi0weGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDAyLCAweGUwLCAweDA5LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDY0LAotMHhmZiwgMHhmNywgMHhiYywgMHhmZiwgMHgzOCwgMHgxYywgMHhmZCwgMHhmNywgMHg3NCwgMHhmOCwgMHg0MCwgMHhiMCwKLTB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgxNywgMHg0OSwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNCwKLTB4MDgsIDB4NjgsIDB4MDIsIDB4NDAsIDB4MDYsIDB4MjAsIDB4MDAsIDB4MmEsIDB4MDUsIDB4ZDEsIDB4MGEsIDB4NjgsCi0weDEyLCAweDBjLCAweDA2LCAweGQxLCAweDA5LCAweDY4LCAweDg5LCAweDBhLCAweDAzLCAweGQzLCAweDExLCAweDQ5LAotMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgwMiwgMHhlMCwgMHgxMCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2NCwKLTB4MDMsIDB4MjAsIDB4ZmUsIDB4ZjcsIDB4ZDMsIDB4ZmMsIDB4ZmIsIDB4ZjcsIDB4MGQsIDB4ZmYsIDB4MDEsIDB4MjMsCi0weDE4LCAweDQzLCAweGZiLCAweGY3LCAweGU3LCAweGZmLCAweGZmLCAweGY3LCAweDgzLCAweGZlLCAweGZmLCAweGY3LAotMHg5ZCwgMHhmZiwgMHhmZiwgMHhmNywgMHgwNSwgMHhmZSwgMHhmZiwgMHhmNywgMHhmNSwgMHhmZSwgMHhmZiwgMHhmNywKLTB4MDksIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4OWIsIDB4ZmQsIDB4ZmYsIDB4ZjcsIDB4MjEsIDB4ZmYsIDB4MDgsIDB4YmMsCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNCwgMHg0NiwgMHg0YSwgMHgwMSwgMHgyMSwgMHhjOSwgMHgwMywKLTB4NDUsIDB4NGQsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZWMsIDB4MTgsIDB4YTEsIDB4NjEsIDB4MjgsIDB4ODgsCi0weDQwLCAweDA0LCAweDQzLCAweDRiLCAweGMwLCAweDE4LCAweDg3LCAweDFhLCAweDA0LCAweDIwLCAweGFmLCAweDYwLAotMHg0MSwgMHg0ZSwgMHhjMCwgMHg0NiwgMHhiMCwgMHg2MSwgMHgwOCwgMHgyMCwgMHhjOCwgMHgyMywgMHg0MywgMHg0MywKLTB4YmIsIDB4NDIsIDB4MjEsIDB4ZDksIDB4NDEsIDB4MDAsIDB4M2QsIDB4NGUsIDB4YzAsIDB4NDYsIDB4MzEsIDB4NjEsCi0weGI2LCAweDY5LCAweDIwLCAweDIzLCAweDliLCAweDFiLCAweDNhLCAweDRlLCAweGMwLCAweDQ2LCAweGYzLCAweDYxLAotMHgxMCwgMHgzYiwgMHgzMywgMHg2MiwgMHg4YiwgMHgwMCwgMHhmZiwgMHgxYSwgMHg0MCwgMHgwOCwgMHg4MSwgMHg0MiwKLTB4MTcsIDB4ZDMsIDB4YjgsIDB4MjMsIDB4NDMsIDB4NDMsIDB4YmIsIDB4NDIsIDB4MDgsIDB4ZDksIDB4NDEsIDB4MWUsCi0weDMyLCAweDRiLCAweGMwLCAweDQ2LCAweDk5LCAweDgxLCAweGQ5LCAweDgxLCAweDQwLCAweDAwLCAweDAyLCAweDM4LAotMHg1OCwgMHg2MSwgMHgwYSwgMHhlMCwgMHgwMSwgMHgzMCwgMHg4MSwgMHg0MiwgMHhlZiwgMHhkMiwgMHgwNiwgMHhlMCwKLTB4MmMsIDB4NGUsIDB4YjMsIDB4NjksIDB4MDEsIDB4MzMsIDB4YjMsIDB4NjEsIDB4NDAsIDB4MDAsIDB4ODgsIDB4NDIsCi0weGQyLCAweGQ5LCAweDJhLCAweDQ5LCAweDAwLCAweDIwLCAweGEzLCAweDY5LCAweDliLCAweDA4LCAweDA3LCAweGQwLAotMHgyOCwgMHg0YiwgMHg4NywgMHgwMCwgMHhjYiwgMHg1MSwgMHhhNywgMHg2OSwgMHhiZiwgMHgwOCwgMHgwMSwgMHgzMCwKLTB4ODcsIDB4NDIsIDB4ZjgsIDB4ZDgsIDB4MjIsIDB4NDksIDB4YzAsIDB4NDYsIDB4OGEsIDB4NjIsIDB4OGMsIDB4ODksCi0weDU4LCAweDIwLCAweDYwLCAweDQzLCAweDg3LCAweDE4LCAweDAwLCAweDIwLCAweDAwLCAweDIyLCAweDAwLCAweDJjLAotMHgwYSwgMHhkZCwgMHg1OCwgMHgyMywgMHg0MywgMHg0MywgMHg4YywgMHg2YSwgMHhlMywgMHgxOCwgMHgwMSwgMHgzMCwKLTB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4OWEsIDB4NjAsIDB4OGIsIDB4ODksIDB4ODMsIDB4NDIsIDB4ZjQsIDB4ZGMsCi0weGNmLCAweDYyLCAweGNjLCAweDg5LCAweDYwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDAxLCAweGM3LCAweDE5LAotMHgwMCwgMHgyMCwgMHgwMCwgMHgyYywgMHgwYiwgMHhkZCwgMHg0MywgMHgwMCwgMHgxYiwgMHgxOCwgMHg1YiwgMHgwMSwKLTB4Y2MsIDB4NmEsIDB4ZTMsIDB4MTgsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4OWEsIDB4NjAsCi0weGNiLCAweDg5LCAweDgzLCAweDQyLCAweGYzLCAweGRjLCAweDRmLCAweDYyLCAweDAwLCAweDIwLCAweDBiLCAweDY5LAotMHgwMCwgMHgyYiwgMHgwNywgMHhkOSwgMHg4NywgMHgwMCwgMHg0YiwgMHg2YSwgMHhjMCwgMHg0NiwgMHhkYSwgMHg1MSwKLTB4MGIsIDB4NjksIDB4MDEsIDB4MzAsIDB4ODMsIDB4NDIsIDB4ZjcsIDB4ZDgsIDB4NDksIDB4NmEsIDB4ODAsIDB4MDAsCi0weDA4LCAweDE4LCAweDA0LCAweDM4LCAweDI4LCAweDYxLCAweGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAotMHhiMCwgMHhiZSwgMHgyMSwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwKLTB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4YWQsIDB4ZGUsIDB4MDAsCi0weDBhLCAweDQ4LCAweDAxLCAweDIzLCAweDFiLCAweDA2LCAweDQxLCAweDY5LCAweDk5LCAweDQzLCAweDFhLCAweDA5LAotMHg0MSwgMHg2MSwgMHhkMSwgMHg2MCwgMHgwMCwgMHgyMSwgMHhhMSwgMHgyMiwgMHg1MiwgMHgwMywgMHg5MSwgMHg2MSwKLTB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODEsIDB4NjEsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDYsCi0weDU5LCAweDA1LCAweDA4LCAweDYwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAotMHg4MCwgMHhiNCwgMHgwMiwgMHgxYywgMHgwYiwgMHg0OCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMywgMHgxOCwKLTB4OWEsIDB4NjEsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDYsIDB4NDIsIDB4NjksIDB4MWEsIDB4NDMsIDB4NDIsIDB4NjEsCi0weDg3LCAweDY5LCAweDlmLCAweDQzLCAweDAxLCAweDIzLCAweDFiLCAweDA1LAotMHg4NywgMHg2MSwgMHhkYSwgMHg2MCwgMHg4MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxOCwgMHg2MSwgMHhhMSwgMHgyMCwKLTB4NDAsIDB4MDMsIDB4ODEsIDB4NjEsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDgwLCAweGI1LCAweGZmLCAweGY3LCAweGM5LCAweGZmLCAweDAwLCAweDIwLCAweDAwLCAweGYwLCAweDIwLCAweGY4LAotMHgwMCwgMHgyMCwgMHgwOSwgMHg0OSwgMHgwMCwgMHgyMiwgMHgwMywgMHgwMSwgMHg1ZiwgMHgxOCwgMHgzMywgMHgyMywKLTB4OWIsIDB4MDEsIDB4ZmIsIDB4MTgsIDB4OWEsIDB4NjIsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZjYsIDB4ZDMsCi0weDA0LCAweDQ4LCAweDAxLCAweDIyLCAweDAwLCAweDIxLCAweDAwLCAweGYwLCAweDMzLCAweGY4LCAweDgwLCAweGJjLAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgxZCwgMHgzZSwgMHhmZiwgMHhmZiwKLTB4MDAsIDB4YjUsIDB4MDIsIDB4NDgsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCi0weGE4LCAweDYxLCAweDAwLCAweDAwLCAweDgwLCAweGI0LCAweDAxLCAweDIyLCAweDEyLCAweDA1LCAweDBmLCAweDRiLAotMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHgwMCwgMHgyOCwgMHgwZSwgMHhkMCwgMHhjOCwgMHg2MSwgMHgxOCwgMHgxYywKLTB4NTksIDB4NjksIDB4NTMsIDB4MDEsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjEsIDB4ODcsIDB4NjksIDB4OWYsIDB4NDMsCi0weDg3LCAweDYxLCAweGQxLCAweDYwLCAweDgwLCAweDY5LCAweGMwLCAweDQ2LCAweDEwLCAweDYxLCAweDgwLCAweGJjLAotMHg3MCwgMHg0NywgMHgxOCwgMHgxYywgMHg1ZiwgMHg2OSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwNiwgMHg5ZiwgMHg0MywKLTB4NDcsIDB4NjEsIDB4ZDcsIDB4NjAsIDB4MDAsIDB4MjAsIDB4YzgsIDB4NjEsIDB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGIwLCAweGI0LCAweDA3LCAweDFjLCAweDAwLCAweDIwLCAweDE3LCAweDRjLAotMHgwMywgMHgwMSwgMHgxZCwgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhlYiwgMHgxOCwgMHg5ZCwgMHg2YSwKLTB4YmQsIDB4NDIsIDB4MDUsIDB4ZDEsIDB4MWQsIDB4NmIsIDB4OTUsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4ZGIsIDB4NmEsCi0weDhiLCAweDQyLCAweDFjLCAweGQwLCAweDAxLCAweDMwLCAweDBiLCAweDI4LCAweGVlLCAweGQzLCAweDAwLCAweDIwLAotMHgwMywgMHgwMSwgMHgxZCwgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhlYiwgMHgxOCwgMHg5YiwgMHg2YSwKLTB4MDAsIDB4MmIsIDB4MDksIDB4ZDEsIDB4MDMsIDB4MDEsIDB4MWMsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsCi0weGUzLCAweDE4LCAweDFhLCAweDYzLCAweGQ5LCAweDYyLCAweDVhLCAweDYzLCAweDlmLCAweDYyLCAweDAyLCAweGUwLAotMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwgMHhlYSwgMHhkMywgMHgwYiwgMHgyOCwgMHgwMSwgMHhkMSwgMHgwMCwgMHgyMCwKLTB4YzAsIDB4NDMsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCi0weDkwLCAweGI0LCAweDAxLCAweDFjLCAweDAwLCAweDIyLCAweDAxLCAweDIwLCAweDE2LCAweDRmLCAweDAxLCAweGUwLAotMHgwMCwgMHgyYSwgMHgwNywgMHhkMSwgMHgwMywgMHgwMSwgMHhkYywgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwKLTB4ZTMsIDB4MTgsIDB4OWIsIDB4NjksIDB4OGIsIDB4NDIsIDB4MTEsIDB4ZDEsIDB4MDIsIDB4MDEsIDB4ZDIsIDB4MTksCi0weDMzLCAweDIzLCAweDliLCAweDAxLCAweGQyLCAweDE4LCAweDkzLCAweDZhLCAweGMwLCAweDQ2LCAweDkzLCAweDYxLAotMHhkMywgMHg2YSwgMHhjMCwgMHg0NiwgMHhkMywgMHg2MSwgMHgxMywgMHg2YiwgMHhjMCwgMHg0NiwgMHgxMywgMHg2MiwKLTB4NTMsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NTMsIDB4NjIsIDB4MDEsIDB4MjIsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsCi0weGUwLCAweGQzLCAweDA3LCAweDRiLCAweDAwLCAweDJhLCAweDAyLCAweGQxLCAweDlhLCAweDY4LCAweDhhLCAweDQyLAotMHgwMywgMHhkMSwgMHgwMCwgMHgyMSwgMHg5OSwgMHg2MCwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwKLTB4YzAsIDB4NDMsIDB4ZmEsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZTgsIDB4MWIsIDB4MDAsIDB4ODAsCi0weDBiLCAweDI4LCAweDE3LCAweGRhLCAweDBjLCAweDQ5LCAweDAxLCAweDIzLCAweDViLCAweDA2LCAweDhhLCAweDY5LAotMHgxMywgMHg0MywgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNSwgMHg4YiwgMHg2MSwgMHgxMywgMHg2MSwgMHgwMCwgMHgwMSwKLTB4NDAsIDB4MTgsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4MDMsIDB4NmIsIDB4YzAsIDB4NDYsCi0weDQzLCAweDYzLCAweDUzLCAweDAxLCAweDg4LCAweDY5LCAweDk4LCAweDQzLCAweDg4LCAweDYxLCAweDEwLCAweDYxLAotMHgwMSwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYywgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKLTB4OTAsIDB4YjQsIDB4MDgsIDB4NGEsIDB4ZDAsIDB4NjksIDB4MDAsIDB4MjEsIDB4MDcsIDB4NGYsIDB4ZDMsIDB4NjksCi0weDgzLCAweDQyLCAweDAyLCAweGQ5LCAweGZjLCAweDFhLCAweDIwLCAweDE4LCAweDAwLCAweGUwLCAweGMwLCAweDFhLAotMHgwOSwgMHgxOCwgMHgxOCwgMHgxYywgMHhiOSwgMHg0MiwgMHhmNCwgMHhkOSwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywKLTB4MDAsIDB4MjAsIDB4MTQsIDB4NDAsIDB4YTgsIDB4NjEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsCi0weDAwLCAweDI0LCAweDAwLCAweDJmLCAweDA0LCAweGQzLCAweGZmLCAweGY3LCAweGUzLCAweGZmLCAweDAxLCAweDM0LAotMHhiYywgMHg0MiwgMHhmYSwgMHhkOSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCmluZGV4IDNhZjlhOTUuLjlkZDRmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYworKysgYi9kcml2ZXJzL25ldC90eXBob29uLmMKQEAgLTEwMCwxMCArMTAwLDExIEBACiAjZGVmaW5lIFBLVF9CVUZfU1oJCTE1MzYKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0eXBob29uIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gCSIxLjUuOCIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIwNi8xMS8wOSIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OIAkiMS41LjkiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiTWFyIDIsIDIwMDkiCiAjZGVmaW5lIFBGWAkJCURSVl9NT0RVTEVfTkFNRSAiOiAiCiAjZGVmaW5lIEVSUl9QRlgJCQlLRVJOX0VSUiBQRlgKKyNkZWZpbmUgRklSTVdBUkVfTkFNRQkJIjNjb20vdHlwaG9vbi5iaW4iCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEyOSw5ICsxMzAsOSBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSAidHlwaG9vbi5oIgotI2luY2x1ZGUgInR5cGhvb24tZmlybXdhcmUuaCIKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogICAgICJ0eXBob29uLmM6IHZlcnNpb24gIiBEUlZfTU9EVUxFX1ZFUlNJT04gIiAoIiBEUlZfTU9EVUxFX1JFTERBVEUgIilcbiI7CkBAIC0xMzksNiArMTQwLDcgQEAKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIERpbGxvdyA8ZGF2ZUB0aGVkaWxsb3dzLm9yZz4iKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9NT0RVTEVfVkVSU0lPTik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfTkFNRSk7CiBNT0RVTEVfREVTQ1JJUFRJT04oIjNDb20gVHlwaG9vbiBGYW1pbHkgKDNDOTkwLCAzQ1I5OTAsIGFuZCB2YXJpYW50cykiKTsKIE1PRFVMRV9QQVJNX0RFU0MocnhfY29weWJyZWFrLCAiUGFja2V0cyBzbWFsbGVyIHRoYW4gdGhpcyBhcmUgY29waWVkIGFuZCAiCiAJCQkgICAgICAgInRoZSBidWZmZXIgZ2l2ZW4gYmFjayB0byB0aGUgTklDLiBEZWZhdWx0ICIKQEAgLTEzNDQsMTQgKzEzNDYsNzQgQEAKIAl0cC0+dHhIaVJpbmcubGFzdFJlYWQgPSAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlICp0eXBob29uX2Z3OworCitzdGF0aWMgaW50Cit0eXBob29uX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHR5cGhvb24gKnRwKQoreworCWNvbnN0IHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyICpmSGRyOworCWNvbnN0IHN0cnVjdCB0eXBob29uX3NlY3Rpb25faGVhZGVyICpzSGRyOworCWNvbnN0IHU4ICppbWFnZV9kYXRhOworCXUzMiBudW1TZWN0aW9uczsKKwl1MzIgc2VjdGlvbl9sZW47CisJdTMyIHJlbWFpbmluZzsKKwlpbnQgZXJyOworCisJaWYgKHR5cGhvb25fZncpCisJCXJldHVybiAwOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmdHlwaG9vbl9mdywgRklSTVdBUkVfTkFNRSwgJnRwLT5wZGV2LT5kZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAorCQkJCXRwLT5uYW1lLCBGSVJNV0FSRV9OQU1FKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpbWFnZV9kYXRhID0gKHU4ICopIHR5cGhvb25fZnctPmRhdGE7CisJcmVtYWluaW5nID0gdHlwaG9vbl9mdy0+c2l6ZTsKKwlpZiAocmVtYWluaW5nIDwgc2l6ZW9mKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyKSkKKwkJZ290byBpbnZhbGlkX2Z3OworCisJZkhkciA9IChzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlciAqKSBpbWFnZV9kYXRhOworCWlmIChtZW1jbXAoZkhkci0+dGFnLCAiVFlQSE9PTiIsIDgpKQorCQlnb3RvIGludmFsaWRfZnc7CisKKwludW1TZWN0aW9ucyA9IGxlMzJfdG9fY3B1KGZIZHItPm51bVNlY3Rpb25zKTsKKwlpbWFnZV9kYXRhICs9IHNpemVvZihzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlcik7CisJcmVtYWluaW5nIC09IHNpemVvZihzdHJ1Y3QgdHlwaG9vbl9maWxlX2hlYWRlcik7CisKKwl3aGlsZSAobnVtU2VjdGlvbnMtLSkgeworCQlpZiAocmVtYWluaW5nIDwgc2l6ZW9mKHN0cnVjdCB0eXBob29uX3NlY3Rpb25faGVhZGVyKSkKKwkJCWdvdG8gaW52YWxpZF9mdzsKKworCQlzSGRyID0gKHN0cnVjdCB0eXBob29uX3NlY3Rpb25faGVhZGVyICopIGltYWdlX2RhdGE7CisJCWltYWdlX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCB0eXBob29uX3NlY3Rpb25faGVhZGVyKTsKKwkJc2VjdGlvbl9sZW4gPSBsZTMyX3RvX2NwdShzSGRyLT5sZW4pOworCisJCWlmIChyZW1haW5pbmcgPCBzZWN0aW9uX2xlbikKKwkJCWdvdG8gaW52YWxpZF9mdzsKKworCQlpbWFnZV9kYXRhICs9IHNlY3Rpb25fbGVuOworCQlyZW1haW5pbmcgLT0gc2VjdGlvbl9sZW47CisJfQorCisJcmV0dXJuIDA7CisKK2ludmFsaWRfZnc6CisJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBmaXJtd2FyZSBpbWFnZVxuIiwgdHAtPm5hbWUpOworCXJlbGVhc2VfZmlybXdhcmUodHlwaG9vbl9mdyk7CisJdHlwaG9vbl9mdyA9IE5VTEw7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIHN0YXRpYyBpbnQKIHR5cGhvb25fZG93bmxvYWRfZmlybXdhcmUoc3RydWN0IHR5cGhvb24gKnRwKQogewogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPmlvYWRkcjsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLT5wZGV2OwotCXN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyICpmSGRyOwotCXN0cnVjdCB0eXBob29uX3NlY3Rpb25faGVhZGVyICpzSGRyOwotCXU4ICppbWFnZV9kYXRhOworCWNvbnN0IHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyICpmSGRyOworCWNvbnN0IHN0cnVjdCB0eXBob29uX3NlY3Rpb25faGVhZGVyICpzSGRyOworCWNvbnN0IHU4ICppbWFnZV9kYXRhOwogCXZvaWQgKmRwYWdlOwogCWRtYV9hZGRyX3QgZHBhZ2VfZG1hOwogCV9fc3VtMTYgY3N1bTsKQEAgLTEzNjUsMjAgKzE0MjcsMTIgQEAKIAlpbnQgaTsKIAlpbnQgZXJyOwogCi0JZXJyID0gLUVJTlZBTDsKLQlmSGRyID0gKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyICopIHR5cGhvb25fZmlybXdhcmVfaW1hZ2U7Ci0JaW1hZ2VfZGF0YSA9ICh1OCAqKSBmSGRyOwotCi0JaWYobWVtY21wKGZIZHItPnRhZywgIlRZUEhPT04iLCA4KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGZpcm13YXJlIGltYWdlIVxuIiwgdHAtPm5hbWUpOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQorCWltYWdlX2RhdGEgPSAodTggKikgdHlwaG9vbl9mdy0+ZGF0YTsKKwlmSGRyID0gKHN0cnVjdCB0eXBob29uX2ZpbGVfaGVhZGVyICopIGltYWdlX2RhdGE7CiAKIAkvKiBDYW5ub3QganVzdCBtYXAgdGhlIGZpcm13YXJlIGltYWdlIHVzaW5nIHBjaV9tYXBfc2luZ2xlKCkgYXMKLQkgKiB0aGUgZmlybXdhcmUgaXMgcGFydCBvZiB0aGUga2VybmVsL21vZHVsZSBpbWFnZSwgc28gd2UgYWxsb2NhdGUKLQkgKiBzb21lIGNvbnNpc3RlbnQgbWVtb3J5IHRvIGNvcHkgdGhlIHNlY3Rpb25zIGludG8sIGFzIGl0IGlzIHNpbXBsZXIsCi0JICogYW5kIHNob3J0LWxpdmVkLiBJZiB3ZSBldmVyIHNwbGl0IG91dCBhbmQgcmVxdWlyZSBhIHVzZXJsYW5kCi0JICogZmlybXdhcmUgbG9hZGVyLCB0aGVuIHdlIGNhbiByZXZpc2l0IHRoaXMuCisJICogdGhlIGZpcm13YXJlIGlzIHZtYWxsb2MoKSdkIGFuZCBtYXkgbm90IGJlIHBoeXNpY2FsbHkgY29udGlndW91cywKKwkgKiBzbyB3ZSBhbGxvY2F0ZSBzb21lIGNvbnNpc3RlbnQgbWVtb3J5IHRvIGNvcHkgdGhlIHNlY3Rpb25zIGludG8uCiAJICovCiAJZXJyID0gLUVOT01FTTsKIAlkcGFnZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIFBBR0VfU0laRSwgJmRwYWdlX2RtYSk7CkBAIC0xNzgzLDcgKzE4MzcsNyBAQAogCX0KIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCWlvd3JpdGUzMihUWVBIT09OX0lOVFJfTk9ORSwKIAkJCQl0cC0+aW9hZGRyICsgVFlQSE9PTl9SRUdfSU5UUl9NQVNLKTsKIAkJdHlwaG9vbl9wb3N0X3BjaV93cml0ZXModHAtPmlvYWRkcik7CkBAIC0xODA2LDEwICsxODYwLDEwIEBACiAKIAlpb3dyaXRlMzIoaW50cl9zdGF0dXMsIGlvYWRkciArIFRZUEhPT05fUkVHX0lOVFJfU1RBVFVTKTsKIAotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpIHsKKwlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZ0cC0+bmFwaSkpIHsKIAkJaW93cml0ZTMyKFRZUEhPT05fSU5UUl9BTEwsIGlvYWRkciArIFRZUEhPT05fUkVHX0lOVFJfTUFTSyk7CiAJCXR5cGhvb25fcG9zdF9wY2lfd3JpdGVzKGlvYWRkcik7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnRwLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IsIHBvbGwgYWxyZWFkeSBzY2hlZHVsZWRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSk7CkBAIC0xOTQ0LDcgKzE5OTgsNyBAQAogCQlnb3RvIGVycm9yX291dDsKIAogCUlOSVRfQ09NTUFORF9OT19SRVNQT05TRSgmeHBfY21kLCBUWVBIT09OX0NNRF9WTEFOX1RZUEVfV1JJVEUpOwotCXhwX2NtZC5wYXJtMSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRVRIX1BfODAyMVEpOworCXhwX2NtZC5wYXJtMSA9IGNwdV90b19sZTE2KEVUSF9QXzgwMjFRKTsKIAllcnIgPSB0eXBob29uX2lzc3VlX2NvbW1hbmQodHAsIDEsICZ4cF9jbWQsIDAsIE5VTEwpOwogCWlmKGVyciA8IDApCiAJCWdvdG8gZXJyb3Jfb3V0OwpAQCAtMjA4Niw2ICsyMTQwLDEwIEBACiAJc3RydWN0IHR5cGhvb24gKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgZXJyOwogCisJZXJyID0gdHlwaG9vbl9yZXF1ZXN0X2Zpcm13YXJlKHRwKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKwogCWVyciA9IHR5cGhvb25fd2FrZXVwKHRwLCBXYWl0U2xlZXApOwogCWlmKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHdha2V1cCBkZXZpY2VcbiIsIGRldi0+bmFtZSk7CkBAIC0yNjI0LDYgKzI2ODIsOCBAQAogc3RhdGljIHZvaWQgX19leGl0CiB0eXBob29uX2NsZWFudXAodm9pZCkKIHsKKwlpZiAodHlwaG9vbl9mdykKKwkJcmVsZWFzZV9maXJtd2FyZSh0eXBob29uX2Z3KTsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnR5cGhvb25fZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi5oIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5oCmluZGV4IGRkNzAyMmMuLjY3M2ZkNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24uaAorKysgYi9kcml2ZXJzL25ldC90eXBob29uLmgKQEAgLTE3NCwxOCArMTc0LDE4IEBACiAJCXU2NCB0eF9hZGRyOwkvKiBvcGFxdWUgZm9yIGhhcmR3YXJlLCBmb3IgVFhfREVTQyAqLwogCX07CiAJX19sZTMyIHByb2Nlc3NGbGFnczsKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9OT19DUkMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JUF9DSEtTVU0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9UQ1BfQ0hLU1VNCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9UQ1BfU0VHTUVOVAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDgpCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfSU5TRVJUX1ZMQU4JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDEwKQotI2RlZmluZSBUWVBIT09OX1RYX1BGX0lQU0VDCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMjApCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfVkxBTl9QUklPUklUWQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwNDApCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfVURQX0NIS1NVTQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwODApCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfUEFEX0ZSQU1FCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAxMDApCi0jZGVmaW5lIFRZUEhPT05fVFhfUEZfUkVTRVJWRUQJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMGUwMCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9WTEFOX01BU0sJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwZmZmZjAwMCkKLSNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JTlRFUk5BTAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweGYwMDAwMDAwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX05PX0NSQwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JUF9DSEtTVU0JCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfVENQX0NIS1NVTQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1RDUF9TRUdNRU5UCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfSU5TRVJUX1ZMQU4JY3B1X3RvX2xlMzIoMHgwMDAwMDAxMCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9JUFNFQwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9WTEFOX1BSSU9SSVRZCWNwdV90b19sZTMyKDB4MDAwMDAwNDApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfVURQX0NIS1NVTQljcHVfdG9fbGUzMigweDAwMDAwMDgwKQorI2RlZmluZSBUWVBIT09OX1RYX1BGX1BBRF9GUkFNRQkJY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9SRVNFUlZFRAkJY3B1X3RvX2xlMzIoMHgwMDAwMGUwMCkKKyNkZWZpbmUgVFlQSE9PTl9UWF9QRl9WTEFOX01BU0sJCWNwdV90b19sZTMyKDB4MGZmZmYwMDApCisjZGVmaW5lIFRZUEhPT05fVFhfUEZfSU5URVJOQUwJCWNwdV90b19sZTMyKDB4ZjAwMDAwMDApCiAjZGVmaW5lIFRZUEhPT05fVFhfUEZfVkxBTl9UQUdfU0hJRlQJMTIKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0yMDMsOCArMjAzLDggQEAKIAl1OCAgZmxhZ3M7CiAJdTggIG51bURlc2M7CiAJX19sZTE2IG1zc19mbGFnczsKLSNkZWZpbmUgVFlQSE9PTl9UU09fRklSU1QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgxMDAwKQotI2RlZmluZSBUWVBIT09OX1RTT19MQVNUCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MjAwMCkKKyNkZWZpbmUgVFlQSE9PTl9UU09fRklSU1QJCWNwdV90b19sZTE2KDB4MTAwMCkKKyNkZWZpbmUgVFlQSE9PTl9UU09fTEFTVAkJY3B1X3RvX2xlMTYoMHgyMDAwKQogCV9fbGUzMiByZXNwQWRkckxvOwogCV9fbGUzMiBieXRlc1R4OwogCV9fbGUzMiBzdGF0dXM7CkBAIC0yMjIsOCArMjIyLDggQEAKIAl1OCAgZmxhZ3M7CiAJdTggIG51bURlc2M7CiAJX19sZTE2IGlwc2VjRmxhZ3M7Ci0jZGVmaW5lIFRZUEhPT05fSVBTRUNfR0VOX0lWCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAwKQotI2RlZmluZSBUWVBIT09OX0lQU0VDX1VTRV9JVglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9JUFNFQ19HRU5fSVYJY3B1X3RvX2xlMTYoMHgwMDAwKQorI2RlZmluZSBUWVBIT09OX0lQU0VDX1VTRV9JVgljcHVfdG9fbGUxNigweDAwMDEpCiAJX19sZTMyIHNhMTsKIAlfX2xlMzIgc2EyOwogCV9fbGUzMiByZXNlcnZlZDsKQEAgLTI0OCw0MSArMjQ4LDQxIEBACiAJdTMyIGFkZHI7CS8qIG9wYXF1ZSwgY29tZXMgZnJvbSB2aXJ0QWRkciAqLwogCXUzMiBhZGRySGk7CS8qIG9wYXF1ZSwgY29tZXMgZnJvbSB2aXJ0QWRkckhpICovCiAJX19sZTMyIHJ4U3RhdHVzOwotI2RlZmluZSBUWVBIT09OX1JYX0VSUl9JTlRFUk5BTAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAwKQotI2RlZmluZSBUWVBIT09OX1JYX0VSUl9GSUZPX1VOREVSUlVOCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfQkFEX1NTRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAyKQotI2RlZmluZSBUWVBIT09OX1JYX0VSUl9SVU5UCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDMpCi0jZGVmaW5lIFRZUEhPT05fUlhfRVJSX0NSQwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA0KQotI2RlZmluZSBUWVBIT09OX1JYX0VSUl9PVkVSU0laRQkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA1KQotI2RlZmluZSBUWVBIT09OX1JYX0VSUl9BTElHTgkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA2KQotI2RlZmluZSBUWVBIT09OX1JYX0VSUl9EUklCQkxFCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDcpCi0jZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fTUFTSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAzKQotI2RlZmluZSBUWVBIT09OX1JYX1BST1RPX1VOS05PV04JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAwKQotI2RlZmluZSBUWVBIT09OX1JYX1BST1RPX0lQCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fSVBYCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fUlhfVkxBTgkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JUF9GUkFHCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDgpCi0jZGVmaW5lIFRZUEhPT05fUlhfSVBTRUMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAxMCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JUF9DSEtfRkFJTAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDIwKQotI2RlZmluZSBUWVBIT09OX1JYX1RDUF9DSEtfRkFJTAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDQwKQotI2RlZmluZSBUWVBIT09OX1JYX1VEUF9DSEtfRkFJTAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDgwKQotI2RlZmluZSBUWVBIT09OX1JYX0lQX0NIS19HT09ECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAxMDApCi0jZGVmaW5lIFRZUEhPT05fUlhfVENQX0NIS19HT09ECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAyMDApCi0jZGVmaW5lIFRZUEhPT05fUlhfVURQX0NIS19HT09ECQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDA0MDApCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0lOVEVSTkFMCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKQorI2RlZmluZSBUWVBIT09OX1JYX0VSUl9GSUZPX1VOREVSUlVOCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0JBRF9TU0QJCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX1JVTlQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDMpCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0NSQwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FUlJfT1ZFUlNJWkUJCWNwdV90b19sZTMyKDB4MDAwMDAwMDUpCisjZGVmaW5lIFRZUEhPT05fUlhfRVJSX0FMSUdOCQljcHVfdG9fbGUzMigweDAwMDAwMDA2KQorI2RlZmluZSBUWVBIT09OX1JYX0VSUl9EUklCQkxFCQljcHVfdG9fbGUzMigweDAwMDAwMDA3KQorI2RlZmluZSBUWVBIT09OX1JYX1BST1RPX01BU0sJCWNwdV90b19sZTMyKDB4MDAwMDAwMDMpCisjZGVmaW5lIFRZUEhPT05fUlhfUFJPVE9fVU5LTk9XTgljcHVfdG9fbGUzMigweDAwMDAwMDAwKQorI2RlZmluZSBUWVBIT09OX1JYX1BST1RPX0lQCQljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZSBUWVBIT09OX1JYX1BST1RPX0lQWAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9SWF9WTEFOCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9JUF9GUkFHCQljcHVfdG9fbGUzMigweDAwMDAwMDA4KQorI2RlZmluZSBUWVBIT09OX1JYX0lQU0VDCQljcHVfdG9fbGUzMigweDAwMDAwMDEwKQorI2RlZmluZSBUWVBIT09OX1JYX0lQX0NIS19GQUlMCQljcHVfdG9fbGUzMigweDAwMDAwMDIwKQorI2RlZmluZSBUWVBIT09OX1JYX1RDUF9DSEtfRkFJTAkJY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9VRFBfQ0hLX0ZBSUwJCWNwdV90b19sZTMyKDB4MDAwMDAwODApCisjZGVmaW5lIFRZUEhPT05fUlhfSVBfQ0hLX0dPT0QJCWNwdV90b19sZTMyKDB4MDAwMDAxMDApCisjZGVmaW5lIFRZUEhPT05fUlhfVENQX0NIS19HT09ECQljcHVfdG9fbGUzMigweDAwMDAwMjAwKQorI2RlZmluZSBUWVBIT09OX1JYX1VEUF9DSEtfR09PRAkJY3B1X3RvX2xlMzIoMHgwMDAwMDQwMCkKIAlfX2xlMTYgZmlsdGVyUmVzdWx0czsKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfTUFTSwkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDdmZmYpCi0jZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSRUQJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9NQVNLCQljcHVfdG9fbGUxNigweDdmZmYpCisjZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSRUQJCWNwdV90b19sZTE2KDB4ODAwMCkKIAlfX2xlMTYgaXBzZWNSZXN1bHRzOwotI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0FIX0dPT0QJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfRVNQX0dPT0QJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfQUhfR09PRAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9JTk5FUl9FU1BfR09PRAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwOCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9BSF9GQUlMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDEwKQotI2RlZmluZSBUWVBIT09OX1JYX09VVEVSX0VTUF9GQUlMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDIwKQotI2RlZmluZSBUWVBIT09OX1JYX0lOTkVSX0FIX0ZBSUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNDApCi0jZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfRVNQX0ZBSUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwODApCi0jZGVmaW5lIFRZUEhPT05fUlhfVU5LTk9XTl9TQQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApCi0jZGVmaW5lIFRZUEhPT05fUlhfRVNQX0ZPUk1BVF9FUlIJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApCisjZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfQUhfR09PRAljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fUlhfT1VURVJfRVNQX0dPT0QJY3B1X3RvX2xlMTYoMHgwMDAyKQorI2RlZmluZSBUWVBIT09OX1JYX0lOTkVSX0FIX0dPT0QJY3B1X3RvX2xlMTYoMHgwMDA0KQorI2RlZmluZSBUWVBIT09OX1JYX0lOTkVSX0VTUF9HT09ECWNwdV90b19sZTE2KDB4MDAwOCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9BSF9GQUlMCWNwdV90b19sZTE2KDB4MDAxMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9PVVRFUl9FU1BfRkFJTAljcHVfdG9fbGUxNigweDAwMjApCisjZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfQUhfRkFJTAljcHVfdG9fbGUxNigweDAwNDApCisjZGVmaW5lIFRZUEhPT05fUlhfSU5ORVJfRVNQX0ZBSUwJY3B1X3RvX2xlMTYoMHgwMDgwKQorI2RlZmluZSBUWVBIT09OX1JYX1VOS05PV05fU0EJCWNwdV90b19sZTE2KDB4MDEwMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9FU1BfRk9STUFUX0VSUgljcHVfdG9fbGUxNigweDAyMDApCiAJX19iZTMyIHZsYW5UYWc7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIApAQCAtMzE4LDMxICszMTgsMzEgQEAKIAl1OCAgZmxhZ3M7CiAJdTggIG51bURlc2M7CiAJX19sZTE2IGNtZDsKLSNkZWZpbmUgVFlQSE9PTl9DTURfVFhfRU5BQkxFCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfVFhfRElTQUJMRQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JYX0VOQUJMRQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDMpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JYX0RJU0FCTEUJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA0KQotI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfUlhfRklMVEVSCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDA1KQotI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX1NUQVRTCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwNykKLSNkZWZpbmUgVFlQSE9PTl9DTURfWENWUl9TRUxFQ1QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDEzKQotI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfTUFYX1BLVF9TSVpFCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDFhKQotI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX01FRElBX1NUQVRVUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAxYikKLSNkZWZpbmUgVFlQSE9PTl9DTURfR09UT19TTEVFUAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMjMpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NVUxUSUNBU1RfSEFTSAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyNSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfU0VUX01BQ19BRERSRVNTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDI2KQotI2RlZmluZSBUWVBIT09OX0NNRF9SRUFEX01BQ19BRERSRVNTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDI3KQotI2RlZmluZSBUWVBIT09OX0NNRF9WTEFOX1RZUEVfV1JJVEUJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMmIpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0NSRUFURV9TQQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMzQpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0RFTEVURV9TQQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMzUpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfVkVSU0lPTlMJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNDMpCi0jZGVmaW5lIFRZUEhPT05fQ01EX0lSUV9DT0FMRVNDRV9DVFJMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDQ1KQotI2RlZmluZSBUWVBIT09OX0NNRF9FTkFCTEVfV0FLRV9FVkVOVFMJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNDkpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9PRkZMT0FEX1RBU0tTCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDRmKQotI2RlZmluZSBUWVBIT09OX0NNRF9IRUxMT19SRVNQCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA1NykKLSNkZWZpbmUgVFlQSE9PTl9DTURfSEFMVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwNWQpCi0jZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfSVBTRUNfSU5GTwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA1ZSkKLSNkZWZpbmUgVFlQSE9PTl9DTURfR0VUX0lQU0VDX0VOQUJMRQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDA2NykKLSNkZWZpbmUgVFlQSE9PTl9DTURfR0VUX0NNRF9MVkwJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDY5KQorI2RlZmluZSBUWVBIT09OX0NNRF9UWF9FTkFCTEUJCWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfVFhfRElTQUJMRQkJY3B1X3RvX2xlMTYoMHgwMDAyKQorI2RlZmluZSBUWVBIT09OX0NNRF9SWF9FTkFCTEUJCWNwdV90b19sZTE2KDB4MDAwMykKKyNkZWZpbmUgVFlQSE9PTl9DTURfUlhfRElTQUJMRQkJY3B1X3RvX2xlMTYoMHgwMDA0KQorI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfUlhfRklMVEVSCWNwdV90b19sZTE2KDB4MDAwNSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9TVEFUUwkJY3B1X3RvX2xlMTYoMHgwMDA3KQorI2RlZmluZSBUWVBIT09OX0NNRF9YQ1ZSX1NFTEVDVAkJY3B1X3RvX2xlMTYoMHgwMDEzKQorI2RlZmluZSBUWVBIT09OX0NNRF9TRVRfTUFYX1BLVF9TSVpFCWNwdV90b19sZTE2KDB4MDAxYSkKKyNkZWZpbmUgVFlQSE9PTl9DTURfUkVBRF9NRURJQV9TVEFUVVMJY3B1X3RvX2xlMTYoMHgwMDFiKQorI2RlZmluZSBUWVBIT09OX0NNRF9HT1RPX1NMRUVQCQljcHVfdG9fbGUxNigweDAwMjMpCisjZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NVUxUSUNBU1RfSEFTSAljcHVfdG9fbGUxNigweDAwMjUpCisjZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9NQUNfQUREUkVTUwljcHVfdG9fbGUxNigweDAwMjYpCisjZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfTUFDX0FERFJFU1MJY3B1X3RvX2xlMTYoMHgwMDI3KQorI2RlZmluZSBUWVBIT09OX0NNRF9WTEFOX1RZUEVfV1JJVEUJY3B1X3RvX2xlMTYoMHgwMDJiKQorI2RlZmluZSBUWVBIT09OX0NNRF9DUkVBVEVfU0EJCWNwdV90b19sZTE2KDB4MDAzNCkKKyNkZWZpbmUgVFlQSE9PTl9DTURfREVMRVRFX1NBCQljcHVfdG9fbGUxNigweDAwMzUpCisjZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfVkVSU0lPTlMJY3B1X3RvX2xlMTYoMHgwMDQzKQorI2RlZmluZSBUWVBIT09OX0NNRF9JUlFfQ09BTEVTQ0VfQ1RSTAljcHVfdG9fbGUxNigweDAwNDUpCisjZGVmaW5lIFRZUEhPT05fQ01EX0VOQUJMRV9XQUtFX0VWRU5UUwljcHVfdG9fbGUxNigweDAwNDkpCisjZGVmaW5lIFRZUEhPT05fQ01EX1NFVF9PRkZMT0FEX1RBU0tTCWNwdV90b19sZTE2KDB4MDA0ZikKKyNkZWZpbmUgVFlQSE9PTl9DTURfSEVMTE9fUkVTUAkJY3B1X3RvX2xlMTYoMHgwMDU3KQorI2RlZmluZSBUWVBIT09OX0NNRF9IQUxUCQljcHVfdG9fbGUxNigweDAwNWQpCisjZGVmaW5lIFRZUEhPT05fQ01EX1JFQURfSVBTRUNfSU5GTwljcHVfdG9fbGUxNigweDAwNWUpCisjZGVmaW5lIFRZUEhPT05fQ01EX0dFVF9JUFNFQ19FTkFCTEUJY3B1X3RvX2xlMTYoMHgwMDY3KQorI2RlZmluZSBUWVBIT09OX0NNRF9HRVRfQ01EX0xWTAkJY3B1X3RvX2xlMTYoMHgwMDY5KQogCXUxNiBzZXFObzsKIAlfX2xlMTYgcGFybTE7CiAJX19sZTMyIHBhcm0yOwpAQCAtMzgwLDExICszODAsMTEgQEAKIAogLyogVFlQSE9PTl9DTURfU0VUX1JYX0ZJTFRFUiBmaWx0ZXIgYml0cyAoY21kLnBhcm0xKQogICovCi0jZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0RJUkVDVEVECV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9BTExfTUNBU1QJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fUlhfRklMVEVSX0JST0FEQ0FTVAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwNCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfUFJPTUlTQ09VUwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwOCkKLSNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfTUNBU1RfSEFTSAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAxMCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfRElSRUNURUQJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9BTExfTUNBU1QJY3B1X3RvX2xlMTYoMHgwMDAyKQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9CUk9BRENBU1QJY3B1X3RvX2xlMTYoMHgwMDA0KQorI2RlZmluZSBUWVBIT09OX1JYX0ZJTFRFUl9QUk9NSVNDT1VTCWNwdV90b19sZTE2KDB4MDAwOCkKKyNkZWZpbmUgVFlQSE9PTl9SWF9GSUxURVJfTUNBU1RfSEFTSAljcHVfdG9fbGUxNigweDAwMTApCiAKIC8qIFRZUEhPT05fQ01EX1JFQURfU1RBVFMgcmVzcG9uc2UgZm9ybWF0CiAgKi8KQEAgLTQxNiw0MCArNDE2LDQwIEBACiAJX19sZTMyIHJ4T3ZlcmZsb3c7CiAJX19sZTMyIHJ4RmlsdGVyZWQ7CiAJX19sZTMyIGxpbmtTdGF0dXM7Ci0jZGVmaW5lIFRZUEhPT05fTElOS19TVEFUX01BU0sJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0dPT0QJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9MSU5LX0JBRAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAwKQotI2RlZmluZSBUWVBIT09OX0xJTktfU1BFRURfTUFTSwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAyKQotI2RlZmluZSBUWVBIT09OX0xJTktfMTAwTUJQUwkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAyKQotI2RlZmluZSBUWVBIT09OX0xJTktfMTBNQlBTCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCi0jZGVmaW5lIFRZUEhPT05fTElOS19EVVBMRVhfTUFTSwlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fTElOS19GVUxMX0RVUExFWAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fTElOS19IQUxGX0RVUExFWAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fTElOS19TVEFUX01BU0sJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRZUEhPT05fTElOS19HT09ECQljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZSBUWVBIT09OX0xJTktfQkFECQljcHVfdG9fbGUzMigweDAwMDAwMDAwKQorI2RlZmluZSBUWVBIT09OX0xJTktfU1BFRURfTUFTSwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgVFlQSE9PTl9MSU5LXzEwME1CUFMJCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIFRZUEhPT05fTElOS18xME1CUFMJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCisjZGVmaW5lIFRZUEhPT05fTElOS19EVVBMRVhfTUFTSwljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX0xJTktfRlVMTF9EVVBMRVgJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgVFlQSE9PTl9MSU5LX0hBTEZfRFVQTEVYCWNwdV90b19sZTMyKDB4MDAwMDAwMDApCiAJX19sZTMyIHVudXNlZDI7CiAJX19sZTMyIHVudXNlZDM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogLyogVFlQSE9PTl9DTURfWENWUl9TRUxFQ1QgeGN2ciB2YWx1ZXMgKHJlc3AucGFybTEpCiAgKi8KLSNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwSEFMRglfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwRlVMTAlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwMEhBTEYJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDIpCi0jZGVmaW5lIFRZUEhPT05fWENWUl8xMDBGVUxMCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAzKQotI2RlZmluZSBUWVBIT09OX1hDVlJfQVVUT05FRwlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwNCkKKyNkZWZpbmUgVFlQSE9PTl9YQ1ZSXzEwSEFMRgljcHVfdG9fbGUxNigweDAwMDApCisjZGVmaW5lIFRZUEhPT05fWENWUl8xMEZVTEwJY3B1X3RvX2xlMTYoMHgwMDAxKQorI2RlZmluZSBUWVBIT09OX1hDVlJfMTAwSEFMRgljcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fWENWUl8xMDBGVUxMCWNwdV90b19sZTE2KDB4MDAwMykKKyNkZWZpbmUgVFlQSE9PTl9YQ1ZSX0FVVE9ORUcJY3B1X3RvX2xlMTYoMHgwMDA0KQogCiAvKiBUWVBIT09OX0NNRF9SRUFEX01FRElBX1NUQVRVUyAocmVzcC5wYXJtMSkKICAqLwotI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ1JDX1NUUklQX0RJU0FCTEUJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9DT0xMSVNJT05fREVURUNUCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDEwKQotI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ0FSUklFUl9TRU5TRQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAyMCkKLSNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX1BPTEFSSVRZX1JFVgkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDA0MDApCi0jZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9OT19MSU5LCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDgwMCkKKyNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX0NSQ19TVFJJUF9ESVNBQkxFCWNwdV90b19sZTE2KDB4MDAwNCkKKyNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX0NPTExJU0lPTl9ERVRFQ1QJY3B1X3RvX2xlMTYoMHgwMDEwKQorI2RlZmluZSBUWVBIT09OX01FRElBX1NUQVRfQ0FSUklFUl9TRU5TRQljcHVfdG9fbGUxNigweDAwMjApCisjZGVmaW5lIFRZUEhPT05fTUVESUFfU1RBVF9QT0xBUklUWV9SRVYJCWNwdV90b19sZTE2KDB4MDQwMCkKKyNkZWZpbmUgVFlQSE9PTl9NRURJQV9TVEFUX05PX0xJTksJCWNwdV90b19sZTE2KDB4MDgwMCkKIAogLyogVFlQSE9PTl9DTURfU0VUX01VTFRJQ0FTVF9IQVNIIGVuYWJsZSB2YWx1ZXMgKGNtZC5wYXJtMSkKICAqLwotI2RlZmluZSBUWVBIT09OX01DQVNUX0hBU0hfRElTQUJMRQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMCkKLSNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX0VOQUJMRQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwMSkKLSNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX1NFVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDIpCisjZGVmaW5lIFRZUEhPT05fTUNBU1RfSEFTSF9ESVNBQkxFCWNwdV90b19sZTE2KDB4MDAwMCkKKyNkZWZpbmUgVFlQSE9PTl9NQ0FTVF9IQVNIX0VOQUJMRQljcHVfdG9fbGUxNigweDAwMDEpCisjZGVmaW5lIFRZUEhPT05fTUNBU1RfSEFTSF9TRVQJCWNwdV90b19sZTE2KDB4MDAwMikKIAogLyogVFlQSE9PTl9DTURfQ1JFQVRFX1NBIGRlc2NyaXB0b3IgYW5kIHNldHRpbmdzCiAgKi8KQEAgLTQ1OSw5ICs0NTksOSBAQAogCXUxNiBjbWQ7CiAJdTE2IHNlcU5vOwogCXUxNiBtb2RlOwotI2RlZmluZSBUWVBIT09OX1NBX01PREVfTlVMTAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDApCi0jZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9BSAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAwMDEpCi0jZGVmaW5lIFRZUEhPT05fU0FfTU9ERV9FU1AJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDAyKQorI2RlZmluZSBUWVBIT09OX1NBX01PREVfTlVMTAkJY3B1X3RvX2xlMTYoMHgwMDAwKQorI2RlZmluZSBUWVBIT09OX1NBX01PREVfQUgJCWNwdV90b19sZTE2KDB4MDAwMSkKKyNkZWZpbmUgVFlQSE9PTl9TQV9NT0RFX0VTUAkJY3B1X3RvX2xlMTYoMHgwMDAyKQogCXU4ICBoYXNoRmxhZ3M7CiAjZGVmaW5lIFRZUEhPT05fU0FfSEFTSF9FTkFCTEUJCTB4MDEKICNkZWZpbmUgVFlQSE9PTl9TQV9IQVNIX1NIQTEJCTB4MDIKQEAgLTQ5MywyMiArNDkzLDIyIEBACiAvKiBUWVBIT09OX0NNRF9TRVRfT0ZGTE9BRF9UQVNLUyBiaXRzIChjbWQucGFybTIgKFR4KSAmIGNtZC5wYXJtMyAoUngpKQogICogVGhpcyBpcyBhbGwgZm9yIElQdjQuCiAgKi8KLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX1RDUF9DSEtTVU0JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDAyKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfVURQX0NIS1NVTQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9JUF9DSEtTVU0JX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMDA4KQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfSVBTRUMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAxMCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0JDQVNUX1RIUk9UVExFCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKLSNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0RIQ1BfUFJFVkVOVAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwNDApCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9WTEFOCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMDAwODApCi0jZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9GSUxURVJJTkcJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMTAwKQotI2RlZmluZSBUWVBIT09OX09GRkxPQURfVENQX1NFR01FTlQJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDAwMjAwKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfVENQX0NIS1NVTQljcHVfdG9fbGUzMigweDAwMDAwMDAyKQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfVURQX0NIS1NVTQljcHVfdG9fbGUzMigweDAwMDAwMDA0KQorI2RlZmluZSBUWVBIT09OX09GRkxPQURfSVBfQ0hLU1VNCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9JUFNFQwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAxMCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX0JDQVNUX1RIUk9UVExFCWNwdV90b19sZTMyKDB4MDAwMDAwMjApCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9ESENQX1BSRVZFTlQJY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX1ZMQU4JCWNwdV90b19sZTMyKDB4MDAwMDAwODApCisjZGVmaW5lIFRZUEhPT05fT0ZGTE9BRF9GSUxURVJJTkcJY3B1X3RvX2xlMzIoMHgwMDAwMDEwMCkKKyNkZWZpbmUgVFlQSE9PTl9PRkZMT0FEX1RDUF9TRUdNRU5UCWNwdV90b19sZTMyKDB4MDAwMDAyMDApCiAKIC8qIFRZUEhPT05fQ01EX0VOQUJMRV9XQUtFX0VWRU5UUyBiaXRzIChjbWQucGFybTEpCiAgKi8KLSNkZWZpbmUgVFlQSE9PTl9XQUtFX01BR0lDX1BLVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxKQotI2RlZmluZSBUWVBIT09OX1dBS0VfTElOS19FVkVOVAkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyKQotI2RlZmluZSBUWVBIT09OX1dBS0VfSUNNUF9FQ0hPCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDQpCi0jZGVmaW5lIFRZUEhPT05fV0FLRV9BUlAJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwOCkKKyNkZWZpbmUgVFlQSE9PTl9XQUtFX01BR0lDX1BLVAkJY3B1X3RvX2xlMTYoMHgwMSkKKyNkZWZpbmUgVFlQSE9PTl9XQUtFX0xJTktfRVZFTlQJCWNwdV90b19sZTE2KDB4MDIpCisjZGVmaW5lIFRZUEhPT05fV0FLRV9JQ01QX0VDSE8JCWNwdV90b19sZTE2KDB4MDQpCisjZGVmaW5lIFRZUEhPT05fV0FLRV9BUlAJCWNwdV90b19sZTE2KDB4MDgpCiAKIC8qIFRoZXNlIGFyZSB1c2VkIHRvIGxvYWQgdGhlIGZpcm13YXJlIGltYWdlIG9uIHRoZSBOSUMKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKaW5kZXggZTg3OTg2OC4uODZhNDc5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL3VjY19mYXN0Lmg+CiAKICNpbmNsdWRlICJ1Y2NfZ2V0aC5oIgotI2luY2x1ZGUgInVjY19nZXRoX21paS5oIgorI2luY2x1ZGUgImZzbF9wcV9tZGlvLmgiCiAKICN1bmRlZiBERUJVRwogCkBAIC0xNTM2LDMyICsxNTM2LDE1IEBACiBzdGF0aWMgaW50IGluaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwcml2LT5ub2RlOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5LCAqbWRpbzsKLQljb25zdCBwaGFuZGxlICpwaDsKLQljaGFyIGJ1c19uYW1lW01JSV9CVVNfSURfU0laRV07Ci0JY29uc3QgdW5zaWduZWQgaW50ICppZDsKKwlzdHJ1Y3QgdWNjX2dldGhfaW5mbyAqdWdfaW5mbyA9IHByaXYtPnVnX2luZm87CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKLQljaGFyIHBoeV9pZFtCVVNfSURfU0laRV07CiAKIAlwcml2LT5vbGRsaW5rID0gMDsKIAlwcml2LT5vbGRzcGVlZCA9IDA7CiAJcHJpdi0+b2xkZHVwbGV4ID0gLTE7CiAKLQlwaCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBoeS1oYW5kbGUiLCBOVUxMKTsKLQlwaHkgPSBvZl9maW5kX25vZGVfYnlfcGhhbmRsZSgqcGgpOwotCW1kaW8gPSBvZl9nZXRfcGFyZW50KHBoeSk7Ci0KLQlpZCA9IG9mX2dldF9wcm9wZXJ0eShwaHksICJyZWciLCBOVUxMKTsKLQotCW9mX25vZGVfcHV0KHBoeSk7Ci0Jb2Zfbm9kZV9wdXQobWRpbyk7Ci0KLQl1ZWNfbWRpb19idXNfbmFtZShidXNfbmFtZSwgbWRpbyk7Ci0Jc25wcmludGYocGh5X2lkLCBzaXplb2YocGh5X2lkKSwgIiVzOiUwMngiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXNfbmFtZSwgKmlkKTsKLQotCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5X2lkLCAmYWRqdXN0X2xpbmssIDAsIHByaXYtPnBoeV9pbnRlcmZhY2UpOworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgdWdfaW5mby0+cGh5X2J1c19pZCwgJmFkanVzdF9saW5rLCAwLAorCQkJICAgICBwcml2LT5waHlfaW50ZXJmYWNlKTsKIAogCWlmIChJU19FUlIocGh5ZGV2KSkgewogCQlwcmludGsoIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwgZGV2LT5uYW1lKTsKQEAgLTIwMjYsNiArMjAwOSw5IEBACiAJLyogRGlzYWJsZSBSeCBhbmQgVHggKi8KIAljbHJiaXRzMzIoJnVnX3JlZ3MtPm1hY2NmZzEsIE1BQ0NGRzFfRU5BQkxFX1JYIHwgTUFDQ0ZHMV9FTkFCTEVfVFgpOwogCisJcGh5X2Rpc2Nvbm5lY3QodWdldGgtPnBoeWRldik7CisJdWdldGgtPnBoeWRldiA9IE5VTEw7CisKIAl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CiB9CiAKQEAgLTMyNjYsNyArMzI1Miw3IEBACiAJCWhvd21hbnkgKz0gdWNjX2dldGhfcngodWdldGgsIGksIGJ1ZGdldCAtIGhvd21hbnkpOwogCiAJaWYgKGhvd21hbnkgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAJCXNldGJpdHMzMih1Z2V0aC0+dWNjZi0+cF91Y2NtLCBVQ0NFX1JYX0VWRU5UUyk7CiAJfQogCkBAIC0zMjk3LDEwICszMjgzLDEwIEBACiAKIAkvKiBjaGVjayBmb3IgcmVjZWl2ZSBldmVudHMgdGhhdCByZXF1aXJlIHByb2Nlc3NpbmcgKi8KIAlpZiAodWNjZSAmIFVDQ0VfUlhfRVZFTlRTKSB7Ci0JCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKCZ1Z2V0aC0+bmFwaSkpIHsKKwkJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdWdldGgtPm5hcGkpKSB7CiAJCQl1Y2NtICY9IH5VQ0NFX1JYX0VWRU5UUzsKIAkJCW91dF9iZTMyKHVjY2YtPnBfdWNjbSwgdWNjbSk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKCZ1Z2V0aC0+bmFwaSk7CisJCQlfX25hcGlfc2NoZWR1bGUoJnVnZXRoLT5uYXBpKTsKIAkJfQogCX0KIApAQCAtMzM2Miw2ICszMzQ4LDE0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWVyciA9IGluaXRfcGh5KGRldik7CisJaWYgKGVycikgeworCQlpZiAobmV0aWZfbXNnX2lmdXAodWdldGgpKQorCQkJdWdldGhfZXJyKCIlczogQ2Fubm90IGluaXRpYWxpemUgUEhZLCBhYm9ydGluZy4iLAorCQkJCSAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAllcnIgPSB1Y2Nfc3RydWN0X2luaXQodWdldGgpOwogCWlmIChlcnIpIHsKIAkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKQEAgLTMzOTgsMTMgKzMzOTIsNiBAQAogCQkJCSAgICZ1Z2V0aC0+dWdfcmVncy0+bWFjc3RuYWRkcjEsCiAJCQkJICAgJnVnZXRoLT51Z19yZWdzLT5tYWNzdG5hZGRyMik7CiAKLQllcnIgPSBpbml0X3BoeShkZXYpOwotCWlmIChlcnIpIHsKLQkJaWYgKG5ldGlmX21zZ19pZnVwKHVnZXRoKSkKLQkJCXVnZXRoX2VycigiJXM6IENhbm5vdCBpbml0aWFsaXplIFBIWSwgYWJvcnRpbmcuIiwgZGV2LT5uYW1lKTsKLQkJZ290byBvdXRfZXJyOwotCX0KLQogCXBoeV9zdGFydCh1Z2V0aC0+cGh5ZGV2KTsKIAogCWVyciA9IHVnZXRoX2VuYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKQEAgLTM0NDcsOSArMzQzNCw2IEBACiAKIAlmcmVlX2lycSh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5pcnEsIHVnZXRoLT5kZXYpOwogCi0JcGh5X2Rpc2Nvbm5lY3QodWdldGgtPnBoeWRldik7Ci0JdWdldGgtPnBoeWRldiA9IE5VTEw7Ci0KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTM1MTgsNiArMzUwMiwyMCBAQAogCXJldHVybiBQSFlfSU5URVJGQUNFX01PREVfTUlJOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHVjY19nZXRoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVjY19nZXRoX29wZW4sCisJLm5kb19zdG9wCQk9IHVjY19nZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1Y2NfZ2V0aF9zdGFydF94bWl0LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHVjY19nZXRoX3NldF9tdWx0aSwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdWNjX2dldGhfdGltZW91dCwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gdWNjX25ldHBvbGwsCisjZW5kaWYKK307CisKIHN0YXRpYyBpbnQgdWNjX2dldGhfcHJvYmUoc3RydWN0IG9mX2RldmljZSogb2ZkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZvZmRldi0+ZGV2OwpAQCAtMzYyOSwxMCArMzYyNywxMiBAQAogCXVnX2luZm8tPnVmX2luZm8uaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCWZpeGVkX2xpbmsgPSBvZl9nZXRfcHJvcGVydHkobnAsICJmaXhlZC1saW5rIiwgTlVMTCk7CiAJaWYgKGZpeGVkX2xpbmspIHsKLQkJc25wcmludGYodWdfaW5mby0+bWRpb19idXMsIE1JSV9CVVNfSURfU0laRSwgIjAiKTsKLQkJdWdfaW5mby0+cGh5X2FkZHJlc3MgPSBmaXhlZF9saW5rWzBdOworCQlzbnByaW50Zih1Z19pbmZvLT5waHlfYnVzX2lkLCBzaXplb2YodWdfaW5mby0+cGh5X2J1c19pZCksCisJCQkgUEhZX0lEX0ZNVCwgIjAiLCBmaXhlZF9saW5rWzBdKTsKIAkJcGh5ID0gTlVMTDsKIAl9IGVsc2UgeworCQljaGFyIGJ1c19uYW1lW01JSV9CVVNfSURfU0laRV07CisKIAkJcGggPSBvZl9nZXRfcHJvcGVydHkobnAsICJwaHktaGFuZGxlIiwgTlVMTCk7CiAJCXBoeSA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKCpwaCk7CiAKQEAgLTM2NDMsNyArMzY0Myw2IEBACiAJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkocGh5LCAicmVnIiwgTlVMTCk7CiAJCWlmIChwcm9wID09IE5VTEwpCiAJCQlyZXR1cm4gLTE7Ci0JCXVnX2luZm8tPnBoeV9hZGRyZXNzID0gKnByb3A7CiAKIAkJLyogU2V0IHRoZSBidXMgaWQgKi8KIAkJbWRpbyA9IG9mX2dldF9wYXJlbnQocGh5KTsKQEAgLTM2NTcsNyArMzY1Niw5IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gLTE7CiAKLQkJc25wcmludGYodWdfaW5mby0+bWRpb19idXMsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcmVzLnN0YXJ0KTsKKwkJZnNsX3BxX21kaW9fYnVzX25hbWUoYnVzX25hbWUsIG1kaW8pOworCQlzbnByaW50Zih1Z19pbmZvLT5waHlfYnVzX2lkLCBzaXplb2YodWdfaW5mby0+cGh5X2J1c19pZCksCisJCQkiJXM6JTAyeCIsIGJ1c19uYW1lLCAqcHJvcCk7CiAJfQogCiAJLyogZ2V0IHRoZSBwaHkgaW50ZXJmYWNlIHR5cGUsIG9yIGRlZmF1bHQgdG8gTUlJICovCkBAIC0zNzMwLDE5ICszNzMxLDExIEBACiAKIAkvKiBGaWxsIGluIHRoZSBkZXYgc3RydWN0dXJlICovCiAJdWVjX3NldF9ldGh0b29sX29wcyhkZXYpOwotCWRldi0+b3BlbiA9IHVjY19nZXRoX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB1Y2NfZ2V0aF9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9IHVjY19nZXRoX3RpbWVvdXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnVjY19nZXRoX25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJSU5JVF9XT1JLKCZ1Z2V0aC0+dGltZW91dF93b3JrLCB1Y2NfZ2V0aF90aW1lb3V0X3dvcmspOwogCW5ldGlmX25hcGlfYWRkKGRldiwgJnVnZXRoLT5uYXBpLCB1Y2NfZ2V0aF9wb2xsLCBVQ0NfR0VUSF9ERVZfV0VJR0hUKTsKLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCWRldi0+cG9sbF9jb250cm9sbGVyID0gdWNjX25ldHBvbGw7Ci0jZW5kaWYKLQlkZXYtPnN0b3AgPSB1Y2NfZ2V0aF9jbG9zZTsKLS8vICAgIGRldi0+Y2hhbmdlX210dSA9IHVjY19nZXRoX2NoYW5nZV9tdHU7CiAJZGV2LT5tdHUgPSAxNTAwOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gdWNjX2dldGhfc2V0X211bHRpOwogCiAJdWdldGgtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1Zy5tc2dfZW5hYmxlLCBVR0VUSF9NU0dfREVGQVVMVCk7CiAJdWdldGgtPnBoeV9pbnRlcmZhY2UgPSBwaHlfaW50ZXJmYWNlOwpAQCAtMzgwMywxMSArMzc5Niw2IEBACiB7CiAJaW50IGksIHJldDsKIAotCXJldCA9IHVlY19tZGlvX2luaXQoKTsKLQotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlpZiAobmV0aWZfbXNnX2RydigmZGVidWcpKQogCQlwcmludGsoS0VSTl9JTkZPICJ1Y2NfZ2V0aDogIiBEUlZfREVTQyAiXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQpAQCAtMzgxNiwxNiArMzgwNCwxMiBAQAogCiAJcmV0ID0gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1Y2NfZ2V0aF9kcml2ZXIpOwogCi0JaWYgKHJldCkKLQkJdWVjX21kaW9fZXhpdCgpOwotCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHVjY19nZXRoX2V4aXQodm9pZCkKIHsKIAlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmdWNjX2dldGhfZHJpdmVyKTsKLQl1ZWNfbWRpb19leGl0KCk7CiB9CiAKIG1vZHVsZV9pbml0KHVjY19nZXRoX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguaCBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKaW5kZXggMTZjYmU0Mi4uZTNhMjVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguaAorKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5oCkBAIC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL3VjYy5oPgogI2luY2x1ZGUgPGFzbS91Y2NfZmFzdC5oPgogCi0jaW5jbHVkZSAidWNjX2dldGhfbWlpLmgiCi0KICNkZWZpbmUgRFJWX0RFU0MgIlFFIFVDQyBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIiCiAjZGVmaW5lIERSVl9OQU1FICJ1Y2NfZ2V0aCIKICNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMSIKQEAgLTE4NCw2ICsxODIsMTggQEAKICNkZWZpbmUgVUNDRV9SWF9FVkVOVFMgIChVQ0NFX1JYRiB8IFVDQ19HRVRIX1VDQ0VfQlNZKQogI2RlZmluZSBVQ0NFX1RYX0VWRU5UUwkoVUNDRV9UWEIgfCBVQ0NfR0VUSF9VQ0NFX1RYRSkKIAorLyogVEJJIGRlZmluZXMgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0NSCQkweDAwCS8qIENvbnRyb2wgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX1NSCQkweDAxCS8qIFN0YXR1cyAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQU5BCTB4MDQJLyogQU4gYWR2ZXJ0aXNlbWVudCAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQU5MUEJQQQkweDA1CS8qIEFOIGxpbmsgcGFydG5lciBiYXNlIHBhZ2UgYWJpbGl0eSAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQU5FWAkweDA2CS8qIEFOIGV4cGFuc2lvbiAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfQU5OUFQJMHgwNwkvKiBBTiBuZXh0IHBhZ2UgdHJhbnNtaXQgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0FOTFBBTlAJMHgwOAkvKiBBTiBsaW5rIHBhcnRuZXIgYWJpbGl0eSBuZXh0IHBhZ2UgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0VYU1QJMHgwRgkvKiBFeHRlbmRlZCBzdGF0dXMgKi8KKyNkZWZpbmUJRU5FVF9UQklfTUlJX0pECQkweDEwCS8qIEppdHRlciBkaWFnbm9zdGljcyAqLworI2RlZmluZQlFTkVUX1RCSV9NSUlfVEJJQ09OCTB4MTEJLyogVEJJIGNvbnRyb2wgKi8KKwogLyogVUNDIEdFVEggTUFDQ0ZHMSAoTUFDIENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlcikgKi8KICNkZWZpbmUgTUFDQ0ZHMV9GTE9XX1JYICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogRmxvdyBDb250cm9sCiAJCQkJCQkJCSAgIFJ4ICovCkBAIC0xMDkxLDggKzExMDEsNyBAQAogCXUzMiBldmVudFJlZ01hc2s7CiAJdTE2IHBhdXNlUGVyaW9kOwogCXUxNiBleHRlbnNpb25GaWVsZDsKLQl1OCBwaHlfYWRkcmVzczsKLQljaGFyIG1kaW9fYnVzW01JSV9CVVNfSURfU0laRV07CisJY2hhciBwaHlfYnVzX2lkW0JVU19JRF9TSVpFXTsKIAl1OCB3ZWlnaHRmYWN0b3JbTlVNX1RYX1FVRVVFU107CiAJdTggaW50ZXJydXB0Y29hbGVzY2luZ21heHZhbHVlW05VTV9SWF9RVUVVRVNdOwogCXU4IGwycXRbVUNDX0dFVEhfVkxBTl9QUklPUklUWV9NQVhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfZXRodG9vbC5jCmluZGV4IDY4YTdmNTQuLmE3NTViZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VjY19nZXRoX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9ldGh0b29sLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogI2luY2x1ZGUgInVjY19nZXRoLmgiCi0jaW5jbHVkZSAidWNjX2dldGhfbWlpLmgiCiAKIHN0YXRpYyBjaGFyIGh3X3N0YXRfZ3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0gewogCSJ0eC02NC1mcmFtZXMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmMgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFkYTRlZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmMKLSAqCi0gKiBRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCi0gKiBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUkgTWFuYWdlbWVudCByZWdzIGluIHRoZSBVQ0MgcmVnaXN0ZXIgc3BhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBBdXRob3JzOiBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgotICoJICAgIEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC91bmlzdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KLSNpbmNsdWRlIDxsaW51eC9waHkuaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgotI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vdWNjLmg+Ci0KLSNpbmNsdWRlICJ1Y2NfZ2V0aF9taWkuaCIKLSNpbmNsdWRlICJ1Y2NfZ2V0aC5oIgotCi0jZGVmaW5lIERFQlVHCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgdmRiZyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgLCBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNlbHNlCi0jZGVmaW5lIHZkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlKDApCi0jZW5kaWYKLQotI2RlZmluZSBNSUlfRFJWX0RFU0MgIlFFIFVDQyBFdGhlcm5ldCBDb250cm9sbGVyIE1JSSBCdXMiCi0jZGVmaW5lIE1JSV9EUlZfTkFNRSAiZnNsLXVlY19tZGlvIgotCi0vKiBXcml0ZSB2YWx1ZSB0byB0aGUgUEhZIGZvciB0aGlzIGRldmljZSB0byB0aGUgcmVnaXN0ZXIgYXQgcmVnbnVtLCAqLwotLyogd2FpdGluZyB1bnRpbCB0aGUgd3JpdGUgaXMgZG9uZSBiZWZvcmUgaXQgcmV0dXJucy4gIEFsbCBQSFkgKi8KLS8qIGNvbmZpZ3VyYXRpb24gaGFzIHRvIGJlIGRvbmUgdGhyb3VnaCB0aGUgbWFzdGVyIFVFQyBNSUlNIHJlZ3MgKi8KLWludCB1ZWNfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCi17Ci0Jc3RydWN0IHVjY19taWlfbW5nIF9faW9tZW0gKnJlZ3MgPSAodm9pZCBfX2lvbWVtICopYnVzLT5wcml2OwotCi0JLyogU2V0dGluZyB1cCB0aGUgTUlJIE1hbmdlbWVudCBBZGRyZXNzIFJlZ2lzdGVyICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1hZGQsCi0JCSAobWlpX2lkIDw8IE1JSU1BRERfUEhZX0FERFJFU1NfU0hJRlQpIHwgcmVnbnVtKTsKLQotCS8qIFNldHRpbmcgdXAgdGhlIE1JSSBNYW5nZW1lbnQgQ29udHJvbCBSZWdpc3RlciB3aXRoIHRoZSB2YWx1ZSAqLwotCW91dF9iZTMyKCZyZWdzLT5taWltY29uLCB2YWx1ZSk7Ci0KLQkvKiBXYWl0IHRpbGwgTUlJIG1hbmFnZW1lbnQgd3JpdGUgaXMgY29tcGxldGUgKi8KLQl3aGlsZSAoKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpKSAmIE1JSU1JTkRfQlVTWSkKLQkJY3B1X3JlbGF4KCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogUmVhZHMgZnJvbSByZWdpc3RlciByZWdudW0gaW4gdGhlIFBIWSBmb3IgZGV2aWNlIGRldiwgKi8KLS8qIHJldHVybmluZyB0aGUgdmFsdWUuICBDbGVhcnMgbWlpbWNvbSBmaXJzdC4gIEFsbCBQSFkgKi8KLS8qIGNvbmZpZ3VyYXRpb24gaGFzIHRvIGJlIGRvbmUgdGhyb3VnaCB0aGUgVFNFQzEgTUlJTSByZWdzICovCi1pbnQgdWVjX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQotewotCXN0cnVjdCB1Y2NfbWlpX21uZyBfX2lvbWVtICpyZWdzID0gKHZvaWQgX19pb21lbSAqKWJ1cy0+cHJpdjsKLQl1MTYgdmFsdWU7Ci0KLQkvKiBTZXR0aW5nIHVwIHRoZSBNSUkgTWFuZ2VtZW50IEFkZHJlc3MgUmVnaXN0ZXIgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWFkZCwKLQkJIChtaWlfaWQgPDwgTUlJTUFERF9QSFlfQUREUkVTU19TSElGVCkgfCByZWdudW0pOwotCi0JLyogQ2xlYXIgbWlpbWNvbSwgcGVyZm9ybSBhbiBNSUkgbWFuYWdlbWVudCByZWFkIGN5Y2xlICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1jb20sIDApOwotCW91dF9iZTMyKCZyZWdzLT5taWltY29tLCBNSUlNQ09NX1JFQURfQ1lDTEUpOwotCi0JLyogV2FpdCB0aWxsIE1JSSBtYW5hZ2VtZW50IHdyaXRlIGlzIGNvbXBsZXRlICovCi0Jd2hpbGUgKChpbl9iZTMyKCZyZWdzLT5taWltaW5kKSkgJiAoTUlJTUlORF9CVVNZIHwgTUlJTUlORF9OT1RfVkFMSUQpKQotCQljcHVfcmVsYXgoKTsKLQotCS8qIFJlYWQgTUlJIG1hbmFnZW1lbnQgc3RhdHVzICAqLwotCXZhbHVlID0gaW5fYmUzMigmcmVncy0+bWlpbXN0YXQpOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi0vKiBSZXNldCB0aGUgTUlJTSByZWdpc3RlcnMsIGFuZCB3YWl0IGZvciB0aGUgYnVzIHRvIGZyZWUgKi8KLXN0YXRpYyBpbnQgdWVjX21kaW9fcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgdWNjX21paV9tbmcgX19pb21lbSAqcmVncyA9ICh2b2lkIF9faW9tZW0gKilidXMtPnByaXY7Ci0JaW50IHRpbWVvdXQgPSBQSFlfSU5JVF9USU1FT1VUOwotCi0JbXV0ZXhfbG9jaygmYnVzLT5tZGlvX2xvY2spOwotCi0JLyogUmVzZXQgdGhlIG1hbmFnZW1lbnQgaW50ZXJmYWNlICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1paW1jZmcsIE1JSU1DRkdfUkVTRVRfTUFOQUdFTUVOVCk7Ci0KLQkvKiBTZXR1cCB0aGUgTUlJIE1nbXQgY2xvY2sgc3BlZWQgKi8KLQlvdXRfYmUzMigmcmVncy0+bWlpbWNmZywgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xMTIpOwotCi0JLyogV2FpdCB1bnRpbCB0aGUgYnVzIGlzIGZyZWUgKi8KLQl3aGlsZSAoKGluX2JlMzIoJnJlZ3MtPm1paW1pbmQpICYgTUlJTUlORF9CVVNZKSAmJiB0aW1lb3V0LS0pCi0JCWNwdV9yZWxheCgpOwotCi0JbXV0ZXhfdW5sb2NrKCZidXMtPm1kaW9fbG9jayk7Ci0KLQlpZiAodGltZW91dCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVGhlIE1JSSBCdXMgaXMgc3R1Y2shXG4iLCBidXMtPm5hbWUpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHVlY19tZGlvX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmb2ZkZXYtPmRldjsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPm5vZGUsICp0ZW1wbnAgPSBOVUxMOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQgPSBOVUxMOwotCXN0cnVjdCB1Y2NfbWlpX21uZyBfX2lvbWVtICpyZWdzOwotCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOwotCXN0cnVjdCByZXNvdXJjZSByZXM7Ci0JaW50IGssIGVyciA9IDA7Ci0KLQluZXdfYnVzID0gbWRpb2J1c19hbGxvYygpOwotCWlmIChOVUxMID09IG5ld19idXMpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbmV3X2J1cy0+bmFtZSA9ICJVQ0MgRXRoZXJuZXQgQ29udHJvbGxlciBNSUkgQnVzIjsKLQluZXdfYnVzLT5yZWFkID0gJnVlY19tZGlvX3JlYWQ7Ci0JbmV3X2J1cy0+d3JpdGUgPSAmdWVjX21kaW9fd3JpdGU7Ci0JbmV3X2J1cy0+cmVzZXQgPSAmdWVjX21kaW9fcmVzZXQ7Ci0KLQltZW1zZXQoJnJlcywgMCwgc2l6ZW9mKHJlcykpOwotCi0JZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnJlcyk7Ci0JaWYgKGVycikKLQkJZ290byByZWdfbWFwX2ZhaWw7Ci0KLQl1ZWNfbWRpb19idXNfbmFtZShuZXdfYnVzLT5pZCwgbnApOwotCi0JbmV3X2J1cy0+aXJxID0ga21hbGxvYygzMiAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKLQotCWlmIChOVUxMID09IG5ld19idXMtPmlycSkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIHJlZ19tYXBfZmFpbDsKLQl9Ci0KLQlmb3IgKGsgPSAwOyBrIDwgMzI7IGsrKykKLQkJbmV3X2J1cy0+aXJxW2tdID0gUEhZX1BPTEw7Ci0KLQl3aGlsZSAoKGNoaWxkID0gb2ZfZ2V0X25leHRfY2hpbGQobnAsIGNoaWxkKSkgIT0gTlVMTCkgewotCQlpbnQgaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoY2hpbGQsIDApOwotCQlpZiAoaXJxICE9IE5PX0lSUSkgewotCQkJY29uc3QgdTMyICppZCA9IG9mX2dldF9wcm9wZXJ0eShjaGlsZCwgInJlZyIsIE5VTEwpOwotCQkJbmV3X2J1cy0+aXJxWyppZF0gPSBpcnE7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgdGhlIGJhc2UgYWRkcmVzcyAqLwotCXJlZ3MgPSBpb3JlbWFwKHJlcy5zdGFydCwgc2l6ZW9mKHN0cnVjdCB1Y2NfbWlpX21uZykpOwotCi0JaWYgKE5VTEwgPT0gcmVncykgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGlvcmVtYXBfZmFpbDsKLQl9Ci0KLQluZXdfYnVzLT5wcml2ID0gKHZvaWQgX19mb3JjZSAqKXJlZ3M7Ci0KLQluZXdfYnVzLT5wYXJlbnQgPSBkZXZpY2U7Ci0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgbmV3X2J1cyk7Ci0KLQkvKiBSZWFkIE1JSSBtYW5hZ2VtZW50IG1hc3RlciBmcm9tIGRldmljZSB0cmVlICovCi0Jd2hpbGUgKCh0ZW1wbnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZSh0ZW1wbnAsICJuZXR3b3JrIiwgInVjY19nZXRoIikpCi0JICAgICAgICE9IE5VTEwpIHsKLQkJc3RydWN0IHJlc291cmNlIHRlbXByZXM7Ci0KLQkJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZSh0ZW1wbnAsIDAsICZ0ZW1wcmVzKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWw7Ci0KLQkJLyogaWYgb3VyIG1kaW8gcmVncyBmYWxsIHdpdGhpbiB0aGlzIFVDQyByZWdzIHJhbmdlICovCi0JCWlmICgocmVzLnN0YXJ0ID49IHRlbXByZXMuc3RhcnQpICYmCi0JCSAgICAocmVzLmVuZCA8PSB0ZW1wcmVzLmVuZCkpIHsKLQkJCS8qIHNldCB0aGlzIFVDQyB0byBiZSB0aGUgTUlJIG1hc3RlciAqLwotCQkJY29uc3QgdTMyICppZDsKLQotCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkodGVtcG5wLCAiY2VsbC1pbmRleCIsIE5VTEwpOwotCQkJaWYgKCFpZCkgewotCQkJCWlkID0gb2ZfZ2V0X3Byb3BlcnR5KHRlbXBucCwgImRldmljZS1pZCIsIE5VTEwpOwotCQkJCWlmICghaWQpCi0JCQkJCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWw7Ci0JCQl9Ci0KLQkJCXVjY19zZXRfcWVfbXV4X21paV9tbmcoKmlkIC0gMSk7Ci0KLQkJCS8qIGFzc2lnbiB0aGUgVEJJIGFuIGFkZHJlc3Mgd2hpY2ggd29uJ3QKLQkJCSAqIGNvbmZsaWN0IHdpdGggdGhlIFBIWXMgKi8KLQkJCW91dF9iZTMyKCZyZWdzLT51dGJpcGFyLCBVVEJJUEFSX0lOSVRfVEJJUEEpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQllcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKG5ld19idXMpOwotCWlmICgwICE9IGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVnaXN0ZXIgYXMgTURJTyBidXNcbiIsCi0JCSAgICAgICBuZXdfYnVzLT5uYW1lKTsKLQkJZ290byBidXNfcmVnaXN0ZXJfZmFpbDsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotYnVzX3JlZ2lzdGVyX2ZhaWw6Ci0JaW91bm1hcChyZWdzKTsKLWlvcmVtYXBfZmFpbDoKLQlrZnJlZShuZXdfYnVzLT5pcnEpOwotcmVnX21hcF9mYWlsOgotCW1kaW9idXNfZnJlZShuZXdfYnVzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgdWVjX21kaW9fcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2KQotewotCXN0cnVjdCBkZXZpY2UgKmRldmljZSA9ICZvZmRldi0+ZGV2OwotCXN0cnVjdCBtaWlfYnVzICpidXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKLQotCW1kaW9idXNfdW5yZWdpc3RlcihidXMpOwotCi0JZGV2X3NldF9kcnZkYXRhKGRldmljZSwgTlVMTCk7Ci0KLQlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilidXMtPnByaXYpOwotCWJ1cy0+cHJpdiA9IE5VTEw7Ci0JbWRpb2J1c19mcmVlKGJ1cyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdWVjX21kaW9fbWF0Y2hbXSA9IHsKLQl7Ci0JCS50eXBlID0gIm1kaW8iLAotCQkuY29tcGF0aWJsZSA9ICJ1Y2NfZ2V0aF9waHkiLAotCX0sCi0JewotCQkuY29tcGF0aWJsZSA9ICJmc2wsdWNjLW1kaW8iLAotCX0sCi0Je30sCi19OwotCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciB1ZWNfbWRpb19kcml2ZXIgPSB7Ci0JLm5hbWUJPSBNSUlfRFJWX05BTUUsCi0JLnByb2JlCT0gdWVjX21kaW9fcHJvYmUsCi0JLnJlbW92ZQk9IHVlY19tZGlvX3JlbW92ZSwKLQkubWF0Y2hfdGFibGUJPSB1ZWNfbWRpb19tYXRjaCwKLX07Ci0KLWludCBfX2luaXQgdWVjX21kaW9faW5pdCh2b2lkKQotewotCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJnVlY19tZGlvX2RyaXZlcik7Ci19Ci0KLS8qIGNhbGxlZCBmcm9tIF9faW5pdCB1Y2NfZ2V0aF9pbml0LCB0aGVyZWZvcmUgY2FuIG5vdCBiZSBfX2V4aXQgKi8KLXZvaWQgdWVjX21kaW9fZXhpdCh2b2lkKQotewotCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZ1ZWNfbWRpb19kcml2ZXIpOwotfQotCi12b2lkIHVlY19tZGlvX2J1c19uYW1lKGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCi17Ci0gICAgICAgIGNvbnN0IHUzMiAqcmVnOwotCi0gICAgICAgIHJlZyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwotCi0gICAgICAgIHNucHJpbnRmKG5hbWUsIE1JSV9CVVNfSURfU0laRSwgIiVzQCV4IiwgbnAtPm5hbWUsIHJlZyA/ICpyZWcgOiAwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmggYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQwY2Y4MC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9taWkuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogZHJpdmVycy9uZXQvdWNjX2dldGhfbWlpLmgKLSAqCi0gKiBRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCi0gKiBQcm92aWRlcyBCdXMgaW50ZXJmYWNlIGZvciBNSUkgTWFuYWdlbWVudCByZWdzIGluIHRoZSBVQ0MgcmVnaXN0ZXIgc3BhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KLSAqCi0gKiBBdXRob3JzOiBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgotICoJICAgIEtpbSBQaGlsbGlwcyA8a2ltLnBoaWxsaXBzQGZyZWVzY2FsZS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLSNpZm5kZWYgX19VRUNfTUlJX0gKLSNkZWZpbmUgX19VRUNfTUlJX0gKLQotLyogVUNDIEdFVEggTUlJTUNGRyAoTUlJIE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUNGR19SRVNFVF9NQU5BR0VNRU5UICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAJLyogUmVzZXQKLQkJCQkJCQkJICAgbWFuYWdlbWVudCAqLwotI2RlZmluZSBNSUlNQ0ZHX05PX1BSRUFNQkxFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAkvKiBQcmVhbWJsZQotCQkJCQkJCQkgICBzdXBwcmVzcyAqLwotI2RlZmluZSBNSUlNQ0ZHX0NMT0NLX0RJVklERV9TSElGVCAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIGNsb2NrIGRpdmlkZQotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotI2RlZmluZSBNSUlNQ0ZHX0NMT0NLX0RJVklERV9NQVggICAgICAgICAgICAgICAgMHhmCS8qIG1heCBjbG9jayBkaXZpZGUgKi8KLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV80ICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV82ICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV84ICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xMCAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xNCAgIDB4MDAwMDAwMDUKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xNiAgIDB4MDAwMDAwMDgKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yMCAgIDB4MDAwMDAwMDYKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yOCAgIDB4MDAwMDAwMDcKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8zMiAgIDB4MDAwMDAwMDkKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV80OCAgIDB4MDAwMDAwMGEKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV82NCAgIDB4MDAwMDAwMGIKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV84MCAgIDB4MDAwMDAwMGMKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xMTIgIDB4MDAwMDAwMGQKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xNjAgIDB4MDAwMDAwMGUKLSNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yMjQgIDB4MDAwMDAwMGYKLQotLyogVUNDIEdFVEggTUlJTUNPTSAoTUlJIE1hbmFnZW1lbnQgQ29tbWFuZCBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUNPTV9TQ0FOX0NZQ0xFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogU2NhbiBjeWNsZSAqLwotI2RlZmluZSBNSUlNQ09NX1JFQURfQ1lDTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBSZWFkIGN5Y2xlICovCi0KLS8qIFVDQyBHRVRIIE1JSU1BREQgKE1JSSBNYW5hZ2VtZW50IEFkZHJlc3MgUmVnaXN0ZXIpICovCi0jZGVmaW5lIE1JSU1BRERfUEhZX0FERFJFU1NfU0hJRlQgICAgICAgICAgICAgICAoMzEgLSAyMykJLyogUEhZIEFkZHJlc3MKLQkJCQkJCQkJICAgPDwgc2hpZnQgKi8KLSNkZWZpbmUgTUlJTUFERF9QSFlfUkVHSVNURVJfU0hJRlQgICAgICAgICAgICAgICgzMSAtIDMxKQkvKiBQSFkgUmVnaXN0ZXIKLQkJCQkJCQkJICAgPDwgc2hpZnQgKi8KLQotLyogVUNDIEdFVEggTUlJTUNPTiAoTUlJIE1hbmFnZW1lbnQgQ29udHJvbCBSZWdpc3RlcikgKi8KLSNkZWZpbmUgTUlJTUNPTl9QSFlfQ09OVFJPTF9TSElGVCAgICAgICAgICAgICAgICgzMSAtIDMxKQkvKiBQSFkgQ29udHJvbAotCQkJCQkJCQkgICA8PCBzaGlmdCAqLwotI2RlZmluZSBNSUlNQ09OX1BIWV9TVEFUVVNfU0hJRlQgICAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIFBIWSBTdGF0dXMKLQkJCQkJCQkJICAgPDwgc2hpZnQgKi8KLQotLyogVUNDIEdFVEggTUlJTUlORCAoTUlJIE1hbmFnZW1lbnQgSW5kaWNhdG9yIFJlZ2lzdGVyKSAqLwotI2RlZmluZSBNSUlNSU5EX05PVF9WQUxJRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBOb3QgdmFsaWQgKi8KLSNkZWZpbmUgTUlJTUlORF9TQ0FOICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogU2NhbiBpbgotCQkJCQkJCQkgICBwcm9ncmVzcyAqLwotI2RlZmluZSBNSUlNSU5EX0JVU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotCi0vKiBJbml0aWFsIFRCSSBQaHlzaWNhbCBBZGRyZXNzICovCi0jZGVmaW5lIFVUQklQQVJfSU5JVF9UQklQQQkJCTB4MWYKLQotc3RydWN0IHVjY19taWlfbW5nIHsKLQl1MzIgbWlpbWNmZzsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gcmVnICovCi0JdTMyIG1paW1jb207CQkvKiBNSUkgbWFuYWdlbWVudCBjb21tYW5kIHJlZyAqLwotCXUzMiBtaWltYWRkOwkJLyogTUlJIG1hbmFnZW1lbnQgYWRkcmVzcyByZWcgKi8KLQl1MzIgbWlpbWNvbjsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbnRyb2wgcmVnICovCi0JdTMyIG1paW1zdGF0OwkJLyogTUlJIG1hbmFnZW1lbnQgc3RhdHVzIHJlZyAqLwotCXUzMiBtaWltaW5kOwkJLyogTUlJIG1hbmFnZW1lbnQgaW5kaWNhdGlvbiByZWcgKi8KLQl1OCBub3RjYXJlWzI4XTsJCS8qIFNwYWNlIGhvbGRlciAqLwotCXUzMiB1dGJpcGFyOwkJLyogVEJJIHBoeSBhZGRyZXNzIHJlZyAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFRCSSAvIE1JSSBTZXQgUmVnaXN0ZXIgKi8KLWVudW0gZW5ldF90YmlfbWlpX3JlZyB7Ci0JRU5FVF9UQklfTUlJX0NSID0gMHgwMCwJLyogQ29udHJvbCAqLwotCUVORVRfVEJJX01JSV9TUiA9IDB4MDEsCS8qIFN0YXR1cyAqLwotCUVORVRfVEJJX01JSV9BTkEgPSAweDA0LAkvKiBBTiBhZHZlcnRpc2VtZW50ICovCi0JRU5FVF9UQklfTUlJX0FOTFBCUEEgPSAweDA1LAkvKiBBTiBsaW5rIHBhcnRuZXIgYmFzZSBwYWdlIGFiaWxpdHkgKi8KLQlFTkVUX1RCSV9NSUlfQU5FWCA9IDB4MDYsCS8qIEFOIGV4cGFuc2lvbiAqLwotCUVORVRfVEJJX01JSV9BTk5QVCA9IDB4MDcsCS8qIEFOIG5leHQgcGFnZSB0cmFuc21pdCAqLwotCUVORVRfVEJJX01JSV9BTkxQQU5QID0gMHgwOCwJLyogQU4gbGluayBwYXJ0bmVyIGFiaWxpdHkgbmV4dCBwYWdlICovCi0JRU5FVF9UQklfTUlJX0VYU1QgPSAweDBGLAkvKiBFeHRlbmRlZCBzdGF0dXMgKi8KLQlFTkVUX1RCSV9NSUlfSkQgPSAweDEwLAkvKiBKaXR0ZXIgZGlhZ25vc3RpY3MgKi8KLQlFTkVUX1RCSV9NSUlfVEJJQ09OID0gMHgxMQkvKiBUQkkgY29udHJvbCAqLwotfTsKLQotaW50IHVlY19tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSk7Ci1pbnQgdWVjX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKTsKLWludCBfX2luaXQgdWVjX21kaW9faW5pdCh2b2lkKTsKLXZvaWQgdWVjX21kaW9fZXhpdCh2b2lkKTsKLXZvaWQgdWVjX21kaW9fYnVzX25hbWUoY2hhciAqbmFtZSwgc3RydWN0IGRldmljZV9ub2RlICpucCk7Ci0jZW5kaWYJCQkJLyogX19VRUNfTUlJX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeC5jCmluZGV4IDM5NmY4MjEuLjg3YjRhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwpAQCAtODA3LDYgKzgwNywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsCQk9IGFzaXhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBheDg4MTcyX3NldF9tdWx0aWNhc3QsCit9OworCiBzdGF0aWMgaW50IGF4ODgxNzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCWludCByZXQgPSAwOwpAQCAtODQ2LDkgKzg1OCw4IEBACiAJZGV2LT5taWkucGh5X2lkX21hc2sgPSAweDNmOwogCWRldi0+bWlpLnJlZ19udW1fbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5X2FkZHIoZGV2KTsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCi0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxNzJfc2V0X211bHRpY2FzdDsKKwlkZXYtPm5ldC0+bmV0ZGV2X29wcyA9ICZheDg4MTcyX25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJmF4ODgxNzJfZXRodG9vbF9vcHM7CiAKIAlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOwpAQCAtODk4LDYgKzkwOSwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODg3NzJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2RvX2lvY3RsCQk9IGFzaXhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3QsCit9OworCiBzdGF0aWMgaW50IGF4ODg3NzJfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCWludCByZXQsIGVtYmRfcGh5OwpAQCAtOTYyLDcgKzk4NSw2IEBACiAJZGV2LT5taWkubWRpb193cml0ZSA9IGFzaXhfbWRpb193cml0ZTsKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeV9hZGRyKGRldik7CiAKIAlwaHlpZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CkBAIC05NzgsNyArMTAwMCw3IEBACiAKIAltc2xlZXAoMTUwKTsKIAotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3Q7CisJZGV2LT5uZXQtPm5ldGRldl9vcHMgPSAmYXg4ODc3Ml9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4NzcyX2V0aHRvb2xfb3BzOwogCiAJYXNpeF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKQEAgLTExODEsNiArMTIwMywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGF4ODgxNzhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0LAorCS5uZG9fZG9faW9jdGwgCQk9IGFzaXhfaW9jdGwsCisJLm5kb19jaGFuZ2VfbXR1IAk9IGF4ODgxNzhfY2hhbmdlX210dSwKK307CisKIHN0YXRpYyBpbnQgYXg4ODE3OF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKQEAgLTEyNDcsMTEgKzEyODEsMTAgQEAKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHhmZjsKIAlkZXYtPm1paS5zdXBwb3J0c19nbWlpID0gMTsKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwogCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeV9hZGRyKGRldik7Ci0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGFzaXhfc2V0X211bHRpY2FzdDsKKworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmF4ODgxNzhfbmV0ZGV2X29wczsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3OF9ldGh0b29sX29wczsKLQlkZXYtPm5ldC0+Y2hhbmdlX210dSA9ICZheDg4MTc4X2NoYW5nZV9tdHU7CiAKIAlwaHlpZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CiAJZGJnKCJQSFlJRD0weCUwOHgiLCBwaHlpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwppbmRleCBjYjdhY2JiLi5iOWRkNDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKQEAgLTE2Myw3ICsxNjMsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKIAotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl1bnNpZ25lZCBpbnQgdHhfcHRyLCB0eF9pZHg7CkBAIC0yNDUsOCArMjQ0LDggQEAKIAkJaWYoIWNhdGMtPmlzX2Y1dTAxMSkgewogCQkJcGt0X2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2Kilwa3Rfc3RhcnQpOwogCQkJaWYgKHBrdF9sZW4gPiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJCQljYXRjLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQkJY2F0Yy0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTI2Miw4ICsyNjEsOCBAQAogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBjYXRjLT5uZXRkZXYpOwogCQluZXRpZl9yeChza2IpOwogCi0JCWNhdGMtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJY2F0Yy0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWNhdGMtPm5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAogCQkvKiBGNVUwMTEgb25seSBkb2VzIG9uZSBwYWNrZXQgcGVyIFJYICovCiAJCWlmIChjYXRjLT5pc19mNXUwMTEpCkBAIC0zODYsNyArMzg1LDcgQEAKIAkJZGJnKCJUeCBSZXNldC4iKTsKIAkJdXJiLT5zdGF0dXMgPSAwOwogCQljYXRjLT5uZXRkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJY2F0Yy0+c3RhdHMudHhfZXJyb3JzKys7CisJCWNhdGMtPm5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWNsZWFyX2JpdChUWF9SVU5OSU5HLCAmY2F0Yy0+ZmxhZ3MpOwogCQluZXRpZl93YWtlX3F1ZXVlKGNhdGMtPm5ldGRldik7CiAJCXJldHVybjsKQEAgLTQxMiw3ICs0MTEsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhdGMtPnR4X2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBjYXRjX2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIGludCBjYXRjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgY2F0YyAqY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ0Myw4ICs0NDIsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhdGMtPnR4X2xvY2ssIGZsYWdzKTsKIAogCWlmIChyID49IDApIHsKLQkJY2F0Yy0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCWNhdGMtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJfQogCiAJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtNTg4LDE1ICs1ODcsMTUgQEAKIAlzd2l0Y2ggKGluZGV4KSB7CiAJCWNhc2UgVHhTaW5nbGVDb2xsOgogCQljYXNlIFR4TXVsdGlDb2xsOgotCQkJY2F0Yy0+c3RhdHMuY29sbGlzaW9ucyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPm5ldGRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBkYXRhIC0gbGFzdDsKIAkJCWJyZWFrOwogCQljYXNlIFR4RXhjZXNzQ29sbDoKLQkJCWNhdGMtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwotCQkJY2F0Yy0+c3RhdHMudHhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKKwkJCWNhdGMtPm5ldGRldi0+c3RhdHMudHhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwogCQkJYnJlYWs7CiAJCWNhc2UgUnhGcmFtRXJyOgotCQkJY2F0Yy0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IGRhdGEgLSBsYXN0OwotCQkJY2F0Yy0+c3RhdHMucnhfZXJyb3JzICs9IGRhdGEgLSBsYXN0OworCQkJY2F0Yy0+bmV0ZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz0gZGF0YSAtIGxhc3Q7CisJCQljYXRjLT5uZXRkZXYtPnN0YXRzLnJ4X2Vycm9ycyArPSBkYXRhIC0gbGFzdDsKIAkJCWJyZWFrOwogCX0KIApAQCAtNjE0LDEyICs2MTMsNiBAQAogCW1vZF90aW1lcigmY2F0Yy0+dGltZXIsIGppZmZpZXMgKyBTVEFUU19VUERBVEUpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmNhdGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCi17Ci0Jc3RydWN0IGNhdGMgKmNhdGMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXJldHVybiAmY2F0Yy0+c3RhdHM7Ci19Ci0KIC8qCiAgKiBSZWNlaXZlIG1vZGVzLiBCcm9hZGNhc3QsIE11bHRpY2FzdCwgUHJvbWlzYy4KICAqLwpAQCAtNzUwLDYgKzc0MywxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGNhdGNfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gY2F0Y19vcGVuLAorCS5uZG9fc3RvcAkJPSBjYXRjX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGNhdGNfc3RhcnRfeG1pdCwKKworCS5uZG9fdHhfdGltZW91dAkJPSBjYXRjX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBjYXRjX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIFVTQiBwcm9iZSwgZGlzY29ubmVjdC4KICAqLwpAQCAtNzc0LDEzICs3NzksOCBAQAogCiAJY2F0YyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQluZXRkZXYtPm9wZW4gPSBjYXRjX29wZW47Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjYXRjX2hhcmRfc3RhcnRfeG1pdDsKLQluZXRkZXYtPnN0b3AgPSBjYXRjX3N0b3A7Ci0JbmV0ZGV2LT5nZXRfc3RhdHMgPSBjYXRjX2dldF9zdGF0czsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBjYXRjX3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmNhdGNfbmV0ZGV2X29wczsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLQluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGNhdGNfc2V0X211bHRpY2FzdF9saXN0OwogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZvcHMpOwogCiAJY2F0Yy0+dXNiZGV2ID0gdXNiZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCmluZGV4IDgxNjgyYzYuLjZmYzRmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKQEAgLTQxOSw2ICs0MTksMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkbTk2MDFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwgCQk9IGRtOTYwMV9pb2N0bCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGRtOTYwMV9zZXRfbXVsdGljYXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZG05NjAxX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyBpbnQgZG05NjAxX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlpbnQgcmV0OwpAQCAtNDI4LDkgKzQ0MCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlkZXYtPm5ldC0+ZG9faW9jdGwgPSBkbTk2MDFfaW9jdGw7Ci0JZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGRtOTYwMV9zZXRfbXVsdGljYXN0OwotCWRldi0+bmV0LT5zZXRfbWFjX2FkZHJlc3MgPSBkbTk2MDFfc2V0X21hY19hZGRyZXNzOworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJmRtOTYwMV9uZXRkZXZfb3BzOwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZkbTk2MDFfZXRodG9vbF9vcHM7CiAJZGV2LT5uZXQtPmhhcmRfaGVhZGVyX2xlbiArPSBETV9UWF9PVkVSSEVBRDsKIAlkZXYtPmhhcmRfbXR1ID0gZGV2LT5uZXQtPm10dSArIGRldi0+bmV0LT5oYXJkX2hlYWRlcl9sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggZmU5OGFjYS4uY2RlNDIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtOTM2LDggKzkzNiw3IEBACiAJCQlpZiAoIW9kZXYtPnJ4X2J1Zl9taXNzaW5nKSB7CiAJCQkJLyogUGFja2V0IGlzIGNvbXBsZXRlLiBJbmplY3QgaW50byBzdGFjay4gKi8KIAkJCQkvKiBXZSBoYXZlIElQIHBhY2tldCBoZXJlICovCi0JCQkJb2Rldi0+c2tiX3J4X2J1Zi0+cHJvdG9jb2wgPQotCQkJCQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk7CisJCQkJb2Rldi0+c2tiX3J4X2J1Zi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9JUCk7CiAJCQkJLyogZG9uJ3QgY2hlY2sgaXQgKi8KIAkJCQlvZGV2LT5za2JfcnhfYnVmLT5pcF9zdW1tZWQgPQogCQkJCQlDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKQEAgLTEyNDcsNyArMTI0Niw3IEBACiAgKiBUaGlzIG5lZWRzIHRvIGJlIGEgdGFza2xldCBvdGhlcndpc2Ugd2Ugd2lsbAogICogZW5kIHVwIHJlY3Vyc2l2ZWx5IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KICAqLwotdm9pZCBoc29fdW50aHJvdHRsZV90YXNrbGV0KHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpCitzdGF0aWMgdm9pZCBoc29fdW50aHJvdHRsZV90YXNrbGV0KHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTI2Niw3ICsxMjY1LDcgQEAKIAl0YXNrbGV0X2hpX3NjaGVkdWxlKCZzZXJpYWwtPnVudGhyb3R0bGVfdGFza2xldCk7CiB9CiAKLXZvaWQgaHNvX3VudGhyb3R0bGVfd29ya2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgaHNvX3VudGhyb3R0bGVfd29ya2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGhzb19zZXJpYWwsCkBAIC0xNDY1LDkgKzE0NjQsOSBAQAogCiAJcmV0dXJuIGNoYXJzOwogfQotaW50IHRpb2NtZ2V0X3N1Ym1pdF91cmIoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwKLQkJCXN0cnVjdCBoc29fdGlvY21nZXQgICp0aW9jbWdldCwKLQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1c2IpCitzdGF0aWMgaW50IHRpb2NtZ2V0X3N1Ym1pdF91cmIoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwKKwkJCSAgICAgICBzdHJ1Y3QgaHNvX3Rpb2NtZ2V0ICp0aW9jbWdldCwKKwkJCSAgICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKQogewogCWludCByZXN1bHQ7CiAKQEAgLTIzNjQsMTIgKzIzNjMsNiBAQAogCXJldHVybiAtMTsKIH0KIAotLyogRnJlZXMgYSBnZW5lcmFsIGhzbyBkZXZpY2UgKi8KLXN0YXRpYyB2b2lkIGhzb19mcmVlX2RldmljZShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldikKLXsKLQlrZnJlZShoc29fZGV2KTsKLX0KLQogLyogQ3JlYXRlcyBhIGdlbmVyYWwgaHNvIGRldmljZSAqLwogc3RhdGljIHN0cnVjdCBoc29fZGV2aWNlICpoc29fY3JlYXRlX2RldmljZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCQkJICAgIGludCBwb3J0X3NwZWMpCkBAIC0yNDMyLDkgKzI0MjUsMTYgQEAKIAkJZnJlZV9uZXRkZXYoaHNvX25ldC0+bmV0KTsKIAl9CiAKLQloc29fZnJlZV9kZXZpY2UoaHNvX2Rldik7CisJa2ZyZWUoaHNvX2Rldik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaHNvX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gaHNvX25ldF9vcGVuLAorCS5uZG9fc3RvcAk9IGhzb19uZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0ID0gaHNvX25ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dCA9IGhzb19uZXRfdHhfdGltZW91dCwKK307CisKIC8qIGluaXRpYWxpemUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlICovCiBzdGF0aWMgdm9pZCBoc29fbmV0X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKQEAgLTI0NDMsMTAgKzI0NDMsNyBAQAogCUQxKCJzaXplb2YgaHNvX25ldCBpcyAlZCIsIChpbnQpc2l6ZW9mKCpoc29fbmV0KSk7CiAKIAkvKiBmaWxsIGluIHRoZSBvdGhlciBmaWVsZHMgKi8KLQluZXQtPm9wZW4gPSBoc29fbmV0X29wZW47Ci0JbmV0LT5zdG9wID0gaHNvX25ldF9jbG9zZTsKLQluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IGhzb19uZXRfc3RhcnRfeG1pdDsKLQluZXQtPnR4X3RpbWVvdXQgPSBoc29fbmV0X3R4X3RpbWVvdXQ7CisJbmV0LT5uZXRkZXZfb3BzID0gJmhzb19uZXRkZXZfb3BzOwogCW5ldC0+d2F0Y2hkb2dfdGltZW8gPSBIU09fTkVUX1RYX1RJTUVPVVQ7CiAJbmV0LT5mbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUCB8IElGRl9NVUxUSUNBU1Q7CiAJbmV0LT50eXBlID0gQVJQSFJEX05PTkU7CkBAIC0yNjQ2LDcgKzI2NDMsNyBAQAogCX0KIAloc29fZnJlZV90aW9tZ2V0KHNlcmlhbCk7CiAJa2ZyZWUoc2VyaWFsKTsKLQloc29fZnJlZV9kZXZpY2UoaHNvX2Rldik7CisJa2ZyZWUoaHNvX2Rldik7CiB9CiAKIC8qIENyZWF0ZXMgYSBidWxrIEFUIGNoYW5uZWwgKi8KQEAgLTI3MjcsNyArMjcyNCw3IEBACiBleGl0OgogCWhzb19mcmVlX3Rpb21nZXQoc2VyaWFsKTsKIAlrZnJlZShzZXJpYWwpOwotCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwlrZnJlZShoc29fZGV2KTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjc4Niw3ICsyNzgzLDcgQEAKIAkJa2ZyZWUoc2VyaWFsKTsKIAl9CiAJaWYgKGhzb19kZXYpCi0JCWhzb19mcmVlX2RldmljZShoc29fZGV2KTsKKwkJa2ZyZWUoaHNvX2Rldik7CiAJcmV0dXJuIE5VTEw7CiAKIH0KQEAgLTI5NzksOCArMjk3Niw2IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQl1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSgmaHNvX2RyaXZlciwgaW50ZXJmYWNlLCBoc29fZGV2KTsKLQogCS8qIHNhdmUgb3VyIGRhdGEgcG9pbnRlciBpbiB0aGlzIGRldmljZSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBoc29fZGV2KTsKIApAQCAtMjk5OCw4ICsyOTkzLDYgQEAKIAogCS8qIHJlbW92ZSByZWZlcmVuY2Ugb2Ygb3VyIHByaXZhdGUgZGF0YSAqLwogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQotCXVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJmhzb19kcml2ZXIsIGludGVyZmFjZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGFzeW5jX2dldF9pbnRmKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMgYi9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCmluZGV4IGNlZDhmMzYuLjdhZTlhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYwpAQCAtNDg2LDYgKzQ4NiwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG1jczc4MzBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gdXNibmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHVzYm5ldF9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSB1c2JuZXRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gdXNibmV0X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IHVzYm5ldF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorCS5uZG9fZG9faW9jdGwgCQk9IG1jczc4MzBfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBtY3M3ODMwX3NldF9tdWx0aWNhc3QsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJID0gbWNzNzgzMF9zZXRfbWFjX2FkZHJlc3MsCit9OworCiBzdGF0aWMgaW50IG1jczc4MzBfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1ZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBkZXYtPm5ldDsKQEAgLTQ5NSwxMSArNTA3LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCW5ldC0+ZG9faW9jdGwgPSBtY3M3ODMwX2lvY3RsOwogCW5ldC0+ZXRodG9vbF9vcHMgPSAmbWNzNzgzMF9ldGh0b29sX29wczsKLQluZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG1jczc4MzBfc2V0X211bHRpY2FzdDsKKwluZXQtPm5ldGRldl9vcHMgPSAmbWNzNzgzMF9uZXRkZXZfb3BzOwogCW1jczc4MzBfc2V0X211bHRpY2FzdChuZXQpOwotCW5ldC0+c2V0X21hY19hZGRyZXNzID0gbWNzNzgzMF9zZXRfbWFjX2FkZHJlc3M7CiAKIAkvKiByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3RhdHVzIGJ5dGUgb24gcnggKi8KIAlkZXYtPnJ4X3VyYl9zaXplID0gRVRIX0ZSQU1FX0xFTiArIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jIGIvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYwppbmRleCBiY2Q4NThjLi4xYmYyNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCQkJCXN0cnVjdCBybmRpc19rZWVwYWxpdmVfYyAqbXNnID0gKHZvaWQgKilidWY7CiAKIAkJCQltc2ctPm1zZ190eXBlID0gUk5ESVNfTVNHX0tFRVBBTElWRV9DOwotCQkJCW1zZy0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqbXNnKTsKKwkJCQltc2ctPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKm1zZyk7CiAJCQkJbXNnLT5zdGF0dXMgPSBSTkRJU19TVEFUVVNfU1VDQ0VTUzsKIAkJCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAogCQkJCQl1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXUuZ2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICp1LmdldCArIGluX2xlbik7CiAJdS5nZXQtPm9pZCA9IG9pZDsKIAl1LmdldC0+bGVuID0gY3B1X3RvX2xlMzIoaW5fbGVuKTsKLQl1LmdldC0+b2Zmc2V0ID0gY2NwdTIoMjApOworCXUuZ2V0LT5vZmZzZXQgPSBjcHVfdG9fbGUzMigyMCk7CiAKIAlyZXR2YWwgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIENPTlRST0xfQlVGRkVSX1NJWkUpOwogCWlmICh1bmxpa2VseShyZXR2YWwgPCAwKSkgewpAQCAtMjY2LDYgKzI2NiwxNiBAQAogCXJldHVybiAtRURPTTsKIH0KIAorLyogc2FtZSBhcyB1c2JuZXRfbmV0ZGV2X29wcyBidXQgTVRVIGNoYW5nZSBub3QgYWxsb3dlZCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBybmRpc19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB1c2JuZXRfb3BlbiwKKwkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IHVzYm5ldF9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSB1c2JuZXRfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBpbnQKIGdlbmVyaWNfcm5kaXNfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBpbnQgZmxhZ3MpCiB7CkBAIC0yOTcsOSArMzA3LDkgQEAKIAkJZ290byBmYWlsOwogCiAJdS5pbml0LT5tc2dfdHlwZSA9IFJORElTX01TR19JTklUOwotCXUuaW5pdC0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqdS5pbml0KTsKLQl1LmluaXQtPm1ham9yX3ZlcnNpb24gPSBjY3B1MigxKTsKLQl1LmluaXQtPm1pbm9yX3ZlcnNpb24gPSBjY3B1MigwKTsKKwl1LmluaXQtPm1zZ19sZW4gPSBjcHVfdG9fbGUzMihzaXplb2YgKnUuaW5pdCk7CisJdS5pbml0LT5tYWpvcl92ZXJzaW9uID0gY3B1X3RvX2xlMzIoMSk7CisJdS5pbml0LT5taW5vcl92ZXJzaW9uID0gY3B1X3RvX2xlMzIoMCk7CiAKIAkvKiBtYXggdHJhbnNmZXIgKGluIHNwZWMpIGlzIDB4NDAwMCBhdCBmdWxsIHNwZWVkLCBidXQgZm9yCiAJICogVFggd2UnbGwgc3RpY2sgdG8gb25lIEV0aGVybmV0IHBhY2tldCBwbHVzIFJORElTIGZyYW1pbmcuCkBAIC0zMjcsNyArMzM3LDggQEAKIAlkZXYtPnJ4X3VyYl9zaXplICY9IH4oZGV2LT5tYXhwYWNrZXQgLSAxKTsKIAl1LmluaXQtPm1heF90cmFuc2Zlcl9zaXplID0gY3B1X3RvX2xlMzIoZGV2LT5yeF91cmJfc2l6ZSk7CiAKLQluZXQtPmNoYW5nZV9tdHUgPSBOVUxMOworCW5ldC0+bmV0ZGV2X29wcyA9ICZybmRpc19uZXRkZXZfb3BzOworCiAJcmV0dmFsID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIAlpZiAodW5saWtlbHkocmV0dmFsIDwgMCkpIHsKIAkJLyogaXQgbWlnaHQgbm90IGV2ZW4gYmUgYW4gUk5ESVMgZGV2aWNlISEgKi8KQEAgLTQwMywxMCArNDE0LDEwIEBACiAJLyogc2V0IGEgbm9uemVybyBmaWx0ZXIgdG8gZW5hYmxlIGRhdGEgdHJhbnNmZXJzICovCiAJbWVtc2V0KHUuc2V0LCAwLCBzaXplb2YgKnUuc2V0KTsKIAl1LnNldC0+bXNnX3R5cGUgPSBSTkRJU19NU0dfU0VUOwotCXUuc2V0LT5tc2dfbGVuID0gY2NwdTIoNCArIHNpemVvZiAqdS5zZXQpOworCXUuc2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoNCArIHNpemVvZiAqdS5zZXQpOwogCXUuc2V0LT5vaWQgPSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUjsKLQl1LnNldC0+bGVuID0gY2NwdTIoNCk7Ci0JdS5zZXQtPm9mZnNldCA9IGNjcHUyKChzaXplb2YgKnUuc2V0KSAtIDgpOworCXUuc2V0LT5sZW4gPSBjcHVfdG9fbGUzMig0KTsKKwl1LnNldC0+b2Zmc2V0ID0gY3B1X3RvX2xlMzIoKHNpemVvZiAqdS5zZXQpIC0gOCk7CiAJKihfX2xlMzIgKikodS5idWYgKyBzaXplb2YgKnUuc2V0KSA9IFJORElTX0RFRkFVTFRfRklMVEVSOwogCiAJcmV0dmFsID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKQEAgLTQyMyw3ICs0MzQsNyBAQAogaGFsdF9mYWlsX2FuZF9yZWxlYXNlOgogCW1lbXNldCh1LmhhbHQsIDAsIHNpemVvZiAqdS5oYWx0KTsKIAl1LmhhbHQtPm1zZ190eXBlID0gUk5ESVNfTVNHX0hBTFQ7Ci0JdS5oYWx0LT5tc2dfbGVuID0gY2NwdTIoc2l6ZW9mICp1LmhhbHQpOworCXUuaGFsdC0+bXNnX2xlbiA9IGNwdV90b19sZTMyKHNpemVvZiAqdS5oYWx0KTsKIAkodm9pZCkgcm5kaXNfY29tbWFuZChkZXYsICh2b2lkICopdS5oYWx0LCBDT05UUk9MX0JVRkZFUl9TSVpFKTsKIGZhaWxfYW5kX3JlbGVhc2U6CiAJdXNiX3NldF9pbnRmZGF0YShpbmZvLT5kYXRhLCBOVUxMKTsKQEAgLTQ0OCw3ICs0NTksNyBAQAogCWhhbHQgPSBremFsbG9jKENPTlRST0xfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChoYWx0KSB7CiAJCWhhbHQtPm1zZ190eXBlID0gUk5ESVNfTVNHX0hBTFQ7Ci0JCWhhbHQtPm1zZ19sZW4gPSBjY3B1MihzaXplb2YgKmhhbHQpOworCQloYWx0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICpoYWx0KTsKIAkJKHZvaWQpIHJuZGlzX2NvbW1hbmQoZGV2LCAodm9pZCAqKWhhbHQsIENPTlRST0xfQlVGRkVSX1NJWkUpOwogCQlrZnJlZShoYWx0KTsKIAl9CkBAIC01NDMsNyArNTU0LDcgQEAKIAltZW1zZXQoaGRyLCAwLCBzaXplb2YgKmhkcik7CiAJaGRyLT5tc2dfdHlwZSA9IFJORElTX01TR19QQUNLRVQ7CiAJaGRyLT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2tiLT5sZW4pOwotCWhkci0+ZGF0YV9vZmZzZXQgPSBjY3B1MihzaXplb2YoKmhkcikgLSA4KTsKKwloZHItPmRhdGFfb2Zmc2V0ID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCpoZHIpIC0gOCk7CiAJaGRyLT5kYXRhX2xlbiA9IGNwdV90b19sZTMyKGxlbik7CiAKIAkvKiBGSVhNRSBtYWtlIHRoZSBsYXN0IHBhY2tldCBhbHdheXMgYmUgc2hvcnQgLi4uICovCkBAIC01NjIsOSArNTczLDYgQEAKIAkudHhfZml4dXAgPQlybmRpc190eF9maXh1cCwKIH07CiAKLSN1bmRlZiBjY3B1MgotCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZAlwcm9kdWN0cyBbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGQ4NjY0YmYuLmY5ZmI0NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtMTU1LDcgKzE1NSw2IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGw7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgdXJiICpyeF91cmIsICp0eF91cmIsICppbnRyX3VyYiwgKmN0cmxfdXJiOwogCXN0cnVjdCBza19idWZmICp0eF9za2IsICpyeF9za2I7CkBAIC00NjMsOCArNDYyLDggQEAKIAlza2JfcHV0KGRldi0+cnhfc2tiLCBwa3RfbGVuKTsKIAlkZXYtPnJ4X3NrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhkZXYtPnJ4X3NrYiwgbmV0ZGV2KTsKIAluZXRpZl9yeChkZXYtPnJ4X3NrYik7Ci0JZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOworCW5ldGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKIAogCXNwaW5fbG9jaygmZGV2LT5yeF9wb29sX2xvY2spOwogCXNrYiA9IHB1bGxfc2tiKGRldik7CkBAIC01NzMsMTMgKzU3MiwxMyBAQAogCiAJZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCWlmIChkWzBdICYgVFNSX0VSUk9SUykgewotCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCWlmIChkW0lOVF9UU1JdICYgKFRTUl9FQ09MIHwgVFNSX0pCUikpCi0JCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTENPTCkKLQkJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJZGV2LT5uZXRkZXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAkJaWYgKGRbSU5UX1RTUl0gJiBUU1JfTE9TU19DUlMpCi0JCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCQlkZXYtPm5ldGRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAl9CiAJLyogUmVwb3J0IGxpbmsgc3RhdHVzIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmsgc3RhY2sgKi8KIAlpZiAoKGRbSU5UX01TUl0gJiBNU1JfTElOSykgPT0gMCkgewpAQCAtNjk3LDE3ICs2OTYsMTIgQEAKIAlzZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqcnRsODE1MF9uZXRkZXZfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJigocnRsODE1MF90ICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOwotfQotCiBzdGF0aWMgdm9pZCBydGw4MTUwX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlydGw4MTUwX3QgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJZGV2X3dhcm4oJm5ldGRldi0+ZGV2LCAiVHggdGltZW91dC5cbiIpOwogCXVzYl91bmxpbmtfdXJiKGRldi0+dHhfdXJiKTsKLQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCW5ldGRldi0+c3RhdHMudHhfZXJyb3JzKys7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNTBfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtNzQ3LDEyICs3NDEsMTIgQEAKIAkJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOwogCQllbHNlIHsKIAkJCWRldl93YXJuKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0eF91cmIgJWRcbiIsIHJlcyk7Ci0JCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJbmV0ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAJCX0KIAl9IGVsc2UgewotCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCW5ldGRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCX0KIApAQCAtODk3LDYgKzg5MSwxOSBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsODE1MF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBydGw4MTUwX29wZW4sCisJLm5kb19zdG9wCQk9IHJ0bDgxNTBfY2xvc2UsCisJLm5kb19kb19pb2N0bAkJPSBydGw4MTUwX2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBydGw4MTUwX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0IAk9IHJ0bDgxNTBfdHhfdGltZW91dCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHJ0bDgxNTBfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHJ0bDgxNTBfc2V0X21hY19hZGRyZXNzLAorCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIGludCBydGw4MTUwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKQEAgLTkyMywxNSArOTMwLDggQEAKIAkKIAlkZXYtPnVkZXYgPSB1ZGV2OwogCWRldi0+bmV0ZGV2ID0gbmV0ZGV2OwotCW5ldGRldi0+b3BlbiA9IHJ0bDgxNTBfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSBydGw4MTUwX2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgPSBydGw4MTUwX2lvY3RsOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZydGw4MTUwX25ldGRldl9vcHM7CiAJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFJUTDgxNTBfVFhfVElNRU9VVDsKLQluZXRkZXYtPnR4X3RpbWVvdXQgPSBydGw4MTUwX3R4X3RpbWVvdXQ7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBydGw4MTUwX3N0YXJ0X3htaXQ7Ci0JbmV0ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBydGw4MTUwX3NldF9tdWx0aWNhc3Q7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBydGw4MTUwX3NldF9tYWNfYWRkcmVzczsKLQluZXRkZXYtPmdldF9zdGF0cyA9IHJ0bDgxNTBfbmV0ZGV2X3N0YXRzOwogCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZvcHMpOwogCWRldi0+aW50cl9pbnRlcnZhbCA9IDEwMDsJLyogMTAwbXMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwppbmRleCA1NTc0YWJlLi5kYzE2NjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYworKysgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwpAQCAtNTUsMTEgKzU1LDEwIEBACiAKIHN0cnVjdCB1c2JfY29udGV4dCB7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdCByZXE7Ci0Jc3RydWN0IGNvbXBsZXRpb24gbm90aWZ5OwogCXN0cnVjdCB1c2JuZXQgKmRldjsKIH07CiAKLWludCB0dXJib19tb2RlID0gdHJ1ZTsKK3N0YXRpYyBpbnQgdHVyYm9fbW9kZSA9IHRydWU7CiBtb2R1bGVfcGFyYW0odHVyYm9fbW9kZSwgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHR1cmJvX21vZGUsICJFbmFibGUgbXVsdGlwbGUgZnJhbWVzIHBlciBSeCB0cmFuc2FjdGlvbiIpOwogCkBAIC0zMDcsNyArMzA2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc21zYzk1eHhfYXN5bmNfY21kX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBzbXNjOTV4eF9hc3luY19jbWRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQogewogCXN0cnVjdCB1c2JfY29udGV4dCAqdXNiX2NvbnRleHQgPSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gdXNiX2NvbnRleHQtPmRldjsKQEAgLTMxNiw4ICszMTUsNiBAQAogCWlmIChzdGF0dXMgPCAwKQogCQlkZXZ3YXJuKGRldiwgImFzeW5jIGNhbGxiYWNrIGZhaWxlZCB3aXRoICVkIiwgc3RhdHVzKTsKIAotCWNvbXBsZXRlKCZ1c2JfY29udGV4dC0+bm90aWZ5KTsKLQogCWtmcmVlKHVzYl9jb250ZXh0KTsKIAl1c2JfZnJlZV91cmIodXJiKTsKIH0KQEAgLTM0OCwxMSArMzQ1LDEwIEBACiAJdXNiX2NvbnRleHQtPnJlcS53VmFsdWUgPSAwMDsKIAl1c2JfY29udGV4dC0+cmVxLndJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKIAl1c2JfY29udGV4dC0+cmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKLQlpbml0X2NvbXBsZXRpb24oJnVzYl9jb250ZXh0LT5ub3RpZnkpOwogCiAJdXNiX2ZpbGxfY29udHJvbF91cmIodXJiLCBkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAogCQkodm9pZCAqKSZ1c2JfY29udGV4dC0+cmVxLCBkYXRhLCBzaXplLAotCQkodXNiX2NvbXBsZXRlX3Qpc21zYzk1eHhfYXN5bmNfY21kX2NhbGxiYWNrLAorCQlzbXNjOTV4eF9hc3luY19jbWRfY2FsbGJhY2ssCiAJCSh2b2lkICopdXNiX2NvbnRleHQpOwogCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKQEAgLTEwMTIsNiArMTAwOCwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNtc2M5NXh4X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisJLm5kb19kb19pb2N0bCAJCT0gc21zYzk1eHhfaW9jdGwsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzbXNjOTV4eF9zZXRfbXVsdGljYXN0LAorfTsKKwogc3RhdGljIGludCBzbXNjOTV4eF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhID0gTlVMTDsKQEAgLTEwNDIsOSArMTA1MCw4IEBACiAJLyogSW5pdCBhbGwgcmVnaXN0ZXJzICovCiAJcmV0ID0gc21zYzk1eHhfcmVzZXQoZGV2KTsKIAotCWRldi0+bmV0LT5kb19pb2N0bCA9IHNtc2M5NXh4X2lvY3RsOworCWRldi0+bmV0LT5uZXRkZXZfb3BzID0gJnNtc2M5NXh4X25ldGRldl9vcHM7CiAJZGV2LT5uZXQtPmV0aHRvb2xfb3BzID0gJnNtc2M5NXh4X2V0aHRvb2xfb3BzOwotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBzbXNjOTV4eF9zZXRfbXVsdGljYXN0OwogCWRldi0+bmV0LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOwogCWRldi0+bmV0LT5oYXJkX2hlYWRlcl9sZW4gKz0gU01TQzk1WFhfVFhfT1ZFUkhFQUQ7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggYzMyMjg0Zi4uNjU5NjU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAgKgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCB1c2JuZXRfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpCitpbnQgdXNibmV0X2NoYW5nZV9tdHUgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCB1c2JuZXQJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50CQlsbF9tdHUgPSBuZXdfbXR1ICsgbmV0LT5oYXJkX2hlYWRlcl9sZW47CkBAIC0yNDYsMTQgKzI0Niw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp1c2JuZXRfZ2V0X3N0YXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQotewotCXN0cnVjdCB1c2JuZXQJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7Ci0JcmV0dXJuICZkZXYtPnN0YXRzOwotfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X2NoYW5nZV9tdHUpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC01NDgsNyArNTQxLDcgQEAKIAogLy8gcHJlY29uZGl0aW9uOiBuZXZlciBjYWxsZWQgaW5faW50ZXJydXB0CiAKLXN0YXRpYyBpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCitpbnQgdXNibmV0X3N0b3AgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IHVzYm5ldAkJKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CiAJaW50CQkJdGVtcDsKQEAgLTU5Miw2ICs1ODUsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc3RvcCk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTU5OSw3ICs1OTMsNyBAQAogCiAvLyBwcmVjb25kaXRpb246IG5ldmVyIGNhbGxlZCBpbl9pbnRlcnJ1cHQKIAotc3RhdGljIGludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK2ludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlyZXR2YWw7CkBAIC02NzQsNiArNjY4LDcgQEAKIGRvbmVfbm9wbToKIAlyZXR1cm4gcmV0dmFsOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X29wZW4pOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC05MDgsNyArOTAzLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgdXNibmV0X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit2b2lkIHVzYm5ldF90eF90aW1lb3V0IChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwogCkBAIC05MTcsMTAgKzkxMiwxMSBAQAogCiAJLy8gRklYTUU6IGRldmljZSByZWNvdmVyeSAtLSByZXNldD8KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF90eF90aW1lb3V0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKK2ludCB1c2JuZXRfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0CQkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCQlsZW5ndGg7CkBAIC0xMDAzLDcgKzk5OSw3IEBACiAJfQogCXJldHVybiByZXR2YWw7CiB9Ci0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYm5ldF9zdGFydF94bWl0KTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMTExMCw2ICsxMTA2LDE1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfZGlzY29ubmVjdCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdXNibmV0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSB1c2JuZXRfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xMTc5LDEzICsxMTg0LDE0IEBACiAJCW5ldC0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogI2VuZGlmCiAKLQluZXQtPmNoYW5nZV9tdHUgPSB1c2JuZXRfY2hhbmdlX210dTsKLQluZXQtPmdldF9zdGF0cyA9IHVzYm5ldF9nZXRfc3RhdHM7CisJbmV0LT5uZXRkZXZfb3BzID0gJnVzYm5ldF9uZXRkZXZfb3BzOworI2lmZGVmIENPTkZJR19DT01QQVRfTkVUX0RFVl9PUFMKIAluZXQtPmhhcmRfc3RhcnRfeG1pdCA9IHVzYm5ldF9zdGFydF94bWl0OwogCW5ldC0+b3BlbiA9IHVzYm5ldF9vcGVuOwogCW5ldC0+c3RvcCA9IHVzYm5ldF9zdG9wOwotCW5ldC0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUX0pJRkZJRVM7CiAJbmV0LT50eF90aW1lb3V0ID0gdXNibmV0X3R4X3RpbWVvdXQ7CisjZW5kaWYKKwluZXQtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVF9KSUZGSUVTOwogCW5ldC0+ZXRodG9vbF9vcHMgPSAmdXNibmV0X2V0aHRvb2xfb3BzOwogCiAJLy8gYWxsb3cgZGV2aWNlLXNwZWNpZmljIGJpbmQvaW5pdCBwcm9jZWR1cmVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92ZXRoLmMgYi9kcml2ZXJzL25ldC92ZXRoLmMKaW5kZXggMTI0ZmU3NS4uMDE1ZGIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZldGguYwpAQCAtMTksMTIgKzE5LDE3IEBACiAjZGVmaW5lIERSVl9OQU1FCSJ2ZXRoIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wIgogCisjZGVmaW5lIE1JTl9NVFUgNjgJCS8qIE1pbiBMMyBNVFUgKi8KKyNkZWZpbmUgTUFYX01UVSA2NTUzNQkJLyogTWF4IEwzIE1UVSAoYXJiaXRyYXJ5KSAqLworI2RlZmluZSBNVFVfUEFEIChFVEhfSExFTiArIDQpICAvKiBNYXggZGlmZmVyZW5jZSBiZXR3ZWVuIEwyIGFuZCBMMyBzaXplIE1UVSAqLworCiBzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgewogCXVuc2lnbmVkIGxvbmcJcnhfcGFja2V0czsKIAl1bnNpZ25lZCBsb25nCXR4X3BhY2tldHM7CiAJdW5zaWduZWQgbG9uZwlyeF9ieXRlczsKIAl1bnNpZ25lZCBsb25nCXR4X2J5dGVzOwogCXVuc2lnbmVkIGxvbmcJdHhfZHJvcHBlZDsKKwl1bnNpZ25lZCBsb25nCXJ4X2Ryb3BwZWQ7CiB9OwogCiBzdHJ1Y3QgdmV0aF9wcml2IHsKQEAgLTE0Nyw3ICsxNTIsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpyY3YgPSBOVUxMOwogCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXYsICpyY3ZfcHJpdjsKLQlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzOworCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyAqc3RhdHMsICpyY3Zfc3RhdHM7CiAJaW50IGxlbmd0aCwgY3B1OwogCiAJc2tiX29ycGhhbihza2IpOwpAQCAtMTU4LDkgKzE2MywxMyBAQAogCiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0YXRzID0gcGVyX2NwdV9wdHIocHJpdi0+c3RhdHMsIGNwdSk7CisJcmN2X3N0YXRzID0gcGVyX2NwdV9wdHIocmN2X3ByaXYtPnN0YXRzLCBjcHUpOwogCiAJaWYgKCEocmN2LT5mbGFncyAmIElGRl9VUCkpCi0JCWdvdG8gb3V0ZjsKKwkJZ290byB0eF9kcm9wOworCisJaWYgKHNrYi0+bGVuID4gKHJjdi0+bXR1ICsgTVRVX1BBRCkpCisJCWdvdG8gcnhfZHJvcDsKIAogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCByY3YpOwpAQCAtMTc4LDE3ICsxODcsMjEgQEAKIAlzdGF0cy0+dHhfYnl0ZXMgKz0gbGVuZ3RoOwogCXN0YXRzLT50eF9wYWNrZXRzKys7CiAKLQlzdGF0cyA9IHBlcl9jcHVfcHRyKHJjdl9wcml2LT5zdGF0cywgY3B1KTsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gbGVuZ3RoOwotCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJcmN2X3N0YXRzLT5yeF9ieXRlcyArPSBsZW5ndGg7CisJcmN2X3N0YXRzLT5yeF9wYWNrZXRzKys7CiAKIAluZXRpZl9yeChza2IpOwogCXJldHVybiAwOwogCi1vdXRmOgordHhfZHJvcDoKIAlrZnJlZV9za2Ioc2tiKTsKIAlzdGF0cy0+dHhfZHJvcHBlZCsrOwogCXJldHVybiAwOworCityeF9kcm9wOgorCWtmcmVlX3NrYihza2IpOworCXJjdl9zdGF0cy0+cnhfZHJvcHBlZCsrOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjEwLDYgKzIyMyw3IEBACiAJZGV2X3N0YXRzLT5yeF9ieXRlcyA9IDA7CiAJZGV2X3N0YXRzLT50eF9ieXRlcyA9IDA7CiAJZGV2X3N0YXRzLT50eF9kcm9wcGVkID0gMDsKKwlkZXZfc3RhdHMtPnJ4X2Ryb3BwZWQgPSAwOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJc3RhdHMgPSBwZXJfY3B1X3B0cihwcml2LT5zdGF0cywgY3B1KTsKQEAgLTIxOSw2ICsyMzMsNyBAQAogCQlkZXZfc3RhdHMtPnJ4X2J5dGVzICs9IHN0YXRzLT5yeF9ieXRlczsKIAkJZGV2X3N0YXRzLT50eF9ieXRlcyArPSBzdGF0cy0+dHhfYnl0ZXM7CiAJCWRldl9zdGF0cy0+dHhfZHJvcHBlZCArPSBzdGF0cy0+dHhfZHJvcHBlZDsKKwkJZGV2X3N0YXRzLT5yeF9kcm9wcGVkICs9IHN0YXRzLT5yeF9kcm9wcGVkOwogCX0KIAogCXJldHVybiBkZXZfc3RhdHM7CkBAIC0yNDksNiArMjY0LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaXNfdmFsaWRfdmV0aF9tdHUoaW50IG5ld19tdHUpCit7CisJcmV0dXJuIChuZXdfbXR1ID49IE1JTl9NVFUgJiYgbmV3X210dSA8PSBNQVhfTVRVKTsKK30KKworc3RhdGljIGludCB2ZXRoX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCit7CisJaWYgKCFpc192YWxpZF92ZXRoX210dShuZXdfbXR1KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHZldGhfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzOwpAQCAtMjc3LDYgKzMwNSw3IEBACiAJLm5kb19vcGVuICAgICAgICAgICAgPSB2ZXRoX29wZW4sCiAJLm5kb19zdG9wICAgICAgICAgICAgPSB2ZXRoX2Nsb3NlLAogCS5uZG9fc3RhcnRfeG1pdCAgICAgID0gdmV0aF94bWl0LAorCS5uZG9fY2hhbmdlX210dSAgICAgID0gdmV0aF9jaGFuZ2VfbXR1LAogCS5uZG9fZ2V0X3N0YXRzICAgICAgID0gdmV0aF9nZXRfc3RhdHMsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCiB9OwpAQCAtMzAzLDYgKzMzMiwxMCBAQAogCQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmxhX2RhdGEodGJbSUZMQV9BRERSRVNTXSkpKQogCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KKwlpZiAodGJbSUZMQV9NVFVdKSB7CisJCWlmICghaXNfdmFsaWRfdmV0aF9tdHUobmxhX2dldF91MzIodGJbSUZMQV9NVFVdKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggM2I4ZTYzMi4uODgwZWFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTEwOSw4ICsxMDksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotS0VSTl9JTkZPIERSVl9OQU1FICIuYzp2MS4xMC1MSyIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICIgV3JpdHRlbiBieSBEb25hbGQgQmVja2VyXG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjEwLUxLIiBEUlZfVkVSU0lPTiAiICIgRFJWX1JFTERBVEUKKwkiIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlclxuIjsKIAogLyogVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gdG8gdXNlIFBDSSBtZW1vcnkgc3BhY2UuIFNvbWUgZWFybHkgdmVyc2lvbnMKICAgIG9mIHRoZSBSaGluZSBtYXkgb25seSB3b3JrIGNvcnJlY3RseSB3aXRoIEkvTyBzcGFjZSBhY2Nlc3Nlcy4gKi8KQEAgLTU4OSw3ICs1OTAsNyBAQAogCXdvcmtfZG9uZSA9IHJoaW5lX3J4KGRldiwgYnVkZ2V0KTsKIAogCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKLQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCW5hcGlfY29tcGxldGUobmFwaSk7CiAKIAkJaW93cml0ZTE2KEludHJSeERvbmUgfCBJbnRyUnhFcnIgfCBJbnRyUnhFbXB0eXwgSW50clJ4T3ZlcmZsb3cgfAogCQkJICBJbnRyUnhEcm9wcGVkIHwgSW50clJ4Tm9CdWYgfCBJbnRyVHhBYm9ydGVkIHwKQEAgLTEzMTksNyArMTMyMCw3IEBACiAJCQkJICBJbnRyUENJRXJyIHwgSW50clN0YXRzTWF4IHwgSW50ckxpbmtDaGFuZ2UsCiAJCQkJICBpb2FkZHIgKyBJbnRyRW5hYmxlKTsKIAotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJnJwLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJnJwLT5uYXBpKTsKIAkJfQogCiAJCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyVHhFcnJTdW1tYXJ5IHwgSW50clR4RG9uZSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKaW5kZXggMjlhMzMwOS4uZWE0M2UxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKQEAgLTE4Myw3ICsxODMsNyBAQAogfTsKIAogZW51bSB7Ci0JUlhfSU5URU4gPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ODAwMCkKKwlSWF9JTlRFTiA9IGNwdV90b19sZTE2KDB4ODAwMCkKIH07CiAKIHN0cnVjdCByeF9kZXNjIHsKQEAgLTIxMCw3ICsyMTAsNyBAQAogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpOwogCiBlbnVtIHsKLQlURF9RVUVVRSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQorCVREX1FVRVVFID0gY3B1X3RvX2xlMTYoMHg4MDAwKQogfTsKIAogc3RydWN0IHRkX2J1ZiB7CkBAIC0yNDIsNyArMjQyLDcgQEAKIAogZW51bSAgdmVsb2NpdHlfb3duZXIgewogCU9XTkVEX0JZX0hPU1QgPSAwLAotCU9XTkVEX0JZX05JQyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHg4MDAwKQorCU9XTkVEX0JZX05JQyA9IGNwdV90b19sZTE2KDB4ODAwMCkKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IGM2ODgwODMuLmE2ZjFlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTM3LDEyICszNywxNSBAQAogI2RlZmluZSBNQVhfUEFDS0VUX0xFTiAoRVRIX0hMRU4gKyBWTEFOX0hMRU4gKyBFVEhfREFUQV9MRU4pCiAjZGVmaW5lIEdPT0RfQ09QWV9MRU4JMTI4CiAKKyNkZWZpbmUgVklSVE5FVF9TRU5EX0NPTU1BTkRfU0dfTUFYICAgIDIKKwogc3RydWN0IHZpcnRuZXRfaW5mbwogewogCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2OwotCXN0cnVjdCB2aXJ0cXVldWUgKnJ2cSwgKnN2cTsKKwlzdHJ1Y3QgdmlydHF1ZXVlICpydnEsICpzdnEsICpjdnE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCiAJLyogVGhlIHNrYiB3ZSBjb3VsZG4ndCBzZW5kIGJlY2F1c2UgYnVmZmVycyB3ZXJlIGZ1bGwuICovCiAJc3RydWN0IHNrX2J1ZmYgKmxhc3RfeG1pdF9za2I7CkBAIC0zNzUsOSArMzc4LDkgQEAKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IHJ2cS0+dmRldi0+cHJpdjsKIAkvKiBTY2hlZHVsZSBOQVBJLCBTdXBwcmVzcyBmdXJ0aGVyIGludGVycnVwdHMgaWYgc3VjY2Vzc2Z1bC4gKi8KLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CiAJCXJ2cS0+dnFfb3BzLT5kaXNhYmxlX2NiKHJ2cSk7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUoJnZpLT5uYXBpKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7CiAJfQogfQogCkBAIC00MDMsMTEgKzQwNiwxMSBAQAogCiAJLyogT3V0IG9mIHBhY2tldHM/ICovCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQlpZiAodW5saWtlbHkoIXZpLT5ydnEtPnZxX29wcy0+ZW5hYmxlX2NiKHZpLT5ydnEpKQogCQkgICAgJiYgbmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSB7CiAJCQl2aS0+cnZxLT52cV9vcHMtPmRpc2FibGVfY2IodmktPnJ2cSk7Ci0JCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5hcGkpOworCQkJX19uYXBpX3NjaGVkdWxlKG5hcGkpOwogCQkJZ290byBhZ2FpbjsKIAkJfQogCX0KQEAgLTU2Miw2ICs1NjUsMjIgQEAKIAlnb3RvIGRvbmU7CiB9CiAKK3N0YXRpYyBpbnQgdmlydG5ldF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYgPSB2aS0+dmRldjsKKwlpbnQgcmV0OworCisJcmV0ID0gZXRoX21hY19hZGRyKGRldiwgcCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXZkZXYtPmNvbmZpZy0+c2V0KHZkZXYsIG9mZnNldG9mKHN0cnVjdCB2aXJ0aW9fbmV0X2NvbmZpZywgbWFjKSwKKwkJCSAgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CisKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiBzdGF0aWMgdm9pZCB2aXJ0bmV0X25ldHBvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTU4MSwxMyArNjAwLDYwIEBACiAJICogd29uJ3QgZ2V0IGFub3RoZXIgaW50ZXJydXB0LCBzbyBwcm9jZXNzIGFueSBvdXRzdGFuZGluZyBwYWNrZXRzCiAJICogbm93LiAgdmlydG5ldF9wb2xsIHdhbnRzIHJlLWVuYWJsZSB0aGUgcXVldWUsIHNvIHdlIGRpc2FibGUgaGVyZS4KIAkgKiBXZSBzeW5jaHJvbml6ZSBhZ2FpbnN0IGludGVycnVwdHMgdmlhIE5BUElfU1RBVEVfU0NIRUQgKi8KLQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmdmktPm5hcGkpKSB7CiAJCXZpLT5ydnEtPnZxX29wcy0+ZGlzYWJsZV9jYih2aS0+cnZxKTsKLQkJX19uZXRpZl9yeF9zY2hlZHVsZSgmdmktPm5hcGkpOworCQlfX25hcGlfc2NoZWR1bGUoJnZpLT5uYXBpKTsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBTZW5kIGNvbW1hbmQgdmlhIHRoZSBjb250cm9sIHZpcnRxdWV1ZSBhbmQgY2hlY2sgc3RhdHVzLiAgQ29tbWFuZHMKKyAqIHN1cHBvcnRlZCBieSB0aGUgaHlwZXJ2aXNvciwgYXMgaW5kaWNhdGVkIGJ5IGZlYXR1cmUgYml0cywgc2hvdWxkCisgKiBuZXZlciBmYWlsIHVubGVzcyBpbXByb3Blcmx5IGZvcm1hdGVkLgorICovCitzdGF0aWMgYm9vbCB2aXJ0bmV0X3NlbmRfY29tbWFuZChzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgdTggY2xhc3MsIHU4IGNtZCwKKwkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpkYXRhLCBpbnQgb3V0LCBpbnQgaW4pCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnW1ZJUlRORVRfU0VORF9DT01NQU5EX1NHX01BWCArIDJdOworCXN0cnVjdCB2aXJ0aW9fbmV0X2N0cmxfaGRyIGN0cmw7CisJdmlydGlvX25ldF9jdHJsX2FjayBzdGF0dXMgPSB+MDsKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJaWYgKCF2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkgeworCQlCVUcoKTsgIC8qIENhbGxlciBzaG91bGQga25vdyBiZXR0ZXIgKi8KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCUJVR19PTihvdXQgKyBpbiA+IFZJUlRORVRfU0VORF9DT01NQU5EX1NHX01BWCk7CisKKwlvdXQrKzsgLyogQWRkIGhlYWRlciAqLworCWluKys7IC8qIEFkZCByZXR1cm4gc3RhdHVzICovCisKKwljdHJsLmNsYXNzID0gY2xhc3M7CisJY3RybC5jbWQgPSBjbWQ7CisKKwlzZ19pbml0X3RhYmxlKHNnLCBvdXQgKyBpbik7CisKKwlzZ19zZXRfYnVmKCZzZ1swXSwgJmN0cmwsIHNpemVvZihjdHJsKSk7CisJbWVtY3B5KCZzZ1sxXSwgZGF0YSwgc2l6ZW9mKHN0cnVjdCBzY2F0dGVybGlzdCkgKiAob3V0ICsgaW4gLSAyKSk7CisJc2dfc2V0X2J1Zigmc2dbb3V0ICsgaW4gLSAxXSwgJnN0YXR1cywgc2l6ZW9mKHN0YXR1cykpOworCisJaWYgKHZpLT5jdnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+Y3ZxLCBzZywgb3V0LCBpbiwgdmkpICE9IDApCisJCUJVRygpOworCisJdmktPmN2cS0+dnFfb3BzLT5raWNrKHZpLT5jdnEpOworCisJLyoKKwkgKiBTcGluIGZvciBhIHJlc3BvbnNlLCB0aGUga2ljayBjYXVzZXMgYW4gaW9wb3J0IHdyaXRlLCB0cmFwcGluZworCSAqIGludG8gdGhlIGh5cGVydmlzb3IsIHNvIHRoZSByZXF1ZXN0IHNob3VsZCBiZSBoYW5kbGVkIGltbWVkaWF0ZWx5LgorCSAqLworCXdoaWxlICghdmktPmN2cS0+dnFfb3BzLT5nZXRfYnVmKHZpLT5jdnEsICZ0bXApKQorCQljcHVfcmVsYXgoKTsKKworCXJldHVybiBzdGF0dXMgPT0gVklSVElPX05FVF9PSzsKK30KKwogc3RhdGljIGludCB2aXJ0bmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNjA4LDEwICs2NzQsMTA0IEBACiAJcmV0dXJuIGV0aHRvb2xfb3Bfc2V0X3R4X2h3X2NzdW0oZGV2LCBkYXRhKTsKIH0KIAorc3RhdGljIHZvaWQgdmlydG5ldF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07CisJdTggcHJvbWlzYywgYWxsbXVsdGk7CisJc3RydWN0IHZpcnRpb19uZXRfY3RybF9tYWMgKm1hY19kYXRhOworCXN0cnVjdCBkZXZfYWRkcl9saXN0ICphZGRyOworCXZvaWQgKmJ1ZjsKKwlpbnQgaTsKKworCS8qIFdlIGNhbid0IGR5bmFtaWNhbHkgc2V0IG5kb19zZXRfcnhfbW9kZSwgc28gcmV0dXJuIGdyYWNlZnVsbHkgKi8KKwlpZiAoIXZpcnRpb19oYXNfZmVhdHVyZSh2aS0+dmRldiwgVklSVElPX05FVF9GX0NUUkxfUlgpKQorCQlyZXR1cm47CisKKwlwcm9taXNjID0gKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICE9IDApOworCWFsbG11bHRpID0gKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAhPSAwKTsKKworCXNnX3NldF9idWYoc2csICZwcm9taXNjLCBzaXplb2YocHJvbWlzYykpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX1JYLAorCQkJCSAgVklSVElPX05FVF9DVFJMX1JYX1BST01JU0MsCisJCQkJICBzZywgMSwgMCkpCisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byAlc2FibGUgcHJvbWlzYyBtb2RlLlxuIiwKKwkJCSBwcm9taXNjID8gImVuIiA6ICJkaXMiKTsKKworCXNnX3NldF9idWYoc2csICZhbGxtdWx0aSwgc2l6ZW9mKGFsbG11bHRpKSk7CisKKwlpZiAoIXZpcnRuZXRfc2VuZF9jb21tYW5kKHZpLCBWSVJUSU9fTkVUX0NUUkxfUlgsCisJCQkJICBWSVJUSU9fTkVUX0NUUkxfUlhfQUxMTVVMVEksCisJCQkJICBzZywgMSwgMCkpCisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byAlc2FibGUgYWxsbXVsdGkgbW9kZS5cbiIsCisJCQkgYWxsbXVsdGkgPyAiZW4iIDogImRpcyIpOworCisJLyogTUFDIGZpbHRlciAtIHVzZSBvbmUgYnVmZmVyIGZvciBib3RoIGxpc3RzICovCisJbWFjX2RhdGEgPSBidWYgPSBremFsbG9jKCgoZGV2LT51Y19jb3VudCArIGRldi0+bWNfY291bnQpICogRVRIX0FMRU4pICsKKwkJCQkgKDIgKiBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFidWYpIHsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBNQUMgYWRkcmVzcyBidWZmZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogU3RvcmUgdGhlIHVuaWNhc3QgbGlzdCBhbmQgY291bnQgaW4gdGhlIGZyb250IG9mIHRoZSBidWZmZXIgKi8KKwltYWNfZGF0YS0+ZW50cmllcyA9IGRldi0+dWNfY291bnQ7CisJYWRkciA9IGRldi0+dWNfbGlzdDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT51Y19jb3VudDsgaSsrLCBhZGRyID0gYWRkci0+bmV4dCkKKwkJbWVtY3B5KCZtYWNfZGF0YS0+bWFjc1tpXVswXSwgYWRkci0+ZGFfYWRkciwgRVRIX0FMRU4pOworCisJc2dfc2V0X2J1Zigmc2dbMF0sIG1hY19kYXRhLAorCQkgICBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpICsgKGRldi0+dWNfY291bnQgKiBFVEhfQUxFTikpOworCisJLyogbXVsdGljYXN0IGxpc3QgYW5kIGNvdW50IGZpbGwgdGhlIGVuZCAqLworCW1hY19kYXRhID0gKHZvaWQgKikmbWFjX2RhdGEtPm1hY3NbZGV2LT51Y19jb3VudF1bMF07CisKKwltYWNfZGF0YS0+ZW50cmllcyA9IGRldi0+bWNfY291bnQ7CisJYWRkciA9IGRldi0+bWNfbGlzdDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrLCBhZGRyID0gYWRkci0+bmV4dCkKKwkJbWVtY3B5KCZtYWNfZGF0YS0+bWFjc1tpXVswXSwgYWRkci0+ZGFfYWRkciwgRVRIX0FMRU4pOworCisJc2dfc2V0X2J1Zigmc2dbMV0sIG1hY19kYXRhLAorCQkgICBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpICsgKGRldi0+bWNfY291bnQgKiBFVEhfQUxFTikpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX01BQywKKwkJCQkgIFZJUlRJT19ORVRfQ1RSTF9NQUNfVEFCTEVfU0VULAorCQkJCSAgc2csIDIsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gc2V0IE1BQyBmaXRsZXIgdGFibGUuXG4iKTsKKworCWtmcmVlKGJ1Zik7Cit9CisKK3N0YXRpYyB2b2lkIHZpcm5ldF92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCkKK3sKKwlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOworCisJc2dfc2V0X2J1Zigmc2csICZ2aWQsIHNpemVvZih2aWQpKTsKKworCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9WTEFOLAorCQkJCSAgVklSVElPX05FVF9DVFJMX1ZMQU5fQURELCAmc2csIDEsIDApKQorCQlkZXZfd2FybigmZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIFZMQU4gSUQgJWQuXG4iLCB2aWQpOworfQorCitzdGF0aWMgdm9pZCB2aXJuZXRfdmxhbl9yeF9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwlzZ19zZXRfYnVmKCZzZywgJnZpZCwgc2l6ZW9mKHZpZCkpOworCisJaWYgKCF2aXJ0bmV0X3NlbmRfY29tbWFuZCh2aSwgVklSVElPX05FVF9DVFJMX1ZMQU4sCisJCQkJICBWSVJUSU9fTkVUX0NUUkxfVkxBTl9ERUwsICZzZywgMSwgMCkpCisJCWRldl93YXJuKCZkZXYtPmRldiwgIkZhaWxlZCB0byBraWxsIFZMQU4gSUQgJWQuXG4iLCB2aWQpOworfQorCiBzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHZpcnRuZXRfZXRodG9vbF9vcHMgPSB7CiAJLnNldF90eF9jc3VtID0gdmlydG5ldF9zZXRfdHhfY3N1bSwKIAkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAJLnNldF90c28gPSBldGh0b29sX29wX3NldF90c28sCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKIH07CiAKICNkZWZpbmUgTUlOX01UVSA2OApAQCAtNjMwLDEzICs3OTAsNTEgQEAKIAkubmRvX3N0b3AgICAJICAgICA9IHZpcnRuZXRfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0ICAgICAgPSBzdGFydF94bWl0LAogCS5uZG9fdmFsaWRhdGVfYWRkciAgID0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSB2aXJ0bmV0X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9yeF9tb2RlICAgICA9IHZpcnRuZXRfc2V0X3J4X21vZGUsCiAJLm5kb19jaGFuZ2VfbXR1CSAgICAgPSB2aXJ0bmV0X2NoYW5nZV9tdHUsCisJLm5kb192bGFuX3J4X2FkZF92aWQgPSB2aXJuZXRfdmxhbl9yeF9hZGRfdmlkLAorCS5uZG9fdmxhbl9yeF9raWxsX3ZpZCA9IHZpcm5ldF92bGFuX3J4X2tpbGxfdmlkLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIgPSB2aXJ0bmV0X25ldHBvbGwsCiAjZW5kaWYKIH07CiAKK3N0YXRpYyB2b2lkIHZpcnRuZXRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSkKK3sKKwl1MTYgdjsKKworCWlmICghdmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfU1RBVFVTKSkKKwkJcmV0dXJuOworCisJdmktPnZkZXYtPmNvbmZpZy0+Z2V0KHZpLT52ZGV2LAorCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLCBzdGF0dXMpLAorCQkJICAgICAgJnYsIHNpemVvZih2KSk7CisKKwkvKiBJZ25vcmUgdW5rbm93biAoZnV0dXJlKSBzdGF0dXMgYml0cyAqLworCXYgJj0gVklSVElPX05FVF9TX0xJTktfVVA7CisKKwlpZiAodmktPnN0YXR1cyA9PSB2KQorCQlyZXR1cm47CisKKwl2aS0+c3RhdHVzID0gdjsKKworCWlmICh2aS0+c3RhdHVzICYgVklSVElPX05FVF9TX0xJTktfVVApIHsKKwkJbmV0aWZfY2Fycmllcl9vbih2aS0+ZGV2KTsKKwkJbmV0aWZfd2FrZV9xdWV1ZSh2aS0+ZGV2KTsKKwl9IGVsc2UgeworCQluZXRpZl9jYXJyaWVyX29mZih2aS0+ZGV2KTsKKwkJbmV0aWZfc3RvcF9xdWV1ZSh2aS0+ZGV2KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRuZXRfY29uZmlnX2NoYW5nZWQoc3RydWN0IHZpcnRpb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSB2ZGV2LT5wcml2OworCisJdmlydG5ldF91cGRhdGVfc3RhdHVzKHZpKTsKK30KKwogc3RhdGljIGludCB2aXJ0bmV0X3Byb2JlKHN0cnVjdCB2aXJ0aW9fZGV2aWNlICp2ZGV2KQogewogCWludCBlcnI7CkBAIC02NzgsOCArODc2LDExIEBACiAJCXZkZXYtPmNvbmZpZy0+Z2V0KHZkZXYsCiAJCQkJICBvZmZzZXRvZihzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcsIG1hYyksCiAJCQkJICBkZXYtPmRldl9hZGRyLCBkZXYtPmFkZHJfbGVuKTsKLQl9IGVsc2UKKwl9IGVsc2UgewogCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKKwkJdmRldi0+Y29uZmlnLT5zZXQodmRldiwgb2Zmc2V0b2Yoc3RydWN0IHZpcnRpb19uZXRfY29uZmlnLCBtYWMpLAorCQkJCSAgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CisJfQogCiAJLyogU2V0IHVwIG91ciBkZXZpY2Utc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KIAl2aSA9IG5ldGRldl9wcml2KGRldik7CkBAIC03MTUsNiArOTE2LDE3IEBACiAJCWdvdG8gZnJlZV9yZWN2OwogCX0KIAorCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkgeworCQl2aS0+Y3ZxID0gdmRldi0+Y29uZmlnLT5maW5kX3ZxKHZkZXYsIDIsIE5VTEwpOworCQlpZiAoSVNfRVJSKHZpLT5jdnEpKSB7CisJCQllcnIgPSBQVFJfRVJSKHZpLT5zdnEpOworCQkJZ290byBmcmVlX3NlbmQ7CisJCX0KKworCQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZpLT52ZGV2LCBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOKSkKKwkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKKwl9CisKIAkvKiBJbml0aWFsaXplIG91ciBlbXB0eSByZWNlaXZlIGFuZCBzZW5kIHF1ZXVlcy4gKi8KIAlza2JfcXVldWVfaGVhZF9pbml0KCZ2aS0+cmVjdik7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdmktPnNlbmQpOwpAQCAtNzI3LDcgKzkzOSw3IEBACiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewogCQlwcl9kZWJ1ZygidmlydGlvX25ldDogcmVnaXN0ZXJpbmcgZGV2aWNlIGZhaWxlZFxuIik7Ci0JCWdvdG8gZnJlZV9zZW5kOworCQlnb3RvIGZyZWVfY3RybDsKIAl9CiAKIAkvKiBMYXN0IG9mIGFsbCwgc2V0IHVwIHNvbWUgcmVjZWl2ZSBidWZmZXJzLiAqLwpAQCAtNzM5LDExICs5NTEsMTggQEAKIAkJZ290byB1bnJlZ2lzdGVyOwogCX0KIAorCXZpLT5zdGF0dXMgPSBWSVJUSU9fTkVUX1NfTElOS19VUDsKKwl2aXJ0bmV0X3VwZGF0ZV9zdGF0dXModmkpOworCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKKwogCXByX2RlYnVnKCJ2aXJ0bmV0OiByZWdpc3RlcmVkIGRldmljZSAlc1xuIiwgZGV2LT5uYW1lKTsKIAlyZXR1cm4gMDsKIAogdW5yZWdpc3RlcjoKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworZnJlZV9jdHJsOgorCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkKKwkJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPmN2cSk7CiBmcmVlX3NlbmQ6CiAJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPnN2cSk7CiBmcmVlX3JlY3Y6CkBAIC03NzUsNiArOTk0LDggQEAKIAogCXZkZXYtPmNvbmZpZy0+ZGVsX3ZxKHZpLT5zdnEpOwogCXZkZXYtPmNvbmZpZy0+ZGVsX3ZxKHZpLT5ydnEpOworCWlmICh2aXJ0aW9faGFzX2ZlYXR1cmUodmktPnZkZXYsIFZJUlRJT19ORVRfRl9DVFJMX1ZRKSkKKwkJdmRldi0+Y29uZmlnLT5kZWxfdnEodmktPmN2cSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYodmktPmRldik7CiAKIAl3aGlsZSAodmktPnBhZ2VzKQpAQCAtNzk0LDcgKzEwMTUsOCBAQAogCVZJUlRJT19ORVRfRl9IT1NUX1RTTzQsIFZJUlRJT19ORVRfRl9IT1NUX1VGTywgVklSVElPX05FVF9GX0hPU1RfVFNPNiwKIAlWSVJUSU9fTkVUX0ZfSE9TVF9FQ04sIFZJUlRJT19ORVRfRl9HVUVTVF9UU080LCBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNiwKIAlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOLCAvKiBXZSBkb24ndCB5ZXQgaGFuZGxlIFVGTyBpbnB1dC4gKi8KLQlWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGLAorCVZJUlRJT19ORVRfRl9NUkdfUlhCVUYsIFZJUlRJT19ORVRfRl9TVEFUVVMsIFZJUlRJT19ORVRfRl9DVFJMX1ZRLAorCVZJUlRJT19ORVRfRl9DVFJMX1JYLCBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOLAogCVZJUlRJT19GX05PVElGWV9PTl9FTVBUWSwKIH07CiAKQEAgLTgwNiw2ICsxMDI4LDcgQEAKIAkuaWRfdGFibGUgPQlpZF90YWJsZSwKIAkucHJvYmUgPQl2aXJ0bmV0X3Byb2JlLAogCS5yZW1vdmUgPQlfX2RldmV4aXRfcCh2aXJ0bmV0X3JlbW92ZSksCisJLmNvbmZpZ19jaGFuZ2VkID0gdmlydG5ldF9jb25maWdfY2hhbmdlZCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMgYi9kcml2ZXJzL25ldC93YW4vYzEwMS5jCmluZGV4IGI0Njg5NzkuLjk2OTNiMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2MxMDEuYwpAQCAtMjk2LDcgKzI5NiwxMyBAQAogCWtmcmVlKGNhcmQpOwogfQogCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYzEwMV9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gYzEwMV9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGMxMDFfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBjMTAxX2lvY3RsLAorfTsKIAogc3RhdGljIGludCBfX2luaXQgYzEwMV9ydW4odW5zaWduZWQgbG9uZyBpcnEsIHVuc2lnbmVkIGxvbmcgd2luYmFzZSkKIHsKQEAgLTM2Nyw5ICszNzMsNyBAQAogCWRldi0+bWVtX3N0YXJ0ID0gd2luYmFzZTsKIAlkZXYtPm1lbV9lbmQgPSB3aW5iYXNlICsgQzEwMV9NQVBQRURfUkFNX1NJWkUgLSAxOwogCWRldi0+dHhfcXVldWVfbGVuID0gNTA7Ci0JZGV2LT5kb19pb2N0bCA9IGMxMDFfaW9jdGw7Ci0JZGV2LT5vcGVuID0gYzEwMV9vcGVuOwotCWRldi0+c3RvcCA9IGMxMDFfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzID0gJmMxMDFfb3BzOwogCWhkbGMtPmF0dGFjaCA9IHNjYV9hdHRhY2g7CiAJaGRsYy0+eG1pdCA9IHNjYV94bWl0OwogCWNhcmQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY29zYS5jIGIvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYwppbmRleCBkODBiNzJlLi42MTU4MWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY29zYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKQEAgLTQyNyw2ICs0MjcsMTUgQEAKIH0KIG1vZHVsZV9leGl0KGNvc2FfZXhpdCk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgY29zYV9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gY29zYV9uZXRfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBjb3NhX25ldF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGNvc2FfbmV0X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGNvc2FfbmV0X3RpbWVvdXQsCit9OworCiBzdGF0aWMgaW50IGNvc2FfcHJvYmUoaW50IGJhc2UsIGludCBpcnEsIGludCBkbWEpCiB7CiAJc3RydWN0IGNvc2FfZGF0YSAqY29zYSA9IGNvc2FfY2FyZHMrbnJfY2FyZHM7CkBAIC01NzUsMTAgKzU4NCw3IEBACiAJCX0KIAkJZGV2X3RvX2hkbGMoY2hhbi0+bmV0ZGV2KS0+YXR0YWNoID0gY29zYV9uZXRfYXR0YWNoOwogCQlkZXZfdG9faGRsYyhjaGFuLT5uZXRkZXYpLT54bWl0ID0gY29zYV9uZXRfdHg7Ci0JCWNoYW4tPm5ldGRldi0+b3BlbiA9IGNvc2FfbmV0X29wZW47Ci0JCWNoYW4tPm5ldGRldi0+c3RvcCA9IGNvc2FfbmV0X2Nsb3NlOwotCQljaGFuLT5uZXRkZXYtPmRvX2lvY3RsID0gY29zYV9uZXRfaW9jdGw7Ci0JCWNoYW4tPm5ldGRldi0+dHhfdGltZW91dCA9IGNvc2FfbmV0X3RpbWVvdXQ7CisJCWNoYW4tPm5ldGRldi0+bmV0ZGV2X29wcyA9ICZjb3NhX29wczsKIAkJY2hhbi0+bmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJCWNoYW4tPm5ldGRldi0+YmFzZV9hZGRyID0gY2hhbi0+Y29zYS0+ZGF0YXJlZzsKIAkJY2hhbi0+bmV0ZGV2LT5pcnEgPSBjaGFuLT5jb3NhLT5pcnE7CkBAIC03MjUsOCArNzMxLDcgQEAKIAkgKiBXZSBjYW4gc2FmZWx5IGZhbGwgYmFjayB0byBub24tZG1hLWFibGUgbWVtb3J5LCBiZWNhdXNlIHdlIGhhdmUKIAkgKiB0aGUgY29zYS0+Ym91bmNlYnVmIHByZS1hbGxvY2F0ZWQuCiAJICovCi0JaWYgKGNoYW4tPnJ4X3NrYikKLQkJa2ZyZWVfc2tiKGNoYW4tPnJ4X3NrYik7CisJa2ZyZWVfc2tiKGNoYW4tPnJ4X3NrYik7CiAJY2hhbi0+cnhfc2tiID0gZGV2X2FsbG9jX3NrYihzaXplKTsKIAlpZiAoY2hhbi0+cnhfc2tiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldFxuIiwKQEAgLTk5Myw4ICs5OTgsOCBAQAogc3RhdGljIGludCBjb3NhX2Zhc3luYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewogICAgICAgICBpbnQgcG9ydCA9IGltaW5vcihpbm9kZSk7Ci0gICAgICAgIGludCBydiA9IGZhc3luY19oZWxwZXIoaW5vZGUsIGZpbGUsIG9uLCAmZmFzeW5jW3BvcnRdKTsKLSAgICAgICAgcmV0dXJuIHJ2IDwgMCA/IHJ2IDogMDsKKworCXJldHVybiBmYXN5bmNfaGVscGVyKGlub2RlLCBmaWxlLCBvbiwgJmZhc3luY1twb3J0XSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2N5Y3hfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwppbmRleCA1ZmE1MjkyLi4zNWRlYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vY3ljeF94MjUuYwpAQCAtMzU1LDEyICszNTUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBjYWxsYmFjayB0byBpbml0aWFsaXplIGRldmljZSAqLwotc3RhdGljIHZvaWQgY3ljeF94MjVfY2hhbl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWRldi0+aW5pdCA9IGN5Y3hfbmV0ZGV2aWNlX2luaXQ7Ci19Ci0KIC8qIENyZWF0ZSBuZXcgbG9naWNhbCBjaGFubmVsLgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gUk9VVEVSX0lGTkVXIElPQ1RMIGlzIGJlaW5nCiAgKiBoYW5kbGVkLgpAQCAtNDc2LDYgKzQ3MCwyNyBAQAogCS5yZWJ1aWxkID0gY3ljeF9uZXRkZXZpY2VfcmVidWlsZF9oZWFkZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGN5Y3hfbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJPSBjeWN4X25ldGRldmljZV9pbml0LAorCS5uZG9fb3Blbgk9IGN5Y3hfbmV0ZGV2aWNlX29wZW4sCisJLm5kb19zdG9wCT0gY3ljeF9uZXRkZXZpY2Vfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJPSBjeWN4X25ldGRldmljZV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJPSBjeWN4X25ldGRldmljZV9nZXRfc3RhdHMsCit9OworCitzdGF0aWMgdm9pZCBjeWN4X3gyNV9jaGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJLyogSW5pdGlhbGl6ZSBkZXZpY2UgZHJpdmVyIGVudHJ5IHBvaW50cyAqLworCWRldi0+bmV0ZGV2X29wcwkJPSAmY3ljeF9uZXRkZXZfb3BzOworCWRldi0+aGVhZGVyX29wcwkJPSAmY3ljeF9oZWFkZXJfb3BzOworCisJLyogSW5pdGlhbGl6ZSBtZWRpYS1zcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJZGV2LT5tdHUJCT0gQ1lDWF9YMjVfQ0hBTl9NVFU7CisJZGV2LT50eXBlCQk9IEFSUEhSRF9IV1gyNTsJLyogQVJQIGgvdyB0eXBlICovCisJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOwkJLyogbWVkaWEgaGVhZGVyIGxlbmd0aCAqLworCWRldi0+YWRkcl9sZW4JCT0gMDsJCS8qIGhhcmR3YXJlIGFkZHJlc3MgbGVuZ3RoICovCit9CisKIC8qIEluaXRpYWxpemUgTGludXggbmV0d29yayBpbnRlcmZhY2UuCiAgKgogICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvbmx5IG9uY2UgZm9yIGVhY2ggaW50ZXJmYWNlLCBkdXJpbmcgTGludXggbmV0d29yawpAQCAtNDg3LDIwICs1MDIsNiBAQAogCXN0cnVjdCBjeWN4X2RldmljZSAqY2FyZCA9IGNoYW4tPmNhcmQ7CiAJc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiA9ICZjYXJkLT53YW5kZXY7CiAKLQkvKiBJbml0aWFsaXplIGRldmljZSBkcml2ZXIgZW50cnkgcG9pbnRzICovCi0JZGV2LT5vcGVuCQk9IGN5Y3hfbmV0ZGV2aWNlX29wZW47Ci0JZGV2LT5zdG9wCQk9IGN5Y3hfbmV0ZGV2aWNlX3N0b3A7Ci0JZGV2LT5oZWFkZXJfb3BzCQk9ICZjeWN4X2hlYWRlcl9vcHM7Ci0KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGN5Y3hfbmV0ZGV2aWNlX2hhcmRfc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cwkJPSBjeWN4X25ldGRldmljZV9nZXRfc3RhdHM7Ci0KLQkvKiBJbml0aWFsaXplIG1lZGlhLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KLQlkZXYtPm10dQkJPSBDWUNYX1gyNV9DSEFOX01UVTsKLQlkZXYtPnR5cGUJCT0gQVJQSFJEX0hXWDI1OwkvKiBBUlAgaC93IHR5cGUgKi8KLQlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IDA7CQkvKiBtZWRpYSBoZWFkZXIgbGVuZ3RoICovCi0JZGV2LT5hZGRyX2xlbgkJPSAwOwkJLyogaGFyZHdhcmUgYWRkcmVzcyBsZW5ndGggKi8KLQogCWlmICghY2hhbi0+c3ZjKQogCQkqKF9fYmUxNiopZGV2LT5kZXZfYWRkciA9IGh0b25zKGNoYW4tPmxjbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMgYi9kcml2ZXJzL25ldC93YW4vZGxjaS5jCmluZGV4IGEyOTdlM2UuLmU4ZDE1NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RsY2kuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBpbnZhbGlkIGRhdGEgbm8gaGVhZGVyXG4iLAogCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybjsKIAl9CkBAIC0xMjcsNyArMTI3LDcgQEAKIAlpZiAoaGRyLT5jb250cm9sICE9IEZSQURfSV9VSSkKIAl7CiAJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludmFsaWQgaGVhZGVyIGZsYWcgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPmNvbnRyb2wpOwotCQlkbHAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCX0KIAllbHNlCiAJCXN3aXRjaChoZHItPklQX05MUElEKQpAQCAtMTM2LDE0ICsxMzYsMTQgQEAKIAkJCQlpZiAoaGRyLT5OTFBJRCAhPSBGUkFEX1BfU05BUCkKIAkJCQl7CiAJCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFVuc3VwcG9ydGVkIE5MUElEIDB4JTAyWC5cbiIsIGRldi0+bmFtZSwgaGRyLT5OTFBJRCk7Ci0JCQkJCWRscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkgCiAJCQkJaWYgKGhkci0+T1VJWzBdICsgaGRyLT5PVUlbMV0gKyBoZHItPk9VSVsyXSAhPSAwKQogCQkJCXsKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5zdXBwb3J0ZWQgb3JnYW5pemF0aW9uYWxseSB1bmlxdWUgaWRlbnRpZmllciAweCUwMlgtJTAyWC0lMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPk9VSVswXSwgaGRyLT5PVUlbMV0sIGhkci0+T1VJWzJdKTsKLQkJCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCkBAIC0xNjQsMTIgKzE2NCwxMiBAQAogCQkJY2FzZSBGUkFEX1BfUTkzMzoKIAkJCWNhc2UgRlJBRF9QX0NMTlA6CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVW5zdXBwb3J0ZWQgTkxQSUQgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPnBhZCk7Ci0JCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IEludmFsaWQgcGFkIGJ5dGUgMHglMDJYLlxuIiwgZGV2LT5uYW1lLCBoZHItPnBhZCk7Ci0JCQkJZGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCWJyZWFrOwkJCQkKIAkJfQogCkBAIC0xNzgsOSArMTc4LDkgQEAKIAkJLyogd2UndmUgc2V0IHVwIHRoZSBwcm90b2NvbCwgc28gZGlzY2FyZCB0aGUgaGVhZGVyICovCiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJCXNrYl9wdWxsKHNrYiwgaGVhZGVyKTsKLQkJZGxwLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKLQkJZGxwLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCX0KIAllbHNlCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTIwMCwxOSArMjAwLDE5IEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCi0JcmV0ID0gZGxwLT5zbGF2ZS0+aGFyZF9zdGFydF94bWl0KHNrYiwgZGxwLT5zbGF2ZSk7CisJcmV0ID0gZGxwLT5zbGF2ZS0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBkbHAtPnNsYXZlKTsKIAlzd2l0Y2ggKHJldCkKIAl7CiAJCWNhc2UgRExDSV9SRVRfT0s6Ci0JCQlkbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCQkJY2FzZSBETENJX1JFVF9FUlI6Ci0JCQlkbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAkJCWNhc2UgRExDSV9SRVRfRFJPUDoKLQkJCWRscC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlyZXQgPSAxOwogCQkJYnJlYWs7CiAJfQpAQCAtMjk1LDExICsyOTUsOSBAQAogCiBzdGF0aWMgaW50IGRsY2lfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKLQlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwOworCXN0cnVjdCBkbGNpX2xvY2FsICpkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigoKmRscC0+c2xhdmUtPmNoYW5nZV9tdHUpKGRscC0+c2xhdmUsIG5ld19tdHUpKTsKKwlyZXR1cm4gZGV2X3NldF9tdHUoZGxwLT5zbGF2ZSwgbmV3X210dSk7CiB9CiAKIHN0YXRpYyBpbnQgZGxjaV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zNDIsMTUgKzM0MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZGxjaV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZGxjaV9sb2NhbCAqZGxwOwotCi0JZGxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigmZGxwLT5zdGF0cyk7Ci19Ci0KIHN0YXRpYyBpbnQgZGxjaV9hZGQoc3RydWN0IGRsY2lfYWRkICpkbGNpKQogewogCXN0cnVjdCBuZXRfZGV2aWNlCSptYXN0ZXIsICpzbGF2ZTsKQEAgLTQ4OCwxOCArNDc3LDIxIEBACiAJLmNyZWF0ZQk9IGRsY2lfaGVhZGVyLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBkbGNpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0gZGxjaV9vcGVuLAorCS5uZG9fc3RvcAk9IGRsY2lfY2xvc2UsCisJLm5kb19kb19pb2N0bAk9IGRsY2lfZGV2X2lvY3RsLAorCS5uZG9fc3RhcnRfeG1pdAk9IGRsY2lfdHJhbnNtaXQsCisJLm5kb19jaGFuZ2VfbXR1CT0gZGxjaV9jaGFuZ2VfbXR1LAorfTsKKwogc3RhdGljIHZvaWQgZGxjaV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkbGNpX2xvY2FsICpkbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJZGV2LT5mbGFncwkJPSAwOwotCWRldi0+b3BlbgkJPSBkbGNpX29wZW47Ci0JZGV2LT5zdG9wCQk9IGRsY2lfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bAkJPSBkbGNpX2Rldl9pb2N0bDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGRsY2lfdHJhbnNtaXQ7CiAJZGV2LT5oZWFkZXJfb3BzCQk9ICZkbGNpX2hlYWRlcl9vcHM7Ci0JZGV2LT5nZXRfc3RhdHMJCT0gZGxjaV9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IGRsY2lfY2hhbmdlX210dTsKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmRsY2lfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7CiAKIAlkbHAtPnJlY2VpdmUJCT0gZGxjaV9yZWNlaXZlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwppbmRleCA4ODgwMjVkLi44ZmFjZTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZHNjYzQuYworKysgYi9kcml2ZXJzL25ldC93YW4vZHNjYzQuYwpAQCAtODgzLDYgKzg4MywxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZHNjYzRfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGRzY2M0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gZHNjYzRfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBkc2NjNF9pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBkc2NjNF90eF90aW1lb3V0LAorfTsKKwogc3RhdGljIGludCBkc2NjNF9mb3VuZDEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgX19pb21lbSAqaW9hZGRyKQogewogCXN0cnVjdCBkc2NjNF9wY2lfcHJpdiAqcHByaXY7CkBAIC05MTYsMTMgKzkyNSw4IEBACiAJCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZCk7CiAKIAkgICAgICAgIGQtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvYWRkcjsKLQkJZC0+aW5pdCA9IE5VTEw7CiAJICAgICAgICBkLT5pcnEgPSBwZGV2LT5pcnE7Ci0JICAgICAgICBkLT5vcGVuID0gZHNjYzRfb3BlbjsKLQkgICAgICAgIGQtPnN0b3AgPSBkc2NjNF9jbG9zZTsKLQkJZC0+c2V0X211bHRpY2FzdF9saXN0ID0gTlVMTDsKLQkgICAgICAgIGQtPmRvX2lvY3RsID0gZHNjYzRfaW9jdGw7Ci0JCWQtPnR4X3RpbWVvdXQgPSBkc2NjNF90eF90aW1lb3V0OworCQlkLT5uZXRkZXZfb3BzID0gJmRzY2M0X29wczsKIAkJZC0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCQlTRVRfTkVUREVWX0RFVihkLCAmcGRldi0+ZGV2KTsKIApAQCAtMTA0OCw3ICsxMDUyLDcgQEAKIAlzdHJ1Y3QgZHNjYzRfcGNpX3ByaXYgKnBwcml2OwogCWludCByZXQgPSAtRUFHQUlOOwogCi0JaWYgKChkc2NjNF9sb29wYmFja19jaGVjayhkcHJpdikgPCAwKSB8fCAhZGV2LT5oYXJkX3N0YXJ0X3htaXQpCisJaWYgKChkc2NjNF9sb29wYmFja19jaGVjayhkcHJpdikgPCAwKSkKIAkJZ290byBlcnI7CiAKIAlpZiAoKHJldCA9IGhkbGNfb3BlbihkZXYpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCmluZGV4IDQ4YTJjOWQuLjAwOTQ1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYwpAQCAtMjQyNCw2ICsyNDI0LDE1IEBACiAJICAgICAgIHR5cGVfc3RyaW5nc1tjYXJkLT50eXBlXSwgY2FyZC0+aXJxLCBjYXJkLT5ucG9ydHMpOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGZzdF9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gZnN0X29wZW4sCisJLm5kb19zdG9wICAgICAgID0gZnN0X2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gZnN0X2lvY3RsLAorCS5uZG9fdHhfdGltZW91dCA9IGZzdF90eF90aW1lb3V0LAorfTsKKwogLyoKICAqICAgICAgSW5pdGlhbGlzZSBjYXJkIHdoZW4gZGV0ZWN0ZWQuCiAgKiAgICAgIFJldHVybnMgMCB0byBpbmRpY2F0ZSBzdWNjZXNzLCBvciBlcnJubyBvdGhlcndpc2UuCkBAIC0yNTY1LDEyICsyNTc0LDkgQEAKICAgICAgICAgICAgICAgICBkZXYtPmJhc2VfYWRkciAgID0gY2FyZC0+cGNpX2NvbmY7CiAgICAgICAgICAgICAgICAgZGV2LT5pcnEgICAgICAgICA9IGNhcmQtPmlycTsKIAotICAgICAgICAgICAgICAgIGRldi0+dHhfcXVldWVfbGVuICAgICAgICAgID0gRlNUX1RYX1FVRVVFX0xFTjsKLSAgICAgICAgICAgICAgICBkZXYtPm9wZW4gICAgICAgICAgICAgICAgICA9IGZzdF9vcGVuOwotICAgICAgICAgICAgICAgIGRldi0+c3RvcCAgICAgICAgICAgICAgICAgID0gZnN0X2Nsb3NlOwotICAgICAgICAgICAgICAgIGRldi0+ZG9faW9jdGwgICAgICAgICAgICAgID0gZnN0X2lvY3RsOwotICAgICAgICAgICAgICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gICAgICAgID0gRlNUX1RYX1RJTUVPVVQ7Ci0gICAgICAgICAgICAgICAgZGV2LT50eF90aW1lb3V0ICAgICAgICAgICAgPSBmc3RfdHhfdGltZW91dDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmZzdF9vcHM7CisJCWRldi0+dHhfcXVldWVfbGVuID0gRlNUX1RYX1FVRVVFX0xFTjsKKwkJZGV2LT53YXRjaGRvZ190aW1lbyA9IEZTVF9UWF9USU1FT1VUOwogICAgICAgICAgICAgICAgIGhkbGMtPmF0dGFjaCA9IGZzdF9hdHRhY2g7CiAgICAgICAgICAgICAgICAgaGRsYy0+eG1pdCAgID0gZnN0X3N0YXJ0X3htaXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZDY0NTcyLmMKaW5kZXggMDhiMzUzNi4uNDk3YjAwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkNjQ1NzIuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGQ2NDU3Mi5jCkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJcmVjZWl2ZWQgPSBzY2FfcnhfZG9uZShwb3J0LCBidWRnZXQpOwogCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7Ci0JCW5ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQllbmFibGVfaW50cihwb3J0KTsKIAl9CiAKQEAgLTM1OSw3ICszNTksNyBAQAogCQlpZiAocG9ydCAmJiAoaXNyMCAmIChpID8gMHgwODAwMjIwMCA6IDB4MDAwODAwMjIpKSkgewogCQkJaGFuZGxlZCA9IDE7CiAJCQlkaXNhYmxlX2ludHIocG9ydCk7Ci0JCQluZXRpZl9yeF9zY2hlZHVsZSgmcG9ydC0+bmFwaSk7CisJCQluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKaW5kZXggMWYyYTE0MC4uNzU5NmVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCkBAIC00NCw3ICs0NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byAqZmlyc3RfcHJvdG87CiAKLXN0YXRpYyBpbnQgaGRsY19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoraW50IGhkbGNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBIRExDX01BWF9NVFUpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTUyLDE1ICs1Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmhkbGNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICZkZXYtPnN0YXRzOwotfQotCi0KLQogc3RhdGljIGludCBoZGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IHBhY2tldF90eXBlICpwLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7CkBAIC03NSw3ICs2NiwxNSBAQAogCXJldHVybiBoZGxjLT5wcm90by0+bmV0aWZfcngoc2tiKTsKIH0KIAoraW50IGhkbGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIAorCWlmIChoZGxjLT5wcm90by0+eG1pdCkKKwkJcmV0dXJuIGhkbGMtPnByb3RvLT54bWl0KHNrYiwgZGV2KTsKKworCXJldHVybiBoZGxjLT54bWl0KHNrYiwgZGV2KTsgLyogY2FsbCBoYXJkd2FyZSBkcml2ZXIgZGlyZWN0bHkgKi8KK30KIAogc3RhdGljIGlubGluZSB2b2lkIGhkbGNfcHJvdG9fc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEwMiwxMSArMTAxLDExIEBACiAJaGRsY19kZXZpY2UgKmhkbGM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgb247Ci0gCisKIAlpZiAoZGV2X25ldChkZXYpICE9ICZpbml0X25ldCkKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCi0JaWYgKGRldi0+Z2V0X3N0YXRzICE9IGhkbGNfZ2V0X3N0YXRzKQorCWlmICghKGRldi0+cHJpdl9mbGFncyAmIElGRl9XQU5fSERMQykpCiAJCXJldHVybiBOT1RJRllfRE9ORTsgLyogbm90IGFuIEhETEMgZGV2aWNlICovCiAKIAlpZiAoZXZlbnQgIT0gTkVUREVWX0NIQU5HRSkKQEAgLTIzMywxNSArMjMyLDEzIEBACiAJLyogUmUtaW5pdCBhbGwgdmFyaWFibGVzIGNoYW5nZWQgYnkgSERMQyBwcm90b2NvbCBkcml2ZXJzLAogCSAqIGluY2x1ZGluZyBldGhlcl9zZXR1cCgpIGNhbGxlZCBmcm9tIGhkbGNfcmF3X2V0aC5jLgogCSAqLwotCWRldi0+Z2V0X3N0YXRzCQkgPSBoZGxjX2dldF9zdGF0czsKIAlkZXYtPmZsYWdzCQkgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7CisJZGV2LT5wcml2X2ZsYWdzCQkgPSBJRkZfV0FOX0hETEM7CiAJZGV2LT5tdHUJCSA9IEhETENfTUFYX01UVTsKIAlkZXYtPnR5cGUJCSA9IEFSUEhSRF9SQVdIRExDOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuCSA9IDE2OwogCWRldi0+YWRkcl9sZW4JCSA9IDA7CiAJZGV2LT5oZWFkZXJfb3BzCQkgPSAmaGRsY19udWxsX29wczsKLQotCWRldi0+Y2hhbmdlX210dQkJID0gaGRsY19jaGFuZ2VfbXR1OwogfQogCiBzdGF0aWMgdm9pZCBoZGxjX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zMzksNiArMzM2LDggQEAKIE1PRFVMRV9ERVNDUklQVElPTigiSERMQyBzdXBwb3J0IG1vZHVsZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogCitFWFBPUlRfU1lNQk9MKGhkbGNfY2hhbmdlX210dSk7CitFWFBPUlRfU1lNQk9MKGhkbGNfc3RhcnRfeG1pdCk7CiBFWFBPUlRfU1lNQk9MKGhkbGNfb3Blbik7CiBFWFBPUlRfU1lNQk9MKGhkbGNfY2xvc2UpOwogRVhQT1JUX1NZTUJPTChoZGxjX2lvY3RsKTsKQEAgLTM0OSw4ICszNDgsOCBAQAogRVhQT1JUX1NZTUJPTChhdHRhY2hfaGRsY19wcm90b2NvbCk7CiBFWFBPUlRfU1lNQk9MKGRldGFjaF9oZGxjX3Byb3RvY29sKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBoZGxjX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9IRExDKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaGRsY19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfSERMQyksCiAJLmZ1bmMgPSBoZGxjX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCmluZGV4IDQ0ZTY0YjE1Li5jZjVmZDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCWRhdGEtPnR5cGUgPSBodG9ubCh0eXBlKTsKIAlkYXRhLT5wYXIxID0gcGFyMTsKIAlkYXRhLT5wYXIyID0gcGFyMjsKLQlkYXRhLT5yZWwgPSBfX2NvbnN0YW50X2h0b25zKDB4RkZGRik7CisJZGF0YS0+cmVsID0gY3B1X3RvX2JlMTYoMHhGRkZGKTsKIAkvKiB3ZSB3aWxsIG5lZWQgZG9fZGl2IGhlcmUgaWYgMTAwMCAlIEhaICE9IDAgKi8KIAlkYXRhLT50aW1lID0gaHRvbmwoKGppZmZpZXMgLSBJTklUSUFMX0pJRkZJRVMpICogKDEwMDAgLyBIWikpOwogCkBAIC0xMzYsMjAgKzEzNiwyMCBAQAogCXN0cnVjdCBoZGxjX2hlYWRlciAqZGF0YSA9IChzdHJ1Y3QgaGRsY19oZWFkZXIqKXNrYi0+ZGF0YTsKIAogCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKQotCQlyZXR1cm4gX19jb25zdGFudF9odG9ucyhFVEhfUF9IRExDKTsKKwkJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0hETEMpOwogCiAJaWYgKGRhdGEtPmFkZHJlc3MgIT0gQ0lTQ09fTVVMVElDQVNUICYmCiAJICAgIGRhdGEtPmFkZHJlc3MgIT0gQ0lTQ09fVU5JQ0FTVCkKLQkJcmV0dXJuIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSERMQyk7CisJCXJldHVybiBjcHVfdG9fYmUxNihFVEhfUF9IRExDKTsKIAogCXN3aXRjaChkYXRhLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQWCk6Ci0JY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBYKToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKTsKIAkJcmV0dXJuIGRhdGEtPnByb3RvY29sOwogCWRlZmF1bHQ6Ci0JCXJldHVybiBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0hETEMpOworCQlyZXR1cm4gY3B1X3RvX2JlMTYoRVRIX1BfSERMQyk7CiAJfQogfQogCkBAIC0xOTQsNyArMTk0LDcgQEAKIAkJY2FzZSBDSVNDT19BRERSX1JFUTogLyogU3RvbGVuIGZyb20gc3luY3BwcC5jIDotKSAqLwogCQkJaW5fZGV2ID0gZGV2LT5pcF9wdHI7CiAJCQlhZGRyID0gMDsKLQkJCW1hc2sgPSBfX2NvbnN0YW50X2h0b25sKH4wKTsgLyogaXMgdGhlIG1hc2sgY29ycmVjdD8gKi8KKwkJCW1hc2sgPSB+Y3B1X3RvX2JlMzIoMCk7IC8qIGlzIHRoZSBtYXNrIGNvcnJlY3Q/ICovCiAKIAkJCWlmIChpbl9kZXYgIT0gTlVMTCkgewogCQkJCXN0cnVjdCBpbl9pZmFkZHIgKippZmFwID0gJmluX2Rldi0+aWZhX2xpc3Q7CkBAIC0zODIsNyArMzgyLDYgQEAKIAogCQltZW1jcHkoJnN0YXRlKGhkbGMpLT5zZXR0aW5ncywgJm5ld19zZXR0aW5ncywgc2l6ZSk7CiAJCXNwaW5fbG9ja19pbml0KCZzdGF0ZShoZGxjKS0+bG9jayk7Ci0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaGRsYy0+eG1pdDsKIAkJZGV2LT5oZWFkZXJfb3BzID0gJmNpc2NvX2hlYWRlcl9vcHM7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9DSVNDTzsKIAkJbmV0aWZfZG9ybWFudF9vbihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKaW5kZXggZjFkZGQ3Yy4uODAwNTMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCkBAIC0yNzgsMzEgKzI3OCwzMSBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSAqc2tiX3A7CiAKIAlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoTkxQSURfQ0NJVFRfQU5TSV9MTUkpOgorCWNhc2UgY3B1X3RvX2JlMTYoTkxQSURfQ0NJVFRfQU5TSV9MTUkpOgogCQloZWFkX2xlbiA9IDQ7CiAJCXNrYl9wdXNoKHNrYiwgaGVhZF9sZW4pOwogCQlza2ItPmRhdGFbM10gPSBOTFBJRF9DQ0lUVF9BTlNJX0xNSTsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoTkxQSURfQ0lTQ09fTE1JKToKKwljYXNlIGNwdV90b19iZTE2KE5MUElEX0NJU0NPX0xNSSk6CiAJCWhlYWRfbGVuID0gNDsKIAkJc2tiX3B1c2goc2tiLCBoZWFkX2xlbik7CiAJCXNrYi0+ZGF0YVszXSA9IE5MUElEX0NJU0NPX0xNSTsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCQloZWFkX2xlbiA9IDQ7CiAJCXNrYl9wdXNoKHNrYiwgaGVhZF9sZW4pOwogCQlza2ItPmRhdGFbM10gPSBOTFBJRF9JUDsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUFY2KToKIAkJaGVhZF9sZW4gPSA0OwogCQlza2JfcHVzaChza2IsIGhlYWRfbGVuKTsKIAkJc2tiLT5kYXRhWzNdID0gTkxQSURfSVBWNjsKIAkJYnJlYWs7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzMpOgorCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfODAyXzMpOgogCQloZWFkX2xlbiA9IDEwOwogCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBoZWFkX2xlbikgewogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjIgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsCkBAIC00MjYsNyArNDI2LDcgQEAKIAkJCQlza2JfcHV0KHNrYiwgcGFkKTsKIAkJCQltZW1zZXQoc2tiLT5kYXRhICsgbGVuLCAwLCBwYWQpOwogCQkJfQotCQkJc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzMpOworCQkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8zKTsKIAkJfQogCQlpZiAoIWZyX2hhcmRfaGVhZGVyKCZza2IsIHB2Yy0+ZGxjaSkpIHsKIAkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CkBAIC00NDQsMTggKzQ0NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQotCi1zdGF0aWMgaW50IHB2Y19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQotewotCWlmICgobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+IEhETENfTUFYX01UVSkpCi0JCXJldHVybiAtRUlOVkFMOwotCWRldi0+bXR1ID0gbmV3X210dTsKLQlyZXR1cm4gMDsKLX0KLQotCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmcl9sb2dfZGxjaV9hY3RpdmUocHZjX2RldmljZSAqcHZjKQogewogCXByaW50ayhLRVJOX0lORk8gIiVzOiBETENJICVkIFslcyVzJXNdJXMgJXNcbiIsCkBAIC01MDgsMTAgKzQ5NiwxMCBAQAogCW1lbXNldChza2ItPmRhdGEsIDAsIGxlbik7CiAJc2tiX3Jlc2VydmUoc2tiLCA0KTsKIAlpZiAobG1pID09IExNSV9DSVNDTykgewotCQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhOTFBJRF9DSVNDT19MTUkpOworCQlza2ItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoTkxQSURfQ0lTQ09fTE1JKTsKIAkJZnJfaGFyZF9oZWFkZXIoJnNrYiwgTE1JX0NJU0NPX0RMQ0kpOwogCX0gZWxzZSB7Ci0JCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKE5MUElEX0NDSVRUX0FOU0lfTE1JKTsKKwkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KE5MUElEX0NDSVRUX0FOU0lfTE1JKTsKIAkJZnJfaGFyZF9oZWFkZXIoJnNrYiwgTE1JX0NDSVRUX0FOU0lfRExDSSk7CiAJfQogCWRhdGEgPSBza2JfdGFpbF9wb2ludGVyKHNrYik7CkBAIC0xMDY4LDYgKzEwNTYsMTQgQEAKIAlkZXYtPmFkZHJfbGVuID0gMjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwdmNfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHB2Y19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHB2Y19jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gcHZjX3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gcHZjX2lvY3RsLAorfTsKKwogc3RhdGljIGludCBmcl9hZGRfcHZjKHN0cnVjdCBuZXRfZGV2aWNlICpmcmFkLCB1bnNpZ25lZCBpbnQgZGxjaSwgaW50IHR5cGUpCiB7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhmcmFkKTsKQEAgLTExMDQsMTEgKzExMDAsNyBAQAogCQkqKF9fYmUxNiopZGV2LT5kZXZfYWRkciA9IGh0b25zKGRsY2kpOwogCQlkbGNpX3RvX3E5MjIoZGV2LT5icm9hZGNhc3QsIGRsY2kpOwogCX0KLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHB2Y194bWl0OwotCWRldi0+b3BlbiA9IHB2Y19vcGVuOwotCWRldi0+c3RvcCA9IHB2Y19jbG9zZTsKLQlkZXYtPmRvX2lvY3RsID0gcHZjX2lvY3RsOwotCWRldi0+Y2hhbmdlX210dSA9IHB2Y19jaGFuZ2VfbXR1OworCWRldi0+bmV0ZGV2X29wcyA9ICZwdmNfb3BzOwogCWRldi0+bXR1ID0gSERMQ19NQVhfTVRVOwogCWRldi0+dHhfcXVldWVfbGVuID0gMDsKIAlkZXYtPm1sX3ByaXYgPSBwdmM7CkBAIC0xMjYwLDggKzEyNTIsNiBAQAogCQkJc3RhdGUoaGRsYyktPmRjZV9wdmNfY291bnQgPSAwOwogCQl9CiAJCW1lbWNweSgmc3RhdGUoaGRsYyktPnNldHRpbmdzLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKLQotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9GUkFEOwogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcHBwLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwppbmRleCA1N2ZlNzE0Li43MmE3Y2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwpAQCAtMTUwLDExICsxNTAsMTEgQEAKIAkJcmV0dXJuIGh0b25zKEVUSF9QX0hETEMpOwogCiAJc3dpdGNoIChkYXRhLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhQSURfSVApOgorCWNhc2UgY3B1X3RvX2JlMTYoUElEX0lQKToKIAkJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSk7CiAJCXJldHVybiBodG9ucyhFVEhfUF9JUCk7CiAKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoUElEX0lQVjYpOgorCWNhc2UgY3B1X3RvX2JlMTYoUElEX0lQVjYpOgogCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKTsKIAkJcmV0dXJuIGh0b25zKEVUSF9QX0lQVjYpOwogCkBAIC01NTgsNyArNTU4LDYgQEAKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKLQogc3RhdGljIHZvaWQgcHBwX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBwcm90byAqcHJvdG8gPSAoc3RydWN0IHByb3RvICopYXJnOwpAQCAtNjc5LDcgKzY3OCw2IEBACiAJCXBwcC0+a2VlcGFsaXZlX2ludGVydmFsID0gMTA7CiAJCXBwcC0+a2VlcGFsaXZlX3RpbWVvdXQgPSA2MDsKIAotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBoZGxjX2hlYWRlcik7CiAJCWRldi0+aGVhZGVyX29wcyA9ICZwcHBfaGVhZGVyX29wczsKIAkJZGV2LT50eXBlID0gQVJQSFJEX1BQUDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhdy5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKaW5kZXggODYxMjMxMS4uMTlmNTFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3LmMKQEAgLTI3LDExICsyNyw5IEBACiAKIHN0YXRpYyBfX2JlMTYgcmF3X3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk7CisJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0lQKTsKIH0KIAotCi0KIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byBwcm90byA9IHsKIAkudHlwZV90cmFucwk9IHJhd190eXBlX3RyYW5zLAogCS5pb2N0bAkJPSByYXdfaW9jdGwsCkBAIC04Niw3ICs4NCw2IEBACiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OwogCQltZW1jcHkoaGRsYy0+c3RhdGUsICZuZXdfc2V0dGluZ3MsIHNpemUpOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9SQVdIRExDOwogCQluZXRpZl9kb3JtYW50X29mZihkZXYpOwogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYwppbmRleCBhMTNmYzMyLi40OWU2OGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19yYXdfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3X2V0aC5jCkBAIC00NSw2ICs0NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byBwcm90byA9IHsKIAkudHlwZV90cmFucwk9IGV0aF90eXBlX3RyYW5zLAorCS54bWl0CQk9IGV0aF90eCwKIAkuaW9jdGwJCT0gcmF3X2V0aF9pb2N0bCwKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogfTsKQEAgLTU2LDkgKzU3LDcgQEAKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihyYXdfaGRsY19wcm90byk7CiAJcmF3X2hkbGNfcHJvdG8gbmV3X3NldHRpbmdzOwogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKLQlpbnQgcmVzdWx0OwotCWludCAoKm9sZF9jaF9tdHUpKHN0cnVjdCBuZXRfZGV2aWNlICosIGludCk7Ci0JaW50IG9sZF9xbGVuOworCWludCByZXN1bHQsIG9sZF9xbGVuOwogCiAJc3dpdGNoIChpZnItPmlmcl9zZXR0aW5ncy50eXBlKSB7CiAJY2FzZSBJRl9HRVRfUFJPVE86CkBAIC05OSwxMSArOTgsOCBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJbWVtY3B5KGhkbGMtPnN0YXRlLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBldGhfdHg7Ci0JCW9sZF9jaF9tdHUgPSBkZXYtPmNoYW5nZV9tdHU7CiAJCW9sZF9xbGVuID0gZGV2LT50eF9xdWV1ZV9sZW47CiAJCWV0aGVyX3NldHVwKGRldik7Ci0JCWRldi0+Y2hhbmdlX210dSA9IG9sZF9jaF9tdHU7CiAJCWRldi0+dHhfcXVldWVfbGVuID0gb2xkX3FsZW47CiAJCXJhbmRvbV9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpOwogCQluZXRpZl9kb3JtYW50X29mZihkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwppbmRleCBjYmNiZjZmLi5iMWRjMjllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY194MjUuYwpAQCAtMTg0LDYgKzE4NCw3IEBACiAJLmNsb3NlCQk9IHgyNV9jbG9zZSwKIAkuaW9jdGwJCT0geDI1X2lvY3RsLAogCS5uZXRpZl9yeAk9IHgyNV9yeCwKKwkueG1pdAkJPSB4MjVfeG1pdCwKIAkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAogfTsKIApAQCAtMjEzLDcgKzIxNCw2IEBACiAKIAkJaWYgKChyZXN1bHQgPSBhdHRhY2hfaGRsY19wcm90b2NvbChkZXYsICZwcm90bywgMCkpKQogCQkJcmV0dXJuIHJlc3VsdDsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB4MjVfeG1pdDsKIAkJZGV2LT50eXBlID0gQVJQSFJEX1gyNTsKIAkJbmV0aWZfZG9ybWFudF9vZmYoZGV2KTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMgYi9kcml2ZXJzL25ldC93YW4vaG9zdGVzc19zdjExLmMKaW5kZXggYWY1NGYwYy4uNTY3ZDRmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hvc3Rlc3Nfc3YxMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9ob3N0ZXNzX3N2MTEuYwpAQCAtMTczLDYgKzE3MywxNCBAQAogICoJRGVzY3JpcHRpb24gYmxvY2sgZm9yIGEgQ29tdHJvbCBIb3N0ZXNzIFNWMTEgY2FyZAogICovCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGVzc19vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gaG9zdGVzc19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhvc3Rlc3NfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBob3N0ZXNzX2lvY3RsLAorfTsKKwogc3RhdGljIHN0cnVjdCB6ODUzMF9kZXYgKnN2MTFfaW5pdChpbnQgaW9iYXNlLCBpbnQgaXJxKQogewogCXN0cnVjdCB6ODUzMF9kZXYgKnN2OwpAQCAtMjY3LDkgKzI3NSw3IEBACiAKIAlkZXZfdG9faGRsYyhuZXRkZXYpLT5hdHRhY2ggPSBob3N0ZXNzX2F0dGFjaDsKIAlkZXZfdG9faGRsYyhuZXRkZXYpLT54bWl0ID0gaG9zdGVzc19xdWV1ZV94bWl0OwotCW5ldGRldi0+b3BlbiA9IGhvc3Rlc3Nfb3BlbjsKLQluZXRkZXYtPnN0b3AgPSBob3N0ZXNzX2Nsb3NlOwotCW5ldGRldi0+ZG9faW9jdGwgPSBob3N0ZXNzX2lvY3RsOworCW5ldGRldi0+bmV0ZGV2X29wcyA9ICZob3N0ZXNzX29wczsKIAluZXRkZXYtPmJhc2VfYWRkciA9IGlvYmFzZTsKIAluZXRkZXYtPmlycSA9IGlycTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYyBiL2RyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMKaW5kZXggMGRiZDg1Yi4uM2JmN2QzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYworKysgYi9kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jCkBAIC02MjIsNyArNjIyLDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGhzc19oZGxjX3J4X2lycVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgogCXFtZ3JfZGlzYWJsZV9pcnEocXVldWVfaWRzW3BvcnQtPmlkXS5yeCk7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOworCW5hcGlfc2NoZWR1bGUoJnBvcnQtPm5hcGkpOwogfQogCiBzdGF0aWMgaW50IGhzc19oZGxjX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQpAQCAtNjQ5LDE1ICs2NDksMTUgQEAKIAkJaWYgKChuID0gcXVldWVfZ2V0X2Rlc2MocnhxLCBwb3J0LCAwKSkgPCAwKSB7CiAjaWYgREVCVUdfUlgKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaHNzX2hkbGNfcG9sbCIKLQkJCSAgICAgICAiIG5ldGlmX3J4X2NvbXBsZXRlXG4iLCBkZXYtPm5hbWUpOworCQkJICAgICAgICIgbmFwaV9jb21wbGV0ZVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgotCQkJbmV0aWZfcnhfY29tcGxldGUobmFwaSk7CisJCQluYXBpX2NvbXBsZXRlKG5hcGkpOwogCQkJcW1ncl9lbmFibGVfaXJxKHJ4cSk7CiAJCQlpZiAoIXFtZ3Jfc3RhdF9lbXB0eShyeHEpICYmCi0JCQkgICAgbmV0aWZfcnhfcmVzY2hlZHVsZShuYXBpKSkgeworCQkJICAgIG5hcGlfcmVzY2hlZHVsZShuYXBpKSkgewogI2lmIERFQlVHX1JYCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBoc3NfaGRsY19wb2xsIgotCQkJCSAgICAgICAiIG5ldGlmX3J4X3Jlc2NoZWR1bGUgc3VjY2VlZGVkXG4iLAorCQkJCSAgICAgICAiIG5hcGlfcmVzY2hlZHVsZSBzdWNjZWVkZWRcbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSk7CiAjZW5kaWYKIAkJCQlxbWdyX2Rpc2FibGVfaXJxKHJ4cSk7CkBAIC0xMDY5LDcgKzEwNjksNyBAQAogCWhzc19zdGFydF9oZGxjKHBvcnQpOwogCiAJLyogd2UgbWF5IGFscmVhZHkgaGF2ZSBSWCBkYXRhLCBlbmFibGVzIElSUSAqLwotCW5ldGlmX3J4X3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZwb3J0LT5uYXBpKTsKIAlyZXR1cm4gMDsKIAogZXJyX3VubG9jazoKQEAgLTEyMzAsNiArMTIzMCwxNCBAQAogICogaW5pdGlhbGl6YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhzc19oZGxjX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBoc3NfaGRsY19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGhzc19oZGxjX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gaHNzX2hkbGNfaW9jdGwsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBoc3NfaW5pdF9vbmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcG9ydCAqcG9ydDsKQEAgLTEyNTQsOSArMTI2Miw3IEBACiAJaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAJaGRsYy0+YXR0YWNoID0gaHNzX2hkbGNfYXR0YWNoOwogCWhkbGMtPnhtaXQgPSBoc3NfaGRsY194bWl0OwotCWRldi0+b3BlbiA9IGhzc19oZGxjX29wZW47Ci0JZGV2LT5zdG9wID0gaHNzX2hkbGNfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IGhzc19oZGxjX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZoc3NfaGRsY19vcHM7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CiAJcG9ydC0+Y2xvY2tfdHlwZSA9IENMT0NLX0VYVDsKIAlwb3J0LT5jbG9ja19yYXRlID0gMjA0ODAwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYyBiL2RyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYwppbmRleCA1YjYxYjNlLi4yZGQ3OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jCkBAIC01NSw3ICs1NSw2IEBACiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCXN0cnVjdCBuZXRfZGV2aWNlCSpldGhkZXY7CS8qIGxpbmsgdG8gZXRoZXJuZXQgZGV2aWNlICovCiAJc3RydWN0IG5ldF9kZXZpY2UJKmF4ZGV2OwkJLyogbGFwYmV0aCBkZXZpY2UgKGxhcGIjKSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwkJLyogc29tZSBzdGF0aXN0aWNzICovCiB9OwogCiBzdGF0aWMgTElTVF9IRUFEKGxhcGJldGhfZGV2aWNlcyk7CkBAIC0xMDcsMTAgKzEwNiw5IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGxhcGJldGgtPmF4ZGV2KSkKIAkJZ290byBkcm9wX3VubG9jazsKIAotCWxhcGJldGgtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQogCWxlbiA9IHNrYi0+ZGF0YVswXSArIHNrYi0+ZGF0YVsxXSAqIDI1NjsKLQlsYXBiZXRoLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CiAKIAlza2JfcHVsbChza2IsIDIpOwkvKiBSZW1vdmUgdGhlIGxlbmd0aCBieXRlcyAqLwogCXNrYl90cmltKHNrYiwgbGVuKTsJLyogU2V0IHRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKi8KQEAgLTIxMCw4ICsyMDgsOCBAQAogCSpwdHIrKyA9IHNpemUgJSAyNTY7CiAJKnB0cisrID0gc2l6ZSAvIDI1NjsKIAotCWxhcGJldGgtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlsYXBiZXRoLT5zdGF0cy50eF9ieXRlcyArPSBzaXplOworCW5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwluZGV2LT5zdGF0cy50eF9ieXRlcyArPSBzaXplOwogCiAJc2tiLT5kZXYgPSBkZXYgPSBsYXBiZXRoLT5ldGhkZXY7CiAKQEAgLTI1NSwxNSArMjUzLDYgQEAKIH0KIAogLyoKLSAqCVN0YXRpc3RpY3MKLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsYXBiZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYXBiZXRoZGV2ICpsYXBiZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJmxhcGJldGgtPnN0YXRzOwotfQotCi0vKgogICoJU2V0IEFYLjI1IGNhbGxzaWduCiAgKi8KIHN0YXRpYyBpbnQgbGFwYmV0aF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKQEAgLTMxNCwxNCArMzAzLDE3IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxhcGJldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JICAgICA9IGxhcGJldGhfb3BlbiwKKwkubmRvX3N0b3AJICAgICA9IGxhcGJldGhfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CSAgICAgPSBsYXBiZXRoX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBsYXBiZXRoX3NldF9tYWNfYWRkcmVzcywKK307CisKIHN0YXRpYyB2b2lkIGxhcGJldGhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxhcGJldGhfeG1pdDsKLQlkZXYtPm9wZW4JICAgICA9IGxhcGJldGhfb3BlbjsKLQlkZXYtPnN0b3AJICAgICA9IGxhcGJldGhfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzCSAgICAgPSAmbGFwYmV0aF9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkgICAgID0gZnJlZV9uZXRkZXY7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBsYXBiZXRoX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmdldF9zdGF0cwkgICAgID0gbGFwYmV0aF9nZXRfc3RhdHM7CiAJZGV2LT50eXBlICAgICAgICAgICAgPSBBUlBIUkRfWDI1OwogCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gMzsKIAlkZXYtPm10dSAgICAgICAgICAgICA9IDEwMDA7CkBAIC00MjEsOCArNDEzLDggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGFwYmV0aF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfREVDKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGFwYmV0aF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfREVDKSwKIAkuZnVuYyA9IGxhcGJldGhfcmN2LAogfTsKIApAQCAtNDMwLDcgKzQyMiw4IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBsYXBiZXRoX2RldmljZV9ldmVudCwKIH07CiAKLXN0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPSBLRVJOX0lORk8gIkxBUEIgRXRoZXJuZXQgZHJpdmVyIHZlcnNpb24gMC4wMlxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGNvbnN0ID0KKwlLRVJOX0lORk8gIkxBUEIgRXRoZXJuZXQgZHJpdmVyIHZlcnNpb24gMC4wMlxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbGFwYmV0aF9pbml0X2RyaXZlcih2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCmluZGV4IGZlYWMzYjkuLjQ1YjE4MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKQEAgLTgwNiw2ICs4MDYsMTYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBsbWNfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IGxtY19vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IGxtY19jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IGxtY19pb2N0bCwKKwkubmRvX3R4X3RpbWVvdXQgPSBsbWNfZHJpdmVyX3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMgID0gbG1jX2dldF9zdGF0cywKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGxtY19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CkBAIC04NDksMTEgKzg1OSw3IEBACiAJZGV2LT50eXBlID0gQVJQSFJEX0hETEM7CiAJZGV2X3RvX2hkbGMoZGV2KS0+eG1pdCA9IGxtY19zdGFydF94bWl0OwogCWRldl90b19oZGxjKGRldiktPmF0dGFjaCA9IGxtY19hdHRhY2g7Ci0JZGV2LT5vcGVuID0gbG1jX29wZW47Ci0JZGV2LT5zdG9wID0gbG1jX2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzID0gbG1jX2dldF9zdGF0czsKLQlkZXYtPmRvX2lvY3RsID0gbG1jX2lvY3RsOwotCWRldi0+dHhfdGltZW91dCA9IGxtY19kcml2ZXJfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbG1jX29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gSFo7IC8qIDEgc2Vjb25kICovCiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAxMDA7CiAJc2MtPmxtY19kZXZpY2UgPSBkZXY7CkBAIC0xMDU5LDkgKzEwNjUsNiBAQAogICAgIGlmICgoZXJyID0gbG1jX3Byb3RvX29wZW4oc2MpKSAhPSAwKQogCSAgICByZXR1cm4gZXJyOwogCi0gICAgZGV2LT5kb19pb2N0bCA9IGxtY19pb2N0bDsKLQotCiAgICAgbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKICAgICBzYy0+ZXh0cmFfc3RhdHMudHhfdGJ1c3kwKys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Byb3RvLmMgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19wcm90by5jCmluZGV4IDk0YjRjMjAuLjA0NGE0ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX3Byb3RvLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfcHJvdG8uYwpAQCAtNTEsMzAgKzUxLDE1IEBACiB2b2lkIGxtY19wcm90b19hdHRhY2gobG1jX3NvZnRjX3QgKnNjKSAvKkZPTEQwMCovCiB7CiAgICAgbG1jX3RyYWNlKHNjLT5sbWNfZGV2aWNlLCAibG1jX3Byb3RvX2F0dGFjaCBpbiIpOwotICAgIHN3aXRjaChzYy0+aWZfdHlwZSl7Ci0gICAgY2FzZSBMTUNfUFBQOgotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2MtPmxtY19kZXZpY2U7Ci0gICAgICAgICAgICBkZXYtPmRvX2lvY3RsID0gbG1jX2lvY3RsOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTE1DX05FVDoKLSAgICAgICAgeworICAgIGlmIChzYy0+aWZfdHlwZSA9PSBMTUNfTkVUKSB7CiAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2MtPmxtY19kZXZpY2U7CiAgICAgICAgICAgICAvKgogCSAgICAgKiBUaGV5IHNldCBhIGZldyBiYXNpY3MgYmVjYXVzZSB0aGV5IGRvbid0IHVzZSBIRExDCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGRldi0+ZmxhZ3MgfD0gSUZGX1BPSU5UT1BPSU5UOwotCiAgICAgICAgICAgICBkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDA7CiAgICAgICAgICAgICBkZXYtPmFkZHJfbGVuID0gMDsKICAgICAgICAgfQotICAgIGNhc2UgTE1DX1JBVzogLyogU2V0dXAgdGhlIHRhc2sgcXVldWUsIG1heWJlIHdlIHNob3VsZCBub3RpZnkgc29tZW9uZT8gKi8KLSAgICAgICAgewotICAgICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogICAgIGxtY190cmFjZShzYy0+bG1jX2RldmljZSwgImxtY19wcm90b19hdHRhY2ggb3V0Iik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9uMi5jIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKaW5kZXggNjk3NzE1YS4uODNkYTU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL24yLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL24yLmMKQEAgLTMyNCw3ICszMjQsMTMgQEAKIAlrZnJlZShjYXJkKTsKIH0KIAotCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG4yX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBuMl9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IG4yX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gbjJfaW9jdGwsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBuMl9ydW4odW5zaWduZWQgbG9uZyBpbywgdW5zaWduZWQgbG9uZyBpcnEsCiAJCQkgdW5zaWduZWQgbG9uZyB3aW5iYXNlLCBsb25nIHZhbGlkMCwgbG9uZyB2YWxpZDEpCkBAIC00NjAsOSArNDY2LDcgQEAKIAkJZGV2LT5tZW1fc3RhcnQgPSB3aW5iYXNlOwogCQlkZXYtPm1lbV9lbmQgPSB3aW5iYXNlICsgVVNFX1dJTkRPV1NJWkUgLSAxOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gbjJfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IG4yX29wZW47Ci0JCWRldi0+c3RvcCA9IG4yX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmbjJfb3BzOwogCQloZGxjLT5hdHRhY2ggPSBzY2FfYXR0YWNoOwogCQloZGxjLT54bWl0ID0gc2NhX3htaXQ7CiAJCXBvcnQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCmluZGV4IGYyNDdlNWQuLjYwZWNlNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jCkBAIC0yODcsNyArMjg3LDEzIEBACiAJa2ZyZWUoY2FyZCk7CiB9CiAKLQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBwYzMwMF9vcHMgPSB7CisJLm5kb19vcGVuICAgICAgID0gcGMzMDBfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBwYzMwMF9jbG9zZSwKKwkubmRvX2NoYW5nZV9tdHUgPSBoZGxjX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0ID0gaGRsY19zdGFydF94bWl0LAorCS5uZG9fZG9faW9jdGwgICA9IHBjMzAwX2lvY3RsLAorfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcGMzMDBfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtNDQ4LDkgKzQ1NCw3IEBACiAJCWRldi0+bWVtX3N0YXJ0ID0gcmFtcGh5czsKIAkJZGV2LT5tZW1fZW5kID0gcmFtcGh5cyArIHJhbXNpemUgLSAxOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gcGMzMDBfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IHBjMzAwX29wZW47Ci0JCWRldi0+c3RvcCA9IHBjMzAwX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmcGMzMDBfb3BzOwogCQloZGxjLT5hdHRhY2ggPSBzY2FfYXR0YWNoOwogCQloZGxjLT54bWl0ID0gc2NhX3htaXQ7CiAJCXBvcnQtPnNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKaW5kZXggMTEwNGQzYS4uZTAzNWQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwpAQCAtMjY1LDcgKzI2NSwxMyBAQAogCWtmcmVlKGNhcmQpOwogfQogCi0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcGNpMjAwX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSBwY2kyMDBfb3BlbiwKKwkubmRvX3N0b3AgICAgICAgPSBwY2kyMDBfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBwY2kyMDBfaW9jdGwsCit9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwY2kyMDBfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKQEAgLTM5NSw5ICs0MDEsNyBAQAogCQlkZXYtPm1lbV9zdGFydCA9IHJhbXBoeXM7CiAJCWRldi0+bWVtX2VuZCA9IHJhbXBoeXMgKyByYW1zaXplIC0gMTsKIAkJZGV2LT50eF9xdWV1ZV9sZW4gPSA1MDsKLQkJZGV2LT5kb19pb2N0bCA9IHBjaTIwMF9pb2N0bDsKLQkJZGV2LT5vcGVuID0gcGNpMjAwX29wZW47Ci0JCWRldi0+c3RvcCA9IHBjaTIwMF9jbG9zZTsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJnBjaTIwMF9vcHM7CiAJCWhkbGMtPmF0dGFjaCA9IHNjYV9hdHRhY2g7CiAJCWhkbGMtPnhtaXQgPSBzY2FfeG1pdDsKIAkJcG9ydC0+c2V0dGluZ3MuY2xvY2tfdHlwZSA9IENMT0NLX0VYVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMgYi9kcml2ZXJzL25ldC93YW4vc2JuaS5jCmluZGV4IDBhYTI4ZTEuLmY0MjExZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zYm5pLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3NibmkuYwpAQCAtNjgsNyArNjgsNiBAQAogLyogZGV2aWNlIHByaXZhdGUgZGF0YSAqLwogCiBzdHJ1Y3QgbmV0X2xvY2FsIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZzsKIAogCXNwaW5sb2NrX3QJbG9jazsKQEAgLTExNyw3ICsxMTYsNiBAQAogc3RhdGljIGludCAgc2JuaV9jbG9zZSggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIGludCAgc2JuaV9zdGFydF94bWl0KCBzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqICk7CiBzdGF0aWMgaW50ICBzYm5pX2lvY3RsKCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgaWZyZXEgKiwgaW50ICk7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgICpzYm5pX2dldF9zdGF0cyggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogc3RhdGljIHZvaWQgIHNldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgKiApOwogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2JuaV9pbnRlcnJ1cHQoIGludCwgdm9pZCAqICk7CkBAIC0yMDgsMTUgKzIwNiwyMSBAQAogCX0KIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzYm5pX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHNibmlfb3BlbiwKKwkubmRvX3N0b3AJCT0gc2JuaV9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gc2JuaV9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0CT0gc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fZG9faW9jdGwJCT0gc2JuaV9pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHNibmlfZGV2c2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlldGhlcl9zZXR1cCggZGV2ICk7Ci0JZGV2LT5vcGVuCQk9ICZzYm5pX29wZW47Ci0JZGV2LT5zdG9wCQk9ICZzYm5pX2Nsb3NlOwotCWRldi0+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+c3RhdHM7Ci19Ci0KLQogc3RhdGljIHZvaWQKIHNldF9tdWx0aWNhc3RfbGlzdCggc3RydWN0IG5ldF9kZXZpY2UgICpkZXYgKQogewpAQCAtMTUyMCwxNyArMTUxMiwxOCBAQAogfQogCiB2b2lkCi1jbGVhbnVwX21vZHVsZSggdm9pZCApCitjbGVhbnVwX21vZHVsZSh2b2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICAqZGV2OwotCWludCAgbnVtOworCWludCBpOwogCi0JZm9yKCBudW0gPSAwOyAgbnVtIDwgU0JOSV9NQVhfTlVNX0NBUkRTOyAgKytudW0gKQotCQlpZiggKGRldiA9IHNibmlfY2FyZHNbIG51bSBdKSAhPSBOVUxMICkgewotCQkJdW5yZWdpc3Rlcl9uZXRkZXYoIGRldiApOwotCQkJcmVsZWFzZV9yZWdpb24oIGRldi0+YmFzZV9hZGRyLCBTQk5JX0lPX0VYVEVOVCApOwotCQkJZnJlZV9uZXRkZXYoIGRldiApOworCWZvciAoaSA9IDA7ICBpIDwgU0JOSV9NQVhfTlVNX0NBUkRTOyAgKytpKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzYm5pX2NhcmRzW2ldOworCQlpZiAoZGV2ICE9IE5VTEwpIHsKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgU0JOSV9JT19FWFRFTlQpOworCQkJZnJlZV9uZXRkZXYoZGV2KTsKIAkJfQorCX0KIH0KIAogI2Vsc2UJLyogTU9EVUxFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2RsYS5jIGIvZHJpdmVycy9uZXQvd2FuL3NkbGEuYwppbmRleCA2YTA3YmE5Li4xZDYzN2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vc2RsYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhLmMKQEAgLTcxNCwxOSArNzE0LDE5IEBACiAJCXN3aXRjaCAocmV0KQogCQl7CiAJCQljYXNlIFNETEFfUkVUX09LOgotCQkJCWZscC0+c3RhdHMudHhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCXJldCA9IERMQ0lfUkVUX09LOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFNETEFfUkVUX0NJUl9PVkVSRkxPVzoKIAkJCWNhc2UgU0RMQV9SRVRfQlVGX09WRVJTSVpFOgogCQkJY2FzZSBTRExBX1JFVF9OT19CVUZTOgotCQkJCWZscC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJCXJldCA9IERMQ0lfUkVUX0RST1A7CiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6Ci0JCQkJZmxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJCXJldCA9IERMQ0lfUkVUX0VSUjsKIAkJCQlicmVhazsKIAkJfQpAQCAtODA3LDcgKzgwNyw3IEBACiAJCWlmIChpID09IENPTkZJR19ETENJX01BWCkKIAkJewogCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogUmVjZWl2ZWQgcGFja2V0IGZyb20gaW52YWxpZCBETENJICVpLCBpZ25vcmluZy4iLCBkZXYtPm5hbWUsIGRsY2kpOwotCQkJZmxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQlzdWNjZXNzID0gMDsKIAkJfQogCX0KQEAgLTgxOSw3ICs4MTksNyBAQAogCQlpZiAoc2tiID09IE5VTEwpIAogCQl7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwgZGV2LT5uYW1lKTsKLQkJCWZscC0+c3RhdHMucnhfZHJvcHBlZCsrOyAKKwkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJc3VjY2VzcyA9IDA7CiAJCX0KIAkJZWxzZQpAQCAtODU5LDcgKzg1OSw3IEBACiAKIAlpZiAoc3VjY2VzcykKIAl7Ci0JCWZscC0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJZGxwID0gbmV0ZGV2X3ByaXYobWFzdGVyKTsKIAkJKCpkbHAtPnJlY2VpdmUpKHNrYiwgbWFzdGVyKTsKIAl9CkBAIC0xNTkwLDEzICsxNTkwLDE0IEBACiAJcmV0dXJuIGVycjsKIH0KICAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2RsYV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmcmFkX2xvY2FsICpmbHA7Ci0JZmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybigmZmxwLT5zdGF0cyk7Ci19CitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHNkbGFfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JPSBzZGxhX29wZW4sCisJLm5kb19zdG9wCT0gc2RsYV9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCT0gc2RsYV9pb2N0bCwKKwkubmRvX3NldF9jb25maWcJPSBzZGxhX3NldF9jb25maWcsCisJLm5kb19zdGFydF94bWl0CT0gc2RsYV90cmFuc21pdCwKKwkubmRvX2NoYW5nZV9tdHUJPSBzZGxhX2NoYW5nZV9tdHUsCit9OwogCiBzdGF0aWMgdm9pZCBzZXR1cF9zZGxhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xNjA0LDIwICsxNjA1LDEzIEBACiAKIAluZXRkZXZfYm9vdF9zZXR1cF9jaGVjayhkZXYpOwogCisJZGV2LT5uZXRkZXZfb3BzCQk9ICZzZGxhX25ldGRldl9vcHM7CiAJZGV2LT5mbGFncwkJPSAwOwogCWRldi0+dHlwZQkJPSAweEZGRkY7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAwOwogCWRldi0+YWRkcl9sZW4JCT0gMDsKIAlkZXYtPm10dQkJPSBTRExBX01BWF9NVFU7CiAKLQlkZXYtPm9wZW4JCT0gc2RsYV9vcGVuOwotCWRldi0+c3RvcAkJPSBzZGxhX2Nsb3NlOwotCWRldi0+ZG9faW9jdGwJCT0gc2RsYV9pb2N0bDsKLQlkZXYtPnNldF9jb25maWcJCT0gc2RsYV9zZXRfY29uZmlnOwotCWRldi0+Z2V0X3N0YXRzCQk9IHNkbGFfc3RhdHM7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBzZGxhX3RyYW5zbWl0OwotCWRldi0+Y2hhbmdlX210dQkJPSBzZGxhX2NoYW5nZV9tdHU7Ci0KIAlmbHAtPmFjdGl2YXRlCQk9IHNkbGFfYWN0aXZhdGU7CiAJZmxwLT5kZWFjdGl2YXRlCQk9IHNkbGFfZGVhY3RpdmF0ZTsKIAlmbHAtPmFzc29jCQk9IHNkbGFfYXNzb2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vc2VhbGV2ZWwuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCmluZGV4IDA5NDFhMjYuLjIzYjI2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9zZWFsZXZlbC5jCkBAIC0xNjksNiArMTY5LDE0IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2VhbGV2ZWxfb3BzID0geworCS5uZG9fb3BlbiAgICAgICA9IHNlYWxldmVsX29wZW4sCisJLm5kb19zdG9wICAgICAgID0gc2VhbGV2ZWxfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1ID0gaGRsY19jaGFuZ2VfbXR1LAorCS5uZG9fc3RhcnRfeG1pdCA9IGhkbGNfc3RhcnRfeG1pdCwKKwkubmRvX2RvX2lvY3RsICAgPSBzZWFsZXZlbF9pb2N0bCwKK307CisKIHN0YXRpYyBpbnQgc2x2bF9zZXR1cChzdHJ1Y3Qgc2x2bF9kZXZpY2UgKnN2LCBpbnQgaW9iYXNlLCBpbnQgaXJxKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhbGxvY19oZGxjZGV2KHN2KTsKQEAgLTE3Nyw5ICsxODUsNyBAQAogCiAJZGV2X3RvX2hkbGMoZGV2KS0+YXR0YWNoID0gc2VhbGV2ZWxfYXR0YWNoOwogCWRldl90b19oZGxjKGRldiktPnhtaXQgPSBzZWFsZXZlbF9xdWV1ZV94bWl0OwotCWRldi0+b3BlbiA9IHNlYWxldmVsX29wZW47Ci0JZGV2LT5zdG9wID0gc2VhbGV2ZWxfY2xvc2U7Ci0JZGV2LT5kb19pb2N0bCA9IHNlYWxldmVsX2lvY3RsOworCWRldi0+bmV0ZGV2X29wcyA9ICZzZWFsZXZlbF9vcHM7CiAJZGV2LT5iYXNlX2FkZHIgPSBpb2Jhc2U7CiAJZGV2LT5pcnEgPSBpcnE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKaW5kZXggNGJmZmI2Ny4uODg3YWNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKQEAgLTU0Nyw2ICs1NDcsMTUgQEAKIAogI2luY2x1ZGUgIndhbnhsZncuaW5jIgogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHdhbnhsX29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgPSB3YW54bF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICA9IHdhbnhsX2Nsb3NlLAorCS5uZG9fY2hhbmdlX210dSA9IGhkbGNfY2hhbmdlX210dSwKKwkubmRvX3N0YXJ0X3htaXQgPSBoZGxjX3N0YXJ0X3htaXQsCisJLm5kb19kb19pb2N0bCAgID0gd2FueGxfaW9jdGwsCisJLm5kb19nZXRfc3RhdHMgID0gd2FueGxfZ2V0X3N0YXRzLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQgd2FueGxfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewpAQCAtNzc3LDEyICs3ODYsOSBAQAogCQloZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIAkJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOwogCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDUwOwotCQlkZXYtPmRvX2lvY3RsID0gd2FueGxfaW9jdGw7Ci0JCWRldi0+b3BlbiA9IHdhbnhsX29wZW47Ci0JCWRldi0+c3RvcCA9IHdhbnhsX2Nsb3NlOworCQlkZXYtPm5ldGRldl9vcHMgPSAmd2FueGxfb3BzOwogCQloZGxjLT5hdHRhY2ggPSB3YW54bF9hdHRhY2g7CiAJCWhkbGMtPnhtaXQgPSB3YW54bF94bWl0OwotCQlkZXYtPmdldF9zdGF0cyA9IHdhbnhsX2dldF9zdGF0czsKIAkJcG9ydC0+Y2FyZCA9IGNhcmQ7CiAJCXBvcnQtPm5vZGUgPSBpOwogCQlnZXRfc3RhdHVzKHBvcnQpLT5jbG9ja2luZyA9IENMT0NLX0VYVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5jCmluZGV4IGU2ZTJjZTMuLmQ2N2UyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAJCQltZW1jcHkoc2wtPnhidWZmLCBzbC0+eGhlYWQsIHNsLT54bGVmdCk7CiAJCX0gZWxzZSAgewogCQkJc2wtPnhsZWZ0ID0gMDsKLQkJCXNsLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJfQogCX0KIAlzbC0+eGhlYWQgPSBzbC0+eGJ1ZmY7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJCW1lbWNweShzbC0+cmJ1ZmYsIHJidWZmLCBzbC0+cmNvdW50KTsKIAkJfSBlbHNlICB7CiAJCQlzbC0+cmNvdW50ID0gMDsKLQkJCXNsLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQkJc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpOwogCQl9CiAJfQpAQCAtMTg4LDE4ICsxODgsMTkgQEAKIAogc3RhdGljIHZvaWQgeDI1X2FzeV9idW1wKHN0cnVjdCB4MjVfYXN5ICpzbCkKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2wtPmRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBjb3VudDsKIAlpbnQgZXJyOwogCiAJY291bnQgPSBzbC0+cmNvdW50OwotCXNsLT5zdGF0cy5yeF9ieXRlcyArPSBjb3VudDsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGNvdW50OwogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihjb3VudCsxKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAogCQkJc2wtPmRldi0+bmFtZSk7Ci0JCXNsLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCXNrYl9wdXNoKHNrYiwgMSk7CS8qIExBUEIgaW50ZXJuYWwgY29udHJvbCAqLwpAQCAtMjExLDcgKzIxMiw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICJ4MjVfYXN5OiBkYXRhIHJlY2VpdmVkIGVyciAtICVkXG4iLCBlcnIpOwogCX0gZWxzZSB7CiAJCW5ldGlmX3J4KHNrYik7Ci0JCXNsLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwogCX0KIH0KIApAQCAtMjI2LDcgKzIyNyw3IEBACiAJCWxlbiA9IG10dTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0cnVuY2F0aW5nIG92ZXJzaXplZCB0cmFuc21pdCBwYWNrZXQhXG4iLAogCQkJCQlzbC0+ZGV2LT5uYW1lKTsKLQkJc2wtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJc2wtPmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQl4MjVfYXN5X3VubG9jayhzbCk7CiAJCXJldHVybjsKIAl9CkBAIC0yNjYsNyArMjY3LDcgQEAKIAlpZiAoc2wtPnhsZWZ0IDw9IDApIHsKIAkJLyogTm93IHNlcmlhbCBidWZmZXIgaXMgYWxtb3N0IGZyZWUgJiB3ZSBjYW4gc3RhcnQKIAkJICogdHJhbnNtaXNzaW9uIG9mIGFub3RoZXIgcGFja2V0ICovCi0JCXNsLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCXNsLT5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJY2xlYXJfYml0KFRUWV9ET19XUklURV9XQUtFVVAsICZ0dHktPmZsYWdzKTsKIAkJeDI1X2FzeV91bmxvY2soc2wpOwogCQlyZXR1cm47CkBAIC0zODMsNyArMzg0LDcgQEAKIAkvKiBXZSB3ZXJlIG5vdCBidXN5LCBzbyB3ZSBhcmUgbm93Li4uIDotKSAqLwogCWlmIChza2IgIT0gTlVMTCkgewogCQl4MjVfYXN5X2xvY2soc2wpOwotCQlzbC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJCXgyNV9hc3lfZW5jYXBzKHNsLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCX0KQEAgLTUzMyw3ICs1MzQsNyBAQAogCXdoaWxlIChjb3VudC0tKSB7CiAJCWlmIChmcCAmJiAqZnArKykgewogCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNMRl9FUlJPUiwgJnNsLT5mbGFncykpCi0JCQkJc2wtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJCXNsLT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJY3ArKzsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02MDgsMTQgKzYwOSw2IEBACiAJeDI1X2FzeV9mcmVlKHNsKTsKIH0KIAotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKngyNV9hc3lfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHgyNV9hc3kgKnNsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gJnNsLT5zdGF0czsKLX0KLQotCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAqCQkJU1RBTkRBUkQgWC4yNSBFTkNBUFNVTEFUSU9OCQkgIAkgKgogICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC02ODIsNyArNjc1LDcgQEAKIAkJCXNsLT5yYnVmZltzbC0+cmNvdW50KytdID0gczsKIAkJCXJldHVybjsKIAkJfQotCQlzbC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKKwkJc2wtPmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJc2V0X2JpdChTTEZfRVJST1IsICZzbC0+ZmxhZ3MpOwogCX0KIH0KQEAgLTcxOSw2ICs3MTIsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB4MjVfYXN5X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCT0geDI1X2FzeV9vcGVuX2RldiwKKwkubmRvX3N0b3AJPSB4MjVfYXN5X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAk9IHgyNV9hc3lfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJPSB4MjVfYXN5X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CT0geDI1X2FzeV9jaGFuZ2VfbXR1LAorfTsKKwogLyogSW5pdGlhbGlzZSB0aGUgWC4yNSBkcml2ZXIuICBDYWxsZWQgYnkgdGhlIGRldmljZSBpbml0IGNvZGUgKi8KIHN0YXRpYyB2b2lkIHgyNV9hc3lfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTczNCwxMyArNzM1LDggQEAKIAkgKi8KIAogCWRldi0+bXR1CQk9IFNMX01UVTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IHgyNV9hc3lfeG1pdDsKLQlkZXYtPnR4X3RpbWVvdXQJCT0geDI1X2FzeV90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcwkJPSAmeDI1X2FzeV9uZXRkZXZfb3BzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8JPSBIWioyMDsKLQlkZXYtPm9wZW4JCT0geDI1X2FzeV9vcGVuX2RldjsKLQlkZXYtPnN0b3AJCT0geDI1X2FzeV9jbG9zZTsKLQlkZXYtPmdldF9zdGF0cwkgICAgICAgID0geDI1X2FzeV9nZXRfc3RhdHM7Ci0JZGV2LT5jaGFuZ2VfbXR1CQk9IHgyNV9hc3lfY2hhbmdlX210dTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IDA7CiAJZGV2LT5hZGRyX2xlbgkJPSAwOwogCWRldi0+dHlwZQkJPSBBUlBIUkRfWDI1OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuaCBiL2RyaXZlcnMvbmV0L3dhbi94MjVfYXN5LmgKaW5kZXggNDE3NzAyMC4uOGYwZmMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3gyNV9hc3kuaAorKysgYi9kcml2ZXJzL25ldC93YW4veDI1X2FzeS5oCkBAIC0yOCwxMCArMjgsNiBAQAogICB1bnNpZ25lZCBjaGFyCQkqeGJ1ZmY7CQkvKiB0cmFuc21pdHRlciBidWZmZXIJCSovCiAgIHVuc2lnbmVkIGNoYXIgICAgICAgICAqeGhlYWQ7ICAgICAgICAgLyogcG9pbnRlciB0byBuZXh0IGJ5dGUgdG8gWE1JVCAqLwogICBpbnQgICAgICAgICAgICAgICAgICAgeGxlZnQ7ICAgICAgICAgIC8qIGJ5dGVzIGxlZnQgaW4gWE1JVCBxdWV1ZSAgICAgKi8KLQotICAvKiBYLjI1IGludGVyZmFjZSBzdGF0aXN0aWNzLiAqLwotICBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQogICBpbnQgICAgICAgICAgICAgICAgICAgYnVmZnNpemU7ICAgICAgIC8qIE1heCBidWZmZXJzIHNpemVzICAgICAgICAgICAgKi8KIAogICB1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIEZsYWcgdmFsdWVzLyBtb2RlIGV0YwkqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jIGIvZHJpdmVycy9uZXQvd2FuL3o4NTIzMC5jCmluZGV4IDNkMDA5NzEuLmFkNGU3OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi96ODUyMzAuYworKysgYi9kcml2ZXJzL25ldC93YW4vejg1MjMwLmMKQEAgLTE3NzUsNyArMTc3NSw4IEBACiAvKgogICoJTW9kdWxlIHN1cHBvcnQKICAqLwotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyAiR2VuZXJpYyBaODVDMzAvWjg1MjMwIGludGVyZmFjZSBkcml2ZXIgdjAuMDJcbiI7CitzdGF0aWMgY29uc3QgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0KKwlLRVJOX0lORk8gIkdlbmVyaWMgWjg1QzMwL1o4NTIzMCBpbnRlcmZhY2UgZHJpdmVyIHYwLjAyXG4iOwogCiBzdGF0aWMgaW50IF9faW5pdCB6ODUyMzBfaW5pdF9kcml2ZXIodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9NYWtlZmlsZQppbmRleCAxNjk2ZTkzLi41ZDllMDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogCWRyaXZlci5vCVwKIAlmdy5vCQlcCiAJb3AtcmZraWxsLm8JXAorCXN5c2ZzLm8JCVwKIAluZXRkZXYubwlcCiAJdHgubwkJXAogCXJ4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vY29udHJvbC5jCmluZGV4IDE1ZDlmNTEuLmIzY2FkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9jb250cm9sLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2NvbnRyb2wuYwpAQCAtNTIsNyArNTIsNiBAQAogICoKICAqIGkyNDAwbV9kZXZfaW5pdGFsaXplKCkgICAgICAgQ2FsbGVkIGJ5IGkyNDAwbV9kZXZfc3RhcnQoKQogICogICBpMjQwMG1fc2V0X2luaXRfY29uZmlnKCkKLSAqICAgaTI0MDBtX2Zpcm13YXJlX2NoZWNrKCkKICAqICAgaTI0MDBtX2NtZF9nZXRfc3RhdGUoKQogICogaTI0MDBtX2Rldl9zaHV0ZG93bigpICAgICAgICBDYWxsZWQgYnkgaTI0MDBtX2Rldl9zdG9wKCkKICAqICAgaTI0MDBtLT5idXNfcmVzZXQoKQpAQCAtOTQyLDggKzk0MSw4IEBACiAvKiBGaXJtd2FyZSBpbnRlcmZhY2UgdmVyc2lvbnMgd2Ugc3VwcG9ydCAqLwogZW51bSB7CiAJSTI0MDBNX0hESXZfTUFKT1IgPSA5LAotCUkyNDAwTV9IREl2X01BSk9SXzIgPSA4LAogCUkyNDAwTV9IREl2X01JTk9SID0gMSwKKwlJMjQwME1fSERJdl9NSU5PUl8yID0gMiwKIH07CiAKIApAQCAtOTU5LDYgKzk1OCwxMCBAQAogICogTG9uZyBmdW5jdGlvbiwgYnV0IHF1aXRlIHNpbXBsZTsgZmlyc3QgY2h1bmsgbGF1bmNoZXMgdGhlIGNvbW1hbmQKICAqIGFuZCBkb3VibGUgY2hlY2tzIHRoZSByZXBseSBmb3IgdGhlIHJpZ2h0IFRMVi4gVGhlbiB3ZSBwcm9jZXNzIHRoZQogICogVExWICh3aGVyZSB0aGUgbWVhdCBpcykuCisgKgorICogT25jZSB3ZSBwcm9jZXNzIHRoZSBUTFYgdGhhdCBnaXZlcyB1cyB0aGUgZmlybXdhcmUncyBpbnRlcmZhY2UKKyAqIHZlcnNpb24sIHdlIGVuY29kZSBpdCBhbmQgc2F2ZSBpdCBpbiBpMjQwMG0tPmZ3X3ZlcnNpb24gZm9yIGZ1dHVyZQorICogcmVmZXJlbmNlLgogICovCiBpbnQgaTI0MDBtX2Zpcm13YXJlX2NoZWNrKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKIHsKQEAgLTEwMDksMjIgKzEwMTIsMjAgQEAKIAltaW5vciA9IGxlMTZfdG9fY3B1KGw0bXYtPm1pbm9yKTsKIAlicmFuY2ggPSBsZTE2X3RvX2NwdShsNG12LT5icmFuY2gpOwogCXJlc3VsdCA9IC1FSU5WQUw7Ci0JaWYgKG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SCi0JICAgICYmIG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SXzIpIHsKLQkJZGV2X2VycihkZXYsICJ1bnN1cHBvcnRlZCBtYWpvciBmdyBpbnRlcmZhY2UgdmVyc2lvbiAiCisJaWYgKG1ham9yICE9IEkyNDAwTV9IREl2X01BSk9SKSB7CisJCWRldl9lcnIoZGV2LCAidW5zdXBwb3J0ZWQgbWFqb3IgZncgdmVyc2lvbiAiCiAJCQkiJXUuJXUuJXVcbiIsIG1ham9yLCBtaW5vciwgYnJhbmNoKTsKIAkJZ290byBlcnJvcl9iYWRfbWFqb3I7CiAJfQotCWlmIChtYWpvciA9PSBJMjQwME1fSERJdl9NQUpPUl8yKQotCQlkZXZfZXJyKGRldiwgImRlcHJlY2F0ZWQgbWFqb3IgZncgaW50ZXJmYWNlIHZlcnNpb24gIgotCQkJIiV1LiV1LiV1XG4iLCBtYWpvciwgbWlub3IsIGJyYW5jaCk7CiAJcmVzdWx0ID0gMDsKLQlpZiAobWlub3IgIT0gSTI0MDBNX0hESXZfTUlOT1IpCi0JCWRldl93YXJuKGRldiwgInVudGVzdGVkIG1pbm9yIGZ3IGZpcm13YXJlIHZlcnNpb24gJXUuJXUuJXVcbiIsCisJaWYgKG1pbm9yIDwgSTI0MDBNX0hESXZfTUlOT1JfMiAmJiBtaW5vciA+IEkyNDAwTV9IREl2X01JTk9SKQorCQlkZXZfd2FybihkZXYsICJ1bnRlc3RlZCBtaW5vciBmdyB2ZXJzaW9uICV1LiV1LiV1XG4iLAogCQkJIG1ham9yLCBtaW5vciwgYnJhbmNoKTsKLWVycm9yX2JhZF9tYWpvcjoKKwkvKiBZZXMsIHdlIGlnbm9yZSB0aGUgYnJhbmNoIC0tIHdlIGRvbid0IGhhdmUgdG8gdHJhY2sgaXQgKi8KKwlpMjQwMG0tPmZ3X3ZlcnNpb24gPSBtYWpvciA8PCAxNiB8IG1pbm9yOwogCWRldl9pbmZvKGRldiwgImZpcm13YXJlIGludGVyZmFjZSB2ZXJzaW9uICV1LiV1LiV1XG4iLAogCQkgbWFqb3IsIG1pbm9yLCBicmFuY2gpOworZXJyb3JfYmFkX21ham9yOgogZXJyb3Jfbm9fdGx2OgogZXJyb3JfY21kX2ZhaWxlZDoKIAlrZnJlZV9za2IoYWNrX3NrYik7CkBAIC0xMjIxLDYgKzEyMjIsNzcgQEAKIAogCiAvKioKKyAqIGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0IC0gU2V0IHRoZSBkZXZpY2UncyBpZGxlIG1vZGUgdGltZW91dAorICoKKyAqIEBpMjQwMG06IGkyNDAwbSBkZXZpY2UgZGVzY3JpcHRvcgorICoKKyAqIEBtc2VjczogbWlsbGlzZWNvbmRzIGZvciB0aGUgdGltZW91dCB0byBlbnRlciBpZGxlIG1vZGUuIEJldHdlZW4KKyAqICAgICAxMDAgdG8gMzAwMDAwICg1bSk7IDAgdG8gZGlzYWJsZS4gSW4gaW5jcmVtZW50cyBvZiAxMDAuCisgKgorICogQWZ0ZXIgdGhpcyBAbXNlY3Mgb2YgdGhlIGxpbmsgYmVpbmcgaWRsZSAobm8gZGF0YSBiZWluZyBzZW50IG9yCisgKiByZWNlaXZlZCksIHRoZSBkZXZpY2Ugd2lsbCBuZWdvdGlhdGUgd2l0aCB0aGUgYmFzZXN0YXRpb24gZW50ZXJpbmcKKyAqIGlkbGUgbW9kZSBmb3Igc2F2aW5nIHBvd2VyLiBUaGUgY29ubmVjdGlvbiBpcyBtYWludGFpbmVkLCBidXQKKyAqIGdldHRpbmcgb3V0IG9mIGl0IChkb25lIGluIHR4LmMpIHdpbGwgcmVxdWlyZSBzb21lIG5lZ290aWF0aW9uLAorICogcG9zc2libGUgY3J5cHRvIHJlLWhhbmRzaGFrZSBhbmQgYSBwb3NzaWJsZSBESENQIHJlLWxlYXNlLgorICoKKyAqIE9ubHkgYXZhaWxhYmxlIGlmIGZ3X3ZlcnNpb24gPj0gMHgwMDA5MDAwMi4KKyAqCisgKiBSZXR1cm5zOiAwIGlmIG9rLCA8IDAgZXJybm8gY29kZSBvbiBlcnJvci4KKyAqLworaW50IGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgdW5zaWduZWQgbXNlY3MpCit7CisJaW50IHJlc3VsdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJc3RydWN0IHNrX2J1ZmYgKmFja19za2I7CisJc3RydWN0IHsKKwkJc3RydWN0IGkyNDAwbV9sM2w0X2hkciBoZHI7CisJCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3RpbWVvdXQgY2l0OworCX0gKmNtZDsKKwljb25zdCBzdHJ1Y3QgaTI0MDBtX2wzbDRfaGRyICphY2s7CisJc2l6ZV90IGFja19sZW47CisJY2hhciBzdHJlcnJbMzJdOworCisJcmVzdWx0ID0gLUVOT1NZUzsKKwlpZiAoaTI0MDBtX2xlX3YxXzMoaTI0MDBtKSkKKwkJZ290byBlcnJvcl9hbGxvYzsKKwlyZXN1bHQgPSAtRU5PTUVNOworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCWdvdG8gZXJyb3JfYWxsb2M7CisJY21kLT5oZHIudHlwZSA9IGNwdV90b19sZTE2KEkyNDAwTV9NVF9HRVRfU1RBVEUpOworCWNtZC0+aGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSAtIHNpemVvZihjbWQtPmhkcikpOworCWNtZC0+aGRyLnZlcnNpb24gPSBjcHVfdG9fbGUxNihJMjQwME1fTDNMNF9WRVJTSU9OKTsKKworCWNtZC0+Y2l0Lmhkci50eXBlID0KKwkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfSURMRV9USU1FT1VUKTsKKwljbWQtPmNpdC5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKGNtZC0+Y2l0LnRpbWVvdXQpKTsKKwljbWQtPmNpdC50aW1lb3V0ID0gY3B1X3RvX2xlMzIobXNlY3MpOworCisJYWNrX3NrYiA9IGkyNDAwbV9tc2dfdG9fZGV2KGkyNDAwbSwgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChJU19FUlIoYWNrX3NrYikpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gaXNzdWUgJ3NldCBpZGxlIHRpbWVvdXQnIGNvbW1hbmQ6ICIKKwkJCSIlbGRcbiIsIFBUUl9FUlIoYWNrX3NrYikpOworCQlyZXN1bHQgPSBQVFJfRVJSKGFja19za2IpOworCQlnb3RvIGVycm9yX21zZ190b19kZXY7CisJfQorCWFjayA9IHdpbWF4X21zZ19kYXRhX2xlbihhY2tfc2tiLCAmYWNrX2xlbik7CisJcmVzdWx0ID0gaTI0MDBtX21zZ19jaGVja19zdGF0dXMoYWNrLCBzdHJlcnIsIHNpemVvZihzdHJlcnIpKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIidzZXQgaWRsZSB0aW1lb3V0JyAoMHglMDR4KSBjb21tYW5kIGZhaWxlZDogIgorCQkJIiVkIC0gJXNcbiIsIEkyNDAwTV9NVF9HRVRfU1RBVEUsIHJlc3VsdCwgc3RyZXJyKTsKKwkJZ290byBlcnJvcl9jbWRfZmFpbGVkOworCX0KKwlyZXN1bHQgPSAwOworCWtmcmVlX3NrYihhY2tfc2tiKTsKK2Vycm9yX2NtZF9mYWlsZWQ6CitlcnJvcl9tc2dfdG9fZGV2OgorCWtmcmVlKGNtZCk7CitlcnJvcl9hbGxvYzoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qKgogICogaTI0MDBtX2Rldl9pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIG9uY2UgY29tbXVuaWNhdGlvbnMgYXJlIHJlYWR5CiAgKgogICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKQEAgLTEyMzgsMjYgKzEzMTAsNTUgQEAKIAlpbnQgcmVzdWx0OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAlzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV9wYXJhbWV0ZXJzIGlkbGVfcGFyYW1zOworCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19pZGxlX3RpbWVvdXQgaWRsZV90aW1lb3V0OworCXN0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kMmhfZGF0YV9mb3JtYXQgZGY7CisJc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2RsX2hvc3RfcmVvcmRlciBkbGhyOwogCWNvbnN0IHN0cnVjdCBpMjQwMG1fdGx2X2hkciAqYXJnc1s5XTsKIAl1bnNpZ25lZCBhcmdjID0gMDsKIAogCWRfZm5zdGFydCgzLCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKLQkvKiBVc2VsZXNzIGZvciBub3cuLi5taWdodCBjaGFuZ2UgKi8KKwkvKiBEaXNhYmxlIGlkbGUgbW9kZT8gKGVuYWJsZWQgYnkgZGVmYXVsdCkgKi8KIAlpZiAoaTI0MDBtX2lkbGVfbW9kZV9kaXNhYmxlZCkgewotCQlpZGxlX3BhcmFtcy5oZHIudHlwZSA9Ci0JCQljcHVfdG9fbGUxNihJMjQwME1fVExWX0NPTkZJR19JRExFX1BBUkFNRVRFUlMpOwotCQlpZGxlX3BhcmFtcy5oZHIubGVuZ3RoID0gY3B1X3RvX2xlMTYoCi0JCQlzaXplb2YoaWRsZV9wYXJhbXMpIC0gc2l6ZW9mKGlkbGVfcGFyYW1zLmhkcikpOwotCQlpZGxlX3BhcmFtcy5pZGxlX3RpbWVvdXQgPSAwOwotCQlpZGxlX3BhcmFtcy5pZGxlX3BhZ2luZ19pbnRlcnZhbCA9IDA7Ci0JCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3BhcmFtcy5oZHI7CisJCWlmIChpMjQwMG1fbGVfdjFfMyhpMjQwMG0pKSB7CisJCQlpZGxlX3BhcmFtcy5oZHIudHlwZSA9CisJCQkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfSURMRV9QQVJBTUVURVJTKTsKKwkJCWlkbGVfcGFyYW1zLmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCQlzaXplb2YoaWRsZV9wYXJhbXMpIC0gc2l6ZW9mKGlkbGVfcGFyYW1zLmhkcikpOworCQkJaWRsZV9wYXJhbXMuaWRsZV90aW1lb3V0ID0gMDsKKwkJCWlkbGVfcGFyYW1zLmlkbGVfcGFnaW5nX2ludGVydmFsID0gMDsKKwkJCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3BhcmFtcy5oZHI7CisJCX0gZWxzZSB7CisJCQlpZGxlX3RpbWVvdXQuaGRyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0lETEVfVElNRU9VVCk7CisJCQlpZGxlX3RpbWVvdXQuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KAorCQkJCXNpemVvZihpZGxlX3RpbWVvdXQpIC0gc2l6ZW9mKGlkbGVfdGltZW91dC5oZHIpKTsKKwkJCWlkbGVfdGltZW91dC50aW1lb3V0ID0gMDsKKwkJCWFyZ3NbYXJnYysrXSA9ICZpZGxlX3RpbWVvdXQuaGRyOworCQl9CisJfQorCWlmIChpMjQwMG1fZ2VfdjFfNChpMjQwMG0pKSB7CisJCS8qIEVuYWJsZSBleHRlbmRlZCBSWCBkYXRhIGZvcm1hdD8gKi8KKwkJZGYuaGRyLnR5cGUgPQorCQkJY3B1X3RvX2xlMTYoSTI0MDBNX1RMVl9DT05GSUdfRDJIX0RBVEFfRk9STUFUKTsKKwkJZGYuaGRyLmxlbmd0aCA9IGNwdV90b19sZTE2KAorCQkJc2l6ZW9mKGRmKSAtIHNpemVvZihkZi5oZHIpKTsKKwkJZGYuZm9ybWF0ID0gMTsKKwkJYXJnc1thcmdjKytdID0gJmRmLmhkcjsKKworCQkvKiBFbmFibGUgUlggZGF0YSByZW9yZGVyaW5nPworCQkgKiAoc3dpdGNoIGZsaXBwZWQgaW4gcnguYzppMjQwMG1fcnhfc2V0dXAoKSBhZnRlciBmdyB1cGxvYWQpICovCisJCWlmIChpMjQwMG0tPnJ4X3Jlb3JkZXIpIHsKKwkJCWRsaHIuaGRyLnR5cGUgPQorCQkJCWNwdV90b19sZTE2KEkyNDAwTV9UTFZfQ09ORklHX0RMX0hPU1RfUkVPUkRFUik7CisJCQlkbGhyLmhkci5sZW5ndGggPSBjcHVfdG9fbGUxNigKKwkJCQlzaXplb2YoZGxocikgLSBzaXplb2YoZGxoci5oZHIpKTsKKwkJCWRsaHIucmVvcmRlciA9IDE7CisJCQlhcmdzW2FyZ2MrK10gPSAmZGxoci5oZHI7CisJCX0KIAl9CiAJcmVzdWx0ID0gaTI0MDBtX3NldF9pbml0X2NvbmZpZyhpMjQwMG0sIGFyZ3MsIGFyZ2MpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGVycm9yOwotCXJlc3VsdCA9IGkyNDAwbV9maXJtd2FyZV9jaGVjayhpMjQwMG0pOwkvKiBmdyB2ZXJzaW9ucyBvaz8gKi8KLQlpZiAocmVzdWx0IDwgMCkKLQkJZ290byBlcnJvcjsKIAkvKgogCSAqIFVwZGF0ZSBzdGF0ZTogSGVyZSBpdCBqdXN0IGNhbGxzIGEgZ2V0IHN0YXRlOyBwYXJzaW5nIHRoZQogCSAqIHJlc3VsdCAoU3lzdGVtIFN0YXRlIFRMViBhbmQgUkYgU3RhdHVzIFRMViBbZG9uZSBpbiB0aGUgcngKQEAgLTEyNjYsNiArMTM2Nyw4IEBACiAJICovCiAJcmVzdWx0ID0gaTI0MDBtX2NtZF9nZXRfc3RhdGUoaTI0MDBtKTsKIGVycm9yOgorCWlmIChyZXN1bHQgPCAwKQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSBkZXZpY2U6ICVkXG4iLCByZXN1bHQpOwogCWRfZm5lbmQoMywgZGV2LCAiKGkyNDAwbSAlcCkgPSAlZFxuIiwgaTI0MDBtLCByZXN1bHQpOwogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZGVidWctbGV2ZWxzLmggYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZGVidWctbGV2ZWxzLmgKaW5kZXggMzE4M2JhYS4uNDhmYmZhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RlYnVnLWxldmVscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kZWJ1Zy1sZXZlbHMuaApAQCAtMzgsNiArMzgsNyBAQAogCURfU1VCTU9EVUxFX0RFQ0xBUkUobmV0ZGV2KSwKIAlEX1NVQk1PRFVMRV9ERUNMQVJFKHJma2lsbCksCiAJRF9TVUJNT0RVTEVfREVDTEFSRShyeCksCisJRF9TVUJNT0RVTEVfREVDTEFSRShzeXNmcyksCiAJRF9TVUJNT0RVTEVfREVDTEFSRSh0eCksCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKaW5kZXggZTgwYTBiNi4uMDdhNTRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYwpAQCAtNDgsNiArNDgsNyBAQAogICogICAgICAgaTI0MDBtX2Rldl9ib290c3RyYXAoKQogICogICAgICAgaTI0MDBtX3R4X3NldHVwKCkKICAqICAgICAgIGkyNDAwbS0+YnVzX2Rldl9zdGFydCgpCisgKiAgICAgICBpMjQwMG1fZmlybXdhcmVfY2hlY2soKQogICogICAgICAgaTI0MDBtX2NoZWNrX21hY19hZGRyKCkKICAqICAgd2ltYXhfZGV2X2FkZCgpCiAgKgpAQCAtNzUsNiArNzYsMTEgQEAKIAkJICJJZiB0cnVlLCB0aGUgZGV2aWNlIHdpbGwgbm90IGVuYWJsZSBpZGxlIG1vZGUgbmVnb3RpYXRpb24gIgogCQkgIndpdGggdGhlIGJhc2Ugc3RhdGlvbiAod2hlbiBjb25uZWN0ZWQpIHRvIHNhdmUgcG93ZXIuIik7CiAKK2ludCBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZDsJLyogMCAocnggcmVvcmRlciBlbmFibGVkKSBieSBkZWZhdWx0ICovCittb2R1bGVfcGFyYW1fbmFtZWQocnhfcmVvcmRlcl9kaXNhYmxlZCwgaTI0MDBtX3J4X3Jlb3JkZXJfZGlzYWJsZWQsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJ4X3Jlb3JkZXJfZGlzYWJsZWQsCisJCSAiSWYgdHJ1ZSwgUlggcmVvcmRlcmluZyB3aWxsIGJlIGRpc2FibGVkLiIpOworCiAvKioKICAqIGkyNDAwbV9xdWV1ZV93b3JrIC0gc2NoZWR1bGUgd29yayBvbiBhIGkyNDAwbSdzIHF1ZXVlCiAgKgpAQCAtMzk1LDYgKzQwMSw5IEBACiAJcmVzdWx0ID0gaTI0MDBtX3R4X3NldHVwKGkyNDAwbSk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfdHhfc2V0dXA7CisJcmVzdWx0ID0gaTI0MDBtX3J4X3NldHVwKGkyNDAwbSk7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3Jfcnhfc2V0dXA7CiAJcmVzdWx0ID0gaTI0MDBtLT5idXNfZGV2X3N0YXJ0KGkyNDAwbSk7CiAJaWYgKHJlc3VsdCA8IDApCiAJCWdvdG8gZXJyb3JfYnVzX2Rldl9zdGFydDsKQEAgLTQwNCw2ICs0MTMsOSBAQAogCQlkZXZfZXJyKGRldiwgImNhbm5vdCBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKIAkJZ290byBlcnJvcl9jcmVhdGVfd29ya3F1ZXVlOwogCX0KKwlyZXN1bHQgPSBpMjQwMG1fZmlybXdhcmVfY2hlY2soaTI0MDBtKTsJLyogZncgdmVyc2lvbnMgb2s/ICovCisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gZXJyb3JfZndfY2hlY2s7CiAJLyogQXQgdGhpcyBwb2ludCBpcyBvayB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UgKi8KIAlyZXN1bHQgPSBpMjQwMG1fY2hlY2tfbWFjX2FkZHIoaTI0MDBtKTsKIAlpZiAocmVzdWx0IDwgMCkKQEAgLTQyMSwxMCArNDMzLDEzIEBACiAKIGVycm9yX2Rldl9pbml0aWFsaXplOgogZXJyb3JfY2hlY2tfbWFjX2FkZHI6CitlcnJvcl9md19jaGVjazoKIAlkZXN0cm95X3dvcmtxdWV1ZShpMjQwMG0tPndvcmtfcXVldWUpOwogZXJyb3JfY3JlYXRlX3dvcmtxdWV1ZToKIAlpMjQwMG0tPmJ1c19kZXZfc3RvcChpMjQwMG0pOwogZXJyb3JfYnVzX2Rldl9zdGFydDoKKwlpMjQwMG1fcnhfcmVsZWFzZShpMjQwMG0pOworZXJyb3Jfcnhfc2V0dXA6CiAJaTI0MDBtX3R4X3JlbGVhc2UoaTI0MDBtKTsKIGVycm9yX3R4X3NldHVwOgogZXJyb3JfYm9vdHN0cmFwOgpAQCAtNDcyLDYgKzQ4Nyw3IEBACiAJaTI0MDBtLT5yZWFkeSA9IDA7CiAJZGVzdHJveV93b3JrcXVldWUoaTI0MDBtLT53b3JrX3F1ZXVlKTsKIAlpMjQwMG0tPmJ1c19kZXZfc3RvcChpMjQwMG0pOworCWkyNDAwbV9yeF9yZWxlYXNlKGkyNDAwbSk7CiAJaTI0MDBtX3R4X3JlbGVhc2UoaTI0MDBtKTsKIAl3aW1heF9zdGF0ZV9jaGFuZ2Uod2ltYXhfZGV2LCBXSU1BWF9TVF9ET1dOKTsKIAlkX2ZuZW5kKDMsIGRldiwgIihpMjQwMG0gJXApID0gMFxuIiwgaTI0MDBtKTsKQEAgLTYxMyw3ICs2MjksNyBAQAogCWRfZm5zdGFydCgzLCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKIAogCXNucHJpbnRmKHdpbWF4X2Rldi0+bmFtZSwgc2l6ZW9mKHdpbWF4X2Rldi0+bmFtZSksCi0JCSAiaTI0MDBtLSVzOiVzIiwgZGV2LT5idXMtPm5hbWUsIGRldi0+YnVzX2lkKTsKKwkJICJpMjQwMG0tJXM6JXMiLCBkZXYtPmJ1cy0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CiAKIAlpMjQwMG0tPmJtX2NtZF9idWYgPSBremFsbG9jKEkyNDAwTV9CTV9DTURfQlVGX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChpMjQwMG0tPmJtX2NtZF9idWYgPT0gTlVMTCkgewpAQCAtNjU3LDYgKzY3MywxMSBAQAogCXdpbWF4X3N0YXRlX2NoYW5nZSh3aW1heF9kZXYsIFdJTUFYX1NUX1VOSU5JVElBTElaRUQpOwogCiAJLyogTm93IHNldHVwIGFsbCB0aGF0IHJlcXVpcmVzIGEgcmVnaXN0ZXJlZCBuZXQgYW5kIHdpbWF4IGRldmljZS4gKi8KKwlyZXN1bHQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ldF9kZXYtPmRldi5rb2JqLCAmaTI0MDBtX2Rldl9hdHRyX2dyb3VwKTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImNhbm5vdCBzZXR1cCBpMjQwMG0ncyBzeXNmczogJWRcbiIsIHJlc3VsdCk7CisJCWdvdG8gZXJyb3Jfc3lzZnNfc2V0dXA7CisJfQogCXJlc3VsdCA9IGkyNDAwbV9kZWJ1Z2ZzX2FkZChpMjQwMG0pOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiY2Fubm90IHNldHVwIGkyNDAwbSdzIGRlYnVnZnM6ICVkXG4iLCByZXN1bHQpOwpAQCAtNjY2LDYgKzY4Nyw5IEBACiAJcmV0dXJuIHJlc3VsdDsKIAogZXJyb3JfZGVidWdmc19zZXR1cDoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYtPmRldi5rb2JqLAorCQkJICAgJmkyNDAwbV9kZXZfYXR0cl9ncm91cCk7CitlcnJvcl9zeXNmc19zZXR1cDoKIAl3aW1heF9kZXZfcm0oJmkyNDAwbS0+d2ltYXhfZGV2KTsKIGVycm9yX3dpbWF4X2Rldl9hZGQ6CiAJaTI0MDBtX2Rldl9zdG9wKGkyNDAwbSk7CkBAIC02OTcsNiArNzIxLDggQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYpOwogCiAJaTI0MDBtX2RlYnVnZnNfcm0oaTI0MDBtKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYtPmRldi5rb2JqLAorCQkJICAgJmkyNDAwbV9kZXZfYXR0cl9ncm91cCk7CiAJd2ltYXhfZGV2X3JtKCZpMjQwMG0tPndpbWF4X2Rldik7CiAJaTI0MDBtX2Rldl9zdG9wKGkyNDAwbSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoaTI0MDBtLT53aW1heF9kZXYubmV0X2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCmluZGV4IDFkODI3MWYuLjY3NWM2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCkBAIC0xNDAsMTAgKzE0MCwxMCBAQAogCiAKIHN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX0FDS19CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUikKKwljcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUiksCisJY3B1X3RvX2xlMzIoSTI0MDBNX0FDS19CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9BQ0tfQkFSS0VSKSwKKwljcHVfdG9fbGUzMihJMjQwME1fQUNLX0JBUktFUikKIH07CiAKIApAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCWlmIChvZmZzZXQgKyBzZWN0aW9uX3NpemUgPiBiY2ZfbGVuKSB7CiAJCQlkZXZfZXJyKGRldiwgImZ3ICVzOiBiYWQgc2VjdGlvbiAjJXp1LCAiCiAJCQkJImVuZCAoQCV6dSkgYmV5b25kIEVPRiAoQCV6dSlcbiIsCi0JCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgc2VjdGlvbiwKKwkJCQlpMjQwMG0tPmZ3X25hbWUsIHNlY3Rpb24sCiAJCQkJb2Zmc2V0ICsgc2VjdGlvbl9zaXplLCAgYmNmX2xlbik7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBlcnJvcl9zZWN0aW9uX2JleW9uZF9lb2Y7CkBAIC00OTMsNyArNDkzLDcgQEAKIAkJCQkgICAgJmFjaywgc2l6ZW9mKGFjayksIEkyNDAwTV9CTV9DTURfUkFXKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWRldl9lcnIoZGV2LCAiZncgJXM6IHNlY3Rpb24gIyV6dSAoQCV6dSAlenUgQikgIgotCQkJCSJmYWlsZWQgJWRcbiIsIGkyNDAwbS0+YnVzX2Z3X25hbWUsIHNlY3Rpb24sCisJCQkJImZhaWxlZCAlZFxuIiwgaTI0MDBtLT5md19uYW1lLCBzZWN0aW9uLAogCQkJCW9mZnNldCwgc2l6ZW9mKCpiaCkgKyBkYXRhX3NpemUsIChpbnQpIHJldCk7CiAJCQlnb3RvIGVycm9yX3NlbmQ7CiAJCX0KQEAgLTc3MSw4ICs3NzEsOCBAQAogaW50IGkyNDAwbV9kbmxvYWRfaW5pdF9ub25zaWduZWQoc3RydWN0IGkyNDAwbSAqaTI0MDBtKQogewogI2RlZmluZSBQT0tFKGEsIGQpIHsJCQkJCVwKLQkuYWRkcmVzcyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoYSksCQlcCi0JLmRhdGEgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKGQpCQlcCisJLmFkZHJlc3MgPSBjcHVfdG9fbGUzMihhKSwJCVwKKwkuZGF0YSA9IGNwdV90b19sZTMyKGQpCQlcCiB9CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJCV9fbGUzMiBhZGRyZXNzOwpAQCAtODc0LDcgKzg3NCw3IEBACiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZGV2X2VycihkZXYsICJmdyAlczogbm9uLXNpZ25lZCBkb3dubG9hZCAiCiAJCQkJImluaXRpYWxpemF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgcmVzdWx0KTsKKwkJCQlpMjQwMG0tPmZ3X25hbWUsIHJlc3VsdCk7CiAJfSBlbHNlIGlmIChpMjQwMG0tPnNib290ID09IDAKIAkJICYmIChtb2R1bGVfaWQgJiBJMjQwME1fQkNGX01PRF9JRF9QT0tFUykpIHsKIAkJLyogbm9uLXNpZ25lZCBib290IHByb2Nlc3Mgd2l0aCBwb2tlcywgbm90aGluZyB0byBkbyAqLwpAQCAtODg2LDcgKzg4Niw3IEBACiAJCWlmIChyZXN1bHQgPCAwKQogCQkJZGV2X2VycihkZXYsICJmdyAlczogc2lnbmVkIGJvb3QgZG93bmxvYWQgIgogCQkJCSJpbml0aWFsaXphdGlvbiBmYWlsZWQ6ICVkXG4iLAotCQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJlc3VsdCk7CisJCQkJaTI0MDBtLT5md19uYW1lLCByZXN1bHQpOwogCX0KIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtOTE1LDcgKzkxNSw3IEBACiAJaWYgKGJjZl9zaXplIDwgc2l6ZW9mKCpiY2YpKSB7CS8qIGJpZyBlbm91Z2ggaGVhZGVyPyAqLwogCQlkZXZfZXJyKGRldiwgImZpcm13YXJlICVzIHRvbyBzaG9ydDogIgogCQkJIiV6dSBCIHZzICV6dSAoYXQgbGVhc3QpIGV4cGVjdGVkXG4iLAotCQkJaTI0MDBtLT5idXNfZndfbmFtZSwgYmNmX3NpemUsIHNpemVvZigqYmNmKSk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIGJjZl9zaXplLCBzaXplb2YoKmJjZikpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtOTMxLDcgKzkzMSw3IEBACiAJaWYgKGJjZl9zaXplICE9IHNpemUpIHsJCS8qIGFubm95aW5nbHkgcGFyYW5vaWQgKi8KIAkJZGV2X2VycihkZXYsICJmaXJtd2FyZSAlczogYmFkIHNpemUsIGdvdCAiCiAJCQkiJXp1IEIgdnMgJXUgZXhwZWN0ZWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBiY2Zfc2l6ZSwgc2l6ZSk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIGJjZl9zaXplLCBzaXplKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTk0Myw3ICs5NDMsNyBAQAogCiAJaWYgKG1vZHVsZV90eXBlICE9IDYpIHsJCS8qIGJ1aWx0IGZvciB0aGUgcmlnaHQgaGFyZHdhcmU/ICovCiAJCWRldl9lcnIoZGV2LCAiYmFkIGZ3ICVzOiB1bmV4cGVjdGVkIG1vZHVsZSB0eXBlIDB4JXg7ICIKLQkJCSJhYm9ydGluZ1xuIiwgaTI0MDBtLT5idXNfZndfbmFtZSwgbW9kdWxlX3R5cGUpOworCQkJImFib3J0aW5nXG4iLCBpMjQwMG0tPmZ3X25hbWUsIG1vZHVsZV90eXBlKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTk1MSwxMCArOTUxLDEwIEBACiAJcmVzdWx0ID0gMDsKIAlpZiAobW9kdWxlX3ZlbmRvciAhPSAweDgwODYpCiAJCWRldl9lcnIoZGV2LCAiYmFkIGZ3ICVzPyB1bmV4cGVjdGVkIHZlbmRvciAweCUwNHhcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBtb2R1bGVfdmVuZG9yKTsKKwkJCWkyNDAwbS0+ZndfbmFtZSwgbW9kdWxlX3ZlbmRvcik7CiAJaWYgKGRhdGUgPCAweDIwMDgwMzAwKQogCQlkZXZfZXJyKGRldiwgImJhZCBmdyAlcz8gYnVpbGQgZGF0ZSB0b28gb2xkICUwOHhcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCBkYXRlKTsKKwkJCWkyNDAwbS0+ZndfbmFtZSwgZGF0ZSk7CiBlcnJvcjoKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAKIAkJZ290byBlcnJvcl9kZXZfcmVib290ZWQ7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJmdyAlczogZG93bmxvYWQgZmFpbGVkOiAlZFxuIiwKLQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJldCk7CisJCQlpMjQwMG0tPmZ3X25hbWUsIHJldCk7CiAJCWdvdG8gZXJyb3JfZG5sb2FkX2JjZjsKIAl9CiAKQEAgLTEwMjYsMTIgKzEwMjYsMTIgQEAKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgImZ3ICVzOiAiCiAJCQkiZG93bmxvYWQgZmluYWxpemF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQlpMjQwMG0tPmJ1c19md19uYW1lLCByZXQpOworCQkJaTI0MDBtLT5md19uYW1lLCByZXQpOwogCQlnb3RvIGVycm9yX2RubG9hZF9maW5hbGl6ZTsKIAl9CiAKIAlkX3ByaW50ZigyLCBkZXYsICJmdyAlcyBzdWNjZXNzZnVsbHkgdXBsb2FkZWRcbiIsCi0JCSBpMjQwMG0tPmJ1c19md19uYW1lKTsKKwkJIGkyNDAwbS0+ZndfbmFtZSk7CiAJaTI0MDBtLT5ib290X21vZGUgPSAwOwogZXJyb3JfZG5sb2FkX2ZpbmFsaXplOgogZXJyb3JfZG5sb2FkX2JjZjoKQEAgLTEwNjcsMjggKzEwNjcsNDEgQEAKICAqLwogaW50IGkyNDAwbV9kZXZfYm9vdHN0cmFwKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgZW51bSBpMjQwMG1fYnJpIGZsYWdzKQogewotCWludCByZXQgPSAwOworCWludCByZXQgPSAwLCBpdHIgPSAwOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwogCWNvbnN0IHN0cnVjdCBpMjQwMG1fYmNmX2hkciAqYmNmOwkvKiBGaXJtd2FyZSBkYXRhICovCisJY29uc3QgY2hhciAqZndfbmFtZTsKIAogCWRfZm5zdGFydCg1LCBkZXYsICIoaTI0MDBtICVwKVxuIiwgaTI0MDBtKTsKLQkvKiBMb2FkIGZpcm13YXJlIGZpbGVzIHRvIG1lbW9yeS4gKi8KLQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgaTI0MDBtLT5idXNfZndfbmFtZSwgZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAiZncgJXM6IHJlcXVlc3QgZmFpbGVkOiAlZFxuIiwKLQkJCWkyNDAwbS0+YnVzX2Z3X25hbWUsIHJldCk7Ci0JCWdvdG8gZXJyb3JfZndfcmVxOwotCX0KLQliY2YgPSAodm9pZCAqKSBmdy0+ZGF0YTsKIAorCS8qIExvYWQgZmlybXdhcmUgZmlsZXMgdG8gbWVtb3J5LiAqLworCWl0ciA9IDA7CisJd2hpbGUoMSkgeworCQlmd19uYW1lID0gaTI0MDBtLT5idXNfZndfbmFtZXNbaXRyXTsKKwkJaWYgKGZ3X25hbWUgPT0gTlVMTCkgeworCQkJZGV2X2VycihkZXYsICJDb3VsZCBub3QgZmluZCBhIHVzYWJsZSBmaXJtd2FyZSBpbWFnZVxuIik7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBlcnJvcl9ub19mdzsKKwkJfQorCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgZGV2KTsKKwkJaWYgKHJldCA9PSAwKQorCQkJYnJlYWs7CQkvKiBnb3QgaXQgKi8KKwkJaWYgKHJldCA8IDApCisJCQlkZXZfZXJyKGRldiwgImZ3ICVzOiBjYW5ub3QgbG9hZCBmaWxlOiAlZFxuIiwKKwkJCQlmd19uYW1lLCByZXQpOworCQlpdHIrKzsKKwl9CisKKwliY2YgPSAodm9pZCAqKSBmdy0+ZGF0YTsKKwlpMjQwMG0tPmZ3X25hbWUgPSBmd19uYW1lOwogCXJldCA9IGkyNDAwbV9md19jaGVjayhpMjQwMG0sIGJjZiwgZnctPnNpemUpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yX2Z3X2JhZDsKIAlyZXQgPSBpMjQwMG1fZndfZG5sb2FkKGkyNDAwbSwgYmNmLCBmdy0+c2l6ZSwgZmxhZ3MpOwogZXJyb3JfZndfYmFkOgogCXJlbGVhc2VfZmlybXdhcmUoZncpOwotZXJyb3JfZndfcmVxOgorZXJyb3Jfbm9fZnc6CiAJZF9mbmVuZCg1LCBkZXYsICIoaTI0MDBtICVwKSA9ICVkXG4iLCBpMjQwMG0sIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaCBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaAppbmRleCAzYjlkMjdlYS4uM2FlMmRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaApAQCAtMTU2LDEwICsxNTYsNiBAQAogfTsKIAogCi0vKiBGaXJtd2FyZSB2ZXJzaW9uIHdlIHJlcXVlc3Qgd2hlbiBwdWxsaW5nIHRoZSBmdyBpbWFnZSBmaWxlICovCi0jZGVmaW5lIEkyNDAwTV9GV19WRVJTSU9OICIxLjQiCi0KLQogLyoqCiAgKiBpMjQwMG1fcmVzZXRfdHlwZSAtIG1ldGhvZHMgdG8gcmVzZXQgYSBkZXZpY2UKICAqCkBAIC0xNzgsNiArMTc0LDcgQEAKIH07CiAKIHN0cnVjdCBpMjQwMG1fcmVzZXRfY3R4Oworc3RydWN0IGkyNDAwbV9yb3E7CiAKIC8qKgogICogc3RydWN0IGkyNDAwbSAtIGRlc2NyaXB0b3IgZm9yIGFuIEludGVsIDI0MDBtCkBAIC0yNDIsMTAgKzIzOSwxNCBAQAogICogICAgIFRoZSBjYWxsZXIgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrIGlmIHRoZSByZXNwb25zZSBpcyBhCiAgKiAgICAgYmFya2VyIHRoYXQgaW5kaWNhdGVzIHRoZSBkZXZpY2UgZ29pbmcgaW50byByZXNldCBtb2RlLgogICoKLSAqIEBidXNfZndfbmFtZTogW2ZpbGxdIG5hbWUgb2YgdGhlIGZpcm13YXJlIGltYWdlIChpbiBtb3N0IGNhc2VzLAotICogICAgIHRoZXkgYXJlIGFsbCB0aGUgc2FtZSBmb3IgYSBzaW5nbGUgcmVsZWFzZSwgZXhjZXB0IHRoYXQgdGhleQotICogICAgIGhhdmUgdGhlIHR5cGUgb2YgdGhlIGJ1cyBlbWJlZGRlZCBpbiB0aGUgbmFtZSAoZWc6Ci0gKiAgICAgaTI0MDBtLWZ3LVgtVkVSU0lPTi5zYmNmLCB3aGVyZSBYIGlzIHRoZSBidXMgbmFtZSkuCisgKiBAYnVzX2Z3X25hbWVzOiBbZmlsbF0gYSBOVUxMLXRlcm1pbmF0ZWQgYXJyYXkgd2l0aCB0aGUgbmFtZXMgb2YgdGhlCisgKiAgICAgZmlybXdhcmUgaW1hZ2VzIHRvIHRyeSBsb2FkaW5nLiBUaGlzIGlzIG1hZGUgYSBsaXN0IHNvIHdlIGNhbgorICogICAgIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBvZiBmaXJtd2FyZSByZWxlYXNlcyAoZWc6IGlmIHdlCisgKiAgICAgY2FuJ3QgZmluZCB0aGUgZGVmYXVsdCB2MS40LCB3ZSB0cnkgdjEuMykuIEluIGdlbmVyYWwsIHRoZSBuYW1lCisgKiAgICAgc2hvdWxkIGJlIGkyNDAwbS1mdy1YLVZFUlNJT04uc2JjZiwgd2hlcmUgWCBpcyB0aGUgYnVzIG5hbWUuCisgKiAgICAgVGhlIGxpc3QgaXMgdHJpZWQgaW4gb3JkZXIgYW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBsb2FkcyBpcworICogICAgIHVzZWQuIFRoZSBmdyBsb2FkZXIgd2lsbCBzZXQgaTI0MDBtLT5md19uYW1lIHRvIHBvaW50IHRvIHRoZQorICogICAgIGFjdGl2ZSBmaXJtd2FyZSBpbWFnZS4KICAqCiAgKiBAYnVzX2JtX21hY19hZGRyX2ltcGFpcmVkOiBbZmlsbF0gU2V0IHRvIHRydWUgaWYgdGhlIGRldmljZSdzIE1BQwogICogICAgIGFkZHJlc3MgcHJvdmlkZWQgaW4gYm9vdCBtb2RlIGlzIGtpbmQgb2YgYnJva2VuIGFuZCBuZWVkcyB0bwpAQCAtMjU3LDYgKzI1OCw5IEBACiAgKiAgICAgZm9yY2UgdGhpcyB0byBiZSB0aGUgZmlyc3QgZmllbGQgc28gdGhhdCB3ZSBjYW4gZ2V0IGZyb20KICAqICAgICBuZXRkZXZfcHJpdigpIHRoZSByaWdodCBwb2ludGVyLgogICoKKyAqIEByeF9yZW9yZGVyOiAxIGlmIFJYIHJlb3JkZXJpbmcgaXMgZW5hYmxlZDsgdGhpcyBjYW4gb25seSBiZQorICogICAgIHNldCBhdCBwcm9iZSB0aW1lLgorICoKICAqIEBzdGF0ZTogZGV2aWNlJ3Mgc3RhdGUgKGFzIHJlcG9ydGVkIGJ5IGl0KQogICoKICAqIEBzdGF0ZV93cTogd2FpdHF1ZXVlIHRoYXQgaXMgd29rZW4gdXAgd2hlbmV2ZXIgdGhlIHN0YXRlIGNoYW5nZXMKQEAgLTMxMyw2ICszMTcsMTIgQEAKICAqCiAgKiBAcnhfc2l6ZV9tYXg6IGJ1Z2dlc3QgUlggbWVzc2FnZSByZWNlaXZlZC4KICAqCisgKiBAcnhfcm9xOiBSWCBSZU9yZGVyIHF1ZXVlcy4gKGZ3ID49IHYxLjQpIFdoZW4gcGFja2V0cyBhcmUgcmVjZWl2ZWQKKyAqICAgICBvdXQgb2Ygb3JkZXIsIHRoZSBkZXZpY2Ugd2lsbCBhc2sgdGhlIGRyaXZlciB0byBob2xkIGNlcnRhaW4KKyAqICAgICBwYWNrZXRzIHVudGlsIHRoZSBvbmVzIHRoYXQgYXJlIHJlY2VpdmVkIG91dCBvZiBvcmRlciBjYW4gYmUKKyAqICAgICBkZWxpdmVyZWQuIFRoZW4gdGhlIGRyaXZlciBjYW4gcmVsZWFzZSB0aGVtIHRvIHRoZSBob3N0LiBTZWUKKyAqICAgICBkcml2ZXJzL25ldC9pMjQwMG0vcnguYyBmb3IgZGV0YWlscy4KKyAqCiAgKiBAaW5pdF9tdXRleDogTXV0ZXggdXNlZCBmb3Igc2VyaWFsaXppbmcgdGhlIGRldmljZSBicmluZ3VwCiAgKiAgICAgc2VxdWVuY2U7IHRoaXMgd2F5IGlmIHRoZSBkZXZpY2UgcmVib290cyBpbiB0aGUgbWlkZGxlLCB3ZQogICogICAgIGRvbid0IHRyeSB0byBkbyBhIGJyaW5ndXAgYWdhaW4gd2hpbGUgd2UgYXJlIHRlYXJpbmcgZG93biB0aGUKQEAgLTM2NCw2ICszNzQsMTEgQEAKICAqICAgICBUaGVzZSBoYXZlIHRvIGJlIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5LCBhIGNoaWxkIG9mCiAgKiAgICAgKHdpbWF4X2Rldi0+ZGVidWdmc19kZW50cnkpIHNvIHRoZXkgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGUKICAqICAgICBtb2R1bGUgdW5sb2FkcywgYXMgd2UgZG9uJ3Qga2VlcCBlYWNoIGRlbnRyeS4KKyAqCisgKiBAZndfbmFtZTogbmFtZSBvZiB0aGUgZmlybXdhcmUgaW1hZ2UgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgdXNlZC4KKyAqCisgKiBAZndfdmVyc2lvbjogdmVyc2lvbiBvZiB0aGUgZmlybXdhcmUgaW50ZXJmYWNlLCBNYWpvci5taW5vciwKKyAqICAgICBlbmNvZGVkIGluIHRoZSBoaWdoIHdvcmQgYW5kIGxvdyB3b3JkIChtYWpvciA8PCAxNiB8IG1pbm9yKS4KICAqLwogc3RydWN0IGkyNDAwbSB7CiAJc3RydWN0IHdpbWF4X2RldiB3aW1heF9kZXY7CS8qIEZJUlNUISBTZWUgZG9jICovCkBAIC0zNzIsNiArMzg3LDcgQEAKIAl1bnNpZ25lZCBib290X21vZGU6MTsJCS8qIGlzIHRoZSBkZXZpY2UgaW4gYm9vdCBtb2RlPyAqLwogCXVuc2lnbmVkIHNib290OjE7CQkvKiBzaWduZWQgb3IgdW5zaWduZWQgZncgYm9vdCAqLwogCXVuc2lnbmVkIHJlYWR5OjE7CQkvKiBhbGwgcHJvYmluZyBzdGVwcyBkb25lICovCisJdW5zaWduZWQgcnhfcmVvcmRlcjoxOwkJLyogUlggcmVvcmRlciBpcyBlbmFibGVkICovCiAJdTggdHJhY2VfbXNnX2Zyb21fdXNlcjsJCS8qIGVjaG8gcnggbXNncyB0byAndHJhY2UnIHBpcGUgKi8KIAkJCQkJLyogdHlwZWQgdTggc28gZGVidWdmcy91OCBjYW4gdHdlYWsgKi8KIAllbnVtIGkyNDAwbV9zeXN0ZW1fc3RhdGUgc3RhdGU7CkBAIC0zODgsNyArNDA0LDcgQEAKIAkJCQkgICBzaXplX3QsIGludCBmbGFncyk7CiAJc3NpemVfdCAoKmJ1c19ibV93YWl0X2Zvcl9hY2spKHN0cnVjdCBpMjQwMG0gKiwKIAkJCQkgICAgICAgc3RydWN0IGkyNDAwbV9ib290cm9tX2hlYWRlciAqLCBzaXplX3QpOwotCWNvbnN0IGNoYXIgKmJ1c19md19uYW1lOworCWNvbnN0IGNoYXIgKipidXNfZndfbmFtZXM7CiAJdW5zaWduZWQgYnVzX2JtX21hY19hZGRyX2ltcGFpcmVkOjE7CiAKIAlzcGlubG9ja190IHR4X2xvY2s7CQkvKiBwcm90ZWN0IFRYIHN0YXRlICovCkBAIC00MDAsMTAgKzQxNiwxMSBAQAogCXVuc2lnbmVkIHR4X3BsX251bSwgdHhfcGxfbWF4LCB0eF9wbF9taW4sCiAJCXR4X251bSwgdHhfc2l6ZV9hY2MsIHR4X3NpemVfbWluLCB0eF9zaXplX21heDsKIAotCS8qIFJYIHN0YXRzICovCisJLyogUlggc3R1ZmYgKi8KIAlzcGlubG9ja190IHJ4X2xvY2s7CQkvKiBwcm90ZWN0IFJYIHN0YXRlICovCiAJdW5zaWduZWQgcnhfcGxfbnVtLCByeF9wbF9tYXgsIHJ4X3BsX21pbiwKIAkJcnhfbnVtLCByeF9zaXplX2FjYywgcnhfc2l6ZV9taW4sIHJ4X3NpemVfbWF4OworCXN0cnVjdCBpMjQwMG1fcm9xICpyeF9yb3E7CS8qIG5vdCB1bmRlciByeF9sb2NrISAqLwogCiAJc3RydWN0IG11dGV4IG1zZ19tdXRleDsJCS8qIHNlcmlhbGl6ZSBjb21tYW5kIGV4ZWN1dGlvbiAqLwogCXN0cnVjdCBjb21wbGV0aW9uIG1zZ19jb21wbGV0aW9uOwpAQCAtNDIxLDYgKzQzOCw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKndha2VfdHhfc2tiOwogCiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnk7CisJY29uc3QgY2hhciAqZndfbmFtZTsJCS8qIG5hbWUgb2YgdGhlIGN1cnJlbnQgZmlybXdhcmUgaW1hZ2UgKi8KKwl1bnNpZ25lZCBsb25nIGZ3X3ZlcnNpb247CS8qIHZlcnNpb24gb2YgdGhlIGZpcm13YXJlIGludGVyZmFjZSAqLwogfTsKIAogCkBAIC00MzUsNiArNDU0LDcgQEAKIAl3aW1heF9kZXZfaW5pdCgmaTI0MDBtLT53aW1heF9kZXYpOwogCiAJaTI0MDBtLT5ib290X21vZGUgPSAxOworCWkyNDAwbS0+cnhfcmVvcmRlciA9IDE7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaTI0MDBtLT5zdGF0ZV93cSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaTI0MDBtLT50eF9sb2NrKTsKQEAgLTU3OCwxMiArNTk4LDE5IEBACiAgKiBEcml2ZXIgLyBkZXZpY2Ugc2V0dXAgYW5kIGludGVybmFsIGZ1bmN0aW9ucwogICovCiBleHRlcm4gdm9pZCBpMjQwMG1fbmV0ZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKK2V4dGVybiBpbnQgaTI0MDBtX3N5c2ZzX3NldHVwKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOworZXh0ZXJuIHZvaWQgaTI0MDBtX3N5c2ZzX3JlbGVhc2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKik7CiBleHRlcm4gaW50IGkyNDAwbV90eF9zZXR1cChzdHJ1Y3QgaTI0MDBtICopOwogZXh0ZXJuIHZvaWQgaTI0MDBtX3dha2VfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBpMjQwMG1fdHhfcmVsZWFzZShzdHJ1Y3QgaTI0MDBtICopOwogCitleHRlcm4gaW50IGkyNDAwbV9yeF9zZXR1cChzdHJ1Y3QgaTI0MDBtICopOworZXh0ZXJuIHZvaWQgaTI0MDBtX3J4X3JlbGVhc2Uoc3RydWN0IGkyNDAwbSAqKTsKKwogZXh0ZXJuIHZvaWQgaTI0MDBtX25ldF9yeChzdHJ1Y3QgaTI0MDBtICosIHN0cnVjdCBza19idWZmICosIHVuc2lnbmVkLAogCQkJICBjb25zdCB2b2lkICosIGludCk7CitleHRlcm4gdm9pZCBpMjQwMG1fbmV0X2VyeChzdHJ1Y3QgaTI0MDBtICosIHN0cnVjdCBza19idWZmICosCisJCQkgICBlbnVtIGkyNDAwbV9jcyk7CiBlbnVtIGkyNDAwbV9wdDsKIGV4dGVybiBpbnQgaTI0MDBtX3R4KHN0cnVjdCBpMjQwMG0gKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGVudW0gaTI0MDBtX3B0KTsKIApAQCAtNjY0LDE3ICs2OTEsMTcgQEAKIGV4dGVybiB2b2lkIGkyNDAwbV90eF9tc2dfc2VudChzdHJ1Y3QgaTI0MDBtICopOwogCiBzdGF0aWMgY29uc3QgX19sZTMyIGkyNDAwbV9OQk9PVF9CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKSwKLQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX05CT09UX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fTkJPT1RfQkFSS0VSKQorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9OQk9PVF9CQVJLRVIpCiB9OwogCiBzdGF0aWMgY29uc3QgX19sZTMyIGkyNDAwbV9TQk9PVF9CQVJLRVJbNF0gPSB7Ci0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKSwKLQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAotCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1NCT09UX0JBUktFUiksCi0JX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fU0JPT1RfQkFSS0VSKQorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpLAorCWNwdV90b19sZTMyKEkyNDAwTV9TQk9PVF9CQVJLRVIpCiB9OwogCiAKQEAgLTcyMSw2ICs3NDgsNyBAQAogZXh0ZXJuIGludCBpMjQwMG1fZmlybXdhcmVfY2hlY2soc3RydWN0IGkyNDAwbSAqKTsKIGV4dGVybiBpbnQgaTI0MDBtX3NldF9pbml0X2NvbmZpZyhzdHJ1Y3QgaTI0MDBtICosCiAJCQkJICBjb25zdCBzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgKiosIHNpemVfdCk7CitleHRlcm4gaW50IGkyNDAwbV9zZXRfaWRsZV90aW1lb3V0KHN0cnVjdCBpMjQwMG0gKiwgdW5zaWduZWQpOwogCiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnVzYl9nZXRfZXBkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgaW50IGVwKQpAQCAtNzMzLDYgKzc2MSwzMiBAQAogZXh0ZXJuIHZvaWQgaTI0MDBtX3JlcG9ydF90bHZfcmZfc3dpdGNoZXNfc3RhdHVzKAogCXN0cnVjdCBpMjQwMG0gKiwgY29uc3Qgc3RydWN0IGkyNDAwbV90bHZfcmZfc3dpdGNoZXNfc3RhdHVzICopOwogCisvKgorICogSGVscGVycyBmb3IgZmlybXdhcmUgYmFja3dhcmRzIGNvbXBhYmlsaXR5CisgKgorICogQXMgd2UgYWltIHRvIHN1cHBvcnQgYXQgbGVhc3QgdGhlIGZpcm13YXJlIHZlcnNpb24gdGhhdCB3YXMKKyAqIHJlbGVhc2VkIHdpdGggdGhlIHByZXZpb3VzIGtlcm5lbC9kcml2ZXIgcmVsZWFzZSwgc29tZSBjb2RlIHdpbGwgYmUKKyAqIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZWQgZGVwZW5kaW5nIG9uIHRoZSBmaXJtd2FyZSB2ZXJzaW9uLiBPbiBlYWNoCisgKiByZWxlYXNlLCB0aGUgY29kZSB0byBzdXBwb3J0IGZ3IHJlbGVhc2VzIHBhc3QgdGhlIGxhc3QgdHdvIG9uZXMKKyAqIHdpbGwgYmUgcHVyZ2VkLgorICoKKyAqIEJ5IG1ha2luZyBpdCBkZXBlbmQgb24gdGhpcyBtYWNyb3MsIGl0IGlzIGVhc2llciB0byBrZWVwIGl0IGEgdGFiCisgKiBvbiB3aGF0IGhhcyB0byBnbyBhbmQgd2hhdCBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGkyNDAwbV9sZV92MV8zKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwkvKiBydW5uaW5nIGZ3IGlzIGxvd2VyIG9yIHYxLjMgKi8KKwlyZXR1cm4gaTI0MDBtLT5md192ZXJzaW9uIDw9IDB4MDAwOTAwMDE7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGkyNDAwbV9nZV92MV80KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwkvKiBydW5uaW5nIGZ3IGlzIGhpZ2hlciBvciB2MS40ICovCisJcmV0dXJuIGkyNDAwbS0+ZndfdmVyc2lvbiA+PSAweDAwMDkwMDAyOworfQorCiAKIC8qCiAgKiBEbyBhIG1pbGxpc2Vjb25kLXNsZWVwIGZvciBhbGxvd2luZyB3aXJlc2hhcmsgdG8gZHVtcCBhbGwgdGhlIGRhdGEKQEAgLTc1MCw2ICs4MDQsNyBAQAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIAogZXh0ZXJuIGludCBpMjQwMG1faWRsZV9tb2RlX2Rpc2FibGVkOworZXh0ZXJuIGludCBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZDsKIAogCiAjZW5kaWYgLyogI2lmbmRlZiBfX0kyNDAwTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9uZXRkZXYuYwppbmRleCA2M2ZlNzA4Li42YjFmZTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL25ldGRldi5jCkBAIC0yOCwxMyArMjgsMTIgQEAKICAqIHNwYWNlIGFuZCBmcm9tIHRoZSBvdGhlciBzaWRlLiBUaGUgd29ybGQgaXMgKHNhZGx5KSBjb25maWd1cmVkIHRvCiAgKiB0YWtlIGluIG9ubHkgRXRoZXJuZXQgZGV2aWNlcy4uLgogICoKLSAqIEJlY2F1c2Ugb2YgdGhpcywgY3VycmVudGx5IHRoZXJlIGlzIGFuIGNvcHktZWFjaC1yeGVkLXBhY2tldAotICogb3ZlcmhlYWQgb24gdGhlIFJYIHBhdGguIEVhY2ggSVAgcGFja2V0IGhhcyB0byBiZSByZWFsbG9jYXRlZCB0bwotICogYWRkIGFuIGV0aGVybmV0IGhlYWRlciAoYXMgdGhlcmUgaXMgbm8gc3BhY2UgaW4gd2hhdCB3ZSBnZXQgZnJvbQotICogdGhlIGRldmljZSkuIFRoaXMgaXMgYSBrbm93biBkcmF3YmFjayBhbmQgY29taW5nIHZlcnNpb25zIG9mIHRoZQotICogZGV2aWNlJ3MgZmlybXdhcmUgYXJlIGJlaW5nIGNoYW5nZWQgdG8gYWRkIGhlYWRlciBzcGFjZSB0aGF0IGNhbiBiZQotICogdXNlZCB0byBpbnNlcnQgdGhlIGV0aGVybmV0IGhlYWRlciB3aXRob3V0IGhhdmluZyB0byByZWFsbG9jYXRlIGFuZAotICogY29weS4KKyAqIEJlY2F1c2Ugb2YgdGhpcywgd2hlbiB1c2luZyBmaXJtd2FyZXMgPD0gdjEuMywgdGhlcmUgaXMgYW4KKyAqIGNvcHktZWFjaC1yeGVkLXBhY2tldCBvdmVyaGVhZCBvbiB0aGUgUlggcGF0aC4gRWFjaCBJUCBwYWNrZXQgaGFzCisgKiB0byBiZSByZWFsbG9jYXRlZCB0byBhZGQgYW4gZXRoZXJuZXQgaGVhZGVyIChhcyB0aGVyZSBpcyBubyBzcGFjZQorICogaW4gd2hhdCB3ZSBnZXQgZnJvbSB0aGUgZGV2aWNlKS4gVGhpcyBpcyBhIGtub3duIGRyYXdiYWNrIGFuZAorICogZmlybXdhcmVzID49IDEuNCBhZGQgaGVhZGVyIHNwYWNlIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW5zZXJ0IHRoZQorICogZXRoZXJuZXQgaGVhZGVyIHdpdGhvdXQgaGF2aW5nIHRvIHJlYWxsb2NhdGUgYW5kIGNvcHkuCiAgKgogICogVFggZXJyb3IgaGFuZGxpbmcgaXMgdHJpY2t5OyBiZWNhdXNlIHdlIGhhdmUgdG8gRklGTy9xdWV1ZSB0aGUKICAqIGJ1ZmZlcnMgZm9yIHRyYW5zbWlzc2lvbiAoYXMgdGhlIGhhcmR3YXJlIGxpa2VzIGl0IGFnZ3JlZ2F0ZWQpLCB3ZQpAQCAtNjcsNyArNjYsOSBAQAogICogaTI0MDBtX3R4X3RpbWVvdXQgICAgICBDYWxsZWQgd2hlbiB0aGUgZGV2aWNlIHRpbWVzIG91dAogICoKICAqIGkyNDAwbV9uZXRfcnggICAgICAgICAgQ2FsbGVkIGJ5IHRoZSBSWCBjb2RlIHdoZW4gYSBkYXRhIGZyYW1lIGlzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIChmaXJtd2FyZSA8PSAxLjMpCisgKiBpMjQwMG1fbmV0X2VyeCAgICAgICAgIENhbGxlZCBieSB0aGUgUlggY29kZSB3aGVuIGEgZGF0YSBmcmFtZSBpcworICogICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUgKGZpcm13YXJlID49IDEuNCkuCiAgKiBpMjQwMG1fbmV0ZGV2X3NldHVwICAgIENhbGxlZCB0byBzZXR1cCBhbGwgdGhlIG5ldGRldiBzdHVmZiBmcm9tCiAgKiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jX25ldGRldi4KICAqLwpAQCAtMzk2LDMwICszOTcsMTggQEAKICAqIENyZWF0ZSBhIGZha2UgZXRoZXJuZXQgaGVhZGVyCiAgKgogICogRm9yIGVtdWxhdGluZyBhbiBldGhlcm5ldCBkZXZpY2UsIGV2ZXJ5IHJlY2VpdmVkIElQIGhlYWRlciBoYXMgdG8KLSAqIGJlIHByZWZpeGVkIHdpdGggYW4gZXRoZXJuZXQgaGVhZGVyLgotICoKLSAqIFdoYXQgd2UgcmVjZWl2ZSBoYXMgKHBvdGVudGlhbGx5KSBtYW55IElQIHBhY2tldHMgY29uY2F0ZW5hdGVkIHdpdGgKLSAqIG5vIEVUSF9ITEVOIGJ5dGVzIHByZWZpeGVkLiBUaHVzIHRoZXJlIGlzIG5vIHNwYWNlIGZvciBhbiBldGgKLSAqIGhlYWRlci4KLSAqCi0gKiBXZSB3b3VsZCBoYXZlIHRvIHJlYWxsb2NhdGUgb3IgZG8gdWdseSBmcmFnbWVudCB0cmlja3MgaW4gb3JkZXIgdG8KLSAqIGFkZCBpdC4KLSAqCi0gKiBCdXQgd2hhdCB3ZSBkbyBpcyB1c2UgdGhlIGhlYWRlciBzcGFjZSBvZiB0aGUgUlggdHJhbnNhY3Rpb24KLSAqICgqbXNnX2hkcikgYXMgd2UgZG9uJ3QgbmVlZCBpdCBhbnltb3JlOyB0aGVuIHdlJ2xsIHBvaW50IGFsbCB0aGUKLSAqIGRhdGEgc2ticyB0aGVyZSwgYXMgdGhleSBzaGFyZSB0aGUgc2FtZSBiYWNraW5nIHN0b3JlLgotICoKLSAqIFdlIG9ubHkgc3VwcG9ydCBJUHY0IGZvciB2MyBmaXJtd2FyZS4KKyAqIGJlIHByZWZpeGVkIHdpdGggYW4gZXRoZXJuZXQgaGVhZGVyLiBGYWtlIGl0IHdpdGggdGhlIGdpdmVuCisgKiBwcm90b2NvbC4KICAqLwogc3RhdGljCiB2b2lkIGkyNDAwbV9yeF9mYWtlX2V0aF9oZWFkZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkgICAgICAgdm9pZCAqX2V0aF9oZHIpCisJCQkgICAgICAgdm9pZCAqX2V0aF9oZHIsIF9fYmUxNiBwcm90b2NvbCkKIHsKIAlzdHJ1Y3QgZXRoaGRyICpldGhfaGRyID0gX2V0aF9oZHI7CiAKIAltZW1jcHkoZXRoX2hkci0+aF9kZXN0LCBuZXRfZGV2LT5kZXZfYWRkciwgc2l6ZW9mKGV0aF9oZHItPmhfZGVzdCkpOwogCW1lbXNldChldGhfaGRyLT5oX3NvdXJjZSwgMCwgc2l6ZW9mKGV0aF9oZHItPmhfZGVzdCkpOwotCWV0aF9oZHItPmhfcHJvdG8gPSBfX2NvbnN0YW50X2NwdV90b19iZTE2KEVUSF9QX0lQKTsKKwlldGhfaGRyLT5oX3Byb3RvID0gcHJvdG9jb2w7CiB9CiAKIApAQCAtNDMyLDYgKzQyMSwxMyBAQAogICogQGJ1ZjogcG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEKICAqIEBsZW46IGJ1ZmZlcidzIGxlbmd0aAogICoKKyAqIFRoaXMgaXMgb25seSB1c2VkIG5vdyBmb3IgdGhlIHYxLjMgZmlybXdhcmUuIEl0IHdpbGwgYmUgZGVwcmVjYXRlZAorICogaW4gPj0gMi42LjMxLgorICoKKyAqIE5vdGUgdGhhdCBkdWUgdG8gZmlybXdhcmUgbGltaXRhdGlvbnMsIHdlIGRvbid0IGhhdmUgc3BhY2UgdG8gYWRkCisgKiBhbiBldGhlcm5ldCBoZWFkZXIsIHNvIHdlIG5lZWQgdG8gY29weSBlYWNoIHBhY2tldC4gRmlybXdhcmUKKyAqIHZlcnNpb25zID49IHYxLjQgZml4IHRoaXMgW3NlZSBpMjQwMG1fbmV0X2VyeCgpXS4KKyAqCiAgKiBXZSBqdXN0IGNsb25lIHRoZSBza2IgYW5kIHNldCBpdCB1cCBzbyB0aGF0IGl0J3Mgc2tiLT5kYXRhIHBvaW50ZXIKICAqIHBvaW50cyB0byAiYnVmIiBhbmQgaXQncyBsZW5ndGguCiAgKgpAQCAtNDc4LDcgKzQ3NCw4IEBACiAJCW1lbWNweShza2JfcHV0KHNrYiwgYnVmX2xlbiksIGJ1ZiwgYnVmX2xlbik7CiAJfQogCWkyNDAwbV9yeF9mYWtlX2V0aF9oZWFkZXIoaTI0MDBtLT53aW1heF9kZXYubmV0X2RldiwKLQkJCQkgIHNrYi0+ZGF0YSAtIEVUSF9ITEVOKTsKKwkJCQkgIHNrYi0+ZGF0YSAtIEVUSF9ITEVOLAorCQkJCSAgY3B1X3RvX2JlMTYoRVRIX1BfSVApKTsKIAlza2Jfc2V0X21hY19oZWFkZXIoc2tiLCAtRVRIX0hMRU4pOwogCXNrYi0+ZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwpAQCAtNDk0LDYgKzQ5MSw3MyBAQAogfQogCiAKKy8qCisgKiBpMjQwMG1fbmV0X2VyeCAtIHBhc3MgYSBuZXR3b3JrIHBhY2tldCB0byB0aGUgc3RhY2sgKGV4dGVuZGVkIHZlcnNpb24pCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBza2I6IHRoZSBza2Igd2hlcmUgdGhlIHBhY2tldCBpcyAtIHRoZSBza2Igc2hvdWxkIGJlIHNldCB0byBwb2ludAorICogICAgIGF0IHRoZSBJUCBwYWNrZXQ7IHRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgZXRoZXJuZXQgaGVhZGVycyBpZgorICogICAgIG5lZWRlZC4KKyAqIEBjczogcGFja2V0IHR5cGUKKyAqCisgKiBUaGlzIGlzIG9ubHkgdXNlZCBub3cgZm9yIGZpcm13YXJlID49IHYxLjQuIE5vdGUgaXQgaXMgcXVpdGUKKyAqIHNpbWlsYXIgdG8gaTI0MDBtX25ldF9yeCgpICh1c2VkIG9ubHkgZm9yIHYxLjMgZmlybXdhcmUpLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbm9ybWFsbHkgcnVuIGZyb20gYSB0aHJlYWQgY29udGV4dC4gSG93ZXZlciwgd2UKKyAqIHN0aWxsIHVzZSBuZXRpZl9yeCgpIGluc3RlYWQgb2YgbmV0aWZfcmVjZWl2ZV9za2IoKSBhcyB3YXMKKyAqIHJlY29tbWVuZGVkIGluIHRoZSBtYWlsaW5nIGxpc3QuIFJlYXNvbiBpcyBpbiBzb21lIHN0cmVzcyB0ZXN0cworICogd2hlbiBzZW5kaW5nL3JlY2VpdmluZyBhIGxvdCBvZiBkYXRhIHdlIHNlZW0gdG8gaGl0IGEgc29mdGxvY2sgaW4KKyAqIHRoZSBrZXJuZWwncyBUQ1AgaW1wbGVtZW50YXRpb24gW2Fyb3VkbiB0Y3BfZGVsYXlfdGltZXIoKV0uIFVzaW5nCisgKiBuZXRpZl9yeCgpIHRvb2sgY2FyZSBvZiB0aGUgaXNzdWUuCisgKgorICogVGhpcyBpcywgb2YgY291cnNlLCBzdGlsbCBvcGVuIHRvIGRvIG1vcmUgcmVzZWFyY2ggb24gd2h5IHJ1bm5pbmcKKyAqIHdpdGggbmV0aWZfcmVjZWl2ZV9za2IoKSBoaXRzIHRoaXMgc29mdGxvY2suIEZJWE1FLgorICovCit2b2lkIGkyNDAwbV9uZXRfZXJ4KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgIGVudW0gaTI0MDBtX2NzIGNzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisJaW50IHByb3RvY29sOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgc2tiICVwIFsldV0gY3MgJWQpXG4iLAorCQkgIGkyNDAwbSwgc2tiLCBza2ItPmxlbiwgY3MpOworCXN3aXRjaChjcykgeworCWNhc2UgSTI0MDBNX0NTX0lQVjRfMDoKKwljYXNlIEkyNDAwTV9DU19JUFY0OgorCQlwcm90b2NvbCA9IEVUSF9QX0lQOworCQlpMjQwMG1fcnhfZmFrZV9ldGhfaGVhZGVyKGkyNDAwbS0+d2ltYXhfZGV2Lm5ldF9kZXYsCisJCQkJCSAgc2tiLT5kYXRhIC0gRVRIX0hMRU4sCisJCQkJCSAgY3B1X3RvX2JlMTYoRVRIX1BfSVApKTsKKwkJc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgLUVUSF9ITEVOKTsKKwkJc2tiLT5kZXYgPSBpMjQwMG0tPndpbWF4X2Rldi5uZXRfZGV2OworCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOworCQluZXRfZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCW5ldF9kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgIkVSWDogQlVHPyBDUyB0eXBlICV1IHVuc3VwcG9ydGVkXG4iLCBjcyk7CisJCWdvdG8gZXJyb3I7CisKKwl9CisJZF9wcmludGYoMywgZGV2LCAiRVJYOiByZWNlaXZpbmcgJWQgYnl0ZXMgdG8gdGhlIG5ldHdvcmsgc3RhY2tcbiIsCisJCSBza2ItPmxlbik7CisJZF9kdW1wKDQsIGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJbmV0aWZfcnhfbmkoc2tiKTsJLyogc2VlIG5vdGVzIGluIGZ1bmN0aW9uIGhlYWRlciAqLworZXJyb3I6CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYiAlcCBbJXVdIGNzICVkKSA9IHZvaWRcbiIsCisJCWkyNDAwbSwgc2tiLCBza2ItPmxlbiwgY3MpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGkyNDAwbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGkyNDAwbV9vcGVuLAorCS5uZG9fc3RvcCA9IGkyNDAwbV9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdCA9IGkyNDAwbV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0ID0gaTI0MDBtX3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1ID0gaTI0MDBtX2NoYW5nZV9tdHUsCit9OworCisKIC8qKgogICogaTI0MDBtX25ldGRldl9zZXR1cCAtIFNldHVwIHNldHVwIEBuZXRfZGV2J3MgaTI0MDBtIHByaXZhdGUgZGF0YQogICoKQEAgLTUxMywxMSArNTc3LDcgQEAKIAkJJiAofklGRl9CUk9BRENBU1QJLyogaTI0MDBtIGlzIFAyUCAqLwogCQkgICAmIH5JRkZfTVVMVElDQVNUKTsKIAluZXRfZGV2LT53YXRjaGRvZ190aW1lbyA9IEkyNDAwTV9UWF9USU1FT1VUOwotCW5ldF9kZXYtPm9wZW4gPSBpMjQwMG1fb3BlbjsKLQluZXRfZGV2LT5zdG9wID0gaTI0MDBtX3N0b3A7Ci0JbmV0X2Rldi0+aGFyZF9zdGFydF94bWl0ID0gaTI0MDBtX2hhcmRfc3RhcnRfeG1pdDsKLQluZXRfZGV2LT5jaGFuZ2VfbXR1ID0gaTI0MDBtX2NoYW5nZV9tdHU7Ci0JbmV0X2Rldi0+dHhfdGltZW91dCA9IGkyNDAwbV90eF90aW1lb3V0OworCW5ldF9kZXYtPm5ldGRldl9vcHMgPSAmaTI0MDBtX25ldGRldl9vcHM7CiAJZF9mbmVuZCgzLCBOVUxMLCAiKG5ldF9kZXYgJXApID0gdm9pZFxuIiwgbmV0X2Rldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpMjQwMG1fbmV0ZGV2X3NldHVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3J4LmMKaW5kZXggNjkyMjAyMjcuLjAyNDE5YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9yeC5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiAgLSBVc2Ugc2tiX2Nsb25lKCksIGJyZWFrIHVwIHByb2Nlc3NpbmcgaW4gY2h1bmtzCiAgKiAgLSBTcGxpdCB0cmFuc3BvcnQvZGV2aWNlIHNwZWNpZmljCiAgKiAgLSBNYWtlIGJ1ZmZlciBzaXplIGR5bmFtaWMgdG8gZXhlcnQgbGVzcyBtZW1vcnkgcHJlc3N1cmUKLSAqCisgKiAgLSBSWCByZW9yZGVyIHN1cHBvcnQKICAqCiAgKiBUaGlzIGhhbmRsZXMgdGhlIFJYIHBhdGguCiAgKgpAQCAtNjksNiArNjksNTAgQEAKICAqIFNlZSB0eC5jIGZvciBhIGRlZXBlciBkZXNjcmlwdGlvbiBvbiBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGFuZAogICogb3RoZXIgZnVuIGZhY3RzIG9mIGl0LgogICoKKyAqIERBVEEgUEFDS0VUUworICoKKyAqIEluIGZpcm13YXJlcyA8PSB2MS4zLCBkYXRhIHBhY2tldHMgaGF2ZSBubyBoZWFkZXIgZm9yIFJYLCBidXQgdGhleQorICogZG8gZm9yIFRYIChjdXJyZW50bHkgdW51c2VkKS4KKyAqCisgKiBJbiBmaXJtd2FyZSA+PSAxLjQsIFJYIHBhY2tldHMgaGF2ZSBhbiBleHRlbmRlZCBoZWFkZXIgKDE2CisgKiBieXRlcykuIFRoaXMgaGVhZGVyIGNvbnZleXMgaW5mb3JtYXRpb24gZm9yIG1hbmFnZW1lbnQgb2YgaG9zdAorICogcmVvcmRlcmluZyBvZiBwYWNrZXRzICh0aGUgZGV2aWNlIG9mZmxvYWRzIHN0b3JhZ2Ugb2YgdGhlIHBhY2tldHMKKyAqIGZvciByZW9yZGVyaW5nIHRvIHRoZSBob3N0KS4gUmVhZCBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGUgaGVhZGVyIGlzIHVzZWQgYXMgZHVtbXkgc3BhY2UgdG8gZW11bGF0ZSBhbiBldGhlcm5ldCBoZWFkZXIgYW5kCisgKiB0aHVzIGJlIGFibGUgdG8gYWN0IGFzIGFuIGV0aGVybmV0IGRldmljZSB3aXRob3V0IGhhdmluZyB0byByZWFsbG9jYXRlLgorICoKKyAqIERBVEEgUlggUkVPUkRFUklORworICoKKyAqIFN0YXJ0aW5nIGluIGZpcm13YXJlIHYxLjQsIHRoZSBkZXZpY2UgY2FuIGRlbGl2ZXIgcGFja2V0cyBmb3IKKyAqIGRlbGl2ZXJ5IHdpdGggc3BlY2lhbCByZW9yZGVyaW5nIGluZm9ybWF0aW9uOyB0aGlzIGFsbG93cyBpdCB0bworICogbW9yZSBlZmZlY3RpdmVseSBkbyBwYWNrZXQgbWFuYWdlbWVudCB3aGVuIHNvbWUgZnJhbWVzIHdlcmUgbG9zdCBpbgorICogdGhlIHJhZGlvIHRyYWZmaWMuCisgKgorICogVGh1cywgZm9yIFJYIHBhY2tldHMgdGhhdCBjb21lIG91dCBvZiBvcmRlciwgdGhlIGRldmljZSBnaXZlcyB0aGUKKyAqIGRyaXZlciBlbm91Z2ggaW5mb3JtYXRpb24gdG8gcXVldWUgdGhlbSBwcm9wZXJseSBhbmQgdGhlbiBhdCBzb21lCisgKiBwb2ludCwgdGhlIHNpZ25hbCB0byBkZWxpdmVyIHRoZSB3aG9sZSAob3IgcGFydCkgb2YgdGhlIHF1ZXVlZAorICogcGFja2V0cyB0byB0aGUgbmV0d29ya2luZyBzdGFjay4gVGhlcmUgYXJlIDE2IHN1Y2ggcXVldWVzLgorICoKKyAqIFRoaXMgb25seSBoYXBwZW5zIHdoZW4gYSBwYWNrZXQgY29tZXMgaW4gd2l0aCB0aGUgIm5lZWQgcmVvcmRlciIKKyAqIGZsYWcgc2V0IGluIHRoZSBSWCBoZWFkZXIuIFdoZW4gc3VjaCBiaXQgaXMgc2V0LCB0aGUgZm9sbG93aW5nCisgKiBvcGVyYXRpb25zIG1pZ2h0IGJlIGluZGljYXRlZDoKKyAqCisgKiAgLSByZXNldCBxdWV1ZTogc2VuZCBhbGwgcXVldWVkIHBhY2tldHMgdG8gdGhlIE9TCisgKgorICogIC0gcXVldWU6IHF1ZXVlIGEgcGFja2V0CisgKgorICogIC0gdXBkYXRlIHdzOiB1cGRhdGUgdGhlIHF1ZXVlJ3Mgd2luZG93IHN0YXJ0IGFuZCBkZWxpdmVyIHF1ZXVlZAorICogICAgcGFja2V0cyB0aGF0IG1lZXQgdGhlIGNyaXRlcmlhCisgKgorICogIC0gcXVldWUgJiB1cGRhdGUgd3M6IHF1ZXVlIGEgcGFja2V0LCB1cGRhdGUgdGhlIHdpbmRvdyBzdGFydCBhbmQKKyAqICAgIGRlbGl2ZXIgcXVldWVkIHBhY2tldHMgdGhhdCBtZWV0IHRoZSBjcml0ZXJpYQorICoKKyAqIChkZWxpdmVyeSBjcml0ZXJpYTogdGhlIHBhY2tldCdzIFtub3JtYWxpemVkXSBzZXF1ZW5jZSBudW1iZXIgaXMKKyAqIGxvd2VyIHRoYW4gdGhlIG5ldyBbbm9ybWFsaXplZF0gd2luZG93IHN0YXJ0KS4KKyAqCisgKiBTZWUgdGhlIGkyNDAwbV9yb3FfKigpIGZ1bmN0aW9ucyBmb3IgZGV0YWlscy4KKyAqCiAgKiBST0FETUFQCiAgKgogICogaTI0MDBtX3J4CkBAIC03Niw2ICsxMjAsMTkgQEAKICAqICAgaTI0MDBtX3J4X3BsX2Rlc2NyX2NoZWNrCiAgKiAgIGkyNDAwbV9yeF9wYXlsb2FkCiAgKiAgICAgaTI0MDBtX25ldF9yeAorICogICAgIGkyNDAwbV9yeF9lZGF0YQorICogICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcmVzZXQKKyAqICAgICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcXVldWUKKyAqICAgICAgICAgX19pMjQwMG1fcm9xX3F1ZXVlCisgKiAgICAgICBpMjQwMG1fcm9xX3VwZGF0ZV93cworICogICAgICAgICBfX2kyNDAwbV9yb3FfdXBkYXRlX3dzCisgKiAgICAgICAgICAgaTI0MDBtX25ldF9lcngKKyAqICAgICAgIGkyNDAwbV9yb3FfcXVldWVfdXBkYXRlX3dzCisgKiAgICAgICAgIF9faTI0MDBtX3JvcV9xdWV1ZQorICogICAgICAgICBfX2kyNDAwbV9yb3FfdXBkYXRlX3dzCisgKiAgICAgICAgICAgaTI0MDBtX25ldF9lcngKICAqICAgICBpMjQwMG1fcnhfY3RsCiAgKiAgICAgICBpMjQwMG1fbXNnX3NpemVfY2hlY2sKICAqICAgICAgIGkyNDAwbV9yZXBvcnRfaG9va193b3JrICAgIFtpbiBhIHdvcmtxdWV1ZV0KQEAgLTE3Nyw4ICsyMzQsNyBAQAogCXJldHVybjsKIAogZXJyb3Jfd2FpdGVyX2NhbmNlbGxlZDoKLQlpZiAoYWNrX3NrYikKLQkJa2ZyZWVfc2tiKGFja19za2IpOworCWtmcmVlX3NrYihhY2tfc2tiKTsKIGVycm9yX25vX3dhaXRlcjoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpMjQwMG0tPnJ4X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm47CkBAIC0yNjUsOCArMzIxLDYgQEAKIH0KIAogCi0KLQogLyoKICAqIFJlY2VpdmUgYW5kIHNlbmQgdXAgYSB0cmFjZQogICoKQEAgLTMxNywzMCArMzcxLDYyOCBAQAogCiAKIC8qCisgKiBSZW9yZGVyIHF1ZXVlIGRhdGEgc3RvcmVkIG9uIHNrYi0+Y2Igd2hpbGUgdGhlIHNrYiBpcyBxdWV1ZWQgaW4gdGhlCisgKiByZW9yZGVyIHF1ZXVlcy4KKyAqLworc3RydWN0IGkyNDAwbV9yb3FfZGF0YSB7CisJdW5zaWduZWQgc247CQkvKiBTZXJpYWwgbnVtYmVyIGZvciB0aGUgc2tiICovCisJZW51bSBpMjQwMG1fY3MgY3M7CS8qIHBhY2tldCB0eXBlIGZvciB0aGUgc2tiICovCit9OworCisKKy8qCisgKiBSZU9yZGVyIFF1ZXVlCisgKgorICogQHdzOiBXaW5kb3cgU3RhcnQ7IHNlcXVlbmNlIG51bWJlciB3aGVyZSB0aGUgY3VycmVudCB3aW5kb3cgc3RhcnQKKyAqICAgICBpcyBmb3IgdGhpcyBxdWV1ZQorICogQHF1ZXVlOiB0aGUgc2tiIHF1ZXVlIGl0c2VsZgorICogQGxvZzogY2lyY3VsYXIgcmluZyBidWZmZXIgdXNlZCB0byBsb2cgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgKiAgICAgcmVvcmRlciBwcm9jZXNzIGluIHRoaXMgcXVldWUgdGhhdCBjYW4gYmUgZGlzcGxheWVkIGluIGNhc2Ugb2YKKyAqICAgICBlcnJvciB0byBoZWxwIGRpYWdub3NlIGl0LgorICoKKyAqIFRoaXMgaXMgdGhlIGhlYWQgZm9yIGEgbGlzdCBvZiBza2JzLiBJbiB0aGUgc2tiLT5jYiBtZW1iZXIgb2YgdGhlCisgKiBza2Igd2hlbiBxdWV1ZWQgaGVyZSBjb250YWlucyBhICdzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhJyB3ZXJlIHdlCisgKiBzdG9yZSB0aGUgc2VxdWVuY2UgbnVtYmVyIChzbikgYW5kIHRoZSBjcyAocGFja2V0IHR5cGUpIGNvbWluZyBmcm9tCisgKiB0aGUgUlggcGF5bG9hZCBoZWFkZXIgZnJvbSB0aGUgZGV2aWNlLgorICovCitzdHJ1Y3QgaTI0MDBtX3JvcQoreworCXVuc2lnbmVkIHdzOworCXN0cnVjdCBza19idWZmX2hlYWQgcXVldWU7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nICpsb2c7Cit9OworCisKK3N0YXRpYwordm9pZCBfX2kyNDAwbV9yb3FfaW5pdChzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xKQoreworCXJvcS0+d3MgPSAwOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnJvcS0+cXVldWUpOworfQorCisKK3N0YXRpYwordW5zaWduZWQgX19pMjQwMG1fcm9xX2luZGV4KHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSByb3EgLSAodW5zaWduZWQgbG9uZykgaTI0MDBtLT5yeF9yb3EpCisJCS8gc2l6ZW9mKCpyb3EpOworfQorCisKKy8qCisgKiBOb3JtYWxpemUgYSBzZXF1ZW5jZSBudW1iZXIgYmFzZWQgb24gdGhlIHF1ZXVlJ3Mgd2luZG93IHN0YXJ0CisgKgorICogbnNuID0gKHNuIC0gd3MpICUgMjA0OAorICoKKyAqIE5vdGUgdGhhdCBpZiBAc24gPCBAcm9xLT53cywgd2Ugc3RpbGwgbmVlZCBhIHBvc2l0aXZlIG51bWJlcjsgJSdzCisgKiBzaWduIGlzIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLCBzbyB3ZSBub3JtYWxpemUgaXQgYnkgYWRkaW5nIDIwNDgKKyAqIHRvIGJyaW5nIGl0IHRvIGJlIHBvc2l0aXZlLgorICovCitzdGF0aWMKK3Vuc2lnbmVkIF9faTI0MDBtX3JvcV9uc24oc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwgdW5zaWduZWQgc24pCit7CisJaW50IHI7CisJciA9ICAoKGludCkgc24gLSAoaW50KSByb3EtPndzKSAlIDIwNDg7CisJaWYgKHIgPCAwKQorCQlyICs9IDIwNDg7CisJcmV0dXJuIHI7Cit9CisKKworLyoKKyAqIENpcmN1bGFyIGJ1ZmZlciB0byBrZWVwIHRoZSBsYXN0IE4gcmVvcmRlciBvcGVyYXRpb25zCisgKgorICogSW4gY2FzZSBzb21ldGhpbmcgZmFpbHMsIGR1bWIgdGhlbiB0byB0cnkgdG8gY29tZSB1cCB3aXRoIHdoYXQKKyAqIGhhcHBlbmVkLgorICovCitlbnVtIHsKKwlJMjQwME1fUk9RX0xPR19MRU5HVEggPSAzMiwKK307CisKK3N0cnVjdCBpMjQwMG1fcm9xX2xvZyB7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5IHsKKwkJZW51bSBpMjQwMG1fcm9fdHlwZSB0eXBlOworCQl1bnNpZ25lZCB3cywgY291bnQsIHNuLCBuc24sIG5ld193czsKKwl9IGVudHJ5W0kyNDAwTV9ST1FfTE9HX0xFTkdUSF07CisJdW5zaWduZWQgaW4sIG91dDsKK307CisKKworLyogUHJpbnQgYSBsb2cgZW50cnkgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19lbnRyeV9wcmludChzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHVuc2lnbmVkIGluZGV4LAorCQkJCXVuc2lnbmVkIGVfaW5kZXgsCisJCQkJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5ICplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKworCXN3aXRjaChlLT50eXBlKSB7CisJY2FzZSBJMjQwME1fUk9fVFlQRV9SRVNFVDoKKwkJZGV2X2VycihkZXYsICJxIyVkIHJlc2V0ICAgICAgICAgICB3cyAldSBjbnQgJXUgc24gJXUvJXUiCisJCQkiIC0gbmV3IG53cyAldVxuIiwKKwkJCWluZGV4LCBlLT53cywgZS0+Y291bnQsIGUtPnNuLCBlLT5uc24sIGUtPm5ld193cyk7CisJCWJyZWFrOworCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUOgorCQlkZXZfZXJyKGRldiwgInEjJWQgcXVldWUgICAgICAgICAgIHdzICV1IGNudCAldSBzbiAldS8ldVxuIiwKKwkJCWluZGV4LCBlLT53cywgZS0+Y291bnQsIGUtPnNuLCBlLT5uc24pOworCQlicmVhazsKKwljYXNlIEkyNDAwTV9ST19UWVBFX1dTOgorCQlkZXZfZXJyKGRldiwgInEjJWQgdXBkYXRlX3dzICAgICAgIHdzICV1IGNudCAldSBzbiAldS8ldSIKKwkJCSIgLSBuZXcgbndzICV1XG4iLAorCQkJaW5kZXgsIGUtPndzLCBlLT5jb3VudCwgZS0+c24sIGUtPm5zbiwgZS0+bmV3X3dzKTsKKwkJYnJlYWs7CisJY2FzZSBJMjQwME1fUk9fVFlQRV9QQUNLRVRfV1M6CisJCWRldl9lcnIoZGV2LCAicSMlZCBxdWV1ZV91cGRhdGVfd3Mgd3MgJXUgY250ICV1IHNuICV1LyV1IgorCQkJIiAtIG5ldyBud3MgJXVcbiIsCisJCQlpbmRleCwgZS0+d3MsIGUtPmNvdW50LCBlLT5zbiwgZS0+bnNuLCBlLT5uZXdfd3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgInEjJWQgQlVHPyBlbnRyeSAldSAtIHVua25vd24gdHlwZSAldVxuIiwKKwkJCWluZGV4LCBlX2luZGV4LCBlLT50eXBlKTsKKwkJYnJlYWs7CisJfQorfQorCisKK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19hZGQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLAorCQkJc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwgZW51bSBpMjQwMG1fcm9fdHlwZSB0eXBlLAorCQkJdW5zaWduZWQgd3MsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCBzbiwKKwkJCXVuc2lnbmVkIG5zbiwgdW5zaWduZWQgbmV3X3dzKQoreworCXN0cnVjdCBpMjQwMG1fcm9xX2xvZ19lbnRyeSAqZTsKKwl1bnNpZ25lZCBjbnRfaWR4OworCWludCBpbmRleCA9IF9faTI0MDBtX3JvcV9pbmRleChpMjQwMG0sIHJvcSk7CisKKwkvKiBpZiB3ZSBydW4gb3V0IG9mIHNwYWNlLCB3ZSBlYXQgZnJvbSB0aGUgZW5kICovCisJaWYgKHJvcS0+bG9nLT5pbiAtIHJvcS0+bG9nLT5vdXQgPT0gSTI0MDBNX1JPUV9MT0dfTEVOR1RIKQorCQlyb3EtPmxvZy0+b3V0Kys7CisJY250X2lkeCA9IHJvcS0+bG9nLT5pbisrICUgSTI0MDBNX1JPUV9MT0dfTEVOR1RIOworCWUgPSAmcm9xLT5sb2ctPmVudHJ5W2NudF9pZHhdOworCisJZS0+dHlwZSA9IHR5cGU7CisJZS0+d3MgPSB3czsKKwllLT5jb3VudCA9IGNvdW50OworCWUtPnNuID0gc247CisJZS0+bnNuID0gbnNuOworCWUtPm5ld193cyA9IG5ld193czsKKworCWlmIChkX3Rlc3QoMSkpCisJCWkyNDAwbV9yb3FfbG9nX2VudHJ5X3ByaW50KGkyNDAwbSwgaW5kZXgsIGNudF9pZHgsIGUpOworfQorCisKKy8qIER1bXAgYWxsIHRoZSBlbnRyaWVzIGluIHRoZSBGSUZPIGFuZCByZWluaXRpYWxpemUgaXQgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX2xvZ19kdW1wKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSkKK3sKKwl1bnNpZ25lZCBjbnQsIGNudF9pZHg7CisJc3RydWN0IGkyNDAwbV9yb3FfbG9nX2VudHJ5ICplOworCWludCBpbmRleCA9IF9faTI0MDBtX3JvcV9pbmRleChpMjQwMG0sIHJvcSk7CisKKwlCVUdfT04ocm9xLT5sb2ctPm91dCA+IHJvcS0+bG9nLT5pbik7CisJZm9yIChjbnQgPSByb3EtPmxvZy0+b3V0OyBjbnQgPCByb3EtPmxvZy0+aW47IGNudCsrKSB7CisJCWNudF9pZHggPSBjbnQgJSBJMjQwME1fUk9RX0xPR19MRU5HVEg7CisJCWUgPSAmcm9xLT5sb2ctPmVudHJ5W2NudF9pZHhdOworCQlpMjQwMG1fcm9xX2xvZ19lbnRyeV9wcmludChpMjQwMG0sIGluZGV4LCBjbnRfaWR4LCBlKTsKKwkJbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCX0KKwlyb3EtPmxvZy0+aW4gPSByb3EtPmxvZy0+b3V0ID0gMDsKK30KKworCisvKgorICogQmFja2JvbmUgZm9yIHRoZSBxdWV1aW5nIG9mIGFuIHNrYiAoYnkgbm9ybWFsaXplZCBzZXF1ZW5jZSBudW1iZXIpCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEByb3E6IHJlb3JkZXIgcXVldWUgd2hlcmUgdG8gYWRkCisgKiBAc2tiOiB0aGUgc2tiIHRvIGFkZAorICogQHNuOiB0aGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBza2IKKyAqIEBuc246IHRoZSBub3JtYWxpemVkIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgc2tiIChwcmUtY29tcHV0ZWQgYnkgdGhlCisgKiAgICAgY2FsbGVyIGZyb20gdGhlIEBzbiBhbmQgQHJvcS0+d3MpLgorICoKKyAqIFdlIHRyeSBmaXJzdCBhIGNvdXBsZSBvZiBxdWljayBjYXNlczoKKyAqCisgKiAgIC0gdGhlIHF1ZXVlIGlzIGVtcHR5CisgKiAgIC0gdGhlIHNrYiB3b3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgcXVldWUKKyAqCisgKiBUaGVzZSB3aWxsIGJlIHRoZSBtb3N0IGNvbW1vbiBvcGVyYXRpb25zLgorICoKKyAqIElmIHRoZXNlIGZhaWwsIHRoZW4gd2UgaGF2ZSB0byBkbyBhIHNvcnRlZCBpbnNlcnRpb24gaW4gdGhlIHF1ZXVlLAorICogd2hpY2ggaXMgdGhlIHNsb3dlc3QgcGF0aC4KKyAqCisgKiBXZSBkb24ndCBoYXZlIHRvIGFjcXVpcmUgYSByZWZlcmVuY2UgY291bnQgYXMgd2UgYXJlIGdvaW5nIHRvIG93biBpdC4KKyAqLworc3RhdGljCit2b2lkIF9faTI0MDBtX3JvcV9xdWV1ZShzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBzbiwgdW5zaWduZWQgbnNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2l0cjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICpyb3FfZGF0YV9pdHIsICpyb3FfZGF0YTsKKwl1bnNpZ25lZCBuc25faXRyOworCisJZF9mbnN0YXJ0KDQsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSBuc24gJXUpXG4iLAorCQkgIGkyNDAwbSwgcm9xLCBza2IsIHNuLCBuc24pOworCisJcm9xX2RhdGEgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiLT5jYjsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKCpyb3FfZGF0YSkgPiBzaXplb2Yoc2tiLT5jYikpOworCXJvcV9kYXRhLT5zbiA9IHNuOworCWRfcHJpbnRmKDMsIGRldiwgIkVSWDogcm9xICVwIFt3cyAldV0gbnNuICVkIHNuICV1XG4iLAorCQkgcm9xLCByb3EtPndzLCBuc24sIHJvcV9kYXRhLT5zbik7CisKKwkvKiBRdWV1ZXMgd2lsbCBiZSBlbXB0eSBvbiBub3Qtc28tYmFkIGVudmlyb25tZW50cywgc28gdHJ5CisJICogdGhhdCBmaXJzdCAqLworCWlmIChza2JfcXVldWVfZW1wdHkoJnJvcS0+cXVldWUpKSB7CisJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcm9xICVwIC0gZmlyc3Qgb25lXG4iLCByb3EpOworCQlfX3NrYl9xdWV1ZV9oZWFkKCZyb3EtPnF1ZXVlLCBza2IpOworCQlnb3RvIG91dDsKKwl9CisJLyogTm93IHRyeSBhcHBlbmQsIGFzIG1vc3Qgb2YgdGhlIG9wZXJhdGlvbnMgd2lsbCBiZSB0aGF0ICovCisJc2tiX2l0ciA9IHNrYl9wZWVrX3RhaWwoJnJvcS0+cXVldWUpOworCXJvcV9kYXRhX2l0ciA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2JfaXRyLT5jYjsKKwluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwlpZiAobnNuID49IG5zbl9pdHIpIHsKKwkJZF9wcmludGYoMiwgZGV2LCAiRVJYOiByb3EgJXAgLSBhcHBlbmRlZCBhZnRlciAlcCAobnNuICVkIHNuICV1KVxuIiwKKwkJCSByb3EsIHNrYl9pdHIsIG5zbl9pdHIsIHJvcV9kYXRhX2l0ci0+c24pOworCQlfX3NrYl9xdWV1ZV90YWlsKCZyb3EtPnF1ZXVlLCBza2IpOworCQlnb3RvIG91dDsKKwl9CisJLyogTm9uZSBvZiB0aGUgZmFzdCBwYXRocyBvcHRpb24gd29ya2VkLiBJdGVyYXRlIHRvIGZpbmQgdGhlCisJICogcmlnaHQgc3BvdCB3aGVyZSB0byBpbnNlcnQgdGhlIHBhY2tldDsgd2Uga25vdyB0aGUgcXVldWUgaXMKKwkgKiBub3QgZW1wdHksIHNvIHdlIGFyZSBub3QgdGhlIGZpcnN0IG9uZXM7IHdlIGFsc28ga25vdyB3ZQorCSAqIGFyZSBub3QgZ29pbmcgdG8gYmUgdGhlIGxhc3Qgb25lcy4gVGhlIGxpc3QgaXMgc29ydGVkLCBzbworCSAqIHdlIGhhdmUgdG8gaW5zZXJ0IGJlZm9yZSB0aGUgdGhlIGZpcnN0IGd1eSB3aXRoIGFuIG5zbl9pdHIKKwkgKiBncmVhdGVyIHRoYXQgb3VyIG5zbi4gKi8KKwlza2JfcXVldWVfd2Fsaygmcm9xLT5xdWV1ZSwgc2tiX2l0cikgeworCQlyb3FfZGF0YV9pdHIgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiX2l0ci0+Y2I7CisJCW5zbl9pdHIgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgcm9xX2RhdGFfaXRyLT5zbik7CisJCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwkJaWYgKG5zbl9pdHIgPiBuc24pIHsKKwkJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcm9xICVwIC0gcXVldWVkIGJlZm9yZSAlcCAiCisJCQkJICIobnNuICVkIHNuICV1KVxuIiwgcm9xLCBza2JfaXRyLCBuc25faXRyLAorCQkJCSByb3FfZGF0YV9pdHItPnNuKTsKKwkJCV9fc2tiX3F1ZXVlX2JlZm9yZSgmcm9xLT5xdWV1ZSwgc2tiX2l0ciwgc2tiKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCS8qIElmIHdlIGdldCBoZXJlLCB0aGF0IGlzIFZFUlkgYmFkIC0tIHByaW50IGluZm8gdG8gaGVscAorCSAqIGRpYWdub3NlIGFuZCBjcmFzaCBpdCAqLworCWRldl9lcnIoZGV2LCAiU1cgQlVHPyBmYWlsZWQgdG8gaW5zZXJ0IHBhY2tldFxuIik7CisJZGV2X2VycihkZXYsICJFUlg6IHJvcSAlcCBbd3MgJXVdIHNrYiAlcCBuc24gJWQgc24gJXVcbiIsCisJCXJvcSwgcm9xLT53cywgc2tiLCBuc24sIHJvcV9kYXRhLT5zbik7CisJc2tiX3F1ZXVlX3dhbGsoJnJvcS0+cXVldWUsIHNrYl9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQluc25faXRyID0gX19pMjQwMG1fcm9xX25zbihyb3EsIHJvcV9kYXRhX2l0ci0+c24pOworCQkvKiBOU04gYm91bmRzIGFzc3VtZWQgY29ycmVjdCAoY2hlY2tlZCB3aGVuIGl0IHdhcyBxdWV1ZWQpICovCisJCWRldl9lcnIoZGV2LCAiRVJYOiByb3EgJXAgc2tiX2l0ciAlcCBuc24gJWQgc24gJXVcbiIsCisJCQlyb3EsIHNrYl9pdHIsIG5zbl9pdHIsIHJvcV9kYXRhX2l0ci0+c24pOworCX0KKwlCVUcoKTsKK291dDoKKwlkX2ZuZW5kKDQsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSBuc24gJWQpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgc24sIG5zbik7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBCYWNrYm9uZSBmb3IgdGhlIHVwZGF0ZSB3aW5kb3cgc3RhcnQgb3BlcmF0aW9uCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEByb3E6IFJlb3JkZXIgcXVldWUKKyAqIEBzbjogTmV3IHNlcXVlbmNlIG51bWJlcgorICoKKyAqIFVwZGF0ZXMgdGhlIHdpbmRvdyBzdGFydCBvZiBhIHF1ZXVlOyB3aGVuIGRvaW5nIHNvLCBpdCBtdXN0IGRlbGl2ZXIKKyAqIHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrIGFsbCB0aGUgcXVldWVkIHNrYidzIHdob3NlIG5vcm1hbGl6ZWQKKyAqIHNlcXVlbmNlIG51bWJlciBpcyBsb3dlciB0aGFuIHRoZSBuZXcgbm9ybWFsaXplZCB3aW5kb3cgc3RhcnQuCisgKi8KK3N0YXRpYwordW5zaWduZWQgX19pMjQwMG1fcm9xX3VwZGF0ZV93cyhzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQkJdW5zaWduZWQgc24pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXN0cnVjdCBza19idWZmICpza2JfaXRyLCAqdG1wX2l0cjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICpyb3FfZGF0YV9pdHI7CisJdW5zaWduZWQgbmV3X253cywgbnNuX2l0cjsKKworCW5ld19ud3MgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgc24pOworCWlmICh1bmxpa2VseShuZXdfbndzID49IDEwMjQpICYmIGRfdGVzdCgxKSkgeworCQlkZXZfZXJyKGRldiwgIlNXIEJVRz8gX191cGRhdGVfd3MgbmV3X253cyAldSAoc24gJXUgd3MgJXUpXG4iLAorCQkJbmV3X253cywgc24sIHJvcS0+d3MpOworCQlXQVJOX09OKDEpOworCQlpMjQwMG1fcm9xX2xvZ19kdW1wKGkyNDAwbSwgcm9xKTsKKwl9CisJc2tiX3F1ZXVlX3dhbGtfc2FmZSgmcm9xLT5xdWV1ZSwgc2tiX2l0ciwgdG1wX2l0cikgeworCQlyb3FfZGF0YV9pdHIgPSAoc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqKSAmc2tiX2l0ci0+Y2I7CisJCW5zbl9pdHIgPSBfX2kyNDAwbV9yb3FfbnNuKHJvcSwgcm9xX2RhdGFfaXRyLT5zbik7CisJCS8qIE5TTiBib3VuZHMgYXNzdW1lZCBjb3JyZWN0IChjaGVja2VkIHdoZW4gaXQgd2FzIHF1ZXVlZCkgKi8KKwkJaWYgKG5zbl9pdHIgPCBuZXdfbndzKSB7CisJCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIHJlbGVhc2Ugc2tiICVwICIKKwkJCQkgIihuc24gJXUvJXUgbmV3IG53cyAldSlcbiIsCisJCQkJIHJvcSwgc2tiX2l0ciwgbnNuX2l0ciwgcm9xX2RhdGFfaXRyLT5zbiwKKwkJCQkgbmV3X253cyk7CisJCQlfX3NrYl91bmxpbmsoc2tiX2l0ciwgJnJvcS0+cXVldWUpOworCQkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPmNzKTsKKwkJfQorCQllbHNlCisJCQlicmVhazsJLyogcmVzdCBvZiBwYWNrZXRzIGFsbCBuc25faXRyID4gbndzICovCisJfQorCXJvcS0+d3MgPSBzbjsKKwlyZXR1cm4gbmV3X253czsKK30KKworCisvKgorICogUmVzZXQgYSBxdWV1ZQorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICoKKyAqIERlbGl2ZXIgYWxsIHRoZSBwYWNrZXRzIGFuZCByZXNldCB0aGUgd2luZG93LXN0YXJ0IHRvIHplcm8uIE5hbWUgaXMKKyAqIGtpbmQgb2YgbWlzbGVhZGluZy4KKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yb3FfcmVzZXQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2l0ciwgKnRtcF9pdHI7CisJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGFfaXRyOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwKVxuIiwgaTI0MDBtLCByb3EpOworCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUkVTRVQsCisJCQkgICAgIHJvcS0+d3MsIHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpLAorCQkJICAgICB+MCwgfjAsIDApOworCXNrYl9xdWV1ZV93YWxrX3NhZmUoJnJvcS0+cXVldWUsIHNrYl9pdHIsIHRtcF9pdHIpIHsKKwkJcm9xX2RhdGFfaXRyID0gKHN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKikgJnNrYl9pdHItPmNiOworCQlkX3ByaW50ZigyLCBkZXYsICJFUlg6IHJvcSAlcCAtIHJlbGVhc2Ugc2tiICVwIChzbiAldSlcbiIsCisJCQkgcm9xLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPnNuKTsKKwkJX19za2JfdW5saW5rKHNrYl9pdHIsICZyb3EtPnF1ZXVlKTsKKwkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2JfaXRyLCByb3FfZGF0YV9pdHItPmNzKTsKKwl9CisJcm9xLT53cyA9IDA7CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCkgPSB2b2lkXG4iLCBpMjQwMG0sIHJvcSk7CisJcmV0dXJuOworfQorCisKKy8qCisgKiBRdWV1ZSBhIHBhY2tldAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICogQHNrYjogY29udGFpbmluZyB0aGUgcGFja2V0IGRhdGEKKyAqIEBmYm46IEZpcnN0IGJsb2NrIG51bWJlciBvZiB0aGUgcGFja2V0IGluIEBza2IKKyAqIEBsYm46IExhc3QgYmxvY2sgbnVtYmVyIG9mIHRoZSBwYWNrZXQgaW4gQHNrYgorICoKKyAqIFRoZSBoYXJkd2FyZSBpcyBhc2tpbmcgdGhlIGRyaXZlciB0byBxdWV1ZSBhIHBhY2tldCBmb3IgbGF0ZXIKKyAqIGRlbGl2ZXJ5IHRvIHRoZSBuZXR3b3JraW5nIHN0YWNrLgorICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3JvcV9xdWV1ZShzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCSAgICAgIHN0cnVjdCBza19idWZmICogc2tiLCB1bnNpZ25lZCBsYm4pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXVuc2lnbmVkIG5zbiwgbGVuOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBsYm4gJXUpID0gdm9pZFxuIiwKKwkJICBpMjQwMG0sIHJvcSwgc2tiLCBsYm4pOworCWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpOworCW5zbiA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCBsYm4pOworCWlmICh1bmxpa2VseShuc24gPj0gMTAyNCkpIHsKKwkJZGV2X2VycihkZXYsICJTVyBCVUc/IHF1ZXVlIG5zbiAlZCAobGJuICV1IHdzICV1KVxuIiwKKwkJCW5zbiwgbGJuLCByb3EtPndzKTsKKwkJaTI0MDBtX3JvcV9sb2dfZHVtcChpMjQwMG0sIHJvcSk7CisJCWkyNDAwbS0+YnVzX3Jlc2V0KGkyNDAwbSwgSTI0MDBNX1JUX1dBUk0pOworCX0gZWxzZSB7CisJCV9faTI0MDBtX3JvcV9xdWV1ZShpMjQwMG0sIHJvcSwgc2tiLCBsYm4sIG5zbik7CisJCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUEFDS0VULAorCQkJCSAgICAgcm9xLT53cywgbGVuLCBsYm4sIG5zbiwgfjApOworCX0KKwlkX2ZuZW5kKDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBsYm4gJXUpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgbGJuKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIFVwZGF0ZSB0aGUgd2luZG93IHN0YXJ0IGluIGEgcmVvcmRlciBxdWV1ZSBhbmQgZGVsaXZlciBhbGwgc2ticworICogd2l0aCBhIGxvd2VyIHdpbmRvdyBzdGFydAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAcm9xOiBSZW9yZGVyIHF1ZXVlCisgKiBAc246IE5ldyBzZXF1ZW5jZSBudW1iZXIKKyAqLworc3RhdGljCit2b2lkIGkyNDAwbV9yb3FfdXBkYXRlX3dzKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IGkyNDAwbV9yb3EgKnJvcSwKKwkJCSAgdW5zaWduZWQgc24pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCXVuc2lnbmVkIG9sZF93cywgbnNuLCBsZW47CisKKwlkX2Zuc3RhcnQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXAgc24gJXUpXG4iLCBpMjQwMG0sIHJvcSwgc24pOworCW9sZF93cyA9IHJvcS0+d3M7CisJbGVuID0gc2tiX3F1ZXVlX2xlbigmcm9xLT5xdWV1ZSk7CisJbnNuID0gX19pMjQwMG1fcm9xX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgc24pOworCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfV1MsCisJCQkgICAgIG9sZF93cywgbGVuLCBzbiwgbnNuLCByb3EtPndzKTsKKwlkX2Zuc3RhcnQoMiwgZGV2LCAiKGkyNDAwbSAlcCByb3EgJXAgc24gJXUpID0gdm9pZFxuIiwgaTI0MDBtLCByb3EsIHNuKTsKKwlyZXR1cm47Cit9CisKKworLyoKKyAqIFF1ZXVlIGEgcGFja2V0IGFuZCB1cGRhdGUgdGhlIHdpbmRvdyBzdGFydAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAY2luOiBRdWV1ZSBJbmRleAorICogQHNrYjogY29udGFpbmluZyB0aGUgcGFja2V0IGRhdGEKKyAqIEBmYm46IEZpcnN0IGJsb2NrIG51bWJlciBvZiB0aGUgcGFja2V0IGluIEBza2IKKyAqIEBzbjogTGFzdCBibG9jayBudW1iZXIgb2YgdGhlIHBhY2tldCBpbiBAc2tiCisgKgorICogTm90ZSB0aGF0IHVubGlrZSBpMjQwMG1fcm9xX3VwZGF0ZV93cygpLCB3aGljaCBzZXRzIHRoZSBuZXcgd2luZG93CisgKiBzdGFydCB0byBAc24sIGluIGhlcmUgd2UnbGwgc2V0IGl0IHRvIEBzbiArIDEuCisgKi8KK3N0YXRpYwordm9pZCBpMjQwMG1fcm9xX3F1ZXVlX3VwZGF0ZV93cyhzdHJ1Y3QgaTI0MDBtICppMjQwMG0sIHN0cnVjdCBpMjQwMG1fcm9xICpyb3EsCisJCQkJc3RydWN0IHNrX2J1ZmYgKiBza2IsIHVuc2lnbmVkIHNuKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKKwl1bnNpZ25lZCBuc24sIG9sZF93cywgbGVuOworCisJZF9mbnN0YXJ0KDIsIGRldiwgIihpMjQwMG0gJXAgcm9xICVwIHNrYiAlcCBzbiAldSlcbiIsCisJCSAgaTI0MDBtLCByb3EsIHNrYiwgc24pOworCWxlbiA9IHNrYl9xdWV1ZV9sZW4oJnJvcS0+cXVldWUpOworCW5zbiA9IF9faTI0MDBtX3JvcV9uc24ocm9xLCBzbik7CisJb2xkX3dzID0gcm9xLT53czsKKwlpZiAodW5saWtlbHkobnNuID49IDEwMjQpKSB7CisJCWRldl9lcnIoZGV2LCAiU1cgQlVHPyBxdWV1ZV91cGRhdGVfd3MgbnNuICV1IChzbiAldSB3cyAldSlcbiIsCisJCQluc24sIHNuLCByb3EtPndzKTsKKwkJaTI0MDBtX3JvcV9sb2dfZHVtcChpMjQwMG0sIHJvcSk7CisJCWkyNDAwbS0+YnVzX3Jlc2V0KGkyNDAwbSwgSTI0MDBNX1JUX1dBUk0pOworCX0gZWxzZSB7CisJCS8qIGlmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgZG9uJ3QgYm90aGVyIGFzIHdlJ2QgcXVldWUKKwkJICogaXQgYW5kIGlubWVkaWF0ZWx5IHVucXVldWUgaXQgLS0ganVzdCBkZWxpdmVyIGl0ICovCisJCWlmIChsZW4gPT0gMCkgeworCQkJc3RydWN0IGkyNDAwbV9yb3FfZGF0YSAqcm9xX2RhdGE7CisJCQlyb3FfZGF0YSA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2ItPmNiOworCQkJaTI0MDBtX25ldF9lcngoaTI0MDBtLCBza2IsIHJvcV9kYXRhLT5jcyk7CisJCX0KKwkJZWxzZSB7CisJCQlfX2kyNDAwbV9yb3FfcXVldWUoaTI0MDBtLCByb3EsIHNrYiwgc24sIG5zbik7CisJCQlfX2kyNDAwbV9yb3FfdXBkYXRlX3dzKGkyNDAwbSwgcm9xLCBzbiArIDEpOworCQl9CisJCWkyNDAwbV9yb3FfbG9nX2FkZChpMjQwMG0sIHJvcSwgSTI0MDBNX1JPX1RZUEVfUEFDS0VUX1dTLAorCQkJCSAgIG9sZF93cywgbGVuLCBzbiwgbnNuLCByb3EtPndzKTsKKwl9CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHJvcSAlcCBza2IgJXAgc24gJXUpID0gdm9pZFxuIiwKKwkJaTI0MDBtLCByb3EsIHNrYiwgc24pOworCXJldHVybjsKK30KKworCisvKgorICogUmVjZWl2ZSBhbmQgc2VuZCB1cCBhbiBleHRlbmRlZCBkYXRhIHBhY2tldAorICoKKyAqIEBpMjQwMG06IGRldmljZSBkZXNjcmlwdG9yCisgKiBAc2tiX3J4OiBza2IgdGhhdCBjb250YWlucyB0aGUgZXh0ZW5kZWQgZGF0YSBwYWNrZXQKKyAqIEBzaW5nbGVfbGFzdDogMSBpZiB0aGUgcGF5bG9hZCBpcyB0aGUgb25seSBvbmUgb3IgdGhlIGxhc3Qgb25lIG9mCisgKiAgICAgdGhlIHNrYi4KKyAqIEBwYXlsb2FkOiBwb2ludGVyIHRvIHRoZSBwYWNrZXQncyBkYXRhIGluc2lkZSB0aGUgc2tiCisgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcGF5bG9hZAorICoKKyAqIFN0YXJ0aW5nIGluIHYxLjQgb2YgdGhlIGkyNDAwbSdzIGZpcm13YXJlLCB0aGUgZGV2aWNlIGNhbiBzZW5kIGRhdGEKKyAqIHBhY2tldHMgdG8gdGhlIGhvc3QgaW4gYW4gZXh0ZW5kZWQgZm9ybWF0IHRoYXQ7IHRoaXMgaW5jdWRlcyBhIDE2CisgKiBieXRlIGhlYWRlciAoc3RydWN0IGkyNDAwbV9wbF9lZGF0YV9oZHIpLiBVc2luZyB0aGlzIGhlYWRlcidzIHNwYWNlCisgKiB3ZSBjYW4gZmFrZSBldGhlcm5ldCBoZWFkZXJzIGZvciBldGhlcm5ldCBkZXZpY2UgZW11bGF0aW9uIHdpdGhvdXQKKyAqIGhhdmluZyB0byBjb3B5IHBhY2tldHMgYXJvdW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBzYWlkIHBhdGguCisgKgorICoKKyAqIFJlY2VpdmUgYW5kIHNlbmQgdXAgYW4gZXh0ZW5kZWQgZGF0YSBwYWNrZXQgdGhhdCByZXF1aXJlcyBubyByZW9yZGVyaW5nCisgKgorICogQGkyNDAwbTogZGV2aWNlIGRlc2NyaXB0b3IKKyAqIEBza2Jfcng6IHNrYiB0aGF0IGNvbnRhaW5zIHRoZSBleHRlbmRlZCBkYXRhIHBhY2tldAorICogQHNpbmdsZV9sYXN0OiAxIGlmIHRoZSBwYXlsb2FkIGlzIHRoZSBvbmx5IG9uZSBvciB0aGUgbGFzdCBvbmUgb2YKKyAqICAgICB0aGUgc2tiLgorICogQHBheWxvYWQ6IHBvaW50ZXIgdG8gdGhlIHBhY2tldCdzIGRhdGEgKHBhc3QgdGhlIGFjdHVhbCBleHRlbmRlZAorICogICAgIGRhdGEgcGF5bG9hZCBoZWFkZXIpLgorICogQHNpemU6IHNpemUgb2YgdGhlIHBheWxvYWQKKyAqCisgKiBQYXNzIG92ZXIgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgYSBkYXRhIHBhY2tldCB0aGF0IG1pZ2h0IGhhdmUKKyAqIHJlb3JkZXJpbmcgcmVxdWlyZW1lbnRzLgorICoKKyAqIFRoaXMgbmVlZHMgdG8gdGhlIGRlY2lkZSBpZiB0aGUgc2tiIGluIHdoaWNoIHRoZSBwYWNrZXQgaXMKKyAqIGNvbnRhaW5lZCBjYW4gYmUgcmV1c2VkIG9yIGlmIGl0IG5lZWRzIHRvIGJlIGNsb25lZC4gVGhlbiBpdCBoYXMgdG8KKyAqIGJlIHRyaW1tZWQgaW4gdGhlIGVkZ2VzIHNvIHRoYXQgdGhlIGJlZ2lubmluZyBpcyB0aGUgc3BhY2UgZm9yIGV0aAorICogaGVhZGVyIGFuZCB0aGVuIHBhc3MgaXQgdG8gaTI0MDBtX25ldF9lcngoKSBmb3IgdGhlIHN0YWNrCisgKgorICogQXNzdW1lcyB0aGUgY2FsbGVyIGhhcyB2ZXJpZmllZCB0aGUgc2FuaXR5IG9mIHRoZSBwYXlsb2FkIChzaXplLAorICogZXRjKSBhbHJlYWR5LgorICovCitzdGF0aWMKK3ZvaWQgaTI0MDBtX3J4X2VkYXRhKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSwgc3RydWN0IHNrX2J1ZmYgKnNrYl9yeCwKKwkJICAgICB1bnNpZ25lZCBzaW5nbGVfbGFzdCwgY29uc3Qgdm9pZCAqcGF5bG9hZCwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOworCWNvbnN0IHN0cnVjdCBpMjQwMG1fcGxfZWRhdGFfaGRyICpoZHIgPSBwYXlsb2FkOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gaTI0MDBtLT53aW1heF9kZXYubmV0X2RldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWVudW0gaTI0MDBtX2NzIGNzOworCXUzMiByZW9yZGVyOworCXVuc2lnbmVkIHJvX25lZWRlZCwgcm9fdHlwZSwgcm9fY2luLCByb19zbjsKKwlzdHJ1Y3QgaTI0MDBtX3JvcSAqcm9xOworCXN0cnVjdCBpMjQwMG1fcm9xX2RhdGEgKnJvcV9kYXRhOworCisJQlVJTERfQlVHX09OKEVUSF9ITEVOID4gc2l6ZW9mKCpoZHIpKTsKKworCWRfZm5zdGFydCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYl9yeCAlcCBzaW5nbGUgJXUgcGF5bG9hZCAlcCAiCisJCSAgInNpemUgJXp1KVxuIiwgaTI0MDBtLCBza2JfcngsIHNpbmdsZV9sYXN0LCBwYXlsb2FkLCBzaXplKTsKKwlpZiAoc2l6ZSA8IHNpemVvZigqaGRyKSkgeworCQlkZXZfZXJyKGRldiwgIkVSWDogSFcgQlVHPyBtZXNzYWdlIHdpdGggc2hvcnQgaGVhZGVyICglenUgIgorCQkJInZzICV6dSBieXRlcyBleHBlY3RlZClcbiIsIHNpemUsIHNpemVvZigqaGRyKSk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaWYgKHNpbmdsZV9sYXN0KSB7CisJCXNrYiA9IHNrYl9nZXQoc2tiX3J4KTsKKwkJZF9wcmludGYoMywgZGV2LCAiRVJYOiBza2IgJXAgcmV1c2luZ1xuIiwgc2tiKTsKKwl9IGVsc2UgeworCQlza2IgPSBza2JfY2xvbmUoc2tiX3J4LCBHRlBfS0VSTkVMKTsKKwkJaWYgKHNrYiA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGRldiwgIkVSWDogbm8gbWVtb3J5IHRvIGNsb25lIHNrYlxuIik7CisJCQluZXRfZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlnb3RvIGVycm9yX3NrYl9jbG9uZTsKKwkJfQorCQlkX3ByaW50ZigzLCBkZXYsICJFUlg6IHNrYiAlcCBjbG9uZWQgZnJvbSAlcFxuIiwgc2tiLCBza2JfcngpOworCX0KKwkvKiBub3cgd2UgaGF2ZSB0byBwdWxsIGFuZCB0cmltIHNvIHRoYXQgdGhlIHNrYiBwb2ludHMgdG8gdGhlCisJICogYmVnaW5uaW5nIG9mIHRoZSBJUCBwYWNrZXQ7IHRoZSBuZXRkZXYgcGFydCB3aWxsIGFkZCB0aGUKKwkgKiBldGhlcm5ldCBoZWFkZXIgYXMgbmVlZGVkIC0gd2Uga25vdyB0aGVyZSBpcyBlbm91Z2ggc3BhY2UKKwkgKiBiZWNhdXNlIHdlIGNoZWNrZWQgaW4gaTI0MDBtX3J4X2VkYXRhKCkuICovCisJc2tiX3B1bGwoc2tiLCBwYXlsb2FkICsgc2l6ZW9mKCpoZHIpIC0gKHZvaWQgKikgc2tiLT5kYXRhKTsKKwlza2JfdHJpbShza2IsICh2b2lkICopIHNrYl9lbmRfcG9pbnRlcihza2IpIC0gcGF5bG9hZCAtIHNpemVvZigqaGRyKSk7CisKKwlyZW9yZGVyID0gbGUzMl90b19jcHUoaGRyLT5yZW9yZGVyKTsKKwlyb19uZWVkZWQgPSByZW9yZGVyICYgSTI0MDBNX1JPX05FRURFRDsKKwljcyA9IGhkci0+Y3M7CisJaWYgKHJvX25lZWRlZCkgeworCQlyb190eXBlID0gKHJlb3JkZXIgPj4gSTI0MDBNX1JPX1RZUEVfU0hJRlQpICYgSTI0MDBNX1JPX1RZUEU7CisJCXJvX2NpbiA9IChyZW9yZGVyID4+IEkyNDAwTV9ST19DSU5fU0hJRlQpICYgSTI0MDBNX1JPX0NJTjsKKwkJcm9fc24gPSAocmVvcmRlciA+PiBJMjQwME1fUk9fU05fU0hJRlQpICYgSTI0MDBNX1JPX1NOOworCisJCXJvcSA9ICZpMjQwMG0tPnJ4X3JvcVtyb19jaW5dOworCQlyb3FfZGF0YSA9IChzdHJ1Y3QgaTI0MDBtX3JvcV9kYXRhICopICZza2ItPmNiOworCQlyb3FfZGF0YS0+c24gPSByb19zbjsKKwkJcm9xX2RhdGEtPmNzID0gY3M7CisJCWRfcHJpbnRmKDIsIGRldiwgIkVSWDogcmVvcmRlciBuZWVkZWQ6ICIKKwkJCSAidHlwZSAldSBjaW4gJXUgW3dzICV1XSBzbiAldS8ldSBsZW4gJXp1QlxuIiwKKwkJCSByb190eXBlLCByb19jaW4sIHJvcS0+d3MsIHJvX3NuLAorCQkJIF9faTI0MDBtX3JvcV9uc24ocm9xLCByb19zbiksIHNpemUpOworCQlkX2R1bXAoMiwgZGV2LCBwYXlsb2FkLCBzaXplKTsKKwkJc3dpdGNoKHJvX3R5cGUpIHsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9SRVNFVDoKKwkJCWkyNDAwbV9yb3FfcmVzZXQoaTI0MDBtLCByb3EpOworCQkJa2ZyZWVfc2tiKHNrYik7CS8qIG5vIGRhdGEgaGVyZSAqLworCQkJYnJlYWs7CisJCWNhc2UgSTI0MDBNX1JPX1RZUEVfUEFDS0VUOgorCQkJaTI0MDBtX3JvcV9xdWV1ZShpMjQwMG0sIHJvcSwgc2tiLCByb19zbik7CisJCQlicmVhazsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9XUzoKKwkJCWkyNDAwbV9yb3FfdXBkYXRlX3dzKGkyNDAwbSwgcm9xLCByb19zbik7CisJCQlrZnJlZV9za2Ioc2tiKTsJLyogbm8gZGF0YSBoZXJlICovCisJCQlicmVhazsKKwkJY2FzZSBJMjQwME1fUk9fVFlQRV9QQUNLRVRfV1M6CisJCQlpMjQwMG1fcm9xX3F1ZXVlX3VwZGF0ZV93cyhpMjQwMG0sIHJvcSwgc2tiLCByb19zbik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoZGV2LCAiSFcgQlVHPyB1bmtub3duIHJlb3JkZXIgdHlwZSAldVxuIiwgcm9fdHlwZSk7CisJCX0KKwl9CisJZWxzZQorCQlpMjQwMG1fbmV0X2VyeChpMjQwMG0sIHNrYiwgY3MpOworZXJyb3Jfc2tiX2Nsb25lOgorZXJyb3I6CisJZF9mbmVuZCgyLCBkZXYsICIoaTI0MDBtICVwIHNrYl9yeCAlcCBzaW5nbGUgJXUgcGF5bG9hZCAlcCAiCisJCSJzaXplICV6dSkgPSB2b2lkXG4iLCBpMjQwMG0sIHNrYl9yeCwgc2luZ2xlX2xhc3QsIHBheWxvYWQsIHNpemUpOworCXJldHVybjsKK30KKworCisvKgogICogQWN0IG9uIGEgcmVjZWl2ZWQgcGF5bG9hZAogICoKICAqIEBpMjQwMG06IGRldmljZSBpbnN0YW5jZQogICogQHNrYl9yeDogc2tiIHdoZXJlIHRoZSB0cmFuc2FjdGlvbiB3YXMgcmVjZWl2ZWQKLSAqIEBzaW5nbGU6IDEgaWYgdGhlcmUgaXMgb25seSBvbmUgcGF5bG9hZCwgMCBvdGhlcndpc2UKKyAqIEBzaW5nbGVfbGFzdDogMSB0aGlzIGlzIHRoZSBvbmx5IHBheWxvYWQgb3IgdGhlIGxhc3Qgb25lIChzbyB0aGUKKyAqICAgICBza2IgY2FuIGJlIHJldXNlZCBpbnN0ZWFkIG9mIGNsb25lZCkuCiAgKiBAcGxkOiBwYXlsb2FkIGRlc2NyaXB0b3IKICAqIEBwYXlsb2FkOiBwYXlsb2FkIGRhdGEKICAqCiAgKiBVcG9uIHJlY2VwdGlvbiBvZiBhIHBheWxvYWQsIGxvb2sgYXQgaXRzIGd1dHMgaW4gdGhlIHBheWxvYWQKLSAqIGRlc2NyaXB0b3IgYW5kIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggaXQuCisgKiBkZXNjcmlwdG9yIGFuZCBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIGl0LiBJZiBpdCBpcyBhIHNpbmdsZSBwYXlsb2FkCisgKiBza2Igb3IgaWYgdGhlIGxhc3Qgc2tiIGlzIGEgZGF0YSBwYWNrZXQsIHRoZSBza2Igd2lsbCBiZSByZWZlcmVuY2VkCisgKiBhbmQgbW9kaWZpZWQgKHNvIGl0IGRvZXNuJ3QgaGF2ZSB0byBiZSBjbG9uZWQpLgogICovCiBzdGF0aWMKIHZvaWQgaTI0MDBtX3J4X3BheWxvYWQoc3RydWN0IGkyNDAwbSAqaTI0MDBtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3J4LAotCQkgICAgICAgdW5zaWduZWQgc2luZ2xlLCBjb25zdCBzdHJ1Y3QgaTI0MDBtX3BsZCAqcGxkLAorCQkgICAgICAgdW5zaWduZWQgc2luZ2xlX2xhc3QsIGNvbnN0IHN0cnVjdCBpMjQwMG1fcGxkICpwbGQsCiAJCSAgICAgICBjb25zdCB2b2lkICpwYXlsb2FkKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGkyNDAwbV9kZXYoaTI0MDBtKTsKIAlzaXplX3QgcGxfc2l6ZSA9IGkyNDAwbV9wbGRfc2l6ZShwbGQpOwogCWVudW0gaTI0MDBtX3B0IHBsX3R5cGUgPSBpMjQwMG1fcGxkX3R5cGUocGxkKTsKIAorCWRfcHJpbnRmKDcsIGRldiwgIlJYOiByZWNlaXZlZCBwYXlsb2FkIHR5cGUgJXUsICV6dSBieXRlc1xuIiwKKwkJIHBsX3R5cGUsIHBsX3NpemUpOworCWRfZHVtcCg4LCBkZXYsIHBheWxvYWQsIHBsX3NpemUpOworCiAJc3dpdGNoIChwbF90eXBlKSB7CiAJY2FzZSBJMjQwME1fUFRfREFUQToKIAkJZF9wcmludGYoMywgZGV2LCAiUlg6IGRhdGEgcGF5bG9hZCAlenUgYnl0ZXNcbiIsIHBsX3NpemUpOwotCQlpMjQwMG1fbmV0X3J4KGkyNDAwbSwgc2tiX3J4LCBzaW5nbGUsIHBheWxvYWQsIHBsX3NpemUpOworCQlpMjQwMG1fbmV0X3J4KGkyNDAwbSwgc2tiX3J4LCBzaW5nbGVfbGFzdCwgcGF5bG9hZCwgcGxfc2l6ZSk7CiAJCWJyZWFrOwogCWNhc2UgSTI0MDBNX1BUX0NUUkw6CiAJCWkyNDAwbV9yeF9jdGwoaTI0MDBtLCBza2JfcngsIHBheWxvYWQsIHBsX3NpemUpOwpAQCAtMzQ4LDYgKzEwMDAsMTAgQEAKIAljYXNlIEkyNDAwTV9QVF9UUkFDRToKIAkJaTI0MDBtX3J4X3RyYWNlKGkyNDAwbSwgcGF5bG9hZCwgcGxfc2l6ZSk7CiAJCWJyZWFrOworCWNhc2UgSTI0MDBNX1BUX0VEQVRBOgorCQlkX3ByaW50ZigzLCBkZXYsICJFUlg6IGRhdGEgcGF5bG9hZCAlenUgYnl0ZXNcbiIsIHBsX3NpemUpOworCQlpMjQwMG1fcnhfZWRhdGEoaTI0MDBtLCBza2JfcngsIHNpbmdsZV9sYXN0LCBwYXlsb2FkLCBwbF9zaXplKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoJLyogQW55dGhpbmcgZWxzZSBzaG91bGRuJ3QgY29tZSB0byB0aGUgaG9zdCAqLwogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJZGV2X2VycihkZXYsICJSWDogSFcgQlVHPyB1bmV4cGVjdGVkIHBheWxvYWQgdHlwZSAldVxuIiwKQEAgLTQ3NSw3ICsxMTMxLDcgQEAKIAljb25zdCBzdHJ1Y3QgaTI0MDBtX21zZ19oZHIgKm1zZ19oZHI7CiAJc2l6ZV90IHBsX2l0ciwgcGxfc2l6ZSwgc2tiX2xlbjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIG51bV9wbHM7CisJdW5zaWduZWQgbnVtX3Bscywgc2luZ2xlX2xhc3Q7CiAKIAlza2JfbGVuID0gc2tiLT5sZW47CiAJZF9mbnN0YXJ0KDQsIGRldiwgIihpMjQwMG0gJXAgc2tiICVwIFtzaXplICV6dV0pXG4iLApAQCAtNTA0LDcgKzExNjAsOCBAQAogCQkJCQkJICBwbF9pdHIsIHNrYi0+bGVuKTsKIAkJaWYgKHJlc3VsdCA8IDApCiAJCQlnb3RvIGVycm9yX3BsX2Rlc2NyX2NoZWNrOwotCQlpMjQwMG1fcnhfcGF5bG9hZChpMjQwMG0sIHNrYiwgbnVtX3BscyA9PSAxLCAmbXNnX2hkci0+cGxkW2ldLAorCQlzaW5nbGVfbGFzdCA9IG51bV9wbHMgPT0gMSB8fCBpID09IG51bV9wbHMgLSAxOworCQlpMjQwMG1fcnhfcGF5bG9hZChpMjQwMG0sIHNrYiwgc2luZ2xlX2xhc3QsICZtc2dfaGRyLT5wbGRbaV0sCiAJCQkJICBza2ItPmRhdGEgKyBwbF9pdHIpOwogCQlwbF9pdHIgKz0gQUxJR04ocGxfc2l6ZSwgSTI0MDBNX1BMX1BBRCk7CiAJCWNvbmRfcmVzY2hlZCgpOwkJLyogRG9uJ3QgbW9ub3BvbGl6ZSAqLwpAQCAtNTMyLDMgKzExODksNzMgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaTI0MDBtX3J4KTsKKworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgUlggcXVldWUgYW5kIGluZnJhc3RydWN0dXJlCisgKgorICogVGhpcyBzZXRzIHVwIGFsbCB0aGUgUlggcmVvcmRlcmluZyBpbmZyYXN0cnVjdHVyZXMsIHdoaWNoIHdpbGwgbm90CisgKiBiZSB1c2VkIGlmIHJlb3JkZXJpbmcgaXMgbm90IGVuYWJsZWQgb3IgaWYgdGhlIGZpcm13YXJlIGRvZXMgbm90CisgKiBzdXBwb3J0IGl0LiBUaGUgZGV2aWNlIGlzIHRvbGQgdG8gZG8gcmVvcmRlcmluZyBpbgorICogaTI0MDBtX2Rldl9pbml0aWFsaXplKCksIHdoZXJlIGl0IGFsc28gbG9va3MgYXQgdGhlIHZhbHVlIG9mIHRoZQorICogaTI0MDBtLT5yeF9yZW9yZGVyIHN3aXRjaCBiZWZvcmUgdGFraW5nIGEgZGVjaXNzaW9uLgorICoKKyAqIE5vdGUgd2UgYWxsb2NhdGUgdGhlIHJvcSBxdWV1ZXMgaW4gb25lIGNodW5rIGFuZCB0aGUgYWN0dWFsIGxvZ2dpbmcKKyAqIHN1cHBvcnQgZm9yIGl0IChsb2dnaW5nKSBpbiBhbm90aGVyIG9uZSBhbmQgdGhlbiB3ZSBzZXR1cCB0aGUKKyAqIHBvaW50ZXJzIGZyb20gdGhlIGZpcnN0IHRvIHRoZSBsYXN0LgorICovCitpbnQgaTI0MDBtX3J4X3NldHVwKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CisKKwlpMjQwMG0tPnJ4X3Jlb3JkZXIgPSBpMjQwMG1fcnhfcmVvcmRlcl9kaXNhYmxlZD8gMCA6IDE7CisJaWYgKGkyNDAwbS0+cnhfcmVvcmRlcikgeworCQl1bnNpZ25lZCBpdHI7CisJCXNpemVfdCBzaXplOworCQlzdHJ1Y3QgaTI0MDBtX3JvcV9sb2cgKnJkOworCisJCXJlc3VsdCA9IC1FTk9NRU07CisKKwkJc2l6ZSA9IHNpemVvZihpMjQwMG0tPnJ4X3JvcVswXSkgKiAoSTI0MDBNX1JPX0NJTiArIDEpOworCQlpMjQwMG0tPnJ4X3JvcSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmIChpMjQwMG0tPnJ4X3JvcSA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKGRldiwgIlJYOiBjYW5ub3QgYWxsb2NhdGUgJXp1IGJ5dGVzIGZvciAiCisJCQkJInJlb3JkZXIgcXVldWVzXG4iLCBzaXplKTsKKwkJCWdvdG8gZXJyb3Jfcm9xX2FsbG9jOworCQl9CisKKwkJc2l6ZSA9IHNpemVvZigqaTI0MDBtLT5yeF9yb3FbMF0ubG9nKSAqIChJMjQwME1fUk9fQ0lOICsgMSk7CisJCXJkID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJkID09IE5VTEwpIHsKKwkJCWRldl9lcnIoZGV2LCAiUlg6IGNhbm5vdCBhbGxvY2F0ZSAlenUgYnl0ZXMgZm9yICIKKwkJCQkicmVvcmRlciBxdWV1ZXMgbG9nIGFyZWFzXG4iLCBzaXplKTsKKwkJCXJlc3VsdCA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yX3JvcV9sb2dfYWxsb2M7CisJCX0KKworCQlmb3IoaXRyID0gMDsgaXRyIDwgSTI0MDBNX1JPX0NJTiArIDE7IGl0cisrKSB7CisJCQlfX2kyNDAwbV9yb3FfaW5pdCgmaTI0MDBtLT5yeF9yb3FbaXRyXSk7CisJCQlpMjQwMG0tPnJ4X3JvcVtpdHJdLmxvZyA9ICZyZFtpdHJdOworCQl9CisJfQorCXJldHVybiAwOworCitlcnJvcl9yb3FfbG9nX2FsbG9jOgorCWtmcmVlKGkyNDAwbS0+cnhfcm9xKTsKK2Vycm9yX3JvcV9hbGxvYzoKKwlyZXR1cm4gcmVzdWx0OworfQorCisKKy8qIFRlYXIgZG93biB0aGUgUlggcXVldWUgYW5kIGluZnJhc3RydWN0dXJlICovCit2b2lkIGkyNDAwbV9yeF9yZWxlYXNlKHN0cnVjdCBpMjQwMG0gKmkyNDAwbSkKK3sKKwlpZiAoaTI0MDBtLT5yeF9yZW9yZGVyKSB7CisJCXVuc2lnbmVkIGl0cjsKKwkJZm9yKGl0ciA9IDA7IGl0ciA8IEkyNDAwTV9ST19DSU4gKyAxOyBpdHIrKykKKwkJCV9fc2tiX3F1ZXVlX3B1cmdlKCZpMjQwMG0tPnJ4X3JvcVtpdHJdLnF1ZXVlKTsKKwkJa2ZyZWUoaTI0MDBtLT5yeF9yb3FbMF0ubG9nKTsKKwkJa2ZyZWUoaTI0MDBtLT5yeF9yb3EpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCmluZGV4IDFiZmEyODMuLjVhYzVlNzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMKQEAgLTcwLDggKzcwLDEzIEBACiBzdGF0aWMgaW50IGlvZV90aW1lb3V0ID0gMjsKIG1vZHVsZV9wYXJhbShpb2VfdGltZW91dCwgaW50LCAwKTsKIAotLyogT3VyIGZpcm13YXJlIGZpbGUgbmFtZSAqLwotI2RlZmluZSBJMjQwME1TX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXNkaW8tIiBJMjQwME1fRldfVkVSU0lPTiAiLnNiY2YiCisvKiBPdXIgZmlybXdhcmUgZmlsZSBuYW1lIGxpc3QgKi8KK3N0YXRpYyBjb25zdCBjaGFyICppMjQwMG1zX2J1c19md19uYW1lc1tdID0geworI2RlZmluZSBJMjQwME1TX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXNkaW8tMS4zLnNiY2YiCisJSTI0MDBNU19GV19GSUxFX05BTUUsCisJTlVMTAorfTsKKwogCiAvKgogICogRW5hYmxlIHRoZSBTRElPIGZ1bmN0aW9uCkBAIC0yNTUsMTYgKzI2MCwxNiBAQAogCQljb250YWluZXJfb2YoaTI0MDBtLCBzdHJ1Y3QgaTI0MDBtcywgaTI0MDBtKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpMjQwMG1fZGV2KGkyNDAwbSk7CiAJc3RhdGljIGNvbnN0IF9fbGUzMiBpMjQwMG1fV0FSTV9CT09UX0JBUktFUls0XSA9IHsKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAogCX07CiAJc3RhdGljIGNvbnN0IF9fbGUzMiBpMjQwMG1fQ09MRF9CT09UX0JBUktFUls0XSA9IHsKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAorCQljcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAogCX07CiAKIAlpZiAocnQgPT0gSTI0MDBNX1JUX1dBUk0pCkBAIC00MDEsNyArNDA2LDcgQEAKIAlpMjQwMG0tPmJ1c19yZXNldCA9IGkyNDAwbXNfYnVzX3Jlc2V0OwogCWkyNDAwbS0+YnVzX2JtX2NtZF9zZW5kID0gaTI0MDBtc19idXNfYm1fY21kX3NlbmQ7CiAJaTI0MDBtLT5idXNfYm1fd2FpdF9mb3JfYWNrID0gaTI0MDBtc19idXNfYm1fd2FpdF9mb3JfYWNrOwotCWkyNDAwbS0+YnVzX2Z3X25hbWUgPSBJMjQwME1TX0ZXX0ZJTEVfTkFNRTsKKwlpMjQwMG0tPmJ1c19md19uYW1lcyA9IGkyNDAwbXNfYnVzX2Z3X25hbWVzOwogCWkyNDAwbS0+YnVzX2JtX21hY19hZGRyX2ltcGFpcmVkID0gMTsKIAogCXJlc3VsdCA9IGkyNDAwbXNfZW5hYmxlX2Z1bmN0aW9uKGkyNDAwbXMtPmZ1bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3N5c2ZzLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjM3MTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3N5c2ZzLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIEludGVsIFdpcmVsZXNzIFdpTUFYIENvbm5lY3Rpb24gMjQwMG0KKyAqIFN5c2ZzIGludGVyZmFjZXMgdG8gc2hvdyBkcml2ZXIgYW5kIGRldmljZSBpbmZvcm1hdGlvbgorICoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24gPGxpbnV4LXdpbWF4QGludGVsLmNvbT4KKyAqIEluYWt5IFBlcmV6LUdvbnphbGV6IDxpbmFreS5wZXJlei1nb256YWxlekBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSAiaTI0MDBtLmgiCisKKworI2RlZmluZSBEX1NVQk1PRFVMRSBzeXNmcworI2luY2x1ZGUgImRlYnVnLWxldmVscy5oIgorCisKKy8qCisgKiBTZXQgdGhlIGlkbGUgdGltZW91dCAobXNlY3MpCisgKgorICogRklYTUU6IGV2ZW50dWFsbHkgdGhpcyBzaG91bGQgYmUgYSBjb21tb24gV2lNQVggc3RhY2sgbWV0aG9kLCBidXQKKyAqIHdvdWxkIGxpa2UgdG8gd2FpdCB0byBzZWUgaG93IG90aGVyIGRldmljZXMgbWFuYWdlIGl0LgorICovCitzdGF0aWMKK3NzaXplX3QgaTI0MDBtX2lkbGVfdGltZW91dF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJc3NpemVfdCByZXN1bHQ7CisJc3RydWN0IGkyNDAwbSAqaTI0MDBtID0gbmV0X2Rldl90b19pMjQwMG0odG9fbmV0X2RldihkZXYpKTsKKwl1bnNpZ25lZCB2YWw7CisKKwlyZXN1bHQgPSAtRUlOVkFMOworCWlmIChzc2NhbmYoYnVmLCAiJXVcbiIsICZ2YWwpICE9IDEpCisJCWdvdG8gZXJyb3Jfbm9fdW5zaWduZWQ7CisJaWYgKHZhbCAhPSAwICYmICh2YWwgPCAxMDAgfHwgdmFsID4gMzAwMDAwIHx8IHZhbCAlIDEwMCAhPSAwKSkgeworCQlkZXZfZXJyKGRldiwgImlkbGVfdGltZW91dDogJXU6IGludmFsaWQgbXNlY3Mgc3BlY2lmaWNhdGlvbjsgIgorCQkJInZhbGlkIHZhbHVlcyBhcmUgMCwgMTAwLTMwMDAwMCBpbiAxMDAgaW5jcmVtZW50c1xuIiwKKwkJCXZhbCk7CisJCWdvdG8gZXJyb3JfYmFkX3ZhbHVlOworCX0KKwlyZXN1bHQgPSBpMjQwMG1fc2V0X2lkbGVfdGltZW91dChpMjQwMG0sIHZhbCk7CisJaWYgKHJlc3VsdCA+PSAwKQorCQlyZXN1bHQgPSBzaXplOworZXJyb3Jfbm9fdW5zaWduZWQ6CitlcnJvcl9iYWRfdmFsdWU6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljCitERVZJQ0VfQVRUUihpMjQwMG1faWRsZV90aW1lb3V0LCBTX0lXVVNSLAorCSAgICBOVUxMLCBpMjQwMG1faWRsZV90aW1lb3V0X3N0b3JlKTsKKworc3RhdGljCitzdHJ1Y3QgYXR0cmlidXRlICppMjQwMG1fZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2kyNDAwbV9pZGxlX3RpbWVvdXQuYXR0ciwKKwlOVUxMLAorfTsKKworc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpMjQwMG1fZGV2X2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgPSBOVUxMLAkJLyogd2Ugd2FudCB0aGVtIGluIHRoZSBzYW1lIGRpcmVjdG9yeSAqLworCS5hdHRycyA9IGkyNDAwbV9kZXZfYXR0cnMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jCmluZGV4IDk3MDJjMjJiLi42YWRkMjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLW5vdGlmLmMKKysrIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi1ub3RpZi5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAkJZGV2X2VycihkZXYsICJIVyBCVUc/IFVua25vd24vdW5leHBlY3RlZCBkYXRhIGluIG5vdGlmaWNhdGlvbiAiCiAJCQkibWVzc2FnZSAoJXp1IGJ5dGVzKVxuIiwgYnVmX2xlbik7CiAJCXNucHJpbnRmKHByZWZpeCwgc2l6ZW9mKHByZWZpeCksICIlcyAlczogIiwKLQkJCSBkZXZfZHJpdmVyX3N0cmluZyhkZXYpICwgZGV2LT5idXNfaWQpOworCQkJIGRldl9kcml2ZXJfc3RyaW5nKGRldiksIGRldl9uYW1lKGRldikpOwogCQlpZiAoYnVmX2xlbiA+IDY0KSB7CiAJCQlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgcHJlZml4LCBEVU1QX1BSRUZJWF9PRkZTRVQsCiAJCQkJICAgICAgIDgsIDQsIGJ1ZiwgNjQsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jCmluZGV4IGM2ZDkzNDYuLmNhNDE1MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYworKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vdXNiLmMKQEAgLTczLDcgKzczLDE0IEBACiAKIAogLyogT3VyIGZpcm13YXJlIGZpbGUgbmFtZSAqLwotI2RlZmluZSBJMjQwME1VX0ZXX0ZJTEVfTkFNRSAiaTI0MDBtLWZ3LXVzYi0iIEkyNDAwTV9GV19WRVJTSU9OICIuc2JjZiIKK3N0YXRpYyBjb25zdCBjaGFyICppMjQwMG11X2J1c19md19uYW1lc1tdID0geworI2RlZmluZSBJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV80ICJpMjQwMG0tZnctdXNiLTEuNC5zYmNmIgorCUkyNDAwTVVfRldfRklMRV9OQU1FX3YxXzQsCisjZGVmaW5lIEkyNDAwTVVfRldfRklMRV9OQU1FX3YxXzMgImkyNDAwbS1mdy11c2ItMS4zLnNiY2YiCisJSTI0MDBNVV9GV19GSUxFX05BTUVfdjFfMywKKwlOVUxMLAorfTsKKwogCiBzdGF0aWMKIGludCBpMjQwMG11X2J1c19kZXZfc3RhcnQoc3RydWN0IGkyNDAwbSAqaTI0MDBtKQpAQCAtMjExLDE2ICsyMTgsMTYgQEAKIAkJY29udGFpbmVyX29mKGkyNDAwbSwgc3RydWN0IGkyNDAwbXUsIGkyNDAwbSk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gaTI0MDBtX2RldihpMjQwMG0pOwogCXN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX1dBUk1fQk9PVF9CQVJLRVJbNF0gPSB7Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fV0FSTV9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9XQVJNX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX1dBUk1fUkVTRVRfQkFSS0VSKSwKIAl9OwogCXN0YXRpYyBjb25zdCBfX2xlMzIgaTI0MDBtX0NPTERfQk9PVF9CQVJLRVJbNF0gPSB7Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihJMjQwME1fQ09MRF9SRVNFVF9CQVJLRVIpLAotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKEkyNDAwTV9DT0xEX1JFU0VUX0JBUktFUiksCi0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKKwkJY3B1X3RvX2xlMzIoSTI0MDBNX0NPTERfUkVTRVRfQkFSS0VSKSwKIAl9OwogCiAJZF9mbnN0YXJ0KDMsIGRldiwgIihpMjQwMG0gJXAgcnQgJXUpXG4iLCBpMjQwMG0sIHJ0KTsKQEAgLTM5NCw3ICs0MDEsNyBAQAogCWkyNDAwbS0+YnVzX3Jlc2V0ID0gaTI0MDBtdV9idXNfcmVzZXQ7CiAJaTI0MDBtLT5idXNfYm1fY21kX3NlbmQgPSBpMjQwMG11X2J1c19ibV9jbWRfc2VuZDsKIAlpMjQwMG0tPmJ1c19ibV93YWl0X2Zvcl9hY2sgPSBpMjQwMG11X2J1c19ibV93YWl0X2Zvcl9hY2s7Ci0JaTI0MDBtLT5idXNfZndfbmFtZSA9IEkyNDAwTVVfRldfRklMRV9OQU1FOworCWkyNDAwbS0+YnVzX2Z3X25hbWVzID0gaTI0MDBtdV9idXNfZndfbmFtZXM7CiAJaTI0MDBtLT5idXNfYm1fbWFjX2FkZHJfaW1wYWlyZWQgPSAwOwogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC01OTQsNCArNjAxLDUgQEAKIE1PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uIDxsaW51eC13aW1heEBpbnRlbC5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIDI0MDBNIFdpTUFYIG5ldHdvcmtpbmcgZm9yIFVTQiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0ZJUk1XQVJFKEkyNDAwTVVfRldfRklMRV9OQU1FKTsKK01PRFVMRV9GSVJNV0FSRShJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV80KTsKK01PRFVMRV9GSVJNV0FSRShJMjQwME1VX0ZXX0ZJTEVfTkFNRV92MV8zKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCmluZGV4IGU0ZjlmNzQuLjhhMDgyMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMTUxLDYgKzE1MSwxMiBAQAogCS0tLWhlbHAtLS0KIAkgIEEgZHJpdmVyIGZvciBNYXJ2ZWxsIExpYmVydGFzIDgzODUgYW5kIDg2ODYgU0RJTyBkZXZpY2VzLgogCitjb25maWcgTElCRVJUQVNfU1BJCisJdHJpc3RhdGUgIk1hcnZlbGwgTGliZXJ0YXMgODY4NiBTUEkgODAyLjExYi9nIGNhcmRzIgorCWRlcGVuZHMgb24gTElCRVJUQVMgJiYgU1BJICYmIEdFTkVSSUNfR1BJTworCS0tLWhlbHAtLS0KKwkgIEEgZHJpdmVyIGZvciBNYXJ2ZWxsIExpYmVydGFzIDg2ODYgU1BJIGRldmljZXMuCisKIGNvbmZpZyBMSUJFUlRBU19ERUJVRwogCWJvb2wgIkVuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIExpYmVydGFzIG1vZHVsZS4iCiAJZGVwZW5kcyBvbiBMSUJFUlRBUwpAQCAtMTg4LDEyNyArMTk0LDYgQEAKIAogCSAgVGhlIGRyaXZlciBjYW4gYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUgYW5kIHdpbGwgYmUgbmFtZWQgImFpcm8iLgogCi1jb25maWcgSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBjaGlwc2V0IDgwMi4xMWIgc3VwcG9ydCAoT3Jpbm9jby9QcmlzbTIvU3ltYm9sKSIKLQlkZXBlbmRzIG9uIChQUENfUE1BQyB8fCBQQ0kgfHwgUENNQ0lBKSAmJiBXTEFOXzgwMjExCi0Jc2VsZWN0IFdJUkVMRVNTX0VYVAotCXNlbGVjdCBGV19MT0FERVIKLQlzZWxlY3QgQ1JZUFRPCi0Jc2VsZWN0IENSWVBUT19NSUNIQUVMX01JQwotCS0tLWhlbHAtLS0KLQkgIEEgZHJpdmVyIGZvciA4MDIuMTFiIHdpcmVsZXNzIGNhcmRzIGJhc2VkIG9uIHRoZSAiSGVybWVzIiBvcgotCSAgSW50ZXJzaWwgSEZBMzg0eCAoUHJpc20gMikgTUFDIGNvbnRyb2xsZXIuICBUaGlzIGluY2x1ZGVzIHRoZSB2YXN0Ci0JICBtYWpvcml0eSBvZiB0aGUgUENNQ0lBIDgwMi4xMWIgY2FyZHMgKHdoaWNoIGFyZSBuZWFybHkgYWxsIHJlYmFkZ2VzKQotCSAgLSBleGNlcHQgZm9yIHRoZSBDaXNjby9BaXJvbmV0IGNhcmRzLiAgQ2FyZHMgc3VwcG9ydGVkIGluY2x1ZGUgdGhlCi0JICBBcHBsZSBBaXJwb3J0IChub3QgYSBQQ01DSUEgY2FyZCksIFdhdmVsYW5JRUVFL09yaW5vY28sCi0JICBDYWJsZXRyb24vRW50ZXJhU3lzIFJvYW1hYm91dCwgRUxTQSBBaXJMYW5jZXIsIE1FTENPIEJ1ZmZhbG8sIEF2YXlhLAotCSAgSUJNIEhpZ2ggUmF0ZSBXaXJlbGVzcywgRmFycmFsb24gU3l5bGluZSwgU2Ftc3VuZyBNYWdpY0xBTiwgTmV0Z2VhcgotCSAgTUE0MDEsIExpbmtTeXMgV1BDLTExLCBELUxpbmsgRFdMLTY1MCwgM0NvbSBBaXJDb25uZWN0LCBJbnRlbAotCSAgSVBXMjAxMSwgYW5kIFN5bWJvbCBTcGVjdHJ1bTI0IEhpZ2ggUmF0ZSBhbW9uZ3N0IG90aGVycy4KLQotCSAgVGhpcyBvcHRpb24gaW5jbHVkZXMgdGhlIGd1dHMgb2YgdGhlIGRyaXZlciwgYnV0IGluIG9yZGVyIHRvCi0JICBhY3R1YWxseSB1c2UgYSBjYXJkIHlvdSB3aWxsIGFsc28gbmVlZCB0byBlbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBCi0JICBIZXJtZXMgY2FyZHMsIFBMWDkwNTIgYmFzZWQgUENJIGFkYXB0b3JzIG9yIHRoZSBBcHBsZSBBaXJwb3J0IGJlbG93LgotCi0JICBZb3Ugd2lsbCBhbHNvIHZlcnkgbGlrZWx5IGFsc28gbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KLQkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrcyA6Ci0JICA8aHR0cDovL3d3dy5ocGwuaHAuY29tL3BlcnNvbmFsL0plYW5fVG91cnJpbGhlcy9MaW51eC9Ub29scy5odG1sPgotCi1jb25maWcgSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQKLQlib29sICJDYWNoZSBIZXJtZXMgZmlybXdhcmUgb24gZHJpdmVyIGluaXRpYWxpc2F0aW9uIgotCWRlcGVuZHMgb24gSEVSTUVTCi0JZGVmYXVsdCB5Ci0JLS0taGVscC0tLQotCSAgU2F5IFkgdG8gY2FjaGUgYW55IGZpcm13YXJlIHJlcXVpcmVkIGJ5IHRoZSBIZXJtZXMgZHJpdmVycwotCSAgb24gc3RhcnR1cC4gIFRoZSBmaXJtd2FyZSB3aWxsIHJlbWFpbiBjYWNoZWQgdW50aWwgdGhlCi0JICBkcml2ZXIgaXMgdW5sb2FkZWQuICBUaGUgY2FjaGUgdXNlcyA2NEsgb2YgUkFNLgotCi0JICBPdGhlcndpc2UgbG9hZCB0aGUgZmlybXdhcmUgZnJvbSB1c2Vyc3BhY2UgYXMgcmVxdWlyZWQuICBJbgotCSAgdGhpcyBjYXNlIHRoZSBkcml2ZXIgc2hvdWxkIGJlIHVubG9hZGVkIGFuZCByZXN0YXJ0ZWQKLQkgIHdoZW5ldmVyIHRoZSBmaXJtd2FyZSBpcyBjaGFuZ2VkLgotCi0JICBJZiB5b3UgYXJlIG5vdCBzdXJlLCBzYXkgWS4KLQotY29uZmlnIEFQUExFX0FJUlBPUlQKLQl0cmlzdGF0ZSAiQXBwbGUgQWlycG9ydCBzdXBwb3J0IChidWlsdC1pbikiCi0JZGVwZW5kcyBvbiBQUENfUE1BQyAmJiBIRVJNRVMKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFpcnBvcnQgODAyLjExYiB3aXJlbGVzcyBFdGhlcm5ldCBoYXJkd2FyZQotCSAgYnVpbHQgaW50byB0aGUgTWFjaW50b3NoIGlCb29rIGFuZCBvdGhlciByZWNlbnQgUG93ZXJQQy1iYXNlZAotCSAgTWFjaW50b3NoIG1hY2hpbmVzLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgTHVjZW50IE9yaW5vY28gY2FyZCB3aXRoIAotCSAgYSBub24tc3RhbmRhcmQgaW50ZXJmYWNlLgotCi0JICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBaXJwb3J0IEV4dHJlbWUgKDgwMi4xMWIvZykuIFVzZQotCSAgdGhlIEJDTTQzeHggZHJpdmVyIGZvciBBaXJwb3J0IEV4dHJlbWUgY2FyZHMuCi0KLWNvbmZpZyBQTFhfSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBpbiBQTFg5MDUyIGJhc2VkIFBDSSBhZGFwdG9yIHN1cHBvcnQgKE5ldGdlYXIgTUEzMDEgZXRjLikiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCi0JaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhlICJIZXJtZXMiIChha2EKLQkgIG9yaW5vY28pIGRyaXZlciB3aGVuIHVzZWQgaW4gUExYOTA1MiBiYXNlZCBQQ0kgYWRhcHRvcnMuICBUaGVzZQotCSAgYWRhcHRvcnMgYXJlIG5vdCBhIGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXIgYnV0IGFjdCBhcyBhIG1vcmUgbGltaXRlZAotCSAgUENJIDwtPiBQQ01DSUEgYnJpZGdlLiAgU2V2ZXJhbCB2ZW5kb3JzIHNlbGwgc3VjaCBhZGFwdG9ycyBzbyB0aGF0Ci0JICA4MDIuMTFiIFBDTUNJQSBjYXJkcyBjYW4gYmUgdXNlZCBpbiBkZXNrdG9wIG1hY2hpbmVzLiAgVGhlIE5ldGdlYXIKLQkgIE1BMzAxIGlzIHN1Y2ggYW4gYWRhcHRvci4KLQotY29uZmlnIFRNRF9IRVJNRVMKLQl0cmlzdGF0ZSAiSGVybWVzIGluIFRNRDcxNjAgYmFzZWQgUENJIGFkYXB0b3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKLQloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQotCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBUTUQ3MTYwIGJhc2VkIFBDSSBhZGFwdG9ycy4gIFRoZXNlCi0JICBhZGFwdG9ycyBhcmUgbm90IGEgZnVsbCBQQ01DSUEgY29udHJvbGxlciBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCi0JICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuICBTZXZlcmFsIHZlbmRvcnMgc2VsbCBzdWNoIGFkYXB0b3JzIHNvIHRoYXQKLQkgIDgwMi4xMWIgUENNQ0lBIGNhcmRzIGNhbiBiZSB1c2VkIGluIGRlc2t0b3AgbWFjaGluZXMuCi0KLWNvbmZpZyBOT1JURUxfSEVSTUVTCi0JdHJpc3RhdGUgIk5vcnRlbCBlbW9iaWxpdHkgUENJIGFkYXB0b3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKLQloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQotCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBOb3J0ZWwgZW1vYmlsaXR5IFBDSSBhZGFwdG9ycy4gIFRoZXNlCi0JICBhZGFwdG9ycyBhcmUgbm90IGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXJzLCBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCi0JICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuCi0KLWNvbmZpZyBQQ0lfSEVSTUVTCi0JdHJpc3RhdGUgIlByaXNtIDIuNSBQQ0kgODAyLjExYiBhZGFwdG9yIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCi0JaGVscAotCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDSSBhbmQgbWluaS1QQ0kgODAyLjExYiB3aXJlbGVzcyBOSUNzIGJhc2VkIG9uCi0JICB0aGUgUHJpc20gMi41IGNoaXBzZXQuICBUaGVzZSBhcmUgdHJ1ZSBQQ0kgY2FyZHMsIG5vdCB0aGUgODAyLjExYgotCSAgUENNQ0lBIGNhcmRzIGJ1bmRsZWQgd2l0aCBQQ0k8LT5QQ01DSUEgYWRhcHRvcnMgd2hpY2ggYXJlIGFsc28KLQkgIGNvbW1vbi4gIFNvbWUgb2YgdGhlIGJ1aWx0LWluIHdpcmVsZXNzIGFkYXB0b3JzIGluIGxhcHRvcHMgYXJlIG9mCi0JICB0aGlzIHZhcmlldHkuCi0KLWNvbmZpZyBQQ01DSUFfSEVSTUVTCi0JdHJpc3RhdGUgIkhlcm1lcyBQQ01DSUEgY2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENNQ0lBICYmIEhFUk1FUwotCS0tLWhlbHAtLS0KLQkgIEEgZHJpdmVyIGZvciAiSGVybWVzIiBjaGlwc2V0IGJhc2VkIFBDTUNJQSB3aXJlbGVzcyBhZGFwdG9ycywgc3VjaAotCSAgYXMgdGhlIEx1Y2VudCBXYXZlbGFuSUVFRS9Pcmlub2NvIGNhcmRzIGFuZCB0aGVpciBPRU0gKENhYmxldHJvbi8KLQkgIEVudGVyYVN5cyBSb2FtQWJvdXQgODAyLjExLCBFTFNBIEFpcmxhbmNlciwgTWVsY28gQnVmZmFsbyBhbmQKLQkgIG90aGVycykuICBJdCBzaG91bGQgYWxzbyBiZSB1c2FibGUgb24gdmFyaW91cyBQcmlzbSBJSSBiYXNlZCBjYXJkcwotCSAgc3VjaCBhcyB0aGUgTGlua3N5cywgRC1MaW5rIGFuZCBGYXJhbGxvbiBTa3lsaW5lLiAgSXQgc2hvdWxkIGFsc28KLQkgIHdvcmsgb24gU3ltYm9sIGNhcmRzIHN1Y2ggYXMgdGhlIDNDb20gQWlyQ29ubmVjdCBhbmQgRXJpY3Nzb24gV0xBTi4KLQotCSAgWW91IHdpbGwgdmVyeSBsaWtlbHkgbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KLQkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrczoKLQkgIDxodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1Rvb2xzLmh0bWw+LgotCi1jb25maWcgUENNQ0lBX1NQRUNUUlVNCi0JdHJpc3RhdGUgIlN5bWJvbCBTcGVjdHJ1bTI0IFRyaWxvZ3kgUENNQ0lBIGNhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFBDTUNJQSAmJiBIRVJNRVMKLQktLS1oZWxwLS0tCi0KLQkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIDgwMi4xMWIgY2FyZHMgdXNpbmcgUkFNLWxvYWRhYmxlIFN5bWJvbAotCSAgZmlybXdhcmUsIHN1Y2ggYXMgU3ltYm9sIFdpcmVsZXNzIE5ldHdvcmtlciBMQTQxMDAsIENvbXBhY3RGbGFzaAotCSAgY2FyZHMgYnkgU29ja2V0IENvbW11bmljYXRpb25zIGFuZCBJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIuCi0KLQkgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGRvd25sb2FkIG9uIHN0YXJ0dXAuICBVdGlsaXRpZXMKLQkgIGZvciBkb3dubG9hZGluZyBTeW1ib2wgZmlybXdhcmUgYXJlIGF2YWlsYWJsZSBhdAotCSAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb3Jpbm9jby8+Ci0KIGNvbmZpZyBBVE1FTAogICAgICAgdHJpc3RhdGUgIkF0bWVsIGF0NzZjNTB4IGNoaXBzZXQgIDgwMi4xMWIgc3VwcG9ydCIKICAgICAgIGRlcGVuZHMgb24gKFBDSSB8fCBQQ01DSUEpICYmIFdMQU5fODAyMTEKQEAgLTM0Myw2ICsyMjgsMTQgQEAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgY29udGFpbmluZyB0aGUKIAkgIEF0bWVsIGF0NzZjNTAyIGFuZCBhdDc2YzUwNCBjaGlwcy4KIAorY29uZmlnIEFUNzZDNTBYX1VTQgorICAgICAgICB0cmlzdGF0ZSAiQXRtZWwgYXQ3NmM1MDMvYXQ3NmM1MDUvYXQ3NmM1MDVhIFVTQiBjYXJkcyIKKyAgICAgICAgZGVwZW5kcyBvbiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIFVTQgorICAgICAgICBzZWxlY3QgRldfTE9BREVSCisgICAgICAgIC0tLWhlbHAtLS0KKyAgICAgICAgICBFbmFibGUgc3VwcG9ydCBmb3IgVVNCIFdpcmVsZXNzIGRldmljZXMgdXNpbmcgQXRtZWwgYXQ3NmM1MDMsCisgICAgICAgICAgYXQ3NmM1MDUgb3IgYXQ3NmM1MDVhIGNoaXBzLgorCiBjb25maWcgQUlST19DUwogCXRyaXN0YXRlICJDaXNjby9BaXJvbmV0IDM0WC8zNVgvNDUwMC80ODAwIFBDTUNJQSBjYXJkcyIKIAlkZXBlbmRzIG9uIFBDTUNJQSAmJiAoQlJPS0VOIHx8ICFNMzJSKSAmJiBXTEFOXzgwMjExCkBAIC01ODAsOSArNDczLDE5IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUKIAkgIGNhbGxlZCBtYWM4MDIxMV9od3NpbS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBNV0w4SworCXRyaXN0YXRlICJNYXJ2ZWxsIDg4Vzh4eHggUENJL1BDSWUgV2lyZWxlc3Mgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFBDSSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1hcnZlbGwgVE9QRE9HIDgwMi4xMSB3aXJlbGVzcyBjYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgbXdsOGsuICBJZiB1bnN1cmUsIHNheSBOLgorCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9LY29uZmlnIgpAQCAtNTkwLDUgKzQ5Myw2IEBACiBzb3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnIgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL01ha2VmaWxlCmluZGV4IGFjNTkwZTFjLi41MGU3ZmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9NYWtlZmlsZQpAQCAtMjQsNiArMjQsOCBAQAogb2JqLSQoQ09ORklHX1BDSV9BVE1FTCkgICAgICAgICArPSBhdG1lbF9wY2kubyAKIG9iai0kKENPTkZJR19QQ01DSUFfQVRNRUwpICAgICAgKz0gYXRtZWxfY3MubwogCitvYmotJChDT05GSUdfQVQ3NkM1MFhfVVNCKSAgICAgICs9IGF0NzZjNTB4LXVzYi5vCisKIG9iai0kKENPTkZJR19QUklTTTU0KQkJKz0gcHJpc201NC8KIAogb2JqLSQoQ09ORklHX0hPU1RBUCkJCSs9IGhvc3RhcC8KQEAgLTQ2LDYgKzQ4LDggQEAKIAogb2JqLSQoQ09ORklHX0FETTgyMTEpCSs9IGFkbTgyMTEubwogCitvYmotJChDT05GSUdfTVdMOEspCSs9IG13bDhrLm8KKwogb2JqLSQoQ09ORklHX0lXTFdJRkkpCSs9IGl3bHdpZmkvCiBvYmotJChDT05GSUdfUlQyWDAwKQkrPSBydDJ4MDAvCiAKQEAgLTUzLDUgKzU3LDYgQEAKIAogb2JqLSQoQ09ORklHX0FUSDVLKQkrPSBhdGg1ay8KIG9iai0kKENPTkZJR19BVEg5SykJKz0gYXRoOWsvCitvYmotJChDT05GSUdfQVI5MTcwX1VTQikJKz0gYXI5MTcwLwogCiBvYmotJChDT05GSUdfTUFDODAyMTFfSFdTSU0pCSs9IG1hYzgwMjExX2h3c2ltLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCBmYzQzMjJjLi43ZTgwYWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC00OTYsMzkgKzQ5Niw0MSBAQAogICogc28gYWxsIHJpZCBhY2Nlc3Mgc2hvdWxkIHVzZSB0aGUgcmVhZC93cml0ZVhYWFJpZCByb3V0aW5lcy4KICAqLwogCi0vKiBUaGlzIGlzIHJlZHVuZGFudCBmb3IgeDg2IGFyY2hzLCBidXQgaXQgc2VlbXMgbmVjZXNzYXJ5IGZvciBBUk0gKi8KLSNwcmFnbWEgcGFjaygxKQotCiAvKiBUaGlzIHN0cnVjdHVyZSBjYW1lIGZyb20gYW4gZW1haWwgc2VudCB0byBtZSBmcm9tIGFuIGVuZ2luZWVyIGF0CiAgICBhaXJvbmV0IGZvciBpbmNsdXNpb24gaW50byB0aGlzIGRyaXZlciAqLwotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgV2VwS2V5UmlkIFdlcEtleVJpZDsKK3N0cnVjdCBXZXBLZXlSaWQgewogCV9fbGUxNiBsZW47CiAJX19sZTE2IGtpbmRleDsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCV9fbGUxNiBrbGVuOwogCXU4IGtleVsxNl07Ci19IFdlcEtleVJpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBmcm9tIHRoZSBBaXJvbmV0J3MgUEM0NTAwIERldmVsb3BlcnMgTWFudWFsICovCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTc2lkIFNzaWQ7CitzdHJ1Y3QgU3NpZCB7CiAJX19sZTE2IGxlbjsKIAl1OCBzc2lkWzMyXTsKLX0gU3NpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTc2lkUmlkIFNzaWRSaWQ7CitzdHJ1Y3QgU3NpZFJpZCB7CiAJX19sZTE2IGxlbjsKIAlTc2lkIHNzaWRzWzNdOwotfSBTc2lkUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IE1vZHVsYXRpb25SaWQgTW9kdWxhdGlvblJpZDsKK3N0cnVjdCBNb2R1bGF0aW9uUmlkIHsKICAgICAgICAgX19sZTE2IGxlbjsKICAgICAgICAgX19sZTE2IG1vZHVsYXRpb247CiAjZGVmaW5lIE1PRF9ERUZBVUxUIGNwdV90b19sZTE2KDApCiAjZGVmaW5lIE1PRF9DQ0sgY3B1X3RvX2xlMTYoMSkKICNkZWZpbmUgTU9EX01PSyBjcHVfdG9fbGUxNigyKQotfSBNb2R1bGF0aW9uUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IENvbmZpZ1JpZCBDb25maWdSaWQ7CitzdHJ1Y3QgQ29uZmlnUmlkIHsKIAlfX2xlMTYgbGVuOyAvKiBzaXplb2YoQ29uZmlnUmlkKSAqLwogCV9fbGUxNiBvcG1vZGU7IC8qIG9wZXJhdGluZyBtb2RlICovCiAjZGVmaW5lIE1PREVfU1RBX0lCU1MgY3B1X3RvX2xlMTYoMCkKQEAgLTY0OSw5ICs2NTEsMTAgQEAKICNkZWZpbmUgTUFHSUNfU1RBWV9JTl9DQU0gKDE8PDEwKQogCXU4IG1hZ2ljQ29udHJvbDsKIAlfX2xlMTYgYXV0b1dha2U7Ci19IENvbmZpZ1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTdGF0dXNSaWQgU3RhdHVzUmlkOworc3RydWN0IFN0YXR1c1JpZCB7CiAJX19sZTE2IGxlbjsKIAl1OCBtYWNbRVRIX0FMRU5dOwogCV9fbGUxNiBtb2RlOwpAQCAtNzA3LDIxICs3MTAsMjMgQEAKICNkZWZpbmUgU1RBVF9MRUFQRkFJTEVEIDkxCiAjZGVmaW5lIFNUQVRfTEVBUFRJTUVET1VUIDkyCiAjZGVmaW5lIFNUQVRfTEVBUENPTVBMRVRFIDkzCi19IFN0YXR1c1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBTdGF0c1JpZCBTdGF0c1JpZDsKK3N0cnVjdCBTdGF0c1JpZCB7CiAJX19sZTE2IGxlbjsKIAlfX2xlMTYgc3BhY2VyOwogCV9fbGUzMiB2YWxzWzEwMF07Ci19IFN0YXRzUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLQotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQVBMaXN0UmlkIEFQTGlzdFJpZDsKK3N0cnVjdCBBUExpc3RSaWQgewogCV9fbGUxNiBsZW47CiAJdTggYXBbNF1bRVRIX0FMRU5dOwotfSBBUExpc3RSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQ2FwYWJpbGl0eVJpZCBDYXBhYmlsaXR5UmlkOworc3RydWN0IENhcGFiaWxpdHlSaWQgewogCV9fbGUxNiBsZW47CiAJY2hhciBvdWlbM107CiAJY2hhciB6ZXJvOwpAQCAtNzQ4LDE3ICs3NTMsMTggQEAKIAlfX2xlMTYgYm9vdEJsb2NrVmVyOwogCV9fbGUxNiByZXF1aXJlZEhhcmQ7CiAJX19sZTE2IGV4dFNvZnRDYXA7Ci19IENhcGFiaWxpdHlSaWQ7Ci0KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKiBPbmx5IHByZXNlbnQgb24gZmlybXdhcmUgPj0gNS4zMC4xNyAqLwotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgQlNTTGlzdFJpZEV4dHJhIEJTU0xpc3RSaWRFeHRyYTsKK3N0cnVjdCBCU1NMaXN0UmlkRXh0cmEgewogICBfX2xlMTYgdW5rbm93bls0XTsKICAgdTggZml4ZWRbMTJdOyAvKiBXTEFOIG1hbmFnZW1lbnQgZnJhbWUgKi8KICAgdTggaWVwWzYyNF07Ci19IEJTU0xpc3RSaWRFeHRyYTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBCU1NMaXN0UmlkIEJTU0xpc3RSaWQ7CitzdHJ1Y3QgQlNTTGlzdFJpZCB7CiAgIF9fbGUxNiBsZW47CiAgIF9fbGUxNiBpbmRleDsgLyogRmlyc3QgaXMgMCBhbmQgMHhmZmZmIG1lYW5zIGVuZCBvZiBsaXN0ICovCiAjZGVmaW5lIFJBRElPX0ZIIDEgLyogRnJlcXVlbmN5IGhvcHBpbmcgcmFkaW8gdHlwZSAqLwpAQCAtNzg5LDMzICs3OTUsMzcgQEAKIAogICAvKiBPbmx5IHByZXNlbnQgb24gZmlybXdhcmUgPj0gNS4zMC4xNyAqLwogICBCU1NMaXN0UmlkRXh0cmEgZXh0cmE7Ci19IEJTU0xpc3RSaWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICBCU1NMaXN0UmlkIGJzczsKICAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfSBCU1NMaXN0RWxlbWVudDsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgdGRzUnNzaUVudHJ5IHRkc1Jzc2lFbnRyeTsKK3N0cnVjdCB0ZHNSc3NpRW50cnkgewogICB1OCByc3NpcGN0OwogICB1OCByc3NpZEJtOwotfSB0ZHNSc3NpRW50cnk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotdHlwZWRlZiBzdHJ1Y3QgewordHlwZWRlZiBzdHJ1Y3QgdGRzUnNzaVJpZCB0ZHNSc3NpUmlkOworc3RydWN0IHRkc1Jzc2lSaWQgewogICB1MTYgbGVuOwogICB0ZHNSc3NpRW50cnkgeFsyNTZdOwotfSB0ZHNSc3NpUmlkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKLQl1MTYgbGVuOwotCXUxNiBzdGF0ZTsKLQl1MTYgbXVsdGljYXN0VmFsaWQ7Cit0eXBlZGVmIHN0cnVjdCBNSUNSaWQgTUlDUmlkOworc3RydWN0IE1JQ1JpZCB7CisJX19sZTE2IGxlbjsKKwlfX2xlMTYgc3RhdGU7CisJX19sZTE2IG11bHRpY2FzdFZhbGlkOwogCXU4ICBtdWx0aWNhc3RbMTZdOwotCXUxNiB1bmljYXN0VmFsaWQ7CisJX19sZTE2IHVuaWNhc3RWYWxpZDsKIAl1OCAgdW5pY2FzdFsxNl07Ci19IE1JQ1JpZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi10eXBlZGVmIHN0cnVjdCB7Cit0eXBlZGVmIHN0cnVjdCBNSUNCdWZmZXIgTUlDQnVmZmVyOworc3RydWN0IE1JQ0J1ZmZlciB7CiAJX19iZTE2IHR5cGVsZW47CiAKIAl1bmlvbiB7CkBAIC04MzAsMTUgKzg0MCwxMyBAQAogCX0gdTsKIAlfX2JlMzIgbWljOwogCV9fYmUzMiBzZXE7Ci19IE1JQ0J1ZmZlcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdTggZGFbRVRIX0FMRU5dOwogCXU4IHNhW0VUSF9BTEVOXTsKIH0gZXRoZXJIZWFkOwogCi0jcHJhZ21hIHBhY2soKQotCiAjZGVmaW5lIFRYQ1RMX1RYT0sgKDE8PDEpIC8qIHJlcG9ydCBpZiB0eCBpcyBvayAqLwogI2RlZmluZSBUWENUTF9UWEVYICgxPDwyKSAvKiByZXBvcnQgaWYgdHggZmFpbHMgKi8KICNkZWZpbmUgVFhDVExfODAyXzMgKDA8PDMpIC8qIDgwMi4zIHBhY2tldCAqLwpAQCAtOTgxLDYgKzk4OSwxNCBAQAogCWRtYV9hZGRyX3QgaG9zdF9hZGRyOwogfSBUeEZpZDsKIAorc3RydWN0IHJ4X2hkciB7CisJX19sZTE2IHN0YXR1cywgbGVuOworCXU4IHJzc2lbMl07CisJdTggcmF0ZTsKKwl1OCBmcmVxOworCV9fbGUxNiB0bXBbNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogdHlwZWRlZiBzdHJ1Y3QgewogCXVuc2lnbmVkIGludCAgY3RsOiAxNTsKIAl1bnNpZ25lZCBpbnQgIHJkeTogMTsKQEAgLTEwNzAsMTAgKzEwODYsNiBAQAogCX0KIH07CiAKLS8vIEZyZXF1ZW5jeSBsaXN0IChtYXAgY2hhbm5lbHMgdG8gZnJlcXVlbmNpZXMpCi1zdGF0aWMgY29uc3QgbG9uZyBmcmVxdWVuY3lfbGlzdFtdID0geyAyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAotCQkJCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQgfTsKLQogLy8gQSBmZXcgZGV0YWlscyBuZWVkZWQgZm9yIFdFUCAoV2lyZWxlc3MgRXF1aXZhbGVudCBQcml2YWN5KQogI2RlZmluZSBNQVhfS0VZX1NJWkUgMTMJCQkvLyAxMjggKD8pIGJpdHMKICNkZWZpbmUgTUlOX0tFWV9TSVpFICA1CQkJLy8gNDAgYml0cyBSQzQgLSBXRVAKQEAgLTEwODIsMTIgKzEwOTQsNiBAQAogCXU4CWtleVsxNl07CS8qIDQwLWJpdCBhbmQgMTA0LWJpdCBrZXlzICovCiB9IHdlcF9rZXlfdDsKIAotLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotI2lmbmRlZiBJV19FTkNPREVfTk9LRVkKLSNkZWZpbmUgSVdfRU5DT0RFX05PS0VZICAgICAgICAgMHgwODAwICAvKiBLZXkgaXMgd3JpdGUgb25seSwgc28gbm90IHByZXNlbnQgKi8KLSNkZWZpbmUgSVdfRU5DT0RFX01PREUgIChJV19FTkNPREVfRElTQUJMRUQgfCBJV19FTkNPREVfUkVTVFJJQ1RFRCB8IElXX0VOQ09ERV9PUEVOKQotI2VuZGlmIC8qIElXX0VOQ09ERV9OT0tFWSAqLwotCiAvKiBMaXN0IG9mIFdpcmVsZXNzIEhhbmRsZXJzIChuZXcgQVBJKSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZglhaXJvX2hhbmRsZXJfZGVmOwogCkBAIC0xMTU1LDcgKzExNjEsNyBAQAogCSAgIHVzZSB0aGUgaGlnaCBiaXQgdG8gbWFyayB3aGV0aGVyIGl0IGlzIGluIHVzZS4gKi8KICNkZWZpbmUgTUFYX0ZJRFMgNgogI2RlZmluZSBNUElfTUFYX0ZJRFMgMQotCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZHNbTUFYX0ZJRFNdOworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZHNbTUFYX0ZJRFNdOwogCUNvbmZpZ1JpZCBjb25maWc7CiAJY2hhciBrZXlpbmRleDsgLy8gVXNlZCB3aXRoIGF1dG8gd2VwCiAJY2hhciBkZWZpbmRleDsgLy8gVXNlZCB3aXRoIGF1dG8gd2VwCkBAIC0xMjI5LDYgKzEyMzUsOSBAQAogI2RlZmluZQlQQ0lfU0hBUkVEX0xFTgkJMipNUElfTUFYX0ZJRFMqUEtUU0laRStSSURTSVpFCiAJY2hhcgkJCXByb2NfbmFtZVtJRk5BTVNJWl07CiAKKwlpbnQJCQl3ZXBfY2FwYWJsZTsKKwlpbnQJCQltYXhfd2VwX2lkeDsKKwogCS8qIFdQQS1yZWxhdGVkIHN0dWZmICovCiAJdW5zaWduZWQgaW50IGJzc0xpc3RGaXJzdDsKIAl1bnNpZ25lZCBpbnQgYnNzTGlzdE5leHQ7CkBAIC0xMjg3LDYgKzEyOTYsMjkgQEAKIHN0YXRpYyB2b2lkIGVtbWgzMl9maW5hbChlbW1oMzJfY29udGV4dCAqY29udGV4dCwgdTggZGlnZXN0WzRdKTsKIHN0YXRpYyBpbnQgZmxhc2hwY2hhcihzdHJ1Y3QgYWlyb19pbmZvICphaSxpbnQgYnl0ZSxpbnQgZHdlbGx0aW1lKTsKIAorc3RhdGljIHZvaWQgYWdlX21pY19jb250ZXh0KG1pY2NudHggKmN1ciwgbWljY250eCAqb2xkLCB1OCAqa2V5LCBpbnQga2V5X2xlbiwKKwkJCSAgICBzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQoreworCS8qIElmIHRoZSBjdXJyZW50IE1JQyBjb250ZXh0IGlzIHZhbGlkIGFuZCBpdHMga2V5IGlzIHRoZSBzYW1lIGFzCisJICogdGhlIE1JQyByZWdpc3RlciwgdGhlcmUncyBub3RoaW5nIHRvIGRvLgorCSAqLworCWlmIChjdXItPnZhbGlkICYmIChtZW1jbXAoY3VyLT5rZXksIGtleSwga2V5X2xlbikgPT0gMCkpCisJCXJldHVybjsKKworCS8qIEFnZSBjdXJyZW50IG1pYyBDb250ZXh0ICovCisJbWVtY3B5KG9sZCwgY3VyLCBzaXplb2YoKmN1cikpOworCisJLyogSW5pdGlhbGl6ZSBuZXcgY29udGV4dCAqLworCW1lbWNweShjdXItPmtleSwga2V5LCBrZXlfbGVuKTsKKwljdXItPndpbmRvdyAgPSAzMzsgLyogV2luZG93IGFsd2F5cyBwb2ludHMgdG8gdGhlIG1pZGRsZSAqLworCWN1ci0+cnggICAgICA9IDA7ICAvKiBSeCBTZXF1ZW5jZSBudW1iZXJzICovCisJY3VyLT50eCAgICAgID0gMDsgIC8qIFR4IHNlcXVlbmNlIG51bWJlcnMgKi8KKwljdXItPnZhbGlkICAgPSAxOyAgLyogS2V5IGlzIG5vdyB2YWxpZCAqLworCisJLyogR2l2ZSBrZXkgdG8gbWljIHNlZWQgKi8KKwllbW1oMzJfc2V0c2VlZCgmY3VyLT5zZWVkLCBrZXksIGtleV9sZW4sIHRmbSk7Cit9CisKIC8qIG1pY2luaXQgLSBJbml0aWFsaXplIG1pYyBzZWVkICovCiAKIHN0YXRpYyB2b2lkIG1pY2luaXQoc3RydWN0IGFpcm9faW5mbyAqYWkpCkBAIC0xMjk3LDQ5ICsxMzI5LDI2IEBACiAJUEM0NTAwX3JlYWRyaWQoYWksIFJJRF9NSUMsICZtaWNfcmlkLCBzaXplb2YobWljX3JpZCksIDApOwogCXVwKCZhaS0+c2VtKTsKIAotCWFpLT5taWNzdGF0cy5lbmFibGVkID0gKG1pY19yaWQuc3RhdGUgJiAweDAwRkYpID8gMSA6IDA7Ci0KLQlpZiAoYWktPm1pY3N0YXRzLmVuYWJsZWQpIHsKLQkJLyogS2V5IG11c3QgYmUgdmFsaWQgYW5kIGRpZmZlcmVudCAqLwotCQlpZiAobWljX3JpZC5tdWx0aWNhc3RWYWxpZCAmJiAoIWFpLT5tb2RbMF0ubUN0eC52YWxpZCB8fAotCQkgICAgKG1lbWNtcCAoYWktPm1vZFswXS5tQ3R4LmtleSwgbWljX3JpZC5tdWx0aWNhc3QsCi0JCQkgICAgIHNpemVvZihhaS0+bW9kWzBdLm1DdHgua2V5KSkgIT0gMCkpKSB7Ci0JCQkvKiBBZ2UgY3VycmVudCBtaWMgQ29udGV4dCAqLwotCQkJbWVtY3B5KCZhaS0+bW9kWzFdLm1DdHgsJmFpLT5tb2RbMF0ubUN0eCxzaXplb2YobWljY250eCkpOwotCQkJLyogSW5pdGlhbGl6ZSBuZXcgY29udGV4dCAqLwotCQkJbWVtY3B5KCZhaS0+bW9kWzBdLm1DdHgua2V5LG1pY19yaWQubXVsdGljYXN0LHNpemVvZihtaWNfcmlkLm11bHRpY2FzdCkpOwotCQkJYWktPm1vZFswXS5tQ3R4LndpbmRvdyAgPSAzMzsgLy9XaW5kb3cgYWx3YXlzIHBvaW50cyB0byB0aGUgbWlkZGxlCi0JCQlhaS0+bW9kWzBdLm1DdHgucnggICAgICA9IDA7ICAvL1J4IFNlcXVlbmNlIG51bWJlcnMKLQkJCWFpLT5tb2RbMF0ubUN0eC50eCAgICAgID0gMDsgIC8vVHggc2VxdWVuY2UgbnVtYmVycwotCQkJYWktPm1vZFswXS5tQ3R4LnZhbGlkICAgPSAxOyAgLy9LZXkgaXMgbm93IHZhbGlkCi0gIAotCQkJLyogR2l2ZSBrZXkgdG8gbWljIHNlZWQgKi8KLQkJCWVtbWgzMl9zZXRzZWVkKCZhaS0+bW9kWzBdLm1DdHguc2VlZCxtaWNfcmlkLm11bHRpY2FzdCxzaXplb2YobWljX3JpZC5tdWx0aWNhc3QpLCBhaS0+dGZtKTsKLQkJfQotCi0JCS8qIEtleSBtdXN0IGJlIHZhbGlkIGFuZCBkaWZmZXJlbnQgKi8KLQkJaWYgKG1pY19yaWQudW5pY2FzdFZhbGlkICYmICghYWktPm1vZFswXS51Q3R4LnZhbGlkIHx8IAotCQkgICAgKG1lbWNtcChhaS0+bW9kWzBdLnVDdHgua2V5LCBtaWNfcmlkLnVuaWNhc3QsCi0JCQkgICAgc2l6ZW9mKGFpLT5tb2RbMF0udUN0eC5rZXkpKSAhPSAwKSkpIHsKLQkJCS8qIEFnZSBjdXJyZW50IG1pYyBDb250ZXh0ICovCi0JCQltZW1jcHkoJmFpLT5tb2RbMV0udUN0eCwmYWktPm1vZFswXS51Q3R4LHNpemVvZihtaWNjbnR4KSk7Ci0JCQkvKiBJbml0aWFsaXplIG5ldyBjb250ZXh0ICovCi0JCQltZW1jcHkoJmFpLT5tb2RbMF0udUN0eC5rZXksbWljX3JpZC51bmljYXN0LHNpemVvZihtaWNfcmlkLnVuaWNhc3QpKTsKLQkKLQkJCWFpLT5tb2RbMF0udUN0eC53aW5kb3cgID0gMzM7IC8vV2luZG93IGFsd2F5cyBwb2ludHMgdG8gdGhlIG1pZGRsZQotCQkJYWktPm1vZFswXS51Q3R4LnJ4ICAgICAgPSAwOyAgLy9SeCBTZXF1ZW5jZSBudW1iZXJzCi0JCQlhaS0+bW9kWzBdLnVDdHgudHggICAgICA9IDA7ICAvL1R4IHNlcXVlbmNlIG51bWJlcnMKLQkJCWFpLT5tb2RbMF0udUN0eC52YWxpZCAgID0gMTsgIC8vS2V5IGlzIG5vdyB2YWxpZAotCQotCQkJLy9HaXZlIGtleSB0byBtaWMgc2VlZAotCQkJZW1taDMyX3NldHNlZWQoJmFpLT5tb2RbMF0udUN0eC5zZWVkLCBtaWNfcmlkLnVuaWNhc3QsIHNpemVvZihtaWNfcmlkLnVuaWNhc3QpLCBhaS0+dGZtKTsKLQkJfQotCX0gZWxzZSB7Ci0gICAgICAvKiBTbyBuZXh0IHRpbWUgd2UgaGF2ZSBhIHZhbGlkIGtleSBhbmQgbWljIGlzIGVuYWJsZWQsIHdlIHdpbGwgdXBkYXRlCi0gICAgICAgKiB0aGUgc2VxdWVuY2UgbnVtYmVyIGlmIHRoZSBrZXkgaXMgdGhlIHNhbWUgYXMgYmVmb3JlLgotICAgICAgICovCisJYWktPm1pY3N0YXRzLmVuYWJsZWQgPSAobGUxNl90b19jcHUobWljX3JpZC5zdGF0ZSkgJiAweDAwRkYpID8gMSA6IDA7CisJaWYgKCFhaS0+bWljc3RhdHMuZW5hYmxlZCkgeworCQkvKiBTbyBuZXh0IHRpbWUgd2UgaGF2ZSBhIHZhbGlkIGtleSBhbmQgbWljIGlzIGVuYWJsZWQsIHdlIHdpbGwKKwkJICogdXBkYXRlIHRoZSBzZXF1ZW5jZSBudW1iZXIgaWYgdGhlIGtleSBpcyB0aGUgc2FtZSBhcyBiZWZvcmUuCisJCSAqLwogCQlhaS0+bW9kWzBdLnVDdHgudmFsaWQgPSAwOwogCQlhaS0+bW9kWzBdLm1DdHgudmFsaWQgPSAwOworCQlyZXR1cm47CisJfQorCisJaWYgKG1pY19yaWQubXVsdGljYXN0VmFsaWQpIHsKKwkJYWdlX21pY19jb250ZXh0KCZhaS0+bW9kWzBdLm1DdHgsICZhaS0+bW9kWzFdLm1DdHgsCisJCSAgICAgICAgICAgICAgICBtaWNfcmlkLm11bHRpY2FzdCwgc2l6ZW9mKG1pY19yaWQubXVsdGljYXN0KSwKKwkJICAgICAgICAgICAgICAgIGFpLT50Zm0pOworCX0KKworCWlmIChtaWNfcmlkLnVuaWNhc3RWYWxpZCkgeworCQlhZ2VfbWljX2NvbnRleHQoJmFpLT5tb2RbMF0udUN0eCwgJmFpLT5tb2RbMV0udUN0eCwKKwkJCQltaWNfcmlkLnVuaWNhc3QsIHNpemVvZihtaWNfcmlkLnVuaWNhc3QpLAorCQkJCWFpLT50Zm0pOwogCX0KIH0KIApAQCAtMjYzNywxNyArMjY0NiwyMSBAQAogCS5wYXJzZSA9IHdsbF9oZWFkZXJfcGFyc2UsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFpcm8xMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gYWlyb19vcGVuLAorCS5uZG9fc3RvcCAJCT0gYWlyb19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQgCT0gYWlyb19zdGFydF94bWl0MTEsCisJLm5kb19nZXRfc3RhdHMgCQk9IGFpcm9fZ2V0X3N0YXRzLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYWlyb19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19kb19pb2N0bAkJPSBhaXJvX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBhaXJvX2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgdm9pZCB3aWZpX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJZGV2LT5uZXRkZXZfb3BzID0gJmFpcm8xMV9uZXRkZXZfb3BzOwogCWRldi0+aGVhZGVyX29wcyA9ICZhaXJvX2hlYWRlcl9vcHM7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmYWlyb19zdGFydF94bWl0MTE7Ci0JZGV2LT5nZXRfc3RhdHMgPSAmYWlyb19nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmYWlyb19zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5kb19pb2N0bCA9ICZhaXJvX2lvY3RsOwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmYWlyb19oYW5kbGVyX2RlZjsKLQlkZXYtPmNoYW5nZV9tdHUgPSAmYWlyb19jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9ICZhaXJvX29wZW47Ci0JZGV2LT5zdG9wID0gJmFpcm9fY2xvc2U7CiAKIAlkZXYtPnR5cGUgICAgICAgICAgICAgICA9IEFSUEhSRF9JRUVFODAyMTE7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gICAgPSBFVEhfSExFTjsKQEAgLTI3MzAsMjcgKzI3NDMsMzIgQEAKIAkJCSAgICAgICZhaS0+bmV0d29ya19mcmVlX2xpc3QpOwogfQogCi1zdGF0aWMgaW50IGFpcm9fdGVzdF93cGFfY2FwYWJsZShzdHJ1Y3QgYWlyb19pbmZvICphaSkKLXsKLQlpbnQgc3RhdHVzOwotCUNhcGFiaWxpdHlSaWQgY2FwX3JpZDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYWlyb19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBhaXJvX29wZW4sCisJLm5kb19zdG9wCQk9IGFpcm9fY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGFpcm9fc3RhcnRfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkJPSBhaXJvX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IGFpcm9fc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gYWlyb19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19kb19pb2N0bAkJPSBhaXJvX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBhaXJvX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAotCXN0YXR1cyA9IHJlYWRDYXBhYmlsaXR5UmlkKGFpLCAmY2FwX3JpZCwgMSk7Ci0JaWYgKHN0YXR1cyAhPSBTVUNDRVNTKSByZXR1cm4gMDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbXBpX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGFpcm9fb3BlbiwKKwkubmRvX3N0b3AJCT0gYWlyb19jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbXBpX3N0YXJ0X3htaXQsCisJLm5kb19nZXRfc3RhdHMJCT0gYWlyb19nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBhaXJvX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGFpcm9fc2V0X21hY19hZGRyZXNzLAorCS5uZG9fZG9faW9jdGwJCT0gYWlyb19pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gYWlyb19jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKLQkvKiBPbmx5IGZpcm13YXJlIHZlcnNpb25zIDUuMzAuMTcgb3IgYmV0dGVyIGNhbiBkbyBXUEEgKi8KLQlpZiAobGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0VmVyKSA+IDB4NTMwCi0JICB8fCAobGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0VmVyKSA9PSAweDUzMAotCSAgICAgICYmIGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFN1YlZlcikgPj0gMTcpKSB7Ci0JCWFpcm9fcHJpbnRfaW5mbygiIiwgIldQQSBpcyBzdXBwb3J0ZWQuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIE5vIFdQQSBzdXBwb3J0ICovCi0JYWlyb19wcmludF9pbmZvKCIiLCAiV1BBIHVuc3VwcG9ydGVkIChvbmx5IGZpcm13YXJlIHZlcnNpb25zIDUuMzAuMTciCi0JCSIgYW5kIGdyZWF0ZXIgc3VwcG9ydCBXUEEuICBEZXRlY3RlZCAlcykiLCBjYXBfcmlkLnByb2RWZXIpOwotCXJldHVybiAwOwotfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKl9pbml0X2Fpcm9fY2FyZCggdW5zaWduZWQgc2hvcnQgaXJxLCBpbnQgcG9ydCwKIAkJCQkJICAgaW50IGlzX3BjbWNpYSwgc3RydWN0IHBjaV9kZXYgKnBjaSwKQEAgLTI3NTksNiArMjc3Nyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgYWlyb19pbmZvICphaTsKIAlpbnQgaSwgcmM7CisJQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwogCiAJLyogQ3JlYXRlIHRoZSBuZXR3b3JrIGRldmljZSBvYmplY3QuICovCiAJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqYWkpLCAiIiwgZXRoZXJfc2V0dXApOwpAQCAtMjc4OCwyMiArMjgwNywxNiBAQAogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAlhaXJvX25ldHdvcmtzX2luaXRpYWxpemUgKGFpKTsKIAorCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZhaS0+dHhxKTsKKwogCS8qIFRoZSBBaXJvLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhaS0+ZmxhZ3MpKSB7Ci0JCXNrYl9xdWV1ZV9oZWFkX2luaXQgKCZhaS0+dHhxKTsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmbXBpX3N0YXJ0X3htaXQ7Ci0JfSBlbHNlCi0JCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJmFpcm9fc3RhcnRfeG1pdDsKLQlkZXYtPmdldF9zdGF0cyA9ICZhaXJvX2dldF9zdGF0czsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZhaXJvX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZhaXJvX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmRvX2lvY3RsID0gJmFpcm9faW9jdGw7CisJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCZhaS0+ZmxhZ3MpKQorCQlkZXYtPm5ldGRldl9vcHMgPSAmbXBpX25ldGRldl9vcHM7CisJZWxzZQorCQlkZXYtPm5ldGRldl9vcHMgPSAmYWlyb19uZXRkZXZfb3BzOwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmYWlyb19oYW5kbGVyX2RlZjsKIAlhaS0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZhaS0+c3B5X2RhdGE7CiAJZGV2LT53aXJlbGVzc19kYXRhID0gJmFpLT53aXJlbGVzc19kYXRhOwotCWRldi0+Y2hhbmdlX210dSA9ICZhaXJvX2NoYW5nZV9tdHU7Ci0JZGV2LT5vcGVuID0gJmFpcm9fb3BlbjsKLQlkZXYtPnN0b3AgPSAmYWlyb19jbG9zZTsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPmJhc2VfYWRkciA9IHBvcnQ7CiAKQEAgLTI4MjgsNyArMjg0MSw3IEBACiAJfQogCiAJaWYgKHByb2JlKSB7Ci0JCWlmICggc2V0dXBfY2FyZCggYWksIGRldi0+ZGV2X2FkZHIsIDEgKSAhPSBTVUNDRVNTICkgeworCQlpZiAoc2V0dXBfY2FyZChhaSwgZGV2LT5kZXZfYWRkciwgMSkgIT0gU1VDQ0VTUykgewogCQkJYWlyb19wcmludF9lcnIoZGV2LT5uYW1lLCAiTUFDIGNvdWxkIG5vdCBiZSBlbmFibGVkIiApOwogCQkJcmMgPSAtRUlPOwogCQkJZ290byBlcnJfb3V0X21hcDsKQEAgLTI4MzgsMTggKzI4NTEsNiBAQAogCQlzZXRfYml0KEZMQUdfRkxBU0hJTkcsICZhaS0+ZmxhZ3MpOwogCX0KIAotCS8qIFRlc3QgZm9yIFdQQSBzdXBwb3J0ICovCi0JaWYgKGFpcm9fdGVzdF93cGFfY2FwYWJsZShhaSkpIHsKLQkJc2V0X2JpdChGTEFHX1dQQV9DQVBBQkxFLCAmYWktPmZsYWdzKTsKLQkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9XUEFfQlNTTElTVEZJUlNUOwotCQlhaS0+YnNzTGlzdE5leHQgPSBSSURfV1BBX0JTU0xJU1RORVhUOwotCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKTsKLQl9IGVsc2UgewotCQlhaS0+YnNzTGlzdEZpcnN0ID0gUklEX0JTU0xJU1RGSVJTVDsKLQkJYWktPmJzc0xpc3ROZXh0ID0gUklEX0JTU0xJU1RORVhUOwotCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKSAtIHNpemVvZihCU1NMaXN0UmlkRXh0cmEpOwotCX0KLQogCXN0cmNweShkZXYtPm5hbWUsICJldGglZCIpOwogCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjKSB7CkBAIC0yODYwLDYgKzI4NjEsNDAgQEAKIAlpZiAoIWFpLT53aWZpZGV2KQogCQlnb3RvIGVycl9vdXRfcmVnOwogCisJcmMgPSByZWFkQ2FwYWJpbGl0eVJpZChhaSwgJmNhcF9yaWQsIDEpOworCWlmIChyYyAhPSBTVUNDRVNTKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBlcnJfb3V0X3dpZmk7CisJfQorCS8qIFdFUCBjYXBhYmlsaXR5IGRpc2NvdmVyeSAqLworCWFpLT53ZXBfY2FwYWJsZSA9IChjYXBfcmlkLnNvZnRDYXAgJiBjcHVfdG9fbGUxNigweDAyKSkgPyAxIDogMDsKKwlhaS0+bWF4X3dlcF9pZHggPSAoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMHg4MCkpID8gMyA6IDA7CisKKwlhaXJvX3ByaW50X2luZm8oZGV2LT5uYW1lLCAiRmlybXdhcmUgdmVyc2lvbiAleC4leC4lMDJ4IiwKKwkgICAgICAgICAgICAgICAgKChsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRWZXIpID4+IDgpICYgMHhGKSwKKwkgICAgICAgICAgICAgICAgKGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFZlcikgJiAweEZGKSwKKwkgICAgICAgICAgICAgICAgbGUxNl90b19jcHUoY2FwX3JpZC5zb2Z0U3ViVmVyKSk7CisKKwkvKiBUZXN0IGZvciBXUEEgc3VwcG9ydCAqLworCS8qIE9ubHkgZmlybXdhcmUgdmVyc2lvbnMgNS4zMC4xNyBvciBiZXR0ZXIgY2FuIGRvIFdQQSAqLworCWlmIChsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRWZXIpID4gMHg1MzAKKwkgfHwgKGxlMTZfdG9fY3B1KGNhcF9yaWQuc29mdFZlcikgPT0gMHg1MzAKKwkgICAgICAmJiBsZTE2X3RvX2NwdShjYXBfcmlkLnNvZnRTdWJWZXIpID49IDE3KSkgeworCQlhaXJvX3ByaW50X2luZm8oYWktPmRldi0+bmFtZSwgIldQQSBzdXBwb3J0ZWQuIik7CisKKwkJc2V0X2JpdChGTEFHX1dQQV9DQVBBQkxFLCAmYWktPmZsYWdzKTsKKwkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9XUEFfQlNTTElTVEZJUlNUOworCQlhaS0+YnNzTGlzdE5leHQgPSBSSURfV1BBX0JTU0xJU1RORVhUOworCQlhaS0+YnNzTGlzdFJpZExlbiA9IHNpemVvZihCU1NMaXN0UmlkKTsKKwl9IGVsc2UgeworCQlhaXJvX3ByaW50X2luZm8oYWktPmRldi0+bmFtZSwgIldQQSB1bnN1cHBvcnRlZCB3aXRoIGZpcm13YXJlICIKKwkJCSJ2ZXJzaW9ucyBvbGRlciB0aGFuIDUuMzAuMTcuIik7CisKKwkJYWktPmJzc0xpc3RGaXJzdCA9IFJJRF9CU1NMSVNURklSU1Q7CisJCWFpLT5ic3NMaXN0TmV4dCA9IFJJRF9CU1NMSVNUTkVYVDsKKwkJYWktPmJzc0xpc3RSaWRMZW4gPSBzaXplb2YoQlNTTGlzdFJpZCkgLSBzaXplb2YoQlNTTGlzdFJpZEV4dHJhKTsKKwl9CisKIAlzZXRfYml0KEZMQUdfUkVHSVNURVJFRCwmYWktPmZsYWdzKTsKIAlhaXJvX3ByaW50X2luZm8oZGV2LT5uYW1lLCAiTUFDIGVuYWJsZWQgJXBNIiwgZGV2LT5kZXZfYWRkcik7CiAKQEAgLTMxMjcsMzE0ICszMTYyLDM1NCBAQAogCXJldHVybiAyNDsKIH0KIAorc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfY2lzY29fbWljKHN0cnVjdCBhaXJvX2luZm8gKmFpKQoreworCWlmICh0ZXN0X2JpdChGTEFHX01JQ19DQVBBQkxFLCAmYWktPmZsYWdzKSkgeworCQlzZXRfYml0KEpPQl9NSUMsICZhaS0+am9icyk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWktPnRocl93YWl0KTsKKwl9Cit9CisKKy8qIEFpcm8gU3RhdHVzIGNvZGVzICovCisjZGVmaW5lIFNUQVRfTk9CRUFDT04JMHg4MDAwIC8qIExvc3Mgb2Ygc3luYyAtIG1pc3NlZCBiZWFjb25zICovCisjZGVmaW5lIFNUQVRfTUFYUkVUUklFUwkweDgwMDEgLyogTG9zcyBvZiBzeW5jIC0gbWF4IHJldHJpZXMgKi8KKyNkZWZpbmUgU1RBVF9NQVhBUkwJMHg4MDAyIC8qIExvc3Mgb2Ygc3luYyAtIGF2ZXJhZ2UgcmV0cnkgbGV2ZWwgZXhjZWVkZWQqLworI2RlZmluZSBTVEFUX0ZPUkNFTE9TUwkweDgwMDMgLyogTG9zcyBvZiBzeW5jIC0gaG9zdCByZXF1ZXN0ICovCisjZGVmaW5lIFNUQVRfVFNGU1lOQwkweDgwMDQgLyogTG9zcyBvZiBzeW5jIC0gVFNGIHN5bmNocm9uaXphdGlvbiAqLworI2RlZmluZSBTVEFUX0RFQVVUSAkweDgxMDAgLyogbG93IGJ5dGUgaXMgODAyLjExIHJlYXNvbiBjb2RlICovCisjZGVmaW5lIFNUQVRfRElTQVNTT0MJMHg4MjAwIC8qIGxvdyBieXRlIGlzIDgwMi4xMSByZWFzb24gY29kZSAqLworI2RlZmluZSBTVEFUX0FTU09DX0ZBSUwJMHg4NDAwIC8qIGxvdyBieXRlIGlzIDgwMi4xMSByZWFzb24gY29kZSAqLworI2RlZmluZSBTVEFUX0FVVEhfRkFJTAkweDAzMDAgLyogbG93IGJ5dGUgaXMgODAyLjExIHJlYXNvbiBjb2RlICovCisjZGVmaW5lIFNUQVRfQVNTT0MJMHgwNDAwIC8qIEFzc29jaWF0ZWQgKi8KKyNkZWZpbmUgU1RBVF9SRUFTU09DICAgIDB4MDYwMCAvKiBSZWFzc29jaWF0ZWQ/ICBPbmx5IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KKworc3RhdGljIHZvaWQgYWlyb19wcmludF9zdGF0dXMoY29uc3QgY2hhciAqZGV2bmFtZSwgdTE2IHN0YXR1cykKK3sKKwl1OCByZWFzb24gPSBzdGF0dXMgJiAweEZGOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIFNUQVRfTk9CRUFDT046CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJsaW5rIGxvc3QgKG1pc3NlZCBiZWFjb25zKSIpOworCQlicmVhazsKKwljYXNlIFNUQVRfTUFYUkVUUklFUzoKKwljYXNlIFNUQVRfTUFYQVJMOgorCQlhaXJvX3ByaW50X2RiZyhkZXZuYW1lLCAibGluayBsb3N0IChtYXggcmV0cmllcykiKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0ZPUkNFTE9TUzoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImxpbmsgbG9zdCAobG9jYWwgY2hvaWNlKSIpOworCQlicmVhazsKKwljYXNlIFNUQVRfVFNGU1lOQzoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImxpbmsgbG9zdCAoVFNGIHN5bmMgbG9zdCkiKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0RFQVVUSDoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImRlYXV0aGVudGljYXRlZCAocmVhc29uOiAlZCkiLCByZWFzb24pOworCQlicmVhazsKKwljYXNlIFNUQVRfRElTQVNTT0M6CisJCWFpcm9fcHJpbnRfZGJnKGRldm5hbWUsICJkaXNhc3NvY2lhdGVkIChyZWFzb246ICVkKSIsIHJlYXNvbik7CisJCWJyZWFrOworCWNhc2UgU1RBVF9BU1NPQ19GQUlMOgorCQlhaXJvX3ByaW50X2RiZyhkZXZuYW1lLCAiYXNzb2NpYXRpb24gZmFpbGVkIChyZWFzb246ICVkKSIsCisJCQkgICAgICAgcmVhc29uKTsKKwkJYnJlYWs7CisJY2FzZSBTVEFUX0FVVEhfRkFJTDoKKwkJYWlyb19wcmludF9kYmcoZGV2bmFtZSwgImF1dGhlbnRpY2F0aW9uIGZhaWxlZCAocmVhc29uOiAlZCkiLAorCQkJICAgICAgIHJlYXNvbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfbGluayhzdHJ1Y3QgYWlyb19pbmZvICphaSkKK3sKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJaW50IHNjYW5fZm9yY2Vsb3NzID0gMDsKKwl1MTYgc3RhdHVzOworCisJLyogR2V0IG5ldyBzdGF0dXMgYW5kIGFja25vd2xlZGdlIHRoZSBsaW5rIGNoYW5nZSAqLworCXN0YXR1cyA9IGxlMTZfdG9fY3B1KElONDUwMChhaSwgTElOS1NUQVQpKTsKKwlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfTElOSyk7CisKKwlpZiAoKHN0YXR1cyA9PSBTVEFUX0ZPUkNFTE9TUykgJiYgKGFpLT5zY2FuX3RpbWVvdXQgPiAwKSkKKwkJc2Nhbl9mb3JjZWxvc3MgPSAxOworCisJYWlyb19wcmludF9zdGF0dXMoYWktPmRldi0+bmFtZSwgc3RhdHVzKTsKKworCWlmICgoc3RhdHVzID09IFNUQVRfQVNTT0MpIHx8IChzdGF0dXMgPT0gU1RBVF9SRUFTU09DKSkgeworCQlpZiAoYXV0b193ZXApCisJCQlhaS0+ZXhwaXJlcyA9IDA7CisJCWlmIChhaS0+bGlzdF9ic3NfdGFzaykKKwkJCXdha2VfdXBfcHJvY2VzcyhhaS0+bGlzdF9ic3NfdGFzayk7CisJCXNldF9iaXQoRkxBR19VUERBVEVfVU5JLCAmYWktPmZsYWdzKTsKKwkJc2V0X2JpdChGTEFHX1VQREFURV9NVUxUSSwgJmFpLT5mbGFncyk7CisKKwkJaWYgKGRvd25fdHJ5bG9jaygmYWktPnNlbSkgIT0gMCkgeworCQkJc2V0X2JpdChKT0JfRVZFTlQsICZhaS0+am9icyk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFpLT50aHJfd2FpdCk7CisJCX0gZWxzZQorCQkJYWlyb19zZW5kX2V2ZW50KGFpLT5kZXYpOworCX0gZWxzZSBpZiAoIXNjYW5fZm9yY2Vsb3NzKSB7CisJCWlmIChhdXRvX3dlcCAmJiAhYWktPmV4cGlyZXMpIHsKKwkJCWFpLT5leHBpcmVzID0gUlVOX0FUKDMqSFopOworCQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhaS0+dGhyX3dhaXQpOworCQl9CisKKwkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJCW1lbXNldCh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgJ1wwJywgRVRIX0FMRU4pOworCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQl3aXJlbGVzc19zZW5kX2V2ZW50KGFpLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfcngoc3RydWN0IGFpcm9faW5mbyAqYWkpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJX19sZTE2IGZjLCB2LCAqYnVmZmVyLCB0bXBidWZbNF07CisJdTE2IGxlbiwgaGRybGVuID0gMCwgZ2FwLCBmaWQ7CisJc3RydWN0IHJ4X2hkciBoZHI7CisJaW50IHN1Y2Nlc3MgPSAwOworCisJaWYgKHRlc3RfYml0KEZMQUdfTVBJLCAmYWktPmZsYWdzKSkgeworCQlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhaS0+ZmxhZ3MpKQorCQkJbXBpX3JlY2VpdmVfODAyXzExKGFpKTsKKwkJZWxzZQorCQkJbXBpX3JlY2VpdmVfODAyXzMoYWkpOworCQlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfUlgpOworCQlyZXR1cm47CisJfQorCisJZmlkID0gSU40NTAwKGFpLCBSWEZJRCk7CisKKwkvKiBHZXQgdGhlIHBhY2tldCBsZW5ndGggKi8KKwlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhaS0+ZmxhZ3MpKSB7CisJCWJhcF9zZXR1cCAoYWksIGZpZCwgNCwgQkFQMCk7CisJCWJhcF9yZWFkIChhaSwgKF9fbGUxNiopJmhkciwgc2l6ZW9mKGhkciksIEJBUDApOworCQkvKiBCYWQgQ1JDLiBJZ25vcmUgcGFja2V0ICovCisJCWlmIChsZTE2X3RvX2NwdShoZHIuc3RhdHVzKSAmIDIpCisJCQloZHIubGVuID0gMDsKKwkJaWYgKGFpLT53aWZpZGV2ID09IE5VTEwpCisJCQloZHIubGVuID0gMDsKKwl9IGVsc2UgeworCQliYXBfc2V0dXAoYWksIGZpZCwgMHgzNiwgQkFQMCk7CisJCWJhcF9yZWFkKGFpLCAmaGRyLmxlbiwgMiwgQkFQMCk7CisJfQorCWxlbiA9IGxlMTZfdG9fY3B1KGhkci5sZW4pOworCisJaWYgKGxlbiA+IEFJUk9fREVGX01UVSkgeworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiQmFkIHNpemUgJWQiLCBsZW4pOworCQlnb3RvIGRvbmU7CisJfQorCWlmIChsZW4gPT0gMCkKKwkJZ290byBkb25lOworCisJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYWktPmZsYWdzKSkgeworCQliYXBfcmVhZChhaSwgJmZjLCBzaXplb2YgKGZjKSwgQkFQMCk7CisJCWhkcmxlbiA9IGhlYWRlcl9sZW4oZmMpOworCX0gZWxzZQorCQloZHJsZW4gPSBFVEhfQUxFTiAqIDI7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIGhkcmxlbiArIDIgKyAyKTsKKwlpZiAoIXNrYikgeworCQlhaS0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlza2JfcmVzZXJ2ZShza2IsIDIpOyAvKiBUaGlzIHdheSB0aGUgSVAgaGVhZGVyIGlzIGFsaWduZWQgKi8KKwlidWZmZXIgPSAoX19sZTE2ICopIHNrYl9wdXQoc2tiLCBsZW4gKyBoZHJsZW4pOworCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFpLT5mbGFncykpIHsKKwkJYnVmZmVyWzBdID0gZmM7CisJCWJhcF9yZWFkKGFpLCBidWZmZXIgKyAxLCBoZHJsZW4gLSAyLCBCQVAwKTsKKwkJaWYgKGhkcmxlbiA9PSAyNCkKKwkJCWJhcF9yZWFkKGFpLCB0bXBidWYsIDYsIEJBUDApOworCisJCWJhcF9yZWFkKGFpLCAmdiwgc2l6ZW9mKHYpLCBCQVAwKTsKKwkJZ2FwID0gbGUxNl90b19jcHUodik7CisJCWlmIChnYXApIHsKKwkJCWlmIChnYXAgPD0gOCkgeworCQkJCWJhcF9yZWFkKGFpLCB0bXBidWYsIGdhcCwgQkFQMCk7CisJCQl9IGVsc2UgeworCQkJCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJnYXBsZW4gdG9vICIKKwkJCQkJImJpZy4gUHJvYmxlbXMgd2lsbCBmb2xsb3cuLi4iKTsKKwkJCX0KKwkJfQorCQliYXBfcmVhZChhaSwgYnVmZmVyICsgaGRybGVuLzIsIGxlbiwgQkFQMCk7CisJfSBlbHNlIHsKKwkJTUlDQnVmZmVyIG1pY2J1ZjsKKworCQliYXBfcmVhZChhaSwgYnVmZmVyLCBFVEhfQUxFTiAqIDIsIEJBUDApOworCQlpZiAoYWktPm1pY3N0YXRzLmVuYWJsZWQpIHsKKwkJCWJhcF9yZWFkKGFpLCAoX19sZTE2ICopICZtaWNidWYsIHNpemVvZiAobWljYnVmKSwgQkFQMCk7CisJCQlpZiAobnRvaHMobWljYnVmLnR5cGVsZW4pID4gMHgwNURDKQorCQkJCWJhcF9zZXR1cChhaSwgZmlkLCAweDQ0LCBCQVAwKTsKKwkJCWVsc2UgeworCQkJCWlmIChsZW4gPD0gc2l6ZW9mIChtaWNidWYpKSB7CisJCQkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQkJCWdvdG8gZG9uZTsKKwkJCQl9CisKKwkJCQlsZW4gLT0gc2l6ZW9mKG1pY2J1Zik7CisJCQkJc2tiX3RyaW0oc2tiLCBsZW4gKyBoZHJsZW4pOworCQkJfQorCQl9CisKKwkJYmFwX3JlYWQoYWksIGJ1ZmZlciArIEVUSF9BTEVOLCBsZW4sIEJBUDApOworCQlpZiAoZGVjYXBzdWxhdGUoYWksICZtaWNidWYsIChldGhlckhlYWQqKSBidWZmZXIsIGxlbikpCisJCQlkZXZfa2ZyZWVfc2tiX2lycSAoc2tiKTsKKwkJZWxzZQorCQkJc3VjY2VzcyA9IDE7CisJfQorCisjaWZkZWYgV0lSRUxFU1NfU1BZCisJaWYgKHN1Y2Nlc3MgJiYgKGFpLT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkpIHsKKwkJY2hhciAqc2E7CisJCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKKworCQkvKiBQcmVwYXJlIHNweSBkYXRhIDogYWRkciArIHF1YWwgKi8KKwkJaWYgKCF0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFpLT5mbGFncykpIHsKKwkJCXNhID0gKGNoYXIgKikgYnVmZmVyICsgNjsKKwkJCWJhcF9zZXR1cChhaSwgZmlkLCA4LCBCQVAwKTsKKwkJCWJhcF9yZWFkKGFpLCAoX19sZTE2ICopIGhkci5yc3NpLCAyLCBCQVAwKTsKKwkJfSBlbHNlCisJCQlzYSA9IChjaGFyICopIGJ1ZmZlciArIDEwOworCQl3c3RhdHMucXVhbCA9IGhkci5yc3NpWzBdOworCQlpZiAoYWktPnJzc2kpCisJCQl3c3RhdHMubGV2ZWwgPSAweDEwMCAtIGFpLT5yc3NpW2hkci5yc3NpWzFdXS5yc3NpZEJtOworCQllbHNlCisJCQl3c3RhdHMubGV2ZWwgPSAoaGRyLnJzc2lbMV0gKyAzMjEpIC8gMjsKKwkJd3N0YXRzLm5vaXNlID0gYWktPndzdGF0cy5xdWFsLm5vaXNlOworCQl3c3RhdHMudXBkYXRlZCA9ICBJV19RVUFMX0xFVkVMX1VQREFURUQKKwkJCQl8IElXX1FVQUxfUVVBTF9VUERBVEVECisJCQkJfCBJV19RVUFMX0RCTTsKKwkJLyogVXBkYXRlIHNweSByZWNvcmRzICovCisJCXdpcmVsZXNzX3NweV91cGRhdGUoYWktPmRldiwgc2EsICZ3c3RhdHMpOworCX0KKyNlbmRpZiAvKiBXSVJFTEVTU19TUFkgKi8KKworZG9uZToKKwlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfUlgpOworCisJaWYgKHN1Y2Nlc3MpIHsKKwkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYWktPmZsYWdzKSkgeworCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCQkJc2tiLT5kZXYgPSBhaS0+d2lmaWRldjsKKwkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7CisJCX0gZWxzZQorCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWktPmRldik7CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKworCQluZXRpZl9yeChza2IpOworCX0KK30KKworc3RhdGljIHZvaWQgYWlyb19oYW5kbGVfdHgoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBzdGF0dXMpCit7CisJaW50IGksIGxlbiA9IDAsIGluZGV4ID0gLTE7CisJdTE2IGZpZDsKKworCWlmICh0ZXN0X2JpdChGTEFHX01QSSwgJmFpLT5mbGFncykpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlpZiAoc3RhdHVzICYgRVZfVFhFWEMpCisJCQlnZXRfdHhfZXJyb3IoYWksIC0xKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWktPmF1eF9sb2NrLCBmbGFncyk7CisJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZhaS0+dHhxKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWktPmF1eF9sb2NrLGZsYWdzKTsKKwkJCW1waV9zZW5kX3BhY2tldChhaS0+ZGV2KTsKKwkJfSBlbHNlIHsKKwkJCWNsZWFyX2JpdChGTEFHX1BFTkRJTkdfWE1JVCwgJmFpLT5mbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaS0+YXV4X2xvY2ssZmxhZ3MpOworCQkJbmV0aWZfd2FrZV9xdWV1ZShhaS0+ZGV2KTsKKwkJfQorCQlPVVQ0NTAwKGFpLCBFVkFDSywgc3RhdHVzICYgKEVWX1RYIHwgRVZfVFhDUFkgfCBFVl9UWEVYQykpOworCQlyZXR1cm47CisJfQorCisJZmlkID0gSU40NTAwKGFpLCBUWENPTVBMRklEKTsKKworCWZvcihpID0gMDsgaSA8IE1BWF9GSURTOyBpKyspIHsKKwkJaWYgKChhaS0+Zmlkc1tpXSAmIDB4ZmZmZikgPT0gZmlkKSB7CisJCQlsZW4gPSBhaS0+Zmlkc1tpXSA+PiAxNjsKKwkJCWluZGV4ID0gaTsKKwkJfQorCX0KKworCWlmIChpbmRleCAhPSAtMSkgeworCQlpZiAoc3RhdHVzICYgRVZfVFhFWEMpCisJCQlnZXRfdHhfZXJyb3IoYWksIGluZGV4KTsKKworCQlPVVQ0NTAwKGFpLCBFVkFDSywgc3RhdHVzICYgKEVWX1RYIHwgRVZfVFhFWEMpKTsKKworCQkvKiBTZXQgdXAgdG8gYmUgdXNlZCBhZ2FpbiAqLworCQlhaS0+Zmlkc1tpbmRleF0gJj0gMHhmZmZmOworCQlpZiAoaW5kZXggPCBNQVhfRklEUyAvIDIpIHsKKwkJCWlmICghdGVzdF9iaXQoRkxBR19QRU5ESU5HX1hNSVQsICZhaS0+ZmxhZ3MpKQorCQkJCW5ldGlmX3dha2VfcXVldWUoYWktPmRldik7CisJCX0gZWxzZSB7CisJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlUMTEsICZhaS0+ZmxhZ3MpKQorCQkJCW5ldGlmX3dha2VfcXVldWUoYWktPndpZmlkZXYpOworCQl9CisJfSBlbHNlIHsKKwkJT1VUNDUwMChhaSwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYQ1BZIHwgRVZfVFhFWEMpKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIlVuYWxsb2NhdGVkIEZJRCB3YXMgdXNlZCB0byB4bWl0Iik7CisJfQorfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0JdTE2IHN0YXR1czsKLQl1MTYgZmlkOwotCXN0cnVjdCBhaXJvX2luZm8gKmFwcml2ID0gZGV2LT5tbF9wcml2OwotCXUxNiBzYXZlZEludGVycnVwdHMgPSAwOworCXUxNiBzdGF0dXMsIHNhdmVkSW50ZXJydXB0cyA9IDA7CisJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGhhbmRsZWQgPSAwOwogCiAJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlmb3IgKDs7KSB7Ci0JCXN0YXR1cyA9IElONDUwMCggYXByaXYsIEVWU1RBVCApOwotCQlpZiAoICEoc3RhdHVzICYgU1RBVFVTX0lOVFMpIHx8IHN0YXR1cyA9PSAweGZmZmYgKSBicmVhazsKKwkJc3RhdHVzID0gSU40NTAwKGFpLCBFVlNUQVQpOworCQlpZiAoIShzdGF0dXMgJiBTVEFUVVNfSU5UUykgfHwgKHN0YXR1cyA9PSAweGZmZmYpKQorCQkJYnJlYWs7CiAKIAkJaGFuZGxlZCA9IDE7CiAKLQkJaWYgKCBzdGF0dXMgJiBFVl9BV0FLRSApIHsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfQVdBS0UgKTsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfQVdBS0UgKTsKKwkJaWYgKHN0YXR1cyAmIEVWX0FXQUtFKSB7CisJCQlPVVQ0NTAwKGFpLCBFVkFDSywgRVZfQVdBS0UpOworCQkJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX0FXQUtFKTsKIAkJfQogCiAJCWlmICghc2F2ZWRJbnRlcnJ1cHRzKSB7Ci0JCQlzYXZlZEludGVycnVwdHMgPSBJTjQ1MDAoIGFwcml2LCBFVklOVEVOICk7Ci0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZJTlRFTiwgMCApOworCQkJc2F2ZWRJbnRlcnJ1cHRzID0gSU40NTAwKGFpLCBFVklOVEVOKTsKKwkJCU9VVDQ1MDAoYWksIEVWSU5URU4sIDApOwogCQl9CiAKLQkJaWYgKCBzdGF0dXMgJiBFVl9NSUMgKSB7Ci0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX01JQyApOwotCQkJaWYgKHRlc3RfYml0KEZMQUdfTUlDX0NBUEFCTEUsICZhcHJpdi0+ZmxhZ3MpKSB7Ci0JCQkJc2V0X2JpdChKT0JfTUlDLCAmYXByaXYtPmpvYnMpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCX0KKwkJaWYgKHN0YXR1cyAmIEVWX01JQykgeworCQkJT1VUNDUwMChhaSwgRVZBQ0ssIEVWX01JQyk7CisJCQlhaXJvX2hhbmRsZV9jaXNjb19taWMoYWkpOwogCQl9Ci0JCWlmICggc3RhdHVzICYgRVZfTElOSyApIHsKLQkJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKLQkJCWludCBzY2FuX2ZvcmNlbG9zcyA9IDA7Ci0JCQkvKiBUaGUgbGluayBzdGF0dXMgaGFzIGNoYW5nZWQsIGlmIHlvdSB3YW50IHRvIHB1dCBhCi0JCQkgICBtb25pdG9yIGhvb2sgaW4sIGRvIGl0IGhlcmUuICAoUmVtZW1iZXIgdGhhdAotCQkJICAgaW50ZXJydXB0cyBhcmUgc3RpbGwgZGlzYWJsZWQhKQotCQkJKi8KLQkJCXUxNiBuZXdTdGF0dXMgPSBJTjQ1MDAoYXByaXYsIExJTktTVEFUKTsKLQkJCU9VVDQ1MDAoIGFwcml2LCBFVkFDSywgRVZfTElOSyk7Ci0JCQkvKiBIZXJlIGlzIHdoYXQgbmV3U3RhdHVzIG1lYW5zOiAqLwotI2RlZmluZSBOT0JFQUNPTiAweDgwMDAgLyogTG9zcyBvZiBzeW5jIC0gbWlzc2VkIGJlYWNvbnMgKi8KLSNkZWZpbmUgTUFYUkVUUklFUyAweDgwMDEgLyogTG9zcyBvZiBzeW5jIC0gbWF4IHJldHJpZXMgKi8KLSNkZWZpbmUgTUFYQVJMIDB4ODAwMiAvKiBMb3NzIG9mIHN5bmMgLSBhdmVyYWdlIHJldHJ5IGxldmVsIGV4Y2VlZGVkKi8KLSNkZWZpbmUgRk9SQ0VMT1NTIDB4ODAwMyAvKiBMb3NzIG9mIHN5bmMgLSBob3N0IHJlcXVlc3QgKi8KLSNkZWZpbmUgVFNGU1lOQyAweDgwMDQgLyogTG9zcyBvZiBzeW5jIC0gVFNGIHN5bmNocm9uaXphdGlvbiAqLwotI2RlZmluZSBERUFVVEggMHg4MTAwIC8qIERlYXV0aGVudGljYXRpb24gKGxvdyBieXRlIGlzIHJlYXNvbiBjb2RlKSAqLwotI2RlZmluZSBESVNBU1MgMHg4MjAwIC8qIERpc2Fzc29jaWF0aW9uIChsb3cgYnl0ZSBpcyByZWFzb24gY29kZSkgKi8KLSNkZWZpbmUgQVNTRkFJTCAweDg0MDAgLyogQXNzb2NpYXRpb24gZmFpbHVyZSAobG93IGJ5dGUgaXMgcmVhc29uCi0JCQkgIGNvZGUpICovCi0jZGVmaW5lIEFVVEhGQUlMIDB4MDMwMCAvKiBBdXRoZW50aWNhdGlvbiBmYWlsdXJlIChsb3cgYnl0ZSBpcyByZWFzb24KLQkJCSAgIGNvZGUpICovCi0jZGVmaW5lIEFTU09DSUFURUQgMHgwNDAwIC8qIEFzc29jaWF0ZWQgKi8KLSNkZWZpbmUgUkVBU1NPQ0lBVEVEIDB4MDYwMCAvKiBSZWFzc29jaWF0ZWQ/ICBPbmx5IG9uIGZpcm13YXJlID49IDUuMzAuMTcgKi8KLSNkZWZpbmUgUkNfUkVTRVJWRUQgMCAvKiBSZXNlcnZlZCByZXR1cm4gY29kZSAqLwotI2RlZmluZSBSQ19OT1JFQVNPTiAxIC8qIFVuc3BlY2lmaWVkIHJlYXNvbiAqLwotI2RlZmluZSBSQ19BVVRISU5WIDIgLyogUHJldmlvdXMgYXV0aGVudGljYXRpb24gaW52YWxpZCAqLwotI2RlZmluZSBSQ19ERUFVVEggMyAvKiBEZWF1dGhlbnRpY2F0ZWQgYmVjYXVzZSBzZW5kaW5nIHN0YXRpb24gaXMKLQkJICAgICAgIGxlYXZpbmcgKi8KLSNkZWZpbmUgUkNfTk9BQ1QgNCAvKiBEaXNhc3NvY2lhdGVkIGR1ZSB0byBpbmFjdGl2aXR5ICovCi0jZGVmaW5lIFJDX01BWExPQUQgNSAvKiBEaXNhc3NvY2lhdGVkIGJlY2F1c2UgQVAgaXMgdW5hYmxlIHRvIGhhbmRsZQotCQkJYWxsIGN1cnJlbnRseSBhc3NvY2lhdGVkIHN0YXRpb25zICovCi0jZGVmaW5lIFJDX0JBRENMQVNTMiA2IC8qIENsYXNzIDIgZnJhbWUgcmVjZWl2ZWQgZnJvbQotCQkJICBub24tQXV0aGVudGljYXRlZCBzdGF0aW9uICovCi0jZGVmaW5lIFJDX0JBRENMQVNTMyA3IC8qIENsYXNzIDMgZnJhbWUgcmVjZWl2ZWQgZnJvbQotCQkJICBub24tQXNzb2NpYXRlZCBzdGF0aW9uICovCi0jZGVmaW5lIFJDX1NUQVRMRUFWRSA4IC8qIERpc2Fzc29jaWF0ZWQgYmVjYXVzZSBzZW5kaW5nIHN0YXRpb24gaXMKLQkJCSAgbGVhdmluZyBCU1MgKi8KLSNkZWZpbmUgUkNfTk9BVVRIIDkgLyogU3RhdGlvbiByZXF1ZXN0aW5nIChSZSlBc3NvY2lhdGlvbiBpcyBub3QKLQkJICAgICAgIEF1dGhlbnRpY2F0ZWQgd2l0aCB0aGUgcmVzcG9uZGluZyBzdGF0aW9uICovCi0JCQlpZiAobmV3U3RhdHVzID09IEZPUkNFTE9TUyAmJiBhcHJpdi0+c2Nhbl90aW1lb3V0ID4gMCkKLQkJCQlzY2FuX2ZvcmNlbG9zcyA9IDE7Ci0JCQlpZihuZXdTdGF0dXMgPT0gQVNTT0NJQVRFRCB8fCBuZXdTdGF0dXMgPT0gUkVBU1NPQ0lBVEVEKSB7Ci0JCQkJaWYgKGF1dG9fd2VwKQotCQkJCQlhcHJpdi0+ZXhwaXJlcyA9IDA7Ci0JCQkJaWYgKGFwcml2LT5saXN0X2Jzc190YXNrKQotCQkJCQl3YWtlX3VwX3Byb2Nlc3MoYXByaXYtPmxpc3RfYnNzX3Rhc2spOwotCQkJCXNldF9iaXQoRkxBR19VUERBVEVfVU5JLCAmYXByaXYtPmZsYWdzKTsKLQkJCQlzZXRfYml0KEZMQUdfVVBEQVRFX01VTFRJLCAmYXByaXYtPmZsYWdzKTsKIAotCQkJCWlmIChkb3duX3RyeWxvY2soJmFwcml2LT5zZW0pICE9IDApIHsKLQkJCQkJc2V0X2JpdChKT0JfRVZFTlQsICZhcHJpdi0+am9icyk7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCQl9IGVsc2UKLQkJCQkJYWlyb19zZW5kX2V2ZW50KGRldik7Ci0JCQl9IGVsc2UgaWYgKCFzY2FuX2ZvcmNlbG9zcykgewotCQkJCWlmIChhdXRvX3dlcCAmJiAhYXByaXYtPmV4cGlyZXMpIHsKLQkJCQkJYXByaXYtPmV4cGlyZXMgPSBSVU5fQVQoMypIWik7Ci0JCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXByaXYtPnRocl93YWl0KTsKLQkJCQl9Ci0KLQkJCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KLQkJCQltZW1zZXQod3JxdS5hcF9hZGRyLnNhX2RhdGEsICdcMCcsIEVUSF9BTEVOKTsKLQkJCQl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LE5VTEwpOwotCQkJfQorCQlpZiAoc3RhdHVzICYgRVZfTElOSykgeworCQkJLyogTGluayBzdGF0dXMgY2hhbmdlZCAqLworCQkJYWlyb19oYW5kbGVfbGluayhhaSk7CiAJCX0KIAogCQkvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlY2VpdmUgKi8KLQkJaWYgKCBzdGF0dXMgJiBFVl9SWCAgKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQkJCV9fbGUxNiBmYywgdjsKLQkJCXUxNiBsZW4sIGhkcmxlbiA9IDA7Ci0jcHJhZ21hIHBhY2soMSkKLQkJCXN0cnVjdCB7Ci0JCQkJX19sZTE2IHN0YXR1cywgbGVuOwotCQkJCXU4IHJzc2lbMl07Ci0JCQkJdTggcmF0ZTsKLQkJCQl1OCBmcmVxOwotCQkJCV9fbGUxNiB0bXBbNF07Ci0JCQl9IGhkcjsKLSNwcmFnbWEgcGFjaygpCi0JCQl1MTYgZ2FwOwotCQkJX19sZTE2IHRtcGJ1Zls0XTsKLQkJCV9fbGUxNiAqYnVmZmVyOwotCi0JCQlpZiAodGVzdF9iaXQoRkxBR19NUEksJmFwcml2LT5mbGFncykpIHsKLQkJCQlpZiAodGVzdF9iaXQoRkxBR184MDJfMTEsICZhcHJpdi0+ZmxhZ3MpKQotCQkJCQltcGlfcmVjZWl2ZV84MDJfMTEoYXByaXYpOwotCQkJCWVsc2UKLQkJCQkJbXBpX3JlY2VpdmVfODAyXzMoYXByaXYpOwotCQkJCU9VVDQ1MDAoYXByaXYsIEVWQUNLLCBFVl9SWCk7Ci0JCQkJZ290byBleGl0cng7Ci0JCQl9Ci0KLQkJCWZpZCA9IElONDUwMCggYXByaXYsIFJYRklEICk7Ci0KLQkJCS8qIEdldCB0aGUgcGFja2V0IGxlbmd0aCAqLwotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCWJhcF9zZXR1cCAoYXByaXYsIGZpZCwgNCwgQkFQMCk7Ci0JCQkJYmFwX3JlYWQgKGFwcml2LCAoX19sZTE2KikmaGRyLCBzaXplb2YoaGRyKSwgQkFQMCk7Ci0JCQkJLyogQmFkIENSQy4gSWdub3JlIHBhY2tldCAqLwotCQkJCWlmIChsZTE2X3RvX2NwdShoZHIuc3RhdHVzKSAmIDIpCi0JCQkJCWhkci5sZW4gPSAwOwotCQkJCWlmIChhcHJpdi0+d2lmaWRldiA9PSBOVUxMKQotCQkJCQloZHIubGVuID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJYmFwX3NldHVwIChhcHJpdiwgZmlkLCAweDM2LCBCQVAwKTsKLQkJCQliYXBfcmVhZCAoYXByaXYsICZoZHIubGVuLCAyLCBCQVAwKTsKLQkJCX0KLQkJCWxlbiA9IGxlMTZfdG9fY3B1KGhkci5sZW4pOwotCi0JCQlpZiAobGVuID4gQUlST19ERUZfTVRVKSB7Ci0JCQkJYWlyb19wcmludF9lcnIoYXByaXYtPmRldi0+bmFtZSwgIkJhZCBzaXplICVkIiwgbGVuKTsKLQkJCQlnb3RvIGJhZHJ4OwotCQkJfQotCQkJaWYgKGxlbiA9PSAwKQotCQkJCWdvdG8gYmFkcng7Ci0KLQkJCWlmICh0ZXN0X2JpdChGTEFHXzgwMl8xMSwgJmFwcml2LT5mbGFncykpIHsKLQkJCQliYXBfcmVhZCAoYXByaXYsICZmYywgc2l6ZW9mKGZjKSwgQkFQMCk7Ci0JCQkJaGRybGVuID0gaGVhZGVyX2xlbihmYyk7Ci0JCQl9IGVsc2UKLQkJCQloZHJsZW4gPSBFVEhfQUxFTiAqIDI7Ci0KLQkJCXNrYiA9IGRldl9hbGxvY19za2IoIGxlbiArIGhkcmxlbiArIDIgKyAyICk7Ci0JCQlpZiAoICFza2IgKSB7Ci0JCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJZ290byBiYWRyeDsKLQkJCX0KLQkJCXNrYl9yZXNlcnZlKHNrYiwgMik7IC8qIFRoaXMgd2F5IHRoZSBJUCBoZWFkZXIgaXMgYWxpZ25lZCAqLwotCQkJYnVmZmVyID0gKF9fbGUxNiopc2tiX3B1dCAoc2tiLCBsZW4gKyBoZHJsZW4pOwotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCWJ1ZmZlclswXSA9IGZjOwotCQkJCWJhcF9yZWFkIChhcHJpdiwgYnVmZmVyICsgMSwgaGRybGVuIC0gMiwgQkFQMCk7Ci0JCQkJaWYgKGhkcmxlbiA9PSAyNCkKLQkJCQkJYmFwX3JlYWQgKGFwcml2LCB0bXBidWYsIDYsIEJBUDApOwotCi0JCQkJYmFwX3JlYWQgKGFwcml2LCAmdiwgc2l6ZW9mKHYpLCBCQVAwKTsKLQkJCQlnYXAgPSBsZTE2X3RvX2NwdSh2KTsKLQkJCQlpZiAoZ2FwKSB7Ci0JCQkJCWlmIChnYXAgPD0gOCkgewotCQkJCQkJYmFwX3JlYWQgKGFwcml2LCB0bXBidWYsIGdhcCwgQkFQMCk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlhaXJvX3ByaW50X2VycihhcHJpdi0+ZGV2LT5uYW1lLCAiZ2FwbGVuIHRvbyAiCi0JCQkJCQkJImJpZy4gUHJvYmxlbXMgd2lsbCBmb2xsb3cuLi4iKTsKLQkJCQkJfQotCQkJCX0KLQkJCQliYXBfcmVhZCAoYXByaXYsIGJ1ZmZlciArIGhkcmxlbi8yLCBsZW4sIEJBUDApOwotCQkJfSBlbHNlIHsKLQkJCQlNSUNCdWZmZXIgbWljYnVmOwotCQkJCWJhcF9yZWFkIChhcHJpdiwgYnVmZmVyLCBFVEhfQUxFTioyLCBCQVAwKTsKLQkJCQlpZiAoYXByaXYtPm1pY3N0YXRzLmVuYWJsZWQpIHsKLQkJCQkJYmFwX3JlYWQgKGFwcml2LChfX2xlMTYqKSZtaWNidWYsc2l6ZW9mKG1pY2J1ZiksQkFQMCk7Ci0JCQkJCWlmIChudG9ocyhtaWNidWYudHlwZWxlbikgPiAweDA1REMpCi0JCQkJCQliYXBfc2V0dXAgKGFwcml2LCBmaWQsIDB4NDQsIEJBUDApOwotCQkJCQllbHNlIHsKLQkJCQkJCWlmIChsZW4gPD0gc2l6ZW9mKG1pY2J1ZikpCi0JCQkJCQkJZ290byBiYWRtaWM7Ci0KLQkJCQkJCWxlbiAtPSBzaXplb2YobWljYnVmKTsKLQkJCQkJCXNrYl90cmltIChza2IsIGxlbiArIGhkcmxlbik7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJYmFwX3JlYWQoYXByaXYsYnVmZmVyK0VUSF9BTEVOLGxlbixCQVAwKTsKLQkJCQlpZiAoZGVjYXBzdWxhdGUoYXByaXYsJm1pY2J1ZiwoZXRoZXJIZWFkKilidWZmZXIsbGVuKSkgewotYmFkbWljOgotCQkJCQlkZXZfa2ZyZWVfc2tiX2lycSAoc2tiKTsKLWJhZHJ4OgotCQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX1JYKTsKLQkJCQkJZ290byBleGl0cng7Ci0JCQkJfQotCQkJfQotI2lmZGVmIFdJUkVMRVNTX1NQWQotCQkJaWYgKGFwcml2LT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkgewotCQkJCWNoYXIgKnNhOwotCQkJCXN0cnVjdCBpd19xdWFsaXR5IHdzdGF0czsKLQkJCQkvKiBQcmVwYXJlIHNweSBkYXRhIDogYWRkciArIHF1YWwgKi8KLQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCQlzYSA9IChjaGFyKilidWZmZXIgKyA2OwotCQkJCQliYXBfc2V0dXAgKGFwcml2LCBmaWQsIDgsIEJBUDApOwotCQkJCQliYXBfcmVhZCAoYXByaXYsIChfX2xlMTYqKWhkci5yc3NpLCAyLCBCQVAwKTsKLQkJCQl9IGVsc2UKLQkJCQkJc2EgPSAoY2hhciopYnVmZmVyICsgMTA7Ci0JCQkJd3N0YXRzLnF1YWwgPSBoZHIucnNzaVswXTsKLQkJCQlpZiAoYXByaXYtPnJzc2kpCi0JCQkJCXdzdGF0cy5sZXZlbCA9IDB4MTAwIC0gYXByaXYtPnJzc2lbaGRyLnJzc2lbMV1dLnJzc2lkQm07Ci0JCQkJZWxzZQotCQkJCQl3c3RhdHMubGV2ZWwgPSAoaGRyLnJzc2lbMV0gKyAzMjEpIC8gMjsKLQkJCQl3c3RhdHMubm9pc2UgPSBhcHJpdi0+d3N0YXRzLnF1YWwubm9pc2U7Ci0JCQkJd3N0YXRzLnVwZGF0ZWQgPSBJV19RVUFMX0xFVkVMX1VQREFURUQKLQkJCQkJfCBJV19RVUFMX1FVQUxfVVBEQVRFRAotCQkJCQl8IElXX1FVQUxfREJNOwotCQkJCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLwotCQkJCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBzYSwgJndzdGF0cyk7Ci0JCQl9Ci0jZW5kaWYgLyogV0lSRUxFU1NfU1BZICovCi0JCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIEVWX1JYKTsKLQotCQkJaWYgKHRlc3RfYml0KEZMQUdfODAyXzExLCAmYXByaXYtPmZsYWdzKSkgewotCQkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0JCQkJc2tiLT5kZXYgPSBhcHJpdi0+d2lmaWRldjsKLQkJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwotCQkJfSBlbHNlCi0JCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwotCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCi0JCQluZXRpZl9yeCggc2tiICk7Ci0JCX0KLWV4aXRyeDoKKwkJaWYgKHN0YXR1cyAmIEVWX1JYKQorCQkJYWlyb19oYW5kbGVfcngoYWkpOwogCiAJCS8qIENoZWNrIHRvIHNlZSBpZiBhIHBhY2tldCBoYXMgYmVlbiB0cmFuc21pdHRlZCAqLwotCQlpZiAoICBzdGF0dXMgJiAoIEVWX1RYfEVWX1RYQ1BZfEVWX1RYRVhDICkgKSB7Ci0JCQlpbnQgaTsKLQkJCWludCBsZW4gPSAwOwotCQkJaW50IGluZGV4ID0gLTE7CisJCWlmIChzdGF0dXMgJiAoRVZfVFggfCBFVl9UWENQWSB8IEVWX1RYRVhDKSkKKwkJCWFpcm9faGFuZGxlX3R4KGFpLCBzdGF0dXMpOwogCi0JCQlpZiAodGVzdF9iaXQoRkxBR19NUEksJmFwcml2LT5mbGFncykpIHsKLQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQkJaWYgKHN0YXR1cyAmIEVWX1RYRVhDKQotCQkJCQlnZXRfdHhfZXJyb3IoYXByaXYsIC0xKTsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmYXByaXYtPmF1eF9sb2NrLCBmbGFncyk7Ci0JCQkJaWYgKCFza2JfcXVldWVfZW1wdHkoJmFwcml2LT50eHEpKSB7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFwcml2LT5hdXhfbG9jayxmbGFncyk7Ci0JCQkJCW1waV9zZW5kX3BhY2tldCAoZGV2KTsKLQkJCQl9IGVsc2UgewotCQkJCQljbGVhcl9iaXQoRkxBR19QRU5ESU5HX1hNSVQsICZhcHJpdi0+ZmxhZ3MpOwotCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhcHJpdi0+YXV4X2xvY2ssZmxhZ3MpOwotCQkJCQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwotCQkJCX0KLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssCi0JCQkJCXN0YXR1cyAmIChFVl9UWHxFVl9UWENQWXxFVl9UWEVYQykpOwotCQkJCWdvdG8gZXhpdHR4OwotCQkJfQotCi0JCQlmaWQgPSBJTjQ1MDAoYXByaXYsIFRYQ09NUExGSUQpOwotCi0JCQlmb3IoIGkgPSAwOyBpIDwgTUFYX0ZJRFM7IGkrKyApIHsKLQkJCQlpZiAoICggYXByaXYtPmZpZHNbaV0gJiAweGZmZmYgKSA9PSBmaWQgKSB7Ci0JCQkJCWxlbiA9IGFwcml2LT5maWRzW2ldID4+IDE2OwotCQkJCQlpbmRleCA9IGk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGluZGV4ICE9IC0xKSB7Ci0JCQkJaWYgKHN0YXR1cyAmIEVWX1RYRVhDKQotCQkJCQlnZXRfdHhfZXJyb3IoYXByaXYsIGluZGV4KTsKLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYRVhDKSk7Ci0JCQkJLyogU2V0IHVwIHRvIGJlIHVzZWQgYWdhaW4gKi8KLQkJCQlhcHJpdi0+Zmlkc1tpbmRleF0gJj0gMHhmZmZmOwotCQkJCWlmIChpbmRleCA8IE1BWF9GSURTIC8gMikgewotCQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlULCAmYXByaXYtPmZsYWdzKSkKLQkJCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoIXRlc3RfYml0KEZMQUdfUEVORElOR19YTUlUMTEsICZhcHJpdi0+ZmxhZ3MpKQotCQkJCQkJbmV0aWZfd2FrZV9xdWV1ZShhcHJpdi0+d2lmaWRldik7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlPVVQ0NTAwKCBhcHJpdiwgRVZBQ0ssIHN0YXR1cyAmIChFVl9UWCB8IEVWX1RYQ1BZIHwgRVZfVFhFWEMpKTsKLQkJCQlhaXJvX3ByaW50X2VycihhcHJpdi0+ZGV2LT5uYW1lLCAiVW5hbGxvY2F0ZWQgRklEIHdhcyAiCi0JCQkJCSJ1c2VkIHRvIHhtaXQiICk7Ci0JCQl9Ci0JCX0KLWV4aXR0eDoKLQkJaWYgKCBzdGF0dXMgJiB+U1RBVFVTX0lOVFMgJiB+SUdOT1JFX0lOVFMgKQotCQkJYWlyb19wcmludF93YXJuKGFwcml2LT5kZXYtPm5hbWUsICJHb3Qgd2VpcmQgc3RhdHVzICV4IiwKKwkJaWYgKCBzdGF0dXMgJiB+U1RBVFVTX0lOVFMgJiB+SUdOT1JFX0lOVFMgKSB7CisJCQlhaXJvX3ByaW50X3dhcm4oYWktPmRldi0+bmFtZSwgIkdvdCB3ZWlyZCBzdGF0dXMgJXgiLAogCQkJCXN0YXR1cyAmIH5TVEFUVVNfSU5UUyAmIH5JR05PUkVfSU5UUyApOworCQl9CiAJfQogCiAJaWYgKHNhdmVkSW50ZXJydXB0cykKLQkJT1VUNDUwMCggYXByaXYsIEVWSU5URU4sIHNhdmVkSW50ZXJydXB0cyApOworCQlPVVQ0NTAwKGFpLCBFVklOVEVOLCBzYXZlZEludGVycnVwdHMpOwogCi0JLyogZG9uZS4uICovCiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKQEAgLTM2MTMsMTggKzM2ODgsMTAgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAl1MTYgbGVuLCBoZHJsZW4gPSAwOwogCV9fbGUxNiBmYzsKLSNwcmFnbWEgcGFjaygxKQotCXN0cnVjdCB7Ci0JCV9fbGUxNiBzdGF0dXMsIGxlbjsKLQkJdTggcnNzaVsyXTsKLQkJdTggcmF0ZTsKLQkJdTggZnJlcTsKLQkJX19sZTE2IHRtcFs0XTsKLQl9IGhkcjsKLSNwcmFnbWEgcGFjaygpCisJc3RydWN0IHJ4X2hkciBoZHI7CiAJdTE2IGdhcDsKIAl1MTYgKmJ1ZmZlcjsKLQljaGFyICpwdHIgPSBhaS0+cnhmaWRzWzBdLnZpcnR1YWxfaG9zdF9hZGRyKzQ7CisJY2hhciAqcHRyID0gYWktPnJ4Zmlkc1swXS52aXJ0dWFsX2hvc3RfYWRkciArIDQ7CiAKIAltZW1jcHlfZnJvbWlvKCZyeGQsIGFpLT5yeGZpZHNbMF0uY2FyZF9yYW1fb2ZmLCBzaXplb2YocnhkKSk7CiAJbWVtY3B5ICgoY2hhciAqKSZoZHIsIHB0ciwgc2l6ZW9mKGhkcikpOwpAQCAtMzY5MSw2ICszNzU4LDcgQEAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfODAyXzIpOwogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAluZXRpZl9yeCggc2tiICk7CisKIGJhZHJ4OgogCWlmIChyeGQudmFsaWQgPT0gMCkgewogCQlyeGQudmFsaWQgPSAxOwpAQCAtMzcwNSw3ICszNzczLDYgQEAKIAlDbWQgY21kOwogCVJlc3AgcnNwOwogCWludCBzdGF0dXM7Ci0JaW50IGk7CiAJU3NpZFJpZCBteVNzaWQ7CiAJX19sZTE2IGxhc3RpbmRleDsKIAlXZXBLZXlSaWQgd2tyOwpAQCAtMzc0Nyw2ICszODE0LDcgQEAKIAlpZiAobG9jaykKIAkJdXAoJmFpLT5zZW0pOwogCWlmIChhaS0+Y29uZmlnLmxlbiA9PSAwKSB7CisJCWludCBpOwogCQl0ZHNSc3NpUmlkIHJzc2lfcmlkOwogCQlDYXBhYmlsaXR5UmlkIGNhcF9yaWQ7CiAKQEAgLTM3OTQsMTQgKzM4NjIsMTIgQEAKIAkJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW5zbW9kIGNvbmZpZ3VyZWQKIAkJICAgcmF0ZXMgdG8gYWRkICovCiAJCWlmICggcmF0ZXNbMF0gKSB7Ci0JCQlpbnQgaSA9IDA7CiAJCQltZW1zZXQoYWktPmNvbmZpZy5yYXRlcywwLHNpemVvZihhaS0+Y29uZmlnLnJhdGVzKSk7CiAJCQlmb3IoIGkgPSAwOyBpIDwgOCAmJiByYXRlc1tpXTsgaSsrICkgewogCQkJCWFpLT5jb25maWcucmF0ZXNbaV0gPSByYXRlc1tpXTsKIAkJCX0KIAkJfQogCQlpZiAoIGJhc2ljX3JhdGUgPiAwICkgewotCQkJaW50IGk7CiAJCQlmb3IoIGkgPSAwOyBpIDwgODsgaSsrICkgewogCQkJCWlmICggYWktPmNvbmZpZy5yYXRlc1tpXSA9PSBiYXNpY19yYXRlIHx8CiAJCQkJICAgICAhYWktPmNvbmZpZy5yYXRlcyApIHsKQEAgLTQ2ODYsNyArNDc1Miw3IEBACiAJU3RhdHNSaWQgc3RhdHM7CiAJaW50IGksIGo7CiAJX19sZTMyICp2YWxzID0gc3RhdHMudmFsczsKLQlpbnQgbGVuID0gbGUxNl90b19jcHUoc3RhdHMubGVuKTsKKwlpbnQgbGVuOwogCiAJaWYgKChmaWxlLT5wcml2YXRlX2RhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHJvY19kYXRhICksIEdGUF9LRVJORUwpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQ2OTcsNiArNDc2Myw3IEBACiAJfQogCiAJcmVhZFN0YXRzUmlkKGFwcml2LCAmc3RhdHMsIHJpZCwgMSk7CisJbGVuID0gbGUxNl90b19jcHUoc3RhdHMubGVuKTsKIAogICAgICAgICBqID0gMDsKIAlmb3IoaT0wOyBzdGF0c0xhYmVsc1tpXSE9KGNoYXIgKiktMSAmJiBpKjQ8bGVuOyBpKyspIHsKQEAgLTUxMzEsNTUgKzUxOTgsOTggQEAKIAlyZXR1cm4gcmM7CiB9CiAKLS8qIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGF0IHRoZSBpbmRleC4gIElmIGluZGV4ID09IDB4ZmZmZgotICogdGhlIGluZGV4IG9mIHRoZSB0cmFuc21pdCBrZXkgaXMgcmV0dXJuZWQuICBJZiB0aGUga2V5IGRvZXNuJ3QgZXhpc3QsCi0gKiAtMSB3aWxsIGJlIHJldHVybmVkLgorLyogUmV0dXJucyB0aGUgV0VQIGtleSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LCBvciAtMSBpZiB0aGF0IGtleSBkb2VzCisgKiBub3QgZXhpc3QuICBUaGUgYnVmZmVyIGlzIGFzc3VtZWQgdG8gYmUgYXQgbGVhc3QgMTYgYnl0ZXMgaW4gbGVuZ3RoLgogICovCi1zdGF0aWMgaW50IGdldF93ZXBfa2V5KHN0cnVjdCBhaXJvX2luZm8gKmFpLCB1MTYgaW5kZXgpIHsKK3N0YXRpYyBpbnQgZ2V0X3dlcF9rZXkoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBpbmRleCwgY2hhciAqYnVmLCB1MTYgYnVmbGVuKQorewogCVdlcEtleVJpZCB3a3I7CiAJaW50IHJjOwogCV9fbGUxNiBsYXN0aW5kZXg7CiAKIAlyYyA9IHJlYWRXZXBLZXlSaWQoYWksICZ3a3IsIDEsIDEpOwotCWlmIChyYyA9PSBTVUNDRVNTKSBkbyB7CisJaWYgKHJjICE9IFNVQ0NFU1MpCisJCXJldHVybiAtMTsKKwlkbyB7CiAJCWxhc3RpbmRleCA9IHdrci5raW5kZXg7Ci0JCWlmICh3a3Iua2luZGV4ID09IGNwdV90b19sZTE2KGluZGV4KSkgewotCQkJaWYgKGluZGV4ID09IDB4ZmZmZikgewotCQkJCXJldHVybiB3a3IubWFjWzBdOwotCQkJfQotCQkJcmV0dXJuIGxlMTZfdG9fY3B1KHdrci5rbGVuKTsKKwkJaWYgKGxlMTZfdG9fY3B1KHdrci5raW5kZXgpID09IGluZGV4KSB7CisJCQlpbnQga2xlbiA9IG1pbl90KGludCwgYnVmbGVuLCBsZTE2X3RvX2NwdSh3a3Iua2xlbikpOworCQkJbWVtY3B5KGJ1Ziwgd2tyLmtleSwga2xlbik7CisJCQlyZXR1cm4ga2xlbjsKIAkJfQotCQlyZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAwLCAxKTsKKwkJcmMgPSByZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAwLCAxKTsKKwkJaWYgKHJjICE9IFNVQ0NFU1MpCisJCQlyZXR1cm4gLTE7CiAJfSB3aGlsZSAobGFzdGluZGV4ICE9IHdrci5raW5kZXgpOwogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBzZXRfd2VwX2tleShzdHJ1Y3QgYWlyb19pbmZvICphaSwgdTE2IGluZGV4LAotCQkgICAgICAgY29uc3QgY2hhciAqa2V5LCB1MTYga2V5bGVuLCBpbnQgcGVybSwgaW50IGxvY2sgKQorc3RhdGljIGludCBnZXRfd2VwX3R4X2lkeChzdHJ1Y3QgYWlyb19pbmZvICphaSkKK3sKKwlXZXBLZXlSaWQgd2tyOworCWludCByYzsKKwlfX2xlMTYgbGFzdGluZGV4OworCisJcmMgPSByZWFkV2VwS2V5UmlkKGFpLCAmd2tyLCAxLCAxKTsKKwlpZiAocmMgIT0gU1VDQ0VTUykKKwkJcmV0dXJuIC0xOworCWRvIHsKKwkJbGFzdGluZGV4ID0gd2tyLmtpbmRleDsKKwkJaWYgKHdrci5raW5kZXggPT0gY3B1X3RvX2xlMTYoMHhmZmZmKSkKKwkJCXJldHVybiB3a3IubWFjWzBdOworCQlyYyA9IHJlYWRXZXBLZXlSaWQoYWksICZ3a3IsIDAsIDEpOworCQlpZiAocmMgIT0gU1VDQ0VTUykKKwkJCXJldHVybiAtMTsKKwl9IHdoaWxlIChsYXN0aW5kZXggIT0gd2tyLmtpbmRleCk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IHNldF93ZXBfa2V5KHN0cnVjdCBhaXJvX2luZm8gKmFpLCB1MTYgaW5kZXgsIGNvbnN0IGNoYXIgKmtleSwKKwkJICAgICAgIHUxNiBrZXlsZW4sIGludCBwZXJtLCBpbnQgbG9jaykKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtYWNhZGRyW0VUSF9BTEVOXSA9IHsgMHgwMSwgMCwgMCwgMCwgMCwgMCB9OwogCVdlcEtleVJpZCB3a3I7CisJaW50IHJjOwogCi0JbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKIAlpZiAoa2V5bGVuID09IDApIHsKLS8vIFdlIGFyZSBzZWxlY3Rpbmcgd2hpY2gga2V5IHRvIHVzZQotCQl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOwotCQl3a3Iua2luZGV4ID0gY3B1X3RvX2xlMTYoMHhmZmZmKTsKLQkJd2tyLm1hY1swXSA9IChjaGFyKWluZGV4OwotCQlpZiAocGVybSkgYWktPmRlZmluZGV4ID0gKGNoYXIpaW5kZXg7Ci0JfSBlbHNlIHsKLS8vIFdlIGFyZSBhY3R1YWxseSBzZXR0aW5nIHRoZSBrZXkKLQkJd2tyLmxlbiA9IGNwdV90b19sZTE2KHNpemVvZih3a3IpKTsKLQkJd2tyLmtpbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKLQkJd2tyLmtsZW4gPSBjcHVfdG9fbGUxNihrZXlsZW4pOwotCQltZW1jcHkoIHdrci5rZXksIGtleSwga2V5bGVuICk7Ci0JCW1lbWNweSggd2tyLm1hYywgbWFjYWRkciwgRVRIX0FMRU4gKTsKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIiVzOiBrZXkgbGVuZ3RoIHRvIHNldCB3YXMgemVybyIsCisJCQkgICAgICAgX19mdW5jX18pOworCQlyZXR1cm4gLTE7CiAJfQogCisJbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKKwl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOworCXdrci5raW5kZXggPSBjcHVfdG9fbGUxNihpbmRleCk7CisJd2tyLmtsZW4gPSBjcHVfdG9fbGUxNihrZXlsZW4pOworCW1lbWNweSh3a3Iua2V5LCBrZXksIGtleWxlbik7CisJbWVtY3B5KHdrci5tYWMsIG1hY2FkZHIsIEVUSF9BTEVOKTsKKwogCWlmIChwZXJtKSBkaXNhYmxlX01BQyhhaSwgbG9jayk7Ci0Jd3JpdGVXZXBLZXlSaWQoYWksICZ3a3IsIHBlcm0sIGxvY2spOworCXJjID0gd3JpdGVXZXBLZXlSaWQoYWksICZ3a3IsIHBlcm0sIGxvY2spOwogCWlmIChwZXJtKSBlbmFibGVfTUFDKGFpLCBsb2NrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3dlcF90eF9pZHgoc3RydWN0IGFpcm9faW5mbyAqYWksIHUxNiBpbmRleCwgaW50IHBlcm0sIGludCBsb2NrKQoreworCVdlcEtleVJpZCB3a3I7CisJaW50IHJjOworCisJbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKKwl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOworCXdrci5raW5kZXggPSBjcHVfdG9fbGUxNigweGZmZmYpOworCXdrci5tYWNbMF0gPSAoY2hhcilpbmRleDsKKworCWlmIChwZXJtKSB7CisJCWFpLT5kZWZpbmRleCA9IChjaGFyKWluZGV4OworCQlkaXNhYmxlX01BQyhhaSwgbG9jayk7CisJfQorCisJcmMgPSB3cml0ZVdlcEtleVJpZChhaSwgJndrciwgcGVybSwgbG9jayk7CisKKwlpZiAocGVybSkKKwkJZW5hYmxlX01BQyhhaSwgbG9jayk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBwcm9jX3dlcGtleV9vbl9jbG9zZSggc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUgKSB7CkBAIC01MTg3LDcgKzUyOTcsNyBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZHAgPSBQREUoaW5vZGUpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkcC0+ZGF0YTsKIAlzdHJ1Y3QgYWlyb19pbmZvICphaSA9IGRldi0+bWxfcHJpdjsKLQlpbnQgaTsKKwlpbnQgaSwgcmM7CiAJY2hhciBrZXlbMTZdOwogCXUxNiBpbmRleCA9IDA7CiAJaW50IGogPSAwOwpAQCAtNTIwMSw3ICs1MzExLDEyIEBACiAJICAgIChkYXRhLT53YnVmZmVyWzFdID09ICcgJyB8fCBkYXRhLT53YnVmZmVyWzFdID09ICdcbicpKSB7CiAJCWluZGV4ID0gZGF0YS0+d2J1ZmZlclswXSAtICcwJzsKIAkJaWYgKGRhdGEtPndidWZmZXJbMV0gPT0gJ1xuJykgewotCQkJc2V0X3dlcF9rZXkoYWksIGluZGV4LCBOVUxMLCAwLCAxLCAxKTsKKwkJCXJjID0gc2V0X3dlcF90eF9pZHgoYWksIGluZGV4LCAxLCAxKTsKKwkJCWlmIChyYyA8IDApIHsKKwkJCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCAiCisJCQkJICAgICAgICAgICAgICAgIldFUCB0cmFuc21pdCBpbmRleCB0byAlZDogJWQuIiwKKwkJCQkgICAgICAgICAgICAgICBpbmRleCwgcmMpOworCQkJfQogCQkJcmV0dXJuOwogCQl9CiAJCWogPSAyOwpAQCAtNTIyMCw3ICs1MzM1LDEyIEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlzZXRfd2VwX2tleShhaSwgaW5kZXgsIGtleSwgaS8zLCAxLCAxKTsKKworCXJjID0gc2V0X3dlcF9rZXkoYWksIGluZGV4LCBrZXksIGkvMywgMSwgMSk7CisJaWYgKHJjIDwgMCkgeworCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCBXRVAga2V5IGF0IGluZGV4ICIKKwkJICAgICAgICAgICAgICAgIiVkOiAlZC4iLCBpbmRleCwgcmMpOworCX0KIH0KIAogc3RhdGljIGludCBwcm9jX3dlcGtleV9vcGVuKCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSApCkBAIC01NDUxLDEzICs1NTcxLDEzIEBACiAJCQlicmVhazsKIAkJY2FzZSBBVVRIX1NIQVJFREtFWToKIAkJCWlmIChhcHJpdi0+a2V5aW5kZXggPCBhdXRvX3dlcCkgewotCQkJCXNldF93ZXBfa2V5KGFwcml2LCBhcHJpdi0+a2V5aW5kZXgsIE5VTEwsIDAsIDAsIDApOworCQkJCXNldF93ZXBfdHhfaWR4KGFwcml2LCBhcHJpdi0+a2V5aW5kZXgsIDAsIDApOwogCQkJCWFwcml2LT5jb25maWcuYXV0aFR5cGUgPSBBVVRIX1NIQVJFREtFWTsKIAkJCQlhcHJpdi0+a2V5aW5kZXgrKzsKIAkJCX0gZWxzZSB7CiAJCQkgICAgICAgIC8qIERyb3AgdG8gRU5DUllQVCAqLwogCQkJCWFwcml2LT5rZXlpbmRleCA9IDA7Ci0JCQkJc2V0X3dlcF9rZXkoYXByaXYsIGFwcml2LT5kZWZpbmRleCwgTlVMTCwgMCwgMCwgMCk7CisJCQkJc2V0X3dlcF90eF9pZHgoYXByaXYsIGFwcml2LT5kZWZpbmRleCwgMCwgMCk7CiAJCQkJYXByaXYtPmNvbmZpZy5hdXRoVHlwZSA9IEFVVEhfRU5DUllQVDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtNTcyNSwxNiArNTg0NSwxMiBAQAogCWludCByYyA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAogCS8qIElmIHNldHRpbmcgYnkgZnJlcXVlbmN5LCBjb252ZXJ0IHRvIGEgY2hhbm5lbCAqLwotCWlmKChmd3JxLT5lID09IDEpICYmCi0JICAgKGZ3cnEtPm0gPj0gKGludCkgMi40MTJlOCkgJiYKLQkgICAoZndycS0+bSA8PSAoaW50KSAyLjQ4N2U4KSkgeworCWlmKGZ3cnEtPmUgPT0gMSkgewogCQlpbnQgZiA9IGZ3cnEtPm0gLyAxMDAwMDA7Ci0JCWludCBjID0gMDsKLQkJd2hpbGUoKGMgPCAxNCkgJiYgKGYgIT0gZnJlcXVlbmN5X2xpc3RbY10pKQotCQkJYysrOworCiAJCS8qIEhhY2sgdG8gZmFsbCB0aHJvdWdoLi4uICovCiAJCWZ3cnEtPmUgPSAwOwotCQlmd3JxLT5tID0gYyArIDE7CisJCWZ3cnEtPm0gPSBpZWVlODAyMTFfZnJlcV90b19kc3NzX2NoYW4oZik7CiAJfQogCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KIAlpZigoZndycS0+bSA+IDEwMDApIHx8IChmd3JxLT5lID4gMCkpCkBAIC01Nzc4LDcgKzU4OTQsNyBAQAogCiAJY2ggPSBsZTE2X3RvX2NwdShzdGF0dXNfcmlkLmNoYW5uZWwpOwogCWlmKChjaCA+IDApICYmIChjaCA8IDE1KSkgewotCQlmd3JxLT5tID0gZnJlcXVlbmN5X2xpc3RbY2ggLSAxXSAqIDEwMDAwMDsKKwkJZndycS0+bSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaCkgKiAxMDAwMDA7CiAJCWZ3cnEtPmUgPSAxOwogCX0gZWxzZSB7CiAJCWZ3cnEtPm0gPSBjaDsKQEAgLTYyMzQsMTEgKzYzNTAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2YWxpZF9pbmRleChDYXBhYmlsaXR5UmlkICpwLCBpbnQgaW5kZXgpCitzdGF0aWMgaW5saW5lIGludCB2YWxpZF9pbmRleChzdHJ1Y3QgYWlyb19pbmZvICphaSwgaW50IGluZGV4KQogewotCWlmIChpbmRleCA8IDApCi0JCXJldHVybiAwOwotCXJldHVybiBpbmRleCA8IChwLT5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMHg4MCkgPyA0IDogMSk7CisJcmV0dXJuIChpbmRleCA+PSAwKSAmJiAoaW5kZXggPD0gYWktPm1heF93ZXBfaWR4KTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNjI1MSwxNiArNjM2NSwxMyBAQAogCQkJICAgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KLQlpbnQgcGVybSA9ICggZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxICk7CisJaW50IHBlcm0gPSAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxKTsKIAlfX2xlMTYgY3VycmVudEF1dGhUeXBlID0gbG9jYWwtPmNvbmZpZy5hdXRoVHlwZTsKKwlpbnQgcmMgPSAwOwogCi0JLyogSXMgV0VQIHN1cHBvcnRlZCA/ICovCi0JcmVhZENhcGFiaWxpdHlSaWQobG9jYWwsICZjYXBfcmlkLCAxKTsKLQkvKiBPbGRlciBmaXJtd2FyZSBkb2Vzbid0IHN1cHBvcnQgdGhpcy4uLgotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9ICovCisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKIAogCS8qIEJhc2ljIGNoZWNraW5nOiBkbyB3ZSBoYXZlIGEga2V5IHRvIHNldCA/CkBAIC02MjcyLDE0ICs2MzgzLDIxIEBACiAJaWYgKGR3cnEtPmxlbmd0aCA+IDApIHsKIAkJd2VwX2tleV90IGtleTsKIAkJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JCWludCBjdXJyZW50X2luZGV4ID0gZ2V0X3dlcF9rZXkobG9jYWwsIDB4ZmZmZik7CisJCWludCBjdXJyZW50X2luZGV4OworCiAJCS8qIENoZWNrIHRoZSBzaXplIG9mIHRoZSBrZXkgKi8KIAkJaWYgKGR3cnEtPmxlbmd0aCA+IE1BWF9LRVlfU0laRSkgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKworCQljdXJyZW50X2luZGV4ID0gZ2V0X3dlcF90eF9pZHgobG9jYWwpOworCQlpZiAoY3VycmVudF9pbmRleCA8IDApCisJCQljdXJyZW50X2luZGV4ID0gMDsKKwogCQkvKiBDaGVjayB0aGUgaW5kZXggKG5vbmUgLT4gdXNlIGN1cnJlbnQpICovCi0JCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGluZGV4KSkKKwkJaWYgKCF2YWxpZF9pbmRleChsb2NhbCwgaW5kZXgpKQogCQkJaW5kZXggPSBjdXJyZW50X2luZGV4OworCiAJCS8qIFNldCB0aGUgbGVuZ3RoICovCiAJCWlmIChkd3JxLT5sZW5ndGggPiBNSU5fS0VZX1NJWkUpCiAJCQlrZXkubGVuID0gTUFYX0tFWV9TSVpFOwpAQCAtNjI5Niw3ICs2NDE0LDEzIEBACiAJCQkvKiBDb3B5IHRoZSBrZXkgaW4gdGhlIGRyaXZlciAqLwogCQkJbWVtY3B5KGtleS5rZXksIGV4dHJhLCBkd3JxLT5sZW5ndGgpOwogCQkJLyogU2VuZCB0aGUga2V5IHRvIHRoZSBjYXJkICovCi0JCQlzZXRfd2VwX2tleShsb2NhbCwgaW5kZXgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOworCQkJcmMgPSBzZXRfd2VwX2tleShsb2NhbCwgaW5kZXgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IgorCQkJCSAgICAgICAgICAgICAgICIgV0VQIGtleSBhdCBpbmRleCAlZDogJWQuIiwKKwkJCQkgICAgICAgICAgICAgICBpbmRleCwgcmMpOworCQkJCXJldHVybiByYzsKKwkJCX0KIAkJfQogCQkvKiBXRSBzcGVjaWZ5IHRoYXQgaWYgYSB2YWxpZCBrZXkgaXMgc2V0LCBlbmNyeXB0aW9uCiAJCSAqIHNob3VsZCBiZSBlbmFibGVkICh1c2VyIG1heSB0dXJuIGl0IG9mZiBsYXRlcikKQEAgLTYzMDgsMTIgKzY0MzIsMTkgQEAKIAl9IGVsc2UgewogCQkvKiBEbyB3ZSB3YW50IHRvIGp1c3Qgc2V0IHRoZSB0cmFuc21pdCBrZXkgaW5kZXggPyAqLwogCQlpbnQgaW5kZXggPSAoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQkJaWYgKHZhbGlkX2luZGV4KCZjYXBfcmlkLCBpbmRleCkpIHsKLQkJCXNldF93ZXBfa2V5KGxvY2FsLCBpbmRleCwgTlVMTCwgMCwgcGVybSwgMSk7Ci0JCX0gZWxzZQorCQlpZiAodmFsaWRfaW5kZXgobG9jYWwsIGluZGV4KSkgeworCQkJcmMgPSBzZXRfd2VwX3R4X2lkeChsb2NhbCwgaW5kZXgsIHBlcm0sIDEpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IgorCQkJCSAgICAgICAgICAgICAgICIgV0VQIHRyYW5zbWl0IGluZGV4IHRvICVkOiAlZC4iLAorCQkJCSAgICAgICAgICAgICAgIGluZGV4LCByYyk7CisJCQkJcmV0dXJuIHJjOworCQkJfQorCQl9IGVsc2UgewogCQkJLyogRG9uJ3QgY29tcGxhaW4gaWYgb25seSBjaGFuZ2UgdGhlIG1vZGUgKi8KIAkJCWlmICghKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpKQogCQkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCS8qIFJlYWQgdGhlIGZsYWdzICovCiAJaWYoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCkBAIC02MzM5LDE0ICs2NDcwLDEzIEBACiB7CiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7CiAJaW50IGluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KKwl1OCBidWZbMTZdOwogCi0JLyogSXMgaXQgc3VwcG9ydGVkID8gKi8KLQlyZWFkQ2FwYWJpbGl0eVJpZChsb2NhbCwgJmNhcF9yaWQsIDEpOwotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9CisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKKwogCS8qIENoZWNrIGVuY3J5cHRpb24gbW9kZSAqLwogCXN3aXRjaChsb2NhbC0+Y29uZmlnLmF1dGhUeXBlKQl7CiAJCWNhc2UgQVVUSF9FTkNSWVBUOgpAQCAtNjM2NSwxNCArNjQ5NSwxNyBAQAogCW1lbXNldChleHRyYSwgMCwgMTYpOwogCiAJLyogV2hpY2gga2V5IGRvIHdlIHdhbnQgPyAtMSAtPiB0eCBpbmRleCAqLwotCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGluZGV4KSkKLQkJaW5kZXggPSBnZXRfd2VwX2tleShsb2NhbCwgMHhmZmZmKTsKLQlkd3JxLT5mbGFncyB8PSBpbmRleCArIDE7Ci0JLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwotCWR3cnEtPmxlbmd0aCA9IGdldF93ZXBfa2V5KGxvY2FsLCBpbmRleCk7Ci0JaWYgKGR3cnEtPmxlbmd0aCA+IDE2KSB7Ci0JCWR3cnEtPmxlbmd0aD0wOworCWlmICghdmFsaWRfaW5kZXgobG9jYWwsIGluZGV4KSkgeworCQlpbmRleCA9IGdldF93ZXBfdHhfaWR4KGxvY2FsKTsKKwkJaWYgKGluZGV4IDwgMCkKKwkJCWluZGV4ID0gMDsKIAl9CisJZHdycS0+ZmxhZ3MgfD0gaW5kZXggKyAxOworCisJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLworCWR3cnEtPmxlbmd0aCA9IGdldF93ZXBfa2V5KGxvY2FsLCBpbmRleCwgJmJ1ZlswXSwgc2l6ZW9mKGJ1ZikpOworCW1lbWNweShleHRyYSwgYnVmLCBkd3JxLT5sZW5ndGgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYzODgsMjggKzY1MjEsMjcgQEAKIAlzdHJ1Y3QgYWlyb19pbmZvICpsb2NhbCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwogCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQlDYXBhYmlsaXR5UmlkIGNhcF9yaWQ7CQkvKiBDYXJkIGNhcGFiaWxpdHkgaW5mbyAqLwogCWludCBwZXJtID0gKCBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfVEVNUCA/IDAgOiAxICk7CiAJX19sZTE2IGN1cnJlbnRBdXRoVHlwZSA9IGxvY2FsLT5jb25maWcuYXV0aFR5cGU7Ci0JaW50IGlkeCwga2V5X2xlbiwgYWxnID0gZXh0LT5hbGcsIHNldF9rZXkgPSAxOworCWludCBpZHgsIGtleV9sZW4sIGFsZyA9IGV4dC0+YWxnLCBzZXRfa2V5ID0gMSwgcmM7CiAJd2VwX2tleV90IGtleTsKIAotCS8qIElzIFdFUCBzdXBwb3J0ZWQgPyAqLwotCXJlYWRDYXBhYmlsaXR5UmlkKGxvY2FsLCAmY2FwX3JpZCwgMSk7Ci0JLyogT2xkZXIgZmlybXdhcmUgZG9lc24ndCBzdXBwb3J0IHRoaXMuLi4KLQlpZighKGNhcF9yaWQuc29mdENhcCAmIGNwdV90b19sZTE2KDIpKSkgeworCWlmICghbG9jYWwtPndlcF9jYXBhYmxlKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfSAqLworCiAJcmVhZENvbmZpZ1JpZChsb2NhbCwgMSk7CiAKIAkvKiBEZXRlcm1pbmUgYW5kIHZhbGlkYXRlIHRoZSBrZXkgaW5kZXggKi8KIAlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CiAJaWYgKGlkeCkgewotCQlpZiAoIXZhbGlkX2luZGV4KCZjYXBfcmlkLCBpZHggLSAxKSkKKwkJaWYgKCF2YWxpZF9pbmRleChsb2NhbCwgaWR4IC0gMSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWR4LS07Ci0JfSBlbHNlCi0JCWlkeCA9IGdldF93ZXBfa2V5KGxvY2FsLCAweGZmZmYpOworCX0gZWxzZSB7CisJCWlkeCA9IGdldF93ZXBfdHhfaWR4KGxvY2FsKTsKKwkJaWYgKGlkeCA8IDApCisJCQlpZHggPSAwOworCX0KIAogCWlmIChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCiAJCWFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKQEAgLTY0MTgsNyArNjU1MCwxMyBAQAogCQkvKiBPbmx5IHNldCB0cmFuc21pdCBrZXkgaW5kZXggaGVyZSwgYWN0dWFsCiAJCSAqIGtleSBpcyBzZXQgYmVsb3cgaWYgbmVlZGVkLgogCQkgKi8KLQkJc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwgTlVMTCwgMCwgcGVybSwgMSk7CisJCXJjID0gc2V0X3dlcF90eF9pZHgobG9jYWwsIGlkeCwgcGVybSwgMSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0ICIKKwkJCSAgICAgICAgICAgICAgICJXRVAgdHJhbnNtaXQgaW5kZXggdG8gJWQ6ICVkLiIsCisJCQkgICAgICAgICAgICAgICBpZHgsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQogCQlzZXRfa2V5ID0gZXh0LT5rZXlfbGVuID4gMCA/IDEgOiAwOwogCX0KIApAQCAtNjQ0NCw3ICs2NTgyLDEyIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKiBTZW5kIHRoZSBrZXkgdG8gdGhlIGNhcmQgKi8KLQkJc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwga2V5LmtleSwga2V5LmxlbiwgcGVybSwgMSk7CisJCXJjID0gc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwga2V5LmtleSwga2V5LmxlbiwgcGVybSwgMSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWFpcm9fcHJpbnRfZXJyKGxvY2FsLT5kZXYtPm5hbWUsICJmYWlsZWQgdG8gc2V0IFdFUCBrZXkiCisJCQkgICAgICAgICAgICAgICAiIGF0IGluZGV4ICVkOiAlZC4iLCBpZHgsIHJjKTsKKwkJCXJldHVybiByYzsKKwkJfQogCX0KIAogCS8qIFJlYWQgdGhlIGZsYWdzICovCkBAIC02NDc0LDE0ICs2NjE3LDEyIEBACiAJc3RydWN0IGFpcm9faW5mbyAqbG9jYWwgPSBkZXYtPm1sX3ByaXY7CiAJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKIAlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0JQ2FwYWJpbGl0eVJpZCBjYXBfcmlkOwkJLyogQ2FyZCBjYXBhYmlsaXR5IGluZm8gKi8KIAlpbnQgaWR4LCBtYXhfa2V5X2xlbjsKKwl1OCBidWZbMTZdOwogCi0JLyogSXMgaXQgc3VwcG9ydGVkID8gKi8KLQlyZWFkQ2FwYWJpbGl0eVJpZChsb2NhbCwgJmNhcF9yaWQsIDEpOwotCWlmKCEoY2FwX3JpZC5zb2Z0Q2FwICYgY3B1X3RvX2xlMTYoMikpKSB7CisJaWYgKCFsb2NhbC0+d2VwX2NhcGFibGUpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9CisKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKIAogCW1heF9rZXlfbGVuID0gZW5jb2RpbmctPmxlbmd0aCAtIHNpemVvZigqZXh0KTsKQEAgLTY0OTAsMTEgKzY2MzEsMTQgQEAKIAogCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKIAlpZiAoaWR4KSB7Ci0JCWlmICghdmFsaWRfaW5kZXgoJmNhcF9yaWQsIGlkeCAtIDEpKQorCQlpZiAoIXZhbGlkX2luZGV4KGxvY2FsLCBpZHggLSAxKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpZHgtLTsKLQl9IGVsc2UKLQkJaWR4ID0gZ2V0X3dlcF9rZXkobG9jYWwsIDB4ZmZmZik7CisJfSBlbHNlIHsKKwkJaWR4ID0gZ2V0X3dlcF90eF9pZHgobG9jYWwpOworCQlpZiAoaWR4IDwgMCkKKwkJCWlkeCA9IDA7CisJfQogCiAJZW5jb2RpbmctPmZsYWdzID0gaWR4ICsgMTsKIAltZW1zZXQoZXh0LCAwLCBzaXplb2YoKmV4dCkpOwpAQCAtNjUxNywxMCArNjY2MSw4IEBACiAJbWVtc2V0KGV4dHJhLCAwLCAxNik7CiAJCiAJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwotCWV4dC0+a2V5X2xlbiA9IGdldF93ZXBfa2V5KGxvY2FsLCBpZHgpOwotCWlmIChleHQtPmtleV9sZW4gPiAxNikgewotCQlleHQtPmtleV9sZW49MDsKLQl9CisJZXh0LT5rZXlfbGVuID0gZ2V0X3dlcF9rZXkobG9jYWwsIGlkeCwgJmJ1ZlswXSwgc2l6ZW9mKGJ1ZikpOworCW1lbWNweShleHRyYSwgYnVmLCBleHQtPmtleV9sZW4pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02Nzk1LDggKzY5MzcsOCBAQAogCWsgPSAwOwogCWZvcihpID0gMDsgaSA8IDE0OyBpKyspIHsKIAkJcmFuZ2UtPmZyZXFba10uaSA9IGkgKyAxOyAvKiBMaXN0IGluZGV4ICovCi0JCXJhbmdlLT5mcmVxW2tdLm0gPSBmcmVxdWVuY3lfbGlzdFtpXSAqIDEwMDAwMDsKLQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLyogVmFsdWVzIGluIHRhYmxlIGluIE1IeiAtPiAqIDEwXjUgKiAxMCAqLworCQlyYW5nZS0+ZnJlcVtrXS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkgKyAxKSAqIDEwMDAwMDsKKwkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLyogVmFsdWVzIGluIE1IeiAtPiAqIDEwXjUgKiAxMCAqLwogCX0KIAlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGs7CiAKQEAgLTcwMzEsMTEgKzcxNzMsMTUgQEAKIHsKIAlzdHJ1Y3QgYWlyb19pbmZvICpsb2NhbCA9IGRldi0+bWxfcHJpdjsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MgPSAoc3RydWN0IHNvY2thZGRyICopIGV4dHJhOwotCXN0cnVjdCBpd19xdWFsaXR5IHF1YWxbSVdfTUFYX0FQXTsKKwlzdHJ1Y3QgaXdfcXVhbGl0eSAqcXVhbDsKIAlCU1NMaXN0UmlkIEJTU0xpc3Q7CiAJaW50IGk7CiAJaW50IGxvc2VTeW5jID0gY2FwYWJsZShDQVBfTkVUX0FETUlOKSA/IDE6IC0xOwogCisJcXVhbCA9IGttYWxsb2MoSVdfTUFYX0FQICogc2l6ZW9mKCpxdWFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxdWFsKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWZvciAoaSA9IDA7IGkgPCBJV19NQVhfQVA7IGkrKykgewogCQl1MTYgZEJtOwogCQlpZiAocmVhZEJTU0xpc3RSaWQobG9jYWwsIGxvc2VTeW5jLCAmQlNTTGlzdCkpCkBAIC03MDkwLDYgKzcyMzYsNyBAQAogCX0KIAlkd3JxLT5sZW5ndGggPSBpOwogCisJa2ZyZWUocXVhbCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcxODksMTAgKzczMzYsNyBAQAogCS8qIEFkZCBmcmVxdWVuY3kgKi8KIAlpd2UuY21kID0gU0lPQ0dJV0ZSRVE7CiAJaXdlLnUuZnJlcS5tID0gbGUxNl90b19jcHUoYnNzLT5kc0NoYW5uZWwpOwotCS8qIGl3ZS51LmZyZXEubSBjb250YWludCB0aGUgY2hhbm5lbCAoc3RhcnRpbmcgMSksIG91ciAKLQkgKiBmcmVxdWVuY3lfbGlzdCBhcnJheSBzdGFydCBhdCBpbmRleCAwLi4uCi0JICovCi0JaXdlLnUuZnJlcS5tID0gZnJlcXVlbmN5X2xpc3RbaXdlLnUuZnJlcS5tIC0gMV0gKiAxMDAwMDA7CisJaXdlLnUuZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGl3ZS51LmZyZXEubSkgKiAxMDAwMDA7CiAJaXdlLnUuZnJlcS5lID0gMTsKIAljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKIAkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvX2NzLmMKaW5kZXggMjc2OTZjMi4uZDA1OTNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyb19jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm9fY3MuYwpAQCAtMTYsOCArMTYsOCBAQAogICAgIEluIGFkZGl0aW9uIHRoaXMgbW9kdWxlIHdhcyBkZXJpdmVkIGZyb20gZHVtbXlfY3MuCiAgICAgVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIGR1bW15X2NzIGlzIERhdmlkIEEuIEhpbmRzCiAgICAgPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4gIFBvcnRpb25zIGNyZWF0ZWQgYnkgRGF2aWQgQS4gSGluZHMKLSAgICBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgCi0gICAgCisgICAgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAjaWZkZWYgX19JTl9QQ01DSUFfUEFDS0FHRV9fCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8cGNtY2lhL2Npc3JlZy5oPgogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpbmNsdWRlICJhaXJvLmgiCkBAIC01NCw3ICs1NCw3IEBACiBzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwogc3RhdGljIGNoYXIgKnZlcnNpb24gPSAiJFJldmlzaW9uOiAxLjIgJCI7Ci0jZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pIGlmIChwY19kZWJ1Zz4obikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOworI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWcgPiAobikpIHByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOwogI2Vsc2UKICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKICNlbmRpZgpAQCAtNjIsOSArNjIsOSBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIE1PRFVMRV9BVVRIT1IoIkJlbmphbWluIFJlZWQiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU3VwcG9ydCBmb3IgQ2lzY28vQWlyb25ldCA4MDIuMTEgd2lyZWxlc3MgZXRoZXJuZXQgXAotICAgICAgICAgICAgICAgICAgIGNhcmRzLiAgVGhpcyBpcyB0aGUgbW9kdWxlIHRoYXQgbGlua3MgdGhlIFBDTUNJQSBjYXJkIFwKLQkJICAgd2l0aCB0aGUgYWlybyBtb2R1bGUuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIENpc2NvL0Fpcm9uZXQgODAyLjExIHdpcmVsZXNzIGV0aGVybmV0ICIKKwkJICAgImNhcmRzLiAgVGhpcyBpcyB0aGUgbW9kdWxlIHRoYXQgbGlua3MgdGhlIFBDTUNJQSBjYXJkICIKKwkJICAgIndpdGggdGhlIGFpcm8gbW9kdWxlLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkFpcm9uZXQgNDUwMCwgNDgwMCBhbmQgQ2lzY28gMzQwIFBDTUNJQSBjYXJkcyIpOwogCkBAIC03Niw3ICs3Niw3IEBACiAgICBldmVudCBpcyByZWNlaXZlZC4gIFRoZSBjb25maWcoKSBhbmQgcmVsZWFzZSgpIGVudHJ5IHBvaW50cyBhcmUKICAgIHVzZWQgdG8gY29uZmlndXJlIG9yIHJlbGVhc2UgYSBzb2NrZXQsIGluIHJlc3BvbnNlIHRvIGNhcmQKICAgIGluc2VydGlvbiBhbmQgZWplY3Rpb24gZXZlbnRzLiAgVGhleSBhcmUgaW52b2tlZCBmcm9tIHRoZSBhaXJvX2NzCi0gICBldmVudCBoYW5kbGVyLiAKKyAgIGV2ZW50IGhhbmRsZXIuCiAqLwogCiBzdGF0aWMgaW50IGFpcm9fY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKTsKQEAgLTEwMyw4ICsxMDMsOSBAQAogICAgYnkgb25lIHN0cnVjdCBwY21jaWFfZGV2aWNlIHN0cnVjdHVyZSAoZGVmaW5lZCBpbiBkcy5oKS4KIAogICAgWW91IG1heSBub3Qgd2FudCB0byB1c2UgYSBsaW5rZWQgbGlzdCBmb3IgdGhpcyAtLSBmb3IgZXhhbXBsZSwgdGhlCi0gICBtZW1vcnkgY2FyZCBkcml2ZXIgdXNlcyBhbiBhcnJheSBvZiBzdHJ1Y3QgcGNtY2lhX2RldmljZSBwb2ludGVycywgd2hlcmUgbWlub3IKLSAgIGRldmljZSBudW1iZXJzIGFyZSB1c2VkIHRvIGRlcml2ZSB0aGUgY29ycmVzcG9uZGluZyBhcnJheSBpbmRleC4KKyAgIG1lbW9yeSBjYXJkIGRyaXZlciB1c2VzIGFuIGFycmF5IG9mIHN0cnVjdCBwY21jaWFfZGV2aWNlIHBvaW50ZXJzLAorICAgd2hlcmUgbWlub3IgZGV2aWNlIG51bWJlcnMgYXJlIHVzZWQgdG8gZGVyaXZlIHRoZSBjb3JyZXNwb25kaW5nCisgICBhcnJheSBpbmRleC4KICovCiAKIC8qCkBAIC0xMjIsMjIgKzEyMywyMiBAQAogICAgZGV2aWNlIElPIHJvdXRpbmVzIGNhbiB1c2UgYSBmbGFnIGxpa2UgdGhpcyB0byB0aHJvdHRsZSBJTyB0byBhCiAgICBjYXJkIHRoYXQgaXMgbm90IHJlYWR5IHRvIGFjY2VwdCBpdC4KICovCi0gICAKKwogdHlwZWRlZiBzdHJ1Y3QgbG9jYWxfaW5mb190IHsKIAlkZXZfbm9kZV90CW5vZGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmV0aF9kZXY7CiB9IGxvY2FsX2luZm9fdDsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gIAorCiAgIGFpcm9fYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKICAgbG9jYWwgZGF0YSBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkCiAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4KLSAgCisKICAgVGhlIGRldl9saW5rIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCwgYnV0IHdlIGRvbid0IGFjdHVhbGx5CiAgIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhCiAgIGNhcmQgaW5zZXJ0aW9uIGV2ZW50LgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBhaXJvX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2RldikKQEAgLTE1MCw3ICsxNTEsNyBAQAogCXBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORzsKIAlwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCXBfZGV2LT5pcnEuSGFuZGxlciA9IE5VTEw7Ci0JCisKIAkvKgogCSAgR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiBkZWZhdWx0cyBjYW4gZ28gaGVyZS4gIEluIHRoaXMKIAkgIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvciBhbG1vc3QKQEAgLTE2MCw3ICsxNjEsNyBAQAogCSovCiAJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IDA7CiAJcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwotCQorCiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KIAlsb2NhbCA9IGt6YWxsb2Moc2l6ZW9mKGxvY2FsX2luZm9fdCksIEdGUF9LRVJORUwpOwogCWlmICghbG9jYWwpIHsKQEAgLTE3MywxMiArMTc0LDEyIEBACiB9IC8qIGFpcm9fYXR0YWNoICovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAKKwogICBUaGlzIGRlbGV0ZXMgYSBkcml2ZXIgImluc3RhbmNlIi4gIFRoZSBkZXZpY2UgaXMgZGUtcmVnaXN0ZXJlZAogICB3aXRoIENhcmQgU2VydmljZXMuICBJZiBpdCBoYXMgYmVlbiByZWxlYXNlZCwgYWxsIGxvY2FsIGRhdGEKICAgc3RydWN0dXJlcyBhcmUgZnJlZWQuICBPdGhlcndpc2UsIHRoZSBzdHJ1Y3R1cmVzIHdpbGwgYmUgZnJlZWQKICAgd2hlbiB0aGUgZGV2aWNlIGlzIHJlbGVhc2VkLgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgYWlyb19kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCkBAIC0xODcsMjAgKzE4OCwyMCBAQAogCiAJYWlyb19yZWxlYXNlKGxpbmspOwogCi0JaWYgKCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYgKSB7Ci0JCXN0b3BfYWlyb19jYXJkKCAoKGxvY2FsX2luZm9fdCopbGluay0+cHJpdiktPmV0aF9kZXYsIDAgKTsKKwlpZiAoKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldikgeworCQlzdG9wX2Fpcm9fY2FyZCgoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2LCAwKTsKIAl9Ci0JKChsb2NhbF9pbmZvX3QqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0gTlVMTDsKKwkoKGxvY2FsX2luZm9fdCAqKWxpbmstPnByaXYpLT5ldGhfZGV2ID0gTlVMTDsKIAogCWtmcmVlKGxpbmstPnByaXYpOwogfSAvKiBhaXJvX2RldGFjaCAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgYWlyb19jb25maWcoKSBpcyBzY2hlZHVsZWQgdG8gcnVuIGFmdGVyIGEgQ0FSRF9JTlNFUlRJT04gZXZlbnQKICAgaXMgcmVjZWl2ZWQsIHRvIGNvbmZpZ3VyZSB0aGUgUENNQ0lBIHNvY2tldCwgYW5kIHRvIG1ha2UgdGhlCiAgIGRldmljZSBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KLSAgCisKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgXApAQCAtMzI1LDI2ICszMjYsMjggQEAKIAkqLwogCWlmIChsaW5rLT5jb25mLkF0dHJpYnV0ZXMgJiBDT05GX0VOQUJMRV9JUlEpCiAJCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7Ci0JCisKIAkvKgogCSAgVGhpcyBhY3R1YWxseSBjb25maWd1cmVzIHRoZSBQQ01DSUEgc29ja2V0IC0tIHNldHRpbmcgdXAKIAkgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLCBhbmQgcHV0dGluZyB0aGUKIAkgIGNhcmQgYW5kIGhvc3QgaW50ZXJmYWNlIGludG8gIk1lbW9yeSBhbmQgSU8iIG1vZGUuCiAJKi8KLQlDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwotCSgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldiA9IAotCQlpbml0X2Fpcm9fY2FyZCggbGluay0+aXJxLkFzc2lnbmVkSVJRLAotCQkJCWxpbmstPmlvLkJhc2VQb3J0MSwgMSwgJmhhbmRsZV90b19kZXYobGluaykgKTsKLQlpZiAoISgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2RldikgZ290byBjc19mYWlsZWQ7Ci0JCisJQ1NfQ0hFQ0soUmVxdWVzdENvbmZpZ3VyYXRpb24sCisJCSBwY21jaWFfcmVxdWVzdF9jb25maWd1cmF0aW9uKGxpbmssICZsaW5rLT5jb25mKSk7CisJKChsb2NhbF9pbmZvX3QgKilsaW5rLT5wcml2KS0+ZXRoX2RldiA9CisJCWluaXRfYWlyb19jYXJkKGxpbmstPmlycS5Bc3NpZ25lZElSUSwKKwkJCSAgICAgICBsaW5rLT5pby5CYXNlUG9ydDEsIDEsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKKwlpZiAoISgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYpCisJCWdvdG8gY3NfZmFpbGVkOworCiAJLyoKIAkgIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZfbm9kZV90IHN0cnVjdHVyZShzKSBuZWVkIHRvIGJlCiAJICBpbml0aWFsaXplZCBhbmQgYXJyYW5nZWQgaW4gYSBsaW5rZWQgbGlzdCBhdCBsaW5rLT5kZXZfbm9kZS4KIAkqLwotCXN0cmNweShkZXYtPm5vZGUuZGV2X25hbWUsICgobG9jYWxfaW5mb190KilsaW5rLT5wcml2KS0+ZXRoX2Rldi0+bmFtZSApOworCXN0cmNweShkZXYtPm5vZGUuZGV2X25hbWUsICgobG9jYWxfaW5mb190ICopbGluay0+cHJpdiktPmV0aF9kZXYtPm5hbWUpOwogCWRldi0+bm9kZS5tYWpvciA9IGRldi0+bm9kZS5taW5vciA9IDA7CiAJbGluay0+ZGV2X25vZGUgPSAmZGV2LT5ub2RlOwotCQorCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbmRleCAweCUwMng6ICIsCiAJICAgICAgIGRldi0+bm9kZS5kZXZfbmFtZSwgbGluay0+Y29uZi5Db25maWdJbmRleCk7CkBAIC0zNzQsMTEgKzM3NywxMSBAQAogfSAvKiBhaXJvX2NvbmZpZyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgCisKICAgQWZ0ZXIgYSBjYXJkIGlzIHJlbW92ZWQsIGFpcm9fcmVsZWFzZSgpIHdpbGwgdW5yZWdpc3RlciB0aGUKICAgZGV2aWNlLCBhbmQgcmVsZWFzZSB0aGUgUENNQ0lBIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCiAgIHN0aWxsIG9wZW4sIHRoaXMgd2lsbCBiZSBwb3N0cG9uZWQgdW50aWwgaXQgaXMgY2xvc2VkLgotICAKKwogICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIHZvaWQgYWlyb19yZWxlYXNlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQpAQCAtNDc1LDcgKzQ3OCw3IEBACiAgICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAogICAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORwogICAgIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgICAKKyAgICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCiAKIG1vZHVsZV9pbml0KGFpcm9fY3NfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNDI4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvS2NvbmZpZwpAQCAtMCwwICsxLDE3IEBACitjb25maWcgQVI5MTcwX1VTQgorCXRyaXN0YXRlICJBdGhlcm9zIEFSOTE3MCA4MDIuMTFuIFVTQiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEZXX0xPQURFUgorCWhlbHAKKwkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBBdGhlcm9zICJvdHVzIiA4MDIuMTFuIFVTQiBkZXZpY2VzLgorCisJICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgYWRkaXRpb25hbCBmaXJtd2FyZSAoMiBmaWxlcykuCisJICBGb3Igbm93LCB0aGVzZSBmaWxlcyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGhlcmU6CisJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2FyOTE3MAorCisJICBJZiB5b3UgY2hvb3NlIHRvIGJ1aWxkIGEgbW9kdWxlLCBpdCdsbCBiZSBjYWxsZWQgYXI5MTcwdXNiLgorCitjb25maWcgQVI5MTcwX0xFRFMKKwlib29sCisJZGVwZW5kcyBvbiBBUjkxNzBfVVNCICYmIE1BQzgwMjExX0xFRFMgJiYgKExFRFNfQ0xBU1MgPSB5IHx8IExFRFNfQ0xBU1MgPSBBUjkxNzBfVVNCKQorCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOTFjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACithcjkxNzB1c2Itb2JqcyA6PSB1c2IubyBtYWluLm8gY21kLm8gbWFjLm8gcGh5Lm8gbGVkLm8KKworb2JqLSQoQ09ORklHX0FSOTE3MF9VU0IpICs9IGFyOTE3MHVzYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvYXI5MTcwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvYXI5MTcwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmYjJlOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9hcjkxNzAuaApAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgorICoKKyAqIERyaXZlciBzcGVjaWZpYyBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgKiBwZXJtaXNzaW9uIG5vdGljZToKKyAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqCisgKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfX0FSOTE3MF9ICisjZGVmaW5lIF9fQVI5MTcwX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPG5ldC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUworI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNlbmRpZiAvKiBDT05GSUdfQVI5MTcwX0xFRFMgKi8KKyNpbmNsdWRlICJlZXByb20uaCIKKyNpbmNsdWRlICJody5oIgorCisjZGVmaW5lIFBBWUxPQURfTUFYCShBUjkxNzBfTUFYX0NNRF9MRU4vNCAtIDEpCisKK2VudW0gYXI5MTcwX2J3IHsKKwlBUjkxNzBfQldfMjAsCisJQVI5MTcwX0JXXzQwX0JFTE9XLAorCUFSOTE3MF9CV180MF9BQk9WRSwKKworCV9fQVI5MTcwX05VTV9CVywKK307CisKK2VudW0gYXI5MTcwX3JmX2luaXRfbW9kZSB7CisJQVI5MTcwX1JGSV9OT05FLAorCUFSOTE3MF9SRklfV0FSTSwKKwlBUjkxNzBfUkZJX0NPTEQsCit9OworCisjZGVmaW5lIEFSOTE3MF9NQVhfUlhfQlVGRkVSX1NJWkUJCTgxOTIKKworI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUworc3RydWN0IGFyOTE3MDsKKworc3RydWN0IGFyOTE3MF9sZWQgeworCXN0cnVjdCBhcjkxNzAgKmFyOworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbDsKKwljaGFyIG5hbWVbMzJdOworCXVuc2lnbmVkIGludCB0b2dnbGVkOworCWJvb2wgcmVnaXN0ZXJlZDsKK307CisKKyNlbmRpZiAvKiBDT05GSUdfQVI5MTcwX0xFRFMgKi8KKworZW51bSBhcjkxNzBfZGV2aWNlX3N0YXRlIHsKKwlBUjkxNzBfVU5LTk9XTl9TVEFURSwKKwlBUjkxNzBfU1RPUFBFRCwKKwlBUjkxNzBfSURMRSwKKwlBUjkxNzBfU1RBUlRFRCwKKwlBUjkxNzBfQVNTT0NJQVRFRCwKK307CisKK3N0cnVjdCBhcjkxNzAgeworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBtdXRleCBtdXRleDsKKwllbnVtIGFyOTE3MF9kZXZpY2Vfc3RhdGUgc3RhdGU7CisKKwlpbnQgKCpvcGVuKShzdHJ1Y3QgYXI5MTcwICopOworCXZvaWQgKCpzdG9wKShzdHJ1Y3QgYXI5MTcwICopOworCWludCAoKnR4KShzdHJ1Y3QgYXI5MTcwICosIHN0cnVjdCBza19idWZmICosIGJvb2wsIHVuc2lnbmVkIGludCk7CisJaW50ICgqZXhlY19jbWQpKHN0cnVjdCBhcjkxNzAgKiwgZW51bSBhcjkxNzBfY21kLCB1MzIgLAorCQkJdm9pZCAqLCB1MzIgLCB2b2lkICopOworCXZvaWQgKCpjYWxsYmFja19jbWQpKHN0cnVjdCBhcjkxNzAgKiwgdTMyICwgdm9pZCAqKTsKKworCS8qIGludGVyZmFjZSBtb2RlIHNldHRpbmdzICovCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggYnNzaWRbRVRIX0FMRU5dOworCisJLyogYmVhY29uaW5nICovCisJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3dvcms7CisKKwkvKiBjcnlwdG9ncmFwaGljIGVuZ2luZSAqLworCXU2NCB1c2Vka2V5czsKKwlib29sIHJ4X3NvZnR3YXJlX2RlY3J5cHRpb247CisJYm9vbCBkaXNhYmxlX29mZmxvYWQ7CisKKwkvKiBmaWx0ZXIgc2V0dGluZ3MgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmlsdGVyX2NvbmZpZ193b3JrOworCXU2NCBjdXJfbWNfaGFzaCwgd2FudF9tY19oYXNoOworCXUzMiBjdXJfZmlsdGVyLCB3YW50X2ZpbHRlcjsKKwl1bnNpZ25lZCBpbnQgZmlsdGVyX2NoYW5nZWQ7CisJYm9vbCBzbmlmZmVyX2VuYWJsZWQ7CisKKwkvKiBQSFkgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisJaW50IG5vaXNlWzRdOworCisJLyogcG93ZXIgY2FsaWJyYXRpb24gZGF0YSAqLworCXU4IHBvd2VyXzVHX2xlZ1s0XTsKKwl1OCBwb3dlcl8yR19jY2tbNF07CisJdTggcG93ZXJfMkdfb2ZkbVs0XTsKKwl1OCBwb3dlcl81R19odDIwWzhdOworCXU4IHBvd2VyXzVHX2h0NDBbOF07CisJdTggcG93ZXJfMkdfaHQyMFs4XTsKKwl1OCBwb3dlcl8yR19odDQwWzhdOworCisjaWZkZWYgQ09ORklHX0FSOTE3MF9MRURTCisJc3RydWN0IGRlbGF5ZWRfd29yayBsZWRfd29yazsKKwlzdHJ1Y3QgYXI5MTcwX2xlZCBsZWRzW0FSOTE3MF9OVU1fTEVEU107CisjZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCisKKwkvKiBxb3MgcXVldWUgc2V0dGluZ3MgKi8KKwlzcGlubG9ja190IHR4X3N0YXRzX2xvY2s7CisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0c1s1XTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBlZGNmWzVdOworCisJc3BpbmxvY2tfdCBjbWRsb2NrOworCV9fbGUzMiBjbWRidWZbUEFZTE9BRF9NQVggKyAxXTsKKworCS8qIE1BQyBzdGF0aXN0aWNzICovCisJc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgc3RhdHM7CisKKwkvKiBFRVBST00gKi8KKwlzdHJ1Y3QgYXI5MTcwX2VlcHJvbSBlZXByb207CisKKwkvKiBnbG9iYWwgdHggc3RhdHVzIGZvciB1bnJlZ2lzdGVyZWQgU3RhdGlvbnMuICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCBnbG9iYWxfdHhfc3RhdHVzOworCXN0cnVjdCBza19idWZmX2hlYWQgZ2xvYmFsX3R4X3N0YXR1c193YXN0ZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHR4X3N0YXR1c19qYW5pdG9yOworfTsKKworc3RydWN0IGFyOTE3MF9zdGFfaW5mbyB7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9zdGF0dXNbX19BUjkxNzBfTlVNX1RYUV07Cit9OworCisjZGVmaW5lIElTX1NUQVJURUQoYSkJCShhLT5zdGF0ZSA+PSBBUjkxNzBfU1RBUlRFRCkKKyNkZWZpbmUgSVNfQUNDRVBUSU5HX0NNRChhKQkoYS0+c3RhdGUgPj0gQVI5MTcwX0lETEUpCisKKyNkZWZpbmUgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX1BST01JU0MJCUJJVCgwKQorI2RlZmluZSBBUjkxNzBfRklMVEVSX0NIQU5HRURfTVVMVElDQVNUCQlCSVQoMSkKKyNkZWZpbmUgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX0ZSQU1FRklMVEVSCUJJVCgyKQorCisvKiBleHBvcnRlZCBpbnRlcmZhY2UgKi8KK3ZvaWQgKmFyOTE3MF9hbGxvYyhzaXplX3QgcHJpdl9zaXplKTsKK2ludCBhcjkxNzBfcmVnaXN0ZXIoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBkZXZpY2UgKnBkZXYpOwordm9pZCBhcjkxNzBfcngoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhcjkxNzBfdW5yZWdpc3RlcihzdHJ1Y3QgYXI5MTcwICphcik7Cit2b2lkIGFyOTE3MF9oYW5kbGVfdHhfc3RhdHVzKHN0cnVjdCBhcjkxNzAgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBib29sIHVwZGF0ZV9zdGF0aXN0aWNzLCB1MTYgdHhfc3RhdHVzKTsKKworLyogTUFDICovCitpbnQgYXI5MTcwX29wX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBhcjkxNzBfaW5pdF9tYWMoc3RydWN0IGFyOTE3MCAqYXIpOworaW50IGFyOTE3MF9zZXRfcW9zKHN0cnVjdCBhcjkxNzAgKmFyKTsKK2ludCBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChzdHJ1Y3QgYXI5MTcwICphcik7CitpbnQgYXI5MTcwX3VwZGF0ZV9mcmFtZV9maWx0ZXIoc3RydWN0IGFyOTE3MCAqYXIpOworaW50IGFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoc3RydWN0IGFyOTE3MCAqYXIpOworaW50IGFyOTE3MF9zZXRfYmVhY29uX3RpbWVycyhzdHJ1Y3QgYXI5MTcwICphcik7CitpbnQgYXI5MTcwX3NldF9od3JldHJ5X2xpbWl0KHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgbWF4X3JldHJ5KTsKK2ludCBhcjkxNzBfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgYXI5MTcwICphcik7Cit2b2lkIGFyOTE3MF9uZXdfYmVhY29uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitpbnQgYXI5MTcwX3VwbG9hZF9rZXkoc3RydWN0IGFyOTE3MCAqYXIsIHU4IGlkLCBjb25zdCB1OCAqbWFjLCB1OCBrdHlwZSwKKwkJICAgICAgdTgga2V5aWR4LCB1OCAqa2V5ZGF0YSwgaW50IGtleWxlbik7CitpbnQgYXI5MTcwX2Rpc2FibGVfa2V5KHN0cnVjdCBhcjkxNzAgKmFyLCB1OCBpZCk7CisKKy8qIExFRHMgKi8KKyNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKK2ludCBhcjkxNzBfcmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXI5MTcwICphcik7Cit2b2lkIGFyOTE3MF91bnJlZ2lzdGVyX2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpOworI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLworaW50IGFyOTE3MF9pbml0X2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpOworaW50IGFyOTE3MF9zZXRfbGVkc19zdGF0ZShzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGxlZF9zdGF0ZSk7CisKKy8qIFBIWSAvIFJGICovCitpbnQgYXI5MTcwX2luaXRfcGh5KHN0cnVjdCBhcjkxNzAgKmFyLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOworaW50IGFyOTE3MF9pbml0X3JmKHN0cnVjdCBhcjkxNzAgKmFyKTsKK2ludCBhcjkxNzBfc2V0X2NoYW5uZWwoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJICAgICAgIGVudW0gYXI5MTcwX3JmX2luaXRfbW9kZSByZmksIGVudW0gYXI5MTcwX2J3IGJ3KTsKKworI2VuZGlmIC8qIF9fQVI5MTcwX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9jbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTdhNjIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2NtZC5jCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCisgKgorICogQmFzaWMgSFcgcmVnaXN0ZXIvbWVtb3J5L2NvbW1hbmQgYWNjZXNzIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgKiBwZXJtaXNzaW9uIG5vdGljZToKKyAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqCisgKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSAiYXI5MTcwLmgiCisjaW5jbHVkZSAiY21kLmgiCisKK2ludCBhcjkxNzBfd3JpdGVfbWVtKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCBfX2xlMzIgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJaW50IGVycjsKKworCWlmICh1bmxpa2VseSghSVNfQUNDRVBUSU5HX0NNRChhcikpKQorCQlyZXR1cm4gMDsKKworCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9XTUVNLCBsZW4sICh1OCAqKSBkYXRhLCAwLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHdyaXRpbmcgbWVtb3J5IGZhaWxlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBhcjkxNzBfd3JpdGVfcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1MzIgcmVnLCBjb25zdCB1MzIgdmFsKQoreworCV9fbGUzMiBidWZbMl0gPSB7CisJCWNwdV90b19sZTMyKHJlZyksCisJCWNwdV90b19sZTMyKHZhbCksCisJfTsKKwlpbnQgZXJyOworCisJaWYgKHVubGlrZWx5KCFJU19BQ0NFUFRJTkdfQ01EKGFyKSkpCisJCXJldHVybiAwOworCisJZXJyID0gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX1dSRUcsIHNpemVvZihidWYpLAorCQkJICAgKHU4ICopIGJ1ZiwgMCwgTlVMTCk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3cml0aW5nIHJlZyAlI3ggKHZhbCAlI3gpIGZhaWxlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHJlZywgdmFsKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFyOTE3MF9yZWFkX21yZWcoc3RydWN0IGFyOTE3MCAqYXIsIGludCBucmVncywKKwkJCSAgICBjb25zdCB1MzIgKnJlZ3MsIHUzMiAqb3V0KQoreworCWludCBpLCBlcnI7CisJX19sZTMyICpvZmZzLCAqcmVzOworCisJaWYgKHVubGlrZWx5KCFJU19BQ0NFUFRJTkdfQ01EKGFyKSkpCisJCXJldHVybiAwOworCisJLyogYWJ1c2UgIm91dCIgZm9yIHRoZSByZWdpc3RlciBvZmZzZXRzLCBtdXN0IGJlIHNhbWUgbGVuZ3RoICovCisJb2ZmcyA9IChfX2xlMzIgKilvdXQ7CisJZm9yIChpID0gMDsgaSA8IG5yZWdzOyBpKyspCisJCW9mZnNbaV0gPSBjcHVfdG9fbGUzMihyZWdzW2ldKTsKKworCS8qIGFsc28gdXNlIHRoZSBzYW1lIGJ1ZmZlciBmb3IgdGhlIGlucHV0ICovCisJcmVzID0gKF9fbGUzMiAqKW91dDsKKworCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9SUkVHLAorCQkJICAgNCAqIG5yZWdzLCAodTggKilvZmZzLAorCQkJICAgNCAqIG5yZWdzLCAodTggKilyZXMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBjb252ZXJ0IHJlc3VsdCB0byBjcHUgZW5kaWFuICovCisJZm9yIChpID0gMDsgaSA8IG5yZWdzOyBpKyspCisJCW91dFtpXSA9IGxlMzJfdG9fY3B1KHJlc1tpXSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGFyOTE3MF9yZWFkX3JlZyhzdHJ1Y3QgYXI5MTcwICphciwgdTMyIHJlZywgdTMyICp2YWwpCit7CisJcmV0dXJuIGFyOTE3MF9yZWFkX21yZWcoYXIsIDEsICZyZWcsIHZhbCk7Cit9CisKK2ludCBhcjkxNzBfZWNob190ZXN0KHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgdikKK3sKKwlfX2xlMzIgZWNob2J1ZiA9IGNwdV90b19sZTMyKHYpOworCV9fbGUzMiBlY2hvcmVzOworCWludCBlcnI7CisKKwlpZiAodW5saWtlbHkoIUlTX0FDQ0VQVElOR19DTUQoYXIpKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllcnIgPSBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfRUNITywKKwkJCSAgIDQsICh1OCAqKSZlY2hvYnVmLAorCQkJICAgNCwgKHU4ICopJmVjaG9yZXMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoZWNob2J1ZiAhPSBlY2hvcmVzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2NtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZjBlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvY21kLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgorICoKKyAqIEJhc2ljIEhXIHJlZ2lzdGVyL21lbW9yeS9jb21tYW5kIGFjY2VzcyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX19DTURfSAorI2RlZmluZSBfX0NNRF9ICisKKyNpbmNsdWRlICJhcjkxNzAuaCIKKworLyogYmFzaWMgSFcgYWNjZXNzICovCitpbnQgYXI5MTcwX3dyaXRlX21lbShzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgX19sZTMyICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBhcjkxNzBfd3JpdGVfcmVnKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1MzIgcmVnLCBjb25zdCB1MzIgdmFsKTsKK2ludCBhcjkxNzBfcmVhZF9yZWcoc3RydWN0IGFyOTE3MCAqYXIsIHUzMiByZWcsIHUzMiAqdmFsKTsKK2ludCBhcjkxNzBfZWNob190ZXN0KHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgdik7CisKKy8qCisgKiBNYWNyb3MgdG8gZmFjaWxpdGF0ZSB3cml0aW5nIG11bHRpcGxlIHJlZ2lzdGVycyBpbiBhIHNpbmdsZQorICogd3JpdGUtY29tYmluaW5nIFVTQiBjb21tYW5kLiBOb3RlIHRoYXQgd2hlbiB0aGUgZmlyc3QgZ3JvdXAKKyAqIGZhaWxzIHRoZSB3aG9sZSB0aGluZyB3aWxsIGZhaWwgd2l0aG91dCBhbnkgb3RoZXJzIGF0dGVtcHRlZCwKKyAqIGJ1dCB5b3Ugd29uJ3Qga25vdyB3aGljaCB3cml0ZSBpbiB0aGUgZ3JvdXAgZmFpbGVkLgorICovCisjZGVmaW5lIGFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcikJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaW50IF9fbnJlZyA9IDAsIF9fZXJyID0gMDsJCQkJCVwKKwlzdHJ1Y3QgYXI5MTcwICpfX2FyID0gYXI7CisKKyNkZWZpbmUgYXI5MTcwX3JlZ3dyaXRlKHIsIHYpIGRvIHsJCQkJCVwKKwlfX2FyLT5jbWRidWZbMiAqIF9fbnJlZyArIDFdID0gY3B1X3RvX2xlMzIocik7CQkJXAorCV9fYXItPmNtZGJ1ZlsyICogX19ucmVnICsgMl0gPSBjcHVfdG9fbGUzMih2KTsJCQlcCisJX19ucmVnKys7CQkJCQkJCVwKKwlpZiAoKF9fbnJlZyA+PSBQQVlMT0FEX01BWC8yKSkgewkJCQlcCisJCWlmIChJU19BQ0NFUFRJTkdfQ01EKF9fYXIpKQkJCQlcCisJCQlfX2VyciA9IGFyLT5leGVjX2NtZChfX2FyLCBBUjkxNzBfQ01EX1dSRUcsCVwKKwkJCQkJICAgICA4ICogX19ucmVnLAkJXAorCQkJCQkgICAgICh1OCAqKSAmX19hci0+Y21kYnVmWzFdLAlcCisJCQkJCSAgICAgMCwgTlVMTCk7CQkJXAorCQlfX25yZWcgPSAwOwkJCQkJCVwKKwkJaWYgKF9fZXJyKQkJCQkJCVwKKwkJCWdvdG8gX19yZWd3cml0ZV9vdXQ7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIGFyOTE3MF9yZWd3cml0ZV9maW5pc2goKQkJCQkJXAorX19yZWd3cml0ZV9vdXQgOgkJCQkJCQlcCisJaWYgKF9fbnJlZykgewkJCQkJCQlcCisJCWlmIChJU19BQ0NFUFRJTkdfQ01EKF9fYXIpKQkJCQlcCisJCQlfX2VyciA9IGFyLT5leGVjX2NtZChfX2FyLCBBUjkxNzBfQ01EX1dSRUcsCVwKKwkJCQkJICAgICA4ICogX19ucmVnLCAJCVwKKwkJCQkJICAgICAodTggKikgJl9fYXItPmNtZGJ1ZlsxXSwJXAorCQkJCQkgICAgIDAsIE5VTEwpOwkJCVwKKwkJX19ucmVnID0gMDsJCQkJCQlcCisJfQorCisjZGVmaW5lIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKQkJCQkJXAorCV9fZXJyOwkJCQkJCQkJXAorfSB3aGlsZSAoMCk7CisKKyNlbmRpZiAvKiBfX0NNRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvZWVwcm9tLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjOGNjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9lZXByb20uaApAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIEF0aGVyb3MgQVI5MTcwIGRyaXZlcgorICoKKyAqIEVFUFJPTSBsYXlvdXQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX19BUjkxNzBfRUVQUk9NX0gKKyNkZWZpbmUgX19BUjkxNzBfRUVQUk9NX0gKKworI2RlZmluZSBBUjU0MTZfTUFYX0NIQUlOUwkJMgorI2RlZmluZSBBUjU0MTZfTU9EQUxfU1BVUlMJCTUKKworc3RydWN0IGFyOTE3MF9lZXByb21fbW9kYWwgeworCV9fbGUzMglhbnRDdHJsQ2hhaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCV9fbGUzMglhbnRDdHJsQ29tbW9uOworCXM4CWFudGVubmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4CXN3aXRjaFNldHRsaW5nOworCXU4CXR4UnhBdHRlbkNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OAlyeFR4TWFyZ2luQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXM4CWFkY0Rlc2lyZWRTaXplOworCXM4CXBnYURlc2lyZWRTaXplOworCXU4CXhsbmFHYWluQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4CXR4RW5kVG9YcGFPZmY7CisJdTgJdHhFbmRUb1J4T247CisJdTgJdHhGcmFtZVRvWHBhT247CisJdTgJdGhyZXNoNjI7CisJczgJbm9pc2VGbG9vclRocmVzaENoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OAl4cGRHYWluOworCXU4CXhwZDsKKwlzOAlpcUNhbElDaFtBUjU0MTZfTUFYX0NIQUlOU107CisJczgJaXFDYWxRQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4CXBkR2Fpbk92ZXJsYXA7CisJdTgJb2I7CisJdTgJZGI7CisJdTgJeHBhQmlhc0x2bDsKKwl1OAlwd3JEZWNyZWFzZUZvcjJDaGFpbjsKKwl1OAlwd3JEZWNyZWFzZUZvcjNDaGFpbjsKKwl1OAl0eEZyYW1lVG9EYXRhU3RhcnQ7CisJdTgJdHhGcmFtZVRvUGFPbjsKKwl1OAlodDQwUG93ZXJJbmNGb3JQZGFkYzsKKwl1OAlic3dBdHRlbltBUjU0MTZfTUFYX0NIQUlOU107CisJdTgJYnN3TWFyZ2luW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OAlzd1NldHRsZUh0NDA7CisJdTgJcmVzZXJ2ZWRbMjJdOworCXN0cnVjdCBzcHVyX2NoYW5uZWwgeworCQlfX2xlMTYgc3B1ckNoYW47CisJCXU4CXNwdXJSYW5nZUxvdzsKKwkJdTgJc3B1clJhbmdlSGlnaDsKKwl9IF9fcGFja2VkIHNwdXJfY2hhbm5lbHNbQVI1NDE2X01PREFMX1NQVVJTXTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQVI1NDE2X05VTV9QRF9HQUlOUwkJNAorI2RlZmluZSBBUjU0MTZfUERfR0FJTl9JQ0VQVFMJCTUKKworc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl9kYXRhX3Blcl9mcmVxIHsKKwl1OAlwd3JfcGRnW0FSNTQxNl9OVU1fUERfR0FJTlNdW0FSNTQxNl9QRF9HQUlOX0lDRVBUU107CisJdTgJdnBkX3BkZ1tBUjU0MTZfTlVNX1BEX0dBSU5TXVtBUjU0MTZfUERfR0FJTl9JQ0VQVFNdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBBUjU0MTZfTlVNXzVHX0NBTF9QSUVSUwkJOAorI2RlZmluZSBBUjU0MTZfTlVNXzJHX0NBTF9QSUVSUwkJNAorCisjZGVmaW5lIEFSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlMJOAorI2RlZmluZSBBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUFdSUwkzCisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSUwk0CisjZGVmaW5lIEFSNTQxNl9NQVhfTlVNX1RHVF9QV1JTCQk4CisKK3N0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeSB7CisJdTgJZnJlcTsKKwl1OAlwb3dlcls0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2h0IHsKKwl1OAlmcmVxOworCXU4CXBvd2VyWzhdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBBUjU0MTZfTlVNX0NUTFMJCQkyNAorCitzdHJ1Y3QgYXI5MTcwX2NhbGN0bF9lZGdlcyB7CisJdTgJY2hhbm5lbDsKKyNkZWZpbmUgQVI5MTcwX0NBTENUTF9FREdFX0ZMQUdTCTB4QzAKKwl1OAlwb3dlcl9mbGFnczsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTCQk4CisKK3N0cnVjdCBhcjkxNzBfY2FsY3RsX2RhdGEgeworCXN0cnVjdCBhcjkxNzBfY2FsY3RsX2VkZ2VzCisJCWNvbnRyb2xfZWRnZXNbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fQkFORF9FREdFU107Cit9IF9fcGFja2VkOworCisKK3N0cnVjdCBhcjkxNzBfZWVwcm9tIHsKKwlfX2xlMTYJbGVuZ3RoOworCV9fbGUxNgljaGVja3N1bTsKKwlfX2xlMTYJdmVyc2lvbjsKKwl1OAlvcGVyYXRpbmdfZmxhZ3M7CisjZGVmaW5lIEFSOTE3MF9PUEZMQUdfNUdIWiAJCTEKKyNkZWZpbmUgQVI5MTcwX09QRkxBR18yR0haIAkJMgorCXU4CW1pc2M7CisJX19sZTE2CXJlZ19kb21haW5bMl07CisJdTgJbWFjX2FkZHJlc3NbNl07CisJdTgJcnhfbWFzazsKKwl1OAl0eF9tYXNrOworCV9fbGUxNglyZl9zaWxlbnQ7CisJX19sZTE2CWJsdWV0b290aF9vcHRpb25zOworCV9fbGUxNglkZXZpY2VfY2FwYWJpbGl0aWVzOworCV9fbGUzMglidWlsZF9udW1iZXI7CisJdTgJZGV2aWNlVHlwZTsKKwl1OAlyZXNlcnZlZFszM107CisKKwl1OAljdXN0b21lcl9kYXRhWzY0XTsKKworCXN0cnVjdCBhcjkxNzBfZWVwcm9tX21vZGFsCisJCW1vZGFsX2hlYWRlclsyXTsKKworCXU4CWNhbF9mcmVxX3BpZXJfNUdbQVI1NDE2X05VTV81R19DQUxfUElFUlNdOworCXU4CWNhbF9mcmVxX3BpZXJfMkdbQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOworCisJc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl9kYXRhX3Blcl9mcmVxCisJCWNhbF9waWVyX2RhdGFfNUdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXSwKKwkJY2FsX3BpZXJfZGF0YV8yR1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOworCisJLyogcG93ZXIgY2FsaWJyYXRpb24gZGF0YSAqLworCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeQorCQljYWxfdGd0X3B3cl81R1tBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTXTsKKwlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9odAorCQljYWxfdGd0X3B3cl81R19odDIwW0FSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlNdLAorCQljYWxfdGd0X3B3cl81R19odDQwW0FSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlNdOworCisJc3RydWN0IGFyOTE3MF9jYWxpYnJhdGlvbl90YXJnZXRfcG93ZXJfbGVnYWN5CisJCWNhbF90Z3RfcHdyXzJHX2Nja1tBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUFdSU10sCisJCWNhbF90Z3RfcHdyXzJHX29mZG1bQVI1NDE2X05VTV8yR19PRkRNX1RBUkdFVF9QV1JTXTsKKwlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9odAorCQljYWxfdGd0X3B3cl8yR19odDIwW0FSNTQxNl9OVU1fMkdfT0ZETV9UQVJHRVRfUFdSU10sCisJCWNhbF90Z3RfcHdyXzJHX2h0NDBbQVI1NDE2X05VTV8yR19PRkRNX1RBUkdFVF9QV1JTXTsKKworCS8qIGNvbmZvcm1hbmNlIHRlc3RpbmcgbGltaXRzICovCisJdTgJY3RsX2luZGV4W0FSNTQxNl9OVU1fQ1RMU107CisJc3RydWN0IGFyOTE3MF9jYWxjdGxfZGF0YQorCQljdGxfZGF0YVtBUjU0MTZfTlVNX0NUTFNdOworCisJdTgJcGFkOworCV9fbGUxNglzdWJzeXN0ZW1faWQ7Cit9IF9fcGFja2VkOworCisjZW5kaWYgLyogX19BUjkxNzBfRUVQUk9NX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2h3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwOTFiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9ody5oCkBAIC0wLDAgKzEsNDE3IEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCisgKgorICogSGFyZHdhcmUtc3BlY2lmaWMgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX19BUjkxNzBfSFdfSAorI2RlZmluZSBfX0FSOTE3MF9IV19ICisKKyNkZWZpbmUgQVI5MTcwX01BWF9DTURfTEVOCTY0CisKK2VudW0gYXI5MTcwX2NtZCB7CisJQVI5MTcwX0NNRF9SUkVHCQk9IDB4MDAsCisJQVI5MTcwX0NNRF9XUkVHCQk9IDB4MDEsCisJQVI5MTcwX0NNRF9STUVNCQk9IDB4MDIsCisJQVI5MTcwX0NNRF9XTUVNCQk9IDB4MDMsCisJQVI5MTcwX0NNRF9CSVRBTkQJPSAweDA0LAorCUFSOTE3MF9DTURfQklUT1IJPSAweDA1LAorCUFSOTE3MF9DTURfRUtFWQkJPSAweDI4LAorCUFSOTE3MF9DTURfREtFWQkJPSAweDI5LAorCUFSOTE3MF9DTURfRlJFUVVFTkNZCT0gMHgzMCwKKwlBUjkxNzBfQ01EX1JGX0lOSVQJPSAweDMxLAorCUFSOTE3MF9DTURfU1lOVEgJPSAweDMyLAorCUFSOTE3MF9DTURfRlJFUV9TVEFSVAk9IDB4MzMsCisJQVI5MTcwX0NNRF9FQ0hPCQk9IDB4ODAsCisJQVI5MTcwX0NNRF9UQUxMWQk9IDB4ODEsCisJQVI5MTcwX0NNRF9UQUxMWV9BUEQJPSAweDgyLAorCUFSOTE3MF9DTURfQ09ORklHCT0gMHg4MywKKwlBUjkxNzBfQ01EX1JFU0VUCT0gMHg5MCwKKwlBUjkxNzBfQ01EX0RLUkVTRVQJPSAweDkxLAorCUFSOTE3MF9DTURfREtUWF9TVEFUVVMJPSAweDkyLAorCUFSOTE3MF9DTURfRkRDCQk9IDB4QTAsCisJQVI5MTcwX0NNRF9XUkVFUFJPTQk9IDB4QjAsCisJQVI5MTcwX0NNRF9XRkxBU0gJPSAweEIwLAorCUFSOTE3MF9DTURfRkxBU0hfRVJBU0UJPSAweEIxLAorCUFSOTE3MF9DTURfRkxBU0hfUFJPRwk9IDB4QjIsCisJQVI5MTcwX0NNRF9GTEFTSF9DSEtTVU0JPSAweEIzLAorCUFSOTE3MF9DTURfRkxBU0hfUkVBRAk9IDB4QjQsCisJQVI5MTcwX0NNRF9GV19ETF9JTklUCT0gMHhCNSwKKwlBUjkxNzBfQ01EX01FTV9XUkVFUFJPTQk9IDB4QkIsCit9OworCisvKiBlbmRwb2ludHMgKi8KKyNkZWZpbmUgQVI5MTcwX0VQX1RYCQkJCTEKKyNkZWZpbmUgQVI5MTcwX0VQX1JYCQkJCTIKKyNkZWZpbmUgQVI5MTcwX0VQX0lSUQkJCQkzCisjZGVmaW5lIEFSOTE3MF9FUF9DTUQJCQkJNAorCisjZGVmaW5lIEFSOTE3MF9FRVBST01fU1RBUlQJCQkweDE2MDAKKworI2RlZmluZSBBUjkxNzBfR1BJT19SRUdfQkFTRQkJCTB4MWQwMTAwCisjZGVmaW5lIEFSOTE3MF9HUElPX1JFR19QT1JUX1RZUEUJCUFSOTE3MF9HUElPX1JFR19CQVNFCisjZGVmaW5lIEFSOTE3MF9HUElPX1JFR19EQVRBCQkJKEFSOTE3MF9HUElPX1JFR19CQVNFICsgNCkKKyNkZWZpbmUgQVI5MTcwX05VTV9MRURTCQkJCTIKKworCisjZGVmaW5lIEFSOTE3MF9VU0JfUkVHX0JBU0UJCQkweDFlMTAwMAorI2RlZmluZSBBUjkxNzBfVVNCX1JFR19ETUFfQ1RMCQkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDEwOCkKKyNkZWZpbmUJCUFSOTE3MF9ETUFfQ1RMX0VOQUJMRV9UT19ERVZJQ0UJCTB4MQorI2RlZmluZQkJQVI5MTcwX0RNQV9DVExfRU5BQkxFX0ZST01fREVWSUNFCTB4MgorI2RlZmluZQkJQVI5MTcwX0RNQV9DVExfSElHSF9TUEVFRAkJMHg0CisjZGVmaW5lCQlBUjkxNzBfRE1BX0NUTF9QQUNLRVRfTU9ERQkJMHg4CisKKyNkZWZpbmUgQVI5MTcwX1VTQl9SRUdfTUFYX0FHR19VUExPQUQJCShBUjkxNzBfVVNCX1JFR19CQVNFICsgMHgxMTApCisjZGVmaW5lIEFSOTE3MF9VU0JfUkVHX1VQTE9BRF9USU1FX0NUTAkJKEFSOTE3MF9VU0JfUkVHX0JBU0UgKyAweDExNCkKKworCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkFTRQkJCTB4MWMzMDAwCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFNGX0wJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NTE0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UU0ZfSAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MTgpCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQVRJTV9XSU5ET1cJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MUMpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9QRVJJT0QJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg1MjApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1BSRVRCVFQJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NTI0KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX01BQ19BRERSX0wJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MTApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX01BQ19BRERSX0gJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MTQpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JTU0lEX0wJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjE4KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CU1NJRF9ICQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYxYykKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9MCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjI0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9ICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjI4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX1RJTUVPVVQJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MkMpCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkFTSUNfUkFURQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYzMCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfTUFOREFUT1JZX1JBVEUJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2MzQpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JUU19DVFNfUkFURQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDYzOCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkFDS09GRl9QUk9URUNUCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjNjKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9USFJFU0hPTEQJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2NDApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX1BFX0RFTEFZCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjRDKQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0RZTkFNSUNfU0lGU19BQ0sJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2NTgpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1NOSUZGRVIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Njc0KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfU05JRkZFUl9FTkFCTEVfUFJPTUlTQwlCSVQoMCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX1NOSUZGRVJfREVGQVVMVFMJCTB4MDIwMDAwMDAKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfRU5DUllQVElPTgkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDY3OCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT05fUlhfU09GVFdBUkUJQklUKDMpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OX0RFRkFVTFRTCTB4NzAKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19NSVNDXzY4MAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2ODApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1RYX1VOREVSUlVOCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Njg4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0ZSQU1FVFlQRV9GSUxURVIJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2OGMpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQVNTT0NfUkVRCQlCSVQoMCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9BU1NPQ19SRVNQCQlCSVQoMSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9SRUFTU09DX1JFUQkJQklUKDIpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfUkVBU1NPQ19SRVNQCQlCSVQoMykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9QUkJfUkVRCQlCSVQoNCkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9QUkJfUkVTUAkJQklUKDUpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQklUNgkJCUJJVCg2KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JJVDcJCQlCSVQoNykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CRUFDT04JCUJJVCg4KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0FUSU0JCQlCSVQoOSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9ERUFTU09DCQlCSVQoMTApCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQVVUSAkJCUJJVCgxMSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9ERUFVVEgJCUJJVCgxMikKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CSVQxMwkJQklUKDEzKQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0JJVDE0CQlCSVQoMTQpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQklUMTUJCUJJVCgxNSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9CQVIJCQlCSVQoMjQpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQklUMjUJCUJJVCgyNSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9QU1BPTEwJCUJJVCgyNikKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9SVFMJCQlCSVQoMjcpCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQ1RTCQkJQklUKDI4KQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0FDSwkJCUJJVCgyOSkKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX0ZURl9DRkUJCQlCSVQoMzApCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfQ0ZFX0FDSwkJQklUKDMxKQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTCQkweDA1MDBmZmZmCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19GVEZfTU9OSVRPUgkJMHhmZDAwZmZmZgorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX1RPVEFMCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZBMCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUlhfQ1JDMzIJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkE0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9DUkMxNgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2QTgpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JYX0VSUl9ERUNSWVBUSU9OX1VOSQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkFDKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9PVkVSUlVOCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkIwKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19SWF9FUlJfREVDUllQVElPTl9NVUwJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZCQykKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFhfUkVUUlkJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NkNDKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19UWF9UT1RBTAkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg2RjQpCisKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19BQ0tfRVhURU5TSU9OCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NjkwKQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19FSUZTX0FORF9TSUZTCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4Njk4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1NMT1RfVElNRQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDZGMCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19QT1dFUk1BTkFHRU1FTlQJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHg3MDApCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9JQlNTCQkweGUwCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9BUAkJMHhhMQorI2RlZmluZQkJQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfU1RBCQkweDIKKyNkZWZpbmUJCUFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0FQX1dEUwkJMHgzCisjZGVmaW5lCQlBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9ERUZBVUxUUwkoMHhmIDw8IDI0KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JPTExfQ0FMTF9UQkxfTAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweDcwNCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfUk9MTF9DQUxMX1RCTF9ICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4NzA4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMF9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDQpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMl9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMDgpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDM19DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMEMpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDNF9DVwkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhCMTApCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfQUlGUwkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEIxNCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9BSUZTCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjE4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1JFVFJZX01BWAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEIyOCkKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19GQ1NfU0VMRUNUCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QkIwKQorI2RlZmluZQkJQVI5MTcwX01BQ19GQ1NfU1dGQ1MJCTB4MQorI2RlZmluZQkJQVI5MTcwX01BQ19GQ1NfRklGT19QUk9UCTB4NAorCisKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfVFhPUF9OT1RfRU5PVUdIX0lORAkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjMwKQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfVFhPUAkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEI0NCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9UWE9QCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QjQ4KQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0FDS19UQUJMRQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEMwMCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQU1QRFVfUlhfVEhSRVNICQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4QzUwKQorCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX1RYUlhfTVBJCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEQ3QykKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVFhSWF9NUElfVFhfTVBJX01BU0sJMHgwMDAwMDAwZgorI2RlZmluZQkJQVI5MTcwX01BQ19UWFJYX01QSV9UWF9UT19NQVNLCTB4MDAwMGZmZjAKKyNkZWZpbmUJCUFSOTE3MF9NQUNfVFhSWF9NUElfUlhfTVBJX01BU0sJMHgwMDBmMDAwMAorI2RlZmluZQkJQVI5MTcwX01BQ19UWFJYX01QSV9SWF9UT19NQVNLCTB4ZmZmMDAwMDAKKworI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fQUREUgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEODQpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9MRU5HVEgJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEODgpCisjZGVmaW5lIEFSOTE3MF9NQUNfUkVHX0JDTl9QTENQCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweEQ5MCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX0NUUkwJCQkoQVI5MTcwX01BQ19SRUdfQkFTRSArIDB4RDk0KQorI2RlZmluZSBBUjkxNzBfTUFDX1JFR19CQ05fSFQxCQkJKEFSOTE3MF9NQUNfUkVHX0JBU0UgKyAweERBMCkKKyNkZWZpbmUgQVI5MTcwX01BQ19SRUdfQkNOX0hUMgkJCShBUjkxNzBfTUFDX1JFR19CQVNFICsgMHhEQTQpCisKKworI2RlZmluZSBBUjkxNzBfUFdSX1JFR19CQVNFCQkJMHgxRDQwMDAKKworI2RlZmluZSBBUjkxNzBfUFdSX1JFR19DTE9DS19TRUwJCShBUjkxNzBfUFdSX1JFR19CQVNFICsgMHgwMDgpCisjZGVmaW5lCQlBUjkxNzBfUFdSX0NMS19BSEJfNDBNSFoJMAorI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfQUhCXzIwXzIyTUhaCTEKKyNkZWZpbmUJCUFSOTE3MF9QV1JfQ0xLX0FIQl80MF80NE1IWgkyCisjZGVmaW5lCQlBUjkxNzBfUFdSX0NMS19BSEJfODBfODhNSFoJMworI2RlZmluZQkJQVI5MTcwX1BXUl9DTEtfREFDXzE2MF9JTlZfRExZCTB4NzAKKworCisvKiBwdXQgYmVhY29uIGhlcmUgaW4gbWVtb3J5ICovCisjZGVmaW5lIEFSOTE3MF9CRUFDT05fQlVGRkVSX0FERFJFU1MJCTB4MTE3OTAwCisKKworc3RydWN0IGFyOTE3MF90eF9jb250cm9sIHsKKwlfX2xlMTYgbGVuZ3RoOworCV9fbGUxNiBtYWNfY29udHJvbDsKKwlfX2xlMzIgcGh5X2NvbnRyb2w7CisJdTggZnJhbWVfZGF0YVswXTsKK30gX19wYWNrZWQ7CisKKy8qIHRoZXNlIGFyZSBlaXRoZXItb3IgKi8KKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19QUk9UX1JUUwkJCTB4MDAwMQorI2RlZmluZSBBUjkxNzBfVFhfTUFDX1BST1RfQ1RTCQkJMHgwMDAyCisKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19OT19BQ0sJCQkweDAwMDQKKy8qIGlmIHVuc2V0LCBNQUMgd2lsbCBvbmx5IGRvIFNJRlMgc3BhY2UgYmVmb3JlIGZyYW1lICovCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfQkFDS09GRgkJCTB4MDAwOAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0JVUlNUCQkJMHgwMDEwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfQUdHUgkJCTB4MDAyMAorCisvKiBlbmNyeXB0aW9uIGlzIGEgdHdvLWJpdCBmaWVsZCAqLworI2RlZmluZSBBUjkxNzBfVFhfTUFDX0VOQ1JfTk9ORQkJCTB4MDAwMAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0VOQ1JfUkM0CQkJMHgwMDQwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfRU5DUl9DRU5DCQkJMHgwMDgwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfRU5DUl9BRVMJCQkweDAwYzAKKworI2RlZmluZSBBUjkxNzBfVFhfTUFDX01NSUMJCQkweDAxMDAKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19IV19EVVJBVElPTgkJMHgwMjAwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfUU9TX1NISUZUCQkJMTAKKyNkZWZpbmUgQVI5MTcwX1RYX01BQ19RT1NfTUFTSwkJCSgzIDw8IEFSOTE3MF9UWF9NQUNfUU9TX1NISUZUKQorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0FHR1JfUU9TX0JJVDEJCTB4MDQwMAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0FHR1JfUU9TX0JJVDIJCTB4MDgwMAorI2RlZmluZSBBUjkxNzBfVFhfTUFDX0RJU0FCTEVfVFhPUAkJMHgxMDAwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfVFhPUF9SSUZTCQkJMHgyMDAwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfSU1NX0FNUERVCQkJMHg0MDAwCisjZGVmaW5lIEFSOTE3MF9UWF9NQUNfUkFURV9QUk9CRQkJMHg4MDAwCisKKy8qIGVpdGhlci1vciAqLworI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9DQ0sJCQkweDAwMDAwMDAwCisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfTU9EX09GRE0JCQkweDAwMDAwMDAxCisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfTU9EX0hUCQkJMHgwMDAwMDAwMgorCisvKiBkZXBlbmRzIG9uIG1vZHVsYXRpb24gKi8KKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9TSE9SVF9QUkVBTUJMRQkJMHgwMDAwMDAwNAorI2RlZmluZSBBUjkxNzBfVFhfUEhZX0dSRUVORklFTEQJCTB4MDAwMDAwMDQKKworI2RlZmluZSBBUjkxNzBfVFhfUEhZX0JXX1NISUZUCQkJMworI2RlZmluZSBBUjkxNzBfVFhfUEhZX0JXX01BU0sJCQkoMyA8PCBBUjkxNzBfVFhfUEhZX0JXX1NISUZUKQorI2RlZmluZSBBUjkxNzBfVFhfUEhZX0JXXzIwTUhaCQkJMAorI2RlZmluZSBBUjkxNzBfVFhfUEhZX0JXXzQwTUhaCQkJMgorI2RlZmluZSBBUjkxNzBfVFhfUEhZX0JXXzQwTUhaX0RVUAkJMworCisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfVFhfSEVBVllfQ0xJUF9TSElGVAk2CisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfVFhfSEVBVllfQ0xJUF9NQVNLCSg3IDw8IEFSOTE3MF9UWF9QSFlfVFhfSEVBVllfQ0xJUF9TSElGVCkKKworI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYX1BXUl9TSElGVAkJOQorI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYX1BXUl9NQVNLCQkoMHgzZiA8PCBBUjkxNzBfVFhfUEhZX1RYX1BXUl9TSElGVCkKKworLyogbm90IHBhcnQgb2YgdGhlIGh3LXNwZWMgKi8KKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQJCQkyNQorI2RlZmluZSBBUjkxNzBfVFhfUEhZX1FPU19NQVNLCQkJKDMgPDwgQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQpCisKKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9UWENIQUlOX1NISUZUCQkxNQorI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fTUFTSwkJKDcgPDwgQVI5MTcwX1RYX1BIWV9UWENIQUlOX1NISUZUKQorI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMQkJCTEKKy8qIHVzZSBmb3IgY2NrLCBvZmRtIDYvOS8xMi8xOC8yNCBhbmQgSFQgaWYgY2FwYWJsZSAqLworI2RlZmluZSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMgkJCTUKKworI2RlZmluZSBBUjkxNzBfVFhfUEhZX01DU19TSElGVAkJCTE4CisjZGVmaW5lIEFSOTE3MF9UWF9QSFlfTUNTX01BU0sJCQkoMHg3ZiA8PCBBUjkxNzBfVFhfUEhZX01DU19TSElGVCkKKworI2RlZmluZSBBUjkxNzBfVFhfUEhZX1NIT1JUX0dJCQkJMHg4MDAwMDAwMAorCitzdHJ1Y3QgYXI5MTcwX3J4X2hlYWQgeworCXU4IHBsY3BbMTJdOworfTsKKworc3RydWN0IGFyOTE3MF9yeF90YWlsIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCByc3NpX2FudDAsIHJzc2lfYW50MSwgcnNzaV9hbnQyLAorCQkJICAgcnNzaV9hbnQweCwgcnNzaV9hbnQxeCwgcnNzaV9hbnQyeCwKKwkJCSAgIHJzc2lfY29tYmluZWQ7CisJCX07CisJCXU4IHJzc2lbN107CisJfTsKKworCXU4IGV2bV9zdHJlYW0wWzZdLCBldm1fc3RyZWFtMVs2XTsKKwl1OCBwaHlfZXJyOworCXU4IFNBaWR4LCBEQWlkeDsKKwl1OCBlcnJvcjsKKwl1OCBzdGF0dXM7Cit9OworCisjZGVmaW5lIEFSOTE3MF9FTkNfQUxHX05PTkUJCQkweDAKKyNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfV0VQNjQJCQkweDEKKyNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfVEtJUAkJCTB4MgorI2RlZmluZSBBUjkxNzBfRU5DX0FMR19BRVNDQ01QCQkJMHg0CisjZGVmaW5lIEFSOTE3MF9FTkNfQUxHX1dFUDEyOAkJCTB4NQorI2RlZmluZSBBUjkxNzBfRU5DX0FMR19XRVAyNTYJCQkweDYKKyNkZWZpbmUgQVI5MTcwX0VOQ19BTEdfQ0VOQwkJCTB4NworCisjZGVmaW5lIEFSOTE3MF9SWF9FTkNfU09GVFdBUkUJCQkweDgKKworc3RhdGljIGlubGluZSB1OCBhcjkxNzBfZ2V0X2RlY3J5cHRfdHlwZShzdHJ1Y3QgYXI5MTcwX3J4X3RhaWwgKnQpCit7CisJcmV0dXJuICh0LT5TQWlkeCAmIDB4YzApID4+IDQgfAorCSAgICAgICAodC0+REFpZHggJiAweGMwKSA+PiA2OworfQorCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9NQVNLCTB4MDMKKyNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX0NDSwkJMHgwMAorI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fT0ZETQkweDAxCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9IVAkJMHgwMgorI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fRFVQT0ZETQkweDAzCisKKy8qIGRlcGVuZHMgb24gbW9kdWxhdGlvbiAqLworI2RlZmluZSBBUjkxNzBfUlhfU1RBVFVTX1NIT1JUX1BSRUFNQkxFCQkweDA4CisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfR1JFRU5GSUVMRAkJMHgwOAorCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9NQVNLCQkweDMwCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9TSU5HTEUJCTB4MDAKKyNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NUERVX0ZJUlNUCQkweDEwCisjZGVmaW5lIEFSOTE3MF9SWF9TVEFUVVNfTVBEVV9NSURETEUJCTB4MjAKKyNkZWZpbmUgQVI5MTcwX1JYX1NUQVRVU19NUERVX0xBU1QJCTB4MzAKKworCisjZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9SWFRPCQkJMHgwMQorI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfT1ZFUlJVTgkJCTB4MDIKKyNkZWZpbmUgQVI5MTcwX1JYX0VSUk9SX0RFQ1JZUFQJCQkweDA0CisjZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9GQ1MJCQkweDA4CisjZGVmaW5lIEFSOTE3MF9SWF9FUlJPUl9XUk9OR19SQQkJMHgxMAorI2RlZmluZSBBUjkxNzBfUlhfRVJST1JfUExDUAkJCTB4MjAKKyNkZWZpbmUgQVI5MTcwX1JYX0VSUk9SX01NSUMJCQkweDQwCisKK3N0cnVjdCBhcjkxNzBfY21kX3R4X3N0YXR1cyB7CisJX19sZTE2IHVua247CisJdTggZHN0W0VUSF9BTEVOXTsKKwlfX2xlMzIgcmF0ZTsKKwlfX2xlMTYgc3RhdHVzOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBBUjkxNzBfVFhfU1RBVFVTX0NPTVBMRVRFCQkweDAwCisjZGVmaW5lIEFSOTE3MF9UWF9TVEFUVVNfUkVUUlkJCQkweDAxCisjZGVmaW5lIEFSOTE3MF9UWF9TVEFUVVNfRkFJTEVECQkJMHgwMgorCitzdHJ1Y3QgYXI5MTcwX2NtZF9iYV9mYWlsZWRfY291bnQgeworCV9fbGUxNiBmYWlsZWQ7CisJX19sZTE2IHJhdGU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI5MTcwX2NtZF9yZXNwb25zZSB7CisJdTggZmxhZzsKKwl1OCB0eXBlOworCisJdW5pb24geworCQlzdHJ1Y3QgYXI5MTcwX2NtZF90eF9zdGF0dXMJCXR4X3N0YXR1czsKKwkJc3RydWN0IGFyOTE3MF9jbWRfYmFfZmFpbGVkX2NvdW50CWJhX2ZhaWxfY250OworCQl1OCBkYXRhWzBdOworCX07Cit9IF9fcGFja2VkOworCisvKiBRb1MgKi8KKworLyogbWFjODAyMTEgcXVldWUgdG8gSFcvRlcgbWFwICovCitzdGF0aWMgY29uc3QgdTggYXI5MTcwX3Fvc19od21hcFs0XSA9IHsgMywgMiwgMCwgMSB9OworCisvKiBIVy9GVyBxdWV1ZSB0byBtYWM4MDIxMSBtYXAgKi8KK3N0YXRpYyBjb25zdCB1OCBhcjkxNzBfcW9zX21hYzgwMjExbWFwWzRdID0geyAyLCAzLCAxLCAwIH07CisKK2VudW0gYXI5MTcwX3R4cSB7CisJQVI5MTcwX1RYUV9CRSwKKwlBUjkxNzBfVFhRX0JLLAorCUFSOTE3MF9UWFFfVkksCisJQVI5MTcwX1RYUV9WTywKKworCV9fQVI5MTcwX05VTV9UWFEsCit9OworCisjZW5kaWYgLyogX19BUjkxNzBfSFdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2xlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL2xlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0MWNlYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvbGVkLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKKyAqCisgKiBMRUQgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImFyOTE3MC5oIgorI2luY2x1ZGUgImNtZC5oIgorCitpbnQgYXI5MTcwX3NldF9sZWRzX3N0YXRlKHN0cnVjdCBhcjkxNzAgKmFyLCB1MzIgbGVkX3N0YXRlKQoreworCXJldHVybiBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfR1BJT19SRUdfREFUQSwgbGVkX3N0YXRlKTsKK30KKworaW50IGFyOTE3MF9pbml0X2xlZHMoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJaW50IGVycjsKKworCS8qIGRpc2FibGUgTEVEcyAqLworCS8qIEdQSU8gWzAvMSBtb2RlOiBvdXRwdXQsIDIvMzogaW5wdXRdICovCisJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgQVI5MTcwX0dQSU9fUkVHX1BPUlRfVFlQRSwgMyk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBHUElPIDAvMSB2YWx1ZTogb2ZmICovCisJZXJyID0gYXI5MTcwX3NldF9sZWRzX3N0YXRlKGFyLCAwKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKK3N0YXRpYyB2b2lkIGFyOTE3MF91cGRhdGVfbGVkcyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFyOTE3MCwgbGVkX3dvcmsud29yayk7CisJaW50IGksIHRtcCwgYmxpbmtfZGVsYXkgPSAxMDAwOworCXUzMiBsZWRfdmFsID0gMDsKKwlib29sIHJlcnVuID0gZmFsc2U7CisKKwlpZiAodW5saWtlbHkoIUlTX0FDQ0VQVElOR19DTUQoYXIpKSkKKwkJcmV0dXJuIDsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IEFSOTE3MF9OVU1fTEVEUzsgaSsrKQorCQlpZiAoYXItPmxlZHNbaV0udG9nZ2xlZCkgeworCQkJbGVkX3ZhbCB8PSAxIDw8IGk7CisKKwkJCXRtcCA9IDcwICsgMjAwIC8gKGFyLT5sZWRzW2ldLnRvZ2dsZWQpOworCQkJaWYgKHRtcCA8IGJsaW5rX2RlbGF5KQorCQkJCWJsaW5rX2RlbGF5ID0gdG1wOworCisJCQlpZiAoYXItPmxlZHNbaV0udG9nZ2xlZCA+IDEpCisJCQkJYXItPmxlZHNbaV0udG9nZ2xlZCA9IDA7CisKKwkJCXJlcnVuID0gdHJ1ZTsKKwkJfQorCisJYXI5MTcwX3NldF9sZWRzX3N0YXRlKGFyLCBsZWRfdmFsKTsKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisKKwlpZiAocmVydW4pCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHctPndvcmtxdWV1ZSwgJmFyLT5sZWRfd29yaywKKwkJCQkgICBtc2Vjc190b19qaWZmaWVzKGJsaW5rX2RlbGF5KSk7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkLAorCQkJCSAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgYXI5MTcwX2xlZCAqYXJsID0gY29udGFpbmVyX29mKGxlZCwgc3RydWN0IGFyOTE3MF9sZWQsIGwpOworCXN0cnVjdCBhcjkxNzAgKmFyID0gYXJsLT5hcjsKKworCWFybC0+dG9nZ2xlZCsrOworCisJaWYgKGxpa2VseShJU19BQ0NFUFRJTkdfQ01EKGFyKSAmJiBicmlnaHRuZXNzKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKGFyLT5ody0+d29ya3F1ZXVlLCAmYXItPmxlZF93b3JrLCBIWi8xMCk7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgYXI5MTcwICphciwgaW50IGksIGNoYXIgKm5hbWUsCisJCQkgICAgICAgY2hhciAqdHJpZ2dlcikKK3sKKwlpbnQgZXJyOworCisJc25wcmludGYoYXItPmxlZHNbaV0ubmFtZSwgc2l6ZW9mKGFyLT5sZWRzW2ldLm5hbWUpLAorCQkgImFyOTE3MC0lczo6JXMiLCB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBuYW1lKTsKKworCWFyLT5sZWRzW2ldLmFyID0gYXI7CisJYXItPmxlZHNbaV0ubC5uYW1lID0gYXItPmxlZHNbaV0ubmFtZTsKKwlhci0+bGVkc1tpXS5sLmJyaWdodG5lc3Nfc2V0ID0gYXI5MTcwX2xlZF9icmlnaHRuZXNzX3NldDsKKwlhci0+bGVkc1tpXS5sLmJyaWdodG5lc3MgPSAwOworCWFyLT5sZWRzW2ldLmwuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKKworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYoYXItPmh3LT53aXBoeSksCisJCQkJICAgICZhci0+bGVkc1tpXS5sKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgJXMgTEVEICglZCkuXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgYXItPmxlZHNbaV0ubmFtZSwgZXJyKTsKKwllbHNlCisJCWFyLT5sZWRzW2ldLnJlZ2lzdGVyZWQgPSB0cnVlOworCisJcmV0dXJuIGVycjsKK30KKwordm9pZCBhcjkxNzBfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWludCBpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhci0+bGVkX3dvcmspOworCisJZm9yIChpID0gMDsgaSA8IEFSOTE3MF9OVU1fTEVEUzsgaSsrKQorCQlpZiAoYXItPmxlZHNbaV0ucmVnaXN0ZXJlZCkgeworCQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFyLT5sZWRzW2ldLmwpOworCQkJYXItPmxlZHNbaV0ucmVnaXN0ZXJlZCA9IGZhbHNlOworCQl9Cit9CisKK2ludCBhcjkxNzBfcmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlpbnQgZXJyOworCisJSU5JVF9ERUxBWUVEX1dPUksoJmFyLT5sZWRfd29yaywgYXI5MTcwX3VwZGF0ZV9sZWRzKTsKKworCWVyciA9IGFyOTE3MF9yZWdpc3Rlcl9sZWQoYXIsIDAsICJ0eCIsCisJCQkJICBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKGFyLT5odykpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKworCWVyciA9IGFyOTE3MF9yZWdpc3Rlcl9sZWQoYXIsIDEsICJhc3NvYyIsCisJCQkJIGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoYXItPmh3KSk7CisJaWYgKGVycikKKwkJZ290byBmYWlsOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJYXI5MTcwX3VucmVnaXN0ZXJfbGVkcyhhcik7CisJcmV0dXJuIGVycjsKK30KKworI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL21hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZmEzMDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvbWFjLmMKQEAgLTAsMCArMSw0NTIgQEAKKy8qCisgKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKKyAqCisgKiBNQUMgcHJvZ3JhbW1pbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCwgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJhcjkxNzAuaCIKKyNpbmNsdWRlICJjbWQuaCIKKworaW50IGFyOTE3MF9zZXRfcW9zKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMwX0NXLCBhci0+ZWRjZlswXS5jd19taW4gfAorCQkJKGFyLT5lZGNmWzBdLmN3X21heCA8PCAxNikpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzFfQ1csIGFyLT5lZGNmWzFdLmN3X21pbiB8CisJCQkoYXItPmVkY2ZbMV0uY3dfbWF4IDw8IDE2KSk7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDMl9DVywgYXItPmVkY2ZbMl0uY3dfbWluIHwKKwkJCShhci0+ZWRjZlsyXS5jd19tYXggPDwgMTYpKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMzX0NXLCBhci0+ZWRjZlszXS5jd19taW4gfAorCQkJKGFyLT5lZGNmWzNdLmN3X21heCA8PCAxNikpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzRfQ1csIGFyLT5lZGNmWzRdLmN3X21pbiB8CisJCQkoYXItPmVkY2ZbNF0uY3dfbWF4IDw8IDE2KSk7CisKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMxX0FDMF9BSUZTLAorCQkJKChhci0+ZWRjZlswXS5haWZzICogOSArIDEwKSkgfAorCQkJKChhci0+ZWRjZlsxXS5haWZzICogOSArIDEwKSA8PCAxMikgfAorCQkJKChhci0+ZWRjZlsyXS5haWZzICogOSArIDEwKSA8PCAyNCkpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19BQzNfQUMyX0FJRlMsCisJCQkoKGFyLT5lZGNmWzJdLmFpZnMgKiA5ICsgMTApID4+IDgpIHwKKwkJCSgoYXItPmVkY2ZbM10uYWlmcyAqIDkgKyAxMCkgPDwgNCkgfAorCQkJKChhci0+ZWRjZls0XS5haWZzICogOSArIDEwKSA8PCAxNikpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfVFhPUCwKKwkJCWFyLT5lZGNmWzBdLnR4b3AgfCBhci0+ZWRjZlsxXS50eG9wIDw8IDE2KTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9UWE9QLAorCQkJYXItPmVkY2ZbMV0udHhvcCB8IGFyLT5lZGNmWzNdLnR4b3AgPDwgMTYpOworCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworaW50IGFyOTE3MF9pbml0X21hYyhzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDS19FWFRFTlNJT04sIDB4NDApOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JFVFJZX01BWCwgMCk7CisKKwkvKiBlbmFibGUgTU1JQyAqLworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19TTklGRkVSLAorCQkJQVI5MTcwX01BQ19SRUdfU05JRkZFUl9ERUZBVUxUUyk7CisKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfUlhfVEhSRVNIT0xELCAweGMxZjgwKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19SWF9QRV9ERUxBWSwgMHg3MCk7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0VJRlNfQU5EX1NJRlMsIDB4YTE0NDAwMCk7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1NMT1RfVElNRSwgOSA8PCAxMCk7CisKKwkvKiBDRi1FTkQgbW9kZSAqLworCWFyOTE3MF9yZWd3cml0ZSgweDFjM2IyYywgMHgxOTAwMDAwMCk7CisKKwkvKiBOQVYgcHJvdGVjdHMgQUNLIG9ubHkgKGluIFRYT1ApICovCisJYXI5MTcwX3JlZ3dyaXRlKDB4MWMzYjM4LCAweDIwMSk7CisKKwkvKiBTZXQgQmVhY29uIFBIWSBDVFJMJ3MgVFBDIHRvIDB4NywgVEExPTEgKi8KKwkvKiBPVFVTIHNldCBBTSB0byAweDEgKi8KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX0hUMSwgMHg4MDAwMTcwKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQUNLT0ZGX1BST1RFQ1QsIDB4MTA1KTsKKworCS8qIEFHRyB0ZXN0IGNvZGUqLworCS8qIEFnZ3JlZ2F0aW9uIE1BWCBudW1iZXIgYW5kIHRpbWVvdXQgKi8KKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzNiOWMsIDB4MTAwMDBhKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19GUkFNRVRZUEVfRklMVEVSLAorCQkJQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTKTsKKworCS8qIEVuYWJsZSBkZWFnZ3JlZ2F0b3IsIHJlc3BvbnNlIGluIHNuaWZmZXIgbW9kZSAqLworCWFyOTE3MF9yZWd3cml0ZSgweDFjM2M0MCwgMHgxIHwgMTw8MzApOworCisJLyogcmF0ZSBzZXRzICovCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JBU0lDX1JBVEUsIDB4MTUwZik7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX01BTkRBVE9SWV9SQVRFLCAweDE1MGYpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19SVFNfQ1RTX1JBVEUsIDB4MTBiMDFiYik7CisKKwkvKiBNSU1PIHJlc3BvbnNlIGNvbnRyb2wgKi8KKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzM2OTQsIDB4NDAwM0MxRSk7LyogYml0IDI2fjI4ICBvdHVzLUFNICovCisKKwkvKiBzd2l0Y2ggTUFDIHRvIE9UVVMgaW50ZXJmYWNlICovCisJYXI5MTcwX3JlZ3dyaXRlKDB4MWMzNjAwLCAweDMpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FNUERVX1JYX1RIUkVTSCwgMHhmZmZmKTsKKworCS8qIHNldCBQSFkgcmVnaXN0ZXIgcmVhZCB0aW1lb3V0ICg/PykgKi8KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfTUlTQ182ODAsIDB4ZjAwMDA4KTsKKworCS8qIERpc2FibGUgUnggVGltZU91dCwgd29ya2Fyb3VuZCBmb3IgQkIuICovCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1JYX1RJTUVPVVQsIDB4MCk7CisKKwkvKiBTZXQgQ1BVIGNsb2NrIGZyZXF1ZW5jeSB0byA4OC84ME1IeiAqLworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfUFdSX1JFR19DTE9DS19TRUwsCisJCQlBUjkxNzBfUFdSX0NMS19BSEJfODBfODhNSFogfAorCQkJQVI5MTcwX1BXUl9DTEtfREFDXzE2MF9JTlZfRExZKTsKKworCS8qIFNldCBXTEFOIERNQSBpbnRlcnJ1cHQgbW9kZTogZ2VuZXJhdGUgaW50IHBlciBwYWNrZXQgKi8KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfVFhSWF9NUEksIDB4MTEwMDExKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19GQ1NfU0VMRUNULAorCQkJQVI5MTcwX01BQ19GQ1NfRklGT19QUk9UKTsKKworCS8qIERpc2FibGVzIHRoZSBDRl9FTkQgZnJhbWUsIHVuZG9jdW1lbnRlZCByZWdpc3RlciAqLworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19UWE9QX05PVF9FTk9VR0hfSU5ELAorCQkJMHgxNDFFMEY0OCk7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisKKwlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworfQorCitzdGF0aWMgaW50IGFyOTE3MF9zZXRfbWFjX3JlZyhzdHJ1Y3QgYXI5MTcwICphciwgY29uc3QgdTMyIHJlZywgY29uc3QgdTggKm1hYykKK3sKKwlzdGF0aWMgY29uc3QgdTggemVyb1tFVEhfQUxFTl0gPSB7IDAgfTsKKworCWlmICghbWFjKQorCQltYWMgPSB6ZXJvOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWFyOTE3MF9yZWd3cml0ZShyZWcsCisJCQkobWFjWzNdIDw8IDI0KSB8IChtYWNbMl0gPDwgMTYpIHwKKwkJCShtYWNbMV0gPDwgOCkgfCBtYWNbMF0pOworCisJYXI5MTcwX3JlZ3dyaXRlKHJlZyArIDQsIChtYWNbNV0gPDwgOCkgfCBtYWNbNF0pOworCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworaW50IGFyOTE3MF91cGRhdGVfbXVsdGljYXN0KHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWludCBlcnI7CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19HUk9VUF9IQVNIX1RCTF9ILAorCQlhci0+d2FudF9tY19oYXNoID4+IDMyKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfR1JPVVBfSEFTSF9UQkxfTCwKKwkJYXItPndhbnRfbWNfaGFzaCk7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWFyLT5jdXJfbWNfaGFzaCA9IGFyLT53YW50X21jX2hhc2g7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWludCBlcnI7CisKKwllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19GUkFNRVRZUEVfRklMVEVSLAorCQkJICAgICAgIGFyLT53YW50X2ZpbHRlcik7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJYXItPmN1cl9maWx0ZXIgPSBhci0+d2FudF9maWx0ZXI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfc2V0X3Byb21pc2NvdW91cyhzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwl1MzIgZW5jcl9tb2RlLCBzbmlmZmVyOworCWludCBlcnI7CisKKwllcnIgPSBhcjkxNzBfcmVhZF9yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX1NOSUZGRVIsICZzbmlmZmVyKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gYXI5MTcwX3JlYWRfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OLCAmZW5jcl9tb2RlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGFyLT5zbmlmZmVyX2VuYWJsZWQpIHsKKwkJc25pZmZlciB8PSBBUjkxNzBfTUFDX1JFR19TTklGRkVSX0VOQUJMRV9QUk9NSVNDOworCisJCS8qCisJCSAqIFJ4IGRlY3J5cHRpb24gd29ya3MgaW4gcGxhY2UuCisJCSAqCisJCSAqIElmIHdlIGRvbid0IGRpc2FibGUgaXQsIHRoZSBoYXJkd2FyZSB3aWxsIHJlbmRlciBhbGwKKwkJICogZW5jcnlwdGVkIGZyYW1lcyB3aGljaCBhcmUgZW5jcnlwdGVkIHdpdGggYW4gdW5rbm93bgorCQkgKiBrZXkgdXNlbGVzcy4KKwkJICovCisKKwkJZW5jcl9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT05fUlhfU09GVFdBUkU7CisJCWFyLT5zbmlmZmVyX2VuYWJsZWQgPSB0cnVlOworCX0gZWxzZSB7CisJCXNuaWZmZXIgJj0gfkFSOTE3MF9NQUNfUkVHX1NOSUZGRVJfRU5BQkxFX1BST01JU0M7CisKKwkJaWYgKGFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uKQorCQkJZW5jcl9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX0VOQ1JZUFRJT05fUlhfU09GVFdBUkU7CisJCWVsc2UKKwkJCWVuY3JfbW9kZSAmPSB+QVI5MTcwX01BQ19SRUdfRU5DUllQVElPTl9SWF9TT0ZUV0FSRTsKKwl9CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19FTkNSWVBUSU9OLCBlbmNyX21vZGUpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19TTklGRkVSLCBzbmlmZmVyKTsKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisKKwlyZXR1cm4gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworfQorCitpbnQgYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwl1MzIgcG1fbW9kZSA9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0RFRkFVTFRTOworCXU4ICptYWNfYWRkciwgKmJzc2lkOworCWludCBlcnI7CisKKwlpZiAoYXItPnZpZikgeworCQltYWNfYWRkciA9IGFyLT5tYWNfYWRkcjsKKwkJYnNzaWQgPSBhci0+YnNzaWQ7CisKKwkJc3dpdGNoIChhci0+dmlmLT50eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCXBtX21vZGUgfD0gQVI5MTcwX01BQ19SRUdfUE9XRVJNR1RfSUJTUzsKKwkJCWJyZWFrOworLyoJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCQlwbV9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0FQOworCQkJYnJlYWs7Ki8KKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9XRFM6CisJCQlwbV9tb2RlIHw9IEFSOTE3MF9NQUNfUkVHX1BPV0VSTUdUX0FQX1dEUzsKKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CisJCQlhci0+c25pZmZlcl9lbmFibGVkID0gdHJ1ZTsKKwkJCWFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcG1fbW9kZSB8PSBBUjkxNzBfTUFDX1JFR19QT1dFUk1HVF9TVEE7CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCW1hY19hZGRyID0gTlVMTDsKKwkJYnNzaWQgPSBOVUxMOworCX0KKworCWVyciA9IGFyOTE3MF9zZXRfbWFjX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfTUFDX0FERFJfTCwgbWFjX2FkZHIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBhcjkxNzBfc2V0X21hY19yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX0JTU0lEX0wsIGJzc2lkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gYXI5MTcwX3NldF9wcm9taXNjb3VvdXMoYXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1BPV0VSTUFOQUdFTUVOVCwgcG1fbW9kZSk7CisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworaW50IGFyOTE3MF9zZXRfaHdyZXRyeV9saW1pdChzdHJ1Y3QgYXI5MTcwICphciwgdW5zaWduZWQgaW50IG1heF9yZXRyeSkKK3sKKwl1MzIgdG1wID0gbWluX3QodTMyLCAweDMzMzMzLCBtYXhfcmV0cnkgKiAweDExMTExKTsKKworCXJldHVybiBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19SRVRSWV9NQVgsIHRtcCk7Cit9CisKK2ludCBhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJdTMyIHYgPSAwOworCXUzMiBwcmV0YnR0ID0gMDsKKworCXYgfD0gYXItPmh3LT5jb25mLmJlYWNvbl9pbnQ7CisKKwlpZiAoYXItPnZpZikgeworCQlzd2l0Y2ggKGFyLT52aWYtPnR5cGUpIHsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQkJdiB8PSBCSVQoMjUpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCQl2IHw9IEJJVCgyNCk7CisJCQlwcmV0YnR0ID0gKGFyLT5ody0+Y29uZi5iZWFjb25faW50IC0gNikgPDwgMTY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJdiB8PSBhci0+dmlmLT5ic3NfY29uZi5kdGltX3BlcmlvZCA8PCAxNjsKKwl9CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX1BSRVRCVFQsIHByZXRidHQpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fUEVSSU9ELCB2KTsKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworaW50IGFyOTE3MF91cGRhdGVfYmVhY29uKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJX19sZTMyICpkYXRhLCAqb2xkID0gTlVMTDsKKwl1MzIgd29yZDsKKwlpbnQgaTsKKworCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGFyLT5odywgYXItPnZpZik7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJZGF0YSA9IChfX2xlMzIgKilza2ItPmRhdGE7CisJaWYgKGFyLT5iZWFjb24pCisJCW9sZCA9IChfX2xlMzIgKilhci0+YmVhY29uLT5kYXRhOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKwlmb3IgKGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKHNrYi0+bGVuLCA0KTsgaSsrKSB7CisJCS8qCisJCSAqIFhYWDogVGhpcyBhY2Nlc3NlcyBiZXlvbmQgc2tiIGRhdGEgZm9yIHVwCisJCSAqCXRvIHRoZSBsYXN0IDMgYnl0ZXMhIQorCQkgKi8KKworCQlpZiAob2xkICYmIChkYXRhW2ldID09IG9sZFtpXSkpCisJCQljb250aW51ZTsKKworCQl3b3JkID0gbGUzMl90b19jcHUoZGF0YVtpXSk7CisJCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfQkVBQ09OX0JVRkZFUl9BRERSRVNTICsgNCAqIGksIHdvcmQpOworCX0KKworCS8qIFhYWDogdXNlIHNrYi0+Y2IgaW5mbyAqLworCWlmIChhci0+aHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkNOX1BMQ1AsCisJCQkJKChza2ItPmxlbiArIDQpIDw8ICgzKzE2KSkgKyAweDA0MDApOworCWVsc2UKKwkJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JDTl9QTENQLAorCQkJCSgoc2tiLT5sZW4gKyA0KSA8PCAoMysxNikpICsgMHgwNDAwKTsKKworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fTEVOR1RILCBza2ItPmxlbiArIDQpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19CQ05fQUREUiwgQVI5MTcwX0JFQUNPTl9CVUZGRVJfQUREUkVTUyk7CisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0JDTl9DVFJMLCAxKTsKKworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKworCWRldl9rZnJlZV9za2IoYXItPmJlYWNvbik7CisJYXItPmJlYWNvbiA9IHNrYjsKKworCXJldHVybiBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7Cit9CisKK3ZvaWQgYXI5MTcwX25ld19iZWFjb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhcjkxNzAsCisJCQkJCSBiZWFjb25fd29yayk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKQorCQlyZXR1cm4gOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKworCWlmICghYXItPnZpZikKKwkJZ290byBvdXQ7CisKKwlhcjkxNzBfdXBkYXRlX2JlYWNvbihhcik7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJd2hpbGUgKChza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKGFyLT5odywgYXItPnZpZikpKQorCQlhcjkxNzBfb3BfdHgoYXItPmh3LCBza2IpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworfQorCitpbnQgYXI5MTcwX3VwbG9hZF9rZXkoc3RydWN0IGFyOTE3MCAqYXIsIHU4IGlkLCBjb25zdCB1OCAqbWFjLCB1OCBrdHlwZSwKKwkJICAgICAgdTgga2V5aWR4LCB1OCAqa2V5ZGF0YSwgaW50IGtleWxlbikKK3sKKwlfX2xlMzIgdmFsc1s3XTsKKwlzdGF0aWMgY29uc3QgdTggYmNhc3RbRVRIX0FMRU5dID0KKwkJeyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJdTggZHVtbXk7CisKKwltYWMgPSBtYWMgPyA6IGJjYXN0OworCisJdmFsc1swXSA9IGNwdV90b19sZTMyKChrZXlpZHggPDwgMTYpICsgaWQpOworCXZhbHNbMV0gPSBjcHVfdG9fbGUzMihtYWNbMV0gPDwgMjQgfCBtYWNbMF0gPDwgMTYgfCBrdHlwZSk7CisJdmFsc1syXSA9IGNwdV90b19sZTMyKG1hY1s1XSA8PCAyNCB8IG1hY1s0XSA8PCAxNiB8CisJCQkgICAgICBtYWNbM10gPDwgOCB8IG1hY1syXSk7CisJbWVtc2V0KCZ2YWxzWzNdLCAwLCAxNik7CisJaWYgKGtleWRhdGEpCisJCW1lbWNweSgmdmFsc1szXSwga2V5ZGF0YSwga2V5bGVuKTsKKworCXJldHVybiBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfRUtFWSwKKwkJCSAgICBzaXplb2YodmFscyksICh1OCAqKXZhbHMsCisJCQkgICAgMSwgJmR1bW15KTsKK30KKworaW50IGFyOTE3MF9kaXNhYmxlX2tleShzdHJ1Y3QgYXI5MTcwICphciwgdTggaWQpCit7CisJX19sZTMyIHZhbCA9IGNwdV90b19sZTMyKGlkKTsKKwl1OCBkdW1teTsKKworCXJldHVybiBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfRUtFWSwKKwkJCSAgICBzaXplb2YodmFsKSwgKHU4ICopJnZhbCwKKwkJCSAgICAxLCAmZHVtbXkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5NmZmOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC9tYWluLmMKQEAgLTAsMCArMSwxNjcxIEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCisgKgorICogbWFjODAyMTEgaW50ZXJhY3Rpb24gY29kZQorICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDksIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImFyOTE3MC5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAiY21kLmgiCisKK3N0YXRpYyBpbnQgbW9kcGFyYW1fbm9od2NyeXB0OworbW9kdWxlX3BhcmFtX25hbWVkKG5vaHdjcnlwdCwgbW9kcGFyYW1fbm9od2NyeXB0LCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uLiIpOworCisjZGVmaW5lIFJBVEUoX2JpdHJhdGUsIF9od19yYXRlLCBfdHhwaWR4LCBfZmxhZ3MpIHsJXAorCS5iaXRyYXRlCT0gKF9iaXRyYXRlKSwJCQlcCisJLmZsYWdzCQk9IChfZmxhZ3MpLAkJCVwKKwkuaHdfdmFsdWUJPSAoX2h3X3JhdGUpIHwgKF90eHBpZHgpIDw8IDQsCVwKK30KKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBfX2FyOTE3MF9yYXRldGFibGVbXSA9IHsKKwlSQVRFKDEwLCAwLCAwLCAwKSwKKwlSQVRFKDIwLCAxLCAxLCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCisJUkFURSg1NSwgMiwgMiwgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLAorCVJBVEUoMTEwLCAzLCAzLCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCisJUkFURSg2MCwgMHhiLCAwLCAwKSwKKwlSQVRFKDkwLCAweGYsIDAsIDApLAorCVJBVEUoMTIwLCAweGEsIDAsIDApLAorCVJBVEUoMTgwLCAweGUsIDAsIDApLAorCVJBVEUoMjQwLCAweDksIDAsIDApLAorCVJBVEUoMzYwLCAweGQsIDEsIDApLAorCVJBVEUoNDgwLCAweDgsIDIsIDApLAorCVJBVEUoNTQwLCAweGMsIDMsIDApLAorfTsKKyN1bmRlZiBSQVRFCisKKyNkZWZpbmUgYXI5MTcwX2dfcmF0ZXRhYmxlCShfX2FyOTE3MF9yYXRldGFibGUgKyAwKQorI2RlZmluZSBhcjkxNzBfZ19yYXRldGFibGVfc2l6ZQkxMgorI2RlZmluZSBhcjkxNzBfYV9yYXRldGFibGUJKF9fYXI5MTcwX3JhdGV0YWJsZSArIDQpCisjZGVmaW5lIGFyOTE3MF9hX3JhdGV0YWJsZV9zaXplCTgKKworLyoKKyAqIE5COiBUaGUgaHdfdmFsdWUgaXMgdXNlZCBhcyBhbiBpbmRleCBpbnRvIHRoZSBhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zCisgKiAgICAgYXJyYXkgaW4gcGh5LmMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIGZyZXF1ZW5jeSBsb29rdXBzIQorICovCisjZGVmaW5lIENIQU4oX2ZyZXEsIF9pZHgpIHsJCVwKKwkuY2VudGVyX2ZyZXEJPSAoX2ZyZXEpLAlcCisJLmh3X3ZhbHVlCT0gKF9pZHgpLAlcCisJLm1heF9wb3dlcgk9IDE4LCAvKiBYWFggKi8JXAorfQorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGFyOTE3MF8yZ2h6X2NoYW50YWJsZVtdID0geworCUNIQU4oMjQxMiwgIDApLAorCUNIQU4oMjQxNywgIDEpLAorCUNIQU4oMjQyMiwgIDIpLAorCUNIQU4oMjQyNywgIDMpLAorCUNIQU4oMjQzMiwgIDQpLAorCUNIQU4oMjQzNywgIDUpLAorCUNIQU4oMjQ0MiwgIDYpLAorCUNIQU4oMjQ0NywgIDcpLAorCUNIQU4oMjQ1MiwgIDgpLAorCUNIQU4oMjQ1NywgIDkpLAorCUNIQU4oMjQ2MiwgMTApLAorCUNIQU4oMjQ2NywgMTEpLAorCUNIQU4oMjQ3MiwgMTIpLAorCUNIQU4oMjQ4NCwgMTMpLAorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhcjkxNzBfNWdoel9jaGFudGFibGVbXSA9IHsKKwlDSEFOKDQ5MjAsIDE0KSwKKwlDSEFOKDQ5NDAsIDE1KSwKKwlDSEFOKDQ5NjAsIDE2KSwKKwlDSEFOKDQ5ODAsIDE3KSwKKwlDSEFOKDUwNDAsIDE4KSwKKwlDSEFOKDUwNjAsIDE5KSwKKwlDSEFOKDUwODAsIDIwKSwKKwlDSEFOKDUxODAsIDIxKSwKKwlDSEFOKDUyMDAsIDIyKSwKKwlDSEFOKDUyMjAsIDIzKSwKKwlDSEFOKDUyNDAsIDI0KSwKKwlDSEFOKDUyNjAsIDI1KSwKKwlDSEFOKDUyODAsIDI2KSwKKwlDSEFOKDUzMDAsIDI3KSwKKwlDSEFOKDUzMjAsIDI4KSwKKwlDSEFOKDU1MDAsIDI5KSwKKwlDSEFOKDU1MjAsIDMwKSwKKwlDSEFOKDU1NDAsIDMxKSwKKwlDSEFOKDU1NjAsIDMyKSwKKwlDSEFOKDU1ODAsIDMzKSwKKwlDSEFOKDU2MDAsIDM0KSwKKwlDSEFOKDU2MjAsIDM1KSwKKwlDSEFOKDU2NDAsIDM2KSwKKwlDSEFOKDU2NjAsIDM3KSwKKwlDSEFOKDU2ODAsIDM4KSwKKwlDSEFOKDU3MDAsIDM5KSwKKwlDSEFOKDU3NDUsIDQwKSwKKwlDSEFOKDU3NjUsIDQxKSwKKwlDSEFOKDU3ODUsIDQyKSwKKwlDSEFOKDU4MDUsIDQzKSwKKwlDSEFOKDU4MjUsIDQ0KSwKKwlDSEFOKDUxNzAsIDQ1KSwKKwlDSEFOKDUxOTAsIDQ2KSwKKwlDSEFOKDUyMTAsIDQ3KSwKKwlDSEFOKDUyMzAsIDQ4KSwKK307CisjdW5kZWYgQ0hBTgorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBhcjkxNzBfYmFuZF8yR0h6ID0geworCS5jaGFubmVscwk9IGFyOTE3MF8yZ2h6X2NoYW50YWJsZSwKKwkubl9jaGFubmVscwk9IEFSUkFZX1NJWkUoYXI5MTcwXzJnaHpfY2hhbnRhYmxlKSwKKwkuYml0cmF0ZXMJPSBhcjkxNzBfZ19yYXRldGFibGUsCisJLm5fYml0cmF0ZXMJPSBhcjkxNzBfZ19yYXRldGFibGVfc2l6ZSwKK307CisKKyNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKKy8qCisgKiBJbiBjYXNlIHNvbWUgd2FudHMgd29ya3Mgd2l0aCBBUjkxNzAncyBjcmF6eSB0eF9zdGF0dXMgcXVldWVpbmcgdGVjaG5pcXVlcy4KKyAqIEhlIG1pZ2h0IG5lZWQgdGhpcyByYXRoZXIgdXNlZnVsIHByb2JpbmcgZnVuY3Rpb24uCisgKgorICogTk9URTogY2FsbGVyIG11c3QgaG9sZCB0aGUgcXVldWUncyBzcGlubG9jayEKKyAqLworCitzdGF0aWMgdm9pZCBhcjkxNzBfcHJpbnRfdHhoZWFkZXIoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGFyOTE3MF90eF9jb250cm9sICp0eGMgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9ICh2b2lkICopdHhjLT5mcmFtZV9kYXRhOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA9PiBGUkFNRSBbc2tiOiVwLCBxdWV1ZTolZCwgREE6WyVwTV0gIgorCQkJICAibWFjX2NvbnRyb2w6JTA0eCwgcGh5X2NvbnRyb2w6JTA4eF1cbiIsCisJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIHNrYiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYiksCisJICAgICAgIGllZWU4MDIxMV9nZXRfREEoaGRyKSwgbGUxNl90b19jcHUodHhjLT5tYWNfY29udHJvbCksCisJICAgICAgIGxlMzJfdG9fY3B1KHR4Yy0+cGh5X2NvbnRyb2wpKTsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX2R1bXBfc3RhdGlvbl90eF9zdGF0dXNfcXVldWUoc3RydWN0IGFyOTE3MCAqYXIsCisJCQkJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpID0gMDsKKworCXByaW50ayhLRVJOX0RFQlVHICItLS1bIGN1dCBoZXJlIF0tLS1cbiIpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogJWQgZW50cmllcyBpbiB0eF9zdGF0dXMgcXVldWUuXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBza2JfcXVldWVfbGVuKHF1ZXVlKSk7CisKKwlza2JfcXVldWVfd2FsayhxdWV1ZSwgc2tiKSB7CisJCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOworCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKil0eGMtPmZyYW1lX2RhdGE7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgImluZGV4OiVkID0+IFxuIiwgaSk7CisJCWFyOTE3MF9wcmludF90eGhlYWRlcihhciwgc2tiKTsKKwl9CisJcHJpbnRrKEtFUk5fREVCVUcgIi0tLVsgZW5kIF0tLS1cbiIpOworfQorI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLworCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBhcjkxNzBfYmFuZF81R0h6ID0geworCS5jaGFubmVscwk9IGFyOTE3MF81Z2h6X2NoYW50YWJsZSwKKwkubl9jaGFubmVscwk9IEFSUkFZX1NJWkUoYXI5MTcwXzVnaHpfY2hhbnRhYmxlKSwKKwkuYml0cmF0ZXMJPSBhcjkxNzBfYV9yYXRldGFibGUsCisJLm5fYml0cmF0ZXMJPSBhcjkxNzBfYV9yYXRldGFibGVfc2l6ZSwKK307CisKK3ZvaWQgYXI5MTcwX2hhbmRsZV90eF9zdGF0dXMoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgIGJvb2wgdmFsaWRfc3RhdHVzLCB1MTYgdHhfc3RhdHVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhpbmZvOworCXVuc2lnbmVkIGludCByZXRyaWVzID0gMCwgcXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4tLTsKKwlpZiAoaWVlZTgwMjExX3F1ZXVlX3N0b3BwZWQoYXItPmh3LCBxdWV1ZSkpCisJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGFyLT5odywgcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisKKwl0eGluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJaWVlZTgwMjExX3R4X2luZm9fY2xlYXJfc3RhdHVzKHR4aW5mbyk7CisKKwlzd2l0Y2ggKHR4X3N0YXR1cykgeworCWNhc2UgQVI5MTcwX1RYX1NUQVRVU19SRVRSWToKKwkJcmV0cmllcyA9IDI7CisJY2FzZSBBUjkxNzBfVFhfU1RBVFVTX0NPTVBMRVRFOgorCQl0eGluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJYnJlYWs7CisKKwljYXNlIEFSOTE3MF9UWF9TVEFUVVNfRkFJTEVEOgorCQlyZXRyaWVzID0gYXItPmh3LT5jb25mLmxvbmdfZnJhbWVfbWF4X3R4X2NvdW50OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgdHhfc3RhdHVzIHJlc3BvbnNlICgleCkuXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwgdHhfc3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZhbGlkX3N0YXR1cykKKwkJdHhpbmZvLT5zdGF0dXMucmF0ZXNbMF0uY291bnQgPSByZXRyaWVzICsgMTsKKworCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCkpOworCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShhci0+aHcsIHNrYik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXI5MTcwX2ZpbmRfc2tiX2luX3F1ZXVlKHN0cnVjdCBhcjkxNzAgKmFyLAorCQkJCQkJY29uc3QgdTggKm1hYywKKwkJCQkJCWNvbnN0IHUzMiBxdWV1ZSwKKwkJCQkJCXN0cnVjdCBza19idWZmX2hlYWQgKnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKKwlza2JfcXVldWVfd2FsayhxLCBza2IpIHsKKwkJc3RydWN0IGFyOTE3MF90eF9jb250cm9sICp0eGMgPSAodm9pZCAqKSBza2ItPmRhdGE7CisJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSB0eGMtPmZyYW1lX2RhdGE7CisJCXUzMiB0eGNfcXVldWUgPSAobGUzMl90b19jcHUodHhjLT5waHlfY29udHJvbCkgJgorCQkJCUFSOTE3MF9UWF9QSFlfUU9TX01BU0spID4+CisJCQkJQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQ7CisKKwkJaWYgICgocXVldWUgIT0gdHhjX3F1ZXVlKSB8fAorCQkgICAgIChjb21wYXJlX2V0aGVyX2FkZHIoaWVlZTgwMjExX2dldF9EQShoZHIpLCBtYWMpKSkKKwkJCWNvbnRpbnVlOworCisJCV9fc2tiX3VubGluayhza2IsIHEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiBza2I7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICphcjkxNzBfZmluZF9xdWV1ZWRfc2tiKHN0cnVjdCBhcjkxNzAgKmFyLCBjb25zdCB1OCAqbWFjLAorCQkJCQkgICAgICBjb25zdCB1MzIgcXVldWUpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJLyoKKwkgKiBVbmZvcnR1bmF0ZWx5LCB0aGUgZmlybXdhcmUgZG9lcyBub3QgdGVsbCB0byB3aGljaCAocXVldWVkKSBmcmFtZQorCSAqIHRoaXMgdHJhbnNtaXNzaW9uIHN0YXR1cyByZXBvcnQgYmVsb25ncyB0by4KKwkgKgorCSAqIFNvIHdlIGhhdmUgdG8gbWFrZSByaXNreSBndWVzc2VzIC0gd2l0aCB0aGUgc2NhcmNlIGluZm9ybWF0aW9uCisJICogdGhlIGZpcm13YXJlIHByb3ZpZGVkICgtPiBkZXN0aW5hdGlvbiBNQUMsIGFuZCBwaHlfY29udHJvbCkgLQorCSAqIGFuZCBob3BlIHRoYXQgd2UgcGlja2VkIHRoZSByaWdodCBvbmUuLi4KKwkgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKGFyLT5odywgbWFjKTsKKworCWlmIChsaWtlbHkoc3RhKSkgeworCQlzdHJ1Y3QgYXI5MTcwX3N0YV9pbmZvICpzdGFfcHJpdiA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZzdGFfcHJpdi0+dHhfc3RhdHVzW3F1ZXVlXSk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlpZiAobGlrZWx5KHNrYikpCisJCQlyZXR1cm4gc2tiOworCX0gZWxzZQorCQlyY3VfcmVhZF91bmxvY2soKTsKKworCS8qIHNjYW4gdGhlIHdhc3RlIHF1ZXVlIGZvciBjYW5kaWRhdGVzICovCisJc2tiID0gYXI5MTcwX2ZpbmRfc2tiX2luX3F1ZXVlKGFyLCBtYWMsIHF1ZXVlLAorCQkJCSAgICAgICAmYXItPmdsb2JhbF90eF9zdGF0dXNfd2FzdGUpOworCWlmICghc2tiKSB7CisJCS8qIHNvIGl0IHN0aWxsIF9tdXN0XyBiZSBpbiB0aGUgZ2xvYmFsIGxpc3QuICovCisJCXNrYiA9IGFyOTE3MF9maW5kX3NrYl9pbl9xdWV1ZShhciwgbWFjLCBxdWV1ZSwKKwkJCQkJICAgICAgICZhci0+Z2xvYmFsX3R4X3N0YXR1cyk7CisJfQorCisjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCisJaWYgKHVubGlrZWx5KCghc2tiKSAmJiBuZXRfcmF0ZWxpbWl0KCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVTUzpbJXBNXSBkb2VzIG5vdCBoYXZlIGFueSAiCisJCQkJIm91dHN0YW5kaW5nIGZyYW1lcyBpbiB0aGlzIHF1ZXVlICglZCkuXG4iLAorCQkJCXdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIG1hYywgcXVldWUpOworCX0KKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KKwlyZXR1cm4gc2tiOworfQorCisvKgorICogVGhpcyB3b3JrZXIgdHJpZXMgdG8ga2VlcCB0aGUgZ2xvYmFsIHR4X3N0YXR1cyBxdWV1ZSBlbXB0eS4KKyAqIFNvIHdlIGNhbiBndWFyYW50ZWUgdGhhdCBpbmNvbWluZyB0eF9zdGF0dXMgcmVwb3J0cyBmb3IKKyAqIHVucmVnaXN0ZXJlZCBzdGF0aW9ucyBhcmUgYWx3YXlzIHN5bmNlZCB3aXRoIHRoZSBhY3R1YWwKKyAqIGZyYW1lIC0gd2hpY2ggd2UgdGhpbmsgLSBiZWxvbmdzIHRvLgorICovCisKK3N0YXRpYyB2b2lkIGFyOTE3MF90eF9zdGF0dXNfamFuaXRvcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFyOTE3MCwKKwkJCQkJIHR4X3N0YXR1c19qYW5pdG9yLndvcmspOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkKKwkJcmV0dXJuIDsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisJLyogcmVjeWNsZSB0aGUgZ2FyYmFnZSBiYWNrIHRvIG1hYzgwMjExLi4uIG9uZSBieSBvbmUuICovCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYXItPmdsb2JhbF90eF9zdGF0dXNfd2FzdGUpKSkgeworI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc3Bvc2UgcXVldWVkIGZyYW1lID0+XG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisJCWFyOTE3MF9wcmludF90eGhlYWRlcihhciwgc2tiKTsKKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KKwkJYXI5MTcwX2hhbmRsZV90eF9zdGF0dXMoYXIsIHNrYiwgZmFsc2UsCisJCQkJCUFSOTE3MF9UWF9TVEFUVVNfRkFJTEVEKTsKKwl9CisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZhci0+Z2xvYmFsX3R4X3N0YXR1cykpKSB7CisjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogbW92aW5nIGZyYW1lIGludG8gd2FzdGUgcXVldWUgPT5cbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKworCQlhcjkxNzBfcHJpbnRfdHhoZWFkZXIoYXIsIHNrYik7CisjZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCisJCXNrYl9xdWV1ZV90YWlsKCZhci0+Z2xvYmFsX3R4X3N0YXR1c193YXN0ZSwgc2tiKTsKKwl9CisKKwkvKiByZWNhbGwgdGhlIGphbml0b3IgaW4gMTAwbXMgLSBpZiB0aGVyZSdzIGdhcmJhZ2UgaW4gdGhlIGNhbi4gKi8KKwlpZiAoc2tiX3F1ZXVlX2xlbigmYXItPmdsb2JhbF90eF9zdGF0dXNfd2FzdGUpID4gMCkKKwkJcXVldWVfZGVsYXllZF93b3JrKGFyLT5ody0+d29ya3F1ZXVlLCAmYXItPnR4X3N0YXR1c19qYW5pdG9yLAorCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9oYW5kbGVfY29tbWFuZF9yZXNwb25zZShzdHJ1Y3QgYXI5MTcwICphciwKKwkJCQkJICAgdm9pZCAqYnVmLCB1MzIgbGVuKQoreworCXN0cnVjdCBhcjkxNzBfY21kX3Jlc3BvbnNlICpjbWQgPSAodm9pZCAqKSBidWY7CisKKwlpZiAoKGNtZC0+dHlwZSAmIDB4YzApICE9IDB4YzApIHsKKwkJYXItPmNhbGxiYWNrX2NtZChhciwgbGVuLCBidWYpOworCQlyZXR1cm47CisJfQorCisJLyogaGFyZHdhcmUgZXZlbnQgaGFuZGxlcnMgKi8KKwlzd2l0Y2ggKGNtZC0+dHlwZSkgeworCWNhc2UgMHhjMTogeworCQkvKgorCQkgKiBUWCBzdGF0dXMgbm90aWZpY2F0aW9uOgorCQkgKiBieXRlczogMGMgYzEgWFggWVkgTTEgTTIgTTMgTTQgTTUgTTYgUjQgUjMgUjIgUjEgUzIgUzEKKwkJICoKKwkJICogWFggYWx3YXlzIDgxCisJCSAqIFlZIGFsd2F5cyAwMAorCQkgKiBNMS1NNiBpcyB0aGUgTUFDIGFkZHJlc3MKKwkJICogUjEtUjQgaXMgdGhlIHRyYW5zbWl0IHJhdGUKKwkJICogUzEtUzIgaXMgdGhlIHRyYW5zbWl0IHN0YXR1cworCQkgKi8KKworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQl1MzIgcXVldWUgPSAobGUzMl90b19jcHUoY21kLT50eF9zdGF0dXMucmF0ZSkgJgorCQkJICAgIEFSOTE3MF9UWF9QSFlfUU9TX01BU0spID4+IEFSOTE3MF9UWF9QSFlfUU9TX1NISUZUOworCisJCXNrYiA9IGFyOTE3MF9maW5kX3F1ZXVlZF9za2IoYXIsIGNtZC0+dHhfc3RhdHVzLmRzdCwgcXVldWUpOworCQlpZiAodW5saWtlbHkoIXNrYikpCisJCQlyZXR1cm4gOworCisJCWFyOTE3MF9oYW5kbGVfdHhfc3RhdHVzKGFyLCBza2IsIHRydWUsCisJCQkJCWxlMTZfdG9fY3B1KGNtZC0+dHhfc3RhdHVzLnN0YXR1cykpOworCQlicmVhazsKKwkJfQorCisJY2FzZSAweGMwOgorCQkvKgorCQkgKiBwcmUtVEJUVCBldmVudAorCQkgKi8KKwkJaWYgKGFyLT52aWYgJiYgYXItPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKKwkJCXF1ZXVlX3dvcmsoYXItPmh3LT53b3JrcXVldWUsICZhci0+YmVhY29uX3dvcmspOworCQlicmVhazsKKworCWNhc2UgMHhjMjoKKwkJLyoKKwkJICogKElCU1MpIGJlYWNvbiBzZW5kIG5vdGlmaWNhdGlvbgorCQkgKiBieXRlczogMDQgYzIgWFggWVkgQjQgQjMgQjIgQjEKKwkJICoKKwkJICogWFggYWx3YXlzIDgwCisJCSAqIFlZIGFsd2F5cyAwMAorCQkgKiBCMS1CNCAic2hvdWxkIiBiZSB0aGUgbnVtYmVyIG9mIHNlbmQgb3V0IGJlYWNvbnMuCisJCSAqLworCQlicmVhazsKKworCWNhc2UgMHhjMzoKKwkJLyogRW5kIG9mIEF0aW0gV2luZG93ICovCisJCWJyZWFrOworCisJY2FzZSAweGM0OgorCWNhc2UgMHhjNToKKwkJLyogQmxvY2tBQ0sgZXZlbnRzICovCisJCWJyZWFrOworCisJY2FzZSAweGM2OgorCQkvKiBXYXRjaGRvZyBJbnRlcnJ1cHQgKi8KKwkJYnJlYWs7CisKKwljYXNlIDB4Yzk6CisJCS8qIHJldHJhbnNtaXNzaW9uIGlzc3VlIC8gU0lGUy9FSUZTIGNvbGxpc2lvbiA/ISAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gInJlY2VpdmVkIHVuaGFuZGxlZCBldmVudCAleFxuIiwgY21kLT50eXBlKTsKKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImR1bXA6IiwgRFVNUF9QUkVGSVhfTk9ORSwgYnVmLCBsZW4pOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBJZiB0aGUgZnJhbWUgYWxpZ25tZW50IGlzIHJpZ2h0IChvciB0aGUga2VybmVsIGhhcworICogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpLCBhbmQgdGhlcmUKKyAqIGlzIG9ubHkgYSBzaW5nbGUgTVBEVSBpbiB0aGUgVVNCIGZyYW1lLCB0aGVuIHdlIGNhbgorICogc3VibWl0IHRvIG1hYzgwMjExIHRoZSBTS0IgZGlyZWN0bHkuIEhvd2V2ZXIsIHNpbmNlCisgKiB0aGVyZSBtYXkgYmUgbXVsdGlwbGUgcGFja2V0cyBpbiBvbmUgU0tCIGluIHN0cmVhbQorICogbW9kZSwgYW5kIHdlIG5lZWQgdG8gb2JzZXJ2ZSB0aGUgcHJvcGVyIG9yZGVyaW5nLAorICogdGhpcyBpcyBub24tdHJpdmlhbC4KKyAqLworc3RhdGljIHZvaWQgYXI5MTcwX2hhbmRsZV9tcGR1KHN0cnVjdCBhcjkxNzAgKmFyLCB1OCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGFyOTE3MF9yeF9oZWFkICpoZWFkID0gKHZvaWQgKilidWY7CisJc3RydWN0IGFyOTE3MF9yeF90YWlsICp0YWlsOworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXR1czsKKwlpbnQgbXBkdV9sZW4sIGk7CisJdTggZXJyb3IsIGFudGVubmFzID0gMCwgZGVjcnlwdDsKKwlfX2xlMTYgZmM7CisJaW50IHJlc2VydmVkOworCisJaWYgKHVubGlrZWx5KCFJU19TVEFSVEVEKGFyKSkpCisJCXJldHVybiA7CisKKwkvKiBSZWNlaXZlZCBNUERVICovCisJbXBkdV9sZW4gPSBsZW47CisJbXBkdV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfaGVhZCk7CisJbXBkdV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfdGFpbCk7CisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYXI5MTcwX3J4X2hlYWQpICE9IDEyKTsKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBhcjkxNzBfcnhfdGFpbCkgIT0gMjQpOworCisJaWYgKG1wZHVfbGVuIDw9IEZDU19MRU4pCisJCXJldHVybjsKKworCXRhaWwgPSAodm9pZCAqKShidWYgKyBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKSArIG1wZHVfbGVuKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWlmICh0YWlsLT5yc3NpW2ldICE9IDB4ODApCisJCQlhbnRlbm5hcyB8PSBCSVQoaSk7CisKKwkvKiBwb3N0LXByb2Nlc3MgUlNTSSAqLworCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspCisJCWlmICh0YWlsLT5yc3NpW2ldICYgMHg4MCkKKwkJCXRhaWwtPnJzc2lbaV0gPSAoKHRhaWwtPnJzc2lbaV0gJiAweDdmKSArIDEpICYgMHg3ZjsKKworCW1lbXNldCgmc3RhdHVzLCAwLCBzaXplb2Yoc3RhdHVzKSk7CisKKwlzdGF0dXMuYmFuZCA9IGFyLT5jaGFubmVsLT5iYW5kOworCXN0YXR1cy5mcmVxID0gYXItPmNoYW5uZWwtPmNlbnRlcl9mcmVxOworCXN0YXR1cy5zaWduYWwgPSBhci0+bm9pc2VbMF0gKyB0YWlsLT5yc3NpX2NvbWJpbmVkOworCXN0YXR1cy5ub2lzZSA9IGFyLT5ub2lzZVswXTsKKwlzdGF0dXMuYW50ZW5uYSA9IGFudGVubmFzOworCisJc3dpdGNoICh0YWlsLT5zdGF0dXMgJiBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fTUFTSykgeworCWNhc2UgQVI5MTcwX1JYX1NUQVRVU19NT0RVTEFUSU9OX0NDSzoKKwkJaWYgKHRhaWwtPnN0YXR1cyAmIEFSOTE3MF9SWF9TVEFUVVNfU0hPUlRfUFJFQU1CTEUpCisJCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1NIT1JUUFJFOworCQlzd2l0Y2ggKGhlYWQtPnBsY3BbMF0pIHsKKwkJY2FzZSAweDBhOgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDB4MTQ6CisJCQlzdGF0dXMucmF0ZV9pZHggPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMHgzNzoKKwkJCXN0YXR1cy5yYXRlX2lkeCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAweDZlOgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gMzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKCghYXItPnNuaWZmZXJfZW5hYmxlZCkgJiYgKG5ldF9yYXRlbGltaXQoKSkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBwbGNwIGNjayByYXRlICIKKwkJCQkgICAgICAgIigleCkuXG4iLCB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLAorCQkJCSAgICAgICBoZWFkLT5wbGNwWzBdKTsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsKKwljYXNlIEFSOTE3MF9SWF9TVEFUVVNfTU9EVUxBVElPTl9PRkRNOgorCQlzd2l0Y2ggKGhlYWQtPnBsY3BbMF0gJiAweEYpIHsKKwkJY2FzZSAweEI6CisJCQlzdGF0dXMucmF0ZV9pZHggPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMHhGOgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gMTsKKwkJCWJyZWFrOworCQljYXNlIDB4QToKKwkJCXN0YXR1cy5yYXRlX2lkeCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAweEU6CisJCQlzdGF0dXMucmF0ZV9pZHggPSAzOworCQkJYnJlYWs7CisJCWNhc2UgMHg5OgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gNDsKKwkJCWJyZWFrOworCQljYXNlIDB4RDoKKwkJCXN0YXR1cy5yYXRlX2lkeCA9IDU7CisJCQlicmVhazsKKwkJY2FzZSAweDg6CisJCQlzdGF0dXMucmF0ZV9pZHggPSA2OworCQkJYnJlYWs7CisJCWNhc2UgMHhDOgorCQkJc3RhdHVzLnJhdGVfaWR4ID0gNzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKCghYXItPnNuaWZmZXJfZW5hYmxlZCkgJiYgKG5ldF9yYXRlbGltaXQoKSkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBwbGNwIG9mZG0gcmF0ZSAiCisJCQkJICAgICAgICIoJXgpLlxuIiwgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSwKKwkJCQkgICAgICAgaGVhZC0+cGxjcFswXSk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHN0YXR1cy5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQlzdGF0dXMucmF0ZV9pZHggKz0gNDsKKwkJYnJlYWs7CisJY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fSFQ6CisJY2FzZSBBUjkxNzBfUlhfU1RBVFVTX01PRFVMQVRJT05fRFVQT0ZETToKKwkJLyogWFhYICovCisKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgbW9kdWxhdGlvblxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpKTsKKwkJcmV0dXJuOworCX0KKworCWVycm9yID0gdGFpbC0+ZXJyb3I7CisKKwlpZiAoZXJyb3IgJiBBUjkxNzBfUlhfRVJST1JfTU1JQykgeworCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7CisJCWVycm9yICY9IH5BUjkxNzBfUlhfRVJST1JfTU1JQzsKKwl9CisKKwlpZiAoZXJyb3IgJiBBUjkxNzBfUlhfRVJST1JfUExDUCkgeworCQlzdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQzsKKwkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9QTENQOworCX0KKworCWlmIChlcnJvciAmIEFSOTE3MF9SWF9FUlJPUl9GQ1MpIHsKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKKwkJZXJyb3IgJj0gfkFSOTE3MF9SWF9FUlJPUl9GQ1M7CisJfQorCisJZGVjcnlwdCA9IGFyOTE3MF9nZXRfZGVjcnlwdF90eXBlKHRhaWwpOworCWlmICghKGRlY3J5cHQgJiBBUjkxNzBfUlhfRU5DX1NPRlRXQVJFKSAmJgorCSAgICBkZWNyeXB0ICE9IEFSOTE3MF9FTkNfQUxHX05PTkUpCisJCXN0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOworCisJLyogaWdub3JlIHdyb25nIFJBIGVycm9ycyAqLworCWVycm9yICY9IH5BUjkxNzBfUlhfRVJST1JfV1JPTkdfUkE7CisKKwlpZiAoZXJyb3IgJiBBUjkxNzBfUlhfRVJST1JfREVDUllQVCkgeworCQllcnJvciAmPSB+QVI5MTcwX1JYX0VSUk9SX0RFQ1JZUFQ7CisKKwkJLyoKKwkJICogUnggZGVjcnlwdGlvbiBpcyBkb25lIGluIHBsYWNlLAorCQkgKiB0aGUgb3JpZ2luYWwgZGF0YSBpcyBsb3N0IGFueXdheS4KKwkJICovCisJCXJldHVybiA7CisJfQorCisJLyogZHJvcCBhbnkgb3RoZXIgZXJyb3IgZnJhbWVzICovCisJaWYgKChlcnJvcikgJiYgKG5ldF9yYXRlbGltaXQoKSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBlcnJvcnM6ICUjeFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGVycm9yKTsKKwkJcmV0dXJuOworCX0KKworCWJ1ZiArPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9yeF9oZWFkKTsKKwlmYyA9ICooX19sZTE2ICopYnVmOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykgXiBpZWVlODAyMTFfaGFzX2E0KGZjKSkKKwkJcmVzZXJ2ZWQgPSAzMiArIDI7CisJZWxzZQorCQlyZXNlcnZlZCA9IDMyOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihtcGR1X2xlbiArIHJlc2VydmVkKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuOworCisJc2tiX3Jlc2VydmUoc2tiLCByZXNlcnZlZCk7CisJbWVtY3B5KHNrYl9wdXQoc2tiLCBtcGR1X2xlbiksIGJ1ZiwgbXBkdV9sZW4pOworCWllZWU4MDIxMV9yeF9pcnFzYWZlKGFyLT5odywgc2tiLCAmc3RhdHVzKTsKK30KKwordm9pZCBhcjkxNzBfcngoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdW5zaWduZWQgaW50IGksIHRsZW4sIHJlc3BsZW47CisJdTggKnRidWYsICpyZXNwYnVmOworCisJdGJ1ZiA9IHNrYi0+ZGF0YTsKKwl0bGVuID0gc2tiLT5sZW47CisKKwl3aGlsZSAodGxlbiA+PSA0KSB7CisJCWludCBjbGVuID0gdGJ1ZlsxXSA8PCA4IHwgdGJ1ZlswXTsKKwkJaW50IHdsZW4gPSAoY2xlbiArIDMpICYgfjM7CisKKwkJLyoKKwkJICogcGFyc2Ugc3RyZWFtIChpZiBhbnkpCisJCSAqLworCQlpZiAodGJ1ZlsyXSAhPSAwIHx8IHRidWZbM10gIT0gMHg0ZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbWlzc2luZyB0YWchXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCQkJcmV0dXJuIDsKKwkJfQorCQlpZiAod2xlbiA+IHRsZW4gLSA0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIFJYICglZCwgJWQsICVkKVxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBjbGVuLCB3bGVuLCB0bGVuKTsKKwkJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJkYXRhOiAiLAorCQkJCSAgICAgICBEVU1QX1BSRUZJWF9PRkZTRVQsCisJCQkJICAgICAgIDE2LCAxLCB0YnVmLCB0bGVuLCB0cnVlKTsKKwkJCXJldHVybiA7CisJCX0KKwkJcmVzcGxlbiA9IGNsZW47CisJCXJlc3BidWYgPSB0YnVmICsgNDsKKwkJdGJ1ZiArPSB3bGVuICsgNDsKKwkJdGxlbiAtPSB3bGVuICsgNDsKKworCQlpID0gMDsKKworCQkvKiB3ZWlyZCB0aGluZywgYnV0IHRoaXMgaXMgdGhlIHNhbWUgaW4gdGhlIG9yaWdpbmFsIGRyaXZlciAqLworCQl3aGlsZSAocmVzcGxlbiA+IDIgJiYgaSA8IDEyICYmCisJCSAgICAgICByZXNwYnVmWzBdID09IDB4ZmYgJiYgcmVzcGJ1ZlsxXSA9PSAweGZmKSB7CisJCQlpICs9IDI7CisJCQlyZXNwbGVuIC09IDI7CisJCQlyZXNwYnVmICs9IDI7CisJCX0KKworCQlpZiAocmVzcGxlbiA8IDQpCisJCQljb250aW51ZTsKKworCQkvKiBmb3VuZCB0aGUgNiAqIDB4ZmZmZiBtYXJrZXI/ICovCisJCWlmIChpID09IDEyKQorCQkJYXI5MTcwX2hhbmRsZV9jb21tYW5kX3Jlc3BvbnNlKGFyLCByZXNwYnVmLCByZXNwbGVuKTsKKwkJZWxzZQorCQkJYXI5MTcwX2hhbmRsZV9tcGR1KGFyLCByZXNwYnVmLCByZXNwbGVuKTsKKwl9CisKKwlpZiAodGxlbikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYnVmZmVyIHJlbWFpbnMhXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7Cit9CisKKyNkZWZpbmUgQVI5MTcwX0ZJTExfUVVFVUUocXVldWUsIGFpX2ZzLCBjd21pbiwgY3dtYXgsIF90eG9wKQkJXAorZG8gewkJCQkJCQkJCVwKKwlxdWV1ZS5haWZzID0gYWlfZnM7CQkJCQkJXAorCXF1ZXVlLmN3X21pbiA9IGN3bWluOwkJCQkJCVwKKwlxdWV1ZS5jd19tYXggPSBjd21heDsJCQkJCQlcCisJcXVldWUudHhvcCA9IF90eG9wOwkJCQkJCVwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgYXI5MTcwX29wX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJaW50IGVyciwgaTsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisKKwkvKiByZWluaXRpYWxpemUgcXVldWVzIHN0YXRpc3RpY3MgKi8KKwltZW1zZXQoJmFyLT50eF9zdGF0cywgMCwgc2l6ZW9mKGFyLT50eF9zdGF0cykpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyLT50eF9zdGF0cyk7IGkrKykKKwkJYXItPnR4X3N0YXRzW2ldLmxpbWl0ID0gODsKKworCS8qIHJlc2V0IFFvUyBkZWZhdWx0cyAqLworCUFSOTE3MF9GSUxMX1FVRVVFKGFyLT5lZGNmWzBdLCAzLCAxNSwgMTAyMywgIDApOyAvKiBCRVNUIEVGRk9SVCovCisJQVI5MTcwX0ZJTExfUVVFVUUoYXItPmVkY2ZbMV0sIDcsIDE1LCAxMDIzLCAgMCk7IC8qIEJBQ0tHUk9VTkQgKi8KKwlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZlsyXSwgMiwgNywgICAgMTUsIDk0KTsgLyogVklERU8gKi8KKwlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZlszXSwgMiwgMywgICAgIDcsIDQ3KTsgLyogVk9JQ0UgKi8KKwlBUjkxNzBfRklMTF9RVUVVRShhci0+ZWRjZls0XSwgMiwgMywgICAgIDcsICAwKTsgLyogU1BFQ0lBTCAqLworCisJZXJyID0gYXItPm9wZW4oYXIpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gYXI5MTcwX2luaXRfbWFjKGFyKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGFyOTE3MF9zZXRfcW9zKGFyKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGFyOTE3MF9pbml0X3BoeShhciwgSUVFRTgwMjExX0JBTkRfMkdIWik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBhcjkxNzBfaW5pdF9yZihhcik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBzdGFydCBETUEgKi8KKwllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFjM2QzMCwgMHgxMDApOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJYXItPnN0YXRlID0gQVI5MTcwX1NUQVJURUQ7CisKK291dDoKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX29wX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKworCWlmIChJU19TVEFSVEVEKGFyKSkKKwkJYXItPnN0YXRlID0gQVI5MTcwX0lETEU7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhci0+dHhfc3RhdHVzX2phbml0b3IpOworCWNhbmNlbF93b3JrX3N5bmMoJmFyLT5maWx0ZXJfY29uZmlnX3dvcmspOworCWNhbmNlbF93b3JrX3N5bmMoJmFyLT5iZWFjb25fd29yayk7CisJc2tiX3F1ZXVlX3B1cmdlKCZhci0+Z2xvYmFsX3R4X3N0YXR1c193YXN0ZSk7CisJc2tiX3F1ZXVlX3B1cmdlKCZhci0+Z2xvYmFsX3R4X3N0YXR1cyk7CisKKwlpZiAoSVNfQUNDRVBUSU5HX0NNRChhcikpIHsKKwkJYXI5MTcwX3NldF9sZWRzX3N0YXRlKGFyLCAwKTsKKworCQkvKiBzdG9wIERNQSAqLworCQlhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFjM2QzMCwgMCk7CisJCWFyLT5zdG9wKGFyKTsKKwl9CisKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7Cit9CisKK2ludCBhcjkxNzBfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqdHhyYXRlOworCXVuc2lnbmVkIGludCBxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXN0cnVjdCBhcjkxNzBfc3RhX2luZm8gKnN0YV9pbmZvID0gTlVMTDsKKwl1MzIgcG93ZXIsIGNoYWluczsKKwl1MTYga2V5dHlwZSA9IDA7CisJdTE2IGxlbiwgaWN2ID0gMDsKKwlpbnQgZXJyOworCWJvb2wgdHhfc3RhdHVzOworCisJaWYgKHVubGlrZWx5KCFJU19TVEFSVEVEKGFyKSkpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwloZHIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCWxlbiA9IHNrYi0+bGVuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJaWYgKGFyLT50eF9zdGF0c1txdWV1ZV0ubGltaXQgPCBhci0+dHhfc3RhdHNbcXVldWVdLmxlbikgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCWFyLT50eF9zdGF0c1txdWV1ZV0ubGVuKys7CisJYXItPnR4X3N0YXRzW3F1ZXVlXS5jb3VudCsrOworCWlmIChhci0+dHhfc3RhdHNbcXVldWVdLmxpbWl0ID09IGFyLT50eF9zdGF0c1txdWV1ZV0ubGVuKQorCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShodywgcXVldWUpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKKworCXR4YyA9ICh2b2lkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKnR4YykpOworCisJdHhfc3RhdHVzID0gKCgoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRSkgIT0gMCkgfHwKKwkJICAgICgoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVMpICE9IDApKTsKKworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkgeworCQlpY3YgPSBpbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKKworCQlzd2l0Y2ggKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcpIHsKKwkJY2FzZSBBTEdfV0VQOgorCQkJa2V5dHlwZSA9IEFSOTE3MF9UWF9NQUNfRU5DUl9SQzQ7CisJCQlicmVhazsKKwkJY2FzZSBBTEdfVEtJUDoKKwkJCWtleXR5cGUgPSBBUjkxNzBfVFhfTUFDX0VOQ1JfUkM0OworCQkJYnJlYWs7CisJCWNhc2UgQUxHX0NDTVA6CisJCQlrZXl0eXBlID0gQVI5MTcwX1RYX01BQ19FTkNSX0FFUzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJV0FSTl9PTigxKTsKKwkJCWdvdG8gZXJyX2RlcXVldWU7CisJCX0KKwl9CisKKwkvKiBMZW5ndGggKi8KKwl0eGMtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlbiArIGljdiArIDQpOworCisJdHhjLT5tYWNfY29udHJvbCA9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfSFdfRFVSQVRJT04gfAorCQkJCSAgICAgICBBUjkxNzBfVFhfTUFDX0JBQ0tPRkYpOworCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoYXI5MTcwX3Fvc19od21hcFtxdWV1ZV0gPDwKKwkJCQkJQVI5MTcwX1RYX01BQ19RT1NfU0hJRlQpOworCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoa2V5dHlwZSk7CisJdHhjLT5waHlfY29udHJvbCA9IGNwdV90b19sZTMyKDApOworCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spCisJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19OT19BQ0spOworCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX0FHR1IpOworCisJdHhyYXRlID0gJmluZm8tPmNvbnRyb2wucmF0ZXNbMF07CisKKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpCisJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19QUk9UX0NUUyk7CisJZWxzZSBpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykKKwkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX1BST1RfUlRTKTsKKworCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEKQorCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfR1JFRU5GSUVMRCk7CisKKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCisJCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoQVI5MTcwX1RYX1BIWV9TSE9SVF9QUkVBTUJMRSk7CisKKwlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpCisJCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoQVI5MTcwX1RYX1BIWV9CV180ME1IWik7CisJLyogdGhpcyB3b3JrcyBiZWNhdXNlIDQwIE1IeiBpcyAyIGFuZCBkdXAgaXMgMyAqLworCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX0RVUF9EQVRBKQorCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfQldfNDBNSFpfRFVQKTsKKworCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKQorCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKEFSOTE3MF9UWF9QSFlfU0hPUlRfR0kpOworCisJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSB7CisJCXUzMiByID0gdHhyYXRlLT5pZHg7CisJCXU4ICp0eHBvd2VyOworCisJCXIgPDw9IEFSOTE3MF9UWF9QSFlfTUNTX1NISUZUOworCQlpZiAoV0FSTl9PTihyICYgfkFSOTE3MF9UWF9QSFlfTUNTX01BU0spKQorCQkJZ290byBlcnJfZGVxdWV1ZTsKKwkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihyICYgQVI5MTcwX1RYX1BIWV9NQ1NfTUFTSyk7CisJCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoQVI5MTcwX1RYX1BIWV9NT0RfSFQpOworCisJCWlmICh0eHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSCkgeworCQkJaWYgKGluZm8tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJCQl0eHBvd2VyID0gYXItPnBvd2VyXzVHX2h0NDA7CisJCQllbHNlCisJCQkJdHhwb3dlciA9IGFyLT5wb3dlcl8yR19odDQwOworCQl9IGVsc2UgeworCQkJaWYgKGluZm8tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJCQl0eHBvd2VyID0gYXItPnBvd2VyXzVHX2h0MjA7CisJCQllbHNlCisJCQkJdHhwb3dlciA9IGFyLT5wb3dlcl8yR19odDIwOworCQl9CisKKwkJcG93ZXIgPSB0eHBvd2VyWyh0eHJhdGUtPmlkeCkgJiA3XTsKKwl9IGVsc2UgeworCQl1OCAqdHhwb3dlcjsKKwkJdTMyIG1vZDsKKwkJdTMyIHBoeXJhdGU7CisJCXU4IGlkeCA9IHR4cmF0ZS0+aWR4OworCisJCWlmIChpbmZvLT5iYW5kICE9IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJCWlkeCArPSA0OworCQkJdHhwb3dlciA9IGFyLT5wb3dlcl81R19sZWc7CisJCQltb2QgPSBBUjkxNzBfVFhfUEhZX01PRF9PRkRNOworCQl9IGVsc2UgeworCQkJaWYgKGlkeCA8IDQpIHsKKwkJCQl0eHBvd2VyID0gYXItPnBvd2VyXzJHX2NjazsKKwkJCQltb2QgPSBBUjkxNzBfVFhfUEhZX01PRF9DQ0s7CisJCQl9IGVsc2UgeworCQkJCW1vZCA9IEFSOTE3MF9UWF9QSFlfTU9EX09GRE07CisJCQkJdHhwb3dlciA9IGFyLT5wb3dlcl8yR19vZmRtOworCQkJfQorCQl9CisKKwkJcmF0ZSA9ICZfX2FyOTE3MF9yYXRldGFibGVbaWR4XTsKKworCQlwaHlyYXRlID0gcmF0ZS0+aHdfdmFsdWUgJiAweEY7CisJCXBvd2VyID0gdHhwb3dlclsocmF0ZS0+aHdfdmFsdWUgJiAweDMwKSA+PiA0XTsKKwkJcGh5cmF0ZSA8PD0gQVI5MTcwX1RYX1BIWV9NQ1NfU0hJRlQ7CisKKwkJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihtb2QpOworCQl0eGMtPnBoeV9jb250cm9sIHw9IGNwdV90b19sZTMyKHBoeXJhdGUpOworCX0KKworCXBvd2VyIDw8PSBBUjkxNzBfVFhfUEhZX1RYX1BXUl9TSElGVDsKKwlwb3dlciAmPSBBUjkxNzBfVFhfUEhZX1RYX1BXUl9NQVNLOworCXR4Yy0+cGh5X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIocG93ZXIpOworCisJLyogc2V0IFRYIGNoYWlucyAqLworCWlmIChhci0+ZWVwcm9tLnR4X21hc2sgPT0gMSkgeworCQljaGFpbnMgPSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMTsKKwl9IGVsc2UgeworCQljaGFpbnMgPSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMjsKKworCQkvKiA+PSAzNk0gbGVnYWN5IE9GRE0gLSB1c2Ugb25seSBvbmUgY2hhaW4gKi8KKwkJaWYgKHJhdGUgJiYgcmF0ZS0+Yml0cmF0ZSA+PSAzNjApCisJCQljaGFpbnMgPSBBUjkxNzBfVFhfUEhZX1RYQ0hBSU5fMTsKKwl9CisJdHhjLT5waHlfY29udHJvbCB8PSBjcHVfdG9fbGUzMihjaGFpbnMgPDwgQVI5MTcwX1RYX1BIWV9UWENIQUlOX1NISUZUKTsKKworCWlmICh0eF9zdGF0dXMpIHsKKwkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX1JBVEVfUFJPQkUpOworCQkvKgorCQkgKiBXQVJOSU5HOgorCQkgKiBQdXR0aW5nIHRoZSBRb1MgcXVldWUgYml0cyBpbnRvIGFuIHVuZXhwbG9yZWQgdGVycml0b3J5IGlzCisJCSAqIGNlcnRhaW5seSBub3QgZWxlZ2FudC4KKwkJICoKKwkJICogSW4gbXkgZGVmZW5zZTogVGhpcyBpZGVhIHByb3ZpZGVzIGEgcmVhc29uYWJsZSB3YXkgdG8KKwkJICogc211Z2dsZSB2YWx1YWJsZSBpbmZvcm1hdGlvbiB0byB0aGUgdHhfc3RhdHVzIGNhbGxiYWNrLgorCQkgKiBBbHNvLCB0aGUgaWRlYSBiZWhpbmQgdGhpcyBiaXQtYWJ1c2UgY2FtZSBzdHJhaWdodCBmcm9tCisJCSAqIHRoZSBvcmlnaW5hbCBkcml2ZXIgY29kZS4KKwkJICovCisKKwkJdHhjLT5waHlfY29udHJvbCB8PQorCQkJY3B1X3RvX2xlMzIocXVldWUgPDwgQVI5MTcwX1RYX1BIWV9RT1NfU0hJRlQpOworCisJCWlmIChpbmZvLT5jb250cm9sLnN0YSkgeworCQkJc3RhX2luZm8gPSAodm9pZCAqKSBpbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7CisJCQlza2JfcXVldWVfdGFpbCgmc3RhX2luZm8tPnR4X3N0YXR1c1txdWV1ZV0sIHNrYik7CisJCX0gZWxzZSB7CisJCQlza2JfcXVldWVfdGFpbCgmYXItPmdsb2JhbF90eF9zdGF0dXMsIHNrYik7CisKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhhci0+aHctPndvcmtxdWV1ZSwKKwkJCQkJICAgJmFyLT50eF9zdGF0dXNfamFuaXRvciwKKwkJCQkJICAgbXNlY3NfdG9famlmZmllcygxMDApKTsKKwkJfQorCX0KKworCWVyciA9IGFyLT50eChhciwgc2tiLCB0eF9zdGF0dXMsIDApOworCWlmICh1bmxpa2VseSh0eF9zdGF0dXMgJiYgZXJyKSkgeworCQlpZiAoaW5mby0+Y29udHJvbC5zdGEpCisJCQlza2JfdW5saW5rKHNrYiwgJnN0YV9pbmZvLT50eF9zdGF0dXNbcXVldWVdKTsKKwkJZWxzZQorCQkJc2tiX3VubGluayhza2IsICZhci0+Z2xvYmFsX3R4X3N0YXR1cyk7CisJfQorCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworZXJyX2RlcXVldWU6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4tLTsKKwlhci0+dHhfc3RhdHNbcXVldWVdLmNvdW50LS07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXItPnR4X3N0YXRzX2xvY2ssIGZsYWdzKTsKKworZXJyX2ZyZWU6CisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlpbnQgZXJyID0gMDsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisKKwlpZiAoYXItPnZpZikgeworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWFyLT52aWYgPSBjb25mLT52aWY7CisJbWVtY3B5KGFyLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKworCWlmIChtb2RwYXJhbV9ub2h3Y3J5cHQgfHwgKGFyLT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpIHsKKwkJYXItPnJ4X3NvZnR3YXJlX2RlY3J5cHRpb24gPSB0cnVlOworCQlhci0+ZGlzYWJsZV9vZmZsb2FkID0gdHJ1ZTsKKwl9CisKKwlhci0+Y3VyX2ZpbHRlciA9IDA7CisJYXItPndhbnRfZmlsdGVyID0gQVI5MTcwX01BQ19SRUdfRlRGX0RFRkFVTFRTOworCWVyciA9IGFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKGFyKTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9jazsKKworCWVyciA9IGFyOTE3MF9zZXRfb3BlcmF0aW5nX21vZGUoYXIpOworCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKwlhci0+dmlmID0gTlVMTDsKKwlhci0+d2FudF9maWx0ZXIgPSAwOworCWFyOTE3MF91cGRhdGVfZnJhbWVfZmlsdGVyKGFyKTsKKwlhcjkxNzBfc2V0X2JlYWNvbl90aW1lcnMoYXIpOworCWRldl9rZnJlZV9za2IoYXItPmJlYWNvbik7CisJYXItPmJlYWNvbiA9IE5VTEw7CisJYXItPnNuaWZmZXJfZW5hYmxlZCA9IGZhbHNlOworCWFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uID0gZmFsc2U7CisJYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IGFyOTE3MF9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJaW50IGVyciA9IDA7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkFESU9fRU5BQkxFRCkgeworCQkvKiBUT0RPICovCisJCWVyciA9IDA7CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfTElTVEVOX0lOVEVSVkFMKSB7CisJCS8qIFRPRE8gKi8KKwkJZXJyID0gMDsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgeworCQkvKiBUT0RPICovCisJCWVyciA9IDA7CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKKwkJLyogVE9ETyAqLworCQllcnIgPSAwOworCX0KKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JFVFJZX0xJTUlUUykgeworCQkvKgorCQkgKiBpcyBpdCBsb25nX2ZyYW1lX21heF90eF9jb3VudCBvciBzaG9ydF9mcmFtZV9tYXhfdHhfY291bnQ/CisJCSAqLworCisJCWVyciA9IGFyOTE3MF9zZXRfaHdyZXRyeV9saW1pdChhciwKKwkJCWFyLT5ody0+Y29uZi5sb25nX2ZyYW1lX21heF90eF9jb3VudCk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpIHsKKwkJZXJyID0gYXI5MTcwX3NldF9iZWFjb25fdGltZXJzKGFyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpIHsKKwkJZXJyID0gYXI5MTcwX3NldF9jaGFubmVsKGFyLCBody0+Y29uZi5jaGFubmVsLAorCQkJCQkgQVI5MTcwX1JGSV9OT05FLCBBUjkxNzBfQldfMjApOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCS8qIGFkanVzdCBzbG90IHRpbWUgZm9yIDUgR0h6ICovCisJCWlmIChody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19TTE9UX1RJTUUsCisJCQkJCSAgICAgICA5IDw8IDEwKTsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhcjkxNzBfb3BfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCWludCBlcnIgPSAwOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKworCWlmIChjb25mLT5jaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQlNTSUQpIHsKKwkJbWVtY3B5KGFyLT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJZXJyID0gYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7CisJfQorCisJaWYgKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pIHsKKwkJZXJyID0gYXI5MTcwX3VwZGF0ZV9iZWFjb24oYXIpOworCisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwkJZXJyID0gYXI5MTcwX3NldF9iZWFjb25fdGltZXJzKGFyKTsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX3NldF9maWx0ZXJzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXI5MTcwLAorCQkJCQkgZmlsdGVyX2NvbmZpZ193b3JrKTsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKwlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoYXItPmZpbHRlcl9jaGFuZ2VkICYgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX1BST01JU0MpIHsKKwkJZXJyID0gYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7CisJCWlmIChlcnIpCisJCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAoYXItPmZpbHRlcl9jaGFuZ2VkICYgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX01VTFRJQ0FTVCkgeworCQllcnIgPSBhcjkxNzBfdXBkYXRlX211bHRpY2FzdChhcik7CisJCWlmIChlcnIpCisJCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAoYXItPmZpbHRlcl9jaGFuZ2VkICYgQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX0ZSQU1FRklMVEVSKQorCQllcnIgPSBhcjkxNzBfdXBkYXRlX2ZyYW1lX2ZpbHRlcihhcik7CisKK3VubG9jazoKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9vcF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgICAgICAgdW5zaWduZWQgaW50ICpuZXdfZmxhZ3MsCisJCQkJICAgICAgIGludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKworCS8qIG1hc2sgc3VwcG9ydGVkIGZsYWdzICovCisJKm5ld19mbGFncyAmPSBGSUZfQUxMTVVMVEkgfCBGSUZfQ09OVFJPTCB8IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwKKwkJICAgICAgRklGX1BST01JU0NfSU5fQlNTOworCisJLyoKKwkgKiBXZSBjYW4gc3VwcG9ydCBtb3JlIGJ5IHNldHRpbmcgdGhlIHNuaWZmZXIgYml0IGFuZAorCSAqIHRoZW4gY2hlY2tpbmcgdGhlIGVycm9yIGZsYWdzLCBsYXRlci4KKwkgKi8KKworCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCWlmICgqbmV3X2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCQlhci0+d2FudF9tY19oYXNoID0gfjBVTEw7CisJCX0gZWxzZSB7CisJCQl1NjQgbWNoYXNoOworCQkJaW50IGk7CisKKwkJCS8qIGFsd2F5cyBnZXQgYnJvYWRjYXN0IGZyYW1lcyAqLworCQkJbWNoYXNoID0gMVVMTCA8PCAoMHhmZj4+Mik7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7CisJCQkJaWYgKFdBUk5fT04oIW1jbGlzdCkpCisJCQkJCWJyZWFrOworCQkJCW1jaGFzaCB8PSAxVUxMIDw8IChtY2xpc3QtPmRtaV9hZGRyWzVdID4+IDIpOworCQkJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKKwkJCX0KKwkJYXItPndhbnRfbWNfaGFzaCA9IG1jaGFzaDsKKwkJfQorCQlhci0+ZmlsdGVyX2NoYW5nZWQgfD0gQVI5MTcwX0ZJTFRFUl9DSEFOR0VEX01VTFRJQ0FTVDsKKwl9CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9DT05UUk9MKSB7CisJCXUzMiBmaWx0ZXIgPSBBUjkxNzBfTUFDX1JFR19GVEZfUFNQT0xMIHwKKwkJCSAgICAgQVI5MTcwX01BQ19SRUdfRlRGX1JUUyB8CisJCQkgICAgIEFSOTE3MF9NQUNfUkVHX0ZURl9DVFMgfAorCQkJICAgICBBUjkxNzBfTUFDX1JFR19GVEZfQUNLIHwKKwkJCSAgICAgQVI5MTcwX01BQ19SRUdfRlRGX0NGRSB8CisJCQkgICAgIEFSOTE3MF9NQUNfUkVHX0ZURl9DRkVfQUNLOworCisJCWlmICgqbmV3X2ZsYWdzICYgRklGX0NPTlRST0wpCisJCQlhci0+d2FudF9maWx0ZXIgPSBhci0+Y3VyX2ZpbHRlciB8IGZpbHRlcjsKKwkJZWxzZQorCQkJYXItPndhbnRfZmlsdGVyID0gYXItPmN1cl9maWx0ZXIgJiB+ZmlsdGVyOworCisJCWFyLT5maWx0ZXJfY2hhbmdlZCB8PSBBUjkxNzBfRklMVEVSX0NIQU5HRURfRlJBTUVGSUxURVI7CisJfQorCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpIHsKKwkJYXItPnNuaWZmZXJfZW5hYmxlZCA9ICgoKm5ld19mbGFncykgJiBGSUZfUFJPTUlTQ19JTl9CU1MpICE9IDA7CisJCWFyLT5maWx0ZXJfY2hhbmdlZCB8PSBBUjkxNzBfRklMVEVSX0NIQU5HRURfUFJPTUlTQzsKKwl9CisKKwlpZiAobGlrZWx5KElTX1NUQVJURUQoYXIpKSkKKwkJcXVldWVfd29yayhhci0+aHctPndvcmtxdWV1ZSwgJmFyLT5maWx0ZXJfY29uZmlnX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCisJCQkJICAgICAgIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJaW50IGVyciA9IDA7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKKwkJYXItPnN0YXRlID0gYnNzX2NvbmYtPmFzc29jID8gQVI5MTcwX0FTU09DSUFURUQgOiBhci0+c3RhdGU7CisKKyNpZm5kZWYgQ09ORklHX0FSOTE3MF9MRURTCisJCS8qIGVuYWJsZSBhc3NvYyBMRUQuICovCisJCWVyciA9IGFyOTE3MF9zZXRfbGVkc19zdGF0ZShhciwgYnNzX2NvbmYtPmFzc29jID8gMiA6IDApOworI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfSFQpIHsKKwkJLyogVE9ETyAqLworCQllcnIgPSAwOworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHsKKwkJdTMyIHNsb3R0aW1lID0gMjA7CisKKwkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCkKKwkJCXNsb3R0aW1lID0gOTsKKworCQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfU0xPVF9USU1FLCBzbG90dGltZSA8PCAxMCk7CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUykgeworCQl1MzIgY2NrLCBvZmRtOworCisJCWlmIChody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJCW9mZG0gPSBic3NfY29uZi0+YmFzaWNfcmF0ZXM7CisJCQljY2sgPSAwOworCQl9IGVsc2UgeworCQkJLyogZm91ciBjY2sgcmF0ZXMgKi8KKwkJCWNjayA9IGJzc19jb25mLT5iYXNpY19yYXRlcyAmIDB4ZjsKKwkJCW9mZG0gPSBic3NfY29uZi0+YmFzaWNfcmF0ZXMgPj4gNDsKKwkJfQorCQlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQkFTSUNfUkFURSwKKwkJCQlvZmRtIDw8IDggfCBjY2spOworCX0KKworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKwllcnIgPSBhcjkxNzBfcmVnd3JpdGVfcmVzdWx0KCk7CisJbXV0ZXhfdW5sb2NrKCZhci0+bXV0ZXgpOworfQorCitzdGF0aWMgdTY0IGFyOTE3MF9vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisJaW50IGVycjsKKwl1MzIgdHNmX2xvdzsKKwl1MzIgdHNmX2hpZ2g7CisJdTY0IHRzZjsKKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisJZXJyID0gYXI5MTcwX3JlYWRfcmVnKGFyLCBBUjkxNzBfTUFDX1JFR19UU0ZfTCwgJnRzZl9sb3cpOworCWlmICghZXJyKQorCQllcnIgPSBhcjkxNzBfcmVhZF9yZWcoYXIsIEFSOTE3MF9NQUNfUkVHX1RTRl9ILCAmdHNmX2hpZ2gpOworCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKKworCWlmIChXQVJOX09OKGVycikpCisJCXJldHVybiAwOworCisJdHNmID0gdHNmX2hpZ2g7CisJdHNmID0gKHRzZiA8PCAzMikgfCB0c2ZfbG93OworCXJldHVybiB0c2Y7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlpbnQgZXJyID0gMCwgaTsKKwl1OCBrdHlwZTsKKworCWlmICgoIWFyLT52aWYpIHx8IChhci0+ZGlzYWJsZV9vZmZsb2FkKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc3dpdGNoIChrZXktPmFsZykgeworCWNhc2UgQUxHX1dFUDoKKwkJaWYgKGtleS0+a2V5bGVuID09IExFTl9XRVA0MCkKKwkJCWt0eXBlID0gQVI5MTcwX0VOQ19BTEdfV0VQNjQ7CisJCWVsc2UKKwkJCWt0eXBlID0gQVI5MTcwX0VOQ19BTEdfV0VQMTI4OworCQlicmVhazsKKwljYXNlIEFMR19US0lQOgorCQlrdHlwZSA9IEFSOTE3MF9FTkNfQUxHX1RLSVA7CisJCWJyZWFrOworCWNhc2UgQUxHX0NDTVA6CisJCWt0eXBlID0gQVI5MTcwX0VOQ19BTEdfQUVTQ0NNUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCW11dGV4X2xvY2soJmFyLT5tdXRleCk7CisJaWYgKGNtZCA9PSBTRVRfS0VZKSB7CisJCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKSB7CisJCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogZ3JvdXAga2V5cyBuZWVkIGFsbC16ZXJvZXMgYWRkcmVzcyAqLworCQlpZiAoIShrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSkKKwkJCXN0YSA9IE5VTEw7CisKKwkJaWYgKGtleS0+ZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0UpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQorCQkJCWlmICghKGFyLT51c2Vka2V5cyAmIEJJVChpKSkpCisJCQkJCWJyZWFrOworCQkJaWYgKGkgPT0gNjQpIHsKKwkJCQlhci0+cnhfc29mdHdhcmVfZGVjcnlwdGlvbiA9IHRydWU7CisJCQkJYXI5MTcwX3NldF9vcGVyYXRpbmdfbW9kZShhcik7CisJCQkJZXJyID0gLUVOT1NQQzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWkgPSA2NCArIGtleS0+a2V5aWR4OworCQl9CisKKwkJa2V5LT5od19rZXlfaWR4ID0gaTsKKworCQllcnIgPSBhcjkxNzBfdXBsb2FkX2tleShhciwgaSwgc3RhID8gc3RhLT5hZGRyIDogTlVMTCwga3R5cGUsIDAsCisJCQkJCWtleS0+a2V5LCBtaW5fdCh1OCwgMTYsIGtleS0+a2V5bGVuKSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKworCQlpZiAoa2V5LT5hbGcgPT0gQUxHX1RLSVApIHsKKwkJCWVyciA9IGFyOTE3MF91cGxvYWRfa2V5KGFyLCBpLCBzdGEgPyBzdGEtPmFkZHIgOiBOVUxMLAorCQkJCQkJa3R5cGUsIDEsIGtleS0+a2V5ICsgMTYsIDE2KTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBvdXQ7CisKKwkJCS8qCisJCQkgKiBoYXJkd2FyZSBpcyBub3QgY2FwYWJsZSBnZW5lcmF0aW5nIHRoZSBNTUlDCisJCQkgKiBmb3IgZnJhZ21lbnRlZCBmcmFtZXMhCisJCQkgKi8KKwkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM7CisJCX0KKworCQlpZiAoaSA8IDY0KQorCQkJYXItPnVzZWRrZXlzIHw9IEJJVChpKTsKKworCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVjsKKwl9IGVsc2UgeworCQlpZiAodW5saWtlbHkoIUlTX1NUQVJURUQoYXIpKSkgeworCQkJLyogVGhlIGRldmljZSBpcyBnb25lLi4uIHRvZ2V0aGVyIHdpdGggdGhlIGtleSA7LSkgKi8KKwkJCWVyciA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWVyciA9IGFyOTE3MF9kaXNhYmxlX2tleShhciwga2V5LT5od19rZXlfaWR4KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCisJCWlmIChrZXktPmh3X2tleV9pZHggPCA2NCkgeworCQkJYXItPnVzZWRrZXlzICY9IH5CSVQoa2V5LT5od19rZXlfaWR4KTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IGFyOTE3MF91cGxvYWRfa2V5KGFyLCBrZXktPmh3X2tleV9pZHgsIE5VTEwsCisJCQkJCQlBUjkxNzBfRU5DX0FMR19OT05FLCAwLAorCQkJCQkJTlVMTCwgMCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCisJCQlpZiAoa2V5LT5hbGcgPT0gQUxHX1RLSVApIHsKKwkJCQllcnIgPSBhcjkxNzBfdXBsb2FkX2tleShhciwga2V5LT5od19rZXlfaWR4LAorCQkJCQkJCU5VTEwsCisJCQkJCQkJQVI5MTcwX0VOQ19BTEdfTk9ORSwgMSwKKwkJCQkJCQlOVUxMLCAwKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KKworCQl9CisJfQorCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfUk9MTF9DQUxMX1RCTF9MLCBhci0+dXNlZGtleXMpOworCWFyOTE3MF9yZWd3cml0ZShBUjkxNzBfTUFDX1JFR19ST0xMX0NBTExfVEJMX0gsIGFyLT51c2Vka2V5cyA+PiAzMik7CisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmYXItPm11dGV4KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OworCXN0cnVjdCBhcjkxNzBfc3RhX2luZm8gKmluZm8gPSAodm9pZCAqKSBzdGEtPmRydl9wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IGk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU1RBX05PVElGWV9BREQ6CisJCWZvciAoaSA9IDA7IGkgPCBhci0+aHctPnF1ZXVlczsgaSsrKQorCQkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaW5mby0+dHhfc3RhdHVzW2ldKTsKKwkJYnJlYWs7CisKKwljYXNlIFNUQV9OT1RJRllfUkVNT1ZFOgorCisJCS8qCisJCSAqIHRyYW5zZmVyIGFsbCBvdXRzdGFuZGluZyBmcmFtZXMgdGhhdCBuZWVkIGEgdHhfc3RhdHVzCisJCSAqIHJlcG9ydHMgdG8gdGhlIGdsb2JhbCB0eF9zdGF0dXMgcXVldWUKKwkJICovCisKKwkJZm9yIChpID0gMDsgaSA8IGFyLT5ody0+cXVldWVzOyBpKyspIHsKKwkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmluZm8tPnR4X3N0YXR1c1tpXSkpKSB7CisjaWZkZWYgQVI5MTcwX1FVRVVFX0RFQlVHCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBxdWV1ZWluZyBmcmFtZSBpbiAiCisJCQkJCSAgImdsb2JhbCB0eF9zdGF0dXMgcXVldWUgPT5cbiIsCisJCQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOworCisJCQkJYXI5MTcwX3ByaW50X3R4aGVhZGVyKGFyLCBza2IpOworI2VuZGlmIC8qIEFSOTE3MF9RVUVVRV9ERUJVRyAqLworCQkJCXNrYl9xdWV1ZV90YWlsKCZhci0+Z2xvYmFsX3R4X3N0YXR1cywgc2tiKTsKKwkJCX0KKwkJfQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoYXItPmh3LT53b3JrcXVldWUsICZhci0+dHhfc3RhdHVzX2phbml0b3IsCisJCQkJICAgbXNlY3NfdG9famlmZmllcygxMDApKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwl1MzIgdmFsOworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZhci0+bXV0ZXgpOworCWVyciA9IGFyOTE3MF9yZWFkX3JlZyhhciwgQVI5MTcwX01BQ19SRUdfVFhfUkVUUlksICZ2YWwpOworCWFyLT5zdGF0cy5kb3QxMUFDS0ZhaWx1cmVDb3VudCArPSB2YWw7CisKKwltZW1jcHkoc3RhdHMsICZhci0+c3RhdHMsIHNpemVvZigqc3RhdHMpKTsKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnR4X3N0YXRzKQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CisKKwlzcGluX2xvY2tfYmgoJmFyLT50eF9zdGF0c19sb2NrKTsKKwltZW1jcHkodHhfc3RhdHMsIGFyLT50eF9zdGF0cywgc2l6ZW9mKHR4X3N0YXRzWzBdKSAqIGh3LT5xdWV1ZXMpOworCXNwaW5fdW5sb2NrX2JoKCZhci0+dHhfc3RhdHNfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAorCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW0pCit7CisJc3RydWN0IGFyOTE3MCAqYXIgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmYXItPm11dGV4KTsKKwlpZiAoKHBhcmFtKSAmJiAhKHF1ZXVlID4gYXItPmh3LT5xdWV1ZXMpKSB7CisJCW1lbWNweSgmYXItPmVkY2ZbYXI5MTcwX3Fvc19od21hcFtxdWV1ZV1dLAorCQkgICAgICAgcGFyYW0sIHNpemVvZigqcGFyYW0pKTsKKworCQlyZXQgPSBhcjkxNzBfc2V0X3Fvcyhhcik7CisJfSBlbHNlCisJCXJldCA9IC1FSU5WQUw7CisKKwltdXRleF91bmxvY2soJmFyLT5tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGFyOTE3MF9vcHMgPSB7CisJLnN0YXJ0CQkJPSBhcjkxNzBfb3Bfc3RhcnQsCisJLnN0b3AJCQk9IGFyOTE3MF9vcF9zdG9wLAorCS50eAkJCT0gYXI5MTcwX29wX3R4LAorCS5hZGRfaW50ZXJmYWNlCQk9IGFyOTE3MF9vcF9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlCT0gYXI5MTcwX29wX3JlbW92ZV9pbnRlcmZhY2UsCisJLmNvbmZpZwkJCT0gYXI5MTcwX29wX2NvbmZpZywKKwkuY29uZmlnX2ludGVyZmFjZQk9IGFyOTE3MF9vcF9jb25maWdfaW50ZXJmYWNlLAorCS5jb25maWd1cmVfZmlsdGVyCT0gYXI5MTcwX29wX2NvbmZpZ3VyZV9maWx0ZXIsCisJLmNvbmZfdHgJCT0gYXI5MTcwX2NvbmZfdHgsCisJLmJzc19pbmZvX2NoYW5nZWQJPSBhcjkxNzBfb3BfYnNzX2luZm9fY2hhbmdlZCwKKwkuZ2V0X3RzZgkJPSBhcjkxNzBfb3BfZ2V0X3RzZiwKKwkuc2V0X2tleQkJPSBhcjkxNzBfc2V0X2tleSwKKwkuc3RhX25vdGlmeQkJPSBhcjkxNzBfc3RhX25vdGlmeSwKKwkuZ2V0X3N0YXRzCQk9IGFyOTE3MF9nZXRfc3RhdHMsCisJLmdldF90eF9zdGF0cwkJPSBhcjkxNzBfZ2V0X3R4X3N0YXRzLAorfTsKKwordm9pZCAqYXI5MTcwX2FsbG9jKHNpemVfdCBwcml2X3NpemUpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGFyOTE3MCAqYXI7CisJaW50IGk7CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhwcml2X3NpemUsICZhcjkxNzBfb3BzKTsKKwlpZiAoIWh3KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWFyID0gaHctPnByaXY7CisJYXItPmh3ID0gaHc7CisKKwltdXRleF9pbml0KCZhci0+bXV0ZXgpOworCXNwaW5fbG9ja19pbml0KCZhci0+Y21kbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmFyLT50eF9zdGF0c19sb2NrKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZhci0+Z2xvYmFsX3R4X3N0YXR1cyk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYXItPmdsb2JhbF90eF9zdGF0dXNfd2FzdGUpOworCUlOSVRfV09SSygmYXItPmZpbHRlcl9jb25maWdfd29yaywgYXI5MTcwX3NldF9maWx0ZXJzKTsKKwlJTklUX1dPUksoJmFyLT5iZWFjb25fd29yaywgYXI5MTcwX25ld19iZWFjb24pOworCUlOSVRfREVMQVlFRF9XT1JLKCZhci0+dHhfc3RhdHVzX2phbml0b3IsIGFyOTE3MF90eF9zdGF0dXNfamFuaXRvcik7CisKKwkvKiBhbGwgaHcgc3VwcG9ydHMgMi40IEdIeiwgc28gc2V0IGNoYW5uZWwgdG8gMSBieSBkZWZhdWx0ICovCisJYXItPmNoYW5uZWwgPSAmYXI5MTcwXzJnaHpfY2hhbnRhYmxlWzBdOworCisJLyogZmlyc3QgcGFydCBvZiB3aXBoeSBpbml0ICovCisJYXItPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKKwkJCQkJIEJJVChOTDgwMjExX0lGVFlQRV9XRFMpIHwKKwkJCQkJIEJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CisJYXItPmh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJCSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKKwkJCSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCQkgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKKworCWFyLT5ody0+cXVldWVzID0gX19BUjkxNzBfTlVNX1RYUTsKKwlhci0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gODsKKwlhci0+aHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGFyOTE3MF9zdGFfaW5mbyk7CisKKwlhci0+aHctPm1heF9yYXRlcyA9IDE7CisJYXItPmh3LT5tYXhfcmF0ZV90cmllcyA9IDM7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhci0+bm9pc2UpOyBpKyspCisJCWFyLT5ub2lzZVtpXSA9IC05NTsgLyogQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgKi8KKworCXJldHVybiBhcjsKK30KKworc3RhdGljIGludCBhcjkxNzBfcmVhZF9lZXByb20oc3RydWN0IGFyOTE3MCAqYXIpCit7CisjZGVmaW5lIFJXCTgJLyogbnVtYmVyIG9mIHdvcmRzIHRvIHJlYWQgYXQgb25jZSAqLworI2RlZmluZSBSQgkoc2l6ZW9mKHUzMikgKiBSVykKKwlERUNMQVJFX01BQ19CVUYobWJ1Zik7CisJdTggKmVlcHJvbSA9ICh2b2lkICopJmFyLT5lZXByb207CisJdTggKmFkZHIgPSBhci0+ZWVwcm9tLm1hY19hZGRyZXNzOworCV9fbGUzMiBvZmZzZXRzW1JXXTsKKwlpbnQgaSwgaiwgZXJyLCBiYW5kcyA9IDA7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKGFyLT5lZXByb20pICYgMyk7CisKKwlCVUlMRF9CVUdfT04oUkIgPiBBUjkxNzBfTUFYX0NNRF9MRU4gLSA0KTsKKyNpZm5kZWYgX19DSEVDS0VSX18KKwkvKiBkb24ndCB3YW50IHRvIGhhbmRsZSB0cmFpbGluZyByZW1haW5zICovCisJQlVJTERfQlVHX09OKHNpemVvZihhci0+ZWVwcm9tKSAlIFJCKTsKKyNlbmRpZgorCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihhci0+ZWVwcm9tKS9SQjsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBSVzsgaisrKQorCQkJb2Zmc2V0c1tqXSA9IGNwdV90b19sZTMyKEFSOTE3MF9FRVBST01fU1RBUlQgKworCQkJCQkJIFJCICogaSArIDQgKiBqKTsKKworCQllcnIgPSBhci0+ZXhlY19jbWQoYXIsIEFSOTE3MF9DTURfUlJFRywKKwkJCQkgICBSQiwgKHU4ICopICZvZmZzZXRzLAorCQkJCSAgIFJCLCBlZXByb20gKyBSQiAqIGkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKyN1bmRlZiBSVworI3VuZGVmIFJCCisKKwlpZiAoYXItPmVlcHJvbS5sZW5ndGggPT0gY3B1X3RvX2xlMTYoMHhGRkZGKSkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKGFyLT5lZXByb20ub3BlcmF0aW5nX2ZsYWdzICYgQVI5MTcwX09QRkxBR18yR0haKSB7CisJCWFyLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmFyOTE3MF9iYW5kXzJHSHo7CisJCWJhbmRzKys7CisJfQorCWlmIChhci0+ZWVwcm9tLm9wZXJhdGluZ19mbGFncyAmIEFSOTE3MF9PUEZMQUdfNUdIWikgeworCQlhci0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9ICZhcjkxNzBfYmFuZF81R0h6OworCQliYW5kcysrOworCX0KKwkvKgorCSAqIEkgbWVhc3VyZWQgdGhpcywgYSBiYW5kc3dpdGNoIHRha2VzIHJvdWdobHkKKwkgKiAxMzUgbXMgYW5kIGEgZnJlcXVlbmN5IHN3aXRjaCBhYm91dCA4MC4KKwkgKgorCSAqIEZJWE1FOiBtZWFzdXJlIHRoZXNlIHZhbHVlcyBhZ2FpbiBvbmNlIEVFUFJPTSBzZXR0aW5ncworCSAqCSAgYXJlIHVzZWQsIHRoYXQgd2lsbCBpbmZsdWVuY2UgdGhlbSEKKwkgKi8KKwlpZiAoYmFuZHMgPT0gMikKKwkJYXItPmh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTM1ICogMTAwMDsKKwllbHNlCisJCWFyLT5ody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDgwICogMTAwMDsKKworCS8qIHNlY29uZCBwYXJ0IG9mIHdpcGh5IGluaXQgKi8KKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihhci0+aHcsIGFkZHIpOworCisJcmV0dXJuIGJhbmRzID8gMCA6IC1FSU5WQUw7Cit9CisKK2ludCBhcjkxNzBfcmVnaXN0ZXIoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBkZXZpY2UgKnBkZXYpCit7CisJaW50IGVycjsKKworCS8qIHRyeSB0byByZWFkIEVFUFJPTSwgaW5pdCBNQUMgYWRkciAqLworCWVyciA9IGFyOTE3MF9yZWFkX2VlcHJvbShhcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJZXJyID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGFyLT5odyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJZXJyID0gYXI5MTcwX2luaXRfbGVkcyhhcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdW5yZWc7CisKKyNpZmRlZiBDT05GSUdfQVI5MTcwX0xFRFMKKwllcnIgPSBhcjkxNzBfcmVnaXN0ZXJfbGVkcyhhcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfdW5yZWc7CisjZW5kaWYgLyogQ09ORklHX0FSOTE3MF9MRURTICovCisKKwlkZXZfaW5mbyhwZGV2LCAiQXRoZXJvcyBBUjkxNzAgaXMgcmVnaXN0ZXJlZCBhcyAnJXMnXG4iLAorCQkgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisKKwlyZXR1cm4gZXJyOworCitlcnJfdW5yZWc6CisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXItPmh3KTsKKworZXJyX291dDoKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGFyOTE3MF91bnJlZ2lzdGVyKHN0cnVjdCBhcjkxNzAgKmFyKQoreworI2lmZGVmIENPTkZJR19BUjkxNzBfTEVEUworCWFyOTE3MF91bnJlZ2lzdGVyX2xlZHMoYXIpOworI2VuZGlmIC8qIENPTkZJR19BUjkxNzBfTEVEUyAqLworCisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXItPmh3KTsKKwltdXRleF9kZXN0cm95KCZhci0+bXV0ZXgpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTIwNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvcGh5LmMKQEAgLTAsMCArMSwxMjQwIEBACisvKgorICogQXRoZXJvcyBBUjkxNzAgZHJpdmVyCisgKgorICogUEhZIGFuZCBSRiBjb2RlCisgKgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHNlZQorICogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLy4KKyAqCisgKiBUaGlzIGZpbGUgaW5jb3Jwb3JhdGVzIHdvcmsgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKKyAqIHBlcm1pc3Npb24gbm90aWNlOgorICogICAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucywgSW5jLgorICoKKyAqICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiAgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqICAgIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiAgICBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiAgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqICAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiAgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KKyNpbmNsdWRlICJhcjkxNzAuaCIKKyNpbmNsdWRlICJjbWQuaCIKKworc3RhdGljIGludCBhcjkxNzBfaW5pdF9wb3dlcl9jYWwoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4OTkzYywgMHg3Zik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHg5OTM0LCAweDNmM2YzZjNmKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweDk5MzgsIDB4M2YzZjNmM2YpOworCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTIzNCwgMHgzZjNmM2YzZik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHhhMjM4LCAweDNmM2YzZjNmKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEzOGMsIDB4M2YzZjNmM2YpOworCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTM5MCwgMHgzZjNmM2YzZik7CisJYXI5MTcwX3JlZ3dyaXRlKDB4MWJjMDAwICsgMHhhM2NjLCAweDNmM2YzZjNmKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYmMwMDAgKyAweGEzZDAsIDB4M2YzZjNmM2YpOworCWFyOTE3MF9yZWd3cml0ZSgweDFiYzAwMCArIDB4YTNkNCwgMHgzZjNmM2YzZik7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworc3RydWN0IGFyOTE3MF9waHlfaW5pdCB7CisJdTMyIHJlZywgXzVnaHpfMjAsIF81Z2h6XzQwLCBfMmdoel80MCwgXzJnaHpfMjA7Cit9OworCitzdGF0aWMgc3RydWN0IGFyOTE3MF9waHlfaW5pdCBhcjU0MTZfcGh5X2luaXRbXSA9IHsKKwl7IDB4MWM1ODAwLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCB9LAorCXsgMHgxYzU4MDQsIDB4MDAwMDAzMDAsIDB4MDAwMDAzYzQsIDB4MDAwMDAzYzQsIDB4MDAwMDAzMDAsIH0sCisJeyAweDFjNTgwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1ODBjLCAweGFkODQ4ZTE5LCAweGFkODQ4ZTE5LCAweGFkODQ4ZTE5LCAweGFkODQ4ZTE5LCB9LAorCXsgMHgxYzU4MTAsIDB4N2QxNGUwMDAsIDB4N2QxNGUwMDAsIDB4N2QxNGUwMDAsIDB4N2QxNGUwMDAsIH0sCisJeyAweDFjNTgxNCwgMHg5YzBhOWY2YiwgMHg5YzBhOWY2YiwgMHg5YzBhOWY2YiwgMHg5YzBhOWY2YiwgfSwKKwl7IDB4MWM1ODE4LCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCB9LAorCXsgMHgxYzU4MWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTgyMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgfSwKKwl7IDB4MWM1ODI0LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCB9LAorCXsgMHgxYzU4MjgsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIH0sCisJeyAweDFjNTgyYywgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgfSwKKwl7IDB4MWM1ODMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU4MzQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIH0sCisJeyAweDFjNTgzOCwgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgfSwKKwl7IDB4MWM1ODNjLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCAweDAwMjAwNDAwLCB9LAorCXsgMHgxYzU4NDAsIDB4MjA2YTAwMmUsIDB4MjA2YTAwMmUsIDB4MjA2YTAwMmUsIDB4MjA2YTAwMmUsIH0sCisJeyAweDFjNTg0NCwgMHgxMzcyMTYxZSwgMHgxMzcyMWMxZSwgMHgxMzcyMWMyNCwgMHgxMzcyMTZhNCwgfSwKKwl7IDB4MWM1ODQ4LCAweDAwMWE2YTY1LCAweDAwMWE2YTY1LCAweDAwMTk3YTY4LCAweDAwMTk3YTY4LCB9LAorCXsgMHgxYzU4NGMsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIH0sCisJeyAweDFjNTg1MCwgMHg2YzQ4YjRlNCwgMHg2YzQ4YjRlNCwgMHg2YzQ4YjBlNCwgMHg2YzQ4YjBlNCwgfSwKKwl7IDB4MWM1ODU0LCAweDAwMDAwODU5LCAweDAwMDAwODU5LCAweDAwMDAwODU5LCAweDAwMDAwODU5LCB9LAorCXsgMHgxYzU4NTgsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIH0sCisJeyAweDFjNTg1YywgMHgzMTM5NWM1ZSwgMHgzMTM5NWM1ZSwgMHgzMTM5NWM1ZSwgMHgzMTM5NWM1ZSwgfSwKKwl7IDB4MWM1ODYwLCAweDAwMDRkZDEwLCAweDAwMDRkZDEwLCAweDAwMDRkZDIwLCAweDAwMDRkZDIwLCB9LAorCXsgMHgxYzU4NjgsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIH0sCisJeyAweDFjNTg2YywgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgfSwKKwl7IDB4MWM1OTAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5MDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTkwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OTBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5MTQsIDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA4OTgsIDB4MDAwMDA4OTgsIH0sCisJeyAweDFjNTkxOCwgMHgwMDAwMDExOCwgMHgwMDAwMDIzMCwgMHgwMDAwMDI2OCwgMHgwMDAwMDEzNCwgfSwKKwl7IDB4MWM1OTFjLCAweDEwMDAwZmZmLCAweDEwMDAwZmZmLCAweDEwMDAwZmZmLCAweDEwMDAwZmZmLCB9LAorCXsgMHgxYzU5MjAsIDB4MDUxMDA4MWMsIDB4MDUxMDA4MWMsIDB4MDUxMDAwMWMsIDB4MDUxMDAwMWMsIH0sCisJeyAweDFjNTkyNCwgMHhkMDA1OGExNSwgMHhkMDA1OGExNSwgMHhkMDA1OGExNSwgMHhkMDA1OGExNSwgfSwKKwl7IDB4MWM1OTI4LCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCB9LAorCXsgMHgxYzU5MmMsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIH0sCisJeyAweDFjNTkzNCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM1OTM4LCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCB9LAorCXsgMHgxYzU5M2MsIDB4MDAwMDAwN2YsIDB4MDAwMDAwN2YsIDB4MDAwMDAwN2YsIDB4MDAwMDAwN2YsIH0sCisJeyAweDFjNTk0NCwgMHhkZmI4MTAyMCwgMHhkZmI4MTAyMCwgMHhkZmI4MTAyMCwgMHhkZmI4MTAyMCwgfSwKKwl7IDB4MWM1OTQ4LCAweDkyODBiMjEyLCAweDkyODBiMjEyLCAweDkyODBiMjEyLCAweDkyODBiMjEyLCB9LAorCXsgMHgxYzU5NGMsIDB4MDAwMjAwMjgsIDB4MDAwMjAwMjgsIDB4MDAwMjAwMjgsIDB4MDAwMjAwMjgsIH0sCisJeyAweDFjNTk1NCwgMHg1ZDUwZTE4OCwgMHg1ZDUwZTE4OCwgMHg1ZDUwZTE4OCwgMHg1ZDUwZTE4OCwgfSwKKwl7IDB4MWM1OTU4LCAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCAweDAwMDgxZmZmLCB9LAorCXsgMHgxYzU5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIH0sCisJeyAweDFjNTk2NCwgMHgwMDAwMTEyMCwgMHgwMDAwMTEyMCwgMHgwMDAwMTEyMCwgMHgwMDAwMTEyMCwgfSwKKwl7IDB4MWM1OTcwLCAweDE5MGZiNTE1LCAweDE5MGZiNTE1LCAweDE5MGZiNTE1LCAweDE5MGZiNTE1LCB9LAorCXsgMHgxYzU5NzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTk3OCwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgfSwKKwl7IDB4MWM1OTdjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5ODAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTk4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OTg4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5OGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTk5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OTk0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5OTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTk5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OWEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5YTQsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIH0sCisJeyAweDFjNTlhOCwgMHgwMDFmZmYwMCwgMHgwMDFmZmYwMCwgMHgwMDFmZmYwMCwgMHgwMDFmZmYwMCwgfSwKKwl7IDB4MWM1OWFjLCAweDAwNmYwMGM0LCAweDAwNmYwMGM0LCAweDAwNmYwMGM0LCAweDAwNmYwMGM0LCB9LAorCXsgMHgxYzU5YjAsIDB4MDMwNTEwMDAsIDB4MDMwNTEwMDAsIDB4MDMwNTEwMDAsIDB4MDMwNTEwMDAsIH0sCisJeyAweDFjNTliNCwgMHgwMDAwMDgyMCwgMHgwMDAwMDgyMCwgMHgwMDAwMDgyMCwgMHgwMDAwMDgyMCwgfSwKKwl7IDB4MWM1OWMwLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCAweDAzODkxOWJlLCB9LAorCXsgMHgxYzU5YzQsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIDB4MDYzMzZmNzcsIH0sCisJeyAweDFjNTljOCwgMHg2MGY2NTMyYywgMHg2MGY2NTMyYywgMHg2MGY2NTMyYywgMHg2MGY2NTMyYywgfSwKKwl7IDB4MWM1OWNjLCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCAweDA4ZjE4NmM4LCB9LAorCXsgMHgxYzU5ZDAsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIDB4MDAwNDYzODQsIH0sCisJeyAweDFjNTlkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1OWQ4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5ZGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNTllMCwgMHgwMDAwMDIwMCwgMHgwMDAwMDIwMCwgMHgwMDAwMDIwMCwgMHgwMDAwMDIwMCwgfSwKKwl7IDB4MWM1OWU0LCAweDY0NjQ2NDY0LCAweDY0NjQ2NDY0LCAweDY0NjQ2NDY0LCAweDY0NjQ2NDY0LCB9LAorCXsgMHgxYzU5ZTgsIDB4M2M3ODc4NzgsIDB4M2M3ODc4NzgsIDB4M2M3ODc4NzgsIDB4M2M3ODc4NzgsIH0sCisJeyAweDFjNTllYywgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgMHgwMDAwMDBhYSwgfSwKKwl7IDB4MWM1OWYwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzU5ZmMsIDB4MDAwMDEwNDIsIDB4MDAwMDEwNDIsIDB4MDAwMDEwNDIsIDB4MDAwMDEwNDIsIH0sCisJeyAweDFjNWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YTA0LCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCAweDAwMDAwMDQwLCB9LAorCXsgMHgxYzVhMDgsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIH0sCisJeyAweDFjNWEwYywgMHgwMDAwMDFhMSwgMHgwMDAwMDFhMSwgMHgwMDAwMDE0MSwgMHgwMDAwMDE0MSwgfSwKKwl7IDB4MWM1YTEwLCAweDAwMDAwMWUxLCAweDAwMDAwMWUxLCAweDAwMDAwMTgxLCAweDAwMDAwMTgxLCB9LAorCXsgMHgxYzVhMTQsIDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEsIDB4MDAwMDAxYzEsIDB4MDAwMDAxYzEsIH0sCisJeyAweDFjNWExOCwgMHgwMDAwMDA2MSwgMHgwMDAwMDA2MSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgfSwKKwl7IDB4MWM1YTFjLCAweDAwMDAwMTY4LCAweDAwMDAwMTY4LCAweDAwMDAwMDQxLCAweDAwMDAwMDQxLCB9LAorCXsgMHgxYzVhMjAsIDB4MDAwMDAxYTgsIDB4MDAwMDAxYTgsIDB4MDAwMDAxYTgsIDB4MDAwMDAxYTgsIH0sCisJeyAweDFjNWEyNCwgMHgwMDAwMDFlOCwgMHgwMDAwMDFlOCwgMHgwMDAwMDFlOCwgMHgwMDAwMDFlOCwgfSwKKwl7IDB4MWM1YTI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCB9LAorCXsgMHgxYzVhMmMsIDB4MDAwMDAwNjgsIDB4MDAwMDAwNjgsIDB4MDAwMDAwNjgsIDB4MDAwMDAwNjgsIH0sCisJeyAweDFjNWEzMCwgMHgwMDAwMDE4OSwgMHgwMDAwMDE4OSwgMHgwMDAwMDBhOCwgMHgwMDAwMDBhOCwgfSwKKwl7IDB4MWM1YTM0LCAweDAwMDAwMWM5LCAweDAwMDAwMWM5LCAweDAwMDAwMTY5LCAweDAwMDAwMTY5LCB9LAorCXsgMHgxYzVhMzgsIDB4MDAwMDAwMDksIDB4MDAwMDAwMDksIDB4MDAwMDAxYTksIDB4MDAwMDAxYTksIH0sCisJeyAweDFjNWEzYywgMHgwMDAwMDA0OSwgMHgwMDAwMDA0OSwgMHgwMDAwMDFlOSwgMHgwMDAwMDFlOSwgfSwKKwl7IDB4MWM1YTQwLCAweDAwMDAwMDg5LCAweDAwMDAwMDg5LCAweDAwMDAwMDI5LCAweDAwMDAwMDI5LCB9LAorCXsgMHgxYzVhNDQsIDB4MDAwMDAxNzAsIDB4MDAwMDAxNzAsIDB4MDAwMDAwNjksIDB4MDAwMDAwNjksIH0sCisJeyAweDFjNWE0OCwgMHgwMDAwMDFiMCwgMHgwMDAwMDFiMCwgMHgwMDAwMDE5MCwgMHgwMDAwMDE5MCwgfSwKKwl7IDB4MWM1YTRjLCAweDAwMDAwMWYwLCAweDAwMDAwMWYwLCAweDAwMDAwMWQwLCAweDAwMDAwMWQwLCB9LAorCXsgMHgxYzVhNTAsIDB4MDAwMDAwMzAsIDB4MDAwMDAwMzAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIH0sCisJeyAweDFjNWE1NCwgMHgwMDAwMDA3MCwgMHgwMDAwMDA3MCwgMHgwMDAwMDA1MCwgMHgwMDAwMDA1MCwgfSwKKwl7IDB4MWM1YTU4LCAweDAwMDAwMTkxLCAweDAwMDAwMTkxLCAweDAwMDAwMDkwLCAweDAwMDAwMDkwLCB9LAorCXsgMHgxYzVhNWMsIDB4MDAwMDAxZDEsIDB4MDAwMDAxZDEsIDB4MDAwMDAxNTEsIDB4MDAwMDAxNTEsIH0sCisJeyAweDFjNWE2MCwgMHgwMDAwMDAxMSwgMHgwMDAwMDAxMSwgMHgwMDAwMDE5MSwgMHgwMDAwMDE5MSwgfSwKKwl7IDB4MWM1YTY0LCAweDAwMDAwMDUxLCAweDAwMDAwMDUxLCAweDAwMDAwMWQxLCAweDAwMDAwMWQxLCB9LAorCXsgMHgxYzVhNjgsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIH0sCisJeyAweDFjNWE2YywgMHgwMDAwMDFiOCwgMHgwMDAwMDFiOCwgMHgwMDAwMDA1MSwgMHgwMDAwMDA1MSwgfSwKKwl7IDB4MWM1YTcwLCAweDAwMDAwMWY4LCAweDAwMDAwMWY4LCAweDAwMDAwMTk4LCAweDAwMDAwMTk4LCB9LAorCXsgMHgxYzVhNzQsIDB4MDAwMDAwMzgsIDB4MDAwMDAwMzgsIDB4MDAwMDAxZDgsIDB4MDAwMDAxZDgsIH0sCisJeyAweDFjNWE3OCwgMHgwMDAwMDA3OCwgMHgwMDAwMDA3OCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOCwgfSwKKwl7IDB4MWM1YTdjLCAweDAwMDAwMTk5LCAweDAwMDAwMTk5LCAweDAwMDAwMDU4LCAweDAwMDAwMDU4LCB9LAorCXsgMHgxYzVhODAsIDB4MDAwMDAxZDksIDB4MDAwMDAxZDksIDB4MDAwMDAwOTgsIDB4MDAwMDAwOTgsIH0sCisJeyAweDFjNWE4NCwgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOSwgMHgwMDAwMDE1OSwgMHgwMDAwMDE1OSwgfSwKKwl7IDB4MWM1YTg4LCAweDAwMDAwMDU5LCAweDAwMDAwMDU5LCAweDAwMDAwMTk5LCAweDAwMDAwMTk5LCB9LAorCXsgMHgxYzVhOGMsIDB4MDAwMDAwOTksIDB4MDAwMDAwOTksIDB4MDAwMDAxZDksIDB4MDAwMDAxZDksIH0sCisJeyAweDFjNWE5MCwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOSwgfSwKKwl7IDB4MWM1YTk0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMDU5LCAweDAwMDAwMDU5LCB9LAorCXsgMHgxYzVhOTgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwOTksIDB4MDAwMDAwOTksIH0sCisJeyAweDFjNWE5YywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBkOSwgMHgwMDAwMDBkOSwgfSwKKwl7IDB4MWM1YWEwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhYTQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFhOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWFjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhYjAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFiNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWI4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhYmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFjMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWM0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhYzgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFjYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWQwLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZDQsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFkOCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWRjLCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZTAsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFlNCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWU4LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZWMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFmMCwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YWY0LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCAweDAwMDAwMGY5LCB9LAorCXsgMHgxYzVhZjgsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIDB4MDAwMDAwZjksIH0sCisJeyAweDFjNWFmYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSwgfSwKKwl7IDB4MWM1YjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzViMDQsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIH0sCisJeyAweDFjNWIwOCwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMiwgfSwKKwl7IDB4MWM1YjBjLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCB9LAorCXsgMHgxYzViMTAsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQsIH0sCisJeyAweDFjNWIxNCwgMHgwMDAwMDAwNSwgMHgwMDAwMDAwNSwgMHgwMDAwMDAwNSwgMHgwMDAwMDAwNSwgfSwKKwl7IDB4MWM1YjE4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCB9LAorCXsgMHgxYzViMWMsIDB4MDAwMDAwMDksIDB4MDAwMDAwMDksIDB4MDAwMDAwMDksIDB4MDAwMDAwMDksIH0sCisJeyAweDFjNWIyMCwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSwgMHgwMDAwMDAwYSwgfSwKKwl7IDB4MWM1YjI0LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCB9LAorCXsgMHgxYzViMjgsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMsIH0sCisJeyAweDFjNWIyYywgMHgwMDAwMDAwZCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwZCwgMHgwMDAwMDAwZCwgfSwKKwl7IDB4MWM1YjMwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCB9LAorCXsgMHgxYzViMzQsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIDB4MDAwMDAwMTEsIH0sCisJeyAweDFjNWIzOCwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgfSwKKwl7IDB4MWM1YjNjLCAweDAwMDAwMDEzLCAweDAwMDAwMDEzLCAweDAwMDAwMDEzLCAweDAwMDAwMDEzLCB9LAorCXsgMHgxYzViNDAsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIH0sCisJeyAweDFjNWI0NCwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgfSwKKwl7IDB4MWM1YjQ4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4LCB9LAorCXsgMHgxYzViNGMsIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIDB4MDAwMDAwMTksIH0sCisJeyAweDFjNWI1MCwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgfSwKKwl7IDB4MWM1YjU0LCAweDAwMDAwMDFiLCAweDAwMDAwMDFiLCAweDAwMDAwMDFiLCAweDAwMDAwMDFiLCB9LAorCXsgMHgxYzViNTgsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMWMsIDB4MDAwMDAwMWMsIH0sCisJeyAweDFjNWI1YywgMHgwMDAwMDAxZCwgMHgwMDAwMDAxZCwgMHgwMDAwMDAxZCwgMHgwMDAwMDAxZCwgfSwKKwl7IDB4MWM1YjYwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCB9LAorCXsgMHgxYzViNjQsIDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEsIH0sCisJeyAweDFjNWI2OCwgMHgwMDAwMDAyMiwgMHgwMDAwMDAyMiwgMHgwMDAwMDAyMiwgMHgwMDAwMDAyMiwgfSwKKwl7IDB4MWM1YjZjLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCAweDAwMDAwMDIzLCB9LAorCXsgMHgxYzViNzAsIDB4MDAwMDAwMjQsIDB4MDAwMDAwMjQsIDB4MDAwMDAwMjQsIDB4MDAwMDAwMjQsIH0sCisJeyAweDFjNWI3NCwgMHgwMDAwMDAyNSwgMHgwMDAwMDAyNSwgMHgwMDAwMDAyNSwgMHgwMDAwMDAyNSwgfSwKKwl7IDB4MWM1Yjc4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4LCB9LAorCXsgMHgxYzViN2MsIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIDB4MDAwMDAwMjksIH0sCisJeyAweDFjNWI4MCwgMHgwMDAwMDAyYSwgMHgwMDAwMDAyYSwgMHgwMDAwMDAyYSwgMHgwMDAwMDAyYSwgfSwKKwl7IDB4MWM1Yjg0LCAweDAwMDAwMDJiLCAweDAwMDAwMDJiLCAweDAwMDAwMDJiLCAweDAwMDAwMDJiLCB9LAorCXsgMHgxYzViODgsIDB4MDAwMDAwMmMsIDB4MDAwMDAwMmMsIDB4MDAwMDAwMmMsIDB4MDAwMDAwMmMsIH0sCisJeyAweDFjNWI4YywgMHgwMDAwMDAyZCwgMHgwMDAwMDAyZCwgMHgwMDAwMDAyZCwgMHgwMDAwMDAyZCwgfSwKKwl7IDB4MWM1YjkwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCAweDAwMDAwMDMwLCB9LAorCXsgMHgxYzViOTQsIDB4MDAwMDAwMzEsIDB4MDAwMDAwMzEsIDB4MDAwMDAwMzEsIDB4MDAwMDAwMzEsIH0sCisJeyAweDFjNWI5OCwgMHgwMDAwMDAzMiwgMHgwMDAwMDAzMiwgMHgwMDAwMDAzMiwgMHgwMDAwMDAzMiwgfSwKKwl7IDB4MWM1YjljLCAweDAwMDAwMDMzLCAweDAwMDAwMDMzLCAweDAwMDAwMDMzLCAweDAwMDAwMDMzLCB9LAorCXsgMHgxYzViYTAsIDB4MDAwMDAwMzQsIDB4MDAwMDAwMzQsIDB4MDAwMDAwMzQsIDB4MDAwMDAwMzQsIH0sCisJeyAweDFjNWJhNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmE4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViYWMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJiMCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmI0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViYjgsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJiYywgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmMwLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViYzQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJjOCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmNjLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZDAsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJkNCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmQ4LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZGMsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJlMCwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmU0LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZTgsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJlYywgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgMHgwMDAwMDAzNSwgfSwKKwl7IDB4MWM1YmYwLCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCAweDAwMDAwMDM1LCB9LAorCXsgMHgxYzViZjQsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIDB4MDAwMDAwMzUsIH0sCisJeyAweDFjNWJmOCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgfSwKKwl7IDB4MWM1YmZjLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCAweDAwMDAwMDFhLCB9LAorCXsgMHgxYzVjMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1YzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWMzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1Y2YwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzVjZjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNWNmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM1Y2ZjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYyMDAsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMDgsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIH0sCisJeyAweDFjNjIwNCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0MCwgMHgwMDAwMDQ0MCwgfSwKKwl7IDB4MWM2MjA4LCAweGQ2YmU0Nzg4LCAweGQ2YmU0Nzg4LCAweGQwM2U0Nzg4LCAweGQwM2U0Nzg4LCB9LAorCXsgMHgxYzYyMGMsIDB4MDEyZTgxNjAsIDB4MDEyZTgxNjAsIDB4MDEyYTgxNjAsIDB4MDEyYTgxNjAsIH0sCisJeyAweDFjNjIxMCwgMHg0MDgwNjMzMywgMHg0MDgwNjMzMywgMHg0MDgwNjMzMywgMHg0MDgwNjMzMywgfSwKKwl7IDB4MWM2MjE0LCAweDAwMTA2YzEwLCAweDAwMTA2YzEwLCAweDAwMTA2YzEwLCAweDAwMTA2YzEwLCB9LAorCXsgMHgxYzYyMTgsIDB4MDA5YzQwNjAsIDB4MDA5YzQwNjAsIDB4MDA5YzQwNjAsIDB4MDA5YzQwNjAsIH0sCisJeyAweDFjNjIxYywgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgfSwKKwl7IDB4MWM2MjIwLCAweDAxODgzMGM2LCAweDAxODgzMGM2LCAweDAxODgzMGM2LCAweDAxODgzMGM2LCB9LAorCXsgMHgxYzYyMjQsIDB4MDAwMDA0MDAsIDB4MDAwMDA0MDAsIDB4MDAwMDA0MDAsIDB4MDAwMDA0MDAsIH0sCisJeyAweDFjNjIyOCwgMHgwMDAwMDliNSwgMHgwMDAwMDliNSwgMHgwMDAwMDliNSwgMHgwMDAwMDliNSwgfSwKKwl7IDB4MWM2MjJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYyMzAsIDB4MDAwMDAxMDgsIDB4MDAwMDAyMTAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIH0sCisJeyAweDFjNjIzNCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM2MjM4LCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCB9LAorCXsgMHgxYzYyM2MsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIH0sCisJeyAweDFjNjI0MCwgMHgzODQ5MGEyMCwgMHgzODQ5MGEyMCwgMHgzODQ5MGEyMCwgMHgzODQ5MGEyMCwgfSwKKwl7IDB4MWM2MjQ0LCAweDAwMDA3YmI2LCAweDAwMDA3YmI2LCAweDAwMDA3YmI2LCAweDAwMDA3YmI2LCB9LAorCXsgMHgxYzYyNDgsIDB4MGZmZjNmZmMsIDB4MGZmZjNmZmMsIDB4MGZmZjNmZmMsIDB4MGZmZjNmZmMsIH0sCisJeyAweDFjNjI0YywgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgfSwKKwl7IDB4MWM2MjUwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCAweDAwMDBhMDAwLCB9LAorCXsgMHgxYzYyNTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjI1OCwgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCwgfSwKKwl7IDB4MWM2MjVjLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCAweDBmMGYwZjAxLCB9LAorCXsgMHgxYzYyNjAsIDB4ZGZhOTFmMDEsIDB4ZGZhOTFmMDEsIDB4ZGZhOTFmMDEsIDB4ZGZhOTFmMDEsIH0sCisJeyAweDFjNjI2NCwgMHgwMDQxOGExMSwgMHgwMDQxOGExMSwgMHgwMDQxOGExMSwgMHgwMDQxOGExMSwgfSwKKwl7IDB4MWM2MjY4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYyNmMsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIH0sCisJeyAweDFjNjI3NCwgMHgwYTFhOWNhYSwgMHgwYTFhOWNhYSwgMHgwYTFhN2NhYSwgMHgwYTFhN2NhYSwgfSwKKwl7IDB4MWM2Mjc4LCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCAweDFjZTczOWNlLCB9LAorCXsgMHgxYzYyN2MsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIH0sCisJeyAweDFjNjMwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgfSwKKwl7IDB4MWM2MzA0LCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDJlMDMyNDAyLCAweDJlMDMyNDAyLCB9LAorCXsgMHgxYzYzMDgsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NGEwYTNjMDYsIDB4NGEwYTNjMDYsIH0sCisJeyAweDFjNjMwYywgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg2MjFhNTQwYiwgMHg2MjFhNTQwYiwgfSwKKwl7IDB4MWM2MzEwLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDc2NGY2YzFiLCAweDc2NGY2YzFiLCB9LAorCXsgMHgxYzYzMTQsIDB4N2E0ZjZlMWIsIDB4N2E0ZjZlMWIsIDB4ODQ1YjdhNWEsIDB4ODQ1YjdhNWEsIH0sCisJeyAweDFjNjMxOCwgMHg4YzViN2U1YSwgMHg4YzViN2U1YSwgMHg5NTBmOGNjZiwgMHg5NTBmOGNjZiwgfSwKKwl7IDB4MWM2MzFjLCAweDlkMGY5NmNmLCAweDlkMGY5NmNmLCAweGE1Y2Y5YjRmLCAweGE1Y2Y5YjRmLCB9LAorCXsgMHgxYzYzMjAsIDB4YjUxZmE2OWYsIDB4YjUxZmE2OWYsIDB4YmRkZmFmMWYsIDB4YmRkZmFmMWYsIH0sCisJeyAweDFjNjMyNCwgMHhjYjNmYmQwNywgMHhjYjNmYmNiZiwgMHhkMWZmYzkzZiwgMHhkMWZmYzkzZiwgfSwKKwl7IDB4MWM2MzI4LCAweDAwMDBkN2JmLCAweDAwMDBkN2JmLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2MzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzMzgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjMzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2MzQwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzNDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjM0OCwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgfSwKKwl7IDB4MWM2MzRjLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCAweDNmZmZmZmZmLCB9LAorCXsgMHgxYzYzNTAsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIH0sCisJeyAweDFjNjM1NCwgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiwgfSwKKwl7IDB4MWM2MzU4LCAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmLCAweDc5YThhYTFmLCB9LAorCXsgMHgxYzYzODgsIDB4MDgwMDAwMDAsIDB4MDgwMDAwMDAsIDB4MDgwMDAwMDAsIDB4MDgwMDAwMDAsIH0sCisJeyAweDFjNjM4YywgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM2MzkwLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCB9LAorCXsgMHgxYzYzOTQsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIH0sCisJeyAweDFjNjM5OCwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgMHgwMDAwMDFjZSwgfSwKKwl7IDB4MWM2MzljLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCB9LAorCXsgMHgxYzYzYTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2E4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzYWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2I0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzYjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2MwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzYzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIH0sCisJeyAweDFjNjNjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgfSwKKwl7IDB4MWM2M2NjLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCAweDNmM2YzZjNmLCB9LAorCXsgMHgxYzYzZDAsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIDB4M2YzZjNmM2YsIH0sCisJeyAweDFjNjNkNCwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgMHgzZjNmM2YzZiwgfSwKKwl7IDB4MWM2M2Q4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCB9LAorCXsgMHgxYzYzZGMsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIH0sCisJeyAweDFjNjNlMCwgMHgwMDAwMDBjMCwgMHgwMDAwMDBjMCwgMHgwMDAwMDBjMCwgMHgwMDAwMDBjMCwgfSwKKwl7IDB4MWM2ODQ4LCAweDAwMTgwYTY1LCAweDAwMTgwYTY1LCAweDAwMTgwYTY4LCAweDAwMTgwYTY4LCB9LAorCXsgMHgxYzY5MjAsIDB4MDUxMDAwMWMsIDB4MDUxMDAwMWMsIDB4MDUxMDAwMWMsIDB4MDUxMDAwMWMsIH0sCisJeyAweDFjNjk2MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgMHgwMDAwOWI0MCwgfSwKKwl7IDB4MWM3MjBjLCAweDAxMmU4MTYwLCAweDAxMmU4MTYwLCAweDAxMmE4MTYwLCAweDAxMmE4MTYwLCB9LAorCXsgMHgxYzcyNmMsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIDB4MDkyNDkxMjYsIH0sCisJeyAweDFjNzg0OCwgMHgwMDE4MGE2NSwgMHgwMDE4MGE2NSwgMHgwMDE4MGE2OCwgMHgwMDE4MGE2OCwgfSwKKwl7IDB4MWM3OTIwLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCAweDA1MTAwMDFjLCB9LAorCXsgMHgxYzc5NjAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIDB4MDAwMDliNDAsIH0sCisJeyAweDFjODIwYywgMHgwMTJlODE2MCwgMHgwMTJlODE2MCwgMHgwMTJhODE2MCwgMHgwMTJhODE2MCwgfSwKKwl7IDB4MWM4MjZjLCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCAweDA5MjQ5MTI2LCB9LAorLyoJeyAweDFjODg2NCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgfSwgKi8KKwl7IDB4MWM4ODY0LCAweDAwMDFjNjAwLCAweDAwMDFjNjAwLCAweDAwMDFjNjAwLCAweDAwMDFjNjAwLCB9LAorCXsgMHgxYzg5NWMsIDB4MDA0YjZhOGUsIDB4MDA0YjZhOGUsIDB4MDA0YjZhOGUsIDB4MDA0YjZhOGUsIH0sCisJeyAweDFjODk2OCwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZSwgMHgwMDAwMDNjZSwgfSwKKwl7IDB4MWM4OWJjLCAweDAwMTgxNDAwLCAweDAwMTgxNDAwLCAweDAwMTgxNDAwLCAweDAwMTgxNDAwLCB9LAorCXsgMHgxYzkyNzAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIH0sCisJeyAweDFjOTM1YywgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiwgfSwKKwl7IDB4MWM5MzYwLCAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCAweDBmMjgyMjA3LCB9LAorCXsgMHgxYzkzNjQsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIH0sCisJeyAweDFjOTM2OCwgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCwgfSwKKwl7IDB4MWM5MzZjLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCAweDM3YTAwYzAzLCB9LAorCXsgMHgxYzkzNzAsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIH0sCisJeyAweDFjOTM3NCwgMHg1N2MwMDgwMywgMHg1N2MwMDgwMywgMHg1N2MwMDgwMywgMHg1N2MwMDgwMywgfSwKKwl7IDB4MWM5Mzc4LCAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCAweDVmZDgwNjgyLCB9LAorCXsgMHgxYzkzN2MsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIH0sCisJeyAweDFjOTM4MCwgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSwgfSwKKwl7IDB4MWM5Mzg0LCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCAweGYzMzA3ZmYwLCB9Cit9OworCitpbnQgYXI5MTcwX2luaXRfcGh5KHN0cnVjdCBhcjkxNzAgKmFyLCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCit7CisJaW50IGksIGVycjsKKwl1MzIgdmFsOworCWJvb2wgaXNfMmdoeiA9IGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwlib29sIGlzXzQwbWh6ID0gZmFsc2U7IC8qIFhYWDogZm9yIG5vdyAqLworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFyNTQxNl9waHlfaW5pdCk7IGkrKykgeworCQlpZiAoaXNfNDBtaHopIHsKKwkJCWlmIChpc18yZ2h6KQorCQkJCXZhbCA9IGFyNTQxNl9waHlfaW5pdFtpXS5fMmdoel80MDsKKwkJCWVsc2UKKwkJCQl2YWwgPSBhcjU0MTZfcGh5X2luaXRbaV0uXzVnaHpfNDA7CisJCX0gZWxzZSB7CisJCQlpZiAoaXNfMmdoeikKKwkJCQl2YWwgPSBhcjU0MTZfcGh5X2luaXRbaV0uXzJnaHpfMjA7CisJCQllbHNlCisJCQkJdmFsID0gYXI1NDE2X3BoeV9pbml0W2ldLl81Z2h6XzIwOworCQl9CisKKwkJYXI5MTcwX3JlZ3dyaXRlKGFyNTQxNl9waHlfaW5pdFtpXS5yZWcsIHZhbCk7CisJfQorCisJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOworCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogWFhYOiB1c2UgRUVQUk9NIGRhdGEgaGVyZSEgKi8KKworCWVyciA9IGFyOTE3MF9pbml0X3Bvd2VyX2NhbChhcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIFhYWDogcmVtb3ZlIG1hZ2ljISAqLworCWlmIChpc18yZ2h6KQorCQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFkNDAxNCwgMHg1MTYzKTsKKwllbHNlCisJCWVyciA9IGFyOTE3MF93cml0ZV9yZWcoYXIsIDB4MWQ0MDE0LCAweDUxNDMpOworCisJcmV0dXJuIGVycjsKK30KKworc3RydWN0IGFyOTE3MF9yZl9pbml0IHsKKwl1MzIgcmVnLCBfNWdoeiwgXzJnaHo7Cit9OworCitzdGF0aWMgc3RydWN0IGFyOTE3MF9yZl9pbml0IGFyOTE3MF9yZl9pbml0W10gPSB7CisgICAgIC8qIGJhbmsgMCAqLworICAgICB7IDB4MWM1OGIwLCAgMHgxZTU3OTVlNSwgIDB4MWU1Nzk1ZTV9LAorICAgICB7IDB4MWM1OGUwLCAgMHgwMjAwODAyMCwgIDB4MDIwMDgwMjB9LAorICAgICAvKiBiYW5rIDEgKi8KKyAgICAgeyAweDFjNThiMCwgIDB4MDIxMDg0MjEsICAweDAyMTA4NDIxfSwKKyAgICAgeyAweDFjNThlYywgIDB4MDAwMDAwMDgsICAweDAwMDAwMDA4fSwKKyAgICAgLyogYmFuayAyICovCisgICAgIHsgMHgxYzU4YjAsICAweDBlNzNmZjE3LCAgMHgwZTczZmYxN30sCisgICAgIHsgMHgxYzU4ZTAsICAweDAwMDAwNDIwLCAgMHgwMDAwMDQyMH0sCisgICAgIC8qIGJhbmsgMyAqLworICAgICB7IDB4MWM1OGYwLCAgMHgwMTQwMDAxOCwgIDB4MDFjMDAwMTh9LAorICAgICAvKiBiYW5rIDQgKi8KKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAxYTEsICAweDAwMDAwMWExfSwKKyAgICAgeyAweDFjNThlOCwgIDB4MDAwMDAwMDEsICAweDAwMDAwMDAxfSwKKyAgICAgLyogYmFuayA1ICovCisgICAgIHsgMHgxYzU4YjAsICAweDAwMDAwMDEzLCAgMHgwMDAwMDAxM30sCisgICAgIHsgMHgxYzU4ZTQsICAweDAwMDAwMDAyLCAgMHgwMDAwMDAwMn0sCisgICAgIC8qIGJhbmsgNiAqLworICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMmMwMCwgIDB4MDAwMDJjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDgwMCwgIDB4MDAwMDQ4MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNjAwMCwgIDB4MDAwMDYwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTAwMCwgIDB4MDAwMDEwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAwMCwgIDB4MDAwMDQwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDA4N2MwMCwgIDB4MDAwODdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNTQwMCwgIDB4MDAwMDU0MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMGMwMCwgIDB4MDAwMDBjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTgwMCwgIDB4MDAwMDE4MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNmMwMCwgIDB4MDAwMDZjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwN2MwMCwgIDB4MDAwMDdjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMmMwMCwgIDB4MDAwMDJjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwM2MwMCwgIDB4MDAwMDNjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMzgwMCwgIDB4MDAwMDM4MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMWMwMCwgIDB4MDAwMDFjMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgwMCwgIDB4MDAwMDA4MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDQwOCwgIDB4MDAwMDA0MDh9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNGMxNSwgIDB4MDAwMDRjMTV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDE4OCwgIDB4MDAwMDQxODh9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMjAxZSwgIDB4MDAwMDIwMWV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAxMDQwOCwgIDB4MDAwMTA0MDh9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgwMSwgIDB4MDAwMDA4MDF9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMGMwOCwgIDB4MDAwMDBjMDh9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTgxZSwgIDB4MDAwMDE4MWV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMTAxNiwgIDB4MDAwMDEwMTZ9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMjgwMCwgIDB4MDAwMDI4MDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwNDAxMCwgIDB4MDAwMDQwMTB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDgxYywgIDB4MDAwMDA4MWN9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDExNSwgIDB4MDAwMDAxMTV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxNSwgIDB4MDAwMDAwMTV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDA2NiwgIDB4MDAwMDAwNjZ9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxYywgIDB4MDAwMDAwMWN9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDAwMDB9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAwNCwgIDB4MDAwMDAwMDR9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxNSwgIDB4MDAwMDAwMTV9LAorICAgICB7IDB4MWM1OGIwLCAgMHgwMDAwMDAxZiwgIDB4MDAwMDAwMWZ9LAorICAgICB7IDB4MWM1OGUwLCAgMHgwMDAwMDAwMCwgIDB4MDAwMDA0MDB9LAorICAgICAvKiBiYW5rIDcgKi8KKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwYTAsICAweDAwMDAwMGEwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwMDAsICAweDAwMDAwMDAwfSwKKyAgICAgeyAweDFjNThiMCwgIDB4MDAwMDAwNDAsICAweDAwMDAwMDQwfSwKKyAgICAgeyAweDFjNThmMCwgIDB4MDAwMDAwMWMsICAweDAwMDAwMDFjfSwKK307CisKK3N0YXRpYyBpbnQgYXI5MTcwX2luaXRfcmZfYmFua3NfMF83KHN0cnVjdCBhcjkxNzAgKmFyLCBib29sIGJhbmQ1Z2h6KQoreworCWludCBlcnIsIGk7CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXI5MTcwX3JmX2luaXQpOyBpKyspCisJCWFyOTE3MF9yZWd3cml0ZShhcjkxNzBfcmZfaW5pdFtpXS5yZWcsCisJCQkJYmFuZDVnaHogPyBhcjkxNzBfcmZfaW5pdFtpXS5fNWdoegorCQkJCQkgOiBhcjkxNzBfcmZfaW5pdFtpXS5fMmdoeik7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJmIGluaXQgZmFpbGVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShhci0+aHctPndpcGh5KSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhcjkxNzBfaW5pdF9yZl9iYW5rNF9wd3Ioc3RydWN0IGFyOTE3MCAqYXIsIGJvb2wgYmFuZDVnaHosCisJCQkJICAgIHUzMiBmcmVxLCBlbnVtIGFyOTE3MF9idyBidykKK3sKKwlpbnQgZXJyOworCXUzMiBkMCwgZDEsIHRkMCwgdGQxLCBmZDAsIGZkMTsKKwl1OCBjaGFuc2VsOworCXU4IHJlZnNlbDAgPSAxLCByZWZzZWwxID0gMDsKKwl1OCBsZl9zeW50aCA9IDA7CisKKwlzd2l0Y2ggKGJ3KSB7CisJY2FzZSBBUjkxNzBfQldfNDBfQUJPVkU6CisJCWZyZXEgKz0gMTA7CisJCWJyZWFrOworCWNhc2UgQVI5MTcwX0JXXzQwX0JFTE9XOgorCQlmcmVxIC09IDEwOworCQlicmVhazsKKwljYXNlIEFSOTE3MF9CV18yMDoKKwkJYnJlYWs7CisJY2FzZSBfX0FSOTE3MF9OVU1fQlc6CisJCUJVRygpOworCX0KKworCWlmIChiYW5kNWdoeikgeworCQlpZiAoZnJlcSAlIDEwKSB7CisJCQljaGFuc2VsID0gKGZyZXEgLSA0ODAwKSAvIDU7CisJCX0gZWxzZSB7CisJCQljaGFuc2VsID0gKChmcmVxIC0gNDgwMCkgLyAxMCkgKiAyOworCQkJcmVmc2VsMCA9IDA7CisJCQlyZWZzZWwxID0gMTsKKwkJfQorCQljaGFuc2VsID0gYnl0ZV9yZXZfdGFibGVbY2hhbnNlbF07CisJfSBlbHNlIHsKKwkJaWYgKGZyZXEgPT0gMjQ4NCkgeworCQkJY2hhbnNlbCA9IDEwICsgKGZyZXEgLSAyMjc0KSAvIDU7CisJCQlsZl9zeW50aCA9IDE7CisJCX0gZWxzZQorCQkJY2hhbnNlbCA9IDE2ICsgKGZyZXEgLSAyMjcyKSAvIDU7CisJCWNoYW5zZWwgKj0gNDsKKwkJY2hhbnNlbCA9IGJ5dGVfcmV2X3RhYmxlW2NoYW5zZWxdOworCX0KKworCWQxID0JY2hhbnNlbDsKKwlkMCA9CTB4MjEgfAorCQlyZWZzZWwwIDw8IDMgfAorCQlyZWZzZWwxIDw8IDIgfAorCQlsZl9zeW50aCA8PCAxOworCXRkMCA9CWQwICYgMHgxZjsKKwl0ZDEgPQlkMSAmIDB4MWY7CisJZmQwID0JdGQxIDw8IDUgfCB0ZDA7CisKKwl0ZDAgPQkoZDAgPj4gNSkgJiAweDc7CisJdGQxID0JKGQxID4+IDUpICYgMHg3OworCWZkMSA9CXRkMSA8PCA1IHwgdGQwOworCisJYXI5MTcwX3JlZ3dyaXRlX2JlZ2luKGFyKTsKKworCWFyOTE3MF9yZWd3cml0ZSgweDFjNThiMCwgZmQwKTsKKwlhcjkxNzBfcmVnd3JpdGUoMHgxYzU4ZTgsIGZkMSk7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJZXJyID0gYXI5MTcwX3JlZ3dyaXRlX3Jlc3VsdCgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwltc2xlZXAoMTApOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zIHsKKwl1OCBjb2VmZl9leHA7CisJdTE2IGNvZWZmX21hbjsKKwl1OCBjb2VmZl9leHBfc2hnaTsKKwl1MTYgY29lZmZfbWFuX3NoZ2k7Cit9OworCitzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX2VudHJ5IHsKKwl1MTYgZnJlcTsKKwlzdHJ1Y3QgYXI5MTcwX3BoeV9mcmVxX3BhcmFtcyBwYXJhbXNbX19BUjkxNzBfTlVNX0JXXTsKK307CisKKy8qIE5COiBtdXN0IGJlIGluIHN5bmMgd2l0aCBjaGFubmVsIHRhYmxlcyBpbiBtYWluISAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhcjkxNzBfcGh5X2ZyZXFfZW50cnkgYXI5MTcwX3BoeV9mcmVxX3BhcmFtc1tdID0geworLyoKKyAqCWZyZXEsCisgKgkJMjBNSHosCisgKgkJNDBNSHogKGJlbG93KSwKKyAqCQk0ME1oeiAoYWJvdmUpLAorICovCisJeyAyNDEyLCB7CisJCXsgMywgMjE3MzcsIDMsIDE5NTYzLCB9LAorCQl7IDMsIDIxODI3LCAzLCAxOTY0NCwgfSwKKwkJeyAzLCAyMTY0NywgMywgMTk0ODIsIH0sCisJfSB9LAorCXsgMjQxNywgeworCQl7IDMsIDIxNjkyLCAzLCAxOTUyMywgfSwKKwkJeyAzLCAyMTc4MiwgMywgMTk2MDQsIH0sCisJCXsgMywgMjE2MDIsIDMsIDE5NDQyLCB9LAorCX0gfSwKKwl7IDI0MjIsIHsKKwkJeyAzLCAyMTY0NywgMywgMTk0ODIsIH0sCisJCXsgMywgMjE3MzcsIDMsIDE5NTYzLCB9LAorCQl7IDMsIDIxNTU4LCAzLCAxOTQwMiwgfSwKKwl9IH0sCisJeyAyNDI3LCB7CisJCXsgMywgMjE2MDIsIDMsIDE5NDQyLCB9LAorCQl7IDMsIDIxNjkyLCAzLCAxOTUyMywgfSwKKwkJeyAzLCAyMTUxNCwgMywgMTkzNjIsIH0sCisJfSB9LAorCXsgMjQzMiwgeworCQl7IDMsIDIxNTU4LCAzLCAxOTQwMiwgfSwKKwkJeyAzLCAyMTY0NywgMywgMTk0ODIsIH0sCisJCXsgMywgMjE0NzAsIDMsIDE5MzIzLCB9LAorCX0gfSwKKwl7IDI0MzcsIHsKKwkJeyAzLCAyMTUxNCwgMywgMTkzNjIsIH0sCisJCXsgMywgMjE2MDIsIDMsIDE5NDQyLCB9LAorCQl7IDMsIDIxNDI2LCAzLCAxOTI4MywgfSwKKwl9IH0sCisJeyAyNDQyLCB7CisJCXsgMywgMjE0NzAsIDMsIDE5MzIzLCB9LAorCQl7IDMsIDIxNTU4LCAzLCAxOTQwMiwgfSwKKwkJeyAzLCAyMTM4MiwgMywgMTkyNDQsIH0sCisJfSB9LAorCXsgMjQ0NywgeworCQl7IDMsIDIxNDI2LCAzLCAxOTI4MywgfSwKKwkJeyAzLCAyMTUxNCwgMywgMTkzNjIsIH0sCisJCXsgMywgMjEzMzksIDMsIDE5MjA1LCB9LAorCX0gfSwKKwl7IDI0NTIsIHsKKwkJeyAzLCAyMTM4MiwgMywgMTkyNDQsIH0sCisJCXsgMywgMjE0NzAsIDMsIDE5MzIzLCB9LAorCQl7IDMsIDIxMjk1LCAzLCAxOTE2NiwgfSwKKwl9IH0sCisJeyAyNDU3LCB7CisJCXsgMywgMjEzMzksIDMsIDE5MjA1LCB9LAorCQl7IDMsIDIxNDI2LCAzLCAxOTI4MywgfSwKKwkJeyAzLCAyMTI1MiwgMywgMTkxMjcsIH0sCisJfSB9LAorCXsgMjQ2MiwgeworCQl7IDMsIDIxMjk1LCAzLCAxOTE2NiwgfSwKKwkJeyAzLCAyMTM4MiwgMywgMTkyNDQsIH0sCisJCXsgMywgMjEyMDksIDMsIDE5MDg4LCB9LAorCX0gfSwKKwl7IDI0NjcsIHsKKwkJeyAzLCAyMTI1MiwgMywgMTkxMjcsIH0sCisJCXsgMywgMjEzMzksIDMsIDE5MjA1LCB9LAorCQl7IDMsIDIxMTY2LCAzLCAxOTA1MCwgfSwKKwl9IH0sCisJeyAyNDcyLCB7CisJCXsgMywgMjEyMDksIDMsIDE5MDg4LCB9LAorCQl7IDMsIDIxMjk1LCAzLCAxOTE2NiwgfSwKKwkJeyAzLCAyMTEyNCwgMywgMTkwMTEsIH0sCisJfSB9LAorCXsgMjQ4NCwgeworCQl7IDMsIDIxMTA3LCAzLCAxODk5NiwgfSwKKwkJeyAzLCAyMTE5MiwgMywgMTkwNzMsIH0sCisJCXsgMywgMjEwMjIsIDMsIDE4OTIwLCB9LAorCX0gfSwKKwl7IDQ5MjAsIHsKKwkJeyA0LCAyMTMxMywgNCwgMTkxODEsIH0sCisJCXsgNCwgMjEzNTYsIDQsIDE5MjIwLCB9LAorCQl7IDQsIDIxMjY5LCA0LCAxOTE0MiwgfSwKKwl9IH0sCisJeyA0OTQwLCB7CisJCXsgNCwgMjEyMjYsIDQsIDE5MTA0LCB9LAorCQl7IDQsIDIxMjY5LCA0LCAxOTE0MiwgfSwKKwkJeyA0LCAyMTE4MywgNCwgMTkwNjUsIH0sCisJfSB9LAorCXsgNDk2MCwgeworCQl7IDQsIDIxMTQxLCA0LCAxOTAyNywgfSwKKwkJeyA0LCAyMTE4MywgNCwgMTkwNjUsIH0sCisJCXsgNCwgMjEwOTgsIDQsIDE4OTg4LCB9LAorCX0gfSwKKwl7IDQ5ODAsIHsKKwkJeyA0LCAyMTA1NiwgNCwgMTg5NTAsIH0sCisJCXsgNCwgMjEwOTgsIDQsIDE4OTg4LCB9LAorCQl7IDQsIDIxMDE0LCA0LCAxODkxMiwgfSwKKwl9IH0sCisJeyA1MDQwLCB7CisJCXsgNCwgMjA4MDUsIDQsIDE4NzI1LCB9LAorCQl7IDQsIDIwODQ2LCA0LCAxODc2MiwgfSwKKwkJeyA0LCAyMDc2NCwgNCwgMTg2ODcsIH0sCisJfSB9LAorCXsgNTA2MCwgeworCQl7IDQsIDIwNzIzLCA0LCAxODY1MSwgfSwKKwkJeyA0LCAyMDc2NCwgNCwgMTg2ODcsIH0sCisJCXsgNCwgMjA2ODIsIDQsIDE4NjE0LCB9LAorCX0gfSwKKwl7IDUwODAsIHsKKwkJeyA0LCAyMDY0MSwgNCwgMTg1NzcsIH0sCisJCXsgNCwgMjA2ODIsIDQsIDE4NjE0LCB9LAorCQl7IDQsIDIwNjAxLCA0LCAxODU0MSwgfSwKKwl9IH0sCisJeyA1MTgwLCB7CisJCXsgNCwgMjAyNDMsIDQsIDE4MjE5LCB9LAorCQl7IDQsIDIwMjgyLCA0LCAxODI1NCwgfSwKKwkJeyA0LCAyMDIwNCwgNCwgMTgxODMsIH0sCisJfSB9LAorCXsgNTIwMCwgeworCQl7IDQsIDIwMTY1LCA0LCAxODE0OCwgfSwKKwkJeyA0LCAyMDIwNCwgNCwgMTgxODMsIH0sCisJCXsgNCwgMjAxMjYsIDQsIDE4MTE0LCB9LAorCX0gfSwKKwl7IDUyMjAsIHsKKwkJeyA0LCAyMDA4OCwgNCwgMTgwNzksIH0sCisJCXsgNCwgMjAxMjYsIDQsIDE4MTE0LCB9LAorCQl7IDQsIDIwMDQ5LCA0LCAxODA0NCwgfSwKKwl9IH0sCisJeyA1MjQwLCB7CisJCXsgNCwgMjAwMTEsIDQsIDE4MDEwLCB9LAorCQl7IDQsIDIwMDQ5LCA0LCAxODA0NCwgfSwKKwkJeyA0LCAxOTk3MywgNCwgMTc5NzYsIH0sCisJfSB9LAorCXsgNTI2MCwgeworCQl7IDQsIDE5OTM1LCA0LCAxNzk0MSwgfSwKKwkJeyA0LCAxOTk3MywgNCwgMTc5NzYsIH0sCisJCXsgNCwgMTk4OTcsIDQsIDE3OTA3LCB9LAorCX0gfSwKKwl7IDUyODAsIHsKKwkJeyA0LCAxOTg1OSwgNCwgMTc4NzMsIH0sCisJCXsgNCwgMTk4OTcsIDQsIDE3OTA3LCB9LAorCQl7IDQsIDE5ODIyLCA0LCAxNzg0MCwgfSwKKwl9IH0sCisJeyA1MzAwLCB7CisJCXsgNCwgMTk3ODQsIDQsIDE3ODA2LCB9LAorCQl7IDQsIDE5ODIyLCA0LCAxNzg0MCwgfSwKKwkJeyA0LCAxOTc0NywgNCwgMTc3NzIsIH0sCisJfSB9LAorCXsgNTMyMCwgeworCQl7IDQsIDE5NzEwLCA0LCAxNzczOSwgfSwKKwkJeyA0LCAxOTc0NywgNCwgMTc3NzIsIH0sCisJCXsgNCwgMTk2NzMsIDQsIDE3NzA2LCB9LAorCX0gfSwKKwl7IDU1MDAsIHsKKwkJeyA0LCAxOTA2NSwgNCwgMTcxNTksIH0sCisJCXsgNCwgMTkxMDAsIDQsIDE3MTkwLCB9LAorCQl7IDQsIDE5MDMwLCA0LCAxNzEyNywgfSwKKwl9IH0sCisJeyA1NTIwLCB7CisJCXsgNCwgMTg5OTYsIDQsIDE3MDk2LCB9LAorCQl7IDQsIDE5MDMwLCA0LCAxNzEyNywgfSwKKwkJeyA0LCAxODk2MiwgNCwgMTcwNjUsIH0sCisJfSB9LAorCXsgNTU0MCwgeworCQl7IDQsIDE4OTI3LCA0LCAxNzAzNSwgfSwKKwkJeyA0LCAxODk2MiwgNCwgMTcwNjUsIH0sCisJCXsgNCwgMTg4OTMsIDQsIDE3MDA0LCB9LAorCX0gfSwKKwl7IDU1NjAsIHsKKwkJeyA0LCAxODg1OSwgNCwgMTY5NzMsIH0sCisJCXsgNCwgMTg4OTMsIDQsIDE3MDA0LCB9LAorCQl7IDQsIDE4ODI1LCA0LCAxNjk0MywgfSwKKwl9IH0sCisJeyA1NTgwLCB7CisJCXsgNCwgMTg3OTIsIDQsIDE2OTEzLCB9LAorCQl7IDQsIDE4ODI1LCA0LCAxNjk0MywgfSwKKwkJeyA0LCAxODc1OCwgNCwgMTY4ODIsIH0sCisJfSB9LAorCXsgNTYwMCwgeworCQl7IDQsIDE4NzI1LCA0LCAxNjg1MiwgfSwKKwkJeyA0LCAxODc1OCwgNCwgMTY4ODIsIH0sCisJCXsgNCwgMTg2OTEsIDQsIDE2ODIyLCB9LAorCX0gfSwKKwl7IDU2MjAsIHsKKwkJeyA0LCAxODY1OCwgNCwgMTY3OTIsIH0sCisJCXsgNCwgMTg2OTEsIDQsIDE2ODIyLCB9LAorCQl7IDQsIDE4NjI1LCA0LCAxNjc2MiwgfSwKKwl9IH0sCisJeyA1NjQwLCB7CisJCXsgNCwgMTg1OTIsIDQsIDE2NzMzLCB9LAorCQl7IDQsIDE4NjI1LCA0LCAxNjc2MiwgfSwKKwkJeyA0LCAxODU1OSwgNCwgMTY3MDMsIH0sCisJfSB9LAorCXsgNTY2MCwgeworCQl7IDQsIDE4NTI2LCA0LCAxNjY3MywgfSwKKwkJeyA0LCAxODU1OSwgNCwgMTY3MDMsIH0sCisJCXsgNCwgMTg0OTMsIDQsIDE2NjQ0LCB9LAorCX0gfSwKKwl7IDU2ODAsIHsKKwkJeyA0LCAxODQ2MSwgNCwgMTY2MTUsIH0sCisJCXsgNCwgMTg0OTMsIDQsIDE2NjQ0LCB9LAorCQl7IDQsIDE4NDI4LCA0LCAxNjU4NiwgfSwKKwl9IH0sCisJeyA1NzAwLCB7CisJCXsgNCwgMTgzOTYsIDQsIDE2NTU2LCB9LAorCQl7IDQsIDE4NDI4LCA0LCAxNjU4NiwgfSwKKwkJeyA0LCAxODM2NCwgNCwgMTY1MjcsIH0sCisJfSB9LAorCXsgNTc0NSwgeworCQl7IDQsIDE4MjUyLCA0LCAxNjQyNywgfSwKKwkJeyA0LCAxODI4NCwgNCwgMTY0NTUsIH0sCisJCXsgNCwgMTgyMjAsIDQsIDE2Mzk4LCB9LAorCX0gfSwKKwl7IDU3NjUsIHsKKwkJeyA0LCAxODE4OSwgNSwgMzI3NDAsIH0sCisJCXsgNCwgMTgyMjAsIDQsIDE2Mzk4LCB9LAorCQl7IDQsIDE4MTU3LCA1LCAzMjY4MywgfSwKKwl9IH0sCisJeyA1Nzg1LCB7CisJCXsgNCwgMTgxMjYsIDUsIDMyNjI2LCB9LAorCQl7IDQsIDE4MTU3LCA1LCAzMjY4MywgfSwKKwkJeyA0LCAxODA5NCwgNSwgMzI1NzAsIH0sCisJfSB9LAorCXsgNTgwNSwgeworCQl7IDQsIDE4MDYzLCA1LCAzMjUxNCwgfSwKKwkJeyA0LCAxODA5NCwgNSwgMzI1NzAsIH0sCisJCXsgNCwgMTgwMzIsIDUsIDMyNDU4LCB9LAorCX0gfSwKKwl7IDU4MjUsIHsKKwkJeyA0LCAxODAwMSwgNSwgMzI0MDIsIH0sCisJCXsgNCwgMTgwMzIsIDUsIDMyNDU4LCB9LAorCQl7IDQsIDE3OTcwLCA1LCAzMjM0NywgfSwKKwl9IH0sCisJeyA1MTcwLCB7CisJCXsgNCwgMjAyODIsIDQsIDE4MjU0LCB9LAorCQl7IDQsIDIwMzIxLCA0LCAxODI4OSwgfSwKKwkJeyA0LCAyMDI0MywgNCwgMTgyMTksIH0sCisJfSB9LAorCXsgNTE5MCwgeworCQl7IDQsIDIwMjA0LCA0LCAxODE4MywgfSwKKwkJeyA0LCAyMDI0MywgNCwgMTgyMTksIH0sCisJCXsgNCwgMjAxNjUsIDQsIDE4MTQ4LCB9LAorCX0gfSwKKwl7IDUyMTAsIHsKKwkJeyA0LCAyMDEyNiwgNCwgMTgxMTQsIH0sCisJCXsgNCwgMjAxNjUsIDQsIDE4MTQ4LCB9LAorCQl7IDQsIDIwMDg4LCA0LCAxODA3OSwgfSwKKwl9IH0sCisJeyA1MjMwLCB7CisJCXsgNCwgMjAwNDksIDQsIDE4MDQ0LCB9LAorCQl7IDQsIDIwMDg4LCA0LCAxODA3OSwgfSwKKwkJeyA0LCAyMDAxMSwgNCwgMTgwMTAsIH0sCisJfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zICoKK2FyOTE3MF9nZXRfaHdfZHluX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkgZW51bSBhcjkxNzBfYncgYncpCit7CisJdW5zaWduZWQgaW50IGNoYW5pZHggPSAwOworCXUxNiBmcmVxID0gMjQxMjsKKworCWlmIChjaGFubmVsKSB7CisJCWNoYW5pZHggPSBjaGFubmVsLT5od192YWx1ZTsKKwkJZnJlcSA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOworCX0KKworCUJVR19PTihjaGFuaWR4ID49IEFSUkFZX1NJWkUoYXI5MTcwX3BoeV9mcmVxX3BhcmFtcykpOworCisJQlVJTERfQlVHX09OKF9fQVI5MTcwX05VTV9CVyAhPSAzKTsKKworCVdBUk5fT04oYXI5MTcwX3BoeV9mcmVxX3BhcmFtc1tjaGFuaWR4XS5mcmVxICE9IGZyZXEpOworCisJcmV0dXJuICZhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zW2NoYW5pZHhdLnBhcmFtc1tid107Cit9CisKKworaW50IGFyOTE3MF9pbml0X3JmKHN0cnVjdCBhcjkxNzAgKmFyKQoreworCWNvbnN0IHN0cnVjdCBhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zICpmcmVxcGFyOworCV9fbGUzMiBjbWRbN107CisJaW50IGVycjsKKworCWVyciA9IGFyOTE3MF9pbml0X3JmX2JhbmtzXzBfNyhhciwgZmFsc2UpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBhcjkxNzBfaW5pdF9yZl9iYW5rNF9wd3IoYXIsIGZhbHNlLCAyNDEyLCBBUjkxNzBfQldfMjApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmcmVxcGFyID0gYXI5MTcwX2dldF9od19keW5fcGFyYW1zKE5VTEwsIEFSOTE3MF9CV18yMCk7CisKKwljbWRbMF0gPSBjcHVfdG9fbGUzMigyNDEyICogMTAwMCk7CisJY21kWzFdID0gY3B1X3RvX2xlMzIoMCk7CisJY21kWzJdID0gY3B1X3RvX2xlMzIoMSk7CisJY21kWzNdID0gY3B1X3RvX2xlMzIoZnJlcXBhci0+Y29lZmZfZXhwKTsKKwljbWRbNF0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9tYW4pOworCWNtZFs1XSA9IGNwdV90b19sZTMyKGZyZXFwYXItPmNvZWZmX2V4cF9zaGdpKTsKKwljbWRbNl0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9tYW5fc2hnaSk7CisKKwkvKiBSRl9JTklUIGVjaG9lcyB0aGUgY29tbWFuZCBiYWNrIHRvIHVzICovCisJZXJyID0gYXItPmV4ZWNfY21kKGFyLCBBUjkxNzBfQ01EX1JGX0lOSVQsCisJCQkgICBzaXplb2YoY21kKSwgKHU4ICopY21kLAorCQkJICAgc2l6ZW9mKGNtZCksICh1OCAqKWNtZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW1zbGVlcCgxMDAwKTsKKworCXJldHVybiBhcjkxNzBfZWNob190ZXN0KGFyLCAweGFhYmJjY2RkKTsKK30KKworc3RhdGljIGludCBhcjkxNzBfZmluZF9mcmVxX2lkeChpbnQgbmZyZXFzLCB1OCAqZnJlcXMsIHU4IGYpCit7CisJaW50IGlkeCA9IG5mcmVxcyAtIDI7CisKKwl3aGlsZSAoaWR4ID49IDApIHsKKwkJaWYgKGYgPj0gZnJlcXNbaWR4XSkKKwkJCXJldHVybiBpZHg7CisJCWlkeC0tOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgczMyIGFyOTE3MF9pbnRlcnBvbGF0ZV9zMzIoczMyIHgsIHMzMiB4MSwgczMyIHkxLCBzMzIgeDIsIHMzMiB5MikKK3sKKwkvKiBub3RoaW5nIHRvIGludGVycG9sYXRlLCBpdCdzIGhvcml6b250YWwgKi8KKwlpZiAoeTIgPT0geTEpCisJCXJldHVybiB5MTsKKworCS8qIGNoZWNrIGlmIHdlIGhpdCBvbmUgb2YgdGhlIGVkZ2VzICovCisJaWYgKHggPT0geDEpCisJCXJldHVybiB5MTsKKwlpZiAoeCA9PSB4MikKKwkJcmV0dXJuIHkyOworCisJLyogeDEgPT0geDIgaXMgYmFkLCBob3BlZnVsbHkgPT0geCAqLworCWlmICh4MiA9PSB4MSkKKwkJcmV0dXJuIHkxOworCisJcmV0dXJuIHkxICsgKCgoeTIgLSB5MSkgKiAoeCAtIHgxKSkgLyAoeDIgLSB4MSkpOworfQorCitzdGF0aWMgdTggYXI5MTcwX2ludGVycG9sYXRlX3U4KHU4IHgsIHU4IHgxLCB1OCB5MSwgdTggeDIsIHU4IHkyKQoreworI2RlZmluZSBTSElGVAkJOAorCXMzMiB5OworCisJeSA9IGFyOTE3MF9pbnRlcnBvbGF0ZV9zMzIoeCA8PCBTSElGVCwKKwkJCQkgICB4MSA8PCBTSElGVCwgeTEgPDwgU0hJRlQsCisJCQkJICAgeDIgPDwgU0hJRlQsIHkyIDw8IFNISUZUKTsKKworCS8qCisJICogWFhYOiB1bndyYXAgdGhpcyBleHByZXNzaW9uCisJICoJSXNuJ3QgaXQganVzdCBESVZfUk9VTkRfVVAoeSwgMTw8U0hJRlQpPworCSAqCUNhbiB3ZSByZWx5IG9uIHRoZSBjb21waWxlciB0byBvcHRpbWlzZSBhd2F5IHRoZSBkaXY/CisJICovCisJcmV0dXJuICh5ID4+IFNISUZUKSArICgoeSAmICgxPDwoU0hJRlQtMSkpKSA+PiAoU0hJRlQgLSAxKSk7CisjdW5kZWYgU0hJRlQKK30KKworc3RhdGljIGludCBhcjkxNzBfc2V0X3Bvd2VyX2NhbChzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGZyZXEsIGVudW0gYXI5MTcwX2J3IGJ3KQoreworCXN0cnVjdCBhcjkxNzBfY2FsaWJyYXRpb25fdGFyZ2V0X3Bvd2VyX2xlZ2FjeSAqY3RwbDsKKwlzdHJ1Y3QgYXI5MTcwX2NhbGlicmF0aW9uX3RhcmdldF9wb3dlcl9odCAqY3RwaDsKKwl1OCAqY3RwcmVzOworCWludCBudGFyZ2V0czsKKwlpbnQgaWR4LCBpLCBuOworCXU4IGFja3Bvd2VyLCBhY2tjaGFpbnMsIGY7CisJdTggcHdyX2ZyZXFzW0FSNTQxNl9NQVhfTlVNX1RHVF9QV1JTXTsKKworCWlmIChmcmVxIDwgMzAwMCkKKwkJZiA9IGZyZXEgLSAyMzAwOworCWVsc2UKKwkJZiA9IChmcmVxIC0gNDgwMCkvNTsKKworCS8qCisJICogY3ljbGUgdGhyb3VnaCB0aGUgdmFyaW91cyBtb2RlcworCSAqCisJICogbGVnYWN5IG1vZGVzIGZpcnN0OiA1RywgMkcgQ0NLLCAyRyBPRkRNCisJICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlzd2l0Y2ggKGkpIHsKKwkJY2FzZSAwOiAvKiA1IEdIeiBsZWdhY3kgKi8KKwkJCWN0cGwgPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl81R1swXTsKKwkJCW50YXJnZXRzID0gQVI1NDE2X05VTV81R19UQVJHRVRfUFdSUzsKKwkJCWN0cHJlcyA9IGFyLT5wb3dlcl81R19sZWc7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiAyLjQgR0h6IENDSyAqLworCQkJY3RwbCA9ICZhci0+ZWVwcm9tLmNhbF90Z3RfcHdyXzJHX2Nja1swXTsKKwkJCW50YXJnZXRzID0gQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BXUlM7CisJCQljdHByZXMgPSBhci0+cG93ZXJfMkdfY2NrOworCQkJYnJlYWs7CisJCWNhc2UgMjogLyogMi40IEdIeiBPRkRNICovCisJCQljdHBsID0gJmFyLT5lZXByb20uY2FsX3RndF9wd3JfMkdfb2ZkbVswXTsKKwkJCW50YXJnZXRzID0gQVI1NDE2X05VTV8yR19PRkRNX1RBUkdFVF9QV1JTOworCQkJY3RwcmVzID0gYXItPnBvd2VyXzJHX29mZG07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisKKwkJZm9yIChuID0gMDsgbiA8IG50YXJnZXRzOyBuKyspIHsKKwkJCWlmIChjdHBsW25dLmZyZXEgPT0gMHhmZikKKwkJCQlicmVhazsKKwkJCXB3cl9mcmVxc1tuXSA9IGN0cGxbbl0uZnJlcTsKKwkJfQorCQludGFyZ2V0cyA9IG47CisJCWlkeCA9IGFyOTE3MF9maW5kX2ZyZXFfaWR4KG50YXJnZXRzLCBwd3JfZnJlcXMsIGYpOworCQlmb3IgKG4gPSAwOyBuIDwgNDsgbisrKQorCQkJY3RwcmVzW25dID0gYXI5MTcwX2ludGVycG9sYXRlX3U4KAorCQkJCQlmLAorCQkJCQljdHBsW2lkeCArIDBdLmZyZXEsCisJCQkJCWN0cGxbaWR4ICsgMF0ucG93ZXJbbl0sCisJCQkJCWN0cGxbaWR4ICsgMV0uZnJlcSwKKwkJCQkJY3RwbFtpZHggKyAxXS5wb3dlcltuXSk7CisJfQorCisJLyoKKwkgKiBIVCBtb2RlcyBub3c6IDVHIEhUMjAsIDVHIEhUNDAsIDJHIENDSywgMkcgT0ZETSwgMkcgSFQyMCwgMkcgSFQ0MAorCSAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJc3dpdGNoIChpKSB7CisJCWNhc2UgMDogLyogNSBHSHogSFQgMjAgKi8KKwkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl81R19odDIwWzBdOworCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzVHX1RBUkdFVF9QV1JTOworCQkJY3RwcmVzID0gYXItPnBvd2VyXzVHX2h0MjA7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiA1IEdIeiBIVCA0MCAqLworCQkJY3RwaCA9ICZhci0+ZWVwcm9tLmNhbF90Z3RfcHdyXzVHX2h0NDBbMF07CisJCQludGFyZ2V0cyA9IEFSNTQxNl9OVU1fNUdfVEFSR0VUX1BXUlM7CisJCQljdHByZXMgPSBhci0+cG93ZXJfNUdfaHQ0MDsKKwkJCWJyZWFrOworCQljYXNlIDI6IC8qIDIuNCBHSHogSFQgMjAgKi8KKwkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl8yR19odDIwWzBdOworCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlM7CisJCQljdHByZXMgPSBhci0+cG93ZXJfMkdfaHQyMDsKKwkJCWJyZWFrOworCQljYXNlIDM6IC8qIDIuNCBHSHogSFQgNDAgKi8KKwkJCWN0cGggPSAmYXItPmVlcHJvbS5jYWxfdGd0X3B3cl8yR19odDQwWzBdOworCQkJbnRhcmdldHMgPSBBUjU0MTZfTlVNXzJHX09GRE1fVEFSR0VUX1BXUlM7CisJCQljdHByZXMgPSBhci0+cG93ZXJfMkdfaHQ0MDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKworCQlmb3IgKG4gPSAwOyBuIDwgbnRhcmdldHM7IG4rKykgeworCQkJaWYgKGN0cGhbbl0uZnJlcSA9PSAweGZmKQorCQkJCWJyZWFrOworCQkJcHdyX2ZyZXFzW25dID0gY3RwaFtuXS5mcmVxOworCQl9CisJCW50YXJnZXRzID0gbjsKKwkJaWR4ID0gYXI5MTcwX2ZpbmRfZnJlcV9pZHgobnRhcmdldHMsIHB3cl9mcmVxcywgZik7CisJCWZvciAobiA9IDA7IG4gPCA4OyBuKyspCisJCQljdHByZXNbbl0gPSBhcjkxNzBfaW50ZXJwb2xhdGVfdTgoCisJCQkJCWYsCisJCQkJCWN0cGhbaWR4ICsgMF0uZnJlcSwKKwkJCQkJY3RwaFtpZHggKyAwXS5wb3dlcltuXSwKKwkJCQkJY3RwaFtpZHggKyAxXS5mcmVxLAorCQkJCQljdHBoW2lkeCArIDFdLnBvd2VyW25dKTsKKwl9CisKKwkvKiBzZXQgQUNLL0NUUyBUWCBwb3dlciAqLworCWFyOTE3MF9yZWd3cml0ZV9iZWdpbihhcik7CisKKwlpZiAoYXItPmVlcHJvbS50eF9tYXNrICE9IDEpCisJCWFja2NoYWlucyA9IEFSOTE3MF9UWF9QSFlfVFhDSEFJTl8yOworCWVsc2UKKwkJYWNrY2hhaW5zID0gQVI5MTcwX1RYX1BIWV9UWENIQUlOXzE7CisKKwlpZiAoZnJlcSA8IDMwMDApCisJCWFja3Bvd2VyID0gYXItPnBvd2VyXzJHX29mZG1bMF0gJiAweDNmOworCWVsc2UKKwkJYWNrcG93ZXIgPSBhci0+cG93ZXJfNUdfbGVnWzBdICYgMHgzZjsKKworCWFyOTE3MF9yZWd3cml0ZSgweDFjMzY5NCwgYWNrcG93ZXIgPDwgMjAgfCBhY2tjaGFpbnMgPDwgMjYpOworCWFyOTE3MF9yZWd3cml0ZSgweDFjM2JiNCwgYWNrcG93ZXIgPDwgNSB8IGFja2NoYWlucyA8PCAxMSB8CisJCQkJICBhY2twb3dlciA8PCAyMSB8IGFja2NoYWlucyA8PCAyNyk7CisKKwlhcjkxNzBfcmVnd3JpdGVfZmluaXNoKCk7CisJcmV0dXJuIGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKK30KKworc3RhdGljIGludCBhcjkxNzBfY2FsY19ub2lzZV9kYm0odTMyIHJhd19ub2lzZSkKK3sKKwlpZiAocmF3X25vaXNlICYgMHgxMDApCisJCXJldHVybiB+KChyYXdfbm9pc2UgJiAweDBmZikgPj4gMSk7CisJZWxzZQorCQlyZXR1cm4gKHJhd19ub2lzZSAmIDB4ZmYpID4+IDE7Cit9CisKK2ludCBhcjkxNzBfc2V0X2NoYW5uZWwoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJICAgICAgIGVudW0gYXI5MTcwX3JmX2luaXRfbW9kZSByZmksIGVudW0gYXI5MTcwX2J3IGJ3KQoreworCWNvbnN0IHN0cnVjdCBhcjkxNzBfcGh5X2ZyZXFfcGFyYW1zICpmcmVxcGFyOworCXUzMiBjbWQsIHRtcCwgb2ZmczsKKwlfX2xlMzIgdmFsc1s4XTsKKwlpbnQgaSwgZXJyOworCWJvb2wgYmFuZHN3aXRjaDsKKworCS8qIGNsZWFyIEJCIGhlYXZ5IGNsaXAgZW5hYmxlICovCisJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzU5ZTAsIDB4MjAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogbWF5IGJlIE5VTEwgYXQgZmlyc3Qgc2V0dXAgKi8KKwlpZiAoYXItPmNoYW5uZWwpCisJCWJhbmRzd2l0Y2ggPSBhci0+Y2hhbm5lbC0+YmFuZCAhPSBjaGFubmVsLT5iYW5kOworCWVsc2UKKwkJYmFuZHN3aXRjaCA9IHRydWU7CisKKwkvKiBIVyB3b3JrYXJvdW5kICovCisJaWYgKCFhci0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSAmJgorCSAgICBjaGFubmVsLT5jZW50ZXJfZnJlcSA8PSAyNDE3KQorCQliYW5kc3dpdGNoID0gdHJ1ZTsKKworCWVyciA9IGFyLT5leGVjX2NtZChhciwgQVI5MTcwX0NNRF9GUkVRX1NUQVJULCAwLCBOVUxMLCAwLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKHJmaSAhPSBBUjkxNzBfUkZJX05PTkUgfHwgYmFuZHN3aXRjaCkgeworCQl1MzIgdmFsID0gMHg0MDA7CisKKwkJaWYgKHJmaSA9PSBBUjkxNzBfUkZJX0NPTEQpCisJCQl2YWwgPSAweDgwMDsKKworCQkvKiB3YXJtL2NvbGQgcmVzZXQgQkIvQUREQSAqLworCQllcnIgPSBhcjkxNzBfd3JpdGVfcmVnKGFyLCAweDFkNDAwNCwgdmFsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxZDQwMDQsIDB4MCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IGFyOTE3MF9pbml0X3BoeShhciwgY2hhbm5lbC0+YmFuZCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWVyciA9IGFyOTE3MF9pbml0X3JmX2JhbmtzXzBfNyhhciwKKwkJCWNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWNtZCA9IEFSOTE3MF9DTURfUkZfSU5JVDsKKwl9IGVsc2UgeworCQljbWQgPSBBUjkxNzBfQ01EX0ZSRVFVRU5DWTsKKwl9CisKKwllcnIgPSBhcjkxNzBfaW5pdF9yZl9iYW5rNF9wd3IoYXIsCisJCWNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWiwKKwkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIGJ3KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc3dpdGNoIChidykgeworCWNhc2UgQVI5MTcwX0JXXzIwOgorCQl0bXAgPSAweDI0MDsKKwkJb2ZmcyA9IDA7CisJCWJyZWFrOworCWNhc2UgQVI5MTcwX0JXXzQwX0JFTE9XOgorCQl0bXAgPSAweDJjNDsKKwkJb2ZmcyA9IDM7CisJCWJyZWFrOworCWNhc2UgQVI5MTcwX0JXXzQwX0FCT1ZFOgorCQl0bXAgPSAweDJkNDsKKwkJb2ZmcyA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwlpZiAoMCAvKiAyIHN0cmVhbXMgY2FwYWJsZSAqLykKKwkJdG1wIHw9IDB4MTAwOworCisJZXJyID0gYXI5MTcwX3dyaXRlX3JlZyhhciwgMHgxYzU4MDQsIHRtcCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGFyOTE3MF9zZXRfcG93ZXJfY2FsKGFyLCBjaGFubmVsLT5jZW50ZXJfZnJlcSwgYncpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlmcmVxcGFyID0gYXI5MTcwX2dldF9od19keW5fcGFyYW1zKGNoYW5uZWwsIGJ3KTsKKworCXZhbHNbMF0gPSBjcHVfdG9fbGUzMihjaGFubmVsLT5jZW50ZXJfZnJlcSAqIDEwMDApOworCXZhbHNbMV0gPSBjcHVfdG9fbGUzMihidyA9PSBBUjkxNzBfQldfMjAgPyAwIDogMSk7CisJdmFsc1syXSA9IGNwdV90b19sZTMyKG9mZnMgPDwgMiB8IDEpOworCXZhbHNbM10gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9leHApOworCXZhbHNbNF0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9tYW4pOworCXZhbHNbNV0gPSBjcHVfdG9fbGUzMihmcmVxcGFyLT5jb2VmZl9leHBfc2hnaSk7CisJdmFsc1s2XSA9IGNwdV90b19sZTMyKGZyZXFwYXItPmNvZWZmX21hbl9zaGdpKTsKKwl2YWxzWzddID0gY3B1X3RvX2xlMzIoMTAwMCk7CisKKwllcnIgPSBhci0+ZXhlY19jbWQoYXIsIGNtZCwgc2l6ZW9mKHZhbHMpLCAodTggKil2YWxzLAorCQkJICAgc2l6ZW9mKHZhbHMpLCAodTggKil2YWxzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlhci0+bm9pc2VbaV0gPSBhcjkxNzBfY2FsY19ub2lzZV9kYm0oCisJCQkJKGxlMzJfdG9fY3B1KHZhbHNbMiArIGldKSA+PiAxOSkgJiAweDFmZik7CisKKwkJYXItPm5vaXNlW2kgKyAyXSA9IGFyOTE3MF9jYWxjX25vaXNlX2RibSgKKwkJCQkgICAgKGxlMzJfdG9fY3B1KHZhbHNbNSArIGldKSA+PiAyMykgJiAweDFmZik7CisJfQorCisJYXItPmNoYW5uZWwgPSBjaGFubmVsOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3VzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjk2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hcjkxNzAvdXNiLmMKQEAgLTAsMCArMSw3NDggQEAKKy8qCisgKiBBdGhlcm9zIEFSOTE3MCBkcml2ZXIKKyAqCisgKiBVU0IgLSBmcm9udGVuZAorICoKKyAqIENvcHlyaWdodCAyMDA4LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDksIENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgc2VlCisgKiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvLgorICoKKyAqIFRoaXMgZmlsZSBpbmNvcnBvcmF0ZXMgd29yayBjb3ZlcmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZAorICogcGVybWlzc2lvbiBub3RpY2U6CisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKgorICogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiAgICBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqICAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogICAgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqICAgIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqICAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqICAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJhcjkxNzAuaCIKKyNpbmNsdWRlICJjbWQuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInVzYi5oIgorCitNT0RVTEVfQVVUSE9SKCJKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PiIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBdGhlcm9zIEFSOTE3MCA4MDIuMTFuIFVTQiB3aXJlbGVzcyIpOworTU9EVUxFX0ZJUk1XQVJFKCJhcjkxNzAtMS5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJhcjkxNzAtMi5mdyIpOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYXI5MTcwX3VzYl9pZHNbXSA9IHsKKwkvKiBBdGhlcm9zIDkxNzAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDkxNzApIH0sCisJLyogQXRoZXJvcyBURzEyMU4gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDEwMDEpIH0sCisJLyogRC1MaW5rIERXQSAxNjBBICovCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzEwKSB9LAorCS8qIE5ldGdlYXIgV05EQTMxMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODQ2LCAweDkwMTApIH0sCisJLyogTmV0Z2VhciBXTjExMSB2MiAqLworCXsgVVNCX0RFVklDRSgweDA4NDYsIDB4OTAwMSkgfSwKKwkvKiBaeWRhcyBaRDEyMjEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwYWNlLCAweDEyMjEpIH0sCisJLyogWi1Db20gVUI4MSBCRyAqLworCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyMykgfSwKKwkvKiBaLUNvbSBVQjgyIEFCRyAqLworCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyNikgfSwKKwkvKiBBcmNhZHlhbiBXTjc1MTIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGY1MjIpIH0sCisJLyogUGxhbmV4IEdXVVMzMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweDUzMDQpIH0sCisJLyogSU8tRGF0YSBXTkdETlVTMiAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkzZikgfSwKKworCS8qIHRlcm1pbmF0ZSAqLworCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFyOTE3MF91c2JfaWRzKTsKKworc3RhdGljIHZvaWQgYXI5MTcwX3VzYl90eF91cmJfY29tcGxldGVfZnJlZShzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gKHN0cnVjdCBhcjkxNzBfdXNiICopCisJICAgICAgdXNiX2dldF9pbnRmZGF0YSh1c2JfaWZudW1fdG9faWYodXJiLT5kZXYsIDApKTsKKworCWlmICghYXJ1KSB7CisJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCXJldHVybiA7CisJfQorCisJYXI5MTcwX2hhbmRsZV90eF9zdGF0dXMoJmFydS0+Y29tbW9uLCBza2IsIGZhbHNlLAorCQkJCUFSOTE3MF9UWF9TVEFUVVNfQ09NUExFVEUpOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfdXNiX3R4X3VyYl9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIpCit7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF91c2JfaXJxX2NvbXBsZXRlZChzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGFyOTE3MF91c2IgKmFydSA9IHVyYi0+Y29udGV4dDsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkvKiBldmVyeXRoaW5nIGlzIGZpbmUgKi8KKwljYXNlIDA6CisJCWJyZWFrOworCisJLyogZGlzY29ubmVjdCAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0RFVjoKKwljYXNlIC1FU0hVVERPV046CisJCWdvdG8gZnJlZTsKKworCWRlZmF1bHQ6CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFyOTE3MCBpcnE6ICIsIERVTVBfUFJFRklYX09GRlNFVCwKKwkJCSAgICAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKK3Jlc3VibWl0OgorCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+cnhfc3VibWl0dGVkKTsKKwlpZiAodXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgeworCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCWdvdG8gZnJlZTsKKwl9CisKKwlyZXR1cm47CisKK2ZyZWU6CisJdXNiX2J1ZmZlcl9mcmVlKGFydS0+dWRldiwgNjQsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPnRyYW5zZmVyX2RtYSk7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF91c2JfcnhfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBhcjkxNzBfdXNiICphcnUgPSAoc3RydWN0IGFyOTE3MF91c2IgKikKKwkJdXNiX2dldF9pbnRmZGF0YSh1c2JfaWZudW1fdG9faWYodXJiLT5kZXYsIDApKTsKKwlpbnQgZXJyOworCisJaWYgKCFhcnUpCisJCWdvdG8gZnJlZTsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwkvKiBldmVyeXRoaW5nIGlzIGZpbmUgKi8KKwljYXNlIDA6CisJCWJyZWFrOworCisJLyogZGlzY29ubmVjdCAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0RFVjoKKwljYXNlIC1FU0hVVERPV046CisJCWdvdG8gZnJlZTsKKworCWRlZmF1bHQ6CisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJc2tiX3B1dChza2IsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJYXI5MTcwX3J4KCZhcnUtPmNvbW1vbiwgc2tiKTsKKworcmVzdWJtaXQ6CisJc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihza2IpOworCXNrYl90cmltKHNrYiwgMCk7CisKKwl1c2JfYW5jaG9yX3VyYih1cmIsICZhcnUtPnJ4X3N1Ym1pdHRlZCk7CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXJyKSB7CisJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwl9CisKKwlyZXR1cm4gOworCitmcmVlOgorCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfcHJlcF9yeF91cmIoc3RydWN0IGFyOTE3MF91c2IgKmFydSwKKwkJCQkgIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBfX2Rldl9hbGxvY19za2IoQVI5MTcwX01BWF9SWF9CVUZGRVJfU0laRSArIDMyLCBnZnApOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHJlc2VydmUgc29tZSBzcGFjZSBmb3IgbWFjODAyMTEncyByYWRpb3RhcCAqLworCXNrYl9yZXNlcnZlKHNrYiwgMzIpOworCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBhcnUtPnVkZXYsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShhcnUtPnVkZXYsIEFSOTE3MF9FUF9SWCksCisJCQkgIHNrYi0+ZGF0YSwgbWluKHNrYl90YWlscm9vbShza2IpLAorCQkJICBBUjkxNzBfTUFYX1JYX0JVRkZFUl9TSVpFKSwKKwkJCSAgYXI5MTcwX3VzYl9yeF9jb21wbGV0ZWQsIHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX2FsbG9jX3J4X2lycV91cmIoc3RydWN0IGFyOTE3MF91c2IgKmFydSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOworCXZvaWQgKmlidWY7CisJaW50IGVyciA9IC1FTk9NRU07CisKKwkvKiBpbml0aWFsaXplIGludGVycnVwdCBlbmRwb2ludCAqLworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1cmIpCisJCWdvdG8gb3V0OworCisJaWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoYXJ1LT51ZGV2LCA2NCwgR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwlpZiAoIWlidWYpCisJCWdvdG8gb3V0OworCisJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGFydS0+dWRldiwKKwkJCSB1c2JfcmN2aW50cGlwZShhcnUtPnVkZXYsIEFSOTE3MF9FUF9JUlEpLCBpYnVmLAorCQkJIDY0LCBhcjkxNzBfdXNiX2lycV9jb21wbGV0ZWQsIGFydSwgMSk7CisJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+cnhfc3VibWl0dGVkKTsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCWlmIChlcnIpIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQl1c2JfYnVmZmVyX2ZyZWUoYXJ1LT51ZGV2LCA2NCwgdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJdXJiLT50cmFuc2Zlcl9kbWEpOworCX0KKworb3V0OgorCXVzYl9mcmVlX3VyYih1cmIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3VzYl9hbGxvY19yeF9idWxrX3VyYnMoc3RydWN0IGFyOTE3MF91c2IgKmFydSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGk7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI5MTcwX05VTV9SWF9VUkJTOyBpKyspIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpCisJCQlnb3RvIGVycl9vdXQ7CisKKwkJZXJyID0gYXI5MTcwX3VzYl9wcmVwX3J4X3VyYihhcnUsIHVyYiwgR0ZQX0tFUk5FTCk7CisJCWlmIChlcnIpIHsKKwkJCXVzYl9mcmVlX3VyYih1cmIpOworCQkJZ290byBlcnJfb3V0OworCQl9CisKKwkJdXNiX2FuY2hvcl91cmIodXJiLCAmYXJ1LT5yeF9zdWJtaXR0ZWQpOworCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworCQlpZiAoZXJyKSB7CisJCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisJCQlkZXZfa2ZyZWVfc2tiX2FueSgodm9pZCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQl1c2JfZnJlZV91cmIodXJiKTsKKwl9CisKKwkvKiB0aGUgZGV2aWNlIG5vdyB3YWl0aW5nIGZvciBhIGZpcm13YXJlLiAqLworCWFydS0+Y29tbW9uLnN0YXRlID0gQVI5MTcwX0lETEU7CisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisKKwl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZhcnUtPnJ4X3N1Ym1pdHRlZCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYXI5MTcwX3VzYl9jYW5jZWxfdXJicyhzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQoreworCWludCByZXQ7CisKKwlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9VTktOT1dOX1NUQVRFOworCisJdXNiX3VubGlua19hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisKKwkvKiBnaXZlIHRoZSBMRUQgT0ZGIGNvbW1hbmQgYW5kIHRoZSBkZWF1dGggZnJhbWUgYSBjaGFuY2UgdG8gYWlyLiAqLworCXJldCA9IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KCZhcnUtPnR4X3N1Ym1pdHRlZCwKKwkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJaWYgKHJldCA9PSAwKQorCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgImtpbGwgcGVuZGluZyB0eCB1cmJzLlxuIik7CisJdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisKKwl1c2JfcG9pc29uX2FuY2hvcmVkX3VyYnMoJmFydS0+cnhfc3VibWl0dGVkKTsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX2V4ZWNfY21kKHN0cnVjdCBhcjkxNzAgKmFyLCBlbnVtIGFyOTE3MF9jbWQgY21kLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBwbGVuLCB2b2lkICpwYXlsb2FkLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBvdXRsZW4sIHZvaWQgKm91dCkKK3sKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gKHZvaWQgKikgYXI7CisJc3RydWN0IHVyYiAqdXJiID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAtRU5PTUVNOworCisJaWYgKHVubGlrZWx5KCFJU19BQ0NFUFRJTkdfQ01EKGFyKSkpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoV0FSTl9PTihwbGVuID4gQVI5MTcwX01BWF9DTURfTEVOIC0gNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIXVyYikpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwlhci0+Y21kYnVmWzBdID0gY3B1X3RvX2xlMzIocGxlbik7CisJYXItPmNtZGJ1ZlswXSB8PSBjcHVfdG9fbGUzMihjbWQgPDwgOCk7CisJLyogd3JpdGluZyBtdWx0aXBsZSByZWdzIGZpbGxzIHRoaXMgYnVmZmVyIGFscmVhZHkgKi8KKwlpZiAocGxlbiAmJiBwYXlsb2FkICE9ICh1OCAqKSgmYXItPmNtZGJ1ZlsxXSkpCisJCW1lbWNweSgmYXItPmNtZGJ1ZlsxXSwgcGF5bG9hZCwgcGxlbik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXJ1LT5jb21tb24uY21kbG9jaywgZmxhZ3MpOworCWFydS0+cmVhZGJ1ZiA9ICh1OCAqKW91dDsKKwlhcnUtPnJlYWRsZW4gPSBvdXRsZW47CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYXJ1LT5jb21tb24uY21kbG9jaywgZmxhZ3MpOworCisJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGFydS0+dWRldiwKKwkJCSB1c2Jfc25kYnVsa3BpcGUoYXJ1LT51ZGV2LCBBUjkxNzBfRVBfQ01EKSwKKwkJCSBhcnUtPmNvbW1vbi5jbWRidWYsIHBsZW4gKyA0LAorCQkJIGFyOTE3MF91c2JfdHhfdXJiX2NvbXBsZXRlLCBOVUxMLCAxKTsKKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+dHhfc3VibWl0dGVkKTsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChlcnIpIHsKKwkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJZ290byBlcnJfdW5idWY7CisJfQorCXVzYl9mcmVlX3VyYih1cmIpOworCisJZXJyID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhcnUtPmNtZF93YWl0LCBIWik7CisJaWYgKGVyciA9PSAwKSB7CisJCWVyciA9IC1FVElNRURPVVQ7CisJCWdvdG8gZXJyX3VuYnVmOworCX0KKworCWlmIChvdXRsZW4gPj0gMCAmJiBhcnUtPnJlYWRsZW4gIT0gb3V0bGVuKSB7CisJCWVyciA9IC1FTVNHU0laRTsKKwkJZ290byBlcnJfdW5idWY7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl91bmJ1ZjoKKwkvKiBNYXliZSB0aGUgZGV2aWNlIHdhcyByZW1vdmVkIGluIHRoZSBzZWNvbmQgd2Ugd2VyZSB3YWl0aW5nPyAqLworCWlmIChJU19TVEFSVEVEKGFyKSkgeworCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgIm5vIGNvbW1hbmQgZmVlZGJhY2sgIgorCQkJCQkgInJlY2VpdmVkICglZCkuXG4iLCBlcnIpOworCisJCS8qIHByb3ZpZGUgc29tZSBtYXliZSB1c2VmdWwgZGVidWcgaW5mb3JtYXRpb24gKi8KKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImFyOTE3MCBjbWQ6ICIsIERVTVBfUFJFRklYX05PTkUsCisJCQkJICAgICBhcnUtPmNvbW1vbi5jbWRidWYsIHBsZW4gKyA0KTsKKwkJZHVtcF9zdGFjaygpOworCX0KKworCS8qIGludmFsaWRhdGUgdG8gYXZvaWQgY29tcGxldGluZyB0aGUgbmV4dCBwcmVtYXR1cmVseSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZhcnUtPmNvbW1vbi5jbWRsb2NrLCBmbGFncyk7CisJYXJ1LT5yZWFkYnVmID0gTlVMTDsKKwlhcnUtPnJlYWRsZW4gPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFydS0+Y29tbW9uLmNtZGxvY2ssIGZsYWdzKTsKKworZXJyX2ZyZWU6CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfdHgoc3RydWN0IGFyOTE3MCAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgYm9vbCB0eHN0YXR1c19uZWVkZWQsIHVuc2lnbmVkIGludCBleHRyYV9sZW4pCit7CisJc3RydWN0IGFyOTE3MF91c2IgKmFydSA9IChzdHJ1Y3QgYXI5MTcwX3VzYiAqKSBhcjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGVycjsKKworCWlmICh1bmxpa2VseSghSVNfU1RBUlRFRChhcikpKSB7CisJCS8qIFNlcmlvdXNseSwgd2hhdCB3ZXJlIHlvdSBkcmluay4uLiBlcnIuLi4gdGhpbmtpbmchPyAqLworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCF1cmIpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgYXJ1LT51ZGV2LAorCQkJICB1c2Jfc25kYnVsa3BpcGUoYXJ1LT51ZGV2LCBBUjkxNzBfRVBfVFgpLAorCQkJICBza2ItPmRhdGEsIHNrYi0+bGVuICsgZXh0cmFfbGVuLCAodHhzdGF0dXNfbmVlZGVkID8KKwkJCSAgYXI5MTcwX3VzYl90eF91cmJfY29tcGxldGUgOgorCQkJICBhcjkxNzBfdXNiX3R4X3VyYl9jb21wbGV0ZV9mcmVlKSwgc2tiKTsKKwl1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9aRVJPX1BBQ0tFVDsKKworCXVzYl9hbmNob3JfdXJiKHVyYiwgJmFydS0+dHhfc3VibWl0dGVkKTsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmICh1bmxpa2VseShlcnIpKQorCQl1c2JfdW5hbmNob3JfdXJiKHVyYik7CisKKwl1c2JfZnJlZV91cmIodXJiKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfdXNiX2NhbGxiYWNrX2NtZChzdHJ1Y3QgYXI5MTcwICphciwgdTMyIGxlbiAsIHZvaWQgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gKHZvaWQgKikgYXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgaW4sIG91dDsKKworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gOworCisJaW4gPSBsZTMyX3RvX2NwdXAoKF9fbGUzMiAqKWJ1ZmZlcik7CisJb3V0ID0gbGUzMl90b19jcHUoYXItPmNtZGJ1ZlswXSk7CisKKwkvKiBtYXNrIG9mZiBsZW5ndGggYnl0ZSAqLworCW91dCAmPSB+MHhGRjsKKworCWlmIChhcnUtPnJlYWRsZW4gPj0gMCkgeworCQkvKiBhZGQgZXhwZWN0ZWQgbGVuZ3RoICovCisJCW91dCB8PSBhcnUtPnJlYWRsZW47CisJfSBlbHNlIHsKKwkJLyogYWRkIG9idGFpbmVkIGxlbmd0aCAqLworCQlvdXQgfD0gaW4gJiAweEZGOworCX0KKworCS8qCisJICogU29tZSBjb21tYW5kcyAoZS5nOiBBUjkxNzBfQ01EX0ZSRVFVRU5DWSkgaGF2ZSBhIHZhcmlhYmxlIHJlc3BvbnNlCisJICogbGVuZ3RoIGFuZCB3ZSBjYW5ub3QgcHJlZGljdCB0aGUgY29ycmVjdCBsZW5ndGggaW4gYWR2YW5jZS4KKwkgKiBTbyB3ZSBvbmx5IGNoZWNrIGlmIHdlIHByb3ZpZGVkIGVub3VnaCBzcGFjZSBmb3IgdGhlIGRhdGEuCisJICovCisJaWYgKHVubGlrZWx5KG91dCA8IGluKSkgeworCQlkZXZfd2FybigmYXJ1LT51ZGV2LT5kZXYsICJyZWNlaXZlZCBpbnZhbGlkIGNvbW1hbmQgcmVzcG9uc2UgIgorCQkJCQkgICJnb3QgJWQgYnl0ZXMsIGluc3RlYWQgb2YgJWQgYnl0ZXMgIgorCQkJCQkgICJhbmQgdGhlIHJlc3AgbGVuZ3RoIGlzICVkIGJ5dGVzXG4iLAorCQkJIGluLCBvdXQsIGxlbik7CisJCXByaW50X2hleF9kdW1wX2J5dGVzKCJhcjkxNzAgaW52YWxpZCByZXNwOiAiLAorCQkJCSAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULCBidWZmZXIsIGxlbik7CisJCS8qCisJCSAqIERvIG5vdCBjb21wbGV0ZSwgdGhlbiB0aGUgY29tbWFuZCB0aW1lcyBvdXQsCisJCSAqIGFuZCB3ZSBnZXQgYSBzdGFjayB0cmFjZSBmcm9tIHRoZXJlLgorCQkgKi8KKwkJcmV0dXJuIDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYXJ1LT5jb21tb24uY21kbG9jaywgZmxhZ3MpOworCWlmIChhcnUtPnJlYWRidWYgJiYgbGVuID4gMCkgeworCQltZW1jcHkoYXJ1LT5yZWFkYnVmLCBidWZmZXIgKyA0LCBsZW4gLSA0KTsKKwkJYXJ1LT5yZWFkYnVmID0gTlVMTDsKKwl9CisJY29tcGxldGUoJmFydS0+Y21kX3dhaXQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFydS0+Y29tbW9uLmNtZGxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX3VwbG9hZChzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1LCBjb25zdCB2b2lkICpkYXRhLAorCQkJICAgICBzaXplX3QgbGVuLCB1MzIgYWRkciwgYm9vbCBjb21wbGV0ZSkKK3sKKwlpbnQgdHJhbnNmZXIsIGVycjsKKwl1OCAqYnVmID0ga21hbGxvYyg0MDk2LCBHRlBfS0VSTkVMKTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdoaWxlIChsZW4pIHsKKwkJdHJhbnNmZXIgPSBtaW5fdChpbnQsIGxlbiwgNDA5Nik7CisJCW1lbWNweShidWYsIGRhdGEsIHRyYW5zZmVyKTsKKworCQllcnIgPSB1c2JfY29udHJvbF9tc2coYXJ1LT51ZGV2LCB1c2Jfc25kY3RybHBpcGUoYXJ1LT51ZGV2LCAwKSwKKwkJCQkgICAgICAweDMwIC8qIEZXIERMICovLCAweDQwIHwgVVNCX0RJUl9PVVQsCisJCQkJICAgICAgYWRkciA+PiA4LCAwLCBidWYsIHRyYW5zZmVyLCAxMDAwKTsKKworCQlpZiAoZXJyIDwgMCkgeworCQkJa2ZyZWUoYnVmKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKworCQlsZW4gLT0gdHJhbnNmZXI7CisJCWRhdGEgKz0gdHJhbnNmZXI7CisJCWFkZHIgKz0gdHJhbnNmZXI7CisJfQorCWtmcmVlKGJ1Zik7CisKKwlpZiAoY29tcGxldGUpIHsKKwkJZXJyID0gdXNiX2NvbnRyb2xfbXNnKGFydS0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKGFydS0+dWRldiwgMCksCisJCQkJICAgICAgMHgzMSAvKiBGVyBETCBDT01QTEVURSAqLywKKwkJCQkgICAgICAweDQwIHwgVVNCX0RJUl9PVVQsIDAsIDAsIE5VTEwsIDAsIDUwMDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQoreworCWludCBlcnIgPSAwOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYXJ1LT5pbml0X3ZhbHVlcywgImFyOTE3MC0xLmZ3IiwKKwkJCSAgICAgICAmYXJ1LT51ZGV2LT5kZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJmaWxlIHdpdGggaW5pdCB2YWx1ZXMgbm90IGZvdW5kLlxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYXJ1LT5maXJtd2FyZSwgImFyOTE3MC0yLmZ3IiwgJmFydS0+dWRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCXJlbGVhc2VfZmlybXdhcmUoYXJ1LT5pbml0X3ZhbHVlcyk7CisJCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAiZmlybXdhcmUgZmlsZSBub3QgZm91bmQuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfcmVzZXQoc3RydWN0IGFyOTE3MF91c2IgKmFydSkKK3sKKwlpbnQgcmV0LCBsb2NrID0gKGFydS0+aW50Zi0+Y29uZGl0aW9uICE9IFVTQl9JTlRFUkZBQ0VfQklORElORyk7CisKKwlpZiAobG9jaykgeworCQlyZXQgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KGFydS0+dWRldiwgYXJ1LT5pbnRmKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAidW5hYmxlIHRvIGxvY2sgZGV2aWNlICIKKwkJCQkiZm9yIHJlc2V0ICglZCkuXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IHVzYl9yZXNldF9kZXZpY2UoYXJ1LT51ZGV2KTsKKwlpZiAobG9jaykKKwkJdXNiX3VubG9ja19kZXZpY2UoYXJ1LT51ZGV2KTsKKworCS8qIGxldCBpdCByZXN0IC0gZm9yIGEgc2Vjb25kIC0gKi8KKwltc2xlZXAoMTAwMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2JfdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCBhcjkxNzBfdXNiICphcnUpCit7CisJaW50IGVycjsKKworCS8qIEZpcnN0LCB1cGxvYWQgaW5pdGlhbCB2YWx1ZXMgdG8gZGV2aWNlIFJBTSAqLworCWVyciA9IGFyOTE3MF91c2JfdXBsb2FkKGFydSwgYXJ1LT5pbml0X3ZhbHVlcy0+ZGF0YSwKKwkJCQlhcnUtPmluaXRfdmFsdWVzLT5zaXplLCAweDEwMjgwMCwgZmFsc2UpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJmaXJtd2FyZSBwYXJ0IDEgIgorCQkJInVwbG9hZCBmYWlsZWQgKCVkKS5cbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogVGhlbiwgdXBsb2FkIHRoZSBmaXJtd2FyZSBpdHNlbGYgYW5kIHN0YXJ0IGl0ICovCisJcmV0dXJuIGFyOTE3MF91c2JfdXBsb2FkKGFydSwgYXJ1LT5maXJtd2FyZS0+ZGF0YSwgYXJ1LT5maXJtd2FyZS0+c2l6ZSwKKwkJCQkweDIwMDAwMCwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgYXI5MTcwX3VzYl9pbml0X3RyYW5zcG9ydChzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1KQoreworCXN0cnVjdCBhcjkxNzAgKmFyID0gKHZvaWQgKikgJmFydS0+Y29tbW9uOworCWludCBlcnI7CisKKwlhcjkxNzBfcmVnd3JpdGVfYmVnaW4oYXIpOworCisJLyogU2V0IFVTQiBSeCBzdHJlYW0gbW9kZSBNQVggcGFja2V0IG51bWJlciB0byAyICovCisJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9VU0JfUkVHX01BWF9BR0dfVVBMT0FELCAweDQpOworCisJLyogU2V0IFVTQiBSeCBzdHJlYW0gbW9kZSB0aW1lb3V0IHRvIDEwdXMgKi8KKwlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX1VTQl9SRUdfVVBMT0FEX1RJTUVfQ1RMLCAweDgwKTsKKworCWFyOTE3MF9yZWd3cml0ZV9maW5pc2goKTsKKworCWVyciA9IGFyOTE3MF9yZWd3cml0ZV9yZXN1bHQoKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKCZhcnUtPnVkZXYtPmRldiwgIlVTQiBzZXR1cCBmYWlsZWQgKCVkKS5cbiIsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBhcjkxNzBfdXNiX3N0b3Aoc3RydWN0IGFyOTE3MCAqYXIpCit7CisJc3RydWN0IGFyOTE3MF91c2IgKmFydSA9ICh2b2lkICopIGFyOworCWludCByZXQ7CisKKwlpZiAoSVNfQUNDRVBUSU5HX0NNRChhcikpCisJCWFydS0+Y29tbW9uLnN0YXRlID0gQVI5MTcwX1NUT1BQRUQ7CisKKwkvKiBsZXRzIHdhaXQgYSB3aGlsZSB1bnRpbCB0aGUgdHggLSBxdWV1ZXMgYXJlIGRyaWVkIG91dCAqLworCXJldCA9IHVzYl93YWl0X2FuY2hvcl9lbXB0eV90aW1lb3V0KCZhcnUtPnR4X3N1Ym1pdHRlZCwKKwkJCQkJICAgIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOworCWlmIChyZXQgPT0gMCkKKwkJZGV2X2VycigmYXJ1LT51ZGV2LT5kZXYsICJraWxsIHBlbmRpbmcgdHggdXJicy5cbiIpOworCisJdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisKKwkvKgorCSAqIE5vdGU6CisJICogU28gZmFyIHdlIGZyZWVkIGFsbCB0eCB1cmJzLCBidXQgd2Ugd29uJ3QgZGFyZSB0byB0b3VjaCBhbnkgcnggdXJicy4KKwkgKiBFbHNlIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGEgdW5yZXNwb25zaXZlIGRldmljZS4uLgorCSAqLworfQorCitzdGF0aWMgaW50IGFyOTE3MF91c2Jfb3BlbihzdHJ1Y3QgYXI5MTcwICphcikKK3sKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gKHZvaWQgKikgYXI7CisJaW50IGVycjsKKworCXVzYl91bnBvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisJZXJyID0gYXI5MTcwX3VzYl9pbml0X3RyYW5zcG9ydChhcnUpOworCWlmIChlcnIpIHsKKwkJdXNiX3BvaXNvbl9hbmNob3JlZF91cmJzKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisJCXJldHVybiBlcnI7CisJfQorCisJYXJ1LT5jb21tb24uc3RhdGUgPSBBUjkxNzBfSURMRTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfdXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBhcjkxNzBfdXNiICphcnU7CisJc3RydWN0IGFyOTE3MCAqYXI7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJaW50IGVycjsKKworCWFydSA9IGFyOTE3MF9hbGxvYyhzaXplb2YoKmFydSkpOworCWlmIChJU19FUlIoYXJ1KSkgeworCQllcnIgPSBQVFJfRVJSKGFydSk7CisJCWdvdG8gb3V0OworCX0KKworCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXVzYl9nZXRfZGV2KHVkZXYpOworCWFydS0+dWRldiA9IHVkZXY7CisJYXJ1LT5pbnRmID0gaW50ZjsKKwlhciA9ICZhcnUtPmNvbW1vbjsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgYXJ1KTsKKwlTRVRfSUVFRTgwMjExX0RFVihhci0+aHcsICZ1ZGV2LT5kZXYpOworCisJaW5pdF91c2JfYW5jaG9yKCZhcnUtPnJ4X3N1Ym1pdHRlZCk7CisJaW5pdF91c2JfYW5jaG9yKCZhcnUtPnR4X3N1Ym1pdHRlZCk7CisJaW5pdF9jb21wbGV0aW9uKCZhcnUtPmNtZF93YWl0KTsKKworCWFydS0+Y29tbW9uLnN0b3AgPSBhcjkxNzBfdXNiX3N0b3A7CisJYXJ1LT5jb21tb24ub3BlbiA9IGFyOTE3MF91c2Jfb3BlbjsKKwlhcnUtPmNvbW1vbi50eCA9IGFyOTE3MF91c2JfdHg7CisJYXJ1LT5jb21tb24uZXhlY19jbWQgPSBhcjkxNzBfdXNiX2V4ZWNfY21kOworCWFydS0+Y29tbW9uLmNhbGxiYWNrX2NtZCA9IGFyOTE3MF91c2JfY2FsbGJhY2tfY21kOworCisJZXJyID0gYXI5MTcwX3VzYl9yZXNldChhcnUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3VubG9jazsKKworCWVyciA9IGFyOTE3MF91c2JfcmVxdWVzdF9maXJtd2FyZShhcnUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3VubG9jazsKKworCWVyciA9IGFyOTE3MF91c2JfYWxsb2NfcnhfaXJxX3VyYihhcnUpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2ZyZWVmdzsKKworCWVyciA9IGFyOTE3MF91c2JfYWxsb2NfcnhfYnVsa191cmJzKGFydSk7CisJaWYgKGVycikKKwkJZ290byBlcnJfdW5yeDsKKworCWVyciA9IGFyOTE3MF91c2JfdXBsb2FkX2Zpcm13YXJlKGFydSk7CisJaWYgKGVycikgeworCQllcnIgPSBhcjkxNzBfZWNob190ZXN0KCZhcnUtPmNvbW1vbiwgMHg2MGQ0MzExMCk7CisJCWlmIChlcnIpIHsKKwkJCS8qIGZvcmNlIHVzZXIgaW52ZW50aW9uLCBieSBkaXNhYmxpbmcgdGhlIGRldmljZSAqLworCQkJZXJyID0gdXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbihhcnUtPnVkZXYsIC0xKTsKKwkJCWRldl9lcnIoJmFydS0+dWRldi0+ZGV2LCAiZGV2aWNlIGlzIGluIGEgYmFkIHN0YXRlLiAiCisJCQkJCQkgInBsZWFzZSByZWNvbm5lY3QgaXQhXG4iKTsKKwkJCWdvdG8gZXJyX3Vucng7CisJCX0KKwl9CisKKwllcnIgPSBhcjkxNzBfdXNiX29wZW4oYXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3Vucng7CisKKwllcnIgPSBhcjkxNzBfcmVnaXN0ZXIoYXIsICZ1ZGV2LT5kZXYpOworCisJYXI5MTcwX3VzYl9zdG9wKGFyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl91bnJ4OworCisJcmV0dXJuIDA7CisKK2Vycl91bnJ4OgorCWFyOTE3MF91c2JfY2FuY2VsX3VyYnMoYXJ1KTsKKworZXJyX2ZyZWVmdzoKKwlyZWxlYXNlX2Zpcm13YXJlKGFydS0+aW5pdF92YWx1ZXMpOworCXJlbGVhc2VfZmlybXdhcmUoYXJ1LT5maXJtd2FyZSk7CisKK2Vycl91bmxvY2s6CisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwl1c2JfcHV0X2Rldih1ZGV2KTsKKwlpZWVlODAyMTFfZnJlZV9odyhhci0+aHcpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFyOTE3MF91c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgYXI5MTcwX3VzYiAqYXJ1ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKworCWlmICghYXJ1KQorCQlyZXR1cm47CisKKwlhcnUtPmNvbW1vbi5zdGF0ZSA9IEFSOTE3MF9JRExFOworCWFyOTE3MF91bnJlZ2lzdGVyKCZhcnUtPmNvbW1vbik7CisJYXI5MTcwX3VzYl9jYW5jZWxfdXJicyhhcnUpOworCisJcmVsZWFzZV9maXJtd2FyZShhcnUtPmluaXRfdmFsdWVzKTsKKwlyZWxlYXNlX2Zpcm13YXJlKGFydS0+ZmlybXdhcmUpOworCisJdXNiX3B1dF9kZXYoYXJ1LT51ZGV2KTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCWllZWU4MDIxMV9mcmVlX2h3KGFydS0+Y29tbW9uLmh3KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFyOTE3MF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYXI5MTcwdXNiIiwKKwkucHJvYmUgPSBhcjkxNzBfdXNiX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gYXI5MTcwX3VzYl9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGFyOTE3MF91c2JfaWRzLAorCS5zb2Z0X3VuYmluZCA9IDEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhcjkxNzBfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmFyOTE3MF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXI5MTcwX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmYXI5MTcwX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFyOTE3MF9pbml0KTsKK21vZHVsZV9leGl0KGFyOTE3MF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FyOTE3MC91c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTg1MjkyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXI5MTcwL3VzYi5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBBdGhlcm9zIEFSOTE3MCBVU0IgZHJpdmVyCisgKgorICogRHJpdmVyIHNwZWNpZmljIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IDIwMDgsIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOSwgQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBzZWUKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8uCisgKgorICogVGhpcyBmaWxlIGluY29ycG9yYXRlcyB3b3JrIGNvdmVyZWQgYnkgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCisgKiBwZXJtaXNzaW9uIG5vdGljZToKKyAqICAgIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqCisgKiAgICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqICAgIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogICAgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiAgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfX1VTQl9ICisjZGVmaW5lIF9fVVNCX0gKKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxuZXQvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgImVlcHJvbS5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAiYXI5MTcwLmgiCisKKyNkZWZpbmUgQVI5MTcwX05VTV9SWF9VUkJTCQkJMTYKKworc3RydWN0IGZpcm13YXJlOworCitzdHJ1Y3QgYXI5MTcwX3VzYiB7CisJc3RydWN0IGFyOTE3MCBjb21tb247CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CisKKwlzdHJ1Y3QgdXNiX2FuY2hvciByeF9zdWJtaXR0ZWQ7CisJc3RydWN0IHVzYl9hbmNob3IgdHhfc3VibWl0dGVkOworCisJc3BpbmxvY2tfdCBjbWRsb2NrOworCXN0cnVjdCBjb21wbGV0aW9uIGNtZF93YWl0OworCWludCByZWFkbGVuOworCXU4ICpyZWFkYnVmOworCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICppbml0X3ZhbHVlczsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOworfTsKKworI2VuZGlmIC8qIF9fVVNCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FybGFuLW1haW4uYwppbmRleCBiZmNhMTVkLi41YjlmMWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hcmxhbi1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXJsYW4tbWFpbi5jCkBAIC0xMDMwLDcgKzEwMzAsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGFybGFuX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGFybGFuX29wZW4sCisJLm5kb19zdG9wCQk9IGFybGFuX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBhcmxhbl90eCwKKwkubmRvX2dldF9zdGF0cwkJPSBhcmxhbl9zdGF0aXN0aWNzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gYXJsYW5fc2V0X211bHRpY2FzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gYXJsYW5fY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGFybGFuX21hY19hZGRyLAorCS5uZG9fdHhfdGltZW91dAkJPSBhcmxhbl90eF90aW1lb3V0LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogc3RhdGljIGludCBfX2luaXQgYXJsYW5fc2V0dXBfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBudW0pCiB7CkBAIC0xMDQyLDE0ICsxMDUyLDcgQEAKIAlhcC0+Y29uZiA9IChzdHJ1Y3QgYXJsYW5fc2htZW0gKikoYXArMSk7CiAKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IHR4X3F1ZXVlX2xlbjsKLQlkZXYtPm9wZW4gPSBhcmxhbl9vcGVuOwotCWRldi0+c3RvcCA9IGFybGFuX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gYXJsYW5fdHg7Ci0JZGV2LT5nZXRfc3RhdHMgPSBhcmxhbl9zdGF0aXN0aWNzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gYXJsYW5fc2V0X211bHRpY2FzdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBhcmxhbl9jaGFuZ2VfbXR1OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gYXJsYW5fbWFjX2FkZHI7Ci0JZGV2LT50eF90aW1lb3V0ID0gYXJsYW5fdHhfdGltZW91dDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmYXJsYW5fbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMypIWjsKIAkKIAlhcC0+aXJxX3Rlc3RfZG9uZSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDJmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuYwpAQCAtMCwwICsxLDI1MDEgQEAKKy8qCisgKiBhdDc2YzUwMy9hdDc2YzUwNSBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyIC0gMjAwMyBPbGl2ZXIgS3VydGgKKyAqIENvcHlyaWdodCAoYykgMjAwNCBKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgTmljayBKb25lcworICogQ29weXJpZ2h0IChjKSAyMDA0IEJhbGludCBTZWViZXIgPG4wXzVwNG1fcDEzNDUzQGhvdG1haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA3IEd1aWRvIEd1ZW50aGVyIDxhZ3hAc2lneGNwdS5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bpa2kuZmk+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQmVybGlvcyBkcml2ZXIgZm9yIFdMQU4gVVNCIGRldmljZXMgYmFzZWQgb24gdGhlCisgKiBBdG1lbCBBVDc2QzUwM0EvNTA1LzUwNUEuCisgKgorICogU29tZSBpd19oYW5kbGVyIGNvZGUgd2FzIHRha2VuIGZyb20gYWlyby5jLCAoQykgMTk5OSBCZW5qYW1pbiBSZWVkCisgKgorICogVE9ETyBsaXN0IGlzIGF0IHRoZSB3aWtpOgorICoKKyAqIGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvYXQ3NmM1MHgtdXNiI1RPRE8KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJhdDc2YzUweC11c2IuaCIKKworLyogVmVyc2lvbiBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfTkFNRSAiYXQ3NmM1MHgtdXNiIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC4xNyIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkF0bWVsIGF0NzZ4IFVTQiBXaXJlbGVzcyBMQU4gRHJpdmVyIgorCisvKiBhdDc2X2RlYnVnIGJpdHMgKi8KKyNkZWZpbmUgREJHX1BST0dSRVNTCQkweDAwMDAwMDAxCS8qIGF1dGhlbnRpY2F0aW9uL2FjY29jaWF0aW9uICovCisjZGVmaW5lIERCR19CU1NfVEFCTEUJCTB4MDAwMDAwMDIJLyogc2hvdyBCU1MgdGFibGUgYWZ0ZXIgc2NhbnMgKi8KKyNkZWZpbmUgREJHX0lPQ1RMCQkweDAwMDAwMDA0CS8qIGlvY3RsIGNhbGxzIC8gc2V0dGluZ3MgKi8KKyNkZWZpbmUgREJHX01BQ19TVEFURQkJMHgwMDAwMDAwOAkvKiBNQUMgc3RhdGUgdHJhbnNpdGlvbnMgKi8KKyNkZWZpbmUgREJHX1RYX0RBVEEJCTB4MDAwMDAwMTAJLyogdHggaGVhZGVyICovCisjZGVmaW5lIERCR19UWF9EQVRBX0NPTlRFTlQJMHgwMDAwMDAyMAkvKiB0eCBjb250ZW50ICovCisjZGVmaW5lIERCR19UWF9NR01UCQkweDAwMDAwMDQwCS8qIHR4IG1hbmFnZW1lbnQgKi8KKyNkZWZpbmUgREJHX1JYX0RBVEEJCTB4MDAwMDAwODAJLyogcnggZGF0YSBoZWFkZXIgKi8KKyNkZWZpbmUgREJHX1JYX0RBVEFfQ09OVEVOVAkweDAwMDAwMTAwCS8qIHJ4IGRhdGEgY29udGVudCAqLworI2RlZmluZSBEQkdfUlhfTUdNVAkJMHgwMDAwMDIwMAkvKiByeCBtZ210IGZyYW1lIGhlYWRlcnMgKi8KKyNkZWZpbmUgREJHX1JYX0JFQUNPTgkJMHgwMDAwMDQwMAkvKiByeCBiZWFjb24gKi8KKyNkZWZpbmUgREJHX1JYX0NUUkwJCTB4MDAwMDA4MDAJLyogcnggY29udHJvbCAqLworI2RlZmluZSBEQkdfUlhfTUdNVF9DT05URU5UCTB4MDAwMDEwMDAJLyogcnggbWdtdCBjb250ZW50ICovCisjZGVmaW5lIERCR19SWF9GUkFHUwkJMHgwMDAwMjAwMAkvKiByeCBkYXRhIGZyYWdtZW50IGhhbmRsaW5nICovCisjZGVmaW5lIERCR19ERVZTVEFSVAkJMHgwMDAwNDAwMAkvKiBmdyBkb3dubG9hZCwgZGV2aWNlIHN0YXJ0ICovCisjZGVmaW5lIERCR19VUkIJCQkweDAwMDA4MDAwCS8qIHJ4IHVyYiBzdGF0dXMsIC4uLiAqLworI2RlZmluZSBEQkdfUlhfQVRNRUxfSERSCTB4MDAwMTAwMDAJLyogQXRtZWwtc3BlY2lmaWMgUnggaGVhZGVycyAqLworI2RlZmluZSBEQkdfUFJPQ19FTlRSWQkJMHgwMDAyMDAwMAkvKiBwcm9jZWR1cmUgZW50cmllcy9leGl0cyAqLworI2RlZmluZSBEQkdfUE0JCQkweDAwMDQwMDAwCS8qIHBvd2VyIG1hbmFnZW1lbnQgc2V0dGluZ3MgKi8KKyNkZWZpbmUgREJHX0JTU19NQVRDSAkJMHgwMDA4MDAwMAkvKiBCU1MgbWF0Y2ggZmFpbHVyZXMgKi8KKyNkZWZpbmUgREJHX1BBUkFNUwkJMHgwMDEwMDAwMAkvKiBzaG93IGNvbmZpZ3VyZWQgcGFyYW1ldGVycyAqLworI2RlZmluZSBEQkdfV0FJVF9DT01QTEVURQkweDAwMjAwMDAwCS8qIGNvbW1hbmQgY29tcGxldGlvbiAqLworI2RlZmluZSBEQkdfUlhfRlJBR1NfU0tCCTB4MDA0MDAwMDAJLyogc2tiIGhlYWRlciBvZiBSeCBmcmFnbWVudHMgKi8KKyNkZWZpbmUgREJHX0JTU19UQUJMRV9STQkweDAwODAwMDAwCS8qIHB1cmdpbmcgYnNzIHRhYmxlIGVudHJpZXMgKi8KKyNkZWZpbmUgREJHX01PTklUT1JfTU9ERQkweDAxMDAwMDAwCS8qIG1vbml0b3IgbW9kZSAqLworI2RlZmluZSBEQkdfTUlCCQkJMHgwMjAwMDAwMAkvKiBkdW1wIGFsbCBNSUJzIG9uIHN0YXJ0dXAgKi8KKyNkZWZpbmUgREJHX01HTVRfVElNRVIJCTB4MDQwMDAwMDAJLyogZHVtcCBtZ210X3RpbWVyIG9wcyAqLworI2RlZmluZSBEQkdfV0VfRVZFTlRTCQkweDA4MDAwMDAwCS8qIGR1bXAgd2lyZWxlc3MgZXZlbnRzICovCisjZGVmaW5lIERCR19GVwkJCTB4MTAwMDAwMDAJLyogZmlybXdhcmUgZG93bmxvYWQgKi8KKyNkZWZpbmUgREJHX0RGVQkJCTB4MjAwMDAwMDAJLyogZGV2aWNlIGZpcm13YXJlIHVwZ3JhZGUgKi8KKyNkZWZpbmUgREJHX0NNRAkJCTB4NDAwMDAwMDAKKyNkZWZpbmUgREJHX01BQzgwMjExCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgREJHX0RFRkFVTFRTCQkwCisKKy8qIFVzZSBvdXIgb3duIGRiZyBtYWNybyAqLworI2RlZmluZSBhdDc2X2RiZyhiaXRzLCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAoYXQ3Nl9kZWJ1ZyAmIChiaXRzKSkJCQkJIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIERSSVZFUl9OQU1FICI6ICIgZm9ybWF0ICJcbiIgLCBcCisJCQkgICAgICAgIyMgYXJnKTsJCQkJCSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBhdDc2X2RiZ19kdW1wKGJpdHMsIGJ1ZiwgbGVuLCBmb3JtYXQsIGFyZy4uLikJXAorCWRvIHsgXAorCQlpZiAoYXQ3Nl9kZWJ1ZyAmIChiaXRzKSkgeyBcCisJCQlwcmludGsoS0VSTl9ERUJVRyBEUklWRVJfTkFNRSAiOiAiIGZvcm1hdCAiXG4iICwgXAorCQkJICAgICAgICMjIGFyZyk7CQkJCQkgXAorCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIiIsIERVTVBfUFJFRklYX09GRlNFVCwgICAgIFwKKwkJCQkJICAgICBidWYsIGxlbik7CQkJIFwKKwkJfQkJCQkJCQkgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyB1aW50IGF0NzZfZGVidWcgPSBEQkdfREVGQVVMVFM7CisKKy8qIFByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IGZpcm13YXJlIGxvYWRpbmcgYW5kIHBhcnNpbmcgKi8KK3N0YXRpYyBzdHJ1Y3QgbXV0ZXggZndfbXV0ZXg7CisKK3N0YXRpYyBzdHJ1Y3QgZndlbnRyeSBmaXJtd2FyZXNbXSA9IHsKKwlbMF0gPSB7ICIiIH0sCisJW0JPQVJEXzUwM19JU0wzODYxXSA9IHsgImF0bWVsX2F0NzZjNTAzLWkzODYxLmJpbiIgfSwKKwlbQk9BUkRfNTAzX0lTTDM4NjNdID0geyAiYXRtZWxfYXQ3NmM1MDMtaTM4NjMuYmluIiB9LAorCVtCT0FSRF81MDNdID0geyAiYXRtZWxfYXQ3NmM1MDMtcmZtZC5iaW4iIH0sCisJW0JPQVJEXzUwM19BQ0NdID0geyAiYXRtZWxfYXQ3NmM1MDMtcmZtZC1hY2MuYmluIiB9LAorCVtCT0FSRF81MDVdID0geyAiYXRtZWxfYXQ3NmM1MDUtcmZtZC5iaW4iIH0sCisJW0JPQVJEXzUwNV8yOTU4XSA9IHsgImF0bWVsX2F0NzZjNTA1LXJmbWQyOTU4LmJpbiIgfSwKKwlbQk9BUkRfNTA1QV0gPSB7ICJhdG1lbF9hdDc2YzUwNWEtcmZtZDI5NTguYmluIiB9LAorCVtCT0FSRF81MDVBTVhdID0geyAiYXRtZWxfYXQ3NmM1MDVhbXgtcmZtZC5iaW4iIH0sCit9OworCisjZGVmaW5lIFVTQl9ERVZJQ0VfREFUQShfX29wcykJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KShfX29wcykKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldl90YWJsZVtdID0geworCS8qCisJICogYXQ3NmM1MDMtaTM4NjEKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTAzLzM4NjEgZGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjAzKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIExpbmtzeXMgV1VTQjExIHYyLjEvdjIuNiAqLworCXsgVVNCX0RFVklDRSgweDA2NmIsIDB4MjIxMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBOZXRnZWFyIE1BMTAxIHJldi4gQSAqLworCXsgVVNCX0RFVklDRSgweDA4NjQsIDB4NDEwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBUZWtyYW0gVTMwMEMgLyBBbGxuZXQgQUxMMDE5MyAqLworCXsgVVNCX0RFVklDRSgweDBiM2IsIDB4MTYxMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBIUCBITjIxMFcgSjc4MDFBICovCisJeyBVU0JfREVWSUNFKDB4MDNmMCwgMHgwMTFjKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwM19JU0wzODYxKSB9LAorCS8qIFNpdGVjb20vWi1Db20vWnl4ZWwgTTRZLTc1MCAqLworCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBEeW5hbGluay9Bc2tleSBXTEwwMTMgKGludGVyc2lsKSAqLworCXsgVVNCX0RFVklDRSgweDA2OWEsIDB4MDMyMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBFWiBjb25uZWN0IDExTXBicyBXaXJlbGVzcyBVU0IgQWRhcHRlciBTTUMyNjYyVyB2MSAqLworCXsgVVNCX0RFVklDRSgweDBkNWMsIDB4YTAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBCZW5RIEFXTDMwMCAqLworCXsgVVNCX0RFVklDRSgweDA0YTUsIDB4OTAwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBBZGR0cm9uIEFXVS0xMjAsIENvbXBleCBXTFUxMSAqLworCXsgVVNCX0RFVklDRSgweDA1ZGQsIDB4ZmYzMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBJbnRlbCBBUDMxMCBBbnlQb2ludCBJSSBVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHg4MDg2LCAweDAyMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogRHluYWxpbmsgTDExVSAqLworCXsgVVNCX0RFVklDRSgweDBkOGUsIDB4NzEwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBBcmVzY29tIFdMLTIxMCwgRkNDIGlkIDA3Si1HTDI0MTFVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZDhlLCAweDcxMTApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyogSS1PIERBVEEgV04tQjExL1VTQiAqLworCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkxOSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfSVNMMzg2MSkgfSwKKwkvKiBCVCBWb3lhZ2VyIDEwMTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNjlhLCAweDA4MjEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjEpIH0sCisJLyoKKwkgKiBhdDc2YzUwMy1pMzg2MworCSAqLworCS8qIEdlbmVyaWMgQVQ3NkM1MDMvMzg2MyBkZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDQpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjMpIH0sCisJLyogU2Ftc3VuZyBTV0wtMjEwMFUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTVkLCAweGEwMDApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0lTTDM4NjMpIH0sCisJLyoKKwkgKiBhdDc2YzUwMy1yZm1kCisJICovCisJLyogR2VuZXJpYyBBVDc2QzUwMy9SRk1EIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYwNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogRHluYWxpbmsvQXNrZXkgV0xMMDEzIChyZm1kKSAqLworCXsgVVNCX0RFVklDRSgweDA2OWEsIDB4MDMyMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogTGlua3N5cyBXVVNCMTEgdjIuNiAqLworCXsgVVNCX0RFVklDRSgweDA3N2IsIDB4MjIxOSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogTmV0d29yayBFdmVyeXdoZXJlIE5XVTExQiAqLworCXsgVVNCX0RFVklDRSgweDA3N2IsIDB4MjIyNyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogTmV0Z2VhciBNQTEwMSByZXYuIEIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODY0LCAweDQxMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEQtTGluayBEV0wtMTIwIHJldi4gRSAqLworCXsgVVNCX0RFVklDRSgweDIwMDEsIDB4MzIwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQWN0aW9udGVjIDgwMlVBVDEsIEhXVTAxMTUwLTAxVUsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjY4LCAweDc2MDUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEFpclZhc3QgVy1CdWRkaWUgV04yMTAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDQxMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIERpY2sgU21pdGggRWxlY3Ryb25pY3MgWEgxMTUzIDgwMi4xMWIgVVNCIGFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDU3NDMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIENOZXQgQ05VU0I2MTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEZpYmVyTGluZSBGTC1XTDIwMFUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIEJlblEgQVdMNDAwIFVTQiBzdGljayAqLworCXsgVVNCX0RFVklDRSgweDA0YTUsIDB4OTAwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogM0NvbSAzQ1JTSEVXNjk2ICovCisJeyBVU0JfREVWSUNFKDB4MDUwNiwgMHgwYTAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBTaWVtZW5zIFNhbnRpcyBBRFNMIFdMQU4gVVNCIGFkYXB0ZXIgV0xMIDAxMyAqLworCXsgVVNCX0RFVklDRSgweDA2ODEsIDB4MDAxYiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQmVsa2luIEY1RDYwNTAsIHZlcnNpb24gMiAqLworCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDA1MCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogaUJsaXR6eiwgQldVNjEzIChub3QgKkIgb3IgKlNCKSAqLworCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4YjAwMCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogR2lnYWJ5dGUgR04tV0xCTTEwMSAqLworCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogUGxhbmV4IEdXLVVTMTFTICovCisJeyBVU0JfREVWSUNFKDB4MjAxOSwgMHgzMjIwKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwMykgfSwKKwkvKiBJbnRlcm5hbCBXTEFOIGFkYXB0ZXIgaW4gaDVbNCw1XXh4IHNlcmllcyBpUEFRcyAqLworCXsgVVNCX0RFVklDRSgweDA0OWYsIDB4MDAzMiksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQ29yZWdhIFdpcmVsZXNzIExBTiBVU0ItMTEgbWluaSAqLworCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAxMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDMpIH0sCisJLyogQ29yZWdhIFdpcmVsZXNzIExBTiBVU0ItMTEgbWluaTIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMTgpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qIFVuaWRlbiBQQ1cxMDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNWRkLCAweGZmMzUpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzKSB9LAorCS8qCisJICogYXQ3NmM1MDMtcmZtZC1hY2MKKwkgKi8KKwkvKiBTTUMyNjY0VyAqLworCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4MzUwMSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDNfQUNDKSB9LAorCS8qIEJlbGtpbiBGNUQ2MDUwLCBTTUMyNjYyVyB2MiwgU01DMjY2MlctQVIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZDVjLCAweGEwMDIpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTAzX0FDQykgfSwKKwkvKgorCSAqIGF0NzZjNTA1LXJmbWQKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1L1JGTUQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MDYpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1KSB9LAorCS8qCisJICogYXQ3NmM1MDUtcmZtZDI5NTgKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1L1JGTUQsIE92aXNMaW5rIFdMLTExMzBVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyogRmliZXJsaW5lIEZMLVdMMjQwVSAqLworCXsgVVNCX0RFVklDRSgweDEzNzEsIDB4MDAxNCksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBDTmV0IENOVVNCLTYxMUcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMzcxLCAweDAwMTMpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyogTGlua3N5cyBXVVNCMTEgdjIuOCAqLworCXsgVVNCX0RFVklDRSgweDE5MTUsIDB4MjIzMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBYdGVyYXN5cyBYTi0yMTIyQiwgSUJsaXR6eiBCV1U2MTNCL0JXVTYxM1NCICovCisJeyBVU0JfREVWSUNFKDB4MTJmZCwgMHgxMDAxKSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNV8yOTU4KSB9LAorCS8qIENvcmVnYSBXTEFOIFVTQiBTdGljayAxMSAqLworCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4NzYxMyksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVfMjk1OCkgfSwKKwkvKiBNaWNyb3N0YXIgTVNJIEJveCBNUzY5NzggKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDEwMjApLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1XzI5NTgpIH0sCisJLyoKKwkgKiBhdDc2YzUwNWEtcmZtZDI5NTgKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1QSBkZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM2ViLCAweDc2MTQpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QSkgfSwKKwkvKiBHZW5lcmljIEFUNzZDNTA1QVMgZGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MDNlYiwgMHg3NjE3KSwgVVNCX0RFVklDRV9EQVRBKEJPQVJEXzUwNUEpIH0sCisJLyogU2llbWVucyBHaWdhc2V0IFVTQiBXTEFOIEFkYXB0ZXIgMTEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA3MDEpLCBVU0JfREVWSUNFX0RBVEEoQk9BUkRfNTA1QSkgfSwKKwkvKgorCSAqIGF0NzZjNTA1YW14LXJmbWQKKwkgKi8KKwkvKiBHZW5lcmljIEFUNzZDNTA1QU1YIGRldmljZSAqLworCXsgVVNCX0RFVklDRSgweDAzZWIsIDB4NzYxNSksIFVTQl9ERVZJQ0VfREFUQShCT0FSRF81MDVBTVgpIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2X3RhYmxlKTsKKworLyogU3VwcG9ydGVkIHJhdGVzIG9mIHRoaXMgaGFyZHdhcmUsIGJpdCA3IG1hcmtzIGJhc2ljIHJhdGVzICovCitzdGF0aWMgY29uc3QgdTggaHdfcmF0ZXNbXSA9IHsgMHg4MiwgMHg4NCwgMHgwYiwgMHgxNiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgcHJlYW1ibGVzW10gPSB7ICJsb25nIiwgInNob3J0IiwgImF1dG8iIH07CisKKy8qIEZpcm13YXJlIGRvd25sb2FkICovCisvKiBERlUgc3RhdGVzICovCisjZGVmaW5lIFNUQVRFX0lETEUJCQkweDAwCisjZGVmaW5lIFNUQVRFX0RFVEFDSAkJCTB4MDEKKyNkZWZpbmUgU1RBVEVfREZVX0lETEUJCQkweDAyCisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9TWU5DCQkweDAzCisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9CVVNZCQkweDA0CisjZGVmaW5lIFNUQVRFX0RGVV9ET1dOTE9BRF9JRExFCQkweDA1CisjZGVmaW5lIFNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DCQkweDA2CisjZGVmaW5lIFNUQVRFX0RGVV9NQU5JRkVTVAkJMHgwNworI2RlZmluZSBTVEFURV9ERlVfTUFOSUZFU1RfV0FJVF9SRVNFVAkweDA4CisjZGVmaW5lIFNUQVRFX0RGVV9VUExPQURfSURMRQkJMHgwOQorI2RlZmluZSBTVEFURV9ERlVfRVJST1IJCQkweDBhCisKKy8qIERGVSBjb21tYW5kcyAqLworI2RlZmluZSBERlVfREVUQUNICQkJMAorI2RlZmluZSBERlVfRE5MT0FECQkJMQorI2RlZmluZSBERlVfVVBMT0FECQkJMgorI2RlZmluZSBERlVfR0VUU1RBVFVTCQkJMworI2RlZmluZSBERlVfQ0xSU1RBVFVTCQkJNAorI2RlZmluZSBERlVfR0VUU1RBVEUJCQk1CisjZGVmaW5lIERGVV9BQk9SVAkJCTYKKworI2RlZmluZSBGV19CTE9DS19TSVpFIDEwMjQKKworc3RydWN0IGRmdV9zdGF0dXMgeworCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCXVuc2lnbmVkIGNoYXIgcG9sbF90aW1lb3V0WzNdOworCXVuc2lnbmVkIGNoYXIgc3RhdGU7CisJdW5zaWduZWQgY2hhciBzdHJpbmc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2lzX2ludGVyc2lsKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwM19JU0wzODYxIHx8IGJvYXJkID09IEJPQVJEXzUwM19JU0wzODYzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc181MDNyZm1kKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwMyB8fCBib2FyZCA9PSBCT0FSRF81MDNfQUNDKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9pc181MDVhKGVudW0gYm9hcmRfdHlwZSBib2FyZCkKK3sKKwlyZXR1cm4gKGJvYXJkID09IEJPQVJEXzUwNUEgfHwgYm9hcmQgPT0gQk9BUkRfNTA1QU1YKTsKK30KKworLyogTG9hZCBhIGJsb2NrIG9mIHRoZSBmaXJzdCAoaW50ZXJuYWwpIHBhcnQgb2YgdGhlIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9pbnRfZndfYmxvY2soc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBibG9ja25vLAorCQkJCSAgdm9pZCAqYmxvY2ssIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCBERlVfRE5MT0FELAorCQkJICAgICAgIFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJICAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIGJsb2Nrbm8sIDAsIGJsb2NrLCBzaXplLAorCQkJICAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworc3RhdGljIGludCBhdDc2X2RmdV9nZXRfc3RhdHVzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZnVfc3RhdHVzICpzdGF0dXMpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIERGVV9HRVRTVEFUVVMsCisJCQkgICAgICBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorCQkJICAgICAgMCwgMCwgc3RhdHVzLCBzaXplb2Yoc3RydWN0IGRmdV9zdGF0dXMpLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1OCBhdDc2X2RmdV9nZXRfc3RhdGUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4ICpzdGF0ZSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwgREZVX0dFVFNUQVRFLAorCQkJICAgICAgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX0lOIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCSAgICAgIDAsIDAsIHN0YXRlLCAxLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7CisJcmV0dXJuIHJldDsKK30KKworLyogQ29udmVydCB0aW1lb3V0IGZyb20gdGhlIERGVSBzdGF0dXMgdG8gamlmZmllcyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0NzZfZ2V0X3RpbWVvdXQoc3RydWN0IGRmdV9zdGF0dXMgKnMpCit7CisJcmV0dXJuIG1zZWNzX3RvX2ppZmZpZXMoKHMtPnBvbGxfdGltZW91dFsyXSA8PCAxNikKKwkJCQl8IChzLT5wb2xsX3RpbWVvdXRbMV0gPDwgOCkKKwkJCQl8IChzLT5wb2xsX3RpbWVvdXRbMF0pKTsKK30KKworLyogTG9hZCBpbnRlcm5hbCBmaXJtd2FyZSBmcm9tIHRoZSBidWZmZXIuICBJZiBtYW5pZmVzdF9zeW5jX3RpbWVvdXQgPiAwLCB1c2UKKyAqIGl0cyB2YWx1ZSBpbiBqaWZmaWVzIGluIHRoZSBNQU5JRkVTVF9TWU5DIHN0YXRlLiAgKi8KK3N0YXRpYyBpbnQgYXQ3Nl91c2JkZnVfZG93bmxvYWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4ICpidWYsIHUzMiBzaXplLAorCQkJCWludCBtYW5pZmVzdF9zeW5jX3RpbWVvdXQpCit7CisJdTggKmJsb2NrOworCXN0cnVjdCBkZnVfc3RhdHVzIGRmdV9zdGF0X2J1ZjsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgbmVlZF9kZnVfc3RhdGUgPSAxOworCWludCBpc19kb25lID0gMDsKKwl1OCBkZnVfc3RhdGUgPSAwOworCXUzMiBkZnVfdGltZW91dCA9IDA7CisJaW50IGJzaXplID0gMDsKKwlpbnQgYmxvY2tubyA9IDA7CisKKwlhdDc2X2RiZyhEQkdfREZVLCAiJXMoICVwLCAldSwgJWQpIiwgX19mdW5jX18sIGJ1Ziwgc2l6ZSwKKwkJIG1hbmlmZXN0X3N5bmNfdGltZW91dCk7CisKKwlpZiAoIXNpemUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwgIkZXIGJ1ZmZlciBsZW5ndGggaW52YWxpZCFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibG9jayA9IGttYWxsb2MoRldfQkxPQ0tfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibG9jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlkbyB7CisJCWlmIChuZWVkX2RmdV9zdGF0ZSkgeworCQkJcmV0ID0gYXQ3Nl9kZnVfZ2V0X3N0YXRlKHVkZXYsICZkZnVfc3RhdGUpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJCQkgICAiY2Fubm90IGdldCBERlUgc3RhdGU6ICVkXG4iLCByZXQpOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJCW5lZWRfZGZ1X3N0YXRlID0gMDsKKwkJfQorCisJCXN3aXRjaCAoZGZ1X3N0YXRlKSB7CisJCWNhc2UgU1RBVEVfREZVX0RPV05MT0FEX1NZTkM6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX0RPV05MT0FEX1NZTkMiKTsKKwkJCXJldCA9IGF0NzZfZGZ1X2dldF9zdGF0dXModWRldiwgJmRmdV9zdGF0X2J1Zik7CisJCQlpZiAocmV0ID49IDApIHsKKwkJCQlkZnVfc3RhdGUgPSBkZnVfc3RhdF9idWYuc3RhdGU7CisJCQkJZGZ1X3RpbWVvdXQgPSBhdDc2X2dldF90aW1lb3V0KCZkZnVfc3RhdF9idWYpOworCQkJCW5lZWRfZGZ1X3N0YXRlID0gMDsKKwkJCX0gZWxzZQorCQkJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkJCSAgICJhdDc2X2RmdV9nZXRfc3RhdHVzIHJldHVybmVkICVkXG4iLAorCQkJCQkgICByZXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfRE9XTkxPQURfQlVTWToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfRE9XTkxPQURfQlVTWSIpOworCQkJbmVlZF9kZnVfc3RhdGUgPSAxOworCisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVOiBSZXNldHRpbmcgZGV2aWNlIik7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoZGZ1X3RpbWVvdXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfRE9XTkxPQURfSURMRToKKwkJCWF0NzZfZGJnKERCR19ERlUsICJET1dOTE9BRC4uLiIpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgU1RBVEVfREZVX0lETEU6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVIElETEUiKTsKKworCQkJYnNpemUgPSBtaW5fdChpbnQsIHNpemUsIEZXX0JMT0NLX1NJWkUpOworCQkJbWVtY3B5KGJsb2NrLCBidWYsIGJzaXplKTsKKwkJCWF0NzZfZGJnKERCR19ERlUsICJpbnQgZncsIHNpemUgbGVmdCA9ICU1ZCwgIgorCQkJCSAiYnNpemUgPSAlNGQsIGJsb2Nrbm8gPSAlMmQiLCBzaXplLCBic2l6ZSwKKwkJCQkgYmxvY2tubyk7CisJCQlyZXQgPQorCQkJICAgIGF0NzZfbG9hZF9pbnRfZndfYmxvY2sodWRldiwgYmxvY2tubywgYmxvY2ssIGJzaXplKTsKKwkJCWJ1ZiArPSBic2l6ZTsKKwkJCXNpemUgLT0gYnNpemU7CisJCQlibG9ja25vKys7CisKKwkJCWlmIChyZXQgIT0gYnNpemUpCisJCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkJICAgImF0NzZfbG9hZF9pbnRfZndfYmxvY2sgIgorCQkJCQkgICAicmV0dXJuZWQgJWRcbiIsIHJldCk7CisJCQluZWVkX2RmdV9zdGF0ZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DOgorCQkJYXQ3Nl9kYmcoREJHX0RGVSwgIlNUQVRFX0RGVV9NQU5JRkVTVF9TWU5DIik7CisKKwkJCXJldCA9IGF0NzZfZGZ1X2dldF9zdGF0dXModWRldiwgJmRmdV9zdGF0X2J1Zik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlicmVhazsKKworCQkJZGZ1X3N0YXRlID0gZGZ1X3N0YXRfYnVmLnN0YXRlOworCQkJZGZ1X3RpbWVvdXQgPSBhdDc2X2dldF90aW1lb3V0KCZkZnVfc3RhdF9idWYpOworCQkJbmVlZF9kZnVfc3RhdGUgPSAwOworCisJCQkvKiBvdmVycmlkZSB0aGUgdGltZW91dCBmcm9tIHRoZSBzdGF0dXMgcmVzcG9uc2UsCisJCQkgICBuZWVkZWQgZm9yIEFUNzZDNTA1QSAqLworCQkJaWYgKG1hbmlmZXN0X3N5bmNfdGltZW91dCA+IDApCisJCQkJZGZ1X3RpbWVvdXQgPSBtYW5pZmVzdF9zeW5jX3RpbWVvdXQ7CisKKwkJCWF0NzZfZGJnKERCR19ERlUsICJERlU6IFdhaXRpbmcgZm9yIG1hbmlmZXN0IHBoYXNlIik7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoZGZ1X3RpbWVvdXQpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfTUFOSUZFU1Q6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX01BTklGRVNUIik7CisJCQlpc19kb25lID0gMTsKKwkJCWJyZWFrOworCisJCWNhc2UgU1RBVEVfREZVX01BTklGRVNUX1dBSVRfUkVTRVQ6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX01BTklGRVNUX1dBSVRfUkVTRVQiKTsKKwkJCWlzX2RvbmUgPSAxOworCQkJYnJlYWs7CisKKwkJY2FzZSBTVEFURV9ERlVfVVBMT0FEX0lETEU6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiU1RBVEVfREZVX1VQTE9BRF9JRExFIik7CisJCQlicmVhazsKKworCQljYXNlIFNUQVRFX0RGVV9FUlJPUjoKKwkJCWF0NzZfZGJnKERCR19ERlUsICJTVEFURV9ERlVfRVJST1IiKTsKKwkJCXJldCA9IC1FUElQRTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlhdDc2X2RiZyhEQkdfREZVLCAiREZVIFVOS05PV04gU1RBVEUgKCVkKSIsIGRmdV9zdGF0ZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICghaXNfZG9uZSAmJiAocmV0ID49IDApKTsKKworZXhpdDoKKwlrZnJlZShibG9jayk7CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSAwOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBIRVgyU1RSX0JVRkZFUlMgNAorI2RlZmluZSBIRVgyU1RSX01BWF9MRU4gNjQKKyNkZWZpbmUgQklOMkhFWCh4KSAoKHgpIDwgMTAgPyAnMCcgKyAoeCkgOiAoeCkgKyAnQScgLSAxMCkKKworLyogQ29udmVydCBiaW5hcnkgZGF0YSBpbnRvIGhleCBzdHJpbmcgKi8KK3N0YXRpYyBjaGFyICpoZXgyc3RyKHZvaWQgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdGF0aWMgYXRvbWljX3QgYSA9IEFUT01JQ19JTklUKDApOworCXN0YXRpYyBjaGFyIGJ1ZnNbSEVYMlNUUl9CVUZGRVJTXVszICogSEVYMlNUUl9NQVhfTEVOICsgMV07CisJY2hhciAqcmV0ID0gYnVmc1thdG9taWNfaW5jX3JldHVybigmYSkgJiAoSEVYMlNUUl9CVUZGRVJTIC0gMSldOworCWNoYXIgKm9idWYgPSByZXQ7CisJdTggKmlidWYgPSBidWY7CisKKwlpZiAobGVuID4gSEVYMlNUUl9NQVhfTEVOKQorCQlsZW4gPSBIRVgyU1RSX01BWF9MRU47CisKKwlpZiAobGVuIDw9IDApIHsKKwkJcmV0WzBdID0gJ1wwJzsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl3aGlsZSAobGVuLS0pIHsKKwkJKm9idWYrKyA9IEJJTjJIRVgoKmlidWYgPj4gNCk7CisJCSpvYnVmKysgPSBCSU4ySEVYKCppYnVmICYgMHhmKTsKKwkJKm9idWYrKyA9ICctJzsKKwkJaWJ1ZisrOworCX0KKwkqKC0tb2J1ZikgPSAnXDAnOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQUMyU1RSX0JVRkZFUlMgNAorCitzdGF0aWMgaW5saW5lIGNoYXIgKm1hYzJzdHIodTggKm1hYykKK3sKKwlzdGF0aWMgYXRvbWljX3QgYSA9IEFUT01JQ19JTklUKDApOworCXN0YXRpYyBjaGFyIGJ1ZnNbTUFDMlNUUl9CVUZGRVJTXVs2ICogM107CisJY2hhciAqc3RyOworCisJc3RyID0gYnVmc1thdG9taWNfaW5jX3JldHVybigmYSkgJiAoTUFDMlNUUl9CVUZGRVJTIC0gMSldOworCXNwcmludGYoc3RyLCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiLAorCQltYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKKwlyZXR1cm4gc3RyOworfQorCisvKiBMRUQgdHJpZ2dlciAqLworc3RhdGljIGludCB0eF9hY3Rpdml0eTsKK3N0YXRpYyB2b2lkIGF0NzZfbGVkdHJpZ190eF90aW1lcmZ1bmModW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyBERUZJTkVfVElNRVIobGVkdHJpZ190eF90aW1lciwgYXQ3Nl9sZWR0cmlnX3R4X3RpbWVyZnVuYywgMCwgMCk7CitERUZJTkVfTEVEX1RSSUdHRVIobGVkdHJpZ190eCk7CisKK3N0YXRpYyB2b2lkIGF0NzZfbGVkdHJpZ190eF90aW1lcmZ1bmModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0YXRpYyBpbnQgdHhfbGFzdGFjdGl2aXR5OworCisJaWYgKHR4X2xhc3RhY3Rpdml0eSAhPSB0eF9hY3Rpdml0eSkgeworCQl0eF9sYXN0YWN0aXZpdHkgPSB0eF9hY3Rpdml0eTsKKwkJbGVkX3RyaWdnZXJfZXZlbnQobGVkdHJpZ190eCwgTEVEX0ZVTEwpOworCQltb2RfdGltZXIoJmxlZHRyaWdfdHhfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOworCX0gZWxzZQorCQlsZWRfdHJpZ2dlcl9ldmVudChsZWR0cmlnX3R4LCBMRURfT0ZGKTsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9sZWR0cmlnX3R4X2FjdGl2aXR5KHZvaWQpCit7CisJdHhfYWN0aXZpdHkrKzsKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJmxlZHRyaWdfdHhfdGltZXIpKQorCQltb2RfdGltZXIoJmxlZHRyaWdfdHhfdGltZXIsIGppZmZpZXMgKyBIWiAvIDQpOworfQorCitzdGF0aWMgaW50IGF0NzZfcmVtYXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLCAweDBhLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQgfAorCQkJICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgMCwgTlVMTCwgMCwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2dldF9vcF9tb2RlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCByZXQ7CisJdTggc2F2ZWQ7CisJdTggKm9wX21vZGU7CisKKwlvcF9tb2RlID0ga21hbGxvYygxLCBHRlBfTk9JTyk7CisJaWYgKCFvcF9tb2RlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCAweDAxLCAwLCBvcF9tb2RlLCAxLAorCQkJICAgICAgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOworCXNhdmVkID0gKm9wX21vZGU7CisJa2ZyZWUob3BfbW9kZSk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwllbHNlIGlmIChyZXQgPCAxKQorCQlyZXR1cm4gLUVJTzsKKwllbHNlCisJCXJldHVybiBzYXZlZDsKK30KKworLyogTG9hZCBhIGJsb2NrIG9mIHRoZSBzZWNvbmQgKCJleHRlcm5hbCIpIHBhcnQgb2YgdGhlIGZpcm13YXJlICovCitzdGF0aWMgaW5saW5lIGludCBhdDc2X2xvYWRfZXh0X2Z3X2Jsb2NrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgYmxvY2tubywKKwkJCQkJIHZvaWQgKmJsb2NrLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwZSwKKwkJCSAgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX09VVCB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICAgMHgwODAyLCBibG9ja25vLCBibG9jaywgc2l6ZSwKKwkJCSAgICAgICBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X2h3X2NmZyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkgIHVuaW9uIGF0NzZfaHdjZmcgKmJ1ZiwgaW50IGJ1Zl9zaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4gfAorCQkJICAgICAgIFVTQl9SRUNJUF9JTlRFUkZBQ0UsIDB4MGEwMiwgMCwKKwkJCSAgICAgICBidWYsIGJ1Zl9zaXplLCBVU0JfQ1RSTF9HRVRfVElNRU9VVCk7Cit9CisKKy8qIEludGVyc2lsIGJvYXJkcyB1c2UgYSBkaWZmZXJlbnQgInZhbHVlIiBmb3IgR2V0SFdDb25maWcgcmVxdWVzdHMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfZ2V0X2h3X2NmZ19pbnRlcnNpbChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkJICAgdW5pb24gYXQ3Nl9od2NmZyAqYnVmLCBpbnQgYnVmX3NpemUpCit7CisJcmV0dXJuIHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksIDB4MzMsCisJCQkgICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICAgVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMHgwOTAyLCAwLAorCQkJICAgICAgIGJ1ZiwgYnVmX3NpemUsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKK30KKworLyogR2V0IHRoZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uIGZvciB0aGUgYWRhcHRlciBhbmQgcHV0IGl0IHRvIHRoZSBhcHByb3ByaWF0ZQorICogZmllbGRzIG9mICdwcml2JyAodGhlIEdldEhXQ29uZmlnIHJlcXVlc3QgYW5kIGludGVycHJldGF0aW9uIG9mIHRoZSByZXN1bHQKKyAqIGRlcGVuZHMgb24gdGhlIGJvYXJkIHR5cGUpICovCitzdGF0aWMgaW50IGF0NzZfZ2V0X2h3X2NvbmZpZyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJdW5pb24gYXQ3Nl9od2NmZyAqaHdjZmcgPSBrbWFsbG9jKHNpemVvZigqaHdjZmcpLCBHRlBfS0VSTkVMKTsKKworCWlmICghaHdjZmcpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGF0NzZfaXNfaW50ZXJzaWwocHJpdi0+Ym9hcmRfdHlwZSkpIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfaHdfY2ZnX2ludGVyc2lsKHByaXYtPnVkZXYsIGh3Y2ZnLAorCQkJCQkgICAgICAgc2l6ZW9mKGh3Y2ZnLT5pKSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBleGl0OworCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGh3Y2ZnLT5pLm1hY19hZGRyLCBFVEhfQUxFTik7CisJCXByaXYtPnJlZ3VsYXRvcnlfZG9tYWluID0gaHdjZmctPmkucmVndWxhdG9yeV9kb21haW47CisJfSBlbHNlIGlmIChhdDc2X2lzXzUwM3JmbWQocHJpdi0+Ym9hcmRfdHlwZSkpIHsKKwkJcmV0ID0gYXQ3Nl9nZXRfaHdfY2ZnKHByaXYtPnVkZXYsIGh3Y2ZnLCBzaXplb2YoaHdjZmctPnIzKSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBleGl0OworCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGh3Y2ZnLT5yMy5tYWNfYWRkciwgRVRIX0FMRU4pOworCQlwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiA9IGh3Y2ZnLT5yMy5yZWd1bGF0b3J5X2RvbWFpbjsKKwl9IGVsc2UgeworCQlyZXQgPSBhdDc2X2dldF9od19jZmcocHJpdi0+dWRldiwgaHdjZmcsIHNpemVvZihod2NmZy0+cjUpKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGV4aXQ7CisJCW1lbWNweShwcml2LT5tYWNfYWRkciwgaHdjZmctPnI1Lm1hY19hZGRyLCBFVEhfQUxFTik7CisJCXByaXYtPnJlZ3VsYXRvcnlfZG9tYWluID0gaHdjZmctPnI1LnJlZ3VsYXRvcnlfZG9tYWluOworCX0KKworZXhpdDoKKwlrZnJlZShod2NmZyk7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBnZXQgSFcgQ29uZmlnIChlcnJvciAlZClcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHJlZ19kb21haW4gY29uc3QgKmF0NzZfZ2V0X3JlZ19kb21haW4odTE2IGNvZGUpCit7CisJaW50IGk7CisJc3RhdGljIHN0cnVjdCByZWdfZG9tYWluIGNvbnN0IGZkX3RhYltdID0geworCQl7IDB4MTAsICJGQ0MgKFVTQSkiLCAweDdmZiB9LAkvKiBjaCAxLTExICovCisJCXsgMHgyMCwgIklDIChDYW5hZGEpIiwgMHg3ZmYgfSwJLyogY2ggMS0xMSAqLworCQl7IDB4MzAsICJFVFNJIChtb3N0IG9mIEV1cm9wZSkiLCAweDFmZmYgfSwJLyogY2ggMS0xMyAqLworCQl7IDB4MzEsICJTcGFpbiIsIDB4NjAwIH0sCS8qIGNoIDEwLTExICovCisJCXsgMHgzMiwgIkZyYW5jZSIsIDB4MWUwMCB9LAkvKiBjaCAxMC0xMyAqLworCQl7IDB4NDAsICJNS0sgKEphcGFuKSIsIDB4MjAwMCB9LAkvKiBjaCAxNCAqLworCQl7IDB4NDEsICJNS0sxIChKYXBhbikiLCAweDNmZmYgfSwJLyogY2ggMS0xNCAqLworCQl7IDB4NTAsICJJc3JhZWwiLCAweDNmYyB9LAkvKiBjaCAzLTkgKi8KKwkJeyAweDAwLCAiPHVua25vd24+IiwgMHhmZmZmZmZmZiB9CS8qIGNoIDEtMzIgKi8KKwl9OworCisJLyogTGFzdCBlbnRyeSBpcyBmYWxsYmFjayBmb3IgdW5rbm93biBkb21haW4gY29kZSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZkX3RhYikgLSAxOyBpKyspCisJCWlmIChjb2RlID09IGZkX3RhYltpXS5jb2RlKQorCQkJYnJlYWs7CisKKwlyZXR1cm4gJmZkX3RhYltpXTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfbWliKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1MTYgbWliLCB2b2lkICpidWYsCisJCQkgICAgICAgaW50IGJ1Zl9zaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDMzLAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQkgICAgICBVU0JfUkVDSVBfSU5URVJGQUNFLCBtaWIgPDwgOCwgMCwgYnVmLCBidWZfc2l6ZSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0ID49IDAgJiYgcmV0ICE9IGJ1Zl9zaXplKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXR1cm4gcG9zaXRpdmUgbnVtYmVyIGZvciBzdGF0dXMsIG5lZ2F0aXZlIGZvciBhbiBlcnJvciAqLworc3RhdGljIGlubGluZSBpbnQgYXQ3Nl9nZXRfY21kX3N0YXR1cyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdTggY21kKQoreworCXU4ICpzdGF0X2J1ZjsKKwlpbnQgcmV0OworCisJc3RhdF9idWYgPSBrbWFsbG9jKDQwLCBHRlBfTk9JTyk7CisJaWYgKCFzdGF0X2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLCAweDIyLAorCQkJVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTiB8CisJCQlVU0JfUkVDSVBfSU5URVJGQUNFLCBjbWQsIDAsIHN0YXRfYnVmLAorCQkJNDAsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0ID49IDApCisJCXJldCA9IHN0YXRfYnVmWzVdOworCWtmcmVlKHN0YXRfYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgTUFLRV9DTURfQ0FTRShjKSBjYXNlIChjKTogcmV0dXJuICNjCitzdGF0aWMgY29uc3QgY2hhciAqYXQ3Nl9nZXRfY21kX3N0cmluZyh1OCBjbWRfc3RhdHVzKQoreworCXN3aXRjaCAoY21kX3N0YXR1cykgeworCQlNQUtFX0NNRF9DQVNFKENNRF9TRVRfTUlCKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfR0VUX01JQik7CisJCU1BS0VfQ01EX0NBU0UoQ01EX1NDQU4pOworCQlNQUtFX0NNRF9DQVNFKENNRF9KT0lOKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfU1RBUlRfSUJTUyk7CisJCU1BS0VfQ01EX0NBU0UoQ01EX1JBRElPX09OKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfUkFESU9fT0ZGKTsKKwkJTUFLRV9DTURfQ0FTRShDTURfU1RBUlRVUCk7CisJfQorCisJcmV0dXJuICJVTktOT1dOIjsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9jYXJkX2NvbW1hbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IGNtZCwgdm9pZCAqYnVmLAorCQkJCSBpbnQgYnVmX3NpemUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXQ3Nl9jb21tYW5kICpjbWRfYnVmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF0NzZfY29tbWFuZCkgKworCQkJCQkgICAgICAgYnVmX3NpemUsIEdGUF9LRVJORUwpOworCisJaWYgKCFjbWRfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZF9idWYtPmNtZCA9IGNtZDsKKwljbWRfYnVmLT5yZXNlcnZlZCA9IDA7CisJY21kX2J1Zi0+c2l6ZSA9IGNwdV90b19sZTE2KGJ1Zl9zaXplKTsKKwltZW1jcHkoY21kX2J1Zi0+ZGF0YSwgYnVmLCBidWZfc2l6ZSk7CisKKwlhdDc2X2RiZ19kdW1wKERCR19DTUQsIGNtZF9idWYsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jb21tYW5kKSArIGJ1Zl9zaXplLAorCQkgICAgICAiaXNzdWluZyBjb21tYW5kICVzICgweCUwMngpIiwKKwkJICAgICAgYXQ3Nl9nZXRfY21kX3N0cmluZyhjbWQpLCBjbWQpOworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwgMHgwZSwKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIDAsIDAsIGNtZF9idWYsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGF0NzZfY29tbWFuZCkgKyBidWZfc2l6ZSwKKwkJCSAgICAgIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlrZnJlZShjbWRfYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisjZGVmaW5lIE1BS0VfQ01EX1NUQVRVU19DQVNFKGMpCWNhc2UgKGMpOiByZXR1cm4gI2MKK3N0YXRpYyBjb25zdCBjaGFyICphdDc2X2dldF9jbWRfc3RhdHVzX3N0cmluZyh1OCBjbWRfc3RhdHVzKQoreworCXN3aXRjaCAoY21kX3N0YXR1cykgeworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0lETEUpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0NPTVBMRVRFKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19VTktOT1dOKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUik7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfRlVOQ1RJT05fTk9UX1NVUFBPUlRFRCk7CisJCU1BS0VfQ01EX1NUQVRVU19DQVNFKENNRF9TVEFUVVNfVElNRV9PVVQpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX0lOX1BST0dSRVNTKTsKKwkJTUFLRV9DTURfU1RBVFVTX0NBU0UoQ01EX1NUQVRVU19IT1NUX0ZBSUxVUkUpOworCQlNQUtFX0NNRF9TVEFUVVNfQ0FTRShDTURfU1RBVFVTX1NDQU5fRkFJTEVEKTsKKwl9CisKKwlyZXR1cm4gIlVOS05PV04iOworfQorCisvKiBXYWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGNvbXBsZXRlZCAqLworc3RhdGljIGludCBhdDc2X3dhaXRfY29tcGxldGlvbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBpbnQgY21kKQoreworCWludCBzdGF0dXMgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBDTURfQ09NUExFVElPTl9USU1FT1VUOworCisJZG8geworCQlzdGF0dXMgPSBhdDc2X2dldF9jbWRfc3RhdHVzKHByaXYtPnVkZXYsIGNtZCk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9jbWRfc3RhdHVzIGZhaWxlZDogJWRcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBzdGF0dXMpOworCQkJYnJlYWs7CisJCX0KKworCQlhdDc2X2RiZyhEQkdfV0FJVF9DT01QTEVURSwKKwkJCSAiJXM6IFdhaXRpbmcgb24gY21kICVkLCBzdGF0dXMgPSAlZCAoJXMpIiwKKwkJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGNtZCwgc3RhdHVzLAorCQkJIGF0NzZfZ2V0X2NtZF9zdGF0dXNfc3RyaW5nKHN0YXR1cykpOworCisJCWlmIChzdGF0dXMgIT0gQ01EX1NUQVRVU19JTl9QUk9HUkVTUworCQkgICAgJiYgc3RhdHVzICE9IENNRF9TVEFUVVNfSURMRSkKKwkJCWJyZWFrOworCisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShIWiAvIDEwKTsJLyogMTAwIG1zICovCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IGNvbXBsZXRpb24gdGltZW91dCBmb3IgY29tbWFuZCAlZFxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGNtZCk7CisJCQlzdGF0dXMgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlICgxKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfbWliKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIHN0cnVjdCBzZXRfbWliX2J1ZmZlciAqYnVmKQoreworCWludCByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NFVF9NSUIsIGJ1ZiwKKwkJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IHNldF9taWJfYnVmZmVyLAorCQkJCQkgICAgIGRhdGEpICsgYnVmLT5zaXplKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9TRVRfTUlCKTsKKwlpZiAocmV0ICE9IENNRF9TVEFUVVNfQ09NUExFVEUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIiVzOiBzZXRfbWliOiBhdDc2X3dhaXRfY29tcGxldGlvbiBmYWlsZWQgIgorCQkgICAgICAgIndpdGggJWRcbiIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJcmV0ID0gLUVJTzsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXR1cm4gPCAwIG9uIGVycm9yLCA9PSAwIGlmIG5vIGNvbW1hbmQgc2VudCwgPT0gMSBpZiBjbWQgc2VudCAqLworc3RhdGljIGludCBhdDc2X3NldF9yYWRpbyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCBpbnQgZW5hYmxlKQoreworCWludCByZXQ7CisJaW50IGNtZDsKKworCWlmIChwcml2LT5yYWRpb19vbiA9PSBlbmFibGUpCisJCXJldHVybiAwOworCisJY21kID0gZW5hYmxlID8gQ01EX1JBRElPX09OIDogQ01EX1JBRElPX09GRjsKKworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBjbWQsIE5VTEwsIDApOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3NldF9jYXJkX2NvbW1hbmQoJWQpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGNtZCwgcmV0KTsKKwllbHNlCisJCXJldCA9IDE7CisKKwlwcml2LT5yYWRpb19vbiA9IGVuYWJsZTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBTZXQgY3VycmVudCBwb3dlciBzYXZlIG1vZGUgKEFUNzZfUE1fT0ZGL0FUNzZfUE1fT04vQVQ3Nl9QTV9TTUFSVCkgKi8KK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcG1fbW9kZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX01BQ19NR01UOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbWFjX21nbXQsIHBvd2VyX21nbXRfbW9kZSk7CisJcHJpdi0+bWliX2J1Zi5kYXRhLmJ5dGUgPSBwcml2LT5wbV9tb2RlOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocG1fbW9kZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfcHJlYW1ibGUoc3RydWN0IGF0NzZfcHJpdiAqcHJpdiwgdTggdHlwZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9MT0NBTDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX2xvY2FsLCBwcmVhbWJsZV90eXBlKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IHR5cGU7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChwcmVhbWJsZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zZXRfZnJhZyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1MTYgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUM7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMjsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWMsIGZyYWdfdGhyZXNob2xkKTsKKwlwcml2LT5taWJfYnVmLmRhdGEud29yZCA9IGNwdV90b19sZTE2KHNpemUpOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoZnJhZyB0aHJlc2hvbGQpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X3J0cyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LCB1MTYgc2l6ZSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9NQUM7CisJcHJpdi0+bWliX2J1Zi5zaXplID0gMjsKKwlwcml2LT5taWJfYnVmLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IG1pYl9tYWMsIHJ0c190aHJlc2hvbGQpOworCXByaXYtPm1pYl9idWYuZGF0YS53b3JkID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisKKwlyZXQgPSBhdDc2X3NldF9taWIocHJpdiwgJnByaXYtPm1pYl9idWYpOworCWlmIChyZXQgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBzZXRfbWliIChydHMpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc2V0X2F1dG9yYXRlX2ZhbGxiYWNrKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYsIGludCBvbm9mZikKK3sKKwlpbnQgcmV0ID0gMDsKKworCXByaXYtPm1pYl9idWYudHlwZSA9IE1JQl9MT0NBTDsKKwlwcml2LT5taWJfYnVmLnNpemUgPSAxOworCXByaXYtPm1pYl9idWYuaW5kZXggPSBvZmZzZXRvZihzdHJ1Y3QgbWliX2xvY2FsLCB0eGF1dG9yYXRlX2ZhbGxiYWNrKTsKKwlwcml2LT5taWJfYnVmLmRhdGEuYnl0ZSA9IG9ub2ZmOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAoYXV0b3JhdGUgZmFsbGJhY2spIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY19hZGRyKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hY19hZGRyICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWNfYWRkciksCisJCQkJCSBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfQUREUiwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY19hZGRyKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfQUREUikgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19BRERSOiBtYWNfYWRkciAlcyByZXMgMHgleCAweCV4IiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIG1hYzJzdHIobS0+bWFjX2FkZHIpLCBtLT5yZXNbMF0sIG0tPnJlc1sxXSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobS0+Z3JvdXBfYWRkcik7IGkrKykKKwkJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX0FERFI6IGdyb3VwIGFkZHIgJWQ6ICVzLCAiCisJCQkgInN0YXR1cyAlZCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgaSwKKwkJCSBtYWMyc3RyKG0tPmdyb3VwX2FkZHJbaV0pLCBtLT5ncm91cF9hZGRyX3N0YXR1c1tpXSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY193ZXAoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCWludCBrZXlfbGVuOworCXN0cnVjdCBtaWJfbWFjX3dlcCAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjX3dlcCksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX01BQ19XRVAsIG0sCisJCQkgICBzaXplb2Yoc3RydWN0IG1pYl9tYWNfd2VwKSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfV0VQKSBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX01JQiwgIiVzOiBNSUIgTUFDX1dFUDogcHJpdl9pbnZva2VkICV1IGRlZl9rZXlfaWQgJXUgIgorCQkgImtleV9sZW4gJXUgZXhjbF91bmVuY3IgJXUgd2VwX2ljdl9lcnIgJXUgd2VwX2V4Y2x1ZGVkICV1ICIKKwkJICJlbmNyX2xldmVsICV1IGtleSAlZCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIG0tPnByaXZhY3lfaW52b2tlZCwgbS0+d2VwX2RlZmF1bHRfa2V5X2lkLAorCQkgbS0+d2VwX2tleV9tYXBwaW5nX2xlbiwgbS0+ZXhjbHVkZV91bmVuY3J5cHRlZCwKKwkJIGxlMzJfdG9fY3B1KG0tPndlcF9pY3ZfZXJyb3JfY291bnQpLAorCQkgbGUzMl90b19jcHUobS0+d2VwX2V4Y2x1ZGVkX2NvdW50KSwgbS0+ZW5jcnlwdGlvbl9sZXZlbCwKKwkJIG0tPndlcF9kZWZhdWx0X2tleV9pZCk7CisKKwlrZXlfbGVuID0gKG0tPmVuY3J5cHRpb25fbGV2ZWwgPT0gMSkgPworCSAgICBXRVBfU01BTExfS0VZX0xFTiA6IFdFUF9MQVJHRV9LRVlfTEVOOworCisJZm9yIChpID0gMDsgaSA8IFdFUF9LRVlTOyBpKyspCisJCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19XRVA6IGtleSAlZDogJXMiLAorCQkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgaSwKKwkJCSBoZXgyc3RyKG0tPndlcF9kZWZhdWx0X2tleXZhbHVlW2ldLCBrZXlfbGVuKSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX21hY19tZ210KHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hY19tZ210ICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tYWNfbWdtdCksCisJCQkJCSBHRlBfS0VSTkVMKTsKKworCWlmICghbSkKKwkJcmV0dXJuOworCisJcmV0ID0gYXQ3Nl9nZXRfbWliKHByaXYtPnVkZXYsIE1JQl9NQUNfTUdNVCwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21hY19tZ210KSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChNQUNfTUdNVCkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQ19NR01UOiBiZWFjb25fcGVyaW9kICVkIENGUF9tYXhfZHVyYXRpb24gIgorCQkgIiVkIG1lZGl1bV9vY2N1cGFuY3lfbGltaXQgJWQgc3RhdGlvbl9pZCAweCV4IEFUSU1fd2luZG93ICVkICIKKwkJICJDRlBfbW9kZSAlZCBwcml2YWN5X29wdF9pbXBsICVkIERUSU1fcGVyaW9kICVkIENGUF9wZXJpb2QgJWQgIgorCQkgImN1cnJlbnRfYnNzaWQgJXMgY3VycmVudF9lc3NpZCAlcyBjdXJyZW50X2Jzc190eXBlICVkICIKKwkJICJwbV9tb2RlICVkIGlic3NfY2hhbmdlICVkIHJlcyAlZCAiCisJCSAibXVsdGlfZG9tYWluX2NhcGFiaWxpdHlfaW1wbGVtZW50ZWQgJWQgIgorCQkgImludGVybmF0aW9uYWxfcm9hbWluZyAlZCBjb3VudHJ5X3N0cmluZyAlLjNzIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgbGUxNl90b19jcHUobS0+YmVhY29uX3BlcmlvZCksCisJCSBsZTE2X3RvX2NwdShtLT5DRlBfbWF4X2R1cmF0aW9uKSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1lZGl1bV9vY2N1cGFuY3lfbGltaXQpLAorCQkgbGUxNl90b19jcHUobS0+c3RhdGlvbl9pZCksIGxlMTZfdG9fY3B1KG0tPkFUSU1fd2luZG93KSwKKwkJIG0tPkNGUF9tb2RlLCBtLT5wcml2YWN5X29wdGlvbl9pbXBsZW1lbnRlZCwgbS0+RFRJTV9wZXJpb2QsCisJCSBtLT5DRlBfcGVyaW9kLCBtYWMyc3RyKG0tPmN1cnJlbnRfYnNzaWQpLAorCQkgaGV4MnN0cihtLT5jdXJyZW50X2Vzc2lkLCBJV19FU1NJRF9NQVhfU0laRSksCisJCSBtLT5jdXJyZW50X2Jzc190eXBlLCBtLT5wb3dlcl9tZ210X21vZGUsIG0tPmlic3NfY2hhbmdlLAorCQkgbS0+cmVzLCBtLT5tdWx0aV9kb21haW5fY2FwYWJpbGl0eV9pbXBsZW1lbnRlZCwKKwkJIG0tPm11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2VuYWJsZWQsIG0tPmNvdW50cnlfc3RyaW5nKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWFjKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgbWliX21hYyAqbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWJfbWFjKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTUFDLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9tYWMpKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1BQykgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJZ290byBleGl0OworCX0KKworCWF0NzZfZGJnKERCR19NSUIsICIlczogTUlCIE1BQzogbWF4X3R4X21zZHVfbGlmZXRpbWUgJWQgIgorCQkgIm1heF9yeF9saWZldGltZSAlZCBmcmFnX3RocmVzaG9sZCAlZCBydHNfdGhyZXNob2xkICVkICIKKwkJICJjd21pbiAlZCBjd21heCAlZCBzaG9ydF9yZXRyeV90aW1lICVkIGxvbmdfcmV0cnlfdGltZSAlZCAiCisJCSAic2Nhbl90eXBlICVkIHNjYW5fY2hhbm5lbCAlZCBwcm9iZV9kZWxheSAldSAiCisJCSAibWluX2NoYW5uZWxfdGltZSAlZCBtYXhfY2hhbm5lbF90aW1lICVkIGxpc3Rlbl9pbnQgJWQgIgorCQkgImRlc2lyZWRfc3NpZCAlcyBkZXNpcmVkX2Jzc2lkICVzIGRlc2lyZWRfYnNzdHlwZSAlZCIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJCSBsZTMyX3RvX2NwdShtLT5tYXhfdHhfbXNkdV9saWZldGltZSksCisJCSBsZTMyX3RvX2NwdShtLT5tYXhfcnhfbGlmZXRpbWUpLAorCQkgbGUxNl90b19jcHUobS0+ZnJhZ190aHJlc2hvbGQpLCBsZTE2X3RvX2NwdShtLT5ydHNfdGhyZXNob2xkKSwKKwkJIGxlMTZfdG9fY3B1KG0tPmN3bWluKSwgbGUxNl90b19jcHUobS0+Y3dtYXgpLAorCQkgbS0+c2hvcnRfcmV0cnlfdGltZSwgbS0+bG9uZ19yZXRyeV90aW1lLCBtLT5zY2FuX3R5cGUsCisJCSBtLT5zY2FuX2NoYW5uZWwsIGxlMTZfdG9fY3B1KG0tPnByb2JlX2RlbGF5KSwKKwkJIGxlMTZfdG9fY3B1KG0tPm1pbl9jaGFubmVsX3RpbWUpLAorCQkgbGUxNl90b19jcHUobS0+bWF4X2NoYW5uZWxfdGltZSksCisJCSBsZTE2X3RvX2NwdShtLT5saXN0ZW5faW50ZXJ2YWwpLAorCQkgaGV4MnN0cihtLT5kZXNpcmVkX3NzaWQsIElXX0VTU0lEX01BWF9TSVpFKSwKKwkJIG1hYzJzdHIobS0+ZGVzaXJlZF9ic3NpZCksIG0tPmRlc2lyZWRfYnNzdHlwZSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCitzdGF0aWMgdm9pZCBhdDc2X2R1bXBfbWliX3BoeShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9waHkgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX3BoeSksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX1BIWSwgbSwgc2l6ZW9mKHN0cnVjdCBtaWJfcGh5KSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9nZXRfbWliIChQSFkpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBQSFk6IGVkX3RocmVzaG9sZCAlZCBzbG90X3RpbWUgJWQgIgorCQkgInNpZnNfdGltZSAlZCBwcmVhbWJsZV9sZW5ndGggJWQgcGxjcF9oZWFkZXJfbGVuZ3RoICVkICIKKwkJICJtcGR1X21heF9sZW5ndGggJWQgY2NhX21vZGVfc3VwcG9ydGVkICVkIG9wZXJhdGlvbl9yYXRlX3NldCAiCisJCSAiMHgleCAweCV4IDB4JXggMHgleCBjaGFubmVsX2lkICVkIGN1cnJlbnRfY2NhX21vZGUgJWQgIgorCQkgInBoeV90eXBlICVkIGN1cnJlbnRfcmVnX2RvbWFpbiAlZCIsCisJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIGxlMzJfdG9fY3B1KG0tPmVkX3RocmVzaG9sZCksCisJCSBsZTE2X3RvX2NwdShtLT5zbG90X3RpbWUpLCBsZTE2X3RvX2NwdShtLT5zaWZzX3RpbWUpLAorCQkgbGUxNl90b19jcHUobS0+cHJlYW1ibGVfbGVuZ3RoKSwKKwkJIGxlMTZfdG9fY3B1KG0tPnBsY3BfaGVhZGVyX2xlbmd0aCksCisJCSBsZTE2X3RvX2NwdShtLT5tcGR1X21heF9sZW5ndGgpLAorCQkgbGUxNl90b19jcHUobS0+Y2NhX21vZGVfc3VwcG9ydGVkKSwgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzBdLAorCQkgbS0+b3BlcmF0aW9uX3JhdGVfc2V0WzFdLCBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbMl0sCisJCSBtLT5vcGVyYXRpb25fcmF0ZV9zZXRbM10sIG0tPmNoYW5uZWxfaWQsIG0tPmN1cnJlbnRfY2NhX21vZGUsCisJCSBtLT5waHlfdHlwZSwgbS0+Y3VycmVudF9yZWdfZG9tYWluKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbG9jYWwoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBtaWJfbG9jYWwgKm0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWliX3BoeSksIEdGUF9LRVJORUwpOworCisJaWYgKCFtKQorCQlyZXR1cm47CisKKwlyZXQgPSBhdDc2X2dldF9taWIocHJpdi0+dWRldiwgTUlCX0xPQ0FMLCBtLCBzaXplb2Yoc3RydWN0IG1pYl9sb2NhbCkpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfZ2V0X21pYiAoTE9DQUwpIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBMT0NBTDogYmVhY29uX2VuYWJsZSAlZCAiCisJCSAidHhhdXRvcmF0ZV9mYWxsYmFjayAlZCBzc2lkX3NpemUgJWQgcHJvbWlzY3VvdXNfbW9kZSAlZCAiCisJCSAicHJlYW1ibGVfdHlwZSAlZCIsIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIG0tPmJlYWNvbl9lbmFibGUsCisJCSBtLT50eGF1dG9yYXRlX2ZhbGxiYWNrLCBtLT5zc2lkX3NpemUsIG0tPnByb21pc2N1b3VzX21vZGUsCisJCSBtLT5wcmVhbWJsZV90eXBlKTsKK2V4aXQ6CisJa2ZyZWUobSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHVtcF9taWJfbWRvbWFpbihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IG1pYl9tZG9tYWluICptID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1pYl9tZG9tYWluKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIW0pCisJCXJldHVybjsKKworCXJldCA9IGF0NzZfZ2V0X21pYihwcml2LT51ZGV2LCBNSUJfTURPTUFJTiwgbSwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgbWliX21kb21haW4pKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X2dldF9taWIgKE1ET01BSU4pIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNRE9NQUlOOiBjaGFubmVsX2xpc3QgJXMiLAorCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkgaGV4MnN0cihtLT5jaGFubmVsX2xpc3QsIHNpemVvZihtLT5jaGFubmVsX2xpc3QpKSk7CisKKwlhdDc2X2RiZyhEQkdfTUlCLCAiJXM6IE1JQiBNRE9NQUlOOiB0eF9wb3dlcmxldmVsICVzIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJIGhleDJzdHIobS0+dHhfcG93ZXJsZXZlbCwgc2l6ZW9mKG0tPnR4X3Bvd2VybGV2ZWwpKSk7CitleGl0OgorCWtmcmVlKG0pOworfQorCisvKiBFbmFibGUgbW9uaXRvciBtb2RlICovCitzdGF0aWMgaW50IGF0NzZfc3RhcnRfbW9uaXRvcihzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2KQoreworCXN0cnVjdCBhdDc2X3JlcV9zY2FuIHNjYW47CisJaW50IHJldDsKKworCW1lbXNldCgmc2NhbiwgMCwgc2l6ZW9mKHN0cnVjdCBhdDc2X3JlcV9zY2FuKSk7CisJbWVtc2V0KHNjYW4uYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKKworCXNjYW4uY2hhbm5lbCA9IHByaXYtPmNoYW5uZWw7CisJc2Nhbi5zY2FuX3R5cGUgPSBTQ0FOX1RZUEVfUEFTU0lWRTsKKwlzY2FuLmludGVybmF0aW9uYWxfc2NhbiA9IDA7CisKKwlyZXQgPSBhdDc2X3NldF9jYXJkX2NvbW1hbmQocHJpdi0+dWRldiwgQ01EX1NDQU4sICZzY2FuLCBzaXplb2Yoc2NhbikpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gYXQ3Nl9nZXRfY21kX3N0YXR1cyhwcml2LT51ZGV2LCBDTURfU0NBTik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBDYWxjdWxhdGUgcGFkZGluZyBmcm9tIHR4YnVmLT53bGVuZ3RoICh3aGljaCBleGNsdWRlcyB0aGUgVVNCIFRYIGhlYWRlciksCisgICBsaWtlbHkgdG8gY29tcGVuc2F0ZSBhIGZsYXcgaW4gdGhlIEFUNzZDNTAzQSBVU0IgcGFydCAuLi4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0NzZfY2FsY19wYWRkaW5nKGludCB3bGVuKQoreworCS8qIGFkZCB0aGUgVVNCIFRYIGhlYWRlciAqLworCXdsZW4gKz0gQVQ3Nl9UWF9IRFJMRU47CisKKwl3bGVuID0gd2xlbiAlIDY0OworCisJaWYgKHdsZW4gPCA1MCkKKwkJcmV0dXJuIDUwIC0gd2xlbjsKKworCWlmICh3bGVuID49IDYxKQorCQlyZXR1cm4gNjQgKyA1MCAtIHdsZW47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9yeF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKworCXByaXYtPnJ4X3Rhc2tsZXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXVyYjsKKwl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5yeF90YXNrbGV0KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9zdWJtaXRfcnhfdXJiKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlpbnQgc2l6ZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+cnhfc2tiOworCisJaWYgKCFwcml2LT5yeF91cmIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXM6IHByaXYtPnJ4X3VyYiBpcyBOVUxMXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWlmICghc2tiKSB7CisJCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdDc2X3J4X2J1ZmZlcikpOworCQlpZiAoIXNrYikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGFsbG9jYXRlIHJ4IHNrYnVmZlxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlwcml2LT5yeF9za2IgPSBza2I7CisJfSBlbHNlIHsKKwkJc2tiX3B1c2goc2tiLCBza2JfaGVhZHJvb20oc2tiKSk7CisJCXNrYl90cmltKHNrYiwgMCk7CisJfQorCisJc2l6ZSA9IHNrYl90YWlscm9vbShza2IpOworCXVzYl9maWxsX2J1bGtfdXJiKHByaXYtPnJ4X3VyYiwgcHJpdi0+dWRldiwgcHJpdi0+cnhfcGlwZSwKKwkJCSAgc2tiX3B1dChza2IsIHNpemUpLCBzaXplLCBhdDc2X3J4X2NhbGxiYWNrLCBwcml2KTsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5yeF91cmIsIEdGUF9BVE9NSUMpOworCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPT0gLUVOT0RFVikKKwkJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwKKwkJCQkgInVzYl9zdWJtaXRfdXJiIHJldHVybmVkIC1FTk9ERVYiKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcngsIHVzYl9zdWJtaXRfdXJiIGZhaWxlZDogJWRcbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCX0KKworZXhpdDoKKwlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT0RFVikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHN1Ym1pdCByeCB1cmIgLSBwbGVhc2UgdW5sb2FkIHRoZSAiCisJCSAgICAgICAiZHJpdmVyIGFuZC9vciBwb3dlciBjeWNsZSB0aGUgZGV2aWNlXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIERvd25sb2FkIGV4dGVybmFsIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9leHRlcm5hbF9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGZ3ZW50cnkgKmZ3ZSkKK3sKKwlpbnQgcmV0OworCWludCBvcF9tb2RlOworCWludCBibG9ja25vID0gMDsKKwlpbnQgYnNpemU7CisJdTggKmJsb2NrOworCXU4ICpidWYgPSBmd2UtPmV4dGZ3OworCWludCBzaXplID0gZndlLT5leHRmd19zaXplOworCisJaWYgKCFidWYgfHwgIXNpemUpCisJCXJldHVybiAtRU5PRU5UOworCisJb3BfbW9kZSA9IGF0NzZfZ2V0X29wX21vZGUodWRldik7CisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAib3Btb2RlICVkIiwgb3BfbW9kZSk7CisKKwlpZiAob3BfbW9kZSAhPSBPUE1PREVfTk9STUFMX05JQ19XSVRIT1VUX0ZMQVNIKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsICJ1bmV4cGVjdGVkIG9wbW9kZSAlZFxuIiwKKwkJCSAgIG9wX21vZGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlibG9jayA9IGttYWxsb2MoRldfQkxPQ0tfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFibG9jaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZSIpOworCisJLyogZm9yIGZ3ID49IDAuMTAwLCB0aGUgZGV2aWNlIG5lZWRzIGFuIGV4dHJhIGVtcHR5IGJsb2NrICovCisJZG8geworCQlic2l6ZSA9IG1pbl90KGludCwgc2l6ZSwgRldfQkxPQ0tfU0laRSk7CisJCW1lbWNweShibG9jaywgYnVmLCBic2l6ZSk7CisJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwKKwkJCSAiZXh0IGZ3LCBzaXplIGxlZnQgPSAlNWQsIGJzaXplID0gJTRkLCBibG9ja25vID0gJTJkIiwKKwkJCSBzaXplLCBic2l6ZSwgYmxvY2tubyk7CisJCXJldCA9IGF0NzZfbG9hZF9leHRfZndfYmxvY2sodWRldiwgYmxvY2tubywgYmxvY2ssIGJzaXplKTsKKwkJaWYgKHJldCAhPSBic2l6ZSkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkgICAibG9hZGluZyAlZHRoIGZpcm13YXJlIGJsb2NrIGZhaWxlZDogJWRcbiIsCisJCQkJICAgYmxvY2tubywgcmV0KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlidWYgKz0gYnNpemU7CisJCXNpemUgLT0gYnNpemU7CisJCWJsb2Nrbm8rKzsKKwl9IHdoaWxlIChic2l6ZSA+IDApOworCisJaWYgKGF0NzZfaXNfNTA1YShmd2UtPmJvYXJkX3R5cGUpKSB7CisJCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIjIwMCBtcyBkZWxheSBmb3IgNTA1YSIpOworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFogLyA1ICsgMSk7CisJfQorCitleGl0OgorCWtmcmVlKGJsb2NrKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qIERvd25sb2FkIGludGVybmFsIGZpcm13YXJlICovCitzdGF0aWMgaW50IGF0NzZfbG9hZF9pbnRlcm5hbF9mdyhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IGZ3ZW50cnkgKmZ3ZSkKK3sKKwlpbnQgcmV0OworCWludCBuZWVkX3JlbWFwID0gIWF0NzZfaXNfNTA1YShmd2UtPmJvYXJkX3R5cGUpOworCisJcmV0ID0gYXQ3Nl91c2JkZnVfZG93bmxvYWQodWRldiwgZndlLT5pbnRmdywgZndlLT5pbnRmd19zaXplLAorCQkJCSAgIG5lZWRfcmVtYXAgPyAwIDogMiAqIEhaKTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsCisJCQkgICAiZG93bmxvYWRpbmcgaW50ZXJuYWwgZncgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJzZW5kaW5nIFJFTUFQIik7CisKKwkvKiBubyBSRU1BUCBmb3IgNTA1QSAoc2VlIFNGIGRyaXZlcikgKi8KKwlpZiAobmVlZF9yZW1hcCkgeworCQlyZXQgPSBhdDc2X3JlbWFwKHVkZXYpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCQkgICAic2VuZGluZyBSRU1BUCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgInNsZWVwaW5nIGZvciAyIHNlY29uZHMiKTsKKwlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMiAqIEhaICsgMSk7CisJdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKKworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGF0NzZfc3RhcnR1cF9kZXZpY2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyAqY2NmZyA9ICZwcml2LT5jYXJkX2NvbmZpZzsKKwlpbnQgcmV0OworCisJYXQ3Nl9kYmcoREJHX1BBUkFNUywKKwkJICIlcyBwYXJhbTogc3NpZCAlLipzICglcykgbW9kZSAlcyBjaCAlZCB3ZXAgJXMga2V5ICVkICIKKwkJICJrZXlsZW4gJWQiLCB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHByaXYtPmVzc2lkX3NpemUsCisJCSBwcml2LT5lc3NpZCwgaGV4MnN0cihwcml2LT5lc3NpZCwgSVdfRVNTSURfTUFYX1NJWkUpLAorCQkgcHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DID8gImFkaG9jIiA6ICJpbmZyYSIsCisJCSBwcml2LT5jaGFubmVsLCBwcml2LT53ZXBfZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCisJCSBwcml2LT53ZXBfa2V5X2lkLCBwcml2LT53ZXBfa2V5c19sZW5bcHJpdi0+d2VwX2tleV9pZF0pOworCWF0NzZfZGJnKERCR19QQVJBTVMsCisJCSAiJXMgcGFyYW06IHByZWFtYmxlICVzIHJ0cyAlZCByZXRyeSAlZCBmcmFnICVkICIKKwkJICJ0eHJhdGUgJXMgYXV0aF9tb2RlICVkIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCQkgcHJlYW1ibGVzW3ByaXYtPnByZWFtYmxlX3R5cGVdLCBwcml2LT5ydHNfdGhyZXNob2xkLAorCQkgcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQsIHByaXYtPmZyYWdfdGhyZXNob2xkLAorCQkgcHJpdi0+dHhyYXRlID09IFRYX1JBVEVfMU1CSVQgPyAiMU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFXzJNQklUID8gIjJNQml0IiA6IHByaXYtPnR4cmF0ZSA9PQorCQkgVFhfUkFURV81XzVNQklUID8gIjUuNU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFXzExTUJJVCA/ICIxMU1CaXQiIDogcHJpdi0+dHhyYXRlID09CisJCSBUWF9SQVRFX0FVVE8gPyAiYXV0byIgOiAiPGludmFsaWQ+IiwgcHJpdi0+YXV0aF9tb2RlKTsKKwlhdDc2X2RiZyhEQkdfUEFSQU1TLAorCQkgIiVzIHBhcmFtOiBwbV9tb2RlICVkIHBtX3BlcmlvZCAlZCBhdXRoX21vZGUgJXMgIgorCQkgInNjYW5fdGltZXMgJWQgJWQgc2Nhbl9tb2RlICVzIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcHJpdi0+cG1fbW9kZSwgcHJpdi0+cG1fcGVyaW9kLAorCQkgcHJpdi0+YXV0aF9tb2RlID09IFdMQU5fQVVUSF9PUEVOID8gIm9wZW4iIDogInNoYXJlZF9zZWNyZXQiLAorCQkgcHJpdi0+c2Nhbl9taW5fdGltZSwgcHJpdi0+c2Nhbl9tYXhfdGltZSwKKwkJIHByaXYtPnNjYW5fbW9kZSA9PSBTQ0FOX1RZUEVfQUNUSVZFID8gImFjdGl2ZSIgOiAicGFzc2l2ZSIpOworCisJbWVtc2V0KGNjZmcsIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZykpOworCWNjZmctPnByb21pc2N1b3VzX21vZGUgPSAwOworCWNjZmctPnNob3J0X3JldHJ5X2xpbWl0ID0gcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQ7CisKKwlpZiAocHJpdi0+d2VwX2VuYWJsZWQpIHsKKwkJaWYgKHByaXYtPndlcF9rZXlzX2xlbltwcml2LT53ZXBfa2V5X2lkXSA+IFdFUF9TTUFMTF9LRVlfTEVOKQorCQkJY2NmZy0+ZW5jcnlwdGlvbl90eXBlID0gMjsKKwkJZWxzZQorCQkJY2NmZy0+ZW5jcnlwdGlvbl90eXBlID0gMTsKKworCQkvKiBqYWw6IGFsd2F5cyBleGNsdWRlIHVuZW5jcnlwdGVkIGlmIFdFUCBpcyBhY3RpdmUgKi8KKwkJY2NmZy0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDE7CisJfSBlbHNlIHsKKwkJY2NmZy0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7CisJCWNjZmctPmVuY3J5cHRpb25fdHlwZSA9IDA7CisJfQorCisJY2NmZy0+cnRzX3RocmVzaG9sZCA9IGNwdV90b19sZTE2KHByaXYtPnJ0c190aHJlc2hvbGQpOworCWNjZmctPmZyYWdtZW50YXRpb25fdGhyZXNob2xkID0gY3B1X3RvX2xlMTYocHJpdi0+ZnJhZ190aHJlc2hvbGQpOworCisJbWVtY3B5KGNjZmctPmJhc2ljX3JhdGVfc2V0LCBod19yYXRlcywgNCk7CisJLyogamFsOiByZWFsbHkgbmVlZGVkLCB3ZSBkbyBhIHNldF9taWIgZm9yIGF1dG9yYXRlIGxhdGVyID8/PyAqLworCWNjZmctPmF1dG9fcmF0ZV9mYWxsYmFjayA9IChwcml2LT50eHJhdGUgPT0gVFhfUkFURV9BVVRPID8gMSA6IDApOworCWNjZmctPmNoYW5uZWwgPSBwcml2LT5jaGFubmVsOworCWNjZmctPnByaXZhY3lfaW52b2tlZCA9IHByaXYtPndlcF9lbmFibGVkOworCW1lbWNweShjY2ZnLT5jdXJyZW50X3NzaWQsIHByaXYtPmVzc2lkLCBJV19FU1NJRF9NQVhfU0laRSk7CisJY2NmZy0+c3NpZF9sZW4gPSBwcml2LT5lc3NpZF9zaXplOworCisJY2NmZy0+d2VwX2RlZmF1bHRfa2V5X2lkID0gcHJpdi0+d2VwX2tleV9pZDsKKwltZW1jcHkoY2NmZy0+d2VwX2RlZmF1bHRfa2V5X3ZhbHVlLCBwcml2LT53ZXBfa2V5cywKKwkgICAgICAgc2l6ZW9mKHByaXYtPndlcF9rZXlzKSk7CisKKwljY2ZnLT5zaG9ydF9wcmVhbWJsZSA9IHByaXYtPnByZWFtYmxlX3R5cGU7CisJY2NmZy0+YmVhY29uX3BlcmlvZCA9IGNwdV90b19sZTE2KHByaXYtPmJlYWNvbl9wZXJpb2QpOworCisJcmV0ID0gYXQ3Nl9zZXRfY2FyZF9jb21tYW5kKHByaXYtPnVkZXYsIENNRF9TVEFSVFVQLCAmcHJpdi0+Y2FyZF9jb25maWcsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZykpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGF0NzZfc2V0X2NhcmRfY29tbWFuZCBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9TVEFSVFVQKTsKKworCS8qIHJlbW92ZSBCU1NJRCBmcm9tIHByZXZpb3VzIHJ1biAqLworCW1lbXNldChwcml2LT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCisJaWYgKGF0NzZfc2V0X3JhZGlvKHByaXYsIDEpID09IDEpCisJCWF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9SQURJT19PTik7CisKKwlyZXQgPSBhdDc2X3NldF9wcmVhbWJsZShwcml2LCBwcml2LT5wcmVhbWJsZV90eXBlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGF0NzZfc2V0X2ZyYWcocHJpdiwgcHJpdi0+ZnJhZ190aHJlc2hvbGQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfcnRzKHByaXYsIHByaXYtPnJ0c190aHJlc2hvbGQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYXQ3Nl9zZXRfYXV0b3JhdGVfZmFsbGJhY2socHJpdiwKKwkJCQkJIHByaXYtPnR4cmF0ZSA9PSBUWF9SQVRFX0FVVE8gPyAxIDogMCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBhdDc2X3NldF9wbV9tb2RlKHByaXYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKGF0NzZfZGVidWcgJiBEQkdfTUlCKSB7CisJCWF0NzZfZHVtcF9taWJfbWFjKHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY19hZGRyKHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY19tZ210KHByaXYpOworCQlhdDc2X2R1bXBfbWliX21hY193ZXAocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbWRvbWFpbihwcml2KTsKKwkJYXQ3Nl9kdW1wX21pYl9waHkocHJpdik7CisJCWF0NzZfZHVtcF9taWJfbG9jYWwocHJpdik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEVuYWJsZSBvciBkaXNhYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19zZXRfcHJvbWlzYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICB3b3JrX3NldF9wcm9taXNjKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChwcml2LT5kZXZpY2VfdW5wbHVnZ2VkKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJcHJpdi0+bWliX2J1Zi50eXBlID0gTUlCX0xPQ0FMOworCXByaXYtPm1pYl9idWYuc2l6ZSA9IDE7CisJcHJpdi0+bWliX2J1Zi5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCBtaWJfbG9jYWwsIHByb21pc2N1b3VzX21vZGUpOworCXByaXYtPm1pYl9idWYuZGF0YS5ieXRlID0gcHJpdi0+cHJvbWlzYyA/IDEgOiAwOworCisJcmV0ID0gYXQ3Nl9zZXRfbWliKHByaXYsICZwcml2LT5taWJfYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc2V0X21pYiAocHJvbWlzY3VvdXNfbW9kZSkgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworLyogU3VibWl0IFJ4IHVyYiBiYWNrIHRvIHRoZSBkZXZpY2UgKi8KK3N0YXRpYyB2b2lkIGF0NzZfd29ya19zdWJtaXRfcngoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0NzZfcHJpdiwKKwkJCQkJICAgICAgd29ya19zdWJtaXRfcngpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKwlhdDc2X3N1Ym1pdF9yeF91cmIocHJpdik7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCitzdGF0aWMgdm9pZCBhdDc2X3J4X3Rhc2tsZXQodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgdXJiICp1cmIgPSAoc3RydWN0IHVyYiAqKXBhcmFtOworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGF0NzZfcnhfYnVmZmVyICpidWY7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzID0geyAwIH07CisKKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkgeworCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJkZXZpY2UgdW5wbHVnZ2VkIik7CisJCWlmICh1cmIpCisJCQlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJ1cmIgc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFwcml2LT5yeF9za2IgfHwgIXByaXYtPnJ4X3NrYi0+ZGF0YSkKKwkJcmV0dXJuOworCisJYnVmID0gKHN0cnVjdCBhdDc2X3J4X2J1ZmZlciAqKXByaXYtPnJ4X3NrYi0+ZGF0YTsKKworCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCWlmICh1cmItPnN0YXR1cyAhPSAtRU5PRU5UICYmIHVyYi0+c3RhdHVzICE9IC1FQ09OTlJFU0VUKQorCQkJYXQ3Nl9kYmcoREJHX1VSQiwKKwkJCQkgIiVzICVzOiAtIG5vbnplcm8gUnggYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJCQkgX19mdW5jX18sIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwKKwkJCQkgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJYXQ3Nl9kYmcoREJHX1JYX0FUTUVMX0hEUiwKKwkJICIlczogcnggZnJhbWU6IHJhdGUgJWQgcnNzaSAlZCBub2lzZSAlZCBsaW5rICVkIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgYnVmLT5yeF9yYXRlLCBidWYtPnJzc2ksCisJCSBidWYtPm5vaXNlX2xldmVsLCBidWYtPmxpbmtfcXVhbGl0eSk7CisKKwlza2JfcHVsbChwcml2LT5yeF9za2IsIEFUNzZfUlhfSERSTEVOKTsKKwlza2JfdHJpbShwcml2LT5yeF9za2IsIGxlMTZfdG9fY3B1KGJ1Zi0+d2xlbmd0aCkpOworCWF0NzZfZGJnX2R1bXAoREJHX1JYX0RBVEEsIHByaXYtPnJ4X3NrYi0+ZGF0YSwKKwkJICAgICAgcHJpdi0+cnhfc2tiLT5sZW4sICJSWDogbGVuPSVkIiwgcHJpdi0+cnhfc2tiLT5sZW4pOworCisJcnhfc3RhdHVzLnNpZ25hbCA9IGJ1Zi0+cnNzaTsKKwlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKKwlyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiY2FsbGluZyBpZWVlODAyMTFfcnhfaXJxc2FmZSgpOiAlZC8lZCIsCisJCSBwcml2LT5yeF9za2ItPmxlbiwgcHJpdi0+cnhfc2tiLT5kYXRhX2xlbik7CisJaWVlZTgwMjExX3J4X2lycXNhZmUocHJpdi0+aHcsIHByaXYtPnJ4X3NrYiwgJnJ4X3N0YXR1cyk7CisKKwkvKiBVc2UgYSBuZXcgc2tiIGZvciB0aGUgbmV4dCByZWNlaXZlICovCisJcHJpdi0+cnhfc2tiID0gTlVMTDsKKworCWF0NzZfc3VibWl0X3J4X3VyYihwcml2KTsKK30KKworLyogTG9hZCBmaXJtd2FyZSBpbnRvIGtlcm5lbCBtZW1vcnkgYW5kIHBhcnNlIGl0ICovCitzdGF0aWMgc3RydWN0IGZ3ZW50cnkgKmF0NzZfbG9hZF9maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJCQkJICBlbnVtIGJvYXJkX3R5cGUgYm9hcmRfdHlwZSkKK3sKKwlpbnQgcmV0OworCWNoYXIgKnN0cjsKKwlzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgKmZ3aDsKKwlzdHJ1Y3QgZndlbnRyeSAqZndlID0gJmZpcm13YXJlc1tib2FyZF90eXBlXTsKKworCW11dGV4X2xvY2soJmZ3X211dGV4KTsKKworCWlmIChmd2UtPmxvYWRlZCkgeworCQlhdDc2X2RiZyhEQkdfRlcsICJyZS11c2luZyBwcmV2aW91c2x5IGxvYWRlZCBmdyIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX0ZXLCAiZG93bmxvYWRpbmcgZmlybXdhcmUgJXMiLCBmd2UtPmZ3bmFtZSk7CisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZndlLT5mdywgZndlLT5md25hbWUsICZ1ZGV2LT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZ1ZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBub3QgZm91bmQhXG4iLAorCQkJICAgZndlLT5md25hbWUpOworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmdWRldi0+ZGV2LAorCQkJICAgInlvdSBtYXkgbmVlZCB0byBkb3dubG9hZCB0aGUgZmlybXdhcmUgZnJvbSAiCisJCQkgICAiaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL2F0NzZjNTAzYS9cbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJYXQ3Nl9kYmcoREJHX0ZXLCAiZ290IGl0LiIpOworCWZ3aCA9IChzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgKikoZndlLT5mdy0+ZGF0YSk7CisKKwlpZiAoZndlLT5mdy0+c2l6ZSA8PSBzaXplb2YoKmZ3aCkpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJmaXJtd2FyZSBpcyB0b28gc2hvcnQgKDB4JXp4KVxuIiwgZndlLT5mdy0+c2l6ZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBDUkMgY3VycmVudGx5IG5vdCBjaGVja2VkICovCisJZndlLT5ib2FyZF90eXBlID0gbGUzMl90b19jcHUoZndoLT5ib2FyZF90eXBlKTsKKwlpZiAoZndlLT5ib2FyZF90eXBlICE9IGJvYXJkX3R5cGUpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJnVkZXYtPmRldiwKKwkJCSAgICJib2FyZCB0eXBlIG1pc21hdGNoLCByZXF1ZXN0ZWQgJXUsIGdvdCAldVxuIiwKKwkJCSAgIGJvYXJkX3R5cGUsIGZ3ZS0+Ym9hcmRfdHlwZSk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlmd2UtPmZ3X3ZlcnNpb24ubWFqb3IgPSBmd2gtPm1ham9yOworCWZ3ZS0+ZndfdmVyc2lvbi5taW5vciA9IGZ3aC0+bWlub3I7CisJZndlLT5md192ZXJzaW9uLnBhdGNoID0gZndoLT5wYXRjaDsKKwlmd2UtPmZ3X3ZlcnNpb24uYnVpbGQgPSBmd2gtPmJ1aWxkOworCisJc3RyID0gKGNoYXIgKilmd2ggKyBsZTMyX3RvX2NwdShmd2gtPnN0cl9vZmZzZXQpOworCWZ3ZS0+aW50ZncgPSAodTggKilmd2ggKyBsZTMyX3RvX2NwdShmd2gtPmludF9md19vZmZzZXQpOworCWZ3ZS0+aW50Zndfc2l6ZSA9IGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X2xlbik7CisJZndlLT5leHRmdyA9ICh1OCAqKWZ3aCArIGxlMzJfdG9fY3B1KGZ3aC0+ZXh0X2Z3X29mZnNldCk7CisJZndlLT5leHRmd19zaXplID0gbGUzMl90b19jcHUoZndoLT5leHRfZndfbGVuKTsKKworCWZ3ZS0+bG9hZGVkID0gMTsKKworCWRldl9wcmludGsoS0VSTl9ERUJVRywgJnVkZXYtPmRldiwKKwkJICAgInVzaW5nIGZpcm13YXJlICVzICh2ZXJzaW9uICVkLiVkLiVkLSVkKVxuIiwKKwkJICAgZndlLT5md25hbWUsIGZ3aC0+bWFqb3IsIGZ3aC0+bWlub3IsIGZ3aC0+cGF0Y2gsIGZ3aC0+YnVpbGQpOworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiYm9hcmQgJXUsIGludCAlZDolZCwgZXh0ICVkOiVkIiwgYm9hcmRfdHlwZSwKKwkJIGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X29mZnNldCksIGxlMzJfdG9fY3B1KGZ3aC0+aW50X2Z3X2xlbiksCisJCSBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19vZmZzZXQpLCBsZTMyX3RvX2NwdShmd2gtPmV4dF9md19sZW4pKTsKKwlhdDc2X2RiZyhEQkdfREVWU1RBUlQsICJmaXJtd2FyZSBpZCAlcyIsIHN0cik7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZmd19tdXRleCk7CisKKwlpZiAoZndlLT5sb2FkZWQpCisJCXJldHVybiBmd2U7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9tYWM4MDIxMV90eF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHByaXYtPnR4X3NrYik7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpIiwgX19mdW5jX18pOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCWJyZWFrOworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FQ09OTlJFU0VUOgorCQkvKiBmYWlsLCB1cmIgaGFzIGJlZW4gdW5saW5rZWQgKi8KKwkJLyogRklYTUU6IGFkZCBlcnJvciBtZXNzYWdlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF0NzZfZGJnKERCR19VUkIsICIlcyAtIG5vbnplcm8gdHggc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCQkgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJYnJlYWs7CisJfQorCisJbWVtc2V0KCZpbmZvLT5zdGF0dXMsIDAsIHNpemVvZihpbmZvLT5zdGF0dXMpKTsKKworCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShwcml2LT5odywgcHJpdi0+dHhfc2tiKTsKKworCXByaXYtPnR4X3NrYiA9IE5VTEw7CisKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMocHJpdi0+aHcpOworfQorCitzdGF0aWMgaW50IGF0NzZfbWFjODAyMTFfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBhdDc2X3R4X2J1ZmZlciAqdHhfYnVmZmVyID0gcHJpdi0+YnVsa19vdXRfYnVmZmVyOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlpbnQgcGFkZGluZywgc3VibWl0X2xlbiwgcmV0OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCWlmIChwcml2LT50eF91cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogJXMgY2FsbGVkIHdoaWxlIHR4IHVyYiBpcyBwZW5kaW5nXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCBfX2Z1bmNfXyk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJYXQ3Nl9sZWR0cmlnX3R4X2FjdGl2aXR5KCk7CS8qIHRlbGwgbGVkdHJpZ2dlciB3ZSBzZW5kIGEgcGFja2V0ICovCisKKwlXQVJOX09OKHByaXYtPnR4X3NrYiAhPSBOVUxMKTsKKworCXByaXYtPnR4X3NrYiA9IHNrYjsKKwlwYWRkaW5nID0gYXQ3Nl9jYWxjX3BhZGRpbmcoc2tiLT5sZW4pOworCXN1Ym1pdF9sZW4gPSBBVDc2X1RYX0hEUkxFTiArIHNrYi0+bGVuICsgcGFkZGluZzsKKworCS8qIHNldHVwICdBdG1lbCcgaGVhZGVyICovCisJbWVtc2V0KHR4X2J1ZmZlciwgMCwgc2l6ZW9mKCp0eF9idWZmZXIpKTsKKwl0eF9idWZmZXItPnBhZGRpbmcgPSBwYWRkaW5nOworCXR4X2J1ZmZlci0+d2xlbmd0aCA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKKwl0eF9idWZmZXItPnR4X3JhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoaHcsIGluZm8pLT5od192YWx1ZTsKKwltZW1zZXQodHhfYnVmZmVyLT5yZXNlcnZlZCwgMCwgc2l6ZW9mKHR4X2J1ZmZlci0+cmVzZXJ2ZWQpKTsKKwltZW1jcHkodHhfYnVmZmVyLT5wYWNrZXQsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCisJYXQ3Nl9kYmcoREJHX1RYX0RBVEEsICIlcyB0eDogd2xlbiAweCV4IHBhZCAweCV4IHJhdGUgJWQgaGRyIiwKKwkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgbGUxNl90b19jcHUodHhfYnVmZmVyLT53bGVuZ3RoKSwKKwkJIHR4X2J1ZmZlci0+cGFkZGluZywgdHhfYnVmZmVyLT50eF9yYXRlKTsKKworCS8qIHNlbmQgc3R1ZmYgKi8KKwlhdDc2X2RiZ19kdW1wKERCR19UWF9EQVRBX0NPTlRFTlQsIHR4X2J1ZmZlciwgc3VibWl0X2xlbiwKKwkJICAgICAgIiVzKCk6IHR4X2J1ZmZlciAlZCBieXRlczoiLCBfX2Z1bmNfXywgc3VibWl0X2xlbik7CisJdXNiX2ZpbGxfYnVsa191cmIocHJpdi0+dHhfdXJiLCBwcml2LT51ZGV2LCBwcml2LT50eF9waXBlLCB0eF9idWZmZXIsCisJCQkgIHN1Ym1pdF9sZW4sIGF0NzZfbWFjODAyMTFfdHhfY2FsbGJhY2ssIHByaXYpOworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHByaXYtPnR4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciBpbiB0eCBzdWJtaXQgdXJiOiAlZFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcmV0KTsKKwkJaWYgKHJldCA9PSAtRUlOVkFMKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiAtRUlOVkFMOiB0eCB1cmIgJXAgaGNwcml2ICVwIGNvbXBsZXRlICVwXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSwgcHJpdi0+dHhfdXJiLAorCQkJICAgICAgIHByaXYtPnR4X3VyYi0+aGNwcml2LCBwcml2LT50eF91cmItPmNvbXBsZXRlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X21hYzgwMjExX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmV0OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlyZXQgPSBhdDc2X3N1Ym1pdF9yeF91cmIocHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Blbjogc3VibWl0X3J4X3VyYiBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCWF0NzZfc3RhcnR1cF9kZXZpY2UocHJpdik7CisKKwlhdDc2X3N0YXJ0X21vbml0b3IocHJpdik7CisKK2Vycm9yOgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdDc2X21hYzgwMjExX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKSIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJnByaXYtPm10eCk7CisKKwlpZiAoIXByaXYtPmRldmljZV91bnBsdWdnZWQpIHsKKwkJLyogV2UgYXJlIGNhbGxlZCBieSAiaWZjb25maWcgZXRoWCBkb3duIiwgbm90IGJlY2F1c2UgdGhlCisJCSAqIGRldmljZSBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUuICovCisJCWF0NzZfc2V0X3JhZGlvKHByaXYsIDApOworCisJCS8qIFdlIHVubGluayByeF91cmIgYmVjYXVzZSBhdDc2X29wZW4oKSByZS1zdWJtaXRzIGl0LgorCQkgKiBJZiB1bnBsdWdnZWQsIGF0NzZfZGVsZXRlX2RldmljZSgpIHRha2VzIGNhcmUgb2YgaXQuICovCisJCXVzYl9raWxsX3VyYihwcml2LT5yeF91cmIpOworCX0KKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKK30KKworc3RhdGljIGludCBhdDc2X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJldCA9IDA7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpIiwgX19mdW5jX18pOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIGV4aXQ7CisJfQorCitleGl0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCkiLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBpbnQgYXQ3Nl9qb2luKHN0cnVjdCBhdDc2X3ByaXYgKnByaXYpCit7CisJc3RydWN0IGF0NzZfcmVxX2pvaW4gam9pbjsKKwlpbnQgcmV0OworCisJbWVtc2V0KCZqb2luLCAwLCBzaXplb2Yoc3RydWN0IGF0NzZfcmVxX2pvaW4pKTsKKwltZW1jcHkoam9pbi5lc3NpZCwgcHJpdi0+ZXNzaWQsIHByaXYtPmVzc2lkX3NpemUpOworCWpvaW4uZXNzaWRfc2l6ZSA9IHByaXYtPmVzc2lkX3NpemU7CisJbWVtY3B5KGpvaW4uYnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7CisJam9pbi5ic3NfdHlwZSA9IElORlJBU1RSVUNUVVJFX01PREU7CisJam9pbi5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKKwlqb2luLnRpbWVvdXQgPSBjcHVfdG9fbGUxNigyMDAwKTsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBzZW5kaW5nIENNRF9KT0lOIiwgX19mdW5jX18pOworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfSk9JTiwgJmpvaW4sCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfam9pbikpOworCisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYXQ3Nl9zZXRfY2FyZF9jb21tYW5kIGZhaWxlZDogJWRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksIHJldCk7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IGF0NzZfd2FpdF9jb21wbGV0aW9uKHByaXYsIENNRF9KT0lOKTsKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlczogQ01EX0pPSU4gcmV0dXJuZWQ6IDB4JTAyeCIsIF9fZnVuY19fLCByZXQpOworCWlmIChyZXQgIT0gQ01EX1NUQVRVU19DT01QTEVURSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBhdDc2X3dhaXRfY29tcGxldGlvbiBmYWlsZWQ6ICVkXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLCByZXQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlhdDc2X3NldF9wbV9tb2RlKHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0NzZfZHdvcmtfaHdfc2NhbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXQ3Nl9wcml2LAorCQkJCQkgICAgICBkd29ya19od19zY2FuLndvcmspOworCWludCByZXQ7CisKKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCXJldCA9IGF0NzZfZ2V0X2NtZF9zdGF0dXMocHJpdi0+dWRldiwgQ01EX1NDQU4pOworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBDTURfU0NBTiBzdGF0dXMgMHglMDJ4IiwgX19mdW5jX18sIHJldCk7CisKKwkvKiBGSVhNRTogYWRkIG1heGltdW0gdGltZSBmb3Igc2NhbiB0byBjb21wbGV0ZSAqLworCisJaWYgKHJldCAhPSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+ZHdvcmtfaHdfc2NhbiwKKwkJCQkgICBTQ0FOX1BPTExfSU5URVJWQUwpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHByaXYtPmh3LCBmYWxzZSk7CisKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihwcml2LT5ic3NpZCkpCisJCWF0NzZfam9pbihwcml2KTsKKworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhwcml2LT5odyk7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworfQorCitzdGF0aWMgaW50IGF0NzZfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGF0NzZfcmVxX3NjYW4gc2NhbjsKKwl1OCAqc3NpZCA9IE5VTEw7CisJaW50IHJldCwgbGVuID0gMDsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCk6IiwgX19mdW5jX18pOworCisJaWYgKHByaXYtPmRldmljZV91bnBsdWdnZWQpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXR4KTsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwltZW1zZXQoJnNjYW4sIDAsIHNpemVvZihzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbikpOworCW1lbXNldChzY2FuLmJzc2lkLCAweEZGLCBFVEhfQUxFTik7CisKKwlpZiAocmVxLT5uX3NzaWRzKSB7CisJCXNjYW4uc2Nhbl90eXBlID0gU0NBTl9UWVBFX0FDVElWRTsKKwkJc3NpZCA9IHJlcS0+c3NpZHNbMF0uc3NpZDsKKwkJbGVuID0gcmVxLT5zc2lkc1swXS5zc2lkX2xlbjsKKwl9IGVsc2UgeworCQlzY2FuLnNjYW5fdHlwZSA9IFNDQU5fVFlQRV9QQVNTSVZFOworCX0KKworCWlmIChsZW4pIHsKKwkJbWVtY3B5KHNjYW4uZXNzaWQsIHNzaWQsIGxlbik7CisJCXNjYW4uZXNzaWRfc2l6ZSA9IGxlbjsKKwl9CisKKwlzY2FuLm1pbl9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUxNihwcml2LT5zY2FuX21pbl90aW1lKTsKKwlzY2FuLm1heF9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUxNihwcml2LT5zY2FuX21heF90aW1lKTsKKwlzY2FuLnByb2JlX2RlbGF5ID0gY3B1X3RvX2xlMTYocHJpdi0+c2Nhbl9taW5fdGltZSAqIDEwMDApOworCXNjYW4uaW50ZXJuYXRpb25hbF9zY2FuID0gMDsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzOiBzZW5kaW5nIENNRF9TQ0FOIiwgX19mdW5jX18pOworCXJldCA9IGF0NzZfc2V0X2NhcmRfY29tbWFuZChwcml2LT51ZGV2LCBDTURfU0NBTiwgJnNjYW4sIHNpemVvZihzY2FuKSk7CisKKwlpZiAocmV0IDwgMCkgeworCQllcnIoIkNNRF9TQ0FOIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT5kd29ya19od19zY2FuLAorCQkJICAgU0NBTl9QT0xMX0lOVEVSVkFMKTsKKworZXhpdDoKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKTogY2hhbm5lbCAlZCByYWRpbyAlZCIsCisJCSBfX2Z1bmNfXywgaHctPmNvbmYuY2hhbm5lbC0+aHdfdmFsdWUsCisJCSBody0+Y29uZi5yYWRpb19lbmFibGVkKTsKKwlhdDc2X2RiZ19kdW1wKERCR19NQUM4MDIxMSwgcHJpdi0+YnNzaWQsIEVUSF9BTEVOLCAiYnNzaWQ6Iik7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJcHJpdi0+Y2hhbm5lbCA9IGh3LT5jb25mLmNoYW5uZWwtPmh3X3ZhbHVlOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi0+YnNzaWQpKQorCQlhdDc2X2pvaW4ocHJpdik7CisJZWxzZQorCQlhdDc2X3N0YXJ0X21vbml0b3IocHJpdik7CisKKwltdXRleF91bmxvY2soJnByaXYtPm10eCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdDc2X2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpOiIsIF9fZnVuY19fKTsKKwlhdDc2X2RiZ19kdW1wKERCR19NQUM4MDIxMSwgY29uZi0+YnNzaWQsIEVUSF9BTEVOLCAiYnNzaWQ6Iik7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJbWVtY3B5KHByaXYtPmJzc2lkLCBjb25mLT5ic3NpZCwgRVRIX0FMRU4pOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi0+YnNzaWQpKQorCQkvKiBtYWM4MDIxMSBpcyBqb2luaW5nIGEgYnNzICovCisJCWF0NzZfam9pbihwcml2KTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+bXR4KTsKKworCXJldHVybiAwOworfQorCisvKiBtdXN0IGJlIGF0b21pYyAqLworc3RhdGljIHZvaWQgYXQ3Nl9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCisJCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLCBpbnQgbWNfY291bnQsCisJCQkJICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IGZsYWdzOworCisJYXQ3Nl9kYmcoREJHX01BQzgwMjExLCAiJXMoKTogY2hhbmdlZF9mbGFncz0weCUwOHggIgorCQkgInRvdGFsX2ZsYWdzPTB4JTA4eCBtY19jb3VudD0lZCIsCisJCSBfX2Z1bmNfXywgY2hhbmdlZF9mbGFncywgKnRvdGFsX2ZsYWdzLCBtY19jb3VudCk7CisKKwlmbGFncyA9IGNoYW5nZWRfZmxhZ3MgJiBBVDc2X1NVUFBPUlRFRF9GSUxURVJTOworCSp0b3RhbF9mbGFncyA9IEFUNzZfU1VQUE9SVEVEX0ZJTFRFUlM7CisKKwkvKiBCYWlsIG91dCBhZnRlciB1cGRhdGluZyBmbGFncyB0byBwcmV2ZW50IGEgV0FSTl9PTiBpbiBtYWM4MDIxMS4gKi8KKwlpZiAocHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCkKKwkJcmV0dXJuOworCisJLyogRklYTUU6IGFjY2VzcyB0byBwcml2LT5wcm9taXNjIHNob3VsZCBiZSBwcm90ZWN0ZWQgd2l0aAorCSAqIHByaXYtPm10eCwgYnV0IGl0J3MgaW1wb3NzaWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gbmVlZHMgdG8gYmUKKwkgKiBhdG9taWMgKi8KKworCWlmIChmbGFncyAmJiAhcHJpdi0+cHJvbWlzYykgeworCQkvKiBtYWM4MDIxMSB3YW50cyB1cyB0byBlbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAqLworCQlwcml2LT5wcm9taXNjID0gMTsKKwl9IGVsc2UgaWYgKCFmbGFncyAmJiBwcml2LT5wcm9taXNjKSB7CisJCS8qIHdlIG5lZWQgdG8gZGlzYWJsZSBwcm9taXNjdW91cyBtb2RlICovCisJCXByaXYtPnByb21pc2MgPSAwOworCX0gZWxzZQorCQlyZXR1cm47CisKKwlxdWV1ZV93b3JrKGh3LT53b3JrcXVldWUsICZwcml2LT53b3JrX3NldF9wcm9taXNjKTsKK30KKworc3RhdGljIGludCBhdDc2X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKK3sKKwlzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlpbnQgaTsKKworCWF0NzZfZGJnKERCR19NQUM4MDIxMSwgIiVzKCk6IGNtZCAlZCBrZXktPmFsZyAlZCBrZXktPmtleWlkeCAlZCAiCisJCSAia2V5LT5rZXlsZW4gJWQiLAorCQkgX19mdW5jX18sIGNtZCwga2V5LT5hbGcsIGtleS0+a2V5aWR4LCBrZXktPmtleWxlbik7CisKKwlpZiAoa2V5LT5hbGcgIT0gQUxHX1dFUCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJa2V5LT5od19rZXlfaWR4ID0ga2V5LT5rZXlpZHg7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdHgpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNFVF9LRVk6CisJCW1lbWNweShwcml2LT53ZXBfa2V5c1trZXktPmtleWlkeF0sIGtleS0+a2V5LCBrZXktPmtleWxlbik7CisJCXByaXYtPndlcF9rZXlzX2xlbltrZXktPmtleWlkeF0gPSBrZXktPmtleWxlbjsKKworCQkvKiBGSVhNRTogZmluZCBvdXQgaG93IHRvIGRvIHRoaXMgcHJvcGVybHkgKi8KKwkJcHJpdi0+d2VwX2tleV9pZCA9IGtleS0+a2V5aWR4OworCisJCWJyZWFrOworCWNhc2UgRElTQUJMRV9LRVk6CisJZGVmYXVsdDoKKwkJcHJpdi0+d2VwX2tleXNfbGVuW2tleS0+a2V5aWR4XSA9IDA7CisJCWJyZWFrOworCX0KKworCXByaXYtPndlcF9lbmFibGVkID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBXRVBfS0VZUzsgaSsrKSB7CisJCWlmIChwcml2LT53ZXBfa2V5c19sZW5baV0gIT0gMCkKKwkJCXByaXYtPndlcF9lbmFibGVkID0gMTsKKwl9CisKKwlhdDc2X3N0YXJ0dXBfZGV2aWNlKHByaXYpOworCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdHgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdDc2X29wcyA9IHsKKwkudHggPSBhdDc2X21hYzgwMjExX3R4LAorCS5hZGRfaW50ZXJmYWNlID0gYXQ3Nl9hZGRfaW50ZXJmYWNlLAorCS5yZW1vdmVfaW50ZXJmYWNlID0gYXQ3Nl9yZW1vdmVfaW50ZXJmYWNlLAorCS5jb25maWcgPSBhdDc2X2NvbmZpZywKKwkuY29uZmlnX2ludGVyZmFjZSA9IGF0NzZfY29uZmlnX2ludGVyZmFjZSwKKwkuY29uZmlndXJlX2ZpbHRlciA9IGF0NzZfY29uZmlndXJlX2ZpbHRlciwKKwkuc3RhcnQgPSBhdDc2X21hYzgwMjExX3N0YXJ0LAorCS5zdG9wID0gYXQ3Nl9tYWM4MDIxMV9zdG9wLAorCS5od19zY2FuID0gYXQ3Nl9od19zY2FuLAorCS5zZXRfa2V5ID0gYXQ3Nl9zZXRfa2V5LAorfTsKKworLyogQWxsb2NhdGUgbmV0d29yayBkZXZpY2UgYW5kIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhICovCitzdGF0aWMgc3RydWN0IGF0NzZfcHJpdiAqYXQ3Nl9hbGxvY19uZXdfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXY7CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGF0NzZfcHJpdiksICZhdDc2X29wcyk7CisJaWYgKCFodykgeworCQlwcmludGsoS0VSTl9FUlIgRFJJVkVSX05BTUUgIjogY291bGQgbm90IHJlZ2lzdGVyIgorCQkgICAgICAgIiBpZWVlODAyMTFfaHdcbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwcml2ID0gaHctPnByaXY7CisJcHJpdi0+aHcgPSBodzsKKworCXByaXYtPnVkZXYgPSB1ZGV2OworCisJbXV0ZXhfaW5pdCgmcHJpdi0+bXR4KTsKKwlJTklUX1dPUksoJnByaXYtPndvcmtfc2V0X3Byb21pc2MsIGF0NzZfd29ya19zZXRfcHJvbWlzYyk7CisJSU5JVF9XT1JLKCZwcml2LT53b3JrX3N1Ym1pdF9yeCwgYXQ3Nl93b3JrX3N1Ym1pdF9yeCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmR3b3JrX2h3X3NjYW4sIGF0NzZfZHdvcmtfaHdfc2Nhbik7CisKKwl0YXNrbGV0X2luaXQoJnByaXYtPnJ4X3Rhc2tsZXQsIGF0NzZfcnhfdGFza2xldCwgMCk7CisKKwlwcml2LT5wbV9tb2RlID0gQVQ3Nl9QTV9PRkY7CisJcHJpdi0+cG1fcGVyaW9kID0gMDsKKworCS8qIHVuaXQgdXMgKi8KKwlwcml2LT5ody0+Y2hhbm5lbF9jaGFuZ2VfdGltZSA9IDEwMDAwMDsKKworCXJldHVybiBwcml2OworfQorCitzdGF0aWMgaW50IGF0NzZfYWxsb2NfdXJicyhzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50LCAqZXBfaW4sICplcF9vdXQ7CisJaW50IGk7CisJaW50IGJ1ZmZlcl9zaXplOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFTlRFUiIsIF9fZnVuY19fKTsKKworCWF0NzZfZGJnKERCR19VUkIsICIlczogTnVtRW5kcG9pbnRzICVkICIsIF9fZnVuY19fLAorCQkgaW50ZXJmYWNlLT5hbHRzZXR0aW5nWzBdLmRlc2MuYk51bUVuZHBvaW50cyk7CisKKwllcF9pbiA9IE5VTEw7CisJZXBfb3V0ID0gTlVMTDsKKwlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCQlhdDc2X2RiZyhEQkdfVVJCLCAiJXM6ICVkLiBlbmRwb2ludDogYWRkciAweCV4IGF0dHIgMHgleCIsCisJCQkgX19mdW5jX18sIGksIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzLAorCQkJIGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMpOworCisJCWlmICghZXBfaW4gJiYgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oZW5kcG9pbnQpKQorCQkJZXBfaW4gPSBlbmRwb2ludDsKKworCQlpZiAoIWVwX291dCAmJiB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoZW5kcG9pbnQpKQorCQkJZXBfb3V0ID0gZW5kcG9pbnQ7CisJfQorCisJaWYgKCFlcF9pbiB8fCAhZXBfb3V0KSB7CisJCWRldl9wcmludGsoS0VSTl9FUlIsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJidWxrIGVuZHBvaW50cyBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlwcml2LT5yeF9waXBlID0gdXNiX3JjdmJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwX2luLT5iRW5kcG9pbnRBZGRyZXNzKTsKKwlwcml2LT50eF9waXBlID0gdXNiX3NuZGJ1bGtwaXBlKHByaXYtPnVkZXYsIGVwX291dC0+YkVuZHBvaW50QWRkcmVzcyk7CisKKwlwcml2LT5yeF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCXByaXYtPnR4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5yeF91cmIgfHwgIXByaXYtPnR4X3VyYikgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgVVJCXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYnVmZmVyX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0NzZfdHhfYnVmZmVyKSArIE1BWF9QQURESU5HX1NJWkU7CisJcHJpdi0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5idWxrX291dF9idWZmZXIpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImNhbm5vdCBhbGxvY2F0ZSBvdXRwdXQgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRVhJVCIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIGF0NzZfcmF0ZXNbXSA9IHsKKwl7IC5iaXRyYXRlID0gMTAsIC5od192YWx1ZSA9IFRYX1JBVEVfMU1CSVQsIH0sCisJeyAuYml0cmF0ZSA9IDIwLCAuaHdfdmFsdWUgPSBUWF9SQVRFXzJNQklULCB9LAorCXsgLmJpdHJhdGUgPSA1NSwgLmh3X3ZhbHVlID0gVFhfUkFURV81XzVNQklULCB9LAorCXsgLmJpdHJhdGUgPSAxMTAsIC5od192YWx1ZSA9IFRYX1JBVEVfMTFNQklULCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhdDc2X2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyLCAuaHdfdmFsdWUgPSAxIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDE3LCAuaHdfdmFsdWUgPSAyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDI3LCAuaHdfdmFsdWUgPSA0IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDMyLCAuaHdfdmFsdWUgPSA1IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDM3LCAuaHdfdmFsdWUgPSA2IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQyLCAuaHdfdmFsdWUgPSA3IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAuaHdfdmFsdWUgPSA4IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDUyLCAuaHdfdmFsdWUgPSA5IH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDU3LCAuaHdfdmFsdWUgPSAxMCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5od192YWx1ZSA9IDEyIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDcyLCAuaHdfdmFsdWUgPSAxMyB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0gMTQgfQorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYXQ3Nl9zdXBwb3J0ZWRfYmFuZCA9IHsKKwkuY2hhbm5lbHMgPSBhdDc2X2NoYW5uZWxzLAorCS5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShhdDc2X2NoYW5uZWxzKSwKKwkuYml0cmF0ZXMgPSBhdDc2X3JhdGVzLAorCS5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShhdDc2X3JhdGVzKSwKK307CisKKy8qIFJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlIGFuZCBpbml0aWFsaXplIHRoZSBoYXJkd2FyZSAqLworc3RhdGljIGludCBhdDc2X2luaXRfbmV3X2RldmljZShzdHJ1Y3QgYXQ3Nl9wcml2ICpwcml2LAorCQkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJaW50IHJldDsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwkvKiBjaGVjayBvdXQgdGhlIGVuZHBvaW50cyAqLworCisJYXQ3Nl9kYmcoREJHX0RFVlNUQVJULCAiVVNCIGludGVyZmFjZTogJWQgZW5kcG9pbnRzIiwKKwkJIGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyk7CisKKwlyZXQgPSBhdDc2X2FsbG9jX3VyYnMocHJpdiwgaW50ZXJmYWNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBleGl0OworCisJLyogTUFDIGFkZHJlc3MgKi8KKwlyZXQgPSBhdDc2X2dldF9od19jb25maWcocHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImNhbm5vdCBnZXQgTUFDIGFkZHJlc3NcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcHJpdi0+ZG9tYWluID0gYXQ3Nl9nZXRfcmVnX2RvbWFpbihwcml2LT5yZWd1bGF0b3J5X2RvbWFpbik7CisKKwlwcml2LT5jaGFubmVsID0gREVGX0NIQU5ORUw7CisJcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7CisJcHJpdi0+cnRzX3RocmVzaG9sZCA9IERFRl9SVFNfVEhSRVNIT0xEOworCXByaXYtPmZyYWdfdGhyZXNob2xkID0gREVGX0ZSQUdfVEhSRVNIT0xEOworCXByaXYtPnNob3J0X3JldHJ5X2xpbWl0ID0gREVGX1NIT1JUX1JFVFJZX0xJTUlUOworCXByaXYtPnR4cmF0ZSA9IFRYX1JBVEVfQVVUTzsKKwlwcml2LT5wcmVhbWJsZV90eXBlID0gUFJFQU1CTEVfVFlQRV9MT05HOworCXByaXYtPmJlYWNvbl9wZXJpb2QgPSAxMDA7CisJcHJpdi0+YXV0aF9tb2RlID0gV0xBTl9BVVRIX09QRU47CisJcHJpdi0+c2Nhbl9taW5fdGltZSA9IERFRl9TQ0FOX01JTl9USU1FOworCXByaXYtPnNjYW5fbWF4X3RpbWUgPSBERUZfU0NBTl9NQVhfVElNRTsKKwlwcml2LT5zY2FuX21vZGUgPSBTQ0FOX1RZUEVfQUNUSVZFOworCXByaXYtPmRldmljZV91bnBsdWdnZWQgPSAwOworCisJLyogbWFjODAyMTEgaW5pdGlhbGlzYXRpb24gKi8KKwlwcml2LT5ody0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gMTsKKwlwcml2LT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKTsKKwlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmF0NzZfc3VwcG9ydGVkX2JhbmQ7CisJcHJpdi0+aHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8CisJCQkgIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDOworCXByaXYtPmh3LT5tYXhfc2lnbmFsID0gMTAwOworCisJU0VUX0lFRUU4MDIxMV9ERVYocHJpdi0+aHcsICZpbnRlcmZhY2UtPmRldik7CisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIocHJpdi0+aHcsIHByaXYtPm1hY19hZGRyKTsKKworCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCByZWdpc3RlciBtYWM4MDIxMSBodyAoc3RhdHVzICVkKSFcbiIsCisJCSAgICAgICByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogVVNCICVzLCBNQUMgJXMsIGZpcm13YXJlICVkLiVkLiVkLSVkXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSksCisJICAgICAgIGRldl9uYW1lKCZpbnRlcmZhY2UtPmRldiksIG1hYzJzdHIocHJpdi0+bWFjX2FkZHIpLAorCSAgICAgICBwcml2LT5md192ZXJzaW9uLm1ham9yLCBwcml2LT5md192ZXJzaW9uLm1pbm9yLAorCSAgICAgICBwcml2LT5md192ZXJzaW9uLnBhdGNoLCBwcml2LT5md192ZXJzaW9uLmJ1aWxkKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogcmVndWxhdG9yeSBkb21haW4gMHglMDJ4OiAlc1xuIiwKKwkgICAgICAgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpLAorCSAgICAgICBwcml2LT5yZWd1bGF0b3J5X2RvbWFpbiwgcHJpdi0+ZG9tYWluLT5uYW1lKTsKKworZXhpdDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdDc2X2RlbGV0ZV9kZXZpY2Uoc3RydWN0IGF0NzZfcHJpdiAqcHJpdikKK3sKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBFTlRFUiIsIF9fZnVuY19fKTsKKworCS8qIFRoZSBkZXZpY2UgaXMgZ29uZSwgZG9uJ3QgYm90aGVyIHR1cm5pbmcgaXQgb2ZmICovCisJcHJpdi0+ZGV2aWNlX3VucGx1Z2dlZCA9IDE7CisKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOworCisJaWYgKHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpIHsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmtfaHdfc2Nhbik7CisJCWZsdXNoX3dvcmtxdWV1ZShwcml2LT5ody0+d29ya3F1ZXVlKTsKKwkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcocHJpdi0+aHcpOworCX0KKworCWlmIChwcml2LT50eF91cmIpIHsKKwkJdXNiX2tpbGxfdXJiKHByaXYtPnR4X3VyYik7CisJCXVzYl9mcmVlX3VyYihwcml2LT50eF91cmIpOworCX0KKwlpZiAocHJpdi0+cnhfdXJiKSB7CisJCXVzYl9raWxsX3VyYihwcml2LT5yeF91cmIpOworCQl1c2JfZnJlZV91cmIocHJpdi0+cnhfdXJiKTsKKwl9CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiB1bmxpbmtlZCB1cmJzIiwgX19mdW5jX18pOworCisJa2ZyZWUocHJpdi0+YnVsa19vdXRfYnVmZmVyKTsKKworCWRlbF90aW1lcl9zeW5jKCZsZWR0cmlnX3R4X3RpbWVyKTsKKworCWlmIChwcml2LT5yeF9za2IpCisJCWtmcmVlX3NrYihwcml2LT5yeF9za2IpOworCisJdXNiX3B1dF9kZXYocHJpdi0+dWRldik7CisKKwlhdDc2X2RiZyhEQkdfUFJPQ19FTlRSWSwgIiVzOiBiZWZvcmUgZnJlZWluZyBwcml2L2llZWU4MDIxMV9odyIsCisJCSBfX2Z1bmNfXyk7CisJaWVlZTgwMjExX2ZyZWVfaHcocHJpdi0+aHcpOworCisJYXQ3Nl9kYmcoREJHX1BST0NfRU5UUlksICIlczogRVhJVCIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIGludCBhdDc2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhdDc2X3ByaXYgKnByaXY7CisJc3RydWN0IGZ3ZW50cnkgKmZ3ZTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlpbnQgb3BfbW9kZTsKKwlpbnQgbmVlZF9leHRfZncgPSAwOworCXN0cnVjdCBtaWJfZndfdmVyc2lvbiBmd3Y7CisJaW50IGJvYXJkX3R5cGUgPSAoaW50KWlkLT5kcml2ZXJfaW5mbzsKKworCXVkZXYgPSB1c2JfZ2V0X2RldihpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSkpOworCisJLyogTG9hZCBmaXJtd2FyZSBpbnRvIGtlcm5lbCBtZW1vcnkgKi8KKwlmd2UgPSBhdDc2X2xvYWRfZmlybXdhcmUodWRldiwgYm9hcmRfdHlwZSk7CisJaWYgKCFmd2UpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlvcF9tb2RlID0gYXQ3Nl9nZXRfb3BfbW9kZSh1ZGV2KTsKKworCWF0NzZfZGJnKERCR19ERVZTVEFSVCwgIm9wbW9kZSAlZCIsIG9wX21vZGUpOworCisJLyogd2UgZ2V0IE9QTU9ERV9OT05FIHdpdGggMi40LjIzLCBTTUMyNjYyVy1BUiA/Pz8KKwkgICB3ZSBnZXQgMjA0IHdpdGggMi40LjIzLCBGaWJlcmxpbmUgRkwtV0wyNDB1ICg1MDVBK1JGTUQyOTU4KSA/Pz8gKi8KKworCWlmIChvcF9tb2RlID09IE9QTU9ERV9IV19DT05GSUdfTU9ERSkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkgICAiY2Fubm90IGhhbmRsZSBhIGRldmljZSBpbiBIV19DT05GSUdfTU9ERVxuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAob3BfbW9kZSAhPSBPUE1PREVfTk9STUFMX05JQ19XSVRIX0ZMQVNICisJICAgICYmIG9wX21vZGUgIT0gT1BNT0RFX05PUk1BTF9OSUNfV0lUSE9VVF9GTEFTSCkgeworCQkvKiBkb3dubG9hZCBpbnRlcm5hbCBmaXJtd2FyZSBwYXJ0ICovCisJCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmludGVyZmFjZS0+ZGV2LAorCQkJICAgImRvd25sb2FkaW5nIGludGVybmFsIGZpcm13YXJlXG4iKTsKKwkJcmV0ID0gYXQ3Nl9sb2FkX2ludGVybmFsX2Z3KHVkZXYsIGZ3ZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkJICAgImVycm9yICVkIGRvd25sb2FkaW5nIGludGVybmFsIGZpcm13YXJlXG4iLAorCQkJCSAgIHJldCk7CisJCQlnb3RvIGVycm9yOworCQl9CisJCXVzYl9wdXRfZGV2KHVkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEludGVybmFsIGZpcm13YXJlIGFscmVhZHkgaW5zaWRlIHRoZSBkZXZpY2UuICBHZXQgZmlybXdhcmUKKwkgKiB2ZXJzaW9uIHRvIHRlc3QgaWYgZXh0ZXJuYWwgZmlybXdhcmUgaXMgbG9hZGVkLgorCSAqIFRoaXMgd29ya3Mgb25seSBmb3IgbmV3ZXIgZmlybXdhcmUsIGUuZy4gdGhlIEludGVyc2lsIDAuOTAueAorCSAqIHNheXMgImNvbnRyb2wgdGltZW91dCBvbiBlcDBpbiIgYW5kIHN1YnNlcXVlbnQKKwkgKiBhdDc2X2dldF9vcF9tb2RlKCkgZmFpbCB0b28gOi0oICovCisKKwkvKiBpZiB2ZXJzaW9uID49IDAuMTAwLngueSBvciBkZXZpY2Ugd2l0aCBidWlsdC1pbiBmbGFzaCB3ZSBjYW4KKwkgKiBxdWVyeSB0aGUgZGV2aWNlIGZvciB0aGUgZncgdmVyc2lvbiAqLworCWlmICgoZndlLT5md192ZXJzaW9uLm1ham9yID4gMCB8fCBmd2UtPmZ3X3ZlcnNpb24ubWlub3IgPj0gMTAwKQorCSAgICB8fCAob3BfbW9kZSA9PSBPUE1PREVfTk9STUFMX05JQ19XSVRIX0ZMQVNIKSkgeworCQlyZXQgPSBhdDc2X2dldF9taWIodWRldiwgTUlCX0ZXX1ZFUlNJT04sICZmd3YsIHNpemVvZihmd3YpKTsKKwkJaWYgKHJldCA8IDAgfHwgKGZ3di5tYWpvciB8IGZ3di5taW5vcikgPT0gMCkKKwkJCW5lZWRfZXh0X2Z3ID0gMTsKKwl9IGVsc2UKKwkJLyogTm8gd2F5IHRvIGNoZWNrIGZpcm13YXJlIHZlcnNpb24sIHJlbG9hZCB0byBiZSBzdXJlICovCisJCW5lZWRfZXh0X2Z3ID0gMTsKKworCWlmIChuZWVkX2V4dF9mdykgeworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZpbnRlcmZhY2UtPmRldiwKKwkJCSAgICJkb3dubG9hZGluZyBleHRlcm5hbCBmaXJtd2FyZVxuIik7CisKKwkJcmV0ID0gYXQ3Nl9sb2FkX2V4dGVybmFsX2Z3KHVkZXYsIGZ3ZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yOworCisJCS8qIFJlLWNoZWNrIGZpcm13YXJlIHZlcnNpb24gKi8KKwkJcmV0ID0gYXQ3Nl9nZXRfbWliKHVkZXYsIE1JQl9GV19WRVJTSU9OLCAmZnd2LCBzaXplb2YoZnd2KSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmaW50ZXJmYWNlLT5kZXYsCisJCQkJICAgImVycm9yICVkIGdldHRpbmcgZmlybXdhcmUgdmVyc2lvblxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlwcml2ID0gYXQ3Nl9hbGxvY19uZXdfZGV2aWNlKHVkZXYpOworCWlmICghcHJpdikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBwcml2KTsKKworCW1lbWNweSgmcHJpdi0+ZndfdmVyc2lvbiwgJmZ3diwgc2l6ZW9mKHN0cnVjdCBtaWJfZndfdmVyc2lvbikpOworCXByaXYtPmJvYXJkX3R5cGUgPSBib2FyZF90eXBlOworCisJcmV0ID0gYXQ3Nl9pbml0X25ld19kZXZpY2UocHJpdiwgaW50ZXJmYWNlKTsKKwlpZiAocmV0IDwgMCkKKwkJYXQ3Nl9kZWxldGVfZGV2aWNlKHByaXYpOworCisJcmV0dXJuIHJldDsKKworZXJyb3I6CisJdXNiX3B1dF9kZXYodWRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXQ3Nl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGF0NzZfcHJpdiAqcHJpdjsKKworCXByaXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJLyogRGlzY29ubmVjdCBhZnRlciBsb2FkaW5nIGludGVybmFsIGZpcm13YXJlICovCisJaWYgKCFwcml2KQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogZGlzY29ubmVjdGluZ1xuIiwgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKKwlhdDc2X2RlbGV0ZV9kZXZpY2UocHJpdik7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZpbnRlcmZhY2UtPmRldiwgImRpc2Nvbm5lY3RlZFxuIik7Cit9CisKKy8qIFN0cnVjdHVyZSBmb3IgcmVnaXN0ZXJpbmcgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGF0NzZfZHJpdmVyID0geworCS5uYW1lID0gRFJJVkVSX05BTUUsCisJLnByb2JlID0gYXQ3Nl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGF0NzZfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBkZXZfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdDc2X21vZF9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICIgbG9hZGluZ1xuIik7CisKKwltdXRleF9pbml0KCZmd19tdXRleCk7CisKKwkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJcmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZhdDc2X2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApCisJCXByaW50ayhLRVJOX0VSUiBEUklWRVJfTkFNRQorCQkgICAgICAgIjogdXNiX3JlZ2lzdGVyIGZhaWxlZCAoc3RhdHVzICVkKVxuIiwgcmVzdWx0KTsKKworCWxlZF90cmlnZ2VyX3JlZ2lzdGVyX3NpbXBsZSgiYXQ3Nl91c2ItdHgiLCAmbGVkdHJpZ190eCk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGF0NzZfbW9kX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OICIgdW5sb2FkaW5nXG4iKTsKKwl1c2JfZGVyZWdpc3RlcigmYXQ3Nl9kcml2ZXIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZpcm13YXJlcyk7IGkrKykgeworCQlpZiAoZmlybXdhcmVzW2ldLmZ3KQorCQkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZXNbaV0uZncpOworCX0KKwlsZWRfdHJpZ2dlcl91bnJlZ2lzdGVyX3NpbXBsZShsZWR0cmlnX3R4KTsKK30KKworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBhdDc2X2RlYnVnLCB1aW50LCAwNjAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1Z2dpbmcgbGV2ZWwiKTsKKworbW9kdWxlX2luaXQoYXQ3Nl9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChhdDc2X21vZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiT2xpdmVyIEt1cnRoIDxva3VAbWFzcW1haWwuY3g+Iik7CitNT0RVTEVfQVVUSE9SKCJKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+Iik7CitNT0RVTEVfQVVUSE9SKCJBbGV4IDxhbGV4QGZvb2dvZC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJOaWNrIEpvbmVzIik7CitNT0RVTEVfQVVUSE9SKCJCYWxpbnQgU2VlYmVyIDxuMF81cDRtX3AxMzQ1M0Bob3RtYWlsLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJHdWlkbyBHdWVudGhlciA8YWd4QHNpZ3hjcHUub3JnPiIpOworTU9EVUxFX0FVVEhPUigiS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bpa2kuZmk+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdDc2YzUweC11c2IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWM1Y2NmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmgKQEAgLTAsMCArMSw0NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBPbGl2ZXIgS3VydGgKKyAqCSAgICAgKGMpIDIwMDMsMjAwNCBKb2VyZyBBbGJlcnQgPGpvZXJnLmFsYmVydEBnbXguZGU+CisgKgkgICAgIChjKSAyMDA3IEd1aWRvIEd1ZW50aGVyIDxhZ3hAc2lneGNwdS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGRyaXZlciB3YXMgYmFzZWQgb24gaW5mb3JtYXRpb24gZnJvbSB0aGUgU291cmNlZm9yZ2UgZHJpdmVyCisgKiByZWxlYXNlZCBhbmQgbWFpbnRhaW5lZCBieSBBdG1lbDoKKyAqCisgKiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hdG1lbHdsYW5kcml2ZXIvCisgKgorICogQWx0aG91Z2ggdGhlIGNvZGUgd2FzIGNvbXBsZXRlbHkgcmUtd3JpdHRlbiwKKyAqIGl0IHdvdWxkIGhhdmUgYmVlbiBpbXBvc3NpYmxlIHdpdGhvdXQgQXRtZWwncyBkZWNpc2lvbiB0bworICogcmVsZWFzZSBhbiBPcGVuIFNvdXJjZSBkcml2ZXIgKHVuZm9ydHVuYXRlbHkgdGhlIGZpcm13YXJlIHdhcworICoga2VwdCBiaW5hcnkgb25seSkuIFRoYW5rcyBmb3IgdGhhdCBkZWNpc2lvbiB0byBBdG1lbCEKKyAqLworCisjaWZuZGVmIF9BVDc2X1VTQl9ICisjZGVmaW5lIF9BVDc2X1VTQl9ICisKKy8qIEJvYXJkIHR5cGVzICovCitlbnVtIGJvYXJkX3R5cGUgeworCUJPQVJEXzUwM19JU0wzODYxID0gMSwKKwlCT0FSRF81MDNfSVNMMzg2MyA9IDIsCisJQk9BUkRfNTAzID0gMywKKwlCT0FSRF81MDNfQUNDID0gNCwKKwlCT0FSRF81MDUgPSA1LAorCUJPQVJEXzUwNV8yOTU4ID0gNiwKKwlCT0FSRF81MDVBID0gNywKKwlCT0FSRF81MDVBTVggPSA4Cit9OworCisjZGVmaW5lIENNRF9TVEFUVVNfSURMRQkJCQkweDAwCisjZGVmaW5lIENNRF9TVEFUVVNfQ09NUExFVEUJCQkweDAxCisjZGVmaW5lIENNRF9TVEFUVVNfVU5LTk9XTgkJCTB4MDIKKyNkZWZpbmUgQ01EX1NUQVRVU19JTlZBTElEX1BBUkFNRVRFUgkJMHgwMworI2RlZmluZSBDTURfU1RBVFVTX0ZVTkNUSU9OX05PVF9TVVBQT1JURUQJMHgwNAorI2RlZmluZSBDTURfU1RBVFVTX1RJTUVfT1VUCQkJMHgwNworI2RlZmluZSBDTURfU1RBVFVTX0lOX1BST0dSRVNTCQkJMHgwOAorI2RlZmluZSBDTURfU1RBVFVTX0hPU1RfRkFJTFVSRQkJCTB4ZmYKKyNkZWZpbmUgQ01EX1NUQVRVU19TQ0FOX0ZBSUxFRAkJCTB4ZjAKKworLyogYW5zd2VycyB0byBnZXQgb3AgbW9kZSAqLworI2RlZmluZSBPUE1PREVfTk9ORQkJCQkweDAwCisjZGVmaW5lIE9QTU9ERV9OT1JNQUxfTklDX1dJVEhfRkxBU0gJCTB4MDEKKyNkZWZpbmUgT1BNT0RFX0hXX0NPTkZJR19NT0RFCQkJMHgwMgorI2RlZmluZSBPUE1PREVfREZVX01PREVfV0lUSF9GTEFTSAkJMHgwMworI2RlZmluZSBPUE1PREVfTk9STUFMX05JQ19XSVRIT1VUX0ZMQVNICQkweDA0CisKKyNkZWZpbmUgQ01EX1NFVF9NSUIJCTB4MDEKKyNkZWZpbmUgQ01EX0dFVF9NSUIJCTB4MDIKKyNkZWZpbmUgQ01EX1NDQU4JCTB4MDMKKyNkZWZpbmUgQ01EX0pPSU4JCTB4MDQKKyNkZWZpbmUgQ01EX1NUQVJUX0lCU1MJCTB4MDUKKyNkZWZpbmUgQ01EX1JBRElPX09OCQkweDA2CisjZGVmaW5lIENNRF9SQURJT19PRkYJCTB4MDcKKyNkZWZpbmUgQ01EX1NUQVJUVVAJCTB4MEIKKworI2RlZmluZSBNSUJfTE9DQUwJCTB4MDEKKyNkZWZpbmUgTUlCX01BQ19BRERSCQkweDAyCisjZGVmaW5lIE1JQl9NQUMJCQkweDAzCisjZGVmaW5lIE1JQl9NQUNfTUdNVAkJMHgwNQorI2RlZmluZSBNSUJfTUFDX1dFUAkJMHgwNgorI2RlZmluZSBNSUJfUEhZCQkJMHgwNworI2RlZmluZSBNSUJfRldfVkVSU0lPTgkJMHgwOAorI2RlZmluZSBNSUJfTURPTUFJTgkJMHgwOQorCisjZGVmaW5lIEFESE9DX01PREUJCTEKKyNkZWZpbmUgSU5GUkFTVFJVQ1RVUkVfTU9ERQkyCisKKy8qIHZhbHVlcyBmb3Igc3RydWN0IG1pYl9sb2NhbCwgZmllbGQgcHJlYW1ibGVfdHlwZSAqLworI2RlZmluZSBQUkVBTUJMRV9UWVBFX0xPTkcJMAorI2RlZmluZSBQUkVBTUJMRV9UWVBFX1NIT1JUCTEKKyNkZWZpbmUgUFJFQU1CTEVfVFlQRV9BVVRPCTIKKworLyogdmFsdWVzIGZvciB0eF9yYXRlICovCisjZGVmaW5lIFRYX1JBVEVfMU1CSVQJCTAKKyNkZWZpbmUgVFhfUkFURV8yTUJJVAkJMQorI2RlZmluZSBUWF9SQVRFXzVfNU1CSVQgCTIKKyNkZWZpbmUgVFhfUkFURV8xMU1CSVQJCTMKKyNkZWZpbmUgVFhfUkFURV9BVVRPCQk0CisKKy8qIHBvd2VyIG1hbmFnZW1lbnQgbW9kZXMgKi8KKyNkZWZpbmUgQVQ3Nl9QTV9PRkYJCTEKKyNkZWZpbmUgQVQ3Nl9QTV9PTgkJMgorI2RlZmluZSBBVDc2X1BNX1NNQVJUCQkzCisKK3N0cnVjdCBod2NmZ19yNTA1IHsKKwl1OCBjcjM5X3ZhbHVlc1sxNF07CisJdTggcmVzZXJ2ZWQxWzE0XTsKKwl1OCBiYl9jclsxNF07CisJdTggcGlkdmlkWzRdOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCByZXNlcnZlZDJbMTRdOworCXU4IGNyMTVfdmFsdWVzWzE0XTsKKwl1OCByZXNlcnZlZDNbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaHdjZmdfcmZtZCB7CisJdTggY3IyMF92YWx1ZXNbMTRdOworCXU4IGNyMjFfdmFsdWVzWzE0XTsKKwl1OCBiYl9jclsxNF07CisJdTggcGlkdmlkWzRdOworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCBsb3dfcG93ZXJfdmFsdWVzWzE0XTsKKwl1OCBub3JtYWxfcG93ZXJfdmFsdWVzWzE0XTsKKwl1OCByZXNlcnZlZDFbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgaHdjZmdfaW50ZXJzaWwgeworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBjcjMxX3ZhbHVlc1sxNF07CisJdTggY3I1OF92YWx1ZXNbMTRdOworCXU4IHBpZHZpZFs0XTsKKwl1OCByZWd1bGF0b3J5X2RvbWFpbjsKKwl1OCByZXNlcnZlZFsxXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGF0NzZfaHdjZmcgeworCXN0cnVjdCBod2NmZ19pbnRlcnNpbCBpOworCXN0cnVjdCBod2NmZ19yZm1kIHIzOworCXN0cnVjdCBod2NmZ19yNTA1IHI1OworfTsKKworI2RlZmluZSBXRVBfU01BTExfS0VZX0xFTgkoNDAgLyA4KQorI2RlZmluZSBXRVBfTEFSR0VfS0VZX0xFTgkoMTA0IC8gOCkKKyNkZWZpbmUgV0VQX0tFWVMJCSg0KQorCitzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyB7CisJdTggZXhjbHVkZV91bmVuY3J5cHRlZDsKKwl1OCBwcm9taXNjdW91c19tb2RlOworCXU4IHNob3J0X3JldHJ5X2xpbWl0OworCXU4IGVuY3J5cHRpb25fdHlwZTsKKwlfX2xlMTYgcnRzX3RocmVzaG9sZDsKKwlfX2xlMTYgZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQ7CS8qIDI1Ni4uMjM0NiAqLworCXU4IGJhc2ljX3JhdGVfc2V0WzRdOworCXU4IGF1dG9fcmF0ZV9mYWxsYmFjazsJLyogMCwxICovCisJdTggY2hhbm5lbDsKKwl1OCBwcml2YWN5X2ludm9rZWQ7CisJdTggd2VwX2RlZmF1bHRfa2V5X2lkOwkvKiAwLi4zICovCisJdTggY3VycmVudF9zc2lkWzMyXTsKKwl1OCB3ZXBfZGVmYXVsdF9rZXlfdmFsdWVbNF1bV0VQX0xBUkdFX0tFWV9MRU5dOworCXU4IHNzaWRfbGVuOworCXU4IHNob3J0X3ByZWFtYmxlOworCV9fbGUxNiBiZWFjb25fcGVyaW9kOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGF0NzZfY29tbWFuZCB7CisJdTggY21kOworCXU4IHJlc2VydmVkOworCV9fbGUxNiBzaXplOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBMZW5ndGggb2YgQXRtZWwtc3BlY2lmaWMgUnggaGVhZGVyIGJlZm9yZSA4MDIuMTEgZnJhbWUgKi8KKyNkZWZpbmUgQVQ3Nl9SWF9IRFJMRU4gb2Zmc2V0b2Yoc3RydWN0IGF0NzZfcnhfYnVmZmVyLCBwYWNrZXQpCisKK3N0cnVjdCBhdDc2X3J4X2J1ZmZlciB7CisJX19sZTE2IHdsZW5ndGg7CisJdTggcnhfcmF0ZTsKKwl1OCBuZXdic3M7CisJdTggZnJhZ21lbnRhdGlvbjsKKwl1OCByc3NpOworCXU4IGxpbmtfcXVhbGl0eTsKKwl1OCBub2lzZV9sZXZlbDsKKwlfX2xlMzIgcnhfdGltZTsKKwl1OCBwYWNrZXRbSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBMZW5ndGggb2YgQXRtZWwtc3BlY2lmaWMgVHggaGVhZGVyIGJlZm9yZSA4MDIuMTEgZnJhbWUgKi8KKyNkZWZpbmUgQVQ3Nl9UWF9IRFJMRU4gb2Zmc2V0b2Yoc3RydWN0IGF0NzZfdHhfYnVmZmVyLCBwYWNrZXQpCisKK3N0cnVjdCBhdDc2X3R4X2J1ZmZlciB7CisJX19sZTE2IHdsZW5ndGg7CisJdTggdHhfcmF0ZTsKKwl1OCBwYWRkaW5nOworCXU4IHJlc2VydmVkWzRdOworCXU4IHBhY2tldFtJRUVFODAyMTFfTUFYX0ZSQUdfVEhSRVNIT0xEXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIGRlZmluZXMgZm9yIHNjYW5fdHlwZSBiZWxvdyAqLworI2RlZmluZSBTQ0FOX1RZUEVfQUNUSVZFCTAKKyNkZWZpbmUgU0NBTl9UWVBFX1BBU1NJVkUJMQorCitzdHJ1Y3QgYXQ3Nl9yZXFfc2NhbiB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBzY2FuX3R5cGU7CisJdTggY2hhbm5lbDsKKwlfX2xlMTYgcHJvYmVfZGVsYXk7CisJX19sZTE2IG1pbl9jaGFubmVsX3RpbWU7CisJX19sZTE2IG1heF9jaGFubmVsX3RpbWU7CisJdTggZXNzaWRfc2l6ZTsKKwl1OCBpbnRlcm5hdGlvbmFsX3NjYW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9yZXFfaWJzcyB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBic3NfdHlwZTsKKwl1OCBjaGFubmVsOworCXU4IGVzc2lkX3NpemU7CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9yZXFfam9pbiB7CisJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IGVzc2lkWzMyXTsKKwl1OCBic3NfdHlwZTsKKwl1OCBjaGFubmVsOworCV9fbGUxNiB0aW1lb3V0OworCXU4IGVzc2lkX3NpemU7CisJdTggcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2V0X21pYl9idWZmZXIgeworCXU4IHR5cGU7CisJdTggc2l6ZTsKKwl1OCBpbmRleDsKKwl1OCByZXNlcnZlZDsKKwl1bmlvbiB7CisJCXU4IGJ5dGU7CisJCV9fbGUxNiB3b3JkOworCQl1OCBhZGRyW0VUSF9BTEVOXTsKKwl9IGRhdGE7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX2xvY2FsIHsKKwl1MTYgcmVzZXJ2ZWQwOworCXU4IGJlYWNvbl9lbmFibGU7CisJdTggdHhhdXRvcmF0ZV9mYWxsYmFjazsKKwl1OCByZXNlcnZlZDE7CisJdTggc3NpZF9zaXplOworCXU4IHByb21pc2N1b3VzX21vZGU7CisJdTE2IHJlc2VydmVkMjsKKwl1OCBwcmVhbWJsZV90eXBlOworCXUxNiByZXNlcnZlZDM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hY19hZGRyIHsKKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVzWzJdOwkJLyogPz8/ICovCisJdTggZ3JvdXBfYWRkcls0XVtFVEhfQUxFTl07CisJdTggZ3JvdXBfYWRkcl9zdGF0dXNbNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hYyB7CisJX19sZTMyIG1heF90eF9tc2R1X2xpZmV0aW1lOworCV9fbGUzMiBtYXhfcnhfbGlmZXRpbWU7CisJX19sZTE2IGZyYWdfdGhyZXNob2xkOworCV9fbGUxNiBydHNfdGhyZXNob2xkOworCV9fbGUxNiBjd21pbjsKKwlfX2xlMTYgY3dtYXg7CisJdTggc2hvcnRfcmV0cnlfdGltZTsKKwl1OCBsb25nX3JldHJ5X3RpbWU7CisJdTggc2Nhbl90eXBlOwkJLyogYWN0aXZlIG9yIHBhc3NpdmUgKi8KKwl1OCBzY2FuX2NoYW5uZWw7CisJX19sZTE2IHByb2JlX2RlbGF5OwkvKiBkZWxheSBiZWZvcmUgUHJvYmVSZXEgaW4gYWN0aXZlIHNjYW4sIFJPICovCisJX19sZTE2IG1pbl9jaGFubmVsX3RpbWU7CisJX19sZTE2IG1heF9jaGFubmVsX3RpbWU7CisJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwl1OCBkZXNpcmVkX3NzaWRbMzJdOworCXU4IGRlc2lyZWRfYnNzaWRbRVRIX0FMRU5dOworCXU4IGRlc2lyZWRfYnNzdHlwZTsJLyogYWQtaG9jIG9yIGluZnJhc3RydWN0dXJlICovCisJdTggcmVzZXJ2ZWQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tYWNfbWdtdCB7CisJX19sZTE2IGJlYWNvbl9wZXJpb2Q7CisJX19sZTE2IENGUF9tYXhfZHVyYXRpb247CisJX19sZTE2IG1lZGl1bV9vY2N1cGFuY3lfbGltaXQ7CisJX19sZTE2IHN0YXRpb25faWQ7CS8qIGFzc29jIGlkICovCisJX19sZTE2IEFUSU1fd2luZG93OworCXU4IENGUF9tb2RlOworCXU4IHByaXZhY3lfb3B0aW9uX2ltcGxlbWVudGVkOworCXU4IERUSU1fcGVyaW9kOworCXU4IENGUF9wZXJpb2Q7CisJdTggY3VycmVudF9ic3NpZFtFVEhfQUxFTl07CisJdTggY3VycmVudF9lc3NpZFszMl07CisJdTggY3VycmVudF9ic3NfdHlwZTsKKwl1OCBwb3dlcl9tZ210X21vZGU7CisJLyogcmZtZCBhbmQgNTA1ICovCisJdTggaWJzc19jaGFuZ2U7CisJdTggcmVzOworCXU4IG11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2ltcGxlbWVudGVkOworCXU4IG11bHRpX2RvbWFpbl9jYXBhYmlsaXR5X2VuYWJsZWQ7CisJdTggY291bnRyeV9zdHJpbmdbM107CisJdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX21hY193ZXAgeworCXU4IHByaXZhY3lfaW52b2tlZDsJLyogMCBkaXNhYmxlIGVuY3IuLCAxIGVuYWJsZSBlbmNyICovCisJdTggd2VwX2RlZmF1bHRfa2V5X2lkOworCXU4IHdlcF9rZXlfbWFwcGluZ19sZW47CisJdTggZXhjbHVkZV91bmVuY3J5cHRlZDsKKwlfX2xlMzIgd2VwX2ljdl9lcnJvcl9jb3VudDsKKwlfX2xlMzIgd2VwX2V4Y2x1ZGVkX2NvdW50OworCXU4IHdlcF9kZWZhdWx0X2tleXZhbHVlW1dFUF9LRVlTXVtXRVBfTEFSR0VfS0VZX0xFTl07CisJdTggZW5jcnlwdGlvbl9sZXZlbDsJLyogMSBmb3IgNDBiaXQsIDIgZm9yIDEwNGJpdCBlbmNyeXB0aW9uICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX3BoeSB7CisJX19sZTMyIGVkX3RocmVzaG9sZDsKKworCV9fbGUxNiBzbG90X3RpbWU7CisJX19sZTE2IHNpZnNfdGltZTsKKwlfX2xlMTYgcHJlYW1ibGVfbGVuZ3RoOworCV9fbGUxNiBwbGNwX2hlYWRlcl9sZW5ndGg7CisJX19sZTE2IG1wZHVfbWF4X2xlbmd0aDsKKwlfX2xlMTYgY2NhX21vZGVfc3VwcG9ydGVkOworCisJdTggb3BlcmF0aW9uX3JhdGVfc2V0WzRdOworCXU4IGNoYW5uZWxfaWQ7CisJdTggY3VycmVudF9jY2FfbW9kZTsKKwl1OCBwaHlfdHlwZTsKKwl1OCBjdXJyZW50X3JlZ19kb21haW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbWliX2Z3X3ZlcnNpb24geworCXU4IG1ham9yOworCXU4IG1pbm9yOworCXU4IHBhdGNoOworCXU4IGJ1aWxkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG1pYl9tZG9tYWluIHsKKwl1OCB0eF9wb3dlcmxldmVsWzE0XTsKKwl1OCBjaGFubmVsX2xpc3RbMTRdOwkvKiAwIGZvciBpbnZhbGlkIGNoYW5uZWxzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYXQ3Nl9md19oZWFkZXIgeworCV9fbGUzMiBjcmM7CQkvKiBDUkMzMiBvZiB0aGUgd2hvbGUgaW1hZ2UgKi8KKwlfX2xlMzIgYm9hcmRfdHlwZTsJLyogZmlybXdhcmUgY29tcGF0aWJpbGl0eSBjb2RlICovCisJdTggYnVpbGQ7CQkvKiBmaXJtd2FyZSBidWlsZCBudW1iZXIgKi8KKwl1OCBwYXRjaDsJCS8qIGZpcm13YXJlIHBhdGNoIGxldmVsICovCisJdTggbWlub3I7CQkvKiBmaXJtd2FyZSBtaW5vciB2ZXJzaW9uICovCisJdTggbWFqb3I7CQkvKiBmaXJtd2FyZSBtYWpvciB2ZXJzaW9uICovCisJX19sZTMyIHN0cl9vZmZzZXQ7CS8qIG9mZnNldCBvZiB0aGUgY29weXJpZ2h0IHN0cmluZyAqLworCV9fbGUzMiBpbnRfZndfb2Zmc2V0OwkvKiBpbnRlcm5hbCBmaXJtd2FyZSBpbWFnZSBvZmZzZXQgKi8KKwlfX2xlMzIgaW50X2Z3X2xlbjsJLyogaW50ZXJuYWwgZmlybXdhcmUgaW1hZ2UgbGVuZ3RoICovCisJX19sZTMyIGV4dF9md19vZmZzZXQ7CS8qIGV4dGVybmFsIGZpcm13YXJlIGltYWdlIG9mZnNldCAqLworCV9fbGUzMiBleHRfZndfbGVuOwkvKiBleHRlcm5hbCBmaXJtd2FyZSBpbWFnZSBsZW5ndGggKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIGEgZGVzY3JpcHRpb24gb2YgYSByZWd1bGF0b3J5IGRvbWFpbiBhbmQgdGhlIGFsbG93ZWQgY2hhbm5lbHMgKi8KK3N0cnVjdCByZWdfZG9tYWluIHsKKwl1MTYgY29kZTsKKwljaGFyIGNvbnN0ICpuYW1lOworCXUzMiBjaGFubmVsX21hcDsJLyogaWYgYml0IE4gaXMgc2V0LCBjaGFubmVsIChOKzEpIGlzIGFsbG93ZWQgKi8KK307CisKKy8qIERhdGEgZm9yIG9uZSBsb2FkZWQgZmlybXdhcmUgZmlsZSAqLworc3RydWN0IGZ3ZW50cnkgeworCWNvbnN0IGNoYXIgKmNvbnN0IGZ3bmFtZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCBleHRmd19zaXplOworCWludCBpbnRmd19zaXplOworCS8qIHBvaW50ZXIgdG8gbG9hZGVkIGZpcm13YXJlLCBubyBuZWVkIHRvIGZyZWUgKi8KKwl1OCAqZXh0Znc7CQkvKiBleHRlcm5hbCBmaXJtd2FyZSwgZXh0Zndfc2l6ZSBieXRlcyBsb25nICovCisJdTggKmludGZ3OwkJLyogaW50ZXJuYWwgZmlybXdhcmUsIGludGZ3X3NpemUgYnl0ZXMgbG9uZyAqLworCWVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlOwkvKiBib2FyZCB0eXBlICovCisJc3RydWN0IG1pYl9md192ZXJzaW9uIGZ3X3ZlcnNpb247CisJaW50IGxvYWRlZDsJCS8qIExvYWRlZCBhbmQgcGFyc2VkIHN1Y2Nlc3NmdWxseSAqLworfTsKKworc3RydWN0IGF0NzZfcHJpdiB7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CS8qIFVTQiBkZXZpY2UgcG9pbnRlciAqLworCisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjsJLyogc2tidWZmIGZvciByZWNlaXZpbmcgZGF0YSAqLworCXN0cnVjdCBza19idWZmICp0eF9za2I7CS8qIHNrYnVmZiBmb3IgdHJhbnNtaXR0aW5nIGRhdGEgKi8KKwl2b2lkICpidWxrX291dF9idWZmZXI7CS8qIGJ1ZmZlciBmb3Igc2VuZGluZyBkYXRhICovCisKKwlzdHJ1Y3QgdXJiICp0eF91cmI7CS8qIFVSQiBmb3Igc2VuZGluZyBkYXRhICovCisJc3RydWN0IHVyYiAqcnhfdXJiOwkvKiBVUkIgZm9yIHJlY2VpdmluZyBkYXRhICovCisKKwl1bnNpZ25lZCBpbnQgdHhfcGlwZTsJLyogYnVsayBvdXQgcGlwZSAqLworCXVuc2lnbmVkIGludCByeF9waXBlOwkvKiBidWxrIGluIHBpcGUgKi8KKworCXN0cnVjdCBtdXRleCBtdHg7CS8qIGxvY2tzIHRoaXMgc3RydWN0dXJlICovCisKKwkvKiB3b3JrIHF1ZXVlcyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3NldF9wcm9taXNjOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3N1Ym1pdF9yeDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGR3b3JrX2h3X3NjYW47CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcnhfdGFza2xldDsKKworCS8qIHRoZSBXRVAgc3R1ZmYgKi8KKwlpbnQgd2VwX2VuYWJsZWQ7CS8qIDEgaWYgV0VQIGlzIGVuYWJsZWQgKi8KKwlpbnQgd2VwX2tleV9pZDsJCS8qIGtleSBpZCB0byBiZSB1c2VkICovCisJdTggd2VwX2tleXNbV0VQX0tFWVNdW1dFUF9MQVJHRV9LRVlfTEVOXTsJLyogV0VQIGtleXMgKi8KKwl1OCB3ZXBfa2V5c19sZW5bV0VQX0tFWVNdOwkvKiBsZW5ndGggb2YgV0VQIGtleXMgKi8KKworCWludCBjaGFubmVsOworCWludCBpd19tb2RlOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwl1OCBlc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CisJaW50IGVzc2lkX3NpemU7CisJaW50IHJhZGlvX29uOworCWludCBwcm9taXNjOworCisJaW50IHByZWFtYmxlX3R5cGU7CS8qIDAgLSBsb25nLCAxIC0gc2hvcnQsIDIgLSBhdXRvICovCisJaW50IGF1dGhfbW9kZTsJCS8qIGF1dGhlbnRpY2F0aW9uIHR5cGU6IDAgb3BlbiwgMSBzaGFyZWQga2V5ICovCisJaW50IHR4cmF0ZTsJCS8qIDAsMSwyLDMgPSAxLDIsNS41LDExIE1icHMsIDQgaXMgYXV0byAqLworCWludCBmcmFnX3RocmVzaG9sZDsJLyogdGhyZXNob2xkIGZvciBmcmFnbWVudGF0aW9uIG9mIHR4IHBhY2tldHMgKi8KKwlpbnQgcnRzX3RocmVzaG9sZDsJLyogdGhyZXNob2xkIGZvciBSVFMgbWVjaGFuaXNtICovCisJaW50IHNob3J0X3JldHJ5X2xpbWl0OworCisJaW50IHNjYW5fbWluX3RpbWU7CS8qIHNjYW4gbWluIGNoYW5uZWwgdGltZSAqLworCWludCBzY2FuX21heF90aW1lOwkvKiBzY2FuIG1heCBjaGFubmVsIHRpbWUgKi8KKwlpbnQgc2Nhbl9tb2RlOwkJLyogU0NBTl9UWVBFX0FDVElWRSwgU0NBTl9UWVBFX1BBU1NJVkUgKi8KKwlpbnQgc2Nhbl9uZWVkX2FueTsJLyogaWYgc2V0LCBuZWVkIHRvIHNjYW4gZm9yIGFueSBFU1NJRCAqLworCisJdTE2IGFzc29jX2lkOwkJLyogY3VycmVudCBhc3NvY2lhdGlvbiBJRCwgaWYgYXNzb2NpYXRlZCAqLworCisJdTggcG1fbW9kZTsJCS8qIHBvd2VyIG1hbmFnZW1lbnQgbW9kZSAqLworCXUzMiBwbV9wZXJpb2Q7CQkvKiBwb3dlciBtYW5hZ2VtZW50IHBlcmlvZCBpbiBtaWNyb3NlY29uZHMgKi8KKworCXN0cnVjdCByZWdfZG9tYWluIGNvbnN0ICpkb21haW47CS8qIHJlZyBkb21haW4gZGVzY3JpcHRpb24gKi8KKworCS8qIFRoZXNlIGZpZWxkcyBjb250YWluIEhXIGNvbmZpZyBwcm92aWRlZCBieSB0aGUgZGV2aWNlIChub3QgYWxsIG9mCisJICogdGhlc2UgZmllbGRzIGFyZSB1c2VkIGJ5IGFsbCBib2FyZCB0eXBlcykgKi8KKwl1OCBtYWNfYWRkcltFVEhfQUxFTl07CisJdTggcmVndWxhdG9yeV9kb21haW47CisKKwlzdHJ1Y3QgYXQ3Nl9jYXJkX2NvbmZpZyBjYXJkX2NvbmZpZzsKKworCWVudW0gYm9hcmRfdHlwZSBib2FyZF90eXBlOworCXN0cnVjdCBtaWJfZndfdmVyc2lvbiBmd192ZXJzaW9uOworCisJdW5zaWduZWQgaW50IGRldmljZV91bnBsdWdnZWQ6MTsKKwl1bnNpZ25lZCBpbnQgbmV0ZGV2X3JlZ2lzdGVyZWQ6MTsKKwlzdHJ1Y3Qgc2V0X21pYl9idWZmZXIgbWliX2J1ZjsJLyogZ2xvYmFsIGJ1ZmZlciBmb3Igc2V0X21pYiBjYWxscyAqLworCisJaW50IGJlYWNvbl9wZXJpb2Q7CS8qIHBlcmlvZCBvZiBtZ210IGJlYWNvbnMsIEt1cyAqLworCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJaW50IG1hYzgwMjExX3JlZ2lzdGVyZWQ7Cit9OworCisjZGVmaW5lIEFUNzZfU1VQUE9SVEVEX0ZJTFRFUlMgRklGX1BST01JU0NfSU5fQlNTCisKKyNkZWZpbmUgU0NBTl9QT0xMX0lOVEVSVkFMCShIWiAvIDQpCisKKyNkZWZpbmUgQ01EX0NPTVBMRVRJT05fVElNRU9VVAkoNSAqIEhaKQorCisjZGVmaW5lIERFRl9SVFNfVEhSRVNIT0xECTE1MzYKKyNkZWZpbmUgREVGX0ZSQUdfVEhSRVNIT0xECTE1MzYKKyNkZWZpbmUgREVGX1NIT1JUX1JFVFJZX0xJTUlUCTgKKyNkZWZpbmUgREVGX0NIQU5ORUwJCTEwCisjZGVmaW5lIERFRl9TQ0FOX01JTl9USU1FCTEwCisjZGVmaW5lIERFRl9TQ0FOX01BWF9USU1FCTEyMAorCisvKiB0aGUgbWF4IHBhZGRpbmcgc2l6ZSBmb3IgdHggaW4gYnl0ZXMgKHNlZSBjYWxjX3BhZGRpbmcpICovCisjZGVmaW5lIE1BWF9QQURESU5HX1NJWkUJNTMKKworI2VuZGlmCQkJCS8qIF9BVDc2X1VTQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCmluZGV4IDcxOWNmYWUuLjg0YTc0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL01ha2VmaWxlCkBAIC0xMCw1ICsxMCw2IEBACiBhdGg1ay15CQkJCSs9IHJlc2V0Lm8KIGF0aDVrLXkJCQkJKz0gYXR0YWNoLm8KIGF0aDVrLXkJCQkJKz0gYmFzZS5vCithdGg1ay15CQkJCSs9IGxlZC5vCiBhdGg1ay0kKENPTkZJR19BVEg1S19ERUJVRykJKz0gZGVidWcubwogb2JqLSQoQ09ORklHX0FUSDVLKQkJKz0gYXRoNWsubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXRoNWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2F0aDVrLmgKaW5kZXggMTgzZmZjOC4uMGI2MTZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXRoNWsuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdGg1ay5oCkBAIC0xNjUsOSArMTY1LDYgQEAKICNkZWZpbmUgQVI1S19JTklfVkFMX1hSCQkJMAogI2RlZmluZSBBUjVLX0lOSV9WQUxfTUFYCQk1CiAKLSNkZWZpbmUgQVI1S19SRjUxMTFfSU5JX1JGX01BWF9CQU5LUwlBUjVLX01BWF9SRl9CQU5LUwotI2RlZmluZSBBUjVLX1JGNTExMl9JTklfUkZfTUFYX0JBTktTCUFSNUtfTUFYX1JGX0JBTktTCi0KIC8qIFVzZWQgZm9yIEJTU0lEIGV0YyBtYW5pcHVsYXRpb24gKi8KICNkZWZpbmUgQVI1S19MT1dfSUQoX2EpKAkJCQlcCiAoX2EpWzBdIHwgKF9hKVsxXSA8PCA4IHwgKF9hKVsyXSA8PCAxNiB8IChfYSlbM10gPDwgMjQJXApAQCAtMjA3LDkgKzIwNCw5IEBACiAjZGVmaW5lIEFSNUtfVFVORV9DV01BWF8xMUIJCQkxMDIzCiAjZGVmaW5lIEFSNUtfVFVORV9DV01BWF9YUgkJCTcKICNkZWZpbmUgQVI1S19UVU5FX05PSVNFX0ZMT09SCQkJLTcyCi0jZGVmaW5lIEFSNUtfVFVORV9NQVhfVFhQT1dFUgkJCTYwCi0jZGVmaW5lIEFSNUtfVFVORV9ERUZBVUxUX1RYUE9XRVIJCTMwCi0jZGVmaW5lIEFSNUtfVFVORV9UUENfVFhQT1dFUgkJCXRydWUKKyNkZWZpbmUgQVI1S19UVU5FX01BWF9UWFBPV0VSCQkJNjMKKyNkZWZpbmUgQVI1S19UVU5FX0RFRkFVTFRfVFhQT1dFUgkJMjUKKyNkZWZpbmUgQVI1S19UVU5FX1RQQ19UWFBPV0VSCQkJZmFsc2UKICNkZWZpbmUgQVI1S19UVU5FX0FOVF9ESVZFUlNJVFkJCQl0cnVlCiAjZGVmaW5lIEFSNUtfVFVORV9IV1RYVFJJRVMJCQk0CiAKQEAgLTIyNSw2ICsyMjIsNyBAQAogI2VuZGlmCiAKIC8qIEluaXRpYWwgdmFsdWVzICovCisjZGVmaW5lCUFSNUtfSU5JVF9DWUNSU1NJX1RIUjEJCQkyCiAjZGVmaW5lIEFSNUtfSU5JVF9UWF9MQVRFTkNZCQkJNTAyCiAjZGVmaW5lIEFSNUtfSU5JVF9VU0VDCQkJCTM5CiAjZGVmaW5lIEFSNUtfSU5JVF9VU0VDX1RVUkJPCQkJNzkKQEAgLTMxNiw3ICszMTQsNyBAQAogI2RlZmluZSBBUjVLX1NSRVZfQVI1NDI0CTB4OTAgLyogQ29uZG9yICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTMJMHhhNCAvKiBFYWdsZSBsaXRlICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTQJMHhhMCAvKiBFYWdsZSAqLwotI2RlZmluZSBBUjVLX1NSRVZfQVIyNDE1CTB4YjAgLyogQ29icmEgKi8KKyNkZWZpbmUgQVI1S19TUkVWX0FSMjQxNQkweGIwIC8qIFRhbG9uICovCiAjZGVmaW5lIEFSNUtfU1JFVl9BUjU0MTYJMHhjMCAvKiBQQ0ktRSAqLwogI2RlZmluZSBBUjVLX1NSRVZfQVI1NDE4CTB4Y2EgLyogUENJLUUgKi8KICNkZWZpbmUgQVI1S19TUkVWX0FSMjQyNQkweGUwIC8qIFN3YW4gKi8KQEAgLTMzNCw3ICszMzIsNyBAQAogI2RlZmluZQlBUjVLX1NSRVZfUkFEXzIxMTJCCTB4NDYKICNkZWZpbmUgQVI1S19TUkVWX1JBRF8yNDEzCTB4NTAKICNkZWZpbmUgQVI1S19TUkVWX1JBRF81NDEzCTB4NjAKLSNkZWZpbmUgQVI1S19TUkVWX1JBRF8yMzE2CTB4NzAKKyNkZWZpbmUgQVI1S19TUkVWX1JBRF8yMzE2CTB4NzAgLyogQ29icmEgU29DICovCiAjZGVmaW5lIEFSNUtfU1JFVl9SQURfMjMxNwkweDgwCiAjZGVmaW5lIEFSNUtfU1JFVl9SQURfNTQyNAkweGEwIC8qIE1vc3RseSBzYW1lIGFzIDU0MTMgKi8KICNkZWZpbmUgQVI1S19TUkVWX1JBRF8yNDI1CTB4YTIKQEAgLTM0Miw3ICszNDAsOCBAQAogCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTIxMQkweDMwCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTIxMgkweDQxCi0jZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjExMkIJMHg0MworI2RlZmluZQlBUjVLX1NSRVZfUEhZXzUyMTJBCTB4NDIKKyNkZWZpbmUgQVI1S19TUkVWX1BIWV81MjEyQgkweDQzCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjQxMwkweDQ1CiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfNTQxMwkweDYxCiAjZGVmaW5lIEFSNUtfU1JFVl9QSFlfMjQyNQkweDcwCkBAIC01NTIsMTEgKzU1MSwxMSBAQAogICovCiAjZGVmaW5lIEFSNUtfVFhQT1dFUl9PRkRNKF9yLCBfdikJKAkJCVwKIAkoKDAgJiAxKSA8PCAoKF92KSArIDYpKSB8CQkJCVwKLQkoKChhaC0+YWhfdHhwb3dlci50eHBfcmF0ZXNbKF9yKV0pICYgMHgzZikgPDwgKF92KSkJXAorCSgoKGFoLT5haF90eHBvd2VyLnR4cF9yYXRlc19wb3dlcl90YWJsZVsoX3IpXSkgJiAweDNmKSA8PCAoX3YpKQlcCiApCiAKICNkZWZpbmUgQVI1S19UWFBPV0VSX0NDSyhfciwgX3YpCSgJCQlcCi0JKGFoLT5haF90eHBvd2VyLnR4cF9yYXRlc1soX3IpXSAmIDB4M2YpIDw8IChfdikJXAorCShhaC0+YWhfdHhwb3dlci50eHBfcmF0ZXNfcG93ZXJfdGFibGVbKF9yKV0gJiAweDNmKSA8PCAoX3YpCVwKICkKIAogLyoKQEAgLTY0OSw0OSArNjQ4LDIxIEBACiAKIGVudW0gYXRoNWtfcmZnYWluIHsKIAlBUjVLX1JGR0FJTl9JTkFDVElWRSA9IDAsCisJQVI1S19SRkdBSU5fQUNUSVZFLAogCUFSNUtfUkZHQUlOX1JFQURfUkVRVUVTVEVELAogCUFSNUtfUkZHQUlOX05FRURfQ0hBTkdFLAogfTsKIAotI2RlZmluZSBBUjVLX0dBSU5fQ1JOX0ZJWF9CSVRTXzUxMTEJCTQKLSNkZWZpbmUgQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTEyCQk3Ci0jZGVmaW5lIEFSNUtfR0FJTl9DUk5fTUFYX0ZJWF9CSVRTCQlBUjVLX0dBSU5fQ1JOX0ZJWF9CSVRTXzUxMTIKLSNkZWZpbmUgQVI1S19HQUlOX0RZTl9BREpVU1RfSElfTUFSR0lOCQkxNQotI2RlZmluZSBBUjVLX0dBSU5fRFlOX0FESlVTVF9MT19NQVJHSU4JCTIwCi0jZGVmaW5lIEFSNUtfR0FJTl9DQ0tfUFJPQkVfQ09SUgkJNQotI2RlZmluZSBBUjVLX0dBSU5fQ0NLX09GRE1fR0FJTl9ERUxUQQkJMTUKLSNkZWZpbmUgQVI1S19HQUlOX1NURVBfQ09VTlQJCQkxMAotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fVFhfQ0xJUAkJCTAKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzkwCQkJMQotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fUERfODQJCQkyCi0jZGVmaW5lIEFSNUtfR0FJTl9QQVJBTV9HQUlOX1NFTAkJMwotI2RlZmluZSBBUjVLX0dBSU5fUEFSQU1fTUlYX09STgkJCTAKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzOAkJCTEKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzNwkJCTIKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzNgkJCTMKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzMgkJCTQKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzMQkJCTUKLSNkZWZpbmUgQVI1S19HQUlOX1BBUkFNX1BEXzEzMAkJCTYKLSNkZWZpbmUgQVI1S19HQUlOX0NIRUNLX0FESlVTVChfZykgCQlcCi0JKChfZyktPmdfY3VycmVudCA8PSAoX2cpLT5nX2xvdyB8fCAoX2cpLT5nX2N1cnJlbnQgPj0gKF9nKS0+Z19oaWdoKQotCi1zdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcCB7Ci0JczE2CQkJCWdvc19wYXJhbVtBUjVLX0dBSU5fQ1JOX01BWF9GSVhfQklUU107Ci0JczMyCQkJCWdvc19nYWluOwotfTsKLQogc3RydWN0IGF0aDVrX2dhaW4gewotCXUzMgkJCWdfc3RlcF9pZHg7Ci0JdTMyCQkJZ19jdXJyZW50OwotCXUzMgkJCWdfdGFyZ2V0OwotCXUzMgkJCWdfbG93OwotCXUzMgkJCWdfaGlnaDsKLQl1MzIJCQlnX2ZfY29ycjsKLQl1MzIJCQlnX2FjdGl2ZTsKLQljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcAkqZ19zdGVwOworCXU4CQkJZ19zdGVwX2lkeDsKKwl1OAkJCWdfY3VycmVudDsKKwl1OAkJCWdfdGFyZ2V0OworCXU4CQkJZ19sb3c7CisJdTgJCQlnX2hpZ2g7CisJdTgJCQlnX2ZfY29ycjsKKwl1OAkJCWdfc3RhdGU7CiB9OwogCi0KIC8qKioqKioqKioqKioqKioqKioqKlwKICAgQ09NTU9OIERFRklOSVRJT05TCiBcKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMDUzLDcgKzEwMjQsNiBAQAogCWJvb2wJCQlhaF9ydW5uaW5nOwogCWJvb2wJCQlhaF9zaW5nbGVfY2hpcDsKIAlib29sCQkJYWhfY29tYmluZWRfbWljOwotCWVudW0gYXRoNWtfcmZnYWluCWFoX3JmX2dhaW47CiAKIAl1MzIJCQlhaF9tYWNfc3JldjsKIAl1MTYJCQlhaF9tYWNfdmVyc2lvbjsKQEAgLTEwNjEsNyArMTAzMSw2IEBACiAJdTE2CQkJYWhfcGh5X3JldmlzaW9uOwogCXUxNgkJCWFoX3JhZGlvXzVnaHpfcmV2aXNpb247CiAJdTE2CQkJYWhfcmFkaW9fMmdoel9yZXZpc2lvbjsKLQl1MzIJCQlhaF9waHlfc3BlbmRpbmc7CiAKIAllbnVtIGF0aDVrX3ZlcnNpb24JYWhfdmVyc2lvbjsKIAllbnVtIGF0aDVrX3JhZGlvCWFoX3JhZGlvOwpAQCAtMTExMiwxNiArMTA4MSwyOSBAQAogCXUzMgkJCWFoX3R4cV9pc3I7CiAJdTMyCQkJKmFoX3JmX2JhbmtzOwogCXNpemVfdAkJCWFoX3JmX2JhbmtzX3NpemU7CisJc2l6ZV90CQkJYWhfcmZfcmVnc19jb3VudDsKIAlzdHJ1Y3QgYXRoNWtfZ2FpbglhaF9nYWluOwotCXUzMgkJCWFoX29mZnNldFtBUjVLX01BWF9SRl9CQU5LU107CisJdTgJCQlhaF9vZmZzZXRbQVI1S19NQVhfUkZfQkFOS1NdOworCiAKIAlzdHJ1Y3QgewotCQl1MTYJCXR4cF9wY2RhY1tBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFXTsKLQkJdTE2CQl0eHBfcmF0ZXNbQVI1S19NQVhfUkFURVNdOwotCQlzMTYJCXR4cF9taW47Ci0JCXMxNgkJdHhwX21heDsKKwkJLyogVGVtcG9yYXJ5IHRhYmxlcyB1c2VkIGZvciBpbnRlcnBvbGF0aW9uICovCisJCXU4CQl0bXBMW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdCisJCQkJCVtBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFXTsKKwkJdTgJCXRtcFJbQVI1S19FRVBST01fTl9QRF9HQUlOU10KKwkJCQkJW0FSNUtfRUVQUk9NX1BPV0VSX1RBQkxFX1NJWkVdOworCQl1OAkJdHhwX3BkX3RhYmxlW0FSNUtfRUVQUk9NX1BPV0VSX1RBQkxFX1NJWkUgKiAyXTsKKwkJdTE2CQl0eHBfcmF0ZXNfcG93ZXJfdGFibGVbQVI1S19NQVhfUkFURVNdOworCQl1OAkJdHhwX21pbl9pZHg7CiAJCWJvb2wJCXR4cF90cGM7CisJCS8qIFZhbHVlcyBpbiAwLjI1ZEIgdW5pdHMgKi8KKwkJczE2CQl0eHBfbWluX3B3cjsKKwkJczE2CQl0eHBfbWF4X3B3cjsKKwkJczE2CQl0eHBfb2Zmc2V0OwogCQlzMTYJCXR4cF9vZmRtOworCQkvKiBWYWx1ZXMgaW4gZEIgdW5pdHMgKi8KKwkJczE2CQl0eHBfY2NrX29mZG1fcHdyX2RlbHRhOworCQlzMTYJCXR4cF9jY2tfb2ZkbV9nYWluZl9kZWx0YTsKIAl9IGFoX3R4cG93ZXI7CiAKIAlzdHJ1Y3QgewpAQCAtMTE1OSw2ICsxMTQxLDEyIEBACiBleHRlcm4gc3RydWN0IGF0aDVrX2h3ICphdGg1a19od19hdHRhY2goc3RydWN0IGF0aDVrX3NvZnRjICpzYywgdTggbWFjX3ZlcnNpb24pOwogZXh0ZXJuIHZvaWQgYXRoNWtfaHdfZGV0YWNoKHN0cnVjdCBhdGg1a19odyAqYWgpOwogCisvKiBMRUQgZnVuY3Rpb25zICovCitleHRlcm4gaW50IGF0aDVrX2luaXRfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKK2V4dGVybiB2b2lkIGF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7CitleHRlcm4gdm9pZCBhdGg1a19sZWRfb2ZmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOworCiAvKiBSZXNldCBGdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgYXRoNWtfaHdfbmljX3dha2V1cChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgZmxhZ3MsIGJvb2wgaW5pdGlhbCk7CiBleHRlcm4gaW50IGF0aDVrX2h3X3Jlc2V0KHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gbmw4MDIxMV9pZnR5cGUgb3BfbW9kZSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCBib29sIGNoYW5nZV9jaGFubmVsKTsKQEAgLTExODUsNyArMTE3Myw5IEBACiAKIC8qIEVFUFJPTSBhY2Nlc3MgZnVuY3Rpb25zICovCiBleHRlcm4gaW50IGF0aDVrX2VlcHJvbV9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgpOworZXh0ZXJuIHZvaWQgYXRoNWtfZWVwcm9tX2RldGFjaChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIGV4dGVybiBpbnQgYXRoNWtfZWVwcm9tX3JlYWRfbWFjKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpOworZXh0ZXJuIGJvb2wgYXRoNWtfZWVwcm9tX2lzX2hiNjMoc3RydWN0IGF0aDVrX2h3ICphaCk7CiAKIC8qIFByb3RvY29sIENvbnRyb2wgVW5pdCBGdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgYXRoNWtfaHdfc2V0X29wbW9kZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKQEAgLTEyMDYsNiArMTE5Niw3IEBACiAvKiBCZWFjb24gY29udHJvbCBmdW5jdGlvbnMgKi8KIGV4dGVybiB1MzIgYXRoNWtfaHdfZ2V0X3RzZjMyKHN0cnVjdCBhdGg1a19odyAqYWgpOwogZXh0ZXJuIHU2NCBhdGg1a19od19nZXRfdHNmNjQoc3RydWN0IGF0aDVrX2h3ICphaCk7CitleHRlcm4gdm9pZCBhdGg1a19od19zZXRfdHNmNjQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTY0IHRzZjY0KTsKIGV4dGVybiB2b2lkIGF0aDVrX2h3X3Jlc2V0X3RzZihzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIGV4dGVybiB2b2lkIGF0aDVrX2h3X2luaXRfYmVhY29uKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBuZXh0X2JlYWNvbiwgdTMyIGludGVydmFsKTsKICNpZiAwCkBAIC0xMjYwLDEwICsxMjUxLDEyIEBACiBleHRlcm4gaW50IGF0aDVrX2h3X3dyaXRlX2luaXR2YWxzKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IG1vZGUsIGJvb2wgY2hhbmdlX2NoYW5uZWwpOwogCiAvKiBJbml0aWFsaXplIFJGICovCi1leHRlcm4gaW50IGF0aDVrX2h3X3JmcmVncyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHVuc2lnbmVkIGludCBtb2RlKTsKLWV4dGVybiBpbnQgYXRoNWtfaHdfcmZnYWluKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBmcmVxKTsKLWV4dGVybiBlbnVtIGF0aDVrX3JmZ2FpbiBhdGg1a19od19nZXRfcmZfZ2FpbihzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKLWV4dGVybiBpbnQgYXRoNWtfaHdfc2V0X3JmZ2Fpbl9vcHQoc3RydWN0IGF0aDVrX2h3ICphaCk7CitleHRlcm4gaW50IGF0aDVrX2h3X3JmcmVnc19pbml0KHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCXVuc2lnbmVkIGludCBtb2RlKTsKK2V4dGVybiBpbnQgYXRoNWtfaHdfcmZnYWluX2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IGZyZXEpOworZXh0ZXJuIGVudW0gYXRoNWtfcmZnYWluIGF0aDVrX2h3X2dhaW5mX2NhbGlicmF0ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKK2V4dGVybiBpbnQgYXRoNWtfaHdfcmZnYWluX29wdF9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgpOwogLyogUEhZL1JGIGNoYW5uZWwgZnVuY3Rpb25zICovCiBleHRlcm4gYm9vbCBhdGg1a19jaGFubmVsX29rKHN0cnVjdCBhdGg1a19odyAqYWgsIHUxNiBmcmVxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogZXh0ZXJuIGludCBhdGg1a19od19jaGFubmVsKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCk7CkBAIC0xMjc2LDggKzEyNjksOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGg1a19od19nZXRfZGVmX2FudGVubmEoc3RydWN0IGF0aDVrX2h3ICphaCk7CiBleHRlcm4gaW50IGF0aDVrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGg1a19odyAqYWgpOwogLyogVFggcG93ZXIgc2V0dXAgKi8KLWV4dGVybiBpbnQgYXRoNWtfaHdfdHhwb3dlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHVuc2lnbmVkIGludCB0eHBvd2VyKTsKLWV4dGVybiBpbnQgYXRoNWtfaHdfc2V0X3R4cG93ZXJfbGltaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHBvd2VyKTsKK2V4dGVybiBpbnQgYXRoNWtfaHdfdHhwb3dlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHU4IGVlX21vZGUsIHU4IHR4cG93ZXIpOworZXh0ZXJuIGludCBhdGg1a19od19zZXRfdHhwb3dlcl9saW1pdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBlZV9tb2RlLCB1OCB0eHBvd2VyKTsKIAogLyoKICAqIEZ1bmN0aW9ucyB1c2VkIGludGVybmFseQpAQCAtMTI4NSw2ICsxMjc4LDcgQEAKIAogLyoKICAqIFRyYW5zbGF0ZSB1c2VjIHRvIGh3IGNsb2NrIHVuaXRzCisgKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZQogICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGg1a19od19odG9jbG9jayh1bnNpZ25lZCBpbnQgdXNlYywgYm9vbCB0dXJibykKIHsKQEAgLTEyOTMsNiArMTI4Nyw3IEBACiAKIC8qCiAgKiBUcmFuc2xhdGUgaHcgY2xvY2sgdW5pdHMgdG8gdXNlYworICogVE9ETzogSGFsZi9xdWFydGVyIHJhdGUKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYXRoNWtfaHdfY2xvY2t0b2godW5zaWduZWQgaW50IGNsb2NrLCBib29sIHR1cmJvKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYXR0YWNoLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYwppbmRleCBkZWEzNzhmLi43MGQzNzZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9hdHRhY2guYwpAQCAtMzQsMTQgKzM0LDE0IEBACiBzdGF0aWMgaW50IGF0aDVrX2h3X3Bvc3Qoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKIAotCWludCBpLCBjOwotCXUxNiBjdXJfcmVnOwotCXUxNiByZWdzWzJdID0ge0FSNUtfU1RBX0lEMCwgQVI1S19QSFkoOCl9OwotCXUzMiB2YXJfcGF0dGVybjsKLQl1MzIgc3RhdGljX3BhdHRlcm5bNF0gPSB7CisJc3RhdGljIGNvbnN0IHUzMiBzdGF0aWNfcGF0dGVybls0XSA9IHsKIAkJMHg1NTU1NTU1NSwJMHhhYWFhYWFhYSwKIAkJMHg2NjY2NjY2NiwJMHg5OTk5OTk5OQogCX07CisJc3RhdGljIGNvbnN0IHUxNiByZWdzWzJdID0geyBBUjVLX1NUQV9JRDAsIEFSNUtfUEhZKDgpIH07CisJaW50IGksIGM7CisJdTE2IGN1cl9yZWc7CisJdTMyIHZhcl9wYXR0ZXJuOwogCXUzMiBpbml0X3ZhbDsKIAl1MzIgY3VyX3ZhbDsKIApAQCAtMTA2LDcgKzEwNiw2IEBACiB7CiAJc3RydWN0IGF0aDVrX2h3ICphaDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNjLT5wZGV2OwotCXU4IG1hY1tFVEhfQUxFTl0gPSB7fTsKIAlpbnQgcmV0OwogCXUzMiBzcmV2OwogCkBAIC0xNjksNyArMTY4LDYgQEAKIAkJYWgtPmFoX3NpbmdsZV9jaGlwID0gZmFsc2U7CiAJCWFoLT5haF9yYWRpb18yZ2h6X3JldmlzaW9uID0gYXRoNWtfaHdfcmFkaW9fcmV2aXNpb24oYWgsCiAJCQkJCQkJQ0hBTk5FTF8yR0haKTsKLQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGNTExMTsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzUxMTI6CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzIxMTI6CkBAIC0xNzcsMzggKzE3NSwzMSBAQAogCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSBmYWxzZTsKIAkJYWgtPmFoX3JhZGlvXzJnaHpfcmV2aXNpb24gPSBhdGg1a19od19yYWRpb19yZXZpc2lvbihhaCwKIAkJCQkJCQlDSEFOTkVMXzJHSFopOwotCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyOwogCQlicmVhazsKIAljYXNlIEFSNUtfU1JFVl9SQURfMjQxMzoKIAkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MTM7CiAJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7Ci0JCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjI0MTM7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19TUkVWX1JBRF81NDEzOgogCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGNTQxMzsKIAkJYWgtPmFoX3NpbmdsZV9jaGlwID0gdHJ1ZTsKLQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQxMzsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX1NSRVZfUkFEXzIzMTY6CiAJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkYyMzE2OwogCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwotCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyMzE2OwogCQlicmVhazsKIAljYXNlIEFSNUtfU1JFVl9SQURfMjMxNzoKIAkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjIzMTc7CiAJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7Ci0JCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjIzMTc7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19TUkVWX1JBRF81NDI0OgogCQlpZiAoYWgtPmFoX21hY192ZXJzaW9uID09IEFSNUtfU1JFVl9BUjI0MjUgfHwKIAkJYWgtPmFoX21hY192ZXJzaW9uID09IEFSNUtfU1JFVl9BUjI0MTcpewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MjU7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwotCQkJYWgtPmFoX3BoeV9zcGVuZGluZyA9IEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQyNTsKIAkJfSBlbHNlIHsKIAkJCWFoLT5haF9yYWRpbyA9IEFSNUtfUkY1NDEzOwogCQkJYWgtPmFoX3NpbmdsZV9jaGlwID0gdHJ1ZTsKLQkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjU0MTM7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIyNywyOSArMjE4LDI1IEBACiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGMjQyNTsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IHRydWU7CiAJCQlhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA9IEFSNUtfU1JFVl9SQURfMjQyNTsKLQkJCWFoLT5haF9waHlfc3BlbmRpbmcgPSBBUjVLX1BIWV9TUEVORElOR19SRjI0MjU7CiAJCX0gZWxzZSBpZiAoc3JldiA9PSBBUjVLX1NSRVZfQVI1MjEzQSAmJgotCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfMjExMkIpIHsKKwkJYWgtPmFoX3BoeV9yZXZpc2lvbiA9PSBBUjVLX1NSRVZfUEhZXzUyMTJCKSB7CiAJCQlhaC0+YWhfcmFkaW8gPSBBUjVLX1JGNTExMjsKIAkJCWFoLT5haF9zaW5nbGVfY2hpcCA9IGZhbHNlOwotCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzIxMTJCOworCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzUxMTJCOwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNSA+PiA0KSkgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjIzMTY7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzIzMTY7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyMzE2OwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSNTQxNCA+PiA0KSB8fAogCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfNTQxMykgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjU0MTM7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzU0MTM7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkY1NDEzOwogCQl9IGVsc2UgaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNCA+PiA0KSB8fAogCQlhaC0+YWhfcGh5X3JldmlzaW9uID09IEFSNUtfU1JFVl9QSFlfMjQxMykgewogCQkJYWgtPmFoX3JhZGlvID0gQVI1S19SRjI0MTM7CiAJCQlhaC0+YWhfc2luZ2xlX2NoaXAgPSB0cnVlOwogCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPSBBUjVLX1NSRVZfUkFEXzI0MTM7Ci0JCQlhaC0+YWhfcGh5X3NwZW5kaW5nID0gQVI1S19QSFlfU1BFTkRJTkdfUkYyNDEzOwogCQl9IGVsc2UgewogCQkJQVRINUtfRVJSKHNjLCAiQ291bGRuJ3QgaWRlbnRpZnkgcmFkaW8gcmV2aXNpb24uXG4iKTsKIAkJCXJldCA9IC1FTk9ERVY7CkBAIC0zMjQsMTQgKzMxMSwxNCBAQAogCX0KIAogCS8qIE1BQyBhZGRyZXNzIGlzIGNsZWFyZWQgdW50aWwgYWRkX2ludGVyZmFjZSAqLwotCWF0aDVrX2h3X3NldF9sbGFkZHIoYWgsIG1hYyk7CisJYXRoNWtfaHdfc2V0X2xsYWRkcihhaCwgKHU4W0VUSF9BTEVOXSl7fSk7CiAKIAkvKiBTZXQgQlNTSUQgdG8gYmNhc3QgYWRkcmVzczogZmY6ZmY6ZmY6ZmY6ZmY6ZmYgZm9yIG5vdyAqLwogCW1lbXNldChhaC0+YWhfYnNzaWQsIDB4ZmYsIEVUSF9BTEVOKTsKIAlhdGg1a19od19zZXRfYXNzb2NpZChhaCwgYWgtPmFoX2Jzc2lkLCAwKTsKIAlhdGg1a19od19zZXRfb3Btb2RlKGFoKTsKIAotCWF0aDVrX2h3X3NldF9yZmdhaW5fb3B0KGFoKTsKKwlhdGg1a19od19yZmdhaW5fb3B0X2luaXQoYWgpOwogCiAJcmV0dXJuIGFoOwogZXJyX2ZyZWU6CkBAIC0zNTQsNiArMzQxLDggQEAKIAlpZiAoYWgtPmFoX3JmX2JhbmtzICE9IE5VTEwpCiAJCWtmcmVlKGFoLT5haF9yZl9iYW5rcyk7CiAKKwlhdGg1a19lZXByb21fZGV0YWNoKGFoKTsKKwogCS8qIGFzc3VtZSBpbnRlcnJ1cHRzIGFyZSBkb3duICovCiAJa2ZyZWUoYWgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5jCmluZGV4IDFkNzdlZTkuLjVkNTdkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAogCiAvKiBLbm93biBQQ0kgaWRzICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRoNWtfcGNpX2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGg1a19wY2lfaWRfdGFibGVbXSA9IHsKIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDIwNyksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEwIH0sIC8qIDUyMTAgZWFybHkgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAwNyksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjEwIH0sIC8qIDUyMTAgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAxMSksIC5kcml2ZXJfZGF0YSA9IEFSNUtfQVI1MjExIH0sIC8qIDUzMTEgLSB0aGlzIGlzIG9uIEFIQiBidXMgISovCkBAIC0xMDMsNyArMTAzLDcgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGg1a19wY2lfaWRfdGFibGUpOwogCiAvKiBLbm93biBTUkVWcyAqLwotc3RhdGljIHN0cnVjdCBhdGg1a19zcmV2X25hbWUgc3Jldl9uYW1lc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19zcmV2X25hbWUgc3Jldl9uYW1lc1tdID0gewogCXsgIjUyMTAiLAlBUjVLX1ZFUlNJT05fTUFDLAlBUjVLX1NSRVZfQVI1MjEwIH0sCiAJeyAiNTMxMSIsCUFSNUtfVkVSU0lPTl9NQUMsCUFSNUtfU1JFVl9BUjUzMTEgfSwKIAl7ICI1MzExQSIsCUFSNUtfVkVSU0lPTl9NQUMsCUFSNUtfU1JFVl9BUjUzMTFBIH0sCkBAIC0xNDIsNyArMTQyLDcgQEAKIAl7ICJ4eHh4eCIsCUFSNUtfVkVSU0lPTl9SQUQsCUFSNUtfU1JFVl9VTktOT1dOIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIGF0aDVrX3JhdGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIGF0aDVrX3JhdGVzW10gPSB7CiAJeyAuYml0cmF0ZSA9IDEwLAogCSAgLmh3X3ZhbHVlID0gQVRINUtfUkFURV9DT0RFXzFNLCB9LAogCXsgLmJpdHJhdGUgPSAyMCwKQEAgLTIzMiwxMyArMjMyLDE0IEBACiAJCWludCBtY19jb3VudCwgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QpOwogc3RhdGljIGludCBhdGg1a19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQllbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJY29uc3QgdTggKmxvY2FsX2FkZHIsIGNvbnN0IHU4ICphZGRyLAorCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOwogc3RhdGljIGludCBhdGg1a19nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cyk7CiBzdGF0aWMgaW50IGF0aDVrX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogc3RhdGljIHU2NCBhdGg1a19nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIGF0aDVrX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpOwogc3RhdGljIHZvaWQgYXRoNWtfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHN0YXRpYyBpbnQgYXRoNWtfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTI0Nyw3ICsyNDgsNyBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKIAkJdTMyIGNoYW5nZXMpOwogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoNWtfaHdfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDVrX2h3X29wcyA9IHsKIAkudHggCQk9IGF0aDVrX3R4LAogCS5zdGFydCAJCT0gYXRoNWtfc3RhcnQsCiAJLnN0b3AgCQk9IGF0aDVrX3N0b3AsCkBAIC0yNjEsNiArMjYyLDcgQEAKIAkuY29uZl90eCAJPSBOVUxMLAogCS5nZXRfdHhfc3RhdHMgCT0gYXRoNWtfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmIAk9IGF0aDVrX2dldF90c2YsCisJLnNldF90c2YgCT0gYXRoNWtfc2V0X3RzZiwKIAkucmVzZXRfdHNmIAk9IGF0aDVrX3Jlc2V0X3RzZiwKIAkuYnNzX2luZm9fY2hhbmdlZCA9IGF0aDVrX2Jzc19pbmZvX2NoYW5nZWQsCiB9OwpAQCAtMzA4LDYgKzMxMCwxOSBAQAogCWJmLT5za2IgPSBOVUxMOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoNWtfcnhidWZfZnJlZShzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLAorCQkJCXN0cnVjdCBhdGg1a19idWYgKmJmKQoreworCUJVR19PTighYmYpOworCWlmICghYmYtPnNrYikKKwkJcmV0dXJuOworCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5za2JhZGRyLCBzYy0+cnhidWZzaXplLAorCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwlkZXZfa2ZyZWVfc2tiX2FueShiZi0+c2tiKTsKKwliZi0+c2tiID0gTlVMTDsKK30KKworCiAvKiBRdWV1ZXMgc2V0dXAgKi8KIHN0YXRpYyBzdHJ1Y3QgCWF0aDVrX3R4cSAqYXRoNWtfdHhxX3NldHVwKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MsCiAJCQkJaW50IHF0eXBlLCBpbnQgc3VidHlwZSk7CkBAIC0zMzUsNiArMzUwLDcgQEAKIHN0YXRpYyB2b2lkIAlhdGg1a19iZWFjb25fc2VuZChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIHN0YXRpYyB2b2lkIAlhdGg1a19iZWFjb25fY29uZmlnKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogc3RhdGljIHZvaWQJYXRoNWtfYmVhY29uX3VwZGF0ZV90aW1lcnMoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgdTY0IGJjX3RzZik7CitzdGF0aWMgdm9pZAlhdGg1a190YXNrbGV0X2JlYWNvbih1bnNpZ25lZCBsb25nIGRhdGEpOwogCiBzdGF0aWMgaW5saW5lIHU2NCBhdGg1a19leHRlbmRfdHNmKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiByc3RhbXApCiB7CkBAIC0zNDcsMTggKzM2MywxMyBAQAogfQogCiAvKiBJbnRlcnJ1cHQgaGFuZGxpbmcgKi8KLXN0YXRpYyBpbnQgCWF0aDVrX2luaXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgYm9vbCBpc19yZXN1bWUpOworc3RhdGljIGludCAJYXRoNWtfaW5pdChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIHN0YXRpYyBpbnQgCWF0aDVrX3N0b3BfbG9ja2VkKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwotc3RhdGljIGludCAJYXRoNWtfc3RvcF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBib29sIGlzX3N1c3BlbmQpOworc3RhdGljIGludCAJYXRoNWtfc3RvcF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdGg1a19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCAJYXRoNWtfdGFza2xldF9yZXNldCh1bnNpZ25lZCBsb25nIGRhdGEpOwogCiBzdGF0aWMgdm9pZCAJYXRoNWtfY2FsaWJyYXRlKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0vKiBMRUQgZnVuY3Rpb25zICovCi1zdGF0aWMgaW50CWF0aDVrX2luaXRfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKTsKLXN0YXRpYyB2b2lkCWF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYyk7Ci1zdGF0aWMgdm9pZAlhdGg1a19sZWRfb2ZmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwotc3RhdGljIHZvaWQJYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpOwogCiAvKgogICogTW9kdWxlIGluaXQvZXhpdCBmdW5jdGlvbnMKQEAgLTY1Myw4ICs2NjQsNiBAQAogCiAJYXRoNWtfbGVkX29mZihzYyk7CiAKLQlhdGg1a19zdG9wX2h3KHNjLCB0cnVlKTsKLQogCWZyZWVfaXJxKHBkZXYtPmlycSwgc2MpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKQEAgLTY3NiwyNyArNjg1LDE1IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCS8qCi0JICogU3VzcGVuZC9SZXN1bWUgcmVzZXRzIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSwgc28gd2UgaGF2ZSB0bwotCSAqIHJlLWRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKLQkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlCi0JICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsIDApOwotCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGg1a19pbnRyLCBJUlFGX1NIQVJFRCwgImF0aCIsIHNjKTsKIAlpZiAoZXJyKSB7CiAJCUFUSDVLX0VSUihzYywgInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX25vX2lycTsKIAl9CiAKLQllcnIgPSBhdGg1a19pbml0KHNjLCB0cnVlKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9pcnE7CiAJYXRoNWtfbGVkX2VuYWJsZShzYyk7Ci0KIAlyZXR1cm4gMDsKLWVycl9pcnE6Ci0JZnJlZV9pcnEocGRldi0+aXJxLCBzYyk7CisKIGVycl9ub19pcnE6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXJldHVybiBlcnI7CkBAIC03ODEsNiArNzc4LDcgQEAKIAl0YXNrbGV0X2luaXQoJnNjLT5yeHRxLCBhdGg1a190YXNrbGV0X3J4LCAodW5zaWduZWQgbG9uZylzYyk7CiAJdGFza2xldF9pbml0KCZzYy0+dHh0cSwgYXRoNWtfdGFza2xldF90eCwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCXRhc2tsZXRfaW5pdCgmc2MtPnJlc3RxLCBhdGg1a190YXNrbGV0X3Jlc2V0LCAodW5zaWduZWQgbG9uZylzYyk7CisJdGFza2xldF9pbml0KCZzYy0+YmVhY29udHEsIGF0aDVrX3Rhc2tsZXRfYmVhY29uLCAodW5zaWduZWQgbG9uZylzYyk7CiAJc2V0dXBfdGltZXIoJnNjLT5jYWxpYl90aW0sIGF0aDVrX2NhbGlicmF0ZSwgKHVuc2lnbmVkIGxvbmcpc2MpOwogCiAJcmV0ID0gYXRoNWtfZWVwcm9tX3JlYWRfbWFjKGFoLCBtYWMpOwpAQCAtMTA5MCw4ICsxMDg4LDE4IEBACiBzdGF0aWMgaW5saW5lIGludAogYXRoNWtfaHdfdG9fZHJpdmVyX3JpeChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBpbnQgaHdfcml4KQogewotCVdBUk5fT04oaHdfcml4IDwgMCB8fCBod19yaXggPiBBUjVLX01BWF9SQVRFUyk7Ci0JcmV0dXJuIHNjLT5yYXRlX2lkeFtzYy0+Y3VyYmFuZC0+YmFuZF1baHdfcml4XTsKKwlpbnQgcml4OworCisJLyogcmV0dXJuIGJhc2UgcmF0ZSBvbiBlcnJvcnMgKi8KKwlpZiAoV0FSTihod19yaXggPCAwIHx8IGh3X3JpeCA+PSBBUjVLX01BWF9SQVRFUywKKwkJCSJod19yaXggb3V0IG9mIGJvdW5kczogJXhcbiIsIGh3X3JpeCkpCisJCXJldHVybiAwOworCisJcml4ID0gc2MtPnJhdGVfaWR4W3NjLT5jdXJiYW5kLT5iYW5kXVtod19yaXhdOworCWlmIChXQVJOKHJpeCA8IDAsICJpbnZhbGlkIGh3X3JpeDogJXhcbiIsIGh3X3JpeCkpCisJCXJpeCA9IDA7CisKKwlyZXR1cm4gcml4OwogfQogCiAvKioqKioqKioqKioqKioqXApAQCAtMTE4OCw2ICsxMTk2LDEwIEBACiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlOwogCXVuc2lnbmVkIGludCBtcnJfcmF0ZVszXSwgbXJyX3RyaWVzWzNdOwogCWludCBpLCByZXQ7CisJdTE2IGh3X3JhdGU7CisJdTE2IGN0c19yYXRlID0gMDsKKwl1MTYgZHVyYXRpb24gPSAwOworCXU4IHJjX2ZsYWdzOwogCiAJZmxhZ3MgPSBBUjVLX1RYREVTQ19JTlRSRVEgfCBBUjVLX1RYREVTQ19DTFJETUFTSzsKIApAQCAtMTE5NSwyMCArMTIwNyw0MiBAQAogCWJmLT5za2JhZGRyID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCiAJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAorCXJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoc2MtPmh3LCBpbmZvKTsKKwogCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQogCQlmbGFncyB8PSBBUjVLX1RYREVTQ19OT0FDSzsKIAorCXJjX2ZsYWdzID0gaW5mby0+Y29udHJvbC5yYXRlc1swXS5mbGFnczsKKwlod19yYXRlID0gKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkgPworCQlyYXRlLT5od192YWx1ZV9zaG9ydCA6IHJhdGUtPmh3X3ZhbHVlOworCiAJcGt0bGVuID0gc2tiLT5sZW47CiAKKwkvKiBGSVhNRTogSWYgd2UgYXJlIGluIGcgbW9kZSBhbmQgcmF0ZSBpcyBhIENDSyByYXRlCisJICogc3VidHJhY3QgYWgtPmFoX3R4cG93ZXIudHhwX2Nja19vZmRtX3B3cl9kZWx0YQorCSAqIGZyb20gdHggcG93ZXIgKHZhbHVlIGlzIGluIGRCIHVuaXRzIGFscmVhZHkpICovCiAJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KSB7CiAJCWtleWlkeCA9IGluZm8tPmNvbnRyb2wuaHdfa2V5LT5od19rZXlfaWR4OwogCQlwa3RsZW4gKz0gaW5mby0+Y29udHJvbC5od19rZXktPmljdl9sZW47CiAJfQorCWlmIChyY19mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykgeworCQlmbGFncyB8PSBBUjVLX1RYREVTQ19SVFNFTkE7CisJCWN0c19yYXRlID0gaWVlZTgwMjExX2dldF9ydHNfY3RzX3JhdGUoc2MtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CisJCWR1cmF0aW9uID0gbGUxNl90b19jcHUoaWVlZTgwMjExX3J0c19kdXJhdGlvbihzYy0+aHcsCisJCQlzYy0+dmlmLCBwa3RsZW4sIGluZm8pKTsKKwl9CisJaWYgKHJjX2ZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCkgeworCQlmbGFncyB8PSBBUjVLX1RYREVTQ19DVFNFTkE7CisJCWN0c19yYXRlID0gaWVlZTgwMjExX2dldF9ydHNfY3RzX3JhdGUoc2MtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CisJCWR1cmF0aW9uID0gbGUxNl90b19jcHUoaWVlZTgwMjExX2N0c3Rvc2VsZl9kdXJhdGlvbihzYy0+aHcsCisJCQlzYy0+dmlmLCBwa3RsZW4sIGluZm8pKTsKKwl9CiAJcmV0ID0gYWgtPmFoX3NldHVwX3R4X2Rlc2MoYWgsIGRzLCBwa3RsZW4sCiAJCWllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYiksIEFSNUtfUEtUX1RZUEVfTk9STUFMLAogCQkoc2MtPnBvd2VyX2xldmVsICogMiksCi0JCWllZWU4MDIxMV9nZXRfdHhfcmF0ZShzYy0+aHcsIGluZm8pLT5od192YWx1ZSwKLQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudCwga2V5aWR4LCAwLCBmbGFncywgMCwgMCk7CisJCWh3X3JhdGUsCisJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQsIGtleWlkeCwgMCwgZmxhZ3MsCisJCWN0c19yYXRlLCBkdXJhdGlvbik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfdW5tYXA7CiAKQEAgLTEzMjQsNyArMTM1OCw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShiZiwgJnNjLT50eGJ1ZiwgbGlzdCkKIAkJYXRoNWtfdHhidWZfZnJlZShzYywgYmYpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+cnhidWYsIGxpc3QpCi0JCWF0aDVrX3R4YnVmX2ZyZWUoc2MsIGJmKTsKKwkJYXRoNWtfcnhidWZfZnJlZShzYywgYmYpOwogCiAJLyogRnJlZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGFsbCBkZXNjcmlwdG9ycyAqLwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2MtPmRlc2NfbGVuLCBzYy0+ZGVzYywgc2MtPmRlc2NfZGFkZHIpOwpAQCAtMTY2OCw2ICsxNzAyLDM0IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBhdGg1a190YXNrbGV0X2JlYWNvbih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoNWtfc29mdGMgKikgZGF0YTsKKworCS8qCisJICogU29mdHdhcmUgYmVhY29uIGFsZXJ0LS10aW1lIHRvIHNlbmQgYSBiZWFjb24uCisJICoKKwkgKiBJbiBJQlNTIG1vZGUgd2UgdXNlIHRoaXMgaW50ZXJydXB0IGp1c3QgdG8KKwkgKiBrZWVwIHRyYWNrIG9mIHRoZSBuZXh0IFRCVFQgKHRhcmdldCBiZWFjb24KKwkgKiB0cmFuc21pc3Npb24gdGltZSkgaW4gb3JkZXIgdG8gZGV0ZWN0IHdldGhlcgorCSAqIGF1dG9tYXRpYyBUU0YgdXBkYXRlcyBoYXBwZW5lZC4KKwkgKi8KKwlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQkvKiBYWFg6IG9ubHkgaWYgVkVPTCBzdXBwcG9ydGVkICovCisJCXU2NCB0c2YgPSBhdGg1a19od19nZXRfdHNmNjQoc2MtPmFoKTsKKwkJc2MtPm5leHR0YnR0ICs9IHNjLT5iaW50dmFsOworCQlBVEg1S19EQkcoc2MsIEFUSDVLX0RFQlVHX0JFQUNPTiwKKwkJCQkiU1dCQSBuZXh0dGJ0dDogJXggaHdfdHU6ICV4ICIKKwkJCQkiVFNGOiAlbGx4XG4iLAorCQkJCXNjLT5uZXh0dGJ0dCwKKwkJCQlUU0ZfVE9fVFUodHNmKSwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKSB0c2YpOworCX0gZWxzZSB7CisJCXNwaW5fbG9jaygmc2MtPmJsb2NrKTsKKwkJYXRoNWtfYmVhY29uX3NlbmQoc2MpOworCQlzcGluX3VubG9jaygmc2MtPmJsb2NrKTsKKwl9Cit9CiAKIHN0YXRpYyB2b2lkCiBhdGg1a190YXNrbGV0X3J4KHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTE5ODcsNiArMjA0OSw5IEBACiAJCQlhbnRlbm5hID0gc2MtPmJzZW50ICYgNCA/IDIgOiAxOwogCX0KIAorCS8qIEZJWE1FOiBJZiB3ZSBhcmUgaW4gZyBtb2RlIGFuZCByYXRlIGlzIGEgQ0NLIHJhdGUKKwkgKiBzdWJ0cmFjdCBhaC0+YWhfdHhwb3dlci50eHBfY2NrX29mZG1fcHdyX2RlbHRhCisJICogZnJvbSB0eCBwb3dlciAodmFsdWUgaXMgaW4gZEIgdW5pdHMgYWxyZWFkeSkgKi8KIAlkcy0+ZHNfZGF0YSA9IGJmLT5za2JhZGRyOwogCXJldCA9IGFoLT5haF9zZXR1cF90eF9kZXNjKGFoLCBkcywgc2tiLT5sZW4sCiAJCQlpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpLApAQCAtMjAwOCw5ICsyMDczLDggQEAKICAqIGZyYW1lIGNvbnRlbnRzIGFyZSBkb25lIGFzIG5lZWRlZCBhbmQgdGhlIHNsb3QgdGltZSBpcwogICogYWxzbyBhZGp1c3RlZCBiYXNlZCBvbiBjdXJyZW50IHN0YXRlLgogICoKLSAqIHRoaXMgaXMgdXN1YWxseSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCAoYXRoNWtfaW50cigpKQotICogYnV0IGFsc28gZnJvbSBhdGg1a19iZWFjb25fY29uZmlnKCkgaW4gSUJTUyBtb2RlIHdoaWNoIGluIHR1cm4KLSAqIGNhbiBiZSBjYWxsZWQgZnJvbSBhIHRhc2tsZXQgYW5kIHVzZXIgY29udGV4dAorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBzb2Z0d2FyZSBpcnEgY29udGV4dCAoYmVhY29udHEgb3IgcmVzdHEKKyAqIHRhc2tsZXRzKSBvciB1c2VyIGNvbnRleHQgZnJvbSBhdGg1a19iZWFjb25fY29uZmlnLgogICovCiBzdGF0aWMgdm9pZAogYXRoNWtfYmVhY29uX3NlbmQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKQEAgLTIxNzcsMTAgKzIyNDEsNiBAQAogICoKICAqIEBzYzogc3RydWN0IGF0aDVrX3NvZnRjIHBvaW50ZXIgd2UgYXJlIG9wZXJhdGluZyBvbgogICoKLSAqIFdoZW4gb3BlcmF0aW5nIGluIHN0YXRpb24gbW9kZSB3ZSB3YW50IHRvIHJlY2VpdmUgYSBCTUlTUyBpbnRlcnJ1cHQgd2hlbiB3ZQotICogc3RvcCBzZWVpbmcgYmVhY29ucyBmcm9tIHRoZSBBUCB3ZSd2ZSBhc3NvY2lhdGVkIHdpdGggc28gd2UgY2FuIGxvb2sgZm9yCi0gKiBhbm90aGVyIEFQIHRvIGFzc29jaWF0ZSB3aXRoLgotICoKICAqIEluIElCU1MgbW9kZSB3ZSB1c2UgYSBzZWxmLWxpbmtlZCB0eCBkZXNjcmlwdG9yIGlmIHBvc3NpYmxlLiBXZSBlbmFibGUgU1dCQQogICogaW50ZXJydXB0cyB0byBkZXRlY3QgVFNGIHVwZGF0ZXMgb25seS4KICAqLwpAQCAtMjE4OCwxNCArMjI0OCwxMyBAQAogYXRoNWtfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGg1a19odyAqYWggPSBzYy0+YWg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWF0aDVrX2h3X3NldF9pbXIoYWgsIDApOwogCXNjLT5ibWlzc2NvdW50ID0gMDsKIAlzYy0+aW1hc2sgJj0gfihBUjVLX0lOVF9CTUlTUyB8IEFSNUtfSU5UX1NXQkEpOwogCi0JaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzYy0+aW1hc2sgfD0gQVI1S19JTlRfQk1JU1M7Ci0JfSBlbHNlIGlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJaWYgKHNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKIAkJCXNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCB8fAogCQkJc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewogCQkvKgpAQCAtMjIxMSw5ICsyMjcwLDkgQEAKIAogCQlpZiAoc2MtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQkJaWYgKGF0aDVrX2h3X2hhc3Zlb2woYWgpKSB7Ci0JCQkJc3Bpbl9sb2NrKCZzYy0+YmxvY2spOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+YmxvY2ssIGZsYWdzKTsKIAkJCQlhdGg1a19iZWFjb25fc2VuZChzYyk7Ci0JCQkJc3Bpbl91bmxvY2soJnNjLT5ibG9jayk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPmJsb2NrLCBmbGFncyk7CiAJCQl9CiAJCX0gZWxzZQogCQkJYXRoNWtfYmVhY29uX3VwZGF0ZV90aW1lcnMoc2MsIC0xKTsKQEAgLTIyMjgsMTggKzIyODcsMTMgQEAKIFwqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludAotYXRoNWtfaW5pdChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBib29sIGlzX3Jlc3VtZSkKK2F0aDVrX2luaXQoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoNWtfaHcgKmFoID0gc2MtPmFoOwogCWludCByZXQsIGk7CiAKIAltdXRleF9sb2NrKCZzYy0+bG9jayk7CiAKLQlpZiAoaXNfcmVzdW1lICYmICF0ZXN0X2JpdChBVEhfU1RBVF9TVEFSVEVELCBzYy0+c3RhdHVzKSkKLQkJZ290byBvdXRfb2s7Ci0KLQlfX2NsZWFyX2JpdChBVEhfU1RBVF9TVEFSVEVELCBzYy0+c3RhdHVzKTsKLQogCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfUkVTRVQsICJtb2RlICVkXG4iLCBzYy0+b3Btb2RlKTsKIAogCS8qCkBAIC0yMjU5LDcgKzIzMTMsNyBAQAogCXNjLT5jdXJiYW5kID0gJnNjLT5zYmFuZHNbc2MtPmN1cmNoYW4tPmJhbmRdOwogCXNjLT5pbWFzayA9IEFSNUtfSU5UX1JYT0sgfCBBUjVLX0lOVF9SWEVSUiB8IEFSNUtfSU5UX1JYRU9MIHwKIAkJQVI1S19JTlRfUlhPUk4gfCBBUjVLX0lOVF9UWERFU0MgfCBBUjVLX0lOVF9UWEVPTCB8Ci0JCUFSNUtfSU5UX0ZBVEFMIHwgQVI1S19JTlRfR0xPQkFMIHwgQVI1S19JTlRfTUlCOworCQlBUjVLX0lOVF9GQVRBTCB8IEFSNUtfSU5UX0dMT0JBTDsKIAlyZXQgPSBhdGg1a19yZXNldChzYywgZmFsc2UsIGZhbHNlKTsKIAlpZiAocmV0KQogCQlnb3RvIGRvbmU7CkBAIC0yMjcxLDE1ICsyMzI1LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IEFSNUtfS0VZVEFCTEVfU0laRTsgaSsrKQogCQlhdGg1a19od19yZXNldF9rZXkoYWgsIGkpOwogCi0JX19zZXRfYml0KEFUSF9TVEFUX1NUQVJURUQsIHNjLT5zdGF0dXMpOwotCiAJLyogU2V0IGFjayB0byBiZSBzZW50IGF0IGxvdyBiaXQtcmF0ZXMgKi8KIAlhdGg1a19od19zZXRfYWNrX2JpdHJhdGVfaGlnaChhaCwgZmFsc2UpOwogCiAJbW9kX3RpbWVyKCZzYy0+Y2FsaWJfdGltLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKwogCQkJbXNlY3NfdG9famlmZmllcyhhdGg1a19jYWxpbnRlcnZhbCAqIDEwMDApKSk7CiAKLW91dF9vazoKIAlyZXQgPSAwOwogZG9uZToKIAltbWlvd2IoKTsKQEAgLTIzMzQsNyArMjM4NSw3IEBACiAgKiBzdG9wIGlzIHByZWVtcHRlZCkuCiAgKi8KIHN0YXRpYyBpbnQKLWF0aDVrX3N0b3BfaHcoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgYm9vbCBpc19zdXNwZW5kKQorYXRoNWtfc3RvcF9odyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQogewogCWludCByZXQ7CiAKQEAgLTIzNjUsOCArMjQxNiw2IEBACiAJCX0KIAl9CiAJYXRoNWtfdHhidWZfZnJlZShzYywgc2MtPmJidWYpOwotCWlmICghaXNfc3VzcGVuZCkKLQkJX19jbGVhcl9iaXQoQVRIX1NUQVRfU1RBUlRFRCwgc2MtPnN0YXR1cyk7CiAKIAltbWlvd2IoKTsKIAltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKQEAgLTIzNzUsNiArMjQyNCw3IEBACiAJdGFza2xldF9raWxsKCZzYy0+cnh0cSk7CiAJdGFza2xldF9raWxsKCZzYy0+dHh0cSk7CiAJdGFza2xldF9raWxsKCZzYy0+cmVzdHEpOworCXRhc2tsZXRfa2lsbCgmc2MtPmJlYWNvbnRxKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMzkyLDE2ICsyNDQyLDkgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJZG8gewotCQkvKgotCQkgKiBGaWd1cmUgb3V0IHRoZSByZWFzb24ocykgZm9yIHRoZSBpbnRlcnJ1cHQuICBOb3RlCi0JCSAqIHRoYXQgZ2V0X2lzciByZXR1cm5zIGEgcHNldWRvLUlTUiB0aGF0IG1heSBpbmNsdWRlCi0JCSAqIGJpdHMgd2UgaGF2ZW4ndCBleHBsaWNpdGx5IGVuYWJsZWQgc28gd2UgbWFzayB0aGUKLQkJICogdmFsdWUgdG8gaW5zdXJlIHdlIG9ubHkgcHJvY2VzcyBiaXRzIHdlIHJlcXVlc3RlZC4KLQkJICovCiAJCWF0aDVrX2h3X2dldF9pc3IoYWgsICZzdGF0dXMpOwkJLyogTkI6IGNsZWFycyBJUlEgdG9vICovCiAJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfSU5UUiwgInN0YXR1cyAweCV4LzB4JXhcbiIsCiAJCQkJc3RhdHVzLCBzYy0+aW1hc2spOwotCQlzdGF0dXMgJj0gc2MtPmltYXNrOyAvKiBkaXNjYXJkIHVuYXNrZWQgZm9yIGJpdHMgKi8KIAkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIEFSNUtfSU5UX0ZBVEFMKSkgewogCQkJLyoKIAkJCSAqIEZhdGFsIGVycm9ycyBhcmUgdW5yZWNvdmVyYWJsZS4KQEAgLTI0MTIsMzIgKzI0NTUsNyBAQAogCQkJdGFza2xldF9zY2hlZHVsZSgmc2MtPnJlc3RxKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChzdGF0dXMgJiBBUjVLX0lOVF9TV0JBKSB7Ci0JCQkJLyoKLQkJCQkqIFNvZnR3YXJlIGJlYWNvbiBhbGVydC0tdGltZSB0byBzZW5kIGEgYmVhY29uLgotCQkJCSogSGFuZGxlIGJlYWNvbiB0cmFuc21pc3Npb24gZGlyZWN0bHk7IGRlZmVycmluZwotCQkJCSogdGhpcyBpcyB0b28gc2xvdyB0byBtZWV0IHRpbWluZyBjb25zdHJhaW50cwotCQkJCSogdW5kZXIgbG9hZC4KLQkJCQkqCi0JCQkJKiBJbiBJQlNTIG1vZGUgd2UgdXNlIHRoaXMgaW50ZXJydXB0IGp1c3QgdG8KLQkJCQkqIGtlZXAgdHJhY2sgb2YgdGhlIG5leHQgVEJUVCAodGFyZ2V0IGJlYWNvbgotCQkJCSogdHJhbnNtaXNzaW9uIHRpbWUpIGluIG9yZGVyIHRvIGRldGVjdCB3ZXRoZXIKLQkJCQkqIGF1dG9tYXRpYyBUU0YgdXBkYXRlcyBoYXBwZW5lZC4KLQkJCQkqLwotCQkJCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCQkJCSAvKiBYWFg6IG9ubHkgaWYgVkVPTCBzdXBwcG9ydGVkICovCi0JCQkJCXU2NCB0c2YgPSBhdGg1a19od19nZXRfdHNmNjQoYWgpOwotCQkJCQlzYy0+bmV4dHRidHQgKz0gc2MtPmJpbnR2YWw7Ci0JCQkJCUFUSDVLX0RCRyhzYywgQVRINUtfREVCVUdfQkVBQ09OLAotCQkJCQkJICAiU1dCQSBuZXh0dGJ0dDogJXggaHdfdHU6ICV4ICIKLQkJCQkJCSAgIlRTRjogJWxseFxuIiwKLQkJCQkJCSAgc2MtPm5leHR0YnR0LAotCQkJCQkJICBUU0ZfVE9fVFUodHNmKSwKLQkJCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdHNmKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzcGluX2xvY2soJnNjLT5ibG9jayk7Ci0JCQkJCWF0aDVrX2JlYWNvbl9zZW5kKHNjKTsKLQkJCQkJc3Bpbl91bmxvY2soJnNjLT5ibG9jayk7Ci0JCQkJfQorCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT5iZWFjb250cSk7CiAJCQl9CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfUlhFT0wpIHsKIAkJCQkvKgpAQCAtMjQ1Nyw2ICsyNDc1LDcgQEAKIAkJCQkJfCBBUjVLX0lOVF9UWEVSUiB8IEFSNUtfSU5UX1RYRU9MKSkKIAkJCQl0YXNrbGV0X3NjaGVkdWxlKCZzYy0+dHh0cSk7CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfQk1JU1MpIHsKKwkJCQkvKiBUT0RPICovCiAJCQl9CiAJCQlpZiAoc3RhdHVzICYgQVI1S19JTlRfTUlCKSB7CiAJCQkJLyoKQEAgLTI0OTYsNyArMjUxNSw3IEBACiAJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChzYy0+Y3VyY2hhbi0+Y2VudGVyX2ZyZXEpLAogCQlzYy0+Y3VyY2hhbi0+aHdfdmFsdWUpOwogCi0JaWYgKGF0aDVrX2h3X2dldF9yZl9nYWluKGFoKSA9PSBBUjVLX1JGR0FJTl9ORUVEX0NIQU5HRSkgeworCWlmIChhdGg1a19od19nYWluZl9jYWxpYnJhdGUoYWgpID09IEFSNUtfUkZHQUlOX05FRURfQ0hBTkdFKSB7CiAJCS8qCiAJCSAqIFJmZ2FpbiBpcyBvdXQgb2YgYm91bmRzLCByZXNldCB0aGUgY2hpcAogCQkgKiB0byBsb2FkIG5ldyBnYWluIHZhbHVlcy4KQEAgLTI1MTQsMTMwICsyNTMzLDYgQEAKIH0KIAogCi0KLS8qKioqKioqKioqKioqKipcCi0qIExFRCBmdW5jdGlvbnMgKgotXCoqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQKLWF0aDVrX2xlZF9lbmFibGUoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpZiAodGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpIHsKLQkJYXRoNWtfaHdfc2V0X2dwaW9fb3V0cHV0KHNjLT5haCwgc2MtPmxlZF9waW4pOwotCQlhdGg1a19sZWRfb2ZmKHNjKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a19sZWRfb24oc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQotCQlyZXR1cm47Ci0JYXRoNWtfaHdfc2V0X2dwaW8oc2MtPmFoLCBzYy0+bGVkX3Bpbiwgc2MtPmxlZF9vbik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg1a19sZWRfb2ZmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCWF0aDVrX2h3X3NldF9ncGlvKHNjLT5haCwgc2MtPmxlZF9waW4sICFzYy0+bGVkX29uKTsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAotCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKLXsKLQlzdHJ1Y3QgYXRoNWtfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2Rldiwgc3RydWN0IGF0aDVrX2xlZCwKLQkJbGVkX2Rldik7Ci0KLQlpZiAoYnJpZ2h0bmVzcyA9PSBMRURfT0ZGKQotCQlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOwotCWVsc2UKLQkJYXRoNWtfbGVkX29uKGxlZC0+c2MpOwotfQotCi1zdGF0aWMgaW50Ci1hdGg1a19yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2xlZCAqbGVkLAotCQkgICBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0cmlnZ2VyKQotewotCWludCBlcnI7Ci0KLQlsZWQtPnNjID0gc2M7Ci0Jc3RybmNweShsZWQtPm5hbWUsIG5hbWUsIHNpemVvZihsZWQtPm5hbWUpKTsKLQlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKLQlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKLQlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBhdGg1a19sZWRfYnJpZ2h0bmVzc19zZXQ7Ci0KLQllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnNjLT5wZGV2LT5kZXYsICZsZWQtPmxlZF9kZXYpOwotCWlmIChlcnIpIHsKLQkJQVRINUtfV0FSTihzYywgImNvdWxkIG5vdCByZWdpc3RlciBMRUQgJXNcbiIsIG5hbWUpOwotCQlsZWQtPnNjID0gTlVMTDsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDVrX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGg1a19sZWQgKmxlZCkKLXsKLQlpZiAoIWxlZC0+c2MpCi0JCXJldHVybjsKLQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5sZWRfZGV2KTsKLQlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOwotCWxlZC0+c2MgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZAotYXRoNWtfdW5yZWdpc3Rlcl9sZWRzKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCi17Ci0JYXRoNWtfdW5yZWdpc3Rlcl9sZWQoJnNjLT5yeF9sZWQpOwotCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKLX0KLQotCi1zdGF0aWMgaW50Ci1hdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNjLT5wZGV2OwotCWNoYXIgbmFtZVtBVEg1S19MRURfTUFYX05BTUVfTEVOICsgMV07Ci0KLQkvKgotCSAqIEF1dG8tZW5hYmxlIHNvZnQgbGVkIHByb2Nlc3NpbmcgZm9yIElCTSBjYXJkcyBhbmQgZm9yCi0JICogNTIxMSBtaW5pcGNpIGNhcmRzLgotCSAqLwotCWlmIChwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMl9JQk0gfHwKLQkgICAgcGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVRIRVJPU19BUjUyMTEpIHsKLQkJX19zZXRfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpOwotCQlzYy0+bGVkX3BpbiA9IDA7Ci0JCXNjLT5sZWRfb24gPSAwOyAgLyogYWN0aXZlIGxvdyAqLwotCX0KLQkvKiBFbmFibGUgc29mdGxlZCBvbiBQSU4xIG9uIEhQIENvbXBhcSBuYzZ4eCwgbmM0MDAwICYgbng1MDAwIGxhcHRvcHMgKi8KLQlpZiAocGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NPTVBBUSkgewotCQlfX3NldF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cyk7Ci0JCXNjLT5sZWRfcGluID0gMTsKLQkJc2MtPmxlZF9vbiA9IDE7ICAvKiBhY3RpdmUgaGlnaCAqLwotCX0KLQlpZiAoIXRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKQotCQlnb3RvIG91dDsKLQotCWF0aDVrX2xlZF9lbmFibGUoc2MpOwotCi0Jc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiYXRoNWstJXM6OnJ4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKLQlyZXQgPSBhdGg1a19yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCBuYW1lLAotCQlpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKGh3KSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdGg1ay0lczo6dHgiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCXJldCA9IGF0aDVrX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIG5hbWUsCi0JCWllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoaHcpKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0KIC8qKioqKioqKioqKioqKioqKioqKlwKICogTWFjODAyMTEgZnVuY3Rpb25zICoKIFwqKioqKioqKioqKioqKioqKioqKi8KQEAgLTI2NjcsNyArMjU2Miw3IEBACiAJCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHBhZHNpemUpIHsKIAkJCUFUSDVLX0VSUihzYywgInR4IGhkcmxlbiBub3QgJSU0OiAlZCBub3QgZW5vdWdoIgogCQkJCSAgIiBoZWFkcm9vbSB0byBwYWQgJWRcbiIsIGhkcmxlbiwgcGFkc2l6ZSk7Ci0JCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJCQlnb3RvIGRyb3BfcGFja2V0OwogCQl9CiAJCXNrYl9wdXNoKHNrYiwgcGFkc2l6ZSk7CiAJCW1lbW1vdmUoc2tiLT5kYXRhLCBza2ItPmRhdGErcGFkc2l6ZSwgaGRybGVuKTsKQEAgLTI2NzgsNyArMjU3Myw3IEBACiAJCUFUSDVLX0VSUihzYywgIm5vIGZ1cnRoZXIgdHhidWYgYXZhaWxhYmxlLCBkcm9wcGluZyBwYWNrZXRcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+dHhidWZsb2NrLCBmbGFncyk7CiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJZ290byBkcm9wX3BhY2tldDsKIAl9CiAJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzYy0+dHhidWYsIHN0cnVjdCBhdGg1a19idWYsIGxpc3QpOwogCWxpc3RfZGVsKCZiZi0+bGlzdCk7CkBAIC0yNjk1LDEwICsyNTkwLDEyIEBACiAJCWxpc3RfYWRkX3RhaWwoJmJmLT5saXN0LCAmc2MtPnR4YnVmKTsKIAkJc2MtPnR4YnVmX2xlbisrOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+dHhidWZsb2NrLCBmbGFncyk7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiBORVRERVZfVFhfT0s7CisJCWdvdG8gZHJvcF9wYWNrZXQ7CiAJfQorCXJldHVybiBORVRERVZfVFhfT0s7CiAKK2Ryb3BfcGFja2V0OgorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtMjcyMSwxMiArMjYxOCw2IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCS8qCi0JICogVGhpcyBpcyBuZWVkZWQgb25seSB0byBzZXR1cCBpbml0aWFsIHN0YXRlCi0JICogYnV0IGl0J3MgYmVzdCBkb25lIGFmdGVyIGEgcmVzZXQuCi0JICovCi0JYXRoNWtfaHdfc2V0X3R4cG93ZXJfbGltaXQoc2MtPmFoLCAwKTsKLQogCXJldCA9IGF0aDVrX3J4X3N0YXJ0KHNjKTsKIAlpZiAocmV0KSB7CiAJCUFUSDVLX0VSUihzYywgImNhbid0IHN0YXJ0IHJlY3YgbG9naWNcbiIpOwpAQCAtMjc2NiwxMiArMjY1NywxMiBAQAogCiBzdGF0aWMgaW50IGF0aDVrX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXJldHVybiBhdGg1a19pbml0KGh3LT5wcml2LCBmYWxzZSk7CisJcmV0dXJuIGF0aDVrX2luaXQoaHctPnByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBhdGg1a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCWF0aDVrX3N0b3BfaHcoaHctPnByaXYsIGZhbHNlKTsKKwlhdGg1a19zdG9wX2h3KGh3LT5wcml2KTsKIH0KIAogc3RhdGljIGludCBhdGg1a19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMjg1Niw3ICsyNzQ3LDcgQEAKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CiAJc3RydWN0IGF0aDVrX2h3ICphaCA9IHNjLT5haDsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJbXV0ZXhfbG9jaygmc2MtPmxvY2spOwogCWlmIChzYy0+dmlmICE9IHZpZikgewpAQCAtMjg4Miw5ICsyNzczLDcgQEAKIAkJfQogCQlhdGg1a19iZWFjb25fdXBkYXRlKHNjLCBiZWFjb24pOwogCX0KLQltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKIAotCXJldHVybiBhdGg1a19yZXNldF93YWtlKHNjKTsKIHVubG9jazoKIAltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtMzAyMCw4ICsyOTA5LDggQEAKIAogc3RhdGljIGludAogYXRoNWtfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCWNvbnN0IHU4ICpsb2NhbF9hZGRyLCBjb25zdCB1OCAqYWRkciwKLQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQorCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAlpbnQgcmV0ID0gMDsKQEAgLTMwNDQsNyArMjkzMyw4IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0VUX0tFWToKLQkJcmV0ID0gYXRoNWtfaHdfc2V0X2tleShzYy0+YWgsIGtleS0+a2V5aWR4LCBrZXksIGFkZHIpOworCQlyZXQgPSBhdGg1a19od19zZXRfa2V5KHNjLT5haCwga2V5LT5rZXlpZHgsIGtleSwKKwkJCQkgICAgICAgc3RhID8gc3RhLT5hZGRyIDogTlVMTCk7CiAJCWlmIChyZXQpIHsKIAkJCUFUSDVLX0VSUihzYywgImNhbid0IHNldCB0aGUga2V5XG4iKTsKIAkJCWdvdG8gdW5sb2NrOwpAQCAtMzEwNCw2ICsyOTk0LDE0IEBACiB9CiAKIHN0YXRpYyB2b2lkCithdGg1a19zZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1NjQgdHNmKQoreworCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKKworCWF0aDVrX2h3X3NldF90c2Y2NChzYy0+YWgsIHRzZik7Cit9CisKK3N0YXRpYyB2b2lkCiBhdGg1a19yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvYmFzZS5oCmluZGV4IGZhY2M2MGQuLjgyMjk1NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Jhc2UuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9iYXNlLmgKQEAgLTExMiw3ICsxMTIsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tBVEhfQ0hBTl9NQVhdOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZQlyYXRlc1tJRUVFODAyMTFfTlVNX0JBTkRTXVtBUjVLX01BWF9SQVRFU107Ci0JdTgJCQlyYXRlX2lkeFtJRUVFODAyMTFfTlVNX0JBTkRTXVtBUjVLX01BWF9SQVRFU107CisJczgJCQlyYXRlX2lkeFtJRUVFODAyMTFfTlVNX0JBTkRTXVtBUjVLX01BWF9SQVRFU107CiAJZW51bSBubDgwMjExX2lmdHlwZQlvcG1vZGU7CiAJc3RydWN0IGF0aDVrX2h3CQkqYWg7CQkvKiBBdGhlcm9zIEhXICovCiAKQEAgLTE0OCw4ICsxNDgsNyBAQAogCXU4CQkJYnNzaWRtYXNrW0VUSF9BTEVOXTsKIAogCXVuc2lnbmVkIGludAkJbGVkX3BpbiwJLyogR1BJTyBwaW4gZm9yIGRyaXZpbmcgTEVEICovCi0JCQkJbGVkX29uLAkJLyogcGluIHNldHRpbmcgZm9yIExFRCBvbiAqLwotCQkJCWxlZF9vZmY7CS8qIG9mZiB0aW1lIGZvciBjdXJyZW50IGJsaW5rICovCisJCQkJbGVkX29uOwkJLyogcGluIHNldHRpbmcgZm9yIExFRCBvbiAqLwogCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0CXJlc3RxOwkJLyogcmVzZXQgdGFza2xldCAqLwogCkBAIC0xNzAsNiArMTY5LDcgQEAKIAlzdHJ1Y3QgYXRoNWtfbGVkCXR4X2xlZDsJCS8qIHR4IGxlZCAqLwogCiAJc3BpbmxvY2tfdAkJYmxvY2s7CQkvKiBwcm90ZWN0cyBiZWFjb24gKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJYmVhY29udHE7CS8qIGJlYWNvbiBpbnRyIHRhc2tsZXQgKi8KIAlzdHJ1Y3QgYXRoNWtfYnVmCSpiYnVmOwkJLyogYmVhY29uIGJ1ZmZlciAqLwogCXVuc2lnbmVkIGludAkJYmhhbHEsCQkvKiBTVyBxIGZvciBvdXRnb2luZyBiZWFjb25zICovCiAJCQkJYm1pc3Njb3VudCwJLyogbWlzc2VkIGJlYWNvbiB0cmFuc21pdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2NhcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2NhcHMuYwppbmRleCAxNTBmNWVkLi4zNjdhNmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9jYXBzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvY2Fwcy5jCkBAIC04NSw3ICs4NSw4IEBACiAJCS8qIEVuYWJsZSAgODAyLjExYiBpZiBhIDJHSHogY2FwYWJsZSByYWRpbyAoMjExMS81MTEyKSBpcwogCQkgKiBjb25uZWN0ZWQgKi8KIAkJaWYgKEFSNUtfRUVQUk9NX0hEUl8xMUIoZWVfaGVhZGVyKSB8fAotCQkJCUFSNUtfRUVQUk9NX0hEUl8xMUcoZWVfaGVhZGVyKSkgeworCQkgICAgKEFSNUtfRUVQUk9NX0hEUl8xMUcoZWVfaGVhZGVyKSAmJgorCQkgICAgIGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjExKSkgewogCQkJLyogMjMxMiAqLwogCQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcmFuZ2UucmFuZ2VfMmdoel9taW4gPSAyNDEyOwogCQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfcmFuZ2UucmFuZ2VfMmdoel9tYXggPSAyNzMyOwpAQCAtOTQsNyArOTUsOCBAQAogCQkJCV9fc2V0X2JpdChBUjVLX01PREVfMTFCLAogCQkJCQkJYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfbW9kZSk7CiAKLQkJCWlmIChBUjVLX0VFUFJPTV9IRFJfMTFHKGVlX2hlYWRlcikpCisJCQlpZiAoQVI1S19FRVBST01fSERSXzExRyhlZV9oZWFkZXIpICYmCisJCQkgICAgYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTEpCiAJCQkJX19zZXRfYml0KEFSNUtfTU9ERV8xMUcsCiAJCQkJCQlhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9tb2RlKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmMKaW5kZXggY2NhZWI1Yy4uOTc3MGJiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5jCkBAIC04MiwxNCArODIsMTQgQEAKIC8qIGRlYnVnZnM6IHJlZ2lzdGVycyAqLwogCiBzdHJ1Y3QgcmVnIHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IGFkZHI7CiB9OwogCiAjZGVmaW5lIFJFR19TVFJVQ1RfSU5JVChyKSB7ICNyLCByIH0KIAogLyoganVzdCBhIGZldyByYW5kb20gcmVnaXN0ZXJzLCBtaWdodCB3YW50IHRvIGFkZCBtb3JlICovCi1zdGF0aWMgc3RydWN0IHJlZyByZWdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZyByZWdzW10gPSB7CiAJUkVHX1NUUlVDVF9JTklUKEFSNUtfQ1IpLAogCVJFR19TVFJVQ1RfSU5JVChBUjVLX1JYRFApLAogCVJFR19TVFJVQ1RfSU5JVChBUjVLX0NGRyksCkBAIC0xNDIsNyArMTQyLDcgQEAKIAogc3RhdGljIHZvaWQgKnJlZ19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0JcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gJnJlZ3NbKnBvc10gOiBOVUxMOworCXJldHVybiAqcG9zIDwgQVJSQVlfU0laRShyZWdzKSA/ICh2b2lkICopJnJlZ3NbKnBvc10gOiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCByZWdfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqcCkKQEAgLTE1Myw3ICsxNTMsNyBAQAogc3RhdGljIHZvaWQgKnJlZ19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpwLCBsb2ZmX3QgKnBvcykKIHsKIAkrKypwb3M7Ci0JcmV0dXJuICpwb3MgPCBBUlJBWV9TSVpFKHJlZ3MpID8gJnJlZ3NbKnBvc10gOiBOVUxMOworCXJldHVybiAqcG9zIDwgQVJSQVlfU0laRShyZWdzKSA/ICh2b2lkICopJnJlZ3NbKnBvc10gOiBOVUxMOwogfQogCiBzdGF0aWMgaW50IHJlZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpwKQpAQCAtMTY1LDcgKzE2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcmVnaXN0ZXJfc2VxX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcmVnaXN0ZXJfc2VxX29wcyA9IHsKIAkuc3RhcnQgPSByZWdfc3RhcnQsCiAJLm5leHQgID0gcmVnX25leHQsCiAJLnN0b3AgID0gcmVnX3N0b3AsCkBAIC0xOTMsNDMgKzE5Myw2IEBACiB9OwogCiAKLS8qIGRlYnVnZnM6IFRTRiAqLwotCi1zdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfdHNmKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyIGJ1ZlsxMDBdOwotCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCUwMTZsbHhcbiIsCi0JCSAodW5zaWduZWQgbG9uZyBsb25nKWF0aDVrX2h3X2dldF90c2Y2NChzYy0+YWgpKTsKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIDE5KTsKLX0KLQotc3RhdGljIHNzaXplX3Qgd3JpdGVfZmlsZV90c2Yoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJIGNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmLAotCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzIwXTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJidWYsIG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAoc3RybmNtcChidWYsICJyZXNldCIsIDUpID09IDApIHsKLQkJYXRoNWtfaHdfcmVzZXRfdHNmKHNjLT5haCk7Ci0JCXByaW50ayhLRVJOX0lORk8gImRlYnVnZnMgcmVzZXQgVFNGXG4iKTsKLQl9Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3RzZiA9IHsKLQkucmVhZCA9IHJlYWRfZmlsZV90c2YsCi0JLndyaXRlID0gd3JpdGVfZmlsZV90c2YsCi0JLm9wZW4gPSBhdGg1a19kZWJ1Z2ZzX29wZW4sCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi19OwotCi0KIC8qIGRlYnVnZnM6IGJlYWNvbnMgKi8KIAogc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX2JlYWNvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLApAQCAtMzI3LDcgKzI5MCw3IEBACiAKIC8qIGRlYnVnZnM6IGRlYnVnIGxldmVsICovCiAKLXN0YXRpYyBzdHJ1Y3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJZW51bSBhdGg1a19kZWJ1Z19sZXZlbCBsZXZlbDsKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IGNoYXIgKmRlc2M7CkBAIC00MjMsOSArMzg2LDYgQEAKIAlzYy0+ZGVidWcuZGVidWdmc19yZWdpc3RlcnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdpc3RlcnMiLCBTX0lSVUdPLAogCQkJCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeWRpciwgc2MsICZmb3BzX3JlZ2lzdGVycyk7CiAKLQlzYy0+ZGVidWcuZGVidWdmc190c2YgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0c2YiLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCQlzYy0+ZGVidWcuZGVidWdmc19waHlkaXIsIHNjLCAmZm9wc190c2YpOwotCiAJc2MtPmRlYnVnLmRlYnVnZnNfYmVhY29uID0gZGVidWdmc19jcmVhdGVfZmlsZSgiYmVhY29uIiwgU19JV1VTUiB8IFNfSVJVR08sCiAJCQkJc2MtPmRlYnVnLmRlYnVnZnNfcGh5ZGlyLCBzYywgJmZvcHNfYmVhY29uKTsKIApAQCAtNDQ0LDcgKzQwNCw2IEBACiB7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfZGVidWcpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3JlZ2lzdGVycyk7Ci0JZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfdHNmKTsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19iZWFjb24pOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jlc2V0KTsKIAlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19waHlkaXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2RlYnVnLmgKaW5kZXggZmZjNTI5My4uNjZmNjlmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVidWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZWJ1Zy5oCkBAIC03Miw3ICs3Miw2IEBACiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfcGh5ZGlyOwogCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX2RlYnVnOwogCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX3JlZ2lzdGVyczsKLQlzdHJ1Y3QgZGVudHJ5CQkqZGVidWdmc190c2Y7CiAJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnNfYmVhY29uOwogCXN0cnVjdCBkZW50cnkJCSpkZWJ1Z2ZzX3Jlc2V0OwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Rlc2MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2Rlc2MuYwppbmRleCBiNDBhOTI4Li5kYzMwYTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9kZXNjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZGVzYy5jCkBAIC0xOTQsNiArMTk0LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCXR4X3Bvd2VyICs9IGFoLT5haF90eHBvd2VyLnR4cF9vZmZzZXQ7CisJaWYgKHR4X3Bvd2VyID4gQVI1S19UVU5FX01BWF9UWFBPV0VSKQorCQl0eF9wb3dlciA9IEFSNUtfVFVORV9NQVhfVFhQT1dFUjsKKwogCS8qIENsZWFyIGRlc2NyaXB0b3IgKi8KIAltZW1zZXQoJmRlc2MtPnVkLmRzX3R4NTIxMiwgMCwgc2l6ZW9mKHN0cnVjdCBhdGg1a19od181MjEyX3R4X2Rlc2MpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYwppbmRleCAxY2I3ZWRmLi5jMGZiM2IwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBSZXlrIEZsb2V0ZXIgPHJleWtAb3BlbmJzZC5vcmc+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBOaWNrIEtvc3NpZmlkaXMgPG1pY2tmbGVtbUBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtOTgsMTEgKzk4LDYgQEAKIAlpbnQgcmV0OwogCXUxNiB2YWw7CiAKLQkvKiBJbml0aWFsIFRYIHRoZXJtYWwgYWRqdXN0bWVudCB2YWx1ZXMgKi8KLQllZS0+ZWVfdHhfY2xpcCA9IDQ7Ci0JZWUtPmVlX3B3ZF84NCA9IGVlLT5lZV9wd2RfOTAgPSAxOwotCWVlLT5lZV9nYWluX3NlbGVjdCA9IDE7Ci0KIAkvKgogCSAqIFJlYWQgdmFsdWVzIGZyb20gRUVQUk9NIGFuZCBzdG9yZSB0aGVtIGluIHRoZSBjYXBhYmlsaXR5IHN0cnVjdHVyZQogCSAqLwpAQCAtMTM3LDYgKzEzMiwxOCBAQAogCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMCkgewogCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMCwgZWVfbWlzYzApOwogCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMSwgZWVfbWlzYzEpOworCisJCS8qIFhYWDogRG9uJ3Qga25vdyB3aGljaCB2ZXJzaW9ucyBpbmNsdWRlIHRoZXNlIHR3byAqLworCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDMiwgZWVfbWlzYzIpOworCisJCWlmIChlZS0+ZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMykKKwkJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0MzLCBlZV9taXNjMyk7CisKKwkJaWYgKGVlLT5lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNV8wKSB7CisJCQlBUjVLX0VFUFJPTV9SRUFEX0hEUihBUjVLX0VFUFJPTV9NSVNDNCwgZWVfbWlzYzQpOworCQkJQVI1S19FRVBST01fUkVBRF9IRFIoQVI1S19FRVBST01fTUlTQzUsIGVlX21pc2M1KTsKKwkJCUFSNUtfRUVQUk9NX1JFQURfSERSKEFSNUtfRUVQUk9NX01JU0M2LCBlZV9taXNjNik7CisJCX0KIAl9CiAKIAlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPCBBUjVLX0VFUFJPTV9WRVJTSU9OXzNfMykgewpAQCAtMTkyLDcgKzE5OSw3IEBACiAKIAkvKiBHZXQgYW50ZW5uYSBtb2RlcyAqLwogCWFoLT5haF9hbnRlbm5hW21vZGVdWzBdID0KLQkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVswXSA8PCA0KSB8IDB4MTsKKwkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVswXSA8PCA0KTsKIAlhaC0+YWhfYW50ZW5uYVttb2RlXVtBUjVLX0FOVF9GSVhFRF9BXSA9CiAJICAgICBlZS0+ZWVfYW50X2NvbnRyb2xbbW9kZV1bMV0gCXwKIAkgICAgKGVlLT5lZV9hbnRfY29udHJvbFttb2RlXVsyXSA8PCA2KSAJfApAQCAtMjEzLDcgKzIyMCw4IEBACiB9CiAKIC8qCi0gKiBSZWFkIHN1cHBvcnRlZCBtb2RlcyBmcm9tIGVlcHJvbQorICogUmVhZCBzdXBwb3J0ZWQgbW9kZXMgYW5kIHNvbWUgbW9kZS1zcGVjaWZpYyBjYWxpYnJhdGlvbiBkYXRhCisgKiBmcm9tIGVlcHJvbQogICovCiBzdGF0aWMgaW50IGF0aDVrX2VlcHJvbV9yZWFkX21vZGVzKHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiAqb2Zmc2V0LAogCQl1bnNpZ25lZCBpbnQgbW9kZSkKQEAgLTIyOCwyMiArMjM2LDIyIEBACiAJZWUtPmVlX2FkY19kZXNpcmVkX3NpemVbbW9kZV0JPSAoczgpKCh2YWwgPj4gOCkgJiAweGZmKTsKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6Ci0JCWVlLT5lZV9vYlttb2RlXVszXQkJPSAodmFsID4+IDUpICYgMHg3OwotCQllZS0+ZWVfZGJbbW9kZV1bM10JCT0gKHZhbCA+PiAyKSAmIDB4NzsKLQkJZWUtPmVlX29iW21vZGVdWzJdCQk9ICh2YWwgPDwgMSkgJiAweDc7CisJCWVlLT5lZV9vYlttb2RlXVszXQk9ICh2YWwgPj4gNSkgJiAweDc7CisJCWVlLT5lZV9kYlttb2RlXVszXQk9ICh2YWwgPj4gMikgJiAweDc7CisJCWVlLT5lZV9vYlttb2RlXVsyXQk9ICh2YWwgPDwgMSkgJiAweDc7CiAKIAkJQVI1S19FRVBST01fUkVBRChvKyssIHZhbCk7Ci0JCWVlLT5lZV9vYlttb2RlXVsyXQkJfD0gKHZhbCA+PiAxNSkgJiAweDE7Ci0JCWVlLT5lZV9kYlttb2RlXVsyXQkJPSAodmFsID4+IDEyKSAmIDB4NzsKLQkJZWUtPmVlX29iW21vZGVdWzFdCQk9ICh2YWwgPj4gOSkgJiAweDc7Ci0JCWVlLT5lZV9kYlttb2RlXVsxXQkJPSAodmFsID4+IDYpICYgMHg3OwotCQllZS0+ZWVfb2JbbW9kZV1bMF0JCT0gKHZhbCA+PiAzKSAmIDB4NzsKLQkJZWUtPmVlX2RiW21vZGVdWzBdCQk9IHZhbCAmIDB4NzsKKwkJZWUtPmVlX29iW21vZGVdWzJdCXw9ICh2YWwgPj4gMTUpICYgMHgxOworCQllZS0+ZWVfZGJbbW9kZV1bMl0JPSAodmFsID4+IDEyKSAmIDB4NzsKKwkJZWUtPmVlX29iW21vZGVdWzFdCT0gKHZhbCA+PiA5KSAmIDB4NzsKKwkJZWUtPmVlX2RiW21vZGVdWzFdCT0gKHZhbCA+PiA2KSAmIDB4NzsKKwkJZWUtPmVlX29iW21vZGVdWzBdCT0gKHZhbCA+PiAzKSAmIDB4NzsKKwkJZWUtPmVlX2RiW21vZGVdWzBdCT0gdmFsICYgMHg3OwogCQlicmVhazsKIAljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFHOgogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUI6Ci0JCWVlLT5lZV9vYlttb2RlXVsxXQkJPSAodmFsID4+IDQpICYgMHg3OwotCQllZS0+ZWVfZGJbbW9kZV1bMV0JCT0gdmFsICYgMHg3OworCQllZS0+ZWVfb2JbbW9kZV1bMV0JPSAodmFsID4+IDQpICYgMHg3OworCQllZS0+ZWVfZGJbbW9kZV1bMV0JPSB2YWwgJiAweDc7CiAJCWJyZWFrOwogCX0KIApAQCAtMzE1LDYgKzMyMyw5IEBACiAJaWYgKGFoLT5haF9lZV92ZXJzaW9uIDwgQVI1S19FRVBST01fVkVSU0lPTl80XzApCiAJCWdvdG8gZG9uZTsKIAorCS8qIE5vdGU6ID49IHY1IGhhdmUgYmcgZnJlcSBwaWVycyBvbiBhbm90aGVyIGxvY2F0aW9uCisJICogc28gdGhlc2UgZnJlcSBwaWVycyBhcmUgaWdub3JlZCBmb3IgPj0gdjUgKHNob3VsZCBiZSAweGZmCisJICogYW55d2F5KSAqLwogCXN3aXRjaChtb2RlKSB7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQToKIAkJaWYgKGFoLT5haF9lZV92ZXJzaW9uIDwgQVI1S19FRVBST01fVkVSU0lPTl80XzEpCkBAIC00NDIsNyArNDUzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotCisvKiBSZWFkIG1vZGUtc3BlY2lmaWMgZGF0YSAoZXhjZXB0IHBvd2VyIGNhbGlicmF0aW9uIGRhdGEpICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21faW5pdF9tb2RlcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewpAQCAtNDg4LDU2ICs0OTksNDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1hdGg1a19nZXRfcGNkYWNfaW50ZXJjZXB0cyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBtaW4sIHU4IG1heCwgdTggKnZwKQotewotCWNvbnN0IHN0YXRpYyB1MTYgaW50ZXJjZXB0czNbXSA9Ci0JCXsgMCwgNSwgMTAsIDIwLCAzMCwgNTAsIDcwLCA4NSwgOTAsIDk1LCAxMDAgfTsKLQljb25zdCBzdGF0aWMgdTE2IGludGVyY2VwdHMzXzJbXSA9Ci0JCXsgMCwgMTAsIDIwLCAzMCwgNDAsIDUwLCA2MCwgNzAsIDgwLCA5MCwgMTAwIH07Ci0JY29uc3QgdTE2ICppcDsKLQlpbnQgaTsKLQotCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzNfMikKLQkJaXAgPSBpbnRlcmNlcHRzM18yOwotCWVsc2UKLQkJaXAgPSBpbnRlcmNlcHRzMzsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGludGVyY2VwdHMzKTsgaSsrKQotCQkqdnArKyA9IChpcFtpXSAqIG1heCArICgxMDAgLSBpcFtpXSkgKiBtaW4pIC8gMTAwOwotfQotCisvKiBSZWFkIHRoZSBmcmVxdWVuY3kgcGllcnMgZm9yIGVhY2ggbW9kZSAobW9zdGx5IHVzZWQgb24gbmV3ZXIgZWVwcm9tcyB3aXRoIDB4ZmYKKyAqIGZyZXF1ZW5jeSBtYXNrKSAqLwogc3RhdGljIGlubGluZSBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX2ZyZXFfbGlzdChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgKm9mZnNldCwgaW50IG1heCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjLCB1OCAqY291bnQpCisJCQlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjLCB1bnNpZ25lZCBpbnQgbW9kZSkKIHsKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKIAlpbnQgbyA9ICpvZmZzZXQ7CiAJaW50IGkgPSAwOwotCXU4IGYxLCBmMjsKKwl1OCBmcmVxMSwgZnJlcTI7CiAJaW50IHJldDsKIAl1MTYgdmFsOwogCisJZWUtPmVlX25fcGllcnNbbW9kZV0gPSAwOwogCXdoaWxlKGkgPCBtYXgpIHsKIAkJQVI1S19FRVBST01fUkVBRChvKyssIHZhbCk7CiAKLQkJZjEgPSAodmFsID4+IDgpICYgMHhmZjsKLQkJZjIgPSB2YWwgJiAweGZmOwotCi0JCWlmIChmMSkKLQkJCXBjW2krK10uZnJlcSA9IGYxOwotCi0JCWlmIChmMikKLQkJCXBjW2krK10uZnJlcSA9IGYyOwotCi0JCWlmICghZjEgfHwgIWYyKQorCQlmcmVxMSA9IHZhbCAmIDB4ZmY7CisJCWlmICghZnJlcTEpCiAJCQlicmVhazsKKworCQlwY1tpKytdLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCisJCQkJZnJlcTEsIG1vZGUpOworCQllZS0+ZWVfbl9waWVyc1ttb2RlXSsrOworCisJCWZyZXEyID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJCWlmICghZnJlcTIpCisJCQlicmVhazsKKworCQlwY1tpKytdLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCisJCQkJZnJlcTIsIG1vZGUpOworCQllZS0+ZWVfbl9waWVyc1ttb2RlXSsrOwogCX0KKworCS8qIHJldHVybiBuZXcgb2Zmc2V0ICovCiAJKm9mZnNldCA9IG87Ci0JKmNvdW50ID0gaTsKIAogCXJldHVybiAwOwogfQogCisvKiBSZWFkIGZyZXF1ZW5jeSBwaWVycyBmb3IgODAyLjExYSAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX2luaXRfMTFhX3BjYWxfZnJlcShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgb2Zmc2V0KQogewpAQCAtNTUwLDcgKzU1Miw3IEBACiAJaWYgKGVlLT5lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fM18zKSB7CiAJCWF0aDVrX2VlcHJvbV9yZWFkX2ZyZXFfbGlzdChhaCwgJm9mZnNldCwKIAkJCUFSNUtfRUVQUk9NX05fNUdIWl9DSEFOLCBwY2FsLAotCQkJJmVlLT5lZV9uX3BpZXJzW0FSNUtfRUVQUk9NX01PREVfMTFBXSk7CisJCQlBUjVLX0VFUFJPTV9NT0RFXzExQSk7CiAJfSBlbHNlIHsKIAkJbWFzayA9IEFSNUtfRUVQUk9NX0ZSRVFfTShhaC0+YWhfZWVfdmVyc2lvbik7CiAKQEAgLTU3NywyMyArNTc5LDI1IEBACiAKIAkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKIAkJcGNhbFs5XS5mcmVxIHw9ICh2YWwgPj4gMTApICYgMHgzZjsKLQkJZWUtPmVlX25fcGllcnNbQVI1S19FRVBST01fTU9ERV8xMUFdID0gMTA7Ci0JfQogCi0JZm9yKGkgPSAwOyBpIDwgQVI1S19FRVBST01fTl81R0haX0NIQU47IGkgKz0gMSkgewotCQlwY2FsW2ldLmZyZXEgPSBhdGg1a19lZXByb21fYmluMmZyZXEoZWUsCisJCS8qIEZpeGVkIG51bWJlciBvZiBwaWVycyAqLworCQllZS0+ZWVfbl9waWVyc1tBUjVLX0VFUFJPTV9NT0RFXzExQV0gPSAxMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVI1S19FRVBST01fTl81R0haX0NIQU47IGkrKykgeworCQkJcGNhbFtpXS5mcmVxID0gYXRoNWtfZWVwcm9tX2JpbjJmcmVxKGVlLAogCQkJCXBjYWxbaV0uZnJlcSwgQVI1S19FRVBST01fTU9ERV8xMUEpOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKKy8qIFJlYWQgZnJlcXVlbmN5IHBpZXJzIGZvciA4MDIuMTFiZyBvbiBlZXByb20gdmVyc2lvbnMgPj0gNSBhbmQgZWVtYXAgPj0gMiAqLwogc3RhdGljIGlubGluZSBpbnQKIGF0aDVrX2VlcHJvbV9pbml0XzExYmdfMjQxMyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgbW9kZSwgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKIAlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjYWw7Ci0JaW50IGk7CiAKIAlzd2l0Y2gobW9kZSkgewogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUI6CkBAIC02MDgsMjMgKzYxMiwxMzQgQEAKIAogCWF0aDVrX2VlcHJvbV9yZWFkX2ZyZXFfbGlzdChhaCwgJm9mZnNldCwKIAkJQVI1S19FRVBST01fTl8yR0haX0NIQU5fMjQxMywgcGNhbCwKLQkJJmVlLT5lZV9uX3BpZXJzW21vZGVdKTsKLQlmb3IoaSA9IDA7IGkgPCBBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl8yNDEzOyBpICs9IDEpIHsKLQkJcGNhbFtpXS5mcmVxID0gYXRoNWtfZWVwcm9tX2JpbjJmcmVxKGVlLAotCQkJCXBjYWxbaV0uZnJlcSwgbW9kZSk7CisJCW1vZGUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWFkIHBvd2VyIGNhbGlicmF0aW9uIGZvciBSRjUxMTEgY2hpcHMKKyAqCisgKiBGb3IgUkY1MTExIHdlIGhhdmUgYW4gWFBEIC1lWHRlcm5hbCBQb3dlciBEZXRlY3Rvci0gY3VydmUKKyAqIGZvciBlYWNoIGNhbGlicmF0ZWQgY2hhbm5lbC4gRWFjaCBjdXJ2ZSBoYXMgMCw1ZEIgUG93ZXIgc3RlcHMKKyAqIG9uIHggYXhpcyBhbmQgUENEQUMgc3RlcHMgKG9mZnNldHMpIG9uIHkgYXhpcyBhbmQgbG9va3MgbGlrZSBhbgorICogZXhwb25lbnRpYWwgZnVuY3Rpb24uIFRvIHJlY3JlYXRlIHRoZSBjdXJ2ZSB3ZSByZWFkIDExIHBvaW50cworICogaGVyZSBhbmQgaW50ZXJwb2xhdGUgbGF0ZXIuCisgKi8KKworLyogVXNlZCB0byBtYXRjaCBQQ0RBQyBzdGVwcyB3aXRoIHBvd2VyIHZhbHVlcyBvbiBSRjUxMTEgY2hpcHMKKyAqIChlZXByb20gdmVyc2lvbnMgPCA0KS4gRm9yIFJGNTExMSB3ZSBoYXZlIDExIHByZS1kZWZpbmVkIFBDREFDCisgKiBzdGVwcyB0aGF0IG1hdGNoIHdpdGggdGhlIHBvd2VyIHZhbHVlcyB3ZSByZWFkIGZyb20gZWVwcm9tLiBPbgorICogb2xkZXIgZWVwcm9tIHZlcnNpb25zICg8IDMuMikgdGhlc2Ugc3RlcHMgYXJlIGVxdWFseSBzcGFjZWQgYXQKKyAqIDEwJSBvZiB0aGUgcGNkYWMgY3VydmUgLXVudGlsIHRoZSBjdXJ2ZSByZWFjaGVzIGl0J3MgbWF4aW11bS0KKyAqICgxMSBzdGVwcyBmcm9tIDAgdG8gMTAwJSkgYnV0IG9uIG5ld2VyIGVlcHJvbSB2ZXJzaW9ucyAoPj0gMy4yKQorICogdGhlc2UgMTEgc3RlcHMgYXJlIHNwYWNlZCBpbiBhIGRpZmZlcmVudCB3YXkuIFRoaXMgZnVuY3Rpb24gcmV0dXJucworICogdGhlIHBjZGFjIHN0ZXBzIGJhc2VkIG9uIGVlcHJvbSB2ZXJzaW9uIGFuZCBjdXJ2ZSBtaW4vbWF4IHNvIHRoYXQgd2UKKyAqIGNhbiBoYXZlIHBjZGFjL3B3ciBwb2ludHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYXRoNWtfZ2V0X3BjZGFjX2ludGVyY2VwdHMoc3RydWN0IGF0aDVrX2h3ICphaCwgdTggbWluLCB1OCBtYXgsIHU4ICp2cCkKK3sKKwljb25zdCBzdGF0aWMgdTE2IGludGVyY2VwdHMzW10gPQorCQl7IDAsIDUsIDEwLCAyMCwgMzAsIDUwLCA3MCwgODUsIDkwLCA5NSwgMTAwIH07CisJY29uc3Qgc3RhdGljIHUxNiBpbnRlcmNlcHRzM18yW10gPQorCQl7IDAsIDEwLCAyMCwgMzAsIDQwLCA1MCwgNjAsIDcwLCA4MCwgOTAsIDEwMCB9OworCWNvbnN0IHUxNiAqaXA7CisJaW50IGk7CisKKwlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl8zXzIpCisJCWlwID0gaW50ZXJjZXB0czNfMjsKKwllbHNlCisJCWlwID0gaW50ZXJjZXB0czM7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbnRlcmNlcHRzMyk7IGkrKykKKwkJdnBbaV0gPSAoaXBbaV0gKiBtYXggKyAoMTAwIC0gaXBbaV0pICogbWluKSAvIDEwMDsKK30KKworLyogQ29udmVydCBSRjUxMTEgc3BlY2lmaWMgZGF0YSB0byBnZW5lcmljIHJhdyBkYXRhCisgKiB1c2VkIGJ5IGludGVycG9sYXRpb24gY29kZSAqLworc3RhdGljIGludAorYXRoNWtfZWVwcm9tX2NvbnZlcnRfcGNhbF9pbmZvXzUxMTEoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IG1vZGUsCisJCQkJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpjaGluZm8pCit7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmNTExMSAqcGNpbmZvOworCXN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyAqcGQ7CisJdTggcGllciwgcG9pbnQsIGlkeDsKKwl1OCAqcGRnYWluX2lkeCA9IGVlLT5lZV9wZGNfdG9faWR4W21vZGVdOworCisJLyogRmlsbCByYXcgZGF0YSBmb3IgZWFjaCBjYWxpYnJhdGlvbiBwaWVyICovCisJZm9yIChwaWVyID0gMDsgcGllciA8IGVlLT5lZV9uX3BpZXJzW21vZGVdOyBwaWVyKyspIHsKKworCQlwY2luZm8gPSAmY2hpbmZvW3BpZXJdLnJmNTExMV9pbmZvOworCisJCS8qIEFsbG9jYXRlIHBkX2N1cnZlcyBmb3IgdGhpcyBjYWwgcGllciAqLworCQljaGluZm9bcGllcl0ucGRfY3VydmVzID0KKwkJCWtjYWxsb2MoQVI1S19FRVBST01fTl9QRF9DVVJWRVMsCisJCQkJc2l6ZW9mKHN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyksCisJCQkJR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFjaGluZm9bcGllcl0ucGRfY3VydmVzKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogT25seSBvbmUgY3VydmUgZm9yIFJGNTExMQorCQkgKiBmaW5kIG91dCB3aGljaCBvbmUgYW5kIHBsYWNlCisJCSAqIGluIGluIHBkX2N1cnZlcy4KKwkJICogTm90ZTogZWVfeF9nYWluIGlzIHJldmVyc2VkIGhlcmUgKi8KKwkJZm9yIChpZHggPSAwOyBpZHggPCBBUjVLX0VFUFJPTV9OX1BEX0NVUlZFUzsgaWR4KyspIHsKKworCQkJaWYgKCEoKGVlLT5lZV94X2dhaW5bbW9kZV0gPj4gaWR4KSAmIDB4MSkpIHsKKwkJCQlwZGdhaW5faWR4WzBdID0gaWR4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJZWUtPmVlX3BkX2dhaW5zW21vZGVdID0gMTsKKworCQlwZCA9ICZjaGluZm9bcGllcl0ucGRfY3VydmVzW2lkeF07CisKKwkJcGQtPnBkX3BvaW50cyA9IEFSNUtfRUVQUk9NX05fUFdSX1BPSU5UU181MTExOworCisJCS8qIEFsbG9jYXRlIHBkIHBvaW50cyBmb3IgdGhpcyBjdXJ2ZSAqLworCQlwZC0+cGRfc3RlcCA9IGtjYWxsb2MoQVI1S19FRVBST01fTl9QV1JfUE9JTlRTXzUxMTEsCisJCQkJCXNpemVvZih1OCksIEdGUF9LRVJORUwpOworCQlpZiAoIXBkLT5wZF9zdGVwKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcGQtPnBkX3B3ciA9IGtjYWxsb2MoQVI1S19FRVBST01fTl9QV1JfUE9JTlRTXzUxMTEsCisJCQkJCXNpemVvZihzMTYpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZC0+cGRfcHdyKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogRmlsbCByYXcgZGF0YXNldAorCQkgKiAoY29udmVydCBwb3dlciB0byAwLjI1ZEIgdW5pdHMKKwkJICogZm9yIFJGNTExMiBjb21iYXRpYmlsaXR5KSAqLworCQlmb3IgKHBvaW50ID0gMDsgcG9pbnQgPCBwZC0+cGRfcG9pbnRzOyBwb2ludCsrKSB7CisKKwkJCS8qIEFic29sdXRlIHZhbHVlcyAqLworCQkJcGQtPnBkX3B3cltwb2ludF0gPSAyICogcGNpbmZvLT5wd3JbcG9pbnRdOworCisJCQkvKiBBbHJlYWR5IHNvcnRlZCAqLworCQkJcGQtPnBkX3N0ZXBbcG9pbnRdID0gcGNpbmZvLT5wY2RhY1twb2ludF07CisJCX0KKworCQkvKiBTZXQgbWluL21heCBwd3IgKi8KKwkJY2hpbmZvW3BpZXJdLm1pbl9wd3IgPSBwZC0+cGRfcHdyWzBdOworCQljaGluZm9bcGllcl0ubWF4X3B3ciA9IHBkLT5wZF9wd3JbMTBdOworCiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLQorLyogUGFyc2UgRUVQUk9NIGRhdGEgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mb181MTExKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQogewogCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwogCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGNhbDsKIAlpbnQgb2Zmc2V0LCByZXQ7Ci0JaW50IGksIGo7CisJaW50IGk7CiAJdTE2IHZhbDsKIAogCW9mZnNldCA9IEFSNUtfRUVQUk9NX0dST1VQU19TVEFSVChlZS0+ZWVfdmVyc2lvbik7CkBAIC03MDQsMjYgKzgxOSwxNjcgQEAKIAogCQlhdGg1a19nZXRfcGNkYWNfaW50ZXJjZXB0cyhhaCwgY2RhdGEtPnBjZGFjX21pbiwKIAkJCWNkYXRhLT5wY2RhY19tYXgsIGNkYXRhLT5wY2RhYyk7CisJfQogCi0JCWZvciAoaiA9IDA7IGogPCBBUjVLX0VFUFJPTV9OX1BDREFDOyBqKyspIHsKLQkJCWNkYXRhLT5wd3Jbal0gPSAodTE2KQotCQkJCShBUjVLX0VFUFJPTV9QT1dFUl9TVEVQICogY2RhdGEtPnB3cltqXSk7CisJcmV0dXJuIGF0aDVrX2VlcHJvbV9jb252ZXJ0X3BjYWxfaW5mb181MTExKGFoLCBtb2RlLCBwY2FsKTsKK30KKworCisvKgorICogUmVhZCBwb3dlciBjYWxpYnJhdGlvbiBmb3IgUkY1MTEyIGNoaXBzCisgKgorICogRm9yIFJGNTExMiB3ZSBoYXZlIDQgWFBEIC1lWHRlcm5hbCBQb3dlciBEZXRlY3Rvci0gY3VydmVzCisgKiBmb3IgZWFjaCBjYWxpYnJhdGVkIGNoYW5uZWwgb24gMCwgLTYsIC0xMiBhbmQgLTE4ZGJtIGJ1dCB3ZSBvbmx5CisgKiB1c2UgdGhlIGhpZ2hlciAoMykgYW5kIHRoZSBsb3dlciAoMCkgY3VydmVzLiBFYWNoIGN1cnZlIGhhcyAwLjVkQgorICogcG93ZXIgc3RlcHMgb24geCBheGlzIGFuZCBQQ0RBQyBzdGVwcyBvbiB5IGF4aXMgYW5kIGxvb2tzIGxpa2UgYQorICogbGluZWFyIGZ1bmN0aW9uLiBUbyByZWNyZWF0ZSB0aGUgY3VydmUgYW5kIHBhc3MgdGhlIHBvd2VyIHZhbHVlcworICogb24gaHcsIHdlIHJlYWQgNCBwb2ludHMgZm9yIHhwZCAwIChsb3dlciBnYWluIC0+IG1heCBwb3dlcikKKyAqIGFuZCAzIHBvaW50cyBmb3IgeHBkIDMgKGhpZ2hlciBnYWluIC0+IGxvd2VyIHBvd2VyKSBoZXJlIGFuZAorICogaW50ZXJwb2xhdGUgbGF0ZXIuCisgKgorICogTm90ZTogTWFueSB2ZW5kb3JzIGp1c3QgdXNlIHhwZCAwIHNvIHhwZCAzIGlzIHplcm9lZC4KKyAqLworCisvKiBDb252ZXJ0IFJGNTExMiBzcGVjaWZpYyBkYXRhIHRvIGdlbmVyaWMgcmF3IGRhdGEKKyAqIHVzZWQgYnkgaW50ZXJwb2xhdGlvbiBjb2RlICovCitzdGF0aWMgaW50CithdGg1a19lZXByb21fY29udmVydF9wY2FsX2luZm9fNTExMihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgbW9kZSwKKwkJCQlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKmNoaW5mbykKK3sKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm9fcmY1MTEyICpwY2luZm87CisJdTggKnBkZ2Fpbl9pZHggPSBlZS0+ZWVfcGRjX3RvX2lkeFttb2RlXTsKKwl1bnNpZ25lZCBpbnQgcGllciwgcGRnLCBwb2ludDsKKworCS8qIEZpbGwgcmF3IGRhdGEgZm9yIGVhY2ggY2FsaWJyYXRpb24gcGllciAqLworCWZvciAocGllciA9IDA7IHBpZXIgPCBlZS0+ZWVfbl9waWVyc1ttb2RlXTsgcGllcisrKSB7CisKKwkJcGNpbmZvID0gJmNoaW5mb1twaWVyXS5yZjUxMTJfaW5mbzsKKworCQkvKiBBbGxvY2F0ZSBwZF9jdXJ2ZXMgZm9yIHRoaXMgY2FsIHBpZXIgKi8KKwkJY2hpbmZvW3BpZXJdLnBkX2N1cnZlcyA9CisJCQkJa2NhbGxvYyhBUjVLX0VFUFJPTV9OX1BEX0NVUlZFUywKKwkJCQkJc2l6ZW9mKHN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyksCisJCQkJCUdGUF9LRVJORUwpOworCisJCWlmICghY2hpbmZvW3BpZXJdLnBkX2N1cnZlcykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCS8qIEZpbGwgcGRfY3VydmVzICovCisJCWZvciAocGRnID0gMDsgcGRnIDwgZWUtPmVlX3BkX2dhaW5zW21vZGVdOyBwZGcrKykgeworCisJCQl1OCBpZHggPSBwZGdhaW5faWR4W3BkZ107CisJCQlzdHJ1Y3QgYXRoNWtfcGRnYWluX2luZm8gKnBkID0KKwkJCQkJJmNoaW5mb1twaWVyXS5wZF9jdXJ2ZXNbaWR4XTsKKworCQkJLyogTG93ZXN0IGdhaW4gY3VydmUgKG1heCBwb3dlcikgKi8KKwkJCWlmIChwZGcgPT0gMCkgeworCQkJCS8qIE9uZSBtb3JlIHBvaW50IGZvciBiZXR0ZXIgYWNjdXJhY3kgKi8KKwkJCQlwZC0+cGRfcG9pbnRzID0gQVI1S19FRVBST01fTl9YUEQwX1BPSU5UUzsKKworCQkJCS8qIEFsbG9jYXRlIHBkIHBvaW50cyBmb3IgdGhpcyBjdXJ2ZSAqLworCQkJCXBkLT5wZF9zdGVwID0ga2NhbGxvYyhwZC0+cGRfcG9pbnRzLAorCQkJCQkJc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7CisKKwkJCQlpZiAoIXBkLT5wZF9zdGVwKQorCQkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJCXBkLT5wZF9wd3IgPSBrY2FsbG9jKHBkLT5wZF9wb2ludHMsCisJCQkJCQlzaXplb2YoczE2KSwgR0ZQX0tFUk5FTCk7CisKKwkJCQlpZiAoIXBkLT5wZF9wd3IpCisJCQkJCXJldHVybiAtRU5PTUVNOworCisKKwkJCQkvKiBGaWxsIHJhdyBkYXRhc2V0CisJCQkJICogKGFsbCBwb3dlciBsZXZlbHMgYXJlIGluIDAuMjVkQiB1bml0cykgKi8KKwkJCQlwZC0+cGRfc3RlcFswXSA9IHBjaW5mby0+cGNkYWNfeDBbMF07CisJCQkJcGQtPnBkX3B3clswXSA9IHBjaW5mby0+cHdyX3gwWzBdOworCisJCQkJZm9yIChwb2ludCA9IDE7IHBvaW50IDwgcGQtPnBkX3BvaW50czsKKwkJCQlwb2ludCsrKSB7CisJCQkJCS8qIEFic29sdXRlIHZhbHVlcyAqLworCQkJCQlwZC0+cGRfcHdyW3BvaW50XSA9CisJCQkJCQlwY2luZm8tPnB3cl94MFtwb2ludF07CisKKwkJCQkJLyogRGVsdGFzICovCisJCQkJCXBkLT5wZF9zdGVwW3BvaW50XSA9CisJCQkJCQlwZC0+cGRfc3RlcFtwb2ludCAtIDFdICsKKwkJCQkJCXBjaW5mby0+cGNkYWNfeDBbcG9pbnRdOworCQkJCX0KKworCQkJCS8qIFNldCBtaW4gcG93ZXIgZm9yIHRoaXMgZnJlcXVlbmN5ICovCisJCQkJY2hpbmZvW3BpZXJdLm1pbl9wd3IgPSBwZC0+cGRfcHdyWzBdOworCisJCQkvKiBIaWdoZXN0IGdhaW4gY3VydmUgKG1pbiBwb3dlcikgKi8KKwkJCX0gZWxzZSBpZiAocGRnID09IDEpIHsKKworCQkJCXBkLT5wZF9wb2ludHMgPSBBUjVLX0VFUFJPTV9OX1hQRDNfUE9JTlRTOworCisJCQkJLyogQWxsb2NhdGUgcGQgcG9pbnRzIGZvciB0aGlzIGN1cnZlICovCisJCQkJcGQtPnBkX3N0ZXAgPSBrY2FsbG9jKHBkLT5wZF9wb2ludHMsCisJCQkJCQlzaXplb2YodTgpLCBHRlBfS0VSTkVMKTsKKworCQkJCWlmICghcGQtPnBkX3N0ZXApCisJCQkJCXJldHVybiAtRU5PTUVNOworCisJCQkJcGQtPnBkX3B3ciA9IGtjYWxsb2MocGQtPnBkX3BvaW50cywKKwkJCQkJCXNpemVvZihzMTYpLCBHRlBfS0VSTkVMKTsKKworCQkJCWlmICghcGQtPnBkX3B3cikKKwkJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCQkvKiBGaWxsIHJhdyBkYXRhc2V0CisJCQkJICogKGFsbCBwb3dlciBsZXZlbHMgYXJlIGluIDAuMjVkQiB1bml0cykgKi8KKwkJCQlmb3IgKHBvaW50ID0gMDsgcG9pbnQgPCBwZC0+cGRfcG9pbnRzOworCQkJCXBvaW50KyspIHsKKwkJCQkJLyogQWJzb2x1dGUgdmFsdWVzICovCisJCQkJCXBkLT5wZF9wd3JbcG9pbnRdID0KKwkJCQkJCXBjaW5mby0+cHdyX3gzW3BvaW50XTsKKworCQkJCQkvKiBGaXhlZCBwb2ludHMgKi8KKwkJCQkJcGQtPnBkX3N0ZXBbcG9pbnRdID0KKwkJCQkJCXBjaW5mby0+cGNkYWNfeDNbcG9pbnRdOworCQkJCX0KKworCQkJCS8qIFNpbmNlIHdlIGhhdmUgYSBoaWdoZXIgZ2FpbiBjdXJ2ZQorCQkJCSAqIG92ZXJyaWRlIG1pbiBwb3dlciAqLworCQkJCWNoaW5mb1twaWVyXS5taW5fcHdyID0gcGQtPnBkX3B3clswXTsKKwkJCX0KIAkJfQogCX0KIAogCXJldHVybiAwOwogfQogCisvKiBQYXJzZSBFRVBST00gZGF0YSAqLwogc3RhdGljIGludAogYXRoNWtfZWVwcm9tX3JlYWRfcGNhbF9pbmZvXzUxMTIoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IG1vZGUpCiB7CiAJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CiAJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmNTExMiAqY2hhbl9wY2FsX2luZm87CiAJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpnZW5fY2hhbl9pbmZvOworCXU4ICpwZGdhaW5faWR4ID0gZWUtPmVlX3BkY190b19pZHhbbW9kZV07CiAJdTMyIG9mZnNldDsKLQl1bnNpZ25lZCBpbnQgaSwgYzsKKwl1OCBpLCBjOwogCXUxNiB2YWw7CiAJaW50IHJldDsKKwl1OCBwZF9nYWlucyA9IDA7CisKKwkvKiBDb3VudCBob3cgbWFueSBjdXJ2ZXMgd2UgaGF2ZSBhbmQKKwkgKiBpZGVudGlmeSB0aGVtICh3aGljaCBvbmUgb2YgdGhlIDQKKwkgKiBhdmFpbGFibGUgY3VydmVzIHdlIGhhdmUgb24gZWFjaCBjb3VudCkuCisJICogQ3VydmVzIGFyZSBzdG9yZWQgZnJvbSBsb3dlciAoeDApIHRvCisJICogaGlnaGVyICh4MykgZ2FpbiAqLworCWZvciAoaSA9IDA7IGkgPCBBUjVLX0VFUFJPTV9OX1BEX0NVUlZFUzsgaSsrKSB7CisJCS8qIGVlX3hfZ2Fpblttb2RlXSBpcyB4IGdhaW4gbWFzayAqLworCQlpZiAoKGVlLT5lZV94X2dhaW5bbW9kZV0gPj4gaSkgJiAweDEpCisJCQlwZGdhaW5faWR4W3BkX2dhaW5zKytdID0gaTsKKwl9CisJZWUtPmVlX3BkX2dhaW5zW21vZGVdID0gcGRfZ2FpbnM7CisKKwlpZiAocGRfZ2FpbnMgPT0gMCB8fCBwZF9nYWlucyA+IDIpCisJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQToKQEAgLTc2MSwxMyArMTAxNywxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBlZS0+ZWVfbl9waWVyc1ttb2RlXTsgaSsrKSB7CiAJCWNoYW5fcGNhbF9pbmZvID0gJmdlbl9jaGFuX2luZm9baV0ucmY1MTEyX2luZm87CiAKLQkJLyogUG93ZXIgdmFsdWVzIGluIGRCbSAqIDQKKwkJLyogUG93ZXIgdmFsdWVzIGluIHF1YXJ0ZXIgZEIKIAkJICogZm9yIHRoZSBsb3dlciB4cGQgZ2FpbiBjdXJ2ZQogCQkgKiAoMCBkQm0gLT4gaGlnaGVyIG91dHB1dCBwb3dlcikgKi8KIAkJZm9yIChjID0gMDsgYyA8IEFSNUtfRUVQUk9NX05fWFBEMF9QT0lOVFM7IGMrKykgewogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JfeDBbY10gPSAodmFsICYgMHhmZik7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyX3gwWysrY10gPSAoKHZhbCA+PiA4KSAmIDB4ZmYpOworCQkJY2hhbl9wY2FsX2luZm8tPnB3cl94MFtjXSA9IChzOCkgKHZhbCAmIDB4ZmYpOworCQkJY2hhbl9wY2FsX2luZm8tPnB3cl94MFsrK2NdID0gKHM4KSAoKHZhbCA+PiA4KSAmIDB4ZmYpOwogCQl9CiAKIAkJLyogUENEQUMgc3RlcHMKQEAgLTc3OCw0MiArMTAzNCw2MSBAQAogCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbMl0gPSAoKHZhbCA+PiA1KSAmIDB4MWYpOwogCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbM10gPSAoKHZhbCA+PiAxMCkgJiAweDFmKTsKIAotCQkvKiBQb3dlciB2YWx1ZXMgaW4gZEJtICogNAorCQkvKiBQb3dlciB2YWx1ZXMgaW4gcXVhcnRlciBkQgogCQkgKiBmb3IgdGhlIGhpZ2hlciB4cGQgZ2FpbiBjdXJ2ZQogCQkgKiAoMTggZEJtIC0+IGxvd2VyIG91dHB1dCBwb3dlcikgKi8KIAkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJY2hhbl9wY2FsX2luZm8tPnB3cl94M1swXSA9ICh2YWwgJiAweGZmKTsKLQkJY2hhbl9wY2FsX2luZm8tPnB3cl94M1sxXSA9ICgodmFsID4+IDgpICYgMHhmZik7CisJCWNoYW5fcGNhbF9pbmZvLT5wd3JfeDNbMF0gPSAoczgpICh2YWwgJiAweGZmKTsKKwkJY2hhbl9wY2FsX2luZm8tPnB3cl94M1sxXSA9IChzOCkgKCh2YWwgPj4gOCkgJiAweGZmKTsKIAogCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwogCQljaGFuX3BjYWxfaW5mby0+cHdyX3gzWzJdID0gKHZhbCAmIDB4ZmYpOwogCiAJCS8qIFBDREFDIHN0ZXBzCiAJCSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFib3ZlIHBvd2VyCi0JCSAqIG1lYXN1cmVtZW50cyAoc3RhdGljKSAqLworCQkgKiBtZWFzdXJlbWVudHMgKGZpeGVkKSAqLwogCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDNbMF0gPSAyMDsKIAkJY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gzWzFdID0gMzU7CiAJCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194M1syXSA9IDYzOwogCiAJCWlmIChlZS0+ZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMykgewotCQkJY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gwWzBdID0gKCh2YWwgPj4gOCkgJiAweGZmKTsKKwkJCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194MFswXSA9ICgodmFsID4+IDgpICYgMHgzZik7CiAKIAkJCS8qIExhc3QgeHBkMCBwb3dlciBsZXZlbCBpcyBhbHNvIGNoYW5uZWwgbWF4aW11bSAqLwogCQkJZ2VuX2NoYW5faW5mb1tpXS5tYXhfcHdyID0gY2hhbl9wY2FsX2luZm8tPnB3cl94MFszXTsKIAkJfSBlbHNlIHsKIAkJCWNoYW5fcGNhbF9pbmZvLT5wY2RhY194MFswXSA9IDE7Ci0JCQlnZW5fY2hhbl9pbmZvW2ldLm1heF9wd3IgPSAoKHZhbCA+PiA4KSAmIDB4ZmYpOworCQkJZ2VuX2NoYW5faW5mb1tpXS5tYXhfcHdyID0gKHM4KSAoKHZhbCA+PiA4KSAmIDB4ZmYpOwogCQl9CiAKLQkJLyogUmVjcmVhdGUgcGNkYWNfeDAgdGFibGUgZm9yIHRoaXMgY2hhbm5lbCB1c2luZyBwY2RhYyBzdGVwcyAqLwotCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbMV0gKz0gY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gwWzBdOwotCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbMl0gKz0gY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gwWzFdOwotCQljaGFuX3BjYWxfaW5mby0+cGNkYWNfeDBbM10gKz0gY2hhbl9wY2FsX2luZm8tPnBjZGFjX3gwWzJdOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBhdGg1a19lZXByb21fY29udmVydF9wY2FsX2luZm9fNTExMihhaCwgbW9kZSwgZ2VuX2NoYW5faW5mbyk7CiB9CiAKKworLyoKKyAqIFJlYWQgcG93ZXIgY2FsaWJyYXRpb24gZm9yIFJGMjQxMyBjaGlwcworICoKKyAqIEZvciBSRjI0MTMgd2UgaGF2ZSBhIFBvd2VyIHRvIFBEREFDIHRhYmxlIChQb3dlciBEZXRlY3RvcikKKyAqIGluc3RlYWQgb2YgYSBQQ0RBQyBhbmQgNCBwZCBnYWluIGN1cnZlcyBmb3IgZWFjaCBjYWxpYnJhdGVkIGNoYW5uZWwuCisgKiBFYWNoIGN1cnZlIGhhcyBwb3dlciBvbiB4IGF4aXMgaW4gMC41IGRiIHN0ZXBzIGFuZCBQRERBREMgc3RlcHMgb24geQorICogYXhpcyBhbmQgbG9va3MgbGlrZSBhbiBleHBvbmVudGlhbCBmdW5jdGlvbiBsaWtlIHRoZSBSRjUxMTEgY3VydmUuCisgKgorICogVG8gcmVjcmVhdGUgdGhlIGN1cnZlcyB3ZSByZWFkIGhlcmUgdGhlIHBvaW50cyBhbmQgaW50ZXJwb2xhdGUKKyAqIGxhdGVyLiBOb3RlIHRoYXQgaW4gbW9zdCBjYXNlcyBvbmx5IDIgKGhpZ2hlciBhbmQgbG93ZXIpIGN1cnZlcyBhcmUKKyAqIHVzZWQgKGxpa2UgUkY1MTEyKSBidXQgdmVuZG9ycyBoYXZlIHRoZSBvcG9ydHVuaXR5IHRvIGluY2x1ZGUgYWxsCisgKiA0IGN1cnZlcyBvbiBlZXByb20uIFRoZSBmaW5hbCBjdXJ2ZSAoaGlnaGVyIHBvd2VyKSBoYXMgYW4gZXh0cmEKKyAqIHBvaW50IGZvciBiZXR0ZXIgYWNjdXJhY3kgbGlrZSBSRjUxMTIuCisgKi8KKworLyogRm9yIFJGMjQxMyBwb3dlciBjYWxpYnJhdGlvbiBkYXRhIGRvZXNuJ3Qgc3RhcnQgb24gYSBmaXhlZCBsb2NhdGlvbiBhbmQKKyAqIGlmIGEgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLCBpdCdzIHNlY3Rpb24gaXMgbWlzc2luZyAtbm90IHplcm9lZC0uCisgKiBTbyB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgc3RhcnRpbmcgb2Zmc2V0IGZvciBlYWNoIHNlY3Rpb24gYnkgdXNpbmcKKyAqIHRoZXNlIHR3byBmdW5jdGlvbnMgKi8KKworLyogUmV0dXJuIHRoZSBzaXplIG9mIGVhY2ggc2VjdGlvbiBiYXNlZCBvbiB0aGUgbW9kZSBhbmQgdGhlIG51bWJlciBvZiBwZAorICogZ2FpbnMgYXZhaWxhYmxlIChtYXhpbXVtIDQpLiAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKHN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUsIHVuc2lnbmVkIGludCBtb2RlKQogewpAQCAtODI2LDYgKzExMDEsOCBAQAogCXJldHVybiBzejsKIH0KIAorLyogUmV0dXJuIHRoZSBzdGFydGluZyBvZmZzZXQgZm9yIGEgc2VjdGlvbiBiYXNlZCBvbiB0aGUgbW9kZXMgc3VwcG9ydGVkCisgKiBhbmQgZWFjaCBzZWN0aW9uJ3Mgc2l6ZS4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKIGF0aDVrX2NhbF9kYXRhX29mZnNldF8yNDEzKHN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUsIGludCBtb2RlKQogewpAQCAtODM0LDExICsxMTExLDE1IEBACiAJc3dpdGNoKG1vZGUpIHsKIAljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFHOgogCQlpZiAoQVI1S19FRVBST01fSERSXzExQihlZS0+ZWVfaGVhZGVyKSkKLQkJCW9mZnNldCArPSBhdGg1a19wZGdhaW5zX3NpemVfMjQxMyhlZSwgQVI1S19FRVBST01fTU9ERV8xMUIpICsgMjsKKwkJCW9mZnNldCArPSBhdGg1a19wZGdhaW5zX3NpemVfMjQxMyhlZSwKKwkJCQkJQVI1S19FRVBST01fTU9ERV8xMUIpICsKKwkJCQkJQVI1S19FRVBST01fTl8yR0haX0NIQU5fMjQxMyAvIDI7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUI6CiAJCWlmIChBUjVLX0VFUFJPTV9IRFJfMTFBKGVlLT5lZV9oZWFkZXIpKQotCQkJb2Zmc2V0ICs9IGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKGVlLCBBUjVLX0VFUFJPTV9NT0RFXzExQSkgKyA1OworCQkJb2Zmc2V0ICs9IGF0aDVrX3BkZ2FpbnNfc2l6ZV8yNDEzKGVlLAorCQkJCQlBUjVLX0VFUFJPTV9NT0RFXzExQSkgKworCQkJCQlBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTiAvIDI7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUE6CiAJCWJyZWFrOwpAQCAtODQ5LDI0ICsxMTMwLDExNyBAQAogCXJldHVybiBvZmZzZXQ7CiB9CiAKKy8qIENvbnZlcnQgUkYyNDEzIHNwZWNpZmljIGRhdGEgdG8gZ2VuZXJpYyByYXcgZGF0YQorICogdXNlZCBieSBpbnRlcnBvbGF0aW9uIGNvZGUgKi8KK3N0YXRpYyBpbnQKK2F0aDVrX2VlcHJvbV9jb252ZXJ0X3BjYWxfaW5mb18yNDEzKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlLAorCQkJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqY2hpbmZvKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjI0MTMgKnBjaW5mbzsKKwl1OCAqcGRnYWluX2lkeCA9IGVlLT5lZV9wZGNfdG9faWR4W21vZGVdOworCXVuc2lnbmVkIGludCBwaWVyLCBwZGcsIHBvaW50OworCisJLyogRmlsbCByYXcgZGF0YSBmb3IgZWFjaCBjYWxpYnJhdGlvbiBwaWVyICovCisJZm9yIChwaWVyID0gMDsgcGllciA8IGVlLT5lZV9uX3BpZXJzW21vZGVdOyBwaWVyKyspIHsKKworCQlwY2luZm8gPSAmY2hpbmZvW3BpZXJdLnJmMjQxM19pbmZvOworCisJCS8qIEFsbG9jYXRlIHBkX2N1cnZlcyBmb3IgdGhpcyBjYWwgcGllciAqLworCQljaGluZm9bcGllcl0ucGRfY3VydmVzID0KKwkJCQlrY2FsbG9jKEFSNUtfRUVQUk9NX05fUERfQ1VSVkVTLAorCQkJCQlzaXplb2Yoc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFjaGluZm9bcGllcl0ucGRfY3VydmVzKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJLyogRmlsbCBwZF9jdXJ2ZXMgKi8KKwkJZm9yIChwZGcgPSAwOyBwZGcgPCBlZS0+ZWVfcGRfZ2FpbnNbbW9kZV07IHBkZysrKSB7CisKKwkJCXU4IGlkeCA9IHBkZ2Fpbl9pZHhbcGRnXTsKKwkJCXN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyAqcGQgPQorCQkJCQkmY2hpbmZvW3BpZXJdLnBkX2N1cnZlc1tpZHhdOworCisJCQkvKiBPbmUgbW9yZSBwb2ludCBmb3IgdGhlIGhpZ2hlc3QgcG93ZXIKKwkJCSAqIGN1cnZlIChsb3dlc3QgZ2FpbikgKi8KKwkJCWlmIChwZGcgPT0gZWUtPmVlX3BkX2dhaW5zW21vZGVdIC0gMSkKKwkJCQlwZC0+cGRfcG9pbnRzID0gQVI1S19FRVBST01fTl9QRF9QT0lOVFM7CisJCQllbHNlCisJCQkJcGQtPnBkX3BvaW50cyA9IEFSNUtfRUVQUk9NX05fUERfUE9JTlRTIC0gMTsKKworCQkJLyogQWxsb2NhdGUgcGQgcG9pbnRzIGZvciB0aGlzIGN1cnZlICovCisJCQlwZC0+cGRfc3RlcCA9IGtjYWxsb2MocGQtPnBkX3BvaW50cywKKwkJCQkJc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7CisKKwkJCWlmICghcGQtPnBkX3N0ZXApCisJCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJCXBkLT5wZF9wd3IgPSBrY2FsbG9jKHBkLT5wZF9wb2ludHMsCisJCQkJCXNpemVvZihzMTYpLCBHRlBfS0VSTkVMKTsKKworCQkJaWYgKCFwZC0+cGRfcHdyKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQkvKiBGaWxsIHJhdyBkYXRhc2V0CisJCQkgKiBjb252ZXJ0IGFsbCBwd3IgbGV2ZWxzIHRvCisJCQkgKiBxdWFydGVyIGRCIGZvciBSRjUxMTIgY29tYmF0aWJpbGl0eSAqLworCQkJcGQtPnBkX3N0ZXBbMF0gPSBwY2luZm8tPnBkZGFjX2lbcGRnXTsKKwkJCXBkLT5wZF9wd3JbMF0gPSA0ICogcGNpbmZvLT5wd3JfaVtwZGddOworCisJCQlmb3IgKHBvaW50ID0gMTsgcG9pbnQgPCBwZC0+cGRfcG9pbnRzOyBwb2ludCsrKSB7CisKKwkJCQlwZC0+cGRfcHdyW3BvaW50XSA9IHBkLT5wZF9wd3JbcG9pbnQgLSAxXSArCisJCQkJCTIgKiBwY2luZm8tPnB3cltwZGddW3BvaW50IC0gMV07CisKKwkJCQlwZC0+cGRfc3RlcFtwb2ludF0gPSBwZC0+cGRfc3RlcFtwb2ludCAtIDFdICsKKwkJCQkJCXBjaW5mby0+cGRkYWNbcGRnXVtwb2ludCAtIDFdOworCisJCQl9CisKKwkJCS8qIEhpZ2hlc3QgZ2FpbiBjdXJ2ZSAtPiBtaW4gcG93ZXIgKi8KKwkJCWlmIChwZGcgPT0gMCkKKwkJCQljaGluZm9bcGllcl0ubWluX3B3ciA9IHBkLT5wZF9wd3JbMF07CisKKwkJCS8qIExvd2VzdCBnYWluIGN1cnZlIC0+IG1heCBwb3dlciAqLworCQkJaWYgKHBkZyA9PSBlZS0+ZWVfcGRfZ2FpbnNbbW9kZV0gLSAxKQorCQkJCWNoaW5mb1twaWVyXS5tYXhfcHdyID0KKwkJCQkJcGQtPnBkX3B3cltwZC0+cGRfcG9pbnRzIC0gMV07CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogUGFyc2UgRUVQUk9NIGRhdGEgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mb18yNDEzKHN0cnVjdCBhdGg1a19odyAqYWgsIGludCBtb2RlKQogewogCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjI0MTMgKmNoYW5fcGNhbF9pbmZvOwotCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqZ2VuX2NoYW5faW5mbzsKLQl1bnNpZ25lZCBpbnQgaSwgYzsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm9fcmYyNDEzICpwY2luZm87CisJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICpjaGluZm87CisJdTggKnBkZ2Fpbl9pZHggPSBlZS0+ZWVfcGRjX3RvX2lkeFttb2RlXTsKIAl1MzIgb2Zmc2V0OwotCWludCByZXQ7CisJaW50IGlkeCwgaSwgcmV0OwogCXUxNiB2YWw7CiAJdTggcGRfZ2FpbnMgPSAwOwogCi0JaWYgKGVlLT5lZV94X2dhaW5bbW9kZV0gJiAweDEpIHBkX2dhaW5zKys7Ci0JaWYgKChlZS0+ZWVfeF9nYWluW21vZGVdID4+IDEpICYgMHgxKSBwZF9nYWlucysrOwotCWlmICgoZWUtPmVlX3hfZ2Fpblttb2RlXSA+PiAyKSAmIDB4MSkgcGRfZ2FpbnMrKzsKLQlpZiAoKGVlLT5lZV94X2dhaW5bbW9kZV0gPj4gMykgJiAweDEpIHBkX2dhaW5zKys7CisJLyogQ291bnQgaG93IG1hbnkgY3VydmVzIHdlIGhhdmUgYW5kCisJICogaWRlbnRpZnkgdGhlbSAod2hpY2ggb25lIG9mIHRoZSA0CisJICogYXZhaWxhYmxlIGN1cnZlcyB3ZSBoYXZlIG9uIGVhY2ggY291bnQpLgorCSAqIEN1cnZlcyBhcmUgc3RvcmVkIGZyb20gaGlnaGVyIHRvCisJICogbG93ZXIgZ2FpbiBzbyB3ZSBnbyBiYWNrd2FyZHMgKi8KKwlmb3IgKGlkeCA9IEFSNUtfRUVQUk9NX05fUERfQ1VSVkVTIC0gMTsgaWR4ID49IDA7IGlkeC0tKSB7CisJCS8qIGVlX3hfZ2Fpblttb2RlXSBpcyB4IGdhaW4gbWFzayAqLworCQlpZiAoKGVlLT5lZV94X2dhaW5bbW9kZV0gPj4gaWR4KSAmIDB4MSkKKwkJCXBkZ2Fpbl9pZHhbcGRfZ2FpbnMrK10gPSBpZHg7CisKKwl9CiAJZWUtPmVlX3BkX2dhaW5zW21vZGVdID0gcGRfZ2FpbnM7CiAKKwlpZiAocGRfZ2FpbnMgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlvZmZzZXQgPSBhdGg1a19jYWxfZGF0YV9vZmZzZXRfMjQxMyhlZSwgbW9kZSk7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQToKQEAgLTg3NSw3ICsxMjQ5LDcgQEAKIAogCQlhdGg1a19lZXByb21faW5pdF8xMWFfcGNhbF9mcmVxKGFoLCBvZmZzZXQpOwogCQlvZmZzZXQgKz0gQVI1S19FRVBST01fTl81R0haX0NIQU4gLyAyOwotCQlnZW5fY2hhbl9pbmZvID0gZWUtPmVlX3B3cl9jYWxfYTsKKwkJY2hpbmZvID0gZWUtPmVlX3B3cl9jYWxfYTsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQjoKIAkJaWYgKCFBUjVLX0VFUFJPTV9IRFJfMTFCKGVlLT5lZV9oZWFkZXIpKQpAQCAtODgzLDcgKzEyNTcsNyBAQAogCiAJCWF0aDVrX2VlcHJvbV9pbml0XzExYmdfMjQxMyhhaCwgbW9kZSwgb2Zmc2V0KTsKIAkJb2Zmc2V0ICs9IEFSNUtfRUVQUk9NX05fMkdIWl9DSEFOXzI0MTMgLyAyOwotCQlnZW5fY2hhbl9pbmZvID0gZWUtPmVlX3B3cl9jYWxfYjsKKwkJY2hpbmZvID0gZWUtPmVlX3B3cl9jYWxfYjsKIAkJYnJlYWs7CiAJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExRzoKIAkJaWYgKCFBUjVLX0VFUFJPTV9IRFJfMTFHKGVlLT5lZV9oZWFkZXIpKQpAQCAtODkxLDQxICsxMjY1LDM1IEBACiAKIAkJYXRoNWtfZWVwcm9tX2luaXRfMTFiZ18yNDEzKGFoLCBtb2RlLCBvZmZzZXQpOwogCQlvZmZzZXQgKz0gQVI1S19FRVBST01fTl8yR0haX0NIQU5fMjQxMyAvIDI7Ci0JCWdlbl9jaGFuX2luZm8gPSBlZS0+ZWVfcHdyX2NhbF9nOworCQljaGluZm8gPSBlZS0+ZWVfcHdyX2NhbF9nOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAocGRfZ2FpbnMgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgZWUtPmVlX25fcGllcnNbbW9kZV07IGkrKykgewotCQljaGFuX3BjYWxfaW5mbyA9ICZnZW5fY2hhbl9pbmZvW2ldLnJmMjQxM19pbmZvOworCQlwY2luZm8gPSAmY2hpbmZvW2ldLnJmMjQxM19pbmZvOwogCiAJCS8qCiAJCSAqIFJlYWQgcHdyX2ksIHBkZGFjX2kgYW5kIHRoZSBmaXJzdAogCQkgKiAyIHBkIHBvaW50cyAocHdyLCBwZGRhYykKIAkJICovCiAJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wd3JfaVswXSA9IHZhbCAmIDB4MWY7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wZGRhY19pWzBdID0gKHZhbCA+PiA1KSAmIDB4N2Y7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wd3JbMF1bMF0gPQotCQkJCQkodmFsID4+IDEyKSAmIDB4ZjsKKwkJcGNpbmZvLT5wd3JfaVswXSA9IHZhbCAmIDB4MWY7CisJCXBjaW5mby0+cGRkYWNfaVswXSA9ICh2YWwgPj4gNSkgJiAweDdmOworCQlwY2luZm8tPnB3clswXVswXSA9ICh2YWwgPj4gMTIpICYgMHhmOwogCiAJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1swXVswXSA9IHZhbCAmIDB4M2Y7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wd3JbMF1bMV0gPSAodmFsID4+IDYpICYgMHhmOwotCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMF1bMV0gPQotCQkJCQkodmFsID4+IDEwKSAmIDB4M2Y7CisJCXBjaW5mby0+cGRkYWNbMF1bMF0gPSB2YWwgJiAweDNmOworCQlwY2luZm8tPnB3clswXVsxXSA9ICh2YWwgPj4gNikgJiAweGY7CisJCXBjaW5mby0+cGRkYWNbMF1bMV0gPSAodmFsID4+IDEwKSAmIDB4M2Y7CiAKIAkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJY2hhbl9wY2FsX2luZm8tPnB3clswXVsyXSA9IHZhbCAmIDB4ZjsKLQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzBdWzJdID0KLQkJCQkJKHZhbCA+PiA0KSAmIDB4M2Y7CisJCXBjaW5mby0+cHdyWzBdWzJdID0gdmFsICYgMHhmOworCQlwY2luZm8tPnBkZGFjWzBdWzJdID0gKHZhbCA+PiA0KSAmIDB4M2Y7CiAKLQkJY2hhbl9wY2FsX2luZm8tPnB3clswXVszXSA9IDA7Ci0JCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1swXVszXSA9IDA7CisJCXBjaW5mby0+cHdyWzBdWzNdID0gMDsKKwkJcGNpbmZvLT5wZGRhY1swXVszXSA9IDA7CiAKIAkJaWYgKHBkX2dhaW5zID4gMSkgewogCQkJLyoKQEAgLTkzMyw0NCArMTMwMSwzNiBAQAogCQkJICogc28gaXQgb25seSBoYXMgMiBwZCBwb2ludHMuCiAJCQkgKiBDb250aW51ZSB3aWggcGQgZ2FpbiAxLgogCQkJICovCi0JCQljaGFuX3BjYWxfaW5mby0+cHdyX2lbMV0gPSAodmFsID4+IDEwKSAmIDB4MWY7CisJCQlwY2luZm8tPnB3cl9pWzFdID0gKHZhbCA+PiAxMCkgJiAweDFmOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNfaVsxXSA9ICh2YWwgPj4gMTUpICYgMHgxOworCQkJcGNpbmZvLT5wZGRhY19pWzFdID0gKHZhbCA+PiAxNSkgJiAweDE7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjX2lbMV0gfD0gKHZhbCAmIDB4M0YpIDw8IDE7CisJCQlwY2luZm8tPnBkZGFjX2lbMV0gfD0gKHZhbCAmIDB4M0YpIDw8IDE7CiAKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JbMV1bMF0gPSAodmFsID4+IDYpICYgMHhmOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzFdWzBdID0KLQkJCQkJCSh2YWwgPj4gMTApICYgMHgzZjsKKwkJCXBjaW5mby0+cHdyWzFdWzBdID0gKHZhbCA+PiA2KSAmIDB4ZjsKKwkJCXBjaW5mby0+cGRkYWNbMV1bMF0gPSAodmFsID4+IDEwKSAmIDB4M2Y7CiAKIAkJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzFdWzFdID0gdmFsICYgMHhmOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzFdWzFdID0KLQkJCQkJCSh2YWwgPj4gNCkgJiAweDNmOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3clsxXVsyXSA9Ci0JCQkJCQkodmFsID4+IDEwKSAmIDB4ZjsKKwkJCXBjaW5mby0+cHdyWzFdWzFdID0gdmFsICYgMHhmOworCQkJcGNpbmZvLT5wZGRhY1sxXVsxXSA9ICh2YWwgPj4gNCkgJiAweDNmOworCQkJcGNpbmZvLT5wd3JbMV1bMl0gPSAodmFsID4+IDEwKSAmIDB4ZjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzFdWzJdID0KLQkJCQkJCSh2YWwgPj4gMTQpICYgMHgzOworCQkJcGNpbmZvLT5wZGRhY1sxXVsyXSA9ICh2YWwgPj4gMTQpICYgMHgzOwogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1sxXVsyXSB8PQotCQkJCQkJKHZhbCAmIDB4RikgPDwgMjsKKwkJCXBjaW5mby0+cGRkYWNbMV1bMl0gfD0gKHZhbCAmIDB4RikgPDwgMjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnB3clsxXVszXSA9IDA7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMV1bM10gPSAwOworCQkJcGNpbmZvLT5wd3JbMV1bM10gPSAwOworCQkJcGNpbmZvLT5wZGRhY1sxXVszXSA9IDA7CiAJCX0gZWxzZSBpZiAocGRfZ2FpbnMgPT0gMSkgewogCQkJLyoKIAkJCSAqIFBkIGdhaW4gMCBpcyB0aGUgbGFzdCBvbmUgc28KIAkJCSAqIHJlYWQgdGhlIGV4dHJhIHBvaW50LgogCQkJICovCi0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzBdWzNdID0KLQkJCQkJCSh2YWwgPj4gMTApICYgMHhmOworCQkJcGNpbmZvLT5wd3JbMF1bM10gPSAodmFsID4+IDEwKSAmIDB4ZjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzBdWzNdID0KLQkJCQkJCSh2YWwgPj4gMTQpICYgMHgzOworCQkJcGNpbmZvLT5wZGRhY1swXVszXSA9ICh2YWwgPj4gMTQpICYgMHgzOwogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1swXVszXSB8PQotCQkJCQkJKHZhbCAmIDB4RikgPDwgMjsKKwkJCXBjaW5mby0+cGRkYWNbMF1bM10gfD0gKHZhbCAmIDB4RikgPDwgMjsKIAkJfQogCiAJCS8qCkBAIC05NzgsMTA1ICsxMzM4LDY1IEBACiAJCSAqIGFzIGFib3ZlLgogCQkgKi8KIAkJaWYgKHBkX2dhaW5zID4gMikgewotCQkJY2hhbl9wY2FsX2luZm8tPnB3cl9pWzJdID0gKHZhbCA+PiA0KSAmIDB4MWY7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNfaVsyXSA9ICh2YWwgPj4gOSkgJiAweDdmOworCQkJcGNpbmZvLT5wd3JfaVsyXSA9ICh2YWwgPj4gNCkgJiAweDFmOworCQkJcGNpbmZvLT5wZGRhY19pWzJdID0gKHZhbCA+PiA5KSAmIDB4N2Y7CiAKIAkJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzJdWzBdID0KLQkJCQkJCSh2YWwgPj4gMCkgJiAweGY7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMl1bMF0gPQotCQkJCQkJKHZhbCA+PiA0KSAmIDB4M2Y7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzJdWzFdID0KLQkJCQkJCSh2YWwgPj4gMTApICYgMHhmOworCQkJcGNpbmZvLT5wd3JbMl1bMF0gPSAodmFsID4+IDApICYgMHhmOworCQkJcGNpbmZvLT5wZGRhY1syXVswXSA9ICh2YWwgPj4gNCkgJiAweDNmOworCQkJcGNpbmZvLT5wd3JbMl1bMV0gPSAodmFsID4+IDEwKSAmIDB4ZjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzJdWzFdID0KLQkJCQkJCSh2YWwgPj4gMTQpICYgMHgzOworCQkJcGNpbmZvLT5wZGRhY1syXVsxXSA9ICh2YWwgPj4gMTQpICYgMHgzOwogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1syXVsxXSB8PQotCQkJCQkJKHZhbCAmIDB4RikgPDwgMjsKKwkJCXBjaW5mby0+cGRkYWNbMl1bMV0gfD0gKHZhbCAmIDB4RikgPDwgMjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnB3clsyXVsyXSA9Ci0JCQkJCQkodmFsID4+IDQpICYgMHhmOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzJdWzJdID0KLQkJCQkJCSh2YWwgPj4gOCkgJiAweDNmOworCQkJcGNpbmZvLT5wd3JbMl1bMl0gPSAodmFsID4+IDQpICYgMHhmOworCQkJcGNpbmZvLT5wZGRhY1syXVsyXSA9ICh2YWwgPj4gOCkgJiAweDNmOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzJdWzNdID0gMDsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1syXVszXSA9IDA7CisJCQlwY2luZm8tPnB3clsyXVszXSA9IDA7CisJCQlwY2luZm8tPnBkZGFjWzJdWzNdID0gMDsKIAkJfSBlbHNlIGlmIChwZF9nYWlucyA9PSAyKSB7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyWzFdWzNdID0KLQkJCQkJCSh2YWwgPj4gNCkgJiAweGY7Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbMV1bM10gPQotCQkJCQkJKHZhbCA+PiA4KSAmIDB4M2Y7CisJCQlwY2luZm8tPnB3clsxXVszXSA9ICh2YWwgPj4gNCkgJiAweGY7CisJCQlwY2luZm8tPnBkZGFjWzFdWzNdID0gKHZhbCA+PiA4KSAmIDB4M2Y7CiAJCX0KIAogCQlpZiAocGRfZ2FpbnMgPiAzKSB7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyX2lbM10gPSAodmFsID4+IDE0KSAmIDB4MzsKKwkJCXBjaW5mby0+cHdyX2lbM10gPSAodmFsID4+IDE0KSAmIDB4MzsKIAkJCUFSNUtfRUVQUk9NX1JFQUQob2Zmc2V0KyssIHZhbCk7Ci0JCQljaGFuX3BjYWxfaW5mby0+cHdyX2lbM10gfD0gKCh2YWwgPj4gMCkgJiAweDcpIDw8IDI7CisJCQlwY2luZm8tPnB3cl9pWzNdIHw9ICgodmFsID4+IDApICYgMHg3KSA8PCAyOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNfaVszXSA9ICh2YWwgPj4gMykgJiAweDdmOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3clszXVswXSA9Ci0JCQkJCQkodmFsID4+IDEwKSAmIDB4ZjsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1szXVswXSA9Ci0JCQkJCQkodmFsID4+IDE0KSAmIDB4MzsKKwkJCXBjaW5mby0+cGRkYWNfaVszXSA9ICh2YWwgPj4gMykgJiAweDdmOworCQkJcGNpbmZvLT5wd3JbM11bMF0gPSAodmFsID4+IDEwKSAmIDB4ZjsKKwkJCXBjaW5mby0+cGRkYWNbM11bMF0gPSAodmFsID4+IDE0KSAmIDB4MzsKIAogCQkJQVI1S19FRVBST01fUkVBRChvZmZzZXQrKywgdmFsKTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1szXVswXSB8PQotCQkJCQkJKHZhbCAmIDB4RikgPDwgMjsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wd3JbM11bMV0gPQotCQkJCQkJKHZhbCA+PiA0KSAmIDB4ZjsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1szXVsxXSA9Ci0JCQkJCQkodmFsID4+IDgpICYgMHgzZjsKKwkJCXBjaW5mby0+cGRkYWNbM11bMF0gfD0gKHZhbCAmIDB4RikgPDwgMjsKKwkJCXBjaW5mby0+cHdyWzNdWzFdID0gKHZhbCA+PiA0KSAmIDB4ZjsKKwkJCXBjaW5mby0+cGRkYWNbM11bMV0gPSAodmFsID4+IDgpICYgMHgzZjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnB3clszXVsyXSA9Ci0JCQkJCQkodmFsID4+IDE0KSAmIDB4MzsKKwkJCXBjaW5mby0+cHdyWzNdWzJdID0gKHZhbCA+PiAxNCkgJiAweDM7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3clszXVsyXSB8PQotCQkJCQkJKCh2YWwgPj4gMCkgJiAweDMpIDw8IDI7CisJCQlwY2luZm8tPnB3clszXVsyXSB8PSAoKHZhbCA+PiAwKSAmIDB4MykgPDwgMjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzNdWzJdID0KLQkJCQkJCSh2YWwgPj4gMikgJiAweDNmOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3clszXVszXSA9Ci0JCQkJCQkodmFsID4+IDgpICYgMHhmOworCQkJcGNpbmZvLT5wZGRhY1szXVsyXSA9ICh2YWwgPj4gMikgJiAweDNmOworCQkJcGNpbmZvLT5wd3JbM11bM10gPSAodmFsID4+IDgpICYgMHhmOwogCi0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbM11bM10gPQotCQkJCQkJKHZhbCA+PiAxMikgJiAweEY7CisJCQlwY2luZm8tPnBkZGFjWzNdWzNdID0gKHZhbCA+PiAxMikgJiAweEY7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzNdWzNdIHw9Ci0JCQkJCQkoKHZhbCA+PiAwKSAmIDB4MykgPDwgNDsKKwkJCXBjaW5mby0+cGRkYWNbM11bM10gfD0gKCh2YWwgPj4gMCkgJiAweDMpIDw8IDQ7CiAJCX0gZWxzZSBpZiAocGRfZ2FpbnMgPT0gMykgewotCQkJY2hhbl9wY2FsX2luZm8tPnB3clsyXVszXSA9Ci0JCQkJCQkodmFsID4+IDE0KSAmIDB4MzsKKwkJCXBjaW5mby0+cHdyWzJdWzNdID0gKHZhbCA+PiAxNCkgJiAweDM7CiAJCQlBUjVLX0VFUFJPTV9SRUFEKG9mZnNldCsrLCB2YWwpOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3clsyXVszXSB8PQotCQkJCQkJKCh2YWwgPj4gMCkgJiAweDMpIDw8IDI7CisJCQlwY2luZm8tPnB3clsyXVszXSB8PSAoKHZhbCA+PiAwKSAmIDB4MykgPDwgMjsKIAotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjWzJdWzNdID0KLQkJCQkJCSh2YWwgPj4gMikgJiAweDNmOwotCQl9Ci0KLQkJZm9yIChjID0gMDsgYyA8IHBkX2dhaW5zOyBjKyspIHsKLQkJCS8qIFJlY3JlYXRlIHB3ciB0YWJsZSBmb3IgdGhpcyBjaGFubmVsIHVzaW5nIHB3ciBzdGVwcyAqLwotCQkJY2hhbl9wY2FsX2luZm8tPnB3cltjXVswXSArPSBjaGFuX3BjYWxfaW5mby0+cHdyX2lbY10gKiAyOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3cltjXVsxXSArPSBjaGFuX3BjYWxfaW5mby0+cHdyW2NdWzBdOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3cltjXVsyXSArPSBjaGFuX3BjYWxfaW5mby0+cHdyW2NdWzFdOwotCQkJY2hhbl9wY2FsX2luZm8tPnB3cltjXVszXSArPSBjaGFuX3BjYWxfaW5mby0+cHdyW2NdWzJdOwotCQkJaWYgKGNoYW5fcGNhbF9pbmZvLT5wd3JbY11bM10gPT0gY2hhbl9wY2FsX2luZm8tPnB3cltjXVsyXSkKLQkJCQljaGFuX3BjYWxfaW5mby0+cHdyW2NdWzNdID0gMDsKLQotCQkJLyogUmVjcmVhdGUgcGRkYWMgdGFibGUgZm9yIHRoaXMgY2hhbm5lbCB1c2luZyBwZGRhYyBzdGVwcyAqLwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjW2NdWzBdICs9IGNoYW5fcGNhbF9pbmZvLT5wZGRhY19pW2NdOwotCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjW2NdWzFdICs9IGNoYW5fcGNhbF9pbmZvLT5wZGRhY1tjXVswXTsKLQkJCWNoYW5fcGNhbF9pbmZvLT5wZGRhY1tjXVsyXSArPSBjaGFuX3BjYWxfaW5mby0+cGRkYWNbY11bMV07Ci0JCQljaGFuX3BjYWxfaW5mby0+cGRkYWNbY11bM10gKz0gY2hhbl9wY2FsX2luZm8tPnBkZGFjW2NdWzJdOwotCQkJaWYgKGNoYW5fcGNhbF9pbmZvLT5wZGRhY1tjXVszXSA9PSBjaGFuX3BjYWxfaW5mby0+cGRkYWNbY11bMl0pCi0JCQkJY2hhbl9wY2FsX2luZm8tPnBkZGFjW2NdWzNdID0gMDsKKwkJCXBjaW5mby0+cGRkYWNbMl1bM10gPSAodmFsID4+IDIpICYgMHgzZjsKIAkJfQogCX0KIAotCXJldHVybiAwOworCXJldHVybiBhdGg1a19lZXByb21fY29udmVydF9wY2FsX2luZm9fMjQxMyhhaCwgbW9kZSwgY2hpbmZvKTsKIH0KIAorCiAvKgogICogUmVhZCBwZXIgcmF0ZSB0YXJnZXQgcG93ZXIgKHRoaXMgaXMgdGhlIG1heGltdW0gdHggcG93ZXIKICAqIHN1cHBvcnRlZCBieSB0aGUgY2FyZCkuIFRoaXMgaW5mbyBpcyB1c2VkIHdoZW4gc2V0dGluZwpAQCAtMTA4NCwxMSArMTQwNCwxMiBAQAogICoKICAqIFRoaXMgYWxzbyB3b3JrcyBmb3IgdjUgRUVQUk9Ncy4KICAqLwotc3RhdGljIGludCBhdGg1a19lZXByb21fcmVhZF90YXJnZXRfcmF0ZV9wd3JfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3N0YXRpYyBpbnQKK2F0aDVrX2VlcHJvbV9yZWFkX3RhcmdldF9yYXRlX3B3cl9pbmZvKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBtb2RlKQogewogCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwogCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbyAqcmF0ZV9wY2FsX2luZm87Ci0JdTE2ICpyYXRlX3RhcmdldF9wd3JfbnVtOworCXU4ICpyYXRlX3RhcmdldF9wd3JfbnVtOwogCXUzMiBvZmZzZXQ7CiAJdTE2IHZhbDsKIAlpbnQgcmV0LCBpOwpAQCAtMTE2Myw2ICsxNDg0LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBSZWFkIHBlciBjaGFubmVsIGNhbGlicmF0aW9uIGluZm8gZnJvbSBFRVBST00KKyAqCisgKiBUaGlzIGluZm8gaXMgdXNlZCB0byBjYWxpYnJhdGUgdGhlIGJhc2ViYW5kIHBvd2VyIHRhYmxlLiBJbWFnaW5lCisgKiB0aGF0IGZvciBlYWNoIGNoYW5uZWwgdGhlcmUgaXMgYSBwb3dlciBjdXJ2ZSB0aGF0J3MgaHcgc3BlY2lmaWMKKyAqIChkZXBlbmRzIG9uIGFtcGxpZmllciBldGMpIGFuZCB3ZSB0cnkgdG8gImNvcnJlY3QiIHRoaXMgY3VydmUgdXNpbmcKKyAqIG9mZmVzdHMgd2UgcGFzcyBvbiB0byBwaHkgY2hpcCAoYmFzZWJhbmQgLT4gYmVmb3JlIGFtcGxpZmllcikgc28gdGhhdAorICogaXQgY2FuIHVzZSBhY2N1cmF0ZSBwb3dlciB2YWx1ZXMgd2hlbiBzZXR0aW5nIHR4IHBvd2VyICh0YWtlcyBhbXBsaWZpZXIncworICogcGVyZm9ybWFuY2Ugb24gZWFjaCBjaGFubmVsIGludG8gYWNjb3VudCkuCisgKgorICogRUVQUk9NIHByb3ZpZGVzIHVzIHdpdGggdGhlIG9mZnNldHMgZm9yIHNvbWUgcHJlLWNhbGlicmF0ZWQgY2hhbm5lbHMKKyAqIGFuZCB3ZSBoYXZlIHRvIGludGVycG9sYXRlIHRvIGNyZWF0ZSB0aGUgZnVsbCB0YWJsZSBmb3IgdGhlc2UgY2hhbm5lbHMgYW5kCisgKiBhbHNvIHRoZSB0YWJsZSBmb3IgYW55IGNoYW5uZWwuCisgKi8KIHN0YXRpYyBpbnQKIGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewpAQCAtMTE4MCw3ICsxNTE1LDkgQEAKIAllbHNlCiAJCXJlYWRfcGNhbCA9IGF0aDVrX2VlcHJvbV9yZWFkX3BjYWxfaW5mb181MTExOwogCi0JZm9yIChtb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUE7IG1vZGUgPD0gQVI1S19FRVBST01fTU9ERV8xMUc7IG1vZGUrKykgeworCisJZm9yIChtb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUE7IG1vZGUgPD0gQVI1S19FRVBST01fTU9ERV8xMUc7CisJbW9kZSsrKSB7CiAJCWVyciA9IHJlYWRfcGNhbChhaCwgbW9kZSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtMTE5Myw3ICsxNTMwLDYzIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFJlYWQgY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgKi8KK3N0YXRpYyBpbnQKK2F0aDVrX2VlcHJvbV9mcmVlX3BjYWxfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKmNoaW5mbzsKKwl1OCBwaWVyLCBwZGc7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIEFSNUtfRUVQUk9NX01PREVfMTFBOgorCQlpZiAoIUFSNUtfRUVQUk9NX0hEUl8xMUEoZWUtPmVlX2hlYWRlcikpCisJCQlyZXR1cm4gMDsKKwkJY2hpbmZvID0gZWUtPmVlX3B3cl9jYWxfYTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX0VFUFJPTV9NT0RFXzExQjoKKwkJaWYgKCFBUjVLX0VFUFJPTV9IRFJfMTFCKGVlLT5lZV9oZWFkZXIpKQorCQkJcmV0dXJuIDA7CisJCWNoaW5mbyA9IGVlLT5lZV9wd3JfY2FsX2I7CisJCWJyZWFrOworCWNhc2UgQVI1S19FRVBST01fTU9ERV8xMUc6CisJCWlmICghQVI1S19FRVBST01fSERSXzExRyhlZS0+ZWVfaGVhZGVyKSkKKwkJCXJldHVybiAwOworCQljaGluZm8gPSBlZS0+ZWVfcHdyX2NhbF9nOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKHBpZXIgPSAwOyBwaWVyIDwgZWUtPmVlX25fcGllcnNbbW9kZV07IHBpZXIrKykgeworCQlpZiAoIWNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMpCisJCQljb250aW51ZTsKKworCQlmb3IgKHBkZyA9IDA7IHBkZyA8IGVlLT5lZV9wZF9nYWluc1ttb2RlXTsgcGRnKyspIHsKKwkJCXN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyAqcGQgPQorCQkJCQkmY2hpbmZvW3BpZXJdLnBkX2N1cnZlc1twZGddOworCisJCQlpZiAocGQgIT0gTlVMTCkgeworCQkJCWtmcmVlKHBkLT5wZF9zdGVwKTsKKwkJCQlrZnJlZShwZC0+cGRfcHdyKTsKKwkJCX0KKwkJfQorCisJCWtmcmVlKGNoaW5mb1twaWVyXS5wZF9jdXJ2ZXMpOworCX0KKworCXJldHVybiAwOworfQorCit2b2lkCithdGg1a19lZXByb21fZGV0YWNoKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJdTggbW9kZTsKKworCWZvciAobW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOyBtb2RlIDw9IEFSNUtfRUVQUk9NX01PREVfMTFHOyBtb2RlKyspCisJCWF0aDVrX2VlcHJvbV9mcmVlX3BjYWxfaW5mbyhhaCwgbW9kZSk7Cit9CisKKy8qIFJlYWQgY29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgdXNlZCBmb3IgcmVndWxhdG9yeSBjb250cm9sICovCiBzdGF0aWMgaW50CiBhdGg1a19lZXByb21fcmVhZF9jdGxfaW5mbyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewpAQCAtMTMyOCwxOSArMTcyMSwxNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKIC8qCiAgKiBSZWFkIHRoZSBNQUMgYWRkcmVzcyBmcm9tIGVlcHJvbQogICovCiBpbnQgYXRoNWtfZWVwcm9tX3JlYWRfbWFjKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4ICptYWMpCiB7Ci0JdTggbWFjX2RbRVRIX0FMRU5dOworCXU4IG1hY19kW0VUSF9BTEVOXSA9IHt9OwogCXUzMiB0b3RhbCwgb2Zmc2V0OwogCXUxNiBkYXRhOwogCWludCBvY3RldCwgcmV0OwogCi0JbWVtc2V0KG1hYywgMCwgRVRIX0FMRU4pOwotCW1lbXNldChtYWNfZCwgMCwgRVRIX0FMRU4pOwotCiAJcmV0ID0gYXRoNWtfaHdfZWVwcm9tX3JlYWQoYWgsIDB4MjAsICZkYXRhKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTM1NiwxMSArMTc0NywyMyBAQAogCQlvY3RldCArPSAyOwogCX0KIAotCW1lbWNweShtYWMsIG1hY19kLCBFVEhfQUxFTik7Ci0KIAlpZiAoIXRvdGFsIHx8IHRvdGFsID09IDMgKiAweGZmZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbWVtY3B5KG1hYywgbWFjX2QsIEVUSF9BTEVOKTsKKwogCXJldHVybiAwOwogfQogCitib29sIGF0aDVrX2VlcHJvbV9pc19oYjYzKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJdTE2IGRhdGE7CisKKwlhdGg1a19od19lZXByb21fcmVhZChhaCwgQVI1S19FRVBST01fSVNfSEI2MywgJmRhdGEpOworCisJaWYgKChhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MjUgPj4gNCkpICYmIGRhdGEpCisJCXJldHVybiB0cnVlOworCWVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5oCmluZGV4IDA5ZWI3ZDAuLmIwYzA2MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2VlcHJvbS5oCkBAIC0yNSw2ICsyNSw3IEBACiAjZGVmaW5lIEFSNUtfRUVQUk9NX01BR0lDXzUyMTEJCTB4MDAwMDE0NWIgLyogNTIxMSAqLwogI2RlZmluZSBBUjVLX0VFUFJPTV9NQUdJQ181MjEwCQkweDAwMDAxNDVhIC8qIDUyMTAgKi8KIAorI2RlZmluZQlBUjVLX0VFUFJPTV9JU19IQjYzCQkweDAwMGIJLyogVGFsb24gZGV0ZWN0ICovCiAjZGVmaW5lIEFSNUtfRUVQUk9NX1JFR19ET01BSU4JCTB4MDBiZgkvKiBFRVBST00gcmVnZG9tICovCiAjZGVmaW5lIEFSNUtfRUVQUk9NX0NIRUNLU1VNCQkweDAwYzAJLyogRUVQUk9NIGNoZWNrc3VtICovCiAjZGVmaW5lIEFSNUtfRUVQUk9NX0lORk9fQkFTRQkJMHgwMGMwCS8qIEVFUFJPTSBoZWFkZXIgKi8KQEAgLTE3Miw2ICsxNzMsNyBAQAogI2RlZmluZSBBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTgkJMTAKICNkZWZpbmUgQVI1S19FRVBST01fTl8yR0haX0NIQU4JCTMKICNkZWZpbmUgQVI1S19FRVBST01fTl8yR0haX0NIQU5fMjQxMwk0CisjZGVmaW5lCUFSNUtfRUVQUk9NX05fMkdIWl9DSEFOX01BWAk0CiAjZGVmaW5lIEFSNUtfRUVQUk9NX01BWF9DSEFOCQkxMAogI2RlZmluZSBBUjVLX0VFUFJPTV9OX1BXUl9QT0lOVFNfNTExMQkxMQogI2RlZmluZSBBUjVLX0VFUFJPTV9OX1BDREFDCQkxMQpAQCAtMTkyLDcgKzE5NCw3IEBACiAjZGVmaW5lIEFSNUtfRUVQUk9NX1NDQUxFX09DX0RFTFRBKF94KQkoKChfeCkgKiAyKSAvIDEwKQogI2RlZmluZSBBUjVLX0VFUFJPTV9OX0NUTFMoX3YpCQlBUjVLX0VFUFJPTV9PRkYoX3YsIDE2LCAzMikKICNkZWZpbmUgQVI1S19FRVBST01fTUFYX0NUTFMJCTMyCi0jZGVmaW5lIEFSNUtfRUVQUk9NX05fWFBEX1BFUl9DSEFOTkVMCTQKKyNkZWZpbmUgQVI1S19FRVBST01fTl9QRF9DVVJWRVMJCTQKICNkZWZpbmUgQVI1S19FRVBST01fTl9YUEQwX1BPSU5UUwk0CiAjZGVmaW5lIEFSNUtfRUVQUk9NX05fWFBEM19QT0lOVFMJMwogI2RlZmluZSBBUjVLX0VFUFJPTV9OX1BEX0dBSU5TCQk0CkBAIC0yMzEsNyArMjMzLDcgQEAKIAlBUjVLX0NUTF8xMUIgPSAxLAogCUFSNUtfQ1RMXzExRyA9IDIsCiAJQVI1S19DVExfVFVSQk8gPSAzLAotCUFSNUtfQ1RMXzEwOEcgPSA0LAorCUFSNUtfQ1RMX1RVUkJPRyA9IDQsCiAJQVI1S19DVExfMkdIVDIwID0gNSwKIAlBUjVLX0NUTF81R0hUMjAgPSA2LAogCUFSNUtfQ1RMXzJHSFQ0MCA9IDcsCkBAIC0yMzksNjUgKzI0MSwxMTQgQEAKIAlBUjVLX0NUTF9NT0RFX00gPSAxNSwKIH07CiAKKy8qIERlZmF1bHQgQ1RMIGlkcyBmb3IgdGhlIDMgbWFpbiByZWcgZG9tYWlucy4KKyAqIEF0aGVyb3Mgb25seSB1c2VzIHRoZXNlIGJ5IGRlZmF1bHQgYnV0IHZlbmRvcnMKKyAqIGNhbiBoYXZlIHVwIHRvIDMyIGRpZmZlcmVudCBDVExzIGZvciBkaWZmZXJlbnQKKyAqIHNjZW5hcmlvcy4gTm90ZSB0aGF0IHRoZWVzZSB2YWx1ZXMgYXJlIE9SZWQgd2l0aAorICogdGhlIG1vZGUgaWQgKGFib3ZlKSBzbyB3ZSBjYW4gaGF2ZSB1cCB0byAyNCBDVEwKKyAqIGRhdGFzZXRzIG91dCBvZiB0aGVzZSAzIG1haW4gcmVnZG9tYWlucy4gVGhhdCBsZWF2ZXMKKyAqIDggaWRzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdmVuZG9ycyBhbmQgc2luY2UgMHgyMCBpcworICogbWlzc2luZyBmcm9tIEhBTCBzb3VyY2VzIGkgZ3Vlc3MgdGhpcyBpcyB0aGUgc2V0IG9mCisgKiBjdXN0b20gQ1RMcyB2ZW5kb3JzIGNhbiB1c2UuICovCisjZGVmaW5lCUFSNUtfQ1RMX0ZDQwkweDEwCisjZGVmaW5lCUFSNUtfQ1RMX0NVU1RPTQkweDIwCisjZGVmaW5lCUFSNUtfQ1RMX0VUU0kJMHgzMAorI2RlZmluZQlBUjVLX0NUTF9NS0sJMHg0MAorCisvKiBJbmRpY2F0ZXMgYSBDVEwgd2l0aCBvbmx5IG1vZGUgc2V0IGFuZAorICogbm8gcmVnIGRvbWFpbiBtYXBwaW5nLCBzdWNoIENUTHMgYXJlIHVzZWQKKyAqIGZvciB3b3JsZCByb2FtaW5nIGRvbWFpbnMgb3Igc2ltcGx5IHdoZW4KKyAqIGEgcmVnIGRvbWFpbiBpcyBub3Qgc2V0ICovCisjZGVmaW5lCUFSNUtfQ1RMX05PX1JFR0RPTUFJTgkweGYwCisKKy8qIEluZGljYXRlcyBhbiBlbXB0eSAoaW52YWxpZCkgQ1RMICovCisjZGVmaW5lIEFSNUtfQ1RMX05PX0NUTAkJMHhmZgorCiAvKiBQZXIgY2hhbm5lbCBjYWxpYnJhdGlvbiBkYXRhLCB1c2VkIGZvciBwb3dlciB0YWJsZSBzZXR1cCAqLwogc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmNTExMSB7CiAJLyogUG93ZXIgbGV2ZWxzIGluIGhhbGYgZGJtIHVuaXRzCiAJICogZm9yIG9uZSBwb3dlciBjdXJ2ZS4gKi8KLQl1OAkJcHdyW0FSNUtfRUVQUk9NX05fUFdSX1BPSU5UU181MTExXTsKKwl1OCBwd3JbQVI1S19FRVBST01fTl9QV1JfUE9JTlRTXzUxMTFdOwogCS8qIFBDREFDIHRhYmxlIHN0ZXBzCiAJICogZm9yIHRoZSBhYm92ZSB2YWx1ZXMgKi8KLQl1OAkJcGNkYWNbQVI1S19FRVBST01fTl9QV1JfUE9JTlRTXzUxMTFdOworCXU4IHBjZGFjW0FSNUtfRUVQUk9NX05fUFdSX1BPSU5UU181MTExXTsKIAkvKiBTdGFydGluZyBQQ0RBQyBzdGVwICovCi0JdTgJCXBjZGFjX21pbjsKKwl1OCBwY2RhY19taW47CiAJLyogRmluYWwgUENEQUMgc3RlcCAqLwotCXU4CQlwY2RhY19tYXg7CisJdTggcGNkYWNfbWF4OwogfTsKIAogc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvX3JmNTExMiB7CiAJLyogUG93ZXIgbGV2ZWxzIGluIHF1YXJ0ZXIgZEJtIHVuaXRzCiAJICogZm9yIGxvd2VyICgwKSBhbmQgaGlnaGVyICgzKQotCSAqIGxldmVsIGN1cnZlcyAqLwotCXM4CQlwd3JfeDBbQVI1S19FRVBST01fTl9YUEQwX1BPSU5UU107Ci0JczgJCXB3cl94M1tBUjVLX0VFUFJPTV9OX1hQRDNfUE9JTlRTXTsKKwkgKiBsZXZlbCBjdXJ2ZXMgaW4gMC4yNWRCIHVuaXRzICovCisJczggcHdyX3gwW0FSNUtfRUVQUk9NX05fWFBEMF9QT0lOVFNdOworCXM4IHB3cl94M1tBUjVLX0VFUFJPTV9OX1hQRDNfUE9JTlRTXTsKIAkvKiBQQ0RBQyB0YWJsZSBzdGVwcwogCSAqIGZvciB0aGUgYWJvdmUgdmFsdWVzICovCi0JdTgJcGNkYWNfeDBbQVI1S19FRVBST01fTl9YUEQwX1BPSU5UU107Ci0JdTgJcGNkYWNfeDNbQVI1S19FRVBST01fTl9YUEQzX1BPSU5UU107CisJdTggcGNkYWNfeDBbQVI1S19FRVBST01fTl9YUEQwX1BPSU5UU107CisJdTggcGNkYWNfeDNbQVI1S19FRVBST01fTl9YUEQzX1BPSU5UU107CiB9OwogCiBzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm9fcmYyNDEzIHsKIAkvKiBTdGFydGluZyBwd3IvcGRkYWMgdmFsdWVzICovCi0JczgJCXB3cl9pW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdOwotCXU4CXBkZGFjX2lbQVI1S19FRVBST01fTl9QRF9HQUlOU107Ci0JLyogKHB3cixwZGRhYykgcG9pbnRzICovCi0JczgJCXB3cltBUjVLX0VFUFJPTV9OX1BEX0dBSU5TXQotCQkJCVtBUjVLX0VFUFJPTV9OX1BEX1BPSU5UU107Ci0JdTgJcGRkYWNbQVI1S19FRVBST01fTl9QRF9HQUlOU10KLQkJCQlbQVI1S19FRVBST01fTl9QRF9QT0lOVFNdOworCXM4IHB3cl9pW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdOworCXU4IHBkZGFjX2lbQVI1S19FRVBST01fTl9QRF9HQUlOU107CisJLyogKHB3cixwZGRhYykgcG9pbnRzCisJICogcG93ZXIgbGV2ZWxzIGluIDAuNWRCIHVuaXRzICovCisJczggcHdyW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdCisJCVtBUjVLX0VFUFJPTV9OX1BEX1BPSU5UU107CisJdTggcGRkYWNbQVI1S19FRVBST01fTl9QRF9HQUlOU10KKwkJW0FSNUtfRUVQUk9NX05fUERfUE9JTlRTXTsKK307CisKK2VudW0gYXRoNWtfcG93ZXJ0YWJsZV90eXBlIHsKKwlBUjVLX1BXUlRBQkxFX1BXUl9UT19QQ0RBQyA9IDAsCisJQVI1S19QV1JUQUJMRV9MSU5FQVJfUENEQUMgPSAxLAorCUFSNUtfUFdSVEFCTEVfUFdSX1RPX1BEQURDID0gMiwKK307CisKK3N0cnVjdCBhdGg1a19wZGdhaW5faW5mbyB7CisJdTggcGRfcG9pbnRzOworCXU4ICpwZF9zdGVwOworCS8qIFBvd2VyIHZhbHVlcyBhcmUgaW4KKwkgKiAwLjI1ZEIgdW5pdHMgKi8KKwlzMTYgKnBkX3B3cjsKIH07CiAKIHN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyB7CiAJLyogRnJlcXVlbmN5ICovCiAJdTE2CWZyZXE7Ci0JLyogTWF4IGF2YWlsYWJsZSBwb3dlciAqLwotCXM4CQltYXhfcHdyOworCS8qIFR4IHBvd2VyIGJvdW5kYXJpZXMgKi8KKwlzMTYJbWF4X3B3cjsKKwlzMTYJbWluX3B3cjsKIAl1bmlvbiB7CiAJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjUxMTEgcmY1MTExX2luZm87CiAJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjUxMTIgcmY1MTEyX2luZm87CiAJCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mb19yZjI0MTMgcmYyNDEzX2luZm87CiAJfTsKKwkvKiBSYXcgdmFsdWVzIHVzZWQgYnkgcGh5IGNvZGUKKwkgKiBDdXJ2ZXMgYXJlIHN0b3JlZCBpbiBvcmRlciBmcm9tIGxvd2VyCisJICogZ2FpbiB0byBoaWdoZXIgZ2FpbiAobWF4IHR4cG93ZXIgLT4gbWluIHR4cG93ZXIpICovCisJc3RydWN0IGF0aDVrX3BkZ2Fpbl9pbmZvICpwZF9jdXJ2ZXM7CiB9OwogCi0vKiBQZXIgcmF0ZSBjYWxpYnJhdGlvbiBkYXRhIGZvciBlYWNoIG1vZGUsIHVzZWQgZm9yIHBvd2VyIHRhYmxlIHNldHVwICovCisvKiBQZXIgcmF0ZSBjYWxpYnJhdGlvbiBkYXRhIGZvciBlYWNoIG1vZGUsCisgKiB1c2VkIGZvciByYXRlIHBvd2VyIHRhYmxlIHNldHVwLgorICogTm90ZTogVmFsdWVzIGluIDAuNWRCIHVuaXRzICovCiBzdHJ1Y3QgYXRoNWtfcmF0ZV9wY2FsX2luZm8gewogCXUxNglmcmVxOyAvKiBGcmVxdWVuY3kgKi8KLQkvKiBQb3dlciBsZXZlbCBmb3IgNi0yNE1iaXQvcyByYXRlcyAqLworCS8qIFBvd2VyIGxldmVsIGZvciA2LTI0TWJpdC9zIHJhdGVzIG9yCisJICogMU1iIHJhdGUgKi8KIAl1MTYJdGFyZ2V0X3Bvd2VyXzZ0bzI0OwotCS8qIFBvd2VyIGxldmVsIGZvciAzNk1iaXQgcmF0ZSAqLworCS8qIFBvd2VyIGxldmVsIGZvciAzNk1iaXQgcmF0ZSBvcgorCSAqIDJNYiByYXRlICovCiAJdTE2CXRhcmdldF9wb3dlcl8zNjsKLQkvKiBQb3dlciBsZXZlbCBmb3IgNDhNYml0IHJhdGUgKi8KKwkvKiBQb3dlciBsZXZlbCBmb3IgNDhNYml0IHJhdGUgb3IKKwkgKiA1LjVNYml0IHJhdGUgKi8KIAl1MTYJdGFyZ2V0X3Bvd2VyXzQ4OwotCS8qIFBvd2VyIGxldmVsIGZvciA1NE1iaXQgcmF0ZSAqLworCS8qIFBvd2VyIGxldmVsIGZvciA1NE1iaXQgcmF0ZSBvcgorCSAqIDExTWJpdCByYXRlICovCiAJdTE2CXRhcmdldF9wb3dlcl81NDsKIH07CiAKQEAgLTMyOSwxMiArMzgwLDYgQEAKIAl1MTYJZWVfY2NrX29mZG1fcG93ZXJfZGVsdGE7CiAJdTE2CWVlX3NjYWxlZF9jY2tfZGVsdGE7CiAKLQkvKiBVc2VkIGZvciB0eCB0aGVybWFsIGFkanVzdG1lbnQgKGVlcHJvbV9pbml0LCByZnJlZ3MpICovCi0JdTE2CWVlX3R4X2NsaXA7Ci0JdTE2CWVlX3B3ZF84NDsKLQl1MTYJZWVfcHdkXzkwOwotCXUxNgllZV9nYWluX3NlbGVjdDsKLQogCS8qIFJGIENhbGlicmF0aW9uIHNldHRpbmdzIChyZXNldCwgcmZyZWdzKSAqLwogCXUxNgllZV9pX2NhbFtBUjVLX0VFUFJPTV9OX01PREVTXTsKIAl1MTYJZWVfcV9jYWxbQVI1S19FRVBST01fTl9NT0RFU107CkBAIC0zNjIsMjMgKzQwNywyNSBAQAogCS8qIFBvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KIAl1MTYJZWVfZmFsc2VfZGV0ZWN0W0FSNUtfRUVQUk9NX05fTU9ERVNdOwogCi0JLyogTnVtYmVyIG9mIHBkIGdhaW4gY3VydmVzIHBlciBtb2RlIChSRjI0MTMpICovCi0JdTggZWVfcGRfZ2FpbnNbQVI1S19FRVBST01fTl9NT0RFU107CisJLyogTnVtYmVyIG9mIHBkIGdhaW4gY3VydmVzIHBlciBtb2RlICovCisJdTgJZWVfcGRfZ2FpbnNbQVI1S19FRVBST01fTl9NT0RFU107CisJLyogQmFjayBtYXBwaW5nIHBkY3VydmUgbnVtYmVyIC0+IHBkY3VydmUgaW5kZXggaW4gcGQtPnBkX2N1cnZlcyAqLworCXU4CWVlX3BkY190b19pZHhbQVI1S19FRVBST01fTl9NT0RFU11bQVI1S19FRVBST01fTl9QRF9HQUlOU107CiAKLQl1OCBlZV9uX3BpZXJzW0FSNUtfRUVQUk9NX05fTU9ERVNdOworCXU4CWVlX25fcGllcnNbQVI1S19FRVBST01fTl9NT0RFU107CiAJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvCWVlX3B3cl9jYWxfYVtBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTl07Ci0Jc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvCWVlX3B3cl9jYWxfYltBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl07Ci0Jc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvCWVlX3B3cl9jYWxfZ1tBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl07CisJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvCWVlX3B3cl9jYWxfYltBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl9NQVhdOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbwllZV9wd3JfY2FsX2dbQVI1S19FRVBST01fTl8yR0haX0NIQU5fTUFYXTsKIAogCS8qIFBlciByYXRlIHRhcmdldCBwb3dlciBsZXZlbHMgKi8KLQl1MTYJZWVfcmF0ZV90YXJnZXRfcHdyX251bVtBUjVLX0VFUFJPTV9OX01PREVTXTsKKwl1OAllZV9yYXRlX3RhcmdldF9wd3JfbnVtW0FSNUtfRUVQUk9NX05fTU9ERVNdOwogCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbwllZV9yYXRlX3Rwd3JfYVtBUjVLX0VFUFJPTV9OXzVHSFpfQ0hBTl07Ci0Jc3RydWN0IGF0aDVrX3JhdGVfcGNhbF9pbmZvCWVlX3JhdGVfdHB3cl9iW0FSNUtfRUVQUk9NX05fMkdIWl9DSEFOXTsKLQlzdHJ1Y3QgYXRoNWtfcmF0ZV9wY2FsX2luZm8JZWVfcmF0ZV90cHdyX2dbQVI1S19FRVBST01fTl8yR0haX0NIQU5dOworCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbwllZV9yYXRlX3Rwd3JfYltBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl9NQVhdOworCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbwllZV9yYXRlX3Rwd3JfZ1tBUjVLX0VFUFJPTV9OXzJHSFpfQ0hBTl9NQVhdOwogCiAJLyogQ29uZm9ybWFuY2UgdGVzdCBsaW1pdHMgKFVudXNlZCkgKi8KLQl1MTYJZWVfY3RsczsKLQl1MTYJZWVfY3RsW0FSNUtfRUVQUk9NX01BWF9DVExTXTsKKwl1OAllZV9jdGxzOworCXU4CWVlX2N0bFtBUjVLX0VFUFJPTV9NQVhfQ1RMU107CiAJc3RydWN0IGF0aDVrX2VkZ2VfcG93ZXIgZWVfY3RsX3B3cltBUjVLX0VFUFJPTV9OX0VER0VTICogQVI1S19FRVBST01fTUFYX0NUTFNdOwogCiAJLyogTm9pc2UgRmxvb3IgQ2FsaWJyYXRpb24gc2V0dGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2dwaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2dwaW8uYwppbmRleCBiNzcyMDVhLi42NGEyN2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9ncGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvZ3Bpby5jCkBAIC04Myw3ICs4Myw3IEBACiBpbnQgYXRoNWtfaHdfc2V0X2dwaW9faW5wdXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIGdwaW8pCiB7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlpZiAoZ3BpbyA+IEFSNUtfTlVNX0dQSU8pCisJaWYgKGdwaW8gPj0gQVI1S19OVU1fR1BJTykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsCkBAIC05OSw3ICs5OSw3IEBACiBpbnQgYXRoNWtfaHdfc2V0X2dwaW9fb3V0cHV0KHN0cnVjdCBhdGg1a19odyAqYWgsIHUzMiBncGlvKQogewogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0JaWYgKGdwaW8gPiBBUjVLX05VTV9HUElPKQorCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLApAQCAtMTE1LDcgKzExNSw3IEBACiB1MzIgYXRoNWtfaHdfZ2V0X2dwaW8oc3RydWN0IGF0aDVrX2h3ICphaCwgdTMyIGdwaW8pCiB7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlpZiAoZ3BpbyA+IEFSNUtfTlVNX0dQSU8pCisJaWYgKGdwaW8gPj0gQVI1S19OVU1fR1BJTykKIAkJcmV0dXJuIDB4ZmZmZmZmZmY7CiAKIAkvKiBHUElPIGlucHV0IG1hZ2ljICovCkBAIC0xMzEsNyArMTMxLDcgQEAKIAl1MzIgZGF0YTsKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCi0JaWYgKGdwaW8gPiBBUjVLX05VTV9HUElPKQorCWlmIChncGlvID49IEFSNUtfTlVNX0dQSU8pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogR1BJTyBvdXRwdXQgbWFnaWMgKi8KQEAgLTE1NCw3ICsxNTQsNyBAQAogCXUzMiBkYXRhOwogCiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlpZiAoZ3BpbyA+IEFSNUtfTlVNX0dQSU8pCisJaWYgKGdwaW8gPj0gQVI1S19OVU1fR1BJTykKIAkJcmV0dXJuOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2luaXR2YWxzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9pbml0dmFscy5jCmluZGV4IDQ1MGJkNmUuLjYxZmI2MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2luaXR2YWxzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvaW5pdHZhbHMuYwpAQCAtMiw3ICsyLDcgQEAKICAqIEluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3MgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDcgUmV5ayBGbG9ldGVyIDxyZXlrQG9wZW5ic2Qub3JnPgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgogICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKQEAgLTM0MCw3ICszNDAsNyBAQAogCSAqIGNvbW1vbiBvbiBhbGwgY2FyZHMvbW9kZXMuCiAJICogTm90ZTogVGFibGUgaXMgcmV3cml0dGVuIGR1cmluZwogCSAqIHR4cG93ZXIgc2V0dXAgbGF0ZXIgdXNpbmcgY2FsaWJyYXRpb24KLQkgKiBkYXRhIGV0Yy4gc28gbmV4dCB3cml0ZSBpcyBub24tY29tbW9uCisJICogZGF0YSBldGMuIHNvIG5leHQgd3JpdGUgaXMgbm9uLWNvbW1vbiAqLwogCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigxKSwgMHgwNmZmMDVmZiB9LAogCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigyKSwgMHgwN2ZmMDdmZiB9LAogCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigzKSwgMHgwOGZmMDhmZiB9LApAQCAtMzcxLDcgKzM3MSw3IEBACiAJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDI4KSwgMHgzYWZmM2FmZiB9LAogCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUigyOSksIDB4M2FmZjNhZmYgfSwKIAl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVIoMzApLCAweDNhZmYzYWZmIH0sCi0JeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDMxKSwgMHgzYWZmM2FmZiB9LCovCisJeyBBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKDMxKSwgMHgzYWZmM2FmZiB9LAogCXsgQVI1S19QSFlfQ0NLVFhDVEwsIDB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfUEhZKDY0MiksIDB4NTAzZTQ2NDYgfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwgMHg2NDgwNDE2YyB9LApAQCAtMzg2LDg1ICszODYsODUgQEAKIH07CiAKIC8qIEluaXRpYWwgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyBmb3IgQVI1MjExCi0gKiBYWFg6IGhvdyBhYm91dCBnIC8gZ1R1cmJvID8gUkY1MTExIHN1cHBvcnRzIGl0LCBob3cgYWJvdXQgQVI1MjExID8KLSAqIE1heWJlIDUyMTEgc3VwcG9ydHMgT0ZETS1vbmx5IGcgYnV0IHdlIG5lZWQgdG8gdGVzdCBpdCAhCisgKiA1MjExIHN1cHBvcnRzIE9GRE0tb25seSBnIChkcmFmdCBnKSBidXQgd2UKKyAqIG5lZWQgdG8gdGVzdCBpdCAhCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgYXI1MjExX2luaV9tb2RlW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCS8qCSAgYQkgICAgICBhVHVyYm8JICBiCQkqLwotCQl7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMWQgfSB9LAorCS8qCSAgYQkgICAgYVR1cmJvCSAgYgkgIGcgKE9GRE0pICAgICovCisJICAgeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDFkLCAweDAwMDAwMDE1IH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygwKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDEpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMiksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygzKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDQpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNSksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg2KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDcpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoOCksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg5KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19TTE9ULAotCQl7IDB4MDAwMDAxNjgsIDB4MDAwMDAxZTAsIDB4MDAwMDAxYjggfSB9LAorCSAgIHsgMHgwMDAwMDE2OCwgMHgwMDAwMDFlMCwgMHgwMDAwMDFiOCwgMHgwMDAwMDE2OCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX1NJRlMsCi0JCXsgMHgwMDAwMDIzMCwgMHgwMDAwMDFlMCwgMHgwMDAwMDBiMCB9IH0sCisJICAgeyAweDAwMDAwMjMwLCAweDAwMDAwMWUwLCAweDAwMDAwMGIwLCAweDAwMDAwMjMwIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfRUlGUywKLQkJeyAweDAwMDAwZDk4LCAweDAwMDAxMTgwLCAweDAwMDAxZjQ4IH0gfSwKKwkgICB7IDB4MDAwMDBkOTgsIDB4MDAwMDExODAsIDB4MDAwMDFmNDgsIDB4MDAwMDBkOTggfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19NSVNDLAotCQl7IDB4MDAwMGEwZTAsIDB4MDAwMTQwNjgsIDB4MDAwMDU4ODAgfSB9LAorCSAgIHsgMHgwMDAwYTBlMCwgMHgwMDAxNDA2OCwgMHgwMDAwNTg4MCwgMHgwMDAwYTBlMCB9IH0sCiAJeyBBUjVLX1RJTUVfT1VULAotCQl7IDB4MDQwMDA0MDAsIDB4MDgwMDA4MDAsIDB4MjAwMDMwMDAgfSB9LAorCSAgIHsgMHgwNDAwMDQwMCwgMHgwODAwMDgwMCwgMHgyMDAwMzAwMCwgMHgwNDAwMDQwMCB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDBlOGQ4ZmE3LCAweDBlOGQ4ZmNmLCAweDAxNjA4Zjk1IH0gfSwKKwkgICB7IDB4MGU4ZDhmYTcsIDB4MGU4ZDhmY2YsIDB4MDE2MDhmOTUsIDB4MGU4ZDhmYTcgfSB9LAogCXsgQVI1S19QSFlfVFVSQk8sCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKIAl7IEFSNUtfUEhZKDgpLAotCQl7IDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMTAyMDAgfSB9LAorCSAgIHsgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAxMDIwMCwgMHgwMjAyMDIwMCB9IH0sCiAJeyBBUjVLX1BIWSg5KSwKLQkJeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwNzA3IH0gfSwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDA3MDcsIDB4MDAwMDBlMGUgfSB9LAogCXsgQVI1S19QSFkoMTApLAotCQl7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMTAwMDAgfSB9LAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAxMDAwMCwgMHgwYTAyMDAwMSB9IH0sCiAJeyBBUjVLX1BIWSgxMyksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKIAl7IEFSNUtfUEhZKDE0KSwKLQkJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiIH0gfSwKKwkgICB7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAogCXsgQVI1S19QSFkoMTcpLAotCQl7IDB4MTM3MjE2OWMsIDB4MTM3MjE2YTUsIDB4MTM3MjE2YTggfSB9LAorCSAgIHsgMHgxMzcyMTY5YywgMHgxMzcyMTZhNSwgMHgxMzcyMTZhOCwgMHgxMzcyMTY5YyB9IH0sCiAJeyBBUjVLX1BIWSgxOCksCi0JCXsgMHgwMDE4YmE2NywgMHgwMDE4YmE2NywgMHgwMDE4YmE2OSB9IH0sCisJICAgeyAweDAwMThiYTY3LCAweDAwMThiYTY3LCAweDAwMThiYTY5LCAweDAwMThiYTY5IH0gfSwKIAl7IEFSNUtfUEhZKDIwKSwKLQkJeyAweDBjMjhiNGUwLCAweDBjMjhiNGUwLCAweDBjMjhiNGUwIH0gfSwKKwkgICB7IDB4MGMyOGI0ZTAsIDB4MGMyOGI0ZTAsIDB4MGMyOGI0ZTAsIDB4MGMyOGI0ZTAgfSB9LAogCXsgQVI1S19QSFlfU0lHLAotCQl7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VjMDBkMmUgfSB9LAorCSAgIHsgMHg3ZTgwMGQyZSwgMHg3ZTgwMGQyZSwgMHg3ZWMwMGQyZSwgMHg3ZTgwMGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JCXsgMHgzMTM3NWQ1ZSwgMHgzMTM3NWQ1ZSwgMHgzMTNhNWQ1ZSB9IH0sCisJICAgeyAweDMxMzc1ZDVlLCAweDMxMzc1ZDVlLCAweDMxM2E1ZDVlLCAweDMxMzc1ZDVlIH0gfSwKIAl7IEFSNUtfUEhZX0FHQ0NUTCwKLQkJeyAweDAwMDBiZDEwLCAweDAwMDBiZDEwLCAweDAwMDBiZDM4IH0gfSwKKwkgICB7IDB4MDAwMGJkMTAsIDB4MDAwMGJkMTAsIDB4MDAwMGJkMzgsIDB4MDAwMGJkMTAgfSB9LAogCXsgQVI1S19QSFlfTkYsCi0JCXsgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9IH0sCisJICAgeyAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwLCAweDAwMDFjZTAwIH0gfSwKIAl7IEFSNUtfUEhZX1JYX0RFTEFZLAotCQl7IDB4MDAwMDI3MTAsIDB4MDAwMDI3MTAsIDB4MDAwMDE1N2MgfSB9LAorCSAgIHsgMHgwMDAwMjcxMCwgMHgwMDAwMjcxMCwgMHgwMDAwMTU3YywgMHgwMDAwMjcxMCB9IH0sCiAJeyBBUjVLX1BIWSg3MCksCi0JCXsgMHgwMDAwMDE5MCwgMHgwMDAwMDE5MCwgMHgwMDAwMDA4NCB9IH0sCisJICAgeyAweDAwMDAwMTkwLCAweDAwMDAwMTkwLCAweDAwMDAwMDg0LCAweDAwMDAwMTkwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4NmZlMDEwMjAsIDB4NmZlMDEwMjAsIDB4NmZlMDA5MjAgfSB9LAotCXsgQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFXzUyMTEsCi0JCXsgMHgwNWZmMTRmZiwgMHgwNWZmMTRmZiwgMHgwNWZmMTRmZiB9IH0sCisJICAgeyAweDZmZTAxMDIwLCAweDZmZTAxMDIwLCAweDZmZTAwOTIwLCAweDZmZTAxMDIwIH0gfSwKKwl7IEFSNUtfUEhZX1BDREFDX1RYUE9XRVJfQkFTRSwKKwkgICB7IDB4MDVmZjE0ZmYsIDB4MDVmZjE0ZmYsIDB4MDVmZjE0ZmYsIDB4MDVmZjE5ZmYgfSB9LAogCXsgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF80LAotCQl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTAgfSB9LAorCSAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9IH0sCiB9OwogCiAvKiBJbml0aWFsIHJlZ2lzdGVyIHNldHRpbmdzIGZvciBBUjUyMTIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIGFyNTIxMl9pbmlbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIGFyNTIxMl9pbmlfY29tbW9uX3N0YXJ0W10gPSB7CiAJeyBBUjVLX1JYRFAsCQkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1JYQ0ZHLAkJMHgwMDAwMDAwNSB9LAogCXsgQVI1S19NSUJDLAkJMHgwMDAwMDAwMCB9LApAQCAtNDg1LDkxICs0ODUsODMgQEAKIAl7IEFSNUtfUVVFVUVfVFhEUCg5KSwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19EQ1VfRlAsCQkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0RDVV9UWFAsCQkweDAwMDAwMDAwIH0sCi0JeyBBUjVLX0RDVV9UWF9GSUxURVJfMF9CQVNFLAkweDAwMDAwMDAwIH0sCi0JLyogVW5rbm93biB0YWJsZSAqLwotCXsgMHgxMDc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEwYjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTBmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMTM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDExNzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTFiOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMWY4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEyMzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTI3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMmI4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEyZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTMzOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxMzc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEzYjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTNmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNDM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE0NzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTRiOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNGY4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE1MzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTU3OCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNWI4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE1ZjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTYzOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNjc4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE2YjgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTZmOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxNzM4LCAweDAwMDAwMDAwIH0sCi0JeyAweDE3NzgsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTdiOCwgMHgwMDAwMDAwMCB9LAotCXsgMHgxN2Y4LCAweDAwMDAwMDAwIH0sCi0JeyAweDEwM2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTA3YywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMGJjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEwZmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTEzYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMTdjLCAweDAwMDAwMDAwIH0sCi0JeyAweDExYmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTFmYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMjNjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEyN2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTJiYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxMmZjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEzM2MsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTM3YywgMHgwMDAwMDAwMCB9LAotCXsgMHgxM2JjLCAweDAwMDAwMDAwIH0sCi0JeyAweDEzZmMsIDB4MDAwMDAwMDAgfSwKLQl7IDB4MTQzYywgMHgwMDAwMDAwMCB9LAotCXsgMHgxNDdjLCAweDAwMDAwMDAwIH0sCisJLyogVHggZmlsdGVyIHRhYmxlIDAgKDMyIGVudHJpZXMpICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgwKSwgIDB4MDAwMDAwMDAgfSwgLyogRENVIDAgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDEpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMiksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgzKSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDQpLCAgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgMSAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoNSksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCg2KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDcpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoOCksICAweDAwMDAwMDAwIH0sIC8qIERDVSAyICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCg5KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDEwKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTEpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxMiksIDB4MDAwMDAwMDAgfSwgLyogRENVIDMgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDEzKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTQpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxNSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDE2KSwgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgNCAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMTcpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgxOCksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDE5KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjApLCAweDAwMDAwMDAwIH0sIC8qIERDVSA1ICovCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyMSksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDIyKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjMpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyNCksIDB4MDAwMDAwMDAgfSwgLyogRENVIDYgKi8KKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDI1KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjYpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgyNyksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDI4KSwgMHgwMDAwMDAwMCB9LCAvKiBEQ1UgNyAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzAoMjkpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMCgzMCksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8wKDMxKSwgMHgwMDAwMDAwMCB9LAorCS8qIFR4IGZpbHRlciB0YWJsZSAxICgxNiBlbnRyaWVzKSAqLworCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMCksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxKSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDIpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMyksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSg0KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDUpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoNiksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSg3KSwgIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDgpLCAgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoOSksICAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxMCksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDExKSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMTIpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfMSgxMyksIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfRENVX1RYX0ZJTFRFUl8xKDE0KSwgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19EQ1VfVFhfRklMVEVSXzEoMTUpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfQ0xSLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX0RDVV9UWF9GSUxURVJfU0VULCAweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0RDVV9UWF9GSUxURVJfQ0xSLCAweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0RDVV9UWF9GSUxURVJfU0VULCAweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1NUQV9JRDEsCQkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0JTU19JRDAsCQkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0JTU19JRDEsCQkweDAwMDAwMDAwIH0sCi0JLyp7IEFSNUtfUlNTSV9USFIsCTB4MDAwMDAwMDAgfSwqLwkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX0JFQUNPTl81MjExLAkweDAwMDAwMDAwIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfQ0ZQX1BFUklPRF81MjExLCAweDAwMDAwMDAwIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfVElNRVIwXzUyMTEsCTB4MDAwMDAwMzAgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19USU1FUjFfNTIxMSwJMHgwMDA3ZmZmZiB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX1RJTUVSMl81MjExLAkweDAxZmZmZmZmIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfVElNRVIzXzUyMTEsCTB4MDAwMDAwMzEgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLwotCXsgQVI1S19DRlBfRFVSXzUyMTEsCTB4MDAwMDAwMDAgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLworCXsgQVI1S19CRUFDT05fNTIxMSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19DRlBfUEVSSU9EXzUyMTEsIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfVElNRVIwXzUyMTEsCTB4MDAwMDAwMzAgfSwKKwl7IEFSNUtfVElNRVIxXzUyMTEsCTB4MDAwN2ZmZmYgfSwKKwl7IEFSNUtfVElNRVIyXzUyMTEsCTB4MDFmZmZmZmYgfSwKKwl7IEFSNUtfVElNRVIzXzUyMTEsCTB4MDAwMDAwMzEgfSwKKwl7IEFSNUtfQ0ZQX0RVUl81MjExLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1JYX0ZJTFRFUl81MjExLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0RJQUdfU1dfNTIxMSwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19BRERBQ19URVNULAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0RFRkFVTFRfQU5URU5OQSwJMHgwMDAwMDAwMCB9LAotCXsgMHg4MDgwLCAweDAwMDAwMDAwIH0sCi0JLyp7IDB4ODA1YywgMHhmZmZmYzdmZiB9LCovIC8qIE9sZCB2YWx1ZSAqLwotCXsgMHg4MDVjLCAweDAwMGZjNzhmIH0sCi0JeyBBUjVLX05BVl81MjExLAkweDAwMDAwMDAwIH0sCS8qIE5vdCBmb3VuZCBvbiByZWNlbnQgKi8KLQl7IEFSNUtfUlRTX09LXzUyMTEsCTB4MDAwMDAwMDAgfSwJLyogZHVtcHMgYnV0IGl0IG1ha2VzICAqLwotCXsgQVI1S19SVFNfRkFJTF81MjExLAkweDAwMDAwMDAwIH0sCS8qIHNlbnNlIHRvIHJlc2V0IGNvdW50ZXJzICovCi0JeyBBUjVLX0FDS19GQUlMXzUyMTEsCTB4MDAwMDAwMDAgfSwJLyogc2luY2UgcGN1IHJlZ2lzdGVycyAqLwotCXsgQVI1S19GQ1NfRkFJTF81MjExLAkweDAwMDAwMDAwIH0sCS8qIGFyZSBza2lwZWQgZHVyaW5nIGNoYW4qLwotCXsgQVI1S19CRUFDT05fQ05UXzUyMTEsIDB4MDAwMDAwMDAgfSwJLyogY2hhbmdlICovCisJeyBBUjVLX0ZSQU1FX0NUTF9RT1NNLCAJMHgwMDBmYzc4ZiB9LAogCXsgQVI1S19YUk1PREUsCQkweDJhODIzMDFhIH0sCiAJeyBBUjVLX1hSREVMQVksCQkweDA1ZGMwMWUwIH0sCiAJeyBBUjVLX1hSVElNRU9VVCwJMHgxZjQwMjcxMCB9LAogCXsgQVI1S19YUkNISVJQLAkJMHgwMWY0MDAwMCB9LAogCXsgQVI1S19YUlNUT01QLAkJMHgwMDAwMWUxYyB9LAotCXsgQVI1S19TTEVFUDAsCQkweDAwMDJhYWFhIH0sCS8qIEZvdW5kIG9uIFN1cGVyQUcgY2FyZHMgKi8KLQl7IEFSNUtfU0xFRVAxLAkJMHgwMjAwNTU1NSB9LAkvKiBGb3VuZCBvbiBTdXBlckFHIGNhcmRzICovCi0JeyBBUjVLX1NMRUVQMiwJCTB4MDAwMDAwMDAgfSwJLyogRm91bmQgb24gU3VwZXJBRyBjYXJkcyAqLworCXsgQVI1S19TTEVFUDAsCQkweDAwMDJhYWFhIH0sCisJeyBBUjVLX1NMRUVQMSwJCTB4MDIwMDU1NTUgfSwKKwl7IEFSNUtfU0xFRVAyLAkJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19CU1NfSURNMCwJMHhmZmZmZmZmZiB9LAogCXsgQVI1S19CU1NfSURNMSwJMHgwMDAwZmZmZiB9LAogCXsgQVI1S19UWFBDLAkJMHgwMDAwMDAwMCB9LApAQCAtNTc3LDcgKzU2OSw4IEBACiAJeyBBUjVLX1BST0ZDTlRfUlgsCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfUFJPRkNOVF9SWENMUiwJMHgwMDAwMDAwMCB9LAogCXsgQVI1S19QUk9GQ05UX0NZQ0xFLAkweDAwMDAwMDAwIH0sCi0JeyAweDgwZmMsIDB4MDAwMDAwODggfSwKKwl7IEFSNUtfUVVJRVRfQ1RMMSwJMHgwMDAwMDA4OCB9LAorCS8qIEluaXRpYWwgcmF0ZSBkdXJhdGlvbiB0YWJsZSAoMzIgZW50cmllcyApKi8KIAl7IEFSNUtfUkFURV9EVVIoMCksCTB4MDAwMDAwMDAgfSwKIAl7IEFSNUtfUkFURV9EVVIoMSksCTB4MDAwMDAwOGMgfSwKIAl7IEFSNUtfUkFURV9EVVIoMiksCTB4MDAwMDAwZTQgfSwKQEAgLTYxMCw4ODEgKzYwMyw2MjUgQEAKIAl7IEFSNUtfUkFURV9EVVIoMjkpLAkweDAwMDAwMDdmIH0sCiAJeyBBUjVLX1JBVEVfRFVSKDMwKSwJMHgwMDAwMDBhMiB9LAogCXsgQVI1S19SQVRFX0RVUigzMSksCTB4MDAwMDAwMDAgfSwKLQl7IDB4ODEwMCwgMHgwMDAxMDAwMn0sCisJeyBBUjVLX1FVSUVUX0NUTDIsCTB4MDAwMTAwMDIgfSwKIAl7IEFSNUtfVFNGX1BBUk0sCTB4MDAwMDAwMDEgfSwKLQl7IDB4ODEwOCwgMHgwMDAwMDBjMCB9LAorCXsgQVI1S19RT1NfTk9BQ0ssCTB4MDAwMDAwYzAgfSwKIAl7IEFSNUtfUEhZX0VSUl9GSUwsCTB4MDAwMDAwMDAgfSwKLQl7IDB4ODExMCwgMHgwMDAwMDE2OCB9LAotCXsgMHg4MTE0LCAweDAwMDAwMDAwIH0sCi0JLyogU29tZSBraW5kIG9mIHRhYmxlCi0JICogYWxzbyBub3RpY2UgLi4uMDM8LTAyPC0wMTwtMDApICovCi0JeyAweDg3YzAsIDB4MDMwMjAxMDAgfSwKLQl7IDB4ODdjNCwgMHgwNzA2MDUwNCB9LAotCXsgMHg4N2M4LCAweDBiMGEwOTA4IH0sCi0JeyAweDg3Y2MsIDB4MGYwZTBkMGMgfSwKLQl7IDB4ODdkMCwgMHgxMzEyMTExMCB9LAotCXsgMHg4N2Q0LCAweDE3MTYxNTE0IH0sCi0JeyAweDg3ZDgsIDB4MWIxYTE5MTggfSwKLQl7IDB4ODdkYywgMHgxZjFlMWQxYyB9LAotCS8qIGxvb3AgPyAqLwotCXsgMHg4N2UwLCAweDAzMDIwMTAwIH0sCi0JeyAweDg3ZTQsIDB4MDcwNjA1MDQgfSwKLQl7IDB4ODdlOCwgMHgwYjBhMDkwOCB9LAotCXsgMHg4N2VjLCAweDBmMGUwZDBjIH0sCi0JeyAweDg3ZjAsIDB4MTMxMjExMTAgfSwKLQl7IDB4ODdmNCwgMHgxNzE2MTUxNCB9LAotCXsgMHg4N2Y4LCAweDFiMWExOTE4IH0sCi0JeyAweDg3ZmMsIDB4MWYxZTFkMWMgfSwKLQkvKiBQSFkgcmVnaXN0ZXJzICovCi0JLyp7IEFSNUtfUEhZX0FHQywgMHgwMDAwMDAwMCB9LCovCi0JeyBBUjVLX1BIWSgzKSwJMHhhZDg0OGUxOSB9LAotCXsgQVI1S19QSFkoNCksCTB4N2QyOGUwMDAgfSwKLQl7IEFSNUtfUEhZX1RJTUlOR18zLCAweDljMGE5ZjZiIH0sCi0JeyBBUjVLX1BIWV9BQ1QsCTB4MDAwMDAwMDAgfSwKLQkvKnsgQVI1S19QSFkoMTEpLCAweDAwMDIyZmZlIH0sKi8KLQkvKnsgQVI1S19QSFkoMTUpLCAweDAwMDIwMTAwIH0sKi8KLQl7IEFSNUtfUEhZKDE2KSwJMHgyMDZhMDE3YSB9LAotCS8qeyBBUjVLX1BIWSgxOSksIDB4MTI4NDYxM2MgfSwqLwotCXsgQVI1S19QSFkoMjEpLAkweDAwMDAwODU5IH0sCi0JeyBBUjVLX1BIWSg2NCksCTB4MDAwMDAwMDAgfSwKLQl7IEFSNUtfUEhZKDY1KSwJMHgwMDAwMDAwMCB9LAotCXsgQVI1S19QSFkoNjYpLAkweDAwMDAwMDAwIH0sCi0JeyBBUjVLX1BIWSg2NyksCTB4MDA4MDAwMDAgfSwKLQl7IEFSNUtfUEhZKDY4KSwJMHgwMDAwMDAwMSB9LAorCXsgQVI1S19YUkxBVF9UWCwJMHgwMDAwMDE2OCB9LAorCXsgQVI1S19BQ0tTSUZTLAkJMHgwMDAwMDAwMCB9LAorCS8qIFJhdGUgLT4gZGIgdGFibGUKKwkgKiBub3RpY2UgLi4uMDM8LTAyPC0wMTwtMDAgISAqLworCXsgQVI1S19SQVRFMkRCKDApLAkweDAzMDIwMTAwIH0sCisJeyBBUjVLX1JBVEUyREIoMSksCTB4MDcwNjA1MDQgfSwKKwl7IEFSNUtfUkFURTJEQigyKSwJMHgwYjBhMDkwOCB9LAorCXsgQVI1S19SQVRFMkRCKDMpLAkweDBmMGUwZDBjIH0sCisJeyBBUjVLX1JBVEUyREIoNCksCTB4MTMxMjExMTAgfSwKKwl7IEFSNUtfUkFURTJEQig1KSwJMHgxNzE2MTUxNCB9LAorCXsgQVI1S19SQVRFMkRCKDYpLAkweDFiMWExOTE4IH0sCisJeyBBUjVLX1JBVEUyREIoNyksCTB4MWYxZTFkMWMgfSwKKwkvKiBEYiAtPiBSYXRlIHRhYmxlICovCisJeyBBUjVLX0RCMlJBVEUoMCksCTB4MDMwMjAxMDAgfSwKKwl7IEFSNUtfREIyUkFURSgxKSwJMHgwNzA2MDUwNCB9LAorCXsgQVI1S19EQjJSQVRFKDIpLAkweDBiMGEwOTA4IH0sCisJeyBBUjVLX0RCMlJBVEUoMyksCTB4MGYwZTBkMGMgfSwKKwl7IEFSNUtfREIyUkFURSg0KSwJMHgxMzEyMTExMCB9LAorCXsgQVI1S19EQjJSQVRFKDUpLAkweDE3MTYxNTE0IH0sCisJeyBBUjVLX0RCMlJBVEUoNiksCTB4MWIxYTE5MTggfSwKKwl7IEFSNUtfREIyUkFURSg3KSwJMHgxZjFlMWQxYyB9LAorCS8qIFBIWSByZWdpc3RlcnMgKENvbW1vbiBzZXR0aW5ncworCSAqIGZvciBhbGwgY2hpcHMvbW9kZXMpICovCisJeyBBUjVLX1BIWSgzKSwJCTB4YWQ4NDhlMTkgfSwKKwl7IEFSNUtfUEhZKDQpLAkJMHg3ZDI4ZTAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzMsCTB4OWMwYTlmNmIgfSwKKwl7IEFSNUtfUEhZX0FDVCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZKDE2KSwJCTB4MjA2YTAxN2EgfSwKKwl7IEFSNUtfUEhZKDIxKSwJCTB4MDAwMDA4NTkgfSwKKwl7IEFSNUtfUEhZX0JJTl9NQVNLXzEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0JJTl9NQVNLXzIsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0JJTl9NQVNLXzMsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0JJTl9NQVNLX0NUTCwgMHgwMDgwMDAwMCB9LAorCXsgQVI1S19QSFlfQU5UX0NUTCwJMHgwMDAwMDAwMSB9LAogCS8qeyBBUjVLX1BIWSg3MSksIDB4MDAwMDA5MmEgfSwqLyAvKiBPbGQgdmFsdWUgKi8KLQl7IEFSNUtfUEhZKDcxKSwJMHgwMDAwMGM4MCB9LAotCXsgQVI1S19QSFlfSVEsCTB4MDUxMDAwMDAgfSwKLQl7IEFSNUtfUEhZKDc0KSwgMHgwMDAwMDAwMSB9LAotCXsgQVI1S19QSFkoNzUpLCAweDAwMDAwMDA0IH0sCisJeyBBUjVLX1BIWV9NQVhfUlhfTEVOLAkweDAwMDAwYzgwIH0sCisJeyBBUjVLX1BIWV9JUSwJCTB4MDUxMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1dBUk1fUkVTRVQsCTB4MDAwMDAwMDEgfSwKKwl7IEFSNUtfUEhZX0NUTCwJCTB4MDAwMDAwMDQgfSwKIAl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTEsIDB4MWUxZjIwMjIgfSwKIAl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTIsIDB4MGEwYjBjMGQgfSwKIAl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURV9NQVgsIDB4MDAwMDAwM2YgfSwKLQkvKnsgQVI1S19QSFkoODApLCAweDAwMDAwMDA0IH0sKi8KLQl7IEFSNUtfUEhZKDgyKSwgMHg5MjgwYjIxMiB9LAotCXsgQVI1S19QSFlfUkFEQVIsIDB4NWQ1MGUxODggfSwKKwl7IEFSNUtfUEhZKDgyKSwJCTB4OTI4MGIyMTIgfSwKKwl7IEFSNUtfUEhZX1JBREFSLAkweDVkNTBlMTg4IH0sCiAJLyp7IEFSNUtfUEhZKDg2KSwgMHgwMDAwMDBmZiB9LCovCi0JeyBBUjVLX1BIWSg4NyksIDB4MDA0YjZhOGUgfSwKLQl7IEFSNUtfUEhZKDkwKSwJMHgwMDAwMDNjZSB9LAotCXsgQVI1S19QSFkoOTIpLAkweDE5MmZiNTE1IH0sCi0JLyp7IEFSNUtfUEhZKDkzKSwgMHgwMDAwMDAwMCB9LCovCi0JeyBBUjVLX1BIWSg5NCksCTB4MDAwMDAwMDEgfSwKLQl7IEFSNUtfUEhZKDk1KSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFkoODcpLAkJMHgwMDRiNmE4ZSB9LAorCXsgQVI1S19QSFlfTkZUSFJFUywJMHgwMDAwMDNjZSB9LAorCXsgQVI1S19QSFlfUkVTVEFSVCwJMHgxOTJmYjUxNSB9LAorCXsgQVI1S19QSFkoOTQpLAkJMHgwMDAwMDAwMSB9LAorCXsgQVI1S19QSFlfUkZCVVNfUkVRLAkweDAwMDAwMDAwIH0sCiAJLyp7IEFSNUtfUEhZKDY0NCksIDB4MDA4MGEzMzMgfSwqLyAvKiBPbGQgdmFsdWUgKi8KIAkvKnsgQVI1S19QSFkoNjQ1KSwgMHgwMDIwNmMxMCB9LCovIC8qIE9sZCB2YWx1ZSAqLwotCXsgQVI1S19QSFkoNjQ0KSwgMHgwMDgwNjMzMyB9LAotCXsgQVI1S19QSFkoNjQ1KSwgMHgwMDEwNmMxMCB9LAotCXsgQVI1S19QSFkoNjQ2KSwgMHgwMDljNDA2MCB9LAotCXsgQVI1S19QSFkoNjQ3KSwgMHgxNDgzODAwYSB9LAotCS8qIHsgQVI1S19QSFkoNjQ4KSwgMHgwMTg4MzBjNiB9LCovIC8qIDI0MTMvMjQyNSAqLwotCXsgQVI1S19QSFkoNjQ4KSwgMHgwMTgzMTA2MSB9LAotCXsgQVI1S19QSFkoNjQ5KSwgMHgwMDAwMDQwMCB9LAorCXsgQVI1S19QSFkoNjQ0KSwJMHgwMDgwNjMzMyB9LAorCXsgQVI1S19QSFkoNjQ1KSwJMHgwMDEwNmMxMCB9LAorCXsgQVI1S19QSFkoNjQ2KSwJMHgwMDljNDA2MCB9LAorCS8qIHsgQVI1S19QSFkoNjQ3KSwgMHgxNDgzODAwYSB9LCAqLworCS8qIHsgQVI1S19QSFkoNjQ4KSwgMHgwMTgzMTA2MSB9LCAqLyAvKiBPbGQgdmFsdWUgKi8KKwl7IEFSNUtfUEhZKDY0OCksCTB4MDE4ODMwYzYgfSwKKwl7IEFSNUtfUEhZKDY0OSksCTB4MDAwMDA0MDAgfSwKIAkvKnsgQVI1S19QSFkoNjUwKSwgMHgwMDAwMDFiNSB9LCovCi0JeyBBUjVLX1BIWSg2NTEpLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWSg2NTEpLAkweDAwMDAwMDAwIH0sCiAJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEUzLCAweDIwMjAyMDIwIH0sCiAJeyBBUjVLX1BIWV9UWFBPV0VSX1JBVEUyLCAweDIwMjAyMDIwIH0sCiAJLyp7IEFSNUtfUEhZKDY1NSksIDB4MTNjODg5YWYgfSwqLwotCXsgQVI1S19QSFkoNjU2KSwgMHgzODQ5MGEyMCB9LAotCXsgQVI1S19QSFkoNjU3KSwgMHgwMDAwN2JiNiB9LAotCXsgQVI1S19QSFkoNjU4KSwgMHgwZmZmM2ZmYyB9LAotCS8qeyBBUjVLX1BIWV9DQ0tUWENUTCwgMHgwMDAwMDAwMCB9LCovCisJeyBBUjVLX1BIWSg2NTYpLAkweDM4NDkwYTIwIH0sCisJeyBBUjVLX1BIWSg2NTcpLAkweDAwMDA3YmI2IH0sCisJeyBBUjVLX1BIWSg2NTgpLAkweDBmZmYzZmZjIH0sCiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEFSNTIxMiAoV3JpdHRlbiBiZWZvcmUgYXI1MjEyX2luaSkgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgYXI1MjEyX2luaV9tb2RlX3N0YXJ0W10gPSB7Ci0JeyBBUjVLX1BIWSg2NDApLAotCS8qCSAgYS9YUgkgICAgICBhVHVyYm8JICBiCSAgICAgIGcgKERZTikJICBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDBiLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLQl7IEFSNUtfUEhZKDApLAotCQl7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDApLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCS8qCWEvWFIJICAgYVR1cmJvCSAgYgkgICBnIChEWU4pICAgICBnVHVyYm8gICAgICovCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUygxKSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDIpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoMyksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg0KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDUpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoNiksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfUVVFVUVfREZTX0xPQ0FMX0lGUyg3KSwKLQkJeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKKwkgICB7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAogCXsgQVI1S19RVUVVRV9ERlNfTE9DQUxfSUZTKDgpLAotCQl7IDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMWYsIDB4MDAyZmZjMGYsIDB4MDAyZmZjMGYgfSB9LAorCSAgIHsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCiAJeyBBUjVLX1FVRVVFX0RGU19MT0NBTF9JRlMoOSksCi0JCXsgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMxZiwgMHgwMDJmZmMwZiwgMHgwMDJmZmMwZiB9IH0sCisJICAgeyAweDAwMmZmYzBmLCAweDAwMmZmYzBmLCAweDAwMmZmYzFmLCAweDAwMmZmYzBmLCAweDAwMmZmYzBmIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfU0lGUywKLQkJeyAweDAwMDAwMjMwLCAweDAwMDAwMWUwLCAweDAwMDAwMGIwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0gfSwKKwkgICB7IDB4MDAwMDAyMzAsIDB4MDAwMDAxZTAsIDB4MDAwMDAwYjAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSB9LAogCXsgQVI1S19EQ1VfR0JMX0lGU19TTE9ULAotCQl7IDB4MDAwMDAxNjgsIDB4MDAwMDAxZTAsIDB4MDAwMDAxYjgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSB9LAorCSAgIHsgMHgwMDAwMDE2OCwgMHgwMDAwMDFlMCwgMHgwMDAwMDFiOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9IH0sCiAJeyBBUjVLX0RDVV9HQkxfSUZTX0VJRlMsCi0JCXsgMHgwMDAwMGU2MCwgMHgwMDAwMTE4MCwgMHgwMDAwMWYxYywgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9IH0sCisJICAgeyAweDAwMDAwZTYwLCAweDAwMDAxMTgwLCAweDAwMDAxZjFjLCAweDAwMDAzZTM4LCAweDAwMDAxMTgwIH0gfSwKIAl7IEFSNUtfRENVX0dCTF9JRlNfTUlTQywKLQkJeyAweDAwMDBhMGUwLCAweDAwMDE0MDY4LCAweDAwMDA1ODgwLCAweDAwMDBiMGUwLCAweDAwMDE0MDY4IH0gfSwKKwkgICB7IDB4MDAwMGEwZTAsIDB4MDAwMTQwNjgsIDB4MDAwMDU4ODAsIDB4MDAwMGIwZTAsIDB4MDAwMTQwNjggfSB9LAogCXsgQVI1S19USU1FX09VVCwKLQkJeyAweDAzZTgwM2U4LCAweDA2ZTAwNmUwLCAweDA0MjAwNDIwLCAweDA4NDAwODQwLCAweDA2ZTAwNmUwIH0gfSwKKwkgICB7IDB4MDNlODAzZTgsIDB4MDZlMDA2ZTAsIDB4MDQyMDA0MjAsIDB4MDg0MDA4NDAsIDB4MDZlMDA2ZTAgfSB9LAogCXsgQVI1S19QSFlfVFVSQk8sCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMyB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAzLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAzIH0gfSwKIAl7IEFSNUtfUEhZKDgpLAotCQl7IDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMTAyMDAsIDB4MDIwMjAyMDAsIDB4MDIwMjAyMDAgfSB9LAotCXsgQVI1S19QSFkoOSksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMDcwNywgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCi0JeyBBUjVLX1BIWSgxNyksCi0JCXsgMHgxMzcyMTYxYywgMHgxMzcyMWMyNSwgMHgxMzcyMTcyMiwgMHgxMzcyMTZhMiwgMHgxMzcyMWMyNSB9IH0sCisJICAgeyAweDAyMDIwMjAwLCAweDAyMDIwMjAwLCAweDAyMDEwMjAwLCAweDAyMDIwMjAwLCAweDAyMDIwMjAwIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDIsCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwNzA3LCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwl7IEFSNUtfUEhZX1NFVFRMSU5HLAorCSAgIHsgMHgxMzcyMTYxYywgMHgxMzcyMWMyNSwgMHgxMzcyMTcyMiwgMHgxMzcyMTZhMiwgMHgxMzcyMWMyNSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDVEwsCi0JCXsgMHgwMDAwOWQxMCwgMHgwMDAwOWQxMCwgMHgwMDAwOWQxOCwgMHgwMDAwOWQxOCwgMHgwMDAwOWQxOCB9IH0sCisJICAgeyAweDAwMDA5ZDEwLCAweDAwMDA5ZDEwLCAweDAwMDA5ZDE4LCAweDAwMDA5ZDE4LCAweDAwMDA5ZDE4IH0gfSwKIAl7IEFSNUtfUEhZX05GLAotCQl7IDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSB9LAotCXsgQVI1S19QSFkoMjYpLAotCQl7IDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAsIDB4NDA5YTQxOTAgfSB9LAorCSAgIHsgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCwgMHgwMDAxY2UwMCB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fSElHSF9USFIsCisJICAgeyAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwLCAweDQwOWE0MTkwIH0gfSwKIAl7IEFSNUtfUEhZKDcwKSwKLQkJeyAweDAwMDAwMWI4LCAweDAwMDAwMWI4LCAweDAwMDAwMDg0LCAweDAwMDAwMTA4LCAweDAwMDAwMWI4IH0gfSwKLQl7IEFSNUtfUEhZKDczKSwKLQkJeyAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1LCAweDEwMDU4YTA1IH0gfSwKKwkgICB7IDB4MDAwMDAxYjgsIDB4MDAwMDAxYjgsIDB4MDAwMDAwODQsIDB4MDAwMDAxMDgsIDB4MDAwMDAxYjggfSB9LAorCXsgQVI1S19QSFlfT0ZETV9TRUxGQ09SUiwKKwkgICB7IDB4MTAwNThhMDUsIDB4MTAwNThhMDUsIDB4MTAwNThhMDUsIDB4MTAwNThhMDUsIDB4MTAwNThhMDUgfSB9LAogCXsgMHhhMjMwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSB9LAorCSAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMCB9IH0sCiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEFSNTIxMiArIFJGNTExMSAoV3JpdHRlbiBhZnRlciBhcjUyMTJfaW5pKSAqLwotLyogTmV3IGR1bXAgcGVuZGluZyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSBhcjUyMTJfcmY1MTExX2luaV9tb2RlX2VuZFtdID0gewotCXsgQVI1S19QSFkoNjQwKSwgLyogVGhpcyBvbmUgZGlmZmVycyBmcm9tIGFyNTIxMl9pbmlfbW9kZV9zdGFydCAhICovCi0JLyoJICBhL1hSCSAgICAgIGFUdXJibwkgIGIJICAgICAgZyAoRFlOKQkgIGdUdXJibyAqLwotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDYsIDB4MDAwMDAwMDYgfSB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSByZjUxMTFfaW5pX21vZGVfZW5kW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCQl7IDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUsIDB4MDAwMDgwMTUgfSB9LAorCS8qCWEvWFIJICAgYVR1cmJvCSAgYgkgICBnIChEWU4pICAgICBnVHVyYm8gICAgICovCisJICAgeyAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1IH0gfSwKIAl7IEFSNUtfVVNFQ181MjExLAotCQl7IDB4MTI4ZDhmYTcsIDB4MDk4ODBmY2YsIDB4MDRlMDBmOTUsIDB4MTJlMDBmYWIsIDB4MDk4ODBmY2YgfSB9LAotCXsgQVI1S19QSFkoMTApLAotCQl7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMTAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAotCXsgQVI1S19QSFkoMTMpLAotCQl7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAotCXsgQVI1S19QSFkoMTQpLAotCQl7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAotCXsgQVI1S19QSFkoMTgpLAotCQl7IDB4MDAxOGRhNWEsIDB4MDAxOGRhNWEsIDB4MDAxOGNhNjksIDB4MDAxOGNhNjksIDB4MDAxOGNhNjkgfSB9LAotCXsgQVI1S19QSFkoMjApLAotCQl7IDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAgfSB9LAorCSAgIHsgMHgxMjhkOGZhNywgMHgwOTg4MGZjZiwgMHgwNGUwMGY5NSwgMHgxMmUwMGZhYiwgMHgwOTg4MGZjZiB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwzLAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAxMDEwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEw0LAorCSAgIHsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCisJeyBBUjVLX1BIWV9QQV9DVEwsCisJICAgeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKKwl7IEFSNUtfUEhZX0dBSU4sCisJICAgeyAweDAwMThkYTVhLCAweDAwMThkYTVhLCAweDAwMThjYTY5LCAweDAwMThjYTY5LCAweDAwMThjYTY5IH0gfSwKKwl7IEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkgICB7IDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAgfSB9LAogCXsgQVI1S19QSFlfU0lHLAotCQl7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VlODRkMmUsIDB4N2VlODRkMmUsIDB4N2U4MDBkMmUgfSB9LAorCSAgIHsgMHg3ZTgwMGQyZSwgMHg3ZTgwMGQyZSwgMHg3ZWU4NGQyZSwgMHg3ZWU4NGQyZSwgMHg3ZTgwMGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JCXsgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjE1ZSB9IH0sCi0JeyBBUjVLX1BIWSgyNyksCi0JCXsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MCwgMHgwNTBjYjA4MCB9IH0sCisJICAgeyAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2MTVlIH0gfSwKKwl7IEFSNUtfUEhZX1dFQUtfT0ZETV9MT1dfVEhSLAorCSAgIHsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MCwgMHgwNTBjYjA4MCB9IH0sCiAJeyBBUjVLX1BIWV9SWF9ERUxBWSwKLQkJeyAweDAwMDAyNzEwLCAweDAwMDAyNzEwLCAweDAwMDAxNTdjLCAweDAwMDAyYWY4LCAweDAwMDAyNzEwIH0gfSwKKwkgICB7IDB4MDAwMDI3MTAsIDB4MDAwMDI3MTAsIDB4MDAwMDE1N2MsIDB4MDAwMDJhZjgsIDB4MDAwMDI3MTAgfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JCXsgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MGQyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCB9IH0sCisJICAgeyAweGY3YjgxMDIwLCAweGY3YjgxMDIwLCAweGY3YjgwZDIwLCAweGY3YjgxMDIwLCAweGY3YjgxMDIwIH0gfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJeyAweDY0MmM0MTZhLCAweDY0MmM0MTZhLCAweDY0NDA0MTZhLCAweDY0NDA0MTZhLCAweDY0NDA0MTZhIH0gfSwKLQl7IDB4YTIxYywKLQkJeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NzM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKLQl7IEFSNUtfRENVX0ZQLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFlfQUdDLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTEpLAotCQl7IDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUgfSB9LAotCXsgQVI1S19QSFkoMTUpLAotCQl7IDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAgfSB9LAotCXsgQVI1S19QSFkoMTkpLAotCQl7IDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MgfSB9LAotCXsgQVI1S19QSFlfUEFQRF9QUk9CRSwKLQkJeyAweDAwMDA0ODgzLCAweDAwMDA0ODgzLCAweDAwMDA0ODgzLCAweDAwMDA0ODgzLCAweDAwMDA0ODgzIH0gfSwKLQl7IEFSNUtfUEhZKDgwKSwKLQkJeyAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKLQl7IEFSNUtfUEhZKDg2KSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZKDkzKSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZX1NQRU5ESU5HLAotCQl7IDB4MDAwMDAwMTgsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTggfSB9LAotCXsgQVI1S19QSFlfQ0NLVFhDVEwsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg2NDIpLAotCQl7IDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAotCXsgMHhhMjI4LAotCQl7IDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUsIDB4MDAwMDAxYjUgfSB9LAotCXsgMHhhMjNjLAotCQl7IDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYsIDB4MTNjODg5YWYgfSB9LAorCSAgIHsgMHg2NDJjNDE2YSwgMHg2NDJjNDE2YSwgMHg2NDQwNDE2YSwgMHg2NDQwNDE2YSwgMHg2NDQwNDE2YSB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfUlhfQ1RMXzQsCisJICAgeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NzM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIHJmNTExMV9pbmlfY29tbW9uX2VuZFtdID0geworCXsgQVI1S19EQ1VfRlAsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BR0MsIAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BRENfQ1RMLCAJMHgwMDAyMmZmZSB9LAorCXsgMHg5ODNjLCAJCTB4MDAwMjAxMDAgfSwKKwl7IEFSNUtfUEhZX0dBSU5fT0ZGU0VULAkweDEyODQ2MTNjIH0sCisJeyBBUjVLX1BIWV9QQVBEX1BST0JFLAkweDAwMDA0ODgzIH0sCisJeyAweDk5NDAsCQkweDAwMDAwMDA0IH0sCisJeyAweDk5NTgsCQkweDAwMDAwMGZmIH0sCisJeyAweDk5NzQsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9TUEVORElORywJMHgwMDAwMDAxOCB9LAorCXsgQVI1S19QSFlfQ0NLVFhDVEwsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsIDB4ZDAzZTY3ODggfSwKKwl7IEFSNUtfUEhZX0RBR19DQ0tfQ1RMLAkweDAwMDAwMWI1IH0sCisJeyAweGEyM2MsCQkweDEzYzg4OWFmIH0sCiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIEFSNTIxMiArIFJGNTExMiAoV3JpdHRlbiBhZnRlciBhcjUyMTJfaW5pKSAqLwotLyogWFhYOiBObyBkdW1wcyBmb3IgdHVyYm9nIHlldCwgYnV0IGkgZm91bmQgc2V0dGluZ3MgZnJvbSBvbGQgdmFsdWVzIHNvIGl0IHNob3VsZCBiZSBvayAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSBhcjUyMTJfcmY1MTEyX2luaV9tb2RlX2VuZFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSByZjUxMTJfaW5pX21vZGVfZW5kW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCS8qCSAgYS9YUgkgICAgICBhVHVyYm8JICBiCSAgICAgIGcgKERZTikJICBnVHVyYm8gKi8KLQkJeyAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1LCAweDAwMDA4MDE1IH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSwgMHgwMDAwODAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKLQl7IEFSNUtfUEhZKDEwKSwKLQkJeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKLQl7IEFSNUtfUEhZKDEzKSwKLQkJeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKLQl7IEFSNUtfUEhZKDE0KSwKLQkJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKLQl7IEFSNUtfUEhZKDE4KSwKLQkJeyAweDAwMThkYTZkLCAweDAwMThkYTZkLCAweDAwMThjYTc1LCAweDAwMThjYTc1LCAweDAwMThjYTc1IH0gfSwKLQl7IEFSNUtfUEhZKDIwKSwKLQkJeyAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwIH0gfSwKKwkgICB7IDB4MTI4ZDkzYTcsIDB4MDk4ODEzY2YsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMMywKKwkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMjAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMNCwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAorCXsgQVI1S19QSFlfUEFfQ1RMLAorCSAgIHsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCisJeyBBUjVLX1BIWV9HQUlOLAorCSAgIHsgMHgwMDE4ZGE2ZCwgMHgwMDE4ZGE2ZCwgMHgwMDE4Y2E3NSwgMHgwMDE4Y2E3NSwgMHgwMDE4Y2E3NSB9IH0sCisJeyBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJICAgeyAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwLCAweDBkZThiNGUwIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlODAwZDJlLCAweDdlODAwZDJlLCAweDdlZTgwZDJlLCAweDdlZTgwZDJlLCAweDdlZTgwZDJlIH0gfSwKKwkgICB7IDB4N2U4MDBkMmUsIDB4N2U4MDBkMmUsIDB4N2VlODBkMmUsIDB4N2VlODBkMmUsIDB4N2VlODBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUsIDB4MzEzNzY2NWUgfSB9LAotCXsgQVI1S19QSFkoMjcpLAotCQl7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAorCSAgIHsgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSwgMHgzMTM3NjY1ZSB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUiwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JCXsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCisJICAgeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4ZjdiODEwMjAsIDB4ZjdiODEwMjAsIDB4ZjdiODBkMTAsIDB4ZjdiODEwMTAsIDB4ZjdiODEwMTAgfSB9LAorCSAgIHsgMHhmN2I4MTAyMCwgMHhmN2I4MTAyMCwgMHhmN2I4MGQxMCwgMHhmN2I4MTAxMCwgMHhmN2I4MTAxMCB9IH0sCiAJeyBBUjVLX1BIWV9DQ0tUWENUTCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKLQl7IEFSNUtfUEhZKDY0MiksCi0JCXsgMHhkNmJlNjc4OCwgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKKwl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsCisJICAgeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJeyAweDY0MmMwMTQwLCAweDY0MmMwMTQwLCAweDY0NDJjMTYwLCAweDY0NDJjMTYwLCAweDY0NDJjMTYwIH0gfSwKLQl7IDB4YTIxYywKLQkJeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NzM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKLQl7IEFSNUtfRENVX0ZQLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFlfQUdDLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTEpLAotCQl7IDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUsIDB4MDAwMjJmZmUgfSB9LAotCXsgQVI1S19QSFkoMTUpLAotCQl7IDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAsIDB4MDAwMjAxMDAgfSB9LAotCXsgQVI1S19QSFkoMTkpLAotCQl7IDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MsIDB4MTI4NDYxM2MgfSB9LAotCXsgQVI1S19QSFlfUEFQRF9QUk9CRSwKLQkJeyAweDAwMDA0ODgyLCAweDAwMDA0ODgyLCAweDAwMDA0ODgyLCAweDAwMDA0ODgyLCAweDAwMDA0ODgyIH0gfSwKLQl7IEFSNUtfUEhZKDgwKSwKLQkJeyAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0LCAweDAwMDAwMDA0IH0gfSwKLQl7IEFSNUtfUEhZKDg2KSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZKDkzKSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDB4YTIyOCwKLQkJeyAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWI1IH0gfSwKLQl7IDB4YTIzYywKLQkJeyAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmLCAweDEzYzg4OWFmIH0gfSwKKwkgICB7IDB4NjQyYzAxNDAsIDB4NjQyYzAxNDAsIDB4NjQ0MmMxNjAsIDB4NjQ0MmMxNjAsIDB4NjQ0MmMxNjAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX1JYX0NUTF80LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODczODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjUxMTJfaW5pX2NvbW1vbl9lbmRbXSA9IHsKKwl7IEFSNUtfRENVX0ZQLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQUdDLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQURDX0NUTCwJMHgwMDAyMmZmZSB9LAorCXsgMHg5ODNjLAkJMHgwMDAyMDEwMCB9LAorCXsgQVI1S19QSFlfR0FJTl9PRkZTRVQsCTB4MTI4NDYxM2MgfSwKKwl7IEFSNUtfUEhZX1BBUERfUFJPQkUsCTB4MDAwMDQ4ODIgfSwKKwl7IDB4OTk0MCwJCTB4MDAwMDAwMDQgfSwKKwl7IDB4OTk1OCwJCTB4MDAwMDAwZmYgfSwKKwl7IDB4OTk3NCwJCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0RBR19DQ0tfQ1RMLAkweDAwMDAwMWI1IH0sCisJeyAweGEyM2MsCQkweDEzYzg4OWFmIH0sCiB9OwogCiAvKiBJbml0aWFsIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3MgZm9yIFJGNTQxMy81NDE0IChXcml0dGVuIGFmdGVyIGFyNTIxMl9pbmkpICovCi0vKiBYWFg6IE5vIGR1bXBzIGZvciB0dXJib2cgeWV0LCBzbyB0dXJib2cgaXMgdGhlIHNhbWUgd2l0aCBnIGhlcmUgd2l0aCBzb21lCi0gKiBtaW5vciB0d2Vha2luZyBiYXNlZCBvbiBkdW1wcyBmcm9tIG90aGVyIGNoaXBzICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9tb2RlIHJmNTQxM19pbmlfbW9kZV9lbmRbXSA9IHsKIAl7IEFSNUtfVFhDRkcsCi0JLyoJICBhL1hSCSAgICAgIGFUdXJibwkgIGIJICAgICAgZwkJICBnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDEyOGQ5M2E3LCAweDA5ODgxM2NmLCAweDA0ZTAxMzk1LCAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKLQl7IEFSNUtfUEhZKDEwKSwKLQkJeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKLQl7IEFSNUtfUEhZKDEzKSwKLQkJeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKLQl7IEFSNUtfUEhZKDE0KSwKLQkJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBiLCAweDAwMDAwMDBiIH0gfSwKLQl7IEFSNUtfUEhZKDE4KSwKLQkJeyAweDAwMThmYTYxLCAweDAwMThmYTYxLCAweDAwMWExYTYzLCAweDAwMWExYTYzLCAweDAwMWExYTYzIH0gfSwKLQl7IEFSNUtfUEhZKDIwKSwKLQkJeyAweDBjOThiNGUwLCAweDBjOThiNGUwLCAweDBjOThiMGRhLCAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKKwkgICB7IDB4MTI4ZDkzYTcsIDB4MDk4ODEzY2YsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMMywKKwkgICB7IDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEsIDB4MDUwMjAxMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAorCXsgQVI1S19QSFlfUkZfQ1RMNCwKKwkgICB7IDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSB9LAorCXsgQVI1S19QSFlfUEFfQ1RMLAorCSAgIHsgMHgwMDAwMDAwNywgMHgwMDAwMDAwNywgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCisJeyBBUjVLX1BIWV9HQUlOLAorCSAgIHsgMHgwMDE4ZmE2MSwgMHgwMDE4ZmE2MSwgMHgwMDFhMWE2MywgMHgwMDFhMWE2MywgMHgwMDFhMWE2MyB9IH0sCisJeyBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJICAgeyAweDBjOThiNGUwLCAweDBjOThiNGUwLCAweDBjOThiMGRhLCAweDBjOThiMGRhLCAweDBjOThiMGRhIH0gfSwKIAl7IEFSNUtfUEhZX1NJRywKLQkJeyAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlLCAweDdlYzgwZDJlIH0gfSwKKwkgICB7IDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAogCXsgQVI1S19QSFlfQUdDQ09BUlNFLAotCQl7IDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUgfSB9LAotCXsgQVI1S19QSFkoMjcpLAotCQl7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAorCSAgIHsgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSB9IH0sCisJeyBBUjVLX1BIWV9XRUFLX09GRE1fTE9XX1RIUiwKKwkgICB7IDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEsIDB4MDUwY2IwODEgfSB9LAogCXsgQVI1S19QSFlfUlhfREVMQVksCi0JCXsgMHgwMDAwMDdkMCwgMHgwMDAwMDdkMCwgMHgwMDAwMDQ0YywgMHgwMDAwMDg5OCwgMHgwMDAwMDdkMCB9IH0sCisJICAgeyAweDAwMDAwN2QwLCAweDAwMDAwN2QwLCAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKIAl7IEFSNUtfUEhZX0ZSQU1FX0NUTF81MjExLAotCQl7IDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODBkMDAsIDB4ZjdiODEwMDAsIDB4ZjdiODEwMDAgfSB9LAorCSAgIHsgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MGQwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCiAJeyBBUjVLX1BIWV9DQ0tUWENUTCwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDY0MiksCi0JCXsgMHhkNmJlNjc4OCwgMHhkNmJlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCwgMHhkMDNlNjc4OCB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19DUk9TU0NPUlIsCisJICAgeyAweGQ2YmU2Nzg4LCAweGQ2YmU2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKIAl7IEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJeyAweDAwMmVjMWUwLCAweDAwMmVjMWUwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwLCAweDAwMmFjMTIwIH0gfSwKLQl7IDB4YTIxYywKLQkJeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NjM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKKwkgICB7IDB4MDAyZWMxZTAsIDB4MDAyZWMxZTAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAsIDB4MDAyYWMxMjAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX1JYX0NUTF80LAorCSAgIHsgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODYzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9IH0sCiAJeyAweGEzMDAsCi0JCXsgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCB9IH0sCisJICAgeyAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwLCAweDE4MDEwMDAwIH0gfSwKIAl7IDB4YTMwNCwKLQkJeyAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyLCAweDMwMDMyNjAyIH0gfSwKKwkgICB7IDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIsIDB4MzAwMzI2MDIgfSB9LAogCXsgMHhhMzA4LAotCQl7IDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYsIDB4NDgwNzNlMDYgfSB9LAorCSAgIHsgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiB9IH0sCiAJeyAweGEzMGMsCi0JCXsgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSB9IH0sCisJICAgeyAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhLCAweDU2MGI0YzBhIH0gfSwKIAl7IDB4YTMxMCwKLQkJeyAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmLCAweDY0MWE2MDBmIH0gfSwKKwkgICB7IDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYsIDB4NjQxYTYwMGYgfSB9LAogCXsgMHhhMzE0LAotCQl7IDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIsIDB4Nzg0ZjZlMWIgfSB9LAorCSAgIHsgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiB9IH0sCiAJeyAweGEzMTgsCi0JCXsgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSB9IH0sCisJICAgeyAweDg2OGY3YzVhLCAweDg2OGY3YzVhLCAweDg2OGY3YzVhLCAweDg2OGY3YzVhLCAweDg2OGY3YzVhIH0gfSwKIAl7IDB4YTMxYywKLQkJeyAweDkwY2Y4NjViLCAweDkwY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViLCAweDhlY2Y4NjViIH0gfSwKKwkgICB7IDB4OTBjZjg2NWIsIDB4OTBjZjg2NWIsIDB4OGVjZjg2NWIsIDB4OGVjZjg2NWIsIDB4OGVjZjg2NWIgfSB9LAogCXsgMHhhMzIwLAotCQl7IDB4OWQ0Zjk3MGYsIDB4OWQ0Zjk3MGYsIDB4OWI0Zjk3MGYsIDB4OWI0Zjk3MGYsIDB4OWI0Zjk3MGYgfSB9LAorCSAgIHsgMHg5ZDRmOTcwZiwgMHg5ZDRmOTcwZiwgMHg5YjRmOTcwZiwgMHg5YjRmOTcwZiwgMHg5YjRmOTcwZiB9IH0sCiAJeyAweGEzMjQsCi0JCXsgMHhhN2NmYTM4ZiwgMHhhN2NmYTM4ZiwgMHhhM2NmOWY4ZiwgMHhhM2NmOWY4ZiwgMHhhM2NmOWY4ZiB9IH0sCisJICAgeyAweGE3Y2ZhMzhmLCAweGE3Y2ZhMzhmLCAweGEzY2Y5ZjhmLCAweGEzY2Y5ZjhmLCAweGEzY2Y5ZjhmIH0gfSwKIAl7IDB4YTMyOCwKLQkJeyAweGI1NWZhZjFmLCAweGI1NWZhZjFmLCAweGIzNWZhZjFmLCAweGIzNWZhZjFmLCAweGIzNWZhZjFmIH0gfSwKKwkgICB7IDB4YjU1ZmFmMWYsIDB4YjU1ZmFmMWYsIDB4YjM1ZmFmMWYsIDB4YjM1ZmFmMWYsIDB4YjM1ZmFmMWYgfSB9LAogCXsgMHhhMzJjLAotCQl7IDB4YmRkZmI5OWYsIDB4YmRkZmI5OWYsIDB4YmJkZmI5OWYsIDB4YmJkZmI5OWYsIDB4YmJkZmI5OWYgfSB9LAorCSAgIHsgMHhiZGRmYjk5ZiwgMHhiZGRmYjk5ZiwgMHhiYmRmYjk5ZiwgMHhiYmRmYjk5ZiwgMHhiYmRmYjk5ZiB9IH0sCiAJeyAweGEzMzAsCi0JCXsgMHhjYjdmYzUzZiwgMHhjYjdmYzUzZiwgMHhjYjdmYzczZiwgMHhjYjdmYzczZiwgMHhjYjdmYzczZiB9IH0sCisJICAgeyAweGNiN2ZjNTNmLCAweGNiN2ZjNTNmLCAweGNiN2ZjNzNmLCAweGNiN2ZjNzNmLCAweGNiN2ZjNzNmIH0gfSwKIAl7IDB4YTMzNCwKLQkJeyAweGQ1ZmZkMWJmLCAweGQ1ZmZkMWJmLCAweGQzZmZkMWJmLCAweGQzZmZkMWJmLCAweGQzZmZkMWJmIH0gfSwKLQl7IEFSNUtfRENVX0ZQLAotCQl7IDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAsIDB4MDAwMDAzZTAgfSB9LAotCXsgMHg0MDY4LAotCQl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAgfSB9LAotCXsgMHg4MDYwLAotCQl7IDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYsIDB4MDAwMDAwMGYgfSB9LAotCXsgMHg4MDljLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MGEwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTE4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTFjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTIwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTI4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTJjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTMwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTM4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTNjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHg4MTQwLAotCQl7IDB4ODAwMDAzZjksIDB4ODAwMDAzZjksIDB4ODAwMDAzZjksIDB4ODAwMDAzZjksIDB4ODAwMDAzZjkgfSB9LAotCXsgMHg4MTQ0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFlfQUdDLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTEpLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgQVI1S19QSFkoMTUpLAotCQl7IDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAsIDB4MDAyMDA0MDAgfSB9LAotCXsgQVI1S19QSFkoMTkpLAotCQl7IDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MsIDB4MTI4NDIzM2MgfSB9LAotCXsgQVI1S19QSFlfU0NSLAotCQl7IDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYsIDB4MDAwMDAwMWYgfSB9LAotCXsgQVI1S19QSFlfU0xNVCwKLQkJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUEhZX1NDQUwsCi0JCXsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi0JeyBBUjVLX1BIWSg4NiksCi0JCXsgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiwgMHgwMDA4MWZmZiB9IH0sCi0JeyBBUjVLX1BIWSg5NiksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSg5NyksCi0JCXsgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCwgMHgwMjgwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMDQpLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTIwKSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEyMSksCi0JCXsgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSB9IH0sCi0JeyBBUjVLX1BIWSgxMjIpLAotCQl7IDB4M2M0NjY0NzgsIDB4M2M0NjY0NzgsIDB4M2M0NjY0NzgsIDB4M2M0NjY0NzgsIDB4M2M0NjY0NzggfSB9LAotCXsgQVI1S19QSFkoMTIzKSwKLQkJeyAweDAwMDAwMGFhLCAweDAwMDAwMGFhLCAweDAwMDAwMGFhLCAweDAwMDAwMGFhLCAweDAwMDAwMGFhIH0gfSwKLQl7IEFSNUtfUEhZX1NDTE9DSywKLQkJeyAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjLCAweDAwMDAwMDBjIH0gfSwKLQl7IEFSNUtfUEhZX1NERUxBWSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZX1NQRU5ESU5HLAotCQl7IDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQgfSB9LAotCXsgMHhhMjI4LAotCQl7IDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUgfSB9LAotCXsgMHhhMjNjLAotCQl7IDB4OTNjODg5YWYsIDB4OTNjODg5YWYsIDB4OTNjODg5YWYsIDB4OTNjODg5YWYsIDB4OTNjODg5YWYgfSB9LAotCXsgMHhhMjRjLAotCQl7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAotCXsgMHhhMjUwLAotCQl7IDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAsIDB4MDAwMGEwMDAgfSB9LAotCXsgMHhhMjU0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjU4LAotCQl7IDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAsIDB4MGNjNzUzODAgfSB9LAotCXsgMHhhMjVjLAotCQl7IDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEsIDB4MGYwZjBmMDEgfSB9LAotCXsgMHhhMjYwLAotCQl7IDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEsIDB4NWY2OTBmMDEgfSB9LAotCXsgMHhhMjY0LAotCQl7IDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEsIDB4MDA0MThhMTEgfSB9LAotCXsgMHhhMjY4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMjZjLAotCQl7IDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEsIDB4MGMzMGMxNmEgfSB9LAotCXsgMHhhMjcwLAotCQl7IDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAsIDB4MDA4MjA4MjAgfSB9LAotCXsgMHhhMjc0LAotCQl7IDB4MDgxYjdjYWEsIDB4MDgxYjdjYWEsIDB4MDgxYjdjYWEsIDB4MDgxYjdjYWEsIDB4MDgxYjdjYWEgfSB9LAotCXsgMHhhMjc4LAotCQl7IDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSB9LAotCXsgMHhhMjdjLAotCQl7IDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UsIDB4MDUxNzAxY2UgfSB9LAotCXsgMHhhMzM4LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzNjLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQwLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQ0LAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgMHhhMzQ4LAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzRjLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzUwLAotCQl7IDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYsIDB4M2ZmZmZmZmYgfSB9LAotCXsgMHhhMzU0LAotCQl7IDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYsIDB4MDAwM2ZmZmYgfSB9LAotCXsgMHhhMzU4LAotCQl7IDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYsIDB4NzlhOGFhMWYgfSB9LAotCXsgMHhhMzVjLAotCQl7IDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYsIDB4MDY2YzQyMGYgfSB9LAotCXsgMHhhMzYwLAotCQl7IDB4MGYyODIyMDcsIDB4MGYyODIyMDcsIDB4MGYyODIyMDcsIDB4MGYyODIyMDcsIDB4MGYyODIyMDcgfSB9LAotCXsgMHhhMzY0LAotCQl7IDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUsIDB4MTc2MDE2ODUgfSB9LAotCXsgMHhhMzY4LAotCQl7IDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQsIDB4MWY4MDExMDQgfSB9LAotCXsgMHhhMzZjLAotCQl7IDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMsIDB4MzdhMDBjMDMgfSB9LAotCXsgMHhhMzcwLAotCQl7IDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMsIDB4M2ZjNDA4ODMgfSB9LAotCXsgMHhhMzc0LAotCQl7IDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMsIDB4NTdjMDA4MDMgfSB9LAotCXsgMHhhMzc4LAotCQl7IDB4NWZkODA2ODIsIDB4NWZkODA2ODIsIDB4NWZkODA2ODIsIDB4NWZkODA2ODIsIDB4NWZkODA2ODIgfSB9LAotCXsgMHhhMzdjLAotCQl7IDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIsIDB4N2ZlMDA0ODIgfSB9LAotCXsgMHhhMzgwLAotCQl7IDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEsIDB4N2YzYzdiYmEgfSB9LAotCXsgMHhhMzg0LAotCQl7IDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAsIDB4ZjMzMDdmZjAgfSB9LAorCSAgIHsgMHhkNWZmZDFiZiwgMHhkNWZmZDFiZiwgMHhkM2ZmZDFiZiwgMHhkM2ZmZDFiZiwgMHhkM2ZmZDFiZiB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjU0MTNfaW5pX2NvbW1vbl9lbmRbXSA9IHsKKwl7IEFSNUtfRENVX0ZQLAkJMHgwMDAwMDNlMCB9LAorCXsgQVI1S181NDE0X0NCQ0ZHLAkweDAwMDAwMDEwIH0sCisJeyBBUjVLX1NFUV9NQVNLLAkweDAwMDAwMDBmIH0sCisJeyAweDgwOWMsCQkweDAwMDAwMDAwIH0sCisJeyAweDgwYTAsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JQ19RT1NfQ1RMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JQ19RT1NfU0VMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JU0NfTU9ERSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19PRkRNX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfQ0NLX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDFfTUFTSywgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMiwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMl9NQVNLLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1RTRl9USFJFUywJMHgwMDAwMDAwMCB9LAorCXsgMHg4MTQwLAkJMHg4MDAwMDNmOSB9LAorCXsgMHg4MTQ0LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQUdDLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQURDX0NUTCwJMHgwMDAwYTAwMCB9LAorCXsgMHg5ODNjLAkJMHgwMDIwMDQwMCB9LAorCXsgQVI1S19QSFlfR0FJTl9PRkZTRVQsIDB4MTI4NDIzM2MgfSwKKwl7IEFSNUtfUEhZX1NDUiwJCTB4MDAwMDAwMWYgfSwKKwl7IEFSNUtfUEhZX1NMTVQsCTB4MDAwMDAwODAgfSwKKwl7IEFSNUtfUEhZX1NDQUwsCTB4MDAwMDAwMGUgfSwKKwl7IDB4OTk1OCwJCTB4MDAwODFmZmYgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR183LAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfOCwJMHgwMjgwMDAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzExLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9IRUFWWV9DTElQX0VOQUJMRSwgMHgwMDAwMDAwMCB9LAorCXsgMHg5OWU0LAkJMHhhYWFhYWFhYSB9LAorCXsgMHg5OWU4LAkJMHgzYzQ2NjQ3OCB9LAorCXsgMHg5OWVjLAkJMHgwMDAwMDBhYSB9LAorCXsgQVI1S19QSFlfU0NMT0NLLAkweDAwMDAwMDBjIH0sCisJeyBBUjVLX1BIWV9TREVMQVksCTB4MDAwMDAwZmYgfSwKKwl7IEFSNUtfUEhZX1NQRU5ESU5HLAkweDAwMDAwMDE0IH0sCisJeyBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwgMHgwMDAwMDliNSB9LAorCXsgMHhhMjNjLAkJMHg5M2M4ODlhZiB9LAorCXsgQVI1S19QSFlfRkFTVF9BREMsCTB4MDAwMDAwMDEgfSwKKwl7IDB4YTI1MCwJCTB4MDAwMGEwMDAgfSwKKwl7IEFSNUtfUEhZX0JMVUVUT09USCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHMSwJMHgwY2M3NTM4MCB9LAorCXsgMHhhMjVjLAkJMHgwZjBmMGYwMSB9LAorCXsgMHhhMjYwLAkJMHg1ZjY5MGYwMSB9LAorCXsgMHhhMjY0LAkJMHgwMDQxOGExMSB9LAorCXsgMHhhMjY4LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHNSwJMHgwYzMwYzE2YSB9LAorCXsgMHhhMjcwLCAweDAwODIwODIwIH0sCisJeyAweGEyNzQsIDB4MDgxYjdjYWEgfSwKKwl7IDB4YTI3OCwgMHgxY2U3MzljZSB9LAorCXsgMHhhMjdjLCAweDA1MTcwMWNlIH0sCisJeyAweGEzMzgsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTMzYywgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzQwLCAweDAwMDAwMDAwIH0sCisJeyAweGEzNDQsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTM0OCwgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzRjLCAweDNmZmZmZmZmIH0sCisJeyAweGEzNTAsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM1NCwgMHgwMDAzZmZmZiB9LAorCXsgMHhhMzU4LCAweDc5YThhYTFmIH0sCisJeyAweGEzNWMsIDB4MDY2YzQyMGYgfSwKKwl7IDB4YTM2MCwgMHgwZjI4MjIwNyB9LAorCXsgMHhhMzY0LCAweDE3NjAxNjg1IH0sCisJeyAweGEzNjgsIDB4MWY4MDExMDQgfSwKKwl7IDB4YTM2YywgMHgzN2EwMGMwMyB9LAorCXsgMHhhMzcwLCAweDNmYzQwODgzIH0sCisJeyAweGEzNzQsIDB4NTdjMDA4MDMgfSwKKwl7IDB4YTM3OCwgMHg1ZmQ4MDY4MiB9LAorCXsgMHhhMzdjLCAweDdmZTAwNDgyIH0sCisJeyAweGEzODAsIDB4N2YzYzdiYmEgfSwKKwl7IDB4YTM4NCwgMHhmMzMwN2ZmMCB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBSRjI0MTMvMjQxNCAoV3JpdHRlbiBhZnRlciBhcjUyMTJfaW5pKSAqLwotLyogWFhYOiBObyBkdW1wcyBmb3IgdHVyYm9nIHlldCwgc28gdHVyYm9nIGlzIHRoZSBzYW1lIHdpdGggZyBoZXJlIHdpdGggc29tZQotICogbWlub3IgdHdlYWtpbmcgYmFzZWQgb24gZHVtcHMgZnJvbSBvdGhlciBjaGlwcyAqLworLyogWFhYOiBhIG1vZGUgPyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfbW9kZSByZjI0MTNfaW5pX21vZGVfZW5kW10gPSB7CiAJeyBBUjVLX1RYQ0ZHLAotCS8qCSAgICAgIGIJCWcJICAgIGdUdXJibyAqLwotCQl7IDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUsIDB4MDAwMDAwMTUgfSB9LAorCS8qCWEvWFIJICAgYVR1cmJvCSAgYgkgICBnIChEWU4pICAgICBnVHVyYm8gICAgICovCisJICAgeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKIAl7IEFSNUtfVVNFQ181MjExLAotCQl7IDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAotCXsgQVI1S19QSFkoMTApLAotCQl7IDB4MDUwMjAwMDAsIDB4MGEwMjAwMDEsIDB4MGEwMjAwMDEgfSB9LAotCXsgQVI1S19QSFkoMTMpLAotCQl7IDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAsIDB4MDAwMDBlMDAgfSB9LAotCXsgQVI1S19QSFkoMTQpLAotCQl7IDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEsIDB4MDAwMDAwMGEgfSB9LAotCXsgQVI1S19QSFkoMTgpLAotCQl7IDB4MDAxYTZhNjQsIDB4MDAxYTZhNjQsIDB4MDAxYTZhNjQgfSB9LAotCXsgQVI1S19QSFkoMjApLAotCQl7IDB4MGRlOGIwZGEsIDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEgfSB9LAorCSAgIHsgMHgxMjhkOTNhNywgMHgwOTg4MTNjZiwgMHgwNGUwMTM5NSwgMHgxMmUwMTNhYiwgMHgwOTg4MTNjZiB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEwzLAorCSAgIHsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSwgMHgwNTAyMDAwMCwgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCisJeyBBUjVLX1BIWV9SRl9DVEw0LAorCSAgIHsgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCwgMHgwMDAwMGUwMCB9IH0sCisJeyBBUjVLX1BIWV9QQV9DVEwsCisJICAgeyAweDAwMDAwMDAyLCAweDAwMDAwMDAyLCAweDAwMDAwMDBhLCAweDAwMDAwMDBhLCAweDAwMDAwMDBhIH0gfSwKKwl7IEFSNUtfUEhZX0dBSU4sCisJICAgeyAweDAwMThkYTZkLCAweDAwMThkYTZkLCAweDAwMWE2YTY0LCAweDAwMWE2YTY0LCAweDAwMWE2YTY0IH0gfSwKKwl7IEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkgICB7IDB4MGRlOGI0ZTAsIDB4MGRlOGI0ZTAsIDB4MGRlOGIwZGEsIDB4MGM5OGIwZGEsIDB4MGRlOGIwZGEgfSB9LAogCXsgQVI1S19QSFlfU0lHLAotCQl7IDB4N2VlODBkMmUsIDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAorCSAgIHsgMHg3ZTgwMGQyZSwgMHg3ZTgwMGQyZSwgMHg3ZWU4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZTgwMGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JCXsgMHgzMTM3NjY1ZSwgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSB9IH0sCi0JeyBBUjVLX1BIWSgyNyksCi0JCXsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCisJICAgeyAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzc2NjVlLCAweDMxMzk2MDVlLCAweDMxMzc2NjVlIH0gfSwKKwl7IEFSNUtfUEhZX1dFQUtfT0ZETV9MT1dfVEhSLAorCSAgIHsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCiAJeyBBUjVLX1BIWV9SWF9ERUxBWSwKLQkJeyAweDAwMDAwNDRjLCAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKKwkgICB7IDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JCXsgMHhmN2I4MGQwMCwgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCisJICAgeyAweGY3YjgxMDAwLCAweGY3YjgxMDAwLCAweGY3YjgwZDAwLCAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKIAl7IEFSNUtfUEhZX0NDS1RYQ1RMLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoNjQyKSwKLQkJeyAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX0NST1NTQ09SUiwKKwkgICB7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAogCXsgQVI1S19QSFlfR0FJTl8yR0haLAotCQl7IDB4MDA0MmMxNDAsIDB4MDA0MmMxNDAsIDB4MDA0MmMxNDAgfSB9LAotCXsgMHhhMjFjLAotCQl7IDB4MTg2MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAotCXsgQVI1S19EQ1VfRlAsCi0JCXsgMHgwMDAwMDNlMCwgMHgwMDAwMDNlMCwgMHgwMDAwMDNlMCB9IH0sCi0JeyAweDgwNjAsCi0JCXsgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZiB9IH0sCi0JeyAweDgxMTgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMWMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMmMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxM2MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxNDAsCi0JCXsgMHg4MDAwMDBhOCwgMHg4MDAwMDBhOCwgMHg4MDAwMDBhOCB9IH0sCi0JeyAweDgxNDQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWV9BR0MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMSksCi0JCXsgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxNSksCi0JCXsgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCB9IH0sCi0JeyBBUjVLX1BIWSgxOSksCi0JCXsgMHgxMjg0MjMzYywgMHgxMjg0MjMzYywgMHgxMjg0MjMzYyB9IH0sCi0JeyBBUjVLX1BIWV9TQ1IsCi0JCXsgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZiB9IH0sCi0JeyBBUjVLX1BIWV9TTE1ULAotCQl7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgQVI1S19QSFlfU0NBTCwKLQkJeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLQl7IEFSNUtfUEhZKDg2KSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZKDk2KSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDk3KSwKLQkJeyAweDAyODAwMDAwLCAweDAyODAwMDAwLCAweDAyODAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEwNCksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMjApLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoMTIxKSwKLQkJeyAweGFhYWFhYWFhLCAweGFhYWFhYWFhLCAweGFhYWFhYWFhIH0gfSwKLQl7IEFSNUtfUEhZKDEyMiksCi0JCXsgMHgzYzQ2NjQ3OCwgMHgzYzQ2NjQ3OCwgMHgzYzQ2NjQ3OCB9IH0sCi0JeyBBUjVLX1BIWSgxMjMpLAotCQl7IDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEsIDB4MDAwMDAwYWEgfSB9LAotCXsgQVI1S19QSFlfU0NMT0NLLAotCQl7IDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMsIDB4MDAwMDAwMGMgfSB9LAotCXsgQVI1S19QSFlfU0RFTEFZLAotCQl7IDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmYgfSB9LAotCXsgQVI1S19QSFlfU1BFTkRJTkcsCi0JCXsgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCB9IH0sCi0JeyAweGEyMjgsCi0JCXsgMHgwMDAwMDliNSwgMHgwMDAwMDliNSwgMHgwMDAwMDliNSB9IH0sCi0JeyAweGEyM2MsCi0JCXsgMHg5M2M4ODlhZiwgMHg5M2M4ODlhZiwgMHg5M2M4ODlhZiB9IH0sCi0JeyAweGEyNGMsCi0JCXsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCi0JeyAweGEyNTAsCi0JCXsgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCB9IH0sCi0JeyAweGEyNTQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyNTgsCi0JCXsgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCB9IH0sCi0JeyAweGEyNWMsCi0JCXsgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSB9IH0sCi0JeyAweGEyNjAsCi0JCXsgMHg1ZjY5MGYwMSwgMHg1ZjY5MGYwMSwgMHg1ZjY5MGYwMSB9IH0sCi0JeyAweGEyNjQsCi0JCXsgMHgwMDQxOGExMSwgMHgwMDQxOGExMSwgMHgwMDQxOGExMSB9IH0sCi0JeyAweGEyNjgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyNmMsCi0JCXsgMHgwYzMwYzE2YSwgMHgwYzMwYzE2YSwgMHgwYzMwYzE2YSB9IH0sCi0JeyAweGEyNzAsCi0JCXsgMHgwMDgyMDgyMCwgMHgwMDgyMDgyMCwgMHgwMDgyMDgyMCB9IH0sCi0JeyAweGEyNzQsCi0JCXsgMHgwMDFiN2NhYSwgMHgwMDFiN2NhYSwgMHgwMDFiN2NhYSB9IH0sCi0JeyAweGEyNzgsCi0JCXsgMHgxY2U3MzljZSwgMHgxY2U3MzljZSwgMHgxY2U3MzljZSB9IH0sCi0JeyAweGEyN2MsCi0JCXsgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSB9IH0sCi0JeyAweGEzMDAsCi0JCXsgMHgxODAxMDAwMCwgMHgxODAxMDAwMCwgMHgxODAxMDAwMCB9IH0sCi0JeyAweGEzMDQsCi0JCXsgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiwgMHgzMDAzMjYwMiB9IH0sCi0JeyAweGEzMDgsCi0JCXsgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiwgMHg0ODA3M2UwNiB9IH0sCi0JeyAweGEzMGMsCi0JCXsgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSwgMHg1NjBiNGMwYSB9IH0sCi0JeyAweGEzMTAsCi0JCXsgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiwgMHg2NDFhNjAwZiB9IH0sCi0JeyAweGEzMTQsCi0JCXsgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiwgMHg3ODRmNmUxYiB9IH0sCi0JeyAweGEzMTgsCi0JCXsgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSwgMHg4NjhmN2M1YSB9IH0sCi0JeyAweGEzMWMsCi0JCXsgMHg4ZWNmODY1YiwgMHg4ZWNmODY1YiwgMHg4ZWNmODY1YiB9IH0sCi0JeyAweGEzMjAsCi0JCXsgMHg5ZDRmOTcwZiwgMHg5ZDRmOTcwZiwgMHg5ZDRmOTcwZiB9IH0sCi0JeyAweGEzMjQsCi0JCXsgMHhhNWNmYTE4ZiwgMHhhNWNmYTE4ZiwgMHhhNWNmYTE4ZiB9IH0sCi0JeyAweGEzMjgsCi0JCXsgMHhiNTVmYWYxZiwgMHhiNTVmYWYxZiwgMHhiNTVmYWYxZiB9IH0sCi0JeyAweGEzMmMsCi0JCXsgMHhiZGRmYjk5ZiwgMHhiZGRmYjk5ZiwgMHhiZGRmYjk5ZiB9IH0sCi0JeyAweGEzMzAsCi0JCXsgMHhjZDdmYzczZiwgMHhjZDdmYzczZiwgMHhjZDdmYzczZiB9IH0sCi0JeyAweGEzMzQsCi0JCXsgMHhkNWZmZDFiZiwgMHhkNWZmZDFiZiwgMHhkNWZmZDFiZiB9IH0sCi0JeyAweGEzMzgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzM2MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzNDAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzNDQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEzNDgsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNGMsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNTAsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNTQsCi0JCXsgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiB9IH0sCi0JeyAweGEzNTgsCi0JCXsgMHg3OWE4YWExZiwgMHg3OWE4YWExZiwgMHg3OWE4YWExZiB9IH0sCi0JeyAweGEzNWMsCi0JCXsgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiB9IH0sCi0JeyAweGEzNjAsCi0JCXsgMHgwZjI4MjIwNywgMHgwZjI4MjIwNywgMHgwZjI4MjIwNyB9IH0sCi0JeyAweGEzNjQsCi0JCXsgMHgxNzYwMTY4NSwgMHgxNzYwMTY4NSwgMHgxNzYwMTY4NSB9IH0sCi0JeyAweGEzNjgsCi0JCXsgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCB9IH0sCi0JeyAweGEzNmMsCi0JCXsgMHgzN2EwMGMwMywgMHgzN2EwMGMwMywgMHgzN2EwMGMwMyB9IH0sCi0JeyAweGEzNzAsCi0JCXsgMHgzZmM0MDg4MywgMHgzZmM0MDg4MywgMHgzZmM0MDg4MyB9IH0sCi0JeyAweGEzNzQsCi0JCXsgMHg1N2MwMDgwMywgMHg1N2MwMDgwMywgMHg1N2MwMDgwMyB9IH0sCi0JeyAweGEzNzgsCi0JCXsgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiB9IH0sCi0JeyAweGEzN2MsCi0JCXsgMHg3ZmUwMDQ4MiwgMHg3ZmUwMDQ4MiwgMHg3ZmUwMDQ4MiB9IH0sCi0JeyAweGEzODAsCi0JCXsgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSB9IH0sCi0JeyAweGEzODQsCi0JCXsgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCB9IH0sCisJICAgeyAweDAwMmMwMTQwLCAweDAwMmMwMTQwLCAweDAwNDJjMTQwLCAweDAwNDJjMTQwLCAweDAwNDJjMTQwIH0gfSwKKwl7IEFSNUtfUEhZX0NDS19SWF9DVExfNCwKKwkgICB7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg2MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmkgcmYyNDEzX2luaV9jb21tb25fZW5kW10gPSB7CisJeyBBUjVLX0RDVV9GUCwJCTB4MDAwMDAzZTAgfSwKKwl7IEFSNUtfU0VRX01BU0ssCTB4MDAwMDAwMGYgfSwKKwl7IEFSNUtfTUlDX1FPU19DVEwsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfTUlDX1FPU19TRUwsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfTUlTQ19NT0RFLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX09GRE1fRklMX0NOVCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19DQ0tfRklMX0NOVCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMV9NQVNLLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQyLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWUVSUl9DTlQyX01BU0ssIDB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfVFNGX1RIUkVTLAkweDAwMDAwMDAwIH0sCisJeyAweDgxNDAsCQkweDgwMDAwMGE4IH0sCisJeyAweDgxNDQsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BR0MsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9BRENfQ1RMLAkweDAwMDBhMDAwIH0sCisJeyAweDk4M2MsCQkweDAwMjAwNDAwIH0sCisJeyBBUjVLX1BIWV9HQUlOX09GRlNFVCwJMHgxMjg0MjMzYyB9LAorCXsgQVI1S19QSFlfU0NSLAkJMHgwMDAwMDAxZiB9LAorCXsgQVI1S19QSFlfU0xNVCwJMHgwMDAwMDA4MCB9LAorCXsgQVI1S19QSFlfU0NBTCwJMHgwMDAwMDAwZSB9LAorCXsgMHg5OTU4LAkJMHgwMDAwMDBmZiB9LAorCXsgQVI1S19QSFlfVElNSU5HXzcsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR184LAkweDAyODAwMDAwIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfMTEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZX0hFQVZZX0NMSVBfRU5BQkxFLCAweDAwMDAwMDAwIH0sCisJeyAweDk5ZTQsCQkweGFhYWFhYWFhIH0sCisJeyAweDk5ZTgsCQkweDNjNDY2NDc4IH0sCisJeyAweDk5ZWMsCQkweDAwMDAwMGFhIH0sCisJeyBBUjVLX1BIWV9TQ0xPQ0ssCTB4MDAwMDAwMGMgfSwKKwl7IEFSNUtfUEhZX1NERUxBWSwJMHgwMDAwMDBmZiB9LAorCXsgQVI1S19QSFlfU1BFTkRJTkcsCTB4MDAwMDAwMTQgfSwKKwl7IEFSNUtfUEhZX0RBR19DQ0tfQ1RMLAkweDAwMDAwOWI1IH0sCisJeyAweGEyM2MsCQkweDkzYzg4OWFmIH0sCisJeyBBUjVLX1BIWV9GQVNUX0FEQywJMHgwMDAwMDAwMSB9LAorCXsgMHhhMjUwLAkJMHgwMDAwYTAwMCB9LAorCXsgQVI1S19QSFlfQkxVRVRPT1RILAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9UUENfUkcxLAkweDBjYzc1MzgwIH0sCisJeyAweGEyNWMsCQkweDBmMGYwZjAxIH0sCisJeyAweGEyNjAsCQkweDVmNjkwZjAxIH0sCisJeyAweGEyNjQsCQkweDAwNDE4YTExIH0sCisJeyAweGEyNjgsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9UUENfUkc1LAkweDBjMzBjMTZhIH0sCisJeyAweGEyNzAsIDB4MDA4MjA4MjAgfSwKKwl7IDB4YTI3NCwgMHgwMDFiN2NhYSB9LAorCXsgMHhhMjc4LCAweDFjZTczOWNlIH0sCisJeyAweGEyN2MsIDB4MDUxNzAxY2UgfSwKKwl7IDB4YTMwMCwgMHgxODAxMDAwMCB9LAorCXsgMHhhMzA0LCAweDMwMDMyNjAyIH0sCisJeyAweGEzMDgsIDB4NDgwNzNlMDYgfSwKKwl7IDB4YTMwYywgMHg1NjBiNGMwYSB9LAorCXsgMHhhMzEwLCAweDY0MWE2MDBmIH0sCisJeyAweGEzMTQsIDB4Nzg0ZjZlMWIgfSwKKwl7IDB4YTMxOCwgMHg4NjhmN2M1YSB9LAorCXsgMHhhMzFjLCAweDhlY2Y4NjViIH0sCisJeyAweGEzMjAsIDB4OWQ0Zjk3MGYgfSwKKwl7IDB4YTMyNCwgMHhhNWNmYTE4ZiB9LAorCXsgMHhhMzI4LCAweGI1NWZhZjFmIH0sCisJeyAweGEzMmMsIDB4YmRkZmI5OWYgfSwKKwl7IDB4YTMzMCwgMHhjZDdmYzczZiB9LAorCXsgMHhhMzM0LCAweGQ1ZmZkMWJmIH0sCisJeyAweGEzMzgsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTMzYywgMHgwMDAwMDAwMCB9LAorCXsgMHhhMzQwLCAweDAwMDAwMDAwIH0sCisJeyAweGEzNDQsIDB4MDAwMDAwMDAgfSwKKwl7IDB4YTM0OCwgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzRjLCAweDNmZmZmZmZmIH0sCisJeyAweGEzNTAsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM1NCwgMHgwMDAzZmZmZiB9LAorCXsgMHhhMzU4LCAweDc5YThhYTFmIH0sCisJeyAweGEzNWMsIDB4MDY2YzQyMGYgfSwKKwl7IDB4YTM2MCwgMHgwZjI4MjIwNyB9LAorCXsgMHhhMzY0LCAweDE3NjAxNjg1IH0sCisJeyAweGEzNjgsIDB4MWY4MDExMDQgfSwKKwl7IDB4YTM2YywgMHgzN2EwMGMwMyB9LAorCXsgMHhhMzcwLCAweDNmYzQwODgzIH0sCisJeyAweGEzNzQsIDB4NTdjMDA4MDMgfSwKKwl7IDB4YTM3OCwgMHg1ZmQ4MDY4MiB9LAorCXsgMHhhMzdjLCAweDdmZTAwNDgyIH0sCisJeyAweGEzODAsIDB4N2YzYzdiYmEgfSwKKwl7IDB4YTM4NCwgMHhmMzMwN2ZmMCB9LAogfTsKIAogLyogSW5pdGlhbCBtb2RlLXNwZWNpZmljIHNldHRpbmdzIGZvciBSRjI0MjUgKFdyaXR0ZW4gYWZ0ZXIgYXI1MjEyX2luaSkgKi8KLS8qIFhYWDogTm8gZHVtcHMgZm9yIHR1cmJvZyB5ZXQsIHNvIHR1cmJvZyBpcyB0aGUgc2FtZSB3aXRoIGcgaGVyZSB3aXRoIHNvbWUKLSAqIG1pbm9yIHR3ZWFraW5nIGJhc2VkIG9uIGR1bXBzIGZyb20gb3RoZXIgY2hpcHMgKi8KKy8qIFhYWDogYSBtb2RlID8gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX21vZGUgcmYyNDI1X2luaV9tb2RlX2VuZFtdID0gewogCXsgQVI1S19UWENGRywKLQkvKgkgICAgICAgZwlnVHVyYm8gKi8KLQkJeyAweDAwMDAwMDE1LCAweDAwMDAwMDE1IH0gfSwKKwkvKglhL1hSCSAgIGFUdXJibwkgIGIJICAgZyAoRFlOKSAgICAgZ1R1cmJvICAgICAqLworCSAgIHsgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSwgMHgwMDAwMDAxNSB9IH0sCiAJeyBBUjVLX1VTRUNfNTIxMSwKLQkJeyAweDEyZTAxM2FiLCAweDA5ODgxM2NmIH0gfSwKKwkgICB7IDB4MTI4ZDkzYTcsIDB4MDk4ODEzY2YsIDB4MDRlMDEzOTUsIDB4MTJlMDEzYWIsIDB4MDk4ODEzY2YgfSB9LAogCXsgQVI1S19QSFlfVFVSQk8sCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMyB9IH0sCi0JeyBBUjVLX1BIWSgxMCksCi0JCXsgMHgwYTAyMDAwMSwgMHgwYTAyMDAwMSB9IH0sCi0JeyBBUjVLX1BIWSgxMyksCi0JCXsgMHgwMDAwMGUwZSwgMHgwMDAwMGUwZSB9IH0sCi0JeyBBUjVLX1BIWSgxNCksCi0JCXsgMHgwMDAwMDAwYiwgMHgwMDAwMDAwYiB9IH0sCi0JeyBBUjVLX1BIWSgxNyksCi0JCXsgMHgxMzcyMTQyMiwgMHgxMzcyMTQyMiB9IH0sCi0JeyBBUjVLX1BIWSgxOCksCi0JCXsgMHgwMDE5OWE2NSwgMHgwMDE5OWE2NSB9IH0sCi0JeyBBUjVLX1BIWSgyMCksCi0JCXsgMHgwYzk4YjBkYSwgMHgwYzk4YjBkYSB9IH0sCisJICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDMsCisJICAgeyAweDBhMDIwMDAxLCAweDBhMDIwMDAxLCAweDA1MDIwMTAwLCAweDBhMDIwMDAxLCAweDBhMDIwMDAxIH0gfSwKKwl7IEFSNUtfUEhZX1JGX0NUTDQsCisJICAgeyAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlLCAweDAwMDAwZTBlIH0gfSwKKwl7IEFSNUtfUEhZX1BBX0NUTCwKKwkgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIsIDB4MDAwMDAwMGIgfSB9LAorCXsgQVI1S19QSFlfU0VUVExJTkcsCisJICAgeyAweDEzNzIxNjFjLCAweDEzNzIxYzI1LCAweDEzNzIxNzIyLCAweDEzNzIxNDIyLCAweDEzNzIxYzI1IH0gfSwKKwl7IEFSNUtfUEhZX0dBSU4sCisJICAgeyAweDAwMThmYTYxLCAweDAwMThmYTYxLCAweDAwMTk5YTY1LCAweDAwMTk5YTY1LCAweDAwMTk5YTY1IH0gfSwKKwl7IEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkgICB7IDB4MGM5OGI0ZTAsIDB4MGM5OGI0ZTAsIDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEsIDB4MGM5OGIwZGEgfSB9LAogCXsgQVI1S19QSFlfU0lHLAotCQl7IDB4N2VjODBkMmUsIDB4N2VjODBkMmUgfSB9LAorCSAgIHsgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSwgMHg3ZWM4MGQyZSB9IH0sCiAJeyBBUjVLX1BIWV9BR0NDT0FSU0UsCi0JCXsgMHgzMTM5NjA1ZSwgMHgzMTM5NjA1ZSB9IH0sCi0JeyBBUjVLX1BIWSgyNyksCi0JCXsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCisJICAgeyAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlLCAweDMxMzk2MDVlIH0gfSwKKwl7IEFSNUtfUEhZX1dFQUtfT0ZETV9MT1dfVEhSLAorCSAgIHsgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSwgMHgwNTBjYjA4MSB9IH0sCiAJeyBBUjVLX1BIWV9SWF9ERUxBWSwKLQkJeyAweDAwMDAwODk4LCAweDAwMDAwN2QwIH0gfSwKKwkgICB7IDB4MDAwMDA3ZDAsIDB4MDAwMDA3ZDAsIDB4MDAwMDA0NGMsIDB4MDAwMDA4OTgsIDB4MDAwMDA3ZDAgfSB9LAogCXsgQVI1S19QSFlfRlJBTUVfQ1RMXzUyMTEsCi0JCXsgMHhmN2I4MTAwMCwgMHhmN2I4MTAwMCB9IH0sCisJICAgeyAweGY3YjgxMDAwLCAweGY3YjgxMDAwLCAweGY3YjgwZDAwLCAweGY3YjgxMDAwLCAweGY3YjgxMDAwIH0gfSwKIAl7IEFSNUtfUEhZX0NDS1RYQ1RMLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgQVI1S19QSFkoNjQyKSwKLQkJeyAweGQwM2U2Nzg4LCAweGQwM2U2Nzg4IH0gfSwKKwkgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgQVI1S19QSFlfQ0NLX0NST1NTQ09SUiwKKwkgICB7IDB4ZDZiZTY3ODgsIDB4ZDZiZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODgsIDB4ZDAzZTY3ODggfSB9LAogCXsgQVI1S19QSFlfR0FJTl8yR0haLAotCQl7IDB4MDA1MmMxNDAsIDB4MDA1MmMxNDAgfSB9LAotCXsgMHhhMjFjLAotCQl7IDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSB9LAorCSAgIHsgMHgwMDAwMDE0MCwgMHgwMDAwMDE0MCwgMHgwMDUyYzE0MCwgMHgwMDUyYzE0MCwgMHgwMDUyYzE0MCB9IH0sCisJeyBBUjVLX1BIWV9DQ0tfUlhfQ1RMXzQsCisJICAgeyAweDE4ODM4MDBhLCAweDE4ODM4MDBhLCAweDE4NjM4MDBhLCAweDE4ODM4MDBhLCAweDE4ODM4MDBhIH0gfSwKIAl7IDB4YTMyNCwKLQkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAogCXsgMHhhMzI4LAotCQl7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAorCSAgIHsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCiAJeyAweGEzMmMsCi0JCXsgMHhhN2NmYTdjZiwgMHhhN2NmYTdjZiB9IH0sCisJICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKIAl7IDB4YTMzMCwKLQkJeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKKwkgICB7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAogCXsgMHhhMzM0LAotCQl7IDB4YTdjZmE3Y2YsIDB4YTdjZmE3Y2YgfSB9LAotCXsgQVI1S19EQ1VfRlAsCi0JCXsgMHgwMDAwMDNlMCwgMHgwMDAwMDNlMCB9IH0sCi0JeyAweDgwNjAsCi0JCXsgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZiB9IH0sCi0JeyAweDgwOWMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgwYTAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMTgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMWMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMjgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMmMsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzAsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxMzgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxM2MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweDgxNDAsCi0JCXsgMHg4MDAwMDNmOSwgMHg4MDAwMDNmOSB9IH0sCi0JeyAweDgxNDQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWV9BR0MsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMSksCi0JCXsgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxNSksCi0JCXsgMHgwMDIwMDQwMCwgMHgwMDIwMDQwMCB9IH0sCi0JeyBBUjVLX1BIWSgxOSksCi0JCXsgMHgxMjg0MjMzYywgMHgxMjg0MjMzYyB9IH0sCi0JeyBBUjVLX1BIWV9TQ1IsCi0JCXsgMHgwMDAwMDAxZiwgMHgwMDAwMDAxZiB9IH0sCi0JeyBBUjVLX1BIWV9TTE1ULAotCQl7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAotCXsgQVI1S19QSFlfU0NBTCwKLQkJeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLQl7IEFSNUtfUEhZKDg2KSwKLQkJeyAweDAwMDgxZmZmLCAweDAwMDgxZmZmIH0gfSwKLQl7IEFSNUtfUEhZKDk2KSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDk3KSwKLQkJeyAweDAyODAwMDAwLCAweDAyODAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEwNCksCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1BIWSgxMTkpLAotCQl7IDB4ZmViYWRiZTgsIDB4ZmViYWRiZTggfSB9LAotCXsgQVI1S19QSFkoMTIwKSwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUEhZKDEyMSksCi0JCXsgMHhhYWFhYWFhYSwgMHhhYWFhYWFhYSB9IH0sCi0JeyBBUjVLX1BIWSgxMjIpLAotCQl7IDB4M2M0NjY0NzgsIDB4M2M0NjY0NzggfSB9LAotCXsgQVI1S19QSFkoMTIzKSwKLQkJeyAweDAwMDAwMGFhLCAweDAwMDAwMGFhIH0gfSwKLQl7IEFSNUtfUEhZX1NDTE9DSywKLQkJeyAweDAwMDAwMDBjLCAweDAwMDAwMDBjIH0gfSwKLQl7IEFSNUtfUEhZX1NERUxBWSwKLQkJeyAweDAwMDAwMGZmLCAweDAwMDAwMGZmIH0gfSwKLQl7IEFSNUtfUEhZX1NQRU5ESU5HLAotCQl7IDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQgfSB9LAotCXsgMHhhMjI4LAotCQl7IDB4MDAwMDA5YjUsIDB4MDAwMDA5YjUgfSB9LAotCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFMywKLQkJeyAweDIwMjAyMDIwLCAweDIwMjAyMDIwIH0gfSwKLQl7IEFSNUtfUEhZX1RYUE9XRVJfUkFURTQsCi0JCXsgMHgyMDIwMjAyMCwgMHgyMDIwMjAyMCB9IH0sCi0JeyAweGEyM2MsCi0JCXsgMHg5M2M4ODlhZiwgMHg5M2M4ODlhZiB9IH0sCi0JeyAweGEyNGMsCi0JCXsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCi0JeyAweGEyNTAsCi0JCXsgMHgwMDAwYTAwMCwgMHgwMDAwYTAwMCB9IH0sCi0JeyAweGEyNTQsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyNTgsCi0JCXsgMHgwY2M3NTM4MCwgMHgwY2M3NTM4MCB9IH0sCi0JeyAweGEyNWMsCi0JCXsgMHgwZjBmMGYwMSwgMHgwZjBmMGYwMSB9IH0sCi0JeyAweGEyNjAsCi0JCXsgMHg1ZjY5MGYwMSwgMHg1ZjY5MGYwMSB9IH0sCi0JeyAweGEyNjQsCi0JCXsgMHgwMDQxOGExMSwgMHgwMDQxOGExMSB9IH0sCi0JeyAweGEyNjgsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAweGEyNmMsCi0JCXsgMHgwYzMwYzE2NiwgMHgwYzMwYzE2NiB9IH0sCi0JeyAweGEyNzAsCi0JCXsgMHgwMDgyMDgyMCwgMHgwMDgyMDgyMCB9IH0sCi0JeyAweGEyNzQsCi0JCXsgMHgwODFhM2NhYSwgMHgwODFhM2NhYSB9IH0sCi0JeyAweGEyNzgsCi0JCXsgMHgxY2U3MzljZSwgMHgxY2U3MzljZSB9IH0sCi0JeyAweGEyN2MsCi0JCXsgMHgwNTE3MDFjZSwgMHgwNTE3MDFjZSB9IH0sCi0JeyAweGEzMDAsCi0JCXsgMHgxNjAxMDAwMCwgMHgxNjAxMDAwMCB9IH0sCi0JeyAweGEzMDQsCi0JCXsgMHgyYzAzMjQwMiwgMHgyYzAzMjQwMiB9IH0sCi0JeyAweGEzMDgsCi0JCXsgMHg0ODQzM2U0MiwgMHg0ODQzM2U0MiB9IH0sCi0JeyAweGEzMGMsCi0JCXsgMHg1YTBmNTAwYiwgMHg1YTBmNTAwYiB9IH0sCi0JeyAweGEzMTAsCi0JCXsgMHg2YzRiNjI0YSwgMHg2YzRiNjI0YSB9IH0sCi0JeyAweGEzMTQsCi0JCXsgMHg3ZThiNzQ4YSwgMHg3ZThiNzQ4YSB9IH0sCi0JeyAweGEzMTgsCi0JCXsgMHg5NmNmOGNjYiwgMHg5NmNmOGNjYiB9IH0sCi0JeyAweGEzMWMsCi0JCXsgMHhhMzRmOWQwZiwgMHhhMzRmOWQwZiB9IH0sCi0JeyAweGEzMjAsCi0JCXsgMHhhN2NmYTU4ZiwgMHhhN2NmYTU4ZiB9IH0sCi0JeyAweGEzNDgsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNGMsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNTAsCi0JCXsgMHgzZmZmZmZmZiwgMHgzZmZmZmZmZiB9IH0sCi0JeyAweGEzNTQsCi0JCXsgMHgwMDAzZmZmZiwgMHgwMDAzZmZmZiB9IH0sCi0JeyAweGEzNTgsCi0JCXsgMHg3OWE4YWExZiwgMHg3OWE4YWExZiB9IH0sCi0JeyAweGEzNWMsCi0JCXsgMHgwNjZjNDIwZiwgMHgwNjZjNDIwZiB9IH0sCi0JeyAweGEzNjAsCi0JCXsgMHgwZjI4MjIwNywgMHgwZjI4MjIwNyB9IH0sCi0JeyAweGEzNjQsCi0JCXsgMHgxNzYwMTY4NSwgMHgxNzYwMTY4NSB9IH0sCi0JeyAweGEzNjgsCi0JCXsgMHgxZjgwMTEwNCwgMHgxZjgwMTEwNCB9IH0sCi0JeyAweGEzNmMsCi0JCXsgMHgzN2EwMGMwMywgMHgzN2EwMGMwMyB9IH0sCi0JeyAweGEzNzAsCi0JCXsgMHgzZmM0MDg4MywgMHgzZmM0MDg4MyB9IH0sCi0JeyAweGEzNzQsCi0JCXsgMHg1N2MwMDgwMywgMHg1N2MwMDgwMyB9IH0sCi0JeyAweGEzNzgsCi0JCXsgMHg1ZmQ4MDY4MiwgMHg1ZmQ4MDY4MiB9IH0sCi0JeyAweGEzN2MsCi0JCXsgMHg3ZmUwMDQ4MiwgMHg3ZmUwMDQ4MiB9IH0sCi0JeyAweGEzODAsCi0JCXsgMHg3ZjNjN2JiYSwgMHg3ZjNjN2JiYSB9IH0sCi0JeyAweGEzODQsCi0JCXsgMHhmMzMwN2ZmMCwgMHhmMzMwN2ZmMCB9IH0sCisJICAgeyAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmLCAweGE3Y2ZhN2NmIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pIHJmMjQyNV9pbmlfY29tbW9uX2VuZFtdID0geworCXsgQVI1S19EQ1VfRlAsCQkweDAwMDAwM2UwIH0sCisJeyBBUjVLX1NFUV9NQVNLLAkweDAwMDAwMDBmIH0sCisJeyAweDgwOWMsCQkweDAwMDAwMDAwIH0sCisJeyAweDgwYTAsCQkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JQ19RT1NfQ1RMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JQ19RT1NfU0VMLAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX01JU0NfTU9ERSwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19PRkRNX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfQ0NLX0ZJTF9DTlQsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDEsCTB4MDAwMDAwMDAgfSwKKwl7IEFSNUtfUEhZRVJSX0NOVDFfTUFTSywgMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMiwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlFUlJfQ05UMl9NQVNLLCAweDAwMDAwMDAwIH0sCisJeyBBUjVLX1RTRl9USFJFUywJMHgwMDAwMDAwMCB9LAorCXsgMHg4MTQwLAkJMHg4MDAwMDNmOSB9LAorCXsgMHg4MTQ0LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQUdDLAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfQURDX0NUTCwJMHgwMDAwYTAwMCB9LAorCXsgMHg5ODNjLAkJMHgwMDIwMDQwMCB9LAorCXsgQVI1S19QSFlfR0FJTl9PRkZTRVQsIDB4MTI4NDIzM2MgfSwKKwl7IEFSNUtfUEhZX1NDUiwJCTB4MDAwMDAwMWYgfSwKKwl7IEFSNUtfUEhZX1NMTVQsCTB4MDAwMDAwODAgfSwKKwl7IEFSNUtfUEhZX1NDQUwsCTB4MDAwMDAwMGUgfSwKKwl7IDB4OTk1OCwJCTB4MDAwODFmZmYgfSwKKwl7IEFSNUtfUEhZX1RJTUlOR183LAkweDAwMDAwMDAwIH0sCisJeyBBUjVLX1BIWV9USU1JTkdfOCwJMHgwMjgwMDAwMCB9LAorCXsgQVI1S19QSFlfVElNSU5HXzExLAkweDAwMDAwMDAwIH0sCisJeyAweDk5ZGMsCQkweGZlYmFkYmU4IH0sCisJeyBBUjVLX1BIWV9IRUFWWV9DTElQX0VOQUJMRSwgMHgwMDAwMDAwMCB9LAorCXsgMHg5OWU0LAkJMHhhYWFhYWFhYSB9LAorCXsgMHg5OWU4LAkJMHgzYzQ2NjQ3OCB9LAorCXsgMHg5OWVjLAkJMHgwMDAwMDBhYSB9LAorCXsgQVI1S19QSFlfU0NMT0NLLAkweDAwMDAwMDBjIH0sCisJeyBBUjVLX1BIWV9TREVMQVksCTB4MDAwMDAwZmYgfSwKKwl7IEFSNUtfUEhZX1NQRU5ESU5HLAkweDAwMDAwMDE0IH0sCisJeyBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwJMHgwMDAwMDliNSB9LAorCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFMywgMHgyMDIwMjAyMCB9LAorCXsgQVI1S19QSFlfVFhQT1dFUl9SQVRFNCwgMHgyMDIwMjAyMCB9LAorCXsgMHhhMjNjLAkJMHg5M2M4ODlhZiB9LAorCXsgQVI1S19QSFlfRkFTVF9BREMsCTB4MDAwMDAwMDEgfSwKKwl7IDB4YTI1MCwJCTB4MDAwMGEwMDAgfSwKKwl7IEFSNUtfUEhZX0JMVUVUT09USCwJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHMSwJMHgwY2M3NTM4MCB9LAorCXsgMHhhMjVjLAkJMHgwZjBmMGYwMSB9LAorCXsgMHhhMjYwLAkJMHg1ZjY5MGYwMSB9LAorCXsgMHhhMjY0LAkJMHgwMDQxOGExMSB9LAorCXsgMHhhMjY4LAkJMHgwMDAwMDAwMCB9LAorCXsgQVI1S19QSFlfVFBDX1JHNSwJMHgwYzMwYzE2NiB9LAorCXsgMHhhMjcwLCAweDAwODIwODIwIH0sCisJeyAweGEyNzQsIDB4MDgxYTNjYWEgfSwKKwl7IDB4YTI3OCwgMHgxY2U3MzljZSB9LAorCXsgMHhhMjdjLCAweDA1MTcwMWNlIH0sCisJeyAweGEzMDAsIDB4MTYwMTAwMDAgfSwKKwl7IDB4YTMwNCwgMHgyYzAzMjQwMiB9LAorCXsgMHhhMzA4LCAweDQ4NDMzZTQyIH0sCisJeyAweGEzMGMsIDB4NWEwZjUwMGIgfSwKKwl7IDB4YTMxMCwgMHg2YzRiNjI0YSB9LAorCXsgMHhhMzE0LCAweDdlOGI3NDhhIH0sCisJeyAweGEzMTgsIDB4OTZjZjhjY2IgfSwKKwl7IDB4YTMxYywgMHhhMzRmOWQwZiB9LAorCXsgMHhhMzIwLCAweGE3Y2ZhNThmIH0sCisJeyAweGEzNDgsIDB4M2ZmZmZmZmYgfSwKKwl7IDB4YTM0YywgMHgzZmZmZmZmZiB9LAorCXsgMHhhMzUwLCAweDNmZmZmZmZmIH0sCisJeyAweGEzNTQsIDB4MDAwM2ZmZmYgfSwKKwl7IDB4YTM1OCwgMHg3OWE4YWExZiB9LAorCXsgMHhhMzVjLCAweDA2NmM0MjBmIH0sCisJeyAweGEzNjAsIDB4MGYyODIyMDcgfSwKKwl7IDB4YTM2NCwgMHgxNzYwMTY4NSB9LAorCXsgMHhhMzY4LCAweDFmODAxMTA0IH0sCisJeyAweGEzNmMsIDB4MzdhMDBjMDMgfSwKKwl7IDB4YTM3MCwgMHgzZmM0MDg4MyB9LAorCXsgMHhhMzc0LCAweDU3YzAwODAzIH0sCisJeyAweGEzNzgsIDB4NWZkODA2ODIgfSwKKwl7IDB4YTM3YywgMHg3ZmUwMDQ4MiB9LAorCXsgMHhhMzgwLCAweDdmM2M3YmJhIH0sCisJeyAweGEzODQsIDB4ZjMzMDdmZjAgfSwKIH07CiAKIC8qCkBAIC0xNTYwLDcgKzEyOTcsNyBAQAogCXsgQVI1S19CQl9HQUlOKDYzKSwgMHgwMDAwMDAxNiB9LAogfTsKIAotLyogUkY1MTEyIEluaXRpYWwgQmFzZUJhbmQgR2FpbiBzZXR0aW5ncyAoU2FtZSBmb3IgUkY1NDEzLzU0MTQpICovCisvKiBSRjUxMTIgSW5pdGlhbCBCYXNlQmFuZCBHYWluIHNldHRpbmdzIChTYW1lIGZvciBSRjU0MTMvNTQxNCspICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaSByZjUxMTJfaW5pX2JiZ2FpbltdID0gewogCXsgQVI1S19CQl9HQUlOKDApLCAweDAwMDAwMDAwIH0sCiAJeyBBUjVLX0JCX0dBSU4oMSksIDB4MDAwMDAwMDEgfSwKQEAgLTE2OTEsODcgKzE0MjgsOTcgQEAKIAkJLyoKIAkJICogV3JpdGUgaW5pdGlhbCBzZXR0aW5ncyBjb21tb24gZm9yIGFsbCBtb2RlcwogCQkgKi8KLQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwgQVJSQVlfU0laRShhcjUyMTJfaW5pKSwKLQkJCQkJYXI1MjEyX2luaSwgY2hhbmdlX2NoYW5uZWwpOworCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLCBBUlJBWV9TSVpFKGFyNTIxMl9pbmlfY29tbW9uX3N0YXJ0KSwKKwkJCQlhcjUyMTJfaW5pX2NvbW1vbl9zdGFydCwgY2hhbmdlX2NoYW5uZWwpOwogCiAJCS8qIFNlY29uZCBzZXQgb2YgbW9kZS1zcGVjaWZpYyBzZXR0aW5ncyAqLwotCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSB7CisJCXN3aXRjaCAoYWgtPmFoX3JhZGlvKSB7CisJCWNhc2UgQVI1S19SRjUxMTE6CiAKIAkJCWF0aDVrX2h3X2luaV9tb2RlX3JlZ2lzdGVycyhhaCwKLQkJCQkJQVJSQVlfU0laRShhcjUyMTJfcmY1MTExX2luaV9tb2RlX2VuZCksCi0JCQkJCWFyNTIxMl9yZjUxMTFfaW5pX21vZGVfZW5kLCBtb2RlKTsKKwkJCQkJQVJSQVlfU0laRShyZjUxMTFfaW5pX21vZGVfZW5kKSwKKwkJCQkJcmY1MTExX2luaV9tb2RlX2VuZCwgbW9kZSk7CisKKwkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCisJCQkJCUFSUkFZX1NJWkUocmY1MTExX2luaV9jb21tb25fZW5kKSwKKwkJCQkJcmY1MTExX2luaV9jb21tb25fZW5kLCBjaGFuZ2VfY2hhbm5lbCk7CiAKIAkJCS8qIEJhc2ViYW5kIGdhaW4gdGFibGUgKi8KIAkJCWF0aDVrX2h3X2luaV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmY1MTExX2luaV9iYmdhaW4pLAogCQkJCQlyZjUxMTFfaW5pX2JiZ2FpbiwgY2hhbmdlX2NoYW5uZWwpOwogCi0JCX0gZWxzZSBpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSB7CisJCQlicmVhazsKKwkJY2FzZSBBUjVLX1JGNTExMjoKIAogCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLAotCQkJCQlBUlJBWV9TSVpFKGFyNTIxMl9yZjUxMTJfaW5pX21vZGVfZW5kKSwKLQkJCQkJYXI1MjEyX3JmNTExMl9pbmlfbW9kZV9lbmQsIG1vZGUpOworCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfbW9kZV9lbmQpLAorCQkJCQlyZjUxMTJfaW5pX21vZGVfZW5kLCBtb2RlKTsKKworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2NvbW1vbl9lbmQpLAorCQkJCQlyZjUxMTJfaW5pX2NvbW1vbl9lbmQsIGNoYW5nZV9jaGFubmVsKTsKIAogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCiAJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7CiAKLQkJfSBlbHNlIGlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHsKKwkJCWJyZWFrOworCQljYXNlIEFSNUtfUkY1NDEzOgogCiAJCQlhdGg1a19od19pbmlfbW9kZV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmY1NDEzX2luaV9tb2RlX2VuZCksCiAJCQkJCXJmNTQxM19pbmlfbW9kZV9lbmQsIG1vZGUpOwogCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAorCQkJCQlBUlJBWV9TSVpFKHJmNTQxM19pbmlfY29tbW9uX2VuZCksCisJCQkJCXJmNTQxM19pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOworCisJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfYmJnYWluKSwKIAkJCQkJcmY1MTEyX2luaV9iYmdhaW4sIGNoYW5nZV9jaGFubmVsKTsKIAotCQl9IGVsc2UgaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGMjQxMykgewotCi0JCQlpZiAobW9kZSA8IDIpIHsKLQkJCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCQkidW5zdXBwb3J0ZWQgY2hhbm5lbCBtb2RlOiAlZFxuIiwgbW9kZSk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQltb2RlID0gbW9kZSAtIDI7Ci0KLQkJCS8qIE92ZXJyaWRlIGEgc2V0dGluZyBmcm9tIGFyNTIxMl9pbmkgKi8KLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMTg4MzBjNiwgQVI1S19QSFkoNjQ4KSk7CisJCQlicmVhazsKKwkJY2FzZSBBUjVLX1JGMjMxNjoKKwkJY2FzZSBBUjVLX1JGMjQxMzoKIAogCQkJYXRoNWtfaHdfaW5pX21vZGVfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmMjQxM19pbmlfbW9kZV9lbmQpLAogCQkJCQlyZjI0MTNfaW5pX21vZGVfZW5kLCBtb2RlKTsKIAotCQkJLyogQmFzZWJhbmQgZ2FpbiB0YWJsZSAqLworCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKKwkJCQkJQVJSQVlfU0laRShyZjI0MTNfaW5pX2NvbW1vbl9lbmQpLAorCQkJCQlyZjI0MTNfaW5pX2NvbW1vbl9lbmQsIGNoYW5nZV9jaGFubmVsKTsKKworCQkJLyogT3ZlcnJpZGUgc2V0dGluZ3MgZnJvbSByZjI0MTNfaW5pX2NvbW1vbl9lbmQgKi8KKwkJCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjIzMTYpIHsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDQwMDAsCisJCQkJCQkJQVI1S19QSFlfQUdDKTsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDgxYjdjYWEsCisJCQkJCQkJMHhhMjc0KTsKKwkJCX0KKwogCQkJYXRoNWtfaHdfaW5pX3JlZ2lzdGVycyhhaCwKIAkJCQkJQVJSQVlfU0laRShyZjUxMTJfaW5pX2JiZ2FpbiksCiAJCQkJCXJmNTExMl9pbmlfYmJnYWluLCBjaGFuZ2VfY2hhbm5lbCk7Ci0KLQkJfSBlbHNlIGlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjI0MjUpIHsKLQotCQkJaWYgKG1vZGUgPCAyKSB7Ci0JCQkJQVRINUtfRVJSKGFoLT5haF9zYywKLQkJCQkJInVuc3VwcG9ydGVkIGNoYW5uZWwgbW9kZTogJWRcbiIsIG1vZGUpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQkvKiBNYXAgYiB0byBnICovCi0JCQlpZiAobW9kZSA9PSAyKQotCQkJCW1vZGUgPSAwOwotCQkJZWxzZQotCQkJCW1vZGUgPSBtb2RlIC0gMzsKLQotCQkJLyogT3ZlcnJpZGUgYSBzZXR0aW5nIGZyb20gYXI1MjEyX2luaSAqLwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAxODgzMGM2LCBBUjVLX1BIWSg2NDgpKTsKKwkJCWJyZWFrOworCQljYXNlIEFSNUtfUkYyMzE3OgorCQljYXNlIEFSNUtfUkYyNDI1OgogCiAJCQlhdGg1a19od19pbmlfbW9kZV9yZWdpc3RlcnMoYWgsCiAJCQkJCUFSUkFZX1NJWkUocmYyNDI1X2luaV9tb2RlX2VuZCksCiAJCQkJCXJmMjQyNV9pbmlfbW9kZV9lbmQsIG1vZGUpOwogCi0JCQkvKiBCYXNlYmFuZCBnYWluIHRhYmxlICovCisJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAorCQkJCQlBUlJBWV9TSVpFKHJmMjQyNV9pbmlfY29tbW9uX2VuZCksCisJCQkJCXJmMjQyNV9pbmlfY29tbW9uX2VuZCwgY2hhbmdlX2NoYW5uZWwpOworCiAJCQlhdGg1a19od19pbmlfcmVnaXN0ZXJzKGFoLAogCQkJCQlBUlJBWV9TSVpFKHJmNTExMl9pbmlfYmJnYWluKSwKIAkJCQkJcmY1MTEyX2luaV9iYmdhaW4sIGNoYW5nZV9jaGFubmVsKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL2xlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NTU1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9sZWQuYwpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA1IFNhbSBMZWZmbGVyLCBFcnJubyBDb25zdWx0aW5nCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBBdGhlcm9zIENvbW11bmljYXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBCb2IgQ29wZWxhbmQgPG1lQGJvYmNvcGVsYW5kLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0gYSBkaXNjbGFpbWVyCisgKiAgICBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWltZXIgYmVsb3cgKCJEaXNjbGFpbWVyIikgYW5kIGFueQorICogICAgcmVkaXN0cmlidXRpb24gbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkKKyAqICAgIHNpbWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlciBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OSU5GUklOR0VNRU5ULCBNRVJDSEFOVElCSUxJVFkKKyAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICJhdGg1ay5oIgorI2luY2x1ZGUgImJhc2UuaCIKKworI2RlZmluZSBBVEhfU0RFVklDRShzdWJ2LHN1YmQpIFwKKwkudmVuZG9yID0gUENJX0FOWV9JRCwgLmRldmljZSA9IFBDSV9BTllfSUQsIFwKKwkuc3VidmVuZG9yID0gKHN1YnYpLCAuc3ViZGV2aWNlID0gKHN1YmQpCisKKyNkZWZpbmUgQVRIX0xFRChwaW4scG9sYXJpdHkpIC5kcml2ZXJfZGF0YSA9ICgoKHBpbikgPDwgOCkgfCAocG9sYXJpdHkpKQorI2RlZmluZSBBVEhfUElOKGRhdGEpICgoZGF0YSkgPj4gOCkKKyNkZWZpbmUgQVRIX1BPTEFSSVRZKGRhdGEpICgoZGF0YSkgJiAweGZmKQorCisvKiBEZXZpY2VzIHdlIG1hdGNoIG9uIGZvciBMRUQgY29uZmlnIGluZm8gKHR5cGljYWxseSBsYXB0b3BzKSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aDVrX2xlZF9kZXZpY2VzW10gPSB7CisJLyogSUJNLXNwZWNpZmljIEFSNTIxMiAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0FSNTIxMl9JQk0pLCBBVEhfTEVEKDAsIDApIH0sCisJLyogQVI1MjExICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfQVI1MjExKSwgQVRIX0xFRCgwLCAwKSB9LAorCS8qIEhQIENvbXBhcSBuYzZ4eCwgbmM0MDAwLCBueDYwMDAgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfQ09NUEFRLCBQQ0lfQU5ZX0lEKSwgQVRIX0xFRCgxLCAxKSB9LAorCS8qIEFjZXIgQXNwaXJlIE9uZSBBMTUwIChtYXhpbWxldml0c2t5QGdtYWlsLmNvbSkgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfRk9YQ09OTiwgMHhlMDA4KSwgQVRIX0xFRCgzLCAwKSB9LAorCS8qIEFjZXIgRmVycmFyaSA1MDAwIChydXNzLmRpbGxAZ21haWwuY29tKSAqLworCXsgQVRIX1NERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUJJVCwgMHgwNDIyKSwgQVRIX0xFRCgxLCAxKSB9LAorCS8qIEUtbWFjaGluZXMgRTUxMCAodHVsaW9tQGdtYWlsLmNvbSkgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfQU1CSVQsIDB4MDQyOCksIEFUSF9MRUQoMywgMCkgfSwKKwkvKiBBY2VyIEV4dGVuc2EgNTYyMHogKG5la29yZWV2ZUBnbWFpbC5jb20pICovCisJeyBBVEhfU0RFVklDRShQQ0lfVkVORE9SX0lEX1FNSSwgMHgwMTA1KSwgQVRIX0xFRCgzLCAwKSB9LAorCXsgfQorfTsKKwordm9pZCBhdGg1a19sZWRfZW5hYmxlKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJaWYgKHRlc3RfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpKSB7CisJCWF0aDVrX2h3X3NldF9ncGlvX291dHB1dChzYy0+YWgsIHNjLT5sZWRfcGluKTsKKwkJYXRoNWtfbGVkX29mZihzYyk7CisJfQorfQorCit2b2lkIGF0aDVrX2xlZF9vbihzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWlmICghdGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpCisJCXJldHVybjsKKwlhdGg1a19od19zZXRfZ3BpbyhzYy0+YWgsIHNjLT5sZWRfcGluLCBzYy0+bGVkX29uKTsKK30KKwordm9pZCBhdGg1a19sZWRfb2ZmKHN0cnVjdCBhdGg1a19zb2Z0YyAqc2MpCit7CisJaWYgKCF0ZXN0X2JpdChBVEhfU1RBVF9MRURTT0ZULCBzYy0+c3RhdHVzKSkKKwkJcmV0dXJuOworCWF0aDVrX2h3X3NldF9ncGlvKHNjLT5haCwgc2MtPmxlZF9waW4sICFzYy0+bGVkX29uKTsKK30KKworc3RhdGljIHZvaWQKK2F0aDVrX2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAorCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgYXRoNWtfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2Rldiwgc3RydWN0IGF0aDVrX2xlZCwKKwkJbGVkX2Rldik7CisKKwlpZiAoYnJpZ2h0bmVzcyA9PSBMRURfT0ZGKQorCQlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOworCWVsc2UKKwkJYXRoNWtfbGVkX29uKGxlZC0+c2MpOworfQorCitzdGF0aWMgaW50CithdGg1a19yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aDVrX3NvZnRjICpzYywgc3RydWN0IGF0aDVrX2xlZCAqbGVkLAorCQkgICBjb25zdCBjaGFyICpuYW1lLCBjaGFyICp0cmlnZ2VyKQoreworCWludCBlcnI7CisKKwlsZWQtPnNjID0gc2M7CisJc3RybmNweShsZWQtPm5hbWUsIG5hbWUsIHNpemVvZihsZWQtPm5hbWUpKTsKKwlsZWQtPmxlZF9kZXYubmFtZSA9IGxlZC0+bmFtZTsKKwlsZWQtPmxlZF9kZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKKwlsZWQtPmxlZF9kZXYuYnJpZ2h0bmVzc19zZXQgPSBhdGg1a19sZWRfYnJpZ2h0bmVzc19zZXQ7CisKKwllcnIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJnNjLT5wZGV2LT5kZXYsICZsZWQtPmxlZF9kZXYpOworCWlmIChlcnIpIHsKKwkJQVRINUtfV0FSTihzYywgImNvdWxkIG5vdCByZWdpc3RlciBMRUQgJXNcbiIsIG5hbWUpOworCQlsZWQtPnNjID0gTlVMTDsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK2F0aDVrX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGg1a19sZWQgKmxlZCkKK3sKKwlpZiAoIWxlZC0+c2MpCisJCXJldHVybjsKKwlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmbGVkLT5sZWRfZGV2KTsKKwlhdGg1a19sZWRfb2ZmKGxlZC0+c2MpOworCWxlZC0+c2MgPSBOVUxMOworfQorCit2b2lkIGF0aDVrX3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjKQoreworCWF0aDVrX3VucmVnaXN0ZXJfbGVkKCZzYy0+cnhfbGVkKTsKKwlhdGg1a191bnJlZ2lzdGVyX2xlZCgmc2MtPnR4X2xlZCk7Cit9CisKK2ludCBhdGg1a19pbml0X2xlZHMoc3RydWN0IGF0aDVrX3NvZnRjICpzYykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHNjLT5wZGV2OworCWNoYXIgbmFtZVtBVEg1S19MRURfTUFYX05BTUVfTEVOICsgMV07CisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKm1hdGNoOworCisJbWF0Y2ggPSBwY2lfbWF0Y2hfaWQoJmF0aDVrX2xlZF9kZXZpY2VzWzBdLCBwZGV2KTsKKwlpZiAobWF0Y2gpIHsKKwkJX19zZXRfYml0KEFUSF9TVEFUX0xFRFNPRlQsIHNjLT5zdGF0dXMpOworCQlzYy0+bGVkX3BpbiA9IEFUSF9QSU4obWF0Y2gtPmRyaXZlcl9kYXRhKTsKKwkJc2MtPmxlZF9vbiA9IEFUSF9QT0xBUklUWShtYXRjaC0+ZHJpdmVyX2RhdGEpOworCX0KKworCWlmICghdGVzdF9iaXQoQVRIX1NUQVRfTEVEU09GVCwgc2MtPnN0YXR1cykpCisJCWdvdG8gb3V0OworCisJYXRoNWtfbGVkX2VuYWJsZShzYyk7CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJhdGg1ay0lczo6cngiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCXJldCA9IGF0aDVrX3JlZ2lzdGVyX2xlZChzYywgJnNjLT5yeF9sZWQsIG5hbWUsCisJCWllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoaHcpKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImF0aDVrLSVzOjp0eCIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJcmV0ID0gYXRoNWtfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnR4X2xlZCwgbmFtZSwKKwkJaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShodykpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMKaW5kZXggNzVlYjlmNC4uNTUxMjJmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcGN1LmMKQEAgLTY0Niw2ICs2NDYsMjIgQEAKIH0KIAogLyoqCisgKiBhdGg1a19od19zZXRfdHNmNjQgLSBTZXQgYSBuZXcgNjRiaXQgVFNGCisgKgorICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odworICogQHRzZjY0OiBUaGUgbmV3IDY0Yml0IFRTRgorICoKKyAqIFNldHMgdGhlIG5ldyBUU0YKKyAqLwordm9pZCBhdGg1a19od19zZXRfdHNmNjQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTY0IHRzZjY0KQoreworCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CisKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIHRzZjY0ICYgMHhmZmZmZmZmZiwgQVI1S19UU0ZfTDMyKTsKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsICh0c2Y2NCA+PiAzMikgJiAweGZmZmZmZmZmLCBBUjVLX1RTRl9VMzIpOworfQorCisvKioKICAqIGF0aDVrX2h3X3Jlc2V0X3RzZiAtIEZvcmNlIGEgVFNGIHJlc2V0CiAgKgogICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odwpAQCAtMTAyNiw2ICsxMDQyLDkgQEAKIAkJCXJldHVybiBBUjVLX0tFWVRBQkxFX1RZUEVfNDA7CiAJCWVsc2UgaWYgKGtleS0+a2V5bGVuID09IExFTl9XRVAxMDQpCiAJCQlyZXR1cm4gQVI1S19LRVlUQUJMRV9UWVBFXzEwNDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMTA0MSw3ICsxMDYwLDcgQEAKIAlfX2xlMzIga2V5X3ZbNV0gPSB7fTsKIAlfX2xlMzIga2V5MCA9IDAsIGtleTEgPSAwOwogCV9fbGUzMiAqcnhtaWMsICp0eG1pYzsKLQl1MzIga2V5dHlwZTsKKwlpbnQga2V5dHlwZTsKIAl1MTYgbWljZW50cnkgPSBlbnRyeSArIEFSNUtfS0VZVEFCTEVfTUlDX09GRlNFVDsKIAlib29sIGlzX3RraXA7CiAJY29uc3QgdTggKmtleV9wdHI7CkBAIC0xMTM5LDcgKzExNTgsNyBAQAogCiAJLyogTUFDIG1heSBiZSBOVUxMIGlmIGl0J3MgYSBicm9hZGNhc3Qga2V5LiBJbiB0aGlzIGNhc2Ugbm8gbmVlZCB0bwogCSAqIHRvIGNvbXB1dGUgQVI1S19MT1dfSUQgYW5kIEFSNUtfSElHSF9JRCBhcyB3ZSBhbHJlYWR5IGtub3cgaXQuICovCi0JaWYgKHVubGlrZWx5KG1hYyA9PSBOVUxMKSkgeworCWlmICghbWFjKSB7CiAJCWxvd19pZCA9IDB4ZmZmZmZmZmY7CiAJCWhpZ2hfaWQgPSAweGZmZmYgfCBBUjVLX0tFWVRBQkxFX1ZBTElEOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BoeS5jCmluZGV4IDdiYTE4ZTAuLjllMmZhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3BoeS5jCkBAIC0yLDggKzIsOSBAQAogICogUEhZIGZ1bmN0aW9ucwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA3IFJleWsgRmxvZXRlciA8cmV5a0BvcGVuYnNkLm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA4IEppcmkgU2xhYnkgPGppcmlzbGFieUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0yNiwxMTM4ICsyNywxOTMgQEAKICNpbmNsdWRlICJhdGg1ay5oIgogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImJhc2UuaCIKLQotLyogU3RydWN0IHRvIGhvbGQgaW5pdGlhbCBSRiByZWdpc3RlciB2YWx1ZXMgKFJGIEJhbmtzKSAqLwotc3RydWN0IGF0aDVrX2luaV9yZiB7Ci0JdTgJcmZfYmFuazsJLyogY2hlY2sgb3V0IGF0aDVrX3JlZy5oICovCi0JdTE2CXJmX3JlZ2lzdGVyOwkvKiByZWdpc3RlciBhZGRyZXNzICovCi0JdTMyCXJmX3ZhbHVlWzVdOwkvKiByZWdpc3RlciB2YWx1ZSBmb3IgZGlmZmVyZW50IG1vZGVzIChhYm92ZSkgKi8KLX07Ci0KLS8qCi0gKiBNb2RlLXNwZWNpZmljIFJGIEdhaW4gdGFibGUgKDY0Ynl0ZXMpIGZvciBSRjUxMTEvNTExMgotICogKFJGNTExMCBvbmx5IGNvbWVzIHdpdGggQVI1MjEwIGFuZCBvbmx5IHN1cHBvcnRzIGEvdHVyYm8gYSBtb2RlIHNvIGluaXRpYWwKLSAqIFJGIEdhaW4gdmFsdWVzIGFyZSBpbmNsdWRlZCBpbiBBUjVLX0FSNTIxMF9JTkkpCi0gKi8KLXN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHsKLQl1MTYJcmZnX3JlZ2lzdGVyOwkvKiBSRiBHYWluIHJlZ2lzdGVyIGFkZHJlc3MgKi8KLQl1MzIJcmZnX3ZhbHVlWzJdOwkvKiBbZnJlcSAoc2VlIGJlbG93KV0gKi8KLX07Ci0KLXN0cnVjdCBhdGg1a19nYWluX29wdCB7Ci0JdTMyCQkJZ29fZGVmYXVsdDsKLQl1MzIJCQlnb19zdGVwc19jb3VudDsKLQljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcAlnb19zdGVwW0FSNUtfR0FJTl9TVEVQX0NPVU5UXTsKLX07Ci0KLS8qIFJGNTExMSBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfNTExMVtdID0gewotCXsgMCwgMHg5ODljLAotCS8qICAgIG1vZGUgYS9YUiAgIG1vZGUgYVR1cmJvIG1vZGUgYiAgICAgIG1vZGUgZyAgICAgIG1vZGUgZ1R1cmJvICovCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDBjMCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCi0JeyAwLCAweDk4OWMsCi0JICAgIHsgMHgwMDA0MDBmOSwgMHgwMDA0MDBmOSwgMHgwMDA0MDBmZiwgMHgwMDA0MDBmZCwgMHgwMDA0MDBmZCB9IH0sCi0JeyAwLCAweDk4ZDQsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCi0JeyAxLCAweDk4ZDQsCi0JICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyAyLCAweDk4ZDQsCi0JICAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCB9IH0sCi0JeyAzLCAweDk4ZDgsCi0JICAgIHsgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwYTAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDM4MDBjMCwgMHgwMDM4MDA4MCwgMHgwMjM4MDBjMCwgMHgwMDM4MDBjMCwgMHgwMDM4MDBjMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAyMDAwNiwgMHgwMDAyMDAwNiwgMHgwMDAwMDAwNiwgMHgwMDAyMDAwNiwgMHgwMDAyMDAwNiB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNyB9IH0sCi0JeyA2LCAweDk4ZDQsCi0JICAgIHsgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDA0MCwgMHgwMDAwMDA0OCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMSwgMHgwMDAwMDA2MSwgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMSB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0YywgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0ZiB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMTI1YSwgMHgwMDAwMTI1YSwgMHgwMDAwMTI5YSwgMHgwMDAwMTI1YSwgMHgwMDAwMTI1YSB9IH0sCi0JeyA3LCAweDk4Y2MsCi0JICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi19OwotCi0vKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTExMSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81MTExW10gPSB7Ci0JLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KLQl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMWE5LCAweDAwMDAwMDAwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMWU5LCAweDAwMDAwMDQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDI5LCAweDAwMDAwMDgwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDY5LCAweDAwMDAwMTUwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMTk5LCAweDAwMDAwMTkwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMWQ5LCAweDAwMDAwMWQwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDE5LCAweDAwMDAwMDEwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDU5LCAweDAwMDAwMDQ0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDk5LCAweDAwMDAwMDg0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMWE1LCAweDAwMDAwMTQ4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDFlNSwgMHgwMDAwMDE4OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMjUsIDB4MDAwMDAxYzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWM4LCAweDAwMDAwMDE0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwOCwgMHgwMDAwMDA0MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwNDgsIDB4MDAwMDAwODIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDg4LCAweDAwMDAwMTc4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDE5OCwgMHgwMDAwMDFiOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAxZDgsIDB4MDAwMDAxZjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDE4LCAweDAwMDAwMDEyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDA1OCwgMHgwMDAwMDA1MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwOTgsIDB4MDAwMDAwOTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMWE0LCAweDAwMDAwMTdjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDFlNCwgMHgwMDAwMDFiYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMjQsIDB4MDAwMDAxZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDY0LCAweDAwMDAwMDBhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDBhNCwgMHgwMDAwMDA0YSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwZTQsIDB4MDAwMDAwOGEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMTBhLCAweDAwMDAwMTVhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDE0YSwgMHgwMDAwMDE5YSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxOGEsIDB4MDAwMDAxZGEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMWNhLCAweDAwMDAwMDBlIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwYSwgMHgwMDAwMDA0ZSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwNGEsIDB4MDAwMDAwOGUgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDhhLCAweDAwMDAwMTVlIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDFiYSwgMHgwMDAwMDE5ZSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAxZmEsIDB4MDAwMDAxZGUgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDNhLCAweDAwMDAwMDA5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDA3YSwgMHgwMDAwMDA0OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAxODYsIDB4MDAwMDAwODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMWM2LCAweDAwMDAwMTc5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwNiwgMHgwMDAwMDFiOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwNDYsIDB4MDAwMDAxZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDg2LCAweDAwMDAwMDM5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDA3OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwYjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMWJkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDFmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwM2QgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMDdkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBiZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgcmZnYWluX29wdF81MTExID0gewotCTQsCi0JOSwKLQl7Ci0JCXsgeyA0LCAxLCAxLCAxIH0sIDYgfSwKLQkJeyB7IDQsIDAsIDEsIDEgfSwgNCB9LAotCQl7IHsgMywgMSwgMSwgMSB9LCAzIH0sCi0JCXsgeyA0LCAwLCAwLCAxIH0sIDEgfSwKLQkJeyB7IDQsIDEsIDEsIDAgfSwgMCB9LAotCQl7IHsgNCwgMCwgMSwgMCB9LCAtMiB9LAotCQl7IHsgMywgMSwgMSwgMCB9LCAtMyB9LAotCQl7IHsgNCwgMCwgMCwgMCB9LCAtNCB9LAotCQl7IHsgMiwgMSwgMSwgMCB9LCAtNiB9Ci0JfQotfTsKLQotLyogUkY1MTEyIG1vZGUtc3BlY2lmaWMgaW5pdCByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmIHJmcmVnc181MTEyW10gPSB7Ci0JeyAxLCAweDk4ZDQsCi0JLyogICAgbW9kZSBhL1hSICAgbW9kZSBhVHVyYm8gbW9kZSBiICAgICAgbW9kZSBnICAgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkMCwKLQkgICAgeyAweDAzMDYwNDA4LCAweDAzMDcwNDA4LCAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKLQl7IDMsIDB4OThkYywKLQkgICAgeyAweDAwYTBjMGMwLCAweDAwYTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGIwLCAweDAwMDAwMGIwLCAweDAwMDAwMGE4LCAweDAwMDAwMGE4LCAweDAwMDAwMGE4IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNmM0YTQxLCAweDAwNmM0YTQxLCAweDAwNmM0YWYxLCAweDAwNmM0YTYxLCAweDAwNmM0YTYxIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTA4OTJhLCAweDAwNTA4OTJhLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwIH0gfSwKLQl7IDYsIDB4OThkMCwKLQkgICAgeyAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDBhLCAweDAwMDAwMDBhLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKLQl7IDcsIDB4OThjNCwKLQkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKLX07Ci0KLS8qIFJGNTExMkEgbW9kZS1zcGVjaWZpYyBpbml0IHJlZ2lzdGVycyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmYgcmZyZWdzXzUxMTJhW10gPSB7Ci0JeyAxLCAweDk4ZDQsCi0JLyogICAgbW9kZSBhL1hSICAgbW9kZSBhVHVyYm8gbW9kZSBiICAgICAgbW9kZSBnICAgICAgbW9kZSBnVHVyYm8gKi8KLQkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKLQl7IDIsIDB4OThkMCwKLQkgICAgeyAweDAzMDYwNDA4LCAweDAzMDcwNDA4LCAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKLQl7IDMsIDB4OThkYywKLQkgICAgeyAweDAwYTBjMGMwLCAweDAwYTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwLCAweDAwODAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTgwMDAwLCAweDAwMTgwMDAwLCAweDAwMTgwMDAwLCAweDAwMTgwMDAwLCAweDAwMTgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNmUwMDAwLCAweDAwNmUwMDAwLCAweDAwNmUwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwLCAweDAwYzcwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNGIwMDAwLCAweDAwNGIwMDAwLCAweDAwNGIwMDAwLCAweDAwNGIwMDAwLCAweDAwNGIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0NDgwMDAwLCAweDA0NDgwMDAwLCAweDA0NDgwMDAwLCAweDA0NDgwMDAwLCAweDA0NDgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZTQwMDAwLCAweDAwZTQwMDAwLCAweDAwZTQwMDAwLCAweDAwZTQwMDAwLCAweDAwZTQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwLCAweDAwZmMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDA0M2YwMDAwLCAweDA0M2YwMDAwLCAweDA0M2YwMDAwLCAweDA0M2YwMDAwLCAweDA0M2YwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTkwMDAwLCAweDAwMTkwMDAwLCAweDAwMTkwMDAwLCAweDAwMTkwMDAwLCAweDAwMTkwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwLCAweDAwYjQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwOTkwMDAwLCAweDAwOTkwMDAwLCAweDAwOTkwMDAwLCAweDAwOTkwMDAwLCAweDAwOTkwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNTAwMDAwLCAweDAwNTAwMDAwLCAweDAwNTAwMDAwLCAweDAwNTAwMDAwLCAweDAwNTAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweGMwMzIwMDAwLCAweGMwMzIwMDAwLCAweGMwMzIwMDAwLCAweGMwMzIwMDAwLCAweGMwMzIwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwLCAweDAxNzQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDg2MjgwMDAwLCAweDg2MjgwMDAwLCAweDg2MjgwMDAwLCAweDg2MjgwMDAwLCAweDg2MjgwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwLCAweDMxODQwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDIwMDgwLCAweDAwMDIwMDgwLCAweDAwMDIwMDgwLCAweDAwMDIwMDgwLCAweDAwMDIwMDgwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDgwMDA5LCAweDAwMDgwMDA5LCAweDAwMDgwMDA5LCAweDAwMDgwMDA5LCAweDAwMDgwMDA5IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGIyLCAweDAwMDAwMGIyLCAweDAwMDAwMGIyLCAweDAwMDAwMGIyLCAweDAwMDAwMGIyIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwYjAyMDg0LCAweDAwYjAyMDg0LCAweDAwYjAyMDg0LCAweDAwYjAyMDg0LCAweDAwYjAyMDg0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwNDEyNWE0LCAweDAwNDEyNWE0LCAweDAwNDEyNWE0LCAweDAwNDEyNWE0LCAweDAwNDEyNWE0IH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMTE5MjIwLCAweDAwMTE5MjIwLCAweDAwMTE5MjIwLCAweDAwMTE5MjIwLCAweDAwMTE5MjIwIH0gfSwKLQl7IDYsIDB4OTg5YywKLQkgICAgeyAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwLCAweDAwMWE0ODAwIH0gfSwKLQl7IDYsIDB4OThkOCwKLQkgICAgeyAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwLCAweDAwMGIwMjMwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5LCAweDAwMDAwMGQ5IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGEyLCAweDAwMDAwMGEyLCAweDAwMDAwMGEyLCAweDAwMDAwMGEyLCAweDAwMDAwMGEyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyLCAweDAwMDAwMDUyIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjIH0gfSwKLQl7IDcsIDB4OTg5YywKLQkgICAgeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKLQl7IDcsIDB4OThjNCwKLQkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKLX07Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmYgcmZyZWdzXzIxMTJhW10gPSB7Ci0JeyAxLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzQsCi0JLyoJICAgbW9kZSBiCW1vZGUgZwkgIG1vZGUgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyAyLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzMsCi0JCXsgMHgwMzA2MDQwOCwgMHgwMzA2MDQwOCwgMHgwMzA3MDQwOCB9IH0sCi0JeyAzLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzYsCi0JCXsgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDBhMDAwMDAwLCAweDBhMDAwMDAwLCAweDBhMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDgwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMmEwMDAwLCAweDAwMmEwMDAwLCAweDAwMmEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMTgwMDAwLCAweDAwMTgwMDAwLCAweDAwMTgwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCwgMHgwMGM3MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwNGIwMDAwLCAweDAwNGIwMDAwLCAweDAwNGIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZTQwMDAwLCAweDAwZTQwMDAwLCAweDAwZTQwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCwgMHgwMGZjMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwYzBjMDAwMCwgMHgwYzBjMDAwMCwgMHgwYzBjMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAyMTkwMDAwLCAweDAyMTkwMDAwLCAweDAyMTkwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCwgMHgwMGI0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwOTkwMDAwLCAweDAwOTkwMDAwLCAweDAwOTkwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCwgMHgwMTc0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCwgMHgzMTg0MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZjIwMDgwLCAweDAwZjIwMDgwLCAweDAwZjIwMDgwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwNzAwMTksIDB4MDAwNzAwMTksIDB4MDAwNzAwMTkgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGIwMjE4NCwgMHgwMGIwMjE4NCwgMHgwMGIwMjE4NCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwNDEyNWE0LCAweDAwNDEyNWE0LCAweDAwNDEyNWE0IH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCwgMHgwMDFhNDgwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzUsCi0JCXsgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCwgMHgwMDBiMDIzMCB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0IH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiwgMHgwMDAwMDAxMiB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDkgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCwgMHgwMDAwMDA2MCB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiwgMHgwMDAwMDA1MiB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YywgMHgwMDAwMDQ4YyB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzEsCi0JCXsgMHgwMDAwMDAwMywgMHgwMDAwMDAwMywgMHgwMDAwMDAwMyB9IH0sCi19OwotCi0vKiBSRjU0MTMvNTQxNCBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfNTQxM1tdID0gewotCXsgMSwgMHg5OGQ0LAotCS8qICAgIG1vZGUgYS9YUiAgIG1vZGUgYVR1cmJvIG1vZGUgYiAgICAgIG1vZGUgZyAgICAgIG1vZGUgZ1R1cmJvICovCi0JICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyAyLCAweDk4ZDAsCi0JICAgIHsgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCi0JeyAzLCAweDk4ZGMsCi0JICAgIHsgMHgwMGEwMDBjMCwgMHgwMGEwMDBjMCwgMHgwMGUwMDBjMCwgMHgwMGUwMDBjMCwgMHgwMGUwMDBjMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgzMzAwMDAwMCwgMHgzMzAwMDAwMCwgMHgzMzAwMDAwMCwgMHgzMzAwMDAwMCwgMHgzMzAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCwgMHgwMTAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgxZjAwMDAwMCwgMHgxZjAwMDAwMCwgMHgxZjAwMDAwMCwgMHgxZjAwMDAwMCwgMHgxZjAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGI4MDAwMCwgMHgwMGI4MDAwMCwgMHgwMGI4MDAwMCwgMHgwMGI4MDAwMCwgMHgwMGI4MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGI3MDAwMCwgMHgwMGI3MDAwMCwgMHgwMGI3MDAwMCwgMHgwMGI3MDAwMCwgMHgwMGI3MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDg0MDAwMCwgMHgwMDg0MDAwMCwgMHgwMDg0MDAwMCwgMHgwMDg0MDAwMCwgMHgwMDg0MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGMwMDAwMCwgMHgwMGMwMDAwMCwgMHgwMGMwMDAwMCwgMHgwMGMwMDAwMCwgMHgwMGMwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCwgMHgwMGZmMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGQ3MDAwMCwgMHgwMGQ3MDAwMCwgMHgwMGQ3MDAwMCwgMHgwMGQ3MDAwMCwgMHgwMGQ3MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDYxMDAwMCwgMHgwMDYxMDAwMCwgMHgwMDYxMDAwMCwgMHgwMDYxMDAwMCwgMHgwMDYxMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGZlMDAwMCwgMHgwMGZlMDAwMCwgMHgwMGZlMDAwMCwgMHgwMGZlMDAwMCwgMHgwMGZlMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMGRlMDAwMCwgMHgwMGRlMDAwMCwgMHgwMGRlMDAwMCwgMHgwMGRlMDAwMCwgMHgwMGRlMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDdmMDAwMCwgMHgwMDdmMDAwMCwgMHgwMDdmMDAwMCwgMHgwMDdmMDAwMCwgMHgwMDdmMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwNDNkMDAwMCwgMHgwNDNkMDAwMCwgMHgwNDNkMDAwMCwgMHgwNDNkMDAwMCwgMHgwNDNkMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCwgMHgwMDc3MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDQ0MDAwMCwgMHgwMDQ0MDAwMCwgMHgwMDQ0MDAwMCwgMHgwMDQ0MDAwMCwgMHgwMDQ0MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCwgMHgwMDk4MDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDEwMDA4MCwgMHgwMDEwMDA4MCwgMHgwMDEwMDA4MCwgMHgwMDEwMDA4MCwgMHgwMDEwMDA4MCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDA1YzAzNCwgMHgwMDA1YzAzNCwgMHgwMDA1YzAzNCwgMHgwMDA1YzAzNCwgMHgwMDA1YzAzNCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDMxMDBmMCwgMHgwMDMxMDBmMCwgMHgwMDMxMDBmMCwgMHgwMDMxMDBmMCwgMHgwMDMxMDBmMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDBjMDExZiwgMHgwMDBjMDExZiwgMHgwMDBjMDExZiwgMHgwMDBjMDExZiwgMHgwMDBjMDExZiB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDUxMDA0MCwgMHgwMDUxMDA0MCwgMHgwMDUxMDBhMCwgMHgwMDUxMDBhMCwgMHgwMDUxMDBhMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDUwMDA2YSwgMHgwMDUwMDA2YSwgMHgwMDUwMDBkZCwgMHgwMDUwMDBkZCwgMHgwMDUwMDBkZCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwNDA0NCwgMHgwMDAwNDA0NCwgMHgwMDAwNDA0NCwgMHgwMDAwNDA0NCwgMHgwMDAwNDA0NCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwNjBjMCwgMHgwMDAwNjBjMCwgMHgwMDAwNjBjMCwgMHgwMDAwNjBjMCwgMHgwMDAwNjBjMCB9IH0sCi0JeyA2LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMmMwMCwgMHgwMDAwMmMwMCwgMHgwMDAwMzYwMCwgMHgwMDAwMzYwMCwgMHgwMDAwMzYwMCB9IH0sCi0JeyA2LCAweDk4YzgsCi0JICAgIHsgMHgwMDAwMDQwMywgMHgwMDAwMDQwMywgMHgwMDA0MDQwMywgMHgwMDA0MDQwMywgMHgwMDA0MDQwMyB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCi0JeyA3LCAweDk4OWMsCi0JICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCi0JeyA3LCAweDk4Y2MsCi0JICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCi19OwotCi0vKiBSRjI0MTMvMjQxNCBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfMjQxM1tdID0gewotCXsgMSwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF80LAotCS8qIAkgICBtb2RlIGIgICAgICBtb2RlIGcgICAgIG1vZGUgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyAyLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzMsCi0JCXsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCi0JeyAzLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzYsCi0JCXsgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMzAwMDAwMCwgMHgwMzAwMDAwMCwgMHgwMzAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHg0MDQwMDAwMCwgMHg0MDQwMDAwMCwgMHg0MDQwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAsIDB4MDBiNTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAzMDAwMCwgMHgwMDAzMDAwMCwgMHgwMDAzMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAsIDB4MDA5ZDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDIyMDAwMCwgMHgwMDIyMDAwMCwgMHgwMDIyMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAyMzAwMTgsIDB4MDAyMzAwMTgsIDB4MDAyMzAwMTggfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDI4MDA1MCwgMHgwMDI4MDA1MCwgMHgwMDI4MDA1MCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwNTAwMGMzLCAweDAwNTAwMGMzLCAweDAwNTAwMGMzIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YsIDB4MDAwNDAwN2YgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDQ1OCwgMHgwMDAwMDQ1OCwgMHgwMDAwMDQ1OCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAsIDB4MDAwMGMwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF81LAotCQl7IDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAsIDB4MDA0MDAyMzAgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMiwKLQkJeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLX07Ci0KLS8qIFJGMjQyNSBtb2RlLXNwZWNpZmljIGluaXQgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiByZnJlZ3NfMjQyNVtdID0gewotCXsgMSwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF80LAotCS8qIAkgICBtb2RlIGcgICAgIG1vZGUgZ1R1cmJvICovCi0JCXsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCi0JeyAyLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzMsCi0JCXsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCi0JeyAzLCBBUjVLX1JGX0JVRkZFUl9DT05UUk9MXzYsCi0JCXsgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDEwMDAwMDAwLCAweDEwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDIwMDAwLCAweDAwMDIwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwZTcwMDAwLCAweDAwZTcwMDAwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDcwMDFhLCAweDAwMDcwMDFhIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDIwODAzLCAweDAwMDIwODAzIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyA2LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAxNjYwLCAweDAwMDAxNjYwIH0gfSwKLQl7IDYsIEFSNUtfUkZfQlVGRkVSLAotCQl7IDB4MDAwMDE2ODgsIDB4MDAwMDE2ODggfSB9LAotCXsgNiwgQVI1S19SRl9CVUZGRVJfQ09OVFJPTF8xLAotCQl7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAotCXsgNywgQVI1S19SRl9CVUZGRVIsCi0JCXsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCi0JeyA3LCBBUjVLX1JGX0JVRkZFUiwKLQkJeyAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKLQl7IDcsIEFSNUtfUkZfQlVGRkVSX0NPTlRST0xfMiwKLQkJeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKLX07Ci0KLS8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkY1MTEyICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzUxMTJbXSA9IHsKLQkvKgkJCSAgICAgIDVHaHoJMkdoegkqLwotCXsgQVI1S19SRl9HQUlOKDApLAl7IDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEpLAl7IDB4MDAwMDAwNDcsIDB4MDAwMDAwNDcgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIpLAl7IDB4MDAwMDAwODcsIDB4MDAwMDAwODcgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMpLAl7IDB4MDAwMDAxYTAsIDB4MDAwMDAxYTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQpLAl7IDB4MDAwMDAxZTAsIDB4MDAwMDAxZTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUpLAl7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYpLAl7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDcpLAl7IDB4MDAwMDAxYTEsIDB4MDAwMDAxYTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDgpLAl7IDB4MDAwMDAxZTEsIDB4MDAwMDAxZTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDkpLAl7IDB4MDAwMDAwMjEsIDB4MDAwMDAwMjEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEwKSwJeyAweDAwMDAwMDYxLCAweDAwMDAwMDYxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMSksCXsgMHgwMDAwMDE2MiwgMHgwMDAwMDE2MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTIpLAl7IDB4MDAwMDAxYTIsIDB4MDAwMDAxYTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDEzKSwJeyAweDAwMDAwMWUyLCAweDAwMDAwMWUyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNCksCXsgMHgwMDAwMDAyMiwgMHgwMDAwMDAyMiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTUpLAl7IDB4MDAwMDAwNjIsIDB4MDAwMDAwNjIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE2KSwJeyAweDAwMDAwMTYzLCAweDAwMDAwMTYzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNyksCXsgMHgwMDAwMDFhMywgMHgwMDAwMDFhMyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTgpLAl7IDB4MDAwMDAxZTMsIDB4MDAwMDAxZTMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE5KSwJeyAweDAwMDAwMDIzLCAweDAwMDAwMDIzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMCksCXsgMHgwMDAwMDA2MywgMHgwMDAwMDA2MyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjEpLAl7IDB4MDAwMDAxODQsIDB4MDAwMDAxODQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIyKSwJeyAweDAwMDAwMWM0LCAweDAwMDAwMWM0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMyksCXsgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjQpLAl7IDB4MDAwMDAxZWEsIDB4MDAwMDAwMGIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI1KSwJeyAweDAwMDAwMDJhLCAweDAwMDAwMDRiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNiksCXsgMHgwMDAwMDA2YSwgMHgwMDAwMDA4YiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjcpLAl7IDB4MDAwMDAwYWEsIDB4MDAwMDAxYWMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI4KSwJeyAweDAwMDAwMWFiLCAweDAwMDAwMWVjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyOSksCXsgMHgwMDAwMDFlYiwgMHgwMDAwMDAyYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzApLAl7IDB4MDAwMDAwMmIsIDB4MDAwMDAwMTIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDMxKSwJeyAweDAwMDAwMDZiLCAweDAwMDAwMDUyIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMiksCXsgMHgwMDAwMDBhYiwgMHgwMDAwMDA5MiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzMpLAl7IDB4MDAwMDAxYWMsIDB4MDAwMDAxOTMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM0KSwJeyAweDAwMDAwMWVjLCAweDAwMDAwMWQzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNSksCXsgMHgwMDAwMDAyYywgMHgwMDAwMDAxMyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzYpLAl7IDB4MDAwMDAwM2EsIDB4MDAwMDAwNTMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM3KSwJeyAweDAwMDAwMDdhLCAweDAwMDAwMDkzIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOCksCXsgMHgwMDAwMDBiYSwgMHgwMDAwMDE5NCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzkpLAl7IDB4MDAwMDAxYmIsIDB4MDAwMDAxZDQgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQwKSwJeyAweDAwMDAwMWZiLCAweDAwMDAwMDE0IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MSksCXsgMHgwMDAwMDAzYiwgMHgwMDAwMDAzYSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDIpLAl7IDB4MDAwMDAwN2IsIDB4MDAwMDAwN2EgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQzKSwJeyAweDAwMDAwMGJiLCAweDAwMDAwMGJhIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NCksCXsgMHgwMDAwMDFiYywgMHgwMDAwMDFiYiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDUpLAl7IDB4MDAwMDAxZmMsIDB4MDAwMDAxZmIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ2KSwJeyAweDAwMDAwMDNjLCAweDAwMDAwMDNiIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NyksCXsgMHgwMDAwMDA3YywgMHgwMDAwMDA3YiB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDgpLAl7IDB4MDAwMDAwYmMsIDB4MDAwMDAwYmIgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ5KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMWJjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDFmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTEpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwM2MgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUyKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMDdjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MyksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBiYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTQpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU1KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NiksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTcpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU4KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1OSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjApLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYxKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MiksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjMpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAotfTsKLQotLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjU0MTMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fNTQxM1tdID0gewotCS8qCQkJICAgICAgNUdoegkyR2h6CSovCi0JeyBBUjVLX1JGX0dBSU4oMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMSksCXsgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMiksCXsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMyksCXsgMHgwMDAwMDFhMSwgMHgwMDAwMDE2MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNCksCXsgMHgwMDAwMDFlMSwgMHgwMDAwMDFhMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNSksCXsgMHgwMDAwMDAyMSwgMHgwMDAwMDFlMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNiksCXsgMHgwMDAwMDA2MSwgMHgwMDAwMDAyMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNyksCXsgMHgwMDAwMDE4OCwgMHgwMDAwMDA2MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOCksCXsgMHgwMDAwMDFjOCwgMHgwMDAwMDE4OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOSksCXsgMHgwMDAwMDAwOCwgMHgwMDAwMDFjOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTApLAl7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDExKSwJeyAweDAwMDAwMDg4LCAweDAwMDAwMDQ4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMiksCXsgMHgwMDAwMDFhOSwgMHgwMDAwMDA4OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTMpLAl7IDB4MDAwMDAxZTksIDB4MDAwMDAxNjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE0KSwJeyAweDAwMDAwMDI5LCAweDAwMDAwMWE5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNSksCXsgMHgwMDAwMDA2OSwgMHgwMDAwMDFlOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTYpLAl7IDB4MDAwMDAxZDAsIDB4MDAwMDAwMjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE3KSwJeyAweDAwMDAwMDEwLCAweDAwMDAwMDY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOCksCXsgMHgwMDAwMDA1MCwgMHgwMDAwMDE5MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTkpLAl7IDB4MDAwMDAwOTAsIDB4MDAwMDAxZDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIwKSwJeyAweDAwMDAwMWIxLCAweDAwMDAwMDEwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMSksCXsgMHgwMDAwMDFmMSwgMHgwMDAwMDA1MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjIpLAl7IDB4MDAwMDAwMzEsIDB4MDAwMDAwOTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIzKSwJeyAweDAwMDAwMDcxLCAweDAwMDAwMTcxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNCksCXsgMHgwMDAwMDFiOCwgMHgwMDAwMDFiMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjUpLAl7IDB4MDAwMDAxZjgsIDB4MDAwMDAxZjEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI2KSwJeyAweDAwMDAwMDM4LCAweDAwMDAwMDMxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNyksCXsgMHgwMDAwMDA3OCwgMHgwMDAwMDA3MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjgpLAl7IDB4MDAwMDAxOTksIDB4MDAwMDAxOTggfSB9LAotCXsgQVI1S19SRl9HQUlOKDI5KSwJeyAweDAwMDAwMWQ5LCAweDAwMDAwMWQ4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMCksCXsgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzEpLAl7IDB4MDAwMDAwNTksIDB4MDAwMDAwNTggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMyKSwJeyAweDAwMDAwMDk5LCAweDAwMDAwMDk4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMyksCXsgMHgwMDAwMDBkOSwgMHgwMDAwMDE3OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzQpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAxYjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM1KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMWY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDAzOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzcpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwNzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM4KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGI5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDApLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQxKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDMpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ0KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDYpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ3KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDkpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUwKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTIpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUzKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTUpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU2KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTgpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU5KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjEpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYyKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCi19OwotCi0vKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGMjQxMyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl8yNDEzW10gPSB7Ci0JeyBBUjVLX1JGX0dBSU4oMCksIHsgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMSksIHsgMHgwMDAwMDA0MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMiksIHsgMHgwMDAwMDA4MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMyksIHsgMHgwMDAwMDE4MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNCksIHsgMHgwMDAwMDFjMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNSksIHsgMHgwMDAwMDAwMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNiksIHsgMHgwMDAwMDA0MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNyksIHsgMHgwMDAwMDA4MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOCksIHsgMHgwMDAwMDE2OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOSksIHsgMHgwMDAwMDFhOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTApLCB7IDB4MDAwMDAxZTggfSB9LAotCXsgQVI1S19SRl9HQUlOKDExKSwgeyAweDAwMDAwMDI4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMiksIHsgMHgwMDAwMDA2OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTMpLCB7IDB4MDAwMDAxODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE0KSwgeyAweDAwMDAwMWM5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNSksIHsgMHgwMDAwMDAwOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTYpLCB7IDB4MDAwMDAwNDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE3KSwgeyAweDAwMDAwMDg5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOCksIHsgMHgwMDAwMDE5MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTkpLCB7IDB4MDAwMDAxZDAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIwKSwgeyAweDAwMDAwMDEwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMSksIHsgMHgwMDAwMDA1MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjIpLCB7IDB4MDAwMDAwOTAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIzKSwgeyAweDAwMDAwMTkxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNCksIHsgMHgwMDAwMDFkMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjUpLCB7IDB4MDAwMDAwMTEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI2KSwgeyAweDAwMDAwMDUxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNyksIHsgMHgwMDAwMDA5MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjgpLCB7IDB4MDAwMDAxNzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDI5KSwgeyAweDAwMDAwMWI4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMCksIHsgMHgwMDAwMDFmOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzEpLCB7IDB4MDAwMDAwMzggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMyKSwgeyAweDAwMDAwMDc4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMyksIHsgMHgwMDAwMDE5OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzQpLCB7IDB4MDAwMDAxZDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM1KSwgeyAweDAwMDAwMDE5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNiksIHsgMHgwMDAwMDA1OSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzcpLCB7IDB4MDAwMDAwOTkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM4KSwgeyAweDAwMDAwMGQ5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDApLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQxKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDMpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ0KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDYpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ3KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDkpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUwKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTIpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUzKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTUpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU2KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTgpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU5KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjEpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYyKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MyksIHsgMHgwMDAwMDBmOSB9IH0sCi19OwotCi0vKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGMjQyNSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl8yNDI1W10gPSB7Ci0JeyBBUjVLX1JGX0dBSU4oMCksIHsgMHgwMDAwMDAwMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMSksIHsgMHgwMDAwMDA0MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMiksIHsgMHgwMDAwMDA4MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMyksIHsgMHgwMDAwMDE4MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNCksIHsgMHgwMDAwMDFjMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNSksIHsgMHgwMDAwMDAwMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNiksIHsgMHgwMDAwMDA0MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNyksIHsgMHgwMDAwMDA4MSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOCksIHsgMHgwMDAwMDE4OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oOSksIHsgMHgwMDAwMDFjOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTApLCB7IDB4MDAwMDAwMDggfSB9LAotCXsgQVI1S19SRl9HQUlOKDExKSwgeyAweDAwMDAwMDQ4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxMiksIHsgMHgwMDAwMDA4OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTMpLCB7IDB4MDAwMDAxODkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE0KSwgeyAweDAwMDAwMWM5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxNSksIHsgMHgwMDAwMDAwOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTYpLCB7IDB4MDAwMDAwNDkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDE3KSwgeyAweDAwMDAwMDg5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigxOCksIHsgMHgwMDAwMDFiMCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMTkpLCB7IDB4MDAwMDAxZjAgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIwKSwgeyAweDAwMDAwMDMwIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyMSksIHsgMHgwMDAwMDA3MCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjIpLCB7IDB4MDAwMDAxNzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDIzKSwgeyAweDAwMDAwMWIxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNCksIHsgMHgwMDAwMDFmMSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjUpLCB7IDB4MDAwMDAwMzEgfSB9LAotCXsgQVI1S19SRl9HQUlOKDI2KSwgeyAweDAwMDAwMDcxIH0gfSwKLQl7IEFSNUtfUkZfR0FJTigyNyksIHsgMHgwMDAwMDFiOCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMjgpLCB7IDB4MDAwMDAxZjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDI5KSwgeyAweDAwMDAwMDM4IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMCksIHsgMHgwMDAwMDA3OCB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzEpLCB7IDB4MDAwMDAwYjggfSB9LAotCXsgQVI1S19SRl9HQUlOKDMyKSwgeyAweDAwMDAwMWI5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzMyksIHsgMHgwMDAwMDFmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzQpLCB7IDB4MDAwMDAwMzkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM1KSwgeyAweDAwMDAwMDc5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzNiksIHsgMHgwMDAwMDBiOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oMzcpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDM4KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTigzOSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDApLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQxKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0MiksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDMpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ0KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0NSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDYpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDQ3KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig0OCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNDkpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUwKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1MSksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTIpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDUzKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTUpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU2KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig1NyksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNTgpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDU5KSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MCksIHsgMHgwMDAwMDBmOSB9IH0sCi0JeyBBUjVLX1JGX0dBSU4oNjEpLCB7IDB4MDAwMDAwZjkgfSB9LAotCXsgQVI1S19SRl9HQUlOKDYyKSwgeyAweDAwMDAwMGY5IH0gfSwKLQl7IEFSNUtfUkZfR0FJTig2MyksIHsgMHgwMDAwMDBmOSB9IH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0IHJmZ2Fpbl9vcHRfNTExMiA9IHsKLQkxLAotCTgsCi0JewotCQl7IHsgMywgMCwgMCwgMCwgMCwgMCwgMCB9LCA2IH0sCi0JCXsgeyAyLCAwLCAwLCAwLCAwLCAwLCAwIH0sIDAgfSwKLQkJeyB7IDEsIDAsIDAsIDAsIDAsIDAsIDAgfSwgLTMgfSwKLQkJeyB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgLTYgfSwKLQkJeyB7IDAsIDEsIDEsIDAsIDAsIDAsIDAgfSwgLTggfSwKLQkJeyB7IDAsIDEsIDEsIDAsIDEsIDEsIDAgfSwgLTEwIH0sCi0JCXsgeyAwLCAxLCAwLCAxLCAxLCAxLCAwIH0sIC0xMyB9LAotCQl7IHsgMCwgMSwgMCwgMSwgMSwgMCwgMSB9LCAtMTYgfSwKLQl9Ci19OworI2luY2x1ZGUgInJmYnVmZmVyLmgiCisjaW5jbHVkZSAicmZnYWluLmgiCiAKIC8qCiAgKiBVc2VkIHRvIG1vZGlmeSBSRiBCYW5rcyBiZWZvcmUgd3JpdGluZyB0aGVtIHRvIEFSNUtfUkZfQlVGRkVSCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRoNWtfaHdfcmZyZWdzX29wKHUzMiAqcmYsIHUzMiBvZmZzZXQsIHUzMiByZWcsIHUzMiBiaXRzLAotCQl1MzIgZmlyc3QsIHUzMiBjb2wsIGJvb2wgc2V0KQorc3RhdGljIHVuc2lnbmVkIGludCBhdGg1a19od19yZmJfb3Aoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCQkJY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyAqcmZfcmVncywKKwkJCQkJdTMyIHZhbCwgdTggcmVnX2lkLCBib29sIHNldCkKIHsKLQl1MzIgbWFzaywgZW50cnksIGxhc3QsIGRhdGEsIHNoaWZ0LCBwb3NpdGlvbjsKLQlzMzIgbGVmdDsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnICpyZnJlZyA9IE5VTEw7CisJdTggb2Zmc2V0LCBiYW5rLCBudW1fYml0cywgY29sLCBwb3NpdGlvbjsKKwl1MTYgZW50cnk7CisJdTMyIG1hc2ssIGRhdGEsIGxhc3RfYml0LCBiaXRzX3NoaWZ0ZWQsIGZpcnN0X2JpdDsKKwl1MzIgKnJmYjsKKwlzMzIgYml0c19sZWZ0OwogCWludCBpOwogCiAJZGF0YSA9IDA7CisJcmZiID0gYWgtPmFoX3JmX2JhbmtzOwogCi0JaWYgKHJmID09IE5VTEwpCisJZm9yIChpID0gMDsgaSA8IGFoLT5haF9yZl9yZWdzX2NvdW50OyBpKyspIHsKKwkJaWYgKHJmX3JlZ3NbaV0uaW5kZXggPT0gcmVnX2lkKSB7CisJCQlyZnJlZyA9ICZyZl9yZWdzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmZiID09IE5VTEwgfHwgcmZyZWcgPT0gTlVMTCkgeworCQlBVEg1S19QUklOVEYoIlJmIHJlZ2lzdGVyIG5vdCBmb3VuZCFcbiIpOwogCQkvKiBzaG91bGQgbm90IGhhcHBlbiAqLwogCQlyZXR1cm4gMDsKKwl9CiAKLQlpZiAoIShjb2wgPD0gMyAmJiBiaXRzIDw9IDMyICYmIGZpcnN0ICsgYml0cyA8PSAzMTkpKSB7CisJYmFuayA9IHJmcmVnLT5iYW5rOworCW51bV9iaXRzID0gcmZyZWctPmZpZWxkLmxlbjsKKwlmaXJzdF9iaXQgPSByZnJlZy0+ZmllbGQucG9zOworCWNvbCA9IHJmcmVnLT5maWVsZC5jb2w7CisKKwkvKiBmaXJzdF9iaXQgaXMgYW4gb2Zmc2V0IGZyb20gYmFuaydzCisJICogc3RhcnQuIFNpbmNlIHdlIGhhdmUgYWxsIGJhbmtzIG9uCisJICogdGhlIHNhbWUgYXJyYXksIHdlIHVzZSB0aGlzIG9mZnNldAorCSAqIHRvIG1hcmsgZWFjaCBiYW5rJ3Mgc3RhcnQgKi8KKwlvZmZzZXQgPSBhaC0+YWhfb2Zmc2V0W2JhbmtdOworCisJLyogQm91bmRhcnkgY2hlY2sgKi8KKwlpZiAoIShjb2wgPD0gMyAmJiBudW1fYml0cyA8PSAzMiAmJiBmaXJzdF9iaXQgKyBudW1fYml0cyA8PSAzMTkpKSB7CiAJCUFUSDVLX1BSSU5URigiaW52YWxpZCB2YWx1ZXMgYXQgb2Zmc2V0ICV1XG4iLCBvZmZzZXQpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQllbnRyeSA9ICgoZmlyc3QgLSAxKSAvIDgpICsgb2Zmc2V0OwotCXBvc2l0aW9uID0gKGZpcnN0IC0gMSkgJSA4OworCWVudHJ5ID0gKChmaXJzdF9iaXQgLSAxKSAvIDgpICsgb2Zmc2V0OworCXBvc2l0aW9uID0gKGZpcnN0X2JpdCAtIDEpICUgODsKIAogCWlmIChzZXQpCi0JCWRhdGEgPSBhdGg1a19od19iaXRzd2FwKHJlZywgYml0cyk7CisJCWRhdGEgPSBhdGg1a19od19iaXRzd2FwKHZhbCwgbnVtX2JpdHMpOwogCi0JZm9yIChpID0gc2hpZnQgPSAwLCBsZWZ0ID0gYml0czsgbGVmdCA+IDA7IHBvc2l0aW9uID0gMCwgZW50cnkrKywgaSsrKSB7Ci0JCWxhc3QgPSAocG9zaXRpb24gKyBsZWZ0ID4gOCkgPyA4IDogcG9zaXRpb24gKyBsZWZ0OwotCQltYXNrID0gKCgoMSA8PCBsYXN0KSAtIDEpIF4gKCgxIDw8IHBvc2l0aW9uKSAtIDEpKSA8PCAoY29sICogOCk7CisJZm9yIChiaXRzX3NoaWZ0ZWQgPSAwLCBiaXRzX2xlZnQgPSBudW1fYml0czsgYml0c19sZWZ0ID4gMDsKKwlwb3NpdGlvbiA9IDAsIGVudHJ5KyspIHsKKworCQlsYXN0X2JpdCA9IChwb3NpdGlvbiArIGJpdHNfbGVmdCA+IDgpID8gOCA6CisJCQkJCXBvc2l0aW9uICsgYml0c19sZWZ0OworCisJCW1hc2sgPSAoKCgxIDw8IGxhc3RfYml0KSAtIDEpIF4gKCgxIDw8IHBvc2l0aW9uKSAtIDEpKSA8PAorCQkJCQkJCQkoY29sICogOCk7CiAKIAkJaWYgKHNldCkgewotCQkJcmZbZW50cnldICY9IH5tYXNrOwotCQkJcmZbZW50cnldIHw9ICgoZGF0YSA8PCBwb3NpdGlvbikgPDwgKGNvbCAqIDgpKSAmIG1hc2s7CisJCQlyZmJbZW50cnldICY9IH5tYXNrOworCQkJcmZiW2VudHJ5XSB8PSAoKGRhdGEgPDwgcG9zaXRpb24pIDw8IChjb2wgKiA4KSkgJiBtYXNrOwogCQkJZGF0YSA+Pj0gKDggLSBwb3NpdGlvbik7CiAJCX0gZWxzZSB7Ci0JCQlkYXRhID0gKCgocmZbZW50cnldICYgbWFzaykgPj4gKGNvbCAqIDgpKSA+PiBwb3NpdGlvbikKLQkJCQk8PCBzaGlmdDsKLQkJCXNoaWZ0ICs9IGxhc3QgLSBwb3NpdGlvbjsKKwkJCWRhdGEgfD0gKCgocmZiW2VudHJ5XSAmIG1hc2spID4+IChjb2wgKiA4KSkgPj4gcG9zaXRpb24pCisJCQkJPDwgYml0c19zaGlmdGVkOworCQkJYml0c19zaGlmdGVkICs9IGxhc3RfYml0IC0gcG9zaXRpb247CiAJCX0KIAotCQlsZWZ0IC09IDggLSBwb3NpdGlvbjsKKwkJYml0c19sZWZ0IC09IDggLSBwb3NpdGlvbjsKIAl9CiAKLQlkYXRhID0gc2V0ID8gMSA6IGF0aDVrX2h3X2JpdHN3YXAoZGF0YSwgYml0cyk7CisJZGF0YSA9IHNldCA/IDEgOiBhdGg1a19od19iaXRzd2FwKGRhdGEsIG51bV9iaXRzKTsKIAogCXJldHVybiBkYXRhOwogfQogCi1zdGF0aWMgdTMyIGF0aDVrX2h3X3JmcmVnc19nYWluZl9jb3JyKHN0cnVjdCBhdGg1a19odyAqYWgpCisvKioqKioqKioqKioqKioqKioqKioqKlwKKyogUkYgR2FpbiBvcHRpbWl6YXRpb24gKgorXCoqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBUaGlzIGNvZGUgaXMgdXNlZCB0byBvcHRpbWl6ZSByZiBnYWluIG9uIGRpZmZlcmVudCBlbnZpcm9ubWVudHMKKyAqICh0ZW1wcmF0dXJlIG1vc3RseSkgYmFzZWQgb24gZmVlZGJhY2sgZnJvbSBhIHBvd2VyIGRldGVjdG9yLgorICoKKyAqIEl0J3Mgb25seSB1c2VkIG9uIFJGNTExMSBhbmQgUkY1MTEyLCBsYXRlciBSRiBjaGlwcyBzZWVtIHRvIGhhdmUKKyAqIGF1dG8gYWRqdXN0bWVudCBvbiBodyAtbm90aWNlIHRoZXkgaGF2ZSBhIG11Y2ggc21hbGxlciBCQU5LIDcgYW5kCisgKiBubyBnYWluIG9wdGltaXphdGlvbiBsYWRkZXItLgorICoKKyAqIEZvciBtb3JlIGluZm9zIGNoZWNrIG91dCB0aGlzIHBhdGVudCBkb2MKKyAqIGh0dHA6Ly93d3cuZnJlZXBhdGVudHNvbmxpbmUuY29tLzc0MDA2OTEuaHRtbAorICoKKyAqIFRoaXMgcGFwZXIgZGVzY3JpYmVzIHBvd2VyIGRyb3BzIGFzIHNlZW4gb24gdGhlIHJlY2VpdmVyIGR1ZSB0bworICogcHJvYmUgcGFja2V0cworICogaHR0cDovL3d3dy5jbnJpLmRpdC5pZS9wdWJsaWNhdGlvbnMvSUNUMDglMjAtJTIwUHJhY3RpY2FsJTIwSXNzdWVzCisgKiAlMjBvZiUyMFBvd2VyJTIwQ29udHJvbC5wZGYKKyAqCisgKiBBbmQgdGhpcyBpcyB0aGUgTWFkV2lGaSBidWcgZW50cnkgcmVsYXRlZCB0byB0aGUgYWJvdmUKKyAqIGh0dHA6Ly9tYWR3aWZpLXByb2plY3Qub3JnL3RpY2tldC8xNjU5CisgKiB3aXRoIHZhcmlvdXMgbWVhc3VyZW1lbnRzIGFuZCBkaWFncmFtcworICoKKyAqIFRPRE86IERlYWwgd2l0aCBwb3dlciBkcm9wcyBkdWUgdG8gcHJvYmVzIGJ5IHNldHRpbmcgYW4gYXByb3ByaWF0ZQorICogdHggcG93ZXIgb24gdGhlIHByb2JlIHBhY2tldHMgISBNYWtlIHRoaXMgcGFydCBvZiB0aGUgY2FsaWJyYXRpb24gcHJvY2Vzcy4KKyAqLworCisvKiBJbml0aWFsaXplIGFoX2dhaW4gZHVycmluZyBhdHRhY2ggKi8KK2ludCBhdGg1a19od19yZmdhaW5fb3B0X2luaXQoc3RydWN0IGF0aDVrX2h3ICphaCkKK3sKKwkvKiBJbml0aWFsaXplIHRoZSBnYWluIG9wdGltaXphdGlvbiB2YWx1ZXMgKi8KKwlzd2l0Y2ggKGFoLT5haF9yYWRpbykgeworCWNhc2UgQVI1S19SRjUxMTE6CisJCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPSByZmdhaW5fb3B0XzUxMTEuZ29fZGVmYXVsdDsKKwkJYWgtPmFoX2dhaW4uZ19sb3cgPSAyMDsKKwkJYWgtPmFoX2dhaW4uZ19oaWdoID0gMzU7CisJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9BQ1RJVkU7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjUxMTI6CisJCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPSByZmdhaW5fb3B0XzUxMTIuZ29fZGVmYXVsdDsKKwkJYWgtPmFoX2dhaW4uZ19sb3cgPSAyMDsKKwkJYWgtPmFoX2dhaW4uZ19oaWdoID0gODU7CisJCWFoLT5haF9nYWluLmdfc3RhdGUgPSBBUjVLX1JGR0FJTl9BQ1RJVkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisvKiBTY2hlZHVsZSBhIGdhaW4gcHJvYmUgY2hlY2sgb24gdGhlIG5leHQgdHJhbnNtaXRlZCBwYWNrZXQuCisgKiBUaGF0IG1lYW5zIG91ciBuZXh0IHBhY2tldCBpcyBnb2luZyB0byBiZSBzZW50IHdpdGggbG93ZXIKKyAqIHR4IHBvd2VyIGFuZCBhIFBlYWsgdG8gQXZlcmFnZSBQb3dlciBEZXRlY3RvciAoUEFQRCkgd2lsbCB0cnkKKyAqIHRvIG1lYXN1cmUgdGhlIGdhaW4uCisgKgorICogVE9ETzogVXNlIHByb3BwZXIgdHggcG93ZXIgc2V0dGluZyBmb3IgdGhlIHByb2JlIHBhY2tldCBzbworICogdGhhdCB3ZSBkb24ndCBvYnNlcnZlIGEgc2VyaW91cyBwb3dlciBkcm9wIG9uIHRoZSByZWNlaXZlcgorICoKKyAqIFhYWDogIEhvdyBhYm91dCBmb3JjaW5nIGEgdHggcGFja2V0IChieXBhc3NpbmcgUENVIGFyYml0cmF0b3IgZXRjKQorICoganVzdCBhZnRlciB3ZSBlbmFibGUgdGhlIHByb2JlIHNvIHRoYXQgd2UgZG9uJ3QgbWVzcyB3aXRoCisgKiBzdGFuZGFyZCB0cmFmZmljID8gTWF5YmUgaXQncyB0aW1lIHRvIHVzZSBzdyBpbnRlcnJ1cHRzIGFuZAorICogYSBwcm9iZSB0YXNrbGV0ICEhIQorICovCitzdGF0aWMgdm9pZCBhdGg1a19od19yZXF1ZXN0X3JmZ2Fpbl9wcm9iZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCisJLyogU2tpcCBpZiBnYWluIGNhbGlicmF0aW9uIGlzIGluYWN0aXZlIG9yCisJICogd2UgYWxyZWFkeSBoYW5kbGUgYSBwcm9iZSByZXF1ZXN0ICovCisJaWYgKGFoLT5haF9nYWluLmdfc3RhdGUgIT0gQVI1S19SRkdBSU5fQUNUSVZFKQorCQlyZXR1cm47CisKKwkvKiBTZW5kIHRoZSBwYWNrZXQgd2l0aCAyZEIgYmVsb3cgbWF4IHBvd2VyIGFzCisJICogcGF0ZW50IGRvYyBzdWdnZXN0ICovCisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1JFR19TTShhaC0+YWhfdHhwb3dlci50eHBfbWF4X3B3ciAtIDQsCisJCQlBUjVLX1BIWV9QQVBEX1BST0JFX1RYUE9XRVIpIHwKKwkJCUFSNUtfUEhZX1BBUERfUFJPQkVfVFhfTkVYVCwgQVI1S19QSFlfUEFQRF9QUk9CRSk7CisKKwlhaC0+YWhfZ2Fpbi5nX3N0YXRlID0gQVI1S19SRkdBSU5fUkVBRF9SRVFVRVNURUQ7CisKK30KKworLyogQ2FsY3VsYXRlIGdhaW5fRiBtZWFzdXJlbWVudCBjb3JyZWN0aW9uCisgKiBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGVwIGZvciBSRjUxMTIgcmV2LiAyICovCitzdGF0aWMgdTMyIGF0aDVrX2h3X3JmX2dhaW5mX2NvcnIoc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKIAl1MzIgbWl4LCBzdGVwOwogCXUzMiAqcmY7CisJY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0ICpnbzsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcCAqZ19zdGVwOworCWNvbnN0IHN0cnVjdCBhdGg1a19yZl9yZWcgKnJmX3JlZ3M7CisKKwkvKiBPbmx5IFJGNTExMiBSZXYuIDIgc3VwcG9ydHMgaXQgKi8KKwlpZiAoKGFoLT5haF9yYWRpbyAhPSBBUjVLX1JGNTExMikgfHwKKwkoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPD0gQVI1S19TUkVWX1JBRF81MTEyQSkpCisJCXJldHVybiAwOworCisJZ28gPSAmcmZnYWluX29wdF81MTEyOworCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTJhOworCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTJhKTsKKworCWdfc3RlcCA9ICZnby0+Z29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XTsKIAogCWlmIChhaC0+YWhfcmZfYmFua3MgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CkBAIC0xMTY1LDExICsyMjEsMTUgQEAKIAlyZiA9IGFoLT5haF9yZl9iYW5rczsKIAlhaC0+YWhfZ2Fpbi5nX2ZfY29yciA9IDA7CiAKLQlpZiAoYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzddLCAwLCAxLCAzNiwgMCwgZmFsc2UpICE9IDEpCisJLyogTm8gVkdBIChWYXJpYWJsZSBHYWluIEFtcGxpZmllcikgb3ZlcnJpZGUsIHNraXAgKi8KKwlpZiAoYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAwLCBBUjVLX1JGX01JWFZHQV9PVlIsIGZhbHNlKSAhPSAxKQogCQlyZXR1cm4gMDsKIAotCXN0ZXAgPSBhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbN10sIDAsIDQsIDMyLCAwLCBmYWxzZSk7Ci0JbWl4ID0gYWgtPmFoX2dhaW4uZ19zdGVwLT5nb3NfcGFyYW1bMF07CisJLyogTWl4IGdhaW4gc3RlcHBpbmcgKi8KKwlzdGVwID0gYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAwLCBBUjVLX1JGX01JWEdBSU5fU1RFUCwgZmFsc2UpOworCisJLyogTWl4IGdhaW4gb3ZlcnJpZGUgKi8KKwltaXggPSBnX3N0ZXAtPmdvc19wYXJhbVswXTsKIAogCXN3aXRjaCAobWl4KSB7CiAJY2FzZSAzOgpAQCAtMTE4OSw5ICsyNDksMTQgQEAKIAlyZXR1cm4gYWgtPmFoX2dhaW4uZ19mX2NvcnI7CiB9CiAKLXN0YXRpYyBib29sIGF0aDVrX2h3X3JmcmVnc19nYWluX3JlYWRiYWNrKHN0cnVjdCBhdGg1a19odyAqYWgpCisvKiBDaGVjayBpZiBjdXJyZW50IGdhaW5fRiBtZWFzdXJlbWVudCBpcyBpbiB0aGUgcmFuZ2Ugb2Ygb3VyCisgKiBwb3dlciBkZXRlY3RvciB3aW5kb3dzLiBJZiB3ZSBnZXQgYSBtZWFzdXJlbWVudCBvdXRzaWRlIHJhbmdlCisgKiB3ZSBrbm93IGl0J3Mgbm90IGFjY3VyYXRlIChkZXRlY3RvcnMgY2FuJ3QgbWVhc3VyZSBhbnl0aGluZyBvdXRzaWRlCisgKiB0aGVpciBkZXRlY3Rpb24gd2luZG93KSBzbyB3ZSBtdXN0IGlnbm9yZSBpdCAqLworc3RhdGljIGJvb2wgYXRoNWtfaHdfcmZfY2hlY2tfZ2FpbmZfcmVhZGJhY2soc3RydWN0IGF0aDVrX2h3ICphaCkKIHsKLQl1MzIgc3RlcCwgbWl4LCBsZXZlbFs0XTsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnICpyZl9yZWdzOworCXUzMiBzdGVwLCBtaXhfb3ZyLCBsZXZlbFs0XTsKIAl1MzIgKnJmOwogCiAJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKQpAQCAtMTIwMCwyMyArMjY1LDMzIEBACiAJcmYgPSBhaC0+YWhfcmZfYmFua3M7CiAKIAlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSB7Ci0JCXN0ZXAgPSBhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbN10sIDAsIDYsIDM3LCAwLAotCQkJCWZhbHNlKTsKKworCQlyZl9yZWdzID0gcmZfcmVnc181MTExOworCQlhaC0+YWhfcmZfcmVnc19jb3VudCA9IEFSUkFZX1NJWkUocmZfcmVnc181MTExKTsKKworCQlzdGVwID0gYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAwLCBBUjVLX1JGX1JGR0FJTl9TVEVQLAorCQkJZmFsc2UpOworCiAJCWxldmVsWzBdID0gMDsKLQkJbGV2ZWxbMV0gPSAoc3RlcCA9PSAweDNmKSA/IDB4MzIgOiBzdGVwICsgNDsKLQkJbGV2ZWxbMl0gPSAoc3RlcCAhPSAweDNmKSA/IDB4NDAgOiBsZXZlbFswXTsKLQkJbGV2ZWxbM10gPSBsZXZlbFsyXSArIDB4MzI7CisJCWxldmVsWzFdID0gKHN0ZXAgPT0gNjMpID8gNTAgOiBzdGVwICsgNDsKKwkJbGV2ZWxbMl0gPSAoc3RlcCAhPSA2MykgPyA2NCA6IGxldmVsWzBdOworCQlsZXZlbFszXSA9IGxldmVsWzJdICsgNTAgOwogCiAJCWFoLT5haF9nYWluLmdfaGlnaCA9IGxldmVsWzNdIC0KLQkJCShzdGVwID09IDB4M2YgPyBBUjVLX0dBSU5fRFlOX0FESlVTVF9ISV9NQVJHSU4gOiAtNSk7CisJCQkoc3RlcCA9PSA2MyA/IEFSNUtfR0FJTl9EWU5fQURKVVNUX0hJX01BUkdJTiA6IC01KTsKIAkJYWgtPmFoX2dhaW4uZ19sb3cgPSBsZXZlbFswXSArCi0JCQkoc3RlcCA9PSAweDNmID8gQVI1S19HQUlOX0RZTl9BREpVU1RfTE9fTUFSR0lOIDogMCk7CisJCQkoc3RlcCA9PSA2MyA/IEFSNUtfR0FJTl9EWU5fQURKVVNUX0xPX01BUkdJTiA6IDApOwogCX0gZWxzZSB7Ci0JCW1peCA9IGF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwgMCwgMSwgMzYsIDAsCi0JCQkJZmFsc2UpOworCisJCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTI7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTIpOworCisJCW1peF9vdnIgPSBhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDAsIEFSNUtfUkZfTUlYVkdBX09WUiwKKwkJCWZhbHNlKTsKKwogCQlsZXZlbFswXSA9IGxldmVsWzJdID0gMDsKIAotCQlpZiAobWl4ID09IDEpIHsKKwkJaWYgKG1peF9vdnIgPT0gMSkgewogCQkJbGV2ZWxbMV0gPSBsZXZlbFszXSA9IDgzOwogCQl9IGVsc2UgewogCQkJbGV2ZWxbMV0gPSBsZXZlbFszXSA9IDEwNzsKQEAgLTEyMzAsOSArMzA1LDEyIEBACiAJCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPD0gbGV2ZWxbM10pOwogfQogCi1zdGF0aWMgczMyIGF0aDVrX2h3X3JmcmVnc19nYWluX2FkanVzdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQorLyogUGVyZm9ybSBnYWluX0YgYWRqdXN0bWVudCBieSBjaG9vc2luZyB0aGUgcmlnaHQgc2V0CisgKiBvZiBwYXJhbWV0ZXJzIGZyb20gcmYgZ2FpbiBvcHRpbWl6YXRpb24gbGFkZGVyICovCitzdGF0aWMgczggYXRoNWtfaHdfcmZfZ2FpbmZfYWRqdXN0KHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CiAJY29uc3Qgc3RydWN0IGF0aDVrX2dhaW5fb3B0ICpnbzsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcCAqZ19zdGVwOwogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKQEAgLTEyNDYsMzUgKzMyNCwzOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPSAmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF07CisJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOwogCiAJaWYgKGFoLT5haF9nYWluLmdfY3VycmVudCA+PSBhaC0+YWhfZ2Fpbi5nX2hpZ2gpIHsKKworCQkvKiBSZWFjaGVkIG1heGltdW0gKi8KIAkJaWYgKGFoLT5haF9nYWluLmdfc3RlcF9pZHggPT0gMCkKIAkJCXJldHVybiAtMTsKKwogCQlmb3IgKGFoLT5haF9nYWluLmdfdGFyZ2V0ID0gYWgtPmFoX2dhaW4uZ19jdXJyZW50OwogCQkJCWFoLT5haF9nYWluLmdfdGFyZ2V0ID49ICBhaC0+YWhfZ2Fpbi5nX2hpZ2ggJiYKIAkJCQlhaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4ID4gMDsKLQkJCQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPQotCQkJCQkmZ28tPmdvX3N0ZXBbYWgtPmFoX2dhaW4uZ19zdGVwX2lkeF0pCisJCQkJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdKQogCQkJYWgtPmFoX2dhaW4uZ190YXJnZXQgLT0gMiAqCiAJCQkgICAgKGdvLT5nb19zdGVwWy0tKGFoLT5haF9nYWluLmdfc3RlcF9pZHgpXS5nb3NfZ2FpbiAtCi0JCQkgICAgYWgtPmFoX2dhaW4uZ19zdGVwLT5nb3NfZ2Fpbik7CisJCQkgICAgZ19zdGVwLT5nb3NfZ2Fpbik7CiAKIAkJcmV0ID0gMTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmIChhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPD0gYWgtPmFoX2dhaW4uZ19sb3cpIHsKKworCQkvKiBSZWFjaGVkIG1pbmltdW0gKi8KIAkJaWYgKGFoLT5haF9nYWluLmdfc3RlcF9pZHggPT0gKGdvLT5nb19zdGVwc19jb3VudCAtIDEpKQogCQkJcmV0dXJuIC0yOworCiAJCWZvciAoYWgtPmFoX2dhaW4uZ190YXJnZXQgPSBhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQ7CiAJCQkJYWgtPmFoX2dhaW4uZ190YXJnZXQgPD0gYWgtPmFoX2dhaW4uZ19sb3cgJiYKIAkJCQlhaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4IDwgZ28tPmdvX3N0ZXBzX2NvdW50LTE7Ci0JCQkJYWgtPmFoX2dhaW4uZ19zdGVwID0KLQkJCQkJJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdKQorCQkJCWdfc3RlcCA9ICZnby0+Z29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XSkKIAkJCWFoLT5haF9nYWluLmdfdGFyZ2V0IC09IDIgKgogCQkJICAgIChnby0+Z29fc3RlcFsrK2FoLT5haF9nYWluLmdfc3RlcF9pZHhdLmdvc19nYWluIC0KLQkJCSAgICBhaC0+YWhfZ2Fpbi5nX3N0ZXAtPmdvc19nYWluKTsKKwkJCSAgICBnX3N0ZXAtPmdvc19nYWluKTsKIAogCQlyZXQgPSAyOwogCQlnb3RvIGRvbmU7CkBAIC0xMjg5LDM1MyArMzcxLDc4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIFJlYWQgRUVQUk9NIENhbGlicmF0aW9uIGRhdGEsIG1vZGlmeSBSRiBCYW5rcyBhbmQgSW5pdGlhbGl6ZSBSRjUxMTEKLSAqLwotc3RhdGljIGludCBhdGg1a19od19yZjUxMTFfcmZyZWdzKHN0cnVjdCBhdGg1a19odyAqYWgsCi0JCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgaW50IG1vZGUpCisvKiBNYWluIGNhbGxiYWNrIGZvciB0aGVybWFsIHJmIGdhaW4gY2FsaWJyYXRpb24gZW5naW5lCisgKiBDaGVjayBmb3IgYSBuZXcgZ2FpbiByZWFkaW5nIGFuZCBzY2hlZHVsZSBhbiBhZGp1c3RtZW50CisgKiBpZiBuZWVkZWQuCisgKgorICogVE9ETzogVXNlIHN3IGludGVycnVwdCB0byBzY2hlZHVsZSByZXNldCBpZiBnYWluX0YgbmVlZHMKKyAqIGFkanVzdG1lbnQgKi8KK2VudW0gYXRoNWtfcmZnYWluIGF0aDVrX2h3X2dhaW5mX2NhbGlicmF0ZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogeworCXUzMiBkYXRhLCB0eXBlOwogCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCXUzMiAqcmY7Ci0JY29uc3QgdW5zaWduZWQgaW50IHJmX3NpemUgPSBBUlJBWV9TSVpFKHJmcmVnc181MTExKTsKLQl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgb2JkYiA9IC0xLCBiYW5rID0gLTE7Ci0JdTMyIGVlX21vZGU7CiAKLQlBUjVLX0FTU0VSVF9FTlRSWShtb2RlLCBBUjVLX01PREVfTUFYKTsKKwlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwogCi0JcmYgPSBhaC0+YWhfcmZfYmFua3M7CisJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMIHx8CisJYWgtPmFoX2dhaW4uZ19zdGF0ZSA9PSBBUjVLX1JGR0FJTl9JTkFDVElWRSkKKwkJcmV0dXJuIEFSNUtfUkZHQUlOX0lOQUNUSVZFOwogCi0JLyogQ29weSB2YWx1ZXMgdG8gbW9kaWZ5IHRoZW0gKi8KLQlmb3IgKGkgPSAwOyBpIDwgcmZfc2l6ZTsgaSsrKSB7Ci0JCWlmIChyZnJlZ3NfNTExMVtpXS5yZl9iYW5rID49IEFSNUtfUkY1MTExX0lOSV9SRl9NQVhfQkFOS1MpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJpbnZhbGlkIGJhbmtcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJLyogTm8gY2hlY2sgcmVxdWVzdGVkLCBlaXRoZXIgZW5naW5lIGlzIGluYWN0aXZlCisJICogb3IgYW4gYWRqdXN0bWVudCBpcyBhbHJlYWR5IHJlcXVlc3RlZCAqLworCWlmIChhaC0+YWhfZ2Fpbi5nX3N0YXRlICE9IEFSNUtfUkZHQUlOX1JFQURfUkVRVUVTVEVEKQorCQlnb3RvIGRvbmU7CisKKwkvKiBSZWFkIHRoZSBQQVBEIChQZWFrIHRvIEF2ZXJhZ2UgUG93ZXIgRGV0ZWN0b3IpCisJICogcmVnaXN0ZXIgKi8KKwlkYXRhID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1BBUERfUFJPQkUpOworCisJLyogTm8gcHJvYmUgaXMgc2NoZWR1bGVkLCByZWFkIGdhaW5fRiBtZWFzdXJlbWVudCAqLworCWlmICghKGRhdGEgJiBBUjVLX1BIWV9QQVBEX1BST0JFX1RYX05FWFQpKSB7CisJCWFoLT5haF9nYWluLmdfY3VycmVudCA9IGRhdGEgPj4gQVI1S19QSFlfUEFQRF9QUk9CRV9HQUlORl9TOworCQl0eXBlID0gQVI1S19SRUdfTVMoZGF0YSwgQVI1S19QSFlfUEFQRF9QUk9CRV9UWVBFKTsKKworCQkvKiBJZiB0eCBwYWNrZXQgaXMgQ0NLIGNvcnJlY3QgdGhlIGdhaW5fRiBtZWFzdXJlbWVudAorCQkgKiBieSBjY2sgb2ZkbSBnYWluIGRlbHRhICovCisJCWlmICh0eXBlID09IEFSNUtfUEhZX1BBUERfUFJPQkVfVFlQRV9DQ0spIHsKKwkJCWlmIChhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUkFEXzUxMTJBKQorCQkJCWFoLT5haF9nYWluLmdfY3VycmVudCArPQorCQkJCQllZS0+ZWVfY2NrX29mZG1fZ2Fpbl9kZWx0YTsKKwkJCWVsc2UKKwkJCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgKz0KKwkJCQkJQVI1S19HQUlOX0NDS19QUk9CRV9DT1JSOwogCQl9CiAKLQkJaWYgKGJhbmsgIT0gcmZyZWdzXzUxMTFbaV0ucmZfYmFuaykgewotCQkJYmFuayA9IHJmcmVnc181MTExW2ldLnJmX2Jhbms7Ci0JCQlhaC0+YWhfb2Zmc2V0W2JhbmtdID0gaTsKKwkJLyogRnVydGhlciBjb3JyZWN0IGdhaW5fRiBtZWFzdXJlbWVudCBmb3IKKwkJICogUkY1MTEyQSByYWRpb3MgKi8KKwkJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfNTExMkEpIHsKKwkJCWF0aDVrX2h3X3JmX2dhaW5mX2NvcnIoYWgpOworCQkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ID0KKwkJCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPj0gYWgtPmFoX2dhaW4uZ19mX2NvcnIgPworCQkJCShhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQtYWgtPmFoX2dhaW4uZ19mX2NvcnIpIDoKKwkJCQkwOwogCQl9CiAKLQkJcmZbaV0gPSByZnJlZ3NfNTExMVtpXS5yZl92YWx1ZVttb2RlXTsKKwkJLyogQ2hlY2sgaWYgbWVhc3VyZW1lbnQgaXMgb2sgYW5kIGlmIHdlIG5lZWQKKwkJICogdG8gYWRqdXN0IGdhaW4sIHNjaGVkdWxlIGEgZ2FpbiBhZGp1c3RtZW50LAorCQkgKiBlbHNlIHN3aXRjaCBiYWNrIHRvIHRoZSBhY2l2ZSBzdGF0ZSAqLworCQlpZiAoYXRoNWtfaHdfcmZfY2hlY2tfZ2FpbmZfcmVhZGJhY2soYWgpICYmCisJCUFSNUtfR0FJTl9DSEVDS19BREpVU1QoJmFoLT5haF9nYWluKSAmJgorCQlhdGg1a19od19yZl9nYWluZl9hZGp1c3QoYWgpKSB7CisJCQlhaC0+YWhfZ2Fpbi5nX3N0YXRlID0gQVI1S19SRkdBSU5fTkVFRF9DSEFOR0U7CisJCX0gZWxzZSB7CisJCQlhaC0+YWhfZ2Fpbi5nX3N0YXRlID0gQVI1S19SRkdBSU5fQUNUSVZFOworCQl9CiAJfQogCi0JLyogTW9kaWZ5IGJhbmsgMCAqLwotCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfMkdIWikgewotCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykKLQkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQjsKLQkJZWxzZQotCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOwotCQlvYmRiID0gMDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFswXSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDExOSwgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFswXSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDEyMiwgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlvYmRiID0gMTsKLQkvKiBNb2RpZnkgYmFuayA2ICovCi0JfSBlbHNlIHsKLQkJLyogRm9yIDExYSwgVHVyYm8gYW5kIFhSICovCi0JCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKLQkJb2JkYiA9CSBjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NzI1ID8gMyA6Ci0JCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTUwMCA/IDIgOgotCQkJKGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDUyNjAgPyAxIDoKLQkJCSAoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPiA0MDAwID8gMCA6IC0xKSkpOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJCWVlLT5lZV9wd2RfODQsIDEsIDUxLCAzLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJCWVlLT5lZV9wd2RfOTAsIDEsIDQ1LCAzLCB0cnVlKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICghYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCQkJIWVlLT5lZV94cGRbZWVfbW9kZV0sIDEsIDk1LCAwLCB0cnVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCWVlLT5lZV94X2dhaW5bZWVfbW9kZV0sIDQsIDk2LCAwLCB0cnVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwgb2JkYiA+PSAwID8KLQkJCWVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSA6IDAsIDMsIDEwNCwgMCwgdHJ1ZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sIG9iZGIgPj0gMCA/Ci0JCQllZS0+ZWVfZGJbZWVfbW9kZV1bb2JkYl0gOiAwLCAzLCAxMDcsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIE1vZGlmeSBiYW5rIDcgKi8KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwKLQkJCWVlLT5lZV9pX2dhaW5bZWVfbW9kZV0sIDYsIDI5LCAwLCB0cnVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwKLQkJCWVlLT5lZV94cGRbZWVfbW9kZV0sIDEsIDQsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFdyaXRlIFJGIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspIHsKLQkJQVI1S19SRUdfV0FJVChpKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCByZltpXSwgcmZyZWdzXzUxMTFbaV0ucmZfcmVnaXN0ZXIpOwotCX0KLQotCXJldHVybiAwOworZG9uZToKKwlyZXR1cm4gYWgtPmFoX2dhaW4uZ19zdGF0ZTsKIH0KIAotLyoKLSAqIFJlYWQgRUVQUk9NIENhbGlicmF0aW9uIGRhdGEsIG1vZGlmeSBSRiBCYW5rcyBhbmQgSW5pdGlhbGl6ZSBSRjUxMTIKLSAqLwotc3RhdGljIGludCBhdGg1a19od19yZjUxMTJfcmZyZWdzKHN0cnVjdCBhdGg1a19odyAqYWgsCi0JCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwgdW5zaWduZWQgaW50IG1vZGUpCi17Ci0JY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZiAqcmZfaW5pOwotCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOwotCXUzMiAqcmY7Ci0JdW5zaWduZWQgaW50IHJmX3NpemUsIGk7Ci0JaW50IG9iZGIgPSAtMSwgYmFuayA9IC0xOwotCXUzMiBlZV9tb2RlOwotCi0JQVI1S19BU1NFUlRfRU5UUlkobW9kZSwgQVI1S19NT0RFX01BWCk7Ci0KLQlyZiA9IGFoLT5haF9yZl9iYW5rczsKLQotCWlmIChhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUkFEXzIxMTJBCi0JCSYmICF0ZXN0X2JpdChBUjVLX01PREVfMTFBLCBhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9tb2RlKSkgewotCQlyZl9pbmkgPSByZnJlZ3NfMjExMmE7Ci0JCXJmX3NpemUgPSBBUlJBWV9TSVpFKHJmcmVnc181MTEyYSk7Ci0JCWlmIChtb2RlIDwgMikgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgY2hhbm5lbCBtb2RlOiAlaVxuIiwKLQkJCQkgIG1vZGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJbW9kZSA9IG1vZGUgLSAyOyAvKm5vIGEvdHVyYm9hIG1vZGVzIGZvciAyMTEyKi8KLQl9IGVsc2UgaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfNTExMkEpIHsKLQkJcmZfaW5pID0gcmZyZWdzXzUxMTJhOwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfNTExMmEpOwotCX0gZWxzZSB7Ci0JCXJmX2luaSA9IHJmcmVnc181MTEyOwotCQlyZl9zaXplID0gQVJSQVlfU0laRShyZnJlZ3NfNTExMik7Ci0JfQotCi0JLyogQ29weSB2YWx1ZXMgdG8gbW9kaWZ5IHRoZW0gKi8KLQlmb3IgKGkgPSAwOyBpIDwgcmZfc2l6ZTsgaSsrKSB7Ci0JCWlmIChyZl9pbmlbaV0ucmZfYmFuayA+PSBBUjVLX1JGNTExMl9JTklfUkZfTUFYX0JBTktTKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiaW52YWxpZCBiYW5rXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKGJhbmsgIT0gcmZfaW5pW2ldLnJmX2JhbmspIHsKLQkJCWJhbmsgPSByZl9pbmlbaV0ucmZfYmFuazsKLQkJCWFoLT5haF9vZmZzZXRbYmFua10gPSBpOwotCQl9Ci0KLQkJcmZbaV0gPSByZl9pbmlbaV0ucmZfdmFsdWVbbW9kZV07Ci0JfQotCi0JLyogTW9kaWZ5IGJhbmsgNiAqLwotCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfMkdIWikgewotCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pCi0JCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUc7Ci0JCWVsc2UKLQkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQjsKLQkJb2JkYiA9IDA7Ci0KLQkJaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkJZWUtPmVlX29iW2VlX21vZGVdW29iZGJdLCAzLCAyODcsIDAsIHRydWUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQkJZWUtPmVlX29iW2VlX21vZGVdW29iZGJdLCAzLCAyOTAsIDAsIHRydWUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIHsKLQkJLyogRm9yIDExYSwgVHVyYm8gYW5kIFhSICovCi0JCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKLQkJb2JkYiA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDU3MjUgPyAzIDoKLQkJICAgIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NTAwID8gMiA6Ci0JCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTI2MCA/IDEgOgotCQkJICAgIChjaGFubmVsLT5jZW50ZXJfZnJlcSA+IDQwMDAgPyAwIDogLTEpKSk7Ci0KLQkJaWYgKG9iZGIgPT0gLTEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDI3OSwgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs2XSwKLQkJCQllZS0+ZWVfb2JbZWVfbW9kZV1bb2JkYl0sIDMsIDI4MiwgMCwgdHJ1ZSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JICAgIGVlLT5lZV94X2dhaW5bZWVfbW9kZV0sIDIsIDI3MCwgMCwgdHJ1ZSk7Ci0JYXRoNWtfaHdfcmZyZWdzX29wKHJmLCBhaC0+YWhfb2Zmc2V0WzZdLAotCSAgICBlZS0+ZWVfeF9nYWluW2VlX21vZGVdLCAyLCAyNTcsIDAsIHRydWUpOwotCi0JaWYgKCFhdGg1a19od19yZnJlZ3Nfb3AocmYsIGFoLT5haF9vZmZzZXRbNl0sCi0JCQllZS0+ZWVfeHBkW2VlX21vZGVdLCAxLCAzMDIsIDAsIHRydWUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIE1vZGlmeSBiYW5rIDcgKi8KLQlpZiAoIWF0aDVrX2h3X3JmcmVnc19vcChyZiwgYWgtPmFoX29mZnNldFs3XSwKLQkJCWVlLT5lZV9pX2dhaW5bZWVfbW9kZV0sIDYsIDE0LCAwLCB0cnVlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBXcml0ZSBSRiB2YWx1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgcmZfc2l6ZTsgaSsrKQotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHJmW2ldLCByZl9pbmlbaV0ucmZfcmVnaXN0ZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIFJGNTQxMy81NDE0IGFuZCBmdXR1cmUgY2hpcHMKLSAqICh1bnRpbCB3ZSBjb21lIHVwIHdpdGggYSBiZXR0ZXIgc29sdXRpb24pCi0gKi8KLXN0YXRpYyBpbnQgYXRoNWtfaHdfcmY1NDEzX3JmcmVncyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAotCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIHVuc2lnbmVkIGludCBtb2RlKQotewotCWNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmYgKnJmX2luaTsKLQl1MzIgKnJmOwotCXVuc2lnbmVkIGludCByZl9zaXplLCBpOwotCWludCBiYW5rID0gLTE7Ci0KLQlBUjVLX0FTU0VSVF9FTlRSWShtb2RlLCBBUjVLX01PREVfTUFYKTsKLQotCXJmID0gYWgtPmFoX3JmX2JhbmtzOwotCi0Jc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKLQljYXNlIEFSNUtfUkY1NDEzOgotCQlyZl9pbmkgPSByZnJlZ3NfNTQxMzsKLQkJcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzU0MTMpOwotCQlicmVhazsKLQljYXNlIEFSNUtfUkYyNDEzOgotCQlyZl9pbmkgPSByZnJlZ3NfMjQxMzsKLQkJcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzI0MTMpOwotCi0JCWlmIChtb2RlIDwgMikgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywKLQkJCQkiaW52YWxpZCBjaGFubmVsIG1vZGU6ICVpXG4iLCBtb2RlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbW9kZSA9IG1vZGUgLSAyOwotCQlicmVhazsKLQljYXNlIEFSNUtfUkYyNDI1OgotCQlyZl9pbmkgPSByZnJlZ3NfMjQyNTsKLQkJcmZfc2l6ZSA9IEFSUkFZX1NJWkUocmZyZWdzXzI0MjUpOwotCi0JCWlmIChtb2RlIDwgMikgewotCQkJQVRINUtfRVJSKGFoLT5haF9zYywKLQkJCQkiaW52YWxpZCBjaGFubmVsIG1vZGU6ICVpXG4iLCBtb2RlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJLyogTWFwIGIgdG8gZyAqLwotCQlpZiAobW9kZSA9PSAyKQotCQkJbW9kZSA9IDA7Ci0JCWVsc2UKLQkJCW1vZGUgPSBtb2RlIC0gMzsKLQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBDb3B5IHZhbHVlcyB0byBtb2RpZnkgdGhlbSAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspIHsKLQkJaWYgKHJmX2luaVtpXS5yZl9iYW5rID49IEFSNUtfUkY1MTEyX0lOSV9SRl9NQVhfQkFOS1MpIHsKLQkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJpbnZhbGlkIGJhbmtcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoYmFuayAhPSByZl9pbmlbaV0ucmZfYmFuaykgewotCQkJYmFuayA9IHJmX2luaVtpXS5yZl9iYW5rOwotCQkJYWgtPmFoX29mZnNldFtiYW5rXSA9IGk7Ci0JCX0KLQotCQlyZltpXSA9IHJmX2luaVtpXS5yZl92YWx1ZVttb2RlXTsKLQl9Ci0KLQkvKgotCSAqIEFmdGVyIGNvbXBhaXJpbmcgZHVtcHMgZnJvbSBkaWZmZXJlbnQgY2FyZHMKLQkgKiB3ZSBnZXQgdGhlIHNhbWUgUkZfQlVGRkVSIHNldHRpbmdzIChkaWZmIHJldHVybnMKLQkgKiAwIGxpbmVzKS4gSXQgc2VlbXMgdGhhdCBSRl9CVUZGRVIgc2V0dGluZ3MgYXJlIHN0YXRpYwotCSAqIGFuZCBhcmUgd3JpdHRlbiB1bm1vZGlmaWVkIChubyBFRVBST00gc3R1ZmYKLQkgKiBpcyB1c2VkIGJlY2F1c2UgY2FsaWJyYXRpb24gZGF0YSB3b3VsZCBiZQotCSAqIGRpZmZlcmVudCBiZXR3ZWVuIGRpZmZlcmVudCBjYXJkcyBhbmQgd291bGQgcmVzdWx0Ci0JICogZGlmZmVyZW50IFJGX0JVRkZFUiBzZXR0aW5ncykKLQkgKi8KLQotCS8qIFdyaXRlIFJGIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCByZl9zaXplOyBpKyspCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcmZbaV0sIHJmX2luaVtpXS5yZl9yZWdpc3Rlcik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgUkYKLSAqLwotaW50IGF0aDVrX2h3X3JmcmVncyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCi0JCXVuc2lnbmVkIGludCBtb2RlKQotewotCWludCAoKmZ1bmMpKHN0cnVjdCBhdGg1a19odyAqLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKiwgdW5zaWduZWQgaW50KTsKLQlpbnQgcmV0OwotCi0Jc3dpdGNoIChhaC0+YWhfcmFkaW8pIHsKLQljYXNlIEFSNUtfUkY1MTExOgotCQlhaC0+YWhfcmZfYmFua3Nfc2l6ZSA9IHNpemVvZihyZnJlZ3NfNTExMSk7Ci0JCWZ1bmMgPSBhdGg1a19od19yZjUxMTFfcmZyZWdzOwotCQlicmVhazsKLQljYXNlIEFSNUtfUkY1MTEyOgotCQlpZiAoYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPj0gQVI1S19TUkVWX1JBRF81MTEyQSkKLQkJCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc181MTEyYSk7Ci0JCWVsc2UKLQkJCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc181MTEyKTsKLQkJZnVuYyA9IGF0aDVrX2h3X3JmNTExMl9yZnJlZ3M7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjU0MTM6Ci0JCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc181NDEzKTsKLQkJZnVuYyA9IGF0aDVrX2h3X3JmNTQxM19yZnJlZ3M7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjI0MTM6Ci0JCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc18yNDEzKTsKLQkJZnVuYyA9IGF0aDVrX2h3X3JmNTQxM19yZnJlZ3M7Ci0JCWJyZWFrOwotCWNhc2UgQVI1S19SRjI0MjU6Ci0JCWFoLT5haF9yZl9iYW5rc19zaXplID0gc2l6ZW9mKHJmcmVnc18yNDI1KTsKLQkJZnVuYyA9IGF0aDVrX2h3X3JmNTQxM19yZnJlZ3M7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChhaC0+YWhfcmZfYmFua3MgPT0gTlVMTCkgewotCQkvKiBYWFggZG8gZXh0cmEgY2hlY2tzPyAqLwotCQlhaC0+YWhfcmZfYmFua3MgPSBrbWFsbG9jKGFoLT5haF9yZl9iYW5rc19zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGFoLT5haF9yZl9iYW5rcyA9PSBOVUxMKSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAib3V0IG9mIG1lbW9yeVxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQotCXJldCA9IGZ1bmMoYWgsIGNoYW5uZWwsIG1vZGUpOwotCWlmICghcmV0KQotCQlhaC0+YWhfcmZfZ2FpbiA9IEFSNUtfUkZHQUlOX0lOQUNUSVZFOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IGF0aDVrX2h3X3JmZ2FpbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgZnJlcSkKKy8qIFdyaXRlIGluaXRpYWwgcmYgZ2FpbiB0YWJsZSB0byBzZXQgdGhlIFJGIHNlbnNpdGl2aXR5CisgKiB0aGlzIG9uZSB3b3JrcyBvbiBhbGwgUkYgY2hpcHMgYW5kIGhhcyBub3RoaW5nIHRvIGRvCisgKiB3aXRoIGdhaW5fRiBjYWxpYnJhdGlvbiAqLworaW50IGF0aDVrX2h3X3JmZ2Fpbl9pbml0KHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCBmcmVxKQogewogCWNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluICphdGg1a19yZmc7CiAJdW5zaWduZWQgaW50IGksIHNpemU7CkBAIC0xNjQ5LDE5ICs0NTYsMjIgQEAKIAkJYXRoNWtfcmZnID0gcmZnYWluXzUxMTI7CiAJCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl81MTEyKTsKIAkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjQxMzoKKwkJYXRoNWtfcmZnID0gcmZnYWluXzI0MTM7CisJCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl8yNDEzKTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1JGMjMxNjoKKwkJYXRoNWtfcmZnID0gcmZnYWluXzIzMTY7CisJCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl8yMzE2KTsKKwkJYnJlYWs7CiAJY2FzZSBBUjVLX1JGNTQxMzoKIAkJYXRoNWtfcmZnID0gcmZnYWluXzU0MTM7CiAJCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl81NDEzKTsKIAkJYnJlYWs7Ci0JY2FzZSBBUjVLX1JGMjQxMzoKLQkJYXRoNWtfcmZnID0gcmZnYWluXzI0MTM7Ci0JCXNpemUgPSBBUlJBWV9TSVpFKHJmZ2Fpbl8yNDEzKTsKLQkJZnJlcSA9IDA7IC8qIG9ubHkgMkdoeiAqLwotCQlicmVhazsKKwljYXNlIEFSNUtfUkYyMzE3OgogCWNhc2UgQVI1S19SRjI0MjU6CiAJCWF0aDVrX3JmZyA9IHJmZ2Fpbl8yNDI1OwogCQlzaXplID0gQVJSQVlfU0laRShyZmdhaW5fMjQyNSk7Ci0JCWZyZXEgPSAwOyAvKiBvbmx5IDJHaHogKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNjg0LDczICs0OTQsMzI2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWVudW0gYXRoNWtfcmZnYWluIGF0aDVrX2h3X2dldF9yZl9nYWluKHN0cnVjdCBhdGg1a19odyAqYWgpCisKKworLyoqKioqKioqKioqKioqKioqKioqXAorKiBSRiBSZWdpc3RlcnMgc2V0dXAgKgorXCoqKioqKioqKioqKioqKioqKioqLworCisKKy8qCisgKiBTZXR1cCBSRiByZWdpc3RlcnMgYnkgd3JpdGluZyByZiBidWZmZXIgb24gaHcKKyAqLworaW50IGF0aDVrX2h3X3JmcmVnc19pbml0KHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJdW5zaWduZWQgaW50IG1vZGUpCiB7Ci0JdTMyIGRhdGEsIHR5cGU7CisJY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyAqcmZfcmVnczsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyICppbmlfcmZiOworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdCAqZ28gPSBOVUxMOworCWNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdF9zdGVwICpnX3N0ZXA7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisJdTggZWVfbW9kZSA9IDA7CisJdTMyICpyZmI7CisJaW50IGksIG9iZGIgPSAtMSwgYmFuayA9IC0xOwogCi0JQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQotCWlmIChhaC0+YWhfcmZfYmFua3MgPT0gTlVMTCB8fCAhYWgtPmFoX2dhaW4uZ19hY3RpdmUgfHwKLQkJCWFoLT5haF92ZXJzaW9uIDw9IEFSNUtfQVI1MjExKQotCQlyZXR1cm4gQVI1S19SRkdBSU5fSU5BQ1RJVkU7Ci0KLQlpZiAoYWgtPmFoX3JmX2dhaW4gIT0gQVI1S19SRkdBSU5fUkVBRF9SRVFVRVNURUQpCi0JCWdvdG8gZG9uZTsKLQotCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUEFQRF9QUk9CRSk7Ci0KLQlpZiAoIShkYXRhICYgQVI1S19QSFlfUEFQRF9QUk9CRV9UWF9ORVhUKSkgewotCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPSBkYXRhID4+IEFSNUtfUEhZX1BBUERfUFJPQkVfR0FJTkZfUzsKLQkJdHlwZSA9IEFSNUtfUkVHX01TKGRhdGEsIEFSNUtfUEhZX1BBUERfUFJPQkVfVFlQRSk7Ci0KLQkJaWYgKHR5cGUgPT0gQVI1S19QSFlfUEFQRF9QUk9CRV9UWVBFX0NDSykKLQkJCWFoLT5haF9nYWluLmdfY3VycmVudCArPSBBUjVLX0dBSU5fQ0NLX1BST0JFX0NPUlI7Ci0KLQkJaWYgKGFoLT5haF9yYWRpbyA+PSBBUjVLX1JGNTExMikgewotCQkJYXRoNWtfaHdfcmZyZWdzX2dhaW5mX2NvcnIoYWgpOwotCQkJYWgtPmFoX2dhaW4uZ19jdXJyZW50ID0KLQkJCQlhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQgPj0gYWgtPmFoX2dhaW4uZ19mX2NvcnIgPwotCQkJCShhaC0+YWhfZ2Fpbi5nX2N1cnJlbnQtYWgtPmFoX2dhaW4uZ19mX2NvcnIpIDoKLQkJCQkwOwotCQl9Ci0KLQkJaWYgKGF0aDVrX2h3X3JmcmVnc19nYWluX3JlYWRiYWNrKGFoKSAmJgotCQkJCUFSNUtfR0FJTl9DSEVDS19BREpVU1QoJmFoLT5haF9nYWluKSAmJgotCQkJCWF0aDVrX2h3X3JmcmVnc19nYWluX2FkanVzdChhaCkpCi0JCQlhaC0+YWhfcmZfZ2FpbiA9IEFSNUtfUkZHQUlOX05FRURfQ0hBTkdFOwotCX0KLQotZG9uZToKLQlyZXR1cm4gYWgtPmFoX3JmX2dhaW47Ci19Ci0KLWludCBhdGg1a19od19zZXRfcmZnYWluX29wdChzdHJ1Y3QgYXRoNWtfaHcgKmFoKQotewotCS8qIEluaXRpYWxpemUgdGhlIGdhaW4gb3B0aW1pemF0aW9uIHZhbHVlcyAqLwogCXN3aXRjaCAoYWgtPmFoX3JhZGlvKSB7CiAJY2FzZSBBUjVLX1JGNTExMToKLQkJYWgtPmFoX2dhaW4uZ19zdGVwX2lkeCA9IHJmZ2Fpbl9vcHRfNTExMS5nb19kZWZhdWx0OwotCQlhaC0+YWhfZ2Fpbi5nX3N0ZXAgPQotCQkgICAgJnJmZ2Fpbl9vcHRfNTExMS5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOwotCQlhaC0+YWhfZ2Fpbi5nX2xvdyA9IDIwOwotCQlhaC0+YWhfZ2Fpbi5nX2hpZ2ggPSAzNTsKLQkJYWgtPmFoX2dhaW4uZ19hY3RpdmUgPSAxOworCQlyZl9yZWdzID0gcmZfcmVnc181MTExOworCQlhaC0+YWhfcmZfcmVnc19jb3VudCA9IEFSUkFZX1NJWkUocmZfcmVnc181MTExKTsKKwkJaW5pX3JmYiA9IHJmYl81MTExOworCQlhaC0+YWhfcmZfYmFua3Nfc2l6ZSA9IEFSUkFZX1NJWkUocmZiXzUxMTEpOworCQlnbyA9ICZyZmdhaW5fb3B0XzUxMTE7CiAJCWJyZWFrOwogCWNhc2UgQVI1S19SRjUxMTI6Ci0JCWFoLT5haF9nYWluLmdfc3RlcF9pZHggPSByZmdhaW5fb3B0XzUxMTIuZ29fZGVmYXVsdDsKLQkJYWgtPmFoX2dhaW4uZ19zdGVwID0KLQkJICAgICZyZmdhaW5fb3B0XzUxMTIuZ29fc3RlcFthaC0+YWhfZ2Fpbi5nX3N0ZXBfaWR4XTsKLQkJYWgtPmFoX2dhaW4uZ19sb3cgPSAyMDsKLQkJYWgtPmFoX2dhaW4uZ19oaWdoID0gODU7Ci0JCWFoLT5haF9nYWluLmdfYWN0aXZlID0gMTsKKwkJaWYgKGFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uID49IEFSNUtfU1JFVl9SQURfNTExMkEpIHsKKwkJCXJmX3JlZ3MgPSByZl9yZWdzXzUxMTJhOworCQkJYWgtPmFoX3JmX3JlZ3NfY291bnQgPSBBUlJBWV9TSVpFKHJmX3JlZ3NfNTExMmEpOworCQkJaW5pX3JmYiA9IHJmYl81MTEyYTsKKwkJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfNTExMmEpOworCQl9IGVsc2UgeworCQkJcmZfcmVncyA9IHJmX3JlZ3NfNTExMjsKKwkJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzUxMTIpOworCQkJaW5pX3JmYiA9IHJmYl81MTEyOworCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl81MTEyKTsKKwkJfQorCQlnbyA9ICZyZmdhaW5fb3B0XzUxMTI7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjI0MTM6CisJCXJmX3JlZ3MgPSByZl9yZWdzXzI0MTM7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzI0MTMpOworCQlpbmlfcmZiID0gcmZiXzI0MTM7CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfMjQxMyk7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjIzMTY6CisJCXJmX3JlZ3MgPSByZl9yZWdzXzIzMTY7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzIzMTYpOworCQlpbmlfcmZiID0gcmZiXzIzMTY7CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfMjMxNik7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjU0MTM6CisJCXJmX3JlZ3MgPSByZl9yZWdzXzU0MTM7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzU0MTMpOworCQlpbmlfcmZiID0gcmZiXzU0MTM7CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfNTQxMyk7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjIzMTc6CisJCXJmX3JlZ3MgPSByZl9yZWdzXzI0MjU7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzI0MjUpOworCQlpbmlfcmZiID0gcmZiXzIzMTc7CisJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfMjMxNyk7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjI0MjU6CisJCXJmX3JlZ3MgPSByZl9yZWdzXzI0MjU7CisJCWFoLT5haF9yZl9yZWdzX2NvdW50ID0gQVJSQVlfU0laRShyZl9yZWdzXzI0MjUpOworCQlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSMjQxNykgeworCQkJaW5pX3JmYiA9IHJmYl8yNDI1OworCQkJYWgtPmFoX3JmX2JhbmtzX3NpemUgPSBBUlJBWV9TSVpFKHJmYl8yNDI1KTsKKwkJfSBlbHNlIHsKKwkJCWluaV9yZmIgPSByZmJfMjQxNzsKKwkJCWFoLT5haF9yZl9iYW5rc19zaXplID0gQVJSQVlfU0laRShyZmJfMjQxNyk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogSWYgaXQncyB0aGUgZmlyc3QgdGltZSB3ZSBzZXQgcmYgYnVmZmVyLCBhbGxvY2F0ZQorCSAqIGFoLT5haF9yZl9iYW5rcyBiYXNlZCBvbiBhaC0+YWhfcmZfYmFua3Nfc2l6ZQorCSAqIHdlIHNldCBhYm92ZSAqLworCWlmIChhaC0+YWhfcmZfYmFua3MgPT0gTlVMTCkgeworCQlhaC0+YWhfcmZfYmFua3MgPSBrbWFsbG9jKHNpemVvZih1MzIpICogYWgtPmFoX3JmX2JhbmtzX3NpemUsCisJCQkJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoYWgtPmFoX3JmX2JhbmtzID09IE5VTEwpIHsKKwkJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCisJLyogQ29weSB2YWx1ZXMgdG8gbW9kaWZ5IHRoZW0gKi8KKwlyZmIgPSBhaC0+YWhfcmZfYmFua3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWgtPmFoX3JmX2JhbmtzX3NpemU7IGkrKykgeworCQlpZiAoaW5pX3JmYltpXS5yZmJfYmFuayA+PSBBUjVLX01BWF9SRl9CQU5LUykgeworCQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgYmFua1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qIEJhbmsgY2hhbmdlZCwgd3JpdGUgZG93biB0aGUgb2Zmc2V0ICovCisJCWlmIChiYW5rICE9IGluaV9yZmJbaV0ucmZiX2JhbmspIHsKKwkJCWJhbmsgPSBpbmlfcmZiW2ldLnJmYl9iYW5rOworCQkJYWgtPmFoX29mZnNldFtiYW5rXSA9IGk7CisJCX0KKworCQlyZmJbaV0gPSBpbmlfcmZiW2ldLnJmYl9tb2RlX2RhdGFbbW9kZV07CisJfQorCisJLyogU2V0IE91dHB1dCBhbmQgRHJpdmVyIGJpYXMgY3VycmVudCAoT0IvREIpICovCisJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7CisKKwkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9DQ0spCisJCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUI7CisJCWVsc2UKKwkJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExRzsKKworCQkvKiBGb3IgUkY1MTFYL1JGMjExWCBjb21iaW5hdGlvbiB3ZQorCQkgKiB1c2UgYl9PQiBhbmQgYl9EQiBwYXJhbWV0ZXJzIHN0b3JlZAorCQkgKiBpbiBlZXByb20gb24gZWUtPmVlX29iW2VlX21vZGVdWzBdCisJCSAqCisJCSAqIEZvciBhbGwgb3RoZXIgY2hpcHMgd2UgdXNlIE9CL0RCIGZvciAyR2h6CisJCSAqIHN0b3JlZCBpbiB0aGUgYi9nIG1vZGFsIHNlY3Rpb24ganVzdCBsaWtlCisJCSAqIDgwMi4xMWEgb24gZWUtPmVlX29iW2VlX21vZGVdWzFdICovCisJCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKSB8fAorCQkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTEyKSkKKwkJCW9iZGIgPSAwOworCQllbHNlCisJCQlvYmRiID0gMTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV9vYltlZV9tb2RlXVtvYmRiXSwKKwkJCQkJCUFSNUtfUkZfT0JfMkdIWiwgdHJ1ZSk7CisKKwkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBlZS0+ZWVfZGJbZWVfbW9kZV1bb2JkYl0sCisJCQkJCQlBUjVLX1JGX0RCXzJHSFosIHRydWUpOworCisJLyogUkY1MTExIGFsd2F5cyBuZWVkcyBPQi9EQiBmb3IgNUdIeiwgZXZlbiBpZiB3ZSB1c2UgMkdIeiAqLworCX0gZWxzZSBpZiAoKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKSB8fAorCQkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSkpIHsKKworCQkvKiBGb3IgMTFhLCBUdXJibyBhbmQgWFIgd2UgbmVlZCB0byBjaG9vc2UKKwkJICogT0IvREIgYmFzZWQgb24gZnJlcXVlbmN5IHJhbmdlICovCisJCWVlX21vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKKwkJb2JkYiA9CSBjaGFubmVsLT5jZW50ZXJfZnJlcSA+PSA1NzI1ID8gMyA6CisJCQkoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPj0gNTUwMCA/IDIgOgorCQkJKGNoYW5uZWwtPmNlbnRlcl9mcmVxID49IDUyNjAgPyAxIDoKKwkJCSAoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPiA0MDAwID8gMCA6IC0xKSkpOworCisJCWlmIChvYmRiIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZWUtPmVlX29iW2VlX21vZGVdW29iZGJdLAorCQkJCQkJQVI1S19SRl9PQl81R0haLCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV9kYltlZV9tb2RlXVtvYmRiXSwKKwkJCQkJCUFSNUtfUkZfREJfNUdIWiwgdHJ1ZSk7CisJfQorCisJZ19zdGVwID0gJmdvLT5nb19zdGVwW2FoLT5haF9nYWluLmdfc3RlcF9pZHhdOworCisJLyogQmFuayBNb2RpZmljYXRpb25zIChjaGlwLXNwZWNpZmljKSAqLworCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTEpIHsKKworCQkvKiBTZXQgZ2Fpbl9GIHNldHRpbmdzIGFjY29yZGluZyB0byBjdXJyZW50IHN0ZXAgKi8KKwkJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9PRkRNKSB7CisKKwkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0ZSQU1FX0NUTCwKKwkJCQkJQVI1S19QSFlfRlJBTUVfQ1RMX1RYX0NMSVAsCisJCQkJCWdfc3RlcC0+Z29zX3BhcmFtWzBdKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVsxXSwKKwkJCQkJCQlBUjVLX1JGX1BXRF85MCwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bMl0sCisJCQkJCQkJQVI1S19SRl9QV0RfODQsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzNdLAorCQkJCQkJQVI1S19SRl9SRkdBSU5fU0VMLCB0cnVlKTsKKworCQkJLyogV2UgcHJvZ3JhbW1lZCBnYWluX0YgcGFyYW1ldGVycywgc3dpdGNoIGJhY2sKKwkJCSAqIHRvIGFjdGl2ZSBzdGF0ZSAqLworCQkJYWgtPmFoX2dhaW4uZ19zdGF0ZSA9IEFSNUtfUkZHQUlOX0FDVElWRTsKKworCQl9CisKKwkJLyogQmFuayA2Lzcgc2V0dXAgKi8KKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsICFlZS0+ZWVfeHBkW2VlX21vZGVdLAorCQkJCQkJQVI1S19SRl9QV0RfWFBELCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV94X2dhaW5bZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1hQRF9HQUlOLCB0cnVlKTsKKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV9pX2dhaW5bZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX0dBSU5fSSwgdHJ1ZSk7CisKKwkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBlZS0+ZWVfeHBkW2VlX21vZGVdLAorCQkJCQkJQVI1S19SRl9QTE9fU0VMLCB0cnVlKTsKKworCQkvKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgY2hhbm5lbCBzdXBwb3J0ICovCisJfQorCisJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgeworCisJCS8qIFNldCBnYWluX0Ygc2V0dGluZ3MgYWNjb3JkaW5nIHRvIGN1cnJlbnQgc3RlcCAqLworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVswXSwKKwkJCQkJCUFSNUtfUkZfTUlYR0FJTl9PVlIsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzFdLAorCQkJCQkJQVI1S19SRl9QV0RfMTM4LCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVsyXSwKKwkJCQkJCUFSNUtfUkZfUFdEXzEzNywgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bM10sCisJCQkJCQlBUjVLX1JGX1BXRF8xMzYsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGdfc3RlcC0+Z29zX3BhcmFtWzRdLAorCQkJCQkJQVI1S19SRl9QV0RfMTMyLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCBnX3N0ZXAtPmdvc19wYXJhbVs1XSwKKwkJCQkJCUFSNUtfUkZfUFdEXzEzMSwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgZ19zdGVwLT5nb3NfcGFyYW1bNl0sCisJCQkJCQlBUjVLX1JGX1BXRF8xMzAsIHRydWUpOworCisJCQkvKiBXZSBwcm9ncmFtbWVkIGdhaW5fRiBwYXJhbWV0ZXJzLCBzd2l0Y2ggYmFjaworCQkJICogdG8gYWN0aXZlIHN0YXRlICovCisJCQlhaC0+YWhfZ2Fpbi5nX3N0YXRlID0gQVI1S19SRkdBSU5fQUNUSVZFOworCQl9CisKKwkJLyogQmFuayA2Lzcgc2V0dXAgKi8KKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV94cGRbZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1hQRF9TRUwsIHRydWUpOworCisJCWlmIChhaC0+YWhfcmFkaW9fNWdoel9yZXZpc2lvbiA8IEFSNUtfU1JFVl9SQURfNTExMkEpIHsKKwkJCS8qIFJldi4gMSBzdXBwb3J0cyBvbmx5IG9uZSB4cGQgKi8KKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKKwkJCQkJCWVlLT5lZV94X2dhaW5bZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1hQRF9HQUlOLCB0cnVlKTsKKworCQl9IGVsc2UgeworCQkJLyogVE9ETzogU2V0IGhpZ2ggYW5kIGxvdyBnYWluIGJpdHMgKi8KKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywKKwkJCQkJCWVlLT5lZV94X2dhaW5bZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX1BEX0dBSU5fTE8sIHRydWUpOworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLAorCQkJCQkJZWUtPmVlX3hfZ2FpbltlZV9tb2RlXSwKKwkJCQkJCUFSNUtfUkZfUERfR0FJTl9ISSwgdHJ1ZSk7CisKKwkJCS8qIExvd2VyIHN5bnRoIHZvbHRhZ2Ugb24gUmV2IDIgKi8KKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMiwKKwkJCQkJQVI1S19SRl9ISUdIX1ZDX0NQLCB0cnVlKTsKKworCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAyLAorCQkJCQlBUjVLX1JGX01JRF9WQ19DUCwgdHJ1ZSk7CisKKwkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMiwKKwkJCQkJQVI1S19SRl9MT1dfVkNfQ1AsIHRydWUpOworCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDIsCisJCQkJCUFSNUtfUkZfUFVTSF9VUCwgdHJ1ZSk7CisKKwkJCS8qIERlY3JlYXNlIHBvd2VyIGNvbnN1bXB0aW9uIG9uIDUyMTMrIEJhc2VCYW5kICovCisJCQlpZiAoYWgtPmFoX3BoeV9yZXZpc2lvbiA+PSBBUjVLX1NSRVZfUEhZXzUyMTJBKSB7CisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLAorCQkJCQkJQVI1S19SRl9QQUQyR05ELCB0cnVlKTsKKworCQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMSwKKwkJCQkJCUFSNUtfUkZfWEIyX0xWTCwgdHJ1ZSk7CisKKwkJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIDEsCisJCQkJCQlBUjVLX1JGX1hCNV9MVkwsIHRydWUpOworCisJCQkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLAorCQkJCQkJQVI1S19SRl9QV0RfMTY3LCB0cnVlKTsKKworCQkJCWF0aDVrX2h3X3JmYl9vcChhaCwgcmZfcmVncywgMSwKKwkJCQkJCUFSNUtfUkZfUFdEXzE2NiwgdHJ1ZSk7CisJCQl9CisJCX0KKworCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGVlLT5lZV9pX2dhaW5bZWVfbW9kZV0sCisJCQkJCQlBUjVLX1JGX0dBSU5fSSwgdHJ1ZSk7CisKKwkJLyogVE9ETzogSGFsZi9xdWFydGVyIGNoYW5uZWwgc3VwcG9ydCAqLworCisJfQorCisJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMyAmJgorCWNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7CisKKwkJYXRoNWtfaHdfcmZiX29wKGFoLCByZl9yZWdzLCAxLCBBUjVLX1JGX0RFUkJZX0NIQU5fU0VMX01PREUsCisJCQkJCQkJCQl0cnVlKTsKKworCQkvKiBTZXQgb3B0aW11bSB2YWx1ZSBmb3IgZWFybHkgcmV2aXNpb25zIChvbiBwY2ktZSBjaGlwcykgKi8KKwkJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVI1NDI0ICYmCisJCWFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjU0MTMpCisJCQlhdGg1a19od19yZmJfb3AoYWgsIHJmX3JlZ3MsIGF0aDVrX2h3X2JpdHN3YXAoNiwgMyksCisJCQkJCQlBUjVLX1JGX1BXRF9JQ0xPQlVGXzJHLCB0cnVlKTsKKworCX0KKworCS8qIFdyaXRlIFJGIGJhbmtzIG9uIGh3ICovCisJZm9yIChpID0gMDsgaSA8IGFoLT5haF9yZl9iYW5rc19zaXplOyBpKyspIHsKKwkJQVI1S19SRUdfV0FJVChpKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCByZmJbaV0sIGluaV9yZmJbaV0ucmZiX2N0cmxfcmVnaXN0ZXIpOworCX0KKwogCXJldHVybiAwOwogfQogCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKlwKICAgUEhZL1JGIGNoYW5uZWwgZnVuY3Rpb25zCiBcKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0yMjcxLDEzICsxMzM0LDggQEAKIAkgKiBhcyBvZnRlbiBhcyBJL1EgY2FsaWJyYXRpb24uKi8KIAlhdGg1a19od19ub2lzZV9mbG9vcl9jYWxpYnJhdGlvbihhaCwgY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOwogCi0JLyogUmVxdWVzdCBSRiBnYWluICovCi0JaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00oYWgtPmFoX3R4cG93ZXIudHhwX21heCwKLQkJCUFSNUtfUEhZX1BBUERfUFJPQkVfVFhQT1dFUikgfAotCQkJQVI1S19QSFlfUEFQRF9QUk9CRV9UWF9ORVhULCBBUjVLX1BIWV9QQVBEX1BST0JFKTsKLQkJYWgtPmFoX3JmX2dhaW4gPSBBUjVLX1JGR0FJTl9SRUFEX1JFUVVFU1RFRDsKLQl9CisJLyogSW5pdGlhdGUgYSBnYWluX0YgY2FsaWJyYXRpb24gKi8KKwlhdGg1a19od19yZXF1ZXN0X3JmZ2Fpbl9wcm9iZShhaCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIzNzgsOTMgKzE0MzYsMTEyMCBAQAogCXJldHVybiBmYWxzZTsgLypYWFg6IFdoYXQgZG8gd2UgcmV0dXJuIGZvciA1MjEwID8qLwogfQogCisKKy8qKioqKioqKioqKioqKioqXAorKiBUWCBwb3dlciBzZXR1cCAqCitcKioqKioqKioqKioqKioqKi8KKwogLyoKLSAqIFRYIHBvd2VyIHNldHVwCisgKiBIZWxwZXIgZnVuY3Rpb25zCiAgKi8KIAogLyoKLSAqIEluaXRpYWxpemUgdGhlIHR4IHBvd2VyIHRhYmxlIChub3QgZnVsbHkgaW1wbGVtZW50ZWQpCisgKiBEbyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHR3byBnaXZlbiAoeCwgeSkgcG9pbnRzCiAgKi8KLXN0YXRpYyB2b2lkIGF0aDVrX3R4cG93ZXJfdGFibGUoc3RydWN0IGF0aDVrX2h3ICphaCwKLQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCBzMTYgbWF4X3Bvd2VyKQorc3RhdGljIHMxNgorYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZShzMTYgdGFyZ2V0LCBzMTYgeF9sZWZ0LCBzMTYgeF9yaWdodCwKKwkJCQkJczE2IHlfbGVmdCwgczE2IHlfcmlnaHQpCiB7Ci0JdW5zaWduZWQgaW50IGksIG1pbiwgbWF4LCBuOwotCXUxNiB0eHBvd2VyLCAqcmF0ZXM7CisJczE2IHJhdGlvLCByZXN1bHQ7CiAKLQlyYXRlcyA9IGFoLT5haF90eHBvd2VyLnR4cF9yYXRlczsKKwkvKiBBdm9pZCBkaXZpZGUgYnkgemVybyBhbmQgc2tpcCBpbnRlcnBvbGF0aW9uCisJICogaWYgd2UgaGF2ZSB0aGUgc2FtZSBwb2ludCAqLworCWlmICgoeF9sZWZ0ID09IHhfcmlnaHQpIHx8ICh5X2xlZnQgPT0geV9yaWdodCkpCisJCXJldHVybiB5X2xlZnQ7CiAKLQl0eHBvd2VyID0gQVI1S19UVU5FX0RFRkFVTFRfVFhQT1dFUiAqIDI7Ci0JaWYgKG1heF9wb3dlciA+IHR4cG93ZXIpCi0JCXR4cG93ZXIgPSBtYXhfcG93ZXIgPiBBUjVLX1RVTkVfTUFYX1RYUE9XRVIgPwotCQkgICAgQVI1S19UVU5FX01BWF9UWFBPV0VSIDogbWF4X3Bvd2VyOworCS8qCisJICogU2luY2Ugd2UgdXNlIGludHMgYW5kIG5vdCBmcHMsIHdlIG5lZWQgdG8gc2NhbGUgdXAgaW4KKwkgKiBvcmRlciB0byBnZXQgYSBzYW5lIHJhdGlvIHZhbHVlIChvciBlbHNlIHdlICdsbCBlZy4gZ2V0CisJICogYWx3YXlzIDEgaW5zdGVhZCBvZiAxLjI1LCAxLjc1IGV0YykuIFdlIHNjYWxlIHVwIGJ5IDEwMAorCSAqIHRvIGhhdmUgc29tZSBhY2N1cmFjeSBib3RoIGZvciAwLjUgYW5kIDAuMjUgc3RlcHMuCisJICovCisJcmF0aW8gPSAoKDEwMCAqIHlfcmlnaHQgLSAxMDAgKiB5X2xlZnQpLyh4X3JpZ2h0IC0geF9sZWZ0KSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVI1S19NQVhfUkFURVM7IGkrKykKLQkJcmF0ZXNbaV0gPSB0eHBvd2VyOworCS8qIE5vdyBzY2FsZSBkb3duIHRvIGJlIGluIHJhbmdlICovCisJcmVzdWx0ID0geV9sZWZ0ICsgKHJhdGlvICogKHRhcmdldCAtIHhfbGVmdCkgLyAxMDApOwogCi0JLyogWFhYIHNldHVwIHRhcmdldCBwb3dlcnMgYnkgcmF0ZSAqLwotCi0JYWgtPmFoX3R4cG93ZXIudHhwX21pbiA9IHJhdGVzWzddOwotCWFoLT5haF90eHBvd2VyLnR4cF9tYXggPSByYXRlc1swXTsKLQlhaC0+YWhfdHhwb3dlci50eHBfb2ZkbSA9IHJhdGVzWzBdOwotCi0JLyogQ2FsY3VsYXRlIHRoZSBwb3dlciB0YWJsZSAqLwotCW4gPSBBUlJBWV9TSVpFKGFoLT5haF90eHBvd2VyLnR4cF9wY2RhYyk7Ci0JbWluID0gQVI1S19FRVBST01fUENEQUNfU1RBUlQ7Ci0JbWF4ID0gQVI1S19FRVBST01fUENEQUNfU1RPUDsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSArPSBBUjVLX0VFUFJPTV9QQ0RBQ19TVEVQKQotCQlhaC0+YWhfdHhwb3dlci50eHBfcGNkYWNbaV0gPQotI2lmZGVmIG5vdHlldAotCQltaW4gKyAoKGkgKiAobWF4IC0gbWluKSkgLyBuKTsKLSNlbHNlCi0JCW1pbjsKLSNlbmRpZgorCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qCi0gKiBTZXQgdHJhbnNtaXRpb24gcG93ZXIKKyAqIEZpbmQgdmVydGljYWwgYm91bmRhcnkgKG1pbiBwd3IpIGZvciB0aGUgbGluZWFyIFBDREFDIGN1cnZlLgorICoKKyAqIFNpbmNlIHdlIGhhdmUgdGhlIHRvcCBvZiB0aGUgY3VydmUgYW5kIHdlIGRyYXcgdGhlIGxpbmUgYmVsb3cKKyAqIHVudGlsIHdlIHJlYWNoIDEgKDEgcGNkYWMgc3RlcCkgd2UgbmVlZCB0byBrbm93IHdoaWNoIHBvaW50CisgKiAoeCB2YWx1ZSkgdGhhdCBpcyBzbyB0aGF0IHdlIGRvbid0IGdvIGJlbG93IHkgYXhpcyBhbmQgaGF2ZSBuZWdhdGl2ZQorICogcGNkYWMgdmFsdWVzIHdoZW4gY3JlYXRpbmcgdGhlIGN1cnZlLCBvciBmaWxsIHRoZSB0YWJsZSB3aXRoIHplcm9lcy4KICAqLwotaW50IC8qTy5LLiAtIHR4cG93ZXJfdGFibGUgaXMgdW5pbXBsZW1lbnRlZCBzbyB0aGlzIGRvZXNuJ3Qgd29yayovCi1hdGg1a19od190eHBvd2VyKHN0cnVjdCBhdGg1a19odyAqYWgsIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKLQkJdW5zaWduZWQgaW50IHR4cG93ZXIpCitzdGF0aWMgczE2CithdGg1a19nZXRfbGluZWFyX3BjZGFjX21pbihjb25zdCB1OCAqc3RlcEwsIGNvbnN0IHU4ICpzdGVwUiwKKwkJCQljb25zdCBzMTYgKnB3ckwsIGNvbnN0IHMxNiAqcHdyUikKIHsKLQlib29sIHRwYyA9IGFoLT5haF90eHBvd2VyLnR4cF90cGM7Ci0JdW5zaWduZWQgaW50IGk7CisJczggdG1wOworCXMxNiBtaW5fcHdyTCwgbWluX3B3clI7CisJczE2IHB3cl9pID0gcHdyTFswXTsKIAotCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7Ci0JaWYgKHR4cG93ZXIgPiBBUjVLX1RVTkVfTUFYX1RYUE9XRVIpIHsKLQkJQVRINUtfRVJSKGFoLT5haF9zYywgImludmFsaWQgdHggcG93ZXI6ICV1XG4iLCB0eHBvd2VyKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJZG8geworCQlwd3JfaS0tOworCQl0bXAgPSAoczgpIGF0aDVrX2dldF9pbnRlcnBvbGF0ZWRfdmFsdWUocHdyX2ksCisJCQkJCQlwd3JMWzBdLCBwd3JMWzFdLAorCQkJCQkJc3RlcExbMF0sIHN0ZXBMWzFdKTsKKworCX0gd2hpbGUgKHRtcCA+IDEpOworCisJbWluX3B3ckwgPSBwd3JfaTsKKworCXB3cl9pID0gcHdyUlswXTsKKwlkbyB7CisJCXB3cl9pLS07CisJCXRtcCA9IChzOCkgYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZShwd3JfaSwKKwkJCQkJCXB3clJbMF0sIHB3clJbMV0sCisJCQkJCQlzdGVwUlswXSwgc3RlcFJbMV0pOworCisJfSB3aGlsZSAodG1wID4gMSk7CisKKwltaW5fcHdyUiA9IHB3cl9pOworCisJLyogS2VlcCB0aGUgcmlnaHQgYm91bmRhcnkgc28gdGhhdCBpdCB3b3JrcyBmb3IgYm90aCBjdXJ2ZXMgKi8KKwlyZXR1cm4gbWF4KG1pbl9wd3JMLCBtaW5fcHdyUik7Cit9CisKKy8qCisgKiBJbnRlcnBvbGF0ZSAocHdyLHZwZCkgcG9pbnRzIHRvIGNyZWF0ZSBhIFBvd2VyIHRvIFBEQURDIG9yIGEKKyAqIFBvd2VyIHRvIFBDREFDIGN1cnZlLgorICoKKyAqIEVhY2ggY3VydmUgaGFzIHBvd2VyIG9uIHggYXhpcyAoaW4gMC41ZEIgdW5pdHMpIGFuZCBQQ0RBQy9QREFEQworICogc3RlcHMgKG9mZnNldHMpIG9uIHkgYXhpcy4gUG93ZXIgY2FuIGdvIHVwIHRvIDMxLjVkQiBhbmQgbWF4CisgKiBQQ0RBQy9QREFEQyBzdGVwIGZvciBlYWNoIGN1cnZlIGlzIDY0IGJ1dCB3ZSBjYW4gd3JpdGUgbW9yZSB0aGFuCisgKiBvbmUgY3VydmVzIG9uIGh3IHNvIHdlIGNhbiBnbyB1cCB0byAxMjggKHdoaWNoIGlzIHRoZSBtYXggc3RlcCB3ZQorICogY2FuIHdyaXRlIG9uIHRoZSBmaW5hbCB0YWJsZSkuCisgKgorICogV2Ugd3JpdGUgeSB2YWx1ZXMgKFBDREFDL1BEQURDIHN0ZXBzKSBvbiBody4KKyAqLworc3RhdGljIHZvaWQKK2F0aDVrX2NyZWF0ZV9wb3dlcl9jdXJ2ZShzMTYgcG1pbiwgczE2IHBtYXgsCisJCQljb25zdCBzMTYgKnB3ciwgY29uc3QgdTggKnZwZCwKKwkJCXU4IG51bV9wb2ludHMsCisJCQl1OCAqdnBkX3RhYmxlLCB1OCB0eXBlKQoreworCXU4IGlkeFsyXSA9IHsgMCwgMSB9OworCXMxNiBwd3JfaSA9IDIqcG1pbjsKKwlpbnQgaTsKKworCWlmIChudW1fcG9pbnRzIDwgMikKKwkJcmV0dXJuOworCisJLyogV2Ugd2FudCB0aGUgd2hvbGUgbGluZSwgc28gYWRqdXN0IGJvdW5kYXJpZXMKKwkgKiB0byBjb3ZlciB0aGUgZW50aXJlIHBvd2VyIHJhbmdlLiBOb3RlIHRoYXQKKwkgKiBwb3dlciB2YWx1ZXMgYXJlIGFscmVhZHkgMC4yNWRCIHNvIG5vIG5lZWQKKwkgKiB0byBtdWx0aXBseSBwd3JfaSBieSAyICovCisJaWYgKHR5cGUgPT0gQVI1S19QV1JUQUJMRV9MSU5FQVJfUENEQUMpIHsKKwkJcHdyX2kgPSBwbWluOworCQlwbWluID0gMDsKKwkJcG1heCA9IDYzOwogCX0KIAotCS8qCi0JICogUkYyNDEzIGZvciBzb21lIHJlYXNvbiBjYW4ndAotCSAqIHRyYW5zbWl0IGFueXRoaW5nIGlmIHdlIGNhbGwKLQkgKiB0aGlzIGZ1bnRpb24sIHNvIHdlIHNraXAgaXQKLQkgKiB1bnRpbCB3ZSBmaXggdHhwb3dlci4KKwkvKiBGaW5kIHN1cnJvdW5kaW5nIHR1cm5pbmcgcG9pbnRzIChUUHMpCisJICogYW5kIGludGVycG9sYXRlIGJldHdlZW4gdGhlbSAqLworCWZvciAoaSA9IDA7IChpIDw9ICh1MTYpIChwbWF4IC0gcG1pbikpICYmCisJKGkgPCBBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFKTsgaSsrKSB7CisKKwkJLyogV2UgcGFzc2VkIHRoZSByaWdodCBUUCwgbW92ZSB0byB0aGUgbmV4dCBzZXQgb2YgVFBzCisJCSAqIGlmIHdlIHBhc3MgdGhlIGxhc3QgVFAsIGV4dHJhcG9sYXRlIGFib3ZlIHVzaW5nIHRoZSBsYXN0CisJCSAqIHR3byBUUHMgZm9yIHJhdGlvICovCisJCWlmICgocHdyX2kgPiBwd3JbaWR4WzFdXSkgJiYgKGlkeFsxXSA8IG51bV9wb2ludHMgLSAxKSkgeworCQkJaWR4WzBdKys7CisJCQlpZHhbMV0rKzsKKwkJfQorCisJCXZwZF90YWJsZVtpXSA9ICh1OCkgYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZShwd3JfaSwKKwkJCQkJCXB3cltpZHhbMF1dLCBwd3JbaWR4WzFdXSwKKwkJCQkJCXZwZFtpZHhbMF1dLCB2cGRbaWR4WzFdXSk7CisKKwkJLyogSW5jcmVhc2UgYnkgMC41ZEIKKwkJICogKDAuMjUgZEIgdW5pdHMpICovCisJCXB3cl9pICs9IDI7CisJfQorfQorCisvKgorICogR2V0IHRoZSBzdXJyb3VuZGluZyBwZXItY2hhbm5lbCBwb3dlciBjYWxpYnJhdGlvbiBwaWVycworICogZm9yIGEgZ2l2ZW4gZnJlcXVlbmN5IHNvIHRoYXQgd2UgY2FuIGludGVycG9sYXRlIGJldHdlZW4KKyAqIHRoZW0gYW5kIGNvbWUgdXAgd2l0aCBhbiBhcHJvcHJpYXRlIGRhdGFzZXQgZm9yIG91ciBjdXJyZW50CisgKiBjaGFubmVsLgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfZ2V0X2NoYW5fcGNhbF9zdXJyb3VuZGluZ19waWVycyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJc3RydWN0IGF0aDVrX2NoYW5fcGNhbF9pbmZvICoqcGNpbmZvX2wsCisJCQlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKipwY2luZm9fcikKK3sKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjaW5mbzsKKwl1OCBpZHhfbCwgaWR4X3I7CisJdTggbW9kZSwgbWF4LCBpOworCXUzMiB0YXJnZXQgPSBjaGFubmVsLT5jZW50ZXJfZnJlcTsKKworCWlkeF9sID0gMDsKKwlpZHhfciA9IDA7CisKKwlpZiAoIShjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkpIHsKKwkJcGNpbmZvID0gZWUtPmVlX3B3cl9jYWxfYjsKKwkJbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFCOworCX0gZWxzZSBpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzJHSFopIHsKKwkJcGNpbmZvID0gZWUtPmVlX3B3cl9jYWxfZzsKKwkJbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOworCX0gZWxzZSB7CisJCXBjaW5mbyA9IGVlLT5lZV9wd3JfY2FsX2E7CisJCW1vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQTsKKwl9CisJbWF4ID0gZWUtPmVlX25fcGllcnNbbW9kZV0gLSAxOworCisJLyogRnJlcXVlbmN5IGlzIGJlbG93IG91ciBjYWxpYnJhdGVkCisJICogcmFuZ2UuIFVzZSB0aGUgbG93ZXN0IHBvd2VyIGN1cnZlCisJICogd2UgaGF2ZSAqLworCWlmICh0YXJnZXQgPCBwY2luZm9bMF0uZnJlcSkgeworCQlpZHhfbCA9IGlkeF9yID0gMDsKKwkJZ290byBkb25lOworCX0KKworCS8qIEZyZXF1ZW5jeSBpcyBhYm92ZSBvdXIgY2FsaWJyYXRlZAorCSAqIHJhbmdlLiBVc2UgdGhlIGhpZ2hlc3QgcG93ZXIgY3VydmUKKwkgKiB3ZSBoYXZlICovCisJaWYgKHRhcmdldCA+IHBjaW5mb1ttYXhdLmZyZXEpIHsKKwkJaWR4X2wgPSBpZHhfciA9IG1heDsKKwkJZ290byBkb25lOworCX0KKworCS8qIEZyZXF1ZW5jeSBpcyBpbnNpZGUgb3VyIGNhbGlicmF0ZWQKKwkgKiBjaGFubmVsIHJhbmdlLiBQaWNrIHRoZSBzdXJyb3VuZGluZworCSAqIGNhbGlicmF0aW9uIHBpZXJzIHNvIHRoYXQgd2UgY2FuCisJICogaW50ZXJwb2xhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IG1heDsgaSsrKSB7CisKKwkJLyogRnJlcXVlbmN5IG1hdGNoZXMgb25lIG9mIG91ciBjYWxpYnJhdGlvbgorCQkgKiBwaWVycywgbm8gbmVlZCB0byBpbnRlcnBvbGF0ZSwganVzdCB1c2UKKwkJICogdGhhdCBjYWxpYnJhdGlvbiBwaWVyICovCisJCWlmIChwY2luZm9baV0uZnJlcSA9PSB0YXJnZXQpIHsKKwkJCWlkeF9sID0gaWR4X3IgPSBpOworCQkJZ290byBkb25lOworCQl9CisKKwkJLyogV2UgZm91bmQgYSBjYWxpYnJhdGlvbiBwaWVyIHRoYXQncyBhYm92ZQorCQkgKiBmcmVxdWVuY3ksIHVzZSB0aGlzIHBpZXIgYW5kIHRoZSBwcmV2aW91cworCQkgKiBvbmUgdG8gaW50ZXJwb2xhdGUgKi8KKwkJaWYgKHRhcmdldCA8IHBjaW5mb1tpXS5mcmVxKSB7CisJCQlpZHhfciA9IGk7CisJCQlpZHhfbCA9IGlkeF9yIC0gMTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworZG9uZToKKwkqcGNpbmZvX2wgPSAmcGNpbmZvW2lkeF9sXTsKKwkqcGNpbmZvX3IgPSAmcGNpbmZvW2lkeF9yXTsKKworCXJldHVybjsKK30KKworLyoKKyAqIEdldCB0aGUgc3Vycm91bmRpbmcgcGVyLXJhdGUgcG93ZXIgY2FsaWJyYXRpb24gZGF0YQorICogZm9yIGEgZ2l2ZW4gZnJlcXVlbmN5IGFuZCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIHBvd2VyCisgKiB2YWx1ZXMgdG8gc2V0IG1heCB0YXJnZXQgcG93ZXIgc3VwcG9ydGVkIGJ5IGh3IGZvcgorICogZWFjaCByYXRlLgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfZ2V0X3JhdGVfcGNhbF9kYXRhKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQlzdHJ1Y3QgYXRoNWtfcmF0ZV9wY2FsX2luZm8gKnJhdGVzKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbyAqcnBpbmZvOworCXU4IGlkeF9sLCBpZHhfcjsKKwl1OCBtb2RlLCBtYXgsIGk7CisJdTMyIHRhcmdldCA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOworCisJaWR4X2wgPSAwOworCWlkeF9yID0gMDsKKworCWlmICghKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9PRkRNKSkgeworCQlycGluZm8gPSBlZS0+ZWVfcmF0ZV90cHdyX2I7CisJCW1vZGUgPSBBUjVLX0VFUFJPTV9NT0RFXzExQjsKKwl9IGVsc2UgaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF8yR0haKSB7CisJCXJwaW5mbyA9IGVlLT5lZV9yYXRlX3Rwd3JfZzsKKwkJbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFHOworCX0gZWxzZSB7CisJCXJwaW5mbyA9IGVlLT5lZV9yYXRlX3Rwd3JfYTsKKwkJbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOworCX0KKwltYXggPSBlZS0+ZWVfcmF0ZV90YXJnZXRfcHdyX251bVttb2RlXSAtIDE7CisKKwkvKiBHZXQgdGhlIHN1cnJvdW5kaW5nIGNhbGlicmF0aW9uCisJICogcGllcnMgLSBzYW1lIGFzIGFib3ZlICovCisJaWYgKHRhcmdldCA8IHJwaW5mb1swXS5mcmVxKSB7CisJCWlkeF9sID0gaWR4X3IgPSAwOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHRhcmdldCA+IHJwaW5mb1ttYXhdLmZyZXEpIHsKKwkJaWR4X2wgPSBpZHhfciA9IG1heDsKKwkJZ290byBkb25lOworCX0KKworCWZvciAoaSA9IDA7IGkgPD0gbWF4OyBpKyspIHsKKworCQlpZiAocnBpbmZvW2ldLmZyZXEgPT0gdGFyZ2V0KSB7CisJCQlpZHhfbCA9IGlkeF9yID0gaTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWlmICh0YXJnZXQgPCBycGluZm9baV0uZnJlcSkgeworCQkJaWR4X3IgPSBpOworCQkJaWR4X2wgPSBpZHhfciAtIDE7CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisKK2RvbmU6CisJLyogTm93IGludGVycG9sYXRlIHBvd2VyIHZhbHVlLCBiYXNlZCBvbiB0aGUgZnJlcXVlbmN5ICovCisJcmF0ZXMtPmZyZXEgPSB0YXJnZXQ7CisKKwlyYXRlcy0+dGFyZ2V0X3Bvd2VyXzZ0bzI0ID0KKwkJYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZSh0YXJnZXQsIHJwaW5mb1tpZHhfbF0uZnJlcSwKKwkJCQkJcnBpbmZvW2lkeF9yXS5mcmVxLAorCQkJCQlycGluZm9baWR4X2xdLnRhcmdldF9wb3dlcl82dG8yNCwKKwkJCQkJcnBpbmZvW2lkeF9yXS50YXJnZXRfcG93ZXJfNnRvMjQpOworCisJcmF0ZXMtPnRhcmdldF9wb3dlcl8zNiA9CisJCWF0aDVrX2dldF9pbnRlcnBvbGF0ZWRfdmFsdWUodGFyZ2V0LCBycGluZm9baWR4X2xdLmZyZXEsCisJCQkJCXJwaW5mb1tpZHhfcl0uZnJlcSwKKwkJCQkJcnBpbmZvW2lkeF9sXS50YXJnZXRfcG93ZXJfMzYsCisJCQkJCXJwaW5mb1tpZHhfcl0udGFyZ2V0X3Bvd2VyXzM2KTsKKworCXJhdGVzLT50YXJnZXRfcG93ZXJfNDggPQorCQlhdGg1a19nZXRfaW50ZXJwb2xhdGVkX3ZhbHVlKHRhcmdldCwgcnBpbmZvW2lkeF9sXS5mcmVxLAorCQkJCQlycGluZm9baWR4X3JdLmZyZXEsCisJCQkJCXJwaW5mb1tpZHhfbF0udGFyZ2V0X3Bvd2VyXzQ4LAorCQkJCQlycGluZm9baWR4X3JdLnRhcmdldF9wb3dlcl80OCk7CisKKwlyYXRlcy0+dGFyZ2V0X3Bvd2VyXzU0ID0KKwkJYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZSh0YXJnZXQsIHJwaW5mb1tpZHhfbF0uZnJlcSwKKwkJCQkJcnBpbmZvW2lkeF9yXS5mcmVxLAorCQkJCQlycGluZm9baWR4X2xdLnRhcmdldF9wb3dlcl81NCwKKwkJCQkJcnBpbmZvW2lkeF9yXS50YXJnZXRfcG93ZXJfNTQpOworfQorCisvKgorICogR2V0IHRoZSBtYXggZWRnZSBwb3dlciBmb3IgdGhpcyBjaGFubmVsIGlmCisgKiB3ZSBoYXZlIHN1Y2ggZGF0YSBmcm9tIEVFUFJPTSdzIENvbmZvcm1hbmNlIFRlc3QKKyAqIExpbWl0cyAoQ1RMKSwgYW5kIGxpbWl0IG1heCBwb3dlciBpZiBuZWVkZWQuCisgKgorICogRklYTUU6IE9ubHkgd29ya3MgZm9yIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucworICovCitzdGF0aWMgdm9pZAorYXRoNWtfZ2V0X21heF9jdGxfcG93ZXIoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgYXRoNWtfZWVwcm9tX2luZm8gKmVlID0gJmFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX2VlcHJvbTsKKwlzdHJ1Y3QgYXRoNWtfZWRnZV9wb3dlciAqcmVwID0gZWUtPmVlX2N0bF9wd3I7CisJdTggKmN0bF92YWwgPSBlZS0+ZWVfY3RsOworCXMxNiBtYXhfY2hhbl9wd3IgPSBhaC0+YWhfdHhwb3dlci50eHBfbWF4X3B3ciAvIDQ7CisJczE2IGVkZ2VfcHdyID0gMDsKKwl1OCByZXBfaWR4OworCXU4IGksIGN0bF9tb2RlOworCXU4IGN0bF9pZHggPSAweEZGOworCXUzMiB0YXJnZXQgPSBjaGFubmVsLT5jZW50ZXJfZnJlcTsKKworCS8qIEZpbmQgb3V0IGEgQ1RMIGZvciBvdXIgbW9kZSB0aGF0J3Mgbm90IG1hcHBlZAorCSAqIG9uIGEgc3BlY2lmaWMgcmVnIGRvbWFpbi4KIAkgKgotCSAqIFhYWDogQXNzdW1lIHNhbWUgZm9yIFJGMjQyNQotCSAqIHRvIGJlIHNhZmUuCi0JICovCi0JaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjI0MTMpIHx8IChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjI0MjUpKQotCQlyZXR1cm4gMDsKKwkgKiBUT0RPOiBNYXAgb3VyIGN1cnJlbnQgcmVnIGRvbWFpbiB0byBvbmUgb2YgdGhlIDMgYXZhaWxhYmxlCisJICogcmVnIGRvbWFpbiBpZHMgc28gdGhhdCB3ZSBjYW4gc3VwcG9ydCBtb3JlIENUTHMuICovCisJc3dpdGNoIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfTU9ERVMpIHsKKwljYXNlIENIQU5ORUxfQToKKwkJY3RsX21vZGUgPSBBUjVLX0NUTF8xMUEgfCBBUjVLX0NUTF9OT19SRUdET01BSU47CisJCWJyZWFrOworCWNhc2UgQ0hBTk5FTF9HOgorCQljdGxfbW9kZSA9IEFSNUtfQ1RMXzExRyB8IEFSNUtfQ1RMX05PX1JFR0RPTUFJTjsKKwkJYnJlYWs7CisJY2FzZSBDSEFOTkVMX0I6CisJCWN0bF9tb2RlID0gQVI1S19DVExfMTFCIHwgQVI1S19DVExfTk9fUkVHRE9NQUlOOworCQlicmVhazsKKwljYXNlIENIQU5ORUxfVDoKKwkJY3RsX21vZGUgPSBBUjVLX0NUTF9UVVJCTyB8IEFSNUtfQ1RMX05PX1JFR0RPTUFJTjsKKwkJYnJlYWs7CisJY2FzZSBDSEFOTkVMX1RHOgorCQljdGxfbW9kZSA9IEFSNUtfQ1RMX1RVUkJPRyB8IEFSNUtfQ1RMX05PX1JFR0RPTUFJTjsKKwkJYnJlYWs7CisJY2FzZSBDSEFOTkVMX1hSOgorCQkvKiBGYWxsIHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQogCi0JLyogUmVzZXQgVFggcG93ZXIgdmFsdWVzICovCi0JbWVtc2V0KCZhaC0+YWhfdHhwb3dlciwgMCwgc2l6ZW9mKGFoLT5haF90eHBvd2VyKSk7Ci0JYWgtPmFoX3R4cG93ZXIudHhwX3RwYyA9IHRwYzsKKwlmb3IgKGkgPSAwOyBpIDwgZWUtPmVlX2N0bHM7IGkrKykgeworCQlpZiAoY3RsX3ZhbFtpXSA9PSBjdGxfbW9kZSkgeworCQkJY3RsX2lkeCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KIAotCS8qIEluaXRpYWxpemUgVFggcG93ZXIgdGFibGUgKi8KLQlhdGg1a190eHBvd2VyX3RhYmxlKGFoLCBjaGFubmVsLCB0eHBvd2VyKTsKKwkvKiBJZiB3ZSBoYXZlIGEgQ1RMIGRhdGFzZXQgYXZhaWxhYmxlIGdyYWIgaXQgYW5kIGZpbmQgdGhlCisJICogZWRnZSBwb3dlciBmb3Igb3VyIGZyZXF1ZW5jeSAqLworCWlmIChjdGxfaWR4ID09IDB4RkYpCisJCXJldHVybjsKKworCS8qIEVkZ2UgcG93ZXJzIGFyZSBzb3J0ZWQgYnkgZnJlcXVlbmN5IGZyb20gbG93ZXIKKwkgKiB0byBoaWdoZXIuIEVhY2ggQ1RMIGNvcnJlc3BvbmRzIHRvIDggZWRnZSBwb3dlcgorCSAqIG1lYXN1cmVtZW50cy4gKi8KKwlyZXBfaWR4ID0gY3RsX2lkeCAqIEFSNUtfRUVQUk9NX05fRURHRVM7CisKKwkvKiBEb24ndCBkbyBib3VuZGFyaWVzIGNoZWNrIGJlY2F1c2Ugd2UKKwkgKiBtaWdodCBoYXZlIG1vcmUgdGhhdCBvbmUgYmFuZHMgZGVmaW5lZAorCSAqIGZvciB0aGlzIG1vZGUgKi8KKworCS8qIEdldCB0aGUgZWRnZSBwb3dlciB0aGF0J3MgY2xvc2VyIHRvIG91cgorCSAqIGZyZXF1ZW5jeSAqLworCWZvciAoaSA9IDA7IGkgPCBBUjVLX0VFUFJPTV9OX0VER0VTOyBpKyspIHsKKwkJcmVwX2lkeCArPSBpOworCQlpZiAodGFyZ2V0IDw9IHJlcFtyZXBfaWR4XS5mcmVxKQorCQkJZWRnZV9wd3IgPSAoczE2KSByZXBbcmVwX2lkeF0uZWRnZTsKKwl9CisKKwlpZiAoZWRnZV9wd3IpCisJCWFoLT5haF90eHBvd2VyLnR4cF9tYXhfcHdyID0gNCptaW4oZWRnZV9wd3IsIG1heF9jaGFuX3B3cik7Cit9CisKKworLyoKKyAqIFBvd2VyIHRvIFBDREFDIHRhYmxlIGZ1bmN0aW9ucworICovCisKKy8qCisgKiBGaWxsIFBvd2VyIHRvIFBDREFDIHRhYmxlIG9uIFJGNTExMQorICoKKyAqIE5vIGZ1cnRoZXIgcHJvY2Vzc2luZyBpcyBuZWVkZWQgZm9yIFJGNTExMSwgdGhlIG9ubHkgdGhpbmcgd2UgaGF2ZSB0bworICogZG8gaXMgZmlsbCB0aGUgdmFsdWVzIGJlbG93IGFuZCBhYm92ZSBjYWxpYnJhdGlvbiByYW5nZSBzaW5jZSBlZXByb20gZGF0YQorICogbWF5IG5vdCBjb3ZlciB0aGUgZW50aXJlIFBDREFDIHRhYmxlLgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfZmlsbF9wd3JfdG9fcGNkYWNfdGFibGUoc3RydWN0IGF0aDVrX2h3ICphaCwgczE2KiB0YWJsZV9taW4sCisJCQkJCQkJczE2ICp0YWJsZV9tYXgpCit7CisJdTggCSpwY2RhY19vdXQgPSBhaC0+YWhfdHhwb3dlci50eHBfcGRfdGFibGU7CisJdTgJKnBjZGFjX3RtcCA9IGFoLT5haF90eHBvd2VyLnRtcExbMF07CisJdTgJcGNkYWNfMCwgcGNkYWNfbiwgcGNkYWNfaSwgcHdyX2lkeCwgaTsKKwlzMTYJbWluX3B3ciwgbWF4X3B3cjsKKworCS8qIEdldCB0YWJsZSBib3VuZGFyaWVzICovCisJbWluX3B3ciA9IHRhYmxlX21pblswXTsKKwlwY2RhY18wID0gcGNkYWNfdG1wWzBdOworCisJbWF4X3B3ciA9IHRhYmxlX21heFswXTsKKwlwY2RhY19uID0gcGNkYWNfdG1wW3RhYmxlX21heFswXSAtIHRhYmxlX21pblswXV07CisKKwkvKiBFeHRyYXBvbGF0ZSBiZWxvdyBtaW5pbXVtIHVzaW5nIHBjZGFjXzAgKi8KKwlwY2RhY19pID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbWluX3B3cjsgaSsrKQorCQlwY2RhY19vdXRbcGNkYWNfaSsrXSA9IHBjZGFjXzA7CisKKwkvKiBDb3B5IHZhbHVlcyBmcm9tIHBjZGFjX3RtcCAqLworCXB3cl9pZHggPSBtaW5fcHdyOworCWZvciAoaSA9IDAgOyBwd3JfaWR4IDw9IG1heF9wd3IgJiYKKwlwY2RhY19pIDwgQVI1S19FRVBST01fUE9XRVJfVEFCTEVfU0laRTsgaSsrKSB7CisJCXBjZGFjX291dFtwY2RhY19pKytdID0gcGNkYWNfdG1wW2ldOworCQlwd3JfaWR4Kys7CisJfQorCisJLyogRXh0cmFwb2xhdGUgYWJvdmUgbWF4aW11bSAqLworCXdoaWxlIChwY2RhY19pIDwgQVI1S19FRVBST01fUE9XRVJfVEFCTEVfU0laRSkKKwkJcGNkYWNfb3V0W3BjZGFjX2krK10gPSBwY2RhY19uOworCit9CisKKy8qCisgKiBDb21iaW5lIGF2YWlsYWJsZSBYUEQgQ3VydmVzIGFuZCBmaWxsIExpbmVhciBQb3dlciB0byBQQ0RBQyB0YWJsZQorICogb24gUkY1MTEyCisgKgorICogUkZYMTEyIGNhbiBoYXZlIHVwIHRvIDIgY3VydmVzIChvbmUgZm9yIGxvdyB0eHBvd2VyIHJhbmdlIGFuZCBvbmUgZm9yCisgKiBoaWdoZXIgdHhwb3dlciByYW5nZSkuIFdlIG5lZWQgdG8gcHV0IHRoZW0gYm90aCBvbiBwY2RhY19vdXQgYW5kIHBsYWNlCisgKiB0aGVtIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLiBJbiBjYXNlIHdlIG9ubHkgaGF2ZSBvbmUgY3VydmUgYXZhaWxhYmxlCisgKiBqdXN0IGZpdCBpdCBvbiBwY2RhY19vdXQgKGl0J3Mgc3VwcG9zZWQgdG8gY292ZXIgdGhlIGVudGlyZSByYW5nZSBvZgorICogYXZhaWxhYmxlIHB3ciBsZXZlbHMgc2luY2UgaXQncyBhbHdheXMgdGhlIGhpZ2hlciBwb3dlciBjdXJ2ZSkuIEV4dHJhcG9sYXRlCisgKiBiZWxvdyBhbmQgYWJvdmUgZmluYWwgdGFibGUgaWYgbmVlZGVkLgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfY29tYmluZV9saW5lYXJfcGNkYWNfY3VydmVzKHN0cnVjdCBhdGg1a19odyAqYWgsIHMxNiogdGFibGVfbWluLAorCQkJCQkJczE2ICp0YWJsZV9tYXgsIHU4IHBkY3VydmVzKQoreworCXU4IAkqcGNkYWNfb3V0ID0gYWgtPmFoX3R4cG93ZXIudHhwX3BkX3RhYmxlOworCXU4CSpwY2RhY19sb3dfcHdyOworCXU4CSpwY2RhY19oaWdoX3B3cjsKKwl1OAkqcGNkYWNfdG1wOworCXU4CXB3cjsKKwlzMTYJbWF4X3B3cl9pZHg7CisJczE2CW1pbl9wd3JfaWR4OworCXMxNgltaWRfcHdyX2lkeCA9IDA7CisJLyogRWRnZSBmbGFnIHR1cnMgb24gdGhlIDdudGggYml0IG9uIHRoZSBQQ0RBQworCSAqIHRvIGRlbGNhcmUgdGhlIGhpZ2hlciBwb3dlciBjdXJ2ZSAoZm9yY2UgdmFsdWVzCisJICogdG8gYmUgZ3JlYXRlciB0aGFuIDY0KS4gSWYgd2Ugb25seSBoYXZlIG9uZSBjdXJ2ZQorCSAqIHdlIGRvbid0IG5lZWQgdG8gc2V0IHRoaXMsIGlmIHdlIGhhdmUgMiBjdXJ2ZXMgYW5kCisJICogZmlsbCB0aGUgdGFibGUgYmFja3dhcmRzIHRoaXMgY2FuIGFsc28gYmUgdXNlZCB0bworCSAqIHN3aXRjaCBmcm9tIGhpZ2hlciBwb3dlciBjdXJ2ZSB0byBsb3dlciBwb3dlciBjdXJ2ZSAqLworCXU4CWVkZ2VfZmxhZzsKKwlpbnQJaTsKKworCS8qIFdoZW4gd2UgaGF2ZSBvbmx5IG9uZSBjdXJ2ZSBhdmFpbGFibGUKKwkgKiB0aGF0J3MgdGhlIGhpZ2hlciBwb3dlciBjdXJ2ZS4gSWYgd2UgaGF2ZQorCSAqIHR3byBjdXJ2ZXMgdGhlIGZpcnN0IGlzIHRoZSBoaWdoIHBvd2VyIGN1cnZlCisJICogYW5kIHRoZSBuZXh0IGlzIHRoZSBsb3cgcG93ZXIgY3VydmUuICovCisJaWYgKHBkY3VydmVzID4gMSkgeworCQlwY2RhY19sb3dfcHdyID0gYWgtPmFoX3R4cG93ZXIudG1wTFsxXTsKKwkJcGNkYWNfaGlnaF9wd3IgPSBhaC0+YWhfdHhwb3dlci50bXBMWzBdOworCQltaWRfcHdyX2lkeCA9IHRhYmxlX21heFsxXSAtIHRhYmxlX21pblsxXSAtIDE7CisJCW1heF9wd3JfaWR4ID0gKHRhYmxlX21heFswXSAtIHRhYmxlX21pblswXSkgLyAyOworCisJCS8qIElmIHRhYmxlIHNpemUgZ29lcyBiZXlvbmQgMzEuNWRCLCBrZWVwIHRoZQorCQkgKiB1cHBlciAzMS41ZEIgcmFuZ2Ugd2hlbiBzZXR0aW5nIHR4IHBvd2VyLgorCQkgKiBOb3RlOiAxMjYgPSAzMS41IGRCIGluIHF1YXJ0ZXIgZEIgc3RlcHMgKi8KKwkJaWYgKHRhYmxlX21heFswXSAtIHRhYmxlX21pblsxXSA+IDEyNikKKwkJCW1pbl9wd3JfaWR4ID0gdGFibGVfbWF4WzBdIC0gMTI2OworCQllbHNlCisJCQltaW5fcHdyX2lkeCA9IHRhYmxlX21pblsxXTsKKworCQkvKiBTaW5jZSB3ZSBmaWxsIHRhYmxlIGJhY2t3YXJkcworCQkgKiBzdGFydCBmcm9tIGhpZ2ggcG93ZXIgY3VydmUgKi8KKwkJcGNkYWNfdG1wID0gcGNkYWNfaGlnaF9wd3I7CisKKwkJZWRnZV9mbGFnID0gMHg0MDsKKyNpZiAwCisJCS8qIElmIGJvdGggbWluIGFuZCBtYXggcG93ZXIgbGltaXRzIGFyZSBpbiBsb3dlcgorCQkgKiBwb3dlciBjdXJ2ZSdzIHJhbmdlLCBvbmx5IHVzZSB0aGUgbG93IHBvd2VyIGN1cnZlLgorCQkgKiBUT0RPOiBtaW4vbWF4IGxldmVscyBhcmUgcmVsYXRlZCB0byB0YXJnZXQKKwkJICogcG93ZXIgdmFsdWVzIHJlcXVlc3RlZCBmcm9tIGRyaXZlci91c2VyCisJCSAqIFhYWDogSXMgdGhpcyByZWFsbHkgbmVlZGVkID8gKi8KKwkJaWYgKG1pbl9wd3IgPCB0YWJsZV9tYXhbMV0gJiYKKwkJbWF4X3B3ciA8IHRhYmxlX21heFsxXSkgeworCQkJZWRnZV9mbGFnID0gMDsKKwkJCXBjZGFjX3RtcCA9IHBjZGFjX2xvd19wd3I7CisJCQltYXhfcHdyX2lkeCA9ICh0YWJsZV9tYXhbMV0gLSB0YWJsZV9taW5bMV0pLzI7CisJCX0KKyNlbmRpZgorCX0gZWxzZSB7CisJCXBjZGFjX2xvd19wd3IgPSBhaC0+YWhfdHhwb3dlci50bXBMWzFdOyAvKiBaZXJvZWQgKi8KKwkJcGNkYWNfaGlnaF9wd3IgPSBhaC0+YWhfdHhwb3dlci50bXBMWzBdOworCQltaW5fcHdyX2lkeCA9IHRhYmxlX21pblswXTsKKwkJbWF4X3B3cl9pZHggPSAodGFibGVfbWF4WzBdIC0gdGFibGVfbWluWzBdKSAvIDI7CisJCXBjZGFjX3RtcCA9IHBjZGFjX2hpZ2hfcHdyOworCQllZGdlX2ZsYWcgPSAwOworCX0KKworCS8qIFRoaXMgaXMgdXNlZCB3aGVuIHNldHRpbmcgdHggcG93ZXIqLworCWFoLT5haF90eHBvd2VyLnR4cF9taW5faWR4ID0gbWluX3B3cl9pZHgvMjsKKworCS8qIEZpbGwgUG93ZXIgdG8gUENEQUMgdGFibGUgYmFja3dhcmRzICovCisJcHdyID0gbWF4X3B3cl9pZHg7CisJZm9yIChpID0gNjM7IGkgPj0gMDsgaS0tKSB7CisJCS8qIEVudGVyaW5nIGxvd2VyIHBvd2VyIHJhbmdlLCByZXNldAorCQkgKiBlZGdlIGZsYWcgYW5kIHNldCBwY2RhY190bXAgdG8gbG93ZXIKKwkJICogcG93ZXIgY3VydmUuKi8KKwkJaWYgKGVkZ2VfZmxhZyA9PSAweDQwICYmCisJCSgyKnB3ciA8PSAodGFibGVfbWF4WzFdIC0gdGFibGVfbWluWzBdKSB8fCBwd3IgPT0gMCkpIHsKKwkJCWVkZ2VfZmxhZyA9IDB4MDA7CisJCQlwY2RhY190bXAgPSBwY2RhY19sb3dfcHdyOworCQkJcHdyID0gbWlkX3B3cl9pZHgvMjsKKwkJfQorCisJCS8qIERvbid0IGdvIGJlbG93IDEsIGV4dHJhcG9sYXRlIGJlbG93IGlmIHdlIGhhdmUKKwkJICogYWxyZWFkeSBzd2l0aGNlZCB0byB0aGUgbG93ZXIgcG93ZXIgY3VydmUgLW9yCisJCSAqIHdlIG9ubHkgaGF2ZSBvbmUgY3VydmUgYW5kIGVkZ2VfZmxhZyBpcyB6ZXJvCisJCSAqIGFueXdheSAqLworCQlpZiAocGNkYWNfdG1wW3B3cl0gPCAxICYmIChlZGdlX2ZsYWcgPT0gMHgwMCkpIHsKKwkJCXdoaWxlIChpID49IDApIHsKKwkJCQlwY2RhY19vdXRbaV0gPSBwY2RhY19vdXRbaSArIDFdOworCQkJCWktLTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisKKwkJcGNkYWNfb3V0W2ldID0gcGNkYWNfdG1wW3B3cl0gfCBlZGdlX2ZsYWc7CisKKwkJLyogRXh0cmFwb2xhdGUgYWJvdmUgaWYgcGNkYWMgaXMgZ3JlYXRlciB0aGFuCisJCSAqIDEyNiAtdGhpcyBjYW4gaGFwcGVuIGJlY2F1c2Ugd2UgT1IgcGNkYWNfb3V0CisJCSAqIHZhbHVlIHdpdGggZWRnZV9mbGFnIG9uIGhpZ2ggcG93ZXIgY3VydmUgKi8KKwkJaWYgKHBjZGFjX291dFtpXSA+IDEyNikKKwkJCXBjZGFjX291dFtpXSA9IDEyNjsKKworCQkvKiBEZWNyZWFzZSBieSBhIDAuNWRCIHN0ZXAgKi8KKwkJcHdyLS07CisJfQorfQorCisvKiBXcml0ZSBQQ0RBQyB2YWx1ZXMgb24gaHcgKi8KK3N0YXRpYyB2b2lkCithdGg1a19zZXR1cF9wY2RhY190YWJsZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCXU4IAkqcGNkYWNfb3V0ID0gYWgtPmFoX3R4cG93ZXIudHhwX3BkX3RhYmxlOworCWludAlpOwogCiAJLyoKIAkgKiBXcml0ZSBUWCBwb3dlciB2YWx1ZXMKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgKEFSNUtfRUVQUk9NX1BPV0VSX1RBQkxFX1NJWkUgLyAyKTsgaSsrKSB7CiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKLQkJCSgoKChhaC0+YWhfdHhwb3dlci50eHBfcGNkYWNbKGkgPDwgMSkgKyAxXSA8PCA4KSB8IDB4ZmYpICYgMHhmZmZmKSA8PCAxNikgfAotCQkJKCgoYWgtPmFoX3R4cG93ZXIudHhwX3BjZGFjWyhpIDw8IDEpICAgIF0gPDwgOCkgfCAweGZmKSAmIDB4ZmZmZiksCisJCQkoKChwY2RhY19vdXRbMippICsgMF0gPDwgOCB8IDB4ZmYpICYgMHhmZmZmKSA8PCAwKSB8CisJCQkoKChwY2RhY19vdXRbMippICsgMV0gPDwgOCB8IDB4ZmYpICYgMHhmZmZmKSA8PCAxNiksCiAJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKGkpKTsKIAl9Cit9CiAKKworLyoKKyAqIFBvd2VyIHRvIFBEQURDIHRhYmxlIGZ1bmN0aW9ucworICovCisKKy8qCisgKiBTZXQgdGhlIGdhaW4gYm91bmRhcmllcyBhbmQgY3JlYXRlIGZpbmFsIFBvd2VyIHRvIFBEQURDIHRhYmxlCisgKgorICogV2UgY2FuIGhhdmUgdXAgdG8gNCBwZCBjdXJ2ZXMsIHdlIG5lZWQgdG8gZG8gYSBzaW1taWxhciBwcm9jZXNzCisgKiBhcyB3ZSBkbyBmb3IgUkY1MTEyLiBUaGlzIHRpbWUgd2UgZG9uJ3QgaGF2ZSBhbiBlZGdlX2ZsYWcgYnV0IHdlCisgKiBzZXQgdGhlIGdhaW4gYm91bmRhcmllcyBvbiBhIHNlcGFyYXRlIHJlZ2lzdGVyLgorICovCitzdGF0aWMgdm9pZAorYXRoNWtfY29tYmluZV9wd3JfdG9fcGRhZGNfY3VydmVzKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQlzMTYgKnB3cl9taW4sIHMxNiAqcHdyX21heCwgdTggcGRjdXJ2ZXMpCit7CisJdTggZ2Fpbl9ib3VuZGFyaWVzW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdOworCXU4ICpwZGFkY19vdXQgPSBhaC0+YWhfdHhwb3dlci50eHBfcGRfdGFibGU7CisJdTggKnBkYWRjX3RtcDsKKwlzMTYgcGRhZGNfMDsKKwl1OCBwZGFkY19pLCBwZGFkY19uLCBwd3Jfc3RlcCwgcGRnLCBtYXhfaWR4LCB0YWJsZV9zaXplOworCXU4IHBkX2dhaW5fb3ZlcmxhcDsKKworCS8qIE5vdGU6IFJlZ2lzdGVyIHZhbHVlIGlzIGluaXRpYWxpemVkIG9uIGluaXR2YWxzCisJICogdGhlcmUgaXMgbm8gZmVlZGJhY2sgZnJvbSBody4KKwkgKiBYWFg6IFdoYXQgYWJvdXQgcGRfZ2Fpbl9vdmVybGFwIGZyb20gRUVQUk9NID8gKi8KKwlwZF9nYWluX292ZXJsYXAgPSAodTgpIGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UUENfUkc1KSAmCisJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9PVkVSTEFQOworCisJLyogQ3JlYXRlIGZpbmFsIFBEQURDIHRhYmxlICovCisJZm9yIChwZGcgPSAwLCBwZGFkY19pID0gMDsgcGRnIDwgcGRjdXJ2ZXM7IHBkZysrKSB7CisJCXBkYWRjX3RtcCA9IGFoLT5haF90eHBvd2VyLnRtcExbcGRnXTsKKworCQlpZiAocGRnID09IHBkY3VydmVzIC0gMSkKKwkJCS8qIDIgZEIgYm91bmRhcnkgc3RyZXRjaCBmb3IgbGFzdAorCQkJICogKGhpZ2hlciBwb3dlcikgY3VydmUgKi8KKwkJCWdhaW5fYm91bmRhcmllc1twZGddID0gcHdyX21heFtwZGddICsgNDsKKwkJZWxzZQorCQkJLyogU2V0IGdhaW4gYm91bmRhcnkgaW4gdGhlIG1pZGRsZQorCQkJICogYmV0d2VlbiB0aGlzIGN1cnZlIGFuZCB0aGUgbmV4dCBvbmUgKi8KKwkJCWdhaW5fYm91bmRhcmllc1twZGddID0KKwkJCQkocHdyX21heFtwZGddICsgcHdyX21pbltwZGcgKyAxXSkgLyAyOworCisJCS8qIFNhbml0eSBjaGVjayBpbiBjYXNlIG91ciAyIGRiIHN0cmV0Y2ggZ290IG91dCBvZgorCQkgKiByYW5nZS4gKi8KKwkJaWYgKGdhaW5fYm91bmRhcmllc1twZGddID4gQVI1S19UVU5FX01BWF9UWFBPV0VSKQorCQkJZ2Fpbl9ib3VuZGFyaWVzW3BkZ10gPSBBUjVLX1RVTkVfTUFYX1RYUE9XRVI7CisKKwkJLyogRm9yIHRoZSBmaXJzdCBjdXJ2ZSAobG93ZXIgcG93ZXIpCisJCSAqIHN0YXJ0IGZyb20gMCBkQiAqLworCQlpZiAocGRnID09IDApCisJCQlwZGFkY18wID0gMDsKKwkJZWxzZQorCQkJLyogRm9yIHRoZSBvdGhlciBjdXJ2ZXMgdXNlIHRoZSBnYWluIG92ZXJsYXAgKi8KKwkJCXBkYWRjXzAgPSAoZ2Fpbl9ib3VuZGFyaWVzW3BkZyAtIDFdIC0gcHdyX21pbltwZGddKSAtCisJCQkJCQkJcGRfZ2Fpbl9vdmVybGFwOworCisJCS8qIEZvcmNlIGVhY2ggcG93ZXIgc3RlcCB0byBiZSBhdCBsZWFzdCAwLjUgZEIgKi8KKwkJaWYgKChwZGFkY190bXBbMV0gLSBwZGFkY190bXBbMF0pID4gMSkKKwkJCXB3cl9zdGVwID0gcGRhZGNfdG1wWzFdIC0gcGRhZGNfdG1wWzBdOworCQllbHNlCisJCQlwd3Jfc3RlcCA9IDE7CisKKwkJLyogSWYgcGRhZGNfMCBpcyBuZWdhdGl2ZSwgd2UgbmVlZCB0byBleHRyYXBvbGF0ZQorCQkgKiBiZWxvdyB0aGlzIHBkZ2FpbiBieSBhIG51bWJlciBvZiBwd3Jfc3RlcHMgKi8KKwkJd2hpbGUgKChwZGFkY18wIDwgMCkgJiYgKHBkYWRjX2kgPCAxMjgpKSB7CisJCQlzMTYgdG1wID0gcGRhZGNfdG1wWzBdICsgcGRhZGNfMCAqIHB3cl9zdGVwOworCQkJcGRhZGNfb3V0W3BkYWRjX2krK10gPSAodG1wIDwgMCkgPyAwIDogKHU4KSB0bXA7CisJCQlwZGFkY18wKys7CisJCX0KKworCQkvKiBTZXQgbGFzdCBwd3IgbGV2ZWwsIHVzaW5nIGdhaW4gYm91bmRhcmllcyAqLworCQlwZGFkY19uID0gZ2Fpbl9ib3VuZGFyaWVzW3BkZ10gKyBwZF9nYWluX292ZXJsYXAgLSBwd3JfbWluW3BkZ107CisJCS8qIExpbWl0IGl0IHRvIGJlIGluc2lkZSBwd3IgcmFuZ2UgKi8KKwkJdGFibGVfc2l6ZSA9IHB3cl9tYXhbcGRnXSAtIHB3cl9taW5bcGRnXTsKKwkJbWF4X2lkeCA9IChwZGFkY19uIDwgdGFibGVfc2l6ZSkgPyBwZGFkY19uIDogdGFibGVfc2l6ZTsKKworCQkvKiBGaWxsIHBkYWRjX291dCB0YWJsZSAqLworCQl3aGlsZSAocGRhZGNfMCA8IG1heF9pZHgpCisJCQlwZGFkY19vdXRbcGRhZGNfaSsrXSA9IHBkYWRjX3RtcFtwZGFkY18wKytdOworCisJCS8qIE5lZWQgdG8gZXh0cmFwb2xhdGUgYWJvdmUgdGhpcyBwZGdhaW4/ICovCisJCWlmIChwZGFkY19uIDw9IG1heF9pZHgpCisJCQljb250aW51ZTsKKworCQkvKiBGb3JjZSBlYWNoIHBvd2VyIHN0ZXAgdG8gYmUgYXQgbGVhc3QgMC41IGRCICovCisJCWlmICgocGRhZGNfdG1wW3RhYmxlX3NpemUgLSAxXSAtIHBkYWRjX3RtcFt0YWJsZV9zaXplIC0gMl0pID4gMSkKKwkJCXB3cl9zdGVwID0gcGRhZGNfdG1wW3RhYmxlX3NpemUgLSAxXSAtCisJCQkJCQlwZGFkY190bXBbdGFibGVfc2l6ZSAtIDJdOworCQllbHNlCisJCQlwd3Jfc3RlcCA9IDE7CisKKwkJLyogRXh0cmFwb2xhdGUgYWJvdmUgKi8KKwkJd2hpbGUgKChwZGFkY18wIDwgKHMxNikgcGRhZGNfbikgJiYKKwkJKHBkYWRjX2kgPCBBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFICogMikpIHsKKwkJCXMxNiB0bXAgPSBwZGFkY190bXBbdGFibGVfc2l6ZSAtIDFdICsKKwkJCQkJKHBkYWRjXzAgLSBtYXhfaWR4KSAqIHB3cl9zdGVwOworCQkJcGRhZGNfb3V0W3BkYWRjX2krK10gPSAodG1wID4gMTI3KSA/IDEyNyA6ICh1OCkgdG1wOworCQkJcGRhZGNfMCsrOworCQl9CisJfQorCisJd2hpbGUgKHBkZyA8IEFSNUtfRUVQUk9NX05fUERfR0FJTlMpIHsKKwkJZ2Fpbl9ib3VuZGFyaWVzW3BkZ10gPSBnYWluX2JvdW5kYXJpZXNbcGRnIC0gMV07CisJCXBkZysrOworCX0KKworCXdoaWxlIChwZGFkY19pIDwgQVI1S19FRVBST01fUE9XRVJfVEFCTEVfU0laRSAqIDIpIHsKKwkJcGRhZGNfb3V0W3BkYWRjX2ldID0gcGRhZGNfb3V0W3BkYWRjX2kgLSAxXTsKKwkJcGRhZGNfaSsrOworCX0KKworCS8qIFNldCBnYWluIGJvdW5kYXJpZXMgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCUFSNUtfUkVHX1NNKHBkX2dhaW5fb3ZlcmxhcCwKKwkJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9PVkVSTEFQKSB8CisJCUFSNUtfUkVHX1NNKGdhaW5fYm91bmRhcmllc1swXSwKKwkJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV8xKSB8CisJCUFSNUtfUkVHX1NNKGdhaW5fYm91bmRhcmllc1sxXSwKKwkJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV8yKSB8CisJCUFSNUtfUkVHX1NNKGdhaW5fYm91bmRhcmllc1syXSwKKwkJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV8zKSB8CisJCUFSNUtfUkVHX1NNKGdhaW5fYm91bmRhcmllc1szXSwKKwkJCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV80KSwKKwkJQVI1S19QSFlfVFBDX1JHNSk7CisKKwkvKiBVc2VkIGZvciBzZXR0aW5nIHJhdGUgcG93ZXIgdGFibGUgKi8KKwlhaC0+YWhfdHhwb3dlci50eHBfbWluX2lkeCA9IHB3cl9taW5bMF07CisKK30KKworLyogV3JpdGUgUERBREMgdmFsdWVzIG9uIGh3ICovCitzdGF0aWMgdm9pZAorYXRoNWtfc2V0dXBfcHdyX3RvX3BkYWRjX3RhYmxlKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQl1OCBwZGN1cnZlcywgdTggKnBkZ190b19pZHgpCit7CisJdTggKnBkYWRjX291dCA9IGFoLT5haF90eHBvd2VyLnR4cF9wZF90YWJsZTsKKwl1MzIgcmVnOworCXU4IGk7CisKKwkvKiBTZWxlY3QgdGhlIHJpZ2h0IHBkZ2FpbiBjdXJ2ZXMgKi8KKworCS8qIENsZWFyIGN1cnJlbnQgc2V0dGluZ3MgKi8KKwlyZWcgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfVFBDX1JHMSk7CisJcmVnICY9IH4oQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMSB8CisJCUFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzIgfAorCQlBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8zIHwKKwkJQVI1S19QSFlfVFBDX1JHMV9OVU1fUERfR0FJTik7CisKKwkvKgorCSAqIFVzZSBwZF9nYWlucyBjdXJ2ZSBmcm9tIGVlcHJvbQorCSAqCisJICogVGhpcyBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZyBmcm9tIGluaXR2YWxzCisJICogaW4gY2FzZSBzb21lIHZlbmRvcnMgKGUuZy4gWmNvbWF4KSBkb24ndCB1c2UgdGhlIGRlZmF1bHQKKwkgKiBjdXJ2ZXMuIElmIHdlIGRvbid0IGhvbm9yIHRoZWlyIHNldHRpbmdzIHdlICdsbCBnZXQgYQorCSAqIDVkQiAoMSAqIGdhaW4gb3ZlcmxhcCA/KSBkcm9wLgorCSAqLworCXJlZyB8PSBBUjVLX1JFR19TTShwZGN1cnZlcywgQVI1S19QSFlfVFBDX1JHMV9OVU1fUERfR0FJTik7CisKKwlzd2l0Y2ggKHBkY3VydmVzKSB7CisJY2FzZSAzOgorCQlyZWcgfD0gQVI1S19SRUdfU00ocGRnX3RvX2lkeFsyXSwgQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMyk7CisJCS8qIEZhbGwgdGhyb3VnaCAqLworCWNhc2UgMjoKKwkJcmVnIHw9IEFSNUtfUkVHX1NNKHBkZ190b19pZHhbMV0sIEFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzIpOworCQkvKiBGYWxsIHRocm91Z2ggKi8KKwljYXNlIDE6CisJCXJlZyB8PSBBUjVLX1JFR19TTShwZGdfdG9faWR4WzBdLCBBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8xKTsKKwkJYnJlYWs7CisJfQorCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcmVnLCBBUjVLX1BIWV9UUENfUkcxKTsKKworCS8qCisJICogV3JpdGUgVFggcG93ZXIgdmFsdWVzCisJICovCisJZm9yIChpID0gMDsgaSA8IChBUjVLX0VFUFJPTV9QT1dFUl9UQUJMRV9TSVpFIC8gMik7IGkrKykgeworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCQkoKHBkYWRjX291dFs0KmkgKyAwXSAmIDB4ZmYpIDw8IDApIHwKKwkJCSgocGRhZGNfb3V0WzQqaSArIDFdICYgMHhmZikgPDwgOCkgfAorCQkJKChwZGFkY19vdXRbNCppICsgMl0gJiAweGZmKSA8PCAxNikgfAorCQkJKChwZGFkY19vdXRbNCppICsgM10gJiAweGZmKSA8PCAyNCksCisJCQlBUjVLX1BIWV9QREFEQ19UWFBPV0VSKGkpKTsKKwl9Cit9CisKKworLyoKKyAqIENvbW1vbiBjb2RlIGZvciBQQ0RBQy9QREFEQyB0YWJsZXMKKyAqLworCisvKgorICogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiB0aGF0IHVzZXMgYWxsIG9mIHRoZSBhYm92ZQorICogdG8gc2V0IFBDREFDL1BEQURDIHRhYmxlIG9uIGh3IGZvciB0aGUgY3VycmVudCBjaGFubmVsLgorICogVGhpcyB0YWJsZSBpcyB1c2VkIGZvciB0eCBwb3dlciBjYWxpYnJhdGlvbiBvbiB0aGUgYmFzYmFuZCwKKyAqIHdpdGhvdXQgaXQgd2UgZ2V0IHdlaXJkIHR4IHBvd2VyIGxldmVscyBhbmQgaW4gc29tZSBjYXNlcworICogZGlzdG9ydGVkIHNwZWN0cmFsIG1hc2sKKyAqLworc3RhdGljIGludAorYXRoNWtfc2V0dXBfY2hhbm5lbF9wb3dlcnRhYmxlKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQl1OCBlZV9tb2RlLCB1OCB0eXBlKQoreworCXN0cnVjdCBhdGg1a19wZGdhaW5faW5mbyAqcGRnX0wsICpwZGdfUjsKKwlzdHJ1Y3QgYXRoNWtfY2hhbl9wY2FsX2luZm8gKnBjaW5mb19MOworCXN0cnVjdCBhdGg1a19jaGFuX3BjYWxfaW5mbyAqcGNpbmZvX1I7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisJdTggKnBkZ19jdXJ2ZV90b19pZHggPSBlZS0+ZWVfcGRjX3RvX2lkeFtlZV9tb2RlXTsKKwlzMTYgdGFibGVfbWluW0FSNUtfRUVQUk9NX05fUERfR0FJTlNdOworCXMxNiB0YWJsZV9tYXhbQVI1S19FRVBST01fTl9QRF9HQUlOU107CisJdTggKnRtcEw7CisJdTggKnRtcFI7CisJdTMyIHRhcmdldCA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOworCWludCBwZGcsIGk7CisKKwkvKiBHZXQgc3Vyb3VuZGluZyBmcmVxIHBpZXJzIGZvciB0aGlzIGNoYW5uZWwgKi8KKwlhdGg1a19nZXRfY2hhbl9wY2FsX3N1cnJvdW5kaW5nX3BpZXJzKGFoLCBjaGFubmVsLAorCQkJCQkJJnBjaW5mb19MLAorCQkJCQkJJnBjaW5mb19SKTsKKworCS8qIExvb3Agb3ZlciBwZCBnYWluIGN1cnZlcyBvbgorCSAqIHN1cm91bmRpbmcgZnJlcSBwaWVycyBieSBpbmRleCAqLworCWZvciAocGRnID0gMDsgcGRnIDwgZWUtPmVlX3BkX2dhaW5zW2VlX21vZGVdOyBwZGcrKykgeworCisJCS8qIEZpbGwgY3VydmVzIGluIHJldmVyc2Ugb3JkZXIKKwkJICogZnJvbSBsb3dlciBwb3dlciAobWF4IGdhaW4pCisJCSAqIHRvIGhpZ2hlciBwb3dlci4gVXNlIGN1cnZlIC0+IGlkeAorCQkgKiBiYWNrbWFwaW5nIHdlIGRpZCBvbiBlZXByb20gaW5pdCAqLworCQl1OCBpZHggPSBwZGdfY3VydmVfdG9faWR4W3BkZ107CisKKwkJLyogR3JhYiB0aGUgbmVlZGVkIGN1cnZlcyBieSBpbmRleCAqLworCQlwZGdfTCA9ICZwY2luZm9fTC0+cGRfY3VydmVzW2lkeF07CisJCXBkZ19SID0gJnBjaW5mb19SLT5wZF9jdXJ2ZXNbaWR4XTsKKworCQkvKiBJbml0aWFsaXplIHRoZSB0ZW1wIHRhYmxlcyAqLworCQl0bXBMID0gYWgtPmFoX3R4cG93ZXIudG1wTFtwZGddOworCQl0bXBSID0gYWgtPmFoX3R4cG93ZXIudG1wUltwZGddOworCisJCS8qIFNldCBjdXJ2ZSdzIHggYm91bmRhcmllcyBhbmQgY3JlYXRlCisJCSAqIGN1cnZlcyBzbyB0aGF0IHRoZXkgY292ZXIgdGhlIHNhbWUKKwkJICogcmFuZ2UgKGlmIHdlIGRvbid0IGRvIHRoYXQgb25lIHRhYmxlCisJCSAqIHdpbGwgaGF2ZSB2YWx1ZXMgb24gc29tZSByYW5nZSBhbmQgdGhlCisJCSAqIG90aGVyIG9uZSB3b24ndCBoYXZlIGFueSBzbyBpbnRlcnBvbGF0aW9uCisJCSAqIHdpbGwgZmFpbCkgKi8KKwkJdGFibGVfbWluW3BkZ10gPSBtaW4ocGRnX0wtPnBkX3B3clswXSwKKwkJCQkJcGRnX1ItPnBkX3B3clswXSkgLyAyOworCisJCXRhYmxlX21heFtwZGddID0gbWF4KHBkZ19MLT5wZF9wd3JbcGRnX0wtPnBkX3BvaW50cyAtIDFdLAorCQkJCXBkZ19SLT5wZF9wd3JbcGRnX1ItPnBkX3BvaW50cyAtIDFdKSAvIDI7CisKKwkJLyogTm93IGNyZWF0ZSB0aGUgY3VydmVzIG9uIHN1cnJvdW5kaW5nIGNoYW5uZWxzCisJCSAqIGFuZCBpbnRlcnBvbGF0ZSBpZiBuZWVkZWQgdG8gZ2V0IHRoZSBmaW5hbAorCQkgKiBjdXJ2ZSBmb3IgdGhpcyBnYWluIG9uIHRoaXMgY2hhbm5lbCAqLworCQlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBBUjVLX1BXUlRBQkxFX0xJTkVBUl9QQ0RBQzoKKwkJCS8qIE92ZXJyaWRlIG1pbi9tYXggc28gdGhhdCB3ZSBkb24ndCBsb29zZQorCQkJICogYWNjdXJhY3kgKGRvbid0IGRpdmlkZSBieSAyKSAqLworCQkJdGFibGVfbWluW3BkZ10gPSBtaW4ocGRnX0wtPnBkX3B3clswXSwKKwkJCQkJCXBkZ19SLT5wZF9wd3JbMF0pOworCisJCQl0YWJsZV9tYXhbcGRnXSA9CisJCQkJbWF4KHBkZ19MLT5wZF9wd3JbcGRnX0wtPnBkX3BvaW50cyAtIDFdLAorCQkJCQlwZGdfUi0+cGRfcHdyW3BkZ19SLT5wZF9wb2ludHMgLSAxXSk7CisKKwkJCS8qIE92ZXJyaWRlIG1pbmltdW0gc28gdGhhdCB3ZSBkb24ndCBnZXQKKwkJCSAqIG91dCBvZiBib3VuZHMgd2hpbGUgZXh0cmFwb2xhdGluZworCQkJICogYmVsb3cuIERvbid0IGRvIHRoaXMgd2hlbiB3ZSBoYXZlIDIKKwkJCSAqIGN1cnZlcyBhbmQgd2UgYXJlIG9uIHRoZSBoaWdoIHBvd2VyIGN1cnZlCisJCQkgKiBiZWNhdXNlIHRhYmxlX21pbiBpcyBvayBpbiB0aGlzIGNhc2UgKi8KKwkJCWlmICghKGVlLT5lZV9wZF9nYWluc1tlZV9tb2RlXSA+IDEgJiYgcGRnID09IDApKSB7CisKKwkJCQl0YWJsZV9taW5bcGRnXSA9CisJCQkJCWF0aDVrX2dldF9saW5lYXJfcGNkYWNfbWluKHBkZ19MLT5wZF9zdGVwLAorCQkJCQkJCQlwZGdfUi0+cGRfc3RlcCwKKwkJCQkJCQkJcGRnX0wtPnBkX3B3ciwKKwkJCQkJCQkJcGRnX1ItPnBkX3B3cik7CisKKwkJCQkvKiBEb24ndCBnbyB0b28gbG93IGJlY2F1c2Ugd2Ugd2lsbAorCQkJCSAqIG1pc3MgdGhlIHVwcGVyIHBhcnQgb2YgdGhlIGN1cnZlLgorCQkJCSAqIE5vdGU6IDEyNiA9IDMxLjVkQiAobWF4IHBvd2VyIHN1cHBvcnRlZCkKKwkJCQkgKiBpbiAwLjI1ZEIgdW5pdHMgKi8KKwkJCQlpZiAodGFibGVfbWF4W3BkZ10gLSB0YWJsZV9taW5bcGRnXSA+IDEyNikKKwkJCQkJdGFibGVfbWluW3BkZ10gPSB0YWJsZV9tYXhbcGRnXSAtIDEyNjsKKwkJCX0KKworCQkJLyogRmFsbCB0aHJvdWdoICovCisJCWNhc2UgQVI1S19QV1JUQUJMRV9QV1JfVE9fUENEQUM6CisJCWNhc2UgQVI1S19QV1JUQUJMRV9QV1JfVE9fUERBREM6CisKKwkJCWF0aDVrX2NyZWF0ZV9wb3dlcl9jdXJ2ZSh0YWJsZV9taW5bcGRnXSwKKwkJCQkJCXRhYmxlX21heFtwZGddLAorCQkJCQkJcGRnX0wtPnBkX3B3ciwKKwkJCQkJCXBkZ19MLT5wZF9zdGVwLAorCQkJCQkJcGRnX0wtPnBkX3BvaW50cywgdG1wTCwgdHlwZSk7CisKKwkJCS8qIFdlIGFyZSBpbiBhIGNhbGlicmF0aW9uCisJCQkgKiBwaWVyLCBubyBuZWVkIHRvIGludGVycG9sYXRlCisJCQkgKiBiZXR3ZWVuIGZyZXEgcGllcnMgKi8KKwkJCWlmIChwY2luZm9fTCA9PSBwY2luZm9fUikKKwkJCQljb250aW51ZTsKKworCQkJYXRoNWtfY3JlYXRlX3Bvd2VyX2N1cnZlKHRhYmxlX21pbltwZGddLAorCQkJCQkJdGFibGVfbWF4W3BkZ10sCisJCQkJCQlwZGdfUi0+cGRfcHdyLAorCQkJCQkJcGRnX1ItPnBkX3N0ZXAsCisJCQkJCQlwZGdfUi0+cGRfcG9pbnRzLCB0bXBSLCB0eXBlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQkvKiBJbnRlcnBvbGF0ZSBiZXR3ZWVuIGN1cnZlcworCQkgKiBvZiBzdXJvdW5kaW5nIGZyZXEgcGllcnMgdG8KKwkJICogZ2V0IHRoZSBmaW5hbCBjdXJ2ZSBmb3IgdGhpcworCQkgKiBwZCBnYWluLiBSZS11c2UgdG1wTCBmb3IgaW50ZXJwb2xhdGlvbgorCQkgKiBvdXRwdXQgKi8KKwkJZm9yIChpID0gMDsgKGkgPCAodTE2KSAodGFibGVfbWF4W3BkZ10gLSB0YWJsZV9taW5bcGRnXSkpICYmCisJCShpIDwgQVI1S19FRVBST01fUE9XRVJfVEFCTEVfU0laRSk7IGkrKykgeworCQkJdG1wTFtpXSA9ICh1OCkgYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZSh0YXJnZXQsCisJCQkJCQkJKHMxNikgcGNpbmZvX0wtPmZyZXEsCisJCQkJCQkJKHMxNikgcGNpbmZvX1ItPmZyZXEsCisJCQkJCQkJKHMxNikgdG1wTFtpXSwKKwkJCQkJCQkoczE2KSB0bXBSW2ldKTsKKwkJfQorCX0KKworCS8qIE5vdyB3ZSBoYXZlIGEgc2V0IG9mIGN1cnZlcyBmb3IgdGhpcworCSAqIGNoYW5uZWwgb24gdG1wTCAoeCByYW5nZSBpcyB0YWJsZV9tYXggLSB0YWJsZV9taW4KKwkgKiBhbmQgeSB2YWx1ZXMgYXJlIHRtcExbcGRnXVtdKSBzb3J0ZWQgaW4gdGhlIHNhbWUKKwkgKiBvcmRlciBhcyBFRVBST00gKGJlY2F1c2Ugd2UndmUgdXNlZCB0aGUgYmFja21hcGluZykuCisJICogU28gZm9yIFJGNTExMiBpdCdzIGZyb20gaGlnaGVyIHBvd2VyIHRvIGxvd2VyIHBvd2VyCisJICogYW5kIGZvciBSRjI0MTMgaXQncyBmcm9tIGxvd2VyIHBvd2VyIHRvIGhpZ2hlciBwb3dlci4KKwkgKiBGb3IgUkY1MTExIHdlIG9ubHkgaGF2ZSBvbmUgY3VydmUuICovCisKKwkvKiBGaWxsIG1pbiBhbmQgbWF4IHBvd2VyIGxldmVscyBmb3IgdGhpcworCSAqIGNoYW5uZWwgYnkgaW50ZXJwb2xhdGluZyB0aGUgdmFsdWVzIG9uCisJICogc3Vyb3VuZGluZyBjaGFubmVscyB0byBjb21wbGV0ZSB0aGUgZGF0YXNldCAqLworCWFoLT5haF90eHBvd2VyLnR4cF9taW5fcHdyID0gYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZSh0YXJnZXQsCisJCQkJCShzMTYpIHBjaW5mb19MLT5mcmVxLAorCQkJCQkoczE2KSBwY2luZm9fUi0+ZnJlcSwKKwkJCQkJcGNpbmZvX0wtPm1pbl9wd3IsIHBjaW5mb19SLT5taW5fcHdyKTsKKworCWFoLT5haF90eHBvd2VyLnR4cF9tYXhfcHdyID0gYXRoNWtfZ2V0X2ludGVycG9sYXRlZF92YWx1ZSh0YXJnZXQsCisJCQkJCShzMTYpIHBjaW5mb19MLT5mcmVxLAorCQkJCQkoczE2KSBwY2luZm9fUi0+ZnJlcSwKKwkJCQkJcGNpbmZvX0wtPm1heF9wd3IsIHBjaW5mb19SLT5tYXhfcHdyKTsKKworCS8qIFdlIGFyZSByZWFkeSB0byBnbywgZmlsbCBQQ0RBQy9QREFEQworCSAqIHRhYmxlIGFuZCB3cml0ZSBzZXR0aW5ncyBvbiBoYXJkd2FyZSAqLworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQVI1S19QV1JUQUJMRV9MSU5FQVJfUENEQUM6CisJCS8qIEZvciBSRjUxMTIgd2UgY2FuIGhhdmUgb25lIG9yIHR3byBjdXJ2ZXMKKwkJICogYW5kIGVhY2ggY3VydmUgY292ZXJzIGEgY2VydGFpbiBwb3dlciBsdmwKKwkJICogcmFuZ2Ugc28gd2UgbmVlZCB0byBkbyBzb21lIG1vcmUgcHJvY2Vzc2luZyAqLworCQlhdGg1a19jb21iaW5lX2xpbmVhcl9wY2RhY19jdXJ2ZXMoYWgsIHRhYmxlX21pbiwgdGFibGVfbWF4LAorCQkJCQkJZWUtPmVlX3BkX2dhaW5zW2VlX21vZGVdKTsKKworCQkvKiBTZXQgdHhwLm9mZnNldCBzbyB0aGF0IHdlIGNhbgorCQkgKiBtYXRjaCBtYXggcG93ZXIgdmFsdWUgd2l0aCBtYXgKKwkJICogdGFibGUgaW5kZXggKi8KKwkJYWgtPmFoX3R4cG93ZXIudHhwX29mZnNldCA9IDY0IC0gKHRhYmxlX21heFswXSAvIDIpOworCisJCS8qIFdyaXRlIHNldHRpbmdzIG9uIGh3ICovCisJCWF0aDVrX3NldHVwX3BjZGFjX3RhYmxlKGFoKTsKKwkJYnJlYWs7CisJY2FzZSBBUjVLX1BXUlRBQkxFX1BXUl9UT19QQ0RBQzoKKwkJLyogV2UgYXJlIGRvbmUgZm9yIFJGNTExMSBzaW5jZSBpdCBoYXMgb25seQorCQkgKiBvbmUgY3VydmUsIGp1c3QgZml0IHRoZSBjdXJ2ZSBvbiB0aGUgdGFibGUgKi8KKwkJYXRoNWtfZmlsbF9wd3JfdG9fcGNkYWNfdGFibGUoYWgsIHRhYmxlX21pbiwgdGFibGVfbWF4KTsKKworCQkvKiBObyByYXRlIHBvd2VydGFibGUgYWRqdXN0bWVudCBmb3IgUkY1MTExICovCisJCWFoLT5haF90eHBvd2VyLnR4cF9taW5faWR4ID0gMDsKKwkJYWgtPmFoX3R4cG93ZXIudHhwX29mZnNldCA9IDA7CisKKwkJLyogV3JpdGUgc2V0dGluZ3Mgb24gaHcgKi8KKwkJYXRoNWtfc2V0dXBfcGNkYWNfdGFibGUoYWgpOworCQlicmVhazsKKwljYXNlIEFSNUtfUFdSVEFCTEVfUFdSX1RPX1BEQURDOgorCQkvKiBTZXQgUERBREMgYm91bmRhcmllcyBhbmQgZmlsbAorCQkgKiBmaW5hbCBQREFEQyB0YWJsZSAqLworCQlhdGg1a19jb21iaW5lX3B3cl90b19wZGFkY19jdXJ2ZXMoYWgsIHRhYmxlX21pbiwgdGFibGVfbWF4LAorCQkJCQkJZWUtPmVlX3BkX2dhaW5zW2VlX21vZGVdKTsKKworCQkvKiBXcml0ZSBzZXR0aW5ncyBvbiBodyAqLworCQlhdGg1a19zZXR1cF9wd3JfdG9fcGRhZGNfdGFibGUoYWgsIHBkZywgcGRnX2N1cnZlX3RvX2lkeCk7CisKKwkJLyogU2V0IHR4cC5vZmZzZXQsIG5vdGUgdGhhdCB0YWJsZV9taW4KKwkJICogY2FuIGJlIG5lZ2F0aXZlICovCisJCWFoLT5haF90eHBvd2VyLnR4cF9vZmZzZXQgPSB0YWJsZV9taW5bMF07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBQZXItcmF0ZSB0eCBwb3dlciBzZXR0aW5nCisgKgorICogVGhpcyBpcyB0aGUgY29kZSB0aGF0IHNldHMgdGhlIGRlc2lyZWQgdHggcG93ZXIgKGJlbG93CisgKiBtYXhpbXVtKSBvbiBodyBmb3IgZWFjaCByYXRlICh3ZSBhbHNvIGhhdmUgVFBDIHRoYXQgc2V0cworICogcG93ZXIgcGVyIHBhY2tldCkuIFdlIGRvIHRoYXQgYnkgcHJvdmlkaW5nIGFuIGluZGV4IG9uIHRoZQorICogUENEQUMvUERBREMgdGFibGUgd2Ugc2V0IHVwLgorICovCisKKy8qCisgKiBTZXQgcmF0ZSBwb3dlciB0YWJsZQorICoKKyAqIEZvciBub3cgd2Ugb25seSBsaW1pdCB0eHBvd2VyIGJhc2VkIG9uIG1heGltdW0gdHggcG93ZXIKKyAqIHN1cHBvcnRlZCBieSBodyAod2hhdCdzIGluc2lkZSByYXRlX2luZm8pLiBXZSBuZWVkIHRvIGxpbWl0CisgKiB0aGlzIGV2ZW4gbW9yZSwgYmFzZWQgb24gcmVndWxhdG9yeSBkb21haW4gZXRjLgorICoKKyAqIFJhdGUgcG93ZXIgdGFibGUgY29udGFpbnMgaW5kaWNlcyB0byBQQ0RBQy9QREFEQyB0YWJsZSAoMC41ZEIgc3RlcHMpCisgKiBhbmQgaXMgaW5kZXhlZCBhcyBmb2xsb3dzOgorICogcmF0ZXNbMF0gLSByYXRlc1s3XSAtPiBPRkRNIHJhdGVzCisgKiByYXRlc1s4XSAtIHJhdGVzWzE0XSAtPiBDQ0sgcmF0ZXMKKyAqIHJhdGVzWzE1XSAtPiBYUiByYXRlcyAodGhleSBhbGwgaGF2ZSB0aGUgc2FtZSBwb3dlcikKKyAqLworc3RhdGljIHZvaWQKK2F0aDVrX3NldHVwX3JhdGVfcG93ZXJ0YWJsZShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MTYgbWF4X3B3ciwKKwkJCXN0cnVjdCBhdGg1a19yYXRlX3BjYWxfaW5mbyAqcmF0ZV9pbmZvLAorCQkJdTggZWVfbW9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MTYgKnJhdGVzOworCisJLyogbWF4X3B3ciBpcyBwb3dlciBsZXZlbCB3ZSBnb3QgZnJvbSBkcml2ZXIvdXNlciBpbiAwLjVkQgorCSAqIHVuaXRzLCBzd2l0Y2ggdG8gMC4yNWRCIHVuaXRzIHNvIHdlIGNhbiBjb21wYXJlICovCisJbWF4X3B3ciAqPSAyOworCW1heF9wd3IgPSBtaW4obWF4X3B3ciwgKHUxNikgYWgtPmFoX3R4cG93ZXIudHhwX21heF9wd3IpIC8gMjsKKworCS8qIGFwcGx5IHJhdGUgbGltaXRzICovCisJcmF0ZXMgPSBhaC0+YWhfdHhwb3dlci50eHBfcmF0ZXNfcG93ZXJfdGFibGU7CisKKwkvKiBPRkRNIHJhdGVzIDYgdG8gMjRNYi9zICovCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJcmF0ZXNbaV0gPSBtaW4obWF4X3B3ciwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNnRvMjQpOworCisJLyogUmVzdCBPRkRNIHJhdGVzICovCisJcmF0ZXNbNV0gPSBtaW4ocmF0ZXNbMF0sIHJhdGVfaW5mby0+dGFyZ2V0X3Bvd2VyXzM2KTsKKwlyYXRlc1s2XSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNDgpOworCXJhdGVzWzddID0gbWluKHJhdGVzWzBdLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl81NCk7CisKKwkvKiBDQ0sgcmF0ZXMgKi8KKwkvKiAxTCAqLworCXJhdGVzWzhdID0gbWluKHJhdGVzWzBdLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl82dG8yNCk7CisJLyogMkwgKi8KKwlyYXRlc1s5XSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfMzYpOworCS8qIDJTICovCisJcmF0ZXNbMTBdID0gbWluKHJhdGVzWzBdLCByYXRlX2luZm8tPnRhcmdldF9wb3dlcl8zNik7CisJLyogNUwgKi8KKwlyYXRlc1sxMV0gPSBtaW4ocmF0ZXNbMF0sIHJhdGVfaW5mby0+dGFyZ2V0X3Bvd2VyXzQ4KTsKKwkvKiA1UyAqLworCXJhdGVzWzEyXSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNDgpOworCS8qIDExTCAqLworCXJhdGVzWzEzXSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNTQpOworCS8qIDExUyAqLworCXJhdGVzWzE0XSA9IG1pbihyYXRlc1swXSwgcmF0ZV9pbmZvLT50YXJnZXRfcG93ZXJfNTQpOworCisJLyogWFIgcmF0ZXMgKi8KKwlyYXRlc1sxNV0gPSBtaW4ocmF0ZXNbMF0sIHJhdGVfaW5mby0+dGFyZ2V0X3Bvd2VyXzZ0bzI0KTsKKworCS8qIENDSyByYXRlcyBoYXZlIGRpZmZlcmVudCBwZWFrIHRvIGF2ZXJhZ2UgcmF0aW8KKwkgKiBzbyB3ZSBoYXZlIHRvIHR3ZWFrIHRoZWlyIHBvd2VyIHNvIHRoYXQgZ2FpbmYKKwkgKiBjb3JyZWN0aW9uIHdvcmtzIG9rLiBGb3IgdGhpcyB3ZSB1c2UgT0ZETSB0bworCSAqIENDSyBkZWx0YSBmcm9tIGVlcHJvbSAqLworCWlmICgoZWVfbW9kZSA9PSBBUjVLX0VFUFJPTV9NT0RFXzExRykgJiYKKwkoYWgtPmFoX3BoeV9yZXZpc2lvbiA8IEFSNUtfU1JFVl9QSFlfNTIxMkEpKQorCQlmb3IgKGkgPSA4OyBpIDw9IDE1OyBpKyspCisJCQlyYXRlc1tpXSAtPSBhaC0+YWhfdHhwb3dlci50eHBfY2NrX29mZG1fZ2FpbmZfZGVsdGE7CisKKwlhaC0+YWhfdHhwb3dlci50eHBfbWluX3B3ciA9IHJhdGVzWzddOworCWFoLT5haF90eHBvd2VyLnR4cF9tYXhfcHdyID0gcmF0ZXNbMF07CisJYWgtPmFoX3R4cG93ZXIudHhwX29mZG0gPSByYXRlc1s3XTsKK30KKworCisvKgorICogU2V0IHRyYW5zbWl0aW9uIHBvd2VyCisgKi8KK2ludAorYXRoNWtfaHdfdHhwb3dlcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCXU4IGVlX21vZGUsIHU4IHR4cG93ZXIpCit7CisJc3RydWN0IGF0aDVrX3JhdGVfcGNhbF9pbmZvIHJhdGVfaW5mbzsKKwl1OCB0eXBlOworCWludCByZXQ7CisKKwlBVEg1S19UUkFDRShhaC0+YWhfc2MpOworCWlmICh0eHBvd2VyID4gQVI1S19UVU5FX01BWF9UWFBPV0VSKSB7CisJCUFUSDVLX0VSUihhaC0+YWhfc2MsICJpbnZhbGlkIHR4IHBvd2VyOiAldVxuIiwgdHhwb3dlcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAodHhwb3dlciA9PSAwKQorCQl0eHBvd2VyID0gQVI1S19UVU5FX0RFRkFVTFRfVFhQT1dFUjsKKworCS8qIFJlc2V0IFRYIHBvd2VyIHZhbHVlcyAqLworCW1lbXNldCgmYWgtPmFoX3R4cG93ZXIsIDAsIHNpemVvZihhaC0+YWhfdHhwb3dlcikpOworCWFoLT5haF90eHBvd2VyLnR4cF90cGMgPSBBUjVLX1RVTkVfVFBDX1RYUE9XRVI7CisJYWgtPmFoX3R4cG93ZXIudHhwX21pbl9wd3IgPSAwOworCWFoLT5haF90eHBvd2VyLnR4cF9tYXhfcHdyID0gQVI1S19UVU5FX01BWF9UWFBPV0VSOworCisJLyogSW5pdGlhbGl6ZSBUWCBwb3dlciB0YWJsZSAqLworCXN3aXRjaCAoYWgtPmFoX3JhZGlvKSB7CisJY2FzZSBBUjVLX1JGNTExMToKKwkJdHlwZSA9IEFSNUtfUFdSVEFCTEVfUFdSX1RPX1BDREFDOworCQlicmVhazsKKwljYXNlIEFSNUtfUkY1MTEyOgorCQl0eXBlID0gQVI1S19QV1JUQUJMRV9MSU5FQVJfUENEQUM7CisJCWJyZWFrOworCWNhc2UgQVI1S19SRjI0MTM6CisJY2FzZSBBUjVLX1JGNTQxMzoKKwljYXNlIEFSNUtfUkYyMzE2OgorCWNhc2UgQVI1S19SRjIzMTc6CisJY2FzZSBBUjVLX1JGMjQyNToKKwkJdHlwZSA9IEFSNUtfUFdSVEFCTEVfUFdSX1RPX1BEQURDOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBGSVhNRTogT25seSBvbiBjaGFubmVsL21vZGUgY2hhbmdlICovCisJcmV0ID0gYXRoNWtfc2V0dXBfY2hhbm5lbF9wb3dlcnRhYmxlKGFoLCBjaGFubmVsLCBlZV9tb2RlLCB0eXBlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogTGltaXQgbWF4IHBvd2VyIGlmIHdlIGhhdmUgYSBDVEwgYXZhaWxhYmxlICovCisJYXRoNWtfZ2V0X21heF9jdGxfcG93ZXIoYWgsIGNoYW5uZWwpOworCisJLyogRklYTUU6IFR4IHBvd2VyIGxpbWl0IGZvciB0aGlzIHJlZ2RvbWFpbgorCSAqIFhYWDogTWFjODAyMTEvQ1JEQSB3aWxsIGRvIHRoYXQgYW55d2F5ID8gKi8KKworCS8qIEZJWE1FOiBBbnRlbm5hIHJlZHVjdGlvbiBzdHVmZiAqLworCisJLyogRklYTUU6IExpbWl0IHBvd2VyIG9uIHR1cmJvIG1vZGVzICovCisKKwkvKiBGSVhNRTogVFBDIHNjYWxlIHJlZHVjdGlvbiAqLworCisJLyogR2V0IHN1cm91bmRpbmcgY2hhbm5lbHMgZm9yIHBlci1yYXRlIHBvd2VyIHRhYmxlCisJICogY2FsaWJyYXRpb24gKi8KKwlhdGg1a19nZXRfcmF0ZV9wY2FsX2RhdGEoYWgsIGNoYW5uZWwsICZyYXRlX2luZm8pOworCisJLyogU2V0dXAgcmF0ZSBwb3dlciB0YWJsZSAqLworCWF0aDVrX3NldHVwX3JhdGVfcG93ZXJ0YWJsZShhaCwgdHhwb3dlciwgJnJhdGVfaW5mbywgZWVfbW9kZSk7CisKKwkvKiBXcml0ZSByYXRlIHBvd2VyIHRhYmxlIG9uIGh3ICovCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1RYUE9XRVJfT0ZETSgzLCAyNCkgfAogCQlBUjVLX1RYUE9XRVJfT0ZETSgyLCAxNikgfCBBUjVLX1RYUE9XRVJfT0ZETSgxLCA4KSB8CiAJCUFSNUtfVFhQT1dFUl9PRkRNKDAsIDApLCBBUjVLX1BIWV9UWFBPV0VSX1JBVEUxKTsKQEAgLTI0ODEsMjYgKzI1NjYsMzQgQEAKIAkJQVI1S19UWFBPV0VSX0NDSygxMywgMTYpIHwgQVI1S19UWFBPV0VSX0NDSygxMiwgOCkgfAogCQlBUjVLX1RYUE9XRVJfQ0NLKDExLCAwKSwgQVI1S19QSFlfVFhQT1dFUl9SQVRFNCk7CiAKLQlpZiAoYWgtPmFoX3R4cG93ZXIudHhwX3RwYykKKwkvKiBGSVhNRTogVFBDIHN1cHBvcnQgKi8KKwlpZiAoYWgtPmFoX3R4cG93ZXIudHhwX3RwYykgewogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1RYUE9XRVJfUkFURV9NQVhfVFBDX0VOQUJMRSB8CiAJCQlBUjVLX1RVTkVfTUFYX1RYUE9XRVIsIEFSNUtfUEhZX1RYUE9XRVJfUkFURV9NQVgpOwotCWVsc2UKKworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCQlBUjVLX1JFR19NUyhBUjVLX1RVTkVfTUFYX1RYUE9XRVIsIEFSNUtfVFBDX0FDSykgfAorCQkJQVI1S19SRUdfTVMoQVI1S19UVU5FX01BWF9UWFBPV0VSLCBBUjVLX1RQQ19DVFMpIHwKKwkJCUFSNUtfUkVHX01TKEFSNUtfVFVORV9NQVhfVFhQT1dFUiwgQVI1S19UUENfQ0hJUlApLAorCQkJQVI1S19UUEMpOworCX0gZWxzZSB7CiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfVFhQT1dFUl9SQVRFX01BWCB8CiAJCQlBUjVLX1RVTkVfTUFYX1RYUE9XRVIsIEFSNUtfUEhZX1RYUE9XRVJfUkFURV9NQVgpOworCX0KIAogCXJldHVybiAwOwogfQogCi1pbnQgYXRoNWtfaHdfc2V0X3R4cG93ZXJfbGltaXQoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHBvd2VyKQoraW50IGF0aDVrX2h3X3NldF90eHBvd2VyX2xpbWl0KHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IG1vZGUsIHU4IHR4cG93ZXIpCiB7CiAJLypKdXN0IGEgdHJ5IE0uRi4qLwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9ICZhaC0+YWhfY3VycmVudF9jaGFubmVsOwogCiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAlBVEg1S19EQkcoYWgtPmFoX3NjLCBBVEg1S19ERUJVR19UWFBPV0VSLAotCQkiY2hhbmdpbmcgdHhwb3dlciB0byAlZFxuIiwgcG93ZXIpOworCQkiY2hhbmdpbmcgdHhwb3dlciB0byAlZFxuIiwgdHhwb3dlcik7CiAKLQlyZXR1cm4gYXRoNWtfaHdfdHhwb3dlcihhaCwgY2hhbm5lbCwgcG93ZXIpOworCXJldHVybiBhdGg1a19od190eHBvd2VyKGFoLCBjaGFubmVsLCBtb2RlLCB0eHBvd2VyKTsKIH0KIAogI3VuZGVmIF9BVEg1S19QSFkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3FjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcWN1LmMKaW5kZXggMWI3YmM1MC4uNTA5NGMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcWN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcWN1LmMKQEAgLTE0OCw2ICsxNDgsNyBAQAogICovCiB1MzIgYXRoNWtfaHdfbnVtX3R4X3BlbmRpbmcoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHF1ZXVlKQogeworCXUzMiBwZW5kaW5nOwogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAJQVI1S19BU1NFUlRfRU5UUlkocXVldWUsIGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bSk7CiAKQEAgLTE1OSw3ICsxNjAsMTUgQEAKIAlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApCiAJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiBBUjVLX1FVRVVFX1NUQVRVUyhxdWV1ZSkgJiBBUjVLX1FDVV9TVFNfRlJNUEVORENOVDsKKwlwZW5kaW5nID0gKEFSNUtfUVVFVUVfU1RBVFVTKHF1ZXVlKSAmIEFSNUtfUUNVX1NUU19GUk1QRU5EQ05UKTsKKworCS8qIEl0J3MgcG9zc2libGUgdG8gaGF2ZSBubyBmcmFtZXMgcGVuZGluZyBldmVuIGlmIFRYRQorCSAqIGlzIHNldC4gVG8gaW5kaWNhdGUgdGhhdCBxIGhhcyBub3Qgc3RvcHBlZCByZXR1cm4KKwkgKiB0cnVlICovCisJaWYgKCFwZW5kaW5nICYmIEFSNUtfUkVHX1JFQURfUShhaCwgQVI1S19RQ1VfVFhFLCBxdWV1ZSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIHBlbmRpbmc7CiB9CiAKIC8qCkBAIC0zMjQsOCArMzMzLDE4IEBACiAJCS8qCiAJCSAqIFNldCBtaXNjIHJlZ2lzdGVycwogCQkgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1FDVV9NSVNDX0RDVV9FQVJMWSwKLQkJCUFSNUtfUVVFVUVfTUlTQyhxdWV1ZSkpOworCQkvKiBFbmFibGUgRENVIGVhcmx5IHRlcm1pbmF0aW9uIGZvciB0aGlzIHF1ZXVlICovCisJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX01JU0MocXVldWUpLAorCQkJCQlBUjVLX1FDVV9NSVNDX0RDVV9FQVJMWSk7CisKKwkJLyogRW5hYmxlIERDVSB0byB3YWl0IGZvciBuZXh0IGZyYWdtZW50IGZyb20gUUNVICovCisJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX0RGU19NSVNDKHF1ZXVlKSwKKwkJCQkJQVI1S19EQ1VfTUlTQ19GUkFHX1dBSVQpOworCisJCS8qIE9uIE1hdWkgYW5kIFNwaXJpdCB1c2UgdGhlIGdsb2JhbCBzZXFudW0gb24gRENVICovCisJCWlmIChhaC0+YWhfbWFjX3ZlcnNpb24gPCBBUjVLX1NSRVZfQVI1MjExKQorCQkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUVVFVUVfREZTX01JU0MocXVldWUpLAorCQkJCQkJQVI1S19EQ1VfTUlTQ19TRVFOVU1fQ1RMKTsKIAogCQlpZiAodHEtPnRxaV9jYnJfcGVyaW9kKSB7CiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUkVHX1NNKHRxLT50cWlfY2JyX3BlcmlvZCwKQEAgLTM0MSw3ICszNjAsOCBAQAogCQkJCQlBUjVLX1FDVV9NSVNDX0NCUl9USFJFU19FTkFCTEUpOwogCQl9CiAKLQkJaWYgKHRxLT50cWlfcmVhZHlfdGltZSkKKwkJaWYgKHRxLT50cWlfcmVhZHlfdGltZSAmJgorCQkodHEtPnRxaV90eXBlICE9IEFSNUtfVFhfUVVFVUVfSURfQ0FCKSkKIAkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19SRUdfU00odHEtPnRxaV9yZWFkeV90aW1lLAogCQkJCUFSNUtfUUNVX1JEWVRJTUVDRkdfSU5UVkFMKSB8CiAJCQkJQVI1S19RQ1VfUkRZVElNRUNGR19FTkFCTEUsCkBAIC0zODMsMTMgKzQwMyw2IEBACiAJCQkJQVI1S19EQ1VfTUlTQ19BUkJMT0NLX0NUTF9TKSB8CiAJCQkJQVI1S19EQ1VfTUlTQ19QT1NUX0ZSX0JLT0ZGX0RJUyB8CiAJCQkJQVI1S19EQ1VfTUlTQ19CQ05fRU5BQkxFKTsKLQotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAoKEFSNUtfVFVORV9CRUFDT05fSU5URVJWQUwgLQotCQkJCShBUjVLX1RVTkVfU1dfQkVBQ09OX1JFU1AgLQotCQkJCUFSNUtfVFVORV9ETUFfQkVBQ09OX1JFU1ApIC0KLQkJCQlBUjVLX1RVTkVfQURESVRJT05BTF9TV0JBX0JBQ0tPRkYpICogMTAyNCkgfAotCQkJCUFSNUtfUUNVX1JEWVRJTUVDRkdfRU5BQkxFLAotCQkJCUFSNUtfUVVFVUVfUkRZVElNRUNGRyhxdWV1ZSkpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBBUjVLX1RYX1FVRVVFX0NBQjoKQEAgLTM5OCw2ICs0MTEsMTMgQEAKIAkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9ESVMgfAogCQkJCUFSNUtfUUNVX01JU0NfQ0JSRVhQX0JDTl9ESVMpOwogCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsICgoQVI1S19UVU5FX0JFQUNPTl9JTlRFUlZBTCAtCisJCQkJKEFSNUtfVFVORV9TV19CRUFDT05fUkVTUCAtCisJCQkJQVI1S19UVU5FX0RNQV9CRUFDT05fUkVTUCkgLQorCQkJCUFSNUtfVFVORV9BRERJVElPTkFMX1NXQkFfQkFDS09GRikgKiAxMDI0KSB8CisJCQkJQVI1S19RQ1VfUkRZVElNRUNGR19FTkFCTEUsCisJCQkJQVI1S19RVUVVRV9SRFlUSU1FQ0ZHKHF1ZXVlKSk7CisKIAkJCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1FVRVVFX0RGU19NSVNDKHF1ZXVlKSwKIAkJCQkoQVI1S19EQ1VfTUlTQ19BUkJMT0NLX0NUTF9HTE9CQUwgPDwKIAkJCQlBUjVLX0RDVV9NSVNDX0FSQkxPQ0tfQ1RMX1MpKTsKQEAgLTQxMyw2ICs0MzMsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQkvKiBUT0RPOiBIYW5kbGUgZnJhbWUgY29tcHJlc3Npb24gKi8KKwogCQkvKgogCQkgKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgdGhpcyB0eCBxdWV1ZQogCQkgKiBpbiB0aGUgc2Vjb25kYXJ5IGludGVycnVwdCBtYXNrIHJlZ2lzdGVycwpAQCAtNDgzLDYgKzUwNSw5IEBACiAJCSAqIGJ5IHNldHRpbmcgQVI1S19UWE5PRlJNIHRvIHplcm8gKi8KIAkJaWYgKGFoLT5haF90eHFfaW1yX25vZnJtID09IDApCiAJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfVFhOT0ZSTSk7CisKKwkJLyogU2V0IFFDVSBtYXNrIGZvciB0aGlzIERDVSB0byBzYXZlIHBvd2VyICovCisJCUFSNUtfUkVHX1dSSVRFX1EoYWgsIEFSNUtfUVVFVUVfUUNVTUFTSyhxdWV1ZSksIHF1ZXVlKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JlZy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKaW5kZXggOTE4OWFiMS4uNzA3MGQxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVnLmgKQEAgLTE4Nyw2ICsxODcsNyBAQAogI2RlZmluZSBBUjVLX1RYQ0ZHX0ZSTVBBRF9ESVMJCTB4MDAwMDIwMDAJLyogWzUyMTErXSAqLwogI2RlZmluZSBBUjVLX1RYQ0ZHX1JEWV9DQlJfRElTCQkweDAwMDA0MDAwCS8qIFJlYWR5IHRpbWUgQ0JSIGRpc2FibGUgWzUyMTErXSAqLwogI2RlZmluZSBBUjVLX1RYQ0ZHX0pVTUJPX0ZSTV9NT0RFCTB4MDAwMDgwMDAJLyogSnVtYm8gZnJhbWUgbW9kZSBbNTIxMStdICovCisjZGVmaW5lCUFSNUtfVFhDRkdfRENVX0RCTF9CVUZfRElTCTB4MDAwMDgwMDAJLyogRGlzYWJsZSBkb3VibGUgYnVmZmVyaW5nIG9uIERDVSAqLwogI2RlZmluZSBBUjVLX1RYQ0ZHX0RDVV9DQUNISU5HX0RJUwkweDAwMDEwMDAwCS8qIERpc2FibGUgRENVIGNhY2hpbmcgKi8KIAogLyoKQEAgLTc1Myw3ICs3NTQsNyBAQAogICovCiAjZGVmaW5lIEFSNUtfRENVX1NFUU5VTV9CQVNFCQkweDExNDAKICNkZWZpbmUJQVI1S19EQ1VfU0VRTlVNX00JCTB4MDAwMDBmZmYKLSNkZWZpbmUJQVI1S19RVUVVRV9ERlNfU0VRTlVNKF9xKQlBUjVLX1FVRVVFX1JFRyhBUjVLX0RDVV9TRVFOVU1fQkFTRSwgX3EpCisjZGVmaW5lCUFSNUtfUVVFVUVfRENVX1NFUU5VTShfcSkJQVI1S19RVUVVRV9SRUcoQVI1S19EQ1VfU0VRTlVNX0JBU0UsIF9xKQogCiAvKgogICogRENVIGdsb2JhbCBJRlMgU0lGUyByZWdpc3RlcgpAQCAtODExLDYgKzgxMiw4IEBACiAKIC8qCiAgKiBEQ1UgdHJhbnNtaXQgZmlsdGVyIHRhYmxlIDAgKDMyIGVudHJpZXMpCisgKiBlYWNoIGVudHJ5IGNvbnRhaW5zIGEgMzJiaXQgc2xpY2Ugb2YgdGhlCisgKiAxMjhiaXQgdHggZmlsdGVyIGZvciBlYWNoIERDVSAoNCBzbGljZXMgcGVyIERDVSkKICAqLwogI2RlZmluZSBBUjVLX0RDVV9UWF9GSUxURVJfMF9CQVNFCTB4MTAzOAogI2RlZmluZQlBUjVLX0RDVV9UWF9GSUxURVJfMChfbikJKEFSNUtfRENVX1RYX0ZJTFRFUl8wX0JBU0UgKyAoX24gKiA2NCkpCkBAIC04MTksNyArODIyLDcgQEAKICAqIERDVSB0cmFuc21pdCBmaWx0ZXIgdGFibGUgMSAoMTYgZW50cmllcykKICAqLwogI2RlZmluZSBBUjVLX0RDVV9UWF9GSUxURVJfMV9CQVNFCTB4MTAzYwotI2RlZmluZQlBUjVLX0RDVV9UWF9GSUxURVJfMShfbikJKEFSNUtfRENVX1RYX0ZJTFRFUl8xX0JBU0UgKyAoKF9uIC0gMzIpICogNjQpKQorI2RlZmluZQlBUjVLX0RDVV9UWF9GSUxURVJfMShfbikJKEFSNUtfRENVX1RYX0ZJTFRFUl8xX0JBU0UgKyAoX24gKiA2NCkpCiAKIC8qCiAgKiBEQ1UgY2xlYXIgdHJhbnNtaXQgZmlsdGVyIHJlZ2lzdGVyCkBAIC0xNDQ3LDcgKzE0NTAsNyBAQAogCQkJCUFSNUtfVFNGX1UzMl81MjEwIDogQVI1S19UU0ZfVTMyXzUyMTEpCiAKIC8qCi0gKiBMYXN0IGJlYWNvbiB0aW1lc3RhbXAgcmVnaXN0ZXIKKyAqIExhc3QgYmVhY29uIHRpbWVzdGFtcCByZWdpc3RlciAoUmVhZCBPbmx5KQogICovCiAjZGVmaW5lIEFSNUtfTEFTVF9UU1RQCTB4ODA4MAogCkBAIC0xNDY1LDcgKzE0NjgsNyBAQAogI2RlZmluZSBBUjVLX0FEREFDX1RFU1RfVFJJR19QVFkJMHgwMDAyMDAwMAkvKiBUcmlnZ2VyIHBvbGFyaXR5ICovCiAjZGVmaW5lIEFSNUtfQUREQUNfVEVTVF9SWENPTlQJCTB4MDAwNDAwMDAJLyogQ29udGludW91cyBjYXB0dXJlICovCiAjZGVmaW5lIEFSNUtfQUREQUNfVEVTVF9DQVBUVVJFCQkweDAwMDgwMDAwCS8qIEJlZ2luIGNhcHR1cmUgKi8KLSNkZWZpbmUgQVI1S19BRERBQ19URVNUX1RTVF9BUk0JCTB4MDAxMDAwMDAJLyogVGVzdCBBUk0gKEFkYXB0aXZlIFJhZGlvIE1vZGUgPykgKi8KKyNkZWZpbmUgQVI1S19BRERBQ19URVNUX1RTVF9BUk0JCTB4MDAxMDAwMDAJLyogQVJNIHJ4IGJ1ZmZlciBmb3IgY2FwdHVyZSAqLwogCiAvKgogICogRGVmYXVsdCBhbnRlbm5hIHJlZ2lzdGVyIFs1MjExK10KQEAgLTE1NTEsNiArMTU1NCwxOSBAQAogLyo9PT01MjEyIFNwZWNpZmljIFBDVSByZWdpc3RlcnM9PT0qLwogCiAvKgorICogVHJhbnNtaXQgcG93ZXIgY29udHJvbCByZWdpc3RlcgorICovCisjZGVmaW5lIEFSNUtfVFBDCQkJMHg4MGU4CisjZGVmaW5lIEFSNUtfVFBDX0FDSwkJCTB4MDAwMDAwM2YJLyogYWNrIGZyYW1lcyAqLworI2RlZmluZSBBUjVLX1RQQ19BQ0tfUwkJCTAKKyNkZWZpbmUgQVI1S19UUENfQ1RTCQkJMHgwMDAwM2YwMAkvKiBjdHMgZnJhbWVzICovCisjZGVmaW5lIEFSNUtfVFBDX0NUU19TCQkJOAorI2RlZmluZSBBUjVLX1RQQ19DSElSUAkJCTB4MDAzZjAwMDAJLyogY2hpcnAgZnJhbWVzICovCisjZGVmaW5lIEFSNUtfVFBDX0NISVJQX1MJCTE2CisjZGVmaW5lIEFSNUtfVFBDX0RPUFBMRVIJCTB4MGYwMDAwMDAJLyogZG9wcGxlciBjaGlycCBzcGFuICovCisjZGVmaW5lIEFSNUtfVFBDX0RPUFBMRVJfUwkJMjQKKworLyoKICAqIFhSIChlWHRlbmRlZCBSYW5nZSkgbW9kZSByZWdpc3RlcgogICovCiAjZGVmaW5lIEFSNUtfWFJNT0RFCQkJMHg4MGMwCQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwpAQCAtMTY3Nyw3ICsxNjkzLDcgQEAKICAqIFRTRiBwYXJhbWV0ZXIgcmVnaXN0ZXIKICAqLwogI2RlZmluZSBBUjVLX1RTRl9QQVJNCQkJMHg4MTA0CQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwotI2RlZmluZSBBUjVLX1RTRl9QQVJNX0lOQ19NCQkweDAwMDAwMGZmCS8qIE1hc2sgZm9yIFRTRiBpbmNyZW1lbnQgKi8KKyNkZWZpbmUgQVI1S19UU0ZfUEFSTV9JTkMJCTB4MDAwMDAwZmYJLyogTWFzayBmb3IgVFNGIGluY3JlbWVudCAqLwogI2RlZmluZSBBUjVLX1RTRl9QQVJNX0lOQ19TCQkwCiAKIC8qCkBAIC0xNjg5LDcgKzE3MDUsNyBAQAogI2RlZmluZSBBUjVLX1FPU19OT0FDS19CSVRfT0ZGU0VUCTB4MDAwMDAwNzAJLyogPz8/ICovCiAjZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JJVF9PRkZTRVRfUwk0CiAjZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUCTB4MDAwMDAxODAJLyogPz8/ICovCi0jZGVmaW5lIEFSNUtfUU9TX05PQUNLX0JZVEVfT0ZGU0VUX1MJOAorI2RlZmluZSBBUjVLX1FPU19OT0FDS19CWVRFX09GRlNFVF9TCTcKIAogLyoKICAqIFBIWSBlcnJvciBmaWx0ZXIgcmVnaXN0ZXIKQEAgLTE4NDgsMTUgKzE4NjQsMTQgQEAKICAqIFRTVF8yIChNaXNjIGNvbmZpZyBwYXJhbWV0ZXJzKQogICovCiAjZGVmaW5lCUFSNUtfUEhZX1RTVDIJCQkweDk4MDAJCQkvKiBSZWdpc3RlciBBZGRyZXNzICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfVFJJR19TRUwJCTB4MDAwMDAwMDEJLyogVHJpZ2dlciBzZWxlY3QgKD8pIChmaWVsZCA/KSAqLwotI2RlZmluZSBBUjVLX1BIWV9UU1QyX1RSSUcJCTB4MDAwMDAwMTAJLyogVHJpZ2dlciAoPykgKGZpZWxkID8pICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0JVU19NT0RFCQkweDAwMDAwMTAwCS8qIENhcmRidXMgbW9kZSAoPykgKi8KLS8qIGJpdCByZXNlcnZlZCAqLworI2RlZmluZSBBUjVLX1BIWV9UU1QyX1RSSUdfU0VMCQkweDAwMDAwMDA3CS8qIFRyaWdnZXIgc2VsZWN0ICg/KSovCisjZGVmaW5lIEFSNUtfUEhZX1RTVDJfVFJJRwkJMHgwMDAwMDAxMAkvKiBUcmlnZ2VyICg/KSAqLworI2RlZmluZSBBUjVLX1BIWV9UU1QyX0NCVVNfTU9ERQkJMHgwMDAwMDA2MAkvKiBDYXJkYnVzIG1vZGUgKD8pICovCiAjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0xLMzIJCTB4MDAwMDA0MDAJLyogQ0xLX09VVCBpcyBDTEszMiAoMzJLaHogZXh0ZXJuYWwpICovCiAjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQ0hBTkNPUl9EVU1QX0VOCTB4MDAwMDA4MDAJLyogRW5hYmxlIENoYW5jb3IgZHVtcCAoPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9FVkVOX0NIQU5DT1JfRFVNUAkweDAwMDAxMDAwCS8qIEV2ZW4gQ2hhbmNvciBkdW1wICg/KSAqLwogI2RlZmluZSBBUjVLX1BIWV9UU1QyX1JGU0lMRU5UX0VOCTB4MDAwMDIwMDAJLyogRW5hYmxlIFJGU0lMRU5UICovCi0jZGVmaW5lIEFSNUtfUEhZX1RTVDJfQUxUX1JGREFUQQkweDAwMDA0MDAwCS8qIEFsdGVybmF0ZSBSRkRBVEEgKDUtMkdIeiBzd2l0Y2gpICovCisjZGVmaW5lIEFSNUtfUEhZX1RTVDJfQUxUX1JGREFUQQkweDAwMDA0MDAwCS8qIEFsdGVybmF0ZSBSRkRBVEEgKDUtMkdIeiBzd2l0Y2ggPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9NSU5JX09CU19FTgkweDAwMDA4MDAwCS8qIEVuYWJsZSBtaW5pIE9CUyAoPykgKi8KICNkZWZpbmUgQVI1S19QSFlfVFNUMl9SWDJfSVNfUlg1X0lOVgkweDAwMDEwMDAwCS8qIDJHSHogcnggcGF0aCBpcyB0aGUgNUdIeiBwYXRoIGludmVydGVkICg/KSAqLwogI2RlZmluZSBBUjVLX1BIWV9UU1QyX1NMT1dfQ0xLMTYwCTB4MDAwMjAwMDAJLyogU2xvdyBDTEsxNjAgKD8pICovCkBAIC0xOTI2LDggKzE5NDEsOCBAQAogI2RlZmluZQlBUjVLX1BIWV9SRl9DVEwyX1RYRjJUWERfU1RBUlRfUwkwCiAKICNkZWZpbmUgQVI1S19QSFlfUkZfQ1RMMwkJMHg5ODI4CQkJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLwotI2RlZmluZSBBUjVLX1BIWV9SRl9DVEwzX1RYRTJYTE5BX09OCTB4MDAwMDAwMGYJLyogVFggZW5kIHRvIFhMTkEgb24gKi8KLSNkZWZpbmUJQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTl9TCTAKKyNkZWZpbmUgQVI1S19QSFlfUkZfQ1RMM19UWEUyWExOQV9PTgkweDAwMDBmZjAwCS8qIFRYIGVuZCB0byBYTE5BIG9uICovCisjZGVmaW5lCUFSNUtfUEhZX1JGX0NUTDNfVFhFMlhMTkFfT05fUwk4CiAKICNkZWZpbmUJQVI1S19QSFlfQURDX0NUTAkJCTB4OTgyYwogI2RlZmluZQlBUjVLX1BIWV9BRENfQ1RMX0lOQlVGR0FJTl9PRkYJCTB4MDAwMDAwMDMKQEAgLTE5NjEsNyArMTk3Niw3IEBACiAjZGVmaW5lCUFSNUtfUEhZX1NFVFRMSU5HX0FHQwkJMHgwMDAwMDA3ZgkvKiBBR0Mgc2V0dGxpbmcgdGltZSAqLwogI2RlZmluZQlBUjVLX1BIWV9TRVRUTElOR19BR0NfUwkJMAogI2RlZmluZQlBUjVLX1BIWV9TRVRUTElOR19TV0lUQ0gJMHgwMDAwM2Y4MAkvKiBTd2l0Y2ggc2V0dGxpZyB0aW1lICovCi0jZGVmaW5lCUFSNUtfUEhZX1NFVFRMSU5LX1NXSVRDSF9TCTcKKyNkZWZpbmUJQVI1S19QSFlfU0VUVExJTkdfU1dJVENIX1MJNwogCiAvKgogICogUEhZIEdhaW4gcmVnaXN0ZXJzCkBAIC0yMDY3LDE0ICsyMDgyLDE0IEBACiAgKiBQSFkgc2xlZXAgcmVnaXN0ZXJzIFs1MTEyK10KICAqLwogI2RlZmluZSBBUjVLX1BIWV9TQ1IJCQkweDk4NzAKLSNkZWZpbmUgQVI1S19QSFlfU0NSXzMyTUhaCQkweDAwMDAwMDFmCiAKICNkZWZpbmUgQVI1S19QSFlfU0xNVAkJCTB4OTg3NAogI2RlZmluZSBBUjVLX1BIWV9TTE1UXzMyTUhaCQkweDAwMDAwMDdmCiAKICNkZWZpbmUgQVI1S19QSFlfU0NBTAkJCTB4OTg3OAogI2RlZmluZSBBUjVLX1BIWV9TQ0FMXzMyTUhaCQkweDAwMDAwMDBlCi0KKyNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3CTB4MDAwMDAwMGEKKyNkZWZpbmUJQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzCTB4MDAwMDAwMzIKIAogLyoKICAqIFBIWSBQTEwgKFBoYXNlIExvY2tlZCBMb29wKSBjb250cm9sIHJlZ2lzdGVyCkBAIC0yMTAxLDM0ICsyMTE2LDEwIEBACiAvKgogICogUkYgQnVmZmVyIHJlZ2lzdGVyCiAgKgotICogVGhlcmUgYXJlIHNvbWUgc3BlY2lhbCBjb250cm9sIHJlZ2lzdGVycyBvbiB0aGUgUkYgY2hpcAotICogdGhhdCBob2xkIHZhcmlvdXMgb3BlcmF0aW9uIHNldHRpbmdzIHJlbGF0ZWQgbW9zdGx5IHRvCi0gKiB0aGUgYW5hbG9nIHBhcnRzIChjaGFubmVsLCBnYWluIGFkanVzdG1lbnQgZXRjKS4KLSAqCi0gKiBXZSBkb24ndCB3cml0ZSBvbiB0aG9zZSByZWdpc3RlcnMgZGlyZWN0bHkgYnV0Ci0gKiB3ZSBzZW5kIGEgZGF0YSBwYWNrZXQgb24gdGhlIGJ1ZmZlciByZWdpc3RlciBhbmQKLSAqIHRoZW4gd3JpdGUgb24gYW5vdGhlciBzcGVjaWFsIHJlZ2lzdGVyIHRvIG5vdGlmeSBodwotICogdG8gYXBwbHkgdGhlIHNldHRpbmdzLiBUaGlzIGlzIGRvbmUgc28gdGhhdCBjb250cm9sIHJlZ2lzdGVycwotICogY2FuIGJlIGR5bmFtaWNhbHkgcHJvZ3JhbW1lZCBkdXJpbmcgb3BlcmF0aW9uIGFuZCB0aGUgc2V0dGluZ3MKLSAqIGFyZSBhcHBsaWVkIGZhc3RlciBvbiB0aGUgaHcuCi0gKgotICogV2Ugc2VudCBzdWNoIGRhdGEgcGFja2V0cyBkdXJpbmcgcmYgaW5pdGlhbGl6YXRpb24gYW5kIGNoYW5uZWwgY2hhbmdlCi0gKiB0aHJvdWdoIGF0aDVrX2h3X3JmKl9yZnJlZ3MgYW5kIGF0aDVrX2h3X3JmKl9jaGFubmVsIGZ1bmN0aW9ucy4KLSAqCi0gKiBUaGUgZGF0YSBwYWNrZXRzIHdlIHNlbmQgZHVyaW5nIGluaXRpYWxpemFkaW9uIGFyZSBpbnNpZGUgYXRoNWtfaW5pX3JmCi0gKiBzdHJ1Y3QgKHNlZSBhdGg1a19ody5oKSBhbmQgZWFjaCBvbmUgaXMgcmVsYXRlZCB0byBhbiAicmYgcmVnaXN0ZXIgYmFuayIuCi0gKiBXZSB1c2UgKnJmcmVncyBmdW5jdGlvbnMgdG8gbW9kaWZ5IHRoZW0gIGFjb3JkaW5nIHRvIGN1cnJlbnQgb3BlcmF0aW9uCi0gKiBtb2RlIGFuZCBlZXByb20gdmFsdWVzIGFuZCBwYXNzIHRoZW0gYWxsIHRvZ2V0aGVyIHRvIHRoZSBjaGlwLgotICoKICAqIEl0J3Mgb2J2aW91cyBmcm9tIHRoZSBjb2RlIHRoYXQgMHg5ODljIGlzIHRoZSBidWZmZXIgcmVnaXN0ZXIgYnV0CiAgKiBmb3IgdGhlIG90aGVyIHNwZWNpYWwgcmVnaXN0ZXJzIHRoYXQgd2Ugd3JpdGUgdG8gYWZ0ZXIgc2VuZGluZyBlYWNoCiAgKiBwYWNrZXQsIGkgaGF2ZSBubyBpZGVhLiBTbyBpJ2xsIG5hbWUgdGhlbSBCVUZGRVJfQ09OVFJPTF9YIHJlZ2lzdGVycwogICogZm9yIG5vdy4gSXQncyBpbnRlcmVzdGluZyB0aGF0IHRoZXkgYXJlIGFsc28gdXNlZCBmb3Igc29tZSBvdGhlciBvcGVyYXRpb25zLgotICoKLSAqIEFsc28gY2hlY2sgb3V0IGh3LmggYW5kIFUuUy4gUGF0ZW50IDY2Nzc3NzkgQjEgKGFib3V0IGJ1ZmZlcgotICogcmVnaXN0ZXJzIGFuZCBjb250cm9sIHJlZ2lzdGVycyk6Ci0gKgotICogaHR0cDovL3d3dy5nb29nbGUuY29tL3BhdGVudHM/aWQ9cU5VUkFBQUFFQkFKCiAgKi8KIAogI2RlZmluZSBBUjVLX1JGX0JVRkZFUgkJCTB4OTg5YwpAQCAtMjE3OCw3ICsyMTY5LDggQEAKICNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9UWFJYX0VOCTB4MDAwMDAwMDEJLyogRW5hYmxlIFRYL1JYICg/KSAqLwogI2RlZmluZQlBUjVLX1BIWV9BTlRfQ1RMX1NFQ1RPUkVEX0FOVAkweDAwMDAwMDA0CS8qIFNlY3RvcmVkIEFudGVubmEgKi8KICNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9ISVRVTkU1CTB4MDAwMDAwMDgJLyogSGl0dW5lNSAoPykgKi8KLSNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUJMHgwMDAwMDAxMAkvKiBTd2l0Y2ggdGFibGUgaWRsZSAoPykgKi8KKyNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUJMHgwMDAwMDNmMAkvKiBTd2l0Y2ggdGFibGUgaWRsZSAoPykgKi8KKyNkZWZpbmUJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEVfUwk0CiAKIC8qCiAgKiBQSFkgcmVjZWl2ZXIgZGVsYXkgcmVnaXN0ZXIgWzUxMTErXQpAQCAtMjIxOCw3ICsyMjEwLDcgQEAKICNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUgkJCTB4OTkyNAkJCS8qIFJlZ2lzdGVyIEFkZHJlc3MgKi8KICNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxX0VOCTB4MDAwMDAwMDEJLyogRW5hYmxlIGN5Y2xpYyBSU1NJIHRociAxICovCiAjZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMQkweDAwMDAwMGZlCS8qIE1hc2sgZm9yIEN5Y2xpYyBSU1NJIHRocmVzaG9sZCAxICovCi0jZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfQ1lQV1JfVEhSMV9TCTAKKyNkZWZpbmUJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxX1MJMQogI2RlZmluZQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX0NZUFdSX1RIUjMJMHgwMDAwMDEwMAkvKiBDeWNsaWMgUlNTSSB0aHJlc2hvbGQgMyAoZmllbGQpICg/KSAqLwogI2RlZmluZQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX1JTU0lfMUFUSFJfRU4JMHgwMDAwODAwMAkvKiBFbmFibGUgMUEgUlNTSSB0aHJlc2hvbGQgKD8pICovCiAjZGVmaW5lCUFSNUtfUEhZX09GRE1fU0VMRkNPUlJfUlNTSV8xQVRIUgkweDAwMDEwMDAwCS8qIDFBIFJTU0kgdGhyZXNob2xkIChmaWVsZCkgKD8pICovCkBAIC0yMjQzLDkgKzIyMzUsNyBAQAogI2RlZmluZQlBUjVLX1BIWV9DVExfTE9XX0ZSRVFfU0xFX0VOCTB4MDAwMDAwODAJLyogRW5hYmxlIGxvdyBmcmVxIHNsZWVwICovCiAKIC8qCi0gKiBQSFkgUEFQRCBwcm9iZSByZWdpc3RlciBbNTExMSsgKD8pXQotICogSXMgdGhpcyBvbmx5IHByZXNlbnQgaW4gNTIxMiA/Ci0gKiBCZWNhdXNlIGl0J3MgYWx3YXlzIDAgaW4gNTIxMSBpbml0aWFsaXphdGlvbiBjb2RlCisgKiBQSFkgUEFQRCBwcm9iZSByZWdpc3RlciBbNTExMStdCiAgKi8KICNkZWZpbmUJQVI1S19QSFlfUEFQRF9QUk9CRQkJMHg5OTMwCiAjZGVmaW5lCUFSNUtfUEhZX1BBUERfUFJPQkVfU0hfSElfUEFSCTB4MDAwMDAwMDEKQEAgLTIzMDMsNiArMjI5MywxNSBAQAogCQkJQVI1S19QSFlfRlJBTUVfQ1RMX1RJTUlOR19FUlIKIAogLyoKKyAqIFBIWSBUeCBQb3dlciBhZGp1c3RtZW50IHJlZ2lzdGVyIFs1MjEyQStdCisgKi8KKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESgkJCTB4OTk0YworI2RlZmluZQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19HQUlOX0RFTFRBCTB4MDAwMDBmYzAKKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfR0FJTl9ERUxUQV9TCTYKKyNkZWZpbmUJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfUENEQUNfSU5ERVgJMHgwMGZjMDAwMAorI2RlZmluZQlBUjVLX1BIWV9UWF9QV1JfQURKX0NDS19QQ0RBQ19JTkRFWF9TCTE4CisKKy8qCiAgKiBQSFkgcmFkYXIgZGV0ZWN0aW9uIHJlZ2lzdGVyIFs1MTExK10KICAqLwogI2RlZmluZQlBUjVLX1BIWV9SQURBUgkJCTB4OTk1NApAQCAtMjM1NSw3ICsyMzU0LDcgQEAKICNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfRklMVDJfUwkzCiAjZGVmaW5lIEFSNUtfUEhZX1NJR01BX0RFTFRBX0ZJTFQxCTB4MDAwMDFmMDAKICNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfRklMVDFfUwk4Ci0jZGVmaW5lIEFSNUtfUEhZX1NJR01BX0RFTFRBX0FEQ19DTElQCTB4MDFmZjMwMDAKKyNkZWZpbmUgQVI1S19QSFlfU0lHTUFfREVMVEFfQURDX0NMSVAJMHgwMWZmZTAwMAogI2RlZmluZSBBUjVLX1BIWV9TSUdNQV9ERUxUQV9BRENfQ0xJUF9TCTEzCiAKIC8qCkBAIC0yMzg3LDIxICsyMzg2LDIxIEBACiAjZGVmaW5lIEFSNUtfUEhZX0JJTl9NQVNLMl80X01BU0tfNAkweDAwMDAzZmZmCiAjZGVmaW5lIEFSNUtfUEhZX0JJTl9NQVNLMl80X01BU0tfNF9TCTAKIAotI2RlZmluZSBBUl9QSFlfVElNSU5HXzkJCQkweDk5OTgKLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMAkJMHg5OTljCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTBfUElMT1RfTUFTS18yCTB4MDAwZmZmZmYKLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMF9QSUxPVF9NQVNLXzJfUwkwCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR185CQkJMHg5OTk4CisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMAkJCTB4OTk5YworI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTBfUElMT1RfTUFTS18yCQkweDAwMGZmZmZmCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMF9QSUxPVF9NQVNLXzJfUwkwCiAKIC8qCiAgKiBTcHVyIG1pdGlnYXRpb24gY29udHJvbAogICovCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTEJCQkweDk5YTAJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMV9TUFVSX0RFTFRBX1BIQVNFCTB4MDAwZmZmZmYJLyogU3B1ciBkZWx0YSBwaGFzZSAqLwotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1NQVVJfREVMVEFfUEhBU0VfUwkwCi0jZGVmaW5lIEFSX1BIWV9USU1JTkdfMTFfU1BVUl9GUkVRX1NECQkweDNmZjAwMDAwCS8qIEZyZXEgc2lnbWEgZGVsdGEgKi8KLSNkZWZpbmUgQVJfUEhZX1RJTUlOR18xMV9TUFVSX0ZSRVFfU0RfUwkyMAotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX0FHQwkweDQwMDAwMDAwCS8qIFNwdXIgZmlsdGVyIGluIEFHQyBkZXRlY3RvciAqLwotI2RlZmluZSBBUl9QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX1NFTEZDT1IJMHg4MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBPRkRNIHNlbGYgY29ycmVsYXRvciAqLworI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTEJCQkweDk5YTAJCS8qIFJlZ2lzdGVyIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1NQVVJfREVMVEFfUEhBU0UJMHgwMDBmZmZmZgkvKiBTcHVyIGRlbHRhIHBoYXNlICovCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMV9TUFVSX0RFTFRBX1BIQVNFX1MJMAorI2RlZmluZSBBUjVLX1BIWV9USU1JTkdfMTFfU1BVUl9GUkVRX1NECQkweDNmZjAwMDAwCS8qIEZyZXEgc2lnbWEgZGVsdGEgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1NQVVJfRlJFUV9TRF9TCTIwCisjZGVmaW5lIEFSNUtfUEhZX1RJTUlOR18xMV9VU0VfU1BVUl9JTl9BR0MJMHg0MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBBR0MgZGV0ZWN0b3IgKi8KKyNkZWZpbmUgQVI1S19QSFlfVElNSU5HXzExX1VTRV9TUFVSX0lOX1NFTEZDT1IJMHg4MDAwMDAwMAkvKiBTcHVyIGZpbHRlciBpbiBPRkRNIHNlbGYgY29ycmVsYXRvciAqLwogCiAvKgogICogR2FpbiB0YWJsZXMKQEAgLTI0ODMsMTcgKzI0ODIsNyBAQAogI2RlZmluZSBBUjVLX1BIWV9TREVMQVkJCQkweDk5ZjQKICNkZWZpbmUgQVI1S19QSFlfU0RFTEFZXzMyTUhaCQkweDAwMDAwMGZmCiAjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HCQkweDk5ZjgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfMTQJCTB4MDAwMDAwMTQKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfMTgJCTB4MDAwMDAwMTgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTExCTB4MDAwMDAwMTgKLSNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyCTB4MDAwMDAwMTQKLS8qICNkZWZpbmUgQVI1S19QSFlfU1BFTkRJTkdfUkY1MTEyQQkweDAwMDAwMDBlICovCi0vKiAjZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQyNAkweDAwMDAwMDEyICovCi0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGNTQxMwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQxMwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjMxNgkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjMxNwkweDAwMDAwMDE4Ci0jZGVmaW5lIEFSNUtfUEhZX1NQRU5ESU5HX1JGMjQyNQkweDAwMDAwMDE0CisKIAogLyoKICAqIFBIWSBQQVBEIEkgKHBvd2VyPykgdGFibGUgKD8pCkBAIC0yNTA1LDExICsyNDk0LDcgQEAKIC8qCiAgKiBQSFkgUENEQUMgVFggcG93ZXIgdGFibGUKICAqLwotI2RlZmluZQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfNTIxMQkweGExODAKLSNkZWZpbmUgQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFXzI0MTMJMHhhMjgwCi0jZGVmaW5lIEFSNUtfUEhZX1BDREFDX1RYUE9XRVJfQkFTRQkoYWgtPmFoX3JhZGlvID49IEFSNUtfUkYyNDEzID8gXAotCQkJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfMjQxMyA6XAotCQkJCQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSX0JBU0VfNTIxMSkKKyNkZWZpbmUJQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFCTB4YTE4MAogI2RlZmluZQlBUjVLX1BIWV9QQ0RBQ19UWFBPV0VSKF9uKQkoQVI1S19QSFlfUENEQUNfVFhQT1dFUl9CQVNFICsgKChfbikgPDwgMikpCiAKIC8qCkBAIC0yNTc4LDYgKzI1NjMsMTIgQEAKICNkZWZpbmUJQVI1S19QSFlfVFBDX1JHMQkJMHhhMjU4CiAjZGVmaW5lCUFSNUtfUEhZX1RQQ19SRzFfTlVNX1BEX0dBSU4JMHgwMDAwYzAwMAogI2RlZmluZQlBUjVLX1BIWV9UUENfUkcxX05VTV9QRF9HQUlOX1MJMTQKKyNkZWZpbmUgQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMQkweDAwMDMwMDAwCisjZGVmaW5lIEFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzFfUwkxNgorI2RlZmluZSBBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8yCTB4MDAwYzAwMDAKKyNkZWZpbmUgQVI1S19QSFlfVFBDX1JHMV9QREdBSU5fMl9TCTE4CisjZGVmaW5lIEFSNUtfUEhZX1RQQ19SRzFfUERHQUlOXzMJMHgwMDMwMDAwMAorI2RlZmluZSBBUjVLX1BIWV9UUENfUkcxX1BER0FJTl8zX1MJMjAKIAogI2RlZmluZQlBUjVLX1BIWV9UUENfUkc1CQkJMHhhMjZDCiAjZGVmaW5lCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9PVkVSTEFQCTB4MDAwMDAwMEYKQEAgLTI1OTAsMyArMjU4MSw5IEBACiAjZGVmaW5lCUFSNUtfUEhZX1RQQ19SRzVfUERfR0FJTl9CT1VOREFSWV8zX1MJMTYKICNkZWZpbmUJQVI1S19QSFlfVFBDX1JHNV9QRF9HQUlOX0JPVU5EQVJZXzQJMHgwRkMwMDAwMAogI2RlZmluZQlBUjVLX1BIWV9UUENfUkc1X1BEX0dBSU5fQk9VTkRBUllfNF9TCTIyCisKKy8qCisgKiBQSFkgUERBREMgVHggcG93ZXIgdGFibGUKKyAqLworI2RlZmluZSBBUjVLX1BIWV9QREFEQ19UWFBPV0VSX0JBU0UJMHhhMjgwCisjZGVmaW5lCUFSNUtfUEhZX1BEQURDX1RYUE9XRVIoX24pCShBUjVLX1BIWV9QREFEQ19UWFBPV0VSX0JBU0UgKyAoKF9uKSA8PCAyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZXNldC5jCmluZGV4IGRjMmQ3ZDguLjdhMTdkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3Jlc2V0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmVzZXQuYwpAQCAtMjUsNyArMjUsOCBAQAogICBSZXNldCBmdW5jdGlvbnMgYW5kIGhlbHBlcnMKIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPiAJCS8qIFRvIGRldGVybWluZSBpZiBhIGNhcmQgaXMgcGNpLWUgKi8KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4JLyogRm9yIGdldF9iaXRtYXNrX29yZGVyICovCiAjaW5jbHVkZSAiYXRoNWsuaCIKICNpbmNsdWRlICJyZWcuaCIKICNpbmNsdWRlICJiYXNlLmgiCkBAIC0zNywxMCArMzgsMTQgQEAKICAqIEBhaDogdGhlICZzdHJ1Y3QgYXRoNWtfaHcKICAqIEBjaGFubmVsOiB0aGUgY3VycmVudGx5IHNldCBjaGFubmVsIHVwb24gcmVzZXQKICAqCi0gKiBXcml0ZSB0aGUgT0ZETSB0aW1pbmdzIGZvciB0aGUgQVI1MjEyIHVwb24gcmVzZXQuIFRoaXMgaXMgYSBoZWxwZXIgZm9yCi0gKiBhdGg1a19od19yZXNldCgpLiBUaGlzIHNlZW1zIHRvIHR1bmUgdGhlIFBMTCBhIHNwZWNpZmllZCBmcmVxdWVuY3kKLSAqIGRlcGVuZGluZyBvbiB0aGUgYmFuZHdpZHRoIG9mIHRoZSBjaGFubmVsLgorICogV3JpdGUgdGhlIGRlbHRhIHNsb3BlIGNvZWZmaWNpZW50ICh1c2VkIG9uIHBpbG90IHRyYWNraW5nID8pIGZvciBPRkRNCisgKiBvcGVyYXRpb24gb24gdGhlIEFSNTIxMiB1cG9uIHJlc2V0LiBUaGlzIGlzIGEgaGVscGVyIGZvciBhdGg1a19od19yZXNldCgpLgogICoKKyAqIFNpbmNlIGRlbHRhIHNsb3BlIGlzIGZsb2F0aW5nIHBvaW50IHdlIHNwbGl0IGl0IG9uIGl0cyBleHBvbmVudCBhbmQKKyAqIG1hbnRpc3NhIGFuZCBwcm92aWRlIHRoZXNlIHZhbHVlcyBvbiBody4KKyAqCisgKiBGb3IgbW9yZSBpbmZvcyBpIHRoaW5rIHRoaXMgcGF0ZW50IGlzIHJlbGF0ZWQKKyAqIGh0dHA6Ly93d3cuZnJlZXBhdGVudHNvbmxpbmUuY29tLzcxODQ0OTUuaHRtbAogICovCiBzdGF0aWMgaW5saW5lIGludCBhdGg1a19od193cml0ZV9vZmRtX3RpbWluZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCkBAIC01MywyMyArNTgsMzQgQEAKIAkJIShjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfT0ZETSkpCiAJCUJVRygpOwogCi0JLyogU2VlbXMgdGhlcmUgYXJlIHR3byBQTExzLCBvbmUgZm9yIGJhc2ViYW5kIHNhbXBsaW5nIGFuZCBvbmUKLQkgKiBmb3IgdHVuaW5nLiBUdW5pbmcgYmFzZWJhbmRzIGFyZSA0MCBNSHogb3IgODBNSHogd2hlbiBpbgotCSAqIHR1cmJvLiAqLwotCWNsb2NrID0gY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPID8gODAgOiA0MDsKLQljb2VmX3NjYWxlZCA9ICgoNSAqIChjbG9jayA8PCAyNCkpIC8gMikgLwotCWNoYW5uZWwtPmNlbnRlcl9mcmVxOworCS8qIEdldCBjb2VmZmljaWVudAorCSAqIEFMR086IGNvZWYgPSAoNSAqIGNsb2NrICogY2Fycmllcl9mcmVxKSAvIDIpCisJICogd2Ugc2NhbGUgY29lZiBieSBzaGlmdGluZyBjbG9jayB2YWx1ZSBieSAyNCBmb3IKKwkgKiBiZXR0ZXIgcHJlY2lzaW9uIHNpbmNlIHdlIHVzZSBpbnRlZ2VycyAqLworCS8qIFRPRE86IEhhbGYvcXVhcnRlciByYXRlICovCisJY2xvY2sgPSAgYXRoNWtfaHdfaHRvY2xvY2soMSwgY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPKTsKIAotCWZvciAoY29lZl9leHAgPSAzMTsgY29lZl9leHAgPiAwOyBjb2VmX2V4cC0tKQotCQlpZiAoKGNvZWZfc2NhbGVkID4+IGNvZWZfZXhwKSAmIDB4MSkKLQkJCWJyZWFrOworCWNvZWZfc2NhbGVkID0gKCg1ICogKGNsb2NrIDw8IDI0KSkgLyAyKSAvIGNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCisJLyogR2V0IGV4cG9uZW50CisJICogQUxHTzogY29lZl9leHAgPSAxNCAtIGhpZ2hlc3Qgc2V0IGJpdCBwb3NpdGlvbiAqLworCWNvZWZfZXhwID0gZ2V0X2JpdG1hc2tfb3JkZXIoY29lZl9zY2FsZWQpOworCisJLyogRG9lc24ndCBtYWtlIHNlbnNlIGlmIGl0J3MgemVybyovCiAJaWYgKCFjb2VmX2V4cCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBOb3RlOiB3ZSd2ZSBzaGlmdGVkIGNvZWZfc2NhbGVkIGJ5IDI0ICovCiAJY29lZl9leHAgPSAxNCAtIChjb2VmX2V4cCAtIDI0KTsKKworCisJLyogR2V0IG1hbnRpc3NhIChzaWduaWZpY2FudCBkaWdpdHMpCisJICogQUxHTzogY29lZl9tYW50ID0gZmxvb3IoY29lZl9zY2FsZWQqIDJeY29lZl9leHArMC41KSAqLwogCWNvZWZfbWFuID0gY29lZl9zY2FsZWQgKwogCQkoMSA8PCAoMjQgLSBjb2VmX2V4cCAtIDEpKTsKKworCS8qIENhbGN1bGF0ZSBkZWx0YSBzbG9wZSBjb2VmZmljaWVudCBleHBvbmVudAorCSAqIGFuZCBtYW50aXNzYSAocmVtb3ZlIHNjYWxpbmcpIGFuZCBzZXQgdGhlbSBvbiBodyAqLwogCWRzX2NvZWZfbWFuID0gY29lZl9tYW4gPj4gKDI0IC0gY29lZl9leHApOwogCWRzX2NvZWZfZXhwID0gY29lZl9leHAgLSAxNjsKIApAQCAtODYsMjAgKzEwMiwyNyBAQAogICogaW5kZXggaW50byByYXRlcyBmb3IgY29udHJvbCByYXRlcywgd2UgY2FuIHNldCBpdCB1cCBsaWtlIHRoaXMgYmVjYXVzZQogICogdGhpcyBpcyBvbmx5IHVzZWQgZm9yIEFSNTIxMiBhbmQgd2Uga25vdyBpdCBzdXBwb3J0cyBHIG1vZGUKICAqLwotc3RhdGljIGludCBjb250cm9sX3JhdGVzW10gPQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjb250cm9sX3JhdGVzW10gPQogCXsgMCwgMSwgMSwgMSwgNCwgNCwgNiwgNiwgOCwgOCwgOCwgOCB9OwogCiAvKioKLSAqIGF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24gLSBzZXQgcmF0ZSBkdXJhdGlvbiBkdXJpbmcgaHcgcmVzZXRzCisgKiBhdGg1a19od193cml0ZV9yYXRlX2R1cmF0aW9uIC0gZmlsbCByYXRlIGNvZGUgdG8gZHVyYXRpb24gdGFibGUKICAqCiAgKiBAYWg6IHRoZSAmc3RydWN0IGF0aDVrX2h3CiAgKiBAbW9kZTogb25lIG9mIGVudW0gYXRoNWtfZHJpdmVyX21vZGUKICAqCi0gKiBXcml0ZSB0aGUgcmF0ZSBkdXJhdGlvbiB0YWJsZSB1cG9uIGh3IHJlc2V0LiBUaGlzIGlzIGEgaGVscGVyIGZvcgotICogYXRoNWtfaHdfcmVzZXQoKS4gSXQgc2VlbXMgYWxsIHRoaXMgaXMgZG9pbmcgaXMgc2V0dGluZyBhbiBBQ0sgdGltZW91dCBmb3IKLSAqIHRoZSBoYXJkd2FyZSBmb3IgdGhlIGN1cnJlbnQgbW9kZSBmb3IgZWFjaCByYXRlLiBUaGUgcmF0ZXMgd2hpY2ggYXJlIGNhcGFibGUKLSAqIG9mIHNob3J0IHByZWFtYmxlICg4MDIuMTFiIHJhdGVzIDJNYnBzLCA1LjVNYnBzLCBhbmQgMTFNYnBzKSBoYXZlIGFub3RoZXIKLSAqIHJlZ2lzdGVyIGZvciB0aGUgc2hvcnQgcHJlYW1ibGUgQUNLIHRpbWVvdXQgY2FsY3VsYXRpb24uCisgKiBXcml0ZSB0aGUgcmF0ZSBjb2RlIHRvIGR1cmF0aW9uIHRhYmxlIHVwb24gaHcgcmVzZXQuIFRoaXMgaXMgYSBoZWxwZXIgZm9yCisgKiBhdGg1a19od19yZXNldCgpLiBJdCBzZWVtcyBhbGwgdGhpcyBpcyBkb2luZyBpcyBzZXR0aW5nIGFuIEFDSyB0aW1lb3V0IG9uCisgKiB0aGUgaGFyZHdhcmUsIGJhc2VkIG9uIGN1cnJlbnQgbW9kZSwgZm9yIGVhY2ggcmF0ZS4gVGhlIHJhdGVzIHdoaWNoIGFyZQorICogY2FwYWJsZSBvZiBzaG9ydCBwcmVhbWJsZSAoODAyLjExYiByYXRlcyAyTWJwcywgNS41TWJwcywgYW5kIDExTWJwcykgaGF2ZQorICogZGlmZmVyZW50IHJhdGUgY29kZSBzbyB3ZSB3cml0ZSB0aGVpciB2YWx1ZSB0d2ljZSAob25lIGZvciBsb25nIHByZWFtcGxlCisgKiBhbmQgb25lIGZvciBzaG9ydCkuCisgKgorICogTm90ZTogQmFuZCBkb2Vzbid0IG1hdHRlciBoZXJlLCBpZiB3ZSBzZXQgdGhlIHZhbHVlcyBmb3IgT0ZETSBpdCB3b3JrcworICogb24gYm90aCBhIGFuZCBnIG1vZGVzLiBTbyBhbGwgd2UgaGF2ZSB0byBkbyBpcyBzZXQgdmFsdWVzIGZvciBhbGwgZyByYXRlcworICogdGhhdCBpbmNsdWRlIGFsbCBPRkRNIGFuZCBDQ0sgcmF0ZXMuIElmIHdlIG9wZXJhdGUgaW4gdHVyYm8gb3IgeHIvaGFsZi8KKyAqIHF1YXJ0ZXIgcmF0ZSBtb2RlLCB3ZSBuZWVkIHRvIHVzZSBhbm90aGVyIHNldCBvZiBiaXRyYXRlcyAodGhhdCdzIHdoeSB3ZQorICogbmVlZCB0aGUgbW9kZSBwYXJhbWV0ZXIpIGJ1dCB3ZSBkb24ndCBoYW5kbGUgdGhlc2UgcHJvcHJpZXRhcnkgbW9kZXMgeWV0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYXRoNWtfaHdfd3JpdGVfcmF0ZV9kdXJhdGlvbihzdHJ1Y3QgYXRoNWtfaHcgKmFoLAogICAgICAgIHVuc2lnbmVkIGludCBtb2RlKQpAQCAtMjc1LDcgKzI5OCw4IEBACiB9CiAKIC8qCi0gKiBCcmluZyB1cCBNQUMgKyBQSFkgQ2hpcHMKKyAqIEJyaW5nIHVwIE1BQyArIFBIWSBDaGlwcyBhbmQgcHJvZ3JhbSBQTEwKKyAqIFRPRE86IEhhbGYvUXVhcnRlciByYXRlIHN1cHBvcnQKICAqLwogaW50IGF0aDVrX2h3X25pY193YWtldXAoc3RydWN0IGF0aDVrX2h3ICphaCwgaW50IGZsYWdzLCBib29sIGluaXRpYWwpCiB7CkBAIC0zMzMsNyArMzU3LDExIEBACiAJCQl9CiAJCX0gZWxzZSBpZiAoZmxhZ3MgJiBDSEFOTkVMXzVHSFopIHsKIAkJCW1vZGUgfD0gQVI1S19QSFlfTU9ERV9GUkVRXzVHSFo7Ci0JCQljbG9jayB8PSBBUjVLX1BIWV9QTExfNDBNSFo7CisKKwkJCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpCisJCQkJY2xvY2sgfD0gQVI1S19QSFlfUExMXzQwTUhaXzU0MTM7CisJCQllbHNlCisJCQkJY2xvY2sgfD0gQVI1S19QSFlfUExMXzQwTUhaOwogCiAJCQlpZiAoZmxhZ3MgJiBDSEFOTkVMX09GRE0pCiAJCQkJbW9kZSB8PSBBUjVLX1BIWV9NT0RFX01PRF9PRkRNOwpAQCAtMzkxLDEwICs0MTksMTQgQEAKIAl9CiAKIAlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJLyogLi4uc2V0IHRoZSBQSFkgb3BlcmF0aW5nIG1vZGUgKi8KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBjbG9jaywgQVI1S19QSFlfUExMKTsKLQkJdWRlbGF5KDMwMCk7CiAKKwkJLyogLi4udXBkYXRlIFBMTCBpZiBuZWVkZWQgKi8KKwkJaWYgKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9QTEwpICE9IGNsb2NrKSB7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGNsb2NrLCBBUjVLX1BIWV9QTEwpOworCQkJdWRlbGF5KDMwMCk7CisJCX0KKworCQkvKiAuLi5zZXQgdGhlIFBIWSBvcGVyYXRpbmcgbW9kZSAqLwogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIG1vZGUsIEFSNUtfUEhZX01PREUpOwogCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHR1cmJvLCBBUjVLX1BIWV9UVVJCTyk7CiAJfQpAQCAtNDAzLDIyICs0MzUsMzk5IEBACiB9CiAKIC8qCisgKiBJZiB0aGVyZSBpcyBhbiBleHRlcm5hbCAzMktIeiBjcnlzdGFsIGF2YWlsYWJsZSwgdXNlIGl0CisgKiBhcyByZWYuIGNsb2NrIGluc3RlYWQgb2YgMzIvNDBNSHogY2xvY2sgYW5kIGJhc2ViYW5kIGNsb2NrcworICogdG8gc2F2ZSBwb3dlciBkdXJpbmcgc2xlZXAgb3IgcmVzdG9yZSBub3JtYWwgMzIvNDBNSHoKKyAqIG9wZXJhdGlvbi4KKyAqCisgKiBYWFg6IFdoZW4gb3BlcmF0aW5nIG9uIDMyS0h6IGNlcnRhaW4gUEhZIHJlZ2lzdGVycyAoMjcgLSAzMSwKKyAqIAkxMjMgLSAxMjcpIHJlcXVpcmUgZGVsYXkgb24gYWNjZXNzLgorICovCitzdGF0aWMgdm9pZCBhdGg1a19od19zZXRfc2xlZXBfY2xvY2soc3RydWN0IGF0aDVrX2h3ICphaCwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207CisJdTMyIHNjYWwsIHNwZW5kaW5nLCB1c2VjMzI7CisKKwkvKiBPbmx5IHNldCAzMktIeiBzZXR0aW5ncyBpZiB3ZSBoYXZlIGFuIGV4dGVybmFsCisJICogMzJLSHogY3J5c3RhbCBwcmVzZW50ICovCisJaWYgKChBUjVLX0VFUFJPTV9IQVMzMktIWkNSWVNUQUwoZWUtPmVlX21pc2MxKSB8fAorCUFSNUtfRUVQUk9NX0hBUzMyS0haQ1JZU1RBTF9PTEQoZWUtPmVlX21pc2MxKSkgJiYKKwllbmFibGUpIHsKKworCQkvKiAxIHVzZWMvY3ljbGUgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19VU0VDXzUyMTEsIEFSNUtfVVNFQ18zMiwgMSk7CisJCS8qIFNldCB1cCB0c2YgaW5jcmVtZW50IG9uIGVhY2ggY3ljbGUgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UU0ZfUEFSTSwgQVI1S19UU0ZfUEFSTV9JTkMsIDYxKTsKKworCQkvKiBTZXQgYmFzZWJhbmQgc2xlZXAgY29udHJvbCByZWdpc3RlcnMKKwkJICogYW5kIHNsZWVwIGNvbnRyb2wgcmF0ZSAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MWYsIEFSNUtfUEhZX1NDUik7CisKKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHx8CisJCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKQorCQkJc3BlbmRpbmcgPSAweDE0OworCQllbHNlCisJCQlzcGVuZGluZyA9IDB4MTg7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc3BlbmRpbmcsIEFSNUtfUEhZX1NQRU5ESU5HKTsKKworCQlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKKwkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykgfHwKKwkJKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNyA+PiA0KSkpIHsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgyNiwgQVI1S19QSFlfU0xNVCk7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MGQsIEFSNUtfUEhZX1NDQUwpOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDA3LCBBUjVLX1BIWV9TQ0xPQ0spOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDNmLCBBUjVLX1BIWV9TREVMQVkpOworCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfUkFURSwgMHgwMik7CisJCX0gZWxzZSB7CisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MGEsIEFSNUtfUEhZX1NMTVQpOworCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDBjLCBBUjVLX1BIWV9TQ0FMKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMywgQVI1S19QSFlfU0NMT0NLKTsKKwkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgyMCwgQVI1S19QSFlfU0RFTEFZKTsKKwkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUENJQ0ZHLAorCQkJCUFSNUtfUENJQ0ZHX1NMRUVQX0NMT0NLX1JBVEUsIDB4MDMpOworCQl9CisKKwkJLyogRW5hYmxlIHNsZWVwIGNsb2NrIG9wZXJhdGlvbiAqLworCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfRU4pOworCisJfSBlbHNlIHsKKworCQkvKiBEaXNhYmxlIHNsZWVwIGNsb2NrIG9wZXJhdGlvbiBhbmQKKwkJICogcmVzdG9yZSBkZWZhdWx0IHBhcmFtZXRlcnMgKi8KKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BDSUNGRywKKwkJCQlBUjVLX1BDSUNGR19TTEVFUF9DTE9DS19FTik7CisKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QQ0lDRkcsCisJCQkJQVI1S19QQ0lDRkdfU0xFRVBfQ0xPQ0tfUkFURSwgMCk7CisKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDFmLCBBUjVLX1BIWV9TQ1IpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NMTVRfMzJNSFosIEFSNUtfUEhZX1NMTVQpOworCisJCWlmIChhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl8yNDE3OworCQllbHNlIGlmIChhdGg1a19lZXByb21faXNfaGI2MyhhaCkpCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWl9IQjYzOworCQllbHNlCisJCQlzY2FsID0gQVI1S19QSFlfU0NBTF8zMk1IWjsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzY2FsLCBBUjVLX1BIWV9TQ0FMKTsKKworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NDTE9DS18zMk1IWiwgQVI1S19QSFlfU0NMT0NLKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TREVMQVlfMzJNSFosIEFSNUtfUEhZX1NERUxBWSk7CisKKwkJaWYgKChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIpIHx8CisJCShhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjU0MTMpIHx8CisJCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKQorCQkJc3BlbmRpbmcgPSAweDE0OworCQllbHNlCisJCQlzcGVuZGluZyA9IDB4MTg7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc3BlbmRpbmcsIEFSNUtfUEhZX1NQRU5ESU5HKTsKKworCQlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKKwkJKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTQxMykpCisJCQl1c2VjMzIgPSAzOTsKKwkJZWxzZQorCQkJdXNlYzMyID0gMzE7CisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVVNFQ181MjExLCBBUjVLX1VTRUNfMzIsIHVzZWMzMik7CisKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UU0ZfUEFSTSwgQVI1S19UU0ZfUEFSTV9JTkMsIDEpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBib29sIGF0aDVrX2h3X2NoYW5faGFzX3NwdXJfbm9pc2Uoc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJdTggcmVmY2xrX2ZyZXE7CisKKwlpZiAoKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMikgfHwKKwkoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKQorCQlyZWZjbGtfZnJlcSA9IDQwOworCWVsc2UKKwkJcmVmY2xrX2ZyZXEgPSAzMjsKKworCWlmICgoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJSByZWZjbGtfZnJlcSAhPSAwKSAmJgorCSgoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgJSByZWZjbGtfZnJlcSA8IDEwKSB8fAorCShjaGFubmVsLT5jZW50ZXJfZnJlcSAlIHJlZmNsa19mcmVxID4gMjIpKSkKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKKy8qIFRPRE86IEhhbGYvUXVhcnRlciByYXRlICovCitzdGF0aWMgdm9pZCBhdGg1a19od190d2Vha19pbml0dmFsX3NldHRpbmdzKHN0cnVjdCBhdGg1a19odyAqYWgsCisJCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMiAmJgorCSAgICBhaC0+YWhfcGh5X3JldmlzaW9uID49IEFSNUtfU1JFVl9QSFlfNTIxMkEpIHsKKworCQkvKiBTZXR1cCBBREMgY29udHJvbCAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCQkJKEFSNUtfUkVHX1NNKDIsCisJCQkJQVI1S19QSFlfQURDX0NUTF9JTkJVRkdBSU5fT0ZGKSB8CisJCQkJQVI1S19SRUdfU00oMiwKKwkJCQlBUjVLX1BIWV9BRENfQ1RMX0lOQlVGR0FJTl9PTikgfAorCQkJCUFSNUtfUEhZX0FEQ19DVExfUFdEX0RBQ19PRkYgfAorCQkJCUFSNUtfUEhZX0FEQ19DVExfUFdEX0FEQ19PRkYpLAorCQkJCUFSNUtfUEhZX0FEQ19DVEwpOworCisKKworCQkvKiBEaXNhYmxlIGJhcmtlciBSU1NJIHRocmVzaG9sZCAqLworCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0RBR19DQ0tfQ1RMLAorCQkJCUFSNUtfUEhZX0RBR19DQ0tfQ1RMX0VOX1JTU0lfVEhSKTsKKworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9EQUdfQ0NLX0NUTCwKKwkJCUFSNUtfUEhZX0RBR19DQ0tfQ1RMX1JTU0lfVEhSLCAyKTsKKworCQkvKiBTZXQgdGhlIG11dGUgbWFzayAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMGYsIEFSNUtfU0VRX01BU0spOworCX0KKworCS8qIENsZWFyIFBIWV9CTFVFVE9PVEggdG8gYWxsb3cgUlhfQ0xFQVIgbGluZSBkZWJ1ZyAqLworCWlmIChhaC0+YWhfcGh5X3JldmlzaW9uID49IEFSNUtfU1JFVl9QSFlfNTIxMkIpCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMCwgQVI1S19QSFlfQkxVRVRPT1RIKTsKKworCS8qIEVuYWJsZSBEQ1UgZG91YmxlIGJ1ZmZlcmluZyAqLworCWlmIChhaC0+YWhfcGh5X3JldmlzaW9uID4gQVI1S19TUkVWX1BIWV81MjEyQikKKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAorCQkJCUFSNUtfVFhDRkdfRENVX0RCTF9CVUZfRElTKTsKKworCS8qIFNldCBEQUMvQURDIGRlbGF5cyAqLworCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgeworCQl1MzIgc2NhbDsKKwkJaWYgKGFoLT5haF9tYWNfdmVyc2lvbiA9PSAoQVI1S19TUkVWX0FSMjQxNyA+PiA0KSkKKwkJCXNjYWwgPSBBUjVLX1BIWV9TQ0FMXzMyTUhaXzI0MTc7CisJCWVsc2UgaWYgKGF0aDVrX2VlcHJvbV9pc19oYjYzKGFoKSkKKwkJCXNjYWwgPSBBUjVLX1BIWV9TQ0FMXzMyTUhaX0hCNjM7CisJCWVsc2UKKwkJCXNjYWwgPSBBUjVLX1BIWV9TQ0FMXzMyTUhaOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNjYWwsIEFSNUtfUEhZX1NDQUwpOworCX0KKworCS8qIFNldCBmYXN0IEFEQyAqLworCWlmICgoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1NDEzKSB8fAorCShhaC0+YWhfbWFjX3ZlcnNpb24gPT0gKEFSNUtfU1JFVl9BUjI0MTcgPj4gNCkpKSB7CisJCXUzMiBmYXN0X2FkYyA9IHRydWU7CisKKwkJaWYgKGNoYW5uZWwtPmNlbnRlcl9mcmVxID09IDI0NjIgfHwKKwkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPT0gMjQ2NykKKwkJCWZhc3RfYWRjID0gMDsKKworCQkvKiBPbmx5IHVwZGF0ZSBpZiBuZWVkZWQgKi8KKwkJaWYgKGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9GQVNUX0FEQykgIT0gZmFzdF9hZGMpCisJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBmYXN0X2FkYywKKwkJCQkJCUFSNUtfUEhZX0ZBU1RfQURDKTsKKwl9CisKKwkvKiBGaXggZm9yIGZpcnN0IHJldmlzaW9uIG9mIHRoZSBSRjUxMTIgUkYgY2hpcHNldCAqLworCWlmIChhaC0+YWhfcmFkaW8gPT0gQVI1S19SRjUxMTIgJiYKKwkJCWFoLT5haF9yYWRpb181Z2h6X3JldmlzaW9uIDwKKwkJCUFSNUtfU1JFVl9SQURfNTExMkEpIHsKKwkJdTMyIGRhdGE7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQ0NLVFhDVExfV09STEQsCisJCQkJQVI1S19QSFlfQ0NLVFhDVEwpOworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMXzVHSFopCisJCQlkYXRhID0gMHhmZmI4MTAyMDsKKwkJZWxzZQorCQkJZGF0YSA9IDB4ZmZiODBkMjA7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZGF0YSwgQVI1S19QSFlfRlJBTUVfQ1RMKTsKKwl9CisKKwlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTIxMSkgeworCQl1MzIgdXNlY19yZWc7CisJCS8qIDUzMTEgaGFzIGRpZmZlcmVudCB0eC9yeCBsYXRlbmN5IG1hc2tzCisJCSAqIGZyb20gNTIxMSwgc2luY2Ugd2UgZGVhbCA1MzExIHRoZSBzYW1lCisJCSAqIGFzIDUyMTEgd2hlbiBzZXR0aW5nIGluaXR2YWxzLCBzaGlmdAorCQkgKiB2YWx1ZXMgaGVyZSB0byB0aGVpciBwcm9wZXIgbG9jYXRpb25zICovCisJCXVzZWNfcmVnID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfVVNFQ181MjExKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB1c2VjX3JlZyAmIChBUjVLX1VTRUNfMSB8CisJCQkJQVI1S19VU0VDXzMyIHwKKwkJCQlBUjVLX1VTRUNfVFhfTEFURU5DWV81MjExIHwKKwkJCQlBUjVLX1JFR19TTSgyOSwKKwkJCQlBUjVLX1VTRUNfUlhfTEFURU5DWV81MjEwKSksCisJCQkJQVI1S19VU0VDXzUyMTEpOworCQkvKiBDbGVhciBRQ1UvRENVIGNsb2NrIGdhdGluZyByZWdpc3RlciAqLworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfUUNVRENVX0NMS0dUKTsKKwkJLyogU2V0IERBQy9BREMgZGVsYXlzICovCisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwOCwgQVI1S19QSFlfU0NBTCk7CisJCS8qIEVuYWJsZSBQQ1UgRklGTyBjb3JydXB0aW9uIEVDTyAqLworCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19ESUFHX1NXXzUyMTEsCisJCQkJCUFSNUtfRElBR19TV19FQ09fRU5BQkxFKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0aDVrX2h3X2NvbW1pdF9lZXByb21fc2V0dGluZ3Moc3RydWN0IGF0aDVrX2h3ICphaCwKKwkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLCB1OCAqYW50LCB1OCBlZV9tb2RlKQoreworCXN0cnVjdCBhdGg1a19lZXByb21faW5mbyAqZWUgPSAmYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tOworCXMxNiBjY2tfb2ZkbV9wd3JfZGVsdGE7CisKKwkvKiBBZGp1c3QgcG93ZXIgZGVsdGEgZm9yIGNoYW5uZWwgMTQgKi8KKwlpZiAoY2hhbm5lbC0+Y2VudGVyX2ZyZXEgPT0gMjQ4NCkKKwkJY2NrX29mZG1fcHdyX2RlbHRhID0KKwkJCSgoZWUtPmVlX2Nja19vZmRtX3Bvd2VyX2RlbHRhIC0KKwkJCWVlLT5lZV9zY2FsZWRfY2NrX2RlbHRhKSAqIDIpIC8gMTA7CisJZWxzZQorCQljY2tfb2ZkbV9wd3JfZGVsdGEgPQorCQkJKGVlLT5lZV9jY2tfb2ZkbV9wb3dlcl9kZWx0YSAqIDIpIC8gMTA7CisKKwkvKiBTZXQgQ0NLIHRvIE9GRE0gcG93ZXIgZGVsdGEgb24gdHggcG93ZXIKKwkgKiBhZGp1c3RtZW50IHJlZ2lzdGVyICovCisJaWYgKGFoLT5haF9waHlfcmV2aXNpb24gPj0gQVI1S19TUkVWX1BIWV81MjEyQSkgeworCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgPT0gQ0hBTk5FTF9HKQorCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQkJQVI1S19SRUdfU00oKGVlLT5lZV9jY2tfb2ZkbV9nYWluX2RlbHRhICogLTEpLAorCQkJCUFSNUtfUEhZX1RYX1BXUl9BREpfQ0NLX0dBSU5fREVMVEEpIHwKKwkJCUFSNUtfUkVHX1NNKChjY2tfb2ZkbV9wd3JfZGVsdGEgKiAtMSksCisJCQkJQVI1S19QSFlfVFhfUFdSX0FESl9DQ0tfUENEQUNfSU5ERVgpLAorCQkJCUFSNUtfUEhZX1RYX1BXUl9BREopOworCQllbHNlCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfUEhZX1RYX1BXUl9BREopOworCX0gZWxzZSB7CisJCS8qIEZvciBvbGRlciByZXZzIHdlIHNjYWxlIHBvd2VyIG9uIHN3IGR1cmluZyB0eCBwb3dlcgorCQkgKiBzZXR1cCAqLworCQlhaC0+YWhfdHhwb3dlci50eHBfY2NrX29mZG1fcHdyX2RlbHRhID0gY2NrX29mZG1fcHdyX2RlbHRhOworCQlhaC0+YWhfdHhwb3dlci50eHBfY2NrX29mZG1fZ2FpbmZfZGVsdGEgPQorCQkJCQkJZWUtPmVlX2Nja19vZmRtX2dhaW5fZGVsdGE7CisJfQorCisJLyogU2V0IGFudGVubmEgaWRsZSBzd2l0Y2ggdGFibGUgKi8KKwlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9BTlRfQ1RMLAorCQkJQVI1S19QSFlfQU5UX0NUTF9TV1RBQkxFX0lETEUsCisJCQkoYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bMF0gfAorCQkJQVI1S19QSFlfQU5UX0NUTF9UWFJYX0VOKSk7CisKKwkvKiBTZXQgYW50ZW5uYSBzd2l0Y2ggdGFibGUgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIGFoLT5haF9hbnRlbm5hW2VlX21vZGVdW2FudFswXV0sCisJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMCk7CisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBhaC0+YWhfYW50ZW5uYVtlZV9tb2RlXVthbnRbMV1dLAorCQlBUjVLX1BIWV9BTlRfU1dJVENIX1RBQkxFXzEpOworCisJLyogTm9pc2UgZmxvb3IgdGhyZXNob2xkICovCisJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQlBUjVLX1BIWV9ORl9TVkFMKGVlLT5lZV9ub2lzZV9mbG9vcl90aHJbZWVfbW9kZV0pLAorCQlBUjVLX1BIWV9ORlRIUkVTKTsKKworCWlmICgoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPKSAmJgorCShhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzVfMCkpIHsKKwkJLyogU3dpdGNoIHNldHRsaW5nIHRpbWUgKFR1cmJvKSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9TRVRUTElORywKKwkJCQlBUjVLX1BIWV9TRVRUTElOR19TV0lUQ0gsCisJCQkJZWUtPmVlX3N3aXRjaF9zZXR0bGluZ190dXJib1tlZV9tb2RlXSk7CisKKwkJLyogVHgvUnggYXR0ZW51YXRpb24gKFR1cmJvKSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOLAorCQkJCUFSNUtfUEhZX0dBSU5fVFhSWF9BVFRFTiwKKwkJCQllZS0+ZWVfYXRuX3R4X3J4X3R1cmJvW2VlX21vZGVdKTsKKworCQkvKiBBREMvUEdBIGRlc2lyZWQgc2l6ZSAoVHVyYm8pICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0RFU0lSRURfU0laRSwKKwkJCQlBUjVLX1BIWV9ERVNJUkVEX1NJWkVfQURDLAorCQkJCWVlLT5lZV9hZGNfZGVzaXJlZF9zaXplX3R1cmJvW2VlX21vZGVdKTsKKworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJCQkJQVI1S19QSFlfREVTSVJFRF9TSVpFX1BHQSwKKwkJCQllZS0+ZWVfcGdhX2Rlc2lyZWRfc2l6ZV90dXJib1tlZV9tb2RlXSk7CisKKwkJLyogVHgvUnggbWFyZ2luIChUdXJibykgKi8KKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfR0FJTl8yR0haLAorCQkJCUFSNUtfUEhZX0dBSU5fMkdIWl9NQVJHSU5fVFhSWCwKKwkJCQllZS0+ZWVfbWFyZ2luX3R4X3J4X3R1cmJvW2VlX21vZGVdKTsKKworCX0gZWxzZSB7CisJCS8qIFN3aXRjaCBzZXR0bGluZyB0aW1lICovCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX1NFVFRMSU5HLAorCQkJCUFSNUtfUEhZX1NFVFRMSU5HX1NXSVRDSCwKKwkJCQllZS0+ZWVfc3dpdGNoX3NldHRsaW5nW2VlX21vZGVdKTsKKworCQkvKiBUeC9SeCBhdHRlbnVhdGlvbiAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOLAorCQkJCUFSNUtfUEhZX0dBSU5fVFhSWF9BVFRFTiwKKwkJCQllZS0+ZWVfYXRuX3R4X3J4W2VlX21vZGVdKTsKKworCQkvKiBBREMvUEdBIGRlc2lyZWQgc2l6ZSAqLworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9ERVNJUkVEX1NJWkUsCisJCQkJQVI1S19QSFlfREVTSVJFRF9TSVpFX0FEQywKKwkJCQllZS0+ZWVfYWRjX2Rlc2lyZWRfc2l6ZVtlZV9tb2RlXSk7CisKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfREVTSVJFRF9TSVpFLAorCQkJCUFSNUtfUEhZX0RFU0lSRURfU0laRV9QR0EsCisJCQkJZWUtPmVlX3BnYV9kZXNpcmVkX3NpemVbZWVfbW9kZV0pOworCisJCS8qIFR4L1J4IG1hcmdpbiAqLworCQlpZiAoYWgtPmFoX2VlX3ZlcnNpb24gPj0gQVI1S19FRVBST01fVkVSU0lPTl80XzEpCisJCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOXzJHSFosCisJCQkJQVI1S19QSFlfR0FJTl8yR0haX01BUkdJTl9UWFJYLAorCQkJCWVlLT5lZV9tYXJnaW5fdHhfcnhbZWVfbW9kZV0pOworCX0KKworCS8qIFhQQSBkZWxheXMgKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsCisJCShlZS0+ZWVfdHhfZW5kMnhwYV9kaXNhYmxlW2VlX21vZGVdIDw8IDI0KSB8CisJCShlZS0+ZWVfdHhfZW5kMnhwYV9kaXNhYmxlW2VlX21vZGVdIDw8IDE2KSB8CisJCShlZS0+ZWVfdHhfZnJtMnhwYV9lbmFibGVbZWVfbW9kZV0gPDwgOCkgfAorCQkoZWUtPmVlX3R4X2ZybTJ4cGFfZW5hYmxlW2VlX21vZGVdKSwgQVI1S19QSFlfUkZfQ1RMNCk7CisKKwkvKiBYTE5BIGRlbGF5ICovCisJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfUkZfQ1RMMywKKwkJCUFSNUtfUEhZX1JGX0NUTDNfVFhFMlhMTkFfT04sCisJCQllZS0+ZWVfdHhfZW5kMnhsbmFfZW5hYmxlW2VlX21vZGVdKTsKKworCS8qIFRocmVzaDY0IChBTkkpICovCisJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfTkYsCisJCQlBUjVLX1BIWV9ORl9USFJFU0g2MiwKKwkJCWVlLT5lZV90aHJfNjJbZWVfbW9kZV0pOworCisKKwkvKiBGYWxzZSBkZXRlY3QgYmFja29mZiBmb3IgY2hhbm5lbHMKKwkgKiB0aGF0IGhhdmUgc3B1ciBub2lzZS4gV3JpdGUgdGhlIG5ldworCSAqIGN5Y2xpYyBwb3dlciBSU1NJIHRocmVzaG9sZC4gKi8KKwlpZiAoYXRoNWtfaHdfY2hhbl9oYXNfc3B1cl9ub2lzZShhaCwgY2hhbm5lbCkpCisJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX09GRE1fU0VMRkNPUlIsCisJCQkJQVI1S19QSFlfT0ZETV9TRUxGQ09SUl9DWVBXUl9USFIxLAorCQkJCUFSNUtfSU5JVF9DWUNSU1NJX1RIUjEgKworCQkJCWVlLT5lZV9mYWxzZV9kZXRlY3RbZWVfbW9kZV0pOworCWVsc2UKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfT0ZETV9TRUxGQ09SUiwKKwkJCQlBUjVLX1BIWV9PRkRNX1NFTEZDT1JSX0NZUFdSX1RIUjEsCisJCQkJQVI1S19JTklUX0NZQ1JTU0lfVEhSMSk7CisKKwkvKiBJL1EgY29ycmVjdGlvbgorCSAqIFRPRE86IFBlciBjaGFubmVsIGkvcSBpbmZvcyA/ICovCisJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0lRLAorCQlBUjVLX1BIWV9JUV9DT1JSX0VOQUJMRSB8CisJCShlZS0+ZWVfaV9jYWxbZWVfbW9kZV0gPDwgQVI1S19QSFlfSVFfQ09SUl9RX0lfQ09GRl9TKSB8CisJCWVlLT5lZV9xX2NhbFtlZV9tb2RlXSk7CisKKwkvKiBIZWF2eSBjbGlwcGluZyAtZGlzYWJsZSBmb3Igbm93ICovCisJaWYgKGFoLT5haF9lZV92ZXJzaW9uID49IEFSNUtfRUVQUk9NX1ZFUlNJT05fNV8xKQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDAsIEFSNUtfUEhZX0hFQVZZX0NMSVBfRU5BQkxFKTsKKworCXJldHVybjsKK30KKworLyoKICAqIE1haW4gcmVzZXQgZnVuY3Rpb24KICAqLwogaW50IGF0aDVrX2h3X3Jlc2V0KHN0cnVjdCBhdGg1a19odyAqYWgsIGVudW0gbmw4MDIxMV9pZnR5cGUgb3BfbW9kZSwKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGJvb2wgY2hhbmdlX2NoYW5uZWwpCiB7Ci0Jc3RydWN0IGF0aDVrX2VlcHJvbV9pbmZvICplZSA9ICZhaC0+YWhfY2FwYWJpbGl0aWVzLmNhcF9lZXByb207Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhaC0+YWhfc2MtPnBkZXY7Ci0JdTMyIGRhdGEsIHNfc2VxLCBzX2FudCwgc19sZWRbM10sIGRtYV9zaXplOwotCXVuc2lnbmVkIGludCBpLCBtb2RlLCBmcmVxLCBlZV9tb2RlLCBhbnRbMl07Ci0JaW50IHJldDsKKwl1MzIgc19zZXFbMTBdLCBzX2FudCwgc19sZWRbM10sIHN0YWlkMV9mbGFncywgdHNmX3VwLCB0c2ZfbG87CisJdTMyIHBoeV90c3QxOworCXU4IG1vZGUsIGZyZXEsIGVlX21vZGUsIGFudFsyXTsKKwlpbnQgaSwgcmV0OwogCiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKIAotCXNfc2VxID0gMDsKIAlzX2FudCA9IDA7CiAJZWVfbW9kZSA9IDA7CisJc3RhaWQxX2ZsYWdzID0gMDsKKwl0c2ZfdXAgPSAwOworCXRzZl9sbyA9IDA7CiAJZnJlcSA9IDA7CiAJbW9kZSA9IDA7CiAKQEAgLTQyNyw0OCArODM2LDYgQEAKIAkgKi8KIAkvKkRDVS9BbnRlbm5hIHNlbGVjdGlvbiBub3QgYXZhaWxhYmxlIG9uIDUyMTAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQlpZiAoY2hhbmdlX2NoYW5uZWwpIHsKLQkJCS8qIFNlcSBudW1iZXIgZm9yIHF1ZXVlIDAgLWRvIHRoaXMgZm9yIGFsbCBxdWV1ZXMgPyAqLwotCQkJc19zZXEgPSBhdGg1a19od19yZWdfcmVhZChhaCwKLQkJCQkJQVI1S19RVUVVRV9ERlNfU0VRTlVNKDApKTsKLQkJCS8qRGVmYXVsdCBhbnRlbm5hKi8KLQkJCXNfYW50ID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfREVGQVVMVF9BTlRFTk5BKTsKLQkJfQotCX0KLQotCS8qR1BJT3MqLwotCXNfbGVkWzBdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUENJQ0ZHKSAmIEFSNUtfUENJQ0ZHX0xFRFNUQVRFOwotCXNfbGVkWzFdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfR1BJT0NSKTsKLQlzX2xlZFsyXSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0dQSU9ETyk7Ci0KLQlpZiAoY2hhbmdlX2NoYW5uZWwgJiYgYWgtPmFoX3JmX2JhbmtzICE9IE5VTEwpCi0JCWF0aDVrX2h3X2dldF9yZl9nYWluKGFoKTsKLQotCi0JLypXYWtldXAgdGhlIGRldmljZSovCi0JcmV0ID0gYXRoNWtfaHdfbmljX3dha2V1cChhaCwgY2hhbm5lbC0+aHdfdmFsdWUsIGZhbHNlKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JLyoKLQkgKiBJbml0aWFsaXplIG9wZXJhdGluZyBtb2RlCi0JICovCi0JYWgtPmFoX29wX21vZGUgPSBvcF9tb2RlOwotCi0JLyoKLQkgKiA1MTExLzUxMTIgU2V0dGluZ3MKLQkgKiA1MjEwIG9ubHkgY29tZXMgd2l0aCBSRjUxMTAKLQkgKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJaWYgKGFoLT5haF9yYWRpbyAhPSBBUjVLX1JGNTExMSAmJgotCQkJYWgtPmFoX3JhZGlvICE9IEFSNUtfUkY1MTEyICYmCi0JCQlhaC0+YWhfcmFkaW8gIT0gQVI1S19SRjU0MTMgJiYKLQkJCWFoLT5haF9yYWRpbyAhPSBBUjVLX1JGMjQxMyAmJgotCQkJYWgtPmFoX3JhZGlvICE9IEFSNUtfUkYyNDI1KSB7Ci0JCQlBVEg1S19FUlIoYWgtPmFoX3NjLAotCQkJCSJpbnZhbGlkIHBoeSByYWRpbzogJXVcbiIsIGFoLT5haF9yYWRpbyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCiAJCXN3aXRjaCAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX01PREVTKSB7CiAJCWNhc2UgQ0hBTk5FTF9BOgpAQCAtNDkxLDggKzg1OCwxMiBAQAogCQkJZnJlcSA9IEFSNUtfSU5JX1JGR0FJTl81R0haOwogCQkJZWVfbW9kZSA9IEFSNUtfRUVQUk9NX01PREVfMTFBOwogCQkJYnJlYWs7Ci0JCS8qSXMgdGhpcyBvayBvbiA1MjExIHRvbyA/Ki8KIAkJY2FzZSBDSEFOTkVMX1RHOgorCQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjExKSB7CisJCQkJQVRINUtfRVJSKGFoLT5haF9zYywKKwkJCQkJIlR1cmJvRyBtb2RlIG5vdCBhdmFpbGFibGUgb24gNTIxMSIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQogCQkJbW9kZSA9IEFSNUtfTU9ERV8xMUdfVFVSQk87CiAJCQlmcmVxID0gQVI1S19JTklfUkZHQUlOXzJHSFo7CiAJCQllZV9tb2RlID0gQVI1S19FRVBST01fTU9ERV8xMUc7CkBAIC01MTMsMTEgKzg4NCw5MyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQkvKiBQSFkgYWNjZXNzIGVuYWJsZSAqLwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NISUZUXzVHSFosIEFSNUtfUEhZKDApKTsKKwkJaWYgKGNoYW5nZV9jaGFubmVsKSB7CisJCQkvKgorCQkJICogU2F2ZSBmcmFtZSBzZXF1ZW5jZSBjb3VudAorCQkJICogRm9yIHJldnMuIGFmdGVyIE9haHUsIG9ubHkgc2F2ZQorCQkJICogc2VxIG51bSBmb3IgRENVIDAgKEdsb2JhbCBzZXEgbnVtKQorCQkJICovCisJCQlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTIxMSkgewogCisJCQkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCQkJCXNfc2VxW2ldID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsCisJCQkJCQlBUjVLX1FVRVVFX0RDVV9TRVFOVU0oaSkpOworCisJCQl9IGVsc2UgeworCQkJCXNfc2VxWzBdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsCisJCQkJCQlBUjVLX1FVRVVFX0RDVV9TRVFOVU0oMCkpOworCQkJfQorCisJCQkvKiBUU0YgYWNjZWxlcmF0ZXMgb24gQVI1MjExIGR1cnJpbmcgcmVzZXQKKwkJCSAqIEFzIGEgd29ya2Fyb3VuZCBzYXZlIGl0IGhlcmUgYW5kIHJlc3RvcmUKKwkJCSAqIGl0IGxhdGVyIHNvIHRoYXQgaXQncyBiYWNrIGluIHRpbWUgYWZ0ZXIKKwkJCSAqIHJlc2V0LiBUaGlzIHdheSBpdCdsbCBnZXQgcmUtc3luY2VkIG9uIHRoZQorCQkJICogbmV4dCBiZWFjb24gd2l0aG91dCBicmVha2luZyBhZC1ob2MuCisJCQkgKgorCQkJICogT24gQVI1MjEyIFRTRiBpcyBhbG1vc3QgcHJlc2VydmVkIGFjcm9zcyBhCisJCQkgKiByZXNldCBzbyBpdCBzdGF5cyBiYWNrIGluIHRpbWUgYW55d2F5IGFuZAorCQkJICogd2UgZG9uJ3QgaGF2ZSB0byBzYXZlL3Jlc3RvcmUgaXQuCisJCQkgKgorCQkJICogWFhYOiBTaW5jZSB0aGlzIGJyZWFrcyBwb3dlciBzYXZpbmcgd2UgaGF2ZQorCQkJICogdG8gZGlzYWJsZSBwb3dlciBzYXZpbmcgdW50aWwgd2UgcmVjZWl2ZSB0aGUKKwkJCSAqIG5leHQgYmVhY29uLCBzbyB3ZSBjYW4gcmVzeW5jIGJlYWNvbiB0aW1lcnMgKi8KKwkJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMSkgeworCQkJCXRzZl91cCA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1RTRl9VMzIpOworCQkJCXRzZl9sbyA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1RTRl9MMzIpOworCQkJfQorCQl9CisKKwkJLyogU2F2ZSBkZWZhdWx0IGFudGVubmEgKi8KKwkJc19hbnQgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19ERUZBVUxUX0FOVEVOTkEpOworCisJCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgeworCQkJLyogUmVzdG9yZSBub3JtYWwgMzIvNDBNSHogY2xvY2sgb3BlcmF0aW9uCisJCQkgKiB0byBhdm9pZCByZWdpc3RlciBhY2Nlc3MgZGVsYXkgb24gY2VydGFpbgorCQkJICogUEhZIHJlZ2lzdGVycyAqLworCQkJYXRoNWtfaHdfc2V0X3NsZWVwX2Nsb2NrKGFoLCBmYWxzZSk7CisKKwkJCS8qIFNpbmNlIHdlIGFyZSBnb2luZyB0byB3cml0ZSByZiBidWZmZXIKKwkJCSAqIGNoZWNrIGlmIHdlIGhhdmUgYW55IHBlbmRpbmcgZ2Fpbl9GCisJCQkgKiBvcHRpbWl6YXRpb24gc2V0dGluZ3MgKi8KKwkJCWlmIChjaGFuZ2VfY2hhbm5lbCAmJiBhaC0+YWhfcmZfYmFua3MgIT0gTlVMTCkKKwkJCQlhdGg1a19od19nYWluZl9jYWxpYnJhdGUoYWgpOworCQl9CiAJfQogCisJLypHUElPcyovCisJc19sZWRbMF0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QQ0lDRkcpICYKKwkJCQkJQVI1S19QQ0lDRkdfTEVEU1RBVEU7CisJc19sZWRbMV0gPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19HUElPQ1IpOworCXNfbGVkWzJdID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfR1BJT0RPKTsKKworCS8qIEFSNUtfU1RBX0lEMSBmbGFncywgb25seSBwcmVzZXJ2ZSBhbnRlbm5hCisJICogc2V0dGluZ3MgYW5kIGFjay9jdHMgcmF0ZSBtb2RlICovCisJc3RhaWQxX2ZsYWdzID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfU1RBX0lEMSkgJgorCQkJKEFSNUtfU1RBX0lEMV9ERUZBVUxUX0FOVEVOTkEgfAorCQkJQVI1S19TVEFfSUQxX0RFU0NfQU5URU5OQSB8CisJCQlBUjVLX1NUQV9JRDFfUlRTX0RFRl9BTlRFTk5BIHwKKwkJCUFSNUtfU1RBX0lEMV9BQ0tDVFNfNk1CIHwKKwkJCUFSNUtfU1RBX0lEMV9CQVNFX1JBVEVfMTFCIHwKKwkJCUFSNUtfU1RBX0lEMV9TRUxGR0VOX0RFRl9BTlQpOworCisJLyogV2FrZXVwIHRoZSBkZXZpY2UgKi8KKwlyZXQgPSBhdGg1a19od19uaWNfd2FrZXVwKGFoLCBjaGFubmVsLT5od192YWx1ZSwgZmFsc2UpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIEluaXRpYWxpemUgb3BlcmF0aW5nIG1vZGUKKwkgKi8KKwlhaC0+YWhfb3BfbW9kZSA9IG9wX21vZGU7CisKKwkvKiBQSFkgYWNjZXNzIGVuYWJsZSAqLworCWlmIChhaC0+YWhfbWFjX3NyZXYgPj0gQVI1S19TUkVWX0FSNTIxMSkKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TSElGVF81R0haLCBBUjVLX1BIWSgwKSk7CisJZWxzZQorCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NISUZUXzVHSFogfCAweDQwLAorCQkJCQkJCUFSNUtfUEhZKDApKTsKKworCS8qIFdyaXRlIGluaXRpYWwgc2V0dGluZ3MgKi8KIAlyZXQgPSBhdGg1a19od193cml0ZV9pbml0dmFscyhhaCwgbW9kZSwgY2hhbmdlX2NoYW5uZWwpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC01MjYsNjkgKzk3OSwyOSBAQAogCSAqIDUyMTEvNTIxMiBTcGVjaWZpYwogCSAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCiAJCS8qCiAJCSAqIFdyaXRlIGluaXRpYWwgUkYgZ2FpbiBzZXR0aW5ncwogCQkgKiBUaGlzIHNob3VsZCB3b3JrIGZvciBib3RoIDUxMTEvNTExMgogCQkgKi8KLQkJcmV0ID0gYXRoNWtfaHdfcmZnYWluKGFoLCBmcmVxKTsKKwkJcmV0ID0gYXRoNWtfaHdfcmZnYWluX2luaXQoYWgsIGZyZXEpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAogCQltZGVsYXkoMSk7CiAKIAkJLyoKLQkJICogV3JpdGUgc29tZSBtb3JlIGluaXRpYWwgcmVnaXN0ZXIgc2V0dGluZ3MgZm9yIHJldmlzZWQgY2hpcHMKKwkJICogVHdlYWsgaW5pdHZhbCBzZXR0aW5ncyBmb3IgcmV2aXNlZAorCQkgKiBjaGlwc2V0cyBhbmQgYWRkIHNvbWUgbW9yZSBjb25maWcKKwkJICogYml0cwogCQkgKi8KLQkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyICYmCi0JCSAgICBhaC0+YWhfcGh5X3JldmlzaW9uID4gMHg0MSkgewotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDJhMDAyLCAweDk4MmMpOwotCi0JCQlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgPT0gQ0hBTk5FTF9HKQotCQkJCWlmIChhaC0+YWhfbWFjX3NyZXYgPCBBUjVLX1NSRVZfQVIyNDEzKQotCQkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDBmODBkODAsCi0JCQkJCQkJCTB4OTk0Yyk7Ci0JCQkJZWxzZSBpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTQyNCkKLQkJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMzgwMTQwLAotCQkJCQkJCQkweDk5NGMpOwotCQkJCWVsc2UgaWYgKGFoLT5haF9tYWNfc3JldiA8IEFSNUtfU1JFVl9BUjI0MjUpCi0JCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMGZjMGVjMCwKLQkJCQkJCQkJMHg5OTRjKTsKLQkJCQllbHNlIC8qIDI0MjUgKi8KLQkJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwZmMwZmMwLAotCQkJCQkJCQkweDk5NGMpOwotCQkJZWxzZQotCQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwMCwgMHg5OTRjKTsKLQotCQkJLyogR290IHRoaXMgZnJvbSBsZWdhY3ktaGFsICovCi0JCQlBUjVLX1JFR19ESVNBQkxFX0JJVFMoYWgsIDB4YTIyOCwgMHgyMDApOwotCi0JCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgMHhhMjI4LCAweDgwMCwgMHhmZmZlMDNmZik7Ci0KLQkJCS8qIEp1c3Qgd3JpdGUgMHg5YjUgPyAqLwotCQkJLyogYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwOWI1LCAweGEyMjgpOyAqLwotCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDBmLCBBUjVLX1NFUV9NQVNLKTsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwMCwgMHhhMjU0KTsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMDAwZSwgQVI1S19QSFlfU0NBTCk7Ci0JCX0KLQotCQkvKiBGaXggZm9yIGZpcnN0IHJldmlzaW9uIG9mIHRoZSBSRjUxMTIgUkYgY2hpcHNldCAqLwotCQlpZiAoYWgtPmFoX3JhZGlvID49IEFSNUtfUkY1MTEyICYmCi0JCQkJYWgtPmFoX3JhZGlvXzVnaHpfcmV2aXNpb24gPAotCQkJCUFSNUtfU1JFVl9SQURfNTExMkEpIHsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQ0NLVFhDVExfV09STEQsCi0JCQkJCUFSNUtfUEhZX0NDS1RYQ1RMKTsKLQkJCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfNUdIWikKLQkJCQlkYXRhID0gMHhmZmI4MTAyMDsKLQkJCWVsc2UKLQkJCQlkYXRhID0gMHhmZmI4MGQyMDsKLQkJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgZGF0YSwgQVI1S19QSFlfRlJBTUVfQ1RMKTsKLQkJCWRhdGEgPSAwOwotCQl9CisJCWF0aDVrX2h3X3R3ZWFrX2luaXR2YWxfc2V0dGluZ3MoYWgsIGNoYW5uZWwpOwogCiAJCS8qCiAJCSAqIFNldCBUWCBwb3dlciAoRklYTUUpCiAJCSAqLwotCQlyZXQgPSBhdGg1a19od190eHBvd2VyKGFoLCBjaGFubmVsLCBBUjVLX1RVTkVfREVGQVVMVF9UWFBPV0VSKTsKKwkJcmV0ID0gYXRoNWtfaHdfdHhwb3dlcihhaCwgY2hhbm5lbCwgZWVfbW9kZSwKKwkJCQkJQVI1S19UVU5FX0RFRkFVTFRfVFhQT1dFUik7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC02MDEsMTUgKzEwMTQsMTIgQEAKIAkJCWF0aDVrX2h3X3dyaXRlX3JhdGVfZHVyYXRpb24oYWgsIG1vZGUpOwogCiAJCS8qCi0JCSAqIFdyaXRlIFJGIHJlZ2lzdGVycworCQkgKiBXcml0ZSBSRiBidWZmZXIKIAkJICovCi0JCXJldCA9IGF0aDVrX2h3X3JmcmVncyhhaCwgY2hhbm5lbCwgbW9kZSk7CisJCXJldCA9IGF0aDVrX2h3X3JmcmVnc19pbml0KGFoLCBjaGFubmVsLCBtb2RlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJLyoKLQkJICogQ29uZmlndXJlIGFkZGl0aW9uYWwgcmVnaXN0ZXJzCi0JCSAqLwogCiAJCS8qIFdyaXRlIE9GRE0gdGltaW5ncyBvbiA1MjEyKi8KIAkJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyICYmCkBAIC02MzEsMTcgKzEwNDEsNiBAQAogCQl9CiAKIAkJLyoKLQkJICogU2V0IGNoYW5uZWwgYW5kIGNhbGlicmF0ZSB0aGUgUEhZCi0JCSAqLwotCQlyZXQgPSBhdGg1a19od19jaGFubmVsKGFoLCBjaGFubmVsKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJLyogU2V0IGFudGVubmEgbW9kZSAqLwotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfQU5UX0NUTCwKLQkJCWFoLT5haF9hbnRlbm5hW2VlX21vZGVdWzBdLCAweGZmZmZmYzA2KTsKLQotCQkvKgogCQkgKiBJbiBjYXNlIGEgZml4ZWQgYW50ZW5uYSB3YXMgc2V0IGFzIGRlZmF1bHQKIAkJICogd3JpdGUgdGhlIHNhbWUgc2V0dGluZ3Mgb24gYm90aCBBUjVLX1BIWV9BTlRfU1dJVENIX1RBQkxFCiAJCSAqIHJlZ2lzdGVycy4KQEAgLTY1Niw1NCArMTA1NSwxNiBAQAogCQkJYW50WzFdID0gQVI1S19BTlRfRklYRURfQjsKIAkJfQogCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bYW50WzBdXSwKLQkJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX2FudGVubmFbZWVfbW9kZV1bYW50WzFdXSwKLQkJCUFSNUtfUEhZX0FOVF9TV0lUQ0hfVEFCTEVfMSk7Ci0KIAkJLyogQ29tbWl0IHZhbHVlcyBmcm9tIEVFUFJPTSAqLwotCQlpZiAoYWgtPmFoX3JhZGlvID09IEFSNUtfUkY1MTExKQotCQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19QSFlfRlJBTUVfQ1RMLAotCQkJICAgIEFSNUtfUEhZX0ZSQU1FX0NUTF9UWF9DTElQLCBlZS0+ZWVfdHhfY2xpcCk7Ci0KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAotCQkJQVI1S19QSFlfTkZfU1ZBTChlZS0+ZWVfbm9pc2VfZmxvb3JfdGhyW2VlX21vZGVdKSwKLQkJCUFSNUtfUEhZX05GVEhSRVMpOwotCi0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9TRVRUTElORywKLQkJCShlZS0+ZWVfc3dpdGNoX3NldHRsaW5nW2VlX21vZGVdIDw8IDcpICYgMHgzZjgwLAotCQkJMHhmZmZmYzA3Zik7Ci0JCUFSNUtfUkVHX01BU0tFRF9CSVRTKGFoLCBBUjVLX1BIWV9HQUlOLAotCQkJKGVlLT5lZV9hdG5fdHhfcnhbZWVfbW9kZV0gPDwgMTIpICYgMHgzZjAwMCwKLQkJCTB4ZmZmYzBmZmYpOwotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfREVTSVJFRF9TSVpFLAotCQkJKGVlLT5lZV9hZGNfZGVzaXJlZF9zaXplW2VlX21vZGVdICYgMHgwMGZmKSB8Ci0JCQkoKGVlLT5lZV9wZ2FfZGVzaXJlZF9zaXplW2VlX21vZGVdIDw8IDgpICYgMHhmZjAwKSwKLQkJCTB4ZmZmZjAwMDApOwotCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwKLQkJCShlZS0+ZWVfdHhfZW5kMnhwYV9kaXNhYmxlW2VlX21vZGVdIDw8IDI0KSB8Ci0JCQkoZWUtPmVlX3R4X2VuZDJ4cGFfZGlzYWJsZVtlZV9tb2RlXSA8PCAxNikgfAotCQkJKGVlLT5lZV90eF9mcm0yeHBhX2VuYWJsZVtlZV9tb2RlXSA8PCA4KSB8Ci0JCQkoZWUtPmVlX3R4X2ZybTJ4cGFfZW5hYmxlW2VlX21vZGVdKSwgQVI1S19QSFlfUkZfQ1RMNCk7Ci0KLQkJQVI1S19SRUdfTUFTS0VEX0JJVFMoYWgsIEFSNUtfUEhZX1JGX0NUTDMsCi0JCQllZS0+ZWVfdHhfZW5kMnhsbmFfZW5hYmxlW2VlX21vZGVdIDw8IDgsIDB4ZmZmZjAwZmYpOwotCQlBUjVLX1JFR19NQVNLRURfQklUUyhhaCwgQVI1S19QSFlfTkYsCi0JCQkoZWUtPmVlX3Rocl82MltlZV9tb2RlXSA8PCAxMikgJiAweDdmMDAwLCAweGZmZjgwZmZmKTsKLQkJQVI1S19SRUdfTUFTS0VEX0JJVFMoYWgsIEFSNUtfUEhZX09GRE1fU0VMRkNPUlIsIDQsIDB4ZmZmZmZmMDEpOwotCi0JCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9JUSwKLQkJICAgIEFSNUtfUEhZX0lRX0NPUlJfRU5BQkxFIHwKLQkJICAgIChlZS0+ZWVfaV9jYWxbZWVfbW9kZV0gPDwgQVI1S19QSFlfSVFfQ09SUl9RX0lfQ09GRl9TKSB8Ci0JCSAgICBlZS0+ZWVfcV9jYWxbZWVfbW9kZV0pOwotCi0JCWlmIChhaC0+YWhfZWVfdmVyc2lvbiA+PSBBUjVLX0VFUFJPTV9WRVJTSU9OXzRfMSkKLQkJCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUEhZX0dBSU5fMkdIWiwKLQkJCQlBUjVLX1BIWV9HQUlOXzJHSFpfTUFSR0lOX1RYUlgsCi0JCQkJZWUtPmVlX21hcmdpbl90eF9yeFtlZV9tb2RlXSk7CisJCWF0aDVrX2h3X2NvbW1pdF9lZXByb21fc2V0dGluZ3MoYWgsIGNoYW5uZWwsIGFudCwgZWVfbW9kZSk7CiAKIAl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgNTIxMCB3ZSBkbyBhbGwgaW5pdGlhbGl6YXRpb24gdXNpbmcKKwkJICogaW5pdHZhbHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gbW9kaWZ5CisJCSAqIGFueSBzZXR0aW5ncyAoNTIxMCBhbHNvIG9ubHkgc3VwcG9ydHMKKwkJICogYS9hdHVyYm8gbW9kZXMpCisJCSAqLwogCQltZGVsYXkoMSk7CiAJCS8qIERpc2FibGUgcGh5IGFuZCB3YWl0ICovCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQUNUX0RJU0FCTEUsIEFSNUtfUEhZX0FDVCk7CkBAIC03MTMsMTAwICsxMDc0LDE1NCBAQAogCS8qCiAJICogUmVzdG9yZSBzYXZlZCB2YWx1ZXMKIAkgKi8KKwogCS8qRENVL0FudGVubmEgc2VsZWN0aW9uIG5vdCBhdmFpbGFibGUgb24gNTIxMCovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19zZXEsIEFSNUtfUVVFVUVfREZTX1NFUU5VTSgwKSk7CisKKwkJaWYgKGNoYW5nZV9jaGFubmVsKSB7CisJCQlpZiAoYWgtPmFoX21hY19zcmV2IDwgQVI1S19TUkVWX0FSNTIxMSkgeworCQkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNfc2VxW2ldLAorCQkJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKGkpKTsKKwkJCX0gZWxzZSB7CisJCQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzX3NlcVswXSwKKwkJCQkJQVI1S19RVUVVRV9EQ1VfU0VRTlVNKDApKTsKKwkJCX0KKworCisJCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTEpIHsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHRzZl91cCwgQVI1S19UU0ZfVTMyKTsKKwkJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHRzZl9sbywgQVI1S19UU0ZfTDMyKTsKKwkJCX0KKwkJfQorCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19hbnQsIEFSNUtfREVGQVVMVF9BTlRFTk5BKTsKIAl9CisKKwkvKiBMZWRzdGF0ZSAqLwogCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BDSUNGRywgc19sZWRbMF0pOworCisJLyogR3BpbyBzZXR0aW5ncyAqLwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc19sZWRbMV0sIEFSNUtfR1BJT0NSKTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNfbGVkWzJdLCBBUjVLX0dQSU9ETyk7CiAKKwkvKiBSZXN0b3JlIHN0YV9pZCBmbGFncyBhbmQgcHJlc2VydmUgb3VyIG1hYyBhZGRyZXNzKi8KKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfTE9XX0lEKGFoLT5haF9zdGFfaWQpLAorCQkJCQkJQVI1S19TVEFfSUQwKTsKKwlhdGg1a19od19yZWdfd3JpdGUoYWgsIHN0YWlkMV9mbGFncyB8IEFSNUtfSElHSF9JRChhaC0+YWhfc3RhX2lkKSwKKwkJCQkJCUFSNUtfU1RBX0lEMSk7CisKKwogCS8qCi0JICogTWlzYworCSAqIENvbmZpZ3VyZSBQQ1UKIAkgKi8KKworCS8qIFJlc3RvcmUgYnNzaWQgYW5kIGJzc2lkIG1hc2sgKi8KIAkvKiBYWFg6IGFkZCBhaC0+YWlkIG9uY2UgbWFjODAyMTEgZ2l2ZXMgdGhpcyB0byB1cyAqLwogCWF0aDVrX2h3X3NldF9hc3NvY2lkKGFoLCBhaC0+YWhfYnNzaWQsIDApOwogCisJLyogU2V0IFBDVSBjb25maWcgKi8KIAlhdGg1a19od19zZXRfb3Btb2RlKGFoKTsKLQkvKlBJU1IvU0lTUiBOb3QgYXZhaWxhYmxlIG9uIDUyMTAqLwotCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCisJLyogQ2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cworCSAqIFBJU1IvU0lTUiBOb3QgYXZhaWxhYmxlIG9uIDUyMTAgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApCiAJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHhmZmZmZmZmZiwgQVI1S19QSVNSKTsKLQkJLyogSWYgd2UgbGF0ZXIgYWxsb3cgdHVuaW5nIGZvciB0aGlzLCBzdG9yZSBpbnRvIHNjIHN0cnVjdHVyZSAqLwotCQlkYXRhID0gQVI1S19UVU5FX1JTU0lfVEhSRVMgfAotCQkJQVI1S19UVU5FX0JNSVNTX1RIUkVTIDw8IEFSNUtfUlNTSV9USFJfQk1JU1NfUzsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhLCBBUjVLX1JTU0lfVEhSKTsKKworCS8qIFNldCBSU1NJL0JSU1NJIHRocmVzaG9sZHMKKwkgKgorCSAqIE5vdGU6IElmIHdlIGRlY2lkZSB0byBzZXQgdGhpcyB2YWx1ZQorCSAqIGR5bmFtaWNhbHksIGhhdmUgaW4gbWluZCB0aGF0IHdoZW4gQVI1S19SU1NJX1RIUgorCSAqIHJlZ2lzdGVyIGlzIHJlYWQgaXQgbWlnaHQgcmV0dXJuIDB4NDAgaWYgd2UgaGF2ZW4ndAorCSAqIHdyb3RlIGFueXRoaW5nIHRvIGl0IHBsdXMgQk1JU1MgUlNTSSB0aHJlc2hvbGQgaXMgemVyb2VkLgorCSAqIFNvIGRvaW5nIGEgc2F2ZS9yZXN0b3JlIHByb2NlZHVyZSBoZXJlIGlzbid0IHRoZSByaWdodAorCSAqIGNob2ljZS4gSW5zdGVhZCBzdG9yZSBpdCBvbiBhdGg1a19odyAqLworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgKEFSNUtfVFVORV9SU1NJX1RIUkVTIHwKKwkJCQlBUjVLX1RVTkVfQk1JU1NfVEhSRVMgPDwKKwkJCQlBUjVLX1JTU0lfVEhSX0JNSVNTX1MpLAorCQkJCUFSNUtfUlNTSV9USFIpOworCisJLyogTUlDIFFvUyBzdXBwb3J0ICovCisJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVIyNDEzKSB7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAxMDBhYSwgQVI1S19NSUNfUU9TX0NUTCk7CisJCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMzIxMCwgQVI1S19NSUNfUU9TX1NFTCk7CiAJfQogCi0JLyoKLQkgKiBTZXQgUngvVHggRE1BIENvbmZpZ3VyYXRpb24KLQkgKgotCSAqIFNldCBtYXhpbXVtIERNQSBzaXplICg1MTIpIGV4Y2VwdCBmb3IgUENJLUUgY2FyZHMgc2luY2UKLQkgKiBpdCBjYXVzZXMgcnggb3ZlcnJ1bnMgYW5kIHR4IGVycm9ycyAodGVzdGVkIG9uIDU0MjQgYnV0IHNpbmNlCi0JICogcnggb3ZlcnJ1bnMgYWxzbyBvY2N1ciBvbiA1NDE2LzU0MTggd2l0aCBtYWR3aWZpIHdlIHNldCAxMjgKLQkgKiBmb3IgYWxsIFBDSS1FIGNhcmRzIHRvIGJlIHNhZmUpLgotCSAqCi0JICogSW4gZHVtcHMgdGhpcyBpcyAxMjggZm9yIGFsbGNoaXBzLgotCSAqCi0JICogWFhYOiBuZWVkIHRvIGNoZWNrIDUyMTAgZm9yIHRoaXMKLQkgKiBUT0RPOiBDaGVjayBvdXQgdHggdHJpZ2VyIGxldmVsLCBpdCdzIGFsd2F5cyA2NCBvbiBkdW1wcyBidXQgSQotCSAqIGd1ZXNzIHdlIGNhbiB0d2VhayBpdCBhbmQgc2VlIGhvdyBpdCBnb2VzIDstKQotCSAqLwotCWRtYV9zaXplID0gKHBkZXYtPmlzX3BjaWUpID8gQVI1S19ETUFTSVpFXzEyOEIgOiBBUjVLX0RNQVNJWkVfNTEyQjsKLQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19UWENGRywKLQkJCUFSNUtfVFhDRkdfU0RNQU1SLCBkbWFfc2l6ZSk7Ci0JCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfUlhDRkcsCi0JCQlBUjVLX1JYQ0ZHX1NETUFNVywgZG1hX3NpemUpOworCS8qIFFvUyBOT0FDSyBQb2xpY3kgKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIpIHsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLAorCQkJQVI1S19SRUdfU00oMiwgQVI1S19RT1NfTk9BQ0tfMkJJVF9WQUxVRVMpIHwKKwkJCUFSNUtfUkVHX1NNKDUsIEFSNUtfUU9TX05PQUNLX0JJVF9PRkZTRVQpICB8CisJCQlBUjVLX1JFR19TTSgwLCBBUjVLX1FPU19OT0FDS19CWVRFX09GRlNFVCksCisJCQlBUjVLX1FPU19OT0FDSyk7CiAJfQogCisKKwkvKgorCSAqIENvbmZpZ3VyZSBQSFkKKwkgKi8KKworCS8qIFNldCBjaGFubmVsIG9uIFBIWSAqLworCXJldCA9IGF0aDVrX2h3X2NoYW5uZWwoYWgsIGNoYW5uZWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAkvKgogCSAqIEVuYWJsZSB0aGUgUEhZIGFuZCB3YWl0IHVudGlsIGNvbXBsZXRpb24KKwkgKiBUaGlzIGluY2x1ZGVzIEJhc2VCYW5kIGFuZCBTeW50aGVzaXplcgorCSAqIGFjdGl2YXRpb24uCiAJICovCiAJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9BQ1RfRU5BQkxFLCBBUjVLX1BIWV9BQ1QpOwogCiAJLyoKIAkgKiBPbiA1MjExKyByZWFkIGFjdGl2YXRpb24gLT4gcnggZGVsYXkKIAkgKiBhbmQgdXNlIGl0LgorCSAqCisJICogVE9ETzogSGFsZi9xdWFydGVyIHJhdGUgc3VwcG9ydAogCSAqLwogCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgewotCQlkYXRhID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1JYX0RFTEFZKSAmCisJCXUzMiBkZWxheTsKKwkJZGVsYXkgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfUlhfREVMQVkpICYKIAkJCUFSNUtfUEhZX1JYX0RFTEFZX007Ci0JCWRhdGEgPSAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykgPwotCQkJKChkYXRhIDw8IDIpIC8gMjIpIDogKGRhdGEgLyAxMCk7CisJCWRlbGF5ID0gKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9DQ0spID8KKwkJCSgoZGVsYXkgPDwgMikgLyAyMikgOiAoZGVsYXkgLyAxMCk7CiAKLQkJdWRlbGF5KDEwMCArICgyICogZGF0YSkpOwotCQlkYXRhID0gMDsKKwkJdWRlbGF5KDEwMCArICgyICogZGVsYXkpKTsKIAl9IGVsc2UgewogCQltZGVsYXkoMSk7CiAJfQogCiAJLyoKLQkgKiBQZXJmb3JtIEFEQyB0ZXN0ICg/KQorCSAqIFBlcmZvcm0gQURDIHRlc3QgdG8gc2VlIGlmIGJhc2ViYW5kIGlzIHJlYWR5CisJICogU2V0IHR4IGhvbGQgYW5kIGNoZWNrIGFkYyB0ZXN0IHJlZ2lzdGVyCiAJICovCi0JZGF0YSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UU1QxKTsKKwlwaHlfdHN0MSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UU1QxKTsKIAlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1RTVDFfVFhIT0xELCBBUjVLX1BIWV9UU1QxKTsKIAlmb3IgKGkgPSAwOyBpIDw9IDIwOyBpKyspIHsKIAkJaWYgKCEoYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX0FEQ19URVNUKSAmIDB4MTApKQogCQkJYnJlYWs7CiAJCXVkZWxheSgyMDApOwogCX0KLQlhdGg1a19od19yZWdfd3JpdGUoYWgsIGRhdGEsIEFSNUtfUEhZX1RTVDEpOwotCWRhdGEgPSAwOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcGh5X3RzdDEsIEFSNUtfUEhZX1RTVDEpOwogCiAJLyoKLQkgKiBTdGFydCBhdXRvbWF0aWMgZ2FpbiBjYWxpYnJhdGlvbgorCSAqIFN0YXJ0IGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgY2FsaWJyYXRpb24KIAkgKgogCSAqIER1cmluZyBBR0MgY2FsaWJyYXRpb24gUlggcGF0aCBpcyByZS1yb3V0ZWQgdG8KLQkgKiBhIHNpZ25hbCBkZXRlY3RvciBzbyB3ZSBkb24ndCByZWNlaXZlIGFueXRoaW5nLgorCSAqIGEgcG93ZXIgZGV0ZWN0b3Igc28gd2UgZG9uJ3QgcmVjZWl2ZSBhbnl0aGluZy4KIAkgKgogCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2FsaWJyYXRlIHNvbWUgc3RhdGljIG9mZnNldHMKIAkgKiB1c2VkIHRvZ2V0aGVyIHdpdGggb24tdGhlIGZseSBJL1EgY2FsaWJyYXRpb24gKHRoZQogCSAqIG9uZSBwZXJmb3JtZWQgdmlhIGF0aDVrX2h3X3BoeV9jYWxpYnJhdGUpLCB0aGF0IGRvZXNuJ3QKIAkgKiBpbnRlcnJ1cHQgcnggcGF0aC4KIAkgKgorCSAqIFdoaWxlIHJ4IHBhdGggaXMgcmUtcm91dGVkIHRvIHRoZSBwb3dlciBkZXRlY3RvciB3ZSBhbHNvCisJICogc3RhcnQgYSBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiwgdG8gbWVhc3VyZSB0aGUKKwkgKiBjYXJkJ3Mgbm9pc2UgZmxvb3IgKHRoZSBub2lzZSB3ZSBtZWFzdXJlIHdoZW4gd2UgYXJlIG5vdAorCSAqIHRyYW5zbWl0aW5nIG9yIHJlY2VpdmluZyBhbnl0aGluZykuCisJICoKIAkgKiBJZiB3ZSBhcmUgaW4gYSBub2lzeSBlbnZpcm9ubWVudCBBR0MgY2FsaWJyYXRpb24gbWF5IHRpbWUKLQkgKiBvdXQuCisJICogb3V0IGFuZC9vciBub2lzZSBmbG9vciBjYWxpYnJhdGlvbiBtaWdodCB0aW1lb3V0LgogCSAqLwogCUFSNUtfUkVHX0VOQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9BR0NDVEwsCiAJCQkJQVI1S19QSFlfQUdDQ1RMX0NBTCk7CkBAIC04MjgsMzAgKzEyNDMsMzcgQEAKIAkJCUFSNUtfUEhZX0FHQ0NUTF9DQUwsIDAsIGZhbHNlKSkgewogCQlBVEg1S19FUlIoYWgtPmFoX3NjLCAiZ2FpbiBjYWxpYnJhdGlvbiB0aW1lb3V0ICgldU1IeilcbiIsCiAJCQljaGFubmVsLT5jZW50ZXJfZnJlcSk7Ci0JCXJldHVybiAtRUFHQUlOOwogCX0KIAogCS8qCi0JICogU3RhcnQgbm9pc2UgZmxvb3IgY2FsaWJyYXRpb24KLQkgKgogCSAqIElmIHdlIHJ1biBORiBjYWxpYnJhdGlvbiBiZWZvcmUgQUdDLCBpdCBhbHdheXMgdGltZXMgb3V0LgogCSAqIEJpbmFyeSBIQUwgc3RhcnRzIE5GIGFuZCBBR0MgY2FsaWJyYXRpb24gYXQgdGhlIHNhbWUgdGltZQotCSAqIGFuZCBvbmx5IHdhaXRzIGZvciBBR0MgdG8gZmluaXNoLiBJIGJlbGlldmUgdGhhdCdzIHdyb25nIGJlY2F1c2UKLQkgKiBkdXJpbmcgTkYgY2FsaWJyYXRpb24sIHJ4IHBhdGggaXMgYWxzbyByb3V0ZWQgdG8gYSBkZXRlY3Rvciwgc28gaWYKLQkgKiBpdCBkb2Vzbid0IGZpbmlzaCB3ZSB3b24ndCBoYXZlIFJYLgotCSAqCi0JICogWFhYOiBGaW5kIGFuIGludGVydmFsIHRoYXQncyBPSyBmb3IgYWxsIGNhcmRzLi4uCisJICogYW5kIG9ubHkgd2FpdHMgZm9yIEFHQyB0byBmaW5pc2guIEFsc28gaWYgQUdDIG9yIE5GIGNhbC4KKwkgKiB0aW1lcyBvdXQsIHJlc2V0IGRvZXNuJ3QgZmFpbCBvbiBiaW5hcnkgSEFMLiBJIGJlbGlldmUKKwkgKiB0aGF0J3Mgd3JvbmcgYmVjYXVzZSBzaW5jZSByeCBwYXRoIGlzIHJvdXRlZCB0byBhIGRldGVjdG9yLAorCSAqIGlmIGNhbC4gZG9lc24ndCBmaW5pc2ggd2Ugd29uJ3QgaGF2ZSBSWC4gU2FtJ3MgSEFMIGZvciBBUjUyMTAvNTIxMQorCSAqIGVuYWJsZXMgbm9pc2UgZmxvb3IgY2FsaWJyYXRpb24gYWZ0ZXIgb2Zmc2V0IGNhbGlicmF0aW9uIGFuZCBpZiBub2lzZQorCSAqIGZsb29yIGNhbGlicmF0aW9uIGZhaWxzLCByZXNldCBmYWlscy4gSSBiZWxpZXZlIHRoYXQncworCSAqIGEgYmV0dGVyIGFwcHJvYWNoLCB3ZSBqdXN0IG5lZWQgdG8gZmluZCBhIHBvbGxpbmcgaW50ZXJ2YWwKKwkgKiB0aGF0IHN1aXRzIGJlc3QsIGV2ZW4gaWYgcmVzZXQgY29udGludWVzIHdlIG5lZWQgdG8gbWFrZQorCSAqIHN1cmUgdGhhdCByeCBwYXRoIGlzIHJlYWR5LgogCSAqLwogCWF0aDVrX2h3X25vaXNlX2Zsb29yX2NhbGlicmF0aW9uKGFoLCBjaGFubmVsLT5jZW50ZXJfZnJlcSk7CiAKKworCS8qCisJICogQ29uZmlndXJlIFFDVXMvRENVcworCSAqLworCisJLyogVE9ETzogSFcgQ29tcHJlc3Npb24gc3VwcG9ydCBmb3IgZGF0YSBxdWV1ZXMgKi8KKwkvKiBUT0RPOiBCdXJzdCBwcmVmZXRjaCBmb3IgZGF0YSBxdWV1ZXMgKi8KKwogCS8qCiAJICogUmVzZXQgcXVldWVzIGFuZCBzdGFydCBiZWFjb24gdGltZXJzIGF0IHRoZSBlbmQgb2YgdGhlIHJlc2V0IHJvdXRpbmUKKwkgKiBUaGlzIGFsc28gc2V0cyBRQ1UgbWFzayBvbiBlYWNoIERDVSBmb3IgMToxIHFjdSB0byBkY3UgbWFwcGluZworCSAqIE5vdGU6IElmIHdlIHdhbnQgd2UgY2FuIGFzc2lnbiBtdWx0aXBsZSBxY3VzIG9uIG9uZSBkY3UuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGFoLT5haF9jYXBhYmlsaXRpZXMuY2FwX3F1ZXVlcy5xX3R4X251bTsgaSsrKSB7Ci0JCS8qTm8gUUNVIG9uIDUyMTAqLwotCQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApCi0JCQlBUjVLX1JFR19XUklURV9RKGFoLCBBUjVLX1FVRVVFX1FDVU1BU0soaSksIGkpOwotCiAJCXJldCA9IGF0aDVrX2h3X3Jlc2V0X3R4X3F1ZXVlKGFoLCBpKTsKIAkJaWYgKHJldCkgewogCQkJQVRINUtfRVJSKGFoLT5haF9zYywKQEAgLTg2MCwxNCArMTI4Miw0MCBAQAogCQl9CiAJfQogCisKKwkvKgorCSAqIENvbmZpZ3VyZSBETUEvSW50ZXJydXB0cworCSAqLworCisJLyoKKwkgKiBTZXQgUngvVHggRE1BIENvbmZpZ3VyYXRpb24KKwkgKgorCSAqIFNldCBzdGFuZGFyZCBETUEgc2l6ZSAoMTI4KS4gTm90ZSB0aGF0CisJICogYSBETUEgc2l6ZSBvZiA1MTIgY2F1c2VzIHJ4IG92ZXJydW5zIGFuZCB0eCBlcnJvcnMKKwkgKiBvbiBwY2ktZSBjYXJkcyAodGVzdGVkIG9uIDU0MjQgYnV0IHNpbmNlIHJ4IG92ZXJydW5zCisJICogYWxzbyBvY2N1ciBvbiA1NDE2LzU0MTggd2l0aCBtYWR3aWZpIHdlIHNldCAxMjgKKwkgKiBmb3IgYWxsIFBDSS1FIGNhcmRzIHRvIGJlIHNhZmUpLgorCSAqCisJICogWFhYOiBuZWVkIHRvIGNoZWNrIDUyMTAgZm9yIHRoaXMKKwkgKiBUT0RPOiBDaGVjayBvdXQgdHggdHJpZ2VyIGxldmVsLCBpdCdzIGFsd2F5cyA2NCBvbiBkdW1wcyBidXQgSQorCSAqIGd1ZXNzIHdlIGNhbiB0d2VhayBpdCBhbmQgc2VlIGhvdyBpdCBnb2VzIDstKQorCSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCQlBUjVLX1JFR19XUklURV9CSVRTKGFoLCBBUjVLX1RYQ0ZHLAorCQkJQVI1S19UWENGR19TRE1BTVIsIEFSNUtfRE1BU0laRV8xMjhCKTsKKwkJQVI1S19SRUdfV1JJVEVfQklUUyhhaCwgQVI1S19SWENGRywKKwkJCUFSNUtfUlhDRkdfU0RNQU1XLCBBUjVLX0RNQVNJWkVfMTI4Qik7CisJfQorCiAJLyogUHJlLWVuYWJsZSBpbnRlcnJ1cHRzIG9uIDUyMTEvNTIxMiovCiAJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKQogCQlhdGg1a19od19zZXRfaW1yKGFoLCBhaC0+YWhfaW1yKTsKIAogCS8qCi0JICogU2V0IFJGIGtpbGwgZmxhZ3MgaWYgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgKHJlYWQgZnJvbSB0aGUgRUVQUk9NKQotCSAqIERpc2FibGUgZ3Bpb19pbnRyIGZvciBub3cgc2luY2UgaXQgcmVzdWx0cyBzeXN0ZW0gaGFuZy4KLQkgKiBUT0RPOiBIYW5kbGUgdGhpcyBpbiBhdGg1a19pbnRyCisJICogU2V0dXAgUkZLaWxsIGludGVycnVwdCBpZiByZmtpbGwgZmxhZyBpcyBzZXQgb24gZWVwcm9tLgorCSAqIFRPRE86IFVzZSBncGlvIHBpbiBhbmQgcG9sYXJpdHkgaW5mb3MgZnJvbSBlZXByb20KKwkgKiBUT0RPOiBIYW5kbGUgdGhpcyBpbiBhdGg1a19pbnRyIGJlY2F1c2UgaXQnbGwgcmVzdWx0CisJICogCSBhIG5hc3R5IGludGVycnVwdCBzdG9ybS4KIAkgKi8KICNpZiAwCiAJaWYgKEFSNUtfRUVQUk9NX0hEUl9SRktJTEwoYWgtPmFoX2NhcGFiaWxpdGllcy5jYXBfZWVwcm9tLmVlX2hlYWRlcikpIHsKQEAgLTg4MCwzMyArMTMyOCwxMiBAQAogCX0KICNlbmRpZgogCi0JLyoKLQkgKiBTZXQgdGhlIDMyTUh6IHJlZmVyZW5jZSBjbG9jayBvbiA1MjEyIHBoeSBjbG9jayBzbGVlcCByZWdpc3RlcgotCSAqCi0JICogVE9ETzogRmluZCBvdXQgaG93IHRvIHN3aXRjaCB0byBleHRlcm5hbCAzMktoeiBjbG9jayB0byBzYXZlIHBvd2VyCi0JICovCi0JaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKSB7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfU0NSXzMyTUhaLCBBUjVLX1BIWV9TQ1IpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NMTVRfMzJNSFosIEFSNUtfUEhZX1NMTVQpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NDQUxfMzJNSFosIEFSNUtfUEhZX1NDQUwpOwotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIEFSNUtfUEhZX1NDTE9DS18zMk1IWiwgQVI1S19QSFlfU0NMT0NLKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9TREVMQVlfMzJNSFosIEFSNUtfUEhZX1NERUxBWSk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYWgtPmFoX3BoeV9zcGVuZGluZywgQVI1S19QSFlfU1BFTkRJTkcpOwotCi0JCWRhdGEgPSBhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19VU0VDXzUyMTEpICYgMHhmZmZmYzA3ZiA7Ci0JCWRhdGEgfD0gKGFoLT5haF9waHlfc3BlbmRpbmcgPT0gQVI1S19QSFlfU1BFTkRJTkdfMTgpID8KLQkJCQkJCTB4MDAwMDBmODAgOiAweDAwMDAxMzgwIDsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBkYXRhLCBBUjVLX1VTRUNfNTIxMSk7Ci0JCWRhdGEgPSAwOwotCX0KLQotCWlmIChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMikgewotCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMTAwYWEsIDB4ODExOCk7Ci0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgMHgwMDAwMzIxMCwgMHg4MTFjKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCAweDAwMDAwMDUyLCAweDgxMDgpOwotCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjI0MTMpCi0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIDB4MDAwMDAwMDQsIDB4ODEyMCk7Ci0JfQorCS8qIEVuYWJsZSAzMktIeiBjbG9jayBmdW5jdGlvbiBmb3IgQVI1MjEyKyBjaGlwcworCSAqIFNldCBjbG9ja3MgdG8gMzJLSHogb3BlcmF0aW9uIGFuZCB1c2UgYW4KKwkgKiBleHRlcm5hbCAzMktIeiBjcnlzdGFsIHdoZW4gc2xlZXBpbmcgaWYgb25lCisJICogZXhpc3RzICovCisJaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKQorCQkJYXRoNWtfaHdfc2V0X3NsZWVwX2Nsb2NrKGFoLCB0cnVlKTsKIAogCS8qCiAJICogRGlzYWJsZSBiZWFjb25zIGFuZCByZXNldCB0aGUgcmVnaXN0ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDVrL3JmYnVmZmVyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MGJhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmJ1ZmZlci5oCkBAIC0wLDAgKzEsMTE4MSBAQAorLyoKKyAqIFJGIEJ1ZmZlciBoYW5kbGluZyBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgTmljayBLb3NzaWZpZGlzIDxtaWNrZmxlbW1AZ21haWwuY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqLworCisKKy8qCisgKiBUaGVyZSBhcmUgc29tZSBzcGVjaWFsIHJlZ2lzdGVycyBvbiB0aGUgUkYgY2hpcAorICogdGhhdCBjb250cm9sIHZhcmlvdXMgb3BlcmF0aW9uIHNldHRpbmdzIHJlbGF0ZWQgbW9zdGx5IHRvCisgKiB0aGUgYW5hbG9nIHBhcnRzIChjaGFubmVsLCBnYWluIGFkanVzdG1lbnQgZXRjKS4KKyAqCisgKiBXZSBkb24ndCB3cml0ZSBvbiB0aG9zZSByZWdpc3RlcnMgZGlyZWN0bHkgYnV0CisgKiB3ZSBzZW5kIGEgZGF0YSBwYWNrZXQgb24gdGhlIGNoaXAsIHVzaW5nIGEgc3BlY2lhbCByZWdpc3RlciwKKyAqIHRoYXQgaG9sZHMgYWxsIHRoZSBzZXR0aW5ncyB3ZSBuZWVkLiBBZnRlciB3ZSAndmUgc2VudCB0aGUKKyAqIGRhdGEgcGFja2V0LCB3ZSB3cml0ZSBvbiBhbm90aGVyIHNwZWNpYWwgcmVnaXN0ZXIgdG8gbm90aWZ5IGh3CisgKiB0byBhcHBseSB0aGUgc2V0dGluZ3MuIFRoaXMgaXMgZG9uZSBzbyB0aGF0IGNvbnRyb2wgcmVnaXN0ZXJzCisgKiBjYW4gYmUgZHluYW1pY2FseSBwcm9ncmFtbWVkIGR1cmluZyBvcGVyYXRpb24gYW5kIHRoZSBzZXR0aW5ncworICogYXJlIGFwcGxpZWQgZmFzdGVyIG9uIHRoZSBody4KKyAqCisgKiBXZSBjYWxsIGVhY2ggZGF0YSBwYWNrZXQgYW4gIlJGIEJhbmsiIGFuZCBhbGwgdGhlIGRhdGEgd2Ugd3JpdGUKKyAqIChhbGwgUkYgQmFua3MpICJSRiBCdWZmZXIiLiBUaGlzIGZpbGUgaG9sZHMgaW5pdGlhbCBSRiBCdWZmZXIKKyAqIGRhdGEgZm9yIHRoZSBkaWZmZXJlbnQgUkYgY2hpcHMsIGFuZCB2YXJpb3VzIGluZm8gdG8gbWF0Y2ggUkYKKyAqIEJ1ZmZlciBvZmZzZXRzIHdpdGggc3BlY2lmaWMgUkYgcmVnaXN0ZXJzIHNvIHRoYXQgd2UgY2FuIGFjY2VzcworICogdGhlbS4gV2UgdHdlYWsgdGhlc2Ugc2V0dGluZ3Mgb24gcmZyZWdzX2luaXQgZnVuY3Rpb24uCisgKgorICogQWxzbyBjaGVjayBvdXQgcmVnLmggYW5kIFUuUy4gUGF0ZW50IDY2Nzc3NzkgQjEgKGFib3V0IGJ1ZmZlcgorICogcmVnaXN0ZXJzIGFuZCBjb250cm9sIHJlZ2lzdGVycyk6CisgKgorICogaHR0cDovL3d3dy5nb29nbGUuY29tL3BhdGVudHM/aWQ9cU5VUkFBQUFFQkFKCisgKi8KKworCisvKgorICogU3RydWN0IHRvIGhvbGQgZGVmYXVsdCBtb2RlIHNwZWNpZmljIFJGCisgKiByZWdpc3RlciB2YWx1ZXMgKFJGIEJhbmtzKQorICovCitzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHsKKwl1OAlyZmJfYmFuazsJCS8qIFJGIEJhbmsgbnVtYmVyICovCisJdTE2CXJmYl9jdHJsX3JlZ2lzdGVyOwkvKiBSRiBCdWZmZXIgY29udHJvbCByZWdpc3RlciAqLworCXUzMglyZmJfbW9kZV9kYXRhWzVdOwkvKiBSRiBCdWZmZXIgZGF0YSBmb3IgZWFjaCBtb2RlICovCit9OworCisvKgorICogU3RydWN0IHRvIGhvbGQgUkYgQnVmZmVyIGZpZWxkCisgKiBpbmZvcyB1c2VkIHRvIGFjY2VzcyBjZXJ0YWluIFJGCisgKiBhbmFsb2cgcmVnaXN0ZXJzCisgKi8KK3N0cnVjdCBhdGg1a19yZmJfZmllbGQgeworCXU4CWxlbjsJLyogRmllbGQgbGVuZ3RoICovCisJdTE2CXBvczsJLyogT2Zmc2V0IG9uIHRoZSByYXcgcGFja2V0ICovCisJdTgJY29sOwkvKiBDb2x1bW4gLXVzZWQgZm9yIHNoaWZ0aW5nICovCit9OworCisvKgorICogUkYgYW5hbG9nIHJlZ2lzdGVyIGRlZmluaXRpb24KKyAqLworc3RydWN0IGF0aDVrX3JmX3JlZyB7CisJdTgJCQliYW5rOwkvKiBSRiBCdWZmZXIgQmFuayBudW1iZXIgKi8KKwl1OAkJCWluZGV4OwkvKiBSZWdpc3RlcidzIGluZGV4IG9uIHJmX3JlZ3NfaWR4ICovCisJc3RydWN0IGF0aDVrX3JmYl9maWVsZAlmaWVsZDsJLyogUkYgQnVmZmVyIGZpZWxkIGZvciB0aGlzIHJlZ2lzdGVyICovCit9OworCisvKiBNYXAgUkYgcmVnaXN0ZXJzIHRvIGluZGV4ZXMKKyAqIFdlIGRvIHRoaXMgdG8gaGFuZGxlIGNvbW1vbiBiaXRzIGFuZCBtYWtlIG91cgorICogbGlmZSBlYXNpZXIgYnkgdXNpbmcgYW4gaW5kZXggZm9yIGVhY2ggcmVnaXN0ZXIKKyAqIGluc3RlYWQgb2YgYSBmdWxsIHJmYl9maWVsZCAqLworZW51bSBhdGg1a19yZl9yZWdzX2lkeCB7CisJLyogQkFOSyA2ICovCisJQVI1S19SRl9PQl8yR0haID0gMCwKKwlBUjVLX1JGX09CXzVHSFosCisJQVI1S19SRl9EQl8yR0haLAorCUFSNUtfUkZfREJfNUdIWiwKKwlBUjVLX1JGX0ZJWEVEX0JJQVNfQSwKKwlBUjVLX1JGX0ZJWEVEX0JJQVNfQiwKKwlBUjVLX1JGX1BXRF9YUEQsCisJQVI1S19SRl9YUERfU0VMLAorCUFSNUtfUkZfWFBEX0dBSU4sCisJQVI1S19SRl9QRF9HQUlOX0xPLAorCUFSNUtfUkZfUERfR0FJTl9ISSwKKwlBUjVLX1JGX0hJR0hfVkNfQ1AsCisJQVI1S19SRl9NSURfVkNfQ1AsCisJQVI1S19SRl9MT1dfVkNfQ1AsCisJQVI1S19SRl9QVVNIX1VQLAorCUFSNUtfUkZfUEFEMkdORCwKKwlBUjVLX1JGX1hCMl9MVkwsCisJQVI1S19SRl9YQjVfTFZMLAorCUFSNUtfUkZfUFdEX0lDTE9CVUZfMkcsCisJQVI1S19SRl9QV0RfODQsCisJQVI1S19SRl9QV0RfOTAsCisJQVI1S19SRl9QV0RfMTMwLAorCUFSNUtfUkZfUFdEXzEzMSwKKwlBUjVLX1JGX1BXRF8xMzIsCisJQVI1S19SRl9QV0RfMTM2LAorCUFSNUtfUkZfUFdEXzEzNywKKwlBUjVLX1JGX1BXRF8xMzgsCisJQVI1S19SRl9QV0RfMTY2LAorCUFSNUtfUkZfUFdEXzE2NywKKwlBUjVLX1JGX0RFUkJZX0NIQU5fU0VMX01PREUsCisJLyogQkFOSyA3ICovCisJQVI1S19SRl9HQUlOX0ksCisJQVI1S19SRl9QTE9fU0VMLAorCUFSNUtfUkZfUkZHQUlOX1NFTCwKKwlBUjVLX1JGX1JGR0FJTl9TVEVQLAorCUFSNUtfUkZfV0FJVF9TLAorCUFSNUtfUkZfV0FJVF9JLAorCUFSNUtfUkZfTUFYX1RJTUUsCisJQVI1S19SRl9NSVhWR0FfT1ZSLAorCUFSNUtfUkZfTUlYR0FJTl9PVlIsCisJQVI1S19SRl9NSVhHQUlOX1NURVAsCisJQVI1S19SRl9QRF9ERUxBWV9BLAorCUFSNUtfUkZfUERfREVMQVlfQiwKKwlBUjVLX1JGX1BEX0RFTEFZX1hSLAorCUFSNUtfUkZfUERfUEVSSU9EX0EsCisJQVI1S19SRl9QRF9QRVJJT0RfQiwKKwlBUjVLX1JGX1BEX1BFUklPRF9YUiwKK307CisKKworLyoqKioqKioqKioqKioqKioqKipcCisqIFJGNTExMSAoU29tYnJlcm8pICoKK1wqKioqKioqKioqKioqKioqKioqLworCisvKiBCQU5LIDYJCQkJbGVuICBwb3MgY29sICovCisjZGVmaW5lCUFSNUtfUkY1MTExX09CXzJHSFoJCXsgMywgMTE5LCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfREJfMkdIWgkJeyAzLCAxMjIsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTExX09CXzVHSFoJCXsgMywgMTA0LCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfREJfNUdIWgkJeyAzLCAxMDcsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTExX1BXRF9YUEQJCXsgMSwgOTUsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfWFBEX0dBSU4JCXsgNCwgOTYsICAwIH0KKworLyogQWNjZXNzIHRvIFBXRCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVI1S19SRjUxMTFfUFdEKF9uKQkJeyAxLCAoMTM1IC0gX24pLCAzIH0KKworLyogQkFOSyA3CQkJCWxlbiAgcG9zIGNvbCAqLworI2RlZmluZQlBUjVLX1JGNTExMV9HQUlOX0kJCXsgNiwgMjksICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTFfUExPX1NFTAkJeyAxLCA0LCAgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9SRkdBSU5fU0VMCQl7IDEsIDM2LCAgMCB9CisjZGVmaW5lIEFSNUtfUkY1MTExX1JGR0FJTl9TVEVQCQl7IDYsIDM3LCAgMCB9CisvKiBPbmx5IG9uIEFSNTIxMiBCYXNlQmFuZCBhbmQgdXAgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTFfV0FJVF9TCQl7IDUsIDE5LCAgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTExX1dBSVRfSQkJeyA1LCAyNCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMV9NQVhfVElNRQkJeyAyLCA0OSwgIDAgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzUxMTFbXSA9IHsKKwl7NiwgQVI1S19SRl9PQl8yR0haLAkJQVI1S19SRjUxMTFfT0JfMkdIWn0sCisJezYsIEFSNUtfUkZfREJfMkdIWiwJCUFSNUtfUkY1MTExX0RCXzJHSFp9LAorCXs2LCBBUjVLX1JGX09CXzVHSFosCQlBUjVLX1JGNTExMV9PQl81R0hafSwKKwl7NiwgQVI1S19SRl9EQl81R0haLAkJQVI1S19SRjUxMTFfREJfNUdIWn0sCisJezYsIEFSNUtfUkZfUFdEX1hQRCwJCUFSNUtfUkY1MTExX1BXRF9YUER9LAorCXs2LCBBUjVLX1JGX1hQRF9HQUlOLAkJQVI1S19SRjUxMTFfWFBEX0dBSU59LAorCXs2LCBBUjVLX1JGX1BXRF84NCwJCUFSNUtfUkY1MTExX1BXRCg4NCl9LAorCXs2LCBBUjVLX1JGX1BXRF85MCwJCUFSNUtfUkY1MTExX1BXRCg5MCl9LAorCXs3LCBBUjVLX1JGX0dBSU5fSSwJCUFSNUtfUkY1MTExX0dBSU5fSX0sCisJezcsIEFSNUtfUkZfUExPX1NFTCwJCUFSNUtfUkY1MTExX1BMT19TRUx9LAorCXs3LCBBUjVLX1JGX1JGR0FJTl9TRUwsCQlBUjVLX1JGNTExMV9SRkdBSU5fU0VMfSwKKwl7NywgQVI1S19SRl9SRkdBSU5fU1RFUCwJQVI1S19SRjUxMTFfUkZHQUlOX1NURVB9LAorCXs3LCBBUjVLX1JGX1dBSVRfUywJCUFSNUtfUkY1MTExX1dBSVRfU30sCisJezcsIEFSNUtfUkZfV0FJVF9JLAkJQVI1S19SRjUxMTFfV0FJVF9JfSwKKwl7NywgQVI1S19SRl9NQVhfVElNRSwJCUFSNUtfUkY1MTExX01BWF9USU1FfQorfTsKKworLyogRGVmYXVsdCBtb2RlIHNwZWNpZmljIHNldHRpbmdzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfNTExMVtdID0geworCXsgMCwgMHg5ODljLAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCwgMHgwMDM4MDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDBjMCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCisJeyAwLCAweDk4OWMsCisJICAgIHsgMHgwMDA0MDBmOSwgMHgwMDA0MDBmOSwgMHgwMDA0MDBmZiwgMHgwMDA0MDBmZCwgMHgwMDA0MDBmZCB9IH0sCisJeyAwLCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9IH0sCisJeyAxLCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxNCB9IH0sCisJeyAzLCAweDk4ZDgsCisJICAgIHsgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCwgMHgwMDYwMTA2OCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwNDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwYTAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDM4MDBjMCwgMHgwMDM4MDA4MCwgMHgwMjM4MDBjMCwgMHgwMDM4MDBjMCwgMHgwMDM4MDBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDAwNiwgMHgwMDAyMDAwNiwgMHgwMDAwMDAwNiwgMHgwMDAyMDAwNiwgMHgwMDAyMDAwNiB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSwgMHgwMDAwMDA4OSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCwgMHgwMDAwMDBhMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNywgMHgwMDA0MDAwNyB9IH0sCisJeyA2LCAweDk4ZDQsCisJICAgIHsgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSwgMHgwMDAwMDAxYSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA0MCwgMHgwMDAwMDA0OCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCwgMHgwMDAwMDAwOCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiwgMHgwMDAwMDA0ZiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMSwgMHgwMDAwMDA2MSwgMHgwMDAwMDBmMSwgMHgwMDAwMDBmMSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0YywgMHgwMDAwOTA0ZiwgMHgwMDAwOTA0ZiB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTI1YSwgMHgwMDAwMTI1YSwgMHgwMDAwMTI5YSwgMHgwMDAwMTI1YSwgMHgwMDAwMTI1YSB9IH0sCisJeyA3LCAweDk4Y2MsCisJICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZiwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjUxMTIvUkYyMTEyIChEZXJieSkgKgorXCoqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBCQU5LIDcgKENvbW1vbikJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJYX0dBSU5fSQkJeyA2LCAxNCwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfTUlYVkdBX09WUgkJeyAxLCAzNiwgIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMlhfTUlYR0FJTl9PVlIJeyAyLCAzNywgIDAgfQorI2RlZmluZSBBUjVLX1JGNTExMlhfTUlYR0FJTl9TVEVQCXsgNCwgMzIsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0EJCXsgNCwgNTgsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0IJCXsgNCwgNjIsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX0RFTEFZX1hSCXsgNCwgNjYsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9BCXsgNCwgNzAsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9CCXsgNCwgNzQsICAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9YUgl7IDQsIDc4LCAgMCB9CisKKy8qIFJGWDExMiAoRGVyYnkgMSkgKi8KKworLyogQkFOSyA2IAkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJfT0JfMkdIWgkJeyAzLCAyNjksIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMl9EQl8yR0haCQl7IDMsIDI3MiwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTJfT0JfNUdIWgkJeyAzLCAyNjEsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMl9EQl81R0haCQl7IDMsIDI2NCwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjUxMTJfRklYRURfQklBU19BCXsgMSwgMjYwLCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJfRklYRURfQklBU19CCXsgMSwgMjU5LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMl9YUERfU0VMCQl7IDEsIDI4NCwgMCB9CisjZGVmaW5lCUFSNUtfUkY1MTEyX1hQRF9HQUlOCQl7IDIsIDI1MiwgMCB9CisKKy8qIEFjY2VzcyB0byBQV0QgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFSNUtfUkY1MTEyX1BXRChfbikJCXsgMSwgKDMwMiAtIF9uKSwgMyB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfNTExMltdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGNTExMl9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjUxMTJfREJfMkdIWn0sCisJezYsIEFSNUtfUkZfT0JfNUdIWiwJCUFSNUtfUkY1MTEyX09CXzVHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzVHSFosCQlBUjVLX1JGNTExMl9EQl81R0hafSwKKwl7NiwgQVI1S19SRl9GSVhFRF9CSUFTX0EsCUFSNUtfUkY1MTEyX0ZJWEVEX0JJQVNfQX0sCisJezYsIEFSNUtfUkZfRklYRURfQklBU19CLAlBUjVLX1JGNTExMl9GSVhFRF9CSUFTX0J9LAorCXs2LCBBUjVLX1JGX1hQRF9TRUwsCQlBUjVLX1JGNTExMl9YUERfU0VMfSwKKwl7NiwgQVI1S19SRl9YUERfR0FJTiwJCUFSNUtfUkY1MTEyX1hQRF9HQUlOfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMwLAkJQVI1S19SRjUxMTJfUFdEKDEzMCl9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzEsCQlBUjVLX1JGNTExMl9QV0QoMTMxKX0sCisJezYsIEFSNUtfUkZfUFdEXzEzMiwJCUFSNUtfUkY1MTEyX1BXRCgxMzIpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM2LAkJQVI1S19SRjUxMTJfUFdEKDEzNil9LAorCXs2LCBBUjVLX1JGX1BXRF8xMzcsCQlBUjVLX1JGNTExMl9QV0QoMTM3KX0sCisJezYsIEFSNUtfUkZfUFdEXzEzOCwJCUFSNUtfUkY1MTEyX1BXRCgxMzgpfSwKKwl7NywgQVI1S19SRl9HQUlOX0ksCQlBUjVLX1JGNTExMlhfR0FJTl9JfSwKKwl7NywgQVI1S19SRl9NSVhWR0FfT1ZSLAkJQVI1S19SRjUxMTJYX01JWFZHQV9PVlJ9LAorCXs3LCBBUjVLX1JGX01JWEdBSU5fT1ZSLAlBUjVLX1JGNTExMlhfTUlYR0FJTl9PVlJ9LAorCXs3LCBBUjVLX1JGX01JWEdBSU5fU1RFUCwJQVI1S19SRjUxMTJYX01JWEdBSU5fU1RFUH0sCisJezcsIEFSNUtfUkZfUERfREVMQVlfQSwJCUFSNUtfUkY1MTEyWF9QRF9ERUxBWV9BfSwKKwl7NywgQVI1S19SRl9QRF9ERUxBWV9CLAkJQVI1S19SRjUxMTJYX1BEX0RFTEFZX0J9LAorCXs3LCBBUjVLX1JGX1BEX0RFTEFZX1hSLAlBUjVLX1JGNTExMlhfUERfREVMQVlfWFJ9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9BLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0F9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9CLAlBUjVLX1JGNTExMlhfUERfUEVSSU9EX0J9LAorCXs3LCBBUjVLX1JGX1BEX1BFUklPRF9YUiwJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9YUn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81MTEyW10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAzMDYwNDA4LCAweDAzMDcwNDA4LCAweDAzMDYwNDA4LCAweDAzMDYwNDA4LCAweDAzMDcwNDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTBjMGMwLCAweDAwYTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwLCAweDAwZTBjMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwLCAweDAwNjYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwLCAweDAwZGIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwLCAweDAwZjEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwLCAweDAwMTIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwLCAweDAwNzMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwLCAweDAwOGIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwLCAweDAwNjAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwLCAweDAwMGMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwLCAweDAwNjQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwLCAweDAwMjAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwLCAweDAwMjQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwLCAweDAwMjUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwLCAweDAwMTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwLCAweDAwNTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwLCAweDFjMDQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwLCAweDAwMGEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwLCAweDAwYTEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwLCAweDAzMDkwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwLCAweDA2MDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGIwLCAweDAwMDAwMGIwLCAweDAwMDAwMGE4LCAweDAwMDAwMGE4LCAweDAwMDAwMGE4IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlLCAweDAwMDAwMDJlIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNmM0YTQxLCAweDAwNmM0YTQxLCAweDAwNmM0YWYxLCAweDAwNmM0YTYxLCAweDAwNmM0YTYxIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTA4OTJhLCAweDAwNTA4OTJhLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiLCAweDAwNTA4OTJiIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwLCAweDAwODQyNDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwLCAweDAwYzY5MjAwIH0gfSwKKwl7IDYsIDB4OThkMCwKKwkgICAgeyAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjLCAweDAwMDIwMDBjIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0LCAweDAwMDAwMDk0IH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxLCAweDAwMDAwMDkxIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDBhLCAweDAwMDAwMDBhLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyLCAweDAwMDAwMDEyIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwLCAweDAwMDAwMDgwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxLCAweDAwMDAwMGMxIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwLCAweDAwMDAwMGYwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyLCAweDAwMDAwMDIyIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyLCAweDAwMDAwMDkyIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0LCAweDAwMDAwMGQ0IH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjLCAweDAwMDAxNGNjIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjLCAweDAwMDAwNDhjIH0gfSwKKwl7IDcsIDB4OThjNCwKKwkgICAgeyAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzLCAweDAwMDAwMDAzIH0gfSwKK307CisKKy8qIFJGWDExMkEgKERlcmJ5IDIpICovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJBX09CXzJHSFoJCXsgMywgMjg3LCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJBX0RCXzJHSFoJCXsgMywgMjkwLCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMkFfT0JfNUdIWgkJeyAzLCAyNzksIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfREJfNUdIWgkJeyAzLCAyODIsIDAgfQorCisjZGVmaW5lCUFSNUtfUkY1MTEyQV9GSVhFRF9CSUFTX0EJeyAxLCAyNzgsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfRklYRURfQklBU19CCXsgMSwgMjc3LCAwIH0KKworI2RlZmluZQlBUjVLX1JGNTExMkFfWFBEX1NFTAkJeyAxLCAzMDIsIDAgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfUERHQUlOTE8JCXsgMiwgMjcwLCAwIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJBX1BER0FJTkhJCQl7IDIsIDI1NywgMCB9CisKKy8qIEFjY2VzcyB0byBQV0QgcmVnaXN0ZXJzICovCisjZGVmaW5lIEFSNUtfUkY1MTEyQV9QV0QoX24pCQl7IDEsICgzMDYgLSBfbiksIDMgfQorCisvKiBWb2x0YWdlIHJlZ3VsYXRvcnMgKi8KKyNkZWZpbmUJQVI1S19SRjUxMTJBX0hJR0hfVkNfQ1AJCXsgMiwgOTAsICAyIH0KKyNkZWZpbmUJQVI1S19SRjUxMTJBX01JRF9WQ19DUAkJeyAyLCA5MiwgIDIgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfTE9XX1ZDX0NQCQl7IDIsIDk0LCAgMiB9CisjZGVmaW5lCUFSNUtfUkY1MTEyQV9QVVNIX1VQCQl7IDEsIDI1NCwgIDIgfQorCisvKiBQb3dlciBjb25zdW1wdGlvbiAqLworI2RlZmluZQlBUjVLX1JGNTExMkFfUEFEMkdORAkJeyAxLCAyODEsIDEgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfWEIyX0xWTAkJeyAyLCAxLAkgIDMgfQorI2RlZmluZQlBUjVLX1JGNTExMkFfWEI1X0xWTAkJeyAyLCAzLAkgIDMgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzUxMTJhW10gPSB7CisJezYsIEFSNUtfUkZfT0JfMkdIWiwJCUFSNUtfUkY1MTEyQV9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjUxMTJBX0RCXzJHSFp9LAorCXs2LCBBUjVLX1JGX09CXzVHSFosCQlBUjVLX1JGNTExMkFfT0JfNUdIWn0sCisJezYsIEFSNUtfUkZfREJfNUdIWiwJCUFSNUtfUkY1MTEyQV9EQl81R0hafSwKKwl7NiwgQVI1S19SRl9GSVhFRF9CSUFTX0EsCUFSNUtfUkY1MTEyQV9GSVhFRF9CSUFTX0F9LAorCXs2LCBBUjVLX1JGX0ZJWEVEX0JJQVNfQiwJQVI1S19SRjUxMTJBX0ZJWEVEX0JJQVNfQn0sCisJezYsIEFSNUtfUkZfWFBEX1NFTCwJCUFSNUtfUkY1MTEyQV9YUERfU0VMfSwKKwl7NiwgQVI1S19SRl9QRF9HQUlOX0xPLAkJQVI1S19SRjUxMTJBX1BER0FJTkxPfSwKKwl7NiwgQVI1S19SRl9QRF9HQUlOX0hJLAkJQVI1S19SRjUxMTJBX1BER0FJTkhJfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMwLAkJQVI1S19SRjUxMTJBX1BXRCgxMzApfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMxLAkJQVI1S19SRjUxMTJBX1BXRCgxMzEpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTMyLAkJQVI1S19SRjUxMTJBX1BXRCgxMzIpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM2LAkJQVI1S19SRjUxMTJBX1BXRCgxMzYpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM3LAkJQVI1S19SRjUxMTJBX1BXRCgxMzcpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTM4LAkJQVI1S19SRjUxMTJBX1BXRCgxMzgpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTY2LAkJQVI1S19SRjUxMTJBX1BXRCgxNjYpfSwKKwl7NiwgQVI1S19SRl9QV0RfMTY3LAkJQVI1S19SRjUxMTJBX1BXRCgxNjcpfSwKKwl7NiwgQVI1S19SRl9ISUdIX1ZDX0NQLAkJQVI1S19SRjUxMTJBX0hJR0hfVkNfQ1B9LAorCXs2LCBBUjVLX1JGX01JRF9WQ19DUCwJCUFSNUtfUkY1MTEyQV9NSURfVkNfQ1B9LAorCXs2LCBBUjVLX1JGX0xPV19WQ19DUCwJCUFSNUtfUkY1MTEyQV9MT1dfVkNfQ1B9LAorCXs2LCBBUjVLX1JGX1BVU0hfVVAsCQlBUjVLX1JGNTExMkFfUFVTSF9VUH0sCisJezYsIEFSNUtfUkZfUEFEMkdORCwJCUFSNUtfUkY1MTEyQV9QQUQyR05EfSwKKwl7NiwgQVI1S19SRl9YQjJfTFZMLAkJQVI1S19SRjUxMTJBX1hCMl9MVkx9LAorCXs2LCBBUjVLX1JGX1hCNV9MVkwsCQlBUjVLX1JGNTExMkFfWEI1X0xWTH0sCisJezcsIEFSNUtfUkZfR0FJTl9JLAkJQVI1S19SRjUxMTJYX0dBSU5fSX0sCisJezcsIEFSNUtfUkZfTUlYVkdBX09WUiwJCUFSNUtfUkY1MTEyWF9NSVhWR0FfT1ZSfSwKKwl7NywgQVI1S19SRl9NSVhHQUlOX09WUiwJQVI1S19SRjUxMTJYX01JWEdBSU5fT1ZSfSwKKwl7NywgQVI1S19SRl9NSVhHQUlOX1NURVAsCUFSNUtfUkY1MTEyWF9NSVhHQUlOX1NURVB9LAorCXs3LCBBUjVLX1JGX1BEX0RFTEFZX0EsCQlBUjVLX1JGNTExMlhfUERfREVMQVlfQX0sCisJezcsIEFSNUtfUkZfUERfREVMQVlfQiwJCUFSNUtfUkY1MTEyWF9QRF9ERUxBWV9CfSwKKwl7NywgQVI1S19SRl9QRF9ERUxBWV9YUiwJQVI1S19SRjUxMTJYX1BEX0RFTEFZX1hSfSwKKwl7NywgQVI1S19SRl9QRF9QRVJJT0RfQSwJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9BfSwKKwl7NywgQVI1S19SRl9QRF9QRVJJT0RfQiwJQVI1S19SRjUxMTJYX1BEX1BFUklPRF9CfSwKKwl7NywgQVI1S19SRl9QRF9QRVJJT0RfWFIsCUFSNUtfUkY1MTEyWF9QRF9QRVJJT0RfWFJ9LAorfTsKKworLyogRGVmYXVsdCBtb2RlIHNwZWNpZmljIHNldHRpbmdzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfNTExMmFbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDMwNjA0MDgsIDB4MDMwNzA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNjA0MDgsIDB4MDMwNzA0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAsIDB4MGYwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAsIDB4MDA4MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAsIDB4MDAwMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAsIDB4MDAxODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA2MDAwMDAsIDB4MDA2MDAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAsIDB4MDA2ZTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAsIDB4MDBjNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAsIDB4MDA0YjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAsIDB4MDQ0ODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAsIDB4MDA0YzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAsIDB4MDBlNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAsIDB4MDBmYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAsIDB4MDBmZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAsIDB4MDQzZjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAsIDB4MDAwYzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAsIDB4MDIxOTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAsIDB4MDAyNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAsIDB4MDBiNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAsIDB4MDA5OTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAsIDB4MDA1MDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAsIDB4MDAxMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAsIDB4YzAzMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAsIDB4MDE3NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAsIDB4MDAxMTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAsIDB4ODYyODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAsIDB4MzE4NDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAsIDB4MDBmMjAwODAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyNzAwMTksIDB4MDAyNzAwMTksIDB4MDAyNzAwMTksIDB4MDAyNzAwMTksIDB4MDAyNzAwMTkgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIsIDB4MDAwMDAwYjIgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQsIDB4MDBiMDIwODQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQsIDB4MDA0MTI1YTQgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAsIDB4MDAxMTkyMjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAsIDB4MDAxYTQ4MDAgfSB9LAorCXsgNiwgMHg5OGQ4LAorCSAgICB7IDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAsIDB4MDAwYjAyMzAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQsIDB4MDAwMDAwOTQgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEsIDB4MDAwMDAwOTEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIsIDB4MDAwMDAwMTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAsIDB4MDAwMDAwODAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDksIDB4MDAwMDAwZDkgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAsIDB4MDAwMDAwNjAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAsIDB4MDAwMDAwZjAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIsIDB4MDAwMDAwYTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIsIDB4MDAwMDAwNTIgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQsIDB4MDAwMDAwZDQgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MsIDB4MDAwMDE0Y2MgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMsIDB4MDAwMDA0OGMgfSB9LAorCXsgNywgMHg5OGM0LAorCSAgICB7IDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMsIDB4MDAwMDAwMDMgfSB9LAorfTsKKworCisKKy8qKioqKioqKioqKioqKioqKipcCisqIFJGMjQxMyAoR3JpZmZpbikgKgorXCoqKioqKioqKioqKioqKioqKi8KKworLyogQkFOSyA2IAkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjI0MTNfT0JfMkdIWgkJeyAzLCAxNjgsIDAgfQorI2RlZmluZQlBUjVLX1JGMjQxM19EQl8yR0haCQl7IDMsIDE2NSwgMCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfMjQxM1tdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGMjQxM19PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjI0MTNfREJfMkdIWn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MKKyAqIFhYWDogYS9hVHVyYm8gPz8/CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl8yNDEzW10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAyMDAxNDA4LCAweDAyMDExNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDExNDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTAyMGMwLCAweDAwYTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwLCAweDAzMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwLCAweDQwNDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwLCAweDY1MDUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwLCAweDAwNDIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwLCAweDAwYjUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwLCAweDAwMDMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwLCAweDAwZjcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwLCAweDAwOWQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwLCAweDAwMjIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwLCAweDA0MjIwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4LCAweDAwMjMwMDE4IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMjgwMDAwLCAweDAwMjgwMDAwLCAweDAwMjgwMDYwLCAweDAwMjgwMDYwLCAweDAwMjgwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTAwMGMwLCAweDAwNTAwMGMwLCAweDAwNTAwMGMzLCAweDAwNTAwMGMzLCAweDAwNTAwMGMzIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmLCAweDAwMDQwMDdmIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4LCAweDAwMDAwNDU4IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwLCAweDAwMDBjMDAwIH0gfSwKKwl7IDYsIDB4OThkOCwKKwkgICAgeyAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwLCAweDAwNDAwMjMwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjIzMTUvUkYyMzE2IChDb2JyYSBTb0MpICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjIzMTZfT0JfMkdIWgkJeyAzLCAxNzgsIDAgfQorI2RlZmluZQlBUjVLX1JGMjMxNl9EQl8yR0haCQl7IDMsIDE3NSwgMCB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfcmZfcmVnIHJmX3JlZ3NfMjMxNltdID0geworCXs2LCBBUjVLX1JGX09CXzJHSFosCQlBUjVLX1JGMjMxNl9PQl8yR0hafSwKKwl7NiwgQVI1S19SRl9EQl8yR0haLAkJQVI1S19SRjIzMTZfREJfMkdIWn0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl8yMzE2W10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAyMDAxNDA4LCAweDAyMDExNDA4LCAweDAyMDAxNDA4LCAweDAyMDAxNDA4LCAweDAyMDExNDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTAyMGMwLCAweDAwYTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwLCAweDAwZTAyMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwLCAweDBmMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAyMDAwMDAwLCAweDAyMDAwMDAwLCAweDAyMDAwMDAwLCAweDAyMDAwMDAwLCAweDAyMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGY4MDAwMDAwLCAweGY4MDAwMDAwLCAweGY4MDAwMDAwLCAweGY4MDAwMDAwLCAweGY4MDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDk1MTUwMDAwLCAweDk1MTUwMDAwLCAweDk1MTUwMDAwLCAweDk1MTUwMDAwLCAweDk1MTUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweGMxMDAwMDAwLCAweGMxMDAwMDAwLCAweGMxMDAwMDAwLCAweGMxMDAwMDAwLCAweGMxMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDgwMDAwLCAweDAwMDgwMDAwLCAweDAwMDgwMDAwLCAweDAwMDgwMDAwLCAweDAwMDgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZDUwMDAwLCAweDAwZDUwMDAwLCAweDAwZDUwMDAwLCAweDAwZDUwMDAwLCAweDAwZDUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGUwMDAwLCAweDAwMGUwMDAwLCAweDAwMGUwMDAwLCAweDAwMGUwMDAwLCAweDAwMGUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZGMwMDAwLCAweDAwZGMwMDAwLCAweDAwZGMwMDAwLCAweDAwZGMwMDAwLCAweDAwZGMwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOGEwMDAwLCAweDAwOGEwMDAwLCAweDAwOGEwMDAwLCAweDAwOGEwMDAwLCAweDAwOGEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDEwODgwMDAwLCAweDEwODgwMDAwLCAweDEwODgwMDAwLCAweDEwODgwMDAwLCAweDEwODgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOGMwMDYwLCAweDAwOGMwMDYwLCAweDAwOGMwMDYwLCAweDAwOGMwMDYwLCAweDAwOGMwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYTAwMDAwLCAweDAwYTAwMDAwLCAweDAwYTAwMDgwLCAweDAwYTAwMDgwLCAweDAwYTAwMDgwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDAwMDAwLCAweDAwNDAwMDAwLCAweDAwNDAwMDBkLCAweDAwNDAwMDBkLCAweDAwNDAwMDBkIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTEwNDAwLCAweDAwMTEwNDAwLCAweDAwMTEwNDAwLCAweDAwMTEwNDAwLCAweDAwMTEwNDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxLCAweDAwMDAwMDAxIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwYjAwLCAweDAwMDAwYjAwLCAweDAwMDAwYjAwLCAweDAwMDAwYjAwLCAweDAwMDAwYjAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwYmU4LCAweDAwMDAwYmU4LCAweDAwMDAwYmU4LCAweDAwMDAwYmU4LCAweDAwMDAwYmU4IH0gfSwKKwl7IDYsIDB4OThjMCwKKwkgICAgeyAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwLCAweDAwMDEwMDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjU0MTMvUkY1NDI0IChFYWdsZS9Db25kb3IpICoKK1wqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJBTksgNgkJCQlsZW4gIHBvcyBjb2wgKi8KKyNkZWZpbmUJQVI1S19SRjU0MTNfT0JfMkdIWgkJeyAzLCAyNDEsIDAgfQorI2RlZmluZQlBUjVLX1JGNTQxM19EQl8yR0haCQl7IDMsIDIzOCwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjU0MTNfT0JfNUdIWgkJeyAzLCAyNDcsIDAgfQorI2RlZmluZQlBUjVLX1JGNTQxM19EQl81R0haCQl7IDMsIDI0NCwgMCB9CisKKyNkZWZpbmUJQVI1S19SRjU0MTNfUFdEX0lDTE9CVUYyRwl7IDMsIDEzMSwgMyB9CisjZGVmaW5lCUFSNUtfUkY1NDEzX0RFUkJZX0NIQU5fU0VMX01PREUJeyAxLCAyOTEsIDIgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzU0MTNbXSA9IHsKKwl7NiwgQVI1S19SRl9PQl8yR0haLAkJIEFSNUtfUkY1NDEzX09CXzJHSFp9LAorCXs2LCBBUjVLX1JGX0RCXzJHSFosCQkgQVI1S19SRjU0MTNfREJfMkdIWn0sCisJezYsIEFSNUtfUkZfT0JfNUdIWiwJCSBBUjVLX1JGNTQxM19PQl81R0hafSwKKwl7NiwgQVI1S19SRl9EQl81R0haLAkJIEFSNUtfUkY1NDEzX0RCXzVHSFp9LAorCXs2LCBBUjVLX1JGX1BXRF9JQ0xPQlVGXzJHLAkgQVI1S19SRjU0MTNfUFdEX0lDTE9CVUYyR30sCisJezYsIEFSNUtfUkZfREVSQllfQ0hBTl9TRUxfTU9ERSwgQVI1S19SRjU0MTNfREVSQllfQ0hBTl9TRUxfTU9ERX0sCit9OworCisvKiBEZWZhdWx0IG1vZGUgc3BlY2lmaWMgc2V0dGluZ3MgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmYnVmZmVyIHJmYl81NDEzW10gPSB7CisJeyAxLCAweDk4ZDQsCisJLyogICAgIG1vZGUgYS9YUiAgbW9kZSBhVHVyYm8gICAgbW9kZSBiICAgICBtb2RlIGcgICAgbW9kZSBnVHVyYm8gKi8KKwkgICAgeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IDIsIDB4OThkMCwKKwkgICAgeyAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4LCAweDAwMDAwMDA4IH0gfSwKKwl7IDMsIDB4OThkYywKKwkgICAgeyAweDAwYTAwMGMwLCAweDAwYTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwLCAweDAwZTAwMGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwLCAweDMzMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwLCAweDAxMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwLCAweDFmMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwLCAweDAwYjgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwLCAweDAwYjcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwLCAweDAwODQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwLCAweDAwYzAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwLCAweDAwZmYwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwLCAweDAwZDcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwLCAweDAwNjEwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwLCAweDAwZmUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwLCAweDAwZGUwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwLCAweDAwN2YwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwLCAweDA0M2QwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwLCAweDAwNzcwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwLCAweDAwNDQwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwLCAweDAwOTgwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwLCAweDAwMTAwMDgwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0LCAweDAwMDVjMDM0IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwLCAweDAwMzEwMGYwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmLCAweDAwMGMwMTFmIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMDQwLCAweDAwNTEwMDQwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwNTAwMGRhLCAweDAwNTAwMGRhLCAweDAwNTAwMGRhLCAweDAwNTAwMGRhLCAweDAwNTAwMGRhIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0LCAweDAwMDA0MDQ0IH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwLCAweDAwMDA2MGMwIH0gfSwKKwl7IDYsIDB4OTg5YywKKwkgICAgeyAweDAwMDAyYzAwLCAweDAwMDAyYzAwLCAweDAwMDAzNjAwLCAweDAwMDAzNjAwLCAweDAwMDAyYzAwIH0gfSwKKwl7IDYsIDB4OThjOCwKKwkgICAgeyAweDAwMDAwNDAzLCAweDAwMDAwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzLCAweDAwMDQwNDAzIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwLCAweDAwMDA2NDAwIH0gfSwKKwl7IDcsIDB4OTg5YywKKwkgICAgeyAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwLCAweDAwMDAwODAwIH0gfSwKKwl7IDcsIDB4OThjYywKKwkgICAgeyAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlLCAweDAwMDAwMDBlIH0gfSwKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqXAorKiBSRjI0MjUvUkYyNDE3IChTd2FuL05hbGEpICoKKyogQVIyMzE3IChTcGlkZXIgU29DKSAgICAgICAqCitcKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBCQU5LIDYJCQkJbGVuICBwb3MgY29sICovCisjZGVmaW5lCUFSNUtfUkYyNDI1X09CXzJHSFoJCXsgMywgMTkzLCAwIH0KKyNkZWZpbmUJQVI1S19SRjI0MjVfREJfMkdIWgkJeyAzLCAxOTAsIDAgfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX3JmX3JlZyByZl9yZWdzXzI0MjVbXSA9IHsKKwl7NiwgQVI1S19SRl9PQl8yR0haLAkJQVI1S19SRjI0MjVfT0JfMkdIWn0sCisJezYsIEFSNUtfUkZfREJfMkdIWiwJCUFSNUtfUkYyNDI1X0RCXzJHSFp9LAorfTsKKworLyogRGVmYXVsdCBtb2RlIHNwZWNpZmljIHNldHRpbmdzCisgKiBYWFg6IGEvYVR1cmJvID8KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzI0MjVbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAsIDB4MDAxNDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4MTAwMDAsIDB4MDA4MTAwMDAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjA4MDAsIDB4MDAwMjA4MDAsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODgsIDB4MDAwMDE2ODggfSB9LAorCXsgNiwgMHg5OGM0LAorCSAgICB7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworLyoKKyAqIFRPRE86IEhhbmRsZSB0aGUgZmV3IGRpZmZlcmVuY2VzIHdpdGggc3dhbiBkdXJpbmcKKyAqIGJhbmsgbW9kaWZpY2F0aW9uIGFuZCBnZXQgcmlkIG9mIHRoaXMKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZidWZmZXIgcmZiXzIzMTdbXSA9IHsKKwl7IDEsIDB4OThkNCwKKwkvKiAgICAgbW9kZSBhL1hSICBtb2RlIGFUdXJibyAgICBtb2RlIGIgICAgIG1vZGUgZyAgICBtb2RlIGdUdXJibyAqLworCSAgICB7IDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAsIDB4MDAwMDAwMjAgfSB9LAorCXsgMiwgMHg5OGQwLAorCSAgICB7IDB4MDIwMDE0MDgsIDB4MDIwMTE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMDE0MDgsIDB4MDIwMTE0MDggfSB9LAorCXsgMywgMHg5OGRjLAorCSAgICB7IDB4MDBhMDIwYzAsIDB4MDBhMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAsIDB4MDBlMDIwYzAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAsIDB4MTAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAsIDB4MDAyYTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAsIDB4MDAwMjAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAsIDB4MDA3MzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAsIDB4MDBmODAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAsIDB4MDBlNzAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAsIDB4MDAxNDAxMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAsIDB4MDA5MTAwNDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEsIDB4MDAwNzAwMWEgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAsIDB4MDA0MTAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDA4MTAwMDAsIDB4MDA4MTAwMDAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAsIDB4MDA4MTAwNjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMjA4MDAsIDB4MDAwMjA4MDAsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMsIDB4MDAwMjA4MDMgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAsIDB4MDAwMDE2NjAgfSB9LAorCXsgNiwgMHg5ODljLAorCSAgICB7IDB4MDAwMDk2ODgsIDB4MDAwMDk2ODgsIDB4MDAwMDk2ODgsIDB4MDAwMDk2ODgsIDB4MDAwMDk2ODggfSB9LAorCXsgNiwgMHg5OGM0LAorCSAgICB7IDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDEgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAsIDB4MDAwMDY0MDAgfSB9LAorCXsgNywgMHg5ODljLAorCSAgICB7IDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAsIDB4MDAwMDA4MDAgfSB9LAorCXsgNywgMHg5OGNjLAorCSAgICB7IDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUsIDB4MDAwMDAwMGUgfSB9LAorfTsKKworLyoKKyAqIFRPRE86IEhhbmRsZSB0aGUgZmV3IGRpZmZlcmVuY2VzIHdpdGggc3dhbiBkdXJpbmcKKyAqIGJhbmsgbW9kaWZpY2F0aW9uIGFuZCBnZXQgcmlkIG9mIHRoaXMKKyAqIFhYWDogYS9hVHVyYm8gPworICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmJ1ZmZlciByZmJfMjQxN1tdID0geworCXsgMSwgMHg5OGQ0LAorCS8qICAgICBtb2RlIGEvWFIgIG1vZGUgYVR1cmJvICAgIG1vZGUgYiAgICAgbW9kZSBnICAgIG1vZGUgZ1R1cmJvICovCisJICAgIHsgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCwgMHgwMDAwMDAyMCB9IH0sCisJeyAyLCAweDk4ZDAsCisJICAgIHsgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCwgMHgwMjAwMTQwOCB9IH0sCisJeyAzLCAweDk4ZGMsCisJICAgIHsgMHgwMGEwMjBjMCwgMHgwMGEwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCwgMHgwMGUwMjBjMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCwgMHgxMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCwgMHgwMDJhMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCwgMHgwMDEwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCwgMHgwMDAyMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCwgMHgwMDczMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCwgMHgwMGY4MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMGU3MDAwMCwgMHgwMGU3MDAwMCwgMHg4MGU3MDAwMCwgMHg4MGU3MDAwMCwgMHgwMGU3MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCwgMHgwMDE0MDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCwgMHgwMDkxMDA0MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDA3MDAxYSwgMHgwMDA3MDAxYSwgMHgwMjA3MDAxYSwgMHgwMjA3MDAxYSwgMHgwMDA3MDAxYSB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCwgMHgwMDQxMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDgxMDAwMCwgMHgwMDgxMDAwMCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCwgMHgwMDgxMDA2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMCwgMHgwMDAyMDgwMywgMHgwMDAyMDgwMywgMHgwMDAyMDgwMyB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCwgMHgwMDAwMTY2MCB9IH0sCisJeyA2LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCwgMHgwMDAwMTY4OCB9IH0sCisJeyA2LCAweDk4YzQsCisJICAgIHsgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSwgMHgwMDAwMDAwMSB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCwgMHgwMDAwNjQwMCB9IH0sCisJeyA3LCAweDk4OWMsCisJICAgIHsgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCwgMHgwMDAwMDgwMCB9IH0sCisJeyA3LCAweDk4Y2MsCisJICAgIHsgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSwgMHgwMDAwMDAwZSB9IH0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmZnYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg1ay9yZmdhaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzU0ZDhjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoNWsvcmZnYWluLmgKQEAgLTAsMCArMSw1MTYgQEAKKy8qCisgKiBSRiBHYWluIG9wdGltaXphdGlvbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA5IFJleWsgRmxvZXRlciA8cmV5a0BvcGVuYnNkLm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IE5pY2sgS29zc2lmaWRpcyA8bWlja2ZsZW1tQGdtYWlsLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKi8KKworLyoKKyAqIE1vZGUtc3BlY2lmaWMgUkYgR2FpbiB0YWJsZSAoNjRieXRlcykgZm9yIFJGNTExMS81MTEyCisgKiAoUkY1MTEwIG9ubHkgY29tZXMgd2l0aCBBUjUyMTAgYW5kIG9ubHkgc3VwcG9ydHMgYS90dXJibyBhIG1vZGUgc28gaW5pdGlhbAorICogUkYgR2FpbiB2YWx1ZXMgYXJlIGluY2x1ZGVkIGluIEFSNUtfQVI1MjEwX0lOSSkKKyAqLworc3RydWN0IGF0aDVrX2luaV9yZmdhaW4geworCXUxNglyZmdfcmVnaXN0ZXI7CS8qIFJGIEdhaW4gcmVnaXN0ZXIgYWRkcmVzcyAqLworCXUzMglyZmdfdmFsdWVbMl07CS8qIFtmcmVxIChzZWUgYmVsb3cpXSAqLworfTsKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjUxMTEgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fNTExMVtdID0geworCS8qCQkJICAgICAgNUdoegkyR2h6CSovCisJeyBBUjVLX1JGX0dBSU4oMCksCXsgMHgwMDAwMDFhOSwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMSksCXsgMHgwMDAwMDFlOSwgMHgwMDAwMDA0MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMiksCXsgMHgwMDAwMDAyOSwgMHgwMDAwMDA4MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMyksCXsgMHgwMDAwMDA2OSwgMHgwMDAwMDE1MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNCksCXsgMHgwMDAwMDE5OSwgMHgwMDAwMDE5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNSksCXsgMHgwMDAwMDFkOSwgMHgwMDAwMDFkMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNiksCXsgMHgwMDAwMDAxOSwgMHgwMDAwMDAxMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNyksCXsgMHgwMDAwMDA1OSwgMHgwMDAwMDA0NCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOCksCXsgMHgwMDAwMDA5OSwgMHgwMDAwMDA4NCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOSksCXsgMHgwMDAwMDFhNSwgMHgwMDAwMDE0OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTApLAl7IDB4MDAwMDAxZTUsIDB4MDAwMDAxODggfSB9LAorCXsgQVI1S19SRl9HQUlOKDExKSwJeyAweDAwMDAwMDI1LCAweDAwMDAwMWM4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMiksCXsgMHgwMDAwMDFjOCwgMHgwMDAwMDAxNCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTMpLAl7IDB4MDAwMDAwMDgsIDB4MDAwMDAwNDIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE0KSwJeyAweDAwMDAwMDQ4LCAweDAwMDAwMDgyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNSksCXsgMHgwMDAwMDA4OCwgMHgwMDAwMDE3OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTYpLAl7IDB4MDAwMDAxOTgsIDB4MDAwMDAxYjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDE3KSwJeyAweDAwMDAwMWQ4LCAweDAwMDAwMWY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOCksCXsgMHgwMDAwMDAxOCwgMHgwMDAwMDAxMiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTkpLAl7IDB4MDAwMDAwNTgsIDB4MDAwMDAwNTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIwKSwJeyAweDAwMDAwMDk4LCAweDAwMDAwMDkyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMSksCXsgMHgwMDAwMDFhNCwgMHgwMDAwMDE3YyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjIpLAl7IDB4MDAwMDAxZTQsIDB4MDAwMDAxYmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIzKSwJeyAweDAwMDAwMDI0LCAweDAwMDAwMWZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNCksCXsgMHgwMDAwMDA2NCwgMHgwMDAwMDAwYSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjUpLAl7IDB4MDAwMDAwYTQsIDB4MDAwMDAwNGEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI2KSwJeyAweDAwMDAwMGU0LCAweDAwMDAwMDhhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNyksCXsgMHgwMDAwMDEwYSwgMHgwMDAwMDE1YSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjgpLAl7IDB4MDAwMDAxNGEsIDB4MDAwMDAxOWEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI5KSwJeyAweDAwMDAwMThhLCAweDAwMDAwMWRhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMCksCXsgMHgwMDAwMDFjYSwgMHgwMDAwMDAwZSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzEpLAl7IDB4MDAwMDAwMGEsIDB4MDAwMDAwNGUgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMyKSwJeyAweDAwMDAwMDRhLCAweDAwMDAwMDhlIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMyksCXsgMHgwMDAwMDA4YSwgMHgwMDAwMDE1ZSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzQpLAl7IDB4MDAwMDAxYmEsIDB4MDAwMDAxOWUgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM1KSwJeyAweDAwMDAwMWZhLCAweDAwMDAwMWRlIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNiksCXsgMHgwMDAwMDAzYSwgMHgwMDAwMDAwOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzcpLAl7IDB4MDAwMDAwN2EsIDB4MDAwMDAwNDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM4KSwJeyAweDAwMDAwMTg2LCAweDAwMDAwMDg5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOSksCXsgMHgwMDAwMDFjNiwgMHgwMDAwMDE3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDApLAl7IDB4MDAwMDAwMDYsIDB4MDAwMDAxYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQxKSwJeyAweDAwMDAwMDQ2LCAweDAwMDAwMWY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MiksCXsgMHgwMDAwMDA4NiwgMHgwMDAwMDAzOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDMpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwNzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ0KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGI5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDFiZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDYpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAxZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ3KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMDNkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDA3ZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDkpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwYmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUwKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MSksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTIpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUzKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTUpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU2KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTgpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU5KSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MCksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjEpLAl7IDB4MDAwMDAwYzYsIDB4MDAwMDAwZmQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYyKSwJeyAweDAwMDAwMGM2LCAweDAwMDAwMGZkIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBjNiwgMHgwMDAwMDBmZCB9IH0sCit9OworCisvKiBJbml0aWFsIFJGIEdhaW4gc2V0dGluZ3MgZm9yIFJGNTExMiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19pbmlfcmZnYWluIHJmZ2Fpbl81MTEyW10gPSB7CisJLyoJCQkgICAgICA1R2h6CTJHaHoJKi8KKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDA3LCAweDAwMDAwMDA3IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDQ3LCAweDAwMDAwMDQ3IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDg3LCAweDAwMDAwMDg3IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMWEwLCAweDAwMDAwMWEwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMWUwLCAweDAwMDAwMWUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDIwLCAweDAwMDAwMDIwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDYwLCAweDAwMDAwMDYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMWExLCAweDAwMDAwMWExIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMWUxLCAweDAwMDAwMWUxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDIxLCAweDAwMDAwMDIxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDA2MSwgMHgwMDAwMDA2MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAxNjIsIDB4MDAwMDAxNjIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMWEyLCAweDAwMDAwMWEyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDFlMiwgMHgwMDAwMDFlMiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMjIsIDB4MDAwMDAwMjIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDYyLCAweDAwMDAwMDYyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDE2MywgMHgwMDAwMDE2MyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAxYTMsIDB4MDAwMDAxYTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMWUzLCAweDAwMDAwMWUzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAyMywgMHgwMDAwMDAyMyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwNjMsIDB4MDAwMDAwNjMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMTg0LCAweDAwMDAwMTg0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDFjNCwgMHgwMDAwMDFjNCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDQsIDB4MDAwMDAwMDQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMWVhLCAweDAwMDAwMDBiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAyYSwgMHgwMDAwMDA0YiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwNmEsIDB4MDAwMDAwOGIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMGFhLCAweDAwMDAwMWFjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDFhYiwgMHgwMDAwMDFlYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAxZWIsIDB4MDAwMDAwMmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDJiLCAweDAwMDAwMDEyIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDA2YiwgMHgwMDAwMDA1MiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwYWIsIDB4MDAwMDAwOTIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMWFjLCAweDAwMDAwMTkzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDFlYywgMHgwMDAwMDFkMyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMmMsIDB4MDAwMDAwMTMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDNhLCAweDAwMDAwMDUzIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDA3YSwgMHgwMDAwMDA5MyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwYmEsIDB4MDAwMDAxOTQgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMWJiLCAweDAwMDAwMWQ0IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDFmYiwgMHgwMDAwMDAxNCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwM2IsIDB4MDAwMDAwM2EgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDdiLCAweDAwMDAwMDdhIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDBiYiwgMHgwMDAwMDBiYSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAxYmMsIDB4MDAwMDAxYmIgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMWZjLCAweDAwMDAwMWZiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAzYywgMHgwMDAwMDAzYiB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwN2MsIDB4MDAwMDAwN2IgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMGJjLCAweDAwMDAwMGJiIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDFiYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAxZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMDNjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDA3YyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwYmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDBmYywgMHgwMDAwMDBmYyB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwZmMsIDB4MDAwMDAwZmMgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMGZjLCAweDAwMDAwMGZjIH0gfSwKK307CisKKy8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDEzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MTNbXSA9IHsKKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWMxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWE4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFlOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE4OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDA5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA0OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTkwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFkMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxOTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWQxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNTEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDkxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE3OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTk5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFkOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMTkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDU5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA5OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZDkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKK307CisKKy8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgQVIyMzE2ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzIzMTZbXSA9IHsKKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGMwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGUwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTY4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFhOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxZTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA2OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwYTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGU4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBlOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxMzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTMwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE3MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGIwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGYwIH0gfSwKK307CisKKworLyogSW5pdGlhbCBSRiBHYWluIHNldHRpbmdzIGZvciBSRjU0MTMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfaW5pX3JmZ2FpbiByZmdhaW5fNTQxM1tdID0geworCS8qCQkJICAgICAgNUdoegkyR2h6CSovCisJeyBBUjVLX1JGX0dBSU4oMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMSksCXsgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMiksCXsgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMyksCXsgMHgwMDAwMDFhMSwgMHgwMDAwMDE2MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNCksCXsgMHgwMDAwMDFlMSwgMHgwMDAwMDFhMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNSksCXsgMHgwMDAwMDAyMSwgMHgwMDAwMDFlMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNiksCXsgMHgwMDAwMDA2MSwgMHgwMDAwMDAyMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNyksCXsgMHgwMDAwMDE4OCwgMHgwMDAwMDA2MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOCksCXsgMHgwMDAwMDFjOCwgMHgwMDAwMDE4OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oOSksCXsgMHgwMDAwMDAwOCwgMHgwMDAwMDFjOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTApLAl7IDB4MDAwMDAwNDgsIDB4MDAwMDAwMDggfSB9LAorCXsgQVI1S19SRl9HQUlOKDExKSwJeyAweDAwMDAwMDg4LCAweDAwMDAwMDQ4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMiksCXsgMHgwMDAwMDFhOSwgMHgwMDAwMDA4OCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTMpLAl7IDB4MDAwMDAxZTksIDB4MDAwMDAxNjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE0KSwJeyAweDAwMDAwMDI5LCAweDAwMDAwMWE5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNSksCXsgMHgwMDAwMDA2OSwgMHgwMDAwMDFlOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTYpLAl7IDB4MDAwMDAxZDAsIDB4MDAwMDAwMjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE3KSwJeyAweDAwMDAwMDEwLCAweDAwMDAwMDY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOCksCXsgMHgwMDAwMDA1MCwgMHgwMDAwMDE5MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTkpLAl7IDB4MDAwMDAwOTAsIDB4MDAwMDAxZDAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIwKSwJeyAweDAwMDAwMWIxLCAweDAwMDAwMDEwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMSksCXsgMHgwMDAwMDFmMSwgMHgwMDAwMDA1MCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjIpLAl7IDB4MDAwMDAwMzEsIDB4MDAwMDAwOTAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIzKSwJeyAweDAwMDAwMDcxLCAweDAwMDAwMTcxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNCksCXsgMHgwMDAwMDFiOCwgMHgwMDAwMDFiMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjUpLAl7IDB4MDAwMDAxZjgsIDB4MDAwMDAxZjEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI2KSwJeyAweDAwMDAwMDM4LCAweDAwMDAwMDMxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNyksCXsgMHgwMDAwMDA3OCwgMHgwMDAwMDA3MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjgpLAl7IDB4MDAwMDAxOTksIDB4MDAwMDAxOTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDI5KSwJeyAweDAwMDAwMWQ5LCAweDAwMDAwMWQ4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMCksCXsgMHgwMDAwMDAxOSwgMHgwMDAwMDAxOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzEpLAl7IDB4MDAwMDAwNTksIDB4MDAwMDAwNTggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMyKSwJeyAweDAwMDAwMDk5LCAweDAwMDAwMDk4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMyksCXsgMHgwMDAwMDBkOSwgMHgwMDAwMDE3OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzQpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAxYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM1KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMWY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDAzOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzcpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwNzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM4KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGI5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzOSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDApLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQxKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MiksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDMpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ0KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDYpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ3KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDkpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUwKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MSksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTIpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUzKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTUpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU2KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTgpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU5KSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MCksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjEpLAl7IDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYyKSwJeyAweDAwMDAwMGY5LCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MyksCXsgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9IH0sCit9OworCisKKy8qIEluaXRpYWwgUkYgR2FpbiBzZXR0aW5ncyBmb3IgUkYyNDI1ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aDVrX2luaV9yZmdhaW4gcmZnYWluXzI0MjVbXSA9IHsKKwl7IEFSNUtfUkZfR0FJTigwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWMxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDAxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDQxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDgxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTig4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMTg4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWM4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNDggfSB9LAorCXsgQVI1S19SRl9HQUlOKDEyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDg4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxMyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE4OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDA5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxNiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDA0OSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMTcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwODkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDE4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWIwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigxOSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFmMCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMzAgfSB9LAorCXsgQVI1S19SRl9HQUlOKDIxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDcwIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyMiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDE3MSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWYxIH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyNSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzMSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzEgfSB9LAorCXsgQVI1S19SRl9HQUlOKDI3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWI4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigyOCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDFmOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMjkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMzggfSB9LAorCXsgQVI1S19SRl9HQUlOKDMwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMDc4IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzMSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBiOCB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAxYjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDMzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMWY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDAzOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzUpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwNzkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM2KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGI5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTigzNyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oMzgpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDM5KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDEpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQyKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0MyksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDQpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ1KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0NiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNDcpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDQ4KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig0OSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTApLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDUxKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1MiksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTMpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU0KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1NSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTYpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDU3KSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig1OCksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNTkpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYwKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKKwl7IEFSNUtfUkZfR0FJTig2MSksCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDBmOSB9IH0sCisJeyBBUjVLX1JGX0dBSU4oNjIpLAl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwZjkgfSB9LAorCXsgQVI1S19SRl9HQUlOKDYzKSwJeyAweDAwMDAwMDAwLCAweDAwMDAwMGY5IH0gfSwKK307CisKKyNkZWZpbmUgQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTExCQk0CisjZGVmaW5lIEFSNUtfR0FJTl9DUk5fRklYX0JJVFNfNTExMgkJNworI2RlZmluZSBBUjVLX0dBSU5fQ1JOX01BWF9GSVhfQklUUwkJQVI1S19HQUlOX0NSTl9GSVhfQklUU181MTEyCisjZGVmaW5lIEFSNUtfR0FJTl9EWU5fQURKVVNUX0hJX01BUkdJTgkJMTUKKyNkZWZpbmUgQVI1S19HQUlOX0RZTl9BREpVU1RfTE9fTUFSR0lOCQkyMAorI2RlZmluZSBBUjVLX0dBSU5fQ0NLX1BST0JFX0NPUlIJCTUKKyNkZWZpbmUgQVI1S19HQUlOX0NDS19PRkRNX0dBSU5fREVMVEEJCTE1CisjZGVmaW5lIEFSNUtfR0FJTl9TVEVQX0NPVU5UCQkJMTAKKworLyogQ2hlY2sgaWYgb3VyIGN1cnJlbnQgbWVhc3VyZW1lbnQgaXMgaW5zaWRlIG91cgorICogY3VycmVudCB2YXJpYWJsZSBhdHRlbnVhdGlvbiB3aW5kb3cgKi8KKyNkZWZpbmUgQVI1S19HQUlOX0NIRUNLX0FESlVTVChfZykgCQlcCisJKChfZyktPmdfY3VycmVudCA8PSAoX2cpLT5nX2xvdyB8fCAoX2cpLT5nX2N1cnJlbnQgPj0gKF9nKS0+Z19oaWdoKQorCitzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcCB7CisJczgJCQkJZ29zX3BhcmFtW0FSNUtfR0FJTl9DUk5fTUFYX0ZJWF9CSVRTXTsKKwlzOAkJCQlnb3NfZ2FpbjsKK307CisKK3N0cnVjdCBhdGg1a19nYWluX29wdCB7CisJdTgJCQkJZ29fZGVmYXVsdDsKKwl1OAkJCQlnb19zdGVwc19jb3VudDsKKwljb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHRfc3RlcAlnb19zdGVwW0FSNUtfR0FJTl9TVEVQX0NPVU5UXTsKK307CisKKy8qCisgKiBQYXJhbWV0ZXJzIG9uIGdvc19wYXJhbToKKyAqIDEpIFR4IGNsaXAgUEhZIHJlZ2lzdGVyCisgKiAyKSBQV0QgOTAgUkYgcmVnaXN0ZXIKKyAqIDMpIFBXRCA4NCBSRiByZWdpc3RlcgorICogNCkgUkZHYWluU2VsIFJGIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRoNWtfZ2Fpbl9vcHQgcmZnYWluX29wdF81MTExID0geworCTQsCisJOSwKKwl7CisJCXsgeyA0LCAxLCAxLCAxIH0sIDYgfSwKKwkJeyB7IDQsIDAsIDEsIDEgfSwgNCB9LAorCQl7IHsgMywgMSwgMSwgMSB9LCAzIH0sCisJCXsgeyA0LCAwLCAwLCAxIH0sIDEgfSwKKwkJeyB7IDQsIDEsIDEsIDAgfSwgMCB9LAorCQl7IHsgNCwgMCwgMSwgMCB9LCAtMiB9LAorCQl7IHsgMywgMSwgMSwgMCB9LCAtMyB9LAorCQl7IHsgNCwgMCwgMCwgMCB9LCAtNCB9LAorCQl7IHsgMiwgMSwgMSwgMCB9LCAtNiB9CisJfQorfTsKKworLyoKKyAqIFBhcmFtZXRlcnMgb24gZ29zX3BhcmFtOgorICogMSkgTWl4Z2FpbiBvdnIgUkYgcmVnaXN0ZXIKKyAqIDIpIFBXRCAxMzggUkYgcmVnaXN0ZXIKKyAqIDMpIFBXRCAxMzcgUkYgcmVnaXN0ZXIKKyAqIDQpIFBXRCAxMzYgUkYgcmVnaXN0ZXIKKyAqIDUpIFBXRCAxMzIgUkYgcmVnaXN0ZXIKKyAqIDYpIFBXRCAxMzEgUkYgcmVnaXN0ZXIKKyAqIDcpIFBXRCAxMzAgUkYgcmVnaXN0ZXIKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGg1a19nYWluX29wdCByZmdhaW5fb3B0XzUxMTIgPSB7CisJMSwKKwk4LAorCXsKKwkJeyB7IDMsIDAsIDAsIDAsIDAsIDAsIDAgfSwgNiB9LAorCQl7IHsgMiwgMCwgMCwgMCwgMCwgMCwgMCB9LCAwIH0sCisJCXsgeyAxLCAwLCAwLCAwLCAwLCAwLCAwIH0sIC0zIH0sCisJCXsgeyAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sIC02IH0sCisJCXsgeyAwLCAxLCAxLCAwLCAwLCAwLCAwIH0sIC04IH0sCisJCXsgeyAwLCAxLCAxLCAwLCAxLCAxLCAwIH0sIC0xMCB9LAorCQl7IHsgMCwgMSwgMCwgMSwgMSwgMSwgMCB9LCAtMTMgfSwKKwkJeyB7IDAsIDEsIDAsIDEsIDEsIDAsIDEgfSwgLTE2IH0sCisJfQorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQppbmRleCAxMjA5ZDE0Li4xYTRkNGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9NYWtlZmlsZQpAQCAtOSw4ICs5LDExIEBACiAJCW1haW4ubyBcCiAJCXJlY3YubyBcCiAJCXhtaXQubyBcCisJCXZpcnR1YWwubyBcCiAJCXJjLm8KIAorYXRoOWstJChDT05GSUdfUENJKSArPSBwY2kubworYXRoOWstJChDT05GSUdfQVRIRVJPU19BUjcxWFgpICs9IGFoYi5vCiBhdGg5ay0kKENPTkZJR19BVEg5S19ERUJVRykgKz0gZGVidWcubwogCiBvYmotJChDT05GSUdfQVRIOUspICs9IGF0aDlrLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYWhiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU2NWM1MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FoYi5jCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgR2Fib3IgSnVob3MgPGp1aG9zZ0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoYykgMjAwOSBJbXJlIEthbG96IDxrYWxvekBvcGVud3J0Lm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0aDlrX3BsYXRmb3JtLmg+CisjaW5jbHVkZSAiYXRoOWsuaCIKKworLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLworc3RhdGljIHZvaWQgYXRoX2FoYl9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opCit7CisJKmNzeiA9IEwxX0NBQ0hFX0JZVEVTID4+IDI7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9haGJfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpb3VubWFwKHNjLT5tZW0pOworfQorCitzdGF0aWMgYm9vbCBhdGhfYWhiX2VlcHJvbV9yZWFkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhaC0+YWhfc2M7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShzYy0+ZGV2KTsKKwlzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisKKwlwZGF0YSA9IChzdHJ1Y3QgYXRoOWtfcGxhdGZvcm1fZGF0YSAqKSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAob2ZmID49IChBUlJBWV9TSVpFKHBkYXRhLT5lZXByb21fZGF0YSkpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIiVzOiBmbGFzaCByZWFkIGZhaWxlZCwgb2Zmc2V0ICUwOHggaXMgb3V0IG9mIHJhbmdlXG4iLAorCQkJCV9fZnVuY19fLCBvZmYpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJKmRhdGEgPSBwZGF0YS0+ZWVwcm9tX2RhdGFbb2ZmXTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfYnVzX29wcyBhdGhfYWhiX2J1c19vcHMgID0geworCS5yZWFkX2NhY2hlc2l6ZSA9IGF0aF9haGJfcmVhZF9jYWNoZXNpemUsCisJLmNsZWFudXAgPSBhdGhfYWhiX2NsZWFudXAsCisKKwkuZWVwcm9tX3JlYWQgPSBhdGhfYWhiX2VlcHJvbV9yZWFkLAorfTsKKworc3RhdGljIGludCBhdGhfYWhiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdm9pZCBfX2lvbWVtICptZW07CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaXJxOworCWludCByZXQgPSAwOworCXN0cnVjdCBhdGhfaHcgKmFoOworCisJaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhIHNwZWNpZmllZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgcmVzb3VyY2UgZm91bmRcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwltZW0gPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJaWYgKG1lbSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIElSUSByZXNvdXJjZSBmb3VuZFxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlpcnEgPSByZXMtPnN0YXJ0OworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkpICsKKwkJCQlzaXplb2Yoc3RydWN0IGF0aF9zb2Z0YyksICZhdGg5a19vcHMpOworCWlmIChodyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfaW91bm1hcDsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaHcpOworCisJYXBoeSA9IGh3LT5wcml2OworCXNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgKGFwaHkgKyAxKTsKKwlhcGh5LT5zYyA9IHNjOworCWFwaHktPmh3ID0gaHc7CisJc2MtPnByaV93aXBoeSA9IGFwaHk7CisJc2MtPmh3ID0gaHc7CisJc2MtPmRldiA9ICZwZGV2LT5kZXY7CisJc2MtPm1lbSA9IG1lbTsKKwlzYy0+YnVzX29wcyA9ICZhdGhfYWhiX2J1c19vcHM7CisJc2MtPmlycSA9IGlycTsKKworCXJldCA9IGF0aF9hdHRhY2goQVI1NDE2X0FSOTEwMF9ERVZJRCwgc2MpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYXR0YWNoIGRldmljZSwgZXJyPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlX2h3OworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgYXRoX2lzciwgSVJRRl9TSEFSRUQsICJhdGg5ayIsIHNjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlcXVlc3RfaXJxIGZhaWxlZCwgZXJyPSVkXG4iLCByZXQpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycl9kZXRhY2g7CisJfQorCisJYWggPSBzYy0+c2NfYWg7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4LCAiCisJICAgICAgICJBUiVzIFJGIFJldjoleCwgbWVtPTB4JWx4LCBpcnE9JWRcbiIsCisJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwKKwkgICAgICAgYXRoX21hY19iYl9uYW1lKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24pLAorCSAgICAgICBhaC0+aHdfdmVyc2lvbi5tYWNSZXYsCisJICAgICAgIGF0aF9yZl9uYW1lKChhaC0+aHdfdmVyc2lvbi5hbmFsb2c1R2h6UmV2ICYgQVJfUkFESU9fU1JFVl9NQUpPUikpLAorCSAgICAgICBhaC0+aHdfdmVyc2lvbi5waHlSZXYsCisJICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgaXJxKTsKKworCXJldHVybiAwOworCisgZXJyX2RldGFjaDoKKwlhdGhfZGV0YWNoKHNjKTsKKyBlcnJfZnJlZV9odzoKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisgZXJyX2lvdW5tYXA6CisJaW91bm1hcChtZW0pOworIGVycl9vdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhdGhfYWhiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoaHcpIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCisJCWF0aF9jbGVhbnVwKHNjKTsKKwkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF0aF9haGJfZHJpdmVyID0geworCS5wcm9iZSAgICAgID0gYXRoX2FoYl9wcm9iZSwKKwkucmVtb3ZlICAgICA9IGF0aF9haGJfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhdGg5ayIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitpbnQgYXRoX2FoYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXRoX2FoYl9kcml2ZXIpOworfQorCit2b2lkIGF0aF9haGJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdGhfYWhiX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCmluZGV4IDI1MWUyZDkuLjZjNWU4ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2FuaS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsMjMgKzE0LDE5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCi1zdGF0aWMgaW50IGF0aDlrX2h3X2dldF9hbmlfY2hhbm5lbF9pZHgoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGludCBhdGg5a19od19nZXRfYW5pX2NoYW5uZWxfaWR4KHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWhwLT5haF9hbmkpOyBpKyspIHsKLQkJaWYgKGFocC0+YWhfYW5pW2ldLmMuY2hhbm5lbCA9PSBjaGFuLT5jaGFubmVsKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFoLT5hbmkpOyBpKyspIHsKKwkJaWYgKGFoLT5hbmlbaV0uYyAmJgorCQkgICAgYWgtPmFuaVtpXS5jLT5jaGFubmVsID09IGNoYW4tPmNoYW5uZWwpCiAJCQlyZXR1cm4gaTsKLQkJaWYgKGFocC0+YWhfYW5pW2ldLmMuY2hhbm5lbCA9PSAwKSB7Ci0JCQlhaHAtPmFoX2FuaVtpXS5jLmNoYW5uZWwgPSBjaGFuLT5jaGFubmVsOwotCQkJYWhwLT5haF9hbmlbaV0uYy5jaGFubmVsRmxhZ3MgPSBjaGFuLT5jaGFubmVsRmxhZ3M7CisJCWlmIChhaC0+YW5pW2ldLmMgPT0gTlVMTCkgeworCQkJYWgtPmFuaVtpXS5jID0gY2hhbjsKIAkJCXJldHVybiBpOwogCQl9CiAJfQpAQCAtNDEsNDEgKzM3LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2FuaV9jb250cm9sKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBib29sIGF0aDlrX2h3X2FuaV9jb250cm9sKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSBlbnVtIGF0aDlrX2FuaV9jbWQgY21kLCBpbnQgcGFyYW0pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWhwLT5haF9jdXJhbmk7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZSA9IGFoLT5jdXJhbmk7CiAKLQlzd2l0Y2ggKGNtZCAmIGFocC0+YWhfYW5pX2Z1bmN0aW9uKSB7CisJc3dpdGNoIChjbWQgJiBhaC0+YW5pX2Z1bmN0aW9uKSB7CiAJY2FzZSBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUw6ewogCQl1MzIgbGV2ZWwgPSBwYXJhbTsKIAotCQlpZiAobGV2ZWwgPj0gQVJSQVlfU0laRShhaHAtPmFoX3RvdGFsU2l6ZURlc2lyZWQpKSB7CisJCWlmIChsZXZlbCA+PSBBUlJBWV9TSVpFKGFoLT50b3RhbFNpemVEZXNpcmVkKSkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAogCQkJCSJsZXZlbCBvdXQgb2YgcmFuZ2UgKCV1ID4gJXUpXG4iLAogCQkJCWxldmVsLAotCQkJCSh1bnNpZ25lZClBUlJBWV9TSVpFKGFocC0+YWhfdG90YWxTaXplRGVzaXJlZCkpOworCQkJCSh1bnNpZ25lZClBUlJBWV9TSVpFKGFoLT50b3RhbFNpemVEZXNpcmVkKSk7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwKIAkJCSAgICAgIEFSX1BIWV9ERVNJUkVEX1NaX1RPVF9ERVMsCi0JCQkgICAgICBhaHAtPmFoX3RvdGFsU2l6ZURlc2lyZWRbbGV2ZWxdKTsKKwkJCSAgICAgIGFoLT50b3RhbFNpemVEZXNpcmVkW2xldmVsXSk7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9BR0NfQ1RMMSwKIAkJCSAgICAgIEFSX1BIWV9BR0NfQ1RMMV9DT0FSU0VfTE9XLAotCQkJICAgICAgYWhwLT5haF9jb2Fyc2VMb3dbbGV2ZWxdKTsKKwkJCSAgICAgIGFoLT5jb2Fyc2VfbG93W2xldmVsXSk7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9BR0NfQ1RMMSwKIAkJCSAgICAgIEFSX1BIWV9BR0NfQ1RMMV9DT0FSU0VfSElHSCwKLQkJCSAgICAgIGFocC0+YWhfY29hcnNlSGlnaFtsZXZlbF0pOworCQkJICAgICAgYWgtPmNvYXJzZV9oaWdoW2xldmVsXSk7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9GSU5EX1NJRywKIAkJCSAgICAgIEFSX1BIWV9GSU5EX1NJR19GSVJQV1IsCi0JCQkgICAgICBhaHAtPmFoX2ZpcnB3cltsZXZlbF0pOworCQkJICAgICAgYWgtPmZpcnB3cltsZXZlbF0pOwogCiAJCWlmIChsZXZlbCA+IGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfbml1cCsrOworCQkJYWgtPnN0YXRzLmFzdF9hbmlfbml1cCsrOwogCQllbHNlIGlmIChsZXZlbCA8IGFuaVN0YXRlLT5ub2lzZUltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfbmlkb3duKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9uaWRvd24rKzsKIAkJYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCA9IGxldmVsOwogCQlicmVhazsKIAl9CkBAIC0xMjksOSArMTI0LDkgQEAKIAogCQlpZiAoIW9uICE9IGFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZikgewogCQkJaWYgKG9uKQotCQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9vZmRtb24rKzsKKwkJCQlhaC0+c3RhdHMuYXN0X2FuaV9vZmRtb24rKzsKIAkJCWVsc2UKLQkJCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfb2ZkbW9mZisrOworCQkJCWFoLT5zdGF0cy5hc3RfYW5pX29mZG1vZmYrKzsKIAkJCWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZiA9ICFvbjsKIAkJfQogCQlicmVhazsKQEAgLTE0NSw5ICsxNDAsOSBAQAogCQkJICAgICAgd2Vha1NpZ1RockNja1toaWdoXSk7CiAJCWlmIChoaWdoICE9IGFuaVN0YXRlLT5jY2tXZWFrU2lnVGhyZXNob2xkKSB7CiAJCQlpZiAoaGlnaCkKLQkJCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfY2NraGlnaCsrOworCQkJCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2hpZ2grKzsKIAkJCWVsc2UKLQkJCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfY2NrbG93Kys7CisJCQkJYWgtPnN0YXRzLmFzdF9hbmlfY2NrbG93Kys7CiAJCQlhbmlTdGF0ZS0+Y2NrV2Vha1NpZ1RocmVzaG9sZCA9IGhpZ2g7CiAJCX0KIAkJYnJlYWs7CkBAIC0xNjcsOSArMTYyLDkgQEAKIAkJCSAgICAgIEFSX1BIWV9GSU5EX1NJR19GSVJTVEVQLAogCQkJICAgICAgZmlyc3RlcFtsZXZlbF0pOwogCQlpZiAobGV2ZWwgPiBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsKQotCQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX3N0ZXB1cCsrOworCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3RlcHVwKys7CiAJCWVsc2UgaWYgKGxldmVsIDwgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCkKLQkJCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9zdGVwZG93bisrOworCQkJYWgtPnN0YXRzLmFzdF9hbmlfc3RlcGRvd24rKzsKIAkJYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA9IGxldmVsOwogCQlicmVhazsKIAl9CkBAIC0xOTAsOSArMTg1LDkgQEAKIAkJCSAgICAgIEFSX1BIWV9USU1JTkc1X0NZQ1BXUl9USFIxLAogCQkJICAgICAgY3ljcHdyVGhyMVtsZXZlbF0pOwogCQlpZiAobGV2ZWwgPiBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfc3B1cnVwKys7CisJCQlhaC0+c3RhdHMuYXN0X2FuaV9zcHVydXArKzsKIAkJZWxzZSBpZiAobGV2ZWwgPCBhbmlTdGF0ZS0+c3B1ckltbXVuaXR5TGV2ZWwpCi0JCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfc3B1cmRvd24rKzsKKwkJCWFoLT5zdGF0cy5hc3RfYW5pX3NwdXJkb3duKys7CiAJCWFuaVN0YXRlLT5zcHVySW1tdW5pdHlMZXZlbCA9IGxldmVsOwogCQlicmVhazsKIAl9CkBAIC0yMjMsNyArMjE4LDcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgIHN0cnVjdCBhdGg5a19taWJfc3RhdHMgKnN0YXRzKQogewogCXN0YXRzLT5hY2tyY3ZfYmFkICs9IFJFR19SRUFEKGFoLCBBUl9BQ0tfRkFJTCk7CkBAIC0yMzMsMTggKzIyOCwxNyBAQAogCXN0YXRzLT5iZWFjb25zICs9IFJFR19SRUFEKGFoLCBBUl9CRUFDT05fQ05UKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfYW5pX3Jlc3RhcnQoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfYW5pX3Jlc3RhcnQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwogCiAJaWYgKCFET19BTkkoYWgpKQogCQlyZXR1cm47CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAogCWFuaVN0YXRlLT5saXN0ZW5UaW1lID0gMDsKLQlpZiAoYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzKSB7CisJaWYgKGFoLT5oYXNfaHdfcGh5Y291bnRlcnMpIHsKIAkJaWYgKGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2ggPiBBUl9QSFlfQ09VTlRNQVgpIHsKIAkJCWFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZSA9IDA7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCkBAIC0yNzAsMjQgKzI2NCwyMiBAQAogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfTUFTS18xLCBBUl9QSFlfRVJSX09GRE1fVElNSU5HKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSX01BU0tfMiwgQVJfUEhZX0VSUl9DQ0tfVElNSU5HKTsKIAotCQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaHAtPmFoX21pYlN0YXRzKTsKKwkJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKIAl9CiAJYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA9IDA7CiAJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX29mZG1fZXJyX3RyaWdnZXIoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX29mZG1fZXJyX3RyaWdnZXIoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7Ci0JZW51bSB3aXJlbGVzc19tb2RlIG1vZGU7CiAJaW50MzJfdCByc3NpOwogCiAJaWYgKCFET19BTkkoYWgpKQogCQlyZXR1cm47CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAogCWlmIChhbmlTdGF0ZS0+bm9pc2VJbW11bml0eUxldmVsIDwgSEFMX05PSVNFX0lNTVVORV9NQVgpIHsKIAkJaWYgKGF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwsCkBAIC0zMDMsMTQgKzI5NSwxNCBAQAogCQl9CiAJfQogCi0JaWYgKGFoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwlpZiAoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewogCQlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IEhBTF9GSVJTVF9TVEVQX01BWCkgewogCQkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKIAkJfQogCQlyZXR1cm47CiAJfQotCXJzc2kgPSBCRUFDT05fUlNTSShhaHApOworCXJzc2kgPSBCRUFDT05fUlNTSShhaCk7CiAJaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockhpZ2gpIHsKIAkJaWYgKCFhbmlTdGF0ZS0+b2ZkbVdlYWtTaWdEZXRlY3RPZmYpIHsKIAkJCWlmIChhdGg5a19od19hbmlfY29udHJvbChhaCwKQEAgLTMzNiw4ICszMjgsNyBAQAogCQkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKIAkJcmV0dXJuOwogCX0gZWxzZSB7Ci0JCW1vZGUgPSBhdGg5a19od19jaGFuMndtb2RlKGFoLCBjaGFuKTsKLQkJaWYgKG1vZGUgPT0gQVRIOUtfTU9ERV8xMUcgfHwgbW9kZSA9PSBBVEg5S19NT0RFXzExQikgeworCQlpZiAoY29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CiAJCQlpZiAoIWFuaVN0YXRlLT5vZmRtV2Vha1NpZ0RldGVjdE9mZikKIAkJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwKIAkJCQkgICAgIEFUSDlLX0FOSV9PRkRNX1dFQUtfU0lHTkFMX0RFVEVDVElPTiwKQEAgLTM1MCwzOSArMzQxLDM2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmlfY2NrX2Vycl90cmlnZ2VyKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9jY2tfZXJyX3RyaWdnZXIoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7Ci0JZW51bSB3aXJlbGVzc19tb2RlIG1vZGU7CiAJaW50MzJfdCByc3NpOwogCiAJaWYgKCFET19BTkkoYWgpKQogCQlyZXR1cm47CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAlpZiAoYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCA8IEhBTF9OT0lTRV9JTU1VTkVfTUFYKSB7CiAJCWlmIChhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMLAogCQkJCQkgYW5pU3RhdGUtPm5vaXNlSW1tdW5pdHlMZXZlbCArIDEpKSB7CiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0JaWYgKGFoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwlpZiAoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewogCQlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IEhBTF9GSVJTVF9TVEVQX01BWCkgewogCQkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCQkgICAgIGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgKyAxKTsKIAkJfQogCQlyZXR1cm47CiAJfQotCXJzc2kgPSBCRUFDT05fUlNTSShhaHApOworCXJzc2kgPSBCRUFDT05fUlNTSShhaCk7CiAJaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockxvdykgewogCQlpZiAoYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCA8IEhBTF9GSVJTVF9TVEVQX01BWCkKIAkJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwKIAkJCQkJICAgICBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsICsgMSk7CiAJfSBlbHNlIHsKLQkJbW9kZSA9IGF0aDlrX2h3X2NoYW4yd21vZGUoYWgsIGNoYW4pOwotCQlpZiAobW9kZSA9PSBBVEg5S19NT0RFXzExRyB8fCBtb2RlID09IEFUSDlLX01PREVfMTFCKSB7CisJCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKIAkJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID4gMCkKIAkJCQlhdGg5a19od19hbmlfY29udHJvbChhaCwKIAkJCQkJICAgICBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwgMCk7CkBAIC0zOTAsMjIgKzM3OCwyMSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYW5pX2xvd2VyX2ltbXVuaXR5KHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuaV9sb3dlcl9pbW11bml0eShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXN0cnVjdCBhcjU0MTZBbmlTdGF0ZSAqYW5pU3RhdGU7CiAJaW50MzJfdCByc3NpOwogCi0JYW5pU3RhdGUgPSBhaHAtPmFoX2N1cmFuaTsKKwlhbmlTdGF0ZSA9IGFoLT5jdXJhbmk7CiAKLQlpZiAoYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCWlmIChhbmlTdGF0ZS0+Zmlyc3RlcExldmVsID4gMCkgewogCQkJaWYgKGF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfRklSU1RFUF9MRVZFTCwKIAkJCQkJCSBhbmlTdGF0ZS0+Zmlyc3RlcExldmVsIC0gMSkpCiAJCQkJcmV0dXJuOwogCQl9CiAJfSBlbHNlIHsKLQkJcnNzaSA9IEJFQUNPTl9SU1NJKGFocCk7CisJCXJzc2kgPSBCRUFDT05fUlNTSShhaCk7CiAJCWlmIChyc3NpID4gYW5pU3RhdGUtPnJzc2lUaHJIaWdoKSB7CiAJCQkvKiBYWFg6IEhhbmRsZSBtZSAqLwogCQl9IGVsc2UgaWYgKHJzc2kgPiBhbmlTdGF0ZS0+cnNzaVRockxvdykgewpAQCAtNDQ0LDkgKzQzMSw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50MzJfdCBhdGg5a19od19hbmlfZ2V0X2xpc3Rlbl90aW1lKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQzMl90IGF0aDlrX2h3X2FuaV9nZXRfbGlzdGVuX3RpbWUoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwogCXUzMiB0eEZyYW1lQ291bnQsIHJ4RnJhbWVDb3VudCwgY3ljbGVDb3VudDsKIAlpbnQzMl90IGxpc3RlblRpbWU7CkBAIC00NTUsMTEgKzQ0MSwxMSBAQAogCXJ4RnJhbWVDb3VudCA9IFJFR19SRUFEKGFoLCBBUl9SRkNOVCk7CiAJY3ljbGVDb3VudCA9IFJFR19SRUFEKGFoLCBBUl9DQ0NOVCk7CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAlpZiAoYW5pU3RhdGUtPmN5Y2xlQ291bnQgPT0gMCB8fCBhbmlTdGF0ZS0+Y3ljbGVDb3VudCA+IGN5Y2xlQ291bnQpIHsKIAogCQlsaXN0ZW5UaW1lID0gMDsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX2x6ZXJvKys7CisJCWFoLT5zdGF0cy5hc3RfYW5pX2x6ZXJvKys7CiAJfSBlbHNlIHsKIAkJaW50MzJfdCBjY2RlbHRhID0gY3ljbGVDb3VudCAtIGFuaVN0YXRlLT5jeWNsZUNvdW50OwogCQlpbnQzMl90IHJmZGVsdGEgPSByeEZyYW1lQ291bnQgLSBhbmlTdGF0ZS0+cnhGcmFtZUNvdW50OwpAQCAtNDczLDI1ICs0NTksMjQgQEAKIAlyZXR1cm4gbGlzdGVuVGltZTsKIH0KIAotdm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+Y3VyY2hhbjsKIAlpbnQgaW5kZXg7CiAKIAlpZiAoIURPX0FOSShhaCkpCiAJCXJldHVybjsKIAogCWluZGV4ID0gYXRoOWtfaHdfZ2V0X2FuaV9jaGFubmVsX2lkeChhaCwgY2hhbik7Ci0JYW5pU3RhdGUgPSAmYWhwLT5haF9hbmlbaW5kZXhdOwotCWFocC0+YWhfY3VyYW5pID0gYW5pU3RhdGU7CisJYW5pU3RhdGUgPSAmYWgtPmFuaVtpbmRleF07CisJYWgtPmN1cmFuaSA9IGFuaVN0YXRlOwogCi0JaWYgKERPX0FOSShhaCkgJiYgYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OCi0JICAgICYmIGFoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoRE9fQU5JKGFoKSAmJiBhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04KKwkgICAgJiYgYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksCi0JCQkiUmVzZXQgQU5JIHN0YXRlIG9wbW9kZSAldVxuIiwgYWgtPmFoX29wbW9kZSk7Ci0JCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9yZXNldCsrOworCQkJIlJlc2V0IEFOSSBzdGF0ZSBvcG1vZGUgJXVcbiIsIGFoLT5vcG1vZGUpOworCQlhaC0+c3RhdHMuYXN0X2FuaV9yZXNldCsrOwogCiAJCWF0aDlrX2h3X2FuaV9jb250cm9sKGFoLCBBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwsIDApOwogCQlhdGg5a19od19hbmlfY29udHJvbChhaCwgQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwsIDApOwpAQCAtNTA0LDE1ICs0ODksMTUgQEAKIAkJYXRoOWtfaHdfc2V0cnhmaWx0ZXIoYWgsIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKGFoKSB8CiAJCQkJICAgICBBVEg5S19SWF9GSUxURVJfUEhZRVJSKTsKIAotCQlpZiAoYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkJYWhwLT5haF9jdXJhbmktPm9mZG1UcmlnSGlnaCA9Ci0JCQkJYWgtPmFoX2NvbmZpZy5vZmRtX3RyaWdfaGlnaDsKLQkJCWFocC0+YWhfY3VyYW5pLT5vZmRtVHJpZ0xvdyA9Ci0JCQkJYWgtPmFoX2NvbmZpZy5vZmRtX3RyaWdfbG93OwotCQkJYWhwLT5haF9jdXJhbmktPmNja1RyaWdIaWdoID0KLQkJCQlhaC0+YWhfY29uZmlnLmNja190cmlnX2hpZ2g7Ci0JCQlhaHAtPmFoX2N1cmFuaS0+Y2NrVHJpZ0xvdyA9Ci0JCQkJYWgtPmFoX2NvbmZpZy5jY2tfdHJpZ19sb3c7CisJCWlmIChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCQlhaC0+Y3VyYW5pLT5vZmRtVHJpZ0hpZ2ggPQorCQkJCWFoLT5jb25maWcub2ZkbV90cmlnX2hpZ2g7CisJCQlhaC0+Y3VyYW5pLT5vZmRtVHJpZ0xvdyA9CisJCQkJYWgtPmNvbmZpZy5vZmRtX3RyaWdfbG93OworCQkJYWgtPmN1cmFuaS0+Y2NrVHJpZ0hpZ2ggPQorCQkJCWFoLT5jb25maWcuY2NrX3RyaWdfaGlnaDsKKwkJCWFoLT5jdXJhbmktPmNja1RyaWdMb3cgPQorCQkJCWFoLT5jb25maWcuY2NrX3RyaWdfbG93OwogCQl9CiAJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKIAkJcmV0dXJuOwpAQCAtNTMzLDcgKzUxOCw3IEBACiAJaWYgKGFuaVN0YXRlLT5maXJzdGVwTGV2ZWwgIT0gMCkKIAkJYXRoOWtfaHdfYW5pX2NvbnRyb2woYWgsIEFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMLAogCQkJCSAgICAgYW5pU3RhdGUtPmZpcnN0ZXBMZXZlbCk7Ci0JaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgeworCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CiAJCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKGFoLCBhdGg5a19od19nZXRyeGZpbHRlcihhaCkgJgogCQkJCSAgICAgfkFUSDlLX1JYX0ZJTFRFUl9QSFlFUlIpOwogCQlhdGg5a19hbmlfcmVzdGFydChhaCk7CkBAIC01NDcsMzEgKzUzMiwzMyBAQAogCX0KIH0KIAotdm9pZCBhdGg5a19od19hbmlfbW9uaXRvcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCit2b2lkIGF0aDlrX2h3X2FuaV9tb25pdG9yKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMsCiAJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZTsKIAlpbnQzMl90IGxpc3RlblRpbWU7CiAKLQlhbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOwotCWFocC0+YWhfc3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKKwlpZiAoIURPX0FOSShhaCkpCisJCXJldHVybjsKKworCWFuaVN0YXRlID0gYWgtPmN1cmFuaTsKKwlhaC0+c3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKIAogCWxpc3RlblRpbWUgPSBhdGg5a19od19hbmlfZ2V0X2xpc3Rlbl90aW1lKGFoKTsKIAlpZiAobGlzdGVuVGltZSA8IDApIHsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX2xuZWcrKzsKKwkJYWgtPnN0YXRzLmFzdF9hbmlfbG5lZysrOwogCQlhdGg5a19hbmlfcmVzdGFydChhaCk7CiAJCXJldHVybjsKIAl9CiAKIAlhbmlTdGF0ZS0+bGlzdGVuVGltZSArPSBsaXN0ZW5UaW1lOwogCi0JaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgeworCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CiAJCXUzMiBwaHlDbnQxLCBwaHlDbnQyOwogCQl1MzIgb2ZkbVBoeUVyckNudCwgY2NrUGh5RXJyQ250OwogCi0JCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOworCQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaC0+YWhfbWliU3RhdHMpOwogCiAJCXBoeUNudDEgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0VSUl8xKTsKIAkJcGh5Q250MiA9IFJFR19SRUFEKGFoLCBBUl9QSFlfRVJSXzIpOwpAQCAtNjA0LDI3ICs1OTEsMjQgQEAKIAkJfQogCiAJCW9mZG1QaHlFcnJDbnQgPSBwaHlDbnQxIC0gYW5pU3RhdGUtPm9mZG1QaHlFcnJCYXNlOwotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KKwkJYWgtPnN0YXRzLmFzdF9hbmlfb2ZkbWVycnMgKz0KIAkJCW9mZG1QaHlFcnJDbnQgLSBhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50OwogCQlhbmlTdGF0ZS0+b2ZkbVBoeUVyckNvdW50ID0gb2ZkbVBoeUVyckNudDsKIAogCQljY2tQaHlFcnJDbnQgPSBwaHlDbnQyIC0gYW5pU3RhdGUtPmNja1BoeUVyckJhc2U7Ci0JCWFocC0+YWhfc3RhdHMuYXN0X2FuaV9jY2tlcnJzICs9CisJCWFoLT5zdGF0cy5hc3RfYW5pX2Nja2VycnMgKz0KIAkJCWNja1BoeUVyckNudCAtIGFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudDsKIAkJYW5pU3RhdGUtPmNja1BoeUVyckNvdW50ID0gY2NrUGh5RXJyQ250OwogCX0KIAotCWlmICghRE9fQU5JKGFoKSkKLQkJcmV0dXJuOwotCi0JaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gNSAqIGFocC0+YWhfYW5pUGVyaW9kKSB7CisJaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gNSAqIGFoLT5hbmlwZXJpb2QpIHsKIAkJaWYgKGFuaVN0YXRlLT5vZmRtUGh5RXJyQ291bnQgPD0gYW5pU3RhdGUtPmxpc3RlblRpbWUgKgogCQkgICAgYW5pU3RhdGUtPm9mZG1UcmlnTG93IC8gMTAwMCAmJgogCQkgICAgYW5pU3RhdGUtPmNja1BoeUVyckNvdW50IDw9IGFuaVN0YXRlLT5saXN0ZW5UaW1lICoKIAkJICAgIGFuaVN0YXRlLT5jY2tUcmlnTG93IC8gMTAwMCkKIAkJCWF0aDlrX2h3X2FuaV9sb3dlcl9pbW11bml0eShhaCk7CiAJCWF0aDlrX2FuaV9yZXN0YXJ0KGFoKTsKLQl9IGVsc2UgaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gYWhwLT5haF9hbmlQZXJpb2QpIHsKKwl9IGVsc2UgaWYgKGFuaVN0YXRlLT5saXN0ZW5UaW1lID4gYWgtPmFuaXBlcmlvZCkgewogCQlpZiAoYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA+IGFuaVN0YXRlLT5saXN0ZW5UaW1lICoKIAkJICAgIGFuaVN0YXRlLT5vZmRtVHJpZ0hpZ2ggLyAxMDAwKSB7CiAJCQlhdGg5a19od19hbmlfb2ZkbV9lcnJfdHJpZ2dlcihhaCk7CkBAIC02MzgsMjAgKzYyMiwxNiBAQAogCX0KIH0KIAotYm9vbCBhdGg5a19od19waHljb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitib29sIGF0aDlrX2h3X3BoeWNvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYWhwLT5haF9oYXNId1BoeUNvdW50ZXJzID8gdHJ1ZSA6IGZhbHNlOworCXJldHVybiBhaC0+aGFzX2h3X3BoeWNvdW50ZXJzID8gdHJ1ZSA6IGZhbHNlOwogfQogCi12b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19lbmFibGVfbWliX2NvdW50ZXJzKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJFbmFibGUgTUlCIGNvdW50ZXJzXG4iKTsKIAotCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOworCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFoLT5haF9taWJTdGF0cyk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfT0ZETSwgMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9GSUxUX0NDSywgMCk7CkBAIC02NjIsMjEgKzY0MiwxOCBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl9NQVNLXzIsIEFSX1BIWV9FUlJfQ0NLX1RJTUlORyk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKQorLyogRnJlZXplIHRoZSBNSUIgY291bnRlcnMsIGdldCB0aGUgc3RhdHMgYW5kIHRoZW4gY2xlYXIgdGhlbSAqLwordm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLCAiRGlzYWJsZSBNSUIgY291bnRlcnNcbiIpOwotCi0JUkVHX1dSSVRFKGFoLCBBUl9NSUJDLCBBUl9NSUJDX0ZNQyB8IEFSX01JQkNfQ01DKTsKLQotCWF0aDlrX2h3X3VwZGF0ZV9taWJzdGF0cyhhaCwgJmFocC0+YWhfbWliU3RhdHMpOwotCisJUkVHX1dSSVRFKGFoLCBBUl9NSUJDLCBBUl9NSUJDX0ZNQyk7CisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKKwlSRUdfV1JJVEUoYWgsIEFSX01JQkMsIEFSX01JQkNfQ01DKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0ZJTFRfT0ZETSwgMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9GSUxUX0NDSywgMCk7CiB9CiAKLXUzMiBhdGg5a19od19HZXRNaWJDeWNsZUNvdW50c1BjdChzdHJ1Y3QgYXRoX2hhbCAqYWgsCit1MzIgYXRoOWtfaHdfR2V0TWliQ3ljbGVDb3VudHNQY3Qoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICB1MzIgKnJ4Y19wY250LAogCQkJCSAgdTMyICpyeGZfcGNudCwKIAkJCQkgIHUzMiAqdHhmX3BjbnQpCkBAIC03MjEsMTAgKzY5OCw5IEBACiAgKiBhbnkgb2YgdGhlIE1JQiBjb3VudGVycyBvdmVyZmxvdy90cmlnZ2VyIHNvIGRvbid0IGFzc3VtZSB3ZSdyZQogICogaGVyZSBiZWNhdXNlIGEgUEhZIGVycm9yIGNvdW50ZXIgdHJpZ2dlcmVkLgogICovCi12b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2hhbCAqYWgsCit2b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgIGNvbnN0IHN0cnVjdCBhdGg5a19ub2RlX3N0YXRzICpzdGF0cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiBwaHlDbnQxLCBwaHlDbnQyOwogCiAJLyogUmVzZXQgdGhlc2UgY291bnRlcnMgcmVnYXJkbGVzcyAqLwpAQCAtNzM0LDggKzcxMCw4IEBACiAJCVJFR19XUklURShhaCwgQVJfU0xQX01JQl9DVFJMLCBBUl9TTFBfTUlCX0NMRUFSKTsKIAogCS8qIENsZWFyIHRoZSBtaWIgY291bnRlcnMgYW5kIHNhdmUgdGhlbSBpbiB0aGUgc3RhdHMgKi8KLQlhdGg5a19od191cGRhdGVfbWlic3RhdHMoYWgsICZhaHAtPmFoX21pYlN0YXRzKTsKLQlhaHAtPmFoX3N0YXRzLmFzdF9ub2Rlc3RhdHMgPSAqc3RhdHM7CisJYXRoOWtfaHdfdXBkYXRlX21pYnN0YXRzKGFoLCAmYWgtPmFoX21pYlN0YXRzKTsKKwlhaC0+c3RhdHMuYXN0X25vZGVzdGF0cyA9ICpzdGF0czsKIAogCWlmICghRE9fQU5JKGFoKSkKIAkJcmV0dXJuOwpAQCAtNzQ1LDE3ICs3MjEsMTcgQEAKIAlwaHlDbnQyID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlJfMik7CiAJaWYgKCgocGh5Q250MSAmIEFSX01JQkNOVF9JTlRSTUFTSykgPT0gQVJfTUlCQ05UX0lOVFJNQVNLKSB8fAogCSAgICAoKHBoeUNudDIgJiBBUl9NSUJDTlRfSU5UUk1BU0spID09IEFSX01JQkNOVF9JTlRSTUFTSykpIHsKLQkJc3RydWN0IGFyNTQxNkFuaVN0YXRlICphbmlTdGF0ZSA9IGFocC0+YWhfY3VyYW5pOworCQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFuaVN0YXRlID0gYWgtPmN1cmFuaTsKIAkJdTMyIG9mZG1QaHlFcnJDbnQsIGNja1BoeUVyckNudDsKIAogCQkvKiBOQjogb25seSB1c2UgYXN0X2FuaV8qZXJycyB3aXRoIEFIX1BSSVZBVEVfRElBRyAqLwogCQlvZmRtUGh5RXJyQ250ID0gcGh5Q250MSAtIGFuaVN0YXRlLT5vZmRtUGh5RXJyQmFzZTsKLQkJYWhwLT5haF9zdGF0cy5hc3RfYW5pX29mZG1lcnJzICs9CisJCWFoLT5zdGF0cy5hc3RfYW5pX29mZG1lcnJzICs9CiAJCQlvZmRtUGh5RXJyQ250IC0gYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudDsKIAkJYW5pU3RhdGUtPm9mZG1QaHlFcnJDb3VudCA9IG9mZG1QaHlFcnJDbnQ7CiAKIAkJY2NrUGh5RXJyQ250ID0gcGh5Q250MiAtIGFuaVN0YXRlLT5jY2tQaHlFcnJCYXNlOwotCQlhaHAtPmFoX3N0YXRzLmFzdF9hbmlfY2NrZXJycyArPQorCQlhaC0+c3RhdHMuYXN0X2FuaV9jY2tlcnJzICs9CiAJCQljY2tQaHlFcnJDbnQgLSBhbmlTdGF0ZS0+Y2NrUGh5RXJyQ291bnQ7CiAJCWFuaVN0YXRlLT5jY2tQaHlFcnJDb3VudCA9IGNja1BoeUVyckNudDsKIApAQCAtNzc0LDkgKzc1MCw4IEBACiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9zZXR1cChzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X2FuaV9zZXR1cChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJY29uc3QgaW50IHRvdGFsU2l6ZURlc2lyZWRbXSA9IHsgLTU1LCAtNTUsIC01NSwgLTU1LCAtNjIgfTsKQEAgLTc4NSw2NiArNzYwLDYzIEBACiAJY29uc3QgaW50IGZpcnB3cltdID0geyAtNzgsIC03OCwgLTc4LCAtNzgsIC04MCB9OwogCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQlhaHAtPmFoX3RvdGFsU2l6ZURlc2lyZWRbaV0gPSB0b3RhbFNpemVEZXNpcmVkW2ldOwotCQlhaHAtPmFoX2NvYXJzZUhpZ2hbaV0gPSBjb2Fyc2VIaWdoW2ldOwotCQlhaHAtPmFoX2NvYXJzZUxvd1tpXSA9IGNvYXJzZUxvd1tpXTsKLQkJYWhwLT5haF9maXJwd3JbaV0gPSBmaXJwd3JbaV07CisJCWFoLT50b3RhbFNpemVEZXNpcmVkW2ldID0gdG90YWxTaXplRGVzaXJlZFtpXTsKKwkJYWgtPmNvYXJzZV9oaWdoW2ldID0gY29hcnNlSGlnaFtpXTsKKwkJYWgtPmNvYXJzZV9sb3dbaV0gPSBjb2Fyc2VMb3dbaV07CisJCWFoLT5maXJwd3JbaV0gPSBmaXJwd3JbaV07CiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9hdHRhY2goc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19hbmlfYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJaW50IGk7CiAKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJBdHRhY2ggQU5JXG4iKTsKIAotCWFocC0+YWhfaGFzSHdQaHlDb3VudGVycyA9IDE7CisJYWgtPmhhc19od19waHljb3VudGVycyA9IDE7CiAKLQltZW1zZXQoYWhwLT5haF9hbmksIDAsIHNpemVvZihhaHAtPmFoX2FuaSkpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFocC0+YWhfYW5pKTsgaSsrKSB7Ci0JCWFocC0+YWhfYW5pW2ldLm9mZG1UcmlnSGlnaCA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSDsKLQkJYWhwLT5haF9hbmlbaV0ub2ZkbVRyaWdMb3cgPSBBVEg5S19BTklfT0ZETV9UUklHX0xPVzsKLQkJYWhwLT5haF9hbmlbaV0uY2NrVHJpZ0hpZ2ggPSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSDsKLQkJYWhwLT5haF9hbmlbaV0uY2NrVHJpZ0xvdyA9IEFUSDlLX0FOSV9DQ0tfVFJJR19MT1c7Ci0JCWFocC0+YWhfYW5pW2ldLnJzc2lUaHJIaWdoID0gQVRIOUtfQU5JX1JTU0lfVEhSX0hJR0g7Ci0JCWFocC0+YWhfYW5pW2ldLnJzc2lUaHJMb3cgPSBBVEg5S19BTklfUlNTSV9USFJfTE9XOwotCQlhaHAtPmFoX2FuaVtpXS5vZmRtV2Vha1NpZ0RldGVjdE9mZiA9CisJbWVtc2V0KGFoLT5hbmksIDAsIHNpemVvZihhaC0+YW5pKSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWgtPmFuaSk7IGkrKykgeworCQlhaC0+YW5pW2ldLm9mZG1UcmlnSGlnaCA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSDsKKwkJYWgtPmFuaVtpXS5vZmRtVHJpZ0xvdyA9IEFUSDlLX0FOSV9PRkRNX1RSSUdfTE9XOworCQlhaC0+YW5pW2ldLmNja1RyaWdIaWdoID0gQVRIOUtfQU5JX0NDS19UUklHX0hJR0g7CisJCWFoLT5hbmlbaV0uY2NrVHJpZ0xvdyA9IEFUSDlLX0FOSV9DQ0tfVFJJR19MT1c7CisJCWFoLT5hbmlbaV0ucnNzaVRockhpZ2ggPSBBVEg5S19BTklfUlNTSV9USFJfSElHSDsKKwkJYWgtPmFuaVtpXS5yc3NpVGhyTG93ID0gQVRIOUtfQU5JX1JTU0lfVEhSX0xPVzsKKwkJYWgtPmFuaVtpXS5vZmRtV2Vha1NpZ0RldGVjdE9mZiA9CiAJCQkhQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHOwotCQlhaHAtPmFoX2FuaVtpXS5jY2tXZWFrU2lnVGhyZXNob2xkID0KKwkJYWgtPmFuaVtpXS5jY2tXZWFrU2lnVGhyZXNob2xkID0KIAkJCUFUSDlLX0FOSV9DQ0tfV0VBS19TSUdfVEhSOwotCQlhaHAtPmFoX2FuaVtpXS5zcHVySW1tdW5pdHlMZXZlbCA9IEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkw7Ci0JCWFocC0+YWhfYW5pW2ldLmZpcnN0ZXBMZXZlbCA9IEFUSDlLX0FOSV9GSVJTVEVQX0xWTDsKLQkJaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgewotCQkJYWhwLT5haF9hbmlbaV0ub2ZkbVBoeUVyckJhc2UgPQorCQlhaC0+YW5pW2ldLnNwdXJJbW11bml0eUxldmVsID0gQVRIOUtfQU5JX1NQVVJfSU1NVU5FX0xWTDsKKwkJYWgtPmFuaVtpXS5maXJzdGVwTGV2ZWwgPSBBVEg5S19BTklfRklSU1RFUF9MVkw7CisJCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CisJCQlhaC0+YW5pW2ldLm9mZG1QaHlFcnJCYXNlID0KIAkJCQlBUl9QSFlfQ09VTlRNQVggLSBBVEg5S19BTklfT0ZETV9UUklHX0hJR0g7Ci0JCQlhaHAtPmFoX2FuaVtpXS5jY2tQaHlFcnJCYXNlID0KKwkJCWFoLT5hbmlbaV0uY2NrUGh5RXJyQmFzZSA9CiAJCQkJQVJfUEhZX0NPVU5UTUFYIC0gQVRIOUtfQU5JX0NDS19UUklHX0hJR0g7CiAJCX0KIAl9Ci0JaWYgKGFocC0+YWhfaGFzSHdQaHlDb3VudGVycykgeworCWlmIChhaC0+aGFzX2h3X3BoeWNvdW50ZXJzKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKIAkJCSJTZXR0aW5nIE9mZG1FcnJCYXNlID0gMHglMDh4XG4iLAotCQkJYWhwLT5haF9hbmlbMF0ub2ZkbVBoeUVyckJhc2UpOworCQkJYWgtPmFuaVswXS5vZmRtUGh5RXJyQmFzZSk7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwgIlNldHRpbmcgY2NrRXJyQmFzZSA9IDB4JTA4eFxuIiwKLQkJCWFocC0+YWhfYW5pWzBdLmNja1BoeUVyckJhc2UpOworCQkJYWgtPmFuaVswXS5jY2tQaHlFcnJCYXNlKTsKIAotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMSwgYWhwLT5haF9hbmlbMF0ub2ZkbVBoeUVyckJhc2UpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9FUlJfMiwgYWhwLT5haF9hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCBhaC0+YW5pWzBdLm9mZG1QaHlFcnJCYXNlKTsKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIGFoLT5hbmlbMF0uY2NrUGh5RXJyQmFzZSk7CiAJCWF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoYWgpOwogCX0KLQlhaHAtPmFoX2FuaVBlcmlvZCA9IEFUSDlLX0FOSV9QRVJJT0Q7Ci0JaWYgKGFoLT5haF9jb25maWcuZW5hYmxlX2FuaSkKLQkJYWhwLT5haF9wcm9jUGh5RXJyIHw9IEhBTF9QUk9DRVNTX0FOSTsKKwlhaC0+YW5pcGVyaW9kID0gQVRIOUtfQU5JX1BFUklPRDsKKwlpZiAoYWgtPmNvbmZpZy5lbmFibGVfYW5pKQorCQlhaC0+cHJvY19waHllcnIgfD0gSEFMX1BST0NFU1NfQU5JOwogfQogCi12b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19hbmlfZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19BTkksICJEZXRhY2ggQU5JXG4iKTsKIAotCWlmIChhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMpIHsKKwlpZiAoYWgtPmhhc19od19waHljb3VudGVycykgewogCQlhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhhaCk7CiAJCVJFR19XUklURShhaCwgQVJfUEhZX0VSUl8xLCAwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfRVJSXzIsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYW5pLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hbmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOGI0ZTdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYW5pLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEFOSV9ICisjZGVmaW5lIEFOSV9ICisKKyNkZWZpbmUgSEFMX1BST0NFU1NfQU5JICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFUSDlLX1JTU0lfRVBfTVVMVElQTElFUiAgKDE8PDcpCisKKyNkZWZpbmUgRE9fQU5JKGFoKSAoKChhaCktPnByb2NfcGh5ZXJyICYgSEFMX1BST0NFU1NfQU5JKSkKKworI2RlZmluZSBIQUxfRVBfUk5EKHgsIG11bCkJCQkJCQlcCisJKCgoKHgpJShtdWwpKSA+PSAoKG11bCkvMikpID8gKCh4KSArICgobXVsKSAtIDEpKSAvIChtdWwpIDogKHgpLyhtdWwpKQorI2RlZmluZSBCRUFDT05fUlNTSShhaHApCQkJCQlcCisJSEFMX0VQX1JORChhaHAtPnN0YXRzLmFzdF9ub2Rlc3RhdHMubnNfYXZnYnJzc2ksCVwKKwkJICAgQVRIOUtfUlNTSV9FUF9NVUxUSVBMSUVSKQorCisjZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfSElHSCAgICAgICAgICA1MDAKKyNkZWZpbmUgQVRIOUtfQU5JX09GRE1fVFJJR19MT1cgICAgICAgICAgIDIwMAorI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfSElHSCAgICAgICAgICAgMjAwCisjZGVmaW5lIEFUSDlLX0FOSV9DQ0tfVFJJR19MT1cgICAgICAgICAgICAxMDAKKyNkZWZpbmUgQVRIOUtfQU5JX05PSVNFX0lNTVVORV9MVkwgICAgICAgIDQKKyNkZWZpbmUgQVRIOUtfQU5JX1VTRV9PRkRNX1dFQUtfU0lHICAgICAgIHRydWUKKyNkZWZpbmUgQVRIOUtfQU5JX0NDS19XRUFLX1NJR19USFIgICAgICAgIGZhbHNlCisjZGVmaW5lIEFUSDlLX0FOSV9TUFVSX0lNTVVORV9MVkwgICAgICAgICA3CisjZGVmaW5lIEFUSDlLX0FOSV9GSVJTVEVQX0xWTCAgICAgICAgICAgICAwCisjZGVmaW5lIEFUSDlLX0FOSV9SU1NJX1RIUl9ISUdIICAgICAgICAgICA0MAorI2RlZmluZSBBVEg5S19BTklfUlNTSV9USFJfTE9XICAgICAgICAgICAgNworI2RlZmluZSBBVEg5S19BTklfUEVSSU9EICAgICAgICAgICAgICAgICAgMTAwCisKKyNkZWZpbmUgSEFMX05PSVNFX0lNTVVORV9NQVggICAgICAgICAgICAgIDQKKyNkZWZpbmUgSEFMX1NQVVJfSU1NVU5FX01BWCAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgSEFMX0ZJUlNUX1NURVBfTUFYICAgICAgICAgICAgICAgIDIKKworZW51bSBhdGg5a19hbmlfY21kIHsKKwlBVEg5S19BTklfUFJFU0VOVCA9IDB4MSwKKwlBVEg5S19BTklfTk9JU0VfSU1NVU5JVFlfTEVWRUwgPSAweDIsCisJQVRIOUtfQU5JX09GRE1fV0VBS19TSUdOQUxfREVURUNUSU9OID0gMHg0LAorCUFUSDlLX0FOSV9DQ0tfV0VBS19TSUdOQUxfVEhSID0gMHg4LAorCUFUSDlLX0FOSV9GSVJTVEVQX0xFVkVMID0gMHgxMCwKKwlBVEg5S19BTklfU1BVUl9JTU1VTklUWV9MRVZFTCA9IDB4MjAsCisJQVRIOUtfQU5JX01PREUgPSAweDQwLAorCUFUSDlLX0FOSV9QSFlFUlJfUkVTRVQgPSAweDgwLAorCUFUSDlLX0FOSV9BTEwgPSAweGZmCit9OworCitzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIHsKKwl1MzIgYWNrcmN2X2JhZDsKKwl1MzIgcnRzX2JhZDsKKwl1MzIgcnRzX2dvb2Q7CisJdTMyIGZjc19iYWQ7CisJdTMyIGJlYWNvbnM7Cit9OworCitzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyB7CisJdTMyIG5zX2F2Z2Jyc3NpOworCXUzMiBuc19hdmdyc3NpOworCXUzMiBuc19hdmd0eHJzc2k7CisJdTMyIG5zX2F2Z3R4cmF0ZTsKK307CisKK3N0cnVjdCBhcjU0MTZBbmlTdGF0ZSB7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmM7CisJdTggbm9pc2VJbW11bml0eUxldmVsOworCXU4IHNwdXJJbW11bml0eUxldmVsOworCXU4IGZpcnN0ZXBMZXZlbDsKKwl1OCBvZmRtV2Vha1NpZ0RldGVjdE9mZjsKKwl1OCBjY2tXZWFrU2lnVGhyZXNob2xkOworCXUzMiBsaXN0ZW5UaW1lOworCXUzMiBvZmRtVHJpZ0hpZ2g7CisJdTMyIG9mZG1UcmlnTG93OworCWludDMyX3QgY2NrVHJpZ0hpZ2g7CisJaW50MzJfdCBjY2tUcmlnTG93OworCWludDMyX3QgcnNzaVRockxvdzsKKwlpbnQzMl90IHJzc2lUaHJIaWdoOworCXUzMiBub2lzZUZsb29yOworCXUzMiB0eEZyYW1lQ291bnQ7CisJdTMyIHJ4RnJhbWVDb3VudDsKKwl1MzIgY3ljbGVDb3VudDsKKwl1MzIgb2ZkbVBoeUVyckNvdW50OworCXUzMiBjY2tQaHlFcnJDb3VudDsKKwl1MzIgb2ZkbVBoeUVyckJhc2U7CisJdTMyIGNja1BoeUVyckJhc2U7CisJaW50MTZfdCBwa3RSc3NpWzJdOworCWludDE2X3Qgb2ZkbUVyclJzc2lbMl07CisJaW50MTZfdCBjY2tFcnJSc3NpWzJdOworfTsKKworc3RydWN0IGFyNTQxNlN0YXRzIHsKKwl1MzIgYXN0X2FuaV9uaXVwOworCXUzMiBhc3RfYW5pX25pZG93bjsKKwl1MzIgYXN0X2FuaV9zcHVydXA7CisJdTMyIGFzdF9hbmlfc3B1cmRvd247CisJdTMyIGFzdF9hbmlfb2ZkbW9uOworCXUzMiBhc3RfYW5pX29mZG1vZmY7CisJdTMyIGFzdF9hbmlfY2NraGlnaDsKKwl1MzIgYXN0X2FuaV9jY2tsb3c7CisJdTMyIGFzdF9hbmlfc3RlcHVwOworCXUzMiBhc3RfYW5pX3N0ZXBkb3duOworCXUzMiBhc3RfYW5pX29mZG1lcnJzOworCXUzMiBhc3RfYW5pX2Nja2VycnM7CisJdTMyIGFzdF9hbmlfcmVzZXQ7CisJdTMyIGFzdF9hbmlfbHplcm87CisJdTMyIGFzdF9hbmlfbG5lZzsKKwlzdHJ1Y3QgYXRoOWtfbWliX3N0YXRzIGFzdF9taWJzdGF0czsKKwlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBhc3Rfbm9kZXN0YXRzOworfTsKKyNkZWZpbmUgYWhfbWliU3RhdHMgc3RhdHMuYXN0X21pYnN0YXRzCisKK3ZvaWQgYXRoOWtfYW5pX3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX21vbml0b3Ioc3RydWN0IGF0aF9odyAqYWgsCisJCQkgIGNvbnN0IHN0cnVjdCBhdGg5a19ub2RlX3N0YXRzICpzdGF0cywKKwkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworYm9vbCBhdGg5a19od19waHljb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCk7Cit1MzIgYXRoOWtfaHdfR2V0TWliQ3ljbGVDb3VudHNQY3Qoc3RydWN0IGF0aF9odyAqYWgsIHUzMiAqcnhjX3BjbnQsCisJCQkJICB1MzIgKnJ4Zl9wY250LCB1MzIgKnR4Zl9wY250KTsKK3ZvaWQgYXRoOWtfaHdfcHJvY21pYmV2ZW50KHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgY29uc3Qgc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgKnN0YXRzKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X2FuaV9kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpOworCisjZW5kaWYgLyogQU5JX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hdGg5ay5oCmluZGV4IGQyNzgxMzUuLjI2ODlhMDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9hdGg5ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2F0aDlrLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNywxMDQxICsxNyw3NDEgQEAKICNpZm5kZWYgQVRIOUtfSAogI2RlZmluZSBBVEg5S19ICiAKLSNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Jma2lsbC5oPgogCi0jZGVmaW5lIEFUSEVST1NfVkVORE9SX0lECTB4MTY4YworI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAicmMuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgogCi0jZGVmaW5lIEFSNTQxNl9ERVZJRF9QQ0kJMHgwMDIzCi0jZGVmaW5lIEFSNTQxNl9ERVZJRF9QQ0lFCTB4MDAyNAotI2RlZmluZSBBUjkxNjBfREVWSURfUENJCTB4MDAyNwotI2RlZmluZSBBUjkyODBfREVWSURfUENJCTB4MDAyOQotI2RlZmluZSBBUjkyODBfREVWSURfUENJRQkweDAwMmEKLSNkZWZpbmUgQVI5Mjg1X0RFVklEX1BDSUUJMHgwMDJiCitzdHJ1Y3QgYXRoX25vZGU7CiAKLSNkZWZpbmUgQVI1NDE2X0FSOTEwMF9ERVZJRAkweDAwMGIKKy8qIE1hY3JvIHRvIGV4cGFuZCBzY2FsYXJzIHRvIDY0LWJpdCBvYmplY3RzICovCiAKLSNkZWZpbmUJQVJfU1VCVkVORE9SX0lEX05PRwkweDBlMTEKLSNkZWZpbmUgQVJfU1VCVkVORE9SX0lEX05FV19BCTB4NzA2NQorI2RlZmluZQlpdG82NCh4KSAoc2l6ZW9mKHgpID09IDgpID8JCQlcCisJKCgodW5zaWduZWQgbG9uZyBsb25nIGludCkoeCkpICYgKDB4ZmYpKSA6CVwKKwkoc2l6ZW9mKHgpID09IDE2KSA/CQkJCVwKKwkoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAweGZmZmYpIDoJXAorCSgoc2l6ZW9mKHgpID09IDMyKSA/CQkJCVwKKwkgKCgodW5zaWduZWQgbG9uZyBsb25nIGludCkoeCkpICYgMHhmZmZmZmZmZikgOiBcCisJICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkKIAotI2RlZmluZSBBVEg5S19UWEVSUl9YUkVUUlkgICAgICAgICAweDAxCi0jZGVmaW5lIEFUSDlLX1RYRVJSX0ZJTFQgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQVRIOUtfVFhFUlJfRklGTyAgICAgICAgICAgMHgwNAotI2RlZmluZSBBVEg5S19UWEVSUl9YVFhPUCAgICAgICAgICAweDA4Ci0jZGVmaW5lIEFUSDlLX1RYRVJSX1RJTUVSX0VYUElSRUQgIDB4MTAKKy8qIGluY3JlbWVudCB3aXRoIHdyYXAtYXJvdW5kICovCisjZGVmaW5lIElOQ1IoX2wsIF9zeikgICBkbyB7CQkJXAorCQkoX2wpKys7CQkJCVwKKwkJKF9sKSAmPSAoKF9zeikgLSAxKTsJCVwKKwl9IHdoaWxlICgwKQogCi0jZGVmaW5lIEFUSDlLX1RYX0JBICAgICAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRIOUtfVFhfUFdSTUdNVCAgICAgICAgICAgMHgwMgotI2RlZmluZSBBVEg5S19UWF9ERVNDX0NGR19FUlIgICAgICAweDA0Ci0jZGVmaW5lIEFUSDlLX1RYX0RBVEFfVU5ERVJSVU4gICAgIDB4MDgKLSNkZWZpbmUgQVRIOUtfVFhfREVMSU1fVU5ERVJSVU4gICAgMHgxMAotI2RlZmluZSBBVEg5S19UWF9TV19BQk9SVEVEICAgICAgICAweDQwCi0jZGVmaW5lIEFUSDlLX1RYX1NXX0ZJTFRFUkVEICAgICAgIDB4ODAKKy8qIGRlY3JlbWVudCB3aXRoIHdyYXAtYXJvdW5kICovCisjZGVmaW5lIERFQ1IoX2wsICBfc3opICBkbyB7CQkJXAorCQkoX2wpLS07CQkJCVwKKwkJKF9sKSAmPSAoKF9zeikgLSAxKTsJCVwKKwl9IHdoaWxlICgwKQogCi0jZGVmaW5lIE5CQlkgICAgOAorI2RlZmluZSBBX01BWChhLCBiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQogCi1zdHJ1Y3QgYXRoX3R4X3N0YXR1cyB7Ci0JdTMyIHRzX3RzdGFtcDsKLQl1MTYgdHNfc2VxbnVtOwotCXU4IHRzX3N0YXR1czsKLQl1OCB0c19yYXRlY29kZTsKLQl1OCB0c19yYXRlaW5kZXg7Ci0JaW50OF90IHRzX3Jzc2k7Ci0JdTggdHNfc2hvcnRyZXRyeTsKLQl1OCB0c19sb25ncmV0cnk7Ci0JdTggdHNfdmlydGNvbDsKLQl1OCB0c19hbnRlbm5hOwotCXU4IHRzX2ZsYWdzOwotCWludDhfdCB0c19yc3NpX2N0bDA7Ci0JaW50OF90IHRzX3Jzc2lfY3RsMTsKLQlpbnQ4X3QgdHNfcnNzaV9jdGwyOwotCWludDhfdCB0c19yc3NpX2V4dDA7Ci0JaW50OF90IHRzX3Jzc2lfZXh0MTsKLQlpbnQ4X3QgdHNfcnNzaV9leHQyOwotCXU4IHBhZFszXTsKLQl1MzIgYmFfbG93OwotCXUzMiBiYV9oaWdoOwotCXUzMiBldm0wOwotCXUzMiBldm0xOwotCXUzMiBldm0yOworI2RlZmluZSBBU1NFUlQoZXhwKSBkbyB7CQkJXAorCQlpZiAodW5saWtlbHkoIShleHApKSkgewkJXAorCQkJQlVHKCk7CQkJXAorCQl9CQkJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFRTRl9UT19UVShfaCxfbCkgXAorCSgoKCh1MzIpKF9oKSkgPDwgMjIpIHwgKCgodTMyKShfbCkpID4+IDEwKSkKKworI2RlZmluZQlBVEhfVFhRX1NFVFVQKHNjLCBpKSAgICAgICAgKChzYyktPnR4LnR4cXNldHVwICYgKDE8PGkpKQorCitzdGF0aWMgY29uc3QgdTggYXRoX2JjYXN0X21hY1tFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07CisKK3N0cnVjdCBhdGhfY29uZmlnIHsKKwl1MzIgYXRoX2FnZ3JfcHJvdDsKKwl1MTYgdHhwb3dsaW1pdDsKKwl1OCBjYWJxUmVhZHl0aW1lOworCXU4IHN3QmVhY29uUHJvY2VzczsKIH07CiAKLXN0cnVjdCBhdGhfcnhfc3RhdHVzIHsKLQl1MzIgcnNfdHN0YW1wOwotCXUxNiByc19kYXRhbGVuOwotCXU4IHJzX3N0YXR1czsKLQl1OCByc19waHllcnI7Ci0JaW50OF90IHJzX3Jzc2k7Ci0JdTggcnNfa2V5aXg7Ci0JdTggcnNfcmF0ZTsKLQl1OCByc19hbnRlbm5hOwotCXU4IHJzX21vcmU7Ci0JaW50OF90IHJzX3Jzc2lfY3RsMDsKLQlpbnQ4X3QgcnNfcnNzaV9jdGwxOwotCWludDhfdCByc19yc3NpX2N0bDI7Ci0JaW50OF90IHJzX3Jzc2lfZXh0MDsKLQlpbnQ4X3QgcnNfcnNzaV9leHQxOwotCWludDhfdCByc19yc3NpX2V4dDI7Ci0JdTggcnNfaXNhZ2dyOwotCXU4IHJzX21vcmVhZ2dyOwotCXU4IHJzX251bV9kZWxpbXM7Ci0JdTggcnNfZmxhZ3M7Ci0JdTMyIGV2bTA7Ci0JdTMyIGV2bTE7Ci0JdTMyIGV2bTI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlc2NyaXB0b3IgTWFuYWdlbWVudCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQVRIX1RYQlVGX1JFU0VUKF9iZikgZG8gewkJCQlcCisJCShfYmYpLT5iZl9zdGF0dXMgPSAwOwkJCQlcCisJCShfYmYpLT5iZl9sYXN0YmYgPSBOVUxMOwkJCVwKKwkJKF9iZiktPmJmX25leHQgPSBOVUxMOwkJCQlcCisJCW1lbXNldCgmKChfYmYpLT5iZl9zdGF0ZSksIDAsCQkJXAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBhdGhfYnVmX3N0YXRlKSk7CQlcCisJfSB3aGlsZSAoMCkKKworLyoqCisgKiBlbnVtIGJ1ZmZlcl90eXBlIC0gQnVmZmVyIHR5cGUgZmxhZ3MKKyAqCisgKiBAQlVGX0hUOiBTZW5kIHRoaXMgYnVmZmVyIHVzaW5nIEhUIGNhcGFiaWxpdGllcworICogQEJVRl9BTVBEVTogVGhpcyBidWZmZXIgaXMgYW4gYW1wZHUsIGFzIHBhcnQgb2YgYW4gYWdncmVnYXRlIChkdXJpbmcgVFgpCisgKiBAQlVGX0FHR1I6IEluZGljYXRlcyB3aGV0aGVyIHRoZSBidWZmZXIgY2FuIGJlIGFnZ3JlZ2F0ZWQKKyAqCSh1c2VkIGluIGFnZ3JlZ2F0aW9uIHNjaGVkdWxpbmcpCisgKiBAQlVGX1JFVFJZOiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgYnVmZmVyIGlzIHJldHJpZWQKKyAqIEBCVUZfWFJFVFJZOiBUbyBkZW5vdGUgZXhjZXNzaXZlIHJldHJpZXMgb2YgdGhlIGJ1ZmZlcgorICovCitlbnVtIGJ1ZmZlcl90eXBlIHsKKwlCVUZfSFQJCQk9IEJJVCgxKSwKKwlCVUZfQU1QRFUJCT0gQklUKDIpLAorCUJVRl9BR0dSCQk9IEJJVCgzKSwKKwlCVUZfUkVUUlkJCT0gQklUKDQpLAorCUJVRl9YUkVUUlkJCT0gQklUKDUpLAogfTsKIAotI2RlZmluZSBBVEg5S19SWEVSUl9DUkMgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRIOUtfUlhFUlJfUEhZICAgICAgICAgICAweDAyCi0jZGVmaW5lIEFUSDlLX1JYRVJSX0ZJRk8gICAgICAgICAgMHgwNAotI2RlZmluZSBBVEg5S19SWEVSUl9ERUNSWVBUICAgICAgIDB4MDgKLSNkZWZpbmUgQVRIOUtfUlhFUlJfTUlDICAgICAgICAgICAweDEwCi0KLSNkZWZpbmUgQVRIOUtfUlhfTU9SRSAgICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFUSDlLX1JYX01PUkVfQUdHUiAgICAgICAgMHgwMgotI2RlZmluZSBBVEg5S19SWF9HSSAgICAgICAgICAgICAgIDB4MDQKLSNkZWZpbmUgQVRIOUtfUlhfMjA0MCAgICAgICAgICAgICAweDA4Ci0jZGVmaW5lIEFUSDlLX1JYX0RFTElNX0NSQ19QUkUgICAgMHgxMAotI2RlZmluZSBBVEg5S19SWF9ERUxJTV9DUkNfUE9TVCAgIDB4MjAKLSNkZWZpbmUgQVRIOUtfUlhfREVDUllQVF9CVVNZICAgICAweDQwCi0KLSNkZWZpbmUgQVRIOUtfUlhLRVlJWF9JTlZBTElECSgodTgpLTEpCi0jZGVmaW5lIEFUSDlLX1RYS0VZSVhfSU5WQUxJRAkoKHUzMiktMSkKLQotc3RydWN0IGF0aF9kZXNjIHsKLQl1MzIgZHNfbGluazsKLQl1MzIgZHNfZGF0YTsKLQl1MzIgZHNfY3RsMDsKLQl1MzIgZHNfY3RsMTsKLQl1MzIgZHNfaHdbMjBdOwotCXVuaW9uIHsKLQkJc3RydWN0IGF0aF90eF9zdGF0dXMgdHg7Ci0JCXN0cnVjdCBhdGhfcnhfc3RhdHVzIHJ4OwotCQl2b2lkICpzdGF0czsKLQl9IGRzX3VzOwotCXZvaWQgKmRzX3ZkYXRhOwotfSBfX3BhY2tlZDsKLQotI2RlZmluZQlkc190eHN0YXQJZHNfdXMudHgKLSNkZWZpbmUJZHNfcnhzdGF0CWRzX3VzLnJ4Ci0jZGVmaW5lIGRzX3N0YXQJCWRzX3VzLnN0YXRzCi0KLSNkZWZpbmUgQVRIOUtfVFhERVNDX0NMUkRNQVNLCQkweDAwMDEKLSNkZWZpbmUgQVRIOUtfVFhERVNDX05PQUNLCQkweDAwMDIKLSNkZWZpbmUgQVRIOUtfVFhERVNDX1JUU0VOQQkJMHgwMDA0Ci0jZGVmaW5lIEFUSDlLX1RYREVTQ19DVFNFTkEJCTB4MDAwOAotLyogQVRIOUtfVFhERVNDX0lOVFJFUSBmb3JjZXMgYSB0eCBpbnRlcnJ1cHQgdG8gYmUgZ2VuZXJhdGVkIGZvcgotICogdGhlIGRlc2NyaXB0b3IgaXRzIG1hcmtlZCBvbi4gIFdlIHRha2UgYSB0eCBpbnRlcnJ1cHQgdG8gcmVhcAotICogZGVzY3JpcHRvcnMgd2hlbiB0aGUgaC93IGhpdHMgYW4gRU9MIGNvbmRpdGlvbiBvcgotICogd2hlbiB0aGUgZGVzY3JpcHRvciBpcyBzcGVjaWZpY2FsbHkgbWFya2VkIHRvIGdlbmVyYXRlCi0gKiBhbiBpbnRlcnJ1cHQgd2l0aCB0aGlzIGZsYWcuIERlc2NyaXB0b3JzIHNob3VsZCBiZQotICogbWFya2VkIHBlcmlvZGljYWxseSB0byBpbnN1cmUgdGltZWx5IHJlcGxlbmlzaGluZyBvZiB0aGUKLSAqIHN1cHBseSBuZWVkZWQgZm9yIHNlbmRpbmcgZnJhbWVzLiBEZWZlcmluZyBpbnRlcnJ1cHRzCi0gKiByZWR1Y2VzIHN5c3RlbSBsb2FkIGFuZCBwb3RlbnRpYWxseSBhbGxvd3MgbW9yZSBjb25jdXJyZW50Ci0gKiB3b3JrIHRvIGJlIGRvbmUgYnV0IGlmIGRvbmUgdG8gYWdncmVzc2l2ZWx5IGNhbiBjYXVzZQotICogc2VuZGVycyB0byBiYWNrdXAuIFdoZW4gdGhlIGhhcmR3YXJlIHF1ZXVlIGlzIGxlZnQgdG9vCi0gKiBsYXJnZSByYXRlIGNvbnRyb2wgaW5mb3JtYXRpb24gbWF5IGFsc28gYmUgdG9vIG91dCBvZgotICogZGF0ZS4gQW4gQWx0ZXJuYXRpdmUgZm9yIHRoaXMgaXMgVFggaW50ZXJydXB0IG1pdGlnYXRpb24KLSAqIGJ1dCB0aGlzIG5lZWRzIG1vcmUgdGVzdGluZy4gKi8KLSNkZWZpbmUgQVRIOUtfVFhERVNDX0lOVFJFUQkJMHgwMDEwCi0jZGVmaW5lIEFUSDlLX1RYREVTQ19WRU9MCQkweDAwMjAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX0VYVF9PTkxZCQkweDAwNDAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX0VYVF9BTkRfQ1RMCTB4MDA4MAotI2RlZmluZSBBVEg5S19UWERFU0NfVk1GCQkweDAxMDAKLSNkZWZpbmUgQVRIOUtfVFhERVNDX0ZSQUdfSVNfT04gCTB4MDIwMAotI2RlZmluZSBBVEg5S19UWERFU0NfQ0FCCQkweDA0MDAKLQotI2RlZmluZSBBVEg5S19SWERFU0NfSU5UUkVRCQkweDAwMjAKLQotZW51bSB3aXJlbGVzc19tb2RlIHsKLQlBVEg5S19NT0RFXzExQSA9IDAsCi0JQVRIOUtfTU9ERV8xMUIgPSAyLAotCUFUSDlLX01PREVfMTFHID0gMywKLQlBVEg5S19NT0RFXzExTkFfSFQyMCA9IDYsCi0JQVRIOUtfTU9ERV8xMU5HX0hUMjAgPSA3LAotCUFUSDlLX01PREVfMTFOQV9IVDQwUExVUyA9IDgsCi0JQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUyA9IDksCi0JQVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTID0gMTAsCi0JQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUyA9IDExLAotCUFUSDlLX01PREVfTUFYCitzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSB7CisJaW50IGJmc19uZnJhbWVzOworCXUxNiBiZnNfYWw7CisJdTE2IGJmc19mcm1sZW47CisJaW50IGJmc19zZXFubzsKKwlpbnQgYmZzX3RpZG5vOworCWludCBiZnNfcmV0cmllczsKKwl1MzIgYmZfdHlwZTsKKwl1MzIgYmZzX2tleWl4OworCWVudW0gYXRoOWtfa2V5X3R5cGUgYmZzX2tleXR5cGU7CiB9OwogCi1lbnVtIGF0aDlrX2h3X2NhcHMgewotCUFUSDlLX0hXX0NBUF9DSEFOX1NQUkVBRAkJPSBCSVQoMCksCi0JQVRIOUtfSFdfQ0FQX01JQ19BRVNDQ00gICAgICAgICAgICAgICAgID0gQklUKDEpLAotCUFUSDlLX0hXX0NBUF9NSUNfQ0tJUCAgICAgICAgICAgICAgICAgICA9IEJJVCgyKSwKLQlBVEg5S19IV19DQVBfTUlDX1RLSVAgICAgICAgICAgICAgICAgICAgPSBCSVQoMyksCi0JQVRIOUtfSFdfQ0FQX0NJUEhFUl9BRVNDQ00gICAgICAgICAgICAgID0gQklUKDQpLAotCUFUSDlLX0hXX0NBUF9DSVBIRVJfQ0tJUCAgICAgICAgICAgICAgICA9IEJJVCg1KSwKLQlBVEg5S19IV19DQVBfQ0lQSEVSX1RLSVAgICAgICAgICAgICAgICAgPSBCSVQoNiksCi0JQVRIOUtfSFdfQ0FQX1ZFT0wgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDcpLAotCUFUSDlLX0hXX0NBUF9CU1NJRE1BU0sgICAgICAgICAgICAgICAgICA9IEJJVCg4KSwKLQlBVEg5S19IV19DQVBfTUNBU1RfS0VZU0VBUkNIICAgICAgICAgICAgPSBCSVQoOSksCi0JQVRIOUtfSFdfQ0FQX0NIQU5fSEFMRlJBVEUgICAgICAgICAgICAgID0gQklUKDEwKSwKLQlBVEg5S19IV19DQVBfQ0hBTl9RVUFSVEVSUkFURSAgICAgICAgICAgPSBCSVQoMTEpLAotCUFUSDlLX0hXX0NBUF9IVCAgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxMiksCi0JQVRIOUtfSFdfQ0FQX0dUVCAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDEzKSwKLQlBVEg5S19IV19DQVBfRkFTVENDICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTQpLAotCUFUSDlLX0hXX0NBUF9SRlNJTEVOVCAgICAgICAgICAgICAgICAgICA9IEJJVCgxNSksCi0JQVRIOUtfSFdfQ0FQX1dPVyAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDE2KSwKLQlBVEg5S19IV19DQVBfQ1NUICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTcpLAotCUFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNICAgICAgICAgICAgICAgICA9IEJJVCgxOCksCi0JQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCAgICAgICAgICAgICAgICAgID0gQklUKDE5KSwKLQlBVEg5S19IV19DQVBfNEtCX1NQTElUVFJBTlMgICAgICAgICAgICAgPSBCSVQoMjApLAotCUFUSDlLX0hXX0NBUF9XT1dfTUFUQ0hQQVRURVJOX0VYQUNUICAgICA9IEJJVCgyMSksCisjZGVmaW5lIGJmX25mcmFtZXMgICAgICAJYmZfc3RhdGUuYmZzX25mcmFtZXMKKyNkZWZpbmUgYmZfYWwgICAgICAgICAgIAliZl9zdGF0ZS5iZnNfYWwKKyNkZWZpbmUgYmZfZnJtbGVuICAgICAgIAliZl9zdGF0ZS5iZnNfZnJtbGVuCisjZGVmaW5lIGJmX3JldHJpZXMgICAgICAJYmZfc3RhdGUuYmZzX3JldHJpZXMKKyNkZWZpbmUgYmZfc2Vxbm8gICAgICAgIAliZl9zdGF0ZS5iZnNfc2Vxbm8KKyNkZWZpbmUgYmZfdGlkbm8gICAgICAgIAliZl9zdGF0ZS5iZnNfdGlkbm8KKyNkZWZpbmUgYmZfa2V5aXggICAgICAgICAgICAgICAgYmZfc3RhdGUuYmZzX2tleWl4CisjZGVmaW5lIGJmX2tleXR5cGUgICAgICAJYmZfc3RhdGUuYmZzX2tleXR5cGUKKyNkZWZpbmUgYmZfaXNodChiZikJCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9IVCkKKyNkZWZpbmUgYmZfaXNhbXBkdShiZikJCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9BTVBEVSkKKyNkZWZpbmUgYmZfaXNhZ2dyKGJmKQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX0FHR1IpCisjZGVmaW5lIGJmX2lzcmV0cmllZChiZikJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX1JFVFJZKQorI2RlZmluZSBiZl9pc3hyZXRyaWVkKGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfWFJFVFJZKQorCitzdHJ1Y3QgYXRoX2J1ZiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0YmY7CS8qIGxhc3QgYnVmIG9mIHRoaXMgdW5pdCAoYSBmcmFtZSBvcgorCQkJCQkgICBhbiBhZ2dyZWdhdGUpICovCisJc3RydWN0IGF0aF9idWYgKmJmX25leHQ7CS8qIG5leHQgc3ViZnJhbWUgaW4gdGhlIGFnZ3JlZ2F0ZSAqLworCXZvaWQgKmJmX21wZHU7CQkJLyogZW5jbG9zaW5nIGZyYW1lIHN0cnVjdHVyZSAqLworCXN0cnVjdCBhdGhfZGVzYyAqYmZfZGVzYzsJLyogdmlydHVhbCBhZGRyIG9mIGRlc2MgKi8KKwlkbWFfYWRkcl90IGJmX2RhZGRyOwkJLyogcGh5c2ljYWwgYWRkciBvZiBkZXNjICovCisJZG1hX2FkZHJfdCBiZl9idWZfYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHIgb2YgZGF0YSBidWZmZXIgKi8KKwl1MzIgYmZfc3RhdHVzOworCXUxNiBiZl9mbGFnczsKKwlzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSBiZl9zdGF0ZTsKKwlkbWFfYWRkcl90IGJmX2RtYWNvbnRleHQ7CiB9OwogCi1lbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB7Ci0JQVRIOUtfQ0FQX0NJUEhFUiA9IDAsCi0JQVRIOUtfQ0FQX1RLSVBfTUlDLAotCUFUSDlLX0NBUF9US0lQX1NQTElULAotCUFUSDlLX0NBUF9QSFlDT1VOVEVSUywKLQlBVEg5S19DQVBfRElWRVJTSVRZLAotCUFUSDlLX0NBUF9UWFBPVywKLQlBVEg5S19DQVBfUEhZRElBRywKLQlBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwKLQlBVEg5S19DQVBfVFNGX0FESlVTVCwKLQlBVEg5S19DQVBfV01FX1RLSVBNSUMsCi0JQVRIOUtfQ0FQX1JGU0lMRU5ULAotCUFUSDlLX0NBUF9BTlRfQ0ZHXzJHSFosCi0JQVRIOUtfQ0FQX0FOVF9DRkdfNUdIWgorI2RlZmluZSBBVEhfUlhCVUZfUkVTRVQoX2JmKSAgICAoKF9iZiktPmJmX3N0YXR1cyA9IDApCisjZGVmaW5lIEFUSF9CVUZTVEFUVVNfU1RBTEUgICAgIDB4MDAwMDAwMDIKKworc3RydWN0IGF0aF9kZXNjZG1hIHsKKwljb25zdCBjaGFyICpkZF9uYW1lOworCXN0cnVjdCBhdGhfZGVzYyAqZGRfZGVzYzsKKwlkbWFfYWRkcl90IGRkX2Rlc2NfcGFkZHI7CisJdTMyIGRkX2Rlc2NfbGVuOworCXN0cnVjdCBhdGhfYnVmICpkZF9idWZwdHI7CisJZG1hX2FkZHJfdCBkZF9kbWFjb250ZXh0OwogfTsKIAotc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyB7Ci0JdTMyIGh3X2NhcHM7IC8qIEFUSDlLX0hXX0NBUF8qIGZyb20gYXRoOWtfaHdfY2FwcyAqLwotCURFQ0xBUkVfQklUTUFQKHdpcmVsZXNzX21vZGVzLCBBVEg5S19NT0RFX01BWCk7IC8qIEFUSDlLX01PREVfKiAqLwotCXUxNiB0b3RhbF9xdWV1ZXM7Ci0JdTE2IGtleWNhY2hlX3NpemU7Ci0JdTE2IGxvd181Z2h6X2NoYW4sIGhpZ2hfNWdoel9jaGFuOwotCXUxNiBsb3dfMmdoel9jaGFuLCBoaWdoXzJnaHpfY2hhbjsKLQl1MTYgbnVtX21yX3JldHJpZXM7Ci0JdTE2IHJ0c19hZ2dyX2xpbWl0OworaW50IGF0aF9kZXNjZG1hX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBpbnQgbmJ1ZiwgaW50IG5kZXNjKTsKK3ZvaWQgYXRoX2Rlc2NkbWFfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9kZXNjZG1hICpkZCwKKwkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKKworLyoqKioqKioqKioqLworLyogUlggLyBUWCAqLworLyoqKioqKioqKioqLworCisjZGVmaW5lIEFUSF9NQVhfQU5URU5OQSAgICAgICAgIDMKKyNkZWZpbmUgQVRIX1JYQlVGICAgICAgICAgICAgICAgNTEyCisjZGVmaW5lIFdNRV9OVU1fVElEICAgICAgICAgICAgIDE2CisjZGVmaW5lIEFUSF9UWEJVRiAgICAgICAgICAgICAgIDUxMgorI2RlZmluZSBBVEhfVFhNQVhUUlkgICAgICAgICAgICAxMworI2RlZmluZSBBVEhfMTFOX1RYTUFYVFJZICAgICAgICAxMAorI2RlZmluZSBBVEhfTUdUX1RYTUFYVFJZICAgICAgICA0CisjZGVmaW5lIFdNRV9CQV9CTVBfU0laRSAgICAgICAgIDY0CisjZGVmaW5lIFdNRV9NQVhfQkEgICAgICAgICAgICAgIFdNRV9CQV9CTVBfU0laRQorI2RlZmluZSBBVEhfVElEX01BWF9CVUZTICAgICAgICAoMiAqIFdNRV9NQVhfQkEpCisKKyNkZWZpbmUgVElEX1RPX1dNRV9BQyhfdGlkKQkJCQlcCisJKCgoKF90aWQpID09IDApIHx8ICgoX3RpZCkgPT0gMykpID8gV01FX0FDX0JFIDoJXAorCSAoKChfdGlkKSA9PSAxKSB8fCAoKF90aWQpID09IDIpKSA/IFdNRV9BQ19CSyA6CVwKKwkgKCgoX3RpZCkgPT0gNCkgfHwgKChfdGlkKSA9PSA1KSkgPyBXTUVfQUNfVkkgOglcCisJIFdNRV9BQ19WTykKKworI2RlZmluZSBXTUVfQUNfQkUgICAwCisjZGVmaW5lIFdNRV9BQ19CSyAgIDEKKyNkZWZpbmUgV01FX0FDX1ZJICAgMgorI2RlZmluZSBXTUVfQUNfVk8gICAzCisjZGVmaW5lIFdNRV9OVU1fQUMgIDQKKworI2RlZmluZSBBRERCQV9FWENIQU5HRV9BVFRFTVBUUyAgICAxMAorI2RlZmluZSBBVEhfQUdHUl9ERUxJTV9TWiAgICAgICAgICA0CisjZGVmaW5lIEFUSF9BR0dSX01JTlBMRU4gICAgICAgICAgIDI1NiAvKiBpbiBieXRlcywgbWluaW11bSBwYWNrZXQgbGVuZ3RoICovCisvKiBudW1iZXIgb2YgZGVsaW1pdGVycyBmb3IgZW5jcnlwdGlvbiBwYWRkaW5nICovCisjZGVmaW5lIEFUSF9BR0dSX0VOQ1JZUFRERUxJTSAgICAgIDEwCisvKiBtaW5pbXVtIGgvdyBxZGVwdGggdG8gYmUgc3VzdGFpbmVkIHRvIG1heGltaXplIGFnZ3JlZ2F0aW9uICovCisjZGVmaW5lIEFUSF9BR0dSX01JTl9RREVQVEggICAgICAgIDIKKyNkZWZpbmUgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQgMzIKKyNkZWZpbmUgQVRIX0FNUERVX0xJTUlUX01BWCAgICAgICAgKDY0ICogMTAyNCAtIDEpCisjZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9ERUZBVUxUICAgIEFUSF9BTVBEVV9MSU1JVF9NQVgKKworI2RlZmluZSBJRUVFODAyMTFfU0VRX1NFUV9TSElGVCAgICA0CisjZGVmaW5lIElFRUU4MDIxMV9TRVFfTUFYICAgICAgICAgIDQwOTYKKyNkZWZpbmUgSUVFRTgwMjExX01JTl9BTVBEVV9CVUYgICAgMHg4CisjZGVmaW5lIElFRUU4MDIxMV9IVENBUF9NQVhSWEFNUERVX0ZBQ1RPUiAxMworI2RlZmluZSBJRUVFODAyMTFfV0VQX0lWTEVOICAgICAgICAzCisjZGVmaW5lIElFRUU4MDIxMV9XRVBfS0lETEVOICAgICAgIDEKKyNkZWZpbmUgSUVFRTgwMjExX1dFUF9DUkNMRU4gICAgICAgNAorI2RlZmluZSBJRUVFODAyMTFfTUFYX01QRFVfTEVOICAgICAoMzg0MCArIEZDU19MRU4gKwkJXAorCQkJCSAgICAoSUVFRTgwMjExX1dFUF9JVkxFTiArCVwKKwkJCQkgICAgIElFRUU4MDIxMV9XRVBfS0lETEVOICsJXAorCQkJCSAgICAgSUVFRTgwMjExX1dFUF9DUkNMRU4pKQorCisvKiByZXR1cm4gd2hldGhlciBhIGJpdCBhdCBpbmRleCBfbiBpbiBiaXRtYXAgX2JtIGlzIHNldAorICogX3N6IGlzIHRoZSBzaXplIG9mIHRoZSBiaXRtYXAgICovCisjZGVmaW5lIEFUSF9CQV9JU1NFVChfYm0sIF9uKSAgKCgoX24pIDwgKFdNRV9CQV9CTVBfU0laRSkpICYmCQlcCisJCQkJKChfYm0pWyhfbikgPj4gNV0gJiAoMSA8PCAoKF9uKSAmIDMxKSkpKQorCisvKiByZXR1cm4gYmxvY2stYWNrIGJpdG1hcCBpbmRleCBnaXZlbiBzZXF1ZW5jZSBhbmQgc3RhcnRpbmcgc2VxdWVuY2UgKi8KKyNkZWZpbmUgQVRIX0JBX0lOREVYKF9zdCwgX3NlcSkgKCgoX3NlcSkgLSAoX3N0KSkgJiAoSUVFRTgwMjExX1NFUV9NQVggLSAxKSkKKworLyogcmV0dXJucyBkZWxpbWl0ZXIgcGFkZGluZyByZXF1aXJlZCBnaXZlbiB0aGUgcGFja2V0IGxlbmd0aCAqLworI2RlZmluZSBBVEhfQUdHUl9HRVRfTkRFTElNKF9sZW4pCQkJCQlcCisJKCgoKChfbGVuKSArIEFUSF9BR0dSX0RFTElNX1NaKSA8IEFUSF9BR0dSX01JTlBMRU4pID8gICAgICAgICAgIFwKKwkgIChBVEhfQUdHUl9NSU5QTEVOIC0gKF9sZW4pIC0gQVRIX0FHR1JfREVMSU1fU1opIDogMCkgPj4gMikKKworI2RlZmluZSBCQVdfV0lUSElOKF9zdGFydCwgX2Jhd3N6LCBfc2Vxbm8pIFwKKwkoKCgoX3NlcW5vKSAtIChfc3RhcnQpKSAmIDQwOTUpIDwgKF9iYXdzeikpCisKKyNkZWZpbmUgQVRIX0RTX0JBX1NFUShfZHMpICAgICAgICAgKChfZHMpLT5kc191cy50eC50c19zZXFudW0pCisjZGVmaW5lIEFUSF9EU19CQV9CSVRNQVAoX2RzKSAgICAgICgmKF9kcyktPmRzX3VzLnR4LmJhX2xvdykKKyNkZWZpbmUgQVRIX0RTX1RYX0JBKF9kcykgICAgICAgICAgKChfZHMpLT5kc191cy50eC50c19mbGFncyAmIEFUSDlLX1RYX0JBKQorI2RlZmluZSBBVEhfQU5fMl9USUQoX2FuLCBfdGlkbm8pICAoJihfYW4pLT50aWRbKF90aWRubyldKQorCitlbnVtIEFUSF9BR0dSX1NUQVRVUyB7CisJQVRIX0FHR1JfRE9ORSwKKwlBVEhfQUdHUl9CQVdfQ0xPU0VELAorCUFUSF9BR0dSX0xJTUlURUQsCit9OworCitzdHJ1Y3QgYXRoX3R4cSB7CisJdTMyIGF4cV9xbnVtOworCXUzMiAqYXhxX2xpbms7CisJc3RydWN0IGxpc3RfaGVhZCBheHFfcTsKKwlzcGlubG9ja190IGF4cV9sb2NrOworCXUzMiBheHFfZGVwdGg7CisJdTggYXhxX2FnZ3JfZGVwdGg7CisJdTMyIGF4cV90b3RhbHF1ZXVlZDsKKwlib29sIHN0b3BwZWQ7CisJc3RydWN0IGF0aF9idWYgKmF4cV9saW5rYnVmOworCisJLyogZmlyc3QgZGVzYyBvZiB0aGUgbGFzdCBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgQ1RTICovCisJc3RydWN0IGF0aF9kZXNjICpheHFfbGFzdGRzV2l0aENUUzsKKworCS8qIGZpbmFsIGRlc2Mgb2YgdGhlIGdhdGluZyBkZXNjIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyCisJICAgbGFzdGRzV2l0aENUUyBoYXMgYmVlbiBETUEnZWQgb3Igbm90ICovCisJc3RydWN0IGF0aF9kZXNjICpheHFfZ2F0aW5nZHM7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9hY3E7Cit9OworCisjZGVmaW5lIEFHR1JfQ0xFQU5VUCAgICAgICAgIEJJVCgxKQorI2RlZmluZSBBR0dSX0FEREJBX0NPTVBMRVRFICBCSVQoMikKKyNkZWZpbmUgQUdHUl9BRERCQV9QUk9HUkVTUyAgQklUKDMpCisKK3N0cnVjdCBhdGhfYXR4X3RpZCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQgYnVmX3E7CisJc3RydWN0IGF0aF9ub2RlICphbjsKKwlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWM7CisJc3RydWN0IGF0aF9idWYgKnR4X2J1ZltBVEhfVElEX01BWF9CVUZTXTsKKwl1MTYgc2VxX3N0YXJ0OworCXUxNiBzZXFfbmV4dDsKKwl1MTYgYmF3X3NpemU7CisJaW50IHRpZG5vOworCWludCBiYXdfaGVhZDsJLyogZmlyc3QgdW4tYWNrZWQgdHggYnVmZmVyICovCisJaW50IGJhd190YWlsOwkvKiBuZXh0IHVudXNlZCB0eCBidWZmZXIgc2xvdCAqLworCWludCBzY2hlZDsKKwlpbnQgcGF1c2VkOworCXU4IHN0YXRlOworCWludCBhZGRiYV9leGNoYW5nZWF0dGVtcHRzOworfTsKKworc3RydWN0IGF0aF9hdHhfYWMgeworCWludCBzY2hlZDsKKwlpbnQgcW51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCB0aWRfcTsKK307CisKK3N0cnVjdCBhdGhfdHhfY29udHJvbCB7CisJc3RydWN0IGF0aF90eHEgKnR4cTsKKwlpbnQgaWZfaWQ7CisJZW51bSBhdGg5a19pbnRlcm5hbF9mcmFtZV90eXBlIGZyYW1lX3R5cGU7Cit9OworCisjZGVmaW5lIEFUSF9UWF9FUlJPUiAgICAgICAgMHgwMQorI2RlZmluZSBBVEhfVFhfWFJFVFJZICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIX1RYX0JBUiAgICAgICAgICAweDA0CisKKy8qIEFsbCBSU1NJIHZhbHVlcyBhcmUgbm9pc2UgZmxvb3IgYWRqdXN0ZWQgKi8KK3N0cnVjdCBhdGhfdHhfc3RhdCB7CisJaW50IHJzc2k7CisJaW50IHJzc2ljdGxbQVRIX01BWF9BTlRFTk5BXTsKKwlpbnQgcnNzaWV4dG5bQVRIX01BWF9BTlRFTk5BXTsKKwlpbnQgcmF0ZWllZWU7CisJaW50IHJhdGVLYnBzOworCWludCByYXRlY29kZTsKKwlpbnQgZmxhZ3M7CisJdTMyIGFpcnRpbWU7CS8qIHRpbWUgb24gYWlyIHBlciBmaW5hbCB0eCByYXRlICovCit9OworCitzdHJ1Y3QgYWdncl9yaWZzX3BhcmFtIHsKKwlpbnQgcGFyYW1fbWF4X2ZyYW1lczsKKwlpbnQgcGFyYW1fbWF4X2xlbjsKKwlpbnQgcGFyYW1fcmw7CisJaW50IHBhcmFtX2FsOworCXN0cnVjdCBhdGhfcmNfc2VyaWVzICpwYXJhbV9yY3M7Cit9OworCitzdHJ1Y3QgYXRoX25vZGUgeworCXN0cnVjdCBhdGhfc29mdGMgKmFuX3NjOworCXN0cnVjdCBhdGhfYXR4X3RpZCB0aWRbV01FX05VTV9USURdOworCXN0cnVjdCBhdGhfYXR4X2FjIGFjW1dNRV9OVU1fQUNdOworCXUxNiBtYXhhbXBkdTsKKwl1OCBtcGR1ZGVuc2l0eTsKK307CisKK3N0cnVjdCBhdGhfdHggeworCXUxNiBzZXFfbm87CisJdTMyIHR4cXNldHVwOworCWludCBod3FfbWFwW0FUSDlLX1dNRV9BQ19WTysxXTsKKwlzcGlubG9ja190IHR4YnVmbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4YnVmOworCXN0cnVjdCBhdGhfdHhxIHR4cVtBVEg5S19OVU1fVFhfUVVFVUVTXTsKKwlzdHJ1Y3QgYXRoX2Rlc2NkbWEgdHhkbWE7Cit9OworCitzdHJ1Y3QgYXRoX3J4IHsKKwl1OCBkZWZhbnQ7CisJdTggcnhvdGhlcmFudDsKKwl1MzIgKnJ4bGluazsKKwlpbnQgYnVmc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcnhmaWx0ZXI7CisJc3BpbmxvY2tfdCByeGZsdXNobG9jazsKKwlzcGlubG9ja190IHJ4YnVmbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJ4YnVmOworCXN0cnVjdCBhdGhfZGVzY2RtYSByeGRtYTsKK307CisKK2ludCBhdGhfc3RhcnRyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2Jvb2wgYXRoX3N0b3ByZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoX2ZsdXNocmVjdihzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit1MzIgYXRoX2NhbGNyeGZpbHRlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CitpbnQgYXRoX3J4X2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBuYnVmcyk7Cit2b2lkIGF0aF9yeF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGhfcnhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGZsdXNoKTsKK3N0cnVjdCBhdGhfdHhxICphdGhfdHhxX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBzdWJ0eXBlKTsKK3ZvaWQgYXRoX3R4X2NsZWFudXBxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKTsKK2ludCBhdGhfdHhfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBoYWx0eXBlKTsKK3ZvaWQgYXRoX2RyYWluX2FsbF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwordm9pZCBhdGhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCSAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCk7Cit2b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOwordm9pZCBhdGhfdHhfbm9kZV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKTsKK3ZvaWQgYXRoX3R4cV9zY2hlZHVsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSk7CitpbnQgYXRoX3R4X2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBuYnVmcyk7CitpbnQgYXRoX3R4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworc3RydWN0IGF0aF90eHEgKmF0aF90ZXN0X2dldF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGF0aF90eHFfdXBkYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSwKKwkJICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnEpOworaW50IGF0aF90eF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpOwordm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aF90eF9jYWJxKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2Jvb2wgYXRoX3R4X2FnZ3JfY2hlY2soc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4sIHU4IHRpZG5vKTsKK2ludCBhdGhfdHhfYWdncl9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJICAgICAgdTE2IHRpZCwgdTE2ICpzc24pOworaW50IGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpOwordm9pZCBhdGhfdHhfYWdncl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpOworCisvKioqKioqKiovCisvKiBWSUZzICovCisvKioqKioqKiovCisKK3N0cnVjdCBhdGhfdmlmIHsKKwlpbnQgYXZfYnNsb3Q7CisJX19sZTY0IHRzZl9hZGp1c3Q7IC8qIFRTRiBhZGp1c3RtZW50IGZvciBzdGFnZ2VyZWQgYmVhY29ucyAqLworCWVudW0gbmw4MDIxMV9pZnR5cGUgYXZfb3Btb2RlOworCXN0cnVjdCBhdGhfYnVmICphdl9iY2J1ZjsKKwlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgYXZfYnR4Y3RsOworCXU4IGJzc2lkW0VUSF9BTEVOXTsgLyogY3VycmVudCBCU1NJRCBmcm9tIGNvbmZpZ19pbnRlcmZhY2UgKi8KK307CisKKy8qKioqKioqKioqKioqKioqKioqLworLyogQmVhY29uIEhhbmRsaW5nICovCisvKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBiZWFjb25zIHdlIHN0YWdnZXIsIChpLmUuIHJlZ2FyZGxlc3Mgb2YgdGhlCisgKiBudW1iZXIgb2YgQlNTSURzKSBpZiBhIGdpdmVuIGJlYWNvbiBkb2VzIG5vdCBnbyBvdXQgZXZlbiBhZnRlciB3YWl0aW5nIHRoaXMKKyAqIG51bWJlciBvZiBiZWFjb24gaW50ZXJ2YWxzLCB0aGUgZ2FtZSdzIHVwLgorICovCisjZGVmaW5lIEJTVFVDS19USFJFU0ggICAgICAgICAgIAkoOSAqIEFUSF9CQ0JVRikKKyNkZWZpbmUJQVRIX0JDQlVGICAgICAgICAgICAgICAgCTQKKyNkZWZpbmUgQVRIX0RFRkFVTFRfQklOVFZBTCAgICAgCTEwMCAvKiBUVSAqLworI2RlZmluZSBBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAJMTAKKyNkZWZpbmUgSUVFRTgwMjExX01TX1RPX1RVKHgpICAgICAgICAgICAoKCh4KSAqIDEwMDApIC8gMTAyNCkKKworc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIHsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJdTE2IGR0aW1fcGVyaW9kOworCXUxNiBibWlzc190aW1lb3V0OworCXU4IGR0aW1fY291bnQ7Cit9OworCitzdHJ1Y3QgYXRoX2JlYWNvbiB7CisJZW51bSB7CisJCU9LLAkJLyogbm8gY2hhbmdlIG5lZWRlZCAqLworCQlVUERBVEUsCQkvKiB1cGRhdGUgcGVuZGluZyAqLworCQlDT01NSVQJCS8qIGJlYWNvbiBzZW50LCBjb21taXQgY2hhbmdlICovCisJfSB1cGRhdGVzbG90OwkJLyogc2xvdCB0aW1lIHVwZGF0ZSBmc20gKi8KKworCXUzMiBiZWFjb25xOworCXUzMiBibWlzc2NudDsKKwl1MzIgYXN0X2JlX3htaXQ7CisJdTY0IGJjX3RzdGFtcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqYnNsb3RbQVRIX0JDQlVGXTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICpic2xvdF9hcGh5W0FUSF9CQ0JVRl07CisJaW50IHNsb3R0aW1lOworCWludCBzbG90dXBkYXRlOworCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIGJlYWNvbl9xaTsKKwlzdHJ1Y3QgYXRoX2Rlc2NkbWEgYmRtYTsKKwlzdHJ1Y3QgYXRoX3R4cSAqY2FicTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJidWY7Cit9OworCit2b2lkIGF0aF9iZWFjb25fdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCBhdGhfYmVhY29uX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CitpbnQgYXRoX2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9odyAqYWgpOworaW50IGF0aF9iZWFjb25fYWxsb2Moc3RydWN0IGF0aF93aXBoeSAqYXBoeSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2b2lkIGF0aF9iZWFjb25fcmV0dXJuKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwKTsKKworLyoqKioqKiovCisvKiBBTkkgKi8KKy8qKioqKioqLworCisjZGVmaW5lIEFUSF9TVEFfU0hPUlRfQ0FMSU5URVJWQUwgMTAwMCAgICAvKiAxIHNlY29uZCAqLworI2RlZmluZSBBVEhfQVBfU0hPUlRfQ0FMSU5URVJWQUwgIDEwMCAgICAgLyogMTAwIG1zICovCisjZGVmaW5lIEFUSF9BTklfUE9MTElOVEVSVkFMICAgICAgMTAwICAgICAvKiAxMDAgbXMgKi8KKyNkZWZpbmUgQVRIX0xPTkdfQ0FMSU5URVJWQUwgICAgICAzMDAwMCAgIC8qIDMwIHNlY29uZHMgKi8KKyNkZWZpbmUgQVRIX1JFU1RBUlRfQ0FMSU5URVJWQUwgICAxMjAwMDAwIC8qIDIwIG1pbnV0ZXMgKi8KKworc3RydWN0IGF0aF9hbmkgeworCWJvb2wgY2FsZG9uZTsKKwlpbnQxNl90IG5vaXNlX2Zsb29yOworCXVuc2lnbmVkIGludCBsb25nY2FsX3RpbWVyOworCXVuc2lnbmVkIGludCBzaG9ydGNhbF90aW1lcjsKKwl1bnNpZ25lZCBpbnQgcmVzZXRjYWxfdGltZXI7CisJdW5zaWduZWQgaW50IGNoZWNrYW5pX3RpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqLworLyogICBMRUQgQ29udHJvbCAgICAqLworLyoqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIEFUSF9MRURfUElOCTEKKyNkZWZpbmUgQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFCTM1MAkvKiBpbiBtc2VjcyAqLworI2RlZmluZSBBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFCTI1MAkvKiBpbiBtc2VjcyAqLworCitlbnVtIGF0aF9sZWRfdHlwZSB7CisJQVRIX0xFRF9SQURJTywKKwlBVEhfTEVEX0FTU09DLAorCUFUSF9MRURfVFgsCisJQVRIX0xFRF9SWAorfTsKKworc3RydWN0IGF0aF9sZWQgeworCXN0cnVjdCBhdGhfc29mdGMgKnNjOworCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7CisJZW51bSBhdGhfbGVkX3R5cGUgbGVkX3R5cGU7CisJY2hhciBuYW1lWzMyXTsKKwlib29sIHJlZ2lzdGVyZWQ7Cit9OworCisvKiBSZmtpbGwgKi8KKyNkZWZpbmUgQVRIX1JGS0lMTF9QT0xMX0lOVEVSVkFMCTIwMDAgLyogbXNlY3MgKi8KKworc3RydWN0IGF0aF9yZmtpbGwgeworCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOworCWNoYXIgcmZraWxsX25hbWVbMzJdOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqLworLyogTWFpbiBkcml2ZXIgY29yZSAqLworLyoqKioqKioqKioqKioqKioqKioqLworCisvKgorICogRGVmYXVsdCBjYWNoZSBsaW5lIHNpemUsIGluIGJ5dGVzLgorICogVXNlZCB3aGVuIFBDSSBkZXZpY2Ugbm90IGZ1bGx5IGluaXRpYWxpemVkIGJ5IGJvb3Ryb20vQklPUworKi8KKyNkZWZpbmUgREVGQVVMVF9DQUNIRUxJTkUgICAgICAgMzIKKyNkZWZpbmUJQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgLTk1CisjZGVmaW5lIEFUSF9SRUdDTEFTU0lEU19NQVggICAgIDEwCisjZGVmaW5lIEFUSF9DQUJRX1JFQURZX1RJTUUgICAgIDgwICAgICAgLyogJSBvZiBiZWFjb24gaW50ZXJ2YWwgKi8KKyNkZWZpbmUgQVRIX01BWF9TV19SRVRSSUVTICAgICAgMTAKKyNkZWZpbmUgQVRIX0NIQU5fTUFYICAgICAgICAgICAgMjU1CisjZGVmaW5lIElFRUU4MDIxMV9XRVBfTktJRCAgICAgIDQgICAgICAgLyogbnVtYmVyIG9mIGtleSBpZHMgKi8KKworLyoKKyAqIFRoZSBrZXkgY2FjaGUgaXMgdXNlZCBmb3IgaC93IGNpcGhlciBzdGF0ZSBhbmQgYWxzbyBmb3IKKyAqIHRyYWNraW5nIHN0YXRpb24gc3RhdGUgc3VjaCBhcyB0aGUgY3VycmVudCB0eCBhbnRlbm5hLgorICogV2UgYWxzbyBzZXR1cCBhIG1hcHBpbmcgdGFibGUgYmV0d2VlbiBrZXkgY2FjaGUgc2xvdCBpbmRpY2VzCisgKiBhbmQgc3RhdGlvbiBzdGF0ZSB0byBzaG9ydC1jaXJjdWl0IG5vZGUgbG9va3VwcyBvbiByeC4KKyAqIERpZmZlcmVudCBwYXJ0cyBoYXZlIGRpZmZlcmVudCBzaXplIGtleSBjYWNoZXMuICBXZSBoYW5kbGUKKyAqIHVwIHRvIEFUSF9LRVlNQVggZW50cmllcyAoY291bGQgZHluYW1pY2FsbHkgYWxsb2NhdGUgc3RhdGUpLgorICovCisjZGVmaW5lCUFUSF9LRVlNQVgJICAgICAgICAxMjggICAgIC8qIG1heCBrZXkgY2FjaGUgc2l6ZSB3ZSBoYW5kbGUgKi8KKworI2RlZmluZSBBVEhfVFhQT1dFUl9NQVggICAgICAgICAxMDAgICAgIC8qIC41IGRCbSB1bml0cyAqLworI2RlZmluZSBBVEhfUlNTSV9EVU1NWV9NQVJLRVIgICAweDEyNworI2RlZmluZSBBVEhfUkFURV9EVU1NWV9NQVJLRVIgICAwCisKKyNkZWZpbmUgU0NfT1BfSU5WQUxJRCAgICAgICAgICAgQklUKDApCisjZGVmaW5lIFNDX09QX0JFQUNPTlMgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBTQ19PUF9SWEFHR1IgICAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgU0NfT1BfVFhBR0dSICAgICAgICAgICAgQklUKDMpCisjZGVmaW5lIFNDX09QX0NIQUlOTUFTS19VUERBVEUgIEJJVCg0KQorI2RlZmluZSBTQ19PUF9GVUxMX1JFU0VUICAgICAgICBCSVQoNSkKKyNkZWZpbmUgU0NfT1BfUFJFQU1CTEVfU0hPUlQgICAgQklUKDYpCisjZGVmaW5lIFNDX09QX1BST1RFQ1RfRU5BQkxFICAgIEJJVCg3KQorI2RlZmluZSBTQ19PUF9SWEZMVVNIICAgICAgICAgICBCSVQoOCkKKyNkZWZpbmUgU0NfT1BfTEVEX0FTU09DSUFURUQgICAgQklUKDkpCisjZGVmaW5lIFNDX09QX1JGS0lMTF9SRUdJU1RFUkVEIEJJVCgxMCkKKyNkZWZpbmUgU0NfT1BfUkZLSUxMX1NXX0JMT0NLRUQgQklUKDExKQorI2RlZmluZSBTQ19PUF9SRktJTExfSFdfQkxPQ0tFRCBCSVQoMTIpCisjZGVmaW5lIFNDX09QX1dBSVRfRk9SX0JFQUNPTiAgIEJJVCgxMykKKyNkZWZpbmUgU0NfT1BfTEVEX09OICAgICAgICAgICAgQklUKDE0KQorI2RlZmluZSBTQ19PUF9TQ0FOTklORyAgICAgICAgICBCSVQoMTUpCisjZGVmaW5lIFNDX09QX1RTRl9SRVNFVCAgICAgICAgIEJJVCgxNikKKworc3RydWN0IGF0aF9idXNfb3BzIHsKKwl2b2lkCQkoKnJlYWRfY2FjaGVzaXplKShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opOworCXZvaWQJCSgqY2xlYW51cCkoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworCWJvb2wJCSgqZWVwcm9tX3JlYWQpKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpOworfTsKKworc3RydWN0IGF0aF93aXBoeTsKKworc3RydWN0IGF0aF9zb2Z0YyB7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJc3BpbmxvY2tfdCB3aXBoeV9sb2NrOyAvKiBzcGlubG9jayB0byBwcm90ZWN0IGF0aF93aXBoeSBkYXRhICovCisJc3RydWN0IGF0aF93aXBoeSAqcHJpX3dpcGh5OworCXN0cnVjdCBhdGhfd2lwaHkgKipzZWNfd2lwaHk7IC8qIHNlY29uZGFyeSB3aXBoeXMgKHZpcnR1YWwgcmFkaW9zKTsgbWF5CisJCQkJICAgICAgICogaGF2ZSBOVUxMIGVudHJpZXMgKi8KKwlpbnQgbnVtX3NlY193aXBoeTsgLyogbnVtYmVyIG9mIHNlY193aXBoeSBwb2ludGVycyBpbiB0aGUgYXJyYXkgKi8KKwlpbnQgY2hhbl9pZHg7CisJaW50IGNoYW5faXNfaHQ7CisJc3RydWN0IGF0aF93aXBoeSAqbmV4dF93aXBoeTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hhbl93b3JrOworCWludCB3aXBoeV9zZWxlY3RfZmFpbHVyZXM7CisJdW5zaWduZWQgbG9uZyB3aXBoeV9zZWxlY3RfZmlyc3RfZmFpbDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdpcGh5X3dvcms7CisJdW5zaWduZWQgbG9uZyB3aXBoeV9zY2hlZHVsZXJfaW50OworCWludCB3aXBoeV9zY2hlZHVsZXJfaW5kZXg7CisKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaW50cl90cTsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgYmNvbl90YXNrbGV0OworCXN0cnVjdCBhdGhfaHcgKnNjX2FoOworCXZvaWQgX19pb21lbSAqbWVtOworCWludCBpcnE7CisJc3BpbmxvY2tfdCBzY19yZXNldGxvY2s7CisJc3BpbmxvY2tfdCBzY19zZXJpYWxfcnc7CisJc3RydWN0IG11dGV4IG11dGV4OworCisJdTggY3VyYnNzaWRbRVRIX0FMRU5dOworCXU4IGJzc2lkbWFza1tFVEhfQUxFTl07CisJdTMyIGludHJzdGF0dXM7CisJdTMyIHNjX2ZsYWdzOyAvKiBTQ19PUF8qICovCisJdTE2IGN1cnR4cG93OworCXUxNiBjdXJhaWQ7CisJdTE2IGNhY2hlbHN6OworCXU4IG5iY252aWZzOworCXUxNiBudmlmczsKIAl1OCB0eF9jaGFpbm1hc2s7CiAJdTggcnhfY2hhaW5tYXNrOwotCXUxNiB0eF90cmlnbGV2ZWxfbWF4OwotCXUxNiByZWdfY2FwOwotCXU4IG51bV9ncGlvX3BpbnM7Ci0JdTggbnVtX2FudGNmZ18yZ2h6OwotCXU4IG51bV9hbnRjZmdfNWdoejsKLX07Ci0KLXN0cnVjdCBhdGg5a19vcHNfY29uZmlnIHsKLQlpbnQgZG1hX2JlYWNvbl9yZXNwb25zZV90aW1lOwotCWludCBzd19iZWFjb25fcmVzcG9uc2VfdGltZTsKLQlpbnQgYWRkaXRpb25hbF9zd2JhX2JhY2tvZmY7Ci0JaW50IGFja182bWI7Ci0JaW50IGN3bV9pZ25vcmVfZXh0Y2NhOwotCXU4IHBjaWVfcG93ZXJzYXZlX2VuYWJsZTsKLQl1OCBwY2llX2wxc2twX2VuYWJsZTsKLQl1OCBwY2llX2Nsb2NrX3JlcTsKLQl1MzIgcGNpZV93YWVuOwotCWludCBwY2llX3Bvd2VyX3Jlc2V0OwotCXU4IHBjaWVfcmVzdG9yZTsKLQl1OCBhbmFsb2dfc2hpZnRyZWc7Ci0JdTggaHRfZW5hYmxlOwotCXUzMiBvZmRtX3RyaWdfbG93OwotCXUzMiBvZmRtX3RyaWdfaGlnaDsKLQl1MzIgY2NrX3RyaWdfaGlnaDsKLQl1MzIgY2NrX3RyaWdfbG93OwotCXUzMiBlbmFibGVfYW5pOwotCXU4IG5vaXNlX2ltbXVuaXR5X2xldmVsOwotCXUzMiBvZmRtX3dlYWtzaWduYWxfZGV0OwotCXUzMiBjY2tfd2Vha3NpZ25hbF90aHI7Ci0JdTggc3B1cl9pbW11bml0eV9sZXZlbDsKLQl1OCBmaXJzdGVwX2xldmVsOwotCWludDhfdCByc3NpX3Rocl9oaWdoOwotCWludDhfdCByc3NpX3Rocl9sb3c7Ci0JdTE2IGRpdmVyc2l0eV9jb250cm9sOwotCXUxNiBhbnRlbm5hX3N3aXRjaF9zd2FwOwotCWludCBzZXJpYWxpemVfcmVnbW9kZTsKLQlpbnQgaW50cl9taXRpZ2F0aW9uOwotI2RlZmluZSBTUFVSX0RJU0FCTEUgICAgICAgIAkwCi0jZGVmaW5lIFNQVVJfRU5BQkxFX0lPQ1RMICAgCTEKLSNkZWZpbmUgU1BVUl9FTkFCTEVfRUVQUk9NICAJMgotI2RlZmluZSBBUl9FRVBST01fTU9EQUxfU1BVUlMgICA1Ci0jZGVmaW5lIEFSX1NQVVJfNTQxM18xICAgICAgCTE2NDAKLSNkZWZpbmUgQVJfU1BVUl81NDEzXzIgICAgICAJMTIwMAotI2RlZmluZSBBUl9OT19TUFVSICAgICAgCTB4ODAwMAotI2RlZmluZSBBUl9CQVNFX0ZSRVFfMkdIWiAgIAkyMzAwCi0jZGVmaW5lIEFSX0JBU0VfRlJFUV81R0haICAgCTQ5MDAKLSNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUNDAgMTkKLSNkZWZpbmUgQVJfU1BVUl9GRUVRX0JPVU5EX0hUMjAgMTAKLQlpbnQgc3B1cm1vZGU7Ci0JdTE2IHNwdXJjaGFuc1tBUl9FRVBST01fTU9EQUxfU1BVUlNdWzJdOwotfTsKLQotZW51bSBhdGg5a190eF9xdWV1ZSB7Ci0JQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUgPSAwLAotCUFUSDlLX1RYX1FVRVVFX0RBVEEsCi0JQVRIOUtfVFhfUVVFVUVfQkVBQ09OLAotCUFUSDlLX1RYX1FVRVVFX0NBQiwKLQlBVEg5S19UWF9RVUVVRV9VQVBTRCwKLQlBVEg5S19UWF9RVUVVRV9QU1BPTEwKLX07Ci0KLSNkZWZpbmUJQVRIOUtfTlVNX1RYX1FVRVVFUyAxMAotCi1lbnVtIGF0aDlrX3R4X3F1ZXVlX3N1YnR5cGUgewotCUFUSDlLX1dNRV9BQ19CSyA9IDAsCi0JQVRIOUtfV01FX0FDX0JFLAotCUFUSDlLX1dNRV9BQ19WSSwKLQlBVEg5S19XTUVfQUNfVk8sCi0JQVRIOUtfV01FX1VQU0QKLX07Ci0KLWVudW0gYXRoOWtfdHhfcXVldWVfZmxhZ3MgewotCVRYUV9GTEFHX1RYT0tJTlRfRU5BQkxFID0gMHgwMDAxLAotCVRYUV9GTEFHX1RYRVJSSU5UX0VOQUJMRSA9IDB4MDAwMSwKLQlUWFFfRkxBR19UWERFU0NJTlRfRU5BQkxFID0gMHgwMDAyLAotCVRYUV9GTEFHX1RYRU9MSU5UX0VOQUJMRSA9IDB4MDAwNCwKLQlUWFFfRkxBR19UWFVSTklOVF9FTkFCTEUgPSAweDAwMDgsCi0JVFhRX0ZMQUdfQkFDS09GRl9ESVNBQkxFID0gMHgwMDEwLAotCVRYUV9GTEFHX0NPTVBSRVNTSU9OX0VOQUJMRSA9IDB4MDAyMCwKLQlUWFFfRkxBR19SRFlUSU1FX0VYUF9QT0xJQ1lfRU5BQkxFID0gMHgwMDQwLAotCVRYUV9GTEFHX0ZSQUdfQlVSU1RfQkFDS09GRl9FTkFCTEUgPSAweDAwODAsCi19OwotCi0jZGVmaW5lIEFUSDlLX1RYUV9VU0VERUZBVUxUICgodTMyKSAtMSkKLQotI2RlZmluZSBBVEg5S19ERUNPTVBfTUFTS19TSVpFICAgICAxMjgKLSNkZWZpbmUgQVRIOUtfUkVBRFlfVElNRV9MT19CT1VORCAgNTAKLSNkZWZpbmUgQVRIOUtfUkVBRFlfVElNRV9ISV9CT1VORCAgOTYKLQotZW51bSBhdGg5a19wa3RfdHlwZSB7Ci0JQVRIOUtfUEtUX1RZUEVfTk9STUFMID0gMCwKLQlBVEg5S19QS1RfVFlQRV9BVElNLAotCUFUSDlLX1BLVF9UWVBFX1BTUE9MTCwKLQlBVEg5S19QS1RfVFlQRV9CRUFDT04sCi0JQVRIOUtfUEtUX1RZUEVfUFJPQkVfUkVTUCwKLQlBVEg5S19QS1RfVFlQRV9DSElSUCwKLQlBVEg5S19QS1RfVFlQRV9HUlBfUE9MTCwKLX07Ci0KLXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHsKLQl1MzIgdHFpX3ZlcjsKLQllbnVtIGF0aDlrX3R4X3F1ZXVlIHRxaV90eXBlOwotCWVudW0gYXRoOWtfdHhfcXVldWVfc3VidHlwZSB0cWlfc3VidHlwZTsKLQllbnVtIGF0aDlrX3R4X3F1ZXVlX2ZsYWdzIHRxaV9xZmxhZ3M7Ci0JdTMyIHRxaV9wcmlvcml0eTsKLQl1MzIgdHFpX2FpZnM7Ci0JdTMyIHRxaV9jd21pbjsKLQl1MzIgdHFpX2N3bWF4OwotCXUxNiB0cWlfc2hyZXRyeTsKLQl1MTYgdHFpX2xncmV0cnk7Ci0JdTMyIHRxaV9jYnJQZXJpb2Q7Ci0JdTMyIHRxaV9jYnJPdmVyZmxvd0xpbWl0OwotCXUzMiB0cWlfYnVyc3RUaW1lOwotCXUzMiB0cWlfcmVhZHlUaW1lOwotCXUzMiB0cWlfcGh5c0NvbXBCdWY7Ci0JdTMyIHRxaV9pbnRGbGFnczsKLX07Ci0KLWVudW0gYXRoOWtfcnhfZmlsdGVyIHsKLQlBVEg5S19SWF9GSUxURVJfVUNBU1QgPSAweDAwMDAwMDAxLAotCUFUSDlLX1JYX0ZJTFRFUl9NQ0FTVCA9IDB4MDAwMDAwMDIsCi0JQVRIOUtfUlhfRklMVEVSX0JDQVNUID0gMHgwMDAwMDAwNCwKLQlBVEg5S19SWF9GSUxURVJfQ09OVFJPTCA9IDB4MDAwMDAwMDgsCi0JQVRIOUtfUlhfRklMVEVSX0JFQUNPTiA9IDB4MDAwMDAwMTAsCi0JQVRIOUtfUlhfRklMVEVSX1BST00gPSAweDAwMDAwMDIwLAotCUFUSDlLX1JYX0ZJTFRFUl9QUk9CRVJFUSA9IDB4MDAwMDAwODAsCi0JQVRIOUtfUlhfRklMVEVSX1BTUE9MTCA9IDB4MDAwMDQwMDAsCi0JQVRIOUtfUlhfRklMVEVSX1BIWUVSUiA9IDB4MDAwMDAxMDAsCi0JQVRIOUtfUlhfRklMVEVSX1BIWVJBREFSID0gMHgwMDAwMjAwMCwKLX07Ci0KLWVudW0gYXRoOWtfaW50IHsKLQlBVEg5S19JTlRfUlggPSAweDAwMDAwMDAxLAotCUFUSDlLX0lOVF9SWERFU0MgPSAweDAwMDAwMDAyLAotCUFUSDlLX0lOVF9SWE5PRlJNID0gMHgwMDAwMDAwOCwKLQlBVEg5S19JTlRfUlhFT0wgPSAweDAwMDAwMDEwLAotCUFUSDlLX0lOVF9SWE9STiA9IDB4MDAwMDAwMjAsCi0JQVRIOUtfSU5UX1RYID0gMHgwMDAwMDA0MCwKLQlBVEg5S19JTlRfVFhERVNDID0gMHgwMDAwMDA4MCwKLQlBVEg5S19JTlRfVElNX1RJTUVSID0gMHgwMDAwMDEwMCwKLQlBVEg5S19JTlRfVFhVUk4gPSAweDAwMDAwODAwLAotCUFUSDlLX0lOVF9NSUIgPSAweDAwMDAxMDAwLAotCUFUSDlLX0lOVF9SWFBIWSA9IDB4MDAwMDQwMDAsCi0JQVRIOUtfSU5UX1JYS0NNID0gMHgwMDAwODAwMCwKLQlBVEg5S19JTlRfU1dCQSA9IDB4MDAwMTAwMDAsCi0JQVRIOUtfSU5UX0JNSVNTID0gMHgwMDA0MDAwMCwKLQlBVEg5S19JTlRfQk5SID0gMHgwMDEwMDAwMCwKLQlBVEg5S19JTlRfVElNID0gMHgwMDIwMDAwMCwKLQlBVEg5S19JTlRfRFRJTSA9IDB4MDA0MDAwMDAsCi0JQVRIOUtfSU5UX0RUSU1TWU5DID0gMHgwMDgwMDAwMCwKLQlBVEg5S19JTlRfR1BJTyA9IDB4MDEwMDAwMDAsCi0JQVRIOUtfSU5UX0NBQkVORCA9IDB4MDIwMDAwMDAsCi0JQVRIOUtfSU5UX0NTVCA9IDB4MTAwMDAwMDAsCi0JQVRIOUtfSU5UX0dUVCA9IDB4MjAwMDAwMDAsCi0JQVRIOUtfSU5UX0ZBVEFMID0gMHg0MDAwMDAwMCwKLQlBVEg5S19JTlRfR0xPQkFMID0gMHg4MDAwMDAwMCwKLQlBVEg5S19JTlRfQk1JU0MgPSBBVEg5S19JTlRfVElNIHwKLQkJQVRIOUtfSU5UX0RUSU0gfAotCQlBVEg5S19JTlRfRFRJTVNZTkMgfAotCQlBVEg5S19JTlRfQ0FCRU5ELAotCUFUSDlLX0lOVF9DT01NT04gPSBBVEg5S19JTlRfUlhOT0ZSTSB8Ci0JCUFUSDlLX0lOVF9SWERFU0MgfAotCQlBVEg5S19JTlRfUlhFT0wgfAotCQlBVEg5S19JTlRfUlhPUk4gfAotCQlBVEg5S19JTlRfVFhVUk4gfAotCQlBVEg5S19JTlRfVFhERVNDIHwKLQkJQVRIOUtfSU5UX01JQiB8Ci0JCUFUSDlLX0lOVF9SWFBIWSB8Ci0JCUFUSDlLX0lOVF9SWEtDTSB8Ci0JCUFUSDlLX0lOVF9TV0JBIHwKLQkJQVRIOUtfSU5UX0JNSVNTIHwKLQkJQVRIOUtfSU5UX0dQSU8sCi0JQVRIOUtfSU5UX05PQ0FSRCA9IDB4ZmZmZmZmZmYKLX07Ci0KLSNkZWZpbmUgQVRIOUtfUkFURVNFUklFU19SVFNfQ1RTICAweDAwMDEKLSNkZWZpbmUgQVRIOUtfUkFURVNFUklFU18yMDQwICAgICAweDAwMDIKLSNkZWZpbmUgQVRIOUtfUkFURVNFUklFU19IQUxGR0kgICAweDAwMDQKLQotc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyB7Ci0JdTMyIFRyaWVzOwotCXUzMiBSYXRlOwotCXUzMiBQa3REdXJhdGlvbjsKLQl1MzIgQ2hTZWw7Ci0JdTMyIFJhdGVGbGFnczsKLX07Ci0KLSNkZWZpbmUgQ0hBTk5FTF9DV19JTlQgICAgMHgwMDAwMgotI2RlZmluZSBDSEFOTkVMX0NDSyAgICAgICAweDAwMDIwCi0jZGVmaW5lIENIQU5ORUxfT0ZETSAgICAgIDB4MDAwNDAKLSNkZWZpbmUgQ0hBTk5FTF8yR0haICAgICAgMHgwMDA4MAotI2RlZmluZSBDSEFOTkVMXzVHSFogICAgICAweDAwMTAwCi0jZGVmaW5lIENIQU5ORUxfUEFTU0lWRSAgIDB4MDAyMDAKLSNkZWZpbmUgQ0hBTk5FTF9EWU4gICAgICAgMHgwMDQwMAotI2RlZmluZSBDSEFOTkVMX0hBTEYgICAgICAweDA0MDAwCi0jZGVmaW5lIENIQU5ORUxfUVVBUlRFUiAgIDB4MDgwMDAKLSNkZWZpbmUgQ0hBTk5FTF9IVDIwICAgICAgMHgxMDAwMAotI2RlZmluZSBDSEFOTkVMX0hUNDBQTFVTICAweDIwMDAwCi0jZGVmaW5lIENIQU5ORUxfSFQ0ME1JTlVTIDB4NDAwMDAKLQotI2RlZmluZSBDSEFOTkVMX0lOVEVSRkVSRU5DRSAgICAweDAxCi0jZGVmaW5lIENIQU5ORUxfREZTICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQ0hBTk5FTF80TVNfTElNSVQgICAgICAgMHgwNAotI2RlZmluZSBDSEFOTkVMX0RGU19DTEVBUiAgICAgICAweDA4Ci0jZGVmaW5lIENIQU5ORUxfRElTQUxMT1dfQURIT0MgIDB4MTAKLSNkZWZpbmUgQ0hBTk5FTF9QRVJfMTFEX0FESE9DICAgMHgyMAotCi0jZGVmaW5lIENIQU5ORUxfQSAgICAgICAgICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX09GRE0pCi0jZGVmaW5lIENIQU5ORUxfQiAgICAgICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0NDSykKLSNkZWZpbmUgQ0hBTk5FTF9HICAgICAgICAgICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfT0ZETSkKLSNkZWZpbmUgQ0hBTk5FTF9HX0hUMjAgICAgICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfSFQyMCkKLSNkZWZpbmUgQ0hBTk5FTF9BX0hUMjAgICAgICAoQ0hBTk5FTF81R0hafENIQU5ORUxfSFQyMCkKLSNkZWZpbmUgQ0hBTk5FTF9HX0hUNDBQTFVTICAoQ0hBTk5FTF8yR0hafENIQU5ORUxfSFQ0MFBMVVMpCi0jZGVmaW5lIENIQU5ORUxfR19IVDQwTUlOVVMgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUNDBNSU5VUykKLSNkZWZpbmUgQ0hBTk5FTF9BX0hUNDBQTFVTICAoQ0hBTk5FTF81R0hafENIQU5ORUxfSFQ0MFBMVVMpCi0jZGVmaW5lIENIQU5ORUxfQV9IVDQwTUlOVVMgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUNDBNSU5VUykKLSNkZWZpbmUgQ0hBTk5FTF9BTEwJCQkJXAotCShDSEFOTkVMX09GRE18CQkJCVwKLQkgQ0hBTk5FTF9DQ0t8CQkJCVwKLQkgQ0hBTk5FTF8yR0haIHwJCQkJXAotCSBDSEFOTkVMXzVHSFogfAkJCQlcCi0JIENIQU5ORUxfSFQyMCB8CQkJCVwKLQkgQ0hBTk5FTF9IVDQwUExVUyB8CQkJXAotCSBDSEFOTkVMX0hUNDBNSU5VUykKLQotc3RydWN0IGF0aDlrX2NoYW5uZWwgewotCXUxNiBjaGFubmVsOwotCXUzMiBjaGFubmVsRmxhZ3M7Ci0JdTggcHJpdkZsYWdzOwotCWludDhfdCBtYXhSZWdUeFBvd2VyOwotCWludDhfdCBtYXhUeFBvd2VyOwotCWludDhfdCBtaW5UeFBvd2VyOwotCXUzMiBjaGFubW9kZTsKLQlpbnQzMl90IENhbFZhbGlkOwotCWJvb2wgb25lVGltZUNhbHNEb25lOwotCWludDhfdCBpQ29mZjsKLQlpbnQ4X3QgcUNvZmY7Ci0JaW50MTZfdCByYXdOb2lzZUZsb29yOwotCWludDhfdCBhbnRlbm5hTWF4OwotCXUzMiByZWdEbW5GbGFnczsKLQl1MzIgY29uZm9ybWFuY2VUZXN0TGltaXRbM107IC8qIDA6MTFhLCAxOiAxMWIsIDI6MTFnICovCi0jaWZkZWYgQVRIX05GX1BFUl9DSEFOCi0Jc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgbmZDYWxIaXN0W05VTV9ORl9SRUFESU5HU107Ci0jZW5kaWYKLX07Ci0KLSNkZWZpbmUgSVNfQ0hBTl9BKF9jKSAoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0EpID09IENIQU5ORUxfQSkgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUMjApID09IENIQU5ORUxfQV9IVDIwKSB8fCBcCi0gICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FfSFQ0MFBMVVMpID09IENIQU5ORUxfQV9IVDQwUExVUykgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9BX0hUNDBNSU5VUykpCi0jZGVmaW5lIElTX0NIQU5fRyhfYykgKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgKENIQU5ORUxfRykpID09IENIQU5ORUxfRykgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUMjApID09IENIQU5ORUxfR19IVDIwKSB8fCBcCi0gICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0dfSFQ0MFBMVVMpID09IENIQU5ORUxfR19IVDQwUExVUykgfHwgXAotICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9HX0hUNDBNSU5VUykpCi0jZGVmaW5lIElTX0NIQU5fT0ZETShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX09GRE0pICE9IDApCi0jZGVmaW5lIElTX0NIQU5fNUdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzVHSFopICE9IDApCi0jZGVmaW5lIElTX0NIQU5fMkdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzJHSFopICE9IDApCi0jZGVmaW5lIElTX0NIQU5fUEFTU0lWRShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1BBU1NJVkUpICE9IDApCi0jZGVmaW5lIElTX0NIQU5fSEFMRl9SQVRFKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfSEFMRikgIT0gMCkKLSNkZWZpbmUgSVNfQ0hBTl9RVUFSVEVSX1JBVEUoX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9RVUFSVEVSKSAhPSAwKQotCi0vKiBUaGVzZSBtYWNyb3MgY2hlY2sgY2hhbm1vZGUgYW5kIG5vdCBjaGFubmVsRmxhZ3MgKi8KLSNkZWZpbmUgSVNfQ0hBTl9CKF9jKSAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9CKQotI2RlZmluZSBJU19DSEFOX0hUMjAoX2MpICgoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUMjApIHx8CVwKLQkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDIwKSkKLSNkZWZpbmUgSVNfQ0hBTl9IVDQwKF9jKSAoKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwUExVUykgfHwJXAotCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUNDBNSU5VUykgfHwJXAotCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9HX0hUNDBQTFVTKSB8fAlcCi0JCQkgICgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQ0ME1JTlVTKSkKLSNkZWZpbmUgSVNfQ0hBTl9IVChfYykgKElTX0NIQU5fSFQyMCgoX2MpKSB8fCBJU19DSEFOX0hUNDAoKF9jKSkpCi0KLSNkZWZpbmUgSVNfQ0hBTl9JTl9QVUJMSUNfU0FGRVRZX0JBTkQoX2MpICgoX2MpID4gNDk0MCAmJiAoX2MpIDwgNDk5MCkKLSNkZWZpbmUgSVNfQ0hBTl9BXzVNSFpfU1BBQ0VEKF9jKQkJCVwKLQkoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzVHSFopICE9IDApICYmCVwKLQkgKCgoX2MpLT5jaGFubmVsICUgMjApICE9IDApICYmCQkJXAotCSAoKChfYyktPmNoYW5uZWwgJSAxMCkgIT0gMCkpCi0KLXN0cnVjdCBhdGg5a19rZXl2YWwgewotCXU4IGt2X3R5cGU7Ci0JdTgga3ZfcGFkOwotCXUxNiBrdl9sZW47Ci0JdTgga3ZfdmFsWzE2XTsKLQl1OCBrdl9taWNbOF07Ci0JdTgga3ZfdHhtaWNbOF07Ci19OwotCi1lbnVtIGF0aDlrX2tleV90eXBlIHsKLQlBVEg5S19LRVlfVFlQRV9DTEVBUiwKLQlBVEg5S19LRVlfVFlQRV9XRVAsCi0JQVRIOUtfS0VZX1RZUEVfQUVTLAotCUFUSDlLX0tFWV9UWVBFX1RLSVAsCi19OwotCi1lbnVtIGF0aDlrX2NpcGhlciB7Ci0JQVRIOUtfQ0lQSEVSX1dFUCA9IDAsCi0JQVRIOUtfQ0lQSEVSX0FFU19PQ0IgPSAxLAotCUFUSDlLX0NJUEhFUl9BRVNfQ0NNID0gMiwKLQlBVEg5S19DSVBIRVJfQ0tJUCA9IDMsCi0JQVRIOUtfQ0lQSEVSX1RLSVAgPSA0LAotCUFUSDlLX0NJUEhFUl9DTFIgPSA1LAotCUFUSDlLX0NJUEhFUl9NSUMgPSAxMjcKLX07Ci0KLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9DT01QUkVTU19ESVMgICAweDAwMDEKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9BRVNfRElTICAgICAgICAweDAwMDIKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9GQVNURlJBTUVfRElTICAweDAwMDQKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9CVVJTVF9ESVMgICAgICAweDAwMDgKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9NQVhRQ1UgICAgICAgICAweDAxRjAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUENBUF9NQVhRQ1VfUyAgICAgICA0Ci0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfSEVBVllfQ0xJUF9FTiAgMHgwMjAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfS0NfRU5UUklFUyAgICAgMHhGMDAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfS0NfRU5UUklFU19TICAgMTIKLQotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fRkNDX01JREJBTkQgICAweDAwNDAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX0VWRU4gICAgMHgwMDgwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMiAgICAgICAgIDB4MDEwMAotI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTUlEQkFORCAgICAweDAyMDAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UxX09ERCAgICAgMHgwNDAwCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19ORVdfMTFBICAgIDB4MDgwMAotCi0jZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9PRERfUFJFNF8wICAweDQwMDAKLSNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX05FV18xMUFfUFJFNF8wIDB4ODAwMAotCi0jZGVmaW5lIFNEX05PX0NUTCAgICAgICAgICAgICAgIDB4RTAKLSNkZWZpbmUgTk9fQ1RMICAgICAgICAgICAgICAgICAgMHhmZgotI2RlZmluZSBDVExfTU9ERV9NICAgICAgICAgICAgICA3Ci0jZGVmaW5lIENUTF8xMUEgICAgICAgICAgICAgICAgIDAKLSNkZWZpbmUgQ1RMXzExQiAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBDVExfMTFHICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIENUTF8yR0hUMjAgICAgICAgICAgICAgIDUKLSNkZWZpbmUgQ1RMXzVHSFQyMCAgICAgICAgICAgICAgNgotI2RlZmluZSBDVExfMkdIVDQwICAgICAgICAgICAgICA3Ci0jZGVmaW5lIENUTF81R0hUNDAgICAgICAgICAgICAgIDgKLQotI2RlZmluZSBBUl9FRVBST01fTUFDKGkpICAgICAgICAoMHgxZCsoaSkpCi0KLSNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMICAgICAweDAwMWMKLSNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMX1MgICAyCi0jZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWSAgICAgMHgwMDAyCi0jZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWV9TICAgMQotCi0jZGVmaW5lIENUUllfREVCVUcgMHgxZmYKLSNkZWZpbmUJQ1RSWV9ERUZBVUxUIDAKLQotZW51bSByZWdfZXh0X2JpdG1hcCB7Ci0JUkVHX0VYVF9KQVBBTl9NSURCQU5EID0gMSwKLQlSRUdfRVhUX0ZDQ19ERlNfSFQ0MCA9IDIsCi0JUkVHX0VYVF9KQVBBTl9OT05ERlNfSFQ0MCA9IDMsCi0JUkVHX0VYVF9KQVBBTl9ERlNfSFQ0MCA9IDQKLX07Ci0KLXN0cnVjdCBhdGg5a19jb3VudHJ5X2VudHJ5IHsKLQl1MTYgY291bnRyeUNvZGU7Ci0JdTE2IHJlZ0RtbkVudW07Ci0JdTE2IHJlZ0RtbjVHOwotCXUxNiByZWdEbW4yRzsKLQl1OCBpc011bHRpZG9tYWluOwotCXU4IGlzb1szXTsKLX07Ci0KLSNkZWZpbmUgUkVHX1dSSVRFKF9haCwgX3JlZywgX3ZhbCkgaW93cml0ZTMyKF92YWwsIF9haC0+YWhfc2ggKyBfcmVnKQotI2RlZmluZSBSRUdfUkVBRChfYWgsIF9yZWcpIGlvcmVhZDMyKF9haC0+YWhfc2ggKyBfcmVnKQotCi0jZGVmaW5lIFNNKF92LCBfZikgICgoKF92KSA8PCBfZiMjX1MpICYgX2YpCi0jZGVmaW5lIE1TKF92LCBfZikgICgoKF92KSAmIF9mKSA+PiBfZiMjX1MpCi0jZGVmaW5lIFJFR19STVcoX2EsIF9yLCBfc2V0LCBfY2xyKSAgICBcCi0JUkVHX1dSSVRFKF9hLCBfciwgKFJFR19SRUFEKF9hLCBfcikgJiB+KF9jbHIpKSB8IChfc2V0KSkKLSNkZWZpbmUgUkVHX1JNV19GSUVMRChfYSwgX3IsIF9mLCBfdikgXAotCVJFR19XUklURShfYSwgX3IsIFwKLQkoUkVHX1JFQUQoX2EsIF9yKSAmIH5fZikgfCAoKChfdikgPDwgX2YjI19TKSAmIF9mKSkKLSNkZWZpbmUgUkVHX1NFVF9CSVQoX2EsIF9yLCBfZikgXAotCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgfCBfZikKLSNkZWZpbmUgUkVHX0NMUl9CSVQoX2EsIF9yLCBfZikgXAotCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgJiB+X2YpCi0KLSNkZWZpbmUgQVRIOUtfVFhRX1VTRV9MT0NLT1VUX0JLT0ZGX0RJUyAgIDB4MDAwMDAwMDEKLQotI2RlZmluZSBJTklUX0FJRlMgICAgICAgMgotI2RlZmluZSBJTklUX0NXTUlOICAgICAgMTUKLSNkZWZpbmUgSU5JVF9DV01JTl8xMUIgIDMxCi0jZGVmaW5lIElOSVRfQ1dNQVggICAgICAxMDIzCi0jZGVmaW5lIElOSVRfU0hfUkVUUlkgICAxMAotI2RlZmluZSBJTklUX0xHX1JFVFJZICAgMTAKLSNkZWZpbmUgSU5JVF9TU0hfUkVUUlkgIDMyCi0jZGVmaW5lIElOSVRfU0xHX1JFVFJZICAzMgotCi0jZGVmaW5lIFdMQU5fQ1RSTF9GUkFNRV9TSVpFICgyKzIrNis0KQotCi0jZGVmaW5lIEFUSF9BTVBEVV9MSU1JVF9NQVggICAgICAoNjQgKiAxMDI0IC0gMSkKLSNkZWZpbmUgQVRIX0FNUERVX0xJTUlUX0RFRkFVTFQgIEFUSF9BTVBEVV9MSU1JVF9NQVgKLQotI2RlZmluZSBJRUVFODAyMTFfV0VQX0lWTEVOICAgICAgMwotI2RlZmluZSBJRUVFODAyMTFfV0VQX0tJRExFTiAgICAgMQotI2RlZmluZSBJRUVFODAyMTFfV0VQX0NSQ0xFTiAgICAgNAotI2RlZmluZSBJRUVFODAyMTFfTUFYX01QRFVfTEVOICAoMzg0MCArIEZDU19MRU4gKwkJXAotCQkJCSAoSUVFRTgwMjExX1dFUF9JVkxFTiArCQlcCi0JCQkJICBJRUVFODAyMTFfV0VQX0tJRExFTiArCVwKLQkJCQkgIElFRUU4MDIxMV9XRVBfQ1JDTEVOKSkKLSNkZWZpbmUgTUFYX1JBVEVfUE9XRVIgNjMKLQotZW51bSBhdGg5a19wb3dlcl9tb2RlIHsKLQlBVEg5S19QTV9BV0FLRSA9IDAsCi0JQVRIOUtfUE1fRlVMTF9TTEVFUCwKLQlBVEg5S19QTV9ORVRXT1JLX1NMRUVQLAotCUFUSDlLX1BNX1VOREVGSU5FRAotfTsKLQotc3RydWN0IGF0aDlrX21pYl9zdGF0cyB7Ci0JdTMyIGFja3Jjdl9iYWQ7Ci0JdTMyIHJ0c19iYWQ7Ci0JdTMyIHJ0c19nb29kOwotCXUzMiBmY3NfYmFkOwotCXUzMiBiZWFjb25zOwotfTsKLQotZW51bSBhdGg5a19hbnRfc2V0dGluZyB7Ci0JQVRIOUtfQU5UX1ZBUklBQkxFID0gMCwKLQlBVEg5S19BTlRfRklYRURfQSwKLQlBVEg5S19BTlRfRklYRURfQgotfTsKLQotI2RlZmluZSBBVEg5S19TTE9UX1RJTUVfNiA2Ci0jZGVmaW5lIEFUSDlLX1NMT1RfVElNRV85IDkKLSNkZWZpbmUgQVRIOUtfU0xPVF9USU1FXzIwIDIwCi0KLWVudW0gYXRoOWtfaHRfbWFjbW9kZSB7Ci0JQVRIOUtfSFRfTUFDTU9ERV8yMCA9IDAsCi0JQVRIOUtfSFRfTUFDTU9ERV8yMDQwID0gMSwKLX07Ci0KLWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgewotCUFUSDlLX0hUX0VYVFBST1RTUEFDSU5HXzIwID0gMCwKLQlBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSA9IDEsCi19OwotCi1zdHJ1Y3QgYXRoOWtfaHRfY3dtIHsKLQllbnVtIGF0aDlrX2h0X21hY21vZGUgaHRfbWFjbW9kZTsKKwl1MzIga2V5bWF4OworCURFQ0xBUkVfQklUTUFQKGtleW1hcCwgQVRIX0tFWU1BWCk7CisJdTggc3BsaXRtaWM7CisJYXRvbWljX3QgcHNfdXNlY291bnQ7CisJZW51bSBhdGg5a19pbnQgaW1hc2s7CiAJZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBodF9leHRwcm90c3BhY2luZzsKLX07CisJZW51bSBhdGg5a19odF9tYWNtb2RlIHR4X2NoYW5fd2lkdGg7CiAKLWVudW0gYXRoOWtfYW5pX2NtZCB7Ci0JQVRIOUtfQU5JX1BSRVNFTlQgPSAweDEsCi0JQVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMID0gMHgyLAotCUFUSDlLX0FOSV9PRkRNX1dFQUtfU0lHTkFMX0RFVEVDVElPTiA9IDB4NCwKLQlBVEg5S19BTklfQ0NLX1dFQUtfU0lHTkFMX1RIUiA9IDB4OCwKLQlBVEg5S19BTklfRklSU1RFUF9MRVZFTCA9IDB4MTAsCi0JQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwgPSAweDIwLAotCUFUSDlLX0FOSV9NT0RFID0gMHg0MCwKLQlBVEg5S19BTklfUEhZRVJSX1JFU0VUID0gMHg4MCwKLQlBVEg5S19BTklfQUxMID0gMHhmZgotfTsKKwlzdHJ1Y3QgYXRoX2NvbmZpZyBjb25maWc7CisJc3RydWN0IGF0aF9yeCByeDsKKwlzdHJ1Y3QgYXRoX3R4IHR4OworCXN0cnVjdCBhdGhfYmVhY29uIGJlYWNvbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbSUVFRTgwMjExX05VTV9CQU5EU11bQVRIX1JBVEVfTUFYXTsKKwlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV9NQVhdOworCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqY3VyX3JhdGVfdGFibGU7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBzYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CiAKLWVudW0gewotCVdMQU5fUkNfUEhZX09GRE0sCi0JV0xBTl9SQ19QSFlfQ0NLLAotCVdMQU5fUkNfUEhZX0hUXzIwX1NTLAotCVdMQU5fUkNfUEhZX0hUXzIwX0RTLAotCVdMQU5fUkNfUEhZX0hUXzQwX1NTLAotCVdMQU5fUkNfUEhZX0hUXzQwX0RTLAotCVdMQU5fUkNfUEhZX0hUXzIwX1NTX0hHSSwKLQlXTEFOX1JDX1BIWV9IVF8yMF9EU19IR0ksCi0JV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJLAotCVdMQU5fUkNfUEhZX0hUXzQwX0RTX0hHSSwKLQlXTEFOX1JDX1BIWV9NQVgKLX07CisJc3RydWN0IGF0aF9sZWQgcmFkaW9fbGVkOworCXN0cnVjdCBhdGhfbGVkIGFzc29jX2xlZDsKKwlzdHJ1Y3QgYXRoX2xlZCB0eF9sZWQ7CisJc3RydWN0IGF0aF9sZWQgcnhfbGVkOworCXN0cnVjdCBkZWxheWVkX3dvcmsgYXRoX2xlZF9ibGlua193b3JrOworCWludCBsZWRfb25fZHVyYXRpb247CisJaW50IGxlZF9vZmZfZHVyYXRpb247CisJaW50IGxlZF9vbl9jbnQ7CisJaW50IGxlZF9vZmZfY250OwogCi1lbnVtIGF0aDlrX3RwX3NjYWxlIHsKLQlBVEg5S19UUF9TQ0FMRV9NQVggPSAwLAotCUFUSDlLX1RQX1NDQUxFXzUwLAotCUFUSDlLX1RQX1NDQUxFXzI1LAotCUFUSDlLX1RQX1NDQUxFXzEyLAotCUFUSDlLX1RQX1NDQUxFX01JTgotfTsKLQotZW51bSBzZXJfcmVnX21vZGUgewotCVNFUl9SRUdfTU9ERV9PRkYgPSAwLAotCVNFUl9SRUdfTU9ERV9PTiA9IDEsCi0JU0VSX1JFR19NT0RFX0FVVE8gPSAyLAotfTsKLQotI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTFVFICAgICAgCQktODUKLSNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfSElHSF9WQUxVRSAgICAgIAkJLTYyCi0jZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0JBRF9WQUxVRSAgICAgICAJCS0xMjEKLSNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIX0lOSVQgICAgIDMKLSNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIICAgICAgICAgIDUKLQotI2RlZmluZSBBVEg5S19ORl9DQUxfSElTVF9NQVggICAgICAgICAgIDUKLSNkZWZpbmUgTlVNX05GX1JFQURJTkdTICAgICAgICAgICAgICAgICA2Ci0KLXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0IHsKLQlpbnQxNl90IG5mQ2FsQnVmZmVyW0FUSDlLX05GX0NBTF9ISVNUX01BWF07Ci0JdTggY3VyckluZGV4OwotCWludDE2X3QgcHJpdk5GOwotCXU4IGludmFsaWRORmNvdW50OwotfTsKLQotc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSB7Ci0JdTMyIGJzX25leHR0YnR0OwotCXUzMiBic19uZXh0ZHRpbTsKLQl1MzIgYnNfaW50dmFsOwotI2RlZmluZSBBVEg5S19CRUFDT05fUEVSSU9EICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgQVRIOUtfQkVBQ09OX0VOQSAgICAgICAgICAweDAwODAwMDAwCi0jZGVmaW5lIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YgICAgMHgwMTAwMDAwMAotCXUzMiBic19kdGltcGVyaW9kOwotCXUxNiBic19jZnBwZXJpb2Q7Ci0JdTE2IGJzX2NmcG1heGR1cmF0aW9uOwotCXUzMiBic19jZnBuZXh0OwotCXUxNiBic190aW1vZmZzZXQ7Ci0JdTE2IGJzX2JtaXNzdGhyZXNob2xkOwotCXUzMiBic19zbGVlcGR1cmF0aW9uOwotfTsKLQotc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgewotCXUzMiBuc19hdmdicnNzaTsKLQl1MzIgbnNfYXZncnNzaTsKLQl1MzIgbnNfYXZndHhyc3NpOwotCXUzMiBuc19hdmd0eHJhdGU7Ci19OwotCi0jZGVmaW5lIEFUSDlLX1JTU0lfRVBfTVVMVElQTElFUiAgKDE8PDcpCi0KLSNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCAgICAgICAgICAgICAwCi0jZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19QQ0lFX0FUVEVOVElPTl9MRUQgMQotI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfUENJRV9QT1dFUl9MRUQgICAgIDIKLSNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX01BQ19ORVRXT1JLX0xFRCAgICA1Ci0jZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19NQUNfUE9XRVJfTEVEICAgICAgNgotCi1lbnVtIHsKLQlBVEg5S19SRVNFVF9QT1dFUl9PTiwKLQlBVEg5S19SRVNFVF9XQVJNLAotCUFUSDlLX1JFU0VUX0NPTEQsCi19OwotCi0jZGVmaW5lIEFIX1VTRV9FRVBST00gICAweDEKLQotc3RydWN0IGF0aF9oYWwgewotCXUzMiBhaF9tYWdpYzsKLQl1MTYgYWhfZGV2aWQ7Ci0JdTE2IGFoX3N1YnZlbmRvcmlkOwotCXUzMiBhaF9tYWNWZXJzaW9uOwotCXUxNiBhaF9tYWNSZXY7Ci0JdTE2IGFoX3BoeVJldjsKLQl1MTYgYWhfYW5hbG9nNUdoelJldjsKLQl1MTYgYWhfYW5hbG9nMkdoelJldjsKLQotCXZvaWQgX19pb21lbSAqYWhfc2g7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqYWhfc2M7Ci0KLQllbnVtIG5sODAyMTFfaWZ0eXBlIGFoX29wbW9kZTsKLQlzdHJ1Y3QgYXRoOWtfb3BzX2NvbmZpZyBhaF9jb25maWc7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyBhaF9jYXBzOwotCi0JdTE2IGFoX2NvdW50cnlDb2RlOwotCXUzMiBhaF9mbGFnczsKLQlpbnQxNl90IGFoX3Bvd2VyTGltaXQ7Ci0JdTE2IGFoX21heFBvd2VyTGV2ZWw7Ci0JdTMyIGFoX3RwU2NhbGU7Ci0JdTE2IGFoX2N1cnJlbnRSRDsKLQl1MTYgYWhfY3VycmVudFJERXh0OwotCXUxNiBhaF9jdXJyZW50UkRJblVzZTsKLQl1MTYgYWhfY3VycmVudFJENUc7Ci0JdTE2IGFoX2N1cnJlbnRSRDJHOwotCWNoYXIgYWhfaXNvWzRdOwotCi0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgYWhfY2hhbm5lbHNbMTUwXTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqYWhfY3VyY2hhbjsKLQl1MzIgYWhfbmNoYW47Ci0KLQlib29sIGFoX2lzUGNpRXhwcmVzczsKLQl1MTYgYWhfdHhUcmlnTGV2ZWw7Ci0JdTE2IGFoX3Jmc2lsZW50OwotCXUzMiBhaF9yZmtpbGxfZ3BpbzsKLQl1MzIgYWhfcmZraWxsX3BvbGFyaXR5OwotCi0jaWZuZGVmIEFUSF9ORl9QRVJfQ0hBTgotCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0IG5mQ2FsSGlzdFtOVU1fTkZfUkVBRElOR1NdOworCXN0cnVjdCBhdGhfcmZraWxsIHJmX2tpbGw7CisJc3RydWN0IGF0aF9hbmkgYW5pOworCXN0cnVjdCBhdGg5a19ub2RlX3N0YXRzIG5vZGVzdGF0czsKKyNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKKwlzdHJ1Y3QgYXRoOWtfZGVidWcgZGVidWc7CiAjZW5kaWYKKwlzdHJ1Y3QgYXRoX2J1c19vcHMgKmJ1c19vcHM7CiB9OwogCi1zdHJ1Y3QgY2hhbl9jZW50ZXJzIHsKLQl1MTYgc3ludGhfY2VudGVyOwotCXUxNiBjdGxfY2VudGVyOwotCXUxNiBleHRfY2VudGVyOworc3RydWN0IGF0aF93aXBoeSB7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2M7IC8qIHNoYXJlZCBmb3IgYWxsIHZpcnR1YWwgd2lwaHlzICovCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJZW51bSBhdGhfd2lwaHlfc3RhdGUgeworCQlBVEhfV0lQSFlfSU5BQ1RJVkUsCisJCUFUSF9XSVBIWV9BQ1RJVkUsCisJCUFUSF9XSVBIWV9QQVVTSU5HLAorCQlBVEhfV0lQSFlfUEFVU0VELAorCQlBVEhfV0lQSFlfU0NBTiwKKwl9IHN0YXRlOworCWludCBjaGFuX2lkeDsKKwlpbnQgY2hhbl9pc19odDsKIH07CiAKLXN0cnVjdCBhdGhfcmF0ZV90YWJsZTsKK2ludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOworaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CitpbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9jYWJxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICopOwogCi0vKiBIZWxwZXJzICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX3JlYWRfY2FjaGVzaXplKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgKmNzeikKK3sKKwlzYy0+YnVzX29wcy0+cmVhZF9jYWNoZXNpemUoc2MsIGNzeik7Cit9CiAKLWVudW0gd2lyZWxlc3NfbW9kZSBhdGg5a19od19jaGFuMndtb2RlKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCk7Ci11MzIgYXRoOWtfaHdfcmV2ZXJzZV9iaXRzKHUzMiB2YWwsIHUzMiBuKTsKLWJvb2wgYXRoOWtfZ2V0X2NoYW5uZWxfZWRnZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICB1MTYgZmxhZ3MsIHUxNiAqbG93LAotCQkJICAgICB1MTYgKmhpZ2gpOwotdTE2IGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlcywKLQkJCSAgIHUzMiBmcmFtZUxlbiwgdTE2IHJhdGVpeCwKLQkJCSAgIGJvb2wgc2hvcnRQcmVhbWJsZSk7Ci11MzIgYXRoOWtfaHdfbWh6MmllZWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgZnJlcSwgdTMyIGZsYWdzKTsKLXZvaWQgYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgIHN0cnVjdCBjaGFuX2NlbnRlcnMgKmNlbnRlcnMpOworc3RhdGljIGlubGluZSB2b2lkIGF0aF9idXNfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzYy0+YnVzX29wcy0+Y2xlYW51cChzYyk7Cit9CiAKLS8qIEF0dGFjaCwgRGV0YWNoICovCitleHRlcm4gc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfb3BzOwogCi1jb25zdCBjaGFyICphdGg5a19od19wcm9iZSh1MTYgdmVuZG9yaWQsIHUxNiBkZXZpZCk7Ci12b2lkIGF0aDlrX2h3X2RldGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotc3RydWN0IGF0aF9oYWwgKmF0aDlrX2h3X2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCXZvaWQgX19pb21lbSAqbWVtLCBpbnQgKmVycm9yKTsKLXZvaWQgYXRoOWtfaHdfcmZkZXRhY2goc3RydWN0IGF0aF9oYWwgKmFoKTsKK2lycXJldHVybl90IGF0aF9pc3IoaW50IGlycSwgdm9pZCAqZGV2KTsKK3ZvaWQgYXRoX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aF9hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aF9kZXRhY2goc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworY29uc3QgY2hhciAqYXRoX21hY19iYl9uYW1lKHUzMiBtYWNfYmJfdmVyc2lvbik7Citjb25zdCBjaGFyICphdGhfcmZfbmFtZSh1MTYgcmZfdmVyc2lvbik7Cit2b2lkIGF0aF9zZXRfaHdfY2FwYWIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgYXRoOWtfdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbik7Cit2b2lkIGF0aF91cGRhdGVfY2hhaW5tYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaXNfaHQpOworaW50IGF0aF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaGNoYW4pOwordm9pZCBhdGhfcmFkaW9fZW5hYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoX3JhZGlvX2Rpc2FibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwogCi0KLS8qIEhXIFJlc2V0ICovCi0KLWJvb2wgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlLAotCQkgICAgdTggdHhjaGFpbm1hc2ssIHU4IHJ4Y2hhaW5tYXNrLAotCQkgICAgZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBleHRwcm90c3BhY2luZywKLQkJICAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UsIGludCAqc3RhdHVzKTsKLQotLyogS2V5IENhY2hlIE1hbmFnZW1lbnQgKi8KLQotYm9vbCBhdGg5a19od19rZXlyZXNldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBlbnRyeSk7Ci1ib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBlbnRyeSwgY29uc3QgdTggKm1hYyk7Ci1ib29sIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUxNiBlbnRyeSwKLQkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKLQkJCQkgY29uc3QgdTggKm1hYywgaW50IHhvcktleSk7Ci1ib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpOwotCi0vKiBQb3dlciBNYW5hZ2VtZW50ICovCi0KLWJvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkgICAgICAgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpOwotdm9pZCBhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgcmVzdG9yZSk7Ci0KLS8qIEJlYWNvbiB0aW1lcnMgKi8KLQotdm9pZCBhdGg5a19od19iZWFjb25pbml0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCk7Ci12b2lkIGF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgKmJzKTsKLS8qIEhXIENhcGFiaWxpdGllcyAqLwotCi1ib29sIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHR5cGUsCi0JCQkgICAgdTMyIGNhcGFiaWxpdHksIHUzMiAqcmVzdWx0KTsKLWJvb2wgYXRoOWtfaHdfc2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHR5cGUsCi0JCQkgICAgdTMyIGNhcGFiaWxpdHksIHUzMiBzZXR0aW5nLCBpbnQgKnN0YXR1cyk7Ci0KLS8qIEdQSU8gLyBSRktJTEwgLyBBbnRlbm5hZSAqLwotCi12b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8pOwotdTMyIGF0aDlrX2h3X2dwaW9fZ2V0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8pOwotdm9pZCBhdGg5a19od19jZmdfb3V0cHV0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8sCi0JCQkgdTMyIGFoX3NpZ25hbF90eXBlKTsKLXZvaWQgYXRoOWtfaHdfc2V0X2dwaW8oc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotdm9pZCBhdGg5a19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaGFsICphaCk7CisjaWZkZWYgQ09ORklHX1BDSQoraW50IGF0aF9wY2lfaW5pdCh2b2lkKTsKK3ZvaWQgYXRoX3BjaV9leGl0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGF0aF9wY2lfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSB2b2lkIGF0aF9wY2lfZXhpdCh2b2lkKSB7fTsKICNlbmRpZgotaW50IGF0aDlrX2h3X3NlbGVjdF9hbnRjb25maWcoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgY2ZnKTsKLXUzMiBhdGg5a19od19nZXRkZWZhbnRlbm5hKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X3NldGFudGVubmEoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgYW50ZW5uYSk7Ci1ib29sIGF0aDlrX2h3X3NldGFudGVubmFzd2l0Y2goc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICAgIGVudW0gYXRoOWtfYW50X3NldHRpbmcgc2V0dGluZ3MsCi0JCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgICAgICAgdTggKnR4X2NoYWlubWFzaywKLQkJCSAgICAgICB1OCAqcnhfY2hhaW5tYXNrLAotCQkJICAgICAgIHU4ICphbnRlbm5hX2NmZ2QpOwogCi0vKiBHZW5lcmFsIE9wZXJhdGlvbiAqLwotCi11MzIgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfc2V0cnhmaWx0ZXIoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgYml0cyk7Ci1ib29sIGF0aDlrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X2Rpc2FibGUoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3R4cG93ZXJsaW1pdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBsaW1pdCk7Ci12b2lkIGF0aDlrX2h3X2dldG1hYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHU4ICptYWMpOwotYm9vbCBhdGg5a19od19zZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCBjb25zdCB1OCAqbWFjKTsKLXZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaGFsICphaCk7Ci12b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKTsKLXZvaWQgYXRoOWtfaHdfZ2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfaGFsICphaCwgdTggKm1hc2spOwotYm9vbCBhdGg5a19od19zZXRic3NpZG1hc2soc3RydWN0IGF0aF9oYWwgKmFoLCBjb25zdCB1OCAqbWFzayk7Ci12b2lkIGF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc3RydWN0IGF0aF9oYWwgKmFoLCBjb25zdCB1OCAqYnNzaWQsIHUxNiBhc3NvY0lkKTsKLXU2NCBhdGg5a19od19nZXR0c2Y2NChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19yZXNldF90c2Yoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBzZXR0aW5nKTsKLWJvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXMpOwotdm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a19odF9tYWNtb2RlIG1vZGUpOwotCi0vKiBSZWd1bGF0b3J5ICovCi0KLWJvb2wgYXRoOWtfcmVnZF9pc19wdWJsaWNfc2FmZXR5X3NrdShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotc3RydWN0IGF0aDlrX2NoYW5uZWwqIGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmMpOwotdTMyIGF0aDlrX3JlZ2RfZ2V0X2N0bChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLXUzMiBhdGg5a19yZWdkX2dldF9hbnRlbm5hX2FsbG93ZWQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWJvb2wgYXRoOWtfcmVnZF9pbml0X2NoYW5uZWxzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgIHUzMiBtYXhjaGFucywgdTMyICpuY2hhbnMsIHU4ICpyZWdjbGFzc2lkcywKLQkJCSAgICAgIHUzMiBtYXhyZWdpZHMsIHUzMiAqbnJlZ2lkcywgdTE2IGNjLAotCQkJICAgICAgYm9vbCBlbmFibGVPdXRkb29yLCBib29sIGVuYWJsZUV4dGVuZGVkQ2hhbm5lbHMpOwotCi0vKiBBTkkgKi8KLQotdm9pZCBhdGg5a19hbmlfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfYW5pX21vbml0b3Ioc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMsCi0JCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWJvb2wgYXRoOWtfaHdfcGh5Y291bnRlcnMoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfZW5hYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19kaXNhYmxlX21pYl9jb3VudGVycyhzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdTMyIGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgIHUzMiAqcnhjX3BjbnQsCi0JCQkJICB1MzIgKnJ4Zl9wY250LAotCQkJCSAgdTMyICp0eGZfcGNudCk7Ci12b2lkIGF0aDlrX2h3X3Byb2NtaWJldmVudChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICBjb25zdCBzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyAqc3RhdHMpOwotdm9pZCBhdGg5a19od19hbmlfc2V0dXAoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfYW5pX2F0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19hbmlfZGV0YWNoKHN0cnVjdCBhdGhfaGFsICphaCk7Ci0KLS8qIENhbGlicmF0aW9uICovCi0KLXZvaWQgYXRoOWtfaHdfcmVzZXRfY2FsdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCSAgICAgYm9vbCAqaXNDYWxEb25lKTsKLXZvaWQgYXRoOWtfaHdfc3RhcnRfbmZjYWwoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotaW50MTZfdCBhdGg5a19od19nZXRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci12b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXMxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotYm9vbCBhdGg5a19od19jYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCXU4IHJ4Y2hhaW5tYXNrLCBib29sIGxvbmdjYWwsCi0JCQlib29sICppc0NhbERvbmUpOwotYm9vbCBhdGg5a19od19pbml0X2NhbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci0KLQotLyogRUVQUk9NICovCi0KLWludCBhdGg5a19od19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgdTE2IGNmZ0N0bCwKLQkJCSB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkgdTggcG93ZXJMaW1pdCk7Ci12b2lkIGF0aDlrX2h3X3NldF9hZGRhYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3Bvd2VyX3Blcl9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJICAgICAgIGludDE2X3QgKnJhdGVzQXJyYXksCi0JCQkJICAgICAgIHUxNiBjZmdDdGwsCi0JCQkJICAgICAgIHU4IEFudGVubmFSZWR1Y3Rpb24sCi0JCQkJICAgICAgIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCSAgICAgICB1OCBwb3dlckxpbWl0KTsKLWJvb2wgYXRoOWtfaHdfc2V0X3Bvd2VyX2NhbF90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgIGludDE2X3QgKnBUeFBvd2VySW5kZXhPZmZzZXQpOwotYm9vbCBhdGg5a19od19lZXByb21fc2V0X2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotaW50IGF0aDlrX2h3X2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgdTggaW5kZXgsIHUxNiAqY29uZmlnKTsKLXU4IGF0aDlrX2h3X2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpOwotdTE2IGF0aDlrX2h3X2VlcHJvbV9nZXRfc3B1cl9jaGFuKHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KTsKLWludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaGFsICphaCk7Ci0KLS8qIEludGVycnVwdCBIYW5kbGluZyAqLwotCi1ib29sIGF0aDlrX2h3X2ludHJwZW5kKHN0cnVjdCBhdGhfaGFsICphaCk7Ci1ib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpOwotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2ludCBpbnRzKTsKLQotLyogTUFDIChQQ1UvUUNVKSAqLwotCi11MzIgYXRoOWtfaHdfZ2V0dHhidWYoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSk7Ci1ib29sIGF0aDlrX2h3X3B1dHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEsIHUzMiB0eGRwKTsKLWJvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKTsKLXUzMiBhdGg5a19od19udW10eHBlbmRpbmcoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSk7Ci1ib29sIGF0aDlrX2h3X3VwZGF0ZXR4dHJpZ2xldmVsKHN0cnVjdCBhdGhfaGFsICphaCwgYm9vbCBiSW5jVHJpZ0xldmVsKTsKLWJvb2wgYXRoOWtfaHdfc3RvcHR4ZG1hKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpOwotYm9vbCBhdGg5a19od19maWxsdHhkZXNjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCSB1MzIgc2VnTGVuLCBib29sIGZpcnN0U2VnLAotCQkJIGJvb2wgbGFzdFNlZywgY29uc3Qgc3RydWN0IGF0aF9kZXNjICpkczApOwotdm9pZCBhdGg5a19od19jbGVhcnR4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwotaW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3R4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkgICAgdTMyIHBrdExlbiwgZW51bSBhdGg5a19wa3RfdHlwZSB0eXBlLCB1MzIgdHhQb3dlciwKLQkJCSAgICB1MzIga2V5SXgsIGVudW0gYXRoOWtfa2V5X3R5cGUga2V5VHlwZSwgdTMyIGZsYWdzKTsKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkJICBzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcywKLQkJCQkgIHUzMiBkdXJVcGRhdGVFbiwgdTMyIHJ0c2N0c1JhdGUsCi0JCQkJICB1MzIgcnRzY3RzRHVyYXRpb24sCi0JCQkJICBzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1tdLAotCQkJCSAgdTMyIG5zZXJpZXMsIHUzMiBmbGFncyk7Ci12b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCQl1MzIgYWdnckxlbik7Ci12b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX21pZGRsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCi0JCQkJIHUzMiBudW1EZWxpbXMpOwotdm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Ci12b2lkIGF0aDlrX2h3X2NscjExbl9hZ2dyKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Ci12b2lkIGF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCQkgICB1MzIgYnVyc3REdXJhdGlvbik7Ci12b2lkIGF0aDlrX2h3X3NldDExbl92aXJ0dWFsbW9yZWZyYWcoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJCSAgICAgdTMyIHZtZik7Ci12b2lkIGF0aDlrX2h3X2dldHR4aW50cnR4cXMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgKnR4cXMpOwotYm9vbCBhdGg5a19od19zZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaGFsICphaCwgaW50IHEsCi0JCQkgICAgY29uc3Qgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKTsKLWJvb2wgYXRoOWtfaHdfZ2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAotCQkJICAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7Ci1pbnQgYXRoOWtfaHdfc2V0dXB0eHF1ZXVlKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a190eF9xdWV1ZSB0eXBlLAotCQkJICBjb25zdCBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pOwotYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKTsKLWJvb2wgYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpOwotaW50IGF0aDlrX2h3X3J4cHJvY2Rlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAotCQkJdTMyIHBhLCBzdHJ1Y3QgYXRoX2Rlc2MgKm5kcywgdTY0IHRzZik7Ci1ib29sIGF0aDlrX2h3X3NldHVwcnhkZXNjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKLQkJCSAgdTMyIHNpemUsIHUzMiBmbGFncyk7Ci1ib29sIGF0aDlrX2h3X3NldHJ4YWJvcnQoc3RydWN0IGF0aF9oYWwgKmFoLCBib29sIHNldCk7Ci12b2lkIGF0aDlrX2h3X3B1dHJ4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHJ4ZHApOwotdm9pZCBhdGg5a19od19yeGVuYShzdHJ1Y3QgYXRoX2hhbCAqYWgpOwotdm9pZCBhdGg5a19od19zdGFydHBjdXJlY2VpdmUoc3RydWN0IGF0aF9oYWwgKmFoKTsKLXZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWJvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9oYWwgKmFoKTsKLQorI2lmZGVmIENPTkZJR19BVEhFUk9TX0FSNzFYWAoraW50IGF0aF9haGJfaW5pdCh2b2lkKTsKK3ZvaWQgYXRoX2FoYl9leGl0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGF0aF9haGJfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSB2b2lkIGF0aF9haGJfZXhpdCh2b2lkKSB7fTsKICNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfcHNfd2FrZXVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWlmIChhdG9taWNfaW5jX3JldHVybigmc2MtPnBzX3VzZWNvdW50KSA9PSAxKQorCQlpZiAoc2MtPnNjX2FoLT5wb3dlcl9tb2RlICE9ICBBVEg5S19QTV9BV0FLRSkgeworCQkJc2MtPnNjX2FoLT5yZXN0b3JlX21vZGUgPSBzYy0+c2NfYWgtPnBvd2VyX21vZGU7CisJCQlhdGg5a19od19zZXRwb3dlcihzYy0+c2NfYWgsIEFUSDlLX1BNX0FXQUtFKTsKKwkJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfcHNfcmVzdG9yZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2MtPnBzX3VzZWNvdW50KSkKKwkJaWYgKChzYy0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgJiYKKwkJICAgICEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfV0FJVF9GT1JfQkVBQ09OKSkKKwkJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwKKwkJCQkJICBzYy0+c2NfYWgtPnJlc3RvcmVfbW9kZSk7Cit9CisKKwordm9pZCBhdGg5a19zZXRfYnNzaWRfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitpbnQgYXRoOWtfd2lwaHlfYWRkKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK2ludCBhdGg5a193aXBoeV9kZWwoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7Cit2b2lkIGF0aDlrX3R4X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgYXRoOWtfd2lwaHlfcGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7CitpbnQgYXRoOWtfd2lwaHlfdW5wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KTsKK2ludCBhdGg5a193aXBoeV9zZWxlY3Qoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7Cit2b2lkIGF0aDlrX3dpcGh5X3NldF9zY2hlZHVsZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHVuc2lnbmVkIGludCBtc2VjX2ludCk7Cit2b2lkIGF0aDlrX3dpcGh5X2NoYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworYm9vbCBhdGg5a193aXBoeV9zdGFydGVkKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoOWtfd2lwaHlfcGF1c2VfYWxsX2ZvcmNlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgIHN0cnVjdCBhdGhfd2lwaHkgKnNlbGVjdGVkKTsKK2Jvb2wgYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwordm9pZCBhdGg5a193aXBoeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CisKKy8qCisgKiBSZWFkIGFuZCB3cml0ZSwgdGhleSBib3RoIHNoYXJlIHRoZSBzYW1lIGxvY2suIFdlIGRvIHRoaXMgdG8gc2VyaWFsaXplCisgKiByZWFkcyBhbmQgd3JpdGVzIG9uIEF0aGVyb3MgODAyLjExbiBQQ0kgZGV2aWNlcyBvbmx5LiBUaGlzIGlzIHJlcXVpcmVkCisgKiBhcyB0aGUgRklGTyBvbiB0aGVzZSBkZXZpY2VzIGNhbiBvbmx5IGFjY2VwdCBzYW5lbHkgMiByZXF1ZXN0cy4gQWZ0ZXIKKyAqIHRoYXQgdGhlIGRldmljZSBnb2VzIGJhbmFuYXMuIFNlcmlhbGl6aW5nIHRoZSByZWFkcy93cml0ZXMgcHJldmVudHMgdGhpcworICogZnJvbSBoYXBwZW5pbmcuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2lvd3JpdGUzMihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZ19vZmZzZXQsIHUzMiB2YWwpCit7CisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX09OKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZhaC0+YWhfc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCQlpb3dyaXRlMzIodmFsLCBhaC0+YWhfc2MtPm1lbSArIHJlZ19vZmZzZXQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhaC0+YWhfc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCX0gZWxzZQorCQlpb3dyaXRlMzIodmFsLCBhaC0+YWhfc2MtPm1lbSArIHJlZ19vZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGg5a19pb3JlYWQzMihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJlZ19vZmZzZXQpCit7CisJdTMyIHZhbDsKKwlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFoLT5haF9zYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJfSBlbHNlCisJCXZhbCA9IGlvcmVhZDMyKGFoLT5haF9zYy0+bWVtICsgcmVnX29mZnNldCk7CisJcmV0dXJuIHZhbDsKK30KKworI2VuZGlmIC8qIEFUSDlLX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2JlYWNvbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYmVhY29uLmMKaW5kZXggM2FiMGI0My4uZWM5OTU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYmVhY29uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvYmVhY29uLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNCw3ICsxNCw5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKKworI2RlZmluZSBGVURHRSAyCiAKIC8qCiAgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIG1vZGlmeSBjZXJ0YWluIHRyYW5zbWl0IHF1ZXVlIHByb3BlcnRpZXMgZGVwZW5kaW5nIG9uCkBAIC0yMywxMSArMjUsMTEgQEAKICovCiBzdGF0aWMgaW50IGF0aF9iZWFjb25xX2NvbmZpZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAKIAlhdGg5a19od19nZXRfdHhxX3Byb3BzKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEsICZxaSk7Ci0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCS8qIEFsd2F5cyBidXJzdCBvdXQgYmVhY29uIGFuZCBDQUIgdHJhZmZpYy4gKi8KIAkJcWkudHFpX2FpZnMgPSAxOwogCQlxaS50cWlfY3dtaW4gPSAwOwpAQCAtNDQsNDYgKzQ2LDMzIEBACiAJCQkidW5hYmxlIHRvIHVwZGF0ZSBoL3cgYmVhY29uIHF1ZXVlIHBhcmFtZXRlcnNcbiIpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlhdGg5a19od19yZXNldHR4cXVldWUoYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7IC8qIHB1c2ggdG8gaC93ICovCisJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAkJcmV0dXJuIDE7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGhfYnN0dWNrX3Byb2Nlc3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0JRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCSJzdHVjayBiZWFjb247IHJlc2V0dGluZyAoYm1pc3MgY291bnQgJXUpXG4iLAotCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKLX0KLQogLyoKICAqICBBc3NvY2lhdGVzIHRoZSBiZWFjb24gZnJhbWUgYnVmZmVyIHdpdGggYSB0cmFuc21pdCBkZXNjcmlwdG9yLiAgV2lsbCBzZXQKICAqICB1cCBhbGwgcmVxdWlyZWQgYW50ZW5uYSBzd2l0Y2ggcGFyYW1ldGVycywgcmF0ZSBjb2RlcywgYW5kIGNoYW5uZWwgZmxhZ3MuCiAgKiAgQmVhY29ucyBhcmUgYWx3YXlzIHNlbnQgb3V0IGF0IHRoZSBsb3dlc3QgcmF0ZSwgYW5kIGFyZSBub3QgcmV0cmllZC4KICovCi1zdGF0aWMgdm9pZCBhdGhfYmVhY29uX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgICBzdHJ1Y3QgYXRoX3ZhcCAqYXZwLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCitzdGF0aWMgdm9pZCBhdGhfYmVhY29uX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwLAorCQkJICAgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCXN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgc2VyaWVzWzRdOwogCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQ7Ci0JaW50IGZsYWdzLCBhbnRlbm5hOwotCXU4IHJpeCwgcmF0ZTsKLQlpbnQgY3RzcmF0ZSA9IDA7Ci0JaW50IGN0c2R1cmF0aW9uID0gMDsKKwlpbnQgZmxhZ3MsIGFudGVubmEsIGN0c3JhdGUgPSAwLCBjdHNkdXJhdGlvbiA9IDA7CisJdTggcmF0ZTsKIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAibSAlcCBsZW4gJXVcbiIsIHNrYiwgc2tiLT5sZW4pOwotCi0JLyogc2V0dXAgZGVzY3JpcHRvcnMgKi8KIAlkcyA9IGJmLT5iZl9kZXNjOwotCiAJZmxhZ3MgPSBBVEg5S19UWERFU0NfTk9BQ0s7CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKKwlpZiAoKChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgJiYKKwkgICAgKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKIAkJZHMtPmRzX2xpbmsgPSBiZi0+YmZfZGFkZHI7IC8qIHNlbGYtbGlua2VkICovCiAJCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19WRU9MOwogCQkvKiBMZXQgaGFyZHdhcmUgaGFuZGxlIGFudGVubmEgc3dpdGNoaW5nLiAqLwpAQCAtOTIsNjUgKzgxLDUzIEBACiAJCWRzLT5kc19saW5rID0gMDsKIAkJLyoKIAkJICogU3dpdGNoIGFudGVubmEgZXZlcnkgYmVhY29uLgotCQkgKiBTaG91bGQgb25seSBzd2l0Y2ggZXZlcnkgYmVhY29uIHBlcmlvZCwgbm90IGZvciBldmVyeQotCQkgKiBTV0JBJ3MKLQkJICogWFhYIGFzc3VtZXMgdHdvIGFudGVubmEKKwkJICogU2hvdWxkIG9ubHkgc3dpdGNoIGV2ZXJ5IGJlYWNvbiBwZXJpb2QsIG5vdCBmb3IgZXZlcnkgU1dCQQorCQkgKiBYWFggYXNzdW1lcyB0d28gYW50ZW5uYWUKIAkJICovCi0JCWFudGVubmEgPSAoKHNjLT5iZWFjb24uYXN0X2JlX3htaXQgLyBzYy0+c2NfbmJjbnZhcHMpICYgMSA/IDIgOiAxKTsKKwkJYW50ZW5uYSA9ICgoc2MtPmJlYWNvbi5hc3RfYmVfeG1pdCAvIHNjLT5uYmNudmlmcykgJiAxID8gMiA6IDEpOwogCX0KIAogCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOwogCi0JLyoKLQkgKiBDYWxjdWxhdGUgcmF0ZSBjb2RlLgotCSAqIFhYWCBldmVyeXRoaW5nIGF0IG1pbiB4bWl0IHJhdGUKLQkgKi8KLQlyaXggPSAwOwogCXJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCXJhdGUgPSBydC0+aW5mb1tyaXhdLnJhdGVjb2RlOworCXJhdGUgPSBydC0+aW5mb1swXS5yYXRlY29kZTsKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfUFJFQU1CTEVfU0hPUlQpCi0JCXJhdGUgfD0gcnQtPmluZm9bcml4XS5zaG9ydF9wcmVhbWJsZTsKKwkJcmF0ZSB8PSBydC0+aW5mb1swXS5zaG9ydF9wcmVhbWJsZTsKIAotCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLAotCQkJICAgICAgIHNrYi0+bGVuICsgRkNTX0xFTiwgICAgIC8qIGZyYW1lIGxlbmd0aCAqLwotCQkJICAgICAgIEFUSDlLX1BLVF9UWVBFX0JFQUNPTiwgIC8qIEF0aGVyb3MgcGFja2V0IHR5cGUgKi8KLQkJCSAgICAgICBNQVhfUkFURV9QT1dFUiwgICAgICAgICAvKiBGSVhNRSAqLwotCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwgIC8qIG5vIGVuY3J5cHRpb24gKi8KLQkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwgICAvKiBubyBlbmNyeXB0aW9uICovCi0JCQkgICAgICAgZmxhZ3MgICAgICAgICAgICAgICAgICAgLyogbm8gYWNrLAotCQkJCQkJCSAgdmVvbCBmb3IgYmVhY29ucyAqLwotCQkpOworCWF0aDlrX2h3X3NldDExbl90eGRlc2MoYWgsIGRzLCBza2ItPmxlbiArIEZDU19MRU4sCisJCQkgICAgICAgQVRIOUtfUEtUX1RZUEVfQkVBQ09OLAorCQkJICAgICAgIE1BWF9SQVRFX1BPV0VSLAorCQkJICAgICAgIEFUSDlLX1RYS0VZSVhfSU5WQUxJRCwKKwkJCSAgICAgICBBVEg5S19LRVlfVFlQRV9DTEVBUiwKKwkJCSAgICAgICBmbGFncyk7CiAKIAkvKiBOQjogYmVhY29uJ3MgQnVmTGVuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGJ5dGVzICovCi0JYXRoOWtfaHdfZmlsbHR4ZGVzYyhhaCwgZHMsCi0JCQkgICAgcm91bmR1cChza2ItPmxlbiwgNCksIC8qIGJ1ZmZlciBsZW5ndGggKi8KLQkJCSAgICB0cnVlLCAgICAgICAgICAgICAgICAgLyogZmlyc3Qgc2VnbWVudCAqLwotCQkJICAgIHRydWUsICAgICAgICAgICAgICAgICAvKiBsYXN0IHNlZ21lbnQgKi8KLQkJCSAgICBkcyAgICAgICAgICAgICAgICAgICAgLyogZmlyc3QgZGVzY3JpcHRvciAqLwotCQkpOworCWF0aDlrX2h3X2ZpbGx0eGRlc2MoYWgsIGRzLCByb3VuZHVwKHNrYi0+bGVuLCA0KSwKKwkJCSAgICB0cnVlLCB0cnVlLCBkcyk7CiAKIAltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKIAlzZXJpZXNbMF0uVHJpZXMgPSAxOwogCXNlcmllc1swXS5SYXRlID0gcmF0ZTsKLQlzZXJpZXNbMF0uQ2hTZWwgPSBzYy0+c2NfdHhfY2hhaW5tYXNrOworCXNlcmllc1swXS5DaFNlbCA9IHNjLT50eF9jaGFpbm1hc2s7CiAJc2VyaWVzWzBdLlJhdGVGbGFncyA9IChjdHNyYXRlKSA/IEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyA6IDA7Ci0JYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhhaCwgZHMsIGRzLCAwLAotCQljdHNyYXRlLCBjdHNkdXJhdGlvbiwgc2VyaWVzLCA0LCAwKTsKKwlhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKGFoLCBkcywgZHMsIDAsIGN0c3JhdGUsIGN0c2R1cmF0aW9uLAorCQkJCSAgICAgc2VyaWVzLCA0LCAwKTsKIH0KIAotLyogR2VuZXJhdGUgYmVhY29uIGZyYW1lIGFuZCBxdWV1ZSBjYWIgZGF0YSBmb3IgYSB2YXAgKi8KLXN0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX2JlYWNvbl9nZW5lcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKQorc3RhdGljIHN0cnVjdCBhdGhfYnVmICphdGhfYmVhY29uX2dlbmVyYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogeworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwOworCXN0cnVjdCBhdGhfdmlmICphdnA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRoX3R4cSAqY2FicTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlpbnQgY2FicV9kZXB0aDsKIAotCXZpZiA9IHNjLT5zY192YXBzW2lmX2lkXTsKLQlBU1NFUlQodmlmKTsKKwlpZiAoYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJcmV0dXJuIE5VTEw7CiAKIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJY2FicSA9IHNjLT5iZWFjb24uY2FicTsKQEAgLTE2MSwxOSArMTM4LDI0IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAorCS8qIFJlbGVhc2UgdGhlIG9sZCBiZWFjb24gZmlyc3QgKi8KKwogCWJmID0gYXZwLT5hdl9iY2J1ZjsKIAlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKIAlpZiAoc2tiKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJCSBza2ItPmxlbiwKLQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsCisJCQkJIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAl9CiAKLQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChzYy0+aHcsIHZpZik7CisJLyogR2V0IGEgbmV3IGJlYWNvbiBmcm9tIG1hYzgwMjExICovCisKKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKIAliZi0+YmZfbXBkdSA9IHNrYjsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiBOVUxMOworCSgoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiLT5kYXRhKS0+dS5iZWFjb24udGltZXN0YW1wID0KKwkJYXZwLT50c2ZfYWRqdXN0OwogCiAJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKQEAgLTE4OCw1NCArMTcwLDQyIEBACiAJfQogCiAJYmYtPmJmX2J1Zl9hZGRyID0gYmYtPmJmX2RtYWNvbnRleHQgPQotCQlwY2lfbWFwX3NpbmdsZShzYy0+cGRldiwgc2tiLT5kYXRhLAotCQkJICAgICAgIHNrYi0+bGVuLAotCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsIGJmLT5iZl9idWZfYWRkcikpKSB7CisJCWRtYV9tYXBfc2luZ2xlKHNjLT5kZXYsIHNrYi0+ZGF0YSwKKwkJCSAgICAgICBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHNjLT5kZXYsIGJmLT5iZl9idWZfYWRkcikpKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCWJmLT5iZl9tcGR1ID0gTlVMTDsKLQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkicGNpX2RtYV9tYXBwaW5nX2Vycm9yKCkgb24gYmVhY29uaW5nXG4iKTsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgImRtYV9tYXBwaW5nX2Vycm9yIG9uIGJlYWNvbmluZ1xuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCXNrYiA9IGllZWU4MDIxMV9nZXRfYnVmZmVyZWRfYmMoc2MtPmh3LCB2aWYpOworCXNrYiA9IGllZWU4MDIxMV9nZXRfYnVmZmVyZWRfYmMoaHcsIHZpZik7CiAKIAkvKgogCSAqIGlmIHRoZSBDQUJRIHRyYWZmaWMgZnJvbSBwcmV2aW91cyBEVElNIGlzIHBlbmRpbmcgYW5kIHRoZSBjdXJyZW50CiAJICogIGJlYWNvbiBpcyBhbHNvIGEgRFRJTS4KLQkgKiAgMSkgaWYgdGhlcmUgaXMgb25seSBvbmUgdmFwIGxldCB0aGUgY2FiIHRyYWZmaWMgY29udGludWUuCi0JICogIDIpIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIHZhcCBhbmQgd2UgYXJlIHVzaW5nIHN0YWdnZXJlZAorCSAqICAxKSBpZiB0aGVyZSBpcyBvbmx5IG9uZSB2aWYgbGV0IHRoZSBjYWIgdHJhZmZpYyBjb250aW51ZS4KKwkgKiAgMikgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgdmlmIGFuZCB3ZSBhcmUgdXNpbmcgc3RhZ2dlcmVkCiAJICogICAgIGJlYWNvbnMsIHRoZW4gZHJhaW4gdGhlIGNhYnEgYnkgZHJvcHBpbmcgYWxsIHRoZSBmcmFtZXMgaW4KLQkgKiAgICAgdGhlIGNhYnEgc28gdGhhdCB0aGUgY3VycmVudCB2YXBzIGNhYiB0cmFmZmljIGNhbiBiZSBzY2hlZHVsZWQuCisJICogICAgIHRoZSBjYWJxIHNvIHRoYXQgdGhlIGN1cnJlbnQgdmlmcyBjYWIgdHJhZmZpYyBjYW4gYmUgc2NoZWR1bGVkLgogCSAqLwogCXNwaW5fbG9ja19iaCgmY2FicS0+YXhxX2xvY2spOwogCWNhYnFfZGVwdGggPSBjYWJxLT5heHFfZGVwdGg7CiAJc3Bpbl91bmxvY2tfYmgoJmNhYnEtPmF4cV9sb2NrKTsKIAogCWlmIChza2IgJiYgY2FicV9kZXB0aCkgewotCQkvKgotCQkgKiBVbmxvY2sgdGhlIGNhYnEgbG9jayBhcyBhdGhfdHhfZHJhaW50eHEgYWNxdWlyZXMKLQkJICogdGhlIGxvY2sgYWdhaW4gd2hpY2ggaXMgYSBjb21tb24gZnVuY3Rpb24gYW5kIHRoYXQKLQkJICogYWNxdWlyZXMgdHhxIGxvY2sgaW5zaWRlLgotCQkgKi8KLQkJaWYgKHNjLT5zY19udmFwcyA+IDEpIHsKLQkJCWF0aF90eF9kcmFpbnR4cShzYywgY2FicSwgZmFsc2UpOworCQlpZiAoc2MtPm52aWZzID4gMSkgewogCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJImZsdXNoIHByZXZpb3VzIGNhYnEgdHJhZmZpY1xuIik7CisJCQkJIkZsdXNoaW5nIHByZXZpb3VzIGNhYnEgdHJhZmZpY1xuIik7CisJCQlhdGhfZHJhaW50eHEoc2MsIGNhYnEsIGZhbHNlKTsKIAkJfQogCX0KIAotCS8qIENvbnN0cnVjdCB0eCBkZXNjcmlwdG9yLiAqLwogCWF0aF9iZWFjb25fc2V0dXAoc2MsIGF2cCwgYmYpOwogCi0JLyoKLQkgKiBFbmFibGUgdGhlIENBQiBxdWV1ZSBiZWZvcmUgdGhlIGJlYWNvbiBxdWV1ZSB0bwotCSAqIGluc3VyZSBjYWIgZnJhbWVzIGFyZSB0cmlnZ2VyZWQgYnkgdGhpcyBiZWFjb24uCi0JICovCiAJd2hpbGUgKHNrYikgewotCQlhdGhfdHhfY2FicShzYywgc2tiKTsKLQkJc2tiID0gaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyhzYy0+aHcsIHZpZik7CisJCWF0aF90eF9jYWJxKGh3LCBza2IpOworCQlza2IgPSBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKGh3LCB2aWYpOwogCX0KIAogCXJldHVybiBiZjsKQEAgLTI0NSwyOCArMjE1LDIyIEBACiAgKiBTdGFydHVwIGJlYWNvbiB0cmFuc21pc3Npb24gZm9yIGFkaG9jIG1vZGUgd2hlbiB0aGV5IGFyZSBzZW50IGVudGlyZWx5CiAgKiBieSB0aGUgaGFyZHdhcmUgdXNpbmcgdGhlIHNlbGYtbGlua2VkIGRlc2NyaXB0b3IgKyB2ZW9sIHRyaWNrLgogKi8KLXN0YXRpYyB2b2lkIGF0aF9iZWFjb25fc3RhcnRfYWRob2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCkKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fc3RhcnRfYWRob2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0Jc3RydWN0IGF0aF92YXAgKmF2cDsKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQl2aWYgPSBzYy0+c2NfdmFwc1tpZl9pZF07Ci0JQVNTRVJUKHZpZik7Ci0KIAlhdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAKLQlpZiAoYXZwLT5hdl9iY2J1ZiA9PSBOVUxMKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAiYXZwPSVwIGF2X2JjYnVmPSVwXG4iLAotCQkJYXZwLCBhdnAgIT0gTlVMTCA/IGF2cC0+YXZfYmNidWYgOiBOVUxMKTsKKwlpZiAoYXZwLT5hdl9iY2J1ZiA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQorCiAJYmYgPSBhdnAtPmF2X2JjYnVmOwogCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSBiZi0+YmZfbXBkdTsKIAotCS8qIENvbnN0cnVjdCB0eCBkZXNjcmlwdG9yLiAqLwogCWF0aF9iZWFjb25fc2V0dXAoc2MsIGF2cCwgYmYpOwogCiAJLyogTkI6IGNhbGxlciBpcyBrbm93biB0byBoYXZlIGFscmVhZHkgc3RvcHBlZCB0eCBkbWEgKi8KQEAgLTI3Niw3ICsyNDAsNyBAQAogCQlzYy0+YmVhY29uLmJlYWNvbnEsIGl0bzY0KGJmLT5iZl9kYWRkciksIGJmLT5iZl9kZXNjKTsKIH0KIAotaW50IGF0aF9iZWFjb25xX3NldHVwKHN0cnVjdCBhdGhfaGFsICphaCkKK2ludCBhdGhfYmVhY29ucV9zZXR1cChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIApAQCAtMjg4LDE4ICsyNTIsMTQgQEAKIAlyZXR1cm4gYXRoOWtfaHdfc2V0dXB0eHF1ZXVlKGFoLCBBVEg5S19UWF9RVUVVRV9CRUFDT04sICZxaSk7CiB9CiAKLWludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpCitpbnQgYXRoX2JlYWNvbl9hbGxvYyhzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0Jc3RydWN0IGF0aF92YXAgKmF2cDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlfX2xlNjQgdHN0YW1wOwogCi0JdmlmID0gc2MtPnNjX3ZhcHNbaWZfaWRdOwotCUFTU0VSVCh2aWYpOwotCiAJYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCiAJLyogQWxsb2NhdGUgYSBiZWFjb24gZGVzY3JpcHRvciBpZiB3ZSBoYXZlbid0IGRvbmUgc28uICovCkBAIC0zMTAsNTEgKzI3MCw0NiBAQAogCQkJCQkJIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAkJbGlzdF9kZWwoJmF2cC0+YXZfYmNidWYtPmxpc3QpOwogCi0JCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAotCQkgICAgIShzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkgeworCQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgICEoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfVkVPTCkpIHsKIAkJCWludCBzbG90OwogCQkJLyoKLQkJCSAqIEFzc2lnbiB0aGUgdmFwIHRvIGEgYmVhY29uIHhtaXQgc2xvdC4gQXMKKwkJCSAqIEFzc2lnbiB0aGUgdmlmIHRvIGEgYmVhY29uIHhtaXQgc2xvdC4gQXMKIAkJCSAqIGFib3ZlLCB0aGlzIGNhbm5vdCBmYWlsIHRvIGZpbmQgb25lLgogCQkJICovCiAJCQlhdnAtPmF2X2JzbG90ID0gMDsKIAkJCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBBVEhfQkNCVUY7IHNsb3QrKykKLQkJCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtzbG90XSA9PSBBVEhfSUZfSURfQU5ZKSB7CisJCQkJaWYgKHNjLT5iZWFjb24uYnNsb3Rbc2xvdF0gPT0gTlVMTCkgewogCQkJCQkvKgogCQkJCQkgKiBYWFggaGFjaywgc3BhY2Ugb3V0IHNsb3RzIHRvIGJldHRlcgogCQkJCQkgKiBkZWFsIHdpdGggbWlzc2VzCiAJCQkJCSAqLwogCQkJCQlpZiAoc2xvdCsxIDwgQVRIX0JDQlVGICYmCi0JCQkJCSAgICBzYy0+YmVhY29uLmJzbG90W3Nsb3QrMV0gPT0KLQkJCQkJCUFUSF9JRl9JRF9BTlkpIHsKKwkJCQkJICAgIHNjLT5iZWFjb24uYnNsb3Rbc2xvdCsxXSA9PSBOVUxMKSB7CiAJCQkJCQlhdnAtPmF2X2JzbG90ID0gc2xvdCsxOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQkJYXZwLT5hdl9ic2xvdCA9IHNsb3Q7CiAJCQkJCS8qIE5COiBrZWVwIGxvb2tpbmcgZm9yIGEgZG91YmxlIHNsb3QgKi8KIAkJCQl9Ci0JCQlCVUdfT04oc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSAhPSBBVEhfSUZfSURfQU5ZKTsKLQkJCXNjLT5iZWFjb24uYnNsb3RbYXZwLT5hdl9ic2xvdF0gPSBpZl9pZDsKLQkJCXNjLT5zY19uYmNudmFwcysrOworCQkJQlVHX09OKHNjLT5iZWFjb24uYnNsb3RbYXZwLT5hdl9ic2xvdF0gIT0gTlVMTCk7CisJCQlzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdID0gdmlmOworCQkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2F2cC0+YXZfYnNsb3RdID0gYXBoeTsKKwkJCXNjLT5uYmNudmlmcysrOwogCQl9CiAJfQogCi0JLyogcmVsZWFzZSB0aGUgcHJldmlvdXMgYmVhY29uIGZyYW1lICwgaWYgaXQgYWxyZWFkeSBleGlzdHMuICovCisJLyogcmVsZWFzZSB0aGUgcHJldmlvdXMgYmVhY29uIGZyYW1lLCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gKi8KIAliZiA9IGF2cC0+YXZfYmNidWY7CiAJaWYgKGJmLT5iZl9tcGR1ICE9IE5VTEwpIHsKIAkJc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0JCXBjaV91bm1hcF9zaW5nbGUoc2MtPnBkZXYsIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJCSBza2ItPmxlbiwKLQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2RtYWNvbnRleHQsCisJCQkJIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJYmYtPmJmX21wZHUgPSBOVUxMOwogCX0KIAotCS8qCi0JICogTkI6IHRoZSBiZWFjb24gZGF0YSBidWZmZXIgbXVzdCBiZSAzMi1iaXQgYWxpZ25lZC4KLQkgKiBGSVhNRTogRmlsbCBhdnAtPmF2X2J0eGN0bC50eHBvd2VyIGFuZAotCSAqIGF2cC0+YXZfYnR4Y3RsLnNob3J0UHJlYW1ibGUKLQkgKi8KKwkvKiBOQjogdGhlIGJlYWNvbiBkYXRhIGJ1ZmZlciBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLiAqLwogCXNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHNjLT5odywgdmlmKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sICJjYW5ub3QgZ2V0IHNrYlxuIik7CkBAIC0zNjMsNzUgKzMxOCw2NSBAQAogCiAJdHN0YW1wID0gKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXA7CiAJc2MtPmJlYWNvbi5iY190c3RhbXAgPSBsZTY0X3RvX2NwdSh0c3RhbXApOwotCi0JLyoKLQkgKiBDYWxjdWxhdGUgYSBUU0YgYWRqdXN0bWVudCBmYWN0b3IgcmVxdWlyZWQgZm9yCi0JICogc3RhZ2dlcmVkIGJlYWNvbnMuICBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBmb3JtYXQKLQkgKiBvZiB0aGUgYmVhY29uIGZyYW1lIGxlYXZlcyB0aGUgdHN0YW1wIGZpZWxkIGltbWVkaWF0ZWx5Ci0JICogZm9sbG93aW5nIHRoZSBoZWFkZXIuCi0JICovCisJLyogQ2FsY3VsYXRlIGEgVFNGIGFkanVzdG1lbnQgZmFjdG9yIHJlcXVpcmVkIGZvciBzdGFnZ2VyZWQgYmVhY29ucy4gKi8KIAlpZiAoYXZwLT5hdl9ic2xvdCA+IDApIHsKIAkJdTY0IHRzZmFkanVzdDsKLQkJX19sZTY0IHZhbDsKIAkJaW50IGludHZhbDsKIAogCQlpbnR2YWwgPSBzYy0+aHctPmNvbmYuYmVhY29uX2ludCA/CiAJCQlzYy0+aHctPmNvbmYuYmVhY29uX2ludCA6IEFUSF9ERUZBVUxUX0JJTlRWQUw7CiAKIAkJLyoKLQkJICogVGhlIGJlYWNvbiBpbnRlcnZhbCBpcyBpbiBUVSdzOyB0aGUgVFNGIGluIHVzZWNzLgotCQkgKiBXZSBmaWd1cmUgb3V0IGhvdyBtYW55IFRVJ3MgdG8gYWRkIHRvIGFsaWduIHRoZQotCQkgKiB0aW1lc3RhbXAgdGhlbiBjb252ZXJ0IHRvIFRTRiB1bml0cyBhbmQgaGFuZGxlCi0JCSAqIGJ5dGUgc3dhcHBpbmcgYmVmb3JlIHdyaXRpbmcgaXQgaW4gdGhlIGZyYW1lLgotCQkgKiBUaGUgaGFyZHdhcmUgd2lsbCB0aGVuIGFkZCB0aGlzIGVhY2ggdGltZSBhIGJlYWNvbgotCQkgKiBmcmFtZSBpcyBzZW50LiAgTm90ZSB0aGF0IHdlIGFsaWduIHZhcCdzIDEuLk4KLQkJICogYW5kIGxlYXZlIHZhcCAwIHVudG91Y2hlZC4gIFRoaXMgbWVhbnMgdmFwIDAKLQkJICogaGFzIGEgdGltZXN0YW1wIGluIG9uZSBiZWFjb24gaW50ZXJ2YWwgd2hpbGUgdGhlCi0JCSAqIG90aGVycyBnZXQgYSB0aW1lc3RhbXAgYWxpZ25lZCB0byB0aGUgbmV4dCBpbnRlcnZhbC4KKwkJICogQ2FsY3VsYXRlIHRoZSBUU0Ygb2Zmc2V0IGZvciB0aGlzIGJlYWNvbiBzbG90LCBpLmUuLCB0aGUKKwkJICogbnVtYmVyIG9mIHVzZWNzIHRoYXQgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUgdGltZXN0YW1wIGZpZWxkCisJCSAqIGluIEJlYWNvbiBhbmQgUHJvYmUgUmVzcG9uc2UgZnJhbWVzLiBCZWFjb24gc2xvdCAwIGlzCisJCSAqIHByb2Nlc3NlZCBhdCB0aGUgY29ycmVjdCBvZmZzZXQsIHNvIGl0IGRvZXMgbm90IHJlcXVpcmUgVFNGCisJCSAqIGFkanVzdG1lbnQuIE90aGVyIHNsb3RzIGFyZSBhZGp1c3RlZCB0byBnZXQgdGhlIHRpbWVzdGFtcAorCQkgKiBjbG9zZSB0byB0aGUgVEJUVCBmb3IgdGhlIEJTUy4KIAkJICovCi0JCXRzZmFkanVzdCA9IChpbnR2YWwgKiAoQVRIX0JDQlVGIC0gYXZwLT5hdl9ic2xvdCkpIC8gQVRIX0JDQlVGOwotCQl2YWwgPSBjcHVfdG9fbGU2NCh0c2ZhZGp1c3QgPDwgMTApOyAgICAgLyogVFUtPlRTRiAqLworCQl0c2ZhZGp1c3QgPSBpbnR2YWwgKiBhdnAtPmF2X2JzbG90IC8gQVRIX0JDQlVGOworCQlhdnAtPnRzZl9hZGp1c3QgPSBjcHVfdG9fbGU2NChUVV9UT19VU0VDKHRzZmFkanVzdCkpOwogCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAogCQkJInN0YWdnZXIgYmVhY29ucywgYnNsb3QgJWQgaW50dmFsICV1IHRzZmFkanVzdCAlbGx1XG4iLAogCQkJYXZwLT5hdl9ic2xvdCwgaW50dmFsLCAodW5zaWduZWQgbG9uZyBsb25nKXRzZmFkanVzdCk7CiAKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCQltZW1jcHkoJmhkclsxXSwgJnZhbCwgc2l6ZW9mKHZhbCkpOwotCX0KKwkJKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXAgPQorCQkJYXZwLT50c2ZfYWRqdXN0OworCX0gZWxzZQorCQlhdnAtPnRzZl9hZGp1c3QgPSBjcHVfdG9fbGU2NCgwKTsKIAogCWJmLT5iZl9tcGR1ID0gc2tiOwogCWJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9kbWFjb250ZXh0ID0KLQkJcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwKLQkJCSAgICAgICBza2ItPmxlbiwKLQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKLQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNjLT5wZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgeworCQlkbWFfbWFwX3NpbmdsZShzYy0+ZGV2LCBza2ItPmRhdGEsCisJCQkgICAgICAgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihzYy0+ZGV2LCBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQliZi0+YmZfbXBkdSA9IE5VTEw7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJInBjaV9kbWFfbWFwcGluZ19lcnJvcigpIG9uIGJlYWNvbiBhbGxvY1xuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkiZG1hX21hcHBpbmdfZXJyb3Igb24gYmVhY29uIGFsbG9jXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgYXRoX2JlYWNvbl9yZXR1cm4oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdmFwICphdnApCit2b2lkIGF0aF9iZWFjb25fcmV0dXJuKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3ZpZiAqYXZwKQogewogCWlmIChhdnAtPmF2X2JjYnVmICE9IE5VTEwpIHsKIAkJc3RydWN0IGF0aF9idWYgKmJmOwogCiAJCWlmIChhdnAtPmF2X2JzbG90ICE9IC0xKSB7Ci0JCQlzYy0+YmVhY29uLmJzbG90W2F2cC0+YXZfYnNsb3RdID0gQVRIX0lGX0lEX0FOWTsKLQkJCXNjLT5zY19uYmNudmFwcy0tOworCQkJc2MtPmJlYWNvbi5ic2xvdFthdnAtPmF2X2JzbG90XSA9IE5VTEw7CisJCQlzYy0+YmVhY29uLmJzbG90X2FwaHlbYXZwLT5hdl9ic2xvdF0gPSBOVUxMOworCQkJc2MtPm5iY252aWZzLS07CiAJCX0KIAogCQliZiA9IGF2cC0+YXZfYmNidWY7CiAJCWlmIChiZi0+YmZfbXBkdSAhPSBOVUxMKSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+YmZfZG1hY29udGV4dCwKLQkJCQkJIHNrYi0+bGVuLAotCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKHNjLT5kZXYsIGJmLT5iZl9kbWFjb250ZXh0LAorCQkJCQkgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCWJmLT5iZl9tcGR1ID0gTlVMTDsKIAkJfQpAQCAtNDQxLDkyICszODYsNDUgQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCBhdGhfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYgPSBOVUxMOwotCWludCBzbG90LCBpZl9pZDsKLQl1MzIgYmZhZGRyOwotCXUzMiByeF9jbGVhciA9IDAsIHJ4X2ZyYW1lID0gMCwgdHhfZnJhbWUgPSAwOwotCXUzMiBzaG93X2N5Y2xlcyA9IDA7Ci0JdTMyIGJjID0gMDsgLyogYmVhY29uIGNvdW50ICovCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OworCWludCBzbG90OworCXUzMiBiZmFkZHIsIGJjID0gMCwgdHNmdHU7CiAJdTY0IHRzZjsKLQl1MzIgdHNmdHU7CiAJdTE2IGludHZhbDsKIAotCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQlzaG93X2N5Y2xlcyA9IGF0aDlrX2h3X0dldE1pYkN5Y2xlQ291bnRzUGN0KGFoLAotCQkJCQkgICAgJnJ4X2NsZWFyLCAmcnhfZnJhbWUsICZ0eF9mcmFtZSk7Ci0JfQotCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgcHJldmlvdXMgYmVhY29uIGhhcyBnb25lIG91dC4gIElmCiAJICogbm90IGRvbid0IHRyeSB0byBwb3N0IGFub3RoZXIsIHNraXAgdGhpcyBwZXJpb2QKIAkgKiBhbmQgd2FpdCBmb3IgdGhlIG5leHQuICBNaXNzZWQgYmVhY29ucyBpbmRpY2F0ZQogCSAqIGEgcHJvYmxlbSBhbmQgc2hvdWxkIG5vdCBvY2N1ci4gIElmIHdlIG1pc3MgdG9vCiAJICogbWFueSBjb25zZWN1dGl2ZSBiZWFjb25zIHJlc2V0IHRoZSBkZXZpY2UuCi0JICoKLQkgKiBGSVhNRTogQ2xlYW4gdXAgdGhpcyBtZXNzICEhCiAJICovCiAJaWYgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgc2MtPmJlYWNvbi5iZWFjb25xKSAhPSAwKSB7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQrKzsKLQkJLyogWFhYOiBkb3RoIG5lZWRzIHRoZSBjaGFuY2hhbmdlIElFIGNvdW50ZG93biBkZWNyZW1lbnRlZC4KLQkJICogICAgICBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGEgbWFjODAyMTEgY2FsbCB0byBpbmRpY2F0ZQotCQkgKiAgICAgIGEgYmVhY29uIG1pc3Mgc28gYXBwcm9wcmlhdGUgYWN0aW9uIGNvdWxkIGJlIHRha2VuCi0JCSAqICAgICAgKGluIHRoYXQgbGF5ZXIpLgotCQkgKi8KKwogCQlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCA8IEJTVFVDS19USFJFU0gpIHsKLQkJCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJCWlmIChzaG93X2N5Y2xlcykgewotCQkJCQkvKgotCQkJCQkgKiBEaXNwbGF5IGN5Y2xlIGNvdW50ZXIgc3RhdHMgZnJvbSBIVwotCQkJCQkgKiB0byBhaWRlIGluIGRlYnVnIG9mIHN0aWNraW5lc3MuCi0JCQkJCSAqLwotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJidXN5IHRpbWVzOiByeF9jbGVhcj0lZCwgIgotCQkJCQkJInJ4X2ZyYW1lPSVkLCB0eF9mcmFtZT0lZFxuIiwKLQkJCQkJCXJ4X2NsZWFyLCByeF9mcmFtZSwKLQkJCQkJCXR4X2ZyYW1lKTsKLQkJCQl9IGVsc2UgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJ1bmFibGUgdG8gb2J0YWluICIKLQkJCQkJCSJidXN5IHRpbWVzXG4iKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAotCQkJCQkibWlzc2VkICV1IGNvbnNlY3V0aXZlIGJlYWNvbnNcbiIsCi0JCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwotCQkJfQorCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCisJCQkJIm1pc3NlZCAldSBjb25zZWN1dGl2ZSBiZWFjb25zXG4iLAorCQkJCXNjLT5iZWFjb24uYm1pc3NjbnQpOwogCQl9IGVsc2UgaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPj0gQlNUVUNLX1RIUkVTSCkgewotCQkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX05PX1JFU0VUKSB7Ci0JCQkJaWYgKHNjLT5iZWFjb24uYm1pc3NjbnQgPT0gQlNUVUNLX1RIUkVTSCkgewotCQkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSAiCi0JCQkJCQkic3R1Y2tcbiIpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7Ci0JCQkJYXRoX2JzdHVja19wcm9jZXNzKHNjKTsKLQkJCX0KKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLAorCQkJCSJiZWFjb24gaXMgb2ZmaWNpYWxseSBzdHVja1xuIik7CisJCQlhdGhfcmVzZXQoc2MsIGZhbHNlKTsKIAkJfQorCiAJCXJldHVybjsKIAl9CiAKIAlpZiAoc2MtPmJlYWNvbi5ibWlzc2NudCAhPSAwKSB7Ci0JCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9OT19SRVNFVCkgewotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJInJlc3VtZSBiZWFjb24geG1pdCBhZnRlciAldSBtaXNzZXNcbiIsCi0JCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7Ci0JCX0gZWxzZSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKLQkJCQkicmVzdW1lIGJlYWNvbiB4bWl0IGFmdGVyICV1IG1pc3Nlc1xuIiwKLQkJCQlzYy0+YmVhY29uLmJtaXNzY250KTsKLQkJfQorCQlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJCSJyZXN1bWUgYmVhY29uIHhtaXQgYWZ0ZXIgJXUgbWlzc2VzXG4iLAorCQkJc2MtPmJlYWNvbi5ibWlzc2NudCk7CiAJCXNjLT5iZWFjb24uYm1pc3NjbnQgPSAwOwogCX0KIApAQCAtNTQyLDIxICs0NDAsMzAgQEAKIAl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7CiAJdHNmdHUgPSBUU0ZfVE9fVFUodHNmPj4zMiwgdHNmKTsKIAlzbG90ID0gKCh0c2Z0dSAlIGludHZhbCkgKiBBVEhfQkNCVUYpIC8gaW50dmFsOwotCWlmX2lkID0gc2MtPmJlYWNvbi5ic2xvdFsoc2xvdCArIDEpICUgQVRIX0JDQlVGXTsKKwkvKgorCSAqIFJldmVyc2UgdGhlIHNsb3Qgb3JkZXIgdG8gZ2V0IHNsb3QgMCBvbiB0aGUgVEJUVCBvZmZzZXQgdGhhdCBkb2VzCisJICogbm90IHJlcXVpcmUgVFNGIGFkanVzdG1lbnQgYW5kIG90aGVyIHNsb3RzIGFkZGluZworCSAqIHNsb3QvQVRIX0JDQlVGICogYmVhY29uX2ludCB0byB0aW1lc3RhbXAuIEZvciBleGFtcGxlLCB3aXRoCisJICogQVRIX0JDQlVGID0gNCwgd2UgcHJvY2VzcyBiZWFjb24gc2xvdHMgYXMgZm9sbG93czogMyAyIDEgMCAzIDIgMSAuLgorCSAqIGFuZCBzbG90IDAgaXMgYXQgY29ycmVjdCBvZmZzZXQgdG8gVEJUVC4KKwkgKi8KKwlzbG90ID0gQVRIX0JDQlVGIC0gc2xvdCAtIDE7CisJdmlmID0gc2MtPmJlYWNvbi5ic2xvdFtzbG90XTsKKwlhcGh5ID0gc2MtPmJlYWNvbi5ic2xvdF9hcGh5W3Nsb3RdOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCSJzbG90ICVkIFt0c2YgJWxsdSB0c2Z0dSAldSBpbnR2YWwgJXVdIGlmX2lkICVkXG4iLAotCQlzbG90LCAodW5zaWduZWQgbG9uZyBsb25nKXRzZiwgdHNmdHUsCi0JCWludHZhbCwgaWZfaWQpOworCQkic2xvdCAlZCBbdHNmICVsbHUgdHNmdHUgJXUgaW50dmFsICV1XSB2aWYgJXBcbiIsCisJCXNsb3QsIHRzZiwgdHNmdHUsIGludHZhbCwgdmlmKTsKIAogCWJmYWRkciA9IDA7Ci0JaWYgKGlmX2lkICE9IEFUSF9JRl9JRF9BTlkpIHsKLQkJYmYgPSBhdGhfYmVhY29uX2dlbmVyYXRlKHNjLCBpZl9pZCk7CisJaWYgKHZpZikgeworCQliZiA9IGF0aF9iZWFjb25fZ2VuZXJhdGUoYXBoeS0+aHcsIHZpZik7CiAJCWlmIChiZiAhPSBOVUxMKSB7CiAJCQliZmFkZHIgPSBiZi0+YmZfZGFkZHI7CiAJCQliYyA9IDE7CiAJCX0KIAl9CisKIAkvKgogCSAqIEhhbmRsZSBzbG90IHRpbWUgY2hhbmdlIHdoZW4gYSBub24tRVJQIHN0YXRpb24gam9pbnMvbGVhdmVzCiAJICogYW4gMTFnIG5ldHdvcmsuICBUaGUgODAyLjExIGxheWVyIG5vdGlmaWVzIHVzIHZpYSBjYWxsYmFjaywKQEAgLTU3Myw3ICs0ODAsNiBAQAogCSAqICAgICBpbnRlcnZhbCBoYXMgcGFzc2VkLiAgV2hlbiBidXJzdGluZyBzbG90IGlzIGFsd2F5cyBsZWZ0CiAJICogICAgIHNldCB0byBBVEhfQkNCVUYgc28gdGhpcyBjaGVjayBpcyBhIG5vb3AuCiAJICovCi0JLyogWFhYIGxvY2tpbmcgKi8KIAlpZiAoc2MtPmJlYWNvbi51cGRhdGVzbG90ID09IFVQREFURSkgewogCQlzYy0+YmVhY29uLnVwZGF0ZXNsb3QgPSBDT01NSVQ7IC8qIGNvbW1pdCBuZXh0IGJlYWNvbiAqLwogCQlzYy0+YmVhY29uLnNsb3R1cGRhdGUgPSBzbG90OwpAQCAtNTkwLDUyICs0OTYsMjI0IEBACiAJCWlmICghYXRoOWtfaHdfc3RvcHR4ZG1hKGFoLCBzYy0+YmVhY29uLmJlYWNvbnEpKSB7CiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAogCQkJCSJiZWFjb24gcXVldWUgJXUgZGlkIG5vdCBzdG9wP1xuIiwgc2MtPmJlYWNvbi5iZWFjb25xKTsKLQkJCS8qIE5COiB0aGUgSEFMIHN0aWxsIHN0b3BzIERNQSwgc28gcHJvY2VlZCAqLwogCQl9CiAKIAkJLyogTkI6IGNhYnEgdHJhZmZpYyBzaG91bGQgYWxyZWFkeSBiZSBxdWV1ZWQgYW5kIHByaW1lZCAqLwogCQlhdGg5a19od19wdXR0eGJ1ZihhaCwgc2MtPmJlYWNvbi5iZWFjb25xLCBiZmFkZHIpOwogCQlhdGg5a19od190eHN0YXJ0KGFoLCBzYy0+YmVhY29uLmJlYWNvbnEpOwogCi0JCXNjLT5iZWFjb24uYXN0X2JlX3htaXQgKz0gYmM7ICAgICAvKiBYWFggcGVyLXZhcD8gKi8KKwkJc2MtPmJlYWNvbi5hc3RfYmVfeG1pdCArPSBiYzsgICAgIC8qIFhYWCBwZXItdmlmPyAqLwogCX0KIH0KIAogLyoKLSAqIENvbmZpZ3VyZSB0aGUgYmVhY29uIGFuZCBzbGVlcCB0aW1lcnMuCi0gKgotICogV2hlbiBvcGVyYXRpbmcgYXMgYW4gQVAgdGhpcyByZXNldHMgdGhlIFRTRiBhbmQgc2V0cwotICogdXAgdGhlIGhhcmR3YXJlIHRvIG5vdGlmeSB1cyB3aGVuIHdlIG5lZWQgdG8gaXNzdWUgYmVhY29ucy4KLSAqCi0gKiBXaGVuIG9wZXJhdGluZyBpbiBzdGF0aW9uIG1vZGUgdGhpcyBzZXRzIHVwIHRoZSBiZWFjb24KLSAqIHRpbWVycyBhY2NvcmRpbmcgdG8gdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCByZWNlaXZlZAotICogYmVhY29uIGFuZCB0aGUgY3VycmVudCBUU0YsIGNvbmZpZ3VyZXMgUENGIGFuZCBEVElNCi0gKiBoYW5kbGluZywgcHJvZ3JhbXMgdGhlIHNsZWVwIHJlZ2lzdGVycyBzbyB0aGUgaGFyZHdhcmUKLSAqIHdpbGwgd2FrZXVwIGluIHRpbWUgdG8gcmVjZWl2ZSBiZWFjb25zLCBhbmQgY29uZmlndXJlcwotICogdGhlIGJlYWNvbiBtaXNzIGhhbmRsaW5nIHNvIHdlJ2xsIHJlY2VpdmUgYSBCTUlTUwotICogaW50ZXJydXB0IHdoZW4gd2Ugc3RvcCBzZWVpbmcgYmVhY29ucyBmcm9tIHRoZSBBUAotICogd2UndmUgYXNzb2NpYXRlZCB3aXRoLgorICogRm9yIG11bHRpLWJzcyBhcCBzdXBwb3J0IGJlYWNvbnMgYXJlIGVpdGhlciBzdGFnZ2VyZWQgZXZlbmx5IG92ZXIgTiBzbG90cyBvcgorICogYnVyc3QgdG9nZXRoZXIuICBGb3IgdGhlIGZvcm1lciBhcnJhbmdlIGZvciB0aGUgU1dCQSB0byBiZSBkZWxpdmVyZWQgZm9yIGVhY2gKKyAqIHNsb3QuIFNsb3RzIHRoYXQgYXJlIG5vdCBvY2N1cGllZCB3aWxsIGdlbmVyYXRlIG5vdGhpbmcuCiAgKi8KLXZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCkKK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJCSBzdHJ1Y3QgYXRoX2JlYWNvbl9jb25maWcgKmNvbmYsCisJCQkJIHN0cnVjdCBhdGhfdmlmICphdnApCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIGNvbmY7Ci0Jc3RydWN0IGF0aF92YXAgKmF2cDsKLQllbnVtIG5sODAyMTFfaWZ0eXBlIG9wbW9kZTsKIAl1MzIgbmV4dHRidHQsIGludHZhbDsKIAotCWlmIChpZl9pZCAhPSBBVEhfSUZfSURfQU5ZKSB7Ci0JCXZpZiA9IHNjLT5zY192YXBzW2lmX2lkXTsKLQkJQVNTRVJUKHZpZik7Ci0JCWF2cCA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKLQkJb3Btb2RlID0gYXZwLT5hdl9vcG1vZGU7CisJLyogQ29uZmlndXJlIHRoZSB0aW1lcnMgb25seSB3aGVuIHRoZSBUU0YgaGFzIHRvIGJlIHJlc2V0ICovCisKKwlpZiAoIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UU0ZfUkVTRVQpKQorCQlyZXR1cm47CisKKwkvKiBOQjogdGhlIGJlYWNvbiBpbnRlcnZhbCBpcyBrZXB0IGludGVybmFsbHkgaW4gVFUncyAqLworCWludHZhbCA9IGNvbmYtPmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7CisJaW50dmFsIC89IEFUSF9CQ0JVRjsgICAgLyogZm9yIHN0YWdnZXJlZCBiZWFjb25zICovCisJbmV4dHRidHQgPSBpbnR2YWw7CisJaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9SRVNFVF9UU0Y7CisKKwkvKgorCSAqIEluIEFQIG1vZGUgd2UgZW5hYmxlIHRoZSBiZWFjb24gdGltZXJzIGFuZCBTV0JBIGludGVycnVwdHMgdG8KKwkgKiBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuCisJICovCisJaW50dmFsIHw9IEFUSDlLX0JFQUNPTl9FTkE7CisJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOworCWF0aF9iZWFjb25xX2NvbmZpZyhzYyk7CisKKwkvKiBTZXQgdGhlIGNvbXB1dGVkIEFQIGJlYWNvbiB0aW1lcnMgKi8KKworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgMCk7CisJYXRoOWtfaHdfYmVhY29uaW5pdChzYy0+c2NfYWgsIG5leHR0YnR0LCBpbnR2YWwpOworCXNjLT5iZWFjb24uYm1pc3NjbnQgPSAwOworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPmltYXNrKTsKKworCS8qIENsZWFyIHRoZSByZXNldCBUU0YgZmxhZywgc28gdGhhdCBzdWJzZXF1ZW50IGJlYWNvbiB1cGRhdGlvbgorCSAgIHdpbGwgbm90IHJlc2V0IHRoZSBIVyBUU0YuICovCisKKwlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1RTRl9SRVNFVDsKK30KKworLyoKKyAqIFRoaXMgc2V0cyB1cCB0aGUgYmVhY29uIHRpbWVycyBhY2NvcmRpbmcgdG8gdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdAorICogcmVjZWl2ZWQgYmVhY29uIGFuZCB0aGUgY3VycmVudCBUU0YsIGNvbmZpZ3VyZXMgUENGIGFuZCBEVElNCisgKiBoYW5kbGluZywgcHJvZ3JhbXMgdGhlIHNsZWVwIHJlZ2lzdGVycyBzbyB0aGUgaGFyZHdhcmUgd2lsbCB3YWtldXAgaW4KKyAqIHRpbWUgdG8gcmVjZWl2ZSBiZWFjb25zLCBhbmQgY29uZmlndXJlcyB0aGUgYmVhY29uIG1pc3MgaGFuZGxpbmcgc28KKyAqIHdlJ2xsIHJlY2VpdmUgYSBCTUlTUyBpbnRlcnJ1cHQgd2hlbiB3ZSBzdG9wIHNlZWluZyBiZWFjb25zIGZyb20gdGhlIEFQCisgKiB3ZSd2ZSBhc3NvY2lhdGVkIHdpdGguCisgKi8KK3N0YXRpYyB2b2lkIGF0aF9iZWFjb25fY29uZmlnX3N0YShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgIHN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY29uZiwKKwkJCQkgIHN0cnVjdCBhdGhfdmlmICphdnApCit7CisJc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSBiczsKKwlpbnQgZHRpbXBlcmlvZCwgZHRpbWNvdW50LCBzbGVlcGR1cmF0aW9uOworCWludCBjZnBwZXJpb2QsIGNmcGNvdW50OworCXUzMiBuZXh0dGJ0dCA9IDAsIGludHZhbCwgdHNmdHU7CisJdTY0IHRzZjsKKworCW1lbXNldCgmYnMsIDAsIHNpemVvZihicykpOworCWludHZhbCA9IGNvbmYtPmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7CisKKwkvKgorCSAqIFNldHVwIGR0aW0gYW5kIGNmcCBwYXJhbWV0ZXJzIGFjY29yZGluZyB0bworCSAqIGxhc3QgYmVhY29uIHdlIHJlY2VpdmVkICh3aGljaCBtYXkgYmUgbm9uZSkuCisJICovCisJZHRpbXBlcmlvZCA9IGNvbmYtPmR0aW1fcGVyaW9kOworCWlmIChkdGltcGVyaW9kIDw9IDApCQkvKiBOQjogMCBpZiBub3Qga25vd24gKi8KKwkJZHRpbXBlcmlvZCA9IDE7CisJZHRpbWNvdW50ID0gY29uZi0+ZHRpbV9jb3VudDsKKwlpZiAoZHRpbWNvdW50ID49IGR0aW1wZXJpb2QpCS8qIE5COiBzYW5pdHkgY2hlY2sgKi8KKwkJZHRpbWNvdW50ID0gMDsKKwljZnBwZXJpb2QgPSAxOwkJCS8qIE5COiBubyBQQ0Ygc3VwcG9ydCB5ZXQgKi8KKwljZnBjb3VudCA9IDA7CisKKwlzbGVlcGR1cmF0aW9uID0gY29uZi0+bGlzdGVuX2ludGVydmFsICogaW50dmFsOworCWlmIChzbGVlcGR1cmF0aW9uIDw9IDApCisJCXNsZWVwZHVyYXRpb24gPSBpbnR2YWw7CisKKwkvKgorCSAqIFB1bGwgbmV4dHRidHQgZm9yd2FyZCB0byByZWZsZWN0IHRoZSBjdXJyZW50CisJICogVFNGIGFuZCBjYWxjdWxhdGUgZHRpbStjZnAgc3RhdGUgZm9yIHRoZSByZXN1bHQuCisJICovCisJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoc2MtPnNjX2FoKTsKKwl0c2Z0dSA9IFRTRl9UT19UVSh0c2Y+PjMyLCB0c2YpICsgRlVER0U7CisJZG8geworCQluZXh0dGJ0dCArPSBpbnR2YWw7CisJCWlmICgtLWR0aW1jb3VudCA8IDApIHsKKwkJCWR0aW1jb3VudCA9IGR0aW1wZXJpb2QgLSAxOworCQkJaWYgKC0tY2ZwY291bnQgPCAwKQorCQkJCWNmcGNvdW50ID0gY2ZwcGVyaW9kIC0gMTsKKwkJfQorCX0gd2hpbGUgKG5leHR0YnR0IDwgdHNmdHUpOworCisJYnMuYnNfaW50dmFsID0gaW50dmFsOworCWJzLmJzX25leHR0YnR0ID0gbmV4dHRidHQ7CisJYnMuYnNfZHRpbXBlcmlvZCA9IGR0aW1wZXJpb2QqaW50dmFsOworCWJzLmJzX25leHRkdGltID0gYnMuYnNfbmV4dHRidHQgKyBkdGltY291bnQqaW50dmFsOworCWJzLmJzX2NmcHBlcmlvZCA9IGNmcHBlcmlvZCpicy5ic19kdGltcGVyaW9kOworCWJzLmJzX2NmcG5leHQgPSBicy5ic19uZXh0ZHRpbSArIGNmcGNvdW50KmJzLmJzX2R0aW1wZXJpb2Q7CisJYnMuYnNfY2ZwbWF4ZHVyYXRpb24gPSAwOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBiZWFjb25zIHRvIG1pc3MqIGJlZm9yZSB0YWtpbmcKKwkgKiBhIEJNSVNTIGludGVycnVwdC4gVGhlIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWVkIGluIFRVIHNvIHdlIG9ubHkKKwkgKiBuZWVkIGNhbGN1bGF0ZSBiYXNlZAlvbiB0aGUgYmVhY29uIGludGVydmFsLiAgTm90ZSB0aGF0IHdlIGNsYW1wIHRoZQorCSAqIHJlc3VsdCB0byBhdCBtb3N0IDE1IGJlYWNvbnMuCisJICovCisJaWYgKHNsZWVwZHVyYXRpb24gPiBpbnR2YWwpIHsKKwkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPSBjb25mLT5saXN0ZW5faW50ZXJ2YWwgKgorCQkJQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgLyAyOwogCX0gZWxzZSB7Ci0JCW9wbW9kZSA9IHNjLT5zY19haC0+YWhfb3Btb2RlOworCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IERJVl9ST1VORF9VUChjb25mLT5ibWlzc190aW1lb3V0LCBpbnR2YWwpOworCQlpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPiAxNSkKKwkJCWJzLmJzX2JtaXNzdGhyZXNob2xkID0gMTU7CisJCWVsc2UgaWYgKGJzLmJzX2JtaXNzdGhyZXNob2xkIDw9IDApCisJCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IDE7CiAJfQogCi0JbWVtc2V0KCZjb25mLCAwLCBzaXplb2Yoc3RydWN0IGF0aF9iZWFjb25fY29uZmlnKSk7CisJLyoKKwkgKiBDYWxjdWxhdGUgc2xlZXAgZHVyYXRpb24uIFRoZSBjb25maWd1cmF0aW9uIGlzIGdpdmVuIGluIG1zLgorCSAqIFdlIGVuc3VyZSBhIG11bHRpcGxlIG9mIHRoZSBiZWFjb24gcGVyaW9kIGlzIHVzZWQuIEFsc28sIGlmIHRoZSBzbGVlcAorCSAqIGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiB0aGUgRFRJTSBwZXJpb2QgdGhlbiBpdCBtYWtlcyBzZW5zZXMKKwkgKiB0byBtYWtlIGl0IGEgbXVsdGlwbGUgb2YgdGhhdC4KKwkgKgorCSAqIFhYWCBmaXhlZCBhdCAxMDBtcworCSAqLwogCisJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IHJvdW5kdXAoSUVFRTgwMjExX01TX1RPX1RVKDEwMCksIHNsZWVwZHVyYXRpb24pOworCWlmIChicy5ic19zbGVlcGR1cmF0aW9uID4gYnMuYnNfZHRpbXBlcmlvZCkKKwkJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IGJzLmJzX2R0aW1wZXJpb2Q7CisKKwkvKiBUU0Ygb3V0IG9mIHJhbmdlIHRocmVzaG9sZCBmaXhlZCBhdCAxIHNlY29uZCAqLworCWJzLmJzX3RzZm9vcl90aHJlc2hvbGQgPSBBVEg5S19UU0ZPT1JfVEhSRVNIT0xEOworCisJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sICJ0c2Y6ICVsbHUgdHNmdHU6ICV1XG4iLCB0c2YsIHRzZnR1KTsKKwlEUFJJTlRGKHNjLCBBVEhfREJHX0JFQUNPTiwKKwkJImJtaXNzOiAldSBzbGVlcDogJXUgY2ZwLXBlcmlvZDogJXUgbWF4ZHVyOiAldSBuZXh0OiAldVxuIiwKKwkJYnMuYnNfYm1pc3N0aHJlc2hvbGQsIGJzLmJzX3NsZWVwZHVyYXRpb24sCisJCWJzLmJzX2NmcHBlcmlvZCwgYnMuYnNfY2ZwbWF4ZHVyYXRpb24sIGJzLmJzX2NmcG5leHQpOworCisJLyogU2V0IHRoZSBjb21wdXRlZCBTVEEgYmVhY29uIHRpbWVycyAqLworCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKKwlhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc2MtPnNjX2FoLCAmYnMpOworCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfQk1JU1M7CisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+aW1hc2spOworfQorCitzdGF0aWMgdm9pZCBhdGhfYmVhY29uX2NvbmZpZ19hZGhvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICAgc3RydWN0IGF0aF9iZWFjb25fY29uZmlnICpjb25mLAorCQkJCSAgICBzdHJ1Y3QgYXRoX3ZpZiAqYXZwLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXU2NCB0c2Y7CisJdTMyIHRzZnR1LCBpbnR2YWwsIG5leHR0YnR0OworCisJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKKworCS8qIFB1bGwgbmV4dHRidHQgZm9yd2FyZCB0byByZWZsZWN0IHRoZSBjdXJyZW50IFRTRiAqLworCisJbmV4dHRidHQgPSBUU0ZfVE9fVFUoc2MtPmJlYWNvbi5iY190c3RhbXAgPj4gMzIsIHNjLT5iZWFjb24uYmNfdHN0YW1wKTsKKwlpZiAobmV4dHRidHQgPT0gMCkKKyAgICAgICAgICAgICAgICBuZXh0dGJ0dCA9IGludHZhbDsKKyAgICAgICAgZWxzZSBpZiAoaW50dmFsKQorICAgICAgICAgICAgICAgIG5leHR0YnR0ID0gcm91bmR1cChuZXh0dGJ0dCwgaW50dmFsKTsKKworCXRzZiA9IGF0aDlrX2h3X2dldHRzZjY0KHNjLT5zY19haCk7CisJdHNmdHUgPSBUU0ZfVE9fVFUoKHUzMikodHNmPj4zMiksICh1MzIpdHNmKSArIEZVREdFOworCWRvIHsKKwkJbmV4dHRidHQgKz0gaW50dmFsOworCX0gd2hpbGUgKG5leHR0YnR0IDwgdHNmdHUpOworCisJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCisJCSJJQlNTIG5leHR0YnR0ICV1IGludHZhbCAldSAoJXUpXG4iLAorCQluZXh0dGJ0dCwgaW50dmFsLCBjb25mLT5iZWFjb25faW50ZXJ2YWwpOworCisJLyoKKwkgKiBJbiBJQlNTIG1vZGUgZW5hYmxlIHRoZSBiZWFjb24gdGltZXJzIGJ1dCBvbmx5IGVuYWJsZSBTV0JBIGludGVycnVwdHMKKwkgKiBpZiB3ZSBuZWVkIHRvIG1hbnVhbGx5IHByZXBhcmUgYmVhY29uIGZyYW1lcy4gIE90aGVyd2lzZSB3ZSB1c2UgYQorCSAqIHNlbGYtbGlua2VkIHR4IGRlc2NyaXB0b3IgYW5kIGxldCB0aGUgaGFyZHdhcmUgZGVhbCB3aXRoIHRoaW5ncy4KKwkgKi8KKwlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKKwkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9TV0JBOworCisJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKKworCS8qIFNldCB0aGUgY29tcHV0ZWQgQURIT0MgYmVhY29uIHRpbWVycyAqLworCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKKwlhdGg5a19od19iZWFjb25pbml0KHNjLT5zY19haCwgbmV4dHRidHQsIGludHZhbCk7CisJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7CisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+aW1hc2spOworCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1ZFT0wpCisJCWF0aF9iZWFjb25fc3RhcnRfYWRob2Moc2MsIHZpZik7Cit9CisKK3ZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIGNvbmY7CisKKwkvKiBTZXR1cCB0aGUgYmVhY29uIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLworCisJbWVtc2V0KCZjb25mLCAwLCBzaXplb2Yoc3RydWN0IGF0aF9iZWFjb25fY29uZmlnKSk7CiAJY29uZi5iZWFjb25faW50ZXJ2YWwgPSBzYy0+aHctPmNvbmYuYmVhY29uX2ludCA/CiAJCXNjLT5ody0+Y29uZi5iZWFjb25faW50IDogQVRIX0RFRkFVTFRfQklOVFZBTDsKIAljb25mLmxpc3Rlbl9pbnRlcnZhbCA9IDE7CkBAIC02NDMsMjEyICs3MjEsMjYgQEAKIAljb25mLmR0aW1fY291bnQgPSAxOwogCWNvbmYuYm1pc3NfdGltZW91dCA9IEFUSF9ERUZBVUxUX0JNSVNTX0xJTUlUICogY29uZi5iZWFjb25faW50ZXJ2YWw7CiAKLQkvKiBleHRyYWN0IHRzdGFtcCBmcm9tIGxhc3QgYmVhY29uIGFuZCBjb252ZXJ0IHRvIFRVICovCi0JbmV4dHRidHQgPSBUU0ZfVE9fVFUoc2MtPmJlYWNvbi5iY190c3RhbXAgPj4gMzIsIHNjLT5iZWFjb24uYmNfdHN0YW1wKTsKKwlpZiAodmlmKSB7CisJCXN0cnVjdCBhdGhfdmlmICphdnAgPSAoc3RydWN0IGF0aF92aWYgKil2aWYtPmRydl9wcml2OwogCi0JLyogWFhYIGNvbmRpdGlvbmFsaXplIG11bHRpLWJzcyBzdXBwb3J0PyAqLwotCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgewotCQkvKgotCQkgKiBGb3IgbXVsdGktYnNzIGFwIHN1cHBvcnQgYmVhY29ucyBhcmUgZWl0aGVyIHN0YWdnZXJlZAotCQkgKiBldmVubHkgb3ZlciBOIHNsb3RzIG9yIGJ1cnN0IHRvZ2V0aGVyLiAgRm9yIHRoZSBmb3JtZXIKLQkJICogYXJyYW5nZSBmb3IgdGhlIFNXQkEgdG8gYmUgZGVsaXZlcmVkIGZvciBlYWNoIHNsb3QuCi0JCSAqIFNsb3RzIHRoYXQgYXJlIG5vdCBvY2N1cGllZCB3aWxsIGdlbmVyYXRlIG5vdGhpbmcuCi0JCSAqLwotCQkvKiBOQjogdGhlIGJlYWNvbiBpbnRlcnZhbCBpcyBrZXB0IGludGVybmFsbHkgaW4gVFUncyAqLwotCQlpbnR2YWwgPSBjb25mLmJlYWNvbl9pbnRlcnZhbCAmIEFUSDlLX0JFQUNPTl9QRVJJT0Q7Ci0JCWludHZhbCAvPSBBVEhfQkNCVUY7ICAgIC8qIGZvciBzdGFnZ2VyZWQgYmVhY29ucyAqLwotCX0gZWxzZSB7Ci0JCWludHZhbCA9IGNvbmYuYmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKLQl9Ci0KLQlpZiAobmV4dHRidHQgPT0gMCkJLyogZS5nLiBmb3IgYXAgbW9kZSAqLwotCQluZXh0dGJ0dCA9IGludHZhbDsKLQllbHNlIGlmIChpbnR2YWwpCS8qIE5COiBjYW4gYmUgMCBmb3IgbW9uaXRvciBtb2RlICovCi0JCW5leHR0YnR0ID0gcm91bmR1cChuZXh0dGJ0dCwgaW50dmFsKTsKLQotCURQUklOVEYoc2MsIEFUSF9EQkdfQkVBQ09OLCAibmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCi0JCW5leHR0YnR0LCBpbnR2YWwsIGNvbmYuYmVhY29uX2ludGVydmFsKTsKLQotCS8qIENoZWNrIGZvciBOTDgwMjExX0lGVFlQRV9BUCBhbmQgc2Nfbm9zdGFiZWFjb25zIGZvciBXRFMgY2xpZW50ICovCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSBiczsKLQkJdTY0IHRzZjsKLQkJdTMyIHRzZnR1OwotCQlpbnQgZHRpbXBlcmlvZCwgZHRpbWNvdW50LCBzbGVlcGR1cmF0aW9uOwotCQlpbnQgY2ZwcGVyaW9kLCBjZnBjb3VudDsKLQotCQkvKgotCQkgKiBTZXR1cCBkdGltIGFuZCBjZnAgcGFyYW1ldGVycyBhY2NvcmRpbmcgdG8KLQkJICogbGFzdCBiZWFjb24gd2UgcmVjZWl2ZWQgKHdoaWNoIG1heSBiZSBub25lKS4KLQkJICovCi0JCWR0aW1wZXJpb2QgPSBjb25mLmR0aW1fcGVyaW9kOwotCQlpZiAoZHRpbXBlcmlvZCA8PSAwKQkJLyogTkI6IDAgaWYgbm90IGtub3duICovCi0JCQlkdGltcGVyaW9kID0gMTsKLQkJZHRpbWNvdW50ID0gY29uZi5kdGltX2NvdW50OwotCQlpZiAoZHRpbWNvdW50ID49IGR0aW1wZXJpb2QpCS8qIE5COiBzYW5pdHkgY2hlY2sgKi8KLQkJCWR0aW1jb3VudCA9IDA7Ci0JCWNmcHBlcmlvZCA9IDE7CQkJLyogTkI6IG5vIFBDRiBzdXBwb3J0IHlldCAqLwotCQljZnBjb3VudCA9IDA7Ci0KLQkJc2xlZXBkdXJhdGlvbiA9IGNvbmYubGlzdGVuX2ludGVydmFsICogaW50dmFsOwotCQlpZiAoc2xlZXBkdXJhdGlvbiA8PSAwKQotCQkJc2xlZXBkdXJhdGlvbiA9IGludHZhbDsKLQotI2RlZmluZSBGVURHRSAyCi0JCS8qCi0JCSAqIFB1bGwgbmV4dHRidHQgZm9yd2FyZCB0byByZWZsZWN0IHRoZSBjdXJyZW50Ci0JCSAqIFRTRiBhbmQgY2FsY3VsYXRlIGR0aW0rY2ZwIHN0YXRlIGZvciB0aGUgcmVzdWx0LgotCQkgKi8KLQkJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCQl0c2Z0dSA9IFRTRl9UT19UVSh0c2Y+PjMyLCB0c2YpICsgRlVER0U7Ci0JCWRvIHsKLQkJCW5leHR0YnR0ICs9IGludHZhbDsKLQkJCWlmICgtLWR0aW1jb3VudCA8IDApIHsKLQkJCQlkdGltY291bnQgPSBkdGltcGVyaW9kIC0gMTsKLQkJCQlpZiAoLS1jZnBjb3VudCA8IDApCi0JCQkJCWNmcGNvdW50ID0gY2ZwcGVyaW9kIC0gMTsKLQkJCX0KLQkJfSB3aGlsZSAobmV4dHRidHQgPCB0c2Z0dSk7Ci0jdW5kZWYgRlVER0UKLQkJbWVtc2V0KCZicywgMCwgc2l6ZW9mKGJzKSk7Ci0JCWJzLmJzX2ludHZhbCA9IGludHZhbDsKLQkJYnMuYnNfbmV4dHRidHQgPSBuZXh0dGJ0dDsKLQkJYnMuYnNfZHRpbXBlcmlvZCA9IGR0aW1wZXJpb2QqaW50dmFsOwotCQlicy5ic19uZXh0ZHRpbSA9IGJzLmJzX25leHR0YnR0ICsgZHRpbWNvdW50KmludHZhbDsKLQkJYnMuYnNfY2ZwcGVyaW9kID0gY2ZwcGVyaW9kKmJzLmJzX2R0aW1wZXJpb2Q7Ci0JCWJzLmJzX2NmcG5leHQgPSBicy5ic19uZXh0ZHRpbSArIGNmcGNvdW50KmJzLmJzX2R0aW1wZXJpb2Q7Ci0JCWJzLmJzX2NmcG1heGR1cmF0aW9uID0gMDsKLQotCQkvKgotCQkgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjb25zZWN1dGl2ZSBiZWFjb25zIHRvIG1pc3MKLQkJICogYmVmb3JlIHRha2luZyBhIEJNSVNTIGludGVycnVwdC4gIFRoZSBjb25maWd1cmF0aW9uCi0JCSAqIGlzIHNwZWNpZmllZCBpbiBUVSBzbyB3ZSBvbmx5IG5lZWQgY2FsY3VsYXRlIGJhc2VkCi0JCSAqIG9uIHRoZSBiZWFjb24gaW50ZXJ2YWwuICBOb3RlIHRoYXQgd2UgY2xhbXAgdGhlCi0JCSAqIHJlc3VsdCB0byBhdCBtb3N0IDE1IGJlYWNvbnMuCi0JCSAqLwotCQlpZiAoc2xlZXBkdXJhdGlvbiA+IGludHZhbCkgewotCQkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPSBjb25mLmxpc3Rlbl9pbnRlcnZhbCAqCi0JCQkJQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgLyAyOwotCQl9IGVsc2UgewotCQkJYnMuYnNfYm1pc3N0aHJlc2hvbGQgPQotCQkJCURJVl9ST1VORF9VUChjb25mLmJtaXNzX3RpbWVvdXQsIGludHZhbCk7Ci0JCQlpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPiAxNSkKLQkJCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IDE1OwotCQkJZWxzZSBpZiAoYnMuYnNfYm1pc3N0aHJlc2hvbGQgPD0gMCkKLQkJCQlicy5ic19ibWlzc3RocmVzaG9sZCA9IDE7CisJCXN3aXRjaChhdnAtPmF2X29wbW9kZSkgeworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkJYXRoX2JlYWNvbl9jb25maWdfYXAoc2MsICZjb25mLCBhdnApOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJCWF0aF9iZWFjb25fY29uZmlnX2FkaG9jKHNjLCAmY29uZiwgYXZwLCB2aWYpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCWF0aF9iZWFjb25fY29uZmlnX3N0YShzYywgJmNvbmYsIGF2cCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAorCQkJCSJVbnN1cHBvcnRlZCBiZWFjb25pbmcgbW9kZVxuIik7CisJCQlyZXR1cm47CiAJCX0KIAotCQkvKgotCQkgKiBDYWxjdWxhdGUgc2xlZXAgZHVyYXRpb24uICBUaGUgY29uZmlndXJhdGlvbiBpcwotCQkgKiBnaXZlbiBpbiBtcy4gIFdlIGluc3VyZSBhIG11bHRpcGxlIG9mIHRoZSBiZWFjb24KLQkJICogcGVyaW9kIGlzIHVzZWQuICBBbHNvLCBpZiB0aGUgc2xlZXAgZHVyYXRpb24gaXMKLQkJICogZ3JlYXRlciB0aGFuIHRoZSBEVElNIHBlcmlvZCB0aGVuIGl0IG1ha2VzIHNlbnNlcwotCQkgKiB0byBtYWtlIGl0IGEgbXVsdGlwbGUgb2YgdGhhdC4KLQkJICoKLQkJICogWFhYIGZpeGVkIGF0IDEwMG1zCi0JCSAqLwotCi0JCWJzLmJzX3NsZWVwZHVyYXRpb24gPSByb3VuZHVwKElFRUU4MDIxMV9NU19UT19UVSgxMDApLAotCQkJCQkgICAgICBzbGVlcGR1cmF0aW9uKTsKLQkJaWYgKGJzLmJzX3NsZWVwZHVyYXRpb24gPiBicy5ic19kdGltcGVyaW9kKQotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiA9IGJzLmJzX2R0aW1wZXJpb2Q7Ci0KLQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkidHNmICVsbHUgIgotCQkJInRzZjp0dSAldSAiCi0JCQkiaW50dmFsICV1ICIKLQkJCSJuZXh0dGJ0dCAldSAiCi0JCQkiZHRpbSAldSAiCi0JCQkibmV4dGR0aW0gJXUgIgotCQkJImJtaXNzICV1ICIKLQkJCSJzbGVlcCAldSAiCi0JCQkiY2ZwOnBlcmlvZCAldSAiCi0JCQkibWF4ZHVyICV1ICIKLQkJCSJuZXh0ICV1ICIKLQkJCSJ0aW1vZmZzZXQgJXVcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXRzZiwgdHNmdHUsCi0JCQlicy5ic19pbnR2YWwsCi0JCQlicy5ic19uZXh0dGJ0dCwKLQkJCWJzLmJzX2R0aW1wZXJpb2QsCi0JCQlicy5ic19uZXh0ZHRpbSwKLQkJCWJzLmJzX2JtaXNzdGhyZXNob2xkLAotCQkJYnMuYnNfc2xlZXBkdXJhdGlvbiwKLQkJCWJzLmJzX2NmcHBlcmlvZCwKLQkJCWJzLmJzX2NmcG1heGR1cmF0aW9uLAotCQkJYnMuYnNfY2ZwbmV4dCwKLQkJCWJzLmJzX3RpbW9mZnNldAotCQkJKTsKLQotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWF0aDlrX2h3X3NldF9zdGFfYmVhY29uX3RpbWVycyhhaCwgJmJzKTsKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9CTUlTUzsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5zY19pbWFzayk7Ci0JfSBlbHNlIHsKLQkJdTY0IHRzZjsKLQkJdTMyIHRzZnR1OwotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7Ci0JCWlmIChuZXh0dGJ0dCA9PSBpbnR2YWwpCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCQkvKgotCQkJICogUHVsbCBuZXh0dGJ0dCBmb3J3YXJkIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQKLQkJCSAqIFRTRgotCQkJICovCi0jZGVmaW5lIEZVREdFIDIKLQkJCWlmICghKGludHZhbCAmIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YpKSB7Ci0JCQkJdHNmID0gYXRoOWtfaHdfZ2V0dHNmNjQoYWgpOwotCQkJCXRzZnR1ID0gVFNGX1RPX1RVKCh1MzIpKHRzZj4+MzIpLAotCQkJCQkodTMyKXRzZikgKyBGVURHRTsKLQkJCQlkbyB7Ci0JCQkJCW5leHR0YnR0ICs9IGludHZhbDsKLQkJCQl9IHdoaWxlIChuZXh0dGJ0dCA8IHRzZnR1KTsKLQkJCX0KLSN1bmRlZiBGVURHRQotCQkJRFBSSU5URihzYywgQVRIX0RCR19CRUFDT04sCi0JCQkJIklCU1MgbmV4dHRidHQgJXUgaW50dmFsICV1ICgldSlcbiIsCi0JCQkJbmV4dHRidHQsCi0JCQkJaW50dmFsICYgfkFUSDlLX0JFQUNPTl9SRVNFVF9UU0YsCi0JCQkJY29uZi5iZWFjb25faW50ZXJ2YWwpOwotCi0JCQkvKgotCQkJICogSW4gSUJTUyBtb2RlIGVuYWJsZSB0aGUgYmVhY29uIHRpbWVycyBidXQgb25seQotCQkJICogZW5hYmxlIFNXQkEgaW50ZXJydXB0cyBpZiB3ZSBuZWVkIHRvIG1hbnVhbGx5Ci0JCQkgKiBwcmVwYXJlIGJlYWNvbiBmcmFtZXMuICBPdGhlcndpc2Ugd2UgdXNlIGEKLQkJCSAqIHNlbGYtbGlua2VkIHR4IGRlc2NyaXB0b3IgYW5kIGxldCB0aGUgaGFyZHdhcmUKLQkJCSAqIGRlYWwgd2l0aCB0aGluZ3MuCi0JCQkgKi8KLQkJCWludHZhbCB8PSBBVEg5S19CRUFDT05fRU5BOwotCQkJaWYgKCEoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCQlzYy0+c2NfaW1hc2sgfD0gQVRIOUtfSU5UX1NXQkE7Ci0JCQlhdGhfYmVhY29ucV9jb25maWcoc2MpOwotCQl9IGVsc2UgaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCQkvKgotCQkJICogSW4gQVAgbW9kZSB3ZSBlbmFibGUgdGhlIGJlYWNvbiB0aW1lcnMgYW5kCi0JCQkgKiBTV0JBIGludGVycnVwdHMgdG8gcHJlcGFyZSBiZWFjb24gZnJhbWVzLgotCQkJICovCi0JCQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX0VOQTsKLQkJCXNjLT5zY19pbWFzayB8PSBBVEg5S19JTlRfU1dCQTsgICAvKiBiZWFjb24gcHJlcGFyZSAqLwotCQkJYXRoX2JlYWNvbnFfY29uZmlnKHNjKTsKLQkJfQotCQlhdGg5a19od19iZWFjb25pbml0KGFoLCBuZXh0dGJ0dCwgaW50dmFsKTsKLQkJc2MtPmJlYWNvbi5ibWlzc2NudCA9IDA7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOwotCQkvKgotCQkgKiBXaGVuIHVzaW5nIGEgc2VsZi1saW5rZWQgYmVhY29uIGRlc2NyaXB0b3IgaW4KLQkJICogaWJzcyBtb2RlIGxvYWQgaXQgb25jZSBoZXJlLgotCQkgKi8KLQkJaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JCSAgICAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9WRU9MKSkKLQkJCWF0aF9iZWFjb25fc3RhcnRfYWRob2Moc2MsIDApOworCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OUzsKIAl9CiB9Ci0KLXZvaWQgYXRoX2JlYWNvbl9zeW5jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpCi17Ci0JLyoKLQkgKiBSZXN5bmMgYmVhY29uIHRpbWVycyB1c2luZyB0aGUgdHNmIG9mIHRoZQotCSAqIGJlYWNvbiBmcmFtZSB3ZSBqdXN0IHJlY2VpdmVkLgotCSAqLwotCWF0aF9iZWFjb25fY29uZmlnKHNjLCBpZl9pZCk7Ci0Jc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0JFQUNPTlM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuYwppbmRleCAzYzc0NTRmLi5lMmQ2MmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNCwxMiArMTQsNyBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCi0KLXN0YXRpYyBjb25zdCBpbnQxNl90IE5PSVNFX0ZMT09SW10gPSB7IC05NiwgLTkzLCAtOTgsIC05NiwgLTkzLCAtOTYgfTsKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAvKiBXZSBjYW4gdHVuZSB0aGlzIGFzIHdlIGdvIGJ5IG1vbml0b3JpbmcgcmVhbGx5IGxvdyB2YWx1ZXMgKi8KICNkZWZpbmUgQVRIOUtfTkZfVE9PX0xPVwktNjAKQEAgLTI4LDcgKzIzLDcgQEAKICAqIGlzIGluY29ycmVjdCBhbmQgd2Ugc2hvdWxkIHVzZSB0aGUgc3RhdGljIE5GIHZhbHVlLiBMYXRlciB3ZSBjYW4gdHJ5IHRvCiAgKiBmaW5kIG91dCB3aHkgdGhleSBhcmUgcmVwb3J0aW5nIHRoZXNlIHZhbHVlcyAqLwogCi1zdGF0aWMgYm9vbCBhdGg5a19od19uZl9pbl9yYW5nZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHMxNiBuZikKK3N0YXRpYyBib29sIGF0aDlrX2h3X25mX2luX3JhbmdlKHN0cnVjdCBhdGhfaHcgKmFoLCBzMTYgbmYpCiB7CiAJaWYgKG5mID4gQVRIOUtfTkZfVE9PX0xPVykgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCkBAIC05MSw3ICs4Niw3IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19kb19nZXRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19kb19nZXRuZihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIGludDE2X3QgbmZhcnJheVtOVU1fTkZfUkVBRElOR1NdKQogewogCWludDE2X3QgbmY7CkBAIC0xMDcsMjcgKzEwMiwyOSBAQAogCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMF0gaXMgJWRcbiIsIG5mKTsKIAluZmFycmF5WzBdID0gbmY7CiAKLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9DQ0EpLAotCQkJQVI5MjgwX1BIWV9DSDFfTUlOQ0NBX1BXUik7Ci0JZWxzZQotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0NDQSksCi0JCQlBUl9QSFlfQ0gxX01JTkNDQV9QV1IpOworCWlmICghQVJfU1JFVl85Mjg1KGFoKSkgeworCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfQ0NBKSwKKwkJCQkJQVI5MjgwX1BIWV9DSDFfTUlOQ0NBX1BXUik7CisJCWVsc2UKKwkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfQ0NBKSwKKwkJCQkJQVJfUEhZX0NIMV9NSU5DQ0FfUFdSKTsKIAotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKLQluZmFycmF5WzFdID0gbmY7Ci0KLQlpZiAoIUFSX1NSRVZfOTI4MChhaCkpIHsKLQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9DQ0EpLAotCQkJQVJfUEhZX0NIMl9NSU5DQ0FfUFdSKTsKIAkJaWYgKG5mICYgMHgxMDApCiAJCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCSJORiBjYWxpYnJhdGVkIFtjdGxdIFtjaGFpbiAyXSBpcyAlZFxuIiwgbmYpOwotCQluZmFycmF5WzJdID0gbmY7CisJCQkJIk5GIGNhbGlicmF0ZWQgW2N0bF0gW2NoYWluIDFdIGlzICVkXG4iLCBuZik7CisJCW5mYXJyYXlbMV0gPSBuZjsKKworCQlpZiAoIUFSX1NSRVZfOTI4MChhaCkpIHsKKwkJCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDJfQ0NBKSwKKwkJCQkJQVJfUEhZX0NIMl9NSU5DQ0FfUFdSKTsKKwkJCWlmIChuZiAmIDB4MTAwKQorCQkJCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKKwkJCQkiTkYgY2FsaWJyYXRlZCBbY3RsXSBbY2hhaW4gMl0gaXMgJWRcbiIsIG5mKTsKKwkJCW5mYXJyYXlbMl0gPSBuZjsKKwkJfQogCX0KIAogCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQpAQCAtMTQzLDU4ICsxNDAsNTIgQEAKIAkJIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDBdIGlzICVkXG4iLCBuZik7CiAJbmZhcnJheVszXSA9IG5mOwogCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCW5mID0gTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9DSDFfRVhUX0NDQSksCi0JCQlBUjkyODBfUEhZX0NIMV9FWFRfTUlOQ0NBX1BXUik7Ci0JZWxzZQotCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLAotCQkJQVJfUEhZX0NIMV9FWFRfTUlOQ0NBX1BXUik7CisJaWYgKCFBUl9TUkVWXzkyODUoYWgpKSB7CisJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMV9FWFRfQ0NBKSwKKwkJCQkJQVI5MjgwX1BIWV9DSDFfRVhUX01JTkNDQV9QV1IpOworCQllbHNlCisJCQluZiA9IE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfQ0gxX0VYVF9DQ0EpLAorCQkJCQlBUl9QSFlfQ0gxX0VYVF9NSU5DQ0FfUFdSKTsKIAotCWlmIChuZiAmIDB4MTAwKQotCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7Ci0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKLQluZmFycmF5WzRdID0gbmY7Ci0KLQlpZiAoIUFSX1NSRVZfOTI4MChhaCkpIHsKLQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9FWFRfQ0NBKSwKLQkJCUFSX1BIWV9DSDJfRVhUX01JTkNDQV9QV1IpOwogCQlpZiAobmYgJiAweDEwMCkKIAkJCW5mID0gMCAtICgobmYgXiAweDFmZikgKyAxKTsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDJdIGlzICVkXG4iLCBuZik7Ci0JCW5mYXJyYXlbNV0gPSBuZjsKKwkJCQkiTkYgY2FsaWJyYXRlZCBbZXh0XSBbY2hhaW4gMV0gaXMgJWRcbiIsIG5mKTsKKwkJbmZhcnJheVs0XSA9IG5mOworCisJCWlmICghQVJfU1JFVl85MjgwKGFoKSkgeworCQkJbmYgPSBNUyhSRUdfUkVBRChhaCwgQVJfUEhZX0NIMl9FWFRfQ0NBKSwKKwkJCQkJQVJfUEhZX0NIMl9FWFRfTUlOQ0NBX1BXUik7CisJCQlpZiAobmYgJiAweDEwMCkKKwkJCQluZiA9IDAgLSAoKG5mIF4gMHgxZmYpICsgMSk7CisJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCisJCQkJIk5GIGNhbGlicmF0ZWQgW2V4dF0gW2NoYWluIDJdIGlzICVkXG4iLCBuZik7CisJCQluZmFycmF5WzVdID0gbmY7CisJCX0KIAl9CiB9CiAKLXN0YXRpYyBib29sIGdldE5vaXNlRmxvb3JUaHJlc2goc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCWNvbnN0IHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorc3RhdGljIGJvb2wgZ2V0Tm9pc2VGbG9vclRocmVzaChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkJaW50MTZfdCAqbmZ0KQogewotCXN3aXRjaCAoY2hhbi0+Y2hhbm1vZGUpIHsKLQljYXNlIENIQU5ORUxfQToKLQljYXNlIENIQU5ORUxfQV9IVDIwOgotCWNhc2UgQ0hBTk5FTF9BX0hUNDBQTFVTOgotCWNhc2UgQ0hBTk5FTF9BX0hUNDBNSU5VUzoKLQkJKm5mdCA9IChpbnQ4X3QpYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX05GVEhSRVNIXzUpOworCXN3aXRjaCAoYmFuZCkgeworCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJKm5mdCA9IChpbnQ4X3QpYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9ORlRIUkVTSF81KTsKIAkJYnJlYWs7Ci0JY2FzZSBDSEFOTkVMX0I6Ci0JY2FzZSBDSEFOTkVMX0c6Ci0JY2FzZSBDSEFOTkVMX0dfSFQyMDoKLQljYXNlIENIQU5ORUxfR19IVDQwUExVUzoKLQljYXNlIENIQU5ORUxfR19IVDQwTUlOVVM6Ci0JCSpuZnQgPSAoaW50OF90KWF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9ORlRIUkVTSF8yKTsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCSpuZnQgPSAoaW50OF90KWFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfTkZUSFJFU0hfMik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NIQU5ORUwsCi0JCQkiaW52YWxpZCBjaGFubmVsIGZsYWdzIDB4JXhcbiIsIGNoYW4tPmNoYW5uZWxGbGFncyk7CisJCUJVR19PTigxKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXR1cF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXR1cF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgICAgc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCkKIHsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVElNSU5HX0NUUkw0KDApLApAQCAtMjI4LDEwICsyMTksOSBAQAogCQkgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9ET19DQUwpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgICAgc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJYXRoOWtfaHdfc2V0dXBfY2FsaWJyYXRpb24oYWgsIGN1cnJDYWwpOwpAQCAtMjM5LDIzICsyMjksMjEgQEAKIAljdXJyQ2FsLT5jYWxTdGF0ZSA9IENBTF9SVU5OSU5HOwogCiAJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJYWhwLT5haF9NZWFzMC5zaWduW2ldID0gMDsKLQkJYWhwLT5haF9NZWFzMS5zaWduW2ldID0gMDsKLQkJYWhwLT5haF9NZWFzMi5zaWduW2ldID0gMDsKLQkJYWhwLT5haF9NZWFzMy5zaWduW2ldID0gMDsKKwkJYWgtPm1lYXMwLnNpZ25baV0gPSAwOworCQlhaC0+bWVhczEuc2lnbltpXSA9IDA7CisJCWFoLT5tZWFzMi5zaWduW2ldID0gMDsKKwkJYWgtPm1lYXMzLnNpZ25baV0gPSAwOwogCX0KIAotCWFocC0+YWhfQ2FsU2FtcGxlcyA9IDA7CisJYWgtPmNhbF9zYW1wbGVzID0gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfcGVyX2NhbGlicmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3Blcl9jYWxpYnJhdGlvbihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiwKIAkJCQkgICAgIHU4IHJ4Y2hhaW5tYXNrLAogCQkJCSAgICAgc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCwKIAkJCQkgICAgIGJvb2wgKmlzQ2FsRG9uZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJKmlzQ2FsRG9uZSA9IGZhbHNlOwogCiAJaWYgKGN1cnJDYWwtPmNhbFN0YXRlID09IENBTF9SVU5OSU5HKSB7CkBAIC0yNjMsOSArMjUxLDkgQEAKIAkJICAgICAgQVJfUEhZX1RJTUlOR19DVFJMNF9ET19DQUwpKSB7CiAKIAkJCWN1cnJDYWwtPmNhbERhdGEtPmNhbENvbGxlY3QoYWgpOwotCQkJYWhwLT5haF9DYWxTYW1wbGVzKys7CisJCQlhaC0+Y2FsX3NhbXBsZXMrKzsKIAotCQkJaWYgKGFocC0+YWhfQ2FsU2FtcGxlcyA+PSBjdXJyQ2FsLT5jYWxEYXRhLT5jYWxOdW1TYW1wbGVzKSB7CisJCQlpZiAoYWgtPmNhbF9zYW1wbGVzID49IGN1cnJDYWwtPmNhbERhdGEtPmNhbE51bVNhbXBsZXMpIHsKIAkJCQlpbnQgaSwgbnVtQ2hhaW5zID0gMDsKIAkJCQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewogCQkJCQlpZiAocnhjaGFpbm1hc2sgJiAoMSA8PCBpKSkKQEAgLTI4NSwxMTMgKzI3MywxMDUgQEAKIAl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2lzY2FsX3N1cHBvcnRlZChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKy8qIEFzc3VtZXMgeW91IGFyZSB0YWxraW5nIGFib3V0IHRoZSBjdXJyZW50bHkgY29uZmlndXJlZCBjaGFubmVsICovCitzdGF0aWMgYm9vbCBhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgICBlbnVtIGhhbF9jYWxfdHlwZXMgY2FsVHlwZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCWJvb2wgcmV0dmFsID0gZmFsc2U7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CiAKLQlzd2l0Y2ggKGNhbFR5cGUgJiBhaHAtPmFoX3N1cHBDYWxzKSB7Ci0JY2FzZSBJUV9NSVNNQVRDSF9DQUw6Ci0JCWlmICghSVNfQ0hBTl9CKGNoYW4pKQotCQkJcmV0dmFsID0gdHJ1ZTsKLQkJYnJlYWs7CisJc3dpdGNoIChjYWxUeXBlICYgYWgtPnN1cHBfY2FscykgeworCWNhc2UgSVFfTUlTTUFUQ0hfQ0FMOiAvKiBCb3RoIDIgR0h6IGFuZCA1IEdIeiBzdXBwb3J0IE9GRE0gKi8KKwkJcmV0dXJuIHRydWU7CiAJY2FzZSBBRENfR0FJTl9DQUw6CiAJY2FzZSBBRENfRENfQ0FMOgotCQlpZiAoIUlTX0NIQU5fQihjaGFuKQotCQkgICAgJiYgIShJU19DSEFOXzJHSFooY2hhbikgJiYgSVNfQ0hBTl9IVDIwKGNoYW4pKSkKLQkJCXJldHZhbCA9IHRydWU7CisJCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFogJiYKKwkJICBjb25mX2lzX2h0MjAoY29uZikpCisJCQlyZXR1cm4gdHJ1ZTsKIAkJYnJlYWs7CiAJfQotCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2lxY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaXFjYWxfY29sbGVjdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJYWhwLT5haF90b3RhbFBvd2VyTWVhc0lbaV0gKz0KKwkJYWgtPnRvdGFsUG93ZXJNZWFzSVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18wKGkpKTsKLQkJYWhwLT5haF90b3RhbFBvd2VyTWVhc1FbaV0gKz0KKwkJYWgtPnRvdGFsUG93ZXJNZWFzUVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18xKGkpKTsKLQkJYWhwLT5haF90b3RhbElxQ29yck1lYXNbaV0gKz0KKwkJYWgtPnRvdGFsSXFDb3JyTWVhc1tpXSArPQogCQkJKGludDMyX3QpIFJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMihpKSk7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSIlZDogQ2huICVkIHBtaT0weCUwOHg7cG1xPTB4JTA4eDtpcWNtPTB4JTA4eDtcbiIsCi0JCQlhaHAtPmFoX0NhbFNhbXBsZXMsIGksIGFocC0+YWhfdG90YWxQb3dlck1lYXNJW2ldLAotCQkJYWhwLT5haF90b3RhbFBvd2VyTWVhc1FbaV0sCi0JCQlhaHAtPmFoX3RvdGFsSXFDb3JyTWVhc1tpXSk7CisJCQlhaC0+Y2FsX3NhbXBsZXMsIGksIGFoLT50b3RhbFBvd2VyTWVhc0lbaV0sCisJCQlhaC0+dG90YWxQb3dlck1lYXNRW2ldLAorCQkJYWgtPnRvdGFsSXFDb3JyTWVhc1tpXSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZ2FpbmNhbF9jb2xsZWN0KHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19nYWluY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWFocC0+YWhfdG90YWxBZGNJT2RkUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjSU9kZFBoYXNlW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzAoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjSUV2ZW5QaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNJRXZlblBoYXNlW2ldICs9CiAJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzEoaSkpOwotCQlhaHAtPmFoX3RvdGFsQWRjUU9kZFBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY1FPZGRQaGFzZVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18yKGkpKTsKLQkJYWhwLT5haF90b3RhbEFkY1FFdmVuUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjUUV2ZW5QaGFzZVtpXSArPQogCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18zKGkpKTsKIAogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCiAJCQkiJWQ6IENobiAlZCBvZGRpPTB4JTA4eDsgZXZlbmk9MHglMDh4OyAiCiAJCQkib2RkcT0weCUwOHg7IGV2ZW5xPTB4JTA4eDtcbiIsCi0JCQlhaHAtPmFoX0NhbFNhbXBsZXMsIGksCi0JCQlhaHAtPmFoX3RvdGFsQWRjSU9kZFBoYXNlW2ldLAotCQkJYWhwLT5haF90b3RhbEFkY0lFdmVuUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjUU9kZFBoYXNlW2ldLAotCQkJYWhwLT5haF90b3RhbEFkY1FFdmVuUGhhc2VbaV0pOworCQkJYWgtPmNhbF9zYW1wbGVzLCBpLAorCQkJYWgtPnRvdGFsQWRjSU9kZFBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjSUV2ZW5QaGFzZVtpXSwKKwkJCWFoLT50b3RhbEFkY1FPZGRQaGFzZVtpXSwKKwkJCWFoLT50b3RhbEFkY1FFdmVuUGhhc2VbaV0pOwogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfYWRjX2RjY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfYWRjX2RjY2FsX2NvbGxlY3Qoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXSArPQogCQkJKGludDMyX3QpIFJFR19SRUFEKGFoLCBBUl9QSFlfQ0FMX01FQVNfMChpKSk7Ci0JCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElFdmVuUGhhc2VbaV0gKz0KKwkJYWgtPnRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlW2ldICs9CiAJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18xKGkpKTsKLQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0UU9kZFBoYXNlW2ldICs9CisJCWFoLT50b3RhbEFkY0RjT2Zmc2V0UU9kZFBoYXNlW2ldICs9CiAJCQkoaW50MzJfdCkgUkVHX1JFQUQoYWgsIEFSX1BIWV9DQUxfTUVBU18yKGkpKTsKLQkJYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZVtpXSArPQorCQlhaC0+dG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV0gKz0KIAkJCShpbnQzMl90KSBSRUdfUkVBRChhaCwgQVJfUEhZX0NBTF9NRUFTXzMoaSkpOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSIlZDogQ2huICVkIG9kZGk9MHglMDh4OyBldmVuaT0weCUwOHg7ICIKIAkJCSJvZGRxPTB4JTA4eDsgZXZlbnE9MHglMDh4O1xuIiwKLQkJCWFocC0+YWhfQ2FsU2FtcGxlcywgaSwKLQkJCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXSwKLQkJCWFocC0+YWhfdG90YWxBZGNEY09mZnNldElFdmVuUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0sCi0JCQlhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRRXZlblBoYXNlW2ldKTsKKwkJCWFoLT5jYWxfc2FtcGxlcywgaSwKKwkJCWFoLT50b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlW2ldLAorCQkJYWgtPnRvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV0sCisJCQlhaC0+dG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV0pOwogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaXFjYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCBudW1DaGFpbnMpCitzdGF0aWMgdm9pZCBhdGg5a19od19pcWNhbGlicmF0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTggbnVtQ2hhaW5zKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJdTMyIHBvd2VyTWVhc1EsIHBvd2VyTWVhc0ksIGlxQ29yck1lYXM7CiAJdTMyIHFDb2ZmRGVub20sIGlDb2ZmRGVub207CiAJaW50MzJfdCBxQ29mZiwgaUNvZmY7CiAJaW50IGlxQ29yck5lZywgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1DaGFpbnM7IGkrKykgewotCQlwb3dlck1lYXNJID0gYWhwLT5haF90b3RhbFBvd2VyTWVhc0lbaV07Ci0JCXBvd2VyTWVhc1EgPSBhaHAtPmFoX3RvdGFsUG93ZXJNZWFzUVtpXTsKLQkJaXFDb3JyTWVhcyA9IGFocC0+YWhfdG90YWxJcUNvcnJNZWFzW2ldOworCQlwb3dlck1lYXNJID0gYWgtPnRvdGFsUG93ZXJNZWFzSVtpXTsKKwkJcG93ZXJNZWFzUSA9IGFoLT50b3RhbFBvd2VyTWVhc1FbaV07CisJCWlxQ29yck1lYXMgPSBhaC0+dG90YWxJcUNvcnJNZWFzW2ldOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJTdGFydGluZyBJUSBDYWwgYW5kIENvcnJlY3Rpb24gZm9yIENoYWluICVkXG4iLApAQCAtMzk5LDcgKzM3OSw3IEBACiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIk9yaWduYWw6IENobiAlZGlxX2NvcnJfbWVhcyA9IDB4JTA4eFxuIiwKLQkJCWksIGFocC0+YWhfdG90YWxJcUNvcnJNZWFzW2ldKTsKKwkJCWksIGFoLT50b3RhbElxQ29yck1lYXNbaV0pOwogCiAJCWlxQ29yck5lZyA9IDA7CiAKQEAgLTQ1NywxNyArNDM3LDE2IEBACiAJCSAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9FTkFCTEUpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZ2FpbmNhbF9jYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCBudW1DaGFpbnMpCitzdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZ2FpbmNhbF9jYWxpYnJhdGUoc3RydWN0IGF0aF9odyAqYWgsIHU4IG51bUNoYWlucykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiBpT2RkTWVhc09mZnNldCwgaUV2ZW5NZWFzT2Zmc2V0LCBxT2RkTWVhc09mZnNldCwgcUV2ZW5NZWFzT2Zmc2V0OwogCXUzMiBxR2Fpbk1pc21hdGNoLCBpR2Fpbk1pc21hdGNoLCB2YWwsIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtQ2hhaW5zOyBpKyspIHsKLQkJaU9kZE1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjSU9kZFBoYXNlW2ldOwotCQlpRXZlbk1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjSUV2ZW5QaGFzZVtpXTsKLQkJcU9kZE1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjUU9kZFBoYXNlW2ldOwotCQlxRXZlbk1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjUUV2ZW5QaGFzZVtpXTsKKwkJaU9kZE1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNJT2RkUGhhc2VbaV07CisJCWlFdmVuTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY0lFdmVuUGhhc2VbaV07CisJCXFPZGRNZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjUU9kZFBoYXNlW2ldOworCQlxRXZlbk1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNRRXZlblBoYXNlW2ldOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJTdGFydGluZyBBREMgR2FpbiBDYWwgZm9yIENoYWluICVkXG4iLCBpKTsKQEAgLTUxNSwyMSArNDk0LDIwIEBACiAJCSAgQVJfUEhZX05FV19BRENfR0FJTl9DT1JSX0VOQUJMRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2FkY19kY2NhbF9jYWxpYnJhdGUoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCBudW1DaGFpbnMpCitzdGF0aWMgdm9pZCBhdGg5a19od19hZGNfZGNjYWxfY2FsaWJyYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCB1OCBudW1DaGFpbnMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAl1MzIgaU9kZE1lYXNPZmZzZXQsIGlFdmVuTWVhc09mZnNldCwgdmFsLCBpOwogCWludDMyX3QgcU9kZE1lYXNPZmZzZXQsIHFFdmVuTWVhc09mZnNldCwgcURjTWlzbWF0Y2gsIGlEY01pc21hdGNoOwogCWNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgKmNhbERhdGEgPQotCQlhaHAtPmFoX2NhbF9saXN0X2N1cnItPmNhbERhdGE7CisJCWFoLT5jYWxfbGlzdF9jdXJyLT5jYWxEYXRhOwogCXUzMiBudW1TYW1wbGVzID0KIAkJKDEgPDwgKGNhbERhdGEtPmNhbENvdW50TWF4ICsgNSkpICogY2FsRGF0YS0+Y2FsTnVtU2FtcGxlczsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1DaGFpbnM7IGkrKykgewotCQlpT2RkTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZVtpXTsKLQkJaUV2ZW5NZWFzT2Zmc2V0ID0gYWhwLT5haF90b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZVtpXTsKLQkJcU9kZE1lYXNPZmZzZXQgPSBhaHAtPmFoX3RvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2VbaV07Ci0JCXFFdmVuTWVhc09mZnNldCA9IGFocC0+YWhfdG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2VbaV07CisJCWlPZGRNZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjRGNPZmZzZXRJT2RkUGhhc2VbaV07CisJCWlFdmVuTWVhc09mZnNldCA9IGFoLT50b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZVtpXTsKKwkJcU9kZE1lYXNPZmZzZXQgPSBhaC0+dG90YWxBZGNEY09mZnNldFFPZGRQaGFzZVtpXTsKKwkJcUV2ZW5NZWFzT2Zmc2V0ID0gYWgtPnRvdGFsQWRjRGNPZmZzZXRRRXZlblBoYXNlW2ldOwogCiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJTdGFydGluZyBBREMgREMgT2Zmc2V0IENhbCBmb3IgQ2hhaW4gJWRcbiIsIGkpOwpAQCAtNTczLDUzICs1NTEsNDIgQEAKIAkJICBBUl9QSFlfTkVXX0FEQ19EQ19PRkZTRVRfQ09SUl9FTkFCTEUpOwogfQogCi12b2lkIGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgICAgIGJvb2wgKmlzQ2FsRG9uZSkKKy8qIFRoaXMgaXMgZG9uZSBmb3IgdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIGNoYW5uZWwgKi8KK2Jvb2wgYXRoOWtfaHdfcmVzZXRfY2FsdmFsaWQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4gPQotCQlhdGg5a19yZWdkX2NoZWNrX2NoYW5uZWwoYWgsIGNoYW4pOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmN1cnJDYWwgPSBhaHAtPmFoX2NhbF9saXN0X2N1cnI7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCA9IGFoLT5jYWxfbGlzdF9jdXJyOwogCi0JKmlzQ2FsRG9uZSA9IHRydWU7CisJaWYgKCFhaC0+Y3VyY2hhbikKKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoIUFSX1NSRVZfOTEwMChhaCkgJiYgIUFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIHRydWU7CiAKIAlpZiAoY3VyckNhbCA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoaWNoYW4gPT0gTlVMTCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkiaW52YWxpZCBjaGFubmVsICV1LzB4JXg7IG5vIG1hcHBpbmdcbiIsCi0JCQljaGFuLT5jaGFubmVsLCBjaGFuLT5jaGFubmVsRmxhZ3MpOwotCQlyZXR1cm47Ci0JfQotCisJCXJldHVybiB0cnVlOwogCiAJaWYgKGN1cnJDYWwtPmNhbFN0YXRlICE9IENBTF9ET05FKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCSJDYWxpYnJhdGlvbiBzdGF0ZSBpbmNvcnJlY3QsICVkXG4iLAogCQkJY3VyckNhbC0+Y2FsU3RhdGUpOwotCQlyZXR1cm47CisJCXJldHVybiB0cnVlOwogCX0KIAotCi0JaWYgKCFhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIGN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGUpKQotCQlyZXR1cm47CisJaWYgKCFhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGUpKQorCQlyZXR1cm4gdHJ1ZTsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJIlJlc2V0dGluZyBDYWwgJWQgc3RhdGUgZm9yIGNoYW5uZWwgJXUvMHgleFxuIiwKLQkJY3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZSwgY2hhbi0+Y2hhbm5lbCwKLQkJY2hhbi0+Y2hhbm5lbEZsYWdzKTsKKwkJIlJlc2V0dGluZyBDYWwgJWQgc3RhdGUgZm9yIGNoYW5uZWwgJXVcbiIsCisJCWN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGUsIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAotCWljaGFuLT5DYWxWYWxpZCAmPSB+Y3VyckNhbC0+Y2FsRGF0YS0+Y2FsVHlwZTsKKwlhaC0+Y3VyY2hhbi0+Q2FsVmFsaWQgJj0gfmN1cnJDYWwtPmNhbERhdGEtPmNhbFR5cGU7CiAJY3VyckNhbC0+Y2FsU3RhdGUgPSBDQUxfV0FJVElORzsKIAotCSppc0NhbERvbmUgPSBmYWxzZTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RhcnRfbmZjYWwoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19zdGFydF9uZmNhbChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAogCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX0VOQUJMRV9ORik7CkBAIC02MjgsNyArNTk1LDcgQEAKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfTkYpOwogfQogCi12b2lkIGF0aDlrX2h3X2xvYWRuZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQordm9pZCBhdGg5a19od19sb2FkbmYoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0ICpoOwogCWludCBpLCBqOwpAQCAtNjQzLDE2ICs2MTAsMTQgQEAKIAl9OwogCXU4IGNoYWlubWFzazsKIAotCWlmIChBUl9TUkVWXzkyODAoYWgpKQorCWlmIChBUl9TUkVWXzkyODUoYWgpKQorCQljaGFpbm1hc2sgPSAweDk7CisJZWxzZSBpZiAoQVJfU1JFVl85MjgwKGFoKSkKIAkJY2hhaW5tYXNrID0gMHgxQjsKIAllbHNlCiAJCWNoYWlubWFzayA9IDB4M0Y7CiAKLSNpZmRlZiBBVEhfTkZfUEVSX0NIQU4KLQloID0gY2hhbi0+bmZDYWxIaXN0OwotI2Vsc2UKIAloID0gYWgtPm5mQ2FsSGlzdDsKLSNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9ORl9SRUFESU5HUzsgaSsrKSB7CiAJCWlmIChjaGFpbm1hc2sgJiAoMSA8PCBpKSkgewpAQCAtNjg2LDE4ICs2NTEsMTMgQEAKIAl9CiB9CiAKLWludDE2X3QgYXRoOWtfaHdfZ2V0bmYoc3RydWN0IGF0aF9oYWwgKmFoLAoraW50MTZfdCBhdGg5a19od19nZXRuZihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCWludDE2X3QgbmYsIG5mVGhyZXNoOwogCWludDE2X3QgbmZhcnJheVtOVU1fTkZfUkVBRElOR1NdID0geyAwIH07CiAJc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgKmg7Ci0JdTggY2hhaW5tYXNrOwotCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkpCi0JCWNoYWlubWFzayA9IDB4MUI7Ci0JZWxzZQotCQljaGFpbm1hc2sgPSAweDNGOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYyA9IGNoYW4tPmNoYW47CiAKIAljaGFuLT5jaGFubmVsRmxhZ3MgJj0gKH5DSEFOTkVMX0NXX0lOVCk7CiAJaWYgKFJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpICYgQVJfUEhZX0FHQ19DT05UUk9MX05GKSB7CkBAIC03MDksNyArNjY5LDcgQEAKIAl9IGVsc2UgewogCQlhdGg5a19od19kb19nZXRuZihhaCwgbmZhcnJheSk7CiAJCW5mID0gbmZhcnJheVswXTsKLQkJaWYgKGdldE5vaXNlRmxvb3JUaHJlc2goYWgsIGNoYW4sICZuZlRocmVzaCkKKwkJaWYgKGdldE5vaXNlRmxvb3JUaHJlc2goYWgsIGMtPmJhbmQsICZuZlRocmVzaCkKIAkJICAgICYmIG5mID4gbmZUaHJlc2gpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKIAkJCQkibm9pc2UgZmxvb3IgZmFpbGVkIGRldGVjdGVkOyAiCkBAIC03MTksMTEgKzY3OSw3IEBACiAJCX0KIAl9CiAKLSNpZmRlZiBBVEhfTkZfUEVSX0NIQU4KLQloID0gY2hhbi0+bmZDYWxIaXN0OwotI2Vsc2UKIAloID0gYWgtPm5mQ2FsSGlzdDsKLSNlbmRpZgogCiAJYXRoOWtfaHdfdXBkYXRlX25mY2FsX2hpc3RfYnVmZmVyKGgsIG5mYXJyYXkpOwogCWNoYW4tPnJhd05vaXNlRmxvb3IgPSBoWzBdLnByaXZORjsKQEAgLTczMSw3ICs2ODcsNyBAQAogCXJldHVybiBjaGFuLT5yYXdOb2lzZUZsb29yOwogfQogCi12b2lkIGF0aDlrX2luaXRfbmZjYWxfaGlzdF9idWZmZXIoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBpLCBqOwogCkBAIC03NDUsMjYgKzcwMSwxNiBAQAogCQkJCUFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMVUU7CiAJCX0KIAl9Ci0JcmV0dXJuOwogfQogCi1zMTYgYXRoOWtfaHdfZ2V0Y2hhbl9ub2lzZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorczE2IGF0aDlrX2h3X2dldGNoYW5fbm9pc2Uoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbjsKIAlzMTYgbmY7CiAKLQlpY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci0JaWYgKGljaGFuID09IE5VTEwpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBubyBtYXBwaW5nXG4iLAotCQkJY2hhbi0+Y2hhbm5lbCwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKLQkJcmV0dXJuIEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SOwotCX0KLQlpZiAoaWNoYW4tPnJhd05vaXNlRmxvb3IgPT0gMCkgewotCQllbnVtIHdpcmVsZXNzX21vZGUgbW9kZSA9IGF0aDlrX2h3X2NoYW4yd21vZGUoYWgsIGNoYW4pOwotCQluZiA9IE5PSVNFX0ZMT09SW21vZGVdOwotCX0gZWxzZQotCQluZiA9IGljaGFuLT5yYXdOb2lzZUZsb29yOworCWlmIChjaGFuLT5yYXdOb2lzZUZsb29yID09IDApCisJCW5mID0gLTk2OworCWVsc2UKKwkJbmYgPSBjaGFuLT5yYXdOb2lzZUZsb29yOwogCiAJaWYgKCFhdGg5a19od19uZl9pbl9yYW5nZShhaCwgbmYpKQogCQluZiA9IEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SOwpAQCAtNzcyLDUzICs3MTgsMzQgQEAKIAlyZXR1cm4gbmY7CiB9CiAKLWJvb2wgYXRoOWtfaHdfY2FsaWJyYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQl1OCByeGNoYWlubWFzaywgYm9vbCBsb25nY2FsLAotCQkJYm9vbCAqaXNDYWxEb25lKQorc3RhdGljIHZvaWQgYXRoOWtfb2xjX3RlbXBfY29tcGVuc2F0aW9uKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCA9IGFocC0+YWhfY2FsX2xpc3RfY3VycjsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW4gPSBhdGg5a19yZWdkX2NoZWNrX2NoYW5uZWwoYWgsIGNoYW4pOworCXUzMiByZGRhdGEsIGk7CisJaW50IGRlbHRhLCBjdXJyUERBREMsIHJlZ3ZhbDsKIAotCSppc0NhbERvbmUgPSB0cnVlOworCXJkZGF0YSA9IFJFR19SRUFEKGFoLCBBUl9QSFlfVFhfUFdSQ1RSTDQpOwogCi0JaWYgKGljaGFuID09IE5VTEwpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0hBTk5FTCwKLQkJCSJpbnZhbGlkIGNoYW5uZWwgJXUvMHgleDsgbm8gbWFwcGluZ1xuIiwKLQkJCWNoYW4tPmNoYW5uZWwsIGNoYW4tPmNoYW5uZWxGbGFncyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9CisJY3VyclBEQURDID0gTVMocmRkYXRhLCBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfT1VUKTsKIAotCWlmIChjdXJyQ2FsICYmCi0JICAgIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfUlVOTklORyB8fAotCSAgICAgY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpKSB7Ci0JCWF0aDlrX2h3X3Blcl9jYWxpYnJhdGlvbihhaCwgaWNoYW4sIHJ4Y2hhaW5tYXNrLCBjdXJyQ2FsLAotCQkJCQkgaXNDYWxEb25lKTsKLQkJaWYgKCppc0NhbERvbmUpIHsKLQkJCWFocC0+YWhfY2FsX2xpc3RfY3VyciA9IGN1cnJDYWwgPSBjdXJyQ2FsLT5jYWxOZXh0OworCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0RBQ19IUFdSXzVHKSkKKwkJZGVsdGEgPSAoY3VyclBEQURDIC0gYWgtPmluaXRQREFEQyArIDQpIC8gODsKKwllbHNlCisJCWRlbHRhID0gKGN1cnJQREFEQyAtIGFoLT5pbml0UERBREMgKyA1KSAvIDEwOwogCi0JCQlpZiAoY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1dBSVRJTkcpIHsKLQkJCQkqaXNDYWxEb25lID0gZmFsc2U7Ci0JCQkJYXRoOWtfaHdfcmVzZXRfY2FsaWJyYXRpb24oYWgsIGN1cnJDYWwpOwotCQkJfQorCWlmIChkZWx0YSAhPSBhaC0+UERBRENkZWx0YSkgeworCQlhaC0+UERBRENkZWx0YSA9IGRlbHRhOworCQlmb3IgKGkgPSAxOyBpIDwgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRTsgaSsrKSB7CisJCQlyZWd2YWwgPSBhaC0+b3JpZ2luYWxHYWluW2ldIC0gZGVsdGE7CisJCQlpZiAocmVndmFsIDwgMCkKKwkJCQlyZWd2YWwgPSAwOworCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFhfR0FJTl9UQkwxICsgaSAqIDQsCisJCQkJCUFSX1BIWV9UWF9HQUlOLCByZWd2YWwpOwogCQl9CiAJfQotCi0JaWYgKGxvbmdjYWwpIHsKLQkJYXRoOWtfaHdfZ2V0bmYoYWgsIGljaGFuKTsKLQkJYXRoOWtfaHdfbG9hZG5mKGFoLCBhaC0+YWhfY3VyY2hhbik7Ci0JCWF0aDlrX2h3X3N0YXJ0X25mY2FsKGFoKTsKLQotCQlpZiAoKGljaGFuLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0NXX0lOVCkgIT0gMCkgewotCQkJY2hhbi0+Y2hhbm5lbEZsYWdzIHw9IENIQU5ORUxfQ1dfSU5UOwotCQkJaWNoYW4tPmNoYW5uZWxGbGFncyAmPSB+Q0hBTk5FTF9DV19JTlQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3XzkyODVfcGFfY2FsKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19od185Mjg1X3BhX2NhbChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAogCXUzMiByZWdWYWw7CkBAIC05MTMsNTkgKzg0MCwxNzEgQEAKIAogfQogCi1ib29sIGF0aDlrX2h3X2luaXRfY2FsKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfY2FsaWJyYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCXU4IHJ4Y2hhaW5tYXNrLCBib29sIGxvbmdjYWwsCisJCQlib29sICppc0NhbERvbmUpCit7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY3VyckNhbCA9IGFoLT5jYWxfbGlzdF9jdXJyOworCisJKmlzQ2FsRG9uZSA9IHRydWU7CisKKwlpZiAoY3VyckNhbCAmJgorCSAgICAoY3VyckNhbC0+Y2FsU3RhdGUgPT0gQ0FMX1JVTk5JTkcgfHwKKwkgICAgIGN1cnJDYWwtPmNhbFN0YXRlID09IENBTF9XQUlUSU5HKSkgeworCQlhdGg5a19od19wZXJfY2FsaWJyYXRpb24oYWgsIGNoYW4sIHJ4Y2hhaW5tYXNrLCBjdXJyQ2FsLAorCQkJCQkgaXNDYWxEb25lKTsKKwkJaWYgKCppc0NhbERvbmUpIHsKKwkJCWFoLT5jYWxfbGlzdF9jdXJyID0gY3VyckNhbCA9IGN1cnJDYWwtPmNhbE5leHQ7CisKKwkJCWlmIChjdXJyQ2FsLT5jYWxTdGF0ZSA9PSBDQUxfV0FJVElORykgeworCQkJCSppc0NhbERvbmUgPSBmYWxzZTsKKwkJCQlhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihhaCwgY3VyckNhbCk7CisJCQl9CisJCX0KKwl9CisKKwlpZiAobG9uZ2NhbCkgeworCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSAmJiBBUl9TUkVWXzkyODVfMTFfT1JfTEFURVIoYWgpKQorCQkJYXRoOWtfaHdfOTI4NV9wYV9jYWwoYWgpOworCisJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikKKwkJCWF0aDlrX29sY190ZW1wX2NvbXBlbnNhdGlvbihhaCk7CisJCWF0aDlrX2h3X2dldG5mKGFoLCBjaGFuKTsKKwkJYXRoOWtfaHdfbG9hZG5mKGFoLCBhaC0+Y3VyY2hhbik7CisJCWF0aDlrX2h3X3N0YXJ0X25mY2FsKGFoKTsKKworCQlpZiAoY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9DV19JTlQpCisJCQljaGFuLT5jaGFubmVsRmxhZ3MgJj0gfkNIQU5ORUxfQ1dfSU5UOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBhcjkyODVfY2xjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKKwlpZiAoY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9IVDIwKSB7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX1BBUkFMTEVMX0NBTF9FTkFCTEUpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1RVUkJPLCBBUl9QSFlfRkNfRFlOMjA0MF9FTik7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsCisJCQkgICAgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfQ0FMX0VOQUJMRSk7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwpOworCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJCQkgIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwsIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwgIm9mZnNldCAiCisJCQkJImNhbGlicmF0aW9uIGZhaWxlZCB0byBjb21wbGV0ZSBpbiAiCisJCQkJIjFtczsgbm9pc3kgPz9cbiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfVFVSQk8sIEFSX1BIWV9GQ19EWU4yMDQwX0VOKTsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfUEFSQUxMRUxfQ0FMX0VOQUJMRSk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQ0xfQ0FMX0NUTCwgQVJfUEhZX0NMX0NBTF9FTkFCTEUpOworCX0KKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfQ0FMX0VOQUJMRSk7CisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCk7CisJaWYgKCFhdGg5a19od193YWl0KGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9DQUwsCisJCQkgIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLCAib2Zmc2V0IGNhbGlicmF0aW9uICIKKwkJCQkiZmFpbGVkIHRvIGNvbXBsZXRlIGluIDFtczsgbm9pc3kgPz9cbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLCBBUl9QSFlfQURDX0NUTF9PRkZfUFdEQURDKTsKKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKKwlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCisJcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9odyAqYWgsCiAJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7CisJaWYgKEFSX1NSRVZfOTI4NShhaCkgJiYgQVJfU1JFVl85Mjg1XzEyX09SX0xBVEVSKGFoKSkgeworCQlpZiAoIWFyOTI4NV9jbGMoYWgsIGNoYW4pKQorCQkJcmV0dXJuIGZhbHNlOworCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0FEQ19DVEwsIEFSX1BIWV9BRENfQ1RMX09GRl9QV0RBREMpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfRkxUUl9DQUwpOworCQlSRUdfQ0xSX0JJVChhaCwgQVJfUEhZX0NMX0NBTF9DVEwsIEFSX1BIWV9DTF9DQUxfRU5BQkxFKTsKIAorCQkvKiBLaWNrIG9mZiB0aGUgY2FsICovCisJCVJFR19XUklURShhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAorCQkJCVJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKKwkJCQlBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKKworCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKKwkJCQkJQVJfUEhZX0FHQ19DT05UUk9MX0NBTCwgMCwKKwkJCQkJQUhfV0FJVF9USU1FT1VUKSkgeworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAorCQkJCSJvZmZzZXQgY2FsaWJyYXRpb24gZmFpbGVkIHRvIGNvbXBsZXRlIGluIDFtczsgIgorCQkJCSJub2lzeSBlbnZpcm9ubWVudD9cbiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1BIWV9BRENfQ1RMLCBBUl9QSFlfQURDX0NUTF9PRkZfUFdEQURDKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwgQVJfUEhZX0FHQ19DT05UUk9MX0ZMVFJfQ0FMKTsKKwkJUkVHX1NFVF9CSVQoYWgsIEFSX1BIWV9DTF9DQUxfQ1RMLCBBUl9QSFlfQ0xfQ0FMX0VOQUJMRSk7CisJfQorCisJLyogQ2FsaWJyYXRlIHRoZSBBR0MgKi8KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCwKLQkJICBSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSB8Ci0JCSAgQVJfUEhZX0FHQ19DT05UUk9MX0NBTCk7CisJCQlSRUdfUkVBRChhaCwgQVJfUEhZX0FHQ19DT05UUk9MKSB8CisJCQlBUl9QSFlfQUdDX0NPTlRST0xfQ0FMKTsKIAotCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMLCAwKSkgeworCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX0FHQ19DT05UUk9MLCBBUl9QSFlfQUdDX0NPTlRST0xfQ0FMLAorCQkJCTAsIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAogCQkJIm9mZnNldCBjYWxpYnJhdGlvbiBmYWlsZWQgdG8gY29tcGxldGUgaW4gMW1zOyAiCiAJCQkibm9pc3kgZW52aXJvbm1lbnQ/XG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQURDX0NUTCwgQVJfUEhZX0FEQ19DVExfT0ZGX1BXREFEQyk7CisJCVJFR19DTFJfQklUKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wsIEFSX1BIWV9BR0NfQ09OVFJPTF9GTFRSX0NBTCk7CisJfQorCisJLyogRG8gUEEgQ2FsaWJyYXRpb24gKi8KIAlpZiAoQVJfU1JFVl85Mjg1KGFoKSAmJiBBUl9TUkVWXzkyODVfMTFfT1JfTEFURVIoYWgpKQogCQlhdGg5a19od185Mjg1X3BhX2NhbChhaCk7CiAKKwkvKiBEbyBORiBDYWxpYnJhdGlvbiAqLwogCVJFR19XUklURShhaCwgQVJfUEhZX0FHQ19DT05UUk9MLAotCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfQUdDX0NPTlRST0wpIHwKLQkJICBBUl9QSFlfQUdDX0NPTlRST0xfTkYpOworCQkJUkVHX1JFQUQoYWgsIEFSX1BIWV9BR0NfQ09OVFJPTCkgfAorCQkJQVJfUEhZX0FHQ19DT05UUk9MX05GKTsKIAotCWFocC0+YWhfY2FsX2xpc3QgPSBhaHAtPmFoX2NhbF9saXN0X2xhc3QgPSBhaHAtPmFoX2NhbF9saXN0X2N1cnIgPSBOVUxMOworCWFoLT5jYWxfbGlzdCA9IGFoLT5jYWxfbGlzdF9sYXN0ID0gYWgtPmNhbF9saXN0X2N1cnIgPSBOVUxMOwogCiAJaWYgKEFSX1NSRVZfOTEwMChhaCkgfHwgQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSkgewotCQlpZiAoYXRoOWtfaHdfaXNjYWxfc3VwcG9ydGVkKGFoLCBjaGFuLCBBRENfR0FJTl9DQUwpKSB7Ci0JCQlJTklUX0NBTCgmYWhwLT5haF9hZGNHYWluQ2FsRGF0YSk7Ci0JCQlJTlNFUlRfQ0FMKGFocCwgJmFocC0+YWhfYWRjR2FpbkNhbERhdGEpOworCQlpZiAoYXRoOWtfaHdfaXNjYWxfc3VwcG9ydGVkKGFoLCBBRENfR0FJTl9DQUwpKSB7CisJCQlJTklUX0NBTCgmYWgtPmFkY2dhaW5fY2FsZGF0YSk7CisJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmFkY2dhaW5fY2FsZGF0YSk7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DQUxJQlJBVEUsCi0JCQkJImVuYWJsaW5nIEFEQyBHYWluIENhbGlicmF0aW9uLlxuIik7CisJCQkJCSJlbmFibGluZyBBREMgR2FpbiBDYWxpYnJhdGlvbi5cbiIpOwogCQl9Ci0JCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIGNoYW4sIEFEQ19EQ19DQUwpKSB7Ci0JCQlJTklUX0NBTCgmYWhwLT5haF9hZGNEY0NhbERhdGEpOwotCQkJSU5TRVJUX0NBTChhaHAsICZhaHAtPmFoX2FkY0RjQ2FsRGF0YSk7CisJCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIEFEQ19EQ19DQUwpKSB7CisJCQlJTklUX0NBTCgmYWgtPmFkY2RjX2NhbGRhdGEpOworCQkJSU5TRVJUX0NBTChhaCwgJmFoLT5hZGNkY19jYWxkYXRhKTsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NBTElCUkFURSwKLQkJCQkiZW5hYmxpbmcgQURDIERDIENhbGlicmF0aW9uLlxuIik7CisJCQkJCSJlbmFibGluZyBBREMgREMgQ2FsaWJyYXRpb24uXG4iKTsKIAkJfQotCQlpZiAoYXRoOWtfaHdfaXNjYWxfc3VwcG9ydGVkKGFoLCBjaGFuLCBJUV9NSVNNQVRDSF9DQUwpKSB7Ci0JCQlJTklUX0NBTCgmYWhwLT5haF9pcUNhbERhdGEpOwotCQkJSU5TRVJUX0NBTChhaHAsICZhaHAtPmFoX2lxQ2FsRGF0YSk7CisJCWlmIChhdGg5a19od19pc2NhbF9zdXBwb3J0ZWQoYWgsIElRX01JU01BVENIX0NBTCkpIHsKKwkJCUlOSVRfQ0FMKCZhaC0+aXFfY2FsZGF0YSk7CisJCQlJTlNFUlRfQ0FMKGFoLCAmYWgtPmlxX2NhbGRhdGEpOwogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQ0FMSUJSQVRFLAotCQkJCSJlbmFibGluZyBJUSBDYWxpYnJhdGlvbi5cbiIpOworCQkJCQkiZW5hYmxpbmcgSVEgQ2FsaWJyYXRpb24uXG4iKTsKIAkJfQogCi0JCWFocC0+YWhfY2FsX2xpc3RfY3VyciA9IGFocC0+YWhfY2FsX2xpc3Q7CisJCWFoLT5jYWxfbGlzdF9jdXJyID0gYWgtPmNhbF9saXN0OwogCi0JCWlmIChhaHAtPmFoX2NhbF9saXN0X2N1cnIpCi0JCQlhdGg5a19od19yZXNldF9jYWxpYnJhdGlvbihhaCwgYWhwLT5haF9jYWxfbGlzdF9jdXJyKTsKKwkJaWYgKGFoLT5jYWxfbGlzdF9jdXJyKQorCQkJYXRoOWtfaHdfcmVzZXRfY2FsaWJyYXRpb24oYWgsIGFoLT5jYWxfbGlzdF9jdXJyKTsKIAl9CiAKLQlpY2hhbi0+Q2FsVmFsaWQgPSAwOworCWNoYW4tPkNhbFZhbGlkID0gMDsKIAogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY2FsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3NGJkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2NhbGliLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIENBTElCX0gKKyNkZWZpbmUgQ0FMSUJfSAorCitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBpcV9jYWxfbXVsdGlfc2FtcGxlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgaXFfY2FsX3NpbmdsZV9zYW1wbGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZ2Fpbl9jYWxfbXVsdGlfc2FtcGxlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2dhaW5fY2FsX3NpbmdsZV9zYW1wbGU7CitleHRlcm4gY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZGNfY2FsX211bHRpX3NhbXBsZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19kY19jYWxfc2luZ2xlX3NhbXBsZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19pbml0X2RjX2NhbDsKKworI2RlZmluZSBBUl9QSFlfQ0NBX01BWF9HT09EX1ZBTFVFICAgICAgCQktODUKKyNkZWZpbmUgQVJfUEhZX0NDQV9NQVhfSElHSF9WQUxVRSAgICAgIAkJLTYyCisjZGVmaW5lIEFSX1BIWV9DQ0FfTUlOX0JBRF9WQUxVRSAgICAgICAJCS0xNDAKKyNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIX0lOSVQgICAgIDMKKyNkZWZpbmUgQVJfUEhZX0NDQV9GSUxURVJXSU5ET1dfTEVOR1RIICAgICAgICAgIDUKKworI2RlZmluZSBOVU1fTkZfUkVBRElOR1MgICAgICAgNgorI2RlZmluZSBBVEg5S19ORl9DQUxfSElTVF9NQVggNQorCitzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgeworCXUzMiAqaWFfYXJyYXk7CisJdTMyIGlhX3Jvd3M7CisJdTMyIGlhX2NvbHVtbnM7Cit9OworCisjZGVmaW5lIElOSVRfSU5JX0FSUkFZKGluaWFycmF5LCBhcnJheSwgcm93cywgY29sdW1ucykgZG8gewlcCisJCShpbmlhcnJheSktPmlhX2FycmF5ID0gKHUzMiAqKShhcnJheSk7CQlcCisJCShpbmlhcnJheSktPmlhX3Jvd3MgPSAocm93cyk7CQkJXAorCQkoaW5pYXJyYXkpLT5pYV9jb2x1bW5zID0gKGNvbHVtbnMpOwkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU5JX1JBKGluaWFycmF5LCByb3csIGNvbHVtbikgXAorCSgoKGluaWFycmF5KS0+aWFfYXJyYXkpWyhyb3cpICoJKChpbmlhcnJheSktPmlhX2NvbHVtbnMpICsgKGNvbHVtbildKQorCisjZGVmaW5lIElOSVRfQ0FMKF9wZXJDYWwpIGRvIHsJCQkJXAorCQkoX3BlckNhbCktPmNhbFN0YXRlID0gQ0FMX1dBSVRJTkc7CVwKKwkJKF9wZXJDYWwpLT5jYWxOZXh0ID0gTlVMTDsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIElOU0VSVF9DQUwoX2FocCwgX3BlckNhbCkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmICgoX2FocCktPmNhbF9saXN0X2xhc3QgPT0gTlVMTCkgewkJCVwKKwkJCShfYWhwKS0+Y2FsX2xpc3QgPQkJCQlcCisJCQkJKF9haHApLT5jYWxfbGlzdF9sYXN0ID0gKF9wZXJDYWwpOwlcCisJCQkoKF9haHApLT5jYWxfbGlzdF9sYXN0KS0+Y2FsTmV4dCA9IChfcGVyQ2FsKTsgXAorCQl9IGVsc2UgewkJCQkJCVwKKwkJCSgoX2FocCktPmNhbF9saXN0X2xhc3QpLT5jYWxOZXh0ID0gKF9wZXJDYWwpOyBcCisJCQkoX2FocCktPmNhbF9saXN0X2xhc3QgPSAoX3BlckNhbCk7CQlcCisJCQkoX3BlckNhbCktPmNhbE5leHQgPSAoX2FocCktPmNhbF9saXN0OwlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK2VudW0gaGFsX2NhbF90eXBlcyB7CisJQURDX0RDX0lOSVRfQ0FMID0gMHgxLAorCUFEQ19HQUlOX0NBTCA9IDB4MiwKKwlBRENfRENfQ0FMID0gMHg0LAorCUlRX01JU01BVENIX0NBTCA9IDB4OAorfTsKKworZW51bSBoYWxfY2FsX3N0YXRlIHsKKwlDQUxfSU5BQ1RJVkUsCisJQ0FMX1dBSVRJTkcsCisJQ0FMX1JVTk5JTkcsCisJQ0FMX0RPTkUKK307CisKKyNkZWZpbmUgTUlOX0NBTF9TQU1QTEVTICAgICAxCisjZGVmaW5lIE1BWF9DQUxfU0FNUExFUyAgICA2NAorI2RlZmluZSBJTklUX0xPR19DT1VOVCAgICAgIDUKKyNkZWZpbmUgUEVSX01JTl9MT0dfQ09VTlQgICAyCisjZGVmaW5lIFBFUl9NQVhfTE9HX0NPVU5UICAxMAorCitzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIHsKKwllbnVtIGhhbF9jYWxfdHlwZXMgY2FsVHlwZTsKKwl1MzIgY2FsTnVtU2FtcGxlczsKKwl1MzIgY2FsQ291bnRNYXg7CisJdm9pZCAoKmNhbENvbGxlY3QpIChzdHJ1Y3QgYXRoX2h3ICopOworCXZvaWQgKCpjYWxQb3N0UHJvYykgKHN0cnVjdCBhdGhfaHcgKiwgdTgpOworfTsKKworc3RydWN0IGhhbF9jYWxfbGlzdCB7CisJY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSAqY2FsRGF0YTsKKwllbnVtIGhhbF9jYWxfc3RhdGUgY2FsU3RhdGU7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsTmV4dDsKK307CisKK3N0cnVjdCBhdGg5a19uZmNhbF9oaXN0IHsKKwlpbnQxNl90IG5mQ2FsQnVmZmVyW0FUSDlLX05GX0NBTF9ISVNUX01BWF07CisJdTggY3VyckluZGV4OworCWludDE2X3QgcHJpdk5GOworCXU4IGludmFsaWRORmNvdW50OworfTsKKworYm9vbCBhdGg5a19od19yZXNldF9jYWx2YWxpZChzdHJ1Y3QgYXRoX2h3ICphaCk7Cit2b2lkIGF0aDlrX2h3X3N0YXJ0X25mY2FsKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfbG9hZG5mKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CitpbnQxNl90IGF0aDlrX2h3X2dldG5mKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwordm9pZCBhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3MxNiBhdGg5a19od19nZXRjaGFuX25vaXNlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Citib29sIGF0aDlrX2h3X2NhbGlicmF0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQl1OCByeGNoYWlubWFzaywgYm9vbCBsb25nY2FsLAorCQkJYm9vbCAqaXNDYWxEb25lKTsKK2Jvb2wgYXRoOWtfaHdfaW5pdF9jYWwoc3RydWN0IGF0aF9odyAqYWgsCisJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7CisKKyNlbmRpZiAvKiBDQUxJQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYTJhZWQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvY29yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLSAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBDT1JFX0gKLSNkZWZpbmUgQ09SRV9ICi0KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KLQotI2luY2x1ZGUgImF0aDlrLmgiCi0jaW5jbHVkZSAicmMuaCIKLQotc3RydWN0IGF0aF9ub2RlOwotCi0vKiBNYWNybyB0byBleHBhbmQgc2NhbGFycyB0byA2NC1iaXQgb2JqZWN0cyAqLwotCi0jZGVmaW5lCWl0bzY0KHgpIChzaXplb2YoeCkgPT0gOCkgPwkJCVwKLQkoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAoMHhmZikpIDoJXAotCShzaXplb2YoeCkgPT0gMTYpID8JCQkJXAotCSgoKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKSAmIDB4ZmZmZikgOglcCi0JKChzaXplb2YoeCkgPT0gMzIpID8JCQkJXAotCSAoKCh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSh4KSkgJiAweGZmZmZmZmZmKSA6IFwKLQkgKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpKHgpKQotCi0vKiBpbmNyZW1lbnQgd2l0aCB3cmFwLWFyb3VuZCAqLwotI2RlZmluZSBJTkNSKF9sLCBfc3opICAgZG8gewkJCVwKLQkJKF9sKSsrOwkJCQlcCi0JCShfbCkgJj0gKChfc3opIC0gMSk7CQlcCi0JfSB3aGlsZSAoMCkKLQotLyogZGVjcmVtZW50IHdpdGggd3JhcC1hcm91bmQgKi8KLSNkZWZpbmUgREVDUihfbCwgIF9zeikgIGRvIHsJCQlcCi0JCShfbCktLTsJCQkJXAotCQkoX2wpICY9ICgoX3N6KSAtIDEpOwkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQV9NQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKLQotI2RlZmluZSBBU1NFUlQoZXhwKSBkbyB7CQkJXAotCQlpZiAodW5saWtlbHkoIShleHApKSkgewkJXAotCQkJQlVHKCk7CQkJXAotCQl9CQkJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFRTRl9UT19UVShfaCxfbCkgXAotCSgoKCh1MzIpKF9oKSkgPDwgMjIpIHwgKCgodTMyKShfbCkpID4+IDEwKSkKLQotI2RlZmluZQlBVEhfVFhRX1NFVFVQKHNjLCBpKSAgICAgICAgKChzYyktPnR4LnR4cXNldHVwICYgKDE8PGkpKQotCi1zdGF0aWMgY29uc3QgdTggYXRoX2JjYXN0X21hY1tFVEhfQUxFTl0gPSB7MHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZn07Ci0KLWVudW0gQVRIX0RFQlVHIHsKLQlBVEhfREJHX1JFU0VUCQk9IDB4MDAwMDAwMDEsCi0JQVRIX0RCR19SRUdfSU8JCT0gMHgwMDAwMDAwMiwKLQlBVEhfREJHX1FVRVVFCQk9IDB4MDAwMDAwMDQsCi0JQVRIX0RCR19FRVBST00JCT0gMHgwMDAwMDAwOCwKLQlBVEhfREJHX0NBTElCUkFURQk9IDB4MDAwMDAwMTAsCi0JQVRIX0RCR19DSEFOTkVMCQk9IDB4MDAwMDAwMjAsCi0JQVRIX0RCR19JTlRFUlJVUFQJPSAweDAwMDAwMDQwLAotCUFUSF9EQkdfUkVHVUxBVE9SWQk9IDB4MDAwMDAwODAsCi0JQVRIX0RCR19BTkkJCT0gMHgwMDAwMDEwMCwKLQlBVEhfREJHX1BPV0VSX01HTVQJPSAweDAwMDAwMjAwLAotCUFUSF9EQkdfWE1JVAkJPSAweDAwMDAwNDAwLAotCUFUSF9EQkdfQkVBQ09OCQk9IDB4MDAwMDEwMDAsCi0JQVRIX0RCR19DT05GSUcJCT0gMHgwMDAwMjAwMCwKLQlBVEhfREJHX0tFWUNBQ0hFCT0gMHgwMDAwNDAwMCwKLQlBVEhfREJHX0ZBVEFMCQk9IDB4MDAwMDgwMDAsCi0JQVRIX0RCR19BTlkJCT0gMHhmZmZmZmZmZgotfTsKLQotI2RlZmluZSBEQkdfREVGQVVMVCAoQVRIX0RCR19GQVRBTCkKLQotI2lmZGVmIENPTkZJR19BVEg5S19ERUJVRwotCi0vKioKLSAqIHN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIC0gQ29udGFpbnMgc3RhdGlzdGljcyBhYm91dCBpbnRlcnJ1cHRzCi0gKiBAdG90YWw6IFRvdGFsIG5vLiBvZiBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBzbyBmYXIKLSAqIEByeG9rOiBSWCB3aXRoIG5vIGVycm9ycwotICogQHJ4ZW9sOiBSWCB3aXRoIG5vIG1vcmUgUlhERVNDIGF2YWlsYWJsZQotICogQHJ4b3JuOiBSWCBGSUZPIG92ZXJydW4KLSAqIEB0eG9rOiBUWCBjb21wbGV0ZWQgYXQgdGhlIHJlcXVlc3RlZCByYXRlCi0gKiBAdHh1cm46IFRYIEZJRk8gdW5kZXJydW4KLSAqIEBtaWI6IE1JQiByZWdzIHJlYWNoaW5nIGl0cyB0aHJlc2hvbGQKLSAqIEByeHBoeWVycjogUlggd2l0aCBwaHkgZXJyb3JzCi0gKiBAcnhfa2V5Y2FjaGVfbWlzczogUlggd2l0aCBrZXkgY2FjaGUgbWlzc2VzCi0gKiBAc3diYTogU29mdHdhcmUgQmVhY29uIEFsZXJ0Ci0gKiBAYm1pc3M6IEJlYWNvbiBNaXNzCi0gKiBAYm5yOiBCZWFjb24gTm90IFJlYWR5Ci0gKiBAY3N0OiBDYXJyaWVyIFNlbnNlIFRJbWVvdXQKLSAqIEBndHQ6IEdsb2JhbCBUWCBUaW1lb3V0Ci0gKiBAdGltOiBSWCBiZWFjb24gVElNIG9jY3VycmVuY2UKLSAqIEBjYWJlbmQ6IFJYIEVuZCBvZiBDQUIgdHJhZmZpYwotICogQGR0aW1zeW5jOiBEVElNIHN5bmMgbG9zc2FnZQotICogQGR0aW06IFJYIEJlYWNvbiB3aXRoIERUSU0KLSAqLwotc3RydWN0IGF0aF9pbnRlcnJ1cHRfc3RhdHMgewotCXUzMiB0b3RhbDsKLQl1MzIgcnhvazsKLQl1MzIgcnhlb2w7Ci0JdTMyIHJ4b3JuOwotCXUzMiB0eG9rOwotCXUzMiB0eGVvbDsKLQl1MzIgdHh1cm47Ci0JdTMyIG1pYjsKLQl1MzIgcnhwaHllcnI7Ci0JdTMyIHJ4X2tleWNhY2hlX21pc3M7Ci0JdTMyIHN3YmE7Ci0JdTMyIGJtaXNzOwotCXUzMiBibnI7Ci0JdTMyIGNzdDsKLQl1MzIgZ3R0OwotCXUzMiB0aW07Ci0JdTMyIGNhYmVuZDsKLQl1MzIgZHRpbXN5bmM7Ci0JdTMyIGR0aW07Ci19OwotCi1zdHJ1Y3QgYXRoX3N0YXRzIHsKLQlzdHJ1Y3QgYXRoX2ludGVycnVwdF9zdGF0cyBpc3RhdHM7Ci19OwotCi1zdHJ1Y3QgYXRoOWtfZGVidWcgewotCWludCBkZWJ1Z19tYXNrOwotCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3BoeTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RtYTsKLQlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2ludGVycnVwdDsKLQlzdHJ1Y3QgYXRoX3N0YXRzIHN0YXRzOwotfTsKLQotdm9pZCBEUFJJTlRGKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZGJnX21hc2ssIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLWludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLXZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci12b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKTsKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywKLQkJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotfQotCi1zdGF0aWMgaW5saW5lIGludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkJICAgIGVudW0gYXRoOWtfaW50IHN0YXR1cykKLXsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19BVEg5S19ERUJVRyAqLwotCi1zdHJ1Y3QgYXRoX2NvbmZpZyB7Ci0JdTMyIGF0aF9hZ2dyX3Byb3Q7Ci0JdTE2IHR4cG93bGltaXQ7Ci0JdTE2IHR4cG93bGltaXRfb3ZlcnJpZGU7Ci0JdTggY2FicVJlYWR5dGltZTsKLQl1OCBzd0JlYWNvblByb2Nlc3M7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERlc2NyaXB0b3IgTWFuYWdlbWVudCAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgQVRIX1RYQlVGX1JFU0VUKF9iZikgZG8gewkJCQlcCi0JCShfYmYpLT5iZl9zdGF0dXMgPSAwOwkJCQlcCi0JCShfYmYpLT5iZl9sYXN0YmYgPSBOVUxMOwkJCVwKLQkJKF9iZiktPmJmX2xhc3Rmcm0gPSBOVUxMOwkJCVwKLQkJKF9iZiktPmJmX25leHQgPSBOVUxMOwkJCQlcCi0JCW1lbXNldCgmKChfYmYpLT5iZl9zdGF0ZSksIDAsCQkJXAotCQkJICAgIHNpemVvZihzdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSkpOwlcCi0JfSB3aGlsZSAoMCkKLQotZW51bSBidWZmZXJfdHlwZSB7Ci0JQlVGX0RBVEEJCT0gQklUKDApLAotCUJVRl9BR0dSCQk9IEJJVCgxKSwKLQlCVUZfQU1QRFUJCT0gQklUKDIpLAotCUJVRl9IVAkJCT0gQklUKDMpLAotCUJVRl9SRVRSWQkJPSBCSVQoNCksCi0JQlVGX1hSRVRSWQkJPSBCSVQoNSksCi0JQlVGX1NIT1JUX1BSRUFNQkxFCT0gQklUKDYpLAotCUJVRl9CQVIJCQk9IEJJVCg3KSwKLQlCVUZfUFNQT0xMCQk9IEJJVCg4KSwKLQlCVUZfQUdHUl9CVVJTVAkJPSBCSVQoOSksCi0JQlVGX0NBTENfQUlSVElNRQk9IEJJVCgxMCksCi19OwotCi1zdHJ1Y3QgYXRoX2J1Zl9zdGF0ZSB7Ci0JaW50IGJmc19uZnJhbWVzOwkJLyogIyBmcmFtZXMgaW4gYWdncmVnYXRlICovCi0JdTE2IGJmc19hbDsJCQkvKiBsZW5ndGggb2YgYWdncmVnYXRlICovCi0JdTE2IGJmc19mcm1sZW47CQkJLyogbGVuZ3RoIG9mIGZyYW1lICovCi0JaW50IGJmc19zZXFubzsJCQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KLQlpbnQgYmZzX3RpZG5vOwkJCS8qIHRpZCBvZiB0aGlzIGZyYW1lICovCi0JaW50IGJmc19yZXRyaWVzOwkJLyogY3VycmVudCByZXRyaWVzICovCi0JdTMyIGJmX3R5cGU7CQkJLyogQlVGXyogKGVudW0gYnVmZmVyX3R5cGUpICovCi0JdTMyIGJmc19rZXlpeDsKLQllbnVtIGF0aDlrX2tleV90eXBlIGJmc19rZXl0eXBlOwotfTsKLQotI2RlZmluZSBiZl9uZnJhbWVzICAgICAgCWJmX3N0YXRlLmJmc19uZnJhbWVzCi0jZGVmaW5lIGJmX2FsICAgICAgICAgICAJYmZfc3RhdGUuYmZzX2FsCi0jZGVmaW5lIGJmX2ZybWxlbiAgICAgICAJYmZfc3RhdGUuYmZzX2ZybWxlbgotI2RlZmluZSBiZl9yZXRyaWVzICAgICAgCWJmX3N0YXRlLmJmc19yZXRyaWVzCi0jZGVmaW5lIGJmX3NlcW5vICAgICAgICAJYmZfc3RhdGUuYmZzX3NlcW5vCi0jZGVmaW5lIGJmX3RpZG5vICAgICAgICAJYmZfc3RhdGUuYmZzX3RpZG5vCi0jZGVmaW5lIGJmX3JjcyAgICAgICAgICAJYmZfc3RhdGUuYmZzX3JjcwotI2RlZmluZSBiZl9rZXlpeCAgICAgICAgICAgICAgICBiZl9zdGF0ZS5iZnNfa2V5aXgKLSNkZWZpbmUgYmZfa2V5dHlwZSAgICAgIAliZl9zdGF0ZS5iZnNfa2V5dHlwZQotI2RlZmluZSBiZl9pc2RhdGEoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfREFUQSkKLSNkZWZpbmUgYmZfaXNhZ2dyKGJmKQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX0FHR1IpCi0jZGVmaW5lIGJmX2lzYW1wZHUoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQU1QRFUpCi0jZGVmaW5lIGJmX2lzaHQoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfSFQpCi0jZGVmaW5lIGJmX2lzcmV0cmllZChiZikJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICYgQlVGX1JFVFJZKQotI2RlZmluZSBiZl9pc3hyZXRyaWVkKGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfWFJFVFJZKQotI2RlZmluZSBiZl9pc3NocHJlYW1ibGUoYmYpCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9TSE9SVF9QUkVBTUJMRSkKLSNkZWZpbmUgYmZfaXNiYXIoYmYpCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQkFSKQotI2RlZmluZSBiZl9pc3BzcG9sbChiZikgCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmIEJVRl9QU1BPTEwpCi0jZGVmaW5lIGJmX2lzYWdncmJ1cnN0KGJmKQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJiBCVUZfQUdHUl9CVVJTVCkKLQotLyoKLSAqIEFic3RyYWN0aW9uIG9mIGEgY29udGlndW91cyBidWZmZXIgdG8gdHJhbnNtaXQvcmVjZWl2ZS4gIFRoZXJlIGlzIG9ubHkKLSAqIGEgc2luZ2xlIGh3IGRlc2NyaXB0b3IgZW5jYXBzdWxhdGVkIGhlcmUuCi0gKi8KLXN0cnVjdCBhdGhfYnVmIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGFzdDsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbGFzdGJmOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIHVuaXQgKGEgZnJhbWUgb3IKLQkJCQkJICAgYW4gYWdncmVnYXRlKSAqLwotCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0ZnJtOwkvKiBsYXN0IGJ1ZiBvZiB0aGlzIGZyYW1lICovCi0Jc3RydWN0IGF0aF9idWYgKmJmX25leHQ7CS8qIG5leHQgc3ViZnJhbWUgaW4gdGhlIGFnZ3JlZ2F0ZSAqLwotCXZvaWQgKmJmX21wZHU7CQkJLyogZW5jbG9zaW5nIGZyYW1lIHN0cnVjdHVyZSAqLwotCXN0cnVjdCBhdGhfZGVzYyAqYmZfZGVzYzsJLyogdmlydHVhbCBhZGRyIG9mIGRlc2MgKi8KLQlkbWFfYWRkcl90IGJmX2RhZGRyOwkJLyogcGh5c2ljYWwgYWRkciBvZiBkZXNjICovCi0JZG1hX2FkZHJfdCBiZl9idWZfYWRkcjsJCS8qIHBoeXNpY2FsIGFkZHIgb2YgZGF0YSBidWZmZXIgKi8KLQl1MzIgYmZfc3RhdHVzOwotCXUxNiBiZl9mbGFnczsJCQkvKiB0eCBkZXNjcmlwdG9yIGZsYWdzICovCi0Jc3RydWN0IGF0aF9idWZfc3RhdGUgYmZfc3RhdGU7CS8qIGJ1ZmZlciBzdGF0ZSAqLwotCWRtYV9hZGRyX3QgYmZfZG1hY29udGV4dDsKLX07Ci0KLSNkZWZpbmUgQVRIX1JYQlVGX1JFU0VUKF9iZikgICAgKChfYmYpLT5iZl9zdGF0dXMgPSAwKQotCi0vKiBodyBwcm9jZXNzaW5nIGNvbXBsZXRlLCBkZXNjIHByb2Nlc3NlZCBieSBoYWwgKi8KLSNkZWZpbmUgQVRIX0JVRlNUQVRVU19ET05FICAgICAgMHgwMDAwMDAwMQotLyogaHcgcHJvY2Vzc2luZyBjb21wbGV0ZSwgZGVzYyBob2xkIGZvciBodyAqLwotI2RlZmluZSBBVEhfQlVGU1RBVFVTX1NUQUxFICAgICAweDAwMDAwMDAyCi0vKiBSeC1vbmx5OiBPUyBpcyBkb25lIHdpdGggdGhpcyBwYWNrZXQgYW5kIGl0J3Mgb2sgdG8gcXVldWVkIGl0IHRvIGh3ICovCi0jZGVmaW5lIEFUSF9CVUZTVEFUVVNfRlJFRSAgICAgIDB4MDAwMDAwMDQKLQotLyogRE1BIHN0YXRlIGZvciB0eC9yeCBkZXNjcmlwdG9ycyAqLwotCi1zdHJ1Y3QgYXRoX2Rlc2NkbWEgewotCWNvbnN0IGNoYXIgKmRkX25hbWU7Ci0Jc3RydWN0IGF0aF9kZXNjICpkZF9kZXNjOwkvKiBkZXNjcmlwdG9ycyAgKi8KLQlkbWFfYWRkcl90IGRkX2Rlc2NfcGFkZHI7CS8qIHBoeXNpY2FsIGFkZHIgb2YgZGRfZGVzYyAgKi8KLQl1MzIgZGRfZGVzY19sZW47CQkvKiBzaXplIG9mIGRkX2Rlc2MgICovCi0Jc3RydWN0IGF0aF9idWYgKmRkX2J1ZnB0cjsJLyogYXNzb2NpYXRlZCBidWZmZXJzICovCi0JZG1hX2FkZHJfdCBkZF9kbWFjb250ZXh0OwotfTsKLQotaW50IGF0aF9kZXNjZG1hX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAotCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgICBpbnQgbmJ1ZiwgaW50IG5kZXNjKTsKLXZvaWQgYXRoX2Rlc2NkbWFfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9kZXNjZG1hICpkZCwKLQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKLQotLyoqKioqKioqKioqLwotLyogUlggLyBUWCAqLwotLyoqKioqKioqKioqLwotCi0jZGVmaW5lIEFUSF9NQVhfQU5URU5OQSAgICAgICAgIDMKLSNkZWZpbmUgQVRIX1JYQlVGICAgICAgICAgICAgICAgNTEyCi0jZGVmaW5lIFdNRV9OVU1fVElEICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEFUSF9UWEJVRiAgICAgICAgICAgICAgIDUxMgotI2RlZmluZSBBVEhfVFhNQVhUUlkgICAgICAgICAgICAxMwotI2RlZmluZSBBVEhfMTFOX1RYTUFYVFJZICAgICAgICAxMAotI2RlZmluZSBBVEhfTUdUX1RYTUFYVFJZICAgICAgICA0Ci0jZGVmaW5lIFdNRV9CQV9CTVBfU0laRSAgICAgICAgIDY0Ci0jZGVmaW5lIFdNRV9NQVhfQkEgICAgICAgICAgICAgIFdNRV9CQV9CTVBfU0laRQotI2RlZmluZSBBVEhfVElEX01BWF9CVUZTICAgICAgICAoMiAqIFdNRV9NQVhfQkEpCi0KLSNkZWZpbmUgVElEX1RPX1dNRV9BQyhfdGlkKQkJCQlcCi0JKCgoKF90aWQpID09IDApIHx8ICgoX3RpZCkgPT0gMykpID8gV01FX0FDX0JFIDoJXAotCSAoKChfdGlkKSA9PSAxKSB8fCAoKF90aWQpID09IDIpKSA/IFdNRV9BQ19CSyA6CVwKLQkgKCgoX3RpZCkgPT0gNCkgfHwgKChfdGlkKSA9PSA1KSkgPyBXTUVfQUNfVkkgOglcCi0JIFdNRV9BQ19WTykKLQotI2RlZmluZSBXTUVfQUNfQkUgICAwCi0jZGVmaW5lIFdNRV9BQ19CSyAgIDEKLSNkZWZpbmUgV01FX0FDX1ZJICAgMgotI2RlZmluZSBXTUVfQUNfVk8gICAzCi0jZGVmaW5lIFdNRV9OVU1fQUMgIDQKLQotI2RlZmluZSBBRERCQV9FWENIQU5HRV9BVFRFTVBUUyAgICAxMAotI2RlZmluZSBBVEhfQUdHUl9ERUxJTV9TWiAgICAgICAgICA0Ci0jZGVmaW5lIEFUSF9BR0dSX01JTlBMRU4gICAgICAgICAgIDI1NiAvKiBpbiBieXRlcywgbWluaW11bSBwYWNrZXQgbGVuZ3RoICovCi0vKiBudW1iZXIgb2YgZGVsaW1pdGVycyBmb3IgZW5jcnlwdGlvbiBwYWRkaW5nICovCi0jZGVmaW5lIEFUSF9BR0dSX0VOQ1JZUFRERUxJTSAgICAgIDEwCi0vKiBtaW5pbXVtIGgvdyBxZGVwdGggdG8gYmUgc3VzdGFpbmVkIHRvIG1heGltaXplIGFnZ3JlZ2F0aW9uICovCi0jZGVmaW5lIEFUSF9BR0dSX01JTl9RREVQVEggICAgICAgIDIKLSNkZWZpbmUgQVRIX0FNUERVX1NVQkZSQU1FX0RFRkFVTFQgMzIKLSNkZWZpbmUgSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQgICAgNAotI2RlZmluZSBJRUVFODAyMTFfU0VRX01BWCAgICAgICAgICA0MDk2Ci0jZGVmaW5lIElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGICAgIDB4OAotI2RlZmluZSBJRUVFODAyMTFfSFRDQVBfTUFYUlhBTVBEVV9GQUNUT1IgMTMKLQotLyogcmV0dXJuIHdoZXRoZXIgYSBiaXQgYXQgaW5kZXggX24gaW4gYml0bWFwIF9ibSBpcyBzZXQKLSAqIF9zeiBpcyB0aGUgc2l6ZSBvZiB0aGUgYml0bWFwICAqLwotI2RlZmluZSBBVEhfQkFfSVNTRVQoX2JtLCBfbikgICgoKF9uKSA8IChXTUVfQkFfQk1QX1NJWkUpKSAmJgkJXAotCQkJCSgoX2JtKVsoX24pID4+IDVdICYgKDEgPDwgKChfbikgJiAzMSkpKSkKLQotLyogcmV0dXJuIGJsb2NrLWFjayBiaXRtYXAgaW5kZXggZ2l2ZW4gc2VxdWVuY2UgYW5kIHN0YXJ0aW5nIHNlcXVlbmNlICovCi0jZGVmaW5lIEFUSF9CQV9JTkRFWChfc3QsIF9zZXEpICgoKF9zZXEpIC0gKF9zdCkpICYgKElFRUU4MDIxMV9TRVFfTUFYIC0gMSkpCi0KLS8qIHJldHVybnMgZGVsaW1pdGVyIHBhZGRpbmcgcmVxdWlyZWQgZ2l2ZW4gdGhlIHBhY2tldCBsZW5ndGggKi8KLSNkZWZpbmUgQVRIX0FHR1JfR0VUX05ERUxJTShfbGVuKQkJCQkJXAotCSgoKCgoX2xlbikgKyBBVEhfQUdHUl9ERUxJTV9TWikgPCBBVEhfQUdHUl9NSU5QTEVOKSA/ICAgICAgICAgICBcCi0JICAoQVRIX0FHR1JfTUlOUExFTiAtIChfbGVuKSAtIEFUSF9BR0dSX0RFTElNX1NaKSA6IDApID4+IDIpCi0KLSNkZWZpbmUgQkFXX1dJVEhJTihfc3RhcnQsIF9iYXdzeiwgX3NlcW5vKSBcCi0JKCgoKF9zZXFubykgLSAoX3N0YXJ0KSkgJiA0MDk1KSA8IChfYmF3c3opKQotCi0jZGVmaW5lIEFUSF9EU19CQV9TRVEoX2RzKSAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfc2VxbnVtKQotI2RlZmluZSBBVEhfRFNfQkFfQklUTUFQKF9kcykgICAgICAoJihfZHMpLT5kc191cy50eC5iYV9sb3cpCi0jZGVmaW5lIEFUSF9EU19UWF9CQShfZHMpICAgICAgICAgICgoX2RzKS0+ZHNfdXMudHgudHNfZmxhZ3MgJiBBVEg5S19UWF9CQSkKLSNkZWZpbmUgQVRIX0FOXzJfVElEKF9hbiwgX3RpZG5vKSAgKCYoX2FuKS0+dGlkWyhfdGlkbm8pXSkKLQotZW51bSBBVEhfQUdHUl9TVEFUVVMgewotCUFUSF9BR0dSX0RPTkUsCi0JQVRIX0FHR1JfQkFXX0NMT1NFRCwKLQlBVEhfQUdHUl9MSU1JVEVELAotCUFUSF9BR0dSX1NIT1JUUEtULAotCUFUSF9BR0dSXzhLX0xJTUlURUQsCi19OwotCi1zdHJ1Y3QgYXRoX3R4cSB7Ci0JdTMyIGF4cV9xbnVtOwkJCS8qIGhhcmR3YXJlIHEgbnVtYmVyICovCi0JdTMyICpheHFfbGluazsJCQkvKiBsaW5rIHB0ciBpbiBsYXN0IFRYIGRlc2MgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9xOwkJLyogdHJhbnNtaXQgcXVldWUgKi8KLQlzcGlubG9ja190IGF4cV9sb2NrOwotCXVuc2lnbmVkIGxvbmcgYXhxX2xvY2tmbGFnczsJLyogaW50ciBzdGF0ZSB3aGVuIG11c3QgY2xpICovCi0JdTMyIGF4cV9kZXB0aDsJCQkvKiBxdWV1ZSBkZXB0aCAqLwotCXU4IGF4cV9hZ2dyX2RlcHRoOwkJLyogYWdncmVnYXRlcyBxdWV1ZWQgKi8KLQl1MzIgYXhxX3RvdGFscXVldWVkOwkJLyogdG90YWwgZXZlciBxdWV1ZWQgKi8KLQlib29sIHN0b3BwZWQ7CQkJLyogSXMgbWFjODAyMTEgcXVldWUgc3RvcHBlZCA/ICovCi0Jc3RydWN0IGF0aF9idWYgKmF4cV9saW5rYnVmOwkvKiB2aXJ0dWFsIGFkZHIgb2YgbGFzdCBidWZmZXIqLwotCi0JLyogZmlyc3QgZGVzYyBvZiB0aGUgbGFzdCBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMgQ1RTICovCi0Jc3RydWN0IGF0aF9kZXNjICpheHFfbGFzdGRzV2l0aENUUzsKLQotCS8qIGZpbmFsIGRlc2Mgb2YgdGhlIGdhdGluZyBkZXNjIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyCi0JICAgbGFzdGRzV2l0aENUUyBoYXMgYmVlbiBETUEnZWQgb3Igbm90ICovCi0Jc3RydWN0IGF0aF9kZXNjICpheHFfZ2F0aW5nZHM7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGF4cV9hY3E7Ci19OwotCi0jZGVmaW5lIEFHR1JfQ0xFQU5VUCAgICAgICAgIEJJVCgxKQotI2RlZmluZSBBR0dSX0FEREJBX0NPTVBMRVRFICBCSVQoMikKLSNkZWZpbmUgQUdHUl9BRERCQV9QUk9HUkVTUyAgQklUKDMpCi0KLS8qIHBlciBUSUQgYWdncmVnYXRlIHR4IHN0YXRlIGZvciBhIGRlc3RpbmF0aW9uICovCi1zdHJ1Y3QgYXRoX2F0eF90aWQgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIHJvdW5kLXJvYmluIHRpZCBlbnRyeSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgYnVmX3E7CQkvKiBwZW5kaW5nIGJ1ZmZlcnMgKi8KLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCXN0cnVjdCBhdGhfYXR4X2FjICphYzsKLQlzdHJ1Y3QgYXRoX2J1ZiAqdHhfYnVmW0FUSF9USURfTUFYX0JVRlNdOyAvKiBhY3RpdmUgdHggZnJhbWVzICovCi0JdTE2IHNlcV9zdGFydDsKLQl1MTYgc2VxX25leHQ7Ci0JdTE2IGJhd19zaXplOwotCWludCB0aWRubzsKLQlpbnQgYmF3X2hlYWQ7CQkJLyogZmlyc3QgdW4tYWNrZWQgdHggYnVmZmVyICovCi0JaW50IGJhd190YWlsOwkJCS8qIG5leHQgdW51c2VkIHR4IGJ1ZmZlciBzbG90ICovCi0JaW50IHNjaGVkOwotCWludCBwYXVzZWQ7Ci0JdTggc3RhdGU7Ci0JaW50IGFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHM7Ci19OwotCi0vKiBwZXIgYWNjZXNzLWNhdGVnb3J5IGFnZ3JlZ2F0ZSB0eCBzdGF0ZSBmb3IgYSBkZXN0aW5hdGlvbiAqLwotc3RydWN0IGF0aF9hdHhfYWMgewotCWludCBzY2hlZDsJCQkvKiBkZXN0LWFjIGlzIHNjaGVkdWxlZCAqLwotCWludCBxbnVtOwkJCS8qIEgvVyBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZAotCQkJCQkgICB3aXRoIHRoaXMgQUMgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiByb3VuZC1yb2JpbiB0eHEgZW50cnkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHRpZF9xOwkJLyogcXVldWUgb2YgVElEcyB3aXRoIGJ1ZmZlcnMgKi8KLX07Ci0KLS8qIHBlci1mcmFtZSB0eCBjb250cm9sIGJsb2NrICovCi1zdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgewotCXN0cnVjdCBhdGhfdHhxICp0eHE7Ci0JaW50IGlmX2lkOwotfTsKLQotLyogcGVyIGZyYW1lIHR4IHN0YXR1cyBibG9jayAqLwotc3RydWN0IGF0aF94bWl0X3N0YXR1cyB7Ci0JaW50IHJldHJpZXM7CS8qIG51bWJlciBvZiByZXRyaWVzIHRvIHN1Y2Nlc3N1ZnVsbHkKLQkJCSAgIHRyYW5zbWl0IHRoaXMgZnJhbWUgKi8KLQlpbnQgZmxhZ3M7CS8qIHN0YXR1cyBvZiB0cmFuc21pdCAqLwotI2RlZmluZSBBVEhfVFhfRVJST1IgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRIX1RYX1hSRVRSWSAgICAgICAweDAyCi0jZGVmaW5lIEFUSF9UWF9CQVIgICAgICAgICAgMHgwNAotfTsKLQotLyogQWxsIFJTU0kgdmFsdWVzIGFyZSBub2lzZSBmbG9vciBhZGp1c3RlZCAqLwotc3RydWN0IGF0aF90eF9zdGF0IHsKLQlpbnQgcnNzaTsKLQlpbnQgcnNzaWN0bFtBVEhfTUFYX0FOVEVOTkFdOwotCWludCByc3NpZXh0bltBVEhfTUFYX0FOVEVOTkFdOwotCWludCByYXRlaWVlZTsKLQlpbnQgcmF0ZUticHM7Ci0JaW50IHJhdGVjb2RlOwotCWludCBmbGFnczsKLQl1MzIgYWlydGltZTsJLyogdGltZSBvbiBhaXIgcGVyIGZpbmFsIHR4IHJhdGUgKi8KLX07Ci0KLXN0cnVjdCBhZ2dyX3JpZnNfcGFyYW0gewotCWludCBwYXJhbV9tYXhfZnJhbWVzOwotCWludCBwYXJhbV9tYXhfbGVuOwotCWludCBwYXJhbV9ybDsKLQlpbnQgcGFyYW1fYWw7Ci0Jc3RydWN0IGF0aF9yY19zZXJpZXMgKnBhcmFtX3JjczsKLX07Ci0KLXN0cnVjdCBhdGhfbm9kZSB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqYW5fc2M7Ci0Jc3RydWN0IGF0aF9hdHhfdGlkIHRpZFtXTUVfTlVNX1RJRF07Ci0Jc3RydWN0IGF0aF9hdHhfYWMgYWNbV01FX05VTV9BQ107Ci0JdTE2IG1heGFtcGR1OwotCXU4IG1wZHVkZW5zaXR5OwotfTsKLQotc3RydWN0IGF0aF90eCB7Ci0JdTE2IHNlcV9ubzsKLQl1MzIgdHhxc2V0dXA7Ci0JaW50IGh3cV9tYXBbQVRIOUtfV01FX0FDX1ZPKzFdOwotCXNwaW5sb2NrX3QgdHhidWZsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgdHhidWY7Ci0Jc3RydWN0IGF0aF90eHEgdHhxW0FUSDlLX05VTV9UWF9RVUVVRVNdOwotCXN0cnVjdCBhdGhfZGVzY2RtYSB0eGRtYTsKLX07Ci0KLXN0cnVjdCBhdGhfcnggewotCXU4IGRlZmFudDsKLQl1OCByeG90aGVyYW50OwotCXUzMiAqcnhsaW5rOwotCWludCBidWZzaXplOwotCXVuc2lnbmVkIGludCByeGZpbHRlcjsKLQlzcGlubG9ja190IHJ4Zmx1c2hsb2NrOwotCXNwaW5sb2NrX3QgcnhidWZsb2NrOwotCXN0cnVjdCBsaXN0X2hlYWQgcnhidWY7Ci0Jc3RydWN0IGF0aF9kZXNjZG1hIHJ4ZG1hOwotfTsKLQotaW50IGF0aF9zdGFydHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotYm9vbCBhdGhfc3RvcHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotdm9pZCBhdGhfZmx1c2hyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLXUzMiBhdGhfY2FsY3J4ZmlsdGVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfcnhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKTsKLXZvaWQgYXRoX3J4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotaW50IGF0aF9yeF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZmx1c2gpOwotc3RydWN0IGF0aF90eHEgKmF0aF90eHFfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IHN1YnR5cGUpOwotdm9pZCBhdGhfdHhfY2xlYW51cHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOwotaW50IGF0aF90eF9zZXR1cChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGhhbHR5cGUpOwotdm9pZCBhdGhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotdm9pZCBhdGhfdHhfZHJhaW50eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCSAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCk7Ci12b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pOwotdm9pZCBhdGhfdHhfbm9kZV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKTsKLXZvaWQgYXRoX3R4X25vZGVfZnJlZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9ub2RlICphbik7Ci12b2lkIGF0aF90eHFfc2NoZWR1bGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpOwotaW50IGF0aF90eF9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgbmJ1ZnMpOwotaW50IGF0aF90eF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKLWludCBhdGhfdHhfZ2V0X3FudW0oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IGhhbHR5cGUpOwotc3RydWN0IGF0aF90eHEgKmF0aF90ZXN0X2dldF90eHEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGF0aF90eHFfdXBkYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcW51bSwKLQkJICAgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnEpOwotaW50IGF0aF90eF9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIHN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpOwotdm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci11MzIgYXRoX3R4cV9kZXB0aChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0pOwotdTMyIGF0aF90eHFfYWdncl9kZXB0aChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0pOwotdm9pZCBhdGhfdHhfY2FicShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIGF0aF90eF9yZXN1bWVfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCk7Ci1ib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci12b2lkIGF0aF90eF9hZ2dyX3RlYXJkb3duKHN0cnVjdCBhdGhfc29mdGMgKnNjLAlzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubyk7Ci1pbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCi0JCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKTsKLWludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKLXZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKLQotLyoqKioqKioqLwotLyogVkFQcyAqLwotLyoqKioqKioqLwotCi0vKgotICogRGVmaW5lIHRoZSBzY2hlbWUgdGhhdCB3ZSBzZWxlY3QgTUFDIGFkZHJlc3MgZm9yIG11bHRpcGxlCi0gKiBCU1Mgb24gdGhlIHNhbWUgcmFkaW8uIFRoZSB2ZXJ5IGZpcnN0IFZBUCB3aWxsIGp1c3QgdXNlIHRoZSBNQUMKLSAqIGFkZHJlc3MgZnJvbSB0aGUgRUVQUk9NLiBGb3IgdGhlIG5leHQgMyBWQVBzLCB3ZSBzZXQgdGhlCi0gKiBVL0wgYml0IChiaXQgMSkgaW4gTUFDIGFkZHJlc3MsIGFuZCB1c2UgdGhlIG5leHQgdHdvIGJpdHMgYXMgdGhlCi0gKiBpbmRleCBvZiB0aGUgVkFQLgotICovCi0KLSNkZWZpbmUgQVRIX1NFVF9WQVBfQlNTSURfTUFTSyhic3NpZF9tYXNrKSBcCi0JKChic3NpZF9tYXNrKVswXSAmPSB+KCgoQVRIX0JDQlVGLTEpPDwyKXwweDAyKSkKLQotc3RydWN0IGF0aF92YXAgewotCWludCBhdl9ic2xvdDsKLQllbnVtIG5sODAyMTFfaWZ0eXBlIGF2X29wbW9kZTsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYXZfYmNidWY7Ci0Jc3RydWN0IGF0aF90eF9jb250cm9sIGF2X2J0eGN0bDsKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqLwotLyogQmVhY29uIEhhbmRsaW5nICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBiZWFjb25zIHdlIHN0YWdnZXIsIChpLmUuIHJlZ2FyZGxlc3Mgb2YgdGhlCi0gKiBudW1iZXIgb2YgQlNTSURzKSBpZiBhIGdpdmVuIGJlYWNvbiBkb2VzIG5vdCBnbyBvdXQgZXZlbiBhZnRlciB3YWl0aW5nIHRoaXMKLSAqIG51bWJlciBvZiBiZWFjb24gaW50ZXJ2YWxzLCB0aGUgZ2FtZSdzIHVwLgotICovCi0jZGVmaW5lIEJTVFVDS19USFJFU0ggICAgICAgICAgIAkoOSAqIEFUSF9CQ0JVRikKLSNkZWZpbmUJQVRIX0JDQlVGICAgICAgICAgICAgICAgCTEKLSNkZWZpbmUgQVRIX0RFRkFVTFRfQklOVFZBTCAgICAgCTEwMCAvKiBUVSAqLwotI2RlZmluZSBBVEhfREVGQVVMVF9CTUlTU19MSU1JVCAJMTAKLSNkZWZpbmUgSUVFRTgwMjExX01TX1RPX1RVKHgpICAgICAgICAgICAoKCh4KSAqIDEwMDApIC8gMTAyNCkKLQotc3RydWN0IGF0aF9iZWFjb25fY29uZmlnIHsKLQl1MTYgYmVhY29uX2ludGVydmFsOwotCXUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JdTE2IGR0aW1fcGVyaW9kOwotCXUxNiBibWlzc190aW1lb3V0OwotCXU4IGR0aW1fY291bnQ7Ci0JdTggdGltX29mZnNldDsKLQl1bmlvbiB7Ci0JCXU2NCBsYXN0X3RzZjsKLQkJdTggbGFzdF90c3RhbXBbOF07Ci0JfSB1OyAvKiBsYXN0IHJlY2VpdmVkIGJlYWNvbi9wcm9iZSByZXNwb25zZSB0aW1lc3RhbXAgb2YgdGhpcyBCU1MuICovCi19OwotCi1zdHJ1Y3QgYXRoX2JlYWNvbiB7Ci0JZW51bSB7Ci0JCU9LLAkJLyogbm8gY2hhbmdlIG5lZWRlZCAqLwotCQlVUERBVEUsCQkvKiB1cGRhdGUgcGVuZGluZyAqLwotCQlDT01NSVQJCS8qIGJlYWNvbiBzZW50LCBjb21taXQgY2hhbmdlICovCi0JfSB1cGRhdGVzbG90OwkJLyogc2xvdCB0aW1lIHVwZGF0ZSBmc20gKi8KLQotCXUzMiBiZWFjb25xOwotCXUzMiBibWlzc2NudDsKLQl1MzIgYXN0X2JlX3htaXQ7Ci0JdTY0IGJjX3RzdGFtcDsKLQlpbnQgYnNsb3RbQVRIX0JDQlVGXTsKLQlpbnQgc2xvdHRpbWU7Ci0JaW50IHNsb3R1cGRhdGU7Ci0Jc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gYmVhY29uX3FpOwotCXN0cnVjdCBhdGhfZGVzY2RtYSBiZG1hOwotCXN0cnVjdCBhdGhfdHhxICpjYWJxOwotCXN0cnVjdCBsaXN0X2hlYWQgYmJ1ZjsKLX07Ci0KLXZvaWQgYXRoOWtfYmVhY29uX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLXZvaWQgYXRoX2JlYWNvbl9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBpZl9pZCk7Ci1pbnQgYXRoX2JlYWNvbnFfc2V0dXAoc3RydWN0IGF0aF9oYWwgKmFoKTsKLWludCBhdGhfYmVhY29uX2FsbG9jKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQpOwotdm9pZCBhdGhfYmVhY29uX3JldHVybihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF92YXAgKmF2cCk7Ci12b2lkIGF0aF9iZWFjb25fc3luYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlmX2lkKTsKLQotLyoqKioqKiovCi0vKiBBTkkgKi8KLS8qKioqKioqLwotCi0vKiBBTkkgdmFsdWVzIGZvciBTVEEgb25seS4KLSAgIEZJWE1FOiBBZGQgYXBwcm9wcmlhdGUgdmFsdWVzIGZvciBBUCBsYXRlciAqLwotCi0jZGVmaW5lIEFUSF9BTklfUE9MTElOVEVSVkFMICAgIDEwMCAgICAgLyogMTAwIG1pbGxpc2Vjb25kcyBiZXR3ZWVuIEFOSSBwb2xsICovCi0jZGVmaW5lIEFUSF9TSE9SVF9DQUxJTlRFUlZBTCAgIDEwMDAgICAgLyogMSBzZWNvbmQgYmV0d2VlbiBjYWxpYnJhdGlvbnMgKi8KLSNkZWZpbmUgQVRIX0xPTkdfQ0FMSU5URVJWQUwgICAgMzAwMDAgICAvKiAzMCBzZWNvbmRzIGJldHdlZW4gY2FsaWJyYXRpb25zICovCi0jZGVmaW5lIEFUSF9SRVNUQVJUX0NBTElOVEVSVkFMIDEyMDAwMDAgLyogMjAgbWludXRlcyBiZXR3ZWVuIGNhbGlicmF0aW9ucyAqLwotCi1zdHJ1Y3QgYXRoX2FuaSB7Ci0JYm9vbCBzY19jYWxkb25lOwotCWludDE2X3Qgc2Nfbm9pc2VfZmxvb3I7Ci0JdW5zaWduZWQgaW50IHNjX2xvbmdjYWxfdGltZXI7Ci0JdW5zaWduZWQgaW50IHNjX3Nob3J0Y2FsX3RpbWVyOwotCXVuc2lnbmVkIGludCBzY19yZXNldGNhbF90aW1lcjsKLQl1bnNpZ25lZCBpbnQgc2NfY2hlY2thbmlfdGltZXI7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci19OwotCi0vKioqKioqKioqKioqKioqKioqKiovCi0vKiAgIExFRCBDb250cm9sICAgICovCi0vKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgQVRIX0xFRF9QSU4JMQotCi1lbnVtIGF0aF9sZWRfdHlwZSB7Ci0JQVRIX0xFRF9SQURJTywKLQlBVEhfTEVEX0FTU09DLAotCUFUSF9MRURfVFgsCi0JQVRIX0xFRF9SWAotfTsKLQotc3RydWN0IGF0aF9sZWQgewotCXN0cnVjdCBhdGhfc29mdGMgKnNjOwotCXN0cnVjdCBsZWRfY2xhc3NkZXYgbGVkX2NkZXY7Ci0JZW51bSBhdGhfbGVkX3R5cGUgbGVkX3R5cGU7Ci0JY2hhciBuYW1lWzMyXTsKLQlib29sIHJlZ2lzdGVyZWQ7Ci19OwotCi0vKiBSZmtpbGwgKi8KLSNkZWZpbmUgQVRIX1JGS0lMTF9QT0xMX0lOVEVSVkFMCTIwMDAgLyogbXNlY3MgKi8KLQotc3RydWN0IGF0aF9yZmtpbGwgewotCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOwotCWNoYXIgcmZraWxsX25hbWVbMzJdOwotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqLwotLyogTWFpbiBkcml2ZXIgY29yZSAqLwotLyoqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogRGVmYXVsdCBjYWNoZSBsaW5lIHNpemUsIGluIGJ5dGVzLgotICogVXNlZCB3aGVuIFBDSSBkZXZpY2Ugbm90IGZ1bGx5IGluaXRpYWxpemVkIGJ5IGJvb3Ryb20vQklPUwotKi8KLSNkZWZpbmUgREVGQVVMVF9DQUNIRUxJTkUgICAgICAgMzIKLSNkZWZpbmUJQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1IgLTk1Ci0jZGVmaW5lIEFUSF9SRUdDTEFTU0lEU19NQVggICAgIDEwCi0jZGVmaW5lIEFUSF9DQUJRX1JFQURZX1RJTUUgICAgIDgwICAgICAgLyogJSBvZiBiZWFjb24gaW50ZXJ2YWwgKi8KLSNkZWZpbmUgQVRIX01BWF9TV19SRVRSSUVTICAgICAgMTAKLSNkZWZpbmUgQVRIX0NIQU5fTUFYICAgICAgICAgICAgMjU1Ci0jZGVmaW5lIElFRUU4MDIxMV9XRVBfTktJRCAgICAgIDQgICAgICAgLyogbnVtYmVyIG9mIGtleSBpZHMgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1JBVEVfVkFMICAgICAgMHg3ZgotLyoKLSAqIFRoZSBrZXkgY2FjaGUgaXMgdXNlZCBmb3IgaC93IGNpcGhlciBzdGF0ZSBhbmQgYWxzbyBmb3IKLSAqIHRyYWNraW5nIHN0YXRpb24gc3RhdGUgc3VjaCBhcyB0aGUgY3VycmVudCB0eCBhbnRlbm5hLgotICogV2UgYWxzbyBzZXR1cCBhIG1hcHBpbmcgdGFibGUgYmV0d2VlbiBrZXkgY2FjaGUgc2xvdCBpbmRpY2VzCi0gKiBhbmQgc3RhdGlvbiBzdGF0ZSB0byBzaG9ydC1jaXJjdWl0IG5vZGUgbG9va3VwcyBvbiByeC4KLSAqIERpZmZlcmVudCBwYXJ0cyBoYXZlIGRpZmZlcmVudCBzaXplIGtleSBjYWNoZXMuICBXZSBoYW5kbGUKLSAqIHVwIHRvIEFUSF9LRVlNQVggZW50cmllcyAoY291bGQgZHluYW1pY2FsbHkgYWxsb2NhdGUgc3RhdGUpLgotICovCi0jZGVmaW5lCUFUSF9LRVlNQVgJICAgICAgICAxMjggICAgIC8qIG1heCBrZXkgY2FjaGUgc2l6ZSB3ZSBoYW5kbGUgKi8KLQotI2RlZmluZSBBVEhfSUZfSURfQU5ZICAgCTB4ZmYKLSNkZWZpbmUgQVRIX1RYUE9XRVJfTUFYICAgICAgICAgMTAwICAgICAvKiAuNSBkQm0gdW5pdHMgKi8KLSNkZWZpbmUgQVRIX1JTU0lfRFVNTVlfTUFSS0VSICAgMHgxMjcKLSNkZWZpbmUgQVRIX1JBVEVfRFVNTVlfTUFSS0VSICAgMAotCi1lbnVtIFBST1RfTU9ERSB7Ci0JUFJPVF9NX05PTkUgPSAwLAotCVBST1RfTV9SVFNDVFMsCi0JUFJPVF9NX0NUU09OTFkKLX07Ci0KLSNkZWZpbmUgU0NfT1BfSU5WQUxJRAkJQklUKDApCi0jZGVmaW5lIFNDX09QX0JFQUNPTlMJCUJJVCgxKQotI2RlZmluZSBTQ19PUF9SWEFHR1IJCUJJVCgyKQotI2RlZmluZSBTQ19PUF9UWEFHR1IJCUJJVCgzKQotI2RlZmluZSBTQ19PUF9DSEFJTk1BU0tfVVBEQVRFCUJJVCg0KQotI2RlZmluZSBTQ19PUF9GVUxMX1JFU0VUCUJJVCg1KQotI2RlZmluZSBTQ19PUF9OT19SRVNFVAkJQklUKDYpCi0jZGVmaW5lIFNDX09QX1BSRUFNQkxFX1NIT1JUCUJJVCg3KQotI2RlZmluZSBTQ19PUF9QUk9URUNUX0VOQUJMRQlCSVQoOCkKLSNkZWZpbmUgU0NfT1BfUlhGTFVTSAkJQklUKDkpCi0jZGVmaW5lIFNDX09QX0xFRF9BU1NPQ0lBVEVECUJJVCgxMCkKLSNkZWZpbmUgU0NfT1BfUkZLSUxMX1JFR0lTVEVSRUQJQklUKDExKQotI2RlZmluZSBTQ19PUF9SRktJTExfU1dfQkxPQ0tFRAlCSVQoMTIpCi0jZGVmaW5lIFNDX09QX1JGS0lMTF9IV19CTE9DS0VECUJJVCgxMykKLQotc3RydWN0IGF0aF9zb2Z0YyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGludHJfdHE7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGJjb25fdGFza2xldDsKLQlzdHJ1Y3QgYXRoX2hhbCAqc2NfYWg7Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0Jc3BpbmxvY2tfdCBzY19yZXNldGxvY2s7Ci0Jc3RydWN0IG11dGV4IG11dGV4OwotCi0JdTggc2NfY3VyYnNzaWRbRVRIX0FMRU5dOwotCXU4IHNjX215YWRkcltFVEhfQUxFTl07Ci0JdTggc2NfYnNzaWRtYXNrW0VUSF9BTEVOXTsKLQl1MzIgc2NfaW50cnN0YXR1czsKLQl1MzIgc2NfZmxhZ3M7IC8qIFNDX09QXyogKi8KLQl1MTYgc2NfY3VydHhwb3c7Ci0JdTE2IHNjX2N1cmFpZDsKLQl1MTYgc2NfY2FjaGVsc3o7Ci0JdTggc2NfbmJjbnZhcHM7Ci0JdTE2IHNjX252YXBzOwotCXU4IHNjX3R4X2NoYWlubWFzazsKLQl1OCBzY19yeF9jaGFpbm1hc2s7Ci0JdTMyIHNjX2tleW1heDsKLQlERUNMQVJFX0JJVE1BUChzY19rZXltYXAsIEFUSF9LRVlNQVgpOwotCXU4IHNjX3NwbGl0bWljOwotCXU4IHNjX3Byb3RyaXg7Ci0JZW51bSBhdGg5a19pbnQgc2NfaW1hc2s7Ci0JZW51bSBQUk9UX01PREUgc2NfcHJvdG1vZGU7Ci0JZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBzY19odF9leHRwcm90c3BhY2luZzsKLQllbnVtIGF0aDlrX2h0X21hY21vZGUgdHhfY2hhbl93aWR0aDsKLQotCXN0cnVjdCBhdGhfY29uZmlnIHNjX2NvbmZpZzsKLQlzdHJ1Y3QgYXRoX3J4IHJ4OwotCXN0cnVjdCBhdGhfdHggdHg7Ci0Jc3RydWN0IGF0aF9iZWFjb24gYmVhY29uOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICpzY192YXBzW0FUSF9CQ0JVRl07Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdW0FUSF9SQVRFX01BWF07Ci0Jc3RydWN0IGF0aF9yYXRlX3RhYmxlICpod19yYXRlX3RhYmxlW0FUSDlLX01PREVfTUFYXTsKLQlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKmN1cl9yYXRlX3RhYmxlOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1tJRUVFODAyMTFfTlVNX0JBTkRTXVtBVEhfQ0hBTl9NQVhdOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwotCXN0cnVjdCBhdGhfbGVkIHJhZGlvX2xlZDsKLQlzdHJ1Y3QgYXRoX2xlZCBhc3NvY19sZWQ7Ci0Jc3RydWN0IGF0aF9sZWQgdHhfbGVkOwotCXN0cnVjdCBhdGhfbGVkIHJ4X2xlZDsKLQlzdHJ1Y3QgYXRoX3Jma2lsbCByZl9raWxsOwotCXN0cnVjdCBhdGhfYW5pIHNjX2FuaTsKLQlzdHJ1Y3QgYXRoOWtfbm9kZV9zdGF0cyBzY19oYWxzdGF0czsKLSNpZmRlZiBDT05GSUdfQVRIOUtfREVCVUcKLQlzdHJ1Y3QgYXRoOWtfZGVidWcgc2NfZGVidWc7Ci0jZW5kaWYKLX07Ci0KLWludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpOwotaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci1pbnQgYXRoX2dldF9tYWM4MDIxMV9xbnVtKHUzMiBxdWV1ZSwgc3RydWN0IGF0aF9zb2Z0YyAqc2MpOwotaW50IGF0aF9jYWJxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICopOwotCi0jZW5kaWYgLyogQ09SRV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuYwppbmRleCBhODBlZDU3Li5mZGY5NTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2RlYnVnLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNCwxOSArMTQsMjEgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgImF0aDlrLmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYXRoOWtfZGVidWcgPSBEQkdfREVGQVVMVDsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXRoOWtfZGVidWcsIHVpbnQsIDApOwogCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXRoOWtfZGVidWdmc19yb290OworCiB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJaWYgKCFzYykKIAkJcmV0dXJuOwogCi0JaWYgKHNjLT5zY19kZWJ1Zy5kZWJ1Z19tYXNrICYgZGJnX21hc2spIHsKKwlpZiAoc2MtPmRlYnVnLmRlYnVnX21hc2sgJiBkYmdfbWFzaykgewogCQl2YV9saXN0IGFyZ3M7CiAKIAkJdmFfc3RhcnQoYXJncywgZm10KTsKQEAgLTQ2LDcgKzQ4LDcgQEAKIAkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWNoYXIgYnVmWzEwMjRdOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCXUzMiB2YWxbQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTXTsKQEAgLTEzMiw0MSArMTM0LDQxIEBACiB2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKQogewogCWlmIChzdGF0dXMpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMudG90YWwrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50b3RhbCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfUlgpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvaysrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4b2srKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1JYRU9MKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4ZW9sKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhlb2wrKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1JYT1JOKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnJ4b3JuKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvcm4rKzsKIAlpZiAoc3RhdHVzICYgQVRIOUtfSU5UX1RYKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4b2srKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50eG9rKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9UWFVSTikKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50eHVybisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnR4dXJuKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9NSUIpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMubWliKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMubWliKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9SWFBIWSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeHBoeWVycisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4cGh5ZXJyKys7CiAJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9SWEtDTSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhfa2V5Y2FjaGVfbWlzcysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfU1dCQSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5zd2JhKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuc3diYSsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQk1JU1MpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm1pc3MrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5ibWlzcysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQk5SKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmJucisrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmJucisrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQ1NUKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmNzdCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmNzdCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfR1RUKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmd0dCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmd0dCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVElNKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnRpbSsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnRpbSsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQ0FCRU5EKQotCQlzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLmNhYmVuZCsrOworCQlzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmNhYmVuZCsrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRFRJTVNZTkMpCi0JCXNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMrKzsKKwkJc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5kdGltc3luYysrOwogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRFRJTSkKLQkJc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5kdGltKys7CisJCXNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSsrOwogfQogCiBzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfaW50ZXJydXB0KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCkBAIC0xNzcsNDEgKzE3OSw0MSBAQAogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvayk7CisJCSIlOHM6ICUxMHVcbiIsICJSWCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvayk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWEVPTCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhlb2wpOworCQkiJThzOiAlMTB1XG4iLCAiUlhFT0wiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4ZW9sKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlJYT1JOIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeG9ybik7CisJCSIlOHM6ICUxMHVcbiIsICJSWE9STiIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMucnhvcm4pOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiVFgiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4b2spOworCQkiJThzOiAlMTB1XG4iLCAiVFgiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnR4b2spOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiVFhVUk4iLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnR4dXJuKTsKKwkJIiU4czogJTEwdVxuIiwgIlRYVVJOIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy50eHVybik7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJNSUIiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLm1pYik7CisJCSIlOHM6ICUxMHVcbiIsICJNSUIiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLm1pYik7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJSWFBIWSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMucnhwaHllcnIpOworCQkiJThzOiAlMTB1XG4iLCAiUlhQSFkiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLnJ4cGh5ZXJyKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlJYS0NNIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKTsKKwkJIiU4czogJTEwdVxuIiwgIlJYS0NNIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5yeF9rZXljYWNoZV9taXNzKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlNXQkEiLCBzYy0+c2NfZGVidWcuc3RhdHMuaXN0YXRzLnN3YmEpOworCQkiJThzOiAlMTB1XG4iLCAiU1dCQSIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuc3diYSk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCi0JCSIlOHM6ICUxMHVcbiIsICJCTUlTUyIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm1pc3MpOworCQkiJThzOiAlMTB1XG4iLCAiQk1JU1MiLCBzYy0+ZGVidWcuc3RhdHMuaXN0YXRzLmJtaXNzKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkJOUiIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuYm5yKTsKKwkJIiU4czogJTEwdVxuIiwgIkJOUiIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuYm5yKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkNTVCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuY3N0KTsKKwkJIiU4czogJTEwdVxuIiwgIkNTVCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuY3N0KTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkdUVCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZ3R0KTsKKwkJIiU4czogJTEwdVxuIiwgIkdUVCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZ3R0KTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlRJTSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMudGltKTsKKwkJIiU4czogJTEwdVxuIiwgIlRJTSIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudGltKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkNBQkVORCIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuY2FiZW5kKTsKKwkJIiU4czogJTEwdVxuIiwgIkNBQkVORCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuY2FiZW5kKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIkRUSU1TWU5DIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy5kdGltc3luYyk7CisJCSIlOHM6ICUxMHVcbiIsICJEVElNU1lOQyIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbXN5bmMpOwogCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAotCQkiJThzOiAlMTB1XG4iLCAiRFRJTSIsIHNjLT5zY19kZWJ1Zy5zdGF0cy5pc3RhdHMuZHRpbSk7CisJCSIlOHM6ICUxMHVcbiIsICJEVElNIiwgc2MtPmRlYnVnLnN0YXRzLmlzdGF0cy5kdGltKTsKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKLQkJIiU4czogJTEwdVxuIiwgIlRPVEFMIiwgc2MtPnNjX2RlYnVnLnN0YXRzLmlzdGF0cy50b3RhbCk7CisJCSIlOHM6ICUxMHVcbiIsICJUT1RBTCIsIHNjLT5kZWJ1Zy5zdGF0cy5pc3RhdHMudG90YWwpOwogCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOwogfQpAQCAtMjIyLDI5ICsyMjQsMzA4IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUKIH07CiAKK3N0YXRpYyB2b2lkIGF0aF9kZWJ1Z19zdGF0XzExbl9yYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2ID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcyA9IHR4X2luZm8tPnN0YXR1cy5yYXRlczsKKwlpbnQgZmluYWxfdHNfaWR4LCBpZHg7CisKKwl0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCWZpbmFsX3RzX2lkeCA9IHR4X2luZm9fcHJpdi0+dHgudHNfcmF0ZWluZGV4OworCWlkeCA9IHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tyYXRlc1tmaW5hbF90c19pZHhdLmlkeF0uZG90MTFyYXRlOworCisJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpZHhdLnN1Y2Nlc3MrKzsKK30KKworc3RhdGljIHZvaWQgYXRoX2RlYnVnX3N0YXRfbGVnYWN5X3JjKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGVzID0gdHhfaW5mby0+c3RhdHVzLnJhdGVzOworCWludCBmaW5hbF90c19pZHgsIGlkeDsKKworCXR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7CisJZmluYWxfdHNfaWR4ID0gdHhfaW5mb19wcml2LT50eC50c19yYXRlaW5kZXg7CisJaWR4ID0gcmF0ZXNbZmluYWxfdHNfaWR4XS5pZHg7CisKKwlzYy0+ZGVidWcuc3RhdHMubGVnYWN5X3Jjc3RhdHNbaWR4XS5zdWNjZXNzKys7Cit9CisKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcmMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpCisJCWF0aF9kZWJ1Z19zdGF0XzExbl9yYyhzYywgc2tiKTsKKwllbHNlCisJCWF0aF9kZWJ1Z19zdGF0X2xlZ2FjeV9yYyhzYywgc2tiKTsKK30KKworLyogRklYTUU6IGxlZ2FjeSByYXRlcywgbGF0ZXIgb24gLi4gKi8KK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcmV0cmllcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHJpeCwKKwkJCSAgICBpbnQgeHJldHJpZXMsIGludCByZXRyaWVzLCB1OCBwZXIpCit7CisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpIHsKKwkJaW50IGlkeCA9IHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tyaXhdLmRvdDExcmF0ZTsKKworCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2lkeF0ueHJldHJpZXMgKz0geHJldHJpZXM7CisJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaWR4XS5yZXRyaWVzICs9IHJldHJpZXM7CisJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaWR4XS5wZXIgPSBwZXI7CisJfQorfQorCitzdGF0aWMgc3NpemVfdCBhdGhfcmVhZF9maWxlX3N0YXRfMTFuX3JjKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTAyNF07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJaW50IGkgPSAwOworCisJbGVuICs9IHNwcmludGYoYnVmLCAiJTdzICUxM3MgJThzICU4cyAlNnNcblxuIiwgIlJhdGUiLCAiU3VjY2VzcyIsCisJCSAgICAgICAiUmV0cmllcyIsICJYUmV0cmllcyIsICJQRVIiKTsKKworCWZvciAoaSA9IDA7IGkgPD0gMTU7IGkrKykgeworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCQkiJTVzJTNkOiAlOHUgJTh1ICU4dSAlOHVcbiIsICJNQ1MiLCBpLAorCQkJCXNjLT5kZWJ1Zy5zdGF0cy5uX3Jjc3RhdHNbaV0uc3VjY2VzcywKKwkJCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2ldLnJldHJpZXMsCisJCQkJc2MtPmRlYnVnLnN0YXRzLm5fcmNzdGF0c1tpXS54cmV0cmllcywKKwkJCQlzYy0+ZGVidWcuc3RhdHMubl9yY3N0YXRzW2ldLnBlcik7CisJfQorCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdCBhdGhfcmVhZF9maWxlX3N0YXRfbGVnYWN5X3JjKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICAgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbNTEyXTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMDsKKwlpbnQgaSA9IDA7CisKKwlsZW4gKz0gc3ByaW50ZihidWYsICIlN3MgJTEzc1xuXG4iLCAiUmF0ZSIsICJTdWNjZXNzIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPmN1cl9yYXRlX3RhYmxlLT5yYXRlX2NudDsgaSsrKSB7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJTV1OiAlMTJ1XG4iLAorCQkJCXNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tpXS5yYXRla2JwcyAvIDEwMDAsCisJCQkJc2MtPmRlYnVnLnN0YXRzLmxlZ2FjeV9yY3N0YXRzW2ldLnN1Y2Nlc3MpOworCX0KKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3Jjc3RhdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHNjLT5jdXJfcmF0ZV90YWJsZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWlmIChjb25mX2lzX2h0KCZzYy0+aHctPmNvbmYpKQorCQlyZXR1cm4gYXRoX3JlYWRfZmlsZV9zdGF0XzExbl9yYyhmaWxlLCB1c2VyX2J1ZiwgY291bnQsIHBwb3MpOworCWVsc2UKKwkJcmV0dXJuIGF0aF9yZWFkX2ZpbGVfc3RhdF9sZWdhY3lfcmMoZmlsZSwgdXNlcl9idWYsIGNvdW50ICxwcG9zKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19yY3N0YXQgPSB7CisJLnJlYWQgPSByZWFkX2ZpbGVfcmNzdGF0LAorCS5vcGVuID0gYXRoOWtfZGVidWdmc19vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGF0aF93aXBoeV9zdGF0ZV9zdHIoZW51bSBhdGhfd2lwaHlfc3RhdGUgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgQVRIX1dJUEhZX0lOQUNUSVZFOgorCQlyZXR1cm4gIklOQUNUSVZFIjsKKwljYXNlIEFUSF9XSVBIWV9BQ1RJVkU6CisJCXJldHVybiAiQUNUSVZFIjsKKwljYXNlIEFUSF9XSVBIWV9QQVVTSU5HOgorCQlyZXR1cm4gIlBBVVNJTkciOworCWNhc2UgQVRIX1dJUEhZX1BBVVNFRDoKKwkJcmV0dXJuICJQQVVTRUQiOworCWNhc2UgQVRIX1dJUEhZX1NDQU46CisJCXJldHVybiAiU0NBTiI7CisJfQorCXJldHVybiAiPyI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV93aXBoeShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzUxMl07CisJdW5zaWduZWQgaW50IGxlbiA9IDA7CisJaW50IGk7CisJdTggYWRkcltFVEhfQUxFTl07CisKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSJwcmltYXJ5OiAlcyAoJXMgY2hhbj0lZCBodD0lZClcbiIsCisJCQl3aXBoeV9uYW1lKHNjLT5wcmlfd2lwaHktPmh3LT53aXBoeSksCisJCQlhdGhfd2lwaHlfc3RhdGVfc3RyKHNjLT5wcmlfd2lwaHktPnN0YXRlKSwKKwkJCXNjLT5wcmlfd2lwaHktPmNoYW5faWR4LCBzYy0+cHJpX3dpcGh5LT5jaGFuX2lzX2h0KTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJaWYgKGFwaHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCQkic2Vjb25kYXJ5OiAlcyAoJXMgY2hhbj0lZCBodD0lZClcbiIsCisJCQkJd2lwaHlfbmFtZShhcGh5LT5ody0+d2lwaHkpLAorCQkJCWF0aF93aXBoeV9zdGF0ZV9zdHIoYXBoeS0+c3RhdGUpLAorCQkJCWFwaHktPmNoYW5faWR4LCBhcGh5LT5jaGFuX2lzX2h0KTsKKwl9CisKKwlwdXRfdW5hbGlnbmVkX2xlMzIoUkVHX1JFQUQoc2MtPnNjX2FoLCBBUl9TVEFfSUQwKSwgYWRkcik7CisJcHV0X3VuYWxpZ25lZF9sZTE2KFJFR19SRUFEKHNjLT5zY19haCwgQVJfU1RBX0lEMSkgJiAweGZmZmYsIGFkZHIgKyA0KTsKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJCSJhZGRyOiAlcE1cbiIsIGFkZHIpOworCXB1dF91bmFsaWduZWRfbGUzMihSRUdfUkVBRChzYy0+c2NfYWgsIEFSX0JTU01TS0wpLCBhZGRyKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoUkVHX1JFQUQoc2MtPnNjX2FoLCBBUl9CU1NNU0tVKSAmIDB4ZmZmZiwgYWRkciArIDQpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCQkJImFkZHJtYXNrOiAlcE1cbiIsIGFkZHIpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3RydWN0IGF0aF93aXBoeSAqIGdldF93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaTsKKwlpZiAoc3RyY21wKG5hbWUsIHdpcGh5X25hbWUoc2MtPnByaV93aXBoeS0+aHctPndpcGh5KSkgPT0gMCkKKwkJcmV0dXJuIHNjLT5wcmlfd2lwaHk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5zZWNfd2lwaHlbaV07CisJCWlmIChhcGh5ICYmIHN0cmNtcChuYW1lLCB3aXBoeV9uYW1lKGFwaHktPmh3LT53aXBoeSkpID09IDApCisJCQlyZXR1cm4gYXBoeTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgZGVsX3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X2RlbChhcGh5KTsKK30KKworc3RhdGljIGludCBwYXVzZV93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZ2V0X3dpcGh5KHNjLCBuYW1lKTsKKwlpZiAoIWFwaHkpCisJCXJldHVybiAtRU5PRU5UOworCXJldHVybiBhdGg5a193aXBoeV9wYXVzZShhcGh5KTsKK30KKworc3RhdGljIGludCB1bnBhdXNlX3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X3VucGF1c2UoYXBoeSk7Cit9CisKK3N0YXRpYyBpbnQgc2VsZWN0X3dpcGh5KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBnZXRfd2lwaHkoc2MsIG5hbWUpOworCWlmICghYXBoeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmV0dXJuIGF0aDlrX3dpcGh5X3NlbGVjdChhcGh5KTsKK30KKworc3RhdGljIGludCBzY2hlZHVsZV93aXBoeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgY29uc3QgY2hhciAqbXNlYykKK3sKKwlhdGg5a193aXBoeV9zZXRfc2NoZWR1bGVyKHNjLCBzaW1wbGVfc3RydG91bChtc2VjLCBOVUxMLCAwKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfd2lwaHkoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MF07CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbl0gPSAnXDAnOworCWlmIChsZW4gPiAwICYmIGJ1ZltsZW4gLSAxXSA9PSAnXG4nKQorCQlidWZbbGVuIC0gMV0gPSAnXDAnOworCisJaWYgKHN0cm5jbXAoYnVmLCAiYWRkIiwgMykgPT0gMCkgeworCQlpbnQgcmVzID0gYXRoOWtfd2lwaHlfYWRkKHNjKTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJkZWw9IiwgNCkgPT0gMCkgeworCQlpbnQgcmVzID0gZGVsX3dpcGh5KHNjLCBidWYgKyA0KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJwYXVzZT0iLCA2KSA9PSAwKSB7CisJCWludCByZXMgPSBwYXVzZV93aXBoeShzYywgYnVmICsgNik7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UgaWYgKHN0cm5jbXAoYnVmLCAidW5wYXVzZT0iLCA4KSA9PSAwKSB7CisJCWludCByZXMgPSB1bnBhdXNlX3dpcGh5KHNjLCBidWYgKyA4KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJzZWxlY3Q9IiwgNykgPT0gMCkgeworCQlpbnQgcmVzID0gc2VsZWN0X3dpcGh5KHNjLCBidWYgKyA3KTsKKwkJaWYgKHJlcyA8IDApCisJCQlyZXR1cm4gcmVzOworCX0gZWxzZSBpZiAoc3RybmNtcChidWYsICJzY2hlZHVsZT0iLCA5KSA9PSAwKSB7CisJCWludCByZXMgPSBzY2hlZHVsZV93aXBoeShzYywgYnVmICsgOSk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKKwl9IGVsc2UKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3dpcGh5ID0geworCS5yZWFkID0gcmVhZF9maWxlX3dpcGh5LAorCS53cml0ZSA9IHdyaXRlX2ZpbGVfd2lwaHksCisJLm9wZW4gPSBhdGg5a19kZWJ1Z2ZzX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUKK307CisKKwogaW50IGF0aDlrX2luaXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0Jc2MtPnNjX2RlYnVnLmRlYnVnX21hc2sgPSBhdGg5a19kZWJ1ZzsKKwlzYy0+ZGVidWcuZGVidWdfbWFzayA9IGF0aDlrX2RlYnVnOwogCi0Jc2MtPnNjX2RlYnVnLmRlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7Ci0JaWYgKCFzYy0+c2NfZGVidWcuZGVidWdmc19yb290KQorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSA9IGRlYnVnZnNfY3JlYXRlX2Rpcih3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpLAorCQkJCQkJICAgICAgYXRoOWtfZGVidWdmc19yb290KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSkKIAkJZ290byBlcnI7CiAKLQlzYy0+c2NfZGVidWcuZGVidWdmc19waHkgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIod2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSwKLQkJCQkJCSAgICAgIHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3Jvb3QpOwotCWlmICghc2MtPnNjX2RlYnVnLmRlYnVnZnNfcGh5KQorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2RtYSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRtYSIsIFNfSVJVR08sCisJCQkJICAgICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX2RtYSk7CisJaWYgKCFzYy0+ZGVidWcuZGVidWdmc19kbWEpCiAJCWdvdG8gZXJyOwogCi0Jc2MtPnNjX2RlYnVnLmRlYnVnZnNfZG1hID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZG1hIiwgU19JUlVHTywKLQkJCQkgICAgICAgc2MtPnNjX2RlYnVnLmRlYnVnZnNfcGh5LCBzYywgJmZvcHNfZG1hKTsKLQlpZiAoIXNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX2RtYSkKLQkJZ290byBlcnI7Ci0KLQlzYy0+c2NfZGVidWcuZGVidWdmc19pbnRlcnJ1cHQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbnRlcnJ1cHQiLAorCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImludGVycnVwdCIsCiAJCQkJCQkgICAgIFNfSVJVR08sCi0JCQkJCQkgICAgIHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCQkJCSAgICAgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAogCQkJCQkJICAgICBzYywgJmZvcHNfaW50ZXJydXB0KTsKLQlpZiAoIXNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCkKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX2ludGVycnVwdCkKKwkJZ290byBlcnI7CisKKwlzYy0+ZGVidWcuZGVidWdmc19yY3N0YXQgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyY3N0YXQiLAorCQkJCQkJICBTX0lSVUdPLAorCQkJCQkJICBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkJCQkgIHNjLCAmZm9wc19yY3N0YXQpOworCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfcmNzdGF0KQorCQlnb3RvIGVycjsKKworCXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgKKwkJIndpcGh5IiwgU19JUlVHTyB8IFNfSVdVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCisJCSZmb3BzX3dpcGh5KTsKKwlpZiAoIXNjLT5kZWJ1Zy5kZWJ1Z2ZzX3dpcGh5KQogCQlnb3RvIGVycjsKIAogCXJldHVybiAwOwpAQCAtMjU1LDggKzUzNiwyNCBAQAogCiB2b2lkIGF0aDlrX2V4aXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0JZGVidWdmc19yZW1vdmUoc2MtPnNjX2RlYnVnLmRlYnVnZnNfaW50ZXJydXB0KTsKLQlkZWJ1Z2ZzX3JlbW92ZShzYy0+c2NfZGVidWcuZGVidWdmc19kbWEpOwotCWRlYnVnZnNfcmVtb3ZlKHNjLT5zY19kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Ci0JZGVidWdmc19yZW1vdmUoc2MtPnNjX2RlYnVnLmRlYnVnZnNfcm9vdCk7CisJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfd2lwaHkpOworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jjc3RhdCk7CisJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfaW50ZXJydXB0KTsKKwlkZWJ1Z2ZzX3JlbW92ZShzYy0+ZGVidWcuZGVidWdmc19kbWEpOworCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSk7Cit9CisKK2ludCBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCh2b2lkKQoreworCWF0aDlrX2RlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihLQlVJTERfTU9ETkFNRSwgTlVMTCk7CisJaWYgKCFhdGg5a19kZWJ1Z2ZzX3Jvb3QpCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRoOWtfZGVidWdfcmVtb3ZlX3Jvb3Qodm9pZCkKK3sKKwlkZWJ1Z2ZzX3JlbW92ZShhdGg5a19kZWJ1Z2ZzX3Jvb3QpOworCWF0aDlrX2RlYnVnZnNfcm9vdCA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjBlNTQxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZGVidWcuaApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgREVCVUdfSAorI2RlZmluZSBERUJVR19ICisKK2VudW0gQVRIX0RFQlVHIHsKKwlBVEhfREJHX1JFU0VUCQk9IDB4MDAwMDAwMDEsCisJQVRIX0RCR19SRUdfSU8JCT0gMHgwMDAwMDAwMiwKKwlBVEhfREJHX1FVRVVFCQk9IDB4MDAwMDAwMDQsCisJQVRIX0RCR19FRVBST00JCT0gMHgwMDAwMDAwOCwKKwlBVEhfREJHX0NBTElCUkFURQk9IDB4MDAwMDAwMTAsCisJQVRIX0RCR19DSEFOTkVMCQk9IDB4MDAwMDAwMjAsCisJQVRIX0RCR19JTlRFUlJVUFQJPSAweDAwMDAwMDQwLAorCUFUSF9EQkdfUkVHVUxBVE9SWQk9IDB4MDAwMDAwODAsCisJQVRIX0RCR19BTkkJCT0gMHgwMDAwMDEwMCwKKwlBVEhfREJHX1BPV0VSX01HTVQJPSAweDAwMDAwMjAwLAorCUFUSF9EQkdfWE1JVAkJPSAweDAwMDAwNDAwLAorCUFUSF9EQkdfQkVBQ09OCQk9IDB4MDAwMDEwMDAsCisJQVRIX0RCR19DT05GSUcJCT0gMHgwMDAwMjAwMCwKKwlBVEhfREJHX0tFWUNBQ0hFCT0gMHgwMDAwNDAwMCwKKwlBVEhfREJHX0ZBVEFMCQk9IDB4MDAwMDgwMDAsCisJQVRIX0RCR19BTlkJCT0gMHhmZmZmZmZmZgorfTsKKworI2RlZmluZSBEQkdfREVGQVVMVCAoQVRIX0RCR19GQVRBTCkKKworI2lmZGVmIENPTkZJR19BVEg5S19ERUJVRworCisvKioKKyAqIHN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIC0gQ29udGFpbnMgc3RhdGlzdGljcyBhYm91dCBpbnRlcnJ1cHRzCisgKiBAdG90YWw6IFRvdGFsIG5vLiBvZiBpbnRlcnJ1cHRzIGdlbmVyYXRlZCBzbyBmYXIKKyAqIEByeG9rOiBSWCB3aXRoIG5vIGVycm9ycworICogQHJ4ZW9sOiBSWCB3aXRoIG5vIG1vcmUgUlhERVNDIGF2YWlsYWJsZQorICogQHJ4b3JuOiBSWCBGSUZPIG92ZXJydW4KKyAqIEB0eG9rOiBUWCBjb21wbGV0ZWQgYXQgdGhlIHJlcXVlc3RlZCByYXRlCisgKiBAdHh1cm46IFRYIEZJRk8gdW5kZXJydW4KKyAqIEBtaWI6IE1JQiByZWdzIHJlYWNoaW5nIGl0cyB0aHJlc2hvbGQKKyAqIEByeHBoeWVycjogUlggd2l0aCBwaHkgZXJyb3JzCisgKiBAcnhfa2V5Y2FjaGVfbWlzczogUlggd2l0aCBrZXkgY2FjaGUgbWlzc2VzCisgKiBAc3diYTogU29mdHdhcmUgQmVhY29uIEFsZXJ0CisgKiBAYm1pc3M6IEJlYWNvbiBNaXNzCisgKiBAYm5yOiBCZWFjb24gTm90IFJlYWR5CisgKiBAY3N0OiBDYXJyaWVyIFNlbnNlIFRJbWVvdXQKKyAqIEBndHQ6IEdsb2JhbCBUWCBUaW1lb3V0CisgKiBAdGltOiBSWCBiZWFjb24gVElNIG9jY3VycmVuY2UKKyAqIEBjYWJlbmQ6IFJYIEVuZCBvZiBDQUIgdHJhZmZpYworICogQGR0aW1zeW5jOiBEVElNIHN5bmMgbG9zc2FnZQorICogQGR0aW06IFJYIEJlYWNvbiB3aXRoIERUSU0KKyAqLworc3RydWN0IGF0aF9pbnRlcnJ1cHRfc3RhdHMgeworCXUzMiB0b3RhbDsKKwl1MzIgcnhvazsKKwl1MzIgcnhlb2w7CisJdTMyIHJ4b3JuOworCXUzMiB0eG9rOworCXUzMiB0eGVvbDsKKwl1MzIgdHh1cm47CisJdTMyIG1pYjsKKwl1MzIgcnhwaHllcnI7CisJdTMyIHJ4X2tleWNhY2hlX21pc3M7CisJdTMyIHN3YmE7CisJdTMyIGJtaXNzOworCXUzMiBibnI7CisJdTMyIGNzdDsKKwl1MzIgZ3R0OworCXUzMiB0aW07CisJdTMyIGNhYmVuZDsKKwl1MzIgZHRpbXN5bmM7CisJdTMyIGR0aW07Cit9OworCitzdHJ1Y3QgYXRoX2xlZ2FjeV9yY19zdGF0cyB7CisJdTMyIHN1Y2Nlc3M7Cit9OworCitzdHJ1Y3QgYXRoXzExbl9yY19zdGF0cyB7CisJdTMyIHN1Y2Nlc3M7CisJdTMyIHJldHJpZXM7CisJdTMyIHhyZXRyaWVzOworCXU4IHBlcjsKK307CisKK3N0cnVjdCBhdGhfc3RhdHMgeworCXN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIGlzdGF0czsKKwlzdHJ1Y3QgYXRoX2xlZ2FjeV9yY19zdGF0cyBsZWdhY3lfcmNzdGF0c1sxMl07CS8qIG1heCgxMWEsMTFiLDExZykgKi8KKwlzdHJ1Y3QgYXRoXzExbl9yY19zdGF0cyBuX3Jjc3RhdHNbMTZdOwkJLyogMC4uMTUgTUNTIHJhdGVzICovCit9OworCitzdHJ1Y3QgYXRoOWtfZGVidWcgeworCWludCBkZWJ1Z19tYXNrOworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcGh5OworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZG1hOworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfaW50ZXJydXB0OworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcmNzdGF0OworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfd2lwaHk7CisJc3RydWN0IGF0aF9zdGF0cyBzdGF0czsKK307CisKK3ZvaWQgRFBSSU5URihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGRiZ19tYXNrLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitpbnQgYXRoOWtfaW5pdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aDlrX2V4aXRfZGVidWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworaW50IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KHZvaWQpOwordm9pZCBhdGg5a19kZWJ1Z19yZW1vdmVfcm9vdCh2b2lkKTsKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfaW50ZXJydXB0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBlbnVtIGF0aDlrX2ludCBzdGF0dXMpOwordm9pZCBhdGhfZGVidWdfc3RhdF9yYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCByaXgsCisJCQkgICAgaW50IHhyZXRyaWVzLCBpbnQgcmV0cmllcywgdTggcGVyKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIERQUklOVEYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBkYmdfbWFzaywKKwkJCSAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfZXhpdF9kZWJ1ZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgYXRoOWtfZGVidWdfY3JlYXRlX3Jvb3Qodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2RlYnVnX3JlbW92ZV9yb290KHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfZGVidWdfc3RhdF9pbnRlcnJ1cHQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJCSAgICBlbnVtIGF0aDlrX2ludCBzdGF0dXMpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfZGVidWdfc3RhdF9yYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcml4LAorCQkJCQkgIGludCB4cmV0cmllcywgaW50IHJldHJpZXMsIHU4IHBlcikKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19BVEg5S19ERUJVRyAqLworCisjZW5kaWYgLyogREVCVUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9lZXByb20uYwppbmRleCBhY2Q2YzUzLi5mZmMzNmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9lZXByb20uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE0LDEyICsxNCw5IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCi1zdGF0aWMgdm9pZCBhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgICAgdTMyIHJlZywgdTMyIG1hc2ssCiAJCQkJICAgICAgdTMyIHNoaWZ0LCB1MzIgdmFsKQogewpAQCAtMzAsNyArMjcsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCByZWcsIHJlZ1ZhbCk7CiAKLQlpZiAoYWgtPmFoX2NvbmZpZy5hbmFsb2dfc2hpZnRyZWcpCisJaWYgKGFoLT5jb25maWcuYW5hbG9nX3NoaWZ0cmVnKQogCQl1ZGVsYXkoMTAwKTsKIAogCXJldHVybjsKQEAgLTkxLDYxICs4OCwyNjEgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2VlcHJvbV9yZWFkKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG9mZiwgdTE2ICpkYXRhKQorc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSkKIHsKLQkodm9pZClSRUdfUkVBRChhaCwgQVI1NDE2X0VFUFJPTV9PRkZTRVQgKyAob2ZmIDw8IEFSNTQxNl9FRVBST01fUykpOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYWgtPmFoX3NjOwogCi0JaWYgKCFhdGg5a19od193YWl0KGFoLAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBLAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX0JVU1kgfAotCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1BST1RfQUNDRVNTLCAwKSkgewotCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHNjLT5idXNfb3BzLT5lZXByb21fcmVhZChhaCwgb2ZmLCBkYXRhKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X2ZpbGxfdnBkX3RhYmxlKHU4IHB3ck1pbiwgdTggcHdyTWF4LCB1OCAqcFB3ckxpc3QsCisJCQkJCSAgIHU4ICpwVnBkTGlzdCwgdTE2IG51bUludGVyY2VwdHMsCisJCQkJCSAgIHU4ICpwUmV0VnBkTGlzdCkKK3sKKwl1MTYgaSwgazsKKwl1OCBjdXJyUHdyID0gcHdyTWluOworCXUxNiBpZHhMID0gMCwgaWR4UiA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDw9IChwd3JNYXggLSBwd3JNaW4pIC8gMjsgaSsrKSB7CisJCWF0aDlrX2h3X2dldF9sb3dlcl91cHBlcl9pbmRleChjdXJyUHdyLCBwUHdyTGlzdCwKKwkJCQkJICAgICAgIG51bUludGVyY2VwdHMsICYoaWR4TCksCisJCQkJCSAgICAgICAmKGlkeFIpKTsKKwkJaWYgKGlkeFIgPCAxKQorCQkJaWR4UiA9IDE7CisJCWlmIChpZHhMID09IG51bUludGVyY2VwdHMgLSAxKQorCQkJaWR4TCA9ICh1MTYpIChudW1JbnRlcmNlcHRzIC0gMik7CisJCWlmIChwUHdyTGlzdFtpZHhMXSA9PSBwUHdyTGlzdFtpZHhSXSkKKwkJCWsgPSBwVnBkTGlzdFtpZHhMXTsKKwkJZWxzZQorCQkJayA9ICh1MTYpKCgoY3VyclB3ciAtIHBQd3JMaXN0W2lkeExdKSAqIHBWcGRMaXN0W2lkeFJdICsKKwkJCQkgICAocFB3ckxpc3RbaWR4Ul0gLSBjdXJyUHdyKSAqIHBWcGRMaXN0W2lkeExdKSAvCisJCQkJICAocFB3ckxpc3RbaWR4Ul0gLSBwUHdyTGlzdFtpZHhMXSkpOworCQlwUmV0VnBkTGlzdFtpXSA9ICh1OCkgazsKKwkJY3VyclB3ciArPSAyOwogCX0KIAotCSpkYXRhID0gTVMoUkVHX1JFQUQoYWgsIEFSX0VFUFJPTV9TVEFUVVNfREFUQSksCi0JCSAgIEFSX0VFUFJPTV9TVEFUVVNfREFUQV9WQUwpOwotCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZmxhc2hfbWFwKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBvd0luZm8sCisJCQkJICAgICAgdTE2IG51bUNoYW5uZWxzLAorCQkJCSAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcE5ld1Bvd2VyLAorCQkJCSAgICAgIHUxNiBudW1SYXRlcywgYm9vbCBpc0V4dFRhcmdldCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwl1MTYgY2xvLCBjaGk7CisJaW50IGk7CisJaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKKwl1MTYgZnJlcTsKIAotCWFocC0+YWhfY2FsX21lbSA9IGlvcmVtYXAoQVI1NDE2X0VFUFJPTV9TVEFSVF9BRERSLCBBUjU0MTZfRUVQUk9NX01BWCk7CisJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOworCWZyZXEgPSAoaXNFeHRUYXJnZXQpID8gY2VudGVycy5leHRfY2VudGVyIDogY2VudGVycy5jdGxfY2VudGVyOwogCi0JaWYgKCFhaHAtPmFoX2NhbF9tZW0pIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJImNhbm5vdCByZW1hcCBlZXByb20gcmVnaW9uIFxuIik7Ci0JCXJldHVybiAtRUlPOworCWlmIChmcmVxIDw9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvWzBdLmJDaGFubmVsLAorCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7CisJCW1hdGNoSW5kZXggPSAwOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IChpIDwgbnVtQ2hhbm5lbHMpICYmCisJCQkgICAgIChwb3dJbmZvW2ldLmJDaGFubmVsICE9IEFSNTQxNl9CQ0hBTl9VTlVTRUQpOyBpKyspIHsKKwkJCWlmIChmcmVxID09IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2ldLmJDaGFubmVsLAorCQkJCQkJICAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpIHsKKwkJCQltYXRjaEluZGV4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgIElTX0NIQU5fMkdIWihjaGFuKSkpICYmCisJCQkJICAgKGZyZXEgPiBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpIC0gMV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgeworCQkJCWxvd0luZGV4ID0gaSAtIDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQorCQkJbWF0Y2hJbmRleCA9IGkgLSAxOwogCX0KIAotCXJldHVybiAwOworCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7CisJCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOworCX0gZWxzZSB7CisJCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKKwkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7CisJCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7CisJCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9CisJCQkJKHU4KWF0aDlrX2h3X2ludGVycG9sYXRlKGZyZXEsIGNsbywgY2hpLAorCQkJCQkJcG93SW5mb1tsb3dJbmRleF0udFBvdzJ4W2ldLAorCQkJCQkJcG93SW5mb1tsb3dJbmRleCArIDFdLnRQb3cyeFtpXSk7CisJCX0KKwl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X2ZsYXNoX3JlYWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCitzdGF0aWMgdm9pZCBhdGg5a19nZXRfdHhnYWluX2luZGV4KHN0cnVjdCBhdGhfaHcgKmFoLAorCQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICpyYXdEYXRhc2V0T3BMb29wLAorCQl1OCAqY2FsQ2hhbnMsICB1MTYgYXZhaWxQaWVycywgdTggKnB3ciwgdTggKnBjZGFjSWR4KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJdTggcGNkYWMsIGkgPSAwOworCXUxNiBpZHhMID0gMCwgaWR4UiA9IDAsIG51bVBpZXJzOworCWJvb2wgbWF0Y2g7CisJc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwogCi0JKmRhdGEgPSBpb3JlYWQxNihhaHAtPmFoX2NhbF9tZW0gKyBvZmYpOworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIAotCXJldHVybiB0cnVlOworCWZvciAobnVtUGllcnMgPSAwOyBudW1QaWVycyA8IGF2YWlsUGllcnM7IG51bVBpZXJzKyspCisJCWlmIChjYWxDaGFuc1tudW1QaWVyc10gPT0gQVI1NDE2X0JDSEFOX1VOVVNFRCkKKwkJCWJyZWFrOworCisJbWF0Y2ggPSBhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoCisJCQkodTgpRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLCBJU19DSEFOXzJHSFooY2hhbikpLAorCQkJY2FsQ2hhbnMsIG51bVBpZXJzLCAmaWR4TCwgJmlkeFIpOworCWlmIChtYXRjaCkgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4TF0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSByYXdEYXRhc2V0T3BMb29wW2lkeExdLnB3clBkZ1swXVswXTsKKwl9IGVsc2UgeworCQlwY2RhYyA9IHJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucGNkYWNbMF1bMF07CisJCSpwd3IgPSAocmF3RGF0YXNldE9wTG9vcFtpZHhMXS5wd3JQZGdbMF1bMF0gKworCQkJCXJhd0RhdGFzZXRPcExvb3BbaWR4Ul0ucHdyUGRnWzBdWzBdKS8yOworCX0KKworCXdoaWxlIChwY2RhYyA+IGFoLT5vcmlnaW5hbEdhaW5baV0gJiYKKwkJCWkgPCAoQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAtIDEpKQorCQlpKys7CisKKwkqcGNkYWNJZHggPSBpOworCXJldHVybjsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGF0aDlrX2h3X252cmFtX3JlYWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCitzdGF0aWMgdm9pZCBhdGg5a19vbGNfZ2V0X3BkYWRjcyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQl1MzIgaW5pdFR4R2FpbiwKKwkJCQlpbnQgdHhQb3dlciwKKwkJCQl1OCAqcFBEQURDVmFsdWVzKQogewotCWlmIChhdGg5a19od191c2VfZmxhc2goYWgpKQotCQlyZXR1cm4gYXRoOWtfaHdfZmxhc2hfcmVhZChhaCwgb2ZmLCBkYXRhKTsKLQllbHNlCi0JCXJldHVybiBhdGg5a19od19lZXByb21fcmVhZChhaCwgb2ZmLCBkYXRhKTsKKwl1MzIgaTsKKwl1MzIgb2Zmc2V0OworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw2XzAsCisJCQlBUl9QSFlfVFhfUFdSQ1RSTF9FUlJfRVNUX01PREUsIDMpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNl8xLAorCQkJQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFLCAzKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UWF9QV1JDVFJMNywKKwkJCUFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTiwgaW5pdFR4R2Fpbik7CisKKwlvZmZzZXQgPSB0eFBvd2VyOworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUzsgaSsrKQorCQlpZiAoaSA8IG9mZnNldCkKKwkJCXBQREFEQ1ZhbHVlc1tpXSA9IDB4MDsKKwkJZWxzZQorCQkJcFBEQURDVmFsdWVzW2ldID0gMHhGRjsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfZmlsbF80a19lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQorCisKKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcG93SW5mbywKKwkJCQkgICAgICAgdTE2IG51bUNoYW5uZWxzLAorCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcE5ld1Bvd2VyLAorCQkJCSAgICAgICB1MTYgbnVtUmF0ZXMsIGJvb2wgaXNIdDQwVGFyZ2V0KQoreworCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKKwl1MTYgY2xvLCBjaGk7CisJaW50IGk7CisJaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKKwl1MTYgZnJlcTsKKworCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKKwlmcmVxID0gaXNIdDQwVGFyZ2V0ID8gY2VudGVycy5zeW50aF9jZW50ZXIgOiBjZW50ZXJzLmN0bF9jZW50ZXI7CisKKwlpZiAoZnJlcSA8PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1swXS5iQ2hhbm5lbCwgSVNfQ0hBTl8yR0haKGNoYW4pKSkgeworCQltYXRjaEluZGV4ID0gMDsKKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyAoaSA8IG51bUNoYW5uZWxzKSAmJgorCQkJICAgICAocG93SW5mb1tpXS5iQ2hhbm5lbCAhPSBBUjU0MTZfQkNIQU5fVU5VU0VEKTsgaSsrKSB7CisJCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7CisJCQkJbWF0Y2hJbmRleCA9IGk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQlpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSAmJgorCQkJCSAgICAoZnJlcSA+IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2kgLSAxXS5iQ2hhbm5lbCwKKwkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgeworCQkJCQlsb3dJbmRleCA9IGkgLSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCX0KKwkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQorCQkJbWF0Y2hJbmRleCA9IGkgLSAxOworCX0KKworCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7CisJCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOworCX0gZWxzZSB7CisJCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKKwkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7CisJCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCisJCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7CisJCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9ICh1OClhdGg5a19od19pbnRlcnBvbGF0ZShmcmVxLAorCQkJCQkJY2xvLCBjaGksCisJCQkJCQlwb3dJbmZvW2xvd0luZGV4XS50UG93MnhbaV0sCisJCQkJCQlwb3dJbmZvW2xvd0luZGV4ICsgMV0udFBvdzJ4W2ldKTsKKwkJfQorCX0KK30KKworc3RhdGljIHUxNiBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIodTE2IGZyZXEsCisJCQkJICAgICAgIHN0cnVjdCBjYWxfY3RsX2VkZ2VzICpwUmRFZGdlc1Bvd2VyLAorCQkJCSAgICAgICBib29sIGlzMkdIeiwgaW50IG51bV9iYW5kX2VkZ2VzKQoreworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IChpIDwgbnVtX2JhbmRfZWRnZXMpICYmCisJCSAgICAgKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwgIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCk7IGkrKykgeworCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocFJkRWRnZXNQb3dlcltpXS5iQ2hhbm5lbCwgaXMyR0h6KSkgeworCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBwUmRFZGdlc1Bvd2VyW2ldLnRQb3dlcjsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKChpID4gMCkgJiYKKwkJCSAgIChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwsCisJCQkJCQkgICAgICBpczJHSHopKSkgeworCQkJaWYgKGF0aDlrX2h3X2ZiaW4yZnJlcShwUmRFZGdlc1Bvd2VyW2kgLSAxXS5iQ2hhbm5lbCwKKwkJCQkJICAgICAgIGlzMkdIeikgPCBmcmVxICYmCisJCQkgICAgcFJkRWRnZXNQb3dlcltpIC0gMV0uZmxhZykgeworCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0KKwkJCQkJcFJkRWRnZXNQb3dlcltpIC0gMV0udFBvd2VyOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gdHdpY2VNYXhFZGdlUG93ZXI7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRUVQUk9NIE9wZXJhdGlvbnMgZm9yIDRLIHNpemVkIGNhcmRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBhdGg5a19od180a19nZXRfZWVwcm9tX3ZlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKChhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEYpOworfQorCitzdGF0aWMgaW50IGF0aDlrX2h3XzRrX2dldF9lZXByb21fcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXJldHVybiAoKGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci52ZXJzaW9uKSAmIDB4RkZGKTsKK30KKworc3RhdGljIGJvb2wgYXRoOWtfaHdfNGtfZmlsbF9lZXByb20oc3RydWN0IGF0aF9odyAqYWgpCiB7CiAjZGVmaW5lIFNJWkVfRUVQUk9NXzRLIChzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspIC8gc2l6ZW9mKHUxNikpCi0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOwotCXUxNiAqZWVwX2RhdGE7CisJdTE2ICplZXBfZGF0YSA9ICh1MTYgKikmYWgtPmVlcHJvbS5tYXA0azsKIAlpbnQgYWRkciwgZWVwX3N0YXJ0X2xvYyA9IDA7CiAKIAllZXBfc3RhcnRfbG9jID0gNjQ7CkBAIC0xNTUsOCArMzUyLDYgQEAKIAkJCSJSZWFkaW5nIGZyb20gRUVQUk9NLCBub3QgZmxhc2hcbiIpOwogCX0KIAotCWVlcF9kYXRhID0gKHUxNiAqKWVlcDsKLQogCWZvciAoYWRkciA9IDA7IGFkZHIgPCBTSVpFX0VFUFJPTV80SzsgYWRkcisrKSB7CiAJCWlmICghYXRoOWtfaHdfbnZyYW1fcmVhZChhaCwgYWRkciArIGVlcF9zdGFydF9sb2MsIGVlcF9kYXRhKSkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLApAQCAtMTY1LDE4MCArMzYwLDE2IEBACiAJCX0KIAkJZWVwX2RhdGErKzsKIAl9CisKIAlyZXR1cm4gdHJ1ZTsKICN1bmRlZiBTSVpFX0VFUFJPTV80SwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19maWxsX2RlZl9lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQotewotI2RlZmluZSBTSVpFX0VFUFJPTV9ERUYgKHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpIC8gc2l6ZW9mKHUxNikpCi0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0JdTE2ICplZXBfZGF0YTsKLQlpbnQgYWRkciwgYXI1NDE2X2VlcF9zdGFydF9sb2MgPSAweDEwMDsKLQotCWVlcF9kYXRhID0gKHUxNiAqKWVlcDsKLQotCWZvciAoYWRkciA9IDA7IGFkZHIgPCBTSVpFX0VFUFJPTV9ERUY7IGFkZHIrKykgewotCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIGFkZHIgKyBhcjU0MTZfZWVwX3N0YXJ0X2xvYywKLQkJCQkJIGVlcF9kYXRhKSkgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCSJVbmFibGUgdG8gcmVhZCBlZXByb20gcmVnaW9uXG4iKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCQllZXBfZGF0YSsrOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLSN1bmRlZiBTSVpFX0VFUFJPTV9ERUYKLX0KLQotc3RhdGljIGJvb2wgKCphdGg5a19maWxsX2VlcHJvbVtdKSAoc3RydWN0IGF0aF9oYWwgKikgPSB7Ci0JYXRoOWtfaHdfZmlsbF9kZWZfZWVwcm9tLAotCWF0aDlrX2h3X2ZpbGxfNGtfZWVwcm9tCi19OwotCi1zdGF0aWMgaW5saW5lIGJvb2wgYXRoOWtfaHdfZmlsbF9lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfZmlsbF9lZXByb21bYWhwLT5haF9lZXBfbWFwXShhaCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoOWtfaHdfY2hlY2tfZGVmX2VlcHJvbShzdHJ1Y3QgYXRoX2hhbCAqYWgpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9Ci0JCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKikgJmFocC0+YWhfZWVwcm9tLmRlZjsKLQl1MTYgKmVlcGRhdGEsIHRlbXAsIG1hZ2ljLCBtYWdpYzI7Ci0JdTMyIHN1bSA9IDAsIGVsOwotCWJvb2wgbmVlZF9zd2FwID0gZmFsc2U7Ci0JaW50IGksIGFkZHIsIHNpemU7Ci0KLQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIEFSNTQxNl9FRVBST01fTUFHSUNfT0ZGU0VULAotCQkJCSAmbWFnaWMpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCSJSZWFkaW5nIE1hZ2ljICMgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmICghYXRoOWtfaHdfdXNlX2ZsYXNoKGFoKSkgewotCi0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKLQkJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOwotCi0JCWlmIChtYWdpYyAhPSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7Ci0JCQltYWdpYzIgPSBzd2FiMTYobWFnaWMpOwotCi0JCQlpZiAobWFnaWMyID09IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKLQkJCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZik7Ci0JCQkJbmVlZF9zd2FwID0gdHJ1ZTsKLQkJCQllZXBkYXRhID0gKHUxNiAqKSAoJmFocC0+YWhfZWVwcm9tKTsKLQotCQkJCWZvciAoYWRkciA9IDA7IGFkZHIgPCBzaXplIC8gc2l6ZW9mKHUxNik7IGFkZHIrKykgewotCQkJCQl0ZW1wID0gc3dhYjE2KCplZXBkYXRhKTsKLQkJCQkJKmVlcGRhdGEgPSB0ZW1wOwotCQkJCQllZXBkYXRhKys7Ci0KLQkJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkJIjB4JTA0WCAgIiwgKmVlcGRhdGEpOwotCi0JCQkJCWlmICgoKGFkZHIgKyAxKSAlIDYpID09IDApCi0JCQkJCQlEUFJJTlRGKGFoLT5haF9zYywKLQkJCQkJCQlBVEhfREJHX0VFUFJPTSwgIlxuIik7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkJCSJJbnZhbGlkIEVFUFJPTSBNYWdpYy4gIgotCQkJCQkiZW5kaWFubmVzcyBtaXNtYXRjaC5cbiIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0JfQotCi0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLCAibmVlZF9zd2FwID0gJXMuXG4iLAotCQluZWVkX3N3YXAgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKLQotCWlmIChuZWVkX3N3YXApCi0JCWVsID0gc3dhYjE2KGFocC0+YWhfZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7Ci0JZWxzZQotCQllbCA9IGFocC0+YWhfZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLmxlbmd0aDsKLQotCWlmIChlbCA+IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpKQotCQllbCA9IHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpIC8gc2l6ZW9mKHUxNik7Ci0JZWxzZQotCQllbCA9IGVsIC8gc2l6ZW9mKHUxNik7Ci0KLQllZXBkYXRhID0gKHUxNiAqKSgmYWhwLT5haF9lZXByb20pOwotCi0JZm9yIChpID0gMDsgaSA8IGVsOyBpKyspCi0JCXN1bSBePSAqZWVwZGF0YSsrOwotCi0JaWYgKG5lZWRfc3dhcCkgewotCQl1MzIgaW50ZWdlciwgajsKLQkJdTE2IHdvcmQ7Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIkVFUFJPTSBFbmRpYW5uZXNzIGlzIG5vdCBuYXRpdmUuLiBDaGFuZ2luZyBcbiIpOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGggPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblswXSk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0gPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblsxXSk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0gPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50KTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50ID0gd29yZDsKLQotCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zKTsKLQkJZWVwLT5iYXNlRWVwSGVhZGVyLmJsdWVUb290aE9wdGlvbnMgPSB3b3JkOwotCi0JCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmRldmljZUNhcCk7Ci0JCWVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXAgPSB3b3JkOwotCi0JCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGVlcC0+bW9kYWxIZWFkZXIpOyBqKyspIHsKLQkJCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQotCQkJCSZlZXAtPm1vZGFsSGVhZGVyW2pdOwotCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDb21tb24pOwotCQkJcE1vZGFsLT5hbnRDdHJsQ29tbW9uID0gaW50ZWdlcjsKLQotCQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJCQlpbnRlZ2VyID0gc3dhYjMyKHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKLQkJCQlwTW9kYWwtPmFudEN0cmxDaGFpbltpXSA9IGludGVnZXI7Ci0JCQl9Ci0KLQkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKLQkJCQl3b3JkID0gc3dhYjE2KHBNb2RhbC0+c3B1ckNoYW5zW2ldLnNwdXJDaGFuKTsKLQkJCQlwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbiA9IHdvcmQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhcjU0MTZfZ2V0X2VlcF92ZXIoYWhwKSAhPSBBUjU0MTZfRUVQX1ZFUiB8fAotCSAgICBhcjU0MTZfZ2V0X2VlcF9yZXYoYWhwKSA8IEFSNTQxNl9FRVBfTk9fQkFDS19WRVIpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCi0JCQlzdW0sIGFyNTQxNl9nZXRfZWVwX3ZlcihhaHApKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoOWtfaHdfY2hlY2tfNGtfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfNGtfY2hlY2tfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQogewogI2RlZmluZSBFRVBST01fNEtfU0laRSAoc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSAvIHNpemVvZih1MTYpKQotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCA9Ci0JCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqKSAmYWhwLT5haF9lZXByb20ubWFwNGs7CisJCShzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqKSAmYWgtPmVlcHJvbS5tYXA0azsKIAl1MTYgKmVlcGRhdGEsIHRlbXAsIG1hZ2ljLCBtYWdpYzI7CiAJdTMyIHN1bSA9IDAsIGVsOwogCWJvb2wgbmVlZF9zd2FwID0gZmFsc2U7CkBAIC0zNDYsMzggKzM3NywzMCBAQAogCiAKIAlpZiAoIWF0aDlrX2h3X3VzZV9mbGFzaChhaCkpIHsKLQogCQlpZiAoIWF0aDlrX2h3X252cmFtX3JlYWQoYWgsIEFSNTQxNl9FRVBST01fTUFHSUNfT0ZGU0VULAogCQkJCQkgJm1hZ2ljKSkgewotCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkJIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCSJSZWFkIE1hZ2ljID0gMHglMDRYXG4iLCBtYWdpYyk7CisJCQkiUmVhZCBNYWdpYyA9IDB4JTA0WFxuIiwgbWFnaWMpOwogCiAJCWlmIChtYWdpYyAhPSBBUjU0MTZfRUVQUk9NX01BR0lDKSB7CiAJCQltYWdpYzIgPSBzd2FiMTYobWFnaWMpOwogCiAJCQlpZiAobWFnaWMyID09IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKIAkJCQluZWVkX3N3YXAgPSB0cnVlOwotCQkJCWVlcGRhdGEgPSAodTE2ICopICgmYWhwLT5haF9lZXByb20pOworCQkJCWVlcGRhdGEgPSAodTE2ICopICgmYWgtPmVlcHJvbSk7CiAKIAkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgRUVQUk9NXzRLX1NJWkU7IGFkZHIrKykgewogCQkJCQl0ZW1wID0gc3dhYjE2KCplZXBkYXRhKTsKIAkJCQkJKmVlcGRhdGEgPSB0ZW1wOwogCQkJCQllZXBkYXRhKys7Ci0KLQkJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJCQkJIjB4JTA0WCAgIiwgKmVlcGRhdGEpOwotCi0JCQkJCWlmICgoKGFkZHIgKyAxKSAlIDYpID09IDApCi0JCQkJCQlEUFJJTlRGKGFoLT5haF9zYywKLQkJCQkJCQlBVEhfREJHX0VFUFJPTSwgIlxuIik7CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkJCSJJbnZhbGlkIEVFUFJPTSBNYWdpYy4gIgogCQkJCQkiZW5kaWFubmVzcyBtaXNtYXRjaC5cbiIpOwogCQkJCXJldHVybiAtRUlOVkFMOwpAQCAtMzg5LDE2ICs0MTIsMTYgQEAKIAkJbmVlZF9zd2FwID8gIlRydWUiIDogIkZhbHNlIik7CiAKIAlpZiAobmVlZF9zd2FwKQotCQllbCA9IHN3YWIxNihhaHAtPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJCWVsID0gc3dhYjE2KGFoLT5lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci5sZW5ndGgpOwogCWVsc2UKLQkJZWwgPSBhaHAtPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLmxlbmd0aDsKKwkJZWwgPSBhaC0+ZWVwcm9tLm1hcDRrLmJhc2VFZXBIZWFkZXIubGVuZ3RoOwogCi0JaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZikpCisJaWYgKGVsID4gc2l6ZW9mKHN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrKSkKIAkJZWwgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fNGspIC8gc2l6ZW9mKHUxNik7CiAJZWxzZQogCQllbCA9IGVsIC8gc2l6ZW9mKHUxNik7CiAKLQllZXBkYXRhID0gKHUxNiAqKSgmYWhwLT5haF9lZXByb20pOworCWVlcGRhdGEgPSAodTE2ICopKCZhaC0+ZWVwcm9tKTsKIAogCWZvciAoaSA9IDA7IGkgPCBlbDsgaSsrKQogCQlzdW0gXj0gKmVlcGRhdGErKzsKQEAgLTQwOCw3ICs0MzEsNyBAQAogCQl1MTYgd29yZDsKIAogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiRUVQUk9NIEVuZGlhbm5lc3MgaXMgbm90IG5hdGl2ZS4uIENoYW5naW5nIFxuIik7CisJCQkiRUVQUk9NIEVuZGlhbm5lc3MgaXMgbm90IG5hdGl2ZS4uIENoYW5naW5nXG4iKTsKIAogCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGgpOwogCQllZXAtPmJhc2VFZXBIZWFkZXIubGVuZ3RoID0gd29yZDsKQEAgLTQ0OCwxMSArNDcxLDExIEBACiAJCX0KIAl9CiAKLQlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhcjU0MTZfZ2V0X2VlcDRrX3ZlcihhaHApICE9IEFSNTQxNl9FRVBfVkVSIHx8Ci0JICAgIGFyNTQxNl9nZXRfZWVwNGtfcmV2KGFocCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpICE9IEFSNTQxNl9FRVBfVkVSIHx8CisJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAogCQkJIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCi0JCQlzdW0sIGFyNTQxNl9nZXRfZWVwNGtfdmVyKGFocCkpOworCQkJc3VtLCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NjAsNDggKzQ4Myw1MCBAQAogI3VuZGVmIEVFUFJPTV80S19TSVpFCiB9CiAKLXN0YXRpYyBpbnQgKCphdGg5a19jaGVja19lZXByb21bXSkgKHN0cnVjdCBhdGhfaGFsICopID0gewotCWF0aDlrX2h3X2NoZWNrX2RlZl9lZXByb20sCi0JYXRoOWtfaHdfY2hlY2tfNGtfZWVwcm9tCi19OwotCi1zdGF0aWMgaW5saW5lIGludCBhdGg5a19od19jaGVja19lZXByb20oc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHUzMiBhdGg5a19od180a19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgZW51bSBlZXByb21fcGFyYW0gcGFyYW0pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CisJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKIAotCXJldHVybiBhdGg5a19jaGVja19lZXByb21bYWhwLT5haF9lZXBfbWFwXShhaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBhdGg5a19od19maWxsX3ZwZF90YWJsZSh1OCBwd3JNaW4sIHU4IHB3ck1heCwgdTggKnBQd3JMaXN0LAotCQkJCQkgICB1OCAqcFZwZExpc3QsIHUxNiBudW1JbnRlcmNlcHRzLAotCQkJCQkgICB1OCAqcFJldFZwZExpc3QpCi17Ci0JdTE2IGksIGs7Ci0JdTggY3VyclB3ciA9IHB3ck1pbjsKLQl1MTYgaWR4TCA9IDAsIGlkeFIgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8PSAocHdyTWF4IC0gcHdyTWluKSAvIDI7IGkrKykgewotCQlhdGg5a19od19nZXRfbG93ZXJfdXBwZXJfaW5kZXgoY3VyclB3ciwgcFB3ckxpc3QsCi0JCQkJCSAgICAgICBudW1JbnRlcmNlcHRzLCAmKGlkeEwpLAotCQkJCQkgICAgICAgJihpZHhSKSk7Ci0JCWlmIChpZHhSIDwgMSkKLQkJCWlkeFIgPSAxOwotCQlpZiAoaWR4TCA9PSBudW1JbnRlcmNlcHRzIC0gMSkKLQkJCWlkeEwgPSAodTE2KSAobnVtSW50ZXJjZXB0cyAtIDIpOwotCQlpZiAocFB3ckxpc3RbaWR4TF0gPT0gcFB3ckxpc3RbaWR4Ul0pCi0JCQlrID0gcFZwZExpc3RbaWR4TF07Ci0JCWVsc2UKLQkJCWsgPSAodTE2KSgoKGN1cnJQd3IgLSBwUHdyTGlzdFtpZHhMXSkgKiBwVnBkTGlzdFtpZHhSXSArCi0JCQkJICAgKHBQd3JMaXN0W2lkeFJdIC0gY3VyclB3cikgKiBwVnBkTGlzdFtpZHhMXSkgLwotCQkJCSAgKHBQd3JMaXN0W2lkeFJdIC0gcFB3ckxpc3RbaWR4TF0pKTsKLQkJcFJldFZwZExpc3RbaV0gPSAodTgpIGs7Ci0JCWN1cnJQd3IgKz0gMjsKKwlzd2l0Y2ggKHBhcmFtKSB7CisJY2FzZSBFRVBfTkZUSFJFU0hfMjoKKwkJcmV0dXJuIHBNb2RhbC0+bm9pc2VGbG9vclRocmVzaENoWzBdOworCWNhc2UgQVJfRUVQUk9NX01BQygwKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzBdIDw8IDggfCBwQmFzZS0+bWFjQWRkclsxXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMSk6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkclsyXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbM107CisJY2FzZSBBUl9FRVBST01fTUFDKDIpOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbNF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzVdOworCWNhc2UgRUVQX1JFR18wOgorCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblswXTsKKwljYXNlIEVFUF9SRUdfMToKKwkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMV07CisJY2FzZSBFRVBfT1BfQ0FQOgorCQlyZXR1cm4gcEJhc2UtPmRldmljZUNhcDsKKwljYXNlIEVFUF9PUF9NT0RFOgorCQlyZXR1cm4gcEJhc2UtPm9wQ2FwRmxhZ3M7CisJY2FzZSBFRVBfUkZfU0lMRU5UOgorCQlyZXR1cm4gcEJhc2UtPnJmU2lsZW50OworCWNhc2UgRUVQX09CXzI6CisJCXJldHVybiBwTW9kYWwtPm9iXzAxOworCWNhc2UgRUVQX0RCXzI6CisJCXJldHVybiBwTW9kYWwtPmRiMV8wMTsKKwljYXNlIEVFUF9NSU5PUl9SRVY6CisJCXJldHVybiBwQmFzZS0+dmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0s7CisJY2FzZSBFRVBfVFhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT50eE1hc2s7CisJY2FzZSBFRVBfUlhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT5yeE1hc2s7CisJY2FzZSBFRVBfRlJBQ19OXzVHOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKIAl9Ci0KLQlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3Moc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxXzRrICpwUmF3RGF0YVNldCwKIAkJCQl1OCAqYkNoYW5zLCB1MTYgYXZhaWxQaWVycywKQEAgLTYwNSw3ICs2MzAsNyBAQAogCQlwUGRHYWluQm91bmRhcmllc1tpXSA9CiAJCQltaW4oKHUxNilBUjU0MTZfTUFYX1JBVEVfUE9XRVIsIHBQZEdhaW5Cb3VuZGFyaWVzW2ldKTsKIAotCQlpZiAoKGkgPT0gMCkgJiYgIUFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpKSB7CisJCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSkgewogCQkJbWluRGVsdGEgPSBwUGRHYWluQm91bmRhcmllc1swXSAtIDIzOwogCQkJcFBkR2FpbkJvdW5kYXJpZXNbMF0gPSAyMzsKIAkJfSBlbHNlIHsKQEAgLTY0NCw3ICs2NjksNyBAQAogCQkJCSAgICB2cGRUYWJsZUlbaV1bc2l6ZUN1cnJWcGRUYWJsZSAtIDJdKTsKIAkJdnBkU3RlcCA9IChpbnQxNl90KSgodnBkU3RlcCA8IDEpID8gMSA6IHZwZFN0ZXApOwogCi0JCWlmICh0Z3RJbmRleCA+IG1heEluZGV4KSB7CisJCWlmICh0Z3RJbmRleCA+PSBtYXhJbmRleCkgewogCQkJd2hpbGUgKChzcyA8PSB0Z3RJbmRleCkgJiYKIAkJCSAgICAgICAoayA8IChBUjU0MTZfTlVNX1BEQURDX1ZBTFVFUyAtIDEpKSkgewogCQkJCXRtcFZhbCA9IChpbnQxNl90KSBUTVBfVkFMX1ZQRF9UQUJMRTsKQEAgLTY2OSw3ICs2OTQsMTI1MSBAQAogI3VuZGVmIFRNUF9WQUxfVlBEX1RBQkxFCiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2dldF9kZWZfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayAqcFJhd0RhdGFzZXQ7CisJdTggKnBDYWxCQ2hhbnMgPSBOVUxMOworCXUxNiBwZEdhaW5PdmVybGFwX3QyOworCXN0YXRpYyB1OCBwZGFkY1ZhbHVlc1tBUjU0MTZfTlVNX1BEQURDX1ZBTFVFU107CisJdTE2IGdhaW5Cb3VuZGFyaWVzW0FSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLXTsKKwl1MTYgbnVtUGllcnMsIGksIGo7CisJaW50MTZfdCB0TWluQ2FsUG93ZXI7CisJdTE2IG51bVhwZEdhaW4sIHhwZE1hc2s7CisJdTE2IHhwZEdhaW5WYWx1ZXNbQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOU10gPSB7IDAsIDAgfTsKKwl1MzIgcmVnMzIsIHJlZ09mZnNldCwgcmVnQ2hhaW5PZmZzZXQ7CisKKwl4cGRNYXNrID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLnhwZEdhaW47CisKKwlpZiAoKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCXBkR2Fpbk92ZXJsYXBfdDIgPQorCQkJcEVlcERhdGEtPm1vZGFsSGVhZGVyLnBkR2Fpbk92ZXJsYXA7CisJfSBlbHNlIHsKKwkJcGRHYWluT3ZlcmxhcF90MiA9ICh1MTYpKE1TKFJFR19SRUFEKGFoLCBBUl9QSFlfVFBDUkc1KSwKKwkJCQkJICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKSk7CisJfQorCisJcENhbEJDaGFucyA9IHBFZXBEYXRhLT5jYWxGcmVxUGllcjJHOworCW51bVBpZXJzID0gQVI1NDE2X0VFUDRLX05VTV8yR19DQUxfUElFUlM7CisKKwludW1YcGRHYWluID0gMDsKKworCWZvciAoaSA9IDE7IGkgPD0gQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0s7IGkrKykgeworCQlpZiAoKHhwZE1hc2sgPj4gKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSkpICYgMSkgeworCQkJaWYgKG51bVhwZEdhaW4gPj0gQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOUykKKwkJCQlicmVhazsKKwkJCXhwZEdhaW5WYWx1ZXNbbnVtWHBkR2Fpbl0gPQorCQkJCSh1MTYpKEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLIC0gaSk7CisJCQludW1YcGRHYWluKys7CisJCX0KKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX05VTV9QRF9HQUlOLAorCQkgICAgICAobnVtWHBkR2FpbiAtIDEpICYgMHgzKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMSwKKwkJICAgICAgeHBkR2FpblZhbHVlc1swXSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzIsCisJCSAgICAgIHhwZEdhaW5WYWx1ZXNbMV0pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zLCAwKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCisJCSAgICAoaSAhPSAwKSkgeworCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKKwkJfSBlbHNlCisJCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7CisKKwkJaWYgKHBFZXBEYXRhLT5iYXNlRWVwSGVhZGVyLnR4TWFzayAmICgxIDw8IGkpKSB7CisJCQlwUmF3RGF0YXNldCA9IHBFZXBEYXRhLT5jYWxQaWVyRGF0YTJHW2ldOworCisJCQlhdGg5a19od19nZXRfNGtfZ2Fpbl9ib3VuZGFyaWVzX3BkYWRjcyhhaCwgY2hhbiwKKwkJCQkJICAgIHBSYXdEYXRhc2V0LCBwQ2FsQkNoYW5zLAorCQkJCQkgICAgbnVtUGllcnMsIHBkR2Fpbk92ZXJsYXBfdDIsCisJCQkJCSAgICAmdE1pbkNhbFBvd2VyLCBnYWluQm91bmRhcmllcywKKwkJCQkJICAgIHBkYWRjVmFsdWVzLCBudW1YcGRHYWluKTsKKworCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UUENSRzUgKyByZWdDaGFpbk9mZnNldCwKKwkJCQkJICBTTShwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9PVkVSTEFQKQorCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMF0sCisJCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMSkKKwkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzFdLAorCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzIpCisJCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1syXSwKKwkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8zKQorCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbM10sCisJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80KSk7CisJCQl9CisKKwkJCXJlZ09mZnNldCA9IEFSX1BIWV9CQVNFICsgKDY3MiA8PCAyKSArIHJlZ0NoYWluT2Zmc2V0OworCQkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKKwkJCQlyZWczMiA9ICgocGRhZGNWYWx1ZXNbNCAqIGogKyAwXSAmIDB4RkYpIDw8IDApIHwKKwkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDFdICYgMHhGRikgPDwgOCkgfAorCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMl0gJiAweEZGKSA8PCAxNil8CisJCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAzXSAmIDB4RkYpIDw8IDI0KTsKKwkJCQlSRUdfV1JJVEUoYWgsIHJlZ09mZnNldCwgcmVnMzIpOworCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAorCQkJCQkiUERBREMgKCVkLCU0eCk6ICU0LjR4ICU4Ljh4XG4iLAorCQkJCQlpLCByZWdDaGFpbk9mZnNldCwgcmVnT2Zmc2V0LAorCQkJCQlyZWczMik7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAorCQkJCQkiUERBREM6IENoYWluICVkIHwgIgorCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKKwkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCisJCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgorCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8XG4iLAorCQkJCQlpLCA0ICogaiwgcGRhZGNWYWx1ZXNbNCAqIGpdLAorCQkJCQk0ICogaiArIDEsIHBkYWRjVmFsdWVzWzQgKiBqICsgMV0sCisJCQkJCTQgKiBqICsgMiwgcGRhZGNWYWx1ZXNbNCAqIGogKyAyXSwKKwkJCQkJNCAqIGogKyAzLAorCQkJCQlwZGFkY1ZhbHVlc1s0ICogaiArIDNdKTsKKworCQkJCXJlZ09mZnNldCArPSA0OworCQkJfQorCQl9CisJfQorCisJKnBUeFBvd2VySW5kZXhPZmZzZXQgPSAwOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF80a19wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkJCSBpbnQxNl90ICpyYXRlc0FycmF5LAorCQkJCQkJIHUxNiBjZmdDdGwsCisJCQkJCQkgdTE2IEFudGVubmFSZWR1Y3Rpb24sCisJCQkJCQkgdTE2IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAorCQkJCQkJIHUxNiBwb3dlckxpbWl0KQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKKwlzdGF0aWMgY29uc3QgdTE2IHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVs1XSA9CisJCXsgMCwgMywgNiwgOSwgQVI1NDE2X01BWF9SQVRFX1BPV0VSIH07CisKKwlpbnQgaTsKKwlpbnQxNl90IHR3aWNlTGFyZ2VzdEFudGVubmE7CisJc3RydWN0IGNhbF9jdGxfZGF0YV80ayAqcmVwOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyB0YXJnZXRQb3dlck9mZG0sIHRhcmdldFBvd2VyQ2NrID0geworCQkwLCB7IDAsIDAsIDAsIDB9CisJfTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDB9IH0sIHRhcmdldFBvd2VyQ2NrRXh0ID0geworCQkwLCB7IDAsIDAsIDAsIDAgfQorCX07CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQgdGFyZ2V0UG93ZXJIdDIwLCB0YXJnZXRQb3dlckh0NDAgPSB7CisJCTAsIHswLCAwLCAwLCAwfQorCX07CisJdTE2IHNjYWxlZFBvd2VyID0gMCwgbWluQ3RsUG93ZXIsIG1heFJlZ0FsbG93ZWRQb3dlcjsKKwl1MTYgY3RsTW9kZXNGb3IxMWdbXSA9CisJCXsgQ1RMXzExQiwgQ1RMXzExRywgQ1RMXzJHSFQyMCwgQ1RMXzExQl9FWFQsIENUTF8xMUdfRVhULAorCQkgIENUTF8yR0hUNDAKKwkJfTsKKwl1MTYgbnVtQ3RsTW9kZXMsICpwQ3RsTW9kZSwgY3RsTW9kZSwgZnJlcTsKKwlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisJaW50IHR4X2NoYWlubWFzazsKKwl1MTYgdHdpY2VNaW5FZGdlUG93ZXI7CisKKwl0eF9jaGFpbm1hc2sgPSBhaC0+dHhjaGFpbm1hc2s7CisKKwlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gcEVlcERhdGEtPm1vZGFsSGVhZGVyLmFudGVubmFHYWluQ2hbMF07CisKKwl0d2ljZUxhcmdlc3RBbnRlbm5hID0gKGludDE2X3QpbWluKEFudGVubmFSZWR1Y3Rpb24gLQorCQkJCQkgICB0d2ljZUxhcmdlc3RBbnRlbm5hLCAwKTsKKworCW1heFJlZ0FsbG93ZWRQb3dlciA9IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyICsgdHdpY2VMYXJnZXN0QW50ZW5uYTsKKworCWlmIChhaC0+cmVndWxhdG9yeS50cF9zY2FsZSAhPSBBVEg5S19UUF9TQ0FMRV9NQVgpIHsKKwkJbWF4UmVnQWxsb3dlZFBvd2VyIC09CisJCQkodHBTY2FsZVJlZHVjdGlvblRhYmxlWyhhaC0+cmVndWxhdG9yeS50cF9zY2FsZSldICogMik7CisJfQorCisJc2NhbGVkUG93ZXIgPSBtaW4ocG93ZXJMaW1pdCwgbWF4UmVnQWxsb3dlZFBvd2VyKTsKKwlzY2FsZWRQb3dlciA9IG1heCgodTE2KTAsIHNjYWxlZFBvd2VyKTsKKworCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZykgLSBTVUJfTlVNX0NUTF9NT0RFU19BVF8yR180MDsKKwlwQ3RsTW9kZSA9IGN0bE1vZGVzRm9yMTFnOworCisJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAorCQkJQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKKwkJCSZ0YXJnZXRQb3dlckNjaywgNCwgZmFsc2UpOworCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHLAorCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJJnRhcmdldFBvd2VyT2ZkbSwgNCwgZmFsc2UpOworCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkdIVDIwLAorCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAorCQkJJnRhcmdldFBvd2VySHQyMCwgOCwgZmFsc2UpOworCisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQludW1DdGxNb2RlcyA9IEFSUkFZX1NJWkUoY3RsTW9kZXNGb3IxMWcpOworCQlhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKKwkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUNDAsCisJCQkJQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTLAorCQkJCSZ0YXJnZXRQb3dlckh0NDAsIDgsIHRydWUpOworCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCisJCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyQ2NrLAorCQkJCUFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMsCisJCQkJJnRhcmdldFBvd2VyQ2NrRXh0LCA0LCB0cnVlKTsKKwkJYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAorCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHLAorCQkJCUFSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUywKKwkJCQkmdGFyZ2V0UG93ZXJPZmRtRXh0LCA0LCB0cnVlKTsKKwl9CisKKwlmb3IgKGN0bE1vZGUgPSAwOyBjdGxNb2RlIDwgbnVtQ3RsTW9kZXM7IGN0bE1vZGUrKykgeworCQlib29sIGlzSHQ0MEN0bE1vZGUgPSAocEN0bE1vZGVbY3RsTW9kZV0gPT0gQ1RMXzVHSFQ0MCkgfHwKKwkJCShwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfMkdIVDQwKTsKKwkJaWYgKGlzSHQ0MEN0bE1vZGUpCisJCQlmcmVxID0gY2VudGVycy5zeW50aF9jZW50ZXI7CisJCWVsc2UgaWYgKHBDdGxNb2RlW2N0bE1vZGVdICYgRVhUX0FERElUSVZFKQorCQkJZnJlcSA9IGNlbnRlcnMuZXh0X2NlbnRlcjsKKwkJZWxzZQorCQkJZnJlcSA9IGNlbnRlcnMuY3RsX2NlbnRlcjsKKworCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSA9PSAxNCAmJgorCQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8PSAyKQorCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKKwkJCSJMT09QLU1vZGUgY3RsTW9kZSAlZCA8ICVkLCBpc0h0NDBDdGxNb2RlICVkLCAiCisJCQkiRVhUX0FERElUSVZFICVkXG4iLAorCQkJY3RsTW9kZSwgbnVtQ3RsTW9kZXMsIGlzSHQ0MEN0bE1vZGUsCisJCQkocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpKTsKKworCQlmb3IgKGkgPSAwOyAoaSA8IEFSNTQxNl9OVU1fQ1RMUykgJiYKKwkJCQlwRWVwRGF0YS0+Y3RsSW5kZXhbaV07IGkrKykgeworCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKKwkJCQkiICBMT09QLUN0bGlkeCAlZDogY2ZnQ3RsIDB4JTIuMnggIgorCQkJCSJwQ3RsTW9kZSAweCUyLjJ4IGN0bEluZGV4IDB4JTIuMnggIgorCQkJCSJjaGFuICVkXG4iLAorCQkJCWksIGNmZ0N0bCwgcEN0bE1vZGVbY3RsTW9kZV0sCisJCQkJcEVlcERhdGEtPmN0bEluZGV4W2ldLCBjaGFuLT5jaGFubmVsKTsKKworCQkJaWYgKCgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8CisJCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KKwkJCSAgICAgcEVlcERhdGEtPmN0bEluZGV4W2ldKSB8fAorCQkJICAgICgoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSB8CisJCQkgICAgICAocEN0bE1vZGVbY3RsTW9kZV0gJiBDVExfTU9ERV9NKSkgPT0KKwkJCSAgICAgKChwRWVwRGF0YS0+Y3RsSW5kZXhbaV0gJiBDVExfTU9ERV9NKSB8CisJCQkgICAgICBTRF9OT19DVEwpKSkgeworCQkJCXJlcCA9ICYocEVlcERhdGEtPmN0bERhdGFbaV0pOworCisJCQkJdHdpY2VNaW5FZGdlUG93ZXIgPQorCQkJCQlhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIoZnJlcSwKKwkJCQlyZXAtPmN0bEVkZ2VzW2FyNTQxNl9nZXRfbnR4Y2hhaW5zCisJCQkJCQkodHhfY2hhaW5tYXNrKSAtIDFdLAorCQkJCUlTX0NIQU5fMkdIWihjaGFuKSwKKwkJCQlBUjU0MTZfRUVQNEtfTlVNX0JBTkRfRURHRVMpOworCisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKKwkJCQkJIiAgICBNQVRDSC1FRV9JRFggJWQ6IGNoICVkIGlzMiAlZCAiCisJCQkJCSIyeE1pbkVkZ2UgJWQgY2hhaW5tYXNrICVkIGNoYWlucyAlZFxuIiwKKwkJCQkJaSwgZnJlcSwgSVNfQ0hBTl8yR0haKGNoYW4pLAorCQkJCQl0d2ljZU1pbkVkZ2VQb3dlciwgdHhfY2hhaW5tYXNrLAorCQkJCQlhcjU0MTZfZ2V0X250eGNoYWlucworCQkJCQkodHhfY2hhaW5tYXNrKSk7CisJCQkJaWYgKChjZmdDdGwgJiB+Q1RMX01PREVfTSkgPT0gU0RfTk9fQ1RMKSB7CisJCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0KKwkJCQkJCW1pbih0d2ljZU1heEVkZ2VQb3dlciwKKwkJCQkJCSAgICB0d2ljZU1pbkVkZ2VQb3dlcik7CisJCQkJfSBlbHNlIHsKKwkJCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSB0d2ljZU1pbkVkZ2VQb3dlcjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisKKwkJbWluQ3RsUG93ZXIgPSAodTgpbWluKHR3aWNlTWF4RWRnZVBvd2VyLCBzY2FsZWRQb3dlcik7CisKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKKwkJCSIgICAgU0VMLU1pbiBjdGxNb2RlICVkIHBDdGxNb2RlICVkICIKKwkJCSIyeE1heEVkZ2UgJWQgc1AgJWQgbWluQ3RsUHdyICVkXG4iLAorCQkJY3RsTW9kZSwgcEN0bE1vZGVbY3RsTW9kZV0sIHR3aWNlTWF4RWRnZVBvd2VyLAorCQkJc2NhbGVkUG93ZXIsIG1pbkN0bFBvd2VyKTsKKworCQlzd2l0Y2ggKHBDdGxNb2RlW2N0bE1vZGVdKSB7CisJCWNhc2UgQ1RMXzExQjoKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyQ2NrLnRQb3cyeCk7CisJCQkJCWkrKykgeworCQkJCXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyQ2NrLnRQb3cyeFtpXSwKKwkJCQkJICAgIG1pbkN0bFBvd2VyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENUTF8xMUc6CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlck9mZG0udFBvdzJ4KTsKKwkJCQkJaSsrKSB7CisJCQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSA9CisJCQkJCW1pbigodTE2KXRhcmdldFBvd2VyT2ZkbS50UG93MnhbaV0sCisJCQkJCSAgICBtaW5DdGxQb3dlcik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDVExfMkdIVDIwOgorCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7CisJCQkJCWkrKykgeworCQkJCXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0gPQorCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldLAorCQkJCQkgICAgbWluQ3RsUG93ZXIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzExQl9FWFQ6CisJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKKwkJCQkJdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdLAorCQkJCQltaW5DdGxQb3dlcik7CisJCQlicmVhazsKKwkJY2FzZSBDVExfMTFHX0VYVDoKKwkJCXRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF0gPSBtaW4oKHUxNikKKwkJCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSwKKwkJCQkJbWluQ3RsUG93ZXIpOworCQkJYnJlYWs7CisJCWNhc2UgQ1RMXzJHSFQ0MDoKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQ0MC50UG93MngpOworCQkJCQlpKyspIHsKKwkJCQl0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldID0KKwkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXSwKKwkJCQkJICAgIG1pbkN0bFBvd2VyKTsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyYXRlc0FycmF5W3JhdGU2bWJdID0gcmF0ZXNBcnJheVtyYXRlOW1iXSA9IHJhdGVzQXJyYXlbcmF0ZTEybWJdID0KKwkJcmF0ZXNBcnJheVtyYXRlMThtYl0gPSByYXRlc0FycmF5W3JhdGUyNG1iXSA9CisJCXRhcmdldFBvd2VyT2ZkbS50UG93MnhbMF07CisJcmF0ZXNBcnJheVtyYXRlMzZtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzFdOworCXJhdGVzQXJyYXlbcmF0ZTQ4bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFsyXTsKKwlyYXRlc0FycmF5W3JhdGU1NG1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbM107CisJcmF0ZXNBcnJheVtyYXRlWHJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VySHQyMC50UG93MngpOyBpKyspCisJCXJhdGVzQXJyYXlbcmF0ZUh0MjBfMCArIGldID0gdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXTsKKworCXJhdGVzQXJyYXlbcmF0ZTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFswXTsKKwlyYXRlc0FycmF5W3JhdGUyc10gPSByYXRlc0FycmF5W3JhdGUybF0gPSB0YXJnZXRQb3dlckNjay50UG93MnhbMV07CisJcmF0ZXNBcnJheVtyYXRlNV81c10gPSByYXRlc0FycmF5W3JhdGU1XzVsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFsyXTsKKwlyYXRlc0FycmF5W3JhdGUxMXNdID0gcmF0ZXNBcnJheVtyYXRlMTFsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFszXTsKKworCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7IGkrKykgeworCQkJcmF0ZXNBcnJheVtyYXRlSHQ0MF8wICsgaV0gPQorCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV07CisJCX0KKwkJcmF0ZXNBcnJheVtyYXRlRHVwT2ZkbV0gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVEdXBDY2tdID0gdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFswXTsKKwkJcmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0gPSB0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdOworCQlyYXRlc0FycmF5W3JhdGVFeHRDY2tdID0gdGFyZ2V0UG93ZXJDY2tFeHQudFBvdzJ4WzBdOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBhdGg5a19od180a19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICB1MTYgY2ZnQ3RsLAorCQkJCSAgIHU4IHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKKwkJCQkgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICB1OCBwb3dlckxpbWl0KQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLm1hcDRrOworCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwgPSAmcEVlcERhdGEtPm1vZGFsSGVhZGVyOworCWludDE2X3QgcmF0ZXNBcnJheVtBcjU0MTZSYXRlU2l6ZV07CisJaW50MTZfdCB0eFBvd2VySW5kZXhPZmZzZXQgPSAwOworCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjID0gMjsKKwlpbnQgaTsKKworCW1lbXNldChyYXRlc0FycmF5LCAwLCBzaXplb2YocmF0ZXNBcnJheSkpOworCisJaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgeworCQlodDQwUG93ZXJJbmNGb3JQZGFkYyA9IHBNb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJfQorCisJaWYgKCFhdGg5a19od19zZXRfNGtfcG93ZXJfcGVyX3JhdGVfdGFibGUoYWgsIGNoYW4sCisJCQkJCSAgICAgICAmcmF0ZXNBcnJheVswXSwgY2ZnQ3RsLAorCQkJCQkgICAgICAgdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCQkgICAgICAgdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCisJCQkJCSAgICAgICBwb3dlckxpbWl0KSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkiYXRoOWtfaHdfc2V0X3R4cG93ZXI6IHVuYWJsZSB0byBzZXQgIgorCQkJInR4IHBvd2VyIHBlciByYXRlIHRhYmxlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKCFhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKGFoLCBjaGFuLCAmdHhQb3dlckluZGV4T2Zmc2V0KSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCisJCQkgImF0aDlrX2h3X3NldF90eHBvd2VyOiB1bmFibGUgdG8gc2V0IHBvd2VyIHRhYmxlXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZXNBcnJheSk7IGkrKykgeworCQlyYXRlc0FycmF5W2ldID0JKGludDE2X3QpKHR4UG93ZXJJbmRleE9mZnNldCArIHJhdGVzQXJyYXlbaV0pOworCQlpZiAocmF0ZXNBcnJheVtpXSA+IEFSNTQxNl9NQVhfUkFURV9QT1dFUikKKwkJCXJhdGVzQXJyYXlbaV0gPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CisJfQorCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJZm9yIChpID0gMDsgaSA8IEFyNTQxNlJhdGVTaXplOyBpKyspCisJCQlyYXRlc0FycmF5W2ldIC09IEFSNTQxNl9QV1JfVEFCTEVfT0ZGU0VUICogMjsKKwl9CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMSwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMThtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTEybWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU5bWJdLCA4KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTZtYl0sIDApKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMiwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNTRtYl0sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTQ4bWJdLCAxNikKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUzNm1iXSwgOCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyNG1iXSwgMCkpOworCisJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJzXSwgMjQpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJsXSwgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMWxdLCAwKSk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFzXSwgMjQpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExbF0sIDE2KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVzXSwgOCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81bF0sIDApKTsKKwl9CisKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNSwKKwkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8zXSwgMjQpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8yXSwgMTYpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8xXSwgOCkKKwkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzBdLCAwKSk7CisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTYsCisJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfN10sIDI0KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNl0sIDE2KQorCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNV0sIDgpCisJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF80XSwgMCkpOworCisJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNywKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfM10gKworCQkJCSAgICAgICBodDQwUG93ZXJJbmNGb3JQZGFkYywgMjQpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfMl0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDE2KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzFdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzBdICsKKwkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAwKSk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU4LAorCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF83XSArCisJCQkJICAgICAgIGh0NDBQb3dlckluY0ZvclBkYWRjLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF82XSArCisJCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNV0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDgpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNF0gKworCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDApKTsKKworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOSwKKwkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dE9mZG1dLCAyNCkKKwkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0Q2NrXSwgMTYpCisJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBDY2tdLCAwKSk7CisJfQorCisJaSA9IHJhdGU2bWI7CisKKwlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQorCQlpID0gcmF0ZUh0NDBfMDsKKwllbHNlIGlmIChJU19DSEFOX0hUMjAoY2hhbikpCisJCWkgPSByYXRlSHQyMF8wOworCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9CisJCQlyYXRlc0FycmF5W2ldICsgQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOworCWVsc2UKKwkJYWgtPnJlZ3VsYXRvcnkubWF4X3Bvd2VyX2xldmVsID0gcmF0ZXNBcnJheVtpXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19od180a19zZXRfYWRkYWMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwl1OCBiaWFzbGV2ZWw7CisKKwlpZiAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKKwkJcmV0dXJuOworCisJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX01JTk9SX1ZFUl83KQorCQlyZXR1cm47CisKKwlwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKKworCWlmIChwTW9kYWwtPnhwYUJpYXNMdmwgIT0gMHhmZikgeworCQliaWFzbGV2ZWwgPSBwTW9kYWwtPnhwYUJpYXNMdmw7CisJCUlOSV9SQSgmYWgtPmluaUFkZGFjLCA3LCAxKSA9CisJCSAgKElOSV9SQSgmYWgtPmluaUFkZGFjLCA3LCAxKSAmICh+MHgxOCkpIHwgYmlhc2xldmVsIDw8IDM7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od180a19zZXRfZ2FpbihzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCwKKwkJCQkgc3RydWN0IGFyNTQxNl9lZXByb21fNGsgKmVlcCwKKwkJCQkgdTggdHhSeEF0dGVuTG9jYWwsIGludCByZWdDaGFpbk9mZnNldCkKK3sKKwlSRUdfV1JJVEUoYWgsIEFSX1BIWV9TV0lUQ0hfQ0hBSU5fMCArIHJlZ0NoYWluT2Zmc2V0LAorCQkgIHBNb2RhbC0+YW50Q3RybENoYWluWzBdKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0LAorCQkgIChSRUdfUkVBRChhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0KSAmCisJCSAgIH4oQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYgfAorCQkgICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSkgfAorCQkgIFNNKHBNb2RhbC0+aXFDYWxJQ2hbMF0sIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSB8CisJCSAgU00ocE1vZGFsLT5pcUNhbFFDaFswXSwgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9RX0NPRkYpKTsKKworCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCSAgICBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zKSB7CisJCXR4UnhBdHRlbkxvY2FsID0gcE1vZGFsLT50eFJ4QXR0ZW5DaFswXTsKKworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOLCBwTW9kYWwtPmJzd01hcmdpblswXSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9EQiwgcE1vZGFsLT5ic3dBdHRlblswXSk7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9NQVJHSU4sCisJCQkgICAgICBwTW9kYWwtPnhhdHRlbjJNYXJnaW5bMF0pOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfREIsIHBNb2RhbC0+eGF0dGVuMkRiWzBdKTsKKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCisJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfQVRURU4sIHR4UnhBdHRlbkxvY2FsKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCisJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfTUFSR0lOLCBwTW9kYWwtPnJ4VHhNYXJnaW5DaFswXSk7CisKKwlpZiAoQVJfU1JFVl85Mjg1XzExKGFoKSkKKwkJUkVHX1dSSVRFKGFoLCBBUjkyODVfQU5fVE9QNCwgKEFSOTI4NV9BTl9UT1A0X0RFRkFVTFQgfCAweDE0KSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3XzRrX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWgtPmVlcHJvbS5tYXA0azsKKwl1OCB0eFJ4QXR0ZW5Mb2NhbDsKKwl1OCBvYls1XSwgZGIxWzVdLCBkYjJbNV07CisJdTggYW50X2Rpdl9jb250cm9sMSwgYW50X2Rpdl9jb250cm9sMjsKKwl1MzIgcmVnVmFsOworCisJcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7CisJdHhSeEF0dGVuTG9jYWwgPSAyMzsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCisJCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKworCS8qIFNpbmdsZSBjaGFpbiBmb3IgNEsgRUVQUk9NKi8KKwlhdGg5a19od180a19zZXRfZ2FpbihhaCwgcE1vZGFsLCBlZXAsIHR4UnhBdHRlbkxvY2FsLCAwKTsKKworCS8qIEluaXRpYWxpemUgQW50IERpdmVyc2l0eSBzZXR0aW5ncyBmcm9tIEVFUFJPTSAqLworCWlmIChwTW9kYWwtPnZlcnNpb24gPT0gMykgeworCQlhbnRfZGl2X2NvbnRyb2wxID0gKChwTW9kYWwtPm9iXzIzNCA+PiAxMikgJiAweGYpOworCQlhbnRfZGl2X2NvbnRyb2wyID0gKChwTW9kYWwtPmRiMV8yMzQgPj4gMTIpICYgMHhmKTsKKwkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTlhYyk7CisJCXJlZ1ZhbCAmPSAofigweDdmMDAwMDAwKSk7CisJCXJlZ1ZhbCB8PSAoKGFudF9kaXZfY29udHJvbDEgJiAweDEpIDw8IDI0KTsKKwkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDEgPj4gMSkgJiAweDEpIDw8IDI5KTsKKwkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDEgPj4gMikgJiAweDEpIDw8IDMwKTsKKwkJcmVnVmFsIHw9ICgoYW50X2Rpdl9jb250cm9sMiAmIDB4MykgPDwgMjUpOworCQlyZWdWYWwgfD0gKCgoYW50X2Rpdl9jb250cm9sMiA+PiAyKSAmIDB4MykgPDwgMjcpOworCQlSRUdfV1JJVEUoYWgsIDB4OTlhYywgcmVnVmFsKTsKKwkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTlhYyk7CisJCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweGEyMDgpOworCQlyZWdWYWwgJj0gKH4oMHgxIDw8IDEzKSk7CisJCXJlZ1ZhbCB8PSAoKChhbnRfZGl2X2NvbnRyb2wxID4+IDMpICYgMHgxKSA8PCAxMyk7CisJCVJFR19XUklURShhaCwgMHhhMjA4LCByZWdWYWwpOworCQlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHhhMjA4KTsKKwl9CisKKwlpZiAocE1vZGFsLT52ZXJzaW9uID49IDIpIHsKKwkJb2JbMF0gPSAocE1vZGFsLT5vYl8wMSAmIDB4Zik7CisJCW9iWzFdID0gKHBNb2RhbC0+b2JfMDEgPj4gNCkgJiAweGY7CisJCW9iWzJdID0gKHBNb2RhbC0+b2JfMjM0ICYgMHhmKTsKKwkJb2JbM10gPSAoKHBNb2RhbC0+b2JfMjM0ID4+IDQpICYgMHhmKTsKKwkJb2JbNF0gPSAoKHBNb2RhbC0+b2JfMjM0ID4+IDgpICYgMHhmKTsKKworCQlkYjFbMF0gPSAocE1vZGFsLT5kYjFfMDEgJiAweGYpOworCQlkYjFbMV0gPSAoKHBNb2RhbC0+ZGIxXzAxID4+IDQpICYgMHhmKTsKKwkJZGIxWzJdID0gKHBNb2RhbC0+ZGIxXzIzNCAmIDB4Zik7CisJCWRiMVszXSA9ICgocE1vZGFsLT5kYjFfMjM0ID4+IDQpICYgMHhmKTsKKwkJZGIxWzRdID0gKChwTW9kYWwtPmRiMV8yMzQgPj4gOCkgJiAweGYpOworCisJCWRiMlswXSA9IChwTW9kYWwtPmRiMl8wMSAmIDB4Zik7CisJCWRiMlsxXSA9ICgocE1vZGFsLT5kYjJfMDEgPj4gNCkgJiAweGYpOworCQlkYjJbMl0gPSAocE1vZGFsLT5kYjJfMjM0ICYgMHhmKTsKKwkJZGIyWzNdID0gKChwTW9kYWwtPmRiMl8yMzQgPj4gNCkgJiAweGYpOworCQlkYjJbNF0gPSAoKHBNb2RhbC0+ZGIyXzIzNCA+PiA4KSAmIDB4Zik7CisKKwl9IGVsc2UgaWYgKHBNb2RhbC0+dmVyc2lvbiA9PSAxKSB7CisJCW9iWzBdID0gKHBNb2RhbC0+b2JfMDEgJiAweGYpOworCQlvYlsxXSA9IG9iWzJdID0gb2JbM10gPSBvYls0XSA9IChwTW9kYWwtPm9iXzAxID4+IDQpICYgMHhmOworCQlkYjFbMF0gPSAocE1vZGFsLT5kYjFfMDEgJiAweGYpOworCQlkYjFbMV0gPSBkYjFbMl0gPSBkYjFbM10gPQorCQkJZGIxWzRdID0gKChwTW9kYWwtPmRiMV8wMSA+PiA0KSAmIDB4Zik7CisJCWRiMlswXSA9IChwTW9kYWwtPmRiMl8wMSAmIDB4Zik7CisJCWRiMlsxXSA9IGRiMlsyXSA9IGRiMlszXSA9CisJCQlkYjJbNF0gPSAoKHBNb2RhbC0+ZGIyXzAxID4+IDQpICYgMHhmKTsKKwl9IGVsc2UgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJb2JbaV0gPSBwTW9kYWwtPm9iXzAxOworCQkJZGIxW2ldID0gcE1vZGFsLT5kYjFfMDE7CisJCQlkYjJbaV0gPSBwTW9kYWwtPmRiMV8wMTsKKwkJfQorCX0KKworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKKwkJCUFSOTI4NV9BTl9SRjJHM19PQl8wLCBBUjkyODVfQU5fUkYyRzNfT0JfMF9TLCBvYlswXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAorCQkJQVI5Mjg1X0FOX1JGMkczX09CXzEsIEFSOTI4NV9BTl9SRjJHM19PQl8xX1MsIG9iWzFdKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCisJCQlBUjkyODVfQU5fUkYyRzNfT0JfMiwgQVI5Mjg1X0FOX1JGMkczX09CXzJfUywgb2JbMl0pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKKwkJCUFSOTI4NV9BTl9SRjJHM19PQl8zLCBBUjkyODVfQU5fUkYyRzNfT0JfM19TLCBvYlszXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAorCQkJQVI5Mjg1X0FOX1JGMkczX09CXzQsIEFSOTI4NV9BTl9SRjJHM19PQl80X1MsIG9iWzRdKTsKKworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKKwkJCUFSOTI4NV9BTl9SRjJHM19EQjFfMCwgQVI5Mjg1X0FOX1JGMkczX0RCMV8wX1MsIGRiMVswXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAorCQkJQVI5Mjg1X0FOX1JGMkczX0RCMV8xLCBBUjkyODVfQU5fUkYyRzNfREIxXzFfUywgZGIxWzFdKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCisJCQlBUjkyODVfQU5fUkYyRzNfREIxXzIsIEFSOTI4NV9BTl9SRjJHM19EQjFfMl9TLCBkYjFbMl0pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKKwkJCUFSOTI4NV9BTl9SRjJHNF9EQjFfMywgQVI5Mjg1X0FOX1JGMkc0X0RCMV8zX1MsIGRiMVszXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAorCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMV80LCBBUjkyODVfQU5fUkYyRzRfREIxXzRfUywgZGIxWzRdKTsKKworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKKwkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMCwgQVI5Mjg1X0FOX1JGMkc0X0RCMl8wX1MsIGRiMlswXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAorCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl8xLCBBUjkyODVfQU5fUkYyRzRfREIyXzFfUywgZGIyWzFdKTsKKwlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCisJCQlBUjkyODVfQU5fUkYyRzRfREIyXzIsIEFSOTI4NV9BTl9SRjJHNF9EQjJfMl9TLCBkYjJbMl0pOworCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKKwkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMywgQVI5Mjg1X0FOX1JGMkc0X0RCMl8zX1MsIGRiMlszXSk7CisJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAorCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl80LCBBUjkyODVfQU5fUkYyRzRfREIyXzRfUywgZGIyWzRdKTsKKworCisJaWYgKEFSX1NSRVZfOTI4NV8xMShhaCkpCisJCVJFR19XUklURShhaCwgQVI5Mjg1X0FOX1RPUDQsIEFSOTI4NV9BTl9UT1A0X0RFRkFVTFQpOworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLCBBUl9QSFlfU0VUVExJTkdfU1dJVENILAorCQkgICAgICBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwgQVJfUEhZX0RFU0lSRURfU1pfQURDLAorCQkgICAgICBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1JGX0NUTDQsCisJCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQV9PRkYpIHwKKwkJICBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFCX09GRikgfAorCQkgIFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04pICB8CisJCSAgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQl9PTikpOworCisJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDMsIEFSX1BIWV9UWF9FTkRfVE9fQTJfUlhfT04sCisJCSAgICAgIHBNb2RhbC0+dHhFbmRUb1J4T24pOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSOTI4MF9QSFlfQ0NBX1RIUkVTSDYyLAorCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQTAsIEFSX1BIWV9FWFRfQ0NBMF9USFJFU0g2MiwKKwkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisKKwlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KKwkJCQkJCUFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsIEFSX1BIWV9UWF9FTkRfREFUQV9TVEFSVCwKKwkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvRGF0YVN0YXJ0KTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsIEFSX1BIWV9UWF9FTkRfUEFfT04sCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb1BhT24pOworCX0KKworCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQorCQkJCQkJQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgeworCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAorCQkJCSAgICAgIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCisJCQkJICAgICAgcE1vZGFsLT5zd1NldHRsZUh0NDApOworCX0KK30KKworc3RhdGljIHUxNiBhdGg5a19od180a19nZXRfZWVwcm9tX2FudGVubmFfY2ZnKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFoLT5lZXByb20ubWFwNGs7CisJc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOworCisJcmV0dXJuIHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKK30KKworc3RhdGljIHU4IGF0aDlrX2h3XzRrX2dldF9udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJIGVudW0gaWVlZTgwMjExX2JhbmQgZnJlcV9iYW5kKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgdTE2IGF0aDlrX2h3XzRrX2dldF9zcHVyX2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeikKK3sKKyNkZWZpbmUgRUVQX01BUDRLX1NQVVJDSEFOIFwKKwkoYWgtPmVlcHJvbS5tYXA0ay5tb2RhbEhlYWRlci5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pCisKKwl1MTYgc3B1cl92YWwgPSBBUl9OT19TUFVSOworCisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAorCQkiR2V0dGluZyBzcHVyIGlkeCAlZCBpczJHaHouICVkIHZhbCAleFxuIiwKKwkJaSwgaXMyR0h6LCBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdKTsKKworCXN3aXRjaCAoYWgtPmNvbmZpZy5zcHVybW9kZSkgeworCWNhc2UgU1BVUl9ESVNBQkxFOgorCQlicmVhazsKKwljYXNlIFNQVVJfRU5BQkxFX0lPQ1RMOgorCQlzcHVyX3ZhbCA9IGFoLT5jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0FOSSwKKwkJCSJHZXR0aW5nIHNwdXIgdmFsIGZyb20gbmV3IGxvYy4gJWRcbiIsIHNwdXJfdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBTUFVSX0VOQUJMRV9FRVBST006CisJCXNwdXJfdmFsID0gRUVQX01BUDRLX1NQVVJDSEFOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3B1cl92YWw7CisKKyN1bmRlZiBFRVBfTUFQNEtfU1BVUkNIQU4KK30KKworc3RhdGljIHN0cnVjdCBlZXByb21fb3BzIGVlcF80a19vcHMgPSB7CisJLmNoZWNrX2VlcHJvbQkJPSBhdGg5a19od180a19jaGVja19lZXByb20sCisJLmdldF9lZXByb20JCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbSwKKwkuZmlsbF9lZXByb20JCT0gYXRoOWtfaHdfNGtfZmlsbF9lZXByb20sCisJLmdldF9lZXByb21fdmVyCQk9IGF0aDlrX2h3XzRrX2dldF9lZXByb21fdmVyLAorCS5nZXRfZWVwcm9tX3JldgkJPSBhdGg5a19od180a19nZXRfZWVwcm9tX3JldiwKKwkuZ2V0X251bV9hbnRfY29uZmlnCT0gYXRoOWtfaHdfNGtfZ2V0X251bV9hbnRfY29uZmlnLAorCS5nZXRfZWVwcm9tX2FudGVubmFfY2ZnCT0gYXRoOWtfaHdfNGtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZywKKwkuc2V0X2JvYXJkX3ZhbHVlcwk9IGF0aDlrX2h3XzRrX3NldF9ib2FyZF92YWx1ZXMsCisJLnNldF9hZGRhYwkJPSBhdGg5a19od180a19zZXRfYWRkYWMsCisJLnNldF90eHBvd2VyCQk9IGF0aDlrX2h3XzRrX3NldF90eHBvd2VyLAorCS5nZXRfc3B1cl9jaGFubmVsCT0gYXRoOWtfaHdfNGtfZ2V0X3NwdXJfY2hhbm5lbAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEVFUFJPTSBPcGVyYXRpb25zIGZvciBub24tNEsgKERlZmF1bHQpIGNhcmRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGF0aDlrX2h3X2RlZl9nZXRfZWVwcm9tX3ZlcihzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gKChhaC0+ZWVwcm9tLmRlZi5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPj4gMTIpICYgMHhGKTsKK30KKworc3RhdGljIGludCBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9yZXYoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuICgoYWgtPmVlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci52ZXJzaW9uKSAmIDB4RkZGKTsKK30KKworc3RhdGljIGJvb2wgYXRoOWtfaHdfZGVmX2ZpbGxfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQoreworI2RlZmluZSBTSVpFX0VFUFJPTV9ERUYgKHNpemVvZihzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYpIC8gc2l6ZW9mKHUxNikpCisJdTE2ICplZXBfZGF0YSA9ICh1MTYgKikmYWgtPmVlcHJvbS5kZWY7CisJaW50IGFkZHIsIGFyNTQxNl9lZXBfc3RhcnRfbG9jID0gMHgxMDA7CisKKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgU0laRV9FRVBST01fREVGOyBhZGRyKyspIHsKKwkJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBhZGRyICsgYXI1NDE2X2VlcF9zdGFydF9sb2MsCisJCQkJCSBlZXBfZGF0YSkpIHsKKwkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJCSJVbmFibGUgdG8gcmVhZCBlZXByb20gcmVnaW9uXG4iKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQllZXBfZGF0YSsrOworCX0KKwlyZXR1cm4gdHJ1ZTsKKyN1bmRlZiBTSVpFX0VFUFJPTV9ERUYKK30KKworc3RhdGljIGludCBhdGg5a19od19kZWZfY2hlY2tfZWVwcm9tKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0KKwkJKHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqKSAmYWgtPmVlcHJvbS5kZWY7CisJdTE2ICplZXBkYXRhLCB0ZW1wLCBtYWdpYywgbWFnaWMyOworCXUzMiBzdW0gPSAwLCBlbDsKKwlib29sIG5lZWRfc3dhcCA9IGZhbHNlOworCWludCBpLCBhZGRyLCBzaXplOworCisJaWYgKCFhdGg5a19od19udnJhbV9yZWFkKGFoLCBBUjU0MTZfRUVQUk9NX01BR0lDX09GRlNFVCwgJm1hZ2ljKSkgeworCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwgIlJlYWRpbmcgTWFnaWMgIyBmYWlsZWRcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJaWYgKCFhdGg5a19od191c2VfZmxhc2goYWgpKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJSZWFkIE1hZ2ljID0gMHglMDRYXG4iLCBtYWdpYyk7CisKKwkJaWYgKG1hZ2ljICE9IEFSNTQxNl9FRVBST01fTUFHSUMpIHsKKwkJCW1hZ2ljMiA9IHN3YWIxNihtYWdpYyk7CisKKwkJCWlmIChtYWdpYzIgPT0gQVI1NDE2X0VFUFJPTV9NQUdJQykgeworCQkJCXNpemUgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKTsKKwkJCQluZWVkX3N3YXAgPSB0cnVlOworCQkJCWVlcGRhdGEgPSAodTE2ICopICgmYWgtPmVlcHJvbSk7CisKKwkJCQlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgc2l6ZSAvIHNpemVvZih1MTYpOyBhZGRyKyspIHsKKwkJCQkJdGVtcCA9IHN3YWIxNigqZWVwZGF0YSk7CisJCQkJCSplZXBkYXRhID0gdGVtcDsKKwkJCQkJZWVwZGF0YSsrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkJCSJJbnZhbGlkIEVFUFJPTSBNYWdpYy4gIgorCQkJCQkiRW5kaWFubmVzcyBtaXNtYXRjaC5cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisJfQorCisJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLCAibmVlZF9zd2FwID0gJXMuXG4iLAorCQluZWVkX3N3YXAgPyAiVHJ1ZSIgOiAiRmFsc2UiKTsKKworCWlmIChuZWVkX3N3YXApCisJCWVsID0gc3dhYjE2KGFoLT5lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIubGVuZ3RoKTsKKwllbHNlCisJCWVsID0gYWgtPmVlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci5sZW5ndGg7CisKKwlpZiAoZWwgPiBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSkKKwkJZWwgPSBzaXplb2Yoc3RydWN0IGFyNTQxNl9lZXByb21fZGVmKSAvIHNpemVvZih1MTYpOworCWVsc2UKKwkJZWwgPSBlbCAvIHNpemVvZih1MTYpOworCisJZWVwZGF0YSA9ICh1MTYgKikoJmFoLT5lZXByb20pOworCisJZm9yIChpID0gMDsgaSA8IGVsOyBpKyspCisJCXN1bSBePSAqZWVwZGF0YSsrOworCisJaWYgKG5lZWRfc3dhcCkgeworCQl1MzIgaW50ZWdlciwgajsKKwkJdTE2IHdvcmQ7CisKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAorCQkJIkVFUFJPTSBFbmRpYW5uZXNzIGlzIG5vdCBuYXRpdmUuLiBDaGFuZ2luZy5cbiIpOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmxlbmd0aCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5sZW5ndGggPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmNoZWNrc3VtID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblswXSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMF0gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJlZ0RtblsxXSk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5yZWdEbW5bMV0gPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50KTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLnJmU2lsZW50ID0gd29yZDsKKworCQl3b3JkID0gc3dhYjE2KGVlcC0+YmFzZUVlcEhlYWRlci5ibHVlVG9vdGhPcHRpb25zKTsKKwkJZWVwLT5iYXNlRWVwSGVhZGVyLmJsdWVUb290aE9wdGlvbnMgPSB3b3JkOworCisJCXdvcmQgPSBzd2FiMTYoZWVwLT5iYXNlRWVwSGVhZGVyLmRldmljZUNhcCk7CisJCWVlcC0+YmFzZUVlcEhlYWRlci5kZXZpY2VDYXAgPSB3b3JkOworCisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGVlcC0+bW9kYWxIZWFkZXIpOyBqKyspIHsKKwkJCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkJCSZlZXAtPm1vZGFsSGVhZGVyW2pdOworCQkJaW50ZWdlciA9IHN3YWIzMihwTW9kYWwtPmFudEN0cmxDb21tb24pOworCQkJcE1vZGFsLT5hbnRDdHJsQ29tbW9uID0gaW50ZWdlcjsKKworCQkJZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKKwkJCQlpbnRlZ2VyID0gc3dhYjMyKHBNb2RhbC0+YW50Q3RybENoYWluW2ldKTsKKwkJCQlwTW9kYWwtPmFudEN0cmxDaGFpbltpXSA9IGludGVnZXI7CisJCQl9CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTOyBpKyspIHsKKwkJCQl3b3JkID0gc3dhYjE2KHBNb2RhbC0+c3B1ckNoYW5zW2ldLnNwdXJDaGFuKTsKKwkJCQlwTW9kYWwtPnNwdXJDaGFuc1tpXS5zcHVyQ2hhbiA9IHdvcmQ7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoc3VtICE9IDB4ZmZmZiB8fCBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV92ZXIoYWgpICE9IEFSNTQxNl9FRVBfVkVSIHx8CisJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3JldihhaCkgPCBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIkJhZCBFRVBST00gY2hlY2tzdW0gMHgleCBvciByZXZpc2lvbiAweCUwNHhcbiIsCisJCQlzdW0sIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tX3ZlcihhaCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBhdGg5a19od19kZWZfZ2V0X2VlcHJvbShzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgICBlbnVtIGVlcHJvbV9wYXJhbSBwYXJhbSkKK3sKKwlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKKwlzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsID0gZWVwLT5tb2RhbEhlYWRlcjsKKwlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICpwQmFzZSA9ICZlZXAtPmJhc2VFZXBIZWFkZXI7CisKKwlzd2l0Y2ggKHBhcmFtKSB7CisJY2FzZSBFRVBfTkZUSFJFU0hfNToKKwkJcmV0dXJuIHBNb2RhbFswXS5ub2lzZUZsb29yVGhyZXNoQ2hbMF07CisJY2FzZSBFRVBfTkZUSFJFU0hfMjoKKwkJcmV0dXJuIHBNb2RhbFsxXS5ub2lzZUZsb29yVGhyZXNoQ2hbMF07CisJY2FzZSBBUl9FRVBST01fTUFDKDApOgorCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzFdOworCWNhc2UgQVJfRUVQUk9NX01BQygxKToKKwkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzJdIDw8IDggfCBwQmFzZS0+bWFjQWRkclszXTsKKwljYXNlIEFSX0VFUFJPTV9NQUMoMik6CisJCXJldHVybiBwQmFzZS0+bWFjQWRkcls0XSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbNV07CisJY2FzZSBFRVBfUkVHXzA6CisJCXJldHVybiBwQmFzZS0+cmVnRG1uWzBdOworCWNhc2UgRUVQX1JFR18xOgorCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblsxXTsKKwljYXNlIEVFUF9PUF9DQVA6CisJCXJldHVybiBwQmFzZS0+ZGV2aWNlQ2FwOworCWNhc2UgRUVQX09QX01PREU6CisJCXJldHVybiBwQmFzZS0+b3BDYXBGbGFnczsKKwljYXNlIEVFUF9SRl9TSUxFTlQ6CisJCXJldHVybiBwQmFzZS0+cmZTaWxlbnQ7CisJY2FzZSBFRVBfT0JfNToKKwkJcmV0dXJuIHBNb2RhbFswXS5vYjsKKwljYXNlIEVFUF9EQl81OgorCQlyZXR1cm4gcE1vZGFsWzBdLmRiOworCWNhc2UgRUVQX09CXzI6CisJCXJldHVybiBwTW9kYWxbMV0ub2I7CisJY2FzZSBFRVBfREJfMjoKKwkJcmV0dXJuIHBNb2RhbFsxXS5kYjsKKwljYXNlIEVFUF9NSU5PUl9SRVY6CisJCXJldHVybiBBUjU0MTZfVkVSX01BU0s7CisJY2FzZSBFRVBfVFhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT50eE1hc2s7CisJY2FzZSBFRVBfUlhfTUFTSzoKKwkJcmV0dXJuIHBCYXNlLT5yeE1hc2s7CisJY2FzZSBFRVBfUlhHQUlOX1RZUEU6CisJCXJldHVybiBwQmFzZS0+cnhHYWluVHlwZTsKKwljYXNlIEVFUF9UWEdBSU5fVFlQRToKKwkJcmV0dXJuIHBCYXNlLT50eEdhaW5UeXBlOworCWNhc2UgRUVQX09MX1BXUkNUUkw6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpCisJCQlyZXR1cm4gcEJhc2UtPm9wZW5Mb29wUHdyQ250bCA/IHRydWUgOiBmYWxzZTsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOworCWNhc2UgRUVQX1JDX0NIQUlOX01BU0s6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkpCisJCQlyZXR1cm4gcEJhc2UtPnJjQ2hhaW5NYXNrOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwljYXNlIEVFUF9EQUNfSFBXUl81RzoKKwkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCkKKwkJCXJldHVybiBwQmFzZS0+ZGFjSGlQd3JNb2RlXzVHOworCQllbHNlCisJCQlyZXR1cm4gMDsKKwljYXNlIEVFUF9GUkFDX05fNUc6CisJCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjIpCisJCQlyZXR1cm4gcEJhc2UtPmZyYWNfbl81ZzsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19kZWZfc2V0X2dhaW4oc3RydWN0IGF0aF9odyAqYWgsCisJCQkJICBzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciAqcE1vZGFsLAorCQkJCSAgc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAsCisJCQkJICB1OCB0eFJ4QXR0ZW5Mb2NhbCwgaW50IHJlZ0NoYWluT2Zmc2V0LCBpbnQgaSkKK3sKKwlpZiAoQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKKwkJdHhSeEF0dGVuTG9jYWwgPSBwTW9kYWwtPnR4UnhBdHRlbkNoW2ldOworCisJCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOLAorCQkJICAgICAgcE1vZGFsLT5ic3dNYXJnaW5baV0pOworCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAgICAgQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4xX0RCLAorCQkJICAgICAgcE1vZGFsLT5ic3dBdHRlbltpXSk7CisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkgICAgICBBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfTUFSR0lOLAorCQkJICAgICAgcE1vZGFsLT54YXR0ZW4yTWFyZ2luW2ldKTsKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgICAgIEFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9EQiwKKwkJCSAgICAgIHBNb2RhbC0+eGF0dGVuMkRiW2ldKTsKKwkJfSBlbHNlIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAoUkVHX1JFQUQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCkgJgorCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfQlNXX01BUkdJTikKKwkJCSAgfCBTTShwTW9kYWwtPiBic3dNYXJnaW5baV0sCisJCQkgICAgICAgQVJfUEhZX0dBSU5fMkdIWl9CU1dfTUFSR0lOKSk7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgKFJFR19SRUFEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQpICYKKwkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX0JTV19BVFRFTikKKwkJCSAgfCBTTShwTW9kYWwtPmJzd0F0dGVuW2ldLAorCQkJICAgICAgIEFSX1BIWV9HQUlOXzJHSFpfQlNXX0FUVEVOKSk7CisJCX0KKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlSRUdfUk1XX0ZJRUxEKGFoLAorCQkgICAgICBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCisJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfQVRURU4sIHR4UnhBdHRlbkxvY2FsKTsKKwkJUkVHX1JNV19GSUVMRChhaCwKKwkJICAgICAgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAorCQkgICAgICBBUjkyODBfUEhZX1JYR0FJTl9UWFJYX01BUkdJTiwgcE1vZGFsLT5yeFR4TWFyZ2luQ2hbaV0pOworCX0gZWxzZSB7CisJCVJFR19XUklURShhaCwKKwkJCSAgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAoUkVHX1JFQUQoYWgsIEFSX1BIWV9SWEdBSU4gKyByZWdDaGFpbk9mZnNldCkgJgorCQkJICAgfkFSX1BIWV9SWEdBSU5fVFhSWF9BVFRFTikKKwkJCSAgfCBTTSh0eFJ4QXR0ZW5Mb2NhbCwgQVJfUEhZX1JYR0FJTl9UWFJYX0FUVEVOKSk7CisJCVJFR19XUklURShhaCwKKwkJCSAgQVJfUEhZX0dBSU5fMkdIWiArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAoUkVHX1JFQUQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCkgJgorCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU4pIHwKKwkJCSAgU00ocE1vZGFsLT5yeFR4TWFyZ2luQ2hbaV0sIEFSX1BIWV9HQUlOXzJHSFpfUlhUWF9NQVJHSU4pKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2RlZl9zZXRfYm9hcmRfdmFsdWVzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWw7CisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CisJaW50IGksIHJlZ0NoYWluT2Zmc2V0OworCXU4IHR4UnhBdHRlbkxvY2FsOworCisJcE1vZGFsID0gJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOworCXR4UnhBdHRlbkxvY2FsID0gSVNfQ0hBTl8yR0haKGNoYW4pID8gMjMgOiA0NDsKKworCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sCisJCSAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fYW50ZW5uYV9jZmcoYWgsIGNoYW4pKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7CisJCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7CisJCQlpZiAoaSA+PSAyKQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgJiYKKwkJICAgIChhaC0+cnhjaGFpbm1hc2sgPT0gNSB8fCBhaC0+dHhjaGFpbm1hc2sgPT0gNSkgJiYgKGkgIT0gMCkpCisJCQlyZWdDaGFpbk9mZnNldCA9IChpID09IDEpID8gMHgyMDAwIDogMHgxMDAwOworCQllbHNlCisJCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7CisKKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAgKyByZWdDaGFpbk9mZnNldCwKKwkJCSAgcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0pOworCisJCVJFR19XUklURShhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0LAorCQkJICAoUkVHX1JFQUQoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCkgJgorCQkJICAgfihBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRiB8CisJCQkgICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSkgfAorCQkJICBTTShwTW9kYWwtPmlxQ2FsSUNoW2ldLAorCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikgfAorCQkJICBTTShwTW9kYWwtPmlxQ2FsUUNoW2ldLAorCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRikpOworCisJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKQorCQkJYXRoOWtfaHdfZGVmX3NldF9nYWluKGFoLCBwTW9kYWwsIGVlcCwgdHhSeEF0dGVuTG9jYWwsCisJCQkJCSAgICAgIHJlZ0NoYWluT2Zmc2V0LCBpKTsKKwl9CisKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgeworCQlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9PQiwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX09CX1MsCisJCQkJCQkgIHBNb2RhbC0+b2IpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gwLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfREIsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9EQl9TLAorCQkJCQkJICBwTW9kYWwtPmRiKTsKKwkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMSwKKwkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX09CLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfT0JfUywKKwkJCQkJCSAgcE1vZGFsLT5vYl9jaDEpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gxLAorCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfREIsCisJCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9EQl9TLAorCQkJCQkJICBwTW9kYWwtPmRiX2NoMSk7CisJCX0gZWxzZSB7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9PQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9PQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5vYik7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDAsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9EQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMF9EQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5kYik7CisJCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjVHMV9DSDEsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9PQjUsCisJCQkJCQkgIEFSX0FOX1JGNUcxX0NIMV9PQjVfUywKKwkJCQkJCSAgcE1vZGFsLT5vYl9jaDEpOworCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gxLAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfREI1LAorCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfREI1X1MsCisJCQkJCQkgIHBNb2RhbC0+ZGJfY2gxKTsKKwkJfQorCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9UT1AyLAorCQkJCQkgIEFSX0FOX1RPUDJfWFBBQklBU19MVkwsCisJCQkJCSAgQVJfQU5fVE9QMl9YUEFCSUFTX0xWTF9TLAorCQkJCQkgIHBNb2RhbC0+eHBhQmlhc0x2bCk7CisJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1RPUDIsCisJCQkJCSAgQVJfQU5fVE9QMl9MT0NBTEJJQVMsCisJCQkJCSAgQVJfQU5fVE9QMl9MT0NBTEJJQVNfUywKKwkJCQkJICBwTW9kYWwtPmxvY2FsX2JpYXMpOworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfWFBBX0NGRywgQVJfUEhZX0ZPUkNFX1hQQV9DRkcsCisJCQkgICAgICBwTW9kYWwtPmZvcmNlX3hwYW9uKTsKKwl9CisKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfU0VUVExJTkcsIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCisJCSAgICAgIHBNb2RhbC0+c3dpdGNoU2V0dGxpbmcpOworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9ERVNJUkVEX1NaLCBBUl9QSFlfREVTSVJFRF9TWl9BREMsCisJCSAgICAgIHBNb2RhbC0+YWRjRGVzaXJlZFNpemUpOworCisJaWYgKCFBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwKKwkJCSAgICAgIEFSX1BIWV9ERVNJUkVEX1NaX1BHQSwKKwkJCSAgICAgIHBNb2RhbC0+cGdhRGVzaXJlZFNpemUpOworCisJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUkZfQ1RMNCwKKwkJICBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFBX09GRikKKwkJICB8IFNNKHBNb2RhbC0+dHhFbmRUb1hwYU9mZiwKKwkJICAgICAgIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFCX09GRikKKwkJICB8IFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sCisJCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFBX09OKQorCQkgIHwgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwKKwkJICAgICAgIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUJfT04pKTsKKworCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwzLCBBUl9QSFlfVFhfRU5EX1RPX0EyX1JYX09OLAorCQkgICAgICBwTW9kYWwtPnR4RW5kVG9SeE9uKTsKKworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSOTI4MF9QSFlfQ0NBX1RIUkVTSDYyLAorCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9FWFRfQ0NBMCwKKwkJCSAgICAgIEFSX1BIWV9FWFRfQ0NBMF9USFJFU0g2MiwKKwkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCX0gZWxzZSB7CisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSX1BIWV9DQ0FfVEhSRVNINjIsCisJCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EsCisJCQkgICAgICBBUl9QSFlfRVhUX0NDQV9USFJFU0g2MiwKKwkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOworCX0KKworCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgeworCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMiwKKwkJCSAgICAgIEFSX1BIWV9UWF9FTkRfREFUQV9TVEFSVCwKKwkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvRGF0YVN0YXJ0KTsKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsIEFSX1BIWV9UWF9FTkRfUEFfT04sCisJCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb1BhT24pOworCX0KKworCWlmIChBUjU0MTZfVkVSX01BU0sgPj0gQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgeworCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAorCQkJCSAgICAgIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCisJCQkJICAgICAgcE1vZGFsLT5zd1NldHRsZUh0NDApOworCX0KKworCWlmIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpICYmCisJICAgIEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSkKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDS19UWF9DVFJMLAorCQkJICAgICAgQVJfUEhZX0NDS19UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0ssCisJCQkgICAgICBwTW9kYWwtPm1pc2NCaXRzKTsKKworCisJaWYgKEFSX1NSRVZfOTI4MF8yMChhaCkgJiYgQVI1NDE2X1ZFUl9NQVNLID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIwKSB7CisJCWlmIChJU19DSEFOXzJHSFooY2hhbikpCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9BTl9UT1AxLCBBUl9BTl9UT1AxX0RBQ0lQTU9ERSwKKwkJCQkJZWVwLT5iYXNlRWVwSGVhZGVyLmRhY0xwTW9kZSk7CisJCWVsc2UgaWYgKGVlcC0+YmFzZUVlcEhlYWRlci5kYWNIaVB3ck1vZGVfNUcpCisJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9BTl9UT1AxLCBBUl9BTl9UT1AxX0RBQ0lQTU9ERSwgMCk7CisJCWVsc2UKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX0FOX1RPUDEsIEFSX0FOX1RPUDFfREFDSVBNT0RFLAorCQkJCSAgICAgIGVlcC0+YmFzZUVlcEhlYWRlci5kYWNMcE1vZGUpOworCisJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9GUkFNRV9DVEwsIEFSX1BIWV9GUkFNRV9DVExfVFhfQ0xJUCwKKwkJCSAgICAgIHBNb2RhbC0+bWlzY0JpdHMgPj4gMik7CisKKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RYX1BXUkNUUkw5LAorCQkJICAgICAgQVJfUEhZX1RYX0RFU0lSRURfU0NBTEVfQ0NLLAorCQkJICAgICAgZWVwLT5iYXNlRWVwSGVhZGVyLmRlc2lyZWRTY2FsZUNDSyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhdGg5a19od19kZWZfc2V0X2FkZGFjKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworI2RlZmluZSBYUEFfTFZMX0ZSRVEoY250KSAocE1vZGFsLT54cGFCaWFzTHZsRnJlcVtjbnRdKQorCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWw7CisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CisJdTggYmlhc2xldmVsOworCisJaWYgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApCisJCXJldHVybjsKKworCWlmIChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbV9yZXYoYWgpIDwgQVI1NDE2X0VFUF9NSU5PUl9WRVJfNykKKwkJcmV0dXJuOworCisJcE1vZGFsID0gJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOworCisJaWYgKHBNb2RhbC0+eHBhQmlhc0x2bCAhPSAweGZmKSB7CisJCWJpYXNsZXZlbCA9IHBNb2RhbC0+eHBhQmlhc0x2bDsKKwl9IGVsc2UgeworCQl1MTYgcmVzZXRGcmVxQmluLCBmcmVxQmluLCBmcmVxQ291bnQgPSAwOworCQlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7CisKKwkJYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhhaCwgY2hhbiwgJmNlbnRlcnMpOworCisJCXJlc2V0RnJlcUJpbiA9IEZSRVEyRkJJTihjZW50ZXJzLnN5bnRoX2NlbnRlciwKKwkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7CisJCWZyZXFCaW4gPSBYUEFfTFZMX0ZSRVEoMCkgJiAweGZmOworCQliaWFzbGV2ZWwgPSAodTgpIChYUEFfTFZMX0ZSRVEoMCkgPj4gMTQpOworCisJCWZyZXFDb3VudCsrOworCisJCXdoaWxlIChmcmVxQ291bnQgPCAzKSB7CisJCQlpZiAoWFBBX0xWTF9GUkVRKGZyZXFDb3VudCkgPT0gMHgwKQorCQkJCWJyZWFrOworCisJCQlmcmVxQmluID0gWFBBX0xWTF9GUkVRKGZyZXFDb3VudCkgJiAweGZmOworCQkJaWYgKHJlc2V0RnJlcUJpbiA+PSBmcmVxQmluKQorCQkJCWJpYXNsZXZlbCA9ICh1OCkoWFBBX0xWTF9GUkVRKGZyZXFDb3VudCkgPj4gMTQpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQkJZnJlcUNvdW50Kys7CisJCX0KKwl9CisKKwlpZiAoSVNfQ0hBTl8yR0haKGNoYW4pKSB7CisJCUlOSV9SQSgmYWgtPmluaUFkZGFjLCA3LCAxKSA9IChJTklfUkEoJmFoLT5pbmlBZGRhYywKKwkJCQkJNywgMSkgJiAofjB4MTgpKSB8IGJpYXNsZXZlbCA8PCAzOworCX0gZWxzZSB7CisJCUlOSV9SQSgmYWgtPmluaUFkZGFjLCA2LCAxKSA9IChJTklfUkEoJmFoLT5pbmlBZGRhYywKKwkJCQkJNiwgMSkgJiAofjB4YzApKSB8IGJpYXNsZXZlbCA8PCA2OworCX0KKyN1bmRlZiBYUEFfTFZMX0ZSRVEKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X2RlZl9nYWluX2JvdW5kYXJpZXNfcGRhZGNzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcSAqcFJhd0RhdGFTZXQsCiAJCQkJdTggKmJDaGFucywgdTE2IGF2YWlsUGllcnMsCkBAIC03NjksNyArMjAzOCw3IEBACiAJCXBQZEdhaW5Cb3VuZGFyaWVzW2ldID0KIAkJCW1pbigodTE2KUFSNTQxNl9NQVhfUkFURV9QT1dFUiwgcFBkR2FpbkJvdW5kYXJpZXNbaV0pOwogCi0JCWlmICgoaSA9PSAwKSAmJiAhQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkpIHsKKwkJaWYgKChpID09IDApICYmICFBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpKSB7CiAJCQltaW5EZWx0YSA9IHBQZEdhaW5Cb3VuZGFyaWVzWzBdIC0gMjM7CiAJCQlwUGRHYWluQm91bmRhcmllc1swXSA9IDIzOwogCQl9IGVsc2UgewpAQCAtODM0LDE1MCArMjEwMywxNSBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgKnBvd0luZm8sCi0JCQkJICAgICAgdTE2IG51bUNoYW5uZWxzLAotCQkJCSAgICAgIHN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZyAqcE5ld1Bvd2VyLAotCQkJCSAgICAgIHUxNiBudW1SYXRlcywgYm9vbCBpc0V4dFRhcmdldCkKLXsKLQlzdHJ1Y3QgY2hhbl9jZW50ZXJzIGNlbnRlcnM7Ci0JdTE2IGNsbywgY2hpOwotCWludCBpOwotCWludCBtYXRjaEluZGV4ID0gLTEsIGxvd0luZGV4ID0gLTE7Ci0JdTE2IGZyZXE7Ci0KLQlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7Ci0JZnJlcSA9IChpc0V4dFRhcmdldCkgPyBjZW50ZXJzLmV4dF9jZW50ZXIgOiBjZW50ZXJzLmN0bF9jZW50ZXI7Ci0KLQlpZiAoZnJlcSA8PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1swXS5iQ2hhbm5lbCwKLQkJCQkgICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkgewotCQltYXRjaEluZGV4ID0gMDsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyAoaSA8IG51bUNoYW5uZWxzKSAmJgotCQkJICAgICAocG93SW5mb1tpXS5iQ2hhbm5lbCAhPSBBUjU0MTZfQkNIQU5fVU5VU0VEKTsgaSsrKSB7Ci0JCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7Ci0JCQkJbWF0Y2hJbmRleCA9IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSAmJgotCQkJCSAgIChmcmVxID4gYXRoOWtfaHdfZmJpbjJmcmVxKHBvd0luZm9baSAtIDFdLmJDaGFubmVsLAotCQkJCQkJICAgICAgSVNfQ0hBTl8yR0haKGNoYW4pKSkpIHsKLQkJCQlsb3dJbmRleCA9IGkgLSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICgobWF0Y2hJbmRleCA9PSAtMSkgJiYgKGxvd0luZGV4ID09IC0xKSkKLQkJCW1hdGNoSW5kZXggPSBpIC0gMTsKLQl9Ci0KLQlpZiAobWF0Y2hJbmRleCAhPSAtMSkgewotCQkqcE5ld1Bvd2VyID0gcG93SW5mb1ttYXRjaEluZGV4XTsKLQl9IGVsc2UgewotCQljbG8gPSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tsb3dJbmRleF0uYkNoYW5uZWwsCi0JCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOwotCQljaGkgPSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tsb3dJbmRleCArIDFdLmJDaGFubmVsLAotCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbnVtUmF0ZXM7IGkrKykgewotCQkJcE5ld1Bvd2VyLT50UG93MnhbaV0gPQotCQkJCSh1OClhdGg5a19od19pbnRlcnBvbGF0ZShmcmVxLCBjbG8sIGNoaSwKLQkJCQkJCXBvd0luZm9bbG93SW5kZXhdLnRQb3cyeFtpXSwKLQkJCQkJCXBvd0luZm9bbG93SW5kZXggKyAxXS50UG93MnhbaV0pOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19od19nZXRfdGFyZ2V0X3Bvd2VycyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcG93SW5mbywKLQkJCQkgICAgICAgdTE2IG51bUNoYW5uZWxzLAotCQkJCSAgICAgICBzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odCAqcE5ld1Bvd2VyLAotCQkJCSAgICAgICB1MTYgbnVtUmF0ZXMsIGJvb2wgaXNIdDQwVGFyZ2V0KQotewotCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQl1MTYgY2xvLCBjaGk7Ci0JaW50IGk7Ci0JaW50IG1hdGNoSW5kZXggPSAtMSwgbG93SW5kZXggPSAtMTsKLQl1MTYgZnJlcTsKLQotCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKLQlmcmVxID0gaXNIdDQwVGFyZ2V0ID8gY2VudGVycy5zeW50aF9jZW50ZXIgOiBjZW50ZXJzLmN0bF9jZW50ZXI7Ci0KLQlpZiAoZnJlcSA8PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1swXS5iQ2hhbm5lbCwgSVNfQ0hBTl8yR0haKGNoYW4pKSkgewotCQltYXRjaEluZGV4ID0gMDsKLQl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyAoaSA8IG51bUNoYW5uZWxzKSAmJgotCQkJICAgICAocG93SW5mb1tpXS5iQ2hhbm5lbCAhPSBBUjU0MTZfQkNIQU5fVU5VU0VEKTsgaSsrKSB7Ci0JCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSB7Ci0JCQkJbWF0Y2hJbmRleCA9IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UKLQkJCQlpZiAoKGZyZXEgPCBhdGg5a19od19mYmluMmZyZXEocG93SW5mb1tpXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSAmJgotCQkJCSAgICAoZnJlcSA+IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2kgLSAxXS5iQ2hhbm5lbCwKLQkJCQkJCSAgICAgICBJU19DSEFOXzJHSFooY2hhbikpKSkgewotCQkJCQlsb3dJbmRleCA9IGkgLSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCX0KLQkJaWYgKChtYXRjaEluZGV4ID09IC0xKSAmJiAobG93SW5kZXggPT0gLTEpKQotCQkJbWF0Y2hJbmRleCA9IGkgLSAxOwotCX0KLQotCWlmIChtYXRjaEluZGV4ICE9IC0xKSB7Ci0JCSpwTmV3UG93ZXIgPSBwb3dJbmZvW21hdGNoSW5kZXhdOwotCX0gZWxzZSB7Ci0JCWNsbyA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4XS5iQ2hhbm5lbCwKLQkJCQkJIElTX0NIQU5fMkdIWihjaGFuKSk7Ci0JCWNoaSA9IGF0aDlrX2h3X2ZiaW4yZnJlcShwb3dJbmZvW2xvd0luZGV4ICsgMV0uYkNoYW5uZWwsCi0JCQkJCSBJU19DSEFOXzJHSFooY2hhbikpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBudW1SYXRlczsgaSsrKSB7Ci0JCQlwTmV3UG93ZXItPnRQb3cyeFtpXSA9ICh1OClhdGg5a19od19pbnRlcnBvbGF0ZShmcmVxLAotCQkJCQkJY2xvLCBjaGksCi0JCQkJCQlwb3dJbmZvW2xvd0luZGV4XS50UG93MnhbaV0sCi0JCQkJCQlwb3dJbmZvW2xvd0luZGV4ICsgMV0udFBvdzJ4W2ldKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHUxNiBhdGg5a19od19nZXRfbWF4X2VkZ2VfcG93ZXIodTE2IGZyZXEsCi0JCQkJICAgICAgIHN0cnVjdCBjYWxfY3RsX2VkZ2VzICpwUmRFZGdlc1Bvd2VyLAotCQkJCSAgICAgICBib29sIGlzMkdIeiwgaW50IG51bV9iYW5kX2VkZ2VzKQotewotCXUxNiB0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IChpIDwgbnVtX2JhbmRfZWRnZXMpICYmCi0JCSAgICAgKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwgIT0gQVI1NDE2X0JDSEFOX1VOVVNFRCk7IGkrKykgewotCQlpZiAoZnJlcSA9PSBhdGg5a19od19mYmluMmZyZXEocFJkRWRnZXNQb3dlcltpXS5iQ2hhbm5lbCwgaXMyR0h6KSkgewotCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBwUmRFZGdlc1Bvd2VyW2ldLnRQb3dlcjsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKChpID4gMCkgJiYKLQkJCSAgIChmcmVxIDwgYXRoOWtfaHdfZmJpbjJmcmVxKHBSZEVkZ2VzUG93ZXJbaV0uYkNoYW5uZWwsCi0JCQkJCQkgICAgICBpczJHSHopKSkgewotCQkJaWYgKGF0aDlrX2h3X2ZiaW4yZnJlcShwUmRFZGdlc1Bvd2VyW2kgLSAxXS5iQ2hhbm5lbCwKLQkJCQkJICAgICAgIGlzMkdIeikgPCBmcmVxICYmCi0JCQkgICAgcFJkRWRnZXNQb3dlcltpIC0gMV0uZmxhZykgewotCQkJCXR3aWNlTWF4RWRnZVBvd2VyID0KLQkJCQkJcFJkRWRnZXNQb3dlcltpIC0gMV0udFBvd2VyOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gdHdpY2VNYXhFZGdlUG93ZXI7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9kZWZfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9kZWZfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJICBpbnQxNl90ICpwVHhQb3dlckluZGV4T2Zmc2V0KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7CisjZGVmaW5lIFNNX1BEX0dBSU4oeCkgU00oMHgzOCwgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXyMjeCkKKyNkZWZpbmUgU01fUERHQUlOX0IoeCwgeSkgXAorCQlTTSgoZ2FpbkJvdW5kYXJpZXNbeF0pLCBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfIyN5KQorCisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSA9ICZhaC0+ZWVwcm9tLmRlZjsKIAlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEgKnBSYXdEYXRhc2V0OwogCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKIAl1MTYgcGRHYWluT3ZlcmxhcF90MjsKQEAgLTEwMTAsNiArMjE0NCwxMiBAQAogCQludW1QaWVycyA9IEFSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTOwogCX0KIAorCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUiAmJiBJU19DSEFOXzJHSFooY2hhbikpIHsKKwkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGEyR1swXTsKKwkJYWgtPmluaXRQREFEQyA9ICgoc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wICopCisJCQkJIHBSYXdEYXRhc2V0KS0+dnBkUGRnWzBdWzBdOworCX0KKwogCW51bVhwZEdhaW4gPSAwOwogCiAJZm9yIChpID0gMTsgaSA8PSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSzsgaSsrKSB7CkBAIC0xMDMyLDggKzIxNzIsOCBAQAogCQkgICAgICB4cGRHYWluVmFsdWVzWzJdKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUjU0MTZfTUFYX0NIQUlOUzsgaSsrKSB7Ci0JCWlmIChBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSAmJgotCQkgICAgKGFocC0+YWhfcnhjaGFpbm1hc2sgPT0gNSB8fCBhaHAtPmFoX3R4Y2hhaW5tYXNrID09IDUpICYmCisJCWlmIChBUl9TUkVWXzU0MTZfMjBfT1JfTEFURVIoYWgpICYmCisJCSAgICAoYWgtPnJ4Y2hhaW5tYXNrID09IDUgfHwgYWgtPnR4Y2hhaW5tYXNrID09IDUpICYmCiAJCSAgICAoaSAhPSAwKSkgewogCQkJcmVnQ2hhaW5PZmZzZXQgPSAoaSA9PSAxKSA/IDB4MjAwMCA6IDB4MTAwMDsKIAkJfSBlbHNlCkBAIC0xMDQ1LDI1ICsyMTg1LDQ1IEBACiAJCQllbHNlCiAJCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGE1R1tpXTsKIAotCQkJYXRoOWtfaHdfZ2V0X2RlZl9nYWluX2JvdW5kYXJpZXNfcGRhZGNzKGFoLCBjaGFuLAotCQkJCQkgICAgcFJhd0RhdGFzZXQsIHBDYWxCQ2hhbnMsCi0JCQkJCSAgICBudW1QaWVycywgcGRHYWluT3ZlcmxhcF90MiwKLQkJCQkJICAgICZ0TWluQ2FsUG93ZXIsIGdhaW5Cb3VuZGFyaWVzLAotCQkJCQkgICAgcGRhZGNWYWx1ZXMsIG51bVhwZEdhaW4pOwogCi0JCQlpZiAoKGkgPT0gMCkgfHwgQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkpIHsKLQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCSAgQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIFNNKHBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCSAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1swXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8xKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMV0sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMikKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzJdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzMpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1szXSwKLQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzQpKTsKKwkJCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQkJCXU4IHBjZGFjSWR4OworCQkJCXU4IHR4UG93ZXI7CisKKwkJCQlhdGg5a19nZXRfdHhnYWluX2luZGV4KGFoLCBjaGFuLAorCQkJCShzdHJ1Y3QgY2FsRGF0YVBlckZyZXFPcExvb3AgKilwUmF3RGF0YXNldCwKKwkJCQlwQ2FsQkNoYW5zLCBudW1QaWVycywgJnR4UG93ZXIsICZwY2RhY0lkeCk7CisJCQkJYXRoOWtfb2xjX2dldF9wZGFkY3MoYWgsIHBjZGFjSWR4LAorCQkJCQkJICAgICB0eFBvd2VyLzIsIHBkYWRjVmFsdWVzKTsKKwkJCX0gZWxzZSB7CisJCQkJYXRoOWtfaHdfZ2V0X2RlZl9nYWluX2JvdW5kYXJpZXNfcGRhZGNzKGFoLAorCQkJCQkJCWNoYW4sIHBSYXdEYXRhc2V0LAorCQkJCQkJCXBDYWxCQ2hhbnMsIG51bVBpZXJzLAorCQkJCQkJCXBkR2Fpbk92ZXJsYXBfdDIsCisJCQkJCQkJJnRNaW5DYWxQb3dlciwKKwkJCQkJCQlnYWluQm91bmRhcmllcywKKwkJCQkJCQlwZGFkY1ZhbHVlcywKKwkJCQkJCQludW1YcGRHYWluKTsKKwkJCX0KKworCQkJaWYgKChpID09IDApIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCQkJUkVHX1dSSVRFKGFoLAorCQkJCQkJQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAorCQkJCQkJU00oMHg2LAorCQkJCQkJQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApIHwKKwkJCQkJCVNNX1BEX0dBSU4oMSkgfCBTTV9QRF9HQUlOKDIpIHwKKwkJCQkJCVNNX1BEX0dBSU4oMykgfCBTTV9QRF9HQUlOKDQpKTsKKwkJCQl9IGVsc2UgeworCQkJCQlSRUdfV1JJVEUoYWgsCisJCQkJCQlBUl9QSFlfVFBDUkc1ICsgcmVnQ2hhaW5PZmZzZXQsCisJCQkJCQlTTShwZEdhaW5PdmVybGFwX3QyLAorCQkJCQkJQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApfAorCQkJCQkJU01fUERHQUlOX0IoMCwgMSkgfAorCQkJCQkJU01fUERHQUlOX0IoMSwgMikgfAorCQkJCQkJU01fUERHQUlOX0IoMiwgMykgfAorCQkJCQkJU01fUERHQUlOX0IoMywgNCkpOworCQkJCX0KIAkJCX0KIAogCQkJcmVnT2Zmc2V0ID0gQVJfUEhZX0JBU0UgKyAoNjcyIDw8IDIpICsgcmVnQ2hhaW5PZmZzZXQ7CkBAIC0xMDk3LDEyNiArMjI1NywxMSBAQAogCSpwVHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKIAogCXJldHVybiB0cnVlOworI3VuZGVmIFNNX1BEX0dBSU4KKyN1bmRlZiBTTV9QREdBSU5fQgogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfNGtfcG93ZXJfY2FsX3RhYmxlKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgaW50MTZfdCAqcFR4UG93ZXJJbmRleE9mZnNldCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKLQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsgKnBSYXdEYXRhc2V0OwotCXU4ICpwQ2FsQkNoYW5zID0gTlVMTDsKLQl1MTYgcGRHYWluT3ZlcmxhcF90MjsKLQlzdGF0aWMgdTggcGRhZGNWYWx1ZXNbQVI1NDE2X05VTV9QREFEQ19WQUxVRVNdOwotCXUxNiBnYWluQm91bmRhcmllc1tBUjU0MTZfUERfR0FJTlNfSU5fTUFTS107Ci0JdTE2IG51bVBpZXJzLCBpLCBqOwotCWludDE2X3QgdE1pbkNhbFBvd2VyOwotCXUxNiBudW1YcGRHYWluLCB4cGRNYXNrOwotCXUxNiB4cGRHYWluVmFsdWVzW0FSNTQxNl9OVU1fUERfR0FJTlNdID0geyAwLCAwLCAwLCAwIH07Ci0JdTMyIHJlZzMyLCByZWdPZmZzZXQsIHJlZ0NoYWluT2Zmc2V0OwotCi0JeHBkTWFzayA9IHBFZXBEYXRhLT5tb2RhbEhlYWRlci54cGRHYWluOwotCi0JaWYgKChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMikgewotCQlwZEdhaW5PdmVybGFwX3QyID0KLQkJCXBFZXBEYXRhLT5tb2RhbEhlYWRlci5wZEdhaW5PdmVybGFwOwotCX0gZWxzZSB7Ci0JCXBkR2Fpbk92ZXJsYXBfdDIgPSAodTE2KShNUyhSRUdfUkVBRChhaCwgQVJfUEhZX1RQQ1JHNSksCi0JCQkJCSAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fT1ZFUkxBUCkpOwotCX0KLQotCXBDYWxCQ2hhbnMgPSBwRWVwRGF0YS0+Y2FsRnJlcVBpZXIyRzsKLQludW1QaWVycyA9IEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTOwotCi0JbnVtWHBkR2FpbiA9IDA7Ci0KLQlmb3IgKGkgPSAxOyBpIDw9IEFSNTQxNl9QRF9HQUlOU19JTl9NQVNLOyBpKyspIHsKLQkJaWYgKCh4cGRNYXNrID4+IChBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpKSAmIDEpIHsKLQkJCWlmIChudW1YcGRHYWluID49IEFSNTQxNl9OVU1fUERfR0FJTlMpCi0JCQkJYnJlYWs7Ci0JCQl4cGRHYWluVmFsdWVzW251bVhwZEdhaW5dID0KLQkJCQkodTE2KShBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAtIGkpOwotCQkJbnVtWHBkR2FpbisrOwotCQl9Ci0JfQotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9OVU1fUERfR0FJTiwKLQkJICAgICAgKG51bVhwZEdhaW4gLSAxKSAmIDB4Myk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1RQQ1JHMSwgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzEsCi0JCSAgICAgIHhwZEdhaW5WYWx1ZXNbMF0pOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9UUENSRzEsIEFSX1BIWV9UUENSRzFfUERfR0FJTl8yLAotCQkgICAgICB4cGRHYWluVmFsdWVzWzFdKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfVFBDUkcxLCBBUl9QSFlfVFBDUkcxX1BEX0dBSU5fMywKLQkJICAgICAgeHBkR2FpblZhbHVlc1syXSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVI1NDE2X01BWF9DSEFJTlM7IGkrKykgewotCQlpZiAoQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgJiYKLQkJICAgIChhaHAtPmFoX3J4Y2hhaW5tYXNrID09IDUgfHwgYWhwLT5haF90eGNoYWlubWFzayA9PSA1KSAmJgotCQkgICAgKGkgIT0gMCkpIHsKLQkJCXJlZ0NoYWluT2Zmc2V0ID0gKGkgPT0gMSkgPyAweDIwMDAgOiAweDEwMDA7Ci0JCX0gZWxzZQotCQkJcmVnQ2hhaW5PZmZzZXQgPSBpICogMHgxMDAwOwotCi0JCWlmIChwRWVwRGF0YS0+YmFzZUVlcEhlYWRlci50eE1hc2sgJiAoMSA8PCBpKSkgewotCQkJcFJhd0RhdGFzZXQgPSBwRWVwRGF0YS0+Y2FsUGllckRhdGEyR1tpXTsKLQotCQkJYXRoOWtfaHdfZ2V0XzRrX2dhaW5fYm91bmRhcmllc19wZGFkY3MoYWgsIGNoYW4sCi0JCQkJCSAgICBwUmF3RGF0YXNldCwgcENhbEJDaGFucywKLQkJCQkJICAgIG51bVBpZXJzLCBwZEdhaW5PdmVybGFwX3QyLAotCQkJCQkgICAgJnRNaW5DYWxQb3dlciwgZ2FpbkJvdW5kYXJpZXMsCi0JCQkJCSAgICBwZGFkY1ZhbHVlcywgbnVtWHBkR2Fpbik7Ci0KLQkJCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSkgewotCQkJCVJFR19XUklURShhaCwgQVJfUEhZX1RQQ1JHNSArIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkgIFNNKHBkR2Fpbk92ZXJsYXBfdDIsCi0JCQkJCSAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX09WRVJMQVApCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1swXSwKLQkJCQkJICAgICAgIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV8xKQotCQkJCQkgIHwgU00oZ2FpbkJvdW5kYXJpZXNbMV0sCi0JCQkJCSAgICAgICBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfMikKLQkJCQkJICB8IFNNKGdhaW5Cb3VuZGFyaWVzWzJdLAotCQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzMpCi0JCQkJCSAgfCBTTShnYWluQm91bmRhcmllc1szXSwKLQkJCQkgICAgICAgQVJfUEhZX1RQQ1JHNV9QRF9HQUlOX0JPVU5EQVJZXzQpKTsKLQkJCX0KLQotCQkJcmVnT2Zmc2V0ID0gQVJfUEhZX0JBU0UgKyAoNjcyIDw8IDIpICsgcmVnQ2hhaW5PZmZzZXQ7Ci0JCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgewotCQkJCXJlZzMyID0gKChwZGFkY1ZhbHVlc1s0ICogaiArIDBdICYgMHhGRikgPDwgMCkgfAotCQkJCQkoKHBkYWRjVmFsdWVzWzQgKiBqICsgMV0gJiAweEZGKSA8PCA4KSB8Ci0JCQkJCSgocGRhZGNWYWx1ZXNbNCAqIGogKyAyXSAmIDB4RkYpIDw8IDE2KXwKLQkJCQkJKChwZGFkY1ZhbHVlc1s0ICogaiArIDNdICYgMHhGRikgPDwgMjQpOwotCQkJCVJFR19XUklURShhaCwgcmVnT2Zmc2V0LCByZWczMik7Ci0KLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdfSU8sCi0JCQkJCSJQREFEQyAoJWQsJTR4KTogJTQuNHggJTguOHhcbiIsCi0JCQkJCWksIHJlZ0NoYWluT2Zmc2V0LCByZWdPZmZzZXQsCi0JCQkJCXJlZzMyKTsKLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdfSU8sCi0JCQkJCSJQREFEQzogQ2hhaW4gJWQgfCAiCi0JCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHwgIgotCQkJCQkiUERBREMgJTNkIFZhbHVlICUzZCB8ICIKLQkJCQkJIlBEQURDICUzZCBWYWx1ZSAlM2QgfCAiCi0JCQkJCSJQREFEQyAlM2QgVmFsdWUgJTNkIHxcbiIsCi0JCQkJCWksIDQgKiBqLCBwZGFkY1ZhbHVlc1s0ICogal0sCi0JCQkJCTQgKiBqICsgMSwgcGRhZGNWYWx1ZXNbNCAqIGogKyAxXSwKLQkJCQkJNCAqIGogKyAyLCBwZGFkY1ZhbHVlc1s0ICogaiArIDJdLAotCQkJCQk0ICogaiArIDMsCi0JCQkJCXBkYWRjVmFsdWVzWzQgKiBqICsgM10pOwotCi0JCQkJcmVnT2Zmc2V0ICs9IDQ7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkqcFR4UG93ZXJJbmRleE9mZnNldCA9IDA7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2RlZl9wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfZGVmX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkJICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQkJCSAgaW50MTZfdCAqcmF0ZXNBcnJheSwKIAkJCQkJCSAgdTE2IGNmZ0N0bCwKQEAgLTEyMjcsOCArMjI3Miw3IEBACiAjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVFdPX0NIQUlOICAgICA2ICAvKiAxMCpsb2cxMCgyKSoyICovCiAjZGVmaW5lIFJFRFVDRV9TQ0FMRURfUE9XRVJfQllfVEhSRUVfQ0hBSU4gICAxMCAvKiAxMCpsb2cxMCgzKSoyICovCiAKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWhwLT5haF9lZXByb20uZGVmOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5kZWY7CiAJdTE2IHR3aWNlTWF4RWRnZVBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwogCXN0YXRpYyBjb25zdCB1MTYgdHBTY2FsZVJlZHVjdGlvblRhYmxlWzVdID0KIAkJeyAwLCAzLCA2LCA5LCBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgfTsKQEAgLTEyNTgsNyArMjMwMiw3IEBACiAJaW50IHR4X2NoYWlubWFzazsKIAl1MTYgdHdpY2VNaW5FZGdlUG93ZXI7CiAKLQl0eF9jaGFpbm1hc2sgPSBhaHAtPmFoX3R4Y2hhaW5tYXNrOworCXR4X2NoYWlubWFzayA9IGFoLT50eGNoYWlubWFzazsKIAogCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIApAQCAtMTI3Nyw5ICsyMzIxLDkgQEAKIAogCW1heFJlZ0FsbG93ZWRQb3dlciA9IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyICsgdHdpY2VMYXJnZXN0QW50ZW5uYTsKIAotCWlmIChhaC0+YWhfdHBTY2FsZSAhPSBBVEg5S19UUF9TQ0FMRV9NQVgpIHsKKwlpZiAoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUgIT0gQVRIOUtfVFBfU0NBTEVfTUFYKSB7CiAJCW1heFJlZ0FsbG93ZWRQb3dlciAtPQotCQkJKHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVsoYWgtPmFoX3RwU2NhbGUpXSAqIDIpOworCQkJKHRwU2NhbGVSZWR1Y3Rpb25UYWJsZVsoYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGUpXSAqIDIpOwogCX0KIAogCXNjYWxlZFBvd2VyID0gbWluKHBvd2VyTGltaXQsIG1heFJlZ0FsbG93ZWRQb3dlcik7CkBAIC0xMzY3LDcgKzI0MTEsOCBAQAogCQllbHNlCiAJCQlmcmVxID0gY2VudGVycy5jdGxfY2VudGVyOwogCi0JCWlmIChhcjU0MTZfZ2V0X2VlcF92ZXIoYWhwKSA9PSAxNCAmJiBhcjU0MTZfZ2V0X2VlcF9yZXYoYWhwKSA8PSAyKQorCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSA9PSAxNCAmJgorCQkgICAgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSA8PSAyKQogCQkJdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7CiAKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUE9XRVJfTUdNVCwKQEAgLTE1MDcsMjU3ICsyNTUyLDIxIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF80a19wb3dlcl9wZXJfcmF0ZV90YWJsZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkJCQkgaW50MTZfdCAqcmF0ZXNBcnJheSwKLQkJCQkJCSB1MTYgY2ZnQ3RsLAotCQkJCQkJIHUxNiBBbnRlbm5hUmVkdWN0aW9uLAotCQkJCQkJIHUxNiB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKLQkJCQkJCSB1MTYgcG93ZXJMaW1pdCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgdTE2IGNmZ0N0bCwKKwkJCQkgICAgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAorCQkJCSAgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwKKwkJCQkgICAgdTggcG93ZXJMaW1pdCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKLQl1MTYgdHdpY2VNYXhFZGdlUG93ZXIgPSBBUjU0MTZfTUFYX1JBVEVfUE9XRVI7Ci0Jc3RhdGljIGNvbnN0IHUxNiB0cFNjYWxlUmVkdWN0aW9uVGFibGVbNV0gPQotCQl7IDAsIDMsIDYsIDksIEFSNTQxNl9NQVhfUkFURV9QT1dFUiB9OwotCi0JaW50IGk7Ci0JaW50MTZfdCB0d2ljZUxhcmdlc3RBbnRlbm5hOwotCXN0cnVjdCBjYWxfY3RsX2RhdGFfNGsgKnJlcDsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgdGFyZ2V0UG93ZXJPZmRtLCB0YXJnZXRQb3dlckNjayA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfQotCX07Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnIHRhcmdldFBvd2VyT2ZkbUV4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwfSB9LCB0YXJnZXRQb3dlckNja0V4dCA9IHsKLQkJMCwgeyAwLCAwLCAwLCAwIH0KLQl9OwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHRhcmdldFBvd2VySHQyMCwgdGFyZ2V0UG93ZXJIdDQwID0gewotCQkwLCB7MCwgMCwgMCwgMH0KLQl9OwotCXUxNiBzY2FsZWRQb3dlciA9IDAsIG1pbkN0bFBvd2VyLCBtYXhSZWdBbGxvd2VkUG93ZXI7Ci0JdTE2IGN0bE1vZGVzRm9yMTFnW10gPQotCQl7IENUTF8xMUIsIENUTF8xMUcsIENUTF8yR0hUMjAsIENUTF8xMUJfRVhULCBDVExfMTFHX0VYVCwKLQkJICBDVExfMkdIVDQwCi0JCX07Ci0JdTE2IG51bUN0bE1vZGVzLCAqcEN0bE1vZGUsIGN0bE1vZGUsIGZyZXE7Ci0Jc3RydWN0IGNoYW5fY2VudGVycyBjZW50ZXJzOwotCWludCB0eF9jaGFpbm1hc2s7Ci0JdTE2IHR3aWNlTWluRWRnZVBvd2VyOwotCi0JdHhfY2hhaW5tYXNrID0gYWhwLT5haF90eGNoYWlubWFzazsKLQotCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKLQotCXR3aWNlTGFyZ2VzdEFudGVubmEgPSBwRWVwRGF0YS0+bW9kYWxIZWFkZXIuYW50ZW5uYUdhaW5DaFswXTsKLQotCXR3aWNlTGFyZ2VzdEFudGVubmEgPSAoaW50MTZfdCltaW4oQW50ZW5uYVJlZHVjdGlvbiAtCi0JCQkJCSAgIHR3aWNlTGFyZ2VzdEFudGVubmEsIDApOwotCi0JbWF4UmVnQWxsb3dlZFBvd2VyID0gdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIgKyB0d2ljZUxhcmdlc3RBbnRlbm5hOwotCi0JaWYgKGFoLT5haF90cFNjYWxlICE9IEFUSDlLX1RQX1NDQUxFX01BWCkgewotCQltYXhSZWdBbGxvd2VkUG93ZXIgLT0KLQkJCSh0cFNjYWxlUmVkdWN0aW9uVGFibGVbKGFoLT5haF90cFNjYWxlKV0gKiAyKTsKLQl9Ci0KLQlzY2FsZWRQb3dlciA9IG1pbihwb3dlckxpbWl0LCBtYXhSZWdBbGxvd2VkUG93ZXIpOwotCXNjYWxlZFBvd2VyID0gbWF4KCh1MTYpMCwgc2NhbGVkUG93ZXIpOwotCi0JbnVtQ3RsTW9kZXMgPSBBUlJBWV9TSVpFKGN0bE1vZGVzRm9yMTFnKSAtIFNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwOwotCXBDdGxNb2RlID0gY3RsTW9kZXNGb3IxMWc7Ci0KLQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCi0JCQlBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTLAotCQkJJnRhcmdldFBvd2VyQ2NrLCA0LCBmYWxzZSk7Ci0JYXRoOWtfaHdfZ2V0X2xlZ2FjeV90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCi0JCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJPZmRtLCA0LCBmYWxzZSk7Ci0JYXRoOWtfaHdfZ2V0X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXIyR0hUMjAsCi0JCQlBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMsCi0JCQkmdGFyZ2V0UG93ZXJIdDIwLCA4LCBmYWxzZSk7Ci0KLQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCW51bUN0bE1vZGVzID0gQVJSQVlfU0laRShjdGxNb2Rlc0ZvcjExZyk7Ci0JCWF0aDlrX2h3X2dldF90YXJnZXRfcG93ZXJzKGFoLCBjaGFuLAotCQkJCXBFZXBEYXRhLT5jYWxUYXJnZXRQb3dlcjJHSFQ0MCwKLQkJCQlBUjU0MTZfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMsCi0JCQkJJnRhcmdldFBvd2VySHQ0MCwgOCwgdHJ1ZSk7Ci0JCWF0aDlrX2h3X2dldF9sZWdhY3lfdGFyZ2V0X3Bvd2VycyhhaCwgY2hhbiwKLQkJCQlwRWVwRGF0YS0+Y2FsVGFyZ2V0UG93ZXJDY2ssCi0JCQkJQVI1NDE2X05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUywKLQkJCQkmdGFyZ2V0UG93ZXJDY2tFeHQsIDQsIHRydWUpOwotCQlhdGg5a19od19nZXRfbGVnYWN5X3RhcmdldF9wb3dlcnMoYWgsIGNoYW4sCi0JCQkJcEVlcERhdGEtPmNhbFRhcmdldFBvd2VyMkcsCi0JCQkJQVI1NDE2X05VTV8yR18yMF9UQVJHRVRfUE9XRVJTLAotCQkJCSZ0YXJnZXRQb3dlck9mZG1FeHQsIDQsIHRydWUpOwotCX0KLQotCWZvciAoY3RsTW9kZSA9IDA7IGN0bE1vZGUgPCBudW1DdGxNb2RlczsgY3RsTW9kZSsrKSB7Ci0JCWJvb2wgaXNIdDQwQ3RsTW9kZSA9IChwQ3RsTW9kZVtjdGxNb2RlXSA9PSBDVExfNUdIVDQwKSB8fAotCQkJKHBDdGxNb2RlW2N0bE1vZGVdID09IENUTF8yR0hUNDApOwotCQlpZiAoaXNIdDQwQ3RsTW9kZSkKLQkJCWZyZXEgPSBjZW50ZXJzLnN5bnRoX2NlbnRlcjsKLQkJZWxzZSBpZiAocEN0bE1vZGVbY3RsTW9kZV0gJiBFWFRfQURESVRJVkUpCi0JCQlmcmVxID0gY2VudGVycy5leHRfY2VudGVyOwotCQllbHNlCi0JCQlmcmVxID0gY2VudGVycy5jdGxfY2VudGVyOwotCi0JCWlmIChhcjU0MTZfZ2V0X2VlcF92ZXIoYWhwKSA9PSAxNCAmJgotCQkJCWFyNTQxNl9nZXRfZWVwX3JldihhaHApIDw9IDIpCi0JCQl0d2ljZU1heEVkZ2VQb3dlciA9IEFSNTQxNl9NQVhfUkFURV9QT1dFUjsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAotCQkJIkxPT1AtTW9kZSBjdGxNb2RlICVkIDwgJWQsIGlzSHQ0MEN0bE1vZGUgJWQsICIKLQkJCSJFWFRfQURESVRJVkUgJWRcbiIsCi0JCQljdGxNb2RlLCBudW1DdGxNb2RlcywgaXNIdDQwQ3RsTW9kZSwKLQkJCShwQ3RsTW9kZVtjdGxNb2RlXSAmIEVYVF9BRERJVElWRSkpOwotCi0JCWZvciAoaSA9IDA7IChpIDwgQVI1NDE2X05VTV9DVExTKSAmJgotCQkJCXBFZXBEYXRhLT5jdGxJbmRleFtpXTsgaSsrKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAotCQkJCSIgIExPT1AtQ3RsaWR4ICVkOiBjZmdDdGwgMHglMi4yeCAiCi0JCQkJInBDdGxNb2RlIDB4JTIuMnggY3RsSW5kZXggMHglMi4yeCAiCi0JCQkJImNoYW4gJWRcbiIsCi0JCQkJaSwgY2ZnQ3RsLCBwQ3RsTW9kZVtjdGxNb2RlXSwKLQkJCQlwRWVwRGF0YS0+Y3RsSW5kZXhbaV0sIGNoYW4tPmNoYW5uZWwpOwotCi0JCQlpZiAoKCgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pIHwKLQkJCSAgICAgIChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PQotCQkJICAgICBwRWVwRGF0YS0+Y3RsSW5kZXhbaV0pIHx8Ci0JCQkgICAgKCgoY2ZnQ3RsICYgfkNUTF9NT0RFX00pIHwKLQkJCSAgICAgIChwQ3RsTW9kZVtjdGxNb2RlXSAmIENUTF9NT0RFX00pKSA9PQotCQkJICAgICAoKHBFZXBEYXRhLT5jdGxJbmRleFtpXSAmIENUTF9NT0RFX00pIHwKLQkJCSAgICAgIFNEX05PX0NUTCkpKSB7Ci0JCQkJcmVwID0gJihwRWVwRGF0YS0+Y3RsRGF0YVtpXSk7Ci0KLQkJCQl0d2ljZU1pbkVkZ2VQb3dlciA9Ci0JCQkJCWF0aDlrX2h3X2dldF9tYXhfZWRnZV9wb3dlcihmcmVxLAotCQkJCXJlcC0+Y3RsRWRnZXNbYXI1NDE2X2dldF9udHhjaGFpbnMKLQkJCQkJCSh0eF9jaGFpbm1hc2spIC0gMV0sCi0JCQkJSVNfQ0hBTl8yR0haKGNoYW4pLAotCQkJCUFSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFUyk7Ci0KLQkJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAotCQkJCQkiICAgIE1BVENILUVFX0lEWCAlZDogY2ggJWQgaXMyICVkICIKLQkJCQkJIjJ4TWluRWRnZSAlZCBjaGFpbm1hc2sgJWQgY2hhaW5zICVkXG4iLAotCQkJCQlpLCBmcmVxLCBJU19DSEFOXzJHSFooY2hhbiksCi0JCQkJCXR3aWNlTWluRWRnZVBvd2VyLCB0eF9jaGFpbm1hc2ssCi0JCQkJCWFyNTQxNl9nZXRfbnR4Y2hhaW5zCi0JCQkJCSh0eF9jaGFpbm1hc2spKTsKLQkJCQlpZiAoKGNmZ0N0bCAmIH5DVExfTU9ERV9NKSA9PSBTRF9OT19DVEwpIHsKLQkJCQkJdHdpY2VNYXhFZGdlUG93ZXIgPQotCQkJCQkJbWluKHR3aWNlTWF4RWRnZVBvd2VyLAotCQkJCQkJICAgIHR3aWNlTWluRWRnZVBvd2VyKTsKLQkJCQl9IGVsc2UgewotCQkJCQl0d2ljZU1heEVkZ2VQb3dlciA9IHR3aWNlTWluRWRnZVBvd2VyOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQltaW5DdGxQb3dlciA9ICh1OCltaW4odHdpY2VNYXhFZGdlUG93ZXIsIHNjYWxlZFBvd2VyKTsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAotCQkJIiAgICBTRUwtTWluIGN0bE1vZGUgJWQgcEN0bE1vZGUgJWQgIgotCQkJIjJ4TWF4RWRnZSAlZCBzUCAlZCBtaW5DdGxQd3IgJWRcbiIsCi0JCQljdGxNb2RlLCBwQ3RsTW9kZVtjdGxNb2RlXSwgdHdpY2VNYXhFZGdlUG93ZXIsCi0JCQlzY2FsZWRQb3dlciwgbWluQ3RsUG93ZXIpOwotCi0JCXN3aXRjaCAocEN0bE1vZGVbY3RsTW9kZV0pIHsKLQkJY2FzZSBDVExfMTFCOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJDY2sudFBvdzJ4KTsKLQkJCQkJaSsrKSB7Ci0JCQkJdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJDY2sudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQ1RMXzExRzoKLQkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRhcmdldFBvd2VyT2ZkbS50UG93MngpOwotCQkJCQlpKyspIHsKLQkJCQl0YXJnZXRQb3dlck9mZG0udFBvdzJ4W2ldID0KLQkJCQkJbWluKCh1MTYpdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFtpXSwKLQkJCQkJICAgIG1pbkN0bFBvd2VyKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIENUTF8yR0hUMjA6Ci0JCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0MjAudFBvdzJ4KTsKLQkJCQkJaSsrKSB7Ci0JCQkJdGFyZ2V0UG93ZXJIdDIwLnRQb3cyeFtpXSA9Ci0JCQkJCW1pbigodTE2KXRhcmdldFBvd2VySHQyMC50UG93MnhbaV0sCi0JCQkJCSAgICBtaW5DdGxQb3dlcik7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMTFCX0VYVDoKLQkJCXRhcmdldFBvd2VyQ2NrRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQotCQkJCQl0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF0sCi0JCQkJCW1pbkN0bFBvd2VyKTsKLQkJCWJyZWFrOwotCQljYXNlIENUTF8xMUdfRVhUOgotCQkJdGFyZ2V0UG93ZXJPZmRtRXh0LnRQb3cyeFswXSA9IG1pbigodTE2KQotCQkJCQl0YXJnZXRQb3dlck9mZG1FeHQudFBvdzJ4WzBdLAotCQkJCQltaW5DdGxQb3dlcik7Ci0JCQlicmVhazsKLQkJY2FzZSBDVExfMkdIVDQwOgotCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDQwLnRQb3cyeCk7Ci0JCQkJCWkrKykgewotCQkJCXRhcmdldFBvd2VySHQ0MC50UG93MnhbaV0gPQotCQkJCQltaW4oKHUxNil0YXJnZXRQb3dlckh0NDAudFBvdzJ4W2ldLAotCQkJCQkgICAgbWluQ3RsUG93ZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXJhdGVzQXJyYXlbcmF0ZTZtYl0gPSByYXRlc0FycmF5W3JhdGU5bWJdID0gcmF0ZXNBcnJheVtyYXRlMTJtYl0gPQotCQlyYXRlc0FycmF5W3JhdGUxOG1iXSA9IHJhdGVzQXJyYXlbcmF0ZTI0bWJdID0KLQkJdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFswXTsKLQlyYXRlc0FycmF5W3JhdGUzNm1iXSA9IHRhcmdldFBvd2VyT2ZkbS50UG93MnhbMV07Ci0JcmF0ZXNBcnJheVtyYXRlNDhtYl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzJdOwotCXJhdGVzQXJyYXlbcmF0ZTU0bWJdID0gdGFyZ2V0UG93ZXJPZmRtLnRQb3cyeFszXTsKLQlyYXRlc0FycmF5W3JhdGVYcl0gPSB0YXJnZXRQb3dlck9mZG0udFBvdzJ4WzBdOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFyZ2V0UG93ZXJIdDIwLnRQb3cyeCk7IGkrKykKLQkJcmF0ZXNBcnJheVtyYXRlSHQyMF8wICsgaV0gPSB0YXJnZXRQb3dlckh0MjAudFBvdzJ4W2ldOwotCi0JcmF0ZXNBcnJheVtyYXRlMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzBdOwotCXJhdGVzQXJyYXlbcmF0ZTJzXSA9IHJhdGVzQXJyYXlbcmF0ZTJsXSA9IHRhcmdldFBvd2VyQ2NrLnRQb3cyeFsxXTsKLQlyYXRlc0FycmF5W3JhdGU1XzVzXSA9IHJhdGVzQXJyYXlbcmF0ZTVfNWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzJdOwotCXJhdGVzQXJyYXlbcmF0ZTExc10gPSByYXRlc0FycmF5W3JhdGUxMWxdID0gdGFyZ2V0UG93ZXJDY2sudFBvdzJ4WzNdOwotCi0JaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0YXJnZXRQb3dlckh0NDAudFBvdzJ4KTsgaSsrKSB7Ci0JCQlyYXRlc0FycmF5W3JhdGVIdDQwXzAgKyBpXSA9Ci0JCQkJdGFyZ2V0UG93ZXJIdDQwLnRQb3cyeFtpXTsKLQkJfQotCQlyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSA9IHRhcmdldFBvd2VySHQ0MC50UG93MnhbMF07Ci0JCXJhdGVzQXJyYXlbcmF0ZUR1cENja10gPSB0YXJnZXRQb3dlckh0NDAudFBvdzJ4WzBdOwotCQlyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSA9IHRhcmdldFBvd2VyT2ZkbUV4dC50UG93MnhbMF07Ci0JCXJhdGVzQXJyYXlbcmF0ZUV4dENja10gPSB0YXJnZXRQb3dlckNja0V4dC50UG93MnhbMF07Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW50IGF0aDlrX2h3X2RlZl9zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgdTE2IGNmZ0N0bCwKLQkJCSB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkgdTggcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWhwLT5haF9lZXByb20uZGVmOworI2RlZmluZSBSVF9BUl9ERUxUQSh4KSAocmF0ZXNBcnJheVt4XSAtIGNja19vZmRtX2RlbHRhKQorCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEgPSAmYWgtPmVlcHJvbS5kZWY7CiAJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9CiAJCSYocEVlcERhdGEtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwogCWludDE2X3QgcmF0ZXNBcnJheVtBcjU0MTZSYXRlU2l6ZV07CiAJaW50MTZfdCB0eFBvd2VySW5kZXhPZmZzZXQgPSAwOwogCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjID0gMjsKLQlpbnQgaTsKKwlpbnQgaSwgY2NrX29mZG1fZGVsdGEgPSAwOwogCiAJbWVtc2V0KHJhdGVzQXJyYXksIDAsIHNpemVvZihyYXRlc0FycmF5KSk7CiAKQEAgLTE4MDYsMTYgKzI2MTUsMzAgQEAKIAkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyNG1iXSwgMCkpOwogCiAJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKLQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJzXSwgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJsXSwgMTYpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZVhyXSwgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMWxdLCAwKSk7Ci0JCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAotCQkJICBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMTFzXSwgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExbF0sIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU1XzVzXSwgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81bF0sIDApKTsKKwkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSKSB7CisJCQljY2tfb2ZkbV9kZWx0YSA9IDI7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFMywKKwkJCQlBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTJzKSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTJsKSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlWHJdLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGUxbCksIDApKTsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU0LAorCQkJCUFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlMTFzKSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZTExbCksIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGU1XzVzKSwgOCkKKwkJCQl8IEFUSDlLX1BPV19TTShSVF9BUl9ERUxUQShyYXRlNV81bCksIDApKTsKKwkJfSBlbHNlIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEUzLAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyc10sIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTJsXSwgMTYpCisJCQkJfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlWHJdLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTFsXSwgMCkpOworCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTQsCisJCQkJQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExc10sIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExbF0sIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNXNdLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNWxdLCAwKSk7CisJCX0KIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNSwKQEAgLTE4NDgsMTIgKzI2NzEsMTkgQEAKIAkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQogCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzRdICsKIAkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAwKSk7Ci0KLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTksCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dENja10sIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSwgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSwgMCkpOworCQlpZiAoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpIHsKKwkJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU5LAorCQkJCUFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCisJCQkJfCBBVEg5S19QT1dfU00oUlRfQVJfREVMVEEocmF0ZUV4dENjayksIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKFJUX0FSX0RFTFRBKHJhdGVEdXBDY2spLCAwKSk7CisJCX0gZWxzZSB7CisJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOSwKKwkJCQlBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRXh0T2ZkbV0sIDI0KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dENja10sIDE2KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQorCQkJCXwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cENja10sIDApKTsKKwkJfQogCX0KIAogCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1NVQiwKQEAgLTE4NjgsNzY5ICsyNjk4LDMzIEBACiAJCWkgPSByYXRlSHQyMF8wOwogCiAJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCi0JCWFoLT5haF9tYXhQb3dlckxldmVsID0KKwkJYWgtPnJlZ3VsYXRvcnkubWF4X3Bvd2VyX2xldmVsID0KIAkJCXJhdGVzQXJyYXlbaV0gKyBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7CiAJZWxzZQotCQlhaC0+YWhfbWF4UG93ZXJMZXZlbCA9IHJhdGVzQXJyYXlbaV07CisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCA9IHJhdGVzQXJyYXlbaV07CiAKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhdGg5a19od180a19zZXRfdHhwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCi0JCQkgdTE2IGNmZ0N0bCwKLQkJCSB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCi0JCQkgdTggdHdpY2VNYXhSZWd1bGF0b3J5UG93ZXIsCi0JCQkgdTggcG93ZXJMaW1pdCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICpwRWVwRGF0YSA9ICZhaHAtPmFoX2VlcHJvbS5tYXA0azsKLQlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciAqcE1vZGFsID0gJnBFZXBEYXRhLT5tb2RhbEhlYWRlcjsKLQlpbnQxNl90IHJhdGVzQXJyYXlbQXI1NDE2UmF0ZVNpemVdOwotCWludDE2X3QgdHhQb3dlckluZGV4T2Zmc2V0ID0gMDsKLQl1OCBodDQwUG93ZXJJbmNGb3JQZGFkYyA9IDI7Ci0JaW50IGk7Ci0KLQltZW1zZXQocmF0ZXNBcnJheSwgMCwgc2l6ZW9mKHJhdGVzQXJyYXkpKTsKLQotCWlmICgocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKLQkJaHQ0MFBvd2VySW5jRm9yUGRhZGMgPSBwTW9kYWwtPmh0NDBQb3dlckluY0ZvclBkYWRjOwotCX0KLQotCWlmICghYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX3Blcl9yYXRlX3RhYmxlKGFoLCBjaGFuLAotCQkJCQkgICAgICAgJnJhdGVzQXJyYXlbMF0sIGNmZ0N0bCwKLQkJCQkJICAgICAgIHR3aWNlQW50ZW5uYVJlZHVjdGlvbiwKLQkJCQkJICAgICAgIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJCQkgICAgICAgcG93ZXJMaW1pdCkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJImF0aDlrX2h3X3NldF90eHBvd2VyOiB1bmFibGUgdG8gc2V0ICIKLQkJCSJ0eCBwb3dlciBwZXIgcmF0ZSB0YWJsZVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmICghYXRoOWtfaHdfc2V0XzRrX3Bvd2VyX2NhbF90YWJsZShhaCwgY2hhbiwgJnR4UG93ZXJJbmRleE9mZnNldCkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJICJhdGg5a19od19zZXRfdHhwb3dlcjogdW5hYmxlIHRvIHNldCBwb3dlciB0YWJsZVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhdGVzQXJyYXkpOyBpKyspIHsKLQkJcmF0ZXNBcnJheVtpXSA9CShpbnQxNl90KSh0eFBvd2VySW5kZXhPZmZzZXQgKyByYXRlc0FycmF5W2ldKTsKLQkJaWYgKHJhdGVzQXJyYXlbaV0gPiBBUjU0MTZfTUFYX1JBVEVfUE9XRVIpCi0JCQlyYXRlc0FycmF5W2ldID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCX0KLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBBcjU0MTZSYXRlU2l6ZTsgaSsrKQotCQkJcmF0ZXNBcnJheVtpXSAtPSBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAqIDI7Ci0JfQotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTEsCi0JCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTE4bWJdLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMm1iXSwgMTYpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlOW1iXSwgOCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU2bWJdLCAwKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTIsCi0JCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTU0bWJdLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGU0OG1iXSwgMTYpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMzZtYl0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlMjRtYl0sIDApKTsKLQotCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTMsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUyc10sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUybF0sIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVYcl0sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTFsXSwgMCkpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFNCwKLQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTExc10sIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGUxMWxdLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlNV81c10sIDgpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZTVfNWxdLCAwKSk7Ci0JfQotCi0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTUsCi0JCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfM10sIDI0KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMl0sIDE2KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfMV0sIDgpCi0JCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQyMF8wXSwgMCkpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEU2LAotCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzddLCAyNCkKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzZdLCAxNikKLQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDIwXzVdLCA4KQotCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0MjBfNF0sIDApKTsKLQotCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTcsCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzNdICsKLQkJCQkgICAgICAgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDI0KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzJdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAxNikKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8xXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlSHQ0MF8wXSArCi0JCQkJCSBodDQwUG93ZXJJbmNGb3JQZGFkYywgMCkpOwotCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFOCwKLQkJCSAgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfN10gKwotCQkJCSAgICAgICBodDQwUG93ZXJJbmNGb3JQZGFkYywgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUh0NDBfNl0gKwotCQkJCQkgaHQ0MFBvd2VySW5jRm9yUGRhZGMsIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzVdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCA4KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVIdDQwXzRdICsKLQkJCQkJIGh0NDBQb3dlckluY0ZvclBkYWRjLCAwKSk7Ci0KLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURTksCi0JCQkgIEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVFeHRPZmRtXSwgMjQpCi0JCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUV4dENja10sIDE2KQotCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBPZmRtXSwgOCkKLQkJCSAgfCBBVEg5S19QT1dfU00ocmF0ZXNBcnJheVtyYXRlRHVwQ2NrXSwgMCkpOwotCX0KLQotCWkgPSByYXRlNm1iOwotCi0JaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKLQkJaSA9IHJhdGVIdDQwXzA7Ci0JZWxzZSBpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pKQotCQlpID0gcmF0ZUh0MjBfMDsKLQotCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQotCQlhaC0+YWhfbWF4UG93ZXJMZXZlbCA9Ci0JCQlyYXRlc0FycmF5W2ldICsgQVI1NDE2X1BXUl9UQUJMRV9PRkZTRVQgKiAyOwotCWVsc2UKLQkJYWgtPmFoX21heFBvd2VyTGV2ZWwgPSByYXRlc0FycmF5W2ldOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgKCphdGg5a19zZXRfdHhwb3dlcltdKSAoc3RydWN0IGF0aF9oYWwgKiwKLQkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqLAotCQkJCSAgIHUxNiwgdTgsIHU4LCB1OCkgPSB7Ci0JYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyLAotCWF0aDlrX2h3XzRrX3NldF90eHBvd2VyCi19OwotCi1pbnQgYXRoOWtfaHdfc2V0X3R4cG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJIHUxNiBjZmdDdGwsCi0JCQkgdTggdHdpY2VBbnRlbm5hUmVkdWN0aW9uLAotCQkJIHU4IHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJIHU4IHBvd2VyTGltaXQpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCXJldHVybiBhdGg5a19zZXRfdHhwb3dlclthaHAtPmFoX2VlcF9tYXBdKGFoLCBjaGFuLCBjZmdDdGwsCi0JCQl0d2ljZUFudGVubmFSZWR1Y3Rpb24sIHR3aWNlTWF4UmVndWxhdG9yeVBvd2VyLAotCQkJcG93ZXJMaW1pdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9kZWZfYWRkYWMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotI2RlZmluZSBYUEFfTFZMX0ZSRVEoY250KSAocE1vZGFsLT54cGFCaWFzTHZsRnJlcVtjbnRdKQotCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0JdTggYmlhc2xldmVsOwotCi0JaWYgKGFoLT5haF9tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl85MTYwKQotCQlyZXR1cm47Ci0KLQlpZiAoYXI1NDE2X2dldF9lZXBfcmV2KGFocCkgPCBBUjU0MTZfRUVQX01JTk9SX1ZFUl83KQotCQlyZXR1cm47Ci0KLQlwTW9kYWwgPSAmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7Ci0KLQlpZiAocE1vZGFsLT54cGFCaWFzTHZsICE9IDB4ZmYpIHsKLQkJYmlhc2xldmVsID0gcE1vZGFsLT54cGFCaWFzTHZsOwotCX0gZWxzZSB7Ci0JCXUxNiByZXNldEZyZXFCaW4sIGZyZXFCaW4sIGZyZXFDb3VudCA9IDA7Ci0JCXN0cnVjdCBjaGFuX2NlbnRlcnMgY2VudGVyczsKLQotCQlhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKGFoLCBjaGFuLCAmY2VudGVycyk7Ci0KLQkJcmVzZXRGcmVxQmluID0gRlJFUTJGQklOKGNlbnRlcnMuc3ludGhfY2VudGVyLAotCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKLQkJZnJlcUJpbiA9IFhQQV9MVkxfRlJFUSgwKSAmIDB4ZmY7Ci0JCWJpYXNsZXZlbCA9ICh1OCkgKFhQQV9MVkxfRlJFUSgwKSA+PiAxNCk7Ci0KLQkJZnJlcUNvdW50Kys7Ci0KLQkJd2hpbGUgKGZyZXFDb3VudCA8IDMpIHsKLQkJCWlmIChYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSA9PSAweDApCi0JCQkJYnJlYWs7Ci0KLQkJCWZyZXFCaW4gPSBYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSAmIDB4ZmY7Ci0JCQlpZiAocmVzZXRGcmVxQmluID49IGZyZXFCaW4pCi0JCQkJYmlhc2xldmVsID0gKHU4KShYUEFfTFZMX0ZSRVEoZnJlcUNvdW50KSA+PiAxNCk7Ci0JCQllbHNlCi0JCQkJYnJlYWs7Ci0JCQlmcmVxQ291bnQrKzsKLQkJfQotCX0KLQotCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJSU5JX1JBKCZhaHAtPmFoX2luaUFkZGFjLCA3LCAxKSA9IChJTklfUkEoJmFocC0+YWhfaW5pQWRkYWMsCi0JCQkJCTcsIDEpICYgKH4weDE4KSkgfCBiaWFzbGV2ZWwgPDwgMzsKLQl9IGVsc2UgewotCQlJTklfUkEoJmFocC0+YWhfaW5pQWRkYWMsIDYsIDEpID0gKElOSV9SQSgmYWhwLT5haF9pbmlBZGRhYywKLQkJCQkJNiwgMSkgJiAofjB4YzApKSB8IGJpYXNsZXZlbCA8PCA2OwotCX0KLSN1bmRlZiBYUEFfTFZMX0ZSRVEKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0XzRrX2FkZGFjKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOwotCXU4IGJpYXNsZXZlbDsKLQotCWlmIChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkKLQkJcmV0dXJuOwotCi0JaWYgKGFyNTQxNl9nZXRfZWVwX3JldihhaHApIDwgQVI1NDE2X0VFUF9NSU5PUl9WRVJfNykKLQkJcmV0dXJuOwotCi0JcE1vZGFsID0gJmVlcC0+bW9kYWxIZWFkZXI7Ci0KLQlpZiAocE1vZGFsLT54cGFCaWFzTHZsICE9IDB4ZmYpIHsKLQkJYmlhc2xldmVsID0gcE1vZGFsLT54cGFCaWFzTHZsOwotCQlJTklfUkEoJmFocC0+YWhfaW5pQWRkYWMsIDcsIDEpID0KLQkJICAoSU5JX1JBKCZhaHAtPmFoX2luaUFkZGFjLCA3LCAxKSAmICh+MHgxOCkpIHwgYmlhc2xldmVsIDw8IDM7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCAoKmF0aDlrX3NldF9hZGRhY1tdKSAoc3RydWN0IGF0aF9oYWwgKiwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKikgPSB7Ci0JYXRoOWtfaHdfc2V0X2RlZl9hZGRhYywKLQlhdGg5a19od19zZXRfNGtfYWRkYWMKLX07Ci0KLXZvaWQgYXRoOWtfaHdfc2V0X2FkZGFjKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCWF0aDlrX3NldF9hZGRhY1thaHAtPmFoX2VlcF9tYXBdKGFoLCBjaGFuKTsKLX0KLQotCi0KLS8qIFhYWDogQ2xlYW4gbWUgdXAsIG1ha2UgbWUgbW9yZSBsZWdpYmxlICovCi1zdGF0aWMgYm9vbCBhdGg5a19od19lZXByb21fc2V0X2RlZl9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWw7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0JaW50IGksIHJlZ0NoYWluT2Zmc2V0OwotCXU4IHR4UnhBdHRlbkxvY2FsOwotCXUxNiBhbnRfY29uZmlnOwotCi0JcE1vZGFsID0gJihlZXAtPm1vZGFsSGVhZGVyW0lTX0NIQU5fMkdIWihjaGFuKV0pOwotCi0JdHhSeEF0dGVuTG9jYWwgPSBJU19DSEFOXzJHSFooY2hhbikgPyAyMyA6IDQ0OwotCi0JYXRoOWtfaHdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbiwgMCwgJmFudF9jb25maWcpOwotCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sIGFudF9jb25maWcpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSNTQxNl9NQVhfQ0hBSU5TOyBpKyspIHsKLQkJaWYgKEFSX1NSRVZfOTI4MChhaCkpIHsKLQkJCWlmIChpID49IDIpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoQVJfU1JFVl81NDE2X1YyMF9PUl9MQVRFUihhaCkgJiYKLQkJICAgIChhaHAtPmFoX3J4Y2hhaW5tYXNrID09IDUgfHwgYWhwLT5haF90eGNoYWlubWFzayA9PSA1KQotCQkgICAgJiYgKGkgIT0gMCkpCi0JCQlyZWdDaGFpbk9mZnNldCA9IChpID09IDEpID8gMHgyMDAwIDogMHgxMDAwOwotCQllbHNlCi0JCQlyZWdDaGFpbk9mZnNldCA9IGkgKiAweDEwMDA7Ci0KLQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAgKyByZWdDaGFpbk9mZnNldCwKLQkJCSAgcE1vZGFsLT5hbnRDdHJsQ2hhaW5baV0pOwotCi0JCVJFR19XUklURShhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0LAotCQkJICAoUkVHX1JFQUQoYWgsCi0JCQkJICAgIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKwotCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJICAgfihBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRiB8Ci0JCQkgICAgIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSkgfAotCQkJICBTTShwTW9kYWwtPmlxQ2FsSUNoW2ldLAotCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX0lfQ09GRikgfAotCQkJICBTTShwTW9kYWwtPmlxQ2FsUUNoW2ldLAotCQkJICAgICBBUl9QSFlfVElNSU5HX0NUUkw0X0lRQ09SUl9RX1FfQ09GRikpOwotCi0JCWlmICgoaSA9PSAwKSB8fCBBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSkgewotCQkJaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmCi0JCQkgICAgIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JCQkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgewotCQkJCXR4UnhBdHRlbkxvY2FsID0gcE1vZGFsLT50eFJ4QXR0ZW5DaFtpXTsKLQkJCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQlyZWdDaGFpbk9mZnNldCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9NQVJHSU4sCi0JCQkJCQlwTW9kYWwtPgotCQkJCQkJYnN3TWFyZ2luW2ldKTsKLQkJCQkJUkVHX1JNV19GSUVMRChhaCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfREIsCi0JCQkJCQlwTW9kYWwtPgotCQkJCQkJYnN3QXR0ZW5baV0pOwotCQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQlyZWdDaGFpbk9mZnNldCwKLQkJCQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9NQVJHSU4sCi0JCQkJCQlwTW9kYWwtPgotCQkJCQkJeGF0dGVuMk1hcmdpbltpXSk7Ci0JCQkJCVJFR19STVdfRklFTEQoYWgsCi0JCQkJCQlBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCXJlZ0NoYWluT2Zmc2V0LAotCQkJCQkJQVJfUEhZX0dBSU5fMkdIWl9YQVRURU4yX0RCLAotCQkJCQkJcE1vZGFsLT4KLQkJCQkJCXhhdHRlbjJEYltpXSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJUkVHX1dSSVRFKGFoLAotCQkJCQkJICBBUl9QSFlfR0FJTl8yR0haICsKLQkJCQkJCSAgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCQkgIChSRUdfUkVBRChhaCwKLQkJCQkJCQkgICAgQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQkJICAgIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkJCQkgICB+QVJfUEhZX0dBSU5fMkdIWl9CU1dfTUFSR0lOKQotCQkJCQkJICB8IFNNKHBNb2RhbC0+Ci0JCQkJCQkgIGJzd01hcmdpbltpXSwKLQkJCQkJCSAgQVJfUEhZX0dBSU5fMkdIWl9CU1dfTUFSR0lOKSk7Ci0JCQkJCVJFR19XUklURShhaCwKLQkJCQkJCSAgQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCQkgIHJlZ0NoYWluT2Zmc2V0LAotCQkJCQkJICAoUkVHX1JFQUQoYWgsCi0JCQkJCQkJICAgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJCSAgICByZWdDaGFpbk9mZnNldCkgJgotCQkJCQkJICAgfkFSX1BIWV9HQUlOXzJHSFpfQlNXX0FUVEVOKQotCQkJCQkJICB8IFNNKHBNb2RhbC0+YnN3QXR0ZW5baV0sCi0JCQkJCQkgIEFSX1BIWV9HQUlOXzJHSFpfQlNXX0FUVEVOKSk7Ci0JCQkJfQotCQkJfQotCQkJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkJCQkgICAgICBBUl9QSFlfUlhHQUlOICsKLQkJCQkJICAgICAgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfQVRURU4sCi0JCQkJCSAgICAgIHR4UnhBdHRlbkxvY2FsKTsKLQkJCQlSRUdfUk1XX0ZJRUxEKGFoLAotCQkJCQkgICAgICBBUl9QSFlfUlhHQUlOICsKLQkJCQkJICAgICAgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCSAgICAgIEFSOTI4MF9QSFlfUlhHQUlOX1RYUlhfTUFSR0lOLAotCQkJCQkgICAgICBwTW9kYWwtPnJ4VHhNYXJnaW5DaFtpXSk7Ci0JCQl9IGVsc2UgewotCQkJCVJFR19XUklURShhaCwKLQkJCQkJICBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCSAgKFJFR19SRUFEKGFoLAotCQkJCQkJICAgIEFSX1BIWV9SWEdBSU4gKwotCQkJCQkJICAgIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkJCSAgIH5BUl9QSFlfUlhHQUlOX1RYUlhfQVRURU4pIHwKLQkJCQkJICBTTSh0eFJ4QXR0ZW5Mb2NhbCwKLQkJCQkJICAgICBBUl9QSFlfUlhHQUlOX1RYUlhfQVRURU4pKTsKLQkJCQlSRUdfV1JJVEUoYWgsCi0JCQkJCSAgQVJfUEhZX0dBSU5fMkdIWiArCi0JCQkJCSAgcmVnQ2hhaW5PZmZzZXQsCi0JCQkJCSAgKFJFR19SRUFEKGFoLAotCQkJCQkJICAgIEFSX1BIWV9HQUlOXzJHSFogKwotCQkJCQkJICAgIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCQkJCSAgIH5BUl9QSFlfR0FJTl8yR0haX1JYVFhfTUFSR0lOKSB8Ci0JCQkJCSAgU00ocE1vZGFsLT5yeFR4TWFyZ2luQ2hbaV0sCi0JCQkJCSAgICAgQVJfUEhZX0dBSU5fMkdIWl9SWFRYX01BUkdJTikpOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJaWYgKElTX0NIQU5fMkdIWihjaGFuKSkgewotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkYyRzFfQ0gwLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfT0IsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMF9PQl9TLAotCQkJCQkJICBwTW9kYWwtPm9iKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMCwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gwX0RCLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDBfREJfUywKLQkJCQkJCSAgcE1vZGFsLT5kYik7Ci0JCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9SRjJHMV9DSDEsCi0JCQkJCQkgIEFSX0FOX1JGMkcxX0NIMV9PQiwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX09CX1MsCi0JCQkJCQkgIHBNb2RhbC0+b2JfY2gxKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGMkcxX0NIMSwKLQkJCQkJCSAgQVJfQU5fUkYyRzFfQ0gxX0RCLAotCQkJCQkJICBBUl9BTl9SRjJHMV9DSDFfREJfUywKLQkJCQkJCSAgcE1vZGFsLT5kYl9jaDEpOwotCQl9IGVsc2UgewotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gwLAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfT0I1LAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfT0I1X1MsCi0JCQkJCQkgIHBNb2RhbC0+b2IpOwotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gwLAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfREI1LAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDBfREI1X1MsCi0JCQkJCQkgIHBNb2RhbC0+ZGIpOwotCQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fUkY1RzFfQ0gxLAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfT0I1LAotCQkJCQkJICBBUl9BTl9SRjVHMV9DSDFfT0I1X1MsCi0JCQkJCQkgIHBNb2RhbC0+b2JfY2gxKTsKLQkJCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSX0FOX1JGNUcxX0NIMSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX0RCNSwKLQkJCQkJCSAgQVJfQU5fUkY1RzFfQ0gxX0RCNV9TLAotCQkJCQkJICBwTW9kYWwtPmRiX2NoMSk7Ci0JCX0KLQkJYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVJfQU5fVE9QMiwKLQkJCQkJICBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMLAotCQkJCQkgIEFSX0FOX1RPUDJfWFBBQklBU19MVkxfUywKLQkJCQkJICBwTW9kYWwtPnhwYUJpYXNMdmwpOwotCQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUl9BTl9UT1AyLAotCQkJCQkgIEFSX0FOX1RPUDJfTE9DQUxCSUFTLAotCQkJCQkgIEFSX0FOX1RPUDJfTE9DQUxCSUFTX1MsCi0JCQkJCSAgcE1vZGFsLT5sb2NhbF9iaWFzKTsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLCAiRm9yY2VYUEFvbjogJWRcbiIsCi0JCQlwTW9kYWwtPmZvcmNlX3hwYW9uKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1hQQV9DRkcsIEFSX1BIWV9GT1JDRV9YUEFfQ0ZHLAotCQkJICAgICAgcE1vZGFsLT5mb3JjZV94cGFvbik7Ci0JfQotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLCBBUl9QSFlfU0VUVExJTkdfU1dJVENILAotCQkgICAgICBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwgQVJfUEhZX0RFU0lSRURfU1pfQURDLAotCQkgICAgICBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKLQotCWlmICghQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0RFU0lSRURfU1osCi0JCQkgICAgICBBUl9QSFlfREVTSVJFRF9TWl9QR0EsCi0JCQkgICAgICBwTW9kYWwtPnBnYURlc2lyZWRTaXplKTsKLQotCVJFR19XUklURShhaCwgQVJfUEhZX1JGX0NUTDQsCi0JCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQV9PRkYpCi0JCSAgfCBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsCi0JCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQl9PRkYpCi0JCSAgfCBTTShwTW9kYWwtPnR4RnJhbWVUb1hwYU9uLAotCQkgICAgICAgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQV9PTikKLQkJICB8IFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sCi0JCSAgICAgICBBUl9QSFlfUkZfQ1RMNF9GUkFNRV9YUEFCX09OKSk7Ci0KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUkZfQ1RMMywgQVJfUEhZX1RYX0VORF9UT19BMl9SWF9PTiwKLQkJICAgICAgcE1vZGFsLT50eEVuZFRvUnhPbik7Ci0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDQSwgQVI5MjgwX1BIWV9DQ0FfVEhSRVNINjIsCi0JCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0VYVF9DQ0EwLAotCQkJICAgICAgQVJfUEhZX0VYVF9DQ0EwX1RIUkVTSDYyLAotCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JfSBlbHNlIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX0NDQSwgQVJfUEhZX0NDQV9USFJFU0g2MiwKLQkJCSAgICAgIHBNb2RhbC0+dGhyZXNoNjIpOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQSwKLQkJCSAgICAgIEFSX1BIWV9FWFRfQ0NBX1RIUkVTSDYyLAotCQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0JfQotCi0JaWYgKChlZXAtPmJhc2VFZXBIZWFkZXIudmVyc2lvbiAmIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0spID49Ci0JICAgIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsCi0JCQkgICAgICBBUl9QSFlfVFhfRU5EX0RBVEFfU1RBUlQsCi0JCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb0RhdGFTdGFydCk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9SRl9DVEwyLCBBUl9QSFlfVFhfRU5EX1BBX09OLAotCQkJICAgICAgcE1vZGFsLT50eEZyYW1lVG9QYU9uKTsKLQl9Ci0KLQlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkgICAgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgewotCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQotCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAotCQkJCSAgICAgIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCi0JCQkJICAgICAgcE1vZGFsLT5zd1NldHRsZUh0NDApOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBhdGg5a19od19lZXByb21fc2V0XzRrX2JvYXJkX3ZhbHVlcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0Jc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWhwLT5haF9lZXByb20ubWFwNGs7Ci0JaW50IHJlZ0NoYWluT2Zmc2V0OwotCXU4IHR4UnhBdHRlbkxvY2FsOwotCXUxNiBhbnRfY29uZmlnID0gMDsKLQl1OCBvYls1XSwgZGIxWzVdLCBkYjJbNV07Ci0JdTggYW50X2Rpdl9jb250cm9sMSwgYW50X2Rpdl9jb250cm9sMjsKLQl1MzIgcmVnVmFsOwotCi0KLQlwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKLQotCXR4UnhBdHRlbkxvY2FsID0gMjM7Ci0KLQlhdGg5a19od19nZXRfZWVwcm9tX2FudGVubmFfY2ZnKGFoLCBjaGFuLCAwLCAmYW50X2NvbmZpZyk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NPTSwgYW50X2NvbmZpZyk7Ci0KLQlyZWdDaGFpbk9mZnNldCA9IDA7Ci0JUkVHX1dSSVRFKGFoLCBBUl9QSFlfU1dJVENIX0NIQUlOXzAgKyByZWdDaGFpbk9mZnNldCwKLQkJICBwTW9kYWwtPmFudEN0cmxDaGFpblswXSk7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9USU1JTkdfQ1RSTDQoMCkgKyByZWdDaGFpbk9mZnNldCwKLQkJIChSRUdfUkVBRChhaCwgQVJfUEhZX1RJTUlOR19DVFJMNCgwKSArIHJlZ0NoYWluT2Zmc2V0KSAmCi0JCSB+KEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGIHwKLQkJIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfSV9DT0ZGKSkgfAotCQkgU00ocE1vZGFsLT5pcUNhbElDaFswXSwgQVJfUEhZX1RJTUlOR19DVFJMNF9JUUNPUlJfUV9JX0NPRkYpIHwKLQkJIFNNKHBNb2RhbC0+aXFDYWxRQ2hbMF0sIEFSX1BIWV9USU1JTkdfQ1RSTDRfSVFDT1JSX1FfUV9DT0ZGKSk7Ci0KLQlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkJCUFSNTQxNl9FRVBfTUlOT1JfVkVSXzMpIHsKLQkJdHhSeEF0dGVuTG9jYWwgPSBwTW9kYWwtPnR4UnhBdHRlbkNoWzBdOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjFfTUFSR0lOLCBwTW9kYWwtPmJzd01hcmdpblswXSk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMV9EQiwgcE1vZGFsLT5ic3dBdHRlblswXSk7Ci0JCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9HQUlOXzJHSFogKyByZWdDaGFpbk9mZnNldCwKLQkJCUFSX1BIWV9HQUlOXzJHSFpfWEFUVEVOMl9NQVJHSU4sCi0JCQlwTW9kYWwtPnhhdHRlbjJNYXJnaW5bMF0pOwotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfR0FJTl8yR0haICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQlBUl9QSFlfR0FJTl8yR0haX1hBVFRFTjJfREIsIHBNb2RhbC0+eGF0dGVuMkRiWzBdKTsKLQl9Ci0KLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfUlhHQUlOICsgcmVnQ2hhaW5PZmZzZXQsCi0JCQlBUjkyODBfUEhZX1JYR0FJTl9UWFJYX0FUVEVOLCB0eFJ4QXR0ZW5Mb2NhbCk7Ci0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JYR0FJTiArIHJlZ0NoYWluT2Zmc2V0LAotCQkJQVI5MjgwX1BIWV9SWEdBSU5fVFhSWF9NQVJHSU4sIHBNb2RhbC0+cnhUeE1hcmdpbkNoWzBdKTsKLQotCWlmIChBUl9TUkVWXzkyODVfMTEoYWgpKQotCQlSRUdfV1JJVEUoYWgsIEFSOTI4NV9BTl9UT1A0LCAoQVI5Mjg1X0FOX1RPUDRfREVGQVVMVCB8IDB4MTQpKTsKLQotCS8qIEluaXRpYWxpemUgQW50IERpdmVyc2l0eSBzZXR0aW5ncyBmcm9tIEVFUFJPTSAqLwotCWlmIChwTW9kYWwtPnZlcnNpb24gPT0gMykgewotCQlhbnRfZGl2X2NvbnRyb2wxID0gKChwTW9kYWwtPm9iXzIzNCA+PiAxMikgJiAweGYpOwotCQlhbnRfZGl2X2NvbnRyb2wyID0gKChwTW9kYWwtPmRiMV8yMzQgPj4gMTIpICYgMHhmKTsKLQkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTlhYyk7Ci0JCXJlZ1ZhbCAmPSAofigweDdmMDAwMDAwKSk7Ci0JCXJlZ1ZhbCB8PSAoKGFudF9kaXZfY29udHJvbDEgJiAweDEpIDw8IDI0KTsKLQkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDEgPj4gMSkgJiAweDEpIDw8IDI5KTsKLQkJcmVnVmFsIHw9ICgoKGFudF9kaXZfY29udHJvbDEgPj4gMikgJiAweDEpIDw8IDMwKTsKLQkJcmVnVmFsIHw9ICgoYW50X2Rpdl9jb250cm9sMiAmIDB4MykgPDwgMjUpOwotCQlyZWdWYWwgfD0gKCgoYW50X2Rpdl9jb250cm9sMiA+PiAyKSAmIDB4MykgPDwgMjcpOwotCQlSRUdfV1JJVEUoYWgsIDB4OTlhYywgcmVnVmFsKTsKLQkJcmVnVmFsID0gUkVHX1JFQUQoYWgsIDB4OTlhYyk7Ci0JCXJlZ1ZhbCA9IFJFR19SRUFEKGFoLCAweGEyMDgpOwotCQlyZWdWYWwgJj0gKH4oMHgxIDw8IDEzKSk7Ci0JCXJlZ1ZhbCB8PSAoKChhbnRfZGl2X2NvbnRyb2wxID4+IDMpICYgMHgxKSA8PCAxMyk7Ci0JCVJFR19XUklURShhaCwgMHhhMjA4LCByZWdWYWwpOwotCQlyZWdWYWwgPSBSRUdfUkVBRChhaCwgMHhhMjA4KTsKLQl9Ci0KLQlpZiAocE1vZGFsLT52ZXJzaW9uID49IDIpIHsKLQkJb2JbMF0gPSAocE1vZGFsLT5vYl8wMSAmIDB4Zik7Ci0JCW9iWzFdID0gKHBNb2RhbC0+b2JfMDEgPj4gNCkgJiAweGY7Ci0JCW9iWzJdID0gKHBNb2RhbC0+b2JfMjM0ICYgMHhmKTsKLQkJb2JbM10gPSAoKHBNb2RhbC0+b2JfMjM0ID4+IDQpICYgMHhmKTsKLQkJb2JbNF0gPSAoKHBNb2RhbC0+b2JfMjM0ID4+IDgpICYgMHhmKTsKLQotCQlkYjFbMF0gPSAocE1vZGFsLT5kYjFfMDEgJiAweGYpOwotCQlkYjFbMV0gPSAoKHBNb2RhbC0+ZGIxXzAxID4+IDQpICYgMHhmKTsKLQkJZGIxWzJdID0gKHBNb2RhbC0+ZGIxXzIzNCAmIDB4Zik7Ci0JCWRiMVszXSA9ICgocE1vZGFsLT5kYjFfMjM0ID4+IDQpICYgMHhmKTsKLQkJZGIxWzRdID0gKChwTW9kYWwtPmRiMV8yMzQgPj4gOCkgJiAweGYpOwotCi0JCWRiMlswXSA9IChwTW9kYWwtPmRiMl8wMSAmIDB4Zik7Ci0JCWRiMlsxXSA9ICgocE1vZGFsLT5kYjJfMDEgPj4gNCkgJiAweGYpOwotCQlkYjJbMl0gPSAocE1vZGFsLT5kYjJfMjM0ICYgMHhmKTsKLQkJZGIyWzNdID0gKChwTW9kYWwtPmRiMl8yMzQgPj4gNCkgJiAweGYpOwotCQlkYjJbNF0gPSAoKHBNb2RhbC0+ZGIyXzIzNCA+PiA4KSAmIDB4Zik7Ci0KLQl9IGVsc2UgaWYgKHBNb2RhbC0+dmVyc2lvbiA9PSAxKSB7Ci0KLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRUVQUk9NLAotCQkJIkVFUFJPTSBNb2RlbCB2ZXJzaW9uIGlzIHNldCB0byAxIFxuIik7Ci0JCW9iWzBdID0gKHBNb2RhbC0+b2JfMDEgJiAweGYpOwotCQlvYlsxXSA9IG9iWzJdID0gb2JbM10gPSBvYls0XSA9IChwTW9kYWwtPm9iXzAxID4+IDQpICYgMHhmOwotCQlkYjFbMF0gPSAocE1vZGFsLT5kYjFfMDEgJiAweGYpOwotCQlkYjFbMV0gPSBkYjFbMl0gPSBkYjFbM10gPQotCQkJZGIxWzRdID0gKChwTW9kYWwtPmRiMV8wMSA+PiA0KSAmIDB4Zik7Ci0JCWRiMlswXSA9IChwTW9kYWwtPmRiMl8wMSAmIDB4Zik7Ci0JCWRiMlsxXSA9IGRiMlsyXSA9IGRiMlszXSA9Ci0JCQlkYjJbNF0gPSAoKHBNb2RhbC0+ZGIyXzAxID4+IDQpICYgMHhmKTsKLQl9IGVsc2UgewotCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQkJb2JbaV0gPSBwTW9kYWwtPm9iXzAxOwotCQkJZGIxW2ldID0gcE1vZGFsLT5kYjFfMDE7Ci0JCQlkYjJbaV0gPSBwTW9kYWwtPmRiMV8wMTsKLQkJfQotCX0KLQotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19PQl8wLCBBUjkyODVfQU5fUkYyRzNfT0JfMF9TLCBvYlswXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX09CXzEsIEFSOTI4NV9BTl9SRjJHM19PQl8xX1MsIG9iWzFdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfT0JfMiwgQVI5Mjg1X0FOX1JGMkczX09CXzJfUywgb2JbMl0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19PQl8zLCBBUjkyODVfQU5fUkYyRzNfT0JfM19TLCBvYlszXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX09CXzQsIEFSOTI4NV9BTl9SRjJHM19PQl80X1MsIG9iWzRdKTsKLQotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHMywKLQkJCUFSOTI4NV9BTl9SRjJHM19EQjFfMCwgQVI5Mjg1X0FOX1JGMkczX0RCMV8wX1MsIGRiMVswXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkczLAotCQkJQVI5Mjg1X0FOX1JGMkczX0RCMV8xLCBBUjkyODVfQU5fUkYyRzNfREIxXzFfUywgZGIxWzFdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzMsCi0JCQlBUjkyODVfQU5fUkYyRzNfREIxXzIsIEFSOTI4NV9BTl9SRjJHM19EQjFfMl9TLCBkYjFbMl0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKLQkJCUFSOTI4NV9BTl9SRjJHNF9EQjFfMywgQVI5Mjg1X0FOX1JGMkc0X0RCMV8zX1MsIGRiMVszXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMV80LCBBUjkyODVfQU5fUkYyRzRfREIxXzRfUywgZGIxWzRdKTsKLQotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKLQkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMCwgQVI5Mjg1X0FOX1JGMkc0X0RCMl8wX1MsIGRiMlswXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl8xLCBBUjkyODVfQU5fUkYyRzRfREIyXzFfUywgZGIyWzFdKTsKLQlhdGg5a19od19hbmFsb2dfc2hpZnRfcm13KGFoLCBBUjkyODVfQU5fUkYyRzQsCi0JCQlBUjkyODVfQU5fUkYyRzRfREIyXzIsIEFSOTI4NV9BTl9SRjJHNF9EQjJfMl9TLCBkYjJbMl0pOwotCWF0aDlrX2h3X2FuYWxvZ19zaGlmdF9ybXcoYWgsIEFSOTI4NV9BTl9SRjJHNCwKLQkJCUFSOTI4NV9BTl9SRjJHNF9EQjJfMywgQVI5Mjg1X0FOX1JGMkc0X0RCMl8zX1MsIGRiMlszXSk7Ci0JYXRoOWtfaHdfYW5hbG9nX3NoaWZ0X3JtdyhhaCwgQVI5Mjg1X0FOX1JGMkc0LAotCQkJQVI5Mjg1X0FOX1JGMkc0X0RCMl80LCBBUjkyODVfQU5fUkYyRzRfREIyXzRfUywgZGIyWzRdKTsKLQotCi0JaWYgKEFSX1NSRVZfOTI4NV8xMShhaCkpCi0JCVJFR19XUklURShhaCwgQVI5Mjg1X0FOX1RPUDQsIEFSOTI4NV9BTl9UT1A0X0RFRkFVTFQpOwotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLCBBUl9QSFlfU0VUVExJTkdfU1dJVENILAotCQkgICAgICBwTW9kYWwtPnN3aXRjaFNldHRsaW5nKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfREVTSVJFRF9TWiwgQVJfUEhZX0RFU0lSRURfU1pfQURDLAotCQkgICAgICBwTW9kYWwtPmFkY0Rlc2lyZWRTaXplKTsKLQotCVJFR19XUklURShhaCwgQVJfUEhZX1JGX0NUTDQsCi0JCSAgU00ocE1vZGFsLT50eEVuZFRvWHBhT2ZmLCBBUl9QSFlfUkZfQ1RMNF9UWF9FTkRfWFBBQV9PRkYpIHwKLQkJICBTTShwTW9kYWwtPnR4RW5kVG9YcGFPZmYsIEFSX1BIWV9SRl9DVEw0X1RYX0VORF9YUEFCX09GRikgfAotCQkgIFNNKHBNb2RhbC0+dHhGcmFtZVRvWHBhT24sIEFSX1BIWV9SRl9DVEw0X0ZSQU1FX1hQQUFfT04pICB8Ci0JCSAgU00ocE1vZGFsLT50eEZyYW1lVG9YcGFPbiwgQVJfUEhZX1JGX0NUTDRfRlJBTUVfWFBBQl9PTikpOwotCi0JUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDMsIEFSX1BIWV9UWF9FTkRfVE9fQTJfUlhfT04sCi0JCSAgICAgIHBNb2RhbC0+dHhFbmRUb1J4T24pOwotCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9DQ0EsIEFSOTI4MF9QSFlfQ0NBX1RIUkVTSDYyLAotCQkgICAgICBwTW9kYWwtPnRocmVzaDYyKTsKLQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfRVhUX0NDQTAsIEFSX1BIWV9FWFRfQ0NBMF9USFJFU0g2MiwKLQkJICAgICAgcE1vZGFsLT50aHJlc2g2Mik7Ci0KLQlpZiAoKGVlcC0+YmFzZUVlcEhlYWRlci52ZXJzaW9uICYgQVI1NDE2X0VFUF9WRVJfTUlOT1JfTUFTSykgPj0KLQkJCQkJCUFSNTQxNl9FRVBfTUlOT1JfVkVSXzIpIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsIEFSX1BIWV9UWF9FTkRfREFUQV9TVEFSVCwKLQkJCSAgICAgIHBNb2RhbC0+dHhGcmFtZVRvRGF0YVN0YXJ0KTsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1JGX0NUTDIsIEFSX1BIWV9UWF9FTkRfUEFfT04sCi0JCQkgICAgICBwTW9kYWwtPnR4RnJhbWVUb1BhT24pOwotCX0KLQotCWlmICgoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKSA+PQotCQkJCQkJQVI1NDE2X0VFUF9NSU5PUl9WRVJfMykgewotCQlpZiAoSVNfQ0hBTl9IVDQwKGNoYW4pKQotCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NFVFRMSU5HLAotCQkJCSAgICAgIEFSX1BIWV9TRVRUTElOR19TV0lUQ0gsCi0JCQkJICAgICAgcE1vZGFsLT5zd1NldHRsZUh0NDApOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCAoKmF0aDlrX2VlcHJvbV9zZXRfYm9hcmRfdmFsdWVzW10pKHN0cnVjdCBhdGhfaGFsICosCi0JCQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqKSA9IHsKLQlhdGg5a19od19lZXByb21fc2V0X2RlZl9ib2FyZF92YWx1ZXMsCi0JYXRoOWtfaHdfZWVwcm9tX3NldF80a19ib2FyZF92YWx1ZXMKLX07Ci0KLWJvb2wgYXRoOWtfaHdfZWVwcm9tX3NldF9ib2FyZF92YWx1ZXMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfZWVwcm9tX3NldF9ib2FyZF92YWx1ZXNbYWhwLT5haF9lZXBfbWFwXShhaCwgY2hhbik7Ci19Ci0KLXN0YXRpYyBpbnQgYXRoOWtfaHdfZ2V0X2RlZl9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJCQkgICAgdTggaW5kZXgsIHUxNiAqY29uZmlnKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWhwLT5haF9lZXByb20uZGVmOwotCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQotCQkmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwotCi0Jc3dpdGNoIChpbmRleCkgewotCWNhc2UgMDoKLQkJKmNvbmZpZyA9IHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKLQkJcmV0dXJuIDA7CisJc3dpdGNoKGFyNTQxNl9nZXRfbnR4Y2hhaW5zKGFoLT50eGNoYWlubWFzaykpIHsKIAljYXNlIDE6Ci0JCWlmIChwQmFzZS0+dmVyc2lvbiA+PSAweDBFMEQpIHsKLQkJCWlmIChwTW9kYWwtPnVzZUFudDEpIHsKLQkJCQkqY29uZmlnID0KLQkJCQkoKHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjAwMDApID4+IDE2KTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQorCQlicmVhazsKKwljYXNlIDI6CisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCArPSBJTkNSRUFTRV9NQVhQT1dfQllfVFdPX0NIQUlOOworCQlicmVhazsKKwljYXNlIDM6CisJCWFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbCArPSBJTkNSRUFTRV9NQVhQT1dfQllfVEhSRUVfQ0hBSU47CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKKwkJCSJJbnZhbGlkIGNoYWlubWFzayBjb25maWd1cmF0aW9uXG4iKTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZ2V0XzRrX2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICB1OCBpbmRleCwgdTE2ICpjb25maWcpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayAqZWVwID0gJmFocC0+YWhfZWVwcm9tLm1hcDRrOwotCXN0cnVjdCBtb2RhbF9lZXBfNGtfaGVhZGVyICpwTW9kYWwgPSAmZWVwLT5tb2RhbEhlYWRlcjsKLQotCXN3aXRjaCAoaW5kZXgpIHsKLQljYXNlIDA6Ci0JCSpjb25maWcgPSBwTW9kYWwtPmFudEN0cmxDb21tb24gJiAweEZGRkY7Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50ICgqYXRoOWtfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZ1tdKShzdHJ1Y3QgYXRoX2hhbCAqLAotCQkJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICosCi0JCQkJCSAgICAgdTgsIHUxNiAqKSA9IHsKLQlhdGg5a19od19nZXRfZGVmX2VlcHJvbV9hbnRlbm5hX2NmZywKLQlhdGg5a19od19nZXRfNGtfZWVwcm9tX2FudGVubmFfY2ZnCi19OwotCi1pbnQgYXRoOWtfaHdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAotCQkJCSAgICB1OCBpbmRleCwgdTE2ICpjb25maWcpCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCXJldHVybiBhdGg5a19nZXRfZWVwcm9tX2FudGVubmFfY2ZnW2FocC0+YWhfZWVwX21hcF0oYWgsIGNoYW4sCi0JCQkJCQkJICAgICBpbmRleCwgY29uZmlnKTsKLX0KLQotc3RhdGljIHU4IGF0aDlrX2h3X2dldF80a19udW1fYW50X2NvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHU4IGF0aDlrX2h3X2dldF9kZWZfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHU4IGF0aDlrX2h3X2RlZl9nZXRfbnVtX2FudF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBmcmVxX2JhbmQpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7CisJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICplZXAgPSAmYWgtPmVlcHJvbS5kZWY7CiAJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9CiAJCSYoZWVwLT5tb2RhbEhlYWRlcltBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFogPT0gZnJlcV9iYW5kXSk7CiAJc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwpAQCAtMjY0NSwxODAgKzI3MzksNzUgQEAKIAlyZXR1cm4gbnVtX2FudF9jb25maWc7CiB9CiAKLXN0YXRpYyB1OCAoKmF0aDlrX2dldF9udW1fYW50X2NvbmZpZ1tdKShzdHJ1Y3QgYXRoX2hhbCAqLAotCQkJCQllbnVtIGllZWU4MDIxMV9iYW5kKSA9IHsKLQlhdGg5a19od19nZXRfZGVmX251bV9hbnRfY29uZmlnLAotCWF0aDlrX2h3X2dldF80a19udW1fYW50X2NvbmZpZwotfTsKLQotdTggYXRoOWtfaHdfZ2V0X251bV9hbnRfY29uZmlnKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGZyZXFfYmFuZCkKK3N0YXRpYyB1MTYgYXRoOWtfaHdfZGVmX2dldF9lZXByb21fYW50ZW5uYV9jZmcoc3RydWN0IGF0aF9odyAqYWgsCisJCQkJCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOworCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqZWVwID0gJmFoLT5lZXByb20uZGVmOworCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwTW9kYWwgPQorCQkmKGVlcC0+bW9kYWxIZWFkZXJbSVNfQ0hBTl8yR0haKGNoYW4pXSk7CiAKLQlyZXR1cm4gYXRoOWtfZ2V0X251bV9hbnRfY29uZmlnW2FocC0+YWhfZWVwX21hcF0oYWgsIGZyZXFfYmFuZCk7CisJcmV0dXJuIHBNb2RhbC0+YW50Q3RybENvbW1vbiAmIDB4RkZGRjsKIH0KIAotdTE2IGF0aDlrX2h3X2VlcHJvbV9nZXRfc3B1cl9jaGFuKHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KQorc3RhdGljIHUxNiBhdGg5a19od19kZWZfZ2V0X3NwdXJfY2hhbm5lbChzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGksIGJvb2wgaXMyR0h6KQogewotI2RlZmluZSBFRVBfTUFQNEtfU1BVUkNIQU4gXAotCShhaHAtPmFoX2VlcHJvbS5tYXA0ay5tb2RhbEhlYWRlci5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pCiAjZGVmaW5lIEVFUF9ERUZfU1BVUkNIQU4gXAotCShhaHAtPmFoX2VlcHJvbS5kZWYubW9kYWxIZWFkZXJbaXMyR0h6XS5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pCi0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwkoYWgtPmVlcHJvbS5kZWYubW9kYWxIZWFkZXJbaXMyR0h6XS5zcHVyQ2hhbnNbaV0uc3B1ckNoYW4pCisKIAl1MTYgc3B1cl92YWwgPSBBUl9OT19TUFVSOwogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAogCQkiR2V0dGluZyBzcHVyIGlkeCAlZCBpczJHaHouICVkIHZhbCAleFxuIiwKLQkJaSwgaXMyR0h6LCBhaC0+YWhfY29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdKTsKKwkJaSwgaXMyR0h6LCBhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVtpczJHSHpdKTsKIAotCXN3aXRjaCAoYWgtPmFoX2NvbmZpZy5zcHVybW9kZSkgeworCXN3aXRjaCAoYWgtPmNvbmZpZy5zcHVybW9kZSkgewogCWNhc2UgU1BVUl9ESVNBQkxFOgogCQlicmVhazsKIAljYXNlIFNQVVJfRU5BQkxFX0lPQ1RMOgotCQlzcHVyX3ZhbCA9IGFoLT5haF9jb25maWcuc3B1cmNoYW5zW2ldW2lzMkdIel07CisJCXNwdXJfdmFsID0gYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1baXMyR0h6XTsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5JLAogCQkJIkdldHRpbmcgc3B1ciB2YWwgZnJvbSBuZXcgbG9jLiAlZFxuIiwgc3B1cl92YWwpOwogCQlicmVhazsKIAljYXNlIFNQVVJfRU5BQkxFX0VFUFJPTToKLQkJaWYgKGFocC0+YWhfZWVwX21hcCA9PSBFRVBfTUFQXzRLQklUUykKLQkJCXNwdXJfdmFsID0gRUVQX01BUDRLX1NQVVJDSEFOOwotCQllbHNlCi0JCQlzcHVyX3ZhbCA9IEVFUF9ERUZfU1BVUkNIQU47CisJCXNwdXJfdmFsID0gRUVQX0RFRl9TUFVSQ0hBTjsKIAkJYnJlYWs7Ci0KIAl9CiAKIAlyZXR1cm4gc3B1cl92YWw7CisKICN1bmRlZiBFRVBfREVGX1NQVVJDSEFOCi0jdW5kZWYgRUVQX01BUDRLX1NQVVJDSEFOCiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfZ2V0X2VlcHJvbV80ayhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICBlbnVtIGVlcHJvbV9wYXJhbSBwYXJhbSkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrICplZXAgPSAmYWhwLT5haF9lZXByb20ubWFwNGs7Ci0Jc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgKnBNb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyOwotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgKnBCYXNlID0gJmVlcC0+YmFzZUVlcEhlYWRlcjsKLQotCXN3aXRjaCAocGFyYW0pIHsKLQljYXNlIEVFUF9ORlRIUkVTSF8yOgotCQlyZXR1cm4gcE1vZGFsWzFdLm5vaXNlRmxvb3JUaHJlc2hDaFswXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMCk6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkclswXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbMV07Ci0JY2FzZSBBUl9FRVBST01fTUFDKDEpOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbMl0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzNdOwotCWNhc2UgQVJfRUVQUk9NX01BQygyKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzRdIDw8IDggfCBwQmFzZS0+bWFjQWRkcls1XTsKLQljYXNlIEVFUF9SRUdfMDoKLQkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMF07Ci0JY2FzZSBFRVBfUkVHXzE6Ci0JCXJldHVybiBwQmFzZS0+cmVnRG1uWzFdOwotCWNhc2UgRUVQX09QX0NBUDoKLQkJcmV0dXJuIHBCYXNlLT5kZXZpY2VDYXA7Ci0JY2FzZSBFRVBfT1BfTU9ERToKLQkJcmV0dXJuIHBCYXNlLT5vcENhcEZsYWdzOwotCWNhc2UgRUVQX1JGX1NJTEVOVDoKLQkJcmV0dXJuIHBCYXNlLT5yZlNpbGVudDsKLQljYXNlIEVFUF9PQl8yOgotCQlyZXR1cm4gcE1vZGFsLT5vYl8wMTsKLQljYXNlIEVFUF9EQl8yOgotCQlyZXR1cm4gcE1vZGFsLT5kYjFfMDE7Ci0JY2FzZSBFRVBfTUlOT1JfUkVWOgotCQlyZXR1cm4gcEJhc2UtPnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLOwotCWNhc2UgRUVQX1RYX01BU0s6Ci0JCXJldHVybiBwQmFzZS0+dHhNYXNrOwotCWNhc2UgRUVQX1JYX01BU0s6Ci0JCXJldHVybiBwQmFzZS0+cnhNYXNrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHUzMiBhdGg5a19od19nZXRfZWVwcm9tX2RlZihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgZW51bSBlZXByb21fcGFyYW0gcGFyYW0pCi17Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaHAtPmFoX2VlcHJvbS5kZWY7Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgKnBNb2RhbCA9IGVlcC0+bW9kYWxIZWFkZXI7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlciAqcEJhc2UgPSAmZWVwLT5iYXNlRWVwSGVhZGVyOwotCi0Jc3dpdGNoIChwYXJhbSkgewotCWNhc2UgRUVQX05GVEhSRVNIXzU6Ci0JCXJldHVybiBwTW9kYWxbMF0ubm9pc2VGbG9vclRocmVzaENoWzBdOwotCWNhc2UgRUVQX05GVEhSRVNIXzI6Ci0JCXJldHVybiBwTW9kYWxbMV0ubm9pc2VGbG9vclRocmVzaENoWzBdOwotCWNhc2UgQVJfRUVQUk9NX01BQygwKToKLQkJcmV0dXJuIHBCYXNlLT5tYWNBZGRyWzBdIDw8IDggfCBwQmFzZS0+bWFjQWRkclsxXTsKLQljYXNlIEFSX0VFUFJPTV9NQUMoMSk6Ci0JCXJldHVybiBwQmFzZS0+bWFjQWRkclsyXSA8PCA4IHwgcEJhc2UtPm1hY0FkZHJbM107Ci0JY2FzZSBBUl9FRVBST01fTUFDKDIpOgotCQlyZXR1cm4gcEJhc2UtPm1hY0FkZHJbNF0gPDwgOCB8IHBCYXNlLT5tYWNBZGRyWzVdOwotCWNhc2UgRUVQX1JFR18wOgotCQlyZXR1cm4gcEJhc2UtPnJlZ0RtblswXTsKLQljYXNlIEVFUF9SRUdfMToKLQkJcmV0dXJuIHBCYXNlLT5yZWdEbW5bMV07Ci0JY2FzZSBFRVBfT1BfQ0FQOgotCQlyZXR1cm4gcEJhc2UtPmRldmljZUNhcDsKLQljYXNlIEVFUF9PUF9NT0RFOgotCQlyZXR1cm4gcEJhc2UtPm9wQ2FwRmxhZ3M7Ci0JY2FzZSBFRVBfUkZfU0lMRU5UOgotCQlyZXR1cm4gcEJhc2UtPnJmU2lsZW50OwotCWNhc2UgRUVQX09CXzU6Ci0JCXJldHVybiBwTW9kYWxbMF0ub2I7Ci0JY2FzZSBFRVBfREJfNToKLQkJcmV0dXJuIHBNb2RhbFswXS5kYjsKLQljYXNlIEVFUF9PQl8yOgotCQlyZXR1cm4gcE1vZGFsWzFdLm9iOwotCWNhc2UgRUVQX0RCXzI6Ci0JCXJldHVybiBwTW9kYWxbMV0uZGI7Ci0JY2FzZSBFRVBfTUlOT1JfUkVWOgotCQlyZXR1cm4gcEJhc2UtPnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLOwotCWNhc2UgRUVQX1RYX01BU0s6Ci0JCXJldHVybiBwQmFzZS0+dHhNYXNrOwotCWNhc2UgRUVQX1JYX01BU0s6Ci0JCXJldHVybiBwQmFzZS0+cnhNYXNrOwotCWNhc2UgRUVQX1JYR0FJTl9UWVBFOgotCQlyZXR1cm4gcEJhc2UtPnJ4R2FpblR5cGU7Ci0JY2FzZSBFRVBfVFhHQUlOX1RZUEU6Ci0JCXJldHVybiBwQmFzZS0+dHhHYWluVHlwZTsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHUzMiAoKmF0aDlrX2dldF9lZXByb21bXSkoc3RydWN0IGF0aF9oYWwgKiwgZW51bSBlZXByb21fcGFyYW0pID0gewotCWF0aDlrX2h3X2dldF9lZXByb21fZGVmLAotCWF0aDlrX2h3X2dldF9lZXByb21fNGsKK3N0YXRpYyBzdHJ1Y3QgZWVwcm9tX29wcyBlZXBfZGVmX29wcyA9IHsKKwkuY2hlY2tfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9jaGVja19lZXByb20sCisJLmdldF9lZXByb20JCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb20sCisJLmZpbGxfZWVwcm9tCQk9IGF0aDlrX2h3X2RlZl9maWxsX2VlcHJvbSwKKwkuZ2V0X2VlcHJvbV92ZXIJCT0gYXRoOWtfaHdfZGVmX2dldF9lZXByb21fdmVyLAorCS5nZXRfZWVwcm9tX3JldgkJPSBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9yZXYsCisJLmdldF9udW1fYW50X2NvbmZpZwk9IGF0aDlrX2h3X2RlZl9nZXRfbnVtX2FudF9jb25maWcsCisJLmdldF9lZXByb21fYW50ZW5uYV9jZmcJPSBhdGg5a19od19kZWZfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZywKKwkuc2V0X2JvYXJkX3ZhbHVlcwk9IGF0aDlrX2h3X2RlZl9zZXRfYm9hcmRfdmFsdWVzLAorCS5zZXRfYWRkYWMJCT0gYXRoOWtfaHdfZGVmX3NldF9hZGRhYywKKwkuc2V0X3R4cG93ZXIJCT0gYXRoOWtfaHdfZGVmX3NldF90eHBvd2VyLAorCS5nZXRfc3B1cl9jaGFubmVsCT0gYXRoOWtfaHdfZGVmX2dldF9zcHVyX2NoYW5uZWwKIH07CiAKLXUzMiBhdGg5a19od19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCWVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKQotewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlyZXR1cm4gYXRoOWtfZ2V0X2VlcHJvbVthaHAtPmFoX2VlcF9tYXBdKGFoLCBwYXJhbSk7Ci19Ci0KLWludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK2ludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBzdGF0dXM7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAotCWlmIChhdGg5a19od191c2VfZmxhc2goYWgpKQotCQlhdGg5a19od19mbGFzaF9tYXAoYWgpOworCWlmIChBUl9TUkVWXzkyODUoYWgpKSB7CisJCWFoLT5lZXBfbWFwID0gRUVQX01BUF80S0JJVFM7CisJCWFoLT5lZXBfb3BzID0gJmVlcF80a19vcHM7CisJfSBlbHNlIHsKKwkJYWgtPmVlcF9tYXAgPSBFRVBfTUFQX0RFRkFVTFQ7CisJCWFoLT5lZXBfb3BzID0gJmVlcF9kZWZfb3BzOworCX0KIAotCWlmIChBUl9TUkVWXzkyODUoYWgpKQotCQlhaHAtPmFoX2VlcF9tYXAgPSBFRVBfTUFQXzRLQklUUzsKLQllbHNlCi0JCWFocC0+YWhfZWVwX21hcCA9IEVFUF9NQVBfREVGQVVMVDsKLQotCWlmICghYXRoOWtfaHdfZmlsbF9lZXByb20oYWgpKQorCWlmICghYWgtPmVlcF9vcHMtPmZpbGxfZWVwcm9tKGFoKSkKIAkJcmV0dXJuIC1FSU87CiAKLQlzdGF0dXMgPSBhdGg5a19od19jaGVja19lZXByb20oYWgpOworCXN0YXR1cyA9IGFoLT5lZXBfb3BzLT5jaGVja19lZXByb20oYWgpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViNjhjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2VlcHJvbS5oCkBAIC0wLDAgKzEsNTA3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBFRVBST01fSAorI2RlZmluZSBFRVBST01fSAorCisjZGVmaW5lIEFIX1VTRV9FRVBST00gICAweDEKKworI2lmZGVmIF9fQklHX0VORElBTgorI2RlZmluZSBBUjU0MTZfRUVQUk9NX01BR0lDIDB4NWFhNQorI2Vsc2UKKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQyAweGE1NWEKKyNlbmRpZgorCisjZGVmaW5lIENUUllfREVCVUcgICAweDFmZgorI2RlZmluZQlDVFJZX0RFRkFVTFQgMAorCisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQ09NUFJFU1NfRElTICAgMHgwMDAxCisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQUVTX0RJUyAgICAgICAgMHgwMDAyCisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfRkFTVEZSQU1FX0RJUyAgMHgwMDA0CisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfQlVSU1RfRElTICAgICAgMHgwMDA4CisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfTUFYUUNVICAgICAgICAgMHgwMUYwCisjZGVmaW5lIEFSX0VFUFJPTV9FRVBDQVBfTUFYUUNVX1MgICAgICAgNAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0hFQVZZX0NMSVBfRU4gIDB4MDIwMAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0tDX0VOVFJJRVMgICAgIDB4RjAwMAorI2RlZmluZSBBUl9FRVBST01fRUVQQ0FQX0tDX0VOVFJJRVNfUyAgIDEyCisKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0ZDQ19NSURCQU5EICAgMHgwMDQwCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOICAgIDB4MDA4MAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTIgICAgICAgICAweDAxMDAKKyNkZWZpbmUgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX01JREJBTkQgICAgMHgwMjAwCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9PREQgICAgIDB4MDQwMAorI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQSAgICAweDA4MDAKKworI2RlZmluZSBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfT0REX1BSRTRfMCAgMHg0MDAwCisjZGVmaW5lIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19ORVdfMTFBX1BSRTRfMCAweDgwMDAKKworI2RlZmluZSBBUjU0MTZfRUVQUk9NX01BR0lDX09GRlNFVCAgMHgwCisjZGVmaW5lIEFSNTQxNl9FRVBST01fUyAgICAgICAgICAgICAyCisjZGVmaW5lIEFSNTQxNl9FRVBST01fT0ZGU0VUICAgICAgICAweDIwMDAKKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQVggICAgICAgICAgIDB4YWUwCisKKyNkZWZpbmUgQVI1NDE2X0VFUFJPTV9TVEFSVF9BRERSIFwKKwkoQVJfU1JFVl85MTAwKGFoKSkgPyAweDFmZmYxMDAwIDogMHg1MDNmMTIwMAorCisjZGVmaW5lIFNEX05PX0NUTCAgICAgICAgICAgICAgIDB4RTAKKyNkZWZpbmUgTk9fQ1RMICAgICAgICAgICAgICAgICAgMHhmZgorI2RlZmluZSBDVExfTU9ERV9NICAgICAgICAgICAgICA3CisjZGVmaW5lIENUTF8xMUEgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ1RMXzExQiAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBDVExfMTFHICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIENUTF8yR0hUMjAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ1RMXzVHSFQyMCAgICAgICAgICAgICAgNgorI2RlZmluZSBDVExfMkdIVDQwICAgICAgICAgICAgICA3CisjZGVmaW5lIENUTF81R0hUNDAgICAgICAgICAgICAgIDgKKworI2RlZmluZSBFWFRfQURESVRJVkUgKDB4ODAwMCkKKyNkZWZpbmUgQ1RMXzExQV9FWFQgKENUTF8xMUEgfCBFWFRfQURESVRJVkUpCisjZGVmaW5lIENUTF8xMUdfRVhUIChDVExfMTFHIHwgRVhUX0FERElUSVZFKQorI2RlZmluZSBDVExfMTFCX0VYVCAoQ1RMXzExQiB8IEVYVF9BRERJVElWRSkKKworI2RlZmluZSBTVUJfTlVNX0NUTF9NT0RFU19BVF81R180MCAyCisjZGVmaW5lIFNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwIDMKKworI2RlZmluZSBJTkNSRUFTRV9NQVhQT1dfQllfVFdPX0NIQUlOICAgICA2ICAvKiAxMCpsb2cxMCgyKSoyICovCisjZGVmaW5lIElOQ1JFQVNFX01BWFBPV19CWV9USFJFRV9DSEFJTiAgIDEwIC8qIDEwKmxvZzEwKDMpKjIgKi8KKworLyoKKyAqIEZvciBBUjkyODUgYW5kIGxhdGVyIGNoaXBzZXRzLCB0aGUgZm9sbG93aW5nIGJpdHMgYXJlIG5vdCBiZWluZyBwcm9ncmFtbWVkCisgKiBpbiBFRVBST00gYW5kIHNvIG5lZWQgdG8gYmUgZW5hYmxlZCBhbHdheXMuCisgKgorICogQml0IDA6IGVuX2ZjY19taWQKKyAqIEJpdCAxOiBlbl9qYXBfbWlkCisgKiBCaXQgMjogZW5fZmNjX2Rmc19odDQwCisgKiBCaXQgMzogZW5famFwX2h0NDAKKyAqIEJpdCA0OiBlbl9qYXBfZGZzX2h0NDAKKyAqLworI2RlZmluZSBBUjkyODVfUkRFWFRfREVGQVVMVCAgICAweDFGCisKKyNkZWZpbmUgQVJfRUVQUk9NX01BQyhpKQkoMHgxZCsoaSkpCisjZGVmaW5lIEFUSDlLX1BPV19TTShfciwgX3MpCSgoKF9yKSAmIDB4M2YpIDw8IChfcykpCisjZGVmaW5lIEZSRVEyRkJJTih4LCB5KQkJKCh5KSA/ICgoeCkgLSAyMzAwKSA6ICgoKHgpIC0gNDgwMCkgLyA1KSkKKyNkZWZpbmUgYXRoOWtfaHdfdXNlX2ZsYXNoKF9haCkJKCEoX2FoLT5haF9mbGFncyAmIEFIX1VTRV9FRVBST00pKQorCisjZGVmaW5lIEFSNTQxNl9WRVJfTUFTSyAoZWVwLT5iYXNlRWVwSGVhZGVyLnZlcnNpb24gJiBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLKQorI2RlZmluZSBPTENfRk9SX0FSOTI4MF8yMF9MQVRFUiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJiBcCisJCQkJIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT0xfUFdSQ1RSTCkpCisKKyNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMICAgICAweDAwMWMKKyNkZWZpbmUgQVJfRUVQUk9NX1JGU0lMRU5UX0dQSU9fU0VMX1MgICAyCisjZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWSAgICAgMHgwMDAyCisjZGVmaW5lIEFSX0VFUFJPTV9SRlNJTEVOVF9QT0xBUklUWV9TICAgMQorCisjZGVmaW5lIEVFUF9SRlNJTEVOVF9FTkFCTEVEICAgICAgICAweDAwMDEKKyNkZWZpbmUgRUVQX1JGU0lMRU5UX0VOQUJMRURfUyAgICAgIDAKKyNkZWZpbmUgRUVQX1JGU0lMRU5UX1BPTEFSSVRZICAgICAgIDB4MDAwMgorI2RlZmluZSBFRVBfUkZTSUxFTlRfUE9MQVJJVFlfUyAgICAgMQorI2RlZmluZSBFRVBfUkZTSUxFTlRfR1BJT19TRUwgICAgICAgMHgwMDFjCisjZGVmaW5lIEVFUF9SRlNJTEVOVF9HUElPX1NFTF9TICAgICAyCisKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfMTFBICAgICAgICAgICAweDAxCisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTXzExRyAgICAgICAgICAgMHgwMgorI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzVHX0hUNDAgICAgIDB4MDQKKyNkZWZpbmUgQVI1NDE2X09QRkxBR1NfTl8yR19IVDQwICAgICAweDA4CisjZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fNUdfSFQyMCAgICAgMHgxMAorI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjAgICAgIDB4MjAKKworI2RlZmluZSBBUjU0MTZfRUVQX05PX0JBQ0tfVkVSICAgICAgIDB4MQorI2RlZmluZSBBUjU0MTZfRUVQX1ZFUiAgICAgICAgICAgICAgIDB4RQorI2RlZmluZSBBUjU0MTZfRUVQX1ZFUl9NSU5PUl9NQVNLICAgIDB4MEZGRgorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yICAgICAgIDB4MgorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8zICAgICAgIDB4MworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl83ICAgICAgIDB4NworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl85ICAgICAgIDB4OQorI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xNiAgICAgIDB4MTAKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTcgICAgICAweDExCisjZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE5ICAgICAgMHgxMworI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yMCAgICAgIDB4MTQKKyNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMjIgICAgICAweDE2CisKKyNkZWZpbmUgQVI1NDE2X05VTV81R19DQUxfUElFUlMgICAgICAgICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMgIDgKKyNkZWZpbmUgQVI1NDE2X05VTV81R180MF9UQVJHRVRfUE9XRVJTICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMworI2RlZmluZSBBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDQKKyNkZWZpbmUgQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTICA0CisjZGVmaW5lIEFSNTQxNl9OVU1fQ1RMUyAgICAgICAgICAgICAgICAgMjQKKyNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTICAgICAgICAgICA4CisjZGVmaW5lIEFSNTQxNl9OVU1fUERfR0FJTlMgICAgICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAgICAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X1BEX0dBSU5fSUNFUFRTICAgICAgICAgICA1CisjZGVmaW5lIEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlMgICAgICAgNQorI2RlZmluZSBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgICAgICAgICAgIDYzCisjZGVmaW5lIEFSNTQxNl9OVU1fUERBRENfVkFMVUVTICAgICAgICAgMTI4CisjZGVmaW5lIEFSNTQxNl9CQ0hBTl9VTlVTRUQgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCIDY0CisjZGVmaW5lIEFSNTQxNl9NQVhfQ0hBSU5TICAgICAgICAgICAgICAgMworI2RlZmluZSBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAgICAgICAgIC01CisKKy8qIFJ4IGdhaW4gdHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQVI1NDE2X0VFUF9SWEdBSU5fMjNEQl9CQUNLT0ZGICAgICAwCisjZGVmaW5lIEFSNTQxNl9FRVBfUlhHQUlOXzEzREJfQkFDS09GRiAgICAgMQorI2RlZmluZSBBUjU0MTZfRUVQX1JYR0FJTl9PUklHICAgICAgICAgICAgIDIKKworLyogVHggZ2FpbiB0eXBlIHZhbHVlcyAqLworI2RlZmluZSBBUjU0MTZfRUVQX1RYR0FJTl9PUklHSU5BTCAgICAgICAgIDAKKyNkZWZpbmUgQVI1NDE2X0VFUF9UWEdBSU5fSElHSF9QT1dFUiAgICAgICAxCisKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX1NUQVJUX0xPQyAgICAgICAgICAgICAgICA2NAorI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSUyAgICAgICAgIDMKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSUyAzCisjZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfMjBfVEFSR0VUX1BPV0VSUyAgMworI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHXzQwX1RBUkdFVF9QT1dFUlMgIDMKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV9DVExTICAgICAgICAgICAgICAgICAxMgorI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX0JBTkRfRURHRVMgICAgICAgICAgIDQKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV9QRF9HQUlOUyAgICAgICAgICAgICAyCisjZGVmaW5lIEFSNTQxNl9FRVA0S19QRF9HQUlOU19JTl9NQVNLICAgICAgICAgNAorI2RlZmluZSBBUjU0MTZfRUVQNEtfUERfR0FJTl9JQ0VQVFMgICAgICAgICAgIDUKKyNkZWZpbmUgQVI1NDE2X0VFUDRLX01BWF9DSEFJTlMgICAgICAgICAgICAgICAxCisKKyNkZWZpbmUgQVI5MjgwX1RYX0dBSU5fVEFCTEVfU0laRSAyMgorCitlbnVtIGVlcHJvbV9wYXJhbSB7CisJRUVQX05GVEhSRVNIXzUsCisJRUVQX05GVEhSRVNIXzIsCisJRUVQX01BQ19NU1csCisJRUVQX01BQ19NSUQsCisJRUVQX01BQ19MU1csCisJRUVQX1JFR18wLAorCUVFUF9SRUdfMSwKKwlFRVBfT1BfQ0FQLAorCUVFUF9PUF9NT0RFLAorCUVFUF9SRl9TSUxFTlQsCisJRUVQX09CXzUsCisJRUVQX0RCXzUsCisJRUVQX09CXzIsCisJRUVQX0RCXzIsCisJRUVQX01JTk9SX1JFViwKKwlFRVBfVFhfTUFTSywKKwlFRVBfUlhfTUFTSywKKwlFRVBfUlhHQUlOX1RZUEUsCisJRUVQX1RYR0FJTl9UWVBFLAorCUVFUF9PTF9QV1JDVFJMLAorCUVFUF9SQ19DSEFJTl9NQVNLLAorCUVFUF9EQUNfSFBXUl81RywKKwlFRVBfRlJBQ19OXzVHCit9OworCitlbnVtIGFyNTQxNl9yYXRlcyB7CisJcmF0ZTZtYiwgcmF0ZTltYiwgcmF0ZTEybWIsIHJhdGUxOG1iLAorCXJhdGUyNG1iLCByYXRlMzZtYiwgcmF0ZTQ4bWIsIHJhdGU1NG1iLAorCXJhdGUxbCwgcmF0ZTJsLCByYXRlMnMsIHJhdGU1XzVsLAorCXJhdGU1XzVzLCByYXRlMTFsLCByYXRlMTFzLCByYXRlWHIsCisJcmF0ZUh0MjBfMCwgcmF0ZUh0MjBfMSwgcmF0ZUh0MjBfMiwgcmF0ZUh0MjBfMywKKwlyYXRlSHQyMF80LCByYXRlSHQyMF81LCByYXRlSHQyMF82LCByYXRlSHQyMF83LAorCXJhdGVIdDQwXzAsIHJhdGVIdDQwXzEsIHJhdGVIdDQwXzIsIHJhdGVIdDQwXzMsCisJcmF0ZUh0NDBfNCwgcmF0ZUh0NDBfNSwgcmF0ZUh0NDBfNiwgcmF0ZUh0NDBfNywKKwlyYXRlRHVwQ2NrLCByYXRlRHVwT2ZkbSwgcmF0ZUV4dENjaywgcmF0ZUV4dE9mZG0sCisJQXI1NDE2UmF0ZVNpemUKK307CisKK2VudW0gYXRoOWtfaGFsX2ZyZXFfYmFuZCB7CisJQVRIOUtfSEFMX0ZSRVFfQkFORF81R0haID0gMCwKKwlBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFogPSAxCit9OworCitzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyIHsKKwl1MTYgbGVuZ3RoOworCXUxNiBjaGVja3N1bTsKKwl1MTYgdmVyc2lvbjsKKwl1OCBvcENhcEZsYWdzOworCXU4IGVlcE1pc2M7CisJdTE2IHJlZ0RtblsyXTsKKwl1OCBtYWNBZGRyWzZdOworCXU4IHJ4TWFzazsKKwl1OCB0eE1hc2s7CisJdTE2IHJmU2lsZW50OworCXUxNiBibHVlVG9vdGhPcHRpb25zOworCXUxNiBkZXZpY2VDYXA7CisJdTMyIGJpbkJ1aWxkTnVtYmVyOworCXU4IGRldmljZVR5cGU7CisJdTggcHdkY2xraW5kOworCXU4IGZ1dHVyZUJhc2VfMVsyXTsKKwl1OCByeEdhaW5UeXBlOworCXU4IGRhY0hpUHdyTW9kZV81RzsKKwl1OCBvcGVuTG9vcFB3ckNudGw7CisJdTggZGFjTHBNb2RlOworCXU4IHR4R2FpblR5cGU7CisJdTggcmNDaGFpbk1hc2s7CisJdTggZGVzaXJlZFNjYWxlQ0NLOworCXU4IHBvd2VyX3RhYmxlX29mZnNldDsKKwl1OCBmcmFjX25fNWc7CisJdTggZnV0dXJlQmFzZV8zWzIxXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgeworCXUxNiBsZW5ndGg7CisJdTE2IGNoZWNrc3VtOworCXUxNiB2ZXJzaW9uOworCXU4IG9wQ2FwRmxhZ3M7CisJdTggZWVwTWlzYzsKKwl1MTYgcmVnRG1uWzJdOworCXU4IG1hY0FkZHJbNl07CisJdTggcnhNYXNrOworCXU4IHR4TWFzazsKKwl1MTYgcmZTaWxlbnQ7CisJdTE2IGJsdWVUb290aE9wdGlvbnM7CisJdTE2IGRldmljZUNhcDsKKwl1MzIgYmluQnVpbGROdW1iZXI7CisJdTggZGV2aWNlVHlwZTsKKwl1OCB0eEdhaW5UeXBlOworfSBfX3BhY2tlZDsKKworCitzdHJ1Y3Qgc3B1cl9jaGFuIHsKKwl1MTYgc3B1ckNoYW47CisJdTggc3B1clJhbmdlTG93OworCXU4IHNwdXJSYW5nZUhpZ2g7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciB7CisJdTMyIGFudEN0cmxDaGFpbltBUjU0MTZfTUFYX0NIQUlOU107CisJdTMyIGFudEN0cmxDb21tb247CisJdTggYW50ZW5uYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggc3dpdGNoU2V0dGxpbmc7CisJdTggdHhSeEF0dGVuQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHJ4VHhNYXJnaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggYWRjRGVzaXJlZFNpemU7CisJdTggcGdhRGVzaXJlZFNpemU7CisJdTggeGxuYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggdHhFbmRUb1hwYU9mZjsKKwl1OCB0eEVuZFRvUnhPbjsKKwl1OCB0eEZyYW1lVG9YcGFPbjsKKwl1OCB0aHJlc2g2MjsKKwl1OCBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHhwZEdhaW47CisJdTggeHBkOworCXU4IGlxQ2FsSUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCBpcUNhbFFDaFtBUjU0MTZfTUFYX0NIQUlOU107CisJdTggcGRHYWluT3ZlcmxhcDsKKwl1OCBvYjsKKwl1OCBkYjsKKwl1OCB4cGFCaWFzTHZsOworCXU4IHB3ckRlY3JlYXNlRm9yMkNoYWluOworCXU4IHB3ckRlY3JlYXNlRm9yM0NoYWluOworCXU4IHR4RnJhbWVUb0RhdGFTdGFydDsKKwl1OCB0eEZyYW1lVG9QYU9uOworCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjOworCXU4IGJzd0F0dGVuW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl1OCBic3dNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHN3U2V0dGxlSHQ0MDsKKwl1OCB4YXR0ZW4yRGJbQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IHhhdHRlbjJNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOworCXU4IG9iX2NoMTsKKwl1OCBkYl9jaDE7CisJdTggdXNlQW50MToxLAorCSAgICBmb3JjZV94cGFvbjoxLAorCSAgICBsb2NhbF9iaWFzOjEsCisJICAgIGZlbUJhbmRTZWxlY3RVc2VkOjEsIHhsbmFidWZpbjoxLCB4bG5haXNlbDoyLCB4bG5hYnVmbW9kZToxOworCXU4IG1pc2NCaXRzOworCXUxNiB4cGFCaWFzTHZsRnJlcVszXTsKKwl1OCBmdXR1cmVNb2RhbFs2XTsKKworCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSNTQxNl9FRVBST01fTU9EQUxfU1BVUlNdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNhbERhdGFQZXJGcmVxT3BMb29wIHsKKwl1OCBwd3JQZGdbMl1bNV07CisJdTggdnBkUGRnWzJdWzVdOworCXU4IHBjZGFjWzJdWzVdOworCXU4IGVtcHR5WzJdWzVdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgeworCXUzMiAgYW50Q3RybENoYWluW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1MzIgIGFudEN0cmxDb21tb247CisJdTggICBhbnRlbm5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHN3aXRjaFNldHRsaW5nOworCXU4ICAgdHhSeEF0dGVuQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgcnhUeE1hcmdpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIGFkY0Rlc2lyZWRTaXplOworCXU4ICAgcGdhRGVzaXJlZFNpemU7CisJdTggICB4bG5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHR4RW5kVG9YcGFPZmY7CisJdTggICB0eEVuZFRvUnhPbjsKKwl1OCAgIHR4RnJhbWVUb1hwYU9uOworCXU4ICAgdGhyZXNoNjI7CisJdTggICBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgeHBkR2FpbjsKKwl1OCAgIHhwZDsKKwl1OCAgIGlxQ2FsSUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIGlxQ2FsUUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHBkR2Fpbk92ZXJsYXA7CisJdTggICBvYl8wMTsKKwl1OCAgIGRiMV8wMTsKKwl1OCAgIHhwYUJpYXNMdmw7CisJdTggICB0eEZyYW1lVG9EYXRhU3RhcnQ7CisJdTggICB0eEZyYW1lVG9QYU9uOworCXU4ICAgaHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJdTggICBic3dBdHRlbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107CisJdTggICBic3dNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgc3dTZXR0bGVIdDQwOworCXU4ICAgeGF0dGVuMkRiW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKKwl1OCAgIHhhdHRlbjJNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOworCXU4ICAgZGIyXzAxOworCXU4ICAgdmVyc2lvbjsKKwl1MTYgIG9iXzIzNDsKKwl1MTYgIGRiMV8yMzQ7CisJdTE2ICBkYjJfMjM0OworCXU4ICAgZnV0dXJlTW9kYWxbNF07CisKKwlzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTXTsKK30gX19wYWNrZWQ7CisKKworc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxIHsKKwl1OCBwd3JQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKKwl1OCB2cGRQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayB7CisJdTggcHdyUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107CisJdTggdnBkUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgeworCXU4IGJDaGFubmVsOworCXU4IHRQb3cyeFs0XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHsKKwl1OCBiQ2hhbm5lbDsKKwl1OCB0UG93MnhbOF07Cit9IF9fcGFja2VkOworCisKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKK3N0cnVjdCBjYWxfY3RsX2VkZ2VzIHsKKwl1OCBiQ2hhbm5lbDsKKwl1OCBmbGFnOjIsIHRQb3dlcjo2OworfSBfX3BhY2tlZDsKKyNlbHNlCitzdHJ1Y3QgY2FsX2N0bF9lZGdlcyB7CisJdTggYkNoYW5uZWw7CisJdTggdFBvd2VyOjYsIGZsYWc6MjsKK30gX19wYWNrZWQ7CisjZW5kaWYKKworc3RydWN0IGNhbF9jdGxfZGF0YSB7CisJc3RydWN0IGNhbF9jdGxfZWRnZXMKKwljdGxFZGdlc1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV9CQU5EX0VER0VTXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjYWxfY3RsX2RhdGFfNGsgeworCXN0cnVjdCBjYWxfY3RsX2VkZ2VzCisJY3RsRWRnZXNbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdW0FSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFU107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgeworCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgYmFzZUVlcEhlYWRlcjsKKwl1OCBjdXN0RGF0YVs2NF07CisJc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgbW9kYWxIZWFkZXJbMl07CisJdTggY2FsRnJlcVBpZXI1R1tBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU107CisJdTggY2FsRnJlcVBpZXIyR1tBUjU0MTZfTlVNXzJHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxCisJIGNhbFBpZXJEYXRhNUdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEKKwkgY2FsUGllckRhdGEyR1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZworCSBjYWxUYXJnZXRQb3dlcjVHW0FSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKKwkgY2FsVGFyZ2V0UG93ZXI1R0hUMjBbQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCSBjYWxUYXJnZXRQb3dlcjVHSFQ0MFtBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZworCSBjYWxUYXJnZXRQb3dlckNja1tBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKKwkgY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJIGNhbFRhcmdldFBvd2VyMkdIVDIwW0FSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKKwkgY2FsVGFyZ2V0UG93ZXIyR0hUNDBbQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTXTsKKwl1OCBjdGxJbmRleFtBUjU0MTZfTlVNX0NUTFNdOworCXN0cnVjdCBjYWxfY3RsX2RhdGEgY3RsRGF0YVtBUjU0MTZfTlVNX0NUTFNdOworCXU4IHBhZGRpbmc7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayB7CisJc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayBiYXNlRWVwSGVhZGVyOworCXU4IGN1c3REYXRhWzIwXTsKKwlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciBtb2RhbEhlYWRlcjsKKwl1OCBjYWxGcmVxUGllcjJHW0FSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTXTsKKwlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsKKwljYWxQaWVyRGF0YTJHW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXVtBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXJDY2tbQVI1NDE2X0VFUDRLX05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSU107CisJc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCisJY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOworCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0CisJY2FsVGFyZ2V0UG93ZXIyR0hUMjBbQVI1NDE2X0VFUDRLX05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKKwlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAorCWNhbFRhcmdldFBvd2VyMkdIVDQwW0FSNTQxNl9FRVA0S19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSU107CisJdTggY3RsSW5kZXhbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKKwlzdHJ1Y3QgY2FsX2N0bF9kYXRhXzRrIGN0bERhdGFbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKKwl1OCBwYWRkaW5nOworfSBfX3BhY2tlZDsKKworZW51bSByZWdfZXh0X2JpdG1hcCB7CisJUkVHX0VYVF9KQVBBTl9NSURCQU5EID0gMSwKKwlSRUdfRVhUX0ZDQ19ERlNfSFQ0MCA9IDIsCisJUkVHX0VYVF9KQVBBTl9OT05ERlNfSFQ0MCA9IDMsCisJUkVHX0VYVF9KQVBBTl9ERlNfSFQ0MCA9IDQKK307CisKK3N0cnVjdCBhdGg5a19jb3VudHJ5X2VudHJ5IHsKKwl1MTYgY291bnRyeUNvZGU7CisJdTE2IHJlZ0RtbkVudW07CisJdTE2IHJlZ0RtbjVHOworCXUxNiByZWdEbW4yRzsKKwl1OCBpc011bHRpZG9tYWluOworCXU4IGlzb1szXTsKK307CisKK2VudW0gYXRoOWtfZWVwX21hcCB7CisJRUVQX01BUF9ERUZBVUxUID0gMHgwLAorCUVFUF9NQVBfNEtCSVRTLAorCUVFUF9NQVBfTUFYCit9OworCitzdHJ1Y3QgZWVwcm9tX29wcyB7CisJaW50ICgqY2hlY2tfZWVwcm9tKShzdHJ1Y3QgYXRoX2h3ICpodyk7CisJdTMyICgqZ2V0X2VlcHJvbSkoc3RydWN0IGF0aF9odyAqaHcsIGVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKTsKKwlib29sICgqZmlsbF9lZXByb20pKHN0cnVjdCBhdGhfaHcgKmh3KTsKKwlpbnQgKCpnZXRfZWVwcm9tX3Zlcikoc3RydWN0IGF0aF9odyAqaHcpOworCWludCAoKmdldF9lZXByb21fcmV2KShzdHJ1Y3QgYXRoX2h3ICpodyk7CisJdTggKCpnZXRfbnVtX2FudF9jb25maWcpKHN0cnVjdCBhdGhfaHcgKmh3LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOworCXUxNiAoKmdldF9lZXByb21fYW50ZW5uYV9jZmcpKHN0cnVjdCBhdGhfaHcgKmh3LAorCQkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKKwl2b2lkICgqc2V0X2JvYXJkX3ZhbHVlcykoc3RydWN0IGF0aF9odyAqaHcsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKKwl2b2lkICgqc2V0X2FkZGFjKShzdHJ1Y3QgYXRoX2h3ICpodywgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworCWludCAoKnNldF90eHBvd2VyKShzdHJ1Y3QgYXRoX2h3ICpodywgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkgICB1MTYgY2ZnQ3RsLCB1OCB0d2ljZUFudGVubmFSZWR1Y3Rpb24sCisJCQkgICB1OCB0d2ljZU1heFJlZ3VsYXRvcnlQb3dlciwgdTggcG93ZXJMaW1pdCk7CisJdTE2ICgqZ2V0X3NwdXJfY2hhbm5lbCkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBpLCBib29sIGlzMkdIeik7Cit9OworCisjZGVmaW5lIGFyNTQxNl9nZXRfbnR4Y2hhaW5zKF90eGNoYWlubWFzaykJCQlcCisJKCgoX3R4Y2hhaW5tYXNrID4+IDIpICYgMSkgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICgoX3R4Y2hhaW5tYXNrID4+IDEpICYgMSkgKyAoX3R4Y2hhaW5tYXNrICYgMSkpCisKK2ludCBhdGg5a19od19lZXByb21fYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKKworI2VuZGlmIC8qIEVFUFJPTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuYwppbmRleCAzNDQ3NGVkLi5iMTVlYWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNyw4OCArMTcsODAgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJody5oIgotI2luY2x1ZGUgInJlZy5oIgotI2luY2x1ZGUgInBoeS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCiAjaW5jbHVkZSAiaW5pdHZhbHMuaCIKIAotc3RhdGljIGNvbnN0IHU4IENMT0NLX1JBVEVbXSA9IHsgNDAsIDgwLCAyMiwgNDQsIDg4LCA0MCB9Oworc3RhdGljIGludCBidGNvZXhfZW5hYmxlOworbW9kdWxlX3BhcmFtKGJ0Y29leF9lbmFibGUsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhidGNvZXhfZW5hYmxlLCAiRW5hYmxlIEJsdWV0b290aCBjb2V4aXN0ZW5jZSBzdXBwb3J0Iik7CiAKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGlxX2NhbF9tdWx0aV9zYW1wbGU7Ci1leHRlcm4gc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBpcV9jYWxfc2luZ2xlX3NhbXBsZTsKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19nYWluX2NhbF9tdWx0aV9zYW1wbGU7Ci1leHRlcm4gc3RydWN0IGhhbF9wZXJjYWxfZGF0YSBhZGNfZ2Fpbl9jYWxfc2luZ2xlX3NhbXBsZTsKLWV4dGVybiBzdHJ1Y3QgaGFsX3BlcmNhbF9kYXRhIGFkY19kY19jYWxfbXVsdGlfc2FtcGxlOwotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2RjX2NhbF9zaW5nbGVfc2FtcGxlOwotZXh0ZXJuIHN0cnVjdCBoYWxfcGVyY2FsX2RhdGEgYWRjX2luaXRfZGNfY2FsOworI2RlZmluZSBBVEg5S19DTE9DS19SQVRFX0NDSwkJMjIKKyNkZWZpbmUgQVRIOUtfQ0xPQ0tfUkFURV81R0haX09GRE0JNDAKKyNkZWZpbmUgQVRIOUtfQ0xPQ0tfUkFURV8yR0haX09GRE0JNDQKIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB0eXBlKTsKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9yZWdzKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfcmVzZXRfcmVnKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdHlwZSk7CitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkgICAgICBlbnVtIGF0aDlrX2h0X21hY21vZGUgbWFjbW9kZSk7Ci1zdGF0aWMgdTMyIGF0aDlrX2h3X2luaV9maXh1cChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdTMyIGF0aDlrX2h3X2luaV9maXh1cChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIHN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiAqcEVlcERhdGEsCiAJCQkgICAgICB1MzIgcmVnLCB1MzIgdmFsdWUpOwotc3RhdGljIHZvaWQgYXRoOWtfaHdfOTI4MF9zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwotc3RhdGljIHZvaWQgYXRoOWtfaHdfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKK3N0YXRpYyB2b2lkIGF0aDlrX2h3XzkyODBfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworc3RhdGljIHZvaWQgYXRoOWtfaHdfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwogCiAvKioqKioqKioqKioqKioqKioqKiovCiAvKiBIZWxwZXIgRnVuY3Rpb25zICovCiAvKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3VzZWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgY2xrcykKK3N0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3VzZWMoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBjbGtzKQogewotCWlmIChhaC0+YWhfY3VyY2hhbiAhPSBOVUxMKQotCQlyZXR1cm4gY2xrcyAvIENMT0NLX1JBVEVbYXRoOWtfaHdfY2hhbjJ3bW9kZShhaCwgYWgtPmFoX2N1cmNoYW4pXTsKLQllbHNlCi0JCXJldHVybiBjbGtzIC8gQ0xPQ0tfUkFURVtBVEg5S19NT0RFXzExQl07CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmFoLT5haF9zYy0+aHctPmNvbmY7CisKKwlpZiAoIWFoLT5jdXJjaGFuKSAvKiBzaG91bGQgcmVhbGx5IGNoZWNrIGZvciBDQ0sgaW5zdGVhZCAqLworCQlyZXR1cm4gY2xrcyAvIEFUSDlLX0NMT0NLX1JBVEVfQ0NLOworCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCXJldHVybiBjbGtzIC8gQVRIOUtfQ0xPQ0tfUkFURV8yR0haX09GRE07CisKKwlyZXR1cm4gY2xrcyAvIEFUSDlLX0NMT0NLX1JBVEVfNUdIWl9PRkRNOwogfQogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X21hY190b191c2VjKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGNsa3MpCitzdGF0aWMgdTMyIGF0aDlrX2h3X21hY190b191c2VjKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgY2xrcykKIHsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5haF9jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOwogCi0JaWYgKGNoYW4gJiYgSVNfQ0hBTl9IVDQwKGNoYW4pKQorCWlmIChjb25mX2lzX2h0NDAoY29uZikpCiAJCXJldHVybiBhdGg5a19od19tYWNfdXNlYyhhaCwgY2xrcykgLyAyOwogCWVsc2UKIAkJcmV0dXJuIGF0aDlrX2h3X21hY191c2VjKGFoLCBjbGtzKTsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19tYWNfY2xrcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB1c2VjcykKK3N0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX2Nsa3Moc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1c2VjcykKIHsKLQlpZiAoYWgtPmFoX2N1cmNoYW4gIT0gTlVMTCkKLQkJcmV0dXJuIHVzZWNzICogQ0xPQ0tfUkFURVthdGg5a19od19jaGFuMndtb2RlKGFoLAotCQkJYWgtPmFoX2N1cmNoYW4pXTsKLQllbHNlCi0JCXJldHVybiB1c2VjcyAqIENMT0NLX1JBVEVbQVRIOUtfTU9ERV8xMUJdOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZhaC0+YWhfc2MtPmh3LT5jb25mOworCisJaWYgKCFhaC0+Y3VyY2hhbikgLyogc2hvdWxkIHJlYWxseSBjaGVjayBmb3IgQ0NLIGluc3RlYWQgKi8KKwkJcmV0dXJuIHVzZWNzICpBVEg5S19DTE9DS19SQVRFX0NDSzsKKwlpZiAoY29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlyZXR1cm4gdXNlY3MgKkFUSDlLX0NMT0NLX1JBVEVfMkdIWl9PRkRNOworCXJldHVybiB1c2VjcyAqQVRIOUtfQ0xPQ0tfUkFURV81R0haX09GRE07CiB9CiAKLXN0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX3RvX2Nsa3Moc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXNlY3MpCitzdGF0aWMgdTMyIGF0aDlrX2h3X21hY190b19jbGtzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXNlY3MpCiB7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYWgtPmFoX3NjLT5ody0+Y29uZjsKIAotCWlmIChjaGFuICYmIElTX0NIQU5fSFQ0MChjaGFuKSkKKwlpZiAoY29uZl9pc19odDQwKGNvbmYpKQogCQlyZXR1cm4gYXRoOWtfaHdfbWFjX2Nsa3MoYWgsIHVzZWNzKSAqIDI7CiAJZWxzZQogCQlyZXR1cm4gYXRoOWtfaHdfbWFjX2Nsa3MoYWgsIHVzZWNzKTsKIH0KIAotZW51bSB3aXJlbGVzc19tb2RlIGF0aDlrX2h3X2NoYW4yd21vZGUoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCWlmIChJU19DSEFOX0IoY2hhbikpCi0JCXJldHVybiBBVEg5S19NT0RFXzExQjsKLQlpZiAoSVNfQ0hBTl9HKGNoYW4pKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMUc7Ci0KLQlyZXR1cm4gQVRIOUtfTU9ERV8xMUE7Ci19Ci0KLWJvb2wgYXRoOWtfaHdfd2FpdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsKQorYm9vbCBhdGg5a19od193YWl0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbCwgdTMyIHRpbWVvdXQpCiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgKEFIX1RJTUVPVVQgLyBBSF9USU1FX1FVQU5UVU0pOyBpKyspIHsKKwlCVUdfT04odGltZW91dCA8IEFIX1RJTUVfUVVBTlRVTSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgKHRpbWVvdXQgLyBBSF9USU1FX1FVQU5UVU0pOyBpKyspIHsKIAkJaWYgKChSRUdfUkVBRChhaCwgcmVnKSAmIG1hc2spID09IHZhbCkKIAkJCXJldHVybiB0cnVlOwogCkBAIC0xMDYsOCArOTgsOCBAQAogCX0KIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR19JTywKLQkJInRpbWVvdXQgb24gcmVnIDB4JXg6IDB4JTA4eCAmIDB4JTA4eCAhPSAweCUwOHhcbiIsCi0JCXJlZywgUkVHX1JFQUQoYWgsIHJlZyksIG1hc2ssIHZhbCk7CisJCSJ0aW1lb3V0ICglZCB1cykgb24gcmVnIDB4JXg6IDB4JTA4eCAmIDB4JTA4eCAhPSAweCUwOHhcbiIsCisJCXRpbWVvdXQsIHJlZywgUkVHX1JFQUQoYWgsIHJlZyksIG1hc2ssIHZhbCk7CiAKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xMjQsMTEgKzExNiwxMSBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLWJvb2wgYXRoOWtfZ2V0X2NoYW5uZWxfZWRnZXMoc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19nZXRfY2hhbm5lbF9lZGdlcyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgdTE2IGZsYWdzLCB1MTYgKmxvdywKIAkJCSAgICAgdTE2ICpoaWdoKQogewotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAogCWlmIChmbGFncyAmIENIQU5ORUxfNUdIWikgewogCQkqbG93ID0gcENhcC0+bG93XzVnaHpfY2hhbjsKQEAgLTE0Myw3ICsxMzUsNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotdTE2IGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc3RydWN0IGF0aF9oYWwgKmFoLAordTE2IGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVzLAogCQkJICAgdTMyIGZyYW1lTGVuLCB1MTYgcmF0ZWl4LAogCQkJICAgYm9vbCBzaG9ydFByZWFtYmxlKQpAQCAtMTY1LDE1ICsxNTcsMTUgQEAKIAkJdHhUaW1lID0gQ0NLX1NJRlNfVElNRSArIHBoeVRpbWUgKyAoKG51bUJpdHMgKiAxMDAwKSAvIGticHMpOwogCQlicmVhazsKIAljYXNlIFdMQU5fUkNfUEhZX09GRE06Ci0JCWlmIChhaC0+YWhfY3VyY2hhbiAmJiBJU19DSEFOX1FVQVJURVJfUkFURShhaC0+YWhfY3VyY2hhbikpIHsKKwkJaWYgKGFoLT5jdXJjaGFuICYmIElTX0NIQU5fUVVBUlRFUl9SQVRFKGFoLT5jdXJjaGFuKSkgewogCQkJYml0c1BlclN5bWJvbCA9CShrYnBzICogT0ZETV9TWU1CT0xfVElNRV9RVUFSVEVSKSAvIDEwMDA7CiAJCQludW1CaXRzID0gT0ZETV9QTENQX0JJVFMgKyAoZnJhbWVMZW4gPDwgMyk7CiAJCQludW1TeW1ib2xzID0gRElWX1JPVU5EX1VQKG51bUJpdHMsIGJpdHNQZXJTeW1ib2wpOwogCQkJdHhUaW1lID0gT0ZETV9TSUZTX1RJTUVfUVVBUlRFUgogCQkJCSsgT0ZETV9QUkVBTUJMRV9USU1FX1FVQVJURVIKIAkJCQkrIChudW1TeW1ib2xzICogT0ZETV9TWU1CT0xfVElNRV9RVUFSVEVSKTsKLQkJfSBlbHNlIGlmIChhaC0+YWhfY3VyY2hhbiAmJgotCQkJICAgSVNfQ0hBTl9IQUxGX1JBVEUoYWgtPmFoX2N1cmNoYW4pKSB7CisJCX0gZWxzZSBpZiAoYWgtPmN1cmNoYW4gJiYKKwkJCSAgIElTX0NIQU5fSEFMRl9SQVRFKGFoLT5jdXJjaGFuKSkgewogCQkJYml0c1BlclN5bWJvbCA9CShrYnBzICogT0ZETV9TWU1CT0xfVElNRV9IQUxGKSAvIDEwMDA7CiAJCQludW1CaXRzID0gT0ZETV9QTENQX0JJVFMgKyAoZnJhbWVMZW4gPDwgMyk7CiAJCQludW1TeW1ib2xzID0gRElWX1JPVU5EX1VQKG51bUJpdHMsIGJpdHNQZXJTeW1ib2wpOwpAQCAtMTk5LDUyICsxOTEsMTEgQEAKIAlyZXR1cm4gdHhUaW1lOwogfQogCi11MzIgYXRoOWtfaHdfbWh6MmllZWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgZnJlcSwgdTMyIGZsYWdzKQotewotCWlmIChmbGFncyAmIENIQU5ORUxfMkdIWikgewotCQlpZiAoZnJlcSA9PSAyNDg0KQotCQkJcmV0dXJuIDE0OwotCQlpZiAoZnJlcSA8IDI0ODQpCi0JCQlyZXR1cm4gKGZyZXEgLSAyNDA3KSAvIDU7Ci0JCWVsc2UKLQkJCXJldHVybiAxNSArICgoZnJlcSAtIDI1MTIpIC8gMjApOwotCX0gZWxzZSBpZiAoZmxhZ3MgJiBDSEFOTkVMXzVHSFopIHsKLQkJaWYgKGF0aDlrX3JlZ2RfaXNfcHVibGljX3NhZmV0eV9za3UoYWgpICYmCi0JCSAgICBJU19DSEFOX0lOX1BVQkxJQ19TQUZFVFlfQkFORChmcmVxKSkgewotCQkJcmV0dXJuICgoZnJlcSAqIDEwKSArCi0JCQkJKCgoZnJlcSAlIDUpID09IDIpID8gNSA6IDApIC0gNDk0MDApIC8gNTsKLQkJfSBlbHNlIGlmICgoZmxhZ3MgJiBDSEFOTkVMX0EpICYmIChmcmVxIDw9IDUwMDApKSB7Ci0JCQlyZXR1cm4gKGZyZXEgLSA0MDAwKSAvIDU7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gKGZyZXEgLSA1MDAwKSAvIDU7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoZnJlcSA9PSAyNDg0KQotCQkJcmV0dXJuIDE0OwotCQlpZiAoZnJlcSA8IDI0ODQpCi0JCQlyZXR1cm4gKGZyZXEgLSAyNDA3KSAvIDU7Ci0JCWlmIChmcmVxIDwgNTAwMCkgewotCQkJaWYgKGF0aDlrX3JlZ2RfaXNfcHVibGljX3NhZmV0eV9za3UoYWgpCi0JCQkgICAgJiYgSVNfQ0hBTl9JTl9QVUJMSUNfU0FGRVRZX0JBTkQoZnJlcSkpIHsKLQkJCQlyZXR1cm4gKChmcmVxICogMTApICsKLQkJCQkJKCgoZnJlcSAlIDUpID09Ci0JCQkJCSAgMikgPyA1IDogMCkgLSA0OTQwMCkgLyA1OwotCQkJfSBlbHNlIGlmIChmcmVxID4gNDkwMCkgewotCQkJCXJldHVybiAoZnJlcSAtIDQwMDApIC8gNTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dXJuIDE1ICsgKChmcmVxIC0gMjUxMikgLyAyMCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChmcmVxIC0gNTAwMCkgLyA1OwotCX0KLX0KLQotdm9pZCBhdGg5a19od19nZXRfY2hhbm5lbF9jZW50ZXJzKHN0cnVjdCBhdGhfaGFsICphaCwKK3ZvaWQgYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJCSAgc3RydWN0IGNoYW5fY2VudGVycyAqY2VudGVycykKIHsKIAlpbnQ4X3QgZXh0b2ZmOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlpZiAoIUlTX0NIQU5fSFQ0MChjaGFuKSkgewogCQljZW50ZXJzLT5jdGxfY2VudGVyID0gY2VudGVycy0+ZXh0X2NlbnRlciA9CkBAIC0yNjcsMTYgKzIxOCwxNSBAQAogCQljZW50ZXJzLT5zeW50aF9jZW50ZXIgLSAoZXh0b2ZmICogSFQ0MF9DSEFOTkVMX0NFTlRFUl9TSElGVCk7CiAJY2VudGVycy0+ZXh0X2NlbnRlciA9CiAJCWNlbnRlcnMtPnN5bnRoX2NlbnRlciArIChleHRvZmYgKgotCQkJICgoYWhwLT5haF9leHRwcm90c3BhY2luZyA9PSBBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yMCkgPworCQkJICgoYWgtPmV4dHByb3RzcGFjaW5nID09IEFUSDlLX0hUX0VYVFBST1RTUEFDSU5HXzIwKSA/CiAJCQkgIEhUNDBfQ0hBTk5FTF9DRU5URVJfU0hJRlQgOiAxNSkpOwotCiB9CiAKIC8qKioqKioqKioqKioqKioqKiovCiAvKiBDaGlwIFJldmlzaW9ucyAqLwogLyoqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfcmVhZF9yZXZpc2lvbnMoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfcmVhZF9yZXZpc2lvbnMoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIHZhbDsKIApAQCAtMjg0LDIxICsyMzQsMjIgQEAKIAogCWlmICh2YWwgPT0gMHhGRikgewogCQl2YWwgPSBSRUdfUkVBRChhaCwgQVJfU1JFVik7Ci0JCWFoLT5haF9tYWNWZXJzaW9uID0gKHZhbCAmIEFSX1NSRVZfVkVSU0lPTjIpID4+IEFSX1NSRVZfVFlQRTJfUzsKLQkJYWgtPmFoX21hY1JldiA9IE1TKHZhbCwgQVJfU1JFVl9SRVZJU0lPTjIpOwotCQlhaC0+YWhfaXNQY2lFeHByZXNzID0gKHZhbCAmIEFSX1NSRVZfVFlQRTJfSE9TVF9NT0RFKSA/IDAgOiAxOworCQlhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID0KKwkJCSh2YWwgJiBBUl9TUkVWX1ZFUlNJT04yKSA+PiBBUl9TUkVWX1RZUEUyX1M7CisJCWFoLT5od192ZXJzaW9uLm1hY1JldiA9IE1TKHZhbCwgQVJfU1JFVl9SRVZJU0lPTjIpOworCQlhaC0+aXNfcGNpZXhwcmVzcyA9ICh2YWwgJiBBUl9TUkVWX1RZUEUyX0hPU1RfTU9ERSkgPyAwIDogMTsKIAl9IGVsc2UgewogCQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCi0JCQlhaC0+YWhfbWFjVmVyc2lvbiA9IE1TKHZhbCwgQVJfU1JFVl9WRVJTSU9OKTsKKwkJCWFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPSBNUyh2YWwsIEFSX1NSRVZfVkVSU0lPTik7CiAKLQkJYWgtPmFoX21hY1JldiA9IHZhbCAmIEFSX1NSRVZfUkVWSVNJT047CisJCWFoLT5od192ZXJzaW9uLm1hY1JldiA9IHZhbCAmIEFSX1NSRVZfUkVWSVNJT047CiAKLQkJaWYgKGFoLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSUUpCi0JCQlhaC0+YWhfaXNQY2lFeHByZXNzID0gdHJ1ZTsKKwkJaWYgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkKKwkJCWFoLT5pc19wY2lleHByZXNzID0gdHJ1ZTsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfZ2V0X3JhZGlvcmV2KHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyBpbnQgYXRoOWtfaHdfZ2V0X3JhZGlvcmV2KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiB2YWw7CiAJaW50IGk7CkBAIC0zMTcsOSArMjY4LDkgQEAKIC8qIEhXIEF0dGFjaCwgRGV0YWNoLCBJbml0IFJvdXRpbmVzICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19kaXNhYmxlcGNpZShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19kaXNhYmxlcGNpZShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCisJaWYgKEFSX1NSRVZfOTEwMChhaCkpCiAJCXJldHVybjsKIAogCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4OTI0OGZjMDApOwpAQCAtMzM1LDcgKzI4Niw3IEBACiAJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUzIsIDB4MDAwMDAwMDApOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19jaGlwX3Rlc3Qoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfY2hpcF90ZXN0KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiByZWdBZGRyWzJdID0geyBBUl9TVEFfSUQwLCBBUl9QSFlfQkFTRSArICg4IDw8IDIpIH07CiAJdTMyIHJlZ0hvbGRbMl07CkBAIC0zNzcsNiArMzI4LDcgQEAKIAkJUkVHX1dSSVRFKGFoLCByZWdBZGRyW2ldLCByZWdIb2xkW2ldKTsKIAl9CiAJdWRlbGF5KDEwMCk7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzg5LDYgKzM0MSw4IEBACiAJCXJldHVybiAiQXRoZXJvcyA1NDE4IjsKIAljYXNlIEFSOTE2MF9ERVZJRF9QQ0k6CiAJCXJldHVybiAiQXRoZXJvcyA5MTYwIjsKKwljYXNlIEFSNTQxNl9BUjkxMDBfREVWSUQ6CisJCXJldHVybiAiQXRoZXJvcyA5MTAwIjsKIAljYXNlIEFSOTI4MF9ERVZJRF9QQ0k6CiAJY2FzZSBBUjkyODBfREVWSURfUENJRToKIAkJcmV0dXJuICJBdGhlcm9zIDkyODAiOwpAQCAtMzk5LDk5ICszNTMsMTEwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9kZWZhdWx0cyhzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVmYXVsdHMoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGk7CiAKLQlhaC0+YWhfY29uZmlnLmRtYV9iZWFjb25fcmVzcG9uc2VfdGltZSA9IDI7Ci0JYWgtPmFoX2NvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSA9IDEwOwotCWFoLT5haF9jb25maWcuYWRkaXRpb25hbF9zd2JhX2JhY2tvZmYgPSAwOwotCWFoLT5haF9jb25maWcuYWNrXzZtYiA9IDB4MDsKLQlhaC0+YWhfY29uZmlnLmN3bV9pZ25vcmVfZXh0Y2NhID0gMDsKLQlhaC0+YWhfY29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX2wxc2twX2VuYWJsZSA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX3Bvd2VyX3Jlc2V0ID0gMHgxMDA7Ci0JYWgtPmFoX2NvbmZpZy5wY2llX3Jlc3RvcmUgPSAwOwotCWFoLT5haF9jb25maWcucGNpZV93YWVuID0gMDsKLQlhaC0+YWhfY29uZmlnLmFuYWxvZ19zaGlmdHJlZyA9IDE7Ci0JYWgtPmFoX2NvbmZpZy5odF9lbmFibGUgPSAxOwotCWFoLT5haF9jb25maWcub2ZkbV90cmlnX2xvdyA9IDIwMDsKLQlhaC0+YWhfY29uZmlnLm9mZG1fdHJpZ19oaWdoID0gNTAwOwotCWFoLT5haF9jb25maWcuY2NrX3RyaWdfaGlnaCA9IDIwMDsKLQlhaC0+YWhfY29uZmlnLmNja190cmlnX2xvdyA9IDEwMDsKLQlhaC0+YWhfY29uZmlnLmVuYWJsZV9hbmkgPSAxOwotCWFoLT5haF9jb25maWcubm9pc2VfaW1tdW5pdHlfbGV2ZWwgPSA0OwotCWFoLT5haF9jb25maWcub2ZkbV93ZWFrc2lnbmFsX2RldCA9IDE7Ci0JYWgtPmFoX2NvbmZpZy5jY2tfd2Vha3NpZ25hbF90aHIgPSAwOwotCWFoLT5haF9jb25maWcuc3B1cl9pbW11bml0eV9sZXZlbCA9IDI7Ci0JYWgtPmFoX2NvbmZpZy5maXJzdGVwX2xldmVsID0gMDsKLQlhaC0+YWhfY29uZmlnLnJzc2lfdGhyX2hpZ2ggPSA0MDsKLQlhaC0+YWhfY29uZmlnLnJzc2lfdGhyX2xvdyA9IDc7Ci0JYWgtPmFoX2NvbmZpZy5kaXZlcnNpdHlfY29udHJvbCA9IDA7Ci0JYWgtPmFoX2NvbmZpZy5hbnRlbm5hX3N3aXRjaF9zd2FwID0gMDsKKwlhaC0+Y29uZmlnLmRtYV9iZWFjb25fcmVzcG9uc2VfdGltZSA9IDI7CisJYWgtPmNvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSA9IDEwOworCWFoLT5jb25maWcuYWRkaXRpb25hbF9zd2JhX2JhY2tvZmYgPSAwOworCWFoLT5jb25maWcuYWNrXzZtYiA9IDB4MDsKKwlhaC0+Y29uZmlnLmN3bV9pZ25vcmVfZXh0Y2NhID0gMDsKKwlhaC0+Y29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9IDA7CisJYWgtPmNvbmZpZy5wY2llX2wxc2twX2VuYWJsZSA9IDA7CisJYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSA9IDA7CisJYWgtPmNvbmZpZy5wY2llX3Bvd2VyX3Jlc2V0ID0gMHgxMDA7CisJYWgtPmNvbmZpZy5wY2llX3Jlc3RvcmUgPSAwOworCWFoLT5jb25maWcucGNpZV93YWVuID0gMDsKKwlhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZyA9IDE7CisJYWgtPmNvbmZpZy5odF9lbmFibGUgPSAxOworCWFoLT5jb25maWcub2ZkbV90cmlnX2xvdyA9IDIwMDsKKwlhaC0+Y29uZmlnLm9mZG1fdHJpZ19oaWdoID0gNTAwOworCWFoLT5jb25maWcuY2NrX3RyaWdfaGlnaCA9IDIwMDsKKwlhaC0+Y29uZmlnLmNja190cmlnX2xvdyA9IDEwMDsKKwlhaC0+Y29uZmlnLmVuYWJsZV9hbmkgPSAxOworCWFoLT5jb25maWcubm9pc2VfaW1tdW5pdHlfbGV2ZWwgPSA0OworCWFoLT5jb25maWcub2ZkbV93ZWFrc2lnbmFsX2RldCA9IDE7CisJYWgtPmNvbmZpZy5jY2tfd2Vha3NpZ25hbF90aHIgPSAwOworCWFoLT5jb25maWcuc3B1cl9pbW11bml0eV9sZXZlbCA9IDI7CisJYWgtPmNvbmZpZy5maXJzdGVwX2xldmVsID0gMDsKKwlhaC0+Y29uZmlnLnJzc2lfdGhyX2hpZ2ggPSA0MDsKKwlhaC0+Y29uZmlnLnJzc2lfdGhyX2xvdyA9IDc7CisJYWgtPmNvbmZpZy5kaXZlcnNpdHlfY29udHJvbCA9IDA7CisJYWgtPmNvbmZpZy5hbnRlbm5hX3N3aXRjaF9zd2FwID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBBUl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQlhaC0+YWhfY29uZmlnLnNwdXJjaGFuc1tpXVswXSA9IEFSX05PX1NQVVI7Ci0JCWFoLT5haF9jb25maWcuc3B1cmNoYW5zW2ldWzFdID0gQVJfTk9fU1BVUjsKKwkJYWgtPmNvbmZpZy5zcHVyY2hhbnNbaV1bMF0gPSBBUl9OT19TUFVSOworCQlhaC0+Y29uZmlnLnNwdXJjaGFuc1tpXVsxXSA9IEFSX05PX1NQVVI7CiAJfQogCi0JYWgtPmFoX2NvbmZpZy5pbnRyX21pdGlnYXRpb24gPSAxOworCWFoLT5jb25maWcuaW50cl9taXRpZ2F0aW9uID0gMTsKKworCS8qCisJICogV2UgbmVlZCB0aGlzIGZvciBQQ0kgZGV2aWNlcyBvbmx5IChDYXJkYnVzLCBQQ0ksIG1pbmlQQ0kpCisJICogX2FuZF8gaWYgb24gbm9uLXVuaXByb2Nlc3NvciBzeXN0ZW1zIChNdWx0aXByb2Nlc3Nvci9IVCkuCisJICogVGhpcyBtZWFucyB3ZSB1c2UgaXQgZm9yIGFsbCBBUjU0MTYgZGV2aWNlcywgYW5kIHRoZSBmZXcKKwkgKiBtaW5vciBQQ0kgQVI5MjgwIGRldmljZXMgb3V0IHRoZXJlLgorCSAqCisJICogU2VyaWFsaXphdGlvbiBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZXNlIGRldmljZXMgZG8gbm90IGhhbmRsZQorCSAqIHdlbGwgdGhlIGNhc2Ugb2YgdHdvIGNvbmN1cnJlbnQgcmVhZHMvd3JpdGVzIGR1ZSB0byB0aGUgbGF0ZW5jeQorCSAqIGludm9sdmVkLiBEdXJpbmcgb25lIHJlYWQvd3JpdGUgYW5vdGhlciByZWFkL3dyaXRlIGNhbiBiZSBpc3N1ZWQKKwkgKiBvbiBhbm90aGVyIENQVSB3aGlsZSB0aGUgcHJldmlvdXMgcmVhZC93cml0ZSBtYXkgc3RpbGwgYmUgd29ya2luZworCSAqIG9uIG91ciBoYXJkd2FyZSwgaWYgd2UgaGl0IHRoaXMgY2FzZSB0aGUgaGFyZHdhcmUgcG9vcHMgaW4gYSBsb29wLgorCSAqIFdlIHByZXZlbnQgdGhpcyBieSBzZXJpYWxpemluZyByZWFkcyBhbmQgd3JpdGVzLgorCSAqCisJICogVGhpcyBpc3N1ZSBpcyBub3QgcHJlc2VudCBvbiBQQ0ktRXhwcmVzcyBkZXZpY2VzIG9yIHByZS1BUjU0MTYKKwkgKiBkZXZpY2VzIChsZWdhY3ksIDgwMi4xMWFiZykuCisJICovCisJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPiAxKQorCQlhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0gU0VSX1JFR19NT0RFX0FVVE87CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYXRoX2hhbF81NDE2ICphdGg5a19od19uZXdzdGF0ZSh1MTYgZGV2aWQsCi0JCQkJCSAgICAgIHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCQkgICAgICB2b2lkIF9faW9tZW0gKm1lbSwKLQkJCQkJICAgICAgaW50ICpzdGF0dXMpCitzdGF0aWMgc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfbmV3c3RhdGUodTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkJaW50ICpzdGF0dXMpCiB7Ci0Jc3RhdGljIGNvbnN0IHU4IGRlZmJzc2lkbWFza1tFVEhfQUxFTl0gPQotCQl7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHA7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOworCXN0cnVjdCBhdGhfaHcgKmFoOwogCi0JYWhwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aF9oYWxfNTQxNiksIEdGUF9LRVJORUwpOwotCWlmIChhaHAgPT0gTlVMTCkgeworCWFoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aF9odyksIEdGUF9LRVJORUwpOworCWlmIChhaCA9PSBOVUxMKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3Igc3RhdGUgYmxvY2tcbiIpOwogCQkqc3RhdHVzID0gLUVOT01FTTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JYWggPSAmYWhwLT5haDsKIAlhaC0+YWhfc2MgPSBzYzsKLQlhaC0+YWhfc2ggPSBtZW07Ci0JYWgtPmFoX21hZ2ljID0gQVI1NDE2X01BR0lDOwotCWFoLT5haF9jb3VudHJ5Q29kZSA9IENUUllfREVGQVVMVDsKLQlhaC0+YWhfZGV2aWQgPSBkZXZpZDsKLQlhaC0+YWhfc3VidmVuZG9yaWQgPSAwOworCWFoLT5od192ZXJzaW9uLm1hZ2ljID0gQVI1NDE2X01BR0lDOworCWFoLT5yZWd1bGF0b3J5LmNvdW50cnlfY29kZSA9IENUUllfREVGQVVMVDsKKwlhaC0+aHdfdmVyc2lvbi5kZXZpZCA9IGRldmlkOworCWFoLT5od192ZXJzaW9uLnN1YnZlbmRvcmlkID0gMDsKIAogCWFoLT5haF9mbGFncyA9IDA7CiAJaWYgKChkZXZpZCA9PSBBUjU0MTZfQVI5MTAwX0RFVklEKSkKLQkJYWgtPmFoX21hY1ZlcnNpb24gPSBBUl9TUkVWX1ZFUlNJT05fOTEwMDsKKwkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9IEFSX1NSRVZfVkVSU0lPTl85MTAwOwogCWlmICghQVJfU1JFVl85MTAwKGFoKSkKIAkJYWgtPmFoX2ZsYWdzID0gQUhfVVNFX0VFUFJPTTsKIAotCWFoLT5haF9wb3dlckxpbWl0ID0gTUFYX1JBVEVfUE9XRVI7Ci0JYWgtPmFoX3RwU2NhbGUgPSBBVEg5S19UUF9TQ0FMRV9NQVg7Ci0JYWhwLT5haF9hdGltV2luZG93ID0gMDsKLQlhaHAtPmFoX2RpdmVyc2l0eUNvbnRyb2wgPSBhaC0+YWhfY29uZmlnLmRpdmVyc2l0eV9jb250cm9sOwotCWFocC0+YWhfYW50ZW5uYVN3aXRjaFN3YXAgPQotCQlhaC0+YWhfY29uZmlnLmFudGVubmFfc3dpdGNoX3N3YXA7Ci0JYWhwLT5haF9zdGFJZDFEZWZhdWx0cyA9IEFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOwotCWFocC0+YWhfYmVhY29uSW50ZXJ2YWwgPSAxMDA7Ci0JYWhwLT5haF9lbmFibGUzMmtIekNsb2NrID0gRE9OVF9VU0VfMzJLSFo7Ci0JYWhwLT5haF9zbG90dGltZSA9ICh1MzIpIC0xOwotCWFocC0+YWhfYWNrdGltZW91dCA9ICh1MzIpIC0xOwotCWFocC0+YWhfY3RzdGltZW91dCA9ICh1MzIpIC0xOwotCWFocC0+YWhfZ2xvYmFsdHh0aW1lb3V0ID0gKHUzMikgLTE7Ci0JbWVtY3B5KCZhaHAtPmFoX2Jzc2lkbWFzaywgZGVmYnNzaWRtYXNrLCBFVEhfQUxFTik7CisJYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQgPSBNQVhfUkFURV9QT1dFUjsKKwlhaC0+cmVndWxhdG9yeS50cF9zY2FsZSA9IEFUSDlLX1RQX1NDQUxFX01BWDsKKwlhaC0+YXRpbV93aW5kb3cgPSAwOworCWFoLT5kaXZlcnNpdHlfY29udHJvbCA9IGFoLT5jb25maWcuZGl2ZXJzaXR5X2NvbnRyb2w7CisJYWgtPmFudGVubmFfc3dpdGNoX3N3YXAgPQorCQlhaC0+Y29uZmlnLmFudGVubmFfc3dpdGNoX3N3YXA7CisJYWgtPnN0YV9pZDFfZGVmYXVsdHMgPSBBUl9TVEFfSUQxX0NSUFRfTUlDX0VOQUJMRTsKKwlhaC0+YmVhY29uX2ludGVydmFsID0gMTAwOworCWFoLT5lbmFibGVfMzJrSHpfY2xvY2sgPSBET05UX1VTRV8zMktIWjsKKwlhaC0+c2xvdHRpbWUgPSAodTMyKSAtMTsKKwlhaC0+YWNrdGltZW91dCA9ICh1MzIpIC0xOworCWFoLT5jdHN0aW1lb3V0ID0gKHUzMikgLTE7CisJYWgtPmdsb2JhbHR4dGltZW91dCA9ICh1MzIpIC0xOwogCi0JYWhwLT5haF9nQmVhY29uUmF0ZSA9IDA7CisJYWgtPmdiZWFjb25fcmF0ZSA9IDA7CiAKLQlyZXR1cm4gYWhwOworCXJldHVybiBhaDsKIH0KIAotc3RhdGljIGludCBhdGg5a19od19yZmF0dGFjaChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3X3JmYXR0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWJvb2wgcmZTdGF0dXMgPSBmYWxzZTsKIAlpbnQgZWNvZGUgPSAwOwpAQCAtNTA2LDcgKzQ3MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfcmZfY2xhaW0oc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGludCBhdGg5a19od19yZl9jbGFpbShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgdmFsOwogCkBAIC01MjYsODggKzQ5MSw4NyBAQAogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DSEFOTkVMLAogCQkJIjVHIFJhZGlvIENoaXAgUmV2IDB4JTAyWCBpcyBub3QgIgogCQkJInN1cHBvcnRlZCBieSB0aGlzIGRyaXZlclxuIiwKLQkJCWFoLT5haF9hbmFsb2c1R2h6UmV2KTsKKwkJCWFoLT5od192ZXJzaW9uLmFuYWxvZzVHaHpSZXYpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JYWgtPmFoX2FuYWxvZzVHaHpSZXYgPSB2YWw7CisJYWgtPmh3X3ZlcnNpb24uYW5hbG9nNUdoelJldiA9IHZhbDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0aDlrX2h3X2luaXRfbWFjYWRkcihzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW50IGF0aDlrX2h3X2luaXRfbWFjYWRkcihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgc3VtOwogCWludCBpOwogCXUxNiBlZXZhbDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCiAJc3VtID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCWVldmFsID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgQVJfRUVQUk9NX01BQyhpKSk7CisJCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEFSX0VFUFJPTV9NQUMoaSkpOwogCQlzdW0gKz0gZWV2YWw7Ci0JCWFocC0+YWhfbWFjYWRkclsyICogaV0gPSBlZXZhbCA+PiA4OwotCQlhaHAtPmFoX21hY2FkZHJbMiAqIGkgKyAxXSA9IGVldmFsICYgMHhmZjsKKwkJYWgtPm1hY2FkZHJbMiAqIGldID0gZWV2YWwgPj4gODsKKwkJYWgtPm1hY2FkZHJbMiAqIGkgKyAxXSA9IGVldmFsICYgMHhmZjsKIAl9CiAJaWYgKHN1bSA9PSAwIHx8IHN1bSA9PSAweGZmZmYgKiAzKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKIAkJCSJtYWMgYWRkcmVzcyByZWFkIGZhaWxlZDogJXBNXG4iLAotCQkJYWhwLT5haF9tYWNhZGRyKTsKKwkJCWFoLT5tYWNhZGRyKTsKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3J4Z2Fpbl9pbmkoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9yeGdhaW5faW5pKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUzMiByeGdhaW5fdHlwZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCi0JaWYgKGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE3KSB7Ci0JCXJ4Z2Fpbl90eXBlID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX1JYR0FJTl9UWVBFKTsKKwlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9NSU5PUl9SRVYpID49IEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE3KSB7CisJCXJ4Z2Fpbl90eXBlID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SWEdBSU5fVFlQRSk7CiAKIAkJaWYgKHJ4Z2Fpbl90eXBlID09IEFSNTQxNl9FRVBfUlhHQUlOXzEzREJfQkFDS09GRikKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzUnhHYWluLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1J4R2FpbiwKIAkJCWFyOTI4ME1vZGVzX2JhY2tvZmZfMTNkYl9yeGdhaW5fOTI4MF8yLAogCQkJQVJSQVlfU0laRShhcjkyODBNb2Rlc19iYWNrb2ZmXzEzZGJfcnhnYWluXzkyODBfMiksIDYpOwogCQllbHNlIGlmIChyeGdhaW5fdHlwZSA9PSBBUjU0MTZfRUVQX1JYR0FJTl8yM0RCX0JBQ0tPRkYpCi0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1J4R2FpbiwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCiAJCQlhcjkyODBNb2Rlc19iYWNrb2ZmXzIzZGJfcnhnYWluXzkyODBfMiwKIAkJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfYmFja29mZl8yM2RiX3J4Z2Fpbl85MjgwXzIpLCA2KTsKIAkJZWxzZQotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNSeEdhaW4sCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAogCQkJYXI5MjgwTW9kZXNfb3JpZ2luYWxfcnhnYWluXzkyODBfMiwKIAkJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfb3JpZ2luYWxfcnhnYWluXzkyODBfMiksIDYpOwotCX0gZWxzZQotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1J4R2FpbiwKKwl9IGVsc2UgeworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAogCQkJYXI5MjgwTW9kZXNfb3JpZ2luYWxfcnhnYWluXzkyODBfMiwKIAkJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfb3JpZ2luYWxfcnhnYWluXzkyODBfMiksIDYpOworCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF90eGdhaW5faW5pKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfdHhnYWluX2luaShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgdHhnYWluX3R5cGU7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAotCWlmIChhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKSA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSkgewotCQl0eGdhaW5fdHlwZSA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9UWEdBSU5fVFlQRSk7CisJaWYgKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKSA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xOSkgeworCQl0eGdhaW5fdHlwZSA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVFhHQUlOX1RZUEUpOwogCiAJCWlmICh0eGdhaW5fdHlwZSA9PSBBUjU0MTZfRUVQX1RYR0FJTl9ISUdIX1BPV0VSKQotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNUeEdhaW4sCisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAogCQkJYXI5MjgwTW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODBfMiwKIAkJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODBfMiksIDYpOwogCQllbHNlCi0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1R4R2FpbiwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQlhcjkyODBNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODBfMiwKIAkJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85MjgwXzIpLCA2KTsKLQl9IGVsc2UKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNUeEdhaW4sCisJfSBlbHNlIHsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKIAkJYXI5MjgwTW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85MjgwXzIsCiAJCUFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85MjgwXzIpLCA2KTsKKwl9CiB9CiAKLXN0YXRpYyBpbnQgYXRoOWtfaHdfcG9zdF9hdHRhY2goc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGludCBhdGg5a19od19wb3N0X2F0dGFjaChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlpbnQgZWNvZGU7CiAKQEAgLTYyNCw2ICs1ODgsMTAgQEAKIAllY29kZSA9IGF0aDlrX2h3X2VlcHJvbV9hdHRhY2goYWgpOwogCWlmIChlY29kZSAhPSAwKQogCQlyZXR1cm4gZWNvZGU7CisKKwlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DT05GSUcsICJFZXByb20gVkVSOiAlZCwgUkVWOiAlZFxuIiwKKwkJYWgtPmVlcF9vcHMtPmdldF9lZXByb21fdmVyKGFoKSwgYWgtPmVlcF9vcHMtPmdldF9lZXByb21fcmV2KGFoKSk7CisKIAllY29kZSA9IGF0aDlrX2h3X3JmYXR0YWNoKGFoKTsKIAlpZiAoZWNvZGUgIT0gMCkKIAkJcmV0dXJuIGVjb2RlOwpAQCAtNjM2LDIzNyArNjA0LDIyOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGF0aF9oYWwgKmF0aDlrX2h3X2RvX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCQkgIHZvaWQgX19pb21lbSAqbWVtLCBpbnQgKnN0YXR1cykKK3N0YXRpYyBzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19kb19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkJIGludCAqc3RhdHVzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocDsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWg7CisJc3RydWN0IGF0aF9odyAqYWg7CiAJaW50IGVjb2RlOwogCXUzMiBpLCBqOwogCi0JYWhwID0gYXRoOWtfaHdfbmV3c3RhdGUoZGV2aWQsIHNjLCBtZW0sIHN0YXR1cyk7Ci0JaWYgKGFocCA9PSBOVUxMKQorCWFoID0gYXRoOWtfaHdfbmV3c3RhdGUoZGV2aWQsIHNjLCBzdGF0dXMpOworCWlmIChhaCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCWFoID0gJmFocC0+YWg7Ci0KIAlhdGg5a19od19zZXRfZGVmYXVsdHMoYWgpOwogCi0JaWYgKGFoLT5haF9jb25maWcuaW50cl9taXRpZ2F0aW9uICE9IDApCi0JCWFocC0+YWhfaW50ck1pdGlnYXRpb24gPSB0cnVlOworCWlmIChhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbiAhPSAwKQorCQlhaC0+aW50cl9taXRpZ2F0aW9uID0gdHJ1ZTsKIAogCWlmICghYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhhaCwgQVRIOUtfUkVTRVRfUE9XRVJfT04pKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiQ291bGRuJ3QgcmVzZXQgY2hpcFxuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCByZXNldCBjaGlwXG4iKTsKIAkJZWNvZGUgPSAtRUlPOwogCQlnb3RvIGJhZDsKIAl9CiAKIAlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCB3YWtldXAgY2hpcFxuIik7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfUkVTRVQsICJDb3VsZG4ndCB3YWtldXAgY2hpcFxuIik7CiAJCWVjb2RlID0gLUVJTzsKIAkJZ290byBiYWQ7CiAJfQogCi0JaWYgKGFoLT5haF9jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX0FVVE8pIHsKLQkJaWYgKGFoLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgewotCQkJYWgtPmFoX2NvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9CisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX0FVVE8pIHsKKwkJaWYgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJIHx8CisJCSAgICAoQVJfU1JFVl85MjgwKGFoKSAmJiAhYWgtPmlzX3BjaWV4cHJlc3MpKSB7CisJCQlhaC0+Y29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KIAkJCQlTRVJfUkVHX01PREVfT047CiAJCX0gZWxzZSB7Ci0JCQlhaC0+YWhfY29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlID0KKwkJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPQogCQkJCVNFUl9SRUdfTU9ERV9PRkY7CiAJCX0KIAl9CiAKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKLQkJInNlcmlhbGl6ZV9yZWdtb2RlIGlzICVkXG4iLAotCQlhaC0+YWhfY29uZmlnLnNlcmlhbGl6ZV9yZWdtb2RlKTsKKwlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULCAic2VyaWFsaXplX3JlZ21vZGUgaXMgJWRcbiIsCisJCWFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUpOwogCi0JaWYgKChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpICYmCi0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiAhPSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSAmJgotCSAgICAoYWgtPmFoX21hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApICYmCisJaWYgKChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uICE9IEFSX1NSRVZfVkVSU0lPTl81NDE2X1BDSSkgJiYKKwkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkgJiYKKwkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gIT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApICYmCiAJICAgICghQVJfU1JFVl85MTAwKGFoKSkgJiYgKCFBUl9TUkVWXzkyODAoYWgpKSAmJiAoIUFSX1NSRVZfOTI4NShhaCkpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULAorCQlEUFJJTlRGKHNjLCBBVEhfREJHX1JFU0VULAogCQkJIk1hYyBDaGlwIFJldiAweCUwMnguJXggaXMgbm90IHN1cHBvcnRlZCBieSAiCi0JCQkidGhpcyBkcml2ZXJcbiIsIGFoLT5haF9tYWNWZXJzaW9uLCBhaC0+YWhfbWFjUmV2KTsKKwkJCSJ0aGlzIGRyaXZlclxuIiwgYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwKKwkJCWFoLT5od192ZXJzaW9uLm1hY1Jldik7CiAJCWVjb2RlID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gYmFkOwogCX0KIAogCWlmIChBUl9TUkVWXzkxMDAoYWgpKSB7Ci0JCWFocC0+YWhfaXFDYWxEYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKLQkJYWhwLT5haF9zdXBwQ2FscyA9IElRX01JU01BVENIX0NBTDsKLQkJYWgtPmFoX2lzUGNpRXhwcmVzcyA9IGZhbHNlOworCQlhaC0+aXFfY2FsZGF0YS5jYWxEYXRhID0gJmlxX2NhbF9tdWx0aV9zYW1wbGU7CisJCWFoLT5zdXBwX2NhbHMgPSBJUV9NSVNNQVRDSF9DQUw7CisJCWFoLT5pc19wY2lleHByZXNzID0gZmFsc2U7CiAJfQotCWFoLT5haF9waHlSZXYgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0NISVBfSUQpOworCWFoLT5od192ZXJzaW9uLnBoeVJldiA9IFJFR19SRUFEKGFoLCBBUl9QSFlfQ0hJUF9JRCk7CiAKIAlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKGFoKSkgewogCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQkJYWhwLT5haF9pcUNhbERhdGEuY2FsRGF0YSA9ICZpcV9jYWxfc2luZ2xlX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjR2FpbkNhbERhdGEuY2FsRGF0YSA9CisJCQlhaC0+aXFfY2FsZGF0YS5jYWxEYXRhID0gJmlxX2NhbF9zaW5nbGVfc2FtcGxlOworCQkJYWgtPmFkY2dhaW5fY2FsZGF0YS5jYWxEYXRhID0KIAkJCQkmYWRjX2dhaW5fY2FsX3NpbmdsZV9zYW1wbGU7Ci0JCQlhaHAtPmFoX2FkY0RjQ2FsRGF0YS5jYWxEYXRhID0KKwkJCWFoLT5hZGNkY19jYWxkYXRhLmNhbERhdGEgPQogCQkJCSZhZGNfZGNfY2FsX3NpbmdsZV9zYW1wbGU7Ci0JCQlhaHAtPmFoX2FkY0RjQ2FsSW5pdERhdGEuY2FsRGF0YSA9CisJCQlhaC0+YWRjZGNfY2FsaW5pdGRhdGEuY2FsRGF0YSA9CiAJCQkJJmFkY19pbml0X2RjX2NhbDsKIAkJfSBlbHNlIHsKLQkJCWFocC0+YWhfaXFDYWxEYXRhLmNhbERhdGEgPSAmaXFfY2FsX211bHRpX3NhbXBsZTsKLQkJCWFocC0+YWhfYWRjR2FpbkNhbERhdGEuY2FsRGF0YSA9CisJCQlhaC0+aXFfY2FsZGF0YS5jYWxEYXRhID0gJmlxX2NhbF9tdWx0aV9zYW1wbGU7CisJCQlhaC0+YWRjZ2Fpbl9jYWxkYXRhLmNhbERhdGEgPQogCQkJCSZhZGNfZ2Fpbl9jYWxfbXVsdGlfc2FtcGxlOwotCQkJYWhwLT5haF9hZGNEY0NhbERhdGEuY2FsRGF0YSA9CisJCQlhaC0+YWRjZGNfY2FsZGF0YS5jYWxEYXRhID0KIAkJCQkmYWRjX2RjX2NhbF9tdWx0aV9zYW1wbGU7Ci0JCQlhaHAtPmFoX2FkY0RjQ2FsSW5pdERhdGEuY2FsRGF0YSA9CisJCQlhaC0+YWRjZGNfY2FsaW5pdGRhdGEuY2FsRGF0YSA9CiAJCQkJJmFkY19pbml0X2RjX2NhbDsKIAkJfQotCQlhaHAtPmFoX3N1cHBDYWxzID0gQURDX0dBSU5fQ0FMIHwgQURDX0RDX0NBTCB8IElRX01JU01BVENIX0NBTDsKKwkJYWgtPnN1cHBfY2FscyA9IEFEQ19HQUlOX0NBTCB8IEFEQ19EQ19DQUwgfCBJUV9NSVNNQVRDSF9DQUw7CiAJfQogCi0JaWYgKEFSX1NSRVZfOTE2MChhaCkpIHsKLQkJYWgtPmFoX2NvbmZpZy5lbmFibGVfYW5pID0gMTsKLQkJYWhwLT5haF9hbmlfZnVuY3Rpb24gPSAoQVRIOUtfQU5JX1NQVVJfSU1NVU5JVFlfTEVWRUwgfAotCQkJCQlBVEg5S19BTklfRklSU1RFUF9MRVZFTCk7Ci0JfSBlbHNlIHsKLQkJYWhwLT5haF9hbmlfZnVuY3Rpb24gPSBBVEg5S19BTklfQUxMOwotCQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQkJYWhwLT5haF9hbmlfZnVuY3Rpb24gJj0JfkFUSDlLX0FOSV9OT0lTRV9JTU1VTklUWV9MRVZFTDsKLQkJfQotCX0KKwlhaC0+YW5pX2Z1bmN0aW9uID0gQVRIOUtfQU5JX0FMTDsKKwlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKKwkJYWgtPmFuaV9mdW5jdGlvbiAmPSB+QVRIOUtfQU5JX05PSVNFX0lNTVVOSVRZX0xFVkVMOwogCi0JRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCisJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwKIAkJIlRoaXMgTWFjIENoaXAgUmV2IDB4JTAyeC4leCBpcyBcbiIsCi0JCWFoLT5haF9tYWNWZXJzaW9uLCBhaC0+YWhfbWFjUmV2KTsKKwkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiwgYWgtPmh3X3ZlcnNpb24ubWFjUmV2KTsKIAogCWlmIChBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1XzFfMiwKKworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1XzFfMiwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4NU1vZGVzXzkyODVfMV8yKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI5Mjg1Q29tbW9uXzkyODVfMV8yLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5Mjg1Q29tbW9uXzkyODVfMV8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1Q29tbW9uXzkyODVfMV8yKSwgMik7CiAKLQkJaWYgKGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEpIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCWlmIChhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxKSB7CisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQlhcjkyODVQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4NV8xXzIsCiAJCQlBUlJBWV9TSVpFKGFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1XzFfMiksIDIpOwogCQl9IGVsc2UgewotCQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pUGNpZVNlcmRlcywKIAkJCWFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1XzFfMiwKIAkJCUFSUkFZX1NJWkUoYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODVfMV8yKSwKIAkJCQkgIDIpOwogCQl9CiAJfSBlbHNlIGlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1LAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjkyODVNb2Rlc185Mjg1LAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5Mjg1TW9kZXNfOTI4NSksIDYpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlDb21tb24sIGFyOTI4NUNvbW1vbl85Mjg1LAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI5Mjg1Q29tbW9uXzkyODUsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODVDb21tb25fOTI4NSksIDIpOwogCi0JCWlmIChhaC0+YWhfY29uZmlnLnBjaWVfY2xvY2tfcmVxKSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlQY2llU2VyZGVzLAorCQlpZiAoYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSkgeworCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAogCQkJYXI5Mjg1UGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODUsCiAJCQlBUlJBWV9TSVpFKGFyOTI4NVBjaWVQaHlfY2xrcmVxX29mZl9MMV85Mjg1KSwgMik7CiAJCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlQY2llU2VyZGVzLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAogCQkJYXI5Mjg1UGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODUsCiAJCQlBUlJBWV9TSVpFKGFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1KSwgMik7CiAJCX0KIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyOTI4ME1vZGVzXzkyODBfMiwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2RlcywgYXI5MjgwTW9kZXNfOTI4MF8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfOTI4MF8yKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI5MjgwQ29tbW9uXzkyODBfMiwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlDb21tb24sIGFyOTI4MENvbW1vbl85MjgwXzIsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBDb21tb25fOTI4MF8yKSwgMik7CiAKLQkJaWYgKGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEpIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaVBjaWVTZXJkZXMsCisJCWlmIChhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxKSB7CisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVBjaWVTZXJkZXMsCiAJCQkgICAgICAgYXI5MjgwUGNpZVBoeV9jbGtyZXFfb2ZmX0wxXzkyODAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBQY2llUGh5X2Nsa3JlcV9vZmZfTDFfOTI4MCksMik7CiAJCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlQY2llU2VyZGVzLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlQY2llU2VyZGVzLAogCQkJICAgICAgIGFyOTI4MFBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85MjgwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwUGNpZVBoeV9jbGtyZXFfYWx3YXlzX29uX0wxXzkyODApLCAyKTsKIAkJfQotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc0FkZGl0aW9uYWwsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNBZGRpdGlvbmFsLAogCQkJICAgICAgIGFyOTI4ME1vZGVzX2Zhc3RfY2xvY2tfOTI4MF8yLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI5MjgwTW9kZXNfZmFzdF9jbG9ja185MjgwXzIpLCAzKTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyOTI4ME1vZGVzXzkyODAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXMsIGFyOTI4ME1vZGVzXzkyODAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjkyODBNb2Rlc185MjgwKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI5MjgwQ29tbW9uXzkyODAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQ29tbW9uLCBhcjkyODBDb21tb25fOTI4MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyOTI4MENvbW1vbl85MjgwKSwgMik7CiAJfSBlbHNlIGlmIChBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjU0MTZNb2Rlc185MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjU0MTZNb2Rlc185MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2TW9kZXNfOTE2MCksIDYpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlDb21tb24sIGFyNTQxNkNvbW1vbl85MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI1NDE2Q29tbW9uXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZDb21tb25fOTE2MCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmswXzkxNjApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQkJfUmZHYWluLCBhcjU0MTZCQl9SZkdhaW5fOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2Fpbl85MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QkJfUmZHYWluXzkxNjApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMV85MTYwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsyLCBhcjU0MTZCYW5rMl85MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmsyLCBhcjU0MTZCYW5rMl85MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazJfOTE2MCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMywgYXI1NDE2QmFuazNfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMywgYXI1NDE2QmFuazNfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmszXzkxNjApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazYsIGFyNTQxNkJhbms2XzkxNjAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazYsIGFyNTQxNkJhbms2XzkxNjAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNl85MTYwKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTYwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTYwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazZUUENfOTE2MCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNywgYXI1NDE2QmFuazdfOTE2MCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNywgYXI1NDE2QmFuazdfOTE2MCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms3XzkxNjApLCAyKTsKIAkJaWYgKEFSX1NSRVZfOTE2MF8xMShhaCkpIHsKLQkJCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUFkZGFjLAorCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlBZGRhYywKIAkJCQkgICAgICAgYXI1NDE2QWRkYWNfOTE2MDFfMSwKIAkJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZBZGRhY185MTYwMV8xKSwgMik7CiAJCX0gZWxzZSB7Ci0JCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlBZGRhYywgYXI1NDE2QWRkYWNfOTE2MCwKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjXzkxNjAsCiAJCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QWRkYWNfOTE2MCksIDIpOwogCQl9CiAJfSBlbHNlIGlmIChBUl9TUkVWXzkxMDBfT1JfTEFURVIoYWgpKSB7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaU1vZGVzLCBhcjU0MTZNb2Rlc185MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjU0MTZNb2Rlc185MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2TW9kZXNfOTEwMCksIDYpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlDb21tb24sIGFyNTQxNkNvbW1vbl85MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI1NDE2Q29tbW9uXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZDb21tb25fOTEwMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMCwgYXI1NDE2QmFuazBfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmswXzkxMDApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQkJfUmZHYWluLCBhcjU0MTZCQl9SZkdhaW5fOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2Fpbl85MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QkJfUmZHYWluXzkxMDApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFyNTQxNkJhbmsxXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMV85MTAwKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmsyLCBhcjU0MTZCYW5rMl85MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmsyLCBhcjU0MTZCYW5rMl85MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazJfOTEwMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMywgYXI1NDE2QmFuazNfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMywgYXI1NDE2QmFuazNfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmszXzkxMDApLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazYsIGFyNTQxNkJhbms2XzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazYsIGFyNTQxNkJhbms2XzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNl85MTAwKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTAwLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQ185MTAwLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazZUUENfOTEwMCksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNywgYXI1NDE2QmFuazdfOTEwMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNywgYXI1NDE2QmFuazdfOTEwMCwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms3XzkxMDApLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQWRkYWMsIGFyNTQxNkFkZGFjXzkxMDAsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjXzkxMDAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZBZGRhY185MTAwKSwgMik7CiAJfSBlbHNlIHsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXMsIGFyNTQxNk1vZGVzLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzLCBhcjU0MTZNb2RlcywKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNk1vZGVzKSwgNik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUNvbW1vbiwgYXI1NDE2Q29tbW9uLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNvbW1vbiwgYXI1NDE2Q29tbW9uLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2Q29tbW9uKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmswLCBhcjU0MTZCYW5rMCwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMCwgYXI1NDE2QmFuazAsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMCksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2FpbiwKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGFyNTQxNkJCX1JmR2FpbiwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJCX1JmR2FpbiksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMSwgYXI1NDE2QmFuazEsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFyNTQxNkJhbmsxLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazEpLCAyKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazIsIGFyNTQxNkJhbmsyLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbmsyLCBhcjU0MTZCYW5rMiwKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbmsyKSwgMik7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbmszLCBhcjU0MTZCYW5rMywKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rMywgYXI1NDE2QmFuazMsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rMyksIDMpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNiwgYXI1NDE2QmFuazYsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQmFuazYsIGFyNTQxNkJhbms2LAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QmFuazYpLCAzKTsKLQkJSU5JVF9JTklfQVJSQVkoJmFocC0+YWhfaW5pQmFuazZUUEMsIGFyNTQxNkJhbms2VFBDLAorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUJhbms2VFBDLCBhcjU0MTZCYW5rNlRQQywKIAkJCSAgICAgICBBUlJBWV9TSVpFKGFyNTQxNkJhbms2VFBDKSwgMyk7Ci0JCUlOSVRfSU5JX0FSUkFZKCZhaHAtPmFoX2luaUJhbms3LCBhcjU0MTZCYW5rNywKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCYW5rNywgYXI1NDE2QmFuazcsCiAJCQkgICAgICAgQVJSQVlfU0laRShhcjU0MTZCYW5rNyksIDIpOwotCQlJTklUX0lOSV9BUlJBWSgmYWhwLT5haF9pbmlBZGRhYywgYXI1NDE2QWRkYWMsCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQWRkYWMsIGFyNTQxNkFkZGFjLAogCQkJICAgICAgIEFSUkFZX1NJWkUoYXI1NDE2QWRkYWMpLCAyKTsKIAl9CiAKLQlpZiAoYWgtPmFoX2lzUGNpRXhwcmVzcykKKwlpZiAoYWgtPmlzX3BjaWV4cHJlc3MpCiAJCWF0aDlrX2h3X2NvbmZpZ3BjaXBvd2Vyc2F2ZShhaCwgMCk7CiAJZWxzZQogCQlhdGg5a19od19kaXNhYmxlcGNpZShhaCk7CkBAIC04NzUsNiArODM1LDIyIEBACiAJaWYgKGVjb2RlICE9IDApCiAJCWdvdG8gYmFkOwogCisJaWYgKEFSX1NSRVZfOTI4NV8xMl9PUl9MQVRFUihhaCkpIHsKKwkJdTMyIHR4Z2Fpbl90eXBlID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9UWEdBSU5fVFlQRSk7CisKKwkJLyogdHhnYWluIHRhYmxlICovCisJCWlmICh0eGdhaW5fdHlwZSA9PSBBUjU0MTZfRUVQX1RYR0FJTl9ISUdIX1BPV0VSKSB7CisJCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQkJYXI5Mjg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODVfMV8yLAorCQkJQVJSQVlfU0laRShhcjkyODVNb2Rlc19oaWdoX3Bvd2VyX3R4X2dhaW5fOTI4NV8xXzIpLCA2KTsKKwkJfSBlbHNlIHsKKwkJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQlhcjkyODVNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODVfMV8yLAorCQkJQVJSQVlfU0laRShhcjkyODVNb2Rlc19vcmlnaW5hbF90eF9nYWluXzkyODVfMV8yKSwgNik7CisJCX0KKworCX0KKwogCS8qIHJ4Z2FpbiB0YWJsZSAqLwogCWlmIChBUl9TUkVWXzkyODBfMjAoYWgpKQogCQlhdGg5a19od19pbml0X3J4Z2Fpbl9pbmkoYWgpOwpAQCAtODgzLDUzICs4NTksNTUgQEAKIAlpZiAoQVJfU1JFVl85MjgwXzIwKGFoKSkKIAkJYXRoOWtfaHdfaW5pdF90eGdhaW5faW5pKGFoKTsKIAotCWlmIChhaC0+YWhfZGV2aWQgPT0gQVI5MjgwX0RFVklEX1BDSSkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlNb2Rlcy5pYV9yb3dzOyBpKyspIHsKLQkJCXUzMiByZWcgPSBJTklfUkEoJmFocC0+YWhfaW5pTW9kZXMsIGksIDApOworCWlmICghYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhhaCkpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwgImZhaWxlZCBhdGg5a19od19maWxsX2NhcF9pbmZvXG4iKTsKKwkJZWNvZGUgPSAtRUlOVkFMOworCQlnb3RvIGJhZDsKKwl9CiAKLQkJCWZvciAoaiA9IDE7IGogPCBhaHAtPmFoX2luaU1vZGVzLmlhX2NvbHVtbnM7IGorKykgewotCQkJCXUzMiB2YWwgPSBJTklfUkEoJmFocC0+YWhfaW5pTW9kZXMsIGksIGopOworCWlmICgoYWgtPmh3X3ZlcnNpb24uZGV2aWQgPT0gQVI5MjgwX0RFVklEX1BDSSkgJiYKKwkgICAgdGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIGFoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkgewogCi0JCQkJSU5JX1JBKCZhaHAtPmFoX2luaU1vZGVzLCBpLCBqKSA9CisJCS8qIEVFUFJPTSBGaXh1cCAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaU1vZGVzLmlhX3Jvd3M7IGkrKykgeworCQkJdTMyIHJlZyA9IElOSV9SQSgmYWgtPmluaU1vZGVzLCBpLCAwKTsKKworCQkJZm9yIChqID0gMTsgaiA8IGFoLT5pbmlNb2Rlcy5pYV9jb2x1bW5zOyBqKyspIHsKKwkJCQl1MzIgdmFsID0gSU5JX1JBKCZhaC0+aW5pTW9kZXMsIGksIGopOworCisJCQkJSU5JX1JBKCZhaC0+aW5pTW9kZXMsIGksIGopID0KIAkJCQkJYXRoOWtfaHdfaW5pX2ZpeHVwKGFoLAotCQkJCQkJCSAgICZhaHAtPmFoX2VlcHJvbS5kZWYsCisJCQkJCQkJICAgJmFoLT5lZXByb20uZGVmLAogCQkJCQkJCSAgIHJlZywgdmFsKTsKIAkJCX0KIAkJfQogCX0KIAotCWlmICghYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhhaCkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVTRVQsCi0JCQkiZmFpbGVkIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm9cbiIpOwotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOwotCX0KLQogCWVjb2RlID0gYXRoOWtfaHdfaW5pdF9tYWNhZGRyKGFoKTsKIAlpZiAoZWNvZGUgIT0gMCkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKKwkJRFBSSU5URihzYywgQVRIX0RCR19SRVNFVCwKIAkJCSJmYWlsZWQgaW5pdGlhbGl6aW5nIG1hYyBhZGRyZXNzXG4iKTsKIAkJZ290byBiYWQ7CiAJfQogCiAJaWYgKEFSX1NSRVZfOTI4NShhaCkpCi0JCWFoLT5haF90eFRyaWdMZXZlbCA9IChBUl9GVFJJR18yNTZCID4+IEFSX0ZUUklHX1MpOworCQlhaC0+dHhfdHJpZ19sZXZlbCA9IChBUl9GVFJJR18yNTZCID4+IEFSX0ZUUklHX1MpOwogCWVsc2UKLQkJYWgtPmFoX3R4VHJpZ0xldmVsID0gKEFSX0ZUUklHXzUxMkIgPj4gQVJfRlRSSUdfUyk7CisJCWFoLT50eF90cmlnX2xldmVsID0gKEFSX0ZUUklHXzUxMkIgPj4gQVJfRlRSSUdfUyk7CiAKIAlhdGg5a19pbml0X25mY2FsX2hpc3RfYnVmZmVyKGFoKTsKIAogCXJldHVybiBhaDsKIGJhZDoKLQlpZiAoYWhwKQotCQlhdGg5a19od19kZXRhY2goKHN0cnVjdCBhdGhfaGFsICopIGFocCk7CisJaWYgKGFoKQorCQlhdGg5a19od19kZXRhY2goYWgpOwogCWlmIChzdGF0dXMpCiAJCSpzdGF0dXMgPSBlY29kZTsKIAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2JiKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfYmIoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBzeW50aERlbGF5OwpAQCAtOTQ1LDcgKzkyMyw3IEBACiAJdWRlbGF5KHN5bnRoRGVsYXkgKyBCQVNFX0FDVElWQVRFX0RFTEFZKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9xb3Moc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9xb3Moc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJUkVHX1dSSVRFKGFoLCBBUl9NSUNfUU9TX0NPTlRST0wsIDB4MTAwYWEpOwogCVJFR19XUklURShhaCwgQVJfTUlDX1FPU19TRUxFQ1QsIDB4MzIxMCk7CkBAIC05NjIsNyArOTQwLDcgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1RYT1BfMTJfMTUsIDB4RkZGRkZGRkYpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3BsbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19pbml0X3BsbChzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBwbGw7CkBAIC0xMDIzLDI3ICsxMDAxLDI2IEBACiAJCQkJcGxsIHw9IFNNKDB4YiwgQVJfUlRDX1BMTF9ESVYpOwogCQl9CiAJfQotCVJFR19XUklURShhaCwgKHUxNikgKEFSX1JUQ19QTExfQ09OVFJPTCksIHBsbCk7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUExMX0NPTlRST0wsIHBsbCk7CiAKIAl1ZGVsYXkoUlRDX1BMTF9TRVRUTEVfREVMQVkpOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfU0xFRVBfQ0xLLCBBUl9SVENfRk9SQ0VfREVSSVZFRF9DTEspOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19pbml0X2NoYWluX21hc2tzKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfY2hhaW5fbWFza3Moc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlpbnQgcnhfY2hhaW5tYXNrLCB0eF9jaGFpbm1hc2s7CiAKLQlyeF9jaGFpbm1hc2sgPSBhaHAtPmFoX3J4Y2hhaW5tYXNrOwotCXR4X2NoYWlubWFzayA9IGFocC0+YWhfdHhjaGFpbm1hc2s7CisJcnhfY2hhaW5tYXNrID0gYWgtPnJ4Y2hhaW5tYXNrOworCXR4X2NoYWlubWFzayA9IGFoLT50eGNoYWlubWFzazsKIAogCXN3aXRjaCAocnhfY2hhaW5tYXNrKSB7CiAJY2FzZSAweDU6CiAJCVJFR19TRVRfQklUKGFoLCBBUl9QSFlfQU5BTE9HX1NXQVAsCiAJCQkgICAgQVJfUEhZX1NXQVBfQUxUX0NIQUlOKTsKIAljYXNlIDB4MzoKLQkJaWYgKCgoYWgpLT5haF9tYWNWZXJzaW9uIDw9IEFSX1NSRVZfVkVSU0lPTl85MTYwKSkgeworCQlpZiAoKChhaCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA8PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkpIHsKIAkJCVJFR19XUklURShhaCwgQVJfUEhZX1JYX0NIQUlOTUFTSywgMHg3KTsKIAkJCVJFR19XUklURShhaCwgQVJfUEhZX0NBTF9DSEFJTk1BU0ssIDB4Nyk7CiAJCQlicmVhazsKQEAgLTEwNjgsMjggKzEwNDUsMjYgQEAKIAkJCSAgUkVHX1JFQUQoYWgsIEFSX1BIWV9BTkFMT0dfU1dBUCkgfCAweDAwMDAwMDAxKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9pbnRlcnJ1cHRfbWFza3Moc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9pbnRlcnJ1cHRfbWFza3Moc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCSAgZW51bSBubDgwMjExX2lmdHlwZSBvcG1vZGUpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCWFocC0+YWhfbWFza1JlZyA9IEFSX0lNUl9UWEVSUiB8CisJYWgtPm1hc2tfcmVnID0gQVJfSU1SX1RYRVJSIHwKIAkJQVJfSU1SX1RYVVJOIHwKIAkJQVJfSU1SX1JYRVJSIHwKIAkJQVJfSU1SX1JYT1JOIHwKIAkJQVJfSU1SX0JDTk1JU0M7CiAKLQlpZiAoYWhwLT5haF9pbnRyTWl0aWdhdGlvbikKLQkJYWhwLT5haF9tYXNrUmVnIHw9IEFSX0lNUl9SWElOVE0gfCBBUl9JTVJfUlhNSU5UUjsKKwlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikKKwkJYWgtPm1hc2tfcmVnIHw9IEFSX0lNUl9SWElOVE0gfCBBUl9JTVJfUlhNSU5UUjsKIAllbHNlCi0JCWFocC0+YWhfbWFza1JlZyB8PSBBUl9JTVJfUlhPSzsKKwkJYWgtPm1hc2tfcmVnIHw9IEFSX0lNUl9SWE9LOwogCi0JYWhwLT5haF9tYXNrUmVnIHw9IEFSX0lNUl9UWE9LOworCWFoLT5tYXNrX3JlZyB8PSBBUl9JTVJfVFhPSzsKIAogCWlmIChvcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCWFocC0+YWhfbWFza1JlZyB8PSBBUl9JTVJfTUlCOworCQlhaC0+bWFza19yZWcgfD0gQVJfSU1SX01JQjsKIAotCVJFR19XUklURShhaCwgQVJfSU1SLCBhaHAtPmFoX21hc2tSZWcpOworCVJFR19XUklURShhaCwgQVJfSU1SLCBhaC0+bWFza19yZWcpOwogCVJFR19XUklURShhaCwgQVJfSU1SX1MyLCBSRUdfUkVBRChhaCwgQVJfSU1SX1MyKSB8IEFSX0lNUl9TMl9HVFQpOwogCiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CkBAIC0xMDk5LDcyICsxMDc0LDY0IEBACiAJfQogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfYWNrX3RpbWVvdXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXMpCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfYWNrX3RpbWVvdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHVzID4gYXRoOWtfaHdfbWFjX3RvX3VzZWMoYWgsIE1TKDB4ZmZmZmZmZmYsIEFSX1RJTUVfT1VUX0FDSykpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYmFkIGFjayB0aW1lb3V0ICV1XG4iLCB1cyk7Ci0JCWFocC0+YWhfYWNrdGltZW91dCA9ICh1MzIpIC0xOworCQlhaC0+YWNrdGltZW91dCA9ICh1MzIpIC0xOwogCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsCiAJCQkgICAgICBBUl9USU1FX09VVF9BQ0ssIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaHAtPmFoX2Fja3RpbWVvdXQgPSB1czsKKwkJYWgtPmFja3RpbWVvdXQgPSB1czsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfY3RzX3RpbWVvdXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgdXMpCitzdGF0aWMgYm9vbCBhdGg5a19od19zZXRfY3RzX3RpbWVvdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHVzID4gYXRoOWtfaHdfbWFjX3RvX3VzZWMoYWgsIE1TKDB4ZmZmZmZmZmYsIEFSX1RJTUVfT1VUX0NUUykpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYmFkIGN0cyB0aW1lb3V0ICV1XG4iLCB1cyk7Ci0JCWFocC0+YWhfY3RzdGltZW91dCA9ICh1MzIpIC0xOworCQlhaC0+Y3RzdGltZW91dCA9ICh1MzIpIC0xOwogCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsCiAJCQkgICAgICBBUl9USU1FX09VVF9DVFMsIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaHAtPmFoX2N0c3RpbWVvdXQgPSB1czsKKwkJYWgtPmN0c3RpbWVvdXQgPSB1czsKIAkJcmV0dXJuIHRydWU7CiAJfQogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfZ2xvYmFsX3R4dGltZW91dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB0dSkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9nbG9iYWxfdHh0aW1lb3V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdHUpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQogCWlmICh0dSA+IDB4RkZGRikgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19YTUlULAogCQkJImJhZCBnbG9iYWwgdHggdGltZW91dCAldVxuIiwgdHUpOwotCQlhaHAtPmFoX2dsb2JhbHR4dGltZW91dCA9ICh1MzIpIC0xOworCQlhaC0+Z2xvYmFsdHh0aW1lb3V0ID0gKHUzMikgLTE7CiAJCXJldHVybiBmYWxzZTsKIAl9IGVsc2UgewogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HVFhUTywgQVJfR1RYVE9fVElNRU9VVF9MSU1JVCwgdHUpOwotCQlhaHAtPmFoX2dsb2JhbHR4dGltZW91dCA9IHR1OworCQlhaC0+Z2xvYmFsdHh0aW1lb3V0ID0gdHU7CiAJCXJldHVybiB0cnVlOwogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF91c2VyX3NldHRpbmdzKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOworCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYWgtPm1pc2NfbW9kZSAweCV4XG4iLAorCQlhaC0+bWlzY19tb2RlKTsKIAotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiYWhwLT5haF9taXNjTW9kZSAweCV4XG4iLAotCQlhaHAtPmFoX21pc2NNb2RlKTsKLQotCWlmIChhaHAtPmFoX21pc2NNb2RlICE9IDApCisJaWYgKGFoLT5taXNjX21vZGUgIT0gMCkKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ1VfTUlTQywKLQkJCSAgUkVHX1JFQUQoYWgsIEFSX1BDVV9NSVNDKSB8IGFocC0+YWhfbWlzY01vZGUpOwotCWlmIChhaHAtPmFoX3Nsb3R0aW1lICE9ICh1MzIpIC0xKQotCQlhdGg5a19od19zZXRzbG90dGltZShhaCwgYWhwLT5haF9zbG90dGltZSk7Ci0JaWYgKGFocC0+YWhfYWNrdGltZW91dCAhPSAodTMyKSAtMSkKLQkJYXRoOWtfaHdfc2V0X2Fja190aW1lb3V0KGFoLCBhaHAtPmFoX2Fja3RpbWVvdXQpOwotCWlmIChhaHAtPmFoX2N0c3RpbWVvdXQgIT0gKHUzMikgLTEpCi0JCWF0aDlrX2h3X3NldF9jdHNfdGltZW91dChhaCwgYWhwLT5haF9jdHN0aW1lb3V0KTsKLQlpZiAoYWhwLT5haF9nbG9iYWx0eHRpbWVvdXQgIT0gKHUzMikgLTEpCi0JCWF0aDlrX2h3X3NldF9nbG9iYWxfdHh0aW1lb3V0KGFoLCBhaHAtPmFoX2dsb2JhbHR4dGltZW91dCk7CisJCQkgIFJFR19SRUFEKGFoLCBBUl9QQ1VfTUlTQykgfCBhaC0+bWlzY19tb2RlKTsKKwlpZiAoYWgtPnNsb3R0aW1lICE9ICh1MzIpIC0xKQorCQlhdGg5a19od19zZXRzbG90dGltZShhaCwgYWgtPnNsb3R0aW1lKTsKKwlpZiAoYWgtPmFja3RpbWVvdXQgIT0gKHUzMikgLTEpCisJCWF0aDlrX2h3X3NldF9hY2tfdGltZW91dChhaCwgYWgtPmFja3RpbWVvdXQpOworCWlmIChhaC0+Y3RzdGltZW91dCAhPSAodTMyKSAtMSkKKwkJYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KGFoLCBhaC0+Y3RzdGltZW91dCk7CisJaWYgKGFoLT5nbG9iYWx0eHRpbWVvdXQgIT0gKHUzMikgLTEpCisJCWF0aDlrX2h3X3NldF9nbG9iYWxfdHh0aW1lb3V0KGFoLCBhaC0+Z2xvYmFsdHh0aW1lb3V0KTsKIH0KIAogY29uc3QgY2hhciAqYXRoOWtfaHdfcHJvYmUodTE2IHZlbmRvcmlkLCB1MTYgZGV2aWQpCkBAIC0xMTczLDcgKzExNDAsNyBAQAogCQlhdGg5a19od19kZXZuYW1lKGRldmlkKSA6IE5VTEw7CiB9CiAKLXZvaWQgYXRoOWtfaHdfZGV0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWlmICghQVJfU1JFVl85MTAwKGFoKSkKIAkJYXRoOWtfaHdfYW5pX2RldGFjaChhaCk7CkBAIC0xMTgzLDE5ICsxMTUwLDE5IEBACiAJa2ZyZWUoYWgpOwogfQogCi1zdHJ1Y3QgYXRoX2hhbCAqYXRoOWtfaHdfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJdm9pZCBfX2lvbWVtICptZW0sIGludCAqZXJyb3IpCitzdHJ1Y3QgYXRoX2h3ICphdGg5a19od19hdHRhY2godTE2IGRldmlkLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICplcnJvcikKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBOVUxMOworCXN0cnVjdCBhdGhfaHcgKmFoID0gTlVMTDsKIAogCXN3aXRjaCAoZGV2aWQpIHsKIAljYXNlIEFSNTQxNl9ERVZJRF9QQ0k6CiAJY2FzZSBBUjU0MTZfREVWSURfUENJRToKKwljYXNlIEFSNTQxNl9BUjkxMDBfREVWSUQ6CiAJY2FzZSBBUjkxNjBfREVWSURfUENJOgogCWNhc2UgQVI5MjgwX0RFVklEX1BDSToKIAljYXNlIEFSOTI4MF9ERVZJRF9QQ0lFOgogCWNhc2UgQVI5Mjg1X0RFVklEX1BDSUU6Ci0JCWFoID0gYXRoOWtfaHdfZG9fYXR0YWNoKGRldmlkLCBzYywgbWVtLCBlcnJvcik7CisJCWFoID0gYXRoOWtfaHdfZG9fYXR0YWNoKGRldmlkLCBzYywgZXJyb3IpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkqZXJyb3IgPSAtRU5YSU87CkBAIC0xMjA5LDcgKzExNzYsNyBAQAogLyogSU5JICovCiAvKioqKioqKi8KIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfb3ZlcnJpZGVfaW5pKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X292ZXJyaWRlX2luaShzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCS8qCkBAIC0xMjIwLDIwICsxMTg3LDIwIEBACiAJUkVHX1NFVF9CSVQoYWgsIEFSX0RJQUdfU1csIChBUl9ESUFHX1JYX0RJUyB8IEFSX0RJQUdfUlhfQUJPUlQpKTsKIAogCi0JaWYgKCFBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKGFoKSB8fAorCWlmICghQVJfU1JFVl81NDE2XzIwX09SX0xBVEVSKGFoKSB8fAogCSAgICBBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQogCQlyZXR1cm47CiAKIAlSRUdfV1JJVEUoYWgsIDB4OTgwMCArICg2NTEgPDwgMiksIDB4MTEpOwogfQogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X2RlZl9pbmlfZml4dXAoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHUzMiBhdGg5a19od19kZWZfaW5pX2ZpeHVwKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgc3RydWN0IGFyNTQxNl9lZXByb21fZGVmICpwRWVwRGF0YSwKIAkJCSAgICAgIHUzMiByZWcsIHUzMiB2YWx1ZSkKIHsKIAlzdHJ1Y3QgYmFzZV9lZXBfaGVhZGVyICpwQmFzZSA9ICYocEVlcERhdGEtPmJhc2VFZXBIZWFkZXIpOwogCi0Jc3dpdGNoIChhaC0+YWhfZGV2aWQpIHsKKwlzd2l0Y2ggKGFoLT5od192ZXJzaW9uLmRldmlkKSB7CiAJY2FzZSBBUjkyODBfREVWSURfUENJOgogCQlpZiAocmVnID09IDB4Nzg5NCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfQU5ZLApAQCAtMTI2MSwyNCArMTIyOCwzMyBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIHUzMiBhdGg5a19od19pbmlfZml4dXAoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIHUzMiBhdGg5a19od19pbmlfZml4dXAoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgICBzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKnBFZXBEYXRhLAogCQkJICAgICAgdTMyIHJlZywgdTMyIHZhbHVlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlpZiAoYWhwLT5haF9lZXBfbWFwID09IEVFUF9NQVBfNEtCSVRTKQorCWlmIChhaC0+ZWVwX21hcCA9PSBFRVBfTUFQXzRLQklUUykKIAkJcmV0dXJuIHZhbHVlOwogCWVsc2UKIAkJcmV0dXJuIGF0aDlrX2h3X2RlZl9pbmlfZml4dXAoYWgsIHBFZXBEYXRhLCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBhdGg5a19od19wcm9jZXNzX2luaShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19vbGNfaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwl1MzIgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUjkyODBfVFhfR0FJTl9UQUJMRV9TSVpFOyBpKyspCisJCWFoLT5vcmlnaW5hbEdhaW5baV0gPQorCQkJTVMoUkVHX1JFQUQoYWgsIEFSX1BIWV9UWF9HQUlOX1RCTDEgKyBpICogNCksCisJCQkJCUFSX1BIWV9UWF9HQUlOKTsKKwlhaC0+UERBRENkZWx0YSA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaHdfcHJvY2Vzc19pbmkoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkJZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CiAJaW50IGksIHJlZ1dyaXRlcyA9IDA7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBjaGFuLT5jaGFuOwogCXUzMiBtb2Rlc0luZGV4LCBmcmVxSW5kZXg7CiAJaW50IHN0YXR1czsKIApAQCAtMTMxMCw0MCArMTI4NiwzOCBAQAogCX0KIAogCVJFR19XUklURShhaCwgQVJfUEhZKDApLCAweDAwMDAwMDA3KTsKLQogCVJFR19XUklURShhaCwgQVJfUEhZX0FEQ19TRVJJQUxfQ1RMLCBBUl9QSFlfU0VMX0VYVEVSTkFMX1JBRElPKTsKKwlhaC0+ZWVwX29wcy0+c2V0X2FkZGFjKGFoLCBjaGFuKTsKIAotCWF0aDlrX2h3X3NldF9hZGRhYyhhaCwgY2hhbik7Ci0KLQlpZiAoQVJfU1JFVl81NDE2X1YyMl9PUl9MQVRFUihhaCkpIHsKLQkJUkVHX1dSSVRFX0FSUkFZKCZhaHAtPmFoX2luaUFkZGFjLCAxLCByZWdXcml0ZXMpOworCWlmIChBUl9TUkVWXzU0MTZfMjJfT1JfTEFURVIoYWgpKSB7CisJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaUFkZGFjLCAxLCByZWdXcml0ZXMpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBhcjU0MTZJbmlBcnJheSB0ZW1wOwogCQl1MzIgYWRkYWNTaXplID0KLQkJCXNpemVvZih1MzIpICogYWhwLT5haF9pbmlBZGRhYy5pYV9yb3dzICoKLQkJCWFocC0+YWhfaW5pQWRkYWMuaWFfY29sdW1uczsKKwkJCXNpemVvZih1MzIpICogYWgtPmluaUFkZGFjLmlhX3Jvd3MgKgorCQkJYWgtPmluaUFkZGFjLmlhX2NvbHVtbnM7CiAKLQkJbWVtY3B5KGFocC0+YWhfYWRkYWM1NDE2XzIxLAotCQkgICAgICAgYWhwLT5haF9pbmlBZGRhYy5pYV9hcnJheSwgYWRkYWNTaXplKTsKKwkJbWVtY3B5KGFoLT5hZGRhYzU0MTZfMjEsCisJCSAgICAgICBhaC0+aW5pQWRkYWMuaWFfYXJyYXksIGFkZGFjU2l6ZSk7CiAKLQkJKGFocC0+YWhfYWRkYWM1NDE2XzIxKVszMSAqIGFocC0+YWhfaW5pQWRkYWMuaWFfY29sdW1ucyArIDFdID0gMDsKKwkJKGFoLT5hZGRhYzU0MTZfMjEpWzMxICogYWgtPmluaUFkZGFjLmlhX2NvbHVtbnMgKyAxXSA9IDA7CiAKLQkJdGVtcC5pYV9hcnJheSA9IGFocC0+YWhfYWRkYWM1NDE2XzIxOwotCQl0ZW1wLmlhX2NvbHVtbnMgPSBhaHAtPmFoX2luaUFkZGFjLmlhX2NvbHVtbnM7Ci0JCXRlbXAuaWFfcm93cyA9IGFocC0+YWhfaW5pQWRkYWMuaWFfcm93czsKKwkJdGVtcC5pYV9hcnJheSA9IGFoLT5hZGRhYzU0MTZfMjE7CisJCXRlbXAuaWFfY29sdW1ucyA9IGFoLT5pbmlBZGRhYy5pYV9jb2x1bW5zOworCQl0ZW1wLmlhX3Jvd3MgPSBhaC0+aW5pQWRkYWMuaWFfcm93czsKIAkJUkVHX1dSSVRFX0FSUkFZKCZ0ZW1wLCAxLCByZWdXcml0ZXMpOwogCX0KIAogCVJFR19XUklURShhaCwgQVJfUEhZX0FEQ19TRVJJQUxfQ1RMLCBBUl9QSFlfU0VMX0lOVEVSTkFMX0FEREFDKTsKIAotCWZvciAoaSA9IDA7IGkgPCBhaHAtPmFoX2luaU1vZGVzLmlhX3Jvd3M7IGkrKykgewotCQl1MzIgcmVnID0gSU5JX1JBKCZhaHAtPmFoX2luaU1vZGVzLCBpLCAwKTsKLQkJdTMyIHZhbCA9IElOSV9SQSgmYWhwLT5haF9pbmlNb2RlcywgaSwgbW9kZXNJbmRleCk7CisJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlNb2Rlcy5pYV9yb3dzOyBpKyspIHsKKwkJdTMyIHJlZyA9IElOSV9SQSgmYWgtPmluaU1vZGVzLCBpLCAwKTsKKwkJdTMyIHZhbCA9IElOSV9SQSgmYWgtPmluaU1vZGVzLCBpLCBtb2Rlc0luZGV4KTsKIAogCQlSRUdfV1JJVEUoYWgsIHJlZywgdmFsKTsKIAogCQlpZiAocmVnID49IDB4NzgwMCAmJiByZWcgPCAweDc4YTAKLQkJICAgICYmIGFoLT5haF9jb25maWcuYW5hbG9nX3NoaWZ0cmVnKSB7CisJCSAgICAmJiBhaC0+Y29uZmlnLmFuYWxvZ19zaGlmdHJlZykgewogCQkJdWRlbGF5KDEwMCk7CiAJCX0KIApAQCAtMTM1MSwxOSArMTMyNSwyMCBAQAogCX0KIAogCWlmIChBUl9TUkVWXzkyODAoYWgpKQotCQlSRUdfV1JJVEVfQVJSQVkoJmFocC0+YWhfaW5pTW9kZXNSeEdhaW4sIG1vZGVzSW5kZXgsIHJlZ1dyaXRlcyk7CisJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLCBtb2Rlc0luZGV4LCByZWdXcml0ZXMpOwogCi0JaWYgKEFSX1NSRVZfOTI4MChhaCkpCi0JCVJFR19XUklURV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc1R4R2FpbiwgbW9kZXNJbmRleCwgcmVnV3JpdGVzKTsKKwlpZiAoQVJfU1JFVl85MjgwKGFoKSB8fCAoQVJfU1JFVl85Mjg1KGFoKSAmJgorCSAgICBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoYWgpKSkKKwkJUkVHX1dSSVRFX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sIG1vZGVzSW5kZXgsIHJlZ1dyaXRlcyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlDb21tb24uaWFfcm93czsgaSsrKSB7Ci0JCXUzMiByZWcgPSBJTklfUkEoJmFocC0+YWhfaW5pQ29tbW9uLCBpLCAwKTsKLQkJdTMyIHZhbCA9IElOSV9SQSgmYWhwLT5haF9pbmlDb21tb24sIGksIDEpOworCWZvciAoaSA9IDA7IGkgPCBhaC0+aW5pQ29tbW9uLmlhX3Jvd3M7IGkrKykgeworCQl1MzIgcmVnID0gSU5JX1JBKCZhaC0+aW5pQ29tbW9uLCBpLCAwKTsKKwkJdTMyIHZhbCA9IElOSV9SQSgmYWgtPmluaUNvbW1vbiwgaSwgMSk7CiAKIAkJUkVHX1dSSVRFKGFoLCByZWcsIHZhbCk7CiAKIAkJaWYgKHJlZyA+PSAweDc4MDAgJiYgcmVnIDwgMHg3OGEwCi0JCSAgICAmJiBhaC0+YWhfY29uZmlnLmFuYWxvZ19zaGlmdHJlZykgeworCQkgICAgJiYgYWgtPmNvbmZpZy5hbmFsb2dfc2hpZnRyZWcpIHsKIAkJCXVkZWxheSgxMDApOwogCQl9CiAKQEAgLTEzNzMsNyArMTM0OCw3IEBACiAJYXRoOWtfaHdfd3JpdGVfcmVncyhhaCwgbW9kZXNJbmRleCwgZnJlcUluZGV4LCByZWdXcml0ZXMpOwogCiAJaWYgKEFSX1NSRVZfOTI4MF8yMChhaCkgJiYgSVNfQ0hBTl9BXzVNSFpfU1BBQ0VEKGNoYW4pKSB7Ci0JCVJFR19XUklURV9BUlJBWSgmYWhwLT5haF9pbmlNb2Rlc0FkZGl0aW9uYWwsIG1vZGVzSW5kZXgsCisJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaU1vZGVzQWRkaXRpb25hbCwgbW9kZXNJbmRleCwKIAkJCQlyZWdXcml0ZXMpOwogCX0KIApAQCAtMTM4MSwxMyArMTM1NiwxNSBAQAogCWF0aDlrX2h3X3NldF9yZWdzKGFoLCBjaGFuLCBtYWNtb2RlKTsKIAlhdGg5a19od19pbml0X2NoYWluX21hc2tzKGFoKTsKIAotCXN0YXR1cyA9IGF0aDlrX2h3X3NldF90eHBvd2VyKGFoLCBjaGFuLAotCQkJCSAgICAgIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCi0JCQkJICAgICAgYXRoOWtfcmVnZF9nZXRfYW50ZW5uYV9hbGxvd2VkKGFoLAotCQkJCQkJCQkgICAgIGNoYW4pLAotCQkJCSAgICAgIGNoYW4tPm1heFJlZ1R4UG93ZXIgKiAyLAotCQkJCSAgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKLQkJCQkJICAodTMyKSBhaC0+YWhfcG93ZXJMaW1pdCkpOworCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikKKwkJYXRoOWtfb2xjX2luaXQoYWgpOworCisJc3RhdHVzID0gYWgtPmVlcF9vcHMtPnNldF90eHBvd2VyKGFoLCBjaGFuLAorCQkJCSAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKKwkJCQkgIGNoYW5uZWwtPm1heF9hbnRlbm5hX2dhaW4gKiAyLAorCQkJCSAgY2hhbm5lbC0+bWF4X3Bvd2VyICogMiwKKwkJCQkgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkgICAgICAodTMyKSBhaC0+cmVndWxhdG9yeS5wb3dlcl9saW1pdCkpOwogCWlmIChzdGF0dXMgIT0gMCkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19QT1dFUl9NR01ULAogCQkJImVycm9yIGluaXQnaW5nIHRyYW5zbWl0IHBvd2VyXG4iKTsKQEAgLTE0MDcsNyArMTM4NCw3IEBACiAvKiBSZXNldCBhbmQgQ2hhbm5lbCBTd2l0Y2hpbmcgUm91dGluZXMgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmZtb2RlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmZtb2RlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MzIgcmZNb2RlID0gMDsKIApAQCAtMTQyNywxMiArMTQwNCwxMiBAQAogCVJFR19XUklURShhaCwgQVJfUEhZX01PREUsIHJmTW9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X21hcmtfcGh5X2luYWN0aXZlKHN0cnVjdCBhdGhfaGFsICphaCkKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X21hcmtfcGh5X2luYWN0aXZlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19XUklURShhaCwgQVJfUEhZX0FDVElWRSwgQVJfUEhZX0FDVElWRV9ESVMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfc2V0X2RtYShzdHJ1Y3QgYXRoX2hhbCAqYWgpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfc2V0X2RtYShzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgcmVndmFsOwogCkBAIC0xNDQyLDcgKzE0MTksNyBAQAogCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUl9UWENGRykgJiB+QVJfVFhDRkdfRE1BU1pfTUFTSzsKIAlSRUdfV1JJVEUoYWgsIEFSX1RYQ0ZHLCByZWd2YWwgfCBBUl9UWENGR19ETUFTWl8xMjhCKTsKIAotCVJFR19STVdfRklFTEQoYWgsIEFSX1RYQ0ZHLCBBUl9GVFJJRywgYWgtPmFoX3R4VHJpZ0xldmVsKTsKKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9UWENGRywgQVJfRlRSSUcsIGFoLT50eF90cmlnX2xldmVsKTsKIAogCXJlZ3ZhbCA9IFJFR19SRUFEKGFoLCBBUl9SWENGRykgJiB+QVJfUlhDRkdfRE1BU1pfTUFTSzsKIAlSRUdfV1JJVEUoYWgsIEFSX1JYQ0ZHLCByZWd2YWwgfCBBUl9SWENGR19ETUFTWl8xMjhCKTsKQEAgLTE0NTgsNyArMTQzNSw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfb3BlcmF0aW5nX21vZGUoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgb3Btb2RlKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgb3Btb2RlKQogewogCXUzMiB2YWw7CiAKQEAgLTE0NzEsNiArMTQ0OCw3IEBACiAJCVJFR19DTFJfQklUKGFoLCBBUl9DRkcsIEFSX0NGR19BUF9BREhPQ19JTkRJQ0FUSU9OKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCVJFR19XUklURShhaCwgQVJfU1RBX0lEMSwgdmFsIHwgQVJfU1RBX0lEMV9BREhPQwogCQkJICB8IEFSX1NUQV9JRDFfS1NSQ0hfTU9ERSk7CiAJCVJFR19TRVRfQklUKGFoLCBBUl9DRkcsIEFSX0NGR19BUF9BREhPQ19JTkRJQ0FUSU9OKTsKQEAgLTE0ODIsNyArMTQ2MCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfZ2V0X2RlbHRhX3Nsb3BlX3ZhbHMoc3RydWN0IGF0aF9oYWwgKmFoLAorc3RhdGljIGlubGluZSB2b2lkIGF0aDlrX2h3X2dldF9kZWx0YV9zbG9wZV92YWxzKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCQkJIHUzMiBjb2VmX3NjYWxlZCwKIAkJCQkJCSB1MzIgKmNvZWZfbWFudGlzc2EsCiAJCQkJCQkgdTMyICpjb2VmX2V4cG9uZW50KQpAQCAtMTUwMSw3ICsxNDc5LDcgQEAKIAkqY29lZl9leHBvbmVudCA9IGNvZWZfZXhwIC0gMTY7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9kZWx0YV9zbG9wZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfZGVsdGFfc2xvcGUoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MzIgY29lZl9zY2FsZWQsIGRzX2NvZWZfZXhwLCBkc19jb2VmX21hbjsKQEAgLTE1MzUsMTEgKzE1MTMsMTkgQEAKIAkJICAgICAgQVJfUEhZX0hBTEZHSV9EU0NfRVhQLCBkc19jb2VmX2V4cCk7CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9yZXNldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCB0eXBlKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgdHlwZSkKIHsKIAl1MzIgcnN0X2ZsYWdzOwogCXUzMiB0bXBSZWc7CiAKKwlpZiAoQVJfU1JFVl85MTAwKGFoKSkgeworCQl1MzIgdmFsID0gUkVHX1JFQUQoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSyk7CisJCXZhbCAmPSB+QVJfUlRDX0RFUklWRURfQ0xLX1BFUklPRDsKKwkJdmFsIHw9IFNNKDEsIEFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0QpOworCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSywgdmFsKTsKKwkJKHZvaWQpUkVHX1JFQUQoYWgsIEFSX1JUQ19ERVJJVkVEX0NMSyk7CisJfQorCiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfRk9SQ0VfV0FLRSwgQVJfUlRDX0ZPUkNFX1dBS0VfRU4gfAogCQkgIEFSX1JUQ19GT1JDRV9XQUtFX09OX0lOVCk7CiAKQEAgLTE1NjIsMTEgKzE1NDgsMTEgQEAKIAkJCXJzdF9mbGFncyB8PSBBUl9SVENfUkNfTUFDX0NPTEQ7CiAJfQogCi0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JDKSwgcnN0X2ZsYWdzKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SQywgcnN0X2ZsYWdzKTsKIAl1ZGVsYXkoNTApOwogCi0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JDKSwgMCk7Ci0JaWYgKCFhdGg5a19od193YWl0KGFoLCAodTE2KSAoQVJfUlRDX1JDKSwgQVJfUlRDX1JDX00sIDApKSB7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkMsIDApOworCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUlRDX1JDLCBBUl9SVENfUkNfTSwgMCwgQUhfV0FJVF9USU1FT1VUKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwKIAkJCSJSVEMgc3R1Y2sgaW4gTUFDIHJlc2V0XG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTU4MywxOCArMTU2OSwyMCBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfcmVzZXRfcG93ZXJfb24oc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3Bvd2VyX29uKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsIEFSX1JUQ19GT1JDRV9XQUtFX0VOIHwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9PTl9JTlQpOwogCi0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JFU0VUKSwgMCk7Ci0JUkVHX1dSSVRFKGFoLCAodTE2KSAoQVJfUlRDX1JFU0VUKSwgMSk7CisJUkVHX1dSSVRFKGFoLCBBUl9SVENfUkVTRVQsIDApOworCXVkZWxheSgyKTsKKwlSRUdfV1JJVEUoYWgsIEFSX1JUQ19SRVNFVCwgMSk7CiAKIAlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsCiAJCQkgICBBUl9SVENfU1RBVFVTLAogCQkJICAgQVJfUlRDX1NUQVRVU19NLAotCQkJICAgQVJfUlRDX1NUQVRVU19PTikpIHsKKwkJCSAgIEFSX1JUQ19TVEFUVVNfT04sCisJCQkgICBBSF9XQUlUX1RJTUVPVVQpKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiUlRDIG5vdCB3YWtpbmcgdXBcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMTYwNCw3ICsxNTkyLDcgQEAKIAlyZXR1cm4gYXRoOWtfaHdfc2V0X3Jlc2V0KGFoLCBBVEg5S19SRVNFVF9XQVJNKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB0eXBlKQorc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X3Jlc2V0X3JlZyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHR5cGUpCiB7CiAJUkVHX1dSSVRFKGFoLCBBUl9SVENfRk9SQ0VfV0FLRSwKIAkJICBBUl9SVENfRk9SQ0VfV0FLRV9FTiB8IEFSX1JUQ19GT1JDRV9XQUtFX09OX0lOVCk7CkBAIC0xNjIyLDEyICsxNjEwLDExIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcmVncyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3JlZ3Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkJICAgICAgZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CiAJdTMyIHBoeW1vZGU7CiAJdTMyIGVuYWJsZURhY0ZpZm8gPSAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlpZiAoQVJfU1JFVl85Mjg1XzEwX09SX0xBVEVSKGFoKSkKIAkJZW5hYmxlRGFjRmlmbyA9IChSRUdfUkVBRChhaCwgQVJfUEhZX1RVUkJPKSAmCkBAIC0xNjQzLDcgKzE2MzAsNyBAQAogCQkgICAgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykpCiAJCQlwaHltb2RlIHw9IEFSX1BIWV9GQ19EWU4yMDQwX1BSSV9DSDsKIAotCQlpZiAoYWhwLT5haF9leHRwcm90c3BhY2luZyA9PSBBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSkKKwkJaWYgKGFoLT5leHRwcm90c3BhY2luZyA9PSBBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSkKIAkJCXBoeW1vZGUgfD0gQVJfUEhZX0ZDX0RZTjIwNDBfRVhUX0NIOwogCX0KIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9UVVJCTywgcGh5bW9kZSk7CkBAIC0xNjU0LDU0ICsxNjQxLDMwIEBACiAJUkVHX1dSSVRFKGFoLCBBUl9DU1QsIDB4RiA8PCBBUl9DU1RfVElNRU9VVF9MSU1JVF9TKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfY2hpcF9yZXNldChzdHJ1Y3QgYXRoX2hhbCAqYWgsCitzdGF0aWMgYm9vbCBhdGg5a19od19jaGlwX3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlpZiAoIWF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1dBUk0pKQorCWlmIChPTENfRk9SX0FSOTI4MF8yMF9MQVRFUikgeworCQlpZiAoIWF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1BPV0VSX09OKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgaWYgKCFhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9XQVJNKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJaWYgKCFhdGg5a19od19zZXRwb3dlcihhaCwgQVRIOUtfUE1fQVdBS0UpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlhaHAtPmFoX2NoaXBGdWxsU2xlZXAgPSBmYWxzZTsKLQorCWFoLT5jaGlwX2Z1bGxzbGVlcCA9IGZhbHNlOwogCWF0aDlrX2h3X2luaXRfcGxsKGFoLCBjaGFuKTsKLQogCWF0aDlrX2h3X3NldF9yZm1vZGUoYWgsIGNoYW4pOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqYXRoOWtfaHdfY2hlY2tfY2hhbihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCi17Ci0JaWYgKCEoSVNfQ0hBTl8yR0haKGNoYW4pIF4gSVNfQ0hBTl81R0haKGNoYW4pKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19DSEFOTkVMLAotCQkJImludmFsaWQgY2hhbm5lbCAldS8weCV4OyBub3QgbWFya2VkIGFzICIKLQkJCSIyR0h6IG9yIDVHSHpcbiIsIGNoYW4tPmNoYW5uZWwsIGNoYW4tPmNoYW5uZWxGbGFncyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWlmICghSVNfQ0hBTl9PRkRNKGNoYW4pICYmCi0JICAgICFJU19DSEFOX0IoY2hhbikgJiYKLQkgICAgIUlTX0NIQU5fSFQyMChjaGFuKSAmJgotCSAgICAhSVNfQ0hBTl9IVDQwKGNoYW4pKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NIQU5ORUwsCi0JCQkiaW52YWxpZCBjaGFubmVsICV1LzB4JXg7IG5vdCBtYXJrZWQgYXMgIgotCQkJIk9GRE0gb3IgQ0NLIG9yIEhUMjAgb3IgSFQ0MFBMVVMgb3IgSFQ0ME1JTlVTXG4iLAotCQkJY2hhbi0+Y2hhbm5lbCwgY2hhbi0+Y2hhbm5lbEZsYWdzKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX2h3X2NoYW5uZWxfY2hhbmdlKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyBib29sIGF0aDlrX2h3X2NoYW5uZWxfY2hhbmdlKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKIAkJCQkgICAgZW51bSBhdGg5a19odF9tYWNtb2RlIG1hY21vZGUpCiB7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY2hhbi0+Y2hhbjsKIAl1MzIgc3ludGhEZWxheSwgcW51bTsKIAogCWZvciAocW51bSA9IDA7IHFudW0gPCBBUl9OVU1fUUNVOyBxbnVtKyspIHsKQEAgLTE3MTQsNyArMTY3Nyw3IEBACiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SRkJVU19SRVEsIEFSX1BIWV9SRkJVU19SRVFfRU4pOwogCWlmICghYXRoOWtfaHdfd2FpdChhaCwgQVJfUEhZX1JGQlVTX0dSQU5ULCBBUl9QSFlfUkZCVVNfR1JBTlRfRU4sCi0JCQkgICBBUl9QSFlfUkZCVVNfR1JBTlRfRU4pKSB7CisJCQkgICBBUl9QSFlfUkZCVVNfR1JBTlRfRU4sIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHX0lPLAogCQkJIkNvdWxkIG5vdCBraWxsIGJhc2ViYW5kIFJYXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTczNiwxMiArMTY5OSwxMiBAQAogCQl9CiAJfQogCi0JaWYgKGF0aDlrX2h3X3NldF90eHBvd2VyKGFoLCBjaGFuLAotCQkJCSBhdGg5a19yZWdkX2dldF9jdGwoYWgsIGNoYW4pLAotCQkJCSBhdGg5a19yZWdkX2dldF9hbnRlbm5hX2FsbG93ZWQoYWgsIGNoYW4pLAotCQkJCSBjaGFuLT5tYXhSZWdUeFBvd2VyICogMiwKLQkJCQkgbWluKCh1MzIpIE1BWF9SQVRFX1BPV0VSLAotCQkJCSAgICAgKHUzMikgYWgtPmFoX3Bvd2VyTGltaXQpKSAhPSAwKSB7CisJaWYgKGFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKKwkJCSAgICAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKKwkJCSAgICAgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCisJCQkgICAgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCisJCQkgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKSAhPSAwKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0VFUFJPTSwKIAkJCSJlcnJvciBpbml0J2luZyB0cmFuc21pdCBwb3dlclxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTE3NzEsNyArMTczNCw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3XzkyODBfc3B1cl9taXRpZ2F0ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQorc3RhdGljIHZvaWQgYXRoOWtfaHdfOTI4MF9zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlpbnQgYmJfc3B1ciA9IEFSX05PX1NQVVI7CiAJaW50IGZyZXE7CkBAIC0xODA1LDkgKzE3NjgsOSBAQAogCWF0aDlrX2h3X2dldF9jaGFubmVsX2NlbnRlcnMoYWgsIGNoYW4sICZjZW50ZXJzKTsKIAlmcmVxID0gY2VudGVycy5zeW50aF9jZW50ZXI7CiAKLQlhaC0+YWhfY29uZmlnLnNwdXJtb2RlID0gU1BVUl9FTkFCTEVfRUVQUk9NOworCWFoLT5jb25maWcuc3B1cm1vZGUgPSBTUFVSX0VOQUJMRV9FRVBST007CiAJZm9yIChpID0gMDsgaSA8IEFSX0VFUFJPTV9NT0RBTF9TUFVSUzsgaSsrKSB7Ci0JCWN1cl9iYl9zcHVyID0gYXRoOWtfaHdfZWVwcm9tX2dldF9zcHVyX2NoYW4oYWgsIGksIGlzMkdIeik7CisJCWN1cl9iYl9zcHVyID0gYWgtPmVlcF9vcHMtPmdldF9zcHVyX2NoYW5uZWwoYWgsIGksIGlzMkdIeik7CiAKIAkJaWYgKGlzMkdIeikKIAkJCWN1cl9iYl9zcHVyID0gKGN1cl9iYl9zcHVyIC8gMTApICsgQVJfQkFTRV9GUkVRXzJHSFo7CkBAIC0xOTE4LDkgKzE4ODEsOSBAQAogCQlpZiAoKGN1cl92aXRfbWFzayA+IGxvd2VyKSAmJiAoY3VyX3ZpdF9tYXNrIDwgdXBwZXIpKSB7CiAKIAkJCS8qIHdvcmthcm91bmQgZm9yIGdjYyBidWcgIzM3MDE0ICovCi0JCQl2b2xhdGlsZSBpbnQgdG1wID0gYWJzKGN1cl92aXRfbWFzayAtIGJpbik7CisJCQl2b2xhdGlsZSBpbnQgdG1wX3YgPSBhYnMoY3VyX3ZpdF9tYXNrIC0gYmluKTsKIAotCQkJaWYgKHRtcCA8IDc1KQorCQkJaWYgKHRtcF92IDwgNzUpCiAJCQkJbWFza19hbXQgPSAxOwogCQkJZWxzZQogCQkJCW1hc2tfYW10ID0gMDsKQEAgLTIwMjEsNyArMTk4NCw3IEBACiAJUkVHX1dSSVRFKGFoLCBBUl9QSFlfTUFTSzJfUF82MV80NSwgdG1wX21hc2spOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19od19zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCitzdGF0aWMgdm9pZCBhdGg5a19od19zcHVyX21pdGlnYXRlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlpbnQgYmJfc3B1ciA9IEFSX05PX1NQVVI7CiAJaW50IGJpbiwgY3VyX2JpbjsKQEAgLTIwNTAsNyArMjAxMyw3IEBACiAJbWVtc2V0KCZtYXNrX3AsIDAsIHNpemVvZihpbnQ4X3QpICogMTIzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUl9FRVBST01fTU9EQUxfU1BVUlM7IGkrKykgewotCQljdXJfYmJfc3B1ciA9IGF0aDlrX2h3X2VlcHJvbV9nZXRfc3B1cl9jaGFuKGFoLCBpLCBpczJHSHopOworCQljdXJfYmJfc3B1ciA9IGFoLT5lZXBfb3BzLT5nZXRfc3B1cl9jaGFubmVsKGFoLCBpLCBpczJHSHopOwogCQlpZiAoQVJfTk9fU1BVUiA9PSBjdXJfYmJfc3B1cikKIAkJCWJyZWFrOwogCQljdXJfYmJfc3B1ciA9IGN1cl9iYl9zcHVyIC0gKGNoYW4tPmNoYW5uZWwgKiAxMCk7CkBAIC0yMTE5LDkgKzIwODIsOSBAQAogCQlpZiAoKGN1cl92aXRfbWFzayA+IGxvd2VyKSAmJiAoY3VyX3ZpdF9tYXNrIDwgdXBwZXIpKSB7CiAKIAkJCS8qIHdvcmthcm91bmQgZm9yIGdjYyBidWcgIzM3MDE0ICovCi0JCQl2b2xhdGlsZSBpbnQgdG1wID0gYWJzKGN1cl92aXRfbWFzayAtIGJpbik7CisJCQl2b2xhdGlsZSBpbnQgdG1wX3YgPSBhYnMoY3VyX3ZpdF9tYXNrIC0gYmluKTsKIAotCQkJaWYgKHRtcCA8IDc1KQorCQkJaWYgKHRtcF92IDwgNzUpCiAJCQkJbWFza19hbXQgPSAxOwogCQkJZWxzZQogCQkJCW1hc2tfYW10ID0gMDsKQEAgLTIyMjIsNTggKzIxODUsNDcgQEAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9NQVNLMl9QXzYxXzQ1LCB0bXBfbWFzayk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKLQkJICAgIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtYWNtb2RlLAotCQkgICAgdTggdHhjaGFpbm1hc2ssIHU4IHJ4Y2hhaW5tYXNrLAotCQkgICAgZW51bSBhdGg5a19odF9leHRwcm90c3BhY2luZyBleHRwcm90c3BhY2luZywKLQkJICAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UsIGludCAqc3RhdHVzKQoraW50IGF0aDlrX2h3X3Jlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiwKKwkJICAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UpCiB7CiAJdTMyIHNhdmVMZWRTdGF0ZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjdXJjaGFuID0gYWgtPmFoX2N1cmNoYW47CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhaC0+YWhfc2M7CisJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmN1cmNoYW4gPSBhaC0+Y3VyY2hhbjsKIAl1MzIgc2F2ZURlZkFudGVubmE7CiAJdTMyIG1hY1N0YUlkMTsKLQlpbnQgZWNvZGU7Ci0JaW50IGksIHJ4X2NoYWlubWFzazsKKwlpbnQgaSwgcnhfY2hhaW5tYXNrLCByOwogCi0JYWhwLT5haF9leHRwcm90c3BhY2luZyA9IGV4dHByb3RzcGFjaW5nOwotCWFocC0+YWhfdHhjaGFpbm1hc2sgPSB0eGNoYWlubWFzazsKLQlhaHAtPmFoX3J4Y2hhaW5tYXNrID0gcnhjaGFpbm1hc2s7CisJYWgtPmV4dHByb3RzcGFjaW5nID0gc2MtPmh0X2V4dHByb3RzcGFjaW5nOworCWFoLT50eGNoYWlubWFzayA9IHNjLT50eF9jaGFpbm1hc2s7CisJYWgtPnJ4Y2hhaW5tYXNrID0gc2MtPnJ4X2NoYWlubWFzazsKIAotCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7Ci0JCWFocC0+YWhfdHhjaGFpbm1hc2sgJj0gMHgzOwotCQlhaHAtPmFoX3J4Y2hhaW5tYXNrICY9IDB4MzsKKwlpZiAoQVJfU1JFVl85Mjg1KGFoKSkgeworCQlhaC0+dHhjaGFpbm1hc2sgJj0gMHgxOworCQlhaC0+cnhjaGFpbm1hc2sgJj0gMHgxOworCX0gZWxzZSBpZiAoQVJfU1JFVl85MjgwKGFoKSkgeworCQlhaC0+dHhjaGFpbm1hc2sgJj0gMHgzOworCQlhaC0+cnhjaGFpbm1hc2sgJj0gMHgzOwogCX0KIAotCWlmIChhdGg5a19od19jaGVja19jaGFuKGFoLCBjaGFuKSA9PSBOVUxMKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0NIQU5ORUwsCi0JCQkiaW52YWxpZCBjaGFubmVsICV1LzB4JXg7IG5vIG1hcHBpbmdcbiIsCi0JCQljaGFuLT5jaGFubmVsLCBjaGFuLT5jaGFubmVsRmxhZ3MpOwotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOwotCX0KLQotCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkgewotCQllY29kZSA9IC1FSU87Ci0JCWdvdG8gYmFkOwotCX0KKwlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpCisJCXJldHVybiAtRUlPOwogCiAJaWYgKGN1cmNoYW4pCiAJCWF0aDlrX2h3X2dldG5mKGFoLCBjdXJjaGFuKTsKIAogCWlmIChiQ2hhbm5lbENoYW5nZSAmJgotCSAgICAoYWhwLT5haF9jaGlwRnVsbFNsZWVwICE9IHRydWUpICYmCi0JICAgIChhaC0+YWhfY3VyY2hhbiAhPSBOVUxMKSAmJgotCSAgICAoY2hhbi0+Y2hhbm5lbCAhPSBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCkgJiYKKwkgICAgKGFoLT5jaGlwX2Z1bGxzbGVlcCAhPSB0cnVlKSAmJgorCSAgICAoYWgtPmN1cmNoYW4gIT0gTlVMTCkgJiYKKwkgICAgKGNoYW4tPmNoYW5uZWwgIT0gYWgtPmN1cmNoYW4tPmNoYW5uZWwpICYmCiAJICAgICgoY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BTEwpID09Ci0JICAgICAoYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfQUxMKSkgJiYKKwkgICAgIChhaC0+Y3VyY2hhbi0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BTEwpKSAmJgogCSAgICAoIUFSX1NSRVZfOTI4MChhaCkgfHwgKCFJU19DSEFOX0FfNU1IWl9TUEFDRUQoY2hhbikgJiYKLQkJCQkgICAhSVNfQ0hBTl9BXzVNSFpfU1BBQ0VEKGFoLT5haF9jdXJjaGFuKSkpKSB7CisJCQkJICAgIUlTX0NIQU5fQV81TUhaX1NQQUNFRChhaC0+Y3VyY2hhbikpKSkgewogCi0JCWlmIChhdGg5a19od19jaGFubmVsX2NoYW5nZShhaCwgY2hhbiwgbWFjbW9kZSkpIHsKLQkJCWF0aDlrX2h3X2xvYWRuZihhaCwgYWgtPmFoX2N1cmNoYW4pOworCQlpZiAoYXRoOWtfaHdfY2hhbm5lbF9jaGFuZ2UoYWgsIGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoKSkgeworCQkJYXRoOWtfaHdfbG9hZG5mKGFoLCBhaC0+Y3VyY2hhbik7CiAJCQlhdGg5a19od19zdGFydF9uZmNhbChhaCk7Ci0JCQlyZXR1cm4gdHJ1ZTsKKwkJCXJldHVybiAwOwogCQl9CiAJfQogCkBAIC0yMjkxLDI4ICsyMjQzLDMyIEBACiAKIAlpZiAoIWF0aDlrX2h3X2NoaXBfcmVzZXQoYWgsIGNoYW4pKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFU0VULCAiY2hpcCByZXNldCBmYWlsZWRcbiIpOwotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoQVJfU1JFVl85MjgwKGFoKSkgewotCQlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsCi0JCQkgICAgQVJfR1BJT19KVEFHX0RJU0FCTEUpOworCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKQorCQlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsIEFSX0dQSU9fSlRBR19ESVNBQkxFKTsKIAotCQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSkgewotCQkJaWYgKElTX0NIQU5fNUdIWihjaGFuKSkKLQkJCQlhdGg5a19od19zZXRfZ3BpbyhhaCwgOSwgMCk7Ci0JCQllbHNlCi0JCQkJYXRoOWtfaHdfc2V0X2dwaW8oYWgsIDksIDEpOwotCQl9Ci0JCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIDksIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQpOwotCX0KKwlyID0gYXRoOWtfaHdfcHJvY2Vzc19pbmkoYWgsIGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CiAKLQllY29kZSA9IGF0aDlrX2h3X3Byb2Nlc3NfaW5pKGFoLCBjaGFuLCBtYWNtb2RlKTsKLQlpZiAoZWNvZGUgIT0gMCkgewotCQllY29kZSA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFkOwotCX0KKwkvKiBTZXR1cCBNRlAgb3B0aW9ucyBmb3IgQ0NNUCAqLworCWlmIChBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpKSB7CisJCS8qIE1hc2sgUmV0cnkoYjExKSwgUHdyTWd0KGIxMiksIE1vcmVEYXRhKGIxMykgdG8gMCBpbiBtZ210CisJCSAqIGZyYW1lcyB3aGVuIGNvbnN0cnVjdGluZyBDQ01QIEFBRC4gKi8KKwkJUkVHX1JNV19GSUVMRChhaCwgQVJfQUVTX01VVEVfTUFTSzEsIEFSX0FFU19NVVRFX01BU0sxX0ZDX01HTVQsCisJCQkgICAgICAweGM3ZmYpOworCQlhaC0+c3dfbWdtdF9jcnlwdG8gPSBmYWxzZTsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJLyogRGlzYWJsZSBoYXJkd2FyZSBjcnlwdG8gZm9yIG1hbmFnZW1lbnQgZnJhbWVzICovCisJCVJFR19DTFJfQklUKGFoLCBBUl9QQ1VfTUlTQ19NT0RFMiwKKwkJCSAgICBBUl9QQ1VfTUlTQ19NT0RFMl9NR01UX0NSWVBUT19FTkFCTEUpOworCQlSRUdfU0VUX0JJVChhaCwgQVJfUENVX01JU0NfTU9ERTIsCisJCQkgICAgQVJfUENVX01JU0NfTU9ERTJfTk9fQ1JZUFRPX0ZPUl9OT05fREFUQV9QS1QpOworCQlhaC0+c3dfbWdtdF9jcnlwdG8gPSB0cnVlOworCX0gZWxzZQorCQlhaC0+c3dfbWdtdF9jcnlwdG8gPSB0cnVlOwogCiAJaWYgKElTX0NIQU5fT0ZETShjaGFuKSB8fCBJU19DSEFOX0hUKGNoYW4pKQogCQlhdGg5a19od19zZXRfZGVsdGFfc2xvcGUoYWgsIGNoYW4pOwpAQCAtMjMyMiw2MSArMjI3OCw1MiBAQAogCWVsc2UKIAkJYXRoOWtfaHdfc3B1cl9taXRpZ2F0ZShhaCwgY2hhbik7CiAKLQlpZiAoIWF0aDlrX2h3X2VlcHJvbV9zZXRfYm9hcmRfdmFsdWVzKGFoLCBjaGFuKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19FRVBST00sCi0JCQkiZXJyb3Igc2V0dGluZyBib2FyZCBvcHRpb25zXG4iKTsKLQkJZWNvZGUgPSAtRUlPOwotCQlnb3RvIGJhZDsKLQl9CisJYWgtPmVlcF9vcHMtPnNldF9ib2FyZF92YWx1ZXMoYWgsIGNoYW4pOwogCiAJYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoYWgsIGNoYW4pOwogCi0JUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQwLCBnZXRfdW5hbGlnbmVkX2xlMzIoYWhwLT5haF9tYWNhZGRyKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9TVEFfSUQxLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9tYWNhZGRyICsgNCkKKwlSRUdfV1JJVEUoYWgsIEFSX1NUQV9JRDAsIGdldF91bmFsaWduZWRfbGUzMihhaC0+bWFjYWRkcikpOworCVJFR19XUklURShhaCwgQVJfU1RBX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KGFoLT5tYWNhZGRyICsgNCkKIAkJICB8IG1hY1N0YUlkMQogCQkgIHwgQVJfU1RBX0lEMV9SVFNfVVNFX0RFRgotCQkgIHwgKGFoLT5haF9jb25maWcuCisJCSAgfCAoYWgtPmNvbmZpZy4KIAkJICAgICBhY2tfNm1iID8gQVJfU1RBX0lEMV9BQ0tDVFNfNk1CIDogMCkKLQkJICB8IGFocC0+YWhfc3RhSWQxRGVmYXVsdHMpOwotCWF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShhaCwgYWgtPmFoX29wbW9kZSk7CisJCSAgfCBhaC0+c3RhX2lkMV9kZWZhdWx0cyk7CisJYXRoOWtfaHdfc2V0X29wZXJhdGluZ19tb2RlKGFoLCBhaC0+b3Btb2RlKTsKIAotCVJFR19XUklURShhaCwgQVJfQlNTTVNLTCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWRtYXNrKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tVLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZG1hc2sgKyA0KSk7CisJUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tMLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmJzc2lkbWFzaykpOworCVJFR19XUklURShhaCwgQVJfQlNTTVNLVSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5ic3NpZG1hc2sgKyA0KSk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX0RFRl9BTlRFTk5BLCBzYXZlRGVmQW50ZW5uYSk7CiAKLQlSRUdfV1JJVEUoYWgsIEFSX0JTU19JRDAsIGdldF91bmFsaWduZWRfbGUzMihhaHAtPmFoX2Jzc2lkKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NfSUQxLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZCArIDQpIHwKLQkJICAoKGFocC0+YWhfYXNzb2NJZCAmIDB4M2ZmZikgPDwgQVJfQlNTX0lEMV9BSURfUykpOworCVJFR19XUklURShhaCwgQVJfQlNTX0lEMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKHNjLT5jdXJic3NpZCkpOworCVJFR19XUklURShhaCwgQVJfQlNTX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5jdXJic3NpZCArIDQpIHwKKwkJICAoKHNjLT5jdXJhaWQgJiAweDNmZmYpIDw8IEFSX0JTU19JRDFfQUlEX1MpKTsKIAogCVJFR19XUklURShhaCwgQVJfSVNSLCB+MCk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1JTU0lfVEhSLCBJTklUX1JTU0lfVEhSKTsKIAogCWlmIChBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoYWgpKSB7Ci0JCWlmICghKGF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChhaCwgY2hhbikpKSB7Ci0JCQllY29kZSA9IC1FSU87Ci0JCQlnb3RvIGJhZDsKLQkJfQorCQlpZiAoIShhdGg5a19od19hcjkyODBfc2V0X2NoYW5uZWwoYWgsIGNoYW4pKSkKKwkJCXJldHVybiAtRUlPOwogCX0gZWxzZSB7Ci0JCWlmICghKGF0aDlrX2h3X3NldF9jaGFubmVsKGFoLCBjaGFuKSkpIHsKLQkJCWVjb2RlID0gLUVJTzsKLQkJCWdvdG8gYmFkOwotCQl9CisJCWlmICghKGF0aDlrX2h3X3NldF9jaGFubmVsKGFoLCBjaGFuKSkpCisJCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJfTlVNX0RDVTsgaSsrKQogCQlSRUdfV1JJVEUoYWgsIEFSX0RRQ1VNQVNLKGkpLCAxIDw8IGkpOwogCi0JYWhwLT5haF9pbnRyVHhxcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGFoLT5haF9jYXBzLnRvdGFsX3F1ZXVlczsgaSsrKQorCWFoLT5pbnRyX3R4cXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBhaC0+Y2Fwcy50b3RhbF9xdWV1ZXM7IGkrKykKIAkJYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKGFoLCBpKTsKIAotCWF0aDlrX2h3X2luaXRfaW50ZXJydXB0X21hc2tzKGFoLCBhaC0+YWhfb3Btb2RlKTsKKwlhdGg5a19od19pbml0X2ludGVycnVwdF9tYXNrcyhhaCwgYWgtPm9wbW9kZSk7CiAJYXRoOWtfaHdfaW5pdF9xb3MoYWgpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWlmIChhaC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQlhdGg5a19lbmFibGVfcmZraWxsKGFoKTsKICNlbmRpZgogCWF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhhaCk7CkBAIC0yMzg4LDcgKzIzMzUsNyBAQAogCiAJUkVHX1dSSVRFKGFoLCBBUl9PQlMsIDgpOwogCi0JaWYgKGFocC0+YWhfaW50ck1pdGlnYXRpb24pIHsKKwlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikgewogCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1JJTVQsIEFSX1JJTVRfTEFTVCwgNTAwKTsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUklNVCwgQVJfUklNVF9GSVJTVCwgMjAwMCk7CkBAIC0yMzk2LDEyICsyMzQzLDEwIEBACiAKIAlhdGg5a19od19pbml0X2JiKGFoLCBjaGFuKTsKIAotCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKXsKLQkJZWNvZGUgPSAtRUlPOzsKLQkJZ290byBiYWQ7Ci0JfQorCWlmICghYXRoOWtfaHdfaW5pdF9jYWwoYWgsIGNoYW4pKQorCQlyZXR1cm4gLUVJTzs7CiAKLQlyeF9jaGFpbm1hc2sgPSBhaHAtPmFoX3J4Y2hhaW5tYXNrOworCXJ4X2NoYWlubWFzayA9IGFoLT5yeGNoYWlubWFzazsKIAlpZiAoKHJ4X2NoYWlubWFzayA9PSAweDUpIHx8IChyeF9jaGFpbm1hc2sgPT0gMHgzKSkgewogCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9SWF9DSEFJTk1BU0ssIHJ4X2NoYWlubWFzayk7CiAJCVJFR19XUklURShhaCwgQVJfUEhZX0NBTF9DSEFJTk1BU0ssIHJ4X2NoYWlubWFzayk7CkBAIC0yNDI4LDIyICsyMzczLDE4IEBACiAjZW5kaWYKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKLWJhZDoKLQlpZiAoc3RhdHVzKQotCQkqc3RhdHVzID0gZWNvZGU7Ci0JcmV0dXJuIGZhbHNlOworCXJldHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogS2V5IENhY2hlIE1hbmFnZW1lbnQgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKiovCiAKLWJvb2wgYXRoOWtfaHdfa2V5cmVzZXQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpCitib29sIGF0aDlrX2h3X2tleXJlc2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnkpCiB7CiAJdTMyIGtleVR5cGU7CiAKLQlpZiAoZW50cnkgPj0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZSkgeworCWlmIChlbnRyeSA+PSBhaC0+Y2Fwcy5rZXljYWNoZV9zaXplKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJImVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yNDcwLDE3ICsyNDExLDE3IEBACiAKIAl9CiAKLQlpZiAoYWgtPmFoX2N1cmNoYW4gPT0gTlVMTCkKKwlpZiAoYWgtPmN1cmNoYW4gPT0gTlVMTCkKIAkJcmV0dXJuIHRydWU7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19rZXlzZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnksIGNvbnN0IHU4ICptYWMpCitib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5LCBjb25zdCB1OCAqbWFjKQogewogCXUzMiBtYWNIaSwgbWFjTG87CiAKLQlpZiAoZW50cnkgPj0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZSkgeworCWlmIChlbnRyeSA+PSBhaC0+Y2Fwcy5rZXljYWNoZV9zaXplKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJImVudHJ5ICV1IG91dCBvZiByYW5nZVxuIiwgZW50cnkpOwogCQlyZXR1cm4gZmFsc2U7CkBAIC0yNTA0LDE3ICsyNDQ1LDEzIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCwgdTE2IGVudHJ5LAorYm9vbCBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSwKIAkJCQkgY29uc3Qgc3RydWN0IGF0aDlrX2tleXZhbCAqaywKLQkJCQkgY29uc3QgdTggKm1hYywgaW50IHhvcktleSkKKwkJCQkgY29uc3QgdTggKm1hYykKIHsKLQljb25zdCBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJdTMyIGtleTAsIGtleTEsIGtleTIsIGtleTMsIGtleTQ7CiAJdTMyIGtleVR5cGU7Ci0JdTMyIHhvck1hc2sgPSB4b3JLZXkgPwotCQkoQVRIOUtfS0VZX1hPUiA8PCAyNCB8IEFUSDlLX0tFWV9YT1IgPDwgMTYgfCBBVEg5S19LRVlfWE9SIDw8IDgKLQkJIHwgQVRIOUtfS0VZX1hPUikgOiAwOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKIAlpZiAoZW50cnkgPj0gcENhcC0+a2V5Y2FjaGVfc2l6ZSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19LRVlDQUNIRSwKQEAgLTI1MzAsNyArMjQ2Nyw3IEBACiAJCWlmICghKHBDYXAtPmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0lQSEVSX0FFU0NDTSkpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0tFWUNBQ0hFLAogCQkJCSJBRVMtQ0NNIG5vdCBzdXBwb3J0ZWQgYnkgbWFjIHJldiAweCV4XG4iLAotCQkJCWFoLT5haF9tYWNSZXYpOworCQkJCWFoLT5od192ZXJzaW9uLm1hY1Jldik7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJa2V5VHlwZSA9IEFSX0tFWVRBQkxFX1RZUEVfQ0NNOwpAQCAtMjU2NiwyNiArMjUwMyw1NyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0Ja2V5MCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAwKSBeIHhvck1hc2s7Ci0Ja2V5MSA9IChnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdmFsICsgNCkgXiB4b3JNYXNrKSAmIDB4ZmZmZjsKLQlrZXkyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDYpIF4geG9yTWFzazsKLQlrZXkzID0gKGdldF91bmFsaWduZWRfbGUxNihrLT5rdl92YWwgKyAxMCkgXiB4b3JNYXNrKSAmIDB4ZmZmZjsKLQlrZXk0ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGstPmt2X3ZhbCArIDEyKSBeIHhvck1hc2s7CisJa2V5MCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAwKTsKKwlrZXkxID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGstPmt2X3ZhbCArIDQpOworCWtleTIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdmFsICsgNik7CisJa2V5MyA9IGdldF91bmFsaWduZWRfbGUxNihrLT5rdl92YWwgKyAxMCk7CisJa2V5NCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl92YWwgKyAxMik7CiAJaWYgKGstPmt2X2xlbiA8PSBMRU5fV0VQMTA0KQogCQlrZXk0ICY9IDB4ZmY7CiAKKwkvKgorCSAqIE5vdGU6IEtleSBjYWNoZSByZWdpc3RlcnMgYWNjZXNzIHNwZWNpYWwgbWVtb3J5IGFyZWEgdGhhdCByZXF1aXJlcworCSAqIHR3byAzMi1iaXQgd3JpdGVzIHRvIGFjdHVhbGx5IHVwZGF0ZSB0aGUgdmFsdWVzIGluIHRoZSBpbnRlcm5hbAorCSAqIG1lbW9yeS4gQ29uc2VxdWVudGx5LCB0aGUgZXhhY3Qgb3JkZXIgYW5kIHBhaXJzIHVzZWQgaGVyZSBtdXN0IGJlCisJICogbWFpbnRhaW5lZC4KKwkgKi8KKwogCWlmIChrZXlUeXBlID09IEFSX0tFWVRBQkxFX1RZUEVfVEtJUCAmJiBBVEg5S19JU19NSUNfRU5BQkxFRChhaCkpIHsKIAkJdTE2IG1pY2VudHJ5ID0gZW50cnkgKyA2NDsKIAorCQkvKgorCQkgKiBXcml0ZSBpbnZlcnRlZCBrZXlbNDc6MF0gZmlyc3QgdG8gYXZvaWQgTWljaGFlbCBNSUMgZXJyb3JzCisJCSAqIG9uIGZyYW1lcyB0aGF0IGNvdWxkIGJlIHNlbnQgb3IgcmVjZWl2ZWQgYXQgdGhlIHNhbWUgdGltZS4KKwkJICogVGhlIGNvcnJlY3Qga2V5IHdpbGwgYmUgd3JpdHRlbiBpbiB0aGUgZW5kIG9uY2UgZXZlcnl0aGluZworCQkgKiBlbHNlIGlzIHJlYWR5LgorCQkgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwgfmtleTApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEoZW50cnkpLCB+a2V5MSk7CisKKwkJLyogV3JpdGUga2V5Wzk1OjQ4XSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIoZW50cnkpLCBrZXkyKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkzKGVudHJ5KSwga2V5Myk7CisKKwkJLyogV3JpdGUga2V5WzEyNzo5Nl0gYW5kIGtleSB0eXBlICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChlbnRyeSksIGtleTQpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpLCBrZXlUeXBlKTsKKworCQkvKiBXcml0ZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGVudHJ5ICovCiAJCSh2b2lkKSBhdGg5a19od19rZXlzZXRtYWMoYWgsIGVudHJ5LCBtYWMpOwogCi0JCWlmIChhaHAtPmFoX21pc2NNb2RlICYgQVJfUENVX01JQ19ORVdfTE9DX0VOQSkgeworCQlpZiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpIHsKKwkJCS8qCisJCQkgKiBUS0lQIHVzZXMgdHdvIGtleSBjYWNoZSBlbnRyaWVzOgorCQkJICogTWljaGFlbCBNSUMgVFgvUlgga2V5cyBpbiB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnkKKwkJCSAqIChpZHggPSBtYWluIGluZGV4ICsgNjQpOgorCQkJICoga2V5MCBbMzE6MF0gPSBSWCBrZXkgWzMxOjBdCisJCQkgKiBrZXkxIFsxNTowXSA9IFRYIGtleSBbMzE6MTZdCisJCQkgKiBrZXkxIFszMToxNl0gPSByZXNlcnZlZAorCQkJICoga2V5MiBbMzE6MF0gPSBSWCBrZXkgWzYzOjMyXQorCQkJICoga2V5MyBbMTU6MF0gPSBUWCBrZXkgWzE1OjBdCisJCQkgKiBrZXkzIFszMToxNl0gPSByZXNlcnZlZAorCQkJICoga2V5NCBbMzE6MF0gPSBUWCBrZXkgWzYzOjMyXQorCQkJICovCiAJCQl1MzIgbWljMCwgbWljMSwgbWljMiwgbWljMywgbWljNDsKIAogCQkJbWljMCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyAwKTsKQEAgLTI1OTMsNTEgKzI1NjEsOTAgQEAKIAkJCW1pYzEgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdHhtaWMgKyAyKSAmIDB4ZmZmZjsKIAkJCW1pYzMgPSBnZXRfdW5hbGlnbmVkX2xlMTYoay0+a3ZfdHhtaWMgKyAwKSAmIDB4ZmZmZjsKIAkJCW1pYzQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfdHhtaWMgKyA0KTsKKworCQkJLyogV3JpdGUgUlhbMzE6MF0gYW5kIFRYWzMxOjE2XSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKG1pY2VudHJ5KSwgbWljMCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTEobWljZW50cnkpLCBtaWMxKTsKKworCQkJLyogV3JpdGUgUlhbNjM6MzJdIGFuZCBUWFsxNTowXSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkyKG1pY2VudHJ5KSwgbWljMik7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTMobWljZW50cnkpLCBtaWMzKTsKKworCQkJLyogV3JpdGUgVFhbNjM6MzJdIGFuZCBrZXlUeXBlKHJlc2VydmVkKSAqLwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVk0KG1pY2VudHJ5KSwgbWljNCk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUobWljZW50cnkpLAogCQkJCSAgQVJfS0VZVEFCTEVfVFlQRV9DTFIpOwogCiAJCX0gZWxzZSB7CisJCQkvKgorCQkJICogVEtJUCB1c2VzIGZvdXIga2V5IGNhY2hlIGVudHJpZXMgKHR3byBmb3IgZ3JvdXAKKwkJCSAqIGtleXMpOgorCQkJICogTWljaGFlbCBNSUMgVFgvUlgga2V5cyBhcmUgaW4gZGlmZmVyZW50IGtleSBjYWNoZQorCQkJICogZW50cmllcyAoaWR4ID0gbWFpbiBpbmRleCArIDY0IGZvciBUWCBhbmQKKwkJCSAqIG1haW4gaW5kZXggKyAzMiArIDk2IGZvciBSWCk6CisJCQkgKiBrZXkwIFszMTowXSA9IFRYL1JYIE1JQyBrZXkgWzMxOjBdCisJCQkgKiBrZXkxIFszMTowXSA9IHJlc2VydmVkCisJCQkgKiBrZXkyIFszMTowXSA9IFRYL1JYIE1JQyBrZXkgWzYzOjMyXQorCQkJICoga2V5MyBbMzE6MF0gPSByZXNlcnZlZAorCQkJICoga2V5NCBbMzE6MF0gPSByZXNlcnZlZAorCQkJICoKKwkJCSAqIFVwcGVyIGxheWVyIGNvZGUgd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gc2VwYXJhdGVseQorCQkJICogZm9yIFRYIGFuZCBSWCBrZXlzIHdoZW4gdGhlc2UgcmVnaXN0ZXJzIG9mZnNldHMgYXJlCisJCQkgKiB1c2VkLgorCQkJICovCiAJCQl1MzIgbWljMCwgbWljMjsKIAogCQkJbWljMCA9IGdldF91bmFsaWduZWRfbGUzMihrLT5rdl9taWMgKyAwKTsKIAkJCW1pYzIgPSBnZXRfdW5hbGlnbmVkX2xlMzIoay0+a3ZfbWljICsgNCk7CisKKwkJCS8qIFdyaXRlIE1JQyBrZXlbMzE6MF0gKi8KIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMChtaWNlbnRyeSksIG1pYzApOwogCQkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKG1pY2VudHJ5KSwgMCk7CisKKwkJCS8qIFdyaXRlIE1JQyBrZXlbNjM6MzJdICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIobWljZW50cnkpLCBtaWMyKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMyhtaWNlbnRyeSksIDApOworCisJCQkvKiBXcml0ZSBUWFs2MzozMl0gYW5kIGtleVR5cGUocmVzZXJ2ZWQpICovCiAJCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTQobWljZW50cnkpLCAwKTsKIAkJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfVFlQRShtaWNlbnRyeSksCiAJCQkJICBBUl9LRVlUQUJMRV9UWVBFX0NMUik7CiAJCX0KKworCQkvKiBNQUMgYWRkcmVzcyByZWdpc3RlcnMgYXJlIHJlc2VydmVkIGZvciB0aGUgTUlDIGVudHJ5ICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfTUFDMChtaWNlbnRyeSksIDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX01BQzEobWljZW50cnkpLCAwKTsKKworCQkvKgorCQkgKiBXcml0ZSB0aGUgY29ycmVjdCAodW4taW52ZXJ0ZWQpIGtleVs0NzowXSBsYXN0IHRvIGVuYWJsZQorCQkgKiBUS0lQIG5vdyB0aGF0IGFsbCBvdGhlciByZWdpc3RlcnMgYXJlIHNldCB3aXRoIGNvcnJlY3QKKwkJICogdmFsdWVzLgorCQkgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkwKGVudHJ5KSwga2V5MCk7CiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZMShlbnRyeSksIGtleTEpOwogCX0gZWxzZSB7CisJCS8qIFdyaXRlIGtleVs0NzowXSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTAoZW50cnkpLCBrZXkwKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkxKGVudHJ5KSwga2V5MSk7CisKKwkJLyogV3JpdGUga2V5Wzk1OjQ4XSAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX0tFWTIoZW50cnkpLCBrZXkyKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9LRVlUQUJMRV9LRVkzKGVudHJ5KSwga2V5Myk7CisKKwkJLyogV3JpdGUga2V5WzEyNzo5Nl0gYW5kIGtleSB0eXBlICovCiAJCVJFR19XUklURShhaCwgQVJfS0VZVEFCTEVfS0VZNChlbnRyeSksIGtleTQpOwogCQlSRUdfV1JJVEUoYWgsIEFSX0tFWVRBQkxFX1RZUEUoZW50cnkpLCBrZXlUeXBlKTsKIAorCQkvKiBXcml0ZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGVudHJ5ICovCiAJCSh2b2lkKSBhdGg5a19od19rZXlzZXRtYWMoYWgsIGVudHJ5LCBtYWMpOwogCX0KIAotCWlmIChhaC0+YWhfY3VyY2hhbiA9PSBOVUxMKQotCQlyZXR1cm4gdHJ1ZTsKLQogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLCB1MTYgZW50cnkpCitib29sIGF0aDlrX2h3X2tleWlzdmFsaWQoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSkKIHsKLQlpZiAoZW50cnkgPCBhaC0+YWhfY2Fwcy5rZXljYWNoZV9zaXplKSB7CisJaWYgKGVudHJ5IDwgYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZSkgewogCQl1MzIgdmFsID0gUkVHX1JFQUQoYWgsIEFSX0tFWVRBQkxFX01BQzEoZW50cnkpKTsKIAkJaWYgKHZhbCAmIEFSX0tFWVRBQkxFX1ZBTElEKQogCQkJcmV0dXJuIHRydWU7CkBAIC0yNjQ5LDcgKzI2NTYsNyBAQAogLyogUG93ZXIgTWFuYWdlbWVudCAoQ2hpcHNldCkgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIGF0aDlrX3NldF9wb3dlcl9zbGVlcChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBzZXRDaGlwKQorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3Bvd2VyX3NsZWVwKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgc2V0Q2hpcCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfU1RBX0lEMSwgQVJfU1RBX0lEMV9QV1JfU0FWKTsKIAlpZiAoc2V0Q2hpcCkgewpAQCAtMjY1OCwxNiArMjY2NSwxNiBAQAogCQlpZiAoIUFSX1NSRVZfOTEwMChhaCkpCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1JDLCBBUl9SQ19BSEIgfCBBUl9SQ19IT1NUSUYpOwogCi0JCVJFR19DTFJfQklUKGFoLCAodTE2KSAoQVJfUlRDX1JFU0VUKSwKKwkJUkVHX0NMUl9CSVQoYWgsIChBUl9SVENfUkVTRVQpLAogCQkJICAgIEFSX1JUQ19SRVNFVF9FTik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19zZXRfcG93ZXJfbmV0d29ya19zbGVlcChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBzZXRDaGlwKQorc3RhdGljIHZvaWQgYXRoOWtfc2V0X3Bvd2VyX25ldHdvcmtfc2xlZXAoc3RydWN0IGF0aF9odyAqYWgsIGludCBzZXRDaGlwKQogewogCVJFR19TRVRfQklUKGFoLCBBUl9TVEFfSUQxLCBBUl9TVEFfSUQxX1BXUl9TQVYpOwogCWlmIChzZXRDaGlwKSB7Ci0JCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAKIAkJaWYgKCEocENhcC0+aHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19GT1JDRV9XQUtFLApAQCAtMjY3OSw4ICsyNjg2LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBib29sIGF0aDlrX2h3X3NldF9wb3dlcl9hd2FrZShzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkJICAgICBpbnQgc2V0Q2hpcCkKK3N0YXRpYyBib29sIGF0aDlrX2h3X3NldF9wb3dlcl9hd2FrZShzdHJ1Y3QgYXRoX2h3ICphaCwgaW50IHNldENoaXApCiB7CiAJdTMyIHZhbDsKIAlpbnQgaTsKQEAgLTI3MjEsMjAgKzI3MjcsMTggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRwb3dlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICBlbnVtIGF0aDlrX3Bvd2VyX21vZGUgbW9kZSkKK2Jvb2wgYXRoOWtfaHdfc2V0cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfcG93ZXJfbW9kZSBtb2RlKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CisJaW50IHN0YXR1cyA9IHRydWUsIHNldENoaXAgPSB0cnVlOwogCXN0YXRpYyBjb25zdCBjaGFyICptb2Rlc1tdID0gewogCQkiQVdBS0UiLAogCQkiRlVMTC1TTEVFUCIsCiAJCSJORVRXT1JLIFNMRUVQIiwKIAkJIlVOREVGSU5FRCIKIAl9OwotCWludCBzdGF0dXMgPSB0cnVlLCBzZXRDaGlwID0gdHJ1ZTsKIAogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1BPV0VSX01HTVQsICIlcyAtPiAlcyAoJXMpXG4iLAotCQltb2Rlc1thaHAtPmFoX3Bvd2VyTW9kZV0sIG1vZGVzW21vZGVdLAorCQltb2Rlc1thaC0+cG93ZXJfbW9kZV0sIG1vZGVzW21vZGVdLAogCQlzZXRDaGlwID8gInNldCBjaGlwICIgOiAiIik7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKQEAgLTI3NDMsNyArMjc0Nyw3IEBACiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfUE1fRlVMTF9TTEVFUDoKIAkJYXRoOWtfc2V0X3Bvd2VyX3NsZWVwKGFoLCBzZXRDaGlwKTsKLQkJYWhwLT5haF9jaGlwRnVsbFNsZWVwID0gdHJ1ZTsKKwkJYWgtPmNoaXBfZnVsbHNsZWVwID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBBVEg5S19QTV9ORVRXT1JLX1NMRUVQOgogCQlhdGg5a19zZXRfcG93ZXJfbmV0d29ya19zbGVlcChhaCwgc2V0Q2hpcCk7CkBAIC0yNzUzLDQxICsyNzU3LDU3IEBACiAJCQkiVW5rbm93biBwb3dlciBtb2RlICV1XG4iLCBtb2RlKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlhaHAtPmFoX3Bvd2VyTW9kZSA9IG1vZGU7CisJYWgtPnBvd2VyX21vZGUgPSBtb2RlOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotdm9pZCBhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc3RydWN0IGF0aF9oYWwgKmFoLCBpbnQgcmVzdG9yZSkKKy8qCisgKiBIZWxwZXIgZm9yIEFTUE0gc3VwcG9ydC4KKyAqCisgKiBEaXNhYmxlIFBMTCB3aGVuIGluIEwwcyBhcyB3ZWxsIGFzIHJlY2VpdmVyIGNsb2NrIHdoZW4gaW4gTDEuCisgKiBUaGlzIHBvd2VyIHNhdmluZyBvcHRpb24gbXVzdCBiZSBlbmFibGVkIHRocm91Z2ggdGhlIFNlckRlcy4KKyAqCisgKiBQcm9ncmFtbWluZyB0aGUgU2VyRGVzIG11c3QgZ28gdGhyb3VnaCB0aGUgc2FtZSAyODggYml0IHNlcmlhbCBzaGlmdAorICogcmVnaXN0ZXIgYXMgdGhlIG90aGVyIGFuYWxvZyByZWdpc3RlcnMuICBIZW5jZSB0aGUgOSB3cml0ZXMuCisgKi8KK3ZvaWQgYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcmVzdG9yZSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXU4IGk7CiAKLQlpZiAoYWgtPmFoX2lzUGNpRXhwcmVzcyAhPSB0cnVlKQorCWlmIChhaC0+aXNfcGNpZXhwcmVzcyAhPSB0cnVlKQogCQlyZXR1cm47CiAKLQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX3Bvd2Vyc2F2ZV9lbmFibGUgPT0gMikKKwkvKiBEbyBub3QgdG91Y2ggU2VyRGVzIHJlZ2lzdGVycyAqLworCWlmIChhaC0+Y29uZmlnLnBjaWVfcG93ZXJzYXZlX2VuYWJsZSA9PSAyKQogCQlyZXR1cm47CiAKKwkvKiBOb3RoaW5nIHRvIGRvIG9uIHJlc3RvcmUgZm9yIDExTiAqLwogCWlmIChyZXN0b3JlKQogCQlyZXR1cm47CiAKIAlpZiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWhwLT5haF9pbmlQY2llU2VyZGVzLmlhX3Jvd3M7IGkrKykgewotCQkJUkVHX1dSSVRFKGFoLCBJTklfUkEoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywgaSwgMCksCi0JCQkJICBJTklfUkEoJmFocC0+YWhfaW5pUGNpZVNlcmRlcywgaSwgMSkpOworCQkvKgorCQkgKiBBUjkyODAgMi4wIG9yIGxhdGVyIGNoaXBzIHVzZSBTZXJEZXMgdmFsdWVzIGZyb20gdGhlCisJCSAqIGluaXR2YWxzLmggaW5pdGlhbGl6ZWQgZGVwZW5kaW5nIG9uIGNoaXBzZXQgZHVyaW5nCisJCSAqIGF0aDlrX2h3X2RvX2F0dGFjaCgpCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgYWgtPmluaVBjaWVTZXJkZXMuaWFfcm93czsgaSsrKSB7CisJCQlSRUdfV1JJVEUoYWgsIElOSV9SQSgmYWgtPmluaVBjaWVTZXJkZXMsIGksIDApLAorCQkJCSAgSU5JX1JBKCZhaC0+aW5pUGNpZVNlcmRlcywgaSwgMSkpOwogCQl9Ci0JCXVkZWxheSgxMDAwKTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MChhaCkgJiYKLQkJICAgKGFoLT5haF9tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85MjgwXzEwKSkgeworCQkgICAoYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8xMCkpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHg5MjQ4ZmQwMCk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MjQ5MjQ5MjQpOwogCisJCS8qIFJYIHNodXQgb2ZmIHdoZW4gZWxlY2lkbGUgaXMgYXNzZXJ0ZWQgKi8KIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhhODAwMDAxOSk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MTMxNjA4MjApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweGU1OTgwNTYwKTsKIAotCQlpZiAoYWgtPmFoX2NvbmZpZy5wY2llX2Nsb2NrX3JlcSkKKwkJLyogU2h1dCBvZmYgQ0xLUkVRIGFjdGl2ZSBpbiBMMSAqLworCQlpZiAoYWgtPmNvbmZpZy5wY2llX2Nsb2NrX3JlcSkKIAkJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4NDAxZGVmZmMpOwogCQllbHNlCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDQwMWRlZmZkKTsKQEAgLTI3OTYsNDIgKzI4MTYsNTkgQEAKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhiZTEwNTU1NCk7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MDAwNDMwMDcpOwogCisJCS8qIExvYWQgdGhlIG5ldyBzZXR0aW5ncyAqLwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTMiwgMHgwMDAwMDAwMCk7CiAKLQkJdWRlbGF5KDEwMDApOwogCX0gZWxzZSB7CiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4OTI0OGZjMDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDI0OTI0OTI0KTsKKworCQkvKiBSWCBzaHV0IG9mZiB3aGVuIGVsZWNpZGxlIGlzIGFzc2VydGVkICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MjgwMDAwMzkpOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweDUzMTYwODI0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHhlNTk4MDU3OSk7CisKKwkJLyoKKwkJICogSWdub3JlIGFoLT5haF9jb25maWcucGNpZV9jbG9ja19yZXEgc2V0dGluZyBmb3IKKwkJICogcHJlLUFSOTI4MCAxMW4KKwkJICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MDAxZGVmZmYpOworCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMsIDB4MWFhYWJlNDApOwogCQlSRUdfV1JJVEUoYWgsIEFSX1BDSUVfU0VSREVTLCAweGJlMTA1NTU0KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QQ0lFX1NFUkRFUywgMHgwMDBlMzAwNyk7CisKKwkJLyogTG9hZCB0aGUgbmV3IHNldHRpbmdzICovCiAJCVJFR19XUklURShhaCwgQVJfUENJRV9TRVJERVMyLCAweDAwMDAwMDAwKTsKIAl9CiAKKwl1ZGVsYXkoMTAwMCk7CisKKwkvKiBzZXQgYml0IDE5IHRvIGFsbG93IGZvcmNpbmcgb2YgcGNpZSBjb3JlIGludG8gTDEgc3RhdGUgKi8KIAlSRUdfU0VUX0JJVChhaCwgQVJfUENJRV9QTV9DVFJMLCBBUl9QQ0lFX1BNX0NUUkxfRU5BKTsKIAotCWlmIChhaC0+YWhfY29uZmlnLnBjaWVfd2FlbikgewotCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBhaC0+YWhfY29uZmlnLnBjaWVfd2Flbik7CisJLyogU2V2ZXJhbCBQQ0llIG1hc3NhZ2VzIHRvIGVuc3VyZSBwcm9wZXIgYmVoYXZpb3VyICovCisJaWYgKGFoLT5jb25maWcucGNpZV93YWVuKSB7CisJCVJFR19XUklURShhaCwgQVJfV0EsIGFoLT5jb25maWcucGNpZV93YWVuKTsKIAl9IGVsc2UgewogCQlpZiAoQVJfU1JFVl85Mjg1KGFoKSkKIAkJCVJFR19XUklURShhaCwgQVJfV0EsIEFSOTI4NV9XQV9ERUZBVUxUKTsKKwkJLyoKKwkJICogT24gQVI5MjgwIGNoaXBzIGJpdCAyMiBvZiAweDQwMDQgbmVlZHMgdG8gYmUgc2V0IHRvCisJCSAqIG90aGVyd2lzZSBjYXJkIG1heSBkaXNhcHBlYXIuCisJCSAqLwogCQllbHNlIGlmIChBUl9TUkVWXzkyODAoYWgpKQogCQkJUkVHX1dSSVRFKGFoLCBBUl9XQSwgQVI5MjgwX1dBX0RFRkFVTFQpOwogCQllbHNlCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1dBLCBBUl9XQV9ERUZBVUxUKTsKIAl9Ci0KIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKiovCiAvKiBJbnRlcnJ1cHQgSGFuZGxpbmcgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqLwogCi1ib29sIGF0aDlrX2h3X2ludHJwZW5kKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfaW50cnBlbmQoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJdTMyIGhvc3RfaXNyOwogCkBAIC0yODUwLDE0ICsyODg3LDEzIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaW50ICptYXNrZWQpCitib29sIGF0aDlrX2h3X2dldGlzcihzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19pbnQgKm1hc2tlZCkKIHsKIAl1MzIgaXNyID0gMDsKIAl1MzIgbWFzazIgPSAwOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAl1MzIgc3luY19jYXVzZSA9IDA7CiAJYm9vbCBmYXRhbF9pbnQgPSBmYWxzZTsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCiAJaWYgKCFBUl9TUkVWXzkxMDAoYWgpKSB7CiAJCWlmIChSRUdfUkVBRChhaCwgQVJfSU5UUl9BU1lOQ19DQVVTRSkgJiBBUl9JTlRSX01BQ19JUlEpIHsKQEAgLTI4OTUsNiArMjkzMSw4IEBACiAJCQkJbWFzazIgfD0gQVRIOUtfSU5UX0dUVDsKIAkJCWlmIChpc3IyICYgQVJfSVNSX1MyX0NTVCkKIAkJCQltYXNrMiB8PSBBVEg5S19JTlRfQ1NUOworCQkJaWYgKGlzcjIgJiBBUl9JU1JfUzJfVFNGT09SKQorCQkJCW1hc2syIHw9IEFUSDlLX0lOVF9UU0ZPT1I7CiAJCX0KIAogCQlpc3IgPSBSRUdfUkVBRChhaCwgQVJfSVNSX1JBQyk7CkBAIC0yOTA1LDcgKzI5NDMsNyBAQAogCiAJCSptYXNrZWQgPSBpc3IgJiBBVEg5S19JTlRfQ09NTU9OOwogCi0JCWlmIChhaHAtPmFoX2ludHJNaXRpZ2F0aW9uKSB7CisJCWlmIChhaC0+aW50cl9taXRpZ2F0aW9uKSB7CiAJCQlpZiAoaXNyICYgKEFSX0lTUl9SWE1JTlRSIHwgQVJfSVNSX1JYSU5UTSkpCiAJCQkJKm1hc2tlZCB8PSBBVEg5S19JTlRfUlg7CiAJCX0KQEAgLTI5MjAsMTIgKzI5NTgsMTIgQEAKIAkJCSptYXNrZWQgfD0gQVRIOUtfSU5UX1RYOwogCiAJCQlzMF9zID0gUkVHX1JFQUQoYWgsIEFSX0lTUl9TMF9TKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczBfcywgQVJfSVNSX1MwX1FDVV9UWE9LKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczBfcywgQVJfSVNSX1MwX1FDVV9UWERFU0MpOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMF9zLCBBUl9JU1JfUzBfUUNVX1RYT0spOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMF9zLCBBUl9JU1JfUzBfUUNVX1RYREVTQyk7CiAKIAkJCXMxX3MgPSBSRUdfUkVBRChhaCwgQVJfSVNSX1MxX1MpOwotCQkJYWhwLT5haF9pbnRyVHhxcyB8PSBNUyhzMV9zLCBBUl9JU1JfUzFfUUNVX1RYRVJSKTsKLQkJCWFocC0+YWhfaW50clR4cXMgfD0gTVMoczFfcywgQVJfSVNSX1MxX1FDVV9UWEVPTCk7CisJCQlhaC0+aW50cl90eHFzIHw9IE1TKHMxX3MsIEFSX0lTUl9TMV9RQ1VfVFhFUlIpOworCQkJYWgtPmludHJfdHhxcyB8PSBNUyhzMV9zLCBBUl9JU1JfUzFfUUNVX1RYRU9MKTsKIAkJfQogCiAJCWlmIChpc3IgJiBBUl9JU1JfUlhPUk4pIHsKQEAgLTI5ODIsMTcgKzMwMjAsMTYgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfaW50cmdldChzdHJ1Y3QgYXRoX2hhbCAqYWgpCitlbnVtIGF0aDlrX2ludCBhdGg5a19od19pbnRyZ2V0KHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXJldHVybiBBSDU0MTYoYWgpLT5haF9tYXNrUmVnOworCXJldHVybiBhaC0+bWFza19yZWc7CiB9CiAKLWVudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwgZW51bSBhdGg5a19pbnQgaW50cykKK2VudW0gYXRoOWtfaW50IGF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2ludCBpbnRzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0JdTMyIG9tYXNrID0gYWhwLT5haF9tYXNrUmVnOworCXUzMiBvbWFzayA9IGFoLT5tYXNrX3JlZzsKIAl1MzIgbWFzaywgbWFzazI7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfSU5URVJSVVBULCAiMHgleCA9PiAweCV4XG4iLCBvbWFzaywgaW50cyk7CiAKQEAgLTMwMTMsMTggKzMwNTAsMTggQEAKIAltYXNrMiA9IDA7CiAKIAlpZiAoaW50cyAmIEFUSDlLX0lOVF9UWCkgewotCQlpZiAoYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eG9rX2ludGVycnVwdF9tYXNrKQogCQkJbWFzayB8PSBBUl9JTVJfVFhPSzsKLQkJaWYgKGFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eGRlc2NfaW50ZXJydXB0X21hc2spCiAJCQltYXNrIHw9IEFSX0lNUl9UWERFU0M7Ci0JCWlmIChhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzaykKKwkJaWYgKGFoLT50eGVycl9pbnRlcnJ1cHRfbWFzaykKIAkJCW1hc2sgfD0gQVJfSU1SX1RYRVJSOwotCQlpZiAoYWhwLT5haF90eEVvbEludGVycnVwdE1hc2spCisJCWlmIChhaC0+dHhlb2xfaW50ZXJydXB0X21hc2spCiAJCQltYXNrIHw9IEFSX0lNUl9UWEVPTDsKIAl9CiAJaWYgKGludHMgJiBBVEg5S19JTlRfUlgpIHsKIAkJbWFzayB8PSBBUl9JTVJfUlhFUlI7Ci0JCWlmIChhaHAtPmFoX2ludHJNaXRpZ2F0aW9uKQorCQlpZiAoYWgtPmludHJfbWl0aWdhdGlvbikKIAkJCW1hc2sgfD0gQVJfSU1SX1JYTUlOVFIgfCBBUl9JTVJfUlhJTlRNOwogCQllbHNlCiAJCQltYXNrIHw9IEFSX0lNUl9SWE9LIHwgQVJfSU1SX1JYREVTQzsKQEAgLTMwNDEsNyArMzA3OCw5IEBACiAJCWlmIChpbnRzICYgQVRIOUtfSU5UX0RUSU1TWU5DKQogCQkJbWFzazIgfD0gQVJfSU1SX1MyX0RUSU1TWU5DOwogCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9DQUJFTkQpCi0JCQltYXNrMiB8PSAoQVJfSU1SX1MyX0NBQkVORCk7CisJCQltYXNrMiB8PSBBUl9JTVJfUzJfQ0FCRU5EOworCQlpZiAoaW50cyAmIEFUSDlLX0lOVF9UU0ZPT1IpCisJCQltYXNrMiB8PSBBUl9JTVJfUzJfVFNGT09SOwogCX0KIAogCWlmIChpbnRzICYgKEFUSDlLX0lOVF9HVFQgfCBBVEg5S19JTlRfQ1NUKSkgewpAQCAtMzA2Miw3ICszMTAxLDcgQEAKIAkJCQkJICAgQVJfSU1SX1MyX1RTRk9PUiB8CiAJCQkJCSAgIEFSX0lNUl9TMl9HVFQgfCBBUl9JTVJfUzJfQ1NUKTsKIAlSRUdfV1JJVEUoYWgsIEFSX0lNUl9TMiwgbWFzayB8IG1hc2syKTsKLQlhaHAtPmFoX21hc2tSZWcgPSBpbnRzOworCWFoLT5tYXNrX3JlZyA9IGludHM7CiAKIAlpZiAoIShwQ2FwLT5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCkpIHsKIAkJaWYgKGludHMgJiBBVEg5S19JTlRfVElNX1RJTUVSKQpAQCAtMzA5NiwxNCArMzEzNSwxMyBAQAogLyogQmVhY29uIEhhbmRsaW5nICovCiAvKioqKioqKioqKioqKioqKioqKi8KIAotdm9pZCBhdGg5a19od19iZWFjb25pbml0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCkKK3ZvaWQgYXRoOWtfaHdfYmVhY29uaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIG5leHRfYmVhY29uLCB1MzIgYmVhY29uX3BlcmlvZCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCWludCBmbGFncyA9IDA7CiAKLQlhaHAtPmFoX2JlYWNvbkludGVydmFsID0gYmVhY29uX3BlcmlvZDsKKwlhaC0+YmVhY29uX2ludGVydmFsID0gYmVhY29uX3BlcmlvZDsKIAotCXN3aXRjaCAoYWgtPmFoX29wbW9kZSkgeworCXN3aXRjaCAoYWgtPm9wbW9kZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJCVJFR19XUklURShhaCwgQVJfTkVYVF9UQlRUX1RJTUVSLCBUVV9UT19VU0VDKG5leHRfYmVhY29uKSk7CkBAIC0zMTEyLDIyICszMTUwLDIzIEBACiAJCWZsYWdzIHw9IEFSX1RCVFRfVElNRVJfRU47CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlSRUdfU0VUX0JJVChhaCwgQVJfVFhDRkcsCiAJCQkgICAgQVJfVFhDRkdfQURIT0NfQkVBQ09OX0FUSU1fVFhfUE9MSUNZKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX05EUF9USU1FUiwKIAkJCSAgVFVfVE9fVVNFQyhuZXh0X2JlYWNvbiArCi0JCQkJICAgICAoYWhwLT5haF9hdGltV2luZG93ID8gYWhwLT4KLQkJCQkgICAgICBhaF9hdGltV2luZG93IDogMSkpKTsKKwkJCQkgICAgIChhaC0+YXRpbV93aW5kb3cgPyBhaC0+CisJCQkJICAgICAgYXRpbV93aW5kb3cgOiAxKSkpOwogCQlmbGFncyB8PSBBUl9ORFBfVElNRVJfRU47CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1RCVFRfVElNRVIsIFRVX1RPX1VTRUMobmV4dF9iZWFjb24pKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX0RNQV9CRUFDT05fQUxFUlQsCiAJCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gLQotCQkJCSAgICAgYWgtPmFoX2NvbmZpZy4KKwkJCQkgICAgIGFoLT5jb25maWcuCiAJCQkJICAgICBkbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUpKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ORVhUX1NXQkEsCiAJCQkgIFRVX1RPX1VTRUMobmV4dF9iZWFjb24gLQotCQkJCSAgICAgYWgtPmFoX2NvbmZpZy4KKwkJCQkgICAgIGFoLT5jb25maWcuCiAJCQkJICAgICBzd19iZWFjb25fcmVzcG9uc2VfdGltZSkpOwogCQlmbGFncyB8PQogCQkJQVJfVEJUVF9USU1FUl9FTiB8IEFSX0RCQV9USU1FUl9FTiB8IEFSX1NXQkFfVElNRVJfRU47CkBAIC0zMTM1LDcgKzMxNzQsNyBAQAogCWRlZmF1bHQ6CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0JFQUNPTiwKIAkJCSIlczogdW5zdXBwb3J0ZWQgb3Btb2RlOiAlZFxuIiwKLQkJCV9fZnVuY19fLCBhaC0+YWhfb3Btb2RlKTsKKwkJCV9fZnVuY19fLCBhaC0+b3Btb2RlKTsKIAkJcmV0dXJuOwogCQlicmVhazsKIAl9CkBAIC0zMTU0LDExICszMTkzLDExIEBACiAJUkVHX1NFVF9CSVQoYWgsIEFSX1RJTUVSX01PREUsIGZsYWdzKTsKIH0KIAotdm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9oYWwgKmFoLAordm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a19iZWFjb25fc3RhdGUgKmJzKQogewogCXUzMiBuZXh0VGJ0dCwgYmVhY29uaW50dmFsLCBkdGltcGVyaW9kLCBiZWFjb250aW1lb3V0OwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAogCVJFR19XUklURShhaCwgQVJfTkVYVF9UQlRUX1RJTUVSLCBUVV9UT19VU0VDKGJzLT5ic19uZXh0dGJ0dCkpOwogCkBAIC0zMjEyLDQzICszMjUxLDQ2IEBACiAJCSAgICBBUl9UQlRUX1RJTUVSX0VOIHwgQVJfVElNX1RJTUVSX0VOIHwKIAkJICAgIEFSX0RUSU1fVElNRVJfRU4pOwogCisJLyogVFNGIE91dCBvZiBSYW5nZSBUaHJlc2hvbGQgKi8KKwlSRUdfV1JJVEUoYWgsIEFSX1RTRk9PUl9USFJFU0hPTEQsIGJzLT5ic190c2Zvb3JfdGhyZXNob2xkKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKiovCiAvKiBIVyBDYXBhYmlsaXRpZXMgKi8KIC8qKioqKioqKioqKioqKioqKioqLwogCi1ib29sIGF0aDlrX2h3X2ZpbGxfY2FwX2luZm8oc3RydWN0IGF0aF9oYWwgKmFoKQorYm9vbCBhdGg5a19od19maWxsX2NhcF9pbmZvKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXUxNiBjYXBGaWVsZCA9IDAsIGVldmFsOwogCi0JZWV2YWwgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfUkVHXzApOworCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMCk7CisJYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9IGVldmFsOwogCi0JYWgtPmFoX2N1cnJlbnRSRCA9IGVldmFsOworCWVldmFsID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SRUdfMSk7CisJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJCWVldmFsIHw9IEFSOTI4NV9SREVYVF9ERUZBVUxUOworCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmRfZXh0ID0gZWV2YWw7CiAKLQllZXZhbCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SRUdfMSk7Ci0JYWgtPmFoX2N1cnJlbnRSREV4dCA9IGVldmFsOworCWNhcEZpZWxkID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9PUF9DQVApOwogCi0JY2FwRmllbGQgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfT1BfQ0FQKTsKLQotCWlmIChhaC0+YWhfb3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGFoLT5haF9zdWJ2ZW5kb3JpZCA9PSBBUl9TVUJWRU5ET1JfSURfTkVXX0EpIHsKLQkJaWYgKGFoLT5haF9jdXJyZW50UkQgPT0gMHg2NCB8fCBhaC0+YWhfY3VycmVudFJEID09IDB4NjUpCi0JCQlhaC0+YWhfY3VycmVudFJEICs9IDU7Ci0JCWVsc2UgaWYgKGFoLT5haF9jdXJyZW50UkQgPT0gMHg0MSkKLQkJCWFoLT5haF9jdXJyZW50UkQgPSAweDQzOworCWlmIChhaC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCisJICAgIGFoLT5od192ZXJzaW9uLnN1YnZlbmRvcmlkID09IEFSX1NVQlZFTkRPUl9JRF9ORVdfQSkgeworCQlpZiAoYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCA9PSAweDY0IHx8CisJCSAgICBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkID09IDB4NjUpCisJCQlhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkICs9IDU7CisJCWVsc2UgaWYgKGFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPT0gMHg0MSkKKwkJCWFoLT5yZWd1bGF0b3J5LmN1cnJlbnRfcmQgPSAweDQzOwogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJInJlZ2RvbWFpbiBtYXBwZWQgdG8gMHgleFxuIiwgYWgtPmFoX2N1cnJlbnRSRCk7CisJCQkicmVnZG9tYWluIG1hcHBlZCB0byAweCV4XG4iLCBhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkKTsKIAl9CiAKLQllZXZhbCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9PUF9NT0RFKTsKKwllZXZhbCA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfT1BfTU9ERSk7CiAJYml0bWFwX3plcm8ocENhcC0+d2lyZWxlc3NfbW9kZXMsIEFUSDlLX01PREVfTUFYKTsKIAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExQSkgewogCQlzZXRfYml0KEFUSDlLX01PREVfMTFBLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7Ci0JCWlmIChhaC0+YWhfY29uZmlnLmh0X2VuYWJsZSkgeworCQlpZiAoYWgtPmNvbmZpZy5odF9lbmFibGUpIHsKIAkJCWlmICghKGVldmFsICYgQVI1NDE2X09QRkxBR1NfTl81R19IVDIwKSkKIAkJCQlzZXRfYml0KEFUSDlLX01PREVfMTFOQV9IVDIwLAogCQkJCQlwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CkBAIC0zMjY0LDcgKzMzMDYsNyBAQAogCWlmIChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExRykgewogCQlzZXRfYml0KEFUSDlLX01PREVfMTFCLCBwQ2FwLT53aXJlbGVzc19tb2Rlcyk7CiAJCXNldF9iaXQoQVRIOUtfTU9ERV8xMUcsIHBDYXAtPndpcmVsZXNzX21vZGVzKTsKLQkJaWYgKGFoLT5haF9jb25maWcuaHRfZW5hYmxlKSB7CisJCWlmIChhaC0+Y29uZmlnLmh0X2VuYWJsZSkgewogCQkJaWYgKCEoZWV2YWwgJiBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjApKQogCQkJCXNldF9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUMjAsCiAJCQkJCXBDYXAtPndpcmVsZXNzX21vZGVzKTsKQEAgLTMyNzcsMTggKzMzMTksMTUgQEAKIAkJfQogCX0KIAotCXBDYXAtPnR4X2NoYWlubWFzayA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9UWF9NQVNLKTsKLQlpZiAoKGFoLT5haF9pc1BjaUV4cHJlc3MpCi0JICAgIHx8IChlZXZhbCAmIEFSNTQxNl9PUEZMQUdTXzExQSkpIHsKLQkJcENhcC0+cnhfY2hhaW5tYXNrID0KLQkJCWF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKLQl9IGVsc2UgewotCQlwQ2FwLT5yeF9jaGFpbm1hc2sgPQotCQkJKGF0aDlrX2h3X2dwaW9fZ2V0KGFoLCAwKSkgPyAweDUgOiAweDc7Ci0JfQorCXBDYXAtPnR4X2NoYWlubWFzayA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfVFhfTUFTSyk7CisJaWYgKChhaC0+aHdfdmVyc2lvbi5kZXZpZCA9PSBBUjU0MTZfREVWSURfUENJKSAmJgorCSAgICAhKGVldmFsICYgQVI1NDE2X09QRkxBR1NfMTFBKSkKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIDApID8gMHg1IDogMHg3OworCWVsc2UKKwkJcENhcC0+cnhfY2hhaW5tYXNrID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9SWF9NQVNLKTsKIAotCWlmICghKEFSX1NSRVZfOTI4MChhaCkgJiYgKGFoLT5haF9tYWNSZXYgPT0gMCkpKQotCQlhaHAtPmFoX21pc2NNb2RlIHw9IEFSX1BDVV9NSUNfTkVXX0xPQ19FTkE7CisJaWYgKCEoQVJfU1JFVl85MjgwKGFoKSAmJiAoYWgtPmh3X3ZlcnNpb24ubWFjUmV2ID09IDApKSkKKwkJYWgtPm1pc2NfbW9kZSB8PSBBUl9QQ1VfTUlDX05FV19MT0NfRU5BOwogCiAJcENhcC0+bG93XzJnaHpfY2hhbiA9IDIzMTI7CiAJcENhcC0+aGlnaF8yZ2h6X2NoYW4gPSAyNzMyOwpAQCAtMzMwNiw3ICszMzQ1LDcgQEAKIAogCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0NIQU5fU1BSRUFEOwogCi0JaWYgKGFoLT5haF9jb25maWcuaHRfZW5hYmxlKQorCWlmIChhaC0+Y29uZmlnLmh0X2VuYWJsZSkKIAkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfSFQ7CiAJZWxzZQogCQlwQ2FwLT5od19jYXBzICY9IH5BVEg5S19IV19DQVBfSFQ7CkBAIC0zMzMyLDcgKzMzNzEsOSBAQAogCXBDYXAtPm51bV9tcl9yZXRyaWVzID0gNDsKIAlwQ2FwLT50eF90cmlnbGV2ZWxfbWF4ID0gTUFYX1RYX0ZJRk9fVEhSRVNIT0xEOwogCi0JaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJaWYgKEFSX1NSRVZfOTI4NV8xMF9PUl9MQVRFUihhaCkpCisJCXBDYXAtPm51bV9ncGlvX3BpbnMgPSBBUjkyODVfTlVNX0dQSU87CisJZWxzZSBpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkKIAkJcENhcC0+bnVtX2dwaW9fcGlucyA9IEFSOTI4WF9OVU1fR1BJTzsKIAllbHNlCiAJCXBDYXAtPm51bV9ncGlvX3BpbnMgPSBBUl9OVU1fR1BJTzsKQEAgLTMzNTUsMjIgKzMzOTYsMjIgQEAKIAlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWFoLT5haF9yZnNpbGVudCA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9SRl9TSUxFTlQpOwotCWlmIChhaC0+YWhfcmZzaWxlbnQgJiBFRVBfUkZTSUxFTlRfRU5BQkxFRCkgewotCQlhaC0+YWhfcmZraWxsX2dwaW8gPQotCQkJTVMoYWgtPmFoX3Jmc2lsZW50LCBFRVBfUkZTSUxFTlRfR1BJT19TRUwpOwotCQlhaC0+YWhfcmZraWxsX3BvbGFyaXR5ID0KLQkJCU1TKGFoLT5haF9yZnNpbGVudCwgRUVQX1JGU0lMRU5UX1BPTEFSSVRZKTsKKwlhaC0+cmZzaWxlbnQgPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1JGX1NJTEVOVCk7CisJaWYgKGFoLT5yZnNpbGVudCAmIEVFUF9SRlNJTEVOVF9FTkFCTEVEKSB7CisJCWFoLT5yZmtpbGxfZ3BpbyA9CisJCQlNUyhhaC0+cmZzaWxlbnQsIEVFUF9SRlNJTEVOVF9HUElPX1NFTCk7CisJCWFoLT5yZmtpbGxfcG9sYXJpdHkgPQorCQkJTVMoYWgtPnJmc2lsZW50LCBFRVBfUkZTSUxFTlRfUE9MQVJJVFkpOwogCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX1JGU0lMRU5UOwogCX0KICNlbmRpZgogCi0JaWYgKChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpIHx8Ci0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSB8fAotCSAgICAoYWgtPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApIHx8Ci0JICAgIChhaC0+YWhfbWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkgfHwKLQkgICAgKGFoLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKKwlpZiAoKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSB8fAorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSB8fAorCSAgICAoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkgfHwKKwkgICAgKGFoLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxMDApIHx8CisJICAgIChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKIAkJcENhcC0+aHdfY2FwcyAmPSB+QVRIOUtfSFdfQ0FQX0FVVE9TTEVFUDsKIAllbHNlCiAJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUDsKQEAgLTMzODAsNyArMzQyMSw3IEBACiAJZWxzZQogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUzsKIAotCWlmIChhaC0+YWhfY3VycmVudFJERXh0ICYgKDEgPDwgUkVHX0VYVF9KQVBBTl9NSURCQU5EKSkgeworCWlmIChhaC0+cmVndWxhdG9yeS5jdXJyZW50X3JkX2V4dCAmICgxIDw8IFJFR19FWFRfSkFQQU5fTUlEQkFORCkpIHsKIAkJcENhcC0+cmVnX2NhcCA9CiAJCQlBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTkVXXzExQSB8CiAJCQlBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfRVZFTiB8CkBAIC0zMzk1LDE5ICszNDM2LDIyIEBACiAJcENhcC0+cmVnX2NhcCB8PSBBUl9FRVBST01fRUVSRUdDQVBfRU5fRkNDX01JREJBTkQ7CiAKIAlwQ2FwLT5udW1fYW50Y2ZnXzVnaHogPQotCQlhdGg5a19od19nZXRfbnVtX2FudF9jb25maWcoYWgsIEFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWik7CisJCWFoLT5lZXBfb3BzLT5nZXRfbnVtX2FudF9jb25maWcoYWgsIEFUSDlLX0hBTF9GUkVRX0JBTkRfNUdIWik7CiAJcENhcC0+bnVtX2FudGNmZ18yZ2h6ID0KLQkJYXRoOWtfaHdfZ2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOworCQlhaC0+ZWVwX29wcy0+Z2V0X251bV9hbnRfY29uZmlnKGFoLCBBVEg5S19IQUxfRlJFUV9CQU5EXzJHSFopOworCisJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkgJiYgYnRjb2V4X2VuYWJsZSkgeworCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9CVF9DT0VYOworCQlhaC0+YnRhY3RpdmVfZ3BpbyA9IDY7CisJCWFoLT53bGFuYWN0aXZlX2dwaW8gPSA1OworCX0KIAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorYm9vbCBhdGg5a19od19nZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAogCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgKnJlc3VsdCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCWNvbnN0IHN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7Ci0KIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEFUSDlLX0NBUF9DSVBIRVI6CiAJCXN3aXRjaCAoY2FwYWJpbGl0eSkgewpAQCAtMzQyNiwyMyArMzQ3MCwxNyBAQAogCQljYXNlIDA6CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJY2FzZSAxOgotCQkJcmV0dXJuIChhaHAtPmFoX3N0YUlkMURlZmF1bHRzICYKKwkJCXJldHVybiAoYWgtPnN0YV9pZDFfZGVmYXVsdHMgJgogCQkJCUFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFKSA/IHRydWUgOgogCQkJZmFsc2U7CiAJCX0KIAljYXNlIEFUSDlLX0NBUF9US0lQX1NQTElUOgotCQlyZXR1cm4gKGFocC0+YWhfbWlzY01vZGUgJiBBUl9QQ1VfTUlDX05FV19MT0NfRU5BKSA/CisJCXJldHVybiAoYWgtPm1pc2NfbW9kZSAmIEFSX1BDVV9NSUNfTkVXX0xPQ19FTkEpID8KIAkJCWZhbHNlIDogdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9XTUVfVEtJUE1JQzoKLQkJcmV0dXJuIDA7Ci0JY2FzZSBBVEg5S19DQVBfUEhZQ09VTlRFUlM6Ci0JCXJldHVybiBhaHAtPmFoX2hhc0h3UGh5Q291bnRlcnMgPyAwIDogLUVOWElPOwogCWNhc2UgQVRIOUtfQ0FQX0RJVkVSU0lUWToKIAkJcmV0dXJuIChSRUdfUkVBRChhaCwgQVJfUEhZX0NDS19ERVRFQ1QpICYKIAkJCUFSX1BIWV9DQ0tfREVURUNUX0JCX0VOQUJMRV9BTlRfRkFTVF9ESVYpID8KIAkJCXRydWUgOiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9QSFlESUFHOgotCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9NQ0FTVF9LRVlTUkNIOgogCQlzd2l0Y2ggKGNhcGFiaWxpdHkpIHsKIAkJY2FzZSAwOgpAQCAtMzQ1MSw1NyArMzQ4OSw0OCBAQAogCQkJaWYgKFJFR19SRUFEKGFoLCBBUl9TVEFfSUQxKSAmIEFSX1NUQV9JRDFfQURIT0MpIHsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9IGVsc2UgewotCQkJCXJldHVybiAoYWhwLT5haF9zdGFJZDFEZWZhdWx0cyAmCisJCQkJcmV0dXJuIChhaC0+c3RhX2lkMV9kZWZhdWx0cyAmCiAJCQkJCUFSX1NUQV9JRDFfTUNBU1RfS1NSQ0gpID8gdHJ1ZSA6CiAJCQkJCWZhbHNlOwogCQkJfQogCQl9CiAJCXJldHVybiBmYWxzZTsKLQljYXNlIEFUSDlLX0NBUF9UU0ZfQURKVVNUOgotCQlyZXR1cm4gKGFocC0+YWhfbWlzY01vZGUgJiBBUl9QQ1VfVFhfQUREX1RTRikgPwotCQkJdHJ1ZSA6IGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX1JGU0lMRU5UOgotCQlpZiAoY2FwYWJpbGl0eSA9PSAzKQotCQkJcmV0dXJuIGZhbHNlOwotCWNhc2UgQVRIOUtfQ0FQX0FOVF9DRkdfMkdIWjoKLQkJKnJlc3VsdCA9IHBDYXAtPm51bV9hbnRjZmdfMmdoejsKLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBBVEg5S19DQVBfQU5UX0NGR181R0haOgotCQkqcmVzdWx0ID0gcENhcC0+bnVtX2FudGNmZ181Z2h6OwotCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9UWFBPVzoKIAkJc3dpdGNoIChjYXBhYmlsaXR5KSB7CiAJCWNhc2UgMDoKIAkJCXJldHVybiAwOwogCQljYXNlIDE6Ci0JCQkqcmVzdWx0ID0gYWgtPmFoX3Bvd2VyTGltaXQ7CisJCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQ7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSAyOgotCQkJKnJlc3VsdCA9IGFoLT5haF9tYXhQb3dlckxldmVsOworCQkJKnJlc3VsdCA9IGFoLT5yZWd1bGF0b3J5Lm1heF9wb3dlcl9sZXZlbDsKIAkJCXJldHVybiAwOwogCQljYXNlIDM6Ci0JCQkqcmVzdWx0ID0gYWgtPmFoX3RwU2NhbGU7CisJCQkqcmVzdWx0ID0gYWgtPnJlZ3VsYXRvcnkudHBfc2NhbGU7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyZXR1cm4gZmFsc2U7CisJY2FzZSBBVEg5S19DQVBfRFM6CisJCXJldHVybiAoQVJfU1JFVl85MjgwXzIwX09SX0xBVEVSKGFoKSAmJgorCQkJKGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUkNfQ0hBSU5fTUFTSykgPT0gMSkpCisJCQk/IGZhbHNlIDogdHJ1ZTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CiAJfQogfQogCi1ib29sIGF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9oYWwgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAorYm9vbCBhdGg5a19od19zZXRjYXBhYmlsaXR5KHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2NhcGFiaWxpdHlfdHlwZSB0eXBlLAogCQkJICAgIHUzMiBjYXBhYmlsaXR5LCB1MzIgc2V0dGluZywgaW50ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAl1MzIgdjsKIAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgQVRIOUtfQ0FQX1RLSVBfTUlDOgogCQlpZiAoc2V0dGluZykKLQkJCWFocC0+YWhfc3RhSWQxRGVmYXVsdHMgfD0KKwkJCWFoLT5zdGFfaWQxX2RlZmF1bHRzIHw9CiAJCQkJQVJfU1RBX0lEMV9DUlBUX01JQ19FTkFCTEU7CiAJCWVsc2UKLQkJCWFocC0+YWhfc3RhSWQxRGVmYXVsdHMgJj0KKwkJCWFoLT5zdGFfaWQxX2RlZmF1bHRzICY9CiAJCQkJfkFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFOwogCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIEFUSDlLX0NBUF9ESVZFUlNJVFk6CkBAIC0zNTE0LDE1ICszNTQzLDkgQEAKIAkJcmV0dXJuIHRydWU7CiAJY2FzZSBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSDoKIAkJaWYgKHNldHRpbmcpCi0JCQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzIHw9IEFSX1NUQV9JRDFfTUNBU1RfS1NSQ0g7CisJCQlhaC0+c3RhX2lkMV9kZWZhdWx0cyB8PSBBUl9TVEFfSUQxX01DQVNUX0tTUkNIOwogCQllbHNlCi0JCQlhaHAtPmFoX3N0YUlkMURlZmF1bHRzICY9IH5BUl9TVEFfSUQxX01DQVNUX0tTUkNIOwotCQlyZXR1cm4gdHJ1ZTsKLQljYXNlIEFUSDlLX0NBUF9UU0ZfQURKVVNUOgotCQlpZiAoc2V0dGluZykKLQkJCWFocC0+YWhfbWlzY01vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7Ci0JCWVsc2UKLQkJCWFocC0+YWhfbWlzY01vZGUgJj0gfkFSX1BDVV9UWF9BRERfVFNGOworCQkJYWgtPnN0YV9pZDFfZGVmYXVsdHMgJj0gfkFSX1NUQV9JRDFfTUNBU1RfS1NSQ0g7CiAJCXJldHVybiB0cnVlOwogCWRlZmF1bHQ6CiAJCXJldHVybiBmYWxzZTsKQEAgLTM1MzMsNyArMzU1Niw3IEBACiAvKiBHUElPIC8gUkZLSUxMIC8gQW50ZW5uYWUgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBhdGg5a19od19ncGlvX2NmZ19vdXRwdXRfbXV4KHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X2dwaW9fY2ZnX291dHB1dF9tdXgoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkJCSB1MzIgZ3BpbywgdTMyIHR5cGUpCiB7CiAJaW50IGFkZHI7CkBAIC0zNTYxLDExICszNTg0LDExIEBACiAJfQogfQogCi12b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8pCit2b2lkIGF0aDlrX2h3X2NmZ19ncGlvX2lucHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbykKIHsKIAl1MzIgZ3Bpb19zaGlmdDsKIAotCUFTU0VSVChncGlvIDwgYWgtPmFoX2NhcHMubnVtX2dwaW9fcGlucyk7CisJQVNTRVJUKGdwaW8gPCBhaC0+Y2Fwcy5udW1fZ3Bpb19waW5zKTsKIAogCWdwaW9fc2hpZnQgPSBncGlvIDw8IDE7CiAKQEAgLTM1NzUsMjIgKzM1OTgsMjMgQEAKIAkJKEFSX0dQSU9fT0VfT1VUX0RSViA8PCBncGlvX3NoaWZ0KSk7CiB9CiAKLXUzMiBhdGg5a19od19ncGlvX2dldChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvKQordTMyIGF0aDlrX2h3X2dwaW9fZ2V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbykKIHsKLQlpZiAoZ3BpbyA+PSBhaC0+YWhfY2Fwcy5udW1fZ3Bpb19waW5zKQorI2RlZmluZSBNU19SRUdfUkVBRCh4LCB5KSBcCisJKE1TKFJFR19SRUFEKGFoLCBBUl9HUElPX0lOX09VVCksIHgjI19HUElPX0lOX1ZBTCkgJiAoQVJfR1BJT19CSVQoeSkpKQorCisJaWYgKGdwaW8gPj0gYWgtPmNhcHMubnVtX2dwaW9fcGlucykKIAkJcmV0dXJuIDB4ZmZmZmZmZmY7CiAKLQlpZiAoQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKGFoKSkgewotCQlyZXR1cm4gKE1TCi0JCQkoUkVHX1JFQUQoYWgsIEFSX0dQSU9fSU5fT1VUKSwKLQkJCSBBUjkyOFhfR1BJT19JTl9WQUwpICYgQVJfR1BJT19CSVQoZ3BpbykpICE9IDA7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIChNUyhSRUdfUkVBRChhaCwgQVJfR1BJT19JTl9PVVQpLCBBUl9HUElPX0lOX1ZBTCkgJgotCQkJQVJfR1BJT19CSVQoZ3BpbykpICE9IDA7Ci0JfQorCWlmIChBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoYWgpKQorCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVI5Mjg1LCBncGlvKSAhPSAwOworCWVsc2UgaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCisJCXJldHVybiBNU19SRUdfUkVBRChBUjkyOFgsIGdwaW8pICE9IDA7CisJZWxzZQorCQlyZXR1cm4gTVNfUkVHX1JFQUQoQVIsIGdwaW8pICE9IDA7CiB9CiAKLXZvaWQgYXRoOWtfaHdfY2ZnX291dHB1dChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBncGlvLAordm9pZCBhdGg5a19od19jZmdfb3V0cHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywKIAkJCSB1MzIgYWhfc2lnbmFsX3R5cGUpCiB7CiAJdTMyIGdwaW9fc2hpZnQ7CkBAIC0zNjA1LDE0ICszNjI5LDE0IEBACiAJCShBUl9HUElPX09FX09VVF9EUlYgPDwgZ3Bpb19zaGlmdCkpOwogfQogCi12b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGdwaW8sIHUzMiB2YWwpCit2b2lkIGF0aDlrX2h3X3NldF9ncGlvKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywgdTMyIHZhbCkKIHsKIAlSRUdfUk1XKGFoLCBBUl9HUElPX0lOX09VVCwgKCh2YWwgJiAxKSA8PCBncGlvKSwKIAkJQVJfR1BJT19CSVQoZ3BpbykpOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotdm9pZCBhdGg5a19lbmFibGVfcmZraWxsKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfZW5hYmxlX3Jma2lsbChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfR1BJT19JTlBVVF9FTl9WQUwsCiAJCSAgICBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQik7CkBAIC0zNjIwLDUwICszNjQ0LDI4IEBACiAJUkVHX0NMUl9CSVQoYWgsIEFSX0dQSU9fSU5QVVRfTVVYMiwKIAkJICAgIEFSX0dQSU9fSU5QVVRfTVVYMl9SRlNJTEVOVCk7CiAKLQlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmFoX3Jma2lsbF9ncGlvKTsKKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPnJma2lsbF9ncGlvKTsKIAlSRUdfU0VUX0JJVChhaCwgQVJfUEhZX1RFU1QsIFJGU0lMRU5UX0JCKTsKIH0KICNlbmRpZgogCi1pbnQgYXRoOWtfaHdfc2VsZWN0X2FudGNvbmZpZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBjZmcpCi17Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKLQljb25zdCBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOwotCXUxNiBhbnRfY29uZmlnOwotCXUzMiBoYWxOdW1BbnRDb25maWc7Ci0KLQloYWxOdW1BbnRDb25maWcgPSBJU19DSEFOXzJHSFooY2hhbikgPwotCQlwQ2FwLT5udW1fYW50Y2ZnXzJnaHogOiBwQ2FwLT5udW1fYW50Y2ZnXzVnaHo7Ci0KLQlpZiAoY2ZnIDwgaGFsTnVtQW50Q29uZmlnKSB7Ci0JCWlmICghYXRoOWtfaHdfZ2V0X2VlcHJvbV9hbnRlbm5hX2NmZyhhaCwgY2hhbiwKLQkJCQkJCSAgICAgY2ZnLCAmYW50X2NvbmZpZykpIHsKLQkJCVJFR19XUklURShhaCwgQVJfUEhZX1NXSVRDSF9DT00sIGFudF9jb25maWcpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotdTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9oYWwgKmFoKQordTMyIGF0aDlrX2h3X2dldGRlZmFudGVubmEoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIFJFR19SRUFEKGFoLCBBUl9ERUZfQU5URU5OQSkgJiAweDc7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0YW50ZW5uYShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBhbnRlbm5hKQordm9pZCBhdGg5a19od19zZXRhbnRlbm5hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgYW50ZW5uYSkKIHsKIAlSRUdfV1JJVEUoYWgsIEFSX0RFRl9BTlRFTk5BLCAoYW50ZW5uYSAmIDB4NykpOwogfQogCi1ib29sIGF0aDlrX2h3X3NldGFudGVubmFzd2l0Y2goc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19zZXRhbnRlbm5hc3dpdGNoKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJICAgICAgIGVudW0gYXRoOWtfYW50X3NldHRpbmcgc2V0dGluZ3MsCiAJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkgICAgICAgdTggKnR4X2NoYWlubWFzaywKIAkJCSAgICAgICB1OCAqcnhfY2hhaW5tYXNrLAogCQkJICAgICAgIHU4ICphbnRlbm5hX2NmZ2QpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKIAlzdGF0aWMgdTggdHhfY2hhaW5tYXNrX2NmZywgcnhfY2hhaW5tYXNrX2NmZzsKIAogCWlmIChBUl9TUkVWXzkyODAoYWgpKSB7CkBAIC0zNjgwLDcgKzM2ODIsNyBAQAogCQkJKmFudGVubmFfY2ZnZCA9IHRydWU7CiAJCQlicmVhazsKIAkJY2FzZSBBVEg5S19BTlRfRklYRURfQjoKLQkJCWlmIChhaC0+YWhfY2Fwcy50eF9jaGFpbm1hc2sgPgorCQkJaWYgKGFoLT5jYXBzLnR4X2NoYWlubWFzayA+CiAJCQkgICAgQVRIOUtfQU5URU5OQTFfQ0hBSU5NQVNLKSB7CiAJCQkJKnR4X2NoYWlubWFzayA9IEFUSDlLX0FOVEVOTkExX0NIQUlOTUFTSzsKIAkJCX0KQEAgLTM2OTYsNyArMzY5OCw3IEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7Ci0JCWFocC0+YWhfZGl2ZXJzaXR5Q29udHJvbCA9IHNldHRpbmdzOworCQlhaC0+ZGl2ZXJzaXR5X2NvbnRyb2wgPSBzZXR0aW5nczsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsKQEAgLTM3MDYsNyArMzcwOCw3IEBACiAvKiBHZW5lcmFsIE9wZXJhdGlvbiAqLwogLyoqKioqKioqKioqKioqKioqKioqKi8KIAotdTMyIGF0aDlrX2h3X2dldHJ4ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCkKK3UzMiBhdGg5a19od19nZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAl1MzIgYml0cyA9IFJFR19SRUFEKGFoLCBBUl9SWF9GSUxURVIpOwogCXUzMiBwaHliaXRzID0gUkVHX1JFQUQoYWgsIEFSX1BIWV9FUlIpOwpAQCAtMzcxOSw3ICszNzIxLDcgQEAKIAlyZXR1cm4gYml0czsKIH0KIAotdm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBiaXRzKQordm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGJpdHMpCiB7CiAJdTMyIHBoeWJpdHM7CiAKQEAgLTM3MzksMTIgKzM3NDEsMTIgQEAKIAkJCSAgUkVHX1JFQUQoYWgsIEFSX1JYQ0ZHKSAmIH5BUl9SWENGR19aTEZETUEpOwogfQogCi1ib29sIGF0aDlrX2h3X3BoeV9kaXNhYmxlKHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfcGh5X2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJcmV0dXJuIGF0aDlrX2h3X3NldF9yZXNldF9yZWcoYWgsIEFUSDlLX1JFU0VUX1dBUk0pOwogfQogCi1ib29sIGF0aDlrX2h3X2Rpc2FibGUoc3RydWN0IGF0aF9oYWwgKmFoKQorYm9vbCBhdGg5a19od19kaXNhYmxlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWlmICghYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0FXQUtFKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMzc1Miw4MiArMzc1NCw1NCBAQAogCXJldHVybiBhdGg5a19od19zZXRfcmVzZXRfcmVnKGFoLCBBVEg5S19SRVNFVF9DT0xEKTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGxpbWl0KQorYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbGltaXQpCiB7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbiA9IGFoLT5jdXJjaGFuOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGNoYW4tPmNoYW47CiAKLQlhaC0+YWhfcG93ZXJMaW1pdCA9IG1pbihsaW1pdCwgKHUzMikgTUFYX1JBVEVfUE9XRVIpOworCWFoLT5yZWd1bGF0b3J5LnBvd2VyX2xpbWl0ID0gbWluKGxpbWl0LCAodTMyKSBNQVhfUkFURV9QT1dFUik7CiAKLQlpZiAoYXRoOWtfaHdfc2V0X3R4cG93ZXIoYWgsIGNoYW4sCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2N0bChhaCwgY2hhbiksCi0JCQkJIGF0aDlrX3JlZ2RfZ2V0X2FudGVubmFfYWxsb3dlZChhaCwgY2hhbiksCi0JCQkJIGNoYW4tPm1heFJlZ1R4UG93ZXIgKiAyLAotCQkJCSBtaW4oKHUzMikgTUFYX1JBVEVfUE9XRVIsCi0JCQkJICAgICAodTMyKSBhaC0+YWhfcG93ZXJMaW1pdCkpICE9IDApCisJaWYgKGFoLT5lZXBfb3BzLT5zZXRfdHhwb3dlcihhaCwgY2hhbiwKKwkJCSAgICAgYXRoOWtfcmVnZF9nZXRfY3RsKGFoLCBjaGFuKSwKKwkJCSAgICAgY2hhbm5lbC0+bWF4X2FudGVubmFfZ2FpbiAqIDIsCisJCQkgICAgIGNoYW5uZWwtPm1heF9wb3dlciAqIDIsCisJCQkgICAgIG1pbigodTMyKSBNQVhfUkFURV9QT1dFUiwKKwkJCQkgKHUzMikgYWgtPnJlZ3VsYXRvcnkucG93ZXJfbGltaXQpKSAhPSAwKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBhdGg5a19od19nZXRtYWMoc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFjKQordm9pZCBhdGg5a19od19zZXRtYWMoc3RydWN0IGF0aF9odyAqYWgsIGNvbnN0IHU4ICptYWMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCW1lbWNweShtYWMsIGFocC0+YWhfbWFjYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShhaC0+bWFjYWRkciwgbWFjLCBFVEhfQUxFTik7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0bWFjKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKm1hYykKK3ZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkoYWhwLT5haF9tYWNhZGRyLCBtYWMsIEVUSF9BTEVOKTsKLQotCXJldHVybiB0cnVlOworCWF0aDlrX2h3X3NldF9vcGVyYXRpbmdfbW9kZShhaCwgYWgtPm9wbW9kZSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0b3Btb2RlKHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQlhdGg5a19od19zZXRfb3BlcmF0aW5nX21vZGUoYWgsIGFoLT5haF9vcG1vZGUpOwotfQotCi12b2lkIGF0aDlrX2h3X3NldG1jYXN0ZmlsdGVyKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKQordm9pZCBhdGg5a19od19zZXRtY2FzdGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKQogewogCVJFR19XUklURShhaCwgQVJfTUNBU1RfRklMMCwgZmlsdGVyMCk7CiAJUkVHX1dSSVRFKGFoLCBBUl9NQ0FTVF9GSUwxLCBmaWx0ZXIxKTsKIH0KIAotdm9pZCBhdGg5a19od19nZXRic3NpZG1hc2soc3RydWN0IGF0aF9oYWwgKmFoLCB1OCAqbWFzaykKK3ZvaWQgYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkobWFzaywgYWhwLT5haF9ic3NpZG1hc2ssIEVUSF9BTEVOKTsKKwlSRUdfV1JJVEUoc2MtPnNjX2FoLCBBUl9CU1NNU0tMLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmJzc2lkbWFzaykpOworCVJFR19XUklURShzYy0+c2NfYWgsIEFSX0JTU01TS1UsIGdldF91bmFsaWduZWRfbGUxNihzYy0+YnNzaWRtYXNrICsgNCkpOwogfQogCi1ib29sIGF0aDlrX2h3X3NldGJzc2lkbWFzayhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGNvbnN0IHU4ICptYXNrKQordm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQltZW1jcHkoYWhwLT5haF9ic3NpZG1hc2ssIG1hc2ssIEVUSF9BTEVOKTsKLQotCVJFR19XUklURShhaCwgQVJfQlNTTVNLTCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWRtYXNrKSk7Ci0JUkVHX1dSSVRFKGFoLCBBUl9CU1NNU0tVLCBnZXRfdW5hbGlnbmVkX2xlMTYoYWhwLT5haF9ic3NpZG1hc2sgKyA0KSk7Ci0KLQlyZXR1cm4gdHJ1ZTsKKwlSRUdfV1JJVEUoc2MtPnNjX2FoLCBBUl9CU1NfSUQwLCBnZXRfdW5hbGlnbmVkX2xlMzIoc2MtPmN1cmJzc2lkKSk7CisJUkVHX1dSSVRFKHNjLT5zY19haCwgQVJfQlNTX0lEMSwgZ2V0X3VuYWxpZ25lZF9sZTE2KHNjLT5jdXJic3NpZCArIDQpIHwKKwkJICAoKHNjLT5jdXJhaWQgJiAweDNmZmYpIDw8IEFSX0JTU19JRDFfQUlEX1MpKTsKIH0KIAotdm9pZCBhdGg5a19od193cml0ZV9hc3NvY2lkKHN0cnVjdCBhdGhfaGFsICphaCwgY29uc3QgdTggKmJzc2lkLCB1MTYgYXNzb2NJZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCi0JbWVtY3B5KGFocC0+YWhfYnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JYWhwLT5haF9hc3NvY0lkID0gYXNzb2NJZDsKLQotCVJFR19XUklURShhaCwgQVJfQlNTX0lEMCwgZ2V0X3VuYWxpZ25lZF9sZTMyKGFocC0+YWhfYnNzaWQpKTsKLQlSRUdfV1JJVEUoYWgsIEFSX0JTU19JRDEsIGdldF91bmFsaWduZWRfbGUxNihhaHAtPmFoX2Jzc2lkICsgNCkgfAotCQkgICgoYXNzb2NJZCAmIDB4M2ZmZikgPDwgQVJfQlNTX0lEMV9BSURfUykpOwotfQotCi11NjQgYXRoOWtfaHdfZ2V0dHNmNjQoc3RydWN0IGF0aF9oYWwgKmFoKQordTY0IGF0aDlrX2h3X2dldHRzZjY0KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXU2NCB0c2Y7CiAKQEAgLTM4MzcsNyArMzgxMSwxMyBAQAogCXJldHVybiB0c2Y7CiB9CiAKLXZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfc2V0dHNmNjQoc3RydWN0IGF0aF9odyAqYWgsIHU2NCB0c2Y2NCkKK3sKKwlSRUdfV1JJVEUoYWgsIEFSX1RTRl9MMzIsIHRzZjY0ICYgMHhmZmZmZmZmZik7CisJUkVHX1dSSVRFKGFoLCBBUl9UU0ZfVTMyLCAodHNmNjQgPj4gMzIpICYgMHhmZmZmZmZmZik7Cit9CisKK3ZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWludCBjb3VudDsKIApAQCAtMzg1NCw0MiArMzgzNCw2NSBAQAogCVJFR19XUklURShhaCwgQVJfUkVTRVRfVFNGLCBBUl9SRVNFVF9UU0ZfT05DRSk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBzZXR0aW5nKQorYm9vbCBhdGg5a19od19zZXRfdHNmYWRqdXN0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgc2V0dGluZykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHNldHRpbmcpCi0JCWFocC0+YWhfbWlzY01vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7CisJCWFoLT5taXNjX21vZGUgfD0gQVJfUENVX1RYX0FERF9UU0Y7CiAJZWxzZQotCQlhaHAtPmFoX21pc2NNb2RlICY9IH5BUl9QQ1VfVFhfQUREX1RTRjsKKwkJYWgtPm1pc2NfbW9kZSAmPSB+QVJfUENVX1RYX0FERF9UU0Y7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiB1cykKK2Jvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCiAJaWYgKHVzIDwgQVRIOUtfU0xPVF9USU1FXzkgfHwgdXMgPiBhdGg5a19od19tYWNfdG9fdXNlYyhhaCwgMHhmZmZmKSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRVNFVCwgImJhZCBzbG90IHRpbWUgJXVcbiIsIHVzKTsKLQkJYWhwLT5haF9zbG90dGltZSA9ICh1MzIpIC0xOworCQlhaC0+c2xvdHRpbWUgPSAodTMyKSAtMTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCVJFR19XUklURShhaCwgQVJfRF9HQkxfSUZTX1NMT1QsIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaHAtPmFoX3Nsb3R0aW1lID0gdXM7CisJCWFoLT5zbG90dGltZSA9IHVzOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfaHRfbWFjbW9kZSBtb2RlKQordm9pZCBhdGg5a19od19zZXQxMW5tYWMyMDQwKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2h0X21hY21vZGUgbW9kZSkKIHsKIAl1MzIgbWFjbW9kZTsKIAogCWlmIChtb2RlID09IEFUSDlLX0hUX01BQ01PREVfMjA0MCAmJgotCSAgICAhYWgtPmFoX2NvbmZpZy5jd21faWdub3JlX2V4dGNjYSkKKwkgICAgIWFoLT5jb25maWcuY3dtX2lnbm9yZV9leHRjY2EpCiAJCW1hY21vZGUgPSBBUl8yMDQwX0pPSU5FRF9SWF9DTEVBUjsKIAllbHNlCiAJCW1hY21vZGUgPSAwOwogCiAJUkVHX1dSSVRFKGFoLCBBUl8yMDQwX01PREUsIG1hY21vZGUpOwogfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIEJsdWV0b290aCBDb2V4aXN0ZW5jZSAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwkvKiBjb25uZWN0IGJ0X2FjdGl2ZSB0byBiYXNlYmFuZCAqLworCVJFR19DTFJfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwKKwkJCShBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9ERUYgfAorCQkJIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0ZSRVFVRU5DWV9ERUYpKTsKKworCVJFR19TRVRfQklUKGFoLCBBUl9HUElPX0lOUFVUX0VOX1ZBTCwKKwkJCUFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQik7CisKKwkvKiBTZXQgaW5wdXQgbXV4IGZvciBidF9hY3RpdmUgdG8gZ3BpbyBwaW4gKi8KKwlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9HUElPX0lOUFVUX01VWDEsCisJCQlBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFLAorCQkJYWgtPmJ0YWN0aXZlX2dwaW8pOworCisJLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIGdwaW8gcG9ydCBmb3IgaW5wdXQgKi8KKwlhdGg5a19od19jZmdfZ3Bpb19pbnB1dChhaCwgYWgtPmJ0YWN0aXZlX2dwaW8pOworCisJLyogQ29uZmlndXJlIHRoZSBkZXNpcmVkIEdQSU8gcG9ydCBmb3IgVFhfRlJBTUUgb3V0cHV0ICovCisJYXRoOWtfaHdfY2ZnX291dHB1dChhaCwgYWgtPndsYW5hY3RpdmVfZ3BpbywKKwkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmgKaW5kZXggOTFkOGY1OTQuLjBiNTk0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaHcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE5LDkzNiArMTksNDMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCi1zdHJ1Y3QgYXI1NDE2X2Rlc2MgewotCXUzMiBkc19saW5rOwotCXUzMiBkc19kYXRhOwotCXUzMiBkc19jdGwwOwotCXUzMiBkc19jdGwxOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXUzMiBjdGwyOwotCQkJdTMyIGN0bDM7Ci0JCQl1MzIgY3RsNDsKLQkJCXUzMiBjdGw1OwotCQkJdTMyIGN0bDY7Ci0JCQl1MzIgY3RsNzsKLQkJCXUzMiBjdGw4OwotCQkJdTMyIGN0bDk7Ci0JCQl1MzIgY3RsMTA7Ci0JCQl1MzIgY3RsMTE7Ci0JCQl1MzIgc3RhdHVzMDsKLQkJCXUzMiBzdGF0dXMxOwotCQkJdTMyIHN0YXR1czI7Ci0JCQl1MzIgc3RhdHVzMzsKLQkJCXUzMiBzdGF0dXM0OwotCQkJdTMyIHN0YXR1czU7Ci0JCQl1MzIgc3RhdHVzNjsKLQkJCXUzMiBzdGF0dXM3OwotCQkJdTMyIHN0YXR1czg7Ci0JCQl1MzIgc3RhdHVzOTsKLQkJfSB0eDsKLQkJc3RydWN0IHsKLQkJCXUzMiBzdGF0dXMwOwotCQkJdTMyIHN0YXR1czE7Ci0JCQl1MzIgc3RhdHVzMjsKLQkJCXUzMiBzdGF0dXMzOwotCQkJdTMyIHN0YXR1czQ7Ci0JCQl1MzIgc3RhdHVzNTsKLQkJCXUzMiBzdGF0dXM2OwotCQkJdTMyIHN0YXR1czc7Ci0JCQl1MzIgc3RhdHVzODsKLQkJfSByeDsKLQl9IHU7Ci19IF9fcGFja2VkOworI2luY2x1ZGUgIm1hYy5oIgorI2luY2x1ZGUgImFuaS5oIgorI2luY2x1ZGUgImVlcHJvbS5oIgorI2luY2x1ZGUgImNhbGliLmgiCisjaW5jbHVkZSAicmVnZC5oIgorI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgInBoeS5oIgogCi0jZGVmaW5lIEFSNTQxNkRFU0MoX2RzKSAgICAgICAgICgoc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCi0jZGVmaW5lIEFSNTQxNkRFU0NfQ09OU1QoX2RzKSAgICgoY29uc3Qgc3RydWN0IGFyNTQxNl9kZXNjICopKF9kcykpCisjZGVmaW5lIEFUSEVST1NfVkVORE9SX0lECTB4MTY4YworI2RlZmluZSBBUjU0MTZfREVWSURfUENJCTB4MDAyMworI2RlZmluZSBBUjU0MTZfREVWSURfUENJRQkweDAwMjQKKyNkZWZpbmUgQVI5MTYwX0RFVklEX1BDSQkweDAwMjcKKyNkZWZpbmUgQVI5MjgwX0RFVklEX1BDSQkweDAwMjkKKyNkZWZpbmUgQVI5MjgwX0RFVklEX1BDSUUJMHgwMDJhCisjZGVmaW5lIEFSOTI4NV9ERVZJRF9QQ0lFCTB4MDAyYgorI2RlZmluZSBBUjU0MTZfQVI5MTAwX0RFVklECTB4MDAwYgorI2RlZmluZQlBUl9TVUJWRU5ET1JfSURfTk9HCTB4MGUxMQorI2RlZmluZSBBUl9TVUJWRU5ET1JfSURfTkVXX0EJMHg3MDY1CisjZGVmaW5lIEFSNTQxNl9NQUdJQwkJMHgxOTY0MTAxNAogCi0jZGVmaW5lIGRzX2N0bDIgICAgIHUudHguY3RsMgotI2RlZmluZSBkc19jdGwzICAgICB1LnR4LmN0bDMKLSNkZWZpbmUgZHNfY3RsNCAgICAgdS50eC5jdGw0Ci0jZGVmaW5lIGRzX2N0bDUgICAgIHUudHguY3RsNQotI2RlZmluZSBkc19jdGw2ICAgICB1LnR4LmN0bDYKLSNkZWZpbmUgZHNfY3RsNyAgICAgdS50eC5jdGw3Ci0jZGVmaW5lIGRzX2N0bDggICAgIHUudHguY3RsOAotI2RlZmluZSBkc19jdGw5ICAgICB1LnR4LmN0bDkKLSNkZWZpbmUgZHNfY3RsMTAgICAgdS50eC5jdGwxMAotI2RlZmluZSBkc19jdGwxMSAgICB1LnR4LmN0bDExCisvKiBSZWdpc3RlciByZWFkL3dyaXRlIHByaW1pdGl2ZXMgKi8KKyNkZWZpbmUgUkVHX1dSSVRFKF9haCwgX3JlZywgX3ZhbCkgYXRoOWtfaW93cml0ZTMyKChfYWgpLCAoX3JlZyksIChfdmFsKSkKKyNkZWZpbmUgUkVHX1JFQUQoX2FoLCBfcmVnKSBhdGg5a19pb3JlYWQzMigoX2FoKSwgKF9yZWcpKQogCi0jZGVmaW5lIGRzX3R4c3RhdHVzMCAgICB1LnR4LnN0YXR1czAKLSNkZWZpbmUgZHNfdHhzdGF0dXMxICAgIHUudHguc3RhdHVzMQotI2RlZmluZSBkc190eHN0YXR1czIgICAgdS50eC5zdGF0dXMyCi0jZGVmaW5lIGRzX3R4c3RhdHVzMyAgICB1LnR4LnN0YXR1czMKLSNkZWZpbmUgZHNfdHhzdGF0dXM0ICAgIHUudHguc3RhdHVzNAotI2RlZmluZSBkc190eHN0YXR1czUgICAgdS50eC5zdGF0dXM1Ci0jZGVmaW5lIGRzX3R4c3RhdHVzNiAgICB1LnR4LnN0YXR1czYKLSNkZWZpbmUgZHNfdHhzdGF0dXM3ICAgIHUudHguc3RhdHVzNwotI2RlZmluZSBkc190eHN0YXR1czggICAgdS50eC5zdGF0dXM4Ci0jZGVmaW5lIGRzX3R4c3RhdHVzOSAgICB1LnR4LnN0YXR1czkKLQotI2RlZmluZSBkc19yeHN0YXR1czAgICAgdS5yeC5zdGF0dXMwCi0jZGVmaW5lIGRzX3J4c3RhdHVzMSAgICB1LnJ4LnN0YXR1czEKLSNkZWZpbmUgZHNfcnhzdGF0dXMyICAgIHUucnguc3RhdHVzMgotI2RlZmluZSBkc19yeHN0YXR1czMgICAgdS5yeC5zdGF0dXMzCi0jZGVmaW5lIGRzX3J4c3RhdHVzNCAgICB1LnJ4LnN0YXR1czQKLSNkZWZpbmUgZHNfcnhzdGF0dXM1ICAgIHUucnguc3RhdHVzNQotI2RlZmluZSBkc19yeHN0YXR1czYgICAgdS5yeC5zdGF0dXM2Ci0jZGVmaW5lIGRzX3J4c3RhdHVzNyAgICB1LnJ4LnN0YXR1czcKLSNkZWZpbmUgZHNfcnhzdGF0dXM4ICAgIHUucnguc3RhdHVzOAotCi0jZGVmaW5lIEFSX0ZyYW1lTGVuICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBBUl9WaXJ0TW9yZUZyYWcgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQVJfVHhDdGxSc3ZkMDAgICAgICAweDAwMDBlMDAwCi0jZGVmaW5lIEFSX1htaXRQb3dlciAgICAgICAgMHgwMDNmMDAwMAotI2RlZmluZSBBUl9YbWl0UG93ZXJfUyAgICAgIDE2Ci0jZGVmaW5lIEFSX1JUU0VuYWJsZSAgICAgICAgMHgwMDQwMDAwMAotI2RlZmluZSBBUl9WRU9MICAgICAgICAgICAgIDB4MDA4MDAwMDAKLSNkZWZpbmUgQVJfQ2xyRGVzdE1hc2sgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIEFSX1R4Q3RsUnN2ZDAxICAgICAgMHgxZTAwMDAwMAotI2RlZmluZSBBUl9UeEludHJSZXEgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgQVJfRGVzdElkeFZhbGlkICAgICAweDQwMDAwMDAwCi0jZGVmaW5lIEFSX0NUU0VuYWJsZSAgICAgICAgMHg4MDAwMDAwMAotCi0jZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBBUl9UeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQVJfRGVzdElkeCAgICAgICAgICAweDAwMGZlMDAwCi0jZGVmaW5lIEFSX0Rlc3RJZHhfUyAgICAgICAgMTMKLSNkZWZpbmUgQVJfRnJhbWVUeXBlICAgICAgICAweDAwZjAwMDAwCi0jZGVmaW5lIEFSX0ZyYW1lVHlwZV9TICAgICAgMjAKLSNkZWZpbmUgQVJfTm9BY2sgICAgICAgICAgICAweDAxMDAwMDAwCi0jZGVmaW5lIEFSX0luc2VydFRTICAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBBUl9Db3JydXB0RkNTICAgICAgIDB4MDQwMDAwMDAKLSNkZWZpbmUgQVJfRXh0T25seSAgICAgICAgICAweDA4MDAwMDAwCi0jZGVmaW5lIEFSX0V4dEFuZEN0bCAgICAgICAgMHgxMDAwMDAwMAotI2RlZmluZSBBUl9Nb3JlQWdnciAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgQVJfSXNBZ2dyICAgICAgICAgICAweDQwMDAwMDAwCi0KLSNkZWZpbmUgQVJfQnVyc3REdXIgICAgICAgICAweDAwMDA3ZmZmCi0jZGVmaW5lIEFSX0J1cnN0RHVyX1MgICAgICAgMAotI2RlZmluZSBBUl9EdXJVcGRhdGVFbmEgICAgIDB4MDAwMDgwMDAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczAgICAweDAwMGYwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMwX1MgMTYKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczEgICAweDAwZjAwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMxX1MgMjAKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczIgICAweDBmMDAwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMyX1MgMjQKLSNkZWZpbmUgQVJfWG1pdERhdGFUcmllczMgICAweGYwMDAwMDAwCi0jZGVmaW5lIEFSX1htaXREYXRhVHJpZXMzX1MgMjgKLQotI2RlZmluZSBBUl9YbWl0UmF0ZTAgICAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQVJfWG1pdFJhdGUwX1MgICAgICAwCi0jZGVmaW5lIEFSX1htaXRSYXRlMSAgICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBBUl9YbWl0UmF0ZTFfUyAgICAgIDgKLSNkZWZpbmUgQVJfWG1pdFJhdGUyICAgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIEFSX1htaXRSYXRlMl9TICAgICAgMTYKLSNkZWZpbmUgQVJfWG1pdFJhdGUzICAgICAgICAweGZmMDAwMDAwCi0jZGVmaW5lIEFSX1htaXRSYXRlM19TICAgICAgMjQKLQotI2RlZmluZSBBUl9QYWNrZXREdXIwICAgICAgIDB4MDAwMDdmZmYKLSNkZWZpbmUgQVJfUGFja2V0RHVyMF9TICAgICAwCi0jZGVmaW5lIEFSX1JUU0NUU1F1YWwwICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBBUl9QYWNrZXREdXIxICAgICAgIDB4N2ZmZjAwMDAKLSNkZWZpbmUgQVJfUGFja2V0RHVyMV9TICAgICAxNgotI2RlZmluZSBBUl9SVFNDVFNRdWFsMSAgICAgIDB4ODAwMDAwMDAKLQotI2RlZmluZSBBUl9QYWNrZXREdXIyICAgICAgIDB4MDAwMDdmZmYKLSNkZWZpbmUgQVJfUGFja2V0RHVyMl9TICAgICAwCi0jZGVmaW5lIEFSX1JUU0NUU1F1YWwyICAgICAgMHgwMDAwODAwMAotI2RlZmluZSBBUl9QYWNrZXREdXIzICAgICAgIDB4N2ZmZjAwMDAKLSNkZWZpbmUgQVJfUGFja2V0RHVyM19TICAgICAxNgotI2RlZmluZSBBUl9SVFNDVFNRdWFsMyAgICAgIDB4ODAwMDAwMDAKLQotI2RlZmluZSBBUl9BZ2dyTGVuICAgICAgICAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgQVJfQWdnckxlbl9TICAgICAgICAwCi0jZGVmaW5lIEFSX1R4Q3RsUnN2ZDYwICAgICAgMHgwMDAzMDAwMAotI2RlZmluZSBBUl9QYWREZWxpbSAgICAgICAgIDB4MDNmYzAwMDAKLSNkZWZpbmUgQVJfUGFkRGVsaW1fUyAgICAgICAxOAotI2RlZmluZSBBUl9FbmNyVHlwZSAgICAgICAgIDB4MGMwMDAwMDAKLSNkZWZpbmUgQVJfRW5jclR5cGVfUyAgICAgICAyNgotI2RlZmluZSBBUl9UeEN0bFJzdmQ2MSAgICAgIDB4ZjAwMDAwMDAKLQotI2RlZmluZSBBUl8yMDQwXzAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfR0kwICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFSX0NoYWluU2VsMCAgICAgICAgMHgwMDAwMDAxYwotI2RlZmluZSBBUl9DaGFpblNlbDBfUyAgICAgIDIKLSNkZWZpbmUgQVJfMjA0MF8xICAgICAgICAgICAweDAwMDAwMDIwCi0jZGVmaW5lIEFSX0dJMSAgICAgICAgICAgICAgMHgwMDAwMDA0MAotI2RlZmluZSBBUl9DaGFpblNlbDEgICAgICAgIDB4MDAwMDAzODAKLSNkZWZpbmUgQVJfQ2hhaW5TZWwxX1MgICAgICA3Ci0jZGVmaW5lIEFSXzIwNDBfMiAgICAgICAgICAgMHgwMDAwMDQwMAotI2RlZmluZSBBUl9HSTIgICAgICAgICAgICAgIDB4MDAwMDA4MDAKLSNkZWZpbmUgQVJfQ2hhaW5TZWwyICAgICAgICAweDAwMDA3MDAwCi0jZGVmaW5lIEFSX0NoYWluU2VsMl9TICAgICAgMTIKLSNkZWZpbmUgQVJfMjA0MF8zICAgICAgICAgICAweDAwMDA4MDAwCi0jZGVmaW5lIEFSX0dJMyAgICAgICAgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBBUl9DaGFpblNlbDMgICAgICAgIDB4MDAwZTAwMDAKLSNkZWZpbmUgQVJfQ2hhaW5TZWwzX1MgICAgICAxNwotI2RlZmluZSBBUl9SVFNDVFNSYXRlICAgICAgIDB4MGZmMDAwMDAKLSNkZWZpbmUgQVJfUlRTQ1RTUmF0ZV9TICAgICAyMAotI2RlZmluZSBBUl9UeEN0bFJzdmQ3MCAgICAgIDB4ZjAwMDAwMDAKLQotI2RlZmluZSBBUl9UeFJTU0lBbnQwMCAgICAgIDB4MDAwMDAwZmYKLSNkZWZpbmUgQVJfVHhSU1NJQW50MDBfUyAgICAwCi0jZGVmaW5lIEFSX1R4UlNTSUFudDAxICAgICAgMHgwMDAwZmYwMAotI2RlZmluZSBBUl9UeFJTU0lBbnQwMV9TICAgIDgKLSNkZWZpbmUgQVJfVHhSU1NJQW50MDIgICAgICAweDAwZmYwMDAwCi0jZGVmaW5lIEFSX1R4UlNTSUFudDAyX1MgICAgMTYKLSNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkMDAgICAweDNmMDAwMDAwCi0jZGVmaW5lIEFSX1R4QmFTdGF0dXMgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQwMSAgIDB4ODAwMDAwMDAKLQotI2RlZmluZSBBUl9Gcm1YbWl0T0sgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX0V4Y2Vzc2l2ZVJldHJpZXMgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgQVJfRklGT1VuZGVycnVuICAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBUl9GaWx0ZXJlZCAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFSX1JUU0ZhaWxDbnQgICAgICAgICAgIDB4MDAwMDAwZjAKLSNkZWZpbmUgQVJfUlRTRmFpbENudF9TICAgICAgICAgNAotI2RlZmluZSBBUl9EYXRhRmFpbENudCAgICAgICAgICAweDAwMDAwZjAwCi0jZGVmaW5lIEFSX0RhdGFGYWlsQ250X1MgICAgICAgIDgKLSNkZWZpbmUgQVJfVmlydFJldHJ5Q250ICAgICAgICAgMHgwMDAwZjAwMAotI2RlZmluZSBBUl9WaXJ0UmV0cnlDbnRfUyAgICAgICAxMgotI2RlZmluZSBBUl9UeERlbGltVW5kZXJydW4gICAgICAweDAwMDEwMDAwCi0jZGVmaW5lIEFSX1R4RGF0YVVuZGVycnVuICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgQVJfRGVzY0NmZ0VyciAgICAgICAgICAgMHgwMDA0MDAwMAotI2RlZmluZSBBUl9UeFRpbWVyRXhwaXJlZCAgICAgICAweDAwMDgwMDAwCi0jZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDEwICAgICAgIDB4ZmZmMDAwMDAKLQotI2RlZmluZSBBUl9TZW5kVGltZXN0YW1wICAgIGRzX3R4c3RhdHVzMgotI2RlZmluZSBBUl9CYUJpdG1hcExvdyAgICAgIGRzX3R4c3RhdHVzMwotI2RlZmluZSBBUl9CYUJpdG1hcEhpZ2ggICAgIGRzX3R4c3RhdHVzNAotCi0jZGVmaW5lIEFSX1R4UlNTSUFudDEwICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBBUl9UeFJTU0lBbnQxMF9TICAgIDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MTEgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIEFSX1R4UlNTSUFudDExX1MgICAgOAotI2RlZmluZSBBUl9UeFJTU0lBbnQxMiAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgQVJfVHhSU1NJQW50MTJfUyAgICAxNgotI2RlZmluZSBBUl9UeFJTU0lDb21iaW5lZCAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgQVJfVHhSU1NJQ29tYmluZWRfUyAyNAotCi0jZGVmaW5lIEFSX1R4RVZNMCAgICAgICAgICAgZHNfdHhzdGF0dXM1Ci0jZGVmaW5lIEFSX1R4RVZNMSAgICAgICAgICAgZHNfdHhzdGF0dXM2Ci0jZGVmaW5lIEFSX1R4RVZNMiAgICAgICAgICAgZHNfdHhzdGF0dXM3Ci0KLSNkZWZpbmUgQVJfVHhEb25lICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX1NlcU51bSAgICAgICAgICAgMHgwMDAwMWZmZQotI2RlZmluZSBBUl9TZXFOdW1fUyAgICAgICAgIDEKLSNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODAgICAweDAwMDFlMDAwCi0jZGVmaW5lIEFSX1R4T3BFeGNlZWRlZCAgICAgMHgwMDAyMDAwMAotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MSAgIDB4MDAxYzAwMDAKLSNkZWZpbmUgQVJfRmluYWxUeElkeCAgICAgICAweDAwNjAwMDAwCi0jZGVmaW5lIEFSX0ZpbmFsVHhJZHhfUyAgICAgMjEKLSNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODIgICAweDAxODAwMDAwCi0jZGVmaW5lIEFSX1Bvd2VyTWdtdCAgICAgICAgMHgwMjAwMDAwMAotI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MyAgIDB4ZmMwMDAwMDAKLQotI2RlZmluZSBBUl9SeENUTFJzdmQwMCAgMHhmZmZmZmZmZgotCi0jZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAweDAwMDAwZmZmCi0jZGVmaW5lIEFSX1J4Q3RsUnN2ZDAwICAweDAwMDAxMDAwCi0jZGVmaW5lIEFSX1J4SW50clJlcSAgICAweDAwMDAyMDAwCi0jZGVmaW5lIEFSX1J4Q3RsUnN2ZDAxICAweGZmZmZjMDAwCi0KLSNkZWZpbmUgQVJfUnhSU1NJQW50MDAgICAgICAweDAwMDAwMGZmCi0jZGVmaW5lIEFSX1J4UlNTSUFudDAwX1MgICAgMAotI2RlZmluZSBBUl9SeFJTU0lBbnQwMSAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgQVJfUnhSU1NJQW50MDFfUyAgICA4Ci0jZGVmaW5lIEFSX1J4UlNTSUFudDAyICAgICAgMHgwMGZmMDAwMAotI2RlZmluZSBBUl9SeFJTU0lBbnQwMl9TICAgIDE2Ci0jZGVmaW5lIEFSX1J4UmF0ZSAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBBUl9SeFJhdGVfUyAgICAgICAgIDI0Ci0jZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDAwICAgMHhmZjAwMDAwMAotCi0jZGVmaW5lIEFSX0RhdGFMZW4gICAgICAgICAgMHgwMDAwMGZmZgotI2RlZmluZSBBUl9SeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKLSNkZWZpbmUgQVJfTnVtRGVsaW0gICAgICAgICAweDAwM2ZjMDAwCi0jZGVmaW5lIEFSX051bURlbGltX1MgICAgICAgMTQKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMTAgICAweGZmODAwMDAwCi0KLSNkZWZpbmUgQVJfUmN2VGltZXN0YW1wICAgICBkc19yeHN0YXR1czIKLQotI2RlZmluZSBBUl9HSSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfMjA0MCAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFSX1BhcmFsbGVsNDAgICAgICAgMHgwMDAwMDAwNAotI2RlZmluZSBBUl9QYXJhbGxlbDQwX1MgICAgIDIKLSNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMzAgICAweDAwMDAwMGY4Ci0jZGVmaW5lIEFSX1J4QW50ZW5uYQkgICAgMHhmZmZmZmYwMAotI2RlZmluZSBBUl9SeEFudGVubmFfUwkgICAgOAotCi0jZGVmaW5lIEFSX1J4UlNTSUFudDEwICAgICAgICAgICAgMHgwMDAwMDBmZgotI2RlZmluZSBBUl9SeFJTU0lBbnQxMF9TICAgICAgICAgIDAKLSNkZWZpbmUgQVJfUnhSU1NJQW50MTEgICAgICAgICAgICAweDAwMDBmZjAwCi0jZGVmaW5lIEFSX1J4UlNTSUFudDExX1MgICAgICAgICAgOAotI2RlZmluZSBBUl9SeFJTU0lBbnQxMiAgICAgICAgICAgIDB4MDBmZjAwMDAKLSNkZWZpbmUgQVJfUnhSU1NJQW50MTJfUyAgICAgICAgICAxNgotI2RlZmluZSBBUl9SeFJTU0lDb21iaW5lZCAgICAgICAgIDB4ZmYwMDAwMDAKLSNkZWZpbmUgQVJfUnhSU1NJQ29tYmluZWRfUyAgICAgICAyNAotCi0jZGVmaW5lIEFSX1J4RVZNMCAgICAgICAgICAgZHNfcnhzdGF0dXM0Ci0jZGVmaW5lIEFSX1J4RVZNMSAgICAgICAgICAgZHNfcnhzdGF0dXM1Ci0jZGVmaW5lIEFSX1J4RVZNMiAgICAgICAgICAgZHNfcnhzdGF0dXM2Ci0KLSNkZWZpbmUgQVJfUnhEb25lICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX1J4RnJhbWVPSyAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBBUl9DUkNFcnIgICAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgQVJfRGVjcnlwdENSQ0VyciAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFSX1BIWUVyciAgICAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBBUl9NaWNoYWVsRXJyICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgQVJfUHJlRGVsaW1DUkNFcnIgICAweDAwMDAwMDQwCi0jZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcwICAgMHgwMDAwMDA4MAotI2RlZmluZSBBUl9SeEtleUlkeFZhbGlkICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgQVJfS2V5SWR4ICAgICAgICAgICAweDAwMDBmZTAwCi0jZGVmaW5lIEFSX0tleUlkeF9TICAgICAgICAgOQotI2RlZmluZSBBUl9QSFlFcnJDb2RlICAgICAgIDB4MDAwMGZmMDAKLSNkZWZpbmUgQVJfUEhZRXJyQ29kZV9TICAgICA4Ci0jZGVmaW5lIEFSX1J4TW9yZUFnZ3IgICAgICAgMHgwMDAxMDAwMAotI2RlZmluZSBBUl9SeEFnZ3IgICAgICAgICAgIDB4MDAwMjAwMDAKLSNkZWZpbmUgQVJfUG9zdERlbGltQ1JDRXJyICAweDAwMDQwMDAwCi0jZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcxICAgMHgzZmY4MDAwMAotI2RlZmluZSBBUl9EZWNyeXB0QnVzeUVyciAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgQVJfS2V5TWlzcyAgICAgICAgICAweDgwMDAwMDAwCi0KLSNkZWZpbmUgQVI1NDE2X01BR0lDICAgICAgICAweDE5NjQxMDE0Ci0KLSNkZWZpbmUgUlhTVEFUVVNfUkFURShhaCwgYWRzKSAgKEFSX1NSRVZfNTQxNl9WMjBfT1JfTEFURVIoYWgpID8JXAotCQkJCSBNUyhhZHMtPmRzX3J4c3RhdHVzMCwgQVJfUnhSYXRlKSA6CVwKLQkJCQkgKGFkcy0+ZHNfcnhzdGF0dXMzID4+IDIpICYgMHhGRikKLQotI2RlZmluZSBzZXQxMW5Ucmllcyhfc2VyaWVzLCBfaW5kZXgpIFwKLQkoU00oKF9zZXJpZXMpW19pbmRleF0uVHJpZXMsIEFSX1htaXREYXRhVHJpZXMjI19pbmRleCkpCi0KLSNkZWZpbmUgc2V0MTFuUmF0ZShfc2VyaWVzLCBfaW5kZXgpIFwKLQkoU00oKF9zZXJpZXMpW19pbmRleF0uUmF0ZSwgQVJfWG1pdFJhdGUjI19pbmRleCkpCi0KLSNkZWZpbmUgc2V0MTFuUGt0RHVyUlRTQ1RTKF9zZXJpZXMsIF9pbmRleCkJCQkJXAotCShTTSgoX3NlcmllcylbX2luZGV4XS5Qa3REdXJhdGlvbiwgQVJfUGFja2V0RHVyIyNfaW5kZXgpIHwJXAotCSgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFMgICA/CVwKLQkJQVJfUlRTQ1RTUXVhbCMjX2luZGV4IDogMCkpCi0KLSNkZWZpbmUgc2V0MTFuUmF0ZUZsYWdzKF9zZXJpZXMsIF9pbmRleCkJCQkJXAotCSgoKF9zZXJpZXMpW19pbmRleF0uUmF0ZUZsYWdzICYgQVRIOUtfUkFURVNFUklFU18yMDQwID8JCVwKLQkgIEFSXzIwNDBfIyNfaW5kZXggOiAwKQkJCQkJCVwKLQkgfCgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTX0hBTEZHSSA/CVwKLQkgICBBUl9HSSMjX2luZGV4IDogMCkJCQkJCQlcCi0JIHxTTSgoX3NlcmllcylbX2luZGV4XS5DaFNlbCwgQVJfQ2hhaW5TZWwjI19pbmRleCkpCi0KLSNkZWZpbmUgQVJfU1JFVl85MTAwKGFoKSAoKGFoLT5haF9tYWNWZXJzaW9uKSA9PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkKLQotI2RlZmluZSBJTklUX0NPTkZJR19TVEFUVVMgIDB4MDAwMDAwMDAKLSNkZWZpbmUgSU5JVF9SU1NJX1RIUiAgICAgICAweDAwMDAwNzAwCi0jZGVmaW5lIElOSVRfQkNPTl9DTlRSTF9SRUcgMHgwMDAwMDAwMAotCi0jZGVmaW5lIE1JTl9UWF9GSUZPX1RIUkVTSE9MRCAgIDB4MQotI2RlZmluZSBNQVhfVFhfRklGT19USFJFU0hPTEQgICAoKDQwOTYgLyA2NCkgLSAxKQotI2RlZmluZSBJTklUX1RYX0ZJRk9fVEhSRVNIT0xEICBNSU5fVFhfRklGT19USFJFU0hPTEQKLQotc3RydWN0IGFyNTQxNkFuaVN0YXRlIHsKLQlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCBjOwotCXU4IG5vaXNlSW1tdW5pdHlMZXZlbDsKLQl1OCBzcHVySW1tdW5pdHlMZXZlbDsKLQl1OCBmaXJzdGVwTGV2ZWw7Ci0JdTggb2ZkbVdlYWtTaWdEZXRlY3RPZmY7Ci0JdTggY2NrV2Vha1NpZ1RocmVzaG9sZDsKLQl1MzIgbGlzdGVuVGltZTsKLQl1MzIgb2ZkbVRyaWdIaWdoOwotCXUzMiBvZmRtVHJpZ0xvdzsKLQlpbnQzMl90IGNja1RyaWdIaWdoOwotCWludDMyX3QgY2NrVHJpZ0xvdzsKLQlpbnQzMl90IHJzc2lUaHJMb3c7Ci0JaW50MzJfdCByc3NpVGhySGlnaDsKLQl1MzIgbm9pc2VGbG9vcjsKLQl1MzIgdHhGcmFtZUNvdW50OwotCXUzMiByeEZyYW1lQ291bnQ7Ci0JdTMyIGN5Y2xlQ291bnQ7Ci0JdTMyIG9mZG1QaHlFcnJDb3VudDsKLQl1MzIgY2NrUGh5RXJyQ291bnQ7Ci0JdTMyIG9mZG1QaHlFcnJCYXNlOwotCXUzMiBjY2tQaHlFcnJCYXNlOwotCWludDE2X3QgcGt0UnNzaVsyXTsKLQlpbnQxNl90IG9mZG1FcnJSc3NpWzJdOwotCWludDE2X3QgY2NrRXJyUnNzaVsyXTsKLX07Ci0KLSNkZWZpbmUgSEFMX1BST0NFU1NfQU5JICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIERPX0FOSShhaCkgXAotCSgoQUg1NDE2KGFoKS0+YWhfcHJvY1BoeUVyciAmIEhBTF9QUk9DRVNTX0FOSSkpCi0KLXN0cnVjdCBhcjU0MTZTdGF0cyB7Ci0JdTMyIGFzdF9hbmlfbml1cDsKLQl1MzIgYXN0X2FuaV9uaWRvd247Ci0JdTMyIGFzdF9hbmlfc3B1cnVwOwotCXUzMiBhc3RfYW5pX3NwdXJkb3duOwotCXUzMiBhc3RfYW5pX29mZG1vbjsKLQl1MzIgYXN0X2FuaV9vZmRtb2ZmOwotCXUzMiBhc3RfYW5pX2Nja2hpZ2g7Ci0JdTMyIGFzdF9hbmlfY2NrbG93OwotCXUzMiBhc3RfYW5pX3N0ZXB1cDsKLQl1MzIgYXN0X2FuaV9zdGVwZG93bjsKLQl1MzIgYXN0X2FuaV9vZmRtZXJyczsKLQl1MzIgYXN0X2FuaV9jY2tlcnJzOwotCXUzMiBhc3RfYW5pX3Jlc2V0OwotCXUzMiBhc3RfYW5pX2x6ZXJvOwotCXUzMiBhc3RfYW5pX2xuZWc7Ci0Jc3RydWN0IGF0aDlrX21pYl9zdGF0cyBhc3RfbWlic3RhdHM7Ci0Jc3RydWN0IGF0aDlrX25vZGVfc3RhdHMgYXN0X25vZGVzdGF0czsKLX07Ci0KLSNkZWZpbmUgQVI1NDE2X09QRkxBR1NfMTFBICAgICAgICAgICAweDAxCi0jZGVmaW5lIEFSNTQxNl9PUEZMQUdTXzExRyAgICAgICAgICAgMHgwMgotI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzVHX0hUNDAgICAgIDB4MDQKLSNkZWZpbmUgQVI1NDE2X09QRkxBR1NfTl8yR19IVDQwICAgICAweDA4Ci0jZGVmaW5lIEFSNTQxNl9PUEZMQUdTX05fNUdfSFQyMCAgICAgMHgxMAotI2RlZmluZSBBUjU0MTZfT1BGTEFHU19OXzJHX0hUMjAgICAgIDB4MjAKLQotI2RlZmluZSBFRVBfUkZTSUxFTlRfRU5BQkxFRCAgICAgICAgMHgwMDAxCi0jZGVmaW5lIEVFUF9SRlNJTEVOVF9FTkFCTEVEX1MgICAgICAwCi0jZGVmaW5lIEVFUF9SRlNJTEVOVF9QT0xBUklUWSAgICAgICAweDAwMDIKLSNkZWZpbmUgRUVQX1JGU0lMRU5UX1BPTEFSSVRZX1MgICAgIDEKLSNkZWZpbmUgRUVQX1JGU0lMRU5UX0dQSU9fU0VMICAgICAgIDB4MDAxYwotI2RlZmluZSBFRVBfUkZTSUxFTlRfR1BJT19TRUxfUyAgICAgMgotCi0jZGVmaW5lIEFSNTQxNl9FRVBfTk9fQkFDS19WRVIgICAgICAgMHgxCi0jZGVmaW5lIEFSNTQxNl9FRVBfVkVSICAgICAgICAgICAgICAgMHhFCi0jZGVmaW5lIEFSNTQxNl9FRVBfVkVSX01JTk9SX01BU0sgICAgMHgwRkZGCi0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzIgICAgICAgMHgyCi0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzMgICAgICAgMHgzCi0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzcgICAgICAgMHg3Ci0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzkgICAgICAgMHg5Ci0jZGVmaW5lIEFSNTQxNl9FRVBfTUlOT1JfVkVSXzE2ICAgICAgMHgxMAotI2RlZmluZSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8xNyAgICAgIDB4MTEKLSNkZWZpbmUgQVI1NDE2X0VFUF9NSU5PUl9WRVJfMTkgICAgICAweDEzCi0KLSNkZWZpbmUgQVI1NDE2X05VTV81R19DQUxfUElFUlMgICAgICAgICA4Ci0jZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0FMX1BJRVJTICAgICAgICAgNAotI2RlZmluZSBBUjU0MTZfTlVNXzVHXzIwX1RBUkdFVF9QT1dFUlMgIDgKLSNkZWZpbmUgQVI1NDE2X05VTV81R180MF9UQVJHRVRfUE9XRVJTICA4Ci0jZGVmaW5lIEFSNTQxNl9OVU1fMkdfQ0NLX1RBUkdFVF9QT1dFUlMgMwotI2RlZmluZSBBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlMgIDQKLSNkZWZpbmUgQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTICA0Ci0jZGVmaW5lIEFSNTQxNl9OVU1fQ1RMUyAgICAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgQVI1NDE2X05VTV9CQU5EX0VER0VTICAgICAgICAgICA4Ci0jZGVmaW5lIEFSNTQxNl9OVU1fUERfR0FJTlMgICAgICAgICAgICAgNAotI2RlZmluZSBBUjU0MTZfUERfR0FJTlNfSU5fTUFTSyAgICAgICAgIDQKLSNkZWZpbmUgQVI1NDE2X1BEX0dBSU5fSUNFUFRTICAgICAgICAgICA1Ci0jZGVmaW5lIEFSNTQxNl9FRVBST01fTU9EQUxfU1BVUlMgICAgICAgNQotI2RlZmluZSBBUjU0MTZfTUFYX1JBVEVfUE9XRVIgICAgICAgICAgIDYzCi0jZGVmaW5lIEFSNTQxNl9OVU1fUERBRENfVkFMVUVTICAgICAgICAgMTI4Ci0jZGVmaW5lIEFSNTQxNl9CQ0hBTl9VTlVTRUQgICAgICAgICAgICAgMHhGRgotI2RlZmluZSBBUjU0MTZfTUFYX1BXUl9SQU5HRV9JTl9IQUxGX0RCIDY0Ci0jZGVmaW5lIEFSNTQxNl9NQVhfQ0hBSU5TICAgICAgICAgICAgICAgMwotI2RlZmluZSBBUjU0MTZfUFdSX1RBQkxFX09GRlNFVCAgICAgICAgIC01Ci0KLS8qIFJ4IGdhaW4gdHlwZSB2YWx1ZXMgKi8KLSNkZWZpbmUgQVI1NDE2X0VFUF9SWEdBSU5fMjNEQl9CQUNLT0ZGICAgICAwCi0jZGVmaW5lIEFSNTQxNl9FRVBfUlhHQUlOXzEzREJfQkFDS09GRiAgICAgMQotI2RlZmluZSBBUjU0MTZfRUVQX1JYR0FJTl9PUklHICAgICAgICAgICAgIDIKLQotLyogVHggZ2FpbiB0eXBlIHZhbHVlcyAqLwotI2RlZmluZSBBUjU0MTZfRUVQX1RYR0FJTl9PUklHSU5BTCAgICAgICAgIDAKLSNkZWZpbmUgQVI1NDE2X0VFUF9UWEdBSU5fSElHSF9QT1dFUiAgICAgICAxCi0KLSNkZWZpbmUgQVI1NDE2X0VFUDRLX1NUQVJUX0xPQyAgICAgICAgIDY0Ci0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTICAgICAgMwotI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTIDMKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX05VTV8yR18yMF9UQVJHRVRfUE9XRVJTICAzCi0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSUyAgMwotI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX0NUTFMgICAgICAgICAgICAgIDEyCi0jZGVmaW5lIEFSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFUyAgICAgICAgNAotI2RlZmluZSBBUjU0MTZfRUVQNEtfTlVNX1BEX0dBSU5TICAgICAgICAgIDIKLSNkZWZpbmUgQVI1NDE2X0VFUDRLX1BEX0dBSU5TX0lOX01BU0sgICAgICA0Ci0jZGVmaW5lIEFSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUUyAgICAgICAgNQotI2RlZmluZSBBUjU0MTZfRUVQNEtfTUFYX0NIQUlOUyAgICAgICAgICAgIDEKLQotZW51bSBlZXByb21fcGFyYW0gewotCUVFUF9ORlRIUkVTSF81LAotCUVFUF9ORlRIUkVTSF8yLAotCUVFUF9NQUNfTVNXLAotCUVFUF9NQUNfTUlELAotCUVFUF9NQUNfTFNXLAotCUVFUF9SRUdfMCwKLQlFRVBfUkVHXzEsCi0JRUVQX09QX0NBUCwKLQlFRVBfT1BfTU9ERSwKLQlFRVBfUkZfU0lMRU5ULAotCUVFUF9PQl81LAotCUVFUF9EQl81LAotCUVFUF9PQl8yLAotCUVFUF9EQl8yLAotCUVFUF9NSU5PUl9SRVYsCi0JRUVQX1RYX01BU0ssCi0JRUVQX1JYX01BU0ssCi0JRUVQX1JYR0FJTl9UWVBFLAotCUVFUF9UWEdBSU5fVFlQRSwKLX07Ci0KLWVudW0gYXI1NDE2X3JhdGVzIHsKLQlyYXRlNm1iLCByYXRlOW1iLCByYXRlMTJtYiwgcmF0ZTE4bWIsCi0JcmF0ZTI0bWIsIHJhdGUzNm1iLCByYXRlNDhtYiwgcmF0ZTU0bWIsCi0JcmF0ZTFsLCByYXRlMmwsIHJhdGUycywgcmF0ZTVfNWwsCi0JcmF0ZTVfNXMsIHJhdGUxMWwsIHJhdGUxMXMsIHJhdGVYciwKLQlyYXRlSHQyMF8wLCByYXRlSHQyMF8xLCByYXRlSHQyMF8yLCByYXRlSHQyMF8zLAotCXJhdGVIdDIwXzQsIHJhdGVIdDIwXzUsIHJhdGVIdDIwXzYsIHJhdGVIdDIwXzcsCi0JcmF0ZUh0NDBfMCwgcmF0ZUh0NDBfMSwgcmF0ZUh0NDBfMiwgcmF0ZUh0NDBfMywKLQlyYXRlSHQ0MF80LCByYXRlSHQ0MF81LCByYXRlSHQ0MF82LCByYXRlSHQ0MF83LAotCXJhdGVEdXBDY2ssIHJhdGVEdXBPZmRtLCByYXRlRXh0Q2NrLCByYXRlRXh0T2ZkbSwKLQlBcjU0MTZSYXRlU2l6ZQotfTsKLQotZW51bSBhdGg5a19oYWxfZnJlcV9iYW5kIHsKLQlBVEg5S19IQUxfRlJFUV9CQU5EXzVHSFogPSAwLAotCUFUSDlLX0hBTF9GUkVRX0JBTkRfMkdIWiA9IDEKLX07Ci0KLXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgewotCXUxNiBsZW5ndGg7Ci0JdTE2IGNoZWNrc3VtOwotCXUxNiB2ZXJzaW9uOwotCXU4IG9wQ2FwRmxhZ3M7Ci0JdTggZWVwTWlzYzsKLQl1MTYgcmVnRG1uWzJdOwotCXU4IG1hY0FkZHJbNl07Ci0JdTggcnhNYXNrOwotCXU4IHR4TWFzazsKLQl1MTYgcmZTaWxlbnQ7Ci0JdTE2IGJsdWVUb290aE9wdGlvbnM7Ci0JdTE2IGRldmljZUNhcDsKLQl1MzIgYmluQnVpbGROdW1iZXI7Ci0JdTggZGV2aWNlVHlwZTsKLQl1OCBwd2RjbGtpbmQ7Ci0JdTggZnV0dXJlQmFzZV8xWzJdOwotCXU4IHJ4R2FpblR5cGU7Ci0JdTggZnV0dXJlQmFzZV8yWzNdOwotCXU4IHR4R2FpblR5cGU7Ci0JdTggZnV0dXJlQmFzZV8zWzI1XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBiYXNlX2VlcF9oZWFkZXJfNGsgewotCXUxNiBsZW5ndGg7Ci0JdTE2IGNoZWNrc3VtOwotCXUxNiB2ZXJzaW9uOwotCXU4IG9wQ2FwRmxhZ3M7Ci0JdTggZWVwTWlzYzsKLQl1MTYgcmVnRG1uWzJdOwotCXU4IG1hY0FkZHJbNl07Ci0JdTggcnhNYXNrOwotCXU4IHR4TWFzazsKLQl1MTYgcmZTaWxlbnQ7Ci0JdTE2IGJsdWVUb290aE9wdGlvbnM7Ci0JdTE2IGRldmljZUNhcDsKLQl1MzIgYmluQnVpbGROdW1iZXI7Ci0JdTggZGV2aWNlVHlwZTsKLQl1OCBmdXR1cmVCYXNlWzFdOwotfSBfX3BhY2tlZDsKLQotCi1zdHJ1Y3Qgc3B1cl9jaGFuIHsKLQl1MTYgc3B1ckNoYW47Ci0JdTggc3B1clJhbmdlTG93OwotCXU4IHNwdXJSYW5nZUhpZ2g7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgbW9kYWxfZWVwX2hlYWRlciB7Ci0JdTMyIGFudEN0cmxDaGFpbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTMyIGFudEN0cmxDb21tb247Ci0JdTggYW50ZW5uYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggc3dpdGNoU2V0dGxpbmc7Ci0JdTggdHhSeEF0dGVuQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHJ4VHhNYXJnaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggYWRjRGVzaXJlZFNpemU7Ci0JdTggcGdhRGVzaXJlZFNpemU7Ci0JdTggeGxuYUdhaW5DaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggdHhFbmRUb1hwYU9mZjsKLQl1OCB0eEVuZFRvUnhPbjsKLQl1OCB0eEZyYW1lVG9YcGFPbjsKLQl1OCB0aHJlc2g2MjsKLQl1OCBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHhwZEdhaW47Ci0JdTggeHBkOwotCXU4IGlxQ2FsSUNoW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBpcUNhbFFDaFtBUjU0MTZfTUFYX0NIQUlOU107Ci0JdTggcGRHYWluT3ZlcmxhcDsKLQl1OCBvYjsKLQl1OCBkYjsKLQl1OCB4cGFCaWFzTHZsOwotCXU4IHB3ckRlY3JlYXNlRm9yMkNoYWluOwotCXU4IHB3ckRlY3JlYXNlRm9yM0NoYWluOwotCXU4IHR4RnJhbWVUb0RhdGFTdGFydDsKLQl1OCB0eEZyYW1lVG9QYU9uOwotCXU4IGh0NDBQb3dlckluY0ZvclBkYWRjOwotCXU4IGJzd0F0dGVuW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl1OCBic3dNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHN3U2V0dGxlSHQ0MDsKLQl1OCB4YXR0ZW4yRGJbQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IHhhdHRlbjJNYXJnaW5bQVI1NDE2X01BWF9DSEFJTlNdOwotCXU4IG9iX2NoMTsKLQl1OCBkYl9jaDE7Ci0JdTggdXNlQW50MToxLAotCSAgICBmb3JjZV94cGFvbjoxLAotCSAgICBsb2NhbF9iaWFzOjEsCi0JICAgIGZlbUJhbmRTZWxlY3RVc2VkOjEsIHhsbmFidWZpbjoxLCB4bG5haXNlbDoyLCB4bG5hYnVmbW9kZToxOwotCXU4IGZ1dHVyZU1vZGFsYXI5MjgwOwotCXUxNiB4cGFCaWFzTHZsRnJlcVszXTsKLQl1OCBmdXR1cmVNb2RhbFs2XTsKLQotCXN0cnVjdCBzcHVyX2NoYW4gc3B1ckNoYW5zW0FSNTQxNl9FRVBST01fTU9EQUxfU1BVUlNdOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IG1vZGFsX2VlcF80a19oZWFkZXIgewotICAgIHUzMiAgYW50Q3RybENoYWluW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1MzIgIGFudEN0cmxDb21tb247Ci0gICAgdTggICBhbnRlbm5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHN3aXRjaFNldHRsaW5nOwotICAgIHU4ICAgdHhSeEF0dGVuQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgcnhUeE1hcmdpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIGFkY0Rlc2lyZWRTaXplOwotICAgIHU4ICAgcGdhRGVzaXJlZFNpemU7Ci0gICAgdTggICB4bG5hR2FpbkNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHR4RW5kVG9YcGFPZmY7Ci0gICAgdTggICB0eEVuZFRvUnhPbjsKLSAgICB1OCAgIHR4RnJhbWVUb1hwYU9uOwotICAgIHU4ICAgdGhyZXNoNjI7Ci0gICAgdTggICBub2lzZUZsb29yVGhyZXNoQ2hbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgeHBkR2FpbjsKLSAgICB1OCAgIHhwZDsKLSAgICB1OCAgIGlxQ2FsSUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIGlxQ2FsUUNoW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHBkR2Fpbk92ZXJsYXA7Ci0gICAgdTggICBvYl8wMTsKLSAgICB1OCAgIGRiMV8wMTsKLSAgICB1OCAgIHhwYUJpYXNMdmw7Ci0gICAgdTggICB0eEZyYW1lVG9EYXRhU3RhcnQ7Ci0gICAgdTggICB0eEZyYW1lVG9QYU9uOwotICAgIHU4ICAgaHQ0MFBvd2VySW5jRm9yUGRhZGM7Ci0gICAgdTggICBic3dBdHRlbltBUjU0MTZfRUVQNEtfTUFYX0NIQUlOU107Ci0gICAgdTggICBic3dNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgc3dTZXR0bGVIdDQwOwotICAgIHU4ICAgeGF0dGVuMkRiW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXTsKLSAgICB1OCAgIHhhdHRlbjJNYXJnaW5bQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdOwotICAgIHU4ICAgZGIyXzAxOwotICAgIHU4ICAgdmVyc2lvbjsKLSAgICB1MTYgIG9iXzIzNDsKLSAgICB1MTYgIGRiMV8yMzQ7Ci0gICAgdTE2ICBkYjJfMjM0OwotICAgIHU4ICAgZnV0dXJlTW9kYWxbNF07Ci0KLSAgICBzdHJ1Y3Qgc3B1cl9jaGFuIHNwdXJDaGFuc1tBUjU0MTZfRUVQUk9NX01PREFMX1NQVVJTXTsKLX0gX19wYWNrZWQ7Ci0KLQotc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxIHsKLQl1OCBwd3JQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKLQl1OCB2cGRQZGdbQVI1NDE2X05VTV9QRF9HQUlOU11bQVI1NDE2X1BEX0dBSU5fSUNFUFRTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBjYWxfZGF0YV9wZXJfZnJlcV80ayB7Ci0JdTggcHdyUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107Ci0JdTggdnBkUGRnW0FSNTQxNl9FRVA0S19OVU1fUERfR0FJTlNdW0FSNTQxNl9FRVA0S19QRF9HQUlOX0lDRVBUU107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcgewotCXU4IGJDaGFubmVsOwotCXU4IHRQb3cyeFs0XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0IHsKLQl1OCBiQ2hhbm5lbDsKLQl1OCB0UG93MnhbOF07Ci19IF9fcGFja2VkOwotCi0KLSNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKLXN0cnVjdCBjYWxfY3RsX2VkZ2VzIHsKLQl1OCBiQ2hhbm5lbDsKLQl1OCBmbGFnOjIsIHRQb3dlcjo2OwotfSBfX3BhY2tlZDsKLSNlbHNlCi1zdHJ1Y3QgY2FsX2N0bF9lZGdlcyB7Ci0JdTggYkNoYW5uZWw7Ci0JdTggdFBvd2VyOjYsIGZsYWc6MjsKLX0gX19wYWNrZWQ7Ci0jZW5kaWYKLQotc3RydWN0IGNhbF9jdGxfZGF0YSB7Ci0Jc3RydWN0IGNhbF9jdGxfZWRnZXMKLQljdGxFZGdlc1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV9CQU5EX0VER0VTXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBjYWxfY3RsX2RhdGFfNGsgewotCXN0cnVjdCBjYWxfY3RsX2VkZ2VzCi0JY3RsRWRnZXNbQVI1NDE2X0VFUDRLX01BWF9DSEFJTlNdW0FSNTQxNl9FRVA0S19OVU1fQkFORF9FREdFU107Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgewotCXN0cnVjdCBiYXNlX2VlcF9oZWFkZXIgYmFzZUVlcEhlYWRlcjsKLQl1OCBjdXN0RGF0YVs2NF07Ci0Jc3RydWN0IG1vZGFsX2VlcF9oZWFkZXIgbW9kYWxIZWFkZXJbMl07Ci0JdTggY2FsRnJlcVBpZXI1R1tBUjU0MTZfTlVNXzVHX0NBTF9QSUVSU107Ci0JdTggY2FsRnJlcVBpZXIyR1tBUjU0MTZfTlVNXzJHX0NBTF9QSUVSU107Ci0Jc3RydWN0IGNhbF9kYXRhX3Blcl9mcmVxCi0JIGNhbFBpZXJEYXRhNUdbQVI1NDE2X01BWF9DSEFJTlNdW0FSNTQxNl9OVU1fNUdfQ0FMX1BJRVJTXTsKLQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXEKLQkgY2FsUGllckRhdGEyR1tBUjU0MTZfTUFYX0NIQUlOU11bQVI1NDE2X05VTV8yR19DQUxfUElFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZwotCSBjYWxUYXJnZXRQb3dlcjVHW0FSNTQxNl9OVU1fNUdfMjBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKLQkgY2FsVGFyZ2V0UG93ZXI1R0hUMjBbQVI1NDE2X05VTV81R18yMF9UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAotCSBjYWxUYXJnZXRQb3dlcjVHSFQ0MFtBUjU0MTZfTlVNXzVHXzQwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2xlZwotCSBjYWxUYXJnZXRQb3dlckNja1tBUjU0MTZfTlVNXzJHX0NDS19UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9sZWcKLQkgY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0Ci0JIGNhbFRhcmdldFBvd2VyMkdIVDIwW0FSNTQxNl9OVU1fMkdfMjBfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfaHQKLQkgY2FsVGFyZ2V0UG93ZXIyR0hUNDBbQVI1NDE2X05VTV8yR180MF9UQVJHRVRfUE9XRVJTXTsKLQl1OCBjdGxJbmRleFtBUjU0MTZfTlVNX0NUTFNdOwotCXN0cnVjdCBjYWxfY3RsX2RhdGEgY3RsRGF0YVtBUjU0MTZfTlVNX0NUTFNdOwotCXU4IHBhZGRpbmc7Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgYXI1NDE2X2VlcHJvbV80ayB7Ci0Jc3RydWN0IGJhc2VfZWVwX2hlYWRlcl80ayBiYXNlRWVwSGVhZGVyOwotCXU4IGN1c3REYXRhWzIwXTsKLQlzdHJ1Y3QgbW9kYWxfZWVwXzRrX2hlYWRlciBtb2RhbEhlYWRlcjsKLQl1OCBjYWxGcmVxUGllcjJHW0FSNTQxNl9FRVA0S19OVU1fMkdfQ0FMX1BJRVJTXTsKLQlzdHJ1Y3QgY2FsX2RhdGFfcGVyX2ZyZXFfNGsKLQljYWxQaWVyRGF0YTJHW0FSNTQxNl9FRVA0S19NQVhfQ0hBSU5TXVtBUjU0MTZfRUVQNEtfTlVNXzJHX0NBTF9QSUVSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCi0JY2FsVGFyZ2V0UG93ZXJDY2tbQVI1NDE2X0VFUDRLX05VTV8yR19DQ0tfVEFSR0VUX1BPV0VSU107Ci0Jc3RydWN0IGNhbF90YXJnZXRfcG93ZXJfbGVnCi0JY2FsVGFyZ2V0UG93ZXIyR1tBUjU0MTZfRUVQNEtfTlVNXzJHXzIwX1RBUkdFVF9QT1dFUlNdOwotCXN0cnVjdCBjYWxfdGFyZ2V0X3Bvd2VyX2h0Ci0JY2FsVGFyZ2V0UG93ZXIyR0hUMjBbQVI1NDE2X0VFUDRLX05VTV8yR18yMF9UQVJHRVRfUE9XRVJTXTsKLQlzdHJ1Y3QgY2FsX3RhcmdldF9wb3dlcl9odAotCWNhbFRhcmdldFBvd2VyMkdIVDQwW0FSNTQxNl9FRVA0S19OVU1fMkdfNDBfVEFSR0VUX1BPV0VSU107Ci0JdTggY3RsSW5kZXhbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKLQlzdHJ1Y3QgY2FsX2N0bF9kYXRhXzRrIGN0bERhdGFbQVI1NDE2X0VFUDRLX05VTV9DVExTXTsKLQl1OCBwYWRkaW5nOwotfSBfX3BhY2tlZDsKLQotc3RydWN0IGFyNTQxNkluaUFycmF5IHsKLQl1MzIgKmlhX2FycmF5OwotCXUzMiBpYV9yb3dzOwotCXUzMiBpYV9jb2x1bW5zOwotfTsKLQotI2RlZmluZSBJTklUX0lOSV9BUlJBWShpbmlhcnJheSwgYXJyYXksIHJvd3MsIGNvbHVtbnMpIGRvIHsJXAotCQkoaW5pYXJyYXkpLT5pYV9hcnJheSA9ICh1MzIgKikoYXJyYXkpOwkJXAotCQkoaW5pYXJyYXkpLT5pYV9yb3dzID0gKHJvd3MpOwkJCVwKLQkJKGluaWFycmF5KS0+aWFfY29sdW1ucyA9IChjb2x1bW5zKTsJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIElOSV9SQShpbmlhcnJheSwgcm93LCBjb2x1bW4pIFwKLQkoKChpbmlhcnJheSktPmlhX2FycmF5KVsocm93KSAqCSgoaW5pYXJyYXkpLT5pYV9jb2x1bW5zKSArIChjb2x1bW4pXSkKLQotI2RlZmluZSBJTklUX0NBTChfcGVyQ2FsKSBkbyB7CQkJCVwKLQkJKF9wZXJDYWwpLT5jYWxTdGF0ZSA9IENBTF9XQUlUSU5HOwlcCi0JCShfcGVyQ2FsKS0+Y2FsTmV4dCA9IE5VTEw7CQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBJTlNFUlRfQ0FMKF9haHAsIF9wZXJDYWwpCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoKF9haHApLT5haF9jYWxfbGlzdF9sYXN0ID09IE5VTEwpIHsJCQlcCi0JCQkoX2FocCktPmFoX2NhbF9saXN0ID0JCQkJXAotCQkJCShfYWhwKS0+YWhfY2FsX2xpc3RfbGFzdCA9IChfcGVyQ2FsKTsJXAotCQkJKChfYWhwKS0+YWhfY2FsX2xpc3RfbGFzdCktPmNhbE5leHQgPSAoX3BlckNhbCk7IFwKLQkJfSBlbHNlIHsJCQkJCQlcCi0JCQkoKF9haHApLT5haF9jYWxfbGlzdF9sYXN0KS0+Y2FsTmV4dCA9IChfcGVyQ2FsKTsgXAotCQkJKF9haHApLT5haF9jYWxfbGlzdF9sYXN0ID0gKF9wZXJDYWwpOwkJXAotCQkJKF9wZXJDYWwpLT5jYWxOZXh0ID0gKF9haHApLT5haF9jYWxfbGlzdDsJXAotCQl9CQkJCQkJCVwKLQl9IHdoaWxlICgwKQotCi1lbnVtIGhhbF9jYWxfdHlwZXMgewotCUFEQ19EQ19JTklUX0NBTCA9IDB4MSwKLQlBRENfR0FJTl9DQUwgPSAweDIsCi0JQURDX0RDX0NBTCA9IDB4NCwKLQlJUV9NSVNNQVRDSF9DQUwgPSAweDgKLX07Ci0KLWVudW0gaGFsX2NhbF9zdGF0ZSB7Ci0JQ0FMX0lOQUNUSVZFLAotCUNBTF9XQUlUSU5HLAotCUNBTF9SVU5OSU5HLAotCUNBTF9ET05FCi19OwotCi0jZGVmaW5lIE1JTl9DQUxfU0FNUExFUyAgICAgMQotI2RlZmluZSBNQVhfQ0FMX1NBTVBMRVMgICAgNjQKLSNkZWZpbmUgSU5JVF9MT0dfQ09VTlQgICAgICA1Ci0jZGVmaW5lIFBFUl9NSU5fTE9HX0NPVU5UICAgMgotI2RlZmluZSBQRVJfTUFYX0xPR19DT1VOVCAgMTAKLQotc3RydWN0IGhhbF9wZXJjYWxfZGF0YSB7Ci0JZW51bSBoYWxfY2FsX3R5cGVzIGNhbFR5cGU7Ci0JdTMyIGNhbE51bVNhbXBsZXM7Ci0JdTMyIGNhbENvdW50TWF4OwotCXZvaWQgKCpjYWxDb2xsZWN0KSAoc3RydWN0IGF0aF9oYWwgKik7Ci0Jdm9pZCAoKmNhbFBvc3RQcm9jKSAoc3RydWN0IGF0aF9oYWwgKiwgdTgpOwotfTsKLQotc3RydWN0IGhhbF9jYWxfbGlzdCB7Ci0JY29uc3Qgc3RydWN0IGhhbF9wZXJjYWxfZGF0YSAqY2FsRGF0YTsKLQllbnVtIGhhbF9jYWxfc3RhdGUgY2FsU3RhdGU7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsTmV4dDsKLX07Ci0KLS8qCi0gKiBFbnVtIHRvIGluZGVudGlmeSB0aGUgZWVwcm9tIG1hcHBpbmdzCi0gKi8KLWVudW0gaGFsX2VlcF9tYXAgewotCUVFUF9NQVBfREVGQVVMVCA9IDB4MCwKLQlFRVBfTUFQXzRLQklUUywKLQlFRVBfTUFQX01BWAotfTsKLQotCi1zdHJ1Y3QgYXRoX2hhbF81NDE2IHsKLQlzdHJ1Y3QgYXRoX2hhbCBhaDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBhcjU0MTZfZWVwcm9tX2RlZiBkZWY7Ci0JCXN0cnVjdCBhcjU0MTZfZWVwcm9tXzRrIG1hcDRrOwotCX0gYWhfZWVwcm9tOwotCXN0cnVjdCBhcjU0MTZTdGF0cyBhaF9zdGF0czsKLQlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBhaF90eHFbQVRIOUtfTlVNX1RYX1FVRVVFU107Ci0Jdm9pZCBfX2lvbWVtICphaF9jYWxfbWVtOwotCi0JdTggYWhfbWFjYWRkcltFVEhfQUxFTl07Ci0JdTggYWhfYnNzaWRbRVRIX0FMRU5dOwotCXU4IGFoX2Jzc2lkbWFza1tFVEhfQUxFTl07Ci0JdTE2IGFoX2Fzc29jSWQ7Ci0KLQlpbnQxNl90IGFoX2N1cmNoYW5SYWRJbmRleDsKLQl1MzIgYWhfbWFza1JlZzsKLQl1MzIgYWhfdHhPa0ludGVycnVwdE1hc2s7Ci0JdTMyIGFoX3R4RXJySW50ZXJydXB0TWFzazsKLQl1MzIgYWhfdHhEZXNjSW50ZXJydXB0TWFzazsKLQl1MzIgYWhfdHhFb2xJbnRlcnJ1cHRNYXNrOwotCXUzMiBhaF90eFVybkludGVycnVwdE1hc2s7Ci0JYm9vbCBhaF9jaGlwRnVsbFNsZWVwOwotCXUzMiBhaF9hdGltV2luZG93OwotCXUxNiBhaF9hbnRlbm5hU3dpdGNoU3dhcDsKLQllbnVtIGF0aDlrX3Bvd2VyX21vZGUgYWhfcG93ZXJNb2RlOwotCWVudW0gYXRoOWtfYW50X3NldHRpbmcgYWhfZGl2ZXJzaXR5Q29udHJvbDsKLQotCS8qIENhbGlicmF0aW9uICovCi0JZW51bSBoYWxfY2FsX3R5cGVzIGFoX3N1cHBDYWxzOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgYWhfaXFDYWxEYXRhOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgYWhfYWRjR2FpbkNhbERhdGE7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCBhaF9hZGNEY0NhbEluaXREYXRhOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgYWhfYWRjRGNDYWxEYXRhOwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmFoX2NhbF9saXN0OwotCXN0cnVjdCBoYWxfY2FsX2xpc3QgKmFoX2NhbF9saXN0X2xhc3Q7Ci0Jc3RydWN0IGhhbF9jYWxfbGlzdCAqYWhfY2FsX2xpc3RfY3VycjsKLSNkZWZpbmUgYWhfdG90YWxQb3dlck1lYXNJIGFoX01lYXMwLnVuc2lnbgotI2RlZmluZSBhaF90b3RhbFBvd2VyTWVhc1EgYWhfTWVhczEudW5zaWduCi0jZGVmaW5lIGFoX3RvdGFsSXFDb3JyTWVhcyBhaF9NZWFzMi5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjSU9kZFBoYXNlICBhaF9NZWFzMC51bnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNJRXZlblBoYXNlIGFoX01lYXMxLnVuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY1FPZGRQaGFzZSAgYWhfTWVhczIudW5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjUUV2ZW5QaGFzZSBhaF9NZWFzMy51bnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNEY09mZnNldElPZGRQaGFzZSAgYWhfTWVhczAuc2lnbgotI2RlZmluZSBhaF90b3RhbEFkY0RjT2Zmc2V0SUV2ZW5QaGFzZSBhaF9NZWFzMS5zaWduCi0jZGVmaW5lIGFoX3RvdGFsQWRjRGNPZmZzZXRRT2RkUGhhc2UgIGFoX01lYXMyLnNpZ24KLSNkZWZpbmUgYWhfdG90YWxBZGNEY09mZnNldFFFdmVuUGhhc2UgYWhfTWVhczMuc2lnbgotCXVuaW9uIHsKLQkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JfSBhaF9NZWFzMDsKLQl1bmlvbiB7Ci0JCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOwotCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOwotCX0gYWhfTWVhczE7Ci0JdW5pb24gewotCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKLQl9IGFoX01lYXMyOwotCXVuaW9uIHsKLQkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107Ci0JfSBhaF9NZWFzMzsKLQl1MTYgYWhfQ2FsU2FtcGxlczsKLQotCXUzMiBhaF9zdGFJZDFEZWZhdWx0czsKLQl1MzIgYWhfbWlzY01vZGU7Ci0JZW51bSB7Ci0JCUFVVE9fMzJLSFosCi0JCVVTRV8zMktIWiwKLQkJRE9OVF9VU0VfMzJLSFosCi0JfSBhaF9lbmFibGUzMmtIekNsb2NrOwotCi0JLyogUkYgKi8KLQl1MzIgKmFoX2FuYWxvZ0JhbmswRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0JhbmsxRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0JhbmsyRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0JhbmszRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0Jhbms2RGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0Jhbms2VFBDRGF0YTsKLQl1MzIgKmFoX2FuYWxvZ0Jhbms3RGF0YTsKLQl1MzIgKmFoX2FkZGFjNTQxNl8yMTsKLQl1MzIgKmFoX2Jhbms2VGVtcDsKLQotCWludDE2X3QgYWhfdHhQb3dlckluZGV4T2Zmc2V0OwotCXUzMiBhaF9iZWFjb25JbnRlcnZhbDsKLQl1MzIgYWhfc2xvdHRpbWU7Ci0JdTMyIGFoX2Fja3RpbWVvdXQ7Ci0JdTMyIGFoX2N0c3RpbWVvdXQ7Ci0JdTMyIGFoX2dsb2JhbHR4dGltZW91dDsKLQl1OCBhaF9nQmVhY29uUmF0ZTsKLQl1MzIgYWhfZ3Bpb1NlbGVjdDsKLQl1MzIgYWhfcG9sYXJpdHk7Ci0JdTMyIGFoX2dwaW9CaXQ7Ci0KLQkvKiBBTkkgKi8KLQl1MzIgYWhfcHJvY1BoeUVycjsKLQlib29sIGFoX2hhc0h3UGh5Q291bnRlcnM7Ci0JdTMyIGFoX2FuaVBlcmlvZDsKLQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgKmFoX2N1cmFuaTsKLQlzdHJ1Y3QgYXI1NDE2QW5pU3RhdGUgYWhfYW5pWzI1NV07Ci0JaW50IGFoX3RvdGFsU2l6ZURlc2lyZWRbNV07Ci0JaW50IGFoX2NvYXJzZUhpZ2hbNV07Ci0JaW50IGFoX2NvYXJzZUxvd1s1XTsKLQlpbnQgYWhfZmlycHdyWzVdOwotCWVudW0gYXRoOWtfYW5pX2NtZCBhaF9hbmlfZnVuY3Rpb247Ci0KLQl1MzIgYWhfaW50clR4cXM7Ci0JYm9vbCBhaF9pbnRyTWl0aWdhdGlvbjsKLQllbnVtIGF0aDlrX2h0X2V4dHByb3RzcGFjaW5nIGFoX2V4dHByb3RzcGFjaW5nOwotCXU4IGFoX3R4Y2hhaW5tYXNrOwotCXU4IGFoX3J4Y2hhaW5tYXNrOwotCi0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaU1vZGVzOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlDb21tb247Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbmswOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCQl9SZkdhaW47Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbmsxOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCYW5rMjsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazM7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUJhbms2OwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlCYW5rNlRQQzsKLQlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgYWhfaW5pQmFuazc7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaUFkZGFjOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlQY2llU2VyZGVzOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlNb2Rlc0FkZGl0aW9uYWw7Ci0Jc3RydWN0IGFyNTQxNkluaUFycmF5IGFoX2luaU1vZGVzUnhHYWluOwotCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBhaF9pbmlNb2Rlc1R4R2FpbjsKLQkvKiBUbyBpbmRpY2F0ZSBFRVBST00gbWFwcGluZyB1c2VkICovCi0JZW51bSBoYWxfZWVwX21hcCBhaF9lZXBfbWFwOwotfTsKLSNkZWZpbmUgQUg1NDE2KF9haCkgKChzdHJ1Y3QgYXRoX2hhbF81NDE2ICopKF9haCkpCi0KLSNkZWZpbmUgRlJFUTJGQklOKHgsIHkpICgoeSkgPyAoKHgpIC0gMjMwMCkgOiAoKCh4KSAtIDQ4MDApIC8gNSkpCi0KLSNkZWZpbmUgYXI1NDE2UmZEZXRhY2goYWgpIGRvIHsJCQkJCVwKLQkJaWYgKEFINTQxNihhaCktPmFoX3JmSGFsLnJmRGV0YWNoICE9IE5VTEwpCVwKLQkJCUFINTQxNihhaCktPmFoX3JmSGFsLnJmRGV0YWNoKGFoKTsJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgYXRoOWtfaHdfdXNlX2ZsYXNoKF9haCkJCQlcCi0JKCEoX2FoLT5haF9mbGFncyAmIEFIX1VTRV9FRVBST00pKQotCisjZGVmaW5lIFNNKF92LCBfZikgICgoKF92KSA8PCBfZiMjX1MpICYgX2YpCisjZGVmaW5lIE1TKF92LCBfZikgICgoKF92KSAmIF9mKSA+PiBfZiMjX1MpCisjZGVmaW5lIFJFR19STVcoX2EsIF9yLCBfc2V0LCBfY2xyKSAgICBcCisJUkVHX1dSSVRFKF9hLCBfciwgKFJFR19SRUFEKF9hLCBfcikgJiB+KF9jbHIpKSB8IChfc2V0KSkKKyNkZWZpbmUgUkVHX1JNV19GSUVMRChfYSwgX3IsIF9mLCBfdikgXAorCVJFR19XUklURShfYSwgX3IsIFwKKwkoUkVHX1JFQUQoX2EsIF9yKSAmIH5fZikgfCAoKChfdikgPDwgX2YjI19TKSAmIF9mKSkKKyNkZWZpbmUgUkVHX1NFVF9CSVQoX2EsIF9yLCBfZikgXAorCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgfCBfZikKKyNkZWZpbmUgUkVHX0NMUl9CSVQoX2EsIF9yLCBfZikgXAorCVJFR19XUklURShfYSwgX3IsIFJFR19SRUFEKF9hLCBfcikgJiB+X2YpCiAKICNkZWZpbmUgRE9fREVMQVkoeCkgZG8gewkJCVwKIAkJaWYgKCgrKyh4KSAlIDY0KSA9PSAwKSAgICAgICAgICBcCkBAIC05NjQsMTE3ICs3MSw1NzcgQEAKIAkJfQkJCQkJCQlcCiAJfSB3aGlsZSAoMCkKIAorI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUICAgICAgICAgICAgIDAKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX1BDSUVfQVRURU5USU9OX0xFRCAxCisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19QQ0lFX1BPV0VSX0xFRCAgICAgMgorI2RlZmluZSBBUl9HUElPX09VVFBVVF9NVVhfQVNfVFhfRlJBTUUgICAgICAgICAgIDMKKyNkZWZpbmUgQVJfR1BJT19PVVRQVVRfTVVYX0FTX01BQ19ORVRXT1JLX0xFRCAgICA1CisjZGVmaW5lIEFSX0dQSU9fT1VUUFVUX01VWF9BU19NQUNfUE9XRVJfTEVEICAgICAgNgorCisjZGVmaW5lIEFSX0dQSU9EX01BU0sgICAgICAgICAgICAgICAweDAwMDAxRkZGCisjZGVmaW5lIEFSX0dQSU9fQklUKF9ncGlvKSAgICAgICAgICAoMSA8PCAoX2dwaW8pKQorCiAjZGVmaW5lIEJBU0VfQUNUSVZBVEVfREVMQVkgICAgICAgICAxMDAKICNkZWZpbmUgUlRDX1BMTF9TRVRUTEVfREVMQVkgICAgICAgIDEwMDAKICNkZWZpbmUgQ09FRl9TQ0FMRV9TICAgICAgICAgICAgICAgIDI0CiAjZGVmaW5lIEhUNDBfQ0hBTk5FTF9DRU5URVJfU0hJRlQgICAxMAogCi0jZGVmaW5lIEFSNTQxNl9FRVBST01fTUFHSUNfT0ZGU0VUICAweDAKKyNkZWZpbmUgQVRIOUtfQU5URU5OQTBfQ0hBSU5NQVNLICAgIDB4MQorI2RlZmluZSBBVEg5S19BTlRFTk5BMV9DSEFJTk1BU0sgICAgMHgyCiAKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9TICAgICAgICAgICAgIDIKLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9PRkZTRVQgICAgICAgIDB4MjAwMAotI2RlZmluZSBBUjU0MTZfRUVQUk9NX1NUQVJUX0FERFIgXAotCShBUl9TUkVWXzkxMDAoYWgpKSA/IDB4MWZmZjEwMDAgOiAweDUwM2YxMjAwCi0jZGVmaW5lIEFSNTQxNl9FRVBST01fTUFYICAgICAgICAgICAweGFlMAotI2RlZmluZSBhcjU0MTZfZ2V0X2VlcF92ZXIoX2FocCkgXAotCSgoKF9haHApLT5haF9lZXByb20uZGVmLmJhc2VFZXBIZWFkZXIudmVyc2lvbiA+PiAxMikgJiAweEYpCi0jZGVmaW5lIGFyNTQxNl9nZXRfZWVwX3JldihfYWhwKSBcCi0JKCgoX2FocCktPmFoX2VlcHJvbS5kZWYuYmFzZUVlcEhlYWRlci52ZXJzaW9uKSAmIDB4RkZGKQotI2RlZmluZSBhcjU0MTZfZ2V0X250eGNoYWlucyhfdHhjaGFpbm1hc2spIFwKLQkoKChfdHhjaGFpbm1hc2sgPj4gMikgJiAxKSArIFwKLQkJKChfdHhjaGFpbm1hc2sgPj4gMSkgJiAxKSArIChfdHhjaGFpbm1hc2sgJiAxKSkKKyNkZWZpbmUgQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTICAgIDgKKyNkZWZpbmUgQVRIOUtfTlVNX1FVRVVFUyAgICAgICAgICAgIDEwCiAKLS8qIEVFUFJPTSA0SyBiaXQgbWFwIGRlZmluYXRpb25zICovCi0jZGVmaW5lIGFyNTQxNl9nZXRfZWVwNGtfdmVyKF9haHApICAgXAotICAgICgoKF9haHApLT5haF9lZXByb20ubWFwNGsuYmFzZUVlcEhlYWRlci52ZXJzaW9uID4+IDEyKSAmIDB4RikKLSNkZWZpbmUgYXI1NDE2X2dldF9lZXA0a19yZXYoX2FocCkgICBcCi0gICAgKCgoX2FocCktPmFoX2VlcHJvbS5tYXA0ay5iYXNlRWVwSGVhZGVyLnZlcnNpb24pICYgMHhGRkYpCisjZGVmaW5lIE1BWF9SQVRFX1BPV0VSICAgICAgICAgICAgICA2MworI2RlZmluZSBBSF9XQUlUX1RJTUVPVVQgICAgICAgICAgICAgMTAwMDAwIC8qICh1cykgKi8KKyNkZWZpbmUgQUhfVElNRV9RVUFOVFVNICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFSX0tFWVRBQkxFX1NJWkUgICAgICAgICAgICAxMjgKKyNkZWZpbmUgUE9XRVJfVVBfVElNRSAgICAgICAgICAgICAgIDIwMDAwMAorI2RlZmluZSBTUFVSX1JTU0lfVEhSRVNIICAgICAgICAgICAgNDAKIAorI2RlZmluZSBDQUJfVElNRU9VVF9WQUwgICAgICAgICAgICAgMTAKKyNkZWZpbmUgQkVBQ09OX1RJTUVPVVRfVkFMICAgICAgICAgIDEwCisjZGVmaW5lIE1JTl9CRUFDT05fVElNRU9VVF9WQUwgICAgICAxCisjZGVmaW5lIFNMRUVQX1NMT1AgICAgICAgICAgICAgICAgICAzCiAKLSNpZmRlZiBfX0JJR19FTkRJQU4KLSNkZWZpbmUgQVI1NDE2X0VFUFJPTV9NQUdJQyAweDVhYTUKLSNlbHNlCi0jZGVmaW5lIEFSNTQxNl9FRVBST01fTUFHSUMgMHhhNTVhCisjZGVmaW5lIElOSVRfQ09ORklHX1NUQVRVUyAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIElOSVRfUlNTSV9USFIgICAgICAgICAgICAgICAweDAwMDAwNzAwCisjZGVmaW5lIElOSVRfQkNPTl9DTlRSTF9SRUcgICAgICAgICAweDAwMDAwMDAwCisKKyNkZWZpbmUgVFVfVE9fVVNFQyhfdHUpICAgICAgICAgICAgICgoX3R1KSA8PCAxMCkKKworZW51bSB3aXJlbGVzc19tb2RlIHsKKwlBVEg5S19NT0RFXzExQSA9IDAsCisJQVRIOUtfTU9ERV8xMUIgPSAyLAorCUFUSDlLX01PREVfMTFHID0gMywKKwlBVEg5S19NT0RFXzExTkFfSFQyMCA9IDYsCisJQVRIOUtfTU9ERV8xMU5HX0hUMjAgPSA3LAorCUFUSDlLX01PREVfMTFOQV9IVDQwUExVUyA9IDgsCisJQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUyA9IDksCisJQVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTID0gMTAsCisJQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUyA9IDExLAorCUFUSDlLX01PREVfTUFYCit9OworCitlbnVtIGF0aDlrX2h3X2NhcHMgeworCUFUSDlLX0hXX0NBUF9DSEFOX1NQUkVBRAkJPSBCSVQoMCksCisJQVRIOUtfSFdfQ0FQX01JQ19BRVNDQ00gICAgICAgICAgICAgICAgID0gQklUKDEpLAorCUFUSDlLX0hXX0NBUF9NSUNfQ0tJUCAgICAgICAgICAgICAgICAgICA9IEJJVCgyKSwKKwlBVEg5S19IV19DQVBfTUlDX1RLSVAgICAgICAgICAgICAgICAgICAgPSBCSVQoMyksCisJQVRIOUtfSFdfQ0FQX0NJUEhFUl9BRVNDQ00gICAgICAgICAgICAgID0gQklUKDQpLAorCUFUSDlLX0hXX0NBUF9DSVBIRVJfQ0tJUCAgICAgICAgICAgICAgICA9IEJJVCg1KSwKKwlBVEg5S19IV19DQVBfQ0lQSEVSX1RLSVAgICAgICAgICAgICAgICAgPSBCSVQoNiksCisJQVRIOUtfSFdfQ0FQX1ZFT0wgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDcpLAorCUFUSDlLX0hXX0NBUF9CU1NJRE1BU0sgICAgICAgICAgICAgICAgICA9IEJJVCg4KSwKKwlBVEg5S19IV19DQVBfTUNBU1RfS0VZU0VBUkNIICAgICAgICAgICAgPSBCSVQoOSksCisJQVRIOUtfSFdfQ0FQX0NIQU5fSEFMRlJBVEUgICAgICAgICAgICAgID0gQklUKDEwKSwKKwlBVEg5S19IV19DQVBfQ0hBTl9RVUFSVEVSUkFURSAgICAgICAgICAgPSBCSVQoMTEpLAorCUFUSDlLX0hXX0NBUF9IVCAgICAgICAgICAgICAgICAgICAgICAgICA9IEJJVCgxMiksCisJQVRIOUtfSFdfQ0FQX0dUVCAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDEzKSwKKwlBVEg5S19IV19DQVBfRkFTVENDICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTQpLAorCUFUSDlLX0hXX0NBUF9SRlNJTEVOVCAgICAgICAgICAgICAgICAgICA9IEJJVCgxNSksCisJQVRIOUtfSFdfQ0FQX1dPVyAgICAgICAgICAgICAgICAgICAgICAgID0gQklUKDE2KSwKKwlBVEg5S19IV19DQVBfQ1NUICAgICAgICAgICAgICAgICAgICAgICAgPSBCSVQoMTcpLAorCUFUSDlLX0hXX0NBUF9FTkhBTkNFRFBNICAgICAgICAgICAgICAgICA9IEJJVCgxOCksCisJQVRIOUtfSFdfQ0FQX0FVVE9TTEVFUCAgICAgICAgICAgICAgICAgID0gQklUKDE5KSwKKwlBVEg5S19IV19DQVBfNEtCX1NQTElUVFJBTlMgICAgICAgICAgICAgPSBCSVQoMjApLAorCUFUSDlLX0hXX0NBUF9XT1dfTUFUQ0hQQVRURVJOX0VYQUNUICAgICA9IEJJVCgyMSksCisJQVRIOUtfSFdfQ0FQX0JUX0NPRVgJCQk9IEJJVCgyMikKK307CisKK2VudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHsKKwlBVEg5S19DQVBfQ0lQSEVSID0gMCwKKwlBVEg5S19DQVBfVEtJUF9NSUMsCisJQVRIOUtfQ0FQX1RLSVBfU1BMSVQsCisJQVRIOUtfQ0FQX0RJVkVSU0lUWSwKKwlBVEg5S19DQVBfVFhQT1csCisJQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsCisJQVRIOUtfQ0FQX0RTCit9OworCitzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzIHsKKwl1MzIgaHdfY2FwczsgLyogQVRIOUtfSFdfQ0FQXyogZnJvbSBhdGg5a19od19jYXBzICovCisJREVDTEFSRV9CSVRNQVAod2lyZWxlc3NfbW9kZXMsIEFUSDlLX01PREVfTUFYKTsgLyogQVRIOUtfTU9ERV8qICovCisJdTE2IHRvdGFsX3F1ZXVlczsKKwl1MTYga2V5Y2FjaGVfc2l6ZTsKKwl1MTYgbG93XzVnaHpfY2hhbiwgaGlnaF81Z2h6X2NoYW47CisJdTE2IGxvd18yZ2h6X2NoYW4sIGhpZ2hfMmdoel9jaGFuOworCXUxNiBudW1fbXJfcmV0cmllczsKKwl1MTYgcnRzX2FnZ3JfbGltaXQ7CisJdTggdHhfY2hhaW5tYXNrOworCXU4IHJ4X2NoYWlubWFzazsKKwl1MTYgdHhfdHJpZ2xldmVsX21heDsKKwl1MTYgcmVnX2NhcDsKKwl1OCBudW1fZ3Bpb19waW5zOworCXU4IG51bV9hbnRjZmdfMmdoejsKKwl1OCBudW1fYW50Y2ZnXzVnaHo7Cit9OworCitzdHJ1Y3QgYXRoOWtfb3BzX2NvbmZpZyB7CisJaW50IGRtYV9iZWFjb25fcmVzcG9uc2VfdGltZTsKKwlpbnQgc3dfYmVhY29uX3Jlc3BvbnNlX3RpbWU7CisJaW50IGFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmOworCWludCBhY2tfNm1iOworCWludCBjd21faWdub3JlX2V4dGNjYTsKKwl1OCBwY2llX3Bvd2Vyc2F2ZV9lbmFibGU7CisJdTggcGNpZV9sMXNrcF9lbmFibGU7CisJdTggcGNpZV9jbG9ja19yZXE7CisJdTMyIHBjaWVfd2FlbjsKKwlpbnQgcGNpZV9wb3dlcl9yZXNldDsKKwl1OCBwY2llX3Jlc3RvcmU7CisJdTggYW5hbG9nX3NoaWZ0cmVnOworCXU4IGh0X2VuYWJsZTsKKwl1MzIgb2ZkbV90cmlnX2xvdzsKKwl1MzIgb2ZkbV90cmlnX2hpZ2g7CisJdTMyIGNja190cmlnX2hpZ2g7CisJdTMyIGNja190cmlnX2xvdzsKKwl1MzIgZW5hYmxlX2FuaTsKKwl1OCBub2lzZV9pbW11bml0eV9sZXZlbDsKKwl1MzIgb2ZkbV93ZWFrc2lnbmFsX2RldDsKKwl1MzIgY2NrX3dlYWtzaWduYWxfdGhyOworCXU4IHNwdXJfaW1tdW5pdHlfbGV2ZWw7CisJdTggZmlyc3RlcF9sZXZlbDsKKwlpbnQ4X3QgcnNzaV90aHJfaGlnaDsKKwlpbnQ4X3QgcnNzaV90aHJfbG93OworCXUxNiBkaXZlcnNpdHlfY29udHJvbDsKKwl1MTYgYW50ZW5uYV9zd2l0Y2hfc3dhcDsKKwlpbnQgc2VyaWFsaXplX3JlZ21vZGU7CisJaW50IGludHJfbWl0aWdhdGlvbjsKKyNkZWZpbmUgU1BVUl9ESVNBQkxFICAgICAgICAJMAorI2RlZmluZSBTUFVSX0VOQUJMRV9JT0NUTCAgIAkxCisjZGVmaW5lIFNQVVJfRU5BQkxFX0VFUFJPTSAgCTIKKyNkZWZpbmUgQVJfRUVQUk9NX01PREFMX1NQVVJTICAgNQorI2RlZmluZSBBUl9TUFVSXzU0MTNfMSAgICAgIAkxNjQwCisjZGVmaW5lIEFSX1NQVVJfNTQxM18yICAgICAgCTEyMDAKKyNkZWZpbmUgQVJfTk9fU1BVUiAgICAgIAkweDgwMDAKKyNkZWZpbmUgQVJfQkFTRV9GUkVRXzJHSFogICAJMjMwMAorI2RlZmluZSBBUl9CQVNFX0ZSRVFfNUdIWiAgIAk0OTAwCisjZGVmaW5lIEFSX1NQVVJfRkVFUV9CT1VORF9IVDQwIDE5CisjZGVmaW5lIEFSX1NQVVJfRkVFUV9CT1VORF9IVDIwIDEwCisJaW50IHNwdXJtb2RlOworCXUxNiBzcHVyY2hhbnNbQVJfRUVQUk9NX01PREFMX1NQVVJTXVsyXTsKK307CisKK2VudW0gYXRoOWtfaW50IHsKKwlBVEg5S19JTlRfUlggPSAweDAwMDAwMDAxLAorCUFUSDlLX0lOVF9SWERFU0MgPSAweDAwMDAwMDAyLAorCUFUSDlLX0lOVF9SWE5PRlJNID0gMHgwMDAwMDAwOCwKKwlBVEg5S19JTlRfUlhFT0wgPSAweDAwMDAwMDEwLAorCUFUSDlLX0lOVF9SWE9STiA9IDB4MDAwMDAwMjAsCisJQVRIOUtfSU5UX1RYID0gMHgwMDAwMDA0MCwKKwlBVEg5S19JTlRfVFhERVNDID0gMHgwMDAwMDA4MCwKKwlBVEg5S19JTlRfVElNX1RJTUVSID0gMHgwMDAwMDEwMCwKKwlBVEg5S19JTlRfVFhVUk4gPSAweDAwMDAwODAwLAorCUFUSDlLX0lOVF9NSUIgPSAweDAwMDAxMDAwLAorCUFUSDlLX0lOVF9SWFBIWSA9IDB4MDAwMDQwMDAsCisJQVRIOUtfSU5UX1JYS0NNID0gMHgwMDAwODAwMCwKKwlBVEg5S19JTlRfU1dCQSA9IDB4MDAwMTAwMDAsCisJQVRIOUtfSU5UX0JNSVNTID0gMHgwMDA0MDAwMCwKKwlBVEg5S19JTlRfQk5SID0gMHgwMDEwMDAwMCwKKwlBVEg5S19JTlRfVElNID0gMHgwMDIwMDAwMCwKKwlBVEg5S19JTlRfRFRJTSA9IDB4MDA0MDAwMDAsCisJQVRIOUtfSU5UX0RUSU1TWU5DID0gMHgwMDgwMDAwMCwKKwlBVEg5S19JTlRfR1BJTyA9IDB4MDEwMDAwMDAsCisJQVRIOUtfSU5UX0NBQkVORCA9IDB4MDIwMDAwMDAsCisJQVRIOUtfSU5UX1RTRk9PUiA9IDB4MDQwMDAwMDAsCisJQVRIOUtfSU5UX0NTVCA9IDB4MTAwMDAwMDAsCisJQVRIOUtfSU5UX0dUVCA9IDB4MjAwMDAwMDAsCisJQVRIOUtfSU5UX0ZBVEFMID0gMHg0MDAwMDAwMCwKKwlBVEg5S19JTlRfR0xPQkFMID0gMHg4MDAwMDAwMCwKKwlBVEg5S19JTlRfQk1JU0MgPSBBVEg5S19JTlRfVElNIHwKKwkJQVRIOUtfSU5UX0RUSU0gfAorCQlBVEg5S19JTlRfRFRJTVNZTkMgfAorCQlBVEg5S19JTlRfVFNGT09SIHwKKwkJQVRIOUtfSU5UX0NBQkVORCwKKwlBVEg5S19JTlRfQ09NTU9OID0gQVRIOUtfSU5UX1JYTk9GUk0gfAorCQlBVEg5S19JTlRfUlhERVNDIHwKKwkJQVRIOUtfSU5UX1JYRU9MIHwKKwkJQVRIOUtfSU5UX1JYT1JOIHwKKwkJQVRIOUtfSU5UX1RYVVJOIHwKKwkJQVRIOUtfSU5UX1RYREVTQyB8CisJCUFUSDlLX0lOVF9NSUIgfAorCQlBVEg5S19JTlRfUlhQSFkgfAorCQlBVEg5S19JTlRfUlhLQ00gfAorCQlBVEg5S19JTlRfU1dCQSB8CisJCUFUSDlLX0lOVF9CTUlTUyB8CisJCUFUSDlLX0lOVF9HUElPLAorCUFUSDlLX0lOVF9OT0NBUkQgPSAweGZmZmZmZmZmCit9OworCisjZGVmaW5lIENIQU5ORUxfQ1dfSU5UICAgIDB4MDAwMDIKKyNkZWZpbmUgQ0hBTk5FTF9DQ0sgICAgICAgMHgwMDAyMAorI2RlZmluZSBDSEFOTkVMX09GRE0gICAgICAweDAwMDQwCisjZGVmaW5lIENIQU5ORUxfMkdIWiAgICAgIDB4MDAwODAKKyNkZWZpbmUgQ0hBTk5FTF81R0haICAgICAgMHgwMDEwMAorI2RlZmluZSBDSEFOTkVMX1BBU1NJVkUgICAweDAwMjAwCisjZGVmaW5lIENIQU5ORUxfRFlOICAgICAgIDB4MDA0MDAKKyNkZWZpbmUgQ0hBTk5FTF9IQUxGICAgICAgMHgwNDAwMAorI2RlZmluZSBDSEFOTkVMX1FVQVJURVIgICAweDA4MDAwCisjZGVmaW5lIENIQU5ORUxfSFQyMCAgICAgIDB4MTAwMDAKKyNkZWZpbmUgQ0hBTk5FTF9IVDQwUExVUyAgMHgyMDAwMAorI2RlZmluZSBDSEFOTkVMX0hUNDBNSU5VUyAweDQwMDAwCisKKyNkZWZpbmUgQ0hBTk5FTF9JTlRFUkZFUkVOQ0UgICAgMHgwMQorI2RlZmluZSBDSEFOTkVMX0RGUyAgICAgICAgICAgICAweDAyCisjZGVmaW5lIENIQU5ORUxfNE1TX0xJTUlUICAgICAgIDB4MDQKKyNkZWZpbmUgQ0hBTk5FTF9ERlNfQ0xFQVIgICAgICAgMHgwOAorI2RlZmluZSBDSEFOTkVMX0RJU0FMTE9XX0FESE9DICAweDEwCisjZGVmaW5lIENIQU5ORUxfUEVSXzExRF9BREhPQyAgIDB4MjAKKworI2RlZmluZSBDSEFOTkVMX0EgICAgICAgICAgIChDSEFOTkVMXzVHSFp8Q0hBTk5FTF9PRkRNKQorI2RlZmluZSBDSEFOTkVMX0IgICAgICAgICAgIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9DQ0spCisjZGVmaW5lIENIQU5ORUxfRyAgICAgICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX09GRE0pCisjZGVmaW5lIENIQU5ORUxfR19IVDIwICAgICAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUMjApCisjZGVmaW5lIENIQU5ORUxfQV9IVDIwICAgICAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUMjApCisjZGVmaW5lIENIQU5ORUxfR19IVDQwUExVUyAgKENIQU5ORUxfMkdIWnxDSEFOTkVMX0hUNDBQTFVTKQorI2RlZmluZSBDSEFOTkVMX0dfSFQ0ME1JTlVTIChDSEFOTkVMXzJHSFp8Q0hBTk5FTF9IVDQwTUlOVVMpCisjZGVmaW5lIENIQU5ORUxfQV9IVDQwUExVUyAgKENIQU5ORUxfNUdIWnxDSEFOTkVMX0hUNDBQTFVTKQorI2RlZmluZSBDSEFOTkVMX0FfSFQ0ME1JTlVTIChDSEFOTkVMXzVHSFp8Q0hBTk5FTF9IVDQwTUlOVVMpCisjZGVmaW5lIENIQU5ORUxfQUxMCQkJCVwKKwkoQ0hBTk5FTF9PRkRNfAkJCQlcCisJIENIQU5ORUxfQ0NLfAkJCQlcCisJIENIQU5ORUxfMkdIWiB8CQkJCVwKKwkgQ0hBTk5FTF81R0haIHwJCQkJXAorCSBDSEFOTkVMX0hUMjAgfAkJCQlcCisJIENIQU5ORUxfSFQ0MFBMVVMgfAkJCVwKKwkgQ0hBTk5FTF9IVDQwTUlOVVMpCisKK3N0cnVjdCBhdGg5a19jaGFubmVsIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJdTE2IGNoYW5uZWw7CisJdTMyIGNoYW5uZWxGbGFnczsKKwl1MzIgY2hhbm1vZGU7CisJaW50MzJfdCBDYWxWYWxpZDsKKwlib29sIG9uZVRpbWVDYWxzRG9uZTsKKwlpbnQ4X3QgaUNvZmY7CisJaW50OF90IHFDb2ZmOworCWludDE2X3QgcmF3Tm9pc2VGbG9vcjsKK307CisKKyNkZWZpbmUgSVNfQ0hBTl9BKF9jKSAoKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0EpID09IENIQU5ORUxfQSkgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUMjApID09IENIQU5ORUxfQV9IVDIwKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0FfSFQ0MFBMVVMpID09IENIQU5ORUxfQV9IVDQwUExVUykgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9BX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9BX0hUNDBNSU5VUykpCisjZGVmaW5lIElTX0NIQU5fRyhfYykgKCgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgKENIQU5ORUxfRykpID09IENIQU5ORUxfRykgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUMjApID09IENIQU5ORUxfR19IVDIwKSB8fCBcCisgICAgICAgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX0dfSFQ0MFBMVVMpID09IENIQU5ORUxfR19IVDQwUExVUykgfHwgXAorICAgICAgICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9HX0hUNDBNSU5VUykgPT0gQ0hBTk5FTF9HX0hUNDBNSU5VUykpCisjZGVmaW5lIElTX0NIQU5fT0ZETShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX09GRE0pICE9IDApCisjZGVmaW5lIElTX0NIQU5fNUdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzVHSFopICE9IDApCisjZGVmaW5lIElTX0NIQU5fMkdIWihfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMXzJHSFopICE9IDApCisjZGVmaW5lIElTX0NIQU5fUEFTU0lWRShfYykgKCgoX2MpLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1BBU1NJVkUpICE9IDApCisjZGVmaW5lIElTX0NIQU5fSEFMRl9SQVRFKF9jKSAoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfSEFMRikgIT0gMCkKKyNkZWZpbmUgSVNfQ0hBTl9RVUFSVEVSX1JBVEUoX2MpICgoKF9jKS0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9RVUFSVEVSKSAhPSAwKQorI2RlZmluZSBJU19DSEFOX0FfNU1IWl9TUEFDRUQoX2MpCQkJXAorCSgoKChfYyktPmNoYW5uZWxGbGFncyAmIENIQU5ORUxfNUdIWikgIT0gMCkgJiYJXAorCSAoKChfYyktPmNoYW5uZWwgJSAyMCkgIT0gMCkgJiYJCQlcCisJICgoKF9jKS0+Y2hhbm5lbCAlIDEwKSAhPSAwKSkKKworLyogVGhlc2UgbWFjcm9zIGNoZWNrIGNoYW5tb2RlIGFuZCBub3QgY2hhbm5lbEZsYWdzICovCisjZGVmaW5lIElTX0NIQU5fQihfYykgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQikKKyNkZWZpbmUgSVNfQ0hBTl9IVDIwKF9jKSAoKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDIwKSB8fAlcCisJCQkgICgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQyMCkpCisjZGVmaW5lIElTX0NIQU5fSFQ0MChfYykgKCgoX2MpLT5jaGFubW9kZSA9PSBDSEFOTkVMX0FfSFQ0MFBMVVMpIHx8CVwKKwkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwTUlOVVMpIHx8CVwKKwkJCSAgKChfYyktPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykgfHwJXAorCQkJICAoKF9jKS0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9HX0hUNDBNSU5VUykpCisjZGVmaW5lIElTX0NIQU5fSFQoX2MpIChJU19DSEFOX0hUMjAoKF9jKSkgfHwgSVNfQ0hBTl9IVDQwKChfYykpKQorCitlbnVtIGF0aDlrX3Bvd2VyX21vZGUgeworCUFUSDlLX1BNX0FXQUtFID0gMCwKKwlBVEg5S19QTV9GVUxMX1NMRUVQLAorCUFUSDlLX1BNX05FVFdPUktfU0xFRVAsCisJQVRIOUtfUE1fVU5ERUZJTkVECit9OworCitlbnVtIGF0aDlrX2FudF9zZXR0aW5nIHsKKwlBVEg5S19BTlRfVkFSSUFCTEUgPSAwLAorCUFUSDlLX0FOVF9GSVhFRF9BLAorCUFUSDlLX0FOVF9GSVhFRF9CCit9OworCitlbnVtIGF0aDlrX3RwX3NjYWxlIHsKKwlBVEg5S19UUF9TQ0FMRV9NQVggPSAwLAorCUFUSDlLX1RQX1NDQUxFXzUwLAorCUFUSDlLX1RQX1NDQUxFXzI1LAorCUFUSDlLX1RQX1NDQUxFXzEyLAorCUFUSDlLX1RQX1NDQUxFX01JTgorfTsKKworZW51bSBzZXJfcmVnX21vZGUgeworCVNFUl9SRUdfTU9ERV9PRkYgPSAwLAorCVNFUl9SRUdfTU9ERV9PTiA9IDEsCisJU0VSX1JFR19NT0RFX0FVVE8gPSAyLAorfTsKKworc3RydWN0IGF0aDlrX2JlYWNvbl9zdGF0ZSB7CisJdTMyIGJzX25leHR0YnR0OworCXUzMiBic19uZXh0ZHRpbTsKKwl1MzIgYnNfaW50dmFsOworI2RlZmluZSBBVEg5S19CRUFDT05fUEVSSU9EICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQVRIOUtfQkVBQ09OX0VOQSAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIEFUSDlLX0JFQUNPTl9SRVNFVF9UU0YgICAgMHgwMTAwMDAwMAorI2RlZmluZSBBVEg5S19UU0ZPT1JfVEhSRVNIT0xEICAgIDB4MDAwMDQyNDAgLyogMTZrIHVzICovCisJdTMyIGJzX2R0aW1wZXJpb2Q7CisJdTE2IGJzX2NmcHBlcmlvZDsKKwl1MTYgYnNfY2ZwbWF4ZHVyYXRpb247CisJdTMyIGJzX2NmcG5leHQ7CisJdTE2IGJzX3RpbW9mZnNldDsKKwl1MTYgYnNfYm1pc3N0aHJlc2hvbGQ7CisJdTMyIGJzX3NsZWVwZHVyYXRpb247CisJdTMyIGJzX3RzZm9vcl90aHJlc2hvbGQ7Cit9OworCitzdHJ1Y3QgY2hhbl9jZW50ZXJzIHsKKwl1MTYgc3ludGhfY2VudGVyOworCXUxNiBjdGxfY2VudGVyOworCXUxNiBleHRfY2VudGVyOworfTsKKworZW51bSB7CisJQVRIOUtfUkVTRVRfUE9XRVJfT04sCisJQVRIOUtfUkVTRVRfV0FSTSwKKwlBVEg5S19SRVNFVF9DT0xELAorfTsKKworc3RydWN0IGF0aDlrX2h3X3ZlcnNpb24geworCXUzMiBtYWdpYzsKKwl1MTYgZGV2aWQ7CisJdTE2IHN1YnZlbmRvcmlkOworCXUzMiBtYWNWZXJzaW9uOworCXUxNiBtYWNSZXY7CisJdTE2IHBoeVJldjsKKwl1MTYgYW5hbG9nNUdoelJldjsKKwl1MTYgYW5hbG9nMkdoelJldjsKK307CisKK3N0cnVjdCBhdGhfaHcgeworCXN0cnVjdCBhdGhfc29mdGMgKmFoX3NjOworCXN0cnVjdCBhdGg5a19od192ZXJzaW9uIGh3X3ZlcnNpb247CisJc3RydWN0IGF0aDlrX29wc19jb25maWcgY29uZmlnOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgY2FwczsKKwlzdHJ1Y3QgYXRoOWtfcmVndWxhdG9yeSByZWd1bGF0b3J5OworCXN0cnVjdCBhdGg5a19jaGFubmVsIGNoYW5uZWxzWzM4XTsKKwlzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY3VyY2hhbjsKKworCXVuaW9uIHsKKwkJc3RydWN0IGFyNTQxNl9lZXByb21fZGVmIGRlZjsKKwkJc3RydWN0IGFyNTQxNl9lZXByb21fNGsgbWFwNGs7CisJfSBlZXByb207CisJY29uc3Qgc3RydWN0IGVlcHJvbV9vcHMgKmVlcF9vcHM7CisJZW51bSBhdGg5a19lZXBfbWFwIGVlcF9tYXA7CisKKwlib29sIHN3X21nbXRfY3J5cHRvOworCWJvb2wgaXNfcGNpZXhwcmVzczsKKwl1OCBtYWNhZGRyW0VUSF9BTEVOXTsKKwl1MTYgdHhfdHJpZ19sZXZlbDsKKwl1MTYgcmZzaWxlbnQ7CisJdTMyIHJma2lsbF9ncGlvOworCXUzMiByZmtpbGxfcG9sYXJpdHk7CisJdTMyIGJ0YWN0aXZlX2dwaW87CisJdTMyIHdsYW5hY3RpdmVfZ3BpbzsKKwl1MzIgYWhfZmxhZ3M7CisKKwllbnVtIG5sODAyMTFfaWZ0eXBlIG9wbW9kZTsKKwllbnVtIGF0aDlrX3Bvd2VyX21vZGUgcG93ZXJfbW9kZTsKKwllbnVtIGF0aDlrX3Bvd2VyX21vZGUgcmVzdG9yZV9tb2RlOworCisJc3RydWN0IGF0aDlrX25mY2FsX2hpc3QgbmZDYWxIaXN0W05VTV9ORl9SRUFESU5HU107CisJc3RydWN0IGFyNTQxNlN0YXRzIHN0YXRzOworCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvIHR4cVtBVEg5S19OVU1fVFhfUVVFVUVTXTsKKworCWludDE2X3QgY3VyY2hhbl9yYWRfaW5kZXg7CisJdTMyIG1hc2tfcmVnOworCXUzMiB0eG9rX2ludGVycnVwdF9tYXNrOworCXUzMiB0eGVycl9pbnRlcnJ1cHRfbWFzazsKKwl1MzIgdHhkZXNjX2ludGVycnVwdF9tYXNrOworCXUzMiB0eGVvbF9pbnRlcnJ1cHRfbWFzazsKKwl1MzIgdHh1cm5faW50ZXJydXB0X21hc2s7CisJYm9vbCBjaGlwX2Z1bGxzbGVlcDsKKwl1MzIgYXRpbV93aW5kb3c7CisJdTE2IGFudGVubmFfc3dpdGNoX3N3YXA7CisJZW51bSBhdGg5a19hbnRfc2V0dGluZyBkaXZlcnNpdHlfY29udHJvbDsKKworCS8qIENhbGlicmF0aW9uICovCisJZW51bSBoYWxfY2FsX3R5cGVzIHN1cHBfY2FsczsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0IGlxX2NhbGRhdGE7CisJc3RydWN0IGhhbF9jYWxfbGlzdCBhZGNnYWluX2NhbGRhdGE7CisJc3RydWN0IGhhbF9jYWxfbGlzdCBhZGNkY19jYWxpbml0ZGF0YTsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0IGFkY2RjX2NhbGRhdGE7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsX2xpc3Q7CisJc3RydWN0IGhhbF9jYWxfbGlzdCAqY2FsX2xpc3RfbGFzdDsKKwlzdHJ1Y3QgaGFsX2NhbF9saXN0ICpjYWxfbGlzdF9jdXJyOworI2RlZmluZSB0b3RhbFBvd2VyTWVhc0kgbWVhczAudW5zaWduCisjZGVmaW5lIHRvdGFsUG93ZXJNZWFzUSBtZWFzMS51bnNpZ24KKyNkZWZpbmUgdG90YWxJcUNvcnJNZWFzIG1lYXMyLnNpZ24KKyNkZWZpbmUgdG90YWxBZGNJT2RkUGhhc2UgIG1lYXMwLnVuc2lnbgorI2RlZmluZSB0b3RhbEFkY0lFdmVuUGhhc2UgbWVhczEudW5zaWduCisjZGVmaW5lIHRvdGFsQWRjUU9kZFBoYXNlICBtZWFzMi51bnNpZ24KKyNkZWZpbmUgdG90YWxBZGNRRXZlblBoYXNlIG1lYXMzLnVuc2lnbgorI2RlZmluZSB0b3RhbEFkY0RjT2Zmc2V0SU9kZFBoYXNlICBtZWFzMC5zaWduCisjZGVmaW5lIHRvdGFsQWRjRGNPZmZzZXRJRXZlblBoYXNlIG1lYXMxLnNpZ24KKyNkZWZpbmUgdG90YWxBZGNEY09mZnNldFFPZGRQaGFzZSAgbWVhczIuc2lnbgorI2RlZmluZSB0b3RhbEFkY0RjT2Zmc2V0UUV2ZW5QaGFzZSBtZWFzMy5zaWduCisJdW5pb24geworCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl9IG1lYXMwOworCXVuaW9uIHsKKwkJdTMyIHVuc2lnbltBUjU0MTZfTUFYX0NIQUlOU107CisJCWludDMyX3Qgc2lnbltBUjU0MTZfTUFYX0NIQUlOU107CisJfSBtZWFzMTsKKwl1bmlvbiB7CisJCXUzMiB1bnNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCQlpbnQzMl90IHNpZ25bQVI1NDE2X01BWF9DSEFJTlNdOworCX0gbWVhczI7CisJdW5pb24geworCQl1MzIgdW5zaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwkJaW50MzJfdCBzaWduW0FSNTQxNl9NQVhfQ0hBSU5TXTsKKwl9IG1lYXMzOworCXUxNiBjYWxfc2FtcGxlczsKKworCXUzMiBzdGFfaWQxX2RlZmF1bHRzOworCXUzMiBtaXNjX21vZGU7CisJZW51bSB7CisJCUFVVE9fMzJLSFosCisJCVVTRV8zMktIWiwKKwkJRE9OVF9VU0VfMzJLSFosCisJfSBlbmFibGVfMzJrSHpfY2xvY2s7CisKKwkvKiBSRiAqLworCXUzMiAqYW5hbG9nQmFuazBEYXRhOworCXUzMiAqYW5hbG9nQmFuazFEYXRhOworCXUzMiAqYW5hbG9nQmFuazJEYXRhOworCXUzMiAqYW5hbG9nQmFuazNEYXRhOworCXUzMiAqYW5hbG9nQmFuazZEYXRhOworCXUzMiAqYW5hbG9nQmFuazZUUENEYXRhOworCXUzMiAqYW5hbG9nQmFuazdEYXRhOworCXUzMiAqYWRkYWM1NDE2XzIxOworCXUzMiAqYmFuazZUZW1wOworCisJaW50MTZfdCB0eHBvd2VyX2luZGV4b2Zmc2V0OworCXUzMiBiZWFjb25faW50ZXJ2YWw7CisJdTMyIHNsb3R0aW1lOworCXUzMiBhY2t0aW1lb3V0OworCXUzMiBjdHN0aW1lb3V0OworCXUzMiBnbG9iYWx0eHRpbWVvdXQ7CisJdTggZ2JlYWNvbl9yYXRlOworCisJLyogQU5JICovCisJdTMyIHByb2NfcGh5ZXJyOworCWJvb2wgaGFzX2h3X3BoeWNvdW50ZXJzOworCXUzMiBhbmlwZXJpb2Q7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlICpjdXJhbmk7CisJc3RydWN0IGFyNTQxNkFuaVN0YXRlIGFuaVsyNTVdOworCWludCB0b3RhbFNpemVEZXNpcmVkWzVdOworCWludCBjb2Fyc2VfaGlnaFs1XTsKKwlpbnQgY29hcnNlX2xvd1s1XTsKKwlpbnQgZmlycHdyWzVdOworCWVudW0gYXRoOWtfYW5pX2NtZCBhbmlfZnVuY3Rpb247CisKKwl1MzIgaW50cl90eHFzOworCWJvb2wgaW50cl9taXRpZ2F0aW9uOworCWVudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgZXh0cHJvdHNwYWNpbmc7CisJdTggdHhjaGFpbm1hc2s7CisJdTggcnhjaGFpbm1hc2s7CisKKwl1MzIgb3JpZ2luYWxHYWluWzIyXTsKKwlpbnQgaW5pdFBEQURDOworCWludCBQREFEQ2RlbHRhOworCisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlDb21tb247CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbmswOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCQl9SZkdhaW47CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbmsxOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCYW5rMjsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazM7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUJhbms2OworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlCYW5rNlRQQzsKKwlzdHJ1Y3QgYXI1NDE2SW5pQXJyYXkgaW5pQmFuazc7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaUFkZGFjOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlQY2llU2VyZGVzOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2Rlc0FkZGl0aW9uYWw7CisJc3RydWN0IGFyNTQxNkluaUFycmF5IGluaU1vZGVzUnhHYWluOworCXN0cnVjdCBhcjU0MTZJbmlBcnJheSBpbmlNb2Rlc1R4R2FpbjsKK307CisKKy8qIEF0dGFjaCwgRGV0YWNoLCBSZXNldCAqLworY29uc3QgY2hhciAqYXRoOWtfaHdfcHJvYmUodTE2IHZlbmRvcmlkLCB1MTYgZGV2aWQpOwordm9pZCBhdGg5a19od19kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpOworc3RydWN0IGF0aF9odyAqYXRoOWtfaHdfYXR0YWNoKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqZXJyb3IpOwordm9pZCBhdGg5a19od19yZmRldGFjaChzdHJ1Y3QgYXRoX2h3ICphaCk7CitpbnQgYXRoOWtfaHdfcmVzZXQoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkgICBib29sIGJDaGFubmVsQ2hhbmdlKTsKK2Jvb2wgYXRoOWtfaHdfZmlsbF9jYXBfaW5mbyhzdHJ1Y3QgYXRoX2h3ICphaCk7Citib29sIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfY2FwYWJpbGl0eV90eXBlIHR5cGUsCisJCQkgICAgdTMyIGNhcGFiaWxpdHksIHUzMiAqcmVzdWx0KTsKK2Jvb2wgYXRoOWtfaHdfc2V0Y2FwYWJpbGl0eShzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19jYXBhYmlsaXR5X3R5cGUgdHlwZSwKKwkJCSAgICB1MzIgY2FwYWJpbGl0eSwgdTMyIHNldHRpbmcsIGludCAqc3RhdHVzKTsKKworLyogS2V5IENhY2hlIE1hbmFnZW1lbnQgKi8KK2Jvb2wgYXRoOWtfaHdfa2V5cmVzZXQoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBlbnRyeSk7Citib29sIGF0aDlrX2h3X2tleXNldG1hYyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTE2IGVudHJ5LCBjb25zdCB1OCAqbWFjKTsKK2Jvb2wgYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnksCisJCQkJIGNvbnN0IHN0cnVjdCBhdGg5a19rZXl2YWwgKmssCisJCQkJIGNvbnN0IHU4ICptYWMpOworYm9vbCBhdGg5a19od19rZXlpc3ZhbGlkKHN0cnVjdCBhdGhfaHcgKmFoLCB1MTYgZW50cnkpOworCisvKiBHUElPIC8gUkZLSUxMIC8gQW50ZW5uYWUgKi8KK3ZvaWQgYXRoOWtfaHdfY2ZnX2dwaW9faW5wdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBncGlvKTsKK3UzMiBhdGg5a19od19ncGlvX2dldChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGdwaW8pOwordm9pZCBhdGg5a19od19jZmdfb3V0cHV0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgZ3BpbywKKwkJCSB1MzIgYWhfc2lnbmFsX3R5cGUpOwordm9pZCBhdGg5a19od19zZXRfZ3BpbyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGdwaW8sIHUzMiB2YWwpOworI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKK3ZvaWQgYXRoOWtfZW5hYmxlX3Jma2lsbChzdHJ1Y3QgYXRoX2h3ICphaCk7CiAjZW5kaWYKK3UzMiBhdGg5a19od19nZXRkZWZhbnRlbm5hKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfc2V0YW50ZW5uYShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGFudGVubmEpOworYm9vbCBhdGg5a19od19zZXRhbnRlbm5hc3dpdGNoKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJICAgICAgIGVudW0gYXRoOWtfYW50X3NldHRpbmcgc2V0dGluZ3MsCisJCQkgICAgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCisJCQkgICAgICAgdTggKnR4X2NoYWlubWFzaywgdTggKnJ4X2NoYWlubWFzaywKKwkJCSAgICAgICB1OCAqYW50ZW5uYV9jZmdkKTsKIAotI2RlZmluZSBBVEg5S19QT1dfU00oX3IsIF9zKSAgICAgKCgoX3IpICYgMHgzZikgPDwgKF9zKSkKKy8qIEdlbmVyYWwgT3BlcmF0aW9uICovCitib29sIGF0aDlrX2h3X3dhaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsLCB1MzIgdGltZW91dCk7Cit1MzIgYXRoOWtfaHdfcmV2ZXJzZV9iaXRzKHUzMiB2YWwsIHUzMiBuKTsKK2Jvb2wgYXRoOWtfZ2V0X2NoYW5uZWxfZWRnZXMoc3RydWN0IGF0aF9odyAqYWgsIHUxNiBmbGFncywgdTE2ICpsb3csIHUxNiAqaGlnaCk7Cit1MTYgYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlcywKKwkJCSAgIHUzMiBmcmFtZUxlbiwgdTE2IHJhdGVpeCwgYm9vbCBzaG9ydFByZWFtYmxlKTsKK3ZvaWQgYXRoOWtfaHdfZ2V0X2NoYW5uZWxfY2VudGVycyhzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorCQkJCSAgc3RydWN0IGNoYW5fY2VudGVycyAqY2VudGVycyk7Cit1MzIgYXRoOWtfaHdfZ2V0cnhmaWx0ZXIoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zZXRyeGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGJpdHMpOworYm9vbCBhdGg5a19od19waHlfZGlzYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7Citib29sIGF0aDlrX2h3X2Rpc2FibGUoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbGltaXQpOwordm9pZCBhdGg5a19od19zZXRtYWMoc3RydWN0IGF0aF9odyAqYWgsIGNvbnN0IHU4ICptYWMpOwordm9pZCBhdGg5a19od19zZXRvcG1vZGUoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zZXRtY2FzdGZpbHRlcihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIGZpbHRlcjAsIHUzMiBmaWx0ZXIxKTsKK3ZvaWQgYXRoOWtfaHdfc2V0YnNzaWRtYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit1NjQgYXRoOWtfaHdfZ2V0dHNmNjQoc3RydWN0IGF0aF9odyAqYWgpOwordm9pZCBhdGg5a19od19zZXR0c2Y2NChzdHJ1Y3QgYXRoX2h3ICphaCwgdTY0IHRzZjY0KTsKK3ZvaWQgYXRoOWtfaHdfcmVzZXRfdHNmKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHNldHRpbmcpOworYm9vbCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2h3ICphaCwgZW51bSBhdGg5a19odF9tYWNtb2RlIG1vZGUpOwordm9pZCBhdGg5a19od19iZWFjb25pbml0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbmV4dF9iZWFjb24sIHUzMiBiZWFjb25fcGVyaW9kKTsKK3ZvaWQgYXRoOWtfaHdfc2V0X3N0YV9iZWFjb25fdGltZXJzKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfYmVhY29uX3N0YXRlICpicyk7Citib29sIGF0aDlrX2h3X3NldHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkgICAgICAgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpOwordm9pZCBhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc3RydWN0IGF0aF9odyAqYWgsIGludCByZXN0b3JlKTsKIAotI2RlZmluZSBBVEg5S19BTlRFTk5BMF9DSEFJTk1BU0sgICAgICAgIDB4MQotI2RlZmluZSBBVEg5S19BTlRFTk5BMV9DSEFJTk1BU0sgICAgICAgIDB4MgorLyogSW50ZXJydXB0IEhhbmRsaW5nICovCitib29sIGF0aDlrX2h3X2ludHJwZW5kKHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfZ2V0aXNyKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX2ludCAqbWFza2VkKTsKK2VudW0gYXRoOWtfaW50IGF0aDlrX2h3X2ludHJnZXQoc3RydWN0IGF0aF9odyAqYWgpOworZW51bSBhdGg5a19pbnQgYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfaW50IGludHMpOwogCi0jZGVmaW5lIEFUSDlLX05VTV9ETUFfREVCVUdfUkVHUyAgICAgICAgOAotI2RlZmluZSBBVEg5S19OVU1fUVVFVUVTICAgICAgICAgICAgICAgIDEwCi0KLSNkZWZpbmUgSEFMX05PSVNFX0lNTVVORV9NQVggICAgICAgICAgICA0Ci0jZGVmaW5lIEhBTF9TUFVSX0lNTVVORV9NQVggICAgICAgICAgICAgNwotI2RlZmluZSBIQUxfRklSU1RfU1RFUF9NQVggICAgICAgICAgICAgIDIKLQotI2RlZmluZSBBVEg5S19BTklfT0ZETV9UUklHX0hJR0ggICAgICAgICAgNTAwCi0jZGVmaW5lIEFUSDlLX0FOSV9PRkRNX1RSSUdfTE9XICAgICAgICAgICAyMDAKLSNkZWZpbmUgQVRIOUtfQU5JX0NDS19UUklHX0hJR0ggICAgICAgICAgIDIwMAotI2RlZmluZSBBVEg5S19BTklfQ0NLX1RSSUdfTE9XICAgICAgICAgICAgMTAwCi0jZGVmaW5lIEFUSDlLX0FOSV9OT0lTRV9JTU1VTkVfTFZMICAgICAgICA0Ci0jZGVmaW5lIEFUSDlLX0FOSV9VU0VfT0ZETV9XRUFLX1NJRyAgICAgICB0cnVlCi0jZGVmaW5lIEFUSDlLX0FOSV9DQ0tfV0VBS19TSUdfVEhSICAgICAgICBmYWxzZQotI2RlZmluZSBBVEg5S19BTklfU1BVUl9JTU1VTkVfTFZMICAgICAgICAgNwotI2RlZmluZSBBVEg5S19BTklfRklSU1RFUF9MVkwgICAgICAgICAgICAgMAotI2RlZmluZSBBVEg5S19BTklfUlNTSV9USFJfSElHSCAgICAgICAgICAgNDAKLSNkZWZpbmUgQVRIOUtfQU5JX1JTU0lfVEhSX0xPVyAgICAgICAgICAgIDcKLSNkZWZpbmUgQVRIOUtfQU5JX1BFUklPRCAgICAgICAgICAgICAgICAgIDEwMAotCi0jZGVmaW5lIEFSX0dQSU9EX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMUZGRgotI2RlZmluZSBBUl9HUElPX0JJVChfZ3BpbykgICAgICAgICAgICAgICgxIDw8IChfZ3BpbykpCi0KLSNkZWZpbmUgSEFMX0VQX1JORCh4LCBtdWwpIFwKLQkoKCgoeCklKG11bCkpID49ICgobXVsKS8yKSkgPyAoKHgpICsgKChtdWwpIC0gMSkpIC8gKG11bCkgOiAoeCkvKG11bCkpCi0jZGVmaW5lIEJFQUNPTl9SU1NJKGFocCkgXAotCUhBTF9FUF9STkQoYWhwLT5haF9zdGF0cy5hc3Rfbm9kZXN0YXRzLm5zX2F2Z2Jyc3NpLCBcCi0JCUFUSDlLX1JTU0lfRVBfTVVMVElQTElFUikKLQotI2RlZmluZSBhaF9taWJTdGF0cyAgICAgYWhfc3RhdHMuYXN0X21pYnN0YXRzCi0KLSNkZWZpbmUgQUhfVElNRU9VVCAgICAgICAgIDEwMDAwMAotI2RlZmluZSBBSF9USU1FX1FVQU5UVU0gICAgICAgIDEwCi0KLSNkZWZpbmUgQVJfS0VZVEFCTEVfU0laRSAxMjgKLSNkZWZpbmUgUE9XRVJfVVBfVElNRSAgICAyMDAwMDAKLQotI2RlZmluZSBFWFRfQURESVRJVkUgKDB4ODAwMCkKLSNkZWZpbmUgQ1RMXzExQV9FWFQgKENUTF8xMUEgfCBFWFRfQURESVRJVkUpCi0jZGVmaW5lIENUTF8xMUdfRVhUIChDVExfMTFHIHwgRVhUX0FERElUSVZFKQotI2RlZmluZSBDVExfMTFCX0VYVCAoQ1RMXzExQiB8IEVYVF9BRERJVElWRSkKLQotI2RlZmluZSBTVUJfTlVNX0NUTF9NT0RFU19BVF81R180MCAyCi0jZGVmaW5lIFNVQl9OVU1fQ1RMX01PREVTX0FUXzJHXzQwIDMKLSNkZWZpbmUgU1BVUl9SU1NJX1RIUkVTSCA0MAotCi0jZGVmaW5lIFRVX1RPX1VTRUMoX3R1KSAgICAgICAgICgoX3R1KSA8PCAxMCkKLQotI2RlZmluZSBDQUJfVElNRU9VVF9WQUwgICAgICAgICAxMAotI2RlZmluZSBCRUFDT05fVElNRU9VVF9WQUwgICAgICAxMAotI2RlZmluZSBNSU5fQkVBQ09OX1RJTUVPVVRfVkFMICAgMQotI2RlZmluZSBTTEVFUF9TTE9QICAgICAgICAgICAgICAgMwotCi0jZGVmaW5lIENDS19TSUZTX1RJTUUgICAgICAgIDEwCi0jZGVmaW5lIENDS19QUkVBTUJMRV9CSVRTICAgMTQ0Ci0jZGVmaW5lIENDS19QTENQX0JJVFMgICAgICAgIDQ4Ci0KLSNkZWZpbmUgT0ZETV9TSUZTX1RJTUUgICAgICAgIDE2Ci0jZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRSAgICAyMAotI2RlZmluZSBPRkRNX1BMQ1BfQklUUyAgICAgICAgMjIKLSNkZWZpbmUgT0ZETV9TWU1CT0xfVElNRSAgICAgIDQKLQotI2RlZmluZSBPRkRNX1NJRlNfVElNRV9IQUxGICAgICAzMgotI2RlZmluZSBPRkRNX1BSRUFNQkxFX1RJTUVfSEFMRiA0MAotI2RlZmluZSBPRkRNX1BMQ1BfQklUU19IQUxGICAgICAyMgotI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FX0hBTEYgICA4Ci0KLSNkZWZpbmUgT0ZETV9TSUZTX1RJTUVfUVVBUlRFUiAgICAgIDY0Ci0jZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRV9RVUFSVEVSICA4MAotI2RlZmluZSBPRkRNX1BMQ1BfQklUU19RVUFSVEVSICAgICAgMjIKLSNkZWZpbmUgT0ZETV9TWU1CT0xfVElNRV9RVUFSVEVSICAgIDE2Ci0KLXUzMiBhdGg5a19od19nZXRfZWVwcm9tKHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCWVudW0gZWVwcm9tX3BhcmFtIHBhcmFtKTsKK3ZvaWQgYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaW5pdHZhbHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL2luaXR2YWxzLmgKaW5kZXggZjNjZmExNi4uZTJmMGEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvaW5pdHZhbHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9pbml0dmFscy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsOCArMTQsNyBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0vKiBBUjU0MTYgdG8gRm93bCBhcjUxNDYuaW5pICovCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNk1vZGVzXzkxMDBbXVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNbXVs2XSA9IHsKICAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwYjAsIDB4MDAwMDBlNjAsIDB4MDAwMDFjYzAsIDB4MDAwMDdjNzAsIDB4MDAwMDNlMzgsIDB4MDAwMDExODAgfSwKQEAgLTc5LDcgKzc4LDcgQEAKICAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2Q29tbW9uXzkxMDBbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2Q29tbW9uW11bMl0gPSB7CiAgICAgeyAweDAwMDAwMDBjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDAwMDMwLCAweDAwMDIwMDE1IH0sCiAgICAgeyAweDAwMDAwMDM0LCAweDAwMDAwMDA1IH0sCkBAIC00NTcsMTIgKzQ1NiwxMiBAQAogICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMF85MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmswW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDFlNTc5NWU1IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAyMDA4MDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2Fpbl85MTAwW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2FpbltdWzNdID0gewogICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9LAogICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9LApAQCAtNTI5LDIxICs1MjgsMjEgQEAKICAgICB7IDB4MDAwMDlhZmMsIDB4MDAwMDAwZjksIDB4MDAwMDAwZjkgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazFfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMVtdWzJdID0gewogICAgIHsgMHgwMDAwOThiMCwgMHgwMjEwODQyMSB9LAogICAgIHsgMHgwMDAwOThlYywgMHgwMDAwMDAwOCB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMl85MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmsyW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDBlNzNmZjE3IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAwMDAwNDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbmszXzkxMDBbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazNbXVszXSA9IHsKICAgICB7IDB4MDAwMDk4ZjAsIDB4MDE0MDAwMTgsIDB4MDFjMDAwMTggfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZfOTEwMFtdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNltdWzNdID0gewogCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA5ODljLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCkBAIC01ODAsNyArNTc5LDcgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazZUUENfOTEwMFtdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ1tdWzNdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LApAQCAtNjE2LDEzICs2MTUsMTMgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdfOTEwMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rN1tdWzJdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDUwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDgwMCB9LAogICAgIHsgMHgwMDAwOThjYywgMHgwMDAwMDAwZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY185MTAwW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkFkZGFjW11bMl0gPSB7CiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAwIH0sCiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAzIH0sCiAgICAgezB4MDAwMDk4OWMsICAweDAwMDAwMDAwIH0sCkBAIC02NTksMTEgKzY1OCwxMCBAQAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAgMHgwMDAwMDAwMCB9LAotICAgIHsweDAwMDA5OGM0LCAgMHgwMDAwMDAwMCB9LAorICAgIHsweDAwMDA5OGNjLCAgMHgwMDAwMDAwMCB9LAogfTsKIAotLyogYXI1NDE2IC0gaG93bCBhcjU0MTZfaG93bC5pbmkgKi8KLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNbXVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2TW9kZXNfOTEwMFtdWzZdID0gewogICAgIHsgMHgwMDAwMTAzMCwgMHgwMDAwMDIzMCwgMHgwMDAwMDQ2MCwgMHgwMDAwMDJjMCwgMHgwMDAwMDE2MCwgMHgwMDAwMDFlMCB9LAogICAgIHsgMHgwMDAwMTA3MCwgMHgwMDAwMDE2OCwgMHgwMDAwMDJkMCwgMHgwMDAwMDMxOCwgMHgwMDAwMDE4YywgMHgwMDAwMDFlMCB9LAogICAgIHsgMHgwMDAwMTBiMCwgMHgwMDAwMGU2MCwgMHgwMDAwMWNjMCwgMHgwMDAwN2M3MCwgMHgwMDAwM2UzOCwgMHgwMDAwMTE4MCB9LApAQCAtNzM3LDcgKzczNSw3IEBACiAgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkNvbW1vbltdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZDb21tb25fOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwMDAwYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwMDAzMCwgMHgwMDAyMDAxNSB9LAogICAgIHsgMHgwMDAwMDAzNCwgMHgwMDAwMDAwNSB9LApAQCAtMTExMSwxMiArMTEwOSwxMiBAQAogICAgIHsgMHgwMDAwYTNlMCwgMHgwMDAwMDFjZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMFtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMF85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDFlNTc5NWU1IH0sCiAgICAgeyAweDAwMDA5OGUwLCAweDAyMDA4MDIwIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJCX1JmR2FpbltdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCQl9SZkdhaW5fOTEwMFtdWzNdID0gewogICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDA0MCwgMHgwMDAwMDA0MCB9LAogICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDA4MCwgMHgwMDAwMDA4MCB9LApAQCAtMTE4MywyMSArMTE4MSwyMSBAQAogICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDBmOSwgMHgwMDAwMDBmOSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMVtdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMV85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDAyMTA4NDIxfSwKICAgICB7IDB4MDAwMDk4ZWMsIDB4MDAwMDAwMDh9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMltdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rMl85MTAwW11bMl0gPSB7CiAgICAgeyAweDAwMDA5OGIwLCAweDBlNzNmZjE3fSwKICAgICB7IDB4MDAwMDk4ZTAsIDB4MDAwMDA0MjB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rM1tdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rM185MTAwW11bM10gPSB7CiAgICAgeyAweDAwMDA5OGYwLCAweDAxNDAwMDE4LCAweDAxYzAwMDE4IH0sCiB9OwogCi1zdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2W11bM10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGFyNTQxNkJhbms2XzkxMDBbXVszXSA9IHsKIAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LApAQCAtMTIzNSw3ICsxMjMzLDcgQEAKIH07CiAKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ1tdWzNdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZCYW5rNlRQQ185MTAwW11bM10gPSB7CiAKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk4OWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKQEAgLTEyNzIsMTMgKzEyNzAsMTMgQEAKICAgICB7IDB4MDAwMDk4ZDAsIDB4MDAwMDAwMGYsIDB4MDAxMDAwMGYgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdbXVsyXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYXI1NDE2QmFuazdfOTEwMFtdWzJdID0gewogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDUwMCB9LAogICAgIHsgMHgwMDAwOTg5YywgMHgwMDAwMDgwMCB9LAogICAgIHsgMHgwMDAwOThjYywgMHgwMDAwMDAwZSB9LAogfTsKIAotc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY1tdWzJdID0geworc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZBZGRhY185MTAwW11bMl0gPSB7CiAgICAgezB4MDAwMDk4OWMsIDB4MDAwMDAwMDAgfSwKICAgICB7MHgwMDAwOTg5YywgMHgwMDAwMDAwMCB9LAogICAgIHsweDAwMDA5ODljLCAweDAwMDAwMDAwIH0sCkBAIC0xMzEzLDcgKzEzMTEsNiBAQAogICAgIHsweDAwMDA5OGNjLCAweDAwMDAwMDAwIH0sCiB9OwogCi0vKiBBUjU0MTYgOTE2MCBTb3dsIGFyNTQxNl9zb3dsLmluaSAqLwogc3RhdGljIGNvbnN0IHUzMiBhcjU0MTZNb2Rlc185MTYwW11bNl0gPSB7CiAgICAgeyAweDAwMDAxMDMwLCAweDAwMDAwMjMwLCAweDAwMDAwNDYwLCAweDAwMDAwMmMwLCAweDAwMDAwMTYwLCAweDAwMDAwMWUwIH0sCiAgICAgeyAweDAwMDAxMDcwLCAweDAwMDAwMTY4LCAweDAwMDAwMmQwLCAweDAwMDAwMzE4LCAweDAwMDAwMThjLCAweDAwMDAwMWUwIH0sCkBAIC0yNTQ5LDYgKzI1NDYsOCBAQAogICAgIHsgMHgwMDAwMTBmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwOCB9LAogICAgIHsgMHgwMDAwODAxNCwgMHgwM2U4MDNlOCwgMHgwN2QwMDdkMCwgMHgxMDgwMTYwMCwgMHgwODQwMGIwMCwgMHgwNmUwMDZlMCB9LAogICAgIHsgMHgwMDAwODAxYywgMHgxMjhkODAyNywgMHgxMjhkODA0ZiwgMHgxMmUwMDA1NywgMHgxMmUwMDAyYiwgMHgwOTg4MDA0ZiB9LAorICAgIHsgMHgwMDAwODEyMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgwMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMCwgMHgwOGYwNDgxMCB9LAorICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIxMCwgMHgwMDAwMzIxMCwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYSwgMHgwMDAwMzIwYSB9LAogICAgIHsgMHgwMDAwODMxOCwgMHgwMDAwM2U4MCwgMHgwMDAwN2QwMCwgMHgwMDAwNjg4MCwgMHgwMDAwMzQ0MCwgMHgwMDAwNjg4MCB9LAogICAgIHsgMHgwMDAwOTgwNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDNjNCwgMHgwMDAwMDNjNCwgMHgwMDAwMDMwMCwgMHgwMDAwMDMwMyB9LAogICAgIHsgMHgwMDAwOTgyMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCwgMHgwMjAyMDIwMCB9LApAQCAtMjU4Nyw3ICsyNTg2LDYgQEAKICAgICB7IDB4MDAwMGEyMWMsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEsIDB4MTg4MzgwMGEgfSwKICAgICB7IDB4MDAwMGEyMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAyMTAsIDB4MDAwMDAxMDgsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEyNTAsIDB4MDAxZmYwMDAsIDB4MDAxZmYwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAsIDB4MDAwNGEwMDAgfSwKLSAgICB7IDB4MDAwMGEyNzQsIDB4MGExOWM2NTIsIDB4MGExOWM2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIgfSwKICAgICB7IDB4MDAwMGEzNTgsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMDIsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUsIDB4Nzk5OWFhMGUgfSwKICAgICB7IDB4MDAwMGEzZDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDc4OTQsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAsIDB4NWE1MDgwMDAgfSwKQEAgLTI3MTksNyArMjcxNyw2IEBACiAgICAgeyAweDAwMDA4MTEwLCAweDAwMDAwMTY4IH0sCiAgICAgeyAweDAwMDA4MTE4LCAweDAwMDEwMGFhIH0sCiAgICAgeyAweDAwMDA4MTFjLCAweDAwMDAzMjEwIH0sCi0gICAgeyAweDAwMDA4MTIwLCAweDA4ZjA0ODAwIH0sCiAgICAgeyAweDAwMDA4MTI0LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MTI4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MTJjLCAweDAwMDAwMDAwIH0sCkBAIC0yNzM1LDcgKzI3MzIsNiBAQAogICAgIHsgMHgwMDAwODE3OCwgMHgwMDAwMDEwMCB9LAogICAgIHsgMHgwMDAwODE3YywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFjMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwODFkMCwgMHgwMDAwMzIxMCB9LAogICAgIHsgMHgwMDAwODFlYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFmMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwODFmNCwgMHgwMDAwMDAwMCB9LApAQCAtMjgxNyw3ICsyODEzLDcgQEAKICAgICB7IDB4MDAwMDk5NTgsIDB4MjEwOGVjZmYgfSwKICAgICB7IDB4MDAwMDk5NDAsIDB4MTQ3NTA2MDQgfSwKICAgICB7IDB4MDAwMGM5NWMsIDB4MDA0YjZhOGUgfSwKLSAgICB7IDB4MDAwMDk5NjgsIDB4MDAwMDAzY2UgfSwKKyAgICB7IDB4MDAwMGM5NjgsIDB4MDAwMDAzY2UgfSwKICAgICB7IDB4MDAwMDk5NzAsIDB4MTkwZmI1MTUgfSwKICAgICB7IDB4MDAwMDk5NzQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDk5NzgsIDB4MDAwMDAwMDEgfSwKQEAgLTI5MDksMTYgKzI5MDUsMTIgQEAKICAgICB7IDB4MDAwMDc4MGMsIDB4MjEwODQyMTAgfSwKICAgICB7IDB4MDAwMDc4MTAsIDB4NmQ4MDEzMDAgfSwKICAgICB7IDB4MDAwMDc4MTgsIDB4MDdlNDEwMDAgfSwKLSAgICB7IDB4MDAwMDc4MWMsIDB4MDAzOTIwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4OTI1OTI0ODAgfSwKICAgICB7IDB4MDAwMDc4MjQsIDB4MDAwNDAwMDAgfSwKICAgICB7IDB4MDAwMDc4MjgsIDB4ZGIwMDUwMTIgfSwKICAgICB7IDB4MDAwMDc4MmMsIDB4MDQ5MjQ5MTQgfSwKICAgICB7IDB4MDAwMDc4MzAsIDB4MjEwODQyMTAgfSwKICAgICB7IDB4MDAwMDc4MzQsIDB4NmQ4MDEzMDAgfSwKICAgICB7IDB4MDAwMDc4M2MsIDB4MDdlNDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4NDAsIDB4MDAzOTIwMDAgfSwKLSAgICB7IDB4MDAwMDc4NDQsIDB4OTI1OTI0ODAgfSwKICAgICB7IDB4MDAwMDc4NDgsIDB4MDAxMDAwMDAgfSwKICAgICB7IDB4MDAwMDc4NGMsIDB4NzczZjA1NjcgfSwKICAgICB7IDB4MDAwMDc4NTAsIDB4NTQyMTQ1MTQgfSwKQEAgLTI5NTQsNyArMjk0Niw2IEBACiAgICAgeyAweDAwMDA5ODQ0LCAweDAzNzIxODIxLCAweDAzNzIxODIxIH0sCiAgICAgeyAweDAwMDA5OTE0LCAweDAwMDAwODk4LCAweDAwMDAxMTMwIH0sCiAgICAgeyAweDAwMDA5OTE4LCAweDAwMDAwMDBiLCAweDAwMDAwMDE2IH0sCi0gICAgeyAweDAwMDA5OTQ0LCAweGRmYmMxMjEwLCAweGRmYmMxMjEwIH0sCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGFyOTI4ME1vZGVzX2JhY2tvZmZfMjNkYl9yeGdhaW5fOTI4MF8yW11bNl0gPSB7CkBAIC0zMzY2LDIxICszMzU3LDI2IEBACiAgICAgeyAweDAwMDBhMzE4LCAweDAwMDE1MDRhLCAweDAwMDE1MDRhLCAweDAwMDE4MjBhLCAweDAwMDE4MjBhLCAweDAwMDE4MjBhIH0sCiAgICAgeyAweDAwMDBhMzFjLCAweDAwMDE5MDRjLCAweDAwMDE5MDRjLCAweDAwMDFiMjExLCAweDAwMDFiMjExLCAweDAwMDFiMjExIH0sCiAgICAgeyAweDAwMDBhMzIwLCAweDAwMDFjMDRlLCAweDAwMDFjMDRlLCAweDAwMDFlMjEzLCAweDAwMDFlMjEzLCAweDAwMDFlMjEzIH0sCi0gICAgeyAweDAwMDBhMzI0LCAweDAwMDIwMDkyLCAweDAwMDIwMDkyLCAweDAwMDIyNDExLCAweDAwMDIyNDExLCAweDAwMDIyNDExIH0sCi0gICAgeyAweDAwMDBhMzI4LCAweDAwMDI0MTBhLCAweDAwMDI0MTBhLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzIH0sCi0gICAgeyAweDAwMDBhMzJjLCAweDAwMDI3MTBjLCAweDAwMDI3MTBjLCAweDAwMDI5ODExLCAweDAwMDI5ODExLCAweDAwMDI5ODExIH0sCi0gICAgeyAweDAwMDBhMzMwLCAweDAwMDJiMThiLCAweDAwMDJiMThiLCAweDAwMDJjODEzLCAweDAwMDJjODEzLCAweDAwMDJjODEzIH0sCi0gICAgeyAweDAwMDBhMzM0LCAweDAwMDJlMWNjLCAweDAwMDJlMWNjLCAweDAwMDMwYTE0LCAweDAwMDMwYTE0LCAweDAwMDMwYTE0IH0sCi0gICAgeyAweDAwMDBhMzM4LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwIH0sCi0gICAgeyAweDAwMDBhMzNjLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjIH0sCi0gICAgeyAweDAwMDBhMzQwLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDNkZThhLCAweDAwMDNkZThhLCAweDAwMDNkZThhIH0sCi0gICAgeyAweDAwMDBhMzQ0LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyIH0sCi0gICAgeyAweDAwMDBhMzQ4LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyIH0sCi0gICAgeyAweDAwMDBhMzRjLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1IH0sCi0gICAgeyAweDAwMDBhMzUwLCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDRmZjU0LCAweDAwMDRmZjU0LCAweDAwMDRmZjU0IH0sCi0gICAgeyAweDAwMDBhMzU0LCAweDAwMDMyMWVjLCAweDAwMDMyMWVjLCAweDAwMDUzZmQ1LCAweDAwMDUzZmQ1LCAweDAwMDUzZmQ1IH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDIxMDkyLCAweDAwMDIxMDkyLCAweDAwMDIyNDExLCAweDAwMDIyNDExLCAweDAwMDIyNDExIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDI1MTBhLCAweDAwMDI1MTBhLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzLCAweDAwMDI1NDEzIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDI5MTBjLCAweDAwMDI5MTBjLCAweDAwMDI5ODExLCAweDAwMDI5ODExLCAweDAwMDI5ODExIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDJjMThiLCAweDAwMDJjMThiLCAweDAwMDJjODEzLCAweDAwMDJjODEzLCAweDAwMDJjODEzIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDJmMWNjLCAweDAwMDJmMWNjLCAweDAwMDMwYTE0LCAweDAwMDMwYTE0LCAweDAwMDMwYTE0IH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDMyMWViLCAweDAwMDMyMWViLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwLCAweDAwMDM1YTUwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjLCAweDAwMDM5YzRjIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDNkZThhLCAweDAwMDNkZThhLCAweDAwMDNkZThhIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyLCAweDAwMDQyZTkyIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyLCAweDAwMDQ2ZWQyIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1LCAweDAwMDRiZWQ1IH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDRmZjU0LCAweDAwMDRmZjU0LCAweDAwMDRmZjU0IH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDM0MWVjLCAweDAwMDM0MWVjLCAweDAwMDU1ZmQ1LCAweDAwMDU1ZmQ1LCAweDAwMDU1ZmQ1IH0sCiAgICAgeyAweDAwMDA3ODE0LCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmIH0sCiAgICAgeyAweDAwMDA3ODM4LCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmLCAweDAwMTk4ZWZmIH0sCisgICAgeyAweDAwMDA3ODFjLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwIH0sCisgICAgeyAweDAwMDA3ODQwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwLCAweDAwMTcyMDAwIH0sCisgICAgeyAweDAwMDA3ODIwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwIH0sCisgICAgeyAweDAwMDA3ODQ0LCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwLCAweGYyNThhNDgwIH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMTllNjUyLCAweDBhMTllNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyLCAweDBhMWFhNjUyIH0sCiAgICAgeyAweDAwMDBhMjdjLCAweDA1MDczOWNlLCAweDA1MDczOWNlLCAweDA1MDczOWNlLCAweDA1MDczOWNlLCAweDA1MDczOWNlIH0sCiB9OwogCkBAIC0zNDA5LDYgKzM0MDUsMTEgQEAKICAgICB7IDB4MDAwMGEzNTQsIDB4MDAwMzIxZWMsIDB4MDAwMzIxZWMsIDB4MDAwNGJmNDIsIDB4MDAwNGJmNDIsIDB4MDAwNGJmNDIgfSwKICAgICB7IDB4MDAwMDc4MTQsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYgfSwKICAgICB7IDB4MDAwMDc4MzgsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYsIDB4MDAxOWJlZmYgfSwKKyAgICB7IDB4MDAwMDc4MWMsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAgfSwKKyAgICB7IDB4MDAwMDc4NDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAsIDB4MDAzOTIwMDAgfSwKKyAgICB7IDB4MDAwMDc4MjAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAgfSwKKyAgICB7IDB4MDAwMDc4NDQsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAsIDB4OTI1OTI0ODAgfSwKKyAgICB7IDB4MDAwMGEyNzQsIDB4MGExOWM2NTIsIDB4MGExOWM2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIsIDB4MGExYWE2NTIgfSwKICAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UgfSwKIH07CiAKQEAgLTQxMjAsNiArNDEyMSw3IEBACiAgICAgezB4MDAwMDQwNDQsICAweDAwMDAwMDAwIH0sCiB9OwogCisvKiBBUjkyODUgdjFfMiBQQ0kgUmVnaXN0ZXIgV3JpdGVzLiAgQ3JlYXRlZDogMDMvMDQvMDkgKi8KIHN0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfOTI4NV8xXzJbXVs2XSA9IHsKICAgICB7IDB4MDAwMDEwMzAsIDB4MDAwMDAyMzAsIDB4MDAwMDA0NjAsIDB4MDAwMDAyYzAsIDB4MDAwMDAxNjAsIDB4MDAwMDAxZTAgfSwKICAgICB7IDB4MDAwMDEwNzAsIDB4MDAwMDAxNjgsIDB4MDAwMDAyZDAsIDB4MDAwMDAzMTgsIDB4MDAwMDAxOGMsIDB4MDAwMDAxZTAgfSwKQEAgLTQxMzUsMTEgKzQxMzcsMTEgQEAKICAgICB7IDB4MDAwMDk4MzQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUgfSwKICAgICB7IDB4MDAwMDk4MzgsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcsIDB4MDAwMDAwMDcgfSwKICAgICB7IDB4MDAwMDk4NDAsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUsIDB4MjA2YTAxMmUgfSwKLSAgICB7IDB4MDAwMDk4NDQsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MWUsIDB4MDM3MjAwMjAsIDB4MDM3MjAwMjAsIDB4MDM3MjE2YTAgfSwKLSAgICB7IDB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDAwNTcsIDB4MDAwMDAwNTcsIDB4MDAwMDEwNTkgfSwKKyAgICB7IDB4MDAwMDk4NDQsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MWUsIDB4MDM3MjE2MjAsIDB4MDM3MjE2MjAsIDB4MDM3MjE2YTAgfSwKKyAgICB7IDB4MDAwMDk4NDgsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNjYsIDB4MDAwMDEwNTMsIDB4MDAwMDEwNTMsIDB4MDAwMDEwNTkgfSwKICAgICB7IDB4MDAwMDk4NTAsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIsIDB4NmQ0MDAwZTIgfSwKICAgICB7IDB4MDAwMDk4NTgsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUsIDB4N2VjODRkMmUgfSwKLSAgICB7IDB4MDAwMDk4NWMsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzNjYwNWUsIDB4MzEzNjYwNWUsIDB4MzEzOTYwNWUgfSwKKyAgICB7IDB4MDAwMDk4NWMsIDB4MzEzOTYwNWUsIDB4MzEzOTYwNWUsIDB4MzEzNzYwNWUsIDB4MzEzNzYwNWUsIDB4MzEzOTYwNWUgfSwKICAgICB7IDB4MDAwMDk4NjAsIDB4MDAwNThkMTgsIDB4MDAwNThkMTgsIDB4MDAwNThkMjAsIDB4MDAwNThkMjAsIDB4MDAwNThkMTggfSwKICAgICB7IDB4MDAwMDk4NjQsIDB4MDAwMGZlMDAsIDB4MDAwMGZlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAsIDB4MDAwMWNlMDAgfSwKICAgICB7IDB4MDAwMDk4NjgsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAsIDB4NWFjNjQwZDAgfSwKQEAgLTQxNTQsMjkxICs0MTU2LDI3MiBAQAogICAgIHsgMHgwMDAwOTliYywgMHgwMDAwMDYwMCwgMHgwMDAwMDYwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCwgMHgwMDAwMGMwMCB9LAogICAgIHsgMHgwMDAwOTljMCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCwgMHgwNWVlYTZkNCB9LAogICAgIHsgMHgwMDAwOTljNCwgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NywgMHgwNjMzNmY3NyB9LAotICAgIHsgMHgwMDAwOTljOCwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSwgMHg2MGY2NTMyOSB9LAorICAgIHsgMHgwMDAwOTljOCwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSwgMHg2YWY2NTMyOSB9LAogICAgIHsgMHgwMDAwOTljYywgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCwgMHgwOGYxODZjOCB9LAogICAgIHsgMHgwMDAwOTlkMCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCwgMHgwMDA0NjM4NCB9LAogICAgIHsgMHgwMDAwOTlkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTlkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4NCwgMHgwMDA2ODA4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4OCwgMHgwMDA2ODA4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4YywgMHgwMDA2ODA4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwMCwgMHgwMDA2ODEwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwNCwgMHgwMDA2ODEwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwOCwgMHgwMDA2ODEwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwYywgMHgwMDA2ODEwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExMCwgMHgwMDA2ODExMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExNCwgMHgwMDA2ODExNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4MCwgMHgwMDA2ODE4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4NCwgMHgwMDA2ODE4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4OCwgMHgwMDA2ODE4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4YywgMHgwMDA2ODE4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5MCwgMHgwMDA2ODE5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5NCwgMHgwMDA2ODE5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhMCwgMHgwMDA2ODFhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIwYywgMHgwMDA2ODIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhOCwgMHgwMDA2ODFhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI4NCwgMHgwMDA2ODI4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI4OCwgMHgwMDA2ODI4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIyMCwgMHgwMDA2ODIyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI5MCwgMHgwMDA2ODI5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwMCwgMHgwMDA2ODMwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwNCwgMHgwMDA2ODMwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwOCwgMHgwMDA2ODMwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwYywgMHgwMDA2ODMwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODM4MCwgMHgwMDA2ODM4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODM4NCwgMHgwMDA2ODM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4NCwgMHgwMDA1ODA4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4OCwgMHgwMDA1ODA4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwMCwgMHgwMDA1ODEwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwNCwgMHgwMDA1ODEwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwYywgMHgwMDA1ODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExMCwgMHgwMDA1ODExMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4MCwgMHgwMDA1ODE4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4NCwgMHgwMDA1ODE4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4YywgMHgwMDA1ODE4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5MCwgMHgwMDA1ODE5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhMCwgMHgwMDA1ODFhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIwYywgMHgwMDA1ODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4NCwgMHgwMDA1ODI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4OCwgMHgwMDA1ODI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyMCwgMHgwMDA1ODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI5MCwgMHgwMDA1ODI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwMCwgMHgwMDA1ODMwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwOCwgMHgwMDA1ODMwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwYywgMHgwMDA1ODMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4NCwgMHgwMDA1ODM4NCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwMCwgMHgwMDA2ODcwMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwOCwgMHgwMDA2ODcwOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwYywgMHgwMDA2ODcwYywgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4NCwgMHgwMDA2ODc4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwNCwgMHgwMDA2OGIwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwOCwgMHgwMDA2OGIwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwOCwgMHgwMDA2OGIwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGIwYywgMHgwMDA2OGIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4MCwgMHgwMDA2OGI4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4NCwgMHgwMDA2OGI4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4OCwgMHgwMDA2OGI4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4YywgMHgwMDA2OGI4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGI5MCwgMHgwMDBiOGI5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4MCwgMHgwMDBiOGY4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4NCwgMHgwMDBiOGY4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4OCwgMHgwMDBiOGY4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4YywgMHgwMDBiOGY4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY5MCwgMHgwMDBiOGY5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjMwYywgMHgwMDBiYjMwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjMxMCwgMHgwMDBiYjMxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4NCwgMHgwMDBiYjM4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4OCwgMHgwMDBiYjM4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjMyNCwgMHgwMDBiYjMyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjcwNCwgMHgwMDBiYjcwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTZhNCwgMHgwMDBmOTZhNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTZhOCwgMHgwMDBmOTZhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxMCwgMHgwMDBmOTcxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxNCwgMHgwMDBmOTcxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyMCwgMHgwMDBmOTcyMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyNCwgMHgwMDBmOTcyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyOCwgMHgwMDBmOTcyOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcyYywgMHgwMDBmOTcyYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTdhMCwgMHgwMDBmOTdhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTdhNCwgMHgwMDBmOTdhNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOCwgMHgwMDBmYjdhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMCwgMHgwMDBmYjdiMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiNCwgMHgwMDBmYjdiNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiOCwgMHgwMDBmYjdiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhNSwgMHgwMDBmYjdhNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOSwgMHgwMDBmYjdhOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhZCwgMHgwMDBmYjdhZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMSwgMHgwMDBmYjdiMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiNSwgMHgwMDBmYjdiNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiOSwgMHgwMDBmYjdiOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNSwgMHgwMDBmYjdjNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjOSwgMHgwMDBmYjdjOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMSwgMHgwMDBmYjdkMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNSwgMHgwMDBmYjdkNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkOSwgMHgwMDBmYjdkOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNiwgMHgwMDBmYjdjNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYSwgMHgwMDBmYjdjYSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZSwgMHgwMDBmYjdjZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMiwgMHgwMDBmYjdkMiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNiwgMHgwMDBmYjdkNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjMywgMHgwMDBmYjdjMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNywgMHgwMDBmYjdjNywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYiwgMHgwMDBmYjdjYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZiwgMHgwMDBmYjdjZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNywgMHgwMDBmYjdkNywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkYiwgMHgwMDBmYjdkYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODAxYywgMHgwMDA2ODAxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODAxYywgMHgwMDA2ODAxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODAxYywgMHgwMDA2ODAxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4MCwgMHgwMDA2ODA4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4NCwgMHgwMDA2ODA4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4OCwgMHgwMDA2ODA4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODA4YywgMHgwMDA2ODA4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwMCwgMHgwMDA2ODEwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwNCwgMHgwMDA2ODEwNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwOCwgMHgwMDA2ODEwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODEwYywgMHgwMDA2ODEwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExMCwgMHgwMDA2ODExMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODExMCwgMHgwMDA2ODExMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4MCwgMHgwMDA2ODE4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4NCwgMHgwMDA2ODE4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4OCwgMHgwMDA2ODE4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE4YywgMHgwMDA2ODE4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5MCwgMHgwMDA2ODE5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODE5NCwgMHgwMDA2ODE5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhMCwgMHgwMDA2ODFhMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIwYywgMHgwMDA2ODIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhOCwgMHgwMDA2ODFhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODFhYywgMHgwMDA2ODFhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIxYywgMHgwMDA2ODIxYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODIyNCwgMHgwMDA2ODIyNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODI5MCwgMHgwMDA2ODI5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwMCwgMHgwMDA2ODMwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwOCwgMHgwMDA2ODMwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMwYywgMHgwMDA2ODMwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODMxMCwgMHgwMDA2ODMxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4OCwgMHgwMDA2ODc4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4YywgMHgwMDA2ODc4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5MCwgMHgwMDA2ODc5MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5NCwgMHgwMDA2ODc5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5OCwgMHgwMDA2ODc5OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc5YywgMHgwMDA2ODc5YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4OSwgMHgwMDA2OGI4OSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI4ZCwgMHgwMDA2OGI4ZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI5MSwgMHgwMDA2OGI5MSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI5NSwgMHgwMDA2OGI5NSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGI5OSwgMHgwMDA2OGI5OSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGJhNSwgMHgwMDA2OGJhNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGJhOSwgMHgwMDA2OGJhOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2OGJhZCwgMHgwMDA2OGJhZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGIwYywgMHgwMDBiOGIwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGYxMCwgMHgwMDBiOGYxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGYxNCwgMHgwMDBiOGYxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4NCwgMHgwMDBiOGY4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4NCwgMHgwMDBiOGY4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiOGY4OCwgMHgwMDBiOGY4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4MCwgMHgwMDBiYjM4MCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4NCwgMHgwMDBiYjM4NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4OCwgMHgwMDBiYjM4OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM4YywgMHgwMDBiYjM4YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjM5NCwgMHgwMDBiYjM5NCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBiYjc5OCwgMHgwMDBiYjc5OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwYywgMHgwMDBmOTcwYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxMCwgMHgwMDBmOTcxMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxNCwgMHgwMDBmOTcxNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxOCwgMHgwMDBmOTcxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwNSwgMHgwMDBmOTcwNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwOSwgMHgwMDBmOTcwOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcwZCwgMHgwMDBmOTcwZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxMSwgMHgwMDBmOTcxMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxNSwgMHgwMDBmOTcxNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmOTcxOSwgMHgwMDBmOTcxOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhNCwgMHgwMDBmYjdhNCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOCwgMHgwMDBmYjdhOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhYywgMHgwMDBmYjdhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhYywgMHgwMDBmYjdhYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMCwgMHgwMDBmYjdiMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiOCwgMHgwMDBmYjdiOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiYywgMHgwMDBmYjdiYywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhMSwgMHgwMDBmYjdhMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhNSwgMHgwMDBmYjdhNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdhOSwgMHgwMDBmYjdhOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiMSwgMHgwMDBmYjdiMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiNSwgMHgwMDBmYjdiNSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdiZCwgMHgwMDBmYjdiZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjOSwgMHgwMDBmYjdjOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZCwgMHgwMDBmYjdjZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMSwgMHgwMDBmYjdkMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkOSwgMHgwMDBmYjdkOSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjMiwgMHgwMDBmYjdjMiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjNiwgMHgwMDBmYjdjNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYSwgMHgwMDBmYjdjYSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjZSwgMHgwMDBmYjdjZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMiwgMHgwMDBmYjdkMiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkNiwgMHgwMDBmYjdkNiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjMywgMHgwMDBmYjdjMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdjYiwgMHgwMDBmYjdjYiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBmYjdkMywgMHgwMDBmYjdkMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwYywgMHgwMDA3OGIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4NCwgMHgwMDA3OGI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4OCwgMHgwMDA3OGI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI5MCwgMHgwMDA3OGI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4MCwgMHgwMDBjYWY4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4OCwgMHgwMDBjYWY4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4YywgMHgwMDBjYWY4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMwYywgMHgwMDBkYjMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMxMCwgMHgwMDBkYjMxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4OCwgMHgwMDBkYjM4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMyNCwgMHgwMDBkYjMyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhNCwgMHgwMDBlYjZhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhOCwgMHgwMDBlYjZhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxNCwgMHgwMDBlYjcxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyMCwgMHgwMDBlYjcyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyOCwgMHgwMDBlYjcyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyYywgMHgwMDBlYjcyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNCwgMHgwMDBlYjdhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOCwgMHgwMDBlYjdhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNCwgMHgwMDBlYjdiNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOCwgMHgwMDBlYjdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOSwgMHgwMDBlYjdhOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhZCwgMHgwMDBlYjdhZCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNSwgMHgwMDBlYjdiNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOSwgMHgwMDBlYjdiOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjOSwgMHgwMDBlYjdjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMSwgMHgwMDBlYjdkMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkOSwgMHgwMDBlYjdkOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNiwgMHgwMDBlYjdjNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZSwgMHgwMDBlYjdjZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMiwgMHgwMDBlYjdkMiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjMywgMHgwMDBlYjdjMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNywgMHgwMDBlYjdjNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZiwgMHgwMDBlYjdjZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNywgMHgwMDBlYjdkNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwOWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4NCwgMHgwMDA1ODA4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4OCwgMHgwMDA1ODA4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODA4YywgMHgwMDA1ODA4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwMCwgMHgwMDA1ODEwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwNCwgMHgwMDA1ODEwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwOCwgMHgwMDA1ODEwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODEwYywgMHgwMDA1ODEwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWExYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExMCwgMHgwMDA1ODExMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODExNCwgMHgwMDA1ODExNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4MCwgMHgwMDA1ODE4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4NCwgMHgwMDA1ODE4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4OCwgMHgwMDA1ODE4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE4YywgMHgwMDA1ODE4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5MCwgMHgwMDA1ODE5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODE5NCwgMHgwMDA1ODE5NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWEzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhMCwgMHgwMDA1ODFhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIwYywgMHgwMDA1ODIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODFhOCwgMHgwMDA1ODFhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4NCwgMHgwMDA1ODI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI4OCwgMHgwMDA1ODI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODIyMCwgMHgwMDA1ODIyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODI5MCwgMHgwMDA1ODI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwMCwgMHgwMDA1ODMwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwNCwgMHgwMDA1ODMwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwOCwgMHgwMDA1ODMwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODMwYywgMHgwMDA1ODMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4MCwgMHgwMDA1ODM4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA1ODM4NCwgMHgwMDA1ODM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwMCwgMHgwMDA2ODcwMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwNCwgMHgwMDA2ODcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwOCwgMHgwMDA2ODcwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODcwYywgMHgwMDA2ODcwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4MCwgMHgwMDA2ODc4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA2ODc4NCwgMHgwMDA2ODc4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwNCwgMHgwMDA3OGIwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwOCwgMHgwMDA3OGIwOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGIwYywgMHgwMDA3OGIwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4MCwgMHgwMDA3OGI4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWE5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4NCwgMHgwMDA3OGI4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4OCwgMHgwMDA3OGI4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI4YywgMHgwMDA3OGI4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDA3OGI5MCwgMHgwMDA3OGI5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4MCwgMHgwMDBjYWY4MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4NCwgMHgwMDBjYWY4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4OCwgMHgwMDBjYWY4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY4YywgMHgwMDBjYWY4YywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBjYWY5MCwgMHgwMDBjYWY5MCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMwYywgMHgwMDBkYjMwYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMxMCwgMHgwMDBkYjMxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4NCwgMHgwMDBkYjM4NCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjM4OCwgMHgwMDBkYjM4OCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBkYjMyNCwgMHgwMDBkYjMyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcwNCwgMHgwMDBlYjcwNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhNCwgMHgwMDBlYjZhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjZhOCwgMHgwMDBlYjZhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxMCwgMHgwMDBlYjcxMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcxNCwgMHgwMDBlYjcxNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyMCwgMHgwMDBlYjcyMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyNCwgMHgwMDBlYjcyNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyOCwgMHgwMDBlYjcyOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjcyYywgMHgwMDBlYjcyYywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhMCwgMHgwMDBlYjdhMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWFmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNCwgMHgwMDBlYjdhNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOCwgMHgwMDBlYjdhOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMCwgMHgwMDBlYjdiMCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNCwgMHgwMDBlYjdiNCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOCwgMHgwMDBlYjdiOCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhNSwgMHgwMDBlYjdhNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhOSwgMHgwMDBlYjdhOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdhZCwgMHgwMDBlYjdhZCwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiMSwgMHgwMDBlYjdiMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiNSwgMHgwMDBlYjdiNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdiOSwgMHgwMDBlYjdiOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNSwgMHgwMDBlYjdjNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjOSwgMHgwMDBlYjdjOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMSwgMHgwMDBlYjdkMSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNSwgMHgwMDBlYjdkNSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkOSwgMHgwMDBlYjdkOSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWIzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNiwgMHgwMDBlYjdjNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYSwgMHgwMDBlYjdjYSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZSwgMHgwMDBlYjdjZSwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkMiwgMHgwMDBlYjdkMiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI0YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNiwgMHgwMDBlYjdkNiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjMywgMHgwMDBlYjdjMywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjNywgMHgwMDBlYjdjNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjYiwgMHgwMDBlYjdjYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI1YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdjZiwgMHgwMDBlYjdjZiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkNywgMHgwMDBlYjdkNywgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI2YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI3YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI4YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5OCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWI5YywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJhYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJiYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJkYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJlYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAorICAgIHsgMHgwMDAwYWJmYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDBlYjdkYiwgMHgwMDBlYjdkYiwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTIwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNCB9LAotICAgIHsgMHgwMDAwYTIwYywgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxZjAwMCB9LAorICAgIHsgMHgwMDAwYTIwYywgMHgwMDAwMDAxNCwgMHgwMDAwMDAxNCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCwgMHgwMDAxZjAwMCB9LAogICAgIHsgMHgwMDAwYTIxYywgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSwgMHgxODgzODAwYSB9LAogICAgIHsgMHgwMDAwYTIzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDIxMCwgMHgwMDAwMDEwOCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTI1MCwgMHgwMDA0ZjAwMCwgMHgwMDA0ZjAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCwgMHgwMDA0YTAwMCB9LAotICAgIHsgMHgwMDAwYTI3NCwgMHgwYTgxYzY1MiwgMHgwYTgxYzY1MiwgMHgwYTgyMDY1MiwgMHgwYTgyMDY1MiwgMHgwYTgyYTY1MiB9LAotICAgIHsgMHgwMDAwYTMwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwNzIwMSwgMHgwMDAwNzIwMSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxMDQwOCwgMHgwMDAxMDQwOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAxODYwYSwgMHgwMDAxODYwYSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyMDgxOCwgMHgwMDAyMDgxOCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyNDg1OCwgMHgwMDAyNDg1OCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyNjg1OSwgMHgwMDAyNjg1OSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMxYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyOTg1YiwgMHgwMDAyOTg1YiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyYjg5YSwgMHgwMDAyYjg5YSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyZDg5YiwgMHgwMDAyZDg5YiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAyZjg5YywgMHgwMDAyZjg5YywgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMyYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMTg5ZCwgMHgwMDAzMTg5ZCwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzMzg5ZSwgMHgwMDAzMzg5ZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzNjhkZSwgMHgwMDAzNjhkZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzODkxZSwgMHgwMDAzODkxZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTMzYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzYTk1ZSwgMHgwMDAzYTk1ZSwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0MCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAotICAgIHsgMHgwMDAwYTM0NCwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAzZTlkZiwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTM1OCwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwMiwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSwgMHg3OTk5YWEwZSB9LAogfTsKIApAQCAtNDU2OCw3ICs0NTUxLDcgQEAKICAgICB7IDB4MDAwMDgxMTAsIDB4MDAwMDAxNjggfSwKICAgICB7IDB4MDAwMDgxMTgsIDB4MDAwMTAwYWEgfSwKICAgICB7IDB4MDAwMDgxMWMsIDB4MDAwMDMyMTAgfSwKLSAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MDAgfSwKKyAgICB7IDB4MDAwMDgxMjAsIDB4MDhmMDQ4MTAgfSwKICAgICB7IDB4MDAwMDgxMjQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxMjgsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMDgxMmMsIDB4MDAwMDAwMDAgfSwKQEAgLTQ1ODQsNyArNDU2Nyw3IEBACiAgICAgeyAweDAwMDA4MTc4LCAweDAwMDAwMTAwIH0sCiAgICAgeyAweDAwMDA4MTdjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MWMwLCAweDAwMDAwMDAwIH0sCi0gICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjEwIH0sCisgICAgeyAweDAwMDA4MWQwLCAweDAwMDAzMjBhIH0sCiAgICAgeyAweDAwMDA4MWVjLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MWYwLCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDA4MWY0LCAweDAwMDAwMDAwIH0sCkBAIC00Njc5LDcgKzQ2NjIsNyBAQAogICAgIHsgMHgwMDAwOTlhMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwOTlhNCwgMHgwMDAwMDAwMSB9LAogICAgIHsgMHgwMDAwOTlhOCwgMHgyMDFmZmYwMCB9LAotICAgIHsgMHgwMDAwOTlhYywgMHgyZGVmMTAwMCB9LAorICAgIHsgMHgwMDAwOTlhYywgMHgyZGVmMDQwMCB9LAogICAgIHsgMHgwMDAwOTliMCwgMHgwMzA1MTAwMCB9LAogICAgIHsgMHgwMDAwOTliNCwgMHgwMDAwMDgyMCB9LAogICAgIHsgMHgwMDAwOTlkYywgMHgwMDAwMDAwMCB9LApAQCAtNDY4OCw3ICs0NjcxLDcgQEAKICAgICB7IDB4MDAwMDk5ZTgsIDB4M2M0NjY0NzggfSwKICAgICB7IDB4MDAwMDk5ZWMsIDB4MGNjODBjYWEgfSwKICAgICB7IDB4MDAwMDk5ZjAsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTY3ODggfSwKKyAgICB7IDB4MDAwMGEyMDgsIDB4ODAzZTY4YzggfSwKICAgICB7IDB4MDAwMGEyMTAsIDB4NDA4MGEzMzMgfSwKICAgICB7IDB4MDAwMGEyMTQsIDB4MDAyMDZjMTAgfSwKICAgICB7IDB4MDAwMGEyMTgsIDB4MDA5YzQwNjAgfSwKQEAgLTQ3MDgsOCArNDY5MSw2IEBACiAgICAgeyAweDAwMDBhMjY4LCAweDAwMDAwMDAwIH0sCiAgICAgeyAweDAwMDBhMjZjLCAweDBlYmFlOWU2IH0sCiAgICAgeyAweDAwMDBkMjcwLCAweDBkODIwODIwIH0sCi0gICAgeyAweDAwMDBhMjc4LCAweDMxOGM2MzE4IH0sCi0gICAgeyAweDAwMDBhMjdjLCAweDA1MGMwMzE4IH0sCiAgICAgeyAweDAwMDBkMzVjLCAweDA3ZmZmZmVmIH0sCiAgICAgeyAweDAwMDBkMzYwLCAweDBmZmZmZmU3IH0sCiAgICAgeyAweDAwMDBkMzY0LCAweDE3ZmZmZmU1IH0sCkBAIC00NzI0LDggKzQ3MDUsNiBAQAogICAgIHsgMHgwMDAwYTM4OCwgMHgwYzAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTM4YywgMHgyMDIwMjAyMCB9LAogICAgIHsgMHgwMDAwYTM5MCwgMHgyMDIwMjAyMCB9LAotICAgIHsgMHgwMDAwYTM5NCwgMHgzMThjNjMxOCB9LAotICAgIHsgMHgwMDAwYTM5OCwgMHgwMDAwMDMxOCB9LAogICAgIHsgMHgwMDAwYTM5YywgMHgwMDAwMDAwMSB9LAogICAgIHsgMHgwMDAwYTNhMCwgMHgwMDAwMDAwMCB9LAogICAgIHsgMHgwMDAwYTNhNCwgMHgwMDAwMDAwMCB9LApAQCAtNDc0MCw4ICs0NzE5LDYgQEAKICAgICB7IDB4MDAwMGEzY2MsIDB4MjAyMDIwMjAgfSwKICAgICB7IDB4MDAwMGEzZDAsIDB4MjAyMDIwMjAgfSwKICAgICB7IDB4MDAwMGEzZDQsIDB4MjAyMDIwMjAgfSwKLSAgICB7IDB4MDAwMGEzZGMsIDB4MzE4YzYzMTggfSwKLSAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAzMTggfSwKICAgICB7IDB4MDAwMGEzZTQsIDB4MDAwMDAwMDAgfSwKICAgICB7IDB4MDAwMGEzZTgsIDB4MThjNDM0MzMgfSwKICAgICB7IDB4MDAwMGEzZWMsIDB4MDBmNzAwODEgfSwKQEAgLTQ3NTIsMTMgKzQ3MjksMTEgQEAKICAgICB7IDB4MDAwMDc4MTAsIDB4NzFjMGQzODggfSwKICAgICB7IDB4MDAwMDc4MTQsIDB4OTI0OTM0YTggfSwKICAgICB7IDB4MDAwMDc4MWMsIDB4MDAwMDAwMDAgfSwKLSAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDQgfSwKICAgICB7IDB4MDAwMDc4MjQsIDB4MDBkODZmZmYgfSwKICAgICB7IDB4MDAwMDc4MjgsIDB4MjZkMjQ5MWIgfSwKICAgICB7IDB4MDAwMDc4MmMsIDB4NmUzNmQ5N2IgfSwKICAgICB7IDB4MDAwMDc4MzAsIDB4ZWRiNmQ5NmUgfSwKICAgICB7IDB4MDAwMDc4MzQsIDB4NzE0MDAwODcgfSwKLSAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDEgfSwKICAgICB7IDB4MDAwMDc4M2MsIDB4MDAwMWZmZmUgfSwKICAgICB7IDB4MDAwMDc4NDAsIDB4ZmZlYjFhMjAgfSwKICAgICB7IDB4MDAwMDc4NDQsIDB4MDAwYzBkYjYgfSwKQEAgLTQ3NzEsMTAgKzQ3NDYsODEgQEAKICAgICB7IDB4MDAwMDc4NjAsIDB4MjEwODQyMTAgfSwKICAgICB7IDB4MDAwMDc4NjQsIDB4ZjdkN2ZmZGUgfSwKICAgICB7IDB4MDAwMDc4NjgsIDB4YzIwMzQwODAgfSwKLSAgICB7IDB4MDAwMDc4NmMsIDB4NDg2MDllYjQgfSwKICAgICB7IDB4MDAwMDc4NzAsIDB4MTAxNDJjMDAgfSwKIH07CiAKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfaGlnaF9wb3dlcl90eF9nYWluXzkyODVfMV8yW11bNl0gPSB7CisgICAgLyogQWRkcmVzcyAgICAgIDVHLUhUMjAgICAgIDVHLUhUNDAgICAgIDJHLUhUNDAgICAgIDJHLUhUMjAgICAgIFR1cmJvICAgKi8KKyAgICB7IDB4MDAwMGEzMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDUyMDAsIDB4MDAwMDUyMDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDcyMDEsIDB4MDAwMDcyMDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGIyNDAsIDB4MDAwMGIyNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGQyNDEsIDB4MDAwMGQyNDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMGY0NDAsIDB4MDAwMGY0NDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTQ2NDAsIDB4MDAwMTQ2NDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMWMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTg2ODAsIDB4MDAwMTg2ODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMTk4NDEsIDB4MDAwMTk4NDEsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWNhNDAsIDB4MDAwMWNhNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMjgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMWZhODAsIDB4MDAwMWZhODAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMmMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMjNhYzAsIDB4MDAwMjNhYzAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMmFiNDAsIDB4MDAwMmFiNDAsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMzNkODIsIDB4MDAwMzNkODIsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzMzgsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMzg5MWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzM2MsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwM2E5NWUsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNDgsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNGMsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTAsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMGEzNTQsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwM2U5ZGYsIDB4MDAwMDAwMDAgfSwKKyAgICB7IDB4MDAwMDc4MzgsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMsIDB4ZmFjNjg4MDMgfSwKKyAgICB7IDB4MDAwMDc4NmMsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUsIDB4MDg2MDllYmUgfSwKKyAgICB7IDB4MDAwMDc4MjAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAsIDB4MDAwMDBjMDAgfSwKKyAgICB7IDB4MDAwMGEyNzQsIDB4MGEyMmE2NTIsIDB4MGEyMmE2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMWE2NTIsIDB4MGEyMmE2NTIgfSwKKyAgICB7IDB4MDAwMGEyNzgsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEyN2MsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UsIDB4MDUwNzAxY2UgfSwKKyAgICB7IDB4MDAwMGEzOTQsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzOTgsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UgfSwKKyAgICB7IDB4MDAwMGEzZGMsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UsIDB4MWNlNzM5Y2UgfSwKKyAgICB7IDB4MDAwMGEzZTAsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UsIDB4MDAwMDAxY2UgfSwKK307CisKK3N0YXRpYyBjb25zdCB1X2ludDMyX3QgYXI5Mjg1TW9kZXNfb3JpZ2luYWxfdHhfZ2Fpbl85Mjg1XzFfMltdWzZdID0geworICAgIC8qIEFkZHJlc3MgICAgICA1Ry1IVDIwICAgICA1Ry1IVDQwICAgICAyRy1IVDQwICAgICAyRy1IVDIwICAgICBUdXJibyAgICovCisgICAgeyAweDAwMDBhMzAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDA5MjAwLCAweDAwMDA5MjAwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDEwMjA4LCAweDAwMDEwMjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDE5NjA4LCAweDAwMDE5NjA4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzEwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDIyNjE4LCAweDAwMDIyNjE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDJhNmM5LCAweDAwMDJhNmM5LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDMxNzEwLCAweDAwMDMxNzEwLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzFjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM1NzE4LCAweDAwMDM1NzE4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzIwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDM4NzU4LCAweDAwMDM4NzU4LCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDNjNzVhLCAweDAwMDNjNzVhLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzI4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQwNzVjLCAweDAwMDQwNzVjLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzJjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ0NzVlLCAweDAwMDQ0NzVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzMwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ2NzlmLCAweDAwMDQ2NzlmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDQ4N2RmLCAweDAwMDQ4N2RmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzM4LCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDM4OTFlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzNjLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDNhOTVlLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzQ4LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzRjLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzUwLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDBhMzU0LCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDNlOWRmLCAweDAwMDAwMDAwIH0sCisgICAgeyAweDAwMDA3ODM4LCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxLCAweGZhYzY4ODAxIH0sCisgICAgeyAweDAwMDA3ODZjLCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0LCAweDQ4NjA5ZWI0IH0sCisgICAgeyAweDAwMDA3ODIwLCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0LCAweDAwMDAwYzA0IH0sCisgICAgeyAweDAwMDBhMjc0LCAweDBhMjFjNjUyLCAweDBhMjFjNjUyLCAweDBhMjFhNjUyLCAweDBhMjFhNjUyLCAweDBhMjJhNjUyIH0sCisgICAgeyAweDAwMDBhMjc4LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMjdjLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljLCAweDA1MGUwMzljIH0sCisgICAgeyAweDAwMDBhMzk0LCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhMzk4LCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCisgICAgeyAweDAwMDBhM2RjLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljLCAweDM5Y2U3MzljIH0sCisgICAgeyAweDAwMDBhM2UwLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljLCAweDAwMDAwMzljIH0sCit9OworCiBzdGF0aWMgY29uc3QgdV9pbnQzMl90IGFyOTI4NVBjaWVQaHlfY2xrcmVxX2Fsd2F5c19vbl9MMV85Mjg1XzFfMltdWzJdID0gewogICAgIHsweDAwMDA0MDQwLCAgMHg5MjQ4ZmQwMCB9LAogICAgIHsweDAwMDA0MDQwLCAgMHgyNDkyNDkyNCB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYwppbmRleCBhZjMyZDA5Li5lMGE2ZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE0LDQ1ICsxNCw0MCBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImh3LmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAicGh5LmgiCisjaW5jbHVkZSAiYXRoOWsuaCIKIAotc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X3R4cV9pbnRlcnJ1cHRzKHN0cnVjdCBhdGhfaGFsICphaCwKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF90eHFfaW50ZXJydXB0cyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19JTlRFUlJVUFQsCiAJCSJ0eCBvayAweCV4IGVyciAweCV4IGRlc2MgMHgleCBlb2wgMHgleCB1cm4gMHgleFxuIiwKLQkJYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaywgYWhwLT5haF90eEVyckludGVycnVwdE1hc2ssCi0JCWFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzaywgYWhwLT5haF90eEVvbEludGVycnVwdE1hc2ssCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrKTsKKwkJYWgtPnR4b2tfaW50ZXJydXB0X21hc2ssIGFoLT50eGVycl9pbnRlcnJ1cHRfbWFzaywKKwkJYWgtPnR4ZGVzY19pbnRlcnJ1cHRfbWFzaywgYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrLAorCQlhaC0+dHh1cm5faW50ZXJydXB0X21hc2spOwogCiAJUkVHX1dSSVRFKGFoLCBBUl9JTVJfUzAsCi0JCSAgU00oYWhwLT5haF90eE9rSW50ZXJydXB0TWFzaywgQVJfSU1SX1MwX1FDVV9UWE9LKQotCQkgIHwgU00oYWhwLT5haF90eERlc2NJbnRlcnJ1cHRNYXNrLCBBUl9JTVJfUzBfUUNVX1RYREVTQykpOworCQkgIFNNKGFoLT50eG9rX2ludGVycnVwdF9tYXNrLCBBUl9JTVJfUzBfUUNVX1RYT0spCisJCSAgfCBTTShhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrLCBBUl9JTVJfUzBfUUNVX1RYREVTQykpOwogCVJFR19XUklURShhaCwgQVJfSU1SX1MxLAotCQkgIFNNKGFocC0+YWhfdHhFcnJJbnRlcnJ1cHRNYXNrLCBBUl9JTVJfUzFfUUNVX1RYRVJSKQotCQkgIHwgU00oYWhwLT5haF90eEVvbEludGVycnVwdE1hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFT0wpKTsKKwkJICBTTShhaC0+dHhlcnJfaW50ZXJydXB0X21hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFUlIpCisJCSAgfCBTTShhaC0+dHhlb2xfaW50ZXJydXB0X21hc2ssIEFSX0lNUl9TMV9RQ1VfVFhFT0wpKTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9JTVJfUzIsCi0JCSAgICAgIEFSX0lNUl9TMl9RQ1VfVFhVUk4sIGFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrKTsKKwkJICAgICAgQVJfSU1SX1MyX1FDVV9UWFVSTiwgYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrKTsKIH0KIAotdTMyIGF0aDlrX2h3X2dldHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpCit1MzIgYXRoOWtfaHdfZ2V0dHhidWYoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBxKQogewogCXJldHVybiBSRUdfUkVBRChhaCwgQVJfUVRYRFAocSkpOwogfQogCi1ib29sIGF0aDlrX2h3X3B1dHR4YnVmKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEsIHUzMiB0eGRwKQorYm9vbCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKQogewogCVJFR19XUklURShhaCwgQVJfUVRYRFAocSksIHR4ZHApOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKQorYm9vbCBhdGg5a19od190eHN0YXJ0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgInF1ZXVlICV1XG4iLCBxKTsKIApAQCAtNjEsNyArNTYsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi11MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIHEpCit1MzIgYXRoOWtfaHdfbnVtdHhwZW5kaW5nKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKIAl1MzIgbnBlbmQ7CiAKQEAgLTc1LDE2ICs3MCwxNSBAQAogCXJldHVybiBucGVuZDsKIH0KIAotYm9vbCBhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChzdHJ1Y3QgYXRoX2hhbCAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCkKK2Jvb2wgYXRoOWtfaHdfdXBkYXRldHh0cmlnbGV2ZWwoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgYkluY1RyaWdMZXZlbCkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiB0eGNmZywgY3VyTGV2ZWwsIG5ld0xldmVsOwogCWVudW0gYXRoOWtfaW50IG9tYXNrOwogCi0JaWYgKGFoLT5haF90eFRyaWdMZXZlbCA+PSBNQVhfVFhfRklGT19USFJFU0hPTEQpCisJaWYgKGFoLT50eF90cmlnX2xldmVsID49IE1BWF9UWF9GSUZPX1RIUkVTSE9MRCkKIAkJcmV0dXJuIGZhbHNlOwogCi0Jb21hc2sgPSBhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWhwLT5haF9tYXNrUmVnICYgfkFUSDlLX0lOVF9HTE9CQUwpOworCW9tYXNrID0gYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIGFoLT5tYXNrX3JlZyAmIH5BVEg5S19JTlRfR0xPQkFMKTsKIAogCXR4Y2ZnID0gUkVHX1JFQUQoYWgsIEFSX1RYQ0ZHKTsKIAljdXJMZXZlbCA9IE1TKHR4Y2ZnLCBBUl9GVFJJRyk7CkBAIC0xMDAsMjEgKzk0LDM4IEBACiAKIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgb21hc2spOwogCi0JYWgtPmFoX3R4VHJpZ0xldmVsID0gbmV3TGV2ZWw7CisJYWgtPnR4X3RyaWdfbGV2ZWwgPSBuZXdMZXZlbDsKIAogCXJldHVybiBuZXdMZXZlbCAhPSBjdXJMZXZlbDsKIH0KIAotYm9vbCBhdGg5a19od19zdG9wdHhkbWEoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSkKK2Jvb2wgYXRoOWtfaHdfc3RvcHR4ZG1hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKKyNkZWZpbmUgQVRIOUtfVFhfU1RPUF9ETUFfVElNRU9VVAk0MDAwICAgIC8qIHVzZWMgKi8KKyNkZWZpbmUgQVRIOUtfVElNRV9RVUFOVFVNCQkxMDAgICAgIC8qIHVzZWMgKi8KKworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CisJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCXUzMiB0c2ZMb3csIGosIHdhaXQ7CisJdTMyIHdhaXRfdGltZSA9IEFUSDlLX1RYX1NUT1BfRE1BX1RJTUVPVVQgLyBBVEg5S19USU1FX1FVQU5UVU07CisKKwlpZiAocSA+PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbnZhbGlkIHF1ZXVlIG51bSAldVxuIiwgcSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlxaSA9ICZhaC0+dHhxW3FdOworCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKKwkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZVxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1FfVFhELCAxIDw8IHEpOwogCi0JZm9yICh3YWl0ID0gMTAwMDsgd2FpdCAhPSAwOyB3YWl0LS0pIHsKKwlmb3IgKHdhaXQgPSB3YWl0X3RpbWU7IHdhaXQgIT0gMDsgd2FpdC0tKSB7CiAJCWlmIChhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHEpID09IDApCiAJCQlicmVhazsKLQkJdWRlbGF5KDEwMCk7CisJCXVkZWxheShBVEg5S19USU1FX1FVQU5UVU0pOwogCX0KIAogCWlmIChhdGg5a19od19udW10eHBlbmRpbmcoYWgsIHEpKSB7CkBAIC0xNDQsOCArMTU1LDcgQEAKIAkJdWRlbGF5KDIwMCk7CiAJCVJFR19DTFJfQklUKGFoLCBBUl9USU1FUl9NT0RFLCBBUl9RVUlFVF9USU1FUl9FTik7CiAKLQkJd2FpdCA9IDEwMDA7Ci0KKwkJd2FpdCA9IHdhaXRfdGltZTsKIAkJd2hpbGUgKGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgcSkpIHsKIAkJCWlmICgoLS13YWl0KSA9PSAwKSB7CiAJCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfWE1JVCwKQEAgLTE1MywxOCArMTYzLDIwIEBACiAJCQkJCSJtc2VjIGFmdGVyIGtpbGxpbmcgbGFzdCBmcmFtZVxuIik7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQl1ZGVsYXkoMTAwKTsKKwkJCXVkZWxheShBVEg5S19USU1FX1FVQU5UVU0pOwogCQl9CiAKIAkJUkVHX0NMUl9CSVQoYWgsIEFSX0RJQUdfU1csIEFSX0RJQUdfRk9SQ0VfQ0hfSURMRV9ISUdIKTsKIAl9CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1FfVFhELCAwKTsKLQogCXJldHVybiB3YWl0ICE9IDA7CisKKyN1bmRlZiBBVEg5S19UWF9TVE9QX0RNQV9USU1FT1VUCisjdW5kZWYgQVRIOUtfVElNRV9RVUFOVFVNCiB9CiAKLWJvb2wgYXRoOWtfaHdfZmlsbHR4ZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCitib29sIGF0aDlrX2h3X2ZpbGx0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkgdTMyIHNlZ0xlbiwgYm9vbCBmaXJzdFNlZywKIAkJCSBib29sIGxhc3RTZWcsIGNvbnN0IHN0cnVjdCBhdGhfZGVzYyAqZHMwKQogewpAQCAtMTkyLDcgKzIwNCw3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQordm9pZCBhdGg5a19od19jbGVhcnR4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwogCkBAIC0yMDMsNyArMjE1LDcgQEAKIAlhZHMtPmRzX3R4c3RhdHVzOCA9IGFkcy0+ZHNfdHhzdGF0dXM5ID0gMDsKIH0KIAotaW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQoraW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKIApAQCAtMjczLDE5ICsyODUsMTggQEAKIAlkcy0+ZHNfdHhzdGF0LnRzX3Nob3J0cmV0cnkgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfUlRTRmFpbENudCk7CiAJZHMtPmRzX3R4c3RhdC50c19sb25ncmV0cnkgPSBNUyhhZHMtPmRzX3R4c3RhdHVzMSwgQVJfRGF0YUZhaWxDbnQpOwogCWRzLT5kc190eHN0YXQudHNfdmlydGNvbCA9IE1TKGFkcy0+ZHNfdHhzdGF0dXMxLCBBUl9WaXJ0UmV0cnlDbnQpOwotCWRzLT5kc190eHN0YXQudHNfYW50ZW5uYSA9IDE7CisJZHMtPmRzX3R4c3RhdC50c19hbnRlbm5hID0gMDsKIAogCXJldHVybiAwOwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl90eGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAordm9pZCBhdGg5a19od19zZXQxMW5fdHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJICAgIHUzMiBwa3RMZW4sIGVudW0gYXRoOWtfcGt0X3R5cGUgdHlwZSwgdTMyIHR4UG93ZXIsCiAJCQkgICAgdTMyIGtleUl4LCBlbnVtIGF0aDlrX2tleV90eXBlIGtleVR5cGUsIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAKLQl0eFBvd2VyICs9IGFocC0+YWhfdHhQb3dlckluZGV4T2Zmc2V0OworCXR4UG93ZXIgKz0gYWgtPnR4cG93ZXJfaW5kZXhvZmZzZXQ7CiAJaWYgKHR4UG93ZXIgPiA2MykKIAkJdHhQb3dlciA9IDYzOwogCkBAIC0zMTQsNyArMzI1LDcgQEAKIAl9CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICBzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcywKIAkJCQkgIHUzMiBkdXJVcGRhdGVFbiwgdTMyIHJ0c2N0c1JhdGUsCiAJCQkJICB1MzIgcnRzY3RzRHVyYXRpb24sCkBAIC0zMjUsOSArMzM2LDYgQEAKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmxhc3RfYWRzID0gQVI1NDE2REVTQyhsYXN0ZHMpOwogCXUzMiBkc19jdGwwOwogCi0JKHZvaWQpIG5zZXJpZXM7Ci0JKHZvaWQpIHJ0c2N0c0R1cmF0aW9uOwotCiAJaWYgKGZsYWdzICYgKEFUSDlLX1RYREVTQ19SVFNFTkEgfCBBVEg5S19UWERFU0NfQ1RTRU5BKSkgewogCQlkc19jdGwwID0gYWRzLT5kc19jdGwwOwogCkBAIC0zNzIsNyArMzgwLDcgQEAKIAlsYXN0X2Fkcy0+ZHNfY3RsMyA9IGFkcy0+ZHNfY3RsMzsKIH0KIAotdm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9maXJzdChzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJCXUzMiBhZ2dyTGVuKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC0zODIsNyArMzkwLDcgQEAKIAlhZHMtPmRzX2N0bDYgfD0gU00oYWdnckxlbiwgQVJfQWdnckxlbik7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAogCQkJCSB1MzIgbnVtRGVsaW1zKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC0zOTYsNyArNDA0LDcgQEAKIAlhZHMtPmRzX2N0bDYgPSBjdGw2OwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2xhc3Qoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQordm9pZCBhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CiAKQEAgLTQwNSwxNCArNDEzLDE0IEBACiAJYWRzLT5kc19jdGw2ICY9IH5BUl9QYWREZWxpbTsKIH0KIAotdm9pZCBhdGg5a19od19jbHIxMW5fYWdncihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpCit2b2lkIGF0aDlrX2h3X2NscjExbl9hZ2dyKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CiAKIAlhZHMtPmRzX2N0bDEgJj0gKH5BUl9Jc0FnZ3IgJiB+QVJfTW9yZUFnZ3IpOwogfQogCi12b2lkIGF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHN0cnVjdCBhdGhfaGFsICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb24oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICAgdTMyIGJ1cnN0RHVyYXRpb24pCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjICphZHMgPSBBUjU0MTZERVNDKGRzKTsKQEAgLTQyMSw3ICs0MjksNyBAQAogCWFkcy0+ZHNfY3RsMiB8PSBTTShidXJzdER1cmF0aW9uLCBBUl9CdXJzdER1cik7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc2V0MTFuX3ZpcnR1YWxtb3JlZnJhZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCit2b2lkIGF0aDlrX2h3X3NldDExbl92aXJ0dWFsbW9yZWZyYWcoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCiAJCQkJICAgICB1MzIgdm1mKQogewogCXN0cnVjdCBhcjU0MTZfZGVzYyAqYWRzID0gQVI1NDE2REVTQyhkcyk7CkBAIC00MzIsMjAgKzQ0MCwxNyBAQAogCQlhZHMtPmRzX2N0bDAgJj0gfkFSX1ZpcnRNb3JlRnJhZzsKIH0KIAotdm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyICp0eHFzKQordm9pZCBhdGg5a19od19nZXR0eGludHJ0eHFzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgKnR4cXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCSp0eHFzICY9IGFocC0+YWhfaW50clR4cXM7Ci0JYWhwLT5haF9pbnRyVHhxcyAmPSB+KCp0eHFzKTsKKwkqdHhxcyAmPSBhaC0+aW50cl90eHFzOworCWFoLT5pbnRyX3R4cXMgJj0gfigqdHhxcyk7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAorYm9vbCBhdGg5a19od19zZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7CiAJdTMyIGN3OwotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0Jc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+YWhfY2FwczsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOwogCXN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaTsKIAogCWlmIChxID49IHBDYXAtPnRvdGFsX3F1ZXVlcykgewpAQCAtNDUzLDcgKzQ1OCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZVxuIik7CiAJCXJldHVybiBmYWxzZTsKQEAgLTUwOSwxMSArNTE0LDEwIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgYXRoOWtfaHdfZ2V0X3R4cV9wcm9wcyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCBxLAorYm9vbCBhdGg5a19od19nZXRfdHhxX3Byb3BzKHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQgcSwKIAkJCSAgICBzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyAqcWluZm8pCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCiAJaWYgKHEgPj0gcENhcC0+dG90YWxfcXVldWVzKSB7CkBAIC01MjEsNyArNTI1LDcgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXFpID0gJmFocC0+YWhfdHhxW3FdOworCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgImluYWN0aXZlIHF1ZXVlXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNTQ1LDEyICs1NDksMTEgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotaW50IGF0aDlrX2h3X3NldHVwdHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIGVudW0gYXRoOWtfdHhfcXVldWUgdHlwZSwKK2ludCBhdGg5a19od19zZXR1cHR4cXVldWUoc3RydWN0IGF0aF9odyAqYWgsIGVudW0gYXRoOWtfdHhfcXVldWUgdHlwZSwKIAkJCSAgY29uc3Qgc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpbmZvKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAlpbnQgcTsKIAogCXN3aXRjaCAodHlwZSkgewpAQCAtNTY4LDcgKzU3MSw3IEBACiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfVFhfUVVFVUVfREFUQToKIAkJZm9yIChxID0gMDsgcSA8IHBDYXAtPnRvdGFsX3F1ZXVlczsgcSsrKQotCQkJaWYgKGFocC0+YWhfdHhxW3FdLnRxaV90eXBlID09CisJCQlpZiAoYWgtPnR4cVtxXS50cWlfdHlwZSA9PQogCQkJICAgIEFUSDlLX1RYX1FVRVVFX0lOQUNUSVZFKQogCQkJCWJyZWFrOwogCQlpZiAocSA9PSBwQ2FwLT50b3RhbF9xdWV1ZXMpIHsKQEAgLTU4NCw3ICs1ODcsNyBAQAogCiAJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJxdWV1ZSAldVxuIiwgcSk7CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgIT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsCiAJCQkidHggcXVldWUgJXUgYWxyZWFkeSBhY3RpdmVcbiIsIHEpOwpAQCAtNjExLDE3ICs2MTQsMTYgQEAKIAlyZXR1cm4gcTsKIH0KIAotYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBxKQorYm9vbCBhdGg5a19od19yZWxlYXNldHhxdWV1ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5haF9jYXBzOworCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmNhcHM7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCiAJaWYgKHEgPj0gcENhcC0+dG90YWxfcXVldWVzKSB7CiAJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1FVRVVFLCAiaW52YWxpZCBxdWV1ZSBudW0gJXVcbiIsIHEpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCXFpID0gJmFocC0+YWhfdHhxW3FdOworCXFpID0gJmFoLT50eHFbcV07CiAJaWYgKHFpLT50cWlfdHlwZSA9PSBBVEg5S19UWF9RVUVVRV9JTkFDVElWRSkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgImluYWN0aXZlIHF1ZXVlICV1XG4iLCBxKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtNjMwLDIxICs2MzIsMjAgQEAKIAlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwgInJlbGVhc2UgcXVldWUgJXVcbiIsIHEpOwogCiAJcWktPnRxaV90eXBlID0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkU7Ci0JYWhwLT5haF90eE9rSW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7Ci0JYWhwLT5haF90eEVyckludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOwotCWFocC0+YWhfdHhEZXNjSW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7Ci0JYWhwLT5haF90eEVvbEludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOwotCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhva19pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CisJYWgtPnR4ZXJyX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKKwlhaC0+dHhlb2xfaW50ZXJydXB0X21hc2sgJj0gfigxIDw8IHEpOworCWFoLT50eHVybl9pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJYXRoOWtfaHdfc2V0X3R4cV9pbnRlcnJ1cHRzKGFoLCBxaSk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBhdGg5a19od19yZXNldHR4cXVldWUoc3RydWN0IGF0aF9oYWwgKmFoLCB1MzIgcSkKK2Jvb2wgYXRoOWtfaHdfcmVzZXR0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSkKIHsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4gPSBhaC0+YWhfY3VyY2hhbjsKKwlzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzICpwQ2FwID0gJmFoLT5jYXBzOworCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuID0gYWgtPmN1cmNoYW47CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gKnFpOwogCXUzMiBjd01pbiwgY2hhbkN3TWluLCB2YWx1ZTsKIApAQCAtNjUzLDcgKzY1NCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlxaSA9ICZhaHAtPmFoX3R4cVtxXTsKKwlxaSA9ICZhaC0+dHhxW3FdOwogCWlmIChxaS0+dHFpX3R5cGUgPT0gQVRIOUtfVFhfUVVFVUVfSU5BQ1RJVkUpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUVVFVUUsICJpbmFjdGl2ZSBxdWV1ZSAldVxuIiwgcSk7CiAJCXJldHVybiB0cnVlOwpAQCAtNzQxLDkgKzc0Miw5IEBACiAJCQkgIHwgQVJfUV9NSVNDX0NCUl9JTkNSX0RJUzEKIAkJCSAgfCBBUl9RX01JU0NfQ0JSX0lOQ1JfRElTMCk7CiAJCXZhbHVlID0gKHFpLT50cWlfcmVhZHlUaW1lIC0KLQkJCSAoYWgtPmFoX2NvbmZpZy5zd19iZWFjb25fcmVzcG9uc2VfdGltZSAtCi0JCQkgIGFoLT5haF9jb25maWcuZG1hX2JlYWNvbl9yZXNwb25zZV90aW1lKSAtCi0JCQkgYWgtPmFoX2NvbmZpZy5hZGRpdGlvbmFsX3N3YmFfYmFja29mZikgKiAxMDI0OworCQkJIChhaC0+Y29uZmlnLnN3X2JlYWNvbl9yZXNwb25zZV90aW1lIC0KKwkJCSAgYWgtPmNvbmZpZy5kbWFfYmVhY29uX3Jlc3BvbnNlX3RpbWUpIC0KKwkJCSBhaC0+Y29uZmlnLmFkZGl0aW9uYWxfc3diYV9iYWNrb2ZmKSAqIDEwMjQ7CiAJCVJFR19XUklURShhaCwgQVJfUVJEWVRJTUVDRkcocSksCiAJCQkgIHZhbHVlIHwgQVJfUV9SRFlUSU1FQ0ZHX0VOKTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9ETUlTQyhxKSwgUkVHX1JFQUQoYWgsIEFSX0RNSVNDKHEpKQpAQCAtNzcxLDMxICs3NzIsMzEgQEAKIAl9CiAKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWE9LSU5UX0VOQUJMRSkKLQkJYWhwLT5haF90eE9rSW50ZXJydXB0TWFzayB8PSAxIDw8IHE7CisJCWFoLT50eG9rX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhPa0ludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOworCQlhaC0+dHhva19pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJaWYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfVFhFUlJJTlRfRU5BQkxFKQotCQlhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzayB8PSAxIDw8IHE7CisJCWFoLT50eGVycl9pbnRlcnJ1cHRfbWFzayB8PSAxIDw8IHE7CiAJZWxzZQotCQlhaHAtPmFoX3R4RXJySW50ZXJydXB0TWFzayAmPSB+KDEgPDwgcSk7CisJCWFoLT50eGVycl9pbnRlcnJ1cHRfbWFzayAmPSB+KDEgPDwgcSk7CiAJaWYgKHFpLT50cWlfcWZsYWdzICYgVFhRX0ZMQUdfVFhERVNDSU5UX0VOQUJMRSkKLQkJYWhwLT5haF90eERlc2NJbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4ZGVzY19pbnRlcnJ1cHRfbWFzayB8PSAxIDw8IHE7CiAJZWxzZQotCQlhaHAtPmFoX3R4RGVzY0ludGVycnVwdE1hc2sgJj0gfigxIDw8IHEpOworCQlhaC0+dHhkZXNjX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWEVPTElOVF9FTkFCTEUpCi0JCWFocC0+YWhfdHhFb2xJbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhFb2xJbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwkJYWgtPnR4ZW9sX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlpZiAocWktPnRxaV9xZmxhZ3MgJiBUWFFfRkxBR19UWFVSTklOVF9FTkFCTEUpCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrIHw9IDEgPDwgcTsKKwkJYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrIHw9IDEgPDwgcTsKIAllbHNlCi0JCWFocC0+YWhfdHhVcm5JbnRlcnJ1cHRNYXNrICY9IH4oMSA8PCBxKTsKKwkJYWgtPnR4dXJuX2ludGVycnVwdF9tYXNrICY9IH4oMSA8PCBxKTsKIAlhdGg5a19od19zZXRfdHhxX2ludGVycnVwdHMoYWgsIHFpKTsKIAogCXJldHVybiB0cnVlOwogfQogCi1pbnQgYXRoOWtfaHdfcnhwcm9jZGVzYyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCitpbnQgYXRoOWtfaHdfcnhwcm9jZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCXUzMiBwYSwgc3RydWN0IGF0aF9kZXNjICpuZHMsIHU2NCB0c2YpCiB7CiAJc3RydWN0IGFyNTQxNl9kZXNjIGFkczsKQEAgLTg2MCwxMSArODYxLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLWJvb2wgYXRoOWtfaHdfc2V0dXByeGRlc2Moc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorYm9vbCBhdGg5a19od19zZXR1cHJ4ZGVzYyhzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcywKIAkJCSAgdTMyIHNpemUsIHUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgYXI1NDE2X2Rlc2MgKmFkcyA9IEFSNTQxNkRFU0MoZHMpOwotCXN0cnVjdCBhdGg5a19od19jYXBhYmlsaXRpZXMgKnBDYXAgPSAmYWgtPmFoX2NhcHM7CisJc3RydWN0IGF0aDlrX2h3X2NhcGFiaWxpdGllcyAqcENhcCA9ICZhaC0+Y2FwczsKIAogCWFkcy0+ZHNfY3RsMSA9IHNpemUgJiBBUl9CdWZMZW47CiAJaWYgKGZsYWdzICYgQVRIOUtfUlhERVNDX0lOVFJFUSkKQEAgLTg3Nyw3ICs4NzgsNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1ib29sIGF0aDlrX2h3X3NldHJ4YWJvcnQoc3RydWN0IGF0aF9oYWwgKmFoLCBib29sIHNldCkKK2Jvb2wgYXRoOWtfaHdfc2V0cnhhYm9ydChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBzZXQpCiB7CiAJdTMyIHJlZzsKIApAQCAtODg1LDcgKzg4Niw4IEBACiAJCVJFR19TRVRfQklUKGFoLCBBUl9ESUFHX1NXLAogCQkJICAgIChBUl9ESUFHX1JYX0RJUyB8IEFSX0RJQUdfUlhfQUJPUlQpKTsKIAotCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX09CU19CVVNfMSwgQVJfT0JTX0JVU18xX1JYX1NUQVRFLCAwKSkgeworCQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX09CU19CVVNfMSwgQVJfT0JTX0JVU18xX1JYX1NUQVRFLAorCQkJCSAgIDAsIEFIX1dBSVRfVElNRU9VVCkpIHsKIAkJCVJFR19DTFJfQklUKGFoLCBBUl9ESUFHX1NXLAogCQkJCSAgICAoQVJfRElBR19SWF9ESVMgfAogCQkJCSAgICAgQVJfRElBR19SWF9BQk9SVCkpOwpAQCAtOTA0LDE3ICs5MDYsMTcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiByeGRwKQordm9pZCBhdGg5a19od19wdXRyeGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHJ4ZHApCiB7CiAJUkVHX1dSSVRFKGFoLCBBUl9SWERQLCByeGRwKTsKIH0KIAotdm9pZCBhdGg5a19od19yeGVuYShzdHJ1Y3QgYXRoX2hhbCAqYWgpCit2b2lkIGF0aDlrX2h3X3J4ZW5hKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaGFsICphaCkKK3ZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWF0aDlrX2VuYWJsZV9taWJfY291bnRlcnMoYWgpOwogCkBAIC05MjMsMjQgKzkyNSw0MSBAQAogCVJFR19DTFJfQklUKGFoLCBBUl9ESUFHX1NXLCAoQVJfRElBR19SWF9ESVMgfCBBUl9ESUFHX1JYX0FCT1JUKSk7CiB9CiAKLXZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9oYWwgKmFoKQordm9pZCBhdGg5a19od19zdG9wcGN1cmVjdihzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlSRUdfU0VUX0JJVChhaCwgQVJfRElBR19TVywgQVJfRElBR19SWF9ESVMpOwogCiAJYXRoOWtfaHdfZGlzYWJsZV9taWJfY291bnRlcnMoYWgpOwogfQogCi1ib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaGFsICphaCkKK2Jvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpCiB7CisjZGVmaW5lIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQgMTAwMDAgICAvKiB1c2VjICovCisjZGVmaW5lIEFIX1JYX1RJTUVfUVVBTlRVTSAgICAgMTAwICAgICAvKiB1c2VjICovCisKKwlpbnQgaTsKKwogCVJFR19XUklURShhaCwgQVJfQ1IsIEFSX0NSX1JYRCk7CiAKLQlpZiAoIWF0aDlrX2h3X3dhaXQoYWgsIEFSX0NSLCBBUl9DUl9SWEUsIDApKSB7CisJLyogV2FpdCBmb3IgcnggZW5hYmxlIGJpdCB0byBnbyBsb3cgKi8KKwlmb3IgKGkgPSBBSF9SWF9TVE9QX0RNQV9USU1FT1VUIC8gQUhfVElNRV9RVUFOVFVNOyBpICE9IDA7IGktLSkgeworCQlpZiAoKFJFR19SRUFEKGFoLCBBUl9DUikgJiBBUl9DUl9SWEUpID09IDApCisJCQlicmVhazsKKwkJdWRlbGF5KEFIX1RJTUVfUVVBTlRVTSk7CisJfQorCisJaWYgKGkgPT0gMCkgewogCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19RVUVVRSwKLQkJCSJkbWEgZmFpbGVkIHRvIHN0b3AgaW4gMTBtc1xuIgotCQkJIkFSX0NSPTB4JTA4eFxuQVJfRElBR19TVz0weCUwOHhcbiIsCi0JCQlSRUdfUkVBRChhaCwgQVJfQ1IpLCBSRUdfUkVBRChhaCwgQVJfRElBR19TVykpOworCQkJImRtYSBmYWlsZWQgdG8gc3RvcCBpbiAlZCBtcyAiCisJCQkiQVJfQ1I9MHglMDh4IEFSX0RJQUdfU1c9MHglMDh4XG4iLAorCQkJQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAvIDEwMDAsCisJCQlSRUdfUkVBRChhaCwgQVJfQ1IpLAorCQkJUkVHX1JFQUQoYWgsIEFSX0RJQUdfU1cpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0gZWxzZSB7CiAJCXJldHVybiB0cnVlOwogCX0KKworI3VuZGVmIEFIX1JYX1RJTUVfUVVBTlRVTQorI3VuZGVmIEFIX1JYX1NUT1BfRE1BX1RJTUVPVVQKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE3NmJjZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21hYy5oCkBAIC0wLDAgKzEsNjgwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBNQUNfSAorI2RlZmluZSBNQUNfSAorCisjZGVmaW5lIFJYU1RBVFVTX1JBVEUoYWgsIGFkcykgKEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihhaCkgPwkJXAorCQkJCU1TKGFkcy0+ZHNfcnhzdGF0dXMwLCBBUl9SeFJhdGUpIDoJXAorCQkJCShhZHMtPmRzX3J4c3RhdHVzMyA+PiAyKSAmIDB4RkYpCisKKyNkZWZpbmUgc2V0MTFuVHJpZXMoX3NlcmllcywgX2luZGV4KSBcCisJKFNNKChfc2VyaWVzKVtfaW5kZXhdLlRyaWVzLCBBUl9YbWl0RGF0YVRyaWVzIyNfaW5kZXgpKQorCisjZGVmaW5lIHNldDExblJhdGUoX3NlcmllcywgX2luZGV4KSBcCisJKFNNKChfc2VyaWVzKVtfaW5kZXhdLlJhdGUsIEFSX1htaXRSYXRlIyNfaW5kZXgpKQorCisjZGVmaW5lIHNldDExblBrdER1clJUU0NUUyhfc2VyaWVzLCBfaW5kZXgpCQkJCVwKKwkoU00oKF9zZXJpZXMpW19pbmRleF0uUGt0RHVyYXRpb24sIEFSX1BhY2tldER1ciMjX2luZGV4KSB8CVwKKwkgKChfc2VyaWVzKVtfaW5kZXhdLlJhdGVGbGFncyAmIEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyAgID8JXAorCSAgQVJfUlRTQ1RTUXVhbCMjX2luZGV4IDogMCkpCisKKyNkZWZpbmUgc2V0MTFuUmF0ZUZsYWdzKF9zZXJpZXMsIF9pbmRleCkJCQkJXAorCSgoKF9zZXJpZXMpW19pbmRleF0uUmF0ZUZsYWdzICYgQVRIOUtfUkFURVNFUklFU18yMDQwID8JCVwKKwkgIEFSXzIwNDBfIyNfaW5kZXggOiAwKQkJCQkJCVwKKwkgfCgoX3NlcmllcylbX2luZGV4XS5SYXRlRmxhZ3MgJiBBVEg5S19SQVRFU0VSSUVTX0hBTEZHSSA/CVwKKwkgICBBUl9HSSMjX2luZGV4IDogMCkJCQkJCQlcCisJIHxTTSgoX3NlcmllcylbX2luZGV4XS5DaFNlbCwgQVJfQ2hhaW5TZWwjI19pbmRleCkpCisKKyNkZWZpbmUgQ0NLX1NJRlNfVElNRSAgICAgICAgMTAKKyNkZWZpbmUgQ0NLX1BSRUFNQkxFX0JJVFMgICAxNDQKKyNkZWZpbmUgQ0NLX1BMQ1BfQklUUyAgICAgICAgNDgKKworI2RlZmluZSBPRkRNX1NJRlNfVElNRSAgICAgICAgMTYKKyNkZWZpbmUgT0ZETV9QUkVBTUJMRV9USU1FICAgIDIwCisjZGVmaW5lIE9GRE1fUExDUF9CSVRTICAgICAgICAyMgorI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FICAgICAgNAorCisjZGVmaW5lIE9GRE1fU0lGU19USU1FX0hBTEYgICAgIDMyCisjZGVmaW5lIE9GRE1fUFJFQU1CTEVfVElNRV9IQUxGIDQwCisjZGVmaW5lIE9GRE1fUExDUF9CSVRTX0hBTEYgICAgIDIyCisjZGVmaW5lIE9GRE1fU1lNQk9MX1RJTUVfSEFMRiAgIDgKKworI2RlZmluZSBPRkRNX1NJRlNfVElNRV9RVUFSVEVSICAgICAgNjQKKyNkZWZpbmUgT0ZETV9QUkVBTUJMRV9USU1FX1FVQVJURVIgIDgwCisjZGVmaW5lIE9GRE1fUExDUF9CSVRTX1FVQVJURVIgICAgICAyMgorI2RlZmluZSBPRkRNX1NZTUJPTF9USU1FX1FVQVJURVIgICAgMTYKKworI2RlZmluZSBJTklUX0FJRlMgICAgICAgMgorI2RlZmluZSBJTklUX0NXTUlOICAgICAgMTUKKyNkZWZpbmUgSU5JVF9DV01JTl8xMUIgIDMxCisjZGVmaW5lIElOSVRfQ1dNQVggICAgICAxMDIzCisjZGVmaW5lIElOSVRfU0hfUkVUUlkgICAxMAorI2RlZmluZSBJTklUX0xHX1JFVFJZICAgMTAKKyNkZWZpbmUgSU5JVF9TU0hfUkVUUlkgIDMyCisjZGVmaW5lIElOSVRfU0xHX1JFVFJZICAzMgorCisjZGVmaW5lIEFUSDlLX1NMT1RfVElNRV82IDYKKyNkZWZpbmUgQVRIOUtfU0xPVF9USU1FXzkgOQorI2RlZmluZSBBVEg5S19TTE9UX1RJTUVfMjAgMjAKKworI2RlZmluZSBBVEg5S19UWEVSUl9YUkVUUlkgICAgICAgICAweDAxCisjZGVmaW5lIEFUSDlLX1RYRVJSX0ZJTFQgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIOUtfVFhFUlJfRklGTyAgICAgICAgICAgMHgwNAorI2RlZmluZSBBVEg5S19UWEVSUl9YVFhPUCAgICAgICAgICAweDA4CisjZGVmaW5lIEFUSDlLX1RYRVJSX1RJTUVSX0VYUElSRUQgIDB4MTAKKworI2RlZmluZSBBVEg5S19UWF9CQSAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEFUSDlLX1RYX1BXUk1HTVQgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIOUtfVFhfREVTQ19DRkdfRVJSICAgICAgMHgwNAorI2RlZmluZSBBVEg5S19UWF9EQVRBX1VOREVSUlVOICAgICAweDA4CisjZGVmaW5lIEFUSDlLX1RYX0RFTElNX1VOREVSUlVOICAgIDB4MTAKKyNkZWZpbmUgQVRIOUtfVFhfU1dfQUJPUlRFRCAgICAgICAgMHg0MAorI2RlZmluZSBBVEg5S19UWF9TV19GSUxURVJFRCAgICAgICAweDgwCisKKyNkZWZpbmUgTUlOX1RYX0ZJRk9fVEhSRVNIT0xEICAgMHgxCisjZGVmaW5lIE1BWF9UWF9GSUZPX1RIUkVTSE9MRCAgICgoNDA5NiAvIDY0KSAtIDEpCisjZGVmaW5lIElOSVRfVFhfRklGT19USFJFU0hPTEQgIE1JTl9UWF9GSUZPX1RIUkVTSE9MRAorCitzdHJ1Y3QgYXRoX3R4X3N0YXR1cyB7CisJdTMyIHRzX3RzdGFtcDsKKwl1MTYgdHNfc2VxbnVtOworCXU4IHRzX3N0YXR1czsKKwl1OCB0c19yYXRlY29kZTsKKwl1OCB0c19yYXRlaW5kZXg7CisJaW50OF90IHRzX3Jzc2k7CisJdTggdHNfc2hvcnRyZXRyeTsKKwl1OCB0c19sb25ncmV0cnk7CisJdTggdHNfdmlydGNvbDsKKwl1OCB0c19hbnRlbm5hOworCXU4IHRzX2ZsYWdzOworCWludDhfdCB0c19yc3NpX2N0bDA7CisJaW50OF90IHRzX3Jzc2lfY3RsMTsKKwlpbnQ4X3QgdHNfcnNzaV9jdGwyOworCWludDhfdCB0c19yc3NpX2V4dDA7CisJaW50OF90IHRzX3Jzc2lfZXh0MTsKKwlpbnQ4X3QgdHNfcnNzaV9leHQyOworCXU4IHBhZFszXTsKKwl1MzIgYmFfbG93OworCXUzMiBiYV9oaWdoOworCXUzMiBldm0wOworCXUzMiBldm0xOworCXUzMiBldm0yOworfTsKKworc3RydWN0IGF0aF9yeF9zdGF0dXMgeworCXUzMiByc190c3RhbXA7CisJdTE2IHJzX2RhdGFsZW47CisJdTggcnNfc3RhdHVzOworCXU4IHJzX3BoeWVycjsKKwlpbnQ4X3QgcnNfcnNzaTsKKwl1OCByc19rZXlpeDsKKwl1OCByc19yYXRlOworCXU4IHJzX2FudGVubmE7CisJdTggcnNfbW9yZTsKKwlpbnQ4X3QgcnNfcnNzaV9jdGwwOworCWludDhfdCByc19yc3NpX2N0bDE7CisJaW50OF90IHJzX3Jzc2lfY3RsMjsKKwlpbnQ4X3QgcnNfcnNzaV9leHQwOworCWludDhfdCByc19yc3NpX2V4dDE7CisJaW50OF90IHJzX3Jzc2lfZXh0MjsKKwl1OCByc19pc2FnZ3I7CisJdTggcnNfbW9yZWFnZ3I7CisJdTggcnNfbnVtX2RlbGltczsKKwl1OCByc19mbGFnczsKKwl1MzIgZXZtMDsKKwl1MzIgZXZtMTsKKwl1MzIgZXZtMjsKK307CisKKyNkZWZpbmUgQVRIOUtfUlhFUlJfQ1JDICAgICAgICAgICAweDAxCisjZGVmaW5lIEFUSDlLX1JYRVJSX1BIWSAgICAgICAgICAgMHgwMgorI2RlZmluZSBBVEg5S19SWEVSUl9GSUZPICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRIOUtfUlhFUlJfREVDUllQVCAgICAgICAweDA4CisjZGVmaW5lIEFUSDlLX1JYRVJSX01JQyAgICAgICAgICAgMHgxMAorCisjZGVmaW5lIEFUSDlLX1JYX01PUkUgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBBVEg5S19SWF9NT1JFX0FHR1IgICAgICAgIDB4MDIKKyNkZWZpbmUgQVRIOUtfUlhfR0kgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEFUSDlLX1JYXzIwNDAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBBVEg5S19SWF9ERUxJTV9DUkNfUFJFICAgIDB4MTAKKyNkZWZpbmUgQVRIOUtfUlhfREVMSU1fQ1JDX1BPU1QgICAweDIwCisjZGVmaW5lIEFUSDlLX1JYX0RFQ1JZUFRfQlVTWSAgICAgMHg0MAorCisjZGVmaW5lIEFUSDlLX1JYS0VZSVhfSU5WQUxJRAkoKHU4KS0xKQorI2RlZmluZSBBVEg5S19UWEtFWUlYX0lOVkFMSUQJKCh1MzIpLTEpCisKK3N0cnVjdCBhdGhfZGVzYyB7CisJdTMyIGRzX2xpbms7CisJdTMyIGRzX2RhdGE7CisJdTMyIGRzX2N0bDA7CisJdTMyIGRzX2N0bDE7CisJdTMyIGRzX2h3WzIwXTsKKwl1bmlvbiB7CisJCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHR4OworCQlzdHJ1Y3QgYXRoX3J4X3N0YXR1cyByeDsKKwkJdm9pZCAqc3RhdHM7CisJfSBkc191czsKKwl2b2lkICpkc192ZGF0YTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUJZHNfdHhzdGF0CWRzX3VzLnR4CisjZGVmaW5lCWRzX3J4c3RhdAlkc191cy5yeAorI2RlZmluZSBkc19zdGF0CQlkc191cy5zdGF0cworCisjZGVmaW5lIEFUSDlLX1RYREVTQ19DTFJETUFTSwkJMHgwMDAxCisjZGVmaW5lIEFUSDlLX1RYREVTQ19OT0FDSwkJMHgwMDAyCisjZGVmaW5lIEFUSDlLX1RYREVTQ19SVFNFTkEJCTB4MDAwNAorI2RlZmluZSBBVEg5S19UWERFU0NfQ1RTRU5BCQkweDAwMDgKKy8qIEFUSDlLX1RYREVTQ19JTlRSRVEgZm9yY2VzIGEgdHggaW50ZXJydXB0IHRvIGJlIGdlbmVyYXRlZCBmb3IKKyAqIHRoZSBkZXNjcmlwdG9yIGl0cyBtYXJrZWQgb24uICBXZSB0YWtlIGEgdHggaW50ZXJydXB0IHRvIHJlYXAKKyAqIGRlc2NyaXB0b3JzIHdoZW4gdGhlIGgvdyBoaXRzIGFuIEVPTCBjb25kaXRpb24gb3IKKyAqIHdoZW4gdGhlIGRlc2NyaXB0b3IgaXMgc3BlY2lmaWNhbGx5IG1hcmtlZCB0byBnZW5lcmF0ZQorICogYW4gaW50ZXJydXB0IHdpdGggdGhpcyBmbGFnLiBEZXNjcmlwdG9ycyBzaG91bGQgYmUKKyAqIG1hcmtlZCBwZXJpb2RpY2FsbHkgdG8gaW5zdXJlIHRpbWVseSByZXBsZW5pc2hpbmcgb2YgdGhlCisgKiBzdXBwbHkgbmVlZGVkIGZvciBzZW5kaW5nIGZyYW1lcy4gRGVmZXJpbmcgaW50ZXJydXB0cworICogcmVkdWNlcyBzeXN0ZW0gbG9hZCBhbmQgcG90ZW50aWFsbHkgYWxsb3dzIG1vcmUgY29uY3VycmVudAorICogd29yayB0byBiZSBkb25lIGJ1dCBpZiBkb25lIHRvIGFnZ3Jlc3NpdmVseSBjYW4gY2F1c2UKKyAqIHNlbmRlcnMgdG8gYmFja3VwLiBXaGVuIHRoZSBoYXJkd2FyZSBxdWV1ZSBpcyBsZWZ0IHRvbworICogbGFyZ2UgcmF0ZSBjb250cm9sIGluZm9ybWF0aW9uIG1heSBhbHNvIGJlIHRvbyBvdXQgb2YKKyAqIGRhdGUuIEFuIEFsdGVybmF0aXZlIGZvciB0aGlzIGlzIFRYIGludGVycnVwdCBtaXRpZ2F0aW9uCisgKiBidXQgdGhpcyBuZWVkcyBtb3JlIHRlc3RpbmcuICovCisjZGVmaW5lIEFUSDlLX1RYREVTQ19JTlRSRVEJCTB4MDAxMAorI2RlZmluZSBBVEg5S19UWERFU0NfVkVPTAkJMHgwMDIwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19FWFRfT05MWQkJMHgwMDQwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19FWFRfQU5EX0NUTAkweDAwODAKKyNkZWZpbmUgQVRIOUtfVFhERVNDX1ZNRgkJMHgwMTAwCisjZGVmaW5lIEFUSDlLX1RYREVTQ19GUkFHX0lTX09OIAkweDAyMDAKKyNkZWZpbmUgQVRIOUtfVFhERVNDX0NBQgkJMHgwNDAwCisKKyNkZWZpbmUgQVRIOUtfUlhERVNDX0lOVFJFUQkJMHgwMDIwCisKK3N0cnVjdCBhcjU0MTZfZGVzYyB7CisJdTMyIGRzX2xpbms7CisJdTMyIGRzX2RhdGE7CisJdTMyIGRzX2N0bDA7CisJdTMyIGRzX2N0bDE7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTMyIGN0bDI7CisJCQl1MzIgY3RsMzsKKwkJCXUzMiBjdGw0OworCQkJdTMyIGN0bDU7CisJCQl1MzIgY3RsNjsKKwkJCXUzMiBjdGw3OworCQkJdTMyIGN0bDg7CisJCQl1MzIgY3RsOTsKKwkJCXUzMiBjdGwxMDsKKwkJCXUzMiBjdGwxMTsKKwkJCXUzMiBzdGF0dXMwOworCQkJdTMyIHN0YXR1czE7CisJCQl1MzIgc3RhdHVzMjsKKwkJCXUzMiBzdGF0dXMzOworCQkJdTMyIHN0YXR1czQ7CisJCQl1MzIgc3RhdHVzNTsKKwkJCXUzMiBzdGF0dXM2OworCQkJdTMyIHN0YXR1czc7CisJCQl1MzIgc3RhdHVzODsKKwkJCXUzMiBzdGF0dXM5OworCQl9IHR4OworCQlzdHJ1Y3QgeworCQkJdTMyIHN0YXR1czA7CisJCQl1MzIgc3RhdHVzMTsKKwkJCXUzMiBzdGF0dXMyOworCQkJdTMyIHN0YXR1czM7CisJCQl1MzIgc3RhdHVzNDsKKwkJCXUzMiBzdGF0dXM1OworCQkJdTMyIHN0YXR1czY7CisJCQl1MzIgc3RhdHVzNzsKKwkJCXUzMiBzdGF0dXM4OworCQl9IHJ4OworCX0gdTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgQVI1NDE2REVTQyhfZHMpICAgICAgICAgKChzdHJ1Y3QgYXI1NDE2X2Rlc2MgKikoX2RzKSkKKyNkZWZpbmUgQVI1NDE2REVTQ19DT05TVChfZHMpICAgKChjb25zdCBzdHJ1Y3QgYXI1NDE2X2Rlc2MgKikoX2RzKSkKKworI2RlZmluZSBkc19jdGwyICAgICB1LnR4LmN0bDIKKyNkZWZpbmUgZHNfY3RsMyAgICAgdS50eC5jdGwzCisjZGVmaW5lIGRzX2N0bDQgICAgIHUudHguY3RsNAorI2RlZmluZSBkc19jdGw1ICAgICB1LnR4LmN0bDUKKyNkZWZpbmUgZHNfY3RsNiAgICAgdS50eC5jdGw2CisjZGVmaW5lIGRzX2N0bDcgICAgIHUudHguY3RsNworI2RlZmluZSBkc19jdGw4ICAgICB1LnR4LmN0bDgKKyNkZWZpbmUgZHNfY3RsOSAgICAgdS50eC5jdGw5CisjZGVmaW5lIGRzX2N0bDEwICAgIHUudHguY3RsMTAKKyNkZWZpbmUgZHNfY3RsMTEgICAgdS50eC5jdGwxMQorCisjZGVmaW5lIGRzX3R4c3RhdHVzMCAgICB1LnR4LnN0YXR1czAKKyNkZWZpbmUgZHNfdHhzdGF0dXMxICAgIHUudHguc3RhdHVzMQorI2RlZmluZSBkc190eHN0YXR1czIgICAgdS50eC5zdGF0dXMyCisjZGVmaW5lIGRzX3R4c3RhdHVzMyAgICB1LnR4LnN0YXR1czMKKyNkZWZpbmUgZHNfdHhzdGF0dXM0ICAgIHUudHguc3RhdHVzNAorI2RlZmluZSBkc190eHN0YXR1czUgICAgdS50eC5zdGF0dXM1CisjZGVmaW5lIGRzX3R4c3RhdHVzNiAgICB1LnR4LnN0YXR1czYKKyNkZWZpbmUgZHNfdHhzdGF0dXM3ICAgIHUudHguc3RhdHVzNworI2RlZmluZSBkc190eHN0YXR1czggICAgdS50eC5zdGF0dXM4CisjZGVmaW5lIGRzX3R4c3RhdHVzOSAgICB1LnR4LnN0YXR1czkKKworI2RlZmluZSBkc19yeHN0YXR1czAgICAgdS5yeC5zdGF0dXMwCisjZGVmaW5lIGRzX3J4c3RhdHVzMSAgICB1LnJ4LnN0YXR1czEKKyNkZWZpbmUgZHNfcnhzdGF0dXMyICAgIHUucnguc3RhdHVzMgorI2RlZmluZSBkc19yeHN0YXR1czMgICAgdS5yeC5zdGF0dXMzCisjZGVmaW5lIGRzX3J4c3RhdHVzNCAgICB1LnJ4LnN0YXR1czQKKyNkZWZpbmUgZHNfcnhzdGF0dXM1ICAgIHUucnguc3RhdHVzNQorI2RlZmluZSBkc19yeHN0YXR1czYgICAgdS5yeC5zdGF0dXM2CisjZGVmaW5lIGRzX3J4c3RhdHVzNyAgICB1LnJ4LnN0YXR1czcKKyNkZWZpbmUgZHNfcnhzdGF0dXM4ICAgIHUucnguc3RhdHVzOAorCisjZGVmaW5lIEFSX0ZyYW1lTGVuICAgICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBBUl9WaXJ0TW9yZUZyYWcgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfVHhDdGxSc3ZkMDAgICAgICAweDAwMDBlMDAwCisjZGVmaW5lIEFSX1htaXRQb3dlciAgICAgICAgMHgwMDNmMDAwMAorI2RlZmluZSBBUl9YbWl0UG93ZXJfUyAgICAgIDE2CisjZGVmaW5lIEFSX1JUU0VuYWJsZSAgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBBUl9WRU9MICAgICAgICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgQVJfQ2xyRGVzdE1hc2sgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEFSX1R4Q3RsUnN2ZDAxICAgICAgMHgxZTAwMDAwMAorI2RlZmluZSBBUl9UeEludHJSZXEgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQVJfRGVzdElkeFZhbGlkICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEFSX0NUU0VuYWJsZSAgICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBBUl9UeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfRGVzdElkeCAgICAgICAgICAweDAwMGZlMDAwCisjZGVmaW5lIEFSX0Rlc3RJZHhfUyAgICAgICAgMTMKKyNkZWZpbmUgQVJfRnJhbWVUeXBlICAgICAgICAweDAwZjAwMDAwCisjZGVmaW5lIEFSX0ZyYW1lVHlwZV9TICAgICAgMjAKKyNkZWZpbmUgQVJfTm9BY2sgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIEFSX0luc2VydFRTICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBBUl9Db3JydXB0RkNTICAgICAgIDB4MDQwMDAwMDAKKyNkZWZpbmUgQVJfRXh0T25seSAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIEFSX0V4dEFuZEN0bCAgICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBBUl9Nb3JlQWdnciAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgQVJfSXNBZ2dyICAgICAgICAgICAweDQwMDAwMDAwCisKKyNkZWZpbmUgQVJfQnVyc3REdXIgICAgICAgICAweDAwMDA3ZmZmCisjZGVmaW5lIEFSX0J1cnN0RHVyX1MgICAgICAgMAorI2RlZmluZSBBUl9EdXJVcGRhdGVFbmEgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczAgICAweDAwMGYwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMwX1MgMTYKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczEgICAweDAwZjAwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMxX1MgMjAKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczIgICAweDBmMDAwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMyX1MgMjQKKyNkZWZpbmUgQVJfWG1pdERhdGFUcmllczMgICAweGYwMDAwMDAwCisjZGVmaW5lIEFSX1htaXREYXRhVHJpZXMzX1MgMjgKKworI2RlZmluZSBBUl9YbWl0UmF0ZTAgICAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfWG1pdFJhdGUwX1MgICAgICAwCisjZGVmaW5lIEFSX1htaXRSYXRlMSAgICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBBUl9YbWl0UmF0ZTFfUyAgICAgIDgKKyNkZWZpbmUgQVJfWG1pdFJhdGUyICAgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEFSX1htaXRSYXRlMl9TICAgICAgMTYKKyNkZWZpbmUgQVJfWG1pdFJhdGUzICAgICAgICAweGZmMDAwMDAwCisjZGVmaW5lIEFSX1htaXRSYXRlM19TICAgICAgMjQKKworI2RlZmluZSBBUl9QYWNrZXREdXIwICAgICAgIDB4MDAwMDdmZmYKKyNkZWZpbmUgQVJfUGFja2V0RHVyMF9TICAgICAwCisjZGVmaW5lIEFSX1JUU0NUU1F1YWwwICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBBUl9QYWNrZXREdXIxICAgICAgIDB4N2ZmZjAwMDAKKyNkZWZpbmUgQVJfUGFja2V0RHVyMV9TICAgICAxNgorI2RlZmluZSBBUl9SVFNDVFNRdWFsMSAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBUl9QYWNrZXREdXIyICAgICAgIDB4MDAwMDdmZmYKKyNkZWZpbmUgQVJfUGFja2V0RHVyMl9TICAgICAwCisjZGVmaW5lIEFSX1JUU0NUU1F1YWwyICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBBUl9QYWNrZXREdXIzICAgICAgIDB4N2ZmZjAwMDAKKyNkZWZpbmUgQVJfUGFja2V0RHVyM19TICAgICAxNgorI2RlZmluZSBBUl9SVFNDVFNRdWFsMyAgICAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBUl9BZ2dyTGVuICAgICAgICAgIDB4MDAwMGZmZmYKKyNkZWZpbmUgQVJfQWdnckxlbl9TICAgICAgICAwCisjZGVmaW5lIEFSX1R4Q3RsUnN2ZDYwICAgICAgMHgwMDAzMDAwMAorI2RlZmluZSBBUl9QYWREZWxpbSAgICAgICAgIDB4MDNmYzAwMDAKKyNkZWZpbmUgQVJfUGFkRGVsaW1fUyAgICAgICAxOAorI2RlZmluZSBBUl9FbmNyVHlwZSAgICAgICAgIDB4MGMwMDAwMDAKKyNkZWZpbmUgQVJfRW5jclR5cGVfUyAgICAgICAyNgorI2RlZmluZSBBUl9UeEN0bFJzdmQ2MSAgICAgIDB4ZjAwMDAwMDAKKworI2RlZmluZSBBUl8yMDQwXzAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfR0kwICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX0NoYWluU2VsMCAgICAgICAgMHgwMDAwMDAxYworI2RlZmluZSBBUl9DaGFpblNlbDBfUyAgICAgIDIKKyNkZWZpbmUgQVJfMjA0MF8xICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIEFSX0dJMSAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBBUl9DaGFpblNlbDEgICAgICAgIDB4MDAwMDAzODAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwxX1MgICAgICA3CisjZGVmaW5lIEFSXzIwNDBfMiAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBBUl9HSTIgICAgICAgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwyICAgICAgICAweDAwMDA3MDAwCisjZGVmaW5lIEFSX0NoYWluU2VsMl9TICAgICAgMTIKKyNkZWZpbmUgQVJfMjA0MF8zICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIEFSX0dJMyAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9DaGFpblNlbDMgICAgICAgIDB4MDAwZTAwMDAKKyNkZWZpbmUgQVJfQ2hhaW5TZWwzX1MgICAgICAxNworI2RlZmluZSBBUl9SVFNDVFNSYXRlICAgICAgIDB4MGZmMDAwMDAKKyNkZWZpbmUgQVJfUlRTQ1RTUmF0ZV9TICAgICAyMAorI2RlZmluZSBBUl9UeEN0bFJzdmQ3MCAgICAgIDB4ZjAwMDAwMDAKKworI2RlZmluZSBBUl9UeFJTU0lBbnQwMCAgICAgIDB4MDAwMDAwZmYKKyNkZWZpbmUgQVJfVHhSU1NJQW50MDBfUyAgICAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDAxICAgICAgMHgwMDAwZmYwMAorI2RlZmluZSBBUl9UeFJTU0lBbnQwMV9TICAgIDgKKyNkZWZpbmUgQVJfVHhSU1NJQW50MDIgICAgICAweDAwZmYwMDAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDAyX1MgICAgMTYKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkMDAgICAweDNmMDAwMDAwCisjZGVmaW5lIEFSX1R4QmFTdGF0dXMgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQwMSAgIDB4ODAwMDAwMDAKKworI2RlZmluZSBBUl9Gcm1YbWl0T0sgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX0V4Y2Vzc2l2ZVJldHJpZXMgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfRklGT1VuZGVycnVuICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBUl9GaWx0ZXJlZCAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFSX1JUU0ZhaWxDbnQgICAgICAgICAgIDB4MDAwMDAwZjAKKyNkZWZpbmUgQVJfUlRTRmFpbENudF9TICAgICAgICAgNAorI2RlZmluZSBBUl9EYXRhRmFpbENudCAgICAgICAgICAweDAwMDAwZjAwCisjZGVmaW5lIEFSX0RhdGFGYWlsQ250X1MgICAgICAgIDgKKyNkZWZpbmUgQVJfVmlydFJldHJ5Q250ICAgICAgICAgMHgwMDAwZjAwMAorI2RlZmluZSBBUl9WaXJ0UmV0cnlDbnRfUyAgICAgICAxMgorI2RlZmluZSBBUl9UeERlbGltVW5kZXJydW4gICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEFSX1R4RGF0YVVuZGVycnVuICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQVJfRGVzY0NmZ0VyciAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBBUl9UeFRpbWVyRXhwaXJlZCAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEFSX1R4U3RhdHVzUnN2ZDEwICAgICAgIDB4ZmZmMDAwMDAKKworI2RlZmluZSBBUl9TZW5kVGltZXN0YW1wICAgIGRzX3R4c3RhdHVzMgorI2RlZmluZSBBUl9CYUJpdG1hcExvdyAgICAgIGRzX3R4c3RhdHVzMworI2RlZmluZSBBUl9CYUJpdG1hcEhpZ2ggICAgIGRzX3R4c3RhdHVzNAorCisjZGVmaW5lIEFSX1R4UlNTSUFudDEwICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBBUl9UeFJTU0lBbnQxMF9TICAgIDAKKyNkZWZpbmUgQVJfVHhSU1NJQW50MTEgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX1R4UlNTSUFudDExX1MgICAgOAorI2RlZmluZSBBUl9UeFJTU0lBbnQxMiAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgQVJfVHhSU1NJQW50MTJfUyAgICAxNgorI2RlZmluZSBBUl9UeFJTU0lDb21iaW5lZCAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgQVJfVHhSU1NJQ29tYmluZWRfUyAyNAorCisjZGVmaW5lIEFSX1R4RVZNMCAgICAgICAgICAgZHNfdHhzdGF0dXM1CisjZGVmaW5lIEFSX1R4RVZNMSAgICAgICAgICAgZHNfdHhzdGF0dXM2CisjZGVmaW5lIEFSX1R4RVZNMiAgICAgICAgICAgZHNfdHhzdGF0dXM3CisKKyNkZWZpbmUgQVJfVHhEb25lICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX1NlcU51bSAgICAgICAgICAgMHgwMDAwMWZmZQorI2RlZmluZSBBUl9TZXFOdW1fUyAgICAgICAgIDEKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODAgICAweDAwMDFlMDAwCisjZGVmaW5lIEFSX1R4T3BFeGNlZWRlZCAgICAgMHgwMDAyMDAwMAorI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MSAgIDB4MDAxYzAwMDAKKyNkZWZpbmUgQVJfRmluYWxUeElkeCAgICAgICAweDAwNjAwMDAwCisjZGVmaW5lIEFSX0ZpbmFsVHhJZHhfUyAgICAgMjEKKyNkZWZpbmUgQVJfVHhTdGF0dXNSc3ZkODIgICAweDAxODAwMDAwCisjZGVmaW5lIEFSX1Bvd2VyTWdtdCAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBBUl9UeFN0YXR1c1JzdmQ4MyAgIDB4ZmMwMDAwMDAKKworI2RlZmluZSBBUl9SeENUTFJzdmQwMCAgMHhmZmZmZmZmZgorCisjZGVmaW5lIEFSX0J1ZkxlbiAgICAgICAweDAwMDAwZmZmCisjZGVmaW5lIEFSX1J4Q3RsUnN2ZDAwICAweDAwMDAxMDAwCisjZGVmaW5lIEFSX1J4SW50clJlcSAgICAweDAwMDAyMDAwCisjZGVmaW5lIEFSX1J4Q3RsUnN2ZDAxICAweGZmZmZjMDAwCisKKyNkZWZpbmUgQVJfUnhSU1NJQW50MDAgICAgICAweDAwMDAwMGZmCisjZGVmaW5lIEFSX1J4UlNTSUFudDAwX1MgICAgMAorI2RlZmluZSBBUl9SeFJTU0lBbnQwMSAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MDFfUyAgICA4CisjZGVmaW5lIEFSX1J4UlNTSUFudDAyICAgICAgMHgwMGZmMDAwMAorI2RlZmluZSBBUl9SeFJTU0lBbnQwMl9TICAgIDE2CisjZGVmaW5lIEFSX1J4UmF0ZSAgICAgICAgICAgMHhmZjAwMDAwMAorI2RlZmluZSBBUl9SeFJhdGVfUyAgICAgICAgIDI0CisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDAwICAgMHhmZjAwMDAwMAorCisjZGVmaW5lIEFSX0RhdGFMZW4gICAgICAgICAgMHgwMDAwMGZmZgorI2RlZmluZSBBUl9SeE1vcmUgICAgICAgICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgQVJfTnVtRGVsaW0gICAgICAgICAweDAwM2ZjMDAwCisjZGVmaW5lIEFSX051bURlbGltX1MgICAgICAgMTQKKyNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMTAgICAweGZmODAwMDAwCisKKyNkZWZpbmUgQVJfUmN2VGltZXN0YW1wICAgICBkc19yeHN0YXR1czIKKworI2RlZmluZSBBUl9HSSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfMjA0MCAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIEFSX1BhcmFsbGVsNDAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBUl9QYXJhbGxlbDQwX1MgICAgIDIKKyNkZWZpbmUgQVJfUnhTdGF0dXNSc3ZkMzAgICAweDAwMDAwMGY4CisjZGVmaW5lIEFSX1J4QW50ZW5uYQkgICAgMHhmZmZmZmYwMAorI2RlZmluZSBBUl9SeEFudGVubmFfUwkgICAgOAorCisjZGVmaW5lIEFSX1J4UlNTSUFudDEwICAgICAgICAgICAgMHgwMDAwMDBmZgorI2RlZmluZSBBUl9SeFJTU0lBbnQxMF9TICAgICAgICAgIDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MTEgICAgICAgICAgICAweDAwMDBmZjAwCisjZGVmaW5lIEFSX1J4UlNTSUFudDExX1MgICAgICAgICAgOAorI2RlZmluZSBBUl9SeFJTU0lBbnQxMiAgICAgICAgICAgIDB4MDBmZjAwMDAKKyNkZWZpbmUgQVJfUnhSU1NJQW50MTJfUyAgICAgICAgICAxNgorI2RlZmluZSBBUl9SeFJTU0lDb21iaW5lZCAgICAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgQVJfUnhSU1NJQ29tYmluZWRfUyAgICAgICAyNAorCisjZGVmaW5lIEFSX1J4RVZNMCAgICAgICAgICAgZHNfcnhzdGF0dXM0CisjZGVmaW5lIEFSX1J4RVZNMSAgICAgICAgICAgZHNfcnhzdGF0dXM1CisjZGVmaW5lIEFSX1J4RVZNMiAgICAgICAgICAgZHNfcnhzdGF0dXM2CisKKyNkZWZpbmUgQVJfUnhEb25lICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEFSX1J4RnJhbWVPSyAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBUl9DUkNFcnIgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVJfRGVjcnlwdENSQ0VyciAgICAweDAwMDAwMDA4CisjZGVmaW5lIEFSX1BIWUVyciAgICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBBUl9NaWNoYWVsRXJyICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgQVJfUHJlRGVsaW1DUkNFcnIgICAweDAwMDAwMDQwCisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcwICAgMHgwMDAwMDA4MAorI2RlZmluZSBBUl9SeEtleUlkeFZhbGlkICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQVJfS2V5SWR4ICAgICAgICAgICAweDAwMDBmZTAwCisjZGVmaW5lIEFSX0tleUlkeF9TICAgICAgICAgOQorI2RlZmluZSBBUl9QSFlFcnJDb2RlICAgICAgIDB4MDAwMGZmMDAKKyNkZWZpbmUgQVJfUEhZRXJyQ29kZV9TICAgICA4CisjZGVmaW5lIEFSX1J4TW9yZUFnZ3IgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9SeEFnZ3IgICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQVJfUG9zdERlbGltQ1JDRXJyICAweDAwMDQwMDAwCisjZGVmaW5lIEFSX1J4U3RhdHVzUnN2ZDcxICAgMHgzZmY4MDAwMAorI2RlZmluZSBBUl9EZWNyeXB0QnVzeUVyciAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQVJfS2V5TWlzcyAgICAgICAgICAweDgwMDAwMDAwCisKK2VudW0gYXRoOWtfdHhfcXVldWUgeworCUFUSDlLX1RYX1FVRVVFX0lOQUNUSVZFID0gMCwKKwlBVEg5S19UWF9RVUVVRV9EQVRBLAorCUFUSDlLX1RYX1FVRVVFX0JFQUNPTiwKKwlBVEg5S19UWF9RVUVVRV9DQUIsCisJQVRIOUtfVFhfUVVFVUVfVUFQU0QsCisJQVRIOUtfVFhfUVVFVUVfUFNQT0xMCit9OworCisjZGVmaW5lCUFUSDlLX05VTV9UWF9RVUVVRVMgMTAKKworZW51bSBhdGg5a190eF9xdWV1ZV9zdWJ0eXBlIHsKKwlBVEg5S19XTUVfQUNfQksgPSAwLAorCUFUSDlLX1dNRV9BQ19CRSwKKwlBVEg5S19XTUVfQUNfVkksCisJQVRIOUtfV01FX0FDX1ZPLAorCUFUSDlLX1dNRV9VUFNECit9OworCitlbnVtIGF0aDlrX3R4X3F1ZXVlX2ZsYWdzIHsKKwlUWFFfRkxBR19UWE9LSU5UX0VOQUJMRSA9IDB4MDAwMSwKKwlUWFFfRkxBR19UWEVSUklOVF9FTkFCTEUgPSAweDAwMDEsCisJVFhRX0ZMQUdfVFhERVNDSU5UX0VOQUJMRSA9IDB4MDAwMiwKKwlUWFFfRkxBR19UWEVPTElOVF9FTkFCTEUgPSAweDAwMDQsCisJVFhRX0ZMQUdfVFhVUk5JTlRfRU5BQkxFID0gMHgwMDA4LAorCVRYUV9GTEFHX0JBQ0tPRkZfRElTQUJMRSA9IDB4MDAxMCwKKwlUWFFfRkxBR19DT01QUkVTU0lPTl9FTkFCTEUgPSAweDAwMjAsCisJVFhRX0ZMQUdfUkRZVElNRV9FWFBfUE9MSUNZX0VOQUJMRSA9IDB4MDA0MCwKKwlUWFFfRkxBR19GUkFHX0JVUlNUX0JBQ0tPRkZfRU5BQkxFID0gMHgwMDgwLAorfTsKKworI2RlZmluZSBBVEg5S19UWFFfVVNFREVGQVVMVCAoKHUzMikgLTEpCisjZGVmaW5lIEFUSDlLX1RYUV9VU0VfTE9DS09VVF9CS09GRl9ESVMgMHgwMDAwMDAwMQorCisjZGVmaW5lIEFUSDlLX0RFQ09NUF9NQVNLX1NJWkUgICAgIDEyOAorI2RlZmluZSBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EICA1MAorI2RlZmluZSBBVEg5S19SRUFEWV9USU1FX0hJX0JPVU5EICA5NgorCitlbnVtIGF0aDlrX3BrdF90eXBlIHsKKwlBVEg5S19QS1RfVFlQRV9OT1JNQUwgPSAwLAorCUFUSDlLX1BLVF9UWVBFX0FUSU0sCisJQVRIOUtfUEtUX1RZUEVfUFNQT0xMLAorCUFUSDlLX1BLVF9UWVBFX0JFQUNPTiwKKwlBVEg5S19QS1RfVFlQRV9QUk9CRV9SRVNQLAorCUFUSDlLX1BLVF9UWVBFX0NISVJQLAorCUFUSDlLX1BLVF9UWVBFX0dSUF9QT0xMLAorfTsKKworc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8geworCXUzMiB0cWlfdmVyOworCWVudW0gYXRoOWtfdHhfcXVldWUgdHFpX3R5cGU7CisJZW51bSBhdGg5a190eF9xdWV1ZV9zdWJ0eXBlIHRxaV9zdWJ0eXBlOworCWVudW0gYXRoOWtfdHhfcXVldWVfZmxhZ3MgdHFpX3FmbGFnczsKKwl1MzIgdHFpX3ByaW9yaXR5OworCXUzMiB0cWlfYWlmczsKKwl1MzIgdHFpX2N3bWluOworCXUzMiB0cWlfY3dtYXg7CisJdTE2IHRxaV9zaHJldHJ5OworCXUxNiB0cWlfbGdyZXRyeTsKKwl1MzIgdHFpX2NiclBlcmlvZDsKKwl1MzIgdHFpX2Nick92ZXJmbG93TGltaXQ7CisJdTMyIHRxaV9idXJzdFRpbWU7CisJdTMyIHRxaV9yZWFkeVRpbWU7CisJdTMyIHRxaV9waHlzQ29tcEJ1ZjsKKwl1MzIgdHFpX2ludEZsYWdzOworfTsKKworZW51bSBhdGg5a19yeF9maWx0ZXIgeworCUFUSDlLX1JYX0ZJTFRFUl9VQ0FTVCA9IDB4MDAwMDAwMDEsCisJQVRIOUtfUlhfRklMVEVSX01DQVNUID0gMHgwMDAwMDAwMiwKKwlBVEg5S19SWF9GSUxURVJfQkNBU1QgPSAweDAwMDAwMDA0LAorCUFUSDlLX1JYX0ZJTFRFUl9DT05UUk9MID0gMHgwMDAwMDAwOCwKKwlBVEg5S19SWF9GSUxURVJfQkVBQ09OID0gMHgwMDAwMDAxMCwKKwlBVEg5S19SWF9GSUxURVJfUFJPTSA9IDB4MDAwMDAwMjAsCisJQVRIOUtfUlhfRklMVEVSX1BST0JFUkVRID0gMHgwMDAwMDA4MCwKKwlBVEg5S19SWF9GSUxURVJfUEhZRVJSID0gMHgwMDAwMDEwMCwKKwlBVEg5S19SWF9GSUxURVJfTVlCRUFDT04gPSAweDAwMDAwMjAwLAorCUFUSDlLX1JYX0ZJTFRFUl9QU1BPTEwgPSAweDAwMDA0MDAwLAorCUFUSDlLX1JYX0ZJTFRFUl9QSFlSQURBUiA9IDB4MDAwMDIwMDAsCisJQVRIOUtfUlhfRklMVEVSX01DQVNUX0JDQVNUX0FMTCA9IDB4MDAwMDgwMDAsCit9OworCisjZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyAgMHgwMDAxCisjZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfMjA0MCAgICAgMHgwMDAyCisjZGVmaW5lIEFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJICAgMHgwMDA0CisKK3N0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMgeworCXUzMiBUcmllczsKKwl1MzIgUmF0ZTsKKwl1MzIgUGt0RHVyYXRpb247CisJdTMyIENoU2VsOworCXUzMiBSYXRlRmxhZ3M7Cit9OworCitzdHJ1Y3QgYXRoOWtfa2V5dmFsIHsKKwl1OCBrdl90eXBlOworCXU4IGt2X3BhZDsKKwl1MTYga3ZfbGVuOworCXU4IGt2X3ZhbFsxNl07IC8qIFRLICovCisJdTgga3ZfbWljWzhdOyAvKiBNaWNoYWVsIE1JQyBrZXkgKi8KKwl1OCBrdl90eG1pY1s4XTsgLyogTWljaGFlbCBNSUMgVFgga2V5ICh1c2VkIG9ubHkgaWYgdGhlIGhhcmR3YXJlCisJCQkgKiBzdXBwb3J0cyBib3RoIE1JQyBrZXlzIGluIHRoZSBzYW1lIGtleSBjYWNoZSBlbnRyeTsKKwkJCSAqIGluIHRoYXQgY2FzZSwga3ZfbWljIGlzIHRoZSBSWCBrZXkpICovCit9OworCitlbnVtIGF0aDlrX2tleV90eXBlIHsKKwlBVEg5S19LRVlfVFlQRV9DTEVBUiwKKwlBVEg5S19LRVlfVFlQRV9XRVAsCisJQVRIOUtfS0VZX1RZUEVfQUVTLAorCUFUSDlLX0tFWV9UWVBFX1RLSVAsCit9OworCitlbnVtIGF0aDlrX2NpcGhlciB7CisJQVRIOUtfQ0lQSEVSX1dFUCA9IDAsCisJQVRIOUtfQ0lQSEVSX0FFU19PQ0IgPSAxLAorCUFUSDlLX0NJUEhFUl9BRVNfQ0NNID0gMiwKKwlBVEg5S19DSVBIRVJfQ0tJUCA9IDMsCisJQVRIOUtfQ0lQSEVSX1RLSVAgPSA0LAorCUFUSDlLX0NJUEhFUl9DTFIgPSA1LAorCUFUSDlLX0NJUEhFUl9NSUMgPSAxMjcKK307CisKK2VudW0gYXRoOWtfaHRfbWFjbW9kZSB7CisJQVRIOUtfSFRfTUFDTU9ERV8yMCA9IDAsCisJQVRIOUtfSFRfTUFDTU9ERV8yMDQwID0gMSwKK307CisKK2VudW0gYXRoOWtfaHRfZXh0cHJvdHNwYWNpbmcgeworCUFUSDlLX0hUX0VYVFBST1RTUEFDSU5HXzIwID0gMCwKKwlBVEg5S19IVF9FWFRQUk9UU1BBQ0lOR18yNSA9IDEsCit9OworCitzdHJ1Y3QgYXRoX2h3Oworc3RydWN0IGF0aDlrX2NoYW5uZWw7CitzdHJ1Y3QgYXRoX3JhdGVfdGFibGU7CisKK3UzMiBhdGg5a19od19nZXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworYm9vbCBhdGg5a19od19wdXR0eGJ1ZihzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEsIHUzMiB0eGRwKTsKK2Jvb2wgYXRoOWtfaHdfdHhzdGFydChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOwordTMyIGF0aDlrX2h3X251bXR4cGVuZGluZyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworYm9vbCBhdGg5a19od191cGRhdGV0eHRyaWdsZXZlbChzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBiSW5jVHJpZ0xldmVsKTsKK2Jvb2wgYXRoOWtfaHdfc3RvcHR4ZG1hKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7Citib29sIGF0aDlrX2h3X2ZpbGx0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkgdTMyIHNlZ0xlbiwgYm9vbCBmaXJzdFNlZywKKwkJCSBib29sIGxhc3RTZWcsIGNvbnN0IHN0cnVjdCBhdGhfZGVzYyAqZHMwKTsKK3ZvaWQgYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOworaW50IGF0aDlrX2h3X3R4cHJvY2Rlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMpOwordm9pZCBhdGg5a19od19zZXQxMW5fdHhkZXNjKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJICAgIHUzMiBwa3RMZW4sIGVudW0gYXRoOWtfcGt0X3R5cGUgdHlwZSwgdTMyIHR4UG93ZXIsCisJCQkgICAgdTMyIGtleUl4LCBlbnVtIGF0aDlrX2tleV90eXBlIGtleVR5cGUsIHUzMiBmbGFncyk7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkJICBzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcywKKwkJCQkgIHUzMiBkdXJVcGRhdGVFbiwgdTMyIHJ0c2N0c1JhdGUsCisJCQkJICB1MzIgcnRzY3RzRHVyYXRpb24sCisJCQkJICBzdHJ1Y3QgYXRoOWtfMTFuX3JhdGVfc2VyaWVzIHNlcmllc1tdLAorCQkJCSAgdTMyIG5zZXJpZXMsIHUzMiBmbGFncyk7Cit2b2lkIGF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCXUzMiBhZ2dyTGVuKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbWlkZGxlKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCSB1MzIgbnVtRGVsaW1zKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aF9kZXNjICpkcyk7Cit2b2lkIGF0aDlrX2h3X2NscjExbl9hZ2dyKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzKTsKK3ZvaWQgYXRoOWtfaHdfc2V0MTFuX2J1cnN0ZHVyYXRpb24oc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkJICAgdTMyIGJ1cnN0RHVyYXRpb24pOwordm9pZCBhdGg5a19od19zZXQxMW5fdmlydHVhbG1vcmVmcmFnKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLAorCQkJCSAgICAgdTMyIHZtZik7Cit2b2lkIGF0aDlrX2h3X2dldHR4aW50cnR4cXMoc3RydWN0IGF0aF9odyAqYWgsIHUzMiAqdHhxcyk7Citib29sIGF0aDlrX2h3X3NldF90eHFfcHJvcHMoc3RydWN0IGF0aF9odyAqYWgsIGludCBxLAorCQkJICAgIGNvbnN0IHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7Citib29sIGF0aDlrX2h3X2dldF90eHFfcHJvcHMoc3RydWN0IGF0aF9odyAqYWgsIGludCBxLAorCQkJICAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7CitpbnQgYXRoOWtfaHdfc2V0dXB0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCBlbnVtIGF0aDlrX3R4X3F1ZXVlIHR5cGUsCisJCQkgIGNvbnN0IHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbyk7Citib29sIGF0aDlrX2h3X3JlbGVhc2V0eHF1ZXVlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcSk7Citib29sIGF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHEpOworaW50IGF0aDlrX2h3X3J4cHJvY2Rlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQl1MzIgcGEsIHN0cnVjdCBhdGhfZGVzYyAqbmRzLCB1NjQgdHNmKTsKK2Jvb2wgYXRoOWtfaHdfc2V0dXByeGRlc2Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkgIHUzMiBzaXplLCB1MzIgZmxhZ3MpOworYm9vbCBhdGg5a19od19zZXRyeGFib3J0KHN0cnVjdCBhdGhfaHcgKmFoLCBib29sIHNldCk7Cit2b2lkIGF0aDlrX2h3X3B1dHJ4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcnhkcCk7Cit2b2lkIGF0aDlrX2h3X3J4ZW5hKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfc3RhcnRwY3VyZWNlaXZlKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfc3RvcHBjdXJlY3Yoc3RydWN0IGF0aF9odyAqYWgpOworYm9vbCBhdGg5a19od19zdG9wZG1hcmVjdihzdHJ1Y3QgYXRoX2h3ICphaCk7CisKKyNlbmRpZiAvKiBNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvbWFpbi5jCmluZGV4IDBlODA5OTAuLjEzZDRlNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9tYWluLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNSw5ICsxNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAicmVnLmgiCi0jaW5jbHVkZSAiaHcuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAjZGVmaW5lIEFUSF9QQ0lfVkVSU0lPTiAiMC4xIgogCkBAIC0yOCw4NCArMjYsMTI5IEBACiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQXRoZXJvcyA4MDIuMTFuIFdMQU4gY2FyZHMiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aF9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0gewotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDIzKSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI0KSB9LCAvKiBQQ0ktRSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI3KSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI5KSB9LCAvKiBQQ0kgICAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJBKSB9LCAvKiBQQ0ktRSAqLwotCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJCKSB9LCAvKiBQQ0ktRSAqLwotCXsgMCB9CitzdGF0aWMgaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKK21vZHVsZV9wYXJhbV9uYW1lZChub2h3Y3J5cHQsIG1vZHBhcmFtX25vaHdjcnlwdCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobm9od2NyeXB0LCAiRGlzYWJsZSBoYXJkd2FyZSBlbmNyeXB0aW9uIik7CisKKy8qIFdlIHVzZSB0aGUgaHdfdmFsdWUgYXMgYW4gaW5kZXggaW50byBvdXIgcHJpdmF0ZSBjaGFubmVsIHN0cnVjdHVyZSAqLworCisjZGVmaW5lIENIQU4yRyhfZnJlcSwgX2lkeCkgIHsgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2lkeCksIFwKKwkubWF4X3Bvd2VyID0gMzAsIFwKK30KKworI2RlZmluZSBDSEFONUcoX2ZyZXEsIF9pZHgpIHsgXAorCS5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWiwgXAorCS5jZW50ZXJfZnJlcSA9IChfZnJlcSksIFwKKwkuaHdfdmFsdWUgPSAoX2lkeCksIFwKKwkubWF4X3Bvd2VyID0gMzAsIFwKK30KKworLyogU29tZSAyIEdIeiByYWRpb3MgYXJlIGFjdHVhbGx5IHR1bmFibGUgb24gMjMxMi0yNzMyCisgKiBvbiA1IE1IeiBzdGVwcywgd2Ugc3VwcG9ydCB0aGUgY2hhbm5lbHMgd2hpY2ggd2Uga25vdworICogd2UgaGF2ZSBjYWxpYnJhdGlvbiBkYXRhIGZvciBhbGwgY2FyZHMgdGhvdWdoIHRvIG1ha2UKKyAqIHRoaXMgc3RhdGljICovCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGF0aDlrXzJnaHpfY2hhbnRhYmxlW10gPSB7CisJQ0hBTjJHKDI0MTIsIDApLCAvKiBDaGFubmVsIDEgKi8KKwlDSEFOMkcoMjQxNywgMSksIC8qIENoYW5uZWwgMiAqLworCUNIQU4yRygyNDIyLCAyKSwgLyogQ2hhbm5lbCAzICovCisJQ0hBTjJHKDI0MjcsIDMpLCAvKiBDaGFubmVsIDQgKi8KKwlDSEFOMkcoMjQzMiwgNCksIC8qIENoYW5uZWwgNSAqLworCUNIQU4yRygyNDM3LCA1KSwgLyogQ2hhbm5lbCA2ICovCisJQ0hBTjJHKDI0NDIsIDYpLCAvKiBDaGFubmVsIDcgKi8KKwlDSEFOMkcoMjQ0NywgNyksIC8qIENoYW5uZWwgOCAqLworCUNIQU4yRygyNDUyLCA4KSwgLyogQ2hhbm5lbCA5ICovCisJQ0hBTjJHKDI0NTcsIDkpLCAvKiBDaGFubmVsIDEwICovCisJQ0hBTjJHKDI0NjIsIDEwKSwgLyogQ2hhbm5lbCAxMSAqLworCUNIQU4yRygyNDY3LCAxMSksIC8qIENoYW5uZWwgMTIgKi8KKwlDSEFOMkcoMjQ3MiwgMTIpLCAvKiBDaGFubmVsIDEzICovCisJQ0hBTjJHKDI0ODQsIDEzKSwgLyogQ2hhbm5lbCAxNCAqLwogfTsKIAotc3RhdGljIHZvaWQgYXRoX2RldGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CisvKiBTb21lIDUgR0h6IHJhZGlvcyBhcmUgYWN0dWFsbHkgdHVuYWJsZSBvbiBYWFhYLVlZWVkKKyAqIG9uIDUgTUh6IHN0ZXBzLCB3ZSBzdXBwb3J0IHRoZSBjaGFubmVscyB3aGljaCB3ZSBrbm93CisgKiB3ZSBoYXZlIGNhbGlicmF0aW9uIGRhdGEgZm9yIGFsbCBjYXJkcyB0aG91Z2ggdG8gbWFrZQorICogdGhpcyBzdGF0aWMgKi8KK3N0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXRoOWtfNWdoel9jaGFudGFibGVbXSA9IHsKKwkvKiBfV2VfIGNhbGwgdGhpcyBVTklJIDEgKi8KKwlDSEFONUcoNTE4MCwgMTQpLCAvKiBDaGFubmVsIDM2ICovCisJQ0hBTjVHKDUyMDAsIDE1KSwgLyogQ2hhbm5lbCA0MCAqLworCUNIQU41Ryg1MjIwLCAxNiksIC8qIENoYW5uZWwgNDQgKi8KKwlDSEFONUcoNTI0MCwgMTcpLCAvKiBDaGFubmVsIDQ4ICovCisJLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAyICovCisJQ0hBTjVHKDUyNjAsIDE4KSwgLyogQ2hhbm5lbCA1MiAqLworCUNIQU41Ryg1MjgwLCAxOSksIC8qIENoYW5uZWwgNTYgKi8KKwlDSEFONUcoNTMwMCwgMjApLCAvKiBDaGFubmVsIDYwICovCisJQ0hBTjVHKDUzMjAsIDIxKSwgLyogQ2hhbm5lbCA2NCAqLworCS8qIF9XZV8gY2FsbCB0aGlzICJNaWRkbGUgYmFuZCIgKi8KKwlDSEFONUcoNTUwMCwgMjIpLCAvKiBDaGFubmVsIDEwMCAqLworCUNIQU41Ryg1NTIwLCAyMyksIC8qIENoYW5uZWwgMTA0ICovCisJQ0hBTjVHKDU1NDAsIDI0KSwgLyogQ2hhbm5lbCAxMDggKi8KKwlDSEFONUcoNTU2MCwgMjUpLCAvKiBDaGFubmVsIDExMiAqLworCUNIQU41Ryg1NTgwLCAyNiksIC8qIENoYW5uZWwgMTE2ICovCisJQ0hBTjVHKDU2MDAsIDI3KSwgLyogQ2hhbm5lbCAxMjAgKi8KKwlDSEFONUcoNTYyMCwgMjgpLCAvKiBDaGFubmVsIDEyNCAqLworCUNIQU41Ryg1NjQwLCAyOSksIC8qIENoYW5uZWwgMTI4ICovCisJQ0hBTjVHKDU2NjAsIDMwKSwgLyogQ2hhbm5lbCAxMzIgKi8KKwlDSEFONUcoNTY4MCwgMzEpLCAvKiBDaGFubmVsIDEzNiAqLworCUNIQU41Ryg1NzAwLCAzMiksIC8qIENoYW5uZWwgMTQwICovCisJLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAzICovCisJQ0hBTjVHKDU3NDUsIDMzKSwgLyogQ2hhbm5lbCAxNDkgKi8KKwlDSEFONUcoNTc2NSwgMzQpLCAvKiBDaGFubmVsIDE1MyAqLworCUNIQU41Ryg1Nzg1LCAzNSksIC8qIENoYW5uZWwgMTU3ICovCisJQ0hBTjVHKDU4MDUsIDM2KSwgLyogQ2hhbm5lbCAxNjEgKi8KKwlDSEFONUcoNTgyNSwgMzcpLCAvKiBDaGFubmVsIDE2NSAqLworfTsKIAotLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLwotCi1zdGF0aWMgdm9pZCBidXNfcmVhZF9jYWNoZXNpemUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCAqY3N6KQorc3RhdGljIHZvaWQgYXRoX2NhY2hlX2NvbmZfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7Ci0JdTggdTh0bXA7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShzYy0+cGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgKHU4ICopJnU4dG1wKTsKLQkqY3N6ID0gKGludCl1OHRtcDsKLQotCS8qCi0JICogVGhpcyBjaGVjayB3YXMgcHV0IGluIHRvIGF2b2lkICJ1bnBsZXNhbnQiIGNvbnNlcXVlbmNlcyBpZgotCSAqIHRoZSBib290cm9tIGhhcyBub3QgZnVsbHkgaW5pdGlhbGl6ZWQgYWxsIFBDSSBkZXZpY2VzLgotCSAqIFNvbWV0aW1lcyB0aGUgY2FjaGUgbGluZSBzaXplIHJlZ2lzdGVyIGlzIG5vdCBzZXQKLQkgKi8KLQotCWlmICgqY3N6ID09IDApCi0JCSpjc3ogPSBERUZBVUxUX0NBQ0hFTElORSA+PiAyOyAgIC8qIFVzZSB0aGUgZGVmYXVsdCBzaXplICovCi19Ci0KLXN0YXRpYyB2b2lkIGF0aF9zZXRjdXJtb2RlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBlbnVtIHdpcmVsZXNzX21vZGUgbW9kZSkKLXsKLQlzYy0+Y3VyX3JhdGVfdGFibGUgPSBzYy0+aHdfcmF0ZV90YWJsZVttb2RlXTsKLQkvKgotCSAqIEFsbCBwcm90ZWN0aW9uIGZyYW1lcyBhcmUgdHJhbnNtaXRlZCBhdCAyTWIvcyBmb3IKLQkgKiAxMWcsIG90aGVyd2lzZSBhdCAxTWIvcy4KLQkgKiBYWFggc2VsZWN0IHByb3RlY3Rpb24gcmF0ZSBpbmRleCBmcm9tIHJhdGUgdGFibGUuCi0JICovCi0Jc2MtPnNjX3Byb3RyaXggPSAobW9kZSA9PSBBVEg5S19NT0RFXzExRyA/IDEgOiAwKTsKLX0KLQotc3RhdGljIGVudW0gd2lyZWxlc3NfbW9kZSBhdGhfY2hhbjJtb2RlKHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCWlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0EpCi0JCXJldHVybiBBVEg5S19NT0RFXzExQTsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0cpCi0JCXJldHVybiBBVEg5S19NT0RFXzExRzsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0IpCi0JCXJldHVybiBBVEg5S19NT0RFXzExQjsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0FfSFQyMCkKLQkJcmV0dXJuIEFUSDlLX01PREVfMTFOQV9IVDIwOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDIwKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5HX0hUMjA7Ci0JZWxzZSBpZiAoY2hhbi0+Y2hhbm1vZGUgPT0gQ0hBTk5FTF9BX0hUNDBQTFVTKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfQV9IVDQwTUlOVVMpCi0JCXJldHVybiBBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTOwotCWVsc2UgaWYgKGNoYW4tPmNoYW5tb2RlID09IENIQU5ORUxfR19IVDQwUExVUykKLQkJcmV0dXJuIEFUSDlLX01PREVfMTFOR19IVDQwUExVUzsKLQllbHNlIGlmIChjaGFuLT5jaGFubW9kZSA9PSBDSEFOTkVMX0dfSFQ0ME1JTlVTKQotCQlyZXR1cm4gQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUzsKLQotCVdBUk5fT04oMSk7IC8qIHNob3VsZCBub3QgZ2V0IGhlcmUgKi8KLQotCXJldHVybiBBVEg5S19NT0RFXzExQjsKKwlzd2l0Y2ggKGNvbmYtPmNoYW5uZWwtPmJhbmQpIHsKKwljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCWlmIChjb25mX2lzX2h0MjAoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkdfSFQyMF07CisJCWVsc2UgaWYgKGNvbmZfaXNfaHQ0MF9taW51cyhjb25mKSkKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFOR19IVDQwTUlOVVNdOworCQllbHNlIGlmIChjb25mX2lzX2h0NDBfcGx1cyhjb25mKSkKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFOR19IVDQwUExVU107CisJCWVsc2UKKwkJCXNjLT5jdXJfcmF0ZV90YWJsZSA9CisJCQkgIHNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFHXTsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfQkFORF81R0haOgorCQlpZiAoY29uZl9pc19odDIwKGNvbmYpKQorCQkJc2MtPmN1cl9yYXRlX3RhYmxlID0KKwkJCSAgc2MtPmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV8xMU5BX0hUMjBdOworCQllbHNlIGlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTXTsKKwkJZWxzZSBpZiAoY29uZl9pc19odDQwX3BsdXMoY29uZikpCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExTkFfSFQ0MFBMVVNdOworCQllbHNlCisJCQlzYy0+Y3VyX3JhdGVfdGFibGUgPQorCQkJICBzYy0+aHdfcmF0ZV90YWJsZVtBVEg5S19NT0RFXzExQV07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVR19PTigxKTsKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhdGhfdXBkYXRlX3R4cG93KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAl1MzIgdHhwb3c7CiAKLQlpZiAoc2MtPnNjX2N1cnR4cG93ICE9IHNjLT5zY19jb25maWcudHhwb3dsaW1pdCkgewotCQlhdGg5a19od19zZXRfdHhwb3dlcmxpbWl0KGFoLCBzYy0+c2NfY29uZmlnLnR4cG93bGltaXQpOworCWlmIChzYy0+Y3VydHhwb3cgIT0gc2MtPmNvbmZpZy50eHBvd2xpbWl0KSB7CisJCWF0aDlrX2h3X3NldF90eHBvd2VybGltaXQoYWgsIHNjLT5jb25maWcudHhwb3dsaW1pdCk7CiAJCS8qIHJlYWQgYmFjayBpbiBjYXNlIHZhbHVlIGlzIGNsYW1wZWQgKi8KIAkJYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX1RYUE9XLCAxLCAmdHhwb3cpOwotCQlzYy0+c2NfY3VydHhwb3cgPSB0eHBvdzsKKwkJc2MtPmN1cnR4cG93ID0gdHhwb3c7CiAJfQogfQogCkBAIC0xNzYsMTUwICsyMTksODcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4cmF0ZXM7IGkrKykgewogCQlyYXRlW2ldLmJpdHJhdGUgPSByYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVrYnBzIC8gMTAwOwogCQlyYXRlW2ldLmh3X3ZhbHVlID0gcmF0ZV90YWJsZS0+aW5mb1tpXS5yYXRlY29kZTsKKwkJaWYgKHJhdGVfdGFibGUtPmluZm9baV0uc2hvcnRfcHJlYW1ibGUpIHsKKwkJCXJhdGVbaV0uaHdfdmFsdWVfc2hvcnQgPSByYXRlX3RhYmxlLT5pbmZvW2ldLnJhdGVjb2RlIHwKKwkJCQlyYXRlX3RhYmxlLT5pbmZvW2ldLnNob3J0X3ByZWFtYmxlOworCQkJcmF0ZVtpXS5mbGFncyA9IElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFOworCQl9CiAJCXNiYW5kLT5uX2JpdHJhdGVzKys7CisKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJSYXRlOiAlMmRNYnBzLCByYXRlY29kZTogJTJkXG4iLAogCQkJcmF0ZVtpXS5iaXRyYXRlIC8gMTAsIHJhdGVbaV0uaHdfdmFsdWUpOwogCX0KIH0KIAotc3RhdGljIGludCBhdGhfc2V0dXBfY2hhbm5lbHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCWludCBuY2hhbiwgaSwgYSA9IDAsIGIgPSAwOwotCXU4IHJlZ2NsYXNzaWRzW0FUSF9SRUdDTEFTU0lEU19NQVhdOwotCXUzMiBucmVnY2xhc3MgPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmRfMmdoejsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kXzVnaHo7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuXzJnaHo7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuXzVnaHo7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmM7Ci0KLQkvKiBGaWxsIGluIGFoLT5haF9jaGFubmVscyAqLwotCWlmICghYXRoOWtfcmVnZF9pbml0X2NoYW5uZWxzKGFoLCBBVEhfQ0hBTl9NQVgsICh1MzIgKikmbmNoYW4sCi0JCQkJICAgICAgcmVnY2xhc3NpZHMsIEFUSF9SRUdDTEFTU0lEU19NQVgsCi0JCQkJICAgICAgJm5yZWdjbGFzcywgQ1RSWV9ERUZBVUxULCBmYWxzZSwgMSkpIHsKLQkJdTMyIHJkID0gYWgtPmFoX2N1cnJlbnRSRDsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gY29sbGVjdCBjaGFubmVsIGxpc3Q7ICIKLQkJCSJyZWdkb21haW4gbGlrZWx5ICV1IGNvdW50cnkgY29kZSAldVxuIiwKLQkJCXJkLCBDVFJZX0RFRkFVTFQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQliYW5kXzJnaHogPSAmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKLQliYW5kXzVnaHogPSAmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLQljaGFuXzJnaHogPSBzYy0+Y2hhbm5lbHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JY2hhbl81Z2h6ID0gc2MtPmNoYW5uZWxzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCi0JZm9yIChpID0gMDsgaSA8IG5jaGFuOyBpKyspIHsKLQkJYyA9ICZhaC0+YWhfY2hhbm5lbHNbaV07Ci0JCWlmIChJU19DSEFOXzJHSFooYykpIHsKLQkJCWNoYW5fMmdoelthXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQkJCWNoYW5fMmdoelthXS5jZW50ZXJfZnJlcSA9IGMtPmNoYW5uZWw7Ci0JCQljaGFuXzJnaHpbYV0ubWF4X3Bvd2VyID0gYy0+bWF4VHhQb3dlcjsKLQotCQkJaWYgKGMtPnByaXZGbGFncyAmIENIQU5ORUxfRElTQUxMT1dfQURIT0MpCi0JCQkJY2hhbl8yZ2h6W2FdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX05PX0lCU1M7Ci0JCQlpZiAoYy0+Y2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9QQVNTSVZFKQotCQkJCWNoYW5fMmdoelthXS5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47Ci0KLQkJCWJhbmRfMmdoei0+bl9jaGFubmVscyA9ICsrYTsKLQotCQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICIyTUh6IGNoYW5uZWw6ICVkLCAiCi0JCQkJImNoYW5uZWxGbGFnczogMHgleFxuIiwKLQkJCQljLT5jaGFubmVsLCBjLT5jaGFubmVsRmxhZ3MpOwotCQl9IGVsc2UgaWYgKElTX0NIQU5fNUdIWihjKSkgewotCQkJY2hhbl81Z2h6W2JdLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOwotCQkJY2hhbl81Z2h6W2JdLmNlbnRlcl9mcmVxID0gYy0+Y2hhbm5lbDsKLQkJCWNoYW5fNWdoeltiXS5tYXhfcG93ZXIgPSBjLT5tYXhUeFBvd2VyOwotCi0JCQlpZiAoYy0+cHJpdkZsYWdzICYgQ0hBTk5FTF9ESVNBTExPV19BREhPQykKLQkJCQljaGFuXzVnaHpbYl0uZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKLQkJCWlmIChjLT5jaGFubmVsRmxhZ3MgJiBDSEFOTkVMX1BBU1NJVkUpCi0JCQkJY2hhbl81Z2h6W2JdLmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKLQotCQkJYmFuZF81Z2h6LT5uX2NoYW5uZWxzID0gKytiOwotCi0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIjVNSHogY2hhbm5lbDogJWQsICIKLQkJCQkiY2hhbm5lbEZsYWdzOiAweCV4XG4iLAotCQkJCWMtPmNoYW5uZWwsIGMtPmNoYW5uZWxGbGFncyk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFNldC9jaGFuZ2UgY2hhbm5lbHMuICBJZiB0aGUgY2hhbm5lbCBpcyByZWFsbHkgYmVpbmcgY2hhbmdlZCwgaXQncyBkb25lCiAgKiBieSByZXNldGluZyB0aGUgY2hpcC4gIFRvIGFjY29tcGxpc2ggdGhpcyB3ZSBtdXN0IGZpcnN0IGNsZWFudXAgYW55IHBlbmRpbmcKICAqIERNQSwgdGhlbiByZXN0YXJ0IHN0dWZmLgogKi8KLXN0YXRpYyBpbnQgYXRoX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaGNoYW4pCitpbnQgYXRoX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpoY2hhbikKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJYm9vbCBmYXN0Y2MgPSB0cnVlLCBzdG9wcGVkOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGh3LT5jb25mLmNoYW5uZWw7CisJaW50IHI7CiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkKIAkJcmV0dXJuIC1FSU87CiAKLQlpZiAoaGNoYW4tPmNoYW5uZWwgIT0gc2MtPnNjX2FoLT5haF9jdXJjaGFuLT5jaGFubmVsIHx8Ci0JICAgIGhjaGFuLT5jaGFubmVsRmxhZ3MgIT0gc2MtPnNjX2FoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MgfHwKLQkgICAgKHNjLT5zY19mbGFncyAmIFNDX09QX0NIQUlOTUFTS19VUERBVEUpIHx8Ci0JICAgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkgewotCQlpbnQgc3RhdHVzOwotCQkvKgotCQkgKiBUaGlzIGlzIG9ubHkgcGVyZm9ybWVkIGlmIHRoZSBjaGFubmVsIHNldHRpbmdzIGhhdmUKLQkJICogYWN0dWFsbHkgY2hhbmdlZC4KLQkJICoKLQkJICogVG8gc3dpdGNoIGNoYW5uZWxzIGNsZWFyIGFueSBwZW5kaW5nIERNQSBvcGVyYXRpb25zOwotCQkgKiB3YWl0IGxvbmcgZW5vdWdoIGZvciB0aGUgUlggZmlmbyB0byBkcmFpbiwgcmVzZXQgdGhlCi0JCSAqIGhhcmR3YXJlIGF0IHRoZSBuZXcgZnJlcXVlbmN5LCBhbmQgdGhlbiByZS1lbmFibGUKLQkJICogdGhlIHJlbGV2YW50IGJpdHMgb2YgdGhlIGgvdy4KLQkJICovCi0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKLQkJYXRoX2RyYWludHhxKHNjLCBmYWxzZSk7Ci0JCXN0b3BwZWQgPSBhdGhfc3RvcHJlY3Yoc2MpOworCWF0aDlrX3BzX3dha2V1cChzYyk7CiAKLQkJLyogWFhYOiBkbyBub3QgZmx1c2ggcmVjZWl2ZSBxdWV1ZSBoZXJlLiBXZSBkb24ndCB3YW50Ci0JCSAqIHRvIGZsdXNoIGRhdGEgZnJhbWVzIGFscmVhZHkgaW4gcXVldWUgYmVjYXVzZSBvZgotCQkgKiBjaGFuZ2luZyBjaGFubmVsLiAqLworCS8qCisJICogVGhpcyBpcyBvbmx5IHBlcmZvcm1lZCBpZiB0aGUgY2hhbm5lbCBzZXR0aW5ncyBoYXZlCisJICogYWN0dWFsbHkgY2hhbmdlZC4KKwkgKgorCSAqIFRvIHN3aXRjaCBjaGFubmVscyBjbGVhciBhbnkgcGVuZGluZyBETUEgb3BlcmF0aW9uczsKKwkgKiB3YWl0IGxvbmcgZW5vdWdoIGZvciB0aGUgUlggZmlmbyB0byBkcmFpbiwgcmVzZXQgdGhlCisJICogaGFyZHdhcmUgYXQgdGhlIG5ldyBmcmVxdWVuY3ksIGFuZCB0aGVuIHJlLWVuYWJsZQorCSAqIHRoZSByZWxldmFudCBiaXRzIG9mIHRoZSBoL3cuCisJICovCisJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOworCWF0aF9kcmFpbl9hbGxfdHhxKHNjLCBmYWxzZSk7CisJc3RvcHBlZCA9IGF0aF9zdG9wcmVjdihzYyk7CiAKLQkJaWYgKCFzdG9wcGVkIHx8IChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkKLQkJCWZhc3RjYyA9IGZhbHNlOworCS8qIFhYWDogZG8gbm90IGZsdXNoIHJlY2VpdmUgcXVldWUgaGVyZS4gV2UgZG9uJ3Qgd2FudAorCSAqIHRvIGZsdXNoIGRhdGEgZnJhbWVzIGFscmVhZHkgaW4gcXVldWUgYmVjYXVzZSBvZgorCSAqIGNoYW5naW5nIGNoYW5uZWwuICovCiAKLQkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCi0JCQkiKCV1IE1IeikgLT4gKCV1IE1IeiksIGNmbGFnczoleCwgY2hhbndpZHRoOiAlZFxuIiwKLQkJCXNjLT5zY19haC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCWhjaGFuLT5jaGFubmVsLCBoY2hhbi0+Y2hhbm5lbEZsYWdzLCBzYy0+dHhfY2hhbl93aWR0aCk7CisJaWYgKCFzdG9wcGVkIHx8IChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9GVUxMX1JFU0VUKSkKKwkJZmFzdGNjID0gZmFsc2U7CiAKLQkJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJaWYgKCFhdGg5a19od19yZXNldChhaCwgaGNoYW4sIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsIGZhc3RjYywgJnN0YXR1cykpIHsKLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZXNldCBjaGFubmVsICV1ICgldU1oeikgIgotCQkJCSJmbGFncyAweCV4IGhhbCBzdGF0dXMgJXVcbiIsCi0JCQkJYXRoOWtfaHdfbWh6MmllZWUoYWgsIGhjaGFuLT5jaGFubmVsLAotCQkJCQkJICBoY2hhbi0+Y2hhbm5lbEZsYWdzKSwKLQkJCQloY2hhbi0+Y2hhbm5lbCwgaGNoYW4tPmNoYW5uZWxGbGFncywgc3RhdHVzKTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJCXJldHVybiAtRUlPOwotCQl9CisJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsCisJCSIoJXUgTUh6KSAtPiAoJXUgTUh6KSwgY2hhbndpZHRoOiAlZFxuIiwKKwkJc2MtPnNjX2FoLT5jdXJjaGFuLT5jaGFubmVsLAorCQljaGFubmVsLT5jZW50ZXJfZnJlcSwgc2MtPnR4X2NoYW5fd2lkdGgpOworCisJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKKworCXIgPSBhdGg5a19od19yZXNldChhaCwgaGNoYW4sIGZhc3RjYyk7CisJaWYgKHIpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTWh6KSAiCisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCQlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7Ci0KLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9DSEFJTk1BU0tfVVBEQVRFOwotCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0ZVTExfUkVTRVQ7Ci0KLQkJaWYgKGF0aF9zdGFydHJlY3Yoc2MpICE9IDApIHsKLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZXN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQotCQlhdGhfc2V0Y3VybW9kZShzYywgYXRoX2NoYW4ybW9kZShoY2hhbikpOwotCQlhdGhfdXBkYXRlX3R4cG93KHNjKTsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5zY19pbWFzayk7CisJCXJldHVybiByOwogCX0KKwlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CisKKwlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0NIQUlOTUFTS19VUERBVEU7CisJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9GVUxMX1JFU0VUOworCisJaWYgKGF0aF9zdGFydHJlY3Yoc2MpICE9IDApIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCSJVbmFibGUgdG8gcmVzdGFydCByZWN2IGxvZ2ljXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKKwlhdGhfdXBkYXRlX3R4cG93KHNjKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzMyLDEyMyArMzEyLDEyMiBAQAogICovCiBzdGF0aWMgdm9pZCBhdGhfYW5pX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2M7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWJvb2wgbG9uZ2NhbCA9IGZhbHNlOwogCWJvb2wgc2hvcnRjYWwgPSBmYWxzZTsKIAlib29sIGFuaWZsYWcgPSBmYWxzZTsKIAl1bnNpZ25lZCBpbnQgdGltZXN0YW1wID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKLQl1MzIgY2FsX2ludGVydmFsOworCXUzMiBjYWxfaW50ZXJ2YWwsIHNob3J0X2NhbF9pbnRlcnZhbDsKIAotCXNjID0gKHN0cnVjdCBhdGhfc29mdGMgKilkYXRhOwotCWFoID0gc2MtPnNjX2FoOworCXNob3J0X2NhbF9pbnRlcnZhbCA9IChhaC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSA/CisJCUFUSF9BUF9TSE9SVF9DQUxJTlRFUlZBTCA6IEFUSF9TVEFfU0hPUlRfQ0FMSU5URVJWQUw7CiAKIAkvKgogCSogZG9uJ3QgY2FsaWJyYXRlIHdoZW4gd2UncmUgc2Nhbm5pbmcuCiAJKiB3ZSBhcmUgbW9zdCBsaWtlbHkgbm90IG9uIG91ciBob21lIGNoYW5uZWwuCiAJKi8KLQlpZiAoc2MtPnJ4LnJ4ZmlsdGVyICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCXJldHVybjsKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpCisJCWdvdG8gc2V0X3RpbWVyOwogCiAJLyogTG9uZyBjYWxpYnJhdGlvbiBydW5zIGluZGVwZW5kZW50bHkgb2Ygc2hvcnQgY2FsaWJyYXRpb24uICovCi0JaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX2xvbmdjYWxfdGltZXIpID49IEFUSF9MT05HX0NBTElOVEVSVkFMKSB7CisJaWYgKCh0aW1lc3RhbXAgLSBzYy0+YW5pLmxvbmdjYWxfdGltZXIpID49IEFUSF9MT05HX0NBTElOVEVSVkFMKSB7CiAJCWxvbmdjYWwgPSB0cnVlOwogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0FOSSwgImxvbmdjYWwgQCVsdVxuIiwgamlmZmllcyk7Ci0JCXNjLT5zY19hbmkuc2NfbG9uZ2NhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJc2MtPmFuaS5sb25nY2FsX3RpbWVyID0gdGltZXN0YW1wOwogCX0KIAotCS8qIFNob3J0IGNhbGlicmF0aW9uIGFwcGxpZXMgb25seSB3aGlsZSBzY19jYWxkb25lIGlzIGZhbHNlICovCi0JaWYgKCFzYy0+c2NfYW5pLnNjX2NhbGRvbmUpIHsKLQkJaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX3Nob3J0Y2FsX3RpbWVyKSA+PQotCQkgICAgQVRIX1NIT1JUX0NBTElOVEVSVkFMKSB7CisJLyogU2hvcnQgY2FsaWJyYXRpb24gYXBwbGllcyBvbmx5IHdoaWxlIGNhbGRvbmUgaXMgZmFsc2UgKi8KKwlpZiAoIXNjLT5hbmkuY2FsZG9uZSkgeworCQlpZiAoKHRpbWVzdGFtcCAtIHNjLT5hbmkuc2hvcnRjYWxfdGltZXIpID49IHNob3J0X2NhbF9pbnRlcnZhbCkgewogCQkJc2hvcnRjYWwgPSB0cnVlOwogCQkJRFBSSU5URihzYywgQVRIX0RCR19BTkksICJzaG9ydGNhbCBAJWx1XG4iLCBqaWZmaWVzKTsKLQkJCXNjLT5zY19hbmkuc2Nfc2hvcnRjYWxfdGltZXIgPSB0aW1lc3RhbXA7Ci0JCQlzYy0+c2NfYW5pLnNjX3Jlc2V0Y2FsX3RpbWVyID0gdGltZXN0YW1wOworCQkJc2MtPmFuaS5zaG9ydGNhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJCXNjLT5hbmkucmVzZXRjYWxfdGltZXIgPSB0aW1lc3RhbXA7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoKHRpbWVzdGFtcCAtIHNjLT5zY19hbmkuc2NfcmVzZXRjYWxfdGltZXIpID49CisJCWlmICgodGltZXN0YW1wIC0gc2MtPmFuaS5yZXNldGNhbF90aW1lcikgPj0KIAkJICAgIEFUSF9SRVNUQVJUX0NBTElOVEVSVkFMKSB7Ci0JCQlhdGg5a19od19yZXNldF9jYWx2YWxpZChhaCwgYWgtPmFoX2N1cmNoYW4sCi0JCQkJCQkmc2MtPnNjX2FuaS5zY19jYWxkb25lKTsKLQkJCWlmIChzYy0+c2NfYW5pLnNjX2NhbGRvbmUpCi0JCQkJc2MtPnNjX2FuaS5zY19yZXNldGNhbF90aW1lciA9IHRpbWVzdGFtcDsKKwkJCXNjLT5hbmkuY2FsZG9uZSA9IGF0aDlrX2h3X3Jlc2V0X2NhbHZhbGlkKGFoKTsKKwkJCWlmIChzYy0+YW5pLmNhbGRvbmUpCisJCQkJc2MtPmFuaS5yZXNldGNhbF90aW1lciA9IHRpbWVzdGFtcDsKIAkJfQogCX0KIAogCS8qIFZlcmlmeSB3aGV0aGVyIHdlIG11c3QgY2hlY2sgQU5JICovCi0JaWYgKCh0aW1lc3RhbXAgLSBzYy0+c2NfYW5pLnNjX2NoZWNrYW5pX3RpbWVyKSA+PQotCSAgIEFUSF9BTklfUE9MTElOVEVSVkFMKSB7CisJaWYgKCh0aW1lc3RhbXAgLSBzYy0+YW5pLmNoZWNrYW5pX3RpbWVyKSA+PSBBVEhfQU5JX1BPTExJTlRFUlZBTCkgewogCQlhbmlmbGFnID0gdHJ1ZTsKLQkJc2MtPnNjX2FuaS5zY19jaGVja2FuaV90aW1lciA9IHRpbWVzdGFtcDsKKwkJc2MtPmFuaS5jaGVja2FuaV90aW1lciA9IHRpbWVzdGFtcDsKIAl9CiAKIAkvKiBTa2lwIGFsbCBwcm9jZXNzaW5nIGlmIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gKi8KIAlpZiAobG9uZ2NhbCB8fCBzaG9ydGNhbCB8fCBhbmlmbGFnKSB7CiAJCS8qIENhbGwgQU5JIHJvdXRpbmUgaWYgbmVjZXNzYXJ5ICovCiAJCWlmIChhbmlmbGFnKQotCQkJYXRoOWtfaHdfYW5pX21vbml0b3IoYWgsICZzYy0+c2NfaGFsc3RhdHMsCi0JCQkJCSAgICAgYWgtPmFoX2N1cmNoYW4pOworCQkJYXRoOWtfaHdfYW5pX21vbml0b3IoYWgsICZzYy0+bm9kZXN0YXRzLCBhaC0+Y3VyY2hhbik7CiAKIAkJLyogUGVyZm9ybSBjYWxpYnJhdGlvbiBpZiBuZWNlc3NhcnkgKi8KIAkJaWYgKGxvbmdjYWwgfHwgc2hvcnRjYWwpIHsKIAkJCWJvb2wgaXNjYWxkb25lID0gZmFsc2U7CiAKLQkJCWlmIChhdGg5a19od19jYWxpYnJhdGUoYWgsIGFoLT5haF9jdXJjaGFuLAotCQkJCQkgICAgICAgc2MtPnNjX3J4X2NoYWlubWFzaywgbG9uZ2NhbCwKKwkJCWlmIChhdGg5a19od19jYWxpYnJhdGUoYWgsIGFoLT5jdXJjaGFuLAorCQkJCQkgICAgICAgc2MtPnJ4X2NoYWlubWFzaywgbG9uZ2NhbCwKIAkJCQkJICAgICAgICZpc2NhbGRvbmUpKSB7CiAJCQkJaWYgKGxvbmdjYWwpCi0JCQkJCXNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3IgPQorCQkJCQlzYy0+YW5pLm5vaXNlX2Zsb29yID0KIAkJCQkJCWF0aDlrX2h3X2dldGNoYW5fbm9pc2UoYWgsCi0JCQkJCQkJICAgICAgIGFoLT5haF9jdXJjaGFuKTsKKwkJCQkJCQkgICAgICAgYWgtPmN1cmNoYW4pOwogCiAJCQkJRFBSSU5URihzYywgQVRIX0RCR19BTkksCiAJCQkJCSJjYWxpYnJhdGUgY2hhbiAldS8leCBuZjogJWRcbiIsCi0JCQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsLAotCQkJCQlhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbEZsYWdzLAotCQkJCQlzYy0+c2NfYW5pLnNjX25vaXNlX2Zsb29yKTsKKwkJCQkJYWgtPmN1cmNoYW4tPmNoYW5uZWwsCisJCQkJCWFoLT5jdXJjaGFuLT5jaGFubmVsRmxhZ3MsCisJCQkJCXNjLT5hbmkubm9pc2VfZmxvb3IpOwogCQkJfSBlbHNlIHsKIAkJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0FOWSwKIAkJCQkJImNhbGlicmF0ZSBjaGFuICV1LyV4IGZhaWxlZFxuIiwKLQkJCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWwsCi0JCQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MpOworCQkJCQlhaC0+Y3VyY2hhbi0+Y2hhbm5lbCwKKwkJCQkJYWgtPmN1cmNoYW4tPmNoYW5uZWxGbGFncyk7CiAJCQl9Ci0JCQlzYy0+c2NfYW5pLnNjX2NhbGRvbmUgPSBpc2NhbGRvbmU7CisJCQlzYy0+YW5pLmNhbGRvbmUgPSBpc2NhbGRvbmU7CiAJCX0KIAl9CiAKK3NldF90aW1lcjoKIAkvKgogCSogU2V0IHRpbWVyIGludGVydmFsIGJhc2VkIG9uIHByZXZpb3VzIHJlc3VsdHMuCiAJKiBUaGUgaW50ZXJ2YWwgbXVzdCBiZSB0aGUgc2hvcnRlc3QgbmVjZXNzYXJ5IHRvIHNhdGlzZnkgQU5JLAogCSogc2hvcnQgY2FsaWJyYXRpb24gYW5kIGxvbmcgY2FsaWJyYXRpb24uCiAJKi8KIAljYWxfaW50ZXJ2YWwgPSBBVEhfTE9OR19DQUxJTlRFUlZBTDsKLQlpZiAoc2MtPnNjX2FoLT5haF9jb25maWcuZW5hYmxlX2FuaSkKKwlpZiAoc2MtPnNjX2FoLT5jb25maWcuZW5hYmxlX2FuaSkKIAkJY2FsX2ludGVydmFsID0gbWluKGNhbF9pbnRlcnZhbCwgKHUzMilBVEhfQU5JX1BPTExJTlRFUlZBTCk7Ci0JaWYgKCFzYy0+c2NfYW5pLnNjX2NhbGRvbmUpCi0JCWNhbF9pbnRlcnZhbCA9IG1pbihjYWxfaW50ZXJ2YWwsICh1MzIpQVRIX1NIT1JUX0NBTElOVEVSVkFMKTsKKwlpZiAoIXNjLT5hbmkuY2FsZG9uZSkKKwkJY2FsX2ludGVydmFsID0gbWluKGNhbF9pbnRlcnZhbCwgKHUzMilzaG9ydF9jYWxfaW50ZXJ2YWwpOwogCi0JbW9kX3RpbWVyKCZzYy0+c2NfYW5pLnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhjYWxfaW50ZXJ2YWwpKTsKKwltb2RfdGltZXIoJnNjLT5hbmkudGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGNhbF9pbnRlcnZhbCkpOwogfQogCiAvKgogICogVXBkYXRlIHR4L3J4IGNoYWlubWFzay4gRm9yIGxlZ2FjeSBhc3NvY2lhdGlvbiwKICAqIGhhcmQgY29kZSBjaGFpbm1hc2sgdG8gMXgxLCBmb3IgMTFuIGFzc29jaWF0aW9uLCB1c2UKLSAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbi4KKyAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbiwgZm9yIGJ0IGNvZXhpc3RlbmNlLCB1c2UKKyAqIHRoZSBjaGFpbm1hc2sgY29uZmlndXJhdGlvbiBldmVuIGluIGxlZ2FjeSBtb2RlLgogICovCi1zdGF0aWMgdm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KQordm9pZCBhdGhfdXBkYXRlX2NoYWlubWFzayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IGlzX2h0KQogewogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9DSEFJTk1BU0tfVVBEQVRFOwotCWlmIChpc19odCkgewotCQlzYy0+c2NfdHhfY2hhaW5tYXNrID0gc2MtPnNjX2FoLT5haF9jYXBzLnR4X2NoYWlubWFzazsKLQkJc2MtPnNjX3J4X2NoYWlubWFzayA9IHNjLT5zY19haC0+YWhfY2Fwcy5yeF9jaGFpbm1hc2s7CisJaWYgKGlzX2h0IHx8CisJICAgIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CVF9DT0VYKSkgeworCQlzYy0+dHhfY2hhaW5tYXNrID0gc2MtPnNjX2FoLT5jYXBzLnR4X2NoYWlubWFzazsKKwkJc2MtPnJ4X2NoYWlubWFzayA9IHNjLT5zY19haC0+Y2Fwcy5yeF9jaGFpbm1hc2s7CiAJfSBlbHNlIHsKLQkJc2MtPnNjX3R4X2NoYWlubWFzayA9IDE7Ci0JCXNjLT5zY19yeF9jaGFpbm1hc2sgPSAxOworCQlzYy0+dHhfY2hhaW5tYXNrID0gMTsKKwkJc2MtPnJ4X2NoYWlubWFzayA9IDE7CiAJfQogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJ0eCBjaG1hc2s6ICVkLCByeCBjaG1hc2s6ICVkXG4iLAotCQlzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrKTsKKwkJc2MtPnR4X2NoYWlubWFzaywgc2MtPnJ4X2NoYWlubWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aF9ub2RlX2F0dGFjaChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKQEAgLTQ3Niw3ICs0NTUsNyBAQAogc3RhdGljIHZvaWQgYXRoOWtfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWRhdGE7Ci0JdTMyIHN0YXR1cyA9IHNjLT5zY19pbnRyc3RhdHVzOworCXUzMiBzdGF0dXMgPSBzYy0+aW50cnN0YXR1czsKIAogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRkFUQUwpIHsKIAkJLyogbmVlZCBhIGNoaXAgcmVzZXQgKi8KQEAgLTQ5NiwxMyArNDc1LDEzIEBACiAJfQogCiAJLyogcmUtZW5hYmxlIGhhcmR3YXJlIGludGVycnVwdCAqLwotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPnNjX2ltYXNrKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldikKK2lycXJldHVybl90IGF0aF9pc3IoaW50IGlycSwgdm9pZCAqZGV2KQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZGV2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAllbnVtIGF0aDlrX2ludCBzdGF0dXM7CiAJYm9vbCBzY2hlZCA9IGZhbHNlOwogCkBAIC01MjcsNyArNTA2LDcgQEAKIAkJICovCiAJCWF0aDlrX2h3X2dldGlzcihhaCwgJnN0YXR1cyk7CS8qIE5COiBjbGVhcnMgSVNSIHRvbyAqLwogCi0JCXN0YXR1cyAmPSBzYy0+c2NfaW1hc2s7CS8qIGRpc2NhcmQgdW5hc2tlZC1mb3IgYml0cyAqLworCQlzdGF0dXMgJj0gc2MtPmltYXNrOwkvKiBkaXNjYXJkIHVuYXNrZWQtZm9yIGJpdHMgKi8KIAogCQkvKgogCQkgKiBJZiB0aGVyZSBhcmUgbm8gc3RhdHVzIGJpdHMgc2V0LCB0aGVuIHRoaXMgaW50ZXJydXB0IHdhcyBub3QKQEAgLTUzNiw3ICs1MTUsOCBAQAogCQlpZiAoIXN0YXR1cykKIAkJCXJldHVybiBJUlFfTk9ORTsKIAotCQlzYy0+c2NfaW50cnN0YXR1cyA9IHN0YXR1czsKKwkJc2MtPmludHJzdGF0dXMgPSBzdGF0dXM7CisJCWF0aDlrX3BzX3dha2V1cChzYyk7CiAKIAkJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9GQVRBTCkgewogCQkJLyogbmVlZCBhIGNoaXAgcmVzZXQgKi8KQEAgLTU4Myw0NSArNTYzLDM5IEBACiAJCQkJICogaXQgd2lsbCBjbGVhciB3aGF0ZXZlciBjb25kaXRpb24gY2F1c2VkCiAJCQkJICogdGhlIGludGVycnVwdC4KIAkJCQkgKi8KLQkJCQlhdGg5a19od19wcm9jbWliZXZlbnQoYWgsICZzYy0+c2NfaGFsc3RhdHMpOwotCQkJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOworCQkJCWF0aDlrX2h3X3Byb2NtaWJldmVudChhaCwgJnNjLT5ub2Rlc3RhdHMpOworCQkJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwogCQkJfQogCQkJaWYgKHN0YXR1cyAmIEFUSDlLX0lOVF9USU1fVElNRVIpIHsKLQkJCQlpZiAoIShhaC0+YWhfY2Fwcy5od19jYXBzICYKKwkJCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKIAkJCQkgICAgICBBVEg5S19IV19DQVBfQVVUT1NMRUVQKSkgewogCQkJCQkvKiBDbGVhciBSeEFib3J0IGJpdCBzbyB0aGF0IHdlIGNhbgogCQkJCQkgKiByZWNlaXZlIGZyYW1lcyAqLworCQkJCQlhdGg5a19od19zZXRwb3dlcihhaCwgQVRIOUtfUE1fQVdBS0UpOwogCQkJCQlhdGg5a19od19zZXRyeGFib3J0KGFoLCAwKTsKIAkJCQkJc2NoZWQgPSB0cnVlOworCQkJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfV0FJVF9GT1JfQkVBQ09OOwogCQkJCX0KIAkJCX0KKwkJCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfVFNGT09SKSB7CisJCQkJLyogRklYTUU6IEhhbmRsZSB0aGlzIGludGVycnVwdCBmb3IgcG93ZXIgc2F2ZSAqLworCQkJCXNjaGVkID0gdHJ1ZTsKKwkJCX0KIAkJfQorCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAl9IHdoaWxlICgwKTsKIAogCWF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzYywgc3RhdHVzKTsKIAogCWlmIChzY2hlZCkgewogCQkvKiB0dXJuIG9mZiBldmVyeSBpbnRlcnJ1cHQgZXhjZXB0IFNXQkEgKi8KLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIChzYy0+c2NfaW1hc2sgJiBBVEg5S19JTlRfU1dCQSkpOworCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9TV0JBKSk7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJnNjLT5pbnRyX3RxKTsKIAl9CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgYXRoX2dldF9jaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNjLT5zY19haC0+YWhfbmNoYW47IGkrKykgewotCQlpZiAoc2MtPnNjX2FoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsID09IGNoYW4tPmNlbnRlcl9mcmVxKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgdTMyIGF0aF9nZXRfZXh0Y2hhbm1vZGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAogCQkJICAgICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQpAQCAtNjY0LDIwICs2MzgsOSBAQAogCXJldHVybiBjaGFubW9kZTsKIH0KIAotc3RhdGljIGludCBhdGhfa2V5c2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYga2V5aXgsCi0JICAgICAgIHN0cnVjdCBhdGg5a19rZXl2YWwgKmhrLCBjb25zdCB1OCBtYWNbRVRIX0FMRU5dKQotewotCWJvb2wgc3RhdHVzOwotCi0Jc3RhdHVzID0gYXRoOWtfaHdfc2V0X2tleWNhY2hlX2VudHJ5KHNjLT5zY19haCwKLQkJa2V5aXgsIGhrLCBtYWMsIGZhbHNlKTsKLQotCXJldHVybiBzdGF0dXMgIT0gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbnQgYXRoX3NldGtleV90a2lwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYga2V5aXgsIGNvbnN0IHU4ICprZXksCi0JCQkgICBzdHJ1Y3QgYXRoOWtfa2V5dmFsICpoaywKLQkJCSAgIGNvbnN0IHU4ICphZGRyKQorCQkJICAgc3RydWN0IGF0aDlrX2tleXZhbCAqaGssIGNvbnN0IHU4ICphZGRyLAorCQkJICAgYm9vbCBhdXRoZW50aWNhdG9yKQogewogCWNvbnN0IHU4ICprZXlfcnhtaWM7CiAJY29uc3QgdTggKmtleV90eG1pYzsKQEAgLTY4NiwyNiArNjQ5LDMzIEBACiAJa2V5X3J4bWljID0ga2V5ICsgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVk7CiAKIAlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCS8qIEdyb3VwIGtleSBpbnN0YWxsYXRpb24gKi8KLQkJbWVtY3B5KGhrLT5rdl9taWMsIGtleV9yeG1pYywgc2l6ZW9mKGhrLT5rdl9taWMpKTsKLQkJcmV0dXJuIGF0aF9rZXlzZXQoc2MsIGtleWl4LCBoaywgYWRkcik7Ci0JfQotCWlmICghc2MtPnNjX3NwbGl0bWljKSB7CiAJCS8qCi0JCSAqIGRhdGEga2V5IGdvZXMgYXQgZmlyc3QgaW5kZXgsCi0JCSAqIHRoZSBoYWwgaGFuZGxlcyB0aGUgTUlDIGtleXMgYXQgaW5kZXgrNjQuCisJCSAqIEdyb3VwIGtleSBpbnN0YWxsYXRpb24gLSBvbmx5IHR3byBrZXkgY2FjaGUgZW50cmllcyBhcmUgdXNlZAorCQkgKiByZWdhcmRsZXNzIG9mIHNwbGl0bWljIGNhcGFiaWxpdHkgc2luY2UgZ3JvdXAga2V5IGlzIG9ubHkKKwkJICogdXNlZCBlaXRoZXIgZm9yIFRYIG9yIFJYLgogCQkgKi8KKwkJaWYgKGF1dGhlbnRpY2F0b3IpIHsKKwkJCW1lbWNweShoay0+a3ZfbWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CisJCQltZW1jcHkoaGstPmt2X3R4bWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoaGstPmt2X21pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOworCQkJbWVtY3B5KGhrLT5rdl90eG1pYywga2V5X3J4bWljLCBzaXplb2YoaGstPmt2X21pYykpOworCQl9CisJCXJldHVybiBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc2MtPnNjX2FoLCBrZXlpeCwgaGssIGFkZHIpOworCX0KKwlpZiAoIXNjLT5zcGxpdG1pYykgeworCQkvKiBUWCBhbmQgUlgga2V5cyBzaGFyZSB0aGUgc2FtZSBrZXkgY2FjaGUgZW50cnkuICovCiAJCW1lbWNweShoay0+a3ZfbWljLCBrZXlfcnhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7CiAJCW1lbWNweShoay0+a3ZfdHhtaWMsIGtleV90eG1pYywgc2l6ZW9mKGhrLT5rdl90eG1pYykpOwotCQlyZXR1cm4gYXRoX2tleXNldChzYywga2V5aXgsIGhrLCBhZGRyKTsKKwkJcmV0dXJuIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4LCBoaywgYWRkcik7CiAJfQotCS8qCi0JICogVFgga2V5IGdvZXMgYXQgZmlyc3QgaW5kZXgsIFJYIGtleSBhdCArMzIuCi0JICogVGhlIGhhbCBoYW5kbGVzIHRoZSBNSUMga2V5cyBhdCBpbmRleCs2NC4KLQkgKi8KKworCS8qIFNlcGFyYXRlIGtleSBjYWNoZSBlbnRyaWVzIGZvciBUWCBhbmQgUlggKi8KKworCS8qIFRYIGtleSBnb2VzIGF0IGZpcnN0IGluZGV4LCBSWCBrZXkgYXQgKzMyLiAqLwogCW1lbWNweShoay0+a3ZfbWljLCBrZXlfdHhtaWMsIHNpemVvZihoay0+a3ZfbWljKSk7Ci0JaWYgKCFhdGhfa2V5c2V0KHNjLCBrZXlpeCwgaGssIE5VTEwpKSB7Ci0JCS8qIFR4bWljIGVudHJ5IGZhaWxlZC4gTm8gbmVlZCB0byBwcm9jZWVkIGZ1cnRoZXIgKi8KKwlpZiAoIWF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4LCBoaywgTlVMTCkpIHsKKwkJLyogVFggTUlDIGVudHJ5IGZhaWxlZC4gTm8gbmVlZCB0byBwcm9jZWVkIGZ1cnRoZXIgKi8KIAkJRFBSSU5URihzYywgQVRIX0RCR19LRVlDQUNIRSwKIAkJCSJTZXR0aW5nIFRYIE1JQyBLZXkgRmFpbGVkXG4iKTsKIAkJcmV0dXJuIDA7CkBAIC03MTMsMjAgKzY4MywyMCBAQAogCiAJbWVtY3B5KGhrLT5rdl9taWMsIGtleV9yeG1pYywgc2l6ZW9mKGhrLT5rdl9taWMpKTsKIAkvKiBYWFggZGVsZXRlIHR4IGtleSBvbiBmYWlsdXJlPyAqLwotCXJldHVybiBhdGhfa2V5c2V0KHNjLCBrZXlpeCArIDMyLCBoaywgYWRkcik7CisJcmV0dXJuIGF0aDlrX2h3X3NldF9rZXljYWNoZV9lbnRyeShzYy0+c2NfYWgsIGtleWl4ICsgMzIsIGhrLCBhZGRyKTsKIH0KIAogc3RhdGljIGludCBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdF90a2lwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCWludCBpOwogCi0JZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPnNjX2tleW1heCAvIDI7IGkrKykgewotCQlpZiAodGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgfHwKLQkJICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPnNjX2tleW1hcCkpCisJZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPmtleW1heCAvIDI7IGkrKykgeworCQlpZiAodGVzdF9iaXQoaSwgc2MtPmtleW1hcCkgfHwKKwkJICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpCiAJCQljb250aW51ZTsgLyogQXQgbGVhc3Qgb25lIHBhcnQgb2YgVEtJUCBrZXkgYWxsb2NhdGVkICovCi0JCWlmIChzYy0+c2Nfc3BsaXRtaWMgJiYKLQkJICAgICh0ZXN0X2JpdChpICsgMzIsIHNjLT5zY19rZXltYXApIHx8Ci0JCSAgICAgdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApKSkKKwkJaWYgKHNjLT5zcGxpdG1pYyAmJgorCQkgICAgKHRlc3RfYml0KGkgKyAzMiwgc2MtPmtleW1hcCkgfHwKKwkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPmtleW1hcCkpKQogCQkJY29udGludWU7IC8qIEF0IGxlYXN0IG9uZSBwYXJ0IG9mIFRLSVAga2V5IGFsbG9jYXRlZCAqLwogCiAJCS8qIEZvdW5kIGEgZnJlZSBzbG90IGZvciBhIFRLSVAga2V5ICovCkBAIC03NDAsNTUgKzcxMCw1NSBAQAogCWludCBpOwogCiAJLyogRmlyc3QsIHRyeSB0byBmaW5kIHNsb3RzIHRoYXQgd291bGQgbm90IGJlIGF2YWlsYWJsZSBmb3IgVEtJUC4gKi8KLQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7Ci0JCWZvciAoaSA9IElFRUU4MDIxMV9XRVBfTktJRDsgaSA8IHNjLT5zY19rZXltYXggLyA0OyBpKyspIHsKLQkJCWlmICghdGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgJiYKLQkJCSAgICAodGVzdF9iaXQoaSArIDMyLCBzYy0+c2Nfa2V5bWFwKSB8fAotCQkJICAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+c2Nfa2V5bWFwKSkpCisJaWYgKHNjLT5zcGxpdG1pYykgeworCQlmb3IgKGkgPSBJRUVFODAyMTFfV0VQX05LSUQ7IGkgPCBzYy0+a2V5bWF4IC8gNDsgaSsrKSB7CisJCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgKHRlc3RfYml0KGkgKyAzMiwgc2MtPmtleW1hcCkgfHwKKwkJCSAgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPmtleW1hcCkpKQogCQkJCXJldHVybiBpOwotCQkJaWYgKCF0ZXN0X2JpdChpICsgMzIsIHNjLT5zY19rZXltYXApICYmCi0JCQkgICAgKHRlc3RfYml0KGksIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApKSkKKwkJCWlmICghdGVzdF9iaXQoaSArIDMyLCBzYy0+a2V5bWFwKSAmJgorCQkJICAgICh0ZXN0X2JpdChpLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSkpCiAJCQkJcmV0dXJuIGkgKyAzMjsKLQkJCWlmICghdGVzdF9iaXQoaSArIDY0LCBzYy0+c2Nfa2V5bWFwKSAmJgotCQkJICAgICh0ZXN0X2JpdChpICwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDMyLCBzYy0+c2Nfa2V5bWFwKSB8fAotCQkJICAgICB0ZXN0X2JpdChpICsgNjQgKyAzMiwgc2MtPnNjX2tleW1hcCkpKQorCQkJaWYgKCF0ZXN0X2JpdChpICsgNjQsIHNjLT5rZXltYXApICYmCisJCQkgICAgKHRlc3RfYml0KGkgLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgMzIsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSkpCiAJCQkJcmV0dXJuIGkgKyA2NDsKLQkJCWlmICghdGVzdF9iaXQoaSArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApICYmCi0JCQkgICAgKHRlc3RfYml0KGksIHNjLT5zY19rZXltYXApIHx8Ci0JCQkgICAgIHRlc3RfYml0KGkgKyAzMiwgc2MtPnNjX2tleW1hcCkgfHwKLQkJCSAgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+c2Nfa2V5bWFwKSkpCisJCQlpZiAoIXRlc3RfYml0KGkgKyA2NCArIDMyLCBzYy0+a2V5bWFwKSAmJgorCQkJICAgICh0ZXN0X2JpdChpLCBzYy0+a2V5bWFwKSB8fAorCQkJICAgICB0ZXN0X2JpdChpICsgMzIsIHNjLT5rZXltYXApIHx8CisJCQkgICAgIHRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpKQogCQkJCXJldHVybiBpICsgNjQgKyAzMjsKIAkJfQogCX0gZWxzZSB7Ci0JCWZvciAoaSA9IElFRUU4MDIxMV9XRVBfTktJRDsgaSA8IHNjLT5zY19rZXltYXggLyAyOyBpKyspIHsKLQkJCWlmICghdGVzdF9iaXQoaSwgc2MtPnNjX2tleW1hcCkgJiYKLQkJCSAgICB0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApKQorCQlmb3IgKGkgPSBJRUVFODAyMTFfV0VQX05LSUQ7IGkgPCBzYy0+a2V5bWF4IC8gMjsgaSsrKSB7CisJCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgdGVzdF9iaXQoaSArIDY0LCBzYy0+a2V5bWFwKSkKIAkJCQlyZXR1cm4gaTsKLQkJCWlmICh0ZXN0X2JpdChpLCBzYy0+c2Nfa2V5bWFwKSAmJgotCQkJICAgICF0ZXN0X2JpdChpICsgNjQsIHNjLT5zY19rZXltYXApKQorCQkJaWYgKHRlc3RfYml0KGksIHNjLT5rZXltYXApICYmCisJCQkgICAgIXRlc3RfYml0KGkgKyA2NCwgc2MtPmtleW1hcCkpCiAJCQkJcmV0dXJuIGkgKyA2NDsKIAkJfQogCX0KIAogCS8qIE5vIHBhcnRpYWxseSB1c2VkIFRLSVAgc2xvdHMsIHBpY2sgYW55IGF2YWlsYWJsZSBzbG90ICovCi0JZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPnNjX2tleW1heDsgaSsrKSB7CisJZm9yIChpID0gSUVFRTgwMjExX1dFUF9OS0lEOyBpIDwgc2MtPmtleW1heDsgaSsrKSB7CiAJCS8qIERvIG5vdCBhbGxvdyBzbG90cyB0aGF0IGNvdWxkIGJlIG5lZWRlZCBmb3IgVEtJUCBncm91cCBrZXlzCiAJCSAqIHRvIGJlIHVzZWQuIFRoaXMgbGltaXRhdGlvbiBjb3VsZCBiZSByZW1vdmVkIGlmIHdlIGtub3cgdGhhdAogCQkgKiBUS0lQIHdpbGwgbm90IGJlIHVzZWQuICovCiAJCWlmIChpID49IDY0ICYmIGkgPCA2NCArIElFRUU4MDIxMV9XRVBfTktJRCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7CisJCWlmIChzYy0+c3BsaXRtaWMpIHsKIAkJCWlmIChpID49IDMyICYmIGkgPCAzMiArIElFRUU4MDIxMV9XRVBfTktJRCkKIAkJCQljb250aW51ZTsKIAkJCWlmIChpID49IDY0ICsgMzIgJiYgaSA8IDY0ICsgMzIgKyBJRUVFODAyMTFfV0VQX05LSUQpCiAJCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoIXRlc3RfYml0KGksIHNjLT5zY19rZXltYXApKQorCQlpZiAoIXRlc3RfYml0KGksIHNjLT5rZXltYXApKQogCQkJcmV0dXJuIGk7IC8qIEZvdW5kIGEgZnJlZSBzbG90IGZvciBhIGtleSAqLwogCX0KIApAQCAtNzk3LDcgKzc2Nyw4IEBACiB9CiAKIHN0YXRpYyBpbnQgYXRoX2tleV9jb25maWcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgIGNvbnN0IHU4ICphZGRyLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGF0aDlrX2tleXZhbCBoazsKQEAgLTgxOCw3ICs3ODksNyBAQAogCQloay5rdl90eXBlID0gQVRIOUtfQ0lQSEVSX0FFU19DQ007CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiAJaGsua3ZfbGVuID0ga2V5LT5rZXlsZW47CkBAIC04MjksMTAgKzgwMCwxMCBAQAogCQkgKiBuZWVkIHRvIGNoYW5nZSB3aXRoIHZpcnR1YWwgaW50ZXJmYWNlcy4gKi8KIAkJaWR4ID0ga2V5LT5rZXlpZHg7CiAJfSBlbHNlIGlmIChrZXktPmtleWlkeCkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCQlpZiAoV0FSTl9PTighc3RhKSkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJbWFjID0gc3RhLT5hZGRyOwogCi0JCW1hYyA9IGFkZHI7Ci0JCXZpZiA9IHNjLT5zY192YXBzWzBdOwogCQlpZiAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCQkvKiBPbmx5IGtleWlkeCAwIHNob3VsZCBiZSB1c2VkIHdpdGggdW5pY2FzdCBrZXksIGJ1dAogCQkJICogYWxsb3cgdGhpcyBmb3IgY2xpZW50IG1vZGUgZm9yIG5vdy4gKi8KQEAgLTg0MCwyOSArODExLDMzIEBACiAJCX0gZWxzZQogCQkJcmV0dXJuIC1FSU87CiAJfSBlbHNlIHsKLQkJbWFjID0gYWRkcjsKKwkJaWYgKFdBUk5fT04oIXN0YSkpCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCW1hYyA9IHN0YS0+YWRkcjsKKwogCQlpZiAoa2V5LT5hbGcgPT0gQUxHX1RLSVApCiAJCQlpZHggPSBhdGhfcmVzZXJ2ZV9rZXlfY2FjaGVfc2xvdF90a2lwKHNjKTsKIAkJZWxzZQogCQkJaWR4ID0gYXRoX3Jlc2VydmVfa2V5X2NhY2hlX3Nsb3Qoc2MpOwogCQlpZiAoaWR4IDwgMCkKLQkJCXJldHVybiAtRUlPOyAvKiBubyBmcmVlIGtleSBjYWNoZSBlbnRyaWVzICovCisJCQlyZXR1cm4gLUVOT1NQQzsgLyogbm8gZnJlZSBrZXkgY2FjaGUgZW50cmllcyAqLwogCX0KIAogCWlmIChrZXktPmFsZyA9PSBBTEdfVEtJUCkKLQkJcmV0ID0gYXRoX3NldGtleV90a2lwKHNjLCBpZHgsIGtleS0+a2V5LCAmaGssIG1hYyk7CisJCXJldCA9IGF0aF9zZXRrZXlfdGtpcChzYywgaWR4LCBrZXktPmtleSwgJmhrLCBtYWMsCisJCQkJICAgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKTsKIAllbHNlCi0JCXJldCA9IGF0aF9rZXlzZXQoc2MsIGlkeCwgJmhrLCBtYWMpOworCQlyZXQgPSBhdGg5a19od19zZXRfa2V5Y2FjaGVfZW50cnkoc2MtPnNjX2FoLCBpZHgsICZoaywgbWFjKTsKIAogCWlmICghcmV0KQogCQlyZXR1cm4gLUVJTzsKIAotCXNldF9iaXQoaWR4LCBzYy0+c2Nfa2V5bWFwKTsKKwlzZXRfYml0KGlkeCwgc2MtPmtleW1hcCk7CiAJaWYgKGtleS0+YWxnID09IEFMR19US0lQKSB7Ci0JCXNldF9iaXQoaWR4ICsgNjQsIHNjLT5zY19rZXltYXApOwotCQlpZiAoc2MtPnNjX3NwbGl0bWljKSB7Ci0JCQlzZXRfYml0KGlkeCArIDMyLCBzYy0+c2Nfa2V5bWFwKTsKLQkJCXNldF9iaXQoaWR4ICsgNjQgKyAzMiwgc2MtPnNjX2tleW1hcCk7CisJCXNldF9iaXQoaWR4ICsgNjQsIHNjLT5rZXltYXApOworCQlpZiAoc2MtPnNwbGl0bWljKSB7CisJCQlzZXRfYml0KGlkeCArIDMyLCBzYy0+a2V5bWFwKTsKKwkJCXNldF9iaXQoaWR4ICsgNjQgKyAzMiwgc2MtPmtleW1hcCk7CiAJCX0KIAl9CiAKQEAgLTg3NSwxOCArODUwLDE5IEBACiAJaWYgKGtleS0+aHdfa2V5X2lkeCA8IElFRUU4MDIxMV9XRVBfTktJRCkKIAkJcmV0dXJuOwogCi0JY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCwgc2MtPnNjX2tleW1hcCk7CisJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCwgc2MtPmtleW1hcCk7CiAJaWYgKGtleS0+YWxnICE9IEFMR19US0lQKQogCQlyZXR1cm47CiAKLQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgNjQsIHNjLT5zY19rZXltYXApOwotCWlmIChzYy0+c2Nfc3BsaXRtaWMpIHsKLQkJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCArIDMyLCBzYy0+c2Nfa2V5bWFwKTsKLQkJY2xlYXJfYml0KGtleS0+aHdfa2V5X2lkeCArIDY0ICsgMzIsIHNjLT5zY19rZXltYXApOworCWNsZWFyX2JpdChrZXktPmh3X2tleV9pZHggKyA2NCwgc2MtPmtleW1hcCk7CisJaWYgKHNjLT5zcGxpdG1pYykgeworCQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgMzIsIHNjLT5rZXltYXApOworCQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgNjQgKyAzMiwgc2MtPmtleW1hcCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzZXR1cF9odF9jYXAoc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9pbmZvKQorc3RhdGljIHZvaWQgc2V0dXBfaHRfY2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfaW5mbykKIHsKICNkZWZpbmUJQVRIOUtfSFRfQ0FQX01BWFJYQU1QRFVfNjU1MzYgMHgzCS8qIDIgXiAxNiAqLwogI2RlZmluZQlBVEg5S19IVF9DQVBfTVBEVURFTlNJVFlfOCAweDYJCS8qIDggdXNlYyAqLwpAQCAtODk5LDEwICs4NzUsMjMgQEAKIAogCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IEFUSDlLX0hUX0NBUF9NQVhSWEFNUERVXzY1NTM2OwogCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBBVEg5S19IVF9DQVBfTVBEVURFTlNJVFlfODsKKwogCS8qIHNldCB1cCBzdXBwb3J0ZWQgbWNzIHNldCAqLwogCW1lbXNldCgmaHRfaW5mby0+bWNzLCAwLCBzaXplb2YoaHRfaW5mby0+bWNzKSk7Ci0JaHRfaW5mby0+bWNzLnJ4X21hc2tbMF0gPSAweGZmOwotCWh0X2luZm8tPm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKKworCXN3aXRjaChzYy0+cnhfY2hhaW5tYXNrKSB7CisJY2FzZSAxOgorCQlodF9pbmZvLT5tY3MucnhfbWFza1swXSA9IDB4ZmY7CisJCWJyZWFrOworCWNhc2UgMzoKKwljYXNlIDU6CisJY2FzZSA3OgorCWRlZmF1bHQ6CisJCWh0X2luZm8tPm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKKwkJaHRfaW5mby0+bWNzLnJ4X21hc2tbMV0gPSAweGZmOworCQlicmVhazsKKwl9CisKIAlodF9pbmZvLT5tY3MudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVEOwogfQogCkBAIC05MTAsMzYgKzg5OSwzMyBAQAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAKIAlpZiAoYnNzX2NvbmYtPmFzc29jKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQnNzIEluZm8gQVNTT0MgJWQsIGJzc2lkOiAlcE1cbiIsCi0JCQlic3NfY29uZi0+YWlkLCBzYy0+c2NfY3VyYnNzaWQpOworCQkJYnNzX2NvbmYtPmFpZCwgc2MtPmN1cmJzc2lkKTsKIAogCQkvKiBOZXcgYXNzb2NpYXRpb24sIHN0b3JlIGFpZCAqLwogCQlpZiAoYXZwLT5hdl9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJc2MtPnNjX2N1cmFpZCA9IGJzc19jb25mLT5haWQ7Ci0JCQlhdGg5a19od193cml0ZV9hc3NvY2lkKHNjLT5zY19haCwgc2MtPnNjX2N1cmJzc2lkLAotCQkJCQkgICAgICAgc2MtPnNjX2N1cmFpZCk7CisJCQlzYy0+Y3VyYWlkID0gYnNzX2NvbmYtPmFpZDsKKwkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCQl9CiAKIAkJLyogQ29uZmlndXJlIHRoZSBiZWFjb24gKi8KLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIDApOwotCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OUzsKKwkJYXRoX2JlYWNvbl9jb25maWcoc2MsIHZpZik7CiAKIAkJLyogUmVzZXQgcnNzaSBzdGF0cyAqLwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZnYnJzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7Ci0JCXNjLT5zY19oYWxzdGF0cy5uc19hdmdyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZndHhyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOwotCQlzYy0+c2NfaGFsc3RhdHMubnNfYXZndHhyYXRlID0gQVRIX1JBVEVfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z2Jyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z3Jzc2kgPSBBVEhfUlNTSV9EVU1NWV9NQVJLRVI7CisJCXNjLT5ub2Rlc3RhdHMubnNfYXZndHhyc3NpID0gQVRIX1JTU0lfRFVNTVlfTUFSS0VSOworCQlzYy0+bm9kZXN0YXRzLm5zX2F2Z3R4cmF0ZSA9IEFUSF9SQVRFX0RVTU1ZX01BUktFUjsKIAogCQkvKiBTdGFydCBBTkkgKi8KLQkJbW9kX3RpbWVyKCZzYy0+c2NfYW5pLnRpbWVyLAotCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIX0FOSV9QT0xMSU5URVJWQUwpKTsKLQorCQltb2RfdGltZXIoJnNjLT5hbmkudGltZXIsCisJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEFUSF9BTklfUE9MTElOVEVSVkFMKSk7CiAJfSBlbHNlIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJCc3MgSW5mbyBESVNTT0NcbiIpOwotCQlzYy0+c2NfY3VyYWlkID0gMDsKKwkJc2MtPmN1cmFpZCA9IDA7CiAJfQogfQogCkBAIC05NDcsNiArOTMzLDM5IEBACiAvKgkgTEVEIGZ1bmN0aW9ucwkJKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHZvaWQgYXRoX2xlZF9ibGlua193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAorCQkJCQkgICAgYXRoX2xlZF9ibGlua193b3JrLndvcmspOworCisJaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX0FTU09DSUFURUQpKQorCQlyZXR1cm47CisKKwlpZiAoKHNjLT5sZWRfb25fZHVyYXRpb24gPT0gQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFKSB8fAorCSAgICAoc2MtPmxlZF9vZmZfZHVyYXRpb24gPT0gQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRSkpCisJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDApOworCWVsc2UKKwkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwKKwkJCQkgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfT04pID8gMSA6IDApOworCisJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLCAmc2MtPmF0aF9sZWRfYmxpbmtfd29yaywKKwkJCSAgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfT04pID8KKwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoc2MtPmxlZF9vZmZfZHVyYXRpb24pIDoKKwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoc2MtPmxlZF9vbl9kdXJhdGlvbikpOworCisJc2MtPmxlZF9vbl9kdXJhdGlvbiA9IHNjLT5sZWRfb25fY250ID8KKwkJCW1heCgoQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFIC0gc2MtPmxlZF9vbl9jbnQpLCAyNSkgOgorCQkJQVRIX0xFRF9PTl9EVVJBVElPTl9JRExFOworCXNjLT5sZWRfb2ZmX2R1cmF0aW9uID0gc2MtPmxlZF9vZmZfY250ID8KKwkJCW1heCgoQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRSAtIHNjLT5sZWRfb2ZmX2NudCksIDEwKSA6CisJCQlBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFOworCXNjLT5sZWRfb25fY250ID0gc2MtPmxlZF9vZmZfY250ID0gMDsKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKQorCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwllbHNlCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfT047Cit9CisKIHN0YXRpYyB2b2lkIGF0aF9sZWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCSAgICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7CkBAIC05NTYsMTYgKzk3NSwyNyBAQAogCXN3aXRjaCAoYnJpZ2h0bmVzcykgewogCWNhc2UgTEVEX09GRjoKIAkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQyB8fAotCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKQorCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSB7CisJCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLAorCQkJCShsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pKTsKIAkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7Ci0JCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCi0JCQkJKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykgPyAxIDoKLQkJCQkhIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfQVNTT0NJQVRFRCkpOworCQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykKKwkJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb2ZmX2NudCsrOworCQl9CiAJCWJyZWFrOwogCWNhc2UgTEVEX0ZVTEw6Ci0JCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpCisJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpIHsKIAkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfQVNTT0NJQVRFRDsKLQkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMCk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsCisJCQkJCSAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLCAwKTsKKwkJfSBlbHNlIGlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKKwkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDApOworCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb25fY250Kys7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0xMDAxLDYgKzEwMzEsNyBAQAogCiBzdGF0aWMgdm9pZCBhdGhfZGVpbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+YXRoX2xlZF9ibGlua193b3JrKTsKIAlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT5hc3NvY19sZWQpOwogCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7CiAJYXRoX3VucmVnaXN0ZXJfbGVkKCZzYy0+dHhfbGVkKTsKQEAgLTEwMjAsOSArMTA1MSwxMSBAQAogCS8qIExFRCBvZmYsIGFjdGl2ZSBsb3cgKi8KIAlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKIAorCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+YXRoX2xlZF9ibGlua193b3JrLCBhdGhfbGVkX2JsaW5rX3dvcmspOworCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUoc2MtPmh3KTsKIAlzbnByaW50ZihzYy0+cmFkaW9fbGVkLm5hbWUsIHNpemVvZihzYy0+cmFkaW9fbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6cmFkaW8iLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwkJImF0aDlrLSVzOjpyYWRpbyIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cmFkaW9fbGVkLCB0cmlnZ2VyKTsKIAlzYy0+cmFkaW9fbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SQURJTzsKIAlpZiAocmV0KQpAQCAtMTAzMCw3ICsxMDYzLDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X2Fzc29jX2xlZF9uYW1lKHNjLT5odyk7CiAJc25wcmludGYoc2MtPmFzc29jX2xlZC5uYW1lLCBzaXplb2Yoc2MtPmFzc29jX2xlZC5uYW1lKSwKLQkJImF0aDlrLSVzOmFzc29jIiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CisJCSJhdGg5ay0lczo6YXNzb2MiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKIAlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPmFzc29jX2xlZCwgdHJpZ2dlcik7CiAJc2MtPmFzc29jX2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfQVNTT0M7CiAJaWYgKHJldCkKQEAgLTEwMzgsNyArMTA3MSw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShzYy0+aHcpOwogCXNucHJpbnRmKHNjLT50eF9sZWQubmFtZSwgc2l6ZW9mKHNjLT50eF9sZWQubmFtZSksCi0JCSJhdGg5ay0lczp0eCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCQkiYXRoOWstJXM6OnR4Iiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CiAJcmV0ID0gYXRoX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIHRyaWdnZXIpOwogCXNjLT50eF9sZWQubGVkX3R5cGUgPSBBVEhfTEVEX1RYOwogCWlmIChyZXQpCkBAIC0xMDQ2LDcgKzEwNzksNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcnhfbGVkX25hbWUoc2MtPmh3KTsKIAlzbnByaW50ZihzYy0+cnhfbGVkLm5hbWUsIHNpemVvZihzYy0+cnhfbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6cngiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwkJImF0aDlrLSVzOjpyeCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCB0cmlnZ2VyKTsKIAlzYy0+cnhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SWDsKIAlpZiAocmV0KQpAQCAtMTA1OCwzMiArMTA5MSwyMiBAQAogCWF0aF9kZWluaXRfbGVkcyhzYyk7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCi0KLS8qKioqKioqKioqKioqKioqKioqLwotLyoJUmZraWxsCSAgICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3ZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0JaW50IHN0YXR1czsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBzYy0+aHctPmNvbmYuY2hhbm5lbDsKKwlpbnQgcjsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlpZiAoIWF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+YWhfY3VyY2hhbiwKLQkJCSAgICBzYy0+dHhfY2hhbl93aWR0aCwKLQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLAotCQkJICAgIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX2h0X2V4dHByb3RzcGFjaW5nLAotCQkJICAgIGZhbHNlLCAmc3RhdHVzKSkgeworCisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOworCisJaWYgKHIpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAldSAoJXVNaHopICIKLQkJCSJmbGFncyAweCV4IGhhbCBzdGF0dXMgJXVcbiIsCi0JCQlhdGg5a19od19taHoyaWVlZShhaCwKLQkJCQkJICBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCQkJICBhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbEZsYWdzKSwKLQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsLAotCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncywgc3RhdHVzKTsKKwkJCSJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAldSAoJXVNaHopICIsCisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAKQEAgLTEwOTUsMTAgKzExMTgsMTAgQEAKIAl9CiAKIAlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfQkVBQ09OUykKLQkJYXRoX2JlYWNvbl9jb25maWcoc2MsIEFUSF9JRl9JRF9BTlkpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KKwkJYXRoX2JlYWNvbl9jb25maWcoc2MsIE5VTEwpOwkvKiByZXN0YXJ0IGJlYWNvbnMgKi8KIAogCS8qIFJlLUVuYWJsZSAgaW50ZXJydXB0cyAqLwotCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+c2NfaW1hc2spOworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwogCiAJLyogRW5hYmxlIExFRCAqLwogCWF0aDlrX2h3X2NmZ19vdXRwdXQoYWgsIEFUSF9MRURfUElOLApAQCAtMTEwNiwxNCArMTEyOSwxNiBAQAogCWF0aDlrX2h3X3NldF9ncGlvKGFoLCBBVEhfTEVEX1BJTiwgMCk7CiAKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3JhZGlvX2Rpc2FibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit2b2lkIGF0aF9yYWRpb19kaXNhYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlpbnQgc3RhdHVzOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IHNjLT5ody0+Y29uZi5jaGFubmVsOworCWludCByOwogCi0KKwlhdGg5a19wc193YWtldXAoc2MpOwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhzYy0+aHcpOwogCiAJLyogRGlzYWJsZSBMRUQgKi8KQEAgLTExMjMsMzggKzExNDgsMzcgQEAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7CiAKLQlhdGhfZHJhaW50eHEoc2MsIGZhbHNlKTsJLyogY2xlYXIgcGVuZGluZyB0eCBmcmFtZXMgKi8KKwlhdGhfZHJhaW5fYWxsX3R4cShzYywgZmFsc2UpOwkvKiBjbGVhciBwZW5kaW5nIHR4IGZyYW1lcyAqLwogCWF0aF9zdG9wcmVjdihzYyk7CQkvKiB0dXJuIG9mZiBmcmFtZSByZWN2ICovCiAJYXRoX2ZsdXNocmVjdihzYyk7CQkvKiBmbHVzaCByZWN2IHF1ZXVlICovCiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5haF9jdXJjaGFuLAotCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX3J4X2NoYWlubWFzaywKLQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsCi0JCQkgICAgZmFsc2UsICZzdGF0dXMpKSB7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOworCWlmIChyKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiVW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgJXUgKCV1TWh6KSAiCi0JCQkiZmxhZ3MgMHgleCBoYWwgc3RhdHVzICV1XG4iLAotCQkJYXRoOWtfaHdfbWh6MmllZWUoYWgsCi0JCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWwsCi0JCQkJYWgtPmFoX2N1cmNoYW4tPmNoYW5uZWxGbGFncyksCi0JCQlhaC0+YWhfY3VyY2hhbi0+Y2hhbm5lbCwKLQkJCWFoLT5haF9jdXJjaGFuLT5jaGFubmVsRmxhZ3MsIHN0YXR1cyk7CisJCQkicmVzZXQgc3RhdHVzICV1XG4iLAorCQkJY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3Jlc2V0bG9jayk7CiAKIAlhdGg5a19od19waHlfZGlzYWJsZShhaCk7CiAJYXRoOWtfaHdfc2V0cG93ZXIoYWgsIEFUSDlLX1BNX0ZVTExfU0xFRVApOworCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQorCisvKioqKioqKioqKioqKioqKioqKi8KKy8qCVJma2lsbAkgICAqLworLyoqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyBib29sIGF0aF9pc19yZmtpbGxfc2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAotCXJldHVybiBhdGg5a19od19ncGlvX2dldChhaCwgYWgtPmFoX3Jma2lsbF9ncGlvKSA9PQotCQkJCSAgYWgtPmFoX3Jma2lsbF9wb2xhcml0eTsKKwlyZXR1cm4gYXRoOWtfaHdfZ3Bpb19nZXQoYWgsIGFoLT5yZmtpbGxfZ3BpbykgPT0KKwkJCQkgIGFoLT5yZmtpbGxfcG9sYXJpdHk7CiB9CiAKIC8qIGgvdyByZmtpbGwgcG9sbCBmdW5jdGlvbiAqLwpAQCAtMTIzOCw3ICsxMjYyLDcgQEAKIAl9CiAKIAlzbnByaW50ZihzYy0+cmZfa2lsbC5yZmtpbGxfbmFtZSwgc2l6ZW9mKHNjLT5yZl9raWxsLnJma2lsbF9uYW1lKSwKLQkJImF0aDlrLSVzOnJma2lsbCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCQkiYXRoOWstJXM6OnJma2lsbCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwogCXNjLT5yZl9raWxsLnJma2lsbC0+bmFtZSA9IHNjLT5yZl9raWxsLnJma2lsbF9uYW1lOwogCXNjLT5yZl9raWxsLnJma2lsbC0+ZGF0YSA9IHNjOwogCXNjLT5yZl9raWxsLnJma2lsbC0+dG9nZ2xlX3JhZGlvID0gYXRoX3N3X3RvZ2dsZV9yYWRpbzsKQEAgLTEyNTEsNyArMTI3NSw3IEBACiAvKiBEZWluaXRpYWxpemUgcmZraWxsICovCiBzdGF0aWMgdm9pZCBhdGhfZGVpbml0X3Jma2lsbChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsKTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9SRktJTExfUkVHSVNURVJFRCkgewpAQCAtMTI2Myw3ICsxMjg3LDcgQEAKIAogc3RhdGljIGludCBhdGhfc3RhcnRfcmZraWxsX3BvbGwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0JaWYgKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKIAkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLAogCQkJCSAgICZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgMCk7CiAKQEAgLTEyNzQsMTMgKzEyOTgsNyBAQAogCQkJcmZraWxsX2ZyZWUoc2MtPnJmX2tpbGwucmZraWxsKTsKIAogCQkJLyogRGVpbml0aWFsaXplIHRoZSBkZXZpY2UgKi8KLQkJCWF0aF9kZXRhY2goc2MpOwotCQkJaWYgKHNjLT5wZGV2LT5pcnEpCi0JCQkJZnJlZV9pcnEoc2MtPnBkZXYtPmlycSwgc2MpOwotCQkJcGNpX2lvdW5tYXAoc2MtPnBkZXYsIHNjLT5tZW0pOwotCQkJcGNpX3JlbGVhc2VfcmVnaW9uKHNjLT5wZGV2LCAwKTsKLQkJCXBjaV9kaXNhYmxlX2RldmljZShzYy0+cGRldik7Ci0JCQlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworCQkJYXRoX2NsZWFudXAoc2MpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0gZWxzZSB7CiAJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfUkZLSUxMX1JFR0lTVEVSRUQ7CkBAIC0xMjkxLDE4ICsxMzA5LDM5IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1JGS0lMTCAqLwogCi1zdGF0aWMgdm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlhdGhfZGV0YWNoKHNjKTsKKwlmcmVlX2lycShzYy0+aXJxLCBzYyk7CisJYXRoX2J1c19jbGVhbnVwKHNjKTsKKwlrZnJlZShzYy0+c2VjX3dpcGh5KTsKKwlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworfQorCit2b2lkIGF0aF9kZXRhY2goc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CiAJaW50IGkgPSAwOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKKwogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiRGV0YWNoIEFUSCBod1xuIik7CiAKICNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCiAJYXRoX2RlaW5pdF9yZmtpbGwoc2MpOwogI2VuZGlmCiAJYXRoX2RlaW5pdF9sZWRzKHNjKTsKKwljYW5jZWxfd29ya19zeW5jKCZzYy0+Y2hhbl93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT53aXBoeV93b3JrKTsKIAorCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOworCQlpZiAoYXBoeSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCXNjLT5zZWNfd2lwaHlbaV0gPSBOVUxMOworCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhcGh5LT5odyk7CisJCWllZWU4MDIxMV9mcmVlX2h3KGFwaHktPmh3KTsKKwl9CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwogCWF0aF9yeF9jbGVhbnVwKHNjKTsKIAlhdGhfdHhfY2xlYW51cChzYyk7CkBAIC0xMzIwLDExICsxMzU5LDEyIEBACiAKIAlhdGg5a19od19kZXRhY2goc2MtPnNjX2FoKTsKIAlhdGg5a19leGl0X2RlYnVnKHNjKTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAogc3RhdGljIGludCBhdGhfaW5pdCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IE5VTEw7CisJc3RydWN0IGF0aF9odyAqYWggPSBOVUxMOwogCWludCBzdGF0dXM7CiAJaW50IGVycm9yID0gMCwgaTsKIAlpbnQgY3N6ID0gMDsKQEAgLTEzMzUsNTQgKzEzNzUsNTIgQEAKIAlpZiAoYXRoOWtfaW5pdF9kZWJ1ZyhzYykgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CiAKKwlzcGluX2xvY2tfaW5pdCgmc2MtPndpcGh5X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZzYy0+c2NfcmVzZXRsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3NlcmlhbF9ydyk7CiAJbXV0ZXhfaW5pdCgmc2MtPm11dGV4KTsKIAl0YXNrbGV0X2luaXQoJnNjLT5pbnRyX3RxLCBhdGg5a190YXNrbGV0LCAodW5zaWduZWQgbG9uZylzYyk7Ci0JdGFza2xldF9pbml0KCZzYy0+YmNvbl90YXNrbGV0LCBhdGg5a19iZWFjb25fdGFza2xldCwKKwl0YXNrbGV0X2luaXQoJnNjLT5iY29uX3Rhc2tsZXQsIGF0aF9iZWFjb25fdGFza2xldCwKIAkJICAgICAodW5zaWduZWQgbG9uZylzYyk7CiAKIAkvKgogCSAqIENhY2hlIGxpbmUgc2l6ZSBpcyB1c2VkIHRvIHNpemUgYW5kIGFsaWduIHZhcmlvdXMKIAkgKiBzdHJ1Y3R1cmVzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuCiAJICovCi0JYnVzX3JlYWRfY2FjaGVzaXplKHNjLCAmY3N6KTsKKwlhdGhfcmVhZF9jYWNoZXNpemUoc2MsICZjc3opOwogCS8qIFhYWCBhc3NlcnQgY3N6IGlzIG5vbi16ZXJvICovCi0Jc2MtPnNjX2NhY2hlbHN6ID0gY3N6IDw8IDI7CS8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KKwlzYy0+Y2FjaGVsc3ogPSBjc3ogPDwgMjsJLyogY29udmVydCB0byBieXRlcyAqLwogCi0JYWggPSBhdGg5a19od19hdHRhY2goZGV2aWQsIHNjLCBzYy0+bWVtLCAmc3RhdHVzKTsKKwlhaCA9IGF0aDlrX2h3X2F0dGFjaChkZXZpZCwgc2MsICZzdGF0dXMpOwogCWlmIChhaCA9PSBOVUxMKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkiVW5hYmxlIHRvIGF0dGFjaCBoYXJkd2FyZTsgSEFMIHN0YXR1cyAldVxuIiwgc3RhdHVzKTsKKwkJCSJVbmFibGUgdG8gYXR0YWNoIGhhcmR3YXJlOyBIQUwgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCQllcnJvciA9IC1FTlhJTzsKIAkJZ290byBiYWQ7CiAJfQogCXNjLT5zY19haCA9IGFoOwogCiAJLyogR2V0IHRoZSBoYXJkd2FyZSBrZXkgY2FjaGUgc2l6ZS4gKi8KLQlzYy0+c2Nfa2V5bWF4ID0gYWgtPmFoX2NhcHMua2V5Y2FjaGVfc2l6ZTsKLQlpZiAoc2MtPnNjX2tleW1heCA+IEFUSF9LRVlNQVgpIHsKKwlzYy0+a2V5bWF4ID0gYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZTsKKwlpZiAoc2MtPmtleW1heCA+IEFUSF9LRVlNQVgpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19LRVlDQUNIRSwKIAkJCSJXYXJuaW5nLCB1c2luZyBvbmx5ICV1IGVudHJpZXMgaW4gJXUga2V5IGNhY2hlXG4iLAotCQkJQVRIX0tFWU1BWCwgc2MtPnNjX2tleW1heCk7Ci0JCXNjLT5zY19rZXltYXggPSBBVEhfS0VZTUFYOworCQkJQVRIX0tFWU1BWCwgc2MtPmtleW1heCk7CisJCXNjLT5rZXltYXggPSBBVEhfS0VZTUFYOwogCX0KIAogCS8qCiAJICogUmVzZXQgdGhlIGtleSBjYWNoZSBzaW5jZSBzb21lIHBhcnRzIGRvIG5vdAogCSAqIHJlc2V0IHRoZSBjb250ZW50cyBvbiBpbml0aWFsIHBvd2VyIHVwLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBzYy0+c2Nfa2V5bWF4OyBpKyspCisJZm9yIChpID0gMDsgaSA8IHNjLT5rZXltYXg7IGkrKykKIAkJYXRoOWtfaHdfa2V5cmVzZXQoYWgsICh1MTYpIGkpOwogCi0JLyogQ29sbGVjdCB0aGUgY2hhbm5lbCBsaXN0IHVzaW5nIHRoZSBkZWZhdWx0IGNvdW50cnkgY29kZSAqLwotCi0JZXJyb3IgPSBhdGhfc2V0dXBfY2hhbm5lbHMoc2MpOwotCWlmIChlcnJvcikKKwlpZiAoYXRoOWtfcmVnZF9pbml0KHNjLT5zY19haCkpCiAJCWdvdG8gYmFkOwogCiAJLyogZGVmYXVsdCB0byBNT05JVE9SIG1vZGUgKi8KLQlzYy0+c2NfYWgtPmFoX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7Ci0KKwlzYy0+c2NfYWgtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7CiAKIAkvKiBTZXR1cCByYXRlIHRhYmxlcyAqLwogCkBAIC0xNDExLDcgKzE0NDksNyBAQAogCQlnb3RvIGJhZDI7CiAJfQogCi0Jc2MtPnNjX2NvbmZpZy5jYWJxUmVhZHl0aW1lID0gQVRIX0NBQlFfUkVBRFlfVElNRTsKKwlzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEhfQ0FCUV9SRUFEWV9USU1FOwogCWF0aF9jYWJxX3VwZGF0ZShzYyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCk7IGkrKykKQEAgLTE0NDgsOCArMTQ4Niw4IEBACiAJLyogSW5pdGlhbGl6ZXMgdGhlIG5vaXNlIGZsb29yIHRvIGEgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlLgogCSAqIExhdGVyIG9uIHRoaXMgd2lsbCBiZSB1cGRhdGVkIGR1cmluZyBBTkkgcHJvY2Vzc2luZy4gKi8KIAotCXNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3IgPSBBVEhfREVGQVVMVF9OT0lTRV9GTE9PUjsKLQlzZXR1cF90aW1lcigmc2MtPnNjX2FuaS50aW1lciwgYXRoX2FuaV9jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKKwlzYy0+YW5pLm5vaXNlX2Zsb29yID0gQVRIX0RFRkFVTFRfTk9JU0VfRkxPT1I7CisJc2V0dXBfdGltZXIoJnNjLT5hbmkudGltZXIsIGF0aF9hbmlfY2FsaWJyYXRlLCAodW5zaWduZWQgbG9uZylzYyk7CiAKIAlpZiAoYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX0NJUEhFUiwKIAkJCQkgICBBVEg5S19DSVBIRVJfVEtJUCwgTlVMTCkpIHsKQEAgLTE0NzUsNjAgKzE1MTMsNjIgQEAKIAkJCQkgICAgICBBVEg5S19DSVBIRVJfTUlDLCBOVUxMKQogCSAgICAmJiBhdGg5a19od19nZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfVEtJUF9TUExJVCwKIAkJCQkgICAgICAwLCBOVUxMKSkKLQkJc2MtPnNjX3NwbGl0bWljID0gMTsKKwkJc2MtPnNwbGl0bWljID0gMTsKIAogCS8qIHR1cm4gb24gbWNhc3Qga2V5IHNlYXJjaCBpZiBwb3NzaWJsZSAqLwogCWlmICghYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX01DQVNUX0tFWVNSQ0gsIDAsIE5VTEwpKQogCQkodm9pZClhdGg5a19od19zZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwgMSwKIAkJCQkJICAgICAxLCBOVUxMKTsKIAotCXNjLT5zY19jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKLQlzYy0+c2NfY29uZmlnLnR4cG93bGltaXRfb3ZlcnJpZGUgPSAwOworCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKIAogCS8qIDExbiBDYXBhYmlsaXRpZXMgKi8KLQlpZiAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKSB7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UWEFHR1I7CiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9SWEFHR1I7CiAJfQogCi0Jc2MtPnNjX3R4X2NoYWlubWFzayA9IGFoLT5haF9jYXBzLnR4X2NoYWlubWFzazsKLQlzYy0+c2NfcnhfY2hhaW5tYXNrID0gYWgtPmFoX2NhcHMucnhfY2hhaW5tYXNrOworCXNjLT50eF9jaGFpbm1hc2sgPSBhaC0+Y2Fwcy50eF9jaGFpbm1hc2s7CisJc2MtPnJ4X2NoYWlubWFzayA9IGFoLT5jYXBzLnJ4X2NoYWlubWFzazsKIAogCWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9ESVZFUlNJVFksIDEsIHRydWUsIE5VTEwpOwogCXNjLT5yeC5kZWZhbnQgPSBhdGg5a19od19nZXRkZWZhbnRlbm5hKGFoKTsKIAotCWF0aDlrX2h3X2dldG1hYyhhaCwgc2MtPnNjX215YWRkcik7Ci0JaWYgKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlNTSURNQVNLKSB7Ci0JCWF0aDlrX2h3X2dldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7Ci0JCUFUSF9TRVRfVkFQX0JTU0lEX01BU0soc2MtPnNjX2Jzc2lkbWFzayk7Ci0JCWF0aDlrX2h3X3NldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7Ci0JfQorCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKKwkJbWVtY3B5KHNjLT5ic3NpZG1hc2ssIGF0aF9iY2FzdF9tYWMsIEVUSF9BTEVOKTsKIAogCXNjLT5iZWFjb24uc2xvdHRpbWUgPSBBVEg5S19TTE9UX1RJTUVfOTsJLyogZGVmYXVsdCB0byBzaG9ydCBzbG90IHRpbWUgKi8KIAogCS8qIGluaXRpYWxpemUgYmVhY29uIHNsb3RzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykKLQkJc2MtPmJlYWNvbi5ic2xvdFtpXSA9IEFUSF9JRl9JRF9BTlk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykgeworCQlzYy0+YmVhY29uLmJzbG90W2ldID0gTlVMTDsKKwkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwl9CiAKIAkvKiBzYXZlIE1JU0MgY29uZmlndXJhdGlvbnMgKi8KLQlzYy0+c2NfY29uZmlnLnN3QmVhY29uUHJvY2VzcyA9IDE7CisJc2MtPmNvbmZpZy5zd0JlYWNvblByb2Nlc3MgPSAxOwogCiAJLyogc2V0dXAgY2hhbm5lbHMgYW5kIHJhdGVzICovCiAKLQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmNoYW5uZWxzID0KLQkJc2MtPmNoYW5uZWxzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBhdGg5a18yZ2h6X2NoYW50YWJsZTsKIAlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzID0KIAkJc2MtPnJhdGVzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwogCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzID0KKwkJQVJSQVlfU0laRShhdGg5a18yZ2h6X2NoYW50YWJsZSk7CiAKLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUEsIHNjLT5zY19haC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykpIHsKLQkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5jaGFubmVscyA9Ci0JCQlzYy0+Y2hhbm5lbHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKSB7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uY2hhbm5lbHMgPSBhdGg5a181Z2h6X2NoYW50YWJsZTsKIAkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5iaXRyYXRlcyA9CiAJCQlzYy0+cmF0ZXNbSUVFRTgwMjExX0JBTkRfNUdIWl07CiAJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyA9CisJCQlBUlJBWV9TSVpFKGF0aDlrXzVnaHpfY2hhbnRhYmxlKTsKIAl9CiAKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlRfQ09FWCkKKwkJYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShzYy0+c2NfYWgpOworCiAJcmV0dXJuIDA7CiBiYWQyOgogCS8qIGNsZWFudXAgdHggcXVldWVzICovCkBAIC0xNTQzLDkgKzE1ODMsNDkgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgYXRoX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQordm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CisJCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKKwkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKKwkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7CisKKwlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKHNjLT5zY19haCkgfHwgbW9kcGFyYW1fbm9od2NyeXB0KQorCQlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOworCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQorCQlCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8CisJCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKKworCWh3LT53aXBoeS0+cmVnX25vdGlmaWVyID0gYXRoOWtfcmVnX25vdGlmaWVyOworCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSB0cnVlOworCisJaHctPnF1ZXVlcyA9IDQ7CisJaHctPm1heF9yYXRlcyA9IDQ7CisJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOworCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gMTA7CisJaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKKwlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX25vZGUpOworCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfdmlmKTsKKworCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gImF0aDlrX3JhdGVfY29udHJvbCI7CisKKwlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKQorCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KKwkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworfQorCitpbnQgYXRoX2F0dGFjaCh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOwogCWludCBlcnJvciA9IDAsIGk7CiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkF0dGFjaCBBVEggaHdcbiIpOwpAQCAtMTU1NiwzNyArMTYzNiwxNiBAQAogCiAJLyogZ2V0IG1hYyBhZGRyZXNzIGZyb20gaGFyZHdhcmUgYW5kIHNldCBpbiBtYWM4MDIxMSAqLwogCi0JU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIHNjLT5zY19teWFkZHIpOworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBzYy0+c2NfYWgtPm1hY2FkZHIpOwogCi0JaHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUyB8Ci0JCUlFRUU4MDIxMV9IV19IT1NUX0JST0FEQ0FTVF9QU19CVUZGRVJJTkcgfAotCQlJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCUlFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjsKKwlhdGhfc2V0X2h3X2NhcGFiKHNjLCBodyk7CiAKLQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9Ci0JCUJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCi0JaHctPnF1ZXVlcyA9IDQ7Ci0JaHctPm1heF9yYXRlcyA9IDQ7Ci0JaHctPm1heF9yYXRlX3RyaWVzID0gQVRIXzExTl9UWE1BWFRSWTsKLQlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX25vZGUpOwotCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfdmFwKTsKLQotCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gImF0aDlrX3JhdGVfY29udHJvbCI7Ci0KLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfSFQpIHsKLQkJc2V0dXBfaHRfY2FwKCZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7Ci0JCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSkKLQkJCXNldHVwX2h0X2NhcCgmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5odF9jYXApOworCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCQlzZXR1cF9odF9jYXAoc2MsICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7CisJCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKKwkJCXNldHVwX2h0X2NhcChzYywgJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uaHRfY2FwKTsKIAl9CiAKLQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0JJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07Ci0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpKQotCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KLQkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCiAJLyogaW5pdGlhbGl6ZSB0eC9yeCBlbmdpbmUgKi8KIAllcnJvciA9IGF0aF90eF9pbml0KHNjLCBBVEhfVFhCVUYpOwogCWlmIChlcnJvciAhPSAwKQpAQCAtMTU5OCw3ICsxNjU3LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKIAkvKiBJbml0aWFsemUgaC93IFJma2lsbCAqLwotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCiAJCUlOSVRfREVMQVlFRF9XT1JLKCZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgYXRoX3Jma2lsbF9wb2xsKTsKIAogCS8qIEluaXRpYWxpemUgcy93IHJma2lsbCAqLwpAQCAtMTYwNywxMSArMTY2NiwzOSBAQAogCQlnb3RvIGVycm9yX2F0dGFjaDsKICNlbmRpZgogCisJaWYgKGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc2MtPnNjX2FoKSkgeworCQkvKiBBbnl0aGluZyBhcHBsaWVkIGhlcmUgKHByaW9yIHRvIHdpcGh5IHJlZ2lzdHJhdGlvbikgZ2V0cworCQkgKiBzYXZlZCBvbiB0aGUgd2lwaHkgb3JpZ18qIHBhcmFtZXRlcnMgKi8KKwkJcmVnZCA9IGF0aDlrX3dvcmxkX3JlZ2RvbWFpbihzYy0+c2NfYWgpOworCQlody0+d2lwaHktPmN1c3RvbV9yZWd1bGF0b3J5ID0gdHJ1ZTsKKwkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IGZhbHNlOworCX0gZWxzZSB7CisJCS8qIFRoaXMgZ2V0cyBhcHBsaWVkIGluIHRoZSBjYXNlIG9mIHRoZSBhYnNlbnNlIG9mIENSREEsCisJCSAqIGl0J3Mgb3VyIG93biBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4sIHNpbWlsYXIgdG8KKwkJICogY2ZnODAyMTEncyBidXQgd2UgZW5hYmxlIHBhc3NpdmUgc2Nhbm5pbmcgKi8KKwkJcmVnZCA9IGF0aDlrX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKCk7CisJfQorCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwgcmVnZCk7CisJYXRoOWtfcmVnX2FwcGx5X3JhZGFyX2ZsYWdzKGh3LT53aXBoeSk7CisJYXRoOWtfcmVnX2FwcGx5X3dvcmxkX2ZsYWdzKGh3LT53aXBoeSwgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUik7CisKKwlJTklUX1dPUksoJnNjLT5jaGFuX3dvcmssIGF0aDlrX3dpcGh5X2NoYW5fd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnNjLT53aXBoeV93b3JrLCBhdGg5a193aXBoeV93b3JrKTsKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKKwogCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKIAorCWlmICghYXRoOWtfaXNfd29ybGRfcmVnZChzYy0+c2NfYWgpKSB7CisJCWVycm9yID0gcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwKKwkJCXNjLT5zY19haC0+cmVndWxhdG9yeS5hbHBoYTIpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycm9yX2F0dGFjaDsKKwl9CisKIAkvKiBJbml0aWFsaXplIExFRCBjb250cm9sICovCiAJYXRoX2luaXRfbGVkcyhzYyk7CiAKKwogCXJldHVybiAwOwogCiBlcnJvcl9hdHRhY2g6CkBAIC0xNjI4LDI0ICsxNzE1LDIwIEBACiAKIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOwotCWludCBzdGF0dXM7Ci0JaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlpbnQgcjsKIAogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKLQlhdGhfZHJhaW50eHEoc2MsIHJldHJ5X3R4KTsKKwlhdGhfZHJhaW5fYWxsX3R4cShzYywgcmV0cnlfdHgpOwogCWF0aF9zdG9wcmVjdihzYyk7CiAJYXRoX2ZsdXNocmVjdihzYyk7CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCWlmICghYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+YWhfY3VyY2hhbiwKLQkJCSAgICBzYy0+dHhfY2hhbl93aWR0aCwKLQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJICAgIHNjLT5zY19odF9leHRwcm90c3BhY2luZywgZmFsc2UsICZzdGF0dXMpKSB7CisJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBzYy0+c2NfYWgtPmN1cmNoYW4sIGZhbHNlKTsKKwlpZiAocikKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJVbmFibGUgdG8gcmVzZXQgaGFyZHdhcmU7IGhhbCBzdGF0dXMgJXVcbiIsIHN0YXR1cyk7Ci0JCWVycm9yID0gLUVJTzsKLQl9CisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXVcbiIsIHIpOwogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIAogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKQpAQCAtMTY1NiwxNCArMTczOSwxNCBAQAogCSAqIHRoYXQgY2hhbmdlcyB0aGUgY2hhbm5lbCBzbyB1cGRhdGUgYW55IHN0YXRlIHRoYXQKIAkgKiBtaWdodCBjaGFuZ2UgYXMgYSByZXN1bHQuCiAJICovCi0JYXRoX3NldGN1cm1vZGUoc2MsIGF0aF9jaGFuMm1vZGUoc2MtPnNjX2FoLT5haF9jdXJjaGFuKSk7CisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKIAogCWF0aF91cGRhdGVfdHhwb3coc2MpOwogCiAJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0JFQUNPTlMpCi0JCWF0aF9iZWFjb25fY29uZmlnKHNjLCBBVEhfSUZfSURfQU5ZKTsJLyogcmVzdGFydCBiZWFjb25zICovCisJCWF0aF9iZWFjb25fY29uZmlnKHNjLCBOVUxMKTsJLyogcmVzdGFydCBiZWFjb25zICovCiAKLQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPnNjX2ltYXNrKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKIAogCWlmIChyZXRyeV90eCkgewogCQlpbnQgaTsKQEAgLTE2NzYsNyArMTc1OSw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHI7CiB9CiAKIC8qCkBAIC0xNzAwLDYgKzE3ODMsNyBAQAogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiJXMgRE1BOiAldSBidWZmZXJzICV1IGRlc2MvYnVmXG4iLAogCQluYW1lLCBuYnVmLCBuZGVzYyk7CiAKKwlJTklUX0xJU1RfSEVBRChoZWFkKTsKIAkvKiBhdGhfZGVzYyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgRFdPUkRzICovCiAJaWYgKChzaXplb2Yoc3RydWN0IGF0aF9kZXNjKSAlIDQpICE9IDApIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgImF0aF9kZXNjIG5vdCBEV09SRCBhbGlnbmVkXG4iKTsKQEAgLTE3MTYsNyArMTgwMCw3IEBACiAJICogZGVzY3JpcHRvcnMgdGhhdCBjcm9zcyB0aGUgNEsgcGFnZSBib3VuZGFyeS4gQXNzdW1lCiAJICogb25lIHNraXBwZWQgZGVzY3JpcHRvciBwZXIgNEsgcGFnZS4KIAkgKi8KLQlpZiAoIShzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKIAkJdTMyIG5kZXNjX3NraXBwZWQgPQogCQkJQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKGRkLT5kZF9kZXNjX2xlbik7CiAJCXUzMiBkbWFfbGVuOwpAQCAtMTczMCw5ICsxODE0LDggQEAKIAl9CiAKIAkvKiBhbGxvY2F0ZSBkZXNjcmlwdG9ycyAqLwotCWRkLT5kZF9kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoc2MtPnBkZXYsCi0JCQkgICAgICBkZC0+ZGRfZGVzY19sZW4sCi0JCQkgICAgICAmZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRkLT5kZF9kZXNjID0gZG1hX2FsbG9jX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwKKwkJCQkJICZkZC0+ZGRfZGVzY19wYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRkLT5kZF9kZXNjID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWw7CkBAIC0xNzQ0LDIwICsxODI3LDE4IEBACiAKIAkvKiBhbGxvY2F0ZSBidWZmZXJzICovCiAJYnNpemUgPSBzaXplb2Yoc3RydWN0IGF0aF9idWYpICogbmJ1ZjsKLQliZiA9IGttYWxsb2MoYnNpemUsIEdGUF9LRVJORUwpOworCWJmID0ga3phbGxvYyhic2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGJmID09IE5VTEwpIHsKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWwyOwogCX0KLQltZW1zZXQoYmYsIDAsIGJzaXplKTsKIAlkZC0+ZGRfYnVmcHRyID0gYmY7CiAKLQlJTklUX0xJU1RfSEVBRChoZWFkKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmJ1ZjsgaSsrLCBiZisrLCBkcyArPSBuZGVzYykgewogCQliZi0+YmZfZGVzYyA9IGRzOwogCQliZi0+YmZfZGFkZHIgPSBEUzJQSFlTKGRkLCBkcyk7CiAKLQkJaWYgKCEoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJgorCQlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmCiAJCSAgICAgIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKIAkJCS8qCiAJCQkgKiBTa2lwIGRlc2NyaXB0b3IgYWRkcmVzc2VzIHdoaWNoIGNhbiBjYXVzZSA0S0IKQEAgLTE3NzgsOCArMTg1OSw4IEBACiAJfQogCXJldHVybiAwOwogZmFpbDI6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChzYy0+cGRldiwKLQkJZGQtPmRkX2Rlc2NfbGVuLCBkZC0+ZGRfZGVzYywgZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKIGZhaWw6CiAJbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7CiAJcmV0dXJuIGVycm9yOwpAQCAtMTc5Miw4ICsxODczLDggQEAKIAkJCSBzdHJ1Y3QgYXRoX2Rlc2NkbWEgKmRkLAogCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChzYy0+cGRldiwKLQkJZGQtPmRkX2Rlc2NfbGVuLCBkZC0+ZGRfZGVzYywgZGQtPmRkX2Rlc2NfcGFkZHIpOworCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKIAogCUlOSVRfTElTVF9IRUFEKGhlYWQpOwogCWtmcmVlKGRkLT5kZF9idWZwdHIpOwpAQCAtMTg1MCwzMyArMTkzMSw4MSBAQAogCXJldHVybiBxbnVtOwogfQogCisvKiBYWFg6IFJlbW92ZSBtZSBvbmNlIHdlIGRvbid0IGRlcGVuZCBvbiBhdGg5a19jaGFubmVsIGZvciBhbGwKKyAqIHRoaXMgcmVkdW5kYW50IGRhdGEgKi8KK3ZvaWQgYXRoOWtfdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBody0+Y29uZi5jaGFubmVsOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKworCWljaGFuLT5jaGFubmVsID0gY2hhbi0+Y2VudGVyX2ZyZXE7CisJaWNoYW4tPmNoYW4gPSBjaGFuOworCisJaWYgKGNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlpY2hhbi0+Y2hhbm1vZGUgPSBDSEFOTkVMX0c7CisJCWljaGFuLT5jaGFubmVsRmxhZ3MgPSBDSEFOTkVMXzJHSFogfCBDSEFOTkVMX09GRE07CisJfSBlbHNlIHsKKwkJaWNoYW4tPmNoYW5tb2RlID0gQ0hBTk5FTF9BOworCQlpY2hhbi0+Y2hhbm5lbEZsYWdzID0gQ0hBTk5FTF81R0haIHwgQ0hBTk5FTF9PRkRNOworCX0KKworCXNjLT50eF9jaGFuX3dpZHRoID0gQVRIOUtfSFRfTUFDTU9ERV8yMDsKKworCWlmIChjb25mX2lzX2h0KGNvbmYpKSB7CisJCWlmIChjb25mX2lzX2h0NDAoY29uZikpCisJCQlzYy0+dHhfY2hhbl93aWR0aCA9IEFUSDlLX0hUX01BQ01PREVfMjA0MDsKKworCQlpY2hhbi0+Y2hhbm1vZGUgPSBhdGhfZ2V0X2V4dGNoYW5tb2RlKHNjLCBjaGFuLAorCQkJCQkgICAgY29uZi0+Y2hhbm5lbF90eXBlKTsKKwl9Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqLwogLyogbWFjODAyMTEgY2FsbGJhY2tzICovCiAvKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludCBhdGg5a19zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY3VyY2hhbiA9IGh3LT5jb25mLmNoYW5uZWw7CiAJc3RydWN0IGF0aDlrX2NoYW5uZWwgKmluaXRfY2hhbm5lbDsKLQlpbnQgZXJyb3IgPSAwLCBwb3MsIHN0YXR1czsKKwlpbnQgciwgcG9zOwogCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJTdGFydGluZyBkcml2ZXIgd2l0aCAiCiAJCSJpbml0aWFsIGNoYW5uZWw6ICVkIE1IelxuIiwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwogCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKworCWlmIChhdGg5a193aXBoeV9zdGFydGVkKHNjKSkgeworCQlpZiAoc2MtPmNoYW5faWR4ID09IGN1cmNoYW4tPmh3X3ZhbHVlKSB7CisJCQkvKgorCQkJICogQWxyZWFkeSBvbiB0aGUgb3BlcmF0aW9uYWwgY2hhbm5lbCwgdGhlIG5ldyB3aXBoeQorCQkJICogY2FuIGJlIG1hcmtlZCBhY3RpdmUuCisJCQkgKi8KKwkJCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKKwkJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQW5vdGhlciB3aXBoeSBpcyBvbiBhbm90aGVyIGNoYW5uZWwsIHN0YXJ0IHRoZSBuZXcKKwkJCSAqIHdpcGh5IGluIHBhdXNlZCBzdGF0ZS4KKwkJCSAqLworCQkJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKwkJfQorCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCXJldHVybiAwOworCX0KKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9BQ1RJVkU7CisKIAkvKiBzZXR1cCBpbml0aWFsIGNoYW5uZWwgKi8KIAotCXBvcyA9IGF0aF9nZXRfY2hhbm5lbChzYywgY3VyY2hhbik7Ci0JaWYgKHBvcyA9PSAtMSkgewotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiSW52YWxpZCBjaGFubmVsOiAlZFxuIiwgY3VyY2hhbi0+Y2VudGVyX2ZyZXEpOwotCQllcnJvciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3I7Ci0JfQorCXBvcyA9IGN1cmNoYW4tPmh3X3ZhbHVlOwogCi0Jc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwOwotCXNjLT5zY19haC0+YWhfY2hhbm5lbHNbcG9zXS5jaGFubW9kZSA9Ci0JCShjdXJjaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopID8gQ0hBTk5FTF9HIDogQ0hBTk5FTF9BOwotCWluaXRfY2hhbm5lbCA9ICZzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc107CisJc2MtPmNoYW5faWR4ID0gcG9zOworCWluaXRfY2hhbm5lbCA9ICZzYy0+c2NfYWgtPmNoYW5uZWxzW3Bvc107CisJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgaW5pdF9jaGFubmVsKTsKIAogCS8qIFJlc2V0IFNFUkRFUyByZWdpc3RlcnMgKi8KIAlhdGg5a19od19jb25maWdwY2lwb3dlcnNhdmUoc2MtPnNjX2FoLCAwKTsKQEAgLTE4ODksMTcgKzIwMTgsMTQgQEAKIAkgKiBhbmQgdGhlbiBzZXR1cCBvZiB0aGUgaW50ZXJydXB0IG1hc2suCiAJICovCiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQlpZiAoIWF0aDlrX2h3X3Jlc2V0KHNjLT5zY19haCwgaW5pdF9jaGFubmVsLAotCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJICAgIHNjLT5zY190eF9jaGFpbm1hc2ssIHNjLT5zY19yeF9jaGFpbm1hc2ssCi0JCQkgICAgc2MtPnNjX2h0X2V4dHByb3RzcGFjaW5nLCBmYWxzZSwgJnN0YXR1cykpIHsKKwlyID0gYXRoOWtfaHdfcmVzZXQoc2MtPnNjX2FoLCBpbml0X2NoYW5uZWwsIGZhbHNlKTsKKwlpZiAocikgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgaGFsIHN0YXR1cyAldSAiCi0JCQkiKGZyZXEgJXUgZmxhZ3MgMHgleClcbiIsIHN0YXR1cywKLQkJCWluaXRfY2hhbm5lbC0+Y2hhbm5lbCwgaW5pdF9jaGFubmVsLT5jaGFubmVsRmxhZ3MpOwotCQllcnJvciA9IC1FSU87CisJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXUgIgorCQkJIihmcmVxICV1IE1IeilcbiIsIHIsCisJCQljdXJjaGFuLT5jZW50ZXJfZnJlcSk7CiAJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQkJZ290byBlcnJvcjsKKwkJZ290byBtdXRleF91bmxvY2s7CiAJfQogCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKIApAQCAtMTkxOSw2NiArMjA0NSw1NiBAQAogCWlmIChhdGhfc3RhcnRyZWN2KHNjKSAhPSAwKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkiVW5hYmxlIHRvIHN0YXJ0IHJlY3YgbG9naWNcbiIpOwotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7CisJCXIgPSAtRUlPOworCQlnb3RvIG11dGV4X3VubG9jazsKIAl9CiAKIAkvKiBTZXR1cCBvdXIgaW50ciBtYXNrLiAqLwotCXNjLT5zY19pbWFzayA9IEFUSDlLX0lOVF9SWCB8IEFUSDlLX0lOVF9UWAorCXNjLT5pbWFzayA9IEFUSDlLX0lOVF9SWCB8IEFUSDlLX0lOVF9UWAogCQl8IEFUSDlLX0lOVF9SWEVPTCB8IEFUSDlLX0lOVF9SWE9STgogCQl8IEFUSDlLX0lOVF9GQVRBTCB8IEFUSDlLX0lOVF9HTE9CQUw7CiAKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfR1RUKQotCQlzYy0+c2NfaW1hc2sgfD0gQVRIOUtfSU5UX0dUVDsKKwlpZiAoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfR1RUKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0dUVDsKIAotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9DU1Q7CisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0NTVDsKIAotCS8qCi0JICogRW5hYmxlIE1JQiBpbnRlcnJ1cHRzIHdoZW4gdGhlcmUgYXJlIGhhcmR3YXJlIHBoeSBjb3VudGVycy4KLQkgKiBOb3RlIHdlIG9ubHkgZG8gdGhpcyAoYXQgdGhlIG1vbWVudCkgZm9yIHN0YXRpb24gbW9kZS4KLQkgKi8KLQlpZiAoYXRoOWtfaHdfcGh5Y291bnRlcnMoc2MtPnNjX2FoKSAmJgotCSAgICAoKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgICAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKSkKLQkJc2MtPnNjX2ltYXNrIHw9IEFUSDlLX0lOVF9NSUI7Ci0JLyoKLQkgKiBTb21lIGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgVElNIElFIGFuZCBmaXJlcyBhbgotCSAqIGludGVycnVwdCB3aGVuIHRoZSBUSU0gYml0IGlzIHNldC4gIEZvciBoYXJkd2FyZQotCSAqIHRoYXQgZG9lcywgaWYgbm90IG92ZXJyaWRkZW4gYnkgY29uZmlndXJhdGlvbiwKLQkgKiBlbmFibGUgdGhlIFRJTSBpbnRlcnJ1cHQgd2hlbiBvcGVyYXRpbmcgYXMgc3RhdGlvbi4KLQkgKi8KLQlpZiAoKHNjLT5zY19haC0+YWhfY2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0VOSEFOQ0VEUE0pICYmCi0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSAmJgotCSAgICAhc2MtPnNjX2NvbmZpZy5zd0JlYWNvblByb2Nlc3MpCi0JCXNjLT5zY19pbWFzayB8PSBBVEg5S19JTlRfVElNOwotCi0JYXRoX3NldGN1cm1vZGUoc2MsIGF0aF9jaGFuMm1vZGUoaW5pdF9jaGFubmVsKSk7CisJYXRoX2NhY2hlX2NvbmZfcmF0ZShzYywgJmh3LT5jb25mKTsKIAogCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfSU5WQUxJRDsKIAogCS8qIERpc2FibGUgQk1JU1MgaW50ZXJydXB0IHdoZW4gd2UncmUgbm90IGFzc29jaWF0ZWQgKi8KLQlzYy0+c2NfaW1hc2sgJj0gfihBVEg5S19JTlRfU1dCQSB8IEFUSDlLX0lOVF9CTUlTUyk7Ci0JYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCBzYy0+c2NfaW1hc2spOworCXNjLT5pbWFzayAmPSB+KEFUSDlLX0lOVF9TV0JBIHwgQVRIOUtfSU5UX0JNSVNTKTsKKwlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsIHNjLT5pbWFzayk7CiAKLQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoc2MtPmh3KTsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCWVycm9yID0gYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKKwlyID0gYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKICNlbmRpZgogCi1lcnJvcjoKLQlyZXR1cm4gZXJyb3I7CittdXRleF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfdHhfY29udHJvbCB0eGN0bDsKIAlpbnQgaGRybGVuLCBwYWRzaXplOwogCisJaWYgKGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9BQ1RJVkUgJiYgYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX1NDQU4pIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiAlczogVFggaW4gdW5leHBlY3RlZCB3aXBoeSBzdGF0ZSAiCisJCSAgICAgICAiJWRcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSwgYXBoeS0+c3RhdGUpOworCQlnb3RvIGV4aXQ7CisJfQorCiAJbWVtc2V0KCZ0eGN0bCwgMCwgc2l6ZW9mKHN0cnVjdCBhdGhfdHhfY29udHJvbCkpOwogCiAJLyoKQEAgLTIwMTIsNyArMjEyOCw3IEBACiAKIAlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJ0cmFuc21pdHRpbmcgcGFja2V0LCBza2I6ICVwXG4iLCBza2IpOwogCi0JaWYgKGF0aF90eF9zdGFydChzYywgc2tiLCAmdHhjdGwpICE9IDApIHsKKwlpZiAoYXRoX3R4X3N0YXJ0KGh3LCBza2IsICZ0eGN0bCkgIT0gMCkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJUWCBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMjAyNSwzMCArMjE0MSwzOCBAQAogCiBzdGF0aWMgdm9pZCBhdGg5a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9JTkFDVElWRTsKIAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9JTlZBTElEKSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQU5ZLCAiRGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQ2xlYW5pbmcgdXBcbiIpOworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKLQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoc2MtPmh3KTsKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJaWYgKGF0aDlrX3dpcGh5X3N0YXJ0ZWQoc2MpKSB7CisJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwkJcmV0dXJuOyAvKiBhbm90aGVyIHdpcGh5IHN0aWxsIGluIHVzZSAqLworCX0KIAogCS8qIG1ha2Ugc3VyZSBoL3cgd2lsbCBub3QgZ2VuZXJhdGUgYW55IGludGVycnVwdAogCSAqIGJlZm9yZSBzZXR0aW5nIHRoZSBpbnZhbGlkIGZsYWcuICovCiAJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoc2MtPnNjX2FoLCAwKTsKIAogCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpKSB7Ci0JCWF0aF9kcmFpbnR4cShzYywgZmFsc2UpOworCQlhdGhfZHJhaW5fYWxsX3R4cShzYywgZmFsc2UpOwogCQlhdGhfc3RvcHJlY3Yoc2MpOwogCQlhdGg5a19od19waHlfZGlzYWJsZShzYy0+c2NfYWgpOwogCX0gZWxzZQogCQlzYy0+cngucnhsaW5rID0gTlVMTDsKIAogI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsKTsKICNlbmRpZgogCS8qIGRpc2FibGUgSEFMIGFuZCBwdXQgaC93IHRvIHNsZWVwICovCkBAIC0yMDU3LDEzNiArMjE4MSwyMjQgQEAKIAogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9JTlZBTElEOwogCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJEcml2ZXIgaGFsdFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfdmFwICphdnAgPSAodm9pZCAqKWNvbmYtPnZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopY29uZi0+dmlmLT5kcnZfcHJpdjsKIAllbnVtIG5sODAyMTFfaWZ0eXBlIGljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCWludCByZXQgPSAwOwogCi0JLyogU3VwcG9ydCBvbmx5IHZhcCBmb3Igbm93ICovCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAotCWlmIChzYy0+c2NfbnZhcHMpCi0JCXJldHVybiAtRU5PQlVGUzsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spICYmCisJICAgIHNjLT5udmlmcyA+IDApIHsKKwkJcmV0ID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KIAogCXN3aXRjaCAoY29uZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJaWNfb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJaWNfb3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfQURIT0M7Ci0JCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCWljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX0FQOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJaWYgKHNjLT5uYmNudmlmcyA+PSBBVEhfQkNCVUYpIHsKKwkJCXJldCA9IC1FTk9CVUZTOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWNfb3Btb2RlID0gY29uZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKIAkJCSJJbnRlcmZhY2UgdHlwZSAlZCBub3QgeWV0IHN1cHBvcnRlZFxuIiwgY29uZi0+dHlwZSk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OwogCX0KIAotCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQXR0YWNoIGEgVkFQIG9mIHR5cGU6ICVkXG4iLCBpY19vcG1vZGUpOworCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiQXR0YWNoIGEgVklGIG9mIHR5cGU6ICVkXG4iLCBpY19vcG1vZGUpOwogCi0JLyogU2V0IHRoZSBWQVAgb3Btb2RlICovCisJLyogU2V0IHRoZSBWSUYgb3Btb2RlICovCiAJYXZwLT5hdl9vcG1vZGUgPSBpY19vcG1vZGU7CiAJYXZwLT5hdl9ic2xvdCA9IC0xOwogCi0JaWYgKGljX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJYXRoOWtfaHdfc2V0X3RzZmFkanVzdChzYy0+c2NfYWgsIDEpOworCXNjLT5udmlmcysrOwogCi0Jc2MtPnNjX3ZhcHNbMF0gPSBjb25mLT52aWY7Ci0Jc2MtPnNjX252YXBzKys7CisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0JTU0lETUFTSykKKwkJYXRoOWtfc2V0X2Jzc2lkX21hc2soaHcpOworCisJaWYgKHNjLT5udmlmcyA+IDEpCisJCWdvdG8gb3V0OyAvKiBza2lwIGdsb2JhbCBzZXR0aW5ncyBmb3Igc2Vjb25kYXJ5IHZpZiAqLworCisJaWYgKGljX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQlhdGg5a19od19zZXRfdHNmYWRqdXN0KHNjLT5zY19haCwgMSk7CisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UU0ZfUkVTRVQ7CisJfQogCiAJLyogU2V0IHRoZSBkZXZpY2Ugb3Btb2RlICovCi0Jc2MtPnNjX2FoLT5haF9vcG1vZGUgPSBpY19vcG1vZGU7CisJc2MtPnNjX2FoLT5vcG1vZGUgPSBpY19vcG1vZGU7CisKKwkvKgorCSAqIEVuYWJsZSBNSUIgaW50ZXJydXB0cyB3aGVuIHRoZXJlIGFyZSBoYXJkd2FyZSBwaHkgY291bnRlcnMuCisJICogTm90ZSB3ZSBvbmx5IGRvIHRoaXMgKGF0IHRoZSBtb21lbnQpIGZvciBzdGF0aW9uIG1vZGUuCisJICovCisJaWYgKChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8CisJICAgIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAorCSAgICAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCQlpZiAoYXRoOWtfaHdfcGh5Y291bnRlcnMoc2MtPnNjX2FoKSkKKwkJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfTUlCOworCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RTRk9PUjsKKwl9CisKKwkvKgorCSAqIFNvbWUgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBUSU0gSUUgYW5kIGZpcmVzIGFuCisJICogaW50ZXJydXB0IHdoZW4gdGhlIFRJTSBiaXQgaXMgc2V0LiAgRm9yIGhhcmR3YXJlCisJICogdGhhdCBkb2VzLCBpZiBub3Qgb3ZlcnJpZGRlbiBieSBjb25maWd1cmF0aW9uLAorCSAqIGVuYWJsZSB0aGUgVElNIGludGVycnVwdCB3aGVuIG9wZXJhdGluZyBhcyBzdGF0aW9uLgorCSAqLworCWlmICgoc2MtPnNjX2FoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfRU5IQU5DRURQTSkgJiYKKwkgICAgKGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgIXNjLT5jb25maWcuc3dCZWFjb25Qcm9jZXNzKQorCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RJTTsKKworCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPmltYXNrKTsKIAogCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCS8qIFRPRE86IGlzIHRoaXMgYSBzdWl0YWJsZSBwbGFjZSB0byBzdGFydCBBTkkgZm9yIEFQIG1vZGU/ICovCiAJCS8qIFN0YXJ0IEFOSSAqLwotCQltb2RfdGltZXIoJnNjLT5zY19hbmkudGltZXIsCisJCW1vZF90aW1lcigmc2MtPmFuaS50aW1lciwKIAkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoQVRIX0FOSV9QT0xMSU5URVJWQUwpKTsKIAl9CiAKLQlyZXR1cm4gMDsKK291dDoKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfdmFwICphdnAgPSAodm9pZCAqKWNvbmYtPnZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopY29uZi0+dmlmLT5kcnZfcHJpdjsKKwlpbnQgaTsKIAogCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiRGV0YWNoIEludGVyZmFjZVxuIik7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCiAJLyogU3RvcCBBTkkgKi8KLQlkZWxfdGltZXJfc3luYygmc2MtPnNjX2FuaS50aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJnNjLT5hbmkudGltZXIpOwogCiAJLyogUmVjbGFpbSBiZWFjb24gcmVzb3VyY2VzICovCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JICAgIHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJaWYgKChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKKwkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAorCSAgICAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpIHsKIAkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAkJYXRoX2JlYWNvbl9yZXR1cm4oc2MsIGF2cCk7CiAJfQogCiAJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TOwogCi0Jc2MtPnNjX3ZhcHNbMF0gPSBOVUxMOwotCXNjLT5zY19udmFwcy0tOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjLT5iZWFjb24uYnNsb3QpOyBpKyspIHsKKwkJaWYgKHNjLT5iZWFjb24uYnNsb3RbaV0gPT0gY29uZi0+dmlmKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHZpZiBoYWQgYWxsb2NhdGVkIGJlYWNvbiAiCisJCQkgICAgICAgInNsb3RcbiIsIF9fZnVuY19fKTsKKwkJCXNjLT5iZWFjb24uYnNsb3RbaV0gPSBOVUxMOworCQkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwkJfQorCX0KKworCXNjLT5udmlmcy0tOworCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IGF0aDlrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CiAKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwotCWlmIChjaGFuZ2VkICYgKElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMIHwKLQkJICAgICAgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9IVCkpIHsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7CisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCQlpZiAoKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9USU1fVElNRVIpID09IDApIHsKKwkJCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX1RJTV9USU1FUjsKKwkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCQlzYy0+aW1hc2spOworCQkJfQorCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDEpOworCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9ORVRXT1JLX1NMRUVQKTsKKwkJfSBlbHNlIHsKKwkJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwgQVRIOUtfUE1fQVdBS0UpOworCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDApOworCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9XQUlUX0ZPUl9CRUFDT047CisJCQlpZiAoc2MtPmltYXNrICYgQVRIOUtfSU5UX1RJTV9USU1FUikgeworCQkJCXNjLT5pbWFzayAmPSB+QVRIOUtfSU5UX1RJTV9USU1FUjsKKwkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCQlzYy0+aW1hc2spOworCQkJfQorCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cmNoYW4gPSBody0+Y29uZi5jaGFubmVsOwotCQlpbnQgcG9zOworCQlpbnQgcG9zID0gY3VyY2hhbi0+aHdfdmFsdWU7CisKKwkJYXBoeS0+Y2hhbl9pZHggPSBwb3M7CisJCWFwaHktPmNoYW5faXNfaHQgPSBjb25mX2lzX2h0KGNvbmYpOworCisJCWlmIChhcGh5LT5zdGF0ZSA9PSBBVEhfV0lQSFlfU0NBTiB8fAorCQkgICAgYXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJCWF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc2MsIGFwaHkpOworCQllbHNlIHsKKwkJCS8qCisJCQkgKiBEbyBub3QgY2hhbmdlIG9wZXJhdGlvbmFsIGNoYW5uZWwgYmFzZWQgb24gYSBwYXVzZWQKKwkJCSAqIHdpcGh5IGNoYW5nZXMuCisJCQkgKi8KKwkJCWdvdG8gc2tpcF9jaGFuX2NoYW5nZTsKKwkJfQogCiAJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiU2V0IGNoYW5uZWw6ICVkIE1IelxuIiwKIAkJCWN1cmNoYW4tPmNlbnRlcl9mcmVxKTsKIAotCQlwb3MgPSBhdGhfZ2V0X2NoYW5uZWwoc2MsIGN1cmNoYW4pOwotCQlpZiAocG9zID09IC0xKSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiSW52YWxpZCBjaGFubmVsOiAlZFxuIiwKLQkJCQljdXJjaGFuLT5jZW50ZXJfZnJlcSk7Ci0JCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQorCQkvKiBYWFg6IHJlbW92ZSBtZSBldmVudHVhbHkgKi8KKwkJYXRoOWtfdXBkYXRlX2ljaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSk7CiAKLQkJc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwOwotCQlzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc10uY2hhbm1vZGUgPQotCQkJKGN1cmNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPwotCQkJQ0hBTk5FTF9HIDogQ0hBTk5FTF9BOworCQlhdGhfdXBkYXRlX2NoYWlubWFzayhzYywgY29uZl9pc19odChjb25mKSk7CiAKLQkJaWYgKGNvbmYtPmh0LmVuYWJsZWQpIHsKLQkJCWlmIChjb25mLT5odC5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTIHx8Ci0JCQkgICAgY29uZi0+aHQuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMpCi0JCQkJc2MtPnR4X2NoYW5fd2lkdGggPSBBVEg5S19IVF9NQUNNT0RFXzIwNDA7Ci0KLQkJCXNjLT5zY19haC0+YWhfY2hhbm5lbHNbcG9zXS5jaGFubW9kZSA9Ci0JCQkJYXRoX2dldF9leHRjaGFubW9kZShzYywgY3VyY2hhbiwKLQkJCQkJCSAgICBjb25mLT5odC5jaGFubmVsX3R5cGUpOwotCQl9Ci0KLQkJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIGNvbmYtPmh0LmVuYWJsZWQpOwotCi0JCWlmIChhdGhfc2V0X2NoYW5uZWwoc2MsICZzYy0+c2NfYWgtPmFoX2NoYW5uZWxzW3Bvc10pIDwgMCkgeworCQlpZiAoYXRoX3NldF9jaGFubmVsKHNjLCBodywgJnNjLT5zY19haC0+Y2hhbm5lbHNbcG9zXSkgPCAwKSB7CiAJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVW5hYmxlIHRvIHNldCBjaGFubmVsXG4iKTsKIAkJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCitza2lwX2NoYW5fY2hhbmdlOgogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKQotCQlzYy0+c2NfY29uZmlnLnR4cG93bGltaXQgPSAyICogY29uZi0+cG93ZXJfbGV2ZWw7CisJCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IDIgKiBjb25mLT5wb3dlcl9sZXZlbDsKKworCS8qCisJICogVGhlIEhXIFRTRiBoYXMgdG8gYmUgcmVzZXQgd2hlbiB0aGUgYmVhY29uIGludGVydmFsIGNoYW5nZXMuCisJICogV2Ugc2V0IHRoZSBmbGFnIGhlcmUsIGFuZCBhdGhfYmVhY29uX2NvbmZpZ19hcCgpIHdvdWxkIHRha2UgdGhpcworCSAqIGludG8gYWNjb3VudCB3aGVuIGl0IGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIHN1YnNlcXVlbnQKKwkgKiBjb25maWdfaW50ZXJmYWNlKCkgY2FsbCAtIHdpdGggSUZDQ19CRUFDT04gaW4gdGhlIGNoYW5nZWQgZmllbGQuCisJICovCisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCisJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UU0ZfUkVTRVQ7CiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjE5NCwxOSArMjQwNiwyNCBAQAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX3ZhcCAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJdTMyIHJmaWx0ID0gMDsKIAlpbnQgZXJyb3IsIGk7CiAKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCiAJLyogVE9ETzogTmVlZCB0byBkZWNpZGUgd2hpY2ggaHcgb3Btb2RlIHRvIHVzZSBmb3IgbXVsdGktaW50ZXJmYWNlCiAJICogY2FzZXMgKi8KIAlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGFoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJYWgtPmFoX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJICAgIGFoLT5vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJYWgtPm9wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAJCWF0aDlrX2h3X3NldG9wbW9kZShhaCk7Ci0JCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoYWgsIHNjLT5zY19teWFkZHIsIDApOworCQltZW1jcHkoc2MtPmN1cmJzc2lkLCBzYy0+c2NfYWgtPm1hY2FkZHIsIEVUSF9BTEVOKTsKKwkJc2MtPmN1cmFpZCA9IDA7CisJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MpOwogCQkvKiBSZXF1ZXN0IGZ1bGwgcmVzZXQgdG8gZ2V0IGh3IG9wbW9kZSBjaGFuZ2VkIHByb3Blcmx5ICovCiAJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9GVUxMX1JFU0VUOwogCX0KQEAgLTIyMTYsMTggKzI0MzMsMTkgQEAKIAkJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCQkvKiBTZXQgQlNTSUQgKi8KLQkJCW1lbWNweShzYy0+c2NfY3VyYnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCQlzYy0+c2NfY3VyYWlkID0gMDsKLQkJCWF0aDlrX2h3X3dyaXRlX2Fzc29jaWQoc2MtPnNjX2FoLCBzYy0+c2NfY3VyYnNzaWQsCi0JCQkJCSAgICAgICBzYy0+c2NfY3VyYWlkKTsKKwkJCW1lbWNweShzYy0+Y3VyYnNzaWQsIGNvbmYtPmJzc2lkLCBFVEhfQUxFTik7CisJCQltZW1jcHkoYXZwLT5ic3NpZCwgY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJCXNjLT5jdXJhaWQgPSAwOworCQkJYXRoOWtfaHdfd3JpdGVfYXNzb2NpZChzYyk7CiAKIAkJCS8qIFNldCBhZ2dyZWdhdGlvbiBwcm90ZWN0aW9uIG1vZGUgcGFyYW1ldGVycyAqLwotCQkJc2MtPnNjX2NvbmZpZy5hdGhfYWdncl9wcm90ID0gMDsKKwkJCXNjLT5jb25maWcuYXRoX2FnZ3JfcHJvdCA9IDA7CiAKIAkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAogCQkJCSJSWCBmaWx0ZXIgMHgleCBic3NpZCAlcE0gYWlkIDB4JXhcbiIsCi0JCQkJcmZpbHQsIHNjLT5zY19jdXJic3NpZCwgc2MtPnNjX2N1cmFpZCk7CisJCQkJcmZpbHQsIHNjLT5jdXJic3NpZCwgc2MtPmN1cmFpZCk7CiAKIAkJCS8qIG5lZWQgdG8gcmVjb25maWd1cmUgdGhlIGJlYWNvbiAqLwogCQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9CRUFDT05TIDsKQEAgLTIyMzgsMjQgKzI0NTYsMzAgQEAKIAkJfQogCX0KIAotCWlmICgoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikgJiYKLQkgICAgKCh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8Ci0JICAgICAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSkpIHsKLQkJLyoKLQkJICogQWxsb2NhdGUgYW5kIHNldHVwIHRoZSBiZWFjb24gZnJhbWUuCi0JCSAqCi0JCSAqIFN0b3AgYW55IHByZXZpb3VzIGJlYWNvbiBETUEuICBUaGlzIG1heSBiZQotCQkgKiBuZWNlc3NhcnksIGZvciBleGFtcGxlLCB3aGVuIGFuIGlic3MgbWVyZ2UKLQkJICogY2F1c2VzIHJlY29uZmlndXJhdGlvbjsgd2UgbWF5IGJlIGNhbGxlZAotCQkgKiB3aXRoIGJlYWNvbiB0cmFuc21pc3Npb24gYWN0aXZlLgotCQkgKi8KLQkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKKwlpZiAoKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgfHwKKwkgICAgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCQlpZiAoKGNvbmYtPmNoYW5nZWQgJiBJRUVFODAyMTFfSUZDQ19CRUFDT04pIHx8CisJCSAgICAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEICYmCisJCSAgICAgY29uZi0+ZW5hYmxlX2JlYWNvbikpIHsKKwkJCS8qCisJCQkgKiBBbGxvY2F0ZSBhbmQgc2V0dXAgdGhlIGJlYWNvbiBmcmFtZS4KKwkJCSAqCisJCQkgKiBTdG9wIGFueSBwcmV2aW91cyBiZWFjb24gRE1BLiAgVGhpcyBtYXkgYmUKKwkJCSAqIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsIHdoZW4gYW4gaWJzcyBtZXJnZQorCQkJICogY2F1c2VzIHJlY29uZmlndXJhdGlvbjsgd2UgbWF5IGJlIGNhbGxlZAorCQkJICogd2l0aCBiZWFjb24gdHJhbnNtaXNzaW9uIGFjdGl2ZS4KKwkJCSAqLworCQkJYXRoOWtfaHdfc3RvcHR4ZG1hKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKTsKIAotCQllcnJvciA9IGF0aF9iZWFjb25fYWxsb2Moc2MsIDApOwotCQlpZiAoZXJyb3IgIT0gMCkKLQkJCXJldHVybiBlcnJvcjsKKwkJCWVycm9yID0gYXRoX2JlYWNvbl9hbGxvYyhhcGh5LCB2aWYpOworCQkJaWYgKGVycm9yICE9IDApIHsKKwkJCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCQkJcmV0dXJuIGVycm9yOworCQkJfQogCi0JCWF0aF9iZWFjb25fc3luYyhzYywgMCk7CisJCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgdmlmKTsKKwkJfQogCX0KIAogCS8qIENoZWNrIGZvciBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSA/ICovCkBAIC0yMjY0LDEzICsyNDg4LDE1IEBACiAJCQlpZiAoYXRoOWtfaHdfa2V5aXN2YWxpZChzYy0+c2NfYWgsICh1MTYpaSkpCiAJCQkJYXRoOWtfaHdfa2V5c2V0bWFjKHNjLT5zY19haCwKIAkJCQkJCSAgICh1MTYpaSwKLQkJCQkJCSAgIHNjLT5zY19jdXJic3NpZCk7CisJCQkJCQkgICBzYy0+Y3VyYnNzaWQpOwogCX0KIAogCS8qIE9ubHkgbGVnYWN5IElCU1MgZm9yIG5vdyAqLwogCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCWF0aF91cGRhdGVfY2hhaW5tYXNrKHNjLCAwKTsKIAorCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMjg5LDcgKzI1MTUsOCBAQAogCQkJCSAgIGludCBtY19jb3VudCwKIAkJCQkgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdCkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXUzMiByZmlsdDsKIAogCWNoYW5nZWRfZmxhZ3MgJj0gU1VQUE9SVEVEX0ZJTFRFUlM7CkBAIC0yMjk5LDExICsyNTI2LDYgQEAKIAlyZmlsdCA9IGF0aF9jYWxjcnhmaWx0ZXIoc2MpOwogCWF0aDlrX2h3X3NldHJ4ZmlsdGVyKHNjLT5zY19haCwgcmZpbHQpOwogCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCQlhdGg5a19od193cml0ZV9hc3NvY2lkKHNjLT5zY19haCwgYXRoX2JjYXN0X21hYywgMCk7Ci0JfQotCiAJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJTZXQgSFcgUlggZmlsdGVyOiAweCV4XG4iLCBzYy0+cngucnhmaWx0ZXIpOwogfQogCkBAIC0yMzEyLDcgKzI1MzQsOCBAQAogCQkJICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNUQV9OT1RJRllfQUREOgpAQCAtMjMyNiwxNyArMjU0OSwxOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBhdGg5a19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJIHUxNiBxdWV1ZSwKK3N0YXRpYyBpbnQgYXRoOWtfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIAlpbnQgcmV0ID0gMCwgcW51bTsKIAogCWlmIChxdWV1ZSA+PSBXTUVfTlVNX0FDKQogCQlyZXR1cm4gMDsKIAorCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisKIAlxaS50cWlfYWlmcyA9IHBhcmFtcy0+YWlmczsKIAlxaS50cWlfY3dtaW4gPSBwYXJhbXMtPmN3X21pbjsKIAlxaS50cWlfY3dtYXggPSBwYXJhbXMtPmN3X21heDsKQEAgLTIzNTMsMjkgKzI1NzgsMzkgQEAKIAlpZiAocmV0KQogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVFhRIFVwZGF0ZSBmYWlsZWRcbiIpOwogCisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBhdGg5a19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJIGNvbnN0IHU4ICpsb2NhbF9hZGRyLAotCQkJIGNvbnN0IHU4ICphZGRyLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAlpbnQgcmV0ID0gMDsKIAorCWlmIChtb2RwYXJhbV9ub2h3Y3J5cHQpCisJCXJldHVybiAtRU5PU1BDOworCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19wc193YWtldXAoc2MpOwogCURQUklOVEYoc2MsIEFUSF9EQkdfS0VZQ0FDSEUsICJTZXQgSFcgS2V5XG4iKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTRVRfS0VZOgotCQlyZXQgPSBhdGhfa2V5X2NvbmZpZyhzYywgYWRkciwga2V5KTsKKwkJcmV0ID0gYXRoX2tleV9jb25maWcoc2MsIHZpZiwgc3RhLCBrZXkpOwogCQlpZiAocmV0ID49IDApIHsKIAkJCWtleS0+aHdfa2V5X2lkeCA9IHJldDsKIAkJCS8qIHB1c2ggSVYgYW5kIE1pY2hhZWwgTUlDIGdlbmVyYXRpb24gdG8gc3RhY2sgKi8KIAkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOwogCQkJaWYgKGtleS0+YWxnID09IEFMR19US0lQKQogCQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX01NSUM7CisJCQlpZiAoc2MtPnNjX2FoLT5zd19tZ210X2NyeXB0byAmJiBrZXktPmFsZyA9PSBBTEdfQ0NNUCkKKwkJCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UOwogCQkJcmV0ID0gMDsKIAkJfQogCQlicmVhazsKQEAgLTIzODYsNiArMjYyMSw5IEBACiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjM5NCw3ICsyNjMyLDEwIEBACiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCiAJCQkJICAgdTMyIGNoYW5nZWQpCiB7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewogCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywgIkJTUyBDaGFuZ2VkIFBSRUFNQkxFICVkXG4iLApAQCAtMjQyMCwzMyArMjY2MSw1MCBAQAogCQkJYnNzX2NvbmYtPmFzc29jKTsKIAkJYXRoOWtfYnNzX2Fzc29jX2luZm8oc2MsIHZpZiwgYnNzX2NvbmYpOwogCX0KKworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIAogc3RhdGljIHU2NCBhdGg5a19nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXU2NCB0c2Y7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKLQl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChhaCk7CisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwl0c2YgPSBhdGg5a19od19nZXR0c2Y2NChzYy0+c2NfYWgpOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAogCXJldHVybiB0c2Y7CiB9CiAKK3N0YXRpYyB2b2lkIGF0aDlrX3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCWF0aDlrX2h3X3NldHRzZjY0KHNjLT5zY19haCwgdHNmKTsKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7Cit9CisKIHN0YXRpYyB2b2lkIGF0aDlrX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKIAotCWF0aDlrX2h3X3Jlc2V0X3RzZihhaCk7CisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19od19yZXNldF90c2Yoc2MtPnNjX2FoKTsKKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkgICAgICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQorCQkJICAgICAgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGFjdGlvbikgewpAQCAtMjQ3Miw3ICsyNzMwLDcgQEAKIAogCQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKGh3LCBzdGEtPmFkZHIsIHRpZCk7CiAJCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1JFU1VNRToKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9PUEVSQVRJT05BTDoKIAkJYXRoX3R4X2FnZ3JfcmVzdW1lKHNjLCBzdGEsIHRpZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yNDgyLDcgKzI3NDAsNDEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoOWtfb3BzID0geworc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCWlmIChhdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBUd28gd2lwaHlzIHRyeWluZyB0byBzY2FuIGF0IHRoZSAiCisJCSAgICAgICAic2FtZSB0aW1lXG4iKTsKKwkJLyoKKwkJICogRG8gbm90IGFsbG93IHRoZSBjb25jdXJyZW50IHNjYW5uaW5nIHN0YXRlIGZvciBub3cuIFRoaXMKKwkJICogY291bGQgYmUgaW1wcm92ZWQgd2l0aCBzY2FubmluZyBjb250cm9sIG1vdmVkIGludG8gYXRoOWsuCisJCSAqLworCQlyZXR1cm47CisJfQorCisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfU0NBTjsKKwlhdGg5a193aXBoeV9wYXVzZV9hbGxfZm9yY2VkKHNjLCBhcGh5KTsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1NDQU5OSU5HOworCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfQUNUSVZFOworCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfU0NBTk5JTkc7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworfQorCitzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19vcHMgPSB7CiAJLnR4IAkJICAgID0gYXRoOWtfdHgsCiAJLnN0YXJ0IAkJICAgID0gYXRoOWtfc3RhcnQsCiAJLnN0b3AgCQkgICAgPSBhdGg5a19zdG9wLApAQCAtMjQ5Niw4ICsyNzg4LDExIEBACiAJLmJzc19pbmZvX2NoYW5nZWQgICA9IGF0aDlrX2Jzc19pbmZvX2NoYW5nZWQsCiAJLnNldF9rZXkgICAgICAgICAgICA9IGF0aDlrX3NldF9rZXksCiAJLmdldF90c2YgCSAgICA9IGF0aDlrX2dldF90c2YsCisJLnNldF90c2YgCSAgICA9IGF0aDlrX3NldF90c2YsCiAJLnJlc2V0X3RzZiAJICAgID0gYXRoOWtfcmVzZXRfdHNmLAogCS5hbXBkdV9hY3Rpb24gICAgICAgPSBhdGg5a19hbXBkdV9hY3Rpb24sCisJLnN3X3NjYW5fc3RhcnQgICAgICA9IGF0aDlrX3N3X3NjYW5fc3RhcnQsCisJLnN3X3NjYW5fY29tcGxldGUgICA9IGF0aDlrX3N3X3NjYW5fY29tcGxldGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTI1MjYsNyArMjgyMSw3IEBACiAvKgogICogUmV0dXJuIHRoZSBNQUMvQkIgbmFtZS4gIj8/Pz8iIGlzIHJldHVybmVkIGlmIHRoZSBNQUMvQkIgaXMgdW5rbm93bi4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBhdGhfbWFjX2JiX25hbWUodTMyIG1hY19iYl92ZXJzaW9uKQogewogCWludCBpOwpAQCAtMjU0Myw3ICsyODM4LDcgQEAKIC8qCiAgKiBSZXR1cm4gdGhlIFJGIG5hbWUuICI/Pz8/IiBpcyByZXR1cm5lZCBpZiB0aGUgUkYgaXMgdW5rbm93bi4KICAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorY29uc3QgY2hhciAqCiBhdGhfcmZfbmFtZSh1MTYgcmZfdmVyc2lvbikKIHsKIAlpbnQgaTsKQEAgLTI1NTcsMjU0ICsyODUyLDYyIEBACiAJcmV0dXJuICI/Pz8/IjsKIH0KIAotc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2M7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0JdTggY3N6OwotCXUzMiB2YWw7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQotCQlyZXR1cm4gLUVJTzsKLQotCXJldCA9ICBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBub3QgYXZhaWxhYmxlXG4iKTsKLQkJZ290byBiYWQ7Ci0JfQotCi0JcmV0ID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBjb25zaXN0ZW50ICIKLQkJCSJETUEgZW5hYmxlIGZhaWxlZFxuIik7Ci0JCWdvdG8gYmFkOwotCX0KLQotCS8qCi0JICogQ2FjaGUgbGluZSBzaXplIGlzIHVzZWQgdG8gc2l6ZSBhbmQgYWxpZ24gdmFyaW91cwotCSAqIHN0cnVjdHVyZXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4KLQkgKi8KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAmY3N6KTsKLQlpZiAoY3N6ID09IDApIHsKLQkJLyoKLQkJICogTGludXggMi40LjE4IChhdCBsZWFzdCkgd3JpdGVzIHRoZSBjYWNoZSBsaW5lIHNpemUKLQkJICogcmVnaXN0ZXIgYXMgYSAxNi1iaXQgd2lkZSByZWdpc3RlciB3aGljaCBpcyB3cm9uZy4KLQkJICogV2UgbXVzdCBoYXZlIHRoaXMgc2V0dXAgcHJvcGVybHkgZm9yIHJ4IGJ1ZmZlcgotCQkgKiBETUEgdG8gd29yayBzbyBmb3JjZSBhIHJlYXNvbmFibGUgdmFsdWUgaGVyZSBpZiBpdAotCQkgKiBjb21lcyB1cCB6ZXJvLgotCQkgKi8KLQkJY3N6ID0gTDFfQ0FDSEVfQllURVMgLyBzaXplb2YodTMyKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsIGNzeik7Ci0JfQotCS8qCi0JICogVGhlIGRlZmF1bHQgc2V0dGluZyBvZiBsYXRlbmN5IHRpbWVyIHlpZWxkcyBwb29yIHJlc3VsdHMsCi0JICogc2V0IGl0IHRvIHRoZSB2YWx1ZSB1c2VkIGJ5IG90aGVyIHN5c3RlbXMuIEl0IG1heSBiZSB3b3J0aAotCSAqIHR3ZWFraW5nIHRoaXMgc2V0dGluZyBtb3JlLgotCSAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgMHhhOCk7Ci0KLQlwY2lfc2V0X21hc3RlcihwZGV2KTsKLQotCS8qCi0JICogRGlzYWJsZSB0aGUgUkVUUllfVElNRU9VVCByZWdpc3RlciAoMHg0MSkgdG8ga2VlcAotCSAqIFBDSSBUeCByZXRyaWVzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBDMyBDUFUgc3RhdGUuCi0JICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsICZ2YWwpOwotCWlmICgodmFsICYgMHgwMDAwZmYwMCkgIT0gMCkKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCB2YWwgJiAweGZmZmYwMGZmKTsKLQotCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAwLCAiYXRoOWsiKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlBDSSBtZW1vcnkgcmVnaW9uIHJlc2VydmUgZXJyb3JcbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGJhZDsKLQl9Ci0KLQltZW0gPSBwY2lfaW9tYXAocGRldiwgMCwgMCk7Ci0JaWYgKCFtZW0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQQ0kgbWVtb3J5IG1hcCBlcnJvclxuIikgOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGJhZDE7Ci0JfQotCi0JaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfc29mdGMpLCAmYXRoOWtfb3BzKTsKLQlpZiAoaHcgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImF0aF9wY2k6IG5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKLQkJZ290byBiYWQyOwotCX0KLQotCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOwotCi0Jc2MgPSBody0+cHJpdjsKLQlzYy0+aHcgPSBodzsKLQlzYy0+cGRldiA9IHBkZXY7Ci0Jc2MtPm1lbSA9IG1lbTsKLQotCWlmIChhdGhfYXR0YWNoKGlkLT5kZXZpY2UsIHNjKSAhPSAwKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gYmFkMzsKLQl9Ci0KLQkvKiBzZXR1cCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lICovCi0KLQlpZiAocmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGhfaXNyLCBJUlFGX1NIQVJFRCwgImF0aCIsIHNjKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X2lycSBmYWlsZWRcbiIsCi0JCQl3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGJhZDQ7Ci0JfQotCi0JYWggPSBzYy0+c2NfYWg7Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4ICIKLQkgICAgICAgIkFSJXMgUkYgUmV2OiV4OiBtZW09MHglbHgsIGlycT0lZFxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAotCSAgICAgICBhdGhfbWFjX2JiX25hbWUoYWgtPmFoX21hY1ZlcnNpb24pLAotCSAgICAgICBhaC0+YWhfbWFjUmV2LAotCSAgICAgICBhdGhfcmZfbmFtZSgoYWgtPmFoX2FuYWxvZzVHaHpSZXYgJiBBUl9SQURJT19TUkVWX01BSk9SKSksCi0JICAgICAgIGFoLT5haF9waHlSZXYsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgcGRldi0+aXJxKTsKLQotCXJldHVybiAwOwotYmFkNDoKLQlhdGhfZGV0YWNoKHNjKTsKLWJhZDM6Ci0JaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwotYmFkMjoKLQlwY2lfaW91bm1hcChwZGV2LCBtZW0pOwotYmFkMToKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci1iYWQ6Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQlhdGhfZGV0YWNoKHNjKTsKLQlpZiAocGRldi0+aXJxKQotCQlmcmVlX2lycShwZGV2LT5pcnEsIHNjKTsKLQlwY2lfaW91bm1hcChwZGV2LCBzYy0+bWVtKTsKLQlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgaW50IGF0aF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0KLQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIEFUSF9MRURfUElOLCAxKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1JGS0lMTCkgfHwgZGVmaW5lZChDT05GSUdfUkZLSUxMX01PRFVMRSkKLQlpZiAoc2MtPnNjX2FoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfUkZTSUxFTlQpCi0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnJmX2tpbGwucmZraWxsX3BvbGwpOwotI2VuZGlmCi0KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCAzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF0aF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7Ci0JdTMyIHZhbDsKLQlpbnQgZXJyOwotCi0JZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQkvKgotCSAqIFN1c3BlbmQvUmVzdW1lIHJlc2V0cyB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UsIHNvIHdlIGhhdmUgdG8KLQkgKiByZS1kaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCi0JICogUENJIFR4IHJldHJpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIEMzIENQVSBzdGF0ZQotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCAmdmFsKTsKLQlpZiAoKHZhbCAmIDB4MDAwMGZmMDApICE9IDApCi0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg0MCwgdmFsICYgMHhmZmZmMDBmZik7Ci0KLQkvKiBFbmFibGUgTEVEICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIEFUSF9MRURfUElOLAotCQkJICAgIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQpOwotCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQotCS8qCi0JICogY2hlY2sgdGhlIGgvdyByZmtpbGwgc3RhdGUgb24gcmVzdW1lCi0JICogYW5kIHN0YXJ0IHRoZSByZmtpbGwgcG9sbCB0aW1lcgotCSAqLwotCWlmIChzYy0+c2NfYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKLQkJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLAotCQkJCSAgICZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCwgMCk7Ci0jZW5kaWYKLQotCXJldHVybiAwOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhdGhfcGNpX2lkX3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGF0aF9wY2lfZHJpdmVyID0gewotCS5uYW1lICAgICAgID0gImF0aDlrIiwKLQkuaWRfdGFibGUgICA9IGF0aF9wY2lfaWRfdGFibGUsCi0JLnByb2JlICAgICAgPSBhdGhfcGNpX3Byb2JlLAotCS5yZW1vdmUgICAgID0gYXRoX3BjaV9yZW1vdmUsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgICAgPSBhdGhfcGNpX3N1c3BlbmQsCi0JLnJlc3VtZSAgICAgPSBhdGhfcGNpX3Jlc3VtZSwKLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfYXRoX3BjaSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYXRoOWtfaW5pdCh2b2lkKQogewogCWludCBlcnJvcjsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgZGV2X2luZm8sIEFUSF9QQ0lfVkVSU0lPTik7Ci0KIAkvKiBSZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtICovCiAJZXJyb3IgPSBhdGhfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCk7CiAJaWYgKGVycm9yICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLAorCQkJImF0aDlrOiBVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sICIKKwkJCSJhbGdvcml0aG06ICVkXG4iLAogCQkJZXJyb3IpOwotCQlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaWYgKHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKSA8IDApIHsKKwllcnJvciA9IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KCk7CisJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUgotCQkJImF0aF9wY2k6IE5vIGRldmljZXMgZm91bmQsIGRyaXZlciBub3QgaW5zdGFsbGVkLlxuIik7Ci0JCWF0aF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwotCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCQkiYXRoOWs6IFVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyByb290OiAlZFxuIiwKKwkJCWVycm9yKTsKKwkJZ290byBlcnJfcmF0ZV91bnJlZ2lzdGVyOworCX0KKworCWVycm9yID0gYXRoX3BjaV9pbml0KCk7CisJaWYgKGVycm9yIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJhdGg5azogTm8gUENJIGRldmljZXMgZm91bmQsIGRyaXZlciBub3QgaW5zdGFsbGVkLlxuIik7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcmVtb3ZlX3Jvb3Q7CisJfQorCisJZXJyb3IgPSBhdGhfYWhiX2luaXQoKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnJfcGNpX2V4aXQ7CiAJfQogCiAJcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChpbml0X2F0aF9wY2kpOwogCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9hdGhfcGNpKHZvaWQpCi17CisgZXJyX3BjaV9leGl0OgorCWF0aF9wY2lfZXhpdCgpOworCisgZXJyX3JlbW92ZV9yb290OgorCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7CisgZXJyX3JhdGVfdW5yZWdpc3RlcjoKIAlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmF0aF9wY2lfZHJpdmVyKTsKKyBlcnJfb3V0OgorCXJldHVybiBlcnJvcjsKK30KK21vZHVsZV9pbml0KGF0aDlrX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRoOWtfZXhpdCh2b2lkKQoreworCWF0aF9haGJfZXhpdCgpOworCWF0aF9wY2lfZXhpdCgpOworCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7CisJYXRoX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERyaXZlciB1bmxvYWRlZFxuIiwgZGV2X2luZm8pOwogfQotbW9kdWxlX2V4aXQoZXhpdF9hdGhfcGNpKTsKK21vZHVsZV9leGl0KGF0aDlrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGJjNTg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcGNpLmMKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgImF0aDlrLmgiCisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGhfcGNpX2lkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyMykgfSwgLyogUENJICAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyNCkgfSwgLyogUENJLUUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyNykgfSwgLyogUENJICAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyOSkgfSwgLyogUENJICAgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyQSkgfSwgLyogUENJLUUgKi8KKwl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyQikgfSwgLyogUENJLUUgKi8KKwl7IDAgfQorfTsKKworLyogcmV0dXJuIGJ1cyBjYWNoZXNpemUgaW4gNEIgd29yZCB1bml0cyAqLworc3RhdGljIHZvaWQgYXRoX3BjaV9yZWFkX2NhY2hlc2l6ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50ICpjc3opCit7CisJdTggdTh0bXA7CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZSh0b19wY2lfZGV2KHNjLT5kZXYpLCBQQ0lfQ0FDSEVfTElORV9TSVpFLAorCQkJICAgICAodTggKikmdTh0bXApOworCSpjc3ogPSAoaW50KXU4dG1wOworCisJLyoKKwkgKiBUaGlzIGNoZWNrIHdhcyBwdXQgaW4gdG8gYXZvaWQgInVucGxlc2FudCIgY29uc2VxdWVuY2VzIGlmCisJICogdGhlIGJvb3Ryb20gaGFzIG5vdCBmdWxseSBpbml0aWFsaXplZCBhbGwgUENJIGRldmljZXMuCisJICogU29tZXRpbWVzIHRoZSBjYWNoZSBsaW5lIHNpemUgcmVnaXN0ZXIgaXMgbm90IHNldAorCSAqLworCisJaWYgKCpjc3ogPT0gMCkKKwkJKmNzeiA9IERFRkFVTFRfQ0FDSEVMSU5FID4+IDI7ICAgLyogVXNlIHRoZSBkZWZhdWx0IHNpemUgKi8KK30KKworc3RhdGljIHZvaWQgYXRoX3BjaV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihzYy0+ZGV2KTsKKworCXBjaV9pb3VubWFwKHBkZXYsIHNjLT5tZW0pOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Cit9CisKK3N0YXRpYyBib29sIGF0aF9wY2lfZWVwcm9tX3JlYWQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBvZmYsIHUxNiAqZGF0YSkKK3sKKwkodm9pZClSRUdfUkVBRChhaCwgQVI1NDE2X0VFUFJPTV9PRkZTRVQgKyAob2ZmIDw8IEFSNTQxNl9FRVBST01fUykpOworCisJaWYgKCFhdGg5a19od193YWl0KGFoLAorCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBLAorCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX0JVU1kgfAorCQkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1BST1RfQUNDRVNTLCAwLAorCQkJICAgQUhfV0FJVF9USU1FT1VUKSkgeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJKmRhdGEgPSBNUyhSRUdfUkVBRChhaCwgQVJfRUVQUk9NX1NUQVRVU19EQVRBKSwKKwkJICAgQVJfRUVQUk9NX1NUQVRVU19EQVRBX1ZBTCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHN0cnVjdCBhdGhfYnVzX29wcyBhdGhfcGNpX2J1c19vcHMgPSB7CisJLnJlYWRfY2FjaGVzaXplID0gYXRoX3BjaV9yZWFkX2NhY2hlc2l6ZSwKKwkuY2xlYW51cCA9IGF0aF9wY2lfY2xlYW51cCwKKwkuZWVwcm9tX3JlYWQgPSBhdGhfcGNpX2VlcHJvbV9yZWFkLAorfTsKKworc3RhdGljIGludCBhdGhfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJdm9pZCBfX2lvbWVtICptZW07CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwl1OCBjc3o7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGF0aF9odyAqYWg7CisKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gIHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aDlrOiAzMi1iaXQgRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlnb3RvIGJhZDsKKwl9CisKKwlyZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImF0aDlrOiAzMi1iaXQgRE1BIGNvbnNpc3RlbnQgIgorCQkJIkRNQSBlbmFibGUgZmFpbGVkXG4iKTsKKwkJZ290byBiYWQ7CisJfQorCisJLyoKKwkgKiBDYWNoZSBsaW5lIHNpemUgaXMgdXNlZCB0byBzaXplIGFuZCBhbGlnbiB2YXJpb3VzCisJICogc3RydWN0dXJlcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlLgorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZjc3opOworCWlmIChjc3ogPT0gMCkgeworCQkvKgorCQkgKiBMaW51eCAyLjQuMTggKGF0IGxlYXN0KSB3cml0ZXMgdGhlIGNhY2hlIGxpbmUgc2l6ZQorCQkgKiByZWdpc3RlciBhcyBhIDE2LWJpdCB3aWRlIHJlZ2lzdGVyIHdoaWNoIGlzIHdyb25nLgorCQkgKiBXZSBtdXN0IGhhdmUgdGhpcyBzZXR1cCBwcm9wZXJseSBmb3IgcnggYnVmZmVyCisJCSAqIERNQSB0byB3b3JrIHNvIGZvcmNlIGEgcmVhc29uYWJsZSB2YWx1ZSBoZXJlIGlmIGl0CisJCSAqIGNvbWVzIHVwIHplcm8uCisJCSAqLworCQljc3ogPSBMMV9DQUNIRV9CWVRFUyAvIHNpemVvZih1MzIpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgY3N6KTsKKwl9CisJLyoKKwkgKiBUaGUgZGVmYXVsdCBzZXR0aW5nIG9mIGxhdGVuY3kgdGltZXIgeWllbGRzIHBvb3IgcmVzdWx0cywKKwkgKiBzZXQgaXQgdG8gdGhlIHZhbHVlIHVzZWQgYnkgb3RoZXIgc3lzdGVtcy4gSXQgbWF5IGJlIHdvcnRoCisJICogdHdlYWtpbmcgdGhpcyBzZXR0aW5nIG1vcmUuCisJICovCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAweGE4KTsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisJcmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIDAsICJhdGg5ayIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIG1lbW9yeSByZWdpb24gcmVzZXJ2ZSBlcnJvclxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gYmFkOworCX0KKworCW1lbSA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIW1lbSkgeworCQlwcmludGsoS0VSTl9FUlIgIlBDSSBtZW1vcnkgbWFwIGVycm9yXG4iKSA7CisJCXJldCA9IC1FSU87CisJCWdvdG8gYmFkMTsKKwl9CisKKwlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGF0aF93aXBoeSkgKworCQkJCXNpemVvZihzdHJ1Y3QgYXRoX3NvZnRjKSwgJmF0aDlrX29wcyk7CisJaWYgKGh3ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhdGhfcGNpOiBubyBtZW1vcnkgZm9yIGllZWU4MDIxMV9od1xuIik7CisJCWdvdG8gYmFkMjsKKwl9CisKKwlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKKworCWFwaHkgPSBody0+cHJpdjsKKwlzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIChhcGh5ICsgMSk7CisJYXBoeS0+c2MgPSBzYzsKKwlhcGh5LT5odyA9IGh3OworCXNjLT5wcmlfd2lwaHkgPSBhcGh5OworCXNjLT5odyA9IGh3OworCXNjLT5kZXYgPSAmcGRldi0+ZGV2OworCXNjLT5tZW0gPSBtZW07CisJc2MtPmJ1c19vcHMgPSAmYXRoX3BjaV9idXNfb3BzOworCisJaWYgKGF0aF9hdHRhY2goaWQtPmRldmljZSwgc2MpICE9IDApIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBiYWQzOworCX0KKworCS8qIHNldHVwIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KKworCWlmIChyZXF1ZXN0X2lycShwZGV2LT5pcnEsIGF0aF9pc3IsIElSUUZfU0hBUkVELCAiYXRoIiwgc2MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlcXVlc3RfaXJxIGZhaWxlZFxuIiwKKwkJCXdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gYmFkNDsKKwl9CisKKwlzYy0+aXJxID0gcGRldi0+aXJxOworCisJYWggPSBzYy0+c2NfYWg7CisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiJXM6IEF0aGVyb3MgQVIlcyBNQUMvQkIgUmV2OiV4ICIKKwkgICAgICAgIkFSJXMgUkYgUmV2OiV4OiBtZW09MHglbHgsIGlycT0lZFxuIiwKKwkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAorCSAgICAgICBhdGhfbWFjX2JiX25hbWUoYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiksCisJICAgICAgIGFoLT5od192ZXJzaW9uLm1hY1JldiwKKwkgICAgICAgYXRoX3JmX25hbWUoKGFoLT5od192ZXJzaW9uLmFuYWxvZzVHaHpSZXYgJiBBUl9SQURJT19TUkVWX01BSk9SKSksCisJICAgICAgIGFoLT5od192ZXJzaW9uLnBoeVJldiwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcpbWVtLCBwZGV2LT5pcnEpOworCisJcmV0dXJuIDA7CitiYWQ0OgorCWF0aF9kZXRhY2goc2MpOworYmFkMzoKKwlpZWVlODAyMTFfZnJlZV9odyhodyk7CitiYWQyOgorCXBjaV9pb3VubWFwKHBkZXYsIG1lbSk7CitiYWQxOgorCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKK2JhZDoKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYXRoX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhdGhfY2xlYW51cChzYyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIGludCBhdGhfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKworCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgQVRIX0xFRF9QSU4sIDEpOworCisjaWYgZGVmaW5lZChDT05GSUdfUkZLSUxMKSB8fCBkZWZpbmVkKENPTkZJR19SRktJTExfTU9EVUxFKQorCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9SRlNJTEVOVCkKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+cmZfa2lsbC5yZmtpbGxfcG9sbCk7CisjZW5kaWYKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGhfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlpbnQgZXJyOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCS8qIEVuYWJsZSBMRUQgKi8KKwlhdGg5a19od19jZmdfb3V0cHV0KHNjLT5zY19haCwgQVRIX0xFRF9QSU4sCisJCQkgICAgQVJfR1BJT19PVVRQVVRfTVVYX0FTX09VVFBVVCk7CisJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBBVEhfTEVEX1BJTiwgMSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19SRktJTEwpIHx8IGRlZmluZWQoQ09ORklHX1JGS0lMTF9NT0RVTEUpCisJLyoKKwkgKiBjaGVjayB0aGUgaC93IHJma2lsbCBzdGF0ZSBvbiByZXN1bWUKKwkgKiBhbmQgc3RhcnQgdGhlIHJma2lsbCBwb2xsIHRpbWVyCisJICovCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsCisJCQkJICAgJnNjLT5yZl9raWxsLnJma2lsbF9wb2xsLCAwKTsKKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGF0aF9wY2lfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgYXRoX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgPSAiYXRoOWsiLAorCS5pZF90YWJsZSAgID0gYXRoX3BjaV9pZF90YWJsZSwKKwkucHJvYmUgICAgICA9IGF0aF9wY2lfcHJvYmUsCisJLnJlbW92ZSAgICAgPSBhdGhfcGNpX3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCAgICA9IGF0aF9wY2lfc3VzcGVuZCwKKwkucmVzdW1lICAgICA9IGF0aF9wY2lfcmVzdW1lLAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworfTsKKworaW50IGF0aF9wY2lfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhdGhfcGNpX2RyaXZlcik7Cit9CisKK3ZvaWQgYXRoX3BjaV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhdGhfcGNpX2RyaXZlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCmluZGV4IDc2Njk4MmEuLjhiY2JhOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsMjIgKzE0LDE3IEBACiAgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgogICovCiAKLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiaHcuaCIKLSNpbmNsdWRlICJyZWcuaCIKLSNpbmNsdWRlICJwaHkuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiB2b2lkCi1hdGg5a19od193cml0ZV9yZWdzKHN0cnVjdCBhdGhfaGFsICphaCwgdTMyIG1vZGVzSW5kZXgsIHUzMiBmcmVxSW5kZXgsCithdGg5a19od193cml0ZV9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbW9kZXNJbmRleCwgdTMyIGZyZXFJbmRleCwKIAkJICAgIGludCByZWdXcml0ZXMpCiB7Ci0Jc3RydWN0IGF0aF9oYWxfNTQxNiAqYWhwID0gQUg1NDE2KGFoKTsKLQotCVJFR19XUklURV9BUlJBWSgmYWhwLT5haF9pbmlCQl9SZkdhaW4sIGZyZXFJbmRleCwgcmVnV3JpdGVzKTsKKwlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlCQl9SZkdhaW4sIGZyZXFJbmRleCwgcmVnV3JpdGVzKTsKIH0KIAogYm9vbAotYXRoOWtfaHdfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK2F0aDlrX2h3X3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAl1MzIgY2hhbm5lbFNlbCA9IDA7CiAJdTMyIGJNb2RlU3ludGggPSAwOwpAQCAtOTUsMTUgKzkwLDE0IEBACiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWSgweDM3KSwgcmVnMzIpOwogCi0JYWgtPmFoX2N1cmNoYW4gPSBjaGFuOwotCi0JQUg1NDE2KGFoKS0+YWhfY3VyY2hhblJhZEluZGV4ID0gLTE7CisJYWgtPmN1cmNoYW4gPSBjaGFuOworCWFoLT5jdXJjaGFuX3JhZF9pbmRleCA9IC0xOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wKLWF0aDlrX2h3X2FyOTI4MF9zZXRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCithdGg5a19od19hcjkyODBfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgICAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pCiB7CiAJdTE2IGJNb2RlLCBmcmFjTW9kZSwgYU1vZGVSZWZTZWwgPSAwOwpAQCAtMTM4LDIwICsxMzIsMjcgQEAKIAkJYk1vZGUgPSAwOwogCQlmcmFjTW9kZSA9IDA7CiAKLQkJaWYgKChmcmVxICUgMjApID09IDApIHsKLQkJCWFNb2RlUmVmU2VsID0gMzsKLQkJfSBlbHNlIGlmICgoZnJlcSAlIDEwKSA9PSAwKSB7Ci0JCQlhTW9kZVJlZlNlbCA9IDI7Ci0JCX0gZWxzZSB7CisJCXN3aXRjaChhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX0ZSQUNfTl81RykpIHsKKwkJY2FzZSAwOgorCQkJaWYgKChmcmVxICUgMjApID09IDApIHsKKwkJCQlhTW9kZVJlZlNlbCA9IDM7CisJCQl9IGVsc2UgaWYgKChmcmVxICUgMTApID09IDApIHsKKwkJCQlhTW9kZVJlZlNlbCA9IDI7CisJCQl9CisJCQlpZiAoYU1vZGVSZWZTZWwpCisJCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJZGVmYXVsdDoKIAkJCWFNb2RlUmVmU2VsID0gMDsKLQogCQkJZnJhY01vZGUgPSAxOwogCQkJcmVmRGl2QSA9IDE7CiAJCQljaGFubmVsU2VsID0gKGZyZXEgKiAweDgwMDApIC8gMTU7CiAKIAkJCVJFR19STVdfRklFTEQoYWgsIEFSX0FOX1NZTlRIOSwKIAkJCQkgICAgICBBUl9BTl9TWU5USDlfUkVGRElWQSwgcmVmRGl2QSk7CisKIAkJfQorCiAJCWlmICghZnJhY01vZGUpIHsKIAkJCW5kaXYgPSAoZnJlcSAqIChyZWZEaXZBID4+IGFNb2RlUmVmU2VsKSkgLyA2MDsKIAkJCWNoYW5uZWxTZWwgPSBuZGl2ICYgMHgxZmY7CkBAIC0xNjYsOSArMTY3LDggQEAKIAogCVJFR19XUklURShhaCwgQVJfUEhZX1NZTlRIX0NPTlRST0wsIHJlZzMyKTsKIAotCWFoLT5haF9jdXJjaGFuID0gY2hhbjsKLQotCUFINTQxNihhaCktPmFoX2N1cmNoYW5SYWRJbmRleCA9IC0xOworCWFoLT5jdXJjaGFuID0gY2hhbjsKKwlhaC0+Y3VyY2hhbl9yYWRfaW5kZXggPSAtMTsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtMjAxLDExICsyMDEsOSBAQAogfQogCiBib29sCi1hdGg5a19od19zZXRfcmZfcmVncyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAorYXRoOWtfaHdfc2V0X3JmX3JlZ3Moc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLAogCQkgICAgIHUxNiBtb2Rlc0luZGV4KQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAl1MzIgZWVwTWlub3JSZXY7CiAJdTMyIG9iNUdIeiA9IDAsIGRiNUdIeiA9IDA7CiAJdTMyIG9iMkdIeiA9IDAsIGRiMkdIeiA9IDA7CkBAIC0yMTQsMTYxICsyMTIsMTU2IEBACiAJaWYgKEFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpCiAJCXJldHVybiB0cnVlOwogCi0JZWVwTWlub3JSZXYgPSBhdGg5a19od19nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKTsKKwllZXBNaW5vclJldiA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfTUlOT1JfUkVWKTsKIAotCVJGX0JBTktfU0VUVVAoYWhwLT5haF9hbmFsb2dCYW5rMERhdGEsICZhaHAtPmFoX2luaUJhbmswLCAxKTsKKwlSRl9CQU5LX1NFVFVQKGFoLT5hbmFsb2dCYW5rMERhdGEsICZhaC0+aW5pQmFuazAsIDEpOwogCi0JUkZfQkFOS19TRVRVUChhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSwgJmFocC0+YWhfaW5pQmFuazEsIDEpOworCVJGX0JBTktfU0VUVVAoYWgtPmFuYWxvZ0JhbmsxRGF0YSwgJmFoLT5pbmlCYW5rMSwgMSk7CiAKLQlSRl9CQU5LX1NFVFVQKGFocC0+YWhfYW5hbG9nQmFuazJEYXRhLCAmYWhwLT5haF9pbmlCYW5rMiwgMSk7CisJUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazJEYXRhLCAmYWgtPmluaUJhbmsyLCAxKTsKIAotCVJGX0JBTktfU0VUVVAoYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEsICZhaHAtPmFoX2luaUJhbmszLAorCVJGX0JBTktfU0VUVVAoYWgtPmFuYWxvZ0JhbmszRGF0YSwgJmFoLT5pbmlCYW5rMywKIAkJICAgICAgbW9kZXNJbmRleCk7CiAJewogCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IGFocC0+YWhfaW5pQmFuazZUUEMuaWFfcm93czsgaSsrKSB7Ci0JCQlhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YVtpXSA9Ci0JCQkgICAgSU5JX1JBKCZhaHAtPmFoX2luaUJhbms2VFBDLCBpLCBtb2Rlc0luZGV4KTsKKwkJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlCYW5rNlRQQy5pYV9yb3dzOyBpKyspIHsKKwkJCWFoLT5hbmFsb2dCYW5rNkRhdGFbaV0gPQorCQkJICAgIElOSV9SQSgmYWgtPmluaUJhbms2VFBDLCBpLCBtb2Rlc0luZGV4KTsKIAkJfQogCX0KIAogCWlmIChlZXBNaW5vclJldiA+PSAyKSB7CiAJCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKLQkJCW9iMkdIeiA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9PQl8yKTsKLQkJCWRiMkdIeiA9IGF0aDlrX2h3X2dldF9lZXByb20oYWgsIEVFUF9EQl8yKTsKLQkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFocC0+YWhfYW5hbG9nQmFuazZEYXRhLAorCQkJb2IyR0h6ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9PQl8yKTsKKwkJCWRiMkdIeiA9IGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfREJfMik7CisJCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaC0+YW5hbG9nQmFuazZEYXRhLAogCQkJCQkJICAgb2IyR0h6LCAzLCAxOTcsIDApOwotCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEsCisJCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaC0+YW5hbG9nQmFuazZEYXRhLAogCQkJCQkJICAgZGIyR0h6LCAzLCAxOTQsIDApOwogCQl9IGVsc2UgewotCQkJb2I1R0h6ID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX09CXzUpOwotCQkJZGI1R0h6ID0gYXRoOWtfaHdfZ2V0X2VlcHJvbShhaCwgRUVQX0RCXzUpOwotCQkJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEsCisJCQlvYjVHSHogPSBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX09CXzUpOworCQkJZGI1R0h6ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9EQl81KTsKKwkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkJCQkgICBvYjVHSHosIDMsIDIwMywgMCk7Ci0JCQlhdGg5a19waHlfbW9kaWZ5X3J4X2J1ZmZlcihhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSwKKwkJCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkJCQkgICBkYjVHSHosIDMsIDIwMCwgMCk7CiAJCX0KIAl9CiAKLQlSRl9CQU5LX1NFVFVQKGFocC0+YWhfYW5hbG9nQmFuazdEYXRhLCAmYWhwLT5haF9pbmlCYW5rNywgMSk7CisJUkZfQkFOS19TRVRVUChhaC0+YW5hbG9nQmFuazdEYXRhLCAmYWgtPmluaUJhbms3LCAxKTsKIAotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMCwgYWhwLT5haF9hbmFsb2dCYW5rMERhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazAsIGFoLT5hbmFsb2dCYW5rMERhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMSwgYWhwLT5haF9hbmFsb2dCYW5rMURhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazEsIGFoLT5hbmFsb2dCYW5rMURhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMiwgYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazIsIGFoLT5hbmFsb2dCYW5rMkRhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rMywgYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazMsIGFoLT5hbmFsb2dCYW5rM0RhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNlRQQywgYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazZUUEMsIGFoLT5hbmFsb2dCYW5rNkRhdGEsCiAJCQkgICByZWdXcml0ZXMpOwotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNywgYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEsCisJUkVHX1dSSVRFX1JGX0FSUkFZKCZhaC0+aW5pQmFuazcsIGFoLT5hbmFsb2dCYW5rN0RhdGEsCiAJCQkgICByZWdXcml0ZXMpOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQKLWF0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaGFsICphaCkKK2F0aDlrX2h3X3JmZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rMERhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0JhbmswRGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazBEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0JhbmswRGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rMERhdGEpOworCQlhaC0+YW5hbG9nQmFuazBEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYW5hbG9nQmFuazFEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hbmFsb2dCYW5rMURhdGEpOwotCQlhaHAtPmFoX2FuYWxvZ0JhbmsxRGF0YSA9IE5VTEw7CisJaWYgKGFoLT5hbmFsb2dCYW5rMURhdGEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YW5hbG9nQmFuazFEYXRhKTsKKwkJYWgtPmFuYWxvZ0JhbmsxRGF0YSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2FuYWxvZ0JhbmsyRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazJEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazJEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0JhbmsyRGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rMkRhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0JhbmszRGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazNEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0JhbmszRGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rM0RhdGEpOworCQlhaC0+YW5hbG9nQmFuazNEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYW5hbG9nQmFuazZEYXRhICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEpOwotCQlhaHAtPmFoX2FuYWxvZ0Jhbms2RGF0YSA9IE5VTEw7CisJaWYgKGFoLT5hbmFsb2dCYW5rNkRhdGEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YW5hbG9nQmFuazZEYXRhKTsKKwkJYWgtPmFuYWxvZ0Jhbms2RGF0YSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2FuYWxvZ0Jhbms2VFBDRGF0YSAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYW5hbG9nQmFuazZUUENEYXRhKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rNlRQQ0RhdGEgPSBOVUxMOworCWlmIChhaC0+YW5hbG9nQmFuazZUUENEYXRhICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmFuYWxvZ0Jhbms2VFBDRGF0YSk7CisJCWFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEgPSBOVUxMOwogCX0KLQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEgIT0gTlVMTCkgewotCQlrZnJlZShhaHAtPmFoX2FuYWxvZ0Jhbms3RGF0YSk7Ci0JCWFocC0+YWhfYW5hbG9nQmFuazdEYXRhID0gTlVMTDsKKwlpZiAoYWgtPmFuYWxvZ0Jhbms3RGF0YSAhPSBOVUxMKSB7CisJCWtmcmVlKGFoLT5hbmFsb2dCYW5rN0RhdGEpOworCQlhaC0+YW5hbG9nQmFuazdEYXRhID0gTlVMTDsKIAl9Ci0JaWYgKGFocC0+YWhfYWRkYWM1NDE2XzIxICE9IE5VTEwpIHsKLQkJa2ZyZWUoYWhwLT5haF9hZGRhYzU0MTZfMjEpOwotCQlhaHAtPmFoX2FkZGFjNTQxNl8yMSA9IE5VTEw7CisJaWYgKGFoLT5hZGRhYzU0MTZfMjEgIT0gTlVMTCkgeworCQlrZnJlZShhaC0+YWRkYWM1NDE2XzIxKTsKKwkJYWgtPmFkZGFjNTQxNl8yMSA9IE5VTEw7CiAJfQotCWlmIChhaHAtPmFoX2Jhbms2VGVtcCAhPSBOVUxMKSB7Ci0JCWtmcmVlKGFocC0+YWhfYmFuazZUZW1wKTsKLQkJYWhwLT5haF9iYW5rNlRlbXAgPSBOVUxMOworCWlmIChhaC0+YmFuazZUZW1wICE9IE5VTEwpIHsKKwkJa2ZyZWUoYWgtPmJhbms2VGVtcCk7CisJCWFoLT5iYW5rNlRlbXAgPSBOVUxMOwogCX0KIH0KIAotYm9vbCBhdGg5a19od19pbml0X3JmKHN0cnVjdCBhdGhfaGFsICphaCwgaW50ICpzdGF0dXMpCitib29sIGF0aDlrX2h3X2luaXRfcmYoc3RydWN0IGF0aF9odyAqYWgsIGludCAqc3RhdHVzKQogewotCXN0cnVjdCBhdGhfaGFsXzU0MTYgKmFocCA9IEFINTQxNihhaCk7Ci0KIAlpZiAoIUFSX1NSRVZfOTI4MF8xMF9PUl9MQVRFUihhaCkpIHsKKwkJYWgtPmFuYWxvZ0JhbmswRGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rMC5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWFoLT5hbmFsb2dCYW5rMURhdGEgPQorCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgorCQkJICAgICBhaC0+aW5pQmFuazEuaWFfcm93cyksIEdGUF9LRVJORUwpOworCQlhaC0+YW5hbG9nQmFuazJEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbmsyLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJYWgtPmFuYWxvZ0JhbmszRGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rMy5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWFoLT5hbmFsb2dCYW5rNkRhdGEgPQorCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgorCQkJICAgICBhaC0+aW5pQmFuazYuaWFfcm93cyksIEdGUF9LRVJORUwpOworCQlhaC0+YW5hbG9nQmFuazZUUENEYXRhID0KKwkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKKwkJCSAgICAgYWgtPmluaUJhbms2VFBDLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKKwkJYWgtPmFuYWxvZ0Jhbms3RGF0YSA9CisJCSAgICBremFsbG9jKChzaXplb2YodTMyKSAqCisJCQkgICAgIGFoLT5pbmlCYW5rNy5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CiAKLQkJYWhwLT5haF9hbmFsb2dCYW5rMERhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmswLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rMURhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmsxLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmsyLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbmszLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbms2LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rNlRQQ0RhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbms2VFBDLmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQkJYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEgPQotCQkgICAga3phbGxvYygoc2l6ZW9mKHUzMikgKgotCQkJICAgICBhaHAtPmFoX2luaUJhbms3LmlhX3Jvd3MpLCBHRlBfS0VSTkVMKTsKLQotCQlpZiAoYWhwLT5haF9hbmFsb2dCYW5rMERhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rMURhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rMkRhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rM0RhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rNkRhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rNlRQQ0RhdGEgPT0gTlVMTAotCQkgICAgfHwgYWhwLT5haF9hbmFsb2dCYW5rN0RhdGEgPT0gTlVMTCkgeworCQlpZiAoYWgtPmFuYWxvZ0JhbmswRGF0YSA9PSBOVUxMCisJCSAgICB8fCBhaC0+YW5hbG9nQmFuazFEYXRhID09IE5VTEwKKwkJICAgIHx8IGFoLT5hbmFsb2dCYW5rMkRhdGEgPT0gTlVMTAorCQkgICAgfHwgYWgtPmFuYWxvZ0JhbmszRGF0YSA9PSBOVUxMCisJCSAgICB8fCBhaC0+YW5hbG9nQmFuazZEYXRhID09IE5VTEwKKwkJICAgIHx8IGFoLT5hbmFsb2dCYW5rNlRQQ0RhdGEgPT0gTlVMTAorCQkgICAgfHwgYWgtPmFuYWxvZ0Jhbms3RGF0YSA9PSBOVUxMKSB7CiAJCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19GQVRBTCwKIAkJCQkiQ2Fubm90IGFsbG9jYXRlIFJGIGJhbmtzXG4iKTsKIAkJCSpzdGF0dXMgPSAtRU5PTUVNOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKLQkJYWhwLT5haF9hZGRhYzU0MTZfMjEgPQorCQlhaC0+YWRkYWM1NDE2XzIxID0KIAkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKLQkJCSAgICAgYWhwLT5haF9pbmlBZGRhYy5pYV9yb3dzICoKLQkJCSAgICAgYWhwLT5haF9pbmlBZGRhYy5pYV9jb2x1bW5zKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChhaHAtPmFoX2FkZGFjNTQxNl8yMSA9PSBOVUxMKSB7CisJCQkgICAgIGFoLT5pbmlBZGRhYy5pYV9yb3dzICoKKwkJCSAgICAgYWgtPmluaUFkZGFjLmlhX2NvbHVtbnMpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGFoLT5hZGRhYzU0MTZfMjEgPT0gTlVMTCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIkNhbm5vdCBhbGxvY2F0ZSBhaF9hZGRhYzU0MTZfMjFcbiIpOworCQkJCSJDYW5ub3QgYWxsb2NhdGUgYWRkYWM1NDE2XzIxXG4iKTsKIAkJCSpzdGF0dXMgPSAtRU5PTUVNOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKLQkJYWhwLT5haF9iYW5rNlRlbXAgPQorCQlhaC0+YmFuazZUZW1wID0KIAkJICAgIGt6YWxsb2MoKHNpemVvZih1MzIpICoKLQkJCSAgICAgYWhwLT5haF9pbmlCYW5rNi5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChhaHAtPmFoX2Jhbms2VGVtcCA9PSBOVUxMKSB7CisJCQkgICAgIGFoLT5pbmlCYW5rNi5pYV9yb3dzKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChhaC0+YmFuazZUZW1wID09IE5VTEwpIHsKIAkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAotCQkJCSJDYW5ub3QgYWxsb2NhdGUgYWhfYmFuazZUZW1wXG4iKTsKKwkJCQkiQ2Fubm90IGFsbG9jYXRlIGJhbms2VGVtcFxuIik7CiAJCQkqc3RhdHVzID0gLUVOT01FTTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQpAQCAtMzc4LDI0ICszNzEsMjMgQEAKIH0KIAogdm9pZAotYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK2F0aDlrX2h3X2RlY3JlYXNlX2NoYWluX3Bvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKIHsKIAlpbnQgaSwgcmVnV3JpdGVzID0gMDsKLQlzdHJ1Y3QgYXRoX2hhbF81NDE2ICphaHAgPSBBSDU0MTYoYWgpOwogCXUzMiBiYW5rNlNlbE1hc2s7Ci0JdTMyICpiYW5rNlRlbXAgPSBhaHAtPmFoX2Jhbms2VGVtcDsKKwl1MzIgKmJhbms2VGVtcCA9IGFoLT5iYW5rNlRlbXA7CiAKLQlzd2l0Y2ggKGFocC0+YWhfZGl2ZXJzaXR5Q29udHJvbCkgeworCXN3aXRjaCAoYWgtPmRpdmVyc2l0eV9jb250cm9sKSB7CiAJY2FzZSBBVEg5S19BTlRfRklYRURfQToKIAkJYmFuazZTZWxNYXNrID0KLQkJICAgIChhaHAtPgotCQkgICAgIGFoX2FudGVubmFTd2l0Y2hTd2FwICYgQU5UU1dBUF9BQikgPyBSRURVQ0VfQ0hBSU5fMCA6CisJCSAgICAoYWgtPgorCQkgICAgIGFudGVubmFfc3dpdGNoX3N3YXAgJiBBTlRTV0FQX0FCKSA/IFJFRFVDRV9DSEFJTl8wIDoKIAkJICAgIFJFRFVDRV9DSEFJTl8xOwogCQlicmVhazsKIAljYXNlIEFUSDlLX0FOVF9GSVhFRF9COgogCQliYW5rNlNlbE1hc2sgPQotCQkgICAgKGFocC0+Ci0JCSAgICAgYWhfYW50ZW5uYVN3aXRjaFN3YXAgJiBBTlRTV0FQX0FCKSA/IFJFRFVDRV9DSEFJTl8xIDoKKwkJICAgIChhaC0+CisJCSAgICAgYW50ZW5uYV9zd2l0Y2hfc3dhcCAmIEFOVFNXQVBfQUIpID8gUkVEVUNFX0NIQUlOXzEgOgogCQkgICAgUkVEVUNFX0NIQUlOXzA7CiAJCWJyZWFrOwogCWNhc2UgQVRIOUtfQU5UX1ZBUklBQkxFOgpAQCAtNDA2LDggKzM5OCw4IEBACiAJCWJyZWFrOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBhaHAtPmFoX2luaUJhbms2LmlhX3Jvd3M7IGkrKykKLQkJYmFuazZUZW1wW2ldID0gYWhwLT5haF9hbmFsb2dCYW5rNkRhdGFbaV07CisJZm9yIChpID0gMDsgaSA8IGFoLT5pbmlCYW5rNi5pYV9yb3dzOyBpKyspCisJCWJhbms2VGVtcFtpXSA9IGFoLT5hbmFsb2dCYW5rNkRhdGFbaV07CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9CQVNFICsgMHhEOCwgYmFuazZTZWxNYXNrKTsKIApAQCAtNDIxLDcgKzQxMyw3IEBACiAJYXRoOWtfcGh5X21vZGlmeV9yeF9idWZmZXIoYmFuazZUZW1wLCAxLCAxLCAyNDYsIDApOwogCWF0aDlrX3BoeV9tb2RpZnlfcnhfYnVmZmVyKGJhbms2VGVtcCwgMSwgMSwgMjQ3LCAwKTsKIAotCVJFR19XUklURV9SRl9BUlJBWSgmYWhwLT5haF9pbmlCYW5rNiwgYmFuazZUZW1wLCByZWdXcml0ZXMpOworCVJFR19XUklURV9SRl9BUlJBWSgmYWgtPmluaUJhbms2LCBiYW5rNlRlbXAsIHJlZ1dyaXRlcyk7CiAKIAlSRUdfV1JJVEUoYWgsIEFSX1BIWV9CQVNFICsgMHhEOCwgMHgwMDAwMDA1Myk7CiAjaWZkZWYgQUxURVJfU1dJVENICmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCmluZGV4IDNhNDA2YTUuLjBmN2Y4ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3BoeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTcsMTkgKzE3LDE5IEBACiAjaWZuZGVmIFBIWV9ICiAjZGVmaW5lIFBIWV9ICiAKLWJvb2wgYXRoOWtfaHdfYXI5MjgwX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfYXI5MjgwX3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkJCSBzdHJ1Y3QgYXRoOWtfY2hhbm5lbAogCQkJCSAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X3NldF9jaGFubmVsKHN0cnVjdCBhdGhfaGFsICphaCwKK2Jvb2wgYXRoOWtfaHdfc2V0X2NoYW5uZWwoc3RydWN0IGF0aF9odyAqYWgsCiAJCQkgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKTsKLXZvaWQgYXRoOWtfaHdfd3JpdGVfcmVncyhzdHJ1Y3QgYXRoX2hhbCAqYWgsIHUzMiBtb2Rlc0luZGV4LAordm9pZCBhdGg5a19od193cml0ZV9yZWdzKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgbW9kZXNJbmRleCwKIAkJCSB1MzIgZnJlcUluZGV4LCBpbnQgcmVnV3JpdGVzKTsKLWJvb2wgYXRoOWtfaHdfc2V0X3JmX3JlZ3Moc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19zZXRfcmZfcmVncyhzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCSAgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCQkgIHUxNiBtb2Rlc0luZGV4KTsKLXZvaWQgYXRoOWtfaHdfZGVjcmVhc2VfY2hhaW5fcG93ZXIoc3RydWN0IGF0aF9oYWwgKmFoLAordm9pZCBhdGg5a19od19kZWNyZWFzZV9jaGFpbl9wb3dlcihzdHJ1Y3QgYXRoX2h3ICphaCwKIAkJCQkgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbik7Ci1ib29sIGF0aDlrX2h3X2luaXRfcmYoc3RydWN0IGF0aF9oYWwgKmFoLAorYm9vbCBhdGg5a19od19pbml0X3JmKHN0cnVjdCBhdGhfaHcgKmFoLAogCQkgICAgICBpbnQgKnN0YXR1cyk7CiAKICNkZWZpbmUgQVJfUEhZX0JBU0UgICAgIDB4OTgwMApAQCAtMzg3LDYgKzM4Nyw4IEBACiAKICNkZWZpbmUgQVJfUEhZX0NDS19UWF9DVFJMICAgICAgIDB4QTIwNAogI2RlZmluZSBBUl9QSFlfQ0NLX1RYX0NUUkxfSkFQQU4gMHgwMDAwMDAxMAorI2RlZmluZSBBUl9QSFlfQ0NLX1RYX0NUUkxfVFhfREFDX1NDQUxFX0NDSyAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgQVJfUEhZX0NDS19UWF9DVFJMX1RYX0RBQ19TQ0FMRV9DQ0tfUyAgICAgICAyCiAKICNkZWZpbmUgQVJfUEhZX0NDS19ERVRFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgICAweEEyMDgKICNkZWZpbmUgQVJfUEhZX0NDS19ERVRFQ1RfV0VBS19TSUdfVEhSX0NDSyAgICAgICAgICAweDAwMDAwMDNGCkBAIC00NDQsNiArNDQ2LDMyIEBACiAjZGVmaW5lIEFSX1BIWV9UUENSRzFfUERfR0FJTl8zICAgIDB4MDAzMDAwMDAKICNkZWZpbmUgQVJfUEhZX1RQQ1JHMV9QRF9HQUlOXzNfUyAgMjAKIAorI2RlZmluZSBBUl9QSFlfVFBDUkcxX1BEX0NBTF9FTkFCTEUgICAweDAwNDAwMDAwCisjZGVmaW5lIEFSX1BIWV9UUENSRzFfUERfQ0FMX0VOQUJMRV9TIDIyCisKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw0ICAgICAgIDB4YTI2NAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfVkFMSUQgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfUERfQVZHX1ZBTElEX1MgICAwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX1BEX0FWR19PVVQgICAgICAgMHgwMDAwMDFGRQorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9QRF9BVkdfT1VUX1MgICAgIDEKKworI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDZfMCAgICAgMHhhMjcwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMNl8xICAgICAweGIyNzAKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkxfRVJSX0VTVF9NT0RFICAgICAweDAzMDAwMDAwCisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX0VSUl9FU1RfTU9ERV9TICAgMjQKKworI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTDcgICAgICAgMHhhMjc0CisjZGVmaW5lIEFSX1BIWV9UWF9QV1JDVFJMX0lOSVRfVFhfR0FJTiAgICAgMHgwMUY4MDAwMAorI2RlZmluZSBBUl9QSFlfVFhfUFdSQ1RSTF9JTklUX1RYX0dBSU5fUyAgIDE5CisKKyNkZWZpbmUgQVJfUEhZX1RYX1BXUkNUUkw5ICAgICAgIDB4YTI3QworI2RlZmluZSBBUl9QSFlfVFhfREVTSVJFRF9TQ0FMRV9DQ0sgICAgICAgIDB4MDAwMDdDMDAKKyNkZWZpbmUgQVJfUEhZX1RYX0RFU0lSRURfU0NBTEVfQ0NLX1MgICAgICAxMAorCisjZGVmaW5lIEFSX1BIWV9UWF9HQUlOX1RCTDEgICAgICAweGEzMDAKKyNkZWZpbmUgQVJfUEhZX1RYX0dBSU4gICAgICAgICAgICAgICAgICAgICAweDAwMDdGMDAwCisjZGVmaW5lIEFSX1BIWV9UWF9HQUlOX1MgICAgICAgICAgICAgICAgICAgMTIKKwogI2RlZmluZSBBUl9QSFlfVklUX01BU0syX01fNDZfNjEgMHhhM2EwCiAjZGVmaW5lIEFSX1BIWV9NQVNLMl9NXzMxXzQ1ICAgICAweGEzYTQKICNkZWZpbmUgQVJfUEhZX01BU0syX01fMTZfMzAgICAgIDB4YTNhOApAQCAtNDg1LDYgKzUxMywxMSBAQAogI2RlZmluZSBBUl9QSFlfVFBDUkc1X1BEX0dBSU5fQk9VTkRBUllfNCAgICAweDBGQzAwMDAwCiAjZGVmaW5lIEFSX1BIWV9UUENSRzVfUERfR0FJTl9CT1VOREFSWV80X1MgIDIyCiAKKy8qIENhcnJpZXIgbGVhayBjYWxpYnJhdGlvbiBjb250cm9sLCBkbyBpdCBhZnRlciBBR0MgY2FsaWJyYXRpb24gKi8KKyNkZWZpbmUgQVJfUEhZX0NMX0NBTF9DVEwgICAgICAgMHhBMzU4CisjZGVmaW5lIEFSX1BIWV9DTF9DQUxfRU5BQkxFICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfUEhZX1BBUkFMTEVMX0NBTF9FTkFCTEUgICAgMHgwMDAwMDAwMQorCiAjZGVmaW5lIEFSX1BIWV9QT1dFUl9UWF9SQVRFNSAgIDB4QTM4QwogI2RlZmluZSBBUl9QSFlfUE9XRVJfVFhfUkFURTYgICAweEEzOTAKIApAQCAtNTMwLDEwICs1NjMsOCBAQAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCi0jZGVmaW5lIEFUSDlLX0tFWV9YT1IgICAgICAgICAgICAgICAgIDB4YWEKLQogI2RlZmluZSBBVEg5S19JU19NSUNfRU5BQkxFRChhaCkJCQkJCVwKLQkoQUg1NDE2KGFoKS0+YWhfc3RhSWQxRGVmYXVsdHMgJiBBUl9TVEFfSUQxX0NSUFRfTUlDX0VOQUJMRSkKKwkoKGFoKS0+c3RhX2lkMV9kZWZhdWx0cyAmIEFSX1NUQV9JRDFfQ1JQVF9NSUNfRU5BQkxFKQogCiAjZGVmaW5lIEFOVFNXQVBfQUIgMHgwMDAxCiAjZGVmaW5lIFJFRFVDRV9DSEFJTl8wIDB4MDAwMDAwNTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5jCmluZGV4IDFiNzFiOTMuLjgyNGNjYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVmlkZW81NCBUZWNobm9sb2dpZXMsIEluYy4KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMsIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE1LDE2ICsxNSwxNSBAQAogICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImF0aDlrLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExbmFfcmF0ZXRhYmxlID0gewogCTQyLAotCXswfSwKIAl7CiAJCXsgVkFMSUQsIFZBTElELCBXTEFOX1JDX1BIWV9PRkRNLCA2MDAwLCAvKiA2IE1iICovCiAJCQk1NDAwLCAweDBiLCAweDAwLCAxMiwKIAkJCTAsIDIsIDEsIDAsIDAsIDAsIDAsIDAgfSwKLQkJeyBWQUxJRCwJVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KKwkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDkwMDAsIC8qIDkgTWIgKi8KIAkJCTc4MDAsICAweDBmLCAweDAwLCAxOCwKIAkJCTAsIDMsIDEsIDEsIDEsIDEsIDEsIDAgfSwKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX09GRE0sIDEyMDAwLCAvKiAxMiBNYiAqLwpAQCAtMTU4LDcgKzE1Nyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExbmdfcmF0ZXRhYmxlID0gewogCTQ2LAotCXswfSwKIAl7CiAJCXsgVkFMSURfQUxMLCBWQUxJRF9BTEwsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLApAQCAtMzA2LDcgKzMwNCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYV9yYXRldGFibGUgPSB7CiAJOCwKLQl7MH0sCiAJewogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfT0ZETSwgNjAwMCwgLyogNiBNYiAqLwogCQkJNTQwMCwgMHgwYiwgMHgwMCwgKDB4ODB8MTIpLApAQCAtMzQwLDcgKzMzNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExZ19yYXRldGFibGUgPSB7CiAJMTIsCi0JezB9LAogCXsKIAkJeyBWQUxJRCwgVkFMSUQsIFdMQU5fUkNfUEhZX0NDSywgMTAwMCwgLyogMSBNYiAqLwogCQkJOTAwLCAweDFiLCAweDAwLCAyLApAQCAtMzg2LDcgKzM4Miw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgYXI1NDE2XzExYl9yYXRldGFibGUgPSB7CiAJNCwKLQl7MH0sCiAJewogCQl7IFZBTElELCBWQUxJRCwgV0xBTl9SQ19QSFlfQ0NLLCAxMDAwLCAvKiAxIE1iICovCiAJCQk5MDAsIDB4MWIsICAweDAwLCAoMHg4MHwyKSwKQEAgLTYzNiw4ICs2MzEsNyBAQAogc3RhdGljIHU4IGF0aF9yY19yYXRlZmluZF9odChzdHJ1Y3QgYXRoX3NvZnRjICpzYywKIAkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2LAogCQkJICAgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCi0JCQkgICAgIGludCBwcm9iZV9hbGxvd2VkLCBpbnQgKmlzX3Byb2JpbmcsCi0JCQkgICAgIGludCBpc19yZXRyeSkKKwkJCSAgICAgaW50ICppc19wcm9iaW5nKQogewogCXUzMiBkdCwgYmVzdF90aHJ1cHV0LCB0aGlzX3RocnVwdXQsIG5vd19tc2VjOwogCXU4IHJhdGUsIG5leHRfcmF0ZSwgYmVzdF9yYXRlLCBtYXhpbmRleCwgbWluaW5kZXg7CkBAIC03MTksMTMgKzcxMyw2IEBACiAJfQogCiAJcmF0ZSA9IGJlc3RfcmF0ZTsKLQotCS8qIGlmIHdlIGFyZSByZXRyeWluZyBmb3IgbW9yZSB0aGFuIGhhbGYgdGhlIG51bWJlcgotCSAqIG9mIG1heCByZXRyaWVzLCB1c2UgdGhlIG1pbiByYXRlIGZvciB0aGUgbmV4dCByZXRyeQotCSAqLwotCWlmIChpc19yZXRyeSkKLQkJcmF0ZSA9IGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W21pbmluZGV4XTsKLQogCWF0aF9yY19wcml2LT5yc3NpX2xhc3RfbG9va3VwID0gcnNzaV9sYXN0OwogCiAJLyoKQEAgLTczMywxMyArNzIwLDEyIEBACiAJICogbm9uLW1vbm90aWNpdHkgb2YgMTFnJ3MgcmF0ZSB0YWJsZQogCSAqLwogCi0JaWYgKHJhdGUgPj0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSAmJiBwcm9iZV9hbGxvd2VkKSB7CisJaWYgKHJhdGUgPj0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSkgewogCQlyYXRlID0gYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeTsKIAogCQkvKiBQcm9iZSB0aGUgbmV4dCBhbGxvd2VkIHBoeSBzdGF0ZSAqLwotCQkvKiBGSVhNRTpYWFhYIENoZWNrIHRvIG1ha2Ugc3VyZSByYXRNYXggaXMgY2hlY2tlZCBwcm9wZXJseSAqLwogCQlpZiAoYXRoX3JjX2dldF9uZXh0dmFsaWRfdHhyYXRlKHJhdGVfdGFibGUsCi0JCQkJCQlhdGhfcmNfcHJpdiwgcmF0ZSwgJm5leHRfcmF0ZSkgJiYKKwkJCQkJYXRoX3JjX3ByaXYsIHJhdGUsICZuZXh0X3JhdGUpICYmCiAJCSAgICAobm93X21zZWMgLSBhdGhfcmNfcHJpdi0+cHJvYmVfdGltZSA+CiAJCSAgICAgcmF0ZV90YWJsZS0+cHJvYmVfaW50ZXJ2YWwpICYmCiAJCSAgICAoYXRoX3JjX3ByaXYtPmh3X21heHJldHJ5X3BrdGNudCA+PSAxKSkgewpAQCAtNzYxLDE0ICs3NDcsMTcgQEAKIAlyZXR1cm4gcmF0ZTsKIH0KIAotc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgLAorc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjLAogCQkJCSAgIHU4IHRyaWVzLCB1OCByaXgsIGludCBydHNjdHNlbmFibGUpCiB7CiAJcmF0ZS0+Y291bnQgPSB0cmllczsKIAlyYXRlLT5pZHggPSByaXg7CiAKLQlpZiAocnRzY3RzZW5hYmxlKQorCWlmICh0eHJjLT5zaG9ydF9wcmVhbWJsZSkKKwkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRTsKKwlpZiAodHhyYy0+cnRzIHx8IHJ0c2N0c2VuYWJsZSkKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTOwogCWlmIChXTEFOX1JDX1BIWV80MChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5KSkKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDXzQwX01IWl9XSURUSDsKQEAgLTc3OCw2ICs3NjcsNDMgQEAKIAkJcmF0ZS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX01DUzsKIH0KIAorc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVfc2V0X3J0c2N0cyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkgICBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvKQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOworCWludCBpID0gMCwgcml4ID0gMCwgY2l4LCBlbmFibGVfZ19wcm90ZWN0aW9uID0gMDsKKworCS8qIGdldCB0aGUgY2l4IGZvciB0aGUgbG93ZXN0IHZhbGlkIHJpeCAqLworCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChyYXRlc1tpXS5jb3VudCAmJiAocmF0ZXNbaV0uaWR4ID49IDApKSB7CisJCQlyaXggPSByYXRlc1tpXS5pZHg7CisJCQlicmVhazsKKwkJfQorCX0KKwljaXggPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0uY3RybF9yYXRlOworCisJLyogQWxsIHByb3RlY3Rpb24gZnJhbWVzIGFyZSB0cmFuc21pdGVkIGF0IDJNYi9zIGZvciA4MDIuMTFnLAorCSAqIG90aGVyd2lzZSB3ZSB0cmFuc21pdCB0aGVtIGF0IDFNYi9zICovCisJaWYgKHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKKwkgICAgIWNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpCisJCWVuYWJsZV9nX3Byb3RlY3Rpb24gPSAxOworCisJLyoKKwkgKiBJZiA4MDIuMTFnIHByb3RlY3Rpb24gaXMgZW5hYmxlZCwgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdXNlIFJUUy9DVFMgb3IKKwkgKiBqdXN0IENUUy4gIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgZG9uZSBmb3IgT0ZETS9IVCB1bmljYXN0IGZyYW1lcy4KKwkgKi8KKwlpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX1BST1RFQ1RfRU5BQkxFKSAmJgorCSAgICAhKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spICYmCisJICAgIChyYXRlX3RhYmxlLT5pbmZvW3JpeF0ucGh5ID09IFdMQU5fUkNfUEhZX09GRE0gfHwKKwkgICAgIFdMQU5fUkNfUEhZX0hUKHJhdGVfdGFibGUtPmluZm9bcml4XS5waHkpKSkgeworCQlyYXRlc1swXS5mbGFncyB8PSBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUOworCQljaXggPSByYXRlX3RhYmxlLT5pbmZvW2VuYWJsZV9nX3Byb3RlY3Rpb25dLmN0cmxfcmF0ZTsKKwl9CisKKwl0eF9pbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHggPSBjaXg7Cit9CisKIHN0YXRpYyB1OCBhdGhfcmNfcmF0ZV9nZXRpZHgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkgICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKIAkJCSAgICAgc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlLApAQCAtODA5LDU0ICs4MzUsNTggQEAKIAogc3RhdGljIHZvaWQgYXRoX3JjX3JhdGVmaW5kKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJICAgIHN0cnVjdCBhdGhfcmF0ZV9wcml2ICphdGhfcmNfcHJpdiwKLQkJCSAgICBpbnQgbnVtX3RyaWVzLCBpbnQgbnVtX3JhdGVzLAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbywgaW50ICppc19wcm9iZSwKLQkJCSAgICBpbnQgaXNfcmV0cnkpCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgKnR4cmMpCiB7Ci0JdTggdHJ5X3Blcl9yYXRlID0gMCwgaSA9IDAsIHJpeCwgbnJpeDsKIAlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcyA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisJdTggdHJ5X3Blcl9yYXRlID0gMCwgaSA9IDAsIHJpeCwgbnJpeDsKKwlpbnQgaXNfcHJvYmUgPSAwOwogCiAJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKLQlyaXggPSBhdGhfcmNfcmF0ZWZpbmRfaHQoc2MsIGF0aF9yY19wcml2LCByYXRlX3RhYmxlLCAxLAotCQkJCSBpc19wcm9iZSwgaXNfcmV0cnkpOworCXJpeCA9IGF0aF9yY19yYXRlZmluZF9odChzYywgYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsICZpc19wcm9iZSk7CiAJbnJpeCA9IHJpeDsKIAotCWlmICgqaXNfcHJvYmUpIHsKKwlpZiAoaXNfcHJvYmUpIHsKIAkJLyogc2V0IG9uZSB0cnkgZm9yIHByb2JlIHJhdGVzLiBGb3IgdGhlCiAJCSAqIHByb2JlcyBkb24ndCBlbmFibGUgcnRzICovCi0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCAxLCBucml4LCAwKTsKKwkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKKwkJCQkgICAgICAgMSwgbnJpeCwgMCk7CiAKLQkJdHJ5X3Blcl9yYXRlID0gKG51bV90cmllcy9udW1fcmF0ZXMpOworCQl0cnlfcGVyX3JhdGUgPSAoQVRIXzExTl9UWE1BWFRSWS80KTsKIAkJLyogR2V0IHRoZSBuZXh0IHRyaWVkL2FsbG93ZWQgcmF0ZS4gTm8gUlRTIGZvciB0aGUgbmV4dCBzZXJpZXMKIAkJICogYWZ0ZXIgdGhlIHByb2JlIHJhdGUKIAkJICovCi0JCW5yaXggPSBhdGhfcmNfcmF0ZV9nZXRpZHgoc2MsCi0JCQlhdGhfcmNfcHJpdiwgcmF0ZV90YWJsZSwgbnJpeCwgMSwgMCk7Ci0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOworCQlucml4ID0gYXRoX3JjX3JhdGVfZ2V0aWR4KHNjLCBhdGhfcmNfcHJpdiwKKwkJCQkJICByYXRlX3RhYmxlLCBucml4LCAxLCAwKTsKKwkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKKwkJCQkgICAgICAgdHJ5X3Blcl9yYXRlLCBucml4LCAwKTsKKworCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKIAl9IGVsc2UgewotCQl0cnlfcGVyX3JhdGUgPSAobnVtX3RyaWVzL251bV9yYXRlcyk7CisJCXRyeV9wZXJfcmF0ZSA9IChBVEhfMTFOX1RYTUFYVFJZLzQpOwogCQkvKiBTZXQgdGhlIGNob29zZW4gcmF0ZS4gTm8gUlRTIGZvciBmaXJzdCBzZXJpZXMgZW50cnkuICovCi0JCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwKLQkJCSZyYXRlc1tpKytdLCB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOworCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsICZyYXRlc1tpKytdLCB0eHJjLAorCQkJCSAgICAgICB0cnlfcGVyX3JhdGUsIG5yaXgsIDApOwogCX0KIAogCS8qIEZpbGwgaW4gdGhlIG90aGVyIHJhdGVzIGZvciBtdWx0aXJhdGUgcmV0cnkgKi8KLQlmb3IgKCA7IGkgPCBudW1fcmF0ZXM7IGkrKykgeworCWZvciAoIDsgaSA8IDQ7IGkrKykgewogCQl1OCB0cnlfbnVtOwogCQl1OCBtaW5fcmF0ZTsKIAotCQl0cnlfbnVtID0gKChpICsgMSkgPT0gbnVtX3JhdGVzKSA/Ci0JCQludW1fdHJpZXMgLSAodHJ5X3Blcl9yYXRlICogaSkgOiB0cnlfcGVyX3JhdGUgOwotCQltaW5fcmF0ZSA9ICgoKGkgKyAxKSA9PSBudW1fcmF0ZXMpICYmIDApOworCQl0cnlfbnVtID0gKChpICsgMSkgPT0gNCkgPworCQkJQVRIXzExTl9UWE1BWFRSWSAtICh0cnlfcGVyX3JhdGUgKiBpKSA6IHRyeV9wZXJfcmF0ZSA7CisJCW1pbl9yYXRlID0gKCgoaSArIDEpID09IDQpICYmIDApOwogCiAJCW5yaXggPSBhdGhfcmNfcmF0ZV9nZXRpZHgoc2MsIGF0aF9yY19wcml2LAogCQkJCQkgIHJhdGVfdGFibGUsIG5yaXgsIDEsIG1pbl9yYXRlKTsKIAkJLyogQWxsIG90aGVyIHJhdGVzIGluIHRoZSBzZXJpZXMgaGF2ZSBSVFMgZW5hYmxlZCAqLwotCQlhdGhfcmNfcmF0ZV9zZXRfc2VyaWVzKHJhdGVfdGFibGUsCi0JCQkJICAgICAgICZyYXRlc1tpXSwgdHJ5X251bSwgbnJpeCwgMSk7CisJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2ldLCB0eHJjLAorCQkJCSAgICAgICB0cnlfbnVtLCBucml4LCAxKTsKIAl9CiAKIAkvKgpAQCAtODc1LDcgKzkwNSw3IEBACiAJICogYWJvdmUgY29uZGl0aW9ucy4KIAkgKi8KIAlpZiAoKHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopICYmCi0JICAgIChzYy0+aHctPmNvbmYuaHQuZW5hYmxlZCkpIHsKKwkgICAgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikpKSB7CiAJCXU4IGRvdDExcmF0ZSA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5kb3QxMXJhdGU7CiAJCXU4IHBoeSA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5waHk7CiAJCWlmIChpID09IDQgJiYKQEAgLTg4NSw2ICs5MTUsMjQgQEAKIAkJCXJhdGVzWzNdLmZsYWdzID0gcmF0ZXNbMl0uZmxhZ3M7CiAJCX0KIAl9CisKKwkvKgorCSAqIEZvcmNlIGhhcmR3YXJlIHRvIHVzZSBjb21wdXRlZCBkdXJhdGlvbiBmb3IgbmV4dAorCSAqIGZyYWdtZW50IGJ5IGRpc2FibGluZyBtdWx0aS1yYXRlIHJldHJ5LCB3aGljaAorCSAqIHVwZGF0ZXMgZHVyYXRpb24gYmFzZWQgb24gdGhlIG11bHRpLXJhdGUgZHVyYXRpb24gdGFibGUuCisJICoKKwkgKiBGSVhNRTogRml4IGR1cmF0aW9uCisJICovCisJaWYgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKKwkgICAgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSB8fAorCSAgICAgKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfRlJBRykpKSB7CisJCXJhdGVzWzFdLmNvdW50ID0gcmF0ZXNbMl0uY291bnQgPSByYXRlc1szXS5jb3VudCA9IDA7CisJCXJhdGVzWzFdLmlkeCA9IHJhdGVzWzJdLmlkeCA9IHJhdGVzWzNdLmlkeCA9IDA7CisJCXJhdGVzWzBdLmNvdW50ID0gQVRIX1RYTUFYVFJZOworCX0KKworCS8qIFNldHVwIFJUUy9DVFMgKi8KKwlhdGhfcmNfcmF0ZV9zZXRfcnRzY3RzKHNjLCByYXRlX3RhYmxlLCB0eF9pbmZvKTsKIH0KIAogc3RhdGljIGJvb2wgYXRoX3JjX3VwZGF0ZV9wZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCkBAIC0xMjIxLDYgKzEyNjksOSBAQAogCQlhdGhfcmNfcHJpdi0+cGVyX2Rvd25fdGltZSA9IG5vd19tc2VjOwogCX0KIAorCWF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc2MsIHR4X3JhdGUsIHhyZXRyaWVzLCByZXRyaWVzLAorCQkJICAgICAgIGF0aF9yY19wcml2LT5zdGF0ZVt0eF9yYXRlXS5wZXIpOworCiAjdW5kZWYgQ0hLX1JTU0kKIH0KIApAQCAtMTMzOCwzNiArMTM4OSwxOCBAQAogc3RhdGljIHZvaWQgYXRoX3JjX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlKQogewotCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSA9IE5VTEw7CiAJc3RydWN0IGF0aF9yYXRlc2V0ICpyYXRlc2V0ID0gJmF0aF9yY19wcml2LT5uZWdfcmF0ZXM7CiAJdTggKmh0X21jcyA9ICh1OCAqKSZhdGhfcmNfcHJpdi0+bmVnX2h0X3JhdGVzOwogCXU4IGksIGosIGssIGhpID0gMCwgaHRoaSA9IDA7CiAKLQkvKiBGSVhNRTogQWRob2MgKi8KLQlpZiAoKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKLQkJYm9vbCBpc19jd180MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOwotCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKLQkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKLQkJCQkJCSAgIGlzX2N3XzQwKTsKLQl9IGVsc2UgaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCS8qIGN1cl9yYXRlX3RhYmxlIHdvdWxkIGJlIHNldCBvbiBpbml0IHRocm91Z2ggY29uZmlnKCkgKi8KLQkJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKLQl9Ci0KIAlpZiAoIXJhdGVfdGFibGUpIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwgIlJhdGUgdGFibGUgbm90IGluaXRpYWxpemVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKLQkJYXRoX3JjX3ByaXYtPmh0X2NhcCA9IChXTEFOX1JDX0hUX0ZMQUcgfCBXTEFOX1JDX0RTX0ZMQUcpOwotCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApCi0JCQlhdGhfcmNfcHJpdi0+aHRfY2FwIHw9IFdMQU5fUkNfNDBfRkxBRzsKLQl9Ci0KIAkvKiBJbml0aWFsIHJhdGUgdGFibGUgc2l6ZS4gV2lsbCBjaGFuZ2UgZGVwZW5kaW5nCiAJICogb24gdGhlIHdvcmtpbmcgcmF0ZSBzZXQgKi8KIAlhdGhfcmNfcHJpdi0+cmF0ZV90YWJsZV9zaXplID0gUkFURV9UQUJMRV9TSVpFOwpAQCAtMTM4Nyw3ICsxNDIwLDcgQEAKIAkJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWlkeFtpXVtqXSA9IDA7CiAJCWF0aF9yY19wcml2LT52YWxpZF9waHlfcmF0ZWNudFtpXSA9IDA7CiAJfQotCWF0aF9yY19wcml2LT5yY19waHlfbW9kZSA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKTsKKwlhdGhfcmNfcHJpdi0+cmNfcGh5X21vZGUgPSBhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHOwogCiAJLyogU2V0IHN0cmVhbSBjYXBhYmlsaXR5ICovCiAJYXRoX3JjX3ByaXYtPnNpbmdsZV9zdHJlYW0gPSAoYXRoX3JjX3ByaXYtPmh0X2NhcCAmIFdMQU5fUkNfRFNfRkxBRykgPyAwIDogMTsKQEAgLTEzOTUsMTYgKzE0MjgsMTYgQEAKIAlpZiAoIXJhdGVzZXQtPnJzX25yYXRlcykgewogCQkvKiBObyB3b3JraW5nIHJhdGUsIGp1c3QgaW5pdGlhbGl6ZSB2YWxpZCByYXRlcyAqLwogCQloaSA9IGF0aF9yY19pbml0X3ZhbGlkcmF0ZXMoYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsCi0JCQkJCQlhdGhfcmNfcHJpdi0+aHRfY2FwKTsKKwkJCQkJICAgIGF0aF9yY19wcml2LT5odF9jYXApOwogCX0gZWxzZSB7CiAJCS8qIFVzZSBpbnRlcnNlY3Rpb24gb2Ygd29ya2luZyByYXRlcyBhbmQgdmFsaWQgcmF0ZXMgKi8KIAkJaGkgPSBhdGhfcmNfc2V0dmFsaWRfcmF0ZXMoYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsCi0JCQkJCSAgICAgICByYXRlc2V0LCBhdGhfcmNfcHJpdi0+aHRfY2FwKTsKKwkJCQkJICAgcmF0ZXNldCwgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiAJCWlmIChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ19IVF9GTEFHKSB7CiAJCQlodGhpID0gYXRoX3JjX3NldHZhbGlkX2h0cmF0ZXMoYXRoX3JjX3ByaXYsCi0JCQkJCQkJICAgcmF0ZV90YWJsZSwKLQkJCQkJCQkgICBodF9tY3MsCi0JCQkJCQkJICAgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CisJCQkJCQkgICAgICAgcmF0ZV90YWJsZSwKKwkJCQkJCSAgICAgICBodF9tY3MsCisJCQkJCQkgICAgICAgYXRoX3JjX3ByaXYtPmh0X2NhcCk7CiAJCX0KIAkJaGkgPSBBX01BWChoaSwgaHRoaSk7CiAJfQpAQCAtMTQzMiw5ICsxNDY1LDM2IEBACiAJYXRoX3JjX3NvcnRfdmFsaWRyYXRlcyhyYXRlX3RhYmxlLCBhdGhfcmNfcHJpdik7CiAJYXRoX3JjX3ByaXYtPnJhdGVfbWF4X3BoeSA9IGF0aF9yY19wcml2LT52YWxpZF9yYXRlX2luZGV4W2stNF07CiAJc2MtPmN1cl9yYXRlX3RhYmxlID0gcmF0ZV90YWJsZTsKKworCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLCAiUkMgSW5pdGlhbGl6ZWQgd2l0aCBjYXBhYmlsaXRpZXM6IDB4JXhcbiIsCisJCWF0aF9yY19wcml2LT5odF9jYXApOwogfQogCi0vKiBSYXRlIENvbnRyb2wgY2FsbGJhY2tzICovCitzdGF0aWMgdTggYXRoX3JjX2J1aWxkX2h0X2NhcHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkgICAgICAgYm9vbCBpc19jdzQwLCBib29sIGlzX3NnaTQwKQoreworCXU4IGNhcHMgPSAwOworCisJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgeworCQljYXBzID0gV0xBTl9SQ19IVF9GTEFHOworCQlpZiAoc2MtPnNjX2FoLT5jYXBzLnR4X2NoYWlubWFzayAhPSAxICYmCisJCSAgICBhdGg5a19od19nZXRjYXBhYmlsaXR5KHNjLT5zY19haCwgQVRIOUtfQ0FQX0RTLCAwLCBOVUxMKSkgeworCQkJaWYgKHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdKQorCQkJCWNhcHMgfD0gV0xBTl9SQ19EU19GTEFHOworCQl9CisJCWlmIChpc19jdzQwKQorCQkJY2FwcyB8PSBXTEFOX1JDXzQwX0ZMQUc7CisJCWlmIChpc19zZ2k0MCkKKwkJCWNhcHMgfD0gV0xBTl9SQ19TR0lfRkxBRzsKKwl9CisKKwlyZXR1cm4gY2FwczsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogbWFjODAyMTEgUmF0ZSBDb250cm9sIGNhbGxiYWNrcyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiBzdGF0aWMgdm9pZCBhdGhfdHhfc3RhdHVzKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKIAkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE0NjcsNyArMTUyNyw3IEBACiAJICovCiAJaWYgKHR4X2luZm9fcHJpdi0+dHgudHNfZmxhZ3MgJgogCSAgICAoQVRIOUtfVFhfREFUQV9VTkRFUlJVTiB8IEFUSDlLX1RYX0RFTElNX1VOREVSUlVOKSAmJgotCSAgICAoKHNjLT5zY19haC0+YWhfdHhUcmlnTGV2ZWwpID49IGF0aF9yY19wcml2LT50eF90cmlnbGV2ZWxfbWF4KSkgeworCSAgICAoKHNjLT5zY19haC0+dHhfdHJpZ19sZXZlbCkgPj0gYXRoX3JjX3ByaXYtPnR4X3RyaWdsZXZlbF9tYXgpKSB7CiAJCXR4X3N0YXR1cyA9IDE7CiAJCWlzX3VuZGVycnVuID0gMTsKIAl9CkBAIC0xNDgwLDYgKzE1NDAsMjMgQEAKIAkJCSAoaXNfdW5kZXJydW4pID8gQVRIXzExTl9UWE1BWFRSWSA6CiAJCQkgdHhfaW5mb19wcml2LT50eC50c19sb25ncmV0cnkpOwogCisJLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCisJaWYgKGNvbmZfaXNfaHQoJnNjLT5ody0+Y29uZikgJiYKKwkgICAgIShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCQl1OCAqcWMsIHRpZDsKKwkJCXN0cnVjdCBhdGhfbm9kZSAqYW47CisKKwkJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CisJCQl0aWQgPSBxY1swXSAmIDB4ZjsKKwkJCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CisKKwkJCWlmKGF0aF90eF9hZ2dyX2NoZWNrKHNjLCBhbiwgdGlkKSkKKwkJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzYy0+aHcsIGhkci0+YWRkcjEsIHRpZCk7CisJCX0KKwl9CisKKwlhdGhfZGVidWdfc3RhdF9yYyhzYywgc2tiKTsKIGV4aXQ6CiAJa2ZyZWUodHhfaW5mb19wcml2KTsKIH0KQEAgLTE0OTAsMTEgKzE1NjcsOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gdHhyYy0+c2JhbmQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4cmMtPnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gcHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQlzdHJ1Y3QgYXRoX3JhdGVfcHJpdiAqYXRoX3JjX3ByaXYgPSBwcml2X3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0JaW50IGlzX3Byb2JlID0gMDsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CisJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwogCiAJLyogbG93ZXN0IHJhdGUgZm9yIG1hbmFnZW1lbnQgYW5kIG11bHRpY2FzdC9icm9hZGNhc3QgZnJhbWVzICovCkBAIC0xNTA3LDIzICsxNTgyLDcgQEAKIAl9CiAKIAkvKiBGaW5kIHR4IHJhdGUgZm9yIHVuaWNhc3QgZnJhbWVzICovCi0JYXRoX3JjX3JhdGVmaW5kKHNjLCBhdGhfcmNfcHJpdiwgQVRIXzExTl9UWE1BWFRSWSwgNCwKLQkJCXR4X2luZm8sICZpc19wcm9iZSwgZmFsc2UpOwotCi0JLyogQ2hlY2sgaWYgYWdncmVnYXRpb24gaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgdGlkICovCi0JaWYgKGh3LT5jb25mLmh0LmVuYWJsZWQpIHsKLQkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKLQkJCXU4ICpxYywgdGlkOwotCQkJc3RydWN0IGF0aF9ub2RlICphbjsKLQotCQkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKLQkJCXRpZCA9IHFjWzBdICYgMHhmOwotCQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCQkJaWYoYXRoX3R4X2FnZ3JfY2hlY2soc2MsIGFuLCB0aWQpKQotCQkJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKGh3LCBoZHItPmFkZHIxLCB0aWQpOwotCQl9Ci0JfQorCWF0aF9yY19yYXRlZmluZChzYywgYXRoX3JjX3ByaXYsIHR4cmMpOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfcmF0ZV9pbml0KHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLApAQCAtMTUzMSw2ICsxNTkwLDggQEAKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CiAJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIGlzX2N3NDAsIGlzX3NnaTQwOwogCWludCBpLCBqID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CkBAIC0xNTUyLDEyICsxNjEzLDcxIEBACiAJCWF0aF9yY19wcml2LT5uZWdfaHRfcmF0ZXMucnNfbnJhdGVzID0gajsKIAl9CiAKLQlhdGhfcmNfaW5pdChzYywgcHJpdl9zdGEsIHNiYW5kLCBzdGEpOworCWlzX2N3NDAgPSBzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwlpc19zZ2k0MCA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCisJLyogQ2hvb3NlIHJhdGUgdGFibGUgZmlyc3QgKi8KKworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfHwKKwkgICAgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHx8CisJICAgIChzYy0+c2NfYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykpIHsKKwkJcmF0ZV90YWJsZSA9IGF0aF9jaG9vc2VfcmF0ZV90YWJsZShzYywgc2JhbmQtPmJhbmQsCisJCQkJCQkgICBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQsCisJCQkJCQkgICBpc19jdzQwKTsKKwl9IGVsc2UgaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCS8qIGN1cl9yYXRlX3RhYmxlIHdvdWxkIGJlIHNldCBvbiBpbml0IHRocm91Z2ggY29uZmlnKCkgKi8KKwkJcmF0ZV90YWJsZSA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKKwl9CisKKwlhdGhfcmNfcHJpdi0+aHRfY2FwID0gYXRoX3JjX2J1aWxkX2h0X2NhcHMoc2MsIHN0YSwgaXNfY3c0MCwgaXNfc2dpNDApOworCWF0aF9yY19pbml0KHNjLCBwcml2X3N0YSwgc2JhbmQsIHN0YSwgcmF0ZV90YWJsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF9yYXRlX3VwZGF0ZSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSwKKwkJCSAgICB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IHByaXY7CisJc3RydWN0IGF0aF9yYXRlX3ByaXYgKmF0aF9yY19wcml2ID0gcHJpdl9zdGE7CisJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gTlVMTDsKKwlib29sIG9wZXJfY3c0MCA9IGZhbHNlLCBvcGVyX3NnaTQwOworCWJvb2wgbG9jYWxfY3c0MCA9IChhdGhfcmNfcHJpdi0+aHRfY2FwICYgV0xBTl9SQ180MF9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKwlib29sIGxvY2FsX3NnaTQwID0gKGF0aF9yY19wcml2LT5odF9jYXAgJiBXTEFOX1JDX1NHSV9GTEFHKSA/CisJCXRydWUgOiBmYWxzZTsKKworCS8qIEZJWE1FOiBIYW5kbGUgQVAgbW9kZSBsYXRlciB3aGVuIHdlIHN1cHBvcnQgQ1dNICovCisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEKSB7CisJCWlmIChzYy0+c2NfYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJcmV0dXJuOworCisJCWlmIChzYy0+aHctPmNvbmYuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgfHwKKwkJICAgIHNjLT5ody0+Y29uZi5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTKQorCQkJb3Blcl9jdzQwID0gdHJ1ZTsKKworCQlvcGVyX3NnaTQwID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzQwKSA/CisJCQl0cnVlIDogZmFsc2U7CisKKwkJaWYgKChsb2NhbF9jdzQwICE9IG9wZXJfY3c0MCkgfHwgKGxvY2FsX3NnaTQwICE9IG9wZXJfc2dpNDApKSB7CisJCQlyYXRlX3RhYmxlID0gYXRoX2Nob29zZV9yYXRlX3RhYmxlKHNjLCBzYmFuZC0+YmFuZCwKKwkJCQkJCSAgIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCwKKwkJCQkJCSAgIG9wZXJfY3c0MCk7CisJCQlhdGhfcmNfcHJpdi0+aHRfY2FwID0gYXRoX3JjX2J1aWxkX2h0X2NhcHMoc2MsIHN0YSwKKwkJCQkJCSAgIG9wZXJfY3c0MCwgb3Blcl9zZ2k0MCk7CisJCQlhdGhfcmNfaW5pdChzYywgcHJpdl9zdGEsIHNiYW5kLCBzdGEsIHJhdGVfdGFibGUpOworCisJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKKwkJCQkiT3BlcmF0aW5nIEhUIEJhbmR3aWR0aCBjaGFuZ2VkIHRvOiAlZFxuIiwKKwkJCQlzYy0+aHctPmNvbmYuY2hhbm5lbF90eXBlKTsKKwkJfQorCX0KIH0KIAogc3RhdGljIHZvaWQgKmF0aF9yYXRlX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyKQogewotCXJldHVybiBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJcmV0dXJuIGFwaHktPnNjOwogfQogCiBzdGF0aWMgdm9pZCBhdGhfcmF0ZV9mcmVlKHZvaWQgKnByaXYpCkBAIC0xNTc4LDcgKzE2OTgsNyBAQAogCX0KIAogCXJhdGVfcHJpdi0+cnNzaV9kb3duX3RpbWUgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMpOwotCXJhdGVfcHJpdi0+dHhfdHJpZ2xldmVsX21heCA9IHNjLT5zY19haC0+YWhfY2Fwcy50eF90cmlnbGV2ZWxfbWF4OworCXJhdGVfcHJpdi0+dHhfdHJpZ2xldmVsX21heCA9IHNjLT5zY19haC0+Y2Fwcy50eF90cmlnbGV2ZWxfbWF4OwogCiAJcmV0dXJuIHJhdGVfcHJpdjsKIH0KQEAgLTE1OTYsNDEgKzE3MTYsMTMgQEAKIAkudHhfc3RhdHVzID0gYXRoX3R4X3N0YXR1cywKIAkuZ2V0X3JhdGUgPSBhdGhfZ2V0X3JhdGUsCiAJLnJhdGVfaW5pdCA9IGF0aF9yYXRlX2luaXQsCisJLnJhdGVfdXBkYXRlID0gYXRoX3JhdGVfdXBkYXRlLAogCS5hbGxvYyA9IGF0aF9yYXRlX2FsbG9jLAogCS5mcmVlID0gYXRoX3JhdGVfZnJlZSwKIAkuYWxsb2Nfc3RhID0gYXRoX3JhdGVfYWxsb2Nfc3RhLAogCS5mcmVlX3N0YSA9IGF0aF9yYXRlX2ZyZWVfc3RhLAogfTsKIAotc3RhdGljIHZvaWQgYXRoX3NldHVwX3JhdGVfdGFibGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJIHN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcmF0ZV90YWJsZSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLQkJcmF0ZV90YWJsZS0+cmF0ZUNvZGVUb0luZGV4W2ldID0gKHU4KS0xOwotCi0JZm9yIChpID0gMDsgaSA8IHJhdGVfdGFibGUtPnJhdGVfY250OyBpKyspIHsKLQkJdTggY29kZSA9IHJhdGVfdGFibGUtPmluZm9baV0ucmF0ZWNvZGU7Ci0JCXU4IGNpeCA9IHJhdGVfdGFibGUtPmluZm9baV0uY3RybF9yYXRlOwotCQl1OCBzaCA9IHJhdGVfdGFibGUtPmluZm9baV0uc2hvcnRfcHJlYW1ibGU7Ci0KLQkJcmF0ZV90YWJsZS0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdID0gaTsKLQkJcmF0ZV90YWJsZS0+cmF0ZUNvZGVUb0luZGV4W2NvZGUgfCBzaF0gPSBpOwotCi0JCXJhdGVfdGFibGUtPmluZm9baV0ubHBBY2tEdXJhdGlvbiA9Ci0JCQlhdGg5a19od19jb21wdXRldHh0aW1lKHNjLT5zY19haCwgcmF0ZV90YWJsZSwKLQkJCQkJICAgICAgIFdMQU5fQ1RSTF9GUkFNRV9TSVpFLAotCQkJCQkgICAgICAgY2l4LAotCQkJCQkgICAgICAgZmFsc2UpOwotCQlyYXRlX3RhYmxlLT5pbmZvW2ldLnNwQWNrRHVyYXRpb24gPQotCQkJYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzYy0+c2NfYWgsIHJhdGVfdGFibGUsCi0JCQkJCSAgICAgICBXTEFOX0NUUkxfRlJBTUVfU0laRSwKLQkJCQkJICAgICAgIGNpeCwKLQkJCQkJICAgICAgIHRydWUpOwotCX0KLX0KLQogdm9pZCBhdGhfcmF0ZV9hdHRhY2goc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7CiAJc2MtPmh3X3JhdGVfdGFibGVbQVRIOUtfTU9ERV8xMUJdID0KQEAgLTE2NTEsMTIgKzE3NDMsNiBAQAogCQkmYXI1NDE2XzExbmdfcmF0ZXRhYmxlOwogCXNjLT5od19yYXRlX3RhYmxlW0FUSDlLX01PREVfMTFOR19IVDQwTUlOVVNdID0KIAkJJmFyNTQxNl8xMW5nX3JhdGV0YWJsZTsKLQotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExYl9yYXRldGFibGUpOwotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExYV9yYXRldGFibGUpOwotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExZ19yYXRldGFibGUpOwotCWF0aF9zZXR1cF9yYXRlX3RhYmxlKHNjLCAmYXI1NDE2XzExbmFfcmF0ZXRhYmxlKTsKLQlhdGhfc2V0dXBfcmF0ZV90YWJsZShzYywgJmFyNTQxNl8xMW5nX3JhdGV0YWJsZSk7CiB9CiAKIGludCBhdGhfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuaAppbmRleCA5N2M2MGQxLi4xOTlhM2NlNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmMuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2FtIExlZmZsZXIsIEVycm5vIENvbnN1bHRpbmcKICAqIENvcHlyaWdodCAoYykgMjAwNCBWaWRlbzU0IFRlY2hub2xvZ2llcywgSW5jLgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xOSwxMyArMTksMTIgQEAKICNpZm5kZWYgUkNfSAogI2RlZmluZSBSQ19ICiAKLSNpbmNsdWRlICJhdGg5ay5oIgotCiBzdHJ1Y3QgYXRoX3NvZnRjOwogCiAjZGVmaW5lIEFUSF9SQVRFX01BWCAgICAgMzAKICNkZWZpbmUgUkFURV9UQUJMRV9TSVpFICA2NAogI2RlZmluZSBNQVhfVFhfUkFURV9QSFkgIDQ4CisjZGVmaW5lIFdMQU5fQ1RSTF9GUkFNRV9TSVpFICgyKzIrNis0KQogCiAvKiBWQUxJRF9BTEwgLSB2YWxpZCBmb3IgMjAvNDAvTGVnYWN5LAogICogVkFMSUQgLSBMZWdhY3kgb25seSwKQEAgLTM5LDYgKzM4LDIwIEBACiAjZGVmaW5lIFZBTElEXzIwNDAgKFZBTElEXzIwfFZBTElEXzQwKQogI2RlZmluZSBWQUxJRF9BTEwgIChWQUxJRF8yMDQwfFZBTElEKQogCitlbnVtIHsKKwlXTEFOX1JDX1BIWV9PRkRNLAorCVdMQU5fUkNfUEhZX0NDSywKKwlXTEFOX1JDX1BIWV9IVF8yMF9TUywKKwlXTEFOX1JDX1BIWV9IVF8yMF9EUywKKwlXTEFOX1JDX1BIWV9IVF80MF9TUywKKwlXTEFOX1JDX1BIWV9IVF80MF9EUywKKwlXTEFOX1JDX1BIWV9IVF8yMF9TU19IR0ksCisJV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJLAorCVdMQU5fUkNfUEhZX0hUXzQwX1NTX0hHSSwKKwlXTEFOX1JDX1BIWV9IVF80MF9EU19IR0ksCisJV0xBTl9SQ19QSFlfTUFYCit9OworCiAjZGVmaW5lIFdMQU5fUkNfUEhZX0RTKF9waHkpICAgKChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzIwX0RTKQkJXAogCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX0RTKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfMjBfRFNfSEdJKQlcCkBAIC05MCw3ICsxMDMsNiBAQAogICovCiBzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgewogCWludCByYXRlX2NudDsKLQl1OCByYXRlQ29kZVRvSW5kZXhbMjU2XTsKIAlzdHJ1Y3QgewogCQlpbnQgdmFsaWQ7CiAJCWludCB2YWxpZF9zaW5nbGVfc3RyZWFtOwpAQCAtMTA4LDggKzEyMCw2IEBACiAJCXU4IHNnaV9pbmRleDsKIAkJdTggaHRfaW5kZXg7CiAJCXUzMiBtYXhfNG1zX2ZyYW1lbGVuOwotCQl1MTYgbHBBY2tEdXJhdGlvbjsKLQkJdTE2IHNwQWNrRHVyYXRpb247CiAJfSBpbmZvW1JBVEVfVEFCTEVfU0laRV07CiAJdTMyIHByb2JlX2ludGVydmFsOwogCXUzMiByc3NpX3JlZHVjZV9pbnRlcnZhbDsKQEAgLTE4NCwxMSArMTk0LDE5IEBACiAJc3RydWN0IGF0aF9yYXRlX3NvZnRjICphc2M7CiB9OwogCitlbnVtIGF0aDlrX2ludGVybmFsX2ZyYW1lX3R5cGUgeworCUFUSDlLX05PVF9JTlRFUk5BTCwKKwlBVEg5S19JTlRfUEFVU0UsCisJQVRIOUtfSU5UX1VOUEFVU0UKK307CisKIHN0cnVjdCBhdGhfdHhfaW5mb19wcml2IHsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OwogCXN0cnVjdCBhdGhfdHhfc3RhdHVzIHR4OwogCWludCBuX2ZyYW1lczsKIAlpbnQgbl9iYWRfZnJhbWVzOwogCWJvb2wgdXBkYXRlX3JjOworCWVudW0gYXRoOWtfaW50ZXJuYWxfZnJhbWVfdHlwZSBmcmFtZV90eXBlOwogfTsKIAogI2RlZmluZSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlY3YuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlY3YuYwppbmRleCA0NjJlMDhjLi43MWNiMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWN2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVjdi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTQsNyArMTQsMjggQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9odyAqIGF0aF9nZXRfdmlydF9odyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPnByaV93aXBoeS0+aHc7CisJaW50IGk7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJaWYgKGFwaHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGhkci0+YWRkcjEsIGFwaHktPmh3LT53aXBoeS0+cGVybV9hZGRyKQorCQkgICAgPT0gMCkgeworCQkJaHcgPSBhcGh5LT5odzsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIGh3OworfQogCiAvKgogICogU2V0dXAgYW5kIGxpbmsgZGVzY3JpcHRvcnMuCkBAIC0yNiw3ICs0Nyw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGF0aF9yeF9idWZfbGluayhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKQEAgLTc5LDcgKzEwMCw3IEBACiAJcmV0dXJuICh0c2YgJiB+MHg3ZmZmKSB8IHJzdGFtcDsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICphdGhfcnhidWZfYWxsb2Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUzMiBsZW4pCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmF0aF9yeGJ1Zl9hbGxvYyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdTMyIGxlbiwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MzIgb2ZmOwpAQCAtOTcsMTEgKzExOCwxMSBAQAogCSAqIFVuZm9ydHVuYXRlbHkgdGhpcyBtZWFucyB3ZSBtYXkgZ2V0IDggS0IgaGVyZSBmcm9tIHRoZQogCSAqIGtlcm5lbC4uLiBhbmQgdGhhdCBpcyBhY3R1YWxseSB3aGF0IGlzIG9ic2VydmVkIG9uIHNvbWUKIAkgKiBzeXN0ZW1zIDooICovCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW4gKyBzYy0+c2NfY2FjaGVsc3ogLSAxKTsKKwlza2IgPSBfX2Rldl9hbGxvY19za2IobGVuICsgc2MtPmNhY2hlbHN6IC0gMSwgZ2ZwX21hc2spOwogCWlmIChza2IgIT0gTlVMTCkgewotCQlvZmYgPSAoKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSkgJSBzYy0+c2NfY2FjaGVsc3o7CisJCW9mZiA9ICgodW5zaWduZWQgbG9uZykgc2tiLT5kYXRhKSAlIHNjLT5jYWNoZWxzejsKIAkJaWYgKG9mZiAhPSAwKQotCQkJc2tiX3Jlc2VydmUoc2tiLCBzYy0+c2NfY2FjaGVsc3ogLSBvZmYpOworCQkJc2tiX3Jlc2VydmUoc2tiLCBzYy0+Y2FjaGVsc3ogLSBvZmYpOwogCX0gZWxzZSB7CiAJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCiAJCQkic2tidWZmIGFsbG9jIG9mIHNpemUgJXUgZmFpbGVkXG4iLCBsZW4pOwpAQCAtMTIzLDEwICsxNDQsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXU4IHJhdGVjb2RlOwogCV9fbGUxNiBmYzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAltZW1zZXQocnhfc3RhdHVzLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMpKTsKKwlodyA9IGF0aF9nZXRfdmlydF9odyhzYywgaGRyKTsKIAogCWlmIChkcy0+ZHNfcnhzdGF0LnJzX21vcmUpIHsKIAkJLyoKQEAgLTEzNSw3ICsxNTgsNyBAQAogCQkgKiBkaXNjYXJkIHRoZSBmcmFtZS4gRW5hYmxlIHRoaXMgaWYgeW91IHdhbnQgdG8gc2VlCiAJCSAqIGVycm9yIGZyYW1lcyBpbiBNb25pdG9yIG1vZGUuCiAJCSAqLwotCQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwkJaWYgKHNjLT5zY19haC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCiAJCQlnb3RvIHJ4X25leHQ7CiAJfSBlbHNlIGlmIChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAhPSAwKSB7CiAJCWlmIChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAmIEFUSDlLX1JYRVJSX0NSQykKQEAgLTE2MSw3ICsxODQsNyBAQAogCQkgKiBkZWNyeXB0aW9uIGFuZCBNSUMgZmFpbHVyZXMuIEZvciBtb25pdG9yIG1vZGUsCiAJCSAqIHdlIGFsc28gaWdub3JlIHRoZSBDUkMgZXJyb3IuCiAJCSAqLwotCQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgeworCQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgewogCQkJaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICYKIAkJCSAgICB+KEFUSDlLX1JYRVJSX0RFQ1JZUFQgfCBBVEg5S19SWEVSUl9NSUMgfAogCQkJICAgICAgQVRIOUtfUlhFUlJfQ1JDKSkKQEAgLTE4Niw3ICsyMDksNiBAQAogCQlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gcmF0ZWNvZGUgJiAweDdmOwogCX0gZWxzZSB7CiAJCWludCBpID0gMCwgY3VyX2JhbmQsIG5fcmF0ZXM7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwogCiAJCWN1cl9iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKIAkJbl9yYXRlcyA9IHNjLT5zYmFuZHNbY3VyX2JhbmRdLm5fYml0cmF0ZXM7CkBAIC0yMDgsOSArMjMwLDkgQEAKIAl9CiAKIAlyeF9zdGF0dXMtPm1hY3RpbWUgPSBhdGhfZXh0ZW5kX3RzZihzYywgZHMtPmRzX3J4c3RhdC5yc190c3RhbXApOwotCXJ4X3N0YXR1cy0+YmFuZCA9IHNjLT5ody0+Y29uZi5jaGFubmVsLT5iYW5kOwotCXJ4X3N0YXR1cy0+ZnJlcSA9ICBzYy0+aHctPmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXE7Ci0Jcnhfc3RhdHVzLT5ub2lzZSA9IHNjLT5zY19hbmkuc2Nfbm9pc2VfZmxvb3I7CisJcnhfc3RhdHVzLT5iYW5kID0gaHctPmNvbmYuY2hhbm5lbC0+YmFuZDsKKwlyeF9zdGF0dXMtPmZyZXEgPSBody0+Y29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKKwlyeF9zdGF0dXMtPm5vaXNlID0gc2MtPmFuaS5ub2lzZV9mbG9vcjsKIAlyeF9zdGF0dXMtPnNpZ25hbCA9IHJ4X3N0YXR1cy0+bm9pc2UgKyBkcy0+ZHNfcnhzdGF0LnJzX3Jzc2k7CiAJcnhfc3RhdHVzLT5hbnRlbm5hID0gZHMtPmRzX3J4c3RhdC5yc19hbnRlbm5hOwogCkBAIC0yMzMsNyArMjU1LDcgQEAKIAogc3RhdGljIHZvaWQgYXRoX29wbW9kZV9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAl1MzIgcmZpbHQsIG1maWx0WzJdOwogCiAJLyogY29uZmlndXJlIHJ4IGZpbHRlciAqLwpAQCAtMjQxLDE0ICsyNjMsMTQgQEAKIAlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgcmZpbHQpOwogCiAJLyogY29uZmlndXJlIGJzc2lkIG1hc2sgKi8KLQlpZiAoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spCi0JCWF0aDlrX2h3X3NldGJzc2lkbWFzayhhaCwgc2MtPnNjX2Jzc2lkbWFzayk7CisJaWYgKGFoLT5jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQlNTSURNQVNLKQorCQlhdGg5a19od19zZXRic3NpZG1hc2soc2MpOwogCiAJLyogY29uZmlndXJlIG9wZXJhdGlvbmFsIG1vZGUgKi8KIAlhdGg5a19od19zZXRvcG1vZGUoYWgpOwogCiAJLyogSGFuZGxlIGFueSBsaW5rLWxldmVsIGFkZHJlc3MgY2hhbmdlLiAqLwotCWF0aDlrX2h3X3NldG1hYyhhaCwgc2MtPnNjX215YWRkcik7CisJYXRoOWtfaHdfc2V0bWFjKGFoLCBzYy0+c2NfYWgtPm1hY2FkZHIpOwogCiAJLyogY2FsY3VsYXRlIGFuZCBpbnN0YWxsIG11bHRpY2FzdCBmaWx0ZXIgKi8KIAltZmlsdFswXSA9IG1maWx0WzFdID0gfjA7CkBAIC0yNjcsMTEgKzI4OSwxMSBAQAogCQlzcGluX2xvY2tfaW5pdCgmc2MtPnJ4LnJ4YnVmbG9jayk7CiAKIAkJc2MtPnJ4LmJ1ZnNpemUgPSByb3VuZHVwKElFRUU4MDIxMV9NQVhfTVBEVV9MRU4sCi0JCQkJCSAgIG1pbihzYy0+c2NfY2FjaGVsc3osCisJCQkJCSAgIG1pbihzYy0+Y2FjaGVsc3osCiAJCQkJCSAgICAgICAodTE2KTY0KSk7CiAKIAkJRFBSSU5URihzYywgQVRIX0RCR19DT05GSUcsICJjYWNoZWxzeiAldSByeGJ1ZnNpemUgJXVcbiIsCi0JCQlzYy0+c2NfY2FjaGVsc3osIHNjLT5yeC5idWZzaXplKTsKKwkJCXNjLT5jYWNoZWxzeiwgc2MtPnJ4LmJ1ZnNpemUpOwogCiAJCS8qIEluaXRpYWxpemUgcnggZGVzY3JpcHRvcnMgKi8KIApAQCAtMjg0LDIyICszMDYsMjIgQEAKIAkJfQogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+cngucnhidWYsIGxpc3QpIHsKLQkJCXNrYiA9IGF0aF9yeGJ1Zl9hbGxvYyhzYywgc2MtPnJ4LmJ1ZnNpemUpOworCQkJc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCQllcnJvciA9IC1FTk9NRU07CiAJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCWJmLT5iZl9tcGR1ID0gc2tiOwotCQkJYmYtPmJmX2J1Zl9hZGRyID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCWJmLT5iZl9idWZfYWRkciA9IGRtYV9tYXBfc2luZ2xlKHNjLT5kZXYsIHNrYi0+ZGF0YSwKIAkJCQkJCQkgc2MtPnJ4LmJ1ZnNpemUsCi0JCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHNjLT5wZGV2LAorCQkJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQkJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHNjLT5kZXYsCiAJCQkJICBiZi0+YmZfYnVmX2FkZHIpKSkgewogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQkJYmYtPmJmX21wZHUgPSBOVUxMOwogCQkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJCQkicGNpX2RtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlggaW5pdFxuIik7CisJCQkJCSJkbWFfbWFwcGluZ19lcnJvcigpIG9uIFJYIGluaXRcbiIpOwogCQkJCWVycm9yID0gLUVOT01FTTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTMyMiw4ICszNDQsMTMgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoYmYsICZzYy0+cngucnhidWYsIGxpc3QpIHsKIAkJc2tiID0gYmYtPmJmX21wZHU7Ci0JCWlmIChza2IpCisJCWlmIChza2IpIHsKKwkJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwKKwkJCQkJIGJmLT5iZl9idWZfYWRkciwKKwkJCQkJIHNjLT5yeC5idWZzaXplLAorCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJfQogCX0KIAogCWlmIChzYy0+cngucnhkbWEuZGRfZGVzY19sZW4gIT0gMCkKQEAgLTM2MCwyNiArMzg3LDM5IEBACiAJCXwgQVRIOUtfUlhfRklMVEVSX01DQVNUOwogCiAJLyogSWYgbm90IGEgU1RBLCBlbmFibGUgcHJvY2Vzc2luZyBvZiBQcm9iZSBSZXF1ZXN0cyAqLwotCWlmIChzYy0+c2NfYWgtPmFoX29wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCWlmIChzYy0+c2NfYWgtPm9wbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfUFJPQkVSRVE7CiAKLQkvKiBDYW4ndCBzZXQgSE9TVEFQIGludG8gcHJvbWlzY291cyBtb2RlICovCi0JaWYgKCgoc2MtPnNjX2FoLT5haF9vcG1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApICYmCisJLyoKKwkgKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSB3aGVuIEZJRl9QUk9NSVNDX0lOX0JTUyBpcyBlbmFibGVkIGZvciBzdGF0aW9uCisJICogbW9kZSBpbnRlcmZhY2Ugb3Igd2hlbiBpbiBtb25pdG9yIG1vZGUuIEFQIG1vZGUgZG9lcyBub3QgbmVlZCB0aGlzCisJICogc2luY2UgaXQgcmVjZWl2ZXMgYWxsIGluLUJTUyBmcmFtZXMgYW55d2F5LgorCSAqLworCWlmICgoKHNjLT5zY19haC0+b3Btb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQKSAmJgogCSAgICAgKHNjLT5yeC5yeGZpbHRlciAmIEZJRl9QUk9NSVNDX0lOX0JTUykpIHx8Ci0JICAgIChzYy0+c2NfYWgtPmFoX29wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSkgeworCSAgICAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikpCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9QUk9NOwotCQkvKiA/Pz8gVG8gcHJldmVudCBmcm9tIHNlbmRpbmcgQUNLICovCi0JCXJmaWx0ICY9IH5BVEg5S19SWF9GSUxURVJfVUNBU1Q7Ci0JfQogCi0JaWYgKHNjLT5zY19haC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKHNjLT5yeC5yeGZpbHRlciAmIEZJRl9DT05UUk9MKQorCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfQ09OVFJPTDsKKworCWlmICgoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgJiYKKwkgICAgIShzYy0+cngucnhmaWx0ZXIgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykpCisJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9NWUJFQUNPTjsKKwllbHNlCiAJCXJmaWx0IHw9IEFUSDlLX1JYX0ZJTFRFUl9CRUFDT047CiAKLQkvKiBJZiBpbiBIT1NUQVAgbW9kZSwgd2FudCB0byBlbmFibGUgcmVjZXB0aW9uIG9mIFBTUE9MTCBmcmFtZXMKLQkgICAmIGJlYWNvbiBmcmFtZXMgKi8KLQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCXJmaWx0IHw9IChBVEg5S19SWF9GSUxURVJfQkVBQ09OIHwgQVRIOUtfUlhfRklMVEVSX1BTUE9MTCk7CisJLyogSWYgaW4gSE9TVEFQIG1vZGUsIHdhbnQgdG8gZW5hYmxlIHJlY2VwdGlvbiBvZiBQU1BPTEwgZnJhbWVzICovCisJaWYgKHNjLT5zY19haC0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfUFNQT0xMOworCisJaWYgKHNjLT5zZWNfd2lwaHkpIHsKKwkJLyogVE9ETzogb25seSBuZWVkZWQgaWYgbW9yZSB0aGFuIG9uZSBCU1NJRCBpcyBpbiB1c2UgaW4KKwkJICogc3RhdGlvbi9hZGhvYyBtb2RlICovCisJCS8qIFRPRE86IGZvciBvbGRlciBjaGlwcywgbWF5IG5lZWQgdG8gYWRkIEFUSDlLX1JYX0ZJTFRFUl9QUk9NCisJCSAqLworCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfTUNBU1RfQkNBU1RfQUxMOworCX0KIAogCXJldHVybiByZmlsdDsKIApAQCAtMzg4LDcgKzQyOCw3IEBACiAKIGludCBhdGhfc3RhcnRyZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICp0YmY7CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5yeC5yeGJ1ZmxvY2spOwpAQCAtNDE4LDEzICs0NTgsMTIgQEAKIAogYm9vbCBhdGhfc3RvcHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCiB7Ci0Jc3RydWN0IGF0aF9oYWwgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCWJvb2wgc3RvcHBlZDsKIAogCWF0aDlrX2h3X3N0b3BwY3VyZWN2KGFoKTsKIAlhdGg5a19od19zZXRyeGZpbHRlcihhaCwgMCk7CiAJc3RvcHBlZCA9IGF0aDlrX2h3X3N0b3BkbWFyZWN2KGFoKTsKLQltZGVsYXkoMyk7IC8qIDNtcyBpcyBsb25nIGVub3VnaCBmb3IgMSBmcmFtZSAqLwogCXNjLT5yeC5yeGxpbmsgPSBOVUxMOwogCiAJcmV0dXJuIHN0b3BwZWQ7CkBAIC00NDksNyArNDg4LDcgQEAKIAlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMLCAqcmVxdWV1ZV9za2I7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzOwotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCWludCBoZHJsZW4sIHBhZHNpemUsIHJldHZhbDsKIAlib29sIGRlY3J5cHRfZXJyb3IgPSBmYWxzZTsKQEAgLTUyNCw5ICs1NjMsOSBAQAogCQkgKiAxLiBhY2Nlc3NpbmcgdGhlIGZyYW1lCiAJCSAqIDIuIHJlcXVldWVpbmcgdGhlIHNhbWUgYnVmZmVyIHRvIGgvdwogCQkgKi8KLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHNjLT5wZGV2LCBiZi0+YmZfYnVmX2FkZHIsCisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHNjLT5kZXYsIGJmLT5iZl9idWZfYWRkciwKIAkJCQlzYy0+cnguYnVmc2l6ZSwKLQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCURNQV9GUk9NX0RFVklDRSk7CiAKIAkJLyoKIAkJICogSWYgd2UncmUgYXNrZWQgdG8gZmx1c2ggcmVjZWl2ZSBxdWV1ZSwgZGlyZWN0bHkKQEAgLTU0Nyw3ICs1ODYsNyBAQAogCiAJCS8qIEVuc3VyZSB3ZSBhbHdheXMgaGF2ZSBhbiBza2IgdG8gcmVxdWV1ZSBvbmNlIHdlIGFyZSBkb25lCiAJCSAqIHByb2Nlc3NpbmcgdGhlIGN1cnJlbnQgYnVmZmVyJ3Mgc2tiICovCi0JCXJlcXVldWVfc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSk7CisJCXJlcXVldWVfc2tiID0gYXRoX3J4YnVmX2FsbG9jKHNjLCBzYy0+cnguYnVmc2l6ZSwgR0ZQX0FUT01JQyk7CiAKIAkJLyogSWYgdGhlcmUgaXMgbm8gbWVtb3J5IHdlIGlnbm9yZSB0aGUgY3VycmVudCBSWCdkIGZyYW1lLAogCQkgKiB0ZWxsIGhhcmR3YXJlIGl0IGNhbiBnaXZlIHVzIGEgbmV3IGZyYW1lIHVzaW5nIHRoZSBvbGQKQEAgLTU1Nyw5ICs1OTYsOSBAQAogCQkJZ290byByZXF1ZXVlOwogCiAJCS8qIFVubWFwIHRoZSBmcmFtZSAqLwotCQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LCBiZi0+YmZfYnVmX2FkZHIsCisJCWRtYV91bm1hcF9zaW5nbGUoc2MtPmRldiwgYmYtPmJmX2J1Zl9hZGRyLAogCQkJCSBzYy0+cnguYnVmc2l6ZSwKLQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkgRE1BX0ZST01fREVWSUNFKTsKIAogCQlza2JfcHV0KHNrYiwgZHMtPmRzX3J4c3RhdC5yc19kYXRhbGVuKTsKIAkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QX0NPTlRST0wpOwpAQCAtNTkwLDI0ICs2MjksNTIgQEAKIAkJCSAgICYmICFkZWNyeXB0X2Vycm9yICYmIHNrYi0+bGVuID49IGhkcmxlbiArIDQpIHsKIAkJCWtleWl4ID0gc2tiLT5kYXRhW2hkcmxlbiArIDNdID4+IDY7CiAKLQkJCWlmICh0ZXN0X2JpdChrZXlpeCwgc2MtPnNjX2tleW1hcCkpCisJCQlpZiAodGVzdF9iaXQoa2V5aXgsIHNjLT5rZXltYXApKQogCQkJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwogCQl9CisJCWlmIChhaC0+c3dfbWdtdF9jcnlwdG8gJiYKKwkJICAgIChyeF9zdGF0dXMuZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSAmJgorCQkgICAgaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJLyogVXNlIHNvZnR3YXJlIGRlY3J5cHQgZm9yIG1hbmFnZW1lbnQgZnJhbWVzLiAqLworCQkJcnhfc3RhdHVzLmZsYWcgJj0gflJYX0ZMQUdfREVDUllQVEVEOworCQl9CiAKIAkJLyogU2VuZCB0aGUgZnJhbWUgdG8gbWFjODAyMTEgKi8KLQkJX19pZWVlODAyMTFfcngoc2MtPmh3LCBza2IsICZyeF9zdGF0dXMpOworCQlpZiAoaGRyLT5hZGRyMVs1XSAmIDB4MDEpIHsKKwkJCWludCBpOworCQkJLyoKKwkJCSAqIERlbGl2ZXIgYnJvYWRjYXN0L211bHRpY2FzdCBmcmFtZXMgdG8gYWxsIHN1aXRhYmxlCisJCQkgKiB2aXJ0dWFsIHdpcGh5cy4KKwkJCSAqLworCQkJLyogVE9ETzogZmlsdGVyIGJhc2VkIG9uIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLworCQkJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKKwkJCQlpZiAoYXBoeSA9PSBOVUxMKQorCQkJCQljb250aW51ZTsKKwkJCQluc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAobnNrYikKKwkJCQkJX19pZWVlODAyMTFfcngoYXBoeS0+aHcsIG5za2IsCisJCQkJCQkgICAgICAgJnJ4X3N0YXR1cyk7CisJCQl9CisJCQlfX2llZWU4MDIxMV9yeChzYy0+aHcsIHNrYiwgJnJ4X3N0YXR1cyk7CisJCX0gZWxzZSB7CisJCQkvKiBEZWxpdmVyIHVuaWNhc3QgZnJhbWVzIGJhc2VkIG9uIHJlY2VpdmVyIGFkZHJlc3MgKi8KKwkJCV9faWVlZTgwMjExX3J4KGF0aF9nZXRfdmlydF9odyhzYywgaGRyKSwgc2tiLAorCQkJCSAgICAgICAmcnhfc3RhdHVzKTsKKwkJfQogCiAJCS8qIFdlIHdpbGwgbm93IGdpdmUgaGFyZHdhcmUgb3VyIHNoaW55IG5ldyBhbGxvY2F0ZWQgc2tiICovCiAJCWJmLT5iZl9tcGR1ID0gcmVxdWV1ZV9za2I7Ci0JCWJmLT5iZl9idWZfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHNjLT5wZGV2LCByZXF1ZXVlX3NrYi0+ZGF0YSwKKwkJYmYtPmJmX2J1Zl9hZGRyID0gZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgcmVxdWV1ZV9za2ItPmRhdGEsCiAJCQkJCSBzYy0+cnguYnVmc2l6ZSwKLQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsCisJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3Ioc2MtPmRldiwKIAkJCSAgYmYtPmJmX2J1Zl9hZGRyKSkpIHsKIAkJCWRldl9rZnJlZV9za2JfYW55KHJlcXVldWVfc2tiKTsKIAkJCWJmLT5iZl9tcGR1ID0gTlVMTDsKIAkJCURQUklOVEYoc2MsIEFUSF9EQkdfQ09ORklHLAotCQkJCSJwY2lfZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBSWFxuIik7CisJCQkJImRtYV9tYXBwaW5nX2Vycm9yKCkgb24gUlhcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJYmYtPmJmX2RtYWNvbnRleHQgPSBiZi0+YmZfYnVmX2FkZHI7CkBAIC02MjIsNiArNjg5LDEyIEBACiAJCX0gZWxzZSB7CiAJCQlzYy0+cngucnhvdGhlcmFudCA9IDA7CiAJCX0KKworCQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCQkJKHNjLT5zY19mbGFncyAmIFNDX09QX1dBSVRfRk9SX0JFQUNPTikpIHsKKwkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfV0FJVF9GT1JfQkVBQ09OOworCQkJYXRoOWtfaHdfc2V0cG93ZXIoc2MtPnNjX2FoLCBBVEg5S19QTV9ORVRXT1JLX1NMRUVQKTsKKwkJfQogcmVxdWV1ZToKIAkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmc2MtPnJ4LnJ4YnVmKTsKIAkJYXRoX3J4X2J1Zl9saW5rKHNjLCBiZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZy5oCmluZGV4IDlmZWRiNDkuLjUyNjA1MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtNjcsNyArNjcsNyBAQAogI2RlZmluZSBBUl9ETUFTSVpFXzUxMkIgICAgICAweDAwMDAwMDA3CiAKICNkZWZpbmUgQVJfVFhDRkcgICAgICAgICAgICAgMHgwMDMwCi0jZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaX01BU0sgIDB4MDAwMDAwMDMKKyNkZWZpbmUgQVJfVFhDRkdfRE1BU1pfTUFTSyAgMHgwMDAwMDAwNwogI2RlZmluZSBBUl9UWENGR19ETUFTWl80QiAgICAwCiAjZGVmaW5lIEFSX1RYQ0ZHX0RNQVNaXzhCICAgIDEKICNkZWZpbmUgQVJfVFhDRkdfRE1BU1pfMTZCICAgMgpAQCAtMTU4LDEzICsxNTgsNiBAQAogI2RlZmluZSBBUl9DU1RfVElNRU9VVF9MSU1JVCAgICAgIDB4RkZGRjAwMDAKICNkZWZpbmUgQVJfQ1NUX1RJTUVPVVRfTElNSVRfUyAgICAxNgogCi0jZGVmaW5lIEFSX1NSRVZfVkVSU0lPTl85MTAwICAgICAgICAgICAgICAgICAgMHgwMTQKLQotI2RlZmluZSBBUl9TUkVWXzU0MTZfVjIwX09SX0xBVEVSKF9haCkgXAotCShBUl9TUkVWXzkxMDAoKF9haCkpIHx8IEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihfYWgpKQotI2RlZmluZSBBUl9TUkVWXzU0MTZfVjIyX09SX0xBVEVSKF9haCkgXAotCShBUl9TUkVWXzkxMDAoKF9haCkpIHx8IEFSX1NSRVZfNTQxNl8yMl9PUl9MQVRFUihfYWgpKQotCiAjZGVmaW5lIEFSX0lTUiAgICAgICAgICAgICAgIDB4MDA4MAogI2RlZmluZSBBUl9JU1JfUlhPSyAgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIEFSX0lTUl9SWERFU0MgICAgICAgIDB4MDAwMDAwMDIKQEAgLTczMyw2ICs3MjYsNyBAQAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMTAgICAgICAgICAgICAgICAwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMCAgICAgICAgICAgICAgIDEKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIyICAgICAgICAgICAgICAgMgorI2RlZmluZSBBUl9TUkVWX1ZFUlNJT05fOTEwMCAgICAgICAgICAgICAgICAgIDB4MTQKICNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzkxNjAgICAgICAgIAkgICAgICAweDQwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTE2MF8xMCAgICAJICAgICAgMAogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkxNjBfMTEgICAgCSAgICAgIDEKQEAgLTc0NSw0NSArNzM5LDYwIEBACiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSAgICAgICAgICAgICAgMQogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIgICAgICAgICAgICAgIDIKIAotI2RlZmluZSBBUl9TUkVWXzkxMDBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0lFKSkKKyNkZWZpbmUgQVJfU1JFVl81NDE2KF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fNTQxNl9QQ0kpIHx8IFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJRSkpCiAjZGVmaW5lIEFSX1NSRVZfNTQxNl8yMF9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTYwKSB8fCBcCi0JCSgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fNTQxNl8yMCkpCisJKCgoQVJfU1JFVl81NDE2KF9haCkpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjApKSB8fCBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTAwKSkKICNkZWZpbmUgQVJfU1JFVl81NDE2XzIyX09SX0xBVEVSKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxNjApIHx8IFwKLQkJKChfYWgpLT5haF9tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl81NDE2XzIyKSkKLSNkZWZpbmUgQVJfU1JFVl85MTYwKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKQotI2RlZmluZSBBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkpCi0jZGVmaW5lIEFSX1NSRVZfOTE2MF8xMShfYWgpIFwKLQkoQVJfU1JFVl85MTYwKF9haCkgJiYgKChfYWgpLT5haF9tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85MTYwXzExKSkKLSNkZWZpbmUgQVJfU1JFVl85MjgwKF9haCkgXAotCSgoKF9haCktPmFoX21hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODApKQotI2RlZmluZSBBUl9TUkVWXzkyODBfMTBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkpCi0jZGVmaW5lIEFSX1NSRVZfOTI4MF8yMChfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSAmJiBcCi0JCSgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8yMCkpCi0jZGVmaW5lIEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODApIHx8IFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSAmJiBcCi0JKChfYWgpLT5haF9tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85MjgwXzIwKSkpCisJKCgoQVJfU1JFVl81NDE2KF9haCkpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzU0MTZfMjIpKSB8fCBcCisJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85MTAwKSkKIAotI2RlZmluZSBBUl9TUkVWXzkyODUoX2FoKSAoKChfYWgpLT5haF9tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSkKKyNkZWZpbmUgQVJfU1JFVl85MTAwKGFoKSBcCisJKChhaC0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uKSA9PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkKKyNkZWZpbmUgQVJfU1JFVl85MTAwX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTEwMCkpCisKKyNkZWZpbmUgQVJfU1JFVl85MTYwKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTE2MCkpCisjZGVmaW5lIEFSX1NSRVZfOTE2MF8xMF9PUl9MQVRFUihfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPj0gQVJfU1JFVl9WRVJTSU9OXzkxNjApKQorI2RlZmluZSBBUl9TUkVWXzkxNjBfMTEoX2FoKSBcCisJKEFSX1NSRVZfOTE2MChfYWgpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkxNjBfMTEpKQorI2RlZmluZSBBUl9TUkVWXzkyODAoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85MjgwKSkKKyNkZWZpbmUgQVJfU1JFVl85MjgwXzEwX09SX0xBVEVSKF9haCkgXAorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4MCkpCisjZGVmaW5lIEFSX1NSRVZfOTI4MF8yMChfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODApICYmIFwKKwkJKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBBUl9TUkVWX1JFVklTSU9OXzkyODBfMjApKQorI2RlZmluZSBBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODApIHx8IFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODApICYmIFwKKwkoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4MF8yMCkpKQorCisjZGVmaW5lIEFSX1NSRVZfOTI4NShfYWgpIFwKKwkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzkyODUpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTBfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+PSBBUl9TUkVWX1ZFUlNJT05fOTI4NSkpCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID49IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSkKICNkZWZpbmUgQVJfU1JFVl85Mjg1XzExKF9haCkgXAotCShBUl9TUkVWXzkyODAoYWgpICYmICgoX2FoKS0+YWhfbWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSkpCisJKEFSX1NSRVZfOTI4NShhaCkgJiYgXAorCSAoKF9haCktPmh3X3ZlcnNpb24ubWFjUmV2ID09IEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMSkpCiAjZGVmaW5lIEFSX1NSRVZfOTI4NV8xMV9PUl9MQVRFUihfYWgpIFwKLQkoKChfYWgpLT5haF9tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODUpIHx8IFwKLQkgKEFSX1NSRVZfOTI4NShhaCkgJiYgKChfYWgpLT5haF9tYWNSZXYgPj0gQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzExKSkpCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID4gQVJfU1JFVl9WRVJTSU9OXzkyODUpIHx8IFwKKwkgKEFSX1NSRVZfOTI4NShhaCkgJiYgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA+PSBcCisJCQkgICAgICAgQVJfU1JFVl9SRVZJU0lPTl85Mjg1XzExKSkpCiAjZGVmaW5lIEFSX1NSRVZfOTI4NV8xMihfYWgpIFwKLQkoQVJfU1JFVl85MjgwKGFoKSAmJiAoKF9haCktPmFoX21hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKQorCShBUl9TUkVWXzkyODUoYWgpICYmIFwKKwkgKChfYWgpLT5od192ZXJzaW9uLm1hY1JldiA9PSBBUl9TUkVWX1JFVklTSU9OXzkyODVfMTIpKQogI2RlZmluZSBBUl9TUkVWXzkyODVfMTJfT1JfTEFURVIoX2FoKSBcCi0JKCgoX2FoKS0+YWhfbWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSB8fCBcCi0JIChBUl9TUkVWXzkyODUoYWgpICYmICgoX2FoKS0+YWhfbWFjUmV2ID49IEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMikpKQorCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA+IEFSX1NSRVZfVkVSU0lPTl85Mjg1KSB8fCBcCisJIChBUl9TUkVWXzkyODUoYWgpICYmICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPj0gXAorCQkJICAgICAgIEFSX1NSRVZfUkVWSVNJT05fOTI4NV8xMikpKQogCiAjZGVmaW5lIEFSX1JBRElPX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgICAgMHhmMAogI2RlZmluZSBBUl9SQUQ1MTMzX1NSRVZfTUFKT1IgICAgICAgICAgICAgICAgIDB4YzAKQEAgLTg3NSwxMiArODg0LDE1IEBACiAKICNkZWZpbmUgQVJfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNAogI2RlZmluZSBBUjkyOFhfTlVNX0dQSU8gICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIEFSOTI4NV9OVU1fR1BJTyAgICAgICAgICAgICAgICAgICAgICAgICAgMTIKIAogI2RlZmluZSBBUl9HUElPX0lOX09VVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDA0OAogI2RlZmluZSBBUl9HUElPX0lOX1ZBTCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkMwMDAKICNkZWZpbmUgQVJfR1BJT19JTl9WQUxfUyAgICAgICAgICAgICAgICAgICAgICAgICAxNAogI2RlZmluZSBBUjkyOFhfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwRkZDMDAKICNkZWZpbmUgQVI5MjhYX0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBBUjkyODVfR1BJT19JTl9WQUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkYwMDAKKyNkZWZpbmUgQVI5Mjg1X0dQSU9fSU5fVkFMX1MgICAgICAgICAgICAgICAgICAgICAxMgogCiAjZGVmaW5lIEFSX0dQSU9fT0VfT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDRjCiAjZGVmaW5lIEFSX0dQSU9fT0VfT1VUX0RSViAgICAgICAgICAgICAgICAgICAgICAgMHgzCkBAIC04OTQsMTQgKzkwNiwyNCBAQAogI2RlZmluZSBBUl9HUElPX0lOVFJfUE9MX1ZBTF9TICAgICAgICAgICAgICAgICAgIDAKIAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTCAgICAgICAgICAgICAgICAgICAgIDB4NDA1NAorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9QUklPUklUWV9ERUYgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfUFJJT1JJVFlfUyAgICAgICAyCisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0ZSRVFVRU5DWV9ERUYgICAgMHgwMDAwMDAwOAorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9GUkVRVUVOQ1lfUyAgICAgIDMKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfQlRfQUNUSVZFX0RFRiAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9TICAgICAgICAgNAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9ERUYgICAgICAgIDB4MDAwMDAwODAKICNkZWZpbmUgQVJfR1BJT19JTlBVVF9FTl9WQUxfUkZTSUxFTlRfREVGX1MgICAgICA3CisjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX0JUX0FDVElWRV9CQiAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9CVF9BQ1RJVkVfQkJfUyAgICAgIDEyCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfRU5fVkFMX1JGU0lMRU5UX0JCICAgICAgICAgMHgwMDAwODAwMAogI2RlZmluZSBBUl9HUElPX0lOUFVUX0VOX1ZBTF9SRlNJTEVOVF9CQl9TICAgICAgIDE1CiAjZGVmaW5lIEFSX0dQSU9fUlRDX1JFU0VUX09WRVJSSURFX0VOQUJMRSAgICAgICAgMHgwMDAxMDAwMAogI2RlZmluZSBBUl9HUElPX0pUQUdfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDAKIAogI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDEgICAgICAgICAgICAgICAgICAgICAgIDB4NDA1OAorI2RlZmluZSBBUl9HUElPX0lOUFVUX01VWDFfQlRfQUNUSVZFICAgICAgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgQVJfR1BJT19JTlBVVF9NVVgxX0JUX0FDVElWRV9TICAgICAgICAgICAxNgogCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMiAgICAgICAgICAgICAgICAgICAgICAgMHg0MDVjCiAjZGVmaW5lIEFSX0dQSU9fSU5QVVRfTVVYMl9DTEsyNSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZgpAQCAtOTQwLDcgKzk2Miw3IEBACiAKICNkZWZpbmUgQVJfUlRDX0JBU0UgICAgICAgICAgICAgMHgwMDAyMDAwMAogI2RlZmluZSBBUl9SVENfUkMgXAotCShBUl9TUkVWXzkxMDAoYWgpKSA/IChBUl9SVENfQkFTRSArIDB4MDAwMCkgOiAweDcwMDAKKwkoKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDAwKSA6IDB4NzAwMCkKICNkZWZpbmUgQVJfUlRDX1JDX00JCTB4MDAwMDAwMDMKICNkZWZpbmUgQVJfUlRDX1JDX01BQ19XQVJNICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBBUl9SVENfUkNfTUFDX0NPTEQgICAgICAweDAwMDAwMDAyCkBAIC05NDgsNyArOTcwLDcgQEAKICNkZWZpbmUgQVJfUlRDX1JDX1dBUk1fUkVTRVQgICAgMHgwMDAwMDAwOAogCiAjZGVmaW5lIEFSX1JUQ19QTExfQ09OVFJPTCBcCi0JKEFSX1NSRVZfOTEwMChhaCkpID8gKEFSX1JUQ19CQVNFICsgMHgwMDE0KSA6IDB4NzAxNAorCSgoQVJfU1JFVl85MTAwKGFoKSkgPyAoQVJfUlRDX0JBU0UgKyAweDAwMTQpIDogMHg3MDE0KQogCiAjZGVmaW5lIEFSX1JUQ19QTExfRElWICAgICAgICAgIDB4MDAwMDAwMWYKICNkZWZpbmUgQVJfUlRDX1BMTF9ESVZfUyAgICAgICAgMApAQCAtOTU3LDggKzk3OSw2IEBACiAjZGVmaW5lIEFSX1JUQ19QTExfQ0xLU0VMICAgICAgIDB4MDAwMDAzMDAKICNkZWZpbmUgQVJfUlRDX1BMTF9DTEtTRUxfUyAgICAgOAogCi0KLQogI2RlZmluZSBBUl9SVENfUkVTRVQgXAogCSgoQVJfU1JFVl85MTAwKGFoKSkgPyAoQVJfUlRDX0JBU0UgKyAweDAwNDApIDogMHg3MDQwKQogI2RlZmluZSBBUl9SVENfUkVTRVRfRU4JCSgweDAwMDAwMDAxKQpAQCAtOTk1LDYgKzEwMTUsMTIgQEAKICNkZWZpbmUgQVJfUlRDX0lOVFJfTUFTSyBcCiAJKChBUl9TUkVWXzkxMDAoYWgpKSA/IChBUl9SVENfQkFTRSArIDB4MDA1OCkgOiAweDcwNTgpCiAKKy8qIFJUQ19ERVJJVkVEXyogLSBvbmx5IGZvciBBUjkxMDAgKi8KKworI2RlZmluZSBBUl9SVENfREVSSVZFRF9DTEsgICAgICAgICAgIChBUl9SVENfQkFTRSArIDB4MDAzOCkKKyNkZWZpbmUgQVJfUlRDX0RFUklWRURfQ0xLX1BFUklPRCAgICAweDAwMDBmZmZlCisjZGVmaW5lIEFSX1JUQ19ERVJJVkVEX0NMS19QRVJJT0RfUyAgMQorCiAjZGVmaW5lCUFSX1NFUV9NQVNLCTB4ODA2MAogCiAjZGVmaW5lIEFSX0FOX1JGMkcxX0NIMCAgICAgICAgIDB4NzgxMApAQCAtMTAyMSw2ICsxMDQ3LDEwIEBACiAjZGVmaW5lIEFSX0FOX1JGNUcxX0NIMV9EQjUgICAgIDB4MDAzODAwMDAKICNkZWZpbmUgQVJfQU5fUkY1RzFfQ0gxX0RCNV9TICAgMTkKIAorI2RlZmluZSBBUl9BTl9UT1AxICAgICAgICAgICAgICAgICAgMHg3ODkwCisjZGVmaW5lIEFSX0FOX1RPUDFfREFDSVBNT0RFCSAgICAweDAwMDQwMDAwCisjZGVmaW5lIEFSX0FOX1RPUDFfREFDSVBNT0RFX1MJICAgIDE4CisKICNkZWZpbmUgQVJfQU5fVE9QMiAgICAgICAgICAgICAgICAgIDB4Nzg5NAogI2RlZmluZSBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMICAgICAgMHhDMDAwMDAwMAogI2RlZmluZSBBUl9BTl9UT1AyX1hQQUJJQVNfTFZMX1MgICAgMzAKQEAgLTExODEsMTggKzEyMTEsNyBAQAogI2RlZmluZSBBUl9DRlBfVkFMICAgICAgICAgIDB4MDAwMEZGRkYKIAogI2RlZmluZSBBUl9SWF9GSUxURVIgICAgICAgIDB4ODAzQwotI2RlZmluZSBBUl9SWF9GSUxURVJfQUxMICAgIDB4MDAwMDAwMDAKLSNkZWZpbmUgQVJfUlhfVUNBU1QgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIEFSX1JYX01DQVNUICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBBUl9SWF9CQ0FTVCAgICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgQVJfUlhfQ09OVFJPTCAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFSX1JYX0JFQUNPTiAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBBUl9SWF9QUk9NICAgICAgICAgIDB4MDAwMDAwMjAKLSNkZWZpbmUgQVJfUlhfUFJPQkVfUkVRICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIEFSX1JYX01ZX0JFQUNPTiAgICAgMHgwMDAwMDIwMAogI2RlZmluZSBBUl9SWF9DT01QUl9CQVIgICAgIDB4MDAwMDA0MDAKLSNkZWZpbmUgQVJfUlhfQ09NUFJfQkEgICAgICAweDAwMDAwODAwCi0jZGVmaW5lIEFSX1JYX1VOQ09NX0JBX0JBUiAgMHgwMDAwMTAwMAogCiAjZGVmaW5lIEFSX01DQVNUX0ZJTDAgICAgICAgMHg4MDQwCiAjZGVmaW5lIEFSX01DQVNUX0ZJTDEgICAgICAgMHg4MDQ0CkBAIC0xMjM2LDYgKzEyNTUsOCBAQAogCiAjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxICAgICAgIDB4ODA2MAogI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMV9TRVEgICAweDAwMDBGRkZGCisjZGVmaW5lIEFSX0FFU19NVVRFX01BU0sxX0ZDX01HTVQgMHhGRkZGMDAwMAorI2RlZmluZSBBUl9BRVNfTVVURV9NQVNLMV9GQ19NR01UX1MgMTYKIAogI2RlZmluZSBBUl9HQVRFRF9DTEtTICAgICAgIDB4ODA2NAogI2RlZmluZSBBUl9HQVRFRF9DTEtTX1RYICAgIDB4MDAwMDAwMDIKQEAgLTEzNzAsOCArMTM5MSw4IEBACiAjZGVmaW5lIEFSX1BIWV9DT1VOVE1BWCAgICAgICAgKDMgPDwgMjIpCiAjZGVmaW5lIEFSX01JQkNOVF9JTlRSTUFTSyAgICAgKDMgPDwgMjIpCiAKLSNkZWZpbmUgQVJfVFNGX1RIUkVTSE9MRCAgICAgICAweDgxM2MKLSNkZWZpbmUgQVJfVFNGX1RIUkVTSE9MRF9WQUwgICAweDAwMDBGRkZGCisjZGVmaW5lIEFSX1RTRk9PUl9USFJFU0hPTEQgICAgICAgMHg4MTNjCisjZGVmaW5lIEFSX1RTRk9PUl9USFJFU0hPTERfVkFMICAgMHgwMDAwRkZGRgogCiAjZGVmaW5lIEFSX1BIWV9FUlJfRUlGU19NQVNLICAgODE0NAogCkBAIC0xNDYwLDYgKzE0ODEsMTAgQEAKICNkZWZpbmUgQVJfUENVX1RYQlVGX0NUUkxfVVNBQkxFX1NJWkUgICAweDcwMAogI2RlZmluZSBBUl85Mjg1X1BDVV9UWEJVRl9DVFJMX1VTQUJMRV9TSVpFICAgMHgzODAKIAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMiAgICAgICAgICAgICAgIDB4ODM0NAorI2RlZmluZSBBUl9QQ1VfTUlTQ19NT0RFMl9NR01UX0NSWVBUT19FTkFCTEUgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfUENVX01JU0NfTU9ERTJfTk9fQ1JZUFRPX0ZPUl9OT05fREFUQV9QS1QgICAweDAwMDAwMDA0CisKICNkZWZpbmUgQVJfS0VZVEFCTEVfMCAgICAgICAgICAgMHg4ODAwCiAjZGVmaW5lIEFSX0tFWVRBQkxFKF9uKSAgICAgICAgIChBUl9LRVlUQUJMRV8wICsgKChfbikqMzIpKQogI2RlZmluZSBBUl9LRVlfQ0FDSEVfU0laRSAgICAgICAxMjgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuYwppbmRleCA2NDA0M2U5Li40Y2E2MjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwOCBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTYsNjMgKzE2LDM1OSBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJody5oIgotI2luY2x1ZGUgInJlZ2QuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogI2luY2x1ZGUgInJlZ2RfY29tbW9uLmgiCiAKLXN0YXRpYyBpbnQgYXRoOWtfcmVnZF9jaGFuc29ydChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotewotCWNvbnN0IHN0cnVjdCBhdGg5a19jaGFubmVsICpjYSA9IGE7Ci0JY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNiID0gYjsKKy8qCisgKiBUaGlzIGlzIGEgc2V0IG9mIGNvbW1vbiBydWxlcyB1c2VkIGJ5IG91ciB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbnMuCisgKiBXZSBoYXZlIDEyIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucy4gVG8gc2F2ZSBzcGFjZSB3ZSBjb25zb2xpZGF0ZQorICogdGhlIHJlZ3VsYXRvcnkgZG9tYWlucyBpbiA1IHN0cnVjdHVyZXMgYnkgZnJlcXVlbmN5IGFuZCBjaGFuZ2UKKyAqIHRoZSBmbGFncyBvbiBvdXIgcmVnX25vdGlmaWVyKCkgb24gYSBjYXNlIGJ5IGNhc2UgYmFzaXMuCisgKi8KIAotCXJldHVybiAoY2EtPmNoYW5uZWwgPT0gY2ItPmNoYW5uZWwpID8KLQkgICAgKGNhLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSAtCi0JICAgIChjYi0+Y2hhbm5lbEZsYWdzICYgQ0hBTl9GTEFHUykgOiBjYS0+Y2hhbm5lbCAtIGNiLT5jaGFubmVsOwotfQorLyogT25seSB0aGVzZSBjaGFubmVscyBhbGwgYWxsb3cgYWN0aXZlIHNjYW4gb24gYWxsIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucyAqLworI2RlZmluZSBBVEg5S18yR0haX0NIMDFfMTEJUkVHX1JVTEUoMjQxMi0xMCwgMjQ2MisxMCwgNDAsIDAsIDIwLCAwKQogCi1zdGF0aWMgdm9pZAotYXRoOWtfcmVnZF9zb3J0KHZvaWQgKmEsIHUzMiBuLCB1MzIgc2l6ZSwgYXRoX2hhbF9jbXBfdCAqY21wKQotewotCXU4ICphYSA9IGE7Ci0JdTggKmFpLCAqdDsKKy8qIFdlIGVuYWJsZSBhY3RpdmUgc2NhbiBvbiB0aGVzZSBhIGNhc2UgYnkgY2FzZSBiYXNpcyBieSByZWd1bGF0b3J5IGRvbWFpbiAqLworI2RlZmluZSBBVEg5S18yR0haX0NIMTJfMTMJUkVHX1JVTEUoMjQ2Ny0xMCwgMjQ3MisxMCwgNDAsIDAsIDIwLFwKKwkJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKQorI2RlZmluZSBBVEg5S18yR0haX0NIMTQJCVJFR19SVUxFKDI0ODQtMTAsIDI0ODQrMTAsIDQwLCAwLCAyMCxcCisJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgTkw4MDIxMV9SUkZfTk9fT0ZETSkKIAotCWZvciAoYWkgPSBhYSArIHNpemU7IC0tbiA+PSAxOyBhaSArPSBzaXplKQotCQlmb3IgKHQgPSBhaTsgdCA+IGFhOyB0IC09IHNpemUpIHsKLQkJCXU4ICp1ID0gdCAtIHNpemU7Ci0JCQlpZiAoY21wKHUsIHQpIDw9IDApCi0JCQkJYnJlYWs7Ci0JCQlzd2FwX2FycmF5KHUsIHQsIHNpemUpOwotCQl9Ci19CisvKiBXZSBhbGxvdyBJQlNTIG9uIHRoZXNlIG9uIGEgY2FzZSBieSBjYXNlIGJhc2lzIGJ5IHJlZ3VsYXRvcnkgZG9tYWluICovCisjZGVmaW5lIEFUSDlLXzVHSFpfNTE1MF81MzUwCVJFR19SVUxFKDUxNTAtMTAsIDUzNTArMTAsIDQwLCAwLCAzMCxcCisJCQkJTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgTkw4MDIxMV9SUkZfTk9fSUJTUykKKyNkZWZpbmUgQVRIOUtfNUdIWl81NDcwXzU4NTAJUkVHX1JVTEUoNTQ3MC0xMCwgNTg1MCsxMCwgNDAsIDAsIDMwLFwKKwkJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfCBOTDgwMjExX1JSRl9OT19JQlNTKQorI2RlZmluZSBBVEg5S181R0haXzU3MjVfNTg1MAlSRUdfUlVMRSg1NzI1LTEwLCA1ODUwKzEwLCA0MCwgMCwgMzAsXAorCQkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8IE5MODAyMTFfUlJGX05PX0lCU1MpCiAKLXN0YXRpYyB1MTYgYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXJldHVybiBhaC0+YWhfY3VycmVudFJEICYgfldPUkxEV0lERV9ST0FNSU5HX0ZMQUc7Ci19CisjZGVmaW5lIEFUSDlLXzJHSFpfQUxMCQlBVEg5S18yR0haX0NIMDFfMTEsIFwKKwkJCQlBVEg5S18yR0haX0NIMTJfMTMsIFwKKwkJCQlBVEg5S18yR0haX0NIMTQKIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19jaGFuX2JtX3plcm8odTY0ICpiaXRtYXNrKQotewotCWludCBpOworI2RlZmluZSBBVEg5S181R0haX0FMTAkJQVRIOUtfNUdIWl81MTUwXzUzNTAsIFwKKwkJCQlBVEg5S181R0haXzU0NzBfNTg1MAorLyogVGhpcyBvbmUgc2tpcHMgd2hhdCB3ZSBjYWxsICJtaWQgYmFuZCIgKi8KKyNkZWZpbmUgQVRIOUtfNUdIWl9OT19NSURCQU5ECUFUSDlLXzVHSFpfNTE1MF81MzUwLCBcCisJCQkJQVRIOUtfNUdIWl81NzI1XzU4NTAKIAotCWZvciAoaSA9IDA7IGkgPCBCTUxFTjsgaSsrKSB7Ci0JCWlmIChiaXRtYXNrW2ldICE9IDApCi0JCQlyZXR1cm4gZmFsc2U7CisvKiBDYW4gYmUgdXNlZCBmb3I6CisgKiAweDYwLCAweDYxLCAweDYyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzYwXzYxXzYyID0geworCS5uX3JlZ19ydWxlcyA9IDUsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQUxMLAorCQlBVEg5S181R0haX0FMTCwKIAl9Ci0JcmV0dXJuIHRydWU7Cit9OworCisvKiBDYW4gYmUgdXNlZCBieSAweDYzIGFuZCAweDY1ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzYzXzY1ID0geworCS5uX3JlZ19ydWxlcyA9IDQsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfMkdIWl9DSDEyXzEzLAorCQlBVEg5S181R0haX05PX01JREJBTkQsCisJfQorfTsKKworLyogQ2FuIGJlIHVzZWQgYnkgMHg2NCBvbmx5ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzY0ID0geworCS5uX3JlZ19ydWxlcyA9IDMsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfNUdIWl9OT19NSURCQU5ELAorCX0KK307CisKKy8qIENhbiBiZSB1c2VkIGJ5IDB4NjYgYW5kIDB4NjkgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiBhdGg5a193b3JsZF9yZWdkb21fNjZfNjkgPSB7CisJLm5fcmVnX3J1bGVzID0gMywKKwkuYWxwaGEyID0gICI5OSIsCisJLnJlZ19ydWxlcyA9IHsKKwkJQVRIOUtfMkdIWl9DSDAxXzExLAorCQlBVEg5S181R0haX0FMTCwKKwl9Cit9OworCisvKiBDYW4gYmUgdXNlZCBieSAweDY3LCAweDZBIGFuZCAweDY4ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gYXRoOWtfd29ybGRfcmVnZG9tXzY3XzY4XzZBID0geworCS5uX3JlZ19ydWxlcyA9IDQsCisJLmFscGhhMiA9ICAiOTkiLAorCS5yZWdfcnVsZXMgPSB7CisJCUFUSDlLXzJHSFpfQ0gwMV8xMSwKKwkJQVRIOUtfMkdIWl9DSDEyXzEzLAorCQlBVEg5S181R0haX0FMTCwKKwl9Cit9OworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfd3dyX3NrdSh1MTYgcmVnZCkKK3sKKwlyZXR1cm4gKChyZWdkICYgV09STERfU0tVX01BU0spID09IFdPUkxEX1NLVV9QUkVGSVgpIHx8CisJCShyZWdkID09IFdPUkxEKTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19lZXByb21fdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoKQorc3RhdGljIHUxNiBhdGg5a19yZWdkX2dldF9lZXByb21SRChzdHJ1Y3QgYXRoX2h3ICphaCkKK3sKKwlyZXR1cm4gYWgtPnJlZ3VsYXRvcnkuY3VycmVudF9yZCAmIH5XT1JMRFdJREVfUk9BTUlOR19GTEFHOworfQorCitib29sIGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc3RydWN0IGF0aF9odyAqYWgpCit7CisJcmV0dXJuIGlzX3d3cl9za3UoYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpKTsKK30KKworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmF0aDlrX2RlZmF1bHRfd29ybGRfcmVnZG9tYWluKHZvaWQpCit7CisJLyogdGhpcyBpcyB0aGUgbW9zdCByZXN0cmljdGl2ZSAqLworCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY0OworfQorCitjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqYXRoOWtfd29ybGRfcmVnZG9tYWluKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXN3aXRjaCAoYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSkgeworCWNhc2UgMHg2MDoKKwljYXNlIDB4NjE6CisJY2FzZSAweDYyOgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82MF82MV82MjsKKwljYXNlIDB4NjM6CisJY2FzZSAweDY1OgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82M182NTsKKwljYXNlIDB4NjQ6CisJCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY0OworCWNhc2UgMHg2NjoKKwljYXNlIDB4Njk6CisJCXJldHVybiAmYXRoOWtfd29ybGRfcmVnZG9tXzY2XzY5OworCWNhc2UgMHg2NzoKKwljYXNlIDB4Njg6CisJY2FzZSAweDZBOgorCQlyZXR1cm4gJmF0aDlrX3dvcmxkX3JlZ2RvbV82N182OF82QTsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gYXRoOWtfZGVmYXVsdF93b3JsZF9yZWdkb21haW4oKTsKKwl9Cit9CisKKy8qIEZyZXF1ZW5jeSBpcyBvbmUgd2hlcmUgcmFkYXIgZGV0ZWN0aW9uIGlzIHJlcXVpcmVkICovCitzdGF0aWMgYm9vbCBhdGg5a19pc19yYWRhcl9mcmVxKHUxNiBjZW50ZXJfZnJlcSkKK3sKKwlyZXR1cm4gKGNlbnRlcl9mcmVxID49IDUyNjAgJiYgY2VudGVyX2ZyZXEgPD0gNTcwMCk7Cit9CisKKy8qCisgKiBOLkI6IFRoZXNlIGV4Y2VwdGlvbiBydWxlcyBkbyBub3QgYXBwbHkgcmFkYXIgZnJlcXMuCisgKgorICogLSBXZSBlbmFibGUgYWRob2MgKG9yIGJlYWNvbmluZykgaWYgYWxsb3dlZCBieSAxMWQKKyAqIC0gV2UgZW5hYmxlIGFjdGl2ZSBzY2FuIGlmIHRoZSBjaGFubmVsIGlzIGFsbG93ZWQgYnkgMTFkCisgKiAtIElmIG5vIGNvdW50cnkgSUUgaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCBhIHdlIGRldGVybWluZSB3ZSBoYXZlCisgKiAgIHJlY2VpdmVkIGEgYmVhY29uIG9uIGEgY2hhbm5lbCB3ZSBjYW4gZW5hYmxlIGFjdGl2ZSBzY2FuIGFuZAorICogICBhZGhvYyAob3IgYmVhY29uaW5nKS4KKyAqLworc3RhdGljIHZvaWQgYXRoOWtfcmVnX2FwcGx5X2JlYWNvbmluZ19mbGFncygKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKK3sKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcmVnX3J1bGU7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaDsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgYmFuZHdpZHRoID0gMDsKKwlpbnQgcjsKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKworCQlpZiAoIXdpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCWNvbnRpbnVlOworCisJCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOworCisJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CisKKwkJCWNoID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKKworCQkJaWYgKGF0aDlrX2lzX3JhZGFyX2ZyZXEoY2gtPmNlbnRlcl9mcmVxKSB8fAorCQkJICAgIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikpCisJCQkJY29udGludWU7CisKKwkJCWlmIChpbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCQlyID0gZnJlcV9yZWdfaW5mbyh3aXBoeSwgY2gtPmNlbnRlcl9mcmVxLAorCQkJCQkmYmFuZHdpZHRoLCAmcmVnX3J1bGUpOworCQkJCWlmIChyKQorCQkJCQljb250aW51ZTsKKwkJCQkvKgorCQkJCSAqIElmIDExZCBoYWQgYSBydWxlIGZvciB0aGlzIGNoYW5uZWwgZW5zdXJlCisJCQkJICogd2UgZW5hYmxlIGFkaG9jL2JlYWNvbmluZyBpZiBpdCBhbGxvd3MgdXMgdG8KKwkJCQkgKiB1c2UgaXQuIE5vdGUgdGhhdCB3ZSB3b3VsZCBoYXZlIGRpc2FibGVkIGl0CisJCQkJICogYnkgYXBwbHlpbmcgb3VyIHN0YXRpYyB3b3JsZCByZWdkb21haW4gYnkKKwkJCQkgKiBkZWZhdWx0IGR1cmluZyBpbml0LCBwcmlvciB0byBjYWxsaW5nIG91cgorCQkJCSAqIHJlZ3VsYXRvcnlfaGludCgpLgorCQkJCSAqLworCQkJCWlmICghKHJlZ19ydWxlLT5mbGFncyAmCisJCQkJICAgIE5MODAyMTFfUlJGX05PX0lCU1MpKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICB+SUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKKwkJCQlpZiAoIShyZWdfcnVsZS0+ZmxhZ3MgJgorCQkJCSAgICBOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4pKQorCQkJCQljaC0+ZmxhZ3MgJj0KKwkJCQkJICB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2gtPmJlYWNvbl9mb3VuZCkKKwkJCQkJY2gtPmZsYWdzICY9IH4oSUVFRTgwMjExX0NIQU5fTk9fSUJTUyB8CisJCQkJCSAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKTsKKwkJCX0KKwkJfQorCX0KKworfQorCisvKiBBbGxvd3MgYWN0aXZlIHNjYW4gc2NhbiBvbiBDaCAxMiBhbmQgMTMgKi8KK3N0YXRpYyB2b2lkIGF0aDlrX3JlZ19hcHBseV9hY3RpdmVfc2Nhbl9mbGFncygKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCWVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJlZ19ydWxlOworCXUzMiBiYW5kd2lkdGggPSAwOworCWludCByOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisKKwkvKgorCSAqIElmIG5vIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjZWl2ZWQgYWx3YXlzIGVuYWJsZSBhY3RpdmUgc2NhbgorCSAqIG9uIHRoZXNlIGNoYW5uZWxzLiBUaGlzIGlzIG9ubHkgZG9uZSBmb3Igc3BlY2lmaWMgcmVndWxhdG9yeSBTS1VzCisJICovCisJaWYgKGluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTFdOyAvKiBDSCAxMiAqLworCQlpZiAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMl07IC8qIENIIDEzICovCisJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQljaC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgYSBjb3VudHJ5IElFIGhhcyBiZWVuIHJlY2lldmVkIGNoZWNrIGl0cyBydWxlIGZvciB0aGlzCisJICogY2hhbm5lbCBmaXJzdCBiZWZvcmUgZW5hYmxpbmcgYWN0aXZlIHNjYW4uIFRoZSBwYXNzaXZlIHNjYW4KKwkgKiB3b3VsZCBoYXZlIGJlZW4gZW5mb3JjZWQgYnkgdGhlIGluaXRpYWwgcHJvY2Vzc2luZyBvZiBvdXIKKwkgKiBjdXN0b20gcmVndWxhdG9yeSBkb21haW4uCisJICovCisKKwljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbMTFdOyAvKiBDSCAxMiAqLworCXIgPSBmcmVxX3JlZ19pbmZvKHdpcGh5LCBjaC0+Y2VudGVyX2ZyZXEsICZiYW5kd2lkdGgsICZyZWdfcnVsZSk7CisJaWYgKCFyKSB7CisJCWlmICghKHJlZ19ydWxlLT5mbGFncyAmIE5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTikpCisJCQlpZiAoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOKQorCQkJCWNoLT5mbGFncyAmPSB+SUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCX0KKworCWNoID0gJnNiYW5kLT5jaGFubmVsc1sxMl07IC8qIENIIDEzICovCisJciA9IGZyZXFfcmVnX2luZm8od2lwaHksIGNoLT5jZW50ZXJfZnJlcSwgJmJhbmR3aWR0aCwgJnJlZ19ydWxlKTsKKwlpZiAoIXIpIHsKKwkJaWYgKCEocmVnX3J1bGUtPmZsYWdzICYgTkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOKSkKKwkJCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pCisJCQkJY2gtPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU47CisJfQorfQorCisvKiBBbHdheXMgYXBwbHkgUmFkYXIvREZTIHJ1bGVzIG9uIGZyZXEgcmFuZ2UgNTI2MCBNSHogLSA1NzAwIE1IeiAqLwordm9pZCBhdGg5a19yZWdfYXBwbHlfcmFkYXJfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCF3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0pCisJCXJldHVybjsKKworCXNiYW5kID0gd2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJY2ggPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCQlpZiAoIWF0aDlrX2lzX3JhZGFyX2ZyZXEoY2gtPmNlbnRlcl9mcmVxKSkKKwkJCWNvbnRpbnVlOworCQkvKiBXZSBhbHdheXMgZW5hYmxlIHJhZGFyIGRldGVjdGlvbi9ERlMgb24gdGhpcworCQkgKiBmcmVxdWVuY3kgcmFuZ2UuIEFkZGl0aW9uYWxseSB3ZSBhbHNvIGFwcGx5IG9uCisJCSAqIHRoaXMgZnJlcXVlbmN5IHJhbmdlOgorCQkgKiAtIElmIFNUQSBtb2RlIGRvZXMgbm90IHlldCBoYXZlIERGUyBzdXBwb3J0cyBkaXNhYmxlCisJCSAqICAgYWN0aXZlIHNjYW5uaW5nCisJCSAqIC0gSWYgYWRob2MgbW9kZSBkb2VzIG5vdCBzdXBwb3J0IERGUyB5ZXQgdGhlbgorCQkgKiAgIGRpc2FibGUgYWRob2MgaW4gdGhlIGZyZXF1ZW5jeS4KKwkJICogLSBJZiBBUCBtb2RlIGRvZXMgbm90IHlldCBzdXBwb3J0IHJhZGFyIGRldGVjdGlvbi9ERlMKKwkJICogICBkbyBub3QgYWxsb3cgQVAgbW9kZQorCQkgKi8KKwkJaWYgKCEoY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKQorCQkJY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1JBREFSIHwKKwkJCQkgICAgIElFRUU4MDIxMV9DSEFOX05PX0lCU1MgfAorCQkJCSAgICAgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOOworCX0KK30KKwordm9pZCBhdGg5a19yZWdfYXBwbHlfd29ybGRfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd2lwaHlfdG9faWVlZTgwMjExX2h3KHdpcGh5KTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKworCXN3aXRjaCAoYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSkgeworCWNhc2UgMHg2MDoKKwljYXNlIDB4NjM6CisJY2FzZSAweDY2OgorCWNhc2UgMHg2NzoKKwkJYXRoOWtfcmVnX2FwcGx5X2JlYWNvbmluZ19mbGFncyh3aXBoeSwgaW5pdGlhdG9yKTsKKwkJYnJlYWs7CisJY2FzZSAweDY4OgorCQlhdGg5a19yZWdfYXBwbHlfYmVhY29uaW5nX2ZsYWdzKHdpcGh5LCBpbml0aWF0b3IpOworCQlhdGg5a19yZWdfYXBwbHlfYWN0aXZlX3NjYW5fZmxhZ3Mod2lwaHksIGluaXRpYXRvcik7CisJCWJyZWFrOworCX0KKwlyZXR1cm47Cit9CisKK2ludCBhdGg5a19yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdpcGh5X3RvX2llZWU4MDIxMV9odyh3aXBoeSk7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwkvKiBXZSBhbHdheXMgYXBwbHkgdGhpcyAqLworCWF0aDlrX3JlZ19hcHBseV9yYWRhcl9mbGFncyh3aXBoeSk7CisKKwlzd2l0Y2ggKHJlcXVlc3QtPmluaXRpYXRvcikgeworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjoKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFOgorCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVI6CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6CisJCWlmIChhdGg5a19pc193b3JsZF9yZWdkKHNjLT5zY19haCkpCisJCQlhdGg5a19yZWdfYXBwbHlfd29ybGRfZmxhZ3Mod2lwaHksIHJlcXVlc3QtPmluaXRpYXRvcik7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitib29sIGF0aDlrX3JlZ2RfaXNfZWVwcm9tX3ZhbGlkKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXUxNiByZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKIAlpbnQgaTsKIAogCWlmIChyZCAmIENPVU5UUllfRVJEX0ZMQUcpIHsKKwkJLyogRUVQUk9NIHZhbHVlIGlzIGEgY291bnRyeSBjb2RlICovCiAJCXUxNiBjYyA9IHJkICYgfkNPVU5UUllfRVJEX0ZMQUc7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbENvdW50cmllcyk7IGkrKykKIAkJCWlmIChhbGxDb3VudHJpZXNbaV0uY291bnRyeUNvZGUgPT0gY2MpCiAJCQkJcmV0dXJuIHRydWU7CiAJfSBlbHNlIHsKKwkJLyogRUVQUk9NIHZhbHVlIGlzIGEgcmVncGFpciB2YWx1ZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykKIAkJCWlmIChyZWdEb21haW5QYWlyc1tpXS5yZWdEbW5FbnVtID09IHJkKQogCQkJCXJldHVybiB0cnVlOwpAQCAtODIsMTEzICszNzgsNyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc19mY2NfbWlkYmFuZF9zdXBwb3J0ZWQoc3RydWN0IGF0aF9oYWwgKmFoKQotewotCXUzMiByZWdjYXA7Ci0KLQlyZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCi0JaWYgKHJlZ2NhcCAmIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9GQ0NfTUlEQkFORCkKLQkJcmV0dXJuIHRydWU7Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfaXNfY2NvZGVfdmFsaWQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICAgIHUxNiBjYykKLXsKLQl1MTYgcmQ7Ci0JaW50IGk7Ci0KLQlpZiAoY2MgPT0gQ1RSWV9ERUZBVUxUKQotCQlyZXR1cm4gdHJ1ZTsKLQlpZiAoY2MgPT0gQ1RSWV9ERUJVRykKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLCAiRUVQUk9NIHJlZ2RvbWFpbiAweCV4XG4iLCByZCk7Ci0KLQlpZiAocmQgJiBDT1VOVFJZX0VSRF9GTEFHKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiRUVQUk9NIHNldHRpbmcgaXMgY291bnRyeSBjb2RlICV1XG4iLAotCQkJcmQgJiB+Q09VTlRSWV9FUkRfRkxBRyk7Ci0JCXJldHVybiBjYyA9PSAocmQgJiB+Q09VTlRSWV9FUkRfRkxBRyk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsQ291bnRyaWVzKTsgaSsrKSB7Ci0JCWlmIChjYyA9PSBhbGxDb3VudHJpZXNbaV0uY291bnRyeUNvZGUpIHsKLSNpZmRlZiBBSF9TVVBQT1JUXzExRAotCQkJaWYgKChyZCAmIFdPUkxEX1NLVV9NQVNLKSA9PSBXT1JMRF9TS1VfUFJFRklYKQotCQkJCXJldHVybiB0cnVlOwotI2VuZGlmCi0JCQlpZiAoYWxsQ291bnRyaWVzW2ldLnJlZ0RtbkVudW0gPT0gcmQgfHwKLQkJCSAgICByZCA9PSBERUJVR19SRUdfRE1OIHx8IHJkID09IE5PX0VOVU1SRCkKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGg5a19yZWdkX2dldF93bW9kZXNfbnJlZyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgICBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgKmNvdW50cnksCi0JCQkgICBzdHJ1Y3QgcmVnRG9tYWluICpyZDVHSHosCi0JCQkgICB1bnNpZ25lZCBsb25nICptb2Rlc19hbGxvd2VkKQotewotCWJpdG1hcF9jb3B5KG1vZGVzX2FsbG93ZWQsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzLCBBVEg5S19NT0RFX01BWCk7Ci0KLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUcsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSAmJgotCSAgICAoIWNvdW50cnktPmFsbG93MTFnKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFHLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpICYmCi0JICAgIChhdGg5a19yZWdkX2lzX2NoYW5fYm1femVybyhyZDVHSHotPmNoYW4xMWEpKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFBLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExTkdfSFQyMCwgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpCi0JICAgICYmICghY291bnRyeS0+YWxsb3cxMW5nMjApKQotCQljbGVhcl9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUMjAsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOQV9IVDIwLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykKLQkgICAgJiYgKCFjb3VudHJ5LT5hbGxvdzExbmEyMCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkFfSFQyMCwgbW9kZXNfYWxsb3dlZCk7Ci0KLQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMU5HX0hUNDBQTFVTLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykgJiYKLQkgICAgKCFjb3VudHJ5LT5hbGxvdzExbmc0MCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMsIGFoLT5haF9jYXBzLndpcmVsZXNzX21vZGVzKSAmJgotCSAgICAoIWNvdW50cnktPmFsbG93MTFuZzQwKSkKLQkJY2xlYXJfYml0KEFUSDlLX01PREVfMTFOR19IVDQwTUlOVVMsIG1vZGVzX2FsbG93ZWQpOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFOQV9IVDQwUExVUywgYWgtPmFoX2NhcHMud2lyZWxlc3NfbW9kZXMpICYmCi0JICAgICghY291bnRyeS0+YWxsb3cxMW5hNDApKQotCQljbGVhcl9iaXQoQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTLCBtb2Rlc19hbGxvd2VkKTsKLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTLCBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlcykgJiYKLQkgICAgKCFjb3VudHJ5LT5hbGxvdzExbmE0MCkpCi0JCWNsZWFyX2JpdChBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTLCBtb2Rlc19hbGxvd2VkKTsKLX0KLQotYm9vbCBhdGg5a19yZWdkX2lzX3B1YmxpY19zYWZldHlfc2t1KHN0cnVjdCBhdGhfaGFsICphaCkKLXsKLQl1MTYgcmQ7Ci0KLQlyZCA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQotCXN3aXRjaCAocmQpIHsKLQljYXNlIEZDQzRfRkNDQToKLQljYXNlIChDVFJZX1VOSVRFRF9TVEFURVNfRkNDNDkgfCBDT1VOVFJZX0VSRF9GTEFHKToKLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBERUJVR19SRUdfRE1OOgotCWNhc2UgTk9fRU5VTVJEOgotCQlpZiAoYWgtPmFoX2NvdW50cnlDb2RlID09IENUUllfVU5JVEVEX1NUQVRFU19GQ0M0OSkKLQkJCXJldHVybiB0cnVlOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCisvKiBFRVBST00gY291bnRyeSBjb2RlIHRvIHJlZ3BhaXIgbWFwcGluZyAqLwogc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCoKIGF0aDlrX3JlZ2RfZmluZF9jb3VudHJ5KHUxNiBjb3VudHJ5Q29kZSkKIHsKQEAgLTIwMSwxMiArMzkxLDIyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB1MTYgYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCkKKy8qIEVFUFJPTSByZCBjb2RlIHRvIHJlZ3BhaXIgbWFwcGluZyAqLworc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCoKK2F0aDlrX3JlZ2RfZmluZF9jb3VudHJ5X2J5X3JkKGludCByZWdkbW4pCiB7Ci0JdTE2IHJkOwogCWludCBpOwogCi0JcmQgPSBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsQ291bnRyaWVzKTsgaSsrKSB7CisJCWlmIChhbGxDb3VudHJpZXNbaV0ucmVnRG1uRW51bSA9PSByZWdkbW4pCisJCQlyZXR1cm4gJmFsbENvdW50cmllc1tpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJldHVybnMgdGhlIG1hcCBvZiB0aGUgRUVQUk9NIHNldCBSRCB0byBhIGNvdW50cnkgY29kZSAqLworc3RhdGljIHUxNiBhdGg5a19yZWdkX2dldF9kZWZhdWx0X2NvdW50cnkodTE2IHJkKQorewogCWlmIChyZCAmIENPVU5UUllfRVJEX0ZMQUcpIHsKIAkJc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkICpjb3VudHJ5ID0gTlVMTDsKIAkJdTE2IGNjID0gcmQgJiB+Q09VTlRSWV9FUkRfRkxBRzsKQEAgLTIxNiw3OTggKzQxNiwxMDQgQEAKIAkJCXJldHVybiBjYzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykKLQkJaWYgKHJlZ0RvbWFpblBhaXJzW2ldLnJlZ0RtbkVudW0gPT0gcmQpIHsKLQkJCWlmIChyZWdEb21haW5QYWlyc1tpXS5zaW5nbGVDQyAhPSAwKQotCQkJCXJldHVybiByZWdEb21haW5QYWlyc1tpXS5zaW5nbGVDQzsKLQkJCWVsc2UKLQkJCQlpID0gQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7Ci0JCX0KIAlyZXR1cm4gQ1RSWV9ERUZBVUxUOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19yZWdkX2lzX3ZhbGlkX3JlZ19kb21haW4oaW50IHJlZ0RtbiwKLQkJCQkJICAgc3RydWN0IHJlZ0RvbWFpbiAqcmQpCitzdGF0aWMgc3RydWN0IHJlZ19kbW5fcGFpcl9tYXBwaW5nKgorYXRoOWtfZ2V0X3JlZ3BhaXIoaW50IHJlZ2RtbikKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ0RvbWFpbnMpOyBpKyspIHsKLQkJaWYgKHJlZ0RvbWFpbnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW4pIHsKLQkJCWlmIChyZCAhPSBOVUxMKSB7Ci0JCQkJbWVtY3B5KHJkLCAmcmVnRG9tYWluc1tpXSwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCByZWdEb21haW4pKTsKLQkJCX0KLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JfQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgYXRoOWtfcmVnZF9pc192YWxpZF9yZWdfZG9tYWluUGFpcihpbnQgcmVnRG1uUGFpcikKLXsKLQlpbnQgaTsKLQotCWlmIChyZWdEbW5QYWlyID09IE5PX0VOVU1SRCkKLQkJcmV0dXJuIGZhbHNlOworCWlmIChyZWdkbW4gPT0gTk9fRU5VTVJEKQorCQlyZXR1cm4gTlVMTDsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdEb21haW5QYWlycyk7IGkrKykgewotCQlpZiAocmVnRG9tYWluUGFpcnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW5QYWlyKQotCQkJcmV0dXJuIHRydWU7CisJCWlmIChyZWdEb21haW5QYWlyc1tpXS5yZWdEbW5FbnVtID09IHJlZ2RtbikKKwkJCXJldHVybiAmcmVnRG9tYWluUGFpcnNbaV07CiAJfQotCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGJvb2wKLWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihzdHJ1Y3QgYXRoX2hhbCAqYWgsIGludCByZWdEbW4sCi0JCQkgICAgICAgdTE2IGNoYW5uZWxGbGFnLCBzdHJ1Y3QgcmVnRG9tYWluICpyZCkKK2ludCBhdGg5a19yZWdkX2luaXQoc3RydWN0IGF0aF9odyAqYWgpCiB7Ci0JaW50IGksIGZvdW5kOwotCXU2NCBmbGFncyA9IE5PX1JFUTsKLQlzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgKnJlZ1BhaXIgPSBOVUxMOwotCWludCByZWdPcmc7Ci0KLQlyZWdPcmcgPSByZWdEbW47Ci0JaWYgKHJlZ0RtbiA9PSBDVFJZX0RFRkFVTFQpIHsKLQkJdTE2IHJkbnVtOwotCQlyZG51bSA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKLQotCQlpZiAoIShyZG51bSAmIENPVU5UUllfRVJEX0ZMQUcpKSB7Ci0JCQlpZiAoYXRoOWtfcmVnZF9pc192YWxpZF9yZWdfZG9tYWluKHJkbnVtLCBOVUxMKSB8fAotCQkJICAgIGF0aDlrX3JlZ2RfaXNfdmFsaWRfcmVnX2RvbWFpblBhaXIocmRudW0pKSB7Ci0JCQkJcmVnRG1uID0gcmRudW07Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoKHJlZ0RtbiAmIE1VTFRJX0RPTUFJTl9NQVNLKSA9PSAwKSB7Ci0JCWZvciAoaSA9IDAsIGZvdW5kID0gMDsKLQkJICAgICAoaSA8IEFSUkFZX1NJWkUocmVnRG9tYWluUGFpcnMpKSAmJiAoIWZvdW5kKTsgaSsrKSB7Ci0JCQlpZiAocmVnRG9tYWluUGFpcnNbaV0ucmVnRG1uRW51bSA9PSByZWdEbW4pIHsKLQkJCQlyZWdQYWlyID0gJnJlZ0RvbWFpblBhaXJzW2ldOwotCQkJCWZvdW5kID0gMTsKLQkJCX0KLQkJfQotCQlpZiAoIWZvdW5kKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJGYWlsZWQgdG8gZmluZCByZWcgZG9tYWluIHBhaXIgJXVcbiIsIHJlZ0Rtbik7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJaWYgKCEoY2hhbm5lbEZsYWcgJiBDSEFOTkVMXzJHSFopKSB7Ci0JCQlyZWdEbW4gPSByZWdQYWlyLT5yZWdEbW41R0h6OwotCQkJZmxhZ3MgPSByZWdQYWlyLT5mbGFnczVHSHo7Ci0JCX0KLQkJaWYgKGNoYW5uZWxGbGFnICYgQ0hBTk5FTF8yR0haKSB7Ci0JCQlyZWdEbW4gPSByZWdQYWlyLT5yZWdEbW4yR0h6OwotCQkJZmxhZ3MgPSByZWdQYWlyLT5mbGFnczJHSHo7Ci0JCX0KLQl9Ci0KLQlmb3VuZCA9IGF0aDlrX3JlZ2RfaXNfdmFsaWRfcmVnX2RvbWFpbihyZWdEbW4sIHJkKTsKLQlpZiAoIWZvdW5kKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiRmFpbGVkIHRvIGZpbmQgdW5pdGFyeSByZWcgZG9tYWluICV1XG4iLCByZWdEbW4pOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJcmQtPnBzY2FuICY9IHJlZ1BhaXItPnBzY2FuTWFzazsKLQkJaWYgKCgocmVnT3JnICYgTVVMVElfRE9NQUlOX01BU0spID09IDApICYmCi0JCSAgICAoZmxhZ3MgIT0gTk9fUkVRKSkgewotCQkJcmQtPmZsYWdzID0gZmxhZ3M7Ci0JCX0KLQotCQlyZC0+ZmxhZ3MgJj0gKGNoYW5uZWxGbGFnICYgQ0hBTk5FTF8yR0haKSA/Ci0JCSAgICBSRUdfRE9NQUlOXzJHSFpfTUFTSyA6IFJFR19ET01BSU5fNUdIWl9NQVNLOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfaXNfYml0X3NldChpbnQgYml0LCB1NjQgKmJpdG1hc2spCi17Ci0JaW50IGJ5dGVPZmZzZXQsIGJpdG51bTsKLQl1NjQgdmFsOwotCi0JYnl0ZU9mZnNldCA9IGJpdCAvIDY0OwotCWJpdG51bSA9IGJpdCAtIGJ5dGVPZmZzZXQgKiA2NDsKLQl2YWwgPSAoKHU2NCkgMSkgPDwgYml0bnVtOwotCWlmIChiaXRtYXNrW2J5dGVPZmZzZXRdICYgdmFsKQotCQlyZXR1cm4gdHJ1ZTsKLQllbHNlCi0JCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQKLWF0aDlrX3JlZ2RfYWRkX3JlZ19jbGFzc2lkKHU4ICpyZWdjbGFzc2lkcywgdTMyIG1heHJlZ2lkcywKLQkJCSAgIHUzMiAqbnJlZ2lkcywgdTggcmVnY2xhc3NpZCkKLXsKLQlpbnQgaTsKLQotCWlmIChyZWdjbGFzc2lkID09IDApCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBtYXhyZWdpZHM7IGkrKykgewotCQlpZiAocmVnY2xhc3NpZHNbaV0gPT0gcmVnY2xhc3NpZCkKLQkJCXJldHVybjsKLQkJaWYgKHJlZ2NsYXNzaWRzW2ldID09IDApCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoaSA9PSBtYXhyZWdpZHMpCi0JCXJldHVybjsKLQllbHNlIHsKLQkJcmVnY2xhc3NpZHNbaV0gPSByZWdjbGFzc2lkOwotCQkqbnJlZ2lkcyArPSAxOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIGJvb2wKLWF0aDlrX3JlZ2RfZ2V0X2VlcHJvbV9yZWdfZXh0X2JpdHMoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIGVudW0gcmVnX2V4dF9iaXRtYXAgYml0KQotewotCXJldHVybiAoYWgtPmFoX2N1cnJlbnRSREV4dCAmICgxIDw8IGJpdCkpID8gdHJ1ZSA6IGZhbHNlOwotfQotCi0jaWZkZWYgQVRIX05GX1BFUl9DSEFOCi0KLXN0YXRpYyB2b2lkIGF0aDlrX3JlZ2RfaW5pdF9yZl9idWZmZXIoc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFucywKLQkJCQkgICAgICBpbnQgbmNoYW5zKQotewotCWludCBpLCBqLCBuZXh0OwotCi0JZm9yIChuZXh0ID0gMDsgbmV4dCA8IG5jaGFuczsgbmV4dCsrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBOVU1fTkZfUkVBRElOR1M7IGkrKykgewotCQkJaWNoYW5zW25leHRdLm5mQ2FsSGlzdFtpXS5jdXJySW5kZXggPSAwOwotCQkJaWNoYW5zW25leHRdLm5mQ2FsSGlzdFtpXS5wcml2TkYgPQotCQkJICAgIEFSX1BIWV9DQ0FfTUFYX0dPT0RfVkFMVUU7Ci0JCQlpY2hhbnNbbmV4dF0ubmZDYWxIaXN0W2ldLmludmFsaWRORmNvdW50ID0KLQkJCSAgICBBUl9QSFlfQ0NBX0ZJTFRFUldJTkRPV19MRU5HVEg7Ci0JCQlmb3IgKGogPSAwOyBqIDwgQVRIOUtfTkZfQ0FMX0hJU1RfTUFYOyBqKyspIHsKLQkJCQlpY2hhbnNbbmV4dF0ubmZDYWxIaXN0W2ldLm5mQ2FsQnVmZmVyW2pdID0KLQkJCQkgICAgQVJfUEhZX0NDQV9NQVhfR09PRF9WQUxVRTsKLQkJCX0KLQkJfQotCX0KLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50IGF0aDlrX3JlZ2RfaXNfY2hhbl9wcmVzZW50KHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgICB1MTYgYykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNTA7IGkrKykgewotCQlpZiAoIWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsKQotCQkJcmV0dXJuIC0xOwotCQllbHNlIGlmIChhaC0+YWhfY2hhbm5lbHNbaV0uY2hhbm5lbCA9PSBjKQotCQkJcmV0dXJuIGk7Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgYm9vbAotYXRoOWtfcmVnZF9hZGRfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCSAgICAgICB1MTYgYywKLQkJICAgICAgIHUxNiBjX2xvLAotCQkgICAgICAgdTE2IGNfaGksCi0JCSAgICAgICB1MTYgbWF4Q2hhbiwKLQkJICAgICAgIHU4IGN0bCwKLQkJICAgICAgIGludCBwb3MsCi0JCSAgICAgICBzdHJ1Y3QgcmVnRG9tYWluIHJkNUdIeiwKLQkJICAgICAgIHN0cnVjdCBSZWdEbW5GcmVxQmFuZCAqZmJhbmQsCi0JCSAgICAgICBzdHJ1Y3QgcmVnRG9tYWluICpyZCwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBjbW9kZSAqY20sCi0JCSAgICAgICBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqaWNoYW5zLAotCQkgICAgICAgYm9vbCBlbmFibGVFeHRlbmRlZENoYW5uZWxzKQotewotCXN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuOwotCWludCByZXQ7Ci0JdTMyIGNoYW5uZWxGbGFncyA9IDA7Ci0JdTggcHJpdkZsYWdzID0gMDsKLQotCWlmICghKGNfbG8gPD0gYyAmJiBjIDw9IGNfaGkpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiYyAldSBvdXQgb2YgcmFuZ2UgWyV1Li4ldV1cbiIsCi0JCQljLCBjX2xvLCBjX2hpKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoKGZiYW5kLT5jaGFubmVsQlcgPT0gQ0hBTk5FTF9IQUxGX0JXKSAmJgotCSAgICAhKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0hBTl9IQUxGUkFURSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyAldSBoYWxmIHJhdGUgY2hhbm5lbFxuIiwgYyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoKGZiYW5kLT5jaGFubmVsQlcgPT0gQ0hBTk5FTF9RVUFSVEVSX0JXKSAmJgotCSAgICAhKGFoLT5haF9jYXBzLmh3X2NhcHMgJiBBVEg5S19IV19DQVBfQ0hBTl9RVUFSVEVSUkFURSkpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyAldSBxdWFydGVyIHJhdGUgY2hhbm5lbFxuIiwgYyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoKChjICsgZmJhbmQtPmNoYW5uZWxTZXApIC8gMikgPiAobWF4Q2hhbiArIEhBTEZfTUFYQ0hBTkJXKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJImMgJXUgPiBtYXhDaGFuICV1XG4iLCBjLCBtYXhDaGFuKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmICgoZmJhbmQtPnVzZVBhc3NTY2FuICYgSVNfRUNNX0NIQU4pICYmICFlbmFibGVFeHRlbmRlZENoYW5uZWxzKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgZWNtIGNoYW5uZWxcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JaWYgKChyZC0+ZmxhZ3MgJiBOT19IT1NUQVApICYmIChhaC0+YWhfb3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJIlNraXBwaW5nIEhPU1RBUCBjaGFubmVsXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmCi0JICAgICEoYXRoOWtfcmVnZF9nZXRfZWVwcm9tX3JlZ19leHRfYml0cyhhaCwgUkVHX0VYVF9GQ0NfREZTX0hUNDApKSAmJgotCSAgICAoZmJhbmQtPnVzZURmcykgJiYKLQkgICAgKHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCAhPSBNS0spKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgSFQ0MCBjaGFubmVsIChlbl9mY2NfZGZzX2h0NDAgPSAwKVxuIik7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlpZiAoSVNfSFQ0MF9NT0RFKGNtLT5tb2RlKSAmJgotCSAgICAhKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbV9yZWdfZXh0X2JpdHMoYWgsCi0JCQkJCQkgUkVHX0VYVF9KQVBBTl9OT05ERlNfSFQ0MCkpICYmCi0JICAgICEoZmJhbmQtPnVzZURmcykgJiYgKHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCA9PSBNS0spKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiU2tpcHBpbmcgSFQ0MCBjaGFubmVsIChlbl9qYXBfaHQ0MCA9IDApXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmCi0JICAgICEoYXRoOWtfcmVnZF9nZXRfZWVwcm9tX3JlZ19leHRfYml0cyhhaCwgUkVHX0VYVF9KQVBBTl9ERlNfSFQ0MCkpICYmCi0JICAgIChmYmFuZC0+dXNlRGZzKSAmJgotCSAgICAocmQtPmNvbmZvcm1hbmNlVGVzdExpbWl0ID09IE1LSykpIHsKLQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKLQkJCSJTa2lwcGluZyBIVDQwIGNoYW5uZWwgKGVuX2phcF9kZnNfaHQ0MCA9IDApXG4iKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qIENhbGN1bGF0ZSBjaGFubmVsIGZsYWdzICovCi0KLQljaGFubmVsRmxhZ3MgPSBjbS0+ZmxhZ3M7Ci0KLQlzd2l0Y2ggKGZiYW5kLT5jaGFubmVsQlcpIHsKLQljYXNlIENIQU5ORUxfSEFMRl9CVzoKLQkJY2hhbm5lbEZsYWdzIHw9IENIQU5ORUxfSEFMRjsKLQkJYnJlYWs7Ci0JY2FzZSBDSEFOTkVMX1FVQVJURVJfQlc6Ci0JCWNoYW5uZWxGbGFncyB8PSBDSEFOTkVMX1FVQVJURVI7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChmYmFuZC0+dXNlUGFzc1NjYW4gJiByZC0+cHNjYW4pCi0JCWNoYW5uZWxGbGFncyB8PSBDSEFOTkVMX1BBU1NJVkU7Ci0JZWxzZQotCQljaGFubmVsRmxhZ3MgJj0gfkNIQU5ORUxfUEFTU0lWRTsKLQlpZiAoZmJhbmQtPnVzZURmcyAmIHJkLT5kZnNNYXNrKQotCQlwcml2RmxhZ3MgPSBDSEFOTkVMX0RGUzsKLQllbHNlCi0JCXByaXZGbGFncyA9IDA7Ci0JaWYgKHJkLT5mbGFncyAmIExJTUlUX0ZSQU1FXzRNUykKLQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfNE1TX0xJTUlUOwotCWlmIChwcml2RmxhZ3MgJiBDSEFOTkVMX0RGUykKLQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfRElTQUxMT1dfQURIT0M7Ci0JaWYgKHJkLT5mbGFncyAmIEFESE9DX1BFUl8xMUQpCi0JCXByaXZGbGFncyB8PSBDSEFOTkVMX1BFUl8xMURfQURIT0M7Ci0KLQlpZiAoY2hhbm5lbEZsYWdzICYgQ0hBTk5FTF9QQVNTSVZFKSB7Ci0JCWlmICgoYyA8IDI0MTIpIHx8IChjID4gMjQ2MikpIHsKLQkJCWlmIChyZDVHSHoucmVnRG1uRW51bSA9PSBNS0sxIHx8Ci0JCQkgICAgcmQ1R0h6LnJlZ0RtbkVudW0gPT0gTUtLMikgewotCQkJCXUzMiByZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCQkJCWlmICghKHJlZ2NhcCAmCi0JCQkJICAgICAgKEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMV9FVkVOIHwKLQkJCQkgICAgICAgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UyIHwKLQkJCQkgICAgICAgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX01JREJBTkQpKSAmJgotCQkJCSAgICBpc1VOSUkxT2RkQ2hhbihjKSkgewotCQkJCQljaGFubmVsRmxhZ3MgJj0gfkNIQU5ORUxfUEFTU0lWRTsKLQkJCQl9IGVsc2UgewotCQkJCQlwcml2RmxhZ3MgfD0gQ0hBTk5FTF9ESVNBTExPV19BREhPQzsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXByaXZGbGFncyB8PSBDSEFOTkVMX0RJU0FMTE9XX0FESE9DOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKChjbS0+bW9kZSA9PSBBVEg5S19NT0RFXzExQSkgfHwKLQkgICAgKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDIwKSB8fAotCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5BX0hUNDBQTFVTKSB8fAotCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5BX0hUNDBNSU5VUykpIHsKLQkJaWYgKHJkLT5mbGFncyAmIChBREhPQ19OT18xMUEgfCBESVNBTExPV19BREhPQ18xMUEpKQotCQkJcHJpdkZsYWdzIHw9IENIQU5ORUxfRElTQUxMT1dfQURIT0M7Ci0JfQotCi0JLyogRmlsbCBpbiBjaGFubmVsIGRldGFpbHMgKi8KLQotCXJldCA9IGF0aDlrX3JlZ2RfaXNfY2hhbl9wcmVzZW50KGFoLCBjKTsKLQlpZiAocmV0ID09IC0xKSB7Ci0JCWNoYW4gPSAmYWgtPmFoX2NoYW5uZWxzW3Bvc107Ci0JCWNoYW4tPmNoYW5uZWwgPSBjOwotCQljaGFuLT5tYXhSZWdUeFBvd2VyID0gZmJhbmQtPnBvd2VyRGZzOwotCQljaGFuLT5hbnRlbm5hTWF4ID0gZmJhbmQtPmFudGVubmFNYXg7Ci0JCWNoYW4tPnJlZ0RtbkZsYWdzID0gcmQtPmZsYWdzOwotCQljaGFuLT5tYXhUeFBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCQljaGFuLT5taW5UeFBvd2VyID0gQVI1NDE2X01BWF9SQVRFX1BPV0VSOwotCQljaGFuLT5jaGFubmVsRmxhZ3MgPSBjaGFubmVsRmxhZ3M7Ci0JCWNoYW4tPnByaXZGbGFncyA9IHByaXZGbGFnczsKLQl9IGVsc2UgewotCQljaGFuID0gJmFoLT5haF9jaGFubmVsc1tyZXRdOwotCQljaGFuLT5jaGFubmVsRmxhZ3MgfD0gY2hhbm5lbEZsYWdzOwotCQljaGFuLT5wcml2RmxhZ3MgfD0gcHJpdkZsYWdzOwotCX0KLQotCS8qIFNldCBDVExzICovCi0KLQlpZiAoKGNtLT5mbGFncyAmIENIQU5ORUxfQUxMKSA9PSBDSEFOTkVMX0EpCi0JCWNoYW4tPmNvbmZvcm1hbmNlVGVzdExpbWl0WzBdID0gY3RsOwotCWVsc2UgaWYgKChjbS0+ZmxhZ3MgJiBDSEFOTkVMX0FMTCkgPT0gQ0hBTk5FTF9CKQotCQljaGFuLT5jb25mb3JtYW5jZVRlc3RMaW1pdFsxXSA9IGN0bDsKLQllbHNlIGlmICgoY20tPmZsYWdzICYgQ0hBTk5FTF9BTEwpID09IENIQU5ORUxfRykKLQkJY2hhbi0+Y29uZm9ybWFuY2VUZXN0TGltaXRbMl0gPSBjdGw7Ci0KLQlyZXR1cm4gKHJldCA9PSAtMSkgPyB0cnVlIDogZmFsc2U7Ci19Ci0KLXN0YXRpYyBib29sIGF0aDlrX3JlZ2RfamFwYW5fY2hlY2soc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgIGludCBiLAotCQkJCSAgIHN0cnVjdCByZWdEb21haW4gKnJkNUdIeikKLXsKLQlib29sIHNraXBiYW5kID0gZmFsc2U7Ci0JaW50IGk7Ci0JdTMyIHJlZ2NhcDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGpfYmFuZGNoZWNrKTsgaSsrKSB7Ci0JCWlmIChqX2JhbmRjaGVja1tpXS5mcmVxYmFuZGJpdCA9PSBiKSB7Ci0JCQlyZWdjYXAgPSBhaC0+YWhfY2Fwcy5yZWdfY2FwOwotCQkJaWYgKChqX2JhbmRjaGVja1tpXS5lZXByb21mbGFndG9jaGVjayAmIHJlZ2NhcCkgPT0gMCkgewotCQkJCXNraXBiYW5kID0gdHJ1ZTsKLQkJCX0gZWxzZSBpZiAoKHJlZ2NhcCAmIEFSX0VFUFJPTV9FRVJFR0NBUF9FTl9LS19VMikgfHwKLQkJCQkgIChyZWdjYXAgJiBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTUlEQkFORCkpIHsKLQkJCQlyZDVHSHotPmRmc01hc2sgfD0gREZTX01LSzQ7Ci0JCQkJcmQ1R0h6LT5wc2NhbiB8PSBQU0NBTl9NS0szOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkiU2tpcHBpbmcgJWQgZnJlcSBiYW5kXG4iLCBqX2JhbmRjaGVja1tpXS5mcmVxYmFuZGJpdCk7Ci0KLQlyZXR1cm4gc2tpcGJhbmQ7Ci19Ci0KLWJvb2wKLWF0aDlrX3JlZ2RfaW5pdF9jaGFubmVscyhzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgdTMyIG1heGNoYW5zLAotCQkJIHUzMiAqbmNoYW5zLCB1OCAqcmVnY2xhc3NpZHMsCi0JCQkgdTMyIG1heHJlZ2lkcywgdTMyICpucmVnaWRzLCB1MTYgY2MsCi0JCQkgYm9vbCBlbmFibGVPdXRkb29yLAotCQkJIGJvb2wgZW5hYmxlRXh0ZW5kZWRDaGFubmVscykKLXsKLQl1MTYgbWF4Q2hhbiA9IDcwMDA7CiAJc3RydWN0IGNvdW50cnlfY29kZV90b19lbnVtX3JkICpjb3VudHJ5ID0gTlVMTDsKLQlzdHJ1Y3QgcmVnRG9tYWluIHJkNUdIeiwgcmQyR0h6OwotCWNvbnN0IHN0cnVjdCBjbW9kZSAqY207Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFucyA9ICZhaC0+YWhfY2hhbm5lbHNbMF07Ci0JaW50IG5leHQgPSAwLCBiOwotCXU4IGN0bDsKLQlpbnQgcmVnZG1uOwotCXUxNiBjaGFuU2VwOwotCXVuc2lnbmVkIGxvbmcgKm1vZGVzX2F2YWlsOwotCURFQ0xBUkVfQklUTUFQKG1vZGVzX2FsbG93ZWQsIEFUSDlLX01PREVfTUFYKTsKLQotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksICJjYyAldSAlcyAlc1xuIiwgY2MsCi0JCSBlbmFibGVPdXRkb29yID8gIkVuYWJsZSBvdXRkb29yIiA6ICIiLAotCQkgZW5hYmxlRXh0ZW5kZWRDaGFubmVscyA/ICJFbmFibGUgZWNtIiA6ICIiKTsKLQotCWlmICghYXRoOWtfcmVnZF9pc19jY29kZV92YWxpZChhaCwgY2MpKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiSW52YWxpZCBjb3VudHJ5IGNvZGUgJWRcbiIsIGNjKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KKwl1MTYgcmVnZG1uOwogCiAJaWYgKCFhdGg5a19yZWdkX2lzX2VlcHJvbV92YWxpZChhaCkpIHsKIAkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKIAkJCSJJbnZhbGlkIEVFUFJPTSBjb250ZW50c1xuIik7Ci0JCXJldHVybiBmYWxzZTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYWgtPmFoX2NvdW50cnlDb2RlID0gYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KGFoKTsKKwlyZWdkbW4gPSBhdGg5a19yZWdkX2dldF9lZXByb21SRChhaCk7CisJYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID0gYXRoOWtfcmVnZF9nZXRfZGVmYXVsdF9jb3VudHJ5KHJlZ2Rtbik7CiAKLQlpZiAoYWgtPmFoX2NvdW50cnlDb2RlID09IENUUllfREVGQVVMVCkgewotCQlhaC0+YWhfY291bnRyeUNvZGUgPSBjYyAmIENPVU5UUllfQ09ERV9NQVNLOwotCQlpZiAoKGFoLT5haF9jb3VudHJ5Q29kZSA9PSBDVFJZX0RFRkFVTFQpICYmCi0JCSAgICAoYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpID09IENUUllfREVGQVVMVCkpIHsKLQkJCWFoLT5haF9jb3VudHJ5Q29kZSA9IENUUllfVU5JVEVEX1NUQVRFUzsKLQkJfQotCX0KKwlpZiAoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID09IENUUllfREVGQVVMVCAmJgorCSAgICByZWdkbW4gPT0gQ1RSWV9ERUZBVUxUKQorCQlhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPSBDVFJZX1VOSVRFRF9TVEFURVM7CiAKLSNpZmRlZiBBSF9TVVBQT1JUXzExRAotCWlmIChhaC0+YWhfY291bnRyeUNvZGUgPT0gQ1RSWV9ERUZBVUxUKSB7Ci0JCXJlZ2RtbiA9IGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKTsKKwlpZiAoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlID09IENUUllfREVGQVVMVCkgewogCQljb3VudHJ5ID0gTlVMTDsKIAl9IGVsc2UgewotI2VuZGlmCi0JCWNvdW50cnkgPSBhdGg5a19yZWdkX2ZpbmRfY291bnRyeShhaC0+YWhfY291bnRyeUNvZGUpOworCQljb3VudHJ5ID0gYXRoOWtfcmVnZF9maW5kX2NvdW50cnkoYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlKTsKIAkJaWYgKGNvdW50cnkgPT0gTlVMTCkgewogCQkJRFBSSU5URihhaC0+YWhfc2MsIEFUSF9EQkdfUkVHVUxBVE9SWSwKIAkJCQkiQ291bnRyeSBpcyBOVUxMISEhISwgY2M9ICVkXG4iLAotCQkJCWFoLT5haF9jb3VudHJ5Q29kZSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0gZWxzZSB7CisJCQkJYWgtPnJlZ3VsYXRvcnkuY291bnRyeV9jb2RlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UKIAkJCXJlZ2RtbiA9IGNvdW50cnktPnJlZ0RtbkVudW07Ci0jaWZkZWYgQUhfU1VQUE9SVF8xMUQKLQkJCWlmICgoKGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKSAmCi0JCQkgICAgICBXT1JMRF9TS1VfTUFTSykgPT0gV09STERfU0tVX1BSRUZJWCkgJiYKLQkJCSAgICAoY2MgPT0gQ1RSWV9VTklURURfU1RBVEVTKSkgewotCQkJCWlmICghaXNXd3JTS1VfTm9NaWRiYW5kKGFoKQotCQkJCSAgICAmJiBhdGg5a19yZWdkX2lzX2ZjY19taWRiYW5kX3N1cHBvcnRlZChhaCkpCi0JCQkJCXJlZ2RtbiA9IEZDQzNfRkNDQTsKLQkJCQllbHNlCi0JCQkJCXJlZ2RtbiA9IEZDQzFfRkNDQTsKLQkJCX0KLSNlbmRpZgotCQl9Ci0jaWZkZWYgQUhfU1VQUE9SVF8xMUQKLQl9Ci0jZW5kaWYKLQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJICAgIHJlZ2RtbiwKLQkJCQkJICAgIH5DSEFOTkVMXzJHSFosCi0JCQkJCSAgICAmcmQ1R0h6KSkgewotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJIkNvdWxkbid0IGZpbmQgdW5pdGFyeSAiCi0JCQkiNUdIeiByZWcgZG9tYWluIGZvciBjb3VudHJ5ICV1XG4iLAotCQkJYWgtPmFoX2NvdW50cnlDb2RlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJICAgIHJlZ2RtbiwKLQkJCQkJICAgIENIQU5ORUxfMkdIWiwKLQkJCQkJICAgICZyZDJHSHopKSB7Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiQ291bGRuJ3QgZmluZCB1bml0YXJ5IDJHSHogIgotCQkJInJlZyBkb21haW4gZm9yIGNvdW50cnkgJXVcbiIsCi0JCQlhaC0+YWhfY291bnRyeUNvZGUpOwotCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKCFpc1d3clNLVShhaCkgJiYgKChyZDVHSHoucmVnRG1uRW51bSA9PSBGQ0MxKSB8fAotCQkJICAgICAgKHJkNUdIei5yZWdEbW5FbnVtID09IEZDQzIpKSkgewotCQlpZiAoYXRoOWtfcmVnZF9pc19mY2NfbWlkYmFuZF9zdXBwb3J0ZWQoYWgpKSB7Ci0JCQlpZiAoIWF0aDlrX3JlZ2RfZ2V0X3dtb2RlX3JlZ2RvbWFpbihhaCwKLQkJCQkJCQkgICAgRkNDM19GQ0NBLAotCQkJCQkJCSAgICB+Q0hBTk5FTF8yR0haLAotCQkJCQkJCSAgICAmcmQ1R0h6KSkgewotCQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJCSJDb3VsZG4ndCBmaW5kIHVuaXRhcnkgNUdIeiAiCi0JCQkJCSJyZWcgZG9tYWluIGZvciBjb3VudHJ5ICV1XG4iLAotCQkJCQlhaC0+YWhfY291bnRyeUNvZGUpOwotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJfQorCWFoLT5yZWd1bGF0b3J5LnJlZ3BhaXIgPSBhdGg5a19nZXRfcmVncGFpcihyZWdkbW4pOworCisJaWYgKCFhaC0+cmVndWxhdG9yeS5yZWdwYWlyKSB7CisJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX0ZBVEFMLAorCQkJIk5vIHJlZ3VsYXRvcnkgZG9tYWluIHBhaXIgZm91bmQsIGNhbm5vdCBjb250aW51ZVxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChjb3VudHJ5ID09IE5VTEwpIHsKLQkJbW9kZXNfYXZhaWwgPSBhaC0+YWhfY2Fwcy53aXJlbGVzc19tb2RlczsKKwlpZiAoIWNvdW50cnkpCisJCWNvdW50cnkgPSBhdGg5a19yZWdkX2ZpbmRfY291bnRyeV9ieV9yZChyZWdkbW4pOworCisJaWYgKGNvdW50cnkpIHsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzBdID0gY291bnRyeS0+aXNvTmFtZVswXTsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzFdID0gY291bnRyeS0+aXNvTmFtZVsxXTsKIAl9IGVsc2UgewotCQlhdGg5a19yZWdkX2dldF93bW9kZXNfbnJlZyhhaCwgY291bnRyeSwgJnJkNUdIeiwgbW9kZXNfYWxsb3dlZCk7Ci0JCW1vZGVzX2F2YWlsID0gbW9kZXNfYWxsb3dlZDsKLQotCQlpZiAoIWVuYWJsZU91dGRvb3IpCi0JCQltYXhDaGFuID0gY291bnRyeS0+b3V0ZG9vckNoYW5TdGFydDsKKwkJYWgtPnJlZ3VsYXRvcnkuYWxwaGEyWzBdID0gJzAnOworCQlhaC0+cmVndWxhdG9yeS5hbHBoYTJbMV0gPSAnMCc7CiAJfQogCi0JbmV4dCA9IDA7Ci0KLQlpZiAobWF4Y2hhbnMgPiBBUlJBWV9TSVpFKGFoLT5haF9jaGFubmVscykpCi0JCW1heGNoYW5zID0gQVJSQVlfU0laRShhaC0+YWhfY2hhbm5lbHMpOwotCi0JZm9yIChjbSA9IG1vZGVzOyBjbSA8ICZtb2Rlc1tBUlJBWV9TSVpFKG1vZGVzKV07IGNtKyspIHsKLQkJdTE2IGMsIGNfaGksIGNfbG87Ci0JCXU2NCAqY2hhbm5lbEJNID0gTlVMTDsKLQkJc3RydWN0IHJlZ0RvbWFpbiAqcmQgPSBOVUxMOwotCQlzdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgKmZiYW5kID0gTlVMTCwgKmZyZXFzOwotCQlpbnQ4X3QgbG93X2FkaiA9IDAsIGhpX2FkaiA9IDA7Ci0KLQkJaWYgKCF0ZXN0X2JpdChjbS0+bW9kZSwgbW9kZXNfYXZhaWwpKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSIhYXZhaWwgbW9kZSAlZCBmbGFncyAweCV4XG4iLAotCQkJCWNtLT5tb2RlLCBjbS0+ZmxhZ3MpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKCFhdGg5a19nZXRfY2hhbm5lbF9lZGdlcyhhaCwgY20tPmZsYWdzLCAmY19sbywgJmNfaGkpKSB7Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJjaGFubmVscyAweCV4IG5vdCBzdXBwb3J0ZWQgIgotCQkJCSJieSBoYXJkd2FyZVxuIiwgY20tPmZsYWdzKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc3dpdGNoIChjbS0+bW9kZSkgewotCQljYXNlIEFUSDlLX01PREVfMTFBOgotCQljYXNlIEFUSDlLX01PREVfMTFOQV9IVDIwOgotCQljYXNlIEFUSDlLX01PREVfMTFOQV9IVDQwUExVUzoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTOgotCQkJcmQgPSAmcmQ1R0h6OwotCQkJY2hhbm5lbEJNID0gcmQtPmNoYW4xMWE7Ci0JCQlmcmVxcyA9ICZyZWdEbW41R2h6RnJlcVswXTsKLQkJCWN0bCA9IHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIEFUSDlLX01PREVfMTFCOgotCQkJcmQgPSAmcmQyR0h6OwotCQkJY2hhbm5lbEJNID0gcmQtPmNoYW4xMWI7Ci0JCQlmcmVxcyA9ICZyZWdEbW4yR2h6RnJlcVswXTsKLQkJCWN0bCA9IHJkLT5jb25mb3JtYW5jZVRlc3RMaW1pdCB8IENUTF8xMUI7Ci0JCQlicmVhazsKLQkJY2FzZSBBVEg5S19NT0RFXzExRzoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkdfSFQyMDoKLQkJY2FzZSBBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVM6Ci0JCWNhc2UgQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUzoKLQkJCXJkID0gJnJkMkdIejsKLQkJCWNoYW5uZWxCTSA9IHJkLT5jaGFuMTFnOwotCQkJZnJlcXMgPSAmcmVnRG1uMkdoejExZ0ZyZXFbMF07Ci0JCQljdGwgPSByZC0+Y29uZm9ybWFuY2VUZXN0TGltaXQgfCBDVExfMTFHOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCSJVbmtub3duIEhBTCBtb2RlIDB4JXhcbiIsIGNtLT5tb2RlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGF0aDlrX3JlZ2RfaXNfY2hhbl9ibV96ZXJvKGNoYW5uZWxCTSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwUExVUykgfHwKLQkJICAgIChjbS0+bW9kZSA9PSBBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMpKSB7Ci0JCQloaV9hZGogPSAtMjA7Ci0JCX0KLQotCQlpZiAoKGNtLT5tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwTUlOVVMpIHx8Ci0JCSAgICAoY20tPm1vZGUgPT0gQVRIOUtfTU9ERV8xMU5HX0hUNDBNSU5VUykpIHsKLQkJCWxvd19hZGogPSAyMDsKLQkJfQotCi0JCS8qIFhYWDogQWRkIGEgaGVscGVyIGhlcmUgaW5zdGVhZCAqLwotCQlmb3IgKGIgPSAwOyBiIDwgNjQgKiBCTUxFTjsgYisrKSB7Ci0JCQlpZiAoYXRoOWtfcmVnZF9pc19iaXRfc2V0KGIsIGNoYW5uZWxCTSkpIHsKLQkJCQlmYmFuZCA9ICZmcmVxc1tiXTsKLQkJCQlpZiAocmQ1R0h6LnJlZ0RtbkVudW0gPT0gTUtLMQotCQkJCSAgICB8fCByZDVHSHoucmVnRG1uRW51bSA9PSBNS0syKSB7Ci0JCQkJCWlmIChhdGg5a19yZWdkX2phcGFuX2NoZWNrKGFoLAotCQkJCQkJCQkgICBiLAotCQkJCQkJCQkgICAmcmQ1R0h6KSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCWF0aDlrX3JlZ2RfYWRkX3JlZ19jbGFzc2lkKHJlZ2NsYXNzaWRzLAotCQkJCQkJCSAgIG1heHJlZ2lkcywKLQkJCQkJCQkgICBucmVnaWRzLAotCQkJCQkJCSAgIGZiYW5kLT4KLQkJCQkJCQkgICByZWdDbGFzc0lkKTsKLQotCQkJCWlmIChJU19IVDQwX01PREUoY20tPm1vZGUpICYmIChyZCA9PSAmcmQ1R0h6KSkgewotCQkJCQljaGFuU2VwID0gNDA7Ci0JCQkJCWlmIChmYmFuZC0+bG93Q2hhbm5lbCA9PSA1MjgwKQotCQkJCQkJbG93X2FkaiArPSAyMDsKLQotCQkJCQlpZiAoZmJhbmQtPmxvd0NoYW5uZWwgPT0gNTE3MCkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZQotCQkJCQljaGFuU2VwID0gZmJhbmQtPmNoYW5uZWxTZXA7Ci0KLQkJCQlmb3IgKGMgPSBmYmFuZC0+bG93Q2hhbm5lbCArIGxvd19hZGo7Ci0JCQkJICAgICAoKGMgPD0gKGZiYW5kLT5oaWdoQ2hhbm5lbCArIGhpX2FkaikpICYmCi0JCQkJICAgICAgKGMgPj0gKGZiYW5kLT5sb3dDaGFubmVsICsgbG93X2FkaikpKTsKLQkJCQkgICAgIGMgKz0gY2hhblNlcCkgewotCQkJCQlpZiAobmV4dCA+PSBtYXhjaGFucykgewotCQkJCQkJRFBSSU5URihhaC0+YWhfc2MsCi0JCQkJCQkJQVRIX0RCR19SRUdVTEFUT1JZLAotCQkJCQkJCSJ0b28gbWFueSBjaGFubmVscyAiCi0JCQkJCQkJImZvciBjaGFubmVsIHRhYmxlXG4iKTsKLQkJCQkJCWdvdG8gZG9uZTsKLQkJCQkJfQotCQkJCQlpZiAoYXRoOWtfcmVnZF9hZGRfY2hhbm5lbChhaCwKLQkJCQkJCSAgIGMsIGNfbG8sIGNfaGksCi0JCQkJCQkgICBtYXhDaGFuLCBjdGwsCi0JCQkJCQkgICBuZXh0LAotCQkJCQkJICAgcmQ1R0h6LAotCQkJCQkJICAgZmJhbmQsIHJkLCBjbSwKLQkJCQkJCSAgIGljaGFucywKLQkJCQkJCSAgIGVuYWJsZUV4dGVuZGVkQ2hhbm5lbHMpKQotCQkJCQkJbmV4dCsrOwotCQkJCX0KLQkJCQlpZiAoSVNfSFQ0MF9NT0RFKGNtLT5tb2RlKSAmJgotCQkJCSAgICAoZmJhbmQtPmxvd0NoYW5uZWwgPT0gNTI4MCkpIHsKLQkJCQkJbG93X2FkaiAtPSAyMDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci1kb25lOgotCWlmIChuZXh0ICE9IDApIHsKLQkJaW50IGk7Ci0KLQkJaWYgKG5leHQgPiBBUlJBWV9TSVpFKGFoLT5haF9jaGFubmVscykpIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJInRvbyBtYW55IGNoYW5uZWxzICV1OyB0cnVuY2F0aW5nIHRvICV1XG4iLAotCQkJCW5leHQsIChpbnQpIEFSUkFZX1NJWkUoYWgtPmFoX2NoYW5uZWxzKSk7Ci0JCQluZXh0ID0gQVJSQVlfU0laRShhaC0+YWhfY2hhbm5lbHMpOwotCQl9Ci0jaWZkZWYgQVRIX05GX1BFUl9DSEFOCi0JCWF0aDlrX3JlZ2RfaW5pdF9yZl9idWZmZXIoaWNoYW5zLCBuZXh0KTsKLSNlbmRpZgotCQlhdGg5a19yZWdkX3NvcnQoaWNoYW5zLCBuZXh0LAotCQkJCXNpemVvZihzdHJ1Y3QgYXRoOWtfY2hhbm5lbCksCi0JCQkJYXRoOWtfcmVnZF9jaGFuc29ydCk7Ci0KLQkJYWgtPmFoX25jaGFuID0gbmV4dDsKLQotCQlEUFJJTlRGKGFoLT5haF9zYywgQVRIX0RCR19SRUdVTEFUT1JZLCAiQ2hhbm5lbCBsaXN0OlxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBuZXh0OyBpKyspIHsKLQkJCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkJImNoYW46ICVkIGZsYWdzOiAweCV4XG4iLAotCQkJCWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsLAotCQkJCWFoLT5haF9jaGFubmVsc1tpXS5jaGFubmVsRmxhZ3MpOwotCQl9Ci0JfQotCSpuY2hhbnMgPSBuZXh0OwotCi0JYWgtPmFoX2NvdW50cnlDb2RlID0gYWgtPmFoX2NvdW50cnlDb2RlOwotCi0JYWgtPmFoX2N1cnJlbnRSREluVXNlID0gcmVnZG1uOwotCWFoLT5haF9jdXJyZW50UkQ1RyA9IHJkNUdIei5yZWdEbW5FbnVtOwotCWFoLT5haF9jdXJyZW50UkQyRyA9IHJkMkdIei5yZWdEbW5FbnVtOwotCWlmIChjb3VudHJ5ID09IE5VTEwpIHsKLQkJYWgtPmFoX2lzb1swXSA9IDA7Ci0JCWFoLT5haF9pc29bMV0gPSAwOwotCX0gZWxzZSB7Ci0JCWFoLT5haF9pc29bMF0gPSBjb3VudHJ5LT5pc29OYW1lWzBdOwotCQlhaC0+YWhfaXNvWzFdID0gY291bnRyeS0+aXNvTmFtZVsxXTsKLQl9Ci0KLQlyZXR1cm4gbmV4dCAhPSAwOwotfQotCi1zdHJ1Y3QgYXRoOWtfY2hhbm5lbCoKLWF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChzdHJ1Y3QgYXRoX2hhbCAqYWgsCi0JCQkgY29uc3Qgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmMpCi17Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmJhc2UsICpjYzsKLQotCWludCBmbGFncyA9IGMtPmNoYW5uZWxGbGFncyAmIENIQU5fRkxBR1M7Ci0JaW50IG4sIGxpbTsKLQogCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCSJjaGFubmVsICV1LzB4JXggKDB4JXgpIHJlcXVlc3RlZFxuIiwKLQkJYy0+Y2hhbm5lbCwgYy0+Y2hhbm5lbEZsYWdzLCBmbGFncyk7CisJCSJDb3VudHJ5IGFscGhhMiBiZWluZyB1c2VkOiAlYyVjXG4iCisJCSJSZWd1bGF0b3J5LlJlZ3BhaXIgZGV0ZWN0ZWQ6IDB4JTB4XG4iLAorCQlhaC0+cmVndWxhdG9yeS5hbHBoYTJbMF0sIGFoLT5yZWd1bGF0b3J5LmFscGhhMlsxXSwKKwkJYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnRG1uRW51bSk7CiAKLQljYyA9IGFoLT5haF9jdXJjaGFuOwotCWlmIChjYyAhPSBOVUxMICYmIGNjLT5jaGFubmVsID09IGMtPmNoYW5uZWwgJiYKLQkgICAgKGNjLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSA9PSBmbGFncykgewotCQlpZiAoKGNjLT5wcml2RmxhZ3MgJiBDSEFOTkVMX0lOVEVSRkVSRU5DRSkgJiYKLQkJICAgIChjYy0+cHJpdkZsYWdzICYgQ0hBTk5FTF9ERlMpKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWVsc2UKLQkJCXJldHVybiBjYzsKLQl9Ci0KLQliYXNlID0gYWgtPmFoX2NoYW5uZWxzOwotCW4gPSBhaC0+YWhfbmNoYW47Ci0KLQlmb3IgKGxpbSA9IG47IGxpbSAhPSAwOyBsaW0gPj49IDEpIHsKLQkJaW50IGQ7Ci0JCWNjID0gJmJhc2VbbGltID4+IDFdOwotCQlkID0gYy0+Y2hhbm5lbCAtIGNjLT5jaGFubmVsOwotCQlpZiAoZCA9PSAwKSB7Ci0JCQlpZiAoKGNjLT5jaGFubmVsRmxhZ3MgJiBDSEFOX0ZMQUdTKSA9PSBmbGFncykgewotCQkJCWlmICgoY2MtPnByaXZGbGFncyAmIENIQU5ORUxfSU5URVJGRVJFTkNFKSAmJgotCQkJCSAgICAoY2MtPnByaXZGbGFncyAmIENIQU5ORUxfREZTKSkKLQkJCQkJcmV0dXJuIE5VTEw7Ci0JCQkJZWxzZQotCQkJCQlyZXR1cm4gY2M7Ci0JCQl9Ci0JCQlkID0gZmxhZ3MgLSAoY2MtPmNoYW5uZWxGbGFncyAmIENIQU5fRkxBR1MpOwotCQl9Ci0JCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksCi0JCQkiY2hhbm5lbCAldS8weCV4IGQgJWRcbiIsCi0JCQljYy0+Y2hhbm5lbCwgY2MtPmNoYW5uZWxGbGFncywgZCk7Ci0JCWlmIChkID4gMCkgewotCQkJYmFzZSA9IGNjICsgMTsKLQkJCWxpbS0tOwotCQl9Ci0JfQotCURQUklOVEYoYWgtPmFoX3NjLCBBVEhfREJHX1JFR1VMQVRPUlksICJubyBtYXRjaCBmb3IgJXUvMHgleFxuIiwKLQkJYy0+Y2hhbm5lbCwgYy0+Y2hhbm5lbEZsYWdzKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gMDsKIH0KIAotdTMyCi1hdGg5a19yZWdkX2dldF9hbnRlbm5hX2FsbG93ZWQoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJICAgICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQotewotCXN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbiA9IE5VTEw7Ci0KLQlpY2hhbiA9IGF0aDlrX3JlZ2RfY2hlY2tfY2hhbm5lbChhaCwgY2hhbik7Ci0JaWYgKCFpY2hhbikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gaWNoYW4tPmFudGVubmFNYXg7Ci19Ci0KLXUzMiBhdGg5a19yZWdkX2dldF9jdGwoc3RydWN0IGF0aF9oYWwgKmFoLCBzdHJ1Y3QgYXRoOWtfY2hhbm5lbCAqY2hhbikKK3UzMiBhdGg5a19yZWdkX2dldF9jdGwoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQogewogCXUzMiBjdGwgPSBOT19DVEw7Ci0Jc3RydWN0IGF0aDlrX2NoYW5uZWwgKmljaGFuOwogCi0JaWYgKGFoLT5haF9jb3VudHJ5Q29kZSA9PSBDVFJZX0RFRkFVTFQgJiYgaXNXd3JTS1UoYWgpKSB7CisJaWYgKCFhaC0+cmVndWxhdG9yeS5yZWdwYWlyIHx8CisJICAgIChhaC0+cmVndWxhdG9yeS5jb3VudHJ5X2NvZGUgPT0gQ1RSWV9ERUZBVUxUICYmCisJICAgICBpc193d3Jfc2t1KGF0aDlrX3JlZ2RfZ2V0X2VlcHJvbVJEKGFoKSkpKSB7CiAJCWlmIChJU19DSEFOX0IoY2hhbikpCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFCOwogCQllbHNlIGlmIChJU19DSEFOX0coY2hhbikpCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFHOwogCQllbHNlCiAJCQljdGwgPSBTRF9OT19DVEwgfCBDVExfMTFBOwotCX0gZWxzZSB7Ci0JCWljaGFuID0gYXRoOWtfcmVnZF9jaGVja19jaGFubmVsKGFoLCBjaGFuKTsKLQkJaWYgKGljaGFuICE9IE5VTEwpIHsKLQkJCS8qIEZJWE1FICovCi0JCQlpZiAoSVNfQ0hBTl9BKGljaGFuKSkKLQkJCQljdGwgPSBpY2hhbi0+Y29uZm9ybWFuY2VUZXN0TGltaXRbMF07Ci0JCQllbHNlIGlmIChJU19DSEFOX0IoaWNoYW4pKQotCQkJCWN0bCA9IGljaGFuLT5jb25mb3JtYW5jZVRlc3RMaW1pdFsxXTsKLQkJCWVsc2UgaWYgKElTX0NIQU5fRyhpY2hhbikpCi0JCQkJY3RsID0gaWNoYW4tPmNvbmZvcm1hbmNlVGVzdExpbWl0WzJdOwotCi0JCQlpZiAoSVNfQ0hBTl9HKGNoYW4pICYmIChjdGwgJiAweGYpID09IENUTF8xMUIpCi0JCQkJY3RsID0gKGN0bCAmIH4weGYpIHwgQ1RMXzExRzsKLQkJfQorCQlyZXR1cm4gY3RsOwogCX0KKworCWlmIChJU19DSEFOX0IoY2hhbikpCisJCWN0bCA9IGFoLT5yZWd1bGF0b3J5LnJlZ3BhaXItPnJlZ18yZ2h6X2N0bCB8IENUTF8xMUI7CisJZWxzZSBpZiAoSVNfQ0hBTl9HKGNoYW4pKQorCQljdGwgPSBhaC0+cmVndWxhdG9yeS5yZWdwYWlyLT5yZWdfMmdoel9jdGwgfCBDVExfMTFHOworCWVsc2UKKwkJY3RsID0gYWgtPnJlZ3VsYXRvcnkucmVncGFpci0+cmVnXzVnaHpfY3RsIHwgQ1RMXzExQTsKKwogCXJldHVybiBjdGw7CiB9Ci0KLXZvaWQgYXRoOWtfcmVnZF9nZXRfY3VycmVudF9jb3VudHJ5KHN0cnVjdCBhdGhfaGFsICphaCwKLQkJCQkgICAgc3RydWN0IGF0aDlrX2NvdW50cnlfZW50cnkgKmN0cnkpCi17Ci0JdTE2IHJkID0gYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoYWgpOwotCi0JY3RyeS0+aXNNdWx0aWRvbWFpbiA9IGZhbHNlOwotCWlmIChyZCA9PSBDVFJZX0RFRkFVTFQpCi0JCWN0cnktPmlzTXVsdGlkb21haW4gPSB0cnVlOwotCWVsc2UgaWYgKCEocmQgJiBDT1VOVFJZX0VSRF9GTEFHKSkKLQkJY3RyeS0+aXNNdWx0aWRvbWFpbiA9IGlzV3dyU0tVKGFoKTsKLQotCWN0cnktPmNvdW50cnlDb2RlID0gYWgtPmFoX2NvdW50cnlDb2RlOwotCWN0cnktPnJlZ0RtbkVudW0gPSBhaC0+YWhfY3VycmVudFJEOwotCWN0cnktPnJlZ0RtbjVHID0gYWgtPmFoX2N1cnJlbnRSRDVHOwotCWN0cnktPnJlZ0RtbjJHID0gYWgtPmFoX2N1cnJlbnRSRDJHOwotCWN0cnktPmlzb1swXSA9IGFoLT5haF9pc29bMF07Ci0JY3RyeS0+aXNvWzFdID0gYWgtPmFoX2lzb1sxXTsKLQljdHJ5LT5pc29bMl0gPSBhaC0+YWhfaXNvWzJdOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZC5oCmluZGV4IDUxMmQ5OTAuLjlmNWZiZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNywxMjcgKzE3LDggQEAKICNpZm5kZWYgUkVHRF9ICiAjZGVmaW5lIFJFR0RfSAogCi0jaW5jbHVkZSAiYXRoOWsuaCIKLQotI2RlZmluZSBCTUxFTiAyCi0jZGVmaW5lIEJNWkVSTyB7KHU2NCkgMCwgKHU2NCkgMH0KLQotI2RlZmluZSBCTShfZmEsIF9mYiwgX2ZjLCBfZmQsIF9mZSwgX2ZmLCBfZmcsIF9maCwgX2ZpLCBfZmosIF9maywgX2ZsKSBcCi0JeygoKChfZmEgPj0gMCkgJiYgKF9mYSA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZhKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mYiA+PSAwKSAmJiAoX2ZiIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmIpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZjID49IDApICYmIChfZmMgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mYykgOiAodTY0KSAwKSB8IFwKLQkoKChfZmQgPj0gMCkgJiYgKF9mZCA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZkKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZSA+PSAwKSAmJiAoX2ZlIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmUpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZmID49IDApICYmIChfZmYgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mZikgOiAodTY0KSAwKSB8IFwKLQkoKChfZmcgPj0gMCkgJiYgKF9mZyA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZnKSA6ICh1NjQpIDApIHwgXAotCSgoKF9maCA+PSAwKSAmJiAoX2ZoIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmgpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZpID49IDApICYmIChfZmkgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9maSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmogPj0gMCkgJiYgKF9maiA8IDY0KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgX2ZqKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mayA+PSAwKSAmJiAoX2ZrIDwgNjQpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCBfZmspIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZsID49IDApICYmIChfZmwgPCA2NCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IF9mbCkgOiAodTY0KSAwKSB8IFwKLQkJCSgoKChfZmEgPiA2MykgJiYgKF9mYSA8IDEyOCkpID8gXAotCQkJKCgodTY0KSAxKSA8PCAoX2ZhIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mYiA+IDYzKSAmJiAoX2ZiIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mYiAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmMgPiA2MykgJiYgKF9mYyA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmMgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZkID4gNjMpICYmIChfZmQgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZkIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mZSA+IDYzKSAmJiAoX2ZlIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mZSAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmYgPiA2MykgJiYgKF9mZiA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmYgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZnID4gNjMpICYmIChfZmcgPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZnIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9maCA+IDYzKSAmJiAoX2ZoIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9maCAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmkgPiA2MykgJiYgKF9maSA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmkgLSA2NCkpIDogKHU2NCkgMCkgfCBcCi0JKCgoX2ZqID4gNjMpICYmIChfZmogPCAxMjgpKSA/IFwKLQkJKCgodTY0KSAxKSA8PCAoX2ZqIC0gNjQpKSA6ICh1NjQpIDApIHwgXAotCSgoKF9mayA+IDYzKSAmJiAoX2ZrIDwgMTI4KSkgPyBcCi0JCSgoKHU2NCkgMSkgPDwgKF9mayAtIDY0KSkgOiAodTY0KSAwKSB8IFwKLQkoKChfZmwgPiA2MykgJiYgKF9mbCA8IDEyOCkpID8gXAotCQkoKCh1NjQpIDEpIDw8IChfZmwgLSA2NCkpIDogKHU2NCkgMCkpKX0KLQotI2RlZmluZSBERUZfUkVHRE1OICAgICAgRkNDMV9GQ0NBCi0jZGVmaW5lIERFRl9ETU5fNSAgICAgICBGQ0MxCi0jZGVmaW5lIERFRl9ETU5fMiAgICAgICBGQ0NBCiAjZGVmaW5lIENPVU5UUllfRVJEX0ZMQUcgICAgICAgIDB4ODAwMAogI2RlZmluZSBXT1JMRFdJREVfUk9BTUlOR19GTEFHICAweDQwMDAKLSNkZWZpbmUgU1VQRVJfRE9NQUlOX01BU0sgICAweDBmZmYKLSNkZWZpbmUgQ09VTlRSWV9DT0RFX01BU0sgICAweDNmZmYKLSNkZWZpbmUgQ0ZfSU5URVJGRVJFTkNFICAgICAoQ0hBTk5FTF9DV19JTlQgfCBDSEFOTkVMX1JBREFSX0lOVCkKLSNkZWZpbmUgQ0hBTk5FTF8xNCAgICAgICgyNDg0KQotI2RlZmluZSBJU18xMUdfQ0gxNChfY2gsX2NmKSBcCi0gICAgKCgoX2NoKSA9PSBDSEFOTkVMXzE0KSAmJiAoKF9jZikgPT0gQ0hBTk5FTF9HKSkKLQotI2RlZmluZSBOT19QU0NBTiAgICAweDBVTEwKLSNkZWZpbmUgUFNDQU5fRkNDICAgMHgwMDAwMDAwMDAwMDAwMDAxVUxMCi0jZGVmaW5lIFBTQ0FOX0ZDQ19UIDB4MDAwMDAwMDAwMDAwMDAwMlVMTAotI2RlZmluZSBQU0NBTl9FVFNJICAweDAwMDAwMDAwMDAwMDAwMDRVTEwKLSNkZWZpbmUgUFNDQU5fTUtLMSAgMHgwMDAwMDAwMDAwMDAwMDA4VUxMCi0jZGVmaW5lIFBTQ0FOX01LSzIgIDB4MDAwMDAwMDAwMDAwMDAxMFVMTAotI2RlZmluZSBQU0NBTl9NS0tBICAweDAwMDAwMDAwMDAwMDAwMjBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQV9HICAgIDB4MDAwMDAwMDAwMDAwMDA0MFVMTAotI2RlZmluZSBQU0NBTl9FVFNJQSAweDAwMDAwMDAwMDAwMDAwODBVTEwKLSNkZWZpbmUgUFNDQU5fRVRTSUIgMHgwMDAwMDAwMDAwMDAwMTAwVUxMCi0jZGVmaW5lIFBTQ0FOX0VUU0lDIDB4MDAwMDAwMDAwMDAwMDIwMFVMTAotI2RlZmluZSBQU0NBTl9XV1IgICAweDAwMDAwMDAwMDAwMDA0MDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQTEgMHgwMDAwMDAwMDAwMDAwODAwVUxMCi0jZGVmaW5lIFBTQ0FOX01LS0ExX0cgICAweDAwMDAwMDAwMDAwMDEwMDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLQTIgMHgwMDAwMDAwMDAwMDAyMDAwVUxMCi0jZGVmaW5lIFBTQ0FOX01LS0EyX0cgICAweDAwMDAwMDAwMDAwMDQwMDBVTEwKLSNkZWZpbmUgUFNDQU5fTUtLMyAgMHgwMDAwMDAwMDAwMDA4MDAwVUxMCi0jZGVmaW5lIFBTQ0FOX0RFRkVSIDB4N0ZGRkZGRkZGRkZGRkZGRlVMTAotI2RlZmluZSBJU19FQ01fQ0hBTiAweDgwMDAwMDAwMDAwMDAwMDBVTEwKLQotI2RlZmluZSBpc1d3clNLVShfYWgpIFwKLQkoKChhdGg5a19yZWdkX2dldF9lZXByb21SRCgoX2FoKSkgJiBXT1JMRF9TS1VfTUFTSykgPT0gXAotCQlXT1JMRF9TS1VfUFJFRklYKSB8fCBcCi0JCShhdGg5a19yZWdkX2dldF9lZXByb21SRChfYWgpID09IFdPUkxEKSkKLQotI2RlZmluZSBpc1d3clNLVV9Ob01pZGJhbmQoX2FoKSBcCi0JKChhdGg5a19yZWdkX2dldF9lZXByb21SRCgoX2FoKSkgPT0gV09SM19XT1JMRCkgfHwgXAotCShhdGg5a19yZWdkX2dldF9lZXByb21SRChfYWgpID09IFdPUjRfV09STEQpIHx8IFwKLQkoYXRoOWtfcmVnZF9nZXRfZWVwcm9tUkQoX2FoKSA9PSBXT1I1X0VUU0lDKSkKLQotI2RlZmluZSBpc1VOSUkxT2RkQ2hhbihjaCkgXAotCSgoY2ggPT0gNTE3MCkgfHwgKGNoID09IDUxOTApIHx8IChjaCA9PSA1MjEwKSB8fCAoY2ggPT0gNTIzMCkpCi0KLSNkZWZpbmUgSVNfSFQ0MF9NT0RFKF9tb2RlKQkJCQkJXAotCSgoKF9tb2RlID09IEFUSDlLX01PREVfMTFOQV9IVDQwUExVUyAgfHwJCVwKLQkgICBfbW9kZSA9PSBBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMgICAgfHwJCVwKLQkgICBfbW9kZSA9PSBBVEg5S19NT0RFXzExTkFfSFQ0ME1JTlVTICAgfHwJCVwKLQkgICBfbW9kZSA9PSBBVEg5S19NT0RFXzExTkdfSFQ0ME1JTlVTKSA/IHRydWUgOiBmYWxzZSkpCi0KLSNkZWZpbmUgQ0hBTl9GTEFHUyAgICAgIChDSEFOTkVMX0FMTHxDSEFOTkVMX0hBTEZ8Q0hBTk5FTF9RVUFSVEVSKQotCi0jZGVmaW5lIHN3YXBfYXJyYXkoX2EsIF9iLCBfc2l6ZSkgeyAgICAgICAgICAgICAgICAgICBcCi0JdTggKnMgPSBfYjsgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpbnQgaSA9IF9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCXU4IHRtcCA9ICpfYTsgICAgICAgICAgICAgXAotCQkqX2ErKyA9ICpzOyAgICAgICAgICAgICAgICAgICAgIFwKLQkJKnMrKyA9IHRtcDsgICAgICAgICAgICAgICAgICAgICBcCi0JfSB3aGlsZSAoLS1pKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfYSAtPSBfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0KLSNkZWZpbmUgSEFMRl9NQVhDSEFOQlcgICAgICAgICAgMTAKIAogI2RlZmluZSBNVUxUSV9ET01BSU5fTUFTSyAweEZGMDAKIApAQCAtMTQ3LDgxICsyOCwyNyBAQAogI2RlZmluZSBDSEFOTkVMX0hBTEZfQlcgICAgICAgICAxMAogI2RlZmluZSBDSEFOTkVMX1FVQVJURVJfQlcgICAgICA1CiAKLXR5cGVkZWYgaW50IGF0aF9oYWxfY21wX3QoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwotCiBzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgewogCXUxNiByZWdEbW5FbnVtOwotCXUxNiByZWdEbW41R0h6OwotCXUxNiByZWdEbW4yR0h6OwotCXUzMiBmbGFnczVHSHo7Ci0JdTMyIGZsYWdzMkdIejsKLQl1NjQgcHNjYW5NYXNrOwotCXUxNiBzaW5nbGVDQzsKLX07Ci0KLXN0cnVjdCBjY21hcCB7Ci0JY2hhciBpc29OYW1lWzNdOwotCXUxNiBjb3VudHJ5Q29kZTsKKwl1MTYgcmVnXzVnaHpfY3RsOworCXUxNiByZWdfMmdoel9jdGw7CiB9OwogCiBzdHJ1Y3QgY291bnRyeV9jb2RlX3RvX2VudW1fcmQgewogCXUxNiBjb3VudHJ5Q29kZTsKIAl1MTYgcmVnRG1uRW51bTsKIAljb25zdCBjaGFyICppc29OYW1lOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JYm9vbCBhbGxvdzExZzsKLQlib29sIGFsbG93MTFhVHVyYm87Ci0JYm9vbCBhbGxvdzExZ1R1cmJvOwotCWJvb2wgYWxsb3cxMW5nMjA7Ci0JYm9vbCBhbGxvdzExbmc0MDsKLQlib29sIGFsbG93MTFuYTIwOwotCWJvb2wgYWxsb3cxMW5hNDA7Ci0JdTE2IG91dGRvb3JDaGFuU3RhcnQ7CiB9OwogCi1zdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgewotCXUxNiBsb3dDaGFubmVsOwotCXUxNiBoaWdoQ2hhbm5lbDsKLQl1OCBwb3dlckRmczsKLQl1OCBhbnRlbm5hTWF4OwotCXU4IGNoYW5uZWxCVzsKLQl1OCBjaGFubmVsU2VwOwotCXU2NCB1c2VEZnM7Ci0JdTY0IHVzZVBhc3NTY2FuOwotCXU4IHJlZ0NsYXNzSWQ7Ci19OwotCi1zdHJ1Y3QgcmVnRG9tYWluIHsKLQl1MTYgcmVnRG1uRW51bTsKLQl1OCBjb25mb3JtYW5jZVRlc3RMaW1pdDsKLQl1NjQgZGZzTWFzazsKLQl1NjQgcHNjYW47Ci0JdTMyIGZsYWdzOwotCXU2NCBjaGFuMTFhW0JNTEVOXTsKLQl1NjQgY2hhbjExYV90dXJib1tCTUxFTl07Ci0JdTY0IGNoYW4xMWFfZHluX3R1cmJvW0JNTEVOXTsKLQl1NjQgY2hhbjExYltCTUxFTl07Ci0JdTY0IGNoYW4xMWdbQk1MRU5dOwotCXU2NCBjaGFuMTFnX3R1cmJvW0JNTEVOXTsKLX07Ci0KLXN0cnVjdCBjbW9kZSB7Ci0JdTMyIG1vZGU7Ci0JdTMyIGZsYWdzOwotfTsKLQotI2RlZmluZSBZRVMgdHJ1ZQotI2RlZmluZSBOTyAgZmFsc2UKLQotc3RydWN0IGphcGFuX2JhbmRjaGVjayB7Ci0JdTE2IGZyZXFiYW5kYml0OwotCXUzMiBlZXByb21mbGFndG9jaGVjazsKLX07Ci0KLXN0cnVjdCBjb21tb25fbW9kZV9wb3dlciB7Ci0JdTE2IGxjaGFuOwotCXUxNiBoY2hhbjsKLQl1OCBwd3Jsdmw7CitzdHJ1Y3QgYXRoOWtfcmVndWxhdG9yeSB7CisJY2hhciBhbHBoYTJbMl07CisJdTE2IGNvdW50cnlfY29kZTsKKwl1MTYgbWF4X3Bvd2VyX2xldmVsOworCXUzMiB0cF9zY2FsZTsKKwl1MTYgY3VycmVudF9yZDsKKwl1MTYgY3VycmVudF9yZF9leHQ7CisJaW50MTZfdCBwb3dlcl9saW1pdDsKKwlzdHJ1Y3QgcmVnX2Rtbl9wYWlyX21hcHBpbmcgKnJlZ3BhaXI7CiB9OwogCiBlbnVtIENvdW50cnlDb2RlIHsKQEAgLTQwNiw3ICsyMzMsMTUgQEAKIAlDVFJZX0JFTEdJVU0yID0gNTAwMgogfTsKIAotdm9pZCBhdGg5a19yZWdkX2dldF9jdXJyZW50X2NvdW50cnkoc3RydWN0IGF0aF9oYWwgKmFoLAotCQkJCSAgICBzdHJ1Y3QgYXRoOWtfY291bnRyeV9lbnRyeSAqY3RyeSk7Citib29sIGF0aDlrX2lzX3dvcmxkX3JlZ2Qoc3RydWN0IGF0aF9odyAqYWgpOworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmF0aDlrX3dvcmxkX3JlZ2RvbWFpbihzdHJ1Y3QgYXRoX2h3ICphaCk7Citjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqYXRoOWtfZGVmYXVsdF93b3JsZF9yZWdkb21haW4odm9pZCk7Cit2b2lkIGF0aDlrX3JlZ19hcHBseV93b3JsZF9mbGFncyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpOwordm9pZCBhdGg5a19yZWdfYXBwbHlfcmFkYXJfZmxhZ3Moc3RydWN0IHdpcGh5ICp3aXBoeSk7CitpbnQgYXRoOWtfcmVnZF9pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfcmVnZF9pc19lZXByb21fdmFsaWQoc3RydWN0IGF0aF9odyAqYWgpOwordTMyIGF0aDlrX3JlZ2RfZ2V0X2N0bChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOworaW50IGF0aDlrX3JlZ19ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsvcmVnZF9jb21tb24uaAppbmRleCA2ZGYxYjNiLi40ZDBlMjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay9yZWdkX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3JlZ2RfY29tbW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0xNTAsMTc2NiArMTUwLDMyNCBAQAogCU1LSzlfTUtLQyA9IDB4RkUsCiAJTUtLOV9NS0tBMiA9IDB4RkYsCiAKLQlBUEwxID0gMHgwMTUwLAotCUFQTDIgPSAweDAyNTAsCi0JQVBMMyA9IDB4MDM1MCwKLQlBUEw0ID0gMHgwNDUwLAotCUFQTDUgPSAweDA1NTAsCi0JQVBMNiA9IDB4MDY1MCwKLQlBUEw3ID0gMHgwNzUwLAotCUFQTDggPSAweDA4NTAsCi0JQVBMOSA9IDB4MDk1MCwKLQlBUEwxMCA9IDB4MTA1MCwKLQotCUVUU0kxID0gMHgwMTMwLAotCUVUU0kyID0gMHgwMjMwLAotCUVUU0kzID0gMHgwMzMwLAotCUVUU0k0ID0gMHgwNDMwLAotCUVUU0k1ID0gMHgwNTMwLAotCUVUU0k2ID0gMHgwNjMwLAotCUVUU0lBID0gMHgwQTMwLAotCUVUU0lCID0gMHgwQjMwLAotCUVUU0lDID0gMHgwQzMwLAotCi0JRkNDMSA9IDB4MDExMCwKLQlGQ0MyID0gMHgwMTIwLAotCUZDQzMgPSAweDAxNjAsCi0JRkNDNCA9IDB4MDE2NSwKLQlGQ0M1ID0gMHgwNTEwLAotCUZDQzYgPSAweDA2MTAsCi0JRkNDQSA9IDB4MEExMCwKLQotCUFQTEQgPSAweDBENTAsCi0KLQlNS0sxID0gMHgwMTQwLAotCU1LSzIgPSAweDAyNDAsCi0JTUtLMyA9IDB4MDM0MCwKLQlNS0s0ID0gMHgwNDQwLAotCU1LSzUgPSAweDA1NDAsCi0JTUtLNiA9IDB4MDY0MCwKLQlNS0s3ID0gMHgwNzQwLAotCU1LSzggPSAweDA4NDAsCi0JTUtLOSA9IDB4MDk0MCwKLQlNS0sxMCA9IDB4MEI0MCwKLQlNS0sxMSA9IDB4MTE0MCwKLQlNS0sxMiA9IDB4MTI0MCwKLQlNS0sxMyA9IDB4MEM0MCwKLQlNS0sxNCA9IDB4MTQ0MCwKLQlNS0sxNSA9IDB4MTU0MCwKLQlNS0tBID0gMHgwQTQwLAotCU1LS0MgPSAweDBBNTAsCi0KLQlOVUxMMSA9IDB4MDE5OCwKIAlXT1JMRCA9IDB4MDE5OSwKIAlERUJVR19SRUdfRE1OID0gMHgwMWZmLAogfTsKIAotZW51bSB7Ci0JRkNDID0gMHgxMCwKLQlNS0sgPSAweDQwLAotCUVUU0kgPSAweDMwLAorZW51bSBjdGxfZ3JvdXAgeworCUNUTF9GQ0MgPSAweDEwLAorCUNUTF9NS0sgPSAweDQwLAorCUNUTF9FVFNJID0gMHgzMCwKIH07CiAKLWVudW0gewotCU5PX1JFUSA9IDB4MDAwMDAwMDAsCi0JRElTQUxMT1dfQURIT0NfMTFBID0gMHgwMDAwMDAwMSwKLQlESVNBTExPV19BREhPQ18xMUFfVFVSQiA9IDB4MDAwMDAwMDIsCi0JTkVFRF9ORkMgPSAweDAwMDAwMDA0LAotCi0JQURIT0NfUEVSXzExRCA9IDB4MDAwMDAwMDgsCi0JQURIT0NfTk9fMTFBID0gMHgwMDAwMDAxMCwKLQotCVBVQkxJQ19TQUZFVFlfRE9NQUlOID0gMHgwMDAwMDAyMCwKLQlMSU1JVF9GUkFNRV80TVMgPSAweDAwMDAwMDQwLAotCi0JTk9fSE9TVEFQID0gMHgwMDAwMDA4MCwKLQotCVJFUV9NQVNLID0gMHgwMDAwMDBGRiwKLX07Ci0KLSNkZWZpbmUgUkVHX0RPTUFJTl8yR0haX01BU0sgICAgKFJFUV9NQVNLICYgXAotCSh+KEFESE9DX05PXzExQSB8IERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCKSkpCi0jZGVmaW5lIFJFR19ET01BSU5fNUdIWl9NQVNLICAgIFJFUV9NQVNLCi0KKy8qIFJlZ3BhaXIgdG8gQ1RMIGJhbmQgbWFwcGluZyAqLwogc3RhdGljIHN0cnVjdCByZWdfZG1uX3BhaXJfbWFwcGluZyByZWdEb21haW5QYWlyc1tdID0gewotCXtOT19FTlVNUkQsIERFQlVHX1JFR19ETU4sIERFQlVHX1JFR19ETU4sIE5PX1JFUSwgTk9fUkVRLAotCSBQU0NBTl9ERUZFUiwgMH0sCi0Je05VTEwxX1dPUkxELCBOVUxMMSwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je05VTEwxX0VUU0lCLCBOVUxMMSwgRVRTSUIsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je05VTEwxX0VUU0lDLCBOVUxMMSwgRVRTSUMsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCisJLyogcmVncGFpciwgNSBHSHogQ1RMLCAyIEdIeiBDVEwgKi8KKwl7Tk9fRU5VTVJELCBERUJVR19SRUdfRE1OLCBERUJVR19SRUdfRE1OfSwKKwl7TlVMTDFfV09STEQsIE5PX0NUTCwgQ1RMX0VUU0l9LAorCXtOVUxMMV9FVFNJQiwgTk9fQ1RMLCBDVExfRVRTSX0sCisJe05VTEwxX0VUU0lDLCBOT19DVEwsIENUTF9FVFNJfSwKIAotCXtGQ0MyX0ZDQ0EsIEZDQzIsIEZDQ0EsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzJfV09STEQsIEZDQzIsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0MyX0VUU0lDLCBGQ0MyLCBFVFNJQywgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDM19GQ0NBLCBGQ0MzLCBGQ0NBLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0MzX1dPUkxELCBGQ0MzLCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDNF9GQ0NBLCBGQ0M0LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je0ZDQzVfRkNDQSwgRkNDNSwgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RkNDNl9GQ0NBLCBGQ0M2LCBGQ0NBLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtGQ0M2X1dPUkxELCBGQ0M2LCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKKwl7RkNDMl9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDMl9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtGQ0MyX0VUU0lDLCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0ZDQzNfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0ZDQzNfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7RkNDNF9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDNV9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDNl9GQ0NBLCBDVExfRkNDLCBDVExfRkNDfSwKKwl7RkNDNl9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAogCi0Je0VUU0kxX1dPUkxELCBFVFNJMSwgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RVRTSTJfV09STEQsIEVUU0kyLCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtFVFNJM19XT1JMRCwgRVRTSTMsIFdPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je0VUU0k0X1dPUkxELCBFVFNJNCwgV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7RVRTSTVfV09STEQsIEVUU0k1LCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtFVFNJNl9XT1JMRCwgRVRTSTYsIFdPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCisJe0VUU0kxX1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtFVFNJMl9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7RVRTSTNfV09STEQsIENUTF9FVFNJLCBDVExfRVRTSX0sCisJe0VUU0k0X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtFVFNJNV9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKKwl7RVRTSTZfV09STEQsIENUTF9FVFNJLCBDVExfRVRTSX0sCiAKLQl7RVRTSTNfRVRTSUEsIEVUU0kzLCBXT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtGUkFOQ0VfUkVTLCBFVFNJMywgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCisJLyogWFhYOiBGb3IgRVRTSTNfRVRTSUEsIFdhcyBOT19DVEwgbWVhbnQgZm9yIHRoZSAyIEdIeiBiYW5kID8gKi8KKwl7RVRTSTNfRVRTSUEsIENUTF9FVFNJLCBDVExfRVRTSX0sCisJe0ZSQU5DRV9SRVMsIENUTF9FVFNJLCBDVExfRVRTSX0sCiAKLQl7RkNDMV9XT1JMRCwgRkNDMSwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0ZDQzFfRkNDQSwgRkNDMSwgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMMV9XT1JMRCwgQVBMMSwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDJfV09STEQsIEFQTDIsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEwzX1dPUkxELCBBUEwzLCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMNF9XT1JMRCwgQVBMNCwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDVfV09STEQsIEFQTDUsIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEw2X1dPUkxELCBBUEw2LCBXT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMOF9XT1JMRCwgQVBMOCwgV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDlfV09STEQsIEFQTDksIFdPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAorCXtGQ0MxX1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0ZDQzFfRkNDQSwgQ1RMX0ZDQywgQ1RMX0ZDQ30sCisJe0FQTDFfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMMl9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtBUEwzX1dPUkxELCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDRfV09STEQsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMNV9XT1JMRCwgQ1RMX0ZDQywgQ1RMX0VUU0l9LAorCXtBUEw2X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtBUEw4X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAorCXtBUEw5X1dPUkxELCBDVExfRVRTSSwgQ1RMX0VUU0l9LAogCi0Je0FQTDNfRkNDQSwgQVBMMywgRkNDQSwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7QVBMMV9FVFNJQywgQVBMMSwgRVRTSUMsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwgMH0sCi0Je0FQTDJfRVRTSUMsIEFQTDIsIEVUU0lDLCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtBUEwyX0FQTEQsIEFQTDIsIEFQTEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUix9LAorCXtBUEwzX0ZDQ0EsIENUTF9GQ0MsIENUTF9GQ0N9LAorCXtBUEwxX0VUU0lDLCBDVExfRkNDLCBDVExfRVRTSX0sCisJe0FQTDJfRVRTSUMsIENUTF9GQ0MsIENUTF9FVFNJfSwKKwl7QVBMMl9BUExELCBDVExfRkNDLCBOT19DVEx9LAogCi0Je01LSzFfTUtLQSwgTUtLMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0tBLCBDVFJZX0pBUEFOfSwKLQl7TUtLMV9NS0tCLCBNS0sxLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xfSwKLQl7TUtLMV9GQ0NBLCBNS0sxLCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSwgQ1RSWV9KQVBBTjJ9LAotCXtNS0sxX01LS0ExLCBNS0sxLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjR9LAotCXtNS0sxX01LS0EyLCBNS0sxLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjV9LAotCXtNS0sxX01LS0MsIE1LSzEsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxLCBDVFJZX0pBUEFONn0sCisJe01LSzFfTUtLQSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzFfTUtLQiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzFfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCisJe01LSzFfTUtLQTEsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxX01LS0EyLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMV9NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0syX01LS0EsIE1LSzIsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfAotCSBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLCBQU0NBTl9NS0syIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjN9LAorCXtNS0syX01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0szX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLM19NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzNfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzNfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCiAKLQl7TUtLM19NS0tBLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQSwgQ1RSWV9KQVBBTjI1fSwKLQl7TUtLM19NS0tCLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjd9LAotCXtNS0szX01LS0ExLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMjZ9LAotCXtNS0szX01LS0EyLCBNS0szLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFOOH0sCi0Je01LSzNfTUtLQywgTUtLMywgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFOOX0sCi0Je01LSzNfRkNDQSwgTUtLMywgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFOMjd9LAorCXtNS0s0X01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s0X01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s0X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNF9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzRfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzRfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCiAKLQl7TUtLNF9NS0tBLCBNS0s0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjM2fSwKLQl7TUtLNF9NS0tCLCBNS0s0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xMH0sCi0Je01LSzRfTUtLQTEsIE1LSzQsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMjh9LAotCXtNS0s0X01LS0EyLCBNS0s0LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjExfSwKLQl7TUtLNF9NS0tDLCBNS0s0LCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjEyfSwKLQl7TUtLNF9GQ0NBLCBNS0s0LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjI5fSwKKwl7TUtLNV9NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNV9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzVfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLNV9NS0tCLCBNS0s1LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xM30sCi0Je01LSzVfTUtLQTIsIE1LSzUsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFOMTR9LAotCXtNS0s1X01LS0MsIE1LSzUsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szLCBDVFJZX0pBUEFOMTV9LAorCXtNS0s2X01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s2X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLNl9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzZfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzZfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCiAKLQl7TUtLNl9NS0tCLCBNS0s2LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csIENUUllfSkFQQU4xNn0sCi0Je01LSzZfTUtLQTEsIE1LSzYsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMzB9LAotCXtNS0s2X01LS0EyLCBNS0s2LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjE3fSwKLQl7TUtLNl9NS0tDLCBNS0s2LCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSwgQ1RSWV9KQVBBTjE4fSwKLQl7TUtLNl9GQ0NBLCBNS0s2LCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgTk9fUFNDQU4sIENUUllfSkFQQU4zMX0sCisJe01LSzdfTUtLQiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzdfTUtLQTEsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s3X01LS0EyLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLN19NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLN19GQ0NBLCBDVExfTUtLLCBDVExfRkNDfSwKIAotCXtNS0s3X01LS0IsIE1LSzcsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBX0csCi0JIENUUllfSkFQQU4xOX0sCi0Je01LSzdfTUtLQTEsIE1LSzcsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFOMzJ9LAotCXtNS0s3X01LS0EyLCBNS0s3LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csCi0JIENUUllfSkFQQU4yMH0sCi0Je01LSzdfTUtLQywgTUtLNywgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFOMjF9LAotCXtNS0s3X0ZDQ0EsIE1LSzcsIEZDQ0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjMzfSwKKwl7TUtLOF9NS0tCLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLOF9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzhfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLOF9NS0tCLCBNS0s4LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMjJ9LAotCXtNS0s4X01LS0EyLCBNS0s4LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csCi0JIENUUllfSkFQQU4yM30sCi0Je01LSzhfTUtLQywgTUtLOCwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFOMjR9LAorCXtNS0s5X01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0s5X0ZDQ0EsIENUTF9NS0ssIENUTF9GQ0N9LAorCXtNS0s5X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLOV9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzlfTUtLQywgQ1RMX01LSywgQ1RMX01LS30sCiAKLQl7TUtLOV9NS0tBLCBNS0s5LCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMiB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBIHwgUFNDQU5fTUtLQV9HLAotCSBDVFJZX0pBUEFOMzR9LAotCXtNS0s5X0ZDQ0EsIE1LSzksIEZDQ0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBOT19QU0NBTiwgQ1RSWV9KQVBBTjM3fSwKLQl7TUtLOV9NS0tBMSwgTUtLOSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjM4fSwKLQl7TUtLOV9NS0tBMiwgTUtLOSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjQwfSwKLQl7TUtLOV9NS0tDLCBNS0s5LCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgTk9fUFNDQU4sIENUUllfSkFQQU4zOX0sCisJe01LSzEwX01LS0EsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMF9GQ0NBLCBDVExfTUtLLCBDVExfRkNDfSwKKwl7TUtLMTBfTUtLQTEsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMF9NS0tBMiwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzEwX01LS0MsIENUTF9NS0ssIENUTF9NS0t9LAogCi0Je01LSzEwX01LS0EsIE1LSzEwLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwKLQkgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywgUFNDQU5fTUtLMiB8IFBTQ0FOX01LSzMsIENUUllfSkFQQU4zNX0sCi0Je01LSzEwX0ZDQ0EsIE1LSzEwLCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgTk9fUFNDQU4sIENUUllfSkFQQU40MX0sCi0Je01LSzEwX01LS0ExLCBNS0sxMCwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjQyfSwKLQl7TUtLMTBfTUtLQTIsIE1LSzEwLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBMl9HLCBDVFJZX0pBUEFONDR9LAotCXtNS0sxMF9NS0tDLCBNS0sxMCwgTUtLQywKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIE5PX1BTQ0FOLCBDVFJZX0pBUEFONDN9LAorCXtNS0sxMV9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTFfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCisJe01LSzExX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTFfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMV9NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0sxMV9NS0tBLCBNS0sxMSwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzMsIENUUllfSkFQQU40NX0sCi0Je01LSzExX0ZDQ0EsIE1LSzExLCBGQ0NBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMywgQ1RSWV9KQVBBTjQ2fSwKLQl7TUtLMTFfTUtLQTEsIE1LSzExLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywgQ1RSWV9KQVBBTjQ3fSwKLQl7TUtLMTFfTUtLQTIsIE1LSzExLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgQ1RSWV9KQVBBTjQ5fSwKLQl7TUtLMTFfTUtLQywgTUtLMTEsIE1LS0MsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0szLCBDVFJZX0pBUEFONDh9LAorCXtNS0sxMl9NS0tBLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTJfRkNDQSwgQ1RMX01LSywgQ1RMX0ZDQ30sCisJe01LSzEyX01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKKwl7TUtLMTJfTUtLQTIsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxMl9NS0tDLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0sxMl9NS0tBLCBNS0sxMiwgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFONTB9LAotCXtNS0sxMl9GQ0NBLCBNS0sxMiwgRkNDQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8IExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLCBDVFJZX0pBUEFONTF9LAotCXtNS0sxMl9NS0tBMSwgTUtLMTIsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRywKLQkgQ1RSWV9KQVBBTjUyfSwKLQl7TUtLMTJfTUtLQTIsIE1LSzEyLCBNS0tBLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMgfCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EyX0csCi0JIENUUllfSkFQQU41NH0sCi0Je01LSzEyX01LS0MsIE1LSzEyLCBNS0tDLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiB8IE5FRURfTkZDIHwgTElNSVRfRlJBTUVfNE1TLCBORUVEX05GQywKLQkgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsIENUUllfSkFQQU41M30sCisJe01LSzEzX01LS0IsIENUTF9NS0ssIENUTF9NS0t9LAorCXtNS0sxNF9NS0tBMSwgQ1RMX01LSywgQ1RMX01LS30sCisJe01LSzE1X01LS0ExLCBDVExfTUtLLCBDVExfTUtLfSwKIAotCXtNS0sxM19NS0tCLCBNS0sxMywgTUtLQSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIgfCBORUVEX05GQyB8Ci0JIExJTUlUX0ZSQU1FXzRNUywgTkVFRF9ORkMsCi0JIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szIHwgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRywKLQkgQ1RSWV9KQVBBTjU3fSwKLQotCXtNS0sxNF9NS0tBMSwgTUtLMTQsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFONTh9LAotCXtNS0sxNV9NS0tBMSwgTUtLMTUsIE1LS0EsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCIHwgTkVFRF9ORkMgfCBMSU1JVF9GUkFNRV80TVMsIE5FRURfTkZDLAotCSBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLQTEgfCBQU0NBTl9NS0tBMV9HLCBDVFJZX0pBUEFONTl9LAotCi0Je1dPUjBfV09STEQsIFdPUjBfV09STEQsIFdPUjBfV09STEQsIE5PX1JFUSwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUjFfV09STEQsIFdPUjFfV09STEQsIFdPUjFfV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7V09SMl9XT1JMRCwgV09SMl9XT1JMRCwgV09SMl9XT1JMRCwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIE5PX1JFUSwgUFNDQU5fREVGRVIsIDB9LAotCXtXT1IzX1dPUkxELCBXT1IzX1dPUkxELCBXT1IzX1dPUkxELCBOT19SRVEsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1I0X1dPUkxELCBXT1I0X1dPUkxELCBXT1I0X1dPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUjVfRVRTSUMsIFdPUjVfRVRTSUMsIFdPUjVfRVRTSUMsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKLQl7V09SMDFfV09STEQsIFdPUjAxX1dPUkxELCBXT1IwMV9XT1JMRCwgTk9fUkVRLCBOT19SRVEsCi0JIFBTQ0FOX0RFRkVSLCAwfSwKLQl7V09SMDJfV09STEQsIFdPUjAyX1dPUkxELCBXT1IwMl9XT1JMRCwgTk9fUkVRLCBOT19SRVEsCi0JIFBTQ0FOX0RFRkVSLCAwfSwKLQl7RVUxX1dPUkxELCBFVTFfV09STEQsIEVVMV9XT1JMRCwgTk9fUkVRLCBOT19SRVEsIFBTQ0FOX0RFRkVSLCAwfSwKLQl7V09SOV9XT1JMRCwgV09SOV9XT1JMRCwgV09SOV9XT1JMRCwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsIE5PX1JFUSwgUFNDQU5fREVGRVIsCi0JIDB9LAotCXtXT1JBX1dPUkxELCBXT1JBX1dPUkxELCBXT1JBX1dPUkxELAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwgTk9fUkVRLCBQU0NBTl9ERUZFUiwKLQkgMH0sCi0Je1dPUkJfV09STEQsIFdPUkJfV09STEQsIFdPUkJfV09STEQsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLCBOT19SRVEsIFBTQ0FOX0RFRkVSLAotCSAwfSwKKwl7V09SMF9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1IxX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjJfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SM19XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1I0X1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjVfRVRTSUMsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SMDFfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SMDJfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7RVUxX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCisJe1dPUjlfV09STEQsIE5PX0NUTCwgTk9fQ1RMfSwKKwl7V09SQV9XT1JMRCwgTk9fQ1RMLCBOT19DVEx9LAorCXtXT1JCX1dPUkxELCBOT19DVEwsIE5PX0NUTH0sCiB9OwogCi0jZGVmaW5lCU5PX0lOVEVSU0VDVF9SRVEJMHhGRkZGRkZGRgotI2RlZmluZQlOT19VTklPTl9SRVEJCTAKLQogc3RhdGljIHN0cnVjdCBjb3VudHJ5X2NvZGVfdG9fZW51bV9yZCBhbGxDb3VudHJpZXNbXSA9IHsKLQl7Q1RSWV9ERUJVRywgTk9fRU5VTVJELCAiREIiLCAiREVCVUciLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0RFRkFVTFQsIERFRl9SRUdETU4sICJOQSIsICJOT19DT1VOVFJZX1NFVCIsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQUxCQU5JQSwgTlVMTDFfV09STEQsICJBTCIsICJBTEJBTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsIE5PLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0FMR0VSSUEsIE5VTEwxX1dPUkxELCAiRFoiLCAiQUxHRVJJQSIsIFlFUywgTk8sIFlFUywgWUVTLCBOTywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9BUkdFTlRJTkEsIEFQTDNfV09STEQsICJBUiIsICJBUkdFTlRJTkEiLCBZRVMsIE5PLCBOTywgWUVTLAotCSBOTywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfQVJNRU5JQSwgRVRTSTRfV09STEQsICJBTSIsICJBUk1FTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9BVVNUUkFMSUEsIEZDQzJfV09STEQsICJBVSIsICJBVVNUUkFMSUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0FVU1RSQUxJQTIsIEZDQzZfV09STEQsICJBVSIsICJBVVNUUkFMSUEyIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9BVVNUUklBLCBFVFNJMV9XT1JMRCwgIkFUIiwgIkFVU1RSSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQVpFUkJBSUpBTiwgRVRTSTRfV09STEQsICJBWiIsICJBWkVSQkFJSkFOIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CQUhSQUlOLCBBUEw2X1dPUkxELCAiQkgiLCAiQkFIUkFJTiIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0JFTEFSVVMsIEVUU0kxX1dPUkxELCAiQlkiLCAiQkVMQVJVUyIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CRUxHSVVNLCBFVFNJMV9XT1JMRCwgIkJFIiwgIkJFTEdJVU0iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfQkVMR0lVTTIsIEVUU0k0X1dPUkxELCAiQkwiLCAiQkVMR0lVTSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9CRUxJWkUsIEFQTDFfRVRTSUMsICJCWiIsICJCRUxJWkUiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0JPTElWSUEsIEFQTDFfRVRTSUMsICJCTyIsICJCT0xWSUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0JPU05JQV9IRVJaLCBFVFNJMV9XT1JMRCwgIkJBIiwgIkJPU05JQV9IRVJaR09XSU5BIiwgWUVTLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfQlJBWklMLCBGQ0MzX1dPUkxELCAiQlIiLCAiQlJBWklMIiwgWUVTLCBOTywgTk8sIFlFUywgTk8sCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0JSVU5FSV9EQVJVU1NBTEFNLCBBUEwxX1dPUkxELCAiQk4iLCAiQlJVTkVJIERBUlVTU0FMQU0iLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0JVTEdBUklBLCBFVFNJNl9XT1JMRCwgIkJHIiwgIkJVTEdBUklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0NBTkFEQSwgRkNDMl9GQ0NBLCAiQ0EiLCAiQ0FOQURBIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DQU5BREEyLCBGQ0M2X0ZDQ0EsICJDQSIsICJDQU5BREEyIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DSElMRSwgQVBMNl9XT1JMRCwgIkNMIiwgIkNISUxFIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DSElOQSwgQVBMMV9XT1JMRCwgIkNOIiwgIkNISU5BIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9DT0xPTUJJQSwgRkNDMV9GQ0NBLCAiQ08iLCAiQ09MT01CSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9DT1NUQV9SSUNBLCBGQ0MxX1dPUkxELCAiQ1IiLCAiQ09TVEEgUklDQSIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0NST0FUSUEsIEVUU0kzX1dPUkxELCAiSFIiLCAiQ1JPQVRJQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0NZUFJVUywgRVRTSTFfV09STEQsICJDWSIsICJDWVBSVVMiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0NaRUNILCBFVFNJM19XT1JMRCwgIkNaIiwgIkNaRUNIIFJFUFVCTElDIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0RFTk1BUkssIEVUU0kxX1dPUkxELCAiREsiLCAiREVOTUFSSyIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9ET01JTklDQU5fUkVQVUJMSUMsIEZDQzFfRkNDQSwgIkRPIiwgIkRPTUlOSUNBTiBSRVBVQkxJQyIsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfRUNVQURPUiwgRkNDMV9XT1JMRCwgIkVDIiwgIkVDVUFET1IiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0VHWVBULCBFVFNJM19XT1JMRCwgIkVHIiwgIkVHWVBUIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfRUxfU0FMVkFET1IsIEZDQzFfV09STEQsICJTViIsICJFTCBTQUxWQURPUiIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0VTVE9OSUEsIEVUU0kxX1dPUkxELCAiRUUiLCAiRVNUT05JQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9GSU5MQU5ELCBFVFNJMV9XT1JMRCwgIkZJIiwgIkZJTkxBTkQiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfRlJBTkNFLCBFVFNJMV9XT1JMRCwgIkZSIiwgIkZSQU5DRSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9HRU9SR0lBLCBFVFNJNF9XT1JMRCwgIkdFIiwgIkdFT1JHSUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0dFUk1BTlksIEVUU0kxX1dPUkxELCAiREUiLCAiR0VSTUFOWSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9HUkVFQ0UsIEVUU0kxX1dPUkxELCAiR1IiLCAiR1JFRUNFIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0dVQVRFTUFMQSwgRkNDMV9GQ0NBLCAiR1QiLCAiR1VBVEVNQUxBIiwgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9IT05EVVJBUywgTlVMTDFfV09STEQsICJITiIsICJIT05EVVJBUyIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfSE9OR19LT05HLCBGQ0MyX1dPUkxELCAiSEsiLCAiSE9ORyBLT05HIiwgWUVTLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9IVU5HQVJZLCBFVFNJMV9XT1JMRCwgIkhVIiwgIkhVTkdBUlkiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSUNFTEFORCwgRVRTSTFfV09STEQsICJJUyIsICJJQ0VMQU5EIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0lORElBLCBBUEw2X1dPUkxELCAiSU4iLCAiSU5ESUEiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9JTkRPTkVTSUEsIEFQTDFfV09STEQsICJJRCIsICJJTkRPTkVTSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9JUkFOLCBBUEwxX1dPUkxELCAiSVIiLCAiSVJBTiIsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgNzAwMH0sCi0Je0NUUllfSVJFTEFORCwgRVRTSTFfV09STEQsICJJRSIsICJJUkVMQU5EIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0lTUkFFTCwgTlVMTDFfV09STEQsICJJTCIsICJJU1JBRUwiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0lUQUxZLCBFVFNJMV9XT1JMRCwgIklUIiwgIklUQUxZIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBTUFJQ0EsIEVUU0kxX1dPUkxELCAiSk0iLCAiSkFNQUlDQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCA3MDAwfSwKKwl7Q1RSWV9ERUJVRywgTk9fRU5VTVJELCAiREIifSwKKwl7Q1RSWV9ERUZBVUxULCBGQ0MxX0ZDQ0EsICJDTyJ9LAorCXtDVFJZX0FMQkFOSUEsIE5VTEwxX1dPUkxELCAiQUwifSwKKwl7Q1RSWV9BTEdFUklBLCBOVUxMMV9XT1JMRCwgIkRaIn0sCisJe0NUUllfQVJHRU5USU5BLCBBUEwzX1dPUkxELCAiQVIifSwKKwl7Q1RSWV9BUk1FTklBLCBFVFNJNF9XT1JMRCwgIkFNIn0sCisJe0NUUllfQVVTVFJBTElBLCBGQ0MyX1dPUkxELCAiQVUifSwKKwl7Q1RSWV9BVVNUUkFMSUEyLCBGQ0M2X1dPUkxELCAiQVUifSwKKwl7Q1RSWV9BVVNUUklBLCBFVFNJMV9XT1JMRCwgIkFUIn0sCisJe0NUUllfQVpFUkJBSUpBTiwgRVRTSTRfV09STEQsICJBWiJ9LAorCXtDVFJZX0JBSFJBSU4sIEFQTDZfV09STEQsICJCSCJ9LAorCXtDVFJZX0JFTEFSVVMsIEVUU0kxX1dPUkxELCAiQlkifSwKKwl7Q1RSWV9CRUxHSVVNLCBFVFNJMV9XT1JMRCwgIkJFIn0sCisJe0NUUllfQkVMR0lVTTIsIEVUU0k0X1dPUkxELCAiQkwifSwKKwl7Q1RSWV9CRUxJWkUsIEFQTDFfRVRTSUMsICJCWiJ9LAorCXtDVFJZX0JPTElWSUEsIEFQTDFfRVRTSUMsICJCTyJ9LAorCXtDVFJZX0JPU05JQV9IRVJaLCBFVFNJMV9XT1JMRCwgIkJBIn0sCisJe0NUUllfQlJBWklMLCBGQ0MzX1dPUkxELCAiQlIifSwKKwl7Q1RSWV9CUlVORUlfREFSVVNTQUxBTSwgQVBMMV9XT1JMRCwgIkJOIn0sCisJe0NUUllfQlVMR0FSSUEsIEVUU0k2X1dPUkxELCAiQkcifSwKKwl7Q1RSWV9DQU5BREEsIEZDQzJfRkNDQSwgIkNBIn0sCisJe0NUUllfQ0FOQURBMiwgRkNDNl9GQ0NBLCAiQ0EifSwKKwl7Q1RSWV9DSElMRSwgQVBMNl9XT1JMRCwgIkNMIn0sCisJe0NUUllfQ0hJTkEsIEFQTDFfV09STEQsICJDTiJ9LAorCXtDVFJZX0NPTE9NQklBLCBGQ0MxX0ZDQ0EsICJDTyJ9LAorCXtDVFJZX0NPU1RBX1JJQ0EsIEZDQzFfV09STEQsICJDUiJ9LAorCXtDVFJZX0NST0FUSUEsIEVUU0kzX1dPUkxELCAiSFIifSwKKwl7Q1RSWV9DWVBSVVMsIEVUU0kxX1dPUkxELCAiQ1kifSwKKwl7Q1RSWV9DWkVDSCwgRVRTSTNfV09STEQsICJDWiJ9LAorCXtDVFJZX0RFTk1BUkssIEVUU0kxX1dPUkxELCAiREsifSwKKwl7Q1RSWV9ET01JTklDQU5fUkVQVUJMSUMsIEZDQzFfRkNDQSwgIkRPIn0sCisJe0NUUllfRUNVQURPUiwgRkNDMV9XT1JMRCwgIkVDIn0sCisJe0NUUllfRUdZUFQsIEVUU0kzX1dPUkxELCAiRUcifSwKKwl7Q1RSWV9FTF9TQUxWQURPUiwgRkNDMV9XT1JMRCwgIlNWIn0sCisJe0NUUllfRVNUT05JQSwgRVRTSTFfV09STEQsICJFRSJ9LAorCXtDVFJZX0ZJTkxBTkQsIEVUU0kxX1dPUkxELCAiRkkifSwKKwl7Q1RSWV9GUkFOQ0UsIEVUU0kxX1dPUkxELCAiRlIifSwKKwl7Q1RSWV9HRU9SR0lBLCBFVFNJNF9XT1JMRCwgIkdFIn0sCisJe0NUUllfR0VSTUFOWSwgRVRTSTFfV09STEQsICJERSJ9LAorCXtDVFJZX0dSRUVDRSwgRVRTSTFfV09STEQsICJHUiJ9LAorCXtDVFJZX0dVQVRFTUFMQSwgRkNDMV9GQ0NBLCAiR1QifSwKKwl7Q1RSWV9IT05EVVJBUywgTlVMTDFfV09STEQsICJITiJ9LAorCXtDVFJZX0hPTkdfS09ORywgRkNDMl9XT1JMRCwgIkhLIn0sCisJe0NUUllfSFVOR0FSWSwgRVRTSTFfV09STEQsICJIVSJ9LAorCXtDVFJZX0lDRUxBTkQsIEVUU0kxX1dPUkxELCAiSVMifSwKKwl7Q1RSWV9JTkRJQSwgQVBMNl9XT1JMRCwgIklOIn0sCisJe0NUUllfSU5ET05FU0lBLCBBUEwxX1dPUkxELCAiSUQifSwKKwl7Q1RSWV9JUkFOLCBBUEwxX1dPUkxELCAiSVIifSwKKwl7Q1RSWV9JUkVMQU5ELCBFVFNJMV9XT1JMRCwgIklFIn0sCisJe0NUUllfSVNSQUVMLCBOVUxMMV9XT1JMRCwgIklMIn0sCisJe0NUUllfSVRBTFksIEVUU0kxX1dPUkxELCAiSVQifSwKKwl7Q1RSWV9KQU1BSUNBLCBFVFNJMV9XT1JMRCwgIkpNIn0sCiAKLQl7Q1RSWV9KQVBBTiwgTUtLMV9NS0tBLCAiSlAiLCAiSkFQQU4iLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjEsIE1LSzFfTUtLQiwgIkpQIiwgIkpBUEFOMSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMiwgTUtLMV9GQ0NBLCAiSlAiLCAiSkFQQU4yIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zLCBNS0syX01LS0EsICJKUCIsICJKQVBBTjMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQsIE1LSzFfTUtLQTEsICJKUCIsICJKQVBBTjQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjUsIE1LSzFfTUtLQTIsICJKUCIsICJKQVBBTjUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjYsIE1LSzFfTUtLQywgIkpQIiwgIkpBUEFONiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAorCXtDVFJZX0pBUEFOLCBNS0sxX01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMSwgTUtLMV9NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjIsIE1LSzFfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zLCBNS0syX01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFONCwgTUtLMV9NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU41LCBNS0sxX01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjYsIE1LSzFfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU43LCBNS0szX01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOOCwgTUtLM19NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU45LCBNS0szX01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTAsIE1LSzRfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU4xMSwgTUtLNF9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU4xMiwgTUtLNF9NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjEzLCBNS0s1X01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTQsIE1LSzVfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTUsIE1LSzVfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU4xNiwgTUtLNl9NS0tCLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE3LCBNS0s2X01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjE4LCBNS0s2X01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFOMTksIE1LSzdfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU4yMCwgTUtLN19NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU4yMSwgTUtLN19NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjIyLCBNS0s4X01LS0IsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjMsIE1LSzhfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjQsIE1LSzhfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU4yNSwgTUtLM19NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI2LCBNS0szX01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjI3LCBNS0szX0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjgsIE1LSzRfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFOMjksIE1LSzRfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zMCwgTUtLNl9NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU4zMSwgTUtLNl9GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjMyLCBNS0s3X01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjMzLCBNS0s3X0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzQsIE1LSzlfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zNSwgTUtLMTBfTUtLQSwgIkpQIn0sCisJe0NUUllfSkFQQU4zNiwgTUtLNF9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjM3LCBNS0s5X0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzgsIE1LSzlfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFOMzksIE1LSzlfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU40MCwgTUtLOV9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU40MSwgTUtLMTBfRkNDQSwgIkpQIn0sCisJe0NUUllfSkFQQU40MiwgTUtLMTBfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFONDMsIE1LSzEwX01LS0MsICJKUCJ9LAorCXtDVFJZX0pBUEFONDQsIE1LSzEwX01LS0EyLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQ1LCBNS0sxMV9NS0tBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQ2LCBNS0sxMV9GQ0NBLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjQ3LCBNS0sxMV9NS0tBMSwgIkpQIn0sCisJe0NUUllfSkFQQU40OCwgTUtLMTFfTUtLQywgIkpQIn0sCisJe0NUUllfSkFQQU40OSwgTUtLMTFfTUtLQTIsICJKUCJ9LAorCXtDVFJZX0pBUEFONTAsIE1LSzEyX01LS0EsICJKUCJ9LAorCXtDVFJZX0pBUEFONTEsIE1LSzEyX0ZDQ0EsICJKUCJ9LAorCXtDVFJZX0pBUEFONTIsIE1LSzEyX01LS0ExLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjUzLCBNS0sxMl9NS0tDLCAiSlAifSwKKwl7Q1RSWV9KQVBBTjU0LCBNS0sxMl9NS0tBMiwgIkpQIn0sCisJe0NUUllfSkFQQU41NywgTUtLMTNfTUtLQiwgIkpQIn0sCisJe0NUUllfSkFQQU41OCwgTUtLMTRfTUtLQTEsICJKUCJ9LAorCXtDVFJZX0pBUEFONTksIE1LSzE1X01LS0ExLCAiSlAifSwKIAotCXtDVFJZX0pBUEFONywgTUtLM19NS0tCLCAiSlAiLCAiSkFQQU43IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU44LCBNS0szX01LS0EyLCAiSlAiLCAiSkFQQU44IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU45LCBNS0szX01LS0MsICJKUCIsICJKQVBBTjkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTAsIE1LSzRfTUtLQiwgIkpQIiwgIkpBUEFOMTAiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjExLCBNS0s0X01LS0EyLCAiSlAiLCAiSkFQQU4xMSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMTIsIE1LSzRfTUtLQywgIkpQIiwgIkpBUEFOMTIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTMsIE1LSzVfTUtLQiwgIkpQIiwgIkpBUEFOMTMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjE0LCBNS0s1X01LS0EyLCAiSlAiLCAiSkFQQU4xNCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMTUsIE1LSzVfTUtLQywgIkpQIiwgIkpBUEFOMTUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTYsIE1LSzZfTUtLQiwgIkpQIiwgIkpBUEFOMTYiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjE3LCBNS0s2X01LS0EyLCAiSlAiLCAiSkFQQU4xNyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMTgsIE1LSzZfTUtLQywgIkpQIiwgIkpBUEFOMTgiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMTksIE1LSzdfTUtLQiwgIkpQIiwgIkpBUEFOMTkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjIwLCBNS0s3X01LS0EyLCAiSlAiLCAiSkFQQU4yMCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjEsIE1LSzdfTUtLQywgIkpQIiwgIkpBUEFOMjEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMjIsIE1LSzhfTUtLQiwgIkpQIiwgIkpBUEFOMjIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjIzLCBNS0s4X01LS0EyLCAiSlAiLCAiSkFQQU4yMyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjQsIE1LSzhfTUtLQywgIkpQIiwgIkpBUEFOMjQiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pBUEFOMjUsIE1LSzNfTUtLQSwgIkpQIiwgIkpBUEFOMjUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI2LCBNS0szX01LS0ExLCAiSlAiLCAiSkFQQU4yNiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjcsIE1LSzNfRkNDQSwgIkpQIiwgIkpBUEFOMjciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjI4LCBNS0s0X01LS0ExLCAiSlAiLCAiSkFQQU4yOCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMjksIE1LSzRfRkNDQSwgIkpQIiwgIkpBUEFOMjkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjMwLCBNS0s2X01LS0ExLCAiSlAiLCAiSkFQQU4zMCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzEsIE1LSzZfRkNDQSwgIkpQIiwgIkpBUEFOMzEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjMyLCBNS0s3X01LS0ExLCAiSlAiLCAiSkFQQU4zMiIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzMsIE1LSzdfRkNDQSwgIkpQIiwgIkpBUEFOMzMiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjM0LCBNS0s5X01LS0EsICJKUCIsICJKQVBBTjM0IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zNSwgTUtLMTBfTUtLQSwgIkpQIiwgIkpBUEFOMzUiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjM2LCBNS0s0X01LS0EsICJKUCIsICJKQVBBTjM2IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zNywgTUtLOV9GQ0NBLCAiSlAiLCAiSkFQQU4zNyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFOMzgsIE1LSzlfTUtLQTEsICJKUCIsICJKQVBBTjM4IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU4zOSwgTUtLOV9NS0tDLCAiSlAiLCAiSkFQQU4zOSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDAsIE1LSzlfTUtLQTIsICJKUCIsICJKQVBBTjQwIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40MSwgTUtLMTBfRkNDQSwgIkpQIiwgIkpBUEFONDEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQyLCBNS0sxMF9NS0tBMSwgIkpQIiwgIkpBUEFONDIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQzLCBNS0sxMF9NS0tDLCAiSlAiLCAiSkFQQU40MyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDQsIE1LSzEwX01LS0EyLCAiSlAiLCAiSkFQQU40NCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDUsIE1LSzExX01LS0EsICJKUCIsICJKQVBBTjQ1IiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU40NiwgTUtLMTFfRkNDQSwgIkpQIiwgIkpBUEFONDYiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ3LCBNS0sxMV9NS0tBMSwgIkpQIiwgIkpBUEFONDciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjQ4LCBNS0sxMV9NS0tDLCAiSlAiLCAiSkFQQU40OCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONDksIE1LSzExX01LS0EyLCAiSlAiLCAiSkFQQU40OSIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONTAsIE1LSzEyX01LS0EsICJKUCIsICJKQVBBTjUwIiwgWUVTLCBOTywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfSkFQQU41MSwgTUtLMTJfRkNDQSwgIkpQIiwgIkpBUEFONTEiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjUyLCBNS0sxMl9NS0tBMSwgIkpQIiwgIkpBUEFONTIiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjUzLCBNS0sxMl9NS0tDLCAiSlAiLCAiSkFQQU41MyIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0pBUEFONTQsIE1LSzEyX01LS0EyLCAiSlAiLCAiSkFQQU41NCIsIFlFUywgTk8sIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCi0Je0NUUllfSkFQQU41NywgTUtLMTNfTUtLQiwgIkpQIiwgIkpBUEFONTciLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjU4LCBNS0sxNF9NS0tBMSwgIkpQIiwgIkpBUEFONTgiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9KQVBBTjU5LCBNS0sxNV9NS0tBMSwgIkpQIiwgIkpBUEFONTkiLCBZRVMsIE5PLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQotCXtDVFJZX0pPUkRBTiwgRVRTSTJfV09STEQsICJKTyIsICJKT1JEQU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9LQVpBS0hTVEFOLCBOVUxMMV9XT1JMRCwgIktaIiwgIktBWkFLSFNUQU4iLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0tPUkVBX05PUlRILCBBUEw5X1dPUkxELCAiS1AiLCAiTk9SVEggS09SRUEiLCBZRVMsIE5PLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9LT1JFQV9ST0MsIEFQTDlfV09STEQsICJLUiIsICJLT1JFQSBSRVBVQkxJQyIsIFlFUywgTk8sIE5PLAotCSBZRVMsIE5PLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9LT1JFQV9ST0MyLCBBUEwyX1dPUkxELCAiSzIiLCAiS09SRUEgUkVQVUJMSUMyIiwgWUVTLCBOTywgTk8sCi0JIFlFUywgTk8sIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX0tPUkVBX1JPQzMsIEFQTDlfV09STEQsICJLMyIsICJLT1JFQSBSRVBVQkxJQzMiLCBZRVMsIE5PLCBOTywKLQkgWUVTLCBOTywgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfS1VXQUlULCBOVUxMMV9XT1JMRCwgIktXIiwgIktVV0FJVCIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfTEFUVklBLCBFVFNJMV9XT1JMRCwgIkxWIiwgIkxBVFZJQSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9MRUJBTk9OLCBOVUxMMV9XT1JMRCwgIkxCIiwgIkxFQkFOT04iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX0xJRUNIVEVOU1RFSU4sIEVUU0kxX1dPUkxELCAiTEkiLCAiTElFQ0hURU5TVEVJTiIsIFlFUywgTk8sCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9MSVRIVUFOSUEsIEVUU0kxX1dPUkxELCAiTFQiLCAiTElUSFVBTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX0xVWEVNQk9VUkcsIEVUU0kxX1dPUkxELCAiTFUiLCAiTFVYRU1CT1VSRyIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NQUNBVSwgRkNDMl9XT1JMRCwgIk1PIiwgIk1BQ0FVIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NQUNFRE9OSUEsIE5VTEwxX1dPUkxELCAiTUsiLCAiTUFDRURPTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9NQUxBWVNJQSwgQVBMOF9XT1JMRCwgIk1ZIiwgIk1BTEFZU0lBIiwgWUVTLCBOTywgTk8sIFlFUywgTk8sCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX01BTFRBLCBFVFNJMV9XT1JMRCwgIk1UIiwgIk1BTFRBIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX01FWElDTywgRkNDMV9GQ0NBLCAiTVgiLCAiTUVYSUNPIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NT05BQ08sIEVUU0k0X1dPUkxELCAiTUMiLCAiTU9OQUNPIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9NT1JPQ0NPLCBOVUxMMV9XT1JMRCwgIk1BIiwgIk1PUk9DQ08iLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX05FUEFMLCBBUEwxX1dPUkxELCAiTlAiLCAiTkVQQUwiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTkVUSEVSTEFORFMsIEVUU0kxX1dPUkxELCAiTkwiLCAiTkVUSEVSTEFORFMiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTkVUSEVSTEFORFNfQU5USUxMRVMsIEVUU0kxX1dPUkxELCAiQU4iLAotCSAiTkVUSEVSTEFORFMtQU5USUxMRVMiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfTkVXX1pFQUxBTkQsIEZDQzJfRVRTSUMsICJOWiIsICJORVcgWkVBTEFORCIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX05PUldBWSwgRVRTSTFfV09STEQsICJOTyIsICJOT1JXQVkiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfT01BTiwgQVBMNl9XT1JMRCwgIk9NIiwgIk9NQU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIE5PLCA3MDAwfSwKLQl7Q1RSWV9QQUtJU1RBTiwgTlVMTDFfV09STEQsICJQSyIsICJQQUtJU1RBTiIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfUEFOQU1BLCBGQ0MxX0ZDQ0EsICJQQSIsICJQQU5BTUEiLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1BBUFVBX05FV19HVUlORUEsIEZDQzFfV09STEQsICJQRyIsICJQQVBVQSBORVcgR1VJTkVBIiwgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9QRVJVLCBBUEwxX1dPUkxELCAiUEUiLCAiUEVSVSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgTk8sIDcwMDB9LAotCXtDVFJZX1BISUxJUFBJTkVTLCBBUEwxX1dPUkxELCAiUEgiLCAiUEhJTElQUElORVMiLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1BPTEFORCwgRVRTSTFfV09STEQsICJQTCIsICJQT0xBTkQiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfUE9SVFVHQUwsIEVUU0kxX1dPUkxELCAiUFQiLCAiUE9SVFVHQUwiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfUFVFUlRPX1JJQ08sIEZDQzFfRkNDQSwgIlBSIiwgIlBVRVJUTyBSSUNPIiwgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9RQVRBUiwgTlVMTDFfV09STEQsICJRQSIsICJRQVRBUiIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfUk9NQU5JQSwgTlVMTDFfV09STEQsICJSTyIsICJST01BTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9SVVNTSUEsIE5VTEwxX1dPUkxELCAiUlUiLCAiUlVTU0lBIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9TQVVESV9BUkFCSUEsIE5VTEwxX1dPUkxELCAiU0EiLCAiU0FVREkgQVJBQklBIiwgWUVTLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9TRVJCSUFfTU9OVEVORUdSTywgRVRTSTFfV09STEQsICJDUyIsICJTRVJCSUEgJiBNT05URU5FR1JPIiwKLQkgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NJTkdBUE9SRSwgQVBMNl9XT1JMRCwgIlNHIiwgIlNJTkdBUE9SRSIsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfU0xPVkFLSUEsIEVUU0kxX1dPUkxELCAiU0siLCAiU0xPVkFLIFJFUFVCTElDIiwgWUVTLCBOTywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NMT1ZFTklBLCBFVFNJMV9XT1JMRCwgIlNJIiwgIlNMT1ZFTklBIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NPVVRIX0FGUklDQSwgRkNDM19XT1JMRCwgIlpBIiwgIlNPVVRIIEFGUklDQSIsIFlFUywgTk8sIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1NQQUlOLCBFVFNJMV9XT1JMRCwgIkVTIiwgIlNQQUlOIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1NSSV9MQU5LQSwgRkNDM19XT1JMRCwgIkxLIiwgIlNSSSBMQU5LQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1NXRURFTiwgRVRTSTFfV09STEQsICJTRSIsICJTV0VERU4iLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfU1dJVFpFUkxBTkQsIEVUU0kxX1dPUkxELCAiQ0giLCAiU1dJVFpFUkxBTkQiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBZRVMsIFlFUywgNzAwMH0sCi0Je0NUUllfU1lSSUEsIE5VTEwxX1dPUkxELCAiU1kiLCAiU1lSSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLAotCSBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1RBSVdBTiwgQVBMM19GQ0NBLCAiVFciLCAiVEFJV0FOIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgWUVTLCA3MDAwfSwKLQl7Q1RSWV9USEFJTEFORCwgTlVMTDFfV09STEQsICJUSCIsICJUSEFJTEFORCIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfVFJJTklEQURfWV9UT0JBR08sIEVUU0k0X1dPUkxELCAiVFQiLCAiVFJJTklEQUQgJiBUT0JBR08iLAotCSBZRVMsIE5PLCBZRVMsIFlFUywgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9UVU5JU0lBLCBFVFNJM19XT1JMRCwgIlROIiwgIlRVTklTSUEiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIE5PLCA3MDAwfSwKLQl7Q1RSWV9UVVJLRVksIEVUU0kzX1dPUkxELCAiVFIiLCAiVFVSS0VZIiwgWUVTLCBOTywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgNzAwMH0sCi0Je0NUUllfVUtSQUlORSwgTlVMTDFfV09STEQsICJVQSIsICJVS1JBSU5FIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9VQUUsIE5VTEwxX1dPUkxELCAiQUUiLCAiVU5JVEVEIEFSQUIgRU1JUkFURVMiLCBZRVMsIE5PLCBZRVMsCi0JIFlFUywgWUVTLCBOTywgTk8sIDcwMDB9LAotCXtDVFJZX1VOSVRFRF9LSU5HRE9NLCBFVFNJMV9XT1JMRCwgIkdCIiwgIlVOSVRFRCBLSU5HRE9NIiwgWUVTLCBOTywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1VOSVRFRF9TVEFURVMsIEZDQzNfRkNDQSwgIlVTIiwgIlVOSVRFRCBTVEFURVMiLCBZRVMsIFlFUywKLQkgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIDU4MjV9LAotCXtDVFJZX1VOSVRFRF9TVEFURVNfRkNDNDksIEZDQzRfRkNDQSwgIlBTIiwKLQkgIlVOSVRFRCBTVEFURVMgKFBVQkxJQyBTQUZFVFkpIiwgWUVTLCBZRVMsIFlFUywgWUVTLCBZRVMsIFlFUywKLQkgWUVTLCA3MDAwfSwKLQl7Q1RSWV9VUlVHVUFZLCBBUEwyX1dPUkxELCAiVVkiLCAiVVJVR1VBWSIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1VaQkVLSVNUQU4sIEZDQzNfRkNDQSwgIlVaIiwgIlVaQkVLSVNUQU4iLCBZRVMsIFlFUywgWUVTLAotCSBZRVMsIFlFUywgWUVTLCBZRVMsIDcwMDB9LAotCXtDVFJZX1ZFTkVaVUVMQSwgQVBMMl9FVFNJQywgIlZFIiwgIlZFTkVaVUVMQSIsIFlFUywgTk8sIFlFUywgWUVTLAotCSBZRVMsIFlFUywgTk8sIDcwMDB9LAotCXtDVFJZX1ZJRVRfTkFNLCBOVUxMMV9XT1JMRCwgIlZOIiwgIlZJRVQgTkFNIiwgWUVTLCBOTywgWUVTLCBZRVMsCi0JIFlFUywgTk8sIE5PLCA3MDAwfSwKLQl7Q1RSWV9ZRU1FTiwgTlVMTDFfV09STEQsICJZRSIsICJZRU1FTiIsIFlFUywgTk8sIFlFUywgWUVTLCBZRVMsCi0JIE5PLCBOTywgNzAwMH0sCi0Je0NUUllfWklNQkFCV0UsIE5VTEwxX1dPUkxELCAiWlciLCAiWklNQkFCV0UiLCBZRVMsIE5PLCBZRVMsIFlFUywKLQkgWUVTLCBOTywgTk8sIDcwMDB9CisJe0NUUllfSk9SREFOLCBFVFNJMl9XT1JMRCwgIkpPIn0sCisJe0NUUllfS0FaQUtIU1RBTiwgTlVMTDFfV09STEQsICJLWiJ9LAorCXtDVFJZX0tPUkVBX05PUlRILCBBUEw5X1dPUkxELCAiS1AifSwKKwl7Q1RSWV9LT1JFQV9ST0MsIEFQTDlfV09STEQsICJLUiJ9LAorCXtDVFJZX0tPUkVBX1JPQzIsIEFQTDJfV09STEQsICJLMiJ9LAorCXtDVFJZX0tPUkVBX1JPQzMsIEFQTDlfV09STEQsICJLMyJ9LAorCXtDVFJZX0tVV0FJVCwgTlVMTDFfV09STEQsICJLVyJ9LAorCXtDVFJZX0xBVFZJQSwgRVRTSTFfV09STEQsICJMViJ9LAorCXtDVFJZX0xFQkFOT04sIE5VTEwxX1dPUkxELCAiTEIifSwKKwl7Q1RSWV9MSUVDSFRFTlNURUlOLCBFVFNJMV9XT1JMRCwgIkxJIn0sCisJe0NUUllfTElUSFVBTklBLCBFVFNJMV9XT1JMRCwgIkxUIn0sCisJe0NUUllfTFVYRU1CT1VSRywgRVRTSTFfV09STEQsICJMVSJ9LAorCXtDVFJZX01BQ0FVLCBGQ0MyX1dPUkxELCAiTU8ifSwKKwl7Q1RSWV9NQUNFRE9OSUEsIE5VTEwxX1dPUkxELCAiTUsifSwKKwl7Q1RSWV9NQUxBWVNJQSwgQVBMOF9XT1JMRCwgIk1ZIn0sCisJe0NUUllfTUFMVEEsIEVUU0kxX1dPUkxELCAiTVQifSwKKwl7Q1RSWV9NRVhJQ08sIEZDQzFfRkNDQSwgIk1YIn0sCisJe0NUUllfTU9OQUNPLCBFVFNJNF9XT1JMRCwgIk1DIn0sCisJe0NUUllfTU9ST0NDTywgTlVMTDFfV09STEQsICJNQSJ9LAorCXtDVFJZX05FUEFMLCBBUEwxX1dPUkxELCAiTlAifSwKKwl7Q1RSWV9ORVRIRVJMQU5EUywgRVRTSTFfV09STEQsICJOTCJ9LAorCXtDVFJZX05FVEhFUkxBTkRTX0FOVElMTEVTLCBFVFNJMV9XT1JMRCwgIkFOIn0sCisJe0NUUllfTkVXX1pFQUxBTkQsIEZDQzJfRVRTSUMsICJOWiJ9LAorCXtDVFJZX05PUldBWSwgRVRTSTFfV09STEQsICJOTyJ9LAorCXtDVFJZX09NQU4sIEFQTDZfV09STEQsICJPTSJ9LAorCXtDVFJZX1BBS0lTVEFOLCBOVUxMMV9XT1JMRCwgIlBLIn0sCisJe0NUUllfUEFOQU1BLCBGQ0MxX0ZDQ0EsICJQQSJ9LAorCXtDVFJZX1BBUFVBX05FV19HVUlORUEsIEZDQzFfV09STEQsICJQRyJ9LAorCXtDVFJZX1BFUlUsIEFQTDFfV09STEQsICJQRSJ9LAorCXtDVFJZX1BISUxJUFBJTkVTLCBBUEwxX1dPUkxELCAiUEgifSwKKwl7Q1RSWV9QT0xBTkQsIEVUU0kxX1dPUkxELCAiUEwifSwKKwl7Q1RSWV9QT1JUVUdBTCwgRVRTSTFfV09STEQsICJQVCJ9LAorCXtDVFJZX1BVRVJUT19SSUNPLCBGQ0MxX0ZDQ0EsICJQUiJ9LAorCXtDVFJZX1FBVEFSLCBOVUxMMV9XT1JMRCwgIlFBIn0sCisJe0NUUllfUk9NQU5JQSwgTlVMTDFfV09STEQsICJSTyJ9LAorCXtDVFJZX1JVU1NJQSwgTlVMTDFfV09STEQsICJSVSJ9LAorCXtDVFJZX1NBVURJX0FSQUJJQSwgTlVMTDFfV09STEQsICJTQSJ9LAorCXtDVFJZX1NFUkJJQV9NT05URU5FR1JPLCBFVFNJMV9XT1JMRCwgIkNTIn0sCisJe0NUUllfU0lOR0FQT1JFLCBBUEw2X1dPUkxELCAiU0cifSwKKwl7Q1RSWV9TTE9WQUtJQSwgRVRTSTFfV09STEQsICJTSyJ9LAorCXtDVFJZX1NMT1ZFTklBLCBFVFNJMV9XT1JMRCwgIlNJIn0sCisJe0NUUllfU09VVEhfQUZSSUNBLCBGQ0MzX1dPUkxELCAiWkEifSwKKwl7Q1RSWV9TUEFJTiwgRVRTSTFfV09STEQsICJFUyJ9LAorCXtDVFJZX1NSSV9MQU5LQSwgRkNDM19XT1JMRCwgIkxLIn0sCisJe0NUUllfU1dFREVOLCBFVFNJMV9XT1JMRCwgIlNFIn0sCisJe0NUUllfU1dJVFpFUkxBTkQsIEVUU0kxX1dPUkxELCAiQ0gifSwKKwl7Q1RSWV9TWVJJQSwgTlVMTDFfV09STEQsICJTWSJ9LAorCXtDVFJZX1RBSVdBTiwgQVBMM19GQ0NBLCAiVFcifSwKKwl7Q1RSWV9USEFJTEFORCwgTlVMTDFfV09STEQsICJUSCJ9LAorCXtDVFJZX1RSSU5JREFEX1lfVE9CQUdPLCBFVFNJNF9XT1JMRCwgIlRUIn0sCisJe0NUUllfVFVOSVNJQSwgRVRTSTNfV09STEQsICJUTiJ9LAorCXtDVFJZX1RVUktFWSwgRVRTSTNfV09STEQsICJUUiJ9LAorCXtDVFJZX1VLUkFJTkUsIE5VTEwxX1dPUkxELCAiVUEifSwKKwl7Q1RSWV9VQUUsIE5VTEwxX1dPUkxELCAiQUUifSwKKwl7Q1RSWV9VTklURURfS0lOR0RPTSwgRVRTSTFfV09STEQsICJHQiJ9LAorCXtDVFJZX1VOSVRFRF9TVEFURVMsIEZDQzNfRkNDQSwgIlVTIn0sCisJLyogVGhpcyAiUFMiIGlzIGZvciBVUyBwdWJsaWMgc2FmZXR5IGFjdHVhbGx5Li4uIHRvIHN1cHBvcnQgdGhpcyB3ZQorCSAqIHdvdWxkIG5lZWQgdG8gYXNzaWduIG5ldyBzcGVjaWFsIGFscGhhMiB0byBDUkRBIGRiIGFzIHdpdGggdGhlIHdvcmxkCisJICogcmVnZG9tYWluIGFuZCB1c2UgYW5vdGhlciBhbHBoYTIgKi8KKwl7Q1RSWV9VTklURURfU1RBVEVTX0ZDQzQ5LCBGQ0M0X0ZDQ0EsICJQUyJ9LAorCXtDVFJZX1VSVUdVQVksIEFQTDJfV09STEQsICJVWSJ9LAorCXtDVFJZX1VaQkVLSVNUQU4sIEZDQzNfRkNDQSwgIlVaIn0sCisJe0NUUllfVkVORVpVRUxBLCBBUEwyX0VUU0lDLCAiVkUifSwKKwl7Q1RSWV9WSUVUX05BTSwgTlVMTDFfV09STEQsICJWTiJ9LAorCXtDVFJZX1lFTUVOLCBOVUxMMV9XT1JMRCwgIllFIn0sCisJe0NUUllfWklNQkFCV0UsIE5VTEwxX1dPUkxELCAiWlcifSwKIH07CiAKLWVudW0gewotCU5PX0RGUyA9IDB4MDAwMDAwMDAwMDAwMDAwMFVMTCwKLQlERlNfRkNDMyA9IDB4MDAwMDAwMDAwMDAwMDAwMVVMTCwKLQlERlNfRVRTSSA9IDB4MDAwMDAwMDAwMDAwMDAwMlVMTCwKLQlERlNfTUtLNCA9IDB4MDAwMDAwMDAwMDAwMDAwNFVMTCwKLX07Ci0KLWVudW0gewotCUYxXzQ5MTVfNDkyNSwKLQlGMV80OTM1XzQ5NDUsCi0JRjFfNDkyMF80OTgwLAotCUYxXzQ5NDJfNDk4NywKLQlGMV80OTQ1XzQ5ODUsCi0JRjFfNDk1MF80OTgwLAotCUYxXzUwMzVfNTA0MCwKLQlGMV81MDQwXzUwODAsCi0JRjFfNTA1NV81MDU1LAotCi0JRjFfNTEyMF81MjQwLAotCi0JRjFfNTE3MF81MjMwLAotCUYyXzUxNzBfNTIzMCwKLQotCUYxXzUxODBfNTI0MCwKLQlGMl81MTgwXzUyNDAsCi0JRjNfNTE4MF81MjQwLAotCUY0XzUxODBfNTI0MCwKLQlGNV81MTgwXzUyNDAsCi0JRjZfNTE4MF81MjQwLAotCUY3XzUxODBfNTI0MCwKLQlGOF81MTgwXzUyNDAsCi0KLQlGMV81MTgwXzUzMjAsCi0KLQlGMV81MjQwXzUyODAsCi0KLQlGMV81MjYwXzUyODAsCi0KLQlGMV81MjYwXzUzMjAsCi0JRjJfNTI2MF81MzIwLAotCUYzXzUyNjBfNTMyMCwKLQlGNF81MjYwXzUzMjAsCi0JRjVfNTI2MF81MzIwLAotCUY2XzUyNjBfNTMyMCwKLQotCUYxXzUyNjBfNTcwMCwKLQotCUYxXzUyODBfNTMyMCwKLQotCUYxXzU1MDBfNTU4MCwKLQotCUYxXzU1MDBfNTYyMCwKLQotCUYxXzU1MDBfNTcwMCwKLQlGMl81NTAwXzU3MDAsCi0JRjNfNTUwMF81NzAwLAotCUY0XzU1MDBfNTcwMCwKLQlGNV81NTAwXzU3MDAsCi0KLQlGMV81NjYwXzU3MDAsCi0KLQlGMV81NzQ1XzU4MDUsCi0JRjJfNTc0NV81ODA1LAotCUYzXzU3NDVfNTgwNSwKLQotCUYxXzU3NDVfNTgyNSwKLQlGMl81NzQ1XzU4MjUsCi0JRjNfNTc0NV81ODI1LAotCUY0XzU3NDVfNTgyNSwKLQlGNV81NzQ1XzU4MjUsCi0JRjZfNTc0NV81ODI1LAotCi0JVzFfNDkyMF80OTgwLAotCVcxXzUwNDBfNTA4MCwKLQlXMV81MTcwXzUyMzAsCi0JVzFfNTE4MF81MjQwLAotCVcxXzUyNjBfNTMyMCwKLQlXMV81NzQ1XzU4MjUsCi0JVzFfNTUwMF81NzAwLAotCUFfREVNT19BTExfQ0hBTk5FTFMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgcmVnRG1uNUdoekZyZXFbXSA9IHsKLQl7NDkxNSwgNDkyNSwgMjMsIDAsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX01LSzIsIDE2fSwKLQl7NDkzNSwgNDk0NSwgMjMsIDAsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX01LSzIsIDE2fSwKLQl7NDkyMCwgNDk4MCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9NS0syLCA3fSwKLQl7NDk0MiwgNDk4NywgMjcsIDYsIDUsIDUsIE5PX0RGUywgUFNDQU5fRkNDLCAwfSwKLQl7NDk0NSwgNDk4NSwgMzAsIDYsIDEwLCA1LCBOT19ERlMsIFBTQ0FOX0ZDQywgMH0sCi0JezQ5NTAsIDQ5ODAsIDMzLCA2LCAyMCwgNSwgTk9fREZTLCBQU0NBTl9GQ0MsIDB9LAotCXs1MDM1LCA1MDQwLCAyMywgMCwgMTAsIDUsIE5PX0RGUywgUFNDQU5fTUtLMiwgMTJ9LAotCXs1MDQwLCA1MDgwLCAyMywgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX01LSzIsIDJ9LAotCXs1MDU1LCA1MDU1LCAyMywgMCwgMTAsIDUsIE5PX0RGUywgUFNDQU5fTUtLMiwgMTJ9LAotCi0JezUxMjAsIDUyNDAsIDUsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7NTE3MCwgNTIzMCwgMjMsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMiwgMX0sCi0JezUxNzAsIDUyMzAsIDIwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzIsIDF9LAotCi0JezUxODAsIDUyNDAsIDE1LCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0JezUxODAsIDUyNDAsIDE3LCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDF9LAotCXs1MTgwLCA1MjQwLCAxOCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1MTgwLCA1MjQwLCAyMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1MTgwLCA1MjQwLCAyMywgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDB9LAotCXs1MTgwLCA1MjQwLCAyMywgNiwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0ZDQywgMH0sCi0JezUxODAsIDUyNDAsIDIwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsIDB9LAotCXs1MTgwLCA1MjQwLCAyMywgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXs1MTgwLCA1MzIwLCAyMCwgNiwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX0VUU0ksIDB9LAotCi0JezUyNDAsIDUyODAsIDIzLCAwLCAyMCwgMjAsIERGU19GQ0MzLCBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1MjYwLCA1MjgwLCAyMywgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1MjYwLCA1MzIwLCAxOCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1MjYwLCA1MzIwLCAyMCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJIHwgREZTX01LSzQsCi0JIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0kgfCBQU0NBTl9NS0szLCAwfSwKLQotCi0JezUyNjAsIDUzMjAsIDIwLCA2LCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksCi0JIFBTQ0FOX0ZDQyB8IFBTQ0FOX0VUU0ksIDJ9LAotCXs1MjYwLCA1MzIwLCAyMywgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDJ9LAotCXs1MjYwLCA1MzIwLCAyMywgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDB9LAotCXs1MjYwLCA1MzIwLCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXs1MjYwLCA1NzAwLCA1LCA2LCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0ksIE5PX1BTQ0FOLCAwfSwKLQotCXs1MjgwLCA1MzIwLCAxNywgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDB9LAotCi0JezU1MDAsIDU1ODAsIDIzLCA2LCAyMCwgMjAsIERGU19GQ0MzLCBQU0NBTl9GQ0MsIDB9LAotCi0JezU1MDAsIDU2MjAsIDMwLCA2LCAyMCwgMjAsIERGU19FVFNJLCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1NTAwLCA1NzAwLCAyMCwgNiwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9GQ0MsIDR9LAotCXs1NTAwLCA1NzAwLCAyNywgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLAotCSBQU0NBTl9GQ0MgfCBQU0NBTl9FVFNJLCAwfSwKLQl7NTUwMCwgNTcwMCwgMzAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwKLQkgUFNDQU5fRkNDIHwgUFNDQU5fRVRTSSwgMH0sCi0JezU1MDAsIDU3MDAsIDIzLCAwLCAyMCwgMjAsIERGU19GQ0MzIHwgREZTX0VUU0kgfCBERlNfTUtLNCwKLQkgUFNDQU5fTUtLMyB8IFBTQ0FOX0ZDQywgMH0sCi0JezU1MDAsIDU3MDAsIDMwLCA2LCAyMCwgMjAsIERGU19FVFNJLCBQU0NBTl9FVFNJLCAwfSwKLQotCXs1NjYwLCA1NzAwLCAyMywgNiwgMjAsIDIwLCBERlNfRkNDMywgUFNDQU5fRkNDLCAwfSwKLQotCXs1NzQ1LCA1ODA1LCAyMywgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7NTc0NSwgNTgwNSwgMzAsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MDUsIDMwLCA2LCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fRVRTSSwgMH0sCi0JezU3NDUsIDU4MjUsIDUsIDYsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MjUsIDE3LCAwLCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXs1NzQ1LCA1ODI1LCAyMCwgMCwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7NTc0NSwgNTgyNSwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezU3NDUsIDU4MjUsIDMwLCA2LCAyMCwgMjAsIE5PX0RGUywgTk9fUFNDQU4sIDN9LAotCXs1NzQ1LCA1ODI1LCAzMCwgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCi0JezQ5MjAsIDQ5ODAsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fV1dSLCAwfSwKLQl7NTA0MCwgNTA4MCwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9XV1IsIDB9LAotCXs1MTcwLCA1MjMwLCAzMCwgMCwgMjAsIDIwLCBOT19ERlMsIFBTQ0FOX1dXUiwgMH0sCi0JezUxODAsIDUyNDAsIDMwLCAwLCAyMCwgMjAsIE5PX0RGUywgUFNDQU5fV1dSLCAwfSwKLQl7NTI2MCwgNTMyMCwgMzAsIDAsIDIwLCAyMCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCAwfSwKLQl7NTc0NSwgNTgyNSwgMzAsIDAsIDIwLCAyMCwgTk9fREZTLCBQU0NBTl9XV1IsIDB9LAotCXs1NTAwLCA1NzAwLCAzMCwgMCwgMjAsIDIwLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIDB9LAotCXs0OTIwLCA2MTAwLCAzMCwgNiwgMjAsIDIwLCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLX07Ci0KLWVudW0gewotCVQxXzUxMzBfNTY1MCwKLQlUMV81MTUwXzU2NzAsCi0KLQlUMV81MjAwXzUyMDAsCi0JVDJfNTIwMF81MjAwLAotCVQzXzUyMDBfNTIwMCwKLQlUNF81MjAwXzUyMDAsCi0JVDVfNTIwMF81MjAwLAotCVQ2XzUyMDBfNTIwMCwKLQlUN181MjAwXzUyMDAsCi0JVDhfNTIwMF81MjAwLAotCi0JVDFfNTIwMF81MjgwLAotCVQyXzUyMDBfNTI4MCwKLQlUM181MjAwXzUyODAsCi0JVDRfNTIwMF81MjgwLAotCVQ1XzUyMDBfNTI4MCwKLQlUNl81MjAwXzUyODAsCi0KLQlUMV81MjAwXzUyNDAsCi0JVDFfNTIxMF81MjEwLAotCVQyXzUyMTBfNTIxMCwKLQlUM181MjEwXzUyMTAsCi0JVDRfNTIxMF81MjEwLAotCVQ1XzUyMTBfNTIxMCwKLQlUNl81MjEwXzUyMTAsCi0JVDdfNTIxMF81MjEwLAotCVQ4XzUyMTBfNTIxMCwKLQlUOV81MjEwXzUyMTAsCi0JVDEwXzUyMTBfNTIxMCwKLQlUMV81MjQwXzUyNDAsCi0KLQlUMV81MjEwXzUyNTAsCi0JVDFfNTIxMF81MjkwLAotCVQyXzUyMTBfNTI5MCwKLQlUM181MjEwXzUyOTAsCi0KLQlUMV81MjgwXzUyODAsCi0JVDJfNTI4MF81MjgwLAotCVQxXzUyOTBfNTI5MCwKLQlUMl81MjkwXzUyOTAsCi0JVDNfNTI5MF81MjkwLAotCVQxXzUyNTBfNTI5MCwKLQlUMl81MjUwXzUyOTAsCi0JVDNfNTI1MF81MjkwLAotCVQ0XzUyNTBfNTI5MCwKLQotCVQxXzU1NDBfNTY2MCwKLQlUMl81NTQwXzU2NjAsCi0JVDNfNTU0MF81NjYwLAotCVQxXzU3NjBfNTgwMCwKLQlUMl81NzYwXzU4MDAsCi0JVDNfNTc2MF81ODAwLAotCVQ0XzU3NjBfNTgwMCwKLQlUNV81NzYwXzU4MDAsCi0JVDZfNTc2MF81ODAwLAotCVQ3XzU3NjBfNTgwMCwKLQotCVQxXzU3NjVfNTgwNSwKLQlUMl81NzY1XzU4MDUsCi0JVDNfNTc2NV81ODA1LAotCVQ0XzU3NjVfNTgwNSwKLQlUNV81NzY1XzU4MDUsCi0JVDZfNTc2NV81ODA1LAotCVQ3XzU3NjVfNTgwNSwKLQlUOF81NzY1XzU4MDUsCi0JVDlfNTc2NV81ODA1LAotCi0JV1QxXzUyMTBfNTI1MCwKLQlXVDFfNTI5MF81MjkwLAotCVdUMV81NTQwXzU2NjAsCi0JV1QxXzU3NjBfNTgwMCwKLX07Ci0KLWVudW0gewotCUYxXzIzMTJfMjM3MiwKLQlGMl8yMzEyXzIzNzIsCi0KLQlGMV8yNDEyXzI0NzIsCi0JRjJfMjQxMl8yNDcyLAotCUYzXzI0MTJfMjQ3MiwKLQotCUYxXzI0MTJfMjQ2MiwKLQlGMl8yNDEyXzI0NjIsCi0KLQlGMV8yNDMyXzI0NDIsCi0KLQlGMV8yNDU3XzI0NzIsCi0KLQlGMV8yNDY3XzI0NzIsCi0KLQlGMV8yNDg0XzI0ODQsCi0JRjJfMjQ4NF8yNDg0LAotCi0JRjFfMjUxMl8yNzMyLAotCi0JVzFfMjMxMl8yMzcyLAotCVcxXzI0MTJfMjQxMiwKLQlXMV8yNDE3XzI0MzIsCi0JVzFfMjQzN18yNDQyLAotCVcxXzI0NDdfMjQ1NywKLQlXMV8yNDYyXzI0NjIsCi0JVzFfMjQ2N18yNDY3LAotCVcyXzI0NjdfMjQ2NywKLQlXMV8yNDcyXzI0NzIsCi0JVzJfMjQ3Ml8yNDcyLAotCVcxXzI0ODRfMjQ4NCwKLQlXMl8yNDg0XzI0ODQsCi19OwotCi1zdGF0aWMgc3RydWN0IFJlZ0RtbkZyZXFCYW5kIHJlZ0RtbjJHaHpGcmVxW10gPSB7Ci0JezIzMTIsIDIzNzIsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDEyLCAyNDcyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0JezI0MTIsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBLCAwfSwKLQl7MjQxMiwgMjQ3MiwgMzAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDEyLCAyNDYyLCAyNywgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyNDEyLCAyNDYyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQSwgMH0sCi0KLQl7MjQzMiwgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDU3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezI0NjcsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBMiB8IFBTQ0FOX01LS0EsIDB9LAotCi0JezI0ODQsIDI0ODQsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ4NCwgMjQ4NCwgMjAsIDAsIDIwLCA1LCBOT19ERlMsCi0JIFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0EyLCAwfSwKLQotCXsyNTEyLCAyNzMyLCA1LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQxMiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxNywgMjQzMiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQzNywgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ0NywgMjQ1NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ2MiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQ2NywgMjQ2NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX1dXUiB8IElTX0VDTV9DSEFOLCAwfSwKLQl7MjQ2NywgMjQ2NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDcyLCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fV1dSIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDcyLCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4gfCBJU19FQ01fQ0hBTiwgMH0sCi0JezI0ODQsIDI0ODQsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9XV1IgfCBJU19FQ01fQ0hBTiwgMH0sCi0JezI0ODQsIDI0ODQsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiB8IElTX0VDTV9DSEFOLCAwfSwKLX07Ci0KLWVudW0gewotCUcxXzIzMTJfMjM3MiwKLQlHMl8yMzEyXzIzNzIsCi0KLQlHMV8yNDEyXzI0NzIsCi0JRzJfMjQxMl8yNDcyLAotCUczXzI0MTJfMjQ3MiwKLQotCUcxXzI0MTJfMjQ2MiwKLQlHMl8yNDEyXzI0NjIsCi0KLQlHMV8yNDMyXzI0NDIsCi0KLQlHMV8yNDU3XzI0NzIsCi0KLQlHMV8yNTEyXzI3MzIsCi0KLQlHMV8yNDY3XzI0NzIsCi0KLQlXRzFfMjMxMl8yMzcyLAotCVdHMV8yNDEyXzI0NjIsCi0JV0cxXzI0NjdfMjQ3MiwKLQlXRzJfMjQ2N18yNDcyLAotCUdfREVNT19BTExfQ0hBTk5FTFMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgUmVnRG1uRnJlcUJhbmQgcmVnRG1uMkdoejExZ0ZyZXFbXSA9IHsKLQl7MjMxMiwgMjM3MiwgNSwgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyMzEyLCAyMzcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezI0MTIsIDI0NzIsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0FfRywgMH0sCi0JezI0MTIsIDI0NzIsIDMwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi0KLQl7MjQxMiwgMjQ2MiwgMjcsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQl7MjQxMiwgMjQ2MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0FfRywgMH0sCi0KLQl7MjQzMiwgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDU3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCi0JezI1MTIsIDI3MzIsIDUsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwfSwKLQotCXsyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBLCAwfSwKLQotCXsyMzEyLCAyMzcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyNDEyLCAyNDYyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDB9LAotCXsyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fV1dSIHwgSVNfRUNNX0NIQU4sIDB9LAotCXsyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4gfCBJU19FQ01fQ0hBTiwgMH0sCi0JezIzMTIsIDI3MzIsIDI3LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMH0sCi19OwotCi1lbnVtIHsKLQlUMV8yMzEyXzIzNzIsCi0JVDFfMjQzN18yNDM3LAotCVQyXzI0MzdfMjQzNywKLQlUM18yNDM3XzI0MzcsCi0JVDFfMjUxMl8yNzMyCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ0RvbWFpbiByZWdEb21haW5zW10gPSB7Ci0KLQl7REVCVUdfUkVHX0RNTiwgRkNDLCBERlNfRkNDMywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oQV9ERU1PX0FMTF9DSEFOTkVMUywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTEzMF81NjUwLCBUMV81MTUwXzU2NzAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTIwMF81MjQwLCBUMV81MjgwXzUyODAsIFQxXzU1NDBfNTY2MCwgVDFfNTc2NV81ODA1LCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShGMV8yMzEyXzIzNzIsIEYxXzI0MTJfMjQ3MiwgRjFfMjQ4NF8yNDg0LCBGMV8yNTEyXzI3MzIsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEdfREVNT19BTExfQ0hBTk5FTFMsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzIzMTJfMjM3MiwgVDFfMjQzN18yNDM3LCBUMV8yNTEyXzI3MzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtBUEwxLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjRfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMMiwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEYxXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDMsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGMV81MjgwXzUzMjAsIEYyXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjkwXzUyOTAsIFQxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDQsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGNF81MTgwXzUyNDAsIEYzXzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjEwXzUyMTAsIFQzXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjAwXzUyMDAsIFQzXzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEw1LCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjJfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNF81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ0XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMNiwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0ZDQ19UIHwgUFNDQU5fRkNDLCBOT19SRVEsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCBGM181NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81MjEwXzUyMTAsIFQxXzUyNTBfNTI5MCwgVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIwMF81MjgwLCBUNV81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7QVBMNywgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksIE5PX1JFUSwKLQkgQk0oRjFfNTI4MF81MzIwLCBGNV81NTAwXzU3MDAsIEYzXzU3NDVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyOTBfNTI5MCwgVDVfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxXzU1NDBfNTY2MCwgVDZfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0FQTDgsIEVUU0ksIE5PX0RGUywgTk9fUFNDQU4sCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGNl81MjYwXzUzMjAsIEY0XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMl81MjkwXzUyOTAsIFQyXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81MjgwXzUyODAsIFQxXzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEw5LCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxODBfNTMyMCwgRjFfNTUwMF81NjIwLCBGM181NzQ1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjkwXzUyOTAsIFQ1XzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMV81NTQwXzU2NjAsIFQ2XzU3NjVfNTgwNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtBUEwxMCwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTgwXzUzMjAsIEY1XzU1MDBfNTcwMCwgRjNfNTc0NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTI5MF81MjkwLCBUNV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTU0MF81NjYwLCBUNl81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTEsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEYyXzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfNTIwMF81MjgwLCBUMl81NTQwXzU2NjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTIsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjNfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RVRTSTMsIEVUU0ksIERGU19FVFNJLCBQU0NBTl9FVFNJLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDFfNTIxMF81MjkwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl81MjAwXzUyODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0VUU0k0LCBFVFNJLCBERlNfRVRTSSwgUFNDQU5fRVRTSSwKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYzXzUxODBfNTI0MCwgRjFfNTI2MF81MzIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQyXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtFVFNJNSwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV81MTgwXzUyNDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ0XzUyMTBfNTIxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfNTIwMF81MjAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtFVFNJNiwgRVRTSSwgREZTX0VUU0ksIFBTQ0FOX0VUU0ksCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGNV81MTgwXzUyNDAsIEYxXzUyNjBfNTI4MCwgRjNfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIxMF81MjUwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNF81MjAwXzUyODAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzEsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTShGMl81MTgwXzUyNDAsIEY0XzUyNjBfNTMyMCwgRjVfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDZfNTIxMF81MjEwLCBUMl81MjUwXzUyOTAsIFQ2XzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI0MCwgVDJfNTI4MF81MjgwLCBUN181NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtGQ0MyLCBGQ0MsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk0oRjZfNTE4MF81MjQwLCBGNV81MjYwXzUzMjAsIEY2XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ3XzUyMTBfNTIxMCwgVDNfNTI1MF81MjkwLCBUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUN181MjAwXzUyMDAsIFQxXzUyNDBfNTI0MCwgVDJfNTI4MF81MjgwLCBUMV81NzY1XzU4MDUsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzMsIEZDQywgREZTX0ZDQzMsIFBTQ0FOX0ZDQyB8IFBTQ0FOX0ZDQ19ULCBOT19SRVEsCi0JIEJNKEYyXzUxODBfNTI0MCwgRjNfNTI2MF81MzIwLCBGMV81NTAwXzU3MDAsIEY1XzU3NDVfNTgyNSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDZfNTIxMF81MjEwLCBUMl81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oVDRfNTIwMF81MjAwLCBUOF81NzY1XzU4MDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RkNDNCwgRkNDLCBERlNfRkNDMywgUFNDQU5fRkNDIHwgUFNDQU5fRkNDX1QsIE5PX1JFUSwKLQkgQk0oRjFfNDk0Ml80OTg3LCBGMV80OTQ1XzQ5ODUsIEYxXzQ5NTBfNDk4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ4XzUyMTBfNTIxMCwgVDRfNTI1MF81MjkwLCBUN181NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyNDAsIFQxXzUyODBfNTI4MCwgVDlfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQl7RkNDNSwgRkNDLCBOT19ERlMsIE5PX1BTQ0FOLCBOT19SRVEsCi0JIEJNKEYyXzUxODBfNTI0MCwgRjZfNTc0NV81ODI1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQ2XzUyMTBfNTIxMCwgVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQ4XzUyMDBfNTIwMCwgVDdfNTc2NV81ODA1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je0ZDQzYsIEZDQywgREZTX0ZDQzMsIFBTQ0FOX0ZDQywgTk9fUkVRLAotCSBCTShGOF81MTgwXzUyNDAsIEY1XzUyNjBfNTMyMCwgRjFfNTUwMF81NTgwLCBGMV81NjYwXzU3MDAsCi0JICAgIEY2XzU3NDVfNTgyNSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUN181MjEwXzUyMTAsIFQzXzUyNTBfNTI5MCwgVDJfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDdfNTIwMF81MjAwLCBUMV81MjQwXzUyNDAsIFQyXzUyODBfNTI4MCwgVDFfNTc2NV81ODA1LCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCXtNS0sxLCBNS0ssIE5PX0RGUywgUFNDQU5fTUtLMSwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDdfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUNV81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0Je01LSzIsIE1LSywgTk9fREZTLCBQU0NBTl9NS0syLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDU1XzUwNTUsIEYxXzUwNDBfNTA4MCwgRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsCi0JICAgIEYyXzUyNjBfNTMyMCwgRjRfNTUwMF81NzAwLCAtMSwgLTEpLAotCSBCTShUN181MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ1XzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0szLCBNS0ssIE5PX0RGUywgUFNDQU5fTUtLMywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDlfNTIxMF81MjEwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMV81MjAwXzUyMDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLNCwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQxMF81MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ2XzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0s1LCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0szLCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjRfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDVfNTIwMF81MjgwLCBUM181NTQwXzU2NjAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0s2LCBNS0ssIE5PX0RGUywgUFNDQU5fTUtLMSwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYyXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNKFQzXzUyMTBfNTIxMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDZfNTIwMF81MjAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzcsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQzXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDVfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzgsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNTE3MF81MjMwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgRjRfNTUwMF81NzAwLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQ1XzUyMDBfNTI4MCwgVDNfNTU0MF81NjYwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLOSwgTUtLLCBOT19ERlMsIFBTQ0FOX01LSzIgfCBQU0NBTl9NS0szLAotCSBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk0oRjFfNDkxNV80OTI1LCBGMV80OTM1XzQ5NDUsIEYxXzQ5MjBfNDk4MCwgRjFfNTAzNV81MDQwLAotCSAgICBGMV81MDU1XzUwNTUsIEYxXzUwNDBfNTA4MCwgRjRfNTE4MF81MjQwLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUOV81MjEwXzUyMTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTIwMCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxMCwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMiB8IFBTQ0FOX01LSzMsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNTVfNTA1NSwgRjFfNTA0MF81MDgwLCBGNF81MTgwXzUyNDAsIEYyXzUyNjBfNTMyMCwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxMSwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzQ5MTVfNDkyNSwgRjFfNDkzNV80OTQ1LCBGMV80OTIwXzQ5ODAsIEYxXzUwMzVfNTA0MCwKLQkgICAgRjFfNTA1NV81MDU1LCBGMV81MDQwXzUwODAsIEY0XzUxODBfNTI0MCwgRjJfNTI2MF81MzIwLAotCSAgICBGNF81NTAwXzU3MDAsIC0xLCAtMSwgLTEpLAotCSBCTShUM181MjEwXzUyOTAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQxXzUyMDBfNTI4MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxMiwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMSB8IFBTQ0FOX01LSzMsCi0JIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNTVfNTA1NSwgRjFfNTA0MF81MDgwLCBGMV81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwKLQkgICAgRjJfNTI2MF81MzIwLCBGNF81NTAwXzU3MDAsIC0xLCAtMSksCi0JIEJNKFQzXzUyMTBfNTI5MCwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDFfNTIwMF81MjgwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfSwKLQotCi0Je01LSzEzLCBNS0ssIERGU19NS0s0LCBQU0NBTl9NS0sxIHwgUFNDQU5fTUtLMywKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzUxNzBfNTIzMCwgRjdfNTE4MF81MjQwLCBGMl81MjYwXzUzMjAsIEY0XzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk99LAotCi0KLQl7TUtLMTQsIE1LSywgREZTX01LSzQsIFBTQ0FOX01LSzEsIERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTShGMV80OTE1XzQ5MjUsIEYxXzQ5MzVfNDk0NSwgRjFfNDkyMF80OTgwLCBGMV81MDM1XzUwNDAsCi0JICAgIEYxXzUwNDBfNTA4MCwgRjFfNTA1NV81MDU1LCBGMV81MTcwXzUyMzAsIEY0XzUxODBfNTI0MCwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtNS0sxNSwgTUtLLCBERlNfTUtLNCwgUFNDQU5fTUtLMSwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNKEYxXzQ5MTVfNDkyNSwgRjFfNDkzNV80OTQ1LCBGMV80OTIwXzQ5ODAsIEYxXzUwMzVfNTA0MCwKLQkgICAgRjFfNTA0MF81MDgwLCBGMV81MDU1XzUwNTUsIEYxXzUxNzBfNTIzMCwgRjRfNTE4MF81MjQwLAotCSAgICBGMl81MjYwXzUzMjAsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVST30sCi0KLQotCXtBUExELCBOT19DVEwsIE5PX0RGUywgTk9fUFNDQU4sIE5PX1JFUSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjJfMjMxMl8yMzcyLCBGMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk0oRzJfMjMxMl8yMzcyLCBHMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xKSwKLQkgQk1aRVJPfSwKLQotCXtFVFNJQSwgTk9fQ1RMLCBOT19ERlMsIFBTQ0FOX0VUU0lBLAotCSBESVNBTExPV19BREhPQ18xMUEgfCBESVNBTExPV19BREhPQ18xMUFfVFVSQiwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oRjFfMjQ1N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMV8yNDU3XzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFQyXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7RVRTSUIsIEVUU0ksIE5PX0RGUywgUFNDQU5fRVRTSUIsCi0JIERJU0FMTE9XX0FESE9DXzExQSB8IERJU0FMTE9XX0FESE9DXzExQV9UVVJCLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMV8yNDMyXzI0NDIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcxXzI0MzJfMjQ0MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtFVFNJQywgRVRTSSwgTk9fREZTLCBQU0NBTl9FVFNJQywKLQkgRElTQUxMT1dfQURIT0NfMTFBIHwgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKEYzXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oRzNfMjQxMl8yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUMl8yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je0ZDQ0EsIEZDQywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMV8yNDEyXzI0NjIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcxXzI0MTJfMjQ2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtNS0tBLCBNS0ssIE5PX0RGUywKLQkgUFNDQU5fTUtLQSB8IFBTQ0FOX01LS0FfRyB8IFBTQ0FOX01LS0ExIHwgUFNDQU5fTUtLQTFfRyB8Ci0JIFBTQ0FOX01LS0EyIHwgUFNDQU5fTUtLQTJfRywgRElTQUxMT1dfQURIT0NfMTFBX1RVUkIsCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKEYyXzI0MTJfMjQ2MiwgRjFfMjQ2N18yNDcyLCBGMl8yNDg0XzI0ODQsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShHMl8yNDEyXzI0NjIsIEcxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEpLAotCSBCTShUMl8yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je01LS0MsIE1LSywgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcyXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1JMRCwgRVRTSSwgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShGMl8yNDEyXzI0NzIsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKEcyXzI0MTJfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDJfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IwX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgQURIT0NfUEVSXzExRCwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LAotCSAgICBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCBXMV8yNDg0XzI0ODQsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjAxX1dPUkxELCBOT19DVEwsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwKLQkgQURIT0NfUEVSXzExRCwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LAotCSAgICBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQxN18yNDMyLAotCSAgICBXMV8yNDQ3XzI0NTcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oVDNfMjQzN18yNDM3LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpfSwKLQotCXtXT1IwMl9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsCi0JIEFESE9DX1BFUl8xMUQsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je0VVMV9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX1BFUl8xMUQsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcyXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcyXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cyXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjFfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81MTcwXzUyMzAsIFcxXzU3NDVfNTgyNSwKLQkgICAgVzFfNTUwMF81NzAwLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDcyXzI0NzIsCi0JICAgIFcxXzI0MTdfMjQzMiwgVzFfMjQ0N18yNDU3LCBXMV8yNDY3XzI0NjcsIFcxXzI0ODRfMjQ4NCwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCBXRzFfMjQ2N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09SMl9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX05PXzExQSwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzUxNzBfNTIzMCwgVzFfNTc0NV81ODI1LAotCSAgICBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV1QxXzUyMTBfNTI1MCwgV1QxXzUyOTBfNTI5MCwgV1QxXzU3NjBfNTgwMCwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCBXMV8yNDg0XzI0ODQsIC0xLCAtMSwKLQkgICAgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjNfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19QRVJfMTFELAotCSBCTShXMV81MjYwXzUzMjAsIFcxXzUxODBfNTI0MCwgVzFfNTE3MF81MjMwLCBXMV81NzQ1XzU4MjUsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSksCi0JIEJNKFdUMV81MjEwXzUyNTAsIFdUMV81MjkwXzUyOTAsIFdUMV81NzYwXzU4MDAsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cyXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjRfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDE3XzI0MzIsCi0JICAgIFcxXzI0NDdfMjQ1NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUjVfRVRTSUMsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NzQ1XzU4MjUsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCBXRzFfMjQ2N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7V09SOV9XT1JMRCwgTk9fQ1RMLCBERlNfRkNDMyB8IERGU19FVFNJLCBQU0NBTl9XV1IsIEFESE9DX05PXzExQSwKLQkgQk0oVzFfNTI2MF81MzIwLCBXMV81MTgwXzUyNDAsIFcxXzU3NDVfNTgyNSwgVzFfNTUwMF81NzAwLCAtMSwgLTEsCi0JICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXVDFfNTIxMF81MjUwLCBXVDFfNTI5MF81MjkwLCBXVDFfNTc2MF81ODAwLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTShXMV8yNDEyXzI0MTIsIFcxXzI0MzdfMjQ0MiwgVzFfMjQ2Ml8yNDYyLCBXMV8yNDE3XzI0MzIsCi0JICAgIFcxXzI0NDdfMjQ1NywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUkFfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NzQ1XzU4MjUsIFcxXzU1MDBfNTcwMCwgLTEsIC0xLAotCSAgICAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNKFcxXzI0MTJfMjQxMiwgVzFfMjQzN18yNDQyLCBXMV8yNDYyXzI0NjIsIFcxXzI0NzJfMjQ3MiwKLQkgICAgVzFfMjQxN18yNDMyLCBXMV8yNDQ3XzI0NTcsIFcxXzI0NjdfMjQ2NywgLTEsIC0xLCAtMSwgLTEsIC0xKSwKLQkgQk0oV0cxXzI0MTJfMjQ2MiwgV0cxXzI0NjdfMjQ3MiwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAotCSAgICAtMSwgLTEpLAotCSBCTShUM18yNDM3XzI0MzcsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSl9LAotCi0Je1dPUkJfV09STEQsIE5PX0NUTCwgREZTX0ZDQzMgfCBERlNfRVRTSSwgUFNDQU5fV1dSLCBBREhPQ19OT18xMUEsCi0JIEJNKFcxXzUyNjBfNTMyMCwgVzFfNTE4MF81MjQwLCBXMV81NTAwXzU3MDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkgICAgLTEsIC0xLCAtMSwgLTEpLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk0oVzFfMjQxMl8yNDEyLCBXMV8yNDM3XzI0NDIsIFcxXzI0NjJfMjQ2MiwgVzFfMjQ3Ml8yNDcyLAotCSAgICBXMV8yNDE3XzI0MzIsIFcxXzI0NDdfMjQ1NywgVzFfMjQ2N18yNDY3LCAtMSwgLTEsIC0xLCAtMSwgLTEpLAotCSBCTShXRzFfMjQxMl8yNDYyLCBXRzFfMjQ2N18yNDcyLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCi0JICAgIC0xLCAtMSksCi0JIEJNKFQzXzI0MzdfMjQzNywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xKX0sCi0KLQl7TlVMTDEsIE5PX0NUTCwgTk9fREZTLCBOT19QU0NBTiwgTk9fUkVRLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPLAotCSBCTVpFUk8sCi0JIEJNWkVSTywKLQkgQk1aRVJPfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbW9kZSBtb2Rlc1tdID0gewotCXtBVEg5S19NT0RFXzExQSwgQ0hBTk5FTF9BfSwKLQl7QVRIOUtfTU9ERV8xMUIsIENIQU5ORUxfQn0sCi0Je0FUSDlLX01PREVfMTFHLCBDSEFOTkVMX0d9LAotCXtBVEg5S19NT0RFXzExTkdfSFQyMCwgQ0hBTk5FTF9HX0hUMjB9LAotCXtBVEg5S19NT0RFXzExTkdfSFQ0MFBMVVMsIENIQU5ORUxfR19IVDQwUExVU30sCi0Je0FUSDlLX01PREVfMTFOR19IVDQwTUlOVVMsIENIQU5ORUxfR19IVDQwTUlOVVN9LAotCXtBVEg5S19NT0RFXzExTkFfSFQyMCwgQ0hBTk5FTF9BX0hUMjB9LAotCXtBVEg5S19NT0RFXzExTkFfSFQ0MFBMVVMsIENIQU5ORUxfQV9IVDQwUExVU30sCi0Je0FUSDlLX01PREVfMTFOQV9IVDQwTUlOVVMsIENIQU5ORUxfQV9IVDQwTUlOVVN9LAotfTsKLQotc3RhdGljIHN0cnVjdCBqYXBhbl9iYW5kY2hlY2sgal9iYW5kY2hlY2tbXSA9IHsKLQl7RjFfNTE3MF81MjMwLCBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfT0REfSwKLQl7RjRfNTE4MF81MjQwLCBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfVTFfRVZFTn0sCi0Je0YyXzUyNjBfNTMyMCwgQVJfRUVQUk9NX0VFUkVHQ0FQX0VOX0tLX1UyfSwKLQl7RjRfNTUwMF81NzAwLCBBUl9FRVBST01fRUVSRUdDQVBfRU5fS0tfTUlEQkFORH0KLX07Ci0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay92aXJ0dWFsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay92aXJ0dWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZmNDI5YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3ZpcnR1YWwuYwpAQCAtMCwwICsxLDY2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSB7CisJaW50IGNvdW50OworCXU4ICphZGRyOworfTsKKworc3RhdGljIHZvaWQgYXRoOWtfdmlmX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSAqaXRlcl9kYXRhID0gZGF0YTsKKwl1OCAqbmJ1ZjsKKworCW5idWYgPSBrcmVhbGxvYyhpdGVyX2RhdGEtPmFkZHIsIChpdGVyX2RhdGEtPmNvdW50ICsgMSkgKiBFVEhfQUxFTiwKKwkJCUdGUF9BVE9NSUMpOworCWlmIChuYnVmID09IE5VTEwpCisJCXJldHVybjsKKworCW1lbWNweShuYnVmICsgaXRlcl9kYXRhLT5jb3VudCAqIEVUSF9BTEVOLCBtYWMsIEVUSF9BTEVOKTsKKwlpdGVyX2RhdGEtPmFkZHIgPSBuYnVmOworCWl0ZXJfZGF0YS0+Y291bnQrKzsKK30KKwordm9pZCBhdGg5a19zZXRfYnNzaWRfbWFzayhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwlzdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSBpdGVyX2RhdGE7CisJaW50IGksIGo7CisJdTggbWFza1tFVEhfQUxFTl07CisKKwkvKgorCSAqIEFkZCBwcmltYXJ5IE1BQyBhZGRyZXNzIGV2ZW4gaWYgaXQgaXMgbm90IGluIGFjdGl2ZSB1c2Ugc2luY2UgaXQKKwkgKiB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gdGhlIGhhcmR3YXJlIGFzIHRoZSBzdGFydGluZyBwb2ludCBhbmQgdGhlCisJICogQlNTSUQgbWFzayB3aWxsIG5lZWQgdG8gYmUgY2hhbmdlZCBpZiBhbm90aGVyIGFkZHJlc3MgaXMgYWN0aXZlLgorCSAqLworCWl0ZXJfZGF0YS5hZGRyID0ga21hbGxvYyhFVEhfQUxFTiwgR0ZQX0FUT01JQyk7CisJaWYgKGl0ZXJfZGF0YS5hZGRyKSB7CisJCW1lbWNweShpdGVyX2RhdGEuYWRkciwgc2MtPnNjX2FoLT5tYWNhZGRyLCBFVEhfQUxFTik7CisJCWl0ZXJfZGF0YS5jb3VudCA9IDE7CisJfSBlbHNlCisJCWl0ZXJfZGF0YS5jb3VudCA9IDA7CisKKwkvKiBHZXQgbGlzdCBvZiBhbGwgYWN0aXZlIE1BQyBhZGRyZXNzZXMgKi8KKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMoc2MtPmh3LCBhdGg5a192aWZfaXRlciwKKwkJCQkJCSAgICZpdGVyX2RhdGEpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKAorCQkJc2MtPnNlY193aXBoeVtpXS0+aHcsIGF0aDlrX3ZpZl9pdGVyLCAmaXRlcl9kYXRhKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCS8qIEdlbmVyYXRlIGFuIGFkZHJlc3MgbWFzayB0byBjb3ZlciBhbGwgYWN0aXZlIGFkZHJlc3NlcyAqLworCW1lbXNldChtYXNrLCAwLCBFVEhfQUxFTik7CisJZm9yIChpID0gMDsgaSA8IGl0ZXJfZGF0YS5jb3VudDsgaSsrKSB7CisJCXU4ICphMSA9IGl0ZXJfZGF0YS5hZGRyICsgaSAqIEVUSF9BTEVOOworCQlmb3IgKGogPSBpICsgMTsgaiA8IGl0ZXJfZGF0YS5jb3VudDsgaisrKSB7CisJCQl1OCAqYTIgPSBpdGVyX2RhdGEuYWRkciArIGogKiBFVEhfQUxFTjsKKwkJCW1hc2tbMF0gfD0gYTFbMF0gXiBhMlswXTsKKwkJCW1hc2tbMV0gfD0gYTFbMV0gXiBhMlsxXTsKKwkJCW1hc2tbMl0gfD0gYTFbMl0gXiBhMlsyXTsKKwkJCW1hc2tbM10gfD0gYTFbM10gXiBhMlszXTsKKwkJCW1hc2tbNF0gfD0gYTFbNF0gXiBhMls0XTsKKwkJCW1hc2tbNV0gfD0gYTFbNV0gXiBhMls1XTsKKwkJfQorCX0KKworCWtmcmVlKGl0ZXJfZGF0YS5hZGRyKTsKKworCS8qIEludmVydCB0aGUgbWFzayBhbmQgY29uZmlndXJlIGhhcmR3YXJlICovCisJc2MtPmJzc2lkbWFza1swXSA9IH5tYXNrWzBdOworCXNjLT5ic3NpZG1hc2tbMV0gPSB+bWFza1sxXTsKKwlzYy0+YnNzaWRtYXNrWzJdID0gfm1hc2tbMl07CisJc2MtPmJzc2lkbWFza1szXSA9IH5tYXNrWzNdOworCXNjLT5ic3NpZG1hc2tbNF0gPSB+bWFza1s0XTsKKwlzYy0+YnNzaWRtYXNrWzVdID0gfm1hc2tbNV07CisKKwlhdGg5a19od19zZXRic3NpZG1hc2soc2MpOworfQorCitpbnQgYXRoOWtfd2lwaHlfYWRkKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpLCBlcnJvcjsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXU4IGFkZHJbRVRIX0FMRU5dOworCisJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkpLCAmYXRoOWtfb3BzKTsKKwlpZiAoaHcgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSA9PSBOVUxMKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gc2MtPm51bV9zZWNfd2lwaHkpIHsKKwkJLyogTm8gZW1wdHkgc2xvdCBhdmFpbGFibGU7IGluY3JlYXNlIGFycmF5IGxlbmd0aCAqLworCQlzdHJ1Y3QgYXRoX3dpcGh5ICoqbjsKKwkJbiA9IGtyZWFsbG9jKHNjLT5zZWNfd2lwaHksCisJCQkgICAgIChzYy0+bnVtX3NlY193aXBoeSArIDEpICoKKwkJCSAgICAgc2l6ZW9mKHN0cnVjdCBhdGhfd2lwaHkgKiksCisJCQkgICAgIEdGUF9BVE9NSUMpOworCQlpZiAobiA9PSBOVUxMKSB7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbltpXSA9IE5VTEw7CisJCXNjLT5zZWNfd2lwaHkgPSBuOworCQlzYy0+bnVtX3NlY193aXBoeSsrOworCX0KKworCVNFVF9JRUVFODAyMTFfREVWKGh3LCBzYy0+ZGV2KTsKKworCWFwaHkgPSBody0+cHJpdjsKKwlhcGh5LT5zYyA9IHNjOworCWFwaHktPmh3ID0gaHc7CisJc2MtPnNlY193aXBoeVtpXSA9IGFwaHk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCW1lbWNweShhZGRyLCBzYy0+c2NfYWgtPm1hY2FkZHIsIEVUSF9BTEVOKTsKKwlhZGRyWzBdIHw9IDB4MDI7IC8qIExvY2FsbHkgbWFuYWdlZCBhZGRyZXNzICovCisJLyoKKwkgKiBYT1IgdmlydHVhbCB3aXBoeSBpbmRleCBpbnRvIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIHRvIGdlbmVyYXRlCisJICogYSBkaWZmZXJlbnQgTUFDIGFkZHJlc3MgZm9yIGVhY2ggdmlydHVhbCB3aXBoeS4KKwkgKi8KKwlhZGRyWzVdIF49IGkgJiAweGZmOworCWFkZHJbNF0gXj0gKGkgJiAweGZmMDApID4+IDg7CisJYWRkclszXSBePSAoaSAmIDB4ZmYwMDAwKSA+PiAxNjsKKworCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBhZGRyKTsKKworCWF0aF9zZXRfaHdfY2FwYWIoc2MsIGh3KTsKKworCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKKworCWlmIChlcnJvciA9PSAwKSB7CisJCS8qIE1ha2Ugc3VyZSB3aXBoeSBzY2hlZHVsZXIgaXMgc3RhcnRlZCAoaWYgZW5hYmxlZCkgKi8KKwkJYXRoOWtfd2lwaHlfc2V0X3NjaGVkdWxlcihzYywgc2MtPndpcGh5X3NjaGVkdWxlcl9pbnQpOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworaW50IGF0aDlrX3dpcGh5X2RlbChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoYXBoeSA9PSBzYy0+c2VjX3dpcGh5W2ldKSB7CisJCQlzYy0+c2VjX3dpcGh5W2ldID0gTlVMTDsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhcGh5LT5odyk7CisJCQlpZWVlODAyMTFfZnJlZV9odyhhcGh5LT5odyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiAtRU5PRU5UOworfQorCitzdGF0aWMgaW50IGF0aDlrX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGF0aF93aXBoeSAqYXBoeSwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBjb25zdCB1OCAqYnNzaWQsCisJCQkgICAgICAgaW50IHBzKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGF0aF90eF9jb250cm9sIHR4Y3RsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlfX2xlMTYgZmM7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCisJc2tiID0gZGV2X2FsbG9jX3NrYigyNCk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQoaGRyLCAwLCAyNCk7CisJZmMgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8CisJCQkgSUVFRTgwMjExX0ZDVExfVE9EUyk7CisJaWYgKHBzKQorCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QTSk7CisJaGRyLT5mcmFtZV9jb250cm9sID0gZmM7CisJbWVtY3B5KGhkci0+YWRkcjEsIGJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KGhkci0+YWRkcjIsIGFwaHktPmh3LT53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGhkci0+YWRkcjMsIGJzc2lkLCBFVEhfQUxFTik7CisKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKKwlpbmZvLT5mbGFncyA9IElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKKwlpbmZvLT5jb250cm9sLnZpZiA9IHZpZjsKKwlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IDA7CisJaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudCA9IDQ7CisJaW5mby0+Y29udHJvbC5yYXRlc1sxXS5pZHggPSAtMTsKKworCW1lbXNldCgmdHhjdGwsIDAsIHNpemVvZihzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wpKTsKKwl0eGN0bC50eHEgPSAmc2MtPnR4LnR4cVtzYy0+dHguaHdxX21hcFtBVEg5S19XTUVfQUNfVk9dXTsKKwl0eGN0bC5mcmFtZV90eXBlID0gcHMgPyBBVEg5S19JTlRfUEFVU0UgOiBBVEg5S19JTlRfVU5QQVVTRTsKKworCWlmIChhdGhfdHhfc3RhcnQoYXBoeS0+aHcsIHNrYiwgJnR4Y3RsKSAhPSAwKQorCQlnb3RvIGV4aXQ7CisKKwlyZXR1cm4gMDsKK2V4aXQ6CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBib29sIF9fYXRoOWtfd2lwaHlfcGF1c2luZyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX1BBVVNJTkcpCisJCXJldHVybiB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSA9PSBBVEhfV0lQSFlfUEFVU0lORykKKwkJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGF0aDlrX3dpcGh5X3BhdXNpbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJYm9vbCByZXQ7CisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJcmV0ID0gX19hdGg5a193aXBoeV9wYXVzaW5nKHNjKTsKKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIF9fYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9TQ0FOKQorCQlyZXR1cm4gdHJ1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlpZiAoc2MtPnNlY193aXBoeVtpXSAmJgorCQkgICAgc2MtPnNlY193aXBoeVtpXS0+c3RhdGUgPT0gQVRIX1dJUEhZX1NDQU4pCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitib29sIGF0aDlrX3dpcGh5X3NjYW5uaW5nKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWJvb2wgcmV0OworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldCA9IF9fYXRoOWtfd2lwaHlfc2Nhbm5pbmcoc2MpOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2F0aDlrX3dpcGh5X3VucGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSk7CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIHZvaWQgX19hdGg5a193aXBoeV91bnBhdXNlX2NoKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaWYgKGFwaHkgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChhcGh5LT5jaGFuX2lkeCAhPSBhcGh5LT5zYy0+Y2hhbl9pZHgpCisJCXJldHVybjsgLyogd2lwaHkgbm90IG9uIHRoZSBzZWxlY3RlZCBjaGFubmVsICovCisJX19hdGg5a193aXBoeV91bnBhdXNlKGFwaHkpOworfQorCitzdGF0aWMgdm9pZCBhdGg5a193aXBoeV91bnBhdXNlX2NoYW5uZWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJc3Bpbl9sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJX19hdGg5a193aXBoeV91bnBhdXNlX2NoKHNjLT5wcmlfd2lwaHkpOworCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKQorCQlfX2F0aDlrX3dpcGh5X3VucGF1c2VfY2goc2MtPnNlY193aXBoeVtpXSk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKK30KKwordm9pZCBhdGg5a193aXBoeV9jaGFuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGhfc29mdGMsIGNoYW5fd29yayk7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5uZXh0X3dpcGh5OworCisJaWYgKGFwaHkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbGwgcGVuZGluZyBpbnRlcmZhY2VzIHBhdXNlZDsgcmVhZHkgdG8gY2hhbmdlCisJICogY2hhbm5lbHMuCisJICovCisKKwkvKiBDaGFuZ2UgY2hhbm5lbHMgKi8KKwltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOworCS8qIFhYWDogcmVtb3ZlIG1lIGV2ZW50dWFsbHkgKi8KKwlhdGg5a191cGRhdGVfaWNoYW5uZWwoc2MsIGFwaHktPmh3LAorCQkJICAgICAgJnNjLT5zY19haC0+Y2hhbm5lbHNbc2MtPmNoYW5faWR4XSk7CisJYXRoX3VwZGF0ZV9jaGFpbm1hc2soc2MsIHNjLT5jaGFuX2lzX2h0KTsKKwlpZiAoYXRoX3NldF9jaGFubmVsKHNjLCBhcGh5LT5odywKKwkJCSAgICAmc2MtPnNjX2FoLT5jaGFubmVsc1tzYy0+Y2hhbl9pZHhdKSA8IDApIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImF0aDlrOiBGYWlsZWQgdG8gc2V0IGNoYW5uZWwgZm9yIG5ldyAiCisJCSAgICAgICAidmlydHVhbCB3aXBoeVxuIik7CisJCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwkJcmV0dXJuOworCX0KKwltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKKwlhdGg5a193aXBoeV91bnBhdXNlX2NoYW5uZWwoc2MpOworfQorCisvKgorICogYXRoOWsgdmVyc2lvbiBvZiBpZWVlODAyMTFfdHhfc3RhdHVzKCkgZm9yIFRYIGZyYW1lcyB0aGF0IGFyZSBnZW5lcmF0ZWQKKyAqIGludGVybmFsbHkgaW4gdGhlIGRyaXZlci4KKyAqLwordm9pZCBhdGg5a190eF9zdGF0dXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7CisKKwlpZiAodHhfaW5mb19wcml2ICYmIHR4X2luZm9fcHJpdi0+ZnJhbWVfdHlwZSA9PSBBVEg5S19JTlRfUEFVU0UgJiYKKwkgICAgYXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX1BBVVNJTkcpIHsKKwkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiYXRoOWs6ICVzOiBubyBBQ0sgZm9yIHBhdXNlICIKKwkJCSAgICAgICAiZnJhbWVcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCQkvKgorCQkJICogVGhlIEFQIGRpZCBub3QgcmVwbHk7IGlnbm9yZSB0aGlzIHRvIGFsbG93IHVzIHRvCisJCQkgKiBjb250aW51ZS4KKwkJCSAqLworCQl9CisJCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwkJaWYgKCFhdGg5a193aXBoeV9wYXVzaW5nKGFwaHktPnNjKSkgeworCQkJLyoKKwkJCSAqIERyb3AgZnJvbSB0YXNrbGV0IHRvIHdvcmsgdG8gYWxsb3cgbXV0ZXggZm9yIGNoYW5uZWwKKwkJCSAqIGNoYW5nZS4KKwkJCSAqLworCQkJcXVldWVfd29yayhhcGh5LT5zYy0+aHctPndvcmtxdWV1ZSwKKwkJCQkgICAmYXBoeS0+c2MtPmNoYW5fd29yayk7CisJCX0KKwl9CisKKwlrZnJlZSh0eF9pbmZvX3ByaXYpOworCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSBOVUxMOworCisJZGV2X2tmcmVlX3NrYihza2IpOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19tYXJrX3BhdXNlZChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfUEFVU0VEOworCWlmICghX19hdGg5a193aXBoeV9wYXVzaW5nKHNjKSkKKwkJcXVldWVfd29yayhzYy0+aHctPndvcmtxdWV1ZSwgJnNjLT5jaGFuX3dvcmspOworfQorCitzdGF0aWMgdm9pZCBhdGg5a19wYXVzZV9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGRhdGE7CisJc3RydWN0IGF0aF92aWYgKmF2cCA9ICh2b2lkICopIHZpZi0+ZHJ2X3ByaXY7CisKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJaWYgKCF2aWYtPmJzc19jb25mLmFzc29jKSB7CisJCQlhdGg5a19tYXJrX3BhdXNlZChhcGh5KTsKKwkJCWJyZWFrOworCQl9CisJCS8qIFRPRE86IGNvdWxkIGF2b2lkIHRoaXMgaWYgYWxyZWFkeSBpbiBQUyBtb2RlICovCisJCWlmIChhdGg5a19zZW5kX251bGxmdW5jKGFwaHksIHZpZiwgYXZwLT5ic3NpZCwgMSkpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHNlbmQgUFMgbnVsbGZ1bmNcbiIsCisJCQkgICAgICAgX19mdW5jX18pOworCQkJYXRoOWtfbWFya19wYXVzZWQoYXBoeSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJLyogQmVhY29uIHRyYW5zbWlzc2lvbiBpcyBwYXVzZWQgYnkgYXBoeS0+c3RhdGUgY2hhbmdlICovCisJCWF0aDlrX21hcmtfcGF1c2VkKGFwaHkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIGludCBfX2F0aDlrX3dpcGh5X3BhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGFwaHktPmh3KTsKKwlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTSU5HOworCS8qCisJICogVE9ETzogaGFuZGxlIFBBVVNJTkctPlBBVVNFRCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlCisJICogYWN0aXZlIHZpZnMgKG5vdyB3ZSBkbyBpdCBvbiB0aGUgZmlyc3QgdmlmIGdldHRpbmcgcmVhZHk7IHNob3VsZCBiZQorCSAqIG9uIHRoZSBsYXN0KQorCSAqLworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhhcGh5LT5odywgYXRoOWtfcGF1c2VfaXRlciwKKwkJCQkJCSAgIGFwaHkpOworCXJldHVybiAwOworfQorCitpbnQgYXRoOWtfd2lwaHlfcGF1c2Uoc3RydWN0IGF0aF93aXBoeSAqYXBoeSkKK3sKKwlpbnQgcmV0OworCXNwaW5fbG9ja19iaCgmYXBoeS0+c2MtPndpcGh5X2xvY2spOworCXJldCA9IF9fYXRoOWtfd2lwaHlfcGF1c2UoYXBoeSk7CisJc3Bpbl91bmxvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdGg5a191bnBhdXNlX2l0ZXIodm9pZCAqZGF0YSwgdTggKm1hYywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gZGF0YTsKKwlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKikgdmlmLT5kcnZfcHJpdjsKKworCXN3aXRjaCAodmlmLT50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlpZiAoIXZpZi0+YnNzX2NvbmYuYXNzb2MpCisJCQlicmVhazsKKwkJYXRoOWtfc2VuZF9udWxsZnVuYyhhcGh5LCB2aWYsIGF2cC0+YnNzaWQsIDApOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkvKiBCZWFjb24gdHJhbnNtaXNzaW9uIGlzIHJlLWVuYWJsZWQgYnkgYXBoeS0+c3RhdGUgY2hhbmdlICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyogY2FsbGVyIG11c3QgaG9sZCB3aXBoeV9sb2NrICovCitzdGF0aWMgaW50IF9fYXRoOWtfd2lwaHlfdW5wYXVzZShzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhhcGh5LT5odywKKwkJCQkJCSAgIGF0aDlrX3VucGF1c2VfaXRlciwgYXBoeSk7CisJYXBoeS0+c3RhdGUgPSBBVEhfV0lQSFlfQUNUSVZFOworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhhcGh5LT5odyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhdGg5a193aXBoeV91bnBhdXNlKHN0cnVjdCBhdGhfd2lwaHkgKmFwaHkpCit7CisJaW50IHJldDsKKwlzcGluX2xvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXQgPSBfX2F0aDlrX3dpcGh5X3VucGF1c2UoYXBoeSk7CisJc3Bpbl91bmxvY2tfYmgoJmFwaHktPnNjLT53aXBoeV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2F0aDlrX3dpcGh5X21hcmtfYWxsX3BhdXNlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX0lOQUNUSVZFKQorCQlzYy0+cHJpX3dpcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9QQVVTRUQ7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlICE9IEFUSF9XSVBIWV9JTkFDVElWRSkKKwkJCXNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwl9Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgd2lwaHlfbG9jayAqLworc3RhdGljIHZvaWQgX19hdGg5a193aXBoeV9wYXVzZV9hbGwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisJaWYgKHNjLT5wcmlfd2lwaHktPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCV9fYXRoOWtfd2lwaHlfcGF1c2Uoc2MtPnByaV93aXBoeSk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCQlfX2F0aDlrX3dpcGh5X3BhdXNlKHNjLT5zZWNfd2lwaHlbaV0pOworCX0KK30KKworaW50IGF0aDlrX3dpcGh5X3NlbGVjdChzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5KQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJYm9vbCBub3c7CisKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZiAoX19hdGg5a193aXBoeV9zY2FubmluZyhzYykpIHsKKwkJLyoKKwkJICogRm9yIG5vdywgd2UgYXJlIHVzaW5nIG1hYzgwMjExIHN3IHNjYW4gYW5kIGl0IGV4cGVjdHMgdG8KKwkJICogaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciBjaGFubmVsIGNoYW5nZXMsIHNvIGF2b2lkIHdpcGh5CisJCSAqIHNjaGVkdWxpbmcgZHVyaW5nIGEgc2Nhbi4gVGhpcyBjb3VsZCBiZSBvcHRpbWl6ZWQgaWYgdGhlCisJCSAqIHNjYW5uaW5nIGNvbnRyb2wgd2VyZSBtb3ZlZCBpbnRvIHRoZSBkcml2ZXIuCisJCSAqLworCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAoX19hdGg5a193aXBoeV9wYXVzaW5nKHNjKSkgeworCQlpZiAoc2MtPndpcGh5X3NlbGVjdF9mYWlsdXJlcyA9PSAwKQorCQkJc2MtPndpcGh5X3NlbGVjdF9maXJzdF9mYWlsID0gamlmZmllczsKKwkJc2MtPndpcGh5X3NlbGVjdF9mYWlsdXJlcysrOworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzYy0+d2lwaHlfc2VsZWN0X2ZpcnN0X2ZhaWwgKyBIWiAvIDIpKQorCQl7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiYXRoOWs6IFByZXZpb3VzIHdpcGh5IHNlbGVjdCB0aW1lZCAiCisJCQkgICAgICAgIm91dDsgZGlzYWJsZS9lbmFibGUgaHcgdG8gcmVjb3ZlclxuIik7CisJCQlfX2F0aDlrX3dpcGh5X21hcmtfYWxsX3BhdXNlZChzYyk7CisJCQkvKgorCQkJICogVE9ETzogdGhpcyB3b3JrYXJvdW5kIHRvIGZpeCBoYXJkd2FyZSBpcyB1bmxpa2VseSB0bworCQkJICogYmUgc3BlY2lmaWMgdG8gdmlydHVhbCB3aXBoeSBjaGFuZ2VzLiBJdCBjYW4gaGFwcGVuCisJCQkgKiBvbiBub3JtYWwgY2hhbm5lbCBjaGFuZ2UsIHRvbywgYW5kIGFzIHN1Y2gsIHRoaXMKKwkJCSAqIHNob3VsZCByZWFsbHkgYmUgbWFkZSBtb3JlIGdlbmVyaWMuIEZvciBleGFtcGxlLAorCQkJICogdHJpY2tlciByYWRpbyBkaXNhYmxlL2VuYWJsZSBvbiBHVFQgaW50ZXJydXB0IGJ1cnN0CisJCQkgKiAoc2F5LCAxMCBHVFQgaW50ZXJydXB0cyByZWNlaXZlZCB3aXRob3V0IGFueSBUWAorCQkJICogZnJhbWUgYmVpbmcgY29tcGxldGVkKQorCQkJICovCisJCQlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCQkJYXRoX3JhZGlvX2Rpc2FibGUoc2MpOworCQkJYXRoX3JhZGlvX2VuYWJsZShzYyk7CisJCQlxdWV1ZV93b3JrKGFwaHktPnNjLT5ody0+d29ya3F1ZXVlLAorCQkJCSAgICZhcGh5LT5zYy0+Y2hhbl93b3JrKTsKKwkJCXJldHVybiAtRUJVU1k7IC8qIHByZXZpb3VzIHNlbGVjdCBzdGlsbCBpbiBwcm9ncmVzcyAqLworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCXJldHVybiAtRUJVU1k7IC8qIHByZXZpb3VzIHNlbGVjdCBzdGlsbCBpbiBwcm9ncmVzcyAqLworCX0KKwlzYy0+d2lwaHlfc2VsZWN0X2ZhaWx1cmVzID0gMDsKKworCS8qIFN0b3JlIHRoZSBuZXcgY2hhbm5lbCAqLworCXNjLT5jaGFuX2lkeCA9IGFwaHktPmNoYW5faWR4OworCXNjLT5jaGFuX2lzX2h0ID0gYXBoeS0+Y2hhbl9pc19odDsKKwlzYy0+bmV4dF93aXBoeSA9IGFwaHk7CisKKwlfX2F0aDlrX3dpcGh5X3BhdXNlX2FsbChzYyk7CisJbm93ID0gIV9fYXRoOWtfd2lwaHlfcGF1c2luZyhhcGh5LT5zYyk7CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCWlmIChub3cpIHsKKwkJLyogUmVhZHkgdG8gcmVxdWVzdCBjaGFubmVsIGNoYW5nZSBpbW1lZGlhdGVseSAqLworCQlxdWV1ZV93b3JrKGFwaHktPnNjLT5ody0+d29ya3F1ZXVlLCAmYXBoeS0+c2MtPmNoYW5fd29yayk7CisJfQorCisJLyoKKwkgKiB3aXBoeXMgd2lsbCBiZSB1bnBhdXNlZCBpbiBhdGg5a190eF9zdGF0dXMoKSBvbmNlIGNoYW5uZWwgaGFzIGJlZW4KKwkgKiBjaGFuZ2VkIGlmIGFueSB3aXBoeSBuZWVkcyB0aW1lIHRvIGJlY29tZSBwYXVzZWQuCisJICovCisKKwlyZXR1cm4gMDsKK30KKworYm9vbCBhdGg5a193aXBoeV9zdGFydGVkKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCBpOworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCWlmIChzYy0+cHJpX3dpcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7CisJCWlmIChzYy0+c2VjX3dpcGh5W2ldICYmCisJCSAgICBzYy0+c2VjX3dpcGh5W2ldLT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpIHsKKwkJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfd2lwaHlfcGF1c2VfY2hhbihzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5LAorCQkJCSAgIHN0cnVjdCBhdGhfd2lwaHkgKnNlbGVjdGVkKQoreworCWlmIChzZWxlY3RlZC0+c3RhdGUgPT0gQVRIX1dJUEhZX1NDQU4pIHsKKwkJaWYgKGFwaHkgPT0gc2VsZWN0ZWQpCisJCQlyZXR1cm47CisJCS8qCisJCSAqIFBhdXNlIGFsbCBvdGhlciB3aXBoeXMgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgc2NhbiBldmVuIGlmCisJCSAqIHRoZXkgYXJlIG9uIHRoZSBjdXJyZW50IGNoYW5uZWwgbm93LgorCQkgKi8KKwl9IGVsc2UgaWYgKGFwaHktPmNoYW5faWR4ID09IHNlbGVjdGVkLT5jaGFuX2lkeCkKKwkJcmV0dXJuOworCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX1BBVVNFRDsKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoYXBoeS0+aHcpOworfQorCit2b2lkIGF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICBzdHJ1Y3QgYXRoX3dpcGh5ICpzZWxlY3RlZCkKK3sKKwlpbnQgaTsKKwlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKwlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0FDVElWRSkKKwkJYXRoOWtfd2lwaHlfcGF1c2VfY2hhbihzYy0+cHJpX3dpcGh5LCBzZWxlY3RlZCk7CisJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKKwkJaWYgKHNjLT5zZWNfd2lwaHlbaV0gJiYKKwkJICAgIHNjLT5zZWNfd2lwaHlbaV0tPnN0YXRlID09IEFUSF9XSVBIWV9BQ1RJVkUpCisJCQlhdGg5a193aXBoeV9wYXVzZV9jaGFuKHNjLT5zZWNfd2lwaHlbaV0sIHNlbGVjdGVkKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKK30KKwordm9pZCBhdGg5a193aXBoeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRoX3NvZnRjLAorCQkJCQkgICAgd2lwaHlfd29yay53b3JrKTsKKwlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gTlVMTDsKKwlib29sIGZpcnN0ID0gdHJ1ZTsKKworCXNwaW5fbG9ja19iaCgmc2MtPndpcGh5X2xvY2spOworCisJaWYgKHNjLT53aXBoeV9zY2hlZHVsZXJfaW50ID09IDApIHsKKwkJLyogd2lwaHkgc2NoZWR1bGVyIGlzIGRpc2FibGVkICovCisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+d2lwaHlfbG9jayk7CisJCXJldHVybjsKKwl9CisKK3RyeV9hZ2FpbjoKKwlzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4Kys7CisJd2hpbGUgKHNjLT53aXBoeV9zY2hlZHVsZXJfaW5kZXggPD0gc2MtPm51bV9zZWNfd2lwaHkpIHsKKwkJYXBoeSA9IHNjLT5zZWNfd2lwaHlbc2MtPndpcGh5X3NjaGVkdWxlcl9pbmRleCAtIDFdOworCQlpZiAoYXBoeSAmJiBhcGh5LT5zdGF0ZSAhPSBBVEhfV0lQSFlfSU5BQ1RJVkUpCisJCQlicmVhazsKKworCQlzYy0+d2lwaHlfc2NoZWR1bGVyX2luZGV4Kys7CisJCWFwaHkgPSBOVUxMOworCX0KKwlpZiAoYXBoeSA9PSBOVUxMKSB7CisJCXNjLT53aXBoeV9zY2hlZHVsZXJfaW5kZXggPSAwOworCQlpZiAoc2MtPnByaV93aXBoeS0+c3RhdGUgPT0gQVRIX1dJUEhZX0lOQUNUSVZFKSB7CisJCQlpZiAoZmlyc3QpIHsKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJCWdvdG8gdHJ5X2FnYWluOworCQkJfQorCQkJLyogTm8gd2lwaHkgaXMgcmVhZHkgdG8gYmUgc2NoZWR1bGVkICovCisJCX0gZWxzZQorCQkJYXBoeSA9IHNjLT5wcmlfd2lwaHk7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKKworCWlmIChhcGh5ICYmCisJICAgIGFwaHktPnN0YXRlICE9IEFUSF9XSVBIWV9BQ1RJVkUgJiYgYXBoeS0+c3RhdGUgIT0gQVRIX1dJUEhZX1NDQU4gJiYKKwkgICAgYXRoOWtfd2lwaHlfc2VsZWN0KGFwaHkpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJhdGg5azogRmFpbGVkIHRvIHNjaGVkdWxlIHZpcnR1YWwgd2lwaHkgIgorCQkgICAgICAgImNoYW5nZVxuIik7CisJfQorCisJcXVldWVfZGVsYXllZF93b3JrKHNjLT5ody0+d29ya3F1ZXVlLCAmc2MtPndpcGh5X3dvcmssCisJCQkgICBzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCk7Cit9CisKK3ZvaWQgYXRoOWtfd2lwaHlfc2V0X3NjaGVkdWxlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgdW5zaWduZWQgaW50IG1zZWNfaW50KQoreworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPndpcGh5X3dvcmspOworCXNjLT53aXBoeV9zY2hlZHVsZXJfaW50ID0gbXNlY3NfdG9famlmZmllcyhtc2VjX2ludCk7CisJaWYgKHNjLT53aXBoeV9zY2hlZHVsZXJfaW50KQorCQlxdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LT53b3JrcXVldWUsICZzYy0+d2lwaHlfd29yaywKKwkJCQkgICBzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGg5ay94bWl0LmMKaW5kZXggYzkyZjBjNi4uNjg5YmRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoOWsveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aDlrL3htaXQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE0LDcgKzE0LDcgQEAKICAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJhdGg5ay5oIgogCiAjZGVmaW5lIEJJVFNfUEVSX0JZVEUgICAgICAgICAgIDgKICNkZWZpbmUgT0ZETV9QTENQX0JJVFMgICAgICAgICAgMjIKQEAgLTU1LDk0ICs1NSwyMyBAQAogCiAjZGVmaW5lIElTX0hUX1JBVEUoX3JhdGUpICAgICAoKF9yYXRlKSAmIDB4ODApCiAKLS8qCi0gKiBJbnNlcnQgYSBjaGFpbiBvZiBhdGhfYnVmIChkZXNjcmlwdG9ycykgb24gYSB0eHEgYW5kCi0gKiBhc3N1bWUgdGhlIGRlc2NyaXB0b3JzIGFyZSBhbHJlYWR5IGNoYWluZWQgdG9nZXRoZXIgYnkgY2FsbGVyLgotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi0KK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2h0X25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCk7CitzdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGVfYnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKKwkJCQlpbnQgdHhvaywgaW50IHNlbmRiYXIpOwogc3RhdGljIHZvaWQgYXRoX3R4X3R4cWFkZGJ1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKLQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9idWYgKmJmOworCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKK3N0YXRpYyB2b2lkIGF0aF9idWZfc2V0X3JhdGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZik7CitzdGF0aWMgaW50IGF0aF90eF9udW1fYmFkZnJtcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICAgaW50IHR4b2spOworc3RhdGljIHZvaWQgYXRoX3R4X3JjX3N0YXR1cyhzdHJ1Y3QgYXRoX2J1ZiAqYmYsIHN0cnVjdCBhdGhfZGVzYyAqZHMsCisJCQkgICAgIGludCBuYmFkLCBpbnQgdHhvaywgYm9vbCB1cGRhdGVfcmMpOwogCi0JLyoKLQkgKiBJbnNlcnQgdGhlIGZyYW1lIG9uIHRoZSBvdXRib3VuZCBsaXN0IGFuZAotCSAqIHBhc3MgaXQgb24gdG8gdGhlIGhhcmR3YXJlLgotCSAqLwotCi0JaWYgKGxpc3RfZW1wdHkoaGVhZCkpCi0JCXJldHVybjsKLQotCWJmID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0KLQlsaXN0X3NwbGljZV90YWlsX2luaXQoaGVhZCwgJnR4cS0+YXhxX3EpOwotCXR4cS0+YXhxX2RlcHRoKys7Ci0JdHhxLT5heHFfdG90YWxxdWV1ZWQrKzsKLQl0eHEtPmF4cV9saW5rYnVmID0gbGlzdF9lbnRyeSh0eHEtPmF4cV9xLnByZXYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQotCURQUklOVEYoc2MsIEFUSF9EQkdfUVVFVUUsCi0JCSJxbnVtOiAlZCwgdHhxIGRlcHRoOiAlZFxuIiwgdHhxLT5heHFfcW51bSwgdHhxLT5heHFfZGVwdGgpOwotCi0JaWYgKHR4cS0+YXhxX2xpbmsgPT0gTlVMTCkgewotCQlhdGg5a19od19wdXR0eGJ1ZihhaCwgdHhxLT5heHFfcW51bSwgYmYtPmJmX2RhZGRyKTsKLQkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULAotCQkJIlRYRFBbJXVdID0gJWxseCAoJXApXG4iLAotCQkJdHhxLT5heHFfcW51bSwgaXRvNjQoYmYtPmJmX2RhZGRyKSwgYmYtPmJmX2Rlc2MpOwotCX0gZWxzZSB7Ci0JCSp0eHEtPmF4cV9saW5rID0gYmYtPmJmX2RhZGRyOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJsaW5rWyV1XSAoJXApPSVsbHggKCVwKVxuIiwKLQkJCXR4cS0+YXhxX3FudW0sIHR4cS0+YXhxX2xpbmssCi0JCQlpdG82NChiZi0+YmZfZGFkZHIpLCBiZi0+YmZfZGVzYyk7Ci0JfQotCXR4cS0+YXhxX2xpbmsgPSAmKGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2MtPmRzX2xpbmspOwotCWF0aDlrX2h3X3R4c3RhcnQoYWgsIHR4cS0+YXhxX3FudW0pOwotfQotCi1zdGF0aWMgdm9pZCBhdGhfdHhfY29tcGxldGUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IGF0aF94bWl0X3N0YXR1cyAqdHhfc3RhdHVzKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2ID0gQVRIX1RYX0lORk9fUFJJVih0eF9pbmZvKTsKLQlpbnQgaGRybGVuLCBwYWRzaXplOwotCi0JRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggY29tcGxldGU6IHNrYjogJXBcbiIsIHNrYik7Ci0KLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSyB8fAotCSAgICB0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEKSB7Ci0JCWtmcmVlKHR4X2luZm9fcHJpdik7Ci0JCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSBOVUxMOwotCX0KLQotCWlmICh0eF9zdGF0dXMtPmZsYWdzICYgQVRIX1RYX0JBUikgewotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVV9OT19CQUNLOwotCQl0eF9zdGF0dXMtPmZsYWdzICY9IH5BVEhfVFhfQkFSOwotCX0KLQotCWlmICghKHR4X3N0YXR1cy0+ZmxhZ3MgJiAoQVRIX1RYX0VSUk9SIHwgQVRIX1RYX1hSRVRSWSkpKSB7Ci0JCS8qIEZyYW1lIHdhcyBBQ0tlZCAqLwotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7Ci0JfQotCi0JdHhfaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gdHhfc3RhdHVzLT5yZXRyaWVzICsgMTsKLQotCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7Ci0JcGFkc2l6ZSA9IGhkcmxlbiAmIDM7Ci0JaWYgKHBhZHNpemUgJiYgaGRybGVuID49IDI0KSB7Ci0JCS8qCi0JCSAqIFJlbW92ZSBNQUMgaGVhZGVyIHBhZGRpbmcgYmVmb3JlIGdpdmluZyB0aGUgZnJhbWUgYmFjayB0bwotCQkgKiBtYWM4MDIxMS4KLQkJICovCi0JCW1lbW1vdmUoc2tiLT5kYXRhICsgcGFkc2l6ZSwgc2tiLT5kYXRhLCBoZHJsZW4pOwotCQlza2JfcHVsbChza2IsIHBhZHNpemUpOwotCX0KLQotCWllZWU4MDIxMV90eF9zdGF0dXMoaHcsIHNrYik7Ci19Ci0KLS8qIENoZWNrIGlmIGl0J3Mgb2theSB0byBzZW5kIG91dCBhZ2dyZWdhdGVzICovCisvKioqKioqKioqKioqKioqKioqKioqLworLyogQWdncmVnYXRpb24gbG9naWMgKi8KKy8qKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQgYXRoX2FnZ3JfcXVlcnkoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4sIHU4IHRpZG5vKQogewpAQCAtMTU2LDIzMiArODUsMTkgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF9nZXRfYmVhY29uY29uZmlnKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaWZfaWQsCi0JCQkJIHN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyAqY29uZikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQotCS8qIGZpbGwgaW4gYmVhY29uIGNvbmZpZyBkYXRhICovCi0KLQljb25mLT5iZWFjb25faW50ZXJ2YWwgPSBody0+Y29uZi5iZWFjb25faW50OwotCWNvbmYtPmxpc3Rlbl9pbnRlcnZhbCA9IDEwMDsKLQljb25mLT5kdGltX2NvdW50ID0gMTsKLQljb25mLT5ibWlzc190aW1lb3V0ID0gQVRIX0RFRkFVTFRfQk1JU1NfTElNSVQgKiBjb25mLT5saXN0ZW5faW50ZXJ2YWw7Ci19Ci0KLS8qIENhbGN1bGF0ZSBBdGhlcm9zIHBhY2tldCB0eXBlIGZyb20gSUVFRTgwMjExIHBhY2tldCBoZWFkZXIgKi8KLQotc3RhdGljIGVudW0gYXRoOWtfcGt0X3R5cGUgZ2V0X2h3X3BhY2tldF90eXBlKHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQllbnVtIGF0aDlrX3BrdF90eXBlIGh0eXBlOwotCV9fbGUxNiBmYzsKLQotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQotCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkKLQkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9CRUFDT047Ci0JZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQotCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX1BST0JFX1JFU1A7Ci0JZWxzZSBpZiAoaWVlZTgwMjExX2lzX2F0aW0oZmMpKQotCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX0FUSU07Ci0JZWxzZSBpZiAoaWVlZTgwMjExX2lzX3BzcG9sbChmYykpCi0JCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfUFNQT0xMOwotCWVsc2UKLQkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9OT1JNQUw7Ci0KLQlyZXR1cm4gaHR5cGU7Ci19Ci0KLXN0YXRpYyBib29sIGlzX3BhZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JX19sZTE2IGZjOwotCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkgewotCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSB8fAotCQkgICAgLyogUG9ydCBBY2Nlc3MgRW50aXR5IChJRUVFIDgwMi4xWCkgKi8KLQkJICAgIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGludCBnZXRfaHdfY3J5cHRvX2tleXR5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0KLQlpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXkpIHsKLQkJaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1dFUCkKLQkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9XRVA7Ci0JCWVsc2UgaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1RLSVApCi0JCQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfVEtJUDsKLQkJZWxzZSBpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfQ0NNUCkKLQkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9BRVM7Ci0JfQotCi0JcmV0dXJuIEFUSDlLX0tFWV9UWVBFX0NMRUFSOwotfQotCi0vKiBDYWxsZWQgb25seSB3aGVuIHR4IGFnZ3JlZ2F0aW9uIGlzIGVuYWJsZWQgYW5kIEhUIGlzIHN1cHBvcnRlZCAqLwotCi1zdGF0aWMgdm9pZCBhc3NpZ25fYWdncl90aWRfc2Vxbm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgIHN0cnVjdCBhdGhfYnVmICpiZikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuOwotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOwotCV9fbGUxNiBmYzsKLQl1OCAqcWM7Ci0KLQlpZiAoIXR4X2luZm8tPmNvbnRyb2wuc3RhKQotCQlyZXR1cm47Ci0KLQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKil0eF9pbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JLyogR2V0IHRpZG5vICovCi0KLQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgewotCQlxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwotCQliZi0+YmZfdGlkbm8gPSBxY1swXSAmIDB4ZjsKLQl9Ci0KLQkvKiBHZXQgc2Vxbm8gKi8KLQkvKiBGb3IgSFQgY2FwYWJsZSBzdGF0aW9ucywgd2Ugc2F2ZSB0aWRubyBmb3IgbGF0ZXIgdXNlLgotCSAqIFdlIGFsc28gb3ZlcnJpZGUgc2Vxbm8gc2V0IGJ5IHVwcGVyIGxheWVyIHdpdGggdGhlIG9uZQotCSAqIGluIHR4IGFnZ3JlZ2F0aW9uIHN0YXRlLgotCSAqCi0JICogSWYgZnJhZ21lbnRhdGlvbiBpcyBvbiwgdGhlIHNlcXVlbmNlIG51bWJlciBpcwotCSAqIG5vdCBvdmVycmlkZGVuLCBzaW5jZSBpdCBoYXMgYmVlbgotCSAqIGluY3JlbWVudGVkIGJ5IHRoZSBmcmFnbWVudGF0aW9uIHJvdXRpbmUuCi0JICoKLQkgKiBGSVhNRTogY2hlY2sgaWYgdGhlIGZyYWdtZW50YXRpb24gdGhyZXNob2xkIGV4Y2VlZHMKLQkgKiBJRUVFODAyMTEgbWF4LgotCSAqLwotCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKLQloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYodGlkLT5zZXFfbmV4dCA8PAotCQkJSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQpOwotCWJmLT5iZl9zZXFubyA9IHRpZC0+c2VxX25leHQ7Ci0JSU5DUih0aWQtPnNlcV9uZXh0LCBJRUVFODAyMTFfU0VRX01BWCk7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0dXBfdHhfZmxhZ3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCWludCBmbGFncyA9IDA7Ci0KLQlmbGFncyB8PSBBVEg5S19UWERFU0NfQ0xSRE1BU0s7IC8qIG5lZWRlZCBmb3IgY3J5cHRvIGVycm9ycyAqLwotCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19JTlRSRVE7Ci0KLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKLQkJZmxhZ3MgfD0gQVRIOUtfVFhERVNDX05PQUNLOwotCWlmICh0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKQotCQlmbGFncyB8PSBBVEg5S19UWERFU0NfUlRTRU5BOwotCi0JcmV0dXJuIGZsYWdzOwotfQotCi1zdGF0aWMgc3RydWN0IGF0aF9idWYgKmF0aF90eF9nZXRfYnVmZmVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXN0cnVjdCBhdGhfYnVmICpiZiA9IE5VTEw7Ci0KLQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCi0JaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJnNjLT50eC50eGJ1ZikpKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZzYy0+dHgudHhidWYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQlsaXN0X2RlbCgmYmYtPmxpc3QpOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCi0JcmV0dXJuIGJmOwotfQotCi0vKiBUbyBjb21wbGV0ZSBhIGNoYWluIG9mIGJ1ZmZlcnMgYXNzb2NpYXRlZCBhIGZyYW1lICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZV9idWYoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJc3RydWN0IGF0aF9idWYgKmJmLAotCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCi0JCQkJaW50IHR4b2ssIGludCBzZW5kYmFyKQotewotCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKLQlzdHJ1Y3QgYXRoX3htaXRfc3RhdHVzIHR4X3N0YXR1czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyoKLQkgKiBTZXQgcmV0cnkgaW5mb3JtYXRpb24uCi0JICogTkI6IERvbid0IHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIGRlc2NyaXB0b3IsIGJlY2F1c2UgdGhlIGZyYW1lCi0JICogY291bGQgYmUgc29mdHdhcmUgcmV0cmllZC4KLQkgKi8KLQl0eF9zdGF0dXMucmV0cmllcyA9IGJmLT5iZl9yZXRyaWVzOwotCXR4X3N0YXR1cy5mbGFncyA9IDA7Ci0KLQlpZiAoc2VuZGJhcikKLQkJdHhfc3RhdHVzLmZsYWdzID0gQVRIX1RYX0JBUjsKLQotCWlmICghdHhvaykgewotCQl0eF9zdGF0dXMuZmxhZ3MgfD0gQVRIX1RYX0VSUk9SOwotCi0JCWlmIChiZl9pc3hyZXRyaWVkKGJmKSkKLQkJCXR4X3N0YXR1cy5mbGFncyB8PSBBVEhfVFhfWFJFVFJZOwotCX0KLQotCS8qIFVubWFwIHRoaXMgZnJhbWUgKi8KLQlwY2lfdW5tYXBfc2luZ2xlKHNjLT5wZGV2LAotCQkJIGJmLT5iZl9kbWFjb250ZXh0LAotCQkJIHNrYi0+bGVuLAotCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwotCS8qIGNvbXBsZXRlIHRoaXMgZnJhbWUgKi8KLQlhdGhfdHhfY29tcGxldGUoc2MsIHNrYiwgJnR4X3N0YXR1cyk7Ci0KLQkvKgotCSAqIFJldHVybiB0aGUgbGlzdCBvZiBhdGhfYnVmIG9mIHRoaXMgbXBkdSB0byBmcmVlIHF1ZXVlCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT50eC50eGJ1ZmxvY2ssIGZsYWdzKTsKLQlsaXN0X3NwbGljZV90YWlsX2luaXQoYmZfcSwgJnNjLT50eC50eGJ1Zik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnR4LnR4YnVmbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogcXVldWUgdXAgYSBkZXN0L2FjIHBhaXIgZm9yIHR4IHNjaGVkdWxpbmcKLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwotCiBzdGF0aWMgdm9pZCBhdGhfdHhfcXVldWVfdGlkKHN0cnVjdCBhdGhfdHhxICp0eHEsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQogewogCXN0cnVjdCBhdGhfYXR4X2FjICphYyA9IHRpZC0+YWM7CiAKLQkvKgotCSAqIGlmIHRpZCBpcyBwYXVzZWQsIGhvbGQgb2ZmCi0JICovCiAJaWYgKHRpZC0+cGF1c2VkKQogCQlyZXR1cm47CiAKLQkvKgotCSAqIGFkZCB0aWQgdG8gYWMgYXRtb3N0IG9uY2UKLQkgKi8KIAlpZiAodGlkLT5zY2hlZCkKIAkJcmV0dXJuOwogCiAJdGlkLT5zY2hlZCA9IHRydWU7CiAJbGlzdF9hZGRfdGFpbCgmdGlkLT5saXN0LCAmYWMtPnRpZF9xKTsKIAotCS8qCi0JICogYWRkIG5vZGUgYWMgdG8gdHhxIGF0bW9zdCBvbmNlCi0JICovCiAJaWYgKGFjLT5zY2hlZCkKIAkJcmV0dXJuOwogCkBAIC0zODksMjIgKzEwNSwxNiBAQAogCWxpc3RfYWRkX3RhaWwoJmFjLT5saXN0LCAmdHhxLT5heHFfYWNxKTsKIH0KIAotLyogcGF1c2UgYSB0aWQgKi8KLQogc3RhdGljIHZvaWQgYXRoX3R4X3BhdXNlX3RpZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7CiAJc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3RpZC0+YWMtPnFudW1dOwogCiAJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQogCXRpZC0+cGF1c2VkKys7Ci0KIAlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiB9CiAKLS8qIHJlc3VtZSBhIHRpZCBhbmQgc2NoZWR1bGUgYWdncmVnYXRlICovCi0KLXZvaWQgYXRoX3R4X3Jlc3VtZV90aWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQorc3RhdGljIHZvaWQgYXRoX3R4X3Jlc3VtZV90aWQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQogewogCXN0cnVjdCBhdGhfdHhxICp0eHEgPSAmc2MtPnR4LnR4cVt0aWQtPmFjLT5xbnVtXTsKIApAQCAtNDE5LDI4MCArMTI5LDEyIEBACiAJaWYgKGxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQogCQlnb3RvIHVubG9jazsKIAotCS8qCi0JICogQWRkIHRoaXMgVElEIHRvIHNjaGVkdWxlciBhbmQgdHJ5IHRvIHNlbmQgb3V0IGFnZ3JlZ2F0ZXMKLQkgKi8KIAlhdGhfdHhfcXVldWVfdGlkKHR4cSwgdGlkKTsKIAlhdGhfdHhxX3NjaGVkdWxlKHNjLCB0eHEpOwogdW5sb2NrOgogCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIH0KIAotLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJhZCBmcmFtZXMgKi8KLQotc3RhdGljIGludCBhdGhfdHhfbnVtX2JhZGZybXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCSAgICAgIGludCB0eG9rKQotewotCXN0cnVjdCBhdGhfYnVmICpiZl9sYXN0ID0gYmYtPmJmX2xhc3RiZjsKLQlzdHJ1Y3QgYXRoX2Rlc2MgKmRzID0gYmZfbGFzdC0+YmZfZGVzYzsKLQl1MTYgc2VxX3N0ID0gMDsKLQl1MzIgYmFbV01FX0JBX0JNUF9TSVpFID4+IDVdOwotCWludCBiYV9pbmRleDsKLQlpbnQgbmJhZCA9IDA7Ci0JaW50IGlzYWdnciA9IDA7Ci0KLQlpZiAoZHMtPmRzX3R4c3RhdC50c19mbGFncyA9PSBBVEg5S19UWF9TV19BQk9SVEVEKQotCQlyZXR1cm4gMDsKLQotCWlzYWdnciA9IGJmX2lzYWdncihiZik7Ci0JaWYgKGlzYWdncikgewotCQlzZXFfc3QgPSBBVEhfRFNfQkFfU0VRKGRzKTsKLQkJbWVtY3B5KGJhLCBBVEhfRFNfQkFfQklUTUFQKGRzKSwgV01FX0JBX0JNUF9TSVpFID4+IDMpOwotCX0KLQotCXdoaWxlIChiZikgewotCQliYV9pbmRleCA9IEFUSF9CQV9JTkRFWChzZXFfc3QsIGJmLT5iZl9zZXFubyk7Ci0JCWlmICghdHhvayB8fCAoaXNhZ2dyICYmICFBVEhfQkFfSVNTRVQoYmEsIGJhX2luZGV4KSkpCi0JCQluYmFkKys7Ci0KLQkJYmYgPSBiZi0+YmZfbmV4dDsKLQl9Ci0KLQlyZXR1cm4gbmJhZDsKLX0KLQotc3RhdGljIHZvaWQgYXRoX3R4X3NldF9yZXRyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQotewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQotCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9SRVRSWTsKLQliZi0+YmZfcmV0cmllcysrOwotCi0Jc2tiID0gYmYtPmJmX21wZHU7Ci0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSk7Ci19Ci0KLS8qIFVwZGF0ZSBibG9jayBhY2sgd2luZG93ICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF91cGRhdGVfYmF3KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKLQkJCSAgICAgIGludCBzZXFubykKLXsKLQlpbnQgaW5kZXgsIGNpbmRleDsKLQotCWluZGV4ICA9IEFUSF9CQV9JTkRFWCh0aWQtPnNlcV9zdGFydCwgc2Vxbm8pOwotCWNpbmRleCA9ICh0aWQtPmJhd19oZWFkICsgaW5kZXgpICYgKEFUSF9USURfTUFYX0JVRlMgLSAxKTsKLQotCXRpZC0+dHhfYnVmW2NpbmRleF0gPSBOVUxMOwotCi0Jd2hpbGUgKHRpZC0+YmF3X2hlYWQgIT0gdGlkLT5iYXdfdGFpbCAmJiAhdGlkLT50eF9idWZbdGlkLT5iYXdfaGVhZF0pIHsKLQkJSU5DUih0aWQtPnNlcV9zdGFydCwgSUVFRTgwMjExX1NFUV9NQVgpOwotCQlJTkNSKHRpZC0+YmF3X2hlYWQsIEFUSF9USURfTUFYX0JVRlMpOwotCX0KLX0KLQotLyoKLSAqIGF0aF9wa3RfZHVyIC0gY29tcHV0ZSBwYWNrZXQgZHVyYXRpb24gKE5COiBub3QgTkFWKQotICoKLSAqIHJpeCAtIHJhdGUgaW5kZXgKLSAqIHBrdGxlbiAtIHRvdGFsIGJ5dGVzIChkZWxpbXMgKyBkYXRhICsgZmNzICsgcGFkcyArIHBhZCBkZWxpbXMpCi0gKiB3aWR0aCAgLSAwIGZvciAyMCBNSHosIDEgZm9yIDQwIE1IegotICogaGFsZl9naSAtIHRvIHVzZSA0dXMgdi9zIDMuNiB1cyBmb3Igc3ltYm9sIHRpbWUKLSAqLwotc3RhdGljIHUzMiBhdGhfcGt0X2R1cmF0aW9uKHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1OCByaXgsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCSAgICBpbnQgd2lkdGgsIGludCBoYWxmX2dpLCBib29sIHNob3J0UHJlYW1ibGUpCi17Ci0Jc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCXUzMiBuYml0cywgbnN5bWJpdHMsIGR1cmF0aW9uLCBuc3ltYm9sczsKLQl1OCByYzsKLQlpbnQgc3RyZWFtcywgcGt0bGVuOwotCi0JcGt0bGVuID0gYmZfaXNhZ2dyKGJmKSA/IGJmLT5iZl9hbCA6IGJmLT5iZl9mcm1sZW47Ci0JcmMgPSByYXRlX3RhYmxlLT5pbmZvW3JpeF0ucmF0ZWNvZGU7Ci0KLQkvKiBmb3IgbGVnYWN5IHJhdGVzLCB1c2Ugb2xkIGZ1bmN0aW9uIHRvIGNvbXB1dGUgcGFja2V0IGR1cmF0aW9uICovCi0JaWYgKCFJU19IVF9SQVRFKHJjKSkKLQkJcmV0dXJuIGF0aDlrX2h3X2NvbXB1dGV0eHRpbWUoc2MtPnNjX2FoLCByYXRlX3RhYmxlLCBwa3RsZW4sCi0JCQkJCSAgICAgIHJpeCwgc2hvcnRQcmVhbWJsZSk7Ci0KLQkvKiBmaW5kIG51bWJlciBvZiBzeW1ib2xzOiBQTENQICsgZGF0YSAqLwotCW5iaXRzID0gKHBrdGxlbiA8PCAzKSArIE9GRE1fUExDUF9CSVRTOwotCW5zeW1iaXRzID0gYml0c19wZXJfc3ltYm9sW0hUX1JDXzJfTUNTKHJjKV1bd2lkdGhdOwotCW5zeW1ib2xzID0gKG5iaXRzICsgbnN5bWJpdHMgLSAxKSAvIG5zeW1iaXRzOwotCi0JaWYgKCFoYWxmX2dpKQotCQlkdXJhdGlvbiA9IFNZTUJPTF9USU1FKG5zeW1ib2xzKTsKLQllbHNlCi0JCWR1cmF0aW9uID0gU1lNQk9MX1RJTUVfSEFMRkdJKG5zeW1ib2xzKTsKLQotCS8qIGFkZHVwIGR1cmF0aW9uIGZvciBsZWdhY3kvaHQgdHJhaW5pbmcgYW5kIHNpZ25hbCBmaWVsZHMgKi8KLQlzdHJlYW1zID0gSFRfUkNfMl9TVFJFQU1TKHJjKTsKLQlkdXJhdGlvbiArPSBMX1NURiArIExfTFRGICsgTF9TSUcgKyBIVF9TSUcgKyBIVF9TVEYgKyBIVF9MVEYoc3RyZWFtcyk7Ci0KLQlyZXR1cm4gZHVyYXRpb247Ci19Ci0KLS8qIFJhdGUgbW9kdWxlIGZ1bmN0aW9uIHRvIHNldCByYXRlIHJlbGF0ZWQgZmllbGRzIGluIHR4IGRlc2NyaXB0b3IgKi8KLQotc3RhdGljIHZvaWQgYXRoX2J1Zl9zZXRfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQotewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJ0OwotCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZi0+YmZfZGVzYzsKLQlzdHJ1Y3QgYXRoX2Rlc2MgKmxhc3RkcyA9IGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2M7Ci0Jc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyBzZXJpZXNbNF07Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCWludCBpLCBmbGFncywgcnRzY3RzZW5hID0gMDsKLQl1MzIgY3RzZHVyYXRpb24gPSAwOwotCXU4IHJpeCA9IDAsIGNpeCwgY3RzcmF0ZSA9IDA7Ci0JX19sZTE2IGZjOwotCi0JbWVtc2V0KHNlcmllcywgMCwgc2l6ZW9mKHN0cnVjdCBhdGg5a18xMW5fcmF0ZV9zZXJpZXMpICogNCk7Ci0KLQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0JdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlyYXRlcyA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7Ci0KLQlpZiAoaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoZmMpIHx8Ci0JICAgIChsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpKSB7Ci0JCXJhdGVzWzFdLmNvdW50ID0gcmF0ZXNbMl0uY291bnQgPSByYXRlc1szXS5jb3VudCA9IDA7Ci0JCXJhdGVzWzFdLmlkeCA9IHJhdGVzWzJdLmlkeCA9IHJhdGVzWzNdLmlkeCA9IDA7Ci0JCXJhdGVzWzBdLmNvdW50ID0gQVRIX1RYTUFYVFJZOwotCX0KLQotCS8qIGdldCB0aGUgY2l4IGZvciB0aGUgbG93ZXN0IHZhbGlkIHJpeCAqLwotCXJ0ID0gc2MtPmN1cl9yYXRlX3RhYmxlOwotCWZvciAoaSA9IDM7IGkgPj0gMDsgaS0tKSB7Ci0JCWlmIChyYXRlc1tpXS5jb3VudCAmJiAocmF0ZXNbaV0uaWR4ID49IDApKSB7Ci0JCQlyaXggPSByYXRlc1tpXS5pZHg7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWZsYWdzID0gKGJmLT5iZl9mbGFncyAmIChBVEg5S19UWERFU0NfUlRTRU5BIHwgQVRIOUtfVFhERVNDX0NUU0VOQSkpOwotCWNpeCA9IHJ0LT5pbmZvW3JpeF0uY3RybF9yYXRlOwotCi0JLyoKLQkgKiBJZiA4MDIuMTFnIHByb3RlY3Rpb24gaXMgZW5hYmxlZCwgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gdXNlIFJUUy9DVFMgb3IKLQkgKiBqdXN0IENUUy4gIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgZG9uZSBmb3IgT0ZETS9IVCB1bmljYXN0IGZyYW1lcy4KLQkgKi8KLQlpZiAoc2MtPnNjX3Byb3Rtb2RlICE9IFBST1RfTV9OT05FICYmICEoYmYtPmJmX2ZsYWdzICYgQVRIOUtfVFhERVNDX05PQUNLKQotCSAgICAmJiAocnQtPmluZm9bcml4XS5waHkgPT0gV0xBTl9SQ19QSFlfT0ZETSB8fAotCQlXTEFOX1JDX1BIWV9IVChydC0+aW5mb1tyaXhdLnBoeSkpKSB7Ci0JCWlmIChzYy0+c2NfcHJvdG1vZGUgPT0gUFJPVF9NX1JUU0NUUykKLQkJCWZsYWdzID0gQVRIOUtfVFhERVNDX1JUU0VOQTsKLQkJZWxzZSBpZiAoc2MtPnNjX3Byb3Rtb2RlID09IFBST1RfTV9DVFNPTkxZKQotCQkJZmxhZ3MgPSBBVEg5S19UWERFU0NfQ1RTRU5BOwotCi0JCWNpeCA9IHJ0LT5pbmZvW3NjLT5zY19wcm90cml4XS5jdHJsX3JhdGU7Ci0JCXJ0c2N0c2VuYSA9IDE7Ci0JfQotCi0JLyogRm9yIDExbiwgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gZW5hYmxlIFJUUyBmb3IgaHcgcmV0cmllZCBmcmFtZXMuCi0JICogV2UgZW5hYmxlIHRoZSBnbG9iYWwgZmxhZyBoZXJlIGFuZCBsZXQgcmF0ZSBzZXJpZXMgZmxhZ3MgZGV0ZXJtaW5lCi0JICogd2hpY2ggcmF0ZXMgd2lsbCBhY3R1YWxseSB1c2UgUlRTLgotCSAqLwotCWlmICgoYWgtPmFoX2NhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgJiYgYmZfaXNkYXRhKGJmKSkgewotCQkvKiA4MDIuMTFnIHByb3RlY3Rpb24gbm90IG5lZWRlZCwgdXNlIG91ciBkZWZhdWx0IGJlaGF2aW9yICovCi0JCWlmICghcnRzY3RzZW5hKQotCQkJZmxhZ3MgPSBBVEg5S19UWERFU0NfUlRTRU5BOwotCX0KLQotCS8qIFNldCBwcm90ZWN0aW9uIGlmIGFnZ3JlZ2F0ZSBwcm90ZWN0aW9uIG9uICovCi0JaWYgKHNjLT5zY19jb25maWcuYXRoX2FnZ3JfcHJvdCAmJgotCSAgICAoIWJmX2lzYWdncihiZikgfHwgKGJmX2lzYWdncihiZikgJiYgYmYtPmJmX2FsIDwgODE5MikpKSB7Ci0JCWZsYWdzID0gQVRIOUtfVFhERVNDX1JUU0VOQTsKLQkJY2l4ID0gcnQtPmluZm9bc2MtPnNjX3Byb3RyaXhdLmN0cmxfcmF0ZTsKLQkJcnRzY3RzZW5hID0gMTsKLQl9Ci0KLQkvKiBGb3IgQVI1NDE2IC0gUlRTIGNhbm5vdCBiZSBmb2xsb3dlZCBieSBhIGZyYW1lIGxhcmdlciB0aGFuIDhLICovCi0JaWYgKGJmX2lzYWdncihiZikgJiYgKGJmLT5iZl9hbCA+IGFoLT5haF9jYXBzLnJ0c19hZ2dyX2xpbWl0KSkKLQkJZmxhZ3MgJj0gfihBVEg5S19UWERFU0NfUlRTRU5BKTsKLQotCS8qCi0JICogQ1RTIHRyYW5zbWl0IHJhdGUgaXMgZGVyaXZlZCBmcm9tIHRoZSB0cmFuc21pdCByYXRlIGJ5IGxvb2tpbmcgaW4gdGhlCi0JICogaC93IHJhdGUgdGFibGUuICBXZSBtdXN0IGFsc28gZmFjdG9yIGluIHdoZXRoZXIgb3Igbm90IGEgc2hvcnQKLQkgKiBwcmVhbWJsZSBpcyB0byBiZSB1c2VkLiBOQjogY2l4IGlzIHNldCBhYm92ZSB3aGVyZSBSVFMvQ1RTIGlzIGVuYWJsZWQKLQkgKi8KLQljdHNyYXRlID0gcnQtPmluZm9bY2l4XS5yYXRlY29kZSB8Ci0JCShiZl9pc3NocHJlYW1ibGUoYmYpID8gcnQtPmluZm9bY2l4XS5zaG9ydF9wcmVhbWJsZSA6IDApOwotCi0JZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlpZiAoIXJhdGVzW2ldLmNvdW50IHx8IChyYXRlc1tpXS5pZHggPCAwKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJpeCA9IHJhdGVzW2ldLmlkeDsKLQotCQlzZXJpZXNbaV0uUmF0ZSA9IHJ0LT5pbmZvW3JpeF0ucmF0ZWNvZGUgfAotCQkJKGJmX2lzc2hwcmVhbWJsZShiZikgPyBydC0+aW5mb1tyaXhdLnNob3J0X3ByZWFtYmxlIDogMCk7Ci0KLQkJc2VyaWVzW2ldLlRyaWVzID0gcmF0ZXNbaV0uY291bnQ7Ci0KLQkJc2VyaWVzW2ldLlJhdGVGbGFncyA9ICgKLQkJCShyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykgPwotCQkJCUFUSDlLX1JBVEVTRVJJRVNfUlRTX0NUUyA6IDApIHwKLQkJCSgocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSA/Ci0JCQkJQVRIOUtfUkFURVNFUklFU18yMDQwIDogMCkgfAotCQkJKChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkgPwotCQkJCUFUSDlLX1JBVEVTRVJJRVNfSEFMRkdJIDogMCk7Ci0KLQkJc2VyaWVzW2ldLlBrdER1cmF0aW9uID0gYXRoX3BrdF9kdXJhdGlvbihzYywgcml4LCBiZiwKLQkJCSAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSAhPSAwLAotCQkJIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSksCi0JCQkgYmZfaXNzaHByZWFtYmxlKGJmKSk7Ci0KLQkJc2VyaWVzW2ldLkNoU2VsID0gc2MtPnNjX3R4X2NoYWlubWFzazsKLQotCQlpZiAocnRzY3RzZW5hKQotCQkJc2VyaWVzW2ldLlJhdGVGbGFncyB8PSBBVEg5S19SQVRFU0VSSUVTX1JUU19DVFM7Ci0JfQotCi0JLyogc2V0IGR1cl91cGRhdGVfZW4gZm9yIGwtc2lnIGNvbXB1dGF0aW9uIGV4Y2VwdCBmb3IgUFMtUG9sbCBmcmFtZXMgKi8KLQlhdGg5a19od19zZXQxMW5fcmF0ZXNjZW5hcmlvKGFoLCBkcywgbGFzdGRzLCAhYmZfaXNwc3BvbGwoYmYpLAotCQkJCSAgICAgY3RzcmF0ZSwgY3RzZHVyYXRpb24sCi0JCQkJICAgICBzZXJpZXMsIDQsIGZsYWdzKTsKLQotCWlmIChzYy0+c2NfY29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYgZmxhZ3MpCi0JCWF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKGFoLCBkcywgODE5Mik7Ci19Ci0KLS8qCi0gKiBGdW5jdGlvbiB0byBzZW5kIGEgbm9ybWFsIEhUIChub24tQU1QRFUpIGZyYW1lCi0gKiBOQjogbXVzdCBiZSBjYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkCi0gKi8KLXN0YXRpYyBpbnQgYXRoX3R4X3NlbmRfbm9ybWFsKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgICAgc3RydWN0IGF0aF90eHEgKnR4cSwKLQkJCSAgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCkKLXsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0KLQlCVUdfT04obGlzdF9lbXB0eShiZl9oZWFkKSk7Ci0KLQliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCWJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfQU1QRFU7IC8qIHJlZ3VsYXIgSFQgZnJhbWUgKi8KLQotCS8qIHVwZGF0ZSBzdGFydGluZyBzZXF1ZW5jZSBudW1iZXIgZm9yIHN1YnNlcXVlbnQgQUREQkEgcmVxdWVzdCAqLwotCUlOQ1IodGlkLT5zZXFfc3RhcnQsIElFRUU4MDIxMV9TRVFfTUFYKTsKLQotCS8qIFF1ZXVlIHRvIGgvdyB3aXRob3V0IGFnZ3JlZ2F0aW9uICovCi0JYmYtPmJmX25mcmFtZXMgPSAxOwotCWJmLT5iZl9sYXN0YmYgPSBiZi0+YmZfbGFzdGZybTsgLyogb25lIHNpbmdsZSBmcmFtZSAqLwotCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKLQlhdGhfdHhfdHhxYWRkYnVmKHNjLCB0eHEsIGJmX2hlYWQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIGZsdXNoIHRpZCdzIHNvZnR3YXJlIHF1ZXVlIGFuZCBzZW5kIGZyYW1lcyBhcyBub24tYW1wZHUncyAqLwotCiBzdGF0aWMgdm9pZCBhdGhfdHhfZmx1c2hfdGlkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKIAlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gJnNjLT50eC50eHFbdGlkLT5hYy0+cW51bV07CkBAIC03MTMsNDY4ICsxNTUsMzAgQEAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKSB7CiAJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCQlBU1NFUlQoIWJmX2lzcmV0cmllZChiZikpOwotCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwgJnRpZC0+YnVmX3EsICZiZi0+YmZfbGFzdGZybS0+bGlzdCk7Ci0JCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhxLCB0aWQsICZiZl9oZWFkKTsKKwkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CisJCWF0aF90eF9zZW5kX2h0X25vcm1hbChzYywgdHhxLCB0aWQsICZiZl9oZWFkKTsKIAl9CiAKIAlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CiB9CiAKLS8qIENvbXBsZXRpb24gcm91dGluZSBvZiBhbiBhZ2dyZWdhdGUgKi8KLQotc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2FnZ3JfcmlmcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkgICAgICBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAotCQkJCSAgICAgIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xLAotCQkJCSAgICAgIGludCB0eG9rKQorc3RhdGljIHZvaWQgYXRoX3R4X3VwZGF0ZV9iYXcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJICAgICAgaW50IHNlcW5vKQogewotCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSBOVUxMOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkID0gTlVMTDsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmZfbGFzdCA9IGJmLT5iZl9sYXN0YmY7Ci0Jc3RydWN0IGF0aF9kZXNjICpkcyA9IGJmX2xhc3QtPmJmX2Rlc2M7Ci0Jc3RydWN0IGF0aF9idWYgKmJmX25leHQsICpiZl9sYXN0cSA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkLCBiZl9wZW5kaW5nOwotCXUxNiBzZXFfc3QgPSAwOwotCXUzMiBiYVtXTUVfQkFfQk1QX1NJWkUgPj4gNV07Ci0JaW50IGlzYWdnciwgdHhmYWlsLCB0eHBlbmRpbmcsIHNlbmRiYXIgPSAwLCBuZWVkcmVzZXQgPSAwOworCWludCBpbmRleCwgY2luZGV4OwogCi0Jc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0JdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlpbmRleCAgPSBBVEhfQkFfSU5ERVgodGlkLT5zZXFfc3RhcnQsIHNlcW5vKTsKKwljaW5kZXggPSAodGlkLT5iYXdfaGVhZCArIGluZGV4KSAmIChBVEhfVElEX01BWF9CVUZTIC0gMSk7CiAKLQlpZiAodHhfaW5mby0+Y29udHJvbC5zdGEpIHsKLQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OwotCQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIGJmLT5iZl90aWRubyk7Ci0JfQorCXRpZC0+dHhfYnVmW2NpbmRleF0gPSBOVUxMOwogCi0JaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKLQlpZiAoaXNhZ2dyKSB7Ci0JCWlmICh0eG9rKSB7Ci0JCQlpZiAoQVRIX0RTX1RYX0JBKGRzKSkgewotCQkJCS8qCi0JCQkJICogZXh0cmFjdCBzdGFydGluZyBzZXF1ZW5jZSBhbmQKLQkJCQkgKiBibG9jay1hY2sgYml0bWFwCi0JCQkJICovCi0JCQkJc2VxX3N0ID0gQVRIX0RTX0JBX1NFUShkcyk7Ci0JCQkJbWVtY3B5KGJhLAotCQkJCQlBVEhfRFNfQkFfQklUTUFQKGRzKSwKLQkJCQkJV01FX0JBX0JNUF9TSVpFID4+IDMpOwotCQkJfSBlbHNlIHsKLQkJCQltZW1zZXQoYmEsIDAsIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKLQotCQkJCS8qCi0JCQkJICogQVI1NDE2IGNhbiBiZWNvbWUgZGVhZi9tdXRlIHdoZW4gQkEKLQkJCQkgKiBpc3N1ZSBoYXBwZW5zLiBDaGlwIG5lZWRzIHRvIGJlIHJlc2V0LgotCQkJCSAqIEJ1dCBBUCBjb2RlIG1heSBoYXZlIHN5Y2hyb25pemF0aW9uIGlzc3VlcwotCQkJCSAqIHdoZW4gcGVyZm9ybSBpbnRlcm5hbCByZXNldCBpbiB0aGlzIHJvdXRpbmUuCi0JCQkJICogT25seSBlbmFibGUgcmVzZXQgaW4gU1RBIG1vZGUgZm9yIG5vdy4KLQkJCQkgKi8KLQkJCQlpZiAoc2MtPnNjX2FoLT5haF9vcG1vZGUgPT0KLQkJCQkJICAgIE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQkJCW5lZWRyZXNldCA9IDE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQltZW1zZXQoYmEsIDAsIFdNRV9CQV9CTVBfU0laRSA+PiAzKTsKLQkJfQotCX0KLQotCUlOSVRfTElTVF9IRUFEKCZiZl9wZW5kaW5nKTsKLQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0KLQl3aGlsZSAoYmYpIHsKLQkJdHhmYWlsID0gdHhwZW5kaW5nID0gMDsKLQkJYmZfbmV4dCA9IGJmLT5iZl9uZXh0OwotCi0JCWlmIChBVEhfQkFfSVNTRVQoYmEsIEFUSF9CQV9JTkRFWChzZXFfc3QsIGJmLT5iZl9zZXFubykpKSB7Ci0JCQkvKiB0cmFuc21pdCBjb21wbGV0aW9uLCBzdWJmcmFtZSBpcwotCQkJICogYWNrZWQgYnkgYmxvY2sgYWNrICovCi0JCX0gZWxzZSBpZiAoIWlzYWdnciAmJiB0eG9rKSB7Ci0JCQkvKiB0cmFuc21pdCBjb21wbGV0aW9uICovCi0JCX0gZWxzZSB7Ci0KLQkJCWlmICghKHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApICYmCi0JCQkgICAgZHMtPmRzX3R4c3RhdC50c19mbGFncyAhPSBBVEg5S19UWF9TV19BQk9SVEVEKSB7Ci0JCQkJaWYgKGJmLT5iZl9yZXRyaWVzIDwgQVRIX01BWF9TV19SRVRSSUVTKSB7Ci0JCQkJCWF0aF90eF9zZXRfcmV0cnkoc2MsIGJmKTsKLQkJCQkJdHhwZW5kaW5nID0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfWFJFVFJZOwotCQkJCQl0eGZhaWwgPSAxOwotCQkJCQlzZW5kYmFyID0gMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogY2xlYW51cCBpbiBwcm9ncmVzcywganVzdCBmYWlsCi0JCQkJICogdGhlIHVuLWFja2VkIHN1Yi1mcmFtZXMKLQkJCQkgKi8KLQkJCQl0eGZhaWwgPSAxOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAqIFJlbW92ZSBhdGhfYnVmJ3Mgb2YgdGhpcyBzdWItZnJhbWUgZnJvbSBhZ2dyZWdhdGUgcXVldWUuCi0JCSAqLwotCQlpZiAoYmZfbmV4dCA9PSBOVUxMKSB7ICAvKiBsYXN0IHN1YmZyYW1lIGluIHRoZSBhZ2dyZWdhdGUgKi8KLQkJCUFTU0VSVChiZi0+YmZfbGFzdGZybSA9PSBiZl9sYXN0KTsKLQotCQkJLyoKLQkJCSAqIFRoZSBsYXN0IGRlc2NyaXB0b3Igb2YgdGhlIGxhc3Qgc3ViIGZyYW1lIGNvdWxkIGJlCi0JCQkgKiBhIGhvbGRpbmcgZGVzY3JpcHRvciBmb3IgaC93LiBJZiB0aGF0J3MgdGhlIGNhc2UsCi0JCQkgKiBiZi0+YmZfbGFzdGZybSB3b24ndCBiZSBpbiB0aGUgYmZfcS4KLQkJCSAqIE1ha2Ugc3VyZSB3ZSBoYW5kbGUgYmZfcSBwcm9wZXJseSBoZXJlLgotCQkJICovCi0KLQkJCWlmICghbGlzdF9lbXB0eShiZl9xKSkgewotCQkJCWJmX2xhc3RxID0gbGlzdF9lbnRyeShiZl9xLT5wcmV2LAotCQkJCQlzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCi0JCQkJCWJmX3EsICZiZl9sYXN0cS0+bGlzdCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogWFhYOiBpZiB0aGUgbGFzdCBzdWJmcmFtZSBvbmx5IGhhcyBvbmUKLQkJCQkgKiBkZXNjcmlwdG9yIHdoaWNoIGlzIGFsc28gYmVpbmcgdXNlZCBhcwotCQkJCSAqIGEgaG9sZGluZyBkZXNjcmlwdG9yLiBUaGVuIHRoZSBhdGhfYnVmCi0JCQkJICogaXMgbm90IGluIHRoZSBiZl9xIGF0IGFsbC4KLQkJCQkgKi8KLQkJCQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlBU1NFUlQoIWxpc3RfZW1wdHkoYmZfcSkpOwotCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCi0JCQkJYmZfcSwgJmJmLT5iZl9sYXN0ZnJtLT5saXN0KTsKLQkJfQotCi0JCWlmICghdHhwZW5kaW5nKSB7Ci0JCQkvKgotCQkJICogY29tcGxldGUgdGhlIGFja2VkLW9uZXMveHJldHJpZWQgb25lczsgdXBkYXRlCi0JCQkgKiBibG9jay1hY2sgd2luZG93Ci0JCQkgKi8KLQkJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOwotCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCi0JCQkvKiBjb21wbGV0ZSB0aGlzIHN1Yi1mcmFtZSAqLwotCQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAhdHhmYWlsLCBzZW5kYmFyKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiByZXRyeSB0aGUgdW4tYWNrZWQgb25lcwotCQkJICovCi0JCQkvKgotCQkJICogWFhYOiBpZiB0aGUgbGFzdCBkZXNjcmlwdG9yIGlzIGhvbGRpbmcgZGVzY3JpcHRvciwKLQkJCSAqIGluIG9yZGVyIHRvIHJlcXVldWUgdGhlIGZyYW1lIHRvIHNvZnR3YXJlIHF1ZXVlLCB3ZQotCQkJICogbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBkZXNjcmlwdG9yIGFuZAotCQkJICogY29weSB0aGUgY29udGVudCBvZiBob2xkaW5nIGRlc2NyaXB0b3IgdG8gaXQuCi0JCQkgKi8KLQkJCWlmIChiZi0+YmZfbmV4dCA9PSBOVUxMICYmCi0JCQkgICAgYmZfbGFzdC0+YmZfc3RhdHVzICYgQVRIX0JVRlNUQVRVU19TVEFMRSkgewotCQkJCXN0cnVjdCBhdGhfYnVmICp0YmY7Ci0KLQkJCQkvKiBhbGxvY2F0ZSBuZXcgZGVzY3JpcHRvciAqLwotCQkJCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0JCQkJQVNTRVJUKCFsaXN0X2VtcHR5KCgmc2MtPnR4LnR4YnVmKSkpOwotCQkJCXRiZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1ZiwKLQkJCQkJCXN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJCQlsaXN0X2RlbCgmdGJmLT5saXN0KTsKLQkJCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQkJCQlBVEhfVFhCVUZfUkVTRVQodGJmKTsKLQotCQkJCS8qIGNvcHkgZGVzY3JpcHRvciBjb250ZW50ICovCi0JCQkJdGJmLT5iZl9tcGR1ID0gYmZfbGFzdC0+YmZfbXBkdTsKLQkJCQl0YmYtPmJmX2J1Zl9hZGRyID0gYmZfbGFzdC0+YmZfYnVmX2FkZHI7Ci0JCQkJKih0YmYtPmJmX2Rlc2MpID0gKihiZl9sYXN0LT5iZl9kZXNjKTsKLQotCQkJCS8qIGxpbmsgaXQgdG8gdGhlIGZyYW1lICovCi0JCQkJaWYgKGJmX2xhc3RxKSB7Ci0JCQkJCWJmX2xhc3RxLT5iZl9kZXNjLT5kc19saW5rID0KLQkJCQkJCXRiZi0+YmZfZGFkZHI7Ci0JCQkJCWJmLT5iZl9sYXN0ZnJtID0gdGJmOwotCQkJCQlhdGg5a19od19jbGVhcnR4ZGVzYyhzYy0+c2NfYWgsCi0JCQkJCQliZi0+YmZfbGFzdGZybS0+YmZfZGVzYyk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJdGJmLT5iZl9zdGF0ZSA9IGJmX2xhc3QtPmJmX3N0YXRlOwotCQkJCQl0YmYtPmJmX2xhc3Rmcm0gPSB0YmY7Ci0JCQkJCWF0aDlrX2h3X2NsZWFydHhkZXNjKHNjLT5zY19haCwKLQkJCQkJCXRiZi0+YmZfbGFzdGZybS0+YmZfZGVzYyk7Ci0KLQkJCQkJLyogY29weSB0aGUgRE1BIGNvbnRleHQgKi8KLQkJCQkJdGJmLT5iZl9kbWFjb250ZXh0ID0KLQkJCQkJCWJmX2xhc3QtPmJmX2RtYWNvbnRleHQ7Ci0JCQkJfQotCQkJCWxpc3RfYWRkX3RhaWwoJnRiZi0+bGlzdCwgJmJmX2hlYWQpOwotCQkJfSBlbHNlIHsKLQkJCQkvKgotCQkJCSAqIENsZWFyIGRlc2NyaXB0b3Igc3RhdHVzIHdvcmRzIGZvcgotCQkJCSAqIHNvZnR3YXJlIHJldHJ5Ci0JCQkJICovCi0JCQkJYXRoOWtfaHdfY2xlYXJ0eGRlc2Moc2MtPnNjX2FoLAotCQkJCQkJICAgICBiZi0+YmZfbGFzdGZybS0+YmZfZGVzYyk7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBQdXQgdGhpcyBidWZmZXIgdG8gdGhlIHRlbXBvcmFyeSBwZW5kaW5nCi0JCQkgKiBxdWV1ZSB0byByZXRhaW4gb3JkZXJpbmcKLQkJCSAqLwotCQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZiZl9oZWFkLCAmYmZfcGVuZGluZyk7Ci0JCX0KLQotCQliZiA9IGJmX25leHQ7Ci0JfQotCi0JaWYgKHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApIHsKLQkJLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIGRvbmUgd2l0aCBjbGVhbmluZyB0aGUgaC93IHF1ZXVlICovCi0JCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJaWYgKHRpZC0+YmF3X2hlYWQgPT0gdGlkLT5iYXdfdGFpbCkgewotCQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9DT01QTEVURTsKLQkJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7Ci0JCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKLQotCQkJLyogc2VuZCBidWZmZXJlZCBmcmFtZXMgYXMgc2luZ2xlcyAqLwotCQkJYXRoX3R4X2ZsdXNoX3RpZChzYywgdGlkKTsKLQkJfSBlbHNlCi0JCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0KLQkJcmV0dXJuOwotCX0KLQotCS8qCi0JICogcHJlcGVuZCB1bi1hY2tlZCBmcmFtZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGVuZGluZyBmcmFtZSBxdWV1ZQotCSAqLwotCWlmICghbGlzdF9lbXB0eSgmYmZfcGVuZGluZykpIHsKLQkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJLyogTm90ZTogd2UgX3ByZXBlbmRfLCB3ZSBfZG9fbm90XyBhdCB0bwotCQkgKiB0aGUgZW5kIG9mIHRoZSBxdWV1ZSAhICovCi0JCWxpc3Rfc3BsaWNlKCZiZl9wZW5kaW5nLCAmdGlkLT5idWZfcSk7Ci0JCWF0aF90eF9xdWV1ZV90aWQodHhxLCB0aWQpOwotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JfQotCi0JaWYgKG5lZWRyZXNldCkKLQkJYXRoX3Jlc2V0KHNjLCBmYWxzZSk7Ci0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF90eF9yY19zdGF0dXMoc3RydWN0IGF0aF9idWYgKmJmLCBzdHJ1Y3QgYXRoX2Rlc2MgKmRzLCBpbnQgbmJhZCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOwotCi0JdHhfaW5mb19wcml2LT51cGRhdGVfcmMgPSBmYWxzZTsKLQlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKQotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9UWF9GSUxURVJFRDsKLQotCWlmICgoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9GSUxUKSA9PSAwICYmCi0JICAgIChiZi0+YmZfZmxhZ3MgJiBBVEg5S19UWERFU0NfTk9BQ0spID09IDApIHsKLQkJaWYgKGJmX2lzZGF0YShiZikpIHsKLQkJCW1lbWNweSgmdHhfaW5mb19wcml2LT50eCwgJmRzLT5kc190eHN0YXQsCi0JCQkgICAgICAgc2l6ZW9mKHR4X2luZm9fcHJpdi0+dHgpKTsKLQkJCXR4X2luZm9fcHJpdi0+bl9mcmFtZXMgPSBiZi0+YmZfbmZyYW1lczsKLQkJCXR4X2luZm9fcHJpdi0+bl9iYWRfZnJhbWVzID0gbmJhZDsKLQkJCXR4X2luZm9fcHJpdi0+dXBkYXRlX3JjID0gdHJ1ZTsKLQkJfQorCXdoaWxlICh0aWQtPmJhd19oZWFkICE9IHRpZC0+YmF3X3RhaWwgJiYgIXRpZC0+dHhfYnVmW3RpZC0+YmF3X2hlYWRdKSB7CisJCUlOQ1IodGlkLT5zZXFfc3RhcnQsIElFRUU4MDIxMV9TRVFfTUFYKTsKKwkJSU5DUih0aWQtPmJhd19oZWFkLCBBVEhfVElEX01BWF9CVUZTKTsKIAl9CiB9CiAKLS8qIFByb2Nlc3MgY29tcGxldGVkIHhtaXQgZGVzY3JpcHRvcnMgZnJvbSB0aGUgc3BlY2lmaWVkIHF1ZXVlICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF9wcm9jZXNzcShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0Jc3RydWN0IGF0aF9idWYgKmJmLCAqbGFzdGJmLCAqYmZfaGVsZCA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwotCXN0cnVjdCBhdGhfZGVzYyAqZHM7Ci0JaW50IHR4b2ssIG5iYWQgPSAwOwotCWludCBzdGF0dXM7Ci0KLQlEUFJJTlRGKHNjLCBBVEhfREJHX1FVRVVFLCAidHggcXVldWUgJWQgKCV4KSwgbGluayAlcFxuIiwKLQkJdHhxLT5heHFfcW51bSwgYXRoOWtfaHdfZ2V0dHhidWYoc2MtPnNjX2FoLCB0eHEtPmF4cV9xbnVtKSwKLQkJdHhxLT5heHFfbGluayk7Ci0KLQlmb3IgKDs7KSB7Ci0JCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCWlmIChsaXN0X2VtcHR5KCZ0eHEtPmF4cV9xKSkgewotCQkJdHhxLT5heHFfbGluayA9IE5VTEw7Ci0JCQl0eHEtPmF4cV9saW5rYnVmID0gTlVMTDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdHhxLT5heHFfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCi0JCS8qCi0JCSAqIFRoZXJlIGlzIGEgcmFjZSBjb25kaXRpb24gdGhhdCBhIEJIIGdldHMgc2NoZWR1bGVkCi0JCSAqIGFmdGVyIHN3IHdyaXRlcyBUeEUgYW5kIGJlZm9yZSBodyByZS1sb2FkIHRoZSBsYXN0Ci0JCSAqIGRlc2NyaXB0b3IgdG8gZ2V0IHRoZSBuZXdseSBjaGFpbmVkIG9uZS4KLQkJICogU29mdHdhcmUgbXVzdCBrZWVwIHRoZSBsYXN0IERPTkUgZGVzY3JpcHRvciBhcyBhCi0JCSAqIGhvbGRpbmcgZGVzY3JpcHRvciAtIHNvZnR3YXJlIGRvZXMgc28gYnkgbWFya2luZwotCQkgKiBpdCB3aXRoIHRoZSBTVEFMRSBmbGFnLgotCQkgKi8KLQkJYmZfaGVsZCA9IE5VTEw7Ci0JCWlmIChiZi0+YmZfc3RhdHVzICYgQVRIX0JVRlNUQVRVU19TVEFMRSkgewotCQkJYmZfaGVsZCA9IGJmOwotCQkJaWYgKGxpc3RfaXNfbGFzdCgmYmZfaGVsZC0+bGlzdCwgJnR4cS0+YXhxX3EpKSB7Ci0JCQkJLyogRklYTUU6Ci0JCQkJICogVGhlIGhvbGRpbmcgZGVzY3JpcHRvciBpcyB0aGUgbGFzdAotCQkJCSAqIGRlc2NyaXB0b3IgaW4gcXVldWUuIEl0J3Mgc2FmZSB0byByZW1vdmUKLQkJCQkgKiB0aGUgbGFzdCBob2xkaW5nIGRlc2NyaXB0b3IgaW4gQkggY29udGV4dC4KLQkJCQkgKi8KLQkJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgewotCQkJCS8qIExldHMgd29yayB3aXRoIHRoZSBuZXh0IGJ1ZmZlciBub3cgKi8KLQkJCQliZiA9IGxpc3RfZW50cnkoYmZfaGVsZC0+bGlzdC5uZXh0LAotCQkJCQlzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JCQl9Ci0JCX0KLQotCQlsYXN0YmYgPSBiZi0+YmZfbGFzdGJmOwotCQlkcyA9IGxhc3RiZi0+YmZfZGVzYzsgICAgLyogTkI6IGxhc3QgZGVjcmlwdG9yICovCi0KLQkJc3RhdHVzID0gYXRoOWtfaHdfdHhwcm9jZGVzYyhhaCwgZHMpOwotCQlpZiAoc3RhdHVzID09IC1FSU5QUk9HUkVTUykgewotCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGJmLT5iZl9kZXNjID09IHR4cS0+YXhxX2xhc3Rkc1dpdGhDVFMpCi0JCQl0eHEtPmF4cV9sYXN0ZHNXaXRoQ1RTID0gTlVMTDsKLQkJaWYgKGRzID09IHR4cS0+YXhxX2dhdGluZ2RzKQotCQkJdHhxLT5heHFfZ2F0aW5nZHMgPSBOVUxMOwotCi0JCS8qCi0JCSAqIFJlbW92ZSBhdGhfYnVmJ3Mgb2YgdGhlIHNhbWUgdHJhbnNtaXQgdW5pdCBmcm9tIHR4cSwKLQkJICogaG93ZXZlciBsZWF2ZSB0aGUgbGFzdCBkZXNjcmlwdG9yIGJhY2sgYXMgdGhlIGhvbGRpbmcKLQkJICogZGVzY3JpcHRvciBmb3IgaHcuCi0JCSAqLwotCQlsYXN0YmYtPmJmX3N0YXR1cyB8PSBBVEhfQlVGU1RBVFVTX1NUQUxFOwotCQlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7Ci0KLQkJaWYgKCFsaXN0X2lzX3Npbmd1bGFyKCZsYXN0YmYtPmxpc3QpKQotCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCi0JCQkJJnR4cS0+YXhxX3EsIGxhc3RiZi0+bGlzdC5wcmV2KTsKLQotCQl0eHEtPmF4cV9kZXB0aC0tOwotCi0JCWlmIChiZl9pc2FnZ3IoYmYpKQotCQkJdHhxLT5heHFfYWdncl9kZXB0aC0tOwotCi0JCXR4b2sgPSAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgPT0gMCk7Ci0KLQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCi0JCWlmIChiZl9oZWxkKSB7Ci0JCQlsaXN0X2RlbCgmYmZfaGVsZC0+bGlzdCk7Ci0JCQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCQkJbGlzdF9hZGRfdGFpbCgmYmZfaGVsZC0+bGlzdCwgJnNjLT50eC50eGJ1Zik7Ci0JCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0JCX0KLQotCQlpZiAoIWJmX2lzYW1wZHUoYmYpKSB7Ci0JCQkvKgotCQkJICogVGhpcyBmcmFtZSBpcyBzZW50IG91dCBhcyBhIHNpbmdsZSBmcmFtZS4KLQkJCSAqIFVzZSBoYXJkd2FyZSByZXRyeSBzdGF0dXMgZm9yIHRoaXMgZnJhbWUuCi0JCQkgKi8KLQkJCWJmLT5iZl9yZXRyaWVzID0gZHMtPmRzX3R4c3RhdC50c19sb25ncmV0cnk7Ci0JCQlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9YUkVUUlkpCi0JCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1hSRVRSWTsKLQkJCW5iYWQgPSAwOwotCQl9IGVsc2UgewotCQkJbmJhZCA9IGF0aF90eF9udW1fYmFkZnJtcyhzYywgYmYsIHR4b2spOwotCQl9Ci0KLQkJYXRoX3R4X3JjX3N0YXR1cyhiZiwgZHMsIG5iYWQpOwotCi0JCS8qCi0JCSAqIENvbXBsZXRlIHRoaXMgdHJhbnNtaXQgdW5pdAotCQkgKi8KLQkJaWYgKGJmX2lzYW1wZHUoYmYpKQotCQkJYXRoX3R4X2NvbXBsZXRlX2FnZ3JfcmlmcyhzYywgdHhxLCBiZiwgJmJmX2hlYWQsIHR4b2spOwotCQllbHNlCi0JCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIHR4b2ssIDApOwotCi0JCS8qIFdha2UgdXAgbWFjODAyMTEgcXVldWUgKi8KLQotCQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlpZiAodHhxLT5zdG9wcGVkICYmIGF0aF90eHFfZGVwdGgoc2MsIHR4cS0+YXhxX3FudW0pIDw9Ci0JCQkJKEFUSF9UWEJVRiAtIDIwKSkgewotCQkJaW50IHFudW07Ci0JCQlxbnVtID0gYXRoX2dldF9tYWM4MDIxMV9xbnVtKHR4cS0+YXhxX3FudW0sIHNjKTsKLQkJCWlmIChxbnVtICE9IC0xKSB7Ci0JCQkJaWVlZTgwMjExX3dha2VfcXVldWUoc2MtPmh3LCBxbnVtKTsKLQkJCQl0eHEtPnN0b3BwZWQgPSAwOwotCQkJfQotCi0JCX0KLQotCQkvKgotCQkgKiBzY2hlZHVsZSBhbnkgcGVuZGluZyBwYWNrZXRzIGlmIGFnZ3JlZ2F0aW9uIGlzIGVuYWJsZWQKLQkJICovCi0JCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpCi0JCQlhdGhfdHhxX3NjaGVkdWxlKHNjLCB0eHEpOwotCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBhdGhfdHhfc3RvcGRtYShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0KLQkodm9pZCkgYXRoOWtfaHdfc3RvcHR4ZG1hKGFoLCB0eHEtPmF4cV9xbnVtKTsKLQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJ0eCBxdWV1ZSBbJXVdICV4LCBsaW5rICVwXG4iLAotCQl0eHEtPmF4cV9xbnVtLCBhdGg5a19od19nZXR0eGJ1ZihhaCwgdHhxLT5heHFfcW51bSksCi0JCXR4cS0+YXhxX2xpbmspOwotfQotCi0vKiBEcmFpbiBvbmx5IHRoZSBkYXRhIHF1ZXVlcyAqLwotCi1zdGF0aWMgdm9pZCBhdGhfZHJhaW5fdHhkYXRhcShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCkKLXsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0JaW50IGksIHN0YXR1cywgbnBlbmQgPSAwOwotCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgewotCQkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKSB7Ci0JCQkJYXRoX3R4X3N0b3BkbWEoc2MsICZzYy0+dHgudHhxW2ldKTsKLQkJCQkvKiBUaGUgVHhETUEgbWF5IG5vdCByZWFsbHkgYmUgc3RvcHBlZC4KLQkJCQkgKiBEb3VibGUgY2hlY2sgdGhlIGhhbCB0eCBwZW5kaW5nIGNvdW50ICovCi0JCQkJbnBlbmQgKz0gYXRoOWtfaHdfbnVtdHhwZW5kaW5nKGFoLAotCQkJCQkJICAgICAgIHNjLT50eC50eHFbaV0uYXhxX3FudW0pOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKG5wZW5kKSB7Ci0JCS8qIFR4RE1BIG5vdCBzdG9wcGVkLCByZXNldCB0aGUgaGFsICovCi0JCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIlVuYWJsZSB0byBzdG9wIFR4RE1BLiBSZXNldCBIQUwhXG4iKTsKLQotCQlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOwotCQlpZiAoIWF0aDlrX2h3X3Jlc2V0KGFoLAotCQkJCSAgICBzYy0+c2NfYWgtPmFoX2N1cmNoYW4sCi0JCQkJICAgIHNjLT50eF9jaGFuX3dpZHRoLAotCQkJCSAgICBzYy0+c2NfdHhfY2hhaW5tYXNrLCBzYy0+c2NfcnhfY2hhaW5tYXNrLAotCQkJCSAgICBzYy0+c2NfaHRfZXh0cHJvdHNwYWNpbmcsIHRydWUsICZzdGF0dXMpKSB7Ci0KLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIlVuYWJsZSB0byByZXNldCBoYXJkd2FyZTsgaGFsIHN0YXR1cyAldVxuIiwKLQkJCQlzdGF0dXMpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKLQkJCWF0aF90eF9kcmFpbnR4cShzYywgJnNjLT50eC50eHFbaV0sIHJldHJ5X3R4KTsKLQl9Ci19Ci0KLS8qIEFkZCBhIHN1Yi1mcmFtZSB0byBibG9jayBhY2sgd2luZG93ICovCi0KLXN0YXRpYyB2b2lkIGF0aF90eF9hZGR0b19iYXcoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorc3RhdGljIHZvaWQgYXRoX3R4X2FkZHRvX2JhdyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCiAJCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZikKIHsKIAlpbnQgaW5kZXgsIGNpbmRleDsKQEAgLTExOTYsNTggKzIwMCwyMzkgQEAKIH0KIAogLyoKLSAqIEZ1bmN0aW9uIHRvIHNlbmQgYW4gQS1NUERVCi0gKiBOQjogbXVzdCBiZSBjYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkCisgKiBUT0RPOiBGb3IgZnJhbWUocykgdGhhdCBhcmUgaW4gdGhlIHJldHJ5IHN0YXRlLCB3ZSB3aWxsIHJldXNlIHRoZQorICogc2VxdWVuY2UgbnVtYmVyKHMpIHdpdGhvdXQgc2V0dGluZyB0aGUgcmV0cnkgYml0LiBUaGUKKyAqIGFsdGVybmF0aXZlIGlzIHRvIGdpdmUgdXAgb24gdGhlc2UgYW5kIEJBUiB0aGUgcmVjZWl2ZXIncyB3aW5kb3cKKyAqIGZvcndhcmQuCiAgKi8KLXN0YXRpYyBpbnQgYXRoX3R4X3NlbmRfYW1wZHUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZl9oZWFkLAotCQkJICAgICBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQorc3RhdGljIHZvaWQgYXRoX3RpZF9kcmFpbihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCSAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCisKIHsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOworCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKIAotCUJVR19PTihsaXN0X2VtcHR5KGJmX2hlYWQpKTsKKwlmb3IgKDs7KSB7CisJCWlmIChsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSkKKwkJCWJyZWFrOwogCi0JYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGJmX2hlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQliZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfQU1QRFU7CisJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmdGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKIAotCS8qCi0JICogRG8gbm90IHF1ZXVlIHRvIGgvdyB3aGVuIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKLQkgKiAtIHRoZXJlIGFyZSBwZW5kaW5nIGZyYW1lcyBpbiBzb2Z0d2FyZSBxdWV1ZQotCSAqIC0gdGhlIFRJRCBpcyBjdXJyZW50bHkgcGF1c2VkIGZvciBBRERCQS9CQVIgcmVxdWVzdAotCSAqIC0gc2Vxbm8gaXMgbm90IHdpdGhpbiBibG9jay1hY2sgd2luZG93Ci0JICogLSBoL3cgcXVldWUgZGVwdGggZXhjZWVkcyBsb3cgd2F0ZXIgbWFyawotCSAqLwotCWlmICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkgfHwgdGlkLT5wYXVzZWQgfHwKLQkgICAgIUJBV19XSVRISU4odGlkLT5zZXFfc3RhcnQsIHRpZC0+YmF3X3NpemUsIGJmLT5iZl9zZXFubykgfHwKLQkgICAgdHhjdGwtPnR4cS0+YXhxX2RlcHRoID49IEFUSF9BR0dSX01JTl9RREVQVEgpIHsKLQkJLyoKLQkJICogQWRkIHRoaXMgZnJhbWUgdG8gc29mdHdhcmUgcXVldWUgZm9yIHNjaGVkdWxpbmcgbGF0ZXIKLQkJICogZm9yIGFnZ3JlZ2F0aW9uLgotCQkgKi8KLQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KGJmX2hlYWQsICZ0aWQtPmJ1Zl9xKTsKLQkJYXRoX3R4X3F1ZXVlX3RpZCh0eGN0bC0+dHhxLCB0aWQpOwotCQlyZXR1cm4gMDsKKwkJaWYgKGJmX2lzcmV0cmllZChiZikpCisJCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOworCisJCXNwaW5fdW5sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKKwkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKKwkJc3Bpbl9sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKIAl9CiAKLQkvKiBBZGQgc3ViLWZyYW1lIHRvIEJBVyAqLwotCWF0aF90eF9hZGR0b19iYXcoc2MsIHRpZCwgYmYpOwotCi0JLyogUXVldWUgdG8gaC93IHdpdGhvdXQgYWdncmVnYXRpb24gKi8KLQliZi0+YmZfbmZyYW1lcyA9IDE7Ci0JYmYtPmJmX2xhc3RiZiA9IGJmLT5iZl9sYXN0ZnJtOyAvKiBvbmUgc2luZ2xlIGZyYW1lICovCi0JYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOwotCWF0aF90eF90eHFhZGRidWYoc2MsIHR4Y3RsLT50eHEsIGJmX2hlYWQpOwotCi0JcmV0dXJuIDA7CisJdGlkLT5zZXFfbmV4dCA9IHRpZC0+c2VxX3N0YXJ0OworCXRpZC0+YmF3X3RhaWwgPSB0aWQtPmJhd19oZWFkOwogfQogCi0vKgotICogbG9va3MgdXAgdGhlIHJhdGUKLSAqIHJldHVybnMgYWdnciBsaW1pdCBiYXNlZCBvbiBsb3dlc3Qgb2YgdGhlIHJhdGVzCi0gKi8KLXN0YXRpYyB1MzIgYXRoX2xvb2t1cF9yYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJICAgc3RydWN0IGF0aF9idWYgKmJmLAorc3RhdGljIHZvaWQgYXRoX3R4X3NldF9yZXRyeShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKworCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9SRVRSWTsKKwliZi0+YmZfcmV0cmllcysrOworCisJc2tiID0gYmYtPmJmX21wZHU7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiogYXRoX2Nsb25lX3R4YnVmKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCit7CisJc3RydWN0IGF0aF9idWYgKnRiZjsKKworCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisJQVNTRVJUKCFsaXN0X2VtcHR5KCgmc2MtPnR4LnR4YnVmKSkpOworCXRiZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1Ziwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWxpc3RfZGVsKCZ0YmYtPmxpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKworCUFUSF9UWEJVRl9SRVNFVCh0YmYpOworCisJdGJmLT5iZl9tcGR1ID0gYmYtPmJmX21wZHU7CisJdGJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9idWZfYWRkcjsKKwkqKHRiZi0+YmZfZGVzYykgPSAqKGJmLT5iZl9kZXNjKTsKKwl0YmYtPmJmX3N0YXRlID0gYmYtPmJmX3N0YXRlOworCXRiZi0+YmZfZG1hY29udGV4dCA9IGJmLT5iZl9kbWFjb250ZXh0OworCisJcmV0dXJuIHRiZjsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2FnZ3Ioc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkJIHN0cnVjdCBhdGhfYnVmICpiZiwgc3RydWN0IGxpc3RfaGVhZCAqYmZfcSwKKwkJCQkgaW50IHR4b2spCit7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQgPSBOVUxMOworCXN0cnVjdCBhdGhfYnVmICpiZl9uZXh0LCAqYmZfbGFzdCA9IGJmLT5iZl9sYXN0YmY7CisJc3RydWN0IGF0aF9kZXNjICpkcyA9IGJmX2xhc3QtPmJmX2Rlc2M7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkLCBiZl9wZW5kaW5nOworCXUxNiBzZXFfc3QgPSAwLCBhY2tlZF9jbnQgPSAwLCB0eGZhaWxfY250ID0gMDsKKwl1MzIgYmFbV01FX0JBX0JNUF9TSVpFID4+IDVdOworCWludCBpc2FnZ3IsIHR4ZmFpbCwgdHhwZW5kaW5nLCBzZW5kYmFyID0gMCwgbmVlZHJlc2V0ID0gMCwgbmJhZCA9IDA7CisJYm9vbCByY191cGRhdGUgPSB0cnVlOworCisJc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHNjLT5odywgaGRyLT5hZGRyMSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisKKwlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OworCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKKworCWlzYWdnciA9IGJmX2lzYWdncihiZik7CisJbWVtc2V0KGJhLCAwLCBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisKKwlpZiAoaXNhZ2dyICYmIHR4b2spIHsKKwkJaWYgKEFUSF9EU19UWF9CQShkcykpIHsKKwkJCXNlcV9zdCA9IEFUSF9EU19CQV9TRVEoZHMpOworCQkJbWVtY3B5KGJhLCBBVEhfRFNfQkFfQklUTUFQKGRzKSwKKwkJCSAgICAgICBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogQVI1NDE2IGNhbiBiZWNvbWUgZGVhZi9tdXRlIHdoZW4gQkEKKwkJCSAqIGlzc3VlIGhhcHBlbnMuIENoaXAgbmVlZHMgdG8gYmUgcmVzZXQuCisJCQkgKiBCdXQgQVAgY29kZSBtYXkgaGF2ZSBzeWNocm9uaXphdGlvbiBpc3N1ZXMKKwkJCSAqIHdoZW4gcGVyZm9ybSBpbnRlcm5hbCByZXNldCBpbiB0aGlzIHJvdXRpbmUuCisJCQkgKiBPbmx5IGVuYWJsZSByZXNldCBpbiBTVEEgbW9kZSBmb3Igbm93LgorCQkJICovCisJCQlpZiAoc2MtPnNjX2FoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCQluZWVkcmVzZXQgPSAxOworCQl9CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJmJmX3BlbmRpbmcpOworCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKKworCW5iYWQgPSBhdGhfdHhfbnVtX2JhZGZybXMoc2MsIGJmLCB0eG9rKTsKKwl3aGlsZSAoYmYpIHsKKwkJdHhmYWlsID0gdHhwZW5kaW5nID0gMDsKKwkJYmZfbmV4dCA9IGJmLT5iZl9uZXh0OworCisJCWlmIChBVEhfQkFfSVNTRVQoYmEsIEFUSF9CQV9JTkRFWChzZXFfc3QsIGJmLT5iZl9zZXFubykpKSB7CisJCQkvKiB0cmFuc21pdCBjb21wbGV0aW9uLCBzdWJmcmFtZSBpcworCQkJICogYWNrZWQgYnkgYmxvY2sgYWNrICovCisJCQlhY2tlZF9jbnQrKzsKKwkJfSBlbHNlIGlmICghaXNhZ2dyICYmIHR4b2spIHsKKwkJCS8qIHRyYW5zbWl0IGNvbXBsZXRpb24gKi8KKwkJCWFja2VkX2NudCsrOworCQl9IGVsc2UgeworCQkJaWYgKCEodGlkLT5zdGF0ZSAmIEFHR1JfQ0xFQU5VUCkgJiYKKwkJCSAgICBkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzICE9IEFUSDlLX1RYX1NXX0FCT1JURUQpIHsKKwkJCQlpZiAoYmYtPmJmX3JldHJpZXMgPCBBVEhfTUFYX1NXX1JFVFJJRVMpIHsKKwkJCQkJYXRoX3R4X3NldF9yZXRyeShzYywgYmYpOworCQkJCQl0eHBlbmRpbmcgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9YUkVUUlk7CisJCQkJCXR4ZmFpbCA9IDE7CisJCQkJCXNlbmRiYXIgPSAxOworCQkJCQl0eGZhaWxfY250Kys7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIGNsZWFudXAgaW4gcHJvZ3Jlc3MsIGp1c3QgZmFpbAorCQkJCSAqIHRoZSB1bi1hY2tlZCBzdWItZnJhbWVzCisJCQkJICovCisJCQkJdHhmYWlsID0gMTsKKwkJCX0KKwkJfQorCisJCWlmIChiZl9uZXh0ID09IE5VTEwpIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKKwkJfSBlbHNlIHsKKwkJCUFTU0VSVCghbGlzdF9lbXB0eShiZl9xKSk7CisJCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKKwkJfQorCisJCWlmICghdHhwZW5kaW5nKSB7CisJCQkvKgorCQkJICogY29tcGxldGUgdGhlIGFja2VkLW9uZXMveHJldHJpZWQgb25lczsgdXBkYXRlCisJCQkgKiBibG9jay1hY2sgd2luZG93CisJCQkgKi8KKwkJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCQlhdGhfdHhfdXBkYXRlX2JhdyhzYywgdGlkLCBiZi0+YmZfc2Vxbm8pOworCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCisJCQlpZiAocmNfdXBkYXRlICYmIChhY2tlZF9jbnQgPT0gMSB8fCB0eGZhaWxfY250ID09IDEpKSB7CisJCQkJYXRoX3R4X3JjX3N0YXR1cyhiZiwgZHMsIG5iYWQsIHR4b2ssIHRydWUpOworCQkJCXJjX3VwZGF0ZSA9IGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQlhdGhfdHhfcmNfc3RhdHVzKGJmLCBkcywgbmJhZCwgdHhvaywgZmFsc2UpOworCQkJfQorCisJCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsICF0eGZhaWwsIHNlbmRiYXIpOworCQl9IGVsc2UgeworCQkJLyogcmV0cnkgdGhlIHVuLWFja2VkIG9uZXMgKi8KKwkJCWlmIChiZi0+YmZfbmV4dCA9PSBOVUxMICYmCisJCQkgICAgYmZfbGFzdC0+YmZfc3RhdHVzICYgQVRIX0JVRlNUQVRVU19TVEFMRSkgeworCQkJCXN0cnVjdCBhdGhfYnVmICp0YmY7CisKKwkJCQl0YmYgPSBhdGhfY2xvbmVfdHhidWYoc2MsIGJmX2xhc3QpOworCQkJCWF0aDlrX2h3X2NsZWFydHhkZXNjKHNjLT5zY19haCwgdGJmLT5iZl9kZXNjKTsKKwkJCQlsaXN0X2FkZF90YWlsKCZ0YmYtPmxpc3QsICZiZl9oZWFkKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBDbGVhciBkZXNjcmlwdG9yIHN0YXR1cyB3b3JkcyBmb3IKKwkJCQkgKiBzb2Z0d2FyZSByZXRyeQorCQkJCSAqLworCQkJCWF0aDlrX2h3X2NsZWFydHhkZXNjKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MpOworCQkJfQorCisJCQkvKgorCQkJICogUHV0IHRoaXMgYnVmZmVyIHRvIHRoZSB0ZW1wb3JhcnkgcGVuZGluZworCQkJICogcXVldWUgdG8gcmV0YWluIG9yZGVyaW5nCisJCQkgKi8KKwkJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmYmZfaGVhZCwgJmJmX3BlbmRpbmcpOworCQl9CisKKwkJYmYgPSBiZl9uZXh0OworCX0KKworCWlmICh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKSB7CisJCWlmICh0aWQtPmJhd19oZWFkID09IHRpZC0+YmF3X3RhaWwpIHsKKwkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOworCQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOworCisJCQkvKiBzZW5kIGJ1ZmZlcmVkIGZyYW1lcyBhcyBzaW5nbGVzICovCisJCQlhdGhfdHhfZmx1c2hfdGlkKHNjLCB0aWQpOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJLyogcHJlcGVuZCB1bi1hY2tlZCBmcmFtZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGVuZGluZyBmcmFtZSBxdWV1ZSAqLworCWlmICghbGlzdF9lbXB0eSgmYmZfcGVuZGluZykpIHsKKwkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJbGlzdF9zcGxpY2UoJmJmX3BlbmRpbmcsICZ0aWQtPmJ1Zl9xKTsKKwkJYXRoX3R4X3F1ZXVlX3RpZCh0eHEsIHRpZCk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChuZWVkcmVzZXQpCisJCWF0aF9yZXNldChzYywgZmFsc2UpOworfQorCitzdGF0aWMgdTMyIGF0aF9sb29rdXBfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAogCQkJICAgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQpCiB7CiAJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpyYXRlX3RhYmxlID0gc2MtPmN1cl9yYXRlX3RhYmxlOwpAQCAtMTI1NSwxNSArNDQwLDE0IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXM7CiAJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdjsKLQl1MzIgbWF4XzRtc19mcmFtZWxlbiwgZnJhbWVfbGVuZ3RoOworCXUzMiBtYXhfNG1zX2ZyYW1lbGVuLCBmcm1sZW47CiAJdTE2IGFnZ3JfbGltaXQsIGxlZ2FjeSA9IDAsIG1heGFtcGR1OwogCWludCBpOwogCiAJc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CiAJdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlyYXRlcyA9IHR4X2luZm8tPmNvbnRyb2wucmF0ZXM7Ci0JdHhfaW5mb19wcml2ID0KLQkJKHN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICopdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXTsKKwl0eF9pbmZvX3ByaXYgPSAoc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKil0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdOwogCiAJLyoKIAkgKiBGaW5kIHRoZSBsb3dlc3QgZnJhbWUgbGVuZ3RoIGFtb25nIHRoZSByYXRlIHNlcmllcyB0aGF0IHdpbGwgaGF2ZSBhCkBAIC0xMjc5LDkgKzQ2Myw4IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAKLQkJCWZyYW1lX2xlbmd0aCA9Ci0JCQkJcmF0ZV90YWJsZS0+aW5mb1tyYXRlc1tpXS5pZHhdLm1heF80bXNfZnJhbWVsZW47Ci0JCQltYXhfNG1zX2ZyYW1lbGVuID0gbWluKG1heF80bXNfZnJhbWVsZW4sIGZyYW1lX2xlbmd0aCk7CisJCQlmcm1sZW4gPSByYXRlX3RhYmxlLT5pbmZvW3JhdGVzW2ldLmlkeF0ubWF4XzRtc19mcmFtZWxlbjsKKwkJCW1heF80bXNfZnJhbWVsZW4gPSBtaW4obWF4XzRtc19mcmFtZWxlbiwgZnJtbGVuKTsKIAkJfQogCX0KIApAQCAtMTI5Myw4ICs0NzYsNyBAQAogCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFIHx8IGxlZ2FjeSkKIAkJcmV0dXJuIDA7CiAKLQlhZ2dyX2xpbWl0ID0gbWluKG1heF80bXNfZnJhbWVsZW4sCi0JCSh1MzIpQVRIX0FNUERVX0xJTUlUX0RFRkFVTFQpOworCWFnZ3JfbGltaXQgPSBtaW4obWF4XzRtc19mcmFtZWxlbiwgKHUzMilBVEhfQU1QRFVfTElNSVRfREVGQVVMVCk7CiAKIAkvKgogCSAqIGgvdyBjYW4gYWNjZXB0IGFnZ3JlZ2F0ZXMgdXB0byAxNiBiaXQgbGVuZ3RocyAoNjU1MzUpLgpAQCAtMTMwOSwxNCArNDkxLDEyIEBACiB9CiAKIC8qCi0gKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVsaW1pdGVycyB0byBiZSBhZGRlZCB0bworICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlbGltaXRlcnMgdG8gYmUgYWRkZWQgdG8KICAqIG1lZXQgdGhlIG1pbmltdW0gcmVxdWlyZWQgbXBkdWRlbnNpdHkuCi0gKiBjYWxsZXIgc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSByYXRlIGlzICBIVCByYXRlIC4KKyAqIGNhbGxlciBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIHJhdGUgaXMgSFQgcmF0ZSAuCiAgKi8KLXN0YXRpYyBpbnQgYXRoX2NvbXB1dGVfbnVtX2RlbGltcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJCSAgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJCSAgdTE2IGZybWxlbikKK3N0YXRpYyBpbnQgYXRoX2NvbXB1dGVfbnVtX2RlbGltcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9hdHhfdGlkICp0aWQsCisJCQkJICBzdHJ1Y3QgYXRoX2J1ZiAqYmYsIHUxNiBmcm1sZW4pCiB7CiAJc3RydWN0IGF0aF9yYXRlX3RhYmxlICpydCA9IHNjLT5jdXJfcmF0ZV90YWJsZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYmYtPmJmX21wZHU7CkBAIC0xMzcwLDkgKzU1MCw3IEBACiAJbnN5bWJpdHMgPSBiaXRzX3Blcl9zeW1ib2xbSFRfUkNfMl9NQ1MocmMpXVt3aWR0aF07CiAJbWlubGVuID0gKG5zeW1ib2xzICogbnN5bWJpdHMpIC8gQklUU19QRVJfQllURTsKIAotCS8qIElzIGZyYW1lIHNob3J0ZXIgdGhhbiByZXF1aXJlZCBtaW5pbXVtIGxlbmd0aD8gKi8KIAlpZiAoZnJtbGVuIDwgbWlubGVuKSB7Ci0JCS8qIEdldCB0aGUgbWluaW11bSBudW1iZXIgb2YgZGVsaW1pdGVycyByZXF1aXJlZC4gKi8KIAkJbWluZGVsaW0gPSAobWlubGVuIC0gZnJtbGVuKSAvIEFUSF9BR0dSX0RFTElNX1NaOwogCQluZGVsaW0gPSBtYXgobWluZGVsaW0sIG5kZWxpbSk7CiAJfQpAQCAtMTM4MCwzNyArNTU4LDIzIEBACiAJcmV0dXJuIG5kZWxpbTsKIH0KIAotLyoKLSAqIEZvciBhZ2dyZWdhdGlvbiBmcm9tIHNvZnR3YXJlIGJ1ZmZlciBxdWV1ZS4KLSAqIE5COiBtdXN0IGJlIGNhbGxlZCB3aXRoIHR4cSBsb2NrIGhlbGQKLSAqLwogc3RhdGljIGVudW0gQVRIX0FHR1JfU1RBVFVTIGF0aF90eF9mb3JtX2FnZ3Ioc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAotCQkJCQlzdHJ1Y3QgbGlzdF9oZWFkICpiZl9xLAotCQkJCQlzdHJ1Y3QgYXRoX2J1ZiAqKmJmX2xhc3QsCi0JCQkJCXN0cnVjdCBhZ2dyX3JpZnNfcGFyYW0gKnBhcmFtLAotCQkJCQlpbnQgKnByZXZfZnJhbWVzKQorCQkJCQkgICAgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX3EpCiB7CiAjZGVmaW5lIFBBREJZVEVTKF9sZW4pICgoNCAtICgoX2xlbikgJSA0KSkgJSA0KQotCXN0cnVjdCBhdGhfYnVmICpiZiwgKnRiZiwgKmJmX2ZpcnN0LCAqYmZfcHJldiA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwotCWludCBybCA9IDAsIG5mcmFtZXMgPSAwLCBuZGVsaW07CisJc3RydWN0IGF0aF9idWYgKmJmLCAqYmZfZmlyc3QsICpiZl9wcmV2ID0gTlVMTDsKKwlpbnQgcmwgPSAwLCBuZnJhbWVzID0gMCwgbmRlbGltLCBwcmV2X2FsID0gMDsKIAl1MTYgYWdncl9saW1pdCA9IDAsIGFsID0gMCwgYnBhZCA9IDAsCiAJCWFsX2RlbHRhLCBoX2JhdyA9IHRpZC0+YmF3X3NpemUgLyAyOwogCWVudW0gQVRIX0FHR1JfU1RBVFVTIHN0YXR1cyA9IEFUSF9BR0dSX0RPTkU7Ci0JaW50IHByZXZfYWwgPSAwOwotCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQotCUJVR19PTihsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSk7CiAKIAliZl9maXJzdCA9IGxpc3RfZmlyc3RfZW50cnkoJnRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKIAogCWRvIHsKIAkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0aWQtPmJ1Zl9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CiAKLQkJLyoKLQkJICogZG8gbm90IHN0ZXAgb3ZlciBibG9jay1hY2sgd2luZG93Ci0JCSAqLworCQkvKiBkbyBub3Qgc3RlcCBvdmVyIGJsb2NrLWFjayB3aW5kb3cgKi8KIAkJaWYgKCFCQVdfV0lUSElOKHRpZC0+c2VxX3N0YXJ0LCB0aWQtPmJhd19zaXplLCBiZi0+YmZfc2Vxbm8pKSB7CiAJCQlzdGF0dXMgPSBBVEhfQUdHUl9CQVdfQ0xPU0VEOwogCQkJYnJlYWs7CkBAIC0xNDIxLDI5ICs1ODUsMjMgQEAKIAkJCXJsID0gMTsKIAkJfQogCi0JCS8qCi0JCSAqIGRvIG5vdCBleGNlZWQgYWdncmVnYXRpb24gbGltaXQKLQkJICovCisJCS8qIGRvIG5vdCBleGNlZWQgYWdncmVnYXRpb24gbGltaXQgKi8KIAkJYWxfZGVsdGEgPSBBVEhfQUdHUl9ERUxJTV9TWiArIGJmLT5iZl9mcm1sZW47CiAKLQkJaWYgKG5mcmFtZXMgJiYgKGFnZ3JfbGltaXQgPAotCQkJKGFsICsgYnBhZCArIGFsX2RlbHRhICsgcHJldl9hbCkpKSB7CisJCWlmIChuZnJhbWVzICYmCisJCSAgICAoYWdncl9saW1pdCA8IChhbCArIGJwYWQgKyBhbF9kZWx0YSArIHByZXZfYWwpKSkgewogCQkJc3RhdHVzID0gQVRIX0FHR1JfTElNSVRFRDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyoKLQkJICogZG8gbm90IGV4Y2VlZCBzdWJmcmFtZSBsaW1pdAotCQkgKi8KLQkJaWYgKChuZnJhbWVzICsgKnByZXZfZnJhbWVzKSA+PQotCQkgICAgbWluKChpbnQpaF9iYXcsIEFUSF9BTVBEVV9TVUJGUkFNRV9ERUZBVUxUKSkgeworCQkvKiBkbyBub3QgZXhjZWVkIHN1YmZyYW1lIGxpbWl0ICovCisJCWlmIChuZnJhbWVzID49IG1pbigoaW50KWhfYmF3LCBBVEhfQU1QRFVfU1VCRlJBTUVfREVGQVVMVCkpIHsKIAkJCXN0YXR1cyA9IEFUSF9BR0dSX0xJTUlURUQ7CiAJCQlicmVhazsKIAkJfQorCQluZnJhbWVzKys7CiAKLQkJLyoKLQkJICogYWRkIHBhZGRpbmcgZm9yIHByZXZpb3VzIGZyYW1lIHRvIGFnZ3JlZ2F0aW9uIGxlbmd0aAotCQkgKi8KKwkJLyogYWRkIHBhZGRpbmcgZm9yIHByZXZpb3VzIGZyYW1lIHRvIGFnZ3JlZ2F0aW9uIGxlbmd0aCAqLwogCQlhbCArPSBicGFkICsgYWxfZGVsdGE7CiAKIAkJLyoKQEAgLTE0NTEsNjkgKzYwOSwzNSBAQAogCQkgKiBkZW5zaXR5IGZvciB0aGlzIG5vZGUuCiAJCSAqLwogCQluZGVsaW0gPSBhdGhfY29tcHV0ZV9udW1fZGVsaW1zKHNjLCB0aWQsIGJmX2ZpcnN0LCBiZi0+YmZfZnJtbGVuKTsKLQogCQlicGFkID0gUEFEQllURVMoYWxfZGVsdGEpICsgKG5kZWxpbSA8PCAyKTsKIAogCQliZi0+YmZfbmV4dCA9IE5VTEw7Ci0JCWJmLT5iZl9sYXN0ZnJtLT5iZl9kZXNjLT5kc19saW5rID0gMDsKKwkJYmYtPmJmX2Rlc2MtPmRzX2xpbmsgPSAwOwogCi0JCS8qCi0JCSAqIHRoaXMgcGFja2V0IGlzIHBhcnQgb2YgYW4gYWdncmVnYXRlCi0JCSAqIC0gcmVtb3ZlIGFsbCBkZXNjcmlwdG9ycyBiZWxvbmdpbmcgdG8gdGhpcyBmcmFtZSBmcm9tCi0JCSAqICAgc29mdHdhcmUgcXVldWUKLQkJICogLSBhZGQgaXQgdG8gYmxvY2sgYWNrIHdpbmRvdwotCQkgKiAtIHNldCB1cCBkZXNjcmlwdG9ycyBmb3IgYWdncmVnYXRpb24KLQkJICovCi0JCWxpc3RfY3V0X3Bvc2l0aW9uKCZiZl9oZWFkLCAmdGlkLT5idWZfcSwgJmJmLT5iZl9sYXN0ZnJtLT5saXN0KTsKKwkJLyogbGluayBidWZmZXJzIG9mIHRoaXMgZnJhbWUgdG8gdGhlIGFnZ3JlZ2F0ZSAqLwogCQlhdGhfdHhfYWRkdG9fYmF3KHNjLCB0aWQsIGJmKTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRiZiwgJmJmX2hlYWQsIGxpc3QpIHsKLQkJCWF0aDlrX2h3X3NldDExbl9hZ2dyX21pZGRsZShzYy0+c2NfYWgsCi0JCQkJdGJmLT5iZl9kZXNjLCBuZGVsaW0pOwotCQl9Ci0KLQkJLyoKLQkJICogbGluayBidWZmZXJzIG9mIHRoaXMgZnJhbWUgdG8gdGhlIGFnZ3JlZ2F0ZQotCQkgKi8KLQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZiZl9oZWFkLCBiZl9xKTsKLQkJbmZyYW1lcysrOwotCisJCWF0aDlrX2h3X3NldDExbl9hZ2dyX21pZGRsZShzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLCBuZGVsaW0pOworCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsIGJmX3EpOwogCQlpZiAoYmZfcHJldikgewogCQkJYmZfcHJldi0+YmZfbmV4dCA9IGJmOwotCQkJYmZfcHJldi0+YmZfbGFzdGZybS0+YmZfZGVzYy0+ZHNfbGluayA9IGJmLT5iZl9kYWRkcjsKKwkJCWJmX3ByZXYtPmJmX2Rlc2MtPmRzX2xpbmsgPSBiZi0+YmZfZGFkZHI7CiAJCX0KIAkJYmZfcHJldiA9IGJmOwotCi0jaWZkZWYgQUdHUl9OT1NIT1JUCi0JCS8qCi0JCSAqIHRlcm1pbmF0ZSBhZ2dyZWdhdGlvbiBvbiBhIHNtYWxsIHBhY2tldCBib3VuZGFyeQotCQkgKi8KLQkJaWYgKGJmLT5iZl9mcm1sZW4gPCBBVEhfQUdHUl9NSU5QTEVOKSB7Ci0JCQlzdGF0dXMgPSBBVEhfQUdHUl9TSE9SVFBLVDsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKIAl9IHdoaWxlICghbGlzdF9lbXB0eSgmdGlkLT5idWZfcSkpOwogCiAJYmZfZmlyc3QtPmJmX2FsID0gYWw7CiAJYmZfZmlyc3QtPmJmX25mcmFtZXMgPSBuZnJhbWVzOwotCSpiZl9sYXN0ID0gYmZfcHJldjsKKwogCXJldHVybiBzdGF0dXM7CiAjdW5kZWYgUEFEQllURVMKIH0KIAotLyoKLSAqIHByb2Nlc3MgcGVuZGluZyBmcmFtZXMgcG9zc2libHkgZG9pbmcgYS1tcGR1IGFnZ3JlZ2F0aW9uCi0gKiBOQjogbXVzdCBiZSBjYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkCi0gKi8KLXN0YXRpYyB2b2lkIGF0aF90eF9zY2hlZF9hZ2dyKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCXN0cnVjdCBhdGhfdHhxICp0eHEsIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQorc3RhdGljIHZvaWQgYXRoX3R4X3NjaGVkX2FnZ3Ioc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkgICAgICBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCkKIHsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICp0YmYsICpiZl9sYXN0LCAqYmZfbGFzdGFnZ3IgPSBOVUxMOworCXN0cnVjdCBhdGhfYnVmICpiZjsKIAllbnVtIEFUSF9BR0dSX1NUQVRVUyBzdGF0dXM7CiAJc3RydWN0IGxpc3RfaGVhZCBiZl9xOwotCXN0cnVjdCBhZ2dyX3JpZnNfcGFyYW0gcGFyYW0gPSB7MCwgMCwgMCwgMCwgTlVMTH07Ci0JaW50IHByZXZfZnJhbWVzID0gMDsKIAogCWRvIHsKIAkJaWYgKGxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQpAQCAtMTUyMSwxMjAgKzY0NSwxNDkgQEAKIAogCQlJTklUX0xJU1RfSEVBRCgmYmZfcSk7CiAKLQkJc3RhdHVzID0gYXRoX3R4X2Zvcm1fYWdncihzYywgdGlkLCAmYmZfcSwgJmJmX2xhc3RhZ2dyLCAmcGFyYW0sCi0JCQkJCSAgJnByZXZfZnJhbWVzKTsKKwkJc3RhdHVzID0gYXRoX3R4X2Zvcm1fYWdncihzYywgdGlkLCAmYmZfcSk7CiAKIAkJLyoKLQkJICogbm8gZnJhbWVzIHBpY2tlZCB1cCB0byBiZSBhZ2dyZWdhdGVkOyBibG9jay1hY2sKLQkJICogd2luZG93IGlzIG5vdCBvcGVuCisJCSAqIG5vIGZyYW1lcyBwaWNrZWQgdXAgdG8gYmUgYWdncmVnYXRlZDsKKwkJICogYmxvY2stYWNrIHdpbmRvdyBpcyBub3Qgb3Blbi4KIAkJICovCiAJCWlmIChsaXN0X2VtcHR5KCZiZl9xKSkKIAkJCWJyZWFrOwogCiAJCWJmID0gbGlzdF9maXJzdF9lbnRyeSgmYmZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCQliZl9sYXN0ID0gbGlzdF9lbnRyeShiZl9xLnByZXYsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKLQkJYmYtPmJmX2xhc3RiZiA9IGJmX2xhc3Q7CisJCWJmLT5iZl9sYXN0YmYgPSBsaXN0X2VudHJ5KGJmX3EucHJldiwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwogCi0JCS8qCi0JCSAqIGlmIG9ubHkgb25lIGZyYW1lLCBzZW5kIGFzIG5vbi1hZ2dyZWdhdGUKLQkJICovCisJCS8qIGlmIG9ubHkgb25lIGZyYW1lLCBzZW5kIGFzIG5vbi1hZ2dyZWdhdGUgKi8KIAkJaWYgKGJmLT5iZl9uZnJhbWVzID09IDEpIHsKLQkJCUFTU0VSVChiZi0+YmZfbGFzdGZybSA9PSBiZl9sYXN0KTsKLQogCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9BR0dSOwotCQkJLyoKLQkJCSAqIGNsZWFyIGFnZ3IgYml0cyBmb3IgZXZlcnkgZGVzY3JpcHRvcgotCQkJICogWFhYIFRPRE86IGlzIHRoZXJlIGEgd2F5IHRvIG9wdGltaXplIGl0PwotCQkJICovCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRiZiwgJmJmX3EsIGxpc3QpIHsKLQkJCQlhdGg5a19od19jbHIxMW5fYWdncihzYy0+c2NfYWgsIHRiZi0+YmZfZGVzYyk7Ci0JCQl9Ci0KKwkJCWF0aDlrX2h3X2NscjExbl9hZ2dyKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MpOwogCQkJYXRoX2J1Zl9zZXRfcmF0ZShzYywgYmYpOwogCQkJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCAmYmZfcSk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qCi0JCSAqIHNldHVwIGZpcnN0IGRlc2Mgd2l0aCByYXRlIGFuZCBhZ2dyIGluZm8KLQkJICovCisJCS8qIHNldHVwIGZpcnN0IGRlc2Mgb2YgYWdncmVnYXRlICovCiAJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9BR0dSOwogCQlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CiAJCWF0aDlrX2h3X3NldDExbl9hZ2dyX2ZpcnN0KHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIGJmLT5iZl9hbCk7CiAKLQkJLyoKLQkJICogYW5jaG9yIGxhc3QgZnJhbWUgb2YgYWdncmVnYXRlIGNvcnJlY3RseQotCQkgKi8KLQkJQVNTRVJUKGJmX2xhc3RhZ2dyKTsKLQkJQVNTRVJUKGJmX2xhc3RhZ2dyLT5iZl9sYXN0ZnJtID09IGJmX2xhc3QpOwotCQl0YmYgPSBiZl9sYXN0YWdncjsKLQkJYXRoOWtfaHdfc2V0MTFuX2FnZ3JfbGFzdChzYy0+c2NfYWgsIHRiZi0+YmZfZGVzYyk7Ci0KLQkJLyogWFhYOiBXZSBkb24ndCBlbnRlciBpbnRvIHRoaXMgbG9vcCwgY29uc2lkZXIgcmVtb3ZpbmcgdGhpcyAqLwotCQl3aGlsZSAoIWxpc3RfZW1wdHkoJmJmX3EpICYmICFsaXN0X2lzX2xhc3QoJnRiZi0+bGlzdCwgJmJmX3EpKSB7Ci0JCQl0YmYgPSBsaXN0X2VudHJ5KHRiZi0+bGlzdC5uZXh0LCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7Ci0JCQlhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHNjLT5zY19haCwgdGJmLT5iZl9kZXNjKTsKLQkJfQorCQkvKiBhbmNob3IgbGFzdCBkZXNjIG9mIGFnZ3JlZ2F0ZSAqLworCQlhdGg5a19od19zZXQxMW5fYWdncl9sYXN0KHNjLT5zY19haCwgYmYtPmJmX2xhc3RiZi0+YmZfZGVzYyk7CiAKIAkJdHhxLT5heHFfYWdncl9kZXB0aCsrOwotCi0JCS8qCi0JCSAqIE5vcm1hbCBhZ2dyZWdhdGUsIHF1ZXVlIHRvIGhhcmR3YXJlCi0JCSAqLwogCQlhdGhfdHhfdHhxYWRkYnVmKHNjLCB0eHEsICZiZl9xKTsKIAogCX0gd2hpbGUgKHR4cS0+YXhxX2RlcHRoIDwgQVRIX0FHR1JfTUlOX1FERVBUSCAmJgogCQkgc3RhdHVzICE9IEFUSF9BR0dSX0JBV19DTE9TRUQpOwogfQogCi0vKiBDYWxsZWQgd2l0aCB0eHEgbG9jayBoZWxkICovCi0KLXN0YXRpYyB2b2lkIGF0aF90aWRfZHJhaW4oc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEsCi0JCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkKQotCitpbnQgYXRoX3R4X2FnZ3Jfc3RhcnQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCSAgICAgIHUxNiB0aWQsIHUxNiAqc3NuKQogeworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQ7CisJc3RydWN0IGF0aF9ub2RlICphbjsKKworCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7CisKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSB7CisJCXR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWQpOworCQl0eHRpZC0+c3RhdGUgfD0gQUdHUl9BRERCQV9QUk9HUkVTUzsKKwkJYXRoX3R4X3BhdXNlX3RpZChzYywgdHh0aWQpOworCQkqc3NuID0gdHh0aWQtPnNlcV9zdGFydDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGF0aF90eF9hZ2dyX3N0b3Aoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQpCit7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZCk7CisJc3RydWN0IGF0aF90eHEgKnR4cSA9ICZzYy0+dHgudHhxW3R4dGlkLT5hYy0+cW51bV07CiAJc3RydWN0IGF0aF9idWYgKmJmOwogCXN0cnVjdCBsaXN0X2hlYWQgYmZfaGVhZDsKIAlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CiAKLQlmb3IgKDs7KSB7Ci0JCWlmIChsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSkKLQkJCWJyZWFrOwotCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwlpZiAodHh0aWQtPnN0YXRlICYgQUdHUl9DTEVBTlVQKQorCQlyZXR1cm4gMDsKIAotCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwgJnRpZC0+YnVmX3EsICZiZi0+YmZfbGFzdGZybS0+bGlzdCk7Ci0KLQkJLyogdXBkYXRlIGJhdyBmb3Igc29mdHdhcmUgcmV0cmllZCBmcmFtZSAqLwotCQlpZiAoYmZfaXNyZXRyaWVkKGJmKSkKLQkJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0aWQsIGJmLT5iZl9zZXFubyk7Ci0KLQkJLyoKLQkJICogZG8gbm90IGluZGljYXRlIHBhY2tldHMgd2hpbGUgaG9sZGluZyB0eHEgc3BpbmxvY2suCi0JCSAqIHVubG9jayBpcyBpbnRlbnRpb25hbCBoZXJlCi0JCSAqLwotCQlzcGluX3VubG9jaygmdHhxLT5heHFfbG9jayk7Ci0KLQkJLyogY29tcGxldGUgdGhpcyBzdWItZnJhbWUgKi8KLQkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKLQotCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOworCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7CisJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKKwkJcmV0dXJuIDA7CiAJfQogCi0JLyoKLQkgKiBUT0RPOiBGb3IgZnJhbWUocykgdGhhdCBhcmUgaW4gdGhlIHJldHJ5IHN0YXRlLCB3ZSB3aWxsIHJldXNlIHRoZQotCSAqIHNlcXVlbmNlIG51bWJlcihzKSB3aXRob3V0IHNldHRpbmcgdGhlIHJldHJ5IGJpdC4gVGhlCi0JICogYWx0ZXJuYXRpdmUgaXMgdG8gZ2l2ZSB1cCBvbiB0aGVzZSBhbmQgQkFSIHRoZSByZWNlaXZlcidzIHdpbmRvdwotCSAqIGZvcndhcmQuCi0JICovCi0JdGlkLT5zZXFfbmV4dCA9IHRpZC0+c2VxX3N0YXJ0OwotCXRpZC0+YmF3X3RhaWwgPSB0aWQtPmJhd19oZWFkOworCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKKworCS8qIGRyb3AgYWxsIHNvZnR3YXJlIHJldHJpZWQgZnJhbWVzIGFuZCBtYXJrIHRoaXMgVElEICovCisJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnR4dGlkLT5idWZfcSkpIHsKKwkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHRpZC0+YnVmX3EsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKwkJaWYgKCFiZl9pc3JldHJpZWQoYmYpKSB7CisJCQkvKgorCQkJICogTkI6IGl0J3MgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdAorCQkJICogc29mdHdhcmUgcmV0cmllZCBmcmFtZSB3aWxsIGFsd2F5cyBzdGF5CisJCQkgKiBhdCB0aGUgaGVhZCBvZiBzb2Z0d2FyZSBxdWV1ZS4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwkJbGlzdF9tb3ZlX3RhaWwoJmJmLT5saXN0LCAmYmZfaGVhZCk7CisJCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0eHRpZCwgYmYtPmJmX3NlcW5vKTsKKwkJYXRoX3R4X2NvbXBsZXRlX2J1ZihzYywgYmYsICZiZl9oZWFkLCAwLCAwKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCisJaWYgKHR4dGlkLT5iYXdfaGVhZCAhPSB0eHRpZC0+YmF3X3RhaWwpIHsKKwkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQ0xFQU5VUDsKKwl9IGVsc2UgeworCQl0eHRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKKwkJYXRoX3R4X2ZsdXNoX3RpZChzYywgdHh0aWQpOworCX0KKworCXJldHVybiAwOwogfQogCi0vKgotICogRHJhaW4gYWxsIHBlbmRpbmcgYnVmZmVycwotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCit2b2lkIGF0aF90eF9hZ2dyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOworCXN0cnVjdCBhdGhfbm9kZSAqYW47CisKKwlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OworCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgeworCQl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKKwkJdHh0aWQtPmJhd19zaXplID0KKwkJCUlFRUU4MDIxMV9NSU5fQU1QRFVfQlVGIDw8IHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvcjsKKwkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQUREQkFfQ09NUExFVEU7CisJCXR4dGlkLT5zdGF0ZSAmPSB+QUdHUl9BRERCQV9QUk9HUkVTUzsKKwkJYXRoX3R4X3Jlc3VtZV90aWQoc2MsIHR4dGlkKTsKKwl9Cit9CisKK2Jvb2wgYXRoX3R4X2FnZ3JfY2hlY2soc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4sIHU4IHRpZG5vKQoreworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQ7CisKKwlpZiAoIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpKQorCQlyZXR1cm4gZmFsc2U7CisKKwl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkbm8pOworCisJaWYgKCEodHh0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9DT01QTEVURSkpIHsKKwkJaWYgKCEodHh0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9QUk9HUkVTUykgJiYKKwkJICAgICh0eHRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA8IEFEREJBX0VYQ0hBTkdFX0FUVEVNUFRTKSkgeworCQkJdHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMrKzsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKioqKioqKioqKioqKioqKioqKiovCisvKiBRdWV1ZSBNYW5hZ2VtZW50ICovCisvKioqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyB2b2lkIGF0aF90eHFfZHJhaW5fcGVuZGluZ19idWZmZXJzKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEpCiB7CkBAIC0xNjUyLDI1MSArODA1LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYXRoX3R4X3NldHVwX2J1ZmZlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJCXN0cnVjdCBza19idWZmICpza2IsCi0JCQkJc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLQlzdHJ1Y3QgYXRoX3R4X2luZm9fcHJpdiAqdHhfaW5mb19wcml2OwotCWludCBoZHJsZW47Ci0JX19sZTE2IGZjOwotCi0JdHhfaW5mb19wcml2ID0ga3phbGxvYyhzaXplb2YoKnR4X2luZm9fcHJpdiksIEdGUF9BVE9NSUMpOwotCWlmICh1bmxpa2VseSghdHhfaW5mb19wcml2KSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXSA9IHR4X2luZm9fcHJpdjsKLQloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOwotCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCi0JQVRIX1RYQlVGX1JFU0VUKGJmKTsKLQotCS8qIEZyYW1lIHR5cGUgKi8KLQotCWJmLT5iZl9mcm1sZW4gPSBza2ItPmxlbiArIEZDU19MRU4gLSAoaGRybGVuICYgMyk7Ci0KLQlpZWVlODAyMTFfaXNfZGF0YShmYykgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0RBVEEpIDoKLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfREFUQSk7Ci0JaWVlZTgwMjExX2lzX2JhY2tfcmVxKGZjKSA/Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfQkFSKSA6Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX0JBUik7Ci0JaWVlZTgwMjExX2lzX3BzcG9sbChmYykgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1BTUE9MTCkgOgotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgJj0gfkJVRl9QU1BPTEwpOwotCShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QUkVBTUJMRV9TSE9SVCkgPwotCQkoYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1NIT1JUX1BSRUFNQkxFKSA6Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSAmPSB+QlVGX1NIT1JUX1BSRUFNQkxFKTsKLQkoc2MtPmh3LT5jb25mLmh0LmVuYWJsZWQgJiYgIWlzX3BhZShza2IpICYmCi0JICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpKSA/Ci0JCShiZi0+YmZfc3RhdGUuYmZfdHlwZSB8PSBCVUZfSFQpIDoKLQkJKGJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfSFQpOwotCi0JYmYtPmJmX2ZsYWdzID0gc2V0dXBfdHhfZmxhZ3Moc2MsIHNrYiwgdHhjdGwtPnR4cSk7Ci0KLQkvKiBDcnlwdG8gKi8KLQotCWJmLT5iZl9rZXl0eXBlID0gZ2V0X2h3X2NyeXB0b19rZXl0eXBlKHNrYik7Ci0KLQlpZiAoYmYtPmJmX2tleXR5cGUgIT0gQVRIOUtfS0VZX1RZUEVfQ0xFQVIpIHsKLQkJYmYtPmJmX2ZybWxlbiArPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKLQkJYmYtPmJmX2tleWl4ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7Ci0JfSBlbHNlIHsKLQkJYmYtPmJmX2tleWl4ID0gQVRIOUtfVFhLRVlJWF9JTlZBTElEOwotCX0KLQotCS8qIEFzc2lnbiBzZXFubywgdGlkbm8gKi8KLQotCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpICYmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpKQotCQlhc3NpZ25fYWdncl90aWRfc2Vxbm8oc2tiLCBiZik7Ci0KLQkvKiBETUEgc2V0dXAgKi8KLQliZi0+YmZfbXBkdSA9IHNrYjsKLQotCWJmLT5iZl9kbWFjb250ZXh0ID0gcGNpX21hcF9zaW5nbGUoc2MtPnBkZXYsIHNrYi0+ZGF0YSwKLQkJCQkJICAgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCWlmICh1bmxpa2VseShwY2lfZG1hX21hcHBpbmdfZXJyb3Ioc2MtPnBkZXYsIGJmLT5iZl9kbWFjb250ZXh0KSkpIHsKLQkJYmYtPmJmX21wZHUgPSBOVUxMOwotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKLQkJCSJwY2lfZG1hX21hcHBpbmdfZXJyb3IoKSBvbiBUWFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWJmLT5iZl9idWZfYWRkciA9IGJmLT5iZl9kbWFjb250ZXh0OwotCXJldHVybiAwOwotfQotCi0vKiBGSVhNRTogdHggcG93ZXIgKi8KLXN0YXRpYyB2b2lkIGF0aF90eF9zdGFydF9kbWEoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZiwKLQkJCSAgICAgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgYXRoX25vZGUgKmFuID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGJmX2hlYWQ7Ci0Jc3RydWN0IGF0aF9kZXNjICpkczsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7Ci0JaW50IGZybV90eXBlOwotCi0JZnJtX3R5cGUgPSBnZXRfaHdfcGFja2V0X3R5cGUoc2tiKTsKLQotCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQlsaXN0X2FkZF90YWlsKCZiZi0+bGlzdCwgJmJmX2hlYWQpOwotCi0JLyogc2V0dXAgZGVzY3JpcHRvciAqLwotCi0JZHMgPSBiZi0+YmZfZGVzYzsKLQlkcy0+ZHNfbGluayA9IDA7Ci0JZHMtPmRzX2RhdGEgPSBiZi0+YmZfYnVmX2FkZHI7Ci0KLQkvKiBGb3JtdWxhdGUgZmlyc3QgdHggZGVzY3JpcHRvciB3aXRoIHR4IGNvbnRyb2xzICovCi0KLQlhdGg5a19od19zZXQxMW5fdHhkZXNjKGFoLCBkcywgYmYtPmJmX2ZybWxlbiwgZnJtX3R5cGUsIE1BWF9SQVRFX1BPV0VSLAotCQkJICAgICAgIGJmLT5iZl9rZXlpeCwgYmYtPmJmX2tleXR5cGUsIGJmLT5iZl9mbGFncyk7Ci0KLQlhdGg5a19od19maWxsdHhkZXNjKGFoLCBkcywKLQkJCSAgICBza2ItPmxlbiwJLyogc2VnbWVudCBsZW5ndGggKi8KLQkJCSAgICB0cnVlLAkvKiBmaXJzdCBzZWdtZW50ICovCi0JCQkgICAgdHJ1ZSwJLyogbGFzdCBzZWdtZW50ICovCi0JCQkgICAgZHMpOwkvKiBmaXJzdCBkZXNjcmlwdG9yICovCi0KLQliZi0+YmZfbGFzdGZybSA9IGJmOwotCi0Jc3Bpbl9sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7Ci0KLQlpZiAoYmZfaXNodChiZikgJiYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgJiYKLQkgICAgdHhfaW5mby0+Y29udHJvbC5zdGEpIHsKLQkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OwotCQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIGJmLT5iZl90aWRubyk7Ci0KLQkJaWYgKGF0aF9hZ2dyX3F1ZXJ5KHNjLCBhbiwgYmYtPmJmX3RpZG5vKSkgewotCQkJLyoKLQkJCSAqIFRyeSBhZ2dyZWdhdGlvbiBpZiBpdCdzIGEgdW5pY2FzdCBkYXRhIGZyYW1lCi0JCQkgKiBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIEhUIGNhcGFibGUuCi0JCQkgKi8KLQkJCWF0aF90eF9zZW5kX2FtcGR1KHNjLCB0aWQsICZiZl9oZWFkLCB0eGN0bCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogU2VuZCB0aGlzIGZyYW1lIGFzIHJlZ3VsYXIgd2hlbiBBRERCQQotCQkJICogZXhjaGFuZ2UgaXMgbmVpdGhlciBjb21wbGV0ZSBub3IgcGVuZGluZy4KLQkJCSAqLwotCQkJYXRoX3R4X3NlbmRfbm9ybWFsKHNjLCB0eGN0bC0+dHhxLAotCQkJCQkgICB0aWQsICZiZl9oZWFkKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWJmLT5iZl9sYXN0YmYgPSBiZjsKLQkJYmYtPmJmX25mcmFtZXMgPSAxOwotCi0JCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKLQkJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhjdGwtPnR4cSwgJmJmX2hlYWQpOwotCX0KLQotCXNwaW5fdW5sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7Ci19Ci0KLS8qIFVwb24gZmFpbHVyZSBjYWxsZXIgc2hvdWxkIGZyZWUgc2tiICovCi1pbnQgYXRoX3R4X3N0YXJ0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgc3RydWN0IGF0aF90eF9jb250cm9sICp0eGN0bCkKLXsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0JaW50IHI7Ci0KLQkvKiBDaGVjayBpZiBhIHR4IGJ1ZmZlciBpcyBhdmFpbGFibGUgKi8KLQotCWJmID0gYXRoX3R4X2dldF9idWZmZXIoc2MpOwotCWlmICghYmYpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggYnVmZmVycyBhcmUgZnVsbFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlyID0gYXRoX3R4X3NldHVwX2J1ZmZlcihzYywgYmYsIHNrYiwgdHhjdGwpOwotCWlmICh1bmxpa2VseShyKSkgewotCQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gdHhjdGwtPnR4cTsKLQotCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVFggbWVtIGFsbG9jIGZhaWx1cmVcbiIpOwotCi0JCS8qIHVwb24gYXRoX3R4X3Byb2Nlc3NxKCkgdGhpcyBUWCBxdWV1ZSB3aWxsIGJlIHJlc3VtZWQsIHdlCi0JCSAqIGd1YXJhbnRlZSB0aGlzIHdpbGwgaGFwcGVuIGJ5IGtub3dpbmcgYmVmb3JlaGFuZCB0aGF0Ci0JCSAqIHdlIHdpbGwgYXQgbGVhc3QgaGF2ZSB0byBydW4gVFggY29tcGxldGlvbm9uIG9uZSBidWZmZXIKLQkJICogb24gdGhlIHF1ZXVlICovCi0JCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7Ci0JCWlmIChhdGhfdHhxX2RlcHRoKHNjLCB0eHEtPmF4cV9xbnVtKSA+IDEpIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHNjLT5odywKLQkJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7Ci0JCQl0eHEtPnN0b3BwZWQgPSAxOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQotCQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOwotCQlsaXN0X2FkZF90YWlsKCZiZi0+bGlzdCwgJnNjLT50eC50eGJ1Zik7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKLQotCQlyZXR1cm4gcjsKLQl9Ci0KLQlhdGhfdHhfc3RhcnRfZG1hKHNjLCBiZiwgdHhjdGwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEluaXRpYWxpemUgVFggcXVldWUgYW5kIGgvdyAqLwotCi1pbnQgYXRoX3R4X2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBuYnVmcykKLXsKLQlpbnQgZXJyb3IgPSAwOwotCi0JZG8gewotCQlzcGluX2xvY2tfaW5pdCgmc2MtPnR4LnR4YnVmbG9jayk7Ci0KLQkJLyogU2V0dXAgdHggZGVzY3JpcHRvcnMgKi8KLQkJZXJyb3IgPSBhdGhfZGVzY2RtYV9zZXR1cChzYywgJnNjLT50eC50eGRtYSwgJnNjLT50eC50eGJ1ZiwKLQkJCSJ0eCIsIG5idWZzLCAxKTsKLQkJaWYgKGVycm9yICE9IDApIHsKLQkJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCi0JCQkJIkZhaWxlZCB0byBhbGxvY2F0ZSB0eCBkZXNjcmlwdG9yczogJWRcbiIsCi0JCQkJZXJyb3IpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBYWFggYWxsb2NhdGUgYmVhY29uIHN0YXRlIHRvZ2V0aGVyIHdpdGggdmFwICovCi0JCWVycm9yID0gYXRoX2Rlc2NkbWFfc2V0dXAoc2MsICZzYy0+YmVhY29uLmJkbWEsICZzYy0+YmVhY29uLmJidWYsCi0JCQkJCSAgImJlYWNvbiIsIEFUSF9CQ0JVRiwgMSk7Ci0JCWlmIChlcnJvciAhPSAwKSB7Ci0JCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAotCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgYmVhY29uIGRlc2NyaXB0b3JzOiAlZFxuIiwKLQkJCQllcnJvcik7Ci0JCQlicmVhazsKLQkJfQotCi0JfSB3aGlsZSAoMCk7Ci0KLQlpZiAoZXJyb3IgIT0gMCkKLQkJYXRoX3R4X2NsZWFudXAoc2MpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKiBSZWNsYWltIGFsbCB0eCBxdWV1ZSByZXNvdXJjZXMgKi8KLQotaW50IGF0aF90eF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCS8qIGNsZWFudXAgYmVhY29uIGRlc2NyaXB0b3JzICovCi0JaWYgKHNjLT5iZWFjb24uYmRtYS5kZF9kZXNjX2xlbiAhPSAwKQotCQlhdGhfZGVzY2RtYV9jbGVhbnVwKHNjLCAmc2MtPmJlYWNvbi5iZG1hLCAmc2MtPmJlYWNvbi5iYnVmKTsKLQotCS8qIGNsZWFudXAgdHggZGVzY3JpcHRvcnMgKi8KLQlpZiAoc2MtPnR4LnR4ZG1hLmRkX2Rlc2NfbGVuICE9IDApCi0JCWF0aF9kZXNjZG1hX2NsZWFudXAoc2MsICZzYy0+dHgudHhkbWEsICZzYy0+dHgudHhidWYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFNldHVwIGEgaC93IHRyYW5zbWl0IHF1ZXVlICovCi0KIHN0cnVjdCBhdGhfdHhxICphdGhfdHhxX3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBzdWJ0eXBlKQogewotCXN0cnVjdCBhdGhfaGFsICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIAlpbnQgcW51bTsKIApAQCAtMTk1OSw0MyArODcwLDcgQEAKIAlyZXR1cm4gJnNjLT50eC50eHFbcW51bV07CiB9CiAKLS8qIFJlY2xhaW0gcmVzb3VyY2VzIGZvciBhIHNldHVwIHF1ZXVlICovCi0KLXZvaWQgYXRoX3R4X2NsZWFudXBxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxKQotewotCWF0aDlrX2h3X3JlbGVhc2V0eHF1ZXVlKHNjLT5zY19haCwgdHhxLT5heHFfcW51bSk7Ci0Jc2MtPnR4LnR4cXNldHVwICY9IH4oMTw8dHhxLT5heHFfcW51bSk7Ci19Ci0KLS8qCi0gKiBTZXR1cCBhIGhhcmR3YXJlIGRhdGEgdHJhbnNtaXQgcXVldWUgZm9yIHRoZSBzcGVjaWZpZWQKLSAqIGFjY2VzcyBjb250cm9sLiAgVGhlIGhhbCBtYXkgbm90IHN1cHBvcnQgYWxsIHJlcXVlc3RlZAotICogcXVldWVzIGluIHdoaWNoIGNhc2UgaXQgd2lsbCByZXR1cm4gYSByZWZlcmVuY2UgdG8gYQotICogcHJldmlvdXNseSBzZXR1cCBxdWV1ZS4gIFdlIHJlY29yZCB0aGUgbWFwcGluZyBmcm9tIGFjJ3MKLSAqIHRvIGgvdyBxdWV1ZXMgZm9yIHVzZSBieSBhdGhfdHhfc3RhcnQgYW5kIGFsc28gdHJhY2sKLSAqIHRoZSBzZXQgb2YgaC93IHF1ZXVlcyBiZWluZyB1c2VkIHRvIG9wdGltaXplIHdvcmsgaW4gdGhlCi0gKiB0cmFuc21pdCBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgcmVsYXRlZCByb3V0aW5lcy4KLSAqLwotCi1pbnQgYXRoX3R4X3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaGFsdHlwZSkKLXsKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxOwotCi0JaWYgKGhhbHR5cGUgPj0gQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCkpIHsKLQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKLQkJCSJIQUwgQUMgJXUgb3V0IG9mIHJhbmdlLCBtYXggJXp1IVxuIiwKLQkJCSBoYWx0eXBlLCBBUlJBWV9TSVpFKHNjLT50eC5od3FfbWFwKSk7Ci0JCXJldHVybiAwOwotCX0KLQl0eHEgPSBhdGhfdHhxX3NldHVwKHNjLCBBVEg5S19UWF9RVUVVRV9EQVRBLCBoYWx0eXBlKTsKLQlpZiAodHhxICE9IE5VTEwpIHsKLQkJc2MtPnR4Lmh3cV9tYXBbaGFsdHlwZV0gPSB0eHEtPmF4cV9xbnVtOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLWludCBhdGhfdHhfZ2V0X3FudW0oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxdHlwZSwgaW50IGhhbHR5cGUpCitzdGF0aWMgaW50IGF0aF90eF9nZXRfcW51bShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHF0eXBlLCBpbnQgaGFsdHlwZSkKIHsKIAlpbnQgcW51bTsKIApAQCAtMjAyMSw4ICs4OTYsNiBAQAogCXJldHVybiBxbnVtOwogfQogCi0vKiBHZXQgYSB0cmFuc21pdCBxdWV1ZSwgaWYgYXZhaWxhYmxlICovCi0KIHN0cnVjdCBhdGhfdHhxICphdGhfdGVzdF9nZXRfdHhxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhdGhfdHhxICp0eHEgPSBOVUxMOwpAQCAtMjAzMyw5ICs5MDYsOCBAQAogCiAJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIAotCS8qIFRyeSB0byBhdm9pZCBydW5uaW5nIG91dCBvZiBkZXNjcmlwdG9ycyAqLwogCWlmICh0eHEtPmF4cV9kZXB0aCA+PSAoQVRIX1RYQlVGIC0gMjApKSB7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwKIAkJCSJUWCBxdWV1ZTogJWQgaXMgZnVsbCwgZGVwdGg6ICVkXG4iLAogCQkJcW51bSwgdHhxLT5heHFfZGVwdGgpOwogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShzYy0+aHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKQEAgLTIwNDksMTIgKzkyMSwxMCBAQAogCXJldHVybiB0eHE7CiB9CiAKLS8qIFVwZGF0ZSBwYXJhbWV0ZXJzIGZvciBhIHRyYW5zbWl0IHF1ZXVlICovCi0KIGludCBhdGhfdHhxX3VwZGF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IHFudW0sCiAJCSAgIHN0cnVjdCBhdGg5a190eF9xdWV1ZV9pbmZvICpxaW5mbykKIHsKLQlzdHJ1Y3QgYXRoX2hhbCAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAJaW50IGVycm9yID0gMDsKIAlzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbyBxaTsKIApAQCAtMjA4Miw3ICs5NTIsNyBAQAogCQkJIlVuYWJsZSB0byB1cGRhdGUgaGFyZHdhcmUgcXVldWUgJXUhXG4iLCBxbnVtKTsKIAkJZXJyb3IgPSAtRUlPOwogCX0gZWxzZSB7Ci0JCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgcW51bSk7IC8qIHB1c2ggdG8gaC93ICovCisJCWF0aDlrX2h3X3Jlc2V0dHhxdWV1ZShhaCwgcW51bSk7CiAJfQogCiAJcmV0dXJuIGVycm9yOwpAQCAtMjA5Miw1NSArOTYyLDM2IEBACiB7CiAJc3RydWN0IGF0aDlrX3R4X3F1ZXVlX2luZm8gcWk7CiAJaW50IHFudW0gPSBzYy0+YmVhY29uLmNhYnEtPmF4cV9xbnVtOwotCXN0cnVjdCBhdGhfYmVhY29uX2NvbmZpZyBjb25mOwogCiAJYXRoOWtfaHdfZ2V0X3R4cV9wcm9wcyhzYy0+c2NfYWgsIHFudW0sICZxaSk7CiAJLyoKIAkgKiBFbnN1cmUgdGhlIHJlYWR5dGltZSAlIGlzIHdpdGhpbiB0aGUgYm91bmRzLgogCSAqLwotCWlmIChzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUgPCBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EKQotCQlzYy0+c2NfY29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEg5S19SRUFEWV9USU1FX0xPX0JPVU5EOwotCWVsc2UgaWYgKHNjLT5zY19jb25maWcuY2FicVJlYWR5dGltZSA+IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQpCi0JCXNjLT5zY19jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSDlLX1JFQURZX1RJTUVfSElfQk9VTkQ7CisJaWYgKHNjLT5jb25maWcuY2FicVJlYWR5dGltZSA8IEFUSDlLX1JFQURZX1RJTUVfTE9fQk9VTkQpCisJCXNjLT5jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSDlLX1JFQURZX1RJTUVfTE9fQk9VTkQ7CisJZWxzZSBpZiAoc2MtPmNvbmZpZy5jYWJxUmVhZHl0aW1lID4gQVRIOUtfUkVBRFlfVElNRV9ISV9CT1VORCkKKwkJc2MtPmNvbmZpZy5jYWJxUmVhZHl0aW1lID0gQVRIOUtfUkVBRFlfVElNRV9ISV9CT1VORDsKIAotCWF0aF9nZXRfYmVhY29uY29uZmlnKHNjLCBBVEhfSUZfSURfQU5ZLCAmY29uZik7Ci0JcWkudHFpX3JlYWR5VGltZSA9Ci0JCShjb25mLmJlYWNvbl9pbnRlcnZhbCAqIHNjLT5zY19jb25maWcuY2FicVJlYWR5dGltZSkgLyAxMDA7CisJcWkudHFpX3JlYWR5VGltZSA9IChzYy0+aHctPmNvbmYuYmVhY29uX2ludCAqCisJCQkgICAgc2MtPmNvbmZpZy5jYWJxUmVhZHl0aW1lKSAvIDEwMDsKIAlhdGhfdHhxX3VwZGF0ZShzYywgcW51bSwgJnFpKTsKIAogCXJldHVybiAwOwogfQogCi0vKiBEZWZlcnJlZCBwcm9jZXNzaW5nIG9mIHRyYW5zbWl0IGludGVycnVwdCAqLwotCi12b2lkIGF0aF90eF90YXNrbGV0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCWludCBpOwotCXUzMiBxY3VtYXNrID0gKCgxIDw8IEFUSDlLX05VTV9UWF9RVUVVRVMpIC0gMSk7Ci0KLQlhdGg5a19od19nZXR0eGludHJ0eHFzKHNjLT5zY19haCwgJnFjdW1hc2spOwotCi0JLyoKLQkgKiBQcm9jZXNzIGVhY2ggYWN0aXZlIHF1ZXVlLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspIHsKLQkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpICYmIChxY3VtYXNrICYgKDEgPDwgaSkpKQotCQkJYXRoX3R4X3Byb2Nlc3NxKHNjLCAmc2MtPnR4LnR4cVtpXSk7Ci0JfQotfQotCi12b2lkIGF0aF90eF9kcmFpbnR4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxLCBib29sIHJldHJ5X3R4KQorLyoKKyAqIERyYWluIGEgZ2l2ZW4gVFggcXVldWUgKGNvdWxkIGJlIEJlYWNvbiBvciBEYXRhKQorICoKKyAqIFRoaXMgYXNzdW1lcyBvdXRwdXQgaGFzIGJlZW4gc3RvcHBlZCBhbmQKKyAqIHdlIGRvIG5vdCBuZWVkIHRvIGJsb2NrIGF0aF90eF90YXNrbGV0LgorICovCit2b2lkIGF0aF9kcmFpbnR4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwgYm9vbCByZXRyeV90eCkKIHsKIAlzdHJ1Y3QgYXRoX2J1ZiAqYmYsICpsYXN0YmY7CiAJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwogCiAJSU5JVF9MSVNUX0hFQUQoJmJmX2hlYWQpOwogCi0JLyoKLQkgKiBOQjogdGhpcyBhc3N1bWVzIG91dHB1dCBoYXMgYmVlbiBzdG9wcGVkIGFuZAotCSAqICAgICB3ZSBkbyBub3QgbmVlZCB0byBibG9jayBhdGhfdHhfdGFza2xldAotCSAqLwogCWZvciAoOzspIHsKIAkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKIApAQCAtMjE3NSw3ICsxMDI2LDcgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwogCiAJCWlmIChiZl9pc2FtcGR1KGJmKSkKLQkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyX3JpZnMoc2MsIHR4cSwgYmYsICZiZl9oZWFkLCAwKTsKKwkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgMCk7CiAJCWVsc2UKIAkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgMCwgMCk7CiAJfQpAQCAtMjE5MCwxODEgKzEwNDEsNjYgQEAKIAl9CiB9CiAKLS8qIERyYWluIHRoZSB0cmFuc21pdCBxdWV1ZXMgYW5kIHJlY2xhaW0gcmVzb3VyY2VzICovCi0KLXZvaWQgYXRoX2RyYWludHhxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBib29sIHJldHJ5X3R4KQordm9pZCBhdGhfZHJhaW5fYWxsX3R4cShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCkKIHsKLQkvKiBzdG9wIGJlYWNvbiBxdWV1ZS4gVGhlIGJlYWNvbiB3aWxsIGJlIGZyZWVkIHdoZW4KLQkgKiB3ZSBnbyB0byBJTklUIHN0YXRlICovCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkpIHsKLQkJKHZvaWQpIGF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7Ci0JCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgImJlYWNvbiBxdWV1ZSAleFxuIiwKLQkJCWF0aDlrX2h3X2dldHR4YnVmKHNjLT5zY19haCwgc2MtPmJlYWNvbi5iZWFjb25xKSk7Ci0JfQorCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfdHhxICp0eHE7CisJaW50IGksIG5wZW5kID0gMDsKIAotCWF0aF9kcmFpbl90eGRhdGFxKHNjLCByZXRyeV90eCk7Ci19CisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0lOVkFMSUQpCisJCXJldHVybjsKIAotdTMyIGF0aF90eHFfZGVwdGgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtKQotewotCXJldHVybiBzYy0+dHgudHhxW3FudW1dLmF4cV9kZXB0aDsKLX0KKwkvKiBTdG9wIGJlYWNvbiBxdWV1ZSAqLworCWF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7CiAKLXUzMiBhdGhfdHhxX2FnZ3JfZGVwdGgoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCBxbnVtKQotewotCXJldHVybiBzYy0+dHgudHhxW3FudW1dLmF4cV9hZ2dyX2RlcHRoOwotfQotCi1ib29sIGF0aF90eF9hZ2dyX2NoZWNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWRubykKLXsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOwotCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JdHh0aWQgPSBBVEhfQU5fMl9USUQoYW4sIHRpZG5vKTsKLQotCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfQ09NUExFVEUpKSB7Ci0JCWlmICghKHR4dGlkLT5zdGF0ZSAmIEFHR1JfQUREQkFfUFJPR1JFU1MpICYmCi0JCSAgICAodHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPCBBRERCQV9FWENIQU5HRV9BVFRFTVBUUykpIHsKLQkJCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzKys7Ci0JCQlyZXR1cm4gdHJ1ZTsKKwkvKiBTdG9wIGRhdGEgcXVldWVzICovCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgeworCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpIHsKKwkJCXR4cSA9ICZzYy0+dHgudHhxW2ldOworCQkJYXRoOWtfaHdfc3RvcHR4ZG1hKGFoLCB0eHEtPmF4cV9xbnVtKTsKKwkJCW5wZW5kICs9IGF0aDlrX2h3X251bXR4cGVuZGluZyhhaCwgdHhxLT5heHFfcW51bSk7CiAJCX0KIAl9CiAKLQlyZXR1cm4gZmFsc2U7CisJaWYgKG5wZW5kKSB7CisJCWludCByOworCisJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgIlVuYWJsZSB0byBzdG9wIFR4RE1BLiBSZXNldCBIQUwhXG4iKTsKKworCQlzcGluX2xvY2tfYmgoJnNjLT5zY19yZXNldGxvY2spOworCQlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIHNjLT5zY19haC0+Y3VyY2hhbiwgdHJ1ZSk7CisJCWlmIChyKQorCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCQkiVW5hYmxlIHRvIHJlc2V0IGhhcmR3YXJlOyByZXNldCBzdGF0dXMgJXVcbiIsCisJCQkJcik7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7CisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKKwkJCWF0aF9kcmFpbnR4cShzYywgJnNjLT50eC50eHFbaV0sIHJldHJ5X3R4KTsKKwl9CiB9CiAKLS8qIFN0YXJ0IFRYIGFnZ3JlZ2F0aW9uICovCi0KLWludCBhdGhfdHhfYWdncl9zdGFydChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJICAgICAgdTE2IHRpZCwgdTE2ICpzc24pCit2b2lkIGF0aF90eF9jbGVhbnVwcShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKIHsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnR4dGlkOwotCXN0cnVjdCBhdGhfbm9kZSAqYW47Ci0KLQlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKilzdGEtPmRydl9wcml2OwotCi0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgewotCQl0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKLQkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQUREQkFfUFJPR1JFU1M7Ci0JCWF0aF90eF9wYXVzZV90aWQoc2MsIHR4dGlkKTsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlhdGg5a19od19yZWxlYXNldHhxdWV1ZShzYy0+c2NfYWgsIHR4cS0+YXhxX3FudW0pOworCXNjLT50eC50eHFzZXR1cCAmPSB+KDE8PHR4cS0+YXhxX3FudW0pOwogfQogCi0vKiBTdG9wIHR4IGFnZ3JlZ2F0aW9uICovCi0KLWludCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQotewotCXN0cnVjdCBhdGhfbm9kZSAqYW4gPSAoc3RydWN0IGF0aF9ub2RlICopc3RhLT5kcnZfcHJpdjsKLQotCWF0aF90eF9hZ2dyX3RlYXJkb3duKHNjLCBhbiwgdGlkKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogUmVzdW1lIHR4IGFnZ3JlZ2F0aW9uICovCi0KLXZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKQotewotCXN0cnVjdCBhdGhfYXR4X3RpZCAqdHh0aWQ7Ci0Jc3RydWN0IGF0aF9ub2RlICphbjsKLQotCWFuID0gKHN0cnVjdCBhdGhfbm9kZSAqKXN0YS0+ZHJ2X3ByaXY7Ci0KLQlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfVFhBR0dSKSB7Ci0JCXR4dGlkID0gQVRIX0FOXzJfVElEKGFuLCB0aWQpOwotCQl0eHRpZC0+YmF3X3NpemUgPQotCQkJSUVFRTgwMjExX01JTl9BTVBEVV9CVUYgPDwgc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yOwotCQl0eHRpZC0+c3RhdGUgfD0gQUdHUl9BRERCQV9DT01QTEVURTsKLQkJdHh0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX1BST0dSRVNTOwotCQlhdGhfdHhfcmVzdW1lX3RpZChzYywgdHh0aWQpOwotCX0KLX0KLQotLyoKLSAqIFBlcmZvcm1zIHRyYW5zbWl0IHNpZGUgY2xlYW51cCB3aGVuIFRJRCBjaGFuZ2VzIGZyb20gYWdncmVnYXRlZCB0bwotICogdW5hZ2dyZWdhdGVkLgotICogLSBQYXVzZSB0aGUgVElEIGFuZCBtYXJrIGNsZWFudXAgaW4gcHJvZ3Jlc3MKLSAqIC0gRGlzY2FyZCBhbGwgcmV0cnkgZnJhbWVzIGZyb20gdGhlIHMvdyBxdWV1ZS4KLSAqLwotCi12b2lkIGF0aF90eF9hZ2dyX3RlYXJkb3duKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuLCB1OCB0aWQpCi17Ci0Jc3RydWN0IGF0aF9hdHhfdGlkICp0eHRpZCA9IEFUSF9BTl8yX1RJRChhbiwgdGlkKTsKLQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gJnNjLT50eC50eHFbdHh0aWQtPmFjLT5xbnVtXTsKLQlzdHJ1Y3QgYXRoX2J1ZiAqYmY7Ci0Jc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOwotCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKLQotCWlmICh0eHRpZC0+c3RhdGUgJiBBR0dSX0NMRUFOVVApIC8qIGNsZWFudXAgaXMgaW4gcHJvZ3Jlc3MgKi8KLQkJcmV0dXJuOwotCi0JaWYgKCEodHh0aWQtPnN0YXRlICYgQUdHUl9BRERCQV9DT01QTEVURSkpIHsKLQkJdHh0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwotCQlyZXR1cm47Ci0JfQotCi0JLyogVElEIG11c3QgYmUgcGF1c2VkIGZpcnN0ICovCi0JYXRoX3R4X3BhdXNlX3RpZChzYywgdHh0aWQpOwotCi0JLyogZHJvcCBhbGwgc29mdHdhcmUgcmV0cmllZCBmcmFtZXMgYW5kIG1hcmsgdGhpcyBUSUQgKi8KLQlzcGluX2xvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCXdoaWxlICghbGlzdF9lbXB0eSgmdHh0aWQtPmJ1Zl9xKSkgewotCQliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnR4dGlkLT5idWZfcSwgc3RydWN0IGF0aF9idWYsIGxpc3QpOwotCQlpZiAoIWJmX2lzcmV0cmllZChiZikpIHsKLQkJCS8qCi0JCQkgKiBOQjogaXQncyBiYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0Ci0JCQkgKiBzb2Z0d2FyZSByZXRyaWVkIGZyYW1lIHdpbGwgYWx3YXlzIHN0YXkKLQkJCSAqIGF0IHRoZSBoZWFkIG9mIHNvZnR3YXJlIHF1ZXVlLgotCQkJICovCi0JCQlicmVhazsKLQkJfQotCQlsaXN0X2N1dF9wb3NpdGlvbigmYmZfaGVhZCwKLQkJCSZ0eHRpZC0+YnVmX3EsICZiZi0+YmZfbGFzdGZybS0+bGlzdCk7Ci0JCWF0aF90eF91cGRhdGVfYmF3KHNjLCB0eHRpZCwgYmYtPmJmX3NlcW5vKTsKLQotCQkvKiBjb21wbGV0ZSB0aGlzIHN1Yi1mcmFtZSAqLwotCQlhdGhfdHhfY29tcGxldGVfYnVmKHNjLCBiZiwgJmJmX2hlYWQsIDAsIDApOwotCX0KLQotCWlmICh0eHRpZC0+YmF3X2hlYWQgIT0gdHh0aWQtPmJhd190YWlsKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKLQkJdHh0aWQtPnN0YXRlIHw9IEFHR1JfQ0xFQU5VUDsKLQl9IGVsc2UgewotCQl0eHRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCXR4dGlkLT5hZGRiYV9leGNoYW5nZWF0dGVtcHRzID0gMDsKLQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOwotCQlhdGhfdHhfZmx1c2hfdGlkKHNjLCB0eHRpZCk7Ci0JfQotfQotCi0vKgotICogVHggc2NoZWR1bGluZyBsb2dpYwotICogTkI6IG11c3QgYmUgY2FsbGVkIHdpdGggdHhxIGxvY2sgaGVsZAotICovCi0KIHZvaWQgYXRoX3R4cV9zY2hlZHVsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKIHsKIAlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWM7CiAJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CiAKLQkvKiBub3RoaW5nIHRvIHNjaGVkdWxlICovCiAJaWYgKGxpc3RfZW1wdHkoJnR4cS0+YXhxX2FjcSkpCiAJCXJldHVybjsKLQkvKgotCSAqIGdldCB0aGUgZmlyc3Qgbm9kZS9hYyBwYWlyIG9uIHRoZSBxdWV1ZQotCSAqLworCiAJYWMgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHEtPmF4cV9hY3EsIHN0cnVjdCBhdGhfYXR4X2FjLCBsaXN0KTsKIAlsaXN0X2RlbCgmYWMtPmxpc3QpOwogCWFjLT5zY2hlZCA9IGZhbHNlOwogCi0JLyoKLQkgKiBwcm9jZXNzIGEgc2luZ2xlIHRpZCBwZXIgZGVzdGluYXRpb24KLQkgKi8KIAlkbyB7Ci0JCS8qIG5vdGhpbmcgdG8gc2NoZWR1bGUgKi8KIAkJaWYgKGxpc3RfZW1wdHkoJmFjLT50aWRfcSkpCiAJCQlyZXR1cm47CiAKQEAgLTIzNzIsNyArMTEwOCw3IEBACiAJCWxpc3RfZGVsKCZ0aWQtPmxpc3QpOwogCQl0aWQtPnNjaGVkID0gZmFsc2U7CiAKLQkJaWYgKHRpZC0+cGF1c2VkKSAgICAvKiBjaGVjayBuZXh0IHRpZCB0byBrZWVwIGgvdyBidXN5ICovCisJCWlmICh0aWQtPnBhdXNlZCkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICgodHhxLT5heHFfZGVwdGggJSAyKSA9PSAwKQpAQCAtMjM4NSwxNyArMTEyMSwxMCBAQAogCQlpZiAoIWxpc3RfZW1wdHkoJnRpZC0+YnVmX3EpKQogCQkJYXRoX3R4X3F1ZXVlX3RpZCh0eHEsIHRpZCk7CiAKLQkJLyogb25seSBzY2hlZHVsZSBvbmUgVElEIGF0IGEgdGltZSAqLwogCQlicmVhazsKIAl9IHdoaWxlICghbGlzdF9lbXB0eSgmYWMtPnRpZF9xKSk7CiAKLQkvKgotCSAqIHNjaGVkdWxlIEFDIGlmIG1vcmUgVElEcyBuZWVkIHByb2Nlc3NpbmcKLQkgKi8KIAlpZiAoIWxpc3RfZW1wdHkoJmFjLT50aWRfcSkpIHsKLQkJLyoKLQkJICogYWRkIGRlc3QgYWMgdG8gdHhxIGlmIG5vdCBhbHJlYWR5IGFkZGVkCi0JCSAqLwogCQlpZiAoIWFjLT5zY2hlZCkgewogCQkJYWMtPnNjaGVkID0gdHJ1ZTsKIAkJCWxpc3RfYWRkX3RhaWwoJmFjLT5saXN0LCAmdHhxLT5heHFfYWNxKTsKQEAgLTI0MDMsMTA5ICsxMTMyLDU3MyBAQAogCX0KIH0KIAotLyogSW5pdGlhbGl6ZSBwZXItbm9kZSB0cmFuc21pdCBzdGF0ZSAqLwotCi12b2lkIGF0aF90eF9ub2RlX2luaXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pCitpbnQgYXRoX3R4X3NldHVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaGFsdHlwZSkKIHsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZDsKLQlzdHJ1Y3QgYXRoX2F0eF9hYyAqYWM7Ci0JaW50IHRpZG5vLCBhY25vOwotCi0JLyoKLQkgKiBJbml0IHBlciB0aWQgdHggc3RhdGUKLQkgKi8KLQlmb3IgKHRpZG5vID0gMCwgdGlkID0gJmFuLT50aWRbdGlkbm9dOwotCSAgICAgdGlkbm8gPCBXTUVfTlVNX1RJRDsKLQkgICAgIHRpZG5vKyssIHRpZCsrKSB7Ci0JCXRpZC0+YW4gICAgICAgID0gYW47Ci0JCXRpZC0+dGlkbm8gICAgID0gdGlkbm87Ci0JCXRpZC0+c2VxX3N0YXJ0ID0gdGlkLT5zZXFfbmV4dCA9IDA7Ci0JCXRpZC0+YmF3X3NpemUgID0gV01FX01BWF9CQTsKLQkJdGlkLT5iYXdfaGVhZCAgPSB0aWQtPmJhd190YWlsID0gMDsKLQkJdGlkLT5zY2hlZCAgICAgPSBmYWxzZTsKLQkJdGlkLT5wYXVzZWQgPSBmYWxzZTsKLQkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOwotCQlJTklUX0xJU1RfSEVBRCgmdGlkLT5idWZfcSk7Ci0KLQkJYWNubyA9IFRJRF9UT19XTUVfQUModGlkbm8pOwotCQl0aWQtPmFjID0gJmFuLT5hY1thY25vXTsKLQotCQkvKiBBRERCQSBzdGF0ZSAqLwotCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOwotCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX1BST0dSRVNTOwotCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOwotCX0KLQotCS8qCi0JICogSW5pdCBwZXIgYWMgdHggc3RhdGUKLQkgKi8KLQlmb3IgKGFjbm8gPSAwLCBhYyA9ICZhbi0+YWNbYWNub107Ci0JICAgICBhY25vIDwgV01FX05VTV9BQzsgYWNubysrLCBhYysrKSB7Ci0JCWFjLT5zY2hlZCAgICA9IGZhbHNlOwotCQlJTklUX0xJU1RfSEVBRCgmYWMtPnRpZF9xKTsKLQotCQlzd2l0Y2ggKGFjbm8pIHsKLQkJY2FzZSBXTUVfQUNfQkU6Ci0JCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKLQkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfQkUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV01FX0FDX0JLOgotCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCi0JCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JLKTsKLQkJCWJyZWFrOwotCQljYXNlIFdNRV9BQ19WSToKLQkJCWFjLT5xbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLAotCQkJCSAgIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19WSSk7Ci0JCQlicmVhazsKLQkJY2FzZSBXTUVfQUNfVk86Ci0JCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKLQkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfVk8pOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLS8qIENsZWFudXB0aGUgcGVuZGluZyBidWZmZXJzIGZvciB0aGUgbm9kZS4gKi8KLQotdm9pZCBhdGhfdHhfbm9kZV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKQotewotCWludCBpOwotCXN0cnVjdCBhdGhfYXR4X2FjICphYywgKmFjX3RtcDsKLQlzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwgKnRpZF90bXA7CiAJc3RydWN0IGF0aF90eHEgKnR4cTsKLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKSB7Ci0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkgewotCQkJdHhxID0gJnNjLT50eC50eHFbaV07CiAKLQkJCXNwaW5fbG9jaygmdHhxLT5heHFfbG9jayk7Ci0KLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhYywKLQkJCQkJYWNfdG1wLCAmdHhxLT5heHFfYWNxLCBsaXN0KSB7Ci0JCQkJdGlkID0gbGlzdF9maXJzdF9lbnRyeSgmYWMtPnRpZF9xLAotCQkJCQkJc3RydWN0IGF0aF9hdHhfdGlkLCBsaXN0KTsKLQkJCQlpZiAodGlkICYmIHRpZC0+YW4gIT0gYW4pCi0JCQkJCWNvbnRpbnVlOwotCQkJCWxpc3RfZGVsKCZhYy0+bGlzdCk7Ci0JCQkJYWMtPnNjaGVkID0gZmFsc2U7Ci0KLQkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodGlkLAotCQkJCQkJdGlkX3RtcCwgJmFjLT50aWRfcSwgbGlzdCkgewotCQkJCQlsaXN0X2RlbCgmdGlkLT5saXN0KTsKLQkJCQkJdGlkLT5zY2hlZCA9IGZhbHNlOwotCQkJCQlhdGhfdGlkX2RyYWluKHNjLCB0eHEsIHRpZCk7Ci0JCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7Ci0JCQkJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7Ci0JCQkJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQ0xFQU5VUDsKLQkJCQl9Ci0JCQl9Ci0KLQkJCXNwaW5fdW5sb2NrKCZ0eHEtPmF4cV9sb2NrKTsKLQkJfQorCWlmIChoYWx0eXBlID49IEFSUkFZX1NJWkUoc2MtPnR4Lmh3cV9tYXApKSB7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfRkFUQUwsCisJCQkiSEFMIEFDICV1IG91dCBvZiByYW5nZSwgbWF4ICV6dSFcbiIsCisJCQkgaGFsdHlwZSwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCkpOworCQlyZXR1cm4gMDsKIAl9CisJdHhxID0gYXRoX3R4cV9zZXR1cChzYywgQVRIOUtfVFhfUVVFVUVfREFUQSwgaGFsdHlwZSk7CisJaWYgKHR4cSAhPSBOVUxMKSB7CisJCXNjLT50eC5od3FfbWFwW2hhbHR5cGVdID0gdHhxLT5heHFfcW51bTsKKwkJcmV0dXJuIDE7CisJfSBlbHNlCisJCXJldHVybiAwOwogfQogCi12b2lkIGF0aF90eF9jYWJxKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorLyoqKioqKioqKioqLworLyogVFgsIERNQSAqLworLyoqKioqKioqKioqLworCisvKgorICogSW5zZXJ0IGEgY2hhaW4gb2YgYXRoX2J1ZiAoZGVzY3JpcHRvcnMpIG9uIGEgdHhxIGFuZAorICogYXNzdW1lIHRoZSBkZXNjcmlwdG9ycyBhcmUgYWxyZWFkeSBjaGFpbmVkIHRvZ2V0aGVyIGJ5IGNhbGxlci4KKyAqLworc3RhdGljIHZvaWQgYXRoX3R4X3R4cWFkZGJ1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisKKwkvKgorCSAqIEluc2VydCB0aGUgZnJhbWUgb24gdGhlIG91dGJvdW5kIGxpc3QgYW5kCisJICogcGFzcyBpdCBvbiB0byB0aGUgaGFyZHdhcmUuCisJICovCisKKwlpZiAobGlzdF9lbXB0eShoZWFkKSkKKwkJcmV0dXJuOworCisJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBhdGhfYnVmLCBsaXN0KTsKKworCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdChoZWFkLCAmdHhxLT5heHFfcSk7CisJdHhxLT5heHFfZGVwdGgrKzsKKwl0eHEtPmF4cV90b3RhbHF1ZXVlZCsrOworCXR4cS0+YXhxX2xpbmtidWYgPSBsaXN0X2VudHJ5KHR4cS0+YXhxX3EucHJldiwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCisJRFBSSU5URihzYywgQVRIX0RCR19RVUVVRSwKKwkJInFudW06ICVkLCB0eHEgZGVwdGg6ICVkXG4iLCB0eHEtPmF4cV9xbnVtLCB0eHEtPmF4cV9kZXB0aCk7CisKKwlpZiAodHhxLT5heHFfbGluayA9PSBOVUxMKSB7CisJCWF0aDlrX2h3X3B1dHR4YnVmKGFoLCB0eHEtPmF4cV9xbnVtLCBiZi0+YmZfZGFkZHIpOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsCisJCQkiVFhEUFsldV0gPSAlbGx4ICglcClcbiIsCisJCQl0eHEtPmF4cV9xbnVtLCBpdG82NChiZi0+YmZfZGFkZHIpLCBiZi0+YmZfZGVzYyk7CisJfSBlbHNlIHsKKwkJKnR4cS0+YXhxX2xpbmsgPSBiZi0+YmZfZGFkZHI7CisJCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgImxpbmtbJXVdICglcCk9JWxseCAoJXApXG4iLAorCQkJdHhxLT5heHFfcW51bSwgdHhxLT5heHFfbGluaywKKwkJCWl0bzY0KGJmLT5iZl9kYWRkciksIGJmLT5iZl9kZXNjKTsKKwl9CisJdHhxLT5heHFfbGluayA9ICYoYmYtPmJmX2xhc3RiZi0+YmZfZGVzYy0+ZHNfbGluayk7CisJYXRoOWtfaHdfdHhzdGFydChhaCwgdHhxLT5heHFfcW51bSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXRoX2J1ZiAqYXRoX3R4X2dldF9idWZmZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGF0aF9idWYgKmJmID0gTlVMTDsKKworCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisKKwlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmc2MtPnR4LnR4YnVmKSkpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwliZiA9IGxpc3RfZmlyc3RfZW50cnkoJnNjLT50eC50eGJ1Ziwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWxpc3RfZGVsKCZiZi0+bGlzdCk7CisKKwlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisKKwlyZXR1cm4gYmY7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2FtcGR1KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2F0eF90aWQgKnRpZCwKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmJmX2hlYWQsCisJCQkgICAgICBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQoreworCXN0cnVjdCBhdGhfYnVmICpiZjsKKworCWJmID0gbGlzdF9maXJzdF9lbnRyeShiZl9oZWFkLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX0FNUERVOworCisJLyoKKwkgKiBEbyBub3QgcXVldWUgdG8gaC93IHdoZW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorCSAqIC0gdGhlcmUgYXJlIHBlbmRpbmcgZnJhbWVzIGluIHNvZnR3YXJlIHF1ZXVlCisJICogLSB0aGUgVElEIGlzIGN1cnJlbnRseSBwYXVzZWQgZm9yIEFEREJBL0JBUiByZXF1ZXN0CisJICogLSBzZXFubyBpcyBub3Qgd2l0aGluIGJsb2NrLWFjayB3aW5kb3cKKwkgKiAtIGgvdyBxdWV1ZSBkZXB0aCBleGNlZWRzIGxvdyB3YXRlciBtYXJrCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZ0aWQtPmJ1Zl9xKSB8fCB0aWQtPnBhdXNlZCB8fAorCSAgICAhQkFXX1dJVEhJTih0aWQtPnNlcV9zdGFydCwgdGlkLT5iYXdfc2l6ZSwgYmYtPmJmX3NlcW5vKSB8fAorCSAgICB0eGN0bC0+dHhxLT5heHFfZGVwdGggPj0gQVRIX0FHR1JfTUlOX1FERVBUSCkgeworCQkvKgorCQkgKiBBZGQgdGhpcyBmcmFtZSB0byBzb2Z0d2FyZSBxdWV1ZSBmb3Igc2NoZWR1bGluZyBsYXRlcgorCQkgKiBmb3IgYWdncmVnYXRpb24uCisJCSAqLworCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZ0aWQtPmJ1Zl9xKTsKKwkJYXRoX3R4X3F1ZXVlX3RpZCh0eGN0bC0+dHhxLCB0aWQpOworCQlyZXR1cm47CisJfQorCisJLyogQWRkIHN1Yi1mcmFtZSB0byBCQVcgKi8KKwlhdGhfdHhfYWRkdG9fYmF3KHNjLCB0aWQsIGJmKTsKKworCS8qIFF1ZXVlIHRvIGgvdyB3aXRob3V0IGFnZ3JlZ2F0aW9uICovCisJYmYtPmJmX25mcmFtZXMgPSAxOworCWJmLT5iZl9sYXN0YmYgPSBiZjsKKwlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CisJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhjdGwtPnR4cSwgYmZfaGVhZCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aF90eF9zZW5kX2h0X25vcm1hbChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSwKKwkJCQkgIHN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCkKK3sKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisKKwliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCWJmLT5iZl9zdGF0ZS5iZl90eXBlICY9IH5CVUZfQU1QRFU7CisKKwkvKiB1cGRhdGUgc3RhcnRpbmcgc2VxdWVuY2UgbnVtYmVyIGZvciBzdWJzZXF1ZW50IEFEREJBIHJlcXVlc3QgKi8KKwlJTkNSKHRpZC0+c2VxX3N0YXJ0LCBJRUVFODAyMTFfU0VRX01BWCk7CisKKwliZi0+YmZfbmZyYW1lcyA9IDE7CisJYmYtPmJmX2xhc3RiZiA9IGJmOworCWF0aF9idWZfc2V0X3JhdGUoc2MsIGJmKTsKKwlhdGhfdHhfdHhxYWRkYnVmKHNjLCB0eHEsIGJmX2hlYWQpOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfc2VuZF9ub3JtYWwoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEsCisJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqYmZfaGVhZCkKK3sKKwlzdHJ1Y3QgYXRoX2J1ZiAqYmY7CisKKwliZiA9IGxpc3RfZmlyc3RfZW50cnkoYmZfaGVhZCwgc3RydWN0IGF0aF9idWYsIGxpc3QpOworCisJYmYtPmJmX2xhc3RiZiA9IGJmOworCWJmLT5iZl9uZnJhbWVzID0gMTsKKwlhdGhfYnVmX3NldF9yYXRlKHNjLCBiZik7CisJYXRoX3R4X3R4cWFkZGJ1ZihzYywgdHhxLCBiZl9oZWFkKTsKK30KKworc3RhdGljIGVudW0gYXRoOWtfcGt0X3R5cGUgZ2V0X2h3X3BhY2tldF90eXBlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwllbnVtIGF0aDlrX3BrdF90eXBlIGh0eXBlOworCV9fbGUxNiBmYzsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKworCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkKKwkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9CRUFDT047CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQorCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX1BST0JFX1JFU1A7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2F0aW0oZmMpKQorCQlodHlwZSA9IEFUSDlLX1BLVF9UWVBFX0FUSU07CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3BzcG9sbChmYykpCisJCWh0eXBlID0gQVRIOUtfUEtUX1RZUEVfUFNQT0xMOworCWVsc2UKKwkJaHR5cGUgPSBBVEg5S19QS1RfVFlQRV9OT1JNQUw7CisKKwlyZXR1cm4gaHR5cGU7Cit9CisKK3N0YXRpYyBib29sIGlzX3BhZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJX19sZTE2IGZjOworCisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkgeworCQlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSB8fAorCQkgICAgLyogUG9ydCBBY2Nlc3MgRW50aXR5IChJRUVFIDgwMi4xWCkgKi8KKwkJICAgIChza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBnZXRfaHdfY3J5cHRvX2tleXR5cGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisKKwlpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXkpIHsKKwkJaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1dFUCkKKwkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9XRVA7CisJCWVsc2UgaWYgKHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5LT5hbGcgPT0gQUxHX1RLSVApCisJCQlyZXR1cm4gQVRIOUtfS0VZX1RZUEVfVEtJUDsKKwkJZWxzZSBpZiAodHhfaW5mby0+Y29udHJvbC5od19rZXktPmFsZyA9PSBBTEdfQ0NNUCkKKwkJCXJldHVybiBBVEg5S19LRVlfVFlQRV9BRVM7CisJfQorCisJcmV0dXJuIEFUSDlLX0tFWV9UWVBFX0NMRUFSOworfQorCitzdGF0aWMgdm9pZCBhc3NpZ25fYWdncl90aWRfc2Vxbm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgIHN0cnVjdCBhdGhfYnVmICpiZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3QgYXRoX25vZGUgKmFuOworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOworCV9fbGUxNiBmYzsKKwl1OCAqcWM7CisKKwlpZiAoIXR4X2luZm8tPmNvbnRyb2wuc3RhKQorCQlyZXR1cm47CisKKwlhbiA9IChzdHJ1Y3QgYXRoX25vZGUgKil0eF9pbmZvLT5jb250cm9sLnN0YS0+ZHJ2X3ByaXY7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKKwkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKKwkJYmYtPmJmX3RpZG5vID0gcWNbMF0gJiAweGY7CisJfQorCisJLyoKKwkgKiBGb3IgSFQgY2FwYWJsZSBzdGF0aW9ucywgd2Ugc2F2ZSB0aWRubyBmb3IgbGF0ZXIgdXNlLgorCSAqIFdlIGFsc28gb3ZlcnJpZGUgc2Vxbm8gc2V0IGJ5IHVwcGVyIGxheWVyIHdpdGggdGhlIG9uZQorCSAqIGluIHR4IGFnZ3JlZ2F0aW9uIHN0YXRlLgorCSAqCisJICogSWYgZnJhZ21lbnRhdGlvbiBpcyBvbiwgdGhlIHNlcXVlbmNlIG51bWJlciBpcworCSAqIG5vdCBvdmVycmlkZGVuLCBzaW5jZSBpdCBoYXMgYmVlbgorCSAqIGluY3JlbWVudGVkIGJ5IHRoZSBmcmFnbWVudGF0aW9uIHJvdXRpbmUuCisJICoKKwkgKiBGSVhNRTogY2hlY2sgaWYgdGhlIGZyYWdtZW50YXRpb24gdGhyZXNob2xkIGV4Y2VlZHMKKwkgKiBJRUVFODAyMTEgbWF4LgorCSAqLworCXRpZCA9IEFUSF9BTl8yX1RJRChhbiwgYmYtPmJmX3RpZG5vKTsKKwloZHItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYodGlkLT5zZXFfbmV4dCA8PAorCQkJSUVFRTgwMjExX1NFUV9TRVFfU0hJRlQpOworCWJmLT5iZl9zZXFubyA9IHRpZC0+c2VxX25leHQ7CisJSU5DUih0aWQtPnNlcV9uZXh0LCBJRUVFODAyMTFfU0VRX01BWCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfdHhfZmxhZ3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHN0cnVjdCBhdGhfdHhxICp0eHEpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCWludCBmbGFncyA9IDA7CisKKwlmbGFncyB8PSBBVEg5S19UWERFU0NfQ0xSRE1BU0s7IC8qIG5lZWRlZCBmb3IgY3J5cHRvIGVycm9ycyAqLworCWZsYWdzIHw9IEFUSDlLX1RYREVTQ19JTlRSRVE7CisKKwlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykKKwkJZmxhZ3MgfD0gQVRIOUtfVFhERVNDX05PQUNLOworCisJcmV0dXJuIGZsYWdzOworfQorCisvKgorICogcml4IC0gcmF0ZSBpbmRleAorICogcGt0bGVuIC0gdG90YWwgYnl0ZXMgKGRlbGltcyArIGRhdGEgKyBmY3MgKyBwYWRzICsgcGFkIGRlbGltcykKKyAqIHdpZHRoICAtIDAgZm9yIDIwIE1IeiwgMSBmb3IgNDAgTUh6CisgKiBoYWxmX2dpIC0gdG8gdXNlIDR1cyB2L3MgMy42IHVzIGZvciBzeW1ib2wgdGltZQorICovCitzdGF0aWMgdTMyIGF0aF9wa3RfZHVyYXRpb24oc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHU4IHJpeCwgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgIGludCB3aWR0aCwgaW50IGhhbGZfZ2ksIGJvb2wgc2hvcnRQcmVhbWJsZSkKK3sKKwlzdHJ1Y3QgYXRoX3JhdGVfdGFibGUgKnJhdGVfdGFibGUgPSBzYy0+Y3VyX3JhdGVfdGFibGU7CisJdTMyIG5iaXRzLCBuc3ltYml0cywgZHVyYXRpb24sIG5zeW1ib2xzOworCXU4IHJjOworCWludCBzdHJlYW1zLCBwa3RsZW47CisKKwlwa3RsZW4gPSBiZl9pc2FnZ3IoYmYpID8gYmYtPmJmX2FsIDogYmYtPmJmX2ZybWxlbjsKKwlyYyA9IHJhdGVfdGFibGUtPmluZm9bcml4XS5yYXRlY29kZTsKKworCS8qIGZvciBsZWdhY3kgcmF0ZXMsIHVzZSBvbGQgZnVuY3Rpb24gdG8gY29tcHV0ZSBwYWNrZXQgZHVyYXRpb24gKi8KKwlpZiAoIUlTX0hUX1JBVEUocmMpKQorCQlyZXR1cm4gYXRoOWtfaHdfY29tcHV0ZXR4dGltZShzYy0+c2NfYWgsIHJhdGVfdGFibGUsIHBrdGxlbiwKKwkJCQkJICAgICAgcml4LCBzaG9ydFByZWFtYmxlKTsKKworCS8qIGZpbmQgbnVtYmVyIG9mIHN5bWJvbHM6IFBMQ1AgKyBkYXRhICovCisJbmJpdHMgPSAocGt0bGVuIDw8IDMpICsgT0ZETV9QTENQX0JJVFM7CisJbnN5bWJpdHMgPSBiaXRzX3Blcl9zeW1ib2xbSFRfUkNfMl9NQ1MocmMpXVt3aWR0aF07CisJbnN5bWJvbHMgPSAobmJpdHMgKyBuc3ltYml0cyAtIDEpIC8gbnN5bWJpdHM7CisKKwlpZiAoIWhhbGZfZ2kpCisJCWR1cmF0aW9uID0gU1lNQk9MX1RJTUUobnN5bWJvbHMpOworCWVsc2UKKwkJZHVyYXRpb24gPSBTWU1CT0xfVElNRV9IQUxGR0kobnN5bWJvbHMpOworCisJLyogYWRkdXAgZHVyYXRpb24gZm9yIGxlZ2FjeS9odCB0cmFpbmluZyBhbmQgc2lnbmFsIGZpZWxkcyAqLworCXN0cmVhbXMgPSBIVF9SQ18yX1NUUkVBTVMocmMpOworCWR1cmF0aW9uICs9IExfU1RGICsgTF9MVEYgKyBMX1NJRyArIEhUX1NJRyArIEhUX1NURiArIEhUX0xURihzdHJlYW1zKTsKKworCXJldHVybiBkdXJhdGlvbjsKK30KKworc3RhdGljIHZvaWQgYXRoX2J1Zl9zZXRfcmF0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmKQoreworCXN0cnVjdCBhdGhfcmF0ZV90YWJsZSAqcnQgPSBzYy0+Y3VyX3JhdGVfdGFibGU7CisJc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcyBzZXJpZXNbNF07CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm87CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCWludCBpLCBmbGFncyA9IDA7CisJdTggcml4ID0gMCwgY3RzcmF0ZSA9IDA7CisJYm9vbCBpc19wc3BvbGw7CisKKwltZW1zZXQoc2VyaWVzLCAwLCBzaXplb2Yoc3RydWN0IGF0aDlrXzExbl9yYXRlX3NlcmllcykgKiA0KTsKKworCXNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWJmLT5iZl9tcGR1OworCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlpc19wc3BvbGwgPSBpZWVlODAyMTFfaXNfcHNwb2xsKGhkci0+ZnJhbWVfY29udHJvbCk7CisKKwkvKgorCSAqIFdlIGNoZWNrIGlmIFNob3J0IFByZWFtYmxlIGlzIG5lZWRlZCBmb3IgdGhlIENUUyByYXRlIGJ5CisJICogY2hlY2tpbmcgdGhlIEJTUydzIGdsb2JhbCBmbGFnLgorCSAqIEJ1dCBmb3IgdGhlIHJhdGUgc2VyaWVzLCBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFIGlzIHVzZWQuCisJICovCisJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1BSRUFNQkxFX1NIT1JUKQorCQljdHNyYXRlID0gcnQtPmluZm9bdHhfaW5mby0+Y29udHJvbC5ydHNfY3RzX3JhdGVfaWR4XS5yYXRlY29kZSB8CisJCQlydC0+aW5mb1t0eF9pbmZvLT5jb250cm9sLnJ0c19jdHNfcmF0ZV9pZHhdLnNob3J0X3ByZWFtYmxlOworCWVsc2UKKwkJY3RzcmF0ZSA9IHJ0LT5pbmZvW3R4X2luZm8tPmNvbnRyb2wucnRzX2N0c19yYXRlX2lkeF0ucmF0ZWNvZGU7CisKKwkvKgorCSAqIEFUSDlLX1RYREVTQ19SVFNFTkEgYW5kIEFUSDlLX1RYREVTQ19DVFNFTkEgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKwkgKiBDaGVjayB0aGUgZmlyc3QgcmF0ZSBpbiB0aGUgc2VyaWVzIHRvIGRlY2lkZSB3aGV0aGVyIFJUUy9DVFMKKwkgKiBvciBDVFMtdG8tc2VsZiBoYXMgdG8gYmUgdXNlZC4KKwkgKi8KKwlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX0NUU19QUk9URUNUKQorCQlmbGFncyA9IEFUSDlLX1RYREVTQ19DVFNFTkE7CisJZWxzZSBpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFMpCisJCWZsYWdzID0gQVRIOUtfVFhERVNDX1JUU0VOQTsKKworCS8qIEZJWE1FOiBIYW5kbGUgYWdncmVnYXRpb24gcHJvdGVjdGlvbiAqLworCWlmIChzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYKKwkgICAgKCFiZl9pc2FnZ3IoYmYpIHx8IChiZl9pc2FnZ3IoYmYpICYmIGJmLT5iZl9hbCA8IDgxOTIpKSkgeworCQlmbGFncyA9IEFUSDlLX1RYREVTQ19SVFNFTkE7CisJfQorCisJLyogRm9yIEFSNTQxNiAtIFJUUyBjYW5ub3QgYmUgZm9sbG93ZWQgYnkgYSBmcmFtZSBsYXJnZXIgdGhhbiA4SyAqLworCWlmIChiZl9pc2FnZ3IoYmYpICYmIChiZi0+YmZfYWwgPiBzYy0+c2NfYWgtPmNhcHMucnRzX2FnZ3JfbGltaXQpKQorCQlmbGFncyAmPSB+KEFUSDlLX1RYREVTQ19SVFNFTkEpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAoIXJhdGVzW2ldLmNvdW50IHx8IChyYXRlc1tpXS5pZHggPCAwKSkKKwkJCWNvbnRpbnVlOworCisJCXJpeCA9IHJhdGVzW2ldLmlkeDsKKwkJc2VyaWVzW2ldLlRyaWVzID0gcmF0ZXNbaV0uY291bnQ7CisJCXNlcmllc1tpXS5DaFNlbCA9IHNjLT50eF9jaGFpbm1hc2s7CisKKwkJaWYgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkKKwkJCXNlcmllc1tpXS5SYXRlID0gcnQtPmluZm9bcml4XS5yYXRlY29kZSB8CisJCQkJcnQtPmluZm9bcml4XS5zaG9ydF9wcmVhbWJsZTsKKwkJZWxzZQorCQkJc2VyaWVzW2ldLlJhdGUgPSBydC0+aW5mb1tyaXhdLnJhdGVjb2RlOworCisJCWlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykKKwkJCXNlcmllc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU19SVFNfQ1RTOworCQlpZiAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKQorCQkJc2VyaWVzW2ldLlJhdGVGbGFncyB8PSBBVEg5S19SQVRFU0VSSUVTXzIwNDA7CisJCWlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSkKKwkJCXNlcmllc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU19IQUxGR0k7CisKKwkJc2VyaWVzW2ldLlBrdER1cmF0aW9uID0gYXRoX3BrdF9kdXJhdGlvbihzYywgcml4LCBiZiwKKwkJCSAocmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKSAhPSAwLAorCQkJIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSSksCisJCQkgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9TSE9SVF9QUkVBTUJMRSkpOworCX0KKworCS8qIHNldCBkdXJfdXBkYXRlX2VuIGZvciBsLXNpZyBjb21wdXRhdGlvbiBleGNlcHQgZm9yIFBTLVBvbGwgZnJhbWVzICovCisJYXRoOWtfaHdfc2V0MTFuX3JhdGVzY2VuYXJpbyhzYy0+c2NfYWgsIGJmLT5iZl9kZXNjLAorCQkJCSAgICAgYmYtPmJmX2xhc3RiZi0+YmZfZGVzYywKKwkJCQkgICAgICFpc19wc3BvbGwsIGN0c3JhdGUsCisJCQkJICAgICAwLCBzZXJpZXMsIDQsIGZsYWdzKTsKKworCWlmIChzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYgZmxhZ3MpCisJCWF0aDlrX2h3X3NldDExbl9idXJzdGR1cmF0aW9uKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsIDgxOTIpOworfQorCitzdGF0aWMgaW50IGF0aF90eF9zZXR1cF9idWZmZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBhdGhfYnVmICpiZiwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBhdGhfdHhfY29udHJvbCAqdHhjdGwpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdjsKKwlpbnQgaGRybGVuOworCV9fbGUxNiBmYzsKKworCXR4X2luZm9fcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCp0eF9pbmZvX3ByaXYpLCBHRlBfQVRPTUlDKTsKKwlpZiAodW5saWtlbHkoIXR4X2luZm9fcHJpdikpCisJCXJldHVybiAtRU5PTUVNOworCXR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGFbMF0gPSB0eF9pbmZvX3ByaXY7CisJdHhfaW5mb19wcml2LT5hcGh5ID0gYXBoeTsKKwl0eF9pbmZvX3ByaXYtPmZyYW1lX3R5cGUgPSB0eGN0bC0+ZnJhbWVfdHlwZTsKKwloZHJsZW4gPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpOworCWZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCisJQVRIX1RYQlVGX1JFU0VUKGJmKTsKKworCWJmLT5iZl9mcm1sZW4gPSBza2ItPmxlbiArIEZDU19MRU4gLSAoaGRybGVuICYgMyk7CisKKwlpZiAoY29uZl9pc19odCgmc2MtPmh3LT5jb25mKSAmJiAhaXNfcGFlKHNrYikpCisJCWJmLT5iZl9zdGF0ZS5iZl90eXBlIHw9IEJVRl9IVDsKKworCWJmLT5iZl9mbGFncyA9IHNldHVwX3R4X2ZsYWdzKHNjLCBza2IsIHR4Y3RsLT50eHEpOworCisJYmYtPmJmX2tleXR5cGUgPSBnZXRfaHdfY3J5cHRvX2tleXR5cGUoc2tiKTsKKwlpZiAoYmYtPmJmX2tleXR5cGUgIT0gQVRIOUtfS0VZX1RZUEVfQ0xFQVIpIHsKKwkJYmYtPmJmX2ZybWxlbiArPSB0eF9pbmZvLT5jb250cm9sLmh3X2tleS0+aWN2X2xlbjsKKwkJYmYtPmJmX2tleWl4ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHg7CisJfSBlbHNlIHsKKwkJYmYtPmJmX2tleWl4ID0gQVRIOUtfVFhLRVlJWF9JTlZBTElEOworCX0KKworCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpICYmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UWEFHR1IpKQorCQlhc3NpZ25fYWdncl90aWRfc2Vxbm8oc2tiLCBiZik7CisKKwliZi0+YmZfbXBkdSA9IHNrYjsKKworCWJmLT5iZl9kbWFjb250ZXh0ID0gZG1hX21hcF9zaW5nbGUoc2MtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkgICBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJaWYgKHVubGlrZWx5KGRtYV9tYXBwaW5nX2Vycm9yKHNjLT5kZXYsIGJmLT5iZl9kbWFjb250ZXh0KSkpIHsKKwkJYmYtPmJmX21wZHUgPSBOVUxMOworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0NPTkZJRywKKwkJCSJkbWFfbWFwcGluZ19lcnJvcigpIG9uIFRYXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYmYtPmJmX2J1Zl9hZGRyID0gYmYtPmJmX2RtYWNvbnRleHQ7CisJcmV0dXJuIDA7Cit9CisKKy8qIEZJWE1FOiB0eCBwb3dlciAqLworc3RhdGljIHZvaWQgYXRoX3R4X3N0YXJ0X2RtYShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKiliZi0+YmZfbXBkdTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSAgSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGF0aF9ub2RlICphbiA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOworCXN0cnVjdCBhdGhfZGVzYyAqZHM7CisJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQ7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJaW50IGZybV90eXBlOworCV9fbGUxNiBmYzsKKworCWZybV90eXBlID0gZ2V0X2h3X3BhY2tldF90eXBlKHNrYik7CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CisKKwlJTklUX0xJU1RfSEVBRCgmYmZfaGVhZCk7CisJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZiZl9oZWFkKTsKKworCWRzID0gYmYtPmJmX2Rlc2M7CisJZHMtPmRzX2xpbmsgPSAwOworCWRzLT5kc19kYXRhID0gYmYtPmJmX2J1Zl9hZGRyOworCisJYXRoOWtfaHdfc2V0MTFuX3R4ZGVzYyhhaCwgZHMsIGJmLT5iZl9mcm1sZW4sIGZybV90eXBlLCBNQVhfUkFURV9QT1dFUiwKKwkJCSAgICAgICBiZi0+YmZfa2V5aXgsIGJmLT5iZl9rZXl0eXBlLCBiZi0+YmZfZmxhZ3MpOworCisJYXRoOWtfaHdfZmlsbHR4ZGVzYyhhaCwgZHMsCisJCQkgICAgc2tiLT5sZW4sCS8qIHNlZ21lbnQgbGVuZ3RoICovCisJCQkgICAgdHJ1ZSwJLyogZmlyc3Qgc2VnbWVudCAqLworCQkJICAgIHRydWUsCS8qIGxhc3Qgc2VnbWVudCAqLworCQkJICAgIGRzKTsJLyogZmlyc3QgZGVzY3JpcHRvciAqLworCisJc3Bpbl9sb2NrX2JoKCZ0eGN0bC0+dHhxLT5heHFfbG9jayk7CisKKwlpZiAoYmZfaXNodChiZikgJiYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikgJiYKKwkgICAgdHhfaW5mby0+Y29udHJvbC5zdGEpIHsKKwkJYW4gPSAoc3RydWN0IGF0aF9ub2RlICopdHhfaW5mby0+Y29udHJvbC5zdGEtPmRydl9wcml2OworCQl0aWQgPSBBVEhfQU5fMl9USUQoYW4sIGJmLT5iZl90aWRubyk7CisKKwkJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCQlhdGhfdHhfc2VuZF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsICZiZl9oZWFkKTsKKwkJCWdvdG8gdHhfZG9uZTsKKwkJfQorCisJCWlmIChhdGhfYWdncl9xdWVyeShzYywgYW4sIGJmLT5iZl90aWRubykpIHsKKwkJCS8qCisJCQkgKiBUcnkgYWdncmVnYXRpb24gaWYgaXQncyBhIHVuaWNhc3QgZGF0YSBmcmFtZQorCQkJICogYW5kIHRoZSBkZXN0aW5hdGlvbiBpcyBIVCBjYXBhYmxlLgorCQkJICovCisJCQlhdGhfdHhfc2VuZF9hbXBkdShzYywgdGlkLCAmYmZfaGVhZCwgdHhjdGwpOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFNlbmQgdGhpcyBmcmFtZSBhcyByZWd1bGFyIHdoZW4gQUREQkEKKwkJCSAqIGV4Y2hhbmdlIGlzIG5laXRoZXIgY29tcGxldGUgbm9yIHBlbmRpbmcuCisJCQkgKi8KKwkJCWF0aF90eF9zZW5kX2h0X25vcm1hbChzYywgdHhjdGwtPnR4cSwKKwkJCQkJICAgICAgdGlkLCAmYmZfaGVhZCk7CisJCX0KKwl9IGVsc2UgeworCQlhdGhfdHhfc2VuZF9ub3JtYWwoc2MsIHR4Y3RsLT50eHEsICZiZl9oZWFkKTsKKwl9CisKK3R4X2RvbmU6CisJc3Bpbl91bmxvY2tfYmgoJnR4Y3RsLT50eHEtPmF4cV9sb2NrKTsKK30KKworLyogVXBvbiBmYWlsdXJlIGNhbGxlciBzaG91bGQgZnJlZSBza2IgKi8KK2ludCBhdGhfdHhfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsCisJCSBzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgKnR4Y3RsKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfYnVmICpiZjsKKwlpbnQgcjsKKworCWJmID0gYXRoX3R4X2dldF9idWZmZXIoc2MpOworCWlmICghYmYpIHsKKwkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiVFggYnVmZmVycyBhcmUgZnVsbFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyID0gYXRoX3R4X3NldHVwX2J1ZmZlcihodywgYmYsIHNrYiwgdHhjdGwpOworCWlmICh1bmxpa2VseShyKSkgeworCQlzdHJ1Y3QgYXRoX3R4cSAqdHhxID0gdHhjdGwtPnR4cTsKKworCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLCAiVFggbWVtIGFsbG9jIGZhaWx1cmVcbiIpOworCisJCS8qIHVwb24gYXRoX3R4X3Byb2Nlc3NxKCkgdGhpcyBUWCBxdWV1ZSB3aWxsIGJlIHJlc3VtZWQsIHdlCisJCSAqIGd1YXJhbnRlZSB0aGlzIHdpbGwgaGFwcGVuIGJ5IGtub3dpbmcgYmVmb3JlaGFuZCB0aGF0CisJCSAqIHdlIHdpbGwgYXQgbGVhc3QgaGF2ZSB0byBydW4gVFggY29tcGxldGlvbm9uIG9uZSBidWZmZXIKKwkJICogb24gdGhlIHF1ZXVlICovCisJCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCWlmIChzYy0+dHgudHhxW3R4cS0+YXhxX3FudW1dLmF4cV9kZXB0aCA+IDEpIHsKKwkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHNjLT5odywKKwkJCQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CisJCQl0eHEtPnN0b3BwZWQgPSAxOworCQl9CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKworCQlzcGluX2xvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCQlsaXN0X2FkZF90YWlsKCZiZi0+bGlzdCwgJnNjLT50eC50eGJ1Zik7CisJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKworCQlyZXR1cm4gcjsKKwl9CisKKwlhdGhfdHhfc3RhcnRfZG1hKHNjLCBiZiwgdHhjdGwpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRoX3R4X2NhYnEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAJaW50IGhkcmxlbiwgcGFkc2l6ZTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGF0aF90eF9jb250cm9sIHR4Y3RsOwpAQCAtMjU0Miw3ICsxNzM1LDcgQEAKIAogCURQUklOVEYoc2MsIEFUSF9EQkdfWE1JVCwgInRyYW5zbWl0dGluZyBDQUJRIHBhY2tldCwgc2tiOiAlcFxuIiwgc2tiKTsKIAotCWlmIChhdGhfdHhfc3RhcnQoc2MsIHNrYiwgJnR4Y3RsKSAhPSAwKSB7CisJaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApIHsKIAkJRFBSSU5URihzYywgQVRIX0RCR19YTUlULCAiQ0FCUSBUWCBmYWlsZWRcbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtMjU1MSwzICsxNzQ0LDQzNSBAQAogZXhpdDoKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogfQorCisvKioqKioqKioqKioqKioqKiovCisvKiBUWCBDb21wbGV0aW9uICovCisvKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGF0aF90eF9jb21wbGV0ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICBpbnQgdHhfZmxhZ3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBzYy0+aHc7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBhdGhfdHhfaW5mb19wcml2ICp0eF9pbmZvX3ByaXYgPSBBVEhfVFhfSU5GT19QUklWKHR4X2luZm8pOworCWludCBoZHJsZW4sIHBhZHNpemU7CisJaW50IGZyYW1lX3R5cGUgPSBBVEg5S19OT1RfSU5URVJOQUw7CisKKwlEUFJJTlRGKHNjLCBBVEhfREJHX1hNSVQsICJUWCBjb21wbGV0ZTogc2tiOiAlcFxuIiwgc2tiKTsKKworCWlmICh0eF9pbmZvX3ByaXYpIHsKKwkJaHcgPSB0eF9pbmZvX3ByaXYtPmFwaHktPmh3OworCQlmcmFtZV90eXBlID0gdHhfaW5mb19wcml2LT5mcmFtZV90eXBlOworCX0KKworCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLIHx8CisJICAgIHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQpIHsKKwkJa2ZyZWUodHhfaW5mb19wcml2KTsKKwkJdHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0YVswXSA9IE5VTEw7CisJfQorCisJaWYgKHR4X2ZsYWdzICYgQVRIX1RYX0JBUikKKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQU1QRFVfTk9fQkFDSzsKKworCWlmICghKHR4X2ZsYWdzICYgKEFUSF9UWF9FUlJPUiB8IEFUSF9UWF9YUkVUUlkpKSkgeworCQkvKiBGcmFtZSB3YXMgQUNLZWQgKi8KKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOworCX0KKworCWhkcmxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuX2Zyb21fc2tiKHNrYik7CisJcGFkc2l6ZSA9IGhkcmxlbiAmIDM7CisJaWYgKHBhZHNpemUgJiYgaGRybGVuID49IDI0KSB7CisJCS8qCisJCSAqIFJlbW92ZSBNQUMgaGVhZGVyIHBhZGRpbmcgYmVmb3JlIGdpdmluZyB0aGUgZnJhbWUgYmFjayB0bworCQkgKiBtYWM4MDIxMS4KKwkJICovCisJCW1lbW1vdmUoc2tiLT5kYXRhICsgcGFkc2l6ZSwgc2tiLT5kYXRhLCBoZHJsZW4pOworCQlza2JfcHVsbChza2IsIHBhZHNpemUpOworCX0KKworCWlmIChmcmFtZV90eXBlID09IEFUSDlLX05PVF9JTlRFUk5BTCkKKwkJaWVlZTgwMjExX3R4X3N0YXR1cyhodywgc2tiKTsKKwllbHNlCisJCWF0aDlrX3R4X3N0YXR1cyhodywgc2tiKTsKK30KKworc3RhdGljIHZvaWQgYXRoX3R4X2NvbXBsZXRlX2J1ZihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmJmX3EsCisJCQkJaW50IHR4b2ssIGludCBzZW5kYmFyKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0eF9mbGFncyA9IDA7CisKKworCWlmIChzZW5kYmFyKQorCQl0eF9mbGFncyA9IEFUSF9UWF9CQVI7CisKKwlpZiAoIXR4b2spIHsKKwkJdHhfZmxhZ3MgfD0gQVRIX1RYX0VSUk9SOworCisJCWlmIChiZl9pc3hyZXRyaWVkKGJmKSkKKwkJCXR4X2ZsYWdzIHw9IEFUSF9UWF9YUkVUUlk7CisJfQorCisJZG1hX3VubWFwX3NpbmdsZShzYy0+ZGV2LCBiZi0+YmZfZG1hY29udGV4dCwgc2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOworCWF0aF90eF9jb21wbGV0ZShzYywgc2tiLCB0eF9mbGFncyk7CisKKwkvKgorCSAqIFJldHVybiB0aGUgbGlzdCBvZiBhdGhfYnVmIG9mIHRoaXMgbXBkdSB0byBmcmVlIHF1ZXVlCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT50eC50eGJ1ZmxvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoYmZfcSwgJnNjLT50eC50eGJ1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnR4LnR4YnVmbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGF0aF90eF9udW1fYmFkZnJtcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAorCQkJICAgICAgaW50IHR4b2spCit7CisJc3RydWN0IGF0aF9idWYgKmJmX2xhc3QgPSBiZi0+YmZfbGFzdGJmOworCXN0cnVjdCBhdGhfZGVzYyAqZHMgPSBiZl9sYXN0LT5iZl9kZXNjOworCXUxNiBzZXFfc3QgPSAwOworCXUzMiBiYVtXTUVfQkFfQk1QX1NJWkUgPj4gNV07CisJaW50IGJhX2luZGV4OworCWludCBuYmFkID0gMDsKKwlpbnQgaXNhZ2dyID0gMDsKKworCWlmIChkcy0+ZHNfdHhzdGF0LnRzX2ZsYWdzID09IEFUSDlLX1RYX1NXX0FCT1JURUQpCisJCXJldHVybiAwOworCisJaXNhZ2dyID0gYmZfaXNhZ2dyKGJmKTsKKwlpZiAoaXNhZ2dyKSB7CisJCXNlcV9zdCA9IEFUSF9EU19CQV9TRVEoZHMpOworCQltZW1jcHkoYmEsIEFUSF9EU19CQV9CSVRNQVAoZHMpLCBXTUVfQkFfQk1QX1NJWkUgPj4gMyk7CisJfQorCisJd2hpbGUgKGJmKSB7CisJCWJhX2luZGV4ID0gQVRIX0JBX0lOREVYKHNlcV9zdCwgYmYtPmJmX3NlcW5vKTsKKwkJaWYgKCF0eG9rIHx8IChpc2FnZ3IgJiYgIUFUSF9CQV9JU1NFVChiYSwgYmFfaW5kZXgpKSkKKwkJCW5iYWQrKzsKKworCQliZiA9IGJmLT5iZl9uZXh0OworCX0KKworCXJldHVybiBuYmFkOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfcmNfc3RhdHVzKHN0cnVjdCBhdGhfYnVmICpiZiwgc3RydWN0IGF0aF9kZXNjICpkcywKKwkJCSAgICAgaW50IG5iYWQsIGludCB0eG9rLCBib29sIHVwZGF0ZV9yYykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopYmYtPmJmX21wZHU7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IGF0aF90eF9pbmZvX3ByaXYgKnR4X2luZm9fcHJpdiA9IEFUSF9UWF9JTkZPX1BSSVYodHhfaW5mbyk7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB0eF9pbmZvX3ByaXYtPmFwaHktPmh3OworCXU4IGksIHR4X3JhdGVpbmRleDsKKworCWlmICh0eG9rKQorCQl0eF9pbmZvLT5zdGF0dXMuYWNrX3NpZ25hbCA9IGRzLT5kc190eHN0YXQudHNfcnNzaTsKKworCXR4X3JhdGVpbmRleCA9IGRzLT5kc190eHN0YXQudHNfcmF0ZWluZGV4OworCVdBUk5fT04odHhfcmF0ZWluZGV4ID49IGh3LT5tYXhfcmF0ZXMpOworCisJdHhfaW5mb19wcml2LT51cGRhdGVfcmMgPSB1cGRhdGVfcmM7CisJaWYgKGRzLT5kc190eHN0YXQudHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfRklMVCkKKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfVFhfRklMVEVSRUQ7CisKKwlpZiAoKGRzLT5kc190eHN0YXQudHNfc3RhdHVzICYgQVRIOUtfVFhFUlJfRklMVCkgPT0gMCAmJgorCSAgICAoYmYtPmJmX2ZsYWdzICYgQVRIOUtfVFhERVNDX05PQUNLKSA9PSAwICYmIHVwZGF0ZV9yYykgeworCQlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJbWVtY3B5KCZ0eF9pbmZvX3ByaXYtPnR4LCAmZHMtPmRzX3R4c3RhdCwKKwkJCSAgICAgICBzaXplb2YodHhfaW5mb19wcml2LT50eCkpOworCQkJdHhfaW5mb19wcml2LT5uX2ZyYW1lcyA9IGJmLT5iZl9uZnJhbWVzOworCQkJdHhfaW5mb19wcml2LT5uX2JhZF9mcmFtZXMgPSBuYmFkOworCQl9CisJfQorCisJZm9yIChpID0gdHhfcmF0ZWluZGV4ICsgMTsgaSA8IGh3LT5tYXhfcmF0ZXM7IGkrKykKKwkJdHhfaW5mby0+c3RhdHVzLnJhdGVzW2ldLmNvdW50ID0gMDsKKworCXR4X2luZm8tPnN0YXR1cy5yYXRlc1t0eF9yYXRlaW5kZXhdLmNvdW50ID0gYmYtPmJmX3JldHJpZXMgKyAxOworfQorCitzdGF0aWMgdm9pZCBhdGhfd2FrZV9tYWM4MDIxMV9xdWV1ZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF90eHEgKnR4cSkKK3sKKwlpbnQgcW51bTsKKworCXNwaW5fbG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJaWYgKHR4cS0+c3RvcHBlZCAmJgorCSAgICBzYy0+dHgudHhxW3R4cS0+YXhxX3FudW1dLmF4cV9kZXB0aCA8PSAoQVRIX1RYQlVGIC0gMjApKSB7CisJCXFudW0gPSBhdGhfZ2V0X21hYzgwMjExX3FudW0odHhxLT5heHFfcW51bSwgc2MpOworCQlpZiAocW51bSAhPSAtMSkgeworCQkJaWVlZTgwMjExX3dha2VfcXVldWUoc2MtPmh3LCBxbnVtKTsKKwkJCXR4cS0+c3RvcHBlZCA9IDA7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBhdGhfdHhfcHJvY2Vzc3Eoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdHhxICp0eHEpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9idWYgKmJmLCAqbGFzdGJmLCAqYmZfaGVsZCA9IE5VTEw7CisJc3RydWN0IGxpc3RfaGVhZCBiZl9oZWFkOworCXN0cnVjdCBhdGhfZGVzYyAqZHM7CisJaW50IHR4b2s7CisJaW50IHN0YXR1czsKKworCURQUklOVEYoc2MsIEFUSF9EQkdfUVVFVUUsICJ0eCBxdWV1ZSAlZCAoJXgpLCBsaW5rICVwXG4iLAorCQl0eHEtPmF4cV9xbnVtLCBhdGg5a19od19nZXR0eGJ1ZihzYy0+c2NfYWgsIHR4cS0+YXhxX3FudW0pLAorCQl0eHEtPmF4cV9saW5rKTsKKworCWZvciAoOzspIHsKKwkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJaWYgKGxpc3RfZW1wdHkoJnR4cS0+YXhxX3EpKSB7CisJCQl0eHEtPmF4cV9saW5rID0gTlVMTDsKKwkJCXR4cS0+YXhxX2xpbmtidWYgPSBOVUxMOworCQkJc3Bpbl91bmxvY2tfYmgoJnR4cS0+YXhxX2xvY2spOworCQkJYnJlYWs7CisJCX0KKwkJYmYgPSBsaXN0X2ZpcnN0X2VudHJ5KCZ0eHEtPmF4cV9xLCBzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IGEgQkggZ2V0cyBzY2hlZHVsZWQKKwkJICogYWZ0ZXIgc3cgd3JpdGVzIFR4RSBhbmQgYmVmb3JlIGh3IHJlLWxvYWQgdGhlIGxhc3QKKwkJICogZGVzY3JpcHRvciB0byBnZXQgdGhlIG5ld2x5IGNoYWluZWQgb25lLgorCQkgKiBTb2Z0d2FyZSBtdXN0IGtlZXAgdGhlIGxhc3QgRE9ORSBkZXNjcmlwdG9yIGFzIGEKKwkJICogaG9sZGluZyBkZXNjcmlwdG9yIC0gc29mdHdhcmUgZG9lcyBzbyBieSBtYXJraW5nCisJCSAqIGl0IHdpdGggdGhlIFNUQUxFIGZsYWcuCisJCSAqLworCQliZl9oZWxkID0gTlVMTDsKKwkJaWYgKGJmLT5iZl9zdGF0dXMgJiBBVEhfQlVGU1RBVFVTX1NUQUxFKSB7CisJCQliZl9oZWxkID0gYmY7CisJCQlpZiAobGlzdF9pc19sYXN0KCZiZl9oZWxkLT5saXN0LCAmdHhxLT5heHFfcSkpIHsKKwkJCQl0eHEtPmF4cV9saW5rID0gTlVMTDsKKwkJCQl0eHEtPmF4cV9saW5rYnVmID0gTlVMTDsKKwkJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBob2xkaW5nIGRlc2NyaXB0b3IgaXMgdGhlIGxhc3QKKwkJCQkgKiBkZXNjcmlwdG9yIGluIHF1ZXVlLiBJdCdzIHNhZmUgdG8gcmVtb3ZlCisJCQkJICogdGhlIGxhc3QgaG9sZGluZyBkZXNjcmlwdG9yIGluIEJIIGNvbnRleHQuCisJCQkJICovCisJCQkJc3Bpbl9sb2NrX2JoKCZzYy0+dHgudHhidWZsb2NrKTsKKwkJCQlsaXN0X21vdmVfdGFpbCgmYmZfaGVsZC0+bGlzdCwgJnNjLT50eC50eGJ1Zik7CisJCQkJc3Bpbl91bmxvY2tfYmgoJnNjLT50eC50eGJ1ZmxvY2spOworCisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCWJmID0gbGlzdF9lbnRyeShiZl9oZWxkLT5saXN0Lm5leHQsCisJCQkJCQlzdHJ1Y3QgYXRoX2J1ZiwgbGlzdCk7CisJCQl9CisJCX0KKworCQlsYXN0YmYgPSBiZi0+YmZfbGFzdGJmOworCQlkcyA9IGxhc3RiZi0+YmZfZGVzYzsKKworCQlzdGF0dXMgPSBhdGg5a19od190eHByb2NkZXNjKGFoLCBkcyk7CisJCWlmIChzdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoYmYtPmJmX2Rlc2MgPT0gdHhxLT5heHFfbGFzdGRzV2l0aENUUykKKwkJCXR4cS0+YXhxX2xhc3Rkc1dpdGhDVFMgPSBOVUxMOworCQlpZiAoZHMgPT0gdHhxLT5heHFfZ2F0aW5nZHMpCisJCQl0eHEtPmF4cV9nYXRpbmdkcyA9IE5VTEw7CisKKwkJLyoKKwkJICogUmVtb3ZlIGF0aF9idWYncyBvZiB0aGUgc2FtZSB0cmFuc21pdCB1bml0IGZyb20gdHhxLAorCQkgKiBob3dldmVyIGxlYXZlIHRoZSBsYXN0IGRlc2NyaXB0b3IgYmFjayBhcyB0aGUgaG9sZGluZworCQkgKiBkZXNjcmlwdG9yIGZvciBody4KKwkJICovCisJCWxhc3RiZi0+YmZfc3RhdHVzIHw9IEFUSF9CVUZTVEFUVVNfU1RBTEU7CisJCUlOSVRfTElTVF9IRUFEKCZiZl9oZWFkKTsKKwkJaWYgKCFsaXN0X2lzX3Npbmd1bGFyKCZsYXN0YmYtPmxpc3QpKQorCQkJbGlzdF9jdXRfcG9zaXRpb24oJmJmX2hlYWQsCisJCQkJJnR4cS0+YXhxX3EsIGxhc3RiZi0+bGlzdC5wcmV2KTsKKworCQl0eHEtPmF4cV9kZXB0aC0tOworCQlpZiAoYmZfaXNhZ2dyKGJmKSkKKwkJCXR4cS0+YXhxX2FnZ3JfZGVwdGgtLTsKKworCQl0eG9rID0gKGRzLT5kc190eHN0YXQudHNfc3RhdHVzID09IDApOworCQlzcGluX3VubG9ja19iaCgmdHhxLT5heHFfbG9jayk7CisKKwkJaWYgKGJmX2hlbGQpIHsKKwkJCXNwaW5fbG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisJCQlsaXN0X21vdmVfdGFpbCgmYmZfaGVsZC0+bGlzdCwgJnNjLT50eC50eGJ1Zik7CisJCQlzcGluX3VubG9ja19iaCgmc2MtPnR4LnR4YnVmbG9jayk7CisJCX0KKworCQlpZiAoIWJmX2lzYW1wZHUoYmYpKSB7CisJCQkvKgorCQkJICogVGhpcyBmcmFtZSBpcyBzZW50IG91dCBhcyBhIHNpbmdsZSBmcmFtZS4KKwkJCSAqIFVzZSBoYXJkd2FyZSByZXRyeSBzdGF0dXMgZm9yIHRoaXMgZnJhbWUuCisJCQkgKi8KKwkJCWJmLT5iZl9yZXRyaWVzID0gZHMtPmRzX3R4c3RhdC50c19sb25ncmV0cnk7CisJCQlpZiAoZHMtPmRzX3R4c3RhdC50c19zdGF0dXMgJiBBVEg5S19UWEVSUl9YUkVUUlkpCisJCQkJYmYtPmJmX3N0YXRlLmJmX3R5cGUgfD0gQlVGX1hSRVRSWTsKKwkJCWF0aF90eF9yY19zdGF0dXMoYmYsIGRzLCAwLCB0eG9rLCB0cnVlKTsKKwkJfQorCisJCWlmIChiZl9pc2FtcGR1KGJmKSkKKwkJCWF0aF90eF9jb21wbGV0ZV9hZ2dyKHNjLCB0eHEsIGJmLCAmYmZfaGVhZCwgdHhvayk7CisJCWVsc2UKKwkJCWF0aF90eF9jb21wbGV0ZV9idWYoc2MsIGJmLCAmYmZfaGVhZCwgdHhvaywgMCk7CisKKwkJYXRoX3dha2VfbWFjODAyMTFfcXVldWUoc2MsIHR4cSk7CisKKwkJc3Bpbl9sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwkJaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1RYQUdHUikKKwkJCWF0aF90eHFfc2NoZWR1bGUoc2MsIHR4cSk7CisJCXNwaW5fdW5sb2NrX2JoKCZ0eHEtPmF4cV9sb2NrKTsKKwl9Cit9CisKKwordm9pZCBhdGhfdHhfdGFza2xldChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwl1MzIgcWN1bWFzayA9ICgoMSA8PCBBVEg5S19OVU1fVFhfUVVFVUVTKSAtIDEpOworCisJYXRoOWtfaHdfZ2V0dHhpbnRydHhxcyhzYy0+c2NfYWgsICZxY3VtYXNrKTsKKworCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspIHsKKwkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpICYmIChxY3VtYXNrICYgKDEgPDwgaSkpKQorCQkJYXRoX3R4X3Byb2Nlc3NxKHNjLCAmc2MtPnR4LnR4cVtpXSk7CisJfQorfQorCisvKioqKioqKioqKioqKioqKiovCisvKiBJbml0LCBDbGVhbnVwICovCisvKioqKioqKioqKioqKioqKiovCisKK2ludCBhdGhfdHhfaW5pdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgaW50IG5idWZzKQoreworCWludCBlcnJvciA9IDA7CisKKwlkbyB7CisJCXNwaW5fbG9ja19pbml0KCZzYy0+dHgudHhidWZsb2NrKTsKKworCQllcnJvciA9IGF0aF9kZXNjZG1hX3NldHVwKHNjLCAmc2MtPnR4LnR4ZG1hLCAmc2MtPnR4LnR4YnVmLAorCQkJInR4IiwgbmJ1ZnMsIDEpOworCQlpZiAoZXJyb3IgIT0gMCkgeworCQkJRFBSSU5URihzYywgQVRIX0RCR19GQVRBTCwKKwkJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIHR4IGRlc2NyaXB0b3JzOiAlZFxuIiwKKwkJCQllcnJvcik7CisJCQlicmVhazsKKwkJfQorCisJCWVycm9yID0gYXRoX2Rlc2NkbWFfc2V0dXAoc2MsICZzYy0+YmVhY29uLmJkbWEsICZzYy0+YmVhY29uLmJidWYsCisJCQkJCSAgImJlYWNvbiIsIEFUSF9CQ0JVRiwgMSk7CisJCWlmIChlcnJvciAhPSAwKSB7CisJCQlEUFJJTlRGKHNjLCBBVEhfREJHX0ZBVEFMLAorCQkJCSJGYWlsZWQgdG8gYWxsb2NhdGUgYmVhY29uIGRlc2NyaXB0b3JzOiAlZFxuIiwKKwkJCQllcnJvcik7CisJCQlicmVhazsKKwkJfQorCisJfSB3aGlsZSAoMCk7CisKKwlpZiAoZXJyb3IgIT0gMCkKKwkJYXRoX3R4X2NsZWFudXAoc2MpOworCisJcmV0dXJuIGVycm9yOworfQorCitpbnQgYXRoX3R4X2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaWYgKHNjLT5iZWFjb24uYmRtYS5kZF9kZXNjX2xlbiAhPSAwKQorCQlhdGhfZGVzY2RtYV9jbGVhbnVwKHNjLCAmc2MtPmJlYWNvbi5iZG1hLCAmc2MtPmJlYWNvbi5iYnVmKTsKKworCWlmIChzYy0+dHgudHhkbWEuZGRfZGVzY19sZW4gIT0gMCkKKwkJYXRoX2Rlc2NkbWFfY2xlYW51cChzYywgJnNjLT50eC50eGRtYSwgJnNjLT50eC50eGJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhdGhfdHhfbm9kZV9pbml0KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX25vZGUgKmFuKQoreworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkOworCXN0cnVjdCBhdGhfYXR4X2FjICphYzsKKwlpbnQgdGlkbm8sIGFjbm87CisKKwlmb3IgKHRpZG5vID0gMCwgdGlkID0gJmFuLT50aWRbdGlkbm9dOworCSAgICAgdGlkbm8gPCBXTUVfTlVNX1RJRDsKKwkgICAgIHRpZG5vKyssIHRpZCsrKSB7CisJCXRpZC0+YW4gICAgICAgID0gYW47CisJCXRpZC0+dGlkbm8gICAgID0gdGlkbm87CisJCXRpZC0+c2VxX3N0YXJ0ID0gdGlkLT5zZXFfbmV4dCA9IDA7CisJCXRpZC0+YmF3X3NpemUgID0gV01FX01BWF9CQTsKKwkJdGlkLT5iYXdfaGVhZCAgPSB0aWQtPmJhd190YWlsID0gMDsKKwkJdGlkLT5zY2hlZCAgICAgPSBmYWxzZTsKKwkJdGlkLT5wYXVzZWQgICAgPSBmYWxzZTsKKwkJdGlkLT5zdGF0ZSAmPSB+QUdHUl9DTEVBTlVQOworCQlJTklUX0xJU1RfSEVBRCgmdGlkLT5idWZfcSk7CisJCWFjbm8gPSBUSURfVE9fV01FX0FDKHRpZG5vKTsKKwkJdGlkLT5hYyA9ICZhbi0+YWNbYWNub107CisJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfQ09NUExFVEU7CisJCXRpZC0+c3RhdGUgJj0gfkFHR1JfQUREQkFfUFJPR1JFU1M7CisJCXRpZC0+YWRkYmFfZXhjaGFuZ2VhdHRlbXB0cyA9IDA7CisJfQorCisJZm9yIChhY25vID0gMCwgYWMgPSAmYW4tPmFjW2Fjbm9dOworCSAgICAgYWNubyA8IFdNRV9OVU1fQUM7IGFjbm8rKywgYWMrKykgeworCQlhYy0+c2NoZWQgICAgPSBmYWxzZTsKKwkJSU5JVF9MSVNUX0hFQUQoJmFjLT50aWRfcSk7CisKKwkJc3dpdGNoIChhY25vKSB7CisJCWNhc2UgV01FX0FDX0JFOgorCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCisJCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JFKTsKKwkJCWJyZWFrOworCQljYXNlIFdNRV9BQ19CSzoKKwkJCWFjLT5xbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLAorCQkJCSAgIEFUSDlLX1RYX1FVRVVFX0RBVEEsIEFUSDlLX1dNRV9BQ19CSyk7CisJCQlicmVhazsKKwkJY2FzZSBXTUVfQUNfVkk6CisJCQlhYy0+cW51bSA9IGF0aF90eF9nZXRfcW51bShzYywKKwkJCQkgICBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfVkkpOworCQkJYnJlYWs7CisJCWNhc2UgV01FX0FDX1ZPOgorCQkJYWMtPnFudW0gPSBhdGhfdHhfZ2V0X3FudW0oc2MsCisJCQkJICAgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX1ZPKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIGF0aF90eF9ub2RlX2NsZWFudXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfbm9kZSAqYW4pCit7CisJaW50IGk7CisJc3RydWN0IGF0aF9hdHhfYWMgKmFjLCAqYWNfdG1wOworCXN0cnVjdCBhdGhfYXR4X3RpZCAqdGlkLCAqdGlkX3RtcDsKKwlzdHJ1Y3QgYXRoX3R4cSAqdHhxOworCisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykgeworCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpIHsKKwkJCXR4cSA9ICZzYy0+dHgudHhxW2ldOworCisJCQlzcGluX2xvY2soJnR4cS0+YXhxX2xvY2spOworCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYWMsCisJCQkJCWFjX3RtcCwgJnR4cS0+YXhxX2FjcSwgbGlzdCkgeworCQkJCXRpZCA9IGxpc3RfZmlyc3RfZW50cnkoJmFjLT50aWRfcSwKKwkJCQkJCXN0cnVjdCBhdGhfYXR4X3RpZCwgbGlzdCk7CisJCQkJaWYgKHRpZCAmJiB0aWQtPmFuICE9IGFuKQorCQkJCQljb250aW51ZTsKKwkJCQlsaXN0X2RlbCgmYWMtPmxpc3QpOworCQkJCWFjLT5zY2hlZCA9IGZhbHNlOworCisJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRpZCwKKwkJCQkJCXRpZF90bXAsICZhYy0+dGlkX3EsIGxpc3QpIHsKKwkJCQkJbGlzdF9kZWwoJnRpZC0+bGlzdCk7CisJCQkJCXRpZC0+c2NoZWQgPSBmYWxzZTsKKwkJCQkJYXRoX3RpZF9kcmFpbihzYywgdHhxLCB0aWQpOworCQkJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0FEREJBX0NPTVBMRVRFOworCQkJCQl0aWQtPmFkZGJhX2V4Y2hhbmdlYXR0ZW1wdHMgPSAwOworCQkJCQl0aWQtPnN0YXRlICY9IH5BR0dSX0NMRUFOVVA7CisJCQkJfQorCQkJfQorCisJCQlzcGluX3VubG9jaygmdHhxLT5heHFfbG9jayk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwppbmRleCA0MjIzNjcyLi44NTdkODQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKQEAgLTIsOCArMiw4IEBACiAKICAgICAgRHJpdmVyIGZvciBBdG1lbCBhdDc2YzUwMiBhdDc2YzUwNCBhbmQgYXQ3NmM1MDYgd2lyZWxlc3MgY2FyZHMuCiAKLSAgICAgICAgQ29weXJpZ2h0IDIwMDAtMjAwMSBBVE1FTCBDb3Jwb3JhdGlvbi4KLSAgICAgICAgQ29weXJpZ2h0IDIwMDMtMjAwNCBTaW1vbiBLZWxsZXkuCisJQ29weXJpZ2h0IDIwMDAtMjAwMSBBVE1FTCBDb3Jwb3JhdGlvbi4KKwlDb3B5cmlnaHQgMjAwMy0yMDA0IFNpbW9uIEtlbGxleS4KIAogICAgIFRoaXMgY29kZSB3YXMgZGV2ZWxvcGVkIGZyb20gdmVyc2lvbiAyLjEuMSBvZiB0aGUgQXRtZWwgZHJpdmVycywKICAgICByZWxlYXNlZCBieSBBdG1lbCBjb3JwLiB1bmRlciB0aGUgR1BMIGluIERlY2VtYmVyIDIwMDIuIEl0IGFsc28KQEAgLTg5LDE1ICs4OSwxNSBAQAogCWNvbnN0IGNoYXIgKmZ3X2ZpbGU7CiAJY29uc3QgY2hhciAqZndfZmlsZV9leHQ7CiB9IGZ3X3RhYmxlW10gPSB7Ci0JeyBBVE1FTF9GV19UWVBFXzUwMiwgICAgICAiYXRtZWxfYXQ3NmM1MDIiLCAgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwMkQsICAgICAiYXRtZWxfYXQ3NmM1MDJkIiwgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwMkUsICAgICAiYXRtZWxfYXQ3NmM1MDJlIiwgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwMl8zQ09NLCAiYXRtZWxfYXQ3NmM1MDJfM2NvbSIsICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNCwgICAgICAiYXRtZWxfYXQ3NmM1MDQiLCAgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNF8yOTU4LCAiYXRtZWxfYXQ3NmM1MDRfMjk1OCIsICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNEFfMjk1OCwiYXRtZWxfYXQ3NmM1MDRhXzI5NTgiLCJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFXzUwNiwgICAgICAiYXRtZWxfYXQ3NmM1MDYiLCAgICAgICJiaW4iIH0sCi0JeyBBVE1FTF9GV19UWVBFX05PTkUsICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICBOVUxMIH0KKwl7IEFUTUVMX0ZXX1RZUEVfNTAyLAkJImF0bWVsX2F0NzZjNTAyIiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTAyRCwJCSJhdG1lbF9hdDc2YzUwMmQiLAkiYmluIiB9LAorCXsgQVRNRUxfRldfVFlQRV81MDJFLAkJImF0bWVsX2F0NzZjNTAyZSIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwMl8zQ09NLAkiYXRtZWxfYXQ3NmM1MDJfM2NvbSIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwNCwJCSJhdG1lbF9hdDc2YzUwNCIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwNF8yOTU4LAkiYXRtZWxfYXQ3NmM1MDRfMjk1OCIsCSJiaW4iIH0sCisJeyBBVE1FTF9GV19UWVBFXzUwNEFfMjk1OCwJImF0bWVsX2F0NzZjNTA0YV8yOTU4IiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfNTA2LAkJImF0bWVsX2F0NzZjNTA2IiwJImJpbiIgfSwKKwl7IEFUTUVMX0ZXX1RZUEVfTk9ORSwJCU5VTEwsCQkJTlVMTCB9CiB9OwogCiAjZGVmaW5lIE1BWF9TU0lEX0xFTkdUSCAzMgpAQCAtMTA2LDYwICsxMDYsNjAgQEAKICNkZWZpbmUgTUFYX0JTU19FTlRSSUVTCTY0CiAKIC8qIHJlZ2lzdGVycyAqLwotI2RlZmluZSBHQ1IgIDB4MDAgICAgLy8gICAgICAoU0lSMCkgIEdlbmVyYWwgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotI2RlZmluZSBCU1IgIDB4MDIgICAgLy8gICAgICAoU0lSMSkgIEJhbmsgU3dpdGNoaW5nIFNlbGVjdCBSZWdpc3RlcgorI2RlZmluZSBHQ1IgIDB4MDAgICAgLyogKFNJUjApICBHZW5lcmFsIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQlNSICAweDAyICAgIC8qIChTSVIxKSAgQmFuayBTd2l0Y2hpbmcgU2VsZWN0IFJlZ2lzdGVyICovCiAjZGVmaW5lIEFSICAgMHgwNAogI2RlZmluZSBEUiAgIDB4MDgKLSNkZWZpbmUgTVIxICAweDEyICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDEKLSNkZWZpbmUgTVIyICAweDE0ICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDIKLSNkZWZpbmUgTVIzICAweDE2ICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDMKLSNkZWZpbmUgTVI0ICAweDE4ICAgIC8vICAgICAgTWlycm9yIFJlZ2lzdGVyIDQKKyNkZWZpbmUgTVIxICAweDEyICAgIC8qIE1pcnJvciBSZWdpc3RlciAxICovCisjZGVmaW5lIE1SMiAgMHgxNCAgICAvKiBNaXJyb3IgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBNUjMgIDB4MTYgICAgLyogTWlycm9yIFJlZ2lzdGVyIDMgKi8KKyNkZWZpbmUgTVI0ICAweDE4ICAgIC8qIE1pcnJvciBSZWdpc3RlciA0ICovCiAKICNkZWZpbmUgR1BSMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjCiAjZGVmaW5lIEdQUjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZQogI2RlZmluZSBHUFIzICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKLS8vCi0vLyBDb25zdGFudHMgZm9yIHRoZSBHQ1IgcmVnaXN0ZXIuCi0vLwotI2RlZmluZSBHQ1JfUkVNQVAgICAgIDB4MDQwMCAgICAgICAgICAvLyBSZW1hcCBpbnRlcm5hbCBTUkFNIHRvIDAKLSNkZWZpbmUgR0NSX1NXUkVTICAgICAweDAwODAgICAgICAgICAgLy8gQklVIHJlc2V0IChBUk0gYW5kIFBBSSBhcmUgTk9UIHJlc2V0KQotI2RlZmluZSBHQ1JfQ09SRVMgICAgIDB4MDA2MCAgICAgICAgICAvLyBDb3JlIFJlc2V0IChBUk0gYW5kIFBBSSBhcmUgcmVzZXQpCi0jZGVmaW5lIEdDUl9FTklOVCAgICAgMHgwMDAyICAgICAgICAgIC8vIEVuYWJsZSBJbnRlcnJ1cHRzCi0jZGVmaW5lIEdDUl9BQ0tJTlQgICAgMHgwMDA4ICAgICAgICAgIC8vIEFja25vd2xlZGdlIEludGVycnVwdHMKKy8qCisgKiBDb25zdGFudHMgZm9yIHRoZSBHQ1IgcmVnaXN0ZXIuCisgKi8KKyNkZWZpbmUgR0NSX1JFTUFQICAgICAweDA0MDAgICAgICAgICAgLyogUmVtYXAgaW50ZXJuYWwgU1JBTSB0byAwICovCisjZGVmaW5lIEdDUl9TV1JFUyAgICAgMHgwMDgwICAgICAgICAgIC8qIEJJVSByZXNldCAoQVJNIGFuZCBQQUkgYXJlIE5PVCByZXNldCkgKi8KKyNkZWZpbmUgR0NSX0NPUkVTICAgICAweDAwNjAgICAgICAgICAgLyogQ29yZSBSZXNldCAoQVJNIGFuZCBQQUkgYXJlIHJlc2V0KSAqLworI2RlZmluZSBHQ1JfRU5JTlQgICAgIDB4MDAwMiAgICAgICAgICAvKiBFbmFibGUgSW50ZXJydXB0cyAqLworI2RlZmluZSBHQ1JfQUNLSU5UICAgIDB4MDAwOCAgICAgICAgICAvKiBBY2tub3dsZWRnZSBJbnRlcnJ1cHRzICovCiAKLSNkZWZpbmUgQlNTX1NSQU0gICAgICAweDAyMDAgICAgICAgICAgLy8gQU1CQSBtb2R1bGUgc2VsZWN0aW9uIC0tPiBTUkFNCi0jZGVmaW5lIEJTU19JUkFNICAgICAgMHgwMTAwICAgICAgICAgIC8vIEFNQkEgbW9kdWxlIHNlbGVjdGlvbiAtLT4gSVJBTQotLy8KLS8vIENvbnN0YW50cyBmb3IgdGhlIE1SIHJlZ2lzdGVycy4KLS8vCi0jZGVmaW5lIE1BQ19JTklUX0NPTVBMRVRFICAgICAgIDB4MDAwMSAgICAgICAgLy8gTUFDIGluaXQgaGFzIGJlZW4gY29tcGxldGVkCi0jZGVmaW5lIE1BQ19CT09UX0NPTVBMRVRFICAgICAgIDB4MDAxMCAgICAgICAgLy8gTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkCi0jZGVmaW5lIE1BQ19JTklUX09LICAgICAgICAgICAgIDB4MDAwMiAgICAgICAgLy8gTUFDIGJvb3QgaGFzIGJlZW4gY29tcGxldGVkCisjZGVmaW5lIEJTU19TUkFNICAgICAgMHgwMjAwICAgICAgICAgIC8qIEFNQkEgbW9kdWxlIHNlbGVjdGlvbiAtLT4gU1JBTSAqLworI2RlZmluZSBCU1NfSVJBTSAgICAgIDB4MDEwMCAgICAgICAgICAvKiBBTUJBIG1vZHVsZSBzZWxlY3Rpb24gLS0+IElSQU0gKi8KKy8qCisgKkNvbnN0YW50cyBmb3IgdGhlIE1SIHJlZ2lzdGVycy4KKyAqLworI2RlZmluZSBNQUNfSU5JVF9DT01QTEVURSAgICAgICAweDAwMDEgICAgICAgIC8qIE1BQyBpbml0IGhhcyBiZWVuIGNvbXBsZXRlZCAqLworI2RlZmluZSBNQUNfQk9PVF9DT01QTEVURSAgICAgICAweDAwMTAgICAgICAgIC8qIE1BQyBib290IGhhcyBiZWVuIGNvbXBsZXRlZCAqLworI2RlZmluZSBNQUNfSU5JVF9PSyAgICAgICAgICAgICAweDAwMDIgICAgICAgIC8qIE1BQyBib290IGhhcyBiZWVuIGNvbXBsZXRlZCAqLwogCiAjZGVmaW5lIE1JQl9NQVhfREFUQV9CWVRFUyAgICAyMTIKICNkZWZpbmUgTUlCX0hFQURFUl9TSVpFICAgICAgIDQgICAgLyogZmlyc3QgZm91ciBmaWVsZHMgKi8KIAogc3RydWN0IGdldF9zZXRfbWliIHsKLSAgICAgICAgdTggdHlwZTsKLSAgICAgICAgdTggc2l6ZTsKLSAgICAgICAgdTggaW5kZXg7Ci0gICAgICAgIHU4IHJlc2VydmVkOwotICAgICAgICB1OCBkYXRhW01JQl9NQVhfREFUQV9CWVRFU107CisJdTggdHlwZTsKKwl1OCBzaXplOworCXU4IGluZGV4OworCXU4IHJlc2VydmVkOworCXU4IGRhdGFbTUlCX01BWF9EQVRBX0JZVEVTXTsKIH07CiAKIHN0cnVjdCByeF9kZXNjIHsKLSAgICAgICAgdTMyICAgICAgICAgIE5leHQ7Ci0gICAgICAgIHUxNiAgICAgICAgICBNc2R1UG9zOwotICAgICAgICB1MTYgICAgICAgICAgTXNkdVNpemU7CisJdTMyICAgICAgICAgIE5leHQ7CisJdTE2ICAgICAgICAgIE1zZHVQb3M7CisJdTE2ICAgICAgICAgIE1zZHVTaXplOwogCi0gICAgICAgIHU4ICAgICAgICAgICBTdGF0ZTsKLSAgICAgICAgdTggICAgICAgICAgIFN0YXR1czsKLSAgICAgICAgdTggICAgICAgICAgIFJhdGU7Ci0gICAgICAgIHU4ICAgICAgICAgICBSc3NpOwotICAgICAgICB1OCAgICAgICAgICAgTGlua1F1YWxpdHk7Ci0gICAgICAgIHU4ICAgICAgICAgICBQcmVhbWJsZVR5cGU7Ci0gICAgICAgIHUxNiAgICAgICAgICBEdXJhdGlvbjsKLSAgICAgICAgdTMyICAgICAgICAgIFJ4VGltZTsKKwl1OCAgICAgICAgICAgU3RhdGU7CisJdTggICAgICAgICAgIFN0YXR1czsKKwl1OCAgICAgICAgICAgUmF0ZTsKKwl1OCAgICAgICAgICAgUnNzaTsKKwl1OCAgICAgICAgICAgTGlua1F1YWxpdHk7CisJdTggICAgICAgICAgIFByZWFtYmxlVHlwZTsKKwl1MTYgICAgICAgICAgRHVyYXRpb247CisJdTMyICAgICAgICAgIFJ4VGltZTsKIH07CiAKICNkZWZpbmUgUlhfREVTQ19GTEFHX1ZBTElEICAgICAgIDB4ODAKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXU4ICAgICAgICBLZXlJbmRleDsKIAl1OCAgICAgICAgQ2hpcGVyVHlwZTsKIAl1OCAgICAgICAgQ2hpcHJlTGVuZ3RoOwotICAgICAgICB1OCAgICAgICAgUmVzZXJ2ZWQxOworCXU4ICAgICAgICBSZXNlcnZlZDE7CiAKIAl1OCAgICAgICAgUmVzZXJ2ZWQ7CiAJdTggICAgICAgIFBhY2tldFR5cGU7CkBAIC0yMTIsOSArMjEyLDkgQEAKICNkZWZpbmUgVFhfREVTQ19QQUNLRVRfVFlQRV9PRkZTRVQgICAxNwogI2RlZmluZSBUWF9ERVNDX0hPU1RfTEVOR1RIX09GRlNFVCAgIDE4CiAKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIEhvc3QtTUFDIGludGVyZmFjZQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLyoKKyAqIEhvc3QtTUFDIGludGVyZmFjZQorICovCiAKICNkZWZpbmUgVFhfU1RBVFVTX1NVQ0NFU1MgICAgICAgMHgwMAogCkBAIC0yMjYsMTQgKzIyNiwxNCBAQAogI2RlZmluZSBUWF9QQUNLRVRfVFlQRV9EQVRBICAgICAweDAxCiAjZGVmaW5lIFRYX1BBQ0tFVF9UWVBFX01HTVQgICAgIDB4MDIKIAotI2RlZmluZSBJU1JfRU1QVFkgICAgICAgICAgICAgICAweDAwICAgICAgICAvLyBubyBiaXRzIHNldCBpbiBJU1IKLSNkZWZpbmUgSVNSX1R4Q09NUExFVEUgICAgICAgICAgMHgwMSAgICAgICAgLy8gcGFja2V0IHRyYW5zbWl0dGVkCi0jZGVmaW5lIElTUl9SeENPTVBMRVRFICAgICAgICAgIDB4MDIgICAgICAgIC8vIHBhY2tldCByZWNlaXZlZAotI2RlZmluZSBJU1JfUnhGUkFNRUxPU1QgICAgICAgICAweDA0ICAgICAgICAvLyBSeCBGcmFtZSBsb3N0Ci0jZGVmaW5lIElTUl9GQVRBTF9FUlJPUiAgICAgICAgIDB4MDggICAgICAgIC8vIEZhdGFsIGVycm9yCi0jZGVmaW5lIElTUl9DT01NQU5EX0NPTVBMRVRFICAgIDB4MTAgICAgICAgIC8vIGNvbW1hbmQgY29tcGxldGVkCi0jZGVmaW5lIElTUl9PVVRfT0ZfUkFOR0UgICAgICAgIDB4MjAgICAgICAgIC8vIGNvbW1hbmQgY29tcGxldGVkCi0jZGVmaW5lIElTUl9JQlNTX01FUkdFICAgICAgICAgIDB4NDAgICAgICAgIC8vICg0LjEuMi4zMCk6IElCU1MgbWVyZ2UKKyNkZWZpbmUgSVNSX0VNUFRZICAgICAgICAgICAgICAgMHgwMCAgICAgICAgLyogbm8gYml0cyBzZXQgaW4gSVNSICovCisjZGVmaW5lIElTUl9UeENPTVBMRVRFICAgICAgICAgIDB4MDEgICAgICAgIC8qIHBhY2tldCB0cmFuc21pdHRlZCAqLworI2RlZmluZSBJU1JfUnhDT01QTEVURSAgICAgICAgICAweDAyICAgICAgICAvKiBwYWNrZXQgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgSVNSX1J4RlJBTUVMT1NUICAgICAgICAgMHgwNCAgICAgICAgLyogUnggRnJhbWUgbG9zdCAqLworI2RlZmluZSBJU1JfRkFUQUxfRVJST1IgICAgICAgICAweDA4ICAgICAgICAvKiBGYXRhbCBlcnJvciAqLworI2RlZmluZSBJU1JfQ09NTUFORF9DT01QTEVURSAgICAweDEwICAgICAgICAvKiBjb21tYW5kIGNvbXBsZXRlZCAqLworI2RlZmluZSBJU1JfT1VUX09GX1JBTkdFICAgICAgICAweDIwICAgICAgICAvKiBjb21tYW5kIGNvbXBsZXRlZCAqLworI2RlZmluZSBJU1JfSUJTU19NRVJHRSAgICAgICAgICAweDQwICAgICAgICAvKiAoNC4xLjIuMzApOiBJQlNTIG1lcmdlICovCiAjZGVmaW5lIElTUl9HRU5FUklDX0lSUSAgICAgICAgIDB4ODAKIAogI2RlZmluZSBMb2NhbF9NaWJfVHlwZSAgICAgICAgICAweDAxCkBAIC0zMTEsMjIgKzMxMSwyMiBAQAogI2RlZmluZSBNQVhfRU5DUllQVElPTl9LRVlTIDQKICNkZWZpbmUgTUFYX0VOQ1JZUFRJT05fS0VZX1NJWkUgNDAKIAotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyA4MDIuMTEgcmVsYXRlZCBkZWZpbml0aW9ucwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvKgorICogODAyLjExIHJlbGF0ZWQgZGVmaW5pdGlvbnMKKyAqLwogCi0vLwotLy8gUmVndWxhdG9yeSBEb21haW5zCi0vLworLyoKKyAqIFJlZ3VsYXRvcnkgRG9tYWlucworICovCiAKLSNkZWZpbmUgUkVHX0RPTUFJTl9GQ0MJCTB4MTAJLy9DaGFubmVscwkxLTExCVVTQQotI2RlZmluZSBSRUdfRE9NQUlOX0RPQwkJMHgyMAkvL0NoYW5uZWwJMS0xMQlDYW5hZGEKLSNkZWZpbmUgUkVHX0RPTUFJTl9FVFNJCQkweDMwCS8vQ2hhbm5lbAkxLTEzCUV1cm9wZSAoZXggU3BhaW4vRnJhbmNlKQotI2RlZmluZSBSRUdfRE9NQUlOX1NQQUlOCTB4MzEJLy9DaGFubmVsCTEwLTExCVNwYWluCi0jZGVmaW5lIFJFR19ET01BSU5fRlJBTkNFCTB4MzIJLy9DaGFubmVsCTEwLTEzCUZyYW5jZQotI2RlZmluZSBSRUdfRE9NQUlOX01LSwkJMHg0MAkvL0NoYW5uZWwJMTQJSmFwYW4KLSNkZWZpbmUgUkVHX0RPTUFJTl9NS0sxCQkweDQxCS8vQ2hhbm5lbAkxLTE0CUphcGFuKE1LSzEpCi0jZGVmaW5lIFJFR19ET01BSU5fSVNSQUVMCTB4NTAJLy9DaGFubmVsCTMtOQlJU1JBRUwKKyNkZWZpbmUgUkVHX0RPTUFJTl9GQ0MJCTB4MTAJLyogQ2hhbm5lbHMJMS0xMQlVU0EJCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9ET0MJCTB4MjAJLyogQ2hhbm5lbAkxLTExCUNhbmFkYQkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX0VUU0kJCTB4MzAJLyogQ2hhbm5lbAkxLTEzCUV1cm9wZSAoZXggU3BhaW4vRnJhbmNlKQkqLworI2RlZmluZSBSRUdfRE9NQUlOX1NQQUlOCTB4MzEJLyogQ2hhbm5lbAkxMC0xMQlTcGFpbgkJCQkqLworI2RlZmluZSBSRUdfRE9NQUlOX0ZSQU5DRQkweDMyCS8qIENoYW5uZWwJMTAtMTMJRnJhbmNlCQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fTUtLCQkweDQwCS8qIENoYW5uZWwJMTQJSmFwYW4JCQkJKi8KKyNkZWZpbmUgUkVHX0RPTUFJTl9NS0sxCQkweDQxCS8qIENoYW5uZWwJMS0xNAlKYXBhbihNS0sxKQkJCSovCisjZGVmaW5lIFJFR19ET01BSU5fSVNSQUVMCTB4NTAJLyogQ2hhbm5lbAkzLTkJSVNSQUVMCQkJCSovCiAKICNkZWZpbmUgQlNTX1RZUEVfQURfSE9DCQkxCiAjZGVmaW5lIEJTU19UWVBFX0lORlJBU1RSVUNUVVJFIDIKQEAgLTM2NCwxMyArMzY0LDEzIEBACiAjZGVmaW5lIENJUEhFUl9TVUlURV9DQ1ggICAgICA0CiAjZGVmaW5lIENJUEhFUl9TVUlURV9XRVBfMTI4ICA1CiAKLS8vCi0vLyBJRkFDRSBNQUNST1MgJiBkZWZpbml0aW9ucwotLy8KLS8vCisvKgorICogSUZBQ0UgTUFDUk9TICYgZGVmaW5pdGlvbnMKKyAqLwogCi0vLyBGdW5jQ3RybCBmaWVsZDoKLS8vCisvKgorICogRnVuY0N0cmwgZmllbGQ6CisgKi8KICNkZWZpbmUgRlVOQ19DVFJMX1R4RU5BQkxFCQkweDEwCiAjZGVmaW5lIEZVTkNfQ1RSTF9SeEVOQUJMRQkJMHgyMAogI2RlZmluZSBGVU5DX0NUUkxfSU5JVF9DT01QTEVURQkJMHgwMQpAQCAtMzc4LDQ4ICszNzgsNDggQEAKIC8qIEEgc3R1YiBmaXJtd2FyZSBpbWFnZSB3aGljaCByZWFkcyB0aGUgTUFDIGFkZHJlc3MgZnJvbSBOVlJBTSBvbiB0aGUgY2FyZC4KICAgIEZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24gYW5kIHNvdXJjZSBzZWUgdGhlIGVuZCBvZiB0aGlzIGZpbGUuICovCiBzdGF0aWMgdTggbWFjX3JlYWRlcltdID0gewotCTB4MDYsMHgwMCwweDAwLDB4ZWEsMHgwNCwweDAwLDB4MDAsMHhlYSwweDAzLDB4MDAsMHgwMCwweGVhLDB4MDIsMHgwMCwweDAwLDB4ZWEsCi0JMHgwMSwweDAwLDB4MDAsMHhlYSwweDAwLDB4MDAsMHgwMCwweGVhLDB4ZmYsMHhmZiwweGZmLDB4ZWEsMHhmZSwweGZmLDB4ZmYsMHhlYSwKLQkweGQzLDB4MDAsMHhhMCwweGUzLDB4MDAsMHhmMCwweDIxLDB4ZTEsMHgwZSwweDA0LDB4YTAsMHhlMywweDAwLDB4MTAsMHhhMCwweGUzLAotCTB4ODEsMHgxMSwweGEwLDB4ZTEsMHgwMCwweDEwLDB4ODEsMHhlMywweDAwLDB4MTAsMHg4MCwweGU1LDB4MWMsMHgxMCwweDkwLDB4ZTUsCi0JMHgxMCwweDEwLDB4YzEsMHhlMywweDFjLDB4MTAsMHg4MCwweGU1LDB4MDEsMHgxMCwweGEwLDB4ZTMsMHgwOCwweDEwLDB4ODAsMHhlNSwKLQkweDAyLDB4MDMsMHhhMCwweGUzLDB4MDAsMHgxMCwweGEwLDB4ZTMsMHhiMCwweDEwLDB4YzAsMHhlMSwweGI0LDB4MTAsMHhjMCwweGUxLAotCTB4YjgsMHgxMCwweGMwLDB4ZTEsMHhiYywweDEwLDB4YzAsMHhlMSwweDU2LDB4ZGMsMHhhMCwweGUzLDB4MjEsMHgwMCwweDAwLDB4ZWIsCi0JMHgwYSwweDAwLDB4YTAsMHhlMywweDFhLDB4MDAsMHgwMCwweGViLDB4MTAsMHgwMCwweDAwLDB4ZWIsMHgwNywweDAwLDB4MDAsMHhlYiwKLQkweDAyLDB4MDMsMHhhMCwweGUzLDB4MDIsMHgxNCwweGEwLDB4ZTMsMHhiNCwweDEwLDB4YzAsMHhlMSwweDRjLDB4MTAsMHg5ZiwweGU1LAotCTB4YmMsMHgxMCwweGMwLDB4ZTEsMHgxMCwweDEwLDB4YTAsMHhlMywweGI4LDB4MTAsMHhjMCwweGUxLDB4ZmUsMHhmZiwweGZmLDB4ZWEsCi0JMHgwMCwweDQwLDB4MmQsMHhlOSwweDAwLDB4MjAsMHhhMCwweGUzLDB4MDIsMHgzYywweGEwLDB4ZTMsMHgwMCwweDEwLDB4YTAsMHhlMywKLQkweDI4LDB4MDAsMHg5ZiwweGU1LDB4MzcsMHgwMCwweDAwLDB4ZWIsMHgwMCwweDQwLDB4YmQsMHhlOCwweDFlLDB4ZmYsMHgyZiwweGUxLAotCTB4MDAsMHg0MCwweDJkLDB4ZTksMHgxMiwweDJlLDB4YTAsMHhlMywweDA2LDB4MzAsMHhhMCwweGUzLDB4MDAsMHgxMCwweGEwLDB4ZTMsCi0JMHgwMiwweDA0LDB4YTAsMHhlMywweDJmLDB4MDAsMHgwMCwweGViLDB4MDAsMHg0MCwweGJkLDB4ZTgsMHgxZSwweGZmLDB4MmYsMHhlMSwKLQkweDAwLDB4MDIsMHgwMCwweDAyLDB4ODAsMHgwMSwweDkwLDB4ZTAsMHgwMSwweDAwLDB4MDAsMHgwYSwweDAxLDB4MDAsMHg1MCwweGUyLAotCTB4ZmMsMHhmZiwweGZmLDB4ZWEsMHgxZSwweGZmLDB4MmYsMHhlMSwweDgwLDB4MTAsMHhhMCwweGUzLDB4ZjMsMHgwNiwweGEwLDB4ZTMsCi0JMHgwMCwweDEwLDB4ODAsMHhlNSwweDAwLDB4MTAsMHhhMCwweGUzLDB4MDAsMHgxMCwweDgwLDB4ZTUsMHgwMSwweDEwLDB4YTAsMHhlMywKLQkweDA0LDB4MTAsMHg4MCwweGU1LDB4MDAsMHgxMCwweDgwLDB4ZTUsMHgwZSwweDM0LDB4YTAsMHhlMywweDFjLDB4MTAsMHg5MywweGU1LAotCTB4MDIsMHgxYSwweDgxLDB4ZTMsMHgxYywweDEwLDB4ODMsMHhlNSwweDU4LDB4MTEsMHg5ZiwweGU1LDB4MzAsMHgxMCwweDgwLDB4ZTUsCi0JMHg1NCwweDExLDB4OWYsMHhlNSwweDM0LDB4MTAsMHg4MCwweGU1LDB4MzgsMHgxMCwweDgwLDB4ZTUsMHgzYywweDEwLDB4ODAsMHhlNSwKLQkweDEwLDB4MTAsMHg5MCwweGU1LDB4MDgsMHgwMCwweDkwLDB4ZTUsMHgxZSwweGZmLDB4MmYsMHhlMSwweGYzLDB4MTYsMHhhMCwweGUzLAotCTB4MDgsMHgwMCwweDkxLDB4ZTUsMHgwNSwweDAwLDB4YTAsMHhlMywweDBjLDB4MDAsMHg4MSwweGU1LDB4MTAsMHgwMCwweDkxLDB4ZTUsCi0JMHgwMiwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDBhLDB4ZmYsMHgwMCwweGEwLDB4ZTMsMHgwYywweDAwLDB4ODEsMHhlNSwKLQkweDEwLDB4MDAsMHg5MSwweGU1LDB4MDIsMHgwMCwweDEwLDB4ZTMsMHhmYywweGZmLDB4ZmYsMHgwYSwweDA4LDB4MDAsMHg5MSwweGU1LAotCTB4MTAsMHgwMCwweDkxLDB4ZTUsMHgwMSwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDBhLDB4MDgsMHgwMCwweDkxLDB4ZTUsCi0JMHhmZiwweDAwLDB4MDAsMHhlMiwweDFlLDB4ZmYsMHgyZiwweGUxLDB4MzAsMHg0MCwweDJkLDB4ZTksMHgwMCwweDUwLDB4YTAsMHhlMSwKLQkweDAzLDB4NDAsMHhhMCwweGUxLDB4YTIsMHgwMiwweGEwLDB4ZTEsMHgwOCwweDAwLDB4MDAsMHhlMiwweDAzLDB4MDAsMHg4MCwweGUyLAotCTB4ZDgsMHgxMCwweDlmLDB4ZTUsMHgwMCwweDAwLDB4YzEsMHhlNSwweDAxLDB4MjAsMHhjMSwweGU1LDB4ZTIsMHhmZiwweGZmLDB4ZWIsCi0JMHgwMSwweDAwLDB4MTAsMHhlMywweGZjLDB4ZmYsMHhmZiwweDFhLDB4MTQsMHgwMCwweGEwLDB4ZTMsMHhjNCwweGZmLDB4ZmYsMHhlYiwKLQkweDA0LDB4MjAsMHhhMCwweGUxLDB4MDUsMHgxMCwweGEwLDB4ZTEsMHgwMiwweDAwLDB4YTAsMHhlMywweDAxLDB4MDAsMHgwMCwweGViLAotCTB4MzAsMHg0MCwweGJkLDB4ZTgsMHgxZSwweGZmLDB4MmYsMHhlMSwweDcwLDB4NDAsMHgyZCwweGU5LDB4ZjMsMHg0NiwweGEwLDB4ZTMsCi0JMHgwMCwweDMwLDB4YTAsMHhlMywweDAwLDB4MDAsMHg1MCwweGUzLDB4MDgsMHgwMCwweDAwLDB4OWEsMHg4YywweDUwLDB4OWYsMHhlNSwKLQkweDAzLDB4NjAsMHhkNSwweGU3LDB4MGMsMHg2MCwweDg0LDB4ZTUsMHgxMCwweDYwLDB4OTQsMHhlNSwweDAyLDB4MDAsMHgxNiwweGUzLAotCTB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwMSwweDMwLDB4ODMsMHhlMiwweDAwLDB4MDAsMHg1MywweGUxLDB4ZjcsMHhmZiwweGZmLDB4M2EsCi0JMHhmZiwweDMwLDB4YTAsMHhlMywweDBjLDB4MzAsMHg4NCwweGU1LDB4MDgsMHgwMCwweDk0LDB4ZTUsMHgxMCwweDAwLDB4OTQsMHhlNSwKLQkweDAxLDB4MDAsMHgxMCwweGUzLDB4ZmMsMHhmZiwweGZmLDB4MGEsMHgwOCwweDAwLDB4OTQsMHhlNSwweDAwLDB4MDAsMHhhMCwweGUzLAotCTB4MDAsMHgwMCwweDUyLDB4ZTMsMHgwYiwweDAwLDB4MDAsMHg5YSwweDEwLDB4NTAsMHg5NCwweGU1LDB4MDIsMHgwMCwweDE1LDB4ZTMsCi0JMHhmYywweGZmLDB4ZmYsMHgwYSwweDBjLDB4MzAsMHg4NCwweGU1LDB4MTAsMHg1MCwweDk0LDB4ZTUsMHgwMSwweDAwLDB4MTUsMHhlMywKLQkweGZjLDB4ZmYsMHhmZiwweDBhLDB4MDgsMHg1MCwweDk0LDB4ZTUsMHgwMSwweDUwLDB4YzEsMHhlNCwweDAxLDB4MDAsMHg4MCwweGUyLAotCTB4MDIsMHgwMCwweDUwLDB4ZTEsMHhmMywweGZmLDB4ZmYsMHgzYSwweGM4LDB4MDAsMHhhMCwweGUzLDB4OTgsMHhmZiwweGZmLDB4ZWIsCi0JMHg3MCwweDQwLDB4YmQsMHhlOCwweDFlLDB4ZmYsMHgyZiwweGUxLDB4MDEsMHgwYywweDAwLDB4MDIsMHgwMSwweDAyLDB4MDAsMHgwMiwKLQkweDAwLDB4MDEsMHgwMCwweDAyCisJMHgwNiwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwNCwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwMCwgMHgwMCwgMHhlYSwKKwkweDAxLCAweDAwLCAweDAwLCAweGVhLCAweDAwLCAweDAwLCAweDAwLCAweGVhLCAweGZmLCAweGZmLCAweGZmLCAweGVhLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAorCTB4ZDMsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MGUsIDB4MDQsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCisJMHg4MSwgMHgxMSwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MSwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgxYywgMHgxMCwgMHg5MCwgMHhlNSwKKwkweDEwLCAweDEwLCAweGMxLCAweGUzLCAweDFjLCAweDEwLCAweDgwLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDA4LCAweDEwLCAweDgwLCAweGU1LAorCTB4MDIsIDB4MDMsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4YjAsIDB4MTAsIDB4YzAsIDB4ZTEsIDB4YjQsIDB4MTAsIDB4YzAsIDB4ZTEsCisJMHhiOCwgMHgxMCwgMHhjMCwgMHhlMSwgMHhiYywgMHgxMCwgMHhjMCwgMHhlMSwgMHg1NiwgMHhkYywgMHhhMCwgMHhlMywgMHgyMSwgMHgwMCwgMHgwMCwgMHhlYiwKKwkweDBhLCAweDAwLCAweGEwLCAweGUzLCAweDFhLCAweDAwLCAweDAwLCAweGViLCAweDEwLCAweDAwLCAweDAwLCAweGViLCAweDA3LCAweDAwLCAweDAwLCAweGViLAorCTB4MDIsIDB4MDMsIDB4YTAsIDB4ZTMsIDB4MDIsIDB4MTQsIDB4YTAsIDB4ZTMsIDB4YjQsIDB4MTAsIDB4YzAsIDB4ZTEsIDB4NGMsIDB4MTAsIDB4OWYsIDB4ZTUsCisJMHhiYywgMHgxMCwgMHhjMCwgMHhlMSwgMHgxMCwgMHgxMCwgMHhhMCwgMHhlMywgMHhiOCwgMHgxMCwgMHhjMCwgMHhlMSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwKKwkweDAwLCAweDQwLCAweDJkLCAweGU5LCAweDAwLCAweDIwLCAweGEwLCAweGUzLCAweDAyLCAweDNjLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweGEwLCAweGUzLAorCTB4MjgsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MzcsIDB4MDAsIDB4MDAsIDB4ZWIsIDB4MDAsIDB4NDAsIDB4YmQsIDB4ZTgsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsCisJMHgwMCwgMHg0MCwgMHgyZCwgMHhlOSwgMHgxMiwgMHgyZSwgMHhhMCwgMHhlMywgMHgwNiwgMHgzMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKKwkweDAyLCAweDA0LCAweGEwLCAweGUzLCAweDJmLCAweDAwLCAweDAwLCAweGViLCAweDAwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLAorCTB4MDAsIDB4MDIsIDB4MDAsIDB4MDIsIDB4ODAsIDB4MDEsIDB4OTAsIDB4ZTAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4MDAsIDB4NTAsIDB4ZTIsCisJMHhmYywgMHhmZiwgMHhmZiwgMHhlYSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg4MCwgMHgxMCwgMHhhMCwgMHhlMywgMHhmMywgMHgwNiwgMHhhMCwgMHhlMywKKwkweDAwLCAweDEwLCAweDgwLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgwLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLAorCTB4MDQsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MGUsIDB4MzQsIDB4YTAsIDB4ZTMsIDB4MWMsIDB4MTAsIDB4OTMsIDB4ZTUsCisJMHgwMiwgMHgxYSwgMHg4MSwgMHhlMywgMHgxYywgMHgxMCwgMHg4MywgMHhlNSwgMHg1OCwgMHgxMSwgMHg5ZiwgMHhlNSwgMHgzMCwgMHgxMCwgMHg4MCwgMHhlNSwKKwkweDU0LCAweDExLCAweDlmLCAweGU1LCAweDM0LCAweDEwLCAweDgwLCAweGU1LCAweDM4LCAweDEwLCAweDgwLCAweGU1LCAweDNjLCAweDEwLCAweDgwLCAweGU1LAorCTB4MTAsIDB4MTAsIDB4OTAsIDB4ZTUsIDB4MDgsIDB4MDAsIDB4OTAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZjMsIDB4MTYsIDB4YTAsIDB4ZTMsCisJMHgwOCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwNSwgMHgwMCwgMHhhMCwgMHhlMywgMHgwYywgMHgwMCwgMHg4MSwgMHhlNSwgMHgxMCwgMHgwMCwgMHg5MSwgMHhlNSwKKwkweDAyLCAweDAwLCAweDEwLCAweGUzLCAweGZjLCAweGZmLCAweGZmLCAweDBhLCAweGZmLCAweDAwLCAweGEwLCAweGUzLCAweDBjLCAweDAwLCAweDgxLCAweGU1LAorCTB4MTAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDIsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MDgsIDB4MDAsIDB4OTEsIDB4ZTUsCisJMHgxMCwgMHgwMCwgMHg5MSwgMHhlNSwgMHgwMSwgMHgwMCwgMHgxMCwgMHhlMywgMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwOCwgMHgwMCwgMHg5MSwgMHhlNSwKKwkweGZmLCAweDAwLCAweDAwLCAweGUyLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDMwLCAweDQwLCAweDJkLCAweGU5LCAweDAwLCAweDUwLCAweGEwLCAweGUxLAorCTB4MDMsIDB4NDAsIDB4YTAsIDB4ZTEsIDB4YTIsIDB4MDIsIDB4YTAsIDB4ZTEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MDMsIDB4MDAsIDB4ODAsIDB4ZTIsCisJMHhkOCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgwMCwgMHhjMSwgMHhlNSwgMHgwMSwgMHgyMCwgMHhjMSwgMHhlNSwgMHhlMiwgMHhmZiwgMHhmZiwgMHhlYiwKKwkweDAxLCAweDAwLCAweDEwLCAweGUzLCAweGZjLCAweGZmLCAweGZmLCAweDFhLCAweDE0LCAweDAwLCAweGEwLCAweGUzLCAweGM0LCAweGZmLCAweGZmLCAweGViLAorCTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTEsIDB4MDUsIDB4MTAsIDB4YTAsIDB4ZTEsIDB4MDIsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZWIsCisJMHgzMCwgMHg0MCwgMHhiZCwgMHhlOCwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHg3MCwgMHg0MCwgMHgyZCwgMHhlOSwgMHhmMywgMHg0NiwgMHhhMCwgMHhlMywKKwkweDAwLCAweDMwLCAweGEwLCAweGUzLCAweDAwLCAweDAwLCAweDUwLCAweGUzLCAweDA4LCAweDAwLCAweDAwLCAweDlhLCAweDhjLCAweDUwLCAweDlmLCAweGU1LAorCTB4MDMsIDB4NjAsIDB4ZDUsIDB4ZTcsIDB4MGMsIDB4NjAsIDB4ODQsIDB4ZTUsIDB4MTAsIDB4NjAsIDB4OTQsIDB4ZTUsIDB4MDIsIDB4MDAsIDB4MTYsIDB4ZTMsCisJMHhmYywgMHhmZiwgMHhmZiwgMHgwYSwgMHgwMSwgMHgzMCwgMHg4MywgMHhlMiwgMHgwMCwgMHgwMCwgMHg1MywgMHhlMSwgMHhmNywgMHhmZiwgMHhmZiwgMHgzYSwKKwkweGZmLCAweDMwLCAweGEwLCAweGUzLCAweDBjLCAweDMwLCAweDg0LCAweGU1LCAweDA4LCAweDAwLCAweDk0LCAweGU1LCAweDEwLCAweDAwLCAweDk0LCAweGU1LAorCTB4MDEsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MDgsIDB4MDAsIDB4OTQsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsCisJMHgwMCwgMHgwMCwgMHg1MiwgMHhlMywgMHgwYiwgMHgwMCwgMHgwMCwgMHg5YSwgMHgxMCwgMHg1MCwgMHg5NCwgMHhlNSwgMHgwMiwgMHgwMCwgMHgxNSwgMHhlMywKKwkweGZjLCAweGZmLCAweGZmLCAweDBhLCAweDBjLCAweDMwLCAweDg0LCAweGU1LCAweDEwLCAweDUwLCAweDk0LCAweGU1LCAweDAxLCAweDAwLCAweDE1LCAweGUzLAorCTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4MDgsIDB4NTAsIDB4OTQsIDB4ZTUsIDB4MDEsIDB4NTAsIDB4YzEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsCisJMHgwMiwgMHgwMCwgMHg1MCwgMHhlMSwgMHhmMywgMHhmZiwgMHhmZiwgMHgzYSwgMHhjOCwgMHgwMCwgMHhhMCwgMHhlMywgMHg5OCwgMHhmZiwgMHhmZiwgMHhlYiwKKwkweDcwLCAweDQwLCAweGJkLCAweGU4LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAxLCAweDBjLCAweDAwLCAweDAyLCAweDAxLCAweDAyLCAweDAwLCAweDAyLAorCTB4MDAsIDB4MDEsIDB4MDAsIDB4MDIKIH07CiAKIHN0cnVjdCBhdG1lbF9wcml2YXRlIHsKQEAgLTQzMyw3ICs0MzMsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRldmljZSAqc3lzX2RldjsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3c3RhdHM7Ci0Jc3BpbmxvY2tfdCBpcnFsb2NrLCB0aW1lcmxvY2s7CS8vIHNwaW5sb2NrcworCXNwaW5sb2NrX3QgaXJxbG9jaywgdGltZXJsb2NrOwkvKiBzcGlubG9ja3MgKi8KIAllbnVtIHsgQlVTX1RZUEVfUENDQVJELCBCVVNfVFlQRV9QQ0kgfSBidXNfdHlwZTsKIAllbnVtIHsKIAkJQ0FSRF9UWVBFX1BBUkFMTEVMX0ZMQVNILApAQCAtNTQxLDcgKzU0MSw3IEBACiAJdTggcnhfYnVmW01BWF9XSVJFTEVTU19CT0RZXTsKIH07CiAKLXN0YXRpYyB1OCBhdG1lbF9iYXNpY19yYXRlc1s0XSA9IHsweDgyLDB4ODQsMHgwYiwweDE2fTsKK3N0YXRpYyB1OCBhdG1lbF9iYXNpY19yYXRlc1s0XSA9IHsweDgyLCAweDg0LCAweDBiLCAweDE2fTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJaW50IHJlZ19kb21haW47CkBAIC0xMjgzLDE3ICsxMjgzLDE3IEBACiAKIHN0YXRpYyBpbnQgYXRtZWxfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKLSAgICAgICAgaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gMjMxMikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIGRldi0+bXR1ID0gbmV3X210dTsKLSAgICAgICAgcmV0dXJuIDA7CisJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gMjMxMikpCisJCXJldHVybiAtRUlOVkFMOworCWRldi0+bXR1ID0gbmV3X210dTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdG1lbF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCi0gICAgICAgIG1lbWNweSAoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5IChkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKIAlyZXR1cm4gYXRtZWxfb3BlbihkZXYpOwogfQogCkBAIC0xNDIwLDEwICsxNDIwLDE3IEBACiAJCQkJICAgICBwcml2LT5maXJtd2FyZV9pZCk7CiAKIAkJc3dpdGNoIChwcml2LT5jYXJkX3R5cGUpIHsKLQkJY2FzZSBDQVJEX1RZUEVfUEFSQUxMRUxfRkxBU0g6IGMgPSAiUGFyYWxsZWwgZmxhc2giOyBicmVhazsKLQkJY2FzZSBDQVJEX1RZUEVfU1BJX0ZMQVNIOiBjID0gIlNQSSBmbGFzaFxuIjsgYnJlYWs7Ci0JCWNhc2UgQ0FSRF9UWVBFX0VFUFJPTTogYyA9ICJFRVBST00iOyBicmVhazsKLQkJZGVmYXVsdDogYyA9ICI8dW5rbm93bj4iOworCQljYXNlIENBUkRfVFlQRV9QQVJBTExFTF9GTEFTSDoKKwkJCWMgPSAiUGFyYWxsZWwgZmxhc2giOworCQkJYnJlYWs7CisJCWNhc2UgQ0FSRF9UWVBFX1NQSV9GTEFTSDoKKwkJCWMgPSAiU1BJIGZsYXNoXG4iOworCQkJYnJlYWs7CisJCWNhc2UgQ0FSRF9UWVBFX0VFUFJPTToKKwkJCWMgPSAiRUVQUk9NIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYyA9ICI8dW5rbm93bj4iOwogCQl9CiAKIAkJciA9ICI8dW5rbm93bj4iOwpAQCAtMTQzOSwxNiArMTQ0NiwzMyBAQAogCQkJICAgICBwcml2LT51c2Vfd3BhID8gIlllcyIgOiAiTm8iKTsKIAl9CiAKLQlzd2l0Y2gocHJpdi0+c3RhdGlvbl9zdGF0ZSkgewotCWNhc2UgU1RBVElPTl9TVEFURV9TQ0FOTklORzogcyA9ICJTY2FubmluZyI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9KT0lOTklORzogcyA9ICJKb2luaW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX0FVVEhFTlRJQ0FUSU5HOiBzID0gIkF1dGhlbnRpY2F0aW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX0FTU09DSUFUSU5HOiBzID0gIkFzc29jaWF0aW5nIjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX1JFQURZOiBzID0gIlJlYWR5IjsgYnJlYWs7Ci0JY2FzZSBTVEFUSU9OX1NUQVRFX1JFQVNTT0NJQVRJTkc6IHMgPSAiUmVhc3NvY2lhdGluZyI7IGJyZWFrOwotCWNhc2UgU1RBVElPTl9TVEFURV9NR01UX0VSUk9SOiBzID0gIk1hbmFnZW1lbnQgZXJyb3IiOyBicmVhazsKLQljYXNlIFNUQVRJT05fU1RBVEVfRE9XTjogcyA9ICJEb3duIjsgYnJlYWs7Ci0JZGVmYXVsdDogcyA9ICI8dW5rbm93bj4iOworCXN3aXRjaCAocHJpdi0+c3RhdGlvbl9zdGF0ZSkgeworCWNhc2UgU1RBVElPTl9TVEFURV9TQ0FOTklORzoKKwkJcyA9ICJTY2FubmluZyI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9KT0lOTklORzoKKwkJcyA9ICJKb2luaW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX0FVVEhFTlRJQ0FUSU5HOgorCQlzID0gIkF1dGhlbnRpY2F0aW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX0FTU09DSUFUSU5HOgorCQlzID0gIkFzc29jaWF0aW5nIjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX1JFQURZOgorCQlzID0gIlJlYWR5IjsKKwkJYnJlYWs7CisJY2FzZSBTVEFUSU9OX1NUQVRFX1JFQVNTT0NJQVRJTkc6CisJCXMgPSAiUmVhc3NvY2lhdGluZyI7CisJCWJyZWFrOworCWNhc2UgU1RBVElPTl9TVEFURV9NR01UX0VSUk9SOgorCQlzID0gIk1hbmFnZW1lbnQgZXJyb3IiOworCQlicmVhazsKKwljYXNlIFNUQVRJT05fU1RBVEVfRE9XTjoKKwkJcyA9ICJEb3duIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcyA9ICI8dW5rbm93bj4iOwogCX0KIAogCXAgKz0gc3ByaW50ZihwLCAiQ3VycmVudCBzdGF0ZTpcdFx0JXNcbiIsIHMpOwpAQCAtMTQ1OCwxNiArMTQ4MiwzMCBAQAogc3RhdGljIGludCBhdG1lbF9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCiAJCQkgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotICAgICAgICBzdHJ1Y3QgYXRtZWxfcHJpdmF0ZSAqcHJpdiA9IGRhdGE7CisJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBkYXRhOwogCWludCBsZW4gPSBhdG1lbF9wcm9jX291dHB1dCAocGFnZSwgcHJpdik7Ci0gICAgICAgIGlmIChsZW4gPD0gb2ZmK2NvdW50KSAqZW9mID0gMTsKLSAgICAgICAgKnN0YXJ0ID0gcGFnZSArIG9mZjsKLSAgICAgICAgbGVuIC09IG9mZjsKLSAgICAgICAgaWYgKGxlbj5jb3VudCkgbGVuID0gY291bnQ7Ci0gICAgICAgIGlmIChsZW48MCkgbGVuID0gMDsKLSAgICAgICAgcmV0dXJuIGxlbjsKKwlpZiAobGVuIDw9IG9mZitjb3VudCkKKwkJKmVvZiA9IDE7CisJKnN0YXJ0ID0gcGFnZSArIG9mZjsKKwlsZW4gLT0gb2ZmOworCWlmIChsZW4gPiBjb3VudCkKKwkJbGVuID0gY291bnQ7CisJaWYgKGxlbiA8IDApCisJCWxlbiA9IDA7CisJcmV0dXJuIGxlbjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBhdG1lbF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gYXRtZWxfb3BlbiwKKwkubmRvX3N0b3AJCT0gYXRtZWxfY2xvc2UsCisJLm5kb19jaGFuZ2VfbXR1IAk9IGF0bWVsX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gYXRtZWxfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc3RhcnRfeG1pdCAJPSBzdGFydF90eCwKKwkubmRvX2RvX2lvY3RsIAkJPSBhdG1lbF9pb2N0bCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdHJ1Y3QgbmV0X2RldmljZSAqaW5pdF9hdG1lbF9jYXJkKHVuc2lnbmVkIHNob3J0IGlycSwgdW5zaWduZWQgbG9uZyBwb3J0LAogCQkJCSAgIGNvbnN0IEF0bWVsRldUeXBlIGZ3X3R5cGUsCiAJCQkJICAgc3RydWN0IGRldmljZSAqc3lzX2RldiwKQEAgLTE0NzksMTEgKzE1MTcsMTEgQEAKIAlpbnQgcmM7CiAKIAkvKiBDcmVhdGUgdGhlIG5ldHdvcmsgZGV2aWNlIG9iamVjdC4gKi8KLSAgICAgICAgZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpwcml2KSk7Ci0gICAgICAgIGlmICghZGV2KSB7CisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpwcml2KSk7CisJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhdG1lbDogQ291bGRuJ3QgYWxsb2NfZXRoZXJkZXZcbiIpOwogCQlyZXR1cm4gTlVMTDsKLSAgICAgICAgfQorCX0KIAlpZiAoZGV2X2FsbG9jX25hbWUoZGV2LCBkZXYtPm5hbWUpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImF0bWVsOiBDb3VsZG4ndCBnZXQgbmFtZSFcbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKQEAgLTE1NTIsMTMgKzE1OTAsOCBAQAogCXByaXYtPm1hbmFnZW1lbnRfdGltZXIuZnVuY3Rpb24gPSBhdG1lbF9tYW5hZ2VtZW50X3RpbWVyOwogCXByaXYtPm1hbmFnZW1lbnRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CiAKLQlkZXYtPm9wZW4gPSBhdG1lbF9vcGVuOwotCWRldi0+c3RvcCA9IGF0bWVsX2Nsb3NlOwotCWRldi0+Y2hhbmdlX210dSA9IGF0bWVsX2NoYW5nZV9tdHU7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBhdG1lbF9zZXRfbWFjX2FkZHJlc3M7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBzdGFydF90eDsKLQlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZhdG1lbF9oYW5kbGVyX2RlZjsKLQlkZXYtPmRvX2lvY3RsID0gYXRtZWxfaW9jdGw7CisJZGV2LT5uZXRkZXZfb3BzID0gJmF0bWVsX25ldGRldl9vcHM7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZhdG1lbF9oYW5kbGVyX2RlZjsKIAlkZXYtPmlycSA9IGlycTsKIAlkZXYtPmJhc2VfYWRkciA9IHBvcnQ7CiAKQEAgLTE1NzcsNyArMTYxMCw3IEBACiAJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpKQogCQlnb3RvIGVycl9vdXRfcmVzOwogCi0JaWYgKCFwcm9iZV9hdG1lbF9jYXJkKGRldikpeworCWlmICghcHJvYmVfYXRtZWxfY2FyZChkZXYpKSB7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJCWdvdG8gZXJyX291dF9yZXM7CiAJfQpAQCAtMTU5NCw3ICsxNjI3LDcgQEAKIAlyZXR1cm4gZGV2OwogCiBlcnJfb3V0X3JlczoKLQlyZWxlYXNlX3JlZ2lvbiggZGV2LT5iYXNlX2FkZHIsIDMyKTsKKwlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgMzIpOwogZXJyX291dF9pcnE6CiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiBlcnJfb3V0X2ZyZWU6CkBAIC0xNjMyLDcgKzE2NjUsNyBAQAogCXN0cnVjdCBhdG1lbF9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCS8qIENoZWNrIGlmIHdlIGFza2VkIGZvciBgYW55JyAqLwotCWlmKGR3cnEtPmZsYWdzID09IDApIHsKKwlpZiAoZHdycS0+ZmxhZ3MgPT0gMCkgewogCQlwcml2LT5jb25uZWN0X3RvX2FueV9CU1MgPSAxOwogCX0gZWxzZSB7CiAJCWludCBpbmRleCA9IChkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwpAQCAtMTc2OCw3ICsxODAxLDcgQEAKIAl9CiAJaWYgKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpCiAJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAxOwotCWlmKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCisJaWYgKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX09QRU4pCiAJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAwOwogCiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KQEAgLTE3OTcsNyArMTgzMCw3IEBACiAJLyogQ29weSB0aGUga2V5IHRvIHRoZSB1c2VyIGJ1ZmZlciAqLwogCWR3cnEtPmxlbmd0aCA9IHByaXYtPndlcF9rZXlfbGVuW2luZGV4XTsKIAlpZiAoZHdycS0+bGVuZ3RoID4gMTYpIHsKLQkJZHdycS0+bGVuZ3RoPTA7CisJCWR3cnEtPmxlbmd0aCA9IDA7CiAJfSBlbHNlIHsKIAkJbWVtc2V0KGV4dHJhLCAwLCAxNik7CiAJCW1lbWNweShleHRyYSwgcHJpdi0+d2VwX2tleXNbaW5kZXhdLCBkd3JxLT5sZW5ndGgpOwpAQCAtMjAxMywxMSArMjA0NiwyMCBAQAogCQl9IGVsc2UgewogCQkvKiBTZXR0aW5nIGJ5IGZyZXF1ZW5jeSB2YWx1ZSAqLwogCQkJc3dpdGNoICh2d3JxLT52YWx1ZSkgewotCQkJY2FzZSAgMTAwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDA7IGJyZWFrOwotCQkJY2FzZSAgMjAwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDE7IGJyZWFrOwotCQkJY2FzZSAgNTUwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDI7IGJyZWFrOwotCQkJY2FzZSAxMTAwMDAwMDogcHJpdi0+dHhfcmF0ZSA9IDM7IGJyZWFrOwotCQkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7CisJCQljYXNlICAxMDAwMDAwOgorCQkJCXByaXYtPnR4X3JhdGUgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSAgMjAwMDAwMDoKKwkJCQlwcml2LT50eF9yYXRlID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgIDU1MDAwMDA6CisJCQkJcHJpdi0+dHhfcmF0ZSA9IDI7CisJCQkJYnJlYWs7CisJCQljYXNlIDExMDAwMDAwOgorCQkJCXByaXYtPnR4X3JhdGUgPSAzOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJfQogCX0KQEAgLTIwNjIsMTEgKzIxMDQsMTkgQEAKIAkJdndycS0+dmFsdWUgPSAxMTAwMDAwMDsKIAl9IGVsc2UgewogCQl2d3JxLT5maXhlZCA9IDE7Ci0JCXN3aXRjaChwcml2LT50eF9yYXRlKSB7Ci0JCWNhc2UgMDogdndycS0+dmFsdWUgPSAgMTAwMDAwMDsgYnJlYWs7Ci0JCWNhc2UgMTogdndycS0+dmFsdWUgPSAgMjAwMDAwMDsgYnJlYWs7Ci0JCWNhc2UgMjogdndycS0+dmFsdWUgPSAgNTUwMDAwMDsgYnJlYWs7Ci0JCWNhc2UgMzogdndycS0+dmFsdWUgPSAxMTAwMDAwMDsgYnJlYWs7CisJCXN3aXRjaCAocHJpdi0+dHhfcmF0ZSkgeworCQljYXNlIDA6CisJCQl2d3JxLT52YWx1ZSA9ICAxMDAwMDAwOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXZ3cnEtPnZhbHVlID0gIDIwMDAwMDA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdndycS0+dmFsdWUgPSAgNTUwMDAwMDsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl2d3JxLT52YWx1ZSA9IDExMDAwMDAwOworCQkJYnJlYWs7CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0yMjA0LDkgKzIyNTQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgY29uc3QgbG9uZyBmcmVxdWVuY3lfbGlzdFtdID0geyAyNDEyLCAyNDE3LCAyNDIyLCAyNDI3LCAyNDMyLCAyNDM3LCAyNDQyLAotCQkJCTI0NDcsIDI0NTIsIDI0NTcsIDI0NjIsIDI0NjcsIDI0NzIsIDI0ODQgfTsKLQogc3RhdGljIGludCBhdG1lbF9zZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICBzdHJ1Y3QgaXdfZnJlcSAqZndycSwKQEAgLTIyMTYsMTYgKzIyNjMsMTIgQEAKIAlpbnQgcmMgPSAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAKIAkvKiBJZiBzZXR0aW5nIGJ5IGZyZXF1ZW5jeSwgY29udmVydCB0byBhIGNoYW5uZWwgKi8KLQlpZiAoKGZ3cnEtPmUgPT0gMSkgJiYKLQkgICAgKGZ3cnEtPm0gPj0gKGludCkgMjQxMjAwMDAwKSAmJgotCSAgICAoZndycS0+bSA8PSAoaW50KSAyNDg3MDAwMDApKSB7CisJaWYgKGZ3cnEtPmUgPT0gMSkgewogCQlpbnQgZiA9IGZ3cnEtPm0gLyAxMDAwMDA7Ci0JCWludCBjID0gMDsKLQkJd2hpbGUgKChjIDwgMTQpICYmIChmICE9IGZyZXF1ZW5jeV9saXN0W2NdKSkKLQkJCWMrKzsKKwogCQkvKiBIYWNrIHRvIGZhbGwgdGhyb3VnaC4uLiAqLwogCQlmd3JxLT5lID0gMDsKLQkJZndycS0+bSA9IGMgKyAxOworCQlmd3JxLT5tID0gaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGYpOwogCX0KIAkvKiBTZXR0aW5nIGJ5IGNoYW5uZWwgbnVtYmVyICovCiAJaWYgKChmd3JxLT5tID4gMTAwMCkgfHwgKGZ3cnEtPmUgPiAwKSkKQEAgLTIzODQsOCArMjQyNywxMSBAQAogCWlmIChyYW5nZS0+bnVtX2NoYW5uZWxzICE9IDApIHsKIAkJZm9yIChrID0gMCwgaSA9IGNoYW5uZWxfdGFibGVbal0ubWluOyBpIDw9IGNoYW5uZWxfdGFibGVbal0ubWF4OyBpKyspIHsKIAkJCXJhbmdlLT5mcmVxW2tdLmkgPSBpOyAvKiBMaXN0IGluZGV4ICovCi0JCQlyYW5nZS0+ZnJlcVtrXS5tID0gZnJlcXVlbmN5X2xpc3RbaSAtIDFdICogMTAwMDAwOwotCQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsJLyogVmFsdWVzIGluIHRhYmxlIGluIE1IeiAtPiAqIDEwXjUgKiAxMCAqLworCisJCQkvKiBWYWx1ZXMgaW4gTUh6IC0+ICogMTBeNSAqIDEwICovCisJCQlyYW5nZS0+ZnJlcVtrXS5tID0gKGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShpKSAqCisJCQkJCSAgICAxMDAwMDApOworCQkJcmFuZ2UtPmZyZXFbaysrXS5lID0gMTsKIAkJfQogCQlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGs7CiAJfQpAQCAtMjU4MCw4ICsyNjI2LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBhdG1lbF9oYW5kbGVyX2RlZiA9Ci17CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIGF0bWVsX2hhbmRsZXJfZGVmID0gewogCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKGF0bWVsX2hhbmRsZXIpLAogCS5udW1fcHJpdmF0ZQk9IEFSUkFZX1NJWkUoYXRtZWxfcHJpdmF0ZV9oYW5kbGVyKSwKIAkubnVtX3ByaXZhdGVfYXJncyA9IEFSUkFZX1NJWkUoYXRtZWxfcHJpdmF0ZV9hcmdzKSwKQEAgLTI4MzgsNyArMjg4Myw3IEBACiAKIAlpZiAocHJpdi0+d2VwX2lzX29uICYmIHByaXYtPkN1cnJlbnRBdXRoZW50VHJhbnNhY3Rpb25TZXFOdW0gIT0gMSkKIAkJLyogbm8gV0VQIGZvciBhdXRoZW50aWNhdGlvbiBmcmFtZXMgd2l0aCBUclNlcU5vIDEgKi8KLSAgICAgICAgICAgICAgICBoZWFkZXIuZnJhbWVfY29udHJvbCB8PSAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKwkJaGVhZGVyLmZyYW1lX2NvbnRyb2wgfD0gIGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CiAKIAlhdXRoLmFsZyA9IGNwdV90b19sZTE2KHN5c3RlbSk7CiAKQEAgLTI5NzMsNyArMzAxOCw3IEBACiAJCWlmIChtZW1jbXAoYnNzLCBwcml2LT5CU1NpbmZvW2ldLkJTU0lELCA2KSA9PSAwKQogCQkJaW5kZXggPSBpOwogCi0gICAgICAgIC8qIElmIHdlIHByb2Nlc3MgYSBwcm9iZSBhbmQgYW4gZW50cnkgZnJvbSB0aGlzIEJTUyBleGlzdHMKKwkvKiBJZiB3ZSBwcm9jZXNzIGEgcHJvYmUgYW5kIGFuIGVudHJ5IGZyb20gdGhpcyBCU1MgZXhpc3RzCiAJICAgd2Ugd2lsbCB1cGRhdGUgdGhlIEJTUyBlbnRyeSB3aXRoIHRoZSBpbmZvIGZyb20gdGhpcyBCU1MuCiAJICAgSWYgd2UgcHJvY2VzcyBhIGJlYWNvbiB3ZSB3aWxsIG9ubHkgdXBkYXRlIFJTU0kgKi8KIApAQCAtMjk5OSw3ICszMDQ0LDcgQEAKIAlpZiAoY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTKQogCQlwcml2LT5CU1NpbmZvW2luZGV4XS5CU1N0eXBlID0gSVdfTU9ERV9BREhPQzsKIAllbHNlIGlmIChjYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykKLQkJcHJpdi0+QlNTaW5mb1tpbmRleF0uQlNTdHlwZSA9SVdfTU9ERV9JTkZSQTsKKwkJcHJpdi0+QlNTaW5mb1tpbmRleF0uQlNTdHlwZSA9IElXX01PREVfSU5GUkE7CiAKIAlwcml2LT5CU1NpbmZvW2luZGV4XS5wcmVhbWJsZSA9IGNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUgPwogCQlTSE9SVF9QUkVBTUJMRSA6IExPTkdfUFJFQU1CTEU7CkBAIC0zMDQ2LDcgKzMwOTEsNyBAQAogCQl9CiAKIAkJaWYgKHNob3VsZF9hc3NvY2lhdGUpIHsKLQkJCWlmKHByaXYtPnN0YXRpb25fd2FzX2Fzc29jaWF0ZWQpIHsKKwkJCWlmIChwcml2LT5zdGF0aW9uX3dhc19hc3NvY2lhdGVkKSB7CiAJCQkJYXRtZWxfZW50ZXJfc3RhdGUocHJpdiwgU1RBVElPTl9TVEFURV9SRUFTU09DSUFUSU5HKTsKIAkJCQlzZW5kX2Fzc29jaWF0aW9uX3JlcXVlc3QocHJpdiwgMSk7CiAJCQkJcmV0dXJuOwpAQCAtMzA2Nyw4ICszMTEyLDggQEAKIAkJCXByaXYtPmV4Y2x1ZGVfdW5lbmNyeXB0ZWQgPSAxOwogCQkJc2VuZF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0KHByaXYsIFdMQU5fQVVUSF9TSEFSRURfS0VZLCBOVUxMLCAwKTsKIAkJCXJldHVybjsKLQkJfSBlbHNlIGlmICggICBzeXN0ZW0gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkKLQkJICAgICAgICAgICAmJiBwcml2LT53ZXBfaXNfb24pIHsKKwkJfSBlbHNlIGlmIChzeXN0ZW0gPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkKKwkJCSAgICYmIHByaXYtPndlcF9pc19vbikgewogCQkJcHJpdi0+Q3VycmVudEF1dGhlbnRUcmFuc2FjdGlvblNlcU51bSA9IDB4MDAxOwogCQkJcHJpdi0+ZXhjbHVkZV91bmVuY3J5cHRlZCA9IDA7CiAJCQlzZW5kX2F1dGhlbnRpY2F0aW9uX3JlcXVlc3QocHJpdiwgV0xBTl9BVVRIX09QRU4sIE5VTEwsIDApOwpAQCAtMzI1NiwxMSArMzMwMSwxMSBAQAogCXU4IG1heF9yc3NpID0gNDI7IC8qIDUwMi1ybWZkLXJldmQgbWF4IGJ5IGV4cGVyaW1lbnQsIGRlZmF1bHQgZm9yIG5vdyAqLwogCiAJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JCWNhc2UgQVRNRUxfRldfVFlQRV81MDJFOgotCQkJbWF4X3Jzc2kgPSA2MzsgLyogNTAyLXJtZmQtcmV2ZSBtYXggYnkgZXhwZXJpbWVudCAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwljYXNlIEFUTUVMX0ZXX1RZUEVfNTAyRToKKwkJbWF4X3Jzc2kgPSA2MzsgLyogNTAyLXJtZmQtcmV2ZSBtYXggYnkgZXhwZXJpbWVudCAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAlyc3NpID0gcnNzaSAqIDEwMCAvIG1heF9yc3NpOwpAQCAtMzQ3Nyw4ICszNTIyLDcgQEAKIAkgICAgc3RhdHVzID09IENNRF9TVEFUVVNfSU5fUFJPR1JFU1MpCiAJCXJldHVybjsKIAotCXN3aXRjaCAoY29tbWFuZCl7Ci0KKwlzd2l0Y2ggKGNvbW1hbmQpIHsKIAljYXNlIENNRF9TdGFydDoKIAkJaWYgKHN0YXR1cyA9PSBDTURfU1RBVFVTX0NPTVBMRVRFKSB7CiAJCQlwcml2LT5zdGF0aW9uX3dhc19hc3NvY2lhdGVkID0gcHJpdi0+c3RhdGlvbl9pc19hc3NvY2lhdGVkOwpAQCAtMzcxMyw3ICszNzU3LDcgQEAKIAogCWlmIChyYykgewogCQlpZiAoZGV2LT5kZXZfYWRkclswXSA9PSAweEZGKSB7Ci0JCQl1OCBkZWZhdWx0X21hY1tdID0gezB4MDAsMHgwNCwgMHgyNSwgMHgwMCwgMHgwMCwgMHgwMH07CisJCQl1OCBkZWZhdWx0X21hY1tdID0gezB4MDAsIDB4MDQsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDB9OwogCQkJcHJpbnRrKEtFUk5fQUxFUlQgIiVzOiAqKiogSW52YWxpZCBNQUMgYWRkcmVzcy4gVVBHUkFERSBGaXJtd2FyZSAqKioqXG4iLCBkZXYtPm5hbWUpOwogCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGRlZmF1bHRfbWFjLCA2KTsKIAkJfQpAQCAtMzgwNyw3ICszODUxLDcgQEAKIAkJCQl9IGVsc2UgewogCQkJCQltaWIuZ3JvdXBfa2V5ID0gaTsKIAkJCQkJcHJpdi0+Z3JvdXBfY2lwaGVyX3N1aXRlID0gcHJpdi0+cGFpcndpc2VfY2lwaGVyX3N1aXRlOwotCQkJCSAgICAgICAgbWliLmNpcGhlcl9kZWZhdWx0X2tleV92YWx1ZVtpXVtNQVhfRU5DUllQVElPTl9LRVlfU0laRS0xXSA9IDE7CisJCQkJCW1pYi5jaXBoZXJfZGVmYXVsdF9rZXlfdmFsdWVbaV1bTUFYX0VOQ1JZUFRJT05fS0VZX1NJWkUtMV0gPSAxOwogCQkJCQltaWIuY2lwaGVyX2RlZmF1bHRfa2V5X3ZhbHVlW2ldW01BWF9FTkNSWVBUSU9OX0tFWV9TSVpFLTJdID0gcHJpdi0+Z3JvdXBfY2lwaGVyX3N1aXRlOwogCQkJCX0KIAkJCX0KQEAgLTM5MTcsNyArMzk2MSw3IEBACiAJCQlsZW4gPSBmd19lbnRyeS0+c2l6ZTsKIAkJfQogCi0JICAgICAgICBpZiAobGVuIDw9IDB4NjAwMCkgeworCQlpZiAobGVuIDw9IDB4NjAwMCkgewogCQkJYXRtZWxfd3JpdGUxNihwcml2LT5kZXYsIEJTUiwgQlNTX0lSQU0pOwogCQkJYXRtZWxfY29weV90b19jYXJkKHByaXYtPmRldiwgMCwgZncsIGxlbik7CiAJCQlhdG1lbF9zZXRfZ2NyKHByaXYtPmRldiwgR0NSX1JFTUFQKTsKQEAgLTM5NDYsNyArMzk5MCw3IEBACiAJcHJpdi0+dXNlX3dwYSA9IChwcml2LT5ob3N0X2luZm8ubWFqb3JfdmVyc2lvbiA9PSA0KTsKIAlwcml2LT5yYWRpb19vbl9icm9rZW4gPSAocHJpdi0+aG9zdF9pbmZvLm1ham9yX3ZlcnNpb24gPT0gNSk7CiAKLSAgICAgICAgLyogdW5tYXNrIGFsbCBpcnEgc291cmNlcyAqLworCS8qIHVubWFzayBhbGwgaXJxIHNvdXJjZXMgKi8KIAlhdG1lbF93bWVtOChwcml2LCBhdG1lbF9oaShwcml2LCBJRkFDRV9JTlRfTUFTS19PRkZTRVQpLCAweGZmKTsKIAogCS8qIGludCBUeCBzeXN0ZW0gYW5kIGVuYWJsZSBUeCAqLwpAQCAtMzk3OSw3ICs0MDIzLDcgQEAKIAkJICAgIENNRF9TVEFUVVNfUkVKRUNURURfUkFESU9fT0ZGKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogY2Fubm90IHR1cm4gdGhlIHJhZGlvIG9uLlxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87CisJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KIApAQCAtNDAwMyw4ICs0MDQ3LDcgQEAKIAllbHNlCiAJCWJ1aWxkX3dlcF9taWIocHJpdik7CiAKLQlpZiAob2xkX3N0YXRlID09IFNUQVRJT05fU1RBVEVfUkVBRFkpCi0JeworCWlmIChvbGRfc3RhdGUgPT0gU1RBVElPTl9TVEFURV9SRUFEWSkgewogCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CiAKIAkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CkBAIC00MjgxLDI0ICs0MzI0LDI0IEBACiAJLnNldCBOVlJBTV9MRU5HVEgsIDB4MDIwMAogCS5zZXQgTUFDX0FERFJFU1NfTUlCLCBTUkFNX0JBU0UKIAkuc2V0IE1BQ19BRERSRVNTX0xFTkdUSCwgNgotICAgICAgICAuc2V0IE1BQ19CT09UX0ZMQUcsIDB4MTAKKwkuc2V0IE1BQ19CT09UX0ZMQUcsIDB4MTAKIAkuc2V0IE1SMSwgMAogCS5zZXQgTVIyLCA0CiAJLnNldCBNUjMsIDgKIAkuc2V0IE1SNCwgMHhDCiBSRVNFVF9WRUNUT1I6Ci0gICAgICAgIGIgUkVTRVRfSEFORExFUgorCWIgUkVTRVRfSEFORExFUgogVU5ERUZfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogU1dJX1ZFQ1RPUjoKLSAgICAgICAgYiBIQUxUMQorCWIgSEFMVDEKIElBQk9SVF9WRUNUT1I6Ci0gICAgICAgIGIgSEFMVDEKKwliIEhBTFQxCiBEQUJPUlRfVkVDVE9SOgogUkVTRVJWRURfVkVDVE9SOgotICAgICAgICBiIEhBTFQxCisJYiBIQUxUMQogSVJRX1ZFQ1RPUjoKLSAgICAgICAgYiBIQUxUMQorCWIgSEFMVDEKIEZJUV9WRUNUT1I6CiAJYiBIQUxUMQogSEFMVDE6CWIgSEFMVDEKQEAgLTQzMTAsNyArNDM1Myw3IEBACiAJbGRyCXIwLCA9U1BJX0NHRU5fQkFTRQogCW1vdglyMSwgIzAKIAltb3YJcjEsIHIxLCBsc2wgIzMKLQlvcnIJcjEscjEsICMwCisJb3JyCXIxLCByMSwgIzAKIAlzdHIJcjEsIFtyMF0KIAlsZHIJcjEsIFtyMCwgIzI4XQogCWJpYwlyMSwgcjEsICMxNgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwppbmRleCAxZjgxZDM2Li5hYWI3MWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwpAQCAtMTEwLDEwICsxMTAsMTggQEAKIAlib29sICJCcm9hZGNvbSA0M3h4IGRlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIEI0MwogCS0tLWhlbHAtLS0KLQkgIEJyb2FkY29tIDQzeHggZGVidWdnaW5nIG1lc3NhZ2VzLgorCSAgQnJvYWRjb20gNDN4eCBkZWJ1Z2dpbmcuCiAKLQkgIFNheSBZLCBpZiB5b3Ugd2FudCB0byBmaW5kIG91dCB3aHkgdGhlIGRyaXZlciBkb2VzIG5vdAotCSAgd29yayBmb3IgeW91LgorCSAgVGhpcyBhZGRzIGFkZGl0aW9uYWwgcnVudGltZSBzYW5pdHkgY2hlY2tzIGFuZCBzdGF0aXN0aWNzIHRvIHRoZSBkcml2ZXIuCisJICBUaGVzZSBjaGVja3MgYW5kIHN0YXRpc3RpY3MgbWlnaHQgbWUgZXhwZW5zaXZlIGFuZCBodXJ0IHJ1bnRpbWUgcGVyZm9ybWFuY2UKKwkgIG9mIHlvdXIgc3lzdGVtLgorCSAgVGhpcyBhbHNvIGFkZHMgdGhlIGI0MyBkZWJ1Z2ZzIGludGVyZmFjZS4KKworCSAgRG8gbm90IGVuYWJsZSB0aGlzLCB1bmxlc3MgeW91IGFyZSBkZWJ1Z2dpbmcgdGhlIGRyaXZlci4KKworCSAgU2F5IE4sIGlmIHlvdSBhcmUgYSBkaXN0cmlidXRvciBvciB1c2VyIGJ1aWxkaW5nIGEgcmVsZWFzZSBrZXJuZWwKKwkgIGZvciBwcm9kdWN0aW9uIHVzZS4KKwkgIE9ubHkgc2F5IFksIGlmIHlvdSBhcmUgZGVidWdnaW5nIGEgcHJvYmxlbSBpbiB0aGUgYjQzIGRyaXZlciBzb3VyY2Vjb2RlLgogCiBjb25maWcgQjQzX0ZPUkNFX1BJTwogCWJvb2wgIkZvcmNlIHVzYWdlIG9mIFBJTyBpbnN0ZWFkIG9mIERNQSIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZQppbmRleCAxNGEwMmIzLi4yODFlZjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogYjQzLXkJCQkJKz0gcGh5X2EubwogYjQzLSQoQ09ORklHX0I0M19OUEhZKQkJKz0gcGh5X24ubwogYjQzLSQoQ09ORklHX0I0M19QSFlfTFApCSs9IHBoeV9scC5vCitiNDMtJChDT05GSUdfQjQzX1BIWV9MUCkJKz0gdGFibGVzX2xwcGh5Lm8KIGI0My15CQkJCSs9IHN5c2ZzLm8KIGI0My15CQkJCSs9IHhtaXQubwogYjQzLXkJCQkJKz0gbG8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCmluZGV4IGE1M2MzNzguLmJlYWYxOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKQEAgLTEyMCw2ICsxMjAsOSBAQAogI2RlZmluZSBCNDNfTU1JT19JRlNDVEwJCQkweDY4OCAvKiBJbnRlcmZyYW1lIHNwYWNlIGNvbnRyb2wgKi8KICNkZWZpbmUgIEI0M19NTUlPX0lGU0NUTF9VU0VfRURDRgkweDAwMDQKICNkZWZpbmUgQjQzX01NSU9fUE9XRVJVUF9ERUxBWQkJMHg2QTgKKyNkZWZpbmUgQjQzX01NSU9fQlRDT0VYX0NUTAkJMHg2QjQgLyogQmx1ZXRvb3RoIENvZXhpc3RlbmNlIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX01NSU9fQlRDT0VYX1NUQVQJCTB4NkI2IC8qIEJsdWV0b290aCBDb2V4aXN0ZW5jZSBTdGF0dXMgKi8KKyNkZWZpbmUgQjQzX01NSU9fQlRDT0VYX1RYQ1RMCQkweDZCOCAvKiBCbHVldG9vdGggQ29leGlzdGVuY2UgVHJhbnNtaXQgQ29udHJvbCAqLwogCiAvKiBTUFJPTSBib2FyZGZsYWdzX2xvIHZhbHVlcyAqLwogI2RlZmluZSBCNDNfQkZMX0JUQ09FWElTVAkJMHgwMDAxCS8qIGltcGxlbWVudHMgQmx1ZXRvb3RoIGNvZXhpc3RhbmNlICovCkBAIC01NDcsOSArNTUwLDYgQEAKIAogc3RydWN0IGI0M19zdGF0cyB7CiAJdTggbGlua19ub2lzZTsKLQkvKiBTdG9yZSB0aGUgbGFzdCBUWC9SWCB0aW1lcyBoZXJlIGZvciB1cGRhdGluZyB0aGUgbGVkcy4gKi8KLQl1bnNpZ25lZCBsb25nIGxhc3RfdHg7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3J4OwogfTsKIAogc3RydWN0IGI0M19rZXkgewpAQCAtNjU1LDEwICs2NTUsMzkgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhwb3dlcl9hZGp1c3Rfd29yazsKIH07CiAKKy8qIFRoZSB0eXBlIG9mIHRoZSBmaXJtd2FyZSBmaWxlLiAqLworZW51bSBiNDNfZmlybXdhcmVfZmlsZV90eXBlIHsKKwlCNDNfRldUWVBFX1BST1BSSUVUQVJZLAorCUI0M19GV1RZUEVfT1BFTlNPVVJDRSwKKwlCNDNfTlJfRldUWVBFUywKK307CisKKy8qIENvbnRleHQgZGF0YSBmb3IgZmV0Y2hpbmcgZmlybXdhcmUuICovCitzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCB7CisJLyogVGhlIGRldmljZSB3ZSBhcmUgcmVxdWVzdGluZyB0aGUgZncgZm9yLiAqLworCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKKwkvKiBUaGUgdHlwZSBvZiBmaXJtd2FyZSB0byByZXF1ZXN0LiAqLworCWVudW0gYjQzX2Zpcm13YXJlX2ZpbGVfdHlwZSByZXFfdHlwZTsKKwkvKiBFcnJvciBtZXNzYWdlcyBmb3IgZWFjaCBmaXJtd2FyZSB0eXBlLiAqLworCWNoYXIgZXJyb3JzW0I0M19OUl9GV1RZUEVTXVsxMjhdOworCS8qIFRlbXBvcmFyeSBidWZmZXIgZm9yIHN0b3JpbmcgdGhlIGZpcm13YXJlIG5hbWUuICovCisJY2hhciBmd25hbWVbNjRdOworCS8qIEEgZmF0YWwgZXJyb3Igb2NjdXJlZCB3aGlsZSByZXF1ZXN0aW5nLiBGaXJtd2FyZSByZXFlc3QKKwkgKiBjYW4gbm90IGNvbnRpbnVlLCBhcyBhbnkgb3RoZXIgcmVxZXN0IHdpbGwgYWxzbyBmYWlsLiAqLworCWludCBmYXRhbF9mYWlsdXJlOworfTsKKwogLyogSW4tbWVtb3J5IHJlcHJlc2VudGF0aW9uIG9mIGEgY2FjaGVkIG1pY3JvY29kZSBmaWxlLiAqLwogc3RydWN0IGI0M19maXJtd2FyZV9maWxlIHsKIAljb25zdCBjaGFyICpmaWxlbmFtZTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmRhdGE7CisJLyogVHlwZSBvZiB0aGUgZmlybXdhcmUgZmlsZSBuYW1lLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG9ubHkgaW5kaWNhdGUKKwkgKiB0aGUgdHlwZSBieSB0aGUgZmlybXdhcmUgbmFtZS4gTk9UIHRoZSBmaWxlIGNvbnRlbnRzLgorCSAqIElmIHlvdSB3YW50IHRvIGNoZWNrIGZvciBwcm9wcmlldGFyeSB2cyBvcGVuc291cmNlLCB1c2UgKHN0cnVjdCBiNDNfZmlybXdhcmUpLT5vcGVuc291cmNlCisJICogaW5zdGVhZCEgVGhlIChzdHJ1Y3QgYjQzX2Zpcm13YXJlKS0+b3BlbnNvdXJjZSBmbGFnIGlzIGRlcml2ZWQgZnJvbSB0aGUgYWN0dWFsIGZpcm13YXJlCisJICogYmluYXJ5IGNvZGUsIG5vdCBqdXN0IHRoZSBmaWxlbmFtZS4KKwkgKi8KKwllbnVtIGI0M19maXJtd2FyZV9maWxlX3R5cGUgdHlwZTsKIH07CiAKIC8qIFBvaW50ZXJzIHRvIHRoZSBmaXJtd2FyZSBkYXRhIGFuZCBtZXRhIGluZm9ybWF0aW9uIGFib3V0IGl0LiAqLwpAQCAtNjc3LDcgKzcwNiw4IEBACiAJLyogRmlybXdhcmUgcGF0Y2hsZXZlbCAqLwogCXUxNiBwYXRjaDsKIAotCS8qIFNldCB0byB0cnVlLCBpZiB3ZSBhcmUgdXNpbmcgYW4gb3BlbnNvdXJjZSBmaXJtd2FyZS4gKi8KKwkvKiBTZXQgdG8gdHJ1ZSwgaWYgd2UgYXJlIHVzaW5nIGFuIG9wZW5zb3VyY2UgZmlybXdhcmUuCisJICogVXNlIHRoaXMgdG8gY2hlY2sgZm9yIHByb3ByaWV0YXJ5IHZzIG9wZW5zb3VyY2UuICovCiAJYm9vbCBvcGVuc291cmNlOwogCS8qIFNldCB0byB0cnVlLCBpZiB0aGUgY29yZSBuZWVkcyBhIFBDTSBmaXJtd2FyZSwgYnV0CiAJICogd2UgZmFpbGVkIHRvIGxvYWQgb25lLiBUaGlzIGlzIGFsd2F5cyBmYWxzZSBmb3IKQEAgLTg0OCwxMiArODc4LDkgQEAKICAgICBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKIHZvaWQgYjQzd2FybihzdHJ1Y3QgYjQzX3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7Ci0jaWYgQjQzX0RFQlVHCiB2b2lkIGI0M2RiZyhzdHJ1Y3QgYjQzX3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7Ci0jZWxzZSAvKiBERUJVRyAqLwotIyBkZWZpbmUgYjQzZGJnKHdsLCBmbXQuLi4pIGRvIHsgLyogbm90aGluZyAqLyB9IHdoaWxlICgwKQotI2VuZGlmIC8qIERFQlVHICovCisKIAogLyogQSBXQVJOX09OIHZhcmlhbnQgdGhhdCB2YW5pc2hlcyB3aGVuIGI0MyBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQuCiAgKiBUaGlzIF9hbHNvXyBldmFsdWF0ZXMgdGhlIGFyZyB3aXRoIGRlYnVnZ2luZyBkaXNhYmxlZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5jCmluZGV4IGUwNGZjOTEuLjQ1ZTNkNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuYwpAQCAtNTEsOCArNTEsOCBAQAogfTsKIAogc3RhdGljIGlubGluZQotc3RydWN0IGI0M19kZnNfZmlsZSAqIGZvcHNfdG9fZGZzX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2RlYnVnZnNfZm9wcyAqZGZvcHMpCitzdHJ1Y3QgYjQzX2Rmc19maWxlICpmb3BzX3RvX2Rmc19maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2RlYnVnZnNfZm9wcyAqZGZvcHMpCiB7CiAJdm9pZCAqcDsKIApAQCAtMzY3LDM0ICszNjcsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiB3bC0+aXJxX2xvY2sgaXMgbG9ja2VkICovCi1zdGF0aWMgc3NpemVfdCB0c2ZfcmVhZF9maWxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKLXsKLQlzc2l6ZV90IGNvdW50ID0gMDsKLQl1NjQgdHNmOwotCi0JYjQzX3RzZl9yZWFkKGRldiwgJnRzZik7Ci0JZmFwcGVuZCgiMHglMDh4JTA4eFxuIiwKLQkJKHVuc2lnbmVkIGludCkoKHRzZiAmIDB4RkZGRkZGRkYwMDAwMDAwMFVMTCkgPj4gMzIpLAotCQkodW5zaWduZWQgaW50KSh0c2YgJiAweEZGRkZGRkZGVUxMKSk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qIHdsLT5pcnFfbG9jayBpcyBsb2NrZWQgKi8KLXN0YXRpYyBpbnQgdHNmX3dyaXRlX2ZpbGUoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQl1NjQgdHNmOwotCi0JaWYgKHNzY2FuZihidWYsICIlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZyAqKSgmdHNmKSkgIT0gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JYjQzX3RzZl93cml0ZShkZXYsIHRzZik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHNzaXplX3QgdHhzdGF0X3JlYWRfZmlsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkJY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSkKIHsKQEAgLTY5MSwxNSArNjYzLDIzIEBACiBCNDNfREVCVUdGU19GT1BTKG1taW8xNndyaXRlLCBOVUxMLCBtbWlvMTZ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7CiBCNDNfREVCVUdGU19GT1BTKG1taW8zMnJlYWQsIG1taW8zMnJlYWRfX3JlYWRfZmlsZSwgbW1pbzMycmVhZF9fd3JpdGVfZmlsZSwgMSk7CiBCNDNfREVCVUdGU19GT1BTKG1taW8zMndyaXRlLCBOVUxMLCBtbWlvMzJ3cml0ZV9fd3JpdGVfZmlsZSwgMSk7Ci1CNDNfREVCVUdGU19GT1BTKHRzZiwgdHNmX3JlYWRfZmlsZSwgdHNmX3dyaXRlX2ZpbGUsIDEpOwogQjQzX0RFQlVHRlNfRk9QUyh0eHN0YXQsIHR4c3RhdF9yZWFkX2ZpbGUsIE5VTEwsIDApOwogQjQzX0RFQlVHRlNfRk9QUyhyZXN0YXJ0LCBOVUxMLCByZXN0YXJ0X3dyaXRlX2ZpbGUsIDEpOwogQjQzX0RFQlVHRlNfRk9QUyhsb2N0bHMsIGxvY3Rsc19yZWFkX2ZpbGUsIE5VTEwsIDApOwogCiAKLWludCBiNDNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19keW5kYmcgZmVhdHVyZSkKK2Jvb2wgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpCiB7Ci0JcmV0dXJuICEhKGRldi0+ZGZzZW50cnkgJiYgZGV2LT5kZnNlbnRyeS0+ZHluX2RlYnVnW2ZlYXR1cmVdKTsKKwlib29sIGVuYWJsZWQ7CisKKwllbmFibGVkID0gKGRldi0+ZGZzZW50cnkgJiYgZGV2LT5kZnNlbnRyeS0+ZHluX2RlYnVnW2ZlYXR1cmVdKTsKKwlpZiAodW5saWtlbHkoZW5hYmxlZCkpIHsKKwkJLyogRm9yY2UgZnVsbCBkZWJ1Z2dpbmcgbWVzc2FnZXMsIGlmIHRoZSB1c2VyIGVuYWJsZWQKKwkJICogc29tZSBkeW5hbWljIGRlYnVnZ2luZyBmZWF0dXJlLiAqLworCQliNDNfbW9kcGFyYW1fdmVyYm9zZSA9IEI0M19WRVJCT1NJVFlfTUFYOworCX0KKworCXJldHVybiBlbmFibGVkOwogfQogCiBzdGF0aWMgdm9pZCBiNDNfcmVtb3ZlX2R5bmFtaWNfZGVidWcoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtODA1LDcgKzc4NSw2IEBACiAJQUREX0ZJTEUobW1pbzE2d3JpdGUsIDAyMDApOwogCUFERF9GSUxFKG1taW8zMnJlYWQsIDA2MDApOwogCUFERF9GSUxFKG1taW8zMndyaXRlLCAwMjAwKTsKLQlBRERfRklMRSh0c2YsIDA2MDApOwogCUFERF9GSUxFKHR4c3RhdCwgMDQwMCk7CiAJQUREX0ZJTEUocmVzdGFydCwgMDIwMCk7CiAJQUREX0ZJTEUobG9jdGxzLCAwNDAwKTsKQEAgLTgzNCw3ICs4MTMsNiBAQAogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfbW1pbzE2d3JpdGUuZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX21taW8zMnJlYWQuZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX21taW8zMndyaXRlLmRlbnRyeSk7Ci0JZGVidWdmc19yZW1vdmUoZS0+ZmlsZV90c2YuZGVudHJ5KTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5maWxlX3R4c3RhdC5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfcmVzdGFydC5kZW50cnkpOwogCWRlYnVnZnNfcmVtb3ZlKGUtPmZpbGVfbG9jdGxzLmRlbnRyeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RlYnVnZnMuaAppbmRleCA3ODg2Y2JlLi5iOWQ0ZGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZGVidWdmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kZWJ1Z2ZzLmgKQEAgLTQ2LDcgKzQ2LDYgQEAKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfbW1pbzE2d3JpdGU7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX21taW8zMnJlYWQ7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX21taW8zMndyaXRlOwotCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV90c2Y7CiAJc3RydWN0IGI0M19kZnNfZmlsZSBmaWxlX3R4c3RhdDsKIAlzdHJ1Y3QgYjQzX2Rmc19maWxlIGZpbGVfdHhwb3dlcl9nOwogCXN0cnVjdCBiNDNfZGZzX2ZpbGUgZmlsZV9yZXN0YXJ0OwpAQCAtNzIsNyArNzEsNyBAQAogCXN0cnVjdCBkZW50cnkgKmR5bl9kZWJ1Z19kZW50cmllc1tfX0I0M19OUl9EWU5EQkddOwogfTsKIAotaW50IGI0M19kZWJ1ZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGVudW0gYjQzX2R5bmRiZyBmZWF0dXJlKTsKK2Jvb2wgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpOwogCiB2b2lkIGI0M19kZWJ1Z2ZzX2luaXQodm9pZCk7CiB2b2lkIGI0M19kZWJ1Z2ZzX2V4aXQodm9pZCk7CkBAIC04Myw3ICs4Miw3IEBACiAKICNlbHNlIC8qIENPTkZJR19CNDNfREVCVUcgKi8KIAotc3RhdGljIGlubGluZSBpbnQgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpCitzdGF0aWMgaW5saW5lIGJvb2wgYjQzX2RlYnVnKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgZW51bSBiNDNfZHluZGJnIGZlYXR1cmUpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggNmQ2NWEwMi4uMGNjODA0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtNDEsNiArNDEsMTIgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogCisvKiBSZXF1aXJlZCBudW1iZXIgb2YgVFggRE1BIHNsb3RzIHBlciBUWCBmcmFtZS4KKyAqIFRoaXMgY3VycmVudGx5IGlzIDIsIGJlY2F1c2Ugd2UgcHV0IHRoZSBoZWFkZXIgYW5kIHRoZSBpZWVlODAyMTEgZnJhbWUKKyAqIGludG8gc2VwYXJhdGUgc2xvdHMuICovCisjZGVmaW5lIFRYX1NMT1RTX1BFUl9GUkFNRQkyCisKKwogLyogMzJiaXQgRE1BIG9wcy4gKi8KIHN0YXRpYwogc3RydWN0IGI0M19kbWFkZXNjX2dlbmVyaWMgKm9wMzJfaWR4MmRlc2Moc3RydWN0IGI0M19kbWFyaW5nICpyaW5nLApAQCAtNzQsOCArODAsNyBAQAogCWFkZHJleHQgPSAodTMyKSAoZG1hYWRkciAmIFNTQl9ETUFfVFJBTlNMQVRJT05fTUFTSykKIAkgICAgPj4gU1NCX0RNQV9UUkFOU0xBVElPTl9TSElGVDsKIAlhZGRyIHw9IHNzYl9kbWFfdHJhbnNsYXRpb24ocmluZy0+ZGV2LT5kZXYpOwotCWN0bCA9IChidWZzaXplIC0gcmluZy0+ZnJhbWVvZmZzZXQpCi0JICAgICYgQjQzX0RNQTMyX0RDVExfQllURUNOVDsKKwljdGwgPSBidWZzaXplICYgQjQzX0RNQTMyX0RDVExfQllURUNOVDsKIAlpZiAoc2xvdCA9PSByaW5nLT5ucl9zbG90cyAtIDEpCiAJCWN0bCB8PSBCNDNfRE1BMzJfRENUTF9EVEFCTEVFTkQ7CiAJaWYgKHN0YXJ0KQpAQCAtMTc3LDggKzE4Miw3IEBACiAJCWN0bDAgfD0gQjQzX0RNQTY0X0RDVEwwX0ZSQU1FRU5EOwogCWlmIChpcnEpCiAJCWN0bDAgfD0gQjQzX0RNQTY0X0RDVEwwX0lSUTsKLQljdGwxIHw9IChidWZzaXplIC0gcmluZy0+ZnJhbWVvZmZzZXQpCi0JICAgICYgQjQzX0RNQTY0X0RDVEwxX0JZVEVDTlQ7CisJY3RsMSB8PSBidWZzaXplICYgQjQzX0RNQTY0X0RDVEwxX0JZVEVDTlQ7CiAJY3RsMSB8PSAoYWRkcmV4dCA8PCBCNDNfRE1BNjRfRENUTDFfQUREUkVYVF9TSElGVCkKIAkgICAgJiBCNDNfRE1BNjRfRENUTDFfQUREUkVYVF9NQVNLOwogCkBAIC01NzYsMTIgKzU4MCwxMSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWRtYWFkZHIgPSBtYXBfZGVzY2J1ZmZlcihyaW5nLCBza2ItPmRhdGEsCiAJCQkJCSByaW5nLT5yeF9idWZmZXJzaXplLCAwKTsKLQl9Ci0KLQlpZiAoYjQzX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIGRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApKSB7Ci0JCWI0M2VycihyaW5nLT5kZXYtPndsLCAiUlggRE1BIGJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAtRUlPOworCQlpZiAoYjQzX2RtYV9tYXBwaW5nX2Vycm9yKHJpbmcsIGRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApKSB7CisJCQliNDNlcnIocmluZy0+ZGV2LT53bCwgIlJYIERNQSBidWZmZXIgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJfQogCiAJbWV0YS0+c2tiID0gc2tiOwpAQCAtODMwLDkgKzgzMyw2IEBACiAJCWlmIChyaW5nLT5pbmRleCA9PSAwKSB7CiAJCQlyaW5nLT5yeF9idWZmZXJzaXplID0gQjQzX0RNQTBfUlhfQlVGRkVSU0laRTsKIAkJCXJpbmctPmZyYW1lb2Zmc2V0ID0gQjQzX0RNQTBfUlhfRlJBTUVPRkZTRVQ7Ci0JCX0gZWxzZSBpZiAocmluZy0+aW5kZXggPT0gMykgewotCQkJcmluZy0+cnhfYnVmZmVyc2l6ZSA9IEI0M19ETUEzX1JYX0JVRkZFUlNJWkU7Ci0JCQlyaW5nLT5mcmFtZW9mZnNldCA9IEI0M19ETUEzX1JYX0ZSQU1FT0ZGU0VUOwogCQl9IGVsc2UKIAkJCUI0M19XQVJOX09OKDEpOwogCX0KQEAgLTg0Miw3ICs4NDIsMTAgQEAKICNlbmRpZgogCiAJaWYgKGZvcl90eCkgewotCQlyaW5nLT50eGhkcl9jYWNoZSA9IGtjYWxsb2MocmluZy0+bnJfc2xvdHMsCisJCS8qIEFzc3VtcHRpb246IEI0M19UWFJJTkdfU0xPVFMgY2FuIGJlIGRpdmlkZWQgYnkgVFhfU0xPVFNfUEVSX0ZSQU1FICovCisJCUJVSUxEX0JVR19PTihCNDNfVFhSSU5HX1NMT1RTICUgVFhfU0xPVFNfUEVSX0ZSQU1FICE9IDApOworCisJCXJpbmctPnR4aGRyX2NhY2hlID0ga2NhbGxvYyhyaW5nLT5ucl9zbG90cyAvIFRYX1NMT1RTX1BFUl9GUkFNRSwKIAkJCQkJICAgIGI0M190eGhkcl9zaXplKGRldiksCiAJCQkJCSAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFyaW5nLT50eGhkcl9jYWNoZSkKQEAgLTg1OCw3ICs4NjEsNyBAQAogCQkJCQkgIGI0M190eGhkcl9zaXplKGRldiksIDEpKSB7CiAJCQkvKiB1Z2ggcmVhbGxvYyAqLwogCQkJa2ZyZWUocmluZy0+dHhoZHJfY2FjaGUpOwotCQkJcmluZy0+dHhoZHJfY2FjaGUgPSBrY2FsbG9jKHJpbmctPm5yX3Nsb3RzLAorCQkJcmluZy0+dHhoZHJfY2FjaGUgPSBrY2FsbG9jKHJpbmctPm5yX3Nsb3RzIC8gVFhfU0xPVFNfUEVSX0ZSQU1FLAogCQkJCQkJICAgIGI0M190eGhkcl9zaXplKGRldiksCiAJCQkJCQkgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwogCQkJaWYgKCFyaW5nLT50eGhkcl9jYWNoZSkKQEAgLTExNDksNyArMTE1MiwxMCBAQAogCXUxNiBjb29raWU7CiAJc2l6ZV90IGhkcnNpemUgPSBiNDNfdHhoZHJfc2l6ZShyaW5nLT5kZXYpOwogCi0jZGVmaW5lIFNMT1RTX1BFUl9QQUNLRVQgIDIKKwkvKiBJbXBvcnRhbnQgbm90ZTogSWYgdGhlIG51bWJlciBvZiB1c2VkIERNQSBzbG90cyBwZXIgVFggZnJhbWUKKwkgKiBpcyBjaGFuZ2VkIGhlcmUsIHRoZSBUWF9TTE9UU19QRVJfRlJBTUUgZGVmaW5pdGlvbiBhdCB0aGUgdG9wIG9mCisJICogdGhlIGZpbGUgaGFzIHRvIGJlIHVwZGF0ZWQsIHRvbyEKKwkgKi8KIAogCW9sZF90b3Bfc2xvdCA9IHJpbmctPmN1cnJlbnRfc2xvdDsKIAlvbGRfdXNlZF9zbG90cyA9IHJpbmctPnVzZWRfc2xvdHM7CkBAIC0xMTU5LDcgKzExNjUsNyBAQAogCWRlc2MgPSBvcHMtPmlkeDJkZXNjKHJpbmcsIHNsb3QsICZtZXRhX2hkcik7CiAJbWVtc2V0KG1ldGFfaGRyLCAwLCBzaXplb2YoKm1ldGFfaGRyKSk7CiAKLQloZWFkZXIgPSAmKHJpbmctPnR4aGRyX2NhY2hlW3Nsb3QgKiBoZHJzaXplXSk7CisJaGVhZGVyID0gJihyaW5nLT50eGhkcl9jYWNoZVsoc2xvdCAvIFRYX1NMT1RTX1BFUl9GUkFNRSkgKiBoZHJzaXplXSk7CiAJY29va2llID0gZ2VuZXJhdGVfY29va2llKHJpbmcsIHNsb3QpOwogCWVyciA9IGI0M19nZW5lcmF0ZV90eGhkcihyaW5nLT5kZXYsIGhlYWRlciwKIAkJCQkgc2tiLT5kYXRhLCBza2ItPmxlbiwgaW5mbywgY29va2llKTsKQEAgLTEyNTQsOCArMTI2MCw4IEBACiB9CiAKIC8qIFN0YXRpYyBtYXBwaW5nIG9mIG1hYzgwMjExJ3MgcXVldWVzIChwcmlvcml0aWVzKSB0byBiNDMgRE1BIHJpbmdzLiAqLwotc3RhdGljIHN0cnVjdCBiNDNfZG1hcmluZyAqIHNlbGVjdF9yaW5nX2J5X3ByaW9yaXR5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCSAgICB1OCBxdWV1ZV9wcmlvKQorc3RhdGljIHN0cnVjdCBiNDNfZG1hcmluZyAqc2VsZWN0X3JpbmdfYnlfcHJpb3JpdHkoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJICAgdTggcXVldWVfcHJpbykKIHsKIAlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmc7CiAKQEAgLTEzMDYsMTcgKzEzMTIsMTkgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+bG9jaywgZmxhZ3MpOworCiAJQjQzX1dBUk5fT04oIXJpbmctPnR4KTsKLQlpZiAodW5saWtlbHkoZnJlZV9zbG90cyhyaW5nKSA8IFNMT1RTX1BFUl9QQUNLRVQpKSB7Ci0JCWI0M3dhcm4oZGV2LT53bCwgIkRNQSBxdWV1ZSBvdmVyZmxvd1xuIik7Ci0JCWVyciA9IC1FTk9TUEM7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CiAJLyogQ2hlY2sgaWYgdGhlIHF1ZXVlIHdhcyBzdG9wcGVkIGluIG1hYzgwMjExLAogCSAqIGJ1dCB3ZSBnb3QgY2FsbGVkIG5ldmVydGhlbGVzcy4KIAkgKiBUaGF0IHdvdWxkIGJlIGEgbWFjODAyMTEgYnVnLiAqLwogCUI0M19XQVJOX09OKHJpbmctPnN0b3BwZWQpOwogCisJaWYgKHVubGlrZWx5KGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpKSB7CisJCWI0M3dhcm4oZGV2LT53bCwgIkRNQSBxdWV1ZSBvdmVyZmxvd1xuIik7CisJCWVyciA9IC1FTk9TUEM7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKIAkvKiBBc3NpZ24gdGhlIHF1ZXVlIG51bWJlciB0byB0aGUgcmluZyAoaWYgbm90IGFscmVhZHkgZG9uZSBiZWZvcmUpCiAJICogc28gVFggc3RhdHVzIGhhbmRsaW5nIGNhbiB1c2UgaXQuIFRoZSBxdWV1ZSB0byByaW5nIG1hcHBpbmcgaXMKIAkgKiBzdGF0aWMsIHNvIHdlIGRvbid0IG5lZWQgdG8gc3RvcmUgaXQgcGVyIGZyYW1lLiAqLwpAQCAtMTMzNSw3ICsxMzQzLDcgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAlyaW5nLT5ucl90eF9wYWNrZXRzKys7Ci0JaWYgKChmcmVlX3Nsb3RzKHJpbmcpIDwgU0xPVFNfUEVSX1BBQ0tFVCkgfHwKKwlpZiAoKGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpIHx8CiAJICAgIHNob3VsZF9pbmplY3Rfb3ZlcmZsb3cocmluZykpIHsKIAkJLyogVGhpcyBUWCByaW5nIGlzIGZ1bGwuICovCiAJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGRldi0+d2wtPmh3LCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7CkBAIC0xNDE3LDkgKzE0MjUsOCBAQAogCQkJYnJlYWs7CiAJCXNsb3QgPSBuZXh0X3Nsb3QocmluZywgc2xvdCk7CiAJfQotCWRldi0+c3RhdHMubGFzdF90eCA9IGppZmZpZXM7CiAJaWYgKHJpbmctPnN0b3BwZWQpIHsKLQkJQjQzX1dBUk5fT04oZnJlZV9zbG90cyhyaW5nKSA8IFNMT1RTX1BFUl9QQUNLRVQpOworCQlCNDNfV0FSTl9PTihmcmVlX3Nsb3RzKHJpbmcpIDwgVFhfU0xPVFNfUEVSX0ZSQU1FKTsKIAkJaWVlZTgwMjExX3dha2VfcXVldWUoZGV2LT53bC0+aHcsIHJpbmctPnF1ZXVlX3ByaW8pOwogCQlyaW5nLT5zdG9wcGVkID0gMDsKIAkJaWYgKGI0M19kZWJ1ZyhkZXYsIEI0M19EQkdfRE1BVkVSQk9TRSkpIHsKQEAgLTE0NDIsOCArMTQ0OSw4IEBACiAJCXJpbmcgPSBzZWxlY3RfcmluZ19ieV9wcmlvcml0eShkZXYsIGkpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0JCXN0YXRzW2ldLmxlbiA9IHJpbmctPnVzZWRfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOwotCQlzdGF0c1tpXS5saW1pdCA9IHJpbmctPm5yX3Nsb3RzIC8gU0xPVFNfUEVSX1BBQ0tFVDsKKwkJc3RhdHNbaV0ubGVuID0gcmluZy0+dXNlZF9zbG90cyAvIFRYX1NMT1RTX1BFUl9GUkFNRTsKKwkJc3RhdHNbaV0ubGltaXQgPSByaW5nLT5ucl9zbG90cyAvIFRYX1NMT1RTX1BFUl9GUkFNRTsKIAkJc3RhdHNbaV0uY291bnQgPSByaW5nLT5ucl90eF9wYWNrZXRzOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCmluZGV4IGQxZWI1YzAuLjA1ZGRlNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKQEAgLTEsMTQgKzEsMTIgQEAKICNpZm5kZWYgQjQzX0RNQV9IXwogI2RlZmluZSBCNDNfRE1BX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiAjaW5jbHVkZSAiYjQzLmgiCiAKKwogLyogRE1BLUludGVycnVwdCByZWFzb25zLiAqLwogI2RlZmluZSBCNDNfRE1BSVJRX0ZBVEFMTUFTSwkoKDEgPDwgMTApIHwgKDEgPDwgMTEpIHwgKDEgPDwgMTIpIFwKIAkJCQkJIHwgKDEgPDwgMTQpIHwgKDEgPDwgMTUpKQpAQCAtMTYxLDE0ICsxNTksMTMgQEAKIAogLyogTWlzYyBETUEgY29uc3RhbnRzICovCiAjZGVmaW5lIEI0M19ETUFfUklOR01FTVNJWkUJCVBBR0VfU0laRQotI2RlZmluZSBCNDNfRE1BMF9SWF9GUkFNRU9GRlNFVAkzMAotI2RlZmluZSBCNDNfRE1BM19SWF9GUkFNRU9GRlNFVAkwCisjZGVmaW5lIEI0M19ETUEwX1JYX0ZSQU1FT0ZGU0VUCQkzMAogCiAvKiBETUEgZW5naW5lIHR1bmluZyBrbm9icyAqLwotI2RlZmluZSBCNDNfVFhSSU5HX1NMT1RTCQkxMjgKKyNkZWZpbmUgQjQzX1RYUklOR19TTE9UUwkJMjU2CiAjZGVmaW5lIEI0M19SWFJJTkdfU0xPVFMJCTY0Ci0jZGVmaW5lIEI0M19ETUEwX1JYX0JVRkZFUlNJWkUJKDIzMDQgKyAxMDApCi0jZGVmaW5lIEI0M19ETUEzX1JYX0JVRkZFUlNJWkUJMTYKKyNkZWZpbmUgQjQzX0RNQTBfUlhfQlVGRkVSU0laRQkJSUVFRTgwMjExX01BWF9GUkFNRV9MRU4KKwogCiBzdHJ1Y3Qgc2tfYnVmZjsKIHN0cnVjdCBiNDNfcHJpdmF0ZTsKQEAgLTIxNSw3ICsyMTIsNyBAQAogCXZvaWQgKmRlc2NiYXNlOwogCS8qIE1ldGEgZGF0YSBhYm91dCBhbGwgZGVzY3JpcHRvcnMuICovCiAJc3RydWN0IGI0M19kbWFkZXNjX21ldGEgKm1ldGE7Ci0JLyogQ2FjaGUgb2YgVFggaGVhZGVycyBmb3IgZWFjaCBzbG90LgorCS8qIENhY2hlIG9mIFRYIGhlYWRlcnMgZm9yIGVhY2ggVFggZnJhbWUuCiAJICogVGhpcyBpcyB0byBhdm9pZCBhbiBhbGxvY2F0aW9uIG9uIGVhY2ggVFguCiAJICogVGhpcyBpcyBOVUxMIGZvciBhbiBSWCByaW5nLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2xvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYwppbmRleCA2YTE4YTE0Li4yMmQwZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbG8uYwpAQCAtMzYsOCArMzYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIAotc3RhdGljIHN0cnVjdCBiNDNfbG9fY2FsaWIgKiBiNDNfZmluZF9sb19jYWxpYihzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8sCi0JCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2JiYXR0ICpiYmF0dCwKK3N0YXRpYyBzdHJ1Y3QgYjQzX2xvX2NhbGliICpiNDNfZmluZF9sb19jYWxpYihzdHJ1Y3QgYjQzX3R4cG93ZXJfbG9fY29udHJvbCAqbG8sCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAogCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCiB7CiAJc3RydWN0IGI0M19sb19jYWxpYiAqYzsKQEAgLTEzOCw3ICsxMzgsNyBAQAogICogInBhZF9taXhfZ2FpbiIgaXMgdGhlIFBBRCBNaXhlciBHYWluLgogICovCiBzdGF0aWMgdTE2IGxvX3R4Y3RsX3JlZ2lzdGVyX3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICB1MTYgKiB2YWx1ZSwgdTE2ICogcGFkX21peF9nYWluKQorCQkJCSAgIHUxNiAqdmFsdWUsIHUxNiAqcGFkX21peF9nYWluKQogewogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAJdTE2IHJlZywgdiwgcGFkbWl4OwpAQCAtMjI1LDE0ICsyMjUsMTIgQEAKIAkJCQlyYWRpb19wY3RsX3JlZyA9IHRtcDsKIAkJfQogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykKLQkJCQkgICAgICAmIDB4RkZGMCkgfCByYWRpb19wY3RsX3JlZyk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDQzLCAweEZGRjAsIHJhZGlvX3BjdGxfcmVnKTsKIAliNDNfZ3BoeV9zZXRfYmFzZWJhbmRfYXR0ZW51YXRpb24oZGV2LCAyKTsKIAogCXJlZyA9IGxvX3R4Y3RsX3JlZ2lzdGVyX3RhYmxlKGRldiwgJm1hc2ssIE5VTEwpOwogCW1hc2sgPSB+bWFzazsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHJlZywgYjQzX3JhZGlvX3JlYWQxNihkZXYsIHJlZykKLQkJCSAgJiBtYXNrKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIHJlZywgbWFzayk7CiAKIAlpZiAoaGFzX3R4X21hZ25pZmljYXRpb24ocGh5KSkgewogCQlpbnQgaSwgajsKQEAgLTI0MiwxNCArMjQwLDEwIEBACiAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHhfbWFnbl92YWx1ZXMpOyBpKyspIHsKIAkJCXR4X21hZ24gPSB0eF9tYWduX3ZhbHVlc1tpXTsKLQkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwKLQkJCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpCi0JCQkJCSAgICYgMHhGRjBGKSB8IHR4X21hZ24pOworCQkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGMEYsIHR4X21hZ24pOwogCQkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUodHhfYmlhc192YWx1ZXMpOyBqKyspIHsKIAkJCQl0eF9iaWFzID0gdHhfYmlhc192YWx1ZXNbal07Ci0JCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDUyLAotCQkJCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpCi0JCQkJCQkgICAmIDB4RkZGMCkgfCB0eF9iaWFzKTsKKwkJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NTIsIDB4RkZGMCwgdHhfYmlhcyk7CiAJCQkJZmVlZHRocm91Z2ggPQogCQkJCSAgICBsb19tZWFzdXJlX2ZlZWR0aHJvdWdoKGRldiwgMCwgcGdhLAogCQkJCQkJCSAgIHRyc3dfcngpOwpAQCAtMjY5LDggKzI2Myw3IEBACiAJfSBlbHNlIHsKIAkJbG8tPnR4X21hZ24gPSAwOwogCQlsby0+dHhfYmlhcyA9IDA7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpCi0JCQkJICAmIDB4RkZGMCk7CS8qIFRYIGJpYXMgPT0gMCAqLworCQliNDNfcmFkaW9fbWFzayhkZXYsIDB4NTIsIDB4RkZGMCk7CS8qIFRYIGJpYXMgPT0gMCAqLwogCX0KIAlsby0+dHhjdGxfbWVhc3VyZWRfdGltZSA9IGppZmZpZXM7CiB9CkBAIC00MDYsMTggKzM5OSwxMCBAQAogCQlzYXYtPnBoeV9jY2tfMTQgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDE0KSk7CiAJCXNhdi0+cGh5X2hwd3JfdHNzaWN0bCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfSFBXUl9UU1NJQ1RMKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9IUFdSX1RTU0lDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0hQV1JfVFNTSUNUTCkKLQkJCSAgICAgIHwgMHgxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9FWFRHKDB4MDEpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9FWFRHKDB4MDEpKQotCQkJICAgICAgfCAweDQwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfREFDQ1RMLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9EQUNDVEwpCi0JCQkgICAgICB8IDB4NDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgxNCksCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDE0KSkKLQkJCSAgICAgIHwgMHgyMDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfSFBXUl9UU1NJQ1RMLCAweDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9FWFRHKDB4MDEpLCAweDQwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0RBQ0NUTCwgMHg0MCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgxNCksIDB4MjAwKTsKIAl9CiAJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9CICYmCiAJICAgIHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCAmJiBwaHktPnJhZGlvX3JldiA8IDYpIHsKQEAgLTQzNCwxNyArNDE5LDEwIEBACiAJCXNhdi0+cGh5X2Nja18zRSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4M0UpKTsKIAkJc2F2LT5waHlfY3JzMCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xBU1NDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NMQVNTQ1RMKQotCQkJICAgICAgJiAweEZGRkMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlMwLCBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NSUzApCi0JCQkgICAgICAmIDB4N0ZGRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpCi0JCQkgICAgICB8IDB4MDAwMyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwpCi0JCQkgICAgICAmIDB4RkZGQyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQ0xBU1NDVEwsIDB4RkZGQyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQ1JTMCwgMHg3RkZGKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsIDB4MDAwMyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwgMHhGRkZDKTsKIAkJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9HKSB7CiAJCQlpZiAoKHBoeS0+cmV2ID49IDcpICYmCiAJCQkgICAgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9FWFRMTkEpKSB7CkBAIC01NTgsOCArNTM2LDcgQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4N0EsIHNhdi0+cmFkaW9fN0EpOwogCWlmICghaGFzX3R4X21hZ25pZmljYXRpb24ocGh5KSkgewogCQl0bXAgPSBzYXYtPnJhZGlvXzUyOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgICAgJiAweEZGMEYpIHwgdG1wKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGMEYsIHRtcCk7CiAJfQogCWI0M193cml0ZTE2KGRldiwgMHgzRTIsIHNhdi0+cmVnXzNFMik7CiAJaWYgKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9CICYmCkBAIC03NTQsOSArNzMxLDkgQEAKIH0KIAogc3RhdGljCi1zdHJ1Y3QgYjQzX2xvX2NhbGliICogYjQzX2NhbGlicmF0ZV9sb19zZXR0aW5nKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAotCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCitzdHJ1Y3QgYjQzX2xvX2NhbGliICpiNDNfY2FsaWJyYXRlX2xvX3NldHRpbmcoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgYjQzX2JiYXR0ICpiYmF0dCwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCiB7CiAJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKIAlzdHJ1Y3QgYjQzX3BoeV9nICpncGh5ID0gcGh5LT5nOwpAQCAtNzc4LDEyICs3NTUsOCBAQAogCiAJdHhjdGxfcmVnID0gbG9fdHhjdGxfcmVnaXN0ZXJfdGFibGUoZGV2LCAmdHhjdGxfdmFsdWUsICZwYWRfbWl4X2dhaW4pOwogCi0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLAotCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NDMpICYgMHhGRkYwKQotCQkJICB8IHJmYXR0LT5hdHQpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgdHhjdGxfcmVnLAotCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIHR4Y3RsX3JlZykgJiB+dHhjdGxfdmFsdWUpCi0JCQkgIHwgKHJmYXR0LT53aXRoX3BhZG1peCkgPyB0eGN0bF92YWx1ZSA6IDApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg0MywgMHhGRkYwLCByZmF0dC0+YXR0KTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIHR4Y3RsX3JlZywgfnR4Y3RsX3ZhbHVlLCAocmZhdHQtPndpdGhfcGFkbWl4ID8gdHhjdGxfdmFsdWUgOjApKTsKIAogCW1heF9yeF9nYWluID0gcmZhdHQtPmF0dCAqIDI7CiAJbWF4X3J4X2dhaW4gKz0gYmJhdHQtPmF0dCAvIDI7CkBAIC04MjQsOSArNzk3LDkgQEAKIC8qIEdldCBhIGNhbGlicmF0ZWQgTE8gc2V0dGluZyBmb3IgdGhlIGdpdmVuIGF0dGVudWF0aW9uIHZhbHVlcy4KICAqIE1pZ2h0IHJldHVybiBhIE5VTEwgcG9pbnRlciB1bmRlciBPT00hICovCiBzdGF0aWMKLXN0cnVjdCBiNDNfbG9fY2FsaWIgKiBiNDNfZ2V0X2NhbGliX2xvX3NldHRpbmdzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCWNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAotCQkJCQkJY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCitzdHJ1Y3QgYjQzX2xvX2NhbGliICpiNDNfZ2V0X2NhbGliX2xvX3NldHRpbmdzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiNDNfYmJhdHQgKmJiYXR0LAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGI0M19yZmF0dCAqcmZhdHQpCiB7CiAJc3RydWN0IGI0M190eHBvd2VyX2xvX2NvbnRyb2wgKmxvID0gZGV2LT5waHkuZy0+bG9fY29udHJvbDsKIAlzdHJ1Y3QgYjQzX2xvX2NhbGliICpjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKaW5kZXggYzc4OGJhZC4uNDg5NmUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCkBAIC00LDcgKzQsNyBAQAogCiAgIENvcHlyaWdodCAoYykgMjAwNSBNYXJ0aW4gTGFuZ2VyIDxtYXJ0aW4tbGFuZ2VyQGdteC5kZT4KICAgQ29weXJpZ2h0IChjKSAyMDA1IFN0ZWZhbm8gQnJpdmlvIDxzdGVmYW5vLmJyaXZpb0Bwb2xpbWkuaXQ+Ci0gIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNiBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgorICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBNaWNoYWVsIEJ1ZXNjaCA8bWJAYnUzc2NoLmRlPgogICBDb3B5cmlnaHQgKGMpIDIwMDUgRGFubnkgdmFuIER5ayA8a3VnZWxmYW5nQGdlbnRvby5vcmc+CiAgIENvcHlyaWdodCAoYykgMjAwNSBBbmRyZWFzIEphZ2dpIDxhbmRyZWFzLmphZ2dpQHdhdGVyd2F2ZS5jaD4KIApAQCAtODgsNiArODgsMTAgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChidGNvZXgsIG1vZHBhcmFtX2J0Y29leCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYnRjb2V4LCAiRW5hYmxlIEJsdWV0b290aCBjb2V4aXN0YW5jZSAoZGVmYXVsdCBvbikiKTsKIAoraW50IGI0M19tb2RwYXJhbV92ZXJib3NlID0gQjQzX1ZFUkJPU0lUWV9ERUZBVUxUOworbW9kdWxlX3BhcmFtX25hbWVkKHZlcmJvc2UsIGI0M19tb2RwYXJhbV92ZXJib3NlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh2ZXJib3NlLCAiTG9nIG1lc3NhZ2UgdmVyYm9zaXR5OiAwPWVycm9yLCAxPXdhcm4sIDI9aW5mbyhkZWZhdWx0KSwgMz1kZWJ1ZyIpOworCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3NiX2RldmljZV9pZCBiNDNfc3NiX3RibFtdID0gewogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgNSksCkBAIC05Nyw2ICsxMDEsOCBAQAogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTApLAogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTEpLAogCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTMpLAorCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTUpLAorCVNTQl9ERVZJQ0UoU1NCX1ZFTkRPUl9CUk9BRENPTSwgU1NCX0RFVl84MDIxMSwgMTYpLAogCVNTQl9ERVZUQUJMRV9FTkQKIH07CiAKQEAgLTI5OCw2ICszMDQsOCBAQAogewogCXZhX2xpc3QgYXJnczsKIAorCWlmIChiNDNfbW9kcGFyYW1fdmVyYm9zZSA8IEI0M19WRVJCT1NJVFlfSU5GTykKKwkJcmV0dXJuOwogCWlmICghYjQzX3JhdGVsaW1pdCh3bCkpCiAJCXJldHVybjsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwpAQCAtMzExLDYgKzMxOSw4IEBACiB7CiAJdmFfbGlzdCBhcmdzOwogCisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9FUlJPUikKKwkJcmV0dXJuOwogCWlmICghYjQzX3JhdGVsaW1pdCh3bCkpCiAJCXJldHVybjsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwpAQCAtMzI0LDYgKzMzNCw4IEBACiB7CiAJdmFfbGlzdCBhcmdzOwogCisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9XQVJOKQorCQlyZXR1cm47CiAJaWYgKCFiNDNfcmF0ZWxpbWl0KHdsKSkKIAkJcmV0dXJuOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CkBAIC0zMzMsMTggKzM0NSwxOCBAQAogCXZhX2VuZChhcmdzKTsKIH0KIAotI2lmIEI0M19ERUJVRwogdm9pZCBiNDNkYmcoc3RydWN0IGI0M193bCAqd2wsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKIAorCWlmIChiNDNfbW9kcGFyYW1fdmVyYm9zZSA8IEI0M19WRVJCT1NJVFlfREVCVUcpCisJCXJldHVybjsKIAl2YV9zdGFydChhcmdzLCBmbXQpOwogCXByaW50ayhLRVJOX0RFQlVHICJiNDMtJXMgZGVidWc6ICIsCiAJICAgICAgICh3bCAmJiB3bC0+aHcpID8gd2lwaHlfbmFtZSh3bC0+aHctPndpcGh5KSA6ICJ3bGFuIik7CiAJdnByaW50ayhmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKIH0KLSNlbmRpZiAvKiBERUJVRyAqLwogCiBzdGF0aWMgdm9pZCBiNDNfcmFtX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IG9mZnNldCwgdTMyIHZhbCkKIHsKQEAgLTUwMCw3ICs1MTIsNyBAQAogfQogCiAvKiBSZWFkIEhvc3RGbGFncyAqLwotdTY0IGI0M19oZl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKiBkZXYpCit1NjQgYjQzX2hmX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXU2NCByZXQ7CiAKQEAgLTUyNiw1MiArNTM4LDIwIEBACiAJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIEI0M19TSE1fU0hfSE9TVEZISSwgaGkpOwogfQogCi12b2lkIGI0M190c2ZfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCAqIHRzZikKK3ZvaWQgYjQzX3RzZl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTY0ICp0c2YpCiB7Ci0JLyogV2UgbmVlZCB0byBiZSBjYXJlZnVsLiBBcyB3ZSByZWFkIHRoZSBUU0YgZnJvbSBtdWx0aXBsZQotCSAqIHJlZ2lzdGVycywgd2Ugc2hvdWxkIHRha2UgY2FyZSBvZiByZWdpc3RlciBvdmVyZmxvd3MuCi0JICogSW4gdGhlb3J5LCB0aGUgd2hvbGUgdHNmIHJlYWQgcHJvY2VzcyBzaG91bGQgYmUgYXRvbWljLgotCSAqIFdlIHRyeSB0byBiZSBhdG9taWMgaGVyZSwgYnkgcmVzdGFyaW5nIHRoZSByZWFkIHByb2Nlc3MsCi0JICogaWYgYW55IG9mIHRoZSBoaWdoIHJlZ2lzdGVycyBjaGFuZ2VkIChvdmVyZmxldykuCi0JICovCi0JaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA+PSAzKSB7Ci0JCXUzMiBsb3csIGhpZ2gsIGhpZ2gyOworCXUzMiBsb3csIGhpZ2g7CiAKLQkJZG8gewotCQkJaGlnaCA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfSElHSCk7Ci0JCQlsb3cgPSBiNDNfcmVhZDMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0xPVyk7Ci0JCQloaWdoMiA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfSElHSCk7Ci0JCX0gd2hpbGUgKHVubGlrZWx5KGhpZ2ggIT0gaGlnaDIpKTsKKwlCNDNfV0FSTl9PTihkZXYtPmRldi0+aWQucmV2aXNpb24gPCAzKTsKIAotCQkqdHNmID0gaGlnaDsKLQkJKnRzZiA8PD0gMzI7Ci0JCSp0c2YgfD0gbG93OwotCX0gZWxzZSB7Ci0JCXU2NCB0bXA7Ci0JCXUxNiB2MCwgdjEsIHYyLCB2MzsKLQkJdTE2IHRlc3QxLCB0ZXN0MiwgdGVzdDM7CisJLyogVGhlIGhhcmR3YXJlIGd1YXJhbnRlZXMgdXMgYW4gYXRvbWljIHJlYWQsIGlmIHdlCisJICogcmVhZCB0aGUgbG93IHJlZ2lzdGVyIGZpcnN0LiAqLworCWxvdyA9IGI0M19yZWFkMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfTE9XKTsKKwloaWdoID0gYjQzX3JlYWQzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdIKTsKIAotCQlkbyB7Ci0JCQl2MyA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMyk7Ci0JCQl2MiA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMik7Ci0JCQl2MSA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMSk7Ci0JCQl2MCA9IGI0M19yZWFkMTYoZGV2LCBCNDNfTU1JT19UU0ZfMCk7Ci0KLQkJCXRlc3QzID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8zKTsKLQkJCXRlc3QyID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8yKTsKLQkJCXRlc3QxID0gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1RTRl8xKTsKLQkJfSB3aGlsZSAodjMgIT0gdGVzdDMgfHwgdjIgIT0gdGVzdDIgfHwgdjEgIT0gdGVzdDEpOwotCi0JCSp0c2YgPSB2MzsKLQkJKnRzZiA8PD0gNDg7Ci0JCXRtcCA9IHYyOwotCQl0bXAgPDw9IDMyOwotCQkqdHNmIHw9IHRtcDsKLQkJdG1wID0gdjE7Ci0JCXRtcCA8PD0gMTY7Ci0JCSp0c2YgfD0gdG1wOwotCQkqdHNmIHw9IHYwOwotCX0KKwkqdHNmID0gaGlnaDsKKwkqdHNmIDw8PSAzMjsKKwkqdHNmIHw9IGxvdzsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3RpbWVfbG9jayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC01OTgsMzUgKzU3OCwxOCBAQAogCiBzdGF0aWMgdm9pZCBiNDNfdHNmX3dyaXRlX2xvY2tlZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCB0c2YpCiB7Ci0JLyogQmUgY2FyZWZ1bCB3aXRoIHRoZSBpbi1wcm9ncmVzcyB0aW1lci4KLQkgKiBGaXJzdCB6ZXJvIG91dCB0aGUgbG93IHJlZ2lzdGVyLCBzbyB3ZSBoYXZlIGEgZnVsbAotCSAqIHJlZ2lzdGVyLW92ZXJmbG93IGR1cmF0aW9uIHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24uCi0JICovCi0JaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA+PSAzKSB7Ci0JCXUzMiBsbyA9ICh0c2YgJiAweDAwMDAwMDAwRkZGRkZGRkZVTEwpOwotCQl1MzIgaGkgPSAodHNmICYgMHhGRkZGRkZGRjAwMDAwMDAwVUxMKSA+PiAzMjsKKwl1MzIgbG93LCBoaWdoOwogCi0JCWI0M193cml0ZTMyKGRldiwgQjQzX01NSU9fUkVWM1BMVVNfVFNGX0xPVywgMCk7Ci0JCW1taW93YigpOwotCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9ISUdILCBoaSk7Ci0JCW1taW93YigpOwotCQliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9MT1csIGxvKTsKLQl9IGVsc2UgewotCQl1MTYgdjAgPSAodHNmICYgMHgwMDAwMDAwMDAwMDBGRkZGVUxMKTsKLQkJdTE2IHYxID0gKHRzZiAmIDB4MDAwMDAwMDBGRkZGMDAwMFVMTCkgPj4gMTY7Ci0JCXUxNiB2MiA9ICh0c2YgJiAweDAwMDBGRkZGMDAwMDAwMDBVTEwpID4+IDMyOwotCQl1MTYgdjMgPSAodHNmICYgMHhGRkZGMDAwMDAwMDAwMDAwVUxMKSA+PiA0ODsKKwlCNDNfV0FSTl9PTihkZXYtPmRldi0+aWQucmV2aXNpb24gPCAzKTsKIAotCQliNDNfd3JpdGUxNihkZXYsIEI0M19NTUlPX1RTRl8wLCAwKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzMsIHYzKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzIsIHYyKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzEsIHYxKTsKLQkJbW1pb3diKCk7Ci0JCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fVFNGXzAsIHYwKTsKLQl9CisJbG93ID0gdHNmOworCWhpZ2ggPSAodHNmID4+IDMyKTsKKwkvKiBUaGUgaGFyZHdhcmUgZ3VhcmFudGVlcyB1cyBhbiBhdG9taWMgd3JpdGUsIGlmIHdlCisJICogd3JpdGUgdGhlIGxvdyByZWdpc3RlciBmaXJzdC4gKi8KKwliNDNfd3JpdGUzMihkZXYsIEI0M19NTUlPX1JFVjNQTFVTX1RTRl9MT1csIGxvdyk7CisJbW1pb3diKCk7CisJYjQzX3dyaXRlMzIoZGV2LCBCNDNfTU1JT19SRVYzUExVU19UU0ZfSElHSCwgaGlnaCk7CisJbW1pb3diKCk7CiB9CiAKIHZvaWQgYjQzX3RzZl93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU2NCB0c2YpCkBAIC02MzcsNyArNjAwLDcgQEAKIH0KIAogc3RhdGljCi12b2lkIGI0M19tYWNmaWx0ZXJfc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IG9mZnNldCwgY29uc3QgdTggKiBtYWMpCit2b2lkIGI0M19tYWNmaWx0ZXJfc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IG9mZnNldCwgY29uc3QgdTggKm1hYykKIHsKIAlzdGF0aWMgY29uc3QgdTggemVyb19hZGRyW0VUSF9BTEVOXSA9IHsgMCB9OwogCXUxNiBkYXRhOwpAQCAtODI3LDcgKzc5MCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGtleV93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCSAgICAgIHU4IGluZGV4LCB1OCBhbGdvcml0aG0sIGNvbnN0IHU4ICoga2V5KQorCQkgICAgICB1OCBpbmRleCwgdTggYWxnb3JpdGhtLCBjb25zdCB1OCAqa2V5KQogewogCXVuc2lnbmVkIGludCBpOwogCXUzMiBvZmZzZXQ7CkBAIC04NDksNyArODEyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGtleW1hY193cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGluZGV4LCBjb25zdCB1OCAqIGFkZHIpCitzdGF0aWMgdm9pZCBrZXltYWNfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCwgY29uc3QgdTggKmFkZHIpCiB7CiAJdTMyIGFkZHJ0bXBbMl0gPSB7IDAsIDAsIH07CiAJdTggcGVyX3N0YV9rZXlzX3N0YXJ0ID0gODsKQEAgLTg5OSw3ICs4NjIsNyBAQAogCiBzdGF0aWMgdm9pZCBkb19rZXlfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJIHU4IGluZGV4LCB1OCBhbGdvcml0aG0sCi0JCQkgY29uc3QgdTggKiBrZXksIHNpemVfdCBrZXlfbGVuLCBjb25zdCB1OCAqIG1hY19hZGRyKQorCQkJIGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLCBjb25zdCB1OCAqbWFjX2FkZHIpCiB7CiAJdTggYnVmW0I0M19TRUNfS0VZU0laRV0gPSB7IDAsIH07CiAJdTggcGVyX3N0YV9rZXlzX3N0YXJ0ID0gODsKQEAgLTkyMyw4ICs4ODYsOCBAQAogCiBzdGF0aWMgaW50IGI0M19rZXlfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LAogCQkJIGludCBpbmRleCwgdTggYWxnb3JpdGhtLAotCQkJIGNvbnN0IHU4ICoga2V5LCBzaXplX3Qga2V5X2xlbiwKLQkJCSBjb25zdCB1OCAqIG1hY19hZGRyLAorCQkJIGNvbnN0IHU4ICprZXksIHNpemVfdCBrZXlfbGVuLAorCQkJIGNvbnN0IHU4ICptYWNfYWRkciwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mKQogewogCWludCBpOwpAQCAtOTM3LDggKzkwMCw3IEBACiAJCUI0M19XQVJOX09OKGRldi0+a2V5W2ldLmtleWNvbmYgPT0ga2V5Y29uZik7CiAJfQogCWlmIChpbmRleCA8IDApIHsKLQkJLyogRWl0aGVyIHBhaXJ3aXNlIGtleSBvciBhZGRyZXNzIGlzIDAwOjAwOjAwOjAwOjAwOjAwCi0JCSAqIGZvciB0cmFuc21pdC1vbmx5IGtleXMuIFNlYXJjaCB0aGUgaW5kZXguICovCisJCS8qIFBhaXJ3aXNlIGtleS4gR2V0IGFuIGVtcHR5IHNsb3QgZm9yIHRoZSBrZXkuICovCiAJCWlmIChiNDNfbmV3X2tpZHhfYXBpKGRldikpCiAJCQlzdGFfa2V5c19zdGFydCA9IDQ7CiAJCWVsc2UKQEAgLTk1MSw3ICs5MTMsNyBAQAogCQkJfQogCQl9CiAJCWlmIChpbmRleCA8IDApIHsKLQkJCWI0M2VycihkZXYtPndsLCAiT3V0IG9mIGhhcmR3YXJlIGtleSBtZW1vcnlcbiIpOworCQkJYjQzd2FybihkZXYtPndsLCAiT3V0IG9mIGhhcmR3YXJlIGtleSBtZW1vcnlcbiIpOwogCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KIAl9IGVsc2UKQEAgLTEzMjQsNyArMTI4Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGI0M193cml0ZV90ZW1wbGF0ZV9jb21tb24oc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgICAgIGNvbnN0IHU4ICogZGF0YSwgdTE2IHNpemUsCisJCQkJICAgICAgY29uc3QgdTggKmRhdGEsIHUxNiBzaXplLAogCQkJCSAgICAgIHUxNiByYW1fb2Zmc2V0LAogCQkJCSAgICAgIHUxNiBzaG1fc2l6ZV9vZmZzZXQsIHU4IHJhdGUpCiB7CkBAIC0xNTE0LDkgKzE0NzYsOSBAQAogICogMikgUGF0Y2hpbmcgZHVyYXRpb24gZmllbGQKICAqIDMpIFN0cmlwcGluZyBUSU0KICAqLwotc3RhdGljIGNvbnN0IHU4ICogYjQzX2dlbmVyYXRlX3Byb2JlX3Jlc3Aoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkgIHUxNiAqZGVzdF9zaXplLAotCQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZSkKK3N0YXRpYyBjb25zdCB1OCAqYjQzX2dlbmVyYXRlX3Byb2JlX3Jlc3Aoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkgdTE2ICpkZXN0X3NpemUsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUpCiB7CiAJY29uc3QgdTggKnNyY19kYXRhOwogCXU4ICpkZXN0X2RhdGE7CkBAIC0xOTgyLDcgKzE5NDQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX3JlbGVhc2VfZncoc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdykKK3ZvaWQgYjQzX2RvX3JlbGVhc2VfZncoc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdykKIHsKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3LT5kYXRhKTsKIAlmdy0+ZGF0YSA9IE5VTEw7CkBAIC0xOTkxLDMxICsxOTUzLDMwIEBACiAKIHN0YXRpYyB2b2lkIGI0M19yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKLQlkb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LnVjb2RlKTsKLQlkb19yZWxlYXNlX2Z3KCZkZXYtPmZ3LnBjbSk7Ci0JZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5pbml0dmFscyk7Ci0JZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5pbml0dmFsc19iYW5kKTsKKwliNDNfZG9fcmVsZWFzZV9mdygmZGV2LT5mdy51Y29kZSk7CisJYjQzX2RvX3JlbGVhc2VfZncoJmRldi0+ZncucGNtKTsKKwliNDNfZG9fcmVsZWFzZV9mdygmZGV2LT5mdy5pbml0dmFscyk7CisJYjQzX2RvX3JlbGVhc2VfZncoJmRldi0+ZncuaW5pdHZhbHNfYmFuZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M19wcmludF9md19oZWxwdGV4dChzdHJ1Y3QgYjQzX3dsICp3bCwgYm9vbCBlcnJvcikKIHsKLQljb25zdCBjaGFyICp0ZXh0OworCWNvbnN0IGNoYXIgdGV4dFtdID0KKwkJIllvdSBtdXN0IGdvIHRvICIgXAorCQkiaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcvZW4vdXNlcnMvRHJpdmVycy9iNDMjZGV2aWNlZmlybXdhcmUgIiBcCisJCSJhbmQgZG93bmxvYWQgdGhlIGNvcnJlY3QgZmlybXdhcmUgZm9yIHRoaXMgZHJpdmVyIHZlcnNpb24uICIgXAorCQkiUGxlYXNlIGNhcmVmdWxseSByZWFkIGFsbCBpbnN0cnVjdGlvbnMgb24gdGhpcyB3ZWJzaXRlLlxuIjsKIAotCXRleHQgPSAiWW91IG11c3QgZ28gdG8gIgotCSAgICAgICAiaHR0cDovL2xpbnV4d2lyZWxlc3Mub3JnL2VuL3VzZXJzL0RyaXZlcnMvYjQzI2RldmljZWZpcm13YXJlICIKLQkgICAgICAgImFuZCBkb3dubG9hZCB0aGUgbGF0ZXN0IGZpcm13YXJlICh2ZXJzaW9uIDQpLlxuIjsKIAlpZiAoZXJyb3IpCiAJCWI0M2Vycih3bCwgdGV4dCk7CiAJZWxzZQogCQliNDN3YXJuKHdsLCB0ZXh0KTsKIH0KIAotc3RhdGljIGludCBkb19yZXF1ZXN0X2Z3KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSBjb25zdCBjaGFyICpuYW1lLAotCQkJIHN0cnVjdCBiNDNfZmlybXdhcmVfZmlsZSAqZncsCi0JCQkgYm9vbCBzaWxlbnQpCitpbnQgYjQzX2RvX3JlcXVlc3RfZncoc3RydWN0IGI0M19yZXF1ZXN0X2Z3X2NvbnRleHQgKmN0eCwKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdykKIHsKLQljaGFyIHBhdGhbc2l6ZW9mKG1vZHBhcmFtX2Z3cG9zdGZpeCkgKyAzMl07CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpibG9iOwogCXN0cnVjdCBiNDNfZndfaGVhZGVyICpoZHI7CiAJdTMyIHNpemU7CkBAIC0yMDIzLDI5ICsxOTg0LDQ5IEBACiAKIAlpZiAoIW5hbWUpIHsKIAkJLyogRG9uJ3QgZmV0Y2ggYW55dGhpbmcuIEZyZWUgcG9zc2libHkgY2FjaGVkIGZpcm13YXJlLiAqLwotCQlkb19yZWxlYXNlX2Z3KGZ3KTsKKwkJLyogRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBrZWVwIGl0IGFueXdheSwgdG8gc2F2ZSBzb21lIGhlYWRhY2hlCisJCSAqIG9uIHN1c3BlbmQvcmVzdW1lIHdpdGggbXVsdGliYW5kIGRldmljZXMuICovCisJCWI0M19kb19yZWxlYXNlX2Z3KGZ3KTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChmdy0+ZmlsZW5hbWUpIHsKLQkJaWYgKHN0cmNtcChmdy0+ZmlsZW5hbWUsIG5hbWUpID09IDApCisJCWlmICgoZnctPnR5cGUgPT0gY3R4LT5yZXFfdHlwZSkgJiYKKwkJICAgIChzdHJjbXAoZnctPmZpbGVuYW1lLCBuYW1lKSA9PSAwKSkKIAkJCXJldHVybiAwOyAvKiBBbHJlYWR5IGhhdmUgdGhpcyBmdy4gKi8KIAkJLyogRnJlZSB0aGUgY2FjaGVkIGZpcm13YXJlIGZpcnN0LiAqLwotCQlkb19yZWxlYXNlX2Z3KGZ3KTsKKwkJLyogRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBkbyB0aGlzIGxhdGVyIGFmdGVyIHdlIHN1Y2Nlc3NmdWxseQorCQkgKiBnb3QgdGhlIG5ldyBmdy4gVGhpcyBjb3VsZCByZWR1Y2UgaGVhZGFjaGUgd2l0aCBtdWx0aWJhbmQgZGV2aWNlcy4KKwkJICogV2UgY291bGQgYWxzbyByZWRlc2lnbiB0aGlzIHRvIGNhY2hlIHRoZSBmaXJtd2FyZSBmb3IgYWxsIHBvc3NpYmxlCisJCSAqIGJhbmRzIGFsbCB0aGUgdGltZS4gKi8KKwkJYjQzX2RvX3JlbGVhc2VfZncoZncpOwogCX0KIAotCXNucHJpbnRmKHBhdGgsIEFSUkFZX1NJWkUocGF0aCksCi0JCSAiYjQzJXMvJXMuZnciLAotCQkgbW9kcGFyYW1fZndwb3N0Zml4LCBuYW1lKTsKLQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZibG9iLCBwYXRoLCBkZXYtPmRldi0+ZGV2KTsKKwlzd2l0Y2ggKGN0eC0+cmVxX3R5cGUpIHsKKwljYXNlIEI0M19GV1RZUEVfUFJPUFJJRVRBUlk6CisJCXNucHJpbnRmKGN0eC0+ZnduYW1lLCBzaXplb2YoY3R4LT5md25hbWUpLAorCQkJICJiNDMlcy8lcy5mdyIsCisJCQkgbW9kcGFyYW1fZndwb3N0Zml4LCBuYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfRldUWVBFX09QRU5TT1VSQ0U6CisJCXNucHJpbnRmKGN0eC0+ZnduYW1lLCBzaXplb2YoY3R4LT5md25hbWUpLAorCQkJICJiNDMtb3BlbiVzLyVzLmZ3IiwKKwkJCSBtb2RwYXJhbV9md3Bvc3RmaXgsIG5hbWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCNDNfV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmJsb2IsIGN0eC0+ZnduYW1lLCBjdHgtPmRldi0+ZGV2LT5kZXYpOwogCWlmIChlcnIgPT0gLUVOT0VOVCkgewotCQlpZiAoIXNpbGVudCkgewotCQkJYjQzZXJyKGRldi0+d2wsICJGaXJtd2FyZSBmaWxlIFwiJXNcIiBub3QgZm91bmRcbiIsCi0JCQkgICAgICAgcGF0aCk7Ci0JCX0KKwkJc25wcmludGYoY3R4LT5lcnJvcnNbY3R4LT5yZXFfdHlwZV0sCisJCQkgc2l6ZW9mKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdKSwKKwkJCSAiRmlybXdhcmUgZmlsZSBcIiVzXCIgbm90IGZvdW5kXG4iLCBjdHgtPmZ3bmFtZSk7CiAJCXJldHVybiBlcnI7CiAJfSBlbHNlIGlmIChlcnIpIHsKLQkJYjQzZXJyKGRldi0+d2wsICJGaXJtd2FyZSBmaWxlIFwiJXNcIiByZXF1ZXN0IGZhaWxlZCAoZXJyPSVkKVxuIiwKLQkJICAgICAgIHBhdGgsIGVycik7CisJCXNucHJpbnRmKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdLAorCQkJIHNpemVvZihjdHgtPmVycm9yc1tjdHgtPnJlcV90eXBlXSksCisJCQkgIkZpcm13YXJlIGZpbGUgXCIlc1wiIHJlcXVlc3QgZmFpbGVkIChlcnI9JWQpXG4iLAorCQkJIGN0eC0+ZnduYW1lLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoYmxvYi0+c2l6ZSA8IHNpemVvZihzdHJ1Y3QgYjQzX2Z3X2hlYWRlcikpCkBAIC0yMDY4LDIwICsyMDQ5LDI0IEBACiAKIAlmdy0+ZGF0YSA9IGJsb2I7CiAJZnctPmZpbGVuYW1lID0gbmFtZTsKKwlmdy0+dHlwZSA9IGN0eC0+cmVxX3R5cGU7CiAKIAlyZXR1cm4gMDsKIAogZXJyX2Zvcm1hdDoKLQliNDNlcnIoZGV2LT53bCwgIkZpcm13YXJlIGZpbGUgXCIlc1wiIGZvcm1hdCBlcnJvci5cbiIsIHBhdGgpOworCXNucHJpbnRmKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdLAorCQkgc2l6ZW9mKGN0eC0+ZXJyb3JzW2N0eC0+cmVxX3R5cGVdKSwKKwkJICJGaXJtd2FyZSBmaWxlIFwiJXNcIiBmb3JtYXQgZXJyb3IuXG4iLCBjdHgtPmZ3bmFtZSk7CiAJcmVsZWFzZV9maXJtd2FyZShibG9iKTsKIAogCXJldHVybiAtRVBST1RPOwogfQogCi1zdGF0aWMgaW50IGI0M19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3N0YXRpYyBpbnQgYjQzX3RyeV9yZXF1ZXN0X2Z3KHN0cnVjdCBiNDNfcmVxdWVzdF9md19jb250ZXh0ICpjdHgpCiB7Ci0Jc3RydWN0IGI0M19maXJtd2FyZSAqZncgPSAmZGV2LT5mdzsKLQljb25zdCB1OCByZXYgPSBkZXYtPmRldi0+aWQucmV2aXNpb247CisJc3RydWN0IGI0M193bGRldiAqZGV2ID0gY3R4LT5kZXY7CisJc3RydWN0IGI0M19maXJtd2FyZSAqZncgPSAmY3R4LT5kZXYtPmZ3OworCWNvbnN0IHU4IHJldiA9IGN0eC0+ZGV2LT5kZXYtPmlkLnJldmlzaW9uOwogCWNvbnN0IGNoYXIgKmZpbGVuYW1lOwogCXUzMiB0bXNoaWdoOwogCWludCBlcnI7CkBAIC0yMDk2LDcgKzIwODEsNyBAQAogCQlmaWxlbmFtZSA9ICJ1Y29kZTEzIjsKIAllbHNlCiAJCWdvdG8gZXJyX25vX3Vjb2RlOwotCWVyciA9IGRvX3JlcXVlc3RfZncoZGV2LCBmaWxlbmFtZSwgJmZ3LT51Y29kZSwgMCk7CisJZXJyID0gYjQzX2RvX3JlcXVlc3RfZncoY3R4LCBmaWxlbmFtZSwgJmZ3LT51Y29kZSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfbG9hZDsKIApAQCAtMjEwOCw3ICsyMDkzLDcgQEAKIAllbHNlCiAJCWdvdG8gZXJyX25vX3BjbTsKIAlmdy0+cGNtX3JlcXVlc3RfZmFpbGVkID0gMDsKLQllcnIgPSBkb19yZXF1ZXN0X2Z3KGRldiwgZmlsZW5hbWUsICZmdy0+cGNtLCAxKTsKKwllcnIgPSBiNDNfZG9fcmVxdWVzdF9mdyhjdHgsIGZpbGVuYW1lLCAmZnctPnBjbSk7CiAJaWYgKGVyciA9PSAtRU5PRU5UKSB7CiAJCS8qIFdlIGRpZCBub3QgZmluZCBhIFBDTSBmaWxlPyBOb3QgZmF0YWwsIGJ1dAogCQkgKiBjb3JlIHJldiA8PSAxMCBtdXN0IGRvIHdpdGhvdXQgaHdjcnlwdG8gdGhlbi4gKi8KQEAgLTIxNDQsNyArMjEyOSw3IEBACiAJZGVmYXVsdDoKIAkJZ290byBlcnJfbm9faW5pdHZhbHM7CiAJfQotCWVyciA9IGRvX3JlcXVlc3RfZncoZGV2LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFscywgMCk7CisJZXJyID0gYjQzX2RvX3JlcXVlc3RfZncoY3R4LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFscyk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfbG9hZDsKIApAQCAtMjE3OCwzMCArMjE2MywzNCBAQAogCWRlZmF1bHQ6CiAJCWdvdG8gZXJyX25vX2luaXR2YWxzOwogCX0KLQllcnIgPSBkb19yZXF1ZXN0X2Z3KGRldiwgZmlsZW5hbWUsICZmdy0+aW5pdHZhbHNfYmFuZCwgMCk7CisJZXJyID0gYjQzX2RvX3JlcXVlc3RfZncoY3R4LCBmaWxlbmFtZSwgJmZ3LT5pbml0dmFsc19iYW5kKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9sb2FkOwogCiAJcmV0dXJuIDA7CiAKLWVycl9sb2FkOgotCWI0M19wcmludF9md19oZWxwdGV4dChkZXYtPndsLCAxKTsKLQlnb3RvIGVycm9yOwotCiBlcnJfbm9fdWNvZGU6Ci0JZXJyID0gLUVOT0RFVjsKLQliNDNlcnIoZGV2LT53bCwgIk5vIG1pY3JvY29kZSBhdmFpbGFibGUgZm9yIGNvcmUgcmV2ICV1XG4iLCByZXYpOworCWVyciA9IGN0eC0+ZmF0YWxfZmFpbHVyZSA9IC1FT1BOT1RTVVBQOworCWI0M2VycihkZXYtPndsLCAiVGhlIGRyaXZlciBkb2VzIG5vdCBrbm93IHdoaWNoIGZpcm13YXJlICh1Y29kZSkgIgorCSAgICAgICAiaXMgcmVxdWlyZWQgZm9yIHlvdXIgZGV2aWNlICh3bC1jb3JlIHJldiAldSlcbiIsIHJldik7CiAJZ290byBlcnJvcjsKIAogZXJyX25vX3BjbToKLQllcnIgPSAtRU5PREVWOwotCWI0M2VycihkZXYtPndsLCAiTm8gUENNIGF2YWlsYWJsZSBmb3IgY29yZSByZXYgJXVcbiIsIHJldik7CisJZXJyID0gY3R4LT5mYXRhbF9mYWlsdXJlID0gLUVPUE5PVFNVUFA7CisJYjQzZXJyKGRldi0+d2wsICJUaGUgZHJpdmVyIGRvZXMgbm90IGtub3cgd2hpY2ggZmlybXdhcmUgKFBDTSkgIgorCSAgICAgICAiaXMgcmVxdWlyZWQgZm9yIHlvdXIgZGV2aWNlICh3bC1jb3JlIHJldiAldSlcbiIsIHJldik7CiAJZ290byBlcnJvcjsKIAogZXJyX25vX2luaXR2YWxzOgotCWVyciA9IC1FTk9ERVY7Ci0JYjQzZXJyKGRldi0+d2wsICJObyBJbml0aWFsIFZhbHVlcyBmaXJtd2FyZSBmaWxlIGZvciBQSFkgJXUsICIKLQkgICAgICAgImNvcmUgcmV2ICV1XG4iLCBkZXYtPnBoeS50eXBlLCByZXYpOworCWVyciA9IGN0eC0+ZmF0YWxfZmFpbHVyZSA9IC1FT1BOT1RTVVBQOworCWI0M2VycihkZXYtPndsLCAiVGhlIGRyaXZlciBkb2VzIG5vdCBrbm93IHdoaWNoIGZpcm13YXJlIChpbml0dmFscykgIgorCSAgICAgICAiaXMgcmVxdWlyZWQgZm9yIHlvdXIgZGV2aWNlICh3bC1jb3JlIHJldiAldSlcbiIsIHJldik7CisJZ290byBlcnJvcjsKKworZXJyX2xvYWQ6CisJLyogV2UgZmFpbGVkIHRvIGxvYWQgdGhpcyBmaXJtd2FyZSBpbWFnZS4gVGhlIGVycm9yIG1lc3NhZ2UKKwkgKiBhbHJlYWR5IGlzIGluIGN0eC0+ZXJyb3JzLiBSZXR1cm4gYW5kIGxldCBvdXIgY2FsbGVyIGRlY2lkZQorCSAqIHdoYXQgdG8gZG8uICovCiAJZ290byBlcnJvcjsKIAogZXJyb3I6CkBAIC0yMjA5LDYgKzIxOTgsNDggQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGI0M19yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCAqY3R4OworCXVuc2lnbmVkIGludCBpOworCWludCBlcnI7CisJY29uc3QgY2hhciAqZXJybXNnOworCisJY3R4ID0ga3phbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOworCWlmICghY3R4KQorCQlyZXR1cm4gLUVOT01FTTsKKwljdHgtPmRldiA9IGRldjsKKworCWN0eC0+cmVxX3R5cGUgPSBCNDNfRldUWVBFX1BST1BSSUVUQVJZOworCWVyciA9IGI0M190cnlfcmVxdWVzdF9mdyhjdHgpOworCWlmICghZXJyKQorCQlnb3RvIG91dDsgLyogU3VjY2Vzc2Z1bGx5IGxvYWRlZCBpdC4gKi8KKwllcnIgPSBjdHgtPmZhdGFsX2ZhaWx1cmU7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwljdHgtPnJlcV90eXBlID0gQjQzX0ZXVFlQRV9PUEVOU09VUkNFOworCWVyciA9IGI0M190cnlfcmVxdWVzdF9mdyhjdHgpOworCWlmICghZXJyKQorCQlnb3RvIG91dDsgLyogU3VjY2Vzc2Z1bGx5IGxvYWRlZCBpdC4gKi8KKwllcnIgPSBjdHgtPmZhdGFsX2ZhaWx1cmU7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBDb3VsZCBub3QgZmluZCBhIHVzYWJsZSBmaXJtd2FyZS4gUHJpbnQgdGhlIGVycm9ycy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQjQzX05SX0ZXVFlQRVM7IGkrKykgeworCQllcnJtc2cgPSBjdHgtPmVycm9yc1tpXTsKKwkJaWYgKHN0cmxlbihlcnJtc2cpKQorCQkJYjQzZXJyKGRldi0+d2wsIGVycm1zZyk7CisJfQorCWI0M19wcmludF9md19oZWxwdGV4dChkZXYtPndsLCAxKTsKKwllcnIgPSAtRU5PRU5UOworCitvdXQ6CisJa2ZyZWUoY3R4KTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGI0M191cGxvYWRfbWljcm9jb2RlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAljb25zdCBzaXplX3QgaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgYjQzX2Z3X2hlYWRlcik7CkBAIC0yMzE5LDggKzIzNTAsMTEgQEAKIAl9CiAKIAlpZiAoYjQzX2lzX29sZF90eGhkcl9mb3JtYXQoZGV2KSkgeworCQkvKiBXZSdyZSBvdmVyIHRoZSBkZWFkbGluZSwgYnV0IHdlIGtlZXAgc3VwcG9ydCBmb3Igb2xkIGZ3CisJCSAqIHVudGlsIGl0IHR1cm5zIG91dCB0byBiZSBpbiBtYWpvciBjb25mbGljdCB3aXRoIHNvbWV0aGluZyBuZXcuICovCiAJCWI0M3dhcm4oZGV2LT53bCwgIllvdSBhcmUgdXNpbmcgYW4gb2xkIGZpcm13YXJlIGltYWdlLiAiCi0JCQkiU3VwcG9ydCBmb3Igb2xkIGZpcm13YXJlIHdpbGwgYmUgcmVtb3ZlZCBpbiBKdWx5IDIwMDguXG4iKTsKKwkJCSJTdXBwb3J0IGZvciBvbGQgZmlybXdhcmUgd2lsbCBiZSByZW1vdmVkIHNvb24gIgorCQkJIihvZmZpY2lhbCBkZWFkbGluZSB3YXMgSnVseSAyMDA4KS5cbiIpOwogCQliNDNfcHJpbnRfZndfaGVscHRleHQoZGV2LT53bCwgMCk7CiAJfQogCkBAIC0yOTQ2LDcgKzI5ODAsNyBAQAogCWI0M19jbGVhcl9rZXlzKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgYjQzX3JuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB1MzIgKiBkYXRhKQorc3RhdGljIGludCBiNDNfcm5nX3JlYWQoc3RydWN0IGh3cm5nICpybmcsIHUzMiAqZGF0YSkKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IChzdHJ1Y3QgYjQzX3dsICopcm5nLT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMjIxLDYgKzMyNTUsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NCBiNDNfb3BfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCXU2NCB0c2Y7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OworCisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkKKwkJYjQzX3RzZl9yZWFkKGRldiwgJnRzZik7CisJZWxzZQorCQl0c2YgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiB0c2Y7Cit9CisKK3N0YXRpYyB2b2lkIGI0M19vcF9zZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1NjQgdHNmKQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OworCisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkKKwkJYjQzX3RzZl93cml0ZShkZXYsIHRzZik7CisKKwlzcGluX3VubG9ja19pcnEoJndsLT5pcnFfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCiBzdGF0aWMgdm9pZCBiNDNfcHV0X3BoeV9pbnRvX3Jlc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3Qgc3NiX2RldmljZSAqc2RldiA9IGRldi0+ZGV2OwpAQCAtMzI0MCw3ICszMzExLDcgQEAKIAltc2xlZXAoMSk7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICogYmFuZF90b19zdHJpbmcoZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQorc3RhdGljIGNvbnN0IGNoYXIgKmJhbmRfdG9fc3RyaW5nKGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAlzd2l0Y2ggKGJhbmQpIHsKIAljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CkBAIC0zNDQyLDcgKzM1MTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGI0M191cGRhdGVfYmFzaWNfcmF0ZXMoc3RydWN0IGI0M193bGRldiAqZGV2LCB1NjQgYnJhdGVzKQorc3RhdGljIHZvaWQgYjQzX3VwZGF0ZV9iYXNpY19yYXRlcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBicmF0ZXMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPQogCQlkZXYtPndsLT5ody0+d2lwaHktPmJhbmRzW2I0M19jdXJyZW50X2JhbmQoZGV2LT53bCldOwpAQCAtMzUyMCwyMSArMzU5MSwyOSBAQAogfQogCiBzdGF0aWMgaW50IGI0M19vcF9zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJCSAgIGNvbnN0IHU4ICpsb2NhbF9hZGRyLCBjb25zdCB1OCAqYWRkciwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKKwkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBhbGdvcml0aG07CiAJdTggaW5kZXg7CiAJaW50IGVycjsKKwlzdGF0aWMgY29uc3QgdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKIAogCWlmIChtb2RwYXJhbV9ub2h3Y3J5cHQpCiAJCXJldHVybiAtRU5PU1BDOyAvKiBVc2VyIGRpc2FibGVkIEhXLWNyeXB0byAqLwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycSgmd2wtPmlycV9sb2NrKTsKKwl3cml0ZV9sb2NrKCZ3bC0+dHhfbG9jayk7CisJLyogV2h5IGRvIHdlIG5lZWQgYWxsIHRoaXMgbG9ja2luZyBoZXJlPworCSAqIG11dGV4ICAgICAtPiBFdmVyeSBjb25maWcgb3BlcmF0aW9uIG11c3QgdGFrZSBpdC4KKwkgKiBpcnFfbG9jayAgLT4gV2UgbW9kaWZ5IHRoZSBkZXYtPmtleSBhcnJheSwgd2hpY2ggaXMgYWNjZXNzZWQKKwkgKiAgICAgICAgICAgICAgaW4gdGhlIElSUSBoYW5kbGVycy4KKwkgKiB0eF9sb2NrICAgLT4gV2UgbW9kaWZ5IHRoZSBkZXYtPmtleSBhcnJheSwgd2hpY2ggaXMgYWNjZXNzZWQKKwkgKiAgICAgICAgICAgICAgaW4gdGhlIFRYIGhhbmRsZXIuCisJICovCiAKIAlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAJZXJyID0gLUVOT0RFVjsKQEAgLTM1NTEsNyArMzYzMCw3IEBACiAJZXJyID0gLUVJTlZBTDsKIAlzd2l0Y2ggKGtleS0+YWxnKSB7CiAJY2FzZSBBTEdfV0VQOgotCQlpZiAoa2V5LT5rZXlsZW4gPT0gNSkKKwkJaWYgKGtleS0+a2V5bGVuID09IExFTl9XRVA0MCkKIAkJCWFsZ29yaXRobSA9IEI0M19TRUNfQUxHT19XRVA0MDsKIAkJZWxzZQogCQkJYWxnb3JpdGhtID0gQjQzX1NFQ19BTEdPX1dFUDEwNDsKQEAgLTM1NzgsMTcgKzM2NTcsMTkgQEAKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCi0JCWlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkgewotCQkJLyogYWRkciBpcyBGRjpGRjpGRjpGRjpGRjpGRiBmb3IgZGVmYXVsdCBrZXlzICovCisJCWlmIChrZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFKSB7CisJCQlpZiAoV0FSTl9PTighc3RhKSkgeworCQkJCWVyciA9IC1FT1BOT1RTVVBQOworCQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCX0KKwkJCS8qIFBhaXJ3aXNlIGtleSB3aXRoIGFuIGFzc2lnbmVkIE1BQyBhZGRyZXNzLiAqLworCQkJZXJyID0gYjQzX2tleV93cml0ZShkZXYsIC0xLCBhbGdvcml0aG0sCisJCQkJCSAgICBrZXktPmtleSwga2V5LT5rZXlsZW4sCisJCQkJCSAgICBzdGEtPmFkZHIsIGtleSk7CisJCX0gZWxzZSB7CisJCQkvKiBHcm91cCBrZXkgKi8KIAkJCWVyciA9IGI0M19rZXlfd3JpdGUoZGV2LCBpbmRleCwgYWxnb3JpdGhtLAogCQkJCQkgICAga2V5LT5rZXksIGtleS0+a2V5bGVuLCBOVUxMLCBrZXkpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIGVpdGhlciBwYWlyd2lzZSBrZXkgb3IgYWRkcmVzcyBpcyAwMDowMDowMDowMDowMDowMAotCQkJICogZm9yIHRyYW5zbWl0LW9ubHkga2V5cwotCQkJICovCi0JCQllcnIgPSBiNDNfa2V5X3dyaXRlKGRldiwgLTEsIGFsZ29yaXRobSwKLQkJCQkJICAgIGtleS0+a2V5LCBrZXktPmtleWxlbiwgYWRkciwga2V5KTsKIAkJfQogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrOwpAQCAtMzYxNywxMCArMzY5OCwxMSBAQAogCQliNDNkYmcod2wsICIlcyBoYXJkd2FyZSBiYXNlZCBlbmNyeXB0aW9uIGZvciBrZXlpZHg6ICVkLCAiCiAJCSAgICAgICAibWFjOiAlcE1cbiIsCiAJCSAgICAgICBjbWQgPT0gU0VUX0tFWSA/ICJVc2luZyIgOiAiRGlzYWJsaW5nIiwga2V5LT5rZXlpZHgsCi0JCSAgICAgICBhZGRyKTsKKwkJICAgICAgIHN0YSA/IHN0YS0+YWRkciA6IGJjYXN0X2FkZHIpOwogCQliNDNfZHVtcF9rZXltZW1vcnkoZGV2KTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd2wtPmlycV9sb2NrLCBmbGFncyk7CisJd3JpdGVfdW5sb2NrKCZ3bC0+dHhfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZ3bC0+aXJxX2xvY2spOwogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIAogCXJldHVybiBlcnI7CkBAIC0zNzk2LDYgKzM4NzgsMTIgQEAKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0I0M19OUEhZCiAJY2FzZSBCNDNfUEhZVFlQRV9OOgorCQlpZiAocGh5X3JldiA+IDQpCisJCQl1bnN1cHBvcnRlZCA9IDE7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgQ09ORklHX0I0M19QSFlfTFAKKwljYXNlIEI0M19QSFlUWVBFX0xQOgogCQlpZiAocGh5X3JldiA+IDEpCiAJCQl1bnN1cHBvcnRlZCA9IDE7CiAJCWJyZWFrOwpAQCAtMzg0OSw3ICszOTM3LDExIEBACiAJCQl1bnN1cHBvcnRlZCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgQjQzX1BIWVRZUEVfTjoKLQkJaWYgKHJhZGlvX3ZlciAhPSAweDIwNTUpCisJCWlmIChyYWRpb192ZXIgIT0gMHgyMDU1ICYmIHJhZGlvX3ZlciAhPSAweDIwNTYpCisJCQl1bnN1cHBvcnRlZCA9IDE7CisJCWJyZWFrOworCWNhc2UgQjQzX1BIWVRZUEVfTFA6CisJCWlmIChyYWRpb192ZXIgIT0gMHgyMDYyKQogCQkJdW5zdXBwb3J0ZWQgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzkwMSw2ICszOTkzLDggQEAKIAlkZXYtPmlycV9yZWFzb24gPSAwOwogCW1lbXNldChkZXYtPmRtYV9yZWFzb24sIDAsIHNpemVvZihkZXYtPmRtYV9yZWFzb24pKTsKIAlkZXYtPmlycV9zYXZlZHN0YXRlID0gQjQzX0lSUV9NQVNLVEVNUExBVEU7CisJaWYgKGI0M19tb2RwYXJhbV92ZXJib3NlIDwgQjQzX1ZFUkJPU0lUWV9ERUJVRykKKwkJZGV2LT5pcnFfc2F2ZWRzdGF0ZSAmPSB+QjQzX0lSUV9QSFlfVFhFUlI7CiAKIAlkZXYtPm1hY19zdXNwZW5kZWQgPSAxOwogCkBAIC00MDc4LDExICs0MTcyLDIxIEBACiAJCQloZiB8PSBCNDNfSEZfR0RDVzsKIAkJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9QQUNUUkwpCiAJCQloZiB8PSBCNDNfSEZfT0ZETVBBQk9PU1Q7Ci0JfSBlbHNlIGlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQikgewotCQloZiB8PSBCNDNfSEZfU1lNVzsKLQkJaWYgKHBoeS0+cmV2ID49IDIgJiYgcGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKQotCQkJaGYgJj0gfkI0M19IRl9HRENXOwogCX0KKwlpZiAocGh5LT5yYWRpb192ZXIgPT0gMHgyMDUwKSB7CisJCWlmIChwaHktPnJhZGlvX3JldiA9PSA2KQorCQkJaGYgfD0gQjQzX0hGXzQzMThUU1NJOworCQlpZiAocGh5LT5yYWRpb19yZXYgPCA2KQorCQkJaGYgfD0gQjQzX0hGX1ZDT1JFQ0FMQzsKKwl9CisJaWYgKHNwcm9tLT5ib2FyZGZsYWdzX2xvICYgQjQzX0JGTF9YVEFMX05PU0xPVykKKwkJaGYgfD0gQjQzX0hGX0RTQ1JROyAvKiBEaXNhYmxlIHNsb3djbG9jayByZXF1ZXN0cyBmcm9tIHVjb2RlLiAqLworI2lmZGVmIENPTkZJR19TU0JfRFJJVkVSX1BDSUNPUkUKKwlpZiAoKGJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ0kpICYmCisJICAgIChidXMtPnBjaWNvcmUuZGV2LT5pZC5yZXZpc2lvbiA8PSAxMCkpCisJCWhmIHw9IEI0M19IRl9QQ0lTQ1c7IC8qIFBDSSBzbG93IGNsb2NrIHdvcmthcm91bmQuICovCisjZW5kaWYKKwloZiAmPSB+QjQzX0hGX1NLQ0ZQVVA7CiAJYjQzX2hmX3dyaXRlKGRldiwgaGYpOwogCiAJYjQzX3NldF9yZXRyeV9saW1pdHMoZGV2LCBCNDNfREVGQVVMVF9TSE9SVF9SRVRSWV9MSU1JVCwKQEAgLTQxMjEsNyArNDIyNSw3IEBACiAJYjQzX3NldF9zeW50aF9wdV9kZWxheShkZXYsIDEpOwogCWI0M19ibHVldG9vdGhfY29leHRfZW5hYmxlKGRldik7CiAKLQlzc2JfYnVzX3Bvd2VydXAoYnVzLCAxKTsJLyogRW5hYmxlIGR5bmFtaWMgUENUTCAqLworCXNzYl9idXNfcG93ZXJ1cChidXMsICEoc3Byb20tPmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX1hUQUxfTk9TTE9XKSk7CiAJYjQzX3VwbG9hZF9jYXJkX21hY2FkZHJlc3MoZGV2KTsKIAliNDNfc2VjdXJpdHlfaW5pdChkZXYpOwogCWlmICghZGV2LT5zdXNwZW5kX2luX3Byb2dyZXNzKQpAQCAtNDMwNSw2ICs0NDA5LDM0IEBACiAJQjQzX1dBUk5fT04oIXZpZiB8fCB3bC0+dmlmICE9IHZpZik7CiB9CiAKK3N0YXRpYyB2b2lkIGI0M19vcF9zd19zY2FuX3N0YXJ0X25vdGlmaWVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKKwlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXY7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCWRldiA9IHdsLT5jdXJyZW50X2RldjsKKwlpZiAoZGV2ICYmIChiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfSU5JVElBTElaRUQpKSB7CisJCS8qIERpc2FibGUgQ0ZQIHVwZGF0ZSBkdXJpbmcgc2NhbiBvbiBvdGhlciBjaGFubmVscy4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9TS0NGUFVQKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBiNDNfb3Bfc3dfc2Nhbl9jb21wbGV0ZV9ub3RpZmllcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CisJc3RydWN0IGI0M193bGRldiAqZGV2OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlkZXYgPSB3bC0+Y3VycmVudF9kZXY7CisJaWYgKGRldiAmJiAoYjQzX3N0YXR1cyhkZXYpID49IEI0M19TVEFUX0lOSVRJQUxJWkVEKSkgeworCQkvKiBSZS1lbmFibGUgQ0ZQIHVwZGF0ZS4gKi8KKwkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSAmIH5CNDNfSEZfU0tDRlBVUCk7CisJfQorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIGI0M19od19vcHMgPSB7CiAJLnR4CQkJPSBiNDNfb3BfdHgsCiAJLmNvbmZfdHgJCT0gYjQzX29wX2NvbmZfdHgsCkBAIC00MzE3LDEwICs0NDQ5LDE0IEBACiAJLnNldF9rZXkJCT0gYjQzX29wX3NldF9rZXksCiAJLmdldF9zdGF0cwkJPSBiNDNfb3BfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMJCT0gYjQzX29wX2dldF90eF9zdGF0cywKKwkuZ2V0X3RzZgkJPSBiNDNfb3BfZ2V0X3RzZiwKKwkuc2V0X3RzZgkJPSBiNDNfb3Bfc2V0X3RzZiwKIAkuc3RhcnQJCQk9IGI0M19vcF9zdGFydCwKIAkuc3RvcAkJCT0gYjQzX29wX3N0b3AsCiAJLnNldF90aW0JCT0gYjQzX29wX2JlYWNvbl9zZXRfdGltLAogCS5zdGFfbm90aWZ5CQk9IGI0M19vcF9zdGFfbm90aWZ5LAorCS5zd19zY2FuX3N0YXJ0CQk9IGI0M19vcF9zd19zY2FuX3N0YXJ0X25vdGlmaWVyLAorCS5zd19zY2FuX2NvbXBsZXRlCT0gYjQzX29wX3N3X3NjYW5fY29tcGxldGVfbm90aWZpZXIsCiB9OwogCiAvKiBIYXJkLXJlc2V0IHRoZSBjaGlwLiBEbyBub3QgY2FsbCB0aGlzIGRpcmVjdGx5LgpAQCAtNDQ0Niw2ICs0NTgyLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIEI0M19QSFlUWVBFX0c6CiAJCWNhc2UgQjQzX1BIWVRZUEVfTjoKKwkJY2FzZSBCNDNfUEhZVFlQRV9MUDoKIAkJCWhhdmVfMmdoel9waHkgPSAxOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00NjU3LDkgKzQ3OTQsMTAgQEAKIAlJTklUX1dPUksoJndsLT50eHBvd2VyX2FkanVzdF93b3JrLCBiNDNfcGh5X3R4cG93ZXJfYWRqdXN0X3dvcmspOwogCiAJc3NiX3NldF9kZXZ0eXBlZGF0YShkZXYsIHdsKTsKLQliNDNpbmZvKHdsLCAiQnJvYWRjb20gJTA0WCBXTEFOIGZvdW5kXG4iLCBkZXYtPmJ1cy0+Y2hpcF9pZCk7CisJYjQzaW5mbyh3bCwgIkJyb2FkY29tICUwNFggV0xBTiBmb3VuZCAoY29yZSByZXZpc2lvbiAldSlcbiIsCisJCWRldi0+YnVzLT5jaGlwX2lkLCBkZXYtPmlkLnJldmlzaW9uKTsKIAllcnIgPSAwOwotICAgICAgb3V0Ogorb3V0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5oCmluZGV4IGY4NzFhMjUuLjQwYWJjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uaApAQCAtNDAsNiArNDAsMjQgQEAKIAogCiBleHRlcm4gaW50IGI0M19tb2RwYXJhbV9xb3M7CitleHRlcm4gaW50IGI0M19tb2RwYXJhbV92ZXJib3NlOworCisvKiBMb2dtZXNzYWdlIHZlcmJvc2l0eSBsZXZlbHMuIFVwZGF0ZSB0aGUgYjQzX21vZHBhcmFtX3ZlcmJvc2UgaGVscHRleHQsIGlmCisgKiB5b3UgYWRkIG9yIHJlbW92ZSBsZXZlbHMuICovCitlbnVtIGI0M192ZXJib3NpdHkgeworCUI0M19WRVJCT1NJVFlfRVJST1IsCisJQjQzX1ZFUkJPU0lUWV9XQVJOLAorCUI0M19WRVJCT1NJVFlfSU5GTywKKwlCNDNfVkVSQk9TSVRZX0RFQlVHLAorCV9fQjQzX1ZFUkJPU0lUWV9BRlRFUkxBU1QsIC8qIGtlZXAgbGFzdCAqLworCisJQjQzX1ZFUkJPU0lUWV9NQVggPSBfX0I0M19WRVJCT1NJVFlfQUZURVJMQVNUIC0gMSwKKyNpZiBCNDNfREVCVUcKKwlCNDNfVkVSQk9TSVRZX0RFRkFVTFQgPSBCNDNfVkVSQk9TSVRZX0RFQlVHLAorI2Vsc2UKKwlCNDNfVkVSQk9TSVRZX0RFRkFVTFQgPSBCNDNfVkVSQk9TSVRZX0lORk8sCisjZW5kaWYKK307CiAKIAogLyogTGlnaHR3ZWlnaHQgZnVuY3Rpb24gdG8gY29udmVydCBhIGZyZXF1ZW5jeSAoaW4gTWh6KSB0byBhIGNoYW5uZWwgbnVtYmVyLiAqLwpAQCAtMTIxLDQgKzEzOSwxMSBAQAogdm9pZCBiNDNfbWFjX3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIHZvaWQgYjQzX21hY19lbmFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKIAorCitzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dDsKK2ludCBiNDNfZG9fcmVxdWVzdF9mdyhzdHJ1Y3QgYjQzX3JlcXVlc3RfZndfY29udGV4dCAqY3R4LAorCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgICBzdHJ1Y3QgYjQzX2Zpcm13YXJlX2ZpbGUgKmZ3KTsKK3ZvaWQgYjQzX2RvX3JlbGVhc2VfZncoc3RydWN0IGI0M19maXJtd2FyZV9maWxlICpmdyk7CisKICNlbmRpZiAvKiBCNDNfTUFJTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwppbmRleCA3ZmU5ZDE3Li5jODM2YzA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2EuYwpAQCAtMTIxLDI3ICsxMjEsMTggQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNywgKHI4IDw8IDQpIHwgcjgpOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDIwLCAocjggPDwgNCkgfCByOCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMjEsIChyOCA8PCA0KSB8IHI4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyMiwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMjIpCi0JCQkJCSYgMHgwMDBGKSB8IChyOCA8PCA0KSk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwMjIsIDB4MDAwRiwgKHI4IDw8IDQpKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyQSwgKHI4IDw8IDQpKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAyQiwgKHI4IDw8IDQpKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwOCwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDgpCi0JCQkJCSYgMHgwMEYwKSB8IChyOCA8PCA0KSk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMjksIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDI5KQotCQkJCQkmIDB4RkYwRikgfCAweDAwQjApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDA4LCAweDAwRjAsIChyOCA8PCA0KSk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwMjksIDB4RkYwRiwgMHgwMEIwKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNSwgMHgwMEFBKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNiwgMHgwMDg1KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzQSwgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwM0EpCi0JCQkJCSYgMHhGRjIwKSB8Ci0JCQkgIGZyZXFfcjNBX3ZhbHVlKGZyZXEpKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzRCwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzRCkgJiAweDAwRkYpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDgxLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkKLQkJCQkJJiAweEZGN0YpIHwgMHgwMDgwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAzNSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzNSkgJiAweEZGRUYpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDM1LCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAzNSkKLQkJCQkJJiAweEZGRUYpIHwgMHgwMDEwKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDAzQSwgMHhGRjIwLCBmcmVxX3IzQV92YWx1ZShmcmVxKSk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwM0QsIDB4MDBGRik7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwODEsIDB4RkY3RiwgMHgwMDgwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDAzNSwgMHhGRkVGKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDAzNSwgMHhGRkVGLCAweDAwMTApOwogCWI0M19yYWRpb19zZXRfdHhfaXEoZGV2KTsKIAkvL1RPRE86IFRTU0kyZGJtIHdvcmthcm91bmQKIC8vRklYTUUJYjQzX3BoeV94bWl0cG93ZXIoZGV2KTsKQEAgLTE2MCwyMyArMTUxLDIwIEBACiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODIsIDB4MDA4MCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODAsIDB4MDAwMCk7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwM0YsIDB4MDBEQSk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDUpICYgfjB4MDAwOCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAxMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAyMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwODEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDAyMCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwMDUsIH4weDAwMDgpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDgxLCB+MHgwMDEwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA4MSwgfjB4MDAyMCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwODEsIH4weDAwMjApOwogCW1zbGVlcCgxKTsJCS8qIGRlbGF5IDQwMHVzZWMgKi8KIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDgxLAotCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDIwKSB8IDB4MDAxMCk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwODEsIH4weDAwMjAsIDB4MDAxMCk7CiAJbXNsZWVwKDEpOwkJLyogZGVsYXkgNDAwdXNlYyAqLwogCi0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsCi0JCQkgIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDA1KSAmIH4weDAwMDgpIHwgMHgwMDA4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4NSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4NSkgJiB+MHgwMDEwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAwNSkgJiB+MHgwMDA4KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDQwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA4MSwKLQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwODEpICYgfjB4MDA0MCkgfCAweDAwNDApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDA1LCB+MHgwMDA4LCAweDAwMDgpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDg1LCB+MHgwMDEwKTsKKwliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDAwNSwgfjB4MDAwOCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwODEsIH4weDAwNDApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDgxLCB+MHgwMDQwLCAweDAwNDApOwogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA1LAogCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA4MSkgJiB+MHgwMDA4KSB8IDB4MDAwOCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA2MywgMHhEREM2KTsKQEAgLTIyNCwyMiArMjEyLDE2IEBACiAJdTE2IGIsIGN1cnJfcywgYmVzdF9zID0gMHhGRkZGOwogCWludCBpOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSAmIH5CNDNfUEhZX0NSUzBfRU4pOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgxQiksCi0JCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgfCAweDEwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4MiksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MikpICYgMHhGMEZGKSB8IDB4MDMwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDksCi0JCWI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMDkpIHwgMHgwMDgwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAxMiwKLQkJKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwMTIpICYgMHhGRkZDKSB8IDB4MDAwMik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9DUlMwLCB+QjQzX1BIWV9DUlMwX0VOKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwgMHgxMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MiksIDB4RjBGRiwgMHgwMzAwKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDA5LCAweDAwODApOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHgwMDEyLCAweEZGRkMsIDB4MDAwMik7CiAJYjQzX3dhX2luaXRnYWlucyhkZXYpOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhCQSksIDB4M0VENSk7CiAJYiA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUFdSRE9XTik7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUFdSRE9XTiwgKGIgJiAweEZGRjgpIHwgMHgwMDA1KTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNCwKLQkJYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDAwNCkgfCAweDAwMDQpOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwMDQsIDB4MDAwNCk7CiAJZm9yIChpID0gMHgxMDsgaSA8PSAweDIwOyBpKyspIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMTMsIGkpOwogCQljdXJyX3MgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09UQUJMRVEpICYgMHgwMEZGOwpAQCAtMjUyLDggKzIzNCw3IEBACiAJCQliZXN0X3MgPSBjdXJyX3M7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BXUkRPV04sIGIpOwotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA0LAotCQliNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDA0KSAmIDB4RkZGQik7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwMDQsIDB4RkZGQik7CiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMTMsIGJlc3Rfcyk7CiAJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzFfUjEsIDAsIDB4RkZFQyk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEI3KSwgMHgxRTgwKTsKQEAgLTI2MSwxNCArMjQyLDEwIEBACiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEI1KSwgMHgwRUMwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QjIpLCAweDAwQzApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhCOSksIDB4MUZGRik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweEJCKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweEJCKSkgJiAweEYwMDApIHwgMHgwMDUzKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNNjEsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE02MSkgJiAweEZFMUYpIHwgMHgwMTIwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MTMpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MTMpKSAmIDB4MEZGRikgfCAweDMwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCksCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCkpICYgMHgwRkZGKSB8IDB4MzAwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4QkIpLCAweEYwMDAsIDB4MDA1Myk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNNjEsIDB4RkUxRiwgMHgwMTIwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxMyksIDB4MEZGRiwgMHgzMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxNCksIDB4MEZGRiwgMHgzMDAwKTsKIAliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMSwgNiwgMHgwMDE3KTsKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMSwgaSwgMHgwMDBGKTsKQEAgLTI3Niw4ICsyNTMsNyBAQAogCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MxLCAweDBFLCAweDAwMTEpOwogCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MxLCAweDBGLCAweDAwMTMpOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHgzMyksIDB4NTAzMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSB8IEI0M19QSFlfQ1JTMF9FTik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NSUzAsIEI0M19QSFlfQ1JTMF9FTik7CiB9CiAKIHN0YXRpYyB2b2lkIGhhcmR3YXJlX3BjdGxfaW5pdF9hcGh5KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTMwMCwyNiArMjc2LDIxIEBACiAKIAlpZiAocGh5LT5yZXYgPj0gNikgewogCQlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0EpCi0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLAotCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgJiB+MHgxMDAwKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwgfjB4MTAwMCk7CiAJCWlmIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VOQ09SRSkgJiBCNDNfUEhZX0VOQ09SRV9FTikKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VOQ09SRSwKLQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VOQ09SRSkgfCAweDAwMTApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0VOQ09SRSwgMHgwMDEwKTsKIAkJZWxzZQotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfRU5DT1JFLAotCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfRU5DT1JFKSAmIH4weDEwMTApOworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9FTkNPUkUsIH4weDEwMTApOwogCX0KIAogCWI0M193YV9hbGwoZGV2KTsKIAogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfQSkgewogCQlpZiAocGh5LT5nbW9kZSAmJiAocGh5LT5yZXYgPCAzKSkKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzQsCi0JCQkJYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM0KSB8IDB4MDAwMSk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDAzNCwgMHgwMDAxKTsKIAkJYjQzX3BoeV9yc3NpYWdjKGRldiwgMCk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwKLQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkgfCBCNDNfUEhZX0NSUzBfRU4pOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQ1JTMCwgQjQzX1BIWV9DUlMwX0VOKTsKIAogCQliNDNfcmFkaW9faW5pdDIwNjAoZGV2KTsKIApAQCAtMzM5LDkgKzMxMCw3IEBACiAKIAlpZiAoKHBoeS0+dHlwZSA9PSBCNDNfUEhZVFlQRV9HKSAmJgogCSAgICAoZGV2LT5kZXYtPmJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfUEFDVFJMKSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4NkUpLAotCQkJCSAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDZFKSkKLQkJCQkgICAmIDB4RTAwMCkgfCAweDNDRik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDZFKSwgMHhFMDAwLCAweDNDRik7CiAJfQogfQogCkBAIC01MjAsMTQgKzQ4OSwxNCBAQAogCQkJcmV0dXJuOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNCwgMHgwMEMwKTsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwMDUsIDB4MDAwOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTAsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxMCkgJiAweEZGRjcpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDExLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTEpICYgMHhGRkY3KTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDEwLCAweEZGRjcpOworCQliNDNfcGh5X21hc2soZGV2LCAweDAwMTEsIDB4RkZGNyk7CiAJCWI0M19yYWRpb19pbml0MjA2MChkZXYpOwogCX0gZWxzZSB7CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDA0LCAweDAwRkYpOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwNSwgMHgwMEZCKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxMCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDEwKSB8IDB4MDAwOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTEsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxMSkgfCAweDAwMDgpOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAxMCwgMHgwMDA4KTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwMTEsIDB4MDAwOCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfZy5jCmluZGV4IGNhYWM0YTQ1Li5lN2I5OGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2cuYwpAQCAtMjA0LDEzICsyMDQsOSBAQAogCQkJCQkJICYgMHhGRkYwKSB8CiAJCQkgICAgYmFzZWJhbmRfYXR0ZW51YXRpb24pOwogCX0gZWxzZSBpZiAocGh5LT5hbmFsb2cgPiAxKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RBQ0NUTCwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RBQ0NUTCkKLQkJCSAgICAgICAmIDB4RkZDMykgfCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMikpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0RBQ0NUTCwgMHhGRkMzLCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMikpOwogCX0gZWxzZSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RBQ0NUTCwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RBQ0NUTCkKLQkJCSAgICAgICAmIDB4RkY4NykgfCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMykpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0RBQ0NUTCwgMHhGRjg3LCAoYmFzZWJhbmRfYXR0ZW51YXRpb24gPDwgMykpOwogCX0KIH0KIApAQCAtMjUyLDE3ICsyNDgsMTMgQEAKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLAogCQkJCSAgKHJmICYgMHgwMDBGKSB8ICh0eF9jb250cm9sICYgMHgwMDcwKSk7CiAJfSBlbHNlIHsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NDMpCi0JCQkJCSAgICAgICYgMHhGRkYwKSB8IChyZiAmIDB4MDAwRikpOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgICAgJiB+MHgwMDcwKSB8ICh0eF9jb250cm9sICYKLQkJCQkJCQkgICAgMHgwMDcwKSk7CisJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg0MywgMHhGRkYwLCAocmYgJiAweDAwMEYpKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCB+MHgwMDcwLCAodHhfY29udHJvbCAmIDB4MDA3MCkpOwogCX0KIAlpZiAoaGFzX3R4X21hZ25pZmljYXRpb24ocGh5KSkgewogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIHR4X21hZ24gfCB0eF9iaWFzKTsKIAl9IGVsc2UgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg1MikKLQkJCQkJICAgICAgJiAweEZGRjApIHwgKHR4X2JpYXMgJiAweDAwMEYpKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGRjAsICh0eF9iaWFzICYgMHgwMDBGKSk7CiAJfQogCWI0M19sb19nX2FkanVzdChkZXYpOwogfQpAQCAtMzM3LDEyICszMjksOSBAQAogCiAJaWYgKHRoaXJkICE9IC0xKSB7CiAJCXRtcCA9ICgodTE2KSB0aGlyZCA8PCAxNCkgfCAoKHUxNikgdGhpcmQgPDwgNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTAsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QkZCRikgfCB0bXApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkgJiAweEJGQkYpIHwgdG1wKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpICYgMHhCRkJGKSB8IHRtcCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMCwgMHhCRkJGLCB0bXApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4QkZCRiwgdG1wKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEyLCAweEJGQkYsIHRtcCk7CiAJfQogCWI0M19kdW1teV90cmFuc21pc3Npb24oZGV2KTsKIH0KQEAgLTM3MywxMiArMzYyLDkgQEAKIAlmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgdGFibGUsIGksIGkgLSBzdGFydCk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QkZCRikgfCAweDQwNDApOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTEsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTEpICYgMHhCRkJGKSB8IDB4NDA0MCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMikgJiAweEJGQkYpIHwgMHg0MDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTAsIDB4QkZCRiwgMHg0MDQwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4QkZCRiwgMHg0MDQwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4QkZCRiwgMHg0MDAwKTsKIAliNDNfZHVtbXlfdHJhbnNtaXNzaW9uKGRldik7CiB9CiAKQEAgLTQ1NCwxMyArNDQwLDExIEBACiAJYmFja3VwWzEwXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpOwogCWJhY2t1cFsxMV0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDQzKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MjksIGI0M19waHlfcmVhZChkZXYsIDB4MDQyOSkgJiAweDdGRkYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMDEsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMDEpICYgMHgzRkZGKSB8IDB4NDAwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSB8IDB4MDAwQyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDgxMikgJiAweEZGRjMpIHwgMHgwMDA0KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgfigweDEgfCAweDIpKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0MjksIDB4N0ZGRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDAxLCAweDNGRkYsIDB4NDAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTEsIDB4MDAwQyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwODEyLCAweEZGRjMsIDB4MDAwNCk7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAyLCB+KDB4MSB8IDB4MikpOwogCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCWJhY2t1cFsxMl0gPSBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMkUpOwogCQliYWNrdXBbMTNdID0gYjQzX3BoeV9yZWFkKGRldiwgMHgwMDJGKTsKQEAgLTQ3NSwxMyArNDU5LDEzIEBACiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkYsIDApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODBGLCAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMCwgMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0NzgsIGI0M19waHlfcmVhZChkZXYsIDB4MDQ3OCkgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDEpIHwgMHgwMDQwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA2MCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDYwKSB8IDB4MDA0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTQsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxNCkgfCAweDAyMDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDQ3OCwgMHgwMTAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDEsIDB4MDA0MCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDYwLCAweDAwNDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAxNCwgMHgwMjAwKTsKIAl9Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDcwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgfCAweDAwODApOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDA3MCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDgwKTsKIAl1ZGVsYXkoMzApOwogCiAJdjQ3RiA9IChzMTYpICgoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdGKSA+PiA4KSAmIDB4MDAzRik7CkBAIC01MDEsNDAgKzQ4NSwzMSBAQAogCQlpZiAoc2F2ZWQgPT0gMHhGRkZGKQogCQkJc2F2ZWQgPSA0OwogCX0gZWxzZSB7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgJiAweDAwN0YpOworCQliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA3QSwgMHgwMDdGKTsKIAkJaWYgKHBoeS0+cmV2ICE9IDEpIHsJLyogTm90IGluIHNwZWNzLCBidXQgbmVlZGVkIHRvIHByZXZlbnQgUFBDIG1hY2hpbmUgY2hlY2sgKi8KLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTQsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODE0KSB8IDB4MDAwMSk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODE1LAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgxNSkgJiAweEZGRkUpOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTQsIDB4MDAwMSk7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA4MTUsIDB4RkZGRSk7CiAJCX0KLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSB8IDB4MDAwQyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgxMikgfCAweDAwMEMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODExLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTEpIHwgMHgwMDMwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODEyKSB8IDB4MDAzMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODExLCAweDAwMEMpOworCQliNDNfcGh5X3NldChkZXYsIDB4MDgxMiwgMHgwMDBDKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MTEsIDB4MDAzMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwODEyLCAweDAwMzApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVBLCAweDA0ODApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU5LCAweDA4MTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU4LCAweDAwMEQpOwogCQlpZiAocGh5LT5yZXYgPT0gMCkgewogCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMywgMHgwMTIyKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMEEsIGI0M19waHlfcmVhZChkZXYsIDB4MDAwQSkKLQkJCQkgICAgICB8IDB4MjAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDAwQSwgMHgyMDAwKTsKIAkJfQogCQlpZiAocGh5LT5yZXYgIT0gMSkgewkvKiBOb3QgaW4gc3BlY3MsIGJ1dCBuZWVkZWQgdG8gcHJldmVudCBQUEMgbWFjaGluZSBjaGVjayAqLwotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxNCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTQpIHwgMHgwMDA0KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTUsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODE1KSAmIDB4RkZGQik7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDgxNCwgMHgwMDA0KTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDgxNSwgMHhGRkZCKTsKIAkJfQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDAzLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDAzKSAmIDB4RkY5RikKLQkJCSAgICAgIHwgMHgwMDQwKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDAwRik7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMywgMHhGRjlGLCAweDAwNDApOworCQliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDdBLCAweDAwMEYpOwogCQliNDNfc2V0X2FsbF9nYWlucyhkZXYsIDMsIDAsIDEpOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwNDMpCi0JCQkJCQkmIDB4MDBGMCkgfCAweDAwMEYpOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDA0MywgMHgwMEYwLCAweDAwMEYpOwogCQl1ZGVsYXkoMzApOwogCQl2NDdGID0gKHMxNikgKChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0YpID4+IDgpICYgMHgwMDNGKTsKIAkJaWYgKHY0N0YgPj0gMHgyMCkKQEAgLTU3Niw3ICs1NTEsNyBAQAogCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDQzLCBiYWNrdXBbMTFdKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYmFja3VwWzEwXSk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgwMiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAyKSB8IDB4MSB8IDB4Mik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyOSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDI5KSB8IDB4ODAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0MjksIDB4ODAwMCk7CiAJYjQzX3NldF9vcmlnaW5hbF9nYWlucyhkZXYpOwogCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsIGJhY2t1cFsxNl0pOwpAQCAtNjA0LDkgKzU3OSw4IEBACiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpCiAJCWI0M19jYWxjX25yc3NpX29mZnNldChkZXYpOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfR19DUlMpICYgMHg3RkZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgMHhGRkZDKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDdGRkYpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDgwMiwgMHhGRkZDKTsKIAliYWNrdXBbN10gPSBiNDNfcmVhZDE2KGRldiwgMHgwM0UyKTsKIAliNDNfd3JpdGUxNihkZXYsIDB4MDNFMiwgYjQzX3JlYWQxNihkZXYsIDB4MDNFMikgfCAweDgwMDApOwogCWJhY2t1cFswXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpOwpAQCAtNjMzLDY2ICs2MDcsNDQgQEAKIAkJY2FzZSA0OgogCQljYXNlIDY6CiAJCWNhc2UgNzoKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0NzgsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDc4KQotCQkJCSAgICAgIHwgMHgwMTAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODAxKQotCQkJCSAgICAgIHwgMHgwMDQwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwNDc4LCAweDAxMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDEsIDB4MDA0MCk7CiAJCQlicmVhazsKIAkJY2FzZSAzOgogCQljYXNlIDU6Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMSkKLQkJCQkgICAgICAmIDB4RkZCRik7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA4MDEsIDB4RkZCRik7CiAJCQlicmVhazsKIAkJfQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDYwLCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNjApCi0JCQkgICAgICB8IDB4MDA0MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTQsIGI0M19waHlfcmVhZChkZXYsIDB4MDAxNCkKLQkJCSAgICAgIHwgMHgwMjAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwNjAsIDB4MDA0MCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDE0LCAweDAyMDApOwogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgfCAweDAwNzApOworCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDA3MCk7CiAJYjQzX3NldF9hbGxfZ2FpbnMoZGV2LCAwLCA4LCAwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkgJiAweDAwRjcpOworCWI0M19yYWRpb19tYXNrKGRldiwgMHgwMDdBLCAweDAwRjcpOwogCWlmIChwaHktPnJldiA+PSAyKSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTEsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwODExKSAmIDB4RkZDRikgfAotCQkJICAgICAgMHgwMDMwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTIpICYgMHhGRkNGKSB8Ci0JCQkgICAgICAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MTEsIDB4RkZDRiwgMHgwMDMwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwODEyLCAweEZGQ0YsIDB4MDAxMCk7CiAJfQotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDA4MCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDgwKTsKIAl1ZGVsYXkoMjApOwogCiAJbnJzc2kwID0gKHMxNikgKChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0YpID4+IDgpICYgMHgwMDNGKTsKIAlpZiAobnJzc2kwID49IDB4MDAyMCkKIAkJbnJzc2kwIC09IDB4MDA0MDsKIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLAotCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSAmIDB4MDA3Rik7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDAwN0EsIDB4MDA3Rik7CiAJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMywgKGI0M19waHlfcmVhZChkZXYsIDB4MDAwMykKLQkJCQkJICAgICYgMHhGRjlGKSB8IDB4MDA0MCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMywgMHhGRjlGLCAweDAwNDApOwogCX0KIAogCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTF9FWFQsCiAJCSAgICBiNDNfcmVhZDE2KGRldiwgQjQzX01NSU9fQ0hBTk5FTF9FWFQpCiAJCSAgICB8IDB4MjAwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDBGKTsKKwliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDdBLCAweDAwMEYpOwogCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMTUsIDB4RjMzMCk7CiAJaWYgKHBoeS0+cmV2ID49IDIpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDgxMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTIpICYgMHhGRkNGKSB8Ci0JCQkgICAgICAweDAwMjApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDgxMSkgJiAweEZGQ0YpIHwKLQkJCSAgICAgIDB4MDAyMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDgxMiwgMHhGRkNGLCAweDAwMjApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MTEsIDB4RkZDRiwgMHgwMDIwKTsKIAl9CiAKIAliNDNfc2V0X2FsbF9nYWlucyhkZXYsIDMsIDAsIDEpOwpAQCAtNzI2LDEwICs2NzgsOCBAQAogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0xPX0NPTlRST0wsIGJhY2t1cFsxM10pOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gMikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODEyLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgMHgwODEyKSAmIDB4RkZDRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MTEsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MTEpICYgMHhGRkNGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwODEyLCAweEZGQ0YpOworCQliNDNfcGh5X21hc2soZGV2LCAweDA4MTEsIDB4RkZDRik7CiAJfQogCiAJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsIGJhY2t1cFswXSk7CkBAIC03NDMsMTEgKzY5Myw5IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA1OSwgYmFja3VwWzVdKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDU4LCBiYWNrdXBbNl0pOwogCWI0M19zeW50aF9wdV93b3JrYXJvdW5kKGRldiwgcGh5LT5jaGFubmVsKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAyLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpIHwgKDB4MDAwMSB8IDB4MDAwMikpOworCWI0M19waHlfc2V0KGRldiwgMHgwODAyLCAoMHgwMDAxIHwgMHgwMDAyKSk7CiAJYjQzX3NldF9vcmlnaW5hbF9nYWlucyhkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSB8IDB4ODAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDgwMDApOwogCWlmIChwaHktPnJldiA+PSAzKSB7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDEsIGJhY2t1cFsxNF0pOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDYwLCBiYWNrdXBbMTVdKTsKQEAgLTc3NCwxMyArNzIyLDkgQEAKIAkJaWYgKHRtcDE2ID49IDB4MjApCiAJCQl0bXAxNiAtPSAweDQwOwogCQlpZiAodG1wMTYgPCAzKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEEpCi0JCQkJICAgICAgICYgMHhGMDAwKSB8IDB4MDlFQik7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0OEEsIDB4RjAwMCwgMHgwOUVCKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEEsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDQ4QSkKLQkJCQkgICAgICAgJiAweEYwMDApIHwgMHgwQUVEKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQ4QSwgMHhGMDAwLCAweDBBRUQpOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGdwaHktPmludGVyZm1vZGUgPT0gQjQzX0lOVEVSRk1PREVfTk9OV0xBTikgewpAQCAtODIzLDcgKzc2Nyw3IEBACiAgKiBpbnRlcmZlcmVuY2UgbWl0aWdhdGlvbiBjb2RlLgogICogSXQgaXMgc2F2ZSB0byByZXN0b3JlIHZhbHVlcyBpbiByYW5kb20gb3JkZXIuCiAgKi8KLXN0YXRpYyB2b2lkIF9zdGFja19zYXZlKHUzMiAqIF9zdGFja3B0ciwgc2l6ZV90ICogc3RhY2tpZHgsCitzdGF0aWMgdm9pZCBfc3RhY2tfc2F2ZSh1MzIgKl9zdGFja3B0ciwgc2l6ZV90ICpzdGFja2lkeCwKIAkJCXU4IGlkLCB1MTYgb2Zmc2V0LCB1MTYgdmFsdWUpCiB7CiAJdTMyICpzdGFja3B0ciA9ICYoX3N0YWNrcHRyWypzdGFja2lkeF0pOwpAQCAtODM3LDcgKzc4MSw3IEBACiAJQjQzX1dBUk5fT04oKnN0YWNraWR4ID49IEI0M19JTlRFUkZTVEFDS19TSVpFKTsKIH0KIAotc3RhdGljIHUxNiBfc3RhY2tfcmVzdG9yZSh1MzIgKiBzdGFja3B0ciwgdTggaWQsIHUxNiBvZmZzZXQpCitzdGF0aWMgdTE2IF9zdGFja19yZXN0b3JlKHUzMiAqc3RhY2twdHIsIHU4IGlkLCB1MTYgb2Zmc2V0KQogewogCXNpemVfdCBpOwogCkBAIC05MDEsMTEgKzg0NSw4IEBACiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBCNDNfSU5URVJGTU9ERV9OT05XTEFOOgogCQlpZiAocGh5LT5yZXYgIT0gMSkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyQiwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCQkgICBCNDNfUEhZX0dfQ1JTKSAmIH4weDQwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCAweDA0MkIsIDB4MDgwMCk7CisJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0dfQ1JTLCB+MHg0MDAwKTsKIAkJCWJyZWFrOwogCQl9CiAJCXJhZGlvX3N0YWNrc2F2ZSgweDAwNzgpOwpAQCAtOTI0LDI2ICs4NjUsMTkgQEAKIAkJcGh5X3N0YWNrc2F2ZSgweDA0MDYpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDA2LCAweDdFMjgpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MkIsIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgfCAweDA4MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCSAgIEI0M19QSFlfUkFESU9fQklURklFTEQpIHwgMHgxMDAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA0MkIsIDB4MDgwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgMHgxMDAwKTsKIAogCQlwaHlfc3RhY2tzYXZlKDB4MDRBMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTAsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKSAmIDB4QzBDMCkgfCAweDAwMDgpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTAsIDB4QzBDMCwgMHgwMDA4KTsKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QTEpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEExLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkgJiAweEMwQzApIHwgMHgwNjA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEExLCAweEMwQzAsIDB4MDYwNSk7CiAJCXBoeV9zdGFja3NhdmUoMHgwNEEyKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpICYgMHhDMEMwKSB8IDB4MDIwNCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMiwgMHhDMEMwLCAweDAyMDQpOwogCQlwaHlfc3RhY2tzYXZlKDB4MDRBOCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTgsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KSAmIDB4QzBDMCkgfCAweDA4MDMpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTgsIDB4QzBDMCwgMHgwODAzKTsKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QUIpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFCLAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBQikgJiAweEMwQzApIHwgMHgwNjA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFCLCAweEMwQzAsIDB4MDYwNSk7CiAKIAkJcGh5X3N0YWNrc2F2ZSgweDA0QTcpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE3LCAweDAwMDIpOwpAQCAtOTk5LDEyICs5MzMsOCBAQAogCQlwaHlfc3RhY2tzYXZlKDB4MDQyQik7CiAJCXBoeV9zdGFja3NhdmUoMHgwNDhDKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQpCi0JCQkgICAgICAmIH4weDEwMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9HX0NSUywKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKQotCQkJICAgICAgICYgMHhGRkZDKSB8IDB4MDAwMik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsIH4weDEwMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweEZGRkMsIDB4MDAwMik7CiAKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzMywgMHgwODAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMywgMHgyMDI3KTsKQEAgLTEwMTMsOCArOTQzLDcgQEAKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQSwgMHgxQ0E4KTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQywgMHgyODdBKTsKIAotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKQotCQkJCQkgICAgJiAweEZGQzApIHwgMHgwMDFBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEZGQzAsIDB4MDAxQSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTcsIDB4MDAwRCk7CiAKIAkJaWYgKHBoeS0+cmV2IDwgMikgewpAQCAtMTAyNyw2NSArOTU2LDQxIEBACiAJCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEMxLCAweDAwNTkpOwogCQl9CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMSwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMSkKLQkJCQkJICAgICYgMHhDMEZGKSB8IDB4MTgwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTEsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTEpCi0JCQkJCSAgICAmIDB4RkZDMCkgfCAweDAwMTUpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KQotCQkJCQkgICAgJiAweENGRkYpIHwgMHgxMDAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBOCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBOCkKLQkJCQkJICAgICYgMHhGMEZGKSB8IDB4MEEwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUIpCi0JCQkJCSAgICAmIDB4Q0ZGRikgfCAweDEwMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEFCLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFCKQotCQkJCQkgICAgJiAweEYwRkYpIHwgMHgwODAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBQiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBQikKLQkJCQkJICAgICYgMHhGRkNGKSB8IDB4MDAxMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUIpCi0JCQkJCSAgICAmIDB4RkZGMCkgfCAweDAwMDUpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEE4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEE4KQotCQkJCQkgICAgJiAweEZGQ0YpIHwgMHgwMDEwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBOCwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBOCkKLQkJCQkJICAgICYgMHhGRkYwKSB8IDB4MDAwNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QTIsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QTIpCi0JCQkJCSAgICAmIDB4RjBGRikgfCAweDA4MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNEEwLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNEEwKQotCQkJCQkgICAgJiAweEYwRkYpIHwgMHgwNTAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBMiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDRBMikKLQkJCQkJICAgICYgMHhGRkYwKSB8IDB4MDAwQik7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMSwgMHhDMEZGLCAweDE4MDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTEsIDB4RkZDMCwgMHgwMDE1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEE4LCAweENGRkYsIDB4MTAwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBOCwgMHhGMEZGLCAweDBBMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QUIsIDB4Q0ZGRiwgMHgxMDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFCLCAweEYwRkYsIDB4MDgwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBQiwgMHhGRkNGLCAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QUIsIDB4RkZGMCwgMHgwMDA1KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEE4LCAweEZGQ0YsIDB4MDAxMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBOCwgMHhGRkYwLCAweDAwMDYpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0QTIsIDB4RjBGRiwgMHgwODAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEEwLCAweEYwRkYsIDB4MDUwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBMiwgMHhGRkYwLCAweDAwMEIpOwogCiAJCWlmIChwaHktPnJldiA+PSAzKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEEpCi0JCQkJICAgICAgJiB+MHg4MDAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTUpCi0JCQkJCQkgICAgJiAweDgwMDApIHwgMHgzNkQ4KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTYsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTYpCi0JCQkJCQkgICAgJiAweDgwMDApIHwgMHgzNkQ4KTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MTcsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0MTcpCi0JCQkJCQkgICAgJiAweEZFMDApIHwgMHgwMTZEKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDQ4QSwgKHUxNil+MHg4MDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQxNSwgMHg4MDAwLCAweDM2RDgpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDE2LCAweDgwMDAsIDB4MzZEOCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0MTcsIDB4RkUwMCwgMHgwMTZEKTsKIAkJfSBlbHNlIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEEsIGI0M19waHlfcmVhZChkZXYsIDB4MDQ4QSkKLQkJCQkgICAgICB8IDB4MTAwMCk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDhBLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDhBKQotCQkJCQkJICAgICYgMHg5RkZGKSB8IDB4MjAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIDB4MDQ4QSwgMHgxMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDQ4QSwgMHg5RkZGLCAweDIwMDApOwogCQkJYjQzX2hmX3dyaXRlKGRldiwgYjQzX2hmX3JlYWQoZGV2KSB8IEI0M19IRl9BQ0lXKTsKIAkJfQogCQlpZiAocGh5LT5yZXYgPj0gMikgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDQyQiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDJCKQotCQkJCSAgICAgIHwgMHgwODAwKTsKKwkJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDA4MDApOwogCQl9Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0OEMsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0OEMpCi0JCQkJCSAgICAmIDB4RjBGRikgfCAweDAyMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0OEMsIDB4RjBGRiwgMHgwMjAwKTsKIAkJaWYgKHBoeS0+cmV2ID09IDIpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUUpCi0JCQkJCQkgICAgJiAweEZGMDApIHwgMHgwMDdGKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCAweDA0QUQsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0QUQpCi0JCQkJCQkgICAgJiAweDAwRkYpIHwgMHgxMzAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDRBRSwgMHhGRjAwLCAweDAwN0YpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNEFELCAweDAwRkYsIDB4MTMwMCk7CiAJCX0gZWxzZSBpZiAocGh5LT5yZXYgPj0gNikgewogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIDB4MUEwMCwgMHgzLCAweDAwN0YpOwogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIDB4MUEwMCwgMHgyLCAweDAwN0YpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDRBRCwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNEFEKQotCQkJCSAgICAgICYgMHgwMEZGKTsKKwkJCWI0M19waHlfbWFzayhkZXYsIDB4MDRBRCwgMHgwMEZGKTsKIAkJfQogCQliNDNfY2FsY19ucnNzaV9zbG9wZShkZXYpOwogCQlicmVhazsKQEAgLTExMDQsMjQgKzEwMDksMTggQEAKIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIEI0M19JTlRFUkZNT0RFX05PTldMQU46CiAJCWlmIChwaHktPnJldiAhPSAxKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgJiB+MHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCQkgICBCNDNfUEhZX0dfQ1JTKSB8IDB4NDAwMCk7CisJCQliNDNfcGh5X21hc2soZGV2LCAweDA0MkIsIH4weDA4MDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDQwMDApOwogCQkJYnJlYWs7CiAJCX0KIAkJcmFkaW9fc3RhY2tyZXN0b3JlKDB4MDA3OCk7CiAJCWI0M19jYWxjX25yc3NpX3RocmVzaG9sZChkZXYpOwogCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDQwNik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0MkIsIGI0M19waHlfcmVhZChkZXYsIDB4MDQyQikgJiB+MHgwODAwKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwNDJCLCB+MHgwODAwKTsKIAkJaWYgKCFkZXYtPmJhZF9mcmFtZXNfcHJlZW1wdCkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsCi0JCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCkKLQkJCQkgICAgICAmIH4oMSA8PCAxMSkpOworCQkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgfigxIDw8IDExKSk7CiAJCX0KLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSB8IDB4NDAwMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9HX0NSUywgMHg0MDAwKTsKIAkJcGh5X3N0YWNrcmVzdG9yZSgweDA0QTApOwogCQlwaHlfc3RhY2tyZXN0b3JlKDB4MDRBMSk7CiAJCXBoeV9zdGFja3Jlc3RvcmUoMHgwNEEyKTsKQEAgLTEzODksMTcgKzEyODgsMTAgQEAKIAkJc2F2LnBoeV9jcnMwID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKTsKIAkJc2F2LnBoeV9jbGFzc2N0bCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0xBU1NDVEwpOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpCi0JCQkgICAgICB8IDB4MDAwMyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwpCi0JCQkgICAgICAmIDB4RkZGQyk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ1JTMCkKLQkJCSAgICAgICYgMHg3RkZGKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0xBU1NDVEwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NMQVNTQ1RMKQotCQkJICAgICAgJiAweEZGRkMpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDAzKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkMpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4N0ZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfQ0xBU1NDVEwsIDB4RkZGQyk7CiAJCWlmIChoYXNfbG9vcGJhY2tfZ2FpbihwaHkpKSB7CiAJCQlzYXYucGh5X2xvX21hc2sgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX01BU0spOwogCQkJc2F2LnBoeV9sb19jdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX0NUTCk7CkBAIC0xNDIwLDggKzEzMTIsNyBAQAogCWI0M193cml0ZTE2KGRldiwgMHgzRTIsIGI0M19yZWFkMTYoZGV2LCAweDNFMikgfCAweDgwMDApOwogCiAJc2F2LnBoeV9zeW5jY3RsID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9TWU5DQ1RMKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9TWU5DQ1RMLCBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1NZTkNDVEwpCi0JCSAgICAgICYgMHhGRjdGKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX1NZTkNDVEwsIDB4RkY3Rik7CiAJc2F2LnJlZ18zRTYgPSBiNDNfcmVhZDE2KGRldiwgMHgzRTYpOwogCXNhdi5yZWdfM0Y0ID0gYjQzX3JlYWQxNihkZXYsIDB4M0Y0KTsKIApAQCAtMTQyOSw5ICsxMzIwLDcgQEAKIAkJYjQzX3dyaXRlMTYoZGV2LCAweDAzRTYsIDB4MDEyMik7CiAJfSBlbHNlIHsKIAkJaWYgKHBoeS0+YW5hbG9nID49IDIpIHsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDAzKSwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgwMykpCi0JCQkJICAgICAgICYgMHhGRkJGKSB8IDB4NDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgwMyksIDB4RkZCRiwgMHg0MCk7CiAJCX0KIAkJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19DSEFOTkVMX0VYVCwKIAkJCSAgICAoYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX0NIQU5ORUxfRVhUKSB8IDB4MjAwMCkpOwpAQCAtMTQ1NCwxNCArMTM0MywxMiBAQAogCQkJCQkJICAgTFBEKDAsIDAsIDEpKSk7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHhCRkEwKTsKLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTEsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDUxKQotCQkJICB8IDB4MDAwNCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4NTEsIDB4MDAwNCk7CiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAweDFGKTsKIAl9IGVsc2UgewogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsIDApOwotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIChiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg0MykKLQkJCQkJICAgICAgJiAweEZGRjApIHwgMHgwMDA5KTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDQzLCAweEZGRjAsIDB4MDAwOSk7CiAJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDU4KSwgMCk7CiAKQEAgLTE2MTAsOCArMTQ5Nyw3IEBACiAJdTggb2xkX2NoYW5uZWw7CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gMSkgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkKLQkJCQkgIHwgMHgwMDUwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDUwKTsKIAl9CiAJaWYgKChidXMtPmJvYXJkaW5mby52ZW5kb3IgIT0gU1NCX0JPQVJEVkVORE9SX0JDTSkgJiYKIAkgICAgKGJ1cy0+Ym9hcmRpbmZvLnR5cGUgIT0gU1NCX0JPQVJEX0JVNDMwNikpIHsKQEAgLTE2MjEsMzkgKzE1MDcsMjkgQEAKIAkJCXZhbHVlICs9IDB4MjAyOwogCQl9CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMzUpICYgMHhGMEZGKQotCQkgICAgICB8IDB4MDcwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDM1LCAweEYwRkYsIDB4MDcwMCk7CiAJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCkKIAkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzOCwgMHgwNjY3KTsKIAogCWlmIChwaHktPmdtb2RlIHx8IHBoeS0+cmV2ID49IDIpIHsKIAkJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwN0EsCi0JCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3QSkKLQkJCQkJICB8IDB4MDAyMCk7Ci0JCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1MSwKLQkJCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDUxKQotCQkJCQkgIHwgMHgwMDA0KTsKKwkJCWI0M19yYWRpb19zZXQoZGV2LCAweDAwN0EsIDB4MDAyMCk7CisJCQliNDNfcmFkaW9fc2V0KGRldiwgMHgwMDUxLCAweDAwMDQpOwogCQl9CiAJCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fUEhZX1JBRElPLCAweDAwMDApOwogCi0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgyMDAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDIsIDB4MDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDIwMDApOwogCiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMUMsIDB4MTg2QSk7CiAKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxMywKLQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwMTMpICYgMHgwMEZGKSB8IDB4MTkwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzUsCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM1KSAmIDB4RkZDMCkgfCAweDAwNjQpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELAotCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIDB4MDA1RCkgJiAweEZGODApIHwgMHgwMDBBKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDEzLCAweDAwRkYsIDB4MTkwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAzNSwgMHhGRkMwLCAweDAwNjQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwNUQsIDB4RkY4MCwgMHgwMDBBKTsKIAl9CiAKIAlpZiAoZGV2LT5iYWRfZnJhbWVzX3ByZWVtcHQpIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkFESU9fQklURklFTEQsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgICBCNDNfUEhZX1JBRElPX0JJVEZJRUxEKSB8ICgxIDw8IDExKSk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SQURJT19CSVRGSUVMRCwgKDEgPDwgMTEpKTsKIAl9CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gMSkgewpAQCAtMTY5NSw3ICsxNTcxLDcgQEAKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1QiwgMHgwMDdCKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA1QywgMHgwMEIwKTsKIAotCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHgwMDdBLCBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDdBKSB8IDB4MDAwNyk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDA3KTsKIAogCWI0M19ncGh5X2NoYW5uZWxfc3dpdGNoKGRldiwgb2xkX2NoYW5uZWwsIDApOwogCkBAIC0xNzcxLDEyICsxNjQ3LDEwIEBACiAJCXZhbCArPSAweDAyMDI7CiAJfQogCWlmIChwaHktPnR5cGUgPT0gQjQzX1BIWVRZUEVfRykgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCQkgIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpIHwgMHgwMDIwKTsKLQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNTEsCi0JCQkJICBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDUxKSB8IDB4MDAwNCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgfCAweDAxMDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDJCLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0MkIpIHwgMHgyMDAwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA3QSwgMHgwMDIwKTsKKwkJYjQzX3JhZGlvX3NldChkZXYsIDB4MDA1MSwgMHgwMDA0KTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDA4MDIsIDB4MDEwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwNDJCLCAweDIwMDApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHg1QiwgMCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDVDLCAwKTsKIAl9CkBAIC0xODAxLDggKzE2NzUsNyBAQAogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NUIsIDB4N0IpOwogCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NUMsIDB4QjApOwogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDA3QSwKLQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwN0EpICYgMHgwMEY4KSB8IDB4MDAwNyk7CisJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDAwN0EsIDB4MDBGOCwgMHgwMDA3KTsKIAogCWI0M19ncGh5X2NoYW5uZWxfc3dpdGNoKGRldiwgb2xkX2NoYW5uZWwsIDApOwogCkBAIC0xODE0LDE5ICsxNjg3LDE2IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzOCwgMHgwNjY4KTsKIAliNDNfc2V0X3R4cG93ZXJfZyhkZXYsICZncGh5LT5iYmF0dCwgJmdwaHktPnJmYXR0LCBncGh5LT50eF9jb250cm9sKTsKIAlpZiAocGh5LT5yYWRpb19yZXYgPD0gNSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHg1RCwgKGI0M19waHlfcmVhZChkZXYsIDB4NUQpCi0JCQkJCSAgJiAweEZGODApIHwgMHgwMDAzKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHg1RCwgMHhGRjgwLCAweDAwMDMpOwogCX0KIAlpZiAocGh5LT5yYWRpb19yZXYgPD0gMikKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNUQsIDB4MDAwRCk7CiAKIAlpZiAocGh5LT5hbmFsb2cgPT0gNCkgewogCQliNDNfd3JpdGUxNihkZXYsIDB4M0U0LCA5KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4NjEsIGI0M19waHlfcmVhZChkZXYsIDB4NjEpCi0JCQkgICAgICAmIDB4MEZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIDB4NjEsIDB4MEZGRik7CiAJfSBlbHNlIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAwMiwgKGI0M19waHlfcmVhZChkZXYsIDB4MDAwMikgJiAweEZGQzApCi0JCQkgICAgICB8IDB4MDAwNCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDAwMiwgMHhGRkMwLCAweDAwMDQpOwogCX0KIAlpZiAocGh5LT50eXBlID09IEI0M19QSFlUWVBFX0IpCiAJCUI0M19XQVJOX09OKDEpOwpAQCAtMTg2OCw2MyArMTczOCwzOSBAQAogCWJhY2t1cF9yYWRpb1sxXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKTsKIAliYWNrdXBfcmFkaW9bMl0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg3QSk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlMwLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NSUzApICYgMHgzRkZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0tCQkFORENGRywKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0tCQkFORENGRykgfCAweDgwMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVIpIHwgMHgwMDAyKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKSAmIDB4RkZGRCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAwMDEpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwpICYgMHhGRkZFKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4M0ZGRik7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0NDS0JCQU5EQ0ZHLCAweDgwMDApOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVIsIDB4MDAwMik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4RkZGRCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUiwgMHgwMDAxKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHhGRkZFKTsKIAlpZiAocGh5LT5yZXYgIT0gMSkgewkvKiBOb3QgaW4gc3BlY3MsIGJ1dCBuZWVkZWQgdG8gcHJldmVudCBQUEMgbWFjaGluZSBjaGVjayAqLwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSKSB8IDB4MDAwMSk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LAotCQkJCQkgICBCNDNfUEhZX0FOQUxPR09WRVJWQUwpICYgMHhGRkZFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUikgfCAweDAwMDIpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwKLQkJCQkJICAgQjQzX1BIWV9BTkFMT0dPVkVSVkFMKSAmIDB4RkZGRCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLCAweDAwMDEpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsIDB4RkZGRSk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSLCAweDAwMDIpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0FOQUxPR09WRVJWQUwsIDB4RkZGRCk7CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUiwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVIpIHwgMHgwMDBDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKSB8IDB4MDAwQyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAwMzApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKQotCQkgICAgICAgJiAweEZGQ0YpIHwgMHgxMCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUiwgMHgwMDBDKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweDAwMEMpOworCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVIsIDB4MDAzMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4RkZDRiwgMHgxMCk7CiAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHg1QSksIDB4MDc4MCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4NTkpLCAweEM4MTApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDU4KSwgMHgwMDBEKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDBBKSwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgwQSkpIHwgMHgyMDAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQ0NLKDB4MEEpLCAweDIwMDApOwogCWlmIChwaHktPnJldiAhPSAxKSB7CS8qIE5vdCBpbiBzcGVjcywgYnV0IG5lZWRlZCB0byBwcmV2ZW50IFBQQyBtYWNoaW5lIGNoZWNrICovCi0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOQUxPR09WRVIpIHwgMHgwMDA0KTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCwKLQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsCi0JCQkJCSAgIEI0M19QSFlfQU5BTE9HT1ZFUlZBTCkgJiAweEZGRkIpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5BTE9HT1ZFUiwgMHgwMDA0KTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9BTkFMT0dPVkVSVkFMLCAweEZGRkIpOwogCX0KLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgwMyksCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDSygweDAzKSkKLQkJICAgICAgICYgMHhGRjlGKSB8IDB4NDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQ0NLKDB4MDMpLCAweEZGOUYsIDB4NDApOwogCiAJaWYgKHBoeS0+cmFkaW9fcmV2ID09IDgpIHsKIAkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDQzLCAweDAwMEYpOwogCX0gZWxzZSB7CiAJCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg1MiwgMCk7Ci0JCWI0M19yYWRpb193cml0ZTE2KGRldiwgMHg0MywgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDQzKQotCQkJCQkgICAgICAmIDB4RkZGMCkgfCAweDkpOworCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4NDMsIDB4RkZGMCwgMHg5KTsKIAl9CiAJYjQzX2dwaHlfc2V0X2Jhc2ViYW5kX2F0dGVudWF0aW9uKGRldiwgMTEpOwogCkBAIC0xOTM0LDQ1ICsxNzgwLDI4IEBACiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0xPX01BU0ssIDB4ODAyMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTE9fQ1RMLCAwKTsKIAotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NDSygweDJCKSwKLQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQ0NLKDB4MkIpKQotCQkgICAgICAgJiAweEZGQzApIHwgMHgwMSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ0NLKDB4MkIpLAotCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgyQikpCi0JCSAgICAgICAmIDB4QzBGRikgfCAweDgwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgyQiksIDB4RkZDMCwgMHgwMSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0soMHgyQiksIDB4QzBGRiwgMHg4MDApOwogCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUikgfCAweDAxMDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwpICYgMHhDRkZGKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSLCAweDAxMDApOworCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweENGRkYpOwogCiAJaWYgKGRldi0+ZGV2LT5idXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkgewogCQlpZiAocGh5LT5yZXYgPj0gNykgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSKQotCQkJCSAgICAgIHwgMHgwODAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCQkgICAgICB8IDB4ODAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUkZPVkVSLCAweDA4MDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHg4MDAwKTsKIAkJfQogCX0KLQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4N0EsIGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDdBKQotCQkJICAmIDB4MDBGNyk7CisJYjQzX3JhZGlvX21hc2soZGV2LCAweDdBLCAweDAwRjcpOwogCiAJaiA9IDA7CiAJbG9vcF9pX21heCA9IChwaHktPnJhZGlvX3JldiA9PSA4KSA/IDE1IDogOTsKIAlmb3IgKGkgPSAwOyBpIDwgbG9vcF9pX21heDsgaSsrKSB7CiAJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7CiAJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NDMsIGkpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUkZPVkVSVkFMLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCQkgICAgICAgJiAweEYwRkYpIHwgKGogPDwgOCkpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEdBQ1RMLAotCQkJCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1BHQUNUTCkKLQkJCQkgICAgICAgJiAweDBGRkYpIHwgMHhBMDAwKTsKLQkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX1BHQUNUTCwKLQkJCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1BHQUNUTCkKLQkJCQkgICAgICB8IDB4RjAwMCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCwgMHhGMEZGLCAoaiA8PCA4KSk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHgwRkZGLCAweEEwMDApOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX1BHQUNUTCwgMHhGMDAwKTsKIAkJCXVkZWxheSgyMCk7CiAJCQlpZiAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MT19MRUFLQUdFKSA+PSAweERGQykKIAkJCQlnb3RvIGV4aXRfbG9vcDE7CkBAIC0xOTgyLDIwICsxODExLDEyIEBACiAJbG9vcDFfb3V0ZXJfZG9uZSA9IGk7CiAJbG9vcDFfaW5uZXJfZG9uZSA9IGo7CiAJaWYgKGogPj0gOCkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1JGT1ZFUlZBTCkKLQkJCSAgICAgIHwgMHgzMCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsIDB4MzApOwogCQl0cnN3X3J4ID0gMHgxQjsKIAkJZm9yIChqID0gaiAtIDg7IGogPCAxNjsgaisrKSB7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9SRk9WRVJWQUwsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUkZPVkVSVkFMKQotCQkJCSAgICAgICAmIDB4RjBGRikgfCAoaiA8PCA4KSk7Ci0JCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9QR0FDVEwsCi0JCQkJICAgICAgKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUEdBQ1RMKQotCQkJCSAgICAgICAmIDB4MEZGRikgfCAweEEwMDApOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEdBQ1RMLAotCQkJCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfUEdBQ1RMKQotCQkJCSAgICAgIHwgMHhGMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfUkZPVkVSVkFMLCAweEYwRkYsIChqIDw8IDgpKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfUEdBQ1RMLCAweDBGRkYsIDB4QTAwMCk7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfUEdBQ1RMLCAweEYwMDApOwogCQkJdWRlbGF5KDIwKTsKIAkJCXRyc3dfcnggLT0gMzsKIAkJCWlmIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xPX0xFQUtBR0UpID49IDB4REZDKQpAQCAtMjA0NiwzNCArMTg2NywyNCBAQAogCQlyZXR1cm47CiAJfQogCi0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KSAmIDB4RkVGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDM2LCAweEZFRkYpOwogCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMkYsIDB4MDIwMik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3QywgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdDKSB8IDB4MDAwMik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQ3QSwgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdBKSB8IDB4RjAwMCk7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0N0MsIDB4MDAwMik7CisJYjQzX3BoeV9zZXQoZGV2LCAweDA0N0EsIDB4RjAwMCk7CiAJaWYgKHBoeS0+cmFkaW9fdmVyID09IDB4MjA1MCAmJiBwaHktPnJhZGlvX3JldiA9PSA4KSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDA0N0EsIChiNDNfcGh5X3JlYWQoZGV2LCAweDA0N0EpCi0JCQkJCSAgICAmIDB4RkYwRikgfCAweDAwMTApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNUQpCi0JCQkgICAgICB8IDB4ODAwMCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNEUsIChiNDNfcGh5X3JlYWQoZGV2LCAweDAwNEUpCi0JCQkJCSAgICAmIDB4RkZDMCkgfCAweDAwMTApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA0N0EsIDB4RkYwRiwgMHgwMDEwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCAweDAwNUQsIDB4ODAwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDA0RSwgMHhGRkMwLCAweDAwMTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJFLCAweEMwN0YpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM2LCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwMzYpCi0JCQkgICAgICB8IDB4MDQwMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDM2LCAweDA0MDApOwogCX0gZWxzZSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwMzYsIGI0M19waHlfcmVhZChkZXYsIDB4MDAzNikKLQkJCSAgICAgIHwgMHgwMjAwKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAzNiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KQotCQkJICAgICAgfCAweDA0MDApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDVELCBiNDNfcGh5X3JlYWQoZGV2LCAweDAwNUQpCi0JCQkgICAgICAmIDB4N0ZGRik7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNEYsIGI0M19waHlfcmVhZChkZXYsIDB4MDA0RikKLQkJCSAgICAgICYgMHhGRkZFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA0RSwgKGI0M19waHlfcmVhZChkZXYsIDB4MDA0RSkKLQkJCQkJICAgICYgMHhGRkMwKSB8IDB4MDAxMCk7CisJCWI0M19waHlfc2V0KGRldiwgMHgwMDM2LCAweDAyMDApOworCQliNDNfcGh5X3NldChkZXYsIDB4MDAzNiwgMHgwNDAwKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgMHgwMDVELCAweDdGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCAweDAwNEYsIDB4RkZGRSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIDB4MDA0RSwgMHhGRkMwLCAweDAwMTApOwogCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJFLCAweEMwN0YpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDdBLCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDdBKQotCQkJCQkgICAgJiAweEZGMEYpIHwgMHgwMDEwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDdBLCAweEZGMEYsIDB4MDAxMCk7CiAJfQogfQogCkBAIC0yMDg5LDIyICsxOTAwLDE3IEBACiAJCXJldHVybjsKIAl9CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDM2LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwMDM2KSAmIDB4RkZDMCkKLQkJICAgICAgfCAoZ3BoeS0+dGd0X2lkbGVfdHNzaSAtIGdwaHktPmN1cl9pZGxlX3Rzc2kpKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCAoYjQzX3BoeV9yZWFkKGRldiwgMHgwNDc4KSAmIDB4RkYwMCkKLQkJICAgICAgfCAoZ3BoeS0+dGd0X2lkbGVfdHNzaSAtIGdwaHktPmN1cl9pZGxlX3Rzc2kpKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDAwMzYsIDB4RkZDMCwgKGdwaHktPnRndF9pZGxlX3Rzc2kgLSBncGh5LT5jdXJfaWRsZV90c3NpKSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwNDc4LCAweEZGMDAsIChncGh5LT50Z3RfaWRsZV90c3NpIC0gZ3BoeS0+Y3VyX2lkbGVfdHNzaSkpOwogCWI0M19ncGh5X3Rzc2lfcG93ZXJfbHRfaW5pdChkZXYpOwogCWI0M19ncGh5X2dhaW5fbHRfaW5pdChkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNjAsIGI0M19waHlfcmVhZChkZXYsIDB4MDA2MCkgJiAweEZGQkYpOworCWI0M19waHlfbWFzayhkZXYsIDB4MDA2MCwgMHhGRkJGKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDE0LCAweDAwMDApOwogCiAJQjQzX1dBUk5fT04ocGh5LT5yZXYgPCA2KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0NzgpCi0JCSAgICAgIHwgMHgwODAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwNDc4LCBiNDNfcGh5X3JlYWQoZGV2LCAweDA0NzgpCi0JCSAgICAgICYgMHhGRUZGKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgMHgwODAxLCBiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDEpCi0JCSAgICAgICYgMHhGRkJGKTsKKwliNDNfcGh5X3NldChkZXYsIDB4MDQ3OCwgMHgwODAwKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0NzgsIDB4RkVGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAxLCAweEZGQkYpOwogCiAJYjQzX2dwaHlfZGNfbHRfaW5pdChkZXYsIDEpOwogCkBAIC0yMTM5LDkgKzE5NDUsNyBAQAogCWI0M19oYXJkd2FyZV9wY3RsX2Vhcmx5X2luaXQoZGV2KTsKIAlpZiAoZ3BoeS0+Y3VyX2lkbGVfdHNzaSA9PSAwKSB7CiAJCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTAgJiYgcGh5LT5hbmFsb2cgPT0gMCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNzYsCi0JCQkJCSAgKGI0M19yYWRpb19yZWFkMTYoZGV2LCAweDAwNzYpCi0JCQkJCSAgICYgMHgwMEY3KSB8IDB4MDA4NCk7CisJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIDB4MDA3NiwgMHgwMEY3LCAweDAwODQpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IGI0M19yZmF0dCByZmF0dDsKIAkJCXN0cnVjdCBiNDNfYmJhdHQgYmJhdHQ7CkBAIC0yMTc0LDkgKzE5NzgsNyBAQAogCQkJfQogCQl9CiAJCWlmIChwaHktPnJhZGlvX3ZlciA9PSAweDIwNTAgJiYgcGh5LT5hbmFsb2cgPT0gMCkgewotCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDAwNzYsCi0JCQkJCSAgYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4MDA3NikKLQkJCQkJICAmIDB4RkY3Qik7CisJCQliNDNfcmFkaW9fbWFzayhkZXYsIDB4MDA3NiwgMHhGRjdCKTsKIAkJfSBlbHNlIHsKIAkJCWI0M19zZXRfdHhwb3dlcl9nKGRldiwgJm9sZF9iYmF0dCwKIAkJCQkJICAmb2xkX3JmYXR0LCBvbGRfdHhfY29udHJvbCk7CkBAIC0yMjIwLDIwICsyMDIyLDE0IEBACiAJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpLCAweDgwMDYpOwogCQl9CiAJCWlmICh0bXAgPT0gNSkgewotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweENDKSwKLQkJCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4Q0MpKQotCQkJCSAgICAgICAmIDB4MDBGRikgfCAweDFGMDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4Q0MpLCAweDAwRkYsIDB4MUYwMCk7CiAJCX0KIAl9CiAJaWYgKChwaHktPnJldiA8PSAyICYmIHBoeS0+Z21vZGUpIHx8IHBoeS0+cmV2ID49IDIpCiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg3RSksIDB4NzgpOwogCWlmIChwaHktPnJhZGlvX3JldiA9PSA4KSB7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSksCi0JCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgwMSkpCi0JCQkgICAgICB8IDB4ODApOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpKQotCQkJICAgICAgfCAweDQpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfRVhURygweDAxKSwgMHg4MCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4M0UpLCAweDQpOwogCX0KIAlpZiAoaGFzX2xvb3BiYWNrX2dhaW4ocGh5KSkKIAkJYjQzX2NhbGNfbG9vcGJhY2tfZ2FpbihkZXYpOwpAQCAtMjI1MSwxNSArMjA0NywxMCBAQAogCQkJCSAgfCBncGh5LT5sb19jb250cm9sLT50eF9iaWFzIHwgZ3BoeS0+CiAJCQkJICBsb19jb250cm9sLT50eF9tYWduKTsKIAl9IGVsc2UgewotCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4NTIsCi0JCQkJICAoYjQzX3JhZGlvX3JlYWQxNihkZXYsIDB4NTIpICYgMHhGRkYwKQotCQkJCSAgfCBncGh5LT5sb19jb250cm9sLT50eF9iaWFzKTsKKwkJYjQzX3JhZGlvX21hc2tzZXQoZGV2LCAweDUyLCAweEZGRjAsIGdwaHktPmxvX2NvbnRyb2wtPnR4X2JpYXMpOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gNikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgzNiksCi0JCQkgICAgICAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DQ0soMHgzNikpCi0JCQkgICAgICAgJiAweDBGRkYpIHwgKGdwaHktPmxvX2NvbnRyb2wtPgotCQkJCQkgICAgdHhfYmlhcyA8PCAxMikpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0NDSygweDM2KSwgMHgwRkZGLCAoZ3BoeS0+bG9fY29udHJvbC0+dHhfYmlhcyA8PCAxMikpOwogCX0KIAlpZiAoZGV2LT5kZXYtPmJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfUEFDVFJMKQogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0soMHgyRSksIDB4ODA3NSk7CkBAIC0yMjk4LDExICsyMDg5LDggQEAKIAkgICBidXQgT0ZETSBpcyBsZWdhbCBldmVyeXdoZXJlICovCiAJaWYgKChkZXYtPmRldi0+YnVzLT5jaGlwX2lkID09IDB4NDMwNgogCSAgICAgJiYgZGV2LT5kZXYtPmJ1cy0+Y2hpcF9wYWNrYWdlID09IDIpIHx8IDApIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTMCwgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKQotCQkJICAgICAgJiAweEJGRkYpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpLAotCQkJICAgICAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4QzMpKQotCQkJICAgICAgJiAweDdGRkYpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0NSUzAsIDB4QkZGRik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfT0ZETSgweEMzKSwgMHg3RkZGKTsKIAl9CiB9CiAKQEAgLTI1MDQsOSArMjI5Miw4IEBACiAKIAliNDNfcGh5X2xvY2soZGV2KTsKIAliNDNfcmFkaW9fbG9jayhkZXYpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsIGI0M19waHlfcmVhZChkZXYsIDB4MDgwMikgJiAweEZGRkMpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0dfQ1JTLAotCQkgICAgICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0dfQ1JTKSAmIDB4N0ZGRik7CisJYjQzX3BoeV9tYXNrKGRldiwgMHgwODAyLCAweEZGRkMpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19QSFlfR19DUlMsIDB4N0ZGRik7CiAJYjQzX3NldF9hbGxfZ2FpbnMoZGV2LCAzLCA4LCAxKTsKIAogCXN0YXJ0ID0gKGNoYW5uZWwgLSA1ID4gMCkgPyBjaGFubmVsIC0gNSA6IDE7CkBAIC0yNTE3LDExICsyMzA0LDkgQEAKIAkJCXJldFtpIC0gMV0gPSBiNDNfZ3BoeV9hY2lfZGV0ZWN0KGRldiwgaSk7CiAJfQogCWI0M19zd2l0Y2hfY2hhbm5lbChkZXYsIGNoYW5uZWwpOwotCWI0M19waHlfd3JpdGUoZGV2LCAweDA4MDIsCi0JCSAgICAgIChiNDNfcGh5X3JlYWQoZGV2LCAweDA4MDIpICYgMHhGRkZDKSB8IDB4MDAwMyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDQwMywgYjQzX3BoeV9yZWFkKGRldiwgMHgwNDAzKSAmIDB4RkZGOCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfR19DUlMsCi0JCSAgICAgIGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfR19DUlMpIHwgMHg4MDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCAweDA4MDIsIDB4RkZGQywgMHgwMDAzKTsKKwliNDNfcGh5X21hc2soZGV2LCAweDA0MDMsIDB4RkZGOCk7CisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0dfQ1JTLCAweDgwMDApOwogCWI0M19zZXRfb3JpZ2luYWxfZ2FpbnMoZGV2KTsKIAlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykgewogCQlpZiAoIXJldFtpXSkKQEAgLTI1NjUsOCArMjM1MCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXU4ICogYjQzX2dlbmVyYXRlX2R5bl90c3NpMmRibV90YWIoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCSAgIHMxNiBwYWIwLCBzMTYgcGFiMSwgczE2IHBhYjIpCit1OCAqYjQzX2dlbmVyYXRlX2R5bl90c3NpMmRibV90YWIoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgczE2IHBhYjAsIHMxNiBwYWIxLCBzMTYgcGFiMikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1OCAqdGFiOwpAQCAtMzE5MSw2ICsyOTc2LDcgQEAKIAkgKiBCYXNlYmFuZCBhdHRlbm51YXRpb24uIFN1YnRyYWN0IGl0LiAqLwogCWJiYXR0X2RlbHRhIC09IDQgKiByZmF0dF9kZWx0YTsKIAorI2lmIEI0M19ERUJVRwogCWlmIChiNDNfZGVidWcoZGV2LCBCNDNfREJHX1hNSVRQT1dFUikpIHsKIAkJaW50IGRibSA9IHB3cl9hZGp1c3QgPCAwID8gLXB3cl9hZGp1c3QgOiBwd3JfYWRqdXN0OwogCQliNDNkYmcoZGV2LT53bCwKQEAgLTMxOTksNiArMjk4NSw4IEBACiAJCSAgICAgICAocHdyX2FkanVzdCA8IDAgPyAiLSIgOiAiIiksIFE1Ml9BUkcoZGJtKSwKIAkJICAgICAgIGJiYXR0X2RlbHRhLCByZmF0dF9kZWx0YSk7CiAJfQorI2VuZGlmIC8qIERFQlVHICovCisKIAkvKiBTbyBkbyB3ZSBmaW5hbGx5IG5lZWQgdG8gYWRqdXN0IHNvbWV0aGluZyBpbiBoYXJkd2FyZT8gKi8KIAlpZiAoKHJmYXR0X2RlbHRhID09IDApICYmIChiYmF0dF9kZWx0YSA9PSAwKSkKIAkJZ290byBub19hZGp1c3RtZW50X25lZWRlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYwppbmRleCBjNWQ5ZGMzLi41OGUzMTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jCkBAIC0zLDcgKzMsNyBAQAogICBCcm9hZGNvbSBCNDMgd2lyZWxlc3MgZHJpdmVyCiAgIElFRUUgODAyLjExZyBMUC1QSFkgZHJpdmVyCiAKLSAgQ29weXJpZ2h0IChjKSAyMDA4IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisgIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CiAKICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIzLDggKzIzLDEwIEBACiAqLwogCiAjaW5jbHVkZSAiYjQzLmgiCisjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgInBoeV9scC5oIgogI2luY2x1ZGUgInBoeV9jb21tb24uaCIKKyNpbmNsdWRlICJ0YWJsZXNfbHBwaHkuaCIKIAogCiBzdGF0aWMgaW50IGI0M19scHBoeV9vcF9hbGxvY2F0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC01Nyw5ICs1OSwzOTQgQEAKIAlkZXYtPnBoeS5scCA9IE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgYjQzX2xwcGh5X29wX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQorc3RhdGljIHZvaWQgbHBwaHlfdGFibGVfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7CiAJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX3JldjBfMV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlCNDNfV0FSTl9PTigxKTsvL1RPRE8gcmV2IDwgMiBub3Qgc3VwcG9ydGVkLCB5ZXQuCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2Jhc2ViYW5kX3JldjJwbHVzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBkZXYtPmRldi0+YnVzOworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9BRkVfREFDX0NUTCwgMHg1MCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9BRkVfQ1RMLCAweDg4MDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlIsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX0NUTF9PVlJWQUwsIDApOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMCwgMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9SRl9PVkVSUklERV8yLCAwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjkpLCAwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RSX0xPT0tVUF8xLCAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9BRENfQ09NUEVOU0FUSU9OX0NUTCwgMHgxMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX09GRE1TWU5DVEhSRVNIMCwgMHhGRjAwLCAweDc4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfRENPRkZTRVRUUkFOU0lFTlQsIDB4RjhGRiwgMHgyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9EQ09GRlNFVFRSQU5TSUVOVCwgMHhGRjAwLCAweDdGKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENILCAweEZGMEYsIDB4NDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9QUkVBTUJMRUNPTkZJUk1UTywgMHhGRjAwLCAweDIpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9DUlNHQUlOX0NUTCwgfjB4NDAwMCk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCB+MHgyMDAwKTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwQSksIDB4MSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTBBKSwgMHhGRjAxLCAweDEwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhERiksIDB4RkYwMCwgMHhGNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4REYpLCAweDAwRkYsIDB4RjEwMCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9DTElQVEhSRVNILCAweDQ4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfSElHQUlOREIsIDB4RkYwMCwgMHg0Nik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RTQpLCAweEZGMDAsIDB4MTApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9QV1JfVEhSRVNIMSwgMHhGRkYwLCAweDkpOworCWI0M19waHlfbWFzayhkZXYsIEI0M19MUFBIWV9HQUlORElSRUNUTUlTTUFUQ0gsIH4weEYpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9WRVJZTE9XR0FJTkRCLCAweDAwRkYsIDB4NTUwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NMSVBDVFJUSFJFU0gsIDB4RjgxRiwgMHhBMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0dBSU5ESVJFQ1RNSVNNQVRDSCwgMHhFMEZGLCAweDMwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0hJR0FJTkRCLCAweDAwRkYsIDB4MkEwMCk7CisJaWYgKChidXMtPmNoaXBfaWQgPT0gMHg0MzI1KSAmJiAoYnVzLT5jaGlwX3JldiA9PSAwKSkgeworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfTE9XR0FJTkRCLCAweDAwRkYsIDB4MjEwMCk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9WRVJZTE9XR0FJTkRCLCAweEZGMDAsIDB4QSk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0xPV0dBSU5EQiwgMHgwMEZGLCAweDFFMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfVkVSWUxPV0dBSU5EQiwgMHhGRjAwLCAweEQpOworCX0KKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRSksIDB4RkZFMCwgMHgxRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4RkYpLCAweEZGRTAsIDB4Qyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MTAwKSwgMHhGRjAwLCAweDE5KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRiksIDB4MDNGRiwgMHgzQzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhGRSksIDB4RkMxRiwgMHgzRTApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweEZGKSwgMHhGRkUwLCAweEMpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDEwMCksIDB4MDBGRiwgMHgxOTAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTFBQSFlfQ0xJUENUUlRIUkVTSCwgMHg4M0ZGLCAweDU4MDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNILCAweEZGRTAsIDB4MTIpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9HQUlOTUlTTUFUQ0gsIDB4MEZGRiwgMHg5MDAwKTsKKworCWI0M19scHRhYl93cml0ZShkZXYsIEI0M19MUFRBQjE2KDB4MDgsIDB4MTQpLCAwKTsKKwliNDNfbHB0YWJfd3JpdGUoZGV2LCBCNDNfTFBUQUIxNigweDA4LCAweDEyKSwgMHg0MCk7CisKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweDQwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMLCAweEYwRkYsIDB4QjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1NZTkNQRUFLQ05ULCAweEZGRjgsIDB4Nik7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwsIDB4MDBGRiwgMHg5RDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX01JTlBXUl9MRVZFTCwgMHhGRjAwLCAweEExKTsKKwl9IGVsc2UgLyogNUdIeiAqLworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfQ1JTR0FJTl9DVEwsIH4weDQwKTsKKworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNfRURfVEhSRVNILCAweEZGMDAsIDB4QjMpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9DUlNfRURfVEhSRVNILCAweDAwRkYsIDB4QUQwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX0lOUFVUX1BXUkRCLCAweEZGMDAsIGxwcGh5LT5yeF9wd3Jfb2Zmc2V0KTsKKwliNDNfcGh5X3NldChkZXYsIEI0M19MUFBIWV9SRVNFVF9DVEwsIDB4NDQpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfUkVTRVRfQ1RMLCAweDgwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8wLCAweEE5NTQpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfQUZFX1JTU0lfQ1RMXzEsCisJCSAgICAgIDB4MjAwMCB8ICgodTE2KWxwcGh5LT5yc3NpX2dzIDw8IDEwKSB8CisJCSAgICAgICgodTE2KWxwcGh5LT5yc3NpX3ZjIDw8IDQpIHwgbHBwaHktPnJzc2lfdmYpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9iYXNlYmFuZF9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlscHBoeV90YWJsZV9pbml0KGRldik7CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKQorCQlscHBoeV9iYXNlYmFuZF9yZXYycGx1c19pbml0KGRldik7CisJZWxzZQorCQlscHBoeV9iYXNlYmFuZF9yZXYwXzFfaW5pdChkZXYpOworfQorCitzdHJ1Y3QgYjIwNjJfZnJlcWRhdGEgeworCXUxNiBmcmVxOworCXU4IGRhdGFbNl07Cit9OworCisvKiBJbml0aWFsaXplIHRoZSAyMDYyIHJhZGlvLiAqLworc3RhdGljIHZvaWQgbHBwaHlfMjA2Ml9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKwl1MzIgY3J5c3RhbGZyZXEsIHBkaXYsIHRtcCwgcmVmOworCXVuc2lnbmVkIGludCBpOworCWNvbnN0IHN0cnVjdCBiMjA2Ml9mcmVxZGF0YSAqZmQgPSBOVUxMOworCisJc3RhdGljIGNvbnN0IHN0cnVjdCBiMjA2Ml9mcmVxZGF0YSBmcmVxZGF0YV90YWJbXSA9IHsKKwkJeyAuZnJlcSA9IDEyMDAwLCAuZGF0YVswXSA9ICA2LCAuZGF0YVsxXSA9ICA2LCAuZGF0YVsyXSA9ICA2LAorCQkJCSAuZGF0YVszXSA9ICA2LCAuZGF0YVs0XSA9IDEwLCAuZGF0YVs1XSA9ICA2LCB9LAorCQl7IC5mcmVxID0gMTMwMDAsIC5kYXRhWzBdID0gIDQsIC5kYXRhWzFdID0gIDQsIC5kYXRhWzJdID0gIDQsCisJCQkJIC5kYXRhWzNdID0gIDQsIC5kYXRhWzRdID0gMTEsIC5kYXRhWzVdID0gIDcsIH0sCisJCXsgLmZyZXEgPSAxNDQwMCwgLmRhdGFbMF0gPSAgMywgLmRhdGFbMV0gPSAgMywgLmRhdGFbMl0gPSAgMywKKwkJCQkgLmRhdGFbM10gPSAgMywgLmRhdGFbNF0gPSAxMiwgLmRhdGFbNV0gPSAgNywgfSwKKwkJeyAuZnJlcSA9IDE2MjAwLCAuZGF0YVswXSA9ICAzLCAuZGF0YVsxXSA9ICAzLCAuZGF0YVsyXSA9ICAzLAorCQkJCSAuZGF0YVszXSA9ICAzLCAuZGF0YVs0XSA9IDEzLCAuZGF0YVs1XSA9ICA4LCB9LAorCQl7IC5mcmVxID0gMTgwMDAsIC5kYXRhWzBdID0gIDIsIC5kYXRhWzFdID0gIDIsIC5kYXRhWzJdID0gIDIsCisJCQkJIC5kYXRhWzNdID0gIDIsIC5kYXRhWzRdID0gMTQsIC5kYXRhWzVdID0gIDgsIH0sCisJCXsgLmZyZXEgPSAxOTIwMCwgLmRhdGFbMF0gPSAgMSwgLmRhdGFbMV0gPSAgMSwgLmRhdGFbMl0gPSAgMSwKKwkJCQkgLmRhdGFbM10gPSAgMSwgLmRhdGFbNF0gPSAxNCwgLmRhdGFbNV0gPSAgOSwgfSwKKwl9OworCisJYjIwNjJfdXBsb2FkX2luaXRfdGFibGUoZGV2KTsKKworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fVFhfQ1RMMywgMCk7CisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfTl9UWF9DVEw0LCAwKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9OX1RYX0NUTDUsIDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fUEROX0NUTDAsIDB4NDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fUEROX0NUTDAsIDApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fQ0FMSUJfVFMsIDB4MTApOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX05fQ0FMSUJfVFMsIDApOworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCWI0M19yYWRpb19zZXQoZGV2LCBCMjA2Ml9OX1RTU0lfQ1RMMCwgMHgxKTsKKwllbHNlCisJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjJfTl9UU1NJX0NUTDAsIH4weDEpOworCisJLyogR2V0IHRoZSBjcnlzdGFsIGZyZXEsIGluIEh6LiAqLworCWNyeXN0YWxmcmVxID0gYnVzLT5jaGlwY28ucG11LmNyeXN0YWxmcmVxICogMTAwMDsKKworCUI0M19XQVJOX09OKCEoYnVzLT5jaGlwY28uY2FwYWJpbGl0aWVzICYgU1NCX0NISVBDT19DQVBfUE1VKSk7CisJQjQzX1dBUk5fT04oY3J5c3RhbGZyZXEgPT0gMCk7CisKKwlpZiAoY3J5c3RhbGZyZXEgPj0gMzAwMDAwMDApIHsKKwkJcGRpdiA9IDE7CisJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNjJfU19SRlBMTF9DVEwxLCAweEZGRkIpOworCX0gZWxzZSB7CisJCXBkaXYgPSAyOworCQliNDNfcmFkaW9fc2V0KGRldiwgQjIwNjJfU19SRlBMTF9DVEwxLCAweDQpOworCX0KKworCXRtcCA9ICg4MDAwMDAwMDAgKiBwZGl2ICsgY3J5c3RhbGZyZXEpIC8gKDMyMDAwMDAwICogcGRpdik7CisJdG1wID0gKHRtcCAtIDEpICYgMHhGRjsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDE4LCB0bXApOworCisJdG1wID0gKDIgKiBjcnlzdGFsZnJlcSArIDEwMDAwMDAgKiBwZGl2KSAvICgyMDAwMDAwICogcGRpdik7CisJdG1wID0gKCh0bXAgJiAweEZGKSAtIDEpICYgMHhGRkZGOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMTksIHRtcCk7CisKKwlyZWYgPSAoMTAwMCAqIHBkaXYgKyAyICogY3J5c3RhbGZyZXEpIC8gKDIwMDAgKiBwZGl2KTsKKwlyZWYgJj0gMHhGRkZGOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZyZXFkYXRhX3RhYik7IGkrKykgeworCQlpZiAocmVmIDwgZnJlcWRhdGFfdGFiW2ldLmZyZXEpIHsKKwkJCWZkID0gJmZyZXFkYXRhX3RhYltpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZmQpCisJCWZkID0gJmZyZXFkYXRhX3RhYltBUlJBWV9TSVpFKGZyZXFkYXRhX3RhYikgLSAxXTsKKwliNDNkYmcoZGV2LT53bCwgImIyMDYyOiBVc2luZyBjcnlzdGFsIHRhYiBlbnRyeSAldSBrSHouXG4iLAorCSAgICAgICBmZC0+ZnJlcSk7IC8qIEZJWE1FOiBLZWVwIHRoaXMgcHJpbnRrIHVudGlsIHRoZSBjb2RlIGlzIGZ1bGx5IGRlYnVnZ2VkLiAqLworCisJYjQzX3JhZGlvX3dyaXRlKGRldiwgQjIwNjJfU19SRlBMTF9DVEw4LAorCQkJKCh1MTYpKGZkLT5kYXRhWzFdKSA8PCA0KSB8IGZkLT5kYXRhWzBdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDksCisJCQkoKHUxNikoZmQtPmRhdGFbM10pIDw8IDQpIHwgZmQtPmRhdGFbMl0pOworCWI0M19yYWRpb193cml0ZShkZXYsIEIyMDYyX1NfUkZQTExfQ1RMMTAsIGZkLT5kYXRhWzRdKTsKKwliNDNfcmFkaW9fd3JpdGUoZGV2LCBCMjA2Ml9TX1JGUExMX0NUTDExLCBmZC0+ZGF0YVs1XSk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIDIwNjMgcmFkaW8uICovCitzdGF0aWMgdm9pZCBscHBoeV8yMDYzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCS8vVE9ETworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zeW5jX3N0eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X3JhZGlvX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCS8qIFRoZSByYWRpbyBpcyBhdHRhY2hlZCB0aHJvdWdoIHRoZSA0d2lyZSBidXMuICovCisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTFBQSFlfRk9VUldJUkVfQ1RMLCAweDIpOworCXVkZWxheSgxKTsKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTFBQSFlfRk9VUldJUkVfQ1RMLCAweEZGRkQpOworCXVkZWxheSgxKTsKKworCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCWxwcGh5XzIwNjJfaW5pdChkZXYpOworCX0gZWxzZSB7CisJCWxwcGh5XzIwNjNfaW5pdChkZXYpOworCQlscHBoeV9zeW5jX3N0eChkZXYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjApLCAweDVGODApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4RjEpLCAwKTsKKwkJLy9UT0RPIERvIHNvbWV0aGluZyBvbiB0aGUgYmFja3BsYW5lCisJfQorfQorCisvKiBSZWFkIHRoZSBUWCBwb3dlciBjb250cm9sIG1vZGUgZnJvbSBoYXJkd2FyZS4gKi8KK3N0YXRpYyB2b2lkIGxwcGh5X3JlYWRfdHhfcGN0bF9tb2RlX2Zyb21faGFyZHdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCXUxNiBjdGw7CisKKwljdGwgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTUQpOworCXN3aXRjaCAoY3RsICYgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREUpIHsKKwljYXNlIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX09GRjoKKwkJbHBwaHktPnR4cGN0bF9tb2RlID0gQjQzX0xQUEhZX1RYUENUTF9PRkY7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfU1c6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfU1c7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfSFc6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfSFc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxwcGh5LT50eHBjdGxfbW9kZSA9IEI0M19MUFBIWV9UWFBDVExfVU5LTk9XTjsKKwkJQjQzX1dBUk5fT04oMSk7CisJCWJyZWFrOworCX0KK30KKworLyogU2V0IHRoZSBUWCBwb3dlciBjb250cm9sIG1vZGUgaW4gaGFyZHdhcmUuICovCitzdGF0aWMgdm9pZCBscHBoeV93cml0ZV90eF9wY3RsX21vZGVfdG9faGFyZHdhcmUoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCXUxNiBjdGw7CisKKwlzd2l0Y2ggKGxwcGh5LT50eHBjdGxfbW9kZSkgeworCWNhc2UgQjQzX0xQUEhZX1RYUENUTF9PRkY6CisJCWN0bCA9IEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX09GRjsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBQSFlfVFhQQ1RMX0hXOgorCQljdGwgPSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERV9IVzsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBQSFlfVFhQQ1RMX1NXOgorCQljdGwgPSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERV9TVzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY3RsID0gMDsKKwkJQjQzX1dBUk5fT04oMSk7CisJfQorCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCSh1MTYpfkI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFLCBjdGwpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJICAgICAgIGVudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIG1vZGUpCit7CisJc3RydWN0IGI0M19waHlfbHAgKmxwcGh5ID0gZGV2LT5waHkubHA7CisJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgb2xkbW9kZTsKKworCW9sZG1vZGUgPSBscHBoeS0+dHhwY3RsX21vZGU7CisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCWlmIChscHBoeS0+dHhwY3RsX21vZGUgPT0gbW9kZSkKKwkJcmV0dXJuOworCWxwcGh5LT50eHBjdGxfbW9kZSA9IG1vZGU7CisKKwlpZiAob2xkbW9kZSA9PSBCNDNfTFBQSFlfVFhQQ1RMX0hXKSB7CisJCS8vVE9ETyBVcGRhdGUgVFggUG93ZXIgTlBUCisJCS8vVE9ETyBDbGVhciBhbGwgVFggUG93ZXIgb2Zmc2V0cworCX0gZWxzZSB7CisJCWlmIChtb2RlID09IEI0M19MUFBIWV9UWFBDVExfSFcpIHsKKwkJCS8vVE9ETyBSZWNhbGN1bGF0ZSB0YXJnZXQgVFggcG93ZXIKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRCwKKwkJCQkJMHhGRjgwLCBscHBoeS0+dHNzaV9pZHgpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX0xQUEhZX1RYX1BXUl9DVExfTk5VTSwKKwkJCQkJMHg4RkZGLCAoKHUxNilscHBoeS0+dHNzaV9ucHQgPDwgMTYpKTsKKwkJCS8vVE9ETyBTZXQgIlRTU0kgVHJhbnNtaXQgQ291bnQiIHZhcmlhYmxlIHRvIHRvdGFsIHRyYW5zbWl0dGVkIGZyYW1lIGNvdW50CisJCQkvL1RPRE8gRGlzYWJsZSBUWCBnYWluIG92ZXJyaWRlCisJCQlscHBoeS0+dHhfcHdyX2lkeF9vdmVyID0gLTE7CisJCX0KKwl9CisJaWYgKGRldi0+cGh5LnJldiA+PSAyKSB7CisJCWlmIChtb2RlID09IEI0M19MUFBIWV9UWFBDVExfSFcpCisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHhEMCksIDB4RkQsIDB4Mik7CisJCWVsc2UKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweEQwKSwgMHhGRCwgMCk7CisJfQorCWxwcGh5X3dyaXRlX3R4X3BjdGxfbW9kZV90b19oYXJkd2FyZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBscHBoeV9zZXRfdHhfcG93ZXJfYnlfaW5kZXgoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBpbmRleCkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKworCWxwcGh5LT50eF9wd3JfaWR4X292ZXIgPSBpbmRleDsKKwlpZiAobHBwaHktPnR4cGN0bF9tb2RlICE9IEI0M19MUFBIWV9UWFBDVExfT0ZGKQorCQlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIEI0M19MUFBIWV9UWFBDVExfU1cpOworCisJLy9UT0RPCit9CisKK3N0YXRpYyB2b2lkIGxwcGh5X2J0Y29leF9vdmVycmlkZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19CVENPRVhfQ1RMLCAweDMpOworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fQlRDT0VYX1RYQ1RMLCAweEZGKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfcHI0MTU3M193b3JrYXJvdW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKKwl1MzIgKnNhdmVkX3RhYjsKKwljb25zdCB1bnNpZ25lZCBpbnQgc2F2ZWRfdGFiX3NpemUgPSAyNTY7CisJZW51bSBiNDNfbHBwaHlfdHhwY3RsX21vZGUgdHhwY3RsX21vZGU7CisJczggdHhfcHdyX2lkeF9vdmVyOworCXUxNiB0c3NpX25wdCwgdHNzaV9pZHg7CisKKwlzYXZlZF90YWIgPSBrY2FsbG9jKHNhdmVkX3RhYl9zaXplLCBzaXplb2Yoc2F2ZWRfdGFiWzBdKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzYXZlZF90YWIpIHsKKwkJYjQzZXJyKGRldi0+d2wsICJQUjQxNTczIGZhaWxlZC4gT3V0IG9mIG1lbW9yeSFcbiIpOworCQlyZXR1cm47CisJfQorCisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCXR4cGN0bF9tb2RlID0gbHBwaHktPnR4cGN0bF9tb2RlOworCXR4X3B3cl9pZHhfb3ZlciA9IGxwcGh5LT50eF9wd3JfaWR4X292ZXI7CisJdHNzaV9ucHQgPSBscHBoeS0+dHNzaV9ucHQ7CisJdHNzaV9pZHggPSBscHBoeS0+dHNzaV9pZHg7CisKKwlpZiAoZGV2LT5waHkucmV2IDwgMikgeworCQliNDNfbHB0YWJfcmVhZF9idWxrKGRldiwgQjQzX0xQVEFCMzIoMTAsIDB4MTQwKSwKKwkJCQkgICAgc2F2ZWRfdGFiX3NpemUsIHNhdmVkX3RhYik7CisJfSBlbHNlIHsKKwkJYjQzX2xwdGFiX3JlYWRfYnVsayhkZXYsIEI0M19MUFRBQjMyKDcsIDB4MTQwKSwKKwkJCQkgICAgc2F2ZWRfdGFiX3NpemUsIHNhdmVkX3RhYik7CisJfQorCS8vVE9ETworCisJa2ZyZWUoc2F2ZWRfdGFiKTsKK30KKworc3RhdGljIHZvaWQgbHBwaHlfY2FsaWJyYXRpb24oc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOworCWVudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIHNhdmVkX3BjdGxfbW9kZTsKKworCWI0M19tYWNfc3VzcGVuZChkZXYpOworCisJbHBwaHlfYnRjb2V4X292ZXJyaWRlKGRldik7CisJbHBwaHlfcmVhZF90eF9wY3RsX21vZGVfZnJvbV9oYXJkd2FyZShkZXYpOworCXNhdmVkX3BjdGxfbW9kZSA9IGxwcGh5LT50eHBjdGxfbW9kZTsKKwlscHBoeV9zZXRfdHhfcG93ZXJfY29udHJvbChkZXYsIEI0M19MUFBIWV9UWFBDVExfT0ZGKTsKKwkvL1RPRE8gUGVyZm9ybSB0cmFuc21pdCBwb3dlciB0YWJsZSBJL1EgTE8gY2FsaWJyYXRpb24KKwlpZiAoKGRldi0+cGh5LnJldiA9PSAwKSAmJiAoc2F2ZWRfcGN0bF9tb2RlICE9IEI0M19MUFBIWV9UWFBDVExfT0ZGKSkKKwkJbHBwaHlfcHI0MTU3M193b3JrYXJvdW5kKGRldik7CisJLy9UT0RPIElmIGEgZnVsbCBjYWxpYnJhdGlvbiBoYXMgbm90IGJlZW4gcGVyZm9ybWVkIG9uIHRoaXMgY2hhbm5lbCB5ZXQsIHBlcmZvcm0gUEFQRCBUWC1wb3dlciBjYWxpYnJhdGlvbgorCWxwcGh5X3NldF90eF9wb3dlcl9jb250cm9sKGRldiwgc2F2ZWRfcGN0bF9tb2RlKTsKKwkvL1RPRE8gUGVyZm9ybSBJL1EgY2FsaWJyYXRpb24gd2l0aCBhIHNpbmdsZSBjb250cm9sIHZhbHVlIHNldAorCisJYjQzX21hY19lbmFibGUoZGV2KTsKK30KKworLyogSW5pdGlhbGl6ZSBUWCBwb3dlciBjb250cm9sICovCitzdGF0aWMgdm9pZCBscHBoeV90eF9wY3RsX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWlmICgwLypGSVhNRSBIV1BDVEwgY2FwYWJsZSAqLykgeworCQkvL1RPRE8KKwl9IGVsc2UgeyAvKiBUaGlzIGRldmljZSBpcyBvbmx5IHNvZnR3YXJlIFRYIHBvd2VyIGNvbnRyb2wgY2FwYWJsZS4gKi8KKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJLy9UT0RPCisJCX0gZWxzZSB7CisJCQkvL1RPRE8KKwkJfQorCQkvL1RPRE8gc2V0IEJCIG11bHRpcGxpZXIgdG8gMHgwMDk2CisJfQorfQorCitzdGF0aWMgaW50IGI0M19scHBoeV9vcF9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwkvKiBUT0RPOiBiYW5kIFNQUk9NICovCisJbHBwaHlfYmFzZWJhbmRfaW5pdChkZXYpOworCWxwcGh5X3JhZGlvX2luaXQoZGV2KTsKKwkvL1RPRE8gY2FsaWJyYXRlIFJDCisJLy9UT0RPIHNldCBjaGFubmVsCisJbHBwaHlfdHhfcGN0bF9pbml0KGRldik7CisJLy9UT0RPIGZ1bGwgY2FsaWIKIAogCXJldHVybiAwOwogfQpAQCAtMTE1LDcgKzUwMiw5IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYjQzX2xwcGh5X29wX2dldF9kZWZhdWx0X2NoYW4oc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCXJldHVybiAxOyAvKiBEZWZhdWx0IHRvIGNoYW5uZWwgMSAqLworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCXJldHVybiAxOworCXJldHVybiAzNjsKIH0KIAogc3RhdGljIHZvaWQgYjQzX2xwcGh5X29wX3NldF9yeF9hbnRlbm5hKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgaW50IGFudGVubmEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmgKaW5kZXggYjBiNTM1Ny4uMTgzNzBiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuaApAQCAtNCw4ICs0LDI4NSBAQAogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBMUC1QSFkgKi8KIAogCisvKiBUaGUgQ0NLIFBIWSByZWdpc3RlciByYW5nZS4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfVkVSU0lPTgkJCUI0M19QSFlfQ0NLKDB4MDApIC8qIEIgUEhZIHZlcnNpb24gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfQkJDT05GSUcJCQlCNDNfUEhZX0NDSygweDAxKSAvKiBCIFBIWSBCQkNvbmZpZyAqLworI2RlZmluZSBCNDNfTFBQSFlfQl9SWF9TVEFUMAkJCUI0M19QSFlfQ0NLKDB4MDQpIC8qIEIgUEhZIFJYIFN0YXR1czAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfUlhfU1RBVDEJCQlCNDNfUEhZX0NDSygweDA1KSAvKiBCIFBIWSBSWCBTdGF0dXMxICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0NSU19USFJFU0gJCQlCNDNfUEhZX0NDSygweDA2KSAvKiBCIFBIWSBDUlMgVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1RYRVJST1IJCQlCNDNfUEhZX0NDSygweDA3KSAvKiBCIFBIWSBUeEVycm9yICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0NIQU5ORUwJCQlCNDNfUEhZX0NDSygweDA4KSAvKiBCIFBIWSBDaGFubmVsICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1dPUktBUk9VTkQJCQlCNDNfUEhZX0NDSygweDA5KSAvKiBCIFBIWSB3b3JrYXJvdW5kICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1RFU1QJCQlCNDNfUEhZX0NDSygweDBBKSAvKiBCIFBIWSBUZXN0ICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0ZPVVJXSVJFX0FERFIJCUI0M19QSFlfQ0NLKDB4MEIpIC8qIEIgUEhZIEZvdXJ3aXJlIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfRk9VUldJUkVfREFUQV9ISQkJQjQzX1BIWV9DQ0soMHgwQykgLyogQiBQSFkgRm91cndpcmUgRGF0YSBIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfQl9GT1VSV0lSRV9EQVRBX0xPCQlCNDNfUEhZX0NDSygweDBEKSAvKiBCIFBIWSBGb3Vyd2lyZSBEYXRhIExvICovCisjZGVmaW5lIEI0M19MUFBIWV9CX0JJU1RfU1RBVAkJCUI0M19QSFlfQ0NLKDB4MEUpIC8qIEIgUEhZIEJpc3QgU3RhdHVzICovCisjZGVmaW5lIEI0M19MUFBIWV9QQV9SQU1QX1RYX1RPCQkJQjQzX1BIWV9DQ0soMHgxMCkgLyogUEEgUmFtcCBUWCBUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9SRl9TWU5USF9EQ19USU1FUgkJQjQzX1BIWV9DQ0soMHgxMSkgLyogUkYgU3ludGggREMgVGltZXIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BBX1JBTVBfVFhfVElNRV9JTgkJQjQzX1BIWV9DQ0soMHgxMikgLyogUEEgcmFtcCBUWCBUaW1lIGluICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9GSUxURVJfVElNRV9JTgkJQjQzX1BIWV9DQ0soMHgxMykgLyogUlggRmlsdGVyIFRpbWUgaW4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BMTF9DT0VGRl9TCQkJQjQzX1BIWV9DQ0soMHgxOCkgLyogUExMIENvZWZmaWNpZW50KHMpICovCisjZGVmaW5lIEI0M19MUFBIWV9QTExfT1VUCQkJQjQzX1BIWV9DQ0soMHgxOSkgLyogUExMIE91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfUlNTSV9USFJFUwkJCUI0M19QSFlfQ0NLKDB4MjApIC8qIFJTU0kgVGhyZXNob2xkICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9USFJFU19ISAkJCUI0M19QSFlfQ0NLKDB4MjEpIC8qIElRIFRocmVzaG9sZCBISCAqLworI2RlZmluZSBCNDNfTFBQSFlfSVFfVEhSRVNfSAkJCUI0M19QSFlfQ0NLKDB4MjIpIC8qIElRIFRocmVzaG9sZCBIICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9USFJFU19MCQkJQjQzX1BIWV9DQ0soMHgyMykgLyogSVEgVGhyZXNob2xkIEwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1RIUkVTX0xMCQkJQjQzX1BIWV9DQ0soMHgyNCkgLyogSVEgVGhyZXNob2xkIExMICovCisjZGVmaW5lIEI0M19MUFBIWV9BR0NfR0FJTgkJCUI0M19QSFlfQ0NLKDB4MjUpIC8qIEFHQyBHYWluICovCisjZGVmaW5lIEI0M19MUFBIWV9MTkFfR0FJTl9SQU5HRQkJQjQzX1BIWV9DQ0soMHgyNikgLyogTE5BIEdhaW4gUmFuZ2UgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0pTU0kJCQkJQjQzX1BIWV9DQ0soMHgyNykgLyogSlNTSSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFNTSV9DVEwJCQlCNDNfUEhZX0NDSygweDI4KSAvKiBUU1NJIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RTU0kJCQkJQjQzX1BIWV9DQ0soMHgyOSkgLyogVFNTSSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9TUwkJCUI0M19QSFlfQ0NLKDB4MkEpIC8qIFRSIExvc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPX0xFQUtBR0UJCQlCNDNfUEhZX0NDSygweDJCKSAvKiBMTyBMZWFrYWdlICovCisjZGVmaW5lIEI0M19MUFBIWV9MT19SU1NJQUNDCQkJQjQzX1BIWV9DQ0soMHgyQykgLyogTE8gUlNTSUFjYyAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9fSVFfTUFHX0FDQwkJCUI0M19QSFlfQ0NLKDB4MkQpIC8qIExPIElRIE1hZyBBY2MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX0RDT0ZGU0VUMQkJCUI0M19QSFlfQ0NLKDB4MkUpIC8qIFRYIERDT2Zmc2V0MSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfRENPRkZTRVQyCQkJQjQzX1BIWV9DQ0soMHgyRikgLyogVFggRENPZmZzZXQyICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DUEVBS0NOVAkJCUI0M19QSFlfQ0NLKDB4MzApIC8qIFN5bmNQZWFrQ250ICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DRlJFUQkJCUI0M19QSFlfQ0NLKDB4MzEpIC8qIFN5bmNGcmVxICovCisjZGVmaW5lIEI0M19MUFBIWV9TWU5DRElWRVJTSVRZQ1RMCQlCNDNfUEhZX0NDSygweDMyKSAvKiBTeW5jRGl2ZXJzaXR5Q29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUEVBS0VORVJHWUwJCQlCNDNfUEhZX0NDSygweDMzKSAvKiBQZWFrRW5lcmd5TCAqLworI2RlZmluZSBCNDNfTFBQSFlfUEVBS0VORVJHWUgJCQlCNDNfUEhZX0NDSygweDM0KSAvKiBQZWFrRW5lcmd5SCAqLworI2RlZmluZSBCNDNfTFBQSFlfU1lOQ0NUTAkJCUI0M19QSFlfQ0NLKDB4MzUpIC8qIFN5bmNDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTU1RFUAkJCUI0M19QSFlfQ0NLKDB4MzgpIC8qIERzc3NTdGVwICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTV0FSTVVQCQkJQjQzX1BIWV9DQ0soMHgzOSkgLyogRHNzc1dhcm11cCAqLworI2RlZmluZSBCNDNfTFBQSFlfRFNTU1NJR1BPVwkJCUI0M19QSFlfQ0NLKDB4M0QpIC8qIERzc3NTaWdQb3cgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NGRERFVEVDVEJMT0NLVElNRQkJQjQzX1BIWV9DQ0soMHg0MCkgLyogU2ZkRGV0ZWN0QmxvY2tUSW1lICovCisjZGVmaW5lIEI0M19MUFBIWV9TRkRUTwkJCQlCNDNfUEhZX0NDSygweDQxKSAvKiBTRkRUaW1lT3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9TRkRDVEwJCQlCNDNfUEhZX0NDSygweDQyKSAvKiBTRkRDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SWERCRwkJCQlCNDNfUEhZX0NDSygweDQzKSAvKiByeERlYnVnICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9ERUxBWUNPTVAJCQlCNDNfUEhZX0NDSygweDQ0KSAvKiBSWCBEZWxheUNvbXAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NSU0RST1BPVVRUTwkJCUI0M19QSFlfQ0NLKDB4NDUpIC8qIENSU0Ryb3BvdXRUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9QU0VVRE9TSE9SVFRPCQkJQjQzX1BIWV9DQ0soMHg0NikgLyogUHNldWRvU2hvcnRUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9QUjM5MzEJCQlCNDNfUEhZX0NDSygweDQ3KSAvKiBQUjM5MzEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NDT0VGRjEJCQlCNDNfUEhZX0NDSygweDQ4KSAvKiBEU1NTQ29lZmYxICovCisjZGVmaW5lIEI0M19MUFBIWV9EU1NTQ09FRkYyCQkJQjQzX1BIWV9DQ0soMHg0OSkgLyogRFNTU0NvZWZmMiAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLQ09FRkYxCQkJQjQzX1BIWV9DQ0soMHg0QSkgLyogQ0NLQ29lZmYxICovCisjZGVmaW5lIEI0M19MUFBIWV9DQ0tDT0VGRjIJCQlCNDNfUEhZX0NDSygweDRCKSAvKiBDQ0tDb2VmZjIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSQ09SUgkJCUI0M19QSFlfQ0NLKDB4NEMpIC8qIFRSQ29yciAqLworI2RlZmluZSBCNDNfTFBQSFlfQU5HTEVTQ0FMRQkJCUI0M19QSFlfQ0NLKDB4NEQpIC8qIEFuZ2xlU2NhbGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09QVElPTkFMTU9ERVMyCQlCNDNfUEhZX0NDSygweDRGKSAvKiBPcHRpb25hbE1vZGVzMiAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLTE1TU1RFUFNJWkUJCUI0M19QSFlfQ0NLKDB4NTApIC8qIENDS0xNU1N0ZXBTaXplICovCisjZGVmaW5lIEI0M19MUFBIWV9ERkVCWVBBU1MJCQlCNDNfUEhZX0NDSygweDUxKSAvKiBERkVCeXBhc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NDS1NUQVJUREVMQVlMT05HCQlCNDNfUEhZX0NDSygweDUyKSAvKiBDQ0tTdGFydERlbGF5TG9uZyAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0NLU1RBUlRERUxBWVNIT1JUCQlCNDNfUEhZX0NDSygweDUzKSAvKiBDQ0tTdGFydERlbGF5U2hvcnQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BQUk9DQ0hERUxBWQkJCUI0M19QSFlfQ0NLKDB4NTQpIC8qIFBwcm9jQ2hEZWxheSAqLworI2RlZmluZSBCNDNfTFBQSFlfUFBST0NPTk9GRgkJCUI0M19QSFlfQ0NLKDB4NTUpIC8qIFBQcm9jT25PZmYgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xOQUdBSU5UV09CSVQxMAkJQjQzX1BIWV9DQ0soMHg1QikgLyogTE5BR2FpblR3b0JpdDEwICovCisjZGVmaW5lIEI0M19MUFBIWV9MTkFHQUlOVFdPQklUMzIJCUI0M19QSFlfQ0NLKDB4NUMpIC8qIExOQUdhaW5Ud29CaXQzMiAqLworI2RlZmluZSBCNDNfTFBQSFlfT1BUSU9OQUxNT0RFUwkJCUI0M19QSFlfQ0NLKDB4NUQpIC8qIE9wdGlvbmFsTW9kZXMgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JfUlhfU1RBVDIJCQlCNDNfUEhZX0NDSygweDVFKSAvKiBCIFBIWSBSWCBTdGF0dXMyICovCisjZGVmaW5lIEI0M19MUFBIWV9CX1JYX1NUQVQzCQkJQjQzX1BIWV9DQ0soMHg1RikgLyogQiBQSFkgUlggU3RhdHVzMyAqLworI2RlZmluZSBCNDNfTFBQSFlfUFdETkRBQ0RFTEFZCQkJQjQzX1BIWV9DQ0soMHg2MykgLyogcHdkbkRhY0RlbGF5ICovCisjZGVmaW5lIEI0M19MUFBIWV9GSU5FRElHSUdBSU5fQ1RMCQlCNDNfUEhZX0NDSygweDY3KSAvKiBGaW5lRGlnaUdhaW4gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfTEcyR0FJTlRCTExOQTgJCUI0M19QSFlfQ0NLKDB4NjgpIC8qIExnMkdhaW5UYmxMTkE4ICovCisjZGVmaW5lIEI0M19MUFBIWV9MRzJHQUlOVEJMTE5BMjgJCUI0M19QSFlfQ0NLKDB4NjkpIC8qIExnMkdhaW5UYmxMTkEyOCAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTlRCTExOQVRSU1cJCUI0M19QSFlfQ0NLKDB4NkEpIC8qIEdhaW5UYmxMTkFUclN3ICovCisjZGVmaW5lIEI0M19MUFBIWV9QRUFLRU5FUkdZCQkJQjQzX1BIWV9DQ0soMHg2QikgLyogUGVha0VuZXJneSAqLworI2RlZmluZSBCNDNfTFBQSFlfTEcySU5JVEdBSU4JCQlCNDNfUEhZX0NDSygweDZDKSAvKiBsZzJJbml0R2FpbiAqLworI2RlZmluZSBCNDNfTFBQSFlfQkxBTktDT1VOVExOQVBHQQkJQjQzX1BIWV9DQ0soMHg2RCkgLyogQmxhbmtDb3VudExuYVBnYSAqLworI2RlZmluZSBCNDNfTFBQSFlfTE5BR0FJTlRXT0JJVDU0CQlCNDNfUEhZX0NDSygweDZFKSAvKiBMTkFHYWluVHdvQml0NTQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xOQUdBSU5UV09CSVQ3NgkJQjQzX1BIWV9DQ0soMHg2RikgLyogTE5BR2FpblR3b0JpdDc2ICovCisjZGVmaW5lIEI0M19MUFBIWV9KU1NJQ1RMCQkJQjQzX1BIWV9DQ0soMHg3MCkgLyogSlNTSUNvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xHMkdBSU5UQkxMTkE0NAkJQjQzX1BIWV9DQ0soMHg3MSkgLyogTGcyR2FpblRibExOQTQ0ICovCisjZGVmaW5lIEI0M19MUFBIWV9MRzJHQUlOVEJMTE5BNjIJCUI0M19QSFlfQ0NLKDB4NzIpIC8qIExnMkdhaW5UYmxMTkE2MiAqLworCisvKiBUaGUgT0ZETSBQSFkgcmVnaXN0ZXIgcmFuZ2UuICovCisjZGVmaW5lIEI0M19MUFBIWV9WRVJTSU9OCQkJQjQzX1BIWV9PRkRNKDB4MDApIC8qIFZlcnNpb24gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JCQ09ORklHCQkJQjQzX1BIWV9PRkRNKDB4MDEpIC8qIEJCQ29uZmlnICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9TVEFUMAkJCUI0M19QSFlfT0ZETSgweDA0KSAvKiBSWCBTdGF0dXMwICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9TVEFUMQkJCUI0M19QSFlfT0ZETSgweDA1KSAvKiBSWCBTdGF0dXMxICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9FUlJPUgkJCUI0M19QSFlfT0ZETSgweDA3KSAvKiBUWCBFcnJvciAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0hBTk5FTAkJCUI0M19QSFlfT0ZETSgweDA4KSAvKiBDaGFubmVsICovCisjZGVmaW5lIEI0M19MUFBIWV9XT1JLQVJPVU5ECQkJQjQzX1BIWV9PRkRNKDB4MDkpIC8qIHdvcmthcm91bmQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0ZPVVJXSVJFX0FERFIJCQlCNDNfUEhZX09GRE0oMHgwQikgLyogRm91cndpcmUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfRk9VUldJUkVEQVRBSEkJCUI0M19QSFlfT0ZETSgweDBDKSAvKiBGb3Vyd2lyZURhdGFIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfRk9VUldJUkVEQVRBTE8JCUI0M19QSFlfT0ZETSgweDBEKSAvKiBGb3Vyd2lyZURhdGFMbyAqLworI2RlZmluZSBCNDNfTFBQSFlfQklTVFNUQVQwCQkJQjQzX1BIWV9PRkRNKDB4MEUpIC8qIEJpc3RTdGF0dXMwICovCisjZGVmaW5lIEI0M19MUFBIWV9CSVNUU1RBVDEJCQlCNDNfUEhZX09GRE0oMHgwRikgLyogQmlzdFN0YXR1czEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NSU0dBSU5fQ1RMCQkJQjQzX1BIWV9PRkRNKDB4MTApIC8qIGNyc2dhaW4gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZETVBXUl9USFJFU0gwCQlCNDNfUEhZX09GRE0oMHgxMSkgLyogb2ZkbVBvd2VyIFRocmVzaDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1QV1JfVEhSRVNIMQkJQjQzX1BIWV9PRkRNKDB4MTIpIC8qIG9mZG1Qb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkRNUFdSX1RIUkVTSDIJCUI0M19QSFlfT0ZETSgweDEzKSAvKiBvZmRtUG93ZXIgVGhyZXNoMiAqLworI2RlZmluZSBCNDNfTFBQSFlfRFNTU1BXUl9USFJFU0gwCQlCNDNfUEhZX09GRE0oMHgxNCkgLyogZHNzc1Bvd2VyIFRocmVzaDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NQV1JfVEhSRVNIMQkJQjQzX1BIWV9PRkRNKDB4MTUpIC8qIGRzc3NQb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9NSU5QV1JfTEVWRUwJCQlCNDNfUEhZX09GRE0oMHgxNikgLyogTWluUG93ZXIgTGV2ZWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1TWU5DVEhSRVNIMAkJQjQzX1BIWV9PRkRNKDB4MTcpIC8qIG9mZG1TeW5jVGhyZXNoMCAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZETVNZTkNUSFJFU0gxCQlCNDNfUEhZX09GRE0oMHgxOCkgLyogb2ZkbVN5bmNUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9GSU5FRlJFUUVTVAkJCUI0M19QSFlfT0ZETSgweDE5KSAvKiBGaW5lRnJlcUVzdCAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRUFGVEVSUEtUUlhUTwkJQjQzX1BIWV9PRkRNKDB4MUEpIC8qIElETEVhZnRlclBrdFJYVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfTFRSTl9DVEwJCQlCNDNfUEhZX09GRE0oMHgxQikgLyogTFRSTiBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9EQ09GRlNFVFRSQU5TSUVOVAkJQjQzX1BIWV9PRkRNKDB4MUMpIC8qIERDT2Zmc2V0VHJhbnNpZW50ICovCisjZGVmaW5lIEI0M19MUFBIWV9QUkVBTUJMRUlOVE8JCQlCNDNfUEhZX09GRE0oMHgxRCkgLyogUHJlYW1ibGVJblRpbWVvdXQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BSRUFNQkxFQ09ORklSTVRPCQlCNDNfUEhZX09GRE0oMHgxRSkgLyogUHJlYW1ibGVDb25maXJtVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0xJUFRIUkVTSAkJCUI0M19QSFlfT0ZETSgweDFGKSAvKiBDbGlwVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9DTElQQ1RSVEhSRVNICQkJQjQzX1BIWV9PRkRNKDB4MjApIC8qIENsaXBDdHJUaHJlc2ggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1TWU5DVElNRVJfQ1RMCQlCNDNfUEhZX09GRE0oMHgyMSkgLyogb2ZkbVN5bmNUaW1lciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9XQUlURk9SUEhZU0VMVE8JCUI0M19QSFlfT0ZETSgweDIyKSAvKiBXYWl0Zm9yUEhZU2VsVGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfSElHQUlOREIJCQlCNDNfUEhZX09GRE0oMHgyMykgLyogSGlHYWluREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPV0dBSU5EQgkJCUI0M19QSFlfT0ZETSgweDI0KSAvKiBMb3dHYWluREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1ZFUllMT1dHQUlOREIJCQlCNDNfUEhZX09GRE0oMHgyNSkgLyogVmVyeUxvd0dhaW5EQiAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTk1JU01BVENICQkJQjQzX1BIWV9PRkRNKDB4MjYpIC8qIGdhaW5NaXNtYXRjaCAqLworI2RlZmluZSBCNDNfTFBQSFlfR0FJTkRJUkVDVE1JU01BVENICQlCNDNfUEhZX09GRE0oMHgyNykgLyogZ2FpbmRpcmVjdE1pc21hdGNoICovCisjZGVmaW5lIEI0M19MUFBIWV9QV1JfVEhSRVNIMAkJCUI0M19QSFlfT0ZETSgweDI4KSAvKiBQb3dlciBUaHJlc2gwICovCisjZGVmaW5lIEI0M19MUFBIWV9QV1JfVEhSRVNIMQkJCUI0M19QSFlfT0ZETSgweDI5KSAvKiBQb3dlciBUaHJlc2gxICovCisjZGVmaW5lIEI0M19MUFBIWV9ERVRFQ1RPUl9ERUxBWV9BREpVU1QJCUI0M19QSFlfT0ZETSgweDJBKSAvKiBEZXRlY3RvciBEZWxheSBBZGp1c3QgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JFRFVDRURfREVURUNUT1JfREVMQVkJQjQzX1BIWV9PRkRNKDB4MkIpIC8qIFJlZHVjZWQgRGV0ZWN0b3IgRGVsYXkgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RBVEFfVE8JCQlCNDNfUEhZX09GRE0oMHgyQykgLyogZGF0YSBUaW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9DT1JSRUxBVE9SX0RJU19ERUxBWQkJQjQzX1BIWV9PRkRNKDB4MkQpIC8qIGNvcnJlbGF0b3IgRGlzIERlbGF5ICovCisjZGVmaW5lIEI0M19MUFBIWV9ESVZFUlNJVFlfR0FJTkJBQ0sJCUI0M19QSFlfT0ZETSgweDJFKSAvKiBEaXZlcnNpdHkgR2FpbkJhY2sgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RTU1NfQ09ORklSTV9DTlQJCUI0M19QSFlfT0ZETSgweDJGKSAvKiBEU1NTIENvbmZpcm0gQ250ICovCisjZGVmaW5lIEI0M19MUFBIWV9EQ19CTEFOS19JTlQJCQlCNDNfUEhZX09GRE0oMHgzMCkgLyogREMgQmxhbmsgSW50ZXJ2YWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0dBSU5fTUlTTUFUQ0hfTElNSVQJCUI0M19QSFlfT0ZETSgweDMxKSAvKiBnYWluIE1pc21hdGNoIExpbWl0ICovCisjZGVmaW5lIEI0M19MUFBIWV9DUlNfRURfVEhSRVNICQkJQjQzX1BIWV9PRkRNKDB4MzIpIC8qIGNycyBlZCB0aHJlc2ggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BIQVNFX1NISUZUX0NUTAkJQjQzX1BIWV9PRkRNKDB4MzMpIC8qIHBoYXNlIHNoaWZ0IENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lOUFVUX1BXUkRCCQkJQjQzX1BIWV9PRkRNKDB4MzQpIC8qIElucHV0IFBvd2VyREIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRE1fU1lOQ19DVEwJCQlCNDNfUEhZX09GRE0oMHgzNSkgLyogb2ZkbSBzeW5jIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzAJCQlCNDNfUEhZX09GRE0oMHgzNikgLyogQWZlIEFEQyBDb250cm9sIDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzEJCQlCNDNfUEhZX09GRE0oMHgzNykgLyogQWZlIEFEQyBDb250cm9sIDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9BRENfQ1RMXzIJCQlCNDNfUEhZX09GRE0oMHgzOCkgLyogQWZlIEFEQyBDb250cm9sIDIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9EQUNfQ1RMCQkJQjQzX1BIWV9PRkRNKDB4MzkpIC8qIEFmZSBEQUMgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0NUTAkJCUI0M19QSFlfT0ZETSgweDNBKSAvKiBBZmUgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0NUTF9PVlIJCQlCNDNfUEhZX09GRE0oMHgzQikgLyogQWZlIENvbnRyb2wgT3ZyICovCisjZGVmaW5lIEI0M19MUFBIWV9BRkVfQ1RMX09WUlZBTAkJQjQzX1BIWV9PRkRNKDB4M0MpIC8qIEFmZSBDb250cm9sIE92clZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX1JTU0lfQ1RMXzAJCUI0M19QSFlfT0ZETSgweDNEKSAvKiBBZmUgUlNTSSBDb250cm9sIDAgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9SU1NJX0NUTF8xCQlCNDNfUEhZX09GRE0oMHgzRSkgLyogQWZlIFJTU0kgQ29udHJvbCAxICovCisjZGVmaW5lIEI0M19MUFBIWV9BRkVfUlNTSV9TRUwJCQlCNDNfUEhZX09GRE0oMHgzRikgLyogQWZlIFJTU0kgU2VsICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9USFJFU0gJCQlCNDNfUEhZX09GRE0oMHg0MCkgLyogUmFkYXIgVGhyZXNoICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9CTEFOS19JTlQJCUI0M19QSFlfT0ZETSgweDQxKSAvKiBSYWRhciBibGFuayBJbnRlcnZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfTUlOX0ZNX0lOVAkJQjQzX1BIWV9PRkRNKDB4NDIpIC8qIFJhZGFyIG1pbiBmbSBJbnRlcnZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfR0FJTl9UTwkJCUI0M19QSFlfT0ZETSgweDQzKSAvKiBSYWRhciBnYWluIHRpbWVvdXQgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JBREFSX1BVTFNFX1RPCQlCNDNfUEhZX09GRE0oMHg0NCkgLyogUmFkYXIgcHVsc2UgdGltZW91dCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkFEQVJfREVURUNUX0ZNX0NUTAkJQjQzX1BIWV9PRkRNKDB4NDUpIC8qIFJhZGFyIGRldGVjdCBGTSBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9ERVRFQ1RfRU4JCUI0M19QSFlfT0ZETSgweDQ2KSAvKiBSYWRhciBkZXRlY3QgRW4gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JBREFSX1JEX0RBVEFfUkVHCQlCNDNfUEhZX09GRE0oMHg0NykgLyogUmFkYXIgUmQgRGF0YSBSZWcgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xQX1BIWV9DVEwJCQlCNDNfUEhZX09GRE0oMHg0OCkgLyogTFAgUEhZIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NMQVNTSUZJRVJfQ1RMCQlCNDNfUEhZX09GRE0oMHg0OSkgLyogY2xhc3NpZmllciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9SRVNFVF9DVEwJCQlCNDNfUEhZX09GRE0oMHg0QSkgLyogcmVzZXQgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ0xLRU5fQ1RMCQkJQjQzX1BIWV9PRkRNKDB4NEIpIC8qIENsa0VuIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JGX09WRVJSSURFXzAJCQlCNDNfUEhZX09GRE0oMHg0QykgLyogUkYgT3ZlcnJpZGUgMCAqLworI2RlZmluZSBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfVkFMXzAJCUI0M19QSFlfT0ZETSgweDREKSAvKiBSRiBPdmVycmlkZSBWYWwgMCAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJfTE9PS1VQXzEJCQlCNDNfUEhZX09GRE0oMHg0RSkgLyogVFIgTG9va3VwIDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RSX0xPT0tVUF8yCQkJQjQzX1BIWV9PRkRNKDB4NEYpIC8qIFRSIExvb2t1cCAyICovCisjZGVmaW5lIEI0M19MUFBIWV9SU1NJU0VMTE9PS1VQMQkJQjQzX1BIWV9PRkRNKDB4NTApIC8qIFJzc2lTZWxMb29rdXAxICovCisjZGVmaW5lIEI0M19MUFBIWV9JUUxPX0NBTF9DTUQJCQlCNDNfUEhZX09GRE0oMHg1MSkgLyogaXFsbyBDYWwgQ21kICovCisjZGVmaW5lIEI0M19MUFBIWV9JUUxPX0NBTF9DTURfTl9OVU0JCUI0M19QSFlfT0ZETSgweDUyKSAvKiBpcWxvIENhbCBDbWQgTiBudW0gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRTE9fQ0FMX0NNRF9HX0NUTAkJQjQzX1BIWV9PRkRNKDB4NTMpIC8qIGlxbG8gQ2FsIENtZCBHIGNvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX01BQ0lOVF9EQkdfUkVHSVNURVIJCUI0M19QSFlfT0ZETSgweDU0KSAvKiBtYWNpbnQgRGVidWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RBQkxFX0FERFIJCQlCNDNfUEhZX09GRE0oMHg1NSkgLyogVGFibGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVEFCTEVEQVRBTE8JCQlCNDNfUEhZX09GRE0oMHg1NikgLyogVGFibGVkYXRhTG8gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RBQkxFREFUQUhJCQkJQjQzX1BIWV9PRkRNKDB4NTcpIC8qIFRhYmxlZGF0YUhpICovCisjZGVmaW5lIEI0M19MUFBIWV9QSFlfQ1JTX0VOQUJMRV9BRERSCQlCNDNfUEhZX09GRE0oMHg1OCkgLyogcGh5IENSUyBFbmFibGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRVRJTUVfQ1RMCQkJQjQzX1BIWV9PRkRNKDB4NTkpIC8qIElkbGV0aW1lIENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lETEVUSU1FX0NSU19PTl9MTwkJQjQzX1BIWV9PRkRNKDB4NUEpIC8qIElkbGV0aW1lIENSUyBPbiBMbyAqLworI2RlZmluZSBCNDNfTFBQSFlfSURMRVRJTUVfQ1JTX09OX0hJCQlCNDNfUEhZX09GRE0oMHg1QikgLyogSWRsZXRpbWUgQ1JTIE9uIEhpICovCisjZGVmaW5lIEI0M19MUFBIWV9JRExFVElNRV9NRUFTX1RJTUVfTE8JCUI0M19QSFlfT0ZETSgweDVDKSAvKiBJZGxldGltZSBNZWFzIFRpbWUgTG8gKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lETEVUSU1FX01FQVNfVElNRV9ISQkJQjQzX1BIWV9PRkRNKDB4NUQpIC8qIElkbGV0aW1lIE1lYXMgVGltZSBIaSAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVTRVRfTEVOX09GRE1fVFhfQUREUglCNDNfUEhZX09GRE0oMHg1RSkgLyogUmVzZXQgbGVuIE9mZG0gVFggQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVTRVRfTEVOX09GRE1fUlhfQUREUglCNDNfUEhZX09GRE0oMHg1RikgLyogUmVzZXQgbGVuIE9mZG0gUlggQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVHX0NSU19FTkFCTEUJCUI0M19QSFlfT0ZETSgweDYwKSAvKiByZWcgY3JzIGVuYWJsZSAqLworI2RlZmluZSBCNDNfTFBQSFlfUExDUF9UTVRfU1RSMF9DVFJfTUlOCQlCNDNfUEhZX09GRE0oMHg2MSkgLyogUExDUCBUbXQgU3RyMCBDdHIgTWluICovCisjZGVmaW5lIEI0M19MUFBIWV9QS1RfRlNNX1JFU0VUX0xFTl9WQUwJCUI0M19QSFlfT0ZETSgweDYyKSAvKiBQa3QgZnNtIFJlc2V0IExlbiBWYWx1ZSAqLworI2RlZmluZSBCNDNfTFBQSFlfUkVBRFNZTTJSRVNFVF9DVEwJCUI0M19QSFlfT0ZETSgweDYzKSAvKiByZWFkc3ltMnJlc2V0IENvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0RDX0ZJTFRFUl9ERUxBWTEJCUI0M19QSFlfT0ZETSgweDY0KSAvKiBEYyBmaWx0ZXIgZGVsYXkxICovCisjZGVmaW5lIEI0M19MUFBIWV9QQUNLRVRfUlhfQUNUSVZFX1RPCQlCNDNfUEhZX09GRE0oMHg2NSkgLyogcGFja2V0IHJ4IEFjdGl2ZSB0aW1lb3V0ICovCisjZGVmaW5lIEI0M19MUFBIWV9FRF9UT1ZBTAkJCUI0M19QSFlfT0ZETSgweDY2KSAvKiBlZCB0aW1lb3V0VmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0hPTERfQ1JTX09OX1ZBTAkJQjQzX1BIWV9PRkRNKDB4NjcpIC8qIGhvbGQgQ1JTIE9uIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkRNX1RYX1BIWV9DUlNfREVMQVlfVkFMCUI0M19QSFlfT0ZETSgweDY5KSAvKiBvZmRtIHR4IHBoeSBDUlMgRGVsYXkgVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0NDS19UWF9QSFlfQ1JTX0RFTEFZX1ZBTAlCNDNfUEhZX09GRE0oMHg2QSkgLyogY2NrIHR4IHBoeSBDUlMgRGVsYXkgVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0VEX09OX0NPTkZJUk1fVElNRVJfVkFMCUI0M19QSFlfT0ZETSgweDZCKSAvKiBFZCBvbiBjb25maXJtIFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9FRF9PRkZTRVRfQ09ORklSTV9USU1FUl9WQUwJQjQzX1BIWV9PRkRNKDB4NkMpIC8qIEVkIG9mZnNldCBjb25maXJtIFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9QSFlfQ1JTX09GRlNFVF9USU1FUl9WQUwJQjQzX1BIWV9PRkRNKDB4NkQpIC8qIHBoeSBDUlMgb2Zmc2V0IFRpbWVyIFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9BRENfQ09NUEVOU0FUSU9OX0NUTAkJQjQzX1BIWV9PRkRNKDB4NzApIC8qIEFEQyBDb21wZW5zYXRpb24gQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9HMl9SQlBTS19BRERSCQlCNDNfUEhZX09GRE0oMHg3MSkgLyogbG9nMiBSQlBTSyBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9MT0cyX1JRUFNLX0FERFIJCUI0M19QSFlfT0ZETSgweDcyKSAvKiBsb2cyIFJRUFNLIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0xPRzJfUjE2UUFNX0FERFIJCUI0M19QSFlfT0ZETSgweDczKSAvKiBsb2cyIFIxNlFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9MT0cyX1I2NFFBTV9BRERSCQlCNDNfUEhZX09GRE0oMHg3NCkgLyogbG9nMiBSNjRRQU0gQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfT0ZGU0VUX0JQU0tfQUREUgkJQjQzX1BIWV9PRkRNKDB4NzUpIC8qIG9mZnNldCBCUFNLIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX09GRlNFVF9RUFNLX0FERFIJCUI0M19QSFlfT0ZETSgweDc2KSAvKiBvZmZzZXQgUVBTSyBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkZTRVRfMTZRQU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4NzcpIC8qIG9mZnNldCAxNlFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9PRkZTRVRfNjRRQU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4NzgpIC8qIG9mZnNldCA2NFFBTSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9BTFBIQTEJCQlCNDNfUEhZX09GRE0oMHg3OSkgLyogQWxwaGExICovCisjZGVmaW5lIEI0M19MUFBIWV9BTFBIQTIJCQlCNDNfUEhZX09GRE0oMHg3QSkgLyogQWxwaGEyICovCisjZGVmaW5lIEI0M19MUFBIWV9CRVRBMQkJCQlCNDNfUEhZX09GRE0oMHg3QikgLyogQmV0YTEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0JFVEEyCQkJCUI0M19QSFlfT0ZETSgweDdDKSAvKiBCZXRhMiAqLworI2RlZmluZSBCNDNfTFBQSFlfTE9PUF9OVU1fQUREUgkJCUI0M19QSFlfT0ZETSgweDdEKSAvKiBMb29wIE51bSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9TVFJfQ09MTE1BWF9TTVBMX0FERFIJCUI0M19QSFlfT0ZETSgweDdFKSAvKiBTdHIgQ29sbG1heCBTYW1wbGUgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTUFYX1NNUExfQ09BUlNFX0ZJTkVfQUREUglCNDNfUEhZX09GRE0oMHg3RikgLyogTWF4IFNhbXBsZSBDb2Fyc2UvRmluZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9NQVhfU01QTF9DT0FSU0VfU1RSMENUUl9BRERSCUI0M19QSFlfT0ZETSgweDgwKSAvKiBNYXggU2FtcGxlIENvYXJzZS9TdHIwQ3RyIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0VOQUJMRV9XQUlUX1RJTUVfQUREUglCNDNfUEhZX09GRE0oMHg4MSkgLyogSVEgRW5hYmxlIFdhaXQgVGltZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9JUV9OVU1fU01QTFNfQUREUgkJQjQzX1BIWV9PRkRNKDB4ODIpIC8qIElRIE51bSBTYW1wbGVzIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4MykgLyogSVEgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4NCkgLyogSVEgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0lfUFdSX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4NSkgLyogSVEgSSBQV1IgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX0lfUFdSX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4NikgLyogSVEgSSBQV1IgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1FfUFdSX0FDQ19ISV9BRERSCQlCNDNfUEhZX09GRE0oMHg4NykgLyogSVEgUSBQV1IgQWNjIEhpIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0lRX1FfUFdSX0FDQ19MT19BRERSCQlCNDNfUEhZX09GRE0oMHg4OCkgLyogSVEgUSBQV1IgQWNjIExvIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX01BWE5VTVNURVBTCQkJQjQzX1BIWV9PRkRNKDB4ODkpIC8qIE1heE51bXN0ZXBzICovCisjZGVmaW5lIEI0M19MUFBIWV9ST1RPUlBIQVNFX0FERFIJCUI0M19QSFlfT0ZETSgweDhBKSAvKiBSb3RvclBoYXNlIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FEVkFOQ0VEUkVUQVJEUk9UT1JfQUREUglCNDNfUEhZX09GRE0oMHg4QikgLyogQWR2YW5jZWRSZXRhcmRSb3RvciBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9SU1NJQURDREVMQVlfQ1RMX0FERFIJCUI0M19QSFlfT0ZETSgweDhEKSAvKiByc3NpQWRjZGVsYXkgQ29udHJvbCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9UU1NJU1RBVF9BRERSCQkJQjQzX1BIWV9PRkRNKDB4OEUpIC8qIHRzc2lTdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVEVNUFNFTlNFU1RBVF9BRERSCQlCNDNfUEhZX09GRE0oMHg4RikgLyogdGVtcHNlbnNlU3RhdHVzIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RFTVBTRU5TRV9DVExfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTApIC8qIHRlbXBzZW5zZSBDb250cm9sIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1dSU1NJU1RBVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5MSkgLyogd3Jzc2lzdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTVVGQUNUT1JBRERSCQkJQjQzX1BIWV9PRkRNKDB4OTIpIC8qIG11ZmFjdG9yYWRkciAqLworI2RlZmluZSBCNDNfTFBQSFlfU0NSQU1TVEFURV9BRERSCQlCNDNfUEhZX09GRE0oMHg5MykgLyogc2NyYW1zdGF0ZSBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9UWEhPTERPRkZBRERSCQkJQjQzX1BIWV9PRkRNKDB4OTQpIC8qIHR4aG9sZG9mZmFkZHIgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BLVEdBSU5WQUxfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTUpIC8qIHBrdGdhaW52YWwgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfQ09BUlNFRVNUSU1fQUREUgkJQjQzX1BIWV9PRkRNKDB4OTYpIC8qIENvYXJzZWVzdGltIEFkZHJlc3MgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NUQVRFX1RSQU5TSVRJT05fQUREUgkJQjQzX1BIWV9PRkRNKDB4OTcpIC8qIHN0YXRlIFRyYW5zaXRpb24gQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfVFJOX09GRlNFVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5OCkgLyogVFJOIG9mZnNldCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9OVU1fUk9UT1JfQUREUgkJQjQzX1BIWV9PRkRNKDB4OTkpIC8qIE51bSBSb3RvciBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9WSVRFUkJJX09GRlNFVF9BRERSCQlCNDNfUEhZX09GRE0oMHg5QSkgLyogVml0ZXJiaSBPZmZzZXQgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfU01QTF9DT0xMRUNUX1dBSVRfQUREUglCNDNfUEhZX09GRE0oMHg5QikgLyogU2FtcGxlIGNvbGxlY3Qgd2FpdCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9BX1BIWV9DVExfQUREUgkJQjQzX1BIWV9PRkRNKDB4OUMpIC8qIEEgUEhZIENvbnRyb2wgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfTlVNX1BBU1NfVEhST1VHSF9BRERSCQlCNDNfUEhZX09GRE0oMHg5RCkgLyogTnVtIFBhc3MgVGhyb3VnaCBBZGRyZXNzICovCisjZGVmaW5lIEI0M19MUFBIWV9SWF9DT01QX0NPRUZGX1MJCUI0M19QSFlfT0ZETSgweDlFKSAvKiBSWCBDb21wIGNvZWZmaWNpZW50KHMpICovCisjZGVmaW5lIEI0M19MUFBIWV9DUEFST1RBVEVWQUwJCQlCNDNfUEhZX09GRE0oMHg5RikgLyogY3BhUm90YXRlVmFsdWUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1NNUExfUExBWV9DT1VOVAkJQjQzX1BIWV9PRkRNKDB4QTApIC8qIFNhbXBsZSBwbGF5IGNvdW50ICovCisjZGVmaW5lIEI0M19MUFBIWV9TTVBMX1BMQVlfQlVGRkVSX0NUTAkJQjQzX1BIWV9PRkRNKDB4QTEpIC8qIFNhbXBsZSBwbGF5IEJ1ZmZlciBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9GT1VSV0lSRV9DVEwJCQlCNDNfUEhZX09GRE0oMHhBMikgLyogZm91cndpcmUgQ29udHJvbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQ1BBX1RBSUxDT1VOVF9WQUwJCUI0M19QSFlfT0ZETSgweEEzKSAvKiBDUEEgVGFpbENvdW50IFZhbHVlICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRAkJQjQzX1BIWV9PRkRNKDB4QTQpIC8qIFRYIFBvd2VyIENvbnRyb2wgQ21kICovCisjZGVmaW5lICBCNDNfTFBQSFlfVFhfUFdSX0NUTF9DTURfTU9ERQkJMHhFMDAwIC8qIFRYIHBvd2VyIGNvbnRyb2wgbW9kZSBtYXNrICovCisjZGVmaW5lICAgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfT0ZGCTB4MDAwMCAvKiBUWCBwb3dlciBjb250cm9sIGlzIE9GRiAqLworI2RlZmluZSAgIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0NNRF9NT0RFX1NXCTB4ODAwMCAvKiBUWCBwb3dlciBjb250cm9sIGlzIFNPRlRXQVJFICovCisjZGVmaW5lICAgQjQzX0xQUEhZX1RYX1BXUl9DVExfQ01EX01PREVfSFcJMHhFMDAwIC8qIFRYIHBvd2VyIGNvbnRyb2wgaXMgSEFSRFdBUkUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfTk5VTQkJQjQzX1BIWV9PRkRNKDB4QTUpIC8qIFRYIFBvd2VyIENvbnRyb2wgTm51bSAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9JRExFVFNTSQkJQjQzX1BIWV9PRkRNKDB4QTYpIC8qIFRYIFBvd2VyIENvbnRyb2wgSWRsZVRzc2kgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfVEFSR0VUUFdSCQlCNDNfUEhZX09GRE0oMHhBNykgLyogVFggUG93ZXIgQ29udHJvbCBUYXJnZXRQb3dlciAqLworI2RlZmluZSBCNDNfTFBQSFlfVFhfUFdSX0NUTF9ERUxUQVBXUl9MSU1JVAlCNDNfUEhZX09GRE0oMHhBOCkgLyogVFggUG93ZXIgQ29udHJvbCBEZWx0YVBvd2VyIExpbWl0ICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX0JBU0VJTkRFWAkJQjQzX1BIWV9PRkRNKDB4QTkpIC8qIFRYIFBvd2VyIENvbnRyb2wgQmFzZUluZGV4ICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9QV1JfQ1RMX1BXUl9JTkRFWAkJQjQzX1BIWV9PRkRNKDB4QUEpIC8qIFRYIFBvd2VyIENvbnRyb2wgUG93ZXIgSW5kZXggKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1RYX1BXUl9DVExfU1RBVAkJQjQzX1BIWV9PRkRNKDB4QUIpIC8qIFRYIFBvd2VyIENvbnRyb2wgU3RhdHVzICovCisjZGVmaW5lIEI0M19MUFBIWV9MUF9SRl9TSUdOQUxfTFVUCQlCNDNfUEhZX09GRE0oMHhBQykgLyogTFAgUkYgc2lnbmFsIExVVCAqLworI2RlZmluZSBCNDNfTFBQSFlfUlhfUkFESU9fQ1RMX0ZJTFRFUl9TVEFURQlCNDNfUEhZX09GRE0oMHhBRCkgLyogUlggUmFkaW8gQ29udHJvbCBGaWx0ZXIgU3RhdGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JYX1JBRElPX0NUTAkJCUI0M19QSFlfT0ZETSgweEFFKSAvKiBSWCBSYWRpbyBDb250cm9sICovCisjZGVmaW5lIEI0M19MUFBIWV9OUlNTSV9TVEFUX0FERFIJCUI0M19QSFlfT0ZETSgweEFGKSAvKiBOUlNTSSBzdGF0dXMgQWRkcmVzcyAqLworI2RlZmluZSBCNDNfTFBQSFlfUkZfT1ZFUlJJREVfMgkJCUI0M19QSFlfT0ZETSgweEIwKSAvKiBSRiBvdmVycmlkZSAyICovCisjZGVmaW5lIEI0M19MUFBIWV9SRl9PVkVSUklERV8yX1ZBTAkJQjQzX1BIWV9PRkRNKDB4QjEpIC8qIFJGIG92ZXJyaWRlIDIgdmFsICovCisjZGVmaW5lIEI0M19MUFBIWV9QU19DVExfT1ZFUlJJREVfVkFMMAkJQjQzX1BIWV9PRkRNKDB4QjIpIC8qIFBTIENvbnRyb2wgb3ZlcnJpZGUgdmFsMCAqLworI2RlZmluZSBCNDNfTFBQSFlfUFNfQ1RMX09WRVJSSURFX1ZBTDEJCUI0M19QSFlfT0ZETSgweEIzKSAvKiBQUyBDb250cm9sIG92ZXJyaWRlIHZhbDEgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1BTX0NUTF9PVkVSUklERV9WQUwyCQlCNDNfUEhZX09GRE0oMHhCNCkgLyogUFMgQ29udHJvbCBvdmVycmlkZSB2YWwyICovCisjZGVmaW5lIEI0M19MUFBIWV9UWF9HQUlOX0NUTF9PVkVSUklERV9WQUwJQjQzX1BIWV9PRkRNKDB4QjUpIC8qIFRYIGdhaW4gQ29udHJvbCBvdmVycmlkZSB2YWwgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX1JYX0dBSU5fQ1RMX09WRVJSSURFX1ZBTAlCNDNfUEhZX09GRE0oMHhCNikgLyogUlggZ2FpbiBDb250cm9sIG92ZXJyaWRlIHZhbCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0RERlMJCQlCNDNfUEhZX09GRE0oMHhCNykgLyogQUZFIERERlMgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0FGRV9EREZTX1BPSU5URVJfSU5JVAkJQjQzX1BIWV9PRkRNKDB4QjgpIC8qIEFGRSBEREZTIHBvaW50ZXIgaW5pdCAqLworI2RlZmluZSBCNDNfTFBQSFlfQUZFX0RERlNfSU5DUl9JTklUCQlCNDNfUEhZX09GRE0oMHhCOSkgLyogQUZFIERERlMgaW5jciBpbml0ICovCisjZGVmaW5lIEI0M19MUFBIWV9NUkNOT0lTRVJFRFVDVElPTgkJQjQzX1BIWV9PRkRNKDB4QkEpIC8qIG1yY05vaXNlUmVkdWN0aW9uICovCisjZGVmaW5lIEI0M19MUFBIWV9UUkxPT0tVUDMJCQlCNDNfUEhZX09GRE0oMHhCQikgLyogVFJMb29rdXAzICovCisjZGVmaW5lIEI0M19MUFBIWV9UUkxPT0tVUDQJCQlCNDNfUEhZX09GRE0oMHhCQykgLyogVFJMb29rdXA0ICovCisjZGVmaW5lIEI0M19MUFBIWV9SQURBUl9GSUZPX1NUQVQJCUI0M19QSFlfT0ZETSgweEJEKSAvKiBSYWRhciBGSUZPIFN0YXR1cyAqLworI2RlZmluZSBCNDNfTFBQSFlfR1BJT19PVVRFTgkJCUI0M19QSFlfT0ZETSgweEJFKSAvKiBHUElPIE91dCBlbmFibGUgKi8KKyNkZWZpbmUgQjQzX0xQUEhZX0dQSU9fU0VMRUNUCQkJQjQzX1BIWV9PRkRNKDB4QkYpIC8qIEdQSU8gU2VsZWN0ICovCisjZGVmaW5lIEI0M19MUFBIWV9HUElPX09VVAkJCUI0M19QSFlfT0ZETSgweEMwKSAvKiBHUElPIE91dCAqLwogCiAKKworLyogUmFkaW8gcmVnaXN0ZXIgYWNjZXNzIGRlY29yYXRvcnMuICovCiAjZGVmaW5lIEI0M19MUF9SQURJTyhyYWRpb19yZWcpCQkJKHJhZGlvX3JlZykKICNkZWZpbmUgQjQzX0xQX05PUlRIKHJhZGlvX3JlZykJCQlCNDNfTFBfUkFESU8ocmFkaW9fcmVnKQogI2RlZmluZSBCNDNfTFBfU09VVEgocmFkaW9fcmVnKQkJCUI0M19MUF9SQURJTygocmFkaW9fcmVnKSB8IDB4NDAwMCkKQEAgLTUyOSw4ICs4MDYsNTggQEAKIAogCiAKK2VudW0gYjQzX2xwcGh5X3R4cGN0bF9tb2RlIHsKKwlCNDNfTFBQSFlfVFhQQ1RMX1VOS05PV04gPSAwLAorCUI0M19MUFBIWV9UWFBDVExfT0ZGLAkvKiBUWCBwb3dlciBjb250cm9sIGlzIE9GRiAqLworCUI0M19MUFBIWV9UWFBDVExfU1csCS8qIFRYIHBvd2VyIGNvbnRyb2wgaXMgc2V0IHRvIFNvZnR3YXJlICovCisJQjQzX0xQUEhZX1RYUENUTF9IVywJLyogVFggcG93ZXIgY29udHJvbCBpcyBzZXQgdG8gSGFyZHdhcmUgKi8KK307CisKIHN0cnVjdCBiNDNfcGh5X2xwIHsKLQkvL1RPRE8KKwkvKiBDdXJyZW50IFRYIHBvd2VyIGNvbnRyb2wgbW9kZS4gKi8KKwllbnVtIGI0M19scHBoeV90eHBjdGxfbW9kZSB0eHBjdGxfbW9kZTsKKworCS8qIFRyYW5zbWl0IGlzb2xhdGlvbiBtZWRpdW0gYmFuZCAqLworCXU4IHR4X2lzb2xhdGlvbl9tZWRfYmFuZDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBUcmFuc21pdCBpc29sYXRpb24gbG93IGJhbmQgKi8KKwl1OCB0eF9pc29sYXRpb25fbG93X2JhbmQ7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJLyogVHJhbnNtaXQgaXNvbGF0aW9uIGhpZ2ggYmFuZCAqLworCXU4IHR4X2lzb2xhdGlvbl9oaV9iYW5kOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogUmVjZWl2ZSBwb3dlciBvZmZzZXQgKi8KKwl1OCByeF9wd3Jfb2Zmc2V0OyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogVFNTSSB0cmFuc21pdCBjb3VudCAqLworCXUxNiB0c3NpX3R4X2NvdW50OworCS8qIFRTU0kgaW5kZXggKi8KKwl1MTYgdHNzaV9pZHg7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisJLyogVFNTSSBucHQgKi8KKwl1MTYgdHNzaV9ucHQ7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisKKwkvKiBUYXJnZXQgVFggZnJlcXVlbmN5ICovCisJdTE2IHRndF90eF9mcmVxOyAvKiBGSVhNRSBpbml0aWFsIHZhbHVlPyAqLworCisJLyogVHJhbnNtaXQgcG93ZXIgaW5kZXggb3ZlcnJpZGUgKi8KKwlzOCB0eF9wd3JfaWR4X292ZXI7IC8qIEZJWE1FIGluaXRpYWwgdmFsdWU/ICovCisKKwkvKiBSU1NJIHZmICovCisJdTggcnNzaV92ZjsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBSU1NJIHZjICovCisJdTggcnNzaV92YzsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBSU1NJIGdzICovCisJdTggcnNzaV9nczsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIFJDIGNhcCAqLworCXU4IHJjX2NhcDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKwkvKiBCWCBhcmNoICovCisJdTggYnhfYXJjaDsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIEZ1bGwgY2FsaWJyYXRpb24gY2hhbm5lbCAqLworCXU4IGZ1bGxfY2FsaWJfY2hhbjsgLyogRklYTUUgaW5pdGlhbCB2YWx1ZT8gKi8KKworCS8qIFRyYW5zbWl0IGlxbG9jYWwgYmVzdCBjb2VmZnMgKi8KKwlib29sIHR4X2lxbG9jX2Jlc3RfY29lZmZzX3ZhbGlkOworCXU4IHR4X2lxbG9jX2Jlc3RfY29lZmZzWzExXTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCmluZGV4IDEwMzZiZWYuLjhjZDk3NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKQEAgLTU1LDggKzU1LDggQEAKIH0KIAogc3RhdGljCi1zdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICogcGFyc2VfY29va2llKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkgICAgICB1MTYgY29va2llLAorc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcGFyc2VfY29va2llKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCQkgICAgIHUxNiBjb29raWUsCiAJCQkJICAgICAgc3RydWN0IGI0M19waW9fdHhwYWNrZXQgKipwYWNrKQogewogCXN0cnVjdCBiNDNfcGlvICpwaW8gPSAmZGV2LT5waW87CkBAIC0xMzQsOCArMTM0LDggQEAKIAlyZXR1cm4gODsKIH0KIAotc3RhdGljIHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKiBiNDNfc2V0dXBfcGlvcXVldWVfdHgoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJCQkJICAgICAgdW5zaWduZWQgaW50IGluZGV4KQorc3RhdGljIHN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKmI0M19zZXR1cF9waW9xdWV1ZV90eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCQkgICAgIHVuc2lnbmVkIGludCBpbmRleCkKIHsKIAlzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpxOwogCXN0cnVjdCBiNDNfcGlvX3R4cGFja2V0ICpwOwpAQCAtMTcxLDggKzE3MSw4IEBACiAJcmV0dXJuIHE7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICogYjQzX3NldHVwX3Bpb3F1ZXVlX3J4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKK3N0YXRpYyBzdHJ1Y3QgYjQzX3Bpb19yeHF1ZXVlICpiNDNfc2V0dXBfcGlvcXVldWVfcngoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcTsKIApAQCAtMzA4LDggKzMwOCw4IEBACiB9CiAKIC8qIFN0YXRpYyBtYXBwaW5nIG9mIG1hYzgwMjExJ3MgcXVldWVzIChwcmlvcml0aWVzKSB0byBiNDMgUElPIHF1ZXVlcy4gKi8KLXN0YXRpYyBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICogc2VsZWN0X3F1ZXVlX2J5X3ByaW9yaXR5KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCQkJCQkgdTggcXVldWVfcHJpbykKK3N0YXRpYyBzdHJ1Y3QgYjQzX3Bpb190eHF1ZXVlICpzZWxlY3RfcXVldWVfYnlfcHJpb3JpdHkoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCQkJCXU4IHF1ZXVlX3ByaW8pCiB7CiAJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Jma2lsbC5jCmluZGV4IDcxMzc1MzcuLmFmYWQ0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9yZmtpbGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcmZraWxsLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLWNoYXIgKiBiNDNfcmZraWxsX2xlZF9uYW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK2NoYXIgKmI0M19yZmtpbGxfbGVkX25hbWUoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXN0cnVjdCBiNDNfcmZraWxsICpyZmsgPSAmKGRldi0+d2wtPnJma2lsbCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbHBwaHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWE3MzRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5jCkBAIC0wLDAgKzEsMzk0IEBACisvKgorCisgIEJyb2FkY29tIEI0MyB3aXJlbGVzcyBkcml2ZXIKKyAgSUVFRSA4MDIuMTFnIExQLVBIWSBhbmQgcmFkaW8gZGV2aWNlIGRhdGEgdGFibGVzCisKKyAgQ29weXJpZ2h0IChjKSAyMDA5IE1pY2hhZWwgQnVlc2NoIDxtYkBidTNzY2guZGU+CisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RlZXQsIEZpZnRoIEZsb29yLAorICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworKi8KKworI2luY2x1ZGUgImI0My5oIgorI2luY2x1ZGUgInRhYmxlc19scHBoeS5oIgorI2luY2x1ZGUgInBoeV9jb21tb24uaCIKKyNpbmNsdWRlICJwaHlfbHAuaCIKKworCisvKiBFbnRyeSBvZiB0aGUgMjA2MiByYWRpbyBpbml0IHRhYmxlICovCitzdHJ1Y3QgYjIwNjJfaW5pdF90YWJfZW50cnkgeworCXUxNiBvZmZzZXQ7CisJdTE2IHZhbHVlX2E7CisJdTE2IHZhbHVlX2c7CisJdTggZmxhZ3M7Cit9OworI2RlZmluZSBCMjA2Ml9GTEFHX0EJMHgwMSAvKiBGbGFnOiBJbml0IGluIEEgbW9kZSAqLworI2RlZmluZSBCMjA2Ml9GTEFHX0cJMHgwMiAvKiBGbGFnOiBJbml0IGluIEcgbW9kZSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGIyMDYyX2luaXRfdGFiX2VudHJ5IGIyMDYyX2luaXRfdGFiW10gPSB7CisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IDB4MDAwMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0zLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NNCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU03LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NOCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0xMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTExLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMTIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NPTU0xMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ09NTTE0LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9DT01NMTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1BETl9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMENBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9QRE5fQ1RMMiwgLnZhbHVlX2EgPSAweDAwMTgsIC52YWx1ZV9nID0gMHgwMDE4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX05fUEROX0NUTDQsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAyQSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fR0VOX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0lRX0NBTElCLCAudmFsdWVfYSA9IDB4MDAwMSwgLnZhbHVlX2cgPSAweDAwMDEsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQywgLnZhbHVlX2EgPSAweDAwREIsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EsIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR0VOQV9MUEYsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0JJQVMwLCAudmFsdWVfYSA9IDB4MDA0MSwgLnZhbHVlX2cgPSAweDAwNDEsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9MR05FQV9CSUFTMSwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTAsIC52YWx1ZV9hID0gMHgwMERELCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfVFVORTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUyLCAudmFsdWVfYSA9IDB4MDBERCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX1RVTkUzLCAudmFsdWVfYSA9IDB4MDA3NywgLnZhbHVlX2cgPSAweDAwQjUsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX0xHRU5BX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDBGRiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMUYsIC52YWx1ZV9nID0gMHgwMDFGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNSwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fTEdFTkFfQ1RMNywgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMDksIC52YWx1ZV9nID0gMHgwMDA5LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDIsIC52YWx1ZV9hID0gMHgwMDE4LCAudmFsdWVfZyA9IDB4MDAxOCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEwzLCAudmFsdWVfYSA9IDB4MDAyNywgLnZhbHVlX2cgPSAweDAwMjcsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMjgsIC52YWx1ZV9nID0gMHgwMDI4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhBX0NUTDUsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQV9DVEw2LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEFfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDgsIC52YWx1ZV9nID0gMHgwMDA4LCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DVEwwLCAudmFsdWVfYSA9IDB4MDA4MiwgLnZhbHVlX2cgPSAweDAwODAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DVEwyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0dBSU4wLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0dBSU4xLCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfR0FJTjIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9HQUlOMywgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMCwgLnZhbHVlX2EgPSAweDAwNDMsIC52YWx1ZV9nID0gMHgwMDQzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9DQUxJQjAsIC52YWx1ZV9hID0gMHgwMDEwLCAudmFsdWVfZyA9IDB4MDAxMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1JYQkJfQ0FMSUIxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9SWEJCX0NBTElCMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMSwgLnZhbHVlX2EgPSAweDAwMkEsIC52YWx1ZV9nID0gMHgwMDJBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMiwgLnZhbHVlX2EgPSAweDAwQUEsIC52YWx1ZV9nID0gMHgwMEFBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTMywgLnZhbHVlX2EgPSAweDAwMjEsIC52YWx1ZV9nID0gMHgwMDIxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTNCwgLnZhbHVlX2EgPSAweDAwQUEsIC52YWx1ZV9nID0gMHgwMEFBLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9CSUFTNSwgLnZhbHVlX2EgPSAweDAwMjIsIC52YWx1ZV9nID0gMHgwMDIyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMiwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJMywgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJNCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUlhCQl9SU1NJNSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMDEsIC52YWx1ZV9nID0gMHgwMDAxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMiwgLnZhbHVlX2EgPSAweDAwODQsIC52YWx1ZV9nID0gMHgwMDg0LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX05fVFhfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9DVEw1LCAudmFsdWVfYSA9IDB4MDAwMiwgLnZhbHVlX2cgPSAweDAwMDIsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDcsIC52YWx1ZV9hID0gMHgwMDU4LCAudmFsdWVfZyA9IDB4MDA1OCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDgsIC52YWx1ZV9hID0gMHgwMDgyLCAudmFsdWVfZyA9IDB4MDA4MiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTDksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX0NUTF9BLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9HQzJHLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9HQzVHLCAudmFsdWVfYSA9IDB4MDBGRiwgLnZhbHVlX2cgPSAweDAwRkYsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9UVU5FLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwMUIsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1BBRCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDg4LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFhfUEdBLCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODgsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UWF9QQURBVVgsIC52YWx1ZV9hID0gMHgwMDMzLCAudmFsdWVfZyA9IDB4MDAzMywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RYX1BHQUFVWCwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fVFNTSV9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9UU1NJX0NUTDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RTU0lfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMCwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMSwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fSVFfQ0FMSUJfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMzIsIC52YWx1ZV9nID0gMHgwMDMyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fQ0FMSUJfVFMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDEsIC52YWx1ZV9hID0gMHgwMDE1LCAudmFsdWVfZyA9IDB4MDAxNSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDIsIC52YWx1ZV9hID0gMHgwMDBGLCAudmFsdWVfZyA9IDB4MDAwRiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0NUTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX0NBTElCX0RCRzMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1BTRU5TRV9DVEwwLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfTl9QU0VOU0VfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX05fUFNFTlNFX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9OX1RFU1RfQlVGMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JBRElPX0lEX0NPREUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0yLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTQsIC52YWx1ZV9hID0gMHgwMDAxLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTUsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU02LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTgsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU05LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMTAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0xMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTEyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19DT01NMTMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX0NPTU0xNCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfQ09NTTE1LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19QRFNfQ1RMMCwgLnZhbHVlX2EgPSAweDAwRkYsIC52YWx1ZV9nID0gMHgwMEZGLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19QRFNfQ1RMMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUERTX0NUTDIsIC52YWx1ZV9hID0gMHgwMDhFLCAudmFsdWVfZyA9IDB4MDA4RSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1BEU19DVEwzLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwwLCAudmFsdWVfYSA9IDB4MDAwNiwgLnZhbHVlX2cgPSAweDAwMDYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwxLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19CR19DVEwyLCAudmFsdWVfYSA9IDB4MDAxMSwgLnZhbHVlX2cgPSAweDAwMTEsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwwLCAudmFsdWVfYSA9IDB4MDBGOCwgLnZhbHVlX2cgPSAweDAwRDgsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX0xHRU5HX0NUTDEsIC52YWx1ZV9hID0gMHgwMDNDLCAudmFsdWVfZyA9IDB4MDAyNCwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMMywgLnZhbHVlX2EgPSAweDAwNDEsIC52YWx1ZV9nID0gMHgwMDQxLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNCwgLnZhbHVlX2EgPSAweDAwMDIsIC52YWx1ZV9nID0gMHgwMDAyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNSwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNiwgLnZhbHVlX2EgPSAweDAwMjIsIC52YWx1ZV9nID0gMHgwMDIyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMNywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfTEdFTkdfQ1RMOCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEw5LCAudmFsdWVfYSA9IDB4MDA4OCwgLnZhbHVlX2cgPSAweDAwODgsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwxMCwgLnZhbHVlX2EgPSAweDAwODgsIC52YWx1ZV9nID0gMHgwMDgwLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19MR0VOR19DVEwxMSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDAsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxLCAudmFsdWVfYSA9IDB4MDAwNywgLnZhbHVlX2cgPSAweDAwMDcsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMiwgLnZhbHVlX2EgPSAweDAwQUYsIC52YWx1ZV9nID0gMHgwMEFGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDMsIC52YWx1ZV9hID0gMHgwMDEyLCAudmFsdWVfZyA9IDB4MDAxMiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEw0LCAudmFsdWVfYSA9IDB4MDAwQiwgLnZhbHVlX2cgPSAweDAwMEIsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMNSwgLnZhbHVlX2EgPSAweDAwNUYsIC52YWx1ZV9nID0gMHgwMDVGLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEw3LCAudmFsdWVfYSA9IDB4MDA0MCwgLnZhbHVlX2cgPSAweDAwNDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMOCwgLnZhbHVlX2EgPSAweDAwNTIsIC52YWx1ZV9nID0gMHgwMDUyLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDksIC52YWx1ZV9hID0gMHgwMDI2LCAudmFsdWVfZyA9IDB4MDAyNiwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxMCwgLnZhbHVlX2EgPSAweDAwMDMsIC52YWx1ZV9nID0gMHgwMDAzLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDExLCAudmFsdWVfYSA9IDB4MDAzNiwgLnZhbHVlX2cgPSAweDAwMzYsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMTIsIC52YWx1ZV9hID0gMHgwMDU3LCAudmFsdWVfZyA9IDB4MDA1NywgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxMywgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkVGUExMX0NUTDE0LCAudmFsdWVfYSA9IDB4MDA3NSwgLnZhbHVlX2cgPSAweDAwNzUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRUZQTExfQ1RMMTUsIC52YWx1ZV9hID0gMHgwMEI0LCAudmFsdWVfZyA9IDB4MDBCNCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JFRlBMTF9DVEwxNiwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMCwgLnZhbHVlX2EgPSAweDAwOTgsIC52YWx1ZV9nID0gMHgwMDk4LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxLCAudmFsdWVfYSA9IDB4MDAxMCwgLnZhbHVlX2cgPSAweDAwMTAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDIsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDUsIC52YWx1ZV9hID0gMHgwMDQzLCAudmFsdWVfZyA9IDB4MDA0MywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMNiwgLnZhbHVlX2EgPSAweDAwNDcsIC52YWx1ZV9nID0gMHgwMDQ3LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEw3LCAudmFsdWVfYSA9IDB4MDAwQywgLnZhbHVlX2cgPSAweDAwMEMsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDgsIC52YWx1ZV9hID0gMHgwMDExLCAudmFsdWVfZyA9IDB4MDAxMSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMOSwgLnZhbHVlX2EgPSAweDAwMTEsIC52YWx1ZV9nID0gMHgwMDExLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMCwgLnZhbHVlX2EgPSAweDAwMEUsIC52YWx1ZV9nID0gMHgwMDBFLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMSwgLnZhbHVlX2EgPSAweDAwMDgsIC52YWx1ZV9nID0gMHgwMDA4LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMiwgLnZhbHVlX2EgPSAweDAwMzMsIC52YWx1ZV9nID0gMHgwMDMzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxMywgLnZhbHVlX2EgPSAweDAwMEEsIC52YWx1ZV9nID0gMHgwMDBBLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNCwgLnZhbHVlX2EgPSAweDAwMDYsIC52YWx1ZV9nID0gMHgwMDA2LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxNSwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDE3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxOCwgLnZhbHVlX2EgPSAweDAwM0UsIC52YWx1ZV9nID0gMHgwMDNFLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwxOSwgLnZhbHVlX2EgPSAweDAwMTMsIC52YWx1ZV9nID0gMHgwMDEzLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwyMCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjEsIC52YWx1ZV9hID0gMHgwMDYyLCAudmFsdWVfZyA9IDB4MDA2MiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjIsIC52YWx1ZV9hID0gMHgwMDA3LCAudmFsdWVfZyA9IDB4MDAwNywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjMsIC52YWx1ZV9hID0gMHgwMDE2LCAudmFsdWVfZyA9IDB4MDAxNiwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjQsIC52YWx1ZV9hID0gMHgwMDVDLCAudmFsdWVfZyA9IDB4MDA1QywgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCXsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjUsIC52YWx1ZV9hID0gMHgwMDk1LCAudmFsdWVfZyA9IDB4MDA5NSwgLmZsYWdzID0gQjIwNjJfRkxBR19BIHwgQjIwNjJfRkxBR19HLCB9LAorCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDI3LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwyOCwgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUkZQTExfQ1RMMjksIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMwLCAudmFsdWVfYSA9IDB4MDBBMCwgLnZhbHVlX2cgPSAweDAwQTAsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMxLCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSB8IEIyMDYyX0ZMQUdfRywgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JGUExMX0NUTDMyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzMywgLnZhbHVlX2EgPSAweDAwQ0MsIC52YWx1ZV9nID0gMHgwMENDLCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJeyAub2Zmc2V0ID0gQjIwNjJfU19SRlBMTF9DVEwzNCwgLnZhbHVlX2EgPSAweDAwMDcsIC52YWx1ZV9nID0gMHgwMDA3LCAuZmxhZ3MgPSBCMjA2Ml9GTEFHX0EgfCBCMjA2Ml9GTEFHX0csIH0sCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMCwgLnZhbHVlX2EgPSAweDAwMTAsIC52YWx1ZV9nID0gMHgwMDEwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDEsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQyLCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMywgLnZhbHVlX2EgPSAweDAwMDAsIC52YWx1ZV9nID0gMHgwMDAwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDQsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ1LCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UNiwgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDcsIC52YWx1ZV9hID0gMHgwMDA1LCAudmFsdWVfZyA9IDB4MDAwNSwgLmZsYWdzID0gMCwgfSwgKi8KKwl7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ4LCAudmFsdWVfYSA9IDB4MDAwRiwgLnZhbHVlX2cgPSAweDAwMEYsIC5mbGFncyA9IEIyMDYyX0ZMQUdfQSwgfSwKKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQ5LCAudmFsdWVfYSA9IDB4MDAwMCwgLnZhbHVlX2cgPSAweDAwMDAsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTAsIC52YWx1ZV9hID0gMHgwMDU1LCAudmFsdWVfZyA9IDB4MDA1NSwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxMSwgLnZhbHVlX2EgPSAweDAwNjYsIC52YWx1ZV9nID0gMHgwMDY2LCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDEyLCAudmFsdWVfYSA9IDB4MDA1NSwgLnZhbHVlX2cgPSAweDAwNTUsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTMsIC52YWx1ZV9hID0gMHgwMDQ0LCAudmFsdWVfZyA9IDB4MDA0NCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxNCwgLnZhbHVlX2EgPSAweDAwQTAsIC52YWx1ZV9nID0gMHgwMEEwLCAuZmxhZ3MgPSAwLCB9LCAqLworCS8qIHsgLm9mZnNldCA9IEIyMDYyX1NfUlhHX0NOVDE1LCAudmFsdWVfYSA9IDB4MDAwNCwgLnZhbHVlX2cgPSAweDAwMDQsIC5mbGFncyA9IDAsIH0sICovCisJLyogeyAub2Zmc2V0ID0gQjIwNjJfU19SWEdfQ05UMTYsIC52YWx1ZV9hID0gMHgwMDAwLCAudmFsdWVfZyA9IDB4MDAwMCwgLmZsYWdzID0gMCwgfSwgKi8KKwkvKiB7IC5vZmZzZXQgPSBCMjA2Ml9TX1JYR19DTlQxNywgLnZhbHVlX2EgPSAweDAwNTUsIC52YWx1ZV9nID0gMHgwMDU1LCAuZmxhZ3MgPSAwLCB9LCAqLworfTsKKwordm9pZCBiMjA2Ml91cGxvYWRfaW5pdF90YWJsZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGIyMDYyX2luaXRfdGFiX2VudHJ5ICplOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYjIwNjJfaW5pdF90YWIpOyBpKyspIHsKKwkJZSA9ICZiMjA2Ml9pbml0X3RhYltpXTsKKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJaWYgKCEoZS0+ZmxhZ3MgJiBCMjA2Ml9GTEFHX0cpKQorCQkJCWNvbnRpbnVlOworCQkJYjQzX3JhZGlvX3dyaXRlKGRldiwgZS0+b2Zmc2V0LCBlLT52YWx1ZV9nKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghKGUtPmZsYWdzICYgQjIwNjJfRkxBR19BKSkKKwkJCQljb250aW51ZTsKKwkJCWI0M19yYWRpb193cml0ZShkZXYsIGUtPm9mZnNldCwgZS0+dmFsdWVfYSk7CisJCX0KKwl9Cit9CisKK3UzMiBiNDNfbHB0YWJfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQpCit7CisJdTMyIHR5cGUsIHZhbHVlOworCisJdHlwZSA9IG9mZnNldCAmIEI0M19MUFRBQl9UWVBFTUFTSzsKKwlvZmZzZXQgJj0gfkI0M19MUFRBQl9UWVBFTUFTSzsKKwlCNDNfV0FSTl9PTihvZmZzZXQgPiAweEZGRkYpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCNDNfTFBUQUJfOEJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQl2YWx1ZSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTykgJiAweEZGOworCQlicmVhazsKKwljYXNlIEI0M19MUFRBQl8xNkJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQl2YWx1ZSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFMTyk7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQVEFCXzMyQklUOgorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCXZhbHVlID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUhJKTsKKwkJdmFsdWUgPDw9IDE2OworCQl2YWx1ZSB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTFBQSFlfVEFCTEVEQVRBTE8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCNDNfV0FSTl9PTigxKTsKKwkJdmFsdWUgPSAwOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKwordm9pZCBiNDNfbHB0YWJfcmVhZF9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwKKwkJCSB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIHZvaWQgKl9kYXRhKQoreworCXUzMiB0eXBlLCB2YWx1ZTsKKwl1OCAqZGF0YSA9IF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCisJdHlwZSA9IG9mZnNldCAmIEI0M19MUFRBQl9UWVBFTUFTSzsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfZWxlbWVudHM7IGkrKykgeworCQl2YWx1ZSA9IGI0M19scHRhYl9yZWFkKGRldiwgb2Zmc2V0KTsKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgQjQzX0xQVEFCXzhCSVQ6CisJCQkqZGF0YSA9IHZhbHVlOworCQkJZGF0YSsrOworCQkJYnJlYWs7CisJCWNhc2UgQjQzX0xQVEFCXzE2QklUOgorCQkJKigodTE2ICopZGF0YSkgPSB2YWx1ZTsKKwkJCWRhdGEgKz0gMjsKKwkJCWJyZWFrOworCQljYXNlIEI0M19MUFRBQl8zMkJJVDoKKwkJCSooKHUzMiAqKWRhdGEpID0gdmFsdWU7CisJCQlkYXRhICs9IDQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUI0M19XQVJOX09OKDEpOworCQl9CisJCW9mZnNldCsrOworCX0KK30KKwordm9pZCBiNDNfbHB0YWJfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJdTMyIHR5cGU7CisKKwl0eXBlID0gb2Zmc2V0ICYgQjQzX0xQVEFCX1RZUEVNQVNLOworCW9mZnNldCAmPSB+QjQzX0xQVEFCX1RZUEVNQVNLOworCUI0M19XQVJOX09OKG9mZnNldCA+IDB4RkZGRik7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEI0M19MUFRBQl84QklUOgorCQlCNDNfV0FSTl9PTih2YWx1ZSAmIH4weEZGKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRV9BRERSLCBvZmZzZXQpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPLCB2YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgQjQzX0xQVEFCXzE2QklUOgorCQlCNDNfV0FSTl9PTih2YWx1ZSAmIH4weEZGRkYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVEQVRBTE8sIHZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTFBUQUJfMzJCSVQ6CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTFBQSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19MUFBIWV9UQUJMRURBVEFISSwgdmFsdWUgPj4gMTYpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX0xQUEhZX1RBQkxFREFUQUxPLCB2YWx1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUI0M19XQVJOX09OKDEpOworCX0KK30KKwordm9pZCBiNDNfbHB0YWJfd3JpdGVfYnVsayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsCisJCQkgIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgY29uc3Qgdm9pZCAqX2RhdGEpCit7CisJdTMyIHR5cGUsIHZhbHVlOworCWNvbnN0IHU4ICpkYXRhID0gX2RhdGE7CisJdW5zaWduZWQgaW50IGk7CisKKwl0eXBlID0gb2Zmc2V0ICYgQjQzX0xQVEFCX1RZUEVNQVNLOworCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEI0M19MUFRBQl84QklUOgorCQkJdmFsdWUgPSAqZGF0YTsKKwkJCWRhdGErKzsKKwkJCWJyZWFrOworCQljYXNlIEI0M19MUFRBQl8xNkJJVDoKKwkJCXZhbHVlID0gKigodTE2ICopZGF0YSk7CisJCQlkYXRhICs9IDI7CisJCQlicmVhazsKKwkJY2FzZSBCNDNfTFBUQUJfMzJCSVQ6CisJCQl2YWx1ZSA9ICooKHUzMiAqKWRhdGEpOworCQkJZGF0YSArPSA0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCNDNfV0FSTl9PTigxKTsKKwkJCXZhbHVlID0gMDsKKwkJfQorCQliNDNfbHB0YWJfd3JpdGUoZGV2LCBvZmZzZXQsIHZhbHVlKTsKKwkJb2Zmc2V0Kys7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19scHBoeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOGQwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX2xwcGh5LmgKQEAgLTAsMCArMSwzMSBAQAorI2lmbmRlZiBCNDNfVEFCTEVTX0xQUEhZX0hfCisjZGVmaW5lIEI0M19UQUJMRVNfTFBQSFlfSF8KKworCisjZGVmaW5lIEI0M19MUFRBQl9UWVBFTUFTSwkJMHhGMDAwMDAwMAorI2RlZmluZSBCNDNfTFBUQUJfOEJJVAkJCTB4MTAwMDAwMDAKKyNkZWZpbmUgQjQzX0xQVEFCXzE2QklUCQkJMHgyMDAwMDAwMAorI2RlZmluZSBCNDNfTFBUQUJfMzJCSVQJCQkweDMwMDAwMDAwCisjZGVmaW5lIEI0M19MUFRBQjgodGFibGUsIG9mZnNldCkJKCgodGFibGUpIDw8IDEwKSB8IChvZmZzZXQpIHwgQjQzX0xQVEFCXzhCSVQpCisjZGVmaW5lIEI0M19MUFRBQjE2KHRhYmxlLCBvZmZzZXQpCSgoKHRhYmxlKSA8PCAxMCkgfCAob2Zmc2V0KSB8IEI0M19MUFRBQl8xNkJJVCkKKyNkZWZpbmUgQjQzX0xQVEFCMzIodGFibGUsIG9mZnNldCkJKCgodGFibGUpIDw8IDEwKSB8IChvZmZzZXQpIHwgQjQzX0xQVEFCXzMyQklUKQorCisvKiBUYWJsZSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBCNDNfTFBUQUJfVFhQV1JfUjJQTFVTCQlCNDNfTFBUQUIzMigweDA3LCAwKSAvKiBUWCBwb3dlciBsb29rdXAgdGFibGUgKHJldiA+PSAyKSAqLworI2RlZmluZSBCNDNfTFBUQUJfVFhQV1JfUjBfMQkJQjQzX0xQVEFCMzIoMHhBMCwgMCkgLyogVFggcG93ZXIgbG9va3VwIHRhYmxlIChyZXYgPCAyKSAqLworCit1MzIgYjQzX2xwdGFiX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0KTsKK3ZvaWQgYjQzX2xwdGFiX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwgdTMyIHZhbHVlKTsKKworLyogQnVsayB0YWJsZSBhY2Nlc3MuIE5vdGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRoZSBidWxrIGRhdGEgaW4KKyAqIGhvc3QgZW5kaWFubmVzcyEgVGhlIHJldHVybmVkIGRhdGEgaXMgX25vdF8gYSBieXRlYXJyYXksIGJ1dCBhbiBhcnJheQorICogY29uc2lzdGluZyBvZiBucl9lbGVtZW50cyBvZiB0aGUgZGF0YSB0eXBlLiAqLwordm9pZCBiNDNfbHB0YWJfcmVhZF9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwKKwkJCSB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIHZvaWQgKmRhdGEpOwordm9pZCBiNDNfbHB0YWJfd3JpdGVfYnVsayhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsCisJCQkgIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgY29uc3Qgdm9pZCAqZGF0YSk7CisKK3ZvaWQgYjIwNjJfdXBsb2FkX2luaXRfdGFibGUoc3RydWN0IGI0M193bGRldiAqZGV2KTsKKworCisjZW5kaWYgLyogQjQzX1RBQkxFU19MUFBIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3dhLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwppbmRleCAwYzBmYjE1Li5lMWUyMGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvd2EuYwpAQCAtNjIsOCArNjIsNyBAQAogCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CiAKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9MTkFIUEZDVEwsIDB4MUZGOSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMKSAmIDB4RkYwRik7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMLCAweEZGMEYpOwogCWlmIChwaHktPnJldiA8PSAyKQogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfTFBGR0FJTiwgMCwgMHgxRkJGKTsKIAliNDNfcmFkaW9fd3JpdGUxNihkZXYsIDB4MDAwMiwgMHgxRkJGKTsKQEAgLTczLDExICs3Miw5IEBACiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDAxRCwgMHgwRjQwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDFGLCAweDFDMDApOwogCWlmIChwaHktPnJldiA8PSAzKQotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJBLAotCQkJKGI0M19waHlfcmVhZChkZXYsIDB4MDAyQSkgJiAweDAwRkYpIHwgMHgwNDAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDJBLCAweDAwRkYsIDB4MDQwMCk7CiAJZWxzZSBpZiAocGh5LT5yZXYgPT0gNSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgMHgwMDJBLAotCQkJKGI0M19waHlfcmVhZChkZXYsIDB4MDAyQSkgJiAweDAwRkYpIHwgMHgxQTAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDJBLCAweDAwRkYsIDB4MUEwMCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCAweDAwQ0MsIDB4MjEyMSk7CiAJfQogCWlmIChwaHktPnJldiA+PSAzKQpAQCAtODYsNyArODMsNyBAQAogCiBzdGF0aWMgdm9pZCBiNDNfd2FfZGl2aWRlcihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0JYjQzX3BoeV93cml0ZShkZXYsIDB4MDAyQiwgYjQzX3BoeV9yZWFkKGRldiwgMHgwMDJCKSAmIH4weDAxMDApOworCWI0M19waHlfbWFzayhkZXYsIDB4MDAyQiwgfjB4MDEwMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIDB4MDA4RSwgMHg1OEMxKTsKIH0KIApAQCAtMjcyLDggKzI2OSw3IEBACiAKIHN0YXRpYyB2b2lkIGI0M193YV9sbXMoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWI0M19waHlfd3JpdGUoZGV2LCAweDAwNTUsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCAweDAwNTUpICYgMHhGRkMwKSB8IDB4MDAwNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgMHgwMDU1LCAweEZGQzAsIDB4MDAwNCk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M193YV9taXhlZHNpZ25hbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCkBAIC0zMTgsMjMgKzMxNCwxOCBAQAogCX0gZWxzZSBpZiAocGh5LT5yZXYgPT0gMikgewogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlNUSFJFUzEsIDB4MTg2MSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSU1RIUkVTMiwgMHgwMjcxKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5URFdFTEwsCi0JCQkJICBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0FOVERXRUxMKQotCQkJCSAgfCAweDA4MDApOworCQliNDNfcGh5X3NldChkZXYsIEI0M19QSFlfQU5URFdFTEwsIDB4MDgwMCk7CiAJfSBlbHNlIHsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQ1JTVEhSRVMxLCAweDAwOTgpOwogCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DUlNUSFJFUzIsIDB4MDA3MCk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHhDOSksIDB4MDA4MCk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0FOVERXRUxMLAotCQkJCSAgYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlREV0VMTCkKLQkJCQkgIHwgMHgwODAwKTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfUEhZX0FOVERXRUxMLCAweDA4MDApOwogCX0KIH0KIAogc3RhdGljIHZvaWQgYjQzX3dhX2Nyc190aHIoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0NSUzAsCi0JCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9DUlMwKSAmIH4weDAzQzApIHwgMHhEMDAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0NSUzAsIH4weDAzQzAsIDB4RDAwMCk7CiB9CiAKIHN0YXRpYyB2b2lkIGI0M193YV9jcnNfYmxhbmsoc3RydWN0IGI0M193bGRldiAqZGV2KQpAQCAtMzkxLDcyICszODIsNDUgQEAKIAkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzEsIDMsIDI1KTsKIAl9CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9DQ0tTSElGVEJJVFNfV0EsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0NDS1NISUZUQklUU19XQSkgJiB+MHhGRjAwKSB8IDB4NTcwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFBKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFBKSkgJiB+MHgwMDdGKSB8IDB4MDAwRik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFBKSwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFBKSkgJiB+MHgzRjgwKSB8IDB4MkI4MCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5UV1JTRVRULAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9BTlRXUlNFVFQpICYgMHhGMEZGKSB8IDB4MDMwMCk7Ci0JYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCAweDdBLAotCQliNDNfcmFkaW9fcmVhZDE2KGRldiwgMHg3QSkgfCAweDAwMDgpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04xUDFHQUlOLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9OMVAxR0FJTikgJiB+MHgwMDBGKSB8IDB4MDAwOCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUDFQMkdBSU4sCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1AxUDJHQUlOKSAmIH4weDBGMDApIHwgMHgwNjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OMU4yR0FJTiwKLQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfTjFOMkdBSU4pICYgfjB4MEYwMCkgfCAweDA3MDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04xUDFHQUlOLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9OMVAxR0FJTikgJiB+MHgwRjAwKSB8IDB4MDEwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9DQ0tTSElGVEJJVFNfV0EsICh1MTYpfjB4RkYwMCwgMHg1NzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQSksIH4weDAwN0YsIDB4MDAwRik7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4MUEpLCB+MHgzRjgwLCAweDJCODApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfQU5UV1JTRVRULCAweEYwRkYsIDB4MDMwMCk7CisJYjQzX3JhZGlvX3NldChkZXYsIDB4N0EsIDB4MDAwOCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9OMVAxR0FJTiwgfjB4MDAwRiwgMHgwMDA4KTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX1AxUDJHQUlOLCB+MHgwRjAwLCAweDA2MDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfTjFOMkdBSU4sIH4weDBGMDAsIDB4MDcwMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9OMVAxR0FJTiwgfjB4MEYwMCwgMHgwMTAwKTsKIAlpZiAocGh5LT5yZXYgPT0gMSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OMU4yR0FJTiwKLQkJCQkgIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX04xTjJHQUlOKQotCQkJCSAgICYgfjB4MDAwRikgfCAweDAwMDcpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX04xTjJHQUlOLCB+MHgwMDBGLCAweDAwMDcpOwogCX0KLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpKSAmIH4weDAwRkYpIHwgMHgwMDFDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpKSAmIH4weDNGMDApIHwgMHgwMjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpKSAmIH4weDAwRkYpIHwgMHgwMDFDKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpKSAmIH4weDAwRkYpIHwgMHgwMDIwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpKSAmIH4weDNGMDApIHwgMHgwMjAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODIpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODIpKSAmIH4weDAwRkYpIHwgMHgwMDJFKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4OTYpKSAmIH4weEZGMDApIHwgMHgxQTAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpKSAmIH4weDAwRkYpIHwgMHgwMDI4KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLAotCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpKSAmIH4weEZGMDApIHwgMHgyQzAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OCksIH4weDAwRkYsIDB4MDAxQyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODgpLCB+MHgzRjAwLCAweDAyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDk2KSwgfjB4MDBGRiwgMHgwMDFDKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4OSksIH4weDAwRkYsIDB4MDAyMCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODkpLCB+MHgzRjAwLCAweDAyMDApOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfT0ZETSgweDgyKSwgfjB4MDBGRiwgMHgwMDJFKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg5NiksICh1MTYpfjB4RkYwMCwgMHgxQTAwKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHg4MSksIH4weDAwRkYsIDB4MDAyOCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9PRkRNKDB4ODEpLCAodTE2KX4weEZGMDAsIDB4MkMwMCk7CiAJaWYgKHBoeS0+cmV2ID09IDEpIHsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfUEVBS19DT1VOVCwgMHgwOTJCKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQikpICYgfjB4MDAxRSkgfCAweDAwMDIpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX09GRE0oMHgxQiksIH4weDAwMUUsIDB4MDAwMik7CiAJfSBlbHNlIHsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFCKSwKLQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfT0ZETSgweDFCKSkgJiB+MHgwMDFFKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX1BIWV9PRkRNKDB4MUIpLCB+MHgwMDFFKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDFGKSwgMHgyODdBKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0xQRkdBSU5DVEwpICYgfjB4MDAwRikgfCAweDAwMDQpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfUEhZX0xQRkdBSU5DVEwsIH4weDAwMEYsIDB4MDAwNCk7CiAJCWlmIChwaHktPnJldiA+PSA2KSB7CiAJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjIpLCAweDI4N0EpOwotCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwKLQkJCQkoYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9MUEZHQUlOQ1RMKSAmIH4weEYwMDApIHwgMHgzMDAwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19QSFlfTFBGR0FJTkNUTCwgKHUxNil+MHhGMDAwLCAweDMwMDApOwogCQl9CiAJfQotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX0RJVlNSQ0hJRFgsCi0JCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlNSQ0hJRFgpICYgMHg4MDgwKSB8IDB4Nzg3NCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9ESVZTUkNISURYLCAweDgwODAsIDB4Nzg3NCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDhFKSwgMHgxQzAwKTsKIAlpZiAocGh5LT5yZXYgPT0gMSkgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9ESVZQMVAyR0FJTiwKLQkJCShiNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0RJVlAxUDJHQUlOKSAmIH4weDBGMDApIHwgMHgwNjAwKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9ESVZQMVAyR0FJTiwgfjB4MEYwMCwgMHgwNjAwKTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfT0ZETSgweDhCKSwgMHgwMDVFKTsKLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfQU5UV1JTRVRULAotCQkJKGI0M19waHlfcmVhZChkZXYsIEI0M19QSFlfQU5UV1JTRVRUKSAmIH4weDAwRkYpIHwgMHgwMDFFKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9BTlRXUlNFVFQsIH4weDAwRkYsIDB4MDAxRSk7CiAJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX09GRE0oMHg4RCksIDB4MDAwMik7CiAJCWI0M19vZmRtdGFiX3dyaXRlMTYoZGV2LCBCNDNfT0ZETVRBQl9BR0MzX1IxLCAwLCAwKTsKIAkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0FHQzNfUjEsIDEsIDcpOwpAQCAtNDY5LDEwICs0MzMsOCBAQAogCQliNDNfb2ZkbXRhYl93cml0ZTE2KGRldiwgQjQzX09GRE1UQUJfQUdDMywgMywgMjgpOwogCX0KIAlpZiAocGh5LT5yZXYgPj0gNikgewotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpKSAmIH4weDAwMDMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpLAotCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX1BIWV9PRkRNKDB4MjYpKSAmIH4weDEwMDApOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksIH4weDAwMDMpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX09GRE0oMHgyNiksIH4weDEwMDApOwogCX0KIAliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX1ZFUlNJT05fT0ZETSk7IC8qIER1bW15IHJlYWQgKi8KIH0KQEAgLTUzOCw4ICs1MDAsNyBAQAogCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAyLCAweDAwMDEpOwogCQkJaWYgKChidXMtPnNwcm9tLmJvYXJkZmxhZ3NfbG8gJiBCNDNfQkZMX0VYVExOQSkgJiYKIAkJCSAgICAocGh5LT5yZXYgPj0gNykpIHsKLQkJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9FWFRHKDB4MTEpLAotCQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfUEhZX0VYVEcoMHgxMSkpICYgMHhGN0ZGKTsKKwkJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfUEhZX0VYVEcoMHgxMSksIDB4RjdGRik7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjAsIDB4MDAwMSk7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjEsIDB4MDAwMSk7CiAJCQkJYjQzX29mZG10YWJfd3JpdGUxNihkZXYsIEI0M19PRkRNVEFCX0dBSU5YLCAweDAwMjIsIDB4MDAwMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3htaXQuYwppbmRleCBlYWU5YjgwLi5hNjNkODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My94bWl0LmMKQEAgLTUwLDcgKzUwLDcgQEAKIH0KIAogLyogRXh0cmFjdCB0aGUgYml0cmF0ZSBpbmRleCBvdXQgb2YgYW4gT0ZETSBQTENQIGhlYWRlci4gKi8KLXN0YXRpYyB1OCBiNDNfcGxjcF9nZXRfYml0cmF0ZV9pZHhfb2ZkbShzdHJ1Y3QgYjQzX3BsY3BfaGRyNiAqcGxjcCwgYm9vbCBhcGh5KQorc3RhdGljIGludCBiNDNfcGxjcF9nZXRfYml0cmF0ZV9pZHhfb2ZkbShzdHJ1Y3QgYjQzX3BsY3BfaGRyNiAqcGxjcCwgYm9vbCBhcGh5KQogewogCWludCBiYXNlID0gYXBoeSA/IDAgOiA0OwogCkBAIC01MzgsOCArNTM4LDE0IEBACiAJY2hhbnN0YXQgPSBsZTE2X3RvX2NwdShyeGhkci0+Y2hhbm5lbCk7CiAJcGh5dHlwZSA9IGNoYW5zdGF0ICYgQjQzX1JYX0NIQU5fUEhZVFlQRTsKIAotCWlmIChtYWNzdGF0ICYgQjQzX1JYX01BQ19GQ1NFUlIpCisJaWYgKHVubGlrZWx5KG1hY3N0YXQgJiBCNDNfUlhfTUFDX0ZDU0VSUikpIHsKIAkJZGV2LT53bC0+aWVlZV9zdGF0cy5kb3QxMUZDU0Vycm9yQ291bnQrKzsKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKKwl9CisJaWYgKHVubGlrZWx5KHBoeXN0YXQwICYgKEI0M19SWF9QSFlTVDBfUExDUEhDRiB8IEI0M19SWF9QSFlTVDBfUExDUEZWKSkpCisJCXN0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX1BMQ1BfQ1JDOworCWlmIChwaHlzdGF0MCAmIEI0M19SWF9QSFlTVDBfU0hPUlRQUk1CTCkKKwkJc3RhdHVzLmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKIAlpZiAobWFjc3RhdCAmIEI0M19SWF9NQUNfREVDRVJSKSB7CiAJCS8qIERlY3J5cHRpb24gd2l0aCB0aGUgZ2l2ZW4ga2V5IGZhaWxlZC4KIAkJICogRHJvcCB0aGUgcGFja2V0LiBXZSBhbHNvIHdvbid0IGJlIGFibGUgdG8gZGVjcnlwdCBpdCB3aXRoCkBAIC02MDYsOCArNjEyLDEyIEBACiAJCQkJCQlwaHl0eXBlID09IEI0M19QSFlUWVBFX0EpOwogCWVsc2UKIAkJc3RhdHVzLnJhdGVfaWR4ID0gYjQzX3BsY3BfZ2V0X2JpdHJhdGVfaWR4X2NjayhwbGNwKTsKLQlpZiAodW5saWtlbHkoc3RhdHVzLnJhdGVfaWR4ID09IC0xKSkKLQkJZ290byBkcm9wOworCWlmICh1bmxpa2VseShzdGF0dXMucmF0ZV9pZHggPT0gLTEpKSB7CisJCS8qIFBMQ1Agc2VlbXMgdG8gYmUgY29ycnVwdGVkLgorCQkgKiBEcm9wIHRoZSBmcmFtZSwgaWYgd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIGNvcnJ1cHRlZCBmcmFtZXMuICovCisJCWlmICghKGRldi0+d2wtPmZpbHRlcl9mbGFncyAmIEZJRl9QTENQRkFJTCkpCisJCQlnb3RvIGRyb3A7CisJfQogCXN0YXR1cy5hbnRlbm5hID0gISEocGh5c3RhdDAgJiBCNDNfUlhfUEhZU1QwX0FOVCk7CiAKIAkvKgpAQCAtNjYxLDcgKzY3MSw2IEBACiAJCWdvdG8gZHJvcDsKIAl9CiAKLQlkZXYtPnN0YXRzLmxhc3RfcnggPSBqaWZmaWVzOwogCWllZWU4MDIxMV9yeF9pcnFzYWZlKGRldi0+d2wtPmh3LCBza2IsICZzdGF0dXMpOwogCiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9sZWRzLmMKaW5kZXggY2FjYjc4Ni4uM2VhNTViMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbGVkcy5jCkBAIC0xNDYsMTIgKzE0NiwxMiBAQAogCWNhc2UgQjQzbGVnYWN5X0xFRF9UUkFOU0ZFUjoKIAljYXNlIEI0M2xlZ2FjeV9MRURfQVBUUkFOU0ZFUjoKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAotCQkJICJiNDNsZWdhY3ktJXM6dHgiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJICJiNDNsZWdhY3ktJXM6OnR4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKIAkJYjQzbGVnYWN5X3JlZ2lzdGVyX2xlZChkZXYsICZkZXYtPmxlZF90eCwgbmFtZSwKIAkJCQkgaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShodyksCiAJCQkJIGxlZF9pbmRleCwgYWN0aXZlbG93KTsKIAkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLAotCQkJICJiNDNsZWdhY3ktJXM6cngiLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQkJICJiNDNsZWdhY3ktJXM6OnJ4Iiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKIAkJYjQzbGVnYWN5X3JlZ2lzdGVyX2xlZChkZXYsICZkZXYtPmxlZF9yeCwgbmFtZSwKIAkJCQkgaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShodyksCiAJCQkJIGxlZF9pbmRleCwgYWN0aXZlbG93KTsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCWNhc2UgQjQzbGVnYWN5X0xFRF9SQURJT19COgogCWNhc2UgQjQzbGVnYWN5X0xFRF9NT0RFX0JHOgogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksCi0JCQkgImI0M2xlZ2FjeS0lczpyYWRpbyIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCQkgImI0M2xlZ2FjeS0lczo6cmFkaW8iLCB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwogCQliNDNsZWdhY3lfcmVnaXN0ZXJfbGVkKGRldiwgJmRldi0+bGVkX3JhZGlvLCBuYW1lLAogCQkJCSBiNDNsZWdhY3lfcmZraWxsX2xlZF9uYW1lKGRldiksCiAJCQkJIGxlZF9pbmRleCwgYWN0aXZlbG93KTsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCWNhc2UgQjQzbGVnYWN5X0xFRF9XRUlSRDoKIAljYXNlIEI0M2xlZ2FjeV9MRURfQVNTT0M6CiAJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwKLQkJCSAiYjQzbGVnYWN5LSVzOmFzc29jIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKKwkJCSAiYjQzbGVnYWN5LSVzOjphc3NvYyIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CiAJCWI0M2xlZ2FjeV9yZWdpc3Rlcl9sZWQoZGV2LCAmZGV2LT5sZWRfYXNzb2MsIG5hbWUsCiAJCQkJIGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoaHcpLAogCQkJCSBsZWRfaW5kZXgsIGFjdGl2ZWxvdyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwppbmRleCBmYjk5NmMyLi44NzllZGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKQEAgLTI2NTAsNyArMjY1MCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgYjQzbGVnYWN5X3VwZGF0ZV9iYXNpY19yYXRlcyhzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsIHU2NCBicmF0ZXMpCitzdGF0aWMgdm9pZCBiNDNsZWdhY3lfdXBkYXRlX2Jhc2ljX3JhdGVzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwgdTMyIGJyYXRlcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9CiAJCWRldi0+d2wtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmgKaW5kZXggMjQ1M2RlYS4uY2U4NzIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaApAQCAtMzEsNyArMzEsNyBAQAogdm9pZCBob3N0YXBfZHVtcF90eF9oZWFkZXIoY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgIGNvbnN0IHN0cnVjdCBoZmEzODR4X3R4X2ZyYW1lICp0eCk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgaG9zdGFwXzgwMjExX29wczsKLWludCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih1MTYgZmMpOworaW50IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKF9fbGUxNiBmYyk7CiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaG9zdGFwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgaG9zdGFwX3NldHVwX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBsb2NhbF9pbmZvX3QgKmxvY2FsLAogCQkgICAgICBpbnQgdHlwZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExLmgKaW5kZXggM2E5NDc0ZC4uMmU5ZmIwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTEuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgSE9TVEFQXzgwMjExX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiBzdHJ1Y3QgaG9zdGFwX2llZWU4MDIxMV9tZ210IHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfcnguYwppbmRleCAxOWIxYmYwLi4zODE2ZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3J4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV9yeC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAKICNpbmNsdWRlICJob3N0YXBfODAyMTEuaCIKICNpbmNsdWRlICJob3N0YXAuaCIKQEAgLTE3LDEwICsxOCwxMCBAQAogdm9pZCBob3N0YXBfZHVtcF9yeF84MDIxMShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXUxNiBmYzsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggc2lnbmFsPSVkIG5vaXNlPSVkIHJhdGU9JWQgbGVuPSVkICIKIAkgICAgICAgImppZmZpZXM9JWxkXG4iLApAQCAtMzAsOSArMzEsMTAgQEAKIAlpZiAoc2tiLT5sZW4gPCAyKQogCQlyZXR1cm47CiAKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiAgIEZDPTB4JTA0eCAodHlwZT0lZDolZCklcyVzIiwKLQkgICAgICAgZmMsIFdMQU5fRkNfR0VUX1RZUEUoZmMpID4+IDIsIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSA+PiA0LAorCSAgICAgICBmYywgKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpID4+IDIsCisJICAgICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA+PiA0LAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMgPyAiIFtUb0RTXSIgOiAiIiwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMgPyAiIFtGcm9tRFNdIiA6ICIiKTsKIApAQCAtNDIsNyArNDQsNyBAQAogCX0KIAogCXByaW50aygiIGR1cj0weCUwNHggc2VxPTB4JTA0eFxuIiwgbGUxNl90b19jcHUoaGRyLT5kdXJhdGlvbl9pZCksCi0JICAgICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0bCkpOworCSAgICAgICBsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiICAgQTE9JXBNIiwgaGRyLT5hZGRyMSk7CiAJcHJpbnRrKCIgQTI9JXBNIiwgaGRyLT5hZGRyMik7CkBAIC02Myw3ICs2NSw3IEBACiAJaW50IGhkcmxlbiwgcGhkcmxlbiwgaGVhZF9uZWVkLCB0YWlsX25lZWQ7CiAJdTE2IGZjOwogCWludCBwcmlzbV9oZWFkZXIsIHJldDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqZmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqZmhkcjsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsb2NhbCA9IGlmYWNlLT5sb2NhbDsKQEAgLTg0LDggKzg2LDggQEAKIAkJcGhkcmxlbiA9IDA7CiAJfQogCi0JZmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShmaGRyLT5mcmFtZV9jdGwpOworCWZoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUoZmhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAlpZiAodHlwZSA9PSBQUklTTTJfUlhfTUdNVCAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9WRVJTKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgbWFuYWdlbWVudCBmcmFtZSB3aXRoIGhlYWRlciAiCkBAIC05NCw3ICs5Niw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCS8qIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCByb29tIGZvciBleHRyYSBkYXRhOyBpZiBub3QsIGV4cGFuZCBza2IKIAkgKiBidWZmZXIgdG8gYmUgbGFyZ2UgZW5vdWdoIGZvciB0aGUgY2hhbmdlcyAqLwpAQCAtMTkzLDcgKzE5NSw3IEBACiAJaWYgKHByaXNtX2hlYWRlcikKIAkJc2tiX3B1bGwoc2tiLCBwaGRybGVuKTsKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMik7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8yKTsKIAltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKIAluZXRpZl9yeChza2IpOwogCkBAIC0yMDUsMTMgKzIwNywxMSBAQAogc3RhdGljIHZvaWQgbW9uaXRvcl9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAlpbnQgbGVuOwogCiAJbGVuID0gcHJpc20yX3J4XzgwMjExKGRldiwgc2tiLCByeF9zdGF0cywgUFJJU00yX1JYX01PTklUT1IpOwotCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IGxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIH0KIAogCkBAIC0yNDcsMjEgKzI0NywyMSBAQAogCiAvKiBDYWxsZWQgb25seSBhcyBhIHRhc2tsZXQgKHNvZnR3YXJlIElSUSkgKi8KIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCi1wcmlzbTJfZnJhZ19jYWNoZV9nZXQobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKK3ByaXNtMl9mcmFnX2NhY2hlX2dldChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXUxNiBzYzsKIAl1bnNpZ25lZCBpbnQgZnJhZywgc2VxOwogCXN0cnVjdCBwcmlzbTJfZnJhZ19lbnRyeSAqZW50cnk7CiAKLQlzYyA9IGxlMTZfdG9fY3B1KGhkci0+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+YXAtPmJyaWRnZV9wYWNrZXRzKSB7CkBAIC0xMDk0LDcgKzEwODcsNyBAQAogCWlmIChza2IyICE9IE5VTEwpIHsKIAkJLyogc2VuZCB0byB3aXJlbGVzcyBtZWRpYSAqLwogCQlza2IyLT5kZXYgPSBkZXY7Ci0JCXNrYjItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMyk7CisJCXNrYjItPnByb3RvY29sID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzMpOwogCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IyKTsKIAkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYjIpOwogCQkvKiBza2IyLT5uZXR3b3JrX2hlYWRlciArPSBFVEhfSExFTjsgKi8KQEAgLTExMTUsNyArMTEwOCw3IEBACiAgcnhfZHJvcHBlZDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAKLQlzdGF0cy0+cnhfZHJvcHBlZCsrOworCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCWdvdG8gcnhfZXhpdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF84MDIxMV90eC5jCmluZGV4IDA3OGEwMTAuLjY2OTM0MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfODAyMTFfdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwXzgwMjExX3R4LmMKQEAgLTE1LDEwICsxNSwxMCBAQAogCiB2b2lkIGhvc3RhcF9kdW1wX3R4XzgwMjExKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXUxNiBmYzsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogVFggbGVuPSVkIGppZmZpZXM9JWxkXG4iLAogCSAgICAgICBuYW1lLCBza2ItPmxlbiwgamlmZmllcyk7CkBAIC0yNiw5ICsyNiwxMCBAQAogCWlmIChza2ItPmxlbiA8IDIpCiAJCXJldHVybjsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiICAgRkM9MHglMDR4ICh0eXBlPSVkOiVkKSVzJXMiLAotCSAgICAgICBmYywgV0xBTl9GQ19HRVRfVFlQRShmYykgPj4gMiwgV0xBTl9GQ19HRVRfU1RZUEUoZmMpID4+IDQsCisJICAgICAgIGZjLCAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPj4gMiwKKwkgICAgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID4+IDQsCiAJICAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUyA/ICIgW1RvRFNdIiA6ICIiLAogCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUyA/ICIgW0Zyb21EU10iIDogIiIpOwogCkBAIC0zOCw3ICszOSw3IEBACiAJfQogCiAJcHJpbnRrKCIgZHVyPTB4JTA0eCBzZXE9MHglMDR4XG4iLCBsZTE2X3RvX2NwdShoZHItPmR1cmF0aW9uX2lkKSwKLQkgICAgICAgbGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKSk7CisJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIgICBBMT0lcE0iLCBoZHItPmFkZHIxKTsKIAlwcmludGsoIiBBMj0lcE0iLCBoZHItPmFkZHIyKTsKQEAgLTU3LDcgKzU4LDcgQEAKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKIAlpbnQgbmVlZF9oZWFkcm9vbSwgbmVlZF90YWlscm9vbSA9IDA7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyIGhkcjsKIAl1MTYgZmMsIGV0aGVydHlwZSA9IDA7CiAJZW51bSB7CiAJCVdEU19OTyA9IDAsIFdEU19PV05fRlJBTUUsIFdEU19DT01QTElBTlRfRlJBTUUKQEAgLTIwMSw3ICsyMDIsNyBAQAogCQltZW1jcHkoJmhkci5hZGRyMywgbG9jYWwtPmJzc2lkLCBFVEhfQUxFTik7CiAJfQogCi0JaGRyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKwloZHIuZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKIAogCXNrYl9wdWxsKHNrYiwgc2tpcF9oZWFkZXJfYnl0ZXMpOwogCW5lZWRfaGVhZHJvb20gPSBsb2NhbC0+ZnVuYy0+bmVlZF90eF9oZWFkcm9vbSArIGhkcl9sZW4gKyBlbmNhcHNfbGVuOwpAQCAtMjY1LDcgKzI2Niw3IEBACiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7CiAJc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqbWV0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjOwogCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjg3LDEwICsyODgsMTAgQEAKIAltZXRhLT5pZmFjZSA9IGlmYWNlOwogCiAJaWYgKHNrYi0+bGVuID49IElFRUU4MDIxMV9EQVRBX0hEUjNfTEVOICsgc2l6ZW9mKHJmYzEwNDJfaGVhZGVyKSArIDIpIHsKLQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQkJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSAmJgotCQkgICAgV0xBTl9GQ19HRVRfU1RZUEUoZmMpID09IElFRUU4MDIxMV9TVFlQRV9EQVRBKSB7CisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkJICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfREFUQSkgewogCQkJdTggKnBvcyA9ICZza2ItPmRhdGFbSUVFRTgwMjExX0RBVEFfSERSM19MRU4gKwogCQkJCQkgICAgIHNpemVvZihyZmMxMDQyX2hlYWRlcildOwogCQkJbWV0YS0+ZXRoZXJ0eXBlID0gKHBvc1swXSA8PCA4KSB8IHBvc1sxXTsKQEAgLTMxMCw4ICszMTEsNyBAQAogewogCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKIAlsb2NhbF9pbmZvX3QgKmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7Ci0JdTE2IGZjOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJaW50IHByZWZpeF9sZW4sIHBvc3RmaXhfbGVuLCBoZHJfbGVuLCByZXM7CiAKIAlpZmFjZSA9IG5ldGRldl9wcml2KHNrYi0+ZGV2KTsKQEAgLTMyNCw3ICszMjQsNyBAQAogCiAJaWYgKGxvY2FsLT50a2lwX2NvdW50ZXJtZWFzdXJlcyAmJgogCSAgICBzdHJjbXAoY3J5cHQtPm9wcy0+bmFtZSwgIlRLSVAiKSA9PSAwKSB7Ci0JCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVEtJUCBjb3VudGVybWVhc3VyZXM6IGRyb3BwZWQgIgogCQkJICAgICAgICJUWCBwYWNrZXQgdG8gJXBNXG4iLApAQCAtMzQ5LDkgKzM0OSw4IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0gCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCWhkcl9sZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmYyk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwloZHJfbGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCS8qIEhvc3QtYmFzZWQgSUVFRSA4MDIuMTEgZnJhZ21lbnRhdGlvbiBmb3IgVFggaXMgbm90IHlldCBzdXBwb3J0ZWQsIHNvCiAJICogY2FsbCBib3RoIE1TRFUgYW5kIE1QRFUgZW5jcnlwdGlvbiBmdW5jdGlvbnMgZnJvbSBoZXJlLiAqLwpAQCAtMzg0LDcgKzM4Myw3IEBACiAJYXBfdHhfcmV0IHR4X3JldDsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwogCWludCBub19lbmNyeXB0ID0gMDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAKIAlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7CiAJbG9jYWwgPSBpZmFjZS0+bG9jYWw7CkBAIC00MjcsMTQgKzQyNiwxNCBAQAogCXR4X3JldCA9IGhvc3RhcF9oYW5kbGVfc3RhX3R4KGxvY2FsLCAmdHgpOwogCXNrYiA9IHR4LnNrYjsKIAltZXRhID0gKHN0cnVjdCBob3N0YXBfc2tiX3R4X2RhdGEgKikgc2tiLT5jYjsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotIAlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlzd2l0Y2ggKHR4X3JldCkgewogCWNhc2UgQVBfVFhfQ09OVElOVUU6CiAJCWJyZWFrOwogCWNhc2UgQVBfVFhfQ09OVElOVUVfTk9UX0FVVEhPUklaRUQ6CiAJCWlmIChsb2NhbC0+aWVlZV84MDJfMXggJiYKLQkJICAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBICYmCisJCSAgICBpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJCSAgICBtZXRhLT5ldGhlcnR5cGUgIT0gRVRIX1BfUEFFICYmCiAJCSAgICAhKG1ldGEtPmZsYWdzICYgSE9TVEFQX1RYX0ZMQUdTX1dEUykpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBmcmFtZSB0byB1bmF1dGhvcml6ZWQgIgpAQCAtNDY5LDEwICs0NjgsMTAgQEAKIAogCQkvKiByZW1vdmUgc3BlY2lhbCB2ZXJzaW9uIGZyb20gdGhlIGZyYW1lIGhlYWRlciAqLwogCQlmYyAmPSB+SUVFRTgwMjExX0ZDVExfVkVSUzsKLQkJaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisJCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKIAl9CiAKLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsKKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJbm9fZW5jcnlwdCA9IDE7CiAJCXR4LmNyeXB0ID0gTlVMTDsKIAl9CkBAIC00OTMsOSArNDkyLDkgQEAKIAkJLyogQWRkIElTV0VQIGZsYWcgYm90aCBmb3IgZmlybXdhcmUgYW5kIGhvc3QgYmFzZWQgZW5jcnlwdGlvbgogCQkgKi8KIAkJZmMgfD0gSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEOwotCQloZHItPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKKwkJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOwogCX0gZWxzZSBpZiAobG9jYWwtPmRyb3BfdW5lbmNyeXB0ZWQgJiYKLQkJICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKKwkJICAgaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgogCQkgICBtZXRhLT5ldGhlcnR5cGUgIT0gRVRIX1BfUEFFKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCB1bmVuY3J5cHRlZCBUWCBkYXRhICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwppbmRleCAwOTAzZGI3Li5hMmEyMDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAKICNpbmNsdWRlICJob3N0YXBfd2xhbi5oIgogI2luY2x1ZGUgImhvc3RhcC5oIgpAQCAtNTg4LDI4ICs1ODksMjQgQEAKIHN0YXRpYyB2b2lkIGhvc3RhcF9hcF90eF9jYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgb2ssIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGFwX2RhdGEgKmFwID0gZGF0YTsKLQl1MTYgZmM7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCiAJaWYgKCFhcC0+bG9jYWwtPmhvc3RhcGQgfHwgIWFwLT5sb2NhbC0+YXBkZXYpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm47CiAJfQogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQogCS8qIFBhc3MgdGhlIFRYIGNhbGxiYWNrIGZyYW1lIHRvIHRoZSBob3N0YXBkOyB1c2UgODAyLjExIGhlYWRlciB2ZXJzaW9uCiAJICogMSB0byBpbmRpY2F0ZSBmYWlsdXJlIChubyBBQ0spIGFuZCAyIHN1Y2Nlc3MgKGZyYW1lIEFDS2VkKSAqLwogCi0JZmMgJj0gfklFRUU4MDIxMV9GQ1RMX1ZFUlM7Ci0JZmMgfD0gb2sgPyBCSVQoMSkgOiBCSVQoMCk7Ci0JaGRyLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwloZHItPmZyYW1lX2NvbnRyb2wgJj0gY3B1X3RvX2xlMTYofklFRUU4MDIxMV9GQ1RMX1ZFUlMpOworCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihvayA/IEJJVCgxKSA6IEJJVCgwKSk7CiAKIAlza2ItPmRldiA9IGFwLT5sb2NhbC0+YXBkZXY7Ci0Jc2tiX3B1bGwoc2tiLCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihmYykpOworCXNrYl9wdWxsKHNrYiwgaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKSk7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0Jc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyXzIpOworCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMik7CiAJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7CiAJbmV0aWZfcngoc2tiKTsKIH0KQEAgLTYyMSw4ICs2MTgsOCBAQAogewogCXN0cnVjdCBhcF9kYXRhICphcCA9IGRhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFwLT5sb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7Ci0JdTE2IGZjLCBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJdTE2IGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXM7CiAJX19sZTE2ICpwb3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCWNoYXIgKnR4dCA9IE5VTEw7CkBAIC02MzIsMTAgKzYyOSw4IEBACiAJCXJldHVybjsKIAl9CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCWlmIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSAhPSBJRUVFODAyMTFfRlRZUEVfTUdNVCB8fAotCSAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgIT0gSUVFRTgwMjExX1NUWVBFX0FVVEggfHwKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCWlmICghaWVlZTgwMjExX2lzX2F1dGgoaGRyLT5mcmFtZV9jb250cm9sKSB8fAogCSAgICBza2ItPmxlbiA8IElFRUU4MDIxMV9NR01UX0hEUl9MRU4gKyA2KSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogaG9zdGFwX2FwX3R4X2NiX2F1dGggcmVjZWl2ZWQgaW52YWxpZCAiCiAJCSAgICAgICAiZnJhbWVcbiIsIGRldi0+bmFtZSk7CkBAIC02OTEsNyArNjg2LDcgQEAKIHsKIAlzdHJ1Y3QgYXBfZGF0YSAqYXAgPSBkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcC0+bG9jYWwtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjLCBzdGF0dXM7CiAJX19sZTE2ICpwb3M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwpAQCAtNzAyLDExICs2OTcsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpICE9IElFRUU4MDIxMV9GVFlQRV9NR01UIHx8Ci0JICAgIChXTEFOX0ZDX0dFVF9TVFlQRShmYykgIT0gSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1AgJiYKLQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGZjKSAhPSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQKSB8fAorCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOworCWlmICgoIWllZWU4MDIxMV9pc19hc3NvY19yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgICFpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpIHx8CiAJICAgIHNrYi0+bGVuIDwgSUVFRTgwMjExX01HTVRfSERSX0xFTiArIDQpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBob3N0YXBfYXBfdHhfY2JfYXNzb2MgcmVjZWl2ZWQgaW52YWxpZCAiCiAJCSAgICAgICAiZnJhbWVcbiIsIGRldi0+bmFtZSk7CkBAIC03NTcsMTIgKzc1MSwxMiBAQAogc3RhdGljIHZvaWQgaG9zdGFwX2FwX3R4X2NiX3BvbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG9rLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBhcF9kYXRhICphcCA9IGRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCiAJaWYgKHNrYi0+bGVuIDwgMjQpCiAJCWdvdG8gZmFpbDsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJaWYgKG9rKSB7CiAJCXNwaW5fbG9jaygmYXAtPnN0YV90YWJsZV9sb2NrKTsKIAkJc3RhID0gYXBfZ2V0X3N0YShhcCwgaGRyLT5hZGRyMSk7CkBAIC05MTcsNyArOTExLDcgQEAKIHsKIAlzdHJ1Y3QgaG9zdGFwX2ludGVyZmFjZSAqaWZhY2U7CiAJbG9jYWxfaW5mb190ICpsb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAJdTE2IGZjOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqbWV0YTsKQEAgLTk0Miw4ICs5MzYsOCBAQAogCX0KIAogCWZjID0gdHlwZV9zdWJ0eXBlOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiX3B1dChza2IsIGhkcmxlbik7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oY3B1X3RvX2xlMTYodHlwZV9zdWJ0eXBlKSk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCBoZHJsZW4pOwogCWlmIChib2R5KQogCQltZW1jcHkoc2tiX3B1dChza2IsIGJvZHlfbGVuKSwgYm9keSwgYm9keV9sZW4pOwogCkBAIC05NTQsMTEgKzk0OCwxMSBAQAogCiAKIAltZW1jcHkoaGRyLT5hZGRyMSwgYWRkciwgRVRIX0FMRU4pOyAvKiBEQSAvIFJBICovCi0JaWYgKFdMQU5fRkNfR0VUX1RZUEUoZmMpID09IElFRUU4MDIxMV9GVFlQRV9EQVRBKSB7CisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJZmMgfD0gSUVFRTgwMjExX0ZDVExfRlJPTURTOwogCQltZW1jcHkoaGRyLT5hZGRyMiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOyAvKiBCU1NJRCAqLwogCQltZW1jcHkoaGRyLT5hZGRyMywgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOyAvKiBTQSAqLwotCX0gZWxzZSBpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCkgeworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2N0bChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCS8qIGNvbnRyb2w6QUNLIGRvZXMgbm90IGhhdmUgYWRkcjIgb3IgYWRkcjMgKi8KIAkJbWVtc2V0KGhkci0+YWRkcjIsIDAsIEVUSF9BTEVOKTsKIAkJbWVtc2V0KGhkci0+YWRkcjMsIDAsIEVUSF9BTEVOKTsKQEAgLTk2Nyw3ICs5NjEsNyBAQAogCQltZW1jcHkoaGRyLT5hZGRyMywgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOyAvKiBCU1NJRCAqLwogCX0KIAotCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoZmMpOworCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KGZjKTsKIAogCW1ldGEgPSAoc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqKSBza2ItPmNiOwogCW1lbXNldChtZXRhLCAwLCBzaXplb2YoKm1ldGEpKTsKQEAgLTEyODQsMjIgKzEyNzgsMjEgQEAKIAkJCSAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCXNpemVfdCBoZHJsZW47CiAJc3RydWN0IGFwX2RhdGEgKmFwID0gbG9jYWwtPmFwOwogCWNoYXIgYm9keVs4ICsgV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU5dLCAqY2hhbGxlbmdlID0gTlVMTDsKIAlpbnQgbGVuLCBvbGVuOwogCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7CiAJX19sZTE2ICpwb3M7Ci0JdTE2IHJlc3AgPSBXTEFOX1NUQVRVU19TVUNDRVNTLCBmYzsKKwl1MTYgcmVzcCA9IFdMQU5fU1RBVFVTX1NVQ0NFU1M7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBOVUxMOwogCXN0cnVjdCBsaWI4MDIxMV9jcnlwdF9kYXRhICpjcnlwdDsKIAljaGFyICp0eHQgPSAiIjsKIAogCWxlbiA9IHNrYi0+bGVuIC0gSUVFRTgwMjExX01HTVRfSERSX0xFTjsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwotCWhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJaWYgKGxlbiA8IDYpIHsKIAkJUERFQlVHKERFQlVHX0FQLCAiJXM6IGhhbmRsZV9hdXRoZW4gLSB0b28gc2hvcnQgcGF5bG9hZCAiCkBAIC0xNDM1LDcgKzE0MjgsNyBAQAogCQkJICAgIGNoYWxsZW5nZSA9PSBOVUxMIHx8CiAJCQkgICAgbWVtY21wKHN0YS0+dS5zdGEuY2hhbGxlbmdlLCBjaGFsbGVuZ2UsCiAJCQkJICAgV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4pICE9IDAgfHwKLQkJCSAgICAhKGZjICYgSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKSkgeworCQkJICAgICFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCQkJdHh0ID0gImNoYWxsZW5nZSByZXNwb25zZSBpbmNvcnJlY3QiOwogCQkJCXJlc3AgPSBXTEFOX1NUQVRVU19DSEFMTEVOR0VfRkFJTDsKIAkJCQlnb3RvIGZhaWw7CkBAIC0xNDg4LDcgKzE0ODEsNyBAQAogCQkgICAgICAgInRyYW5zIz0lZCBzdGF0PSVkIGxlbj0lZCBmYz0lMDR4KSA9PT4gJWQgKCVzKVxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgaGRyLT5hZGRyMiwKIAkJICAgICAgIGF1dGhfYWxnLCBhdXRoX3RyYW5zYWN0aW9uLCBzdGF0dXNfY29kZSwgbGVuLAotCQkgICAgICAgZmMsIHJlc3AsIHR4dCk7CisJCSAgICAgICBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpLCByZXNwLCB0eHQpOwogCX0KIH0KIApAQCAtMTQ5OCw3ICsxNDkxLDcgQEAKIAkJCSBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMsIGludCByZWFzc29jKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWNoYXIgYm9keVsxMl0sICpwLCAqbHBvczsKIAlpbnQgbGVuLCBsZWZ0OwogCV9fbGUxNiAqcG9zOwpAQCAtMTcwNyw3ICsxNzAwLDcgQEAKIAkJCSAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCWNoYXIgKmJvZHkgPSAoY2hhciAqKSAoc2tiLT5kYXRhICsgSUVFRTgwMjExX01HTVRfSERSX0xFTik7CiAJaW50IGxlbjsKIAl1MTYgcmVhc29uX2NvZGU7CkBAIC0xNzQ5LDcgKzE3NDIsNyBAQAogCQkJICAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAljaGFyICpib2R5ID0gc2tiLT5kYXRhICsgSUVFRTgwMjExX01HTVRfSERSX0xFTjsKIAlpbnQgbGVuOwogCXUxNiByZWFzb25fY29kZTsKQEAgLTE3ODgsNyArMTc4MSw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgc2NoZWR1bGVkIHRhc2sgZm9yIHBlbmRpbmcgQVAgZnJhbWVzLiAqLwogc3RhdGljIHZvaWQgYXBfaGFuZGxlX2RhdGFfbnVsbGZ1bmMobG9jYWxfaW5mb190ICpsb2NhbCwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKIApAQCAtMTgwNSw3ICsxNzk4LDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSBzY2hlZHVsZWQgdGFzayBmb3IgcGVuZGluZyBBUCBmcmFtZXMuICovCiBzdGF0aWMgdm9pZCBhcF9oYW5kbGVfZHJvcHBlZF9kYXRhKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwpAQCAtMTg2Myw3ICsxODU2LDcgQEAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSBzY2hlZHVsZWQgdGFzayBmb3IgcGVuZGluZyBBUCBmcmFtZXMuICovCiBzdGF0aWMgdm9pZCBoYW5kbGVfcHNwb2xsKGxvY2FsX2luZm9fdCAqbG9jYWwsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIsCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbG9jYWwtPmRldjsKQEAgLTE4NzIsOCArMTg2NSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCVBERUJVRyhERUJVR19QUzIsICJoYW5kbGVfcHNwb2xsOiBCU1NJRD0lcE0sIFRBPSVwTSBQV1JNR1Q9JWRcbiIsCi0JICAgICAgIGhkci0+YWRkcjEsIGhkci0+YWRkcjIsCi0JICAgICAgICEhKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSAmIElFRUU4MDIxMV9GQ1RMX1BNKSk7CisJICAgICAgIGhkci0+YWRkcjEsIGhkci0+YWRkcjIsICEhaWVlZTgwMjExX2hhc19wbShoZHItPmZyYW1lX2NvbnRyb2wpKTsKIAogCWlmIChtZW1jbXAoaGRyLT5hZGRyMSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKSB7CiAJCVBERUJVRyhERUJVR19BUCwKQEAgLTE5ODQsNyArMTk3Niw3IEBACiBzdGF0aWMgdm9pZCBoYW5kbGVfYmVhY29uKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAljaGFyICpib2R5ID0gc2tiLT5kYXRhICsgSUVFRTgwMjExX01HTVRfSERSX0xFTjsKIAlpbnQgbGVuLCBsZWZ0OwogCXUxNiBiZWFjb25faW50LCBjYXBhYmlsaXR5OwpAQCAtMjE0MywxNCArMjEzNSwxNCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBsb2NhbC0+ZGV2OwogI2VuZGlmIC8qIFBSSVNNMl9OT19LRVJORUxfSUVFRTgwMjExX01HTVQgKi8KIAl1MTYgZmMsIHR5cGUsIHN0eXBlOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCS8qIEZJWDogc2hvdWxkIGdpdmUgc2tiLT5sZW4gdG8gaGFuZGxlciBmdW5jdGlvbnMgYW5kIGNoZWNrIHRoYXQgdGhlCiAJICogYnVmZmVyIGlzIGxvbmcgZW5vdWdoICovCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKLQlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKLQl0eXBlID0gV0xBTl9GQ19HRVRfVFlQRShmYyk7Ci0Jc3R5cGUgPSBXTEFOX0ZDX0dFVF9TVFlQRShmYyk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisJdHlwZSA9IGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEU7CisJc3R5cGUgPSBmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFOwogCiAjaWZuZGVmIFBSSVNNMl9OT19LRVJORUxfSUVFRTgwMjExX01HTVQKIAlpZiAoIWxvY2FsLT5ob3N0YXBkICYmIHR5cGUgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpIHsKQEAgLTIyNjIsOCArMjI1NCw3IEBACiB7CiAJc3RydWN0IGhvc3RhcF9pbnRlcmZhY2UgKmlmYWNlOwogCWxvY2FsX2luZm9fdCAqbG9jYWw7Ci0JdTE2IGZjOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWlmYWNlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlsb2NhbCA9IGlmYWNlLT5sb2NhbDsKQEAgLTIyNzEsMTcgKzIyNjIsMTUgQEAKIAlpZiAoc2tiLT5sZW4gPCAxNikKIAkJZ290byBkcm9wOwogCi0JbG9jYWwtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKIAogCWlmIChsb2NhbC0+YXAtPmFwX3BvbGljeSA9PSBBUF9PVEhFUl9BUF9TS0lQX0FMTCAmJgotCSAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfTUdNVCAmJgotCSAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikKKwkgICAgaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlnb3RvIGRyb3A7CiAKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9IT1NUQVApOworCXNrYi0+cHJvdG9jb2wgPSBjcHVfdG9fYmUxNihFVEhfUF9IT1NUQVApOwogCWhhbmRsZV9hcF9pdGVtKGxvY2FsLCBza2IsIHJ4X3N0YXRzKTsKIAlyZXR1cm47CiAKQEAgLTIyOTQsNyArMjI4Myw3IEBACiBzdGF0aWMgdm9pZCBzY2hlZHVsZV9wYWNrZXRfc2VuZChsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyByeF9zdGF0czsKIAogCWlmIChza2JfcXVldWVfZW1wdHkoJnN0YS0+dHhfYnVmKSkKQEAgLTIzMDcsMTAgKzIyOTYsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2JfcHV0KHNrYiwgMTYpOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMTYpOwogCiAJLyogR2VuZXJhdGUgYSBmYWtlIHBzcG9sbCBmcmFtZSB0byBzdGFydCBwYWNrZXQgZGVsaXZlcnkgKi8KLQloZHItPmZyYW1lX2N0bCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJaGRyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoCiAJCUlFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMKTsKIAltZW1jcHkoaGRyLT5hZGRyMSwgbG9jYWwtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkoaGRyLT5hZGRyMiwgc3RhLT5hZGRyLCBFVEhfQUxFTik7CkBAIC0yNjg5LDcgKzI2NzgsNyBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKIAlpbnQgc2V0X3RpbSwgcmV0OwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwogCiAJbWV0YSA9IChzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICopIHNrYi0+Y2I7CkBAIC0yNjk4LDcgKzI2ODcsNyBAQAogCSAgICBtZXRhLT5pZmFjZS0+dHlwZSA9PSBIT1NUQVBfSU5URVJGQUNFX1NUQSkKIAkJZ290byBvdXQ7CiAKLQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAlpZiAoaGRyLT5hZGRyMVswXSAmIDB4MDEpIHsKIAkJLyogYnJvYWRjYXN0L211bHRpY2FzdCBmcmFtZSAtIG5vIEFQIHJlbGF0ZWQgcHJvY2Vzc2luZyAqLwpAQCAtMjc1Myw4ICsyNzQyLDggQEAKIAogCWlmIChtZXRhLT5mbGFncyAmIEhPU1RBUF9UWF9GTEFHU19BRERfTU9SRURBVEEpIHsKIAkJLyogaW5kaWNhdGUgdG8gU1RBIHRoYXQgbW9yZSBmcmFtZXMgZm9sbG93ICovCi0JCWhkci0+ZnJhbWVfY3RsIHw9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKTsKKwkJaGRyLT5mcmFtZV9jb250cm9sIHw9CisJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7CiAJfQogCiAJaWYgKG1ldGEtPmZsYWdzICYgSE9TVEFQX1RYX0ZMQUdTX0JVRkZFUkVEX0ZSQU1FKSB7CkBAIC0yODI4LDEwICsyODE3LDEwIEBACiB2b2lkIGhvc3RhcF9oYW5kbGVfc3RhX3R4X2V4Yyhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaG9zdGFwX3NrYl90eF9kYXRhICptZXRhOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCW1ldGEgPSAoc3RydWN0IGhvc3RhcF9za2JfdHhfZGF0YSAqKSBza2ItPmNiOwogCiAJc3Bpbl9sb2NrKCZsb2NhbC0+YXAtPnN0YV90YWJsZV9sb2NrKTsKQEAgLTI4OTgsOCArMjg4Nyw4IEBACiAKIAogLyogQ2FsbGVkIG9ubHkgYXMgYSB0YXNrbGV0IChzb2Z0d2FyZSBJUlEpLiBDYWxsZWQgZm9yIGVhY2ggUlggZnJhbWUgdG8gdXBkYXRlCi0gKiBTVEEgcG93ZXIgc2F2aW5nIHN0YXRlLiBwd3JtZ3QgaXMgYSBmbGFnIGZyb20gODAyLjExIGZyYW1lX2N0bCBmaWVsZC4gKi8KLWludCBob3N0YXBfdXBkYXRlX3N0YV9wcyhsb2NhbF9pbmZvX3QgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyKQorICogU1RBIHBvd2VyIHNhdmluZyBzdGF0ZS4gcHdybWd0IGlzIGEgZmxhZyBmcm9tIDgwMi4xMSBmcmFtZV9jb250cm9sIGZpZWxkLiAqLworaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJdTE2IGZjOwpAQCAtMjkxMyw5ICsyOTAyLDEwIEBACiAJaWYgKCFzdGEpCiAJCXJldHVybiAtMTsKIAotCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIAlob3N0YXBfdXBkYXRlX3N0YV9wczIobG9jYWwsIHN0YSwgZmMgJiBJRUVFODAyMTFfRkNUTF9QTSwKLQkJCSAgICAgIFdMQU5fRkNfR0VUX1RZUEUoZmMpLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykpOworCQkJICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSwKKwkJCSAgICAgIGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpOwogCiAJYXRvbWljX2RlYygmc3RhLT51c2Vycyk7CiAJcmV0dXJuIDA7CkBAIC0yOTMyLDE2ICsyOTIyLDE2IEBACiAJaW50IHJldDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MTYgZmMsIHR5cGUsIHN0eXBlOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAogCWlmIChsb2NhbC0+YXAgPT0gTlVMTCkKIAkJcmV0dXJuIEFQX1JYX0NPTlRJTlVFOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCi0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7Ci0JdHlwZSA9IFdMQU5fRkNfR0VUX1RZUEUoZmMpOwotCXN0eXBlID0gV0xBTl9GQ19HRVRfU1RZUEUoZmMpOworCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKKwl0eXBlID0gZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRTsKKwlzdHlwZSA9IGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEU7CiAKIAlzcGluX2xvY2soJmxvY2FsLT5hcC0+c3RhX3RhYmxlX2xvY2spOwogCXN0YSA9IGFwX2dldF9zdGEobG9jYWwtPmFwLCBoZHItPmFkZHIyKTsKQEAgLTMwNjQsNyArMzA1NCw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogaW50IGhvc3RhcF9oYW5kbGVfc3RhX2NyeXB0byhsb2NhbF9pbmZvX3QgKmxvY2FsLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJICAgICBzdHJ1Y3QgbGliODAyMTFfY3J5cHRfZGF0YSAqKmNyeXB0LAogCQkJICAgICB2b2lkICoqc3RhX3B0cikKIHsKQEAgLTMxNjYsNyArMzE1Niw3IEBACiAKIC8qIENhbGxlZCBvbmx5IGFzIGEgdGFza2xldCAoc29mdHdhcmUgSVJRKSAqLwogaW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLAotCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCiAJCQkgICBzdHJ1Y3QgaG9zdGFwXzgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHMpCiB7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmgKaW5kZXggZDM2ZTRiMS4uNjU1Y2VlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuaApAQCAtMjM1LDcgKzIzNSw3IEBACiBhcF90eF9yZXQgaG9zdGFwX2hhbmRsZV9zdGFfdHgobG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGhvc3RhcF90eF9kYXRhICp0eCk7CiB2b2lkIGhvc3RhcF9oYW5kbGVfc3RhX3JlbGVhc2Uodm9pZCAqcHRyKTsKIHZvaWQgaG9zdGFwX2hhbmRsZV9zdGFfdHhfZXhjKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHIpOworaW50IGhvc3RhcF91cGRhdGVfc3RhX3BzKGxvY2FsX2luZm9fdCAqbG9jYWwsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOwogdHlwZWRlZiBlbnVtIHsKIAlBUF9SWF9DT05USU5VRSwgQVBfUlhfRFJPUCwgQVBfUlhfRVhJVCwgQVBfUlhfQ09OVElOVUVfTk9UX0FVVEhPUklaRUQKIH0gYXBfcnhfcmV0OwpAQCAtMjQzLDEzICsyNDMsMTMgQEAKIAkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBob3N0YXBfODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0cywKIAkJCSAgICAgICBpbnQgd2RzKTsKLWludCBob3N0YXBfaGFuZGxlX3N0YV9jcnlwdG8obG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKK2ludCBob3N0YXBfaGFuZGxlX3N0YV9jcnlwdG8obG9jYWxfaW5mb190ICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCSAgICAgc3RydWN0IGxpYjgwMjExX2NyeXB0X2RhdGEgKipjcnlwdCwKIAkJCSAgICAgdm9pZCAqKnN0YV9wdHIpOwogaW50IGhvc3RhcF9pc19zdGFfYXNzb2Moc3RydWN0IGFwX2RhdGEgKmFwLCB1OCAqc3RhX2FkZHIpOwogaW50IGhvc3RhcF9pc19zdGFfYXV0aG9yaXplZChzdHJ1Y3QgYXBfZGF0YSAqYXAsIHU4ICpzdGFfYWRkcik7CiBpbnQgaG9zdGFwX2FkZF9zdGEoc3RydWN0IGFwX2RhdGEgKmFwLCB1OCAqc3RhX2FkZHIpOwotaW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyLAoraW50IGhvc3RhcF91cGRhdGVfcnhfc3RhdHMoc3RydWN0IGFwX2RhdGEgKmFwLCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJICAgc3RydWN0IGhvc3RhcF84MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXRzKTsKIHZvaWQgaG9zdGFwX3VwZGF0ZV9yYXRlcyhsb2NhbF9pbmZvX3QgKmxvY2FsKTsKIHZvaWQgaG9zdGFwX2FkZF93ZHNfbGlua3MobG9jYWxfaW5mb190ICpsb2NhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKaW5kZXggMGYyNzA1OS4uM2RhZDFjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC0xNjgzLDcgKzE2ODIsNyBAQAogCiAJUERFQlVHKERFQlVHX0VYVFJBMiwgInByaXNtMl9nZXRfdHhmaWRfaWR4OiBubyByb29tIGluIHR4ZmlkIGJ1ZjogIgogCSAgICAgICAicGFja2V0IGRyb3BwZWRcbiIpOwotCWxvY2FsLT5zdGF0cy50eF9kcm9wcGVkKys7CisJbG9jYWwtPmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCiAJcmV0dXJuIC0xOwogfQpAQCAtMTc4OCwxMSArMTc4Nyw5IEBACiAJCXByaXNtMl90cmFuc21pdF9jYiwgKGxvbmcpIGlkeCk7CiAKIAlpZiAocmVzKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcmlzbTJfdHJhbnNtaXQ6IENNRENPREVfVFJBTlNNSVQgIgogCQkgICAgICAgImZhaWxlZCAocmVzPSVkKVxuIiwgZGV2LT5uYW1lLCByZXMpOwotCQlzdGF0cyA9IGhvc3RhcF9nZXRfc3RhdHMoZGV2KTsKLQkJc3RhdHMtPnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTE4NDAsOCArMTgzNyw4IEBACiAJaGRyX2xlbiA9IDI0OwogCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCAmdHhkZXNjLmZyYW1lX2NvbnRyb2wsIGhkcl9sZW4pOwogIAlmYyA9IGxlMTZfdG9fY3B1KHR4ZGVzYy5mcmFtZV9jb250cm9sKTsKLQlpZiAoV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgJiYKLQkgICAgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSAmJgorCWlmIChpZWVlODAyMTFfaXNfZGF0YSh0eGRlc2MuZnJhbWVfY29udHJvbCkgJiYKKwkgICAgaWVlZTgwMjExX2hhc19hNCh0eGRlc2MuZnJhbWVfY29udHJvbCkgJiYKIAkgICAgc2tiLT5sZW4gPj0gMzApIHsKIAkJLyogQWRkcjQgKi8KIAkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBoZHJfbGVuLCB0eGRlc2MuYWRkcjQsCkBAIC0xOTQwLDEyICsxOTM3LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5kZXY7CiAJaW50IHJlcywgcnhfcGVuZGluZyA9IDA7CiAJdTE2IGxlbiwgaGRyX2xlbiwgcnhmaWQsIHN0YXR1cywgbWFjcG9ydDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHM7CiAJc3RydWN0IGhmYTM4NHhfcnhfZnJhbWUgcnhkZXNjOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCiAJcHJpc20yX2NhbGxiYWNrKGxvY2FsLCBQUklTTTJfQ0FMTEJBQ0tfUlhfU1RBUlQpOwotCXN0YXRzID0gaG9zdGFwX2dldF9zdGF0cyhkZXYpOwogCiAJcnhmaWQgPSBwcmlzbTJfcmVhZF9maWRfcmVnKGRldiwgSEZBMzg0WF9SWEZJRF9PRkYpOwogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCkBAIC0yMDMyLDcgKzIwMjcsNyBAQAogCXJldHVybjsKIAogIHJ4X2Ryb3BwZWQ6Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlpZiAoc2tiKQogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJZ290byByeF9leGl0OwpAQCAtMjA4Miw3ICsyMDc3LDcgQEAKIAlzdGF0cy5yYXRlID0gcnhkZXNjLT5yYXRlOwogCiAJLyogQ29udmVydCBQcmlzbTIgUlggc3RydWN0dXJlIGludG8gSUVFRSA4MDIuMTEgaGVhZGVyICovCi0JaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUocnhkZXNjLT5mcmFtZV9jb250cm9sKSk7CisJaGRybGVuID0gaG9zdGFwXzgwMjExX2dldF9oZHJsZW4ocnhkZXNjLT5mcmFtZV9jb250cm9sKTsKIAlpZiAoaGRybGVuID4gcnhfaGRybGVuKQogCQloZHJsZW4gPSByeF9oZHJsZW47CiAKQEAgLTIyMDQsNyArMjE5OSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdSh0eGRlc2MtPmZyYW1lX2NvbnRyb2wpKTsKKwloZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwogCWxlbiA9IGxlMTZfdG9fY3B1KHR4ZGVzYy0+ZGF0YV9sZW4pOwogCXNrYiA9IGRldl9hbGxvY19za2IoaGRybGVuICsgbGVuKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKQEAgLTIzMTUsOCArMjMxMCw3IEBACiAJCWlmIChza2ItPmxlbiA+PSBzaXplb2YoKnR4ZGVzYykpIHsKIAkJCS8qIENvbnZlcnQgUHJpc20yIFJYIHN0cnVjdHVyZSBpbnRvIElFRUUgODAyLjExIGhlYWRlcgogCQkJICovCi0JCQl1MTYgZmMgPSBsZTE2X3RvX2NwdSh0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwotCQkJaW50IGhkcmxlbiA9IGhvc3RhcF84MDIxMV9nZXRfaGRybGVuKGZjKTsKKwkJCWludCBoZHJsZW4gPSBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih0eGRlc2MtPmZyYW1lX2NvbnRyb2wpOwogCQkJbWVtbW92ZShza2JfcHVsbChza2IsIHNpemVvZigqdHhkZXNjKSAtIGhkcmxlbiksCiAJCQkJJnR4ZGVzYy0+ZnJhbWVfY29udHJvbCwgaGRybGVuKTsKIApAQCAtMjMzNyw3ICsyMzMxLDcgQEAKIAlzdHJ1Y3QgaGZhMzg0eF90eF9mcmFtZSB0eGRlc2M7CiAKIAlzaG93X2R1bXAgPSBsb2NhbC0+ZnJhbWVfZHVtcCAmIFBSSVNNMl9EVU1QX1RYRVhDX0hEUjsKLQlsb2NhbC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAogCXJlcyA9IGhvc3RhcF90eF9jb21wbF9yZWFkKGxvY2FsLCAxLCAmdHhkZXNjLCAmcGF5bG9hZCk7CiAJSEZBMzg0WF9PVVRXKEhGQTM4NFhfRVZfVFhFWEMsIEhGQTM4NFhfRVZBQ0tfT0ZGKTsKQEAgLTIzOTQsMTIgKzIzODgsMTIgQEAKIAlQREVCVUcoREVCVUdfRVhUUkEsICIgICByZXRyeV9jb3VudD0lZCB0eF9yYXRlPSVkIGZjPTB4JTA0eCAiCiAJICAgICAgICIoJXMlcyVzOjolZCVzJXMpXG4iLAogCSAgICAgICB0eGRlc2MucmV0cnlfY291bnQsIHR4ZGVzYy50eF9yYXRlLCBmYywKLQkgICAgICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX01HTVQgPyAiTWdtdCIgOiAiIiwKLQkgICAgICAgV0xBTl9GQ19HRVRfVFlQRShmYykgPT0gSUVFRTgwMjExX0ZUWVBFX0NUTCA/ICJDdHJsIiA6ICIiLAotCSAgICAgICBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA9PSBJRUVFODAyMTFfRlRZUEVfREFUQSA/ICJEYXRhIiA6ICIiLAotCSAgICAgICBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKLQkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBUb0RTIiA6ICIiLAotCSAgICAgICBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUyA/ICIgRnJvbURTIiA6ICIiKTsKKwkgICAgICAgaWVlZTgwMjExX2lzX21nbXQodHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIk1nbXQiIDogIiIsCisJICAgICAgIGllZWU4MDIxMV9pc19jdGwodHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIkN0cmwiIDogIiIsCisJICAgICAgIGllZWU4MDIxMV9pc19kYXRhKHR4ZGVzYy5mcmFtZV9jb250cm9sKSA/ICJEYXRhIiA6ICIiLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKKwkgICAgICAgaWVlZTgwMjExX2hhc190b2RzKHR4ZGVzYy5mcmFtZV9jb250cm9sKSA/ICIgVG9EUyIgOiAiIiwKKwkgICAgICAgaWVlZTgwMjExX2hhc19mcm9tZHModHhkZXNjLmZyYW1lX2NvbnRyb2wpID8gIiBGcm9tRFMiIDogIiIpOwogCVBERUJVRyhERUJVR19FWFRSQSwgIiAgIEExPSVwTSBBMj0lcE0gQTM9JXBNIEE0PSVwTVxuIiwKIAkgICAgICAgdHhkZXNjLmFkZHIxLCB0eGRlc2MuYWRkcjIsCiAJICAgICAgIHR4ZGVzYy5hZGRyMywgdHhkZXNjLmFkZHI0KTsKQEAgLTMyMjgsNyArMzIyMiw2IEBACiAKIAlob3N0YXBfc2V0dXBfZGV2KGRldiwgbG9jYWwsIEhPU1RBUF9JTlRFUkZBQ0VfTUFTVEVSKTsKIAotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaG9zdGFwX21hc3Rlcl9zdGFydF94bWl0OwogCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CiAJZGV2LT5oZWFkZXJfb3BzID0gJmhvc3RhcF84MDIxMV9vcHM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW5mby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKaW5kZXggOTliNGNmNC4uNmZhMTRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pbmZvLmMKQEAgLTEsNSArMSw2IEBACiAvKiBIb3N0IEFQIGRyaXZlciBJbmZvIEZyYW1lIHByb2Nlc3NpbmcgKHBhcnQgb2YgaG9zdGFwLm8gbW9kdWxlKSAqLwogCisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSAiaG9zdGFwX3dsYW4uaCIKICNpbmNsdWRlICJob3N0YXAuaCIKICNpbmNsdWRlICJob3N0YXBfYXAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwppbmRleCBjNDBmZGY0Li4zZjJiZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCkBAIC0yLDYgKzIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+CiAKICNpbmNsdWRlICJob3N0YXBfd2xhbi5oIgpAQCAtMTYzOCw3ICsxNjM5LDcgQEAKIAltZW1zZXQoJnNjYW5fcmVxLCAwLCBzaXplb2Yoc2Nhbl9yZXEpKTsKIAlzY2FuX3JlcS5jaGFubmVsX2xpc3QgPSBjcHVfdG9fbGUxNihsb2NhbC0+Y2hhbm5lbF9tYXNrICYKIAkJCQkJICAgIGxvY2FsLT5zY2FuX2NoYW5uZWxfbWFzayk7Ci0Jc2Nhbl9yZXEudHhyYXRlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKKwlzY2FuX3JlcS50eHJhdGUgPSBjcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKIAlpZiAoc3NpZCkgewogCQlpZiAoc3NpZF9sZW4gPiAzMikKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTY2OCw3ICsxNjY5LDcgQEAKIAltZW1zZXQoJnNjYW5fcmVxLCAwLCBzaXplb2Yoc2Nhbl9yZXEpKTsKIAlzY2FuX3JlcS5jaGFubmVsX2xpc3QgPSBjcHVfdG9fbGUxNihsb2NhbC0+Y2hhbm5lbF9tYXNrICYKIAkJCQkJICAgIGxvY2FsLT5zY2FuX2NoYW5uZWxfbWFzayk7Ci0Jc2Nhbl9yZXEudHhyYXRlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKKwlzY2FuX3JlcS50eHJhdGUgPSBjcHVfdG9fbGUxNihIRkEzODRYX1JBVEVTXzFNQlBTKTsKIAogCS8qIEZJWDoKIAkgKiBJdCBzZWVtcyB0byBiZSBlbm91Z2ggdG8gc2V0IHJvYW1pbmcgbW9kZSBmb3IgYSBzaG9ydCBtb21lbnQgdG8KQEAgLTI1MTQsNyArMjUxNSw3IEBACiAJCXUxNiByYXRlOwogCiAJCW1lbXNldCgmc2Nhbl9yZXEsIDAsIHNpemVvZihzY2FuX3JlcSkpOwotCQlzY2FuX3JlcS5jaGFubmVsX2xpc3QgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4M2ZmZik7CisJCXNjYW5fcmVxLmNoYW5uZWxfbGlzdCA9IGNwdV90b19sZTE2KDB4M2ZmZik7CiAJCXN3aXRjaCAodmFsdWUpIHsKIAkJY2FzZSAxOiByYXRlID0gSEZBMzg0WF9SQVRFU18xTUJQUzsgYnJlYWs7CiAJCWNhc2UgMjogcmF0ZSA9IEhGQTM4NFhfUkFURVNfMk1CUFM7IGJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYwppbmRleCAwMmEzMTJjLi42ZmUxMjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX21haW4uYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC01NDMsNyArNTQyLDggQEAKIAlmYyA9IF9fbGUxNl90b19jcHUocngtPmZyYW1lX2NvbnRyb2wpOwogCXByaW50ayhLRVJOX0RFQlVHICIgICBGQz0weCUwNHggKHR5cGU9JWQ6JWQpIGR1cj0weCUwNHggc2VxPTB4JTA0eCAiCiAJICAgICAgICJkYXRhX2xlbj0lZCVzJXNcbiIsCi0JICAgICAgIGZjLCBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA+PiAyLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKKwkgICAgICAgZmMsIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA+PiAyLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKIAkgICAgICAgX19sZTE2X3RvX2NwdShyeC0+ZHVyYXRpb25faWQpLCBfX2xlMTZfdG9fY3B1KHJ4LT5zZXFfY3RybCksCiAJICAgICAgIF9fbGUxNl90b19jcHUocngtPmRhdGFfbGVuKSwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBbVG9EU10iIDogIiIsCkBAIC01NzAsNyArNTcwLDggQEAKIAlmYyA9IF9fbGUxNl90b19jcHUodHgtPmZyYW1lX2NvbnRyb2wpOwogCXByaW50ayhLRVJOX0RFQlVHICIgICBGQz0weCUwNHggKHR5cGU9JWQ6JWQpIGR1cj0weCUwNHggc2VxPTB4JTA0eCAiCiAJICAgICAgICJkYXRhX2xlbj0lZCVzJXNcbiIsCi0JICAgICAgIGZjLCBXTEFOX0ZDX0dFVF9UWVBFKGZjKSA+PiAyLCBXTEFOX0ZDX0dFVF9TVFlQRShmYykgPj4gNCwKKwkgICAgICAgZmMsIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSA+PiAyLAorCSAgICAgICAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgPj4gNCwKIAkgICAgICAgX19sZTE2X3RvX2NwdSh0eC0+ZHVyYXRpb25faWQpLCBfX2xlMTZfdG9fY3B1KHR4LT5zZXFfY3RybCksCiAJICAgICAgIF9fbGUxNl90b19jcHUodHgtPmRhdGFfbGVuKSwKIAkgICAgICAgZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTID8gIiBbVG9EU10iIDogIiIsCkBAIC01OTMsMzcgKzU5NCwxNiBAQAogfQogCiAKLWludCBob3N0YXBfODAyMTFfZ2V0X2hkcmxlbih1MTYgZmMpCitpbnQgaG9zdGFwXzgwMjExX2dldF9oZHJsZW4oX19sZTE2IGZjKQogewotCWludCBoZHJsZW4gPSAyNDsKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmIGllZWU4MDIxMV9oYXNfYTQgKGZjKSkKKwkJcmV0dXJuIDMwOyAvKiBBZGRyNCAqLworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19jdHMoZmMpIHx8IGllZWU4MDIxMV9pc19hY2soZmMpKQorCQlyZXR1cm4gMTA7CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2N0bChmYykpCisJCXJldHVybiAxNjsKIAotCXN3aXRjaCAoV0xBTl9GQ19HRVRfVFlQRShmYykpIHsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9EQVRBOgotCQlpZiAoKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSkKLQkJCWhkcmxlbiA9IDMwOyAvKiBBZGRyNCAqLwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9DVEw6Ci0JCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoZmMpKSB7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgotCQkJaGRybGVuID0gMTA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWhkcmxlbiA9IDE2OwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGhkcmxlbjsKLX0KLQotCi1zdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaG9zdGFwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBob3N0YXBfaW50ZXJmYWNlICppZmFjZTsKLQlpZmFjZSA9IG5ldGRldl9wcml2KGRldik7Ci0JcmV0dXJuICZpZmFjZS0+c3RhdHM7CisJcmV0dXJuIDI0OwogfQogCiAKQEAgLTgzNSw2ICs4MTUsNDYgQEAKIH07CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF84MDIxMV9vcHMpOwogCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaG9zdGFwX25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CQk9IGhvc3RhcF9kYXRhX3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhvc3RhcF9tZ210X25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0CQk9IGhvc3RhcF9tZ210X3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhvc3RhcF9tYXN0ZXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCAJPSBob3N0YXBfbWFzdGVyX3N0YXJ0X3htaXQsCisKKwkubmRvX29wZW4JCT0gcHJpc20yX29wZW4sCisJLm5kb19zdG9wCQk9IHByaXNtMl9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IGhvc3RhcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHByaXNtMl9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBob3N0YXBfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBwcmlzbTJfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQgCT0gcHJpc20yX3R4X3RpbWVvdXQsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiB2b2lkIGhvc3RhcF9zZXR1cF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgbG9jYWxfaW5mb190ICpsb2NhbCwKIAkJICAgICAgaW50IHR5cGUpCiB7CkBAIC04NDQsMzcgKzg2NCwzMSBAQAogCWV0aGVyX3NldHVwKGRldik7CiAKIAkvKiBrZXJuZWwgY2FsbGJhY2tzICovCi0JZGV2LT5nZXRfc3RhdHMgPSBob3N0YXBfZ2V0X3N0YXRzOwogCWlmIChpZmFjZSkgewogCQkvKiBDdXJyZW50bHksIHdlIHBvaW50IHRvIHRoZSBwcm9wZXIgc3B5X2RhdGEgb25seSBvbgogCQkgKiB0aGUgbWFpbl9kZXYuIFRoaXMgY291bGQgYmUgZml4ZWQuIEplYW4gSUkgKi8KIAkJaWZhY2UtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmaWZhY2UtPnNweV9kYXRhOwogCQlkZXYtPndpcmVsZXNzX2RhdGEgPSAmaWZhY2UtPndpcmVsZXNzX2RhdGE7CiAJfQotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPQotCQkoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopICZob3N0YXBfaXdfaGFuZGxlcl9kZWY7Ci0JZGV2LT5kb19pb2N0bCA9IGhvc3RhcF9pb2N0bDsKLQlkZXYtPm9wZW4gPSBwcmlzbTJfb3BlbjsKLQlkZXYtPnN0b3AgPSBwcmlzbTJfY2xvc2U7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBwcmlzbTJfc2V0X21hY19hZGRyZXNzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gaG9zdGFwX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmNoYW5nZV9tdHUgPSBwcmlzbTJfY2hhbmdlX210dTsKLQlkZXYtPnR4X3RpbWVvdXQgPSBwcmlzbTJfdHhfdGltZW91dDsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmhvc3RhcF9pd19oYW5kbGVyX2RlZjsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKIAotCWlmICh0eXBlID09IEhPU1RBUF9JTlRFUkZBQ0VfQVApIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBob3N0YXBfbWdtdF9zdGFydF94bWl0OworCXN3aXRjaCh0eXBlKSB7CisJY2FzZSBIT1NUQVBfSU5URVJGQUNFX0FQOgorCQlkZXYtPm5ldGRldl9vcHMgPSAmaG9zdGFwX21nbXRfbmV0ZGV2X29wczsKIAkJZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKIAkJZGV2LT5oZWFkZXJfb3BzID0gJmhvc3RhcF84MDIxMV9vcHM7Ci0JfSBlbHNlIHsKLQkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBob3N0YXBfZGF0YV9zdGFydF94bWl0OworCQlicmVhazsKKwljYXNlIEhPU1RBUF9JTlRFUkZBQ0VfTUFTVEVSOgorCQlkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CS8qIHVzZSBtYWluIHJhZGlvIGRldmljZSBxdWV1ZSAqLworCQlkZXYtPm5ldGRldl9vcHMgPSAmaG9zdGFwX21hc3Rlcl9vcHM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldi0+bmV0ZGV2X29wcyA9ICZob3N0YXBfbmV0ZGV2X29wczsKIAl9CiAKIAlkZXYtPm10dSA9IGxvY2FsLT5tdHU7Ci0JaWYgKHR5cGUgIT0gSE9TVEFQX0lOVEVSRkFDRV9NQVNURVIpIHsKLQkJLyogdXNlIG1haW4gcmFkaW8gZGV2aWNlIHF1ZXVlICovCi0JCWRldi0+dHhfcXVldWVfbGVuID0gMDsKLQl9CisKIAogCVNFVF9FVEhUT09MX09QUyhkZXYsICZwcmlzbTJfZXRodG9vbF9vcHMpOwogCkBAIC0xMTI0LDcgKzExMzgsNiBAQAogRVhQT1JUX1NZTUJPTChob3N0YXBfZHVtcF9yeF9oZWFkZXIpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfZHVtcF90eF9oZWFkZXIpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfODAyMTFfZ2V0X2hkcmxlbik7Ci1FWFBPUlRfU1lNQk9MKGhvc3RhcF9nZXRfc3RhdHMpOwogRVhQT1JUX1NZTUJPTChob3N0YXBfc2V0dXBfZGV2KTsKIEVYUE9SVF9TWU1CT0woaG9zdGFwX3NldF9tdWx0aWNhc3RfbGlzdF9xdWV1ZSk7CiBFWFBPUlRfU1lNQk9MKGhvc3RhcF9zZXRfaG9zdGFwZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfd2xhbi5oCmluZGV4IDRkOGQ1MWEzLi4zZDIzODkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3dsYW4uaApAQCAtNjg0LDcgKzY4NCw2IEBACiAJdTE2IGNoYW5uZWxfbWFzazsgLyogbWFzayBvZiBhbGxvd2VkIGNoYW5uZWxzICovCiAJdTE2IHNjYW5fY2hhbm5lbF9tYXNrOyAvKiBtYXNrIG9mIGNoYW5uZWxzIHRvIGJlIHNjYW5uZWQgKi8KIAlzdHJ1Y3QgY29tbV90YWxsaWVzX3N1bXMgY29tbV90YWxsaWVzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKIAlpbnQgaXdfbW9kZTsgLyogb3BlcmF0aW5nIG1vZGUgKElXX01PREVfKikgKi8KIAlpbnQgcHNldWRvX2FkaG9jOyAvKiAwOiBJV19NT0RFX0FESE9DIGlzIHJlYWwgODAyLjExIGNvbXBsaWFudCBJQlNTCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL0tjb25maWcKaW5kZXggM2Q1Y2M0NC4uODVjYzc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvS2NvbmZpZwpAQCAtMTUwLDYgKzE1MCw3IEBACiAKIGNvbmZpZyBMSUJJUFcKIAl0cmlzdGF0ZQorCWRlcGVuZHMgb24gUENJICYmIFdMQU5fODAyMTEKIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IENSWVBUTwogCXNlbGVjdCBDUllQVE9fQVJDNApAQCAtMTg1LDcgKzE4Niw3IEBACiAJICAlIGVjaG8gMHgwMDAwMEZGTyA+IC9wcm9jL25ldC9pZWVlODAyMTEvZGVidWdfbGV2ZWwKIAogCSAgRm9yIGEgbGlzdCBvZiB2YWx1ZXMgeW91IGNhbiBhc3NpZ24gdG8gZGVidWdfbGV2ZWwsIHlvdQotCSAgY2FuIGxvb2sgYXQgdGhlIGJpdCBtYXNrIHZhbHVlcyBpbiA8bmV0L2llZWU4MDIxMS5oPgorCSAgY2FuIGxvb2sgYXQgdGhlIGJpdCBtYXNrIHZhbHVlcyBpbiBpZWVlODAyMTEuaAogCiAJICBJZiB5b3UgYXJlIG5vdCB0cnlpbmcgdG8gZGVidWcgb3IgZGV2ZWxvcCB0aGUgbGliaXB3CiAJICBjb21wb25lbnQsIHlvdSBtb3N0IGxpa2VseSB3YW50IHRvIHNheSBOIGhlcmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2llZWU4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDc1NWMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pZWVlODAyMTEuaApAQCAtMCwwICsxLDEwODcgQEAKKy8qCisgKiBNZXJnZWQgd2l0aCBtYWlubGluZSBpZWVlODAyMTEuaCBpbiBBdWcgMjAwNC4gIE9yaWdpbmFsIGllZWU4MDJfMTEKKyAqIHJlbWFpbnMgY29weXJpZ2h0IGJ5IHRoZSBvcmlnaW5hbCBhdXRob3JzCisgKgorICogUG9ydGlvbnMgb2YgdGhlIG1lcmdlZCBjb2RlIGFyZSBiYXNlZCBvbiBIb3N0IEFQIChzb2Z0d2FyZSB3aXJlbGVzcworICogTEFOIGFjY2VzcyBwb2ludCkgZHJpdmVyIGZvciBJbnRlcnNpbCBQcmlzbTIvMi41LzMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIsIFNTSCBDb21tdW5pY2F0aW9ucyBTZWN1cml0eSBDb3JwIGFuZCBKb3VuaSBNYWxpbmVuCisgKiA8akB3MS5maT4KKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzLCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorICoKKyAqIEFkYXB0aW9uIHRvIGEgZ2VuZXJpYyBJRUVFIDgwMi4xMSBzdGFjayBieSBKYW1lcyBLZXRyZW5vcworICogPGprZXRyZW5vQGxpbnV4LmludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1LCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIFNlZSBSRUFETUUgYW5kIENPUFlJTkcgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogQVBJIFZlcnNpb24gSGlzdG9yeQorICogMS4wLnggLS0gSW5pdGlhbCB2ZXJzaW9uCisgKiAxLjEueCAtLSBBZGRlZCByYWRpb3RhcCwgUW9TLCBUSU0sIGllZWU4MDIxMV9nZW8gQVBJcywKKyAqICAgICAgICAgIHZhcmlvdXMgc3RydWN0dXJlIGNoYW5nZXMsIGFuZCBjcnlwdG8gQVBJIGluaXQgbWV0aG9kCisgKi8KKyNpZm5kZWYgSUVFRTgwMjExX0gKKyNkZWZpbmUgSUVFRTgwMjExX0gKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgkvKiBFVEhfQUxFTiAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkvKiBBUlJBWV9TSVpFICovCisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKworI2luY2x1ZGUgPG5ldC9saWI4MDIxMS5oPgorCisjZGVmaW5lIElFRUU4MDIxMV9WRVJTSU9OICJnaXQtMS4xLjEzIgorCisjZGVmaW5lIElFRUU4MDIxMV9EQVRBX0xFTgkJMjMwNAorLyogTWF4aW11bSBzaXplIGZvciB0aGUgTUEtVU5JVERBVEEgcHJpbWl0aXZlLCA4MDIuMTEgc3RhbmRhcmQgc2VjdGlvbgorICAgNi4yLjEuMS4yLgorCisgICBUaGUgZmlndXJlIGluIHNlY3Rpb24gNy4xLjIgc3VnZ2VzdHMgYSBib2R5IHNpemUgb2YgdXAgdG8gMjMxMgorICAgYnl0ZXMgaXMgYWxsb3dlZCwgd2hpY2ggaXMgYSBiaXQgY29uZnVzaW5nLCBJIHN1c3BlY3QgdGhpcworICAgcmVwcmVzZW50cyB0aGUgMjMwNCBieXRlcyBvZiByZWFsIGRhdGEsIHBsdXMgYSBwb3NzaWJsZSA4IGJ5dGVzIG9mCisgICBXRVAgSVYgYW5kIElDVi4gKHRoaXMgaW50ZXJwcmV0YXRpb24gc3VnZ2VzdGVkIGJ5IFJhbWlybyBCYXJyZWlybykgKi8KKworI2RlZmluZSBJRUVFODAyMTFfMUFERFJfTEVOIDEwCisjZGVmaW5lIElFRUU4MDIxMV8yQUREUl9MRU4gMTYKKyNkZWZpbmUgSUVFRTgwMjExXzNBRERSX0xFTiAyNAorI2RlZmluZSBJRUVFODAyMTFfNEFERFJfTEVOIDMwCisjZGVmaW5lIElFRUU4MDIxMV9GQ1NfTEVOICAgIDQKKyNkZWZpbmUgSUVFRTgwMjExX0hMRU4JCQkoSUVFRTgwMjExXzRBRERSX0xFTikKKyNkZWZpbmUgSUVFRTgwMjExX0ZSQU1FX0xFTgkJKElFRUU4MDIxMV9EQVRBX0xFTiArIElFRUU4MDIxMV9ITEVOKQorCisjZGVmaW5lIE1JTl9GUkFHX1RIUkVTSE9MRCAgICAgMjU2VQorI2RlZmluZQlNQVhfRlJBR19USFJFU0hPTEQgICAgIDIzNDZVCisKKy8qIFFPUyBjb250cm9sICovCisjZGVmaW5lIElFRUU4MDIxMV9RQ1RMX1RJRAkJMHgwMDBGCisKKy8qIGRlYnVnIG1hY3JvcyAqLworCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRworZXh0ZXJuIHUzMiBpZWVlODAyMTFfZGVidWdfbGV2ZWw7CisjZGVmaW5lIElFRUU4MDIxMV9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCitkbyB7IGlmIChpZWVlODAyMTFfZGVidWdfbGV2ZWwgJiAobGV2ZWwpKSBcCisgIHByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTE6ICVjICVzICIgZm10LCBcCisgICAgICAgICBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19mdW5jX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfcmF0ZWxpbWl0X2RlYnVnKHUzMiBsZXZlbCkKK3sKKwlyZXR1cm4gKGllZWU4MDIxMV9kZWJ1Z19sZXZlbCAmIGxldmVsKSAmJiBuZXRfcmF0ZWxpbWl0KCk7Cit9CisjZWxzZQorI2RlZmluZSBJRUVFODAyMTFfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCitzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3JhdGVsaW1pdF9kZWJ1Zyh1MzIgbGV2ZWwpCit7CisJcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCQkJCS8qIENPTkZJR19MSUJJUFdfREVCVUcgKi8KKworLyoKKyAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOgorICoKKyAqIElmIHlvdSBhcmUgZGVmaW5pbmcgYSBuZXcgZGVidWcgY2xhc3NpZmljYXRpb24sIHNpbXBseSBhZGQgaXQgdG8gdGhlICNkZWZpbmUKKyAqIGxpc3QgaGVyZSBpbiB0aGUgZm9ybSBvZjoKKyAqCisgKiAjZGVmaW5lIElFRUU4MDIxMV9ETF94eHh4IFZBTFVFCisgKgorICogc2hpZnRpbmcgdmFsdWUgdG8gdGhlIGxlZnQgb25lIGJpdCBmcm9tIHRoZSBwcmV2aW91cyBlbnRyeS4gIHh4eHggc2hvdWxkIGJlCisgKiB0aGUgbmFtZSBvZiB0aGUgY2xhc3NpZmljYXRpb24gKGZvciBleGFtcGxlLCBXRVApCisgKgorICogWW91IHRoZW4gbmVlZCB0byBlaXRoZXIgYWRkIGEgSUVFRTgwMjExX3h4eHhfREVCVUcoKSBtYWNybyBkZWZpbml0aW9uIGZvciB5b3VyCisgKiBjbGFzc2lmaWNhdGlvbiwgb3IgdXNlIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfeHh4eCwgLi4uKSB3aGVuZXZlciB5b3Ugd2FudAorICogdG8gc2VuZCBvdXRwdXQgdG8gdGhhdCBjbGFzc2lmaWNhdGlvbi4KKyAqCisgKiBUbyBhZGQgeW91ciBkZWJ1ZyBsZXZlbCB0byB0aGUgbGlzdCBvZiBsZXZlbHMgc2VlbiB3aGVuIHlvdSBwZXJmb3JtCisgKgorICogJSBjYXQgL3Byb2MvbmV0L2llZWU4MDIxMS9kZWJ1Z19sZXZlbAorICoKKyAqIHlvdSBzaW1wbHkgbmVlZCB0byBhZGQgeW91ciBlbnRyeSB0byB0aGUgaWVlZTgwMjExX2RlYnVnX2xldmVsIGFycmF5LgorICoKKyAqIElmIHlvdSBkbyBub3Qgc2VlIGRlYnVnX2xldmVsIGluIC9wcm9jL25ldC9pZWVlODAyMTEgdGhlbiB5b3UgZG8gbm90IGhhdmUKKyAqIENPTkZJR19MSUJJUFdfREVCVUcgZGVmaW5lZCBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uCisgKgorICovCisKKyNkZWZpbmUgSUVFRTgwMjExX0RMX0lORk8gICAgICAgICAgKDE8PDApCisjZGVmaW5lIElFRUU4MDIxMV9ETF9XWCAgICAgICAgICAgICgxPDwxKQorI2RlZmluZSBJRUVFODAyMTFfRExfU0NBTiAgICAgICAgICAoMTw8MikKKyNkZWZpbmUgSUVFRTgwMjExX0RMX1NUQVRFICAgICAgICAgKDE8PDMpCisjZGVmaW5lIElFRUU4MDIxMV9ETF9NR01UICAgICAgICAgICgxPDw0KQorI2RlZmluZSBJRUVFODAyMTFfRExfRlJBRyAgICAgICAgICAoMTw8NSkKKyNkZWZpbmUgSUVFRTgwMjExX0RMX0RST1AgICAgICAgICAgKDE8PDcpCisKKyNkZWZpbmUgSUVFRTgwMjExX0RMX1RYICAgICAgICAgICAgKDE8PDgpCisjZGVmaW5lIElFRUU4MDIxMV9ETF9SWCAgICAgICAgICAgICgxPDw5KQorI2RlZmluZSBJRUVFODAyMTFfRExfUU9TICAgICAgICAgICAoMTw8MzEpCisKKyNkZWZpbmUgSUVFRTgwMjExX0VSUk9SKGYsIGEuLi4pIHByaW50ayhLRVJOX0VSUiAiaWVlZTgwMjExOiAiIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9XQVJOSU5HKGYsIGEuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgImllZWU4MDIxMTogIiBmLCAjIyBhKQorI2RlZmluZSBJRUVFODAyMTFfREVCVUdfSU5GTyhmLCBhLi4uKSAgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfSU5GTywgZiwgIyMgYSkKKworI2RlZmluZSBJRUVFODAyMTFfREVCVUdfV1goZiwgYS4uLikgICAgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfV1gsIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19TQ0FOKGYsIGEuLi4pICAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9TQ0FOLCBmLCAjIyBhKQorI2RlZmluZSBJRUVFODAyMTFfREVCVUdfU1RBVEUoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfU1RBVEUsIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19NR01UKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX01HTVQsIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19GUkFHKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0ZSQUcsIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19EUk9QKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0RST1AsIGYsICMjIGEpCisjZGVmaW5lIElFRUU4MDIxMV9ERUJVR19UWChmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UWCwgZiwgIyMgYSkKKyNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1JYKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1JYLCBmLCAjIyBhKQorI2RlZmluZSBJRUVFODAyMTFfREVCVUdfUU9TKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1FPUywgZiwgIyMgYSkKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4JLyogQVJQSFJEX0VUSEVSICovCisKKyNpZm5kZWYgV0lSRUxFU1NfU1BZCisjZGVmaW5lIFdJUkVMRVNTX1NQWQkJLyogZW5hYmxlIGl3c3B5IHN1cHBvcnQgKi8KKyNlbmRpZgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CS8qIG5ldyBkcml2ZXIgQVBJICovCisKKyNkZWZpbmUgRVRIX1BfUFJFQVVUSCAweDg4QzcJLyogSUVFRSA4MDIuMTFpIHByZS1hdXRoZW50aWNhdGlvbiAqLworCisjaWZuZGVmIEVUSF9QXzgwMjExX1JBVworI2RlZmluZSBFVEhfUF84MDIxMV9SQVcgKEVUSF9QX0VDT05FVCArIDEpCisjZW5kaWYKKworLyogSUVFRSA4MDIuMTEgZGVmaW5lcyAqLworCisjZGVmaW5lIFA4MDIxMV9PVUlfTEVOIDMKKworc3RydWN0IGllZWU4MDIxMV9zbmFwX2hkciB7CisKKwl1OCBkc2FwOwkJLyogYWx3YXlzIDB4QUEgKi8KKwl1OCBzc2FwOwkJLyogYWx3YXlzIDB4QUEgKi8KKwl1OCBjdHJsOwkJLyogYWx3YXlzIDB4MDMgKi8KKwl1OCBvdWlbUDgwMjExX09VSV9MRU5dOwkvKiBvcmdhbml6YXRpb25hbCB1bml2ZXJzYWwgaWQgKi8KKworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgU05BUF9TSVpFIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3NuYXBfaGRyKQorCisjZGVmaW5lIFdMQU5fRkNfR0VUX1ZFUlMoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfVkVSUykKKyNkZWZpbmUgV0xBTl9GQ19HRVRfVFlQRShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkKKyNkZWZpbmUgV0xBTl9GQ19HRVRfU1RZUEUoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpCisKKyNkZWZpbmUgV0xBTl9HRVRfU0VRX0ZSQUcoc2VxKSAoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9GUkFHKQorI2RlZmluZSBXTEFOX0dFVF9TRVFfU0VRKHNlcSkgICgoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCisKKyNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX1NJR05BTCAoMTw8MCkKKyNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX1JTU0kgKDE8PDEpCisjZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19OT0lTRSAoMTw8MikKKyNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX1JBVEUgKDE8PDMpCisjZGVmaW5lIElFRUU4MDIxMV9TVEFUTUFTS19XRU1BU0sgMHg3CisKKyNkZWZpbmUgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OICAgICgxPDwwKQorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9NT0RVTEFUSU9OICAgKDE8PDEpCisKKyNkZWZpbmUgSUVFRTgwMjExXzI0R0haX0JBTkQgICAgICgxPDwwKQorI2RlZmluZSBJRUVFODAyMTFfNTJHSFpfQkFORCAgICAgKDE8PDEpCisKKyNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzFNQgkJICAgICAgICAweDAyCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8yTUIJCSAgICAgICAgMHgwNAorI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CCQkgICAgICAgIDB4MEIKKyNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzExTUIJCSAgICAgICAgMHgxNgorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQgkJICAgICAgICAweDBDCisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1CCQkgICAgICAgIDB4MTIKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CCQkweDE4CisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMThNQgkJMHgyNAorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUIJCTB4MzAKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8zNk1CCQkweDQ4CisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQgkJMHg2MAorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUIJCTB4NkMKKyNkZWZpbmUgSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSwkJMHg4MAorCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xTUJfTUFTSwkJKDE8PDApCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8yTUJfTUFTSwkJKDE8PDEpCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV81TUJfTUFTSwkJKDE8PDIpCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1CX01BU0sJCSgxPDwzKQorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLCQkoMTw8NCkKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSwkJKDE8PDUpCisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQl9NQVNLCQkoMTw8NikKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8xOE1CX01BU0sJCSgxPDw3KQorI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJfTUFTSwkJKDE8PDgpCisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQl9NQVNLCQkoMTw8OSkKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0sJCSgxPDwxMCkKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV81NE1CX01BU0sJCSgxPDwxMSkKKworI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVTX01BU0sJICAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElFRUU4MDIxMV9DQ0tfQkFTSUNfUkFURVNfTUFTSwkoSUVFRTgwMjExX0NDS19SQVRFXzFNQl9NQVNLIHwgXAorCUlFRUU4MDIxMV9DQ0tfUkFURV8yTUJfTUFTSykKKyNkZWZpbmUgSUVFRTgwMjExX0NDS19ERUZBVUxUX1JBVEVTX01BU0sJKElFRUU4MDIxMV9DQ0tfQkFTSUNfUkFURVNfTUFTSyB8IFwKKyAgICAgICAgSUVFRTgwMjExX0NDS19SQVRFXzVNQl9NQVNLIHwgXAorICAgICAgICBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQl9NQVNLKQorCisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVTX01BU0sJCTB4MDAwMDBGRjAKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fQkFTSUNfUkFURVNfTUFTSwkoSUVFRTgwMjExX09GRE1fUkFURV82TUJfTUFTSyB8IFwKKwlJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUJfTUFTSyB8IFwKKwlJRUVFODAyMTFfT0ZETV9SQVRFXzI0TUJfTUFTSykKKyNkZWZpbmUgSUVFRTgwMjExX09GRE1fREVGQVVMVF9SQVRFU19NQVNLCShJRUVFODAyMTFfT0ZETV9CQVNJQ19SQVRFU19NQVNLIHwgXAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfOU1CX01BU0sgIHwgXAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfMThNQl9NQVNLIHwgXAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfMzZNQl9NQVNLIHwgXAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfNDhNQl9NQVNLIHwgXAorCUlFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQl9NQVNLKQorI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9SQVRFU19NQVNLIChJRUVFODAyMTFfT0ZETV9ERUZBVUxUX1JBVEVTX01BU0sgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElFRUU4MDIxMV9DQ0tfREVGQVVMVF9SQVRFU19NQVNLKQorCisjZGVmaW5lIElFRUU4MDIxMV9OVU1fT0ZETV9SQVRFUwkgICAgOAorI2RlZmluZSBJRUVFODAyMTFfTlVNX0NDS19SQVRFUwkgICAgICAgICAgICA0CisjZGVmaW5lIElFRUU4MDIxMV9PRkRNX1NISUZUX01BU0tfQSAgICAgICAgIDQKKworLyogTk9URTogVGhpcyBkYXRhIGlzIGZvciBzdGF0aXN0aWNhbCBwdXJwb3Nlczsgbm90IGFsbCBoYXJkd2FyZSBwcm92aWRlcyB0aGlzCisgKiAgICAgICBpbmZvcm1hdGlvbiBmb3IgZnJhbWVzIHJlY2VpdmVkLgorICogICAgICAgRm9yIGllZWU4MDIxMV9yeF9tZ3QsIHlvdSBuZWVkIHRvIHNldCBhdCBsZWFzdCB0aGUgJ2xlbicgcGFyYW1ldGVyLgorICovCitzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzIHsKKwl1MzIgbWFjX3RpbWU7CisJczggcnNzaTsKKwl1OCBzaWduYWw7CisJdTggbm9pc2U7CisJdTE2IHJhdGU7CQkvKiBpbiAxMDAga2JwcyAqLworCXU4IHJlY2VpdmVkX2NoYW5uZWw7CisJdTggY29udHJvbDsKKwl1OCBtYXNrOworCXU4IGZyZXE7CisJdTE2IGxlbjsKKwl1NjQgdHNmOworCXUzMiBiZWFjb25fdGltZTsKK307CisKKy8qIElFRUUgODAyLjExIHJlcXVpcmVzIHRoYXQgU1RBIHN1cHBvcnRzIGNvbmN1cnJlbnQgcmVjZXB0aW9uIG9mIGF0IGxlYXN0CisgKiB0aHJlZSBmcmFnbWVudGVkIGZyYW1lcy4gVGhpcyBkZWZpbmUgY2FuIGJlIGluY3JlYXNlZCB0byBzdXBwb3J0IG1vcmUKKyAqIGNvbmN1cnJlbnQgZnJhbWVzLCBidXQgaXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgZWFjaCBlbnRyeSBjYW4gY29uc3VtZSBhYm91dAorICogMiBrQiBvZiBSQU0gYW5kIGluY3JlYXNpbmcgY2FjaGUgc2l6ZSB3aWxsIHNsb3cgZG93biBmcmFtZSByZWFzc2VtYmx5LiAqLworI2RlZmluZSBJRUVFODAyMTFfRlJBR19DQUNIRV9MRU4gNAorCitzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdfZW50cnkgeworCXVuc2lnbmVkIGxvbmcgZmlyc3RfZnJhZ190aW1lOworCXVuc2lnbmVkIGludCBzZXE7CisJdW5zaWduZWQgaW50IGxhc3RfZnJhZzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXU4IHNyY19hZGRyW0VUSF9BTEVOXTsKKwl1OCBkc3RfYWRkcltFVEhfQUxFTl07Cit9OworCitzdHJ1Y3QgaWVlZTgwMjExX3N0YXRzIHsKKwl1bnNpZ25lZCBpbnQgdHhfdW5pY2FzdF9mcmFtZXM7CisJdW5zaWduZWQgaW50IHR4X211bHRpY2FzdF9mcmFtZXM7CisJdW5zaWduZWQgaW50IHR4X2ZyYWdtZW50czsKKwl1bnNpZ25lZCBpbnQgdHhfdW5pY2FzdF9vY3RldHM7CisJdW5zaWduZWQgaW50IHR4X211bHRpY2FzdF9vY3RldHM7CisJdW5zaWduZWQgaW50IHR4X2RlZmVycmVkX3RyYW5zbWlzc2lvbnM7CisJdW5zaWduZWQgaW50IHR4X3NpbmdsZV9yZXRyeV9mcmFtZXM7CisJdW5zaWduZWQgaW50IHR4X211bHRpcGxlX3JldHJ5X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgdHhfcmV0cnlfbGltaXRfZXhjZWVkZWQ7CisJdW5zaWduZWQgaW50IHR4X2Rpc2NhcmRzOworCXVuc2lnbmVkIGludCByeF91bmljYXN0X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgcnhfbXVsdGljYXN0X2ZyYW1lczsKKwl1bnNpZ25lZCBpbnQgcnhfZnJhZ21lbnRzOworCXVuc2lnbmVkIGludCByeF91bmljYXN0X29jdGV0czsKKwl1bnNpZ25lZCBpbnQgcnhfbXVsdGljYXN0X29jdGV0czsKKwl1bnNpZ25lZCBpbnQgcnhfZmNzX2Vycm9yczsKKwl1bnNpZ25lZCBpbnQgcnhfZGlzY2FyZHNfbm9fYnVmZmVyOworCXVuc2lnbmVkIGludCB0eF9kaXNjYXJkc193cm9uZ19zYTsKKwl1bnNpZ25lZCBpbnQgcnhfZGlzY2FyZHNfdW5kZWNyeXB0YWJsZTsKKwl1bnNpZ25lZCBpbnQgcnhfbWVzc2FnZV9pbl9tc2dfZnJhZ21lbnRzOworCXVuc2lnbmVkIGludCByeF9tZXNzYWdlX2luX2JhZF9tc2dfZnJhZ21lbnRzOworfTsKKworc3RydWN0IGllZWU4MDIxMV9kZXZpY2U7CisKKyNkZWZpbmUgU0VDX0tFWV8xCQkoMTw8MCkKKyNkZWZpbmUgU0VDX0tFWV8yCQkoMTw8MSkKKyNkZWZpbmUgU0VDX0tFWV8zCQkoMTw8MikKKyNkZWZpbmUgU0VDX0tFWV80CQkoMTw8MykKKyNkZWZpbmUgU0VDX0FDVElWRV9LRVkJCSgxPDw0KQorI2RlZmluZSBTRUNfQVVUSF9NT0RFCQkoMTw8NSkKKyNkZWZpbmUgU0VDX1VOSUNBU1RfR1JPVVAJKDE8PDYpCisjZGVmaW5lIFNFQ19MRVZFTAkJKDE8PDcpCisjZGVmaW5lIFNFQ19FTkFCTEVECQkoMTw8OCkKKyNkZWZpbmUgU0VDX0VOQ1JZUFQJCSgxPDw5KQorCisjZGVmaW5lIFNFQ19MRVZFTF8wCQkwCS8qIE5vbmUgKi8KKyNkZWZpbmUgU0VDX0xFVkVMXzEJCTEJLyogV0VQIDQwIGFuZCAxMDQgYml0ICovCisjZGVmaW5lIFNFQ19MRVZFTF8yCQkyCS8qIExldmVsIDEgKyBUS0lQICovCisjZGVmaW5lIFNFQ19MRVZFTF8yX0NLSVAJMwkvKiBMZXZlbCAxICsgQ0tJUCAqLworI2RlZmluZSBTRUNfTEVWRUxfMwkJNAkvKiBMZXZlbCAyICsgQ0NNUCAqLworCisjZGVmaW5lIFNFQ19BTEdfTk9ORQkJMAorI2RlZmluZSBTRUNfQUxHX1dFUAkJMQorI2RlZmluZSBTRUNfQUxHX1RLSVAJCTIKKyNkZWZpbmUgU0VDX0FMR19DQ01QCQkzCisKKyNkZWZpbmUgV0VQX0tFWVMJCTQKKyNkZWZpbmUgV0VQX0tFWV9MRU4JCTEzCisjZGVmaW5lIFNDTV9LRVlfTEVOCQkzMgorI2RlZmluZSBTQ01fVEVNUE9SQUxfS0VZX0xFTkdUSAkxNgorCitzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5IHsKKwl1MTYgYWN0aXZlX2tleToyLCBlbmFibGVkOjEsIHVuaWNhc3RfdXNlc19ncm91cDoxLCBlbmNyeXB0OjE7CisJdTggYXV0aF9tb2RlOworCXU4IGVuY29kZV9hbGdbV0VQX0tFWVNdOworCXU4IGtleV9zaXplc1tXRVBfS0VZU107CisJdTgga2V5c1tXRVBfS0VZU11bU0NNX0tFWV9MRU5dOworCXU4IGxldmVsOworCXUxNiBmbGFnczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorCisgODAyLjExIGRhdGEgZnJhbWUgZnJvbSBBUAorCisgICAgICAsLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK0J5dGVzIHwgIDIgICB8ICAyICAgfCAgICA2ICAgIHwgICAgNiAgICB8ICAgIDYgICAgfCAgMiAgIHwgMC4uMjMxMiB8ICAgNCAgfAorICAgICAgfC0tLS0tLXwtLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS18LS0tLS0tfC0tLS0tLS0tLXwtLS0tLS18CitEZXNjLiB8IGN0cmwgfCBkdXJhIHwgIERBL1JBICB8ICAgVEEgICAgfCAgICBTQSAgIHwgU2VxdSB8ICBmcmFtZSAgfCAgZmNzIHwKKyAgICAgIHwgICAgICB8IHRpb24gfCAoQlNTSUQpIHwgICAgICAgICB8ICAgICAgICAgfCBlbmNlIHwgIGRhdGEgICB8ICAgICAgfAorICAgICAgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCisKK1RvdGFsOiAyOC0yMzQwIGJ5dGVzCisKKyovCisKKyNkZWZpbmUgQkVBQ09OX1BST0JFX1NTSURfSURfUE9TSVRJT04gMTIKKworc3RydWN0IGllZWU4MDIxMV9oZHJfMWFkZHIgeworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBwYXlsb2FkWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfaGRyXzJhZGRyIHsKKwlfX2xlMTYgZnJhbWVfY3RsOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVtFVEhfQUxFTl07CisJdTggYWRkcjJbRVRIX0FMRU5dOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgeworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBhZGRyMltFVEhfQUxFTl07CisJdTggYWRkcjNbRVRIX0FMRU5dOworCV9fbGUxNiBzZXFfY3RsOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgeworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKKwl1OCBhZGRyMltFVEhfQUxFTl07CisJdTggYWRkcjNbRVRIX0FMRU5dOworCV9fbGUxNiBzZXFfY3RsOworCXU4IGFkZHI0W0VUSF9BTEVOXTsKKwl1OCBwYXlsb2FkWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zIHsKKwlfX2xlMTYgZnJhbWVfY3RsOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVtFVEhfQUxFTl07CisJdTggYWRkcjJbRVRIX0FMRU5dOworCXU4IGFkZHIzW0VUSF9BTEVOXTsKKwlfX2xlMTYgc2VxX2N0bDsKKwl1OCBwYXlsb2FkWzBdOworCV9fbGUxNiBxb3NfY3RsOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IHsKKwl1OCBpZDsKKwl1OCBsZW47CisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogVGhlc2UgYXJlIHRoZSBkYXRhIHR5cGVzIHRoYXQgY2FuIG1ha2UgdXAgbWFuYWdlbWVudCBwYWNrZXRzCisgKgorCXUxNiBhdXRoX2FsZ29yaXRobTsKKwl1MTYgYXV0aF9zZXF1ZW5jZTsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCXUxNiBjYXBhYmlsaXR5OworCXU4IGN1cnJlbnRfYXBbRVRIX0FMRU5dOworCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJc3RydWN0IHsKKwkJdTE2IGFzc29jaWF0aW9uX2lkOjE0LCByZXNlcnZlZDoyOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXUzMiB0aW1lX3N0YW1wWzJdOworCXUxNiByZWFzb247CisJdTE2IHN0YXR1czsKKyovCisKK3N0cnVjdCBpZWVlODAyMTFfYXV0aCB7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiBhbGdvcml0aG07CisJX19sZTE2IHRyYW5zYWN0aW9uOworCV9fbGUxNiBzdGF0dXM7CisJLyogY2hhbGxlbmdlICovCisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2ggeworCXU4IGlkOworCXU4IGxlbjsKKwl1OCBtb2RlOworCXU4IGNoYW5uZWw7CisJdTggY291bnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9hY3Rpb24geworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwl1OCBjYXRlZ29yeTsKKwl1OCBhY3Rpb247CisJdW5pb24geworCQlzdHJ1Y3QgaWVlZTgwMjExX2FjdGlvbl9leGNoYW5nZSB7CisJCQl1OCB0b2tlbjsKKwkJCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKKwkJfSBleGNoYW5nZTsKKwkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCBjaGFubmVsX3N3aXRjaDsKKworCX0gZm9ybWF0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMTYgcmVhc29uOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIEFsaWFzIGRlYXV0aCBmb3IgZGlzYXNzb2MgKi8KKyNkZWZpbmUgaWVlZTgwMjExX2RlYXV0aCBpZWVlODAyMTFfZGlzYXNzb2MKKworc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7CisJLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzICovCisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMzIgdGltZV9zdGFtcFsyXTsKKwlfX2xlMTYgYmVhY29uX2ludGVydmFsOworCV9fbGUxNiBjYXBhYmlsaXR5OworCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcywgRkggcGFyYW1zLCBEUyBwYXJhbXMsCisJICogQ0YgcGFyYW1zLCBJQlNTIHBhcmFtcywgVElNIChpZiBiZWFjb24pLCBSU04gKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyogQWxpYXMgYmVhY29uIGZvciBwcm9iZV9yZXNwb25zZSAqLworI2RlZmluZSBpZWVlODAyMTFfYmVhY29uIGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZQorCitzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3QgeworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKKwlfX2xlMTYgY2FwYWJpbGl0eTsKKwlfX2xlMTYgbGlzdGVuX2ludGVydmFsOworCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcywgUlNOICovCisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfcmVhc3NvY19yZXF1ZXN0IHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7CisJX19sZTE2IGNhcGFiaWxpdHk7CisJX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwl1OCBjdXJyZW50X2FwW0VUSF9BTEVOXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSB7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOworCV9fbGUxNiBjYXBhYmlsaXR5OworCV9fbGUxNiBzdGF0dXM7CisJX19sZTE2IGFpZDsKKwkvKiBzdXBwb3J0ZWQgcmF0ZXMgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV90eGIgeworCXU4IG5yX2ZyYWdzOworCXU4IGVuY3J5cHRlZDsKKwl1OCBydHNfaW5jbHVkZWQ7CisJdTggcmVzZXJ2ZWQ7CisJdTE2IGZyYWdfc2l6ZTsKKwl1MTYgcGF5bG9hZF9zaXplOworCXN0cnVjdCBza19idWZmICpmcmFnbWVudHNbMF07Cit9OworCisvKiBTV0VFUCBUQUJMRSBFTlRSSUVTIE5VTUJFUiAqLworI2RlZmluZSBNQVhfU1dFRVBfVEFCX0VOVFJJRVMJCSAgNDIKKyNkZWZpbmUgTUFYX1NXRUVQX1RBQl9FTlRSSUVTX1BFUl9QQUNLRVQgIDcKKy8qIE1BWF9SQVRFU19MRU5HVEggbmVlZHMgdG8gYmUgMTIuICBUaGUgc3BlYyBzYXlzIDgsIGFuZCBtYW55IEFQcworICogb25seSB1c2UgOCwgYW5kIHRoZW4gdXNlIGV4dGVuZGVkIHJhdGVzIGZvciB0aGUgcmVtYWluaW5nIHN1cHBvcnRlZAorICogcmF0ZXMuICBPdGhlciBBUHMsIGhvd2V2ZXIsIHN0aWNrIGFsbCBvZiB0aGVpciBzdXBwb3J0ZWQgcmF0ZXMgb24gdGhlCisgKiBtYWluIHJhdGVzIGluZm9ybWF0aW9uIGVsZW1lbnQuLi4gKi8KKyNkZWZpbmUgTUFYX1JBVEVTX0xFTkdUSCAgICAgICAgICAgICAgICAgICgodTgpMTIpCisjZGVmaW5lIE1BWF9SQVRFU19FWF9MRU5HVEggICAgICAgICAgICAgICAoKHU4KTE2KQorI2RlZmluZSBNQVhfTkVUV09SS19DT1VOVCAgICAgICAgICAgICAgICAgIDEyOAorCisjZGVmaW5lIENSQ19MRU5HVEggICAgICAgICAgICAgICAgIDRVCisKKyNkZWZpbmUgTUFYX1dQQV9JRV9MRU4gNjQKKworI2RlZmluZSBORVRXT1JLX0hBU19PRkRNICAgICAgICgxPDwxKQorI2RlZmluZSBORVRXT1JLX0hBU19DQ0sgICAgICAgICgxPDwyKQorCisvKiBRb1Mgc3RydWN0dXJlICovCisjZGVmaW5lIE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTICAgICAgKDE8PDMpCisjZGVmaW5lIE5FVFdPUktfSEFTX1FPU19JTkZPUk1BVElPTiAgICAgKDE8PDQpCisjZGVmaW5lIE5FVFdPUktfSEFTX1FPU19NQVNLICAgICAgICAgICAgKE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTIHwgXAorCQkJCQkgTkVUV09SS19IQVNfUU9TX0lORk9STUFUSU9OKQorCisvKiA4MDIuMTFoICovCisjZGVmaW5lIE5FVFdPUktfSEFTX1BPV0VSX0NPTlNUUkFJTlQgICAgKDE8PDUpCisjZGVmaW5lIE5FVFdPUktfSEFTX0NTQSAgICAgICAgICAgICAgICAgKDE8PDYpCisjZGVmaW5lIE5FVFdPUktfSEFTX1FVSUVUICAgICAgICAgICAgICAgKDE8PDcpCisjZGVmaW5lIE5FVFdPUktfSEFTX0lCU1NfREZTICAgICAgICAgICAgKDE8PDgpCisjZGVmaW5lIE5FVFdPUktfSEFTX1RQQ19SRVBPUlQgICAgICAgICAgKDE8PDkpCisKKyNkZWZpbmUgTkVUV09SS19IQVNfRVJQX1ZBTFVFICAgICAgICAgICAoMTw8MTApCisKKyNkZWZpbmUgUU9TX1FVRVVFX05VTSAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFFPU19PVUlfTEVOICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBRT1NfT1VJX1RZUEUgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUU9TX0VMRU1FTlRfSUQgICAgICAgICAgICAgICAgICAyMjEKKyNkZWZpbmUgUU9TX09VSV9JTkZPX1NVQl9UWVBFICAgICAgICAgICAwCisjZGVmaW5lIFFPU19PVUlfUEFSQU1fU1VCX1RZUEUgICAgICAgICAgMQorI2RlZmluZSBRT1NfVkVSU0lPTl8xICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUU9TX0FJRlNOX01JTl9WQUxVRSAgICAgICAgICAgICAyCisKK3N0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQgeworCXU4IGVsZW1lbnRJRDsKKwl1OCBsZW5ndGg7CisJdTggcXVpW1FPU19PVUlfTEVOXTsKKwl1OCBxdWlfdHlwZTsKKwl1OCBxdWlfc3VidHlwZTsKKwl1OCB2ZXJzaW9uOworCXU4IGFjX2luZm87Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9xb3NfYWNfcGFyYW1ldGVyIHsKKwl1OCBhY2lfYWlmc247CisJdTggZWN3X21pbl9tYXg7CisJX19sZTE2IHR4X29wX2xpbWl0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcl9pbmZvIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IGluZm9fZWxlbWVudDsKKwl1OCByZXNlcnZlZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19hY19wYXJhbWV0ZXIgYWNfcGFyYW1zX3JlY29yZFtRT1NfUVVFVUVfTlVNXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIHsKKwlfX2xlMTYgY3dfbWluW1FPU19RVUVVRV9OVU1dOworCV9fbGUxNiBjd19tYXhbUU9TX1FVRVVFX05VTV07CisJdTggYWlmc1tRT1NfUVVFVUVfTlVNXTsKKwl1OCBmbGFnW1FPU19RVUVVRV9OVU1dOworCV9fbGUxNiB0eF9vcF9saW1pdFtRT1NfUVVFVUVfTlVNXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisJaW50IGFjdGl2ZTsKKwlpbnQgc3VwcG9ydGVkOworCXU4IHBhcmFtX2NvdW50OworCXU4IG9sZF9wYXJhbV9jb3VudDsKK307CisKK3N0cnVjdCBpZWVlODAyMTFfdGltX3BhcmFtZXRlcnMgeworCXU4IHRpbV9jb3VudDsKKwl1OCB0aW1fcGVyaW9kOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitlbnVtIHsJCQkJLyogaWVlZTgwMjExX2Jhc2ljX3JlcG9ydC5tYXAgKi8KKwlJRUVFODAyMTFfQkFTSUNfTUFQX0JTUyA9ICgxIDw8IDApLAorCUlFRUU4MDIxMV9CQVNJQ19NQVBfT0ZETSA9ICgxIDw8IDEpLAorCUlFRUU4MDIxMV9CQVNJQ19NQVBfVU5JREVOVElGSUVEID0gKDEgPDwgMiksCisJSUVFRTgwMjExX0JBU0lDX01BUF9SQURBUiA9ICgxIDw8IDMpLAorCUlFRUU4MDIxMV9CQVNJQ19NQVBfVU5NRUFTVVJFRCA9ICgxIDw8IDQpLAorCS8qIEJpdHMgNS03IGFyZSByZXNlcnZlZCAqLworCit9Oworc3RydWN0IGllZWU4MDIxMV9iYXNpY19yZXBvcnQgeworCXU4IGNoYW5uZWw7CisJX19sZTY0IHN0YXJ0X3RpbWU7CisJX19sZTE2IGR1cmF0aW9uOworCXU4IG1hcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitlbnVtIHsJCQkJLyogaWVlZTgwMjExX21lYXN1cmVtZW50X3JlcXVlc3QubW9kZSAqLworCS8qIEJpdCAwIGlzIHJlc2VydmVkICovCisJSUVFRTgwMjExX01FQVNVUkVNRU5UX0VOQUJMRSA9ICgxIDw8IDEpLAorCUlFRUU4MDIxMV9NRUFTVVJFTUVOVF9SRVFVRVNUID0gKDEgPDwgMiksCisJSUVFRTgwMjExX01FQVNVUkVNRU5UX1JFUE9SVCA9ICgxIDw8IDMpLAorCS8qIEJpdHMgNC03IGFyZSByZXNlcnZlZCAqLworfTsKKworZW51bSB7CisJSUVFRTgwMjExX1JFUE9SVF9CQVNJQyA9IDAsCS8qIHJlcXVpcmVkICovCisJSUVFRTgwMjExX1JFUE9SVF9DQ0EgPSAxLAkvKiBvcHRpb25hbCAqLworCUlFRUU4MDIxMV9SRVBPUlRfUlBJID0gMiwJLyogb3B0aW9uYWwgKi8KKwkvKiAzLTI1NSByZXNlcnZlZCAqLworfTsKKworc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgeworCXU4IGNoYW5uZWw7CisJX19sZTY0IHN0YXJ0X3RpbWU7CisJX19sZTE2IGR1cmF0aW9uOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcmVxdWVzdCB7CisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaWU7CisJdTggdG9rZW47CisJdTggbW9kZTsKKwl1OCB0eXBlOworCXN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcGFyYW1zIHBhcmFtc1swXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3JlcG9ydCB7CisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaWU7CisJdTggdG9rZW47CisJdTggbW9kZTsKKwl1OCB0eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IGllZWU4MDIxMV9iYXNpY19yZXBvcnQgYmFzaWNbMF07CisJfSB1OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfdHBjX3JlcG9ydCB7CisJdTggdHJhbnNtaXRfcG93ZXI7CisJdTggbGlua19tYXJnaW47Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX21hcCB7CisJdTggY2hhbm5lbDsKKwl1OCBtYXA7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9pYnNzX2RmcyB7CisJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaWU7CisJdTggb3duZXJbRVRIX0FMRU5dOworCXU4IHJlY292ZXJ5X2ludGVydmFsOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9tYXAgY2hhbm5lbF9tYXBbMF07Cit9OworCitzdHJ1Y3QgaWVlZTgwMjExX2NzYSB7CisJdTggbW9kZTsKKwl1OCBjaGFubmVsOworCXU4IGNvdW50OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpZWVlODAyMTFfcXVpZXQgeworCXU4IGNvdW50OworCXU4IHBlcmlvZDsKKwl1OCBkdXJhdGlvbjsKKwl1OCBvZmZzZXQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrIHsKKwkvKiBUaGVzZSBlbnRyaWVzIGFyZSB1c2VkIHRvIGlkZW50aWZ5IGEgdW5pcXVlIG5ldHdvcmsgKi8KKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggY2hhbm5lbDsKKwkvKiBFbnN1cmUgbnVsbC10ZXJtaW5hdGVkIGZvciBhbnkgZGVidWcgbXNncyAqLworCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKKwl1OCBzc2lkX2xlbjsKKworCXN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgcW9zX2RhdGE7CisKKwkvKiBUaGVzZSBhcmUgbmV0d29yayBzdGF0aXN0aWNzICovCisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyBzdGF0czsKKwl1MTYgY2FwYWJpbGl0eTsKKwl1OCByYXRlc1tNQVhfUkFURVNfTEVOR1RIXTsKKwl1OCByYXRlc19sZW47CisJdTggcmF0ZXNfZXhbTUFYX1JBVEVTX0VYX0xFTkdUSF07CisJdTggcmF0ZXNfZXhfbGVuOworCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkOworCXU4IG1vZGU7CisJdTMyIGZsYWdzOworCXUzMiBsYXN0X2Fzc29jaWF0ZTsKKwl1MzIgdGltZV9zdGFtcFsyXTsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CisJdTE2IGF0aW1fd2luZG93OworCXU4IGVycF92YWx1ZTsKKwl1OCB3cGFfaWVbTUFYX1dQQV9JRV9MRU5dOworCXNpemVfdCB3cGFfaWVfbGVuOworCXU4IHJzbl9pZVtNQVhfV1BBX0lFX0xFTl07CisJc2l6ZV90IHJzbl9pZV9sZW47CisJc3RydWN0IGllZWU4MDIxMV90aW1fcGFyYW1ldGVycyB0aW07CisKKwkvKiA4MDIuMTFoIGluZm8gKi8KKworCS8qIFBvd2VyIENvbnN0cmFpbnQgLSBtYW5kYXRvcnkgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KKwl1OCBwb3dlcl9jb25zdHJhaW50OworCisJLyogVFBDIFJlcG9ydCAtIG1hbmRhdG9yeSBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLworCXN0cnVjdCBpZWVlODAyMTFfdHBjX3JlcG9ydCB0cGNfcmVwb3J0OworCisJLyogSUJTUyBERlMgLSBtYW5kYXRvcnkgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgYW5kIElCU1MKKwkgKiBOT1RFOiBUaGlzIGlzIHZhcmlhYmxlIGxlbmd0aCBhbmQgc28gbXVzdCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2lic3NfZGZzICppYnNzX2RmczsKKworCS8qIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCAtIG9wdGlvbmFsIGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCisJc3RydWN0IGllZWU4MDIxMV9jc2EgY3NhOworCisJLyogUXVpZXQgLSBvcHRpb25hbCBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLworCXN0cnVjdCBpZWVlODAyMTFfcXVpZXQgcXVpZXQ7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitlbnVtIGllZWU4MDIxMV9zdGF0ZSB7CisJSUVFRTgwMjExX1VOSU5JVElBTElaRUQgPSAwLAorCUlFRUU4MDIxMV9JTklUSUFMSVpFRCwKKwlJRUVFODAyMTFfQVNTT0NJQVRJTkcsCisJSUVFRTgwMjExX0FTU09DSUFURUQsCisJSUVFRTgwMjExX0FVVEhFTlRJQ0FUSU5HLAorCUlFRUU4MDIxMV9BVVRIRU5USUNBVEVELAorCUlFRUU4MDIxMV9TSFVURE9XTgorfTsKKworI2RlZmluZSBERUZBVUxUX01BWF9TQ0FOX0FHRSAoMTUgKiBIWikKKyNkZWZpbmUgREVGQVVMVF9GVFMgMjM0NgorCisjZGVmaW5lIENGR19JRUVFODAyMTFfUkVTRVJWRV9GQ1MgKDE8PDApCisjZGVmaW5lIENGR19JRUVFODAyMTFfQ09NUFVURV9GQ1MgKDE8PDEpCisjZGVmaW5lIENGR19JRUVFODAyMTFfUlRTICgxPDwyKQorCisjZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9NSU5fQ0hBTk5FTCAxCisjZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9NQVhfQ0hBTk5FTCAxNAorI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfQ0hBTk5FTFMgKElFRUU4MDIxMV8yNEdIWl9NQVhfQ0hBTk5FTCAtIFwKKwkJCQkgIElFRUU4MDIxMV8yNEdIWl9NSU5fQ0hBTk5FTCArIDEpCisKKyNkZWZpbmUgSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMIDM0CisjZGVmaW5lIElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTCAxNjUKKyNkZWZpbmUgSUVFRTgwMjExXzUyR0haX0NIQU5ORUxTIChJRUVFODAyMTFfNTJHSFpfTUFYX0NIQU5ORUwgLSBcCisJCQkJICBJRUVFODAyMTFfNTJHSFpfTUlOX0NIQU5ORUwgKyAxKQorCitlbnVtIHsKKwlJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZID0gKDEgPDwgMCksCisJSUVFRTgwMjExX0NIXzgwMjExSF9SVUxFUyA9ICgxIDw8IDEpLAorCUlFRUU4MDIxMV9DSF9CX09OTFkgPSAoMSA8PCAyKSwKKwlJRUVFODAyMTFfQ0hfTk9fSUJTUyA9ICgxIDw8IDMpLAorCUlFRUU4MDIxMV9DSF9VTklGT1JNX1NQUkVBRElORyA9ICgxIDw8IDQpLAorCUlFRUU4MDIxMV9DSF9SQURBUl9ERVRFQ1QgPSAoMSA8PCA1KSwKKwlJRUVFODAyMTFfQ0hfSU5WQUxJRCA9ICgxIDw8IDYpLAorfTsKKworc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHsKKwl1MzIgZnJlcTsJLyogaW4gTUh6ICovCisJdTggY2hhbm5lbDsKKwl1OCBmbGFnczsKKwl1OCBtYXhfcG93ZXI7CS8qIGluIGRCbSAqLworfTsKKworc3RydWN0IGllZWU4MDIxMV9nZW8geworCXU4IG5hbWVbNF07CisJdTggYmdfY2hhbm5lbHM7CisJdTggYV9jaGFubmVsczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYmdbSUVFRTgwMjExXzI0R0haX0NIQU5ORUxTXTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYVtJRUVFODAyMTFfNTJHSFpfQ0hBTk5FTFNdOworfTsKKworc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWM7CisKKwkvKiBCb29ra2VlcGluZyBzdHJ1Y3R1cmVzICovCisJc3RydWN0IGllZWU4MDIxMV9zdGF0cyBpZWVlX3N0YXRzOworCisJc3RydWN0IGllZWU4MDIxMV9nZW8gZ2VvOworCisJLyogUHJvYmUgLyBCZWFjb24gbWFuYWdlbWVudCAqLworCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19mcmVlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBuZXR3b3JrX2xpc3Q7CisJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrczsKKwlpbnQgc2NhbnM7CisJaW50IHNjYW5fYWdlOworCisJaW50IGl3X21vZGU7CQkvKiBvcGVyYXRpbmcgbW9kZSAoSVdfTU9ERV8qKSAqLworCXN0cnVjdCBpd19zcHlfZGF0YSBzcHlfZGF0YTsJLyogaXdzcHkgc3VwcG9ydCAqLworCisJc3BpbmxvY2tfdCBsb2NrOworCisJaW50IHR4X2hlYWRyb29tOwkvKiBTZXQgdG8gc2l6ZSBvZiBhbnkgYWRkaXRpb25hbCByb29tIG5lZWRlZCBhdCBmcm9udAorCQkJCSAqIG9mIGFsbG9jYXRlZCBUeCBTS0JzICovCisJdTMyIGNvbmZpZzsKKworCS8qIFdFUCBhbmQgb3RoZXIgZW5jcnlwdGlvbiByZWxhdGVkIHNldHRpbmdzIGF0IHRoZSBkZXZpY2UgbGV2ZWwgKi8KKwlpbnQgb3Blbl93ZXA7CQkvKiBTZXQgdG8gMSB0byBhbGxvdyB1bmVuY3J5cHRlZCBmcmFtZXMgKi8KKworCWludCByZXNldF9vbl9rZXljaGFuZ2U7CS8qIFNldCB0byAxIGlmIHRoZSBIVyBuZWVkcyB0byBiZSByZXNldCBvbgorCQkJCSAqIFdFUCBrZXkgY2hhbmdlcyAqLworCisJLyogSWYgdGhlIGhvc3QgcGVyZm9ybXMge2VuLGRlfWNyeXB0aW9uLCB0aGVuIHNldCB0byAxICovCisJaW50IGhvc3RfZW5jcnlwdDsKKwlpbnQgaG9zdF9lbmNyeXB0X21zZHU7CisJaW50IGhvc3RfZGVjcnlwdDsKKwkvKiBob3N0IHBlcmZvcm1zIG11bHRpY2FzdCBkZWNyeXB0aW9uICovCisJaW50IGhvc3RfbWNfZGVjcnlwdDsKKworCS8qIGhvc3Qgc2hvdWxkIHN0cmlwIElWIGFuZCBJQ1YgZnJvbSBwcm90ZWN0ZWQgZnJhbWVzICovCisJLyogbWVhbmluZ2Z1bCBvbmx5IHdoZW4gaGFyZHdhcmUgZGVjcnlwdGlvbiBpcyBiZWluZyB1c2VkICovCisJaW50IGhvc3Rfc3RyaXBfaXZfaWN2OworCisJaW50IGhvc3Rfb3Blbl9mcmFnOworCWludCBob3N0X2J1aWxkX2l2OworCWludCBpZWVlODAyXzF4OwkJLyogaXMgSUVFRSA4MDIuMVggdXNlZCAqLworCisJLyogV1BBIGRhdGEgKi8KKwlpbnQgd3BhX2VuYWJsZWQ7CisJaW50IGRyb3BfdW5lbmNyeXB0ZWQ7CisJaW50IHByaXZhY3lfaW52b2tlZDsKKwlzaXplX3Qgd3BhX2llX2xlbjsKKwl1OCAqd3BhX2llOworCisJc3RydWN0IGxpYjgwMjExX2NyeXB0X2luZm8gY3J5cHRfaW5mbzsKKworCWludCBiY3J4X3N0YV9rZXk7CS8qIHVzZSBpbmRpdmlkdWFsIGtleXMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBrZXlzIGV2ZW4KKwkJCQkgKiB3aXRoIFJYIG9mIGJyb2FkL211bHRpY2FzdCBmcmFtZXMgKi8KKworCS8qIEZyYWdtZW50YXRpb24gc3RydWN0dXJlcyAqLworCXN0cnVjdCBpZWVlODAyMTFfZnJhZ19lbnRyeSBmcmFnX2NhY2hlW0lFRUU4MDIxMV9GUkFHX0NBQ0hFX0xFTl07CisJdW5zaWduZWQgaW50IGZyYWdfbmV4dF9pZHg7CisJdTE2IGZ0czsJCS8qIEZyYWdtZW50YXRpb24gVGhyZXNob2xkICovCisJdTE2IHJ0czsJCS8qIFJUUyB0aHJlc2hvbGQgKi8KKworCS8qIEFzc29jaWF0aW9uIGluZm8gKi8KKwl1OCBic3NpZFtFVEhfQUxFTl07CisKKwllbnVtIGllZWU4MDIxMV9zdGF0ZSBzdGF0ZTsKKworCWludCBtb2RlOwkJLyogQSwgQiwgRyAqLworCWludCBtb2R1bGF0aW9uOwkJLyogQ0NLLCBPRkRNICovCisJaW50IGZyZXFfYmFuZDsJCS8qIDIuNEdoeiwgNS4yR2h6LCBNaXhlZCAqLworCWludCBhYmdfdHJ1ZTsJCS8qIEFCRyBmbGFnICAgICAgICAgICAgICAqLworCisJaW50IHBlcmZlY3RfcnNzaTsKKwlpbnQgd29yc3RfcnNzaTsKKworCXUxNiBwcmV2X3NlcV9jdGw7CS8qIHVzZWQgdG8gZHJvcCBkdXBsaWNhdGUgZnJhbWVzICovCisKKwkvKiBDYWxsYmFjayBmdW5jdGlvbnMgKi8KKwl2b2lkICgqc2V0X3NlY3VyaXR5KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5ICogc2VjKTsKKwlpbnQgKCpoYXJkX3N0YXJ0X3htaXQpIChzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqIHR4YiwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IHByaSk7CisJaW50ICgqcmVzZXRfcG9ydCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKKwlpbnQgKCppc19xdWV1ZV9mdWxsKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBwcmkpOworCisJaW50ICgqaGFuZGxlX21hbmFnZW1lbnQpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqIG5ldHdvcmssIHUxNiB0eXBlKTsKKwlpbnQgKCppc19xb3NfYWN0aXZlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwkvKiBUeXBpY2FsIFNUQSBtZXRob2RzICovCisJaW50ICgqaGFuZGxlX2F1dGgpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKiBhdXRoKTsKKwlpbnQgKCpoYW5kbGVfZGVhdXRoKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RlYXV0aCAqIGF1dGgpOworCWludCAoKmhhbmRsZV9hY3Rpb24pIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYWN0aW9uICogYWN0aW9uLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqIHN0YXRzKTsKKwlpbnQgKCpoYW5kbGVfZGlzYXNzb2MpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICogYXNzb2MpOworCWludCAoKmhhbmRsZV9iZWFjb24pIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYmVhY29uICogYmVhY29uLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogbmV0d29yayk7CisJaW50ICgqaGFuZGxlX3Byb2JlX3Jlc3BvbnNlKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSAqIHJlc3AsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogbmV0d29yayk7CisJaW50ICgqaGFuZGxlX3Byb2JlX3JlcXVlc3QpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVxdWVzdCAqIHJlcSwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKiBzdGF0cyk7CisJaW50ICgqaGFuZGxlX2Fzc29jX3Jlc3BvbnNlKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSAqIHJlc3AsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogbmV0d29yayk7CisKKwkvKiBUeXBpY2FsIEFQIG1ldGhvZHMgKi8KKwlpbnQgKCpoYW5kbGVfYXNzb2NfcmVxdWVzdCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKKwlpbnQgKCpoYW5kbGVfcmVhc3NvY19yZXF1ZXN0KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcmVhc3NvY19yZXF1ZXN0ICogcmVxKTsKKworCS8qIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBpdGVtIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBkYXRhCisJICogYWxsb2NhdGVkIGJleW9uZCB0aGlzIHN0cnVjdHVyZSBieSBhbGxvY19pZWVlODAyMTEgKi8KKwl1OCBwcml2WzBdOworfTsKKworI2RlZmluZSBJRUVFX0EgICAgICAgICAgICAoMTw8MCkKKyNkZWZpbmUgSUVFRV9CICAgICAgICAgICAgKDE8PDEpCisjZGVmaW5lIElFRUVfRyAgICAgICAgICAgICgxPDwyKQorI2RlZmluZSBJRUVFX01PREVfTUFTSyAgICAoSUVFRV9BfElFRUVfQnxJRUVFX0cpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaWVlZTgwMjExX3ByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqKW5ldGRldl9wcml2KGRldikpLT5wcml2OworfQorCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfdmFsaWRfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKwkJCQkJICBpbnQgbW9kZSkKK3sKKwkvKgorCSAqIEl0IGlzIHBvc3NpYmxlIGZvciBib3RoIGFjY2VzcyBwb2ludHMgYW5kIG91ciBkZXZpY2UgdG8gc3VwcG9ydAorCSAqIGNvbWJpbmF0aW9ucyBvZiBtb2Rlcywgc28gYXMgbG9uZyBhcyB0aGVyZSBpcyBvbmUgdmFsaWQgY29tYmluYXRpb24KKwkgKiBvZiBhcC9kZXZpY2Ugc3VwcG9ydGVkIG1vZGVzLCB0aGVuIHJldHVybiBzdWNjZXNzCisJICoKKwkgKi8KKwlpZiAoKG1vZGUgJiBJRUVFX0EpICYmCisJICAgIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikgJiYKKwkgICAgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKG1vZGUgJiBJRUVFX0cpICYmCisJICAgIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikgJiYKKwkgICAgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoKG1vZGUgJiBJRUVFX0IpICYmCisJICAgIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OKSAmJgorCSAgICAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZ2V0X2hkcmxlbih1MTYgZmMpCit7CisJaW50IGhkcmxlbiA9IElFRUU4MDIxMV8zQUREUl9MRU47CisJdTE2IHN0eXBlID0gV0xBTl9GQ19HRVRfU1RZUEUoZmMpOworCisJc3dpdGNoIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSkgeworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6CisJCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpKQorCQkJaGRybGVuID0gSUVFRTgwMjExXzRBRERSX0xFTjsKKwkJaWYgKHN0eXBlICYgSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBKQorCQkJaGRybGVuICs9IDI7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKKwkJc3dpdGNoIChXTEFOX0ZDX0dFVF9TVFlQRShmYykpIHsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ1RTOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ0s6CisJCQloZHJsZW4gPSBJRUVFODAyMTFfMUFERFJfTEVOOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQloZHJsZW4gPSBJRUVFODAyMTFfMkFERFJfTEVOOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGhkcmxlbjsKK30KKworc3RhdGljIGlubGluZSB1OCAqaWVlZTgwMjExX2dldF9wYXlsb2FkKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJc3dpdGNoIChpZWVlODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKSkgeworCWNhc2UgSUVFRTgwMjExXzFBRERSX0xFTjoKKwkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfMWFkZHIgKiloZHIpLT5wYXlsb2FkOworCWNhc2UgSUVFRTgwMjExXzJBRERSX0xFTjoKKwkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfMmFkZHIgKiloZHIpLT5wYXlsb2FkOworCWNhc2UgSUVFRTgwMjExXzNBRERSX0xFTjoKKwkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKiloZHIpLT5wYXlsb2FkOworCWNhc2UgSUVFRTgwMjExXzRBRERSX0xFTjoKKwkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKiloZHIpLT5wYXlsb2FkOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX29mZG1fcmF0ZSh1OCByYXRlKQoreworCXN3aXRjaCAocmF0ZSAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSB7CisJY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQjoKKwljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xOE1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8yNE1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV80OE1COgorCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV81NE1COgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19jY2tfcmF0ZSh1OCByYXRlKQoreworCXN3aXRjaCAocmF0ZSAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSB7CisJY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COgorCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQjoKKwljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV81TUI6CisJY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQjoKKwkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCisvKiBpZWVlODAyMTEuYyAqLworZXh0ZXJuIHZvaWQgZnJlZV9pZWVlODAyMTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2llZWU4MDIxMShpbnQgc2l6ZW9mX3ByaXYpOworZXh0ZXJuIGludCBpZWVlODAyMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSk7CisKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9uZXR3b3Jrc19hZ2Uoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJICAgdW5zaWduZWQgbG9uZyBhZ2Vfc2Vjcyk7CisKK2V4dGVybiBpbnQgaWVlZTgwMjExX3NldF9lbmNyeXB0aW9uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKKworLyogaWVlZTgwMjExX3R4LmMgKi8KK2V4dGVybiBpbnQgaWVlZTgwMjExX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfdHhiX2ZyZWUoc3RydWN0IGllZWU4MDIxMV90eGIgKik7CisKKy8qIGllZWU4MDIxMV9yeC5jICovCitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnhfYW55KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKTsKK2V4dGVybiBpbnQgaWVlZTgwMjExX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMpOworLyogbWFrZSBzdXJlIHRvIHNldCBzdGF0cy0+bGVuICovCitleHRlcm4gdm9pZCBpZWVlODAyMTFfcnhfbWd0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGVhZGVyLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cyk7CitleHRlcm4gdm9pZCBpZWVlODAyMTFfbmV0d29ya19yZXNldChzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspOworCisvKiBpZWVlODAyMTFfZ2VvLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2dlbyAqaWVlZTgwMjExX2dldF9nZW8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UKKwkJCQkJCSAgICAgKmllZWUpOworZXh0ZXJuIGludCBpZWVlODAyMTFfc2V0X2dlbyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmdlbyk7CisKK2V4dGVybiBpbnQgaWVlZTgwMjExX2lzX3ZhbGlkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJICAgICAgdTggY2hhbm5lbCk7CitleHRlcm4gaW50IGllZWU4MDIxMV9jaGFubmVsX3RvX2luZGV4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorCQkJCSAgICAgIHU4IGNoYW5uZWwpOworZXh0ZXJuIHU4IGllZWU4MDIxMV9mcmVxX3RvX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHUzMiBmcmVxKTsKK2V4dGVybiB1OCBpZWVlODAyMTFfZ2V0X2NoYW5uZWxfZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJICAgICAgdTggY2hhbm5lbCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICppZWVlODAyMTFfZ2V0X2NoYW5uZWwoc3RydWN0CisJCQkJCQkJICAgICBpZWVlODAyMTFfZGV2aWNlCisJCQkJCQkJICAgICAqaWVlZSwgdTggY2hhbm5lbCk7CitleHRlcm4gdTMyIGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXEoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBpZWVlLAorCQkJCSAgICAgIHU4IGNoYW5uZWwpOworCisvKiBpZWVlODAyMTFfd3guYyAqLworZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfZ2V0X3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSk7CitleHRlcm4gaW50IGllZWU4MDIxMV93eF9zZXRfZW5jb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqa2V5KTsKK2V4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9lbmNvZGUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpOworZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2VuY29kZWV4dChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKKwkJCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKK2V4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9lbmNvZGVleHQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfaW5jcmVtZW50X3NjYW5zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQoreworCWllZWUtPnNjYW5zKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9nZXRfc2NhbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit7CisJcmV0dXJuIGllZWUtPnNjYW5zOworfQorCisjZW5kaWYJCQkJLyogSUVFRTgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKaW5kZXggODIzYzJiZi4uMTE1YjcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmMKQEAgLTE2OTIsNyArMTY5MiwxMyBAQAogCXUzMiBsb2NrOwogCXUzMiBvcmRfbGVuID0gc2l6ZW9mKGxvY2spOwogCi0JLyogUXVpdGUgaWYgbWFudWFsbHkgZGlzYWJsZWQuICovCisJLyogQWdlIHNjYW4gbGlzdCBlbnRyaWVzIGZvdW5kIGJlZm9yZSBzdXNwZW5kICovCisJaWYgKHByaXYtPnN1c3BlbmRfdGltZSkgeworCQlpZWVlODAyMTFfbmV0d29ya3NfYWdlKHByaXYtPmllZWUsIHByaXYtPnN1c3BlbmRfdGltZSk7CisJCXByaXYtPnN1c3BlbmRfdGltZSA9IDA7CisJfQorCisJLyogUXVpZXQgaWYgbWFudWFsbHkgZGlzYWJsZWQuICovCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19SRl9LSUxMX1NXKSB7CiAJCUlQV19ERUJVR19JTkZPKCIlczogUmFkaW8gaXMgZGlzYWJsZWQgYnkgTWFudWFsIERpc2FibGUgIgogCQkJICAgICAgICJzd2l0Y2hcbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUpOwpAQCAtMTkxMCw3ICsxOTE2LDggQEAKIHsKIAogI2RlZmluZSBNQUNfQVNTT0NJQVRJT05fUkVBRF9ERUxBWSAoSFopCi0JaW50IHJldCwgbGVuLCBlc3NpZF9sZW47CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgbGVuLCBlc3NpZF9sZW47CiAJY2hhciBlc3NpZFtJV19FU1NJRF9NQVhfU0laRV07CiAJdTMyIHR4cmF0ZTsKIAl1MzIgY2hhbjsKQEAgLTIzODQsMTMgKzIzOTEsMTQgQEAKICNlbmRpZgogCiAJcHJpdi0+ZmF0YWxfZXJyb3IgPSBJUFcyMTAwX0VSUl9DM19DT1JSVVBUSU9OOwotCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCXByaXYtPm5ldF9kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCXNjaGVkdWxlX3Jlc2V0KHByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBpc3Jfcngoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiwgaW50IGksCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwogCXN0cnVjdCBpcHcyMTAwX3N0YXR1cyAqc3RhdHVzID0gJnByaXYtPnN0YXR1c19xdWV1ZS5kcnZbaV07CiAJc3RydWN0IGlwdzIxMDBfcnhfcGFja2V0ICpwYWNrZXQgPSAmcHJpdi0+cnhfYnVmZmVyc1tpXTsKIApAQCAtMjM5OSwxNCArMjQwNywxNCBAQAogCWlmICh1bmxpa2VseShzdGF0dXMtPmZyYW1lX3NpemUgPiBza2JfdGFpbHJvb20ocGFja2V0LT5za2IpKSkgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IGZyYW1lX3NpemUgKCV1KSA+IHNrYl90YWlscm9vbSAoJXUpISIKIAkJCSAgICAgICAiICBEcm9wcGluZy5cbiIsCi0JCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwKKwkJCSAgICAgICBkZXYtPm5hbWUsCiAJCQkgICAgICAgc3RhdHVzLT5mcmFtZV9zaXplLCBza2JfdGFpbHJvb20ocGFja2V0LT5za2IpKTsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcocHJpdi0+bmV0X2RldikpKSB7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhkZXYpKSkgeworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlwcml2LT53c3RhdHMuZGlzY2FyZC5taXNjKys7CiAJCUlQV19ERUJVR19EUk9QKCJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCB1cC5cbiIpOwogCQlyZXR1cm47CkBAIC0yNDM2LDEwICsyNDQ0LDEwIEBACiAJaWYgKCFpZWVlODAyMTFfcngocHJpdi0+aWVlZSwgcGFja2V0LT5za2IsIHN0YXRzKSkgewogI2lmZGVmIElQVzIxMDBfUlhfREVCVUcKIAkJSVBXX0RFQlVHX0RST1AoIiVzOiBOb24gY29uc3VtZWQgcGFja2V0OlxuIiwKLQkJCSAgICAgICBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJCSAgICAgICBkZXYtPm5hbWUpOwogCQlwcmludGtfYnVmKElQV19ETF9EUk9QLCBwYWNrZXRfZGF0YSwgc3RhdHVzLT5mcmFtZV9zaXplKTsKICNlbmRpZgotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAogCQkvKiBpZWVlODAyMTFfcnggZmFpbGVkLCBzbyBpdCBkaWRuJ3QgZnJlZSB0aGUgU0tCICovCiAJCWRldl9rZnJlZV9za2JfYW55KHBhY2tldC0+c2tiKTsKQEAgLTI0NTAsNyArMjQ1OCw3IEBACiAJaWYgKHVubGlrZWx5KGlwdzIxMDBfYWxsb2Nfc2tiKHByaXYsIHBhY2tldCkpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogIgogCQkgICAgICAgIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgU0tCIG9udG8gUkJEIHJpbmcgLSBkaXNhYmxpbmcgIgotCQkgICAgICAgImFkYXB0ZXIuXG4iLCBwcml2LT5uZXRfZGV2LT5uYW1lKTsKKwkJICAgICAgICJhZGFwdGVyLlxuIiwgZGV2LT5uYW1lKTsKIAkJLyogVE9ETzogc2NoZWR1bGUgYWRhcHRlciBzaHV0ZG93biAqLwogCQlJUFdfREVCVUdfSU5GTygiVE9ETzogU2h1dGRvd24gYWRhcHRlci4uLlxuIik7CiAJfQpAQCAtMjQ2NCw2ICsyNDcyLDcgQEAKIHN0YXRpYyB2b2lkIGlzcl9yeF9tb25pdG9yKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIGludCBpLAogCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cykKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmV0X2RldjsKIAlzdHJ1Y3QgaXB3MjEwMF9zdGF0dXMgKnN0YXR1cyA9ICZwcml2LT5zdGF0dXNfcXVldWUuZHJ2W2ldOwogCXN0cnVjdCBpcHcyMTAwX3J4X3BhY2tldCAqcGFja2V0ID0gJnByaXYtPnJ4X2J1ZmZlcnNbaV07CiAKQEAgLTI0ODEsMTUgKzI0OTAsMTUgQEAKIAkJCQlzaXplb2Yoc3RydWN0IGlwd19ydF9oZHIpKSkgewogCQlJUFdfREVCVUdfSU5GTygiJXM6IGZyYW1lX3NpemUgKCV1KSA+IHNrYl90YWlscm9vbSAoJXUpISIKIAkJCSAgICAgICAiICBEcm9wcGluZy5cbiIsCi0JCQkgICAgICAgcHJpdi0+bmV0X2Rldi0+bmFtZSwKKwkJCSAgICAgICBkZXYtPm5hbWUsCiAJCQkgICAgICAgc3RhdHVzLT5mcmFtZV9zaXplLAogCQkJICAgICAgIHNrYl90YWlscm9vbShwYWNrZXQtPnNrYikpOwotCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJcmV0dXJuOwogCX0KIAotCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhwcml2LT5uZXRfZGV2KSkpIHsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJaWYgKHVubGlrZWx5KCFuZXRpZl9ydW5uaW5nKGRldikpKSB7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJSVBXX0RFQlVHX0RST1AoIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IHVwLlxuIik7CiAJCXJldHVybjsKQEAgLTI0OTgsNyArMjUwNyw3IEBACiAJaWYgKHVubGlrZWx5KHByaXYtPmNvbmZpZyAmIENGR19DUkNfQ0hFQ0sgJiYKIAkJICAgICBzdGF0dXMtPmZsYWdzICYgSVBXX1NUQVRVU19GTEFHX0NSQ19FUlJPUikpIHsKIAkJSVBXX0RFQlVHX1JYKCJDUkMgZXJyb3IgaW4gcGFja2V0LiAgRHJvcHBpbmcuXG4iKTsKLQkJcHJpdi0+aWVlZS0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI1MjAsNyArMjUyOSw3IEBACiAJc2tiX3B1dChwYWNrZXQtPnNrYiwgc3RhdHVzLT5mcmFtZV9zaXplICsgc2l6ZW9mKHN0cnVjdCBpcHdfcnRfaGRyKSk7CiAKIAlpZiAoIWllZWU4MDIxMV9yeChwcml2LT5pZWVlLCBwYWNrZXQtPnNrYiwgc3RhdHMpKSB7Ci0JCXByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCiAJCS8qIGllZWU4MDIxMV9yeCBmYWlsZWQsIHNvIGl0IGRpZG4ndCBmcmVlIHRoZSBTS0IgKi8KIAkJZGV2X2tmcmVlX3NrYl9hbnkocGFja2V0LT5za2IpOwpAQCAtMjUzMSw3ICsyNTQwLDcgQEAKIAlpZiAodW5saWtlbHkoaXB3MjEwMF9hbGxvY19za2IocHJpdiwgcGFja2V0KSkpIHsKIAkJSVBXX0RFQlVHX1dBUk5JTkcoCiAJCQkiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBTS0Igb250byBSQkQgcmluZyAtIGRpc2FibGluZyAiCi0JCQkiYWRhcHRlci5cbiIsIHByaXYtPm5ldF9kZXYtPm5hbWUpOworCQkJImFkYXB0ZXIuXG4iLCBkZXYtPm5hbWUpOwogCQkvKiBUT0RPOiBzY2hlZHVsZSBhZGFwdGVyIHNodXRkb3duICovCiAJCUlQV19ERUJVR19JTkZPKCJUT0RPOiBTaHV0ZG93biBhZGFwdGVyLi4uXG4iKTsKIAl9CkBAIC0zMzMzLDcgKzMzNDIsNyBAQAogCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX0FTU09DSUFURUQpKSB7CiAJCUlQV19ERUJVR19JTkZPKCJDYW4gbm90IHRyYW5zbWl0IHdoZW4gbm90IGNvbm5lY3RlZC5cbiIpOwotCQlwcml2LT5pZWVlLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQlwcml2LT5uZXRfZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQpAQCAtNDA1OCw3ICs0MDY3LDcgQEAKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTMyIGNoYW4gPSAwOwogCWNoYXIgKm91dCA9IGJ1ZjsKLQlpbnQgbGVuZ3RoOworCXVuc2lnbmVkIGludCBsZW5ndGg7CiAJaW50IHJldDsKIAogCWlmIChwcml2LT5zdGF0dXMgJiBTVEFUVVNfUkZfS0lMTF9NQVNLKQpAQCAtNTgyOSw3ICs1ODM4LDcgQEAKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAotCXByaXYtPmllZWUtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9NT05JVE9SCiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQpAQCAtNTk5OSw2ICs2MDA4LDE3IEBACiAKIHN0YXRpYyB2b2lkIGlwdzIxMDBfaXJxX3Rhc2tsZXQoc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdik7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXB3MjEwMF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBpcHcyMTAwX29wZW4sCisJLm5kb19zdG9wCQk9IGlwdzIxMDBfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGllZWU4MDIxMV94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBpZWVlODAyMTFfY2hhbmdlX210dSwKKwkubmRvX2luaXQJCT0gaXB3MjEwMF9uZXRfaW5pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gaXB3MjEwMF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gaXB3MjEwMF9zZXRfYWRkcmVzcywKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qIExvb2sgaW50byB1c2luZyBuZXRkZXYgZGVzdHJ1Y3RvciB0byBzaHV0ZG93biBpZWVlODAyMTE/ICovCiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXB3MjEwMF9hbGxvY19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCkBAIC02MDIzLDE1ICs2MDQzLDExIEBACiAJcHJpdi0+aWVlZS0+cGVyZmVjdF9yc3NpID0gLTIwOwogCXByaXYtPmllZWUtPndvcnN0X3Jzc2kgPSAtODU7CiAKLQlkZXYtPm9wZW4gPSBpcHcyMTAwX29wZW47Ci0JZGV2LT5zdG9wID0gaXB3MjEwMF9jbG9zZTsKLQlkZXYtPmluaXQgPSBpcHcyMTAwX25ldF9pbml0OworCWRldi0+bmV0ZGV2X29wcyA9ICZpcHcyMTAwX25ldGRldl9vcHM7CiAJZGV2LT5ldGh0b29sX29wcyA9ICZpcHcyMTAwX2V0aHRvb2xfb3BzOwotCWRldi0+dHhfdGltZW91dCA9IGlwdzIxMDBfdHhfdGltZW91dDsKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmlwdzIxMDBfd3hfaGFuZGxlcl9kZWY7CiAJcHJpdi0+d2lyZWxlc3NfZGF0YS5pZWVlODAyMTEgPSBwcml2LT5pZWVlOwogCWRldi0+d2lyZWxlc3NfZGF0YSA9ICZwcml2LT53aXJlbGVzc19kYXRhOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gaXB3MjEwMF9zZXRfYWRkcmVzczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gMyAqIEhaOwogCWRldi0+aXJxID0gMDsKIApAQCAtNjQxNCw2ICs2NDMwLDggQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGNpX2Rldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDNob3QpOwogCisJcHJpdi0+c3VzcGVuZF9hdCA9IGdldF9zZWNvbmRzKCk7CisKIAltdXRleF91bmxvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTY0NTcsNiArNjQ3NSw4IEBACiAJICogdGhlIHF1ZXVlIG9mIG5lZWRlZCAqLwogCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKIAorCXByaXYtPnN1c3BlbmRfdGltZSA9IGdldF9zZWNvbmRzKCkgLSBwcml2LT5zdXNwZW5kX2F0OworCiAJLyogQnJpbmcgdGhlIGRldmljZSBiYWNrIHVwICovCiAJaWYgKCEocHJpdi0+c3RhdHVzICYgU1RBVFVTX1JGX0tJTExfU1cpKQogCQlpcHcyMTAwX3VwKHByaXYsIDApOwpAQCAtNzEyMiw3ICs3MTQyLDcgQEAKIHsKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlpbnQgdmFsOwotCWludCBsZW4gPSBzaXplb2YodmFsKTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gc2l6ZW9mKHZhbCk7CiAJaW50IGVyciA9IDA7CiAKIAlpZiAoIShwcml2LT5zdGF0dXMgJiBTVEFUVVNfRU5BQkxFRCkgfHwKQEAgLTgyOTcsNyArODMxNyw3IEBACiAJc3RydWN0IGlwdzIxMDBfcHJpdiAqcHJpdiA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXB3MjEwMF9wcml2LCB3eF9ldmVudF93b3JrLndvcmspOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQlpbnQgbGVuID0gRVRIX0FMRU47CisJdW5zaWduZWQgaW50IGxlbiA9IEVUSF9BTEVOOwogCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19TVE9QUElORykKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMTAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaAppbmRleCBiYmYxZGRjLi5mMTgzZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuaApAQCAtMzksOCArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4JLy8gbmV3IGRyaXZlciBBUEkKIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KLQogI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAjZW5kaWYKQEAgLTQ4LDYgKzQ2LDggQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCisKIHN0cnVjdCBpcHcyMTAwX3ByaXY7CiBzdHJ1Y3QgaXB3MjEwMF90eF9wYWNrZXQ7CiBzdHJ1Y3QgaXB3MjEwMF9yeF9wYWNrZXQ7CkBAIC01OTEsNiArNTkxLDEwIEBACiAKIAlpbnQgdXNlcl9yZXF1ZXN0ZWRfc2NhbjsKIAorCS8qIFRyYWNrIHRpbWUgaW4gc3VzcGVuZCAqLworCXVuc2lnbmVkIGxvbmcgc3VzcGVuZF9hdDsKKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRfdGltZTsKKwogCXUzMiBpbnRlcnJ1cHRzOwogCWludCB0eF9pbnRlcnJ1cHRzOwogCWludCByeF9pbnRlcnJ1cHRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwppbmRleCA2MjVmMmNmLi5iMzQ0OTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuYwpAQCAtMzAxLDg4ICszMDEsMTAyIEBACiB9CiAKIC8qIDgtYml0IGRpcmVjdCB3cml0ZSAobG93IDRLKSAqLwotI2RlZmluZSBfaXB3X3dyaXRlOChpcHcsIG9mcywgdmFsKSB3cml0ZWIoKHZhbCksIChpcHcpLT5od19iYXNlICsgKG9mcykpCitzdGF0aWMgaW5saW5lIHZvaWQgX2lwd193cml0ZTgoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzLAorCQl1OCB2YWwpCit7CisJd3JpdGViKHZhbCwgaXB3LT5od19iYXNlICsgb2ZzKTsKK30KIAogLyogOC1iaXQgZGlyZWN0IHdyaXRlIChmb3IgbG93IDRLIG9mIFNSQU0vcmVncyksIHdpdGggZGVidWcgd3JhcHBlciAqLwogI2RlZmluZSBpcHdfd3JpdGU4KGlwdywgb2ZzLCB2YWwpIGRvIHsgXAotIElQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDgoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCi0gX2lwd193cml0ZTgoaXB3LCBvZnMsIHZhbCk7IFwKLSB9IHdoaWxlICgwKQorCUlQV19ERUJVR19JTygiJXMgJWQ6IHdyaXRlX2RpcmVjdDgoMHglMDhYLCAweCUwOFgpXG4iLCBfX0ZJTEVfXywgXAorCQkJX19MSU5FX18sICh1MzIpKG9mcyksICh1MzIpKHZhbCkpOyBcCisJX2lwd193cml0ZTgoaXB3LCBvZnMsIHZhbCk7IFwKK30gd2hpbGUgKDApCiAKIC8qIDE2LWJpdCBkaXJlY3Qgd3JpdGUgKGxvdyA0SykgKi8KLSNkZWZpbmUgX2lwd193cml0ZTE2KGlwdywgb2ZzLCB2YWwpIHdyaXRldygodmFsKSwgKGlwdyktPmh3X2Jhc2UgKyAob2ZzKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaXB3X3dyaXRlMTYoc3RydWN0IGlwd19wcml2ICppcHcsIHVuc2lnbmVkIGxvbmcgb2ZzLAorCQl1MTYgdmFsKQoreworCXdyaXRldyh2YWwsIGlwdy0+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+cHJvbV9wcml2LT5pZWVlLCBza2IsIHN0YXRzKSkgewotCQlwcml2LT5wcm9tX3ByaXYtPmllZWUtPnN0YXRzLnJ4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KIH0KQEAgLTgyNzIsNyArODI4OSw3IEBACiAJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAKIAkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0JCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjExX1NUQVRTKTsKKwkJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMjExX1NUQVRTKTsKIAkJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihyeGItPnNrYi0+Y2IpKTsKIAkJbmV0aWZfcngoc2tiKTsKIAkJcnhiLT5za2IgPSBOVUxMOwpAQCAtODM5OSw3ICs4NDE2LDcgQEAKIAkJCQkJSVBXX0RFQlVHX0RST1AKIAkJCQkJICAgICgiUmVjZWl2ZWQgcGFja2V0IGlzIHRvbyBzbWFsbC4gIgogCQkJCQkgICAgICJEcm9wcGluZy5cbiIpOwotCQkJCQlwcml2LT5pZWVlLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCQkJcHJpdi0+bmV0X2Rldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCXByaXYtPndzdGF0cy5kaXNjYXJkLm1pc2MrKzsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtMTA0NzAsMTUgKzEwNDg3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlwd19uZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwd19wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLQotCXByaXYtPmllZWUtPnN0YXRzLnR4X3BhY2tldHMgPSBwcml2LT50eF9wYWNrZXRzOwotCXByaXYtPmllZWUtPnN0YXRzLnJ4X3BhY2tldHMgPSBwcml2LT5yeF9wYWNrZXRzOwotCXJldHVybiAmcHJpdi0+aWVlZS0+c3RhdHM7Ci19Ci0KIHN0YXRpYyB2b2lkIGlwd19uZXRfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAKQEAgLTExMjI0LDYgKzExMjMyLDEyIEBACiB7CiAJaW50IHJjLCBpLCBqOwogCisJLyogQWdlIHNjYW4gbGlzdCBlbnRyaWVzIGZvdW5kIGJlZm9yZSBzdXNwZW5kICovCisJaWYgKHByaXYtPnN1c3BlbmRfdGltZSkgeworCQlpZWVlODAyMTFfbmV0d29ya3NfYWdlKHByaXYtPmllZWUsIHByaXYtPnN1c3BlbmRfdGltZSk7CisJCXByaXYtPnN1c3BlbmRfdGltZSA9IDA7CisJfQorCiAJaWYgKHByaXYtPnN0YXR1cyAmIFNUQVRVU19FWElUX1BFTkRJTkcpCiAJCXJldHVybiAtRUlPOwogCkBAIC0xMTUxNSwxMSArMTE1MjksMTQgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXB3X3Byb21fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGlwd19wcm9tX3ByaXYgKnByb21fcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JcmV0dXJuICZwcm9tX3ByaXYtPmllZWUtPnN0YXRzOwotfQorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcHdfcHJvbV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gaXB3X3Byb21fb3BlbiwKKwkubmRvX3N0b3AJCT0gaXB3X3Byb21fc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaXB3X3Byb21faGFyZF9zdGFydF94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBpZWVlODAyMTFfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiBzdGF0aWMgaW50IGlwd19wcm9tX2FsbG9jKHN0cnVjdCBpcHdfcHJpdiAqcHJpdikKIHsKQEAgLTExNTQwLDEwICsxMTU1Nyw3IEBACiAJbWVtY3B5KHByaXYtPnByb21fbmV0X2Rldi0+ZGV2X2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAKIAlwcml2LT5wcm9tX25ldF9kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOwotCXByaXYtPnByb21fbmV0X2Rldi0+b3BlbiA9IGlwd19wcm9tX29wZW47Ci0JcHJpdi0+cHJvbV9uZXRfZGV2LT5zdG9wID0gaXB3X3Byb21fc3RvcDsKLQlwcml2LT5wcm9tX25ldF9kZXYtPmdldF9zdGF0cyA9IGlwd19wcm9tX2dldF9zdGF0czsKLQlwcml2LT5wcm9tX25ldF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGlwd19wcm9tX2hhcmRfc3RhcnRfeG1pdDsKKwlwcml2LT5wcm9tX25ldF9kZXYtPm5ldGRldl9vcHMgPSAmaXB3X3Byb21fbmV0ZGV2X29wczsKIAogCXByaXYtPnByb21fcHJpdi0+aWVlZS0+aXdfbW9kZSA9IElXX01PREVfTU9OSVRPUjsKIAlTRVRfTkVUREVWX0RFVihwcml2LT5wcm9tX25ldF9kZXYsICZwcml2LT5wY2lfZGV2LT5kZXYpOwpAQCAtMTE1NzEsNiArMTE1ODUsMTcgQEAKIAogI2VuZGlmCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXB3X25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGlwd19uZXRfaW5pdCwKKwkubmRvX29wZW4JCT0gaXB3X25ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSBpcHdfbmV0X3N0b3AsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBpcHdfbmV0X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGlwd19uZXRfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfeG1pdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgaXB3X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtMTE2NzIsMTIgKzExNjk3LDcgQEAKIAlwcml2LT5pZWVlLT5wZXJmZWN0X3Jzc2kgPSAtMjA7CiAJcHJpdi0+aWVlZS0+d29yc3RfcnNzaSA9IC04NTsKIAotCW5ldF9kZXYtPm9wZW4gPSBpcHdfbmV0X29wZW47Ci0JbmV0X2Rldi0+c3RvcCA9IGlwd19uZXRfc3RvcDsKLQluZXRfZGV2LT5pbml0ID0gaXB3X25ldF9pbml0OwotCW5ldF9kZXYtPmdldF9zdGF0cyA9IGlwd19uZXRfZ2V0X3N0YXRzOwotCW5ldF9kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGlwd19uZXRfc2V0X211bHRpY2FzdF9saXN0OwotCW5ldF9kZXYtPnNldF9tYWNfYWRkcmVzcyA9IGlwd19uZXRfc2V0X21hY19hZGRyZXNzOworCW5ldF9kZXYtPm5ldGRldl9vcHMgPSAmaXB3X25ldGRldl9vcHM7CiAJcHJpdi0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZwcml2LT5pZWVlLT5zcHlfZGF0YTsKIAluZXRfZGV2LT53aXJlbGVzc19kYXRhID0gJnByaXYtPndpcmVsZXNzX2RhdGE7CiAJbmV0X2Rldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmaXB3X3d4X2hhbmRsZXJfZGVmOwpAQCAtMTE4MjQsNiArMTE4NDQsOCBAQAogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKIAorCXByaXYtPnN1c3BlbmRfYXQgPSBnZXRfc2Vjb25kcygpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExODU5LDYgKzExODgxLDggQEAKIAkgKiB0aGUgcXVldWUgb2YgbmVlZGVkICovCiAJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogCisJcHJpdi0+c3VzcGVuZF90aW1lID0gZ2V0X3NlY29uZHMoKSAtIHByaXYtPnN1c3BlbmRfYXQ7CisKIAkvKiBCcmluZyB0aGUgZGV2aWNlIGJhY2sgdXAgKi8KIAlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnVwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAppbmRleCAyNzdiMjc0Li4wNWU4Y2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIyMDAuaApAQCAtNDksMTMgKzQ5LDE0IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJpcHcyMjAwIgogCiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKKwogLyogQXV0aGVudGljYXRpb24gIGFuZCBBc3NvY2lhdGlvbiBTdGF0ZXMgKi8KIGVudW0gY29ubmVjdGlvbl9tYW5hZ2VyX2Fzc29jX3N0YXRlcyB7CiAJQ01BU19JTklUID0gMCwKQEAgLTEzNDYsNiArMTM0NywxMCBAQAogCiAJczggdHhfcG93ZXI7CiAKKwkvKiBUcmFjayB0aW1lIGluIHN1c3BlbmQgKi8KKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRfYXQ7CisJdW5zaWduZWQgbG9uZyBzdXNwZW5kX3RpbWU7CisKICNpZmRlZiBDT05GSUdfUE0KIAl1MzIgcG1fc3RhdGVbMTZdOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19nZW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCmluZGV4IDk2MGFkMTMuLjlkZmJiODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X2dlby5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMS5oIgogCiBpbnQgaWVlZTgwMjExX2lzX3ZhbGlkX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHU4IGNoYW5uZWwpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19tb2R1bGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCmluZGV4IGEyZjU2MTYuLjkyYTI2OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X21vZHVsZS5jCkBAIC01MCw3ICs1MCw3IEBACiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAKLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjExLmg+CisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OICI4MDIuMTEgZGF0YS9tYW5hZ2VtZW50L2NvbnRyb2wgc3RhY2siCiAjZGVmaW5lIERSVl9OQU1FICAgICAgICAiaWVlZTgwMjExIgpAQCAtMTA1LDYgKzEwNSwyMSBAQAogCWllZWUtPm5ldHdvcmtzID0gTlVMTDsKIH0KIAordm9pZCBpZWVlODAyMTFfbmV0d29ya3NfYWdlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYWdlX3NlY3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgYWdlX2ppZmZpZXMgPSBtc2Vjc190b19qaWZmaWVzKGFnZV9zZWNzICogTVNFQ19QRVJfU0VDKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXR3b3JrLCAmaWVlZS0+bmV0d29ya19saXN0LCBsaXN0KSB7CisJCW5ldHdvcmstPmxhc3Rfc2Nhbm5lZCAtPSBhZ2VfamlmZmllczsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfbmV0d29ya3NfYWdlKTsKKwogc3RhdGljIHZvaWQgaWVlZTgwMjExX25ldHdvcmtzX2luaXRpYWxpemUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJaW50IGk7CkBAIC0xMTYsMjAgKzEzMSwxNCBAQAogCQkJICAgICAgJmllZWUtPm5ldHdvcmtfZnJlZV9saXN0KTsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK2ludCBpZWVlODAyMTFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKIAlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBJRUVFODAyMTFfREFUQV9MRU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlkZXYtPm10dSA9IG5ld19tdHU7CiAJcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaWVlZTgwMjExX2dlbmVyaWNfZ2V0X3N0YXRzKAotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAmaWVlZS0+c3RhdHM7Ci19CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9jaGFuZ2VfbXR1KTsKIAogc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2llZWU4MDIxMShpbnQgc2l6ZW9mX3ByaXYpCiB7CkBAIC0xNDUsMTIgKzE1NCwxMCBAQAogCQlnb3RvIGZhaWxlZDsKIAl9CiAJaWVlZSA9IG5ldGRldl9wcml2KGRldik7CisjaWZkZWYgQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUwogCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX3htaXQ7CiAJZGV2LT5jaGFuZ2VfbXR1ID0gaWVlZTgwMjExX2NoYW5nZV9tdHU7Ci0KLQkvKiBEcml2ZXJzIGFyZSBmcmVlIHRvIG92ZXJyaWRlIHRoaXMgaWYgdGhlIGdlbmVyaWMgaW1wbGVtZW50YXRpb24KLQkgKiBkb2VzIG5vdCBtZWV0IHRoZWlyIG5lZWRzLiAqLwotCWRldi0+Z2V0X3N0YXRzID0gaWVlZTgwMjExX2dlbmVyaWNfZ2V0X3N0YXRzOworI2VuZGlmCiAKIAlpZWVlLT5kZXYgPSBkZXY7CiAKQEAgLTIwNiw3ICsyMTMsNyBAQAogCWZyZWVfbmV0ZGV2KGRldik7CiB9CiAKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCiBzdGF0aWMgaW50IGRlYnVnID0gMDsKIHUzMiBpZWVlODAyMTFfZGVidWdfbGV2ZWwgPSAwOwpAQCAtMjM3LDExICsyNDQsMTEgQEAKIAogCXJldHVybiBzdHJubGVuKGJ1ZiwgbGVuKTsKIH0KLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBpZWVlODAyMTFfaW5pdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplOwogCiAJaWVlZTgwMjExX2RlYnVnX2xldmVsID0gZGVidWc7CkBAIC0yNjEsNyArMjY4LDcgQEAKIAllLT5yZWFkX3Byb2MgPSBzaG93X2RlYnVnX2xldmVsOwogCWUtPndyaXRlX3Byb2MgPSBzdG9yZV9kZWJ1Z19sZXZlbDsKIAllLT5kYXRhID0gTlVMTDsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAiIERSVl9ERVNDUklQVElPTiAiLCAiIERSVl9WRVJTSU9OICJcbiIpOwogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogIiBEUlZfQ09QWVJJR0hUICJcbiIpOwpAQCAtMjcxLDIwICsyNzgsMjAgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGllZWU4MDIxMV9leGl0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAlpZiAoaWVlZTgwMjExX3Byb2MpIHsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoImRlYnVnX2xldmVsIiwgaWVlZTgwMjExX3Byb2MpOwogCQlyZW1vdmVfcHJvY19lbnRyeShEUlZfTkFNRSwgaW5pdF9uZXQucHJvY19uZXQpOwogCQlpZWVlODAyMTFfcHJvYyA9IE5VTEw7CiAJfQotI2VuZGlmCQkJCS8qIENPTkZJR19JRUVFODAyMTFfREVCVUcgKi8KKyNlbmRpZgkJCQkvKiBDT05GSUdfTElCSVBXX0RFQlVHICovCiB9CiAKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKLSNlbmRpZgkJCQkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCisjZW5kaWYJCQkJLyogQ09ORklHX0xJQklQV19ERUJVRyAqLwogCiBtb2R1bGVfZXhpdChpZWVlODAyMTFfZXhpdCk7CiBtb2R1bGVfaW5pdChpZWVlODAyMTFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfcnguYwppbmRleCA5YzY3ZGZhLi5kYWU0YjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd19yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3J4LmMKQEAgLTMzLDcgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgorCisjaW5jbHVkZSAiaWVlZTgwMjExLmgiCiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9tb25pdG9yX3J4KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMzM0LDcgKzMzNSw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkcjsKIAlzaXplX3QgaGRybGVuOwogCXUxNiBmYywgdHlwZSwgc3R5cGUsIHNjOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAl1bnNpZ25lZCBpbnQgZnJhZzsKIAl1OCAqcGF5bG9hZDsKIAl1MTYgZXRoZXJ0eXBlOwpAQCAtMzUzLDggKzM1Myw2IEBACiAJaW50IGNhbl9iZV9kZWNyeXB0ZWQgPSAwOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopc2tiLT5kYXRhOwotCXN0YXRzID0gJmllZWUtPnN0YXRzOwotCiAJaWYgKHNrYi0+bGVuIDwgMTApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNLQiBsZW5ndGggPCAxMFxuIiwgZGV2LT5uYW1lKTsKIAkJZ290byByeF9kcm9wcGVkOwpAQCAtNDExLDggKzQwOSw4IEBACiAjZW5kaWYKIAogCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotCQlzdGF0cy0+cnhfcGFja2V0cysrOwotCQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQlpZWVlODAyMTFfbW9uaXRvcl9yeChpZWVlLCBza2IsIHJ4X3N0YXRzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNzY4LDggKzc2Niw4IEBACiAJfQogI2VuZGlmCiAKLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAjaWZkZWYgTk9UX1lFVAogCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSICYmICF3ZHMgJiYgaWVlZS0+YXAtPmJyaWRnZV9wYWNrZXRzKSB7CkBAIC04MTEsNyArODA5LDcgQEAKIAkJCSAqIGluIG91ciBzdGF0cy4gKi8KIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QCiAJCQkgICAgKCJSWDogbmV0aWZfcnggZHJvcHBlZCB0aGUgcGFja2V0XG4iKTsKLQkJCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJfQogCX0KIApAQCAtODIzLDcgKzgyMSw3IEBACiAJcmV0dXJuIDE7CiAKICAgICAgIHJ4X2Ryb3BwZWQ6Ci0Jc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAogCS8qIFJldHVybmluZyAwIGluZGljYXRlcyB0byBjYWxsZXIgdGhhdCB3ZSBoYXZlIG5vdCBoYW5kbGVkIHRoZSBTS0ItLQogCSAqIHNvIGl0IGlzIHN0aWxsIGFsbG9jYXRlZCBhbmQgY2FuIGJlIHVzZWQgYWdhaW4gYnkgdW5kZXJseWluZwpAQCAtOTE4LDcgKzkxNiw3IEBACiAKIGRyb3BfZnJlZToKIAlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwotCWllZWUtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwlpZWVlLT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlyZXR1cm47CiB9CiAKQEAgLTEwNzksMzcgKzEwNzcsMzcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCi0jZGVmaW5lIE1GSUVfU1RSSU5HKHgpIGNhc2UgTUZJRV9UWVBFXyAjI3g6IHJldHVybiAjeAorI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKKyNkZWZpbmUgTUZJRV9TVFJJTkcoeCkgY2FzZSBXTEFOX0VJRF8gIyN4OiByZXR1cm4gI3gKIAogc3RhdGljIGNvbnN0IGNoYXIgKmdldF9pbmZvX2VsZW1lbnRfc3RyaW5nKHUxNiBpZCkKIHsKIAlzd2l0Y2ggKGlkKSB7CiAJCU1GSUVfU1RSSU5HKFNTSUQpOwotCQlNRklFX1NUUklORyhSQVRFUyk7Ci0JCU1GSUVfU1RSSU5HKEZIX1NFVCk7Ci0JCU1GSUVfU1RSSU5HKERTX1NFVCk7Ci0JCU1GSUVfU1RSSU5HKENGX1NFVCk7CisJCU1GSUVfU1RSSU5HKFNVUFBfUkFURVMpOworCQlNRklFX1NUUklORyhGSF9QQVJBTVMpOworCQlNRklFX1NUUklORyhEU19QQVJBTVMpOworCQlNRklFX1NUUklORyhDRl9QQVJBTVMpOwogCQlNRklFX1NUUklORyhUSU0pOwotCQlNRklFX1NUUklORyhJQlNTX1NFVCk7CisJCU1GSUVfU1RSSU5HKElCU1NfUEFSQU1TKTsKIAkJTUZJRV9TVFJJTkcoQ09VTlRSWSk7Ci0JCU1GSUVfU1RSSU5HKEhPUF9QQVJBTVMpOwotCQlNRklFX1NUUklORyhIT1BfVEFCTEUpOworCQlNRklFX1NUUklORyhIUF9QQVJBTVMpOworCQlNRklFX1NUUklORyhIUF9UQUJMRSk7CiAJCU1GSUVfU1RSSU5HKFJFUVVFU1QpOwogCQlNRklFX1NUUklORyhDSEFMTEVOR0UpOwotCQlNRklFX1NUUklORyhQT1dFUl9DT05TVFJBSU5UKTsKLQkJTUZJRV9TVFJJTkcoUE9XRVJfQ0FQQUJJTElUWSk7CisJCU1GSUVfU1RSSU5HKFBXUl9DT05TVFJBSU5UKTsKKwkJTUZJRV9TVFJJTkcoUFdSX0NBUEFCSUxJVFkpOwogCQlNRklFX1NUUklORyhUUENfUkVRVUVTVCk7CiAJCU1GSUVfU1RSSU5HKFRQQ19SRVBPUlQpOwotCQlNRklFX1NUUklORyhTVVBQX0NIQU5ORUxTKTsKLQkJTUZJRV9TVFJJTkcoQ1NBKTsKKwkJTUZJRV9TVFJJTkcoU1VQUE9SVEVEX0NIQU5ORUxTKTsKKwkJTUZJRV9TVFJJTkcoQ0hBTk5FTF9TV0lUQ0gpOwogCQlNRklFX1NUUklORyhNRUFTVVJFX1JFUVVFU1QpOwogCQlNRklFX1NUUklORyhNRUFTVVJFX1JFUE9SVCk7CiAJCU1GSUVfU1RSSU5HKFFVSUVUKTsKIAkJTUZJRV9TVFJJTkcoSUJTU19ERlMpOwogCQlNRklFX1NUUklORyhFUlBfSU5GTyk7CiAJCU1GSUVfU1RSSU5HKFJTTik7Ci0JCU1GSUVfU1RSSU5HKFJBVEVTX0VYKTsKKwkJTUZJRV9TVFJJTkcoRVhUX1NVUFBfUkFURVMpOwogCQlNRklFX1NUUklORyhHRU5FUklDKTsKIAkJTUZJRV9TVFJJTkcoUU9TX1BBUkFNRVRFUik7CiAJZGVmYXVsdDoKQEAgLTExMjQsNyArMTEyMiw3IEBACiB7CiAJREVDTEFSRV9TU0lEX0JVRihzc2lkKTsKIAl1OCBpOwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJY2hhciByYXRlc19zdHJbNjRdOwogCWNoYXIgKnA7CiAjZW5kaWYKQEAgLTExNDQsNyArMTE0Miw3IEBACiAJCX0KIAogCQlzd2l0Y2ggKGluZm9fZWxlbWVudC0+aWQpIHsKLQkJY2FzZSBNRklFX1RZUEVfU1NJRDoKKwkJY2FzZSBXTEFOX0VJRF9TU0lEOgogCQkJbmV0d29yay0+c3NpZF9sZW4gPSBtaW4oaW5mb19lbGVtZW50LT5sZW4sCiAJCQkJCQkodTgpIElXX0VTU0lEX01BWF9TSVpFKTsKIAkJCW1lbWNweShuZXR3b3JrLT5zc2lkLCBpbmZvX2VsZW1lbnQtPmRhdGEsCkBAIC0xMTUzLDIxICsxMTUxLDIxIEBACiAJCQkJbWVtc2V0KG5ldHdvcmstPnNzaWQgKyBuZXR3b3JrLT5zc2lkX2xlbiwgMCwKIAkJCQkgICAgICAgSVdfRVNTSURfTUFYX1NJWkUgLSBuZXR3b3JrLT5zc2lkX2xlbik7CiAKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfU1NJRDogJyVzJyBsZW49JWQuXG4iLAorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX1NTSUQ6ICclcycgbGVuPSVkLlxuIiwKIAkJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmstPnNzaWQsCiAJCQkJCQkJbmV0d29yay0+c3NpZF9sZW4pLAogCQkJCQkgICAgIG5ldHdvcmstPnNzaWRfbGVuKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1JBVEVTOgotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKwkJY2FzZSBXTEFOX0VJRF9TVVBQX1JBVEVTOgorI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJCXAgPSByYXRlc19zdHI7CiAjZW5kaWYKIAkJCW5ldHdvcmstPnJhdGVzX2xlbiA9IG1pbihpbmZvX2VsZW1lbnQtPmxlbiwKIAkJCQkJCSBNQVhfUkFURVNfTEVOR1RIKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBuZXR3b3JrLT5yYXRlc19sZW47IGkrKykgewogCQkJCW5ldHdvcmstPnJhdGVzW2ldID0gaW5mb19lbGVtZW50LT5kYXRhW2ldOwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJCQkJcCArPSBzbnByaW50ZihwLCBzaXplb2YocmF0ZXNfc3RyKSAtCiAJCQkJCSAgICAgIChwIC0gcmF0ZXNfc3RyKSwgIiUwMlggIiwKIAkJCQkJICAgICAgbmV0d29yay0+cmF0ZXNbaV0pOwpAQCAtMTE4MiwxOSArMTE4MCwxOSBAQAogCQkJCX0KIAkJCX0KIAotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9SQVRFUzogJyVzJyAoJWQpXG4iLAorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX1NVUFBfUkFURVM6ICclcycgKCVkKVxuIiwKIAkJCQkJICAgICByYXRlc19zdHIsIG5ldHdvcmstPnJhdGVzX2xlbik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9SQVRFU19FWDoKLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCisJCWNhc2UgV0xBTl9FSURfRVhUX1NVUFBfUkFURVM6CisjaWZkZWYgQ09ORklHX0xJQklQV19ERUJVRwogCQkJcCA9IHJhdGVzX3N0cjsKICNlbmRpZgogCQkJbmV0d29yay0+cmF0ZXNfZXhfbGVuID0gbWluKGluZm9fZWxlbWVudC0+bGVuLAogCQkJCQkJICAgIE1BWF9SQVRFU19FWF9MRU5HVEgpOwogCQkJZm9yIChpID0gMDsgaSA8IG5ldHdvcmstPnJhdGVzX2V4X2xlbjsgaSsrKSB7CiAJCQkJbmV0d29yay0+cmF0ZXNfZXhbaV0gPSBpbmZvX2VsZW1lbnQtPmRhdGFbaV07Ci0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJCQlwICs9IHNucHJpbnRmKHAsIHNpemVvZihyYXRlc19zdHIpIC0KIAkJCQkJICAgICAgKHAgLSByYXRlc19zdHIpLCAiJTAyWCAiLAogCQkJCQkgICAgICBuZXR3b3JrLT5yYXRlc1tpXSk7CkBAIC0xMjA5LDQ5ICsxMjA3LDQ5IEBACiAJCQkJfQogCQkJfQogCi0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX1JBVEVTX0VYOiAnJXMnICglZClcbiIsCisJCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiV0xBTl9FSURfRVhUX1NVUFBfUkFURVM6ICclcycgKCVkKVxuIiwKIAkJCQkJICAgICByYXRlc19zdHIsIG5ldHdvcmstPnJhdGVzX2V4X2xlbik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9EU19TRVQ6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0RTX1NFVDogJWRcbiIsCisJCWNhc2UgV0xBTl9FSURfRFNfUEFSQU1TOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0RTX1BBUkFNUzogJWRcbiIsCiAJCQkJCSAgICAgaW5mb19lbGVtZW50LT5kYXRhWzBdKTsKIAkJCW5ldHdvcmstPmNoYW5uZWwgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9GSF9TRVQ6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0ZIX1NFVDogaWdub3JlZFxuIik7CisJCWNhc2UgV0xBTl9FSURfRkhfUEFSQU1TOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0ZIX1BBUkFNUzogaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9DRl9TRVQ6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0NGX1NFVDogaWdub3JlZFxuIik7CisJCWNhc2UgV0xBTl9FSURfQ0ZfUEFSQU1TOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0NGX1BBUkFNUzogaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9USU06CisJCWNhc2UgV0xBTl9FSURfVElNOgogCQkJbmV0d29yay0+dGltLnRpbV9jb3VudCA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKIAkJCW5ldHdvcmstPnRpbS50aW1fcGVyaW9kID0gaW5mb19lbGVtZW50LT5kYXRhWzFdOwotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9USU06IHBhcnRpYWxseSBpZ25vcmVkXG4iKTsKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9USU06IHBhcnRpYWxseSBpZ25vcmVkXG4iKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0VSUF9JTkZPOgorCQljYXNlIFdMQU5fRUlEX0VSUF9JTkZPOgogCQkJbmV0d29yay0+ZXJwX3ZhbHVlID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOwogCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfRVJQX1ZBTFVFOwogCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9FUlBfU0VUOiAlZFxuIiwKIAkJCQkJICAgICBuZXR3b3JrLT5lcnBfdmFsdWUpOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfSUJTU19TRVQ6CisJCWNhc2UgV0xBTl9FSURfSUJTU19QQVJBTVM6CiAJCQluZXR3b3JrLT5hdGltX3dpbmRvdyA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJNRklFX1RZUEVfSUJTU19TRVQ6ICVkXG4iLAorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0lCU1NfUEFSQU1TOiAlZFxuIiwKIAkJCQkJICAgICBuZXR3b3JrLT5hdGltX3dpbmRvdyk7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9DSEFMTEVOR0U6Ci0JCQlJRUVFODAyMTFfREVCVUdfTUdNVCgiTUZJRV9UWVBFX0NIQUxMRU5HRTogaWdub3JlZFxuIik7CisJCWNhc2UgV0xBTl9FSURfQ0hBTExFTkdFOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0NIQUxMRU5HRTogaWdub3JlZFxuIik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9HRU5FUklDOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9HRU5FUklDOiAlZCBieXRlc1xuIiwKKwkJY2FzZSBXTEFOX0VJRF9HRU5FUklDOgorCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIldMQU5fRUlEX0dFTkVSSUM6ICVkIGJ5dGVzXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+bGVuKTsKIAkJCWlmICghaWVlZTgwMjExX3BhcnNlX3Fvc19pbmZvX3BhcmFtX0lFKGluZm9fZWxlbWVudCwKIAkJCQkJCQkgICAgICAgbmV0d29yaykpCkBAIC0xMjY5LDggKzEyNjcsOCBAQAogCQkJfQogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfUlNOOgotCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9SU046ICVkIGJ5dGVzXG4iLAorCQljYXNlIFdMQU5fRUlEX1JTTjoKKwkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJXTEFOX0VJRF9SU046ICVkIGJ5dGVzXG4iLAogCQkJCQkgICAgIGluZm9fZWxlbWVudC0+bGVuKTsKIAkJCW5ldHdvcmstPnJzbl9pZV9sZW4gPSBtaW4oaW5mb19lbGVtZW50LT5sZW4gKyAyLAogCQkJCQkJICBNQVhfV1BBX0lFX0xFTik7CkBAIC0xMjc4LDIyICsxMjc2LDIyIEBACiAJCQkgICAgICAgbmV0d29yay0+cnNuX2llX2xlbik7CiAJCQlicmVhazsKIAotCQljYXNlIE1GSUVfVFlQRV9RT1NfUEFSQU1FVEVSOgorCQljYXNlIFdMQU5fRUlEX1FPU19QQVJBTUVURVI6CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiUW9TIEVycm9yIG5lZWQgdG8gcGFyc2UgUU9TX1BBUkFNRVRFUiBJRVxuIik7CiAJCQlicmVhazsKIAkJCS8qIDgwMi4xMWggKi8KLQkJY2FzZSBNRklFX1RZUEVfUE9XRVJfQ09OU1RSQUlOVDoKKwkJY2FzZSBXTEFOX0VJRF9QV1JfQ09OU1RSQUlOVDoKIAkJCW5ldHdvcmstPnBvd2VyX2NvbnN0cmFpbnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19QT1dFUl9DT05TVFJBSU5UOwogCQkJYnJlYWs7CiAKLQkJY2FzZSBNRklFX1RZUEVfQ1NBOgorCQljYXNlIFdMQU5fRUlEX0NIQU5ORUxfU1dJVENIOgogCQkJbmV0d29yay0+cG93ZXJfY29uc3RyYWludCA9IGluZm9fZWxlbWVudC0+ZGF0YVswXTsKIAkJCW5ldHdvcmstPmZsYWdzIHw9IE5FVFdPUktfSEFTX0NTQTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1FVSUVUOgorCQljYXNlIFdMQU5fRUlEX1FVSUVUOgogCQkJbmV0d29yay0+cXVpZXQuY291bnQgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMF07CiAJCQluZXR3b3JrLT5xdWlldC5wZXJpb2QgPSBpbmZvX2VsZW1lbnQtPmRhdGFbMV07CiAJCQluZXR3b3JrLT5xdWlldC5kdXJhdGlvbiA9IGluZm9fZWxlbWVudC0+ZGF0YVsyXTsKQEAgLTEzMDEsNyArMTI5OSw3IEBACiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19RVUlFVDsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX0lCU1NfREZTOgorCQljYXNlIFdMQU5fRUlEX0lCU1NfREZTOgogCQkJaWYgKG5ldHdvcmstPmlic3NfZGZzKQogCQkJCWJyZWFrOwogCQkJbmV0d29yay0+aWJzc19kZnMgPSBrbWVtZHVwKGluZm9fZWxlbWVudC0+ZGF0YSwKQEAgLTEzMTIsNyArMTMxMCw3IEBACiAJCQluZXR3b3JrLT5mbGFncyB8PSBORVRXT1JLX0hBU19JQlNTX0RGUzsKIAkJCWJyZWFrOwogCi0JCWNhc2UgTUZJRV9UWVBFX1RQQ19SRVBPUlQ6CisJCWNhc2UgV0xBTl9FSURfVFBDX1JFUE9SVDoKIAkJCW5ldHdvcmstPnRwY19yZXBvcnQudHJhbnNtaXRfcG93ZXIgPQogCQkJICAgIGluZm9fZWxlbWVudC0+ZGF0YVswXTsKIAkJCW5ldHdvcmstPnRwY19yZXBvcnQubGlua19tYXJnaW4gPSBpbmZvX2VsZW1lbnQtPmRhdGFbMV07CkBAIC0xNTYxLDcgKzE1NTksNyBAQAogCX07CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICp0YXJnZXQ7CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpvbGRlc3QgPSBOVUxMOwotI2lmZGVmIENPTkZJR19JRUVFODAyMTFfREVCVUcKKyNpZmRlZiBDT05GSUdfTElCSVBXX0RFQlVHCiAJc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgKmluZm9fZWxlbWVudCA9IGJlYWNvbi0+aW5mb19lbGVtZW50OwogI2VuZGlmCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE2MTUsNyArMTYxMyw3IEBACiAJCQlicmVhazsKIAogCQlpZiAoKG9sZGVzdCA9PSBOVUxMKSB8fAotCQkgICAgKHRhcmdldC0+bGFzdF9zY2FubmVkIDwgb2xkZXN0LT5sYXN0X3NjYW5uZWQpKQorCQkgICAgdGltZV9iZWZvcmUodGFyZ2V0LT5sYXN0X3NjYW5uZWQsIG9sZGVzdC0+bGFzdF9zY2FubmVkKSkKIAkJCW9sZGVzdCA9IHRhcmdldDsKIAl9CiAKQEAgLTE2MzksNyArMTYzNyw3IEBACiAJCQlsaXN0X2RlbChpZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdC5uZXh0KTsKIAkJfQogCi0jaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRworI2lmZGVmIENPTkZJR19MSUJJUFdfREVCVUcKIAkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkFkZGluZyAnJXMnICglcE0pIHZpYSAlcy5cbiIsCiAJCQkJICAgICBwcmludF9zc2lkKHNzaWQsIG5ldHdvcmsuc3NpZCwKIAkJCQkJCSBuZXR3b3JrLnNzaWRfbGVuKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd190eC5jCmluZGV4IGY3OGY1N2UuLjY1YTgxOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfdHguYwpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKIAogLyoKIApAQCAtMjYwLDcgKzI2MCw2IEBACiAJaW50IGksIGJ5dGVzX3Blcl9mcmFnLCBucl9mcmFncywgYnl0ZXNfbGFzdF9mcmFnLCBmcmFnX3NpemUsCiAJICAgIHJ0c19yZXF1aXJlZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZpZWVlLT5zdGF0czsKIAlpbnQgZW5jcnlwdCwgaG9zdF9lbmNyeXB0LCBob3N0X2VuY3J5cHRfbXNkdSwgaG9zdF9idWlsZF9pdjsKIAlfX2JlMTYgZXRoZXJfdHlwZTsKIAlpbnQgYnl0ZXMsIGZjLCBoZHJfbGVuOwpAQCAtMzA2LDcgKzMwNSw3IEBACiAKIAlpZiAoIWVuY3J5cHQgJiYgaWVlZS0+aWVlZTgwMl8xeCAmJgogCSAgICBpZWVlLT5kcm9wX3VuZW5jcnlwdGVkICYmIGV0aGVyX3R5cGUgIT0gaHRvbnMoRVRIX1BfUEFFKSkgewotCQlzdGF0cy0+dHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZ290byBzdWNjZXNzOwogCX0KIApAQCAtNTI2LDggKzUyNSw4IEBACiAJaWYgKHR4YikgewogCQlpbnQgcmV0ID0gKCppZWVlLT5oYXJkX3N0YXJ0X3htaXQpICh0eGIsIGRldiwgcHJpb3JpdHkpOwogCQlpZiAocmV0ID09IDApIHsKLQkJCXN0YXRzLT50eF9wYWNrZXRzKys7Ci0JCQlzdGF0cy0+dHhfYnl0ZXMgKz0gdHhiLT5wYXlsb2FkX3NpemU7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gdHhiLT5wYXlsb2FkX3NpemU7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC01MzksOCArNTM4LDkgQEAKICAgICAgIGZhaWxlZDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXN0YXRzLT50eF9lcnJvcnMrKzsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfeG1pdCk7CiAKIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3R4Yl9mcmVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3d4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2xpYmlwd193eC5jCmluZGV4IDMxZWEzYWIuLjNjMDgxMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvbGliaXB3X3d4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9saWJpcHdfd3guYwpAQCAtMzUsMTMgKzM1LDI0IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8bmV0L2xpYjgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAKKyNpbmNsdWRlICJpZWVlODAyMTEuaCIKKwogc3RhdGljIGNvbnN0IGNoYXIgKmllZWU4MDIxMV9tb2Rlc1tdID0gewogCSI/IiwgImEiLCAiYiIsICJhYiIsICJnIiwgImFnIiwgImJnIiwgImFiZyIKIH07CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGVsYXBzZWRfamlmZmllc19tc2Vjcyh1bnNpZ25lZCBsb25nIHN0YXJ0KQoreworCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllczsKKworCWlmIChlbmQgPj0gc3RhcnQpCisJCXJldHVybiBqaWZmaWVzX3RvX21zZWNzKGVuZCAtIHN0YXJ0KTsKKworCXJldHVybiBqaWZmaWVzX3RvX21zZWNzKGVuZCArIChNQVhfSklGRllfT0ZGU0VUIC0gc3RhcnQpICsgMSk7Cit9CisKICNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKIHN0YXRpYyBjaGFyICppZWVlODAyMTFfdHJhbnNsYXRlX3NjYW4oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCiAJCQkJICAgICAgY2hhciAqc3RhcnQsIGNoYXIgKnN0b3AsCkBAIC0yMTUsOCArMjI2LDggQEAKIAlpd2UuY21kID0gSVdFVkNVU1RPTTsKIAlwID0gY3VzdG9tOwogCXAgKz0gc25wcmludGYocCwgTUFYX0NVU1RPTV9MRU4gLSAocCAtIGN1c3RvbSksCi0JCSAgICAgICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKLQkJICAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbmV0d29yay0+bGFzdF9zY2FubmVkKSk7CisJCSAgICAgICIgTGFzdCBiZWFjb246ICV1bXMgYWdvIiwKKwkJICAgICAgZWxhcHNlZF9qaWZmaWVzX21zZWNzKG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCkpOwogCWl3ZS51LmRhdGEubGVuZ3RoID0gcCAtIGN1c3RvbTsKIAlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCiAJCXN0YXJ0ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgc3RhcnQsIHN0b3AsICZpd2UsIGN1c3RvbSk7CkBAIC0yNzYsMTUgKzI4NywxNSBAQAogCQkgICAgdGltZV9hZnRlcihuZXR3b3JrLT5sYXN0X3NjYW5uZWQgKyBpZWVlLT5zY2FuX2FnZSwgamlmZmllcykpCiAJCQlldiA9IGllZWU4MDIxMV90cmFuc2xhdGVfc2NhbihpZWVlLCBldiwgc3RvcCwgbmV0d29yaywKIAkJCQkJCSAgICAgIGluZm8pOwotCQllbHNlCisJCWVsc2UgewogCQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIk5vdCBzaG93aW5nIG5ldHdvcmsgJyVzICgiCi0JCQkJCSAgICAgIiVwTSknIGR1ZSB0byBhZ2UgKCVkbXMpLlxuIiwKKwkJCQkJICAgICAiJXBNKScgZHVlIHRvIGFnZSAoJXVtcykuXG4iLAogCQkJCQkgICAgIHByaW50X3NzaWQoc3NpZCwgbmV0d29yay0+c3NpZCwKIAkJCQkJCQkgbmV0d29yay0+c3NpZF9sZW4pLAogCQkJCQkgICAgIG5ldHdvcmstPmJzc2lkLAotCQkJCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtCi0JCQkJCQkJICAgICAgbmV0d29yay0+Ci0JCQkJCQkJICAgICAgbGFzdF9zY2FubmVkKSk7CisJCQkJCSAgICAgZWxhcHNlZF9qaWZmaWVzX21zZWNzKAorCQkJCQkgICAgICAgICAgICAgICBuZXR3b3JrLT5sYXN0X3NjYW5uZWQpKTsKKwkJfQogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZwppbmRleCA0N2JlZTBlLi44MzA0ZjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCkBAIC0xLDI2ICsxLDI5IEBACiBjb25maWcgSVdMV0lGSQotCXRyaXN0YXRlCi0KLWNvbmZpZyBJV0xDT1JFCi0JdHJpc3RhdGUgIkludGVsIFdpcmVsZXNzIFdpZmkgQ29yZSIKKwl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lmaSIKIAlkZXBlbmRzIG9uIFBDSSAmJiBNQUM4MDIxMSAmJiBXTEFOXzgwMjExICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBMSUI4MDIxMQotCXNlbGVjdCBJV0xXSUZJCisJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBNQUM4MDIxMV9MRURTIGlmIElXTFdJRklfTEVEUwogCXNlbGVjdCBMRURTX0NMQVNTIGlmIElXTFdJRklfTEVEUwogCXNlbGVjdCBSRktJTEwgaWYgSVdMV0lGSV9SRktJTEwKIAogY29uZmlnIElXTFdJRklfTEVEUwotCWJvb2wKLQlkZWZhdWx0IG4KKwlib29sICJFbmFibGUgTEVEIHN1cHBvcnQgaW4gaXdsYWduIGFuZCBpd2wzOTQ1IGRyaXZlcnMiCisJZGVwZW5kcyBvbiBJV0xXSUZJCiAKIGNvbmZpZyBJV0xXSUZJX1JGS0lMTAotCWJvb2xlYW4gIkl3bHdpZmkgUkYga2lsbCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVdMQ09SRQorCWJvb2wgIkVuYWJsZSBSRiBraWxsIHN1cHBvcnQgaW4gaXdsYWduIGFuZCBpd2wzOTQ1IGRyaXZlcnMiCisJZGVwZW5kcyBvbiBJV0xXSUZJCisKK2NvbmZpZyBJV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UCisJYm9vbCAiRW5hYmxlIFNwZWN0cnVtIE1lYXN1cmVtZW50IGluIGl3bGFnbiBkcml2ZXIiCisJZGVwZW5kcyBvbiBJV0xXSUZJCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgc3BlY3RydW0gbWVhc3VyZW1lbnQgZm9yIHRoZSBpd2xhZ24gZHJpdmVyLgogCiBjb25maWcgSVdMV0lGSV9ERUJVRwotCWJvb2wgIkVuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gaXdsYWduIGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTENPUkUKKwlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIGl3bGFnbiBhbmQgaXdsMzk0NSBkcml2ZXJzIgorCWRlcGVuZHMgb24gSVdMV0lGSQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGRlYnVnIHRyYWNpbmcgb3V0cHV0IGZvciB0aGUgaXdsd2lmaSBkcml2ZXJzCiAKQEAgLTQ0LDE2ICs0NywxNCBAQAogCSAgYW55IHByb2JsZW1zIHlvdSBtYXkgZW5jb3VudGVyLgogCiBjb25maWcgSVdMV0lGSV9ERUJVR0ZTCi0gICAgICAgIGJvb2wgIkl3bHdpZmkgZGVidWdmcyBzdXBwb3J0IgotICAgICAgICBkZXBlbmRzIG9uIElXTENPUkUgJiYgSVdMV0lGSV9ERUJVRyAmJiBNQUM4MDIxMV9ERUJVR0ZTCisgICAgICAgIGJvb2wgIml3bGFnbiBkZWJ1Z2ZzIHN1cHBvcnQiCisgICAgICAgIGRlcGVuZHMgb24gSVdMV0lGSSAmJiBJV0xXSUZJX0RFQlVHICYmIE1BQzgwMjExX0RFQlVHRlMKICAgICAgICAgLS0taGVscC0tLQogCSAgRW5hYmxlIGNyZWF0aW9uIG9mIGRlYnVnZnMgZmlsZXMgZm9yIHRoZSBpd2x3aWZpIGRyaXZlcnMuCiAKIGNvbmZpZyBJV0xBR04KLQl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lGaSBOZXh0IEdlbiBBR04iCi0JZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKLQlzZWxlY3QgRldfTE9BREVSCi0Jc2VsZWN0IElXTENPUkUKKwl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lGaSBOZXh0IEdlbiBBR04gKGl3bGFnbikiCisJZGVwZW5kcyBvbiBJV0xXSUZJCiAJLS0taGVscC0tLQogCSAgU2VsZWN0IHRvIGJ1aWxkIHRoZSBkcml2ZXIgc3VwcG9ydGluZyB0aGU6CiAKQEAgLTc2LDE5ICs3Nyw2IEBACiAJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4gIFRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGl3bGFnbi5rby4KIAotY29uZmlnIElXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2xhZ24gZHJpdmVyIgotCWRlcGVuZHMgb24gSVdMQUdOCi0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgc3BlY3RydW0gbWVhc3VyZW1lbnQgZm9yIHRoZSBpd2xhZ24gZHJpdmVyLgotCi1jb25maWcgSVdMQUdOX0xFRFMKLQlib29sICJFbmFibGUgTEVEUyBmZWF0dXJlcyBpbiBpd2xhZ24gZHJpdmVyIgotCWRlcGVuZHMgb24gSVdMQUdOCi0Jc2VsZWN0IElXTFdJRklfTEVEUwotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgTEVEUyBmb3IgdGhlIGl3bGFnbiBkcml2ZXJzCi0KIAogY29uZmlnIElXTDQ5NjUKIAlib29sICJJbnRlbCBXaXJlbGVzcyBXaUZpIDQ5NjVBR04iCkBAIC05NywyMCArODUsMTQgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rIDQ5NjVBR04KIAogY29uZmlnIElXTDUwMDAKLQlib29sICJJbnRlbCBXaXJlbGVzcyBXaUZpIDUwMDBBR04iCisJYm9vbCAiSW50ZWwgV2lyZWxlc3MgV2lGaSA1MDAwQUdOOyBJbnRlbCBXaUZpIExpbmsgMTAwMCwgNjAwMCwgYW5kIDYwNTAgU2VyaWVzIgogCWRlcGVuZHMgb24gSVdMQUdOCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgNTAwMEFHTiBGYW1pbHkKIAogY29uZmlnIElXTDM5NDUKLQl0cmlzdGF0ZSAiSW50ZWwgUFJPL1dpcmVsZXNzIDM5NDVBQkcvQkcgTmV0d29yayBDb25uZWN0aW9uIgotCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IEZXX0xPQURFUgotCXNlbGVjdCBMSUI4MDIxMQotCXNlbGVjdCBJV0xXSUZJCi0Jc2VsZWN0IE1BQzgwMjExX0xFRFMgaWYgSVdMMzk0NV9MRURTCi0Jc2VsZWN0IExFRFNfQ0xBU1MgaWYgSVdMMzk0NV9MRURTCi0Jc2VsZWN0IFJGS0lMTCBpZiBJV0wzOTQ1X1JGS0lMTAorCXRyaXN0YXRlICJJbnRlbCBQUk8vV2lyZWxlc3MgMzk0NUFCRy9CRyBOZXR3b3JrIENvbm5lY3Rpb24gKGl3bDM5NDUpIgorCWRlcGVuZHMgb24gSVdMV0lGSQogCS0tLWhlbHAtLS0KIAkgIFNlbGVjdCB0byBidWlsZCB0aGUgZHJpdmVyIHN1cHBvcnRpbmcgdGhlOgogCkBAIC0xMzMsNDUgKzExNSw4IEBACiAJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMudHh0Pi4gIFRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGl3bDM5NDUua28uCiAKLWNvbmZpZyBJV0wzOTQ1X1JGS0lMTAotCWJvb2wgIkVuYWJsZSBSRiBraWxsIHN1cHBvcnQgaW4gaXdsMzk0NSBkcml2ZXJzIgotCWRlcGVuZHMgb24gSVdMMzk0NQotCiBjb25maWcgSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2wzOTQ1IGRyaXZlcnMiCisJYm9vbCAiRW5hYmxlIFNwZWN0cnVtIE1lYXN1cmVtZW50IGluIGl3bDM5NDUgZHJpdmVyIgogCWRlcGVuZHMgb24gSVdMMzk0NQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIHNwZWN0cnVtIG1lYXN1cmVtZW50IGZvciB0aGUgaXdsMzk0NSBkcml2ZXIuCi0KLWNvbmZpZyBJV0wzOTQ1X0xFRFMKLQlib29sICJFbmFibGUgTEVEUyBmZWF0dXJlcyBpbiBpd2wzOTQ1IGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTDM5NDUKLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIExFRFMgZm9yIHRoZSBpd2wzOTQ1IGRyaXZlci4KLQotY29uZmlnIElXTDM5NDVfREVCVUcKLQlib29sICJFbmFibGUgZnVsbCBkZWJ1Z2dpbmcgb3V0cHV0IGluIGl3bDM5NDUgZHJpdmVyIgotCWRlcGVuZHMgb24gSVdMMzk0NQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGRlYnVnIHRyYWNpbmcgb3V0cHV0IGZvciB0aGUgaXdsMzk0NQotCSAgZHJpdmVyLgotCi0JICBUaGlzIHdpbGwgcmVzdWx0IGluIHRoZSBrZXJuZWwgbW9kdWxlIGJlaW5nIH4xMDBrIGxhcmdlci4gIFlvdSBjYW4KLQkgIGNvbnRyb2wgd2hpY2ggZGVidWcgb3V0cHV0IGlzIHNlbnQgdG8gdGhlIGtlcm5lbCBsb2cgYnkgc2V0dGluZyB0aGUKLQkgIHZhbHVlIGluCi0KLQkgICAgICAgICAgL3N5cy9idXMvcGNpL2RyaXZlcnMvJHtEUklWRVJ9L2RlYnVnX2xldmVsCi0KLQkgIFRoaXMgZW50cnkgd2lsbCBvbmx5IGV4aXN0IGlmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQuCi0KLQkgIFRvIHNldCBhIHZhbHVlLCBzaW1wbHkgZWNobyBhbiA4LWJ5dGUgaGV4IHZhbHVlIHRvIHRoZSBzYW1lIGZpbGU6Ci0KLQkJICAlIGVjaG8gMHg0M2ZmZiA+IC9zeXMvYnVzL3BjaS9kcml2ZXJzLyR7RFJJVkVSfS9kZWJ1Z19sZXZlbAotCi0JICBZb3UgY2FuIGZpbmQgdGhlIGxpc3Qgb2YgZGVidWcgbWFzayB2YWx1ZXMgaW46Ci0JCSAgZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1kZWJ1Zy5oCi0KLQkgIElmIHRoaXMgaXMgeW91ciBmaXJzdCB0aW1lIHVzaW5nIHRoaXMgZHJpdmVyLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUKLQkgIGFzIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYXNzaXN0IG90aGVycyBpbiBoZWxwaW5nIHlvdSByZXNvbHZlCi0JICBhbnkgcHJvYmxlbXMgeW91IG1heSBlbmNvdW50ZXIuCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCmluZGV4IDBiZTllNmIuLmQ3OWQ5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQpAQCAtMSwyMCArMSwyMSBAQAotb2JqLSQoQ09ORklHX0lXTENPUkUpCSs9IGl3bGNvcmUubworb2JqLSQoQ09ORklHX0lXTFdJRkkpCSs9IGl3bGNvcmUubwogaXdsY29yZS1vYmpzIAkJOj0gaXdsLWNvcmUubyBpd2wtZWVwcm9tLm8gaXdsLWhjbWQubyBpd2wtcG93ZXIubwogaXdsY29yZS1vYmpzIAkJKz0gaXdsLXJ4Lm8gaXdsLXR4Lm8gaXdsLXN0YS5vIGl3bC1jYWxpYi5vCiBpd2xjb3JlLW9ianMgCQkrPSBpd2wtc2Nhbi5vCiBpd2xjb3JlLSQoQ09ORklHX0lXTFdJRklfREVCVUdGUykgKz0gaXdsLWRlYnVnZnMubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX0xFRFMpICs9IGl3bC1sZWQubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX1JGS0lMTCkgKz0gaXdsLXJma2lsbC5vCi1pd2xjb3JlLSQoQ09ORklHX0lXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVCkgKz0gaXdsLXNwZWN0cnVtLm8KK2l3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVCkgKz0gaXdsLXNwZWN0cnVtLm8KIAogb2JqLSQoQ09ORklHX0lXTEFHTikJKz0gaXdsYWduLm8KLWl3bGFnbi1vYmpzCQk6PSBpd2wtYWduLm8gaXdsLWFnbi1ycy5vIGl3bC1hZ24taGNtZC1jaGVjay5vCitpd2xhZ24tb2JqcwkJOj0gaXdsLWFnbi5vIGl3bC1hZ24tcnMubwogCiBpd2xhZ24tJChDT05GSUdfSVdMNDk2NSkgKz0gaXdsLTQ5NjUubwogaXdsYWduLSQoQ09ORklHX0lXTDUwMDApICs9IGl3bC01MDAwLm8KK2l3bGFnbi0kKENPTkZJR19JV0w1MDAwKSArPSBpd2wtNjAwMC5vCitpd2xhZ24tJChDT05GSUdfSVdMNTAwMCkgKz0gaXdsLTEwMDAubwogCiBvYmotJChDT05GSUdfSVdMMzk0NSkJKz0gaXdsMzk0NS5vCi1pd2wzOTQ1LW9ianMJCTo9IGl3bDM5NDUtYmFzZS5vIGl3bC0zOTQ1Lm8gaXdsLTM5NDUtcnMubwotaXdsMzk0NS0kKENPTkZJR19JV0wzOTQ1X0xFRFMpICs9IGl3bC0zOTQ1LWxlZC5vCitpd2wzOTQ1LW9ianMJCTo9IGl3bDM5NDUtYmFzZS5vIGl3bC0zOTQ1Lm8gaXdsLTM5NDUtcnMubyBpd2wtMzk0NS1sZWQubwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGE1MmYxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCkBAIC0wLDAgKzEsNzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOC0yMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgIml3bC1lZXByb20uaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtaW8uaCIKKyNpbmNsdWRlICJpd2wtc3RhLmgiCisjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKKyNpbmNsdWRlICJpd2wtNTAwMC1ody5oIgorCisvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLworI2RlZmluZSBJV0wxMDAwX1VDT0RFX0FQSV9NQVggMgorCisvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCisjZGVmaW5lIElXTDEwMDBfVUNPREVfQVBJX01JTiAxCisKKyNkZWZpbmUgSVdMMTAwMF9GV19QUkUgIml3bHdpZmktMTAwMC0iCisjZGVmaW5lIF9JV0wxMDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDEwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKKyNkZWZpbmUgSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMMTAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorCitzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmcgPSB7CisJLm5hbWUgPSAiMTAwMCBTZXJpZXMgQkdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0wxMDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDEwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDEwMDBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9HfElXTF9TS1VfTiwKKwkub3BzID0gJml3bDUwMDBfb3BzLAorCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKKwkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAorCS52YWxpZF90eF9hbnQgPSBBTlRfQSwKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAorCS5uZWVkX3BsbF9jZmcgPSB0cnVlLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb21tYW5kcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmY0ZWI1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29tbWFuZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3MDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCi0gKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCi0gKgotICogR1BMIExJQ0VOU0UgU1VNTUFSWQotICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAotICogVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KLSAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoKLSAqIEJTRCBMSUNFTlNFCi0gKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICogICogTmVpdGhlciB0aGUgbmFtZSBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICogUGxlYXNlIHVzZSB0aGlzIGZpbGUgKGl3bC0zOTQ1LWNvbW1hbmRzLmgpIG9ubHkgZm9yIHVDb2RlIEFQSSBkZWZpbml0aW9ucy4KLSAqIFBsZWFzZSB1c2UgaXdsLTM5NDUtaHcuaCBmb3IgaGFyZHdhcmUtcmVsYXRlZCBkZWZpbml0aW9ucy4KLSAqIFBsZWFzZSB1c2UgaXdsLTM5NDUuaCBmb3IgZHJpdmVyIGltcGxlbWVudGF0aW9uIGRlZmluaXRpb25zLgotICovCi0KLSNpZm5kZWYgX19pd2xfMzk0NV9jb21tYW5kc19oX18KLSNkZWZpbmUgX19pd2xfMzk0NV9jb21tYW5kc19oX18KLQotLyogdUNvZGUgdmVyc2lvbiBjb250YWlucyA0IHZhbHVlczogTWFqb3IvTWlub3IvQVBJL1NlcmlhbCAqLwotI2RlZmluZSBJV0xfVUNPREVfTUFKT1IodmVyKQkoKCh2ZXIpICYgMHhGRjAwMDAwMCkgPj4gMjQpCi0jZGVmaW5lIElXTF9VQ09ERV9NSU5PUih2ZXIpCSgoKHZlcikgJiAweDAwRkYwMDAwKSA+PiAxNikKLSNkZWZpbmUgSVdMX1VDT0RFX0FQSSh2ZXIpCSgoKHZlcikgJiAweDAwMDBGRjAwKSA+PiA4KQotI2RlZmluZSBJV0xfVUNPREVfU0VSSUFMKHZlcikJKCh2ZXIpICYgMHgwMDAwMDBGRikKLQotZW51bSB7Ci0JUkVQTFlfQUxJVkUgPSAweDEsCi0JUkVQTFlfRVJST1IgPSAweDIsCi0KLQkvKiBSWE9OIGFuZCBRT1MgY29tbWFuZHMgKi8KLQlSRVBMWV9SWE9OID0gMHgxMCwKLQlSRVBMWV9SWE9OX0FTU09DID0gMHgxMSwKLQlSRVBMWV9RT1NfUEFSQU0gPSAweDEzLAotCVJFUExZX1JYT05fVElNSU5HID0gMHgxNCwKLQotCS8qIE11bHRpLVN0YXRpb24gc3VwcG9ydCAqLwotCVJFUExZX0FERF9TVEEgPSAweDE4LAotCVJFUExZX1JFTU9WRV9TVEEgPSAweDE5LAkvKiBub3QgdXNlZCAqLwotCVJFUExZX1JFTU9WRV9BTExfU1RBID0gMHgxYSwJLyogbm90IHVzZWQgKi8KLQotCS8qIFJYLCBUWCwgTEVEcyAqLwotCVJFUExZXzM5NDVfUlggPSAweDFiLAkJLyogMzk0NSBvbmx5ICovCi0JUkVQTFlfVFggPSAweDFjLAotCVJFUExZX1JBVEVfU0NBTEUgPSAweDQ3LAkvKiAzOTQ1IG9ubHkgKi8KLQlSRVBMWV9MRURTX0NNRCA9IDB4NDgsCi0JUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCA9IDB4NGUsIC8qIDQ5NjUgb25seSAqLwotCi0JLyogODAyLjExaCByZWxhdGVkICovCi0JUkFEQVJfTk9USUZJQ0FUSU9OID0gMHg3MCwJLyogbm90IHVzZWQgKi8KLQlSRVBMWV9RVUlFVF9DTUQgPSAweDcxLAkJLyogbm90IHVzZWQgKi8KLQlSRVBMWV9DSEFOTkVMX1NXSVRDSCA9IDB4NzIsCi0JQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OID0gMHg3MywKLQlSRVBMWV9TUEVDVFJVTV9NRUFTVVJFTUVOVF9DTUQgPSAweDc0LAotCVNQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OID0gMHg3NSwKLQotCS8qIFBvd2VyIE1hbmFnZW1lbnQgKi8KLQlQT1dFUl9UQUJMRV9DTUQgPSAweDc3LAotCVBNX1NMRUVQX05PVElGSUNBVElPTiA9IDB4N0EsCi0JUE1fREVCVUdfU1RBVElTVElDX05PVElGSUMgPSAweDdCLAotCi0JLyogU2NhbiBjb21tYW5kcyBhbmQgbm90aWZpY2F0aW9ucyAqLwotCVJFUExZX1NDQU5fQ01EID0gMHg4MCwKLQlSRVBMWV9TQ0FOX0FCT1JUX0NNRCA9IDB4ODEsCi0JU0NBTl9TVEFSVF9OT1RJRklDQVRJT04gPSAweDgyLAotCVNDQU5fUkVTVUxUU19OT1RJRklDQVRJT04gPSAweDgzLAotCVNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gMHg4NCwKLQotCS8qIElCU1MvQVAgY29tbWFuZHMgKi8KLQlCRUFDT05fTk9USUZJQ0FUSU9OID0gMHg5MCwKLQlSRVBMWV9UWF9CRUFDT04gPSAweDkxLAotCVdIT19JU19BV0FLRV9OT1RJRklDQVRJT04gPSAweDk0LAkvKiBub3QgdXNlZCAqLwotCi0JLyogTWlzY2VsbGFuZW91cyBjb21tYW5kcyAqLwotCVFVSUVUX05PVElGSUNBVElPTiA9IDB4OTYsCQkvKiBub3QgdXNlZCAqLwotCVJFUExZX1RYX1BXUl9UQUJMRV9DTUQgPSAweDk3LAotCU1FQVNVUkVfQUJPUlRfTk9USUZJQ0FUSU9OID0gMHg5OSwJLyogbm90IHVzZWQgKi8KLQotCS8qIEJsdWV0b290aCBkZXZpY2UgY29leGlzdGVuY2UgY29uZmlnIGNvbW1hbmQgKi8KLQlSRVBMWV9CVF9DT05GSUcgPSAweDliLAotCi0JLyogU3RhdGlzdGljcyAqLwotCVJFUExZX1NUQVRJU1RJQ1NfQ01EID0gMHg5YywKLQlTVEFUSVNUSUNTX05PVElGSUNBVElPTiA9IDB4OWQsCi0KLQkvKiBSRi1LSUxMIGNvbW1hbmRzIGFuZCBub3RpZmljYXRpb25zICovCi0JUkVQTFlfQ0FSRF9TVEFURV9DTUQgPSAweGEwLAotCUNBUkRfU1RBVEVfTk9USUZJQ0FUSU9OID0gMHhhMSwKLQotCS8qIE1pc3NlZCBiZWFjb25zIG5vdGlmaWNhdGlvbiAqLwotCU1JU1NFRF9CRUFDT05TX05PVElGSUNBVElPTiA9IDB4YTIsCi0KLQlSRVBMWV9NQVggPSAweGZmCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoMCkKLSAqIENvbW1vbmx5IHVzZWQgc3RydWN0dXJlcyBhbmQgZGVmaW5pdGlvbnM6Ci0gKiBDb21tYW5kIGhlYWRlciwgdHhwb3dlcgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogaXdsMzk0NV9jbWRfaGVhZGVyIGZsYWdzIHZhbHVlICovCi0jZGVmaW5lIElXTF9DTURfRkFJTEVEX01TSyAweDQwCi0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfY21kX2hlYWRlcgotICoKLSAqIFRoaXMgaGVhZGVyIGZvcm1hdCBhcHBlYXJzIGluIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBjb21tYW5kIHNlbnQgZnJvbSB0aGUKLSAqIGRyaXZlciwgYW5kIGVhY2ggcmVzcG9uc2Uvbm90aWZpY2F0aW9uIHJlY2VpdmVkIGZyb20gdUNvZGUuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIgewotCXU4IGNtZDsJCS8qIENvbW1hbmQgSUQ6ICBSRVBMWV9SWE9OLCBldGMuICovCi0JdTggZmxhZ3M7CS8qIElXTF9DTURfKiAqLwotCS8qCi0JICogVGhlIGRyaXZlciBzZXRzIHVwIHRoZSBzZXF1ZW5jZSBudW1iZXIgdG8gdmFsdWVzIG9mIGl0cyBjaG9vc2luZy4KLQkgKiB1Q29kZSBkb2VzIG5vdCB1c2UgdGhpcyB2YWx1ZSwgYnV0IHBhc3NlcyBpdCBiYWNrIHRvIHRoZSBkcml2ZXIKLQkgKiB3aGVuIHNlbmRpbmcgdGhlIHJlc3BvbnNlIHRvIGVhY2ggZHJpdmVyLW9yaWdpbmF0ZWQgY29tbWFuZCwgc28KLQkgKiB0aGUgZHJpdmVyIGNhbiBtYXRjaCB0aGUgcmVzcG9uc2UgdG8gdGhlIGNvbW1hbmQuICBTaW5jZSB0aGUgdmFsdWVzCi0JICogZG9uJ3QgZ2V0IHVzZWQgYnkgdUNvZGUsIHRoZSBkcml2ZXIgbWF5IHNldCB1cCBhbiBhcmJpdHJhcnkgZm9ybWF0LgotCSAqCi0JICogVGhlcmUgaXMgb25lIGV4Y2VwdGlvbjogIHVDb2RlIHNldHMgYml0IDE1IHdoZW4gaXQgb3JpZ2luYXRlcwotCSAqIHRoZSByZXNwb25zZS9ub3RpZmljYXRpb24sIGkuZS4gd2hlbiB0aGUgcmVzcG9uc2Uvbm90aWZpY2F0aW9uCi0JICogaXMgbm90IGEgZGlyZWN0IHJlc3BvbnNlIHRvIGEgY29tbWFuZCBzZW50IGJ5IHRoZSBkcml2ZXIuICBGb3IKLQkgKiBleGFtcGxlLCB1Q29kZSBpc3N1ZXMgUkVQTFlfMzk0NV9SWCB3aGVuIGl0IHNlbmRzIGEgcmVjZWl2ZWQgZnJhbWUKLQkgKiB0byB0aGUgZHJpdmVyOyBpdCBpcyBub3QgYSBkaXJlY3QgcmVzcG9uc2UgdG8gYW55IGRyaXZlciBjb21tYW5kLgotCSAqCi0JICogVGhlIExpbnV4IGRyaXZlciB1c2VzIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgotCSAqCi0JICogIDA6NyAgICBpbmRleC9wb3NpdGlvbiB3aXRoaW4gVHggcXVldWUKLQkgKiAgODoxMyAgIFR4IHF1ZXVlIHNlbGVjdGlvbgotCSAqIDE0OjE0ICAgZHJpdmVyIHNldHMgdGhpcyB0byBpbmRpY2F0ZSBjb21tYW5kIGlzIGluIHRoZSAnaHVnZScKLQkgKiAgICAgICAgIHN0b3JhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgY29tbWFuZCBidWZmZXJzLCBpLmUuIHNjYW4gY21kCi0JICogMTU6MTUgICB1Q29kZSBzZXRzIHRoaXMgaW4gdUNvZGUtb3JpZ2luYXRlZCByZXNwb25zZS9ub3RpZmljYXRpb24KLQkgKi8KLQlfX2xlMTYgc2VxdWVuY2U7Ci0KLQkvKiBjb21tYW5kIG9yIHJlc3BvbnNlL25vdGlmaWNhdGlvbiBkYXRhIGZvbGxvd3MgaW1tZWRpYXRlbHkgKi8KLQl1OCBkYXRhWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIKLSAqCi0gKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX1NDQU5fQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAotICoKLSAqIEVhY2ggZW50cnkgY29udGFpbnMgdHdvIHZhbHVlczoKLSAqIDEpICBEU1AgZ2FpbiAob3Igc29tZXRpbWVzIGNhbGxlZCBEU1AgYXR0ZW51YXRpb24pLiAgVGhpcyBpcyBhIGZpbmUtZ3JhaW5lZAotICogICAgIGxpbmVhciB2YWx1ZSB0aGF0IG11bHRpcGxpZXMgdGhlIG91dHB1dCBvZiB0aGUgZGlnaXRhbCBzaWduYWwgcHJvY2Vzc29yLAotICogICAgIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBhbmFsb2cgcmFkaW8uCi0gKiAyKSAgUmFkaW8gZ2Fpbi4gIFRoaXMgc2V0cyB0aGUgYW5hbG9nIGdhaW4gb2YgdGhlIHJhZGlvIFR4IHBhdGguCi0gKiAgICAgSXQgaXMgYSBjb2Fyc2VyIHNldHRpbmcsIGFuZCBiZWhhdmVzIGluIGEgbG9nYXJpdGhtaWMgKGRCKSBmYXNoaW9uLgotICoKLSAqIERyaXZlciBvYnRhaW5zIHZhbHVlcyBmcm9tIHN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHBvd2VyX2dhaW5fdGFibGVbXVtdLgotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB7Ci0JdTggdHhfZ2FpbjsJCS8qIGdhaW4gZm9yIGFuYWxvZyByYWRpbyAqLwotCXU4IGRzcF9hdHRlbjsJCS8qIGdhaW4gZm9yIERTUCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUKLSAqCi0gKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHsKLQl1OCByYXRlOwkJLyogcGxjcCAqLwotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKLQl1OCByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoMGEpCi0gKiBBbGl2ZSBhbmQgRXJyb3IgQ29tbWFuZHMgJiBSZXNwb25zZXM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIFVDT0RFX1ZBTElEX09LCWNwdV90b19sZTMyKDB4MSkKLSNkZWZpbmUgSU5JVElBTElaRV9TVUJUWVBFICAgICg5KQotCi0vKgotICogKCJJbml0aWFsaXplIikgUkVQTFlfQUxJVkUgPSAweDEgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKgotICogdUNvZGUgaXNzdWVzIHRoaXMgImluaXRpYWxpemUgYWxpdmUiIG5vdGlmaWNhdGlvbiBvbmNlIHRoZSBpbml0aWFsaXphdGlvbgotICogdUNvZGUgaW1hZ2UgaGFzIGNvbXBsZXRlZCBpdHMgd29yaywgYW5kIGlzIHJlYWR5IHRvIGxvYWQgdGhlIHJ1bnRpbWUgaW1hZ2UuCi0gKiBUaGlzIGlzIHRoZSAqZmlyc3QqICJhbGl2ZSIgbm90aWZpY2F0aW9uIHRoYXQgdGhlIGRyaXZlciB3aWxsIHJlY2VpdmUgYWZ0ZXIKLSAqIHJlYm9vdGluZyB1Q29kZTsgdGhlICJpbml0aWFsaXplIiBhbGl2ZSBpcyBpbmRpY2F0ZWQgYnkgc3VidHlwZSBmaWVsZCA9PSA5LgotICoKLSAqIFNlZSBjb21tZW50cyBkb2N1bWVudGluZyAiQlNNIiAoYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUpLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9pbml0X2FsaXZlX3Jlc3AgewotCXU4IHVjb2RlX21pbm9yOwotCXU4IHVjb2RlX21ham9yOwotCV9fbGUxNiByZXNlcnZlZDE7Ci0JdTggc3dfcmV2WzhdOwotCXU4IHZlcl90eXBlOwotCXU4IHZlcl9zdWJ0eXBlOwkJCS8qICI5IiBmb3IgaW5pdGlhbGl6ZSBhbGl2ZSAqLwotCV9fbGUxNiByZXNlcnZlZDI7Ci0JX19sZTMyIGxvZ19ldmVudF90YWJsZV9wdHI7Ci0JX19sZTMyIGVycm9yX2V2ZW50X3RhYmxlX3B0cjsKLQlfX2xlMzIgdGltZXN0YW1wOwotCV9fbGUzMiBpc192YWxpZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLS8qKgotICogUkVQTFlfQUxJVkUgPSAweDEgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKgotICogdUNvZGUgaXNzdWVzIHRoaXMgImFsaXZlIiBub3RpZmljYXRpb24gb25jZSB0aGUgcnVudGltZSBpbWFnZSBpcyByZWFkeQotICogdG8gcmVjZWl2ZSBjb21tYW5kcyBmcm9tIHRoZSBkcml2ZXIuICBUaGlzIGlzIHRoZSAqc2Vjb25kKiAiYWxpdmUiCi0gKiBub3RpZmljYXRpb24gdGhhdCB0aGUgZHJpdmVyIHdpbGwgcmVjZWl2ZSBhZnRlciByZWJvb3RpbmcgdUNvZGU7Ci0gKiB0aGlzICJhbGl2ZSIgaXMgaW5kaWNhdGVkIGJ5IHN1YnR5cGUgZmllbGQgIT0gOS4KLSAqCi0gKiBTZWUgY29tbWVudHMgZG9jdW1lbnRpbmcgIkJTTSIgKGJvb3RzdHJhcCBzdGF0ZSBtYWNoaW5lKS4KLSAqCi0gKiBUaGlzIHJlc3BvbnNlIGluY2x1ZGVzIHR3byBwb2ludGVycyB0byBzdHJ1Y3R1cmVzIHdpdGhpbiB0aGUgZGV2aWNlJ3MKLSAqIGRhdGEgU1JBTSAoYWNjZXNzIHZpYSBIQlVTX1RBUkdfTUVNXyogcmVncykgdGhhdCBhcmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmc6Ci0gKgotICogMSkgIGxvZ19ldmVudF90YWJsZV9wdHIgaW5kaWNhdGVzIGJhc2Ugb2YgdGhlIGV2ZW50IGxvZy4gIFRoaXMgdHJhY2VzCi0gKiAgICAgYSAyNTYtZW50cnkgaGlzdG9yeSBvZiB1Q29kZSBleGVjdXRpb24gd2l0aGluIGEgY2lyY3VsYXIgYnVmZmVyLgotICoKLSAqIDIpICBlcnJvcl9ldmVudF90YWJsZV9wdHIgaW5kaWNhdGVzIGJhc2Ugb2YgdGhlIGVycm9yIGxvZy4gIFRoaXMgY29udGFpbnMKLSAqICAgICBpbmZvcm1hdGlvbiBhYm91dCBhbnkgdUNvZGUgZXJyb3IgdGhhdCBvY2N1cnMuCi0gKgotICogVGhlIExpbnV4IGRyaXZlciBjYW4gcHJpbnQgYm90aCBsb2dzIHRvIHRoZSBzeXN0ZW0gbG9nIHdoZW4gYSB1Q29kZSBlcnJvcgotICogb2NjdXJzLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9hbGl2ZV9yZXNwIHsKLQl1OCB1Y29kZV9taW5vcjsKLQl1OCB1Y29kZV9tYWpvcjsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IHN3X3Jldls4XTsKLQl1OCB2ZXJfdHlwZTsKLQl1OCB2ZXJfc3VidHlwZTsJCQkvKiBub3QgIjkiIGZvciBydW50aW1lIGFsaXZlICovCi0JX19sZTE2IHJlc2VydmVkMjsKLQlfX2xlMzIgbG9nX2V2ZW50X3RhYmxlX3B0cjsJLyogU1JBTSBhZGRyZXNzIGZvciBldmVudCBsb2cgKi8KLQlfX2xlMzIgZXJyb3JfZXZlbnRfdGFibGVfcHRyOwkvKiBTUkFNIGFkZHJlc3MgZm9yIGVycm9yIGxvZyAqLwotCV9fbGUzMiB0aW1lc3RhbXA7Ci0JX19sZTMyIGlzX3ZhbGlkOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXVuaW9uIHRzZiB7Ci0JdTggYnl0ZVs4XTsKLQlfX2xlMTYgd29yZFs0XTsKLQlfX2xlMzIgZHdbMl07Ci19OwotCi0vKgotICogUkVQTFlfRVJST1IgPSAweDIgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2Vycm9yX3Jlc3AgewotCV9fbGUzMiBlcnJvcl90eXBlOwotCXU4IGNtZF9pZDsKLQl1OCByZXNlcnZlZDE7Ci0JX19sZTE2IGJhZF9jbWRfc2VxX251bTsKLQlfX2xlMTYgcmVzZXJ2ZWQyOwotCV9fbGUzMiBlcnJvcl9pbmZvOwotCXVuaW9uIHRzZiB0aW1lc3RhbXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEpCi0gKiBSWE9OIENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFJ4IGNvbmZpZyBkZWZpbmVzICYgc3RydWN0dXJlCi0gKi8KLS8qIHJ4X2NvbmZpZyBkZXZpY2UgdHlwZXMgICovCi1lbnVtIHsKLQlSWE9OX0RFVl9UWVBFX0FQID0gMSwKLQlSWE9OX0RFVl9UWVBFX0VTUyA9IDMsCi0JUlhPTl9ERVZfVFlQRV9JQlNTID0gNCwKLQlSWE9OX0RFVl9UWVBFX1NOSUZGRVIgPSA2LAotfTsKLQotLyogcnhfY29uZmlnIGZsYWdzICovCi0vKiBiYW5kICYgbW9kdWxhdGlvbiBzZWxlY3Rpb24gKi8KLSNkZWZpbmUgUlhPTl9GTEdfQkFORF8yNEdfTVNLICAgICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDApCi0jZGVmaW5lIFJYT05fRkxHX0NDS19NU0sgICAgICAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCAxKQotLyogYXV0byBkZXRlY3Rpb24gZW5hYmxlICovCi0jZGVmaW5lIFJYT05fRkxHX0FVVE9fREVURUNUX01TSyAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCAyKQotLyogVEdnIHByb3RlY3Rpb24gd2hlbiB0eCAqLwotI2RlZmluZSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0sgICAgICAgIGNwdV90b19sZTMyKDEgPDwgMykKLS8qIGNjayBzaG9ydCBzbG90ICYgcHJlYW1ibGUgKi8KLSNkZWZpbmUgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0sgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA0KQotI2RlZmluZSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0sgICAgIGNwdV90b19sZTMyKDEgPDwgNSkKLS8qIGFudGVubmEgc2VsZWN0aW9uICovCi0jZGVmaW5lIFJYT05fRkxHX0RJU19ESVZfTVNLICAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA3KQotI2RlZmluZSBSWE9OX0ZMR19BTlRfU0VMX01TSyAgICAgICAgICAgIGNwdV90b19sZTMyKDB4MGYwMCkKLSNkZWZpbmUgUlhPTl9GTEdfQU5UX0FfTVNLICAgICAgICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDgpCi0jZGVmaW5lIFJYT05fRkxHX0FOVF9CX01TSyAgICAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA5KQotLyogcmFkYXIgZGV0ZWN0aW9uIGVuYWJsZSAqLwotI2RlZmluZSBSWE9OX0ZMR19SQURBUl9ERVRFQ1RfTVNLICAgICAgIGNwdV90b19sZTMyKDEgPDwgMTIpCi0jZGVmaW5lIFJYT05fRkxHX1RHSl9OQVJST1dfQkFORF9NU0sgICAgY3B1X3RvX2xlMzIoMSA8PCAxMykKLS8qIHJ4IHJlc3BvbnNlIHRvIGhvc3Qgd2l0aCA4LWJ5dGUgVFNGCi0qIChhY2NvcmRpbmcgdG8gT05fQUlSIGRlYXNzZXJ0aW9uKSAqLwotI2RlZmluZSBSWE9OX0ZMR19UU0YySE9TVF9NU0sgICAgICAgICAgIGNwdV90b19sZTMyKDEgPDwgMTUpCi0KLS8qIHJ4X2NvbmZpZyBmaWx0ZXIgZmxhZ3MgKi8KLS8qIGFjY2VwdCBhbGwgZGF0YSBmcmFtZXMgKi8KLSNkZWZpbmUgUlhPTl9GSUxURVJfUFJPTUlTQ19NU0sgICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDApCi0vKiBwYXNzIGNvbnRyb2wgJiBtYW5hZ2VtZW50IHRvIGhvc3QgKi8KLSNkZWZpbmUgUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLICAgICAgICBjcHVfdG9fbGUzMigxIDw8IDEpCi0vKiBhY2NlcHQgbXVsdGktY2FzdCAqLwotI2RlZmluZSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSyAgICAgIGNwdV90b19sZTMyKDEgPDwgMikKLS8qIGRvbid0IGRlY3J5cHQgdW5pLWNhc3QgZnJhbWVzICovCi0jZGVmaW5lIFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSyAgICAgY3B1X3RvX2xlMzIoMSA8PCAzKQotLyogZG9uJ3QgZGVjcnlwdCBtdWx0aS1jYXN0IGZyYW1lcyAqLwotI2RlZmluZSBSWE9OX0ZJTFRFUl9ESVNfR1JQX0RFQ1JZUFRfTVNLIGNwdV90b19sZTMyKDEgPDwgNCkKLS8qIFNUQSBpcyBhc3NvY2lhdGVkICovCi0jZGVmaW5lIFJYT05fRklMVEVSX0FTU09DX01TSyAgICAgICAgICAgY3B1X3RvX2xlMzIoMSA8PCA1KQotLyogdHJhbnNmZXIgdG8gaG9zdCBub24gYnNzaWQgYmVhY29ucyBpbiBhc3NvY2lhdGVkIHN0YXRlICovCi0jZGVmaW5lIFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLICAgICAgY3B1X3RvX2xlMzIoMSA8PCA2KQotCi0vKioKLSAqIFJFUExZX1JYT04gPSAweDEwIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKgotICogUlhPTiB0dW5lcyB0aGUgcmFkaW8gdHVuZXIgdG8gYSBzZXJ2aWNlIGNoYW5uZWwsIGFuZCBzZXRzIHVwIGEgbnVtYmVyCi0gKiBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHVzZWQgcHJpbWFyaWx5IGZvciBSeCwgYnV0IGFsc28gZm9yIFR4IG9wZXJhdGlvbnMuCi0gKgotICogTk9URTogIFdoZW4gdHVuaW5nIHRvIGEgbmV3IGNoYW5uZWwsIGRyaXZlciBtdXN0IHNldCB0aGUKLSAqICAgICAgICBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgdG8gMC4gIFRoaXMgd2lsbCBjbGVhciBzdGF0aW9uLWRlcGVuZGVudAotICogICAgICAgIGluZm8gd2l0aGluIHRoZSBkZXZpY2UsIGluY2x1ZGluZyB0aGUgc3RhdGlvbiB0YWJsZXMsIHR4IHJldHJ5Ci0gKiAgICAgICAgcmF0ZSB0YWJsZXMsIGFuZCB0eHBvd2VyIHRhYmxlcy4gIERyaXZlciBtdXN0IGJ1aWxkIGEgbmV3IHN0YXRpb24KLSAqICAgICAgICB0YWJsZSBhbmQgdHhwb3dlciB0YWJsZSBiZWZvcmUgdHJhbnNtaXR0aW5nIGFueXRoaW5nIG9uIHRoZSBSWE9OCi0gKiAgICAgICAgY2hhbm5lbC4KLSAqCi0gKiBOT1RFOiAgQWxsIFJYT05zIHdpcGUgY2xlYW4gdGhlIGludGVybmFsIHR4cG93ZXIgdGFibGUuICBEcml2ZXIgbXVzdAotICogICAgICAgIGlzc3VlIGEgbmV3IFJFUExZX1RYX1BXUl9UQUJMRV9DTUQgYWZ0ZXIgZWFjaCBSRVBMWV9SWE9OICgweDEwKSwKLSAqICAgICAgICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgUlhPTl9GSUxURVJfQVNTT0NfTVNLIGlzIHNldC4KLSAqLwotc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgewotCXU4IG5vZGVfYWRkcls2XTsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IGJzc2lkX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMjsKLQl1OCB3bGFwX2Jzc2lkX2FkZHJbNl07Ci0JX19sZTE2IHJlc2VydmVkMzsKLQl1OCBkZXZfdHlwZTsKLQl1OCBhaXJfcHJvcGFnYXRpb247Ci0JX19sZTE2IHJlc2VydmVkNDsKLQl1OCBvZmRtX2Jhc2ljX3JhdGVzOwotCXU4IGNja19iYXNpY19yYXRlczsKLQlfX2xlMTYgYXNzb2NfaWQ7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JX19sZTE2IGNoYW5uZWw7Ci0JX19sZTE2IHJlc2VydmVkNTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfUlhPTl9BU1NPQyA9IDB4MTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfcnhvbl9hc3NvY19jbWQgewotCV9fbGUzMiBmbGFnczsKLQlfX2xlMzIgZmlsdGVyX2ZsYWdzOwotCXU4IG9mZG1fYmFzaWNfcmF0ZXM7Ci0JdTggY2NrX2Jhc2ljX3JhdGVzOwotCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfUlhPTl9USU1JTkcgPSAweDE0IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQgewotCXVuaW9uIHRzZiB0aW1lc3RhbXA7Ci0JX19sZTE2IGJlYWNvbl9pbnRlcnZhbDsKLQlfX2xlMTYgYXRpbV93aW5kb3c7Ci0JX19sZTMyIGJlYWNvbl9pbml0X3ZhbDsKLQlfX2xlMTYgbGlzdGVuX2ludGVydmFsOwotCV9fbGUxNiByZXNlcnZlZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfc3dpdGNoX2NtZCB7Ci0JdTggYmFuZDsKLQl1OCBleHBlY3RfYmVhY29uOwotCV9fbGUxNiBjaGFubmVsOwotCV9fbGUzMiByeG9uX2ZsYWdzOwotCV9fbGUzMiByeG9uX2ZpbHRlcl9mbGFnczsKLQlfX2xlMzIgc3dpdGNoX3RpbWU7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIENIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTiA9IDB4NzMgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9jc2Ffbm90aWZpY2F0aW9uIHsKLQlfX2xlMTYgYmFuZDsKLQlfX2xlMTYgY2hhbm5lbDsKLQlfX2xlMzIgc3RhdHVzOwkJLyogMCAtIE9LLCAxIC0gZmFpbCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICgyKQotICogUXVhbGl0eS1vZi1TZXJ2aWNlIChRT1MpIENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoqCi0gKiBzdHJ1Y3QgaXdsX2FjX3FvcyAtLSBRT1MgdGltaW5nIHBhcmFtcyBmb3IgUkVQTFlfUU9TX1BBUkFNCi0gKiBPbmUgZm9yIGVhY2ggb2YgNCBFRENBIGFjY2VzcyBjYXRlZ29yaWVzIGluIHN0cnVjdCBpd2xfcW9zcGFyYW1fY21kCi0gKgotICogQGN3X21pbjogQ29udGVudGlvbiB3aW5kb3csIHN0YXJ0IHZhbHVlIGluIG51bWJlcnMgb2Ygc2xvdHMuCi0gKiAgICAgICAgICBTaG91bGQgYmUgYSBwb3dlci1vZi0yLCBtaW51cyAxLiAgRGV2aWNlJ3MgZGVmYXVsdCBpcyAweDBmLgotICogQGN3X21heDogQ29udGVudGlvbiB3aW5kb3csIG1heCB2YWx1ZSBpbiBudW1iZXJzIG9mIHNsb3RzLgotICogICAgICAgICAgU2hvdWxkIGJlIGEgcG93ZXItb2YtMiwgbWludXMgMS4gIERldmljZSdzIGRlZmF1bHQgaXMgMHgzZi4KLSAqIEBhaWZzbjogIE51bWJlciBvZiBzbG90cyBpbiBBcmJpdHJhdGlvbiBJbnRlcmZyYW1lIFNwYWNlIChiZWZvcmUKLSAqICAgICAgICAgIHBlcmZvcm1pbmcgcmFuZG9tIGJhY2tvZmYgdGltaW5nIHByaW9yIHRvIFR4KS4gIERldmljZSBkZWZhdWx0IDEuCi0gKiBAZWRjYV90eG9wOiAgTGVuZ3RoIG9mIFR4IG9wcG9ydHVuaXR5LCBpbiB1U2Vjcy4gIERldmljZSBkZWZhdWx0IGlzIDAuCi0gKgotICogRGV2aWNlIHdpbGwgYXV0b21hdGljYWxseSBpbmNyZWFzZSBjb250ZW50aW9uIHdpbmRvdyBieSAoMipDVykgKyAxIGZvciBlYWNoCi0gKiB0cmFuc21pc3Npb24gcmV0cnkuICBEZXZpY2UgdXNlcyBjd19tYXggYXMgYSBiaXQgbWFzaywgQU5EZWQgd2l0aCBuZXcgQ1cKLSAqIHZhbHVlLCB0byBjYXAgdGhlIENXIHZhbHVlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9hY19xb3MgewotCV9fbGUxNiBjd19taW47Ci0JX19sZTE2IGN3X21heDsKLQl1OCBhaWZzbjsKLQl1OCByZXNlcnZlZDE7Ci0JX19sZTE2IGVkY2FfdHhvcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBRb1MgZmxhZ3MgZGVmaW5lcyAqLwotI2RlZmluZSBRT1NfUEFSQU1fRkxHX1VQREFURV9FRENBX01TSwljcHVfdG9fbGUzMigweDAxKQotI2RlZmluZSBRT1NfUEFSQU1fRkxHX1RHTl9NU0sJCWNwdV90b19sZTMyKDB4MDIpCi0jZGVmaW5lIFFPU19QQVJBTV9GTEdfVFhPUF9UWVBFX01TSwljcHVfdG9fbGUzMigweDEwKQotCi0vKiBOdW1iZXIgb2YgQWNjZXNzIENhdGVnb3JpZXMgKEFDKSAoRURDQSksIHF1ZXVlcyAwLi4zICovCi0jZGVmaW5lIEFDX05VTSAgICAgICAgICAgICAgICA0Ci0KLS8qCi0gKiBSRVBMWV9RT1NfUEFSQU0gPSAweDEzIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKgotICogVGhpcyBjb21tYW5kIHNldHMgdXAgdGltaW5ncyBmb3IgZWFjaCBvZiB0aGUgNCBwcmlvcml0aXplZCBFRENBIFR4IEZJRk9zCi0gKiAwOiBCYWNrZ3JvdW5kLCAxOiBCZXN0IEVmZm9ydCwgMjogVmlkZW8sIDM6IFZvaWNlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQgewotCV9fbGUzMiBxb3NfZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfYWNfcW9zIGFjW0FDX05VTV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDMpCi0gKiBBZGQvTW9kaWZ5IFN0YXRpb25zIENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qCi0gKiBNdWx0aSBzdGF0aW9uIHN1cHBvcnQKLSAqLwotCi0vKiBTcGVjaWFsLCBkZWRpY2F0ZWQgbG9jYXRpb25zIHdpdGhpbiBkZXZpY2UncyBzdGF0aW9uIHRhYmxlICovCi0jZGVmaW5lCUlXTF9BUF9JRAkJMAotI2RlZmluZSBJV0xfTVVMVElDQVNUX0lECTEKLSNkZWZpbmUJSVdMX1NUQV9JRAkJMgotI2RlZmluZQlJV0wzOTQ1X0JST0FEQ0FTVF9JRAkyNAotI2RlZmluZSBJV0wzOTQ1X1NUQVRJT05fQ09VTlQJMjUKLQotI2RlZmluZQlJV0xfU1RBVElPTl9DT1VOVAkzMiAJLyogTUFYKDM5NDUsNDk2NSkqLwotI2RlZmluZQlJV0xfSU5WQUxJRF9TVEFUSU9OIAkyNTUKLQotI2RlZmluZSBTVEFfRkxHX1RYX1JBVEVfTVNLCQljcHVfdG9fbGUzMigxIDw8IDIpOwotI2RlZmluZSBTVEFfRkxHX1BXUl9TQVZFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCA4KTsKLQotLyogVXNlIGluIG1vZGUgZmllbGQuICAxOiBtb2RpZnkgZXhpc3RpbmcgZW50cnksIDA6IGFkZCBuZXcgc3RhdGlvbiBlbnRyeSAqLwotI2RlZmluZSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLCQkweDAxCi0KLS8qIGtleSBmbGFncyBfX2xlMTYqLwotI2RlZmluZSBTVEFfS0VZX0ZMR19FTkNSWVBUX01TSwljcHVfdG9fbGUxNigweDAwMDcpCi0jZGVmaW5lIFNUQV9LRVlfRkxHX05PX0VOQwljcHVfdG9fbGUxNigweDAwMDApCi0jZGVmaW5lIFNUQV9LRVlfRkxHX1dFUAkJY3B1X3RvX2xlMTYoMHgwMDAxKQotI2RlZmluZSBTVEFfS0VZX0ZMR19DQ01QCWNwdV90b19sZTE2KDB4MDAwMikKLSNkZWZpbmUgU1RBX0tFWV9GTEdfVEtJUAljcHVfdG9fbGUxNigweDAwMDMpCi0KLSNkZWZpbmUgU1RBX0tFWV9GTEdfS0VZSURfUE9TCTgKLSNkZWZpbmUgU1RBX0tFWV9GTEdfSU5WQUxJRCAJY3B1X3RvX2xlMTYoMHgwODAwKQotLyogd2VwIGtleSBpcyBlaXRoZXIgZnJvbSBnbG9iYWwga2V5ICgwKSBvciBmcm9tIHN0YXRpb24gaW5mbyBhcnJheSAoMSkgKi8KLSNkZWZpbmUgU1RBX0tFWV9GTEdfV0VQX0tFWV9NQVBfTVNLICBjcHVfdG9fbGUxNigweDAwMDgpCi0KLS8qIHdlcCBrZXkgaW4gU1RBOiA1LWJ5dGVzICgwKSBvciAxMy1ieXRlcyAoMSkgKi8KLSNkZWZpbmUgU1RBX0tFWV9GTEdfS0VZX1NJWkVfTVNLICAgICBjcHVfdG9fbGUxNigweDEwMDApCi0jZGVmaW5lIFNUQV9LRVlfTVVMVElDQVNUX01TSyAgICAgICAgY3B1X3RvX2xlMTYoMHg0MDAwKQotCi0vKiBGbGFncyBpbmRpY2F0ZSB3aGV0aGVyIHRvIG1vZGlmeSB2cy4gZG9uJ3QgY2hhbmdlIHZhcmlvdXMgc3RhdGlvbiBwYXJhbXMgKi8KLSNkZWZpbmUJU1RBX01PRElGWV9LRVlfTUFTSwkJMHgwMQotI2RlZmluZQlTVEFfTU9ESUZZX1RJRF9ESVNBQkxFX1RYCTB4MDIKLSNkZWZpbmUJU1RBX01PRElGWV9UWF9SQVRFX01TSwkJMHgwNAotCi0vKgotICogQW50ZW5uYSBtYXNrczoKLSAqIGJpdDE0OjE1IDAxIEIgaW5hY3RpdmUsIEEgYWN0aXZlCi0gKiAgICAgICAgICAxMCBCIGFjdGl2ZSwgQSBpbmFjdGl2ZQotICogICAgICAgICAgMTEgQm90aCBhY3RpdmUKLSAqLwotI2RlZmluZSBSQVRFX01DU19BTlRfQV9QT1MJMTQKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0JfUE9TCTE1Ci0jZGVmaW5lIFJBVEVfTUNTX0FOVF9BX01TSwkweDQwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0JfTVNLCTB4ODAwMAotI2RlZmluZSBSQVRFX01DU19BTlRfQUJfTVNLCTB4YzAwMAotCi1zdHJ1Y3QgaXdsMzk0NV9rZXlpbmZvIHsKLQlfX2xlMTYga2V5X2ZsYWdzOwotCXU4IHRraXBfcnhfdHNjX2J5dGUyOwkvKiBUU0NbMl0gZm9yIGtleSBtaXggcGgxIGRldGVjdGlvbiAqLwotCXU4IHJlc2VydmVkMTsKLQlfX2xlMTYgdGtpcF9yeF90dGFrWzVdOwkvKiAxMC1ieXRlIHVuaWNhc3QgVEtJUCBUVEFLICovCi0JdTgga2V5X29mZnNldDsKLQl1OCByZXNlcnZlZDI7Ci0JdTgga2V5WzE2XTsJCS8qIDE2LWJ5dGUgdW5pY2FzdCBkZWNyeXB0aW9uIGtleSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IHN0YV9pZF9tb2RpZnkKLSAqIEBhZGRyW0VUSF9BTEVOXTogc3RhdGlvbidzIE1BQyBhZGRyZXNzCi0gKiBAc3RhX2lkOiBpbmRleCBvZiBzdGF0aW9uIGluIHVDb2RlJ3Mgc3RhdGlvbiB0YWJsZQotICogQG1vZGlmeV9tYXNrOiBTVEFfTU9ESUZZXyosIDE6IG1vZGlmeSwgMDogZG9uJ3QgY2hhbmdlCi0gKgotICogRHJpdmVyIHNlbGVjdHMgdW51c2VkIHRhYmxlIGluZGV4IHdoZW4gYWRkaW5nIG5ldyBzdGF0aW9uLAotICogb3IgdGhlIGluZGV4IHRvIGEgcHJlLWV4aXN0aW5nIHN0YXRpb24gZW50cnkgd2hlbiBtb2RpZnlpbmcgdGhhdCBzdGF0aW9uLgotICogU29tZSBpbmRleGVzIGhhdmUgc3BlY2lhbCBwdXJwb3NlcyAoSVdMX0FQX0lELCBpbmRleCAwLCBpcyBmb3IgQVApLgotICoKLSAqIG1vZGlmeV9tYXNrIGZsYWdzIHNlbGVjdCB3aGljaCBwYXJhbWV0ZXJzIHRvIG1vZGlmeSB2cy4gbGVhdmUgYWxvbmUuCi0gKi8KLXN0cnVjdCBzdGFfaWRfbW9kaWZ5IHsKLQl1OCBhZGRyW0VUSF9BTEVOXTsKLQlfX2xlMTYgcmVzZXJ2ZWQxOwotCXU4IHN0YV9pZDsKLQl1OCBtb2RpZnlfbWFzazsKLQlfX2xlMTYgcmVzZXJ2ZWQyOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBSRVBMWV9BRERfU1RBID0gMHgxOCAoY29tbWFuZCkKLSAqCi0gKiBUaGUgZGV2aWNlIGNvbnRhaW5zIGFuIGludGVybmFsIHRhYmxlIG9mIHBlci1zdGF0aW9uIGluZm9ybWF0aW9uLAotICogd2l0aCBpbmZvIG9uIHNlY3VyaXR5IGtleXMsIGFnZ3JlZ2F0aW9uIHBhcmFtZXRlcnMsIGFuZCBUeCByYXRlcyBmb3IKLSAqIGluaXRpYWwgVHggYXR0ZW1wdCBhbmQgYW55IHJldHJpZXMgKDQ5NjUgdXNlcyBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01ELAotICogMzk0NSB1c2VzIFJFUExZX1JBVEVfU0NBTEUgdG8gc2V0IHVwIHJhdGUgdGFibGVzKS4KLSAqCi0gKiBSRVBMWV9BRERfU1RBIHNldHMgdXAgdGhlIHRhYmxlIGVudHJ5IGZvciBvbmUgc3RhdGlvbiwgZWl0aGVyIGNyZWF0aW5nCi0gKiBhIG5ldyBlbnRyeSwgb3IgbW9kaWZ5aW5nIGEgcHJlLWV4aXN0aW5nIG9uZS4KLSAqCi0gKiBOT1RFOiAgUlhPTiBjb21tYW5kICh3aXRob3V0ICJhc3NvY2lhdGVkIiBiaXQgc2V0KSB3aXBlcyB0aGUgc3RhdGlvbiB0YWJsZQotICogICAgICAgIGNsZWFuLiAgTW92aW5nIGludG8gUkZfS0lMTCBzdGF0ZSBkb2VzIHRoaXMgYWxzby4gIERyaXZlciBtdXN0IHNldCB1cAotICogICAgICAgIG5ldyBzdGF0aW9uIHRhYmxlIGJlZm9yZSB0cmFuc21pdHRpbmcgYW55dGhpbmcgb24gdGhlIFJYT04gY2hhbm5lbAotICogICAgICAgIChleGNlcHQgYWN0aXZlIHNjYW5zIG9yIGFjdGl2ZSBtZWFzdXJlbWVudHM7IHRob3NlIGNvbW1hbmRzIGNhcnJ5Ci0gKiAgICAgICAgdGhlaXIgb3duIHR4cG93ZXIvcmF0ZSBzZXR1cCBkYXRhKS4KLSAqCi0gKiAgICAgICAgV2hlbiBnZXR0aW5nIHN0YXJ0ZWQgb24gYSBuZXcgY2hhbm5lbCwgZHJpdmVyIG11c3Qgc2V0IHVwIHRoZQotICogICAgICAgIElXTF9CUk9BRENBU1RfSUQgZW50cnkgKGxhc3QgZW50cnkgaW4gdGhlIHRhYmxlKS4gIEZvciBhIGNsaWVudAotICogICAgICAgIHN0YXRpb24gaW4gYSBCU1MsIG9uY2UgYW4gQVAgaXMgc2VsZWN0ZWQsIGRyaXZlciBzZXRzIHVwIHRoZSBBUCBTVEEKLSAqICAgICAgICBpbiB0aGUgSVdMX0FQX0lEIGVudHJ5ICgxc3QgZW50cnkgaW4gdGhlIHRhYmxlKS4gIEJST0FEQ0FTVCBhbmQgQVAKLSAqICAgICAgICBhcmUgYWxsIHRoYXQgYXJlIG5lZWRlZCBmb3IgYSBCU1MgY2xpZW50IHN0YXRpb24uICBJZiB0aGUgZGV2aWNlIGlzCi0gKiAgICAgICAgdXNlZCBhcyBBUCwgb3IgaW4gYW4gSUJTUyBuZXR3b3JrLCBkcml2ZXIgbXVzdCBzZXQgdXAgc3RhdGlvbiB0YWJsZQotICogICAgICAgIGVudHJpZXMgZm9yIGFsbCBTVEFzIGluIG5ldHdvcmssIHN0YXJ0aW5nIHdpdGggaW5kZXggSVdMX1NUQV9JRC4KLSAqLwotc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCB7Ci0JdTggbW9kZTsJCS8qIDE6IG1vZGlmeSBleGlzdGluZywgMDogYWRkIG5ldyBzdGF0aW9uICovCi0JdTggcmVzZXJ2ZWRbM107Ci0Jc3RydWN0IHN0YV9pZF9tb2RpZnkgc3RhOwotCXN0cnVjdCBpd2wzOTQ1X2tleWluZm8ga2V5OwotCV9fbGUzMiBzdGF0aW9uX2ZsYWdzOwkJLyogU1RBX0ZMR18qICovCi0JX19sZTMyIHN0YXRpb25fZmxhZ3NfbXNrOwkvKiBTVEFfRkxHXyogKi8KLQotCS8qIGJpdCBmaWVsZCB0byBkaXNhYmxlICgxKSBvciBlbmFibGUgKDApIFR4IGZvciBUcmFmZmljIElEIChUSUQpCi0JICogY29ycmVzcG9uZGluZyB0byBiaXQgKGUuZy4gYml0IDUgY29udHJvbHMgVElEIDUpLgotCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9USURfRElTQUJMRV9UWCB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQlfX2xlMTYgdGlkX2Rpc2FibGVfdHg7Ci0KLQlfX2xlMTYgcmF0ZV9uX2ZsYWdzOwotCi0JLyogVElEIGZvciB3aGljaCB0byBhZGQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JdTggYWRkX2ltbWVkaWF0ZV9iYV90aWQ7Ci0KLQkvKiBUSUQgZm9yIHdoaWNoIHRvIHJlbW92ZSBibG9jay1hY2sgc3VwcG9ydC4KLQkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfREVMQkFfVElEX01TSyB0byB1c2UgdGhpcyBmaWVsZC4gKi8KLQl1OCByZW1vdmVfaW1tZWRpYXRlX2JhX3RpZDsKLQotCS8qIFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBmb3IgYWRkZWQgYmxvY2stYWNrIHN1cHBvcnQuCi0JICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0FEREJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCi0JX19sZTE2IGFkZF9pbW1lZGlhdGVfYmFfc3NuOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgQUREX1NUQV9TVUNDRVNTX01TSwkJMHgxCi0jZGVmaW5lIEFERF9TVEFfTk9fUk9PTV9JTl9UQUJMRQkweDIKLSNkZWZpbmUgQUREX1NUQV9OT19CTE9DS19BQ0tfUkVTT1VSQ0UJMHg0Ci0vKgotICogUkVQTFlfQUREX1NUQSA9IDB4MTggKHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9hZGRfc3RhX3Jlc3AgewotCXU4IHN0YXR1czsJLyogQUREX1NUQV8qICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoNCkKLSAqIFJ4IFJlc3BvbnNlczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHsKLQl1OCBwaHlfY291bnQ7Ci0JdTggaWQ7Ci0JdTggcnNzaTsKLQl1OCBhZ2M7Ci0JX19sZTE2IHNpZ19hdmc7Ci0JX19sZTE2IG5vaXNlX2RpZmY7Ci0JdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgewotCV9fbGUxNiBjaGFubmVsOwotCV9fbGUxNiBwaHlfZmxhZ3M7Ci0JdTggcmVzZXJ2ZWQxOwotCXU4IHJhdGU7Ci0JX19sZTE2IGxlbjsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19OT19DUkMzMl9FUlJPUgljcHVfdG9fbGUzMigxIDw8IDApCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfTk9fUlhFX09WRVJGTE9XCWNwdV90b19sZTMyKDEgPDwgMSkKLQotI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX0JBTkRfMjRfTVNLCWNwdV90b19sZTE2KDEgPDwgMCkKLSNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19NT0RfQ0NLX01TSwkJY3B1X3RvX2xlMTYoMSA8PCAxKQotI2RlZmluZSBSWF9SRVNfUEhZX0ZMQUdTX1NIT1JUX1BSRUFNQkxFX01TSwljcHVfdG9fbGUxNigxIDw8IDIpCi0jZGVmaW5lIFJYX1JFU19QSFlfRkxBR1NfTkFSUk9XX0JBTkRfTVNLCWNwdV90b19sZTE2KDEgPDwgMykKLSNkZWZpbmUgUlhfUkVTX1BIWV9GTEFHU19BTlRFTk5BX01TSwkJY3B1X3RvX2xlMTYoMHhmMCkKLQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSwkoMHg3IDw8IDgpCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfTk9ORQkoMHgwIDw8IDgpCi0jZGVmaW5lIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfV0VQCSgweDEgPDwgOCkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9DQ01QCSgweDIgPDwgOCkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9US0lQCSgweDMgPDwgOCkKLQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfVFlQRV9NU0sJKDB4MyA8PCAxMSkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19OT1RfREVDUllQVAkoMHgwIDw8IDExKQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfT0sJKDB4MyA8PCAxMSkKLSNkZWZpbmUgUlhfUkVTX1NUQVRVU19CQURfSUNWX01JQwkoMHgxIDw8IDExKQotI2RlZmluZSBSWF9SRVNfU1RBVFVTX0JBRF9LRVlfVFRBSwkoMHgyIDw8IDExKQotCi1zdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgewotCV9fbGUzMiBzdGF0dXM7Ci0JX19sZTY0IHRpbWVzdGFtcDsKLQlfX2xlMzIgYmVhY29uX3RpbWVzdGFtcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfMzk0NV9SWCA9IDB4MWIgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKgotICogTk9URTogIERPIE5PVCBkZXJlZmVyZW5jZSBmcm9tIGNhc3RzIHRvIHRoaXMgc3RydWN0dXJlCi0gKiBJdCBpcyBwcm92aWRlZCBvbmx5IGZvciBjYWxjdWxhdGluZyBtaW5pbXVtIGRhdGEgc2V0IHNpemUuCi0gKiBUaGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIGhkciBhbmQgZW5kIGFyZSBkeW5hbWljIGJhc2VkIG9uCi0gKiBzdGF0cy5waHlfY291bnQKLSAqLwotc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgewotCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHN0YXRzOwotCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciBoZHI7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kIGVuZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoNSkKLSAqIFR4IENvbW1hbmRzICYgUmVzcG9uc2VzOgotICoKLSAqIERyaXZlciBtdXN0IHBsYWNlIGVhY2ggUkVQTFlfVFggY29tbWFuZCBpbnRvIG9uZSBvZiB0aGUgcHJpb3JpdGl6ZWQgVHgKLSAqIHF1ZXVlcyBpbiBob3N0IERSQU0sIHNoYXJlZCBiZXR3ZWVuIGRyaXZlciBhbmQgZGV2aWNlLiAgV2hlbiB0aGUgZGV2aWNlJ3MKLSAqIFR4IHNjaGVkdWxlciBhbmQgdUNvZGUgYXJlIHByZXBhcmluZyB0byB0cmFuc21pdCwgdGhlIGRldmljZSBwdWxscyB0aGUKLSAqIFR4IGNvbW1hbmQgb3ZlciB0aGUgUENJIGJ1cyB2aWEgb25lIG9mIHRoZSBkZXZpY2UncyBUeCBETUEgY2hhbm5lbHMsCi0gKiB0byBmaWxsIGFuIGludGVybmFsIEZJRk8gZnJvbSB3aGljaCBkYXRhIHdpbGwgYmUgdHJhbnNtaXR0ZWQuCi0gKgotICogdUNvZGUgaGFuZGxlcyBhbGwgdGltaW5nIGFuZCBwcm90b2NvbCByZWxhdGVkIHRvIGNvbnRyb2wgZnJhbWVzCi0gKiAoUlRTL0NUUy9BQ0spLCBiYXNlZCBvbiBmbGFncyBpbiB0aGUgVHggY29tbWFuZC4KLSAqCi0gKiB1Q29kZSBoYW5kbGVzIHJldHJ5aW5nIFR4IHdoZW4gYW4gQUNLIGlzIGV4cGVjdGVkIGJ1dCBub3QgcmVjZWl2ZWQuCi0gKiBUaGlzIGluY2x1ZGVzIHRyeWluZyBsb3dlciBkYXRhIHJhdGVzIHRoYW4gdGhlIG9uZSByZXF1ZXN0ZWQgaW4gdGhlIFR4Ci0gKiBjb21tYW5kLCBhcyBzZXQgdXAgYnkgdGhlIFJFUExZX1JBVEVfU0NBTEUgKGZvciAzOTQ1KSBvcgotICogUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCAoNDk2NSkuCi0gKgotICogRHJpdmVyIHNldHMgdXAgdHJhbnNtaXQgcG93ZXIgZm9yIHZhcmlvdXMgcmF0ZXMgdmlhIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQuCi0gKiBUaGlzIGNvbW1hbmQgbXVzdCBiZSBleGVjdXRlZCBhZnRlciBldmVyeSBSWE9OIGNvbW1hbmQsIGJlZm9yZSBUeCBjYW4gb2NjdXIuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFJFUExZX1RYIFR4IGZsYWdzIGZpZWxkICovCi0KLS8qIDE6IFVzZSBSZXF1ZXN0LVRvLVNlbmQgcHJvdG9jb2wgYmVmb3JlIHRoaXMgZnJhbWUuCi0gKiBNdXR1YWxseSBleGNsdXNpdmUgdnMuIFRYX0NNRF9GTEdfQ1RTX01TSy4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19SVFNfTVNLIGNwdV90b19sZTMyKDEgPDwgMSkKLQotLyogMTogVHJhbnNtaXQgQ2xlYXItVG8tU2VuZCB0byBzZWxmIGJlZm9yZSB0aGlzIGZyYW1lLgotICogRHJpdmVyIHNob3VsZCBzZXQgdGhpcyBmb3IgQVVUSC9ERUFVVEgvQVNTT0MtUkVRL1JFQVNTT0MgbWdtbnQgZnJhbWVzLgotICogTXV0dWFsbHkgZXhjbHVzaXZlIHZzLiBUWF9DTURfRkxHX1JUU19NU0suICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfQ1RTX01TSyBjcHVfdG9fbGUzMigxIDw8IDIpCi0KLS8qIDE6IEV4cGVjdCBBQ0sgZnJvbSByZWNlaXZpbmcgc3RhdGlvbgotICogMDogRG9uJ3QgZXhwZWN0IEFDSyAoTUFDIGhlYWRlcidzIGR1cmF0aW9uIGZpZWxkIHMvYiAwKQotICogU2V0IHRoaXMgZm9yIHVuaWNhc3QgZnJhbWVzLCBidXQgbm90IGJyb2FkY2FzdC9tdWx0aWNhc3QuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfQUNLX01TSyBjcHVfdG9fbGUzMigxIDw8IDMpCi0KLS8qIDE6IFVzZSByYXRlIHNjYWxlIHRhYmxlIChzZWUgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRCkuCi0gKiAgICBUeCBjb21tYW5kJ3MgaW5pdGlhbF9yYXRlX2luZGV4IGluZGljYXRlcyBmaXJzdCByYXRlIHRvIHRyeTsKLSAqICAgIHVDb2RlIHdhbGtzIHRocm91Z2ggdGFibGUgZm9yIGFkZGl0aW9uYWwgVHggYXR0ZW1wdHMuCi0gKiAwOiBVc2UgVHggcmF0ZS9NQ1MgZnJvbSBUeCBjb21tYW5kJ3MgcmF0ZV9uX2ZsYWdzIGZpZWxkLgotICogICAgVGhpcyByYXRlIHdpbGwgYmUgdXNlZCBmb3IgYWxsIFR4IGF0dGVtcHRzOyBpdCB3aWxsIG5vdCBiZSBzY2FsZWQuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfU1RBX1JBVEVfTVNLIGNwdV90b19sZTMyKDEgPDwgNCkKLQotLyogMTogRXhwZWN0IGltbWVkaWF0ZSBibG9jay1hY2suCi0gKiBTZXQgd2hlbiBUeGluZyBhIGJsb2NrLWFjayByZXF1ZXN0IGZyYW1lLiAgQWxzbyBzZXQgVFhfQ01EX0ZMR19BQ0tfTVNLLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX0lNTV9CQV9SU1BfTUFTSyAgY3B1X3RvX2xlMzIoMSA8PCA2KQotCi0vKiAxOiBGcmFtZSByZXF1aXJlcyBmdWxsIFR4LU9wIHByb3RlY3Rpb24uCi0gKiBTZXQgdGhpcyBpZiBlaXRoZXIgUlRTIG9yIENUUyBUeCBGbGFnIGdldHMgc2V0LiAqLwotI2RlZmluZSBUWF9DTURfRkxHX0ZVTExfVFhPUF9QUk9UX01TSyBjcHVfdG9fbGUzMigxIDw8IDcpCi0KLS8qIFR4IGFudGVubmEgc2VsZWN0aW9uIGZpZWxkOyB1c2VkIG9ubHkgZm9yIDM5NDUsIHJlc2VydmVkICgwKSBmb3IgNDk2NS4KLSAqIFNldCBmaWVsZCB0byAiMCIgdG8gYWxsb3cgMzk0NSB1Q29kZSB0byBzZWxlY3QgYW50ZW5uYSAobm9ybWFsIHVzYWdlKS4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19BTlRfU0VMX01TSyBjcHVfdG9fbGUzMigweGYwMCkKLSNkZWZpbmUgVFhfQ01EX0ZMR19BTlRfQV9NU0sgY3B1X3RvX2xlMzIoMSA8PCA4KQotI2RlZmluZSBUWF9DTURfRkxHX0FOVF9CX01TSyBjcHVfdG9fbGUzMigxIDw8IDkpCi0KLS8qIDE6IElnbm9yZSBCbHVldG9vdGggcHJpb3JpdHkgZm9yIHRoaXMgZnJhbWUuCi0gKiAwOiBEZWxheSBUeCB1bnRpbCBCbHVldG9vdGggZGV2aWNlIGlzIGRvbmUgKG5vcm1hbCB1c2FnZSkuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfQlRfRElTX01TSyBjcHVfdG9fbGUzMigxIDw8IDEyKQotCi0vKiAxOiB1Q29kZSBvdmVycmlkZXMgc2VxdWVuY2UgY29udHJvbCBmaWVsZCBpbiBNQUMgaGVhZGVyLgotICogMDogRHJpdmVyIHByb3ZpZGVzIHNlcXVlbmNlIGNvbnRyb2wgZmllbGQgaW4gTUFDIGhlYWRlci4KLSAqIFNldCB0aGlzIGZvciBtYW5hZ2VtZW50IGZyYW1lcywgbm9uLVFPUyBkYXRhIGZyYW1lcywgbm9uLXVuaWNhc3QgZnJhbWVzLAotICogYW5kIGFsc28gaW4gVHggY29tbWFuZCBlbWJlZGRlZCBpbiBSRVBMWV9TQ0FOX0NNRCBmb3IgYWN0aXZlIHNjYW5zLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX1NFUV9DVExfTVNLIGNwdV90b19sZTMyKDEgPDwgMTMpCi0KLS8qIDE6IFRoaXMgZnJhbWUgaXMgbm9uLWxhc3QgTVBEVTsgbW9yZSBmcmFnbWVudHMgYXJlIGNvbWluZy4KLSAqIDA6IExhc3QgZnJhZ21lbnQsIG9yIG5vdCB1c2luZyBmcmFnbWVudGF0aW9uLiAqLwotI2RlZmluZSBUWF9DTURfRkxHX01PUkVfRlJBR19NU0sgY3B1X3RvX2xlMzIoMSA8PCAxNCkKLQotLyogMTogdUNvZGUgY2FsY3VsYXRlcyBhbmQgaW5zZXJ0cyBUaW1lc3RhbXAgRnVuY3Rpb24gKFRTRikgaW4gb3V0Z29pbmcgZnJhbWUuCi0gKiAwOiBObyBUU0YgcmVxdWlyZWQgaW4gb3V0Z29pbmcgZnJhbWUuCi0gKiBTZXQgdGhpcyBmb3IgdHJhbnNtaXR0aW5nIGJlYWNvbnMgYW5kIHByb2JlIHJlc3BvbnNlcy4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19UU0ZfTVNLIGNwdV90b19sZTMyKDEgPDwgMTYpCi0KLS8qIDE6IERyaXZlciBpbnNlcnRlZCAyIGJ5dGVzIHBhZCBhZnRlciB0aGUgTUFDIGhlYWRlciwgZm9yIChyZXF1aXJlZCkgZHdvcmQKLSAqICAgIGFsaWdubWVudCBvZiBmcmFtZSdzIHBheWxvYWQgZGF0YSBmaWVsZC4KLSAqIDA6IE5vIHBhZAotICogU2V0IHRoaXMgZm9yIE1BQyBoZWFkZXJzIHdpdGggMjYgb3IgMzAgYnl0ZXMsIGkuZS4gdGhvc2Ugd2l0aCBRT1Mgb3IgQUREUjQKLSAqIGZpZWxkIChidXQgbm90IGJvdGgpLiAgRHJpdmVyIG11c3QgYWxpZ24gZnJhbWUgZGF0YSAoaS5lLiBkYXRhIGZvbGxvd2luZwotICogTUFDIGhlYWRlcikgdG8gRFdPUkQgYm91bmRhcnkuICovCi0jZGVmaW5lIFRYX0NNRF9GTEdfTUhfUEFEX01TSyBjcHVfdG9fbGUzMigxIDw8IDIwKQotCi0vKiBIQ0NBLUFQIC0gZGlzYWJsZSBkdXJhdGlvbiBvdmVyd3JpdGluZy4gKi8KLSNkZWZpbmUgVFhfQ01EX0ZMR19EVVJfTVNLIGNwdV90b19sZTMyKDEgPDwgMjUpCi0KLS8qCi0gKiBUWCBjb21tYW5kIHNlY3VyaXR5IGNvbnRyb2wKLSAqLwotI2RlZmluZSBUWF9DTURfU0VDX1dFUCAgCTB4MDEKLSNkZWZpbmUgVFhfQ01EX1NFQ19DQ00gIAkweDAyCi0jZGVmaW5lIFRYX0NNRF9TRUNfVEtJUAkJMHgwMwotI2RlZmluZSBUWF9DTURfU0VDX01TSwkJMHgwMwotI2RlZmluZSBUWF9DTURfU0VDX1NISUZUCTYKLSNkZWZpbmUgVFhfQ01EX1NFQ19LRVkxMjgJMHgwOAotCi0vKgotICogUkVQTFlfVFggPSAweDFjIChjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9jbWQgewotCS8qCi0JICogTVBEVSBieXRlIGNvdW50OgotCSAqIE1BQyBoZWFkZXIgKDI0LzI2LzMwLzMyIGJ5dGVzKSArIDIgYnl0ZXMgcGFkIGlmIDI2LzMwIGhlYWRlciBzaXplLAotCSAqICsgOCBieXRlIElWIGZvciBDQ00gb3IgVEtJUCAobm90IHVzZWQgZm9yIFdFUCkKLQkgKiArIERhdGEgcGF5bG9hZAotCSAqICsgOC1ieXRlIE1JQyAobm90IHVzZWQgZm9yIENDTS9XRVApCi0JICogTk9URTogIERvZXMgbm90IGluY2x1ZGUgVHggY29tbWFuZCBieXRlcywgcG9zdC1NQUMgcGFkIGJ5dGVzLAotCSAqICAgICAgICBNSUMgKENDTSkgOCBieXRlcywgSUNWIChXRVAvVEtJUC9DS0lQKSA0IGJ5dGVzLCBDUkMgNCBieXRlcy5pCi0JICogUmFuZ2U6IDE0LTIzNDIgYnl0ZXMuCi0JICovCi0JX19sZTE2IGxlbjsKLQotCS8qCi0JICogTVBEVSBvciBNU0RVIGJ5dGUgY291bnQgZm9yIG5leHQgZnJhbWUuCi0JICogVXNlZCBmb3IgZnJhZ21lbnRhdGlvbiBhbmQgYnVyc3RpbmcsIGJ1dCBub3QgMTFuIGFnZ3JlZ2F0aW9uLgotCSAqIFNhbWUgYXMgImxlbiIsIGJ1dCBmb3IgbmV4dCBmcmFtZS4gIFNldCB0byAwIGlmIG5vdCBhcHBsaWNhYmxlLgotCSAqLwotCV9fbGUxNiBuZXh0X2ZyYW1lX2xlbjsKLQotCV9fbGUzMiB0eF9mbGFnczsJLyogVFhfQ01EX0ZMR18qICovCi0KLQl1OCByYXRlOwotCi0JLyogSW5kZXggb2YgcmVjaXBpZW50IHN0YXRpb24gaW4gdUNvZGUncyBzdGF0aW9uIHRhYmxlICovCi0JdTggc3RhX2lkOwotCXU4IHRpZF90c3BlYzsKLQl1OCBzZWNfY3RsOwotCXU4IGtleVsxNl07Ci0JdW5pb24gewotCQl1OCBieXRlWzhdOwotCQlfX2xlMTYgd29yZFs0XTsKLQkJX19sZTMyIGR3WzJdOwotCX0gdGtpcF9taWM7Ci0JX19sZTMyIG5leHRfZnJhbWVfaW5mbzsKLQl1bmlvbiB7Ci0JCV9fbGUzMiBsaWZlX3RpbWU7Ci0JCV9fbGUzMiBhdHRlbXB0OwotCX0gc3RvcF90aW1lOwotCXU4IHN1cHBfcmF0ZXNbMl07Ci0JdTggcnRzX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTAgKi8KLQl1OCBkYXRhX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTEgKi8KLQl1bmlvbiB7Ci0JCV9fbGUxNiBwbV9mcmFtZV90aW1lb3V0OwotCQlfX2xlMTYgYXR0ZW1wdF9kdXJhdGlvbjsKLQl9IHRpbWVvdXQ7Ci0KLQkvKgotCSAqIER1cmF0aW9uIG9mIEVEQ0EgYnVyc3QgVHggT3Bwb3J0dW5pdHksIGluIDMyLXVzZWMgdW5pdHMuCi0JICogU2V0IHRoaXMgaWYgdHhvcCB0aW1lIGlzIG5vdCBzcGVjaWZpZWQgYnkgSENDQSBwcm90b2NvbCAoZS5nLiBieSBBUCkuCi0JICovCi0JX19sZTE2IGRyaXZlcl90eG9wOwotCi0JLyoKLQkgKiBNQUMgaGVhZGVyIGdvZXMgaGVyZSwgZm9sbG93ZWQgYnkgMiBieXRlcyBwYWRkaW5nIGlmIE1BQyBoZWFkZXIKLQkgKiBsZW5ndGggaXMgMjYgb3IgMzAgYnl0ZXMsIGZvbGxvd2VkIGJ5IHBheWxvYWQgZGF0YQotCSAqLwotCXU4IHBheWxvYWRbMF07Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIFRYIGNvbW1hbmQgcmVzcG9uc2UgaXMgc2VudCBhZnRlciAqYWxsKiB0cmFuc21pc3Npb24gYXR0ZW1wdHMuCi0gKgotICogTk9URVM6Ci0gKgotICogVFhfU1RBVFVTX0ZBSUxfTkVYVF9GUkFHCi0gKgotICogSWYgdGhlIGZyYWdtZW50IGZsYWcgaW4gdGhlIE1BQyBoZWFkZXIgZm9yIHRoZSBmcmFtZSBiZWluZyB0cmFuc21pdHRlZAotICogaXMgc2V0IGFuZCB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgdGltZSB0byB0cmFuc21pdCB0aGUgbmV4dCBmcmFtZSwgdGhlCi0gKiBUWCBzdGF0dXMgd2lsbCBiZSByZXR1cm5lZCB3aXRoICdUWF9TVEFUVVNfRkFJTF9ORVhUX0ZSQUcnLgotICoKLSAqIFRYX1NUQVRVU19GSUZPX1VOREVSUlVOCi0gKgotICogSW5kaWNhdGVzIHRoZSBob3N0IGRpZCBub3QgcHJvdmlkZSBieXRlcyB0byB0aGUgRklGTyBmYXN0IGVub3VnaCB3aGlsZQotICogYSBUWCB3YXMgaW4gcHJvZ3Jlc3MuCi0gKgotICogVFhfU1RBVFVTX0ZBSUxfTUdNTlRfQUJPUlQKLSAqCi0gKiBUaGlzIHN0YXR1cyBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZSBBQk9SVCBPTiBNR01UIFJYIHBhcmFtZXRlciB3YXMKLSAqIHNldCB0byB0cnVlIHdpdGggdGhlIFRYIGNvbW1hbmQuCi0gKgotICogSWYgdGhlIE1TQiBvZiB0aGUgc3RhdHVzIHBhcmFtZXRlciBpcyBzZXQgdGhlbiBhbiBhYm9ydCBzZXF1ZW5jZSBpcwotICogcmVxdWlyZWQuICBUaGlzIHNlcXVlbmNlIGNvbnNpc3RzIG9mIHRoZSBob3N0IGFjdGl2YXRpbmcgdGhlIFRYIEFib3J0Ci0gKiBjb250cm9sIGxpbmUsIGFuZCB0aGVuIHdhaXRpbmcgZm9yIHRoZSBUWCBBYm9ydCBjb21tYW5kIHJlc3BvbnNlLiAgVGhpcwotICogaW5kaWNhdGVzIHRoYXQgYSB0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBpbiBhIHRyYW5zbWl0IHN0YXRlLCBhbmQgdGhhdCB0aGUKLSAqIGNvbW1hbmQgRklGTyBoYXMgYmVlbiBjbGVhcmVkLiAgVGhlIGhvc3QgbXVzdCB0aGVuIGRlYWN0aXZhdGUgdGhlIFRYIEFib3J0Ci0gKiBjb250cm9sIGxpbmUuICBSZWNlaXZpbmcgaXMgc3RpbGwgYWxsb3dlZCBpbiB0aGlzIGNhc2UuCi0gKi8KLWVudW0gewotCVRYX1NUQVRVU19TVUNDRVNTID0gMHgwMSwKLQlUWF9TVEFUVVNfRElSRUNUX0RPTkUgPSAweDAyLAotCVRYX1NUQVRVU19GQUlMX1NIT1JUX0xJTUlUID0gMHg4MiwKLQlUWF9TVEFUVVNfRkFJTF9MT05HX0xJTUlUID0gMHg4MywKLQlUWF9TVEFUVVNfRkFJTF9GSUZPX1VOREVSUlVOID0gMHg4NCwKLQlUWF9TVEFUVVNfRkFJTF9NR01OVF9BQk9SVCA9IDB4ODUsCi0JVFhfU1RBVFVTX0ZBSUxfTkVYVF9GUkFHID0gMHg4NiwKLQlUWF9TVEFUVVNfRkFJTF9MSUZFX0VYUElSRSA9IDB4ODcsCi0JVFhfU1RBVFVTX0ZBSUxfREVTVF9QUyA9IDB4ODgsCi0JVFhfU1RBVFVTX0ZBSUxfQUJPUlRFRCA9IDB4ODksCi0JVFhfU1RBVFVTX0ZBSUxfQlRfUkVUUlkgPSAweDhhLAotCVRYX1NUQVRVU19GQUlMX1NUQV9JTlZBTElEID0gMHg4YiwKLQlUWF9TVEFUVVNfRkFJTF9GUkFHX0RST1BQRUQgPSAweDhjLAotCVRYX1NUQVRVU19GQUlMX1RJRF9ESVNBQkxFID0gMHg4ZCwKLQlUWF9TVEFUVVNfRkFJTF9GUkFNRV9GTFVTSEVEID0gMHg4ZSwKLQlUWF9TVEFUVVNfRkFJTF9JTlNVRkZJQ0lFTlRfQ0ZfUE9MTCA9IDB4OGYsCi0JVFhfU1RBVFVTX0ZBSUxfVFhfTE9DS0VEID0gMHg5MCwKLQlUWF9TVEFUVVNfRkFJTF9OT19CRUFDT05fT05fUkFEQVIgPSAweDkxLAotfTsKLQotI2RlZmluZQlUWF9QQUNLRVRfTU9ERV9SRUdVTEFSCQkweDAwMDAKLSNkZWZpbmUJVFhfUEFDS0VUX01PREVfQlVSU1RfU0VRCTB4MDEwMAotI2RlZmluZQlUWF9QQUNLRVRfTU9ERV9CVVJTVF9GSVJTVAkweDAyMDAKLQotZW51bSB7Ci0JVFhfUE9XRVJfUEFfTk9UX0FDVElWRSA9IDB4MCwKLX07Ci0KLWVudW0gewotCVRYX1NUQVRVU19NU0sgPSAweDAwMDAwMGZmLAkvKiBiaXRzIDA6NyAqLwotCVRYX1NUQVRVU19ERUxBWV9NU0sgPSAweDAwMDAwMDQwLAotCVRYX1NUQVRVU19BQk9SVF9NU0sgPSAweDAwMDAwMDgwLAotCVRYX1BBQ0tFVF9NT0RFX01TSyA9IDB4MDAwMGZmMDAsCS8qIGJpdHMgODoxNSAqLwotCVRYX0ZJRk9fTlVNQkVSX01TSyA9IDB4MDAwNzAwMDAsCS8qIGJpdHMgMTY6MTggKi8KLQlUWF9SRVNFUlZFRCA9IDB4MDA3ODAwMDAsCS8qIGJpdHMgMTk6MjIgKi8KLQlUWF9QT1dFUl9QQV9ERVRFQ1RfTVNLID0gMHg3ZjgwMDAwMCwJLyogYml0cyAyMzozMCAqLwotCVRYX0FCT1JUX1JFUVVJUkVEX01TSyA9IDB4ODAwMDAwMDAsCS8qIGJpdHMgMzE6MzEgKi8KLX07Ci0KLS8qCi0gKiBSRVBMWV9UWCA9IDB4MWMgKHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHsKLQl1OCBmYWlsdXJlX3J0czsKLQl1OCBmYWlsdXJlX2ZyYW1lOwotCXU4IGJ0X2tpbGxfY291bnQ7Ci0JdTggcmF0ZTsKLQlfX2xlMzIgd2lyZWxlc3NfbWVkaWFfdGltZTsKLQlfX2xlMzIgc3RhdHVzOwkJLyogVFggc3RhdHVzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQgPSAweDk3IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3R4cG93ZXJ0YWJsZV9jbWQgewotCXU4IGJhbmQ7CQkvKiAwOiA1IEdIeiwgMTogMi40IEdIeiAqLwotCXU4IHJlc2VydmVkOwotCV9fbGUxNiBjaGFubmVsOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHBvd2VyW0lXTF9NQVhfUkFURVNdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGluZ19pbmZvIHsKLQlfX2xlMTYgcmF0ZV9uX2ZsYWdzOwotCXU4IHRyeV9jbnQ7Ci0JdTggbmV4dF9yYXRlX2luZGV4OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2NtZCAtIFJhdGUgU2NhbGluZyBDb21tYW5kICYgUmVzcG9uc2UKLSAqCi0gKiBSRVBMWV9SQVRFX1NDQUxFID0gMHg0NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIE5PVEU6IFRoZSB0YWJsZSBvZiByYXRlcyBwYXNzZWQgdG8gdGhlIHVDb2RlIHZpYSB0aGUKLSAqIFJBVEVfU0NBTEUgY29tbWFuZCBzZXRzIHVwIHRoZSBjb3JyZXNwb25kaW5nIG9yZGVyIG9mCi0gKiByYXRlcyB1c2VkIGZvciBhbGwgcmVsYXRlZCBjb21tYW5kcywgaW5jbHVkaW5nIHJhdGUKLSAqIG1hc2tzLCBldGMuCi0gKgotICogRm9yIGV4YW1wbGUsIGlmIHlvdSBzZXQgOU1CIChQTENQIDB4MGYpIGFzIHRoZSBmaXJzdAotICogcmF0ZSBpbiB0aGUgcmF0ZSB0YWJsZSwgdGhlIGJpdCBtYXNrIGZvciB0aGF0IHJhdGUKLSAqIHdoZW4gcGFzc2VkIHRocm91Z2ggb2ZkbV9iYXNpY19yYXRlcyBvbiB0aGUgUkVQTFlfUlhPTgotICogY29tbWFuZCB3b3VsZCBiZSBiaXQgMCAoMSA8PCAwKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHsKLQl1OCB0YWJsZV9pZDsKLQl1OCByZXNlcnZlZFszXTsKLQlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB0YWJsZVtJV0xfTUFYX1JBVEVTXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogUkVQTFlfQlRfQ09ORklHID0gMHg5YiAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIDM5NDUgYW5kIDQ5NjUgc3VwcG9ydCBoYXJkd2FyZSBoYW5kc2hha2Ugd2l0aCBCbHVldG9vdGggZGV2aWNlIG9uCi0gKiBzYW1lIHBsYXRmb3JtLiAgQmx1ZXRvb3RoIGRldmljZSBhbGVydHMgd2lyZWxlc3MgZGV2aWNlIHdoZW4gaXQgd2lsbCBUeDsKLSAqIHdpcmVsZXNzIGRldmljZSBjYW4gZGVsYXkgb3Iga2lsbCBpdHMgb3duIFR4IHRvIGFjY29tbW9kYXRlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9idF9jbWQgewotCXU4IGZsYWdzOwotCXU4IGxlYWRfdGltZTsKLQl1OCBtYXhfa2lsbDsKLQl1OCByZXNlcnZlZDsKLQlfX2xlMzIga2lsbF9hY2tfbWFzazsKLQlfX2xlMzIga2lsbF9jdHNfbWFzazsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoNikKLSAqIFNwZWN0cnVtIE1hbmFnZW1lbnQgKDgwMi4xMWgpIENvbW1hbmRzLCBSZXNwb25zZXMsIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogU3BlY3RydW0gTWFuYWdlbWVudAotICovCi0jZGVmaW5lIE1FQVNVUkVNRU5UX0ZJTFRFUl9GTEFHIChSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyAgICAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0sgICAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSyAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0sgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9ESVNfR1JQX0RFQ1JZUFRfTVNLIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgICAgICAgICAgIHwgXAotCQkJCSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSykKLQotc3RydWN0IGl3bDM5NDVfbWVhc3VyZV9jaGFubmVsIHsKLQlfX2xlMzIgZHVyYXRpb247CS8qIG1lYXN1cmVtZW50IGR1cmF0aW9uIGluIGV4dGVuZGVkIGJlYWNvbgotCQkJCSAqIGZvcm1hdCAqLwotCXU4IGNoYW5uZWw7CQkvKiBjaGFubmVsIHRvIG1lYXN1cmUgKi8KLQl1OCB0eXBlOwkJLyogc2VlIGVudW0gaXdsMzk0NV9tZWFzdXJlX3R5cGUgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1NQRUNUUlVNX01FQVNVUkVNRU5UX0NNRCA9IDB4NzQgKGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX2NtZCB7Ci0JX19sZTE2IGxlbjsJCS8qIG51bWJlciBvZiBieXRlcyBzdGFydGluZyBmcm9tIHRva2VuICovCi0JdTggdG9rZW47CQkvKiB0b2tlbiBpZCAqLwotCXU4IGlkOwkJCS8qIG1lYXN1cmVtZW50IGlkIC0tIDAgb3IgMSAqLwotCXU4IG9yaWdpbjsJCS8qIDAgPSBUR2gsIDEgPSBvdGhlciwgMiA9IFRHayAqLwotCXU4IHBlcmlvZGljOwkJLyogMSA9IHBlcmlvZGljICovCi0JX19sZTE2IHBhdGhfbG9zc190aW1lb3V0OwotCV9fbGUzMiBzdGFydF90aW1lOwkvKiBzdGFydCB0aW1lIGluIGV4dGVuZGVkIGJlYWNvbiBmb3JtYXQgKi8KLQlfX2xlMzIgcmVzZXJ2ZWQyOwotCV9fbGUzMiBmbGFnczsJCS8qIHJ4b24gZmxhZ3MgKi8KLQlfX2xlMzIgZmlsdGVyX2ZsYWdzOwkvKiByeG9uIGZpbHRlciBmbGFncyAqLwotCV9fbGUxNiBjaGFubmVsX2NvdW50OwkvKiBtaW5pbXVtIDEsIG1heGltdW0gMTAgKi8KLQlfX2xlMTYgcmVzZXJ2ZWQzOwotCXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVfY2hhbm5lbCBjaGFubmVsc1sxMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1NQRUNUUlVNX01FQVNVUkVNRU5UX0NNRCA9IDB4NzQgKHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zcGVjdHJ1bV9yZXNwIHsKLQl1OCB0b2tlbjsKLQl1OCBpZDsJCQkvKiBpZCBvZiB0aGUgcHJpb3IgY29tbWFuZCByZXBsYWNlZCwgb3IgMHhmZiAqLwotCV9fbGUxNiBzdGF0dXM7CQkvKiAwIC0gY29tbWFuZCB3aWxsIGJlIGhhbmRsZWQKLQkJCQkgKiAxIC0gY2Fubm90IGhhbmRsZSAoY29uZmxpY3RzIHdpdGggYW5vdGhlcgotCQkJCSAqICAgICBtZWFzdXJlbWVudCkgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIGl3bDM5NDVfbWVhc3VyZW1lbnRfc3RhdGUgewotCUlXTF9NRUFTVVJFTUVOVF9TVEFSVCA9IDAsCi0JSVdMX01FQVNVUkVNRU5UX1NUT1AgPSAxLAotfTsKLQotZW51bSBpd2wzOTQ1X21lYXN1cmVtZW50X3N0YXR1cyB7Ci0JSVdMX01FQVNVUkVNRU5UX09LID0gMCwKLQlJV0xfTUVBU1VSRU1FTlRfQ09OQ1VSUkVOVCA9IDEsCi0JSVdMX01FQVNVUkVNRU5UX0NTQV9DT05GTElDVCA9IDIsCi0JSVdMX01FQVNVUkVNRU5UX1RHSF9DT05GTElDVCA9IDMsCi0JLyogNC01IHJlc2VydmVkICovCi0JSVdMX01FQVNVUkVNRU5UX1NUT1BQRUQgPSA2LAotCUlXTF9NRUFTVVJFTUVOVF9USU1FT1VUID0gNywKLQlJV0xfTUVBU1VSRU1FTlRfUEVSSU9ESUNfRkFJTEVEID0gOCwKLX07Ci0KLSNkZWZpbmUgTlVNX0VMRU1FTlRTX0lOX0hJU1RPR1JBTSA4Ci0KLXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVtZW50X2hpc3RvZ3JhbSB7Ci0JX19sZTMyIG9mZG1bTlVNX0VMRU1FTlRTX0lOX0hJU1RPR1JBTV07CS8qIGluIDAuOHVzZWMgY291bnRzICovCi0JX19sZTMyIGNja1tOVU1fRUxFTUVOVFNfSU5fSElTVE9HUkFNXTsJLyogaW4gMXVzZWMgY291bnRzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogY2xlYXIgY2hhbm5lbCBhdmFpbGFiaWxpdHkgY291bnRlcnMgKi8KLXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVtZW50X2NjYV9jb3VudGVycyB7Ci0JX19sZTMyIG9mZG07Ci0JX19sZTMyIGNjazsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIGl3bDM5NDVfbWVhc3VyZV90eXBlIHsKLQlJV0xfTUVBU1VSRV9CQVNJQyA9ICgxIDw8IDApLAotCUlXTF9NRUFTVVJFX0NIQU5ORUxfTE9BRCA9ICgxIDw8IDEpLAotCUlXTF9NRUFTVVJFX0hJU1RPR1JBTV9SUEkgPSAoMSA8PCAyKSwKLQlJV0xfTUVBU1VSRV9ISVNUT0dSQU1fTk9JU0UgPSAoMSA8PCAzKSwKLQlJV0xfTUVBU1VSRV9GUkFNRSA9ICgxIDw8IDQpLAotCS8qIGJpdHMgNTo2IGFyZSByZXNlcnZlZCAqLwotCUlXTF9NRUFTVVJFX0lETEUgPSAoMSA8PCA3KSwKLX07Ci0KLS8qCi0gKiBTUEVDVFJVTV9NRUFTVVJFX05PVElGSUNBVElPTiA9IDB4NzUgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zcGVjdHJ1bV9ub3RpZmljYXRpb24gewotCXU4IGlkOwkJCS8qIG1lYXN1cmVtZW50IGlkIC0tIDAgb3IgMSAqLwotCXU4IHRva2VuOwotCXU4IGNoYW5uZWxfaW5kZXg7CS8qIGluZGV4IGluIG1lYXN1cmVtZW50IGNoYW5uZWwgbGlzdCAqLwotCXU4IHN0YXRlOwkJLyogMCAtIHN0YXJ0LCAxIC0gc3RvcCAqLwotCV9fbGUzMiBzdGFydF90aW1lOwkvKiBsb3dlciAzMi1iaXRzIG9mIFRTRiAqLwotCXU4IGJhbmQ7CQkvKiAwIC0gNS4yR0h6LCAxIC0gMi40R0h6ICovCi0JdTggY2hhbm5lbDsKLQl1OCB0eXBlOwkJLyogc2VlIGVudW0gaXdsMzk0NV9tZWFzdXJlbWVudF90eXBlICovCi0JdTggcmVzZXJ2ZWQxOwotCS8qIE5PVEU6ICBjY2Ffb2ZkbSwgY2NhX2NjaywgYmFzaWNfdHlwZSwgYW5kIGhpc3RvZ3JhbSBhcmUgb25seSBvbmx5Ci0JICogdmFsaWQgaWYgYXBwbGljYWJsZSBmb3IgbWVhc3VyZW1lbnQgdHlwZSByZXF1ZXN0ZWQuICovCi0JX19sZTMyIGNjYV9vZmRtOwkvKiBjY2EgZnJhY3Rpb24gdGltZSBpbiA0ME1oeiBjbG9jayBwZXJpb2RzICovCi0JX19sZTMyIGNjYV9jY2s7CQkvKiBjY2EgZnJhY3Rpb24gdGltZSBpbiA0NE1oeiBjbG9jayBwZXJpb2RzICovCi0JX19sZTMyIGNjYV90aW1lOwkvKiBjaGFubmVsIGxvYWQgdGltZSBpbiB1c2VjcyAqLwotCXU4IGJhc2ljX3R5cGU7CQkvKiAwIC0gYnNzLCAxIC0gb2ZkbSBwcmVhbWJsZSwgMiAtCi0JCQkJICogdW5pZGVudGlmaWVkICovCi0JdTggcmVzZXJ2ZWQyWzNdOwotCXN0cnVjdCBpd2wzOTQ1X21lYXN1cmVtZW50X2hpc3RvZ3JhbSBoaXN0b2dyYW07Ci0JX19sZTMyIHN0b3BfdGltZTsJLyogbG93ZXIgMzItYml0cyBvZiBUU0YgKi8KLQlfX2xlMzIgc3RhdHVzOwkJLyogc2VlIGl3bDM5NDVfbWVhc3VyZW1lbnRfc3RhdHVzICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDcpCi0gKiBQb3dlciBNYW5hZ2VtZW50IENvbW1hbmRzLCBSZXNwb25zZXMsIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIC0gUG93ZXIgVGFibGUgQ29tbWFuZAotICogQGZsYWdzOiBTZWUgYmVsb3c6Ci0gKgotICogUE9XRVJfVEFCTEVfQ01EID0gMHg3NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICoKLSAqIFBNIGFsbG93OgotICogICBiaXQgMCAtICcwJyBEcml2ZXIgbm90IGFsbG93IHBvd2VyIG1hbmFnZW1lbnQKLSAqICAgICAgICAgICAnMScgRHJpdmVyIGFsbG93IFBNICh1c2UgcmVzdCBvZiBwYXJhbWV0ZXJzKQotICogdUNvZGUgc2VuZCBzbGVlcCBub3RpZmljYXRpb25zOgotICogICBiaXQgMSAtICcwJyBEb24ndCBzZW5kIHNsZWVwIG5vdGlmaWNhdGlvbgotICogICAgICAgICAgICcxJyBzZW5kIHNsZWVwIG5vdGlmaWNhdGlvbiAoU0VORF9QTV9OT1RJRklDQVRJT04pCi0gKiBTbGVlcCBvdmVyIERUSU0KLSAqICAgYml0IDIgLSAnMCcgUE0gaGF2ZSB0byB3YWxrIHVwIGV2ZXJ5IERUSU0KLSAqICAgICAgICAgICAnMScgUE0gY291bGQgc2xlZXAgb3ZlciBEVElNIHRpbGwgbGlzdGVuIEludGVydmFsLgotICogUENJIHBvd2VyIG1hbmFnZWQKLSAqICAgYml0IDMgLSAnMCcgKFBDSV9MSU5LX0NUUkwgJiAweDEpCi0gKiAgICAgICAgICAgJzEnICEoUENJX0xJTktfQ1RSTCAmIDB4MSkKLSAqIEZvcmNlIHNsZWVwIE1vZGVzCi0gKiAgIGJpdCAzMS8zMC0gJzAwJyB1c2UgYm90aCBtYWMveHRhbCBzbGVlcHMKLSAqICAgICAgICAgICAgICAnMDEnIGZvcmNlIE1hYyBzbGVlcAotICogICAgICAgICAgICAgICcxMCcgZm9yY2UgeHRhbCBzbGVlcAotICogICAgICAgICAgICAgICcxMScgSWxsZWdhbCBzZXQKLSAqCi0gKiBOT1RFOiBpZiBzbGVlcF9pbnRlcnZhbFtTTEVFUF9JTlRSVkxfVEFCTEVfU0laRS0xXSA+IERUSU0gcGVyaW9kIHRoZW4KLSAqIHVjb2RlIGFzc3VtZSBzbGVlcCBvdmVyIERUSU0gaXMgYWxsb3dlZCBhbmQgd2UgZG9uJ3QgbmVlZCB0byB3YWtldXAKLSAqIGZvciBldmVyeSBEVElNLgotICovCi0jZGVmaW5lIElXTF9QT1dFUl9WRUNfU0laRSA1Ci0KLSNkZWZpbmUgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sJY3B1X3RvX2xlMzIoMSA8PCAwKQotI2RlZmluZSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSwkJY3B1X3RvX2xlMzIoMSA8PCAyKQotI2RlZmluZSBJV0xfUE9XRVJfUENJX1BNX01TSwkJCWNwdV90b19sZTMyKDEgPDwgMykKLXN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIHsKLQlfX2xlMzIgZmxhZ3M7Ci0JX19sZTMyIHJ4X2RhdGFfdGltZW91dDsKLQlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OwotCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotLyoKLSAqIFBNX1NMRUVQX05PVElGSUNBVElPTiA9IDB4N0EgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICogMzk0NSBhbmQgNDk2NSBpZGVudGljYWwuCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NsZWVwX25vdGlmaWNhdGlvbiB7Ci0JdTggcG1fc2xlZXBfbW9kZTsKLQl1OCBwbV93YWtldXBfc3JjOwotCV9fbGUxNiByZXNlcnZlZDsKLQlfX2xlMzIgc2xlZXBfdGltZTsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgYmNvbl90aW1lcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBTbGVlcCBzdGF0ZXMuICAzOTQ1IGFuZCA0OTY1IGlkZW50aWNhbC4gKi8KLWVudW0gewotCUlXTF9QTV9OT19TTEVFUCA9IDAsCi0JSVdMX1BNX1NMUF9NQUMgPSAxLAotCUlXTF9QTV9TTFBfRlVMTF9NQUNfVU5BU1NPQ0lBVEUgPSAyLAotCUlXTF9QTV9TTFBfRlVMTF9NQUNfQ0FSRF9TVEFURSA9IDMsCi0JSVdMX1BNX1NMUF9QSFkgPSA0LAotCUlXTF9QTV9TTFBfUkVQRU5UID0gNSwKLQlJV0xfUE1fV0FLRVVQX0JZX1RJTUVSID0gNiwKLQlJV0xfUE1fV0FLRVVQX0JZX0RSSVZFUiA9IDcsCi0JSVdMX1BNX1dBS0VVUF9CWV9SRktJTEwgPSA4LAotCS8qIDMgcmVzZXJ2ZWQgKi8KLQlJV0xfUE1fTlVNX09GX01PREVTID0gMTIsCi19OwotCi0vKgotICogUkVQTFlfQ0FSRF9TVEFURV9DTUQgPSAweGEwIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKi8KLSNkZWZpbmUgQ0FSRF9TVEFURV9DTURfRElTQUJMRSAweDAwCS8qIFB1dCBjYXJkIHRvIHNsZWVwICovCi0jZGVmaW5lIENBUkRfU1RBVEVfQ01EX0VOQUJMRSAgMHgwMQkvKiBXYWtlIHVwIGNhcmQgKi8KLSNkZWZpbmUgQ0FSRF9TVEFURV9DTURfSEFMVCAgICAweDAyCS8qIFBvd2VyIGRvd24gcGVybWFuZW50bHkgKi8KLXN0cnVjdCBpd2wzOTQ1X2NhcmRfc3RhdGVfY21kIHsKLQlfX2xlMzIgc3RhdHVzOwkJLyogQ0FSRF9TVEFURV9DTURfKiByZXF1ZXN0IG5ldyBwb3dlciBzdGF0ZSAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBDQVJEX1NUQVRFX05PVElGSUNBVElPTiA9IDB4YTEgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9jYXJkX3N0YXRlX25vdGlmIHsKLQlfX2xlMzIgZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBIV19DQVJEX0RJU0FCTEVEICAgMHgwMQotI2RlZmluZSBTV19DQVJEX0RJU0FCTEVEICAgMHgwMgotI2RlZmluZSBSRl9DQVJEX0RJU0FCTEVEICAgMHgwNAotI2RlZmluZSBSWE9OX0NBUkRfRElTQUJMRUQgMHgxMAotCi1zdHJ1Y3QgaXdsMzk0NV9jdF9raWxsX2NvbmZpZyB7Ci0JX19sZTMyICAgcmVzZXJ2ZWQ7Ci0JX19sZTMyICAgY3JpdGljYWxfdGVtcGVyYXR1cmVfTTsKLQlfX2xlMzIgICBjcml0aWNhbF90ZW1wZXJhdHVyZV9SOwotfSAgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoOCkKLSAqIFNjYW4gQ29tbWFuZHMsIFJlc3BvbnNlcywgTm90aWZpY2F0aW9uczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIC0gZW50cnkgaW4gUkVQTFlfU0NBTl9DTUQgY2hhbm5lbCB0YWJsZQotICoKLSAqIE9uZSBmb3IgZWFjaCBjaGFubmVsIGluIHRoZSBzY2FuIGxpc3QuCi0gKiBFYWNoIGNoYW5uZWwgY2FuIGluZGVwZW5kZW50bHkgc2VsZWN0OgotICogMSkgIFNTSUQgZm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucwotICogMikgIFR4cG93ZXIgc2V0dGluZyAoZm9yIHJhdGUgc3BlY2lmaWVkIHdpdGhpbiBUeCBjb21tYW5kKQotICogMykgIEhvdyBsb25nIHRvIHN0YXkgb24tY2hhbm5lbCAoYmVoYXZpb3IgbWF5IGJlIG1vZGlmaWVkIGJ5IHF1aWV0X3RpbWUsCi0gKiAgICAgcXVpZXRfcGxjcF90aCwgZ29vZF9DUkNfdGgpCi0gKgotICogVG8gYXZvaWQgdUNvZGUgZXJyb3JzLCBtYWtlIHN1cmUgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZSAoc2VlIGNvbW1lbnRzCi0gKiB1bmRlciBzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCBhYm91dCBtYXhfb3V0X3RpbWUgYW5kIHF1aWV0X3RpbWUpOgotICogMSkgIElmIHVzaW5nIHBhc3NpdmVfZHdlbGwgKGkuZS4gcGFzc2l2ZV9kd2VsbCAhPSAwKToKLSAqICAgICBhY3RpdmVfZHdlbGwgPD0gcGFzc2l2ZV9kd2VsbCAoPCBtYXhfb3V0X3RpbWUgaWYgbWF4X291dF90aW1lICE9IDApCi0gKiAyKSAgcXVpZXRfdGltZSA8PSBhY3RpdmVfZHdlbGwKLSAqIDMpICBJZiByZXN0cmljdGluZyBvZmYtY2hhbm5lbCB0aW1lIChpLmUuIG1heF9vdXRfdGltZSAhPTApOgotICogICAgIHBhc3NpdmVfZHdlbGwgPCBtYXhfb3V0X3RpbWUKLSAqICAgICBhY3RpdmVfZHdlbGwgPCBtYXhfb3V0X3RpbWUKLSAqLwotc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIHsKLQkvKgotCSAqIHR5cGUgaXMgZGVmaW5lZCBhczoKLQkgKiAwOjAgMSA9IGFjdGl2ZSwgMCA9IHBhc3NpdmUKLQkgKiAxOjQgU1NJRCBkaXJlY3QgYml0IG1hcDsgaWYgYSBiaXQgaXMgc2V0LCB0aGVuIGNvcnJlc3BvbmRpbmcKLQkgKiAgICAgU1NJRCBJRSBpcyB0cmFuc21pdHRlZCBpbiBwcm9iZSByZXF1ZXN0LgotCSAqIDU6NyByZXNlcnZlZAotCSAqLwotCXU4IHR5cGU7Ci0JdTggY2hhbm5lbDsJLyogYmFuZCBpcyBzZWxlY3RlZCBieSBpd2wzOTQ1X3NjYW5fY21kICJmbGFncyIgZmllbGQgKi8KLQlzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB0cGM7Ci0JX19sZTE2IGFjdGl2ZV9kd2VsbDsJLyogaW4gMTAyNC11U2VjIFRVICh0aW1lIHVuaXRzKSwgdHlwIDUtNTAgKi8KLQlfX2xlMTYgcGFzc2l2ZV9kd2VsbDsJLyogaW4gMTAyNC11U2VjIFRVICh0aW1lIHVuaXRzKSwgdHlwIDIwLTUwMCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfc3NpZF9pZSAtIGRpcmVjdGVkIHNjYW4gbmV0d29yayBpbmZvcm1hdGlvbiBlbGVtZW50Ci0gKgotICogVXAgdG8gNCBvZiB0aGVzZSBtYXkgYXBwZWFyIGluIFJFUExZX1NDQU5fQ01ELCBzZWxlY3RlZCBieSAidHlwZSIgZmllbGQKLSAqIGluIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbDsgZWFjaCBjaGFubmVsIG1heSBzZWxlY3QgZGlmZmVyZW50IHNzaWRzIGZyb20KLSAqIGFtb25nIHRoZSA0IGVudHJpZXMuICBTU0lEIElFcyBnZXQgdHJhbnNtaXR0ZWQgaW4gcmV2ZXJzZSBvcmRlciBvZiBlbnRyeS4KLSAqLwotc3RydWN0IGl3bDM5NDVfc3NpZF9pZSB7Ci0JdTggaWQ7Ci0JdTggbGVuOwotCXU4IHNzaWRbMzJdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLSNkZWZpbmUgUFJPQkVfT1BUSU9OX01BWCAgICAgICAgMHg0Ci0jZGVmaW5lIFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEUJY3B1X3RvX2xlMzIoMHhGRkZGRkZGRikKLSNkZWZpbmUgSVdMX0dPT0RfQ1JDX1RICQljcHVfdG9fbGUxNigxKQotI2RlZmluZSBJV0xfTUFYX1NDQU5fU0laRSAxMDI0Ci0KLS8qCi0gKiBSRVBMWV9TQ0FOX0NNRCA9IDB4ODAgKGNvbW1hbmQpCi0gKgotICogVGhlIGhhcmR3YXJlIHNjYW4gY29tbWFuZCBpcyB2ZXJ5IHBvd2VyZnVsOyB0aGUgZHJpdmVyIGNhbiBzZXQgaXQgdXAgdG8KLSAqIG1haW50YWluIChyZWxhdGl2ZWx5KSBub3JtYWwgbmV0d29yayB0cmFmZmljIHdoaWxlIGRvaW5nIGEgc2NhbiBpbiB0aGUKLSAqIGJhY2tncm91bmQuICBUaGUgbWF4X291dF90aW1lIGFuZCBzdXNwZW5kX3RpbWUgY29udHJvbCB0aGUgcmF0aW8gb2YgaG93Ci0gKiBsb25nIHRoZSBkZXZpY2Ugc3RheXMgb24gYW4gYXNzb2NpYXRlZCBuZXR3b3JrIGNoYW5uZWwgKCJzZXJ2aWNlIGNoYW5uZWwiKQotICogdnMuIGhvdyBsb25nIGl0J3MgYXdheSBmcm9tIHRoZSBzZXJ2aWNlIGNoYW5uZWwsIHR1bmVkIHRvIG90aGVyIGNoYW5uZWxzCi0gKiBmb3Igc2Nhbm5pbmcuCi0gKgotICogbWF4X291dF90aW1lIGlzIHRoZSBtYXggdGltZSBvZmYtY2hhbm5lbCAoaW4gdXNlYyksIGFuZCBzdXNwZW5kX3RpbWUKLSAqIGlzIGhvdyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uIiBmb3JtYXQpIHRoYXQgdGhlIHNjYW4gaXMgInN1c3BlbmRlZCIKLSAqIGFmdGVyIHJldHVybmluZyB0byB0aGUgc2VydmljZSBjaGFubmVsLiAgVGhhdCBpcywgc3VzcGVuZF90aW1lIGlzIHRoZQotICogdGltZSB0aGF0IHdlIHN0YXkgb24gdGhlIHNlcnZpY2UgY2hhbm5lbCwgZG9pbmcgbm9ybWFsIHdvcmssIGJldHdlZW4KLSAqIHNjYW4gc2VnbWVudHMuICBUaGUgZHJpdmVyIG1heSBzZXQgdGhlc2UgcGFyYW1ldGVycyBkaWZmZXJlbnRseSB0byBzdXBwb3J0Ci0gKiBzY2FubmluZyB3aGVuIGFzc29jaWF0ZWQgdnMuIG5vdCBhc3NvY2lhdGVkLCBhbmQgbGlnaHQgdnMuIGhlYXZ5IHRyYWZmaWMKLSAqIGxvYWRzIHdoZW4gYXNzb2NpYXRlZC4KLSAqCi0gKiBBZnRlciByZWNlaXZpbmcgdGhpcyBjb21tYW5kLCB0aGUgZGV2aWNlJ3Mgc2NhbiBlbmdpbmUgZG9lcyB0aGUgZm9sbG93aW5nOwotICoKLSAqIDEpICBTZW5kcyBTQ0FOX1NUQVJUIG5vdGlmaWNhdGlvbiB0byBkcml2ZXIKLSAqIDIpICBDaGVja3MgdG8gc2VlIGlmIGl0IGhhcyB0aW1lIHRvIGRvIHNjYW4gZm9yIG9uZSBjaGFubmVsCi0gKiAzKSAgU2VuZHMgTlVMTCBwYWNrZXQsIHdpdGggcG93ZXItc2F2ZSAoUFMpIGJpdCBzZXQgdG8gMSwKLSAqICAgICB0byB0ZWxsIEFQIHRoYXQgd2UncmUgZ29pbmcgb2ZmLWNoYW5uZWwKLSAqIDQpICBUdW5lcyB0byBmaXJzdCBjaGFubmVsIGluIHNjYW4gbGlzdCwgZG9lcyBhY3RpdmUgb3IgcGFzc2l2ZSBzY2FuCi0gKiA1KSAgU2VuZHMgU0NBTl9SRVNVTFQgbm90aWZpY2F0aW9uIHRvIGRyaXZlcgotICogNikgIENoZWNrcyB0byBzZWUgaWYgaXQgaGFzIHRpbWUgdG8gZG8gc2NhbiBvbiAqbmV4dCogY2hhbm5lbCBpbiBsaXN0Ci0gKiA3KSAgUmVwZWF0cyA0LTYgdW50aWwgaXQgbm8gbG9uZ2VyIGhhcyB0aW1lIHRvIHNjYW4gdGhlIG5leHQgY2hhbm5lbAotICogICAgIGJlZm9yZSBtYXhfb3V0X3RpbWUgZXhwaXJlcwotICogOCkgIFJldHVybnMgdG8gc2VydmljZSBjaGFubmVsCi0gKiA5KSAgU2VuZHMgTlVMTCBwYWNrZXQgd2l0aCBQUz0wIHRvIHRlbGwgQVAgdGhhdCB3ZSdyZSBiYWNrCi0gKiAxMCkgU3RheXMgb24gc2VydmljZSBjaGFubmVsIHVudGlsIHN1c3BlbmRfdGltZSBleHBpcmVzCi0gKiAxMSkgUmVwZWF0cyBlbnRpcmUgcHJvY2VzcyAyLTEwIHVudGlsIGxpc3QgaXMgY29tcGxldGUKLSAqIDEyKSBTZW5kcyBTQ0FOX0NPTVBMRVRFIG5vdGlmaWNhdGlvbgotICoKLSAqIEZvciBmYXN0LCBlZmZpY2llbnQgc2NhbnMsIHRoZSBzY2FuIGNvbW1hbmQgYWxzbyBoYXMgc3VwcG9ydCBmb3Igc3RheWluZyBvbgotICogYSBjaGFubmVsIGZvciBqdXN0IGEgc2hvcnQgdGltZSwgaWYgZG9pbmcgYWN0aXZlIHNjYW5uaW5nIGFuZCBnZXR0aW5nIG5vCi0gKiByZXNwb25zZXMgdG8gdGhlIHRyYW5zbWl0dGVkIHByb2JlIHJlcXVlc3QuICBUaGlzIHRpbWUgaXMgY29udHJvbGxlZCBieQotICogcXVpZXRfdGltZSwgYW5kIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cyBiZWxvdyB3aGljaCBhIGNoYW5uZWwgaXMKLSAqIGNvbnNpZGVyZWQgInF1aWV0IiBpcyBjb250cm9sbGVkIGJ5IHF1aWV0X3BsY3BfdGhyZXNob2xkLgotICoKLSAqIEZvciBhY3RpdmUgc2Nhbm5pbmcgb24gY2hhbm5lbHMgdGhhdCBoYXZlIHJlZ3VsYXRvcnkgcmVzdHJpY3Rpb25zIGFnYWluc3QKLSAqIGJsaW5kbHkgdHJhbnNtaXR0aW5nLCB0aGUgc2NhbiBjYW4gbGlzdGVuIGJlZm9yZSB0cmFuc21pdHRpbmcsIHRvIG1ha2Ugc3VyZQotICogdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGxlZ2l0aW1hdGUgYWN0aXZpdHkgb24gdGhlIGNoYW5uZWwuICBJZiBlbm91Z2gKLSAqIHBhY2tldHMgYXJlIGNsZWFubHkgcmVjZWl2ZWQgb24gdGhlIGNoYW5uZWwgKGNvbnRyb2xsZWQgYnkgZ29vZF9DUkNfdGgsCi0gKiB0eXBpY2FsIHZhbHVlIDEpLCB0aGUgc2NhbiBlbmdpbmUgc3RhcnRzIHRyYW5zbWl0dGluZyBwcm9iZSByZXF1ZXN0cy4KLSAqCi0gKiBEcml2ZXIgbXVzdCB1c2Ugc2VwYXJhdGUgc2NhbiBjb21tYW5kcyBmb3IgMi40IHZzLiA1IEdIeiBiYW5kcy4KLSAqCi0gKiBUbyBhdm9pZCB1Q29kZSBlcnJvcnMsIHNlZSB0aW1pbmcgcmVzdHJpY3Rpb25zIGRlc2NyaWJlZCB1bmRlcgotICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCB7Ci0JX19sZTE2IGxlbjsKLQl1OCByZXNlcnZlZDA7Ci0JdTggY2hhbm5lbF9jb3VudDsJLyogIyBjaGFubmVscyBpbiBjaGFubmVsIGxpc3QgKi8KLQlfX2xlMTYgcXVpZXRfdGltZTsJLyogZHdlbGwgb25seSB0aGlzICMgbWlsbGlzZWNzIG9uIHF1aWV0IGNoYW5uZWwKLQkJCQkgKiAob25seSBmb3IgYWN0aXZlIHNjYW4pICovCi0JX19sZTE2IHF1aWV0X3BsY3BfdGg7CS8qIHF1aWV0IGNobmwgaXMgPCB0aGlzICMgcGt0cyAodHlwLiAxKSAqLwotCV9fbGUxNiBnb29kX0NSQ190aDsJLyogcGFzc2l2ZSAtPiBhY3RpdmUgcHJvbW90aW9uIHRocmVzaG9sZCAqLwotCV9fbGUxNiByZXNlcnZlZDE7Ci0JX19sZTMyIG1heF9vdXRfdGltZTsJLyogbWF4IHVzZWMgdG8gYmUgYXdheSBmcm9tIGFzc29jaWF0ZWQgKHNlcnZpY2UpCi0JCQkJICogY2hhbm5lbCAqLwotCV9fbGUzMiBzdXNwZW5kX3RpbWU7CS8qIHBhdXNlIHNjYW4gdGhpcyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uCi0JCQkJICogZm9ybWF0Iikgd2hlbiByZXR1cm5pbmcgdG8gc2VydmljZSBjaGFubmVsOgotCQkJCSAqIDM5NDU7IDMxOjI0ICMgYmVhY29ucywgMTk6MCBhZGRpdGlvbmFsIHVzZWMsCi0JCQkJICogNDk2NTsgMzE6MjIgIyBiZWFjb25zLCAyMTowIGFkZGl0aW9uYWwgdXNlYy4KLQkJCQkgKi8KLQlfX2xlMzIgZmxhZ3M7CQkvKiBSWE9OX0ZMR18qICovCi0JX19sZTMyIGZpbHRlcl9mbGFnczsJLyogUlhPTl9GSUxURVJfKiAqLwotCi0JLyogRm9yIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBmb3IgcGFzc2l2ZSBzY2FucykuCi0JICogRG9lcyBub3QgaW5jbHVkZSBwYXlsb2FkLiAgTXVzdCBzcGVjaWZ5IFR4IHJhdGU7IG5vIHJhdGUgc2NhbGluZy4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHhfY21kOwotCi0JLyogRm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBvdGhlcndpc2UpICovCi0Jc3RydWN0IGl3bDM5NDVfc3NpZF9pZSBkaXJlY3Rfc2NhbltQUk9CRV9PUFRJT05fTUFYXTsKLQotCS8qCi0JICogUHJvYmUgcmVxdWVzdCBmcmFtZSwgZm9sbG93ZWQgYnkgY2hhbm5lbCBsaXN0LgotCSAqCi0JICogU2l6ZSBvZiBwcm9iZSByZXF1ZXN0IGZyYW1lIGlzIHNwZWNpZmllZCBieSBieXRlIGNvdW50IGluIHR4X2NtZC4KLQkgKiBDaGFubmVsIGxpc3QgZm9sbG93cyBpbW1lZGlhdGVseSBhZnRlciBwcm9iZSByZXF1ZXN0IGZyYW1lLgotCSAqIE51bWJlciBvZiBjaGFubmVscyBpbiBsaXN0IGlzIHNwZWNpZmllZCBieSBjaGFubmVsX2NvdW50LgotCSAqIEVhY2ggY2hhbm5lbCBpbiBsaXN0IGlzIG9mIHR5cGU6Ci0JICoKLQkgKiBzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NoYW5uZWwgY2hhbm5lbHNbMF07Ci0JICoKLQkgKiBOT1RFOiAgT25seSBvbmUgYmFuZCBvZiBjaGFubmVscyBjYW4gYmUgc2Nhbm5lZCBwZXIgcGFzcy4gIFlvdQotCSAqIG11c3Qgbm90IG1peCAyLjRHSHogY2hhbm5lbHMgYW5kIDUuMkdIeiBjaGFubmVscywgYW5kIHlvdSBtdXN0IHdhaXQKLQkgKiBmb3Igb25lIHNjYW4gdG8gY29tcGxldGUgKGkuZS4gcmVjZWl2ZSBTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTikKLQkgKiBiZWZvcmUgcmVxdWVzdGluZyBhbm90aGVyIHNjYW4uCi0JICovCi0JdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBDYW4gYWJvcnQgd2lsbCBub3RpZnkgYnkgY29tcGxldGUgbm90aWZpY2F0aW9uIHdpdGggYWJvcnQgc3RhdHVzLiAqLwotI2RlZmluZSBDQU5fQUJPUlRfU1RBVFVTCWNwdV90b19sZTMyKDB4MSkKLS8qIGNvbXBsZXRlIG5vdGlmaWNhdGlvbiBzdGF0dXNlcyAqLwotI2RlZmluZSBBQk9SVF9TVEFUVVMgICAgICAgICAgICAweDIKLQotLyoKLSAqIFJFUExZX1NDQU5fQ01EID0gMHg4MCAocmVzcG9uc2UpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5yZXFfbm90aWZpY2F0aW9uIHsKLQlfX2xlMzIgc3RhdHVzOwkJLyogMTogb2theSwgMjogY2Fubm90IGZ1bGZpbGwgcmVxdWVzdCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBTQ0FOX1NUQVJUX05PVElGSUNBVElPTiA9IDB4ODIgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uIHsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgdHNmX2hpZ2g7Ci0JX19sZTMyIGJlYWNvbl90aW1lcjsKLQl1OCBjaGFubmVsOwotCXU4IGJhbmQ7Ci0JdTggcmVzZXJ2ZWRbMl07Ci0JX19sZTMyIHN0YXR1czsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lICBTQ0FOX09XTkVSX1NUQVRVUyAweDE7Ci0jZGVmaW5lICBNRUFTVVJFX09XTkVSX1NUQVRVUyAweDI7Ci0KLSNkZWZpbmUgTlVNQkVSX09GX1NUQVRJU1RJQ1MgMQkvKiBmaXJzdCBfX2xlMzIgaXMgZ29vZCBDUkMgKi8KLS8qCi0gKiBTQ0FOX1JFU1VMVFNfTk9USUZJQ0FUSU9OID0gMHg4MyAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiB7Ci0JdTggY2hhbm5lbDsKLQl1OCBiYW5kOwotCXU4IHJlc2VydmVkWzJdOwotCV9fbGUzMiB0c2ZfbG93OwotCV9fbGUzMiB0c2ZfaGlnaDsKLQlfX2xlMzIgc3RhdGlzdGljc1tOVU1CRVJfT0ZfU1RBVElTVElDU107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gMHg4NCAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3NjYW5jb21wbGV0ZV9ub3RpZmljYXRpb24gewotCXU4IHNjYW5uZWRfY2hhbm5lbHM7Ci0JdTggc3RhdHVzOwotCXU4IHJlc2VydmVkOwotCXU4IGxhc3RfY2hhbm5lbDsKLQlfX2xlMzIgdHNmX2xvdzsKLQlfX2xlMzIgdHNmX2hpZ2g7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoOSkKLSAqIElCU1MvQVAgQ29tbWFuZHMgYW5kIE5vdGlmaWNhdGlvbnM6Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogQkVBQ09OX05PVElGSUNBVElPTiA9IDB4OTAgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICovCi1zdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgYmVhY29uX25vdGlmeV9oZHI7Ci0JX19sZTMyIGxvd190c2Y7Ci0JX19sZTMyIGhpZ2hfdHNmOwotCV9fbGUzMiBpYnNzX21ncl9zdGF0dXM7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1RYX0JFQUNPTiA9IDB4OTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKLSAqLwotc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCB7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfY21kIHR4OwotCV9fbGUxNiB0aW1faWR4OwotCXU4IHRpbV9zaXplOwotCXU4IHJlc2VydmVkMTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciBmcmFtZVswXTsJLyogYmVhY29uIGZyYW1lICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEwKQotICogU3RhdGlzdGljcyBDb21tYW5kcyBhbmQgTm90aWZpY2F0aW9uczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgSVdMX1RFTVBfQ09OVkVSVCAyNjAKLQotI2RlZmluZSBTVVBfUkFURV8xMUFfTUFYX05VTV9DSEFOTkVMUyAgOAotI2RlZmluZSBTVVBfUkFURV8xMUJfTUFYX05VTV9DSEFOTkVMUyAgNAotI2RlZmluZSBTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMUyAgMTIKLQotLyogVXNlZCBmb3IgcGFzc2luZyB0byBkcml2ZXIgbnVtYmVyIG9mIHN1Y2Nlc3NlcyBhbmQgZmFpbHVyZXMgcGVyIHJhdGUgKi8KLXN0cnVjdCByYXRlX2hpc3RvZ3JhbSB7Ci0JdW5pb24gewotCQlfX2xlMzIgYVtTVVBfUkFURV8xMUFfTUFYX05VTV9DSEFOTkVMU107Ci0JCV9fbGUzMiBiW1NVUF9SQVRFXzExQl9NQVhfTlVNX0NIQU5ORUxTXTsKLQkJX19sZTMyIGdbU1VQX1JBVEVfMTFHX01BWF9OVU1fQ0hBTk5FTFNdOwotCX0gc3VjY2VzczsKLQl1bmlvbiB7Ci0JCV9fbGUzMiBhW1NVUF9SQVRFXzExQV9NQVhfTlVNX0NIQU5ORUxTXTsKLQkJX19sZTMyIGJbU1VQX1JBVEVfMTFCX01BWF9OVU1fQ0hBTk5FTFNdOwotCQlfX2xlMzIgZ1tTVVBfUkFURV8xMUdfTUFYX05VTV9DSEFOTkVMU107Ci0JfSBmYWlsZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogc3RhdGlzdGljcyBjb21tYW5kIHJlc3BvbnNlICovCi0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSB7Ci0JX19sZTMyIGluYV9jbnQ7Ci0JX19sZTMyIGZpbmFfY250OwotCV9fbGUzMiBwbGNwX2VycjsKLQlfX2xlMzIgY3JjMzJfZXJyOwotCV9fbGUzMiBvdmVycnVuX2VycjsKLQlfX2xlMzIgZWFybHlfb3ZlcnJ1bl9lcnI7Ci0JX19sZTMyIGNyYzMyX2dvb2Q7Ci0JX19sZTMyIGZhbHNlX2FsYXJtX2NudDsKLQlfX2xlMzIgZmluYV9zeW5jX2Vycl9jbnQ7Ci0JX19sZTMyIHNmZF90aW1lb3V0OwotCV9fbGUzMiBmaW5hX3RpbWVvdXQ7Ci0JX19sZTMyIHVucmVzcG9uZGVkX3J0czsKLQlfX2xlMzIgcnhlX2ZyYW1lX2xpbWl0X292ZXJydW47Ci0JX19sZTMyIHNlbnRfYWNrX2NudDsKLQlfX2xlMzIgc2VudF9jdHNfY250OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgewotCV9fbGUzMiBib2d1c19jdHM7CS8qIENUUyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQ1RTICovCi0JX19sZTMyIGJvZ3VzX2FjazsJLyogQUNLIHJlY2VpdmVkIHdoZW4gbm90IGV4cGVjdGluZyBBQ0sgKi8KLQlfX2xlMzIgbm9uX2Jzc2lkX2ZyYW1lczsJLyogbnVtYmVyIG9mIGZyYW1lcyB3aXRoIEJTU0lEIHRoYXQKLQkJCQkJICogZG9lc24ndCBiZWxvbmcgdG8gdGhlIFNUQSBCU1NJRCAqLwotCV9fbGUzMiBmaWx0ZXJlZF9mcmFtZXM7CS8qIGNvdW50IGZyYW1lcyB0aGF0IHdlcmUgZHVtcGVkIGluIHRoZQotCQkJCSAqIGZpbHRlcmluZyBwcm9jZXNzICovCi0JX19sZTMyIG5vbl9jaGFubmVsX2JlYWNvbnM7CS8qIGJlYWNvbnMgd2l0aCBvdXIgYnNzIGlkIGJ1dCBub3Qgb24KLQkJCQkJICogb3VyIHNlcnZpbmcgY2hhbm5lbCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX3J4IHsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgb2ZkbTsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgY2NrOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkgZ2VuZXJhbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc190eCB7Ci0JX19sZTMyIHByZWFtYmxlX2NudDsKLQlfX2xlMzIgcnhfZGV0ZWN0ZWRfY250OwotCV9fbGUzMiBidF9wcmlvX2RlZmVyX2NudDsKLQlfX2xlMzIgYnRfcHJpb19raWxsX2NudDsKLQlfX2xlMzIgZmV3X2J5dGVzX2NudDsKLQlfX2xlMzIgY3RzX3RpbWVvdXQ7Ci0JX19sZTMyIGFja190aW1lb3V0OwotCV9fbGUzMiBleHBlY3RlZF9hY2tfY250OwotCV9fbGUzMiBhY3R1YWxfYWNrX2NudDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19kYmcgewotCV9fbGUzMiBidXJzdF9jaGVjazsKLQlfX2xlMzIgYnVyc3RfY291bnQ7Ci0JX19sZTMyIHJlc2VydmVkWzRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBzdGF0aXN0aWNzX2RpdiB7Ci0JX19sZTMyIHR4X29uX2E7Ci0JX19sZTMyIHR4X29uX2I7Ci0JX19sZTMyIGV4ZWNfdGltZTsKLQlfX2xlMzIgcHJvYmVfdGltZTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsIHsKLQlfX2xlMzIgdGVtcGVyYXR1cmU7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZGJnIGRiZzsKLQlfX2xlMzIgc2xlZXBfdGltZTsKLQlfX2xlMzIgc2xvdHNfb3V0OwotCV9fbGUzMiBzbG90c19pZGxlOwotCV9fbGUzMiB0dGxfdGltZXN0YW1wOwotCXN0cnVjdCBzdGF0aXN0aWNzX2RpdiBkaXY7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoKLSAqIFJFUExZX1NUQVRJU1RJQ1NfQ01EID0gMHg5YywKLSAqIDM5NDUgYW5kIDQ5NjUgaWRlbnRpY2FsLgotICoKLSAqIFRoaXMgY29tbWFuZCB0cmlnZ2VycyBhbiBpbW1lZGlhdGUgcmVzcG9uc2UgY29udGFpbmluZyB1Q29kZSBzdGF0aXN0aWNzLgotICogVGhlIHJlc3BvbnNlIGlzIGluIHRoZSBzYW1lIGZvcm1hdCBhcyBTVEFUSVNUSUNTX05PVElGSUNBVElPTiAweDlkLCBiZWxvdy4KLSAqCi0gKiBJZiB0aGUgQ0xFQVJfU1RBVFMgY29uZmlndXJhdGlvbiBmbGFnIGlzIHNldCwgdUNvZGUgd2lsbCBjbGVhciBpdHMKLSAqIGludGVybmFsIGNvcHkgb2YgdGhlIHN0YXRpc3RpY3MgKGNvdW50ZXJzKSBhZnRlciBpc3N1aW5nIHRoZSByZXNwb25zZS4KLSAqIFRoaXMgZmxhZyBkb2VzIG5vdCBhZmZlY3QgU1RBVElTVElDU19OT1RJRklDQVRJT05zIGFmdGVyIGJlYWNvbnMgKHNlZSBiZWxvdykuCi0gKgotICogSWYgdGhlIERJU0FCTEVfTk9USUYgY29uZmlndXJhdGlvbiBmbGFnIGlzIHNldCwgdUNvZGUgd2lsbCBub3QgaXNzdWUKLSAqIFNUQVRJU1RJQ1NfTk9USUZJQ0FUSU9OcyBhZnRlciByZWNlaXZlZCBiZWFjb25zIChzZWUgYmVsb3cpLiAgVGhpcyBmbGFnCi0gKiBkb2VzIG5vdCBhZmZlY3QgdGhlIHJlc3BvbnNlIHRvIHRoZSBSRVBMWV9TVEFUSVNUSUNTX0NNRCAweDljIGl0c2VsZi4KLSAqLwotI2RlZmluZSBJV0xfU1RBVFNfQ09ORl9DTEVBUl9TVEFUUyBjcHVfdG9fbGUzMigweDEpCS8qIHNlZSBhYm92ZSAqLwotI2RlZmluZSBJV0xfU1RBVFNfQ09ORl9ESVNBQkxFX05PVElGIGNwdV90b19sZTMyKDB4MikvKiBzZWUgYWJvdmUgKi8KLXN0cnVjdCBpd2wzOTQ1X3N0YXRpc3RpY3NfY21kIHsKLQlfX2xlMzIgY29uZmlndXJhdGlvbl9mbGFnczsJLyogSVdMX1NUQVRTX0NPTkZfKiAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0gKiBTVEFUSVNUSUNTX05PVElGSUNBVElPTiA9IDB4OWQgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICoKLSAqIEJ5IGRlZmF1bHQsIHVDb2RlIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBhZnRlciByZWNlaXZpbmcgYSBiZWFjb24KLSAqIHdoaWxlIGFzc29jaWF0ZWQuICBUbyBkaXNhYmxlIHRoaXMgYmVoYXZpb3IsIHNldCBESVNBQkxFX05PVElGIGZsYWcgaW4gdGhlCi0gKiBSRVBMWV9TVEFUSVNUSUNTX0NNRCAweDljLCBhYm92ZS4KLSAqCi0gKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbnRpbnVlIHRvIGluY3JlbWVudCBiZWFjb24gYWZ0ZXIgYmVhY29uLCBidXQgYXJlCi0gKiBjbGVhcmVkIHdoZW4gY2hhbmdpbmcgY2hhbm5lbHMgb3Igd2hlbiBkcml2ZXIgaXNzdWVzIFJFUExZX1NUQVRJU1RJQ1NfQ01ECi0gKiAweDljIHdpdGggQ0xFQVJfU1RBVFMgYml0IHNldCAoc2VlIGFib3ZlKS4KLSAqCi0gKiB1Q29kZSBhbHNvIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBkdXJpbmcgc2NhbnMuICB1Q29kZSBjbGVhcnMgc3RhdGlzdGljcwotICogYXBwcm9wcmlhdGVseSBzbyB0aGF0IGVhY2ggbm90aWZpY2F0aW9uIGNvbnRhaW5zIHN0YXRpc3RpY3MgZm9yIG9ubHkgdGhlCi0gKiBvbmUgY2hhbm5lbCB0aGF0IGhhcyBqdXN0IGJlZW4gc2Nhbm5lZC4KLSAqLwotI2RlZmluZSBTVEFUSVNUSUNTX1JFUExZX0ZMR19CQU5EXzI0R19NU0sgICAgICAgICBjcHVfdG9fbGUzMigweDIpCi0jZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0ZBVF9NT0RFX01TSyAgICAgICAgIGNwdV90b19sZTMyKDB4OCkKLXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3MgewotCV9fbGUzMiBmbGFnOwotCXN0cnVjdCBzdGF0aXN0aWNzX3J4IHJ4OwotCXN0cnVjdCBzdGF0aXN0aWNzX3R4IHR4OwotCXN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwgZ2VuZXJhbDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0KLS8qCi0gKiBNSVNTRURfQkVBQ09OU19OT1RJRklDQVRJT04gPSAweGEyIChub3RpZmljYXRpb24gb25seSwgbm90IGEgY29tbWFuZCkKLSAqLwotLyogaWYgdWNvZGUgbWlzc2VkIENPTlNFQ1VUSVZFX01JU1NFRF9CQ09OU19USCBiZWFjb25zIGluIGEgcm93LAotICogdGhlbiB0aGlzIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHNlbnQuICovCi0jZGVmaW5lIENPTlNFQ1VUSVZFX01JU1NFRF9CQ09OU19USCAyMAotCi1zdHJ1Y3QgaXdsMzk0NV9taXNzZWRfYmVhY29uX25vdGlmIHsKLQlfX2xlMzIgY29uc2VxdXRpdmVfbWlzc2VkX2JlYWNvbnM7Ci0JX19sZTMyIHRvdGFsX21pc3NlZF9iZWNvbnM7Ci0JX19sZTMyIG51bV9leHBlY3RlZF9iZWFjb25zOwotCV9fbGUzMiBudW1fcmVjdmRfYmVhY29uczsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAoMTEpCi0gKiBSeCBDYWxpYnJhdGlvbiBDb21tYW5kczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgUEhZX0NBTElCUkFURV9ESUZGX0dBSU5fQ01EICg3KQotI2RlZmluZSBIRF9UQUJMRV9TSVpFICAoMTEpCi0KLXN0cnVjdCBpd2wzOTQ1X3NlbnNpdGl2aXR5X2NtZCB7Ci0JX19sZTE2IGNvbnRyb2w7Ci0JX19sZTE2IHRhYmxlW0hEX1RBQkxFX1NJWkVdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpd2wzOTQ1X2NhbGlicmF0aW9uX2NtZCB7Ci0JdTggb3BDb2RlOwotCXU4IGZsYWdzOwotCV9fbGUxNiByZXNlcnZlZDsKLQlzOCBkaWZmX2dhaW5fYTsKLQlzOCBkaWZmX2dhaW5fYjsKLQlzOCBkaWZmX2dhaW5fYzsKLQl1OCByZXNlcnZlZDE7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEyKQotICogTWlzY2VsbGFuZW91cyBDb21tYW5kczoKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBMRURzIENvbW1hbmQgJiBSZXNwb25zZQotICogUkVQTFlfTEVEU19DTUQgPSAweDQ4IChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCi0gKgotICogRm9yIGVhY2ggb2YgMyBwb3NzaWJsZSBMRURzIChBY3Rpdml0eS9MaW5rL1RlY2gsIHNlbGVjdGVkIGJ5ICJpZCIgZmllbGQpLAotICogdGhpcyBjb21tYW5kIHR1cm5zIGl0IG9uIG9yIG9mZiwgb3Igc2V0cyB1cCBhIHBlcmlvZGljIGJsaW5raW5nIGN5Y2xlLgotICovCi1zdHJ1Y3QgaXdsMzk0NV9sZWRfY21kIHsKLQlfX2xlMzIgaW50ZXJ2YWw7CS8qICJpbnRlcnZhbCIgaW4gdVNlYyAqLwotCXU4IGlkOwkJCS8qIDE6IEFjdGl2aXR5LCAyOiBMaW5rLCAzOiBUZWNoICovCi0JdTggb2ZmOwkJCS8qICMgaW50ZXJ2YWxzIG9mZiB3aGlsZSBibGlua2luZzsKLQkJCQkgKiAiMCIsIHdpdGggPjAgIm9uIiB2YWx1ZSwgdHVybnMgTEVEIG9uICovCi0JdTggb247CQkJLyogIyBpbnRlcnZhbHMgb24gd2hpbGUgYmxpbmtpbmc7Ci0JCQkJICogIjAiLCByZWdhcmRsZXNzIG9mICJvZmYiLCB0dXJucyBMRUQgb2ZmICovCi0JdTggcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogKDEzKQotICogVW5pb24gb2YgYWxsIGV4cGVjdGVkIG5vdGlmaWNhdGlvbnMvcmVzcG9uc2VzOgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0IHsKLQlfX2xlMzIgbGVuOwotCXN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIgaGRyOwotCXVuaW9uIHsKLQkJc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCBhbGl2ZV9mcmFtZTsKLQkJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgcnhfZnJhbWU7Ci0JCXN0cnVjdCBpd2wzOTQ1X3R4X3Jlc3AgdHhfcmVzcDsKLQkJc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uIHNwZWN0cnVtX25vdGlmOwotCQlzdHJ1Y3QgaXdsMzk0NV9jc2Ffbm90aWZpY2F0aW9uIGNzYV9ub3RpZjsKLQkJc3RydWN0IGl3bDM5NDVfZXJyb3JfcmVzcCBlcnJfcmVzcDsKLQkJc3RydWN0IGl3bDM5NDVfY2FyZF9zdGF0ZV9ub3RpZiBjYXJkX3N0YXRlX25vdGlmOwotCQlzdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgYmVhY29uX3N0YXR1czsKLQkJc3RydWN0IGl3bDM5NDVfYWRkX3N0YV9yZXNwIGFkZF9zdGE7Ci0JCXN0cnVjdCBpd2wzOTQ1X3NsZWVwX25vdGlmaWNhdGlvbiBzbGVlcF9ub3RpZjsKLQkJc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fcmVzcCBzcGVjdHJ1bTsKLQkJc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBzdGF0czsKLQkJX19sZTMyIHN0YXR1czsKLQkJdTggcmF3WzBdOwotCX0gdTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0jZGVmaW5lIElXTF9SWF9GUkFNRV9TSVpFICAgICAgICAoNCArIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZSkpCi0KLSNlbmRpZgkJCQkvKiBfX2l3bDM5NDVfMzk0NV9jb21tYW5kc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNDYzNTUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1jb3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIFRoaXMgZmlsZSBpcyBwcm92aWRlZCB1bmRlciBhIGR1YWwgQlNEL0dQTHYyIGxpY2Vuc2UuICBXaGVuIHVzaW5nIG9yCi0gKiByZWRpc3RyaWJ1dGluZyB0aGlzIGZpbGUsIHlvdSBtYXkgZG8gc28gdW5kZXIgZWl0aGVyIGxpY2Vuc2UuCi0gKgotICogR1BMIExJQ0VOU0UgU1VNTUFSWQotICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsCi0gKiBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuR1BMLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+Ci0gKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3Ci0gKgotICogQlNEIExJQ0VOU0UKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9faXdsXzM5NDVfZGV2X2hfXwotI2RlZmluZSBfX2l3bF8zOTQ1X2Rldl9oX18KLQotI2RlZmluZSBJV0xfUENJX0RFVklDRShkZXYsIHN1YmRldiwgY2ZnKSBcCi0JLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfSU5URUwsICAuZGV2aWNlID0gKGRldiksIFwKLQkuc3VidmVuZG9yID0gUENJX0FOWV9JRCwgLnN1YmRldmljZSA9IChzdWJkZXYpLCBcCi0JLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSYoY2ZnKQotCi0jZGVmaW5lIElXTF9TS1VfRyAgICAgICAweDEKLSNkZWZpbmUgSVdMX1NLVV9BICAgICAgIDB4MgotCi0vKioKLSAqIHN0cnVjdCBpd2xfMzk0NV9jZmcKLSAqIEBmd19uYW1lX3ByZTogRmlybXdhcmUgZmlsZW5hbWUgcHJlZml4LiBUaGUgYXBpIHZlcnNpb24gYW5kIGV4dGVuc2lvbgotICogCSgudWNvZGUpIHdpbGwgYmUgYWRkZWQgdG8gZmlsZW5hbWUgYmVmb3JlIGxvYWRpbmcgZnJvbSBkaXNrLiBUaGUKLSAqIAlmaWxlbmFtZSBpcyBjb25zdHJ1Y3RlZCBhcyBmd19uYW1lX3ByZTxhcGk+LnVjb2RlLgotICogQHVjb2RlX2FwaV9tYXg6IEhpZ2hlc3QgdmVyc2lvbiBvZiB1Q29kZSBBUEkgc3VwcG9ydGVkIGJ5IGRyaXZlci4KLSAqIEB1Y29kZV9hcGlfbWluOiBMb3dlc3QgdmVyc2lvbiBvZiB1Q29kZSBBUEkgc3VwcG9ydGVkIGJ5IGRyaXZlci4KLSAqCi0gKiBXZSBlbmFibGUgdGhlIGRyaXZlciB0byBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdydCBBUEkgdmVyc2lvbi4gVGhlCi0gKiBkcml2ZXIgc3BlY2lmaWVzIHdoaWNoIEFQSXMgaXQgc3VwcG9ydHMgKHdpdGggQHVjb2RlX2FwaV9tYXggYmVpbmcgdGhlCi0gKiBoaWdoZXN0IGFuZCBAdWNvZGVfYXBpX21pbiB0aGUgbG93ZXN0KS4gRmlybXdhcmUgd2lsbCBvbmx5IGJlIGxvYWRlZCBpZgotICogaXQgaGFzIGEgc3VwcG9ydGVkIEFQSSB2ZXJzaW9uLiBUaGUgZmlybXdhcmUncyBBUEkgdmVyc2lvbiB3aWxsIGJlCi0gKiBzdG9yZWQgaW4gQGl3bF9wcml2LCBlbmFibGluZyB0aGUgZHJpdmVyIHRvIG1ha2UgcnVudGltZSBjaGFuZ2VzIGJhc2VkCi0gKiBvbiBmaXJtd2FyZSB2ZXJzaW9uIHVzZWQuCi0gKgotICogRm9yIGV4YW1wbGUsCi0gKiBpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID49IDIpIHsKLSAqIAlEcml2ZXIgaW50ZXJhY3RzIHdpdGggRmlybXdhcmUgQVBJIHZlcnNpb24gPj0gMi4KLSAqIH0gZWxzZSB7Ci0gKiAJRHJpdmVyIGludGVyYWN0cyB3aXRoIEZpcm13YXJlIEFQSSB2ZXJzaW9uIDEuCi0gKiB9Ci0gKi8KLXN0cnVjdCBpd2xfMzk0NV9jZmcgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3QgY2hhciAqZndfbmFtZV9wcmU7Ci0JY29uc3QgdW5zaWduZWQgaW50IHVjb2RlX2FwaV9tYXg7Ci0JY29uc3QgdW5zaWduZWQgaW50IHVjb2RlX2FwaV9taW47Ci0JdW5zaWduZWQgaW50IHNrdTsKLX07Ci0KLSNlbmRpZiAvKiBfX2l3bF9kZXZfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWRlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZWI3NzguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1kZWJ1Zy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19pd2wzOTQ1X2RlYnVnX2hfXwotI2RlZmluZSBfX2l3bDM5NDVfZGVidWdfaF9fCi0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotZXh0ZXJuIHUzMiBpd2wzOTQ1X2RlYnVnX2xldmVsOwotI2RlZmluZSBJV0xfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKLSAgcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FIjogJWMgJXMgIiBmbXQsIFwKLQkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgSVdMX0RFQlVHX0xJTUlUKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLWRvIHsgaWYgKChpd2wzOTQ1X2RlYnVnX2xldmVsICYgKGxldmVsKSkgJiYgbmV0X3JhdGVsaW1pdCgpKSBcCi0gIHByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSI6ICVjICVzICIgZm10LCBcCi0JIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLCBfX2Z1bmNfXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9wcmludF9oZXhfZHVtcChpbnQgbGV2ZWwsIHZvaWQgKnAsIHUzMiBsZW4pCi17Ci0JaWYgKCEoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIGxldmVsKSkKLQkJcmV0dXJuOwotCi0JcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIml3bCBkYXRhOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLAotCQkJcCwgbGVuLCAxKTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgSVdMX0RFQlVHKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgSVdMX0RFQlVHX0xJTUlUKGludCBsZXZlbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9wcmludF9oZXhfZHVtcChpbnQgbGV2ZWwsIHZvaWQgKnAsIHUzMiBsZW4pCi17Ci19Ci0jZW5kaWYJLyogQ09ORklHX0lXTDM5NDVfREVCVUcgKi8KLQotCi0KLS8qCi0gKiBUbyB1c2UgdGhlIGRlYnVnIHN5c3RlbTsKLSAqCi0gKiBJZiB5b3UgYXJlIGRlZmluaW5nIGEgbmV3IGRlYnVnIGNsYXNzaWZpY2F0aW9uLCBzaW1wbHkgYWRkIGl0IHRvIHRoZSAjZGVmaW5lCi0gKiBsaXN0IGhlcmUgaW4gdGhlIGZvcm0gb2Y6Ci0gKgotICogI2RlZmluZSBJV0xfRExfeHh4eCBWQUxVRQotICoKLSAqIHNoaWZ0aW5nIHZhbHVlIHRvIHRoZSBsZWZ0IG9uZSBiaXQgZnJvbSB0aGUgcHJldmlvdXMgZW50cnkuICB4eHh4IHNob3VsZCBiZQotICogdGhlIG5hbWUgb2YgdGhlIGNsYXNzaWZpY2F0aW9uIChmb3IgZXhhbXBsZSwgV0VQKQotICoKLSAqIFlvdSB0aGVuIG5lZWQgdG8gZWl0aGVyIGFkZCBhIElXTF94eHh4X0RFQlVHKCkgbWFjcm8gZGVmaW5pdGlvbiBmb3IgeW91cgotICogY2xhc3NpZmljYXRpb24sIG9yIHVzZSBJV0xfREVCVUcoSVdMX0RMX3h4eHgsIC4uLikgd2hlbmV2ZXIgeW91IHdhbnQKLSAqIHRvIHNlbmQgb3V0cHV0IHRvIHRoYXQgY2xhc3NpZmljYXRpb24uCi0gKgotICogVG8gYWRkIHlvdXIgZGVidWcgbGV2ZWwgdG8gdGhlIGxpc3Qgb2YgbGV2ZWxzIHNlZW4gd2hlbiB5b3UgcGVyZm9ybQotICoKLSAqICUgY2F0IC9wcm9jL25ldC9pd2wvZGVidWdfbGV2ZWwKLSAqCi0gKiB5b3Ugc2ltcGx5IG5lZWQgdG8gYWRkIHlvdXIgZW50cnkgdG8gdGhlIGl3bDM5NDVfZGVidWdfbGV2ZWxzIGFycmF5LgotICoKLSAqIElmIHlvdSBkbyBub3Qgc2VlIGRlYnVnX2xldmVsIGluIC9wcm9jL25ldC9pd2wgdGhlbiB5b3UgZG8gbm90IGhhdmUKLSAqIENPTkZJR19JV0wzOTQ1X0RFQlVHIGRlZmluZWQgaW4geW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgotICoKLSAqLwotCi0jZGVmaW5lIElXTF9ETF9JTkZPICAgICAgICAgICgxIDw8IDApCi0jZGVmaW5lIElXTF9ETF9NQUM4MDIxMSAgICAgICgxIDw8IDEpCi0jZGVmaW5lIElXTF9ETF9IT1NUX0NPTU1BTkQgICgxIDw8IDIpCi0jZGVmaW5lIElXTF9ETF9TVEFURSAgICAgICAgICgxIDw8IDMpCi0KLSNkZWZpbmUgSVdMX0RMX1JBRElPICAgICAgICAgKDEgPDwgNykKLSNkZWZpbmUgSVdMX0RMX1BPV0VSICAgICAgICAgKDEgPDwgOCkKLSNkZWZpbmUgSVdMX0RMX1RFTVAgICAgICAgICAgKDEgPDwgOSkKLQotI2RlZmluZSBJV0xfRExfTk9USUYgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSVdMX0RMX1NDQU4gICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElXTF9ETF9BU1NPQyAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBJV0xfRExfRFJPUCAgICAgICAgICAoMSA8PCAxMykKLQotI2RlZmluZSBJV0xfRExfVFhQT1dFUiAgICAgICAoMSA8PCAxNCkKLQotI2RlZmluZSBJV0xfRExfQVAgICAgICAgICAgICAoMSA8PCAxNSkKLQotI2RlZmluZSBJV0xfRExfRlcgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSVdMX0RMX1JGX0tJTEwgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIElXTF9ETF9GV19FUlJPUlMgICAgICgxIDw8IDE4KQotCi0jZGVmaW5lIElXTF9ETF9MRUQgICAgICAgICAgICgxIDw8IDE5KQotCi0jZGVmaW5lIElXTF9ETF9SQVRFICAgICAgICAgICgxIDw8IDIwKQotCi0jZGVmaW5lIElXTF9ETF9DQUxJQiAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBJV0xfRExfV0VQICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgSVdMX0RMX1RYICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIElXTF9ETF9SWCAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBJV0xfRExfSVNSICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgSVdMX0RMX0hUICAgICAgICAgICAgKDEgPDwgMjYpCi0jZGVmaW5lIElXTF9ETF9JTyAgICAgICAgICAgICgxIDw8IDI3KQotI2RlZmluZSBJV0xfRExfMTFIICAgICAgICAgICAoMSA8PCAyOCkKLQotI2RlZmluZSBJV0xfRExfU1RBVFMgICAgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgSVdMX0RMX1RYX1JFUExZICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElXTF9ETF9RT1MgICAgICAgICAgICgxIDw8IDMxKQotCi0jZGVmaW5lIElXTF9FUlJPUihmLCBhLi4uKSBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogIiBmLCAjIyBhKQotI2RlZmluZSBJV0xfV0FSTklORyhmLCBhLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lORk8oZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9JTkZPLCBmLCAjIyBhKQotCi0jZGVmaW5lIElXTF9ERUJVR19NQUM4MDIxMShmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9NQUM4MDIxMSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RFTVAoZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1RFTVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19TQ0FOKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9TQ0FOLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUlgoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfUlgsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWChmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9UWCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lTUihmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX0lTUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0xFRChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0xFRCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1dFUChmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX1dFUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0hDKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSE9TVF9DT01NQU5ELCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfQ0FMSUIoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9DQUxJQiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0ZXKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfRlcsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SRl9LSUxMKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0RST1AoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9EUk9QLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRFJPUF9MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX0RST1AsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BUChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0FQLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhQT1dFUihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1RYUE9XRVIsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19JTyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0lPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUkFURShmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1JBVEUsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQVRFX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfUkFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX05PVElGKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfTk9USUYsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BU1NPQyhmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19BU1NPQ19MSU1JVChmLCBhLi4uKSBcCi0JSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9BU1NPQyB8IElXTF9ETF9JTkZPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfSFQoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IVCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfU1RBVFMsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19TVEFUU19MSU1JVChmLCBhLi4uKSBJV0xfREVCVUdfTElNSVQoSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFkoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1FPUyhmLCBhLi4uKSAgIElXTF9ERUJVRyhJV0xfRExfUU9TLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUkFESU8oZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfUkFESU8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19QT1dFUihmLCBhLi4uKSAgSVdMX0RFQlVHKElXTF9ETF9QT1dFUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHXzExSChmLCBhLi4uKSAgSVdMX0RFQlVHKElXTF9ETF8xMUgsIGYsICMjIGEpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1maC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1maC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Y2UyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWZoLmgKQEAgLTAsMCArMSwxODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgorICoKKyAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKKyAqIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKiBCU0QgTElDRU5TRQorICoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX2l3bF8zOTQ1X2ZoX2hfXworI2RlZmluZSBfX2l3bF8zOTQ1X2ZoX2hfXworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogaXdsMzk0NSBGbG93IEhhbmRsZXIgRGVmaW5pdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKgorICogVGhpcyBJL08gYXJlYSBpcyBkaXJlY3RseSByZWFkL3dyaXRhYmxlIGJ5IGRyaXZlciAoZS5nLiBMaW51eCB1c2VzIHdyaXRlbCgpKQorICogQWRkcmVzc2VzIGFyZSBvZmZzZXRzIGZyb20gZGV2aWNlJ3MgUENJIGhhcmR3YXJlIGJhc2UgYWRkcmVzcy4KKyAqLworI2RlZmluZSBGSDM5X01FTV9MT1dFUl9CT1VORCAgICAgICAgICAgICAgICAgICAoMHgwODAwKQorI2RlZmluZSBGSDM5X01FTV9VUFBFUl9CT1VORCAgICAgICAgICAgICAgICAgICAoMHgxMDAwKQorCisjZGVmaW5lIEZIMzlfQ0JDQ19UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHgxNDApCisjZGVmaW5lIEZIMzlfVEZEQl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHgxODApCisjZGVmaW5lIEZIMzlfUkNTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg0MDApCisjZGVmaW5lIEZIMzlfUlNTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg0YzApCisjZGVmaW5lIEZIMzlfVENTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg1MDApCisjZGVmaW5lIEZIMzlfVFNTUl9UQUJMRQkJKEZIMzlfTUVNX0xPV0VSX0JPVU5EICsgMHg2ODApCisKKy8qIFRGREIgKFRyYW5zbWl0IEZyYW1lIEJ1ZmZlciBEZXNjcmlwdG9yKSAqLworI2RlZmluZSBGSDM5X1RGREIoX2NoLCBidWYpCQkJKEZIMzlfVEZEQl9UQUJMRSArIFwKKwkJCQkJCSAoKF9jaCkgKiAyICsgKGJ1ZikpICogMHgyOCkKKyNkZWZpbmUgRkgzOV9URkRCX0NITkxfQlVGX0NUUkxfUkVHKF9jaCkJKEZIMzlfVEZEQl9UQUJMRSArIDB4NTAgKiAoX2NoKSkKKworLyogQ0JDQyBjaGFubmVsIGlzIFswLDJdICovCisjZGVmaW5lIEZIMzlfQ0JDQyhfY2gpCQkoRkgzOV9DQkNDX1RBQkxFICsgKF9jaCkgKiAweDgpCisjZGVmaW5lIEZIMzlfQ0JDQ19DVFJMKF9jaCkJKEZIMzlfQ0JDQyhfY2gpICsgMHgwMCkKKyNkZWZpbmUgRkgzOV9DQkNDX0JBU0UoX2NoKQkoRkgzOV9DQkNDKF9jaCkgKyAweDA0KQorCisvKiBSQ1NSIGNoYW5uZWwgaXMgWzAsMl0gKi8KKyNkZWZpbmUgRkgzOV9SQ1NSKF9jaCkJCQkoRkgzOV9SQ1NSX1RBQkxFICsgKF9jaCkgKiAweDQwKQorI2RlZmluZSBGSDM5X1JDU1JfQ09ORklHKF9jaCkJCShGSDM5X1JDU1IoX2NoKSArIDB4MDApCisjZGVmaW5lIEZIMzlfUkNTUl9SQkRfQkFTRShfY2gpCQkoRkgzOV9SQ1NSKF9jaCkgKyAweDA0KQorI2RlZmluZSBGSDM5X1JDU1JfV1BUUihfY2gpCQkoRkgzOV9SQ1NSKF9jaCkgKyAweDIwKQorI2RlZmluZSBGSDM5X1JDU1JfUlBUUl9BRERSKF9jaCkJKEZIMzlfUkNTUihfY2gpICsgMHgyNCkKKworI2RlZmluZSBGSDM5X1JTQ1NSX0NITkwwX1dQVFIJCShGSDM5X1JDU1JfV1BUUigwKSkKKworLyogUlNTUiAqLworI2RlZmluZSBGSDM5X1JTU1JfQ1RSTAkJCShGSDM5X1JTU1JfVEFCTEUgKyAweDAwMCkKKyNkZWZpbmUgRkgzOV9SU1NSX1NUQVRVUwkJKEZIMzlfUlNTUl9UQUJMRSArIDB4MDA0KQorCisvKiBUQ1NSICovCisjZGVmaW5lIEZIMzlfVENTUihfY2gpCQkJKEZIMzlfVENTUl9UQUJMRSArIChfY2gpICogMHgyMCkKKyNkZWZpbmUgRkgzOV9UQ1NSX0NPTkZJRyhfY2gpCQkoRkgzOV9UQ1NSKF9jaCkgKyAweDAwKQorI2RlZmluZSBGSDM5X1RDU1JfQ1JFRElUKF9jaCkJCShGSDM5X1RDU1IoX2NoKSArIDB4MDQpCisjZGVmaW5lIEZIMzlfVENTUl9CVUZGX1NUVFMoX2NoKQkoRkgzOV9UQ1NSKF9jaCkgKyAweDA4KQorCisvKiBUU1NSICovCisjZGVmaW5lIEZIMzlfVFNTUl9DQkJfQkFTRSAgICAgICAgKEZIMzlfVFNTUl9UQUJMRSArIDB4MDAwKQorI2RlZmluZSBGSDM5X1RTU1JfTVNHX0NPTkZJRyAgICAgIChGSDM5X1RTU1JfVEFCTEUgKyAweDAwOCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX1NUQVRVUyAgICAgICAoRkgzOV9UU1NSX1RBQkxFICsgMHgwMTApCisKKworLyogREJNICovCisKKyNkZWZpbmUgRkgzOV9TUlZDX0NITkwgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDYpCisKKyNkZWZpbmUgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX1JCRENfU0laRSAgICAgKDIwKQorI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19QT1NfSVJRX1JCVEggICAgICAoNCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19CSVRfV1JfU1RUU19FTiAgICAoMHgwODAwMDAwMCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5fRU5BQkxFICAgICAgICAoMHg4MDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfUkRSQkRfRU5fRU5BQkxFICAgICAgICAgICAoMHgyMDAwMDAwMCkKKworI2RlZmluZSBGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjgJCSgweDAxMDAwMDAwKQorCisjZGVmaW5lIEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9JUlFfREVTVF9JTlRfSE9TVAkJKDB4MDAwMDEwMDApCisKKyNkZWZpbmUgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX0ZICQkJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX1RYRgkJKDB4MDAwMDAwMDApCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9EUklWRVIJCSgweDAwMDAwMDAxKQorCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0RJU0FCTEVfVkFMCSgweDAwMDAwMDAwKQorI2RlZmluZSBGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMCSgweDAwMDAwMDA4KQorCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX0hPU1RfSUZURkQJCSgweDAwMjAwMDAwKQorCisjZGVmaW5lIEZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX1JUQ19OT0lOVAkJKDB4MDAwMDAwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DSE5MX1BBVVNFCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0RNQV9DSE5MX0VOQUJMRQkJKDB4ODAwMDAwMDApCisKKyNkZWZpbmUgRkgzOV9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfVkFMX1RGREJfVkFMSUQJCSgweDAwMDA0MDAwKQorCisjZGVmaW5lIEZIMzlfVENTUl9DSE5MX1RYX0JVRl9TVFNfUkVHX0JJVF9URkRCX1dQVFIJCSgweDAwMDAwMDAxKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTgkoMHhGRjAwMDAwMCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9UWFBEX09OCSgweDAwRkYwMDAwKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjhCCSgweDAwMDAwNDAwKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVEZEX09OCQkoMHgwMDAwMDEwMCkKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9DQkJfT04JCSgweDAwMDAwMDgwKQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUlNQX1dBSVRfVEgJKDB4MDAwMDAwMjApCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfUlNQX1dBSVRfVEgJCSgweDAwMDAwMDA1KQorCisjZGVmaW5lIEZIMzlfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9CVUZTX0VNUFRZKF9jaCkJKEJJVChfY2gpIDw8IDI0KQorI2RlZmluZSBGSDM5X1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfTk9fUEVORF9SRVEoX2NoKQkoQklUKF9jaCkgPDwgMTYpCisKKyNkZWZpbmUgRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRShfY2gpIFwKKwkoRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfQklUX0JVRlNfRU1QVFkoX2NoKSB8IFwKKwkgRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaCkpCisKKyNkZWZpbmUgRkgzOV9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUJCQkoMHgwMTAwMDAwMCkKKworc3RydWN0IGl3bDM5NDVfdGZkX3RiIHsKKwlfX2xlMzIgYWRkcjsKKwlfX2xlMzIgbGVuOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBpd2wzOTQ1X3RmZCB7CisJX19sZTMyIGNvbnRyb2xfZmxhZ3M7CisJc3RydWN0IGl3bDM5NDVfdGZkX3RiIHRic1s0XTsKKwl1OCBfX3BhZFsyOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisjZW5kaWYgLyogX19pd2xfMzk0NV9maF9oX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCmluZGV4IDk0ZWEwZTYuLjczZjkzYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OSw3NyArNjksMjYgQEAKICNpZm5kZWYgX19pd2xfMzk0NV9od19fCiAjZGVmaW5lIF9faXdsXzM5NDVfaHdfXwogCisjaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgorCiAvKgogICogdUNvZGUgcXVldWUgbWFuYWdlbWVudCBkZWZpbml0aW9ucyAuLi4KICAqIFF1ZXVlICM0IGlzIHRoZSBjb21tYW5kIHF1ZXVlIGZvciAzOTQ1IGFuZCA0OTY1LgogICovCi0jZGVmaW5lIElXTF9DTURfUVVFVUVfTlVNICAgICAgIDQKLQotLyogVHggcmF0ZXMgKi8KLSNkZWZpbmUgSVdMX0NDS19SQVRFUyA0Ci0jZGVmaW5lIElXTF9PRkRNX1JBVEVTIDgKLSNkZWZpbmUgSVdMX0hUX1JBVEVTIDAKLSNkZWZpbmUgSVdMX01BWF9SQVRFUyAgKElXTF9DQ0tfUkFURVMrSVdMX09GRE1fUkFURVMrSVdMX0hUX1JBVEVTKQorI2RlZmluZSBJV0xfQ01EX1FVRVVFX05VTQk0CiAKIC8qIFRpbWUgY29uc3RhbnRzICovCiAjZGVmaW5lIFNIT1JUX1NMT1RfVElNRSA5CiAjZGVmaW5lIExPTkdfU0xPVF9USU1FIDIwCiAKIC8qIFJTU0kgdG8gZEJtICovCi0jZGVmaW5lIElXTF9SU1NJX09GRlNFVAk5NQorI2RlZmluZSBJV0wzOV9SU1NJX09GRlNFVAk5NQogCiAvKgogICogRUVQUk9NIHJlbGF0ZWQgY29uc3RhbnRzLCBlbnVtcywgYW5kIHN0cnVjdHVyZXMuCiAgKi8KLQotLyoKLSAqIEVFUFJPTSBhY2Nlc3MgdGltZSB2YWx1ZXM6Ci0gKgotICogRHJpdmVyIGluaXRpYXRlcyBFRVBST00gcmVhZCBieSB3cml0aW5nIGJ5dGUgYWRkcmVzcyA8PCAxIHRvIENTUl9FRVBST01fUkVHLAotICogICB0aGVuIGNsZWFyaW5nICh3aXRoIHN1YnNlcXVlbnQgcmVhZC9tb2RpZnkvd3JpdGUpIENTUl9FRVBST01fUkVHIGJpdAotICogICBDU1JfRUVQUk9NX1JFR19CSVRfQ01EICgweDIpLgotICogRHJpdmVyIHRoZW4gcG9sbHMgQ1NSX0VFUFJPTV9SRUcgZm9yIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLICgweDEpLgotICogV2hlbiBwb2xsaW5nLCB3YWl0IDEwIHVTZWMgYmV0d2VlbiBwb2xsaW5nIGxvb3BzLCB1cCB0byBhIG1heGltdW0gNTAwMCB1U2VjLgotICogRHJpdmVyIHJlYWRzIDE2LWJpdCB2YWx1ZSBmcm9tIGJpdHMgMzEtMTYgb2YgQ1NSX0VFUFJPTV9SRUcuCi0gKi8KLSNkZWZpbmUgSVdMX0VFUFJPTV9BQ0NFU1NfVElNRU9VVAk1MDAwIC8qIHVTZWMgKi8KLQotLyoKLSAqIFJlZ3VsYXRvcnkgY2hhbm5lbCB1c2FnZSBmbGFncyBpbiBFRVBST00gc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbC5mbGFncy4KLSAqCi0gKiBJQlNTIGFuZC9vciBBUCBvcGVyYXRpb24gaXMgYWxsb3dlZCAqb25seSogb24gdGhvc2UgY2hhbm5lbHMgd2l0aAotICogKFZBTElEICYmIElCU1MgJiYgQUNUSVZFICYmICFSQURBUikuICBUaGlzIHJlc3RyaWN0aW9uIGlzIGluIHBsYWNlIGJlY2F1c2UKLSAqIFJBREFSIGRldGVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAzOTQ1IGRyaXZlciwgYnV0IGlzIGEKLSAqIHJlcXVpcmVtZW50IGZvciBlc3RhYmxpc2hpbmcgYSBuZXcgbmV0d29yayBmb3IgbGVnYWwgb3BlcmF0aW9uIG9uIGNoYW5uZWxzCi0gKiByZXF1aXJpbmcgUkFEQVIgZGV0ZWN0aW9uIG9yIHJlc3RyaWN0aW5nIEFDVElWRSBzY2FubmluZy4KLSAqCi0gKiBOT1RFOiAgIldJREUiIGZsYWcgaW5kaWNhdGVzIHRoYXQgMjAgTUh6IGNoYW5uZWwgaXMgc3VwcG9ydGVkOwotICogICAgICAgIDM5NDUgZG9lcyBub3Qgc3VwcG9ydCBGQVQgNDAgTUh6LXdpZGUgY2hhbm5lbHMuCi0gKgotICogTk9URTogIFVzaW5nIGEgY2hhbm5lbCBpbmFwcHJvcHJpYXRlbHkgd2lsbCByZXN1bHQgaW4gYSB1Q29kZSBlcnJvciEKLSAqLwotZW51bSB7Ci0JRUVQUk9NX0NIQU5ORUxfVkFMSUQgPSAoMSA8PCAwKSwJLyogdXNhYmxlIGZvciB0aGlzIFNLVS9nZW8gKi8KLQlFRVBST01fQ0hBTk5FTF9JQlNTID0gKDEgPDwgMSksCQkvKiB1c2FibGUgYXMgYW4gSUJTUyBjaGFubmVsICovCi0JLyogQml0IDIgUmVzZXJ2ZWQgKi8KLQlFRVBST01fQ0hBTk5FTF9BQ1RJVkUgPSAoMSA8PCAzKSwJLyogYWN0aXZlIHNjYW5uaW5nIGFsbG93ZWQgKi8KLQlFRVBST01fQ0hBTk5FTF9SQURBUiA9ICgxIDw8IDQpLAkvKiByYWRhciBkZXRlY3Rpb24gcmVxdWlyZWQgKi8KLQlFRVBST01fQ0hBTk5FTF9XSURFID0gKDEgPDwgNSksCQkvKiAyMCBNSHogY2hhbm5lbCBva2F5ICovCi0JLyogQml0IDYgUmVzZXJ2ZWQgKHdhcyBOYXJyb3cgQ2hhbm5lbCkgKi8KLQlFRVBST01fQ0hBTk5FTF9ERlMgPSAoMSA8PCA3KSwJLyogZHluYW1pYyBmcmVxIHNlbGVjdGlvbiBjYW5kaWRhdGUgKi8KLX07Ci0KLS8qIFNLVSBDYXBhYmlsaXRpZXMgKi8KLSNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfU1dfUkZfS0lMTF9FTkFCTEUgICAgICAgICAgICAgICAgKDEgPDwgMCkKLSNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfSFdfUkZfS0lMTF9FTkFCTEUgICAgICAgICAgICAgICAgKDEgPDwgMSkKICNkZWZpbmUgRUVQUk9NX1NLVV9DQVBfT1BfTU9ERV9NUkMgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKIAotLyogKnJlZ3VsYXRvcnkqIGNoYW5uZWwgZGF0YSBmcm9tIGVlcHJvbSwgb25lIGZvciBlYWNoIGNoYW5uZWwgKi8KLXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIHsKLQl1OCBmbGFnczsJCS8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwotCXM4IG1heF9wb3dlcl9hdmc7CS8qIG1heCBwb3dlciAoZEJtKSBvbiB0aGlzIGNobmwsIGxpbWl0IDMxICovCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogLyoKICAqIE1hcHBpbmcgb2YgYSBUeCBwb3dlciBsZXZlbCwgYXQgZmFjdG9yeSBjYWxpYnJhdGlvbiB0ZW1wZXJhdHVyZSwKICAqICAgdG8gYSByYWRpby9EU1AgZ2FpbiB0YWJsZSBpbmRleC4KQEAgLTIzMyw3ICsxODIsNyBAQAogICogMi40IEdIeiBjaGFubmVscyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQKICAqLwogCXUxNiBiYW5kXzFfY291bnQ7CS8qIGFicy5vZnM6IDE5NiAqLwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGJhbmRfMV9jaGFubmVsc1sxNF07ICAvKiBhYnMub2ZzOiAxOTYgKi8KKwlzdHJ1Y3QgaXdsX2VlcHJvbV9jaGFubmVsIGJhbmRfMV9jaGFubmVsc1sxNF07ICAvKiBhYnMub2ZzOiAxOTggKi8KIAogLyoKICAqIDQuOSBHSHogY2hhbm5lbHMgMTgzLCAxODQsIDE4NSwgMTg3LCAxODgsIDE4OSwgMTkyLCAxOTYsCkBAIC0yNDEsMjggKzE5MCwyOCBAQAogICogKDQ5MTUtNTA4ME1IeikgKG5vbmUgb2YgdGhlc2UgaXMgZXZlciBzdXBwb3J0ZWQpCiAgKi8KIAl1MTYgYmFuZF8yX2NvdW50OwkvKiBhYnMub2ZzOiAyMjYgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzJfY2hhbm5lbHNbMTNdOyAgLyogYWJzLm9mczogMjI4ICovCisJc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCBiYW5kXzJfY2hhbm5lbHNbMTNdOyAgLyogYWJzLm9mczogMjI4ICovCiAKIC8qCiAgKiA1LjIgR0h6IGNoYW5uZWxzIDM0LCAzNiwgMzgsIDQwLCA0MiwgNDQsIDQ2LCA0OCwgNTIsIDU2LCA2MCwgNjQKICAqICg1MTcwLTUzMjBNSHopCiAgKi8KIAl1MTYgYmFuZF8zX2NvdW50OwkvKiBhYnMub2ZzOiAyNTQgKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb21fY2hhbm5lbCBiYW5kXzNfY2hhbm5lbHNbMTJdOyAgLyogYWJzLm9mczogMjU2ICovCisJc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCBiYW5kXzNfY2hhbm5lbHNbMTJdOyAgLyogYWJzLm9mczogMjU2ICovCiAKIC8qCiAgKiA1LjUgR0h6IGNoYW5uZWxzIDEwMCwgMTA0LCAxMDgsIDExMiwgMTE2LCAxMjAsIDEyNCwgMTI4LCAxMzIsIDEzNiwgMTQwCiAgKiAoNTUwMC01NzAwTUh6KQogICovCiAJdTE2IGJhbmRfNF9jb3VudDsJLyogYWJzLm9mczogMjgwICovCi0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgYmFuZF80X2NoYW5uZWxzWzExXTsgIC8qIGFicy5vZnM6IDI4MiAqLworCXN0cnVjdCBpd2xfZWVwcm9tX2NoYW5uZWwgYmFuZF80X2NoYW5uZWxzWzExXTsgIC8qIGFicy5vZnM6IDI4MiAqLwogCiAvKgogICogNS43IEdIeiBjaGFubmVscyAxNDUsIDE0OSwgMTUzLCAxNTcsIDE2MSwgMTY1CiAgKiAoNTcyNS01ODI1TUh6KQogICovCiAJdTE2IGJhbmRfNV9jb3VudDsJLyogYWJzLm9mczogMzA0ICovCi0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgYmFuZF81X2NoYW5uZWxzWzZdOyAgLyogYWJzLm9mczogMzA2ICovCisJc3RydWN0IGl3bF9lZXByb21fY2hhbm5lbCBiYW5kXzVfY2hhbm5lbHNbNl07ICAvKiBhYnMub2ZzOiAzMDYgKi8KIAogCXU4IHJlc2VydmVkOVsxOTRdOwogCkBAIC0yNzYsMTI1ICsyMjUsMTUgQEAKIAl1OCByZXNlcnZlZDE2WzE3Ml07CS8qIGZpbGwgb3V0IHRvIGZ1bGwgMTAyNCBieXRlIGJsb2NrICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotI2RlZmluZSBJV0xfRUVQUk9NX0lNQUdFX1NJWkUgMTAyNAorI2RlZmluZSBJV0wzOTQ1X0VFUFJPTV9JTUdfU0laRSAxMDI0CiAKIC8qIEVuZCBvZiBFRVBST00gKi8KIAotCi0jaW5jbHVkZSAiaXdsLTM5NDUtY29tbWFuZHMuaCIKLQotI2RlZmluZSBQQ0lfTElOS19DVFJMICAgICAgMHgwRjAKLSNkZWZpbmUgUENJX1BPV0VSX1NPVVJDRSAgIDB4MEM4Ci0jZGVmaW5lIFBDSV9SRUdfV1VNOCAgICAgICAweDBFOAotI2RlZmluZSBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCAgICAgICAgICgweDgwMDAwMDAwKQotCi0vKj09PSBGSCAoZGF0YSBGbG93IEhhbmRsZXIpID09PSovCi0jZGVmaW5lIEZIX0JBU0UgICAgICgweDgwMCkKLQotI2RlZmluZSBGSF9DQkNDX1RBQkxFICAgICAgICAgICAoRkhfQkFTRSsweDE0MCkKLSNkZWZpbmUgRkhfVEZEQl9UQUJMRSAgICAgICAgICAgKEZIX0JBU0UrMHgxODApCi0jZGVmaW5lIEZIX1JDU1JfVEFCTEUgICAgICAgICAgIChGSF9CQVNFKzB4NDAwKQotI2RlZmluZSBGSF9SU1NSX1RBQkxFICAgICAgICAgICAoRkhfQkFTRSsweDRjMCkKLSNkZWZpbmUgRkhfVENTUl9UQUJMRSAgICAgICAgICAgKEZIX0JBU0UrMHg1MDApCi0jZGVmaW5lIEZIX1RTU1JfVEFCTEUgICAgICAgICAgIChGSF9CQVNFKzB4NjgwKQotCi0vKiBURkRCIChUcmFuc21pdCBGcmFtZSBCdWZmZXIgRGVzY3JpcHRvcikgKi8KLSNkZWZpbmUgRkhfVEZEQihfY2hhbm5lbCwgYnVmKSBcCi0JKEZIX1RGREJfVEFCTEUrKChfY2hhbm5lbCkqMisoYnVmKSkqMHgyOCkKLSNkZWZpbmUgQUxNX0ZIX1RGREJfQ0hOTF9CVUZfQ1RSTF9SRUcoX2NoYW5uZWwpIFwKLQkoRkhfVEZEQl9UQUJMRSArIDB4NTAgKiBfY2hhbm5lbCkKLS8qIENCQ0MgX2NoYW5uZWwgaXMgWzAsMl0gKi8KLSNkZWZpbmUgRkhfQ0JDQyhfY2hhbm5lbCkgICAgICAgICAgIChGSF9DQkNDX1RBQkxFKyhfY2hhbm5lbCkqMHg4KQotI2RlZmluZSBGSF9DQkNDX0NUUkwoX2NoYW5uZWwpICAgICAgKEZIX0NCQ0MoX2NoYW5uZWwpKzB4MDApCi0jZGVmaW5lIEZIX0NCQ0NfQkFTRShfY2hhbm5lbCkgICAgICAoRkhfQ0JDQyhfY2hhbm5lbCkrMHgwNCkKLQotLyogUkNTUiBfY2hhbm5lbCBpcyBbMCwyXSAqLwotI2RlZmluZSBGSF9SQ1NSKF9jaGFubmVsKSAgICAgICAgICAgKEZIX1JDU1JfVEFCTEUrKF9jaGFubmVsKSoweDQwKQotI2RlZmluZSBGSF9SQ1NSX0NPTkZJRyhfY2hhbm5lbCkgICAgKEZIX1JDU1IoX2NoYW5uZWwpKzB4MDApCi0jZGVmaW5lIEZIX1JDU1JfUkJEX0JBU0UoX2NoYW5uZWwpICAoRkhfUkNTUihfY2hhbm5lbCkrMHgwNCkKLSNkZWZpbmUgRkhfUkNTUl9XUFRSKF9jaGFubmVsKSAgICAgIChGSF9SQ1NSKF9jaGFubmVsKSsweDIwKQotI2RlZmluZSBGSF9SQ1NSX1JQVFJfQUREUihfY2hhbm5lbCkgKEZIX1JDU1IoX2NoYW5uZWwpKzB4MjQpCi0KLSNkZWZpbmUgRkhfUlNDU1JfQ0hOTDBfV1BUUiAgICAgICAgKEZIX1JDU1JfV1BUUigwKSkKLQotLyogUlNTUiAqLwotI2RlZmluZSBGSF9SU1NSX0NUUkwgICAgICAgICAgICAoRkhfUlNTUl9UQUJMRSsweDAwMCkKLSNkZWZpbmUgRkhfUlNTUl9TVEFUVVMgICAgICAgICAgKEZIX1JTU1JfVEFCTEUrMHgwMDQpCi0jZGVmaW5lIEZIX1JTU1JfQ0hOTDBfUlhfU1RBVFVTX0NITkxfSURMRQkoMHgwMTAwMDAwMCkKLS8qIFRDU1IgKi8KLSNkZWZpbmUgRkhfVENTUihfY2hhbm5lbCkgICAgICAgICAgIChGSF9UQ1NSX1RBQkxFKyhfY2hhbm5lbCkqMHgyMCkKLSNkZWZpbmUgRkhfVENTUl9DT05GSUcoX2NoYW5uZWwpICAgIChGSF9UQ1NSKF9jaGFubmVsKSsweDAwKQotI2RlZmluZSBGSF9UQ1NSX0NSRURJVChfY2hhbm5lbCkgICAgKEZIX1RDU1IoX2NoYW5uZWwpKzB4MDQpCi0jZGVmaW5lIEZIX1RDU1JfQlVGRl9TVFRTKF9jaGFubmVsKSAoRkhfVENTUihfY2hhbm5lbCkrMHgwOCkKLS8qIFRTU1IgKi8KLSNkZWZpbmUgRkhfVFNTUl9DQkJfQkFTRSAgICAgICAgKEZIX1RTU1JfVEFCTEUrMHgwMDApCi0jZGVmaW5lIEZIX1RTU1JfTVNHX0NPTkZJRyAgICAgIChGSF9UU1NSX1RBQkxFKzB4MDA4KQotI2RlZmluZSBGSF9UU1NSX1RYX1NUQVRVUyAgICAgICAoRkhfVFNTUl9UQUJMRSsweDAxMCkKLQotCi0vKiBEQk0gKi8KLQotI2RlZmluZSBBTE1fRkhfU1JWQ19DSE5MICAgICAgICAgICAgICAgICAgICAgICAgICAgICg2KQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX1JCRENfU0laRSAgICAgKDIwKQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1BPU19JUlFfUkJUSCAgICAgICg0KQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfQklUX1dSX1NUVFNfRU4gICAgKDB4MDgwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5fRU5BQkxFICAgICAgICAoMHg4MDAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SRFJCRF9FTl9FTkFCTEUgICAgICAgICAgICgweDIwMDAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4ICAgICAgICAgKDB4MDEwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfSVJRX0RFU1RfSU5UX0hPU1QgICAgICAgICAoMHgwMDAwMTAwMCkKLQotI2RlZmluZSBBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9GSCAgICAgICAgICAgICAgICgweDAwMDAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX1RYRiAgICAgICAgICAgICAgKDB4MDAwMDAwMDApCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX01TR19NT0RFX0RSSVZFUiAgICAgICAgICAgKDB4MDAwMDAwMDEpCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9ESVNBQkxFX1ZBTCAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMICAgICAoMHgwMDAwMDAwOCkKLQotI2RlZmluZSBBTE1fRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9DSVJRX0hPU1RfSUZURkQgICAgICAgICAgICgweDAwMjAwMDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfUlRDX05PSU5UICAgICAgICAgICAgKDB4MDAwMDAwMDApCi0KLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfUEFVU0UgICAgICAgICAgICAoMHgwMDAwMDAwMCkKLSNkZWZpbmUgQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFICAgICAgICAgICAoMHg4MDAwMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfVENTUl9DSE5MX1RYX0JVRl9TVFNfUkVHX1ZBTF9URkRCX1ZBTElEICAgICAgICAgICgweDAwMDA0MDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UQ1NSX0NITkxfVFhfQlVGX1NUU19SRUdfQklUX1RGREJfV1BUUiAgICAgICAgICAgKDB4MDAwMDAwMDEpCi0KLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1NOT09QX1JEX1RYUERfT04gICAgICAoMHhGRjAwMDAwMCkKLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX1RYUERfT04gICAgICAoMHgwMEZGMDAwMCkKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjhCICAgICgweDAwMDAwNDAwKQotCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gICAgICAgKDB4MDAwMDAxMDApCi0jZGVmaW5lIEFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9DQkJfT04gICAgICAgKDB4MDAwMDAwODApCi0KLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JTUF9XQUlUX1RIICAgICAoMHgwMDAwMDAyMCkKLSNkZWZpbmUgQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIICAgICAgICAgICAoMHgwMDAwMDAwNSkKLQotI2RlZmluZSBBTE1fVEJfTUFYX0JZVEVTX0NPVU5UICAgICAgKDB4RkZGMCkKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9CVUZTX0VNUFRZKF9jaGFubmVsKSBcCi0JKCgxTFUgPDwgX2NoYW5uZWwpIDw8IDI0KQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9OT19QRU5EX1JFUShfY2hhbm5lbCkgXAotCSgoMUxVIDw8IF9jaGFubmVsKSA8PCAxNikKLQotI2RlZmluZSBBTE1fRkhfVFNTUl9UWF9TVEFUVVNfUkVHX01TS19DSE5MX0lETEUoX2NoYW5uZWwpIFwKLQkoQUxNX0ZIX1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfQlVGU19FTVBUWShfY2hhbm5lbCkgfCBcCi0JIEFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfQklUX05PX1BFTkRfUkVRKF9jaGFubmVsKSkKICNkZWZpbmUgUENJX0NGR19SRVZfSURfQklUX0JBU0lDX1NLVSAgICAgICAgICAgICAgICAoMHg0MCkJLyogYml0IDYgICAgKi8KICNkZWZpbmUgUENJX0NGR19SRVZfSURfQklUX1JUUCAgICAgICAgICAgICAgICAgICAgICAoMHg4MCkJLyogYml0IDcgICAgKi8KIAogI2RlZmluZSBURkRfUVVFVUVfTUlOICAgICAgICAgICAwCi0jZGVmaW5lIFRGRF9RVUVVRV9NQVggICAgICAgICAgIDYKLSNkZWZpbmUgVEZEX1FVRVVFX1NJWkVfTUFYICAgICAgKDI1NikKKyNkZWZpbmUgVEZEX1FVRVVFX01BWCAgICAgICAgICAgNQkvKiA0IERBVEEgKyAxIENNRCAqLwogCiAjZGVmaW5lIElXTF9OVU1fU0NBTl9SQVRFUyAgICAgICAgICgyKQogCkBAIC00MTYsMTIgKzI1NSw2IEBACiAjZGVmaW5lIFRGRF9DVExfUEFEX1NFVChuKSAgICAgICAgIChuIDw8IDI4KQogI2RlZmluZSBURkRfQ1RMX1BBRF9HRVQoY3RsKSAgICAgICAoY3RsID4+IDI4KQogCi0jZGVmaW5lIFRGRF9UWF9DTURfU0xPVFMgMjU2Ci0jZGVmaW5lIFRGRF9DTURfU0xPVFMgMzIKLQotI2RlZmluZSBURkRfTUFYX1BBWUxPQURfU0laRSAoc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgLSBcCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kX21ldGEpKQotCiAvKgogICogUlggcmVsYXRlZCBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMKICAqLwpAQCAtNDMwLDQ1ICsyNjMsMzUgQEAKIAogLyogU2l6ZXMgYW5kIGFkZHJlc3NlcyBmb3IgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgbWVtb3J5IChTUkFNKSBpbgogICogMzk0NSdzIGVtYmVkZGVkIHByb2Nlc3Nvci4gIERyaXZlciBhY2Nlc3MgaXMgdmlhIEhCVVNfVEFSR19NRU1fKiByZWdzLiAqLwotI2RlZmluZSBSVENfSU5TVF9MT1dFUl9CT1VORAkJCSgweDAwMDAwMCkKLSNkZWZpbmUgQUxNX1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMTQwMDApCisjZGVmaW5lIElXTDM5X1JUQ19JTlNUX0xPV0VSX0JPVU5ECQkoMHgwMDAwMDApCisjZGVmaW5lIElXTDM5X1JUQ19JTlNUX1VQUEVSX0JPVU5ECQkoMHgwMTQwMDApCiAKLSNkZWZpbmUgUlRDX0RBVEFfTE9XRVJfQk9VTkQJCQkoMHg4MDAwMDApCi0jZGVmaW5lIEFMTV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODA4MDAwKQorI2RlZmluZSBJV0wzOV9SVENfREFUQV9MT1dFUl9CT1VORAkJKDB4ODAwMDAwKQorI2RlZmluZSBJV0wzOV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODA4MDAwKQogCi0jZGVmaW5lIEFMTV9SVENfSU5TVF9TSVpFIChBTE1fUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBSVENfSU5TVF9MT1dFUl9CT1VORCkKLSNkZWZpbmUgQUxNX1JUQ19EQVRBX1NJWkUgKEFMTV9SVENfREFUQV9VUFBFUl9CT1VORCAtIFJUQ19EQVRBX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0wzOV9SVENfSU5TVF9TSVpFIChJV0wzOV9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFwKKwkJCQlJV0wzOV9SVENfSU5TVF9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMMzlfUlRDX0RBVEFfU0laRSAoSVdMMzlfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMMzlfUlRDX0RBVEFfTE9XRVJfQk9VTkQpCiAKLSNkZWZpbmUgSVdMX01BWF9JTlNUX1NJWkUgQUxNX1JUQ19JTlNUX1NJWkUKLSNkZWZpbmUgSVdMX01BWF9EQVRBX1NJWkUgQUxNX1JUQ19EQVRBX1NJWkUKKyNkZWZpbmUgSVdMMzlfTUFYX0lOU1RfU0laRSBJV0wzOV9SVENfSU5TVF9TSVpFCisjZGVmaW5lIElXTDM5X01BWF9EQVRBX1NJWkUgSVdMMzlfUlRDX0RBVEFfU0laRQogCiAvKiBTaXplIG9mIHVDb2RlIGluc3RydWN0aW9uIG1lbW9yeSBpbiBib290c3RyYXAgc3RhdGUgbWFjaGluZSAqLwotI2RlZmluZSBJV0xfTUFYX0JTTV9TSVpFIEFMTV9SVENfSU5TVF9TSVpFCisjZGVmaW5lIElXTDM5X01BWF9CU01fU0laRSBJV0wzOV9SVENfSU5TVF9TSVpFCiAKICNkZWZpbmUgSVdMMzlfTUFYX05VTV9RVUVVRVMJOAogCiBzdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIodTMyIGFkZHIpCiB7Ci0JcmV0dXJuIChhZGRyID49IFJUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgotCSAgICAgICAoYWRkciA8IEFMTV9SVENfREFUQV9VUFBFUl9CT1VORCk7CisJcmV0dXJuIChhZGRyID49IElXTDM5X1JUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgorCSAgICAgICAoYWRkciA8IElXTDM5X1JUQ19EQVRBX1VQUEVSX0JPVU5EKTsKIH0KIAogLyogQmFzZSBwaHlzaWNhbCBhZGRyZXNzIG9mIGl3bDM5NDVfc2hhcmVkIGlzIHByb3ZpZGVkIHRvIEZIX1RTU1JfQ0JCX0JBU0UKICAqIGFuZCAmaXdsMzk0NV9zaGFyZWQucnhfcmVhZF9wdHJbMF0gaXMgcHJvdmlkZWQgdG8gRkhfUkNTUl9SUFRSX0FERFIoMCkgKi8KIHN0cnVjdCBpd2wzOTQ1X3NoYXJlZCB7CiAJX19sZTMyIHR4X2Jhc2VfcHRyWzhdOwotCV9fbGUzMiByeF9yZWFkX3B0clszXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWVfZGF0YSB7Ci0JX19sZTMyIGFkZHI7Ci0JX19sZTMyIGxlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgewotCV9fbGUzMiBjb250cm9sX2ZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X3RmZF9mcmFtZV9kYXRhIHBhWzRdOwotCXU4IHJlc2VydmVkWzI4XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdGF0aWMgaW5saW5lIHU4IGl3bDM5NDVfaHdfZ2V0X3JhdGUoX19sZTE2IHJhdGVfbl9mbGFncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ0MGZkNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQotICoKLSAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQotICogZmlsZSBjYWxsZWQgTElDRU5TRS4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfX2l3bDM5NDVfaW9faF9fCi0jZGVmaW5lIF9faXdsMzk0NV9pb19oX18KLQotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlICJpd2wtMzk0NS1kZWJ1Zy5oIgotCi0vKgotICogSU8sIHJlZ2lzdGVyLCBhbmQgTklDIG1lbW9yeSBhY2Nlc3MgZnVuY3Rpb25zCi0gKgotICogTk9URSBvbiBuYW1pbmcgY29udmVudGlvbiBhbmQgbWFjcm8gdXNhZ2UgZm9yIHRoZXNlCi0gKgotICogQSBzaW5nbGUgXyBwcmVmaXggYmVmb3JlIGEgYW4gYWNjZXNzIGZ1bmN0aW9uIG1lYW5zIHRoYXQgbm8gc3RhdGUKLSAqIGNoZWNrIG9yIGRlYnVnIGluZm9ybWF0aW9uIGlzIHByaW50ZWQgd2hlbiB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZC4KLSAqCi0gKiBBIGRvdWJsZSBfXyBwcmVmaXggYmVmb3JlIGFuIGFjY2VzcyBmdW5jdGlvbiBtZWFucyB0aGF0IHN0YXRlIGlzIGNoZWNrZWQKLSAqIGFuZCB0aGUgY3VycmVudCBsaW5lIG51bWJlciBpcyBwcmludGVkIGluIGFkZGl0aW9uIHRvIGFueSBvdGhlciBkZWJ1ZyBvdXRwdXQuCi0gKgotICogVGhlIG5vbi1wcmVmaXhlZCBuYW1lIGlzIHRoZSAjZGVmaW5lIHRoYXQgbWFwcyB0aGUgY2FsbGVyIGludG8gYQotICogI2RlZmluZSB0aGF0IHByb3ZpZGVzIHRoZSBjYWxsZXIncyBfX0xJTkVfXyB0byB0aGUgZG91YmxlIHByZWZpeCB2ZXJzaW9uLgotICoKLSAqIElmIHlvdSB3aXNoIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGhvdXQgYW55IGRlYnVnIG9yIHN0YXRlIGNoZWNraW5nLAotICogeW91IHNob3VsZCB1c2UgdGhlIHNpbmdsZSBfIHByZWZpeCB2ZXJzaW9uIChhcyBpcyB1c2VkIGJ5IGRlcGVuZGVudCBJTwotICogcm91dGluZXMsIGZvciBleGFtcGxlIF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIgY2FsbHMgdGhlIG5vbi1jaGVjayB2ZXJzaW9uIG9mCi0gKiBfaXdsMzk0NV9yZWFkMzIuKQotICoKLSAqIFRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgKmV4dHJlbWVseSogdXNlZnVsIGluIHF1aWNrbHkgaXNvbGF0aW5nIGNvZGUgZGVsdGFzCi0gKiB3aGljaCByZXN1bHQgaW4gbWlzY29uZmlndXJhdGlvbiBvZiB0aGUgaGFyZHdhcmUgSS9PLiAgSW4gY29tYmluYXRpb24gd2l0aAotICogZ2l0LWJpc2VjdCBhbmQgdGhlIElPIGRlYnVnIGxldmVsIHlvdSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgdGhlIHNwZWNpZmljCi0gKiBjb21taXQgd2hpY2ggYnJlYWtzIHRoZSBJTyBzZXF1ZW5jZSB0byB0aGUgaGFyZHdhcmUuCi0gKgotICovCi0KLSNkZWZpbmUgX2l3bDM5NDVfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkgaW93cml0ZTMyKCh2YWwpLCAocHJpdiktPmh3X2Jhc2UgKyAob2ZzKSkKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV93cml0ZTMyKGNvbnN0IGNoYXIgKmYsIHUzMiBsLCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSB1MzIgb2ZzLCB1MzIgdmFsKQotewotCUlXTF9ERUJVR19JTygid3JpdGUzMigweCUwOFgsIDB4JTA4WCkgLSAlcyAlZFxuIiwgb2ZzLCB2YWwsIGYsIGwpOwotCV9pd2wzOTQ1X3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpOwotfQotI2RlZmluZSBpd2wzOTQ1X3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpIFwKLQlfX2l3bDM5NDVfd3JpdGUzMihfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIG9mcywgdmFsKQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV93cml0ZTMyKHByaXYsIG9mcywgdmFsKSBfaXdsMzk0NV93cml0ZTMyKHByaXYsIG9mcywgdmFsKQotI2VuZGlmCi0KLSNkZWZpbmUgX2l3bDM5NDVfcmVhZDMyKHByaXYsIG9mcykgaW9yZWFkMzIoKHByaXYpLT5od19iYXNlICsgKG9mcykpCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsMzk0NV9yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBvZnMpCi17Ci0JSVdMX0RFQlVHX0lPKCJyZWFkX2RpcmVjdDMyKDB4JTA4WCkgLSAlcyAlZFxuIiwgb2ZzLCBmLCBsKTsKLQlyZXR1cm4gX2l3bDM5NDVfcmVhZDMyKHByaXYsIG9mcyk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcmVhZDMyKHByaXYsIG9mcylfX2l3bDM5NDVfcmVhZDMyKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdiwgb2ZzKQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9yZWFkMzIocCwgbykgX2l3bDM5NDVfcmVhZDMyKHAsIG8pCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSBpbnQgX2l3bDM5NDVfcG9sbF9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIGFkZHIsCi0JCQkJdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgaSA9IDA7Ci0KLQlkbyB7Ci0JCWlmICgoX2l3bDM5NDVfcmVhZDMyKHByaXYsIGFkZHIpICYgbWFzaykgPT0gKGJpdHMgJiBtYXNrKSkKLQkJCXJldHVybiBpOwotCQl1ZGVsYXkoMTApOwotCQlpICs9IDEwOwotCX0gd2hpbGUgKGkgPCB0aW1lb3V0KTsKLQotCXJldHVybiAtRVRJTUVET1VUOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIGludCBfX2l3bDM5NDVfcG9sbF9iaXQoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBhZGRyLAotCQkJCSB1MzIgYml0cywgdTMyIG1hc2ssIGludCB0aW1lb3V0KQotewotCWludCByZXQgPSBfaXdsMzk0NV9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KTsKLQlJV0xfREVCVUdfSU8oInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpIC0gJXMtICVzICVkXG4iLAotCQkgICAgICBhZGRyLCBiaXRzLCBtYXNrLAotCQkgICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIiIsIGYsIGwpOwotCXJldHVybiByZXQ7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcG9sbF9iaXQocHJpdiwgYWRkciwgYml0cywgbWFzaywgdGltZW91dCkgXAotCV9faXdsMzk0NV9wb2xsX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHByaXYsIGFkZHIsIGJpdHMsIG1hc2ssIHRpbWVvdXQpCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpIF9pd2wzOTQ1X3BvbGxfYml0KHAsIGEsIGIsIG0sIHQpCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIF9pd2wzOTQ1X3NldF9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpIHwgbWFzayk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDM5NDVfc2V0X2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JdTMyIHZhbCA9IF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpIHwgbWFzazsKLQlJV0xfREVCVUdfSU8oInNldF9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYXG4iLCByZWcsIG1hc2ssIHZhbCk7Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIHZhbCk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfc2V0X2JpdChwLCByLCBtKSBfX2l3bDM5NDVfc2V0X2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXQocCwgciwgbSkgX2l3bDM5NDVfc2V0X2JpdChwLCByLCBtKQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV9jbGVhcl9iaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCi17Ci0JX2l3bDM5NDVfd3JpdGUzMihwcml2LCByZWcsIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpICYgfm1hc2spOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pd2wzOTQ1X2NsZWFyX2JpdChjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQl1MzIgdmFsID0gX2l3bDM5NDVfcmVhZDMyKHByaXYsIHJlZykgJiB+bWFzazsKLQlJV0xfREVCVUdfSU8oImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKLQlfaXdsMzk0NV93cml0ZTMyKHByaXYsIHJlZywgdmFsKTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9jbGVhcl9iaXQocCwgciwgbSkgX19pd2wzOTQ1X2NsZWFyX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X2NsZWFyX2JpdChwLCByLCBtKSBfaXdsMzk0NV9jbGVhcl9iaXQocCwgciwgbSkKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBfaXdsMzk0NV9ncmFiX25pY19hY2Nlc3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmV0OwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKGF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlyZXR1cm4gMDsKLSNlbmRpZgotCS8qIHRoaXMgYml0IHdha2VzIHVwIHRoZSBOSUMgKi8KLQlfaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9HUF9DTlRSTCwgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLQlyZXQgPSBfaXdsMzk0NV9wb2xsX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkgICBDU1JfR1BfQ05UUkxfUkVHX1ZBTF9NQUNfQUNDRVNTX0VOLAotCQkJICAgKENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQ0xPQ0tfUkVBRFkgfAotCQkJICAgIENTUl9HUF9DTlRSTF9SRUdfRkxBR19HT0lOR19UT19TTEVFUCksIDUwKTsKLQlpZiAocmV0IDwgMCkgewotCQlJV0xfRVJST1IoIk1BQyBpcyBpbiBkZWVwIHNsZWVwIVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JYXRvbWljX2luYygmcHJpdi0+cmVzdHJpY3RfcmVmY250KTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsMzk0NV9ncmFiX25pY19hY2Nlc3MoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0RFQlVHX0lORk8oIkdyYWJiaW5nIGFjY2VzcyB3aGlsZSBhbHJlYWR5IGhlbGQgYXQgIgotCQkJICAgICAgICJsaW5lICVkLlxuIiwgbCk7Ci0KLQlJV0xfREVCVUdfSU8oImdyYWJiaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7Ci0JcmV0dXJuIF9pd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikgXAotCV9faXdsMzk0NV9ncmFiX25pY19hY2Nlc3MoX19GSUxFX18sIF9fTElORV9fLCBwcml2KQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikgXAotCV9pd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotI2VuZGlmCi0JCV9pd2wzOTQ1X2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkgICAgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKLX0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSA8PSAwKQotCQlJV0xfRVJST1IoIlJlbGVhc2UgdW5oZWxkIG5pYyBhY2Nlc3MgYXQgbGluZSAlZC5cbiIsIGwpOwotCi0JSVdMX0RFQlVHX0lPKCJyZWxlYXNpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKLQlfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpIFwKLQlfX2l3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKF9fRklMRV9fLCBfX0xJTkVfXywgcHJpdikKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpIFwKLQlfaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdikKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHUzMiBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWQzMihwcml2LCByZWcpOwotfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHUzMiBfX2l3bDM5NDVfcmVhZF9kaXJlY3QzMihjb25zdCBjaGFyICpmLCB1MzIgbCwKLQkJCQkJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZykKLXsKLQl1MzIgdmFsdWUgPSBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIHJlZyk7Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgJWRcbiIsIGYsIGwpOwotCUlXTF9ERUJVR19JTygicmVhZF9kaXJlY3QzMigweCU0WCkgPSAweCUwOHggLSAlcyAlZCBcbiIsIHJlZywgdmFsdWUsCi0JCSAgICAgZiwgbCk7Ci0JcmV0dXJuIHZhbHVlOwotfQotI2RlZmluZSBpd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKSBcCi0JX19pd2wzOTQ1X3JlYWRfZGlyZWN0MzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCByZWcpCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3JlYWRfZGlyZWN0MzIgX2l3bDM5NDVfcmVhZF9kaXJlY3QzMgotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV93cml0ZV9kaXJlY3QzMihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgdTMyIHJlZywgdTMyIHZhbHVlKQotewotCV9pd2wzOTQ1X3dyaXRlMzIocHJpdiwgcmVnLCB2YWx1ZSk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyB2b2lkIF9faXdsMzk0NV93cml0ZV9kaXJlY3QzMih1MzIgbGluZSwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgdmFsdWUpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgcmVnLCB2YWx1ZSk7Ci19Ci0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgcmVnLCB2YWx1ZSkgXAotCV9faXdsMzk0NV93cml0ZV9kaXJlY3QzMihfX0xJTkVfXywgcHJpdiwgcmVnLCB2YWx1ZSkKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfZGlyZWN0MzIgX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV93cml0ZV9yZWdfYnVmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgICB1MzIgcmVnLCB1MzIgbGVuLCB1MzIgKnZhbHVlcykKLXsKLQl1MzIgY291bnQgPSBzaXplb2YodTMyKTsKLQotCWlmICgocHJpdiAhPSBOVUxMKSAmJiAodmFsdWVzICE9IE5VTEwpKSB7Ci0JCWZvciAoOyAwIDwgbGVuOyBsZW4gLT0gY291bnQsIHJlZyArPSBjb3VudCwgdmFsdWVzKyspCi0JCQlfaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsICp2YWx1ZXMpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgX2l3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgIHUzMiBhZGRyLCB1MzIgbWFzaywgaW50IHRpbWVvdXQpCi17Ci0JcmV0dXJuIF9pd2wzOTQ1X3BvbGxfYml0KHByaXYsIGFkZHIsIG1hc2ssIG1hc2ssIHRpbWVvdXQpOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgaW50IF9faXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQoY29uc3QgY2hhciAqZiwgdTMyIGwsCi0JCQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgICAgdTMyIGFkZHIsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKLXsKLQlpbnQgcmV0ICA9IF9pd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KTsKLQotCWlmICh1bmxpa2VseShyZXQgPT0gLUVUSU1FRE9VVCkpCi0JCUlXTF9ERUJVR19JTygicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSAtICIKLQkJCSAgICAgInRpbWVkb3V0IC0gJXMgJWRcbiIsIGFkZHIsIG1hc2ssIGYsIGwpOwotCWVsc2UKLQkJSVdMX0RFQlVHX0lPKCJwb2xsX2RpcmVjdF9iaXQoMHglMDhYLCAweCUwOFgpID0gMHglMDhYICIKLQkJCSAgICAgIi0gJXMgJWRcbiIsIGFkZHIsIG1hc2ssIHJldCwgZiwgbCk7Ci0JcmV0dXJuIHJldDsKLX0KLSNkZWZpbmUgaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgYWRkciwgbWFzaywgdGltZW91dCkgXAotCV9faXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KQotI2Vsc2UKLSNkZWZpbmUgaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQgX2l3bDM5NDVfcG9sbF9kaXJlY3RfYml0Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB1MzIgX2l3bDM5NDVfcmVhZF9wcnBoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfUkFERFIsIHJlZyB8ICgzIDw8IDI0KSk7Ci0Jcm1iKCk7Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfUkRBVCk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdTMyIF9faXdsMzk0NV9yZWFkX3BycGgodTMyIGxpbmUsIHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiByZWcpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JcmV0dXJuIF9pd2wzOTQ1X3JlYWRfcHJwaChwcml2LCByZWcpOwotfQotCi0jZGVmaW5lIGl3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZykgXAotCV9faXdsMzk0NV9yZWFkX3BycGgoX19MSU5FX18sIHByaXYsIHJlZykKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfcmVhZF9wcnBoIF9pd2wzOTQ1X3JlYWRfcHJwaAotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfaXdsMzk0NV93cml0ZV9wcnBoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCi17Ci0JX2l3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX1BSUEhfV0FERFIsCi0JCQkgICAgICAoKGFkZHIgJiAweDAwMDBGRkZGKSB8ICgzIDw8IDI0KSkpOwotCXdtYigpOwotCV9pd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19QUlBIX1dEQVQsIHZhbCk7Ci19Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2l3bDM5NDVfd3JpdGVfcHJwaCh1MzIgbGluZSwgc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICAgICAgdTMyIGFkZHIsIHUzMiB2YWwpCi17Ci0JaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIGZyb20gbGluZSAlZFxuIiwgbGluZSk7Ci0JX2l3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBhZGRyLCB2YWwpOwotfQotCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBhZGRyLCB2YWwpIFwKLQlfX2l3bDM5NDVfd3JpdGVfcHJwaChfX0xJTkVfXywgcHJpdiwgYWRkciwgdmFsKTsKLSNlbHNlCi0jZGVmaW5lIGl3bDM5NDVfd3JpdGVfcHJwaCBfaXdsMzk0NV93cml0ZV9wcnBoCi0jZW5kaWYKLQotI2RlZmluZSBfaXdsMzk0NV9zZXRfYml0c19wcnBoKHByaXYsIHJlZywgbWFzaykgXAotCV9pd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgcmVnLCAoX2l3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZykgfCBtYXNrKSkKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9faXdsMzk0NV9zZXRfYml0c19wcnBoKHUzMiBsaW5lLCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQl1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSBsaW5lICVkXG4iLCBsaW5lKTsKLQotCV9pd2wzOTQ1X3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKTsKLX0KLSNkZWZpbmUgaXdsMzk0NV9zZXRfYml0c19wcnBoKHByaXYsIHJlZywgbWFzaykgXAotCV9faXdsMzk0NV9zZXRfYml0c19wcnBoKF9fTElORV9fLCBwcml2LCByZWcsIG1hc2spCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX3BycGggX2l3bDM5NDVfc2V0X2JpdHNfcHJwaAotI2VuZGlmCi0KLSNkZWZpbmUgX2l3bDM5NDVfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzaykgXAotCV9pd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgcmVnLCAoKF9pd2wzOTQ1X3JlYWRfcHJwaChwcml2LCByZWcpICYgbWFzaykgfCBiaXRzKSkKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaCh1MzIgbGluZSwKLQkJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIGJpdHMsIHUzMiBtYXNrKQotewotCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tIGxpbmUgJWRcbiIsIGxpbmUpOwotCV9pd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaChwcml2LCByZWcsIGJpdHMsIG1hc2spOwotfQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaChwcml2LCByZWcsIGJpdHMsIG1hc2spIFwKLQlfX2l3bDM5NDVfc2V0X2JpdHNfbWFza19wcnBoKF9fTElORV9fLCBwcml2LCByZWcsIGJpdHMsIG1hc2spCi0jZWxzZQotI2RlZmluZSBpd2wzOTQ1X3NldF9iaXRzX21hc2tfcHJwaCBfaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9jbGVhcl9iaXRzX3BycGgoc3RydWN0IGl3bDM5NDVfcHJpdgotCQkJCQkJICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKLXsKLQl1MzIgdmFsID0gX2l3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZyk7Ci0JX2l3bDM5NDVfd3JpdGVfcHJwaChwcml2LCByZWcsICh2YWwgJiB+bWFzaykpOwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTMyIGFkZHIpCi17Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLCBhZGRyKTsKLQlybWIoKTsKLQlyZXR1cm4gaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MzIgdmFsKQotewotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9XQUREUiwgYWRkcik7Ci0Jd21iKCk7Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1dEQVQsIHZhbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtX2J1ZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgYWRkciwKLQkJCQkJICB1MzIgbGVuLCB1MzIgKnZhbHVlcykKLXsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0FERFIsIGFkZHIpOwotCXdtYigpOwotCWZvciAoOyAwIDwgbGVuOyBsZW4gLT0gc2l6ZW9mKHUzMiksIHZhbHVlcysrKQotCQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fV0RBVCwgKnZhbHVlcyk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jCmluZGV4IDRjNjM4OTAuLmFjMjJmNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNCw2ICsyNCw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zOCw4ICszOSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCisjaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKLSNpbmNsdWRlICJpd2wtaGVscGVycy5oIgorI2luY2x1ZGUgIml3bC1jb3JlLmgiCisjaW5jbHVkZSAiaXdsLWRldi5oIgogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewpAQCAtNjcsOCArNzAsOCBAQAogI2RlZmluZSBJV0xfTUFYX0JMSU5LX1RCTCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkgLypFeGNsdWRlIFNvbGlkIG9uKi8KICNkZWZpbmUgSVdMX1NPTElEX0JMSU5LX0lEWCAoQVJSQVlfU0laRShibGlua190YmwpIC0gMSkKIAotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9jbWRfY2FsbGJhY2soc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX2NtZF9jYWxsYmFjayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDE7CkBAIC04MCwyNyArODMsMjcgQEAKIH0KIAogLyogU2VuZCBsZWQgY29tbWFuZCAqLwotc3RhdGljIGludCBpd2xfc2VuZF9sZWRfY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgc3RydWN0IGl3bDM5NDVfbGVkX2NtZCAqbGVkX2NtZCkKK3N0YXRpYyBpbnQgaXdsX3NlbmRfbGVkX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGl3bF9sZWRfY21kICpsZWRfY21kKQogewotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfTEVEU19DTUQsCi0JCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfbGVkX2NtZCksCisJCS5sZW4gPSBzaXplb2Yoc3RydWN0IGl3bF9sZWRfY21kKSwKIAkJLmRhdGEgPSBsZWRfY21kLAogCQkubWV0YS5mbGFncyA9IENNRF9BU1lOQywKIAkJLm1ldGEudS5jYWxsYmFjayA9IGl3bDM5NDVfbGVkX2NtZF9jYWxsYmFjaywKIAl9OwogCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWQocHJpdiwgJmNtZCk7CisJcmV0dXJuIGl3bF9zZW5kX2NtZChwcml2LCAmY21kKTsKIH0KIAogCiAKIC8qIFNldCBsZWQgb24gY29tbWFuZCAqLwotc3RhdGljIGludCBpd2wzOTQ1X2xlZF9wYXR0ZXJuKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX3BhdHRlcm4oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBpZHgpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkX2NtZCBsZWRfY21kID0geworCXN0cnVjdCBpd2xfbGVkX2NtZCBsZWRfY21kID0gewogCQkuaWQgPSBsZWRfaWQsCiAJCS5pbnRlcnZhbCA9IElXTF9ERUZfTEVEX0lOVFJWTAogCX07CkBAIC0xMTQsMTEgKzExNywxMCBAQAogfQogCiAKLSNpZiAxCiAvKiBTZXQgbGVkIG9uIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewotCXN0cnVjdCBpd2wzOTQ1X2xlZF9jbWQgbGVkX2NtZCA9IHsKKwlzdHJ1Y3QgaXdsX2xlZF9jbWQgbGVkX2NtZCA9IHsKIAkJLmlkID0gbGVkX2lkLAogCQkub24gPSBJV0xfTEVEX1NPTElELAogCQkub2ZmID0gMCwKQEAgLTEyOCwyNCArMTMwLDIyIEBACiB9CiAKIC8qIFNldCBsZWQgb2ZmIGNvbW1hbmQgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfb2ZmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBsZWRfaWQpCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX29mZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkX2NtZCBsZWRfY21kID0geworCXN0cnVjdCBpd2xfbGVkX2NtZCBsZWRfY21kID0gewogCQkuaWQgPSBsZWRfaWQsCiAJCS5vbiA9IDAsCiAJCS5vZmYgPSAwLAogCQkuaW50ZXJ2YWwgPSBJV0xfREVGX0xFRF9JTlRSVkwKIAl9OwotCUlXTF9ERUJVR19MRUQoImxlZCBvZmYgJWRcbiIsIGxlZF9pZCk7CisJSVdMX0RFQlVHX0xFRChwcml2LCAibGVkIG9mZiAlZFxuIiwgbGVkX2lkKTsKIAlyZXR1cm4gaXdsX3NlbmRfbGVkX2NtZChwcml2LCAmbGVkX2NtZCk7CiB9Ci0jZW5kaWYKLQogCiAvKgogICogYnJpZ2h0bmVzcyBjYWxsIGJhY2sgZnVuY3Rpb24gZm9yIFR4L1J4IExFRAogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfbGVkX2Fzc29jaWF0ZWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9sZWRfYXNzb2NpYXRlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZWRfaWQpCiB7CiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIHx8CiAJICAgICF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKQpAQCAtMTY0LDkgKzE2NCw5IEBACiBzdGF0aWMgdm9pZCBpd2wzOTQ1X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKIAkJCQllbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsCi0JCQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9sZWQsIGxlZF9kZXYpOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBsZWQtPnByaXY7CisJc3RydWN0IGl3bF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2RldiwKKwkJCQkJICAgICAgIHN0cnVjdCBpd2xfbGVkLCBsZWRfZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBsZWQtPnByaXY7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTE3NSw3ICsxNzUsNyBAQAogCWNhc2UgTEVEX0ZVTEw6CiAJCWlmIChsZWQtPnR5cGUgPT0gSVdMX0xFRF9UUkdfQVNTT0MpIHsKIAkJCXByaXYtPmFsbG93X2JsaW5raW5nID0gMTsKLQkJCUlXTF9ERUJVR19MRUQoIk1BQyBpcyAgYXNzb2NpYXRlZFxuIik7CisJCQlJV0xfREVCVUdfTEVEKHByaXYsICJNQUMgaXMgIGFzc29jaWF0ZWRcbiIpOwogCQl9CiAJCWlmIChsZWQtPmxlZF9vbikKIAkJCWxlZC0+bGVkX29uKHByaXYsIElXTF9MRURfTElOSyk7CkBAIC0xODMsNyArMTgzLDcgQEAKIAljYXNlIExFRF9PRkY6CiAJCWlmIChsZWQtPnR5cGUgPT0gSVdMX0xFRF9UUkdfQVNTT0MpIHsKIAkJCXByaXYtPmFsbG93X2JsaW5raW5nID0gMDsKLQkJCUlXTF9ERUJVR19MRUQoIk1BQyBpcyBkaXNhc3NvY2lhdGVkXG4iKTsKKwkJCUlXTF9ERUJVR19MRUQocHJpdiwgIk1BQyBpcyBkaXNhc3NvY2lhdGVkXG4iKTsKIAkJfQogCQlpZiAobGVkLT5sZWRfb2ZmKQogCQkJbGVkLT5sZWRfb2ZmKHByaXYsIElXTF9MRURfTElOSyk7CkBAIC0yMDIsOCArMjAyLDggQEAKIC8qCiAgKiBSZWdpc3RlciBsZWQgY2xhc3Mgd2l0aCB0aGUgc3lzdGVtCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgc3RydWN0IGl3bDM5NDVfbGVkICpsZWQsCitzdGF0aWMgaW50IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgc3RydWN0IGl3bF9sZWQgKmxlZCwKIAkJCQkgICBlbnVtIGxlZF90eXBlIHR5cGUsIHU4IHNldF9sZWQsCiAJCQkJICAgY2hhciAqdHJpZ2dlcikKIHsKQEAgLTIxOSw3ICsyMTksNyBAQAogCiAJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKGRldmljZSwgJmxlZC0+bGVkX2Rldik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbGVkIGhhbmRsZXIuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IGZhaWxlZCB0byByZWdpc3RlciBsZWQgaGFuZGxlci5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjM0LDcgKzIzNCw3IEBACiAvKgogICogY2FsY3VsYXRlIGJsaW5rIHJhdGUgYWNjb3JkaW5nIHRvIGxhc3QgMiBzZWMgVHgvUnggYWN0aXZpdGllcwogICovCi1zdGF0aWMgaW5saW5lIHU4IGdldF9ibGlua19yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW5saW5lIHU4IGdldF9ibGlua19yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgaW5kZXg7CiAJdTY0IGN1cnJlbnRfdHB0ID0gcHJpdi0+cnh0eHBhY2tldHM7CkBAIC0yNTMsNyArMjUzLDcgQEAKIAlyZXR1cm4gaW5kZXg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX3JmX2tpbGwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3JmX2tpbGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgfHwKIAkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOwpAQCAtMjY0LDcgKzI2NCw3IEBACiAgKiBoYXBwZW4gdmVyeSBmcmVxdWVudCB3ZSBwb3N0cG9uZSBsZWQgY29tbWFuZCB0byBiZSBjYWxsZWQgZnJvbQogICogUkVQTFkgaGFuZGxlciBzbyB3ZSBrbm93IHVjb2RlIGlzIHVwCiAgKi8KLXZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1OCBibGlua19pZHg7CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogCiAKIC8qIFJlZ2lzdGVyIGFsbCBsZWQgaGFuZGxlciAqLwotaW50IGl3bDM5NDVfbGVkX3JlZ2lzdGVyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWNoYXIgKnRyaWdnZXI7CiAJaW50IHJldDsKQEAgLTMxNyw3ICszMTcsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfcmFkaW9fbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUpLCAiaXdsLSVzOnJhZGlvIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLm5hbWUpLCAiaXdsLSVzOjpyYWRpbyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5sZWRfb24gPSBpd2wzOTQ1X2xlZF9vbjsKQEAgLTMzMyw3ICszMzMsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOmFzc29jIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOjphc3NvYyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcmV0ID0gaXdsMzk0NV9sZWRfcmVnaXN0ZXJfbGVkKHByaXYsCkBAIC0zNTAsNyArMzUwLDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKHByaXYtPmh3KTsKIAlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfUlhdLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lKSwgIml3bC0lczpSWCIsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lKSwgIml3bC0lczo6UlgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXJldCA9IGl3bDM5NDVfbGVkX3JlZ2lzdGVyX2xlZChwcml2LApAQCAtMzY2LDcgKzM2Niw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubmFtZSksICJpd2wtJXM6VFgiLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19UWF0ubmFtZSksICJpd2wtJXM6OlRYIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlyZXQgPSBpd2wzOTQ1X2xlZF9yZWdpc3Rlcl9sZWQocHJpdiwKQEAgLTM4OSw3ICszODksNyBAQAogCiAKIC8qIHVucmVnaXN0ZXIgbGVkIGNsYXNzICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgaXdsMzk0NV9sZWQgKmxlZCwgdTggc2V0X2xlZCkKK3N0YXRpYyB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXJfbGVkKHN0cnVjdCBpd2xfbGVkICpsZWQsIHU4IHNldF9sZWQpCiB7CiAJaWYgKCFsZWQtPnJlZ2lzdGVyZWQpCiAJCXJldHVybjsKQEAgLTQwMiw3ICs0MDIsNyBAQAogfQogCiAvKiBVbnJlZ2lzdGVyIGFsbCBsZWQgaGFuZGxlcnMgKi8KLXZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpd2wzOTQ1X2xlZF91bnJlZ2lzdGVyX2xlZCgmcHJpdi0+bGVkW0lXTF9MRURfVFJHX0FTU09DXSwgMCk7CiAJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sIDApOwpAQCAtNDEwLDMgKzQxMCw0IEBACiAJaXdsMzk0NV9sZWRfdW5yZWdpc3Rlcl9sZWQoJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10sIDEpOwogfQogCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5oCmluZGV4IDc0OWFjMDMuLjNiNjU2NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yNyw0OCArMjcsMjAgQEAKICNpZm5kZWYgSVdMMzk0NV9MRURTX0gKICNkZWZpbmUgSVdMMzk0NV9MRURTX0gKIAotc3RydWN0IGl3bDM5NDVfcHJpdjsKK3N0cnVjdCBpd2xfcHJpdjsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0xFRFMKLSNkZWZpbmUgSVdMX0xFRF9TT0xJRCAxMQotI2RlZmluZSBJV0xfTEVEX05BTUVfTEVOIDMxCi0jZGVmaW5lIElXTF9ERUZfTEVEX0lOVFJWTCBfX2NvbnN0YW50X2NwdV90b19sZTMyKDEwMDApCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCi0jZGVmaW5lIElXTF9MRURfQUNUSVZJVFkgICAgICAgKDA8PDEpCi0jZGVmaW5lIElXTF9MRURfTElOSyAgICAgICAgICAgKDE8PDEpCisjaW5jbHVkZSAiaXdsLWxlZC5oIgogCi1lbnVtIGxlZF90eXBlIHsKLQlJV0xfTEVEX1RSR19UWCwKLQlJV0xfTEVEX1RSR19SWCwKLQlJV0xfTEVEX1RSR19BU1NPQywKLQlJV0xfTEVEX1RSR19SQURJTywKLQlJV0xfTEVEX1RSR19NQVgsCi19OwotCi0jaW5jbHVkZSA8bGludXgvbGVkcy5oPgotCi1zdHJ1Y3QgaXdsMzk0NV9sZWQgewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXY7Ci0Jc3RydWN0IGxlZF9jbGFzc2RldiBsZWRfZGV2OwotCWNoYXIgbmFtZVszMl07Ci0KLQlpbnQgKCpsZWRfb24pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkKTsKLQlpbnQgKCpsZWRfb2ZmKSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCk7Ci0JaW50ICgqbGVkX3BhdHRlcm4pIChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgbGVkX2lkLAotCQkJICAgIHVuc2lnbmVkIGludCBpZHgpOwotCi0JZW51bSBsZWRfdHlwZSB0eXBlOwotCXVuc2lnbmVkIGludCByZWdpc3RlcmVkOwotfTsKLQotZXh0ZXJuIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2xlZF9yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfbGVkX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpIHt9Ci0jZW5kaWYgLyogQ09ORklHX0lXTDM5NDVfTEVEUyAqLworc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9sZWRfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9sZWRfYmFja2dyb3VuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9CiAKKyNlbmRpZiAvKiBJV0xXSUZJX0xFRFMqLwogI2VuZGlmIC8qIElXTDM5NDVfTEVEU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKaW5kZXggMjFjODQxOC4uYWY2YjlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNiw2ICszNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LmgiCiAKICNkZWZpbmUgUlNfTkFNRSAiaXdsLTM5NDUtcnMiCkBAIC01MSw2ICs1Miw3IEBACiAKIHN0cnVjdCBpd2wzOTQ1X3JzX3N0YSB7CiAJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKIAlzMzIgKmV4cGVjdGVkX3RwdDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfcGFydGlhbF9mbHVzaDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfZmx1c2g7CkBAIC02Miw3ICs2NCw3IEBACiAJdTggc3RhcnRfcmF0ZTsKIAl1OCBpYnNzX3N0YV9hZGRlZDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCByYXRlX3NjYWxlX2ZsdXNoOwotCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSB3aW5bSVdMX1JBVEVfQ09VTlRdOworCXN0cnVjdCBpd2wzOTQ1X3JhdGVfc2NhbGVfZGF0YSB3aW5bSVdMX1JBVEVfQ09VTlRfMzk0NV07CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIAlzdHJ1Y3QgZGVudHJ5ICpyc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfZmlsZTsKICNlbmRpZgpAQCAtNzEsMTkgKzczLDE5IEBACiAJaW50IGxhc3RfdHhyYXRlX2lkeDsKIH07CiAKLXN0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfZ1tJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dbSVdMX1JBVEVfQ09VTlRfMzk0NV0gPSB7CiAJNywgMTMsIDM1LCA1OCwgMCwgMCwgNzYsIDEwNCwgMTMwLCAxNjgsIDE5MSwgMjAyCiB9OwogCi1zdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dfcHJvdFtJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2dfcHJvdFtJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAk3LCAxMywgMzUsIDU4LCAwLCAwLCAwLCA4MCwgOTMsIDExMywgMTIzLCAxMjUKIH07CiAKLXN0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfYVtJV0xfUkFURV9DT1VOVF0gPSB7CitzdGF0aWMgczMyIGl3bDM5NDVfZXhwZWN0ZWRfdHB0X2FbSVdMX1JBVEVfQ09VTlRfMzk0NV0gPSB7CiAJMCwgMCwgMCwgMCwgNDAsIDU3LCA3MiwgOTgsIDEyMSwgMTU0LCAxNzcsIDE4NgogfTsKIAotc3RhdGljIHMzMiBpd2wzOTQ1X2V4cGVjdGVkX3RwdF9iW0lXTF9SQVRFX0NPVU5UXSA9IHsKK3N0YXRpYyBzMzIgaXdsMzk0NV9leHBlY3RlZF90cHRfYltJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAk3LCAxMywgMzUsIDU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwCiB9OwogCkBAIC0xMTksMTIgKzEyMSwxMyBAQAogI2RlZmluZSBJV0xfUkFURV9NQVhfV0lORE9XICAgICAgICAgIDYyCiAjZGVmaW5lIElXTF9SQVRFX0ZMVVNIICAgICAgIAkgKDMqSFopCiAjZGVmaW5lIElXTF9SQVRFX1dJTl9GTFVTSCAgICAgICAoSFovMikKLSNkZWZpbmUgSVdMX1JBVEVfSElHSF9USCAgICAgICAgICAxMTUyMAorI2RlZmluZSBJV0wzOV9SQVRFX0hJR0hfVEggICAgICAgICAgMTE1MjAKICNkZWZpbmUgSVdMX1NVQ0NFU1NfVVBfVEgJICAgODk2MAogI2RlZmluZSBJV0xfU1VDQ0VTU19ET1dOX1RICSAgMTA4ODAKLSNkZWZpbmUgSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEggICAgICAgOAorI2RlZmluZSBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCAgICAgICA2CiAjZGVmaW5lIElXTF9SQVRFX01JTl9TVUNDRVNTX1RIICAgICAgIDgKICNkZWZpbmUgSVdMX1JBVEVfREVDUkVBU0VfVEggICAgICAgMTkyMAorI2RlZmluZSBJV0xfUkFURV9SRVRSWV9USAkgICAgIDE1CiAKIHN0YXRpYyB1OCBpd2wzOTQ1X2dldF9yYXRlX2luZGV4X2J5X3Jzc2koczMyIHJzc2ksIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKQEAgLTE2NSw3ICsxNjgsNyBAQAogCXdpbmRvdy0+c3VjY2Vzc19jb3VudGVyID0gMDsKIAl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPSAtMTsKIAl3aW5kb3ctPmNvdW50ZXIgPSAwOwotCXdpbmRvdy0+YXZlcmFnZV90cHQgPSBJV0xfSU5WX1RQVDsKKwl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CiAJd2luZG93LT5zdGFtcCA9IDA7CiB9CiAKQEAgLTE4MSwyMCArMTg0LDIxIEBACiAJaW50IHVuZmx1c2hlZCA9IDA7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAKIAkvKgogCSAqIEZvciBlYWNoIHJhdGUsIGlmIHdlIGhhdmUgY29sbGVjdGVkIGRhdGEgb24gdGhhdCByYXRlCiAJICogYW5kIGl0IGhhcyBiZWVuIG1vcmUgdGhhbiBJV0xfUkFURV9XSU5fRkxVU0gKIAkgKiBzaW5jZSB3ZSBmbHVzaGVkLCBjbGVhciBvdXQgdGhlIGdhdGhlcmVkIHN0YXRpc3RpY3MKIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVF8zOTQ1OyBpKyspIHsKIAkJaWYgKCFyc19zdGEtPndpbltpXS5jb3VudGVyKQogCQkJY29udGludWU7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCByc19zdGEtPndpbltpXS5zdGFtcCArCiAJCQkgICAgICAgSVdMX1JBVEVfV0lOX0ZMVVNIKSkgewotCQkJSVdMX0RFQlVHX1JBVEUoImZsdXNoaW5nICVkIHNhbXBsZXMgb2YgcmF0ZSAiCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiZmx1c2hpbmcgJWQgc2FtcGxlcyBvZiByYXRlICIKIAkJCQkgICAgICAgImluZGV4ICVkXG4iLAogCQkJCSAgICAgICByc19zdGEtPndpbltpXS5jb3VudGVyLCBpKTsKIAkJCWl3bDM5NDVfY2xlYXJfd2luZG93KCZyc19zdGEtPndpbltpXSk7CkBAIC0yMTMsMTEgKzIxNywxMiBAQAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yYXRlX3NjYWxlX2ZsdXNoKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKnJzX3N0YSA9ICh2b2lkICopZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAJaW50IHVuZmx1c2hlZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgcGFja2V0X2NvdW50LCBkdXJhdGlvbiwgcHBzOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCiAJdW5mbHVzaGVkID0gaXdsMzk0NV9yYXRlX3NjYWxlX2ZsdXNoX3dpbmRvd3MocnNfc3RhKTsKIApAQCAtMjMyLDcgKzIzNyw3IEBACiAJCWR1cmF0aW9uID0KIAkJICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHJzX3N0YS0+bGFzdF9wYXJ0aWFsX2ZsdXNoKTsKIAotCQlJV0xfREVCVUdfUkFURSgiVHgnZCAlZCBwYWNrZXRzIGluICVkbXNcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJUeCdkICVkIHBhY2tldHMgaW4gJWRtc1xuIiwKIAkJCSAgICAgICBwYWNrZXRfY291bnQsIGR1cmF0aW9uKTsKIAogCQkvKiBEZXRlcm1pbmUgcGFja2V0cyBwZXIgc2Vjb25kICovCkBAIC0yNTIsNyArMjU3LDcgQEAKIAogCQlyc19zdGEtPmZsdXNoX3RpbWUgPSBtc2Vjc190b19qaWZmaWVzKGR1cmF0aW9uKTsKIAotCQlJV0xfREVCVUdfUkFURSgibmV3IGZsdXNoIHBlcmlvZDogJWQgbXNlYyBhdmUgJWRcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJuZXcgZmx1c2ggcGVyaW9kOiAlZCBtc2VjIGF2ZSAlZFxuIiwKIAkJCSAgICAgICBkdXJhdGlvbiwgcGFja2V0X2NvdW50KTsKIAogCQltb2RfdGltZXIoJnJzX3N0YS0+cmF0ZV9zY2FsZV9mbHVzaCwgamlmZmllcyArCkBAIC0yNzAsNyArMjc1LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmVcbiIpOwogfQogCiAvKioKQEAgLTI4Niw1MCArMjkxLDcwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzMzIgZmFpbF9jb3VudDsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAKIAlpZiAoIXJldHJpZXMpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImxlYXZlOiByZXRyaWVzID09IDAgLS0gc2hvdWxkIGJlIGF0IGxlYXN0IDFcbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmU6IHJldHJpZXMgPT0gMCAtLSBzaG91bGQgYmUgYXQgbGVhc3QgMVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnNfc3RhLT5sb2NrLCBmbGFncyk7Ci0Jd2hpbGUgKHJldHJpZXMtLSkgewogCi0JCS8qIElmIHdlIGhhdmUgZmlsbGVkIHVwIHRoZSB3aW5kb3cgdGhlbiBzdWJ0cmFjdCBvbmUgZnJvbSB0aGUKLQkJICogc3VjY2VzcyBjb3VudGVyIGlmIHRoZSBoaWdoLWJpdCBpcyBjb3VudGluZyB0b3dhcmQKLQkJICogc3VjY2VzcyAqLwotCQlpZiAod2luZG93LT5jb3VudGVyID09IElXTF9SQVRFX01BWF9XSU5ET1cpIHsKLQkJCWlmICh3aW5kb3ctPmRhdGEgJiAoMVVMTCA8PCAoSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDEpKSkKKwkvKgorCSAqIEtlZXAgdHJhY2sgb2Ygb25seSB0aGUgbGF0ZXN0IDYyIHR4IGZyYW1lIGF0dGVtcHRzIGluIHRoaXMgcmF0ZSdzCisJICogaGlzdG9yeSB3aW5kb3c7IGFueXRoaW5nIG9sZGVyIGlzbid0IHJlYWxseSByZWxldmFudCBhbnkgbW9yZS4KKwkgKiBJZiB3ZSBoYXZlIGZpbGxlZCB1cCB0aGUgc2xpZGluZyB3aW5kb3csIGRyb3AgdGhlIG9sZGVzdCBhdHRlbXB0OworCSAqIGlmIHRoZSBvbGRlc3QgYXR0ZW1wdCAoaGlnaGVzdCBiaXQgaW4gYml0bWFwKSBzaG93cyAic3VjY2VzcyIsCisJICogc3VidHJhY3QgIjEiIGZyb20gdGhlIHN1Y2Nlc3MgY291bnRlciAodGhpcyBpcyB0aGUgbWFpbiByZWFzb24KKwkgKiB3ZSBrZWVwIHRoZXNlIGJpdG1hcHMhKS4KKwkgKiAqLworCXdoaWxlIChyZXRyaWVzID4gMCkgeworCQlpZiAod2luZG93LT5jb3VudGVyID49IElXTF9SQVRFX01BWF9XSU5ET1cpIHsKKworCQkJLyogcmVtb3ZlIGVhcmxpZXN0ICovCisJCQl3aW5kb3ctPmNvdW50ZXIgPSBJV0xfUkFURV9NQVhfV0lORE9XIC0gMTsKKworCQkJaWYgKHdpbmRvdy0+ZGF0YSAmICgxVUxMIDw8IChJV0xfUkFURV9NQVhfV0lORE9XIC0gMSkpKSB7CisJCQkJd2luZG93LT5kYXRhICY9IH4oMVVMTCA8PCAoSVdMX1JBVEVfTUFYX1dJTkRPVyAtIDEpKTsKIAkJCQl3aW5kb3ctPnN1Y2Nlc3NfY291bnRlci0tOwotCQl9IGVsc2UKLQkJCXdpbmRvdy0+Y291bnRlcisrOwotCi0JCS8qIFNsaWRlIHRoZSB3aW5kb3cgdG8gdGhlIGxlZnQgb25lIGJpdCAqLwotCQl3aW5kb3ctPmRhdGEgPSAod2luZG93LT5kYXRhIDw8IDEpOwotCi0JCS8qIElmIHRoaXMgcGFja2V0IHdhcyBhIHN1Y2Nlc3MgdGhlbiBzZXQgdGhlIGxvdyBiaXQgaGlnaCAqLwotCQlpZiAoc3VjY2VzcykgewotCQkJd2luZG93LT5zdWNjZXNzX2NvdW50ZXIrKzsKLQkJCXdpbmRvdy0+ZGF0YSB8PSAxOworCQkJfQogCQl9CiAKLQkJLyogd2luZG93LT5jb3VudGVyIGNhbid0IGJlIDAgLS0gaXQgaXMgZWl0aGVyID4wIG9yCi0JCSAqIElXTF9SQVRFX01BWF9XSU5ET1cgKi8KLQkJd2luZG93LT5zdWNjZXNzX3JhdGlvID0gMTI4MDAgKiB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciAvCi0JCSAgICB3aW5kb3ctPmNvdW50ZXI7CisJCS8qIEluY3JlbWVudCBmcmFtZXMtYXR0ZW1wdGVkIGNvdW50ZXIgKi8KKwkJd2luZG93LT5jb3VudGVyKys7CiAKLQkJLyogVGFnIHRoaXMgd2luZG93IGFzIGhhdmluZyBiZWVuIHVwZGF0ZWQgKi8KLQkJd2luZG93LT5zdGFtcCA9IGppZmZpZXM7CisJCS8qIFNoaWZ0IGJpdG1hcCBieSBvbmUgZnJhbWUgKHRocm93IGF3YXkgb2xkZXN0IGhpc3RvcnkpLAorCQkgKiBPUiBpbiAiMSIsIGFuZCBpbmNyZW1lbnQgInN1Y2Nlc3MiIGlmIHRoaXMKKwkJICogZnJhbWUgd2FzIHN1Y2Nlc3NmdWwuICovCisJCXdpbmRvdy0+ZGF0YSA8PD0gMTsKKwkJaWYgKHN1Y2Nlc3MgPiAwKSB7CisJCQl3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcisrOworCQkJd2luZG93LT5kYXRhIHw9IDB4MTsKKwkJCXN1Y2Nlc3MtLTsKKwkJfQogCisJCXJldHJpZXMtLTsKIAl9CiAKKwkvKiBDYWxjdWxhdGUgY3VycmVudCBzdWNjZXNzIHJhdGlvLCBhdm9pZCBkaXZpZGUtYnktMCEgKi8KKwlpZiAod2luZG93LT5jb3VudGVyID4gMCkKKwkJd2luZG93LT5zdWNjZXNzX3JhdGlvID0gMTI4ICogKDEwMCAqIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyKQorCQkJCQkvIHdpbmRvdy0+Y291bnRlcjsKKwllbHNlCisJCXdpbmRvdy0+c3VjY2Vzc19yYXRpbyA9IElXTF9JTlZBTElEX1ZBTFVFOworCiAJZmFpbF9jb3VudCA9IHdpbmRvdy0+Y291bnRlciAtIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyOworCisJLyogQ2FsY3VsYXRlIGF2ZXJhZ2UgdGhyb3VnaHB1dCwgaWYgd2UgaGF2ZSBlbm91Z2ggaGlzdG9yeS4gKi8KIAlpZiAoKGZhaWxfY291bnQgPj0gSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEgpIHx8CiAJICAgICh3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA+PSBJV0xfUkFURV9NSU5fU1VDQ0VTU19USCkpCiAJCXdpbmRvdy0+YXZlcmFnZV90cHQgPSAoKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyAqCiAJCQkJcnNfc3RhLT5leHBlY3RlZF90cHRbaW5kZXhdICsgNjQpIC8gMTI4KTsKIAllbHNlCi0JCXdpbmRvdy0+YXZlcmFnZV90cHQgPSBJV0xfSU5WX1RQVDsKKwkJd2luZG93LT5hdmVyYWdlX3RwdCA9IElXTF9JTlZBTElEX1ZBTFVFOworCisJLyogVGFnIHRoaXMgd2luZG93IGFzIGhhdmluZyBiZWVuIHVwZGF0ZWQgKi8KKwl3aW5kb3ctPnN0YW1wID0gamlmZmllczsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCkBAIC0zMzksMTAgKzM2NCwxMCBAQAogCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHZvaWQgKnByaXZfc3RhKQogewogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhID0gcHJpdl9zdGE7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopcHJpdl9yOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3I7CiAJaW50IGk7CiAKLQlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAKIAkvKiBUT0RPOiB3aGF0IGlzIGEgZ29vZCBzdGFydGluZyByYXRlIGZvciBTVEE/IEFib3V0IG1pZGRsZT8gTWF5YmUgbm90CiAJICogdGhlIGxvd2VzdCBvciB0aGUgaGlnaGVzdCByYXRlLi4gQ291bGQgY29uc2lkZXIgdXNpbmcgUlNTSSBmcm9tCkBAIC0zNjUsNyArMzkwLDcgQEAKIAl9CiAKIAotCUlXTF9ERUJVR19SQVRFKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgKnJzX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzZGlyKQpAQCAtMzc5LDEwICs0MDQsMTEgQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkICpyc19hbGxvY19zdGEodm9pZCAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgZ2ZwX3QgZ2ZwKQorc3RhdGljIHZvaWQgKnJzX2FsbG9jX3N0YSh2b2lkICppd2xfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhOwogCXN0cnVjdCBpd2wzOTQ1X3N0YV9wcml2ICpwc3RhID0gKHZvaWQgKikgc3RhLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBpd2xfcHJpdjsKIAlpbnQgaTsKIAogCS8qCkBAIC0zOTAsMTEgKzQxNiwxMSBAQAogCSAqCWFzIHdlbGwganVzdCBwdXQgYWxsIHRoZSBpbmZvcm1hdGlvbiB0aGVyZS4KIAkgKi8KIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCXJzX3N0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3JzX3N0YSksIGdmcCk7CiAJaWYgKCFyc19zdGEpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImxlYXZlOiBFTk9NRU1cbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmU6IEVOT01FTVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNDAyLDYgKzQyOCw4IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmcnNfc3RhLT5sb2NrKTsKIAorCXJzX3N0YS0+cHJpdiA9IHByaXY7CisKIAlyc19zdGEtPnN0YXJ0X3JhdGUgPSBJV0xfUkFURV9JTlZBTElEOwogCiAJLyogZGVmYXVsdCB0byBqdXN0IDgwMi4xMWIgKi8KQEAgLTQxNywzMyArNDQ1LDM0IEBACiAJcnNfc3RhLT5yYXRlX3NjYWxlX2ZsdXNoLmRhdGEgPSAodW5zaWduZWQgbG9uZylyc19zdGE7CiAJcnNfc3RhLT5yYXRlX3NjYWxlX2ZsdXNoLmZ1bmN0aW9uID0gJml3bDM5NDVfYmdfcmF0ZV9zY2FsZV9mbHVzaDsKIAotCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVF8zOTQ1OyBpKyspCiAJCWl3bDM5NDVfY2xlYXJfd2luZG93KCZyc19zdGEtPndpbltpXSk7CiAKLQlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm4gcnNfc3RhOwogfQogCi1zdGF0aWMgdm9pZCByc19mcmVlX3N0YSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorc3RhdGljIHZvaWQgcnNfZnJlZV9zdGEodm9pZCAqaXdsX3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQl2b2lkICpwcml2X3N0YSkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiAqcHN0YSA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGEgPSBwcml2X3N0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSByc19zdGEtPnByaXY7CiAKIAlwc3RhLT5yc19zdGEgPSBOVUxMOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCWRlbF90aW1lcl9zeW5jKCZyc19zdGEtPnJhdGVfc2NhbGVfZmx1c2gpOwogCWtmcmVlKHJzX3N0YSk7Ci0JSVdMX0RFQlVHX1JBVEUoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmVcbiIpOwogfQogCiAKIC8qKgogICogcnNfdHhfc3RhdHVzIC0gVXBkYXRlIHJhdGUgY29udHJvbCB2YWx1ZXMgYmFzZWQgb24gVHggcmVzdWx0cwogICoKLSAqIE5PVEU6IFVzZXMgaXdsMzk0NV9wcml2LT5yZXRyeV9yYXRlIGZvciB0aGUgIyBvZiByZXRyaWVzIGF0dGVtcHRlZCBieQorICogTk9URTogVXNlcyBpd2xfcHJpdi0+cmV0cnlfcmF0ZSBmb3IgdGhlICMgb2YgcmV0cmllcyBhdHRlbXB0ZWQgYnkKICAqIHRoZSBoYXJkd2FyZSBmb3IgZWFjaCByYXRlLgogICovCiBzdGF0aWMgdm9pZCByc190eF9zdGF0dXModm9pZCAqcHJpdl9yYXRlLCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKQEAgLTQ1MywyMiArNDgyLDI1IEBACiAJczggcmV0cmllcyA9IDAsIGN1cnJlbnRfY291bnQ7CiAJaW50IHNjYWxlX3JhdGVfaW5kZXgsIGZpcnN0X2luZGV4LCBsYXN0X2luZGV4OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopcHJpdl9yYXRlOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3JhdGU7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGEgPSBwcml2X3N0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKLQlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAKIAlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50OworCS8qIFNhbml0eSBDaGVjayBmb3IgcmV0cmllcyAqLworCWlmIChyZXRyaWVzID4gSVdMX1JBVEVfUkVUUllfVEgpCisJCXJldHJpZXMgPSBJV0xfUkFURV9SRVRSWV9USDsKIAogCWZpcnN0X2luZGV4ID0gc2JhbmQtPmJpdHJhdGVzW2luZm8tPnN0YXR1cy5yYXRlc1swXS5pZHhdLmh3X3ZhbHVlOwotCWlmICgoZmlyc3RfaW5kZXggPCAwKSB8fCAoZmlyc3RfaW5kZXggPj0gSVdMX1JBVEVfQ09VTlQpKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogUmF0ZSBvdXQgb2YgYm91bmRzOiAlZFxuIiwgZmlyc3RfaW5kZXgpOworCWlmICgoZmlyc3RfaW5kZXggPCAwKSB8fCAoZmlyc3RfaW5kZXggPj0gSVdMX1JBVEVfQ09VTlRfMzk0NSkpIHsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiBSYXRlIG91dCBvZiBib3VuZHM6ICVkXG4iLCBmaXJzdF9pbmRleCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIXByaXZfc3RhKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJsZWF2ZTogTm8gU1RBIHByaXYgZGF0YSB0byB1cGRhdGUhXG4iKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiBObyBTVEEgcHJpdiBkYXRhIHRvIHVwZGF0ZSFcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC01MDIsNyArNTM0LDcgQEAKIAkJaXdsMzk0NV9jb2xsZWN0X3R4X2RhdGEocnNfc3RhLAogCQkJCSAgICAmcnNfc3RhLT53aW5bc2NhbGVfcmF0ZV9pbmRleF0sCiAJCQkJICAgIDAsIGN1cnJlbnRfY291bnQsIHNjYWxlX3JhdGVfaW5kZXgpOwotCQlJV0xfREVCVUdfUkFURSgiVXBkYXRlIHJhdGUgJWQgZm9yICVkIHJldHJpZXMuXG4iLAorCQlJV0xfREVCVUdfUkFURShwcml2LCAiVXBkYXRlIHJhdGUgJWQgZm9yICVkIHJldHJpZXMuXG4iLAogCQkJICAgICAgIHNjYWxlX3JhdGVfaW5kZXgsIGN1cnJlbnRfY291bnQpOwogCiAJCXJldHJpZXMgLT0gY3VycmVudF9jb3VudDsKQEAgLTUxMiw3ICs1NDQsNyBAQAogCiAKIAkvKiBVcGRhdGUgdGhlIGxhc3QgaW5kZXggd2luZG93IHdpdGggc3VjY2Vzcy9mYWlsdXJlIGJhc2VkIG9uIEFDSyAqLwotCUlXTF9ERUJVR19SQVRFKCJVcGRhdGUgcmF0ZSAlZCB3aXRoICVzLlxuIiwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiVXBkYXRlIHJhdGUgJWQgd2l0aCAlcy5cbiIsCiAJCSAgICAgICBsYXN0X2luZGV4LAogCQkgICAgICAgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSA/CiAJCSAgICAgICAic3VjY2VzcyIgOiAiZmFpbHVyZSIpOwpAQCAtNTM3LDcgKzU2OSw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19SQVRFKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlXG4iKTsKIAogCXJldHVybjsKIH0KQEAgLTU0Nyw2ICs1NzksNyBAQAogewogCXU4IGhpZ2ggPSBJV0xfUkFURV9JTlZBTElEOwogCXU4IGxvdyA9IElXTF9SQVRFX0lOVkFMSUQ7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gcnNfc3RhLT5wcml2OwogCiAJLyogODAyLjExQSB3YWxrcyB0byB0aGUgbmV4dCBsaXRlcmFsIGFkamFjZW50IHJhdGUgaW4KIAkgKiB0aGUgcmF0ZSB0YWJsZSAqLwpAQCAtNTY1LDcgKzU5OCw4IEBACiAKIAkJLyogRmluZCB0aGUgbmV4dCByYXRlIHRoYXQgaXMgaW4gdGhlIHJhdGUgbWFzayAqLwogCQlpID0gaW5kZXggKyAxOwotCQlmb3IgKG1hc2sgPSAoMSA8PCBpKTsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyssIG1hc2sgPDw9IDEpIHsKKwkJZm9yIChtYXNrID0gKDEgPDwgaSk7IGkgPCBJV0xfUkFURV9DT1VOVF8zOTQ1OworCQkgICAgIGkrKywgbWFzayA8PD0gMSkgewogCQkJaWYgKHJhdGVfbWFzayAmIG1hc2spIHsKIAkJCQloaWdoID0gaTsKIAkJCQlicmVhazsKQEAgLTU4NSw3ICs2MTksNyBAQAogCQkJYnJlYWs7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBsb3cpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CiAJfQogCiAJaGlnaCA9IGluZGV4OwpAQCAtNTk4LDcgKzYzMiw3IEBACiAJCQlicmVhazsKIAkJaWYgKHJhdGVfbWFzayAmICgxIDw8IGhpZ2gpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgaGlnaGVyIHJhdGU6ICVkXG4iLCBoaWdoKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNraXBwaW5nIG1hc2tlZCBoaWdoZXIgcmF0ZTogJWRcbiIsIGhpZ2gpOwogCX0KIAogCXJldHVybiAoaGlnaCA8PCA4KSB8IGxvdzsKQEAgLTYzMSwxOSArNjY1LDIwIEBACiAJaW50IGluZGV4OwogCXN0cnVjdCBpd2wzOTQ1X3JzX3N0YSAqcnNfc3RhID0gcHJpdl9zdGE7CiAJc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsZV9kYXRhICp3aW5kb3cgPSBOVUxMOwotCWludCBjdXJyZW50X3RwdCA9IElXTF9JTlZfVFBUOwotCWludCBsb3dfdHB0ID0gSVdMX0lOVl9UUFQ7Ci0JaW50IGhpZ2hfdHB0ID0gSVdMX0lOVl9UUFQ7CisJaW50IGN1cnJlbnRfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CisJaW50IGxvd190cHQgPSBJV0xfSU5WQUxJRF9WQUxVRTsKKwlpbnQgaGlnaF90cHQgPSBJV0xfSU5WQUxJRF9WQUxVRTsKIAl1MzIgZmFpbF9jb3VudDsKIAlzOCBzY2FsZV9hY3Rpb24gPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAl1MTYgZmM7CiAJdTE2IHJhdGVfbWFzayA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopcHJpdl9yOworCXM4IG1heF9yYXRlX2lkeCA9IC0xOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilwcml2X3I7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0JSVdMX0RFQlVHX1JBVEUoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKHN0YSkKIAkJcmF0ZV9tYXNrID0gc3RhLT5zdXBwX3JhdGVzW3NiYW5kLT5iYW5kXTsKQEAgLTY1NCw3ICs2ODksNyBAQAogCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgIT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEgfHwKIAkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwKIAkgICAgIXN0YSB8fCAhcHJpdl9zdGEpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImxlYXZlOiBObyBTVEEgcHJpdiBkYXRhIHRvIHVwZGF0ZSFcbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAibGVhdmU6IE5vIFNUQSBwcml2IGRhdGEgdG8gdXBkYXRlIVxuIik7CiAJCWlmICghcmF0ZV9tYXNrKQogCQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPQogCQkJCQlyYXRlX2xvd2VzdF9pbmRleChzYmFuZCwgTlVMTCk7CkBAIC02NjQsNyArNjk5LDE0IEBACiAJCXJldHVybjsKIAl9CiAKLQlpbmRleCA9IG1pbihyc19zdGEtPmxhc3RfdHhyYXRlX2lkeCAmIDB4ZmZmZiwgSVdMX1JBVEVfQ09VTlQgLSAxKTsKKwkvKiBnZXQgdXNlciBtYXggcmF0ZSBpZiBzZXQgKi8KKwltYXhfcmF0ZV9pZHggPSB0eHJjLT5tYXhfcmF0ZV9pZHg7CisJaWYgKChzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSAmJiAobWF4X3JhdGVfaWR4ICE9IC0xKSkKKwkJbWF4X3JhdGVfaWR4ICs9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJaWYgKChtYXhfcmF0ZV9pZHggPCAwKSB8fCAobWF4X3JhdGVfaWR4ID49IElXTF9SQVRFX0NPVU5UKSkKKwkJbWF4X3JhdGVfaWR4ID0gLTE7CisKKwlpbmRleCA9IG1pbihyc19zdGEtPmxhc3RfdHhyYXRlX2lkeCAmIDB4ZmZmZiwgSVdMX1JBVEVfQ09VTlRfMzk0NSAtIDEpOwogCiAJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCXJhdGVfbWFzayA9IHJhdGVfbWFzayA8PCBJV0xfRklSU1RfT0ZETV9SQVRFOwpAQCAtNjc0LDcgKzcxNiw3IEBACiAJCXU4IHN0YV9pZCA9IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwogCiAJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBBREQgc3RhdGlvbiAlcG1cbiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEFERCBzdGF0aW9uICVwbVxuIiwKIAkJCQkgICAgICAgaGRyLT5hZGRyMSk7CiAJCQlzdGFfaWQgPSBpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsCiAJCQkJICAgIGhkci0+YWRkcjEsIDAsIENNRF9BU1lOQyk7CkBAIC02OTUsMjEgKzczNywzMCBAQAogCQlyc19zdGEtPnN0YXJ0X3JhdGUgPSBJV0xfUkFURV9JTlZBTElEOwogCX0KIAorCS8qIGZvcmNlIHVzZXIgbWF4IHJhdGUgaWYgc2V0IGJ5IHVzZXIgKi8KKwlpZiAoKG1heF9yYXRlX2lkeCAhPSAtMSkgJiYgKG1heF9yYXRlX2lkeCA8IGluZGV4KSkgeworCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgbWF4X3JhdGVfaWR4KSkKKwkJCWluZGV4ID0gbWF4X3JhdGVfaWR4OworCX0KKwogCXdpbmRvdyA9ICYocnNfc3RhLT53aW5baW5kZXhdKTsKIAogCWZhaWxfY291bnQgPSB3aW5kb3ctPmNvdW50ZXIgLSB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcjsKIAotCWlmICgoKGZhaWxfY291bnQgPD0gSVdMX1JBVEVfTUlOX0ZBSUxVUkVfVEgpICYmCisJaWYgKCgoZmFpbF9jb3VudCA8IElXTF9SQVRFX01JTl9GQUlMVVJFX1RIKSAmJgogCSAgICAgKHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyIDwgSVdMX1JBVEVfTUlOX1NVQ0NFU1NfVEgpKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyc19zdGEtPmxvY2ssIGZsYWdzKTsKIAotCQlJV0xfREVCVUdfUkFURSgiSW52YWxpZCBhdmVyYWdlX3RwdCBvbiByYXRlICVkOiAiCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJJbnZhbGlkIGF2ZXJhZ2VfdHB0IG9uIHJhdGUgJWQ6ICIKIAkJCSAgICAgICAiY291bnRlcjogJWQsIHN1Y2Nlc3NfY291bnRlcjogJWQsICIKIAkJCSAgICAgICAiZXhwZWN0ZWRfdHB0IGlzICVzTlVMTFxuIiwKIAkJCSAgICAgICBpbmRleCwKIAkJCSAgICAgICB3aW5kb3ctPmNvdW50ZXIsCiAJCQkgICAgICAgd2luZG93LT5zdWNjZXNzX2NvdW50ZXIsCiAJCQkgICAgICAgcnNfc3RhLT5leHBlY3RlZF90cHQgPyAibm90ICIgOiAiIik7CisKKwkgICAvKiBDYW4ndCBjYWxjdWxhdGUgdGhpcyB5ZXQ7IG5vdCBlbm91Z2ggaGlzdG9yeSAqLworCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CiAJCWdvdG8gb3V0OwogCiAJfQpAQCAtNzIxLDYgKzc3MiwxMSBAQAogCWxvdyA9IGhpZ2hfbG93ICYgMHhmZjsKIAloaWdoID0gKGhpZ2hfbG93ID4+IDgpICYgMHhmZjsKIAorCS8qIElmIHVzZXIgc2V0IG1heCByYXRlLCBkb250IGFsbG93IGhpZ2hlciB0aGFuIHVzZXIgY29uc3RyYWluICovCisJaWYgKChtYXhfcmF0ZV9pZHggIT0gLTEpICYmIChtYXhfcmF0ZV9pZHggPCBoaWdoKSkKKwkJaGlnaCA9IElXTF9SQVRFX0lOVkFMSUQ7CisKKwkvKiBDb2xsZWN0IE1lYXN1cmVkIHRocm91Z2hwdXRzIG9mIGFkamFjZW50IHJhdGVzICovCiAJaWYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKQogCQlsb3dfdHB0ID0gcnNfc3RhLT53aW5bbG93XS5hdmVyYWdlX3RwdDsKIApAQCAtNzI5LDU2ICs3ODUsNzggQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzX3N0YS0+bG9jaywgZmxhZ3MpOwogCi0Jc2NhbGVfYWN0aW9uID0gMTsKKwlzY2FsZV9hY3Rpb24gPSAwOwogCisJLyogTG93IHN1Y2Nlc3MgcmF0aW8gLCBuZWVkIHRvIGRyb3AgdGhlIHJhdGUgKi8KIAlpZiAoKHdpbmRvdy0+c3VjY2Vzc19yYXRpbyA8IElXTF9SQVRFX0RFQ1JFQVNFX1RIKSB8fCAhY3VycmVudF90cHQpIHsKLQkJSVdMX0RFQlVHX1JBVEUoImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgc3VjY2Vzc19yYXRpb1xuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHN1Y2Nlc3NfcmF0aW9cbiIpOwogCQlzY2FsZV9hY3Rpb24gPSAtMTsKLQl9IGVsc2UgaWYgKChsb3dfdHB0ID09IElXTF9JTlZfVFBUKSAmJiAoaGlnaF90cHQgPT0gSVdMX0lOVl9UUFQpKQotCQlzY2FsZV9hY3Rpb24gPSAxOwotCWVsc2UgaWYgKChsb3dfdHB0ICE9IElXTF9JTlZfVFBUKSAmJiAoaGlnaF90cHQgIT0gSVdMX0lOVl9UUFQpICYmCisJLyogTm8gdGhyb3VnaHB1dCBtZWFzdXJlZCB5ZXQgZm9yIGFkamFjZW50IHJhdGVzLAorCSAqIHRyeSBpbmNyZWFzZSAqLworCX0gZWxzZSBpZiAoKGxvd190cHQgPT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCisJCSAgIChoaWdoX3RwdCA9PSBJV0xfSU5WQUxJRF9WQUxVRSkpIHsKKworCQlpZiAoaGlnaCAhPSBJV0xfUkFURV9JTlZBTElEICYmIHdpbmRvdy0+c3VjY2Vzc19yYXRpbyA+PSBJV0xfUkFURV9JTkNSRUFTRV9USCkKKwkJCXNjYWxlX2FjdGlvbiA9IDE7CisJCWVsc2UgaWYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKQorCQkJc2NhbGVfYWN0aW9uID0gMDsKKworCS8qIEJvdGggYWRqYWNlbnQgdGhyb3VnaHB1dHMgYXJlIG1lYXN1cmVkLCBidXQgbmVpdGhlciBvbmUgaGFzCisJICogYmV0dGVyIHRocm91Z2hwdXQ7IHdlJ3JlIHVzaW5nIHRoZSBiZXN0IHJhdGUsIGRvbid0IGNoYW5nZQorCSAqIGl0ISAqLworCX0gZWxzZSBpZiAoKGxvd190cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCisJCSAoaGlnaF90cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpICYmCiAJCSAobG93X3RwdCA8IGN1cnJlbnRfdHB0KSAmJiAoaGlnaF90cHQgPCBjdXJyZW50X3RwdCkpIHsKLQkJSVdMX0RFQlVHX1JBVEUoIk5vIGFjdGlvbiAtLSBsb3cgWyVkXSAmIGhpZ2ggWyVkXSA8ICIKKworCQlJV0xfREVCVUdfUkFURShwcml2LCAiTm8gYWN0aW9uIC0tIGxvdyBbJWRdICYgaGlnaCBbJWRdIDwgIgogCQkJICAgICAgICJjdXJyZW50X3RwdCBbJWRdXG4iLAogCQkJICAgICAgIGxvd190cHQsIGhpZ2hfdHB0LCBjdXJyZW50X3RwdCk7CiAJCXNjYWxlX2FjdGlvbiA9IDA7CisKKwkvKiBBdCBsZWFzdCBvbmUgb2YgdGhlIHJhdGVzIGhhcyBiZXR0ZXIgdGhyb3VnaHB1dCAqLwogCX0gZWxzZSB7Ci0JCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WX1RQVCkgewotCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQpCisJCWlmIChoaWdoX3RwdCAhPSBJV0xfSU5WQUxJRF9WQUxVRSkgeworCisJCQkvKiBIaWdoIHJhdGUgaGFzIGJldHRlciB0aHJvdWdocHV0LCBJbmNyZWFzZQorCQkJICogcmF0ZSAqLworCQkJaWYgKGhpZ2hfdHB0ID4gY3VycmVudF90cHQgJiYKKwkJCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpCiAJCQkJc2NhbGVfYWN0aW9uID0gMTsKIAkJCWVsc2UgewotCQkJCUlXTF9ERUJVR19SQVRFCi0JCQkJICAgICgiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKLQkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKKwkJCQlJV0xfREVCVUdfUkFURShwcml2LAorCQkJCSAgICAiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGhpZ2ggdHB0XG4iKTsKKwkJCQlzY2FsZV9hY3Rpb24gPSAwOwogCQkJfQotCQl9IGVsc2UgaWYgKGxvd190cHQgIT0gSVdMX0lOVl9UUFQpIHsKKwkJfSBlbHNlIGlmIChsb3dfdHB0ICE9IElXTF9JTlZBTElEX1ZBTFVFKSB7CiAJCQlpZiAobG93X3RwdCA+IGN1cnJlbnRfdHB0KSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUKLQkJCQkgICAgKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHRwdFxuIik7CisJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKKwkJCQkgICAgImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKLQkJCX0gZWxzZQorCQkJfSBlbHNlIGlmICh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKKwkJCQkvKiBMb3dlciByYXRlIGhhcyBiZXR0ZXIKKwkJCQkgKiB0aHJvdWdocHV0LGRlY3JlYXNlIHJhdGUgKi8KIAkJCQlzY2FsZV9hY3Rpb24gPSAxOworCQkJfQogCQl9CiAJfQogCi0JaWYgKHNjYWxlX2FjdGlvbiA9PSAtMSkgewotCQlpZiAod2luZG93LT5zdWNjZXNzX3JhdGlvID4gSVdMX1NVQ0NFU1NfRE9XTl9USCkKLQkJCXNjYWxlX2FjdGlvbiA9IDA7Ci0JfSBlbHNlIGlmIChzY2FsZV9hY3Rpb24gPT0gMSkgewotCQlpZiAod2luZG93LT5zdWNjZXNzX3JhdGlvIDwgSVdMX1NVQ0NFU1NfVVBfVEgpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJObyBhY3Rpb24gLS0gc3VjY2Vzc19yYXRpbyBbJWRdIDwgIgotCQkJICAgICAgICJTVUNDRVNTIFVQXG4iLCB3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8pOwotCQkJc2NhbGVfYWN0aW9uID0gMDsKLQkJfQotCX0KKwkvKiBTYW5pdHkgY2hlY2s7IGFza2VkIGZvciBkZWNyZWFzZSwgYnV0IHN1Y2Nlc3MgcmF0ZSBvciB0aHJvdWdocHV0CisJICogaGFzIGJlZW4gZ29vZCBhdCBvbGQgcmF0ZS4gIERvbid0IGNoYW5nZSBpdC4gKi8KKwlpZiAoKHNjYWxlX2FjdGlvbiA9PSAtMSkgJiYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKSAmJgorCQkgICAgKCh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gPiBJV0xfUkFURV9ISUdIX1RIKSB8fAorCQkgICAgIChjdXJyZW50X3RwdCA+ICgxMDAgKiByc19zdGEtPmV4cGVjdGVkX3RwdFtsb3ddKSkpKQorCQlzY2FsZV9hY3Rpb24gPSAwOwogCiAJc3dpdGNoIChzY2FsZV9hY3Rpb24pIHsKIAljYXNlIC0xOgorCisJCS8qIERlY3Jlc2UgcmF0ZSAqLwogCQlpZiAobG93ICE9IElXTF9SQVRFX0lOVkFMSUQpCiAJCQlpbmRleCA9IGxvdzsKIAkJYnJlYWs7CiAKIAljYXNlIDE6CisJCS8qIEluY3JlYXNlIHJhdGUgKi8KIAkJaWYgKGhpZ2ggIT0gSVdMX1JBVEVfSU5WQUxJRCkKIAkJCWluZGV4ID0gaGlnaDsKIApAQCAtNzg2LDEwICs4NjQsMTEgQEAKIAogCWNhc2UgMDoKIAlkZWZhdWx0OgorCQkvKiBObyBjaGFuZ2UgKi8KIAkJYnJlYWs7CiAJfQogCi0JSVdMX0RFQlVHX1JBVEUoIlNlbGVjdGVkICVkIChhY3Rpb24gJWQpIC0gbG93ICVkIGhpZ2ggJWRcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNlbGVjdGVkICVkIChhY3Rpb24gJWQpIC0gbG93ICVkIGhpZ2ggJWRcbiIsCiAJCSAgICAgICBpbmRleCwgc2NhbGVfYWN0aW9uLCBsb3csIGhpZ2gpOwogCiAgb3V0OgpAQCAtODAxLDcgKzg4MCw3IEBACiAJZWxzZQogCQlpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA9IHJzX3N0YS0+bGFzdF90eHJhdGVfaWR4OwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlOiAlZFxuIiwgaW5kZXgpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZTogJWRcbiIsIGluZGV4KTsKIH0KIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCkBAIC04MTUsMjQgKzg5NCwzMSBAQAogCQkJCQkJICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWNoYXIgYnVmZlsxMDI0XTsKKwljaGFyICpidWZmOwogCWludCBkZXNjID0gMDsKIAlpbnQgajsKKwlzc2l6ZV90IHJldDsKIAlzdHJ1Y3QgaXdsMzk0NV9yc19zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAorCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlkZXNjICs9IHNwcmludGYoYnVmZiArIGRlc2MsICJ0eCBwYWNrZXRzPSVkIGxhc3QgcmF0ZSBpbmRleD0lZFxuIgogCQkJInJhdGU9MHglWCBmbHVzaCB0aW1lICVkXG4iLAogCQkJbHFfc3RhLT50eF9wYWNrZXRzLAogCQkJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHgsCiAJCQlscV9zdGEtPnN0YXJ0X3JhdGUsIGppZmZpZXNfdG9fbXNlY3MobHFfc3RhLT5mbHVzaF90aW1lKSk7Ci0JZm9yIChqID0gMDsgaiA8IElXTF9SQVRFX0NPVU5UOyBqKyspIHsKKwlmb3IgKGogPSAwOyBqIDwgSVdMX1JBVEVfQ09VTlRfMzk0NTsgaisrKSB7CiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsCiAJCQkJImNvdW50ZXI9JWQgc3VjY2Vzcz0lZCAlJT0lZFxuIiwKIAkJCQlscV9zdGEtPndpbltqXS5jb3VudGVyLAogCQkJCWxxX3N0YS0+d2luW2pdLnN1Y2Nlc3NfY291bnRlciwKIAkJCQlscV9zdGEtPndpbltqXS5zdWNjZXNzX3JhdGlvKTsKIAl9Ci0JcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmZiwgZGVzYyk7CisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlrZnJlZShidWZmKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfb3BzID0gewpAQCAtODc3LDE4ICs5NjMsMTggQEAKIAogdm9pZCBpd2wzOTQ1X3JhdGVfc2NhbGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgczMyIHN0YV9pZCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJczMyIHJzc2kgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiAqcHN0YTsKIAotCUlXTF9ERUJVR19SQVRFKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImVudGVyXG4iKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShodywgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YShodywgcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CkBAIC05MjQsMTEgKzEwMTAsMTEgQEAKIAlpZiAocnNzaSA9PSAwKQogCQlyc3NpID0gSVdMX01JTl9SU1NJX1ZBTDsKIAotCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9SQVRFLCAiTmV0d29yayBSU1NJOiAlZFxuIiwgcnNzaSk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIk5ldHdvcmsgUlNTSTogJWRcbiIsIHJzc2kpOwogCiAJcnNfc3RhLT5zdGFydF9yYXRlID0gaXdsMzk0NV9nZXRfcmF0ZV9pbmRleF9ieV9yc3NpKHJzc2ksIHByaXYtPmJhbmQpOwogCi0JSVdMX0RFQlVHX1JBVEUoImxlYXZlOiByc3NpICVkIGFzc2lnbiByYXRlIGluZGV4OiAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxlYXZlOiByc3NpICVkIGFzc2lnbiByYXRlIGluZGV4OiAiCiAJCSAgICAgICAiJWQgKHBsY3AgMHgleClcbiIsIHJzc2ksIHJzX3N0YS0+c3RhcnRfcmF0ZSwKIAkJICAgICAgIGl3bDM5NDVfcmF0ZXNbcnNfc3RhLT5zdGFydF9yYXRlXS5wbGNwKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVhNjYxMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gKiBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLCBVU0EKLSAqCi0gKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKLSAqIGZpbGUgY2FsbGVkIExJQ0VOU0UuCi0gKgotICogQ29udGFjdCBJbmZvcm1hdGlvbjoKLSAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KLSAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpZm5kZWYgX19pd2xfMzk0NV9yc19oX18KLSNkZWZpbmUgX19pd2xfMzk0NV9yc19oX18KLQotc3RydWN0IGl3bDM5NDVfcmF0ZV9pbmZvIHsKLQl1OCBwbGNwOwkJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfNk1fUExDUCwgZXRjLiAqLwotCXU4IGllZWU7CQkvKiBNQUMgaGVhZGVyOiAgSVdMX1JBVEVfNk1fSUVFRSwgZXRjLiAqLwotCXU4IHByZXZfaWVlZTsJCS8qIHByZXZpb3VzIHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KLQl1OCBuZXh0X2llZWU7CQkvKiBuZXh0IHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KLQl1OCBwcmV2X3JzOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIHJzIGFsZ28gKi8KLQl1OCBuZXh0X3JzOwkJLyogbmV4dCByYXRlIHVzZWQgaW4gcnMgYWxnbyAqLwotCXU4IHByZXZfcnNfdGdnOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIFRHRyBycyBhbGdvICovCi0JdTggbmV4dF9yc190Z2c7CQkvKiBuZXh0IHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLwotCXU4IHRhYmxlX3JzX2luZGV4OwkvKiBpbmRleCBpbiByYXRlIHNjYWxlIHRhYmxlIGNtZCAqLwotCXU4IHByZXZfdGFibGVfcnM7CS8qIHByZXYgaW4gcmF0ZSB0YWJsZSBjbWQgKi8KLX07Ci0KLS8qCi0gKiBUaGVzZSBzZXJ2ZSBhcyBpbmRleGVzIGludG8KLSAqIHN0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyBpd2wzOTQ1X3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKLSAqLwotZW51bSB7Ci0JSVdMX1JBVEVfMU1fSU5ERVggPSAwLAotCUlXTF9SQVRFXzJNX0lOREVYLAotCUlXTF9SQVRFXzVNX0lOREVYLAotCUlXTF9SQVRFXzExTV9JTkRFWCwKLQlJV0xfUkFURV82TV9JTkRFWCwKLQlJV0xfUkFURV85TV9JTkRFWCwKLQlJV0xfUkFURV8xMk1fSU5ERVgsCi0JSVdMX1JBVEVfMThNX0lOREVYLAotCUlXTF9SQVRFXzI0TV9JTkRFWCwKLQlJV0xfUkFURV8zNk1fSU5ERVgsCi0JSVdMX1JBVEVfNDhNX0lOREVYLAotCUlXTF9SQVRFXzU0TV9JTkRFWCwKLQlJV0xfUkFURV9DT1VOVCwKLQlJV0xfUkFURV9JTlZNX0lOREVYLAotCUlXTF9SQVRFX0lOVkFMSUQgPSBJV0xfUkFURV9JTlZNX0lOREVYCi19OwotCi1lbnVtIHsKLQlJV0xfUkFURV82TV9JTkRFWF9UQUJMRSA9IDAsCi0JSVdMX1JBVEVfOU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMTJNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFXzE4TV9JTkRFWF9UQUJMRSwKLQlJV0xfUkFURV8yNE1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMzZNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFXzQ4TV9JTkRFWF9UQUJMRSwKLQlJV0xfUkFURV81NE1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMk1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfNU1fSU5ERVhfVEFCTEUsCi0JSVdMX1JBVEVfMTFNX0lOREVYX1RBQkxFLAotCUlXTF9SQVRFX0lOVk1fSU5ERVhfVEFCTEUgPSBJV0xfUkFURV9JTlZNX0lOREVYLAotfTsKLQotZW51bSB7Ci0JSVdMX0ZJUlNUX09GRE1fUkFURSA9IElXTF9SQVRFXzZNX0lOREVYLAotCUlXTF9MQVNUX09GRE1fUkFURSA9IElXTF9SQVRFXzU0TV9JTkRFWCwKLQlJV0xfRklSU1RfQ0NLX1JBVEUgPSBJV0xfUkFURV8xTV9JTkRFWCwKLQlJV0xfTEFTVF9DQ0tfUkFURSA9IElXTF9SQVRFXzExTV9JTkRFWCwKLX07Ci0KLS8qICNkZWZpbmUgdnMuIGVudW0gdG8ga2VlcCBmcm9tIGRlZmF1bHRpbmcgdG8gJ2xhcmdlIGludGVnZXInICovCi0jZGVmaW5lCUlXTF9SQVRFXzZNX01BU0sgICAoMSA8PCBJV0xfUkFURV82TV9JTkRFWCkKLSNkZWZpbmUJSVdMX1JBVEVfOU1fTUFTSyAgICgxIDw8IElXTF9SQVRFXzlNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xMk1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMTJNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xOE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMThNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8yNE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMjRNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8zNk1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMzZNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV80OE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfNDhNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV81NE1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfNTRNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xTV9NQVNLICAgKDEgPDwgSVdMX1JBVEVfMU1fSU5ERVgpCi0jZGVmaW5lCUlXTF9SQVRFXzJNX01BU0sgICAoMSA8PCBJV0xfUkFURV8yTV9JTkRFWCkKLSNkZWZpbmUJSVdMX1JBVEVfNU1fTUFTSyAgICgxIDw8IElXTF9SQVRFXzVNX0lOREVYKQotI2RlZmluZQlJV0xfUkFURV8xMU1fTUFTSyAgKDEgPDwgSVdMX1JBVEVfMTFNX0lOREVYKQotCi0vKiAzOTQ1IHVDb2RlIEFQSSB2YWx1ZXMgZm9yIChsZWdhY3kpIGJpdCByYXRlcywgYm90aCBPRkRNIGFuZCBDQ0sgKi8KLWVudW0gewotCUlXTF9SQVRFXzZNX1BMQ1AgPSAxMywKLQlJV0xfUkFURV85TV9QTENQID0gMTUsCi0JSVdMX1JBVEVfMTJNX1BMQ1AgPSA1LAotCUlXTF9SQVRFXzE4TV9QTENQID0gNywKLQlJV0xfUkFURV8yNE1fUExDUCA9IDksCi0JSVdMX1JBVEVfMzZNX1BMQ1AgPSAxMSwKLQlJV0xfUkFURV80OE1fUExDUCA9IDEsCi0JSVdMX1JBVEVfNTRNX1BMQ1AgPSAzLAotCUlXTF9SQVRFXzFNX1BMQ1AgPSAxMCwKLQlJV0xfUkFURV8yTV9QTENQID0gMjAsCi0JSVdMX1JBVEVfNU1fUExDUCA9IDU1LAotCUlXTF9SQVRFXzExTV9QTENQID0gMTEwLAotfTsKLQotLyogTUFDIGhlYWRlciB2YWx1ZXMgZm9yIGJpdCByYXRlcyAqLwotZW51bSB7Ci0JSVdMX1JBVEVfNk1fSUVFRSA9IDEyLAotCUlXTF9SQVRFXzlNX0lFRUUgPSAxOCwKLQlJV0xfUkFURV8xMk1fSUVFRSA9IDI0LAotCUlXTF9SQVRFXzE4TV9JRUVFID0gMzYsCi0JSVdMX1JBVEVfMjRNX0lFRUUgPSA0OCwKLQlJV0xfUkFURV8zNk1fSUVFRSA9IDcyLAotCUlXTF9SQVRFXzQ4TV9JRUVFID0gOTYsCi0JSVdMX1JBVEVfNTRNX0lFRUUgPSAxMDgsCi0JSVdMX1JBVEVfMU1fSUVFRSA9IDIsCi0JSVdMX1JBVEVfMk1fSUVFRSA9IDQsCi0JSVdMX1JBVEVfNU1fSUVFRSA9IDExLAotCUlXTF9SQVRFXzExTV9JRUVFID0gMjIsCi19OwotCi0jZGVmaW5lIElXTF9DQ0tfQkFTSUNfUkFURVNfTUFTSyAgICBcCi0gICAgICAgKElXTF9SQVRFXzFNX01BU0sgICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMk1fTUFTSykKLQotI2RlZmluZSBJV0xfQ0NLX1JBVEVTX01BU0sgICAgICAgICAgXAotICAgICAgIChJV0xfQkFTSUNfUkFURVNfTUFTSyAgICAgIHwgXAotCUlXTF9SQVRFXzVNX01BU0sgICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMTFNX01BU0spCi0KLSNkZWZpbmUgSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyAgIFwKLQkoSVdMX1JBVEVfNk1fTUFTSyAgICAgICAgIHwgXAotCUlXTF9SQVRFXzEyTV9NQVNLICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMjRNX01BU0spCi0KLSNkZWZpbmUgSVdMX09GRE1fUkFURVNfTUFTSyAgICAgICAgIFwKLSAgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IFwKLQlJV0xfUkFURV85TV9NQVNLICAgICAgICAgIHwgXAotCUlXTF9SQVRFXzE4TV9NQVNLICAgICAgICAgfCBcCi0JSVdMX1JBVEVfMzZNX01BU0sgICAgICAgICB8IFwKLQlJV0xfUkFURV80OE1fTUFTSyAgICAgICAgIHwgXAotCUlXTF9SQVRFXzU0TV9NQVNLKQotCi0jZGVmaW5lIElXTF9CQVNJQ19SQVRFU19NQVNLICAgICAgICAgXAotCShJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLIHwgXAotCSBJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0spCi0KLSNkZWZpbmUgSVdMX1JBVEVTX01BU0sgKCgxIDw8IElXTF9SQVRFX0NPVU5UKSAtIDEpCi0KLSNkZWZpbmUgSVdMX0lOVl9UUFQgICAgLTEKLQotI2RlZmluZSBJV0xfTUlOX1JTU0lfVkFMICAgICAgICAgICAgICAgICAtMTAwCi0jZGVmaW5lIElXTF9NQVhfUlNTSV9WQUwgICAgICAgICAgICAgICAgICAgIDAKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3JhdGVfaW5mbyBpd2wzOTQ1X3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKLQotc3RhdGljIGlubGluZSB1OCBpd2wzOTQ1X2dldF9wcmV2X2llZWVfcmF0ZSh1OCByYXRlX2luZGV4KQotewotCXU4IHJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnByZXZfaWVlZTsKLQotCWlmIChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpCi0JCXJhdGUgPSByYXRlX2luZGV4OwotCXJldHVybiByYXRlOwotfQotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgcmF0ZSBzY2FsZSB0YWJsZSBiYXNlZCBvbiBhc3NvYyBpbmZvCi0gKgotICogVGhlIHNwZWNpZmljIHRocm91Z2hwdXQgdGFibGUgdXNlZCBpcyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBuZXR3b3JrCi0gKiB0aGUgYXNzb2NpYXRlZCB3aXRoLCBpbmNsdWRpbmcgQSwgQiwgRywgYW5kIEcgdy8gVEdHIHByb3RlY3Rpb24KLSAqLwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX3NjYWxlX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHMzMiBzdGFfaWQpOwotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gY2FsbGJhY2tzCi0gKgotICogU2luY2UgdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0gaXMgaGFyZHdhcmUgc3BlY2lmaWMsIHRoZXJlIGlzIG5vIG5lZWQKLSAqIG9yIHJlYXNvbiB0byBwbGFjZSBpdCBhcyBhIHN0YW5kIGFsb25lIG1vZHVsZS4gIFRoZSBkcml2ZXIgY2FuIGNhbGwKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyIGluIG9yZGVyIHRvIHJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCi0gKiB3aXRoIHRoZSBtYWM4MDIxMSBzdWJzeXN0ZW0uICBUaGlzIHNob3VsZCBiZSBwZXJmb3JtZWQgcHJpb3IgdG8gY2FsbGluZwotICogaWVlZTgwMjExX3JlZ2lzdGVyX2h3Ci0gKgotICovCi1leHRlcm4gaW50IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKHZvaWQpOwotCi0vKioKLSAqIGl3bDM5NDVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIgLSBVbnJlZ2lzdGVyIHRoZSByYXRlIGNvbnRyb2wgY2FsbGJhY2tzCi0gKgotICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcsIGJ1dCBiZWZvcmUKLSAqIHRoZSBkcml2ZXIgaXMgdW5sb2FkZWQuCi0gKi8KLWV4dGVybiB2b2lkIGl3bDM5NDVfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCk7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCmluZGV4IDQ1Y2ZhMWNmLi4yMzk5MzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTM4LDEwICszOCwxNSBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KIAotI2luY2x1ZGUgIml3bC0zOTQ1LWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtZmguaCIKKyNpbmNsdWRlICJpd2wtMzk0NS1maC5oIgorI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgorI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtMzk0NS5oIgorI2luY2x1ZGUgIml3bC1lZXByb20uaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgotI2luY2x1ZGUgIml3bC0zOTQ1LXJzLmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtYWduLXJzLmgiCiAKICNkZWZpbmUgSVdMX0RFQ0xBUkVfUkFURV9JTkZPKHIsIGlwLCBpbiwgcnAsIHJuLCBwcCwgbnApICAgIFwKIAlbSVdMX1JBVEVfIyNyIyNNX0lOREVYXSA9IHsgSVdMX1JBVEVfIyNyIyNNX1BMQ1AsICAgXApAQCAtNjMsNyArNjgsNyBAQAogICogbWFwcyB0byBJV0xfUkFURV9JTlZBTElECiAgKgogICovCi1jb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF0gPSB7Citjb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF8zOTQ1XSA9IHsKIAlJV0xfREVDTEFSRV9SQVRFX0lORk8oMSwgSU5WLCAyLCBJTlYsIDIsIElOViwgMiksICAgIC8qICAxbWJwcyAqLwogCUlXTF9ERUNMQVJFX1JBVEVfSU5GTygyLCAxLCA1LCAxLCA1LCAxLCA1KSwgICAgICAgICAgLyogIDJtYnBzICovCiAJSVdMX0RFQ0xBUkVfUkFURV9JTkZPKDUsIDIsIDYsIDIsIDExLCAyLCAxMSksICAgICAgICAvKjUuNW1icHMgKi8KQEAgLTkxLDcgKzk2LDcgQEAKICAqIFVzZSBmb3Igb25seSBzcGVjaWFsIGRlYnVnZ2luZy4gIFRoaXMgZnVuY3Rpb24gaXMganVzdCBhIHBsYWNlaG9sZGVyIGFzLWlzLAogICogICB5b3UnbGwgbmVlZCB0byBwcm92aWRlIHRoZSBzcGVjaWFsIGJpdHMhIC4uLgogICogICAuLi4gYW5kIHNldCBJV0xfRVZUX0RJU0FCTEUgdG8gMS4gKi8KLXZvaWQgaXdsMzk0NV9kaXNhYmxlX2V2ZW50cyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OwogCWludCBpOwpAQCAtMTUwLDM0ICsxNTUsMzQgQEAKIAogCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwogCWlmICghaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CiAJCXJldHVybjsKIAl9CiAKLQlyZXQgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCi0JZGlzYWJsZV9wdHIgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICg0ICogc2l6ZW9mKHUzMikpKTsKLQlhcnJheV9zaXplID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoNSAqIHNpemVvZih1MzIpKSk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJZGlzYWJsZV9wdHIgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDQgKiBzaXplb2YodTMyKSkpOworCWFycmF5X3NpemUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDUgKiBzaXplb2YodTMyKSkpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlpZiAoSVdMX0VWVF9ESVNBQkxFICYmIChhcnJheV9zaXplID09IElXTF9FVlRfRElTQUJMRV9TSVpFKSkgewotCQlJV0xfREVCVUdfSU5GTygiRGlzYWJsaW5nIHNlbGVjdGVkIHVDb2RlIGxvZyBldmVudHMgYXQgMHgleFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRpc2FibGluZyBzZWxlY3RlZCB1Q29kZSBsb2cgZXZlbnRzIGF0IDB4JXhcbiIsCiAJCQkgICAgICAgZGlzYWJsZV9wdHIpOwotCQlyZXQgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwkJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAkJZm9yIChpID0gMDsgaSA8IElXTF9FVlRfRElTQUJMRV9TSVpFOyBpKyspCi0JCQlpd2wzOTQ1X3dyaXRlX3RhcmdfbWVtKHByaXYsCisJCQlpd2xfd3JpdGVfdGFyZ19tZW0ocHJpdiwKIAkJCQkJICAgZGlzYWJsZV9wdHIgKyAoaSAqIHNpemVvZih1MzIpKSwKIAkJCQkJICAgZXZ0X2Rpc2FibGVbaV0pOwogCi0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJTZWxlY3RlZCB1Q29kZSBsb2cgZXZlbnRzIG1heSBiZSBkaXNhYmxlZFxuIik7Ci0JCUlXTF9ERUJVR19JTkZPKCIgIGJ5IHdyaXRpbmcgXCIxXCJzIGludG8gZGlzYWJsZSBiaXRtYXBcbiIpOwotCQlJV0xfREVCVUdfSU5GTygiICBpbiBTUkFNIGF0IDB4JXgsIHNpemUgJWQgdTMyc1xuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNlbGVjdGVkIHVDb2RlIGxvZyBldmVudHMgbWF5IGJlIGRpc2FibGVkXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIiAgYnkgd3JpdGluZyBcIjFcInMgaW50byBkaXNhYmxlIGJpdG1hcFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIgIGluIFNSQU0gYXQgMHgleCwgc2l6ZSAlZCB1MzJzXG4iLAogCQkJICAgICAgIGRpc2FibGVfcHRyLCBhcnJheV9zaXplKTsKIAl9CiAKQEAgLTE5Myw0MCArMTk4LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLS8qKgotICogaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyAtIEdldCBhbnRlbm5hIGZsYWdzIGZvciBSWE9OIGNvbW1hbmQKLSAqIEBwcml2OiBlZXByb20gYW5kIGFudGVubmEgZmllbGRzIGFyZSB1c2VkIHRvIGRldGVybWluZSBhbnRlbm5hIGZsYWdzCi0gKgotICogcHJpdi0+ZWVwcm9tICBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhbnRlbm5hIEFVWC9NQUlOIGFyZSByZXZlcnNlZAotICogcHJpdi0+YW50ZW5uYSBzcGVjaWZpZXMgdGhlIGFudGVubmEgZGl2ZXJzaXR5IG1vZGU6Ci0gKgotICogSVdMX0FOVEVOTkFfRElWRVJTSVRZIC0gTklDIHNlbGVjdHMgYmVzdCBhbnRlbm5hIGJ5IGl0c2VsZgotICogSVdMX0FOVEVOTkFfTUFJTiAgICAgIC0gRm9yY2UgTUFJTiBhbnRlbm5hCi0gKiBJV0xfQU5URU5OQV9BVVggICAgICAgLSBGb3JjZSBBVVggYW50ZW5uYQotICovCi1fX2xlMzIgaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN3aXRjaCAocHJpdi0+YW50ZW5uYSkgewotCWNhc2UgSVdMX0FOVEVOTkFfRElWRVJTSVRZOgotCQlyZXR1cm4gMDsKLQotCWNhc2UgSVdMX0FOVEVOTkFfTUFJTjoKLQkJaWYgKHByaXYtPmVlcHJvbS5hbnRlbm5hX3N3aXRjaF90eXBlKQotCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0JfTVNLOwotCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQV9NU0s7Ci0KLQljYXNlIElXTF9BTlRFTk5BX0FVWDoKLQkJaWYgKHByaXYtPmVlcHJvbS5hbnRlbm5hX3N3aXRjaF90eXBlKQotCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0FfTVNLOwotCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQl9NU0s7Ci0JfQotCi0JLyogYmFkIGFudGVubmEgc2VsZWN0b3IgdmFsdWUgKi8KLQlJV0xfRVJST1IoIkJhZCBhbnRlbm5hIHNlbGVjdG9yIHZhbHVlICgweCV4KVxuIiwgcHJpdi0+YW50ZW5uYSk7Ci0JcmV0dXJuIDA7CQkvKiAiZGl2ZXJzaXR5IiBpcyBkZWZhdWx0IGlmIGVycm9yICovCi19Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAjZGVmaW5lIFRYX1NUQVRVU19FTlRSWSh4KSBjYXNlIFRYX1NUQVRVU19GQUlMXyAjIyB4OiByZXR1cm4gI3gKIAogc3RhdGljIGNvbnN0IGNoYXIgKml3bDM5NDVfZ2V0X3R4X2ZhaWxfcmVhc29uKHUzMiBzdGF0dXMpCkBAIC0yNjYsNyArMjM4LDcgQEAKICAqIGZvciBBIGFuZCBCIG1vZGUgd2UgbmVlZCB0byBvdmVycmlnaHQgcHJldgogICogdmFsdWUKICAqLwotaW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCByYXRlKQoraW50IGl3bDM5NDVfcnNfbmV4dF9yYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHJhdGUpCiB7CiAJaW50IG5leHRfcmF0ZSA9IGl3bDM5NDVfZ2V0X3ByZXZfaWVlZV9yYXRlKHJhdGUpOwogCkBAIC0yNzksNyArMjUxLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgogCQlpZiAoIShwcml2LT5zdGFfc3VwcF9yYXRlcyAmIElXTF9PRkRNX1JBVEVTX01BU0spICYmCi0JCSAgICBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwkJICAgIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCQlpZiAocmF0ZSA9PSBJV0xfUkFURV8xMU1fSU5ERVgpCiAJCQkJbmV4dF9yYXRlID0gSVdMX1JBVEVfNU1fSU5ERVg7CiAJCX0KQEAgLTMwMCwxMiArMjcyLDEyIEBACiAgKiBuZWVkIHRvIGJlIHJlY2xhaW1lZC4gQXMgcmVzdWx0LCBzb21lIGZyZWUgc3BhY2UgZm9ybXMuIElmIHRoZXJlIGlzCiAgKiBlbm91Z2ggZnJlZSBzcGFjZSAoPiBsb3cgbWFyayksIHdha2UgdGhlIHN0YWNrIHRoYXQgZmVlZHMgdXMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIHZvaWQgaXdsMzk0NV90eF9xdWV1ZV9yZWNsYWltKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgIGludCB0eHFfaWQsIGludCBpbmRleCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9pbmZvICp0eF9pbmZvOworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKKwlzdHJ1Y3QgaXdsX3R4X2luZm8gKnR4X2luZm87CiAKIAlCVUdfT04odHhxX2lkID09IElXTF9DTURfUVVFVUVfTlVNKTsKIApAQCAtMzE1LDM0ICsyODcsMzQgQEAKIAkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOwogCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUocHJpdi0+aHcsIHR4X2luZm8tPnNrYlswXSk7CiAJCXR4X2luZm8tPnNrYlswXSA9IE5VTEw7Ci0JCWl3bDM5NDVfaHdfdHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CisJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9mcmVlX3RmZChwcml2LCB0eHEpOwogCX0KIAotCWlmIChpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpID4gcS0+bG93X21hcmsgJiYgKHR4cV9pZCA+PSAwKSAmJgorCWlmIChpd2xfcXVldWVfc3BhY2UocSkgPiBxLT5sb3dfbWFyayAmJiAodHhxX2lkID49IDApICYmCiAJCQkodHhxX2lkICE9IElXTF9DTURfUVVFVUVfTlVNKSAmJgogCQkJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiB9CiAKIC8qKgogICogaXdsMzk0NV9yeF9yZXBseV90eCAtIEhhbmRsZSBUeCByZXNwb25zZQogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X3R4KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV90eChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwogCXUxNiBzZXF1ZW5jZSA9IGxlMTZfdG9fY3B1KHBrdC0+aGRyLnNlcXVlbmNlKTsKIAlpbnQgdHhxX2lkID0gU0VRX1RPX1FVRVVFKHNlcXVlbmNlKTsKIAlpbnQgaW5kZXggPSBTRVFfVE9fSU5ERVgoc2VxdWVuY2UpOwotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwICp0eF9yZXNwID0gKHZvaWQgKikmcGt0LT51LnJhd1swXTsKIAl1MzIgIHN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X3Jlc3AtPnN0YXR1cyk7CiAJaW50IHJhdGVfaWR4OwogCWludCBmYWlsOwogCi0JaWYgKChpbmRleCA+PSB0eHEtPnEubl9iZCkgfHwgKGl3bDM5NDVfeDJfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgorCWlmICgoaW5kZXggPj0gdHhxLT5xLm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKKwkJSVdMX0VSUihwcml2LCAiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cV9pZCAoJWQpIGluZGV4ICVkICIKIAkJCSAgImlzIG91dCBvZiByYW5nZSBbMC0lZF0gJWQgJWRcbiIsIHR4cV9pZCwKIAkJCSAgaW5kZXgsIHR4cS0+cS5uX2JkLCB0eHEtPnEud3JpdGVfcHRyLAogCQkJICB0eHEtPnEucmVhZF9wdHIpOwpAQCAtMzY2LDE1ICszMzgsMTUgQEAKIAlpbmZvLT5mbGFncyB8PSAoKHN0YXR1cyAmIFRYX1NUQVRVU19NU0spID09IFRYX1NUQVRVU19TVUNDRVNTKSA/CiAJCQkJSUVFRTgwMjExX1RYX1NUQVRfQUNLIDogMDsKIAotCUlXTF9ERUJVR19UWCgiVHggcXVldWUgJWQgU3RhdHVzICVzICgweCUwOHgpIHBsY3AgcmF0ZSAlZCByZXRyaWVzICVkXG4iLAorCUlXTF9ERUJVR19UWChwcml2LCAiVHggcXVldWUgJWQgU3RhdHVzICVzICgweCUwOHgpIHBsY3AgcmF0ZSAlZCByZXRyaWVzICVkXG4iLAogCQkJdHhxX2lkLCBpd2wzOTQ1X2dldF90eF9mYWlsX3JlYXNvbihzdGF0dXMpLCBzdGF0dXMsCiAJCQl0eF9yZXNwLT5yYXRlLCB0eF9yZXNwLT5mYWlsdXJlX2ZyYW1lKTsKIAotCUlXTF9ERUJVR19UWF9SRVBMWSgiVHggcXVldWUgcmVjbGFpbSAlZFxuIiwgaW5kZXgpOworCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiVHggcXVldWUgcmVjbGFpbSAlZFxuIiwgaW5kZXgpOwogCWl3bDM5NDVfdHhfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKIAogCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCi0JCUlXTF9FUlJPUigiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOwogfQogCiAKQEAgLTM4NywxNCArMzU5LDE0IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi12b2lkIGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCit2b2lkIGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlJV0xfREVCVUdfUlgoIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAorCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCiAJCSAgICAgKGludClzaXplb2Yoc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyksCiAJCSAgICAgbGUzMl90b19jcHUocGt0LT5sZW4pKTsKIAotCW1lbWNweSgmcHJpdi0+c3RhdGlzdGljcywgcGt0LT51LnJhdywgc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpKTsKKwltZW1jcHkoJnByaXYtPnN0YXRpc3RpY3NfMzksIHBrdC0+dS5yYXcsIHNpemVvZihwcml2LT5zdGF0aXN0aWNzXzM5KSk7CiAKIAlpd2wzOTQ1X2xlZF9iYWNrZ3JvdW5kKHByaXYpOwogCkBAIC00MDYsNyArMzc4LDcgQEAKICAqIE1pc2MuIGludGVybmFsIHN0YXRlIGFuZCBoZWxwZXIgZnVuY3Rpb25zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAKIC8qKgogICogaXdsMzk0NV9yZXBvcnRfZnJhbWUgLSBkdW1wIGZyYW1lIHRvIHN5c2xvZyBkdXJpbmcgZGVidWcgc2Vzc2lvbnMKQEAgLTQxNSw4ICszODcsOCBAQAogICogaW5jbHVkaW5nIHNlbGVjdGl2ZSBmcmFtZSBkdW1wcy4KICAqIGdyb3VwMTAwIHBhcmFtZXRlciBzZWxlY3RzIHdoZXRoZXIgdG8gc2hvdyAxIG91dCBvZiAxMDAgZ29vZCBmcmFtZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCwKK3N0YXRpYyB2b2lkIF9pd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCiB7CiAJdTMyIHRvX3VzOwpAQCAtNTI0LDEzICs0OTYsMTMgQEAKIAkJICogTUFDIGFkZHJlc3NlcyBzaG93IGp1c3QgdGhlIGxhc3QgYnl0ZSAoZm9yIGJyZXZpdHkpLAogCQkgKiAgICBidXQgeW91IGNhbiBoYWNrIGl0IHRvIHNob3cgbW9yZSwgaWYgeW91J2QgbGlrZSB0by4gKi8KIAkJaWYgKGRhdGFmcmFtZSkKLQkJCUlXTF9ERUJVR19SWCgiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiJXM6IG1oZD0weCUwNHgsIGRzdD0weCUwMngsICIKIAkJCQkgICAgICJsZW49JXUsIHJzc2k9JWQsIGNobmw9JWQsIHJhdGU9JWQsIFxuIiwKIAkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCiAJCQkJICAgICBsZW5ndGgsIHJzc2ksIGNoYW5uZWwsIHJhdGUpOwogCQllbHNlIHsKIAkJCS8qIHNyYy9kc3QgYWRkcmVzc2VzIGFzc3VtZSBtYW5hZ2VkIG1vZGUgKi8KLQkJCUlXTF9ERUJVR19SWCgiJXM6IDB4JTA0eCwgZHN0PTB4JTAyeCwgIgorCQkJSVdMX0RFQlVHX1JYKHByaXYsICIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCAiCiAJCQkJICAgICAic3JjPTB4JTAyeCwgcnNzaT0ldSwgdGltPSVsdSB1c2VjLCAiCiAJCQkJICAgICAicGh5PTB4JTAyeCwgY2hubD0lZFxuIiwKIAkJCQkgICAgIHRpdGxlLCBsZTE2X3RvX2NwdShmYyksIGhlYWRlci0+YWRkcjFbNV0sCkBAIC01NDAsMTggKzUxMiwyNyBAQAogCQl9CiAJfQogCWlmIChwcmludF9kdW1wKQotCQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9SWCwgZGF0YSwgbGVuZ3RoKTsKKwkJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9SWCwgZGF0YSwgbGVuZ3RoKTsKIH0KKworc3RhdGljIHZvaWQgaXdsMzk0NV9kYmdfcmVwb3J0X2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJICAgICAgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKKwkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhlYWRlciwgaW50IGdyb3VwMTAwKQoreworCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9SWCkKKwkJX2l3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgZ3JvdXAxMDApOworfQorCiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCwKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICBzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0LAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGVhZGVyLCBpbnQgZ3JvdXAxMDApCiB7CiB9CiAjZW5kaWYKIAogLyogVGhpcyBpcyBuZWNlc3Nhcnkgb25seSBmb3IgYSBudW1iZXIgb2Ygc3RhdGlzdGljcywgc2VlIHRoZSBjYWxsZXIuICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaXNfbmV0d29ya19wYWNrZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsMzk0NV9pc19uZXR3b3JrX3BhY2tldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXIpCiB7CiAJLyogRmlsdGVyIGluY29taW5nIHBhY2tldHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIHRhcmdldGVkIHRvd2FyZApAQCAtNTY4LDEyICs1NDksMTIgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfcGFzc19wYWNrZXRfdG9fbWFjODAyMTEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfTEVEUworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKUlXTF9SWF9EQVRBKHBrdCk7CiAjZW5kaWYKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKnJ4X2hkciA9IElXTF9SWF9IRFIocGt0KTsKQEAgLTU4MSwxNSArNTYyLDE1IEBACiAJc2hvcnQgbGVuID0gbGUxNl90b19jcHUocnhfaGRyLT5sZW4pOwogCiAJLyogV2UgcmVjZWl2ZWQgZGF0YSBmcm9tIHRoZSBIVywgc28gc3RvcCB0aGUgd2F0Y2hkb2cgKi8KLQlpZiAodW5saWtlbHkoKGxlbiArIElXTF9SWF9GUkFNRV9TSVpFKSA+IHNrYl90YWlscm9vbShyeGItPnNrYikpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJDb3JydXB0aW9uIGRldGVjdGVkIVxuIik7CisJaWYgKHVubGlrZWx5KChsZW4gKyBJV0wzOV9SWF9GUkFNRV9TSVpFKSA+IHNrYl90YWlscm9vbShyeGItPnNrYikpKSB7CisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJDb3JydXB0aW9uIGRldGVjdGVkIVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBXZSBvbmx5IHByb2Nlc3MgZGF0YSBwYWNrZXRzIGlmIHRoZSBpbnRlcmZhY2UgaXMgb3BlbiAqLwogCWlmICh1bmxpa2VseSghcHJpdi0+aXNfb3BlbikpIHsKLQkJSVdMX0RFQlVHX0RST1BfTElNSVQKLQkJICAgICgiRHJvcHBpbmcgcGFja2V0IHdoaWxlIGludGVyZmFjZSBpcyBub3Qgb3Blbi5cbiIpOworCQlJV0xfREVCVUdfRFJPUF9MSU1JVChwcml2LAorCQkJIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IG9wZW4uXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTk3LDExICs1NzgsMTIgQEAKIAkvKiBTZXQgdGhlIHNpemUgb2YgdGhlIHNrYiB0byB0aGUgc2l6ZSBvZiB0aGUgZnJhbWUgKi8KIAlza2JfcHV0KHJ4Yi0+c2tiLCBsZTE2X3RvX2NwdShyeF9oZHItPmxlbikpOwogCi0JaWYgKGl3bDM5NDVfcGFyYW1faHdjcnlwdG8pCi0JCWl3bDM5NDVfc2V0X2RlY3J5cHRlZF9mbGFnKHByaXYsIHJ4Yi0+c2tiLAorCWlmICghaXdsMzk0NV9tb2RfcGFyYW1zLnN3X2NyeXB0bykKKwkJaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyhwcml2LAorCQkJCSAgICAgICAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeGItPnNrYi0+ZGF0YSwKIAkJCQkgICAgICAgbGUzMl90b19jcHUocnhfZW5kLT5zdGF0dXMpLCBzdGF0cyk7CiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCisjaWZkZWYgQ09ORklHX0lXTFdJRklfTEVEUwogCWlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQogCQlwcml2LT5yeHR4cGFja2V0cyArPSBsZW47CiAjZW5kaWYKQEAgLTYxMSwxMiArNTkzLDEyIEBACiAKICNkZWZpbmUgSVdMX0RFTEFZX05FWFRfU0NBTl9BRlRFUl9BU1NPQyAoSFoqNikKIAotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9yeChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfcngoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZWFkZXI7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9zdGF0cyAqcnhfc3RhdHMgPSBJV0xfUlhfU1RBVFMocGt0KTsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKnJ4X2hkciA9IElXTF9SWF9IRFIocGt0KTsKIAlzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgKnJ4X2VuZCA9IElXTF9SWF9FTkQocGt0KTsKQEAgLTY0NCwyMiArNjI2LDIxIEBACiAJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfU0hPUlRQUkU7CiAKIAlpZiAoKHVubGlrZWx5KHJ4X3N0YXRzLT5waHlfY291bnQgPiAyMCkpKSB7Ci0JCUlXTF9ERUJVR19EUk9QCi0JCSAgICAoImRzcCBzaXplIG91dCBvZiByYW5nZSBbMCwyMF06ICIKLQkJICAgICAiJWQvbiIsIHJ4X3N0YXRzLT5waHlfY291bnQpOworCQlJV0xfREVCVUdfRFJPUChwcml2LCAiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogJWQvbiIsCisJCQkJcnhfc3RhdHMtPnBoeV9jb3VudCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoIShyeF9lbmQtPnN0YXR1cyAmIFJYX1JFU19TVEFUVVNfTk9fQ1JDMzJfRVJST1IpCiAJICAgIHx8ICEocnhfZW5kLT5zdGF0dXMgJiBSWF9SRVNfU1RBVFVTX05PX1JYRV9PVkVSRkxPVykpIHsKLQkJSVdMX0RFQlVHX1JYKCJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsIHJ4X2VuZC0+c3RhdHVzKTsKKwkJSVdMX0RFQlVHX1JYKHByaXYsICJCYWQgQ1JDIG9yIEZJRk86IDB4JTA4WC5cbiIsIHJ4X2VuZC0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIAogCiAKIAkvKiBDb252ZXJ0IDM5NDUncyByc3NpIGluZGljYXRvciB0byBkQm0gKi8KLQlyeF9zdGF0dXMuc2lnbmFsID0gcnhfc3RhdHMtPnJzc2kgLSBJV0xfUlNTSV9PRkZTRVQ7CisJcnhfc3RhdHVzLnNpZ25hbCA9IHJ4X3N0YXRzLT5yc3NpIC0gSVdMMzlfUlNTSV9PRkZTRVQ7CiAKIAkvKiBTZXQgZGVmYXVsdCBub2lzZSB2YWx1ZSB0byAtMTI3ICovCiAJaWYgKHByaXYtPmxhc3Rfcnhfbm9pc2UgPT0gMCkKQEAgLTY5MSw3ICs2NzIsNyBAQAogCX0KIAogCi0JSVdMX0RFQlVHX1NUQVRTKCJSc3NpICVkIG5vaXNlICVkIHF1YWwgJWQgc2lnX2F2ZyAlZCBub2lzZV9kaWZmICVkXG4iLAorCUlXTF9ERUJVR19TVEFUUyhwcml2LCAiUnNzaSAlZCBub2lzZSAlZCBxdWFsICVkIHNpZ19hdmcgJWQgbm9pc2VfZGlmZiAlZFxuIiwKIAkJCXJ4X3N0YXR1cy5zaWduYWwsIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnF1YWwsCiAJCQlyeF9zdGF0c19zaWdfYXZnLCByeF9zdGF0c19ub2lzZV9kaWZmKTsKIApAQCAtNjk5LDE3ICs2ODAsMTQgQEAKIAogCW5ldHdvcmtfcGFja2V0ID0gaXdsMzk0NV9pc19uZXR3b3JrX3BhY2tldChwcml2LCBoZWFkZXIpOwogCi0JSVdMX0RFQlVHX1NUQVRTX0xJTUlUKCJbJWNdICVkIFJTU0k6JWQgU2lnbmFsOiV1LCBOb2lzZToldSwgUmF0ZToldVxuIiwKKwlJV0xfREVCVUdfU1RBVFNfTElNSVQocHJpdiwgIlslY10gJWQgUlNTSTolZCBTaWduYWw6JXUsIE5vaXNlOiV1LCBSYXRlOiV1XG4iLAogCQkJICAgICAgbmV0d29ya19wYWNrZXQgPyAnKicgOiAnICcsCiAJCQkgICAgICBsZTE2X3RvX2NwdShyeF9oZHItPmNoYW5uZWwpLAogCQkJICAgICAgcnhfc3RhdHVzLnNpZ25hbCwgcnhfc3RhdHVzLnNpZ25hbCwKIAkJCSAgICAgIHJ4X3N0YXR1cy5ub2lzZSwgcnhfc3RhdHVzLnJhdGVfaWR4KTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaWYgKGl3bDM5NDVfZGVidWdfbGV2ZWwgJiAoSVdMX0RMX1JYKSkKLQkJLyogU2V0ICIxIiB0byByZXBvcnQgZ29vZCBkYXRhIGZyYW1lcyBpbiBncm91cHMgb2YgMTAwICovCi0JCWl3bDM5NDVfZGJnX3JlcG9ydF9mcmFtZShwcml2LCBwa3QsIGhlYWRlciwgMSk7Ci0jZW5kaWYKKwkvKiBTZXQgIjEiIHRvIHJlcG9ydCBnb29kIGRhdGEgZnJhbWVzIGluIGdyb3VwcyBvZiAxMDAgKi8KKwlpd2wzOTQ1X2RiZ19yZXBvcnRfZnJhbWUocHJpdiwgcGt0LCBoZWFkZXIsIDEpOwogCiAJaWYgKG5ldHdvcmtfcGFja2V0KSB7CiAJCXByaXYtPmxhc3RfYmVhY29uX3RpbWUgPSBsZTMyX3RvX2NwdShyeF9lbmQtPmJlYWNvbl90aW1lc3RhbXApOwpAQCAtNzIxLDI0ICs2OTksMzEgQEAKIAlpd2wzOTQ1X3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKHByaXYsIHJ4YiwgJnJ4X3N0YXR1cyk7CiB9CiAKLWludCBpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB2b2lkICpwdHIsCi0JCQkJIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbikKK2ludCBpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCisJCQkJICAgICBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4sIHU4IHJlc2V0LCB1OCBwYWQpCiB7CiAJaW50IGNvdW50OwotCXUzMiBwYWQ7Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICp0ZmQgPSAoc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICopcHRyOworCXN0cnVjdCBpd2xfcXVldWUgKnE7CisJc3RydWN0IGl3bDM5NDVfdGZkICp0ZmQsICp0ZmRfdG1wOworCisJcSA9ICZ0eHEtPnE7CisJdGZkX3RtcCA9IChzdHJ1Y3QgaXdsMzk0NV90ZmQgKil0eHEtPnRmZHM7CisJdGZkID0gJnRmZF90bXBbcS0+d3JpdGVfcHRyXTsKKworCWlmIChyZXNldCkKKwkJbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKIAogCWNvdW50ID0gVEZEX0NUTF9DT1VOVF9HRVQobGUzMl90b19jcHUodGZkLT5jb250cm9sX2ZsYWdzKSk7Ci0JcGFkID0gVEZEX0NUTF9QQURfR0VUKGxlMzJfdG9fY3B1KHRmZC0+Y29udHJvbF9mbGFncykpOwogCiAJaWYgKChjb3VudCA+PSBOVU1fVEZEX0NIVU5LUykgfHwgKGNvdW50IDwgMCkpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBjYW4gbm90IHNlbmQgbW9yZSB0aGFuICVkIGNodW5rc1xuIiwKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgY2FuIG5vdCBzZW5kIG1vcmUgdGhhbiAlZCBjaHVua3NcbiIsCiAJCQkgIE5VTV9URkRfQ0hVTktTKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdGZkLT5wYVtjb3VudF0uYWRkciA9IGNwdV90b19sZTMyKGFkZHIpOwotCXRmZC0+cGFbY291bnRdLmxlbiA9IGNwdV90b19sZTMyKGxlbik7CisJdGZkLT50YnNbY291bnRdLmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyKTsKKwl0ZmQtPnRic1tjb3VudF0ubGVuID0gY3B1X3RvX2xlMzIobGVuKTsKIAogCWNvdW50Kys7CiAKQEAgLTc1MywzMiArNzM4LDM1IEBACiAgKgogICogRG9lcyBOT1QgYWR2YW5jZSBhbnkgaW5kZXhlcwogICovCi1pbnQgaXdsMzk0NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSkKK3ZvaWQgaXdsMzk0NV9od190eHFfZnJlZV90ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICpiZF90bXAgPSAoc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICopJnR4cS0+YmRbMF07Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICpiZCA9ICZiZF90bXBbdHhxLT5xLnJlYWRfcHRyXTsKKwlzdHJ1Y3QgaXdsMzk0NV90ZmQgKnRmZF90bXAgPSAoc3RydWN0IGl3bDM5NDVfdGZkICopdHhxLT50ZmRzOworCWludCBpbmRleCA9IHR4cS0+cS5yZWFkX3B0cjsKKwlzdHJ1Y3QgaXdsMzk0NV90ZmQgKnRmZCA9ICZ0ZmRfdG1wW2luZGV4XTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKIAlpbnQgaTsKIAlpbnQgY291bnRlcjsKIAotCS8qIGNsYXNzaWZ5IGJkICovCi0JaWYgKHR4cS0+cS5pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkKLQkJLyogbm90aGluZyB0byBjbGVhbnVwIGFmdGVyIGZvciBob3N0IGNvbW1hbmRzICovCi0JCXJldHVybiAwOwotCiAJLyogc2FuaXR5IGNoZWNrICovCi0JY291bnRlciA9IFRGRF9DVExfQ09VTlRfR0VUKGxlMzJfdG9fY3B1KGJkLT5jb250cm9sX2ZsYWdzKSk7CisJY291bnRlciA9IFRGRF9DVExfQ09VTlRfR0VUKGxlMzJfdG9fY3B1KHRmZC0+Y29udHJvbF9mbGFncykpOwogCWlmIChjb3VudGVyID4gTlVNX1RGRF9DSFVOS1MpIHsKLQkJSVdMX0VSUk9SKCJUb28gbWFueSBjaHVua3M6ICVpXG4iLCBjb3VudGVyKTsKKwkJSVdMX0VSUihwcml2LCAiVG9vIG1hbnkgY2h1bmtzOiAlaVxuIiwgY291bnRlcik7CiAJCS8qIEB0b2RvIGlzc3VlIGZhdGFsIGVycm9yLCBpdCBpcyBxdWl0ZSBzZXJpb3VzIHNpdHVhdGlvbiAqLwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOwogCX0KIAorCS8qIFVubWFwIHR4X2NtZCAqLworCWlmIChjb3VudGVyKQorCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwKKwkJCQlwY2lfdW5tYXBfYWRkcigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBtYXBwaW5nKSwKKwkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIGxlbiksCisJCQkJUENJX0RNQV9UT0RFVklDRSk7CisKIAkvKiB1bm1hcCBjaHVua3MgaWYgYW55ICovCiAKIAlmb3IgKGkgPSAxOyBpIDwgY291bnRlcjsgaSsrKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZGV2LCBsZTMyX3RvX2NwdShiZC0+cGFbaV0uYWRkciksCi0JCQkJIGxlMzJfdG9fY3B1KGJkLT5wYVtpXS5sZW4pLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShkZXYsIGxlMzJfdG9fY3B1KHRmZC0+dGJzW2ldLmFkZHIpLAorCQkJIGxlMzJfdG9fY3B1KHRmZC0+dGJzW2ldLmxlbiksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlpZiAodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbMF0pIHsKIAkJCXN0cnVjdCBza19idWZmICpza2IgPSB0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXTsKIAkJCWlmICh0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYlswXSkgewpAQCAtNzg4LDEwICs3NzYsMTAgQEAKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gOwogfQogCi11OCBpd2wzOTQ1X2h3X2ZpbmRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkcikKK3U4IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIpCiB7CiAJaW50IGksIHN0YXJ0ID0gSVdMX0FQX0lEOwogCWludCByZXQgPSBJV0xfSU5WQUxJRF9TVEFUSU9OOwpAQCAtODAyLDE4ICs3OTAsMTggQEAKIAkJc3RhcnQgPSBJV0xfU1RBX0lEOwogCiAJaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9uczsgaSsrKQotCQlpZiAoKHByaXYtPnN0YXRpb25zW2ldLnVzZWQpICYmCisJZm9yIChpID0gc3RhcnQ7IGkgPCBwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zOyBpKyspCisJCWlmICgocHJpdi0+c3RhdGlvbnNfMzlbaV0udXNlZCkgJiYKIAkJICAgICghY29tcGFyZV9ldGhlcl9hZGRyCi0JCSAgICAgKHByaXYtPnN0YXRpb25zW2ldLnN0YS5zdGEuYWRkciwgYWRkcikpKSB7CisJCSAgICAgKHByaXYtPnN0YXRpb25zXzM5W2ldLnN0YS5zdGEuYWRkciwgYWRkcikpKSB7CiAJCQlyZXQgPSBpOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCUlXTF9ERUJVR19JTkZPKCJjYW4gbm90IGZpbmQgU1RBICVwTSAodG90YWwgJWQpXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJjYW4gbm90IGZpbmQgU1RBICVwTSAodG90YWwgJWQpXG4iLAogCQkgICAgICAgYWRkciwgcHJpdi0+bnVtX3N0YXRpb25zKTsKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKQEAgLTgyNCwxMiArODEyLDEwIEBACiAgKiBpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlIC0gQWRkIHJhdGUgcG9ydGlvbiB0byBUWF9DTUQ6CiAgKgogKi8KLXZvaWQgaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCit2b2lkIGl3bDM5NDVfaHdfYnVpbGRfdHhfY21kX3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwgaW50IHN0YV9pZCwgaW50IHR4X2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IGh3X3ZhbHVlID0gaWVlZTgwMjExX2dldF90eF9yYXRlKHByaXYtPmh3LCBpbmZvKS0+aHdfdmFsdWU7CiAJdTE2IHJhdGVfaW5kZXggPSBtaW4oaHdfdmFsdWUgJiAweGZmZmYsIElXTF9SQVRFX0NPVU5UIC0gMSk7CiAJdTE2IHJhdGVfbWFzazsKQEAgLTgzOCwyNSArODI0LDE1IEBACiAJdTggZGF0YV9yZXRyeV9saW1pdDsKIAlfX2xlMzIgdHhfZmxhZ3M7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOworCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopY21kLT5jbWQucGF5bG9hZDsKIAogCXJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnBsY3A7Ci0JdHhfZmxhZ3MgPSBjbWQtPmNtZC50eC50eF9mbGFnczsKKwl0eF9mbGFncyA9IHR4LT50eF9mbGFnczsKIAogCS8qIFdlIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gZ2V0IHRoZSBzdGEtPnN1cHBfcmF0ZXMgd2hpbGUKIAkgKiBpbiB0aGlzIHJ1bm5pbmcgY29udGV4dCAqLwogCXJhdGVfbWFzayA9IElXTF9SQVRFU19NQVNLOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0KLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPSByYXRlOwotCi0JaWYgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSAmJgotCSAgICAoc3RhX2lkICE9IHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkKSAmJgotCQkoc3RhX2lkICE9IElXTF9NVUxUSUNBU1RfSUQpKQotCQlwcml2LT5zdGF0aW9uc1tJV0xfU1RBX0lEXS5jdXJyZW50X3JhdGUucmF0ZV9uX2ZsYWdzID0gcmF0ZTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0KIAlpZiAodHhfaWQgPj0gSVdMX0NNRF9RVUVVRV9OVU0pCiAJCXJ0c19yZXRyeV9saW1pdCA9IDM7CiAJZWxzZQpAQCAtODg4LDI1ICs4NjQsMjUgQEAKIAkJfQogCX0KIAotCWNtZC0+Y21kLnR4LnJ0c19yZXRyeV9saW1pdCA9IHJ0c19yZXRyeV9saW1pdDsKLQljbWQtPmNtZC50eC5kYXRhX3JldHJ5X2xpbWl0ID0gZGF0YV9yZXRyeV9saW1pdDsKLQljbWQtPmNtZC50eC5yYXRlID0gcmF0ZTsKLQljbWQtPmNtZC50eC50eF9mbGFncyA9IHR4X2ZsYWdzOworCXR4LT5ydHNfcmV0cnlfbGltaXQgPSBydHNfcmV0cnlfbGltaXQ7CisJdHgtPmRhdGFfcmV0cnlfbGltaXQgPSBkYXRhX3JldHJ5X2xpbWl0OworCXR4LT5yYXRlID0gcmF0ZTsKKwl0eC0+dHhfZmxhZ3MgPSB0eF9mbGFnczsKIAogCS8qIE9GRE0gKi8KLQljbWQtPmNtZC50eC5zdXBwX3JhdGVzWzBdID0KKwl0eC0+c3VwcF9yYXRlc1swXSA9CiAJICAgKChyYXRlX21hc2sgJiBJV0xfT0ZETV9SQVRFU19NQVNLKSA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CiAKIAkvKiBDQ0sgKi8KLQljbWQtPmNtZC50eC5zdXBwX3JhdGVzWzFdID0gKHJhdGVfbWFzayAmIDB4Rik7CisJdHgtPnN1cHBfcmF0ZXNbMV0gPSAocmF0ZV9tYXNrICYgMHhGKTsKIAotCUlXTF9ERUJVR19SQVRFKCJUeCBzdGEgaWQ6ICVkLCByYXRlOiAlZCAocGxjcCksIGZsYWdzOiAweCU0WCAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlR4IHN0YSBpZDogJWQsIHJhdGU6ICVkIChwbGNwKSwgZmxhZ3M6IDB4JTRYICIKIAkJICAgICAgICJjY2svb2ZkbSBtYXNrOiAweCV4LzB4JXhcbiIsIHN0YV9pZCwKLQkJICAgICAgIGNtZC0+Y21kLnR4LnJhdGUsIGxlMzJfdG9fY3B1KGNtZC0+Y21kLnR4LnR4X2ZsYWdzKSwKLQkJICAgICAgIGNtZC0+Y21kLnR4LnN1cHBfcmF0ZXNbMV0sIGNtZC0+Y21kLnR4LnN1cHBfcmF0ZXNbMF0pOworCQkgICAgICAgdHgtPnJhdGUsIGxlMzJfdG9fY3B1KHR4LT50eF9mbGFncyksCisJCSAgICAgICB0eC0+c3VwcF9yYXRlc1sxXSwgdHgtPnN1cHBfcmF0ZXNbMF0pOwogfQogCi11OCBpd2wzOTQ1X3N5bmNfc3RhKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBzdGFfaWQsIHUxNiB0eF9yYXRlLCB1OCBmbGFncykKK3U4IGl3bDM5NDVfc3luY19zdGEoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgc3RhX2lkLCB1MTYgdHhfcmF0ZSwgdTggZmxhZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnc19zcGluOwogCXN0cnVjdCBpd2wzOTQ1X3N0YXRpb25fZW50cnkgKnN0YXRpb247CkBAIC05MTUsMTM4ICs4OTEsMTMzIEBACiAJCXJldHVybiBJV0xfSU5WQUxJRF9TVEFUSU9OOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKLQlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF07CisJc3RhdGlvbiA9ICZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdOwogCiAJc3RhdGlvbi0+c3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfVFhfUkFURV9NU0s7CiAJc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyA9IGNwdV90b19sZTE2KHR4X3JhdGUpOwotCXN0YXRpb24tPmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPSB0eF9yYXRlOwogCXN0YXRpb24tPnN0YS5tb2RlID0gU1RBX0NPTlRST0xfTU9ESUZZX01TSzsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAotCWl3bDM5NDVfc2VuZF9hZGRfc3RhdGlvbihwcml2LCAmc3RhdGlvbi0+c3RhLCBmbGFncyk7Ci0JSVdMX0RFQlVHX1JBVEUoIlNDQUxFIHN5bmMgc3RhdGlvbiAlZCB0byByYXRlICVkXG4iLAorCWl3bF9zZW5kX2FkZF9zdGEocHJpdiwKKwkJCSAoc3RydWN0IGl3bF9hZGRzdGFfY21kICopJnN0YXRpb24tPnN0YSwgZmxhZ3MpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJTQ0FMRSBzeW5jIHN0YXRpb24gJWQgdG8gcmF0ZSAlZFxuIiwKIAkJCXN0YV9pZCwgdHhfcmF0ZSk7CiAJcmV0dXJuIHN0YV9pZDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X25pY19zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgcHdyX21heCkKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfcHdyX3NyYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaXdsX3B3cl9zcmMgc3JjKQogewotCWludCByYzsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JaWYgKHJjKSB7CisJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlpZiAocmV0KSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJjOworCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICghcHdyX21heCkgewotCQl1MzIgdmFsOwotCi0JCXJjID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsCi0JCQkJUENJX1BPV0VSX1NPVVJDRSwgJnZhbCk7Ci0JCWlmICh2YWwgJiBQQ0lfQ0ZHX1BNQ19QTUVfRlJPTV9EM0NPTERfU1VQUE9SVCkgewotCQkJaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwlpZiAoc3JjID09IElXTF9QV1JfU1JDX1ZBVVgpIHsKKwkJaWYgKHBjaV9wbWVfY2FwYWJsZShwcml2LT5wY2lfZGV2LCBQQ0lfRDNjb2xkKSkgeworCQkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCQlBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWCwKIAkJCQkJfkFQTUdfUFNfQ1RSTF9NU0tfUFdSX1NSQyk7Ci0JCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKLQkJCWl3bDM5NDVfcG9sbF9iaXQocHJpdiwgQ1NSX0dQSU9fSU4sCisJCQlpd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQSU9fSU4sCiAJCQkJICAgICBDU1JfR1BJT19JTl9WQUxfVkFVWF9QV1JfU1JDLAogCQkJCSAgICAgQ1NSX0dQSU9fSU5fQklUX0FVWF9QT1dFUiwgNTAwMCk7Ci0JCX0gZWxzZQotCQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCX0gZWxzZSB7CisJCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQl9CiAJfSBlbHNlIHsKLQkJaXdsMzk0NV9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJaXdsX3NldF9iaXRzX21hc2tfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUFdSX1NSQ19WTUFJTiwKIAkJCQl+QVBNR19QU19DVFJMX01TS19QV1JfU1JDKTsKIAotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQkJaXdsMzk0NV9wb2xsX2JpdChwcml2LCBDU1JfR1BJT19JTiwgQ1NSX0dQSU9fSU5fVkFMX1ZNQUlOX1BXUl9TUkMsCisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9wb2xsX2JpdChwcml2LCBDU1JfR1BJT19JTiwgQ1NSX0dQSU9fSU5fVkFMX1ZNQUlOX1BXUl9TUkMsCiAJCQkgICAgIENTUl9HUElPX0lOX0JJVF9BVVhfUE9XRVIsIDUwMDApOwkvKiB1UyAqLwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3J4X2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSkKK3N0YXRpYyBpbnQgaXdsMzk0NV9yeF9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX1JCRF9CQVNFKDApLCByeHEtPmRtYV9hZGRyKTsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfUlBUUl9BRERSKDApLAotCQkJICAgICBwcml2LT5od19zZXR0aW5nLnNoYXJlZF9waHlzICsKLQkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkLCByeF9yZWFkX3B0clswXSkpOwotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUkNTUl9XUFRSKDApLCAwKTsKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JDU1JfQ09ORklHKDApLAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ0hOTF9FTl9FTkFCTEUgfAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9SRFJCRF9FTl9FTkFCTEUgfAotCQlBTE1fRkhfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOIHwKLQkJQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjggfAotCQkoUlhfUVVFVUVfU0laRV9MT0cgPDwgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfUkJEQ19TSVpFKSB8Ci0JCUFMTV9GSF9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUIHwKLQkJKDEgPDwgQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19QT1NfSVJRX1JCVEgpIHwKLQkJQUxNX0ZIX1JDU1JfUlhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfRkgpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfUkJEX0JBU0UoMCksIHJ4cS0+ZG1hX2FkZHIpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfUlBUUl9BRERSKDApLCByeHEtPnJiX3N0dHNfZG1hKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9SQ1NSX1dQVFIoMCksIDApOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1JDU1JfQ09ORklHKDApLAorCQlGSDM5X1JDU1JfUlhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5fRU5BQkxFIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX1JEUkJEX0VOX0VOQUJMRSB8CisJCUZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX0JJVF9XUl9TVFRTX0VOIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4IHwKKwkJKFJYX1FVRVVFX1NJWkVfTE9HIDw8IEZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1BPU19SQkRDX1NJWkUpIHwKKwkJRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfVkFMX0lSUV9ERVNUX0lOVF9IT1NUIHwKKwkJKDEgPDwgRkgzOV9SQ1NSX1JYX0NPTkZJR19SRUdfUE9TX0lSUV9SQlRIKSB8CisJCUZIMzlfUkNTUl9SWF9DT05GSUdfUkVHX1ZBTF9NU0dfTU9ERV9GSCk7CiAKIAkvKiBmYWtlIHJlYWQgdG8gZmx1c2ggYWxsIHByZXYgSS9PICovCi0JaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEZIX1JTU1JfQ1RSTCk7CisJaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgRkgzOV9SU1NSX0NUUkwpOwogCi0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3R4X3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogYnlwYXNzIG1vZGUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9NT0RFX1JFRywgMHgyKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX01PREVfUkVHLCAweDIpOwogCiAJLyogUkEgMCBpcyBhY3RpdmUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9BUkFTVEFUX1JFRywgMHgwMSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9BUkFTVEFUX1JFRywgMHgwMSk7CiAKIAkvKiBhbGwgNiBmaWZvIGFyZSBhY3RpdmUgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEZBQ1RfUkVHLCAweDNmKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1RYRkFDVF9SRUcsIDB4M2YpOwogCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzFfUkVHLCAweDAxMDAwMCk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzJfUkVHLCAweDAzMDAwMik7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfVFhGNE1GX1JFRywgMHgwMDAwMDQpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1RYRjVNRl9SRUcsIDB4MDAwMDA1KTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBBTE1fU0NEX1NCWVBfTU9ERV8xX1JFRywgMHgwMTAwMDApOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfU0JZUF9NT0RFXzJfUkVHLCAweDAzMDAwMik7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEY0TUZfUkVHLCAweDAwMDAwNCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQUxNX1NDRF9UWEY1TUZfUkVHLCAweDAwMDAwNSk7CiAKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1RTU1JfQ0JCX0JBU0UsCi0JCQkgICAgIHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3BoeXMpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1RTU1JfQ0JCX0JBU0UsCisJCQkgICAgIHByaXYtPnNoYXJlZF9waHlzKTsKIAotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfVFNTUl9NU0dfQ09ORklHLAotCQlBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiB8Ci0JCUFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9PUkRFUl9SRF9UWFBEX09OIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX01BWF9GUkFHX1NJWkVfMTI4QiB8Ci0JCUFMTV9GSF9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gfAotCQlBTE1fRkhfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfQ0JCX09OIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JTUF9XQUlUX1RIIHwKLQkJQUxNX0ZIX1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9UU1NSX01TR19DT05GSUcsCisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfU05PT1BfUkRfVFhQRF9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUkRfVFhQRF9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfTUFYX0ZSQUdfU0laRV8xMjhCIHwKKwkJRkgzOV9UU1NSX1RYX01TR19DT05GSUdfUkVHX1ZBTF9TTk9PUF9SRF9URkRfT04gfAorCQlGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX09SREVSX1JEX0NCQl9PTiB8CisJCUZIMzlfVFNTUl9UWF9NU0dfQ09ORklHX1JFR19WQUxfT1JERVJfUlNQX1dBSVRfVEggfAorCQlGSDM5X1RTU1JfVFhfTVNHX0NPTkZJR19SRUdfVkFMX1JTUF9XQUlUX1RIKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDU3LDcgKzEwMjgsNyBAQAogICoKICAqIERlc3Ryb3lzIGFsbCBETUEgc3RydWN0dXJlcyBhbmQgaW5pdGlhbGl6ZSB0aGVtIGFnYWluCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eHFfY3R4X3Jlc2V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfdHhxX2N0eF9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjOwogCWludCB0eHFfaWQsIHNsb3RzX251bTsKQEAgLTEwNzAsMTMgKzEwNDEsMTMgQEAKIAkJZ290byBlcnJvcjsKIAogCS8qIFR4IHF1ZXVlKHMpICovCi0JZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPCBURkRfUVVFVUVfTUFYOyB0eHFfaWQrKykgeworCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDw9IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspIHsKIAkJc2xvdHNfbnVtID0gKHR4cV9pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkgPwogCQkJCVRGRF9DTURfU0xPVFMgOiBURkRfVFhfQ01EX1NMT1RTOwotCQlyYyA9IGl3bDM5NDVfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKLQkJCQl0eHFfaWQpOworCQlyYyA9IGl3bF90eF9xdWV1ZV9pbml0KHByaXYsICZwcml2LT50eHFbdHhxX2lkXSwgc2xvdHNfbnVtLAorCQkJCSAgICAgICB0eHFfaWQpOwogCQlpZiAocmMpIHsKLQkJCUlXTF9FUlJPUigiVHggJWQgcXVldWUgaW5pdCBmYWlsZWRcbiIsIHR4cV9pZCk7CisJCQlJV0xfRVJSKHByaXYsICJUeCAlZCBxdWV1ZSBpbml0IGZhaWxlZFxuIiwgdHhxX2lkKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAl9CkBAIC0xMDg4LDExMSArMTA1OSwxNDAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBpd2wzOTQ1X2h3X25pY19pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfYXBtX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQgPSAwOworCisJaXdsX3Bvd2VyX2luaXRpYWxpemUocHJpdik7CisKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKKwkJCSAgQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9ESVNfTDBTX0VYSVRfVElNRVIpOworCisJLyogZGlzYWJsZSBMMHMgd2l0aG91dCBhZmZlY3RpbmcgTDEgOmRvbid0IHdhaXQgZm9yIElDSCBMMHMgYnVnIFcvQSkgKi8KKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR0lPX0NISUNLRU5fQklUUywKKwkJCSAgQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9MMUFfTk9fTDBTX1JYKTsKKworCS8qIHNldCAiaW5pdGlhbGl6YXRpb24gY29tcGxldGUiIGJpdCB0byBtb3ZlIGFkYXB0ZXIKKwkqIEQwVSogLS0+IEQwQSogc3RhdGUgKi8KKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOworCisJcmV0ID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCisJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOworCWlmIChyZXQgPCAwKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwkvKiBlbmFibGUgRE1BICovCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcsIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCB8CisJCQkJCQlBUE1HX0NMS19WQUxfQlNNX0NMS19SUVQpOworCisJdWRlbGF5KDIwKTsKKworCS8qIGRpc2FibGUgTDEtQWN0aXZlICovCisJaXdsX3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QQ0lERVZfU1RUX1JFRywKKwkJCSAgQVBNR19QQ0lERVZfU1RUX1ZBTF9MMV9BQ1RfRElTKTsKKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgaXdsMzk0NV9uaWNfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCByZXZfaWQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChyZXZfaWQgJiBQQ0lfQ0ZHX1JFVl9JRF9CSVRfUlRQKQorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUlRQIHR5cGUgXG4iKTsKKwllbHNlIGlmIChyZXZfaWQgJiBQQ0lfQ0ZHX1JFVl9JRF9CSVRfQkFTSUNfU0tVKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIzOTQ1IFJBRElPLU1CIHR5cGVcbiIpOworCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF8zOTQ1X01CKTsKKwl9IGVsc2UgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiMzk0NSBSQURJTy1NTSB0eXBlXG4iKTsKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfMzk0NV9NTSk7CisJfQorCisJaWYgKEVFUFJPTV9TS1VfQ0FQX09QX01PREVfTVJDID09IGVlcHJvbS0+c2t1X2NhcCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiU0tVIE9QIG1vZGUgaXMgbXJjXG4iKTsKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRfU0tVX01SQyk7CisJfSBlbHNlCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJTS1UgT1AgbW9kZSBpcyBiYXNpY1xuIik7CisKKwlpZiAoKGVlcHJvbS0+Ym9hcmRfcmV2aXNpb24gJiAweEYwKSA9PSAweEQwKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCisJCQkgICAgICAgZWVwcm9tLT5ib2FyZF9yZXZpc2lvbik7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX0JPQVJEX1RZUEUpOworCX0gZWxzZSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCisJCQkgICAgICAgZWVwcm9tLT5ib2FyZF9yZXZpc2lvbik7CisJCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFKTsKKwl9CisKKwlpZiAoZWVwcm9tLT5hbG1nb3JfbV92ZXJzaW9uIDw9IDEpIHsKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCisJCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9BKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNhcmQgTSB0eXBlIEEgdmVyc2lvbiBpcyAweCVYXG4iLAorCQkJICAgICAgIGVlcHJvbS0+YWxtZ29yX21fdmVyc2lvbik7CisJfSBlbHNlIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNhcmQgTSB0eXBlIEIgdmVyc2lvbiBpcyAweCVYXG4iLAorCQkJICAgICAgIGVlcHJvbS0+YWxtZ29yX21fdmVyc2lvbik7CisJCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUU19TSUxJQ09OX1RZUEVfQik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlZXByb20tPnNrdV9jYXAgJiBFRVBST01fU0tVX0NBUF9TV19SRl9LSUxMX0VOQUJMRSkKKwkJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIlNXIFJGIEtJTEwgc3VwcG9ydGVkIGluIEVFUFJPTS5cbiIpOworCisJaWYgKGVlcHJvbS0+c2t1X2NhcCAmIEVFUFJPTV9TS1VfQ0FQX0hXX1JGX0tJTExfRU5BQkxFKQorCQlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiSFcgUkYgS0lMTCBzdXBwb3J0ZWQgaW4gRUVQUk9NLlxuIik7Cit9CisKK2ludCBpd2wzOTQ1X2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1OCByZXZfaWQ7CiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7Ci0KLQlpd2wzOTQ1X3Bvd2VyX2luaXRfaGFuZGxlKHByaXYpOworCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjM5X0FOQV9QTExfQ0ZHX1ZBTCk7Ci0JaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9HSU9fQ0hJQ0tFTl9CSVRTLAotCQkgICAgQ1NSX0dJT19DSElDS0VOX0JJVFNfUkVHX0JJVF9MMUFfTk9fTDBTX1JYKTsKLQotCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOwotCXJjID0gaXdsMzk0NV9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwotCWlmIChyYyA8IDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlJV0xfREVCVUdfSU5GTygiRmFpbGVkIHRvIGluaXQgdGhlIGNhcmRcbiIpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmMpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gcmM7Ci0JfQotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19FTl9SRUcsCi0JCQkJIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCB8Ci0JCQkJIEFQTUdfQ0xLX1ZBTF9CU01fQ0xLX1JRVCk7Ci0JdWRlbGF5KDIwKTsKLQlpd2wzOTQ1X3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QQ0lERVZfU1RUX1JFRywKLQkJCQkgICAgQVBNR19QQ0lERVZfU1RUX1ZBTF9MMV9BQ1RfRElTKTsKLQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLmluaXQocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJLyogRGV0ZXJtaW5lIEhXIHR5cGUgKi8KIAlyYyA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKHByaXYtPnBjaV9kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldl9pZCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JSVdMX0RFQlVHX0lORk8oIkhXIFJldmlzaW9uIElEID0gMHglWFxuIiwgcmV2X2lkKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSFcgUmV2aXNpb24gSUQgPSAweCVYXG4iLCByZXZfaWQpOwogCi0JaXdsMzk0NV9uaWNfc2V0X3B3cl9zcmMocHJpdiwgMSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyYyA9IHByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuc2V0X3B3cl9zcmMocHJpdiwgSVdMX1BXUl9TUkNfVk1BSU4pOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCi0JaWYgKHJldl9pZCAmIFBDSV9DRkdfUkVWX0lEX0JJVF9SVFApCi0JCUlXTF9ERUJVR19JTkZPKCJSVFAgdHlwZSBcbiIpOwotCWVsc2UgaWYgKHJldl9pZCAmIFBDSV9DRkdfUkVWX0lEX0JJVF9CQVNJQ19TS1UpIHsKLQkJSVdMX0RFQlVHX0lORk8oIjM5NDUgUkFESU8tTUIgdHlwZVxuIik7Ci0JCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfSFdfSUZfQ09ORklHX1JFRywKLQkJCSAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF8zOTQ1X01CKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiMzk0NSBSQURJTy1NTSB0eXBlXG4iKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUXzM5NDVfTU0pOwotCX0KLQotCWlmIChFRVBST01fU0tVX0NBUF9PUF9NT0RFX01SQyA9PSBwcml2LT5lZXByb20uc2t1X2NhcCkgewotCQlJV0xfREVCVUdfSU5GTygiU0tVIE9QIG1vZGUgaXMgbXJjXG4iKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX1NLVV9NUkMpOwotCX0gZWxzZQotCQlJV0xfREVCVUdfSU5GTygiU0tVIE9QIG1vZGUgaXMgYmFzaWNcbiIpOwotCi0JaWYgKChwcml2LT5lZXByb20uYm9hcmRfcmV2aXNpb24gJiAweEYwKSA9PSAweEQwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmJvYXJkX3JldmlzaW9uKTsKLQkJaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAotCQkJICAgIENTUjM5X0hXX0lGX0NPTkZJR19SRUdfQklUX0JPQVJEX1RZUEUpOwotCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCIzOTQ1QUJHIHJldmlzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmJvYXJkX3JldmlzaW9uKTsKLQkJaXdsMzk0NV9jbGVhcl9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgICBDU1IzOV9IV19JRl9DT05GSUdfUkVHX0JJVF9CT0FSRF9UWVBFKTsKLQl9Ci0KLQlpZiAocHJpdi0+ZWVwcm9tLmFsbWdvcl9tX3ZlcnNpb24gPD0gMSkgewotCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9BKTsKLQkJSVdMX0RFQlVHX0lORk8oIkNhcmQgTSB0eXBlIEEgdmVyc2lvbiBpcyAweCVYXG4iLAotCQkJICAgICAgIHByaXYtPmVlcHJvbS5hbG1nb3JfbV92ZXJzaW9uKTsKLQl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiQ2FyZCBNIHR5cGUgQiB2ZXJzaW9uIGlzIDB4JVhcbiIsCi0JCQkgICAgICAgcHJpdi0+ZWVwcm9tLmFsbWdvcl9tX3ZlcnNpb24pOwotCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0hXX0lGX0NPTkZJR19SRUcsCi0JCQkgICAgQ1NSMzlfSFdfSUZfQ09ORklHX1JFR19CSVRTX1NJTElDT05fVFlQRV9CKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHByaXYtPmVlcHJvbS5za3VfY2FwICYgRUVQUk9NX1NLVV9DQVBfU1dfUkZfS0lMTF9FTkFCTEUpCi0JCUlXTF9ERUJVR19SRl9LSUxMKCJTVyBSRiBLSUxMIHN1cHBvcnRlZCBpbiBFRVBST00uXG4iKTsKLQotCWlmIChwcml2LT5lZXByb20uc2t1X2NhcCAmIEVFUFJPTV9TS1VfQ0FQX0hXX1JGX0tJTExfRU5BQkxFKQotCQlJV0xfREVCVUdfUkZfS0lMTCgiSFcgUkYgS0lMTCBzdXBwb3J0ZWQgaW4gRUVQUk9NLlxuIik7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5jb25maWcocHJpdik7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgUlggcXVldWUsIG9yIHJlc2V0IGlmIGl0IGlzIGFscmVhZHkgYWxsb2NhdGVkICovCiAJaWYgKCFyeHEtPmJkKSB7Ci0JCXJjID0gaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhwcml2KTsKKwkJcmMgPSBpd2xfcnhfcXVldWVfYWxsb2MocHJpdik7CiAJCWlmIChyYykgewotCQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSeCBxdWV1ZVxuIik7CisJCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSeCBxdWV1ZVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCX0gZWxzZQotCQlpd2wzOTQ1X3J4X3F1ZXVlX3Jlc2V0KHByaXYsIHJ4cSk7CisJCWl3bF9yeF9xdWV1ZV9yZXNldChwcml2LCByeHEpOwogCiAJaXdsMzk0NV9yeF9yZXBsZW5pc2gocHJpdik7CiAKQEAgLTEyMDIsMTYgKzEyMDIsMTYgQEAKIAogCS8qIExvb2sgYXQgdXNpbmcgdGhpcyBpbnN0ZWFkOgogCXJ4cS0+bmVlZF91cGRhdGUgPSAxOwotCWl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCByeHEpOworCWl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CiAJKi8KIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9Ci0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX1dQVFIoMCksIHJ4cS0+d3JpdGUgJiB+Nyk7Ci0JaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfUkNTUl9XUFRSKDApLCByeHEtPndyaXRlICYgfjcpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTEyMjksMTE2ICsxMjI5LDEyNSBAQAogICoKICAqIERlc3Ryb3kgYWxsIFRYIERNQSBxdWV1ZXMgYW5kIHN0cnVjdHVyZXMKICAqLwotdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHR4cV9pZDsKIAogCS8qIFR4IHF1ZXVlcyAqLwotCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDwgVEZEX1FVRVVFX01BWDsgdHhxX2lkKyspCi0JCWl3bDM5NDVfdHhfcXVldWVfZnJlZShwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0pOworCWZvciAodHhxX2lkID0gMDsgdHhxX2lkIDw9IHByaXYtPmh3X3BhcmFtcy5tYXhfdHhxX251bTsgdHhxX2lkKyspCisJCWlmICh0eHFfaWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCisJCQlpd2xfY21kX3F1ZXVlX2ZyZWUocHJpdik7CisJCWVsc2UKKwkJCWl3bF90eF9xdWV1ZV9mcmVlKHByaXYsIHR4cV9pZCk7CisKIH0KIAotdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfc3RvcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaW50IHF1ZXVlOworCWludCB0eHFfaWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7CisJaWYgKGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShwcml2KTsKIAkJcmV0dXJuOwogCX0KIAogCS8qIHN0b3AgU0NEICovCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfTU9ERV9SRUcsIDApOworCWl3bF93cml0ZV9wcnBoKHByaXYsIEFMTV9TQ0RfTU9ERV9SRUcsIDApOwogCiAJLyogcmVzZXQgVEZEIHF1ZXVlcyAqLwotCWZvciAocXVldWUgPSBURkRfUVVFVUVfTUlOOyBxdWV1ZSA8IFRGRF9RVUVVRV9NQVg7IHF1ZXVlKyspIHsKLQkJaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9UQ1NSX0NPTkZJRyhxdWV1ZSksIDB4MCk7Ci0JCWl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIX1RTU1JfVFhfU1RBVFVTLAotCQkJCUFMTV9GSF9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRShxdWV1ZSksCisJZm9yICh0eHFfaWQgPSAwOyB0eHFfaWQgPD0gcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtOyB0eHFfaWQrKykgeworCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9UQ1NSX0NPTkZJRyh0eHFfaWQpLCAweDApOworCQlpd2xfcG9sbF9kaXJlY3RfYml0KHByaXYsIEZIMzlfVFNTUl9UWF9TVEFUVVMsCisJCQkJRkgzOV9UU1NSX1RYX1NUQVRVU19SRUdfTVNLX0NITkxfSURMRSh0eHFfaWQpLAogCQkJCTEwMDApOwogCX0KIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaXdsMzk0NV9od190eHFfY3R4X2ZyZWUocHJpdik7CiB9CiAKLWludCBpd2wzOTQ1X2h3X25pY19zdG9wX21hc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2FwbV9zdG9wX21hc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JaW50IHJjID0gMDsKLQl1MzIgcmVnX3ZhbDsKKwlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qIHNldCBzdG9wIG1hc3RlciBiaXQgKi8KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1RPUF9NQVNURVIpOworCWl3bF9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NUT1BfTUFTVEVSKTsKIAotCXJlZ192YWwgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpOworCWl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX1JFU0VULAorCQkJICAgIENTUl9SRVNFVF9SRUdfRkxBR19NQVNURVJfRElTQUJMRUQsIDEwMCk7CiAKLQlpZiAoQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19QT1dFUl9TQVZFID09Ci0JICAgIChyZWdfdmFsICYgQ1NSX0dQX0NOVFJMX1JFR19NU0tfUE9XRVJfU0FWRV9UWVBFKSkKLQkJSVdMX0RFQlVHX0lORk8oIkNhcmQgaW4gcG93ZXIgc2F2ZSwgbWFzdGVyIGlzIGFscmVhZHkgIgotCQkJICAgICAgICJzdG9wcGVkXG4iKTsKLQllbHNlIHsKLQkJcmMgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfUkVTRVQsCi0JCQkJICBDU1JfUkVTRVRfUkVHX0ZMQUdfTUFTVEVSX0RJU0FCTEVELCAxMDApOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gcmM7Ci0JCX0KLQl9CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCitvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCUlXTF9ERUJVR19JTkZPKCJzdG9wIG1hc3RlclxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInN0b3AgbWFzdGVyXG4iKTsKIAotCXJldHVybiByYzsKKwlyZXR1cm4gcmV0OwogfQogCi1pbnQgaXdsMzk0NV9od19uaWNfcmVzZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfYXBtX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpd2wzOTQ1X2FwbV9zdG9wX21hc3Rlcihwcml2KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7CisKKwl1ZGVsYXkoMTApOworCS8qIGNsZWFyICJpbml0IGNvbXBsZXRlIiAgbW92ZSBhZGFwdGVyIEQwQSogLS0+IEQwVSBzdGF0ZSAqLworCWl3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgaXdsMzk0NV9hcG1fcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaXdsMzk0NV9od19uaWNfc3RvcF9tYXN0ZXIocHJpdik7CisJaXdsMzk0NV9hcG1fc3RvcF9tYXN0ZXIocHJpdik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaXdsMzk0NV9zZXRfYml0KHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX1NXX1JFU0VUKTsKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfUkVTRVQsIENTUl9SRVNFVF9SRUdfRkxBR19TV19SRVNFVCk7CisJdWRlbGF5KDEwKTsKIAotCWl3bDM5NDVfcG9sbF9kaXJlY3RfYml0KHByaXYsIENTUl9HUF9DTlRSTCwKKwlpd2xfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19JTklUX0RPTkUpOworCisJaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCiAJCQkgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwogCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKKwlyYyA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKCFyYykgewotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfQ1RSTF9SRUcsCisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfQ0xLX0NUUkxfUkVHLAogCQkJCQkgQVBNR19DTEtfVkFMX0JTTV9DTEtfUlFUKTsKIAotCQl1ZGVsYXkoMTApOwotCi0JCWl3bDM5NDVfc2V0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0lOSVRfRE9ORSk7Ci0KLQkJaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEFQTUdfUlRDX0lOVF9NU0tfUkVHLCAweDApOwotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19SVENfSU5UX1NUVF9SRUcsCisJCWl3bF93cml0ZV9wcnBoKHByaXYsIEFQTUdfUlRDX0lOVF9NU0tfUkVHLCAweDApOworCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX1JUQ19JTlRfU1RUX1JFRywKIAkJCQkJMHhGRkZGRkZGRik7CiAKIAkJLyogZW5hYmxlIERNQSAqLwotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRU5fUkVHLAorCQlpd2xfd3JpdGVfcHJwaChwcml2LCBBUE1HX0NMS19FTl9SRUcsCiAJCQkJCSBBUE1HX0NMS19WQUxfRE1BX0NMS19SUVQgfAogCQkJCQkgQVBNR19DTEtfVkFMX0JTTV9DTEtfUlFUKTsKIAkJdWRlbGF5KDEwKTsKIAotCQlpd2wzOTQ1X3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJaXdsX3NldF9iaXRzX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKIAkJCQlBUE1HX1BTX0NUUkxfVkFMX1JFU0VUX1JFUSk7CiAJCXVkZWxheSg1KTsKLQkJaXdsMzk0NV9jbGVhcl9iaXRzX3BycGgocHJpdiwgQVBNR19QU19DVFJMX1JFRywKKwkJaXdsX2NsZWFyX2JpdHNfcHJwaChwcml2LCBBUE1HX1BTX0NUUkxfUkVHLAogCQkJCUFQTUdfUFNfQ1RSTF9WQUxfUkVTRVRfUkVRKTsKLQkJaXdsMzk0NV9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJfQogCiAJLyogQ2xlYXIgdGhlICdob3N0IGNvbW1hbmQgYWN0aXZlJyBiaXQuLi4gKi8KQEAgLTEzNjcsMzMgKzEzNzYsMzQgQEAKIAlyZXR1cm4gKCh0ZW1wZXJhdHVyZSA8IC0yNjApIHx8ICh0ZW1wZXJhdHVyZSA+IDI1KSkgPyAxIDogMDsKIH0KIAotaW50IGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXJldHVybiBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMik7CisJcmV0dXJuIGl3bF9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDIpOwogfQogCiAvKioKICAqIGl3bDM5NDVfaHdfcmVnX3R4cG93ZXJfZ2V0X3RlbXBlcmF0dXJlCiAgKiBnZXQgdGhlIGN1cnJlbnQgdGVtcGVyYXR1cmUgYnkgcmVhZGluZyBmcm9tIE5JQwogKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9od19yZWdfdHhwb3dlcl9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV9od19yZWdfdHhwb3dlcl9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogeworCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKIAlpbnQgdGVtcGVyYXR1cmU7CiAKIAl0ZW1wZXJhdHVyZSA9IGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHByaXYpOwogCiAJLyogZHJpdmVyJ3Mgb2theSByYW5nZSBpcyAtMjYwIHRvICsyNS4KIAkgKiAgIGh1bWFuIHJlYWRhYmxlIG9rYXkgcmFuZ2UgaXMgMCB0byArMjg1ICovCi0JSVdMX0RFQlVHX0lORk8oIlRlbXBlcmF0dXJlOiAlZFxuIiwgdGVtcGVyYXR1cmUgKyBJV0xfVEVNUF9DT05WRVJUKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiVGVtcGVyYXR1cmU6ICVkXG4iLCB0ZW1wZXJhdHVyZSArIElXTF9URU1QX0NPTlZFUlQpOwogCiAJLyogaGFuZGxlIGluc2FuZSB0ZW1wIHJlYWRpbmcgKi8KIAlpZiAoaXdsMzk0NV9od19yZWdfdGVtcF9vdXRfb2ZfcmFuZ2UodGVtcGVyYXR1cmUpKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgYmFkIHRlbXBlcmF0dXJlIHZhbHVlICAlZFxuIiwgdGVtcGVyYXR1cmUpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBiYWQgdGVtcGVyYXR1cmUgdmFsdWUgICVkXG4iLCB0ZW1wZXJhdHVyZSk7CiAKIAkJLyogaWYgcmVhbGx5IHJlYWxseSBob3QoPyksCiAJCSAqICAgc3Vic3RpdHV0ZSB0aGUgM3JkIGJhbmQvZ3JvdXAncyB0ZW1wIG1lYXN1cmVkIGF0IGZhY3RvcnkgKi8KIAkJaWYgKHByaXYtPmxhc3RfdGVtcGVyYXR1cmUgPiAxMDApCi0JCQl0ZW1wZXJhdHVyZSA9IHByaXYtPmVlcHJvbS5ncm91cHNbMl0udGVtcGVyYXR1cmU7CisJCQl0ZW1wZXJhdHVyZSA9IGVlcHJvbS0+Z3JvdXBzWzJdLnRlbXBlcmF0dXJlOwogCQllbHNlIC8qIGVsc2UgdXNlIG1vc3QgcmVjZW50ICJzYW5lIiB2YWx1ZSBmcm9tIGRyaXZlciAqLwogCQkJdGVtcGVyYXR1cmUgPSBwcml2LT5sYXN0X3RlbXBlcmF0dXJlOwogCX0KQEAgLTE0MTIsNyArMTQyMiw3IEBACiAgKiByZWNvcmRzIG5ldyB0ZW1wZXJhdHVyZSBpbiB0eF9tZ3ItPnRlbXBlcmF0dXJlLgogICogcmVwbGFjZXMgdHhfbWdyLT5sYXN0X3RlbXBlcmF0dXJlICpvbmx5KiBpZiBjYWxpYiBuZWVkZWQKICAqICAgIChhc3N1bWVzIGNhbGxlciB3aWxsIGFjdHVhbGx5IGRvIHRoZSBjYWxpYnJhdGlvbiEpLiAqLwotc3RhdGljIGludCBpc190ZW1wX2NhbGliX25lZWRlZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpc190ZW1wX2NhbGliX25lZWRlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHRlbXBfZGlmZjsKIApAQCAtMTQyMSwyMCArMTQzMSwyMCBAQAogCiAJLyogZ2V0IGFic29sdXRlIHZhbHVlICovCiAJaWYgKHRlbXBfZGlmZiA8IDApIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJHZXR0aW5nIGNvb2xlciwgZGVsdGEgJWQsXG4iLCB0ZW1wX2RpZmYpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkdldHRpbmcgY29vbGVyLCBkZWx0YSAlZCxcbiIsIHRlbXBfZGlmZik7CiAJCXRlbXBfZGlmZiA9IC10ZW1wX2RpZmY7CiAJfSBlbHNlIGlmICh0ZW1wX2RpZmYgPT0gMCkKLQkJSVdMX0RFQlVHX1BPV0VSKCJTYW1lIHRlbXAsXG4iKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTYW1lIHRlbXAsXG4iKTsKIAllbHNlCi0JCUlXTF9ERUJVR19QT1dFUigiR2V0dGluZyB3YXJtZXIsIGRlbHRhICVkLFxuIiwgdGVtcF9kaWZmKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJHZXR0aW5nIHdhcm1lciwgZGVsdGEgJWQsXG4iLCB0ZW1wX2RpZmYpOwogCiAJLyogaWYgd2UgZG9uJ3QgbmVlZCBjYWxpYnJhdGlvbiwgKmRvbid0KiB1cGRhdGUgbGFzdF90ZW1wZXJhdHVyZSAqLwogCWlmICh0ZW1wX2RpZmYgPCBJV0xfVEVNUEVSQVRVUkVfTElNSVRfVElNRVIpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJUaW1lZCB0aGVybWFsIGNhbGliIG5vdCBuZWVkZWRcbiIpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlRpbWVkIHRoZXJtYWwgY2FsaWIgbm90IG5lZWRlZFxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCUlXTF9ERUJVR19QT1dFUigiVGltZWQgdGhlcm1hbCBjYWxpYiBuZWVkZWRcbiIpOworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiVGltZWQgdGhlcm1hbCBjYWxpYiBuZWVkZWRcbiIpOwogCiAJLyogYXNzdW1lIHRoYXQgY2FsbGVyIHdpbGwgYWN0dWFsbHkgZG8gY2FsaWIgLi4uCiAJICogICB1cGRhdGUgdGhlICJsYXN0IHRlbXBlcmF0dXJlIiB2YWx1ZSAqLwpAQCAtMTYyNyw5ICsxNjM3LDkgQEAKICAqIFNldCAoaW4gb3VyIGNoYW5uZWwgaW5mbyBkYXRhYmFzZSkgdGhlIGRpcmVjdCBzY2FuIFR4IHBvd2VyIGZvciAxIE1iaXQgKENDSykKICAqIG9yIDYgTWJpdCAoT0ZETSkgcmF0ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfaHdfcmVnX3NldF9zY2FuX3Bvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBzY2FuX3RibF9pbmRleCwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfaHdfcmVnX3NldF9zY2FuX3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHNjYW5fdGJsX2luZGV4LAogCQkJICAgICAgIHMzMiByYXRlX2luZGV4LCBjb25zdCBzOCAqY2xpcF9wd3JzLAotCQkJICAgICAgIHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbywKKwkJCSAgICAgICBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbywKIAkJCSAgICAgICBpbnQgYmFuZF9pbmRleCkKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gKnNjYW5fcG93ZXJfaW5mbzsKQEAgLTE2NDYsNyArMTY1Niw3IEBACiAJLyogZnVydGhlciBsaW1pdCB0byB1c2VyJ3MgbWF4IHBvd2VyIHByZWZlcmVuY2UuCiAJICogRklYTUU6ICBPdGhlciBzcGVjdHJ1bSBtYW5hZ2VtZW50IHBvd2VyIGxpbWl0YXRpb25zIGRvIG5vdAogCSAqICAgc2VlbSB0byBhcHBseT8/ICovCi0JcG93ZXIgPSBtaW4ocG93ZXIsIHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCk7CisJcG93ZXIgPSBtaW4ocG93ZXIsIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KTsKIAlzY2FuX3Bvd2VyX2luZm8tPnJlcXVlc3RlZF9wb3dlciA9IHBvd2VyOwogCiAJLyogZmluZCBkaWZmZXJlbmNlIGJldHdlZW4gbmV3IHNjYW4gKnBvd2VyKiBhbmQgY3VycmVudCAibm9ybWFsIgpAQCAtMTY3OCwzMiArMTY4OCwzMiBAQAogfQogCiAvKioKLSAqIGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlciAtIGZpbGwgaW4gVHggUG93ZXIgY29tbWFuZCB3aXRoIGdhaW4gc2V0dGluZ3MKKyAqIGl3bDM5NDVfc2VuZF90eF9wb3dlciAtIGZpbGwgaW4gVHggUG93ZXIgY29tbWFuZCB3aXRoIGdhaW4gc2V0dGluZ3MKICAqCiAgKiBDb25maWd1cmVzIHBvd2VyIHNldHRpbmdzIGZvciBhbGwgcmF0ZXMgZm9yIHRoZSBjdXJyZW50IGNoYW5uZWwsCiAgKiB1c2luZyB2YWx1ZXMgZnJvbSBjaGFubmVsIGluZm8gc3RydWN0LCBhbmQgc2VuZCB0byBOSUMKICAqLwotaW50IGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfdHhfcG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYXRlX2lkeCwgaTsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8gPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKIAlzdHJ1Y3QgaXdsMzk0NV90eHBvd2VydGFibGVfY21kIHR4cG93ZXIgPSB7CiAJCS5jaGFubmVsID0gcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCwKIAl9OwogCiAJdHhwb3dlci5iYW5kID0gKHByaXYtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgPyAwIDogMTsKLQljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCisJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCiAJCQkJICAgICAgIHByaXYtPmJhbmQsCiAJCQkJICAgICAgIGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpKTsKIAlpZiAoIWNoX2luZm8pIHsKLQkJSVdMX0VSUk9SCi0JCSAgICAoIkZhaWxlZCB0byBnZXQgY2hhbm5lbCBpbmZvIGZvciBjaGFubmVsICVkIFslZF1cbiIsCi0JCSAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCksIHByaXYtPmJhbmQpOworCQlJV0xfRVJSKHByaXYsCisJCQkiRmFpbGVkIHRvIGdldCBjaGFubmVsIGluZm8gZm9yIGNoYW5uZWwgJWQgWyVkXVxuIiwKKwkJCWxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpLCBwcml2LT5iYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCUlXTF9ERUJVR19QT1dFUigiTm90IGNhbGxpbmcgVFhfUFdSX1RBQkxFX0NNRCBvbiAiCisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiTm90IGNhbGxpbmcgVFhfUFdSX1RBQkxFX0NNRCBvbiAiCiAJCQkJIm5vbi1UeCBjaGFubmVsLlxuIik7CiAJCXJldHVybiAwOwogCX0KQEAgLTE3MTEsMTIgKzE3MjEsMTIgQEAKIAkvKiBmaWxsIGNtZCB3aXRoIHBvd2VyIHNldHRpbmdzIGZvciBhbGwgcmF0ZXMgZm9yIGN1cnJlbnQgY2hhbm5lbCAqLwogCS8qIEZpbGwgT0ZETSByYXRlICovCiAJZm9yIChyYXRlX2lkeCA9IElXTF9GSVJTVF9PRkRNX1JBVEUsIGkgPSAwOwotCSAgICAgcmF0ZV9pZHggPD0gSVdMX0xBU1RfT0ZETV9SQVRFOyByYXRlX2lkeCsrLCBpKyspIHsKKwkgICAgIHJhdGVfaWR4IDw9IElXTDM5X0xBU1RfT0ZETV9SQVRFOyByYXRlX2lkeCsrLCBpKyspIHsKIAogCQl0eHBvd2VyLnBvd2VyW2ldLnRwYyA9IGNoX2luZm8tPnBvd2VyX2luZm9baV0udHBjOwogCQl0eHBvd2VyLnBvd2VyW2ldLnJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaWR4XS5wbGNwOwogCi0JCUlXTF9ERUJVR19QT1dFUigiY2ggJWQ6JWQgcmYgJWQgZHNwICUzZCByYXRlIGNvZGUgMHglMDJ4XG4iLAorCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgImNoICVkOiVkIHJmICVkIGRzcCAlM2QgcmF0ZSBjb2RlIDB4JTAyeFxuIiwKIAkJCQlsZTE2X3RvX2NwdSh0eHBvd2VyLmNoYW5uZWwpLAogCQkJCXR4cG93ZXIuYmFuZCwKIAkJCQl0eHBvd2VyLnBvd2VyW2ldLnRwYy50eF9nYWluLApAQCAtMTcyOSw3ICsxNzM5LDcgQEAKIAkJdHhwb3dlci5wb3dlcltpXS50cGMgPSBjaF9pbmZvLT5wb3dlcl9pbmZvW2ldLnRwYzsKIAkJdHhwb3dlci5wb3dlcltpXS5yYXRlID0gaXdsMzk0NV9yYXRlc1tyYXRlX2lkeF0ucGxjcDsKIAotCQlJV0xfREVCVUdfUE9XRVIoImNoICVkOiVkIHJmICVkIGRzcCAlM2QgcmF0ZSBjb2RlIDB4JTAyeFxuIiwKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJjaCAlZDolZCByZiAlZCBkc3AgJTNkIHJhdGUgY29kZSAweCUwMnhcbiIsCiAJCQkJbGUxNl90b19jcHUodHhwb3dlci5jaGFubmVsKSwKIAkJCQl0eHBvd2VyLmJhbmQsCiAJCQkJdHhwb3dlci5wb3dlcltpXS50cGMudHhfZ2FpbiwKQEAgLTE3MzcsOCArMTc0Nyw5IEBACiAJCQkJdHhwb3dlci5wb3dlcltpXS5yYXRlKTsKIAl9CiAKLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCwKLQkJCXNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eHBvd2VydGFibGVfY21kKSwgJnR4cG93ZXIpOworCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsCisJCQkJc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3R4cG93ZXJ0YWJsZV9jbWQpLAorCQkJCSZ0eHBvd2VyKTsKIAogfQogCkBAIC0xNzU4LDggKzE3NjksOCBAQAogICoJIHByb3Blcmx5IGZpbGwgb3V0IHRoZSBzY2FuIHBvd2VycywgYW5kIGFjdHVhbCBoL3cgZ2FpbiBzZXR0aW5ncywKICAqCSBhbmQgc2VuZCBjaGFuZ2VzIHRvIE5JQwogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX3NldF9uZXdfcG93ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQorc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19zZXRfbmV3X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm8pCiB7CiAJc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvICpwb3dlcl9pbmZvOwogCWludCBwb3dlcl9jaGFuZ2VkID0gMDsKQEAgLTE3NjgsNyArMTc3OSw3IEBACiAJaW50IHBvd2VyOwogCiAJLyogR2V0IHRoaXMgY2hubGdycCdzIHJhdGUtdG8tbWF4L2NsaXAtcG93ZXJzIHRhYmxlICovCi0JY2xpcF9wd3JzID0gcHJpdi0+Y2xpcF9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOworCWNsaXBfcHdycyA9IHByaXYtPmNsaXAzOV9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOwogCiAJLyogR2V0IHRoaXMgY2hhbm5lbCdzIHJhdGUtdG8tY3VycmVudC1wb3dlciBzZXR0aW5ncyB0YWJsZSAqLwogCXBvd2VyX2luZm8gPSBjaF9pbmZvLT5wb3dlcl9pbmZvOwpAQCAtMTgyMSw3ICsxODMyLDcgQEAKICAqCSBiYXNlZCBzdHJpY3RseSBvbiByZWd1bGF0b3J5IChlZXByb20gYW5kIHNwZWN0cnVtIG1ndCkgbGltaXRhdGlvbnMKICAqCSAobm8gY29uc2lkZXJhdGlvbiBmb3IgaC93IGNsaXBwaW5nIGxpbWl0YXRpb25zKS4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19nZXRfY2hfdHhwb3dlcl9saW1pdChzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCitzdGF0aWMgaW50IGl3bDM5NDVfaHdfcmVnX2dldF9jaF90eHBvd2VyX2xpbWl0KHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQogewogCXM4IG1heF9wb3dlcjsKIApAQCAtMTg0OSw5ICsxODYwLDEwIEBACiAgKgogICogSWYgUnhPbiBpcyAiYXNzb2NpYXRlZCIsIHRoaXMgc2VuZHMgdGhlIG5ldyBUeHBvd2VyIHRvIE5JQyEKICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19jb21wX3R4cG93ZXJfdGVtcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19jb21wX3R4cG93ZXJfdGVtcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbyA9IE5VTEw7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOwogCWludCBkZWx0YV9pbmRleDsKIAljb25zdCBzOCAqY2xpcF9wd3JzOyAvKiBhcnJheSBvZiBoL3cgbWF4IHBvd2VyIGxldmVscyBmb3IgZWFjaCByYXRlICovCiAJdTggYV9iYW5kOwpAQCAtMTg2Nyw3ICsxODc5LDcgQEAKIAkJYV9iYW5kID0gaXNfY2hhbm5lbF9hX2JhbmQoY2hfaW5mbyk7CiAKIAkJLyogR2V0IHRoaXMgY2hubGdycCdzIGZhY3RvcnkgY2FsaWJyYXRpb24gdGVtcGVyYXR1cmUgKi8KLQkJcmVmX3RlbXAgPSAoczE2KXByaXYtPmVlcHJvbS5ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLgorCQlyZWZfdGVtcCA9IChzMTYpZWVwcm9tLT5ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLgogCQkgICAgdGVtcGVyYXR1cmU7CiAKIAkJLyogZ2V0IHBvd2VyIGluZGV4IGFkanVzdG1lbnQgYmFzZWQgb24gY3VycmVudCBhbmQgZmFjdG9yeQpAQCAtMTg5Myw3ICsxOTA1LDcgQEAKIAkJfQogCiAJCS8qIEdldCB0aGlzIGNobmxncnAncyByYXRlLXRvLW1heC9jbGlwLXBvd2VycyB0YWJsZSAqLwotCQljbGlwX3B3cnMgPSBwcml2LT5jbGlwX2dyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uY2xpcF9wb3dlcnM7CisJCWNsaXBfcHdycyA9IHByaXYtPmNsaXAzOV9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOwogCiAJCS8qIHNldCBzY2FuIHR4IHBvd2VyLCAxTWJpdCBmb3IgQ0NLLCA2TWJpdCBmb3IgT0ZETSAqLwogCQlmb3IgKHNjYW5fdGJsX2luZGV4ID0gMDsKQEAgLTE5MDcsMjQgKzE5MTksMjQgQEAKIAl9CiAKIAkvKiBzZW5kIFR4cG93ZXIgY29tbWFuZCBmb3IgY3VycmVudCBjaGFubmVsIHRvIHVjb2RlICovCi0JcmV0dXJuIGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihwcml2KTsKKwlyZXR1cm4gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+c2VuZF90eF9wb3dlcihwcml2KTsKIH0KIAotaW50IGl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHM4IHBvd2VyKQoraW50IGl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgczggcG93ZXIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvOworCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCXM4IG1heF9wb3dlcjsKIAl1OCBhX2JhbmQ7CiAJdTggaTsKIAotCWlmIChwcml2LT51c2VyX3R4cG93ZXJfbGltaXQgPT0gcG93ZXIpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJSZXF1ZXN0ZWQgVHggcG93ZXIgc2FtZSBhcyBjdXJyZW50ICIKKwlpZiAocHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPT0gcG93ZXIpIHsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJSZXF1ZXN0ZWQgVHggcG93ZXIgc2FtZSBhcyBjdXJyZW50ICIKIAkJCQkibGltaXQ6ICVkZEJtLlxuIiwgcG93ZXIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfREVCVUdfUE9XRVIoIlNldHRpbmcgdXBwZXIgbGltaXQgY2xhbXAgdG8gJWRkQm0uXG4iLCBwb3dlcik7Ci0JcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0ID0gcG93ZXI7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTZXR0aW5nIHVwcGVyIGxpbWl0IGNsYW1wIHRvICVkZEJtLlxuIiwgcG93ZXIpOworCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gcG93ZXI7CiAKIAkvKiBzZXQgdXAgbmV3IFR4IHBvd2VycyBmb3IgZWFjaCBhbmQgZXZlcnkgY2hhbm5lbCwgMi40IGFuZCA1LnggKi8KIApAQCAtMTk1Myw3ICsxOTY1LDcgQEAKIH0KIAogLyogd2lsbCBhZGQgMzk0NSBjaGFubmVsIHN3aXRjaCBjbWQgaGFuZGxpbmcgbGF0ZXIgKi8KLWludCBpd2wzOTQ1X2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKQoraW50IGl3bDM5NDVfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MTYgY2hhbm5lbCkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTE5NjgsNyArMTk4MCw3IEBACiAgKiAgICAgLS0gc2VuZCBuZXcgc2V0IG9mIGdhaW4gc2V0dGluZ3MgdG8gTklDCiAgKiBOT1RFOiAgVGhpcyBzaG91bGQgY29udGludWUgd29ya2luZywgZXZlbiB3aGVuIHdlJ3JlIG5vdCBhc3NvY2lhdGVkLAogICogICBzbyB3ZSBjYW4ga2VlcCBvdXIgaW50ZXJuYWwgdGFibGUgb2Ygc2NhbiBwb3dlcnMgY3VycmVudC4gKi8KLXZvaWQgaXdsMzk0NV9yZWdfdHhwb3dlcl9wZXJpb2RpYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQordm9pZCBpd2wzOTQ1X3JlZ190eHBvd2VyX3BlcmlvZGljKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBUaGlzIHdpbGwga2ljayBpbiB0aGUgImJydXRlIGZvcmNlIgogCSAqIGl3bDM5NDVfaHdfcmVnX2NvbXBfdHhwb3dlcl90ZW1wKCkgYmVsb3cgKi8KQEAgLTE5ODcsNyArMTk5OSw3IEBACiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfcmVnX3R4cG93ZXJfcGVyaW9kaWMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDM5NDVfcHJpdiwKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LAogCQkJCQkgICAgIHRoZXJtYWxfcGVyaW9kaWMud29yayk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCkBAIC0yMDA5LDEwICsyMDIxLDExIEBACiAgKgkgb24gQS1iYW5kLCBFRVBST00ncyAiZ3JvdXAgZnJlcXVlbmN5IiBlbnRyaWVzIHJlcHJlc2VudCB0aGUgdG9wCiAgKgkgY2hhbm5lbCBpbiBlYWNoIGdyb3VwIDEtNC4gIEdyb3VwIDUgQWxsIEIvRyBjaGFubmVscyBhcmUgaW4gZ3JvdXAgMC4KICAqLwotc3RhdGljIHUxNiBpd2wzOTQ1X2h3X3JlZ19nZXRfY2hfZ3JwX2luZGV4KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKK3N0YXRpYyB1MTYgaXdsMzk0NV9od19yZWdfZ2V0X2NoX2dycF9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQogewotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV90eHBvd2VyX2dyb3VwICpjaF9ncnAgPSAmcHJpdi0+ZWVwcm9tLmdyb3Vwc1swXTsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tX3R4cG93ZXJfZ3JvdXAgKmNoX2dycCA9ICZlZXByb20tPmdyb3Vwc1swXTsKIAl1OCBncm91cDsKIAl1MTYgZ3JvdXBfaW5kZXggPSAwOwkvKiBiYXNlZCBvbiBmYWN0b3J5IGNhbGliIGZyZXF1ZW5jaWVzICovCiAJdTggZ3JwX2NoYW5uZWw7CkBAIC0yMDMyLDcgKzIwNDUsNyBAQAogCX0gZWxzZQogCQlncm91cF9pbmRleCA9IDA7CS8qIDIuNCBHSHosIGdyb3VwIDAgKi8KIAotCUlXTF9ERUJVR19QT1dFUigiQ2hubCAlZCBtYXBwZWQgdG8gZ3JwICVkXG4iLCBjaF9pbmZvLT5jaGFubmVsLAorCUlXTF9ERUJVR19QT1dFUihwcml2LCAiQ2hubCAlZCBtYXBwZWQgdG8gZ3JwICVkXG4iLCBjaF9pbmZvLT5jaGFubmVsLAogCQkJZ3JvdXBfaW5kZXgpOwogCXJldHVybiBncm91cF9pbmRleDsKIH0KQEAgLTIwNDMsMTEgKzIwNTYsMTIgQEAKICAqIEludGVycG9sYXRlIHRvIGdldCBub21pbmFsIChpLmUuIGF0IGZhY3RvcnkgY2FsaWJyYXRpb24gdGVtcGVyYXR1cmUpIGluZGV4CiAgKiAgIGludG8gcmFkaW8vRFNQIGdhaW4gc2V0dGluZ3MgdGFibGUgZm9yIHJlcXVlc3RlZCBwb3dlci4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19nZXRfbWF0Y2hlZF9wb3dlcl9pbmRleChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X2h3X3JlZ19nZXRfbWF0Y2hlZF9wb3dlcl9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJICAgICAgIHM4IHJlcXVlc3RlZF9wb3dlciwKIAkJCQkgICAgICAgczMyIHNldHRpbmdfaW5kZXgsIHMzMiAqbmV3X2luZGV4KQogewogCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2VlcHJvbV90eHBvd2VyX2dyb3VwICpjaG5sX2dycCA9IE5VTEw7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOwogCXMzMiBpbmRleDAsIGluZGV4MTsKIAlzMzIgcG93ZXIgPSAyICogcmVxdWVzdGVkX3Bvd2VyOwogCXMzMiBpOwpAQCAtMjA1Niw3ICsyMDcwLDcgQEAKIAlzMzIgcmVzOwogCXMzMiBkZW5vbWluYXRvcjsKIAotCWNobmxfZ3JwID0gJnByaXYtPmVlcHJvbS5ncm91cHNbc2V0dGluZ19pbmRleF07CisJY2hubF9ncnAgPSAmZWVwcm9tLT5ncm91cHNbc2V0dGluZ19pbmRleF07CiAJc2FtcGxlcyA9IGNobmxfZ3JwLT5zYW1wbGVzOwogCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKIAkJaWYgKHBvd2VyID09IHNhbXBsZXNbaV0ucG93ZXIpIHsKQEAgLTIwOTEsMjIgKzIxMDUsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9od19yZWdfaW5pdF9jaGFubmVsX2dyb3VwcyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9od19yZWdfaW5pdF9jaGFubmVsX2dyb3VwcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdTMyIGk7CiAJczMyIHJhdGVfaW5kZXg7CisJc3RydWN0IGl3bDM5NDVfZWVwcm9tICplZXByb20gPSAoc3RydWN0IGl3bDM5NDVfZWVwcm9tICopcHJpdi0+ZWVwcm9tOwogCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2VlcHJvbV90eHBvd2VyX2dyb3VwICpncm91cDsKIAotCUlXTF9ERUJVR19QT1dFUigiSW5pdGlhbGl6aW5nIGZhY3RvcnkgY2FsaWIgaW5mbyBmcm9tIEVFUFJPTVxuIik7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJJbml0aWFsaXppbmcgZmFjdG9yeSBjYWxpYiBpbmZvIGZyb20gRUVQUk9NXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBJV0xfTlVNX1RYX0NBTElCX0dST1VQUzsgaSsrKSB7CiAJCXM4ICpjbGlwX3B3cnM7CS8qIHRhYmxlIG9mIHBvd2VyIGxldmVscyBmb3IgZWFjaCByYXRlICovCiAJCXM4IHNhdHVyX3B3cjsJLyogc2F0dXJhdGlvbiBwb3dlciBmb3IgZWFjaCBjaG5sIGdyb3VwICovCi0JCWdyb3VwID0gJnByaXYtPmVlcHJvbS5ncm91cHNbaV07CisJCWdyb3VwID0gJmVlcHJvbS0+Z3JvdXBzW2ldOwogCiAJCS8qIHNhbml0eSBjaGVjayBvbiBmYWN0b3J5IHNhdHVyYXRpb24gcG93ZXIgdmFsdWUgKi8KIAkJaWYgKGdyb3VwLT5zYXR1cmF0aW9uX3Bvd2VyIDwgNDApIHsKLQkJCUlXTF9XQVJOSU5HKCJFcnJvcjogc2F0dXJhdGlvbiBwb3dlciBpcyAlZCwgIgorCQkJSVdMX1dBUk4ocHJpdiwgIkVycm9yOiBzYXR1cmF0aW9uIHBvd2VyIGlzICVkLCAiCiAJCQkJICAgICJsZXNzIHRoYW4gbWluaW11bSBleHBlY3RlZCA0MFxuIiwKIAkJCQkgICAgZ3JvdXAtPnNhdHVyYXRpb25fcG93ZXIpOwogCQkJcmV0dXJuOwpAQCAtMjEyMSw3ICsyMTM2LDcgQEAKIAkJICogICBwb3dlciBwZWFrcywgd2l0aG91dCB0b28gbXVjaCBkaXN0b3J0aW9uIChjbGlwcGluZykuCiAJCSAqLwogCQkvKiB3ZSdsbCBmaWxsIGluIHRoaXMgYXJyYXkgd2l0aCBoL3cgbWF4IHBvd2VyIGxldmVscyAqLwotCQljbGlwX3B3cnMgPSAoczggKikgcHJpdi0+Y2xpcF9ncm91cHNbaV0uY2xpcF9wb3dlcnM7CisJCWNsaXBfcHdycyA9IChzOCAqKSBwcml2LT5jbGlwMzlfZ3JvdXBzW2ldLmNsaXBfcG93ZXJzOwogCiAJCS8qIGRpdmlkZSBmYWN0b3J5IHNhdHVyYXRpb24gcG93ZXIgYnkgMiB0byBmaW5kIC0zZEIgbGV2ZWwgKi8KIAkJc2F0dXJfcHdyID0gKHM4KSAoZ3JvdXAtPnNhdHVyYXRpb25fcG93ZXIgPj4gMSk7CkBAIC0yMTcxLDEwICsyMTg2LDExIEBACiAgKgogICogVGhpcyBkb2VzICpub3QqIHdyaXRlIHZhbHVlcyB0byBOSUMsIGp1c3Qgc2V0cyB1cCBvdXIgaW50ZXJuYWwgdGFibGUuCiAgKi8KLWludCBpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitpbnQgaXdsMzk0NV90eHBvd2VyX3NldF9mcm9tX2VlcHJvbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbyA9IE5VTEw7CiAJc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvICpwd3JfaW5mbzsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CiAJaW50IGRlbHRhX2luZGV4OwogCXU4IHJhdGVfaW5kZXg7CiAJdTggc2Nhbl90YmxfaW5kZXg7CkBAIC0yMjA0LDE1ICsyMjIwLDE1IEBACiAJCQlpd2wzOTQ1X2h3X3JlZ19nZXRfY2hfZ3JwX2luZGV4KHByaXYsIGNoX2luZm8pOwogCiAJCS8qIEdldCB0aGlzIGNobmxncnAncyByYXRlLT5tYXgvY2xpcC1wb3dlcnMgdGFibGUgKi8KLQkJY2xpcF9wd3JzID0gcHJpdi0+Y2xpcF9ncm91cHNbY2hfaW5mby0+Z3JvdXBfaW5kZXhdLmNsaXBfcG93ZXJzOworCQljbGlwX3B3cnMgPSBwcml2LT5jbGlwMzlfZ3JvdXBzW2NoX2luZm8tPmdyb3VwX2luZGV4XS5jbGlwX3Bvd2VyczsKIAogCQkvKiBjYWxjdWxhdGUgcG93ZXIgaW5kZXggKmFkanVzdG1lbnQqIHZhbHVlIGFjY29yZGluZyB0bwogCQkgKiAgZGlmZiBiZXR3ZWVuIGN1cnJlbnQgdGVtcGVyYXR1cmUgYW5kIGZhY3RvcnkgdGVtcGVyYXR1cmUgKi8KIAkJZGVsdGFfaW5kZXggPSBpd2wzOTQ1X2h3X3JlZ19hZGp1c3RfcG93ZXJfYnlfdGVtcCh0ZW1wZXJhdHVyZSwKLQkJCQlwcml2LT5lZXByb20uZ3JvdXBzW2NoX2luZm8tPmdyb3VwX2luZGV4XS4KKwkJCQllZXByb20tPmdyb3Vwc1tjaF9pbmZvLT5ncm91cF9pbmRleF0uCiAJCQkJdGVtcGVyYXR1cmUpOwogCi0JCUlXTF9ERUJVR19QT1dFUigiRGVsdGEgaW5kZXggZm9yIGNoYW5uZWwgJWQ6ICVkIFslZF1cbiIsCisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiRGVsdGEgaW5kZXggZm9yIGNoYW5uZWwgJWQ6ICVkIFslZF1cbiIsCiAJCQkJY2hfaW5mby0+Y2hhbm5lbCwgZGVsdGFfaW5kZXgsIHRlbXBlcmF0dXJlICsKIAkJCQlJV0xfVEVNUF9DT05WRVJUKTsKIApAQCAtMjIzNSw3ICsyMjUxLDcgQEAKIAkJCQkJCQkgY2hfaW5mby0+Z3JvdXBfaW5kZXgsCiAJCQkJCQkJICZwb3dlcl9pZHgpOwogCQkJaWYgKHJjKSB7Ci0JCQkJSVdMX0VSUk9SKCJJbnZhbGlkIHBvd2VyIGluZGV4XG4iKTsKKwkJCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIHBvd2VyIGluZGV4XG4iKTsKIAkJCQlyZXR1cm4gcmM7CiAJCQl9CiAJCQlwd3JfaW5mby0+YmFzZV9wb3dlcl9pbmRleCA9ICh1OCkgcG93ZXJfaWR4OwpAQCAtMjI5NSw3NSArMjMxMSw5MCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaXdsMzk0NV9od19yeHFfc3RvcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQoraW50IGl3bDM5NDVfaHdfcnhxX3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCi0JaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9SQ1NSX0NPTkZJRygwKSwgMCk7Ci0JcmMgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBGSF9SU1NSX1NUQVRVUywKLQkJCUZIX1JTU1JfQ0hOTDBfUlhfU1RBVFVTX0NITkxfSURMRSwgMTAwMCk7CisJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIMzlfUkNTUl9DT05GSUcoMCksIDApOworCXJjID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBGSDM5X1JTU1JfU1RBVFVTLAorCQkJRkgzOV9SU1NSX0NITkwwX1JYX1NUQVRVU19DSE5MX0lETEUsIDEwMDApOwogCWlmIChyYyA8IDApCi0JCUlXTF9FUlJPUigiQ2FuJ3Qgc3RvcCBSeCBETUEuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ2FuJ3Qgc3RvcCBSeCBETUEuXG4iKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSkKK2ludCBpd2wzOTQ1X2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpCiB7CiAJaW50IHJjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKIAotCXN0cnVjdCBpd2wzOTQ1X3NoYXJlZCAqc2hhcmVkX2RhdGEgPSBwcml2LT5od19zZXR0aW5nLnNoYXJlZF92aXJ0OworCXN0cnVjdCBpd2wzOTQ1X3NoYXJlZCAqc2hhcmVkX2RhdGEgPSBwcml2LT5zaGFyZWRfdmlydDsKIAogCXNoYXJlZF9kYXRhLT50eF9iYXNlX3B0clt0eHFfaWRdID0gY3B1X3RvX2xlMzIoKHUzMil0eHEtPnEuZG1hX2FkZHIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmM7CiAJfQotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfQ0JDQ19DVFJMKHR4cV9pZCksIDApOwotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfQ0JDQ19CQVNFKHR4cV9pZCksIDApOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X0NCQ0NfQ1RSTCh0eHFfaWQpLCAwKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9DQkNDX0JBU0UodHhxX2lkKSwgMCk7CiAKLQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1RDU1JfQ09ORklHKHR4cV9pZCksCi0JCUFMTV9GSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfUlRDX05PSU5UIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfVFhGIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9IT1NUX0lGVEZEIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NSRURJVF9FTkFCTEVfVkFMIHwKLQkJQUxNX0ZIX1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFKTsKLQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkgzOV9UQ1NSX0NPTkZJRyh0eHFfaWQpLAorCQlGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfQ0lSUV9SVENfTk9JTlQgfAorCQlGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfTVNHX01PREVfVFhGIHwKKwkJRkgzOV9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfSE9TVF9JRlRGRCB8CisJCUZIMzlfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0VOQUJMRV9WQUwgfAorCQlGSDM5X1RDU1JfVFhfQ09ORklHX1JFR19WQUxfRE1BX0NITkxfRU5BQkxFKTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCiAJLyogZmFrZSByZWFkIHRvIGZsdXNoIGFsbCBwcmV2LiB3cml0ZXMgKi8KLQlpd2wzOTQ1X3JlYWQzMihwcml2LCBGSF9UU1NSX0NCQl9CQVNFKTsKKwlpd2xfcmVhZDMyKHByaXYsIEZIMzlfVFNTUl9DQkJfQkFTRSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWludCBpd2wzOTQ1X2h3X2dldF9yeF9yZWFkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCisvKgorICogSENNRCB1dGlscworICovCitzdGF0aWMgdTE2IGl3bDM5NDVfZ2V0X2hjbWRfc2l6ZSh1OCBjbWRfaWQsIHUxNiBsZW4pCiB7Ci0Jc3RydWN0IGl3bDM5NDVfc2hhcmVkICpzaGFyZWRfZGF0YSA9IHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQ7CisJc3dpdGNoIChjbWRfaWQpIHsKKwljYXNlIFJFUExZX1JYT046CisJCXJldHVybiBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpOworCWNhc2UgUE9XRVJfVEFCTEVfQ01EOgorCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gbGVuOworCX0KK30KIAotCXJldHVybiBsZTMyX3RvX2NwdShzaGFyZWRfZGF0YS0+cnhfcmVhZF9wdHJbMF0pOworc3RhdGljIHUxNiBpd2wzOTQ1X2J1aWxkX2FkZHN0YV9oY21kKGNvbnN0IHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqY21kLCB1OCAqZGF0YSkKK3sKKwl1MTYgc2l6ZSA9ICh1MTYpc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQpOworCW1lbWNweShkYXRhLCBjbWQsIHNpemUpOworCXJldHVybiBzaXplOwogfQogCiAvKioKICAqIGl3bDM5NDVfaW5pdF9od19yYXRlX3RhYmxlIC0gSW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgcmF0ZSBmYWxsYmFjayB0YWJsZQogICovCi1pbnQgaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK2ludCBpd2wzOTQ1X2luaXRfaHdfcmF0ZV90YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjLCBpLCBpbmRleCwgcHJldl9pbmRleDsKIAlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHJhdGVfY21kID0gewpAQCAtMjM4NCw3ICsyNDE1LDcgQEAKIAogCXN3aXRjaCAocHJpdi0+YmFuZCkgewogCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKLQkJSVdMX0RFQlVHX1JBVEUoIlNlbGVjdCBBIG1vZGUgcmF0ZSBzY2FsZVxuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTZWxlY3QgQSBtb2RlIHJhdGUgc2NhbGVcbiIpOwogCQkvKiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBDQ0sgcmF0ZXMgaXMgdXNlZCwKIAkJICogaGF2ZSBpdCBmYWxsIGJhY2sgdG8gdGhlIDZNIE9GRE0gcmF0ZSAqLwogCQlmb3IgKGkgPSBJV0xfUkFURV8xTV9JTkRFWF9UQUJMRTsKQEAgLTI0MDIsMTIgKzI0MzMsMTIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6Ci0JCUlXTF9ERUJVR19SQVRFKCJTZWxlY3QgQi9HIG1vZGUgcmF0ZSBzY2FsZVxuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTZWxlY3QgQi9HIG1vZGUgcmF0ZSBzY2FsZVxuIik7CiAJCS8qIElmIGFuIE9GRE0gcmF0ZSBpcyB1c2VkLCBoYXZlIGl0IGZhbGwgYmFjayB0byB0aGUKIAkJICogMU0gQ0NLIHJhdGVzICovCiAKIAkJaWYgKCEocHJpdi0+c3RhX3N1cHBfcmF0ZXMgJiBJV0xfT0ZETV9SQVRFU19NQVNLKSAmJgotCQkgICAgaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCSAgICBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgewogCiAJCQlpbmRleCA9IElXTF9GSVJTVF9DQ0tfUkFURTsKIAkJCWZvciAoaSA9IElXTF9SQVRFXzZNX0lOREVYX1RBQkxFOwpAQCAtMjQyOCw0NyArMjQ1OSw1MSBAQAogCiAJLyogVXBkYXRlIHRoZSByYXRlIHNjYWxpbmcgZm9yIGNvbnRyb2wgZnJhbWUgVHggKi8KIAlyYXRlX2NtZC50YWJsZV9pZCA9IDA7Ci0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SQVRFX1NDQUxFLCBzaXplb2YocmF0ZV9jbWQpLAorCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SQVRFX1NDQUxFLCBzaXplb2YocmF0ZV9jbWQpLAogCQkJICAgICAgJnJhdGVfY21kKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAogCS8qIFVwZGF0ZSB0aGUgcmF0ZSBzY2FsaW5nIGZvciBkYXRhIGZyYW1lIFR4ICovCiAJcmF0ZV9jbWQudGFibGVfaWQgPSAxOwotCXJldHVybiBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SQVRFX1NDQUxFLCBzaXplb2YocmF0ZV9jbWQpLAorCXJldHVybiBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JBVEVfU0NBTEUsIHNpemVvZihyYXRlX2NtZCksCiAJCQkJJnJhdGVfY21kKTsKIH0KIAogLyogQ2FsbGVkIHdoZW4gaW5pdGlhbGl6aW5nIGRyaXZlciAqLwotaW50IGl3bDM5NDVfaHdfc2V0X2h3X3NldHRpbmcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK2ludCBpd2wzOTQ1X2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCW1lbXNldCgodm9pZCAqKSZwcml2LT5od19zZXR0aW5nLCAwLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfZHJpdmVyX2h3X2luZm8pKTsKKwltZW1zZXQoKHZvaWQgKikmcHJpdi0+aHdfcGFyYW1zLCAwLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9od19wYXJhbXMpKTsKIAotCXByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQgPQorCXByaXYtPnNoYXJlZF92aXJ0ID0KIAkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwKIAkJCQkgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3NoYXJlZCksCi0JCQkJICZwcml2LT5od19zZXR0aW5nLnNoYXJlZF9waHlzKTsKKwkJCQkgJnByaXYtPnNoYXJlZF9waHlzKTsKIAotCWlmICghcHJpdi0+aHdfc2V0dGluZy5zaGFyZWRfdmlydCkgewotCQlJV0xfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKKwlpZiAoIXByaXYtPnNoYXJlZF92aXJ0KSB7CisJCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXByaXYtPmh3X3NldHRpbmcucnhfYnVmX3NpemUgPSBJV0xfUlhfQlVGX1NJWkU7Ci0JcHJpdi0+aHdfc2V0dGluZy5tYXhfcGt0X3NpemUgPSAyMzQyOwotCXByaXYtPmh3X3NldHRpbmcudHhfY21kX2xlbiA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eF9jbWQpOwotCXByaXYtPmh3X3NldHRpbmcubWF4X3J4cV9zaXplID0gUlhfUVVFVUVfU0laRTsKLQlwcml2LT5od19zZXR0aW5nLm1heF9yeHFfbG9nID0gUlhfUVVFVUVfU0laRV9MT0c7Ci0JcHJpdi0+aHdfc2V0dGluZy5tYXhfc3RhdGlvbnMgPSBJV0wzOTQ1X1NUQVRJT05fQ09VTlQ7Ci0JcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQgPSBJV0wzOTQ1X0JST0FEQ0FTVF9JRDsKKwkvKiBBc3NpZ24gbnVtYmVyIG9mIFVzYWJsZSBUWCBxdWV1ZXMgKi8KKwlwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0gPSBURkRfUVVFVUVfTUFYOwogCi0JcHJpdi0+aHdfc2V0dGluZy50eF9hbnRfbnVtID0gMjsKKwlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfdGZkKTsKKwlwcml2LT5od19wYXJhbXMucnhfYnVmX3NpemUgPSBJV0xfUlhfQlVGX1NJWkVfM0s7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9wa3Rfc2l6ZSA9IDIzNDI7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfc2l6ZSA9IFJYX1FVRVVFX1NJWkU7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9yeHFfbG9nID0gUlhfUVVFVUVfU0laRV9MT0c7CisJcHJpdi0+aHdfcGFyYW1zLm1heF9zdGF0aW9ucyA9IElXTDM5NDVfU1RBVElPTl9DT1VOVDsKKwlwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkID0gSVdMMzk0NV9CUk9BRENBU1RfSUQ7CisKKwlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSDM5X1JTQ1NSX0NITkwwX1dQVFI7CisKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgaW50IGl3bDM5NDVfaHdfZ2V0X2JlYWNvbl9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3Vuc2lnbmVkIGludCBpd2wzOTQ1X2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgc3RydWN0IGl3bDM5NDVfZnJhbWUgKmZyYW1lLCB1OCByYXRlKQogewogCXN0cnVjdCBpd2wzOTQ1X3R4X2JlYWNvbl9jbWQgKnR4X2JlYWNvbl9jbWQ7CkBAIC0yNDc3LDcgKzI1MTIsNyBAQAogCXR4X2JlYWNvbl9jbWQgPSAoc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCAqKSZmcmFtZS0+dTsKIAltZW1zZXQodHhfYmVhY29uX2NtZCwgMCwgc2l6ZW9mKCp0eF9iZWFjb25fY21kKSk7CiAKLQl0eF9iZWFjb25fY21kLT50eC5zdGFfaWQgPSBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwl0eF9iZWFjb25fY21kLT50eC5zdGFfaWQgPSBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCXR4X2JlYWNvbl9jbWQtPnR4LnN0b3BfdGltZS5saWZlX3RpbWUgPSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFOwogCiAJZnJhbWVfc2l6ZSA9IGl3bDM5NDVfZmlsbF9iZWFjb25fZnJhbWUocHJpdiwKQEAgLTI1MDEsMzcgKzI1MzYsMjYyIEBACiAJcmV0dXJuIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eF9iZWFjb25fY21kKSArIGZyYW1lX3NpemU7CiB9CiAKLXZvaWQgaXdsMzk0NV9od19yeF9oYW5kbGVyX3NldHVwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfaHdfcnhfaGFuZGxlcl9zZXR1cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfVFhdID0gaXdsMzk0NV9yeF9yZXBseV90eDsKIAlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV8zOTQ1X1JYXSA9IGl3bDM5NDVfcnhfcmVwbHlfcng7CiB9CiAKLXZvaWQgaXdsMzk0NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCit2b2lkIGl3bDM5NDVfaHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPnRoZXJtYWxfcGVyaW9kaWMsCiAJCQkgIGl3bDM5NDVfYmdfcmVnX3R4cG93ZXJfcGVyaW9kaWMpOwogfQogCi12b2lkIGl3bDM5NDVfaHdfY2FuY2VsX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3ZvaWQgaXdsMzk0NV9od19jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+dGhlcm1hbF9wZXJpb2RpYyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsXzM5NDVfY2ZnIGl3bDM5NDVfYmdfY2ZnID0geworLyogY2hlY2sgY29udGVudHMgb2Ygc3BlY2lhbCBib290c3RyYXAgdUNvZGUgU1JBTSAqLworc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9ic20oc3RydWN0IGl3bF9wcml2ICpwcml2KQorIHsKKwlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7CisJdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOworCXUzMiByZWc7CisJdTMyIHZhbDsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCZWdpbiB2ZXJpZnkgYnNtXG4iKTsKKworCS8qIHZlcmlmeSBCU00gU1JBTSBjb250ZW50cyAqLworCXZhbCA9IGl3bF9yZWFkX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHKTsKKwlmb3IgKHJlZyA9IEJTTV9TUkFNX0xPV0VSX0JPVU5EOworCSAgICAgcmVnIDwgQlNNX1NSQU1fTE9XRVJfQk9VTkQgKyBsZW47CisJICAgICByZWcgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKKwkJdmFsID0gaXdsX3JlYWRfcHJwaChwcml2LCByZWcpOworCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKKwkJCUlXTF9FUlIocHJpdiwgIkJTTSB1Q29kZSB2ZXJpZmljYXRpb24gZmFpbGVkIGF0ICIKKwkJCQkgICJhZGRyIDB4JTA4WCsldSAob2YgJXUpLCBpcyAweCV4LCBzL2IgMHgleFxuIiwKKwkJCQkgIEJTTV9TUkFNX0xPV0VSX0JPVU5ELAorCQkJCSAgcmVnIC0gQlNNX1NSQU1fTE9XRVJfQk9VTkQsIGxlbiwKKwkJCQkgIHZhbCwgbGUzMl90b19jcHUoKmltYWdlKSk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCX0KKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCU00gYm9vdHN0cmFwIHVDb2RlIGltYWdlIE9LXG4iKTsKKworCXJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBFRVBST00gcmVsYXRlZCBmdW5jdGlvbnMKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQ2xlYXIgdGhlIE9XTkVSX01TSywgdG8gZXN0YWJsaXNoIGRyaXZlciAoaW5zdGVhZCBvZiB1Q29kZSBydW5uaW5nIG9uCisgKiBlbWJlZGRlZCBjb250cm9sbGVyKSBhcyBFRVBST00gcmVhZGVyOyBlYWNoIHJlYWQgaXMgYSBzZXJpZXMgb2YgcHVsc2VzCisgKiB0by9mcm9tIHRoZSBFRVBST00gY2hpcCwgbm90IGEgc2luZ2xlIGV2ZW50LCBzbyBldmVuIHJlYWRzIGNvdWxkIGNvbmZsaWN0CisgKiBpZiB0aGV5IHdlcmVuJ3QgYXJiaXRyYXRlZCBieSBzb21lIG93bmVyc2hpcCBtZWNoYW5pc20uICBIZXJlLCB0aGUgZHJpdmVyCisgKiBzaW1wbHkgY2xhaW1zIG93bmVyc2hpcCwgd2hpY2ggc2hvdWxkIGJlIHNhZmUgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorICogKGkuZS4gYmVmb3JlIGxvYWRpbmcgdUNvZGUhKS4KKyAqLworc3RhdGljIGludCBpd2wzOTQ1X2VlcHJvbV9hY3F1aXJlX3NlbWFwaG9yZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJX2l3bF9jbGVhcl9iaXQocHJpdiwgQ1NSX0VFUFJPTV9HUCwgQ1NSX0VFUFJPTV9HUF9JRl9PV05FUl9NU0spOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZWVwcm9tX3JlbGVhc2Vfc2VtYXBob3JlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm47Cit9CisKKyAvKioKKyAgKiBpd2wzOTQ1X2xvYWRfYnNtIC0gTG9hZCBib290c3RyYXAgaW5zdHJ1Y3Rpb25zCisgICoKKyAgKiBCU00gb3BlcmF0aW9uOgorICAqCisgICogVGhlIEJvb3RzdHJhcCBTdGF0ZSBNYWNoaW5lIChCU00pIHN0b3JlcyBhIHNob3J0IGJvb3RzdHJhcCB1Q29kZSBwcm9ncmFtCisgICogaW4gc3BlY2lhbCBTUkFNIHRoYXQgZG9lcyBub3QgcG93ZXIgZG93biBkdXJpbmcgUkZLSUxMLiAgV2hlbiBwb3dlcmluZyBiYWNrCisgICogdXAgYWZ0ZXIgcG93ZXItc2F2aW5nIHNsZWVwcyAob3IgZHVyaW5nIGluaXRpYWwgdUNvZGUgbG9hZCksIHRoZSBCU00gbG9hZHMKKyAgKiB0aGUgYm9vdHN0cmFwIHByb2dyYW0gaW50byB0aGUgb24tYm9hcmQgcHJvY2Vzc29yLCBhbmQgc3RhcnRzIGl0LgorICAqCisgICogVGhlIGJvb3RzdHJhcCBwcm9ncmFtIGxvYWRzICh2aWEgRE1BKSBpbnN0cnVjdGlvbnMgYW5kIGRhdGEgZm9yIGEgbmV3CisgICogcHJvZ3JhbSBmcm9tIGhvc3QgRFJBTSBsb2NhdGlvbnMgaW5kaWNhdGVkIGJ5IHRoZSBob3N0IGRyaXZlciBpbiB0aGUKKyAgKiBCU01fRFJBTV8qIHJlZ2lzdGVycy4gIE9uY2UgdGhlIG5ldyBwcm9ncmFtIGlzIGxvYWRlZCwgaXQgc3RhcnRzCisgICogYXV0b21hdGljYWxseS4KKyAgKgorICAqIFdoZW4gaW5pdGlhbGl6aW5nIHRoZSBOSUMsIHRoZSBob3N0IGRyaXZlciBwb2ludHMgdGhlIEJTTSB0byB0aGUKKyAgKiAiaW5pdGlhbGl6ZSIgdUNvZGUgaW1hZ2UuICBUaGlzIHVDb2RlIHNldHMgdXAgc29tZSBpbnRlcm5hbCBkYXRhLCB0aGVuCisgICogbm90aWZpZXMgaG9zdCB2aWEgImluaXRpYWxpemUgYWxpdmUiIHRoYXQgaXQgaXMgY29tcGxldGUuCisgICoKKyAgKiBUaGUgaG9zdCB0aGVuIHJlcGxhY2VzIHRoZSBCU01fRFJBTV8qIHBvaW50ZXIgdmFsdWVzIHRvIHBvaW50IHRvIHRoZQorICAqIG5vcm1hbCBydW50aW1lIHVDb2RlIGluc3RydWN0aW9ucyBhbmQgYSBiYWNrdXAgdUNvZGUgZGF0YSBjYWNoZSBidWZmZXIKKyAgKiAoZmlsbGVkIGluaXRpYWxseSB3aXRoIHN0YXJ0aW5nIGRhdGEgdmFsdWVzIGZvciB0aGUgb24tYm9hcmQgcHJvY2Vzc29yKSwKKyAgKiB0aGVuIHRyaWdnZXJzIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgdG8gbG9hZCBhbmQgbGF1bmNoIHRoZSBydW50aW1lIHVDb2RlLAorICAqIHdoaWNoIGJlZ2lucyBub3JtYWwgb3BlcmF0aW9uLgorICAqCisgICogV2hlbiBkb2luZyBhIHBvd2VyLXNhdmUgc2h1dGRvd24sIHJ1bnRpbWUgdUNvZGUgc2F2ZXMgZGF0YSBTUkFNIGludG8KKyAgKiB0aGUgYmFja3VwIGRhdGEgY2FjaGUgaW4gRFJBTSBiZWZvcmUgU1JBTSBpcyBwb3dlcmVkIGRvd24uCisgICoKKyAgKiBXaGVuIHBvd2VyaW5nIGJhY2sgdXAsIHRoZSBCU00gbG9hZHMgdGhlIGJvb3RzdHJhcCBwcm9ncmFtLiAgVGhpcyByZWxvYWRzCisgICogdGhlIHJ1bnRpbWUgdUNvZGUgaW5zdHJ1Y3Rpb25zIGFuZCB0aGUgYmFja3VwIGRhdGEgY2FjaGUgaW50byBTUkFNLAorICAqIGFuZCByZS1sYXVuY2hlcyB0aGUgcnVudGltZSB1Q29kZSBmcm9tIHdoZXJlIGl0IGxlZnQgb2ZmLgorICAqLworc3RhdGljIGludCBpd2wzOTQ1X2xvYWRfYnNtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7CisJdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOworCWRtYV9hZGRyX3QgcGluc3Q7CisJZG1hX2FkZHJfdCBwZGF0YTsKKwl1MzIgaW5zdF9sZW47CisJdTMyIGRhdGFfbGVuOworCWludCByYzsKKwlpbnQgaTsKKwl1MzIgZG9uZTsKKwl1MzIgcmVnX29mZnNldDsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCZWdpbiBsb2FkIGJzbVxuIik7CisKKwkvKiBtYWtlIHN1cmUgYm9vdHN0cmFwIHByb2dyYW0gaXMgbm8gbGFyZ2VyIHRoYW4gQlNNJ3MgU1JBTSBzaXplICovCisJaWYgKGxlbiA+IElXTDM5X01BWF9CU01fU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBUZWxsIGJvb3RzdHJhcCB1Q29kZSB3aGVyZSB0byBmaW5kIHRoZSAiSW5pdGlhbGl6ZSIgdUNvZGUKKwkqICAgaW4gaG9zdCBEUkFNIC4uLiBob3N0IERSQU0gcGh5c2ljYWwgYWRkcmVzcyBiaXRzIDMxOjAgZm9yIDM5NDUuCisJKiBOT1RFOiAgaXdsMzk0NV9pbml0aWFsaXplX2FsaXZlX3N0YXJ0KCkgd2lsbCByZXBsYWNlIHRoZXNlIHZhbHVlcywKKwkqICAgICAgICBhZnRlciB0aGUgImluaXRpYWxpemUiIHVDb2RlIGhhcyBydW4sIHRvIHBvaW50IHRvCisJKiAgICAgICAgcnVudGltZS9wcm90b2NvbCBpbnN0cnVjdGlvbnMgYW5kIGJhY2t1cCBkYXRhIGNhY2hlLiAqLworCXBpbnN0ID0gcHJpdi0+dWNvZGVfaW5pdC5wX2FkZHI7CisJcGRhdGEgPSBwcml2LT51Y29kZV9pbml0X2RhdGEucF9hZGRyOworCWluc3RfbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47CisJZGF0YV9sZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOworCisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9QVFJfUkVHLCBwaW5zdCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9QVFJfUkVHLCBwZGF0YSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9CWVRFQ09VTlRfUkVHLCBpbnN0X2xlbik7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9CWVRFQ09VTlRfUkVHLCBkYXRhX2xlbik7CisKKwkvKiBGaWxsIEJTTSBtZW1vcnkgd2l0aCBib290c3RyYXAgaW5zdHJ1Y3Rpb25zICovCisJZm9yIChyZWdfb2Zmc2V0ID0gQlNNX1NSQU1fTE9XRVJfQk9VTkQ7CisJICAgICByZWdfb2Zmc2V0IDwgQlNNX1NSQU1fTE9XRVJfQk9VTkQgKyBsZW47CisJICAgICByZWdfb2Zmc2V0ICs9IHNpemVvZih1MzIpLCBpbWFnZSsrKQorCQlfaXdsX3dyaXRlX3BycGgocHJpdiwgcmVnX29mZnNldCwKKwkJCQkJICBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKKworCXJjID0gaXdsMzk0NV92ZXJpZnlfYnNtKHByaXYpOworCWlmIChyYykgeworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlyZXR1cm4gcmM7CisJfQorCisJLyogVGVsbCBCU00gdG8gY29weSBmcm9tIEJTTSBTUkFNIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSwgd2hlbiBhc2tlZCAqLworCWl3bF93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9NRU1fU1JDX1JFRywgMHgwKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX0RTVF9SRUcsCisJCQkJIElXTDM5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfRFdDT1VOVF9SRUcsIGxlbiAvIHNpemVvZih1MzIpKTsKKworCS8qIExvYWQgYm9vdHN0cmFwIGNvZGUgaW50byBpbnN0cnVjdGlvbiBTUkFNIG5vdywKKwkgKiAgIHRvIHByZXBhcmUgdG8gbG9hZCAiaW5pdGlhbGl6ZSIgdUNvZGUgKi8KKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfQ1RSTF9SRUcsCisJCUJTTV9XUl9DVFJMX1JFR19CSVRfU1RBUlQpOworCisJLyogV2FpdCBmb3IgbG9hZCBvZiBib290c3RyYXAgdUNvZGUgdG8gZmluaXNoICovCisJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisJCWRvbmUgPSBpd2xfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9DVFJMX1JFRyk7CisJCWlmICghKGRvbmUgJiBCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTApOworCX0KKwlpZiAoaSA8IDEwMCkKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJTTSB3cml0ZSBjb21wbGV0ZSwgcG9sbCAlZCBpdGVyYXRpb25zXG4iLCBpKTsKKwllbHNlIHsKKwkJSVdMX0VSUihwcml2LCAiQlNNIHdyaXRlIGRpZCBub3QgY29tcGxldGUhXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogRW5hYmxlIGZ1dHVyZSBib290IGxvYWRzIHdoZW5ldmVyIHBvd2VyIG1hbmFnZW1lbnQgdW5pdCB0cmlnZ2VycyBpdAorCSAqICAgKGUuZy4gd2hlbiBwb3dlcmluZyBiYWNrIHVwIGFmdGVyIHBvd2VyLXNhdmUgc2h1dGRvd24pICovCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHLAorCQlCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUX0VOKTsKKworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2wzOTQ1X2xpYiA9IHsKKwkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQsCisJLnR4cV9mcmVlX3RmZCA9IGl3bDM5NDVfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdCwKKwkubG9hZF91Y29kZSA9IGl3bDM5NDVfbG9hZF9ic20sCisJLmFwbV9vcHMgPSB7CisJCS5pbml0ID0gaXdsMzk0NV9hcG1faW5pdCwKKwkJLnJlc2V0ID0gaXdsMzk0NV9hcG1fcmVzZXQsCisJCS5zdG9wID0gaXdsMzk0NV9hcG1fc3RvcCwKKwkJLmNvbmZpZyA9IGl3bDM5NDVfbmljX2NvbmZpZywKKwkJLnNldF9wd3Jfc3JjID0gaXdsMzk0NV9zZXRfcHdyX3NyYywKKwl9LAorCS5lZXByb21fb3BzID0geworCQkucmVndWxhdG9yeV9iYW5kcyA9IHsKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfMV9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfMl9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfM19DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNF9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfNV9DSEFOTkVMUywKKwkJCUVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFULAorCQkJRUVQUk9NX1JFR1VMQVRPUllfQkFORF9OT19GQVQsCisJCX0sCisJCS52ZXJpZnlfc2lnbmF0dXJlICA9IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUsCisJCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bDM5NDVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAorCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2wzOTQ1X2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKKwkJLnF1ZXJ5X2FkZHIgPSBpd2xjb3JlX2VlcHJvbV9xdWVyeV9hZGRyLAorCX0sCisJLnNlbmRfdHhfcG93ZXIJPSBpd2wzOTQ1X3NlbmRfdHhfcG93ZXIsCisJLmlzX3ZhbGlkX3J0Y19kYXRhX2FkZHIgPSBpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIsCit9OworCitzdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2wzOTQ1X2hjbWRfdXRpbHMgPSB7CisJLmdldF9oY21kX3NpemUgPSBpd2wzOTQ1X2dldF9oY21kX3NpemUsCisJLmJ1aWxkX2FkZHN0YV9oY21kID0gaXdsMzk0NV9idWlsZF9hZGRzdGFfaGNtZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXdsX29wcyBpd2wzOTQ1X29wcyA9IHsKKwkubGliID0gJml3bDM5NDVfbGliLAorCS51dGlscyA9ICZpd2wzOTQ1X2hjbWRfdXRpbHMsCit9OworCitzdGF0aWMgc3RydWN0IGl3bF9jZmcgaXdsMzk0NV9iZ19jZmcgPSB7CiAJLm5hbWUgPSAiMzk0NUJHIiwKIAkuZndfbmFtZV9wcmUgPSBJV0wzOTQ1X0ZXX1BSRSwKIAkudWNvZGVfYXBpX21heCA9IElXTDM5NDVfVUNPREVfQVBJX01BWCwKIAkudWNvZGVfYXBpX21pbiA9IElXTDM5NDVfVUNPREVfQVBJX01JTiwKIAkuc2t1ID0gSVdMX1NLVV9HLAorCS5lZXByb21fc2l6ZSA9IElXTDM5NDVfRUVQUk9NX0lNR19TSVpFLAorCS5lZXByb21fdmVyID0gRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04sCisJLm9wcyA9ICZpd2wzOTQ1X29wcywKKwkubW9kX3BhcmFtcyA9ICZpd2wzOTQ1X21vZF9wYXJhbXMKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsXzM5NDVfY2ZnIGl3bDM5NDVfYWJnX2NmZyA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXdsX2NmZyBpd2wzOTQ1X2FiZ19jZmcgPSB7CiAJLm5hbWUgPSAiMzk0NUFCRyIsCiAJLmZ3X25hbWVfcHJlID0gSVdMMzk0NV9GV19QUkUsCiAJLnVjb2RlX2FwaV9tYXggPSBJV0wzOTQ1X1VDT0RFX0FQSV9NQVgsCiAJLnVjb2RlX2FwaV9taW4gPSBJV0wzOTQ1X1VDT0RFX0FQSV9NSU4sCiAJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCisJLmVlcHJvbV9zaXplID0gSVdMMzk0NV9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTiwKKwkub3BzID0gJml3bDM5NDVfb3BzLAorCS5tb2RfcGFyYW1zID0gJml3bDM5NDVfbW9kX3BhcmFtcwogfTsKIAogc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCmluZGV4IDJjMGRkYzUuLmFiN2FhZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDMsMTEgKzQzLDEzIEBACiAvKiBIYXJkd2FyZSBzcGVjaWZpYyBmaWxlIGRlZmluZXMgdGhlIFBDSSBJRHMgdGFibGUgZm9yIHRoYXQgaGFyZHdhcmUgbW9kdWxlICovCiBleHRlcm4gc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdOwogCi0jZGVmaW5lIERSVl9OQU1FCSJpd2wzOTQ1IgogI2luY2x1ZGUgIml3bC1jc3IuaCIKICNpbmNsdWRlICJpd2wtcHJwaC5oIgorI2luY2x1ZGUgIml3bC1maC5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LWh3LmgiCi0jaW5jbHVkZSAiaXdsLTM5NDUtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtZGVidWcuaCIKKyNpbmNsdWRlICJpd2wtcG93ZXIuaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUtbGVkLmgiCiAKIC8qIEhpZ2hlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCkBAIC03NCw4ICs3Niw3IEBACiAjZGVmaW5lIElXTF9OT0lTRV9NRUFTX05PVF9BVkFJTEFCTEUgKC0xMjcpCiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzIGFjY2Vzc2libGUgZnJvbSBpd2wtKi5jICovCi1leHRlcm4gaW50IGl3bDM5NDVfcGFyYW1faHdjcnlwdG87Ci1leHRlcm4gaW50IGl3bDM5NDVfcGFyYW1fcXVldWVzX251bTsKK2V4dGVybiBzdHJ1Y3QgaXdsX21vZF9wYXJhbXMgaXdsMzk0NV9tb2RfcGFyYW1zOwogCiBzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdiB7CiAJc3RydWN0IGl3bDM5NDVfcnNfc3RhICpyc19zdGE7CkBAIC05NSw3ICs5Niw2IEBACiAgKiBlbHNlIFJUUyBmb3IgZGF0YS9tYW5hZ2VtZW50IGZyYW1lcyB3aGVyZSBNUERVIGlzIGxhcmdlcgogICogICB0aGFuIFJUUyB2YWx1ZS4KICAqLwotI2RlZmluZSBJV0xfUlhfQlVGX1NJWkUgICAgICAgICAgIDMwMDBVCiAjZGVmaW5lIERFRkFVTFRfUlRTX1RIUkVTSE9MRCAgICAgMjM0N1UKICNkZWZpbmUgTUlOX1JUU19USFJFU0hPTEQgICAgICAgICAwVQogI2RlZmluZSBNQVhfUlRTX1RIUkVTSE9MRCAgICAgICAgIDIzNDdVCkBAIC0xMDUsMTM2ICsxMDUsNyBAQAogI2RlZmluZQlERUZBVUxUX1NIT1JUX1JFVFJZX0xJTUlUIDdVCiAjZGVmaW5lCURFRkFVTFRfTE9OR19SRVRSWV9MSU1JVCAgNFUKIAotc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciB7Ci0JZG1hX2FkZHJfdCBkbWFfYWRkcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KLS8qCi0gKiBHZW5lcmljIHF1ZXVlIHN0cnVjdHVyZQotICoKLSAqIENvbnRhaW5zIGNvbW1vbiBkYXRhIGZvciBSeCBhbmQgVHggcXVldWVzCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3F1ZXVlIHsKLQlpbnQgbl9iZDsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBCRHMgaW4gdGhpcyBxdWV1ZSAqLwotCWludCB3cml0ZV9wdHI7ICAgICAgIC8qIDEtc3QgZW1wdHkgZW50cnkgKGluZGV4KSBob3N0X3cqLwotCWludCByZWFkX3B0cjsgICAgICAgICAvKiBsYXN0IHVzZWQgZW50cnkgKGluZGV4KSBob3N0X3IqLwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7ICAgLyogcGh5c2ljYWwgYWRkciBmb3IgQkQncyAqLwotCWludCBuX3dpbmRvdzsJICAgICAgIC8qIHNhZmUgcXVldWUgd2luZG93ICovCi0JdTMyIGlkOwotCWludCBsb3dfbWFyazsJICAgICAgIC8qIGxvdyB3YXRlcm1hcmssIHJlc3VtZSBxdWV1ZSBpZiBmcmVlCi0JCQkJKiBzcGFjZSBtb3JlIHRoYW4gdGhpcyAqLwotCWludCBoaWdoX21hcms7ICAgICAgICAgLyogaGlnaCB3YXRlcm1hcmssIHN0b3AgcXVldWUgaWYgZnJlZQotCQkJCSogc3BhY2UgbGVzcyB0aGFuIHRoaXMgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1pbnQgaXdsMzk0NV9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSk7Ci1pbnQgaXdsMzk0NV94Ml9xdWV1ZV91c2VkKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLCBpbnQgaSk7Ci0KLSNkZWZpbmUgTUFYX05VTV9PRl9UQlMgICAgICAgICAgKDIwKQotCi0vKiBPbmUgZm9yIGVhY2ggVEZEICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9pbmZvIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiW01BWF9OVU1fT0ZfVEJTXTsKLX07Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgLSBUeCBRdWV1ZSBmb3IgRE1BCi0gKiBAcTogZ2VuZXJpYyBSeC9UeCBxdWV1ZSBkZXNjcmlwdG9yCi0gKiBAYmQ6IGJhc2Ugb2YgY2lyY3VsYXIgYnVmZmVyIG9mIFRGRHMKLSAqIEBjbWQ6IGFycmF5IG9mIGNvbW1hbmQvVHggYnVmZmVycwotICogQGRtYV9hZGRyX2NtZDogcGh5c2ljYWwgYWRkcmVzcyBvZiBjbWQvdHggYnVmZmVyIGFycmF5Ci0gKiBAdHhiOiBhcnJheSBvZiBwZXItVEZEIGRyaXZlciBkYXRhCi0gKiBAbmVlZF91cGRhdGU6IGluZGljYXRlcyBuZWVkIHRvIHVwZGF0ZSByZWFkL3dyaXRlIGluZGV4Ci0gKgotICogQSBUeCBxdWV1ZSBjb25zaXN0cyBvZiBjaXJjdWxhciBidWZmZXIgb2YgQkRzIChhLmsuYS4gVEZEcywgdHJhbnNtaXQgZnJhbWUKLSAqIGRlc2NyaXB0b3JzKSBhbmQgcmVxdWlyZWQgbG9ja2luZyBzdHJ1Y3R1cmVzLgotICovCi1zdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSB7Ci0Jc3RydWN0IGl3bDM5NDVfcXVldWUgcTsKLQlzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUgKmJkOwotCXN0cnVjdCBpd2wzOTQ1X2NtZCAqY21kOwotCWRtYV9hZGRyX3QgZG1hX2FkZHJfY21kOwotCXN0cnVjdCBpd2wzOTQ1X3R4X2luZm8gKnR4YjsKLQlpbnQgbmVlZF91cGRhdGU7Ci0JaW50IGFjdGl2ZTsKLX07Ci0KLSNkZWZpbmUgSVdMX05VTV9TQ0FOX1JBVEVTICAgICAgICAgKDIpCi0KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfdGdkX2luZm8gewotCXU4IHR5cGU7Ci0JczggbWF4X3Bvd2VyOwotfTsKLQotc3RydWN0IGl3bDM5NDVfY2hhbm5lbF90Z2hfaW5mbyB7Ci0JczY0IGxhc3RfcmFkYXJfdGltZTsKLX07Ci0KLS8qIGN1cnJlbnQgVHggcG93ZXIgdmFsdWVzIHRvIHVzZSwgb25lIGZvciBlYWNoIHJhdGUgZm9yIGVhY2ggY2hhbm5lbC4KLSAqIHJlcXVlc3RlZCBwb3dlciBpcyBsaW1pdGVkIGJ5OgotICogLS0gcmVndWxhdG9yeSBFRVBST00gbGltaXRzIGZvciB0aGlzIGNoYW5uZWwKLSAqIC0tIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAoY2xpcC1wb3dlcnMpCi0gKiAtLSBzcGVjdHJ1bSBtYW5hZ2VtZW50Ci0gKiAtLSB1c2VyIHByZWZlcmVuY2UgKGUuZy4gaXdjb25maWcpCi0gKiB3aGVuIHJlcXVlc3RlZCBwb3dlciBpcyBzZXQsIGJhc2UgcG93ZXIgaW5kZXggbXVzdCBhbHNvIGJlIHNldC4gKi8KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfcG93ZXJfaW5mbyB7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwkvKiBhY3R1YWwgcmFkaW8gYW5kIERTUCBnYWluIHNldHRpbmdzICovCi0JczggcG93ZXJfdGFibGVfaW5kZXg7CS8qIGFjdHVhbCAoY29tcGVuc3QnZCkgaW5kZXggaW50byBnYWluIHRhYmxlICovCi0JczggYmFzZV9wb3dlcl9pbmRleDsJLyogZ2FpbiBpbmRleCBmb3IgcG93ZXIgYXQgZmFjdG9yeSB0ZW1wLiAqLwotCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogcG93ZXIgKGRCbSkgcmVxdWVzdGVkIGZvciB0aGlzIGNobmwvcmF0ZSAqLwotfTsKLQotLyogY3VycmVudCBzY2FuIFR4IHBvd2VyIHZhbHVlcyB0byB1c2UsIG9uZSBmb3IgZWFjaCBzY2FuIHJhdGUgZm9yIGVhY2gKLSAqIGNoYW5uZWwuICovCi1zdHJ1Y3QgaXdsMzk0NV9zY2FuX3Bvd2VyX2luZm8gewotCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsJLyogYWN0dWFsIHJhZGlvIGFuZCBEU1AgZ2FpbiBzZXR0aW5ncyAqLwotCXM4IHBvd2VyX3RhYmxlX2luZGV4OwkvKiBhY3R1YWwgKGNvbXBlbnN0J2QpIGluZGV4IGludG8gZ2FpbiB0YWJsZSAqLwotCXM4IHJlcXVlc3RlZF9wb3dlcjsJLyogc2NhbiBwd3IgKGRCbSkgcmVxdWVzdGVkIGZvciBjaG5sL3JhdGUgKi8KLX07Ci0KLS8qCi0gKiBPbmUgZm9yIGVhY2ggY2hhbm5lbCwgaG9sZHMgYWxsIGNoYW5uZWwgc2V0dXAgZGF0YQotICogU29tZSBvZiB0aGUgZmllbGRzIChlLmcuIGVlcHJvbSBhbmQgZmxhZ3MvbWF4X3Bvd2VyX2F2ZykgYXJlIHJlZHVuZGFudAotICogICAgIHdpdGggb25lIGFub3RoZXIhCi0gKi8KLSNkZWZpbmUgSVdMNDk2NV9NQVhfUkFURSAoMzMpCi0KLXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyB7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF90Z2RfaW5mbyB0Z2Q7Ci0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF90Z2hfaW5mbyB0Z2g7Ci0Jc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwgZWVwcm9tOwkvKiBFRVBST00gcmVndWxhdG9yeSBsaW1pdCAqLwotCXN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsIGZhdF9lZXByb207CS8qIEVFUFJPTSByZWd1bGF0b3J5IGxpbWl0IGZvcgotCQkJCQkJICogRkFUIGNoYW5uZWwgKi8KLQotCXU4IGNoYW5uZWw7CSAgLyogY2hhbm5lbCBudW1iZXIgKi8KLQl1OCBmbGFnczsJICAvKiBmbGFncyBjb3BpZWQgZnJvbSBFRVBST00gKi8KLQlzOCBtYXhfcG93ZXJfYXZnOyAvKiAoZEJtKSByZWd1bC4gZWVwcm9tLCBub3JtYWwgVHgsIGFueSByYXRlICovCi0JczggY3Vycl90eHBvdzsJICAvKiAoZEJtKSByZWd1bGF0b3J5L3NwZWN0cnVtL3VzZXIgKG5vdCBoL3cpICovCi0JczggbWluX3Bvd2VyOwkgIC8qIGFsd2F5cyAwICovCi0Jczggc2Nhbl9wb3dlcjsJICAvKiAoZEJtKSByZWd1bC4gZWVwcm9tLCBkaXJlY3Qgc2NhbnMsIGFueSByYXRlICovCi0KLQl1OCBncm91cF9pbmRleDsJICAvKiAwLTQsIG1hcHMgY2hhbm5lbCB0byBncm91cDEvMi8zLzQvNSAqLwotCXU4IGJhbmRfaW5kZXg7CSAgLyogMC00LCBtYXBzIGNoYW5uZWwgdG8gYmFuZDEvMi8zLzQvNSAqLwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQotCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoICJub3JtYWwiIGRhdGEgVHggcmF0ZS4KLQkgKiBUaGVzZSBpbmNsdWRlLCBpbiBhZGRpdGlvbiB0byBSRiBhbmQgRFNQIGdhaW4sIGEgZmV3IGZpZWxkcyBmb3IKLQkgKiAgIHJlbWVtYmVyaW5nL21vZGlmeWluZyBnYWluIHNldHRpbmdzIChpbmRleGVzKS4gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gcG93ZXJfaW5mb1tJV0w0OTY1X01BWF9SQVRFXTsKLQotCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoIHNjYW4gcmF0ZSwgZm9yIGRpcmVjdGVkIHNjYW5zLiAqLwotCXN0cnVjdCBpd2wzOTQ1X3NjYW5fcG93ZXJfaW5mbyBzY2FuX3B3cl9pbmZvW0lXTF9OVU1fU0NBTl9SQVRFU107Ci19OwotCi1zdHJ1Y3QgaXdsMzk0NV9jbGlwX2dyb3VwIHsKLQkvKiBtYXhpbXVtIHBvd2VyIGxldmVsIHRvIHByZXZlbnQgY2xpcHBpbmcgZm9yIGVhY2ggcmF0ZSwgZGVyaXZlZCBieQotCSAqICAgdXMgZnJvbSB0aGlzIGJhbmQncyBzYXR1cmF0aW9uIHBvd2VyIGluIEVFUFJPTSAqLwotCWNvbnN0IHM4IGNsaXBfcG93ZXJzW0lXTF9NQVhfUkFURVNdOwotfTsKLQotI2luY2x1ZGUgIml3bC0zOTQ1LXJzLmgiCisjaW5jbHVkZSAiaXdsLWFnbi1ycy5oIgogCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMAkwCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMQkxCkBAIC0yNDcsMzMgKzExOCw2IEBACiAvKiBNaW5pbXVtIG51bWJlciBvZiBxdWV1ZXMuIE1BWF9OVU0gaXMgZGVmaW5lZCBpbiBodyBzcGVjaWZpYyBmaWxlcyAqLwogI2RlZmluZSBJV0xfTUlOX05VTV9RVUVVRVMJNAogCi0vKiBQb3dlciBtYW5hZ2VtZW50IChub3QgVHggcG93ZXIpIHN0cnVjdHVyZXMgKi8KLQotc3RydWN0IGl3bDM5NDVfcG93ZXJfdmVjX2VudHJ5IHsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCBjbWQ7Ci0JdTggbm9fZHRpbTsKLX07Ci0jZGVmaW5lIElXTF9QT1dFUl9SQU5HRV8wICAoMCkKLSNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzEgICgxKQotCi0jZGVmaW5lIElXTF9QT1dFUl9NT0RFX0NBTQkweDAwCS8qIENvbnRpbnVvdXNseSBBd2FyZSBNb2RlLCBhbHdheXMgb24gKi8KLSNkZWZpbmUgSVdMX1BPV0VSX0lOREVYXzMJMHgwMwotI2RlZmluZSBJV0xfUE9XRVJfSU5ERVhfNQkweDA1Ci0jZGVmaW5lIElXTF9QT1dFUl9BQwkJMHgwNgotI2RlZmluZSBJV0xfUE9XRVJfQkFUVEVSWQkweDA3Ci0jZGVmaW5lIElXTF9QT1dFUl9MSU1JVAkJMHgwNwotI2RlZmluZSBJV0xfUE9XRVJfTUFTSwkJMHgwRgotI2RlZmluZSBJV0xfUE9XRVJfRU5BQkxFRAkweDEwCi0jZGVmaW5lIElXTF9QT1dFUl9MRVZFTCh4KQkoKHgpICYgSVdMX1BPV0VSX01BU0spCi0KLXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX21nciB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMFtJV0xfUE9XRVJfQUNdOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSBwd3JfcmFuZ2VfMVtJV0xfUE9XRVJfQUNdOwotCXU4IGFjdGl2ZV9pbmRleDsKLQl1MzIgZHRpbV92YWw7Ci19OwotCiAjZGVmaW5lIElFRUU4MDIxMV9EQVRBX0xFTiAgICAgICAgICAgICAgMjMwNAogI2RlZmluZSBJRUVFODAyMTFfNEFERFJfTEVOICAgICAgICAgICAgIDMwCiAjZGVmaW5lIElFRUU4MDIxMV9ITEVOICAgICAgICAgICAgICAgICAgKElFRUU4MDIxMV80QUREUl9MRU4pCkBAIC0yODksODEgKzEzMywxMCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLSNkZWZpbmUgU0VRX1RPX1FVRVVFKHgpICAoKHggPj4gOCkgJiAweGJmKQotI2RlZmluZSBRVUVVRV9UT19TRVEoeCkgICgoeCAmIDB4YmYpIDw8IDgpCi0jZGVmaW5lIFNFUV9UT19JTkRFWCh4KSAoKHU4KSh4ICYgMHhmZikpCi0jZGVmaW5lIElOREVYX1RPX1NFUSh4KSAoKHU4KSh4ICYgMHhmZikpCi0jZGVmaW5lIFNFUV9IVUdFX0ZSQU1FICAoMHg0MDAwKQotI2RlZmluZSBTRVFfUlhfRlJBTUUgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNigweDgwMDApCiAjZGVmaW5lIFNFUV9UT19TTihzZXEpICgoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQpCiAjZGVmaW5lIFNOX1RPX1NFUShzc24pICgoKHNzbikgPDwgNCkgJiBJRUVFODAyMTFfU0NUTF9TRVEpCiAjZGVmaW5lIE1BWF9TTiAoKElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKIAotZW51bSB7Ci0JLyogQ01EX1NJWkVfTk9STUFMID0gMCwgKi8KLQlDTURfU0laRV9IVUdFID0gKDEgPDwgMCksCi0JLyogQ01EX1NZTkMgPSAwLCAqLwotCUNNRF9BU1lOQyA9ICgxIDw8IDEpLAotCS8qIENNRF9OT19TS0IgPSAwLCAqLwotCUNNRF9XQU5UX1NLQiA9ICgxIDw8IDIpLAotfTsKLQotc3RydWN0IGl3bDM5NDVfY21kOwotc3RydWN0IGl3bDM5NDVfcHJpdjsKLQotc3RydWN0IGl3bDM5NDVfY21kX21ldGEgewotCXN0cnVjdCBpd2wzOTQ1X2NtZF9tZXRhICpzb3VyY2U7Ci0JdW5pb24gewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQlpbnQgKCpjYWxsYmFjaykoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdTsKLQotCS8qIFRoZSBDTURfU0laRV9IVUdFIGZsYWcgYml0IGluZGljYXRlcyB0aGF0IHRoZSBjb21tYW5kCi0JICogc3RydWN0dXJlIGlzIHN0b3JlZCBhdCB0aGUgZW5kIG9mIHRoZSBzaGFyZWQgcXVldWUgbWVtb3J5LiAqLwotCXUzMiBmbGFnczsKLQotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogc3RydWN0IGl3bDM5NDVfY21kCi0gKgotICogRm9yIGFsbG9jYXRpb24gb2YgdGhlIGNvbW1hbmQgYW5kIHR4IHF1ZXVlcywgdGhpcyBlc3RhYmxpc2hlcyB0aGUgb3ZlcmFsbAotICogc2l6ZSBvZiB0aGUgbGFyZ2VzdCBjb21tYW5kIHdlIHNlbmQgdG8gdUNvZGUsIGV4Y2VwdCBmb3IgYSBzY2FuIGNvbW1hbmQKLSAqICh3aGljaCBpcyByZWxhdGl2ZWx5IGh1Z2U7IHNwYWNlIGlzIGFsbG9jYXRlZCBzZXBhcmF0ZWx5KS4KLSAqLwotc3RydWN0IGl3bDM5NDVfY21kIHsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWRfbWV0YSBtZXRhOwotCXN0cnVjdCBpd2wzOTQ1X2NtZF9oZWFkZXIgaGRyOwotCXVuaW9uIHsKLQkJc3RydWN0IGl3bDM5NDVfYWRkc3RhX2NtZCBhZGRzdGE7Ci0JCXN0cnVjdCBpd2wzOTQ1X2xlZF9jbWQgbGVkOwotCQl1MzIgZmxhZ3M7Ci0JCXU4IHZhbDg7Ci0JCXUxNiB2YWwxNjsKLQkJdTMyIHZhbDMyOwotCQlzdHJ1Y3QgaXdsMzk0NV9idF9jbWQgYnQ7Ci0JCXN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQgcnhvbl90aW1lOwotCQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCBwb3dlcnRhYmxlOwotCQlzdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQgcW9zcGFyYW07Ci0JCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCB0eDsKLQkJc3RydWN0IGl3bDM5NDVfdHhfYmVhY29uX2NtZCB0eF9iZWFjb247Ci0JCXN0cnVjdCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIHJ4b25fYXNzb2M7Ci0JCXU4ICppbmRpcmVjdDsKLQkJdTggcGF5bG9hZFszNjBdOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNtZDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCB7Ci0JdTggaWQ7Ci0JdTE2IGxlbjsKLQlzdHJ1Y3QgaXdsMzk0NV9jbWRfbWV0YSBtZXRhOwotCWNvbnN0IHZvaWQgKmRhdGE7Ci19OwotCi0jZGVmaW5lIFRGRF9NQVhfUEFZTE9BRF9TSVpFIChzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kKSAtIFwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9jbWRfbWV0YSkpCi0KIC8qCiAgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwogICovCkBAIC0zNzQsMzMgKzE0Nyw2IEBACiAjZGVmaW5lIFNVUF9SQVRFXzExQl9NQVhfTlVNX0NIQU5ORUxTICA0CiAjZGVmaW5lIFNVUF9SQVRFXzExR19NQVhfTlVNX0NIQU5ORUxTICAxMgogCi0vKioKLSAqIHN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlIC0gUnggcXVldWUKLSAqIEBwcm9jZXNzZWQ6IEludGVybmFsIGluZGV4IHRvIGxhc3QgaGFuZGxlZCBSeCBwYWNrZXQKLSAqIEByZWFkOiBTaGFyZWQgaW5kZXggdG8gbmV3ZXN0IGF2YWlsYWJsZSBSeCBidWZmZXIKLSAqIEB3cml0ZTogU2hhcmVkIGluZGV4IHRvIG9sZGVzdCB3cml0dGVuIFJ4IHBhY2tldAotICogQGZyZWVfY291bnQ6IE51bWJlciBvZiBwcmUtYWxsb2NhdGVkIGJ1ZmZlcnMgaW4gcnhfZnJlZQotICogQHJ4X2ZyZWU6IGxpc3Qgb2YgZnJlZSBTS0JzIGZvciB1c2UKLSAqIEByeF91c2VkOiBMaXN0IG9mIFJ4IGJ1ZmZlcnMgd2l0aCBubyBTS0IKLSAqIEBuZWVkX3VwZGF0ZTogZmxhZyB0byBpbmRpY2F0ZSB3ZSBuZWVkIHRvIHVwZGF0ZSByZWFkL3dyaXRlIGluZGV4Ci0gKgotICogTk9URTogIHJ4X2ZyZWUgYW5kIHJ4X3VzZWQgYXJlIHVzZWQgYXMgYSBGSUZPIGZvciBpd2wzOTQ1X3J4X21lbV9idWZmZXJzCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlIHsKLQlfX2xlMzIgKmJkOwotCWRtYV9hZGRyX3QgZG1hX2FkZHI7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciBwb29sW1JYX1FVRVVFX1NJWkUgKyBSWF9GUkVFX0JVRkZFUlNdOwotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnF1ZXVlW1JYX1FVRVVFX1NJWkVdOwotCXUzMiBwcm9jZXNzZWQ7Ci0JdTMyIHJlYWQ7Ci0JdTMyIHdyaXRlOwotCXUzMiBmcmVlX2NvdW50OwotCXN0cnVjdCBsaXN0X2hlYWQgcnhfZnJlZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X3VzZWQ7Ci0JaW50IG5lZWRfdXBkYXRlOwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KICNkZWZpbmUgSVdMX1NVUFBPUlRFRF9SQVRFU19JRV9MRU4gICAgICAgICA4CiAKICNkZWZpbmUgU0NBTl9JTlRFUlZBTCAxMDAKQEAgLTQzMCw4NyArMTc2LDkgQEAKICNkZWZpbmUgSVdMX0lOVkFMSURfUkFURSAgICAgMHhGRgogI2RlZmluZSBJV0xfSU5WQUxJRF9WQUxVRSAgICAtMQogCi1zdHJ1Y3QgaXdsMzk0NV90aWRfZGF0YSB7Ci0JdTE2IHNlcV9udW1iZXI7Ci19OwotCi1zdHJ1Y3QgaXdsMzk0NV9od19rZXkgewotCWVudW0gaWVlZTgwMjExX2tleV9hbGcgYWxnOwotCWludCBrZXlsZW47Ci0JdTgga2V5WzMyXTsKLX07Ci0KLXVuaW9uIGl3bDM5NDVfaHRfcmF0ZV9zdXBwIHsKLQl1MTYgcmF0ZXM7Ci0Jc3RydWN0IHsKLQkJdTggc2lzb19yYXRlOwotCQl1OCBtaW1vX3JhdGU7Ci0JfTsKLX07Ci0KLXVuaW9uIGl3bDM5NDVfcW9zX2NhcGFiaXR5IHsKLQlzdHJ1Y3QgewotCQl1OCBlZGNhX2NvdW50OjQ7CS8qIGJpdCAwLTMgKi8KLQkJdTggcV9hY2s6MTsJCS8qIGJpdCA0ICovCi0JCXU4IHF1ZXVlX3JlcXVlc3Q6MTsJLyogYml0IDUgKi8KLQkJdTggdHhvcF9yZXF1ZXN0OjE7CS8qIGJpdCA2ICovCi0JCXU4IHJlc2VydmVkOjE7CQkvKiBiaXQgNyAqLwotCX0gcV9BUDsKLQlzdHJ1Y3QgewotCQl1OCBhY3ZvX0FQU0Q6MTsJCS8qIGJpdCAwICovCi0JCXU4IGFjdmlfQVBTRDoxOwkJLyogYml0IDEgKi8KLQkJdTggYWNfYmtfQVBTRDoxOwkvKiBiaXQgMiAqLwotCQl1OCBhY19iZV9BUFNEOjE7CS8qIGJpdCAzICovCi0JCXU4IHFfYWNrOjE7CQkvKiBiaXQgNCAqLwotCQl1OCBtYXhfbGVuOjI7CQkvKiBiaXQgNS02ICovCi0JCXU4IG1vcmVfZGF0YV9hY2s6MTsJLyogYml0IDcgKi8KLQl9IHFfU1RBOwotCXU4IHZhbDsKLX07Ci0KLS8qIFFvUyBzdHJ1Y3R1cmVzICovCi1zdHJ1Y3QgaXdsMzk0NV9xb3NfaW5mbyB7Ci0JaW50IHFvc19hY3RpdmU7Ci0JdW5pb24gaXdsMzk0NV9xb3NfY2FwYWJpdHkgcW9zX2NhcDsKLQlzdHJ1Y3QgaXdsMzk0NV9xb3NwYXJhbV9jbWQgZGVmX3Fvc19wYXJtOwotfTsKLQogI2RlZmluZSBTVEFfUFNfU1RBVFVTX1dBS0UgICAgICAgICAgICAgMAogI2RlZmluZSBTVEFfUFNfU1RBVFVTX1NMRUVQICAgICAgICAgICAgMQogCi1zdHJ1Y3QgaXdsMzk0NV9zdGF0aW9uX2VudHJ5IHsKLQlzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kIHN0YTsKLQlzdHJ1Y3QgaXdsMzk0NV90aWRfZGF0YSB0aWRbTUFYX1RJRF9DT1VOVF07Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJdTggcmF0ZTsKLQkJCXU4IGZsYWdzOwotCQl9IHM7Ci0JCXUxNiByYXRlX25fZmxhZ3M7Ci0JfSBjdXJyZW50X3JhdGU7Ci0JdTggdXNlZDsKLQl1OCBwc19zdGF0dXM7Ci0Jc3RydWN0IGl3bDM5NDVfaHdfa2V5IGtleWluZm87Ci19OwotCi0vKiBvbmUgZm9yIGVhY2ggdUNvZGUgaW1hZ2UgKGluc3QvZGF0YSwgYm9vdC9pbml0L3J1bnRpbWUpICovCi1zdHJ1Y3QgZndfZGVzYyB7Ci0Jdm9pZCAqdl9hZGRyOwkJLyogYWNjZXNzIGJ5IGRyaXZlciAqLwotCWRtYV9hZGRyX3QgcF9hZGRyOwkvKiBhY2Nlc3MgYnkgY2FyZCdzIGJ1c21hc3RlciBETUEgKi8KLQl1MzIgbGVuOwkJLyogYnl0ZXMgKi8KLX07Ci0KLS8qIHVDb2RlIGZpbGUgbGF5b3V0ICovCi1zdHJ1Y3QgaXdsMzk0NV91Y29kZSB7Ci0JX19sZTMyIHZlcjsJCS8qIG1ham9yL21pbm9yL0FQSS9zZXJpYWwgKi8KLQlfX2xlMzIgaW5zdF9zaXplOwkvKiBieXRlcyBvZiBydW50aW1lIGluc3RydWN0aW9ucyAqLwotCV9fbGUzMiBkYXRhX3NpemU7CS8qIGJ5dGVzIG9mIHJ1bnRpbWUgZGF0YSAqLwotCV9fbGUzMiBpbml0X3NpemU7CS8qIGJ5dGVzIG9mIGluaXRpYWxpemF0aW9uIGluc3RydWN0aW9ucyAqLwotCV9fbGUzMiBpbml0X2RhdGFfc2l6ZTsJLyogYnl0ZXMgb2YgaW5pdGlhbGl6YXRpb24gZGF0YSAqLwotCV9fbGUzMiBib290X3NpemU7CS8qIGJ5dGVzIG9mIGJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKi8KLQl1OCBkYXRhWzBdOwkJLyogZGF0YSBpbiBzYW1lIG9yZGVyIGFzICJzaXplIiBlbGVtZW50cyAqLwotfTsKLQogc3RydWN0IGl3bDM5NDVfaWJzc19zZXEgewogCXU4IG1hY1tFVEhfQUxFTl07CiAJdTE2IHNlcV9udW07CkBAIC01MTksMzQgKzE4Nyw2IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAotLyoqCi0gKiBzdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbwotICogQG1heF90eHFfbnVtOiBNYXggIyBUeCBxdWV1ZXMgc3VwcG9ydGVkCi0gKiBAdHhfY21kX2xlbjogU2l6ZSBvZiBUeCBjb21tYW5kIChidXQgbm90IGluY2x1ZGluZyBmcmFtZSBpdHNlbGYpCi0gKiBAdHhfYW50X251bTogTnVtYmVyIG9mIFRYIGFudGVubmFzCi0gKiBAbWF4X3J4cV9zaXplOiBNYXggIyBSeCBmcmFtZXMgaW4gUnggcXVldWUgKG11c3QgYmUgcG93ZXItb2YtMikKLSAqIEByeF9idWZfc2l6ZToKLSAqIEBtYXhfcGt0X3NpemU6Ci0gKiBAbWF4X3J4cV9sb2c6IExvZy1iYXNlLTIgb2YgbWF4X3J4cV9zaXplCi0gKiBAbWF4X3N0YXRpb25zOgotICogQGJjYXN0X3N0YV9pZDoKLSAqIEBzaGFyZWRfdmlydDogUG9pbnRlciB0byBkcml2ZXIvdUNvZGUgc2hhcmVkIFR4IEJ5dGUgQ291bnRzIGFuZCBSeCBzdGF0dXMKLSAqIEBzaGFyZWRfcGh5czogUGh5c2ljYWwgUG9pbnRlciB0byBUeCBCeXRlIENvdW50cyBhbmQgUnggc3RhdHVzCi0gKi8KLXN0cnVjdCBpd2wzOTQ1X2RyaXZlcl9od19pbmZvIHsKLQl1MTYgbWF4X3R4cV9udW07Ci0JdTE2IHR4X2NtZF9sZW47Ci0JdTE2IHR4X2FudF9udW07Ci0JdTE2IG1heF9yeHFfc2l6ZTsKLQl1MzIgcnhfYnVmX3NpemU7Ci0JdTMyIG1heF9wa3Rfc2l6ZTsKLQl1MTYgbWF4X3J4cV9sb2c7Ci0JdTggIG1heF9zdGF0aW9uczsKLQl1OCAgYmNhc3Rfc3RhX2lkOwotCXZvaWQgKnNoYXJlZF92aXJ0OwotCWRtYV9hZGRyX3Qgc2hhcmVkX3BoeXM7Ci19OwotCiAjZGVmaW5lIElXTF9SWF9IRFIoeCkgKChzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9oZHIgKikoXAogCQkgICAgICAgeC0+dS5yeF9mcmFtZS5zdGF0cy5wYXlsb2FkICsgXAogCQkgICAgICAgeC0+dS5yeF9mcmFtZS5zdGF0cy5waHlfY291bnQpKQpAQCAtNTY0LDQwICsyMDQsMzAgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kOwotZXh0ZXJuIGludCBpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK2V4dGVybiBpbnQgaXdsMzk0NV9zZW5kX2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQlzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kICpzdGEsIHU4IGZsYWdzKTsKLWV4dGVybiB1OCBpd2wzOTQ1X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCwKK2V4dGVybiB1OCBpd2wzOTQ1X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmJzc2lkLAogCQkJICBpbnQgaXNfYXAsIHU4IGZsYWdzKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9lZXByb21faW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfcnhfcXVldWVfcmVzZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2VlcHJvbV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bDM5NDVfY2FsY19kYl9mcm9tX3JhdGlvKGludCBzaWdfcmF0aW8pOwogZXh0ZXJuIGludCBpd2wzOTQ1X2NhbGNfc2lnX3F1YWwoaW50IHJzc2lfZGJtLCBpbnQgbm9pc2VfZGJtKTsKLWV4dGVybiBpbnQgaXdsMzk0NV90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEsIGludCBjb3VudCwgdTMyIGlkKTsKK2V4dGVybiBpbnQgaXdsMzk0NV90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLCBpbnQgY291bnQsIHUzMiBpZCk7CiBleHRlcm4gdm9pZCBpd2wzOTQ1X3J4X3JlcGxlbmlzaCh2b2lkICpkYXRhKTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfdHhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9zZW5kX2NtZF9wZHUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTggaWQsIHUxNiBsZW4sCitleHRlcm4gdm9pZCBpd2wzOTQ1X3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworZXh0ZXJuIGludCBpd2wzOTQ1X3NlbmRfY21kX3BkdShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGlkLCB1MTYgbGVuLAogCQkJICAgIGNvbnN0IHZvaWQgKmRhdGEpOwotZXh0ZXJuIGludCBfX211c3RfY2hlY2sgaXdsMzk0NV9zZW5kX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCAqY21kKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorZXh0ZXJuIGludCBfX211c3RfY2hlY2sgaXdsMzk0NV9zZW5kX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJCSBzdHJ1Y3QgaXdsX2hvc3RfY21kICpjbWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBpd2wzOTQ1X2ZpbGxfYmVhY29uX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixpbnQgbGVmdCk7Ci1leHRlcm4gaW50IGl3bDM5NDVfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnEpOwotZXh0ZXJuIGludCBpd2wzOTQ1X3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICB1MzIgZGVjcnlwdF9yZXMsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXRzKTsKLWV4dGVybiBjb25zdCB1OCBpd2wzOTQ1X2Jyb2FkY2FzdF9hZGRyW0VUSF9BTEVOXTsKIAogLyoKICAqIEN1cnJlbnRseSB1c2VkIGJ5IGl3bC0zOTQ1LXJzLi4uIGxvb2sgYXQgcmVzdHJ1Y3R1cmluZyBzbyB0aGF0IGl0IGRvZXNuJ3QKICAqIGNhbGwgdGhpcy4uLiB0b2RvLi4uIGZpeCB0aGF0LgogKi8KLWV4dGVybiB1OCBpd2wzOTQ1X3N5bmNfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgc3RhX2lkLAorZXh0ZXJuIHU4IGl3bDM5NDVfc3luY19zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKIAkJCSAgIHUxNiB0eF9yYXRlLCB1OCBmbGFncyk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTYxNiwzNiArMjQ2LDM3IEBACiAgKiBpd2wzOTQ1X21hY18gICAgIDwtLSBtYWM4MDIxMSBjYWxsYmFjawogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19yeF9oYW5kbGVyX3NldHVwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19yeHFfc3RvcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19zZXRfaHdfc2V0dGluZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfc3RvcF9tYXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfaHdfdHhxX2N0eF9zdG9wKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X25pY19yZXNldChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdm9pZCAqdGZkLAotCQkJCQlkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4pOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19nZXRfdGVtcGVyYXR1cmUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBpd2wzOTQ1X2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3J4X2hhbmRsZXJfc2V0dXAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiB2b2lkIGl3bDM5NDVfaHdfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od19jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3J4cV9zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfbmljX3N0b3BfbWFzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9od190eHFfY3R4X3N0b3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19uaWNfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkJCQkgICAgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuLAorCQkJCQkgICAgdTggcmVzZXQsIHU4IHBhZCk7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDM5NDVfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaXdsMzk0NV9od19nZXRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZSwgdTggcmF0ZSk7Ci1leHRlcm4gaW50IGl3bDM5NDVfaHdfZ2V0X3J4X3JlYWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwKK3ZvaWQgaXdsMzk0NV9od19idWlsZF90eF9jbWRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfY21kICpjbWQsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAogCQkJCSAgICAgaW50IHN0YV9pZCwgaW50IHR4X2lkKTsKLWV4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2VuZF90eHBvd2VyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3JlZ19zZXRfdHhwb3dlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzOCBwb3dlcik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKTsKLWV4dGVybiB2b2lkIGl3bDM5NDVfZGlzYWJsZV9ldmVudHMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gaW50IGl3bDQ5NjVfZ2V0X3RlbXBlcmF0dXJlKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X3JlZ19zZW5kX3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2V4dGVybiBpbnQgaXdsMzk0NV9od19yZWdfc2V0X3R4cG93ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzOCBwb3dlcik7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2h3X3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CitleHRlcm4gdm9pZCBpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gaW50IGl3bDQ5NjVfZ2V0X3RlbXBlcmF0dXJlKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qKgogICogaXdsMzk0NV9od19maW5kX3N0YXRpb24gLSBGaW5kIHN0YXRpb24gaWQgZm9yIGEgZ2l2ZW4gQlNTSUQKQEAgLTY1NSwzMDIgKzI4NiwyNiBAQAogICogbm90IHlldCBiZWVuIG1lcmdlZCBpbnRvIGEgc2luZ2xlIGNvbW1vbiBsYXllciBmb3IgbWFuYWdpbmcgdGhlCiAgKiBzdGF0aW9uIHRhYmxlcy4KICAqLwotZXh0ZXJuIHU4IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGNvbnN0IHU4ICpic3NpZCk7CitleHRlcm4gdTggaXdsMzk0NV9od19maW5kX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYnNzaWQpOwogCi1leHRlcm4gaW50IGl3bDM5NDVfaHdfY2hhbm5lbF9zd2l0Y2goc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpOworZXh0ZXJuIGludCBpd2wzOTQ1X2h3X2NoYW5uZWxfc3dpdGNoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IGNoYW5uZWwpOwogCiAvKgogICogRm9yd2FyZCBkZWNsYXJlIGl3bC0zOTQ1LmMgZnVuY3Rpb25zIGZvciBpd2wtYmFzZS5jCiAgKi8KLWV4dGVybiBfX2xlMzIgaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLWV4dGVybiBpbnQgaXdsMzk0NV9pbml0X2h3X3JhdGVfdGFibGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X3JlZ190eHBvd2VyX3BlcmlvZGljKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIGludCBpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOwotZXh0ZXJuIHU4IGl3bDM5NDVfc3luY19zdGEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IHN0YV9pZCwKK2V4dGVybiBfX2xlMzIgaXdsMzk0NV9nZXRfYW50ZW5uYV9mbGFncyhjb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X2luaXRfaHdfcmF0ZV90YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIHZvaWQgaXdsMzk0NV9yZWdfdHhwb3dlcl9wZXJpb2RpYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2wzOTQ1X3R4cG93ZXJfc2V0X2Zyb21fZWVwcm9tKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitleHRlcm4gdTggaXdsMzk0NV9zeW5jX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQsCiAJCSB1MTYgdHhfcmF0ZSwgdTggZmxhZ3MpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKml3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbygKKwljb25zdCBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgdTE2IGNoYW5uZWwpOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKK2V4dGVybiBpbnQgaXdsMzk0NV9yc19uZXh0X3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgcmF0ZSk7CiAKLWVudW0gewotCU1FQVNVUkVNRU5UX1JFQURZID0gKDEgPDwgMCksCi0JTUVBU1VSRU1FTlRfQUNUSVZFID0gKDEgPDwgMSksCi19OwotCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1JGS0lMTAotc3RydWN0IGl3bDM5NDVfcHJpdjsKLQotdm9pZCBpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci12b2lkIGl3bDM5NDVfcmZraWxsX3VucmVnaXN0ZXIoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdik7Ci1pbnQgaXdsMzk0NV9yZmtpbGxfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9yZmtpbGxfc2V0X2h3X3N0YXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaXdsMzk0NV9yZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7fQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9yZmtpbGxfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQotI2RlZmluZSBJV0xfTUFYX05VTV9RVUVVRVMgSVdMMzlfTUFYX05VTV9RVUVVRVMKLQotc3RydWN0IGl3bDM5NDVfcHJpdiB7Ci0KLQkvKiBpZWVlIGRldmljZSB1c2VkIGJ5IGdlbmVyaWMgaWVlZSBwcm9jZXNzaW5nIGNvZGUgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmllZWVfY2hhbm5lbHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICppZWVlX3JhdGVzOwotCXN0cnVjdCBpd2xfMzk0NV9jZmcgKmNmZzsgLyogZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KLQotCS8qIHRlbXBvcmFyeSBmcmFtZSBzdG9yYWdlIGxpc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfZnJhbWVzOwotCWludCBmcmFtZXNfY291bnQ7Ci0KLQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7Ci0JaW50IGFsbG9jX3J4Yl9za2I7Ci0KLQl2b2lkICgqcnhfaGFuZGxlcnNbUkVQTFlfTUFYXSkoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKTsKLQotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCS8qIHNwZWN0cnVtIG1lYXN1cmVtZW50IHJlcG9ydCBjYWNoaW5nICovCi0Jc3RydWN0IGl3bDM5NDVfc3BlY3RydW1fbm90aWZpY2F0aW9uIG1lYXN1cmVfcmVwb3J0OwotCXU4IG1lYXN1cmVtZW50X3N0YXR1czsKLSNlbmRpZgotCS8qIHVjb2RlIGJlYWNvbiB0aW1lICovCi0JdTMyIHVjb2RlX2JlYWNvbl90aW1lOwotCi0JLyogd2UgYWxsb2NhdGUgYXJyYXkgb2YgaXdsMzk0NV9jaGFubmVsX2luZm8gZm9yIE5JQydzIHZhbGlkIGNoYW5uZWxzLgotCSAqICAgIEFjY2VzcyB2aWEgY2hhbm5lbCAjIHVzaW5nIGluZGlyZWN0IGluZGV4IGFycmF5ICovCi0Jc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaGFubmVsX2luZm87CS8qIGNoYW5uZWwgaW5mbyBhcnJheSAqLwotCXU4IGNoYW5uZWxfY291bnQ7CS8qICMgb2YgY2hhbm5lbHMgKi8KLQotCS8qIGVhY2ggY2FsaWJyYXRpb24gY2hhbm5lbCBncm91cCBpbiB0aGUgRUVQUk9NIGhhcyBhIGRlcml2ZWQKLQkgKiBjbGlwIHNldHRpbmcgZm9yIGVhY2ggcmF0ZS4gKi8KLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jbGlwX2dyb3VwIGNsaXBfZ3JvdXBzWzVdOwotCi0JLyogdGhlcm1hbCBjYWxpYnJhdGlvbiAqLwotCXMzMiB0ZW1wZXJhdHVyZTsJLyogZGVncmVlcyBLZWx2aW4gKi8KLQlzMzIgbGFzdF90ZW1wZXJhdHVyZTsKLQotCS8qIFNjYW4gcmVsYXRlZCB2YXJpYWJsZXMgKi8KLQl1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbl9qaWZmaWVzOwotCXVuc2lnbmVkIGxvbmcgbmV4dF9zY2FuX2ppZmZpZXM7Ci0JdW5zaWduZWQgbG9uZyBzY2FuX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgc2Nhbl9wYXNzX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcgc2Nhbl9zdGFydF90c2Y7Ci0JaW50IHNjYW5fYmFuZHM7Ci0JaW50IG9uZV9kaXJlY3Rfc2NhbjsKLQl1OCBkaXJlY3Rfc3NpZF9sZW47Ci0JdTggZGlyZWN0X3NzaWRbSVdfRVNTSURfTUFYX1NJWkVdOwotCXN0cnVjdCBpd2wzOTQ1X3NjYW5fY21kICpzY2FuOwotCi0JLyogc3BpbmxvY2sgKi8KLQlzcGlubG9ja190IGxvY2s7CS8qIHByb3RlY3QgZ2VuZXJhbCBzaGFyZWQgZGF0YSAqLwotCXNwaW5sb2NrX3QgaGNtZF9sb2NrOwkvKiBwcm90ZWN0IGhjbWQgKi8KLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0KLQkvKiBiYXNpYyBwY2ktbmV0d29yayBkcml2ZXIgc3R1ZmYgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKLQotCS8qIHBjaSBoYXJkd2FyZSBhZGRyZXNzIHN1cHBvcnQgKi8KLQl2b2lkIF9faW9tZW0gKmh3X2Jhc2U7Ci0KLQkvKiB1Q29kZSBpbWFnZXMsIHNhdmUgdG8gcmVsb2FkIGluIGNhc2Ugb2YgZmFpbHVyZSAqLwotCXUzMiB1Y29kZV92ZXI7CQkJLyogdWNvZGUgdmVyc2lvbiwgY29weSBvZgotCQkJCQkgICBpd2wzOTQ1X3Vjb2RlLnZlciAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2NvZGU7CS8qIHJ1bnRpbWUgaW5zdCAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2RhdGE7CS8qIHJ1bnRpbWUgZGF0YSBvcmlnaW5hbCAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2RhdGFfYmFja3VwOwkvKiBydW50aW1lIGRhdGEgc2F2ZS9yZXN0b3JlICovCi0Jc3RydWN0IGZ3X2Rlc2MgdWNvZGVfaW5pdDsJLyogaW5pdGlhbGl6YXRpb24gaW5zdCAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2luaXRfZGF0YTsJLyogaW5pdGlhbGl6YXRpb24gZGF0YSAqLwotCXN0cnVjdCBmd19kZXNjIHVjb2RlX2Jvb3Q7CS8qIGJvb3RzdHJhcCBpbnN0ICovCi0KLQotCXN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQgcnhvbl90aW1pbmc7Ci0KLQkvKiBXZSBkZWNsYXJlIHRoaXMgY29uc3Qgc28gaXQgY2FuIG9ubHkgYmUKLQkgKiBjaGFuZ2VkIHZpYSBleHBsaWNpdCBjYXN0IHdpdGhpbiB0aGUKLQkgKiByb3V0aW5lcyB0aGF0IGFjdHVhbGx5IHVwZGF0ZSB0aGUgcGh5c2ljYWwKLQkgKiBoYXJkd2FyZSAqLwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kIGFjdGl2ZV9yeG9uOwotCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHN0YWdpbmdfcnhvbjsKLQotCWludCBlcnJvcl9yZWNvdmVyaW5nOwotCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHJlY292ZXJ5X3J4b247Ci0KLQkvKiAxc3QgcmVzcG9uc2VzIGZyb20gaW5pdGlhbGl6ZSBhbmQgcnVudGltZSB1Q29kZSBpbWFnZXMuCi0JICogNDk2NSdzIGluaXRpYWxpemUgYWxpdmUgcmVzcG9uc2UgY29udGFpbnMgc29tZSBjYWxpYnJhdGlvbiBkYXRhLiAqLwotCXN0cnVjdCBpd2wzOTQ1X2luaXRfYWxpdmVfcmVzcCBjYXJkX2FsaXZlX2luaXQ7Ci0Jc3RydWN0IGl3bDM5NDVfYWxpdmVfcmVzcCBjYXJkX2FsaXZlOwotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfUkZLSUxMCi0Jc3RydWN0IHJma2lsbCAqcmZraWxsOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9MRURTCi0Jc3RydWN0IGl3bDM5NDVfbGVkIGxlZFtJV0xfTEVEX1RSR19NQVhdOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9ibGlua190aW1lOwotCXU4IGxhc3RfYmxpbmtfcmF0ZTsKLQl1OCBhbGxvd19ibGlua2luZzsKLQl1bnNpZ25lZCBpbnQgcnh0eHBhY2tldHM7Ci0JdTY0IGxlZF90cHQ7Ci0jZW5kaWYKLQotCi0JdTE2IGFjdGl2ZV9yYXRlOwotCXUxNiBhY3RpdmVfcmF0ZV9iYXNpYzsKLQotCXUzMiBzdGFfc3VwcF9yYXRlczsKLQotCXU4IGNhbGxfcG9zdF9hc3NvY19mcm9tX2JlYWNvbjsKLQkvKiBSYXRlIHNjYWxpbmcgZGF0YSAqLwotCXM4IGRhdGFfcmV0cnlfbGltaXQ7Ci0JdTggcmV0cnlfcmF0ZTsKLQotCXdhaXRfcXVldWVfaGVhZF90IHdhaXRfY29tbWFuZF9xdWV1ZTsKLQotCWludCBhY3Rpdml0eV90aW1lcl9hY3RpdmU7Ci0KLQkvKiBSeCBhbmQgVHggRE1BIHByb2Nlc3NpbmcgcXVldWVzICovCi0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgcnhxOwotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlIHR4cVtJV0xfTUFYX05VTV9RVUVVRVNdOwotCi0JdW5zaWduZWQgbG9uZyBzdGF0dXM7Ci0KLQlpbnQgbGFzdF9yeF9yc3NpOwkvKiBGcm9tIFJ4IHBhY2tldCBzdGF0aXNpdGljcyAqLwotCWludCBsYXN0X3J4X25vaXNlOwkvKiBGcm9tIGJlYWNvbiBzdGF0aXN0aWNzICovCi0KLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl9tZ3IgcG93ZXJfZGF0YTsKLQotCXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3Mgc3RhdGlzdGljczsKLQl1bnNpZ25lZCBsb25nIGxhc3Rfc3RhdGlzdGljc190aW1lOwotCi0JLyogY29udGV4dCBpbmZvcm1hdGlvbiAqLwotCXUxNiByYXRlc19tYXNrOwotCi0JdTMyIHBvd2VyX21vZGU7Ci0JdTMyIGFudGVubmE7Ci0JdTggYnNzaWRbRVRIX0FMRU5dOwotCXUxNiBydHNfdGhyZXNob2xkOwotCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKLQotCS8qc3RhdGlvbiB0YWJsZSB2YXJpYWJsZXMgKi8KLQlzcGlubG9ja190IHN0YV9sb2NrOwotCWludCBudW1fc3RhdGlvbnM7Ci0Jc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSBzdGF0aW9uc1tJV0xfU1RBVElPTl9DT1VOVF07Ci0KLQkvKiBJbmRpY2F0aW9uIGlmIGllZWU4MDIxMV9vcHMtPm9wZW4gaGFzIGJlZW4gY2FsbGVkICovCi0JdTggaXNfb3BlbjsKLQotCXU4IG1hYzgwMjExX3JlZ2lzdGVyZWQ7Ci0KLQkvKiBSeCdkIHBhY2tldCB0aW1pbmcgaW5mb3JtYXRpb24gKi8KLQl1MzIgbGFzdF9iZWFjb25fdGltZTsKLQl1NjQgbGFzdF90c2Y7Ci0KLQkvKiBlZXByb20gKi8KLQlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gZWVwcm9tOwotCi0JZW51bSBubDgwMjExX2lmdHlwZSBpd19tb2RlOwotCi0Jc3RydWN0IHNrX2J1ZmYgKmlic3NfYmVhY29uOwotCi0JLyogTGFzdCBSeCdkIGJlYWNvbiB0aW1lc3RhbXAgKi8KLQl1MzIgdGltZXN0YW1wMDsKLQl1MzIgdGltZXN0YW1wMTsKLQl1MTYgYmVhY29uX2ludDsKLQlzdHJ1Y3QgaXdsMzk0NV9kcml2ZXJfaHdfaW5mbyBod19zZXR0aW5nOwotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0KLQkvKiBDdXJyZW50IGFzc29jaWF0aW9uIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb25maWd1cmUgdGhlCi0JICogaGFyZHdhcmUgKi8KLQl1MTYgYXNzb2NfaWQ7Ci0JdTE2IGFzc29jX2NhcGFiaWxpdHk7Ci0JdTggcHNfbW9kZTsKLQotCXN0cnVjdCBpd2wzOTQ1X3Fvc19pbmZvIHFvc19kYXRhOwotCi0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKLQotCXN0cnVjdCB3b3JrX3N0cnVjdCB1cDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzdGFydDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2FsaWJyYXRlZF93b3JrOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBzY2FuX2NvbXBsZXRlZDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfcmVwbGVuaXNoOwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZl9raWxsOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBhYm9ydF9zY2FuOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB1cGRhdGVfbGlua19sZWQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGF1dGhfd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVwb3J0X3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlcXVlc3Rfc2NhbjsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3VwZGF0ZTsKLQotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfdGFza2xldDsKLQotCXN0cnVjdCBkZWxheWVkX3dvcmsgaW5pdF9hbGl2ZV9zdGFydDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIGFsaXZlX3N0YXJ0OwotCXN0cnVjdCBkZWxheWVkX3dvcmsgYWN0aXZpdHlfdGltZXI7Ci0Jc3RydWN0IGRlbGF5ZWRfd29yayB0aGVybWFsX3BlcmlvZGljOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgZ2F0aGVyX3N0YXRzOwotCXN0cnVjdCBkZWxheWVkX3dvcmsgc2Nhbl9jaGVjazsKLQotI2RlZmluZSBJV0xfREVGQVVMVF9UWF9QT1dFUiAweDBGCi0JczggdXNlcl90eHBvd2VyX2xpbWl0OwotCXM4IG1heF9jaGFubmVsX3R4cG93ZXJfbGltaXQ7Ci0KLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JLyogZGVidWdnaW5nIGluZm8gKi8KLQl1MzIgZnJhbWVjbnRfdG9fdXM7Ci0JYXRvbWljX3QgcmVzdHJpY3RfcmVmY250OwotI2VuZGlmCi19OwkJCQkvKml3bDM5NDVfcHJpdiAqLwotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gKHByaXYtPmFjdGl2ZV9yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykgPyAxIDogMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF92YWxpZChjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm8pCi17Ci0JaWYgKGNoX2luZm8gPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIChjaF9pbmZvLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX1ZBTElEKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpc19jaGFubmVsX3JhZGFyKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKLXsKLQlyZXR1cm4gKGNoX2luZm8tPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggaXNfY2hhbm5lbF9hX2JhbmQoY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaF9pbmZvKQotewotCXJldHVybiBjaF9pbmZvLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFo7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTggaXNfY2hhbm5lbF9iZ19iYW5kKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbykKLXsKLQlyZXR1cm4gY2hfaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpc19jaGFubmVsX3Bhc3NpdmUoY29uc3Qgc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9pbmZvICpjaCkKLXsKLQlyZXR1cm4gKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfQUNUSVZFKSkgPyAxIDogMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXNfY2hhbm5lbF9pYnNzKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2gpCi17Ci0JcmV0dXJuICgoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykpID8gMSA6IDA7Ci19Ci0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKml3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbygKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsIHUxNiBjaGFubmVsKTsKLQotZXh0ZXJuIGludCBpd2wzOTQ1X3JzX25leHRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgcmF0ZSk7Ci0KLS8qIFJlcXVpcmVzIGZ1bGwgZGVjbGFyYXRpb24gb2YgaXdsMzk0NV9wcml2IGJlZm9yZSBpbmNsdWRpbmcgKi8KLSNpbmNsdWRlICJpd2wtMzk0NS1pby5oIgorLyogUmVxdWlyZXMgZnVsbCBkZWNsYXJhdGlvbiBvZiBpd2xfcHJpdiBiZWZvcmUgaW5jbHVkaW5nICovCisjaW5jbHVkZSAiaXdsLWlvLmgiCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCmluZGV4IDY2NDlmN2IuLmE3MWE0ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC04OSw2NCArODksNDMgQEAKICNkZWZpbmUgTE9OR19TTE9UX1RJTUUgMjAKIAogLyogUlNTSSB0byBkQm0gKi8KLSNkZWZpbmUgSVdMX1JTU0lfT0ZGU0VUCTQ0Ci0KKyNkZWZpbmUgSVdMNDlfUlNTSV9PRkZTRVQJNDQKIAogCiAvKiBQQ0kgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFBDSV9DRkdfUkVUUllfVElNRU9VVAkweDA0MQotI2RlZmluZSBQQ0lfQ0ZHX1BPV0VSX1NPVVJDRQkweDBDOAotI2RlZmluZSBQQ0lfUkVHX1dVTTgJCTB4MEU4Ci0jZGVmaW5lIFBDSV9DRkdfTElOS19DVFJMCTB4MEYwCiAKIC8qIFBDSSByZWdpc3RlciB2YWx1ZXMgKi8KICNkZWZpbmUgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wwU19FTgkweDAxCiAjZGVmaW5lIFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTgkweDAyCi0jZGVmaW5lIFBDSV9DRkdfQ01EX1JFR19JTlRfRElTX01TSwkweDA0Ci0jZGVmaW5lIFBDSV9DRkdfUE1DX1BNRV9GUk9NX0QzQ09MRF9TVVBQT1JUICAgICAgICAgKDB4ODAwMDAwMDApCi0KIAogI2RlZmluZSBJV0xfTlVNX1NDQU5fUkFURVMgICAgICAgICAoMikKIAogI2RlZmluZSBJV0xfREVGQVVMVF9UWF9SRVRSWSAgMTUKIAotI2RlZmluZSBSWF9RVUVVRV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgIDI1NgotI2RlZmluZSBSWF9RVUVVRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDI1NQotI2RlZmluZSBSWF9RVUVVRV9TSVpFX0xPRyAgICAgICAgICAgICAgICAgICAgIDgKLQotI2RlZmluZSBURkRfVFhfQ01EX1NMT1RTIDI1NgotI2RlZmluZSBURkRfQ01EX1NMT1RTIDMyCi0KLS8qCi0gKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucwotICovCi0jZGVmaW5lIFJYX0ZSRUVfQlVGRkVSUyA2NAotI2RlZmluZSBSWF9MT1dfV0FURVJNQVJLIDgKLQotLyogU2l6ZSBvZiBvbmUgUnggYnVmZmVyIGluIGhvc3QgRFJBTSAqLwotI2RlZmluZSBJV0xfUlhfQlVGX1NJWkVfNEsgKDQgKiAxMDI0KQotI2RlZmluZSBJV0xfUlhfQlVGX1NJWkVfOEsgKDggKiAxMDI0KQogCiAvKiBTaXplcyBhbmQgYWRkcmVzc2VzIGZvciBpbnN0cnVjdGlvbiBhbmQgZGF0YSBtZW1vcnkgKFNSQU0pIGluCiAgKiA0OTY1J3MgZW1iZWRkZWQgcHJvY2Vzc29yLiAgRHJpdmVyIGFjY2VzcyBpcyB2aWEgSEJVU19UQVJHX01FTV8qIHJlZ3MuICovCi0jZGVmaW5lIFJUQ19JTlNUX0xPV0VSX0JPVU5ECQkJKDB4MDAwMDAwKQorI2RlZmluZSBJV0w0OV9SVENfSU5TVF9MT1dFUl9CT1VORAkJKDB4MDAwMDAwKQogI2RlZmluZSBJV0w0OV9SVENfSU5TVF9VUFBFUl9CT1VORAkJKDB4MDE4MDAwKQogCi0jZGVmaW5lIFJUQ19EQVRBX0xPV0VSX0JPVU5ECQkJKDB4ODAwMDAwKQorI2RlZmluZSBJV0w0OV9SVENfREFUQV9MT1dFUl9CT1VORAkJKDB4ODAwMDAwKQogI2RlZmluZSBJV0w0OV9SVENfREFUQV9VUFBFUl9CT1VORAkJKDB4ODBBMDAwKQogCi0jZGVmaW5lIElXTDQ5X1JUQ19JTlNUX1NJWkUgIChJV0w0OV9SVENfSU5TVF9VUFBFUl9CT1VORCAtIFJUQ19JTlNUX0xPV0VSX0JPVU5EKQotI2RlZmluZSBJV0w0OV9SVENfREFUQV9TSVpFICAoSVdMNDlfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBSVENfREFUQV9MT1dFUl9CT1VORCkKKyNkZWZpbmUgSVdMNDlfUlRDX0lOU1RfU0laRSAgKElXTDQ5X1JUQ19JTlNUX1VQUEVSX0JPVU5EIC0gXAorCQkJCUlXTDQ5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKQorI2RlZmluZSBJV0w0OV9SVENfREFUQV9TSVpFICAoSVdMNDlfUlRDX0RBVEFfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMNDlfUlRDX0RBVEFfTE9XRVJfQk9VTkQpCiAKLSNkZWZpbmUgSVdMX01BWF9JTlNUX1NJWkUgSVdMNDlfUlRDX0lOU1RfU0laRQotI2RlZmluZSBJV0xfTUFYX0RBVEFfU0laRSBJV0w0OV9SVENfREFUQV9TSVpFCisjZGVmaW5lIElXTDQ5X01BWF9JTlNUX1NJWkUgSVdMNDlfUlRDX0lOU1RfU0laRQorI2RlZmluZSBJV0w0OV9NQVhfREFUQV9TSVpFIElXTDQ5X1JUQ19EQVRBX1NJWkUKIAogLyogU2l6ZSBvZiB1Q29kZSBpbnN0cnVjdGlvbiBtZW1vcnkgaW4gYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUgKi8KLSNkZWZpbmUgSVdMX01BWF9CU01fU0laRSBCU01fU1JBTV9TSVpFCisjZGVmaW5lIElXTDQ5X01BWF9CU01fU0laRSBCU01fU1JBTV9TSVpFCiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bDQ5NjVfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcih1MzIgYWRkcikKIHsKLQlyZXR1cm4gKGFkZHIgPj0gUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCisJcmV0dXJuIChhZGRyID49IElXTDQ5X1JUQ19EQVRBX0xPV0VSX0JPVU5EKSAmJgogCSAgICAgICAoYWRkciA8IElXTDQ5X1JUQ19EQVRBX1VQUEVSX0JPVU5EKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IDVhNzJiYzAuLjg0N2E2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNzYsNyArNzYsNyBAQAogCXUzMiByZWc7CiAJdTMyIHZhbDsKIAotCUlXTF9ERUJVR19JTkZPKCJCZWdpbiB2ZXJpZnkgYnNtXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmVnaW4gdmVyaWZ5IGJzbVxuIik7CiAKIAkvKiB2ZXJpZnkgQlNNIFNSQU0gY29udGVudHMgKi8KIAl2YWwgPSBpd2xfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9EV0NPVU5UX1JFRyk7CkBAIC04NSw3ICs4NSw3IEBACiAJICAgICByZWcgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspIHsKIAkJdmFsID0gaXdsX3JlYWRfcHJwaChwcml2LCByZWcpOwogCQlpZiAodmFsICE9IGxlMzJfdG9fY3B1KCppbWFnZSkpIHsKLQkJCUlXTF9FUlJPUigiQlNNIHVDb2RlIHZlcmlmaWNhdGlvbiBmYWlsZWQgYXQgIgorCQkJSVdMX0VSUihwcml2LCAiQlNNIHVDb2RlIHZlcmlmaWNhdGlvbiBmYWlsZWQgYXQgIgogCQkJCSAgImFkZHIgMHglMDhYKyV1IChvZiAldSksIGlzIDB4JXgsIHMvYiAweCV4XG4iLAogCQkJCSAgQlNNX1NSQU1fTE9XRVJfQk9VTkQsCiAJCQkJICByZWcgLSBCU01fU1JBTV9MT1dFUl9CT1VORCwgbGVuLApAQCAtOTQsNyArOTQsNyBAQAogCQl9CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIkJTTSBib290c3RyYXAgdUNvZGUgaW1hZ2UgT0tcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCU00gYm9vdHN0cmFwIHVDb2RlIGltYWdlIE9LXG4iKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTQ0LDEyICsxNDQsMTIgQEAKIAl1MzIgcmVnX29mZnNldDsKIAlpbnQgcmV0OwogCi0JSVdMX0RFQlVHX0lORk8oIkJlZ2luIGxvYWQgYnNtXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQmVnaW4gbG9hZCBic21cbiIpOwogCiAJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX1JUOwogCiAJLyogbWFrZSBzdXJlIGJvb3RzdHJhcCBwcm9ncmFtIGlzIG5vIGxhcmdlciB0aGFuIEJTTSdzIFNSQU0gc2l6ZSAqLwotCWlmIChsZW4gPiBJV0xfTUFYX0JTTV9TSVpFKQorCWlmIChsZW4gPiBJV0w0OV9NQVhfQlNNX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVGVsbCBib290c3RyYXAgdUNvZGUgd2hlcmUgdG8gZmluZCB0aGUgIkluaXRpYWxpemUiIHVDb2RlCkBAIC0xODYsNyArMTg2LDcgQEAKIAogCS8qIFRlbGwgQlNNIHRvIGNvcHkgZnJvbSBCU00gU1JBTSBpbnRvIGluc3RydWN0aW9uIFNSQU0sIHdoZW4gYXNrZWQgKi8KIAlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX1NSQ19SRUcsIDB4MCk7Ci0JaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9EU1RfUkVHLCBSVENfSU5TVF9MT1dFUl9CT1VORCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9EU1RfUkVHLCBJV0w0OV9SVENfSU5TVF9MT1dFUl9CT1VORCk7CiAJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHLCBsZW4gLyBzaXplb2YodTMyKSk7CiAKIAkvKiBMb2FkIGJvb3RzdHJhcCBjb2RlIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSBub3csCkBAIC0yMDEsOSArMjAxLDkgQEAKIAkJdWRlbGF5KDEwKTsKIAl9CiAJaWYgKGkgPCAxMDApCi0JCUlXTF9ERUJVR19JTkZPKCJCU00gd3JpdGUgY29tcGxldGUsIHBvbGwgJWQgaXRlcmF0aW9uc1xuIiwgaSk7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCU00gd3JpdGUgY29tcGxldGUsIHBvbGwgJWQgaXRlcmF0aW9uc1xuIiwgaSk7CiAJZWxzZSB7Ci0JCUlXTF9FUlJPUigiQlNNIHdyaXRlIGRpZCBub3QgY29tcGxldGUhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQlNNIHdyaXRlIGRpZCBub3QgY29tcGxldGUhXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yNTcsNyArMjU3LDcgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVDb2RlIHBvaW50ZXJzIGFyZSBzZXQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSB1Q29kZSBwb2ludGVycyBhcmUgc2V0LlxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjc5LDcgKzI3OSw3IEBACiAJaWYgKHByaXYtPmNhcmRfYWxpdmVfaW5pdC5pc192YWxpZCAhPSBVQ09ERV9WQUxJRF9PSykgewogCQkvKiBXZSBoYWQgYW4gZXJyb3IgYnJpbmdpbmcgdXAgdGhlIGhhcmR3YXJlLCBzbyB0YWtlIGl0CiAJCSAqIGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSBBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtMjg5LDcgKzI4OSw3IEBACiAJaWYgKGl3bF92ZXJpZnlfdWNvZGUocHJpdikpIHsKIAkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdhcyBiYWQ7CiAJCSAqIHRha2UgaXQgYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkJhZCBcImluaXRpYWxpemVcIiB1Q29kZSBsb2FkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCYWQgXCJpbml0aWFsaXplXCIgdUNvZGUgbG9hZC5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCkBAIC0yOTksMTEgKzI5OSwxMSBAQAogCS8qIFNlbmQgcG9pbnRlcnMgdG8gcHJvdG9jb2wvcnVudGltZSB1Q29kZSBpbWFnZSAuLi4gaW5pdCBjb2RlIHdpbGwKIAkgKiBsb2FkIGFuZCBsYXVuY2ggcnVudGltZSB1Q29kZSwgd2hpY2ggd2lsbCBzZW5kIHVzIGFub3RoZXIgIkFsaXZlIgogCSAqIG5vdGlmaWNhdGlvbi4gKi8KLQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6YXRpb24gQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAlpZiAoaXdsNDk2NV9zZXRfdWNvZGVfcHRycyhwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd29uJ3QgaGFwcGVuOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJDb3VsZG4ndCBzZXQgdXAgdUNvZGUgcG9pbnRlcnMuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvdWxkbid0IHNldCB1cCB1Q29kZSBwb2ludGVycy5cbiIpOwogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCXJldHVybjsKQEAgLTM1NCw3ICszNTQsNyBAQAogCXJldCA9IGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzgxLDI3ICszODEsMjAgQEAKIHN0YXRpYyB2b2lkIGl3bDQ5NjVfbmljX2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgdmFsOwogCXUxNiByYWRpb19jZmc7Ci0JdTE2IGxpbms7CisJdTE2IGxjdGw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKChwcml2LT5yZXZfaWQgJiAweDgwKSA9PSAweDgwICYmIChwcml2LT5yZXZfaWQgJiAweDdmKSA8IDgpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9SRUdfV1VNOCwgJnZhbCk7Ci0JCS8qIEVuYWJsZSBObyBTbm9vcCBmaWVsZCAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9SRUdfV1VNOCwKLQkJCQkgICAgICAgdmFsICYgfigxIDw8IDExKSk7Ci0JfQorCWxjdGwgPSBpd2xfcGNpZV9saW5rX2N0bChwcml2KTsKIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DRkdfTElOS19DVFJMLCAmbGluayk7Ci0KLQkvKiBMMSBpcyBlbmFibGVkIGJ5IEJJT1MgKi8KLQlpZiAoKGxpbmsgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pID09IFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikKLQkJLyogZGlzYWJsZSBMMFMgZGlzYWJsZWQgTDFBIGVuYWJsZWQgKi8KKwkvKiBIVyBidWcgVy9BIC0gbmVnbGlnaWJsZSBwb3dlciBjb25zdW1wdGlvbiAqLworCS8qIEwxLUFTUE0gaXMgZW5hYmxlZCBieSBCSU9TICovCisJaWYgKChsY3RsICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wxX0VOKSA9PSBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pCisJCS8qIEwxLUFTUE0gZW5hYmxlZDogZGlzYWJsZSBMMFMgICovCiAJCWl3bF9zZXRfYml0KHByaXYsIENTUl9HSU9fUkVHLCBDU1JfR0lPX1JFR19WQUxfTDBTX0VOQUJMRUQpOwogCWVsc2UKLQkJLyogTDBTIGVuYWJsZWQgTDFBIGRpc2FibGVkICovCisJCS8qIEwxLUFTUE0gZGlzYWJsZWQ6IGVuYWJsZSBMMFMgKi8KIAkJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR0lPX1JFRywgQ1NSX0dJT19SRUdfVkFMX0wwU19FTkFCTEVEKTsKIAogCXJhZGlvX2NmZyA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fUkFESU9fQ09ORklHKTsKQEAgLTQzNyw3ICs0MzAsNyBAQAogCQkJQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCwgMTAwKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlJV0xfREVCVUdfSU5GTygic3RvcCBtYXN0ZXJcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJzdG9wIG1hc3RlclxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUyMyw5ICs1MTYsMTAgQEAKIAkJY21kLmRpZmZfZ2Fpbl9jID0gMDsKIAkJaWYgKGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCwKIAkJCQkgc2l6ZW9mKGNtZCksICZjbWQpKQotCQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgc2VuZCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01EXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCQkiQ291bGQgbm90IHNlbmQgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRFxuIik7CiAJCWRhdGEtPnN0YXRlID0gSVdMX0NIQUlOX05PSVNFX0FDQ1VNVUxBVEU7Ci0JCUlXTF9ERUJVR19DQUxJQigiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CiAJfQogfQogCkBAIC01NTcsNyArNTUxLDcgQEAKIAkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSA9IDA7CiAJCX0KIAl9Ci0JSVdMX0RFQlVHX0NBTElCKCJkZWx0YV9nYWluX2NvZGVzOiBhICVkIGIgJWQgYyAlZFxuIiwKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImRlbHRhX2dhaW5fY29kZXM6IGEgJWQgYiAlZCBjICVkXG4iLAogCQkgICAgIGRhdGEtPmRlbHRhX2dhaW5fY29kZVswXSwKIAkJICAgICBkYXRhLT5kZWx0YV9nYWluX2NvZGVbMV0sCiAJCSAgICAgZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzJdKTsKQEAgLTU3NSw3ICs1NjksNyBAQAogCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1BIWV9DQUxJQlJBVElPTl9DTUQsCiAJCQkJICAgICAgc2l6ZW9mKGNtZCksICZjbWQpOwogCQlpZiAocmV0KQotCQkJSVdMX0RFQlVHX0NBTElCKCJmYWlsIHNlbmRpbmcgY21kICIKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiZmFpbCBzZW5kaW5nIGNtZCAiCiAJCQkJICAgICAiUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCBcbiIpOwogCiAJCS8qIFRPRE8gd2UgbWlnaHQgd2FudCByZWNhbGN1bGF0ZQpAQCAtNjY4LDcgKzY2Miw3IEBACiAKIAl0eHEtPnNjaGVkX3JldHJ5ID0gc2NkX3JldHJ5OwogCi0JSVdMX0RFQlVHX0lORk8oIiVzICVzIFF1ZXVlICVkIG9uIEFDICVkXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICIlcyAlcyBRdWV1ZSAlZCBvbiBBQyAlZFxuIiwKIAkJICAgICAgIGFjdGl2ZSA/ICJBY3RpdmF0ZSIgOiAiRGVhY3RpdmF0ZSIsCiAJCSAgICAgICBzY2RfcmV0cnkgPyAiQkEiIDogIkFDIiwgdHhxX2lkLCB0eF9maWZvX2lkKTsKIH0KQEAgLTgwNCw4ICs3OTgsOSBAQAogCiAJaWYgKChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPiBJV0w0OV9OVU1fUVVFVUVTKSB8fAogCSAgICAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzIDwgSVdMX01JTl9OVU1fUVVFVUVTKSkgewotCQlJV0xfRVJST1IoImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAotCQkJICBJV0xfTUlOX05VTV9RVUVVRVMsIElXTDQ5X05VTV9RVUVVRVMpOworCQlJV0xfRVJSKHByaXYsCisJCQkiaW52YWxpZCBxdWV1ZXNfbnVtLCBzaG91bGQgYmUgYmV0d2VlbiAlZCBhbmQgJWRcbiIsCisJCQlJV0xfTUlOX05VTV9RVUVVRVMsIElXTDQ5X05VTV9RVUVVRVMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTgxMyw2ICs4MDgsNyBAQAogCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDQ5X1RDU1JfQ0hOTF9OVU07CiAJcHJpdi0+aHdfcGFyYW1zLnNjZF9iY190YmxzX3NpemUgPQogCQkJSVdMNDlfTlVNX1FVRVVFUyAqIHNpemVvZihzdHJ1Y3QgaXdsNDk2NV9zY2RfYmNfdGJsKTsKKwlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90ZmQpOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0w0OTY1X1NUQVRJT05fQ09VTlQ7CiAJcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTDQ5NjVfQlJPQURDQVNUX0lEOwogCXByaXYtPmh3X3BhcmFtcy5tYXhfZGF0YV9zaXplID0gSVdMNDlfUlRDX0RBVEFfU0laRTsKQEAgLTgyMCw2ICs4MTYsOCBAQAogCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSBCU01fU1JBTV9TSVpFOwogCXByaXYtPmh3X3BhcmFtcy5mYXRfY2hhbm5lbCA9IEJJVChJRUVFODAyMTFfQkFORF81R0haKTsKIAorCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7CisKIAlwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSA9IDI7CiAJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAyOwogCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBBTlRfQSB8IEFOVF9COwpAQCAtOTAyLDcgKzkwMCw2IEBACiAJICAgIGNoYW5uZWwgPD0gQ0FMSUJfSVdMX1RYX0FUVEVOX0dSNF9MQ0gpCiAJCXJldHVybiBDQUxJQl9DSF9HUk9VUF80OwogCi0JSVdMX0VSUk9SKCJDYW4ndCBmaW5kIHR4YXR0ZW4gZ3JvdXAgZm9yIGNoYW5uZWwgJWQuXG4iLCBjaGFubmVsKTsKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTk1Niw3ICs5NTMsNyBAQAogCiAJcyA9IGl3bDQ5NjVfZ2V0X3N1Yl9iYW5kKHByaXYsIGNoYW5uZWwpOwogCWlmIChzID49IEVFUFJPTV9UWF9QT1dFUl9CQU5EUykgewotCQlJV0xfRVJST1IoIlR4IFBvd2VyIGNhbiBub3QgZmluZCBjaGFubmVsICVkXG4iLCBjaGFubmVsKTsKKwkJSVdMX0VSUihwcml2LCAiVHggUG93ZXIgY2FuIG5vdCBmaW5kIGNoYW5uZWwgJWRcbiIsIGNoYW5uZWwpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC05NjQsNyArOTYxLDcgQEAKIAljaF9pMiA9IHByaXYtPmNhbGliX2luZm8tPmJhbmRfaW5mb1tzXS5jaDIuY2hfbnVtOwogCWNoYW5faW5mby0+Y2hfbnVtID0gKHU4KSBjaGFubmVsOwogCi0JSVdMX0RFQlVHX1RYUE9XRVIoImNoYW5uZWwgJWQgc3ViYmFuZCAlZCBmYWN0b3J5IGNhbCBjaCAlZCAmICVkXG4iLAorCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjaGFubmVsICVkIHN1YmJhbmQgJWQgZmFjdG9yeSBjYWwgY2ggJWQgJiAlZFxuIiwKIAkJCSAgY2hhbm5lbCwgcywgY2hfaTEsIGNoX2kyKTsKIAogCWZvciAoYyA9IDA7IGMgPCBFRVBST01fVFhfUE9XRVJfVFhfQ0hBSU5TOyBjKyspIHsKQEAgLTk5NCwxOSArOTkxLDE5IEBACiAJCQkJCQkJICAgbTEtPnBhX2RldCwgY2hfaTIsCiAJCQkJCQkJICAgbTItPnBhX2RldCk7CiAKLQkJCUlXTF9ERUJVR19UWFBPV0VSCi0JCQkgICAgKCJjaGFpbiAlZCBtZWFzICVkIEFQMT0lZCBBUDI9JWQgQVA9JWRcbiIsIGMsIG0sCi0JCQkgICAgIG0xLT5hY3R1YWxfcG93LCBtMi0+YWN0dWFsX3Bvdywgb21lYXMtPmFjdHVhbF9wb3cpOwotCQkJSVdMX0RFQlVHX1RYUE9XRVIKLQkJCSAgICAoImNoYWluICVkIG1lYXMgJWQgTkkxPSVkIE5JMj0lZCBOST0lZFxuIiwgYywgbSwKLQkJCSAgICAgbTEtPmdhaW5faWR4LCBtMi0+Z2Fpbl9pZHgsIG9tZWFzLT5nYWluX2lkeCk7Ci0JCQlJV0xfREVCVUdfVFhQT1dFUgotCQkJICAgICgiY2hhaW4gJWQgbWVhcyAlZCBQQTE9JWQgUEEyPSVkIFBBPSVkXG4iLCBjLCBtLAotCQkJICAgICBtMS0+cGFfZGV0LCBtMi0+cGFfZGV0LCBvbWVhcy0+cGFfZGV0KTsKLQkJCUlXTF9ERUJVR19UWFBPV0VSCi0JCQkgICAgKCJjaGFpbiAlZCBtZWFzICVkICBUMT0lZCAgVDI9JWQgIFQ9JWRcbiIsIGMsIG0sCi0JCQkgICAgIG0xLT50ZW1wZXJhdHVyZSwgbTItPnRlbXBlcmF0dXJlLAotCQkJICAgICBvbWVhcy0+dGVtcGVyYXR1cmUpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCBBUDE9JWQgQVAyPSVkIEFQPSVkXG4iLCBjLCBtLAorCQkJCW0xLT5hY3R1YWxfcG93LCBtMi0+YWN0dWFsX3Bvdywgb21lYXMtPmFjdHVhbF9wb3cpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCBOSTE9JWQgTkkyPSVkIE5JPSVkXG4iLCBjLCBtLAorCQkJCW0xLT5nYWluX2lkeCwgbTItPmdhaW5faWR4LCBvbWVhcy0+Z2Fpbl9pZHgpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCBQQTE9JWQgUEEyPSVkIFBBPSVkXG4iLCBjLCBtLAorCQkJCW0xLT5wYV9kZXQsIG0yLT5wYV9kZXQsIG9tZWFzLT5wYV9kZXQpOworCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwKKwkJCQkiY2hhaW4gJWQgbWVhcyAlZCAgVDE9JWQgIFQyPSVkICBUPSVkXG4iLCBjLCBtLAorCQkJCW0xLT50ZW1wZXJhdHVyZSwgbTItPnRlbXBlcmF0dXJlLAorCQkJCW9tZWFzLT50ZW1wZXJhdHVyZSk7CiAJCX0KIAl9CiAKQEAgLTEzMDMsMTIgKzEzMDAsMTIgQEAKIAlzMzIgZmFjdG9yeV9hY3R1YWxfcHdyWzJdOwogCXMzMiBwb3dlcl9pbmRleDsKIAotCS8qIHVzZXJfdHhwb3dlcl9saW1pdCBpcyBpbiBkQm0sIGNvbnZlcnQgdG8gaGFsZi1kQm0gKGhhbGYtZEIgdW5pdHMKKwkvKiB0eF9wb3dlcl91c2VyX2xtdCBpcyBpbiBkQm0sIGNvbnZlcnQgdG8gaGFsZi1kQm0gKGhhbGYtZEIgdW5pdHMKIAkgKiAgIGFyZSB1c2VkIGZvciBpbmRleGluZyBpbnRvIHR4cG93ZXIgdGFibGUpICovCiAJdXNlcl90YXJnZXRfcG93ZXIgPSAyICogcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQ7CiAKIAkvKiBHZXQgY3VycmVudCAoUlhPTikgY2hhbm5lbCwgYmFuZCwgd2lkdGggKi8KLQlJV0xfREVCVUdfVFhQT1dFUigiY2hhbiAlZCBiYW5kICVkIGlzX2ZhdCAlZFxuIiwgY2hhbm5lbCwgYmFuZCwKKwlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhbiAlZCBiYW5kICVkIGlzX2ZhdCAlZFxuIiwgY2hhbm5lbCwgYmFuZCwKIAkJCSAgaXNfZmF0KTsKIAogCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBwcml2LT5iYW5kLCBjaGFubmVsKTsKQEAgLTEzMTksMTAgKzEzMTYsMTMgQEAKIAkvKiBnZXQgdHhhdHRlbiBncm91cCwgdXNlZCB0byBzZWxlY3QgMSkgdGhlcm1hbCB0eHBvd2VyIGFkanVzdG1lbnQKIAkgKiAgIGFuZCAyKSBtaW1vIHR4cG93ZXIgYmFsYW5jZSBiZXR3ZWVuIFR4IGNoYWlucy4gKi8KIAl0eGF0dGVuX2dycCA9IGl3bDQ5NjVfZ2V0X3R4X2F0dGVuX2dycChjaGFubmVsKTsKLQlpZiAodHhhdHRlbl9ncnAgPCAwKQorCWlmICh0eGF0dGVuX2dycCA8IDApIHsKKwkJSVdMX0VSUihwcml2LCAiQ2FuJ3QgZmluZCB0eGF0dGVuIGdyb3VwIGZvciBjaGFubmVsICVkLlxuIiwKKwkJCSAgY2hhbm5lbCk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAotCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFubmVsICVkIGJlbG9uZ3MgdG8gdHhhdHRlbiBncm91cCAlZFxuIiwKKwlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAiY2hhbm5lbCAlZCBiZWxvbmdzIHRvIHR4YXR0ZW4gZ3JvdXAgJWRcbiIsCiAJCQkgIGNoYW5uZWwsIHR4YXR0ZW5fZ3JwKTsKIAogCWlmIChpc19mYXQpIHsKQEAgLTEzNzIsNyArMTM3Miw3IEBACiAJdm9sdGFnZV9jb21wZW5zYXRpb24gPQogCSAgICBpd2w0OTY1X2dldF92b2x0YWdlX2NvbXBlbnNhdGlvbih2b2x0YWdlLCBpbml0X3ZvbHRhZ2UpOwogCi0JSVdMX0RFQlVHX1RYUE9XRVIoImN1cnIgdm9sdCAlZCBlZXByb20gdm9sdCAlZCB2b2x0IGNvbXAgJWRcbiIsCisJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImN1cnIgdm9sdCAlZCBlZXByb20gdm9sdCAlZCB2b2x0IGNvbXAgJWRcbiIsCiAJCQkgIGluaXRfdm9sdGFnZSwKIAkJCSAgdm9sdGFnZSwgdm9sdGFnZV9jb21wZW5zYXRpb24pOwogCkBAIC0xNDAzLDEzICsxNDAzLDEzIEBACiAJCWZhY3RvcnlfZ2Fpbl9pbmRleFtjXSA9IG1lYXN1cmVtZW50LT5nYWluX2lkeDsKIAkJZmFjdG9yeV9hY3R1YWxfcHdyW2NdID0gbWVhc3VyZW1lbnQtPmFjdHVhbF9wb3c7CiAKLQkJSVdMX0RFQlVHX1RYUE9XRVIoImNoYWluID0gJWRcbiIsIGMpOwotCQlJV0xfREVCVUdfVFhQT1dFUigiZmN0cnkgdG1wICVkLCAiCisJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjaGFpbiA9ICVkXG4iLCBjKTsKKwkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImZjdHJ5IHRtcCAlZCwgIgogCQkJCSAgImN1cnIgdG1wICVkLCBjb21wICVkIHN0ZXBzXG4iLAogCQkJCSAgZmFjdG9yeV90ZW1wLCBjdXJyZW50X3RlbXAsCiAJCQkJICB0ZW1wZXJhdHVyZV9jb21wW2NdKTsKIAotCQlJV0xfREVCVUdfVFhQT1dFUigiZmN0cnkgaWR4ICVkLCBmY3RyeSBwd3IgJWRcbiIsCisJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJmY3RyeSBpZHggJWQsIGZjdHJ5IHB3ciAlZFxuIiwKIAkJCQkgIGZhY3RvcnlfZ2Fpbl9pbmRleFtjXSwKIAkJCQkgIGZhY3RvcnlfYWN0dWFsX3B3cltjXSk7CiAJfQpAQCAtMTQ0Miw3ICsxNDQyLDcgQEAKIAkJaWYgKHRhcmdldF9wb3dlciA+IHBvd2VyX2xpbWl0KQogCQkJdGFyZ2V0X3Bvd2VyID0gcG93ZXJfbGltaXQ7CiAKLQkJSVdMX0RFQlVHX1RYUE9XRVIoInJhdGUgJWQgc2F0ICVkIHJlZyAlZCB1c3IgJWQgdGd0ICVkXG4iLAorCQlJV0xfREVCVUdfVFhQT1dFUihwcml2LCAicmF0ZSAlZCBzYXQgJWQgcmVnICVkIHVzciAlZCB0Z3QgJWRcbiIsCiAJCQkJICBpLCBzYXR1cmF0aW9uX3Bvd2VyIC0gYmFja19vZmZfdGFibGVbaV0sCiAJCQkJICBjdXJyZW50X3JlZ3VsYXRvcnksIHVzZXJfdGFyZ2V0X3Bvd2VyLAogCQkJCSAgdGFyZ2V0X3Bvd2VyKTsKQEAgLTE0NjYsNyArMTQ2Niw3IEBACiAJCQkJCSAgICB2b2x0YWdlX2NvbXBlbnNhdGlvbiArCiAJCQkJCSAgICBhdHRlbl92YWx1ZSk7CiAKLS8qCQkJSVdMX0RFQlVHX1RYUE9XRVIoImNhbGN1bGF0ZWQgdHhwb3dlciBpbmRleCAlZFxuIiwKKy8qCQkJSVdMX0RFQlVHX1RYUE9XRVIocHJpdiwgImNhbGN1bGF0ZWQgdHhwb3dlciBpbmRleCAlZFxuIiwKIAkJCQkJCXBvd2VyX2luZGV4KTsgKi8KIAogCQkJaWYgKHBvd2VyX2luZGV4IDwgZ2V0X21pbl9wb3dlcl9pbmRleChpLCBiYW5kKSkKQEAgLTE0ODMsMTIgKzE0ODMsMTIgQEAKIAogCQkJLyogc3RheSB3aXRoaW4gdGhlIHRhYmxlISAqLwogCQkJaWYgKHBvd2VyX2luZGV4ID4gMTA3KSB7Ci0JCQkJSVdMX1dBUk5JTkcoInR4cG93ZXIgaW5kZXggJWQgPiAxMDdcbiIsCisJCQkJSVdMX1dBUk4ocHJpdiwgInR4cG93ZXIgaW5kZXggJWQgPiAxMDdcbiIsCiAJCQkJCSAgICBwb3dlcl9pbmRleCk7CiAJCQkJcG93ZXJfaW5kZXggPSAxMDc7CiAJCQl9CiAJCQlpZiAocG93ZXJfaW5kZXggPCAwKSB7Ci0JCQkJSVdMX1dBUk5JTkcoInR4cG93ZXIgaW5kZXggJWQgPCAwXG4iLAorCQkJCUlXTF9XQVJOKHByaXYsICJ0eHBvd2VyIGluZGV4ICVkIDwgMFxuIiwKIAkJCQkJICAgIHBvd2VyX2luZGV4KTsKIAkJCQlwb3dlcl9pbmRleCA9IDA7CiAJCQl9CkBAIC0xNDk5LDcgKzE0OTksNyBAQAogCQkJdHhfcG93ZXIucy5kc3BfcHJlZGlzX2F0dGVuW2NdID0KIAkJCQlnYWluX3RhYmxlW2JhbmRdW3Bvd2VyX2luZGV4XS5kc3A7CiAKLQkJCUlXTF9ERUJVR19UWFBPV0VSKCJjaGFpbiAlZCBtaW1vICVkIGluZGV4ICVkICIKKwkJCUlXTF9ERUJVR19UWFBPV0VSKHByaXYsICJjaGFpbiAlZCBtaW1vICVkIGluZGV4ICVkICIKIAkJCQkJICAiZ2FpbiAweCUwMnggZHNwICVkXG4iLAogCQkJCQkgIGMsIGF0dGVuX3ZhbHVlLCBwb3dlcl9pbmRleCwKIAkJCQkJdHhfcG93ZXIucy5yYWRpb190eF9nYWluW2NdLApAQCAtMTUzMSw3ICsxNTMxLDcgQEAKIAkJLyogSWYgdGhpcyBnZXRzIGhpdCBhIGxvdCwgc3dpdGNoIGl0IHRvIGEgQlVHKCkgYW5kIGNhdGNoCiAJCSAqIHRoZSBzdGFjayB0cmFjZSB0byBmaW5kIG91dCB3aG8gaXMgY2FsbGluZyB0aGlzIGR1cmluZwogCQkgKiBhIHNjYW4uICovCi0JCUlXTF9XQVJOSU5HKCJUWCBQb3dlciByZXF1ZXN0ZWQgd2hpbGUgc2Nhbm5pbmchXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIlRYIFBvd2VyIHJlcXVlc3RlZCB3aGlsZSBzY2FubmluZyFcbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAKQEAgLTE1NzQsNyArMTU3NCw3IEBACiAJICAgICByeG9uMi0+b2ZkbV9odF9kdWFsX3N0cmVhbV9iYXNpY19yYXRlcykgJiYKIAkgICAgKHJ4b24xLT5yeF9jaGFpbiA9PSByeG9uMi0+cnhfY2hhaW4pICYmCiAJICAgIChyeG9uMS0+b2ZkbV9iYXNpY19yYXRlcyA9PSByeG9uMi0+b2ZkbV9iYXNpY19yYXRlcykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlVzaW5nIGN1cnJlbnQgUlhPTl9BU1NPQy4gIE5vdCByZXNlbmRpbmcuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjMxLDcgKzE2MzEsNyBAQAogCXJjID0gaXdsNDk2NV9maWxsX3R4cG93ZXJfdGJsKHByaXYsIGJhbmQsIGNoYW5uZWwsIGlzX2ZhdCwKIAkJCQkgICAgICBjdHJsX2NoYW5faGlnaCwgJmNtZC50eF9wb3dlcik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9ERUJVR18xMUgoImVycm9yOiVkICBmaWxsIHR4cG93ZXJfdGJsXG4iLCByYyk7CisJCUlXTF9ERUJVR18xMUgocHJpdiwgImVycm9yOiVkICBmaWxsIHR4cG93ZXJfdGJsXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTE2OTYsMTMgKzE2OTYsMTMgQEAKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfVEVNUEVSQVRVUkUsICZwcml2LT5zdGF0dXMpICYmCiAJCShwcml2LT5zdGF0aXN0aWNzLmZsYWcgJiBTVEFUSVNUSUNTX1JFUExZX0ZMR19GQVRfTU9ERV9NU0spKSB7Ci0JCUlXTF9ERUJVR19URU1QKCJSdW5uaW5nIEZBVCB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CisJCUlXTF9ERUJVR19URU1QKHByaXYsICJSdW5uaW5nIEZBVCB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CiAJCVIxID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjFbMV0pOwogCQlSMiA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IyWzFdKTsKIAkJUjMgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yM1sxXSk7CiAJCVI0ID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3I0WzFdKTsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfVEVNUCgiUnVubmluZyB0ZW1wZXJhdHVyZSBjYWxpYnJhdGlvblxuIik7CisJCUlXTF9ERUJVR19URU1QKHByaXYsICJSdW5uaW5nIHRlbXBlcmF0dXJlIGNhbGlicmF0aW9uXG4iKTsKIAkJUjEgPSAoczMyKWxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC50aGVybV9yMVswXSk7CiAJCVIyID0gKHMzMilsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQudGhlcm1fcjJbMF0pOwogCQlSMyA9IChzMzIpbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LnRoZXJtX3IzWzBdKTsKQEAgLTE3MjIsMTAgKzE3MjIsMTAgQEAKIAkJdnQgPSBzaWduX2V4dGVuZCgKIAkJCWxlMzJfdG9fY3B1KHByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC50ZW1wZXJhdHVyZSksIDIzKTsKIAotCUlXTF9ERUJVR19URU1QKCJDYWxpYiB2YWx1ZXMgUlsxLTNdOiAlZCAlZCAlZCBSNDogJWRcbiIsIFIxLCBSMiwgUjMsIHZ0KTsKKwlJV0xfREVCVUdfVEVNUChwcml2LCAiQ2FsaWIgdmFsdWVzIFJbMS0zXTogJWQgJWQgJWQgUjQ6ICVkXG4iLCBSMSwgUjIsIFIzLCB2dCk7CiAKIAlpZiAoUjMgPT0gUjEpIHsKLQkJSVdMX0VSUk9SKCJDYWxpYnJhdGlvbiBjb25mbGljdCBSMSA9PSBSM1xuIik7CisJCUlXTF9FUlIocHJpdiwgIkNhbGlicmF0aW9uIGNvbmZsaWN0IFIxID09IFIzXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTczNSw3ICsxNzM1LDcgQEAKIAl0ZW1wZXJhdHVyZSAvPSAoUjMgLSBSMSk7CiAJdGVtcGVyYXR1cmUgPSAodGVtcGVyYXR1cmUgKiA5NykgLyAxMDAgKyBURU1QRVJBVFVSRV9DQUxJQl9LRUxWSU5fT0ZGU0VUOwogCi0JSVdMX0RFQlVHX1RFTVAoIkNhbGlicmF0ZWQgdGVtcGVyYXR1cmU6ICVkSywgJWRDXG4iLAorCUlXTF9ERUJVR19URU1QKHByaXYsICJDYWxpYnJhdGVkIHRlbXBlcmF0dXJlOiAlZEssICVkQ1xuIiwKIAkJCXRlbXBlcmF0dXJlLCBLRUxWSU5fVE9fQ0VMU0lVUyh0ZW1wZXJhdHVyZSkpOwogCiAJcmV0dXJuIHRlbXBlcmF0dXJlOwpAQCAtMTc1OCw3ICsxNzU4LDcgQEAKIAlpbnQgdGVtcF9kaWZmOwogCiAJaWYgKCF0ZXN0X2JpdChTVEFUVVNfU1RBVElTVElDUywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1RFTVAoIlRlbXBlcmF0dXJlIG5vdCB1cGRhdGVkIC0tIG5vIHN0YXRpc3RpY3MuXG4iKTsKKwkJSVdMX0RFQlVHX1RFTVAocHJpdiwgIlRlbXBlcmF0dXJlIG5vdCB1cGRhdGVkIC0tIG5vIHN0YXRpc3RpY3MuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNzY2LDE5ICsxNzY2LDE5IEBACiAKIAkvKiBnZXQgYWJzb2x1dGUgdmFsdWUgKi8KIAlpZiAodGVtcF9kaWZmIDwgMCkgewotCQlJV0xfREVCVUdfUE9XRVIoIkdldHRpbmcgY29vbGVyLCBkZWx0YSAlZCwgXG4iLCB0ZW1wX2RpZmYpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkdldHRpbmcgY29vbGVyLCBkZWx0YSAlZCwgXG4iLCB0ZW1wX2RpZmYpOwogCQl0ZW1wX2RpZmYgPSAtdGVtcF9kaWZmOwogCX0gZWxzZSBpZiAodGVtcF9kaWZmID09IDApCi0JCUlXTF9ERUJVR19QT1dFUigiU2FtZSB0ZW1wLCBcbiIpOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIlNhbWUgdGVtcCwgXG4iKTsKIAllbHNlCi0JCUlXTF9ERUJVR19QT1dFUigiR2V0dGluZyB3YXJtZXIsIGRlbHRhICVkLCBcbiIsIHRlbXBfZGlmZik7CisJCUlXTF9ERUJVR19QT1dFUihwcml2LCAiR2V0dGluZyB3YXJtZXIsIGRlbHRhICVkLCBcbiIsIHRlbXBfZGlmZik7CiAKIAlpZiAodGVtcF9kaWZmIDwgSVdMX1RFTVBFUkFUVVJFX1RIUkVTSE9MRCkgewotCQlJV0xfREVCVUdfUE9XRVIoIlRoZXJtYWwgdHhwb3dlciBjYWxpYiBub3QgbmVlZGVkXG4iKTsKKwkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUaGVybWFsIHR4cG93ZXIgY2FsaWIgbm90IG5lZWRlZFxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCUlXTF9ERUJVR19QT1dFUigiVGhlcm1hbCB0eHBvd2VyIGNhbGliIG5lZWRlZFxuIik7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUaGVybWFsIHR4cG93ZXIgY2FsaWIgbmVlZGVkXG4iKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTc5MywxMiArMTc5MywxMiBAQAogCiAJaWYgKHByaXYtPnRlbXBlcmF0dXJlICE9IHRlbXApIHsKIAkJaWYgKHByaXYtPnRlbXBlcmF0dXJlKQotCQkJSVdMX0RFQlVHX1RFTVAoIlRlbXBlcmF0dXJlIGNoYW5nZWQgIgorCQkJSVdMX0RFQlVHX1RFTVAocHJpdiwgIlRlbXBlcmF0dXJlIGNoYW5nZWQgIgogCQkJCSAgICAgICAiZnJvbSAlZEMgdG8gJWRDXG4iLAogCQkJCSAgICAgICBLRUxWSU5fVE9fQ0VMU0lVUyhwcml2LT50ZW1wZXJhdHVyZSksCiAJCQkJICAgICAgIEtFTFZJTl9UT19DRUxTSVVTKHRlbXApKTsKIAkJZWxzZQotCQkJSVdMX0RFQlVHX1RFTVAoIlRlbXBlcmF0dXJlICIKKwkJCUlXTF9ERUJVR19URU1QKHByaXYsICJUZW1wZXJhdHVyZSAiCiAJCQkJICAgICAgICJpbml0aWFsaXplZCB0byAlZENcbiIsCiAJCQkJICAgICAgIEtFTFZJTl9UT19DRUxTSVVTKHRlbXApKTsKIAl9CkBAIC0xODM3LDcgKzE4MzcsOCBAQAogCiAJaWYgKChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNDlfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKIAkJCXR4cV9pZCwgSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUsCiAJCQlJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgLSAxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTA4LDcgKzE5MDksOCBAQAogCiAJaWYgKChJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDQ5X0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNDlfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKIAkJCXR4cV9pZCwgSVdMNDlfRklSU1RfQU1QRFVfUVVFVUUsCiAJCQlJV0w0OV9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDQ5X05VTV9BTVBEVV9RVUVVRVMgLSAxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTg2LDggKzE5ODgsOCBAQAogCWFkZHN0YS0+YWRkX2ltbWVkaWF0ZV9iYV90aWQgPSBjbWQtPmFkZF9pbW1lZGlhdGVfYmFfdGlkOwogCWFkZHN0YS0+cmVtb3ZlX2ltbWVkaWF0ZV9iYV90aWQgPSBjbWQtPnJlbW92ZV9pbW1lZGlhdGVfYmFfdGlkOwogCWFkZHN0YS0+YWRkX2ltbWVkaWF0ZV9iYV9zc24gPSBjbWQtPmFkZF9pbW1lZGlhdGVfYmFfc3NuOwotCWFkZHN0YS0+cmVzZXJ2ZWQxID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKLQlhZGRzdGEtPnJlc2VydmVkMiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCk7CisJYWRkc3RhLT5yZXNlcnZlZDEgPSBjcHVfdG9fbGUxNigwKTsKKwlhZGRzdGEtPnJlc2VydmVkMiA9IGNwdV90b19sZTMyKDApOwogCiAJcmV0dXJuICh1MTYpc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2FkZHN0YV9jbWQpOwogfQpAQCAtMjAxMyw3ICsyMDE1LDcgQEAKIAlpbnQgaSwgc2gsIGlkeDsKIAl1MTYgc2VxOwogCWlmIChhZ2ctPndhaXRfZm9yX2JhKQotCQlJV0xfREVCVUdfVFhfUkVQTFkoImdvdCB0eCByZXNwb25zZSB3L28gYmxvY2stYWNrXG4iKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJnb3QgdHggcmVzcG9uc2Ugdy9vIGJsb2NrLWFja1xuIik7CiAKIAlhZ2ctPmZyYW1lX2NvdW50ID0gdHhfcmVzcC0+ZnJhbWVfY291bnQ7CiAJYWdnLT5zdGFydF9pZHggPSBzdGFydF9pZHg7CkBAIC0yMDI3LDcgKzIwMjksNyBAQAogCQlpZHggPSBzdGFydF9pZHg7CiAKIAkJLyogRklYTUU6IGNvZGUgcmVwZXRpdGlvbiAqLwotCQlJV0xfREVCVUdfVFhfUkVQTFkoIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIGlkeD0lZFxuIiwKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJGcmFtZUNudCA9ICVkLCBTdGFydElkeD0lZCBpZHg9JWRcbiIsCiAJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgYWdnLT5zdGFydF9pZHgsIGlkeCk7CiAKIAkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IocHJpdi0+dHhxW3R4cV9pZF0udHhiW2lkeF0uc2tiWzBdKTsKQEAgLTIwMzgsOSArMjA0MCw5IEBACiAJCWl3bF9od3JhdGVfdG9fdHhfY29udHJvbChwcml2LCByYXRlX25fZmxhZ3MsIGluZm8pOwogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uIGVuZCAqLwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiMSBGcmFtZSAweCV4IGZhaWx1cmUgOiVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKIAkJCQkgICAgc3RhdHVzICYgMHhmZiwgdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZSk7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSYXRlIEluZm8gcmF0ZV9uX2ZsYWdzPSV4XG4iLCByYXRlX25fZmxhZ3MpOwogCiAJCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwogCX0gZWxzZSB7CkBAIC0yMDYwLDIxICsyMDYyLDIxIEBACiAJCQkJICAgICAgQUdHX1RYX1NUQVRFX0FCT1JUX01TSykpCiAJCQkJY29udGludWU7CiAKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKKwkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKIAkJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgdHhxX2lkLCBpZHgpOwogCiAJCQloZHIgPSBpd2xfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGlkeCk7CiAKIAkJCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CiAJCQlpZiAoaWR4ICE9IChTRVFfVE9fU04oc2MpICYgMHhmZikpIHsKLQkJCQlJV0xfRVJST1IoIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKLQkJCQkJICAiIGlkeD0lZCwgc2VxX2lkeD0lZCwgc2VxPSVkXG4iLAotCQkJCQkgIGlkeCwgU0VRX1RPX1NOKHNjKSwKLQkJCQkJICBoZHItPnNlcV9jdHJsKTsKKwkJCQlJV0xfRVJSKHByaXYsCisJCQkJCSJCVUdfT04gaWR4IGRvZXNuJ3QgbWF0Y2ggc2VxIGNvbnRyb2wiCisJCQkJCSIgaWR4PSVkLCBzZXFfaWR4PSVkLCBzZXE9JWRcbiIsCisJCQkJCWlkeCwgU0VRX1RPX1NOKHNjKSwgaGRyLT5zZXFfY3RybCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCi0JCQlJV0xfREVCVUdfVFhfUkVQTFkoIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCiAJCQkJCSAgIGksIGlkeCwgU0VRX1RPX1NOKHNjKSk7CiAKIAkJCXNoID0gaWR4IC0gc3RhcnQ7CkBAIC0yMDkyLDEzICsyMDk0LDEzIEBACiAJCQkJc2ggPSAwOwogCQkJfQogCQkJYml0bWFwIHw9IDFVTEwgPDwgc2g7Ci0JCQlJV0xfREVCVUdfVFhfUkVQTFkoInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCiAJCQkJCSAgIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAJCX0KIAogCQlhZ2ctPmJpdG1hcCA9IGJpdG1hcDsKIAkJYWdnLT5zdGFydF9pZHggPSBzdGFydDsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZXMgJWQgc3RhcnRfaWR4PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVzICVkIHN0YXJ0X2lkeD0lZCBiaXRtYXA9MHglbGx4XG4iLAogCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LAogCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCkBAIC0yMTI5LDcgKzIxMzEsNyBAQAogCXU4ICpxYyA9IE5VTEw7CiAKIAlpZiAoKGluZGV4ID49IHR4cS0+cS5uX2JkKSB8fCAoaXdsX3F1ZXVlX3VzZWQoJnR4cS0+cSwgaW5kZXgpID09IDApKSB7Ci0JCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cV9pZCAoJWQpIGluZGV4ICVkICIKKwkJSVdMX0VSUihwcml2LCAiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cV9pZCAoJWQpIGluZGV4ICVkICIKIAkJCSAgImlzIG91dCBvZiByYW5nZSBbMC0lZF0gJWQgJWRcbiIsIHR4cV9pZCwKIAkJCSAgaW5kZXgsIHR4cS0+cS5uX2JkLCB0eHEtPnEud3JpdGVfcHRyLAogCQkJICB0eHEtPnEucmVhZF9wdHIpOwpAQCAtMjE0Nyw3ICsyMTQ5LDcgQEAKIAogCXN0YV9pZCA9IGl3bF9nZXRfcmFfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHR4cS0+c2NoZWRfcmV0cnkgJiYgdW5saWtlbHkoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pKSB7Ci0JCUlXTF9FUlJPUigiU3RhdGlvbiBub3Qga25vd25cbiIpOworCQlJV0xfRVJSKHByaXYsICJTdGF0aW9uIG5vdCBrbm93blxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIxNjcsNyArMjE2OSw3IEBACiAKIAkJaWYgKHR4cS0+cS5yZWFkX3B0ciAhPSAoc2NkX3NzbiAmIDB4ZmYpKSB7CiAJCQlpbmRleCA9IGl3bF9xdWV1ZV9kZWNfd3JhcChzY2Rfc3NuICYgMHhmZiwgdHhxLT5xLm5fYmQpOwotCQkJSVdMX0RFQlVHX1RYX1JFUExZKCJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSBzY2Rfc3NuICIKKwkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiUmV0cnkgc2NoZWR1bGVyIHJlY2xhaW0gc2NkX3NzbiAiCiAJCQkJCSAgICIlZCBpbmRleCAlZFxuIiwgc2NkX3NzbiAsIGluZGV4KTsKIAkJCWZyZWVkID0gaXdsX3R4X3F1ZXVlX3JlY2xhaW0ocHJpdiwgdHhxX2lkLCBpbmRleCk7CiAJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLnRmZHNfaW5fcXVldWUgLT0gZnJlZWQ7CkBAIC0yMTc2LDEwICsyMTc4LDkgQEAKIAkJCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSAmJgogCQkJICAgIChhZ2ctPnN0YXRlICE9IElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSkpIHsKIAkJCQlpZiAoYWdnLT5zdGF0ZSA9PSBJV0xfQUdHX09GRikKLQkJCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCQkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiAJCQkJZWxzZQotCQkJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywKLQkJCQkJCQkgICAgIHR4cS0+c3dxX2lkKTsKKwkJCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxLT5zd3FfaWQpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTIxOTAsNyArMjE5MSw3IEBACiAJCQkJCWxlMzJfdG9fY3B1KHR4X3Jlc3AtPnJhdGVfbl9mbGFncyksCiAJCQkJCWluZm8pOwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiVFhRICVkIHN0YXR1cyAlcyAoMHglMDh4KSAiCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiVFhRICVkIHN0YXR1cyAlcyAoMHglMDh4KSAiCiAJCQkJICAgInJhdGVfbl9mbGFncyAweCV4IHJldHJpZXMgJWRcbiIsCiAJCQkJICAgdHhxX2lkLAogCQkJCSAgIGl3bF9nZXRfdHhfZmFpbF9yZWFzb24oc3RhdHVzKSwgc3RhdHVzLApAQCAtMjIwMywxNCArMjIwNCwxNCBAQAogCiAJCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkICYmCiAJCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSkKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKHByaXYtPmh3LCB0eHFfaWQpOworCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxX2lkKTsKIAl9CiAKIAlpZiAocWMgJiYgbGlrZWx5KHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkKIAkJaXdsX3R4cV9jaGVja19lbXB0eShwcml2LCBzdGFfaWQsIHRpZCwgdHhxX2lkKTsKIAogCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCi0JCUlXTF9FUlJPUigiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOwogfQogCiBzdGF0aWMgaW50IGl3bDQ5NjVfY2FsY19yc3NpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTIyMzgsMTMgKzIyMzksMTMgQEAKIAkJaWYgKHZhbGlkX2FudGVubmFlICYgKDEgPDwgaSkpCiAJCQltYXhfcnNzaSA9IG1heChuY3BoeS0+cnNzaV9pbmZvW2kgPDwgMV0sIG1heF9yc3NpKTsKIAotCUlXTF9ERUJVR19TVEFUUygiUnNzaSBJbiBBICVkIEIgJWQgQyAlZCBNYXggJWQgQUdDIGRCICVkXG4iLAorCUlXTF9ERUJVR19TVEFUUyhwcml2LCAiUnNzaSBJbiBBICVkIEIgJWQgQyAlZCBNYXggJWQgQUdDIGRCICVkXG4iLAogCQluY3BoeS0+cnNzaV9pbmZvWzBdLCBuY3BoeS0+cnNzaV9pbmZvWzJdLCBuY3BoeS0+cnNzaV9pbmZvWzRdLAogCQltYXhfcnNzaSwgYWdjKTsKIAogCS8qIGRCbSA9IG1heF9yc3NpIGRCIC0gYWdjIGRCIC0gY29uc3RhbnQuCiAJICogSGlnaGVyIEFHQyAoaGlnaGVyIHJhZGlvIGdhaW4pIG1lYW5zIGxvd2VyIHNpZ25hbC4gKi8KLQlyZXR1cm4gbWF4X3Jzc2kgLSBhZ2MgLSBJV0xfUlNTSV9PRkZTRVQ7CisJcmV0dXJuIG1heF9yc3NpIC0gYWdjIC0gSVdMNDlfUlNTSV9PRkZTRVQ7CiB9CiAKIApAQCAtMjI4Nyw2ICsyMjg4LDkgQEAKIAkudHhxX3NldF9zY2hlZCA9IGl3bDQ5NjVfdHhxX3NldF9zY2hlZCwKIAkudHhxX2FnZ19lbmFibGUgPSBpd2w0OTY1X3R4cV9hZ2dfZW5hYmxlLAogCS50eHFfYWdnX2Rpc2FibGUgPSBpd2w0OTY1X3R4cV9hZ2dfZGlzYWJsZSwKKwkudHhxX2F0dGFjaF9idWZfdG9fdGZkID0gaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZCwKKwkudHhxX2ZyZWVfdGZkID0gaXdsX2h3X3R4cV9mcmVlX3RmZCwKKwkudHhxX2luaXQgPSBpd2xfaHdfdHhfcXVldWVfaW5pdCwKIAkucnhfaGFuZGxlcl9zZXR1cCA9IGl3bDQ5NjVfcnhfaGFuZGxlcl9zZXR1cCwKIAkuc2V0dXBfZGVmZXJyZWRfd29yayA9IGl3bDQ5NjVfc2V0dXBfZGVmZXJyZWRfd29yaywKIAkuY2FuY2VsX2RlZmVycmVkX3dvcmsgPSBpd2w0OTY1X2NhbmNlbF9kZWZlcnJlZF93b3JrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCmluZGV4IDgyYzM4NTkuLjE1Y2FjNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OCwxMCArNjgsMTYgQEAKICNpZm5kZWYgX19pd2xfNTAwMF9od19oX18KICNkZWZpbmUgX19pd2xfNTAwMF9od19oX18KIAorI2RlZmluZSBJV0w1MF9SVENfSU5TVF9MT1dFUl9CT1VORAkJKDB4MDAwMDAwKQogI2RlZmluZSBJV0w1MF9SVENfSU5TVF9VUFBFUl9CT1VORAkJKDB4MDIwMDAwKQorCisjZGVmaW5lIElXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5ECQkoMHg4MDAwMDApCiAjZGVmaW5lIElXTDUwX1JUQ19EQVRBX1VQUEVSX0JPVU5ECQkoMHg4MEMwMDApCi0jZGVmaW5lIElXTDUwX1JUQ19JTlNUX1NJWkUgKElXTDUwX1JUQ19JTlNUX1VQUEVSX0JPVU5EIC0gUlRDX0lOU1RfTE9XRVJfQk9VTkQpCi0jZGVmaW5lIElXTDUwX1JUQ19EQVRBX1NJWkUgKElXTDUwX1JUQ19EQVRBX1VQUEVSX0JPVU5EIC0gUlRDX0RBVEFfTE9XRVJfQk9VTkQpCisKKyNkZWZpbmUgSVdMNTBfUlRDX0lOU1RfU0laRSAoSVdMNTBfUlRDX0lOU1RfVVBQRVJfQk9VTkQgLSBcCisJCQkJSVdMNTBfUlRDX0lOU1RfTE9XRVJfQk9VTkQpCisjZGVmaW5lIElXTDUwX1JUQ19EQVRBX1NJWkUgKElXTDUwX1JUQ19EQVRBX1VQUEVSX0JPVU5EIC0gXAorCQkJCUlXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKQogCiAvKiBFRVBST00gKi8KICNkZWZpbmUgSVdMXzUwMDBfRUVQUk9NX0lNR19TSVpFCQkJMjA0OApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IDY2ZDA1M2QuLmU1Y2EyNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDctMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQzLDEwICs0MywxMSBAQAogI2luY2x1ZGUgIml3bC1zdGEuaCIKICNpbmNsdWRlICJpd2wtaGVscGVycy5oIgogI2luY2x1ZGUgIml3bC01MDAwLWh3LmgiCisjaW5jbHVkZSAiaXdsLTYwMDAtaHcuaCIKIAogLyogSGlnaGVzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgSVdMNTAwMF9VQ09ERV9BUElfTUFYIDEKLSNkZWZpbmUgSVdMNTE1MF9VQ09ERV9BUElfTUFYIDEKKyNkZWZpbmUgSVdMNTE1MF9VQ09ERV9BUElfTUFYIDIKIAogLyogTG93ZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLwogI2RlZmluZSBJV0w1MDAwX1VDT0RFX0FQSV9NSU4gMQpAQCAtODQsNyArODUsNyBAQAogCQkJCSAgQ1NSX1JFU0VUX1JFR19GTEFHX01BU1RFUl9ESVNBQkxFRCwgMTAwKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlJV0xfREVCVUdfSU5GTygic3RvcCBtYXN0ZXJcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJzdG9wIG1hc3RlclxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwOCw3ICsxMDksOCBAQAogCWl3bF9zZXRfYml0KHByaXYsIENTUl9IV19JRl9DT05GSUdfUkVHLAogCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfQklUX0hBUF9XQUtFX0wxQSk7CiAKLQlpd2xfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCk7CisJaWYgKHByaXYtPmNmZy0+bmVlZF9wbGxfY2ZnKQorCQlpd2xfc2V0X2JpdChwcml2LCBDU1JfQU5BX1BMTF9DRkcsIENTUjUwX0FOQV9QTExfQ0ZHX1ZBTCk7CiAKIAkvKiBzZXQgImluaXRpYWxpemF0aW9uIGNvbXBsZXRlIiBiaXQgdG8gbW92ZSBhZGFwdGVyCiAJICogRDBVKiAtLT4gRDBBKiBzdGF0ZSAqLwpAQCAtMTE4LDcgKzEyMCw3IEBACiAJcmV0ID0gaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCiAJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZLCAyNTAwMCk7CiAJaWYgKHJldCA8IDApIHsKLQkJSVdMX0RFQlVHX0lORk8oIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkZhaWxlZCB0byBpbml0IHRoZSBjYXJkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTE3Niw3ICsxNzgsOCBAQAogCiAJLyogRklYTUU6IHB1dCBoZXJlIEwxQSAtTDBTIHcvYSAqLwogCi0JaXdsX3NldF9iaXQocHJpdiwgQ1NSX0FOQV9QTExfQ0ZHLCBDU1I1MF9BTkFfUExMX0NGR19WQUwpOworCWlmIChwcml2LT5jZmctPm5lZWRfcGxsX2NmZykKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0FOQV9QTExfQ0ZHLCBDU1I1MF9BTkFfUExMX0NGR19WQUwpOwogCiAJLyogc2V0ICJpbml0aWFsaXphdGlvbiBjb21wbGV0ZSIgYml0IHRvIG1vdmUgYWRhcHRlcgogCSAqIEQwVSogLS0+IEQwQSogc3RhdGUgKi8KQEAgLTE4Niw3ICsxODksNyBAQAogCXJldCA9IGl3bF9wb2xsX2RpcmVjdF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjE2LDE4ICsyMTksMTkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUxNiByYWRpb19jZmc7Ci0JdTE2IGxpbms7CisJdTE2IGxjdGw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NGR19MSU5LX0NUUkwsICZsaW5rKTsKKwlsY3RsID0gaXdsX3BjaWVfbGlua19jdGwocHJpdik7CiAKLQkvKiBMMSBpcyBlbmFibGVkIGJ5IEJJT1MgKi8KLQlpZiAoKGxpbmsgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pID09IFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikKLQkJLyogZGlzYWJsZSBMMFMgZGlzYWJsZWQgTDFBIGVuYWJsZWQgKi8KKwkvKiBIVyBidWcgVy9BICovCisJLyogTDEtQVNQTSBpcyBlbmFibGVkIGJ5IEJJT1MgKi8KKwlpZiAoKGxjdGwgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDFfRU4pID09IFBDSV9DRkdfTElOS19DVFJMX1ZBTF9MMV9FTikKKwkJLyogTDEtQVBTTSBlbmFibGVkOiBkaXNhYmxlIEwwUyAgKi8KIAkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dJT19SRUcsIENTUl9HSU9fUkVHX1ZBTF9MMFNfRU5BQkxFRCk7CiAJZWxzZQotCQkvKiBMMFMgZW5hYmxlZCBMMUEgZGlzYWJsZWQgKi8KKwkJLyogTDEtQVNQTSBkaXNhYmxlZDogZW5hYmxlIEwwUyAqLwogCQlpd2xfY2xlYXJfYml0KHByaXYsIENTUl9HSU9fUkVHLCBDU1JfR0lPX1JFR19WQUxfTDBTX0VOQUJMRUQpOwogCiAJcmFkaW9fY2ZnID0gaXdsX2VlcHJvbV9xdWVyeTE2KHByaXYsIEVFUFJPTV9SQURJT19DT05GSUcpOwpAQCAtMjg5LDcgKzI5Myw3IEBACiAJCW9mZnNldCA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fNTAwMF9MSU5LX09USEVSUyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9FUlJPUigiaWxsZWdhbCBpbmRpcmVjdCB0eXBlOiAweCVYXG4iLAorCQlJV0xfRVJSKHByaXYsICJpbGxlZ2FsIGluZGlyZWN0IHR5cGU6IDB4JVhcbiIsCiAJCWFkZHJlc3MgJiBJTkRJUkVDVF9UWVBFX01TSyk7CiAJCWJyZWFrOwogCX0KQEAgLTMzOCw3ICszNDIsNyBAQAogCQkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldIHw9ICgxIDw8IDIpOwogCX0KIAotCUlXTF9ERUJVR19DQUxJQigiRGVsdGEgZ2FpbnM6IEFOVF9CID0gJWQgIEFOVF9DID0gJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJEZWx0YSBnYWluczogQU5UX0IgPSAlZCAgQU5UX0MgPSAlZFxuIiwKIAkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVsxXSwgZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlWzJdKTsKIAogCWlmICghZGF0YS0+cmFkaW9fd3JpdGUpIHsKQEAgLTM4NCwxMyArMzg4LDE0IEBACiAJCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRCwKIAkJCQkJc2l6ZW9mKGNtZCksICZjbWQpOwogCQlpZiAocmV0KQotCQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgc2VuZCBSRVBMWV9QSFlfQ0FMSUJSQVRJT05fQ01EXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCQkiQ291bGQgbm90IHNlbmQgUkVQTFlfUEhZX0NBTElCUkFUSU9OX0NNRFxuIik7CiAJCWRhdGEtPnN0YXRlID0gSVdMX0NIQUlOX05PSVNFX0FDQ1VNVUxBVEU7Ci0JCUlXTF9ERUJVR19DQUxJQigiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiUnVuIGNoYWluX25vaXNlX2NhbGlicmF0ZVxuIik7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBpd2w1MDAwX3J0c190eF9jbWRfZmxhZyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCit2b2lkIGl3bDUwMDBfcnRzX3R4X2NtZF9mbGFnKHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbywKIAkJCV9fbGUzMiAqdHhfZmxhZ3MpCiB7CiAJaWYgKChpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9SVFNfQ1RTKSB8fApAQCAtNTA3LDcgKzUxMiw3IEBACiAJCWluZGV4ID0gSVdMX0NBTElCX0JBU0VfQkFORDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJVbmtub3duIGNhbGlicmF0aW9uIG5vdGlmaWNhdGlvbiAlZFxuIiwKKwkJSVdMX0VSUihwcml2LCAiVW5rbm93biBjYWxpYnJhdGlvbiBub3RpZmljYXRpb24gJWRcbiIsCiAJCQkgIGhkci0+b3BfY29kZSk7CiAJCXJldHVybjsKIAl9CkBAIC01MTcsNyArNTIyLDcgQEAKIHN0YXRpYyB2b2lkIGl3bDUwMDBfcnhfY2FsaWJfY29tcGxldGUoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCUlXTF9ERUJVR19JTkZPKCJJbml0LiBjYWxpYnJhdGlvbiBpcyBjb21wbGV0ZWQsIHJlc3RhcnRpbmcgZncuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdC4gY2FsaWJyYXRpb24gaXMgY29tcGxldGVkLCByZXN0YXJ0aW5nIGZ3LlxuIik7CiAJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKIH0KIApAQCAtNTgwLDQwICs1ODUsNDEgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCXJldCA9IGl3bDUwMDBfbG9hZF9zZWN0aW9uKHByaXYsIGluc3RfaW1hZ2UsIFJUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwlyZXQgPSBpd2w1MDAwX2xvYWRfc2VjdGlvbihwcml2LCBpbnN0X2ltYWdlLAorCQkJCSAgIElXTDUwX1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JSVdMX0RFQlVHX0lORk8oIklOU1QgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJJTlNUIHVDb2RlIHNlY3Rpb24gYmVpbmcgbG9hZGVkLi4uXG4iKTsKIAlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCiAJCQkJCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlLCA1ICogSFopOwogCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvbiBkdWUgIgorCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uIGR1ZSAiCiAJCQkidG8gaW50ZXJydXB0XG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJaWYgKCFyZXQpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvblxuIik7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIAogCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlID0gMDsKIAogCXJldCA9IGl3bDUwMDBfbG9hZF9zZWN0aW9uKAotCQlwcml2LCBkYXRhX2ltYWdlLCBSVENfREFUQV9MT1dFUl9CT1VORCk7CisJCXByaXYsIGRhdGFfaW1hZ2UsIElXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JSVdMX0RFQlVHX0lORk8oIkRBVEEgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJEQVRBIHVDb2RlIHNlY3Rpb24gYmVpbmcgbG9hZGVkLi4uXG4iKTsKIAogCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSwKIAkJCQlwcml2LT51Y29kZV93cml0ZV9jb21wbGV0ZSwgNSAqIEhaKTsKIAlpZiAocmV0ID09IC1FUkVTVEFSVFNZUykgewotCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBsb2FkIHRoZSBJTlNUIHVDb2RlIHNlY3Rpb24gZHVlICIKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGxvYWQgdGhlIElOU1QgdUNvZGUgc2VjdGlvbiBkdWUgIgogCQkJInRvIGludGVycnVwdFxuIik7CiAJCXJldHVybiByZXQ7CiAJfSBlbHNlIGlmICghcmV0KSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGxvYWQgdGhlIERBVEEgdUNvZGUgc2VjdGlvblxuIik7CisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBsb2FkIHRoZSBEQVRBIHVDb2RlIHNlY3Rpb25cbiIpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9IGVsc2UKIAkJcmV0ID0gMDsKQEAgLTYyOSwyMCArNjM1LDIwIEBACiAKIAkvKiBjaGVjayB3aGV0aGVyIGluaXQgdWNvZGUgc2hvdWxkIGJlIGxvYWRlZCwgb3IgcmF0aGVyIHJ1bnRpbWUgdWNvZGUgKi8KIAlpZiAocHJpdi0+dWNvZGVfaW5pdC5sZW4gJiYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfTk9ORSkpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXQgdWNvZGUgZm91bmQuIExvYWRpbmcgaW5pdCB1Y29kZS4uLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0IHVjb2RlIGZvdW5kLiBMb2FkaW5nIGluaXQgdWNvZGUuLi5cbiIpOwogCQlyZXQgPSBpd2w1MDAwX2xvYWRfZ2l2ZW5fdWNvZGUocHJpdiwKIAkJCSZwcml2LT51Y29kZV9pbml0LCAmcHJpdi0+dWNvZGVfaW5pdF9kYXRhKTsKIAkJaWYgKCFyZXQpIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJJbml0IHVjb2RlIGxvYWQgY29tcGxldGUuXG4iKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0IHVjb2RlIGxvYWQgY29tcGxldGUuXG4iKTsKIAkJCXByaXYtPnVjb2RlX3R5cGUgPSBVQ09ERV9JTklUOwogCQl9CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXQgdWNvZGUgbm90IGZvdW5kLCBvciBhbHJlYWR5IGxvYWRlZC4gIgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdCB1Y29kZSBub3QgZm91bmQsIG9yIGFscmVhZHkgbG9hZGVkLiAiCiAJCQkiTG9hZGluZyBydW50aW1lIHVjb2RlLi4uXG4iKTsKIAkJcmV0ID0gaXdsNTAwMF9sb2FkX2dpdmVuX3Vjb2RlKHByaXYsCiAJCQkmcHJpdi0+dWNvZGVfY29kZSwgJnByaXYtPnVjb2RlX2RhdGEpOwogCQlpZiAoIXJldCkgewotCQkJSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgdWNvZGUgbG9hZCBjb21wbGV0ZS5cbiIpOwogCQkJcHJpdi0+dWNvZGVfdHlwZSA9IFVDT0RFX1JUOwogCQl9CiAJfQpAQCAtNjU4LDcgKzY2NCw3IEBACiAJaWYgKHByaXYtPmNhcmRfYWxpdmVfaW5pdC5pc192YWxpZCAhPSBVQ09ERV9WQUxJRF9PSykgewogCQkvKiBXZSBoYWQgYW4gZXJyb3IgYnJpbmdpbmcgdXAgdGhlIGhhcmR3YXJlLCBzbyB0YWtlIGl0CiAJCSAqIGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSBBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtNjY4LDE0ICs2NzQsMTUgQEAKIAlpZiAoaXdsX3ZlcmlmeV91Y29kZShwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJhZCBcImluaXRpYWxpemVcIiB1Q29kZSBsb2FkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKIAlpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YWxpdmVfbm90aWZ5KHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uOiAlZFxuIiwgcmV0KTsKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJDb3VsZCBub3QgY29tcGxldGUgQUxJVkUgdHJhbnNpdGlvbjogJWRcbiIsIHJldCk7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTcxMCw3ICs3MTcsNyBAQAogCiAJdHhxLT5zY2hlZF9yZXRyeSA9IHNjZF9yZXRyeTsKIAotCUlXTF9ERUJVR19JTkZPKCIlcyAlcyBRdWV1ZSAlZCBvbiBBQyAlZFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiJXMgJXMgUXVldWUgJWQgb24gQUMgJWRcbiIsCiAJCSAgICAgICBhY3RpdmUgPyAiQWN0aXZhdGUiIDogIkRlYWN0aXZhdGUiLAogCQkgICAgICAgc2NkX3JldHJ5ID8gIkJBIiA6ICJBQyIsIHR4cV9pZCwgdHhfZmlmb19pZCk7CiB9CkBAIC04MjQsOCArODMxLDkgQEAKIHsKIAlpZiAoKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA+IElXTDUwX05VTV9RVUVVRVMpIHx8CiAJICAgIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPCBJV0xfTUlOX05VTV9RVUVVRVMpKSB7Ci0JCUlXTF9FUlJPUigiaW52YWxpZCBxdWV1ZXNfbnVtLCBzaG91bGQgYmUgYmV0d2VlbiAlZCBhbmQgJWRcbiIsCi0JCQkgIElXTF9NSU5fTlVNX1FVRVVFUywgSVdMNTBfTlVNX1FVRVVFUyk7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJpbnZhbGlkIHF1ZXVlc19udW0sIHNob3VsZCBiZSBiZXR3ZWVuICVkIGFuZCAlZFxuIiwKKwkJCUlXTF9NSU5fTlVNX1FVRVVFUywgSVdMNTBfTlVNX1FVRVVFUyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODMzLDYzICs4NDEsNDcgQEAKIAlwcml2LT5od19wYXJhbXMuZG1hX2NobmxfbnVtID0gRkg1MF9UQ1NSX0NITkxfTlVNOwogCXByaXYtPmh3X3BhcmFtcy5zY2RfYmNfdGJsc19zaXplID0KIAkJCUlXTDUwX05VTV9RVUVVRVMgKiBzaXplb2Yoc3RydWN0IGl3bDUwMDBfc2NkX2JjX3RibCk7CisJcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfdGZkKTsKIAlwcml2LT5od19wYXJhbXMubWF4X3N0YXRpb25zID0gSVdMNTAwMF9TVEFUSU9OX0NPVU5UOwogCXByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQgPSBJV0w1MDAwX0JST0FEQ0FTVF9JRDsKLQlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDUwX1JUQ19EQVRBX1NJWkU7Ci0JcHJpdi0+aHdfcGFyYW1zLm1heF9pbnN0X3NpemUgPSBJV0w1MF9SVENfSU5TVF9TSVpFOworCisJc3dpdGNoIChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSB7CisJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNngwMDoKKwljYXNlIENTUl9IV19SRVZfVFlQRV82eDUwOgorCQlwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSA9IElXTDYwX1JUQ19EQVRBX1NJWkU7CisJCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMNjBfUlRDX0lOU1RfU0laRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUgPSBJV0w1MF9SVENfREFUQV9TSVpFOworCQlwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSA9IElXTDUwX1JUQ19JTlNUX1NJWkU7CisJfQorCiAJcHJpdi0+aHdfcGFyYW1zLm1heF9ic21fc2l6ZSA9IDA7CiAJcHJpdi0+aHdfcGFyYW1zLmZhdF9jaGFubmVsID0gIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSB8CiAJCQkJCUJJVChJRUVFODAyMTFfQkFORF81R0haKTsKKwlwcml2LT5od19wYXJhbXMucnhfd3J0X3B0cl9yZWcgPSBGSF9SU0NTUl9DSE5MMF9XUFRSOworCiAJcHJpdi0+aHdfcGFyYW1zLnNlbnMgPSAmaXdsNTAwMF9zZW5zaXRpdml0eTsKIAotCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgewotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxMDA6Ci0JCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gMTsKLQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAyOwotCQlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gQU5UX0I7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBBTlRfQUI7Ci0JCWJyZWFrOwotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUxNTA6Ci0JCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gMTsKLQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSAyOwotCQlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gQU5UX0E7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBBTlRfQUI7Ci0JCWJyZWFrOwotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzMDA6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTM1MDoKLQkJcHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPSAzOwotCQlwcml2LT5od19wYXJhbXMucnhfY2hhaW5zX251bSA9IDM7Ci0JCXByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgPSBBTlRfQUJDOwotCQlwcml2LT5od19wYXJhbXMudmFsaWRfcnhfYW50ID0gQU5UX0FCQzsKLQkJYnJlYWs7Ci0JfQorCXByaXYtPmh3X3BhcmFtcy50eF9jaGFpbnNfbnVtID0gbnVtX29mX2FudChwcml2LT5jZmctPnZhbGlkX3R4X2FudCk7CisJcHJpdi0+aHdfcGFyYW1zLnJ4X2NoYWluc19udW0gPSBudW1fb2ZfYW50KHByaXYtPmNmZy0+dmFsaWRfcnhfYW50KTsKKwlwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ID0gcHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQ7CisJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3J4X2FudCA9IHByaXYtPmNmZy0+dmFsaWRfcnhfYW50OwogCiAJc3dpdGNoIChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSB7Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTEwMDoKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MzAwOgotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzNTA6Ci0JCS8qIDVYMDAgYW5kIDUzNTAgd2FudHMgaW4gQ2Vsc2l1cyAqLwotCQlwcml2LT5od19wYXJhbXMuY3Rfa2lsbF90aHJlc2hvbGQgPSBDVF9LSUxMX1RIUkVTSE9MRDsKLQkJYnJlYWs7CiAJY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTE1MDoKIAkJLyogNTE1MCB3YW50cyBpbiBLZWx2aW4gKi8KIAkJcHJpdi0+aHdfcGFyYW1zLmN0X2tpbGxfdGhyZXNob2xkID0KIAkJCQlpd2w1MTUwX2dldF9jdF90aHJlc2hvbGQocHJpdik7CiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGFsbCBvdGhlcnMgd2FudCBDZWxzaXVzICovCisJCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX3RocmVzaG9sZCA9IENUX0tJTExfVEhSRVNIT0xEOworCQlicmVhazsKIAl9CiAKIAkvKiBTZXQgaW5pdGlhbCBjYWxpYnJhdGlvbiBzZXQgKi8KIAlzd2l0Y2ggKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spIHsKLQljYXNlIENTUl9IV19SRVZfVFlQRV81MTAwOgotCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzUzMDA6Ci0JY2FzZSBDU1JfSFdfUkVWX1RZUEVfNTM1MDoKLQkJcHJpdi0+aHdfcGFyYW1zLmNhbGliX2luaXRfY2ZnID0KLQkJCUJJVChJV0xfQ0FMSUJfWFRBTCkJCXwKLQkJCUJJVChJV0xfQ0FMSUJfTE8pCQl8Ci0JCQlCSVQoSVdMX0NBTElCX1RYX0lRKSAJCXwKLQkJCUJJVChJV0xfQ0FMSUJfVFhfSVFfUEVSRCkJfAotCQkJQklUKElXTF9DQUxJQl9CQVNFX0JBTkQpOwotCQlicmVhazsKIAljYXNlIENTUl9IV19SRVZfVFlQRV81MTUwOgogCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQogCQkJQklUKElXTF9DQUxJQl9EQykJCXwKQEAgLTg5OCw2ICs4OTAsMTQgQEAKIAkJCUJJVChJV0xfQ0FMSUJfQkFTRV9CQU5EKTsKIAogCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQorCQkJQklUKElXTF9DQUxJQl9YVEFMKQkJfAorCQkJQklUKElXTF9DQUxJQl9MTykJCXwKKwkJCUJJVChJV0xfQ0FMSUJfVFhfSVEpIAkJfAorCQkJQklUKElXTF9DQUxJQl9UWF9JUV9QRVJEKQl8CisJCQlCSVQoSVdMX0NBTElCX0JBU0VfQkFORCk7CisJCWJyZWFrOwogCX0KIAogCkBAIC0xMDExLDcgKzEwMTEsOCBAQAogCiAJaWYgKChJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX1dBUk4ocHJpdiwKKwkJCSJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKIAkJCXR4cV9pZCwgSVdMNTBfRklSU1RfQU1QRFVfUVVFVUUsCiAJCQlJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSArIElXTDUwX05VTV9BTVBEVV9RVUVVRVMgLSAxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMDc2LDcgKzEwNzcsOCBAQAogCiAJaWYgKChJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSA+IHR4cV9pZCkgfHwKIAkgICAgKElXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyA8PSB0eHFfaWQpKSB7Ci0JCUlXTF9XQVJOSU5HKCJxdWV1ZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlZCwgbXVzdCBiZSAlZCB0byAlZFxuIiwKKwkJSVdMX0VSUihwcml2LAorCQkJInF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2U6ICVkLCBtdXN0IGJlICVkIHRvICVkXG4iLAogCQkJdHhxX2lkLCBJV0w1MF9GSVJTVF9BTVBEVV9RVUVVRSwKIAkJCUlXTDUwX0ZJUlNUX0FNUERVX1FVRVVFICsgSVdMNTBfTlVNX0FNUERVX1FVRVVFUyAtIDEpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMDQsNyArMTEwNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MTYgaXdsNTAwMF9idWlsZF9hZGRzdGFfaGNtZChjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpCit1MTYgaXdsNTAwMF9idWlsZF9hZGRzdGFfaGNtZChjb25zdCBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmNtZCwgdTggKmRhdGEpCiB7CiAJdTE2IHNpemUgPSAodTE2KXNpemVvZihzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQpOwogCW1lbWNweShkYXRhLCBjbWQsIHNpemUpOwpAQCAtMTE0Miw3ICsxMTQ0LDcgQEAKIAl1MTYgc2VxOwogCiAJaWYgKGFnZy0+d2FpdF9mb3JfYmEpCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiZ290IHR4IHJlc3BvbnNlIHcvbyBibG9jay1hY2tcbiIpOworCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgImdvdCB0eCByZXNwb25zZSB3L28gYmxvY2stYWNrXG4iKTsKIAogCWFnZy0+ZnJhbWVfY291bnQgPSB0eF9yZXNwLT5mcmFtZV9jb3VudDsKIAlhZ2ctPnN0YXJ0X2lkeCA9IHN0YXJ0X2lkeDsKQEAgLTExNTYsNyArMTE1OCw3IEBACiAJCWlkeCA9IHN0YXJ0X2lkeDsKIAogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uICovCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgU3RhcnRJZHg9JWQgaWR4PSVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkZyYW1lQ250ID0gJWQsIFN0YXJ0SWR4PSVkIGlkeD0lZFxuIiwKIAkJCQkgICBhZ2ctPmZyYW1lX2NvdW50LCBhZ2ctPnN0YXJ0X2lkeCwgaWR4KTsKIAogCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihwcml2LT50eHFbdHhxX2lkXS50eGJbaWR4XS5za2JbMF0pOwpAQCAtMTE2OCw5ICsxMTcwLDkgQEAKIAogCQkvKiBGSVhNRTogY29kZSByZXBldGl0aW9uIGVuZCAqLwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiMSBGcmFtZSAweCV4IGZhaWx1cmUgOiVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIjEgRnJhbWUgMHgleCBmYWlsdXJlIDolZFxuIiwKIAkJCQkgICAgc3RhdHVzICYgMHhmZiwgdHhfcmVzcC0+ZmFpbHVyZV9mcmFtZSk7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiUmF0ZSBJbmZvIHJhdGVfbl9mbGFncz0leFxuIiwgcmF0ZV9uX2ZsYWdzKTsKKwkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSYXRlIEluZm8gcmF0ZV9uX2ZsYWdzPSV4XG4iLCByYXRlX25fZmxhZ3MpOwogCiAJCWFnZy0+d2FpdF9mb3JfYmEgPSAwOwogCX0gZWxzZSB7CkBAIC0xMTkwLDIxICsxMTkyLDIyIEBACiAJCQkJICAgICAgQUdHX1RYX1NUQVRFX0FCT1JUX01TSykpCiAJCQkJY29udGludWU7CiAKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKKwkJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVDbnQgPSAlZCwgdHhxX2lkPSVkIGlkeD0lZFxuIiwKIAkJCQkJICAgYWdnLT5mcmFtZV9jb3VudCwgdHhxX2lkLCBpZHgpOwogCiAJCQloZHIgPSBpd2xfdHhfcXVldWVfZ2V0X2hkcihwcml2LCB0eHFfaWQsIGlkeCk7CiAKIAkJCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CiAJCQlpZiAoaWR4ICE9IChTRVFfVE9fU04oc2MpICYgMHhmZikpIHsKLQkJCQlJV0xfRVJST1IoIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKLQkJCQkJICAiIGlkeD0lZCwgc2VxX2lkeD0lZCwgc2VxPSVkXG4iLAorCQkJCUlXTF9FUlIocHJpdiwKKwkJCQkJIkJVR19PTiBpZHggZG9lc24ndCBtYXRjaCBzZXEgY29udHJvbCIKKwkJCQkJIiBpZHg9JWQsIHNlcV9pZHg9JWQsIHNlcT0lZFxuIiwKIAkJCQkJICBpZHgsIFNFUV9UT19TTihzYyksCiAJCQkJCSAgaGRyLT5zZXFfY3RybCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCi0JCQlJV0xfREVCVUdfVFhfUkVQTFkoIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIkFHRyBGcmFtZSBpPSVkIGlkeCAlZCBzZXE9JWRcbiIsCiAJCQkJCSAgIGksIGlkeCwgU0VRX1RPX1NOKHNjKSk7CiAKIAkJCXNoID0gaWR4IC0gc3RhcnQ7CkBAIC0xMjIyLDEzICsxMjI1LDEzIEBACiAJCQkJc2ggPSAwOwogCQkJfQogCQkJYml0bWFwIHw9IDFVTEwgPDwgc2g7Ci0JCQlJV0xfREVCVUdfVFhfUkVQTFkoInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgInN0YXJ0PSVkIGJpdG1hcD0weCVsbHhcbiIsCiAJCQkJCSAgIHN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CiAJCX0KIAogCQlhZ2ctPmJpdG1hcCA9IGJpdG1hcDsKIAkJYWdnLT5zdGFydF9pZHggPSBzdGFydDsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJGcmFtZXMgJWQgc3RhcnRfaWR4PSVkIGJpdG1hcD0weCVsbHhcbiIsCisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiRnJhbWVzICVkIHN0YXJ0X2lkeD0lZCBiaXRtYXA9MHglbGx4XG4iLAogCQkJCSAgIGFnZy0+ZnJhbWVfY291bnQsIGFnZy0+c3RhcnRfaWR4LAogCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYWdnLT5iaXRtYXApOwogCkBAIC0xMjU0LDcgKzEyNTcsNyBAQAogCWludCBmcmVlZDsKIAogCWlmICgoaW5kZXggPj0gdHhxLT5xLm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZCgmdHhxLT5xLCBpbmRleCkgPT0gMCkpIHsKLQkJSVdMX0VSUk9SKCJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgorCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxX2lkICglZCkgaW5kZXggJWQgIgogCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZFxuIiwgdHhxX2lkLAogCQkJICBpbmRleCwgdHhxLT5xLm5fYmQsIHR4cS0+cS53cml0ZV9wdHIsCiAJCQkgIHR4cS0+cS5yZWFkX3B0cik7CkBAIC0xMjgxLDcgKzEyODQsNyBAQAogCiAJCWlmICh0eHEtPnEucmVhZF9wdHIgIT0gKHNjZF9zc24gJiAweGZmKSkgewogCQkJaW5kZXggPSBpd2xfcXVldWVfZGVjX3dyYXAoc2NkX3NzbiAmIDB4ZmYsIHR4cS0+cS5uX2JkKTsKLQkJCUlXTF9ERUJVR19UWF9SRVBMWSgiUmV0cnkgc2NoZWR1bGVyIHJlY2xhaW0gIgorCQkJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJSZXRyeSBzY2hlZHVsZXIgcmVjbGFpbSAiCiAJCQkJCSJzY2Rfc3NuPSVkIGlkeD0lZCB0eHE9JWQgc3dxPSVkXG4iLAogCQkJCQlzY2Rfc3NuICwgaW5kZXgsIHR4cV9pZCwgdHhxLT5zd3FfaWQpOwogCkBAIC0xMjkyLDEwICsxMjk1LDkgQEAKIAkJCSAgICAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKSAmJgogCQkJICAgIChhZ2ctPnN0YXRlICE9IElXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQSkpIHsKIAkJCQlpZiAoYWdnLT5zdGF0ZSA9PSBJV0xfQUdHX09GRikKLQkJCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cV9pZCk7CisJCQkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiAJCQkJZWxzZQotCQkJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywKLQkJCQkJCQkgICAgIHR4cS0+c3dxX2lkKTsKKwkJCQkJaXdsX3dha2VfcXVldWUocHJpdiwgdHhxLT5zd3FfaWQpOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKQEAgLTEzMDgsNyArMTMxMCw3IEBACiAJCQkJCWxlMzJfdG9fY3B1KHR4X3Jlc3AtPnJhdGVfbl9mbGFncyksCiAJCQkJCWluZm8pOwogCi0JCUlXTF9ERUJVR19UWF9SRVBMWSgiVFhRICVkIHN0YXR1cyAlcyAoMHglMDh4KSByYXRlX25fZmxhZ3MgIgorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlRYUSAlZCBzdGF0dXMgJXMgKDB4JTA4eCkgcmF0ZV9uX2ZsYWdzICIKIAkJCQkgICAiMHgleCByZXRyaWVzICVkXG4iLAogCQkJCSAgIHR4cV9pZCwKIAkJCQkgICBpd2xfZ2V0X3R4X2ZhaWxfcmVhc29uKHN0YXR1cyksIHN0YXR1cywKQEAgLTEzMjEsMTggKzEzMjMsMTggQEAKIAogCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCAmJgogCQkgICAgKGl3bF9xdWV1ZV9zcGFjZSgmdHhxLT5xKSA+IHR4cS0+cS5sb3dfbWFyaykpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgdHhxX2lkKTsKKwkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cV9pZCk7CiAJfQogCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhX3Fvcyh0eF9yZXNwLT5mcmFtZV9jdHJsKSkKIAkJaXdsX3R4cV9jaGVja19lbXB0eShwcml2LCBzdGFfaWQsIHRpZCwgdHhxX2lkKTsKIAogCWlmIChpd2xfY2hlY2tfYml0cyhzdGF0dXMsIFRYX0FCT1JUX1JFUVVJUkVEX01TSykpCi0JCUlXTF9FUlJPUigiVE9ETzogIEltcGxlbWVudCBUeCBBQk9SVCBSRVFVSVJFRCEhIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlRPRE86ICBJbXBsZW1lbnQgVHggQUJPUlQgUkVRVUlSRUQhISFcbiIpOwogfQogCiAvKiBDdXJyZW50bHkgNTAwMCBpcyB0aGUgc3VwZXJzZXQgb2YgZXZlcnl0aGluZyAqLwotc3RhdGljIHUxNiBpd2w1MDAwX2dldF9oY21kX3NpemUodTggY21kX2lkLCB1MTYgbGVuKQordTE2IGl3bDUwMDBfZ2V0X2hjbWRfc2l6ZSh1OCBjbWRfaWQsIHUxNiBsZW4pCiB7CiAJcmV0dXJuIGxlbjsKIH0KQEAgLTEzNTYsNyArMTM1OCw3IEBACiAKIHN0YXRpYyBpbnQgaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyKHUzMiBhZGRyKQogewotCXJldHVybiAoYWRkciA+PSBSVENfREFUQV9MT1dFUl9CT1VORCkgJiYKKwlyZXR1cm4gKGFkZHIgPj0gSVdMNTBfUlRDX0RBVEFfTE9XRVJfQk9VTkQpICYmCiAJCShhZGRyIDwgSVdMNTBfUlRDX0RBVEFfVVBQRVJfQk9VTkQpOwogfQogCkBAIC0xMzc5LDcgKzEzODEsNyBAQAogCSAgICAocnhvbjEtPmFjcXVpc2l0aW9uX2RhdGEgPT0gcnhvbjItPmFjcXVpc2l0aW9uX2RhdGEpICYmCiAJICAgIChyeG9uMS0+cnhfY2hhaW4gPT0gcnhvbjItPnJ4X2NoYWluKSAmJgogCSAgICAocnhvbjEtPm9mZG1fYmFzaWNfcmF0ZXMgPT0gcnhvbjItPm9mZG1fYmFzaWNfcmF0ZXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTQwOSwxMiArMTQxMSwxOSBAQAogc3RhdGljIGludCAgaXdsNTAwMF9zZW5kX3R4X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsNTAwMF90eF9wb3dlcl9kYm1fY21kIHR4X3Bvd2VyX2NtZDsKKwl1OCB0eF9hbnRfY2ZnX2NtZDsKIAogCS8qIGhhbGYgZEJtIG5lZWQgdG8gbXVsdGlwbHkgKi8KIAl0eF9wb3dlcl9jbWQuZ2xvYmFsX2xtdCA9IChzOCkoMiAqIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KTsKIAl0eF9wb3dlcl9jbWQuZmxhZ3MgPSBJV0w1MF9UWF9QT1dFUl9OT19DTE9TRUQ7CiAJdHhfcG93ZXJfY21kLnNydl9jaGFuX2xtdCA9IElXTDUwX1RYX1BPV0VSX0FVVE87Ci0JcmV0dXJuICBpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1RYX1BPV0VSX0RCTV9DTUQsCisKKwlpZiAoSVdMX1VDT0RFX0FQSShwcml2LT51Y29kZV92ZXIpID09IDEpCisJCXR4X2FudF9jZmdfY21kID0gUkVQTFlfVFhfUE9XRVJfREJNX0NNRF9WMTsKKwllbHNlCisJCXR4X2FudF9jZmdfY21kID0gUkVQTFlfVFhfUE9XRVJfREJNX0NNRDsKKworCXJldHVybiAgaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCB0eF9hbnRfY2ZnX2NtZCwKIAkJCQkgICAgICAgc2l6ZW9mKHR4X3Bvd2VyX2NtZCksICZ0eF9wb3dlcl9jbWQsCiAJCQkJICAgICAgIE5VTEwpOwogfQpAQCAtMTQyNiw3ICsxNDM1LDcgQEAKIH0KIAogLyogQ2FsYyBtYXggc2lnbmFsIGxldmVsIChkQm0pIGFtb25nIDMgcG9zc2libGUgcmVjZWl2ZXJzICovCi1zdGF0aWMgaW50IGl3bDUwMDBfY2FsY19yc3NpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK2ludCBpd2w1MDAwX2NhbGNfcnNzaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgIHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqcnhfcmVzcCkKIHsKIAkvKiBkYXRhIGZyb20gUEhZL0RTUCByZWdhcmRpbmcgc2lnbmFsIHN0cmVuZ3RoLCBldGMuLApAQCAtMTQ1NSwxOSArMTQ2NCwxOSBAQAogCW1heF9yc3NpID0gbWF4X3QodTMyLCByc3NpX2EsIHJzc2lfYik7CiAJbWF4X3Jzc2kgPSBtYXhfdCh1MzIsIG1heF9yc3NpLCByc3NpX2MpOwogCi0JSVdMX0RFQlVHX1NUQVRTKCJSc3NpIEluIEEgJWQgQiAlZCBDICVkIE1heCAlZCBBR0MgZEIgJWRcbiIsCisJSVdMX0RFQlVHX1NUQVRTKHByaXYsICJSc3NpIEluIEEgJWQgQiAlZCBDICVkIE1heCAlZCBBR0MgZEIgJWRcbiIsCiAJCXJzc2lfYSwgcnNzaV9iLCByc3NpX2MsIG1heF9yc3NpLCBhZ2MpOwogCiAJLyogZEJtID0gbWF4X3Jzc2kgZEIgLSBhZ2MgZEIgLSBjb25zdGFudC4KIAkgKiBIaWdoZXIgQUdDIChoaWdoZXIgcmFkaW8gZ2FpbikgbWVhbnMgbG93ZXIgc2lnbmFsLiAqLwotCXJldHVybiBtYXhfcnNzaSAtIGFnYyAtIElXTF9SU1NJX09GRlNFVDsKKwlyZXR1cm4gbWF4X3Jzc2kgLSBhZ2MgLSBJV0w0OV9SU1NJX09GRlNFVDsKIH0KIAotc3RhdGljIHN0cnVjdCBpd2xfaGNtZF9vcHMgaXdsNTAwMF9oY21kID0geworc3RydWN0IGl3bF9oY21kX29wcyBpd2w1MDAwX2hjbWQgPSB7CiAJLnJ4b25fYXNzb2MgPSBpd2w1MDAwX3NlbmRfcnhvbl9hc3NvYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDUwMDBfaGNtZF91dGlscyA9IHsKK3N0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsNTAwMF9oY21kX3V0aWxzID0gewogCS5nZXRfaGNtZF9zaXplID0gaXdsNTAwMF9nZXRfaGNtZF9zaXplLAogCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQsCiAJLmdhaW5fY29tcHV0YXRpb24gPSBpd2w1MDAwX2dhaW5fY29tcHV0YXRpb24sCkBAIC0xNDc2LDEzICsxNDg1LDE2IEBACiAJLmNhbGNfcnNzaSA9IGl3bDUwMDBfY2FsY19yc3NpLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYiA9IHsKK3N0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYiA9IHsKIAkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKIAkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAogCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAogCS50eHFfc2V0X3NjaGVkID0gaXdsNTAwMF90eHFfc2V0X3NjaGVkLAogCS50eHFfYWdnX2VuYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19lbmFibGUsCiAJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlLAorCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAogCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNTAwMF9yeF9oYW5kbGVyX3NldHVwLAogCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrLAogCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLApAQCAtMTUxNywxMyArMTUyOSwxMyBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNTAwMF9vcHMgPSB7CitzdHJ1Y3QgaXdsX29wcyBpd2w1MDAwX29wcyA9IHsKIAkubGliID0gJml3bDUwMDBfbGliLAogCS5oY21kID0gJml3bDUwMDBfaGNtZCwKIAkudXRpbHMgPSAmaXdsNTAwMF9oY21kX3V0aWxzLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2w1MF9tb2RfcGFyYW1zID0geworc3RydWN0IGl3bF9tb2RfcGFyYW1zIGl3bDUwX21vZF9wYXJhbXMgPSB7CiAJLm51bV9vZl9xdWV1ZXMgPSBJV0w1MF9OVU1fUVVFVUVTLAogCS5udW1fb2ZfYW1wZHVfcXVldWVzID0gSVdMNTBfTlVNX0FNUERVX1FVRVVFUywKIAkuYW1zZHVfc2l6ZV84SyA9IDEsCkBAIC0xNTQzLDYgKzE1NTUsOSBAQAogCS5lZXByb21fdmVyID0gRUVQUk9NXzUwMDBfRUVQUk9NX1ZFUlNJT04sCiAJLmVlcHJvbV9jYWxpYl92ZXIgPSBFRVBST01fNTAwMF9UWF9QT1dFUl9WRVJTSU9OLAogCS5tb2RfcGFyYW1zID0gJml3bDUwX21vZF9wYXJhbXMsCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCisJLm5lZWRfcGxsX2NmZyA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2JnX2NmZyA9IHsKQEAgLTE1NTYsNiArMTU3MSw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0IsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWJnX2NmZyA9IHsKQEAgLTE1NjksNiArMTU4Nyw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0IsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxMDBfYWduX2NmZyA9IHsKQEAgLTE1ODIsNiArMTYwMyw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0IsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUzNTBfYWduX2NmZyA9IHsKQEAgLTE1OTUsNiArMTYxOSw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTA1MF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDUwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxNTBfYWduX2NmZyA9IHsKQEAgLTE2MDgsNiArMTYzNSw5IEBACiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNTA1MF9FRVBST01fVkVSU0lPTiwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDUwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0EsCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQiwKKwkubmVlZF9wbGxfY2ZnID0gdHJ1ZSwKIH07CiAKIE1PRFVMRV9GSVJNV0FSRShJV0w1MDAwX01PRFVMRV9GSVJNV0FSRShJV0w1MDAwX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDE4NTc3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oCkBAIC0wLDAgKzEsODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGZpbGUgaXMgcHJvdmlkZWQgdW5kZXIgYSBkdWFsIEJTRC9HUEx2MiBsaWNlbnNlLiAgV2hlbiB1c2luZyBvcgorICogcmVkaXN0cmlidXRpbmcgdGhpcyBmaWxlLCB5b3UgbWF5IGRvIHNvIHVuZGVyIGVpdGhlciBsaWNlbnNlLgorICoKKyAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKKyAqIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS5HUEwuCisgKgorICogQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAqICBJbnRlbCBMaW51eCBXaXJlbGVzcyA8aWx3QGxpbnV4LmludGVsLmNvbT4KKyAqIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyAqCisgKiBCU0QgTElDRU5TRQorICoKKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqICAqIE5laXRoZXIgdGhlIG5hbWUgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFBsZWFzZSB1c2UgdGhpcyBmaWxlIChpd2wtNjAwMC1ody5oKSBvbmx5IGZvciBoYXJkd2FyZS1yZWxhdGVkIGRlZmluaXRpb25zLgorICogVXNlIGl3bC01MDAwLWNvbW1hbmRzLmggZm9yIHVDb2RlIEFQSSBkZWZpbml0aW9ucy4KKyAqLworCisjaWZuZGVmIF9faXdsXzYwMDBfaHdfaF9fCisjZGVmaW5lIF9faXdsXzYwMDBfaHdfaF9fCisKKyNkZWZpbmUgSVdMNjBfUlRDX0lOU1RfTE9XRVJfQk9VTkQJCSgweDAwMDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0lOU1RfVVBQRVJfQk9VTkQJCSgweDA0MDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0RBVEFfTE9XRVJfQk9VTkQJCSgweDgwMDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0RBVEFfVVBQRVJfQk9VTkQJCSgweDgxNDAwMCkKKyNkZWZpbmUgSVdMNjBfUlRDX0lOU1RfU0laRSBcCisJKElXTDYwX1JUQ19JTlNUX1VQUEVSX0JPVU5EIC0gSVdMNjBfUlRDX0lOU1RfTE9XRVJfQk9VTkQpCisjZGVmaW5lIElXTDYwX1JUQ19EQVRBX1NJWkUgXAorCShJV0w2MF9SVENfREFUQV9VUFBFUl9CT1VORCAtIElXTDYwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKQorCisjZW5kaWYgLyogX19pd2xfNjAwMF9od19oX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZmE1ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQoYykgMjAwOC0yMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAsIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworI2luY2x1ZGUgIml3bC1lZXByb20uaCIKKyNpbmNsdWRlICJpd2wtZGV2LmgiCisjaW5jbHVkZSAiaXdsLWNvcmUuaCIKKyNpbmNsdWRlICJpd2wtaW8uaCIKKyNpbmNsdWRlICJpd2wtc3RhLmgiCisjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKKyNpbmNsdWRlICJpd2wtNTAwMC1ody5oIgorCisvKiBIaWdoZXN0IGZpcm13YXJlIEFQSSB2ZXJzaW9uIHN1cHBvcnRlZCAqLworI2RlZmluZSBJV0w2MDAwX1VDT0RFX0FQSV9NQVggMgorI2RlZmluZSBJV0w2MDUwX1VDT0RFX0FQSV9NQVggMgorCisvKiBMb3dlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCisjZGVmaW5lIElXTDYwMDBfVUNPREVfQVBJX01JTiAxCisjZGVmaW5lIElXTDYwNTBfVUNPREVfQVBJX01JTiAxCisKKyNkZWZpbmUgSVdMNjAwMF9GV19QUkUgIml3bHdpZmktNjAwMC0iCisjZGVmaW5lIF9JV0w2MDAwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDYwMDBfRldfUFJFICNhcGkgIi51Y29kZSIKKyNkZWZpbmUgSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKSBfSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoYXBpKQorCisjZGVmaW5lIElXTDYwNTBfRldfUFJFICJpd2x3aWZpLTYwNTAtIgorI2RlZmluZSBfSVdMNjA1MF9NT0RVTEVfRklSTVdBUkUoYXBpKSBJV0w2MDUwX0ZXX1BSRSAjYXBpICIudWNvZGUiCisjZGVmaW5lIElXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgX0lXTDYwNTBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkKKworc3RhdGljIHN0cnVjdCBpd2xfaGNtZF91dGlsc19vcHMgaXdsNjAwMF9oY21kX3V0aWxzID0geworCS5nZXRfaGNtZF9zaXplID0gaXdsNTAwMF9nZXRfaGNtZF9zaXplLAorCS5idWlsZF9hZGRzdGFfaGNtZCA9IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQsCisJLnJ0c190eF9jbWRfZmxhZyA9IGl3bDUwMDBfcnRzX3R4X2NtZF9mbGFnLAorCS5jYWxjX3Jzc2kgPSBpd2w1MDAwX2NhbGNfcnNzaSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXdsX29wcyBpd2w2MDAwX29wcyA9IHsKKwkubGliID0gJml3bDUwMDBfbGliLAorCS5oY21kID0gJml3bDUwMDBfaGNtZCwKKwkudXRpbHMgPSAmaXdsNjAwMF9oY21kX3V0aWxzLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWdfY2ZnID0geworCS5uYW1lID0gIjYwMDAgU2VyaWVzIDJ4MiBBRyIsCisJLmZ3X25hbWVfcHJlID0gSVdMNjAwMF9GV19QUkUsCisJLnVjb2RlX2FwaV9tYXggPSBJV0w2MDAwX1VDT0RFX0FQSV9NQVgsCisJLnVjb2RlX2FwaV9taW4gPSBJV0w2MDAwX1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0csCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAyeDIgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8yYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDUwIFNlcmllcyAyeDIgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDUwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwNTBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0JDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQkMsCisJLm5lZWRfcGxsX2NmZyA9IGZhbHNlLAorfTsKKworc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8zYWduX2NmZyA9IHsKKwkubmFtZSA9ICI2MDAwIFNlcmllcyAzeDMgQUdOIiwKKwkuZndfbmFtZV9wcmUgPSBJV0w2MDAwX0ZXX1BSRSwKKwkudWNvZGVfYXBpX21heCA9IElXTDYwMDBfVUNPREVfQVBJX01BWCwKKwkudWNvZGVfYXBpX21pbiA9IElXTDYwMDBfVUNPREVfQVBJX01JTiwKKwkuc2t1ID0gSVdMX1NLVV9BfElXTF9TS1VfR3xJV0xfU0tVX04sCisJLm9wcyA9ICZpd2w2MDAwX29wcywKKwkuZWVwcm9tX3NpemUgPSBJV0xfNTAwMF9FRVBST01fSU1HX1NJWkUsCisJLmVlcHJvbV92ZXIgPSBFRVBST01fNTAwMF9FRVBST01fVkVSU0lPTiwKKwkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV81MDAwX1RYX1BPV0VSX1ZFUlNJT04sCisJLm1vZF9wYXJhbXMgPSAmaXdsNTBfbW9kX3BhcmFtcywKKwkudmFsaWRfdHhfYW50ID0gQU5UX0FCQywKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCQywKKwkubmVlZF9wbGxfY2ZnID0gZmFsc2UsCit9OworCitzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzNhZ25fY2ZnID0geworCS5uYW1lID0gIjYwNTAgU2VyaWVzIDN4MyBBR04iLAorCS5md19uYW1lX3ByZSA9IElXTDYwNTBfRldfUFJFLAorCS51Y29kZV9hcGlfbWF4ID0gSVdMNjA1MF9VQ09ERV9BUElfTUFYLAorCS51Y29kZV9hcGlfbWluID0gSVdMNjA1MF9VQ09ERV9BUElfTUlOLAorCS5za3UgPSBJV0xfU0tVX0F8SVdMX1NLVV9HfElXTF9TS1VfTiwKKwkub3BzID0gJml3bDYwMDBfb3BzLAorCS5lZXByb21fc2l6ZSA9IElXTF81MDAwX0VFUFJPTV9JTUdfU0laRSwKKwkuZWVwcm9tX3ZlciA9IEVFUFJPTV81MDAwX0VFUFJPTV9WRVJTSU9OLAorCS5lZXByb21fY2FsaWJfdmVyID0gRUVQUk9NXzUwMDBfVFhfUE9XRVJfVkVSU0lPTiwKKwkubW9kX3BhcmFtcyA9ICZpd2w1MF9tb2RfcGFyYW1zLAorCS52YWxpZF90eF9hbnQgPSBBTlRfQUJDLAorCS52YWxpZF9yeF9hbnQgPSBBTlRfQUJDLAorCS5uZWVkX3BsbF9jZmcgPSBmYWxzZSwKK307CisKK01PRFVMRV9GSVJNV0FSRShJV0w2MDAwX01PRFVMRV9GSVJNV0FSRShJV0w2MDAwX1VDT0RFX0FQSV9NQVgpKTsKK01PRFVMRV9GSVJNV0FSRShJV0w2MDUwX01PRFVMRV9GSVJNV0FSRShJV0w2MDUwX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLWNoZWNrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24taGNtZC1jaGVjay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODEzN2VlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1oY21kLWNoZWNrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKLSAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLAotICogVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KLSAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLkdQTC4KLSAqCi0gKiBDb250YWN0IEluZm9ybWF0aW9uOgotICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgotICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSAiaXdsLWRldi5oIgotI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgotI2luY2x1ZGUgIml3bC1jb21tYW5kcy5oIgotCi0KLS8qKgotICogaXdsX2NoZWNrX3J4b25fY21kIC0gdmFsaWRhdGUgUlhPTiBzdHJ1Y3R1cmUgaXMgdmFsaWQKLSAqCi0gKiBOT1RFOiAgVGhpcyBpcyByZWFsbHkgb25seSB1c2VmdWwgZHVyaW5nIGRldmVsb3BtZW50IGFuZCBjYW4gZXZlbnR1YWxseQotICogYmUgI2lmZGVmJ2Qgb3V0IG9uY2UgdGhlIGRyaXZlciBpcyBzdGFibGUgYW5kIGZvbGtzIGFyZW4ndCBhY3RpdmVseQotICogbWFraW5nIGNoYW5nZXMKLSAqLwotaW50IGl3bF9hZ25fY2hlY2tfcnhvbl9jbWQoc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbikKLXsKLQlpbnQgZXJyb3IgPSAwOwotCWludCBjb3VudGVyID0gMTsKLQotCWlmIChyeG9uLT5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykgewotCQllcnJvciB8PSBsZTMyX3RvX2NwdShyeG9uLT5mbGFncyAmCi0JCQkJKFJYT05fRkxHX1RHSl9OQVJST1dfQkFORF9NU0sgfAotCQkJCSBSWE9OX0ZMR19SQURBUl9ERVRFQ1RfTVNLKSk7Ci0JCWlmIChlcnJvcikKLQkJCUlXTF9XQVJOSU5HKCJjaGVjayAyNEcgZmllbGRzICVkIHwgJWRcbiIsCi0JCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCX0gZWxzZSB7Ci0JCWVycm9yIHw9IChyeG9uLT5mbGFncyAmIFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSA/Ci0JCQkJMCA6IGxlMzJfdG9fY3B1KFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKTsKLQkJaWYgKGVycm9yKQotCQkJSVdMX1dBUk5JTkcoImNoZWNrIDUyIGZpZWxkcyAlZCB8ICVkXG4iLAotCQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQkJZXJyb3IgfD0gbGUzMl90b19jcHUocnhvbi0+ZmxhZ3MgJiBSWE9OX0ZMR19DQ0tfTVNLKTsKLQkJaWYgKGVycm9yKQotCQkJSVdMX1dBUk5JTkcoImNoZWNrIDUyIENDSyAlZCB8ICVkXG4iLAotCQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQl9Ci0JZXJyb3IgfD0gKHJ4b24tPm5vZGVfYWRkclswXSB8IHJ4b24tPmJzc2lkX2FkZHJbMF0pICYgMHgxOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIG1hYyBhZGRyICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JLyogbWFrZSBzdXJlIGJhc2ljIHJhdGVzIDZNYnBzIGFuZCAxTWJwcyBhcmUgc3VwcG9ydGVkICovCi0JZXJyb3IgfD0gKCgocnhvbi0+b2ZkbV9iYXNpY19yYXRlcyAmIElXTF9SQVRFXzZNX01BU0spID09IDApICYmCi0JCSAgKChyeG9uLT5jY2tfYmFzaWNfcmF0ZXMgJiBJV0xfUkFURV8xTV9NQVNLKSA9PSAwKSk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgYmFzaWMgcmF0ZSAlZCB8ICVkXG4iLCBjb3VudGVyKyssIGVycm9yKTsKLQotCWVycm9yIHw9IChsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkgPiAyMDA3KTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBhc3NvYyBpZCAlZCB8ICVkXG4iLCBjb3VudGVyKyssIGVycm9yKTsKLQotCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLKSkKLQkJCT09IChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBDQ0sgYW5kIHNob3J0IHNsb3QgJWQgfCAlZFxuIiwKLQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQotCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSykpCi0JCQk9PSAoUlhPTl9GTEdfQ0NLX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSykpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIENDSyAmIGF1dG8gZGV0ZWN0ICVkIHwgJWRcbiIsCi0JCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0KLQllcnJvciB8PSAoKHJ4b24tPmZsYWdzICYgKFJYT05fRkxHX0FVVE9fREVURUNUX01TSyB8Ci0JCQlSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0spKSA9PSBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0spOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIFRHRyBhbmQgYXV0byBkZXRlY3QgJWQgfCAlZFxuIiwKLQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoIlR1bmluZyB0byBjaGFubmVsICVkXG4iLAotCQkJICAgIGxlMTZfdG9fY3B1KHJ4b24tPmNoYW5uZWwpKTsKLQotCWlmIChlcnJvcikgewotCQlJV0xfRVJST1IoIk5vdCBhIHZhbGlkIGl3bDQ5NjVfcnhvbl9hc3NvY19jbWQgZmllbGQgdmFsdWVzXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwppbmRleCAyN2Y1MDQ3Li5jYWI3ODQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC00OSw2ICs0OSw4IEBACiAjZGVmaW5lIElXTF9SQVRFX01JTl9GQUlMVVJFX1RICQk2CS8qIG1pbiBmYWlsdXJlcyB0byBjYWxjIHRwdCAqLwogI2RlZmluZSBJV0xfUkFURV9NSU5fU1VDQ0VTU19USAkJOAkvKiBtaW4gc3VjY2Vzc2VzIHRvIGNhbGMgdHB0ICovCiAKKy8qIG1heCBhbGxvd2VkIHJhdGUgbWlzcyBiZWZvcmUgc3luYyBMUSBjbWQgKi8KKyNkZWZpbmUgSVdMX01JU1NFRF9SQVRFX01BWAkJMTUKIC8qIG1heCB0aW1lIHRvIGFjY3VtIGhpc3RvcnkgMiBzZWNvbmRzICovCiAjZGVmaW5lIElXTF9SQVRFX1NDQUxFX0ZMVVNIX0lOVFZMICAgKDIqSFopCiAKQEAgLTE0OCw2ICsxNTAsOCBAQAogCXUxNiBhY3RpdmVfbWltbzJfcmF0ZTsKIAl1MTYgYWN0aXZlX21pbW8zX3JhdGU7CiAJdTE2IGFjdGl2ZV9yYXRlX2Jhc2ljOworCXM4IG1heF9yYXRlX2lkeDsgICAgIC8qIE1heCByYXRlIHNldCBieSB1c2VyICovCisJdTggbWlzc2VkX3JhdGVfY291bnRlcjsKIAogCXN0cnVjdCBpd2xfbGlua19xdWFsaXR5X2NtZCBscTsKIAlzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvIGxxX2luZm9bTFFfU0laRV07IC8qICJhY3RpdmUiLCAic2VhcmNoIiAqLwpAQCAtMzU2LDcgKzM2MCw3IEBACiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlpZiAocnNfdGxfZ2V0X2xvYWQobHFfZGF0YSwgdGlkKSA+IElXTF9BR0dfTE9BRF9USFJFU0hPTEQpIHsKLQkJSVdMX0RFQlVHX0hUKCJTdGFydGluZyBUeCBhZ2c6IFNUQTogJXBNIHRpZDogJWRcbiIsCisJCUlXTF9ERUJVR19IVChwcml2LCAiU3RhcnRpbmcgVHggYWdnOiBTVEE6ICVwTSB0aWQ6ICVkXG4iLAogCQkJCXN0YS0+YWRkciwgdGlkKTsKIAkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24ocHJpdi0+aHcsIHN0YS0+YWRkciwgdGlkKTsKIAl9CkBAIC00NjMsOCArNDY3LDkgQEAKICAqIEZpbGwgdUNvZGUgQVBJIHJhdGVfbl9mbGFncyBmaWVsZCwgYmFzZWQgb24gInNlYXJjaCIgb3IgImFjdGl2ZSIgdGFibGUuCiAgKi8KIC8qIEZJWE1FOlJTOnJlbW92ZSB0aGlzIGZ1bmN0aW9uIGFuZCBwdXQgdGhlIGZsYWdzIHN0YXRpY2FsbHkgaW4gdGhlIHRhYmxlICovCi1zdGF0aWMgdTMyIHJhdGVfbl9mbGFnc19mcm9tX3RibChzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvICp0YmwsCi0JCQkJICAgICAgIGludCBpbmRleCwgdTggdXNlX2dyZWVuKQorc3RhdGljIHUzMiByYXRlX25fZmxhZ3NfZnJvbV90Ymwoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSBzdHJ1Y3QgaXdsX3NjYWxlX3RibF9pbmZvICp0YmwsCisJCQkJIGludCBpbmRleCwgdTggdXNlX2dyZWVuKQogewogCXUzMiByYXRlX25fZmxhZ3MgPSAwOwogCkBAIC00NzUsNyArNDgwLDcgQEAKIAogCX0gZWxzZSBpZiAoaXNfSHQodGJsLT5scV90eXBlKSkgewogCQlpZiAoaW5kZXggPiBJV0xfTEFTVF9PRkRNX1JBVEUpIHsKLQkJCUlXTF9FUlJPUigiaW52YWxpZCBIVCByYXRlIGluZGV4ICVkXG4iLCBpbmRleCk7CisJCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIEhUIHJhdGUgaW5kZXggJWRcbiIsIGluZGV4KTsKIAkJCWluZGV4ID0gSVdMX0xBU1RfT0ZETV9SQVRFOwogCQl9CiAJCXJhdGVfbl9mbGFncyA9IFJBVEVfTUNTX0hUX01TSzsKQEAgLTQ4Nyw3ICs0OTIsNyBAQAogCQllbHNlCiAJCQlyYXRlX25fZmxhZ3MgfD0JaXdsX3JhdGVzW2luZGV4XS5wbGNwX21pbW8zOwogCX0gZWxzZSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCB0YmwtPmxxX3R5cGUgJWRcbiIsIHRibC0+bHFfdHlwZSk7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgdGJsLT5scV90eXBlICVkXG4iLCB0YmwtPmxxX3R5cGUpOwogCX0KIAogCXJhdGVfbl9mbGFncyB8PSAoKHRibC0+YW50X3R5cGUgPDwgUkFURV9NQ1NfQU5UX1BPUykgJgpAQCAtNTA3LDcgKzUxMiw3IEBACiAJCQlyYXRlX25fZmxhZ3MgfD0gUkFURV9NQ1NfR0ZfTVNLOwogCQkJaWYgKGlzX3Npc28odGJsLT5scV90eXBlKSAmJiB0YmwtPmlzX1NHSSkgewogCQkJCXJhdGVfbl9mbGFncyAmPSB+UkFURV9NQ1NfU0dJX01TSzsKLQkJCQlJV0xfRVJST1IoIkdGIHdhcyBzZXQgd2l0aCBTR0k6U0lTT1xuIik7CisJCQkJSVdMX0VSUihwcml2LCAiR0Ygd2FzIHNldCB3aXRoIFNHSTpTSVNPXG4iKTsKIAkJCX0KIAkJfQogCX0KQEAgLTY4OCw3ICs2OTMsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBsb3cpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CiAJfQogCiAJaGlnaCA9IGluZGV4OwpAQCAtNjk4LDcgKzcwMyw3IEBACiAJCQlicmVhazsKIAkJaWYgKHJhdGVfbWFzayAmICgxIDw8IGhpZ2gpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKCJTa2lwcGluZyBtYXNrZWQgaGlnaGVyIHJhdGU6ICVkXG4iLCBoaWdoKTsKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIlNraXBwaW5nIG1hc2tlZCBoaWdoZXIgcmF0ZTogJWRcbiIsIGhpZ2gpOwogCX0KIAogCXJldHVybiAoaGlnaCA8PCA4KSB8IGxvdzsKQEAgLTc1OCw3ICs3NjMsNyBAQAogCQlsb3cgPSBzY2FsZV9pbmRleDsKIAogb3V0OgotCXJldHVybiByYXRlX25fZmxhZ3NfZnJvbV90YmwodGJsLCBsb3csIGlzX2dyZWVuKTsKKwlyZXR1cm4gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKGxxX3N0YS0+ZHJ2LCB0YmwsIGxvdywgaXNfZ3JlZW4pOwogfQogCiAvKgpAQCAtNzg1LDcgKzc5MCw3IEBACiAJdTggYWN0aXZlX2luZGV4ID0gMDsKIAlzMzIgdHB0ID0gMDsKIAotCUlXTF9ERUJVR19SQVRFX0xJTUlUKCJnZXQgZnJhbWUgYWNrIHJlc3BvbnNlLCB1cGRhdGUgcmF0ZSBzY2FsZSB3aW5kb3dcbiIpOworCUlXTF9ERUJVR19SQVRFX0xJTUlUKHByaXYsICJnZXQgZnJhbWUgYWNrIHJlc3BvbnNlLCB1cGRhdGUgcmF0ZSBzY2FsZSB3aW5kb3dcbiIpOwogCiAJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpIHx8CiAJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQpAQCAtNzk2LDcgKzgwMSwxMCBAQAogCSAgICAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpKQogCQlyZXR1cm47CiAKLQlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50IC0gMTsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkKKwkJcmV0cmllcyA9IDA7CisJZWxzZQorCQlyZXRyaWVzID0gaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50IC0gMTsKIAogCWlmIChyZXRyaWVzID4gMTUpCiAJCXJldHJpZXMgPSAxNTsKQEAgLTgzNSwxNCArODQzLDE5IEBACiAJICAgICghISh0eF9yYXRlICYgUkFURV9NQ1NfR0ZfTVNLKSAhPSAhIShpbmZvLT5zdGF0dXMucmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQpKSB8fAogCSAgICAoaHctPndpcGh5LT5iYW5kc1twcml2LT5iYW5kXS0+Yml0cmF0ZXNbcnNfaW5kZXhdLmJpdHJhdGUgIT0KIAkgICAgIGh3LT53aXBoeS0+YmFuZHNbaW5mby0+YmFuZF0tPmJpdHJhdGVzW2luZm8tPnN0YXR1cy5yYXRlc1swXS5pZHhdLmJpdHJhdGUpKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJpbml0aWFsIHJhdGUgZG9lcyBub3QgbWF0Y2ggMHgleFxuIiwgdHhfcmF0ZSk7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJpbml0aWFsIHJhdGUgZG9lcyBub3QgbWF0Y2ggMHgleFxuIiwgdHhfcmF0ZSk7CiAJCS8qIHRoZSBsYXN0IExRIGNvbW1hbmQgY291bGQgZmFpbGVkIHNvIHRoZSBMUSBpbiB1Y29kZSBub3QKIAkJICogdGhlIHNhbWUgaW4gZHJpdmVyIHN5bmMgdXAKIAkJICovCi0JCWl3bF9zZW5kX2xxX2NtZChwcml2LCAmbHFfc3RhLT5scSwgQ01EX0FTWU5DKTsKKwkJbHFfc3RhLT5taXNzZWRfcmF0ZV9jb3VudGVyKys7CisJCWlmIChscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPiBJV0xfTUlTU0VEX1JBVEVfTUFYKSB7CisJCQlscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPSAwOworCQkJaXdsX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOworCQl9CiAJCWdvdG8gb3V0OwogCX0KIAorCWxxX3N0YS0+bWlzc2VkX3JhdGVfY291bnRlciA9IDA7CiAJLyogVXBkYXRlIGZyYW1lIGhpc3Rvcnkgd2luZG93IHdpdGggImZhaWx1cmUiIGZvciBlYWNoIFR4IHJldHJ5LiAqLwogCXdoaWxlIChyZXRyaWVzKSB7CiAJCS8qIExvb2sgdXAgdGhlIHJhdGUgYW5kIG90aGVyIGluZm8gdXNlZCBmb3IgZWFjaCB0eCBhdHRlbXB0LgpAQCAtOTAzLDcgKzkxNiw3IEBACiAJCQl0cHQgPSBzZWFyY2hfdGJsLT5leHBlY3RlZF90cHRbcnNfaW5kZXhdOwogCQllbHNlCiAJCQl0cHQgPSAwOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQorCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkKIAkJCXJzX2NvbGxlY3RfdHhfZGF0YShzZWFyY2hfd2luLCByc19pbmRleCwgdHB0LAogCQkJCQkgICBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtOTE5LDcgKzkzMiw3IEBACiAJCQl0cHQgPSBjdXJyX3RibC0+ZXhwZWN0ZWRfdHB0W3JzX2luZGV4XTsKIAkJZWxzZQogCQkJdHB0ID0gMDsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQU1QRFUpCiAJCQlyc19jb2xsZWN0X3R4X2RhdGEod2luZG93LCByc19pbmRleCwgdHB0LAogCQkJCQkgICBpbmZvLT5zdGF0dXMuYW1wZHVfYWNrX2xlbiwKIAkJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtOTMxLDcgKzk0NCw3IEBACiAJLyogSWYgbm90IHNlYXJjaGluZyBmb3IgbmV3IG1vZGUsIGluY3JlbWVudCBzdWNjZXNzL2ZhaWxlZCBjb3VudGVyCiAJICogLi4uIHRoZXNlIGhlbHAgZGV0ZXJtaW5lIHdoZW4gdG8gc3RhcnQgc2VhcmNoaW5nIGFnYWluICovCiAJaWYgKGxxX3N0YS0+c3RheV9pbl90YmwpIHsKLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgeworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVSkgewogCQkJbHFfc3RhLT50b3RhbF9zdWNjZXNzICs9IGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbWFwOwogCQkJbHFfc3RhLT50b3RhbF9mYWlsZWQgKz0KIAkJCSAgICAgKGluZm8tPnN0YXR1cy5hbXBkdV9hY2tfbGVuIC0gaW5mby0+c3RhdHVzLmFtcGR1X2Fja19tYXApOwpAQCAtOTYxLDcgKzk3NCw3IEBACiBzdGF0aWMgdm9pZCByc19zZXRfc3RheV9pbl90YWJsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGlzX2xlZ2FjeSwKIAkJCQkgc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSkKIHsKLQlJV0xfREVCVUdfUkFURSgid2UgYXJlIHN0YXlpbmcgaW4gdGhlIHNhbWUgdGFibGVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJ3ZSBhcmUgc3RheWluZyBpbiB0aGUgc2FtZSB0YWJsZVxuIik7CiAJbHFfc3RhLT5zdGF5X2luX3RibCA9IDE7CS8qIG9ubHkgcGxhY2UgdGhpcyBnZXRzIHNldCAqLwogCWlmIChpc19sZWdhY3kpIHsKIAkJbHFfc3RhLT50YWJsZV9jb3VudF9saW1pdCA9IElXTF9MRUdBQ1lfVEFCTEVfQ09VTlQ7CkBAIC0xMTI5LDcgKzExNDIsNyBAQAogCXMzMiByYXRlOwogCXM4IGlzX2dyZWVuID0gbHFfc3RhLT5pc19ncmVlbjsKIAotCWlmICghY29uZi0+aHQuZW5hYmxlZCB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQorCWlmICghY29uZl9pc19odChjb25mKSB8fCAhc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKQogCQlyZXR1cm4gLTE7CiAKIAlpZiAoKChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTKSA+PiAyKQpAQCAtMTE0MCw3ICsxMTUzLDcgQEAKIAlpZiAocHJpdi0+aHdfcGFyYW1zLnR4X2NoYWluc19udW0gPCAyKQogCQlyZXR1cm4gLTE7CiAKLQlJV0xfREVCVUdfUkFURSgiTFE6IHRyeSB0byBzd2l0Y2ggdG8gTUlNTzJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogdHJ5IHRvIHN3aXRjaCB0byBNSU1PMlxuIik7CiAKIAl0YmwtPmxxX3R5cGUgPSBMUV9NSU1PMjsKIAl0YmwtPmlzX2R1cCA9IGxxX3N0YS0+aXNfZHVwOwpAQCAtMTE2OSwxNiArMTE4MiwxNiBAQAogCiAJcmF0ZSA9IHJzX2dldF9iZXN0X3JhdGUocHJpdiwgbHFfc3RhLCB0YmwsIHJhdGVfbWFzaywgaW5kZXgpOwogCi0JSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PMiBiZXN0IHJhdGUgJWQgbWFzayAlWFxuIiwgcmF0ZSwgcmF0ZV9tYXNrKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IE1JTU8yIGJlc3QgcmF0ZSAlZCBtYXNrICVYXG4iLCByYXRlLCByYXRlX21hc2spOwogCiAJaWYgKChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpIHx8ICEoKDEgPDwgcmF0ZSkgJiByYXRlX21hc2spKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJDYW4ndCBzd2l0Y2ggd2l0aCBpbmRleCAlZCByYXRlIG1hc2sgJXhcbiIsCisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJDYW4ndCBzd2l0Y2ggd2l0aCBpbmRleCAlZCByYXRlIG1hc2sgJXhcbiIsCiAJCQkJCQlyYXRlLCByYXRlX21hc2spOwogCQlyZXR1cm4gLTE7CiAJfQotCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgcmF0ZSwgaXNfZ3JlZW4pOworCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHByaXYsIHRibCwgcmF0ZSwgaXNfZ3JlZW4pOwogCi0JSVdMX0RFQlVHX1JBVEUoIkxROiBTd2l0Y2ggdG8gbmV3IG1jcyAlWCBpbmRleCBpcyBncmVlbiAlWFxuIiwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFN3aXRjaCB0byBuZXcgbWNzICVYIGluZGV4IGlzIGdyZWVuICVYXG4iLAogCQkgICAgIHRibC0+Y3VycmVudF9yYXRlLCBpc19ncmVlbik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTk2LDEwICsxMjA5LDEwIEBACiAJdTggaXNfZ3JlZW4gPSBscV9zdGEtPmlzX2dyZWVuOwogCXMzMiByYXRlOwogCi0JaWYgKCFjb25mLT5odC5lbmFibGVkIHx8ICFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCisJaWYgKCFjb25mX2lzX2h0KGNvbmYpIHx8ICFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCiAJCXJldHVybiAtMTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogdHJ5IHRvIHN3aXRjaCB0byBTSVNPXG4iKTsKKwlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IHRyeSB0byBzd2l0Y2ggdG8gU0lTT1xuIik7CiAKIAl0YmwtPmlzX2R1cCA9IGxxX3N0YS0+aXNfZHVwOwogCXRibC0+bHFfdHlwZSA9IExRX1NJU087CkBAIC0xMjMwLDE0ICsxMjQzLDE0IEBACiAJcnNfc2V0X2V4cGVjdGVkX3RwdF90YWJsZShscV9zdGEsIHRibCk7CiAJcmF0ZSA9IHJzX2dldF9iZXN0X3JhdGUocHJpdiwgbHFfc3RhLCB0YmwsIHJhdGVfbWFzaywgaW5kZXgpOwogCi0JSVdMX0RFQlVHX1JBVEUoIkxROiBnZXQgYmVzdCByYXRlICVkIG1hc2sgJVhcbiIsIHJhdGUsIHJhdGVfbWFzayk7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBnZXQgYmVzdCByYXRlICVkIG1hc2sgJVhcbiIsIHJhdGUsIHJhdGVfbWFzayk7CiAJaWYgKChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpIHx8ICEoKDEgPDwgcmF0ZSkgJiByYXRlX21hc2spKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJjYW4gbm90IHN3aXRjaCB3aXRoIGluZGV4ICVkIHJhdGUgbWFzayAleFxuIiwKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImNhbiBub3Qgc3dpdGNoIHdpdGggaW5kZXggJWQgcmF0ZSBtYXNrICV4XG4iLAogCQkJICAgICByYXRlLCByYXRlX21hc2spOwogCQlyZXR1cm4gLTE7CiAJfQotCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgcmF0ZSwgaXNfZ3JlZW4pOwotCUlXTF9ERUJVR19SQVRFKCJMUTogU3dpdGNoIHRvIG5ldyBtY3MgJVggaW5kZXggaXMgZ3JlZW4gJVhcbiIsCisJdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgdGJsLCByYXRlLCBpc19ncmVlbik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTd2l0Y2ggdG8gbmV3IG1jcyAlWCBpbmRleCBpcyBncmVlbiAlWFxuIiwKIAkJICAgICB0YmwtPmN1cnJlbnRfcmF0ZSwgaXNfZ3JlZW4pOwogCXJldHVybiAwOwogfQpAQCAtMTI2Niw3ICsxMjc5LDcgQEAKIAkJc3dpdGNoICh0YmwtPmFjdGlvbikgewogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX0FOVEVOTkExOgogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX0FOVEVOTkEyOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBMZWdhY3kgdG9nZ2xlIEFudGVubmFcbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBMZWdhY3kgdG9nZ2xlIEFudGVubmFcbiIpOwogCiAJCQlscV9zdGEtPmFjdGlvbl9jb3VudGVyKys7CiAKQEAgLTEyOTAsNyArMTMwMyw3IEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBJV0xfTEVHQUNZX1NXSVRDSF9TSVNPOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBMZWdhY3kgc3dpdGNoIHRvIFNJU09cbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBMZWdhY3kgc3dpdGNoIHRvIFNJU09cbiIpOwogCiAJCQkvKiBTZXQgdXAgc2VhcmNoIHRhYmxlIHRvIHRyeSBTSVNPICovCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CkBAIC0xMzA2LDcgKzEzMTksNyBAQAogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX01JTU8yX0FCOgogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX01JTU8yX0FDOgogCQljYXNlIElXTF9MRUdBQ1lfU1dJVENIX01JTU8yX0JDOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBMZWdhY3kgc3dpdGNoIHRvIE1JTU8yXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTGVnYWN5IHN3aXRjaCB0byBNSU1PMlxuIik7CiAKIAkJCS8qIFNldCB1cCBzZWFyY2ggdGFibGUgdG8gdHJ5IE1JTU8gKi8KIAkJCW1lbWNweShzZWFyY2hfdGJsLCB0YmwsIHN6KTsKQEAgLTEzNzUsNyArMTM4OCw3IEBACiAJCXN3aXRjaCAodGJsLT5hY3Rpb24pIHsKIAkJY2FzZSBJV0xfU0lTT19TV0lUQ0hfQU5URU5OQTE6CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX0FOVEVOTkEyOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBTSVNPIHRvZ2dsZSBBbnRlbm5hXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU0lTTyB0b2dnbGUgQW50ZW5uYVxuIik7CiAKIAkJCWlmICgodGJsLT5hY3Rpb24gPT0gSVdMX1NJU09fU1dJVENIX0FOVEVOTkExICYmCiAJCQkJCQkJdHhfY2hhaW5zX251bSA8PSAxKSB8fApAQCAtMTM5NCw3ICsxNDA3LDcgQEAKIAkJY2FzZSBJV0xfU0lTT19TV0lUQ0hfTUlNTzJfQUI6CiAJCWNhc2UgSVdMX1NJU09fU1dJVENIX01JTU8yX0FDOgogCQljYXNlIElXTF9TSVNPX1NXSVRDSF9NSU1PMl9CQzoKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogU0lTTyBzd2l0Y2ggdG8gTUlNTzJcbiIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBTSVNPIHN3aXRjaCB0byBNSU1PMlxuIik7CiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CiAJCQlzZWFyY2hfdGJsLT5pc19TR0kgPSAwOwogCkBAIC0xNDIzLDE0ICsxNDM2LDE1IEBACiAJCQkJCQlIVF9TSE9SVF9HSV80ME1IWikpCiAJCQkJYnJlYWs7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogU0lTTyB0b2dnbGUgU0dJL05HSVxuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IFNJU08gdG9nZ2xlIFNHSS9OR0lcbiIpOwogCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CiAJCQlpZiAoaXNfZ3JlZW4pIHsKIAkJCQlpZiAoIXRibC0+aXNfU0dJKQogCQkJCQlicmVhazsKIAkJCQllbHNlCi0JCQkJCUlXTF9FUlJPUigiU0dJIHdhcyBzZXQgaW4gR0YrU0lTT1xuIik7CisJCQkJCUlXTF9FUlIocHJpdiwKKwkJCQkJCSJTR0kgd2FzIHNldCBpbiBHRitTSVNPXG4iKTsKIAkJCX0KIAkJCXNlYXJjaF90YmwtPmlzX1NHSSA9ICF0YmwtPmlzX1NHSTsKIAkJCXJzX3NldF9leHBlY3RlZF90cHRfdGFibGUobHFfc3RhLCBzZWFyY2hfdGJsKTsKQEAgLTE0MzksOCArMTQ1Myw5IEBACiAJCQkJaWYgKHRwdCA+PSBzZWFyY2hfdGJsLT5leHBlY3RlZF90cHRbaW5kZXhdKQogCQkJCQlicmVhazsKIAkJCX0KLQkJCXNlYXJjaF90YmwtPmN1cnJlbnRfcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibCgKLQkJCQkJCXNlYXJjaF90YmwsIGluZGV4LCBpc19ncmVlbik7CisJCQlzZWFyY2hfdGJsLT5jdXJyZW50X3JhdGUgPQorCQkJCXJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCBzZWFyY2hfdGJsLAorCQkJCQkJICAgICAgaW5kZXgsIGlzX2dyZWVuKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCXRibC0+YWN0aW9uKys7CkBAIC0xNDg2LDcgKzE1MDEsNyBAQAogCQlzd2l0Y2ggKHRibC0+YWN0aW9uKSB7CiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9BTlRFTk5BMToKIAkJY2FzZSBJV0xfTUlNTzJfU1dJVENIX0FOVEVOTkEyOgotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PIHRvZ2dsZSBBbnRlbm5hc1xuIik7CisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IE1JTU8gdG9nZ2xlIEFudGVubmFzXG4iKTsKIAogCQkJaWYgKHR4X2NoYWluc19udW0gPD0gMikKIAkJCQlicmVhazsKQEAgLTE1MDIsNyArMTUxNyw3IEBACiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9TSVNPX0E6CiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9TSVNPX0I6CiAJCWNhc2UgSVdMX01JTU8yX1NXSVRDSF9TSVNPX0M6Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IE1JTU8yIHN3aXRjaCB0byBTSVNPXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTUlNTzIgc3dpdGNoIHRvIFNJU09cbiIpOwogCiAJCQkvKiBTZXQgdXAgbmV3IHNlYXJjaCB0YWJsZSBmb3IgU0lTTyAqLwogCQkJbWVtY3B5KHNlYXJjaF90YmwsIHRibCwgc3opOwpAQCAtMTUzNCw3ICsxNTQ5LDcgQEAKIAkJCQkJCUhUX1NIT1JUX0dJXzQwTUhaKSkKIAkJCQlicmVhazsKIAotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBNSU1PIHRvZ2dsZSBTR0kvTkdJXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogTUlNTyB0b2dnbGUgU0dJL05HSVxuIik7CiAKIAkJCS8qIFNldCB1cCBuZXcgc2VhcmNoIHRhYmxlIGZvciBNSU1PICovCiAJCQltZW1jcHkoc2VhcmNoX3RibCwgdGJsLCBzeik7CkBAIC0xNTUxLDggKzE1NjYsOSBAQAogCQkJCWlmICh0cHQgPj0gc2VhcmNoX3RibC0+ZXhwZWN0ZWRfdHB0W2luZGV4XSkKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQlzZWFyY2hfdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwoCi0JCQkJCQlzZWFyY2hfdGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCQkJc2VhcmNoX3RibC0+Y3VycmVudF9yYXRlID0KKwkJCQlyYXRlX25fZmxhZ3NfZnJvbV90YmwocHJpdiwgc2VhcmNoX3RibCwKKwkJCQkJCSAgICAgIGluZGV4LCBpc19ncmVlbik7CiAJCQlnb3RvIG91dDsKIAogCQl9CkBAIC0xNjE2LDcgKzE2MzIsNyBAQAogCQkgICAgKGxxX3N0YS0+dG90YWxfc3VjY2VzcyA+IGxxX3N0YS0+bWF4X3N1Y2Nlc3NfbGltaXQpIHx8CiAJCSAgICAoKCFscV9zdGEtPnNlYXJjaF9iZXR0ZXJfdGJsKSAmJiAobHFfc3RhLT5mbHVzaF90aW1lcikKIAkJICAgICAmJiAoZmx1c2hfaW50ZXJ2YWxfcGFzc2VkKSkpIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogc3RheSBpcyBleHBpcmVkICVkICVkICVkXG46IiwKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogc3RheSBpcyBleHBpcmVkICVkICVkICVkXG46IiwKIAkJCQkgICAgIGxxX3N0YS0+dG90YWxfZmFpbGVkLAogCQkJCSAgICAgbHFfc3RhLT50b3RhbF9zdWNjZXNzLAogCQkJCSAgICAgZmx1c2hfaW50ZXJ2YWxfcGFzc2VkKTsKQEAgLTE2MzksNyArMTY1NSw3IEBACiAJCQkgICAgbHFfc3RhLT50YWJsZV9jb3VudF9saW1pdCkgewogCQkJCWxxX3N0YS0+dGFibGVfY291bnQgPSAwOwogCi0JCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBzdGF5IGluIHRhYmxlIGNsZWFyIHdpblxuIik7CisJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBzdGF5IGluIHRhYmxlIGNsZWFyIHdpblxuIik7CiAJCQkJZm9yIChpID0gMDsgaSA8IElXTF9SQVRFX0NPVU5UOyBpKyspCiAJCQkJCXJzX3JhdGVfc2NhbGVfY2xlYXJfd2luZG93KAogCQkJCQkJJih0YmwtPndpbltpXSkpOwpAQCAtMTY4Nyw4ICsxNzAzLDkgQEAKIAl1MTYgaGlnaF9sb3c7CiAJczMyIHNyOwogCXU4IHRpZCA9IE1BWF9USURfQ09VTlQ7CisJc3RydWN0IGl3bF90aWRfZGF0YSAqdGlkX2RhdGE7CiAKLQlJV0xfREVCVUdfUkFURSgicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgInJhdGUgc2NhbGUgY2FsY3VsYXRlIG5ldyByYXRlIGZvciBza2JcbiIpOwogCiAJLyogU2VuZCBtYW5hZ2VtZW50IGZyYW1lcyBhbmQgYnJvYWRjYXN0L211bHRpY2FzdCBkYXRhIHVzaW5nCiAJICogbG93ZXN0IHJhdGUuICovCkBAIC0xNzIwLDEzICsxNzM3LDEzIEBACiAJLyogY3VycmVudCB0eCByYXRlICovCiAJaW5kZXggPSBscV9zdGEtPmxhc3RfdHhyYXRlX2lkeDsKIAotCUlXTF9ERUJVR19SQVRFKCJSYXRlIHNjYWxlIGluZGV4ICVkIGZvciB0eXBlICVkXG4iLCBpbmRleCwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiUmF0ZSBzY2FsZSBpbmRleCAlZCBmb3IgdHlwZSAlZFxuIiwgaW5kZXgsCiAJCSAgICAgICB0YmwtPmxxX3R5cGUpOwogCiAJLyogcmF0ZXMgYXZhaWxhYmxlIGZvciB0aGlzIGFzc29jaWF0aW9uLCBhbmQgZm9yIG1vZHVsYXRpb24gbW9kZSAqLwogCXJhdGVfbWFzayA9IHJzX2dldF9zdXBwb3J0ZWRfcmF0ZXMobHFfc3RhLCBoZHIsIHRibC0+bHFfdHlwZSk7CiAKLQlJV0xfREVCVUdfUkFURSgibWFzayAweCUwNFggXG4iLCByYXRlX21hc2spOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJtYXNrIDB4JTA0WCBcbiIsIHJhdGVfbWFzayk7CiAKIAkvKiBtYXNrIHdpdGggc3RhdGlvbiByYXRlIHJlc3RyaWN0aW9uICovCiAJaWYgKGlzX2xlZ2FjeSh0YmwtPmxxX3R5cGUpKSB7CkBAIC0xNzQ1LDE2ICsxNzYyLDI1IEBACiAJCXJhdGVfc2NhbGVfaW5kZXhfbXNrID0gcmF0ZV9tYXNrOwogCiAJaWYgKCEoKDEgPDwgaW5kZXgpICYgcmF0ZV9zY2FsZV9pbmRleF9tc2spKSB7Ci0JCUlXTF9FUlJPUigiQ3VycmVudCBSYXRlIGlzIG5vdCB2YWxpZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIkN1cnJlbnQgUmF0ZSBpcyBub3QgdmFsaWRcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogR2V0IGV4cGVjdGVkIHRocm91Z2hwdXQgdGFibGUgYW5kIGhpc3Rvcnkgd2luZG93IGZvciBjdXJyZW50IHJhdGUgKi8KIAlpZiAoIXRibC0+ZXhwZWN0ZWRfdHB0KSB7Ci0JCUlXTF9FUlJPUigidGJsLT5leHBlY3RlZF90cHQgaXMgTlVMTFxuIik7CisJCUlXTF9FUlIocHJpdiwgInRibC0+ZXhwZWN0ZWRfdHB0IGlzIE5VTExcbiIpOwogCQlyZXR1cm47CiAJfQogCisJLyogZm9yY2UgdXNlciBtYXggcmF0ZSBpZiBzZXQgYnkgdXNlciAqLworCWlmICgobHFfc3RhLT5tYXhfcmF0ZV9pZHggIT0gLTEpICYmCisJICAgIChscV9zdGEtPm1heF9yYXRlX2lkeCA8IGluZGV4KSkgeworCQlpbmRleCA9IGxxX3N0YS0+bWF4X3JhdGVfaWR4OworCQl1cGRhdGVfbHEgPSAxOworCQl3aW5kb3cgPSAmKHRibC0+d2luW2luZGV4XSk7CisJCWdvdG8gbHFfdXBkYXRlOworCX0KKwogCXdpbmRvdyA9ICYodGJsLT53aW5baW5kZXhdKTsKIAogCS8qCkBAIC0xNzY3LDcgKzE3OTMsNyBAQAogCWZhaWxfY291bnQgPSB3aW5kb3ctPmNvdW50ZXIgLSB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlcjsKIAlpZiAoKGZhaWxfY291bnQgPCBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCkgJiYKIAkJCSh3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA8IElXTF9SQVRFX01JTl9TVUNDRVNTX1RIKSkgewotCQlJV0xfREVCVUdfUkFURSgiTFE6IHN0aWxsIGJlbG93IFRILiBzdWNjPSVkIHRvdGFsPSVkICIKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBzdGlsbCBiZWxvdyBUSC4gc3VjYz0lZCB0b3RhbD0lZCAiCiAJCQkgICAgICAgImZvciBpbmRleCAlZFxuIiwKIAkJCSAgICAgICB3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciwgd2luZG93LT5jb3VudGVyLCBpbmRleCk7CiAKQEAgLTE3OTUsNyArMTgyMSw3IEBACiAJCSAqIGNvbnRpbnVpbmcgdG8gdXNlIHRoZSBzZXR1cCB0aGF0IHdlJ3ZlIGJlZW4gdHJ5aW5nLiAqLwogCQlpZiAod2luZG93LT5hdmVyYWdlX3RwdCA+IGxxX3N0YS0+bGFzdF90cHQpIHsKIAotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBTV0lUQ0hJTkcgVE8gTkVXIFRBQkxFICIKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU1dJVENISU5HIFRPIE5FVyBUQUJMRSAiCiAJCQkJCSJzdWM9JWQgY3VyLXRwdD0lZCBvbGQtdHB0PSVkXG4iLAogCQkJCQl3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8sCiAJCQkJCXdpbmRvdy0+YXZlcmFnZV90cHQsCkBAIC0xODExLDcgKzE4MzcsNyBAQAogCQkvKiBFbHNlIHBvb3Igc3VjY2VzczsgZ28gYmFjayB0byBtb2RlIGluICJhY3RpdmUiIHRhYmxlICovCiAJCX0gZWxzZSB7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogR09JTkcgQkFDSyBUTyBUSEUgT0xEIFRBQkxFICIKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogR09JTkcgQkFDSyBUTyBUSEUgT0xEIFRBQkxFICIKIAkJCQkJInN1Yz0lZCBjdXItdHB0PSVkIG9sZC10cHQ9JWRcbiIsCiAJCQkJCXdpbmRvdy0+c3VjY2Vzc19yYXRpbywKIAkJCQkJd2luZG93LT5hdmVyYWdlX3RwdCwKQEAgLTE4NDYsNiArMTg3MiwxMSBAQAogCWxvdyA9IGhpZ2hfbG93ICYgMHhmZjsKIAloaWdoID0gKGhpZ2hfbG93ID4+IDgpICYgMHhmZjsKIAorCS8qIElmIHVzZXIgc2V0IG1heCByYXRlLCBkb250IGFsbG93IGhpZ2hlciB0aGFuIHVzZXIgY29uc3RyYWluICovCisJaWYgKChscV9zdGEtPm1heF9yYXRlX2lkeCAhPSAtMSkgJiYKKwkgICAgKGxxX3N0YS0+bWF4X3JhdGVfaWR4IDwgaGlnaCkpCisJCWhpZ2ggPSBJV0xfUkFURV9JTlZBTElEOworCiAJc3IgPSB3aW5kb3ctPnN1Y2Nlc3NfcmF0aW87CiAKIAkvKiBDb2xsZWN0IG1lYXN1cmVkIHRocm91Z2hwdXRzIGZvciBjdXJyZW50IGFuZCBhZGphY2VudCByYXRlcyAqLwpAQCAtMTg1OSw3ICsxODkwLDcgQEAKIAogCS8qIFRvbyBtYW55IGZhaWx1cmVzLCBkZWNyZWFzZSByYXRlICovCiAJaWYgKChzciA8PSBJV0xfUkFURV9ERUNSRUFTRV9USCkgfHwgKGN1cnJlbnRfdHB0ID09IDApKSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHN1Y2Nlc3NfcmF0aW9cbiIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiZGVjcmVhc2UgcmF0ZSBiZWNhdXNlIG9mIGxvdyBzdWNjZXNzX3JhdGlvXG4iKTsKIAkJc2NhbGVfYWN0aW9uID0gLTE7CiAKIAkvKiBObyB0aHJvdWdocHV0IG1lYXN1cmVkIHlldCBmb3IgYWRqYWNlbnQgcmF0ZXM7IHRyeSBpbmNyZWFzZS4gKi8KQEAgLTE4NjksNyArMTkwMCw3IEBACiAJCWlmIChoaWdoICE9IElXTF9SQVRFX0lOVkFMSUQgJiYgc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpCiAJCQlzY2FsZV9hY3Rpb24gPSAxOwogCQllbHNlIGlmIChsb3cgIT0gSVdMX1JBVEVfSU5WQUxJRCkKLQkJCXNjYWxlX2FjdGlvbiA9IC0xOworCQkJc2NhbGVfYWN0aW9uID0gMDsKIAl9CiAKIAkvKiBCb3RoIGFkamFjZW50IHRocm91Z2hwdXRzIGFyZSBtZWFzdXJlZCwgYnV0IG5laXRoZXIgb25lIGhhcyBiZXR0ZXIKQEAgLTE4OTAsMTcgKzE5MjEsMTUgQEAKIAkJCQkJc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKIAkJCQlzY2FsZV9hY3Rpb24gPSAxOwogCQkJfSBlbHNlIHsKLQkJCQlJV0xfREVCVUdfUkFURQotCQkJCSAgICAoImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBoaWdoIHRwdFxuIik7Ci0JCQkJc2NhbGVfYWN0aW9uID0gLTE7CisJCQkJc2NhbGVfYWN0aW9uID0gMDsKIAkJCX0KIAogCQkvKiBMb3dlciBhZGphY2VudCByYXRlJ3MgdGhyb3VnaHB1dCBpcyBtZWFzdXJlZCAqLwogCQl9IGVsc2UgaWYgKGxvd190cHQgIT0gSVdMX0lOVkFMSURfVkFMVUUpIHsKIAkJCS8qIExvd2VyIHJhdGUgaGFzIGJldHRlciB0aHJvdWdocHV0ICovCiAJCQlpZiAobG93X3RwdCA+IGN1cnJlbnRfdHB0KSB7Ci0JCQkJSVdMX0RFQlVHX1JBVEUKLQkJCQkgICAgKCJkZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IHRwdFxuIik7CisJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKKwkJCQkgICAgImRlY3JlYXNlIHJhdGUgYmVjYXVzZSBvZiBsb3cgdHB0XG4iKTsKIAkJCQlzY2FsZV9hY3Rpb24gPSAtMTsKIAkJCX0gZWxzZSBpZiAoc3IgPj0gSVdMX1JBVEVfSU5DUkVBU0VfVEgpIHsKIAkJCQlzY2FsZV9hY3Rpb24gPSAxOwpAQCAtMTkzNywxNCArMTk2NiwxNCBAQAogCQlicmVhazsKIAl9CiAKLQlJV0xfREVCVUdfUkFURSgiY2hvb3NlIHJhdGUgc2NhbGUgaW5kZXggJWQgYWN0aW9uICVkIGxvdyAlZCAiCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImNob29zZSByYXRlIHNjYWxlIGluZGV4ICVkIGFjdGlvbiAlZCBsb3cgJWQgIgogCQkgICAgImhpZ2ggJWQgdHlwZSAlZFxuIiwKIAkJICAgICBpbmRleCwgc2NhbGVfYWN0aW9uLCBsb3csIGhpZ2gsIHRibC0+bHFfdHlwZSk7CiAKIGxxX3VwZGF0ZToKIAkvKiBSZXBsYWNlIHVDb2RlJ3MgcmF0ZSB0YWJsZSBmb3IgdGhlIGRlc3RpbmF0aW9uIHN0YXRpb24uICovCiAJaWYgKHVwZGF0ZV9scSkgewotCQlyYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKKwkJcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCB0YmwsIGluZGV4LCBpc19ncmVlbik7CiAJCXJzX2ZpbGxfbGlua19jbWQocHJpdiwgbHFfc3RhLCByYXRlKTsKIAkJaXdsX3NlbmRfbHFfY21kKHByaXYsICZscV9zdGEtPmxxLCBDTURfQVNZTkMpOwogCX0KQEAgLTE5ODEsNyArMjAxMCw3IEBACiAJCQkvKiBVc2UgbmV3ICJzZWFyY2giIHN0YXJ0IHJhdGUgKi8KIAkJCWluZGV4ID0gaXdsX2h3cmF0ZV90b19wbGNwX2lkeCh0YmwtPmN1cnJlbnRfcmF0ZSk7CiAKLQkJCUlXTF9ERUJVR19SQVRFKCJTd2l0Y2ggY3VycmVudCAgbWNzOiAlWCBpbmRleDogJWRcbiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiU3dpdGNoIGN1cnJlbnQgIG1jczogJVggaW5kZXg6ICVkXG4iLAogCQkJCSAgICAgdGJsLT5jdXJyZW50X3JhdGUsIGluZGV4KTsKIAkJCXJzX2ZpbGxfbGlua19jbWQocHJpdiwgbHFfc3RhLCB0YmwtPmN1cnJlbnRfcmF0ZSk7CiAJCQlpd2xfc2VuZF9scV9jbWQocHJpdiwgJmxxX3N0YS0+bHEsIENNRF9BU1lOQyk7CkBAIC0xOTkzLDEwICsyMDIyLDEwIEBACiAJCSAqIHN0YXkgd2l0aCBiZXN0IGFudGVubmEgbGVnYWN5IG1vZHVsYXRpb24gZm9yIGEgd2hpbGUKIAkJICogYmVmb3JlIG5leHQgcm91bmQgb2YgbW9kZSBjb21wYXJpc29ucy4gKi8KIAkJdGJsMSA9ICYobHFfc3RhLT5scV9pbmZvW2xxX3N0YS0+YWN0aXZlX3RibF0pOwotCQlpZiAoaXNfbGVnYWN5KHRibDEtPmxxX3R5cGUpICYmICFjb25mLT5odC5lbmFibGVkICYmCisJCWlmIChpc19sZWdhY3kodGJsMS0+bHFfdHlwZSkgJiYgIWNvbmZfaXNfaHQoY29uZikgJiYKIAkJICAgIGxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPj0gMSkgewogCQkJbHFfc3RhLT5hY3Rpb25fY291bnRlciA9IDA7Ci0JCQlJV0xfREVCVUdfUkFURSgiTFE6IFNUQVkgaW4gbGVnYWN5IHRhYmxlXG4iKTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogU1RBWSBpbiBsZWdhY3kgdGFibGVcbiIpOwogCQkJcnNfc2V0X3N0YXlfaW5fdGFibGUocHJpdiwgMSwgbHFfc3RhKTsKIAkJfQogCkBAIC0yMDA4LDggKzIwMzcsMTUgQEAKIAkJCWlmICgobHFfc3RhLT5sYXN0X3RwdCA+IElXTF9BR0dfVFBUX1RIUkVIT0xEKSAmJgogCQkJICAgIChscV9zdGEtPnR4X2FnZ190aWRfZW4gJiAoMSA8PCB0aWQpKSAmJgogCQkJICAgICh0aWQgIT0gTUFYX1RJRF9DT1VOVCkpIHsKLQkJCQlJV0xfREVCVUdfUkFURSgidHJ5IHRvIGFnZ3JlZ2F0ZSB0aWQgJWRcbiIsIHRpZCk7Ci0JCQkJcnNfdGxfdHVybl9vbl9hZ2cocHJpdiwgdGlkLCBscV9zdGEsIHN0YSk7CisJCQkJdGlkX2RhdGEgPQorCQkJCSAgICZwcml2LT5zdGF0aW9uc1tscV9zdGEtPmxxLnN0YV9pZF0udGlkW3RpZF07CisJCQkJaWYgKHRpZF9kYXRhLT5hZ2cuc3RhdGUgPT0gSVdMX0FHR19PRkYpIHsKKwkJCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwKKwkJCQkJCSAgICAgICAidHJ5IHRvIGFnZ3JlZ2F0ZSB0aWQgJWRcbiIsCisJCQkJCQkgICAgICAgdGlkKTsKKwkJCQkJcnNfdGxfdHVybl9vbl9hZ2cocHJpdiwgdGlkLAorCQkJCQkJCSAgbHFfc3RhLCBzdGEpOworCQkJCX0KIAkJCX0KIAkJCWxxX3N0YS0+YWN0aW9uX2NvdW50ZXIgPSAwOwogCQkJcnNfc2V0X3N0YXlfaW5fdGFibGUocHJpdiwgMCwgbHFfc3RhKTsKQEAgLTIwMjgsNyArMjA2NCw3IEBACiAJfQogCiBvdXQ6Ci0JdGJsLT5jdXJyZW50X3JhdGUgPSByYXRlX25fZmxhZ3NfZnJvbV90YmwodGJsLCBpbmRleCwgaXNfZ3JlZW4pOworCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHByaXYsIHRibCwgaW5kZXgsIGlzX2dyZWVuKTsKIAlpID0gaW5kZXg7CiAJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggPSBpOwogCkBAIC0yMDgxLDcgKzIxMTcsNyBAQAogCWlmICghcnNfaXNfdmFsaWRfYW50KHZhbGlkX3R4X2FudCwgdGJsLT5hbnRfdHlwZSkpCiAJICAgIHJzX3RvZ2dsZV9hbnRlbm5hKHZhbGlkX3R4X2FudCwgJnJhdGUsIHRibCk7CiAKLQlyYXRlID0gcmF0ZV9uX2ZsYWdzX2Zyb21fdGJsKHRibCwgcmF0ZV9pZHgsIHVzZV9ncmVlbik7CisJcmF0ZSA9IHJhdGVfbl9mbGFnc19mcm9tX3RibChwcml2LCB0YmwsIHJhdGVfaWR4LCB1c2VfZ3JlZW4pOwogCXRibC0+Y3VycmVudF9yYXRlID0gcmF0ZTsKIAlyc19zZXRfZXhwZWN0ZWRfdHB0X3RhYmxlKGxxX3N0YSwgdGJsKTsKIAlyc19maWxsX2xpbmtfY21kKE5VTEwsIGxxX3N0YSwgcmF0ZSk7CkBAIC0yMTA0LDcgKzIxNDAsMTggQEAKIAlpbnQgcmF0ZV9pZHg7CiAJdTY0IG1hc2tfYml0ID0gMDsKIAotCUlXTF9ERUJVR19SQVRFX0xJTUlUKCJyYXRlIHNjYWxlIGNhbGN1bGF0ZSBuZXcgcmF0ZSBmb3Igc2tiXG4iKTsKKwlJV0xfREVCVUdfUkFURV9MSU1JVChwcml2LCAicmF0ZSBzY2FsZSBjYWxjdWxhdGUgbmV3IHJhdGUgZm9yIHNrYlxuIik7CisKKwkvKiBHZXQgbWF4IHJhdGUgaWYgdXNlciBzZXQgbWF4IHJhdGUgKi8KKwlpZiAobHFfc3RhKSB7CisJCWxxX3N0YS0+bWF4X3JhdGVfaWR4ID0gdHhyYy0+bWF4X3JhdGVfaWR4OworCQlpZiAoKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopICYmCisJCSAgICAobHFfc3RhLT5tYXhfcmF0ZV9pZHggIT0gLTEpKQorCQkJbHFfc3RhLT5tYXhfcmF0ZV9pZHggKz0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwkJaWYgKChscV9zdGEtPm1heF9yYXRlX2lkeCA8IDApIHx8CisJCSAgICAobHFfc3RhLT5tYXhfcmF0ZV9pZHggPj0gSVdMX1JBVEVfQ09VTlQpKQorCQkJbHFfc3RhLT5tYXhfcmF0ZV9pZHggPSAtMTsKKwl9CiAKIAlpZiAoc3RhKQogCQltYXNrX2JpdCA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07CkBAIC0yMTI5LDcgKzIxNzYsNyBAQAogCQl1OCBzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwogCiAJCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQkJSVdMX0RFQlVHX1JBVEUoIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsCisJCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEFERCBzdGF0aW9uICVwTVxuIiwKIAkJCQkgICAgICAgaGRyLT5hZGRyMSk7CiAJCQlzdGFfaWQgPSBpd2xfYWRkX3N0YXRpb25fZmxhZ3MocHJpdiwgaGRyLT5hZGRyMSwKIAkJCQkJCQkwLCBDTURfQVNZTkMsIE5VTEwpOwpAQCAtMjE1OCw3ICsyMjA1LDcgQEAKIAlpbnQgaSwgajsKIAogCXByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopcHJpdl9yYXRlOwotCUlXTF9ERUJVR19SQVRFKCJjcmVhdGUgc3RhdGlvbiByYXRlIHNjYWxlIHdpbmRvd1xuIik7CisJSVdMX0RFQlVHX1JBVEUocHJpdiwgImNyZWF0ZSBzdGF0aW9uIHJhdGUgc2NhbGUgd2luZG93XG4iKTsKIAogCWxxX3N0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2xfbHFfc3RhKSwgZ2ZwKTsKIApAQCAtMjE4Miw2ICsyMjI5LDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmcHJpdi0+aHctPmNvbmY7CiAJc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSA9IHByaXZfc3RhOwogCXUxNiBtYXNrX2JpdCA9IDA7CisJaW50IGNvdW50OworCWludCBzdGFydF9yYXRlID0gMDsKIAogCWxxX3N0YS0+Zmx1c2hfdGltZXIgPSAwOwogCWxxX3N0YS0+c3VwcF9yYXRlcyA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF07CkBAIC0yMTg5LDcgKzIyMzgsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKykKIAkJCXJzX3JhdGVfc2NhbGVfY2xlYXJfd2luZG93KCZscV9zdGEtPmxxX2luZm9bal0ud2luW2ldKTsKIAotCUlXTF9ERUJVR19SQVRFKCJMUTogKioqIHJhdGUgc2NhbGUgc3RhdGlvbiBnbG9iYWwgaW5pdCAqKipcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJMUTogKioqIHJhdGUgc2NhbGUgc3RhdGlvbiBnbG9iYWwgaW5pdCAqKipcbiIpOwogCS8qIFRPRE86IHdoYXQgaXMgYSBnb29kIHN0YXJ0aW5nIHJhdGUgZm9yIFNUQT8gQWJvdXQgbWlkZGxlPyBNYXliZSBub3QKIAkgKiB0aGUgbG93ZXN0IG9yIHRoZSBoaWdoZXN0IHJhdGUuLiBDb3VsZCBjb25zaWRlciB1c2luZyBSU1NJIGZyb20KIAkgKiBwcmV2aW91cyBwYWNrZXRzPyBOZWVkIHRvIGhhdmUgSUVFRSA4MDIuMVggYXV0aCBzdWNjZWVkIGltbWVkaWF0ZWx5CkBAIC0yMjAwLDEwICsyMjQ5LDEwIEBACiAJCXU4IHN0YV9pZCA9IGl3bF9maW5kX3N0YXRpb24ocHJpdiwgc3RhLT5hZGRyKTsKIAogCQkvKiBmb3IgSUJTUyB0aGUgY2FsbCBhcmUgZnJvbSB0YXNrbGV0ICovCi0JCUlXTF9ERUJVR19SQVRFKCJMUTogQUREIHN0YXRpb24gJXBNXG4iLCBzdGEtPmFkZHIpOworCQlJV0xfREVCVUdfUkFURShwcml2LCAiTFE6IEFERCBzdGF0aW9uICVwTVxuIiwgc3RhLT5hZGRyKTsKIAogCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJCUlXTF9ERUJVR19SQVRFKCJMUTogQUREIHN0YXRpb24gJXBNXG4iLCBzdGEtPmFkZHIpOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkxROiBBREQgc3RhdGlvbiAlcE1cbiIsIHN0YS0+YWRkcik7CiAJCQlzdGFfaWQgPSBpd2xfYWRkX3N0YXRpb25fZmxhZ3MocHJpdiwgc3RhLT5hZGRyLAogCQkJCQkJCTAsIENNRF9BU1lOQywgTlVMTCk7CiAJCX0KQEAgLTIyMTYsNiArMjI2NSw4IEBACiAJfQogCiAJbHFfc3RhLT5pc19kdXAgPSAwOworCWxxX3N0YS0+bWF4X3JhdGVfaWR4ID0gLTE7CisJbHFfc3RhLT5taXNzZWRfcmF0ZV9jb3VudGVyID0gSVdMX01JU1NFRF9SQVRFX01BWDsKIAlscV9zdGEtPmlzX2dyZWVuID0gcnNfdXNlX2dyZWVuKHByaXYsIGNvbmYpOwogCWxxX3N0YS0+YWN0aXZlX2xlZ2FjeV9yYXRlID0gcHJpdi0+YWN0aXZlX3JhdGUgJiB+KDB4MTAwMCk7CiAJbHFfc3RhLT5hY3RpdmVfcmF0ZV9iYXNpYyA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljOwpAQCAtMjI0MCw3ICsyMjkxLDcgQEAKIAlscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlICY9IH4oKHUxNikweDIpOwogCWxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUgPDw9IElXTF9GSVJTVF9PRkRNX1JBVEU7CiAKLQlJV0xfREVCVUdfUkFURSgiU0lTTy1SQVRFPSVYIE1JTU8yLVJBVEU9JVggTUlNTzMtUkFURT0lWFxuIiwKKwlJV0xfREVCVUdfUkFURShwcml2LCAiU0lTTy1SQVRFPSVYIE1JTU8yLVJBVEU9JVggTUlNTzMtUkFURT0lWFxuIiwKIAkJICAgICBscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUsCiAJCSAgICAgbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSwKIAkJICAgICBscV9zdGEtPmFjdGl2ZV9taW1vM19yYXRlKTsKQEAgLTIyNTQsMTYgKzIzMDUsMjAgQEAKIAlscV9zdGEtPmRydiA9IHByaXY7CiAKIAkvKiBGaW5kIGhpZ2hlc3QgdHggcmF0ZSBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUgYW5kIGRlc3RpbmF0aW9uIHN0YXRpb24gKi8KLQltYXNrX2JpdCA9IHN0YS0+c3VwcF9yYXRlc1tzYmFuZC0+YmFuZF0gJiBscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZTsKLQlscV9zdGEtPmxhc3RfdHhyYXRlX2lkeCA9IDM7Ci0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspCisJbWFza19iaXQgPSBzdGEtPnN1cHBfcmF0ZXNbc2JhbmQtPmJhbmRdOworCWNvdW50ID0gc2JhbmQtPm5fYml0cmF0ZXM7CisJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJY291bnQgKz0gSVdMX0ZJUlNUX09GRE1fUkFURTsKKwkJc3RhcnRfcmF0ZSA9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJCW1hc2tfYml0IDw8PSBJV0xfRklSU1RfT0ZETV9SQVRFOworCX0KKworCW1hc2tfYml0ID0gbWFza19iaXQgJiBscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZTsKKwlscV9zdGEtPmxhc3RfdHhyYXRlX2lkeCA9IDQ7CisJZm9yIChpID0gc3RhcnRfcmF0ZTsgaSA8IGNvdW50OyBpKyspCiAJCWlmIChtYXNrX2JpdCAmIEJJVChpKSkKIAkJCWxxX3N0YS0+bGFzdF90eHJhdGVfaWR4ID0gaTsKIAotCS8qIEZvciBNT0RFX0lFRUU4MDIxMUEsIHNraXAgb3ZlciBjY2sgcmF0ZXMgaW4gZ2xvYmFsIHJhdGUgdGFibGUgKi8KLQlpZiAoc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKLQkJbHFfc3RhLT5sYXN0X3R4cmF0ZV9pZHggKz0gSVdMX0ZJUlNUX09GRE1fUkFURTsKLQogCXJzX2luaXRpYWxpemVfbHEocHJpdiwgY29uZiwgc3RhLCBscV9zdGEpOwogfQogCkBAIC0yNDAyLDkgKzI0NTcsOSBAQAogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBwcml2X3N0YTsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgX19tYXliZV91bnVzZWQgPSBwcml2X3I7CiAKLQlJV0xfREVCVUdfUkFURSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJlbnRlclxuIik7CiAJa2ZyZWUobHFfc3RhKTsKLQlJV0xfREVCVUdfUkFURSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIApAQCAtMjQxOCwyMCArMjQ3MywyNyBAQAogCQkJICAgICB1MzIgKnJhdGVfbl9mbGFncywgaW50IGluZGV4KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKKwl1OCB2YWxpZF90eF9hbnQ7CisJdTggYW50X3NlbF90eDsKIAogCXByaXYgPSBscV9zdGEtPmRydjsKKwl2YWxpZF90eF9hbnQgPSBwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50OwogCWlmIChscV9zdGEtPmRiZ19maXhlZF9yYXRlKSB7Ci0JCWlmIChpbmRleCA8IDEyKSB7CisJCWFudF9zZWxfdHggPQorCQkgICgobHFfc3RhLT5kYmdfZml4ZWRfcmF0ZSAmIFJBVEVfTUNTX0FOVF9BQkNfTVNLKQorCQkgID4+IFJBVEVfTUNTX0FOVF9QT1MpOworCQlpZiAoKHZhbGlkX3R4X2FudCAmIGFudF9zZWxfdHgpID09IGFudF9zZWxfdHgpIHsKIAkJCSpyYXRlX25fZmxhZ3MgPSBscV9zdGEtPmRiZ19maXhlZF9yYXRlOworCQkJSVdMX0RFQlVHX1JBVEUocHJpdiwgIkZpeGVkIHJhdGUgT05cbiIpOwogCQl9IGVsc2UgewotCQkJaWYgKGxxX3N0YS0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQkJCSpyYXRlX25fZmxhZ3MgPSAweDgwMEQ7Ci0JCQllbHNlCi0JCQkJKnJhdGVfbl9mbGFncyA9IDB4ODIwQTsKKwkJCWxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUgPSAwOworCQkJSVdMX0VSUihwcml2LAorCQkJICAgICJJbnZhbGlkIGFudGVubmEgc2VsZWN0aW9uIDB4JVgsIFZhbGlkIGlzIDB4JVhcbiIsCisJCQkgICAgYW50X3NlbF90eCwgdmFsaWRfdHhfYW50KTsKKwkJCUlXTF9ERUJVR19SQVRFKHByaXYsICJGaXhlZCByYXRlIE9GRlxuIik7CiAJCX0KLQkJSVdMX0RFQlVHX1JBVEUoIkZpeGVkIHJhdGUgT05cbiIpOwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19SQVRFKCJGaXhlZCByYXRlIE9GRlxuIik7CisJCUlXTF9ERUJVR19SQVRFKHByaXYsICJGaXhlZCByYXRlIE9GRlxuIik7CiAJfQogfQogCkBAIC0yNDYwLDcgKzI1MjIsNyBAQAogCWxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUgID0gMHgxRkQwOwkvKiA2IC0gNjAgTUJpdHMsIG5vIDksIG5vIENDSyAqLwogCWxxX3N0YS0+YWN0aXZlX21pbW8zX3JhdGUgID0gMHgxRkQwOwkvKiA2IC0gNjAgTUJpdHMsIG5vIDksIG5vIENDSyAqLwogCi0JSVdMX0RFQlVHX1JBVEUoInN0YV9pZCAlZCByYXRlIDB4JVhcbiIsCisJSVdMX0RFQlVHX1JBVEUocHJpdiwgInN0YV9pZCAlZCByYXRlIDB4JVhcbiIsCiAJCWxxX3N0YS0+bHEuc3RhX2lkLCBscV9zdGEtPmRiZ19maXhlZF9yYXRlKTsKIAogCWlmIChscV9zdGEtPmRiZ19maXhlZF9yYXRlKSB7CkBAIC0yNDc0LDExICsyNTM2LDE5IEBACiBzdGF0aWMgc3NpemVfdCByc19zdGFfZGJnZnNfc2NhbGVfdGFibGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZmWzEwMjRdOworCWNoYXIgKmJ1ZmY7CiAJaW50IGRlc2MgPSAwOwogCWludCBpID0gMDsKKwlzc2l6ZV90IHJldDsKIAogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2OworCXN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8gKnRibCA9ICYobHFfc3RhLT5scV9pbmZvW2xxX3N0YS0+YWN0aXZlX3RibF0pOworCisJcHJpdiA9IGxxX3N0YS0+ZHJ2OworCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAic3RhX2lkICVkXG4iLCBscV9zdGEtPmxxLnN0YV9pZCk7CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImZhaWxlZD0lZCBzdWNjZXNzPSVkIHJhdGU9MCVYXG4iLApAQCAtMjQ4Niw2ICsyNTU2LDIwIEBACiAJCQlscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZSk7CiAJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgImZpeGVkIHJhdGUgMHglWFxuIiwKIAkJCWxxX3N0YS0+ZGJnX2ZpeGVkX3JhdGUpOworCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJ2YWxpZF90eF9hbnQgJXMlcyVzXG4iLAorCSAgICAocHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCAmIEFOVF9BKSA/ICJBTlRfQSwiIDogIiIsCisJICAgIChwcml2LT5od19wYXJhbXMudmFsaWRfdHhfYW50ICYgQU5UX0IpID8gIkFOVF9CLCIgOiAiIiwKKwkgICAgKHByaXYtPmh3X3BhcmFtcy52YWxpZF90eF9hbnQgJiBBTlRfQykgPyAiQU5UX0MiIDogIiIpOworCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICJscSB0eXBlICVzXG4iLAorCSAgIChpc19sZWdhY3kodGJsLT5scV90eXBlKSkgPyAibGVnYWN5IiA6ICJIVCIpOworCWlmIChpc19IdCh0YmwtPmxxX3R5cGUpKSB7CisJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgJXMiLAorCQkgICAoaXNfc2lzbyh0YmwtPmxxX3R5cGUpKSA/ICJTSVNPIiA6CisJCSAgICgoaXNfbWltbzIodGJsLT5scV90eXBlKSkgPyAiTUlNTzIiIDogIk1JTU8zIikpOworCQkgICBkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiICVzIiwKKwkJICAgKHRibC0+aXNfZmF0KSA/ICI0ME1IeiIgOiAiMjBNSHoiKTsKKwkJZGVzYyArPSBzcHJpbnRmKGJ1ZmYrZGVzYywgIiAlc1xuIiwgKHRibC0+aXNfU0dJKSA/ICJTR0kiIDogIiIpOworCX0KIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiZ2VuZXJhbDoiCiAJCSJmbGFncz0weCVYIG1pbW8tZD0lZCBzLWFudDB4JXggZC1hbnQ9MHgleFxuIiwKIAkJbHFfc3RhLT5scS5nZW5lcmFsX3BhcmFtcy5mbGFncywKQEAgLTI1MTEsNyArMjU5NSw5IEBACiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIgcmF0ZVslZF0gMHglWFxuIiwKIAkJCWksIGxlMzJfdG9fY3B1KGxxX3N0YS0+bHEucnNfdGFibGVbaV0ucmF0ZV9uX2ZsYWdzKSk7CiAKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZmYsIGRlc2MpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3N0YV9kYmdmc19zY2FsZV90YWJsZV9vcHMgPSB7CkBAIC0yNTIyLDExICsyNjA4LDE3IEBACiBzdGF0aWMgc3NpemVfdCByc19zdGFfZGJnZnNfc3RhdHNfdGFibGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCWNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZmWzEwMjRdOworCWNoYXIgKmJ1ZmY7CiAJaW50IGRlc2MgPSAwOwogCWludCBpLCBqOworCXNzaXplX3QgcmV0OwogCiAJc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWJ1ZmYgPSBrbWFsbG9jKDEwMjQsIEdGUF9LRVJORUwpOworCWlmICghYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlmb3IgKGkgPSAwOyBpIDwgTFFfU0laRTsgaSsrKSB7CiAJCWRlc2MgKz0gc3ByaW50ZihidWZmK2Rlc2MsICIlcyB0eXBlPSVkIFNHST0lZCBGQVQ9JWQgRFVQPSVkXG4iCiAJCQkJInJhdGU9MHglWFxuIiwKQEAgLTI1NDQsNyArMjYzNiw5IEBACiAJCQkJbHFfc3RhLT5scV9pbmZvW2ldLndpbltqXS5zdWNjZXNzX3JhdGlvKTsKIAkJfQogCX0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWZmLCBkZXNjKTsKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZmYsIGRlc2MpOworCWtmcmVlKGJ1ZmYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzX3N0YV9kYmdmc19zdGF0c190YWJsZV9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCmluZGV4IDc4ZWU4M2EuLmFiNTlhY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI3LDggKzI3LDYgQEAKICNpZm5kZWYgX19pd2xfYWduX3JzX2hfXwogI2RlZmluZSBfX2l3bF9hZ25fcnNfaF9fCiAKLSNpbmNsdWRlICJpd2wtZGV2LmgiCi0KIHN0cnVjdCBpd2xfcmF0ZV9pbmZvIHsKIAl1OCBwbGNwOwkvKiB1Q29kZSBBUEk6ICBJV0xfUkFURV82TV9QTENQLCBldGMuICovCiAJdTggcGxjcF9zaXNvOwkvKiB1Q29kZSBBUEk6ICBJV0xfUkFURV9TSVNPXzZNX1BMQ1AsIGV0Yy4gKi8KQEAgLTQzLDYgKzQxLDE5IEBACiAJdTggbmV4dF9yc190Z2c7ICAvKiBuZXh0IHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLwogfTsKIAorc3RydWN0IGl3bDM5NDVfcmF0ZV9pbmZvIHsKKwl1OCBwbGNwOwkJLyogdUNvZGUgQVBJOiAgSVdMX1JBVEVfNk1fUExDUCwgZXRjLiAqLworCXU4IGllZWU7CQkvKiBNQUMgaGVhZGVyOiAgSVdMX1JBVEVfNk1fSUVFRSwgZXRjLiAqLworCXU4IHByZXZfaWVlZTsJCS8qIHByZXZpb3VzIHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KKwl1OCBuZXh0X2llZWU7CQkvKiBuZXh0IHJhdGUgaW4gSUVFRSBzcGVlZHMgKi8KKwl1OCBwcmV2X3JzOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIHJzIGFsZ28gKi8KKwl1OCBuZXh0X3JzOwkJLyogbmV4dCByYXRlIHVzZWQgaW4gcnMgYWxnbyAqLworCXU4IHByZXZfcnNfdGdnOwkJLyogcHJldmlvdXMgcmF0ZSB1c2VkIGluIFRHRyBycyBhbGdvICovCisJdTggbmV4dF9yc190Z2c7CQkvKiBuZXh0IHJhdGUgdXNlZCBpbiBUR0cgcnMgYWxnbyAqLworCXU4IHRhYmxlX3JzX2luZGV4OwkvKiBpbmRleCBpbiByYXRlIHNjYWxlIHRhYmxlIGNtZCAqLworCXU4IHByZXZfdGFibGVfcnM7CS8qIHByZXYgaW4gcmF0ZSB0YWJsZSBjbWQgKi8KK307CisKIC8qCiAgKiBUaGVzZSBzZXJ2ZSBhcyBpbmRleGVzIGludG8KICAqIHN0cnVjdCBpd2xfcmF0ZV9pbmZvIGl3bF9yYXRlc1tJV0xfUkFURV9DT1VOVF07CkBAIC02MiwxMiArNzMsMzAgQEAKIAlJV0xfUkFURV81NE1fSU5ERVgsCiAJSVdMX1JBVEVfNjBNX0lOREVYLAogCUlXTF9SQVRFX0NPVU5ULCAvKkZJWE1FOlJTOmNoYW5nZSB0byBJV0xfUkFURV9JTkRFWF9DT1VOVCwqLworCUlXTF9SQVRFX0NPVU5UXzM5NDUgPSBJV0xfUkFURV9DT1VOVCAtIDEsCiAJSVdMX1JBVEVfSU5WTV9JTkRFWCA9IElXTF9SQVRFX0NPVU5ULAogCUlXTF9SQVRFX0lOVkFMSUQgPSBJV0xfUkFURV9DT1VOVCwKIH07CiAKIGVudW0geworCUlXTF9SQVRFXzZNX0lOREVYX1RBQkxFID0gMCwKKwlJV0xfUkFURV85TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8xMk1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfMThNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFXzI0TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8zNk1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfNDhNX0lOREVYX1RBQkxFLAorCUlXTF9SQVRFXzU0TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8xTV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8yTV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV81TV9JTkRFWF9UQUJMRSwKKwlJV0xfUkFURV8xMU1fSU5ERVhfVEFCTEUsCisJSVdMX1JBVEVfSU5WTV9JTkRFWF9UQUJMRSA9IElXTF9SQVRFX0lOVk1fSU5ERVggLSAxLAorfTsKKworZW51bSB7CiAJSVdMX0ZJUlNUX09GRE1fUkFURSA9IElXTF9SQVRFXzZNX0lOREVYLAorCUlXTDM5X0xBU1RfT0ZETV9SQVRFID0gSVdMX1JBVEVfNTRNX0lOREVYLAogCUlXTF9MQVNUX09GRE1fUkFURSA9IElXTF9SQVRFXzYwTV9JTkRFWCwKIAlJV0xfRklSU1RfQ0NLX1JBVEUgPSBJV0xfUkFURV8xTV9JTkRFWCwKIAlJV0xfTEFTVF9DQ0tfUkFURSA9IElXTF9SQVRFXzExTV9JTkRFWCwKQEAgLTIwMiw3ICsyMzEsNyBAQAogI2RlZmluZSBJV0xfUlNfR09PRF9SQVRJTwkJMTI4MDAJLyogMTAwJSAqLwogI2RlZmluZSBJV0xfUkFURV9TQ0FMRV9TV0lUQ0gJCTEwODgwCS8qICA4NSUgKi8KICNkZWZpbmUgSVdMX1JBVEVfSElHSF9USAkJMTA4ODAJLyogIDg1JSAqLwotI2RlZmluZSBJV0xfUkFURV9JTkNSRUFTRV9USCAgICAgICAgICAgIDg5NjAJLyogIDcwJSAqLworI2RlZmluZSBJV0xfUkFURV9JTkNSRUFTRV9USAkJNjQwMAkvKiAgNTAlICovCiAjZGVmaW5lIElXTF9SQVRFX0RFQ1JFQVNFX1RICQkxOTIwCS8qICAxNSUgKi8KIAogLyogcG9zc2libGUgYWN0aW9ucyB3aGVuIGluIGxlZ2FjeSBtb2RlICovCkBAIC0yNDgsNiArMjc3LDcgQEAKICNkZWZpbmUgVElNRV9XUkFQX0FST1VORCh4LCB5KSAoKCh5KSA+ICh4KSkgPyAoeSkgLSAoeCkgOiAoMC0oeCkpICsgKHkpKQogCiBleHRlcm4gY29uc3Qgc3RydWN0IGl3bF9yYXRlX2luZm8gaXdsX3JhdGVzW0lXTF9SQVRFX0NPVU5UXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaXdsMzk0NV9yYXRlX2luZm8gaXdsMzk0NV9yYXRlc1tJV0xfUkFURV9DT1VOVF8zOTQ1XTsKIAogZW51bSBpd2xfdGFibGVfdHlwZSB7CiAJTFFfTk9ORSwKQEAgLTMwMyw2ICszMzMsMjMgQEAKIAlyZXR1cm4gcmF0ZTsKIH0KIAorc3RhdGljIGlubGluZSB1OCBpd2wzOTQ1X2dldF9wcmV2X2llZWVfcmF0ZSh1OCByYXRlX2luZGV4KQoreworCXU4IHJhdGUgPSBpd2wzOTQ1X3JhdGVzW3JhdGVfaW5kZXhdLnByZXZfaWVlZTsKKworCWlmIChyYXRlID09IElXTF9SQVRFX0lOVkFMSUQpCisJCXJhdGUgPSByYXRlX2luZGV4OworCXJldHVybiByYXRlOworfQorCisvKioKKyAqIGl3bDM5NDVfcmF0ZV9zY2FsZV9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgcmF0ZSBzY2FsZSB0YWJsZSBiYXNlZCBvbiBhc3NvYyBpbmZvCisgKgorICogVGhlIHNwZWNpZmljIHRocm91Z2hwdXQgdGFibGUgdXNlZCBpcyBiYXNlZCBvbiB0aGUgdHlwZSBvZiBuZXR3b3JrCisgKiB0aGUgYXNzb2NpYXRlZCB3aXRoLCBpbmNsdWRpbmcgQSwgQiwgRywgYW5kIEcgdy8gVEdHIHByb3RlY3Rpb24KKyAqLworZXh0ZXJuIHZvaWQgaXdsMzk0NV9yYXRlX3NjYWxlX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHMzMiBzdGFfaWQpOworCiAvKioKICAqIGl3bF9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIgLSBSZWdpc3RlciB0aGUgcmF0ZSBjb250cm9sIGFsZ29yaXRobSBjYWxsYmFja3MKICAqCkBAIC0zMTQsNiArMzYxLDcgQEAKICAqCiAgKi8KIGV4dGVybiBpbnQgaXdsYWduX3JhdGVfY29udHJvbF9yZWdpc3Rlcih2b2lkKTsKK2V4dGVybiBpbnQgaXdsMzk0NV9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIodm9pZCk7CiAKIC8qKgogICogaXdsX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlciB0aGUgcmF0ZSBjb250cm9sIGNhbGxiYWNrcwpAQCAtMzIyLDUgKzM3MCw2IEBACiAgKiB0aGUgZHJpdmVyIGlzIHVubG9hZGVkLgogICovCiBleHRlcm4gdm9pZCBpd2xhZ25fcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIodm9pZCk7CitleHRlcm4gdm9pZCBpd2wzOTQ1X3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHZvaWQpOwogCiAjZW5kaWYgLyogX19pd2xfYWduX19yc19fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCmluZGV4IDEyOWUyZDMuLjY2M2RjODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC00NCw2ICs0NCw4IEBACiAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAorI2RlZmluZSBEUlZfTkFNRSAgICAgICAgIml3bGFnbiIKKwogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKICNpbmNsdWRlICJpd2wtZGV2LmgiCiAjaW5jbHVkZSAiaXdsLWNvcmUuaCIKQEAgLTYxLDkgKzYzLDcgQEAKIAogLyoKICAqIG1vZHVsZSBuYW1lLCBjb3B5cmlnaHQsIHZlcnNpb24sIGV0Yy4KLSAqIE5PVEU6IERSVl9OQU1FIGlzIGRlZmluZWQgaW4gaXdsd2lmaS5oIGZvciB1c2UgYnkgaXdsLWRlYnVnLmggYW5kIHByaW50awogICovCi0KICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJJbnRlbChSKSBXaXJlbGVzcyBXaUZpIExpbmsgQUdOIGRyaXZlciBmb3IgTGludXgiCiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwpAQCAtNzIsNyArNzIsNyBAQAogI2RlZmluZSBWRAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfSVdMQUdOX1NQRUNUUlVNX01FQVNVUkVNRU5UCisjaWZkZWYgQ09ORklHX0lXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKICNkZWZpbmUgVlMgInMiCiAjZWxzZQogI2RlZmluZSBWUwpAQCAtOTQsNjYgKzk0LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0KLQotc3RhdGljIHZvaWQgaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGh3X2RlY3J5cHQpCi17Ci0Jc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247Ci0KLQlpZiAoaHdfZGVjcnlwdCkKLQkJcnhvbi0+ZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0s7Ci0JZWxzZQotCQlyeG9uLT5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOwotCi19Ci0KLS8qKgotICogaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZCAtIGNoZWNrIGlmIGZ1bGwgUlhPTiAodnMgUlhPTl9BU1NPQykgY21kIGlzIG5lZWRlZAotICogQHByaXY6IHN0YWdpbmdfcnhvbiBpcyBjb21wYXJlZCB0byBhY3RpdmVfcnhvbgotICoKLSAqIElmIHRoZSBSWE9OIHN0cnVjdHVyZSBpcyBjaGFuZ2luZyBlbm91Z2ggdG8gcmVxdWlyZSBhIG5ldyB0dW5lLAotICogb3IgaXMgY2xlYXJpbmcgdGhlIFJYT05fRklMVEVSX0FTU09DX01TSywgdGhlbiByZXR1cm4gMSB0byBpbmRpY2F0ZSB0aGF0Ci0gKiBhIG5ldyB0dW5lIChmdWxsIFJYT04gY29tbWFuZCwgcmF0aGVyIHRoYW4gUlhPTl9BU1NPQyBjbWQpIGlzIHJlcXVpcmVkLgotICovCi1zdGF0aWMgaW50IGl3bF9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCi0JLyogVGhlc2UgaXRlbXMgYXJlIG9ubHkgc2V0dGFibGUgZnJvbSB0aGUgZnVsbCBSWE9OIGNvbW1hbmQgKi8KLQlpZiAoIShpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgfHwKLQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyLAotCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIpIHx8Ci0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLAotCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm5vZGVfYWRkcikgfHwKLQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi53bGFwX2Jzc2lkX2FkZHIsCi0JCQkgICAgICAgcHJpdi0+YWN0aXZlX3J4b24ud2xhcF9ic3NpZF9hZGRyKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlICE9IHByaXYtPmFjdGl2ZV9yeG9uLmRldl90eXBlKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgIT0gcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5haXJfcHJvcGFnYXRpb24gIT0KLQkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmFpcl9wcm9wYWdhdGlvbikgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgIT0KLQkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcykgfHwKLQkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzICE9Ci0JICAgICBwcml2LT5hY3RpdmVfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkICE9IHByaXYtPmFjdGl2ZV9yeG9uLmFzc29jX2lkKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBmbGFncywgZmlsdGVyX2ZsYWdzLCBvZmRtX2Jhc2ljX3JhdGVzLCBhbmQgY2NrX2Jhc2ljX3JhdGVzIGNhbgotCSAqIGJlIHVwZGF0ZWQgd2l0aCB0aGUgUlhPTl9BU1NPQyBjb21tYW5kIC0tIGhvd2V2ZXIgb25seSBzb21lCi0JICogZmxhZyB0cmFuc2l0aW9ucyBhcmUgYWxsb3dlZCB1c2luZyBSWE9OX0FTU09DICovCi0KLQkvKiBDaGVjayBpZiB3ZSBhcmUgbm90IHN3aXRjaGluZyBiYW5kcyAqLwotCWlmICgocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSAhPQotCSAgICAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spKQotCQlyZXR1cm4gMTsKLQotCS8qIENoZWNrIGlmIHdlIGFyZSBzd2l0Y2hpbmcgYXNzb2NpYXRpb24gdG9nZ2xlICovCi0JaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSAhPQotCQkocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBpd2xfY29tbWl0X3J4b24gLSBjb21taXQgc3RhZ2luZ19yeG9uIHRvIGhhcmR3YXJlCiAgKgpAQCAtMTc5LDkgKzExOSw5IEBACiAJICogNTAwMCwgYnV0IHdpbGwgbm90IGRhbWFnZSA0OTY1ICovCiAJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NFTEZfQ1RTX0VOOwogCi0JcmV0ID0gaXdsX2Fnbl9jaGVja19yeG9uX2NtZCgmcHJpdi0+c3RhZ2luZ19yeG9uKTsKKwlyZXQgPSBpd2xfY2hlY2tfcnhvbl9jbWQocHJpdik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkludmFsaWQgUlhPTiBjb25maWd1cmF0aW9uLiAgTm90IGNvbW1pdHRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBSWE9OIGNvbmZpZ3VyYXRpb24uICBOb3QgY29tbWl0dGluZy5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE5MSw3ICsxMzEsNyBAQAogCWlmICghaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZChwcml2KSkgewogCQlyZXQgPSBpd2xfc2VuZF9yeG9uX2Fzc29jKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgUlhPTl9BU1NPQyAoJWQpXG4iLCByZXQpOworCQkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2V0dGluZyBSWE9OX0FTU09DICglZClcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAKQEAgLTIwNyw3ICsxNDcsNyBAQAogCSAqIHdlIG11c3QgY2xlYXIgdGhlIGFzc29jaWF0ZWQgZnJvbSB0aGUgYWN0aXZlIGNvbmZpZ3VyYXRpb24KIAkgKiBiZWZvcmUgd2UgYXBwbHkgdGhlIG5ldyBjb25maWcgKi8KIAlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYgbmV3X2Fzc29jKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJUb2dnbGluZyBhc3NvY2lhdGVkIGJpdCBvbiBjdXJyZW50IFJYT05cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCiAJCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKQEAgLTIxOCwxMiArMTU4LDEyIEBACiAJCSAqIGFjdGl2ZV9yeG9uIGJhY2sgdG8gd2hhdCBpdCB3YXMgcHJldmlvdXNseSAqLwogCQlpZiAocmV0KSB7CiAJCQlhY3RpdmVfcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKLQkJCUlXTF9FUlJPUigiRXJyb3IgY2xlYXJpbmcgQVNTT0NfTVNLICglZClcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBjbGVhcmluZyBBU1NPQ19NU0sgKCVkKVxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQlJV0xfREVCVUdfSU5GTygiU2VuZGluZyBSWE9OXG4iCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNlbmRpbmcgUlhPTlxuIgogCQkgICAgICAgIiogd2l0aCVzIFJYT05fRklMVEVSX0FTU09DX01TS1xuIgogCQkgICAgICAgIiogY2hhbm5lbCA9ICVkXG4iCiAJCSAgICAgICAiKiBic3NpZCA9ICVwTVxuIiwKQEAgLTI0Miw3ICsxODIsNyBAQAogCQlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCiAJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX2NtZCksICZwcml2LT5zdGFnaW5nX3J4b24pOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgbmV3IFJYT04gKCVkKVxuIiwgcmV0KTsKKwkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgbmV3IFJYT04gKCVkKVxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJbWVtY3B5KGFjdGl2ZV9yeG9uLCAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CkBAIC0yNTYsNyArMTk2LDcgQEAKIAkvKiBBZGQgdGhlIGJyb2FkY2FzdCBhZGRyZXNzIHNvIHdlIGNhbiBzZW5kIGJyb2FkY2FzdCBmcmFtZXMgKi8KIAlpZiAoaXdsX3J4b25fYWRkX3N0YXRpb24ocHJpdiwgaXdsX2JjYXN0X2FkZHIsIDApID09CiAJCQkJCQlJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgYWRkaW5nIEJST0FEQ0FTVCBhZGRyZXNzIGZvciB0cmFuc21pdC5cbiIpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBhZGRpbmcgQlJPQURDQVNUIGFkZHJlc3MgZm9yIHRyYW5zbWl0LlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjY3LDEzICsyMDcsMTUgQEAKIAkJCXJldCA9IGl3bF9yeG9uX2FkZF9zdGF0aW9uKHByaXYsCiAJCQkJCSAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIsIDEpOwogCQkJaWYgKHJldCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCQkJSVdMX0VSUk9SKCJFcnJvciBhZGRpbmcgQVAgYWRkcmVzcyBmb3IgVFguXG4iKTsKKwkJCQlJV0xfRVJSKHByaXYsCisJCQkJCSJFcnJvciBhZGRpbmcgQVAgYWRkcmVzcyBmb3IgVFguXG4iKTsKIAkJCQlyZXR1cm4gLUVJTzsKIAkJCX0KIAkJCXByaXYtPmFzc29jX3N0YXRpb25fYWRkZWQgPSAxOwogCQkJaWYgKHByaXYtPmRlZmF1bHRfd2VwX2tleSAmJgogCQkJICAgIGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHByaXYsIDApKQotCQkJCUlXTF9FUlJPUigiQ291bGQgbm90IHNlbmQgV0VQIHN0YXRpYyBrZXkuXG4iKTsKKwkJCQlJV0xfRVJSKHByaXYsCisJCQkJCSJDb3VsZCBub3Qgc2VuZCBXRVAgc3RhdGljIGtleS5cbiIpOwogCQl9CiAKIAkJLyogQXBwbHkgdGhlIG5ldyBjb25maWd1cmF0aW9uCkBAIC0yODIsNyArMjI0LDcgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAogCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcnhvbl9jbWQpLCAmcHJpdi0+c3RhZ2luZ19yeG9uKTsKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIG5ldyBSWE9OICglZClcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCW1lbWNweShhY3RpdmVfcnhvbiwgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKCphY3RpdmVfcnhvbikpOwpAQCAtMjk0LDcgKzIzNiw3IEBACiAJICogc2VuZCBhIG5ldyBUWFBPV0VSIGNvbW1hbmQgb3Igd2Ugd29uJ3QgYmUgYWJsZSB0byBUeCBhbnkgZnJhbWVzICovCiAJcmV0ID0gaXdsX3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgdHJ1ZSk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgVFggcG93ZXIgKCVkKVxuIiwgcmV0KTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3Igc2VuZGluZyBUWCBwb3dlciAoJWQpXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMzA4LDI1ICsyNTAsMTEgQEAKIAlpd2xfY29tbWl0X3J4b24ocHJpdik7CiB9CiAKLXN0YXRpYyBpbnQgaXdsX3NlbmRfYnRfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsX2J0X2NtZCBidF9jbWQgPSB7Ci0JCS5mbGFncyA9IDMsCi0JCS5sZWFkX3RpbWUgPSAweEFBLAotCQkubWF4X2tpbGwgPSAxLAotCQkua2lsbF9hY2tfbWFzayA9IDAsCi0JCS5raWxsX2N0c19tYXNrID0gMCwKLQl9OwotCi0JcmV0dXJuIGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfQlRfQ09ORklHLAotCQkJCXNpemVvZihzdHJ1Y3QgaXdsX2J0X2NtZCksICZidF9jbWQpOwotfQotCiBzdGF0aWMgdm9pZCBpd2xfY2xlYXJfZnJlZV9mcmFtZXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAKLQlJV0xfREVCVUdfSU5GTygiJWQgZnJhbWVzIG9uIHByZS1hbGxvY2F0ZWQgaGVhcCBvbiBjbGVhci5cbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIiVkIGZyYW1lcyBvbiBwcmUtYWxsb2NhdGVkIGhlYXAgb24gY2xlYXIuXG4iLAogCQkgICAgICAgcHJpdi0+ZnJhbWVzX2NvdW50KTsKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmcHJpdi0+ZnJlZV9mcmFtZXMpKSB7CkBAIC0zMzcsNyArMjY1LDcgQEAKIAl9CiAKIAlpZiAocHJpdi0+ZnJhbWVzX2NvdW50KSB7Ci0JCUlXTF9XQVJOSU5HKCIlZCBmcmFtZXMgc3RpbGwgaW4gdXNlLiAgRGlkIHdlIGxvc2Ugb25lP1xuIiwKKwkJSVdMX1dBUk4ocHJpdiwgIiVkIGZyYW1lcyBzdGlsbCBpbiB1c2UuICBEaWQgd2UgbG9zZSBvbmU/XG4iLAogCQkJICAgIHByaXYtPmZyYW1lc19jb3VudCk7CiAJCXByaXYtPmZyYW1lc19jb3VudCA9IDA7CiAJfQpAQCAtMzUwLDcgKzI3OCw3IEBACiAJaWYgKGxpc3RfZW1wdHkoJnByaXYtPmZyZWVfZnJhbWVzKSkgewogCQlmcmFtZSA9IGt6YWxsb2Moc2l6ZW9mKCpmcmFtZSksIEdGUF9LRVJORUwpOwogCQlpZiAoIWZyYW1lKSB7Ci0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBmcmFtZSFcbiIpOworCQkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGFsbG9jYXRlIGZyYW1lIVxuIik7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCkBAIC0zODYsMzEgKzMxNCw2IEBACiAJcmV0dXJuIHByaXYtPmlic3NfYmVhY29uLT5sZW47CiB9CiAKLXN0YXRpYyB1OCBpd2xfcmF0ZV9nZXRfbG93ZXN0X3BsY3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWludCBpOwotCWludCByYXRlX21hc2s7Ci0KLQkvKiBTZXQgcmF0ZSBtYXNrKi8KLQlpZiAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKQotCQlyYXRlX21hc2sgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9DQ0tfUkFURVNfTUFTSzsKLQllbHNlCi0JCXJhdGVfbWFzayA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX09GRE1fUkFURVNfTUFTSzsKLQotCS8qIEZpbmQgbG93ZXN0IHZhbGlkIHJhdGUgKi8KLQlmb3IgKGkgPSBJV0xfUkFURV8xTV9JTkRFWDsgaSAhPSBJV0xfUkFURV9JTlZBTElEOwotCQkJCQlpID0gaXdsX3JhdGVzW2ldLm5leHRfaWVlZSkgewotCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgaSkpCi0JCQlyZXR1cm4gaXdsX3JhdGVzW2ldLnBsY3A7Ci0JfQotCi0JLyogTm8gdmFsaWQgcmF0ZSB3YXMgZm91bmQuIEFzc2lnbiB0aGUgbG93ZXN0IG9uZSAqLwotCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCi0JCXJldHVybiBJV0xfUkFURV8xTV9QTENQOwotCWVsc2UKLQkJcmV0dXJuIElXTF9SQVRFXzZNX1BMQ1A7Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXdsX2h3X2dldF9iZWFjb25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgc3RydWN0IGl3bF9mcmFtZSAqZnJhbWUsIHU4IHJhdGUpCiB7CkBAIC00NTIsNyArMzU1LDcgQEAKIAlmcmFtZSA9IGl3bF9nZXRfZnJlZV9mcmFtZShwcml2KTsKIAogCWlmICghZnJhbWUpIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3Qgb2J0YWluIGZyZWUgZnJhbWUgYnVmZmVyIGZvciBiZWFjb24gIgorCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3Qgb2J0YWluIGZyZWUgZnJhbWUgYnVmZmVyIGZvciBiZWFjb24gIgogCQkJICAiY29tbWFuZC5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC00NjksNiArMzcyLDE1OSBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGl3bF90ZmRfdGJfZ2V0X2FkZHIoc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQoreworCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOworCisJZG1hX2FkZHJfdCBhZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZ0Yi0+bG8pOworCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiBzaXplb2YodTMyKSkKKwkJYWRkciB8PQorCQkoKGRtYV9hZGRyX3QpKGxlMTZfdG9fY3B1KHRiLT5oaV9uX2xlbikgJiAweEYpIDw8IDE2KSA8PCAxNjsKKworCXJldHVybiBhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBpd2xfdGZkX3RiX2dldF9sZW4oc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQoreworCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOworCisJcmV0dXJuIGxlMTZfdG9fY3B1KHRiLT5oaV9uX2xlbikgPj4gNDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGl3bF90ZmRfc2V0X3RiKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCwKKwkJCQkgIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbikKK3sKKwlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKKwl1MTYgaGlfbl9sZW4gPSBsZW4gPDwgNDsKKworCXB1dF91bmFsaWduZWRfbGUzMihhZGRyLCAmdGItPmxvKTsKKwlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpCisJCWhpX25fbGVuIHw9ICgoYWRkciA+PiAxNikgPj4gMTYpICYgMHhGOworCisJdGItPmhpX25fbGVuID0gY3B1X3RvX2xlMTYoaGlfbl9sZW4pOworCisJdGZkLT5udW1fdGJzID0gaWR4ICsgMTsKK30KKworc3RhdGljIGlubGluZSB1OCBpd2xfdGZkX2dldF9udW1fdGJzKHN0cnVjdCBpd2xfdGZkICp0ZmQpCit7CisJcmV0dXJuIHRmZC0+bnVtX3RicyAmIDB4MWY7Cit9CisKKy8qKgorICogaXdsX2h3X3R4cV9mcmVlX3RmZCAtIEZyZWUgYWxsIGNodW5rcyByZWZlcmVuY2VkIGJ5IFRGRCBbdHhxLT5xLnJlYWRfcHRyXQorICogQHByaXYgLSBkcml2ZXIgcHJpdmF0ZSBkYXRhCisgKiBAdHhxIC0gdHggcXVldWUKKyAqCisgKiBEb2VzIE5PVCBhZHZhbmNlIGFueSBURkQgY2lyY3VsYXIgYnVmZmVyIHJlYWQvd3JpdGUgaW5kZXhlcworICogRG9lcyBOT1QgZnJlZSB0aGUgVEZEIGl0c2VsZiAod2hpY2ggaXMgd2l0aGluIGNpcmN1bGFyIGJ1ZmZlcikKKyAqLwordm9pZCBpd2xfaHdfdHhxX2ZyZWVfdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQoreworCXN0cnVjdCBpd2xfdGZkICp0ZmRfdG1wID0gKHN0cnVjdCBpd2xfdGZkICopdHhxLT50ZmRzOworCXN0cnVjdCBpd2xfdGZkICp0ZmQ7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7CisJaW50IGluZGV4ID0gdHhxLT5xLnJlYWRfcHRyOworCWludCBpOworCWludCBudW1fdGJzOworCisJdGZkID0gJnRmZF90bXBbaW5kZXhdOworCisJLyogU2FuaXR5IGNoZWNrIG9uIG51bWJlciBvZiBjaHVua3MgKi8KKwludW1fdGJzID0gaXdsX3RmZF9nZXRfbnVtX3Ricyh0ZmQpOworCisJaWYgKG51bV90YnMgPj0gSVdMX05VTV9PRl9UQlMpIHsKKwkJSVdMX0VSUihwcml2LCAiVG9vIG1hbnkgY2h1bmtzOiAlaVxuIiwgbnVtX3Ricyk7CisJCS8qIEB0b2RvIGlzc3VlIGZhdGFsIGVycm9yLCBpdCBpcyBxdWl0ZSBzZXJpb3VzIHNpdHVhdGlvbiAqLworCQlyZXR1cm47CisJfQorCisJLyogVW5tYXAgdHhfY21kICovCisJaWYgKG51bV90YnMpCisJCXBjaV91bm1hcF9zaW5nbGUoZGV2LAorCQkJCXBjaV91bm1hcF9hZGRyKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIG1hcHBpbmcpLAorCQkJCXBjaV91bm1hcF9sZW4oJnR4cS0+Y21kW2luZGV4XS0+bWV0YSwgbGVuKSwKKwkJCQlQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCisJLyogVW5tYXAgY2h1bmtzLCBpZiBhbnkuICovCisJZm9yIChpID0gMTsgaSA8IG51bV90YnM7IGkrKykgeworCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwgaXdsX3RmZF90Yl9nZXRfYWRkcih0ZmQsIGkpLAorCQkJCWl3bF90ZmRfdGJfZ2V0X2xlbih0ZmQsIGkpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQlpZiAodHhxLT50eGIpIHsKKwkJCWRldl9rZnJlZV9za2IodHhxLT50eGJbdHhxLT5xLnJlYWRfcHRyXS5za2JbaSAtIDFdKTsKKwkJCXR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiW2kgLSAxXSA9IE5VTEw7CisJCX0KKwl9Cit9CisKK2ludCBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkJCSBkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4sCisJCQkJIHU4IHJlc2V0LCB1OCBwYWQpCit7CisJc3RydWN0IGl3bF9xdWV1ZSAqcTsKKwlzdHJ1Y3QgaXdsX3RmZCAqdGZkLCAqdGZkX3RtcDsKKwl1MzIgbnVtX3RiczsKKworCXEgPSAmdHhxLT5xOworCXRmZF90bXAgPSAoc3RydWN0IGl3bF90ZmQgKil0eHEtPnRmZHM7CisJdGZkID0gJnRmZF90bXBbcS0+d3JpdGVfcHRyXTsKKworCWlmIChyZXNldCkKKwkJbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKKworCW51bV90YnMgPSBpd2xfdGZkX2dldF9udW1fdGJzKHRmZCk7CisKKwkvKiBFYWNoIFRGRCBjYW4gcG9pbnQgdG8gYSBtYXhpbXVtIDIwIFR4IGJ1ZmZlcnMgKi8KKwlpZiAobnVtX3RicyA+PSBJV0xfTlVNX09GX1RCUykgeworCQlJV0xfRVJSKHByaXYsICJFcnJvciBjYW4gbm90IHNlbmQgbW9yZSB0aGFuICVkIGNodW5rc1xuIiwKKwkJCSAgSVdMX05VTV9PRl9UQlMpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlCVUdfT04oYWRkciAmIH5ETUFfQklUX01BU0soMzYpKTsKKwlpZiAodW5saWtlbHkoYWRkciAmIH5JV0xfVFhfRE1BX01BU0spKQorCQlJV0xfRVJSKHByaXYsICJVbmFsaWduZWQgYWRkcmVzcyA9ICVsbHhcbiIsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpYWRkcik7CisKKwlpd2xfdGZkX3NldF90Yih0ZmQsIG51bV90YnMsIGFkZHIsIGxlbik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRlbGwgbmljIHdoZXJlIHRvIGZpbmQgY2lyY3VsYXIgYnVmZmVyIG9mIFR4IEZyYW1lIERlc2NyaXB0b3JzIGZvcgorICogZ2l2ZW4gVHggcXVldWUsIGFuZCBlbmFibGUgdGhlIERNQSBjaGFubmVsIHVzZWQgZm9yIHRoYXQgcXVldWUuCisgKgorICogNDk2NSBzdXBwb3J0cyB1cCB0byAxNiBUeCBxdWV1ZXMgaW4gRFJBTSwgbWFwcGVkIHRvIHVwIHRvIDggVHggRE1BCisgKiBjaGFubmVscyBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUuCisgKi8KK2ludCBpd2xfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdHhxX2lkID0gdHhxLT5xLmlkOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCWlmIChyZXQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIENpcmN1bGFyIGJ1ZmZlciAoVEZEIHF1ZXVlIGluIERSQU0pIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyAqLworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSF9NRU1fQ0JCQ19RVUVVRSh0eHFfaWQpLAorCQkJICAgICB0eHEtPnEuZG1hX2FkZHIgPj4gOCk7CisKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBNaXNjLiBpbnRlcm5hbCBzdGF0ZSBhbmQgaGVscGVyIGZ1bmN0aW9ucwpAQCAtNDgyLDcgKzUzOCw3IEBACiAJc3RydWN0IGl3bF9odF9pbmZvICppd2xfY29uZiA9ICZwcml2LT5jdXJyZW50X2h0X2NvbmZpZzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlcjogXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOiBcbiIpOwogCiAJaWYgKCFpd2xfY29uZi0+aXNfaHQpCiAJCXJldHVybjsKQEAgLTUyMCw5ICs1NzYsOSBAQAogCSAqLwogCiAJaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX05PTkU7Ci0JaWYgKHByaXYtPmh3LT5jb25mLmh0LmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTKQorCWlmIChjb25mX2lzX2h0NDBfbWludXMoJnByaXYtPmh3LT5jb25mKSkKIAkJaXdsX2NvbmYtPmV4dGVuc2lvbl9jaGFuX29mZnNldCA9IElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0JFTE9XOwotCWVsc2UgaWYocHJpdi0+aHctPmNvbmYuaHQuY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUykKKwllbHNlIGlmIChjb25mX2lzX2h0NDBfcGx1cygmcHJpdi0+aHctPmNvbmYpKQogCQlpd2xfY29uZi0+ZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0ID0gSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQUJPVkU7CiAKIAkvKiBJZiBubyBhYm92ZSBvciBiZWxvdyBjaGFubmVsIHN1cHBsaWVkIGRpc2FibGUgRkFUIGNoYW5uZWwgKi8KQEAgLTU0MiwzOSArNTk4LDcgQEAKIAogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7Ci19Ci0KLS8qCi0gKiBRb1MgIHN1cHBvcnQKLSovCi1zdGF0aWMgdm9pZCBpd2xfYWN0aXZhdGVfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZm9yY2UpCi17Ci0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzID0gMDsKLQotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnFfQVAucXVldWVfcmVxdWVzdCAmJgotCSAgICAhcHJpdi0+cW9zX2RhdGEucW9zX2NhcC5xX0FQLnR4b3BfcmVxdWVzdCkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQotCQkJUU9TX1BBUkFNX0ZMR19UWE9QX1RZUEVfTVNLOwotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKQotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9Ci0JCQlRT1NfUEFSQU1fRkxHX1VQREFURV9FRENBX01TSzsKLQotCWlmIChwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19odCkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PSBRT1NfUEFSQU1fRkxHX1RHTl9NU0s7Ci0KLQlpZiAoZm9yY2UgfHwgaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJSVdMX0RFQlVHX1FPUygic2VuZCBRb1MgY21kIHdpdGggUW9zIGFjdGl2ZT0lZCBGTEFHUz0weCVYXG4iLAotCQkJCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUsCi0JCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyk7Ci0KLQkJaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBSRVBMWV9RT1NfUEFSQU0sCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX3Fvc3BhcmFtX2NtZCksCi0JCQkJICAgICAgICZwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0sIE5VTEwpOwotCX0KKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogI2RlZmluZSBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTQwOTYKQEAgLTU4OCw2ICs2MTIsOSBAQAogCQkJCQkvIE1BWF9VQ09ERV9CRUFDT05fSU5URVJWQUw7CiAJbmV3X3ZhbCA9IGJlYWNvbl92YWwgLyBiZWFjb25fZmFjdG9yOwogCisJaWYgKCFuZXdfdmFsKQorCQluZXdfdmFsID0gTUFYX1VDT0RFX0JFQUNPTl9JTlRFUlZBTDsKKwogCXJldHVybiBuZXdfdmFsOwogfQogCkBAIC02MjQsMTE3ICs2NTEsMTYgQEAKIAlwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW5pdF92YWwgPSBjcHVfdG9fbGUzMihpbnRlcnZhbF90bSAtIHJlbSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JSVdMX0RFQlVHX0FTU09DKCJiZWFjb24gaW50ZXJ2YWwgJWQgYmVhY29uIHRpbWVyICVkIGJlYWNvbiB0aW0gJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJiZWFjb24gaW50ZXJ2YWwgJWQgYmVhY29uIHRpbWVyICVkIGJlYWNvbiB0aW0gJWRcbiIsCiAJCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwpLAogCQkJbGUzMl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsKSwKIAkJCWxlMTZfdG9fY3B1KHByaXYtPnJ4b25fdGltaW5nLmF0aW1fd2luZG93KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9zZXRfZmxhZ3NfZm9yX2JhbmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKLXsKLQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPQotCQkgICAgfihSWE9OX0ZMR19CQU5EXzI0R19NU0sgfCBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sKLQkJICAgICAgfCBSWE9OX0ZMR19DQ0tfTVNLKTsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCX0gZWxzZSB7Ci0JCS8qIENvcGllZCBmcm9tIGl3bF9wb3N0X2Fzc29jaWF0ZSgpICovCi0JCWlmIChwcml2LT5hc3NvY19jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRSkKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQkJZWxzZQotCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQotCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7Ci0KLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0JBTkRfMjRHX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0FVVE9fREVURUNUX01TSzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19DQ0tfTVNLOwotCX0KLX0KLQotLyoKLSAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQotICovCi1zdGF0aWMgdm9pZCBpd2xfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBtb2RlKQotewotCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwotCi0JbWVtc2V0KCZwcml2LT5zdGFnaW5nX3J4b24sIDAsIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfQVA7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgPSBSWE9OX0RFVl9UWVBFX0VTUzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfSUJTUzsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0sgfAotCQkJCQkJICBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfU05JRkZFUjsKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9IFJYT05fRklMVEVSX1BST01JU0NfTVNLIHwKLQkJICAgIFJYT05fRklMVEVSX0NUTDJIT1NUX01TSyB8IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlJV0xfRVJST1IoIlVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlICVkXG4iLCBtb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0jaWYgMAotCS8qIFRPRE86ICBGaWd1cmUgb3V0IHdoZW4gc2hvcnRfcHJlYW1ibGUgd291bGQgYmUgc2V0IGFuZCBjYWNoZSBmcm9tCi0JICogdGhhdCAqLwotCWlmICghaHdfdG9fbG9jYWwocHJpdi0+aHcpLT5zaG9ydF9wcmVhbWJsZSkKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOwotI2VuZGlmCi0KLQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwKLQkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOwotCi0JaWYgKCFjaF9pbmZvKQotCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKLQotCS8qCi0JICogaW4gc29tZSBjYXNlIEEgY2hhbm5lbHMgYXJlIGFsbCBub24gSUJTUwotCSAqIGluIHRoaXMgY2FzZSBmb3JjZSBCL0cgY2hhbm5lbAotCSAqLwotCWlmICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKLQkgICAgIShpc19jaGFubmVsX2lic3MoY2hfaW5mbykpKQotCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hfaW5mby0+Y2hhbm5lbCk7Ci0JcHJpdi0+YmFuZCA9IGNoX2luZm8tPmJhbmQ7Ci0KLQlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIHByaXYtPmJhbmQpOwotCi0JcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQotCSAgICAoSVdMX09GRE1fUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci0JcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JICAgIChJV0xfQ0NLX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0sgfAotCQkJCQlSWE9OX0ZMR19DSEFOTkVMX01PREVfUFVSRV80MF9NU0spOwotCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPSAweGZmOwotCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID0gMHhmZjsKLQlpd2xfc2V0X3J4b25fY2hhaW4ocHJpdik7Ci19Ci0KIHN0YXRpYyBpbnQgaXdsX3NldF9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCiB7CiAJaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgbW9kZSk7CisJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOwogCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCiAJaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwpAQCAtNzQ1LDggKzY3MSw4IEBACiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKIAlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgewotCQlJV0xfV0FSTklORygiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIDEwMG1zXG4iKTsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyBhZnRlciAxMDBtc1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIApAQCAtNzU1LDU0ICs2ODEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2xfc2V0X3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmh3ID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7Ci0JaW50IGk7Ci0KLQlodyA9IGl3bF9nZXRfaHdfbW9kZShwcml2LCBwcml2LT5iYW5kKTsKLQlpZiAoIWh3KSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JcHJpdi0+YWN0aXZlX3JhdGUgPSAwOwotCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBody0+bl9iaXRyYXRlczsgaSsrKSB7Ci0JCXJhdGUgPSAmKGh3LT5iaXRyYXRlc1tpXSk7Ci0JCWlmIChyYXRlLT5od192YWx1ZSA8IElXTF9SQVRFX0NPVU5UKQotCQkJcHJpdi0+YWN0aXZlX3JhdGUgfD0gKDEgPDwgcmF0ZS0+aHdfdmFsdWUpOwotCX0KLQotCUlXTF9ERUJVR19SQVRFKCJTZXQgYWN0aXZlX3JhdGUgPSAlMHgsIGFjdGl2ZV9yYXRlX2Jhc2ljID0gJTB4XG4iLAotCQkgICAgICAgcHJpdi0+YWN0aXZlX3JhdGUsIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljKTsKLQotCS8qCi0JICogSWYgYSBiYXNpYyByYXRlIGlzIGNvbmZpZ3VyZWQsIHRoZW4gdXNlIGl0IChhZGRpbmcgSVdMX1JBVEVfMU1fTUFTSykKLQkgKiBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0IG9mIGFsbCBDQ0sgcmF0ZXMgYW5kIDYsIDEyLCAyNCBmb3IKLQkgKiBPRkRNCi0JICovCi0JaWYgKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLKQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICBJV0xfQ0NLX1JBVEVTX01BU0spID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkJICAgIChJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKLQotCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0spCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KLQkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgotCQkgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IElXTF9SQVRFXzZNX01BU0spKSA+PgotCQkgICAgICBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci0JZWxzZQotCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JCSAgIChJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKLX0KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogR2VuZXJpYyBSWCBoYW5kbGVyIGltcGxlbWVudGF0aW9ucwpAQCAtODE3LDE5ICs2OTUsMTkgQEAKIAogCXBhbGl2ZSA9ICZwa3QtPnUuYWxpdmVfZnJhbWU7CiAKLQlJV0xfREVCVUdfSU5GTygiQWxpdmUgdWNvZGUgc3RhdHVzIDB4JTA4WCByZXZpc2lvbiAiCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkFsaXZlIHVjb2RlIHN0YXR1cyAweCUwOFggcmV2aXNpb24gIgogCQkgICAgICAgIjB4JTAxWCAweCUwMVhcbiIsCiAJCSAgICAgICBwYWxpdmUtPmlzX3ZhbGlkLCBwYWxpdmUtPnZlcl90eXBlLAogCQkgICAgICAgcGFsaXZlLT52ZXJfc3VidHlwZSk7CiAKIAlpZiAocGFsaXZlLT52ZXJfc3VidHlwZSA9PSBJTklUSUFMSVpFX1NVQlRZUEUpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXphdGlvbiBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCQltZW1jcHkoJnByaXYtPmNhcmRfYWxpdmVfaW5pdCwKIAkJICAgICAgICZwa3QtPnUuYWxpdmVfZnJhbWUsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9pbml0X2FsaXZlX3Jlc3ApKTsKIAkJcHdvcmsgPSAmcHJpdi0+aW5pdF9hbGl2ZV9zdGFydDsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfSU5GTygiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCQltZW1jcHkoJnByaXYtPmNhcmRfYWxpdmUsICZwa3QtPnUuYWxpdmVfZnJhbWUsCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAJCXB3b3JrID0gJnByaXYtPmFsaXZlX3N0YXJ0OwpAQCAtODQxLDU1ICs3MTksNyBAQAogCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCBwd29yaywKIAkJCQkgICBtc2Vjc190b19qaWZmaWVzKDUpKTsKIAllbHNlCi0JCUlXTF9XQVJOSU5HKCJ1Q29kZSBkaWQgbm90IHJlc3BvbmQgT0suXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0KLQlJV0xfRVJST1IoIkVycm9yIFJlcGx5IHR5cGUgMHglMDhYIGNtZCAlcyAoMHglMDJYKSAiCi0JCSJzZXEgMHglMDRYIHNlciAweCUwOFhcbiIsCi0JCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl90eXBlKSwKLQkJZ2V0X2NtZF9zdHJpbmcocGt0LT51LmVycl9yZXNwLmNtZF9pZCksCi0JCXBrdC0+dS5lcnJfcmVzcC5jbWRfaWQsCi0JCWxlMTZfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5iYWRfY21kX3NlcV9udW0pLAotCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfaW5mbykpOwotfQotCi0jZGVmaW5lIFRYX1NUQVRVU19FTlRSWSh4KSBjYXNlIFRYX1NUQVRVU19GQUlMXyAjIyB4OiByZXR1cm4gI3gKLQotc3RhdGljIHZvaWQgaXdsX3J4X2NzYShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uID0gKHZvaWQgKikmcHJpdi0+YWN0aXZlX3J4b247Ci0Jc3RydWN0IGl3bF9jc2Ffbm90aWZpY2F0aW9uICpjc2EgPSAmKHBrdC0+dS5jc2Ffbm90aWYpOwotCUlXTF9ERUJVR18xMUgoIkNTQSBub3RpZjogY2hhbm5lbCAlZCwgc3RhdHVzICVkXG4iLAotCQkgICAgICBsZTE2X3RvX2NwdShjc2EtPmNoYW5uZWwpLCBsZTMyX3RvX2NwdShjc2EtPnN0YXR1cykpOwotCXJ4b24tPmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7Ci0JcHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgPSBjc2EtPmNoYW5uZWw7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bF9yeF9wbV9zbGVlcF9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bF9zbGVlcF9ub3RpZmljYXRpb24gKnNsZWVwID0gJihwa3QtPnUuc2xlZXBfbm90aWYpOwotCUlXTF9ERUJVR19SWCgic2xlZXAgbW9kZTogJWQsIHNyYzogJWRcbiIsCi0JCSAgICAgc2xlZXAtPnBtX3NsZWVwX21vZGUsIHNsZWVwLT5wbV93YWtldXBfc3JjKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCi0JCQkJCSAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOwotCUlXTF9ERUJVR19SQURJTygiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgotCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAotCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKLQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCBwa3QtPnUucmF3LCBsZTMyX3RvX2NwdShwa3QtPmxlbikpOworCQlJV0xfV0FSTihwcml2LCAidUNvZGUgZGlkIG5vdCByZXNwb25kIE9LLlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9iZ19iZWFjb25fdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTkwMiw3ICs3MzIsNyBAQAogCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHByaXYtPmh3LCBwcml2LT52aWYpOwogCiAJaWYgKCFiZWFjb24pIHsKLQkJSVdMX0VSUk9SKCJ1cGRhdGUgYmVhY29uIGZhaWxlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgInVwZGF0ZSBiZWFjb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTUwLDcgKzc4MCw3IEBACiAJCShzdHJ1Y3QgaXdsNDk2NV9iZWFjb25fbm90aWYgKilwa3QtPnUucmF3OwogCXU4IHJhdGUgPSBpd2xfaHdfZ2V0X3JhdGUoYmVhY29uLT5iZWFjb25fbm90aWZ5X2hkci5yYXRlX25fZmxhZ3MpOwogCi0JSVdMX0RFQlVHX1JYKCJiZWFjb24gc3RhdHVzICV4IHJldHJpZXMgJWQgaXNzICVkICIKKwlJV0xfREVCVUdfUlgocHJpdiwgImJlYWNvbiBzdGF0dXMgJXggcmV0cmllcyAlZCBpc3MgJWQgIgogCQkidHNmICVkICVkIHJhdGUgJWRcbiIsCiAJCWxlMzJfdG9fY3B1KGJlYWNvbi0+YmVhY29uX25vdGlmeV9oZHIudS5zdGF0dXMpICYgVFhfU1RBVFVTX01TSywKIAkJYmVhY29uLT5iZWFjb25fbm90aWZ5X2hkci5mYWlsdXJlX2ZyYW1lLApAQCAtOTczLDcgKzgwMyw3IEBACiAJdTMyIGZsYWdzID0gbGUzMl90b19jcHUocGt0LT51LmNhcmRfc3RhdGVfbm90aWYuZmxhZ3MpOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzID0gcHJpdi0+c3RhdHVzOwogCi0JSVdMX0RFQlVHX1JGX0tJTEwoIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzXG4iLAorCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYXJkIHN0YXRlIHJlY2VpdmVkOiBIVzolcyBTVzolc1xuIiwKIAkJCSAgKGZsYWdzICYgSFdfQ0FSRF9ESVNBQkxFRCkgPyAiS2lsbCIgOiAiT24iLAogCQkJICAoZmxhZ3MgJiBTV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIpOwogCkBAIC0xMDQ2LDExICs4NzYsNyBAQAogCQlnb3RvIGVycjsKIAogCWlmIChzcmMgPT0gSVdMX1BXUl9TUkNfVkFVWCkgewotCQl1MzIgdmFsOwotCQlyZXQgPSBwY2lfcmVhZF9jb25maWdfZHdvcmQocHJpdi0+cGNpX2RldiwgUENJX0NGR19QT1dFUl9TT1VSQ0UsCi0JCQkJCSAgICAmdmFsKTsKLQotCQlpZiAodmFsICYgUENJX0NGR19QTUNfUE1FX0ZST01fRDNDT0xEX1NVUFBPUlQpCisJCWlmIChwY2lfcG1lX2NhcGFibGUocHJpdi0+cGNpX2RldiwgUENJX0QzY29sZCkpCiAJCQlpd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIEFQTUdfUFNfQ1RSTF9SRUcsCiAJCQkJCSAgICAgICBBUE1HX1BTX0NUUkxfVkFMX1BXUl9TUkNfVkFVWCwKIAkJCQkJICAgICAgIH5BUE1HX1BTX0NUUkxfTVNLX1BXUl9TUkMpOwpAQCAtMTEzNSw3ICs5NjEsNyBAQAogCiAJLyogUnggaW50ZXJydXB0LCBidXQgbm90aGluZyBzZW50IGZyb20gdUNvZGUgKi8KIAlpZiAoaSA9PSByKQotCQlJV0xfREVCVUcoSVdMX0RMX1JYLCAiciA9ICVkLCBpID0gJWRcbiIsIHIsIGkpOworCQlJV0xfREVCVUdfUlgocHJpdiwgInIgPSAlZCwgaSA9ICVkXG4iLCByLCBpKTsKIAogCWlmIChpd2xfcnhfcXVldWVfc3BhY2UocnhxKSA+IChSWF9RVUVVRV9TSVpFIC8gMikpCiAJCWZpbGxfcnggPSAxOwpAQCAtMTE3NSwxMiArMTAwMSwxMiBAQAogCQkgKiAgIGhhbmRsZSB0aG9zZSB0aGF0IG5lZWQgaGFuZGxpbmcgdmlhIGZ1bmN0aW9uIGluCiAJCSAqICAgcnhfaGFuZGxlcnMgdGFibGUuICBTZWUgaXdsX3NldHVwX3J4X2hhbmRsZXJzKCkgKi8KIAkJaWYgKHByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0pIHsKLQkJCUlXTF9ERUJVRyhJV0xfRExfUlgsICJyID0gJWQsIGkgPSAlZCwgJXMsIDB4JTAyeFxuIiwgciwKKwkJCUlXTF9ERUJVR19SWChwcml2LCAiciA9ICVkLCBpID0gJWQsICVzLCAweCUwMnhcbiIsIHIsCiAJCQkJaSwgZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSwgcGt0LT5oZHIuY21kKTsKIAkJCXByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0gKHByaXYsIHJ4Yik7CiAJCX0gZWxzZSB7CiAJCQkvKiBObyBoYW5kbGluZyBuZWVkZWQgKi8KLQkJCUlXTF9ERUJVRyhJV0xfRExfUlgsCisJCQlJV0xfREVCVUdfUlgocHJpdiwKIAkJCQkiciAlZCBpICVkIE5vIGhhbmRsZXIgbmVlZGVkIGZvciAlcywgMHglMDJ4XG4iLAogCQkJCXIsIGksIGdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCksCiAJCQkJcGt0LT5oZHIuY21kKTsKQEAgLTExOTMsNyArMTAxOSw3IEBACiAJCQlpZiAocnhiICYmIHJ4Yi0+c2tiKQogCQkJCWl3bF90eF9jbWRfY29tcGxldGUocHJpdiwgcnhiKTsKIAkJCWVsc2UKLQkJCQlJV0xfV0FSTklORygiQ2xhaW0gbnVsbCByeGI/XG4iKTsKKwkJCQlJV0xfV0FSTihwcml2LCAiQ2xhaW0gbnVsbCByeGI/XG4iKTsKIAkJfQogCiAJCS8qIEZvciBub3cgd2UganVzdCBkb24ndCByZS11c2UgYW55dGhpbmcuICBXZSBjYW4gdHdlYWsgdGhpcwpAQCAtMTIyOSwyNyArMTA1NSw2IEBACiAJaXdsX3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotc3RhdGljIHZvaWQgaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOwotCi0JSVdMX0RFQlVHX1JBRElPKCJSWCBDT05GSUc6XG4iKTsKLQlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCAodTggKikgcnhvbiwgc2l6ZW9mKCpyeG9uKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MTYgY2hhbm5lbDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOwotCUlXTF9ERUJVR19SQURJTygidTMyIGZsYWdzOiAweCUwOFhcbiIsIGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MzIgZmlsdGVyX2ZsYWdzOiAweCUwOHhcbiIsCi0JCQlsZTMyX3RvX2NwdShyeG9uLT5maWx0ZXJfZmxhZ3MpKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IGRldl90eXBlOiAweCV4XG4iLCByeG9uLT5kZXZfdHlwZSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OCBvZmRtX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsCi0JCQlyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IGNja19iYXNpY19yYXRlczogMHglMDJ4XG4iLCByeG9uLT5jY2tfYmFzaWNfcmF0ZXMpOwotCUlXTF9ERUJVR19SQURJTygidThbNl0gbm9kZV9hZGRyOiAlcE1cbiIsIHJ4b24tPm5vZGVfYWRkcik7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OFs2XSBic3NpZF9hZGRyOiAlcE1cbiIsIHJ4b24tPmJzc2lkX2FkZHIpOwotCUlXTF9ERUJVR19SQURJTygidTE2IGFzc29jX2lkOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkpOwotfQotI2VuZGlmCi0KIC8qIGNhbGwgdGhpcyBmdW5jdGlvbiB0byBmbHVzaCBhbnkgc2NoZWR1bGVkIHRhc2tsZXQgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc3luY2hyb25pemVfaXJxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKQEAgLTEyNTgsNDUgKzEwNjMsNiBAQAogCXRhc2tsZXRfa2lsbCgmcHJpdi0+aXJxX3Rhc2tsZXQpOwogfQogCi0vKioKLSAqIGl3bF9pcnFfaGFuZGxlX2Vycm9yIC0gY2FsbGVkIGZvciBIVyBvciBTVyBlcnJvciBpbnRlcnJ1cHQgZnJvbSBjYXJkCi0gKi8KLXN0YXRpYyB2b2lkIGl3bF9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKLXsKLQkvKiBTZXQgdGhlIEZXIGVycm9yIGZsYWcgLS0gY2xlYXJlZCBvbiBpd2xfZG93biAqLwotCXNldF9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIENhbmNlbCBjdXJyZW50bHkgcXVldWVkIGNvbW1hbmQuICovCi0JY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9GV19FUlJPUlMpIHsKLQkJaXdsX2R1bXBfbmljX2Vycm9yX2xvZyhwcml2KTsKLQkJaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhwcml2KTsKLQkJaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQocHJpdik7Ci0JfQotI2VuZGlmCi0KLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7Ci0KLQkvKiBLZWVwIHRoZSByZXN0YXJ0IHByb2Nlc3MgZnJvbSB0cnlpbmcgdG8gc2VuZCBob3N0Ci0JICogY29tbWFuZHMgYnkgY2xlYXJpbmcgdGhlIElOSVQgc3RhdHVzIGJpdCAqLwotCWNsZWFyX2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOwotCi0JaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUcoSVdMX0RMX0ZXX0VSUk9SUywKLQkJCSAgIlJlc3RhcnRpbmcgYWRhcHRlciBkdWUgdG8gdUNvZGUgZXJyb3IuXG4iKTsKLQotCQlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJCW1lbWNweSgmcHJpdi0+cmVjb3ZlcnlfcnhvbiwgJnByaXYtPmFjdGl2ZV9yeG9uLAotCQkJICAgICAgIHNpemVvZihwcml2LT5yZWNvdmVyeV9yeG9uKSk7Ci0JCQlwcml2LT5lcnJvcl9yZWNvdmVyaW5nID0gMTsKLQkJfQotCQlpZiAocHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5yZXN0YXJ0X2Z3KQotCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bF9lcnJvcl9yZWNvdmVyeShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTEzNDEsNyArMTEwNyw3IEBACiAJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgSVdMX0RMX0lTUikgewogCQkvKiBqdXN0IGZvciBkZWJ1ZyAqLwogCQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7Ci0JCUlXTF9ERUJVR19JU1IoImludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4XG4iLAorCQlJV0xfREVCVUdfSVNSKHByaXYsICJpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eFxuIiwKIAkJCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7CiAJfQogI2VuZGlmCkBAIC0xMzU3LDcgKzExMjMsNyBAQAogCiAJLyogTm93IHNlcnZpY2UgYWxsIGludGVycnVwdCBiaXRzIGRpc2NvdmVyZWQgYWJvdmUuICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9IV19FUlIpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgSFcgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKIAogCQkvKiBUZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KIAkJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKQEAgLTEzNzUsMTIgKzExNDEsMTIgQEAKIAlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiAoSVdMX0RMX0lTUikpIHsKIAkJLyogTklDIGZpcmVzIHRoaXMsIGJ1dCB3ZSBkb24ndCB1c2UgaXQsIHJlZHVuZGFudCB3aXRoIFdBS0VVUCAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NDRCkKLQkJCUlXTF9ERUJVR19JU1IoIlNjaGVkdWxlciBmaW5pc2hlZCB0byB0cmFuc21pdCAiCisJCQlJV0xfREVCVUdfSVNSKHByaXYsICJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgogCQkJCSAgICAgICJ0aGUgZnJhbWUvZnJhbWVzLlxuIik7CiAKIAkJLyogQWxpdmUgbm90aWZpY2F0aW9uIHZpYSBSeCBpbnRlcnJ1cHQgd2lsbCBkbyB0aGUgcmVhbCB3b3JrICovCiAJCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfQUxJVkUpCi0JCQlJV0xfREVCVUdfSVNSKCJBbGl2ZSBpbnRlcnJ1cHRcbiIpOworCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiQWxpdmUgaW50ZXJydXB0XG4iKTsKIAl9CiAjZW5kaWYKIAkvKiBTYWZlbHkgaWdub3JlIHRoZXNlIGJpdHMgZm9yIGRlYnVnIGNoZWNrcyBiZWxvdyAqLwpAQCAtMTM5MywxNyArMTE1OSwyMCBAQAogCQkJCUNTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKSkKIAkJCWh3X3JmX2tpbGwgPSAxOwogCi0JCUlXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwgIlJGX0tJTEwgYml0IHRvZ2dsZWQgdG8gJXMuXG4iLAorCQlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiUkZfS0lMTCBiaXQgdG9nZ2xlZCB0byAlcy5cbiIsCiAJCQkJaHdfcmZfa2lsbCA/ICJkaXNhYmxlIHJhZGlvIiA6ICJlbmFibGUgcmFkaW8iKTsKIAogCQkvKiBkcml2ZXIgb25seSBsb2FkcyB1Y29kZSBvbmNlIHNldHRpbmcgdGhlIGludGVyZmFjZSB1cC4KLQkJICogdGhlIGRyaXZlciBhcyB3ZWxsIHdvbid0IGFsbG93IGxvYWRpbmcgaWYgUkZLSUxMIGlzIHNldAotCQkgKiB0aGVyZWZvcmUgbm8gbmVlZCB0byByZXN0YXJ0IHRoZSBkcml2ZXIgZnJvbSB0aGlzIGhhbmRsZXIKKwkJICogdGhlIGRyaXZlciBhbGxvd3MgbG9hZGluZyB0aGUgdWNvZGUgZXZlbiBpZiB0aGUgcmFkaW8KKwkJICogaXMga2lsbGVkLiBIZW5jZSB1cGRhdGUgdGhlIGtpbGxzd2l0Y2ggc3RhdGUgaGVyZS4gVGhlCisJCSAqIHJma2lsbCBoYW5kbGVyIHdpbGwgY2FyZSBhYm91dCByZXN0YXJ0aW5nIGlmIG5lZWRlZC4KIAkJICovCi0JCWlmICghaHdfcmZfa2lsbCAmJiAhdGVzdF9iaXQoU1RBVFVTX0FMSVZFLCAmcHJpdi0+c3RhdHVzKSkgewotCQkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKLQkJCWlmIChwcml2LT5pc19vcGVuICYmICFpd2xfaXNfcmZraWxsKHByaXYpKQotCQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+dXApOworCQlpZiAoIXRlc3RfYml0KFNUQVRVU19BTElWRSwgJnByaXYtPnN0YXR1cykpIHsKKwkJCWlmIChod19yZl9raWxsKQorCQkJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOworCQkJZWxzZQorCQkJCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CisJCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJmX2tpbGwpOwogCQl9CiAKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9SRl9LSUxMOwpAQCAtMTQxMSwyMSArMTE4MCwyMSBAQAogCiAJLyogQ2hpcCBnb3QgdG9vIGhvdCBhbmQgc3RvcHBlZCBpdHNlbGYgKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX0NUX0tJTEwpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgQ1Qga2lsbCBlcnJvciBkZXRlY3RlZC5cbiIpOworCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgQ1Qga2lsbCBlcnJvciBkZXRlY3RlZC5cbiIpOwogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0NUX0tJTEw7CiAJfQogCiAJLyogRXJyb3IgZGV0ZWN0ZWQgYnkgdUNvZGUgKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX1NXX0VSUikgewotCQlJV0xfRVJST1IoIk1pY3JvY29kZSBTVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcgMHglWC5cbiIsCi0JCQkgIGludGEpOworCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgU1cgZXJyb3IgZGV0ZWN0ZWQuICIKKwkJCSIgUmVzdGFydGluZyAweCVYLlxuIiwgaW50YSk7CiAJCWl3bF9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOwogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX1NXX0VSUjsKIAl9CiAKIAkvKiB1Q29kZSB3YWtlcyB1cCBhZnRlciBwb3dlci1kb3duIHNsZWVwICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9XQUtFVVApIHsKLQkJSVdMX0RFQlVHX0lTUigiV2FrZXVwIGludGVycnVwdFxuIik7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIldha2V1cCBpbnRlcnJ1cHRcbiIpOwogCQlpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+cnhxKTsKIAkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMF0pOwogCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsxXSk7CkBAIC0xNDQ2LDcgKzEyMTUsNyBAQAogCX0KIAogCWlmIChpbnRhICYgQ1NSX0lOVF9CSVRfRkhfVFgpIHsKLQkJSVdMX0RFQlVHX0lTUigiVHggaW50ZXJydXB0XG4iKTsKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiVHggaW50ZXJydXB0XG4iKTsKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9GSF9UWDsKIAkJLyogRkggZmluaXNoZWQgdG8gd3JpdGUsIHNlbmQgZXZlbnQgKi8KIAkJcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUgPSAxOwpAQCAtMTQ1NCwxMiArMTIyMywxMiBAQAogCX0KIAogCWlmIChpbnRhICYgfmhhbmRsZWQpCi0JCUlXTF9FUlJPUigiVW5oYW5kbGVkIElOVEEgYml0cyAweCUwOHhcbiIsIGludGEgJiB+aGFuZGxlZCk7CisJCUlXTF9FUlIocHJpdiwgIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOwogCiAJaWYgKGludGEgJiB+Q1NSX0lOSV9TRVRfTUFTSykgewotCQlJV0xfV0FSTklORygiRGlzYWJsZWQgSU5UQSBiaXRzIDB4JTA4eCB3ZXJlIHBlbmRpbmdcbiIsCisJCUlXTF9XQVJOKHByaXYsICJEaXNhYmxlZCBJTlRBIGJpdHMgMHglMDh4IHdlcmUgcGVuZGluZ1xuIiwKIAkJCSBpbnRhICYgfkNTUl9JTklfU0VUX01BU0spOwotCQlJV0xfV0FSTklORygiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOworCQlJV0xfV0FSTihwcml2LCAiICAgd2l0aCBGSF9JTlQgPSAweCUwOHhcbiIsIGludGFfZmgpOwogCX0KIAogCS8qIFJlLWVuYWJsZSBhbGwgaW50ZXJydXB0cyAqLwpAQCAtMTQ3Miw3MSArMTI0MSwxMyBAQAogCQlpbnRhID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UKTsKIAkJaW50YV9tYXNrID0gaXdsX3JlYWQzMihwcml2LCBDU1JfSU5UX01BU0spOwogCQlpbnRhX2ZoID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7Ci0JCUlXTF9ERUJVR19JU1IoIkVuZCBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eCwgIgorCQlJV0xfREVCVUdfSVNSKHByaXYsICJFbmQgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHgsICIKIAkJCSJmbGFncyAweCUwOGx4XG4iLCBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgsIGZsYWdzKTsKIAl9CiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKLQl1MzIgaW50YSwgaW50YV9tYXNrOwotCXUzMiBpbnRhX2ZoOwotCWlmICghcHJpdikKLQkJcmV0dXJuIElSUV9OT05FOwotCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQotCS8qIERpc2FibGUgKGJ1dCBkb24ndCBjbGVhciEpIGludGVycnVwdHMgaGVyZSB0byBhdm9pZAotCSAqICAgIGJhY2stdG8tYmFjayBJU1JzIGFuZCBzcG9yYWRpYyBpbnRlcnJ1cHRzIGZyb20gb3VyIE5JQy4KLQkgKiBJZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZXJ2aWNlLCB0aGUgdGFza2xldCB3aWxsIHJlLWVuYWJsZSBpbnRzLgotCSAqIElmIHdlICpkb24ndCogaGF2ZSBzb21ldGhpbmcsIHdlJ2xsIHJlLWVuYWJsZSBiZWZvcmUgbGVhdmluZyBoZXJlLiAqLwotCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCi0JaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKLQotCS8qIERpc2NvdmVyIHdoaWNoIGludGVycnVwdHMgYXJlIGFjdGl2ZS9wZW5kaW5nICovCi0JaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7Ci0JaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOwotCi0JLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCi0JICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKLQkgKiBvciBkdWUgdG8gc3BvcmFkaWMgaW50ZXJydXB0cyB0aHJvd24gZnJvbSBvdXIgTklDLiAqLwotCWlmICghaW50YSAmJiAhaW50YV9maCkgewotCQlJV0xfREVCVUdfSVNSKCJJZ25vcmUgaW50ZXJydXB0LCBpbnRhID09IDAsIGludGFfZmggPT0gMFxuIik7Ci0JCWdvdG8gbm9uZTsKLQl9Ci0KLQlpZiAoKGludGEgPT0gMHhGRkZGRkZGRikgfHwgKChpbnRhICYgMHhGRkZGRkZGMCkgPT0gMHhhNWE1YTVhMCkpIHsKLQkJLyogSGFyZHdhcmUgZGlzYXBwZWFyZWQuIEl0IG1pZ2h0IGhhdmUgYWxyZWFkeSByYWlzZWQKLQkJICogYW4gaW50ZXJydXB0ICovCi0JCUlXTF9XQVJOSU5HKCJIQVJEV0FSRSBHT05FPz8gSU5UQSA9PSAweCUwOHhcbiIsIGludGEpOwotCQlnb3RvIHVucGx1Z2dlZDsKLQl9Ci0KLQlJV0xfREVCVUdfSVNSKCJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCi0JCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7Ci0KLQlpbnRhICY9IH5DU1JfSU5UX0JJVF9TQ0Q7Ci0KLQkvKiBpd2xfaXJxX3Rhc2tsZXQoKSB3aWxsIHNlcnZpY2UgaW50ZXJydXB0cyBhbmQgcmUtZW5hYmxlIHRoZW0gKi8KLQlpZiAobGlrZWx5KGludGEgfHwgaW50YV9maCkpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPmlycV90YXNrbGV0KTsKLQotIHVucGx1Z2dlZDoKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotCi0gbm9uZToKLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2VydmljZS4gKi8KLQkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaWFibGVkIGJ5IGlycSAqLwotCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQotCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCXJldHVybiBJUlFfTk9ORTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIHVDb2RlIGRvd25sb2FkIGZ1bmN0aW9ucwpAQCAtMTU4NCw3ICsxMjk1LDcgQEAKIAkJc3ByaW50ZihidWYsICIlcyVkJXMiLCBuYW1lX3ByZSwgaW5kZXgsICIudWNvZGUiKTsKIAkJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmdWNvZGVfcmF3LCBidWYsICZwcml2LT5wY2lfZGV2LT5kZXYpOwogCQlpZiAocmV0IDwgMCkgewotCQkJSVdMX0VSUk9SKCIlcyBmaXJtd2FyZSBmaWxlIHJlcSBmYWlsZWQ6IFJlYXNvbiAlZFxuIiwKKwkJCUlXTF9FUlIocHJpdiwgIiVzIGZpcm13YXJlIGZpbGUgcmVxIGZhaWxlZDogJWRcbiIsCiAJCQkJICBidWYsIHJldCk7CiAJCQlpZiAocmV0ID09IC1FTk9FTlQpCiAJCQkJY29udGludWU7CkBAIC0xNTkyLDkgKzEzMDMsMTIgQEAKIAkJCQlnb3RvIGVycm9yOwogCQl9IGVsc2UgewogCQkJaWYgKGluZGV4IDwgYXBpX21heCkKLQkJCQlJV0xfRVJST1IoIkxvYWRlZCBmaXJtd2FyZSAlcywgd2hpY2ggaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBBUEkgdiV1IGluc3RlYWQuXG4iLAorCQkJCUlXTF9FUlIocHJpdiwgIkxvYWRlZCBmaXJtd2FyZSAlcywgIgorCQkJCQkid2hpY2ggaXMgZGVwcmVjYXRlZC4gIgorCQkJCQkiUGxlYXNlIHVzZSBBUEkgdiV1IGluc3RlYWQuXG4iLAogCQkJCQkgIGJ1ZiwgYXBpX21heCk7Ci0JCQlJV0xfREVCVUdfSU5GTygiR290IGZpcm13YXJlICclcycgZmlsZSAoJXpkIGJ5dGVzKSBmcm9tIGRpc2tcbiIsCisKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJHb3QgZmlybXdhcmUgJyVzJyBmaWxlICglemQgYnl0ZXMpIGZyb20gZGlza1xuIiwKIAkJCQkgICAgICAgYnVmLCB1Y29kZV9yYXctPnNpemUpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE2MDUsNyArMTMxOSw3IEBACiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB3ZSBnb3QgYXQgbGVhc3Qgb3VyIGhlYWRlciEgKi8KIAlpZiAodWNvZGVfcmF3LT5zaXplIDwgc2l6ZW9mKCp1Y29kZSkpIHsKLQkJSVdMX0VSUk9SKCJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOworCQlJV0xfRVJSKHByaXYsICJGaWxlIHNpemUgd2F5IHRvbyBzbWFsbCFcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KQEAgLTE2MjYsNyArMTM0MCw3IEBACiAJICogb24gdGhlIEFQSSB2ZXJzaW9uIHJlYWQgZnJvbSBmaXJ3YXJlIGhlYWRlciBmcm9tIGhlcmUgb24gZm9yd2FyZCAqLwogCiAJaWYgKGFwaV92ZXIgPCBhcGlfbWluIHx8IGFwaV92ZXIgPiBhcGlfbWF4KSB7Ci0JCUlXTF9FUlJPUigiRHJpdmVyIHVuYWJsZSB0byBzdXBwb3J0IHlvdXIgZmlybXdhcmUgQVBJLiAiCisJCUlXTF9FUlIocHJpdiwgIkRyaXZlciB1bmFibGUgdG8gc3VwcG9ydCB5b3VyIGZpcm13YXJlIEFQSS4gIgogCQkJICAiRHJpdmVyIHN1cHBvcnRzIHYldSwgZmlybXdhcmUgaXMgdiV1LlxuIiwKIAkJCSAgYXBpX21heCwgYXBpX3Zlcik7CiAJCXByaXYtPnVjb2RlX3ZlciA9IDA7CkBAIC0xNjM0LDI4ICsxMzQ4LDI4IEBACiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChhcGlfdmVyICE9IGFwaV9tYXgpCi0JCUlXTF9FUlJPUigiRmlybXdhcmUgaGFzIG9sZCBBUEkgdmVyc2lvbi4gRXhwZWN0ZWQgdiV1LCAiCisJCUlXTF9FUlIocHJpdiwgIkZpcm13YXJlIGhhcyBvbGQgQVBJIHZlcnNpb24uIEV4cGVjdGVkIHYldSwgIgogCQkJICAiZ290IHYldS4gTmV3IGZpcm13YXJlIGNhbiBiZSBvYnRhaW5lZCAiCiAJCQkgICJmcm9tIGh0dHA6Ly93d3cuaW50ZWxsaW51eHdpcmVsZXNzLm9yZy5cbiIsCiAJCQkgIGFwaV9tYXgsIGFwaV92ZXIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiIGxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAotCQkgICAgICAgSVdMX1VDT0RFX01BSk9SKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfTUlOT1IocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKLQkJICAgICAgIElXTF9VQ09ERV9TRVJJQUwocHJpdi0+dWNvZGVfdmVyKSk7CisJSVdMX0lORk8ocHJpdiwgImxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICV1LiV1LiV1LiV1XG4iLAorCSAgICAgICBJV0xfVUNPREVfTUFKT1IocHJpdi0+dWNvZGVfdmVyKSwKKwkgICAgICAgSVdMX1VDT0RFX01JTk9SKHByaXYtPnVjb2RlX3ZlciksCisJICAgICAgIElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSwKKwkgICAgICAgSVdMX1VDT0RFX1NFUklBTChwcml2LT51Y29kZV92ZXIpKTsKIAotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgdWNvZGUgdmVyc2lvbiByYXcgPSAweCV4XG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgdWNvZGUgdmVyc2lvbiByYXcgPSAweCV4XG4iLAogCQkgICAgICAgcHJpdi0+dWNvZGVfdmVyKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgaW5zdCBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGluc3Qgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgaW5zdF9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIHJ1bnRpbWUgZGF0YSBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGRhdGEgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgZGF0YV9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGluaXQgaW5zdCBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBpbml0IGluc3Qgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgaW5pdF9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGluaXQgZGF0YSBzaXplID0gJXVcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICV1XG4iLAogCQkgICAgICAgaW5pdF9kYXRhX3NpemUpOwotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgYm9vdCBpbnN0IHNpemUgPSAldVxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIGJvb3QgaW5zdCBzaXplID0gJXVcbiIsCiAJCSAgICAgICBib290X3NpemUpOwogCiAJLyogVmVyaWZ5IHNpemUgb2YgZmlsZSB2cy4gaW1hZ2Ugc2l6ZSBpbmZvIGluIGZpbGUncyBoZWFkZXIgKi8KQEAgLTE2NjMsNyArMTM3Nyw3IEBACiAJCWluc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArCiAJCWluaXRfZGF0YV9zaXplICsgYm9vdF9zaXplKSB7CiAKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGZpbGUgc2l6ZSAlZCB0b28gc21hbGxcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBmaWxlIHNpemUgJWQgdG9vIHNtYWxsXG4iLAogCQkJICAgICAgIChpbnQpdWNvZGVfcmF3LT5zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKQEAgLTE2NzEsMzYgKzEzODUsMzMgQEAKIAogCS8qIFZlcmlmeSB0aGF0IHVDb2RlIGltYWdlcyB3aWxsIGZpdCBpbiBjYXJkJ3MgU1JBTSAqLwogCWlmIChpbnN0X3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2luc3Rfc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Q29kZSBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCSAgICAgICBpbnN0X3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAogCWlmIChkYXRhX3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2RhdGFfc2l6ZSkgewotCQlJV0xfREVCVUdfSU5GTygidUNvZGUgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGRhdGEgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkJZGF0YV9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAJaWYgKGluaXRfc2l6ZSA+IHByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplKSB7Ci0JCUlXTF9ERUJVR19JTkZPCi0JCSAgICAoInVDb2RlIGluaXQgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCi0JCSAgICAgIGluaXRfc2l6ZSk7CisJCUlXTF9JTkZPKHByaXYsICJ1Q29kZSBpbml0IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCQkJaW5pdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAJaWYgKGluaXRfZGF0YV9zaXplID4gcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUpIHsKLQkJSVdMX0RFQlVHX0lORk8KLQkJICAgICgidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCQlJV0xfSU5GTyhwcml2LCAidUNvZGUgaW5pdCBkYXRhIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAogCQkgICAgICBpbml0X2RhdGFfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCWlmIChib290X3NpemUgPiBwcml2LT5od19wYXJhbXMubWF4X2JzbV9zaXplKSB7Ci0JCUlXTF9ERUJVR19JTkZPCi0JCSAgICAoInVDb2RlIGJvb3QgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCi0JCSAgICAgIGJvb3Rfc2l6ZSk7CisJCUlXTF9JTkZPKHByaXYsICJ1Q29kZSBib290IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCQkJYm9vdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CkBAIC0xNzQ5LDE2ICsxNDYwLDE2IEBACiAJLyogUnVudGltZSBpbnN0cnVjdGlvbnMgKGZpcnN0IGJsb2NrIG9mIGRhdGEgaW4gZmlsZSkgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbMF07CiAJbGVuID0gcHJpdi0+dWNvZGVfY29kZS5sZW47Ci0JSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgaW5zdHIgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBpbnN0ciBsZW4gJVpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9jb2RlLnZfYWRkciwgc3JjLCBsZW4pOwotCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBpbnN0ciBidWYgdmFkZHIgPSAweCVwLCBwYWRkciA9IDB4JTA4eFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaW5zdHIgYnVmIHZhZGRyID0gMHglcCwgcGFkZHIgPSAweCUwOHhcbiIsCiAJCXByaXYtPnVjb2RlX2NvZGUudl9hZGRyLCAodTMyKXByaXYtPnVjb2RlX2NvZGUucF9hZGRyKTsKIAogCS8qIFJ1bnRpbWUgZGF0YSAoMm5kIGJsb2NrKQogCSAqIE5PVEU6ICBDb3B5IGludG8gYmFja3VwIGJ1ZmZlciB3aWxsIGJlIGRvbmUgaW4gaXdsX3VwKCkgICovCiAJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZV07CiAJbGVuID0gcHJpdi0+dWNvZGVfZGF0YS5sZW47Ci0JSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgZGF0YSBsZW4gJVpkXG4iLCBsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGRhdGEgbGVuICVaZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfZGF0YS52X2FkZHIsIHNyYywgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfZGF0YV9iYWNrdXAudl9hZGRyLCBzcmMsIGxlbik7CiAKQEAgLTE3NjYsNyArMTQ3Nyw3IEBACiAJaWYgKGluaXRfc2l6ZSkgewogCQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplXTsKIAkJbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47Ci0JCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGluaXQgaW5zdHIgbGVuICVaZFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBpbnN0ciBsZW4gJVpkXG4iLAogCQkJCWxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0LnZfYWRkciwgc3JjLCBsZW4pOwogCX0KQEAgLTE3NzUsNyArMTQ4Niw3IEBACiAJaWYgKGluaXRfZGF0YV9zaXplKSB7CiAJCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemVdOwogCQlsZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOwotCQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICVaZFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBkYXRhIGxlbiAlWmRcbiIsCiAJCQkgICAgICAgbGVuKTsKIAkJbWVtY3B5KHByaXYtPnVjb2RlX2luaXRfZGF0YS52X2FkZHIsIHNyYywgbGVuKTsKIAl9CkBAIC0xNzgzLDcgKzE0OTQsNyBAQAogCS8qIEJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKDV0aCBibG9jaykgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplICsgaW5pdF9kYXRhX3NpemVdOwogCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIGJvb3QgaW5zdHIgbGVuICVaZFxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBib290IGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyLCBzcmMsIGxlbik7CiAKIAkvKiBXZSBoYXZlIG91ciBjb3BpZXMgbm93LCBhbGxvdyBPUyByZWxlYXNlIGl0cyBjb3BpZXMgKi8KQEAgLTE3OTEsNyArMTUwMiw3IEBACiAJcmV0dXJuIDA7CiAKICBlcnJfcGNpX2FsbG9jOgotCUlXTF9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOworCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKIAlyZXQgPSAtRU5PTUVNOwogCWl3bF9kZWFsbG9jX3Vjb2RlX3BjaShwcml2KTsKIApAQCAtMTgxNSwxMiArMTUyNiwxMiBAQAogewogCWludCByZXQgPSAwOwogCi0JSVdMX0RFQlVHX0lORk8oIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUnVudGltZSBBbGl2ZSByZWNlaXZlZC5cbiIpOwogCiAJaWYgKHByaXYtPmNhcmRfYWxpdmUuaXNfdmFsaWQgIT0gVUNPREVfVkFMSURfT0spIHsKIAkJLyogV2UgaGFkIGFuIGVycm9yIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZSwgc28gdGFrZSBpdAogCQkgKiBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQWxpdmUgZmFpbGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtMTgzMCwxNSArMTU0MSwxNSBAQAogCWlmIChpd2xfdmVyaWZ5X3Vjb2RlKHByaXYpKSB7CiAJCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb24gbG9hZCB3YXMgYmFkOwogCQkgKiB0YWtlIGl0IGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJCYWQgcnVudGltZSB1Q29kZSBsb2FkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJCYWQgcnVudGltZSB1Q29kZSBsb2FkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKIAlpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YWxpdmVfbm90aWZ5KHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uIFtudGZdOiAlZFxuIiwKLQkJCSAgICByZXQpOworCQlJV0xfV0FSTihwcml2LAorCQkJIkNvdWxkIG5vdCBjb21wbGV0ZSBBTElWRSB0cmFuc2l0aW9uIFtudGZdOiAlZFxuIiwgcmV0KTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtMTg1NiwxMyArMTU2NywxMyBAQAogCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgewogCQlzdHJ1Y3QgaXdsX3J4b25fY21kICphY3RpdmVfcnhvbiA9CiAJCQkJKHN0cnVjdCBpd2xfcnhvbl9jbWQgKikmcHJpdi0+YWN0aXZlX3J4b247Ci0KLQkJbWVtY3B5KCZwcml2LT5zdGFnaW5nX3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKLQkJICAgICAgIHNpemVvZihwcml2LT5zdGFnaW5nX3J4b24pKTsKKwkJLyogYXBwbHkgYW55IGNoYW5nZXMgaW4gc3RhZ2luZyAqLworCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCX0gZWxzZSB7CiAJCS8qIEluaXRpYWxpemUgb3VyIHJ4X2NvbmZpZyBkYXRhICovCiAJCWl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHByaXYsIHByaXYtPml3X21vZGUpOworCQlpd2xfc2V0X3J4b25fY2hhaW4ocHJpdik7CiAJCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCX0KIApAQCAtMTg3OSw3ICsxNTkwLDcgQEAKIAogCWl3bF9sZWRzX3JlZ2lzdGVyKHByaXYpOwogCi0JSVdMX0RFQlVHX0lORk8oIkFMSVZFIHByb2Nlc3NpbmcgY29tcGxldGUuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQUxJVkUgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOwogCXNldF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTE5MTMsNyArMTYyNCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXhpdF9wZW5kaW5nID0gdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAKLQlJV0xfREVCVUdfSU5GTyhEUlZfTkFNRSAiIGlzIGdvaW5nIGRvd25cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CiAKIAlpZiAoIWV4aXRfcGVuZGluZykKIAkJc2V0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTIwMjQsMTIgKzE3MzUsMTIgQEAKIAlpbnQgcmV0OwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9XQVJOSU5HKCJFeGl0IHBlbmRpbmc7IHdpbGwgbm90IGJyaW5nIHRoZSBOSUMgdXBcbiIpOworCQlJV0xfV0FSTihwcml2LCAiRXhpdCBwZW5kaW5nOyB3aWxsIG5vdCBicmluZyB0aGUgTklDIHVwXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKCFwcml2LT51Y29kZV9kYXRhX2JhY2t1cC52X2FkZHIgfHwgIXByaXYtPnVjb2RlX2RhdGEudl9hZGRyKSB7Ci0JCUlXTF9FUlJPUigidWNvZGUgbm90IGF2YWlsYWJsZSBmb3IgZGV2aWNlIGJyaW5ndXBcbiIpOworCQlJV0xfRVJSKHByaXYsICJ1Y29kZSBub3QgYXZhaWxhYmxlIGZvciBkZXZpY2UgYnJpbmd1cFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMjA0MSw3ICsxNzUyLDcgQEAKIAogCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKSB7CiAJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKLQkJSVdMX1dBUk5JTkcoIlJhZGlvIGRpc2FibGVkIGJ5ICVzIFJGIEtpbGwgc3dpdGNoXG4iLAorCQlJV0xfV0FSTihwcml2LCAiUmFkaW8gZGlzYWJsZWQgYnkgJXMgUkYgS2lsbCBzd2l0Y2hcbiIsCiAJCSAgICB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykgPyAiSFciIDogIlNXIik7CiAJCXJldHVybiAwOwogCX0KQEAgLTIwNTAsNyArMTc2MSw3IEBACiAKIAlyZXQgPSBpd2xfaHdfbmljX2luaXQocHJpdik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0IG5pY1xuIik7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IG5pY1xuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yMDgzLDcgKzE3OTQsOCBAQAogCQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5sb2FkX3Vjb2RlKHByaXYpOwogCiAJCWlmIChyZXQpIHsKLQkJCUlXTF9FUlJPUigiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLCByZXQpOworCQkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLAorCQkJCXJldCk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0yMDkzLDcgKzE4MDUsNyBAQAogCQkvKiBzdGFydCBjYXJkOyAiaW5pdGlhbGl6ZSIgd2lsbCBsb2FkIHJ1bnRpbWUgdWNvZGUgKi8KIAkJaXdsX25pY19zdGFydChwcml2KTsKIAotCQlJV0xfREVCVUdfSU5GTyhEUlZfTkFNRSAiIGlzIGNvbWluZyB1cFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgY29taW5nIHVwXG4iKTsKIAogCQlyZXR1cm4gMDsKIAl9CkBAIC0yMTA0LDcgKzE4MTYsNyBAQAogCiAJLyogdHJpZWQgdG8gcmVzdGFydCBhbmQgY29uZmlnIHRoZSBkZXZpY2UgZm9yIGFzIGxvbmcgYXMgb3VyCiAJICogcGF0aWVuY2UgY291bGQgd2l0aHN0YW5kICovCi0JSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKKwlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkZXZpY2UgYWZ0ZXIgJWQgYXR0ZW1wdHMuXG4iLCBpKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtMjE0MSw0MCArMTg1Myw2IEBACiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9iZ19yZl9raWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCByZl9raWxsKTsKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JaWYgKCFpd2xfaXNfcmZraWxsKHByaXYpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfUkZfS0lMTCwKLQkJCSAgIkhXIGFuZC9vciBTVyBSRiBLaWxsIG5vIGxvbmdlciBhY3RpdmUsIHJlc3RhcnRpbmcgIgotCQkJICAiZGV2aWNlXG4iKTsKLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JfSBlbHNlIHsKLQkJLyogbWFrZSBzdXJlIG1hYzgwMjExIHN0b3Agc2VuZGluZyBUeCBmcmFtZSAqLwotCQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhwcml2LT5odyk7Ci0KLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpCi0JCQlJV0xfREVCVUdfUkZfS0lMTCgiQ2FuIG5vdCB0dXJuIHJhZGlvIGJhY2sgb24gLSAiCi0JCQkJCSAgImRpc2FibGVkIGJ5IFNXIHN3aXRjaFxuIik7Ci0JCWVsc2UKLQkJCUlXTF9XQVJOSU5HKCJSYWRpbyBGcmVxdWVuY3kgS2lsbCBTd2l0Y2ggaXMgT246XG4iCi0JCQkJICAgICJLaWxsIHN3aXRjaCBtdXN0IGJlIHR1cm5lZCBvZmYgZm9yICIKLQkJCQkgICAgIndpcmVsZXNzIG5ldHdvcmtpbmcgdG8gd29yay5cbiIpOwotCX0KLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKLX0KLQogc3RhdGljIHZvaWQgaXdsX2JnX3J1bl90aW1lX2NhbGliX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsCkBAIC0yMjQ0LDExICsxOTIyLDExIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCUlXTF9FUlJPUigiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gQVAgbW9kZVxuIiwgX19mdW5jX18pOworCQlJV0xfRVJSKHByaXYsICIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiBBUCBtb2RlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKLQlJV0xfREVCVUdfQVNTT0MoIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFzc29jaWF0ZWQgYXMgJWQgdG86ICVwTVxuIiwKIAkJCXByaXYtPmFzc29jX2lkLCBwcml2LT5hY3RpdmVfcnhvbi5ic3NpZF9hZGRyKTsKIAogCkBAIC0yMjcxLDcgKzE5NDksNyBAQAogCXJldCA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCiAJCQkgICAgICBzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLCAmcHJpdi0+cnhvbl90aW1pbmcpOwogCWlmIChyZXQpCi0JCUlXTF9XQVJOSU5HKCJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCisJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkgICAgIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQVNTT0NfTVNLOwpAQCAtMjI4MSw3ICsxOTU5LDcgQEAKIAlpd2xfc2V0X3J4b25fY2hhaW4ocHJpdik7CiAJcHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkID0gY3B1X3RvX2xlMTYocHJpdi0+YXNzb2NfaWQpOwogCi0JSVdMX0RFQlVHX0FTU09DKCJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJhc3NvYyBpZCAlZCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCiAJCQlwcml2LT5hc3NvY19pZCwgcHJpdi0+YmVhY29uX2ludCk7CiAKIAlpZiAocHJpdi0+YXNzb2NfY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKQEAgLTIzMTcsNyArMTk5NSw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiAlZCBtb2RlXG4iLAorCQlJV0xfRVJSKHByaXYsICIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiAlZCBtb2RlXG4iLAogCQkJICBfX2Z1bmNfXywgcHJpdi0+aXdfbW9kZSk7CiAJCWJyZWFrOwogCX0KQEAgLTIzNTMsMzAgKzIwMzEsOCBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCByZXQ7Ci0JdTE2IHBjaV9jbWQ7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQotCWlmIChwY2lfZW5hYmxlX2RldmljZShwcml2LT5wY2lfZGV2KSkgewotCQlJV0xfRVJST1IoIkZhaWwgdG8gcGNpX2VuYWJsZV9kZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2VuYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0KLQkvKiBlbmFibGUgaW50ZXJydXB0cyBpZiBuZWVkZWQ6IGh3IGJ1ZyB3L2EgKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChwcml2LT5wY2lfZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jbWQpOwotCWlmIChwY2lfY21kICYgUENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFKSB7Ci0JCXBjaV9jbWQgJj0gflBDSV9DT01NQU5EX0lOVFhfRElTQUJMRTsKLQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCBwY2lfY21kKTsKLQl9Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIGl3bF9pc3IsIElSUUZfU0hBUkVELAotCQkJICBEUlZfTkFNRSwgcHJpdik7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yIGFsbG9jYXRpbmcgSVJRICVkXG4iLCBwcml2LT5wY2lfZGV2LT5pcnEpOwotCQlnb3RvIG91dF9kaXNhYmxlX21zaTsKLQl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAkvKiB3ZSBzaG91bGQgYmUgdmVyaWZ5aW5nIHRoZSBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgb3BlbmVkICovCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtMjM4OCw5ICsyMDQ0LDkgQEAKIAlpZiAoIXByaXYtPnVjb2RlX2NvZGUubGVuKSB7CiAJCXJldCA9IGl3bF9yZWFkX3Vjb2RlKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCByZWFkIG1pY3JvY29kZTogJWRcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgcmVhZCBtaWNyb2NvZGU6ICVkXG4iLCByZXQpOwogCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKQEAgLTI0MDEsMTIgKzIwNTcsMTIgQEAKIAlpd2xfcmZraWxsX3NldF9od19zdGF0ZShwcml2KTsKIAogCWlmIChyZXQpCi0JCWdvdG8gb3V0X3JlbGVhc2VfaXJxOworCQlyZXR1cm4gcmV0OwogCiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpCiAJCWdvdG8gb3V0OwogCi0JSVdMX0RFQlVHX0lORk8oIlN0YXJ0IFVQIHdvcmsgZG9uZS5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJTdGFydCBVUCB3b3JrIGRvbmUuXG4iKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybiAwOwpAQCAtMjQxOCwzNiArMjA3NCwyNiBAQAogCQkJVUNPREVfUkVBRFlfVElNRU9VVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfRVJST1IoIlNUQVJUX0FMSVZFIHRpbWVvdXQgYWZ0ZXIgJWRtcy5cbiIsCisJCQlJV0xfRVJSKHByaXYsICJTVEFSVF9BTElWRSB0aW1lb3V0IGFmdGVyICVkbXMuXG4iLAogCQkJCWppZmZpZXNfdG9fbXNlY3MoVUNPREVfUkVBRFlfVElNRU9VVCkpOwotCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CiAJCX0KIAl9CiAKIG91dDoKIAlwcml2LT5pc19vcGVuID0gMTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKLQotb3V0X3JlbGVhc2VfaXJxOgotCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7Ci1vdXRfZGlzYWJsZV9tc2k6Ci0JcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwcml2LT5wY2lfZGV2KTsKLQlwcml2LT5pc19vcGVuID0gMDsKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gZmFpbGVkXG4iKTsKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBpd2xfbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmICghcHJpdi0+aXNfb3BlbikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gc2tpcFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBza2lwXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjQ2NSwyNyArMjExMSwyNyBAQAogCWl3bF9kb3duKHByaXYpOwogCiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7Ci0JZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0JcGNpX3NhdmVfc3RhdGUocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJLyogZW5hYmxlIGludGVycnVwdHMgYWdhaW4gaW4gb3JkZXIgdG8gcmVjZWl2ZSByZmtpbGwgY2hhbmdlcyAqLworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCiBzdGF0aWMgaW50IGl3bF9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKLQlJV0xfREVCVUdfTUFDRFVNUCgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUNEVU1QKHByaXYsICJlbnRlclxuIik7CiAKLQlJV0xfREVCVUdfVFgoImRldi0+eG1pdCglZCBieXRlcykgYXQgcmF0ZSAweCUwMnhcbiIsIHNrYi0+bGVuLAorCUlXTF9ERUJVR19UWChwcml2LCAiZGV2LT54bWl0KCVkIGJ5dGVzKSBhdCByYXRlIDB4JTAyeFxuIiwgc2tiLT5sZW4sCiAJCSAgICAgaWVlZTgwMjExX2dldF90eF9yYXRlKGh3LCBJRUVFODAyMTFfU0tCX0NCKHNrYikpLT5iaXRyYXRlKTsKIAogCWlmIChpd2xfdHhfc2tiKHByaXYsIHNrYikpCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKLQlJV0xfREVCVUdfTUFDRFVNUCgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUNEVU1QKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIApAQCAtMjQ5NSwxMCArMjE0MSwxMCBAQAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyOiB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOiB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKIAogCWlmIChwcml2LT52aWYpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHZpZiAhPSBOVUxMXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHZpZiAhPSBOVUxMXG4iKTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIApAQCAtMjUxMSw3ICsyMTU3LDcgQEAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoY29uZi0+bWFjX2FkZHIpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJTZXQgJXBNXG4iLCBjb25mLT5tYWNfYWRkcik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiU2V0ICVwTVxuIiwgY29uZi0+bWFjX2FkZHIpOwogCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJfQogCkBAIC0yNTIxLDcgKzIxNjcsNyBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjUzNywxMTcgKzIxODMsMTIyIEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJaW50IHJldCA9IDA7Ci0JdTE2IGNoYW5uZWw7CisJdTE2IGNoOworCWludCBzY2FuX2FjdGl2ZSA9IDA7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlciB0byBjaGFubmVsICVkXG4iLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7Ci0KLQlwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19odCA9IGNvbmYtPmh0LmVuYWJsZWQ7Ci0KLQlpZiAoY29uZi0+cmFkaW9fZW5hYmxlZCAmJiBpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8ocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGLUtJTEwgLSB3YWl0aW5nIGZvciB1Q29kZVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkKLQkJaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhwcml2KTsKLQotCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgcmVhZHlcbiIpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlciB0byBjaGFubmVsICVkIGNoYW5nZWQgMHglWFxuIiwKKwkJCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNoYW5nZWQpOwogCiAJaWYgKHVubGlrZWx5KCFwcml2LT5jZmctPm1vZF9wYXJhbXMtPmRpc2FibGVfaHdfc2NhbiAmJgotCQkgICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBzY2FubmluZ1xuIik7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCQlyZXR1cm4gMDsKKwkJCXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKSB7CisJCXNjYW5fYWN0aXZlID0gMTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKIAl9CiAKLQljaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwgY2hhbm5lbCk7Ci0JaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBpbnZhbGlkIGNoYW5uZWxcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKworCS8qIGR1cmluZyBzY2FubmluZyBtYWM4MDIxMSB3aWxsIGRlbGF5IGNoYW5uZWwgc2V0dGluZyB1bnRpbAorCSAqIHNjYW4gZmluaXNoIHdpdGggY2hhbmdlZCA9IDAKKwkgKi8KKwlpZiAoIWNoYW5nZWQgfHwgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpIHsKKwkJaWYgKHNjYW5fYWN0aXZlKQorCQkJZ290byBzZXRfY2hfb3V0OworCisJCWNoID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQsIGNoKTsKKwkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gaW52YWxpZCBjaGFubmVsXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHNldF9jaF9vdXQ7CisJCX0KKworCQlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgorCQkJIWlzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkgeworCQkJSVdMX0VSUihwcml2LCAiY2hhbm5lbCAlZCBpbiBiYW5kICVkIG5vdCAiCisJCQkJIklCU1MgY2hhbm5lbFxuIiwKKwkJCQljb25mLT5jaGFubmVsLT5od192YWx1ZSwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBzZXRfY2hfb3V0OworCQl9CisKKwkJcHJpdi0+Y3VycmVudF9odF9jb25maWcuaXNfaHQgPSBjb25mX2lzX2h0KGNvbmYpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKworCQkvKiBpZiB3ZSBhcmUgc3dpdGNoaW5nIGZyb20gaHQgdG8gMi40IGNsZWFyIGZsYWdzCisJCSAqIGZyb20gYW55IGh0IHJlbGF0ZWQgaW5mbyBzaW5jZSAyLjQgZG9lcyBub3QKKwkJICogc3VwcG9ydCBodCAqLworCQlpZiAoKGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSAhPSBjaCkpCisJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSAwOworCisJCWl3bF9zZXRfcnhvbl9jaGFubmVsKHByaXYsIGNvbmYtPmNoYW5uZWwpOworCisJCWl3bF9zZXRfZmxhZ3NfZm9yX2JhbmQocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKyBzZXRfY2hfb3V0OgorCQkvKiBUaGUgbGlzdCBvZiBzdXBwb3J0ZWQgcmF0ZXMgYW5kIHJhdGUgbWFzayBjYW4gYmUgZGlmZmVyZW50CisJCSAqIGZvciBlYWNoIGJhbmQ7IHNpbmNlIHRoZSBiYW5kIG1heSBoYXZlIGNoYW5nZWQsIHJlc2V0CisJCSAqIHRoZSByYXRlIG1hc2sgdG8gd2hhdCBtYWM4MDIxMSBsaXN0cyAqLworCQlpd2xfc2V0X3JhdGUocHJpdik7CiAJfQogCi0JaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgIWlzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkgewotCQlJV0xfRVJST1IoImNoYW5uZWwgJWQgaW4gYmFuZCAlZCBub3QgSUJTUyBjaGFubmVsXG4iLAotCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgeworCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKKwkJCXJldCA9IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHByaXYsIElXTF9QT1dFUl9JTkRFWF8zKTsKKwkJZWxzZQorCQkJcmV0ID0gaXdsX3Bvd2VyX3NldF91c2VyX21vZGUocHJpdiwgSVdMX1BPV0VSX01PREVfQ0FNKTsKKwkJaWYgKHJldCkKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7CisKIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiVFggUG93ZXIgb2xkPSVkIG5ldz0lZFxuIiwKKwkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10LCBjb25mLT5wb3dlcl9sZXZlbCk7CiAKLQotCS8qIGlmIHdlIGFyZSBzd2l0Y2hpbmcgZnJvbSBodCB0byAyLjQgY2xlYXIgZmxhZ3MKLQkgKiBmcm9tIGFueSBodCByZWxhdGVkIGluZm8gc2luY2UgMi40IGRvZXMgbm90Ci0JICogc3VwcG9ydCBodCAqLwotCWlmICgobGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpICE9IGNoYW5uZWwpCi0jaWZkZWYgSUVFRTgwMjExX0NPTkZfQ0hBTk5FTF9TV0lUQ0gKLQkgICAgJiYgIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5ORUxfU1dJVENIKQotI2VuZGlmCi0JKQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSAwOwotCi0JaXdsX3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY29uZi0+Y2hhbm5lbCk7Ci0KLQlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwotCi0JLyogVGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHJhdGVzIGFuZCByYXRlIG1hc2sgY2FuIGJlIGRpZmZlcmVudAotCSAqIGZvciBlYWNoIGJhbmQ7IHNpbmNlIHRoZSBiYW5kIG1heSBoYXZlIGNoYW5nZWQsIHJlc2V0Ci0JICogdGhlIHJhdGUgbWFzayB0byB3aGF0IG1hYzgwMjExIGxpc3RzICovCi0JaXdsX3NldF9yYXRlKHByaXYpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0jaWZkZWYgSUVFRTgwMjExX0NPTkZfQ0hBTk5FTF9TV0lUQ0gKLQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOTkVMX1NXSVRDSCkgewotCQlpd2xfaHdfY2hhbm5lbF9zd2l0Y2gocHJpdiwgY29uZi0+Y2hhbm5lbCk7Ci0JCWdvdG8gb3V0OworCQlpd2xfc2V0X3R4X3Bvd2VyKHByaXYsIGNvbmYtPnBvd2VyX2xldmVsLCBmYWxzZSk7CiAJfQotI2VuZGlmCisKKwkvKiBjYWxsIHRvIGVuc3VyZSB0aGF0IDQ5NjUgcnhfY2hhaW4gaXMgc2V0IHByb3Blcmx5IGluIG1vbml0b3IgbW9kZSAqLworCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQpIHsKKwkJaWYgKGNvbmYtPnJhZGlvX2VuYWJsZWQgJiYKKwkJCWl3bF9yYWRpb19raWxsX3N3X2VuYWJsZV9yYWRpbyhwcml2KSkgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGLUtJTEwgLSAiCisJCQkJCQkid2FpdGluZyBmb3IgdUNvZGVcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpCisJCQlpd2xfcmFkaW9fa2lsbF9zd19kaXNhYmxlX3JhZGlvKHByaXYpOworCX0KIAogCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcmFkaW8gZGlzYWJsZWRcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gcmFkaW8gZGlzYWJsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYga2lsbFxuIik7Ci0JCXJldCA9IC1FSU87CisJaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKQotCQlyZXQgPSBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfSU5ERVhfMyk7Ci0JZWxzZQotCQlyZXQgPSBpd2xfcG93ZXJfc2V0X3VzZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfTU9ERV9DQU0pOwotCWlmIChyZXQpCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgiRXJyb3Igc2V0dGluZyBwb3dlciBsZXZlbFxuIik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoIlRYIFBvd2VyIG9sZD0lZCBuZXc9JWRcbiIsCi0JCQkgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgY29uZi0+cG93ZXJfbGV2ZWwpOwotCi0JaXdsX3NldF90eF9wb3dlcihwcml2LCBjb25mLT5wb3dlcl9sZXZlbCwgZmFsc2UpOwotCi0JaXdsX3NldF9yYXRlKHByaXYpOworCWlmIChzY2FuX2FjdGl2ZSkKKwkJZ290byBvdXQ7CiAKIAlpZiAobWVtY21wKCZwcml2LT5hY3RpdmVfcnhvbiwKIAkJICAgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpKQogCQlpd2xfY29tbWl0X3J4b24ocHJpdik7CiAJZWxzZQotCQlJV0xfREVCVUdfSU5GTygiTm8gcmUtc2VuZGluZyBzYW1lIFJYT04gY29uZmlndXJhdGlvbi5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTm8gcmUtc2VuZGluZyBzYW1lIFJYT04gY29uZmlndXJhdGlvbi5cbiIpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CiAKIG91dDoKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjY3Miw3ICsyMzIzLDcgQEAKIAkJcmV0ID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKIAkJCQlzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLCAmcHJpdi0+cnhvbl90aW1pbmcpOwogCQlpZiAocmV0KQotCQkJSVdMX1dBUk5JTkcoIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKKwkJCUlXTF9XQVJOKHByaXYsICJSRVBMWV9SWE9OX1RJTUlORyBmYWlsZWQgLSAiCiAJCQkJCSJBdHRlbXB0aW5nIHRvIGNvbnRpbnVlLlxuIik7CiAKIAkJaXdsX3NldF9yeG9uX2NoYWluKHByaXYpOwpAQCAtMjcyNiw3ICsyMzc3LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAlpZiAocHJpdi0+dmlmICE9IHZpZikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcHJpdi0+dmlmICE9IHZpZlxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBwcml2LT52aWYgIT0gdmlmXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yNzQ4LDcgKzIzOTksNyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChjb25mLT5ic3NpZCkKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJic3NpZDogJXBNXG4iLCBjb25mLT5ic3NpZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiYnNzaWQ6ICVwTVxuIiwgY29uZi0+YnNzaWQpOwogCiAvKgogICogdmVyeSBkdWJpb3VzIGNvZGUgd2FzIGhlcmU7IHRoZSBwcm9iZSBmaWx0ZXJpbmcgZmxhZyBpcyBuZXZlciBzZXQ6CkBAIC0yNzYxLDcgKzI0MTIsNyBAQAogCQlpZiAoIWNvbmYtPmJzc2lkKSB7CiAJCQljb25mLT5ic3NpZCA9IHByaXYtPm1hY19hZGRyOwogCQkJbWVtY3B5KHByaXYtPmJzc2lkLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJic3NpZCB3YXMgc2V0IHRvOiAlcE1cbiIsCisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImJzc2lkIHdhcyBzZXQgdG86ICVwTVxuIiwKIAkJCQkJICAgY29uZi0+YnNzaWQpOwogCQl9CiAJCWlmIChwcml2LT5pYnNzX2JlYWNvbikKQEAgLTI3NzgsOSArMjQyOSw5IEBACiAJCS8qIElmIHRoZXJlIGlzIGN1cnJlbnRseSBhIEhXIHNjYW4gZ29pbmcgb24gaW4gdGhlIGJhY2tncm91bmQKIAkJICogdGhlbiB3ZSBuZWVkIHRvIGNhbmNlbCBpdCBlbHNlIHRoZSBSWE9OIGJlbG93IHdpbGwgZmFpbC4gKi8KIAkJaWYgKGl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCkpIHsKLQkJCUlXTF9XQVJOSU5HKCJBYm9ydGVkIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3MgIgorCQkJSVdMX1dBUk4ocHJpdiwgIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyAiCiAJCQkJICAgICJhZnRlciAxMDBtc1xuIik7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZpbmcgLSBzY2FuIGFib3J0IGZhaWxlZC5cbiIpOworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKIAkJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KQEAgLTI4MDgsNjQgKzI0NTksMTggQEAKIAl9CiAKICBkb25lOgotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlfX2xlMzIgKmZpbHRlcl9mbGFncyA9ICZwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKCJFbnRlcjogY2hhbmdlZDogMHgleCwgdG90YWw6IDB4JXhcbiIsCi0JCQljaGFuZ2VkX2ZsYWdzLCAqdG90YWxfZmxhZ3MpOwotCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiAoRklGX09USEVSX0JTUyB8IEZJRl9QUk9NSVNDX0lOX0JTUykpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX1BST01JU0NfTVNLOwotCX0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9BTExNVUxUSSkgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0FMTE1VTFRJKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JfQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0NPTlRST0wpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9DT05UUk9MKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKLQl9Ci0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykgewotCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSzsKLQl9Ci0KLQkvKiBXZSBhdm9pZCBpd2xfY29tbWl0X3J4b24gaGVyZSB0byBjb21taXQgdGhlIG5ldyBmaWx0ZXIgZmxhZ3MKLQkgKiBzaW5jZSBtYWM4MDIxMSB3aWxsIGNhbGwgaWVlZTgwMjExX2h3X2NvbmZpZyBpbW1lZGlhdGVseS4KLQkgKiAobWNfbGlzdCBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZSkuIE90aGVyd2lzZSwgd2UgbmVlZCB0bwotCSAqIHF1ZXVlIGEgYmFja2dyb3VuZCBpd2xfY29tbWl0X3J4b24gd29yay4KLQkgKi8KLQotCSp0b3RhbF9mbGFncyAmPSBGSUZfT1RIRVJfQlNTIHwgRklGX0FMTE1VTFRJIHwgRklGX1BST01JU0NfSU5fQlNTIHwKLQkJCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwgRklGX0NPTlRST0w7Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bF9tYWNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKQEAgLTI4ODAsNyArMjQ4NSw3IEBACiAJfQogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIH0KIApAQCAtMjg5MiwxMCArMjQ5NywxMCBAQAogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJjaGFuZ2VzID0gMHglWFxuIiwgY2hhbmdlcyk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJjaGFuZ2VzID0gMHglWFxuIiwgY2hhbmdlcyk7CiAKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkVSUF9QUkVBTUJMRSAlZFxuIiwKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJFUlBfUFJFQU1CTEUgJWRcbiIsCiAJCQkJICAgYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSk7CiAJCWlmIChic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlKQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKQEAgLTI5MDQsNyArMjUwOSw3IEBACiAJfQogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfQ1RTX1BST1QpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJFUlBfQ1RTICVkXG4iLCBic3NfY29uZi0+dXNlX2N0c19wcm90KTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJFUlBfQ1RTICVkXG4iLCBic3NfY29uZi0+dXNlX2N0c19wcm90KTsKIAkJaWYgKGJzc19jb25mLT51c2VfY3RzX3Byb3QgJiYgKHByaXYtPmJhbmQgIT0gSUVFRTgwMjExX0JBTkRfNUdIWikpCiAJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLOwogCQllbHNlCkBAIC0yOTE3LDcgKzI1MjIsNyBAQAogCX0KIAogCWlmIChjaGFuZ2VzICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJBU1NPQyAlZFxuIiwgYnNzX2NvbmYtPmFzc29jKTsKIAkJLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGFzIHRoaXMgZnVuY3Rpb24gc2hvdWxkCiAJCSAqIG5ldmVyIGJlIGNhbGxlZCBmcm9tIGludGVycnVwdCBjb250ZXh0LiAqLwogCQlpZiAoV0FSTl9PTl9PTkNFKGluX2ludGVycnVwdCgpKSkKQEAgLTI5MzksMTA4ICsyNTQ0LDQ5IEBACiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJfSBlbHNlIHsKIAkJCXByaXYtPmFzc29jX2lkID0gMDsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiRElTQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkRJU0FTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOwogCQl9CiAJfSBlbHNlIGlmIChjaGFuZ2VzICYmIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmFzc29jX2lkKSB7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoIkFzc29jaWF0ZWQgQ2hhbmdlcyAlZFxuIiwgY2hhbmdlcyk7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkFzc29jaWF0ZWQgQ2hhbmdlcyAlZFxuIiwgY2hhbmdlcyk7CiAJCQlpd2xfc2VuZF9yeG9uX2Fzc29jKHByaXYpOwogCX0KIAogfQogCi1zdGF0aWMgaW50IGl3bF9tYWNfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCWludCByZXQ7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJcmV0ID0gLUVJTzsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCByZWFkeSBvciBleGl0IHBlbmRpbmdcbiIpOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JLyogV2UgZG9uJ3Qgc2NoZWR1bGUgc2NhbiB3aXRoaW4gbmV4dF9zY2FuX2ppZmZpZXMgcGVyaW9kLgotCSAqIEF2b2lkIHNjYW5uaW5nIGR1cmluZyBwb3NzaWJsZSBFQVBPTCBleGNoYW5nZSwgcmV0dXJuCi0JICogc3VjY2VzcyBpbW1lZGlhdGVseS4KLQkgKi8KLQlpZiAocHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgJiYKLQkgICAgdGltZV9hZnRlcihwcml2LT5uZXh0X3NjYW5famlmZmllcywgamlmZmllcykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBuZXh0IHNjYW4gcGVyaW9kXG4iKTsKLQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQkvKiBpZiB3ZSBqdXN0IGZpbmlzaGVkIHNjYW4gYXNrIGZvciBkZWxheSAqLwotCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5sYXN0X3NjYW5famlmZmllcyAmJgotCSAgICB0aW1lX2FmdGVyKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICsgSVdMX0RFTEFZX05FWFRfU0NBTiwgamlmZmllcykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBwcmV2aW91cyBzY2FuIHBlcmlvZFxuIik7Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCQlyZXQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JaWYgKHNzaWRfbGVuKSB7Ci0JCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDE7Ci0JCXByaXYtPmRpcmVjdF9zc2lkX2xlbiA9ICBtaW5fdCh1OCwgc3NpZF9sZW4sIElXX0VTU0lEX01BWF9TSVpFKTsKLQkJbWVtY3B5KHByaXYtPmRpcmVjdF9zc2lkLCBzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pOwotCX0gZWxzZSB7Ci0JCXByaXYtPm9uZV9kaXJlY3Rfc2NhbiA9IDA7Ci0JfQotCi0JcmV0ID0gaXdsX3NjYW5faW5pdGlhdGUocHJpdik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKLQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBpd2xfbWFjX3VwZGF0ZV90a2lwX2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsIGNvbnN0IHU4ICphZGRyLAogCQkJdTMyIGl2MzIsIHUxNiAqcGhhc2Uxa2V5KQogewogCiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlpd2xfdXBkYXRlX3RraXBfa2V5KHByaXYsIGtleWNvbmYsIGFkZHIsIGl2MzIsIHBoYXNlMWtleSk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIH0KIAogc3RhdGljIGludCBpd2xfbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJICAgY29uc3QgdTggKmxvY2FsX2FkZHIsIGNvbnN0IHU4ICphZGRyLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHJldCA9IDA7Ci0JdTggc3RhX2lkID0gSVdMX0lOVkFMSURfU1RBVElPTjsKLQl1OCBpc19kZWZhdWx0X3dlcF9rZXkgPSAwOworCWNvbnN0IHU4ICphZGRyOworCWludCByZXQ7CisJdTggc3RhX2lkOworCWJvb2wgaXNfZGVmYXVsdF93ZXBfa2V5ID0gZmFsc2U7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmIChwcml2LT5od19wYXJhbXMuc3dfY3J5cHRvKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBod2NyeXB0byBkaXNhYmxlZFxuIik7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9Ci0KLQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGFkZHIpKQotCQkvKiBvbmx5IHN1cHBvcnQgcGFpcndpc2Uga2V5cyAqLwotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KKwlhZGRyID0gc3RhID8gc3RhLT5hZGRyIDogaXdsX2JjYXN0X2FkZHI7CiAJc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKIAlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAorCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCiAJCQkJICAgYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zMDcwLDcgKzI2MTYsNyBAQAogCQllbHNlCiAJCQlyZXQgPSBpd2xfc2V0X2R5bmFtaWNfa2V5KHByaXYsIGtleSwgc3RhX2lkKTsKIAotCQlJV0xfREVCVUdfTUFDODAyMTEoImVuYWJsZSBod2NyeXB0byBrZXlcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVuYWJsZSBod2NyeXB0byBrZXlcbiIpOwogCQlicmVhazsKIAljYXNlIERJU0FCTEVfS0VZOgogCQlpZiAoaXNfZGVmYXVsdF93ZXBfa2V5KQpAQCAtMzA3OCwxMyArMjYyNCwxMyBAQAogCQllbHNlCiAJCQlyZXQgPSBpd2xfcmVtb3ZlX2R5bmFtaWNfa2V5KHByaXYsIGtleSwgc3RhX2lkKTsKIAotCQlJV0xfREVCVUdfTUFDODAyMTEoImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJkaXNhYmxlIGh3Y3J5cHRvIGtleVxuIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzA5NiwxNSArMjY0MiwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHE7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAogCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHF1ZXVlID49IEFDX05VTSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gcXVldWUgPj0gQUNfTlVNICVkXG4iLCBxdWV1ZSk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBxdWV1ZSA+PSBBQ19OVU0gJWRcbiIsIHF1ZXVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMTI4LDcgKzI2NzQsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxMzcsOCArMjY4Myw5IEBACiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByZXQ7CiAKLQlJV0xfREVCVUdfSFQoIkEtTVBEVSBhY3Rpb24gb24gYWRkciAlcE0gdGlkICVkXG4iLAorCUlXTF9ERUJVR19IVChwcml2LCAiQS1NUERVIGFjdGlvbiBvbiBhZGRyICVwTSB0aWQgJWRcbiIsCiAJCSAgICAgc3RhLT5hZGRyLCB0aWQpOwogCiAJaWYgKCEocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX04pKQpAQCAtMzE0NiwxOSArMjY5MywyNyBAQAogCiAJc3dpdGNoIChhY3Rpb24pIHsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVDoKLQkJSVdMX0RFQlVHX0hUKCJzdGFydCBSeFxuIik7CisJCUlXTF9ERUJVR19IVChwcml2LCAic3RhcnQgUnhcbiIpOwogCQlyZXR1cm4gaXdsX3N0YV9yeF9hZ2dfc3RhcnQocHJpdiwgc3RhLT5hZGRyLCB0aWQsICpzc24pOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6Ci0JCUlXTF9ERUJVR19IVCgic3RvcCBSeFxuIik7Ci0JCXJldHVybiBpd2xfc3RhX3J4X2FnZ19zdG9wKHByaXYsIHN0YS0+YWRkciwgdGlkKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdG9wIFJ4XG4iKTsKKwkJcmV0ID0gaXdsX3N0YV9yeF9hZ2dfc3RvcChwcml2LCBzdGEtPmFkZHIsIHRpZCk7CisJCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKKwkJCXJldHVybiAwOworCQllbHNlCisJCQlyZXR1cm4gcmV0OwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOgotCQlJV0xfREVCVUdfSFQoInN0YXJ0IFR4XG4iKTsKKwkJSVdMX0RFQlVHX0hUKHByaXYsICJzdGFydCBUeFxuIik7CiAJCXJldHVybiBpd2xfdHhfYWdnX3N0YXJ0KHByaXYsIHN0YS0+YWRkciwgdGlkLCBzc24pOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1A6Ci0JCUlXTF9ERUJVR19IVCgic3RvcCBUeFxuIik7Ci0JCXJldHVybiBpd2xfdHhfYWdnX3N0b3AocHJpdiwgc3RhLT5hZGRyLCB0aWQpOworCQlJV0xfREVCVUdfSFQocHJpdiwgInN0b3AgVHhcbiIpOworCQlyZXQgPSBpd2xfdHhfYWdnX3N0b3AocHJpdiwgc3RhLT5hZGRyLCB0aWQpOworCQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCQlyZXR1cm4gMDsKKwkJZWxzZQorCQkJcmV0dXJuIHJldDsKIAlkZWZhdWx0OgotCQlJV0xfREVCVUdfSFQoInVua25vd25cbiIpOworCQlJV0xfREVCVUdfSFQocHJpdiwgInVua25vd25cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJfQpAQCAtMzE3NCwxMCArMjcyOSwxMCBAQAogCXN0cnVjdCBpd2xfcXVldWUgKnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTMxOTUsNyArMjc1MCw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjA2LDggKzI3NjEsOCBAQAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCiAJcHJpdiA9IGh3LT5wcml2OwotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjE4LDcgKzI3NzMsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCW1lbXNldCgmcHJpdi0+Y3VycmVudF9odF9jb25maWcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX2h0X2luZm8pKTsKQEAgLTMyNDUsNyArMjgwMCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIG5vdCByZWFkeVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOwogCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJcmV0dXJuOwogCX0KQEAgLTMyNzQsNyArMjgyOSw3IEBACiAJCQkJCQkgICAgIElFRUU4MDIxMV9DSEFOX1JBREFSKSkKIAkJCQlpd2xfcG93ZXJfZGlzYWJsZV9tYW5hZ2VtZW50KHByaXYsIDMwMDApOwogCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgaW4gSUJTU1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgaW4gSUJTU1xuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm47CiAJfQpAQCAtMzI4Myw3ICsyODM4LDcgQEAKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIHN0YXRpYyBpbnQgaXdsX21hY19iZWFjb25fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMzI5MiwxNSArMjg0NywxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX19sZTY0IHRpbWVzdGFtcDsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBSRiBub3QgcmVhZHlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IElCU1NcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IElCU1NcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTMzMTUsNyArMjg3MCw3IEBACiAJdGltZXN0YW1wID0gKChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilza2ItPmRhdGEpLT51LmJlYWNvbi50aW1lc3RhbXA7CiAJcHJpdi0+dGltZXN0YW1wID0gbGU2NF90b19jcHUodGltZXN0YW1wKTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCWl3bF9yZXNldF9xb3MocHJpdik7CkBAIC0zMzU5LDggKzI5MTQsNyBAQAogCiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKIAlpZiAocmV0KQotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiAlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CisJCUlXTF9FUlIocHJpdiwgIiVzIGlzIG5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKIAllbHNlCiAJCXByaXYtPmRlYnVnX2xldmVsID0gdmFsOwogCkBAIC0zNDM5LDggKzI5OTMsNyBAQAogCiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkgICAgICAgIjogJXMgaXMgbm90IGluIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CisJCUlXTF9JTkZPKHByaXYsICIlcyBpcyBub3QgaW4gZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKIAllbHNlCiAJCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgdmFsLCBmYWxzZSk7CiAKQEAgLTM0NzMsOSArMzAyNiw5IEBACiAJaWYgKGxlMzJfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncykgIT0gZmxhZ3MpIHsKIAkJLyogQ2FuY2VsIGFueSBjdXJyZW50bHkgcnVubmluZyBzY2Fucy4uLiAqLwogCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKLQkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKKwkJCUlXTF9XQVJOKHByaXYsICJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKIAkJZWxzZSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0IHJ4b24uZmxhZ3MgPSAweCUwNFhcbiIsIGZsYWdzKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21taXQgcnhvbi5mbGFncyA9IDB4JTA0WFxuIiwgZmxhZ3MpOwogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwogCQkJaXdsX2NvbW1pdF9yeG9uKHByaXYpOwogCQl9CkBAIC0zNTEyLDkgKzMwNjUsOSBAQAogCWlmIChsZTMyX3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzKSAhPSBmaWx0ZXJfZmxhZ3MpIHsKIAkJLyogQ2FuY2VsIGFueSBjdXJyZW50bHkgcnVubmluZyBzY2Fucy4uLiAqLwogCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKLQkJCUlXTF9XQVJOSU5HKCJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKKwkJCUlXTF9XQVJOKHByaXYsICJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKIAkJZWxzZSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0dGluZyByeG9uLmZpbHRlcl9mbGFncyA9ICIKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21taXR0aW5nIHJ4b24uZmlsdGVyX2ZsYWdzID0gIgogCQkJCSAgICAgICAiMHglMDRYXG4iLCBmaWx0ZXJfZmxhZ3MpOwogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9CiAJCQkJY3B1X3RvX2xlMzIoZmlsdGVyX2ZsYWdzKTsKQEAgLTM1MjksMzEgKzMwODIsNiBAQAogc3RhdGljIERFVklDRV9BVFRSKGZpbHRlcl9mbGFncywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmlsdGVyX2ZsYWdzLAogCQkgICBzdG9yZV9maWx0ZXJfZmxhZ3MpOwogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9yZXRyeV9yYXRlKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCWxvbmcgdmFsOwotCWludCByZXQgID0gc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKTsKLQlpZiAoIXJldCkKLQkJcmV0dXJuIHJldDsKLQotCXByaXYtPnJldHJ5X3JhdGUgPSAodmFsID4gMCkgPyB2YWwgOiAxOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3JldHJ5X3JhdGUoc3RydWN0IGRldmljZSAqZCwKLQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZCIsIHByaXYtPnJldHJ5X3JhdGUpOwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocmV0cnlfcmF0ZSwgU19JV1VTUiB8IFNfSVJVU1IsIHNob3dfcmV0cnlfcmF0ZSwKLQkJICAgc3RvcmVfcmV0cnlfcmF0ZSk7Ci0KIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3Bvd2VyX2xldmVsKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTM1NjUsMTggKzMwOTMsMTMgQEAKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7Ci0JCXJldCA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0OwotCX0KLQogCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZtb2RlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAogCXJldCA9IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHByaXYsIG1vZGUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gY291bnQ7CkBAIC0zNjU2LDE2ICszMTc5LDYgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKHN0YXRpc3RpY3MsIFNfSVJVR08sIHNob3dfc3RhdGlzdGljcywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmQsCi0JCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCAoaW50KXByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBERVZJQ0VfQVRUUihzdGF0dXMsIFNfSVJVR08sIHNob3dfc3RhdHVzLCBOVUxMKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzY3NSw3ICszMTg4LDcgQEAKIAogc3RhdGljIHZvaWQgaXdsX3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoRFJWX05BTUUpOworCXByaXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKERSVl9OQU1FKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTM3MTksOSArMzIzMiw3IEBACiAJJmRldl9hdHRyX2ZsYWdzLmF0dHIsCiAJJmRldl9hdHRyX2ZpbHRlcl9mbGFncy5hdHRyLAogCSZkZXZfYXR0cl9wb3dlcl9sZXZlbC5hdHRyLAotCSZkZXZfYXR0cl9yZXRyeV9yYXRlLmF0dHIsCiAJJmRldl9hdHRyX3N0YXRpc3RpY3MuYXR0ciwKLQkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCiAJJmRldl9hdHRyX3RlbXBlcmF0dXJlLmF0dHIsCiAJJmRldl9hdHRyX3R4X3Bvd2VyLmF0dHIsCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKQEAgLTM3NjQsNiArMzI3NSw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGl3bF9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsX2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiBwY2lfY21kOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDEuIEFsbG9jYXRpbmcgSFcgZGF0YQpAQCAtMzc4OCw3ICszMzAwLDcgQEAKIAogCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKIAotCUlXTF9ERUJVR19JTkZPKCIqKiogTE9BRCBEUklWRVIgKioqXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiKioqIExPQUQgRFJJVkVSICoqKlxuIik7CiAJcHJpdi0+Y2ZnID0gY2ZnOwogCXByaXYtPnBjaV9kZXYgPSBwZGV2OwogCkBAIC0zODE2LDggKzMzMjgsNyBAQAogCQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCQkvKiBib3RoIGF0dGVtcHRzIGZhaWxlZDogKi8KIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iLAotCQkJCURSVl9OQU1FKTsKKwkJCUlXTF9XQVJOKHByaXYsICJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCQlnb3RvIG91dF9wY2lfZGlzYWJsZV9kZXZpY2U7CiAJCX0KIAl9CkBAIC0zODM4LDEzICszMzQ5LDEyIEBACiAJCWdvdG8gb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9sZW4gPSAweCUwOGxseFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAicGNpX3Jlc291cmNlX2xlbiA9IDB4JTA4bGx4XG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKLQlJV0xfREVCVUdfSU5GTygicGNpX3Jlc291cmNlX2Jhc2UgPSAlcFxuIiwgcHJpdi0+aHdfYmFzZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInBjaV9yZXNvdXJjZV9iYXNlID0gJXBcbiIsIHByaXYtPmh3X2Jhc2UpOwogCiAJaXdsX2h3X2RldGVjdChwcml2KTsKLQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSI6IERldGVjdGVkIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayAlcyBSRVY9MHglWFxuIiwKKwlJV0xfSU5GTyhwcml2LCAiRGV0ZWN0ZWQgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rICVzIFJFVj0weCVYXG4iLAogCQlwcml2LT5jZmctPm5hbWUsIHByaXYtPmh3X3Jldik7CiAKIAkvKiBXZSBkaXNhYmxlIHRoZSBSRVRSWV9USU1FT1VUIHJlZ2lzdGVyICgweDQxKSB0byBrZWVwCkBAIC0zODU0LDcgKzMzNjQsNyBAQAogCS8qIGFtcCBpbml0ICovCiAJZXJyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCBBUE1HXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIGluaXQgQVBNR1xuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCS8qKioqKioqKioqKioqKioqKgpAQCAtMzg2Myw3ICszMzczLDcgQEAKIAkvKiBSZWFkIHRoZSBFRVBST00gKi8KIAllcnIgPSBpd2xfZWVwcm9tX2luaXQocHJpdik7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0IEVFUFJPTVxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCWVyciA9IGl3bF9lZXByb21fY2hlY2tfdmVyc2lvbihwcml2KTsKQEAgLTM4NzIsMTQgKzMzODIsMTQgQEAKIAogCS8qIGV4dHJhY3QgTUFDIEFkZHJlc3MgKi8KIAlpd2xfZWVwcm9tX2dldF9tYWMocHJpdiwgcHJpdi0+bWFjX2FkZHIpOwotCUlXTF9ERUJVR19JTkZPKCJNQUMgYWRkcmVzczogJXBNXG4iLCBwcml2LT5tYWNfYWRkcik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk1BQyBhZGRyZXNzOiAlcE1cbiIsIHByaXYtPm1hY19hZGRyKTsKIAlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihwcml2LT5odywgcHJpdi0+bWFjX2FkZHIpOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDUuIFNldHVwIEhXIGNvbnN0YW50cwogCSAqKioqKioqKioqKioqKioqKioqKioqKiovCiAJaWYgKGl3bF9zZXRfaHdfcGFyYW1zKHByaXYpKSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIHNldCBodyBwYXJhbWV0ZXJzXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHNldCBodyBwYXJhbWV0ZXJzXG4iKTsKIAkJZ290byBvdXRfZnJlZV9lZXByb207CiAJfQogCkBAIC0zODk5LDcgKzM0MDksNyBAQAogCS8qIERpc2FibGUgcmFkaW8gKFNXIFJGIEtJTEwpIHZpYSBwYXJhbWV0ZXIgd2hlbiBsb2FkaW5nIGRyaXZlciAqLwogCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPmRpc2FibGUpIHsKIAkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci0JCUlXTF9ERUJVR19JTkZPKCJSYWRpbyBkaXNhYmxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUmFkaW8gZGlzYWJsZWQuXG4iKTsKIAl9CiAKIAkvKioqKioqKioqKioqKioqKioqKioKQEAgLTM5MDksMzggKzM0MTksNTcgQEAKIAlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAorCXBjaV9lbmFibGVfbXNpKHByaXYtPnBjaV9kZXYpOworCisJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBpd2xfaXNyLCBJUlFGX1NIQVJFRCwKKwkJCSAgRFJWX05BTUUsIHByaXYpOworCWlmIChlcnIpIHsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWRcbiIsIHByaXYtPnBjaV9kZXYtPmlycSk7CisJCWdvdG8gb3V0X2Rpc2FibGVfbXNpOworCX0KIAllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZGV2aWNlIGF0dHJpYnV0ZXNcbiIpOwotCQlnb3RvIG91dF91bmluaXRfZHJ2OworCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzXG4iKTsKKwkJZ290byBvdXRfZnJlZV9pcnE7CiAJfQogCi0KIAlpd2xfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTsKIAlpd2xfc2V0dXBfcnhfaGFuZGxlcnMocHJpdik7CiAKLQkvKioqKioqKioqKioqKioqKioqKioKLQkgKiA5LiBDb25jbHVkZQotCSAqKioqKioqKioqKioqKioqKioqKi8KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCSAqIDEwLiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKKwkgKiA5LiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lZWRlZDogaHcgYnVnIHcvYSAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7CisJaWYgKHBjaV9jbWQgJiBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUpIHsKKwkJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfSU5UWF9ESVNBQkxFOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOworCX0KKworCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwogCWVyciA9IGl3bF9zZXR1cF9tYWMocHJpdik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOwogCiAJZXJyID0gaXdsX2RiZ2ZzX3JlZ2lzdGVyKHByaXYsIERSVl9OQU1FKTsKIAlpZiAoZXJyKQotCQlJV0xfRVJST1IoImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisJCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7CisKKwkvKiBJZiBwbGF0Zm9ybSdzIFJGX0tJTEwgc3dpdGNoIGlzIE5PVCBzZXQgdG8gS0lMTCAqLworCWlmIChpd2xfcmVhZDMyKHByaXYsIENTUl9HUF9DTlRSTCkgJiBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykKKwkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKKwllbHNlCisJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwogCiAJZXJyID0gaXdsX3Jma2lsbF9pbml0KHByaXYpOwogCWlmIChlcnIpCi0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUkZLSUxMIHN5c3RlbS4gIgorCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSRktJTEwgc3lzdGVtLiAiCiAJCQkJICAiSWdub3JpbmcgZXJyb3I6ICVkXG4iLCBlcnIpOworCWVsc2UKKwkJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisKIAlpd2xfcG93ZXJfaW5pdGlhbGl6ZShwcml2KTsKIAlyZXR1cm4gMDsKIApAQCAtMzk0OCw3ICszNDc3LDEwIEBACiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2xfYXR0cmlidXRlX2dyb3VwKTsKLSBvdXRfdW5pbml0X2RydjoKKyBvdXRfZnJlZV9pcnE6CisJZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKKyBvdXRfZGlzYWJsZV9tc2k6CisJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCWl3bF91bmluaXRfZHJ2KHByaXYpOwogIG91dF9mcmVlX2VlcHJvbToKIAlpd2xfZWVwcm9tX2ZyZWUocHJpdik7CkBAIC0zOTczLDcgKzM1MDUsNyBAQAogCWlmICghcHJpdikKIAkJcmV0dXJuOwogCi0JSVdMX0RFQlVHX0lORk8oIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIioqKiBVTkxPQUQgRFJJVkVSICoqKlxuIik7CiAKIAlpd2xfZGJnZnNfdW5yZWdpc3Rlcihwcml2KTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaXdsX2F0dHJpYnV0ZV9ncm91cCk7CkBAIC00MDE5LDYgKzM1NTEsOCBAQAogCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAJcHJpdi0+d29ya3F1ZXVlID0gTlVMTDsKIAorCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7CisJcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3X2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtNDA0NCwxOSArMzU3OCw4IEBACiAJCXByaXYtPmlzX29wZW4gPSAxOwogCX0KIAotCS8qIHBjaSBkcml2ZXIgYXNzdW1lcyBzdGF0ZSB3aWxsIGJlIHNhdmVkIGluIHRoaXMgZnVuY3Rpb24uCi0JICogcGNpIHN0YXRlIGlzIHNhdmVkIGFuZCBkZXZpY2UgZGlzYWJsZWQgd2hlbiBpbnRlcmZhY2UgaXMKLQkgKiBzdG9wcGVkLCBzbyBhdCB0aGlzIHRpbWUgcGNpIGRldmljZSB3aWxsIGFsd2F5cyBiZSBkaXNhYmxlZCAtCi0JICogd2hldGhlciBpbnRlcmZhY2Ugd2FzIHN0YXJ0ZWQgb3Igbm90LiBzYXZpbmcgcGNpIHN0YXRlIG5vdyB3aWxsCi0JICogY2F1c2Ugc2F2ZWQgc3RhdGUgYmUgdGhhdCBvZiBhIGRpc2FibGVkIGRldmljZSwgd2hpY2ggd2lsbCBjYXVzZQotCSAqIHByb2JsZW1zIGR1cmluZyByZXN1bWUgaW4gdGhhdCB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgZGlzYWJsZWQgZGV2aWNlLgotCSAqCi0JICogaW5kaWNhdGUgdGhhdCB0aGUgY3VycmVudCBzYXZlZCBzdGF0ZSAoZnJvbSB3aGVuIGludGVyZmFjZSB3YXMKLQkgKiBzdG9wcGVkKSBpcyB2YWxpZC4gaWYgaW50ZXJmYWNlIHdhcyBuZXZlciB1cCBhdCB0aW1lIG9mIHN1c3BlbmQKLQkgKiB0aGVuIHRoZSBzYXZlZCBzdGF0ZSB3aWxsIHN0aWxsIGJlIHZhbGlkIGFzIGl0IHdhcyBzYXZlZCBkdXJpbmcKLQkgKiAucHJvYmUuICovCi0JcGRldi0+c3RhdGVfc2F2ZWQgPSB0cnVlOwotCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKIAogCXJldHVybiAwOwpAQCAtNDA2NSw4ICszNTg4LDE0IEBACiBzdGF0aWMgaW50IGl3bF9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgcmV0OwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCiAJaWYgKHByaXYtPmlzX29wZW4pCiAJCWl3bF9tYWNfc3RhcnQocHJpdi0+aHcpOwpAQCAtNDEwNyw2ICszNjM2LDIxIEBACiAvKiA1MTUwIFdpZmkvV2lNYXggKi8KIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjNDLCBQQ0lfQU5ZX0lELCBpd2w1MTUwX2Fnbl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjNELCBQQ0lfQU5ZX0lELCBpd2w1MTUwX2Fnbl9jZmcpfSwKKy8qIDYwMDAvNjA1MCBTZXJpZXMgKi8KKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDgyLCAweDExMDIsIGl3bDYwMDBfMmFnX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODUsIDB4MTExMiwgaXdsNjAwMF8yYWdfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4MiwgMHgxMTIyLCBpd2w2MDAwXzJhZ19jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHg0MjJCLCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4NDIzOCwgUENJX0FOWV9JRCwgaXdsNjAwMF8zYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODIsIFBDSV9BTllfSUQsIGl3bDYwMDBfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg1LCBQQ0lfQU5ZX0lELCBpd2w2MDAwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4NiwgUENJX0FOWV9JRCwgaXdsNjA1MF8zYWduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODcsIFBDSV9BTllfSUQsIGl3bDYwNTBfMmFnbl9jZmcpfSwKKwl7SVdMX1BDSV9ERVZJQ0UoMHgwMDg4LCBQQ0lfQU5ZX0lELCBpd2w2MDUwXzNhZ25fY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MDA4OSwgUENJX0FOWV9JRCwgaXdsNjA1MF8yYWduX2NmZyl9LAorLyogMTAwMCBTZXJpZXMgV2lGaSAqLworCXtJV0xfUENJX0RFVklDRSgweDAwODMsIFBDSV9BTllfSUQsIGl3bDEwMDBfYmduX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDAwODQsIFBDSV9BTllfSUQsIGl3bDEwMDBfYmduX2NmZyl9LAogI2VuZGlmIC8qIENPTkZJR19JV0w1MDAwICovCiAKIAl7MH0KQEAgLTQxMzMsMTMgKzM2NzcsMTQgQEAKIAogCXJldCA9IGl3bGFnbl9yYXRlX2NvbnRyb2xfcmVnaXN0ZXIoKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLCByZXQpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICJVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sIGFsZ29yaXRobTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaXdsX2RyaXZlcik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIlVuYWJsZSB0byBpbml0aWFsaXplIFBDSSBtb2R1bGVcbiIpOwogCQlnb3RvIGVycm9yX3JlZ2lzdGVyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMKaW5kZXggZjgzNmVjYy4uNzM1ZjNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMDIsNyArMTAyLDcgQEAKIAogCXJldHVybiAwOwogZXJyOgotCUlXTF9FUlJPUigiRXJyb3IgJWQgaXRlcmF0aW9uICVkXG4iLCByZXQsIGkpOworCUlXTF9FUlIocHJpdiwgIkVycm9yICVkIGl0ZXJhdGlvbiAlZFxuIiwgcmV0LCBpKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2VuZF9jYWxpYl9yZXN1bHRzKTsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQl2YWwgPSBkYXRhLT5ucmdfc2lsZW5jZV9yc3NpW2ldOwogCQlzaWxlbmNlX3JlZiA9IG1heChzaWxlbmNlX3JlZiwgdmFsKTsKIAl9Ci0JSVdMX0RFQlVHX0NBTElCKCJzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIDIwLWJjbiBtYXggJXVcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJzaWxlbmNlIGEgJXUsIGIgJXUsIGMgJXUsIDIwLWJjbiBtYXggJXVcbiIsCiAJCQlzaWxlbmNlX3Jzc2lfYSwgc2lsZW5jZV9yc3NpX2IsIHNpbGVuY2VfcnNzaV9jLAogCQkJc2lsZW5jZV9yZWYpOwogCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJbWF4X25yZ19jY2sgPSAodTMyKSBtYXgobWF4X25yZ19jY2ssIChkYXRhLT5ucmdfdmFsdWVbaV0pKTsKIAltYXhfbnJnX2NjayArPSA2OwogCi0JSVdMX0RFQlVHX0NBTElCKCJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJyeCBlbmVyZ3kgYSAldSwgYiAldSwgYyAldSwgMTAtYmNuIG1heC9taW4gJXVcbiIsCiAJCQlyeF9pbmZvLT5iZWFjb25fZW5lcmd5X2EsIHJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYiwKIAkJCXJ4X2luZm8tPmJlYWNvbl9lbmVyZ3lfYywgbWF4X25yZ19jY2sgLSA2KTsKIApAQCAtMjM2LDE1ICsyMzYsMTUgQEAKIAkJZGF0YS0+bnVtX2luX2Nja19ub19mYSsrOwogCWVsc2UKIAkJZGF0YS0+bnVtX2luX2Nja19ub19mYSA9IDA7Ci0JSVdMX0RFQlVHX0NBTElCKCJjb25zZWN1dGl2ZSBiY25zIHdpdGggZmV3IGZhbHNlIGFsYXJtcyA9ICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY29uc2VjdXRpdmUgYmNucyB3aXRoIGZldyBmYWxzZSBhbGFybXMgPSAldVxuIiwKIAkJCWRhdGEtPm51bV9pbl9jY2tfbm9fZmEpOwogCiAJLyogSWYgd2UgZ290IHRvbyBtYW55IGZhbHNlIGFsYXJtcyB0aGlzIHRpbWUsIHJlZHVjZSBzZW5zaXRpdml0eSAqLwogCWlmICgoZmFsc2VfYWxhcm1zID4gbWF4X2ZhbHNlX2FsYXJtcykgJiYKIAkJKGRhdGEtPmF1dG9fY29ycl9jY2sgPiBBVVRPX0NPUlJfTUFYX1RIX0NDSykpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCJub3JtIEZBICV1ID4gbWF4IEZBICV1XG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPiBtYXggRkEgJXVcbiIsCiAJCSAgICAgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKLQkJSVdMX0RFQlVHX0NBTElCKCIuLi4gcmVkdWNpbmcgc2Vuc2l0aXZpdHlcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIi4uLiByZWR1Y2luZyBzZW5zaXRpdml0eVxuIik7CiAJCWRhdGEtPm5yZ19jdXJyX3N0YXRlID0gSVdMX0ZBX1RPT19NQU5ZOwogCQkvKiBTdG9yZSBmb3IgImZld2VyIHRoYW4gZGVzaXJlZCIgb24gbGF0ZXIgYmVhY29uICovCiAJCWRhdGEtPm5yZ19zaWxlbmNlX3JlZiA9IHNpbGVuY2VfcmVmOwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJCWRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmID0gKHMzMilkYXRhLT5ucmdfc2lsZW5jZV9yZWYgLQogCQkJCQkJICAgKHMzMilzaWxlbmNlX3JlZjsKIAotCQlJV0xfREVCVUdfQ0FMSUIoIm5vcm0gRkEgJXUgPCBtaW4gRkEgJXUsIHNpbGVuY2UgZGlmZiAlZFxuIiwKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJub3JtIEZBICV1IDwgbWluIEZBICV1LCBzaWxlbmNlIGRpZmYgJWRcbiIsCiAJCQkgZmFsc2VfYWxhcm1zLCBtaW5fZmFsc2VfYWxhcm1zLAogCQkJIGRhdGEtPm5yZ19hdXRvX2NvcnJfc2lsZW5jZV9kaWZmKTsKIApAQCAtMjgwLDE3ICsyODAsMTcgQEAKIAkJCSgoZGF0YS0+bnJnX2F1dG9fY29ycl9zaWxlbmNlX2RpZmYgPiBOUkdfRElGRikgfHwKIAkJCShkYXRhLT5udW1faW5fY2NrX25vX2ZhID4gTUFYX05VTUJFUl9DQ0tfTk9fRkEpKSkgewogCi0JCQlJV0xfREVCVUdfQ0FMSUIoIi4uLiBpbmNyZWFzaW5nIHNlbnNpdGl2aXR5XG4iKTsKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiLi4uIGluY3JlYXNpbmcgc2Vuc2l0aXZpdHlcbiIpOwogCQkJLyogSW5jcmVhc2UgbnJnIHZhbHVlIHRvIGluY3JlYXNlIHNlbnNpdGl2aXR5ICovCiAJCQl2YWwgPSBkYXRhLT5ucmdfdGhfY2NrICsgTlJHX1NURVBfQ0NLOwogCQkJZGF0YS0+bnJnX3RoX2NjayA9IG1pbigodTMyKXJhbmdlcy0+bWluX25yZ19jY2ssIHZhbCk7CiAJCX0gZWxzZSB7Ci0JCQlJV0xfREVCVUdfQ0FMSUIoIi4uLiBidXQgbm90IGNoYW5naW5nIHNlbnNpdGl2aXR5XG4iKTsKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiLi4uIGJ1dCBub3QgY2hhbmdpbmcgc2Vuc2l0aXZpdHlcbiIpOwogCQl9CiAKIAkvKiBFbHNlIHdlIGdvdCBhIGhlYWx0aHkgbnVtYmVyIG9mIGZhbHNlIGFsYXJtcywga2VlcCBzdGF0dXMgcXVvICovCiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0NBTElCKCIgRkEgaW4gc2FmZSB6b25lXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIgRkEgaW4gc2FmZSB6b25lXG4iKTsKIAkJZGF0YS0+bnJnX2N1cnJfc3RhdGUgPSBJV0xfRkFfR09PRF9SQU5HRTsKIAogCQkvKiBTdG9yZSBmb3IgdXNlIGluICJmZXdlciB0aGFuIGRlc2lyZWQiIHdpdGggbGF0ZXIgYmVhY29uICovCkBAIC0zMDAsNyArMzAwLDcgQEAKIAkJICogICBnaXZlIGl0IHNvbWUgZXh0cmEgbWFyZ2luIGJ5IHJlZHVjaW5nIHNlbnNpdGl2aXR5IGFnYWluCiAJCSAqICAgKGJ1dCBkb24ndCBnbyBiZWxvdyBtZWFzdXJlZCBlbmVyZ3kgb2YgZGVzaXJlZCBSeCkgKi8KIAkJaWYgKElXTF9GQV9UT09fTUFOWSA9PSBkYXRhLT5ucmdfcHJldl9zdGF0ZSkgewotCQkJSVdMX0RFQlVHX0NBTElCKCIuLi4gaW5jcmVhc2luZyBtYXJnaW5cbiIpOworCQkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIuLi4gaW5jcmVhc2luZyBtYXJnaW5cbiIpOwogCQkJaWYgKGRhdGEtPm5yZ190aF9jY2sgPiAobWF4X25yZ19jY2sgKyBOUkdfTUFSR0lOKSkKIAkJCQlkYXRhLT5ucmdfdGhfY2NrIC09IE5SR19NQVJHSU47CiAJCQllbHNlCkBAIC0zMTQsNyArMzE0LDcgQEAKIAkgKiBMb3dlciB2YWx1ZSBpcyBoaWdoZXIgZW5lcmd5LCBzbyB3ZSB1c2UgbWF4KCkhCiAJICovCiAJZGF0YS0+bnJnX3RoX2NjayA9IG1heChtYXhfbnJnX2NjaywgZGF0YS0+bnJnX3RoX2Njayk7Ci0JSVdMX0RFQlVHX0NBTElCKCJuZXcgbnJnX3RoX2NjayAldVxuIiwgZGF0YS0+bnJnX3RoX2Njayk7CisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJuZXcgbnJnX3RoX2NjayAldVxuIiwgZGF0YS0+bnJnX3RoX2Njayk7CiAKIAlkYXRhLT5ucmdfcHJldl9zdGF0ZSA9IGRhdGEtPm5yZ19jdXJyX3N0YXRlOwogCkBAIC0zNjcsNyArMzY3LDcgQEAKIAkvKiBJZiB3ZSBnb3QgdG9vIG1hbnkgZmFsc2UgYWxhcm1zIHRoaXMgdGltZSwgcmVkdWNlIHNlbnNpdGl2aXR5ICovCiAJaWYgKGZhbHNlX2FsYXJtcyA+IG1heF9mYWxzZV9hbGFybXMpIHsKIAotCQlJV0xfREVCVUdfQ0FMSUIoIm5vcm0gRkEgJXUgPiBtYXggRkEgJXUpXG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPiBtYXggRkEgJXUpXG4iLAogCQkJICAgICBmYWxzZV9hbGFybXMsIG1heF9mYWxzZV9hbGFybXMpOwogCiAJCXZhbCA9IGRhdGEtPmF1dG9fY29ycl9vZmRtICsgQVVUT19DT1JSX1NURVBfT0ZETTsKQEAgLTM5MCw3ICszOTAsNyBAQAogCS8qIEVsc2UgaWYgd2UgZ290IGZld2VyIHRoYW4gZGVzaXJlZCwgaW5jcmVhc2Ugc2Vuc2l0aXZpdHkgKi8KIAllbHNlIGlmIChmYWxzZV9hbGFybXMgPCBtaW5fZmFsc2VfYWxhcm1zKSB7CiAKLQkJSVdMX0RFQlVHX0NBTElCKCJub3JtIEZBICV1IDwgbWluIEZBICV1XG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm5vcm0gRkEgJXUgPCBtaW4gRkEgJXVcbiIsCiAJCQkgICAgIGZhbHNlX2FsYXJtcywgbWluX2ZhbHNlX2FsYXJtcyk7CiAKIAkJdmFsID0gZGF0YS0+YXV0b19jb3JyX29mZG0gLSBBVVRPX0NPUlJfU1RFUF9PRkRNOwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJCWRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSA9CiAJCQltYXgoKHUzMilyYW5nZXMtPmF1dG9fY29ycl9taW5fb2ZkbV9tcmNfeDEsIHZhbCk7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0NBTElCKCJtaW4gRkEgJXUgPCBub3JtIEZBICV1IDwgbWF4IEZBICV1IE9LXG4iLAorCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIm1pbiBGQSAldSA8IG5vcm0gRkEgJXUgPCBtYXggRkEgJXUgT0tcbiIsCiAJCQkgbWluX2ZhbHNlX2FsYXJtcywgZmFsc2VfYWxhcm1zLCBtYXhfZmFsc2VfYWxhcm1zKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00NTIsMTggKzQ1MiwxOCBAQAogCQkJCWNwdV90b19sZTE2KCh1MTYpZGF0YS0+bnJnX3RoX29mZG0pOwogCiAJY21kLnRhYmxlW0hEX0JBUktFUl9DT1JSX1RIX0FERF9NSU5fSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDE5MCk7CisJCQkJY3B1X3RvX2xlMTYoMTkwKTsKIAljbWQudGFibGVbSERfQkFSS0VSX0NPUlJfVEhfQUREX01JTl9NUkNfSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDM5MCk7CisJCQkJY3B1X3RvX2xlMTYoMzkwKTsKIAljbWQudGFibGVbSERfT0ZETV9FTkVSR1lfVEhfSU5fSU5ERVhdID0KLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDYyKTsKKwkJCQljcHVfdG9fbGUxNig2Mik7CiAKLQlJV0xfREVCVUdfQ0FMSUIoIm9mZG06IGFjICV1IG1yYyAldSB4MSAldSBtcmNfeDEgJXUgdGhyZXNoICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAib2ZkbTogYWMgJXUgbXJjICV1IHgxICV1IG1yY194MSAldSB0aHJlc2ggJXVcbiIsCiAJCQlkYXRhLT5hdXRvX2NvcnJfb2ZkbSwgZGF0YS0+YXV0b19jb3JyX29mZG1fbXJjLAogCQkJZGF0YS0+YXV0b19jb3JyX29mZG1feDEsIGRhdGEtPmF1dG9fY29ycl9vZmRtX21yY194MSwKIAkJCWRhdGEtPm5yZ190aF9vZmRtKTsKIAotCUlXTF9ERUJVR19DQUxJQigiY2NrOiBhYyAldSBtcmMgJXUgdGhyZXNoICV1XG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2NrOiBhYyAldSBtcmMgJXUgdGhyZXNoICV1XG4iLAogCQkJZGF0YS0+YXV0b19jb3JyX2NjaywgZGF0YS0+YXV0b19jb3JyX2Nja19tcmMsCiAJCQlkYXRhLT5ucmdfdGhfY2NrKTsKIApAQCAtNDczLDcgKzQ3Myw3IEBACiAJLyogRG9uJ3Qgc2VuZCBjb21tYW5kIHRvIHVDb2RlIGlmIG5vdGhpbmcgaGFzIGNoYW5nZWQgKi8KIAlpZiAoIW1lbWNtcCgmY21kLnRhYmxlWzBdLCAmKHByaXYtPnNlbnNpdGl2aXR5X3RibFswXSksCiAJCSAgICBzaXplb2YodTE2KSpIRF9UQUJMRV9TSVpFKSkgewotCQlJV0xfREVCVUdfQ0FMSUIoIk5vIGNoYW5nZSBpbiBTRU5TSVRJVklUWV9DTURcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIk5vIGNoYW5nZSBpbiBTRU5TSVRJVklUWV9DTURcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTQ4Myw3ICs0ODMsNyBAQAogCiAJcmV0ID0gaXdsX3NlbmRfY21kKHByaXYsICZjbWRfb3V0KTsKIAlpZiAocmV0KQotCQlJV0xfRVJST1IoIlNFTlNJVElWSVRZX0NNRCBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJTRU5TSVRJVklUWV9DTUQgZmFpbGVkXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC00OTgsNyArNDk4LDcgQEAKIAlpZiAocHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCkKIAkJcmV0dXJuOwogCi0JSVdMX0RFQlVHX0NBTElCKCJTdGFydCBpd2xfaW5pdF9zZW5zaXRpdml0eVxuIik7CisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJTdGFydCBpd2xfaW5pdF9zZW5zaXRpdml0eVxuIik7CiAKIAkvKiBDbGVhciBkcml2ZXIncyBzZW5zaXRpdml0eSBhbGdvIGRhdGEgKi8KIAlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKQEAgLTUzNiw3ICs1MzYsNyBAQAogCWRhdGEtPmxhc3RfZmFfY250X2NjayA9IDA7CiAKIAlyZXQgfD0gaXdsX3NlbnNpdGl2aXR5X3dyaXRlKHByaXYpOwotCUlXTF9ERUJVR19DQUxJQigiPDxyZXR1cm4gMHglWFxuIiwgcmV0KTsKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIjw8cmV0dXJuIDB4JVhcbiIsIHJldCk7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9pbml0X3NlbnNpdGl2aXR5KTsKIApAQCAtNTYyLDEzICs1NjIsMTMgQEAKIAlkYXRhID0gJihwcml2LT5zZW5zaXRpdml0eV9kYXRhKTsKIAogCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCI8PCAtIG5vdCBhc3NvY2lhdGVkXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICI8PCAtIG5vdCBhc3NvY2lhdGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiPDwgaW52YWxpZCBkYXRhLlxuIik7CisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiPDwgaW52YWxpZCBkYXRhLlxuIik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTU5NSwxMCArNTk1LDEwIEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoInJ4X2VuYWJsZV90aW1lID0gJXUgdXNlY3NcbiIsIHJ4X2VuYWJsZV90aW1lKTsKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgInJ4X2VuYWJsZV90aW1lID0gJXUgdXNlY3NcbiIsIHJ4X2VuYWJsZV90aW1lKTsKIAogCWlmICghcnhfZW5hYmxlX3RpbWUpIHsKLQkJSVdMX0RFQlVHX0NBTElCKCI8PCBSWCBFbmFibGUgVGltZSA9PSAwISBcbiIpOworCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIjw8IFJYIEVuYWJsZSBUaW1lID09IDAhIFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTYzNyw3ICs2MzcsNyBAQAogCW5vcm1fZmFfb2ZkbSA9IGZhX29mZG0gKyBiYWRfcGxjcF9vZmRtOwogCW5vcm1fZmFfY2NrID0gZmFfY2NrICsgYmFkX3BsY3BfY2NrOwogCi0JSVdMX0RFQlVHX0NBTElCKCJjY2s6IGZhICV1IGJhZHAgJXUgIG9mZG06IGZhICV1IGJhZHAgJXVcbiIsIGZhX2NjaywKKwlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImNjazogZmEgJXUgYmFkcCAldSAgb2ZkbTogZmEgJXUgYmFkcCAldVxuIiwgZmFfY2NrLAogCQkJYmFkX3BsY3BfY2NrLCBmYV9vZmRtLCBiYWRfcGxjcF9vZmRtKTsKIAogCWl3bF9zZW5zX2F1dG9fY29ycl9vZmRtKHByaXYsIG5vcm1fZmFfb2ZkbSwgcnhfZW5hYmxlX3RpbWUpOwpAQCAtNjkwLDEzICs2OTAsMTMgQEAKIAkgKiAgIHRoZW4gd2UncmUgZG9uZSBmb3JldmVyLiAqLwogCWlmIChkYXRhLT5zdGF0ZSAhPSBJV0xfQ0hBSU5fTk9JU0VfQUNDVU1VTEFURSkgewogCQlpZiAoZGF0YS0+c3RhdGUgPT0gSVdMX0NIQUlOX05PSVNFX0FMSVZFKQotCQkJSVdMX0RFQlVHX0NBTElCKCJXYWl0IGZvciBub2lzZSBjYWxpYiByZXNldFxuIik7CisJCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgIldhaXQgZm9yIG5vaXNlIGNhbGliIHJlc2V0XG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHJ4X2luZm8tPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcgIT0gSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFKSB7Ci0JCUlXTF9ERUJVR19DQUxJQigiIDw8IEludGVyZmVyZW5jZSBkYXRhIHVuYXZhaWxhYmxlXG4iKTsKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICIgPDwgSW50ZXJmZXJlbmNlIGRhdGEgdW5hdmFpbGFibGVcbiIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CkBAIC03MDksNyArNzA5LDcgQEAKIAkvKiBNYWtlIHN1cmUgd2UgYWNjdW11bGF0ZSBkYXRhIGZvciBqdXN0IHRoZSBhc3NvY2lhdGVkIGNoYW5uZWwKIAkgKiAgIChldmVuIGlmIHNjYW5uaW5nKS4gKi8KIAlpZiAoKHJ4b25fY2hudW0gIT0gc3RhdF9jaG51bSkgfHwgKHJ4b25fYmFuZDI0ICE9IHN0YXRfYmFuZDI0KSkgewotCQlJV0xfREVCVUdfQ0FMSUIoIlN0YXRzIG5vdCBmcm9tIGNoYW49JWQsIGJhbmQyND0lZFxuIiwKKwkJSVdMX0RFQlVHX0NBTElCKHByaXYsICJTdGF0cyBub3QgZnJvbSBjaGFuPSVkLCBiYW5kMjQ9JWRcbiIsCiAJCQkJcnhvbl9jaG51bSwgcnhvbl9iYW5kMjQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKQEAgLTczOSwxMSArNzM5LDExIEBACiAJZGF0YS0+Y2hhaW5fc2lnbmFsX2IgPSAoY2hhaW5fc2lnX2IgKyBkYXRhLT5jaGFpbl9zaWduYWxfYik7CiAJZGF0YS0+Y2hhaW5fc2lnbmFsX2MgPSAoY2hhaW5fc2lnX2MgKyBkYXRhLT5jaGFpbl9zaWduYWxfYyk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoImNoYW49JWQsIGJhbmQyND0lZCwgYmVhY29uPSVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiY2hhbj0lZCwgYmFuZDI0PSVkLCBiZWFjb249JWRcbiIsCiAJCQlyeG9uX2NobnVtLCByeG9uX2JhbmQyNCwgZGF0YS0+YmVhY29uX2NvdW50KTsKLQlJV0xfREVCVUdfQ0FMSUIoImNoYWluX3NpZzogYSAlZCBiICVkIGMgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJjaGFpbl9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAogCQkJY2hhaW5fc2lnX2EsIGNoYWluX3NpZ19iLCBjaGFpbl9zaWdfYyk7Ci0JSVdMX0RFQlVHX0NBTElCKCJjaGFpbl9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJjaGFpbl9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCiAJCQljaGFpbl9ub2lzZV9hLCBjaGFpbl9ub2lzZV9iLCBjaGFpbl9ub2lzZV9jKTsKIAogCS8qIElmIHRoaXMgaXMgdGhlIDIwdGggYmVhY29uLCBkZXRlcm1pbmU6CkBAIC03NzMsOSArNzczLDkgQEAKIAkJYWN0aXZlX2NoYWlucyA9ICgxIDw8IG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpOwogCX0KIAotCUlXTF9ERUJVR19DQUxJQigiYXZlcmFnZV9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYXZlcmFnZV9zaWc6IGEgJWQgYiAlZCBjICVkXG4iLAogCQkgICAgIGF2ZXJhZ2Vfc2lnWzBdLCBhdmVyYWdlX3NpZ1sxXSwgYXZlcmFnZV9zaWdbMl0pOwotCUlXTF9ERUJVR19DQUxJQigibWF4X2F2ZXJhZ2Vfc2lnID0gJWQsIGFudGVubmEgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJtYXhfYXZlcmFnZV9zaWcgPSAlZCwgYW50ZW5uYSAlZFxuIiwKIAkJICAgICBtYXhfYXZlcmFnZV9zaWcsIG1heF9hdmVyYWdlX3NpZ19hbnRlbm5hX2kpOwogCiAJLyogQ29tcGFyZSBzaWduYWwgc3RyZW5ndGhzIGZvciBhbGwgMyByZWNlaXZlcnMuICovCkBAIC03ODksNyArNzg5LDcgQEAKIAkJCQlkYXRhLT5kaXNjb25uX2FycmF5W2ldID0gMTsKIAkJCWVsc2UKIAkJCQlhY3RpdmVfY2hhaW5zIHw9ICgxIDw8IGkpOwotCQkJSVdMX0RFQlVHX0NBTElCKCJpID0gJWQgIHJzc2lEZWx0YSA9ICVkICAiCisJCQlJV0xfREVCVUdfQ0FMSUIocHJpdiwgImkgPSAlZCAgcnNzaURlbHRhID0gJWQgICIKIAkJCSAgICAgImRpc2Nvbm5fYXJyYXlbaV0gPSAlZFxuIiwKIAkJCSAgICAgaSwgcnNzaV9kZWx0YSwgZGF0YS0+ZGlzY29ubl9hcnJheVtpXSk7CiAJCX0KQEAgLTgxMyw3ICs4MTMsNyBAQAogCQkJICogZGlzY29ubmVjdGVkIGNvbm5lY3QgaXQgYW55d2F5ICovCiAJCQlkYXRhLT5kaXNjb25uX2FycmF5W2ldID0gMDsKIAkJCWFjdGl2ZV9jaGFpbnMgfD0gYW50X21zazsKLQkJCUlXTF9ERUJVR19DQUxJQigiQWxsIFR4IGNoYWlucyBhcmUgZGlzY29ubmVjdGVkIFcvQSAtICIKKwkJCUlXTF9ERUJVR19DQUxJQihwcml2LCAiQWxsIFR4IGNoYWlucyBhcmUgZGlzY29ubmVjdGVkIFcvQSAtICIKIAkJCQkiZGVjbGFyZSAlZCBhcyBjb25uZWN0ZWRcbiIsIGkpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTgyMSw3ICs4MjEsNyBAQAogCiAJLyogU2F2ZSBmb3IgdXNlIHdpdGhpbiBSWE9OLCBUWCwgU0NBTiBjb21tYW5kcywgZXRjLiAqLwogCXByaXYtPmNoYWluX25vaXNlX2RhdGEuYWN0aXZlX2NoYWlucyA9IGFjdGl2ZV9jaGFpbnM7Ci0JSVdMX0RFQlVHX0NBTElCKCJhY3RpdmVfY2hhaW5zIChiaXR3aXNlKSA9IDB4JXhcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJhY3RpdmVfY2hhaW5zIChiaXR3aXNlKSA9IDB4JXhcbiIsCiAJCQlhY3RpdmVfY2hhaW5zKTsKIAogCS8qIEFuYWx5emUgbm9pc2UgZm9yIHJ4IGJhbGFuY2UgKi8KQEAgLTgzOSwxNSArODM5LDE2IEBACiAJCX0KIAl9CiAKLQlJV0xfREVCVUdfQ0FMSUIoImF2ZXJhZ2Vfbm9pc2U6IGEgJWQgYiAlZCBjICVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiYXZlcmFnZV9ub2lzZTogYSAlZCBiICVkIGMgJWRcbiIsCiAJCQlhdmVyYWdlX25vaXNlWzBdLCBhdmVyYWdlX25vaXNlWzFdLAogCQkJYXZlcmFnZV9ub2lzZVsyXSk7CiAKLQlJV0xfREVCVUdfQ0FMSUIoIm1pbl9hdmVyYWdlX25vaXNlID0gJWQsIGFudGVubmEgJWRcbiIsCisJSVdMX0RFQlVHX0NBTElCKHByaXYsICJtaW5fYXZlcmFnZV9ub2lzZSA9ICVkLCBhbnRlbm5hICVkXG4iLAogCQkJbWluX2F2ZXJhZ2Vfbm9pc2UsIG1pbl9hdmVyYWdlX25vaXNlX2FudGVubmFfaSk7CiAKLQlwcml2LT5jZmctPm9wcy0+dXRpbHMtPmdhaW5fY29tcHV0YXRpb24ocHJpdiwgYXZlcmFnZV9ub2lzZSwKLQkJbWluX2F2ZXJhZ2Vfbm9pc2VfYW50ZW5uYV9pLCBtaW5fYXZlcmFnZV9ub2lzZSk7CisJaWYgKHByaXYtPmNmZy0+b3BzLT51dGlscy0+Z2Fpbl9jb21wdXRhdGlvbikKKwkJcHJpdi0+Y2ZnLT5vcHMtPnV0aWxzLT5nYWluX2NvbXB1dGF0aW9uKHByaXYsIGF2ZXJhZ2Vfbm9pc2UsCisJCQltaW5fYXZlcmFnZV9ub2lzZV9hbnRlbm5hX2ksIG1pbl9hdmVyYWdlX25vaXNlKTsKIAogCS8qIFNvbWUgcG93ZXIgY2hhbmdlcyBtYXkgaGF2ZSBiZWVuIG1hZGUgZHVyaW5nIHRoZSBjYWxpYnJhdGlvbi4KIAkgKiBVcGRhdGUgYW5kIGNvbW1pdCB0aGUgUlhPTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmgKaW5kZXggMWFiZTg0Yi4uYjZjZWY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaAppbmRleCBiYTk5NzIwLi4yOWQ0MDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02OSwxMiArNjksMjAgQEAKICNpZm5kZWYgX19pd2xfY29tbWFuZHNfaF9fCiAjZGVmaW5lIF9faXdsX2NvbW1hbmRzX2hfXwogCitzdHJ1Y3QgaXdsX3ByaXY7CisKIC8qIHVDb2RlIHZlcnNpb24gY29udGFpbnMgNCB2YWx1ZXM6IE1ham9yL01pbm9yL0FQSS9TZXJpYWwgKi8KICNkZWZpbmUgSVdMX1VDT0RFX01BSk9SKHZlcikJKCgodmVyKSAmIDB4RkYwMDAwMDApID4+IDI0KQogI2RlZmluZSBJV0xfVUNPREVfTUlOT1IodmVyKQkoKCh2ZXIpICYgMHgwMEZGMDAwMCkgPj4gMTYpCiAjZGVmaW5lIElXTF9VQ09ERV9BUEkodmVyKQkoKCh2ZXIpICYgMHgwMDAwRkYwMCkgPj4gOCkKICNkZWZpbmUgSVdMX1VDT0RFX1NFUklBTCh2ZXIpCSgodmVyKSAmIDB4MDAwMDAwRkYpCiAKKworLyogVHggcmF0ZXMgKi8KKyNkZWZpbmUgSVdMX0NDS19SQVRFUwk0CisjZGVmaW5lIElXTF9PRkRNX1JBVEVTCTgKKyNkZWZpbmUgSVdMX01BWF9SQVRFUwkoSVdMX0NDS19SQVRFUyArIElXTF9PRkRNX1JBVEVTKQorCiBlbnVtIHsKIAlSRVBMWV9BTElWRSA9IDB4MSwKIAlSRVBMWV9FUlJPUiA9IDB4MiwKQEAgLTEzNiw5ICsxNDQsMTEgQEAKIAlXSE9fSVNfQVdBS0VfTk9USUZJQ0FUSU9OID0gMHg5NCwJLyogbm90IHVzZWQgKi8KIAogCS8qIE1pc2NlbGxhbmVvdXMgY29tbWFuZHMgKi8KKwlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5NSwKIAlRVUlFVF9OT1RJRklDQVRJT04gPSAweDk2LAkJLyogbm90IHVzZWQgKi8KIAlSRVBMWV9UWF9QV1JfVEFCTEVfQ01EID0gMHg5NywKLQlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EID0gMHg5OCwKKwlSRVBMWV9UWF9QT1dFUl9EQk1fQ01EX1YxID0gMHg5OCwJLyogb2xkIHZlcnNpb24gb2YgQVBJICovCisJVFhfQU5UX0NPTkZJR1VSQVRJT05fQ01EID0gMHg5OCwJLyogbm90IHVzZWQgKi8KIAlNRUFTVVJFX0FCT1JUX05PVElGSUNBVElPTiA9IDB4OTksCS8qIG5vdCB1c2VkICovCiAKIAkvKiBCbHVldG9vdGggZGV2aWNlIGNvZXhpc3RlbmNlIGNvbmZpZyBjb21tYW5kICovCkBAIC0yMTksNiArMjI5LDM3IEBACiAJdTggZGF0YVswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIKKyAqCisgKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX1NDQU5fQ01ELCBSRVBMWV9DSEFOTkVMX1NXSVRDSAorICoKKyAqIEVhY2ggZW50cnkgY29udGFpbnMgdHdvIHZhbHVlczoKKyAqIDEpICBEU1AgZ2FpbiAob3Igc29tZXRpbWVzIGNhbGxlZCBEU1AgYXR0ZW51YXRpb24pLiAgVGhpcyBpcyBhIGZpbmUtZ3JhaW5lZAorICogICAgIGxpbmVhciB2YWx1ZSB0aGF0IG11bHRpcGxpZXMgdGhlIG91dHB1dCBvZiB0aGUgZGlnaXRhbCBzaWduYWwgcHJvY2Vzc29yLAorICogICAgIGJlZm9yZSBiZWluZyBzZW50IHRvIHRoZSBhbmFsb2cgcmFkaW8uCisgKiAyKSAgUmFkaW8gZ2Fpbi4gIFRoaXMgc2V0cyB0aGUgYW5hbG9nIGdhaW4gb2YgdGhlIHJhZGlvIFR4IHBhdGguCisgKiAgICAgSXQgaXMgYSBjb2Fyc2VyIHNldHRpbmcsIGFuZCBiZWhhdmVzIGluIGEgbG9nYXJpdGhtaWMgKGRCKSBmYXNoaW9uLgorICoKKyAqIERyaXZlciBvYnRhaW5zIHZhbHVlcyBmcm9tIHN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHBvd2VyX2dhaW5fdGFibGVbXVtdLgorICovCitzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB7CisJdTggdHhfZ2FpbjsJCS8qIGdhaW4gZm9yIGFuYWxvZyByYWRpbyAqLworCXU4IGRzcF9hdHRlbjsJCS8qIGdhaW4gZm9yIERTUCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUKKyAqCisgKiBVc2VkIGluIFJFUExZX1RYX1BXUl9UQUJMRV9DTUQsIFJFUExZX0NIQU5ORUxfU1dJVENICisgKi8KK3N0cnVjdCBpd2wzOTQ1X3Bvd2VyX3Blcl9yYXRlIHsKKwl1OCByYXRlOwkJLyogcGxjcCAqLworCXN0cnVjdCBpd2wzOTQ1X3R4X3Bvd2VyIHRwYzsKKwl1OCByZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKioKICAqIGl3bGFnbiByYXRlX25fZmxhZ3MgYml0IGZpZWxkcwogICoKQEAgLTMwMCwxMSArMzQxLDEyIEBACiAgKiA1MzUwIGhhcyAzIHRyYW5zbWl0dGVycwogICogYml0MTQ6MTYKICAqLwotI2RlZmluZSBSQVRFX01DU19BTlRfUE9TICAgICAgMTQKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FfTVNLICAgIDB4MDQwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0JfTVNLICAgIDB4MDgwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0NfTVNLICAgIDB4MTAwMDAKLSNkZWZpbmUgUkFURV9NQ1NfQU5UX0FCQ19NU0sgIDB4MUMwMDAKKyNkZWZpbmUgUkFURV9NQ1NfQU5UX1BPUwkxNAorI2RlZmluZSBSQVRFX01DU19BTlRfQV9NU0sJMHgwNDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQl9NU0sJMHgwODAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQ19NU0sJMHgxMDAwMAorI2RlZmluZSBSQVRFX01DU19BTlRfQUJfTVNLCShSQVRFX01DU19BTlRfQV9NU0sgfCBSQVRFX01DU19BTlRfQl9NU0spCisjZGVmaW5lIFJBVEVfTUNTX0FOVF9BQkNfTVNLCShSQVRFX01DU19BTlRfQUJfTVNLIHwgUkFURV9NQ1NfQU5UX0NfTVNLKQogI2RlZmluZSBSQVRFX0FOVF9OVU0gMwogCiAjZGVmaW5lIFBPV0VSX1RBQkxFX05VTV9FTlRSSUVTCQkJMzMKQEAgLTQ5Miw4ICs1MzQsNiBAQAogCV9fbGUzMiBpc192YWxpZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0KLQogLyoKICAqIFJFUExZX0VSUk9SID0gMHgyIChyZXNwb25zZSBvbmx5LCBub3QgYSBjb21tYW5kKQogICovCkBAIC01MjUsNiArNTY1LDcgQEAKIAogCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX01TSwkJY3B1X3RvX2xlMTYoMHgxIDw8IDApCisjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX1BPUwkJKDApCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fVkFMSURfTVNLCQkJY3B1X3RvX2xlMTYoMHg3IDw8IDEpCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fVkFMSURfUE9TCQkJKDEpCiAjZGVmaW5lIFJYT05fUlhfQ0hBSU5fRk9SQ0VfU0VMX01TSwkJY3B1X3RvX2xlMTYoMHg3IDw8IDQpCkBAIC02MTEsNiArNjUyLDI2IEBACiAgKiAgICAgICAgaXNzdWUgYSBuZXcgUkVQTFlfVFhfUFdSX1RBQkxFX0NNRCBhZnRlciBlYWNoIFJFUExZX1JYT04gKDB4MTApLAogICogICAgICAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBSWE9OX0ZJTFRFUl9BU1NPQ19NU0sgaXMgc2V0LgogICovCisKK3N0cnVjdCBpd2wzOTQ1X3J4b25fY21kIHsKKwl1OCBub2RlX2FkZHJbNl07CisJX19sZTE2IHJlc2VydmVkMTsKKwl1OCBic3NpZF9hZGRyWzZdOworCV9fbGUxNiByZXNlcnZlZDI7CisJdTggd2xhcF9ic3NpZF9hZGRyWzZdOworCV9fbGUxNiByZXNlcnZlZDM7CisJdTggZGV2X3R5cGU7CisJdTggYWlyX3Byb3BhZ2F0aW9uOworCV9fbGUxNiByZXNlcnZlZDQ7CisJdTggb2ZkbV9iYXNpY19yYXRlczsKKwl1OCBjY2tfYmFzaWNfcmF0ZXM7CisJX19sZTE2IGFzc29jX2lkOworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgZmlsdGVyX2ZsYWdzOworCV9fbGUxNiBjaGFubmVsOworCV9fbGUxNiByZXNlcnZlZDU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bDQ5NjVfcnhvbl9jbWQgewogCXU4IG5vZGVfYWRkcls2XTsKIAlfX2xlMTYgcmVzZXJ2ZWQxOwpAQCAtNjU2LDYgKzcxNywyOCBAQAogCV9fbGUxNiByZXNlcnZlZDY7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyoKKyAqIFJFUExZX1JYT05fQVNTT0MgPSAweDExIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCisgKi8KK3N0cnVjdCBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIHsKKwlfX2xlMzIgZmxhZ3M7CisJX19sZTMyIGZpbHRlcl9mbGFnczsKKwl1OCBvZmRtX2Jhc2ljX3JhdGVzOworCXU4IGNja19iYXNpY19yYXRlczsKKwlfX2xlMTYgcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDQ5NjVfcnhvbl9hc3NvY19jbWQgeworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgZmlsdGVyX2ZsYWdzOworCXU4IG9mZG1fYmFzaWNfcmF0ZXM7CisJdTggY2NrX2Jhc2ljX3JhdGVzOworCXU4IG9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlczsKKwl1OCBvZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzOworCV9fbGUxNiByeF9jaGFpbl9zZWxlY3RfZmxhZ3M7CisJX19sZTE2IHJlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpd2w1MDAwX3J4b25fYXNzb2NfY21kIHsKIAlfX2xlMzIgZmxhZ3M7CiAJX19sZTMyIGZpbHRlcl9mbGFnczsKQEAgLTY3MSwyMCArNzU0LDYgQEAKIAlfX2xlMzIgcmVzZXJ2ZWQzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLS8qCi0gKiBSRVBMWV9SWE9OX0FTU09DID0gMHgxMSAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQotICovCi1zdHJ1Y3QgaXdsNDk2NV9yeG9uX2Fzc29jX2NtZCB7Ci0JX19sZTMyIGZsYWdzOwotCV9fbGUzMiBmaWx0ZXJfZmxhZ3M7Ci0JdTggb2ZkbV9iYXNpY19yYXRlczsKLQl1OCBjY2tfYmFzaWNfcmF0ZXM7Ci0JdTggb2ZkbV9odF9zaW5nbGVfc3RyZWFtX2Jhc2ljX3JhdGVzOwotCXU4IG9mZG1faHRfZHVhbF9zdHJlYW1fYmFzaWNfcmF0ZXM7Ci0JX19sZTE2IHJ4X2NoYWluX3NlbGVjdF9mbGFnczsKLQlfX2xlMTYgcmVzZXJ2ZWQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2RlZmluZSBJV0xfQ09OTl9NQVhfTElTVEVOX0lOVEVSVkFMCTEwCiAKIC8qCkBAIC03MDIsNiArNzcxLDE2IEBACiAvKgogICogUkVQTFlfQ0hBTk5FTF9TV0lUQ0ggPSAweDcyIChjb21tYW5kLCBoYXMgc2ltcGxlIGdlbmVyaWMgcmVzcG9uc2UpCiAgKi8KK3N0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfc3dpdGNoX2NtZCB7CisJdTggYmFuZDsKKwl1OCBleHBlY3RfYmVhY29uOworCV9fbGUxNiBjaGFubmVsOworCV9fbGUzMiByeG9uX2ZsYWdzOworCV9fbGUzMiByeG9uX2ZpbHRlcl9mbGFnczsKKwlfX2xlMzIgc3dpdGNoX3RpbWU7CisJc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9jaGFubmVsX3N3aXRjaF9jbWQgewogCXU4IGJhbmQ7CiAJdTggZXhwZWN0X2JlYWNvbjsKQEAgLTc4Myw2ICs4NjIsOCBAQAogI2RlZmluZQlJV0xfQVBfSUQJCTAKICNkZWZpbmUgSVdMX01VTFRJQ0FTVF9JRAkxCiAjZGVmaW5lCUlXTF9TVEFfSUQJCTIKKyNkZWZpbmUJSVdMMzk0NV9CUk9BRENBU1RfSUQJMjQKKyNkZWZpbmUgSVdMMzk0NV9TVEFUSU9OX0NPVU5UCTI1CiAjZGVmaW5lIElXTDQ5NjVfQlJPQURDQVNUX0lECTMxCiAjZGVmaW5lCUlXTDQ5NjVfU1RBVElPTl9DT1VOVAkzMgogI2RlZmluZSBJV0w1MDAwX0JST0FEQ0FTVF9JRAkxNQpAQCAtNzkxLDYgKzg3Miw4IEBACiAjZGVmaW5lCUlXTF9TVEFUSU9OX0NPVU5UCTMyIAkvKiBNQVgoMzk0NSw0OTY1KSovCiAjZGVmaW5lCUlXTF9JTlZBTElEX1NUQVRJT04gCTI1NQogCisjZGVmaW5lIFNUQV9GTEdfVFhfUkFURV9NU0sJCWNwdV90b19sZTMyKDEgPDwgMik7CisjZGVmaW5lIFNUQV9GTEdfUFdSX1NBVkVfTVNLCQljcHVfdG9fbGUzMigxIDw8IDgpOwogI2RlZmluZSBTVEFfRkxHX1BXUl9TQVZFX01TSwkJY3B1X3RvX2xlMzIoMSA8PCA4KTsKICNkZWZpbmUgU1RBX0ZMR19SVFNfTUlNT19QUk9UX01TSwljcHVfdG9fbGUzMigxIDw8IDE3KQogI2RlZmluZSBTVEFfRkxHX0FHR19NUERVXzhVU19NU0sJY3B1X3RvX2xlMzIoMSA8PCAxOCkKQEAgLTkwMSw2ICs5ODQsMzUgQEAKICAqICAgICAgICB1c2VkIGFzIEFQLCBvciBpbiBhbiBJQlNTIG5ldHdvcmssIGRyaXZlciBtdXN0IHNldCB1cCBzdGF0aW9uIHRhYmxlCiAgKiAgICAgICAgZW50cmllcyBmb3IgYWxsIFNUQXMgaW4gbmV0d29yaywgc3RhcnRpbmcgd2l0aCBpbmRleCBJV0xfU1RBX0lELgogICovCisKK3N0cnVjdCBpd2wzOTQ1X2FkZHN0YV9jbWQgeworCXU4IG1vZGU7CQkvKiAxOiBtb2RpZnkgZXhpc3RpbmcsIDA6IGFkZCBuZXcgc3RhdGlvbiAqLworCXU4IHJlc2VydmVkWzNdOworCXN0cnVjdCBzdGFfaWRfbW9kaWZ5IHN0YTsKKwlzdHJ1Y3QgaXdsNDk2NV9rZXlpbmZvIGtleTsKKwlfX2xlMzIgc3RhdGlvbl9mbGFnczsJCS8qIFNUQV9GTEdfKiAqLworCV9fbGUzMiBzdGF0aW9uX2ZsYWdzX21zazsJLyogU1RBX0ZMR18qICovCisKKwkvKiBiaXQgZmllbGQgdG8gZGlzYWJsZSAoMSkgb3IgZW5hYmxlICgwKSBUeCBmb3IgVHJhZmZpYyBJRCAoVElEKQorCSAqIGNvcnJlc3BvbmRpbmcgdG8gYml0IChlLmcuIGJpdCA1IGNvbnRyb2xzIFRJRCA1KS4KKwkgKiBTZXQgbW9kaWZ5X21hc2sgYml0IFNUQV9NT0RJRllfVElEX0RJU0FCTEVfVFggdG8gdXNlIHRoaXMgZmllbGQuICovCisJX19sZTE2IHRpZF9kaXNhYmxlX3R4OworCisJX19sZTE2IHJhdGVfbl9mbGFnczsKKworCS8qIFRJRCBmb3Igd2hpY2ggdG8gYWRkIGJsb2NrLWFjayBzdXBwb3J0LgorCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLworCXU4IGFkZF9pbW1lZGlhdGVfYmFfdGlkOworCisJLyogVElEIGZvciB3aGljaCB0byByZW1vdmUgYmxvY2stYWNrIHN1cHBvcnQuCisJICogU2V0IG1vZGlmeV9tYXNrIGJpdCBTVEFfTU9ESUZZX0RFTEJBX1RJRF9NU0sgdG8gdXNlIHRoaXMgZmllbGQuICovCisJdTggcmVtb3ZlX2ltbWVkaWF0ZV9iYV90aWQ7CisKKwkvKiBTdGFydGluZyBTZXF1ZW5jZSBOdW1iZXIgZm9yIGFkZGVkIGJsb2NrLWFjayBzdXBwb3J0LgorCSAqIFNldCBtb2RpZnlfbWFzayBiaXQgU1RBX01PRElGWV9BRERCQV9USURfTVNLIHRvIHVzZSB0aGlzIGZpZWxkLiAqLworCV9fbGUxNiBhZGRfaW1tZWRpYXRlX2JhX3NzbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXdsNDk2NV9hZGRzdGFfY21kIHsKIAl1OCBtb2RlOwkJLyogMTogbW9kaWZ5IGV4aXN0aW5nLCAwOiBhZGQgbmV3IHN0YXRpb24gKi8KIAl1OCByZXNlcnZlZFszXTsKQEAgLTEwNTQsNiArMTE2Niw0OCBAQAogI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfVFRBS19PSwkoMSA8PCA3KQogI2RlZmluZSBSWF9NUERVX1JFU19TVEFUVVNfREVDX0RPTkVfTVNLCSgweDgwMCkKIAorCitzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9zdGF0cyB7CisJdTggcGh5X2NvdW50OworCXU4IGlkOworCXU4IHJzc2k7CisJdTggYWdjOworCV9fbGUxNiBzaWdfYXZnOworCV9fbGUxNiBub2lzZV9kaWZmOworCXU4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfaGRyIHsKKwlfX2xlMTYgY2hhbm5lbDsKKwlfX2xlMTYgcGh5X2ZsYWdzOworCXU4IHJlc2VydmVkMTsKKwl1OCByYXRlOworCV9fbGUxNiBsZW47CisJdTggcGF5bG9hZFswXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzk0NV9yeF9mcmFtZV9lbmQgeworCV9fbGUzMiBzdGF0dXM7CisJX19sZTY0IHRpbWVzdGFtcDsKKwlfX2xlMzIgYmVhY29uX3RpbWVzdGFtcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogUkVQTFlfMzk0NV9SWCA9IDB4MWIgKHJlc3BvbnNlIG9ubHksIG5vdCBhIGNvbW1hbmQpCisgKgorICogTk9URTogIERPIE5PVCBkZXJlZmVyZW5jZSBmcm9tIGNhc3RzIHRvIHRoaXMgc3RydWN0dXJlCisgKiBJdCBpcyBwcm92aWRlZCBvbmx5IGZvciBjYWxjdWxhdGluZyBtaW5pbXVtIGRhdGEgc2V0IHNpemUuCisgKiBUaGUgYWN0dWFsIG9mZnNldHMgb2YgdGhlIGhkciBhbmQgZW5kIGFyZSBkeW5hbWljIGJhc2VkIG9uCisgKiBzdGF0cy5waHlfY291bnQKKyAqLworc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUgeworCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX3N0YXRzIHN0YXRzOworCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lX2hkciBoZHI7CisJc3RydWN0IGl3bDM5NDVfcnhfZnJhbWVfZW5kIGVuZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIElXTDM5X1JYX0ZSQU1FX1NJWkUJKDQgKyBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhfZnJhbWUpKQorCiAvKiBGaXhlZCAobm9uLWNvbmZpZ3VyYWJsZSkgcnggZGF0YSBmcm9tIHBoeSAqLwogCiAjZGVmaW5lIElXTDQ5X1JYX1JFU19QSFlfQ05UIDE0CkBAIC0xMjM0LDYgKzEzODgsODQgQEAKICNkZWZpbmUgVEtJUF9JQ1ZfTEVOIDQKIAogLyoKKyAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKKyAqLworCitzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgeworCS8qCisJICogTVBEVSBieXRlIGNvdW50OgorCSAqIE1BQyBoZWFkZXIgKDI0LzI2LzMwLzMyIGJ5dGVzKSArIDIgYnl0ZXMgcGFkIGlmIDI2LzMwIGhlYWRlciBzaXplLAorCSAqICsgOCBieXRlIElWIGZvciBDQ00gb3IgVEtJUCAobm90IHVzZWQgZm9yIFdFUCkKKwkgKiArIERhdGEgcGF5bG9hZAorCSAqICsgOC1ieXRlIE1JQyAobm90IHVzZWQgZm9yIENDTS9XRVApCisJICogTk9URTogIERvZXMgbm90IGluY2x1ZGUgVHggY29tbWFuZCBieXRlcywgcG9zdC1NQUMgcGFkIGJ5dGVzLAorCSAqICAgICAgICBNSUMgKENDTSkgOCBieXRlcywgSUNWIChXRVAvVEtJUC9DS0lQKSA0IGJ5dGVzLCBDUkMgNCBieXRlcy5pCisJICogUmFuZ2U6IDE0LTIzNDIgYnl0ZXMuCisJICovCisJX19sZTE2IGxlbjsKKworCS8qCisJICogTVBEVSBvciBNU0RVIGJ5dGUgY291bnQgZm9yIG5leHQgZnJhbWUuCisJICogVXNlZCBmb3IgZnJhZ21lbnRhdGlvbiBhbmQgYnVyc3RpbmcsIGJ1dCBub3QgMTFuIGFnZ3JlZ2F0aW9uLgorCSAqIFNhbWUgYXMgImxlbiIsIGJ1dCBmb3IgbmV4dCBmcmFtZS4gIFNldCB0byAwIGlmIG5vdCBhcHBsaWNhYmxlLgorCSAqLworCV9fbGUxNiBuZXh0X2ZyYW1lX2xlbjsKKworCV9fbGUzMiB0eF9mbGFnczsJLyogVFhfQ01EX0ZMR18qICovCisKKwl1OCByYXRlOworCisJLyogSW5kZXggb2YgcmVjaXBpZW50IHN0YXRpb24gaW4gdUNvZGUncyBzdGF0aW9uIHRhYmxlICovCisJdTggc3RhX2lkOworCXU4IHRpZF90c3BlYzsKKwl1OCBzZWNfY3RsOworCXU4IGtleVsxNl07CisJdW5pb24geworCQl1OCBieXRlWzhdOworCQlfX2xlMTYgd29yZFs0XTsKKwkJX19sZTMyIGR3WzJdOworCX0gdGtpcF9taWM7CisJX19sZTMyIG5leHRfZnJhbWVfaW5mbzsKKwl1bmlvbiB7CisJCV9fbGUzMiBsaWZlX3RpbWU7CisJCV9fbGUzMiBhdHRlbXB0OworCX0gc3RvcF90aW1lOworCXU4IHN1cHBfcmF0ZXNbMl07CisJdTggcnRzX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTAgKi8KKwl1OCBkYXRhX3JldHJ5X2xpbWl0OwkvKmJ5dGUgNTEgKi8KKwl1bmlvbiB7CisJCV9fbGUxNiBwbV9mcmFtZV90aW1lb3V0OworCQlfX2xlMTYgYXR0ZW1wdF9kdXJhdGlvbjsKKwl9IHRpbWVvdXQ7CisKKwkvKgorCSAqIER1cmF0aW9uIG9mIEVEQ0EgYnVyc3QgVHggT3Bwb3J0dW5pdHksIGluIDMyLXVzZWMgdW5pdHMuCisJICogU2V0IHRoaXMgaWYgdHhvcCB0aW1lIGlzIG5vdCBzcGVjaWZpZWQgYnkgSENDQSBwcm90b2NvbCAoZS5nLiBieSBBUCkuCisJICovCisJX19sZTE2IGRyaXZlcl90eG9wOworCisJLyoKKwkgKiBNQUMgaGVhZGVyIGdvZXMgaGVyZSwgZm9sbG93ZWQgYnkgMiBieXRlcyBwYWRkaW5nIGlmIE1BQyBoZWFkZXIKKwkgKiBsZW5ndGggaXMgMjYgb3IgMzAgYnl0ZXMsIGZvbGxvd2VkIGJ5IHBheWxvYWQgZGF0YQorCSAqLworCXU4IHBheWxvYWRbMF07CisJc3RydWN0IGllZWU4MDIxMV9oZHIgaGRyWzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBSRVBMWV9UWCA9IDB4MWMgKHJlc3BvbnNlKQorICovCitzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHsKKwl1OCBmYWlsdXJlX3J0czsKKwl1OCBmYWlsdXJlX2ZyYW1lOworCXU4IGJ0X2tpbGxfY291bnQ7CisJdTggcmF0ZTsKKwlfX2xlMzIgd2lyZWxlc3NfbWVkaWFfdGltZTsKKwlfX2xlMzIgc3RhdHVzOwkJLyogVFggc3RhdHVzICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCisvKgogICogNDk2NSB1Q29kZSB1cGRhdGVzIHRoZXNlIFR4IGF0dGVtcHQgY291bnQgdmFsdWVzIGluIGhvc3QgRFJBTS4KICAqIFVzZWQgZm9yIG1hbmFnaW5nIFR4IHJldHJpZXMgd2hlbiBleHBlY3RpbmcgYmxvY2stYWNrcy4KICAqIERyaXZlciBzaG91bGQgc2V0IHRoZXNlIGZpZWxkcyB0byAwLgpAQCAtMTI0NCw5ICsxNDc2LDYgQEAKIAlfX2xlMTYgcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLyoKLSAqIFJFUExZX1RYID0gMHgxYyAoY29tbWFuZCkKLSAqLwogc3RydWN0IGl3bF90eF9jbWQgewogCS8qCiAJICogTVBEVSBieXRlIGNvdW50OgpAQCAtMTU4NCw2ICsxODEzLDE0IEBACiAgKgogICogU2VlIGRldGFpbHMgdW5kZXIgIlRYUE9XRVIiIGluIGl3bC00OTY1LWh3LmguCiAgKi8KKworc3RydWN0IGl3bDM5NDVfdHhwb3dlcnRhYmxlX2NtZCB7CisJdTggYmFuZDsJCS8qIDA6IDUgR0h6LCAxOiAyLjQgR0h6ICovCisJdTggcmVzZXJ2ZWQ7CisJX19sZTE2IGNoYW5uZWw7CisJc3RydWN0IGl3bDM5NDVfcG93ZXJfcGVyX3JhdGUgcG93ZXJbSVdMX01BWF9SQVRFU107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bDQ5NjVfdHhwb3dlcnRhYmxlX2NtZCB7CiAJdTggYmFuZDsJCS8qIDA6IDUgR0h6LCAxOiAyLjQgR0h6ICovCiAJdTggcmVzZXJ2ZWQ7CkBAIC0xNTkxLDYgKzE4MjgsMzUgQEAKIAlzdHJ1Y3QgaXdsNDk2NV90eF9wb3dlcl9kYiB0eF9wb3dlcjsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisKKy8qKgorICogc3RydWN0IGl3bDM5NDVfcmF0ZV9zY2FsaW5nX2NtZCAtIFJhdGUgU2NhbGluZyBDb21tYW5kICYgUmVzcG9uc2UKKyAqCisgKiBSRVBMWV9SQVRFX1NDQUxFID0gMHg0NyAoY29tbWFuZCwgaGFzIHNpbXBsZSBnZW5lcmljIHJlc3BvbnNlKQorICoKKyAqIE5PVEU6IFRoZSB0YWJsZSBvZiByYXRlcyBwYXNzZWQgdG8gdGhlIHVDb2RlIHZpYSB0aGUKKyAqIFJBVEVfU0NBTEUgY29tbWFuZCBzZXRzIHVwIHRoZSBjb3JyZXNwb25kaW5nIG9yZGVyIG9mCisgKiByYXRlcyB1c2VkIGZvciBhbGwgcmVsYXRlZCBjb21tYW5kcywgaW5jbHVkaW5nIHJhdGUKKyAqIG1hc2tzLCBldGMuCisgKgorICogRm9yIGV4YW1wbGUsIGlmIHlvdSBzZXQgOU1CIChQTENQIDB4MGYpIGFzIHRoZSBmaXJzdAorICogcmF0ZSBpbiB0aGUgcmF0ZSB0YWJsZSwgdGhlIGJpdCBtYXNrIGZvciB0aGF0IHJhdGUKKyAqIHdoZW4gcGFzc2VkIHRocm91Z2ggb2ZkbV9iYXNpY19yYXRlcyBvbiB0aGUgUkVQTFlfUlhPTgorICogY29tbWFuZCB3b3VsZCBiZSBiaXQgMCAoMSA8PCAwKQorICovCitzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB7CisJX19sZTE2IHJhdGVfbl9mbGFnczsKKwl1OCB0cnlfY250OworCXU4IG5leHRfcmF0ZV9pbmRleDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfY21kIHsKKwl1OCB0YWJsZV9pZDsKKwl1OCByZXNlcnZlZFszXTsKKwlzdHJ1Y3QgaXdsMzk0NV9yYXRlX3NjYWxpbmdfaW5mbyB0YWJsZVtJV0xfTUFYX1JBVEVTXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisKIC8qUlNfTkVXX0FQSTogb25seSBUTENfUlRTIHJlbWFpbnMgYW5kIG1vdmVkIHRvIGJpdCAwICovCiAjZGVmaW5lICBMSU5LX1FVQUxfRkxBR1NfU0VUX1NUQV9UTENfUlRTX01TSwkoMSA8PCAwKQogCkBAIC0yMDQ0LDE1ICsyMzEwLDIzIEBACiAgKi8KICNkZWZpbmUgSVdMX1BPV0VSX1ZFQ19TSVpFIDUKIAotI2RlZmluZSBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSwljcHVfdG9fbGUxNigxIDw8IDApCi0jZGVmaW5lIElXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLCQljcHVfdG9fbGUxNigxIDw8IDIpCi0jZGVmaW5lIElXTF9QT1dFUl9QQ0lfUE1fTVNLCQkJY3B1X3RvX2xlMTYoMSA8PCAzKQotI2RlZmluZSBJV0xfUE9XRVJfRkFTVF9QRAkJCWNwdV90b19sZTE2KDEgPDwgNCkKKyNkZWZpbmUgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sJY3B1X3RvX2xlMTYoQklUKDApKQorI2RlZmluZSBJV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSwkJY3B1X3RvX2xlMTYoQklUKDIpKQorI2RlZmluZSBJV0xfUE9XRVJfUENJX1BNX01TSwkJCWNwdV90b19sZTE2KEJJVCgzKSkKKyNkZWZpbmUgSVdMX1BPV0VSX0ZBU1RfUEQJCQljcHVfdG9fbGUxNihCSVQoNCkpCisKK3N0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIHsKKwlfX2xlMTYgZmxhZ3M7CisJdTggcmVzZXJ2ZWRbMl07CisJX19sZTMyIHJ4X2RhdGFfdGltZW91dDsKKwlfX2xlMzIgdHhfZGF0YV90aW1lb3V0OworCV9fbGUzMiBzbGVlcF9pbnRlcnZhbFtJV0xfUE9XRVJfVkVDX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgewogCV9fbGUxNiBmbGFnczsKLQl1OCBrZWVwX2FsaXZlX3NlY29uZHM7Ci0JdTggZGVidWdfZmxhZ3M7CisJdTgga2VlcF9hbGl2ZV9zZWNvbmRzOwkJLyogMzk0NSByZXNlcnZlZCAqLworCXU4IGRlYnVnX2ZsYWdzOwkJCS8qIDM5NDUgcmVzZXJ2ZWQgKi8KIAlfX2xlMzIgcnhfZGF0YV90aW1lb3V0OwogCV9fbGUzMiB0eF9kYXRhX3RpbWVvdXQ7CiAJX19sZTMyIHNsZWVwX2ludGVydmFsW0lXTF9QT1dFUl9WRUNfU0laRV07CkBAIC0yMTQzLDYgKzI0MTcsMjYgQEAKICAqICAgICBwYXNzaXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCiAgKiAgICAgYWN0aXZlX2R3ZWxsIDwgbWF4X291dF90aW1lCiAgKi8KKworLyogRklYTUU6IHJlbmFtZSB0byBBUDEsIHJlbW92ZSB0cGMgKi8KK3N0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCB7CisJLyoKKwkgKiB0eXBlIGlzIGRlZmluZWQgYXM6CisJICogMDowIDEgPSBhY3RpdmUsIDAgPSBwYXNzaXZlCisJICogMTo0IFNTSUQgZGlyZWN0IGJpdCBtYXA7IGlmIGEgYml0IGlzIHNldCwgdGhlbiBjb3JyZXNwb25kaW5nCisJICogICAgIFNTSUQgSUUgaXMgdHJhbnNtaXR0ZWQgaW4gcHJvYmUgcmVxdWVzdC4KKwkgKiA1OjcgcmVzZXJ2ZWQKKwkgKi8KKwl1OCB0eXBlOworCXU4IGNoYW5uZWw7CS8qIGJhbmQgaXMgc2VsZWN0ZWQgYnkgaXdsMzk0NV9zY2FuX2NtZCAiZmxhZ3MiIGZpZWxkICovCisJc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOworCV9fbGUxNiBhY3RpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCA1LTUwICovCisJX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgdTggdHlwZSAqLworI2RlZmluZSBJV0wzOV9TQ0FOX1BST0JFX01BU0sobikgKChCSVQobikgfCAoQklUKG4pIC0gQklUKDEpKSkpCisKIHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsIHsKIAkvKgogCSAqIHR5cGUgaXMgZGVmaW5lZCBhczoKQEAgLTIxNTksNiArMjQ1Myw5IEBACiAJX19sZTE2IHBhc3NpdmVfZHdlbGw7CS8qIGluIDEwMjQtdVNlYyBUVSAodGltZSB1bml0cyksIHR5cCAyMC01MDAgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiBzZXQgbnVtYmVyIG9mIGRpcmVjdCBwcm9iZXMgX19sZTMyIHR5cGUgKi8KKyNkZWZpbmUgSVdMX1NDQU5fUFJPQkVfTUFTSyhuKSAJY3B1X3RvX2xlMzIoKEJJVChuKSB8IChCSVQobikgLSBCSVQoMSkpKSkKKwogLyoqCiAgKiBzdHJ1Y3QgaXdsX3NzaWRfaWUgLSBkaXJlY3RlZCBzY2FuIG5ldHdvcmsgaW5mb3JtYXRpb24gZWxlbWVudAogICoKQEAgLTIxNzIsNiArMjQ2OSw3IEBACiAJdTggc3NpZFszMl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBQUk9CRV9PUFRJT05fTUFYX0FQSTEJCTB4NAogI2RlZmluZSBQUk9CRV9PUFRJT05fTUFYICAgICAgICAJMHgxNAogI2RlZmluZSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFCWNwdV90b19sZTMyKDB4RkZGRkZGRkYpCiAjZGVmaW5lIElXTF9HT09EX0NSQ19USAkJCWNwdV90b19sZTE2KDEpCkBAIC0yMjI5LDYgKzI1MjcsNTEgQEAKICAqIFRvIGF2b2lkIHVDb2RlIGVycm9ycywgc2VlIHRpbWluZyByZXN0cmljdGlvbnMgZGVzY3JpYmVkIHVuZGVyCiAgKiBzdHJ1Y3QgaXdsX3NjYW5fY2hhbm5lbC4KICAqLworCitzdHJ1Y3QgaXdsMzk0NV9zY2FuX2NtZCB7CisJX19sZTE2IGxlbjsKKwl1OCByZXNlcnZlZDA7CisJdTggY2hhbm5lbF9jb3VudDsJLyogIyBjaGFubmVscyBpbiBjaGFubmVsIGxpc3QgKi8KKwlfX2xlMTYgcXVpZXRfdGltZTsJLyogZHdlbGwgb25seSB0aGlzICMgbWlsbGlzZWNzIG9uIHF1aWV0IGNoYW5uZWwKKwkJCQkgKiAob25seSBmb3IgYWN0aXZlIHNjYW4pICovCisJX19sZTE2IHF1aWV0X3BsY3BfdGg7CS8qIHF1aWV0IGNobmwgaXMgPCB0aGlzICMgcGt0cyAodHlwLiAxKSAqLworCV9fbGUxNiBnb29kX0NSQ190aDsJLyogcGFzc2l2ZSAtPiBhY3RpdmUgcHJvbW90aW9uIHRocmVzaG9sZCAqLworCV9fbGUxNiByZXNlcnZlZDE7CisJX19sZTMyIG1heF9vdXRfdGltZTsJLyogbWF4IHVzZWMgdG8gYmUgYXdheSBmcm9tIGFzc29jaWF0ZWQgKHNlcnZpY2UpCisJCQkJICogY2hhbm5lbCAqLworCV9fbGUzMiBzdXNwZW5kX3RpbWU7CS8qIHBhdXNlIHNjYW4gdGhpcyBsb25nIChpbiAiZXh0ZW5kZWQgYmVhY29uCisJCQkJICogZm9ybWF0Iikgd2hlbiByZXR1cm5pbmcgdG8gc2VydmljZSBjaGFubmVsOgorCQkJCSAqIDM5NDU7IDMxOjI0ICMgYmVhY29ucywgMTk6MCBhZGRpdGlvbmFsIHVzZWMsCisJCQkJICogNDk2NTsgMzE6MjIgIyBiZWFjb25zLCAyMTowIGFkZGl0aW9uYWwgdXNlYy4KKwkJCQkgKi8KKwlfX2xlMzIgZmxhZ3M7CQkvKiBSWE9OX0ZMR18qICovCisJX19sZTMyIGZpbHRlcl9mbGFnczsJLyogUlhPTl9GSUxURVJfKiAqLworCisJLyogRm9yIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBmb3IgcGFzc2l2ZSBzY2FucykuCisJICogRG9lcyBub3QgaW5jbHVkZSBwYXlsb2FkLiAgTXVzdCBzcGVjaWZ5IFR4IHJhdGU7IG5vIHJhdGUgc2NhbGluZy4gKi8KKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHhfY21kOworCisJLyogRm9yIGRpcmVjdGVkIGFjdGl2ZSBzY2FucyAoc2V0IHRvIGFsbC0wcyBvdGhlcndpc2UpICovCisJc3RydWN0IGl3bF9zc2lkX2llIGRpcmVjdF9zY2FuW1BST0JFX09QVElPTl9NQVhfQVBJMV07CisKKwkvKgorCSAqIFByb2JlIHJlcXVlc3QgZnJhbWUsIGZvbGxvd2VkIGJ5IGNoYW5uZWwgbGlzdC4KKwkgKgorCSAqIFNpemUgb2YgcHJvYmUgcmVxdWVzdCBmcmFtZSBpcyBzcGVjaWZpZWQgYnkgYnl0ZSBjb3VudCBpbiB0eF9jbWQuCisJICogQ2hhbm5lbCBsaXN0IGZvbGxvd3MgaW1tZWRpYXRlbHkgYWZ0ZXIgcHJvYmUgcmVxdWVzdCBmcmFtZS4KKwkgKiBOdW1iZXIgb2YgY2hhbm5lbHMgaW4gbGlzdCBpcyBzcGVjaWZpZWQgYnkgY2hhbm5lbF9jb3VudC4KKwkgKiBFYWNoIGNoYW5uZWwgaW4gbGlzdCBpcyBvZiB0eXBlOgorCSAqCisJICogc3RydWN0IGl3bDM5NDVfc2Nhbl9jaGFubmVsIGNoYW5uZWxzWzBdOworCSAqCisJICogTk9URTogIE9ubHkgb25lIGJhbmQgb2YgY2hhbm5lbHMgY2FuIGJlIHNjYW5uZWQgcGVyIHBhc3MuICBZb3UKKwkgKiBtdXN0IG5vdCBtaXggMi40R0h6IGNoYW5uZWxzIGFuZCA1LjJHSHogY2hhbm5lbHMsIGFuZCB5b3UgbXVzdCB3YWl0CisJICogZm9yIG9uZSBzY2FuIHRvIGNvbXBsZXRlIChpLmUuIHJlY2VpdmUgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04pCisJICogYmVmb3JlIHJlcXVlc3RpbmcgYW5vdGhlciBzY2FuLgorCSAqLworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9zY2FuX2NtZCB7CiAJX19sZTE2IGxlbjsKIAl1OCByZXNlcnZlZDA7CkBAIC0yMzM2LDYgKzI2NzksMTQgQEAKIC8qCiAgKiBCRUFDT05fTk9USUZJQ0FUSU9OID0gMHg5MCAobm90aWZpY2F0aW9uIG9ubHksIG5vdCBhIGNvbW1hbmQpCiAgKi8KKworc3RydWN0IGl3bDM5NDVfYmVhY29uX25vdGlmIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIGJlYWNvbl9ub3RpZnlfaGRyOworCV9fbGUzMiBsb3dfdHNmOworCV9fbGUzMiBoaWdoX3RzZjsKKwlfX2xlMzIgaWJzc19tZ3Jfc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpd2w0OTY1X2JlYWNvbl9ub3RpZiB7CiAJc3RydWN0IGl3bDQ5NjVfdHhfcmVzcCBiZWFjb25fbm90aWZ5X2hkcjsKIAlfX2xlMzIgbG93X3RzZjsKQEAgLTIzNDYsNiArMjY5NywxNSBAQAogLyoKICAqIFJFUExZX1RYX0JFQUNPTiA9IDB4OTEgKGNvbW1hbmQsIGhhcyBzaW1wbGUgZ2VuZXJpYyByZXNwb25zZSkKICAqLworCitzdHJ1Y3QgaXdsMzk0NV90eF9iZWFjb25fY21kIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgdHg7CisJX19sZTE2IHRpbV9pZHg7CisJdTggdGltX3NpemU7CisJdTggcmVzZXJ2ZWQxOworCXN0cnVjdCBpZWVlODAyMTFfaGRyIGZyYW1lWzBdOwkvKiBiZWFjb24gZnJhbWUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXdsX3R4X2JlYWNvbl9jbWQgewogCXN0cnVjdCBpd2xfdHhfY21kIHR4OwogCV9fbGUxNiB0aW1faWR4OwpAQCAtMjM4Miw2ICsyNzQyLDc2IEBACiAKIC8qIHN0YXRpc3RpY3MgY29tbWFuZCByZXNwb25zZSAqLwogCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9waHkgeworCV9fbGUzMiBpbmFfY250OworCV9fbGUzMiBmaW5hX2NudDsKKwlfX2xlMzIgcGxjcF9lcnI7CisJX19sZTMyIGNyYzMyX2VycjsKKwlfX2xlMzIgb3ZlcnJ1bl9lcnI7CisJX19sZTMyIGVhcmx5X292ZXJydW5fZXJyOworCV9fbGUzMiBjcmMzMl9nb29kOworCV9fbGUzMiBmYWxzZV9hbGFybV9jbnQ7CisJX19sZTMyIGZpbmFfc3luY19lcnJfY250OworCV9fbGUzMiBzZmRfdGltZW91dDsKKwlfX2xlMzIgZmluYV90aW1lb3V0OworCV9fbGUzMiB1bnJlc3BvbmRlZF9ydHM7CisJX19sZTMyIHJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuOworCV9fbGUzMiBzZW50X2Fja19jbnQ7CisJX19sZTMyIHNlbnRfY3RzX2NudDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9ub25fcGh5IHsKKwlfX2xlMzIgYm9ndXNfY3RzOwkvKiBDVFMgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIENUUyAqLworCV9fbGUzMiBib2d1c19hY2s7CS8qIEFDSyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQUNLICovCisJX19sZTMyIG5vbl9ic3NpZF9mcmFtZXM7CS8qIG51bWJlciBvZiBmcmFtZXMgd2l0aCBCU1NJRCB0aGF0CisJCQkJCSAqIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBTVEEgQlNTSUQgKi8KKwlfX2xlMzIgZmlsdGVyZWRfZnJhbWVzOwkvKiBjb3VudCBmcmFtZXMgdGhhdCB3ZXJlIGR1bXBlZCBpbiB0aGUKKwkJCQkgKiBmaWx0ZXJpbmcgcHJvY2VzcyAqLworCV9fbGUzMiBub25fY2hhbm5lbF9iZWFjb25zOwkvKiBiZWFjb25zIHdpdGggb3VyIGJzcyBpZCBidXQgbm90IG9uCisJCQkJCSAqIG91ciBzZXJ2aW5nIGNoYW5uZWwgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeCB7CisJc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnhfcGh5IG9mZG07CisJc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfcnhfcGh5IGNjazsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeF9ub25fcGh5IGdlbmVyYWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfdHggeworCV9fbGUzMiBwcmVhbWJsZV9jbnQ7CisJX19sZTMyIHJ4X2RldGVjdGVkX2NudDsKKwlfX2xlMzIgYnRfcHJpb19kZWZlcl9jbnQ7CisJX19sZTMyIGJ0X3ByaW9fa2lsbF9jbnQ7CisJX19sZTMyIGZld19ieXRlc19jbnQ7CisJX19sZTMyIGN0c190aW1lb3V0OworCV9fbGUzMiBhY2tfdGltZW91dDsKKwlfX2xlMzIgZXhwZWN0ZWRfYWNrX2NudDsKKwlfX2xlMzIgYWN0dWFsX2Fja19jbnQ7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHN0YXRpc3RpY3NfZGJnIHsKKwlfX2xlMzIgYnVyc3RfY2hlY2s7CisJX19sZTMyIGJ1cnN0X2NvdW50OworCV9fbGUzMiByZXNlcnZlZFs0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgeworCV9fbGUzMiB0eF9vbl9hOworCV9fbGUzMiB0eF9vbl9iOworCV9fbGUzMiBleGVjX3RpbWU7CisJX19sZTMyIHByb2JlX3RpbWU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGl3bDM5X3N0YXRpc3RpY3NfZ2VuZXJhbCB7CisJX19sZTMyIHRlbXBlcmF0dXJlOworCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyBkYmc7CisJX19sZTMyIHNsZWVwX3RpbWU7CisJX19sZTMyIHNsb3RzX291dDsKKwlfX2xlMzIgc2xvdHNfaWRsZTsKKwlfX2xlMzIgdHRsX3RpbWVzdGFtcDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19kaXYgZGl2OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSB7CiAJX19sZTMyIGluYV9jbnQ7CiAJX19sZTMyIGZpbmFfY250OwpAQCAtMjQxOCw3ICsyODQ4LDcgQEAKIAlfX2xlMzIgcmVzZXJ2ZWQyOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMigxKQorI2RlZmluZSBJTlRFUkZFUkVOQ0VfREFUQV9BVkFJTEFCTEUgICAgICBjcHVfdG9fbGUzMigxKQogCiBzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5IHsKIAlfX2xlMzIgYm9ndXNfY3RzOwkvKiBDVFMgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIENUUyAqLwpAQCAtMjQ5MywxMSArMjkyMyw2IEBACiAJc3RydWN0IHN0YXRpc3RpY3NfdHhfbm9uX3BoeV9hZ2cgYWdnOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBzdGF0aXN0aWNzX2RiZyB7Ci0JX19sZTMyIGJ1cnN0X2NoZWNrOwotCV9fbGUzMiBidXJzdF9jb3VudDsKLQlfX2xlMzIgcmVzZXJ2ZWRbNF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHN0YXRpc3RpY3NfZGl2IHsKIAlfX2xlMzIgdHhfb25fYTsKQEAgLTI1NjEsNiArMjk4NiwxNCBAQAogICovCiAjZGVmaW5lIFNUQVRJU1RJQ1NfUkVQTFlfRkxHX0JBTkRfMjRHX01TSyAgICAgICAgIGNwdV90b19sZTMyKDB4MikKICNkZWZpbmUgU1RBVElTVElDU19SRVBMWV9GTEdfRkFUX01PREVfTVNLICAgICAgICAgY3B1X3RvX2xlMzIoMHg4KQorCitzdHJ1Y3QgaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzIHsKKwlfX2xlMzIgZmxhZzsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19yeCByeDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc190eCB0eDsKKwlzdHJ1Y3QgaXdsMzlfc3RhdGlzdGljc19nZW5lcmFsIGdlbmVyYWw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIHsKIAlfX2xlMzIgZmxhZzsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeCByeDsKQEAgLTMwMTIsNiArMzQ0NSwxMCBAQAogCV9fbGUzMiBsZW47CiAJc3RydWN0IGl3bF9jbWRfaGVhZGVyIGhkcjsKIAl1bmlvbiB7CisJCXN0cnVjdCBpd2wzOTQ1X3J4X2ZyYW1lIHJ4X2ZyYW1lOworCQlzdHJ1Y3QgaXdsMzk0NV90eF9yZXNwIHR4X3Jlc3A7CisJCXN0cnVjdCBpd2wzOTQ1X2JlYWNvbl9ub3RpZiBiZWFjb25fc3RhdHVzOworCiAJCXN0cnVjdCBpd2xfYWxpdmVfcmVzcCBhbGl2ZV9mcmFtZTsKIAkJc3RydWN0IGl3bF9zcGVjdHJ1bV9ub3RpZmljYXRpb24gc3BlY3RydW1fbm90aWY7CiAJCXN0cnVjdCBpd2xfY3NhX25vdGlmaWNhdGlvbiBjc2Ffbm90aWY7CkBAIC0zMDI5LDYgKzM0NjYsNiBAQAogCX0gdTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi1pbnQgaXdsX2Fnbl9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3J4b25fY21kICpyeG9uKTsKK2ludCBpd2xfYWduX2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKICNlbmRpZgkJCQkvKiBfX2l3bF9jb21tYW5kc19oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYwppbmRleCA3M2Q3OTczLi5jNTRmYjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCkBAIC0xNzAsNyArMTcxLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9CiAJCWllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGl3bF9wcml2KSwgaHdfb3BzKTsKIAlpZiAoaHcgPT0gTlVMTCkgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW4gbm90IGFsbG9jYXRlIG5ldHdvcmsgZGV2aWNlXG4iLAorCQkgICAgICAgY2ZnLT5uYW1lKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yMTAsNyArMjEyLDcgQEAKIAlpZiAoIXJ4cS0+YmQpIHsKIAkJcmV0ID0gaXdsX3J4X3F1ZXVlX2FsbG9jKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFJ4IHF1ZXVlXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFJ4IHF1ZXVlXG4iKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfSBlbHNlCkBAIC0yMzgsNiArMjQwLDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9od19uaWNfaW5pdCk7CiAKKy8qCisgKiBRb1MgIHN1cHBvcnQKKyovCit2b2lkIGl3bF9hY3RpdmF0ZV9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBmb3JjZSkKK3sKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgPSAwOworCisJaWYgKHByaXYtPnFvc19kYXRhLnFvc19jYXAucV9BUC5xdWV1ZV9yZXF1ZXN0ICYmCisJICAgICFwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnFfQVAudHhvcF9yZXF1ZXN0KQorCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9CisJCQlRT1NfUEFSQU1fRkxHX1RYT1BfVFlQRV9NU0s7CisJaWYgKHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpCisJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KKwkJCVFPU19QQVJBTV9GTEdfVVBEQVRFX0VEQ0FfTVNLOworCisJaWYgKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0KQorCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzIHw9IFFPU19QQVJBTV9GTEdfVEdOX01TSzsKKworCWlmIChmb3JjZSB8fCBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgeworCQlJV0xfREVCVUdfUU9TKHByaXYsICJzZW5kIFFvUyBjbWQgd2l0aCBRb3MgYWN0aXZlPSVkIEZMQUdTPTB4JVhcbiIsCisJCQkJcHJpdi0+cW9zX2RhdGEucW9zX2FjdGl2ZSwKKwkJCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzKTsKKworCQlpd2xfc2VuZF9jbWRfcGR1X2FzeW5jKHByaXYsIFJFUExZX1FPU19QQVJBTSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfcW9zcGFyYW1fY21kKSwKKwkJCQkgICAgICAgJnByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybSwgTlVMTCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfYWN0aXZhdGVfcW9zKTsKKwogdm9pZCBpd2xfcmVzZXRfcW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MTYgY3dfbWluID0gMTU7CkBAIC0zMjEsNyArMzU2LDcgQEAKIAkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5yZXNlcnZlZDEgPSAwOwogCQl9CiAJfQotCUlXTF9ERUJVR19RT1MoInNldCBRb1MgdG8gZGVmYXVsdCBcbiIpOworCUlXTF9ERUJVR19RT1MocHJpdiwgInNldCBRb1MgdG8gZGVmYXVsdCBcbiIpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQpAQCAtNDAyLDEwICs0MzcsMTEgQEAKIAl9CiB9CiAKKwogLyoqCiAgKiBpd2xjb3JlX2luaXRfZ2VvcyAtIEluaXRpYWxpemUgbWFjODAyMTEncyBnZW8vY2hhbm5lbCBpbmZvIGJhc2VkIGZyb20gZWVwcm9tCiAgKi8KLXN0YXRpYyBpbnQgaXdsY29yZV9pbml0X2dlb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bGNvcmVfaW5pdF9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2g7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CkBAIC00MTYsNyArNDUyLDcgQEAKIAogCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzIHx8CiAJICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkdlb2dyYXBoeSBtb2RlcyBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJHZW9ncmFwaHkgbW9kZXMgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOwogCQlzZXRfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTQ1Nyw4ICs0OTMsNiBAQAogCXByaXYtPmllZWVfY2hhbm5lbHMgPSBjaGFubmVsczsKIAlwcml2LT5pZWVlX3JhdGVzID0gcmF0ZXM7CiAKLQlpd2xjb3JlX2luaXRfaHdfcmF0ZXMocHJpdiwgcmF0ZXMpOwotCiAJZm9yIChpID0gMDsgIGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKIAkJY2ggPSAmcHJpdi0+Y2hhbm5lbF9pbmZvW2ldOwogCkBAIC01MDAsNyArNTM0LDcgQEAKIAkJLyogU2F2ZSBmbGFncyBmb3IgcmVnIGRvbWFpbiB1c2FnZSAqLwogCQlnZW9fY2gtPm9yaWdfZmxhZ3MgPSBnZW9fY2gtPmZsYWdzOwogCi0JCUlXTF9ERUJVR19JTkZPKCJDaGFubmVsICVkIEZyZXE9JWRbJXNHSHpdICVzIGZsYWc9MHglWFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoYW5uZWwgJWQgRnJlcT0lZFslc0dIel0gJXMgZmxhZz0weCVYXG4iLAogCQkJCWNoLT5jaGFubmVsLCBnZW9fY2gtPmNlbnRlcl9mcmVxLAogCQkJCWlzX2NoYW5uZWxfYV9iYW5kKGNoKSA/ICAiNS4yIiA6ICIyLjQiLAogCQkJCWdlb19jaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCA/CkBAIC01MTAsMzMgKzU0NCwzMyBAQAogCiAJaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCiAJICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgewotCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiBJbmNvcnJlY3RseSBkZXRlY3RlZCBCRyBjYXJkIGFzIEFCRy4gIFBsZWFzZSBzZW5kICIKLQkJICAgICAgICJ5b3VyIFBDSSBJRCAweCUwNFg6MHglMDRYIHRvIG1haW50YWluZXIuXG4iLAotCQkgICAgICAgcHJpdi0+cGNpX2Rldi0+ZGV2aWNlLCBwcml2LT5wY2lfZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJSVdMX0lORk8ocHJpdiwgIkluY29ycmVjdGx5IGRldGVjdGVkIEJHIGNhcmQgYXMgQUJHLiAiCisJCQkiUGxlYXNlIHNlbmQgeW91ciBQQ0kgSUQgMHglMDRYOjB4JTA0WCB0byBtYWludGFpbmVyLlxuIiwKKwkJCSAgIHByaXYtPnBjaV9kZXYtPmRldmljZSwKKwkJCSAgIHByaXYtPnBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2UpOwogCQlwcml2LT5jZmctPnNrdSAmPSB+SVdMX1NLVV9BOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkgICAgICAgIjogVHVuYWJsZSBjaGFubmVsczogJWQgODAyLjExYmcsICVkIDgwMi4xMWEgY2hhbm5lbHNcbiIsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMpOwotCisJSVdMX0lORk8ocHJpdiwgIlR1bmFibGUgY2hhbm5lbHM6ICVkIDgwMi4xMWJnLCAlZCA4MDIuMTFhIGNoYW5uZWxzXG4iLAorCQkgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzLAorCQkgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKTsKIAogCXNldF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChpd2xjb3JlX2luaXRfZ2Vvcyk7CiAKIC8qCiAgKiBpd2xjb3JlX2ZyZWVfZ2VvcyAtIHVuZG8gYWxsb2NhdGlvbnMgaW4gaXdsY29yZV9pbml0X2dlb3MKICAqLwotc3RhdGljIHZvaWQgaXdsY29yZV9mcmVlX2dlb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KQordm9pZCBpd2xjb3JlX2ZyZWVfZ2VvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJa2ZyZWUocHJpdi0+aWVlZV9jaGFubmVscyk7CiAJa2ZyZWUocHJpdi0+aWVlZV9yYXRlcyk7CiAJY2xlYXJfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bGNvcmVfZnJlZV9nZW9zKTsKIAogc3RhdGljIGJvb2wgaXNfc2luZ2xlX3J4X3N0cmVhbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CkBAIC01ODcsNiArNjIxLDE2NyBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfaXNfZmF0X3R4X2FsbG93ZWQpOwogCit2b2lkIGl3bF9zZXRfcnhvbl9od2NyeXB0byhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBod19kZWNyeXB0KQoreworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJaWYgKGh3X2RlY3J5cHQpCisJCXJ4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfRElTX0RFQ1JZUFRfTVNLOworCWVsc2UKKwkJcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSzsKKworfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X3J4b25faHdjcnlwdG8pOworCisvKioKKyAqIGl3bF9jaGVja19yeG9uX2NtZCAtIHZhbGlkYXRlIFJYT04gc3RydWN0dXJlIGlzIHZhbGlkCisgKgorICogTk9URTogIFRoaXMgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGR1cmluZyBkZXZlbG9wbWVudCBhbmQgY2FuIGV2ZW50dWFsbHkKKyAqIGJlICNpZmRlZidkIG91dCBvbmNlIHRoZSBkcml2ZXIgaXMgc3RhYmxlIGFuZCBmb2xrcyBhcmVuJ3QgYWN0aXZlbHkKKyAqIG1ha2luZyBjaGFuZ2VzCisgKi8KK2ludCBpd2xfY2hlY2tfcnhvbl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCBlcnJvciA9IDA7CisJaW50IGNvdW50ZXIgPSAxOworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJaWYgKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7CisJCWVycm9yIHw9IGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzICYKKwkJCQkoUlhPTl9GTEdfVEdKX05BUlJPV19CQU5EX01TSyB8CisJCQkJIFJYT05fRkxHX1JBREFSX0RFVEVDVF9NU0spKTsKKwkJaWYgKGVycm9yKQorCQkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIDI0RyBmaWVsZHMgJWQgfCAlZFxuIiwKKwkJCQkgICAgY291bnRlcisrLCBlcnJvcik7CisJfSBlbHNlIHsKKwkJZXJyb3IgfD0gKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spID8KKwkJCQkwIDogbGUzMl90b19jcHUoUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spOworCQlpZiAoZXJyb3IpCisJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgNTIgZmllbGRzICVkIHwgJWRcbiIsCisJCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCQllcnJvciB8PSBsZTMyX3RvX2NwdShyeG9uLT5mbGFncyAmIFJYT05fRkxHX0NDS19NU0spOworCQlpZiAoZXJyb3IpCisJCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgNTIgQ0NLICVkIHwgJWRcbiIsCisJCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCX0KKwllcnJvciB8PSAocnhvbi0+bm9kZV9hZGRyWzBdIHwgcnhvbi0+YnNzaWRfYWRkclswXSkgJiAweDE7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgbWFjIGFkZHIgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7CisKKwkvKiBtYWtlIHN1cmUgYmFzaWMgcmF0ZXMgNk1icHMgYW5kIDFNYnBzIGFyZSBzdXBwb3J0ZWQgKi8KKwllcnJvciB8PSAoKChyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzICYgSVdMX1JBVEVfNk1fTUFTSykgPT0gMCkgJiYKKwkJICAoKHJ4b24tPmNja19iYXNpY19yYXRlcyAmIElXTF9SQVRFXzFNX01BU0spID09IDApKTsKKwlpZiAoZXJyb3IpCisJCUlXTF9XQVJOKHByaXYsICJjaGVjayBiYXNpYyByYXRlICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKGxlMTZfdG9fY3B1KHJ4b24tPmFzc29jX2lkKSA+IDIwMDcpOworCWlmIChlcnJvcikKKwkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIGFzc29jIGlkICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKQorCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpOworCWlmIChlcnJvcikKKwkJSVdMX1dBUk4ocHJpdiwgImNoZWNrIENDSyBhbmQgc2hvcnQgc2xvdCAlZCB8ICVkXG4iLAorCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCisJZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSkKKwkJCT09IChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSk7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgQ0NLICYgYXV0byBkZXRlY3QgJWQgfCAlZFxuIiwKKwkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKKworCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLIHwKKwkJCVJYT05fRkxHX1RHR19QUk9URUNUX01TSykpID09IFJYT05fRkxHX1RHR19QUk9URUNUX01TSyk7CisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiY2hlY2sgVEdHIGFuZCBhdXRvIGRldGVjdCAlZCB8ICVkXG4iLAorCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOworCisJaWYgKGVycm9yKQorCQlJV0xfV0FSTihwcml2LCAiVHVuaW5nIHRvIGNoYW5uZWwgJWRcbiIsCisJCQkgICAgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOworCisJaWYgKGVycm9yKSB7CisJCUlXTF9FUlIocHJpdiwgIk5vdCBhIHZhbGlkIGl3bF9yeG9uX2Fzc29jX2NtZCBmaWVsZCB2YWx1ZXNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChpd2xfY2hlY2tfcnhvbl9jbWQpOworCisvKioKKyAqIGl3bF9mdWxsX3J4b25fcmVxdWlyZWQgLSBjaGVjayBpZiBmdWxsIFJYT04gKHZzIFJYT05fQVNTT0MpIGNtZCBpcyBuZWVkZWQKKyAqIEBwcml2OiBzdGFnaW5nX3J4b24gaXMgY29tcGFyZWQgdG8gYWN0aXZlX3J4b24KKyAqCisgKiBJZiB0aGUgUlhPTiBzdHJ1Y3R1cmUgaXMgY2hhbmdpbmcgZW5vdWdoIHRvIHJlcXVpcmUgYSBuZXcgdHVuZSwKKyAqIG9yIGlzIGNsZWFyaW5nIHRoZSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0ssIHRoZW4gcmV0dXJuIDEgdG8gaW5kaWNhdGUgdGhhdAorICogYSBuZXcgdHVuZSAoZnVsbCBSWE9OIGNvbW1hbmQsIHJhdGhlciB0aGFuIFJYT05fQVNTT0MgY21kKSBpcyByZXF1aXJlZC4KKyAqLworaW50IGl3bF9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCisJLyogVGhlc2UgaXRlbXMgYXJlIG9ubHkgc2V0dGFibGUgZnJvbSB0aGUgZnVsbCBSWE9OIGNvbW1hbmQgKi8KKwlpZiAoIShpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgfHwKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi5ic3NpZF9hZGRyLAorCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIpIHx8CisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLAorCQkJICAgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm5vZGVfYWRkcikgfHwKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi53bGFwX2Jzc2lkX2FkZHIsCisJCQkgICAgICAgcHJpdi0+YWN0aXZlX3J4b24ud2xhcF9ic3NpZF9hZGRyKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlICE9IHByaXYtPmFjdGl2ZV9yeG9uLmRldl90eXBlKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwgIT0gcHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5haXJfcHJvcGFnYXRpb24gIT0KKwkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLmFpcl9wcm9wYWdhdGlvbikgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgIT0KKwkgICAgIHByaXYtPmFjdGl2ZV9yeG9uLm9mZG1faHRfc2luZ2xlX3N0cmVhbV9iYXNpY19yYXRlcykgfHwKKwkgICAgKHByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzICE9CisJICAgICBwcml2LT5hY3RpdmVfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzKSB8fAorCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkICE9IHByaXYtPmFjdGl2ZV9yeG9uLmFzc29jX2lkKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBmbGFncywgZmlsdGVyX2ZsYWdzLCBvZmRtX2Jhc2ljX3JhdGVzLCBhbmQgY2NrX2Jhc2ljX3JhdGVzIGNhbgorCSAqIGJlIHVwZGF0ZWQgd2l0aCB0aGUgUlhPTl9BU1NPQyBjb21tYW5kIC0tIGhvd2V2ZXIgb25seSBzb21lCisJICogZmxhZyB0cmFuc2l0aW9ucyBhcmUgYWxsb3dlZCB1c2luZyBSWE9OX0FTU09DICovCisKKwkvKiBDaGVjayBpZiB3ZSBhcmUgbm90IHN3aXRjaGluZyBiYW5kcyAqLworCWlmICgocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSAhPQorCSAgICAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spKQorCQlyZXR1cm4gMTsKKworCS8qIENoZWNrIGlmIHdlIGFyZSBzd2l0Y2hpbmcgYXNzb2NpYXRpb24gdG9nZ2xlICovCisJaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSAhPQorCQkocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2Z1bGxfcnhvbl9yZXF1aXJlZCk7CisKK3U4IGl3bF9yYXRlX2dldF9sb3dlc3RfcGxjcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IGk7CisJaW50IHJhdGVfbWFzazsKKworCS8qIFNldCByYXRlIG1hc2sqLworCWlmIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spCisJCXJhdGVfbWFzayA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19SQVRFU19NQVNLOworCWVsc2UKKwkJcmF0ZV9tYXNrID0gcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfT0ZETV9SQVRFU19NQVNLOworCisJLyogRmluZCBsb3dlc3QgdmFsaWQgcmF0ZSAqLworCWZvciAoaSA9IElXTF9SQVRFXzFNX0lOREVYOyBpICE9IElXTF9SQVRFX0lOVkFMSUQ7CisJCQkJCWkgPSBpd2xfcmF0ZXNbaV0ubmV4dF9pZWVlKSB7CisJCWlmIChyYXRlX21hc2sgJiAoMSA8PCBpKSkKKwkJCXJldHVybiBpd2xfcmF0ZXNbaV0ucGxjcDsKKwl9CisKKwkvKiBObyB2YWxpZCByYXRlIHdhcyBmb3VuZC4gQXNzaWduIHRoZSBsb3dlc3Qgb25lICovCisJaWYgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykKKwkJcmV0dXJuIElXTF9SQVRFXzFNX1BMQ1A7CisJZWxzZQorCQlyZXR1cm4gSVdMX1JBVEVfNk1fUExDUDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3JhdGVfZ2V0X2xvd2VzdF9wbGNwKTsKKwogdm9pZCBpd2xfc2V0X3J4b25faHQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2h0X2luZm8gKmh0X2luZm8pCiB7CiAJc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbiA9ICZwcml2LT5zdGFnaW5nX3J4b247CkBAIC02MjgsNyArODIzLDcgQEAKIAogCWl3bF9zZXRfcnhvbl9jaGFpbihwcml2KTsKIAotCUlXTF9ERUJVR19BU1NPQygic3VwcG9ydGVkIEhUIHJhdGUgMHglWCAweCVYIDB4JVggIgorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAic3VwcG9ydGVkIEhUIHJhdGUgMHglWCAweCVYIDB4JVggIgogCQkJInJ4b24gZmxhZ3MgMHglWCBvcGVyYXRpb24gbW9kZSA6MHglWCAiCiAJCQkiZXh0ZW5zaW9uIGNoYW5uZWwgb2Zmc2V0IDB4JXhcbiIsCiAJCQlodF9pbmZvLT5tY3MucnhfbWFza1swXSwKQEAgLTY3OSw3ICs4NzQsNyBAQAogCQlicmVhazsKIAljYXNlIFdMQU5fSFRfQ0FQX1NNX1BTX0lOVkFMSUQ6CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJpbnZhbGlkIG1pbW8gcHMgbW9kZSAlZFxuIiwKKwkJSVdMX0VSUihwcml2LCAiaW52YWxpZCBtaW1vIHBzIG1vZGUgJWRcbiIsCiAJCQkgICBwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zbV9wcyk7CiAJCVdBUk5fT04oMSk7CiAJCWlkbGVfY250ID0gLTE7CkBAIC03MDAsNiArODk1LDE4IEBACiB9CiAKIC8qKgorICogaXdsX2lzX21vbml0b3JfbW9kZSAtIERldGVybWluZSBpZiBpbnRlcmZhY2UgaW4gbW9uaXRvciBtb2RlCisgKgorICogcHJpdi0+aXdfbW9kZSBpcyBzZXQgaW4gYWRkX2ludGVyZmFjZSwgYnV0IGFkZF9pbnRlcmZhY2UgaXMKKyAqIG5ldmVyIGNhbGxlZCBmb3IgbW9uaXRvciBtb2RlLiBUaGUgb25seSB3YXkgbWFjODAyMTEgaW5mb3JtcyB1cyBhYm91dAorICogbW9uaXRvciBtb2RlIGlzIHRocm91Z2ggY29uZmlndXJpbmcgZmlsdGVycyAoY2FsbCB0byBjb25maWd1cmVfZmlsdGVyKS4KKyAqLworc3RhdGljIGJvb2wgaXdsX2lzX21vbml0b3JfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJcmV0dXJuICEhKHByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJiBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSyk7Cit9CisKKy8qKgogICogaXdsX3NldF9yeG9uX2NoYWluIC0gU2V0IHVwIFJ4IGNoYWluIHVzYWdlIGluICJzdGFnaW5nIiBSWE9OIGltYWdlCiAgKgogICogU2VsZWN0cyBob3cgbWFueSBhbmQgd2hpY2ggUnggcmVjZWl2ZXJzL2FudGVubmFzL2NoYWlucyB0byB1c2UuCkBAIC03NDIsNiArOTQ5LDE5IEBACiAJcnhfY2hhaW4gfD0gYWN0aXZlX3J4X2NudCA8PCBSWE9OX1JYX0NIQUlOX01JTU9fQ05UX1BPUzsKIAlyeF9jaGFpbiB8PSBpZGxlX3J4X2NudCAgPDwgUlhPTl9SWF9DSEFJTl9DTlRfUE9TOwogCisJLyogY29waWVkIGZyb20gJ2l3bF9iZ19yZXF1ZXN0X3NjYW4oKScgKi8KKwkvKiBGb3JjZSB1c2Ugb2YgY2hhaW5zIEIgYW5kIEMgKDB4NikgZm9yIFJ4IGZvciA0OTY1CisJICogQXZvaWQgQSAoMHgxKSBiZWNhdXNlIG9mIGl0cyBvZmYtY2hhbm5lbCByZWNlcHRpb24gb24gQS1iYW5kLgorCSAqIE1JTU8gaXMgbm90IHVzZWQgaGVyZSwgYnV0IHZhbHVlIGlzIHJlcXVpcmVkICovCisJaWYgKGl3bF9pc19tb25pdG9yX21vZGUocHJpdikgJiYKKwkgICAgIShwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spICYmCisJICAgICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgPT0gQ1NSX0hXX1JFVl9UWVBFXzQ5NjUpKSB7CisJCXJ4X2NoYWluID0gMHgwNyA8PCBSWE9OX1JYX0NIQUlOX1ZBTElEX1BPUzsKKwkJcnhfY2hhaW4gfD0gMHgwNiA8PCBSWE9OX1JYX0NIQUlOX0ZPUkNFX1NFTF9QT1M7CisJCXJ4X2NoYWluIHw9IDB4MDcgPDwgUlhPTl9SWF9DSEFJTl9GT1JDRV9NSU1PX1NFTF9QT1M7CisJCXJ4X2NoYWluIHw9IDB4MDEgPDwgUlhPTl9SWF9DSEFJTl9EUklWRVJfRk9SQ0VfUE9TOworCX0KKwogCXByaXYtPnN0YWdpbmdfcnhvbi5yeF9jaGFpbiA9IGNwdV90b19sZTE2KHJ4X2NoYWluKTsKIAogCWlmICghaXNfc2luZ2xlICYmIChhY3RpdmVfcnhfY250ID49IElXTF9OVU1fUlhfQ0hBSU5TX1NJTkdMRSkgJiYgaXNfY2FtKQpAQCAtNzQ5LDcgKzk2OSw3IEBACiAJZWxzZQogCQlwcml2LT5zdGFnaW5nX3J4b24ucnhfY2hhaW4gJj0gflJYT05fUlhfQ0hBSU5fTUlNT19GT1JDRV9NU0s7CiAKLQlJV0xfREVCVUdfQVNTT0MoInJ4X2NoYWluPTB4JVggYWN0aXZlPSVkIGlkbGU9JWRcbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJyeF9jaGFpbj0weCVYIGFjdGl2ZT0lZCBpZGxlPSVkXG4iLAogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLnJ4X2NoYWluLAogCQkJYWN0aXZlX3J4X2NudCwgaWRsZV9yeF9jbnQpOwogCkBAIC03NzQsNyArOTk0LDcgQEAKIAl1MTYgY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChjaC0+Y2VudGVyX2ZyZXEpOwogCiAJaWYgKCFpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBjaGFubmVsKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ291bGQgbm90IHNldCBjaGFubmVsIHRvICVkIFslZF1cbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3VsZCBub3Qgc2V0IGNoYW5uZWwgdG8gJWQgWyVkXVxuIiwKIAkJCSAgICAgICBjaGFubmVsLCBiYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzkxLDEyICsxMDExLDI4MyBAQAogCiAJcHJpdi0+YmFuZCA9IGJhbmQ7CiAKLQlJV0xfREVCVUdfSU5GTygiU3RhZ2luZyBjaGFubmVsIHNldCB0byAlZCBbJWRdXG4iLCBjaGFubmVsLCBiYW5kKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU3RhZ2luZyBjaGFubmVsIHNldCB0byAlZCBbJWRdXG4iLCBjaGFubmVsLCBiYW5kKTsKIAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChpd2xfc2V0X3J4b25fY2hhbm5lbCk7CiAKK3ZvaWQgaXdsX3NldF9mbGFnc19mb3JfYmFuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9CisJCSAgICB+KFJYT05fRkxHX0JBTkRfMjRHX01TSyB8IFJYT05fRkxHX0FVVE9fREVURUNUX01TSworCQkgICAgICB8IFJYT05fRkxHX0NDS19NU0spOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0s7CisJfSBlbHNlIHsKKwkJLyogQ29waWVkIGZyb20gaXdsX3Bvc3RfYXNzb2NpYXRlKCkgKi8KKwkJaWYgKHByaXYtPmFzc29jX2NhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKQorCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCQllbHNlCisJCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOworCisJCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKKworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX0NDS19NU0s7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKTsKKworLyoKKyAqIGluaXRpYWxpemUgcnhvbiBzdHJ1Y3R1cmUgd2l0aCBkZWZhdWx0IHZhbHVlcyBmcm9tIGVlcHJvbQorICovCit2b2lkIGl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCit7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CisKKwltZW1zZXQoJnByaXYtPnN0YWdpbmdfcnhvbiwgMCwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9BUDsKKwkJYnJlYWs7CisKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfRVNTOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7CisJCWJyZWFrOworCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9JQlNTOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSyB8CisJCQkJCQkgIFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOworCQlicmVhazsKKworCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9TTklGRkVSOworCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfUFJPTUlTQ19NU0sgfAorCQkgICAgUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLIHwgUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlXTF9FUlIocHJpdiwgIlVuc3VwcG9ydGVkIGludGVyZmFjZSB0eXBlICVkXG4iLCBtb2RlKTsKKwkJYnJlYWs7CisJfQorCisjaWYgMAorCS8qIFRPRE86ICBGaWd1cmUgb3V0IHdoZW4gc2hvcnRfcHJlYW1ibGUgd291bGQgYmUgc2V0IGFuZCBjYWNoZSBmcm9tCisJICogdGhhdCAqLworCWlmICghaHdfdG9fbG9jYWwocHJpdi0+aHcpLT5zaG9ydF9wcmVhbWJsZSkKKwkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOworI2VuZGlmCisKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwKKwkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOworCisJaWYgKCFjaF9pbmZvKQorCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKKworCS8qCisJICogaW4gc29tZSBjYXNlIEEgY2hhbm5lbHMgYXJlIGFsbCBub24gSUJTUworCSAqIGluIHRoaXMgY2FzZSBmb3JjZSBCL0cgY2hhbm5lbAorCSAqLworCWlmICgocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKKwkgICAgIShpc19jaGFubmVsX2lic3MoY2hfaW5mbykpKQorCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKKworCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hfaW5mby0+Y2hhbm5lbCk7CisJcHJpdi0+YmFuZCA9IGNoX2luZm8tPmJhbmQ7CisKKwlpd2xfc2V0X2ZsYWdzX2Zvcl9iYW5kKHByaXYsIHByaXYtPmJhbmQpOworCisJcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQorCSAgICAoSVdMX09GRE1fUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CisJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9CisJICAgIChJV0xfQ0NLX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKKworCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+KFJYT05fRkxHX0NIQU5ORUxfTU9ERV9NSVhFRF9NU0sgfAorCQkJCQlSWE9OX0ZMR19DSEFOTkVMX01PREVfUFVSRV80MF9NU0spOworCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ud2xhcF9ic3NpZF9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X3NpbmdsZV9zdHJlYW1fYmFzaWNfcmF0ZXMgPSAweGZmOworCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2h0X2R1YWxfc3RyZWFtX2Jhc2ljX3JhdGVzID0gMHhmZjsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcpOworCit2b2lkIGl3bF9zZXRfcmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqaHcgPSBOVUxMOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKKwlpbnQgaTsKKworCWh3ID0gaXdsX2dldF9od19tb2RlKHByaXYsIHByaXYtPmJhbmQpOworCWlmICghaHcpIHsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIHNldCByYXRlOiB1bmFibGUgdG8gZ2V0IGh3IG1vZGVcbiIpOworCQlyZXR1cm47CisJfQorCisJcHJpdi0+YWN0aXZlX3JhdGUgPSAwOworCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBody0+bl9iaXRyYXRlczsgaSsrKSB7CisJCXJhdGUgPSAmKGh3LT5iaXRyYXRlc1tpXSk7CisJCWlmIChyYXRlLT5od192YWx1ZSA8IElXTF9SQVRFX0NPVU5UKQorCQkJcHJpdi0+YWN0aXZlX3JhdGUgfD0gKDEgPDwgcmF0ZS0+aHdfdmFsdWUpOworCX0KKworCUlXTF9ERUJVR19SQVRFKHByaXYsICJTZXQgYWN0aXZlX3JhdGUgPSAlMHgsIGFjdGl2ZV9yYXRlX2Jhc2ljID0gJTB4XG4iLAorCQkgICAgICAgcHJpdi0+YWN0aXZlX3JhdGUsIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljKTsKKworCS8qCisJICogSWYgYSBiYXNpYyByYXRlIGlzIGNvbmZpZ3VyZWQsIHRoZW4gdXNlIGl0IChhZGRpbmcgSVdMX1JBVEVfMU1fTUFTSykKKwkgKiBvdGhlcndpc2Ugc2V0IGl0IHRvIHRoZSBkZWZhdWx0IG9mIGFsbCBDQ0sgcmF0ZXMgYW5kIDYsIDEyLCAyNCBmb3IKKwkgKiBPRkRNCisJICovCisJaWYgKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLKQorCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KKwkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgorCQkgICAgICBJV0xfQ0NLX1JBVEVTX01BU0spID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KKwkJICAgIChJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0sgPj4gSVdMX0ZJUlNUX0NDS19SQVRFKSAmIDB4RjsKKworCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0spCisJCXByaXYtPnN0YWdpbmdfcnhvbi5vZmRtX2Jhc2ljX3JhdGVzID0KKwkJICAgICgocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJgorCQkgICAgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyB8IElXTF9SQVRFXzZNX01BU0spKSA+PgorCQkgICAgICBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7CisJZWxzZQorCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9CisJCSAgIChJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3NldF9yYXRlKTsKKwordm9pZCBpd2xfcnhfY3NhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAodm9pZCAqKSZwcml2LT5hY3RpdmVfcnhvbjsKKwlzdHJ1Y3QgaXdsX2NzYV9ub3RpZmljYXRpb24gKmNzYSA9ICYocGt0LT51LmNzYV9ub3RpZik7CisJSVdMX0RFQlVHXzExSChwcml2LCAiQ1NBIG5vdGlmOiBjaGFubmVsICVkLCBzdGF0dXMgJWRcbiIsCisJCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCksIGxlMzJfdG9fY3B1KGNzYS0+c3RhdHVzKSk7CisJcnhvbi0+Y2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKKwlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X2NzYSk7CisKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworc3RhdGljIHZvaWQgaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24gPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJSWCBDT05GSUc6XG4iKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCAodTggKikgcnhvbiwgc2l6ZW9mKCpyeG9uKSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1MTYgY2hhbm5lbDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidTMyIGZsYWdzOiAweCUwOFhcbiIsIGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzKSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1MzIgZmlsdGVyX2ZsYWdzOiAweCUwOHhcbiIsCisJCQlsZTMyX3RvX2NwdShyeG9uLT5maWx0ZXJfZmxhZ3MpKTsKKwlJV0xfREVCVUdfUkFESU8ocHJpdiwgInU4IGRldl90eXBlOiAweCV4XG4iLCByeG9uLT5kZXZfdHlwZSk7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1OCBvZmRtX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsCisJCQlyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzKTsKKwlJV0xfREVCVUdfUkFESU8ocHJpdiwgInU4IGNja19iYXNpY19yYXRlczogMHglMDJ4XG4iLCByeG9uLT5jY2tfYmFzaWNfcmF0ZXMpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidThbNl0gbm9kZV9hZGRyOiAlcE1cbiIsIHJ4b24tPm5vZGVfYWRkcik7CisJSVdMX0RFQlVHX1JBRElPKHByaXYsICJ1OFs2XSBic3NpZF9hZGRyOiAlcE1cbiIsIHJ4b24tPmJzc2lkX2FkZHIpOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAidTE2IGFzc29jX2lkOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkpOworfQorI2VuZGlmCisKKy8qKgorICogaXdsX2lycV9oYW5kbGVfZXJyb3IgLSBjYWxsZWQgZm9yIEhXIG9yIFNXIGVycm9yIGludGVycnVwdCBmcm9tIGNhcmQKKyAqLwordm9pZCBpd2xfaXJxX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJLyogU2V0IHRoZSBGVyBlcnJvciBmbGFnIC0tIGNsZWFyZWQgb24gaXdsX2Rvd24gKi8KKwlzZXRfYml0KFNUQVRVU19GV19FUlJPUiwgJnByaXYtPnN0YXR1cyk7CisKKwkvKiBDYW5jZWwgY3VycmVudGx5IHF1ZXVlZCBjb21tYW5kLiAqLworCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOworCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAocHJpdi0+ZGVidWdfbGV2ZWwgJiBJV0xfRExfRldfRVJST1JTKSB7CisJCWl3bF9kdW1wX25pY19lcnJvcl9sb2cocHJpdik7CisJCWl3bF9kdW1wX25pY19ldmVudF9sb2cocHJpdik7CisJCWl3bF9wcmludF9yeF9jb25maWdfY21kKHByaXYpOworCX0KKyNlbmRpZgorCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOworCisJLyogS2VlcCB0aGUgcmVzdGFydCBwcm9jZXNzIGZyb20gdHJ5aW5nIHRvIHNlbmQgaG9zdAorCSAqIGNvbW1hbmRzIGJ5IGNsZWFyaW5nIHRoZSBJTklUIHN0YXR1cyBiaXQgKi8KKwljbGVhcl9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKKworCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpIHsKKwkJSVdMX0RFQlVHKHByaXYsIElXTF9ETF9GV19FUlJPUlMsCisJCQkgICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHVDb2RlIGVycm9yLlxuIik7CisKKwkJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJCQltZW1jcHkoJnByaXYtPnJlY292ZXJ5X3J4b24sICZwcml2LT5hY3RpdmVfcnhvbiwKKwkJCSAgICAgICBzaXplb2YocHJpdi0+cmVjb3ZlcnlfcnhvbikpOworCQkJcHJpdi0+ZXJyb3JfcmVjb3ZlcmluZyA9IDE7CisJCX0KKwkJaWYgKHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+cmVzdGFydF9mdykKKwkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChpd2xfaXJxX2hhbmRsZV9lcnJvcik7CisKK3ZvaWQgaXdsX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY19saXN0KQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCV9fbGUzMiAqZmlsdGVyX2ZsYWdzID0gJnByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3M7CisKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVudGVyOiBjaGFuZ2VkOiAweCV4LCB0b3RhbDogMHgleFxuIiwKKwkJCWNoYW5nZWRfZmxhZ3MsICp0b3RhbF9mbGFncyk7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIChGSUZfT1RIRVJfQlNTIHwgRklGX1BST01JU0NfSU5fQlNTKSkgeworCQlpZiAoKnRvdGFsX2ZsYWdzICYgKEZJRl9PVEhFUl9CU1MgfCBGSUZfUFJPTUlTQ19JTl9CU1MpKQorCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKKwkJZWxzZQorCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfUFJPTUlTQ19NU0s7CisJfQorCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpCisJCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOworCQllbHNlCisJCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BQ0NFUFRfR1JQX01TSzsKKwl9CisJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQ09OVFJPTCkgeworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklGX0NPTlRST0wpCisJCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0NUTDJIT1NUX01TSzsKKwkJZWxzZQorCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLOworCX0KKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKwkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0s7CisJCWVsc2UKKwkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLOworCX0KKworCS8qIFdlIGF2b2lkIGl3bF9jb21taXRfcnhvbiBoZXJlIHRvIGNvbW1pdCB0aGUgbmV3IGZpbHRlciBmbGFncworCSAqIHNpbmNlIG1hYzgwMjExIHdpbGwgY2FsbCBpZWVlODAyMTFfaHdfY29uZmlnIGltbWVkaWF0ZWx5LgorCSAqIChtY19saXN0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lKS4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvCisJICogcXVldWUgYSBiYWNrZ3JvdW5kIGl3bF9jb21taXRfcnhvbiB3b3JrLgorCSAqLworCisJKnRvdGFsX2ZsYWdzICY9IEZJRl9PVEhFUl9CU1MgfCBGSUZfQUxMTVVMVEkgfCBGSUZfUFJPTUlTQ19JTl9CU1MgfAorCQkJRklGX0JDTl9QUkJSRVNQX1BST01JU0MgfCBGSUZfQ09OVFJPTDsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2NvbmZpZ3VyZV9maWx0ZXIpOworCiBpbnQgaXdsX3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKQEAgLTgwNiwxOCArMTI5NywxOCBAQAogCS8qIFRlbGwgbWFjODAyMTEgb3VyIGNoYXJhY3RlcmlzdGljcyAqLwogCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk0gfAotCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OOworCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKKwkJICAgIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UIHwKKwkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUzsKIAlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CiAJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8CiAJCUJJVChOTDgwMjExX0lGVFlQRV9BREhPQyk7CiAKLQlody0+d2lwaHktPmZ3X2hhbmRsZXNfcmVndWxhdG9yeSA9IHRydWU7CisJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJaHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7CiAKIAkvKiBEZWZhdWx0IHZhbHVlOyA0IEVEQ0EgUU9TIHByaW9yaXRpZXMgKi8KIAlody0+cXVldWVzID0gNDsKLQkvKiBxdWV1ZXMgdG8gc3VwcG9ydCAxMW4gYWdncmVnYXRpb24gKi8KLQlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX04pCi0JCWh3LT5hbXBkdV9xdWV1ZXMgPSBwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9hbXBkdV9xdWV1ZXM7CiAKIAlody0+Y29uZi5iZWFjb25faW50ID0gMTAwOwogCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gSVdMX0NPTk5fTUFYX0xJU1RFTl9JTlRFUlZBTDsKQEAgLTgzMSw3ICsxMzIyLDcgQEAKIAogCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhwcml2LT5odyk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBodyAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgaHcgKGVycm9yICVkKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCA9IDE7CkBAIC04NjMsNyArMTM1NCw2IEBACiB7CiAJaW50IHJldDsKIAotCXByaXYtPnJldHJ5X3JhdGUgPSAxOwogCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKIAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKQEAgLTg5NywyMSArMTM4NywyMiBAQAogCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKIAogCXByaXYtPnJhdGVzX21hc2sgPSBJV0xfUkFURVNfTUFTSzsKLQkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBBQyBtb2RlICovCi0JcHJpdi0+cG93ZXJfbW9kZSA9IElXTF9QT1dFUl9BQzsKKwkvKiBJZiBwb3dlciBtYW5hZ2VtZW50IGlzIHR1cm5lZCBvbiwgZGVmYXVsdCB0byBDQU0gbW9kZSAqLworCXByaXYtPnBvd2VyX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07CiAJcHJpdi0+dHhfcG93ZXJfdXNlcl9sbXQgPSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWDsKIAogCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlJV0xfRVJSKHByaXYsICJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlnb3RvIGVycjsKIAl9CiAKIAlyZXQgPSBpd2xjb3JlX2luaXRfZ2Vvcyhwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfZnJlZV9jaGFubmVsX21hcDsKIAl9CisJaXdsY29yZV9pbml0X2h3X3JhdGVzKHByaXYsIHByaXYtPmllZWVfcmF0ZXMpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTkyNiwxNCArMTQxNywxNiBAQAogewogCWludCByZXQgPSAwOwogCWlmICh0eF9wb3dlciA8IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOKSB7Ci0JCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxpbWl0LlxuIiwKLQkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGJlbG93IGxvd2VyIGxpbWl0ICVkLlxuIiwKKwkJCSB0eF9wb3dlciwKKwkJCSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICh0eF9wb3dlciA+IElXTF9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUFYKSB7Ci0JCUlXTF9XQVJOSU5HKCJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGFib3ZlIGxpbWl0LlxuIiwKLQkJCSAgICBwcml2LT50eF9wb3dlcl91c2VyX2xtdCk7CisJCUlXTF9XQVJOKHByaXYsICJSZXF1ZXN0ZWQgdXNlciBUWFBPV0VSICVkIGFib3ZlIHVwcGVyIGxpbWl0ICVkLlxuIiwKKwkJCSB0eF9wb3dlciwKKwkJCSBJV0xfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01BWCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTQyLDYgKzE0MzUsMTAgQEAKIAogCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gdHhfcG93ZXI7CiAKKwkvKiBpZiBuaWMgaXMgbm90IHVwIGRvbid0IHNlbmQgY29tbWFuZCAqLworCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQorCQlyZXR1cm4gcmV0OworCiAJaWYgKGZvcmNlICYmIHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIpCiAJCXJldCA9IHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIocHJpdik7CiAKQEAgLTk3MCwxOCArMTQ2Nyw5MiBAQAogCSAqIGZyb20gdUNvZGUgb3IgZmxvdyBoYW5kbGVyIChSeC9UeCBETUEpICovCiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhmZmZmZmZmZik7CiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIDB4ZmZmZmZmZmYpOwotCUlXTF9ERUJVR19JU1IoIkRpc2FibGVkIGludGVycnVwdHNcbiIpOworCUlXTF9ERUJVR19JU1IocHJpdiwgIkRpc2FibGVkIGludGVycnVwdHNcbiIpOwogfQogRVhQT1JUX1NZTUJPTChpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKTsKIAogdm9pZCBpd2xfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCUlXTF9ERUJVR19JU1IoIkVuYWJsaW5nIGludGVycnVwdHNcbiIpOworCUlXTF9ERUJVR19JU1IocHJpdiwgIkVuYWJsaW5nIGludGVycnVwdHNcbiIpOwogCXNldF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIENTUl9JTklfU0VUX01BU0spOwogfQogRVhQT1JUX1NZTUJPTChpd2xfZW5hYmxlX2ludGVycnVwdHMpOwogCitpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKKwl1MzIgaW50YSwgaW50YV9tYXNrOworCXUzMiBpbnRhX2ZoOworCWlmICghcHJpdikKKwkJcmV0dXJuIElSUV9OT05FOworCisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKworCS8qIERpc2FibGUgKGJ1dCBkb24ndCBjbGVhciEpIGludGVycnVwdHMgaGVyZSB0byBhdm9pZAorCSAqICAgIGJhY2stdG8tYmFjayBJU1JzIGFuZCBzcG9yYWRpYyBpbnRlcnJ1cHRzIGZyb20gb3VyIE5JQy4KKwkgKiBJZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZXJ2aWNlLCB0aGUgdGFza2xldCB3aWxsIHJlLWVuYWJsZSBpbnRzLgorCSAqIElmIHdlICpkb24ndCogaGF2ZSBzb21ldGhpbmcsIHdlJ2xsIHJlLWVuYWJsZSBiZWZvcmUgbGVhdmluZyBoZXJlLiAqLworCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsgIC8qIGp1c3QgZm9yIGRlYnVnICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKKworCS8qIERpc2NvdmVyIHdoaWNoIGludGVycnVwdHMgYXJlIGFjdGl2ZS9wZW5kaW5nICovCisJaW50YSA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7CisJaW50YV9maCA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMpOworCisJLyogSWdub3JlIGludGVycnVwdCBpZiB0aGVyZSdzIG5vdGhpbmcgaW4gTklDIHRvIHNlcnZpY2UuCisJICogVGhpcyBtYXkgYmUgZHVlIHRvIElSUSBzaGFyZWQgd2l0aCBhbm90aGVyIGRldmljZSwKKwkgKiBvciBkdWUgdG8gc3BvcmFkaWMgaW50ZXJydXB0cyB0aHJvd24gZnJvbSBvdXIgTklDLiAqLworCWlmICghaW50YSAmJiAhaW50YV9maCkgeworCQlJV0xfREVCVUdfSVNSKHByaXYsICJJZ25vcmUgaW50ZXJydXB0LCBpbnRhID09IDAsIGludGFfZmggPT0gMFxuIik7CisJCWdvdG8gbm9uZTsKKwl9CisKKwlpZiAoKGludGEgPT0gMHhGRkZGRkZGRikgfHwgKChpbnRhICYgMHhGRkZGRkZGMCkgPT0gMHhhNWE1YTVhMCkpIHsKKwkJLyogSGFyZHdhcmUgZGlzYXBwZWFyZWQuIEl0IG1pZ2h0IGhhdmUgYWxyZWFkeSByYWlzZWQKKwkJICogYW4gaW50ZXJydXB0ICovCisJCUlXTF9XQVJOKHByaXYsICJIQVJEV0FSRSBHT05FPz8gSU5UQSA9PSAweCUwOHhcbiIsIGludGEpOworCQlnb3RvIHVucGx1Z2dlZDsKKwl9CisKKwlJV0xfREVCVUdfSVNSKHByaXYsICJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCisJCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7CisKKwlpbnRhICY9IH5DU1JfSU5UX0JJVF9TQ0Q7CisKKwkvKiBpd2xfaXJxX3Rhc2tsZXQoKSB3aWxsIHNlcnZpY2UgaW50ZXJydXB0cyBhbmQgcmUtZW5hYmxlIHRoZW0gKi8KKwlpZiAobGlrZWx5KGludGEgfHwgaW50YV9maCkpCisJCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPmlycV90YXNrbGV0KTsKKworIHVucGx1Z2dlZDoKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworCisgbm9uZToKKwkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2VydmljZS4gKi8KKwkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaWFibGVkIGJ5IGlycSAqLworCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKQorCQlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CisJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCXJldHVybiBJUlFfTk9ORTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX2lzcik7CisKK2ludCBpd2xfc2VuZF9idF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXN0cnVjdCBpd2xfYnRfY21kIGJ0X2NtZCA9IHsKKwkJLmZsYWdzID0gMywKKwkJLmxlYWRfdGltZSA9IDB4QUEsCisJCS5tYXhfa2lsbCA9IDEsCisJCS5raWxsX2Fja19tYXNrID0gMCwKKwkJLmtpbGxfY3RzX21hc2sgPSAwLAorCX07CisKKwlyZXR1cm4gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9CVF9DT05GSUcsCisJCQkJc2l6ZW9mKHN0cnVjdCBpd2xfYnRfY21kKSwgJmJ0X2NtZCk7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2J0X2NvbmZpZyk7CisKIGludCBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3Qoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBmbGFncykKIHsKIAl1MzIgc3RhdF9mbGFncyA9IDA7CkBAIC0xMDA3LDcgKzE1NzgsNyBAQAogCXUzMiBlcnJjbnQgPSAwOwogCXUzMiBpOwogCi0JSVdMX0RFQlVHX0lORk8oInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOwogCiAJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmV0KQpAQCAtMTAxOCw3ICsxNTg5LDcgQEAKIAkJLyogTk9URTogVXNlIHRoZSBkZWJ1Z2xlc3MgcmVhZCBzbyB3ZSBkb24ndCBmbG9vZCBrZXJuZWwgbG9nCiAJCSAqIGlmIElXTF9ETF9JTyBpcyBzZXQgKi8KIAkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCi0JCQlpICsgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCQkJaSArIElXTDQ5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAkJdmFsID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCWlmICh2YWwgIT0gbGUzMl90b19jcHUoKmltYWdlKSkgewogCQkJcmV0ID0gLUVJTzsKQEAgLTEwNDUsMTMgKzE2MTYsMTQgQEAKIAlpbnQgcmV0ID0gMDsKIAl1MzIgZXJyY250OwogCi0JSVdMX0RFQlVHX0lORk8oInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOwogCiAJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIFJUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwKKwkJCSAgIElXTDQ5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAogCWVycmNudCA9IDA7CiAJZm9yICg7IGxlbiA+IDA7IGxlbiAtPSBzaXplb2YodTMyKSwgaW1hZ2UrKykgewpAQCAtMTA2MCw3ICsxNjMyLDcgQEAKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwogCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJST1IoInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKKwkJCUlXTF9FUlIocHJpdiwgInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKIAkJCQkgICJvZmZzZXQgMHgleCwgaXMgMHgleCwgcy9iIDB4JXhcbiIsCiAJCQkJICBzYXZlX2xlbiAtIGxlbiwgdmFsLCBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKIAkJCXJldCA9IC1FSU87CkBAIC0xMDczLDggKzE2NDUsOCBAQAogCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlpZiAoIWVycmNudCkKLQkJSVdMX0RFQlVHX0lORk8KLQkJICAgICgidWNvZGUgaW1hZ2UgaW4gSU5TVFJVQ1RJT04gbWVtb3J5IGlzIGdvb2RcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkgICAgInVjb2RlIGltYWdlIGluIElOU1RSVUNUSU9OIG1lbW9yeSBpcyBnb29kXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDk0LDcgKzE2NjYsNyBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwogCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmICghcmV0KSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJCb290c3RyYXAgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQm9vdHN0cmFwIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMTAzLDcgKzE2NzUsNyBAQAogCWxlbiA9IHByaXYtPnVjb2RlX2luaXQubGVuOwogCXJldCA9IGl3bGNvcmVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmICghcmV0KSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTExMTIsMTEgKzE2ODQsMTEgQEAKIAlsZW4gPSBwcml2LT51Y29kZV9jb2RlLmxlbjsKIAlyZXQgPSBpd2xjb3JlX3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKIAlpZiAoIXJldCkgewotCQlJV0xfREVCVUdfSU5GTygiUnVudGltZSB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSdW50aW1lIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0VSUk9SKCJOTyBWQUxJRCBVQ09ERSBJTUFHRSBJTiBJTlNUUlVDVElPTiBTUkFNISFcbiIpOworCUlXTF9FUlIocHJpdiwgIk5PIFZBTElEIFVDT0RFIElNQUdFIElOIElOU1RSVUNUSU9OIFNSQU0hIVxuIik7CiAKIAkvKiBTaW5jZSBub3RoaW5nIHNlZW1zIHRvIG1hdGNoLCBzaG93IGZpcnN0IHNldmVyYWwgZGF0YSBlbnRyaWVzIGluCiAJICogaW5zdHJ1Y3Rpb24gU1JBTSwgc28gbWF5YmUgdmlzdWFsIGluc3BlY3Rpb24gd2lsbCBnaXZlIGEgY2x1ZS4KQEAgLTExODgsMjEgKzE3NjAsMjIgQEAKIAkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKIAogCWlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgewotCQlJV0xfRVJST1IoIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJOb3QgdmFsaWQgZXJyb3IgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKIAkJcmV0dXJuOwogCX0KIAogCXJldCA9IGl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJaWYgKHJldCkgewotCQlJV0xfV0FSTklORygiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CiAJCXJldHVybjsKIAl9CiAKIAljb3VudCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwogCiAJaWYgKEVSUk9SX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRSkgewotCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFcnJvciBMb2cgRHVtcDpcbiIpOwotCQlJV0xfRVJST1IoIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLCBwcml2LT5zdGF0dXMsIGNvdW50KTsKKwkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLAorCQkJcHJpdi0+c3RhdHVzLCBjb3VudCk7CiAJfQogCiAJZGVzYyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAxICogc2l6ZW9mKHUzMikpOwpAQCAtMTIxNSwxMiArMTc4OCwxMiBAQAogCWxpbmUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgOSAqIHNpemVvZih1MzIpKTsKIAl0aW1lID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIDExICogc2l6ZW9mKHUzMikpOwogCi0JSVdMX0VSUk9SKCJEZXNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWUgICAgICAgIgorCUlXTF9FUlIocHJpdiwgIkRlc2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZSAgICAgICAiCiAJCSJkYXRhMSAgICAgIGRhdGEyICAgICAgbGluZVxuIik7Ci0JSVdMX0VSUk9SKCIlLTI4cyAoIyUwMmQpICUwMTB1IDB4JTA4WCAweCUwOFggJXVcbiIsCisJSVdMX0VSUihwcml2LCAiJS0yOHMgKCMlMDJkKSAlMDEwdSAweCUwOFggMHglMDhYICV1XG4iLAogCQlkZXNjX2xvb2t1cChkZXNjKSwgZGVzYywgdGltZSwgZGF0YTEsIGRhdGEyLCBsaW5lKTsKLQlJV0xfRVJST1IoImJsaW5rMSAgYmxpbmsyICBpbGluazEgIGlsaW5rMlxuIik7Ci0JSVdMX0VSUk9SKCIweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVhcbiIsIGJsaW5rMSwgYmxpbmsyLAorCUlXTF9FUlIocHJpdiwgImJsaW5rMSAgYmxpbmsyICBpbGluazEgIGlsaW5rMlxuIik7CisJSVdMX0VSUihwcml2LCAiMHglMDVYIDB4JTA1WCAweCUwNVggMHglMDVYXG4iLCBibGluazEsIGJsaW5rMiwKIAkJaWxpbmsxLCBpbGluazIpOwogCiAJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKQEAgLTEyNjYsMTEgKzE4MzksMTEgQEAKIAkJcHRyICs9IHNpemVvZih1MzIpOwogCQlpZiAobW9kZSA9PSAwKSB7CiAJCQkvKiBkYXRhLCBldiAqLwotCQkJSVdMX0VSUk9SKCJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLCB0aW1lLCBldik7CisJCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HOjB4JTA4eDolMDR1XG4iLCB0aW1lLCBldik7CiAJCX0gZWxzZSB7CiAJCQlkYXRhID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKIAkJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJCUlXTF9FUlJPUigiRVZUX0xPR1Q6JTAxMHU6MHglMDh4OiUwNHVcbiIsCisJCQlJV0xfRVJSKHByaXYsICJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKIAkJCQkJdGltZSwgZGF0YSwgZXYpOwogCQl9CiAJfQpAQCAtMTI5MiwxMyArMTg2NSwxMyBAQAogCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKIAogCWlmICghcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+aXNfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgewotCQlJV0xfRVJST1IoIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwogCQlyZXR1cm47CiAJfQogCiAJcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9XQVJOSU5HKCJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTMxMiwxMiArMTg4NSwxMiBAQAogCiAJLyogYmFpbCBvdXQgaWYgbm90aGluZyBpbiBsb2cgKi8KIAlpZiAoc2l6ZSA9PSAwKSB7Ci0JCUlXTF9FUlJPUigiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBub3RoaW5nIGluIGxvZ1xuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOwogCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCQlyZXR1cm47CiAJfQogCi0JSVdMX0VSUk9SKCJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IGRpc3BsYXkgY291bnQgJWQsIHdyYXBzICVkXG4iLAorCUlXTF9FUlIocHJpdiwgIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogZGlzcGxheSBjb3VudCAlZCwgd3JhcHMgJWRcbiIsCiAJCQlzaXplLCBudW1fd3JhcHMpOwogCiAJLyogaWYgdUNvZGUgaGFzIHdyYXBwZWQgYmFjayB0byB0b3Agb2YgbG9nLCBzdGFydCBhdCB0aGUgb2xkZXN0IGVudHJ5LApAQCAtMTM0OSw5ICsxOTIyLDkgQEAKIAlyZXQgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0NUX0tJTExfQ09ORklHX0NNRCwKIAkJCSAgICAgICBzaXplb2YoY21kKSwgJmNtZCk7CiAJaWYgKHJldCkKLQkJSVdMX0VSUk9SKCJSRVBMWV9DVF9LSUxMX0NPTkZJR19DTUQgZmFpbGVkXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIGZhaWxlZFxuIik7CiAJZWxzZQotCQlJV0xfREVCVUdfSU5GTygiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIHN1Y2NlZWRlZCwgIgorCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUkVQTFlfQ1RfS0lMTF9DT05GSUdfQ01EIHN1Y2NlZWRlZCwgIgogCQkJImNyaXRpY2FsIHRlbXBlcmF0dXJlIGlzICVkXG4iLAogCQkJY21kLmNyaXRpY2FsX3RlbXBlcmF0dXJlX1IpOwogfQpAQCAtMTM2OCw3ICsxOTQxLDcgQEAKICAqIFdoZW4gaW4gdGhlICdoYWx0JyBzdGF0ZSwgdGhlIGNhcmQgaXMgc2h1dCBkb3duIGFuZCBtdXN0IGJlIGZ1bGx5CiAgKiByZXN0YXJ0ZWQgdG8gY29tZSBiYWNrIG9uLgogICovCi1zdGF0aWMgaW50IGl3bF9zZW5kX2NhcmRfc3RhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgZmxhZ3MsIHU4IG1ldGFfZmxhZykKK2ludCBpd2xfc2VuZF9jYXJkX3N0YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGZsYWdzLCB1OCBtZXRhX2ZsYWcpCiB7CiAJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX0NBUkRfU1RBVEVfQ01ELApAQCAtMTM3OSw2ICsxOTUyLDcgQEAKIAogCXJldHVybiBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZCk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2NhcmRfc3RhdGUpOwogCiB2b2lkIGl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewpAQCAtMTM4Nyw3ICsxOTYxLDcgQEAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgiTWFudWFsIFNXIFJGIEtJTEwgc2V0IHRvOiBSQURJTyBPRkZcbiIpOworCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJNYW51YWwgU1cgUkYgS0lMTCBzZXQgdG86IFJBRElPIE9GRlxuIik7CiAKIAlpd2xfc2Nhbl9jYW5jZWwocHJpdik7CiAJLyogRklYTUU6IFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBBUCAqLwpAQCAtMTQxNiw3ICsxOTkwLDcgQEAKIAlpZiAoIXRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuIDA7CiAKLQlJV0xfREVCVUdfUkZfS0lMTCgiTWFudWFsIFNXIFJGIEtJTEwgc2V0IHRvOiBSQURJTyBPTlxuIik7CisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIk1hbnVhbCBTVyBSRiBLSUxMIHNldCB0bzogUkFESU8gT05cbiIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKQEAgLTE0NDEsNyArMjAxNSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfUkZfS0lMTCgiQ2FuIG5vdCB0dXJuIHJhZGlvIGJhY2sgb24gLSAiCisJCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKIAkJCQkgICJkaXNhYmxlZCBieSBIVyBzd2l0Y2hcbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDYzLDMgKzIwMzcsNzggQEAKIAlyZXR1cm4gMTsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3JhZGlvX2tpbGxfc3dfZW5hYmxlX3JhZGlvKTsKKwordm9pZCBpd2xfYmdfcmZfa2lsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwgcmZfa2lsbCk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CisKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKworCWlmICghaXdsX2lzX3Jma2lsbChwcml2KSkgeworCQlJV0xfREVCVUdfUkZfS0lMTChwcml2LAorCQkJICAiSFcgYW5kL29yIFNXIFJGIEtpbGwgbm8gbG9uZ2VyIGFjdGl2ZSwgcmVzdGFydGluZyAiCisJCQkgICJkZXZpY2VcbiIpOworCQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpICYmCisJCSAgICB0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpKQorCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0KTsKKwl9IGVsc2UgeworCQkvKiBtYWtlIHN1cmUgbWFjODAyMTEgc3RvcCBzZW5kaW5nIFR4IGZyYW1lICovCisJCWlmIChwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkKQorCQkJaWVlZTgwMjExX3N0b3BfcXVldWVzKHByaXYtPmh3KTsKKworCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkKKwkJCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKKwkJCQkJICAiZGlzYWJsZWQgYnkgU1cgc3dpdGNoXG4iKTsKKwkJZWxzZQorCQkJSVdMX1dBUk4ocHJpdiwgIlJhZGlvIEZyZXF1ZW5jeSBLaWxsIFN3aXRjaCBpcyBPbjpcbiIKKwkJCQkgICAgIktpbGwgc3dpdGNoIG11c3QgYmUgdHVybmVkIG9mZiBmb3IgIgorCQkJCSAgICAid2lyZWxlc3MgbmV0d29ya2luZyB0byB3b3JrLlxuIik7CisJfQorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCWl3bF9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOworfQorRVhQT1JUX1NZTUJPTChpd2xfYmdfcmZfa2lsbCk7CisKK3ZvaWQgaXdsX3J4X3BtX3NsZWVwX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCXN0cnVjdCBpd2xfc2xlZXBfbm90aWZpY2F0aW9uICpzbGVlcCA9ICYocGt0LT51LnNsZWVwX25vdGlmKTsKKwlJV0xfREVCVUdfUlgocHJpdiwgInNsZWVwIG1vZGU6ICVkLCBzcmM6ICVkXG4iLAorCQkgICAgIHNsZWVwLT5wbV9zbGVlcF9tb2RlLCBzbGVlcC0+cG1fd2FrZXVwX3NyYyk7CisjZW5kaWYKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X3BtX3NsZWVwX25vdGlmKTsKKwordm9pZCBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCit7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCUlXTF9ERUJVR19SQURJTyhwcml2LCAiRHVtcGluZyAlZCBieXRlcyBvZiB1bmhhbmRsZWQgIgorCQkJIm5vdGlmaWNhdGlvbiBmb3IgJXM6XG4iLAorCQkJbGUzMl90b19jcHUocGt0LT5sZW4pLCBnZXRfY21kX3N0cmluZyhwa3QtPmhkci5jbWQpKTsKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1JBRElPLCBwa3QtPnUucmF3LCBsZTMyX3RvX2NwdShwa3QtPmxlbikpOworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZik7CisKK3ZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQoreworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKKworCUlXTF9FUlIocHJpdiwgIkVycm9yIFJlcGx5IHR5cGUgMHglMDhYIGNtZCAlcyAoMHglMDJYKSAiCisJCSJzZXEgMHglMDRYIHNlciAweCUwOFhcbiIsCisJCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl90eXBlKSwKKwkJZ2V0X2NtZF9zdHJpbmcocGt0LT51LmVycl9yZXNwLmNtZF9pZCksCisJCXBrdC0+dS5lcnJfcmVzcC5jbWRfaWQsCisJCWxlMTZfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5iYWRfY21kX3NlcV9udW0pLAorCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfaW5mbykpOworfQorRVhQT1JUX1NZTUJPTChpd2xfcnhfcmVwbHlfZXJyb3IpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKaW5kZXggN2MzYTIwYS4uYThlYWM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNzEsNyArNzEsNyBAQAogCiAKICNkZWZpbmUgSVdMV0lGSV9WRVJTSU9OICIxLjMuMjdrIgotI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA4IEludGVsIENvcnBvcmF0aW9uIgorI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA5IEludGVsIENvcnBvcmF0aW9uIgogI2RlZmluZSBEUlZfQVVUSE9SICAgICAiPGlsd0BsaW51eC5pbnRlbC5jb20+IgogCiAjZGVmaW5lIElXTF9QQ0lfREVWSUNFKGRldiwgc3ViZGV2LCBjZmcpIFwKQEAgLTExMCw2ICsxMTAsMTQgQEAKIAl2b2lkICgqdHhxX2ludmFsX2J5dGVfY250X3RibCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwogCXZvaWQgKCp0eHFfc2V0X3NjaGVkKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBtYXNrKTsKKwlpbnQgKCp0eHFfYXR0YWNoX2J1Zl90b190ZmQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkgICAgIGRtYV9hZGRyX3QgYWRkciwKKwkJCQkgICAgIHUxNiBsZW4sIHU4IHJlc2V0LCB1OCBwYWQpOworCXZvaWQgKCp0eHFfZnJlZV90ZmQpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKKwlpbnQgKCp0eHFfaW5pdCkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKIAkvKiBhZ2dyZWdhdGlvbnMgKi8KIAlpbnQgKCp0eHFfYWdnX2VuYWJsZSkoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkLCBpbnQgdHhfZmlmbywKIAkJCSAgICAgIGludCBzdGFfaWQsIGludCB0aWQsIHUxNiBzc25faWR4KTsKQEAgLTIwMyw2ICsyMTEsOSBAQAogCXUxNiAgZWVwcm9tX2NhbGliX3ZlcjsKIAljb25zdCBzdHJ1Y3QgaXdsX29wcyAqb3BzOwogCWNvbnN0IHN0cnVjdCBpd2xfbW9kX3BhcmFtcyAqbW9kX3BhcmFtczsKKwl1OCAgIHZhbGlkX3R4X2FudDsKKwl1OCAgIHZhbGlkX3J4X2FudDsKKwlib29sIG5lZWRfcGxsX2NmZzsKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTIxMywxMSArMjI0LDI2IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfb3BzICpod19vcHMpOwogdm9pZCBpd2xfaHdfZGV0ZWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yZXNldF9xb3Moc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2FjdGl2YXRlX3FvcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IGZvcmNlKTsKK3ZvaWQgaXdsX3NldF9yeG9uX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGh3X2RlY3J5cHQpOworaW50IGl3bF9jaGVja19yeG9uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworaW50IGl3bF9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX3NldF9yeG9uX2NoYWluKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldF9yeG9uX2NoYW5uZWwoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoKTsKIHZvaWQgaXdsX3NldF9yeG9uX2h0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9odF9pbmZvICpodF9pbmZvKTsKIHU4IGl3bF9pc19mYXRfdHhfYWxsb3dlZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpzdGFfaHRfaW5mKTsKK3ZvaWQgaXdsX3NldF9mbGFnc19mb3JfYmFuZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7Cit2b2lkIGl3bF9jb25uZWN0aW9uX2luaXRfcnhfY29uZmlnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpOworaW50IGl3bF9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKKwkJCSAgIHUzMiBkZWNyeXB0X3JlcywKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cyk7Cit2b2lkIGl3bF9pcnFfaGFuZGxlX2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCSAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKKwkJCSAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCk7CiBpbnQgaXdsX2h3X25pY19pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NldHVwX21hYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9zZXRfaHdfcGFyYW1zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC0yMjUsOSArMjUxLDIwIEBACiB2b2lkIGl3bF91bmluaXRfZHJ2KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUlggaGFuZGxlcnMuCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3ZvaWQgaXdsX3J4X3BtX3NsZWVwX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3J4X3JlcGx5X2Vycm9yKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIFJYCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGl3bF9yeF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxKTsKK3ZvaWQgaXdsX2NtZF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3J4X3F1ZXVlX2FsbG9jKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB2b2lkIGl3bF9yeF9oYW5kbGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0yNDUsNiArMjgyLDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4Yik7CiB2b2lkIGl3bF9yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3J4X2NzYShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKIAogLyogVFggaGVscGVycyAqLwogCkBAIC0yNTIsOSArMjkwLDE4IEBACiAqIFRYCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBpbnQgaXdsX3R4cV9jdHhfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CitpbnQgaXdsX2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJCQkgZG1hX2FkZHJfdCBhZGRyLCB1MTYgbGVuLCB1OCByZXNldCwgdTggcGFkKTsKIGludCBpd2xfdHhfc2tiKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGl3bF9od190eHFfY3R4X2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfaHdfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKTsKIGludCBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOworaW50IGl3bF90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLAorCQkgICAgICBpbnQgc2xvdHNfbnVtLCB1MzIgdHhxX2lkKTsKK3ZvaWQgaXdsX3R4X3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgdHhxX2lkKTsKIGludCBpd2xfdHhfYWdnX3N0YXJ0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKnJhLCB1MTYgdGlkLCB1MTYgKnNzbik7CiBpbnQgaXdsX3R4X2FnZ19zdG9wKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiAsIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCk7CiBpbnQgaXdsX3R4cV9jaGVja19lbXB0eShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBzdGFfaWQsIHU4IHRpZCwgaW50IHR4cV9pZCk7CkBAIC0yNjcsNyArMzE0LDcgQEAKICAqIFJGIC1LaWxsIC0gaGVyZSBhbmQgbm90IGluIGl3bC1yZmtpbGwuaCB0byBiZSBhdmFpbGFibGUgd2hlbgogICogUkYta2lsbCBzdWJzeXN0ZW0gaXMgbm90IGNvbXBpbGVkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkIGl3bF9yZl9raWxsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bF9iZ19yZl9raWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGl3bF9yYWRpb19raWxsX3N3X2Rpc2FibGVfcmFkaW8oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfcmFkaW9fa2lsbF9zd19lbmFibGVfcmFkaW8oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIApAQCAtMjc5LDYgKzMyNiwxMCBAQAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvKTsKIGludCBpd2xfaHdyYXRlX3RvX3BsY3BfaWR4KHUzMiByYXRlX25fZmxhZ3MpOwogCit1OCBpd2xfcmF0ZV9nZXRfbG93ZXN0X3BsY3Aoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwordm9pZCBpd2xfc2V0X3JhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwogdTggaXdsX3RvZ2dsZV90eF9hbnQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBhbnRfaWR4KTsKIAogc3RhdGljIGlubGluZSB1MzIgaXdsX2FudF9pZHhfdG9fZmxhZ3ModTggYW50X2lkeCkKQEAgLTMwNiw4ICszNTcsMzAgQEAKIGludCBpd2xfc2Nhbl9jYW5jZWwoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgbXMpOwogaW50IGl3bF9zY2FuX2luaXRpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX21hY19od19zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOwordTE2IGl3bF9maWxsX3Byb2JlX3JlcShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqZnJhbWUsIGludCBsZWZ0KTsKIHZvaWQgaXdsX3NldHVwX3J4X3NjYW5faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3UxNiBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCSAgICAgIHU4IG5fcHJvYmVzKTsKK3UxNiBpd2xfZ2V0X3Bhc3NpdmVfZHdlbGxfdGltZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKK3ZvaWQgaXdsX2JnX3NjYW5fY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKK3ZvaWQgaXdsX2JnX2Fib3J0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgaXdsX2JnX3NjYW5fY29tcGxldGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIGl3bF9zZXR1cF9zY2FuX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfc2VuZF9zY2FuX2Fib3J0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CisKKy8qIEZvciBmYXN0ZXIgYWN0aXZlIHNjYW5uaW5nLCBzY2FuIHdpbGwgbW92ZSB0byB0aGUgbmV4dCBjaGFubmVsIGlmIGZld2VyIHRoYW4KKyAqIFBMQ1BfUVVJRVRfVEhSRVNIIHBhY2tldHMgYXJlIGhlYXJkIG9uIHRoaXMgY2hhbm5lbCB3aXRoaW4KKyAqIEFDVElWRV9RVUlFVF9USU1FIGFmdGVyIHNlbmRpbmcgcHJvYmUgcmVxdWVzdC4gIFRoaXMgc2hvcnRlbnMgdGhlIGR3ZWxsCisgKiB0aW1lIGlmIGl0J3MgYSBxdWlldCBjaGFubmVsIChub3RoaW5nIHJlc3BvbmRlZCB0byBvdXIgcHJvYmUsIGFuZCB0aGVyZSdzCisgKiBubyBvdGhlciB0cmFmZmljKS4KKyAqIERpc2FibGUgInF1aWV0IiBmZWF0dXJlIGJ5IHNldHRpbmcgUExDUF9RVUlFVF9USFJFU0ggdG8gMC4gKi8KKyNkZWZpbmUgSVdMX0FDVElWRV9RVUlFVF9USU1FICAgICAgIGNwdV90b19sZTE2KDEwKSAgLyogbXNlYyAqLworI2RlZmluZSBJV0xfUExDUF9RVUlFVF9USFJFU0ggICAgICAgY3B1X3RvX2xlMTYoMSkgIC8qIHBhY2tldHMgKi8KKwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQ2FsaWJyYXRpb25zIC0gaW1wbGVtZW50ZWQgaW4gaXdsLWNhbGliLmMKQEAgLTMxOSw3ICszOTIsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNwZWN0cnVtIE1lYXN1cmVlbXRucyBpbiAgaXdsLXNwZWN0cnVtLmMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgQ09ORklHX0lXTEFHTl9TUEVDVFJVTV9NRUFTVVJFTUVOVAorI2lmZGVmIENPTkZJR19JV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UCiB2b2lkIGl3bF9zZXR1cF9zcGVjdHJ1bV9oYW5kbGVycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KSB7fQpAQCAtMzQyLDExICs0MTUsMjMgQEAKIAogaW50IGl3bF9lbnF1ZXVlX2hjbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX2hvc3RfY21kICpjbWQpOwogCitpbnQgaXdsX3NlbmRfY2FyZF9zdGF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBmbGFncywKKwkJCXU4IG1ldGFfZmxhZyk7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogUENJCQkJCQkJICAgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB2b2lkIGl3bF9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpcnFyZXR1cm5fdCBpd2xfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpOworc3RhdGljIGlubGluZSB1MTYgaXdsX3BjaWVfbGlua19jdGwoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCBwb3M7CisJdTE2IHBjaV9sbmtfY3RsOworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocHJpdi0+cGNpX2RldiwgUENJX0NBUF9JRF9FWFApOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCAmcGNpX2xua19jdGwpOworCXJldHVybiBwY2lfbG5rX2N0bDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqICBFcnJvciBIYW5kbGluZyBEZWJ1Z2dpbmcKQEAgLTM1NCw2ICs0MzksMTEgQEAKIHZvaWQgaXdsX2R1bXBfbmljX2Vycm9yX2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgR0VPUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGl3bGNvcmVfaW5pdF9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Cit2b2lkIGl3bGNvcmVfZnJlZV9nZW9zKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiAKIC8qKioqKioqKioqKioqKiogRFJJVkVSIFNUQVRVUyBGVU5DVElPTlMgICAqKioqKi8KIApAQCAtNDIyLDYgKzUxMiw3IEBACiB9CiAKIGV4dGVybiB2b2lkIGl3bF9yZl9raWxsX2N0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworZXh0ZXJuIGludCBpd2xfc2VuZF9idF9jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGV4dGVybiBpbnQgaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggZmxhZ3MpOwogZXh0ZXJuIGludCBpd2xfdmVyaWZ5X3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBleHRlcm4gaW50IGl3bF9zZW5kX2xxX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCmluZGV4IGYzNGVkZTQuLjJmMTI0MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjExLDYgKzIxMSw5IEBACiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV81MzUwICAgICAgICAgICAoMHgwMDAwMDMwKQogI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNTEwMCAgICAgICAgICAgKDB4MDAwMDA1MCkKICNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzUxNTAgICAgICAgICAgICgweDAwMDAwNDApCisjZGVmaW5lIENTUl9IV19SRVZfVFlQRV8xMDAwICAgICAgICAgICAoMHgwMDAwMDYwKQorI2RlZmluZSBDU1JfSFdfUkVWX1RZUEVfNngwMCAgICAgICAgICAgKDB4MDAwMDA3MCkKKyNkZWZpbmUgQ1NSX0hXX1JFVl9UWVBFXzZ4NTAgICAgICAgICAgICgweDAwMDAwODApCiAjZGVmaW5lIENTUl9IV19SRVZfVFlQRV9OT05FICAgICAgICAgICAoMHgwMDAwMEYwKQogCiAvKiBFRVBST00gUkVHICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaAppbmRleCA1NmMxM2I0Li42NWQxYTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtMjksMTYgKzI5LDI5IEBACiAjaWZuZGVmIF9faXdsX2RlYnVnX2hfXwogI2RlZmluZSBfX2l3bF9kZWJ1Z19oX18KIAotI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCi0jZGVmaW5lIElXTF9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBcCi1kbyB7IGlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKLSAgZGV2X3ByaW50ayhLRVJOX0VSUiwgJihwcml2LT5ody0+d2lwaHktPmRldiksICIlYyAlcyAiIGZtdCwgXAotCSBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywgX19mdW5jX18gLCAjIyBhcmdzKTsgfSB3aGlsZSAoMCkKK3N0cnVjdCBpd2xfcHJpdjsKIAotI2RlZmluZSBJV0xfREVCVUdfTElNSVQobGV2ZWwsIGZtdCwgYXJncy4uLikgXAotZG8geyBpZiAoKHByaXYtPmRlYnVnX2xldmVsICYgKGxldmVsKSkgJiYgbmV0X3JhdGVsaW1pdCgpKSBcCi0gIGRldl9wcmludGsoS0VSTl9FUlIsICYocHJpdi0+aHctPndpcGh5LT5kZXYpLCAiJWMgJXMgIiBmbXQsIFwKLQkgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fZnVuY19fICwgIyMgYXJncyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIElXTF9FUlIocCwgZiwgYS4uLikgZGV2X2VycigmKChwKS0+cGNpX2Rldi0+ZGV2KSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX1dBUk4ocCwgZiwgYS4uLikgZGV2X3dhcm4oJigocCktPnBjaV9kZXYtPmRldiksIGYsICMjIGEpCisjZGVmaW5lIElXTF9JTkZPKHAsIGYsIGEuLi4pIGRldl9pbmZvKCYoKHApLT5wY2lfZGV2LT5kZXYpLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfQ1JJVChwLCBmLCBhLi4uKSBkZXZfY3JpdCgmKChwKS0+cGNpX2Rldi0+ZGV2KSwgZiwgIyMgYSkKKworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisjZGVmaW5lIElXTF9ERUJVRyhfX3ByaXYsIGxldmVsLCBmbXQsIGFyZ3MuLi4pCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKF9fcHJpdi0+ZGVidWdfbGV2ZWwgJiAobGV2ZWwpKQkJCQlcCisJCWRldl9wcmludGsoS0VSTl9FUlIsICYoX19wcml2LT5ody0+d2lwaHktPmRldiksCQlcCisJCQkgIiVjICVzICIgZm10LCBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywJXAorCQkJX19mdW5jX18gLCAjIyBhcmdzKTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBJV0xfREVCVUdfTElNSVQoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKChfX3ByaXYtPmRlYnVnX2xldmVsICYgKGxldmVsKSkgJiYgbmV0X3JhdGVsaW1pdCgpKQkJXAorCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmKF9fcHJpdi0+aHctPndpcGh5LT5kZXYpLAkJXAorCQkJIiVjICVzICIgZm10LCBpbl9pbnRlcnJ1cHQoKSA/ICdJJyA6ICdVJywJXAorCQkJIF9fZnVuY19fICwgIyMgYXJncyk7CQkJCVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIGxldmVsLCBwLCBsZW4pIAkJCVwKIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCVwKQEAgLTYxLDYgKzc0LDcgQEAKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV90eF9zdGF0aXN0aWNzOwogCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2xvZ19ldmVudDsKIAkJc3RydWN0IGRlbnRyeSAqZmlsZV9jaGFubmVsczsKKwkJc3RydWN0IGRlbnRyeSAqZmlsZV9zdGF0dXM7CiAJfSBkYmdmc19kYXRhX2ZpbGVzOwogCXN0cnVjdCBkaXJfcmZfZmlsZXMgewogCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHk7CkBAIC03Niw4ICs5MCw4IEBACiAjZW5kaWYKIAogI2Vsc2UKLSNkZWZpbmUgSVdMX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pCi0jZGVmaW5lIElXTF9ERUJVR19MSU1JVChsZXZlbCwgZm10LCBhcmdzLi4uKQorI2RlZmluZSBJV0xfREVCVUcoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQorI2RlZmluZSBJV0xfREVCVUdfTElNSVQoX19wcml2LCBsZXZlbCwgZm10LCBhcmdzLi4uKQogc3RhdGljIGlubGluZSB2b2lkIGl3bF9wcmludF9oZXhfZHVtcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBsZXZlbCwKIAkJCQkgICAgICB2b2lkICpwLCB1MzIgbGVuKQoge30KQEAgLTExNyw4NCArMTMxLDg1IEBACiAgKiB3aGVuIENPTkZJR19JV0xXSUZJX0RFQlVHPXkuCiAgKi8KIAorLyogMHgwMDAwMDAwRiAtIDB4MDAwMDAwMDEgKi8KICNkZWZpbmUgSVdMX0RMX0lORk8JCSgxIDw8IDApCiAjZGVmaW5lIElXTF9ETF9NQUM4MDIxMQkJKDEgPDwgMSkKICNkZWZpbmUgSVdMX0RMX0hDTUQJCSgxIDw8IDIpCiAjZGVmaW5lIElXTF9ETF9TVEFURQkJKDEgPDwgMykKKy8qIDB4MDAwMDAwRjAgLSAweDAwMDAwMDEwICovCiAjZGVmaW5lIElXTF9ETF9NQUNEVU1QCQkoMSA8PCA0KQogI2RlZmluZSBJV0xfRExfSENNRF9EVU1QCSgxIDw8IDUpCi0jZGVmaW5lIElXTF9ETF9SQURJTyAgICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIElXTF9ETF9QT1dFUiAgICAgICAgICgxIDw8IDgpCi0jZGVmaW5lIElXTF9ETF9URU1QICAgICAgICAgICgxIDw8IDkpCisjZGVmaW5lIElXTF9ETF9SQURJTwkJKDEgPDwgNykKKy8qIDB4MDAwMDBGMDAgLSAweDAwMDAwMTAwICovCisjZGVmaW5lIElXTF9ETF9QT1dFUgkJKDEgPDwgOCkKKyNkZWZpbmUgSVdMX0RMX1RFTVAJCSgxIDw8IDkpCisjZGVmaW5lIElXTF9ETF9OT1RJRgkJKDEgPDwgMTApCisjZGVmaW5lIElXTF9ETF9TQ0FOCQkoMSA8PCAxMSkKKy8qIDB4MDAwMEYwMDAgLSAweDAwMDAxMDAwICovCisjZGVmaW5lIElXTF9ETF9BU1NPQwkJKDEgPDwgMTIpCisjZGVmaW5lIElXTF9ETF9EUk9QCQkoMSA8PCAxMykKKyNkZWZpbmUgSVdMX0RMX1RYUE9XRVIJCSgxIDw8IDE0KQorI2RlZmluZSBJV0xfRExfQVAJCSgxIDw8IDE1KQorLyogMHgwMDBGMDAwMCAtIDB4MDAwMTAwMDAgKi8KKyNkZWZpbmUgSVdMX0RMX0ZXCQkoMSA8PCAxNikKKyNkZWZpbmUgSVdMX0RMX1JGX0tJTEwJCSgxIDw8IDE3KQorI2RlZmluZSBJV0xfRExfRldfRVJST1JTCSgxIDw8IDE4KQorI2RlZmluZSBJV0xfRExfTEVECQkoMSA8PCAxOSkKKy8qIDB4MDBGMDAwMDAgLSAweDAwMTAwMDAwICovCisjZGVmaW5lIElXTF9ETF9SQVRFCQkoMSA8PCAyMCkKKyNkZWZpbmUgSVdMX0RMX0NBTElCCQkoMSA8PCAyMSkKKyNkZWZpbmUgSVdMX0RMX1dFUAkJKDEgPDwgMjIpCisjZGVmaW5lIElXTF9ETF9UWAkJKDEgPDwgMjMpCisvKiAweDBGMDAwMDAwIC0gMHgwMTAwMDAwMCAqLworI2RlZmluZSBJV0xfRExfUlgJCSgxIDw8IDI0KQorI2RlZmluZSBJV0xfRExfSVNSCQkoMSA8PCAyNSkKKyNkZWZpbmUgSVdMX0RMX0hUCQkoMSA8PCAyNikKKyNkZWZpbmUgSVdMX0RMX0lPCQkoMSA8PCAyNykKKy8qIDB4RjAwMDAwMDAgLSAweDEwMDAwMDAwICovCisjZGVmaW5lIElXTF9ETF8xMUgJCSgxIDw8IDI4KQorI2RlZmluZSBJV0xfRExfU1RBVFMJCSgxIDw8IDI5KQorI2RlZmluZSBJV0xfRExfVFhfUkVQTFkJCSgxIDw8IDMwKQorI2RlZmluZSBJV0xfRExfUU9TCQkoMSA8PCAzMSkKIAotI2RlZmluZSBJV0xfRExfTk9USUYgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgSVdMX0RMX1NDQU4gICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIElXTF9ETF9BU1NPQyAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBJV0xfRExfRFJPUCAgICAgICAgICAoMSA8PCAxMykKLQotI2RlZmluZSBJV0xfRExfVFhQT1dFUiAgICAgICAoMSA8PCAxNCkKLQotI2RlZmluZSBJV0xfRExfQVAgICAgICAgICAgICAoMSA8PCAxNSkKLQotI2RlZmluZSBJV0xfRExfRlcgICAgICAgICAgICAoMSA8PCAxNikKLSNkZWZpbmUgSVdMX0RMX1JGX0tJTEwgICAgICAgKDEgPDwgMTcpCi0jZGVmaW5lIElXTF9ETF9GV19FUlJPUlMgICAgICgxIDw8IDE4KQotCi0jZGVmaW5lIElXTF9ETF9MRUQgICAgICAgICAgICgxIDw8IDE5KQotCi0jZGVmaW5lIElXTF9ETF9SQVRFICAgICAgICAgICgxIDw8IDIwKQotCi0jZGVmaW5lIElXTF9ETF9DQUxJQiAgICAgICAgICgxIDw8IDIxKQotI2RlZmluZSBJV0xfRExfV0VQICAgICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgSVdMX0RMX1RYICAgICAgICAgICAgKDEgPDwgMjMpCi0jZGVmaW5lIElXTF9ETF9SWCAgICAgICAgICAgICgxIDw8IDI0KQotI2RlZmluZSBJV0xfRExfSVNSICAgICAgICAgICAoMSA8PCAyNSkKLSNkZWZpbmUgSVdMX0RMX0hUICAgICAgICAgICAgKDEgPDwgMjYpCi0jZGVmaW5lIElXTF9ETF9JTyAgICAgICAgICAgICgxIDw8IDI3KQotI2RlZmluZSBJV0xfRExfMTFIICAgICAgICAgICAoMSA8PCAyOCkKLQotI2RlZmluZSBJV0xfRExfU1RBVFMgICAgICAgICAoMSA8PCAyOSkKLSNkZWZpbmUgSVdMX0RMX1RYX1JFUExZICAgICAgKDEgPDwgMzApCi0jZGVmaW5lIElXTF9ETF9RT1MgICAgICAgICAgICgxIDw8IDMxKQotCi0jZGVmaW5lIElXTF9FUlJPUihmLCBhLi4uKSBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogIiBmLCAjIyBhKQotI2RlZmluZSBJV0xfV0FSTklORyhmLCBhLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lORk8oZiwgYS4uLikgICAgSVdMX0RFQlVHKElXTF9ETF9JTkZPLCBmLCAjIyBhKQotCi0jZGVmaW5lIElXTF9ERUJVR19NQUM4MDIxMShmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9NQUM4MDIxMSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX01BQ0RVTVAoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfTUFDRFVNUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1RFTVAoZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1RFTVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19TQ0FOKGYsIGEuLi4pICAgSVdMX0RFQlVHKElXTF9ETF9TQ0FOLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUlgoZiwgYS4uLikgICAgIElXTF9ERUJVRyhJV0xfRExfUlgsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWChmLCBhLi4uKSAgICAgSVdMX0RFQlVHKElXTF9ETF9UWCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lTUihmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX0lTUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0xFRChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0xFRCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1dFUChmLCBhLi4uKSAgICBJV0xfREVCVUcoSVdMX0RMX1dFUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0hDKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSENNRCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0hDX0RVTVAoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9IQ01EX0RVTVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19DQUxJQihmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0NBTElCLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRlcoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9GVywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JGX0tJTEwoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9SRl9LSUxMLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfRFJPUChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0RST1AsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19EUk9QX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfRFJPUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FQKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVAsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWFBPV0VSKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfVFhQT1dFUiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0lPKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfSU8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19SQVRFKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfUkFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JBVEVfTElNSVQoZiwgYS4uLikgSVdMX0RFQlVHX0xJTUlUKElXTF9ETF9SQVRFLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfTk9USUYoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9OT1RJRiwgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DKGYsIGEuLi4pIElXTF9ERUJVRyhJV0xfRExfQVNTT0MgfCBJV0xfRExfSU5GTywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX0FTU09DX0xJTUlUKGYsIGEuLi4pIFwKLQlJV0xfREVCVUdfTElNSVQoSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19IVChmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX0hULCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfU1RBVFMoZiwgYS4uLikgSVdMX0RFQlVHKElXTF9ETF9TVEFUUywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1NUQVRTX0xJTUlUKGYsIGEuLi4pIElXTF9ERUJVR19MSU1JVChJV0xfRExfU1RBVFMsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19UWF9SRVBMWShmLCBhLi4uKSBJV0xfREVCVUcoSVdMX0RMX1RYX1JFUExZLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFlfTElNSVQoZiwgYS4uLikgXAotCUlXTF9ERUJVR19MSU1JVChJV0xfRExfVFhfUkVQTFksIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR19RT1MoZiwgYS4uLikgICBJV0xfREVCVUcoSVdMX0RMX1FPUywgZiwgIyMgYSkKLSNkZWZpbmUgSVdMX0RFQlVHX1JBRElPKGYsIGEuLi4pICBJV0xfREVCVUcoSVdMX0RMX1JBRElPLCBmLCAjIyBhKQotI2RlZmluZSBJV0xfREVCVUdfUE9XRVIoZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfUE9XRVIsIGYsICMjIGEpCi0jZGVmaW5lIElXTF9ERUJVR18xMUgoZiwgYS4uLikgIElXTF9ERUJVRyhJV0xfRExfMTFILCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfSU5GTyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0lORk8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19NQUM4MDIxMShwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX01BQzgwMjExLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfTUFDRFVNUChwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX01BQ0RVTVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19URU1QKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfVEVNUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1NDQU4ocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9TQ0FOLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfUlgocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9SWCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1RYKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfVFgsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19JU1IocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9JU1IsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19MRUQocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9MRUQsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19XRVAocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9XRVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19IQyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX0hDTUQsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19IQ19EVU1QKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSENNRF9EVU1QLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfQ0FMSUIocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9DQUxJQiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0ZXKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfRlcsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19SRl9LSUxMKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfUkZfS0lMTCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0RST1AocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9EUk9QLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfRFJPUF9MSU1JVChwLCBmLCBhLi4uKQlcCisJCUlXTF9ERUJVR19MSU1JVChwLCBJV0xfRExfRFJPUCwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0FQKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfQVAsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19UWFBPV0VSKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfVFhQT1dFUiwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0lPKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSU8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19SQVRFKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfUkFURSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1JBVEVfTElNSVQocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX1JBVEUsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19OT1RJRihwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX05PVElGLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfQVNTT0MocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUcocCwgSVdMX0RMX0FTU09DIHwgSVdMX0RMX0lORk8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19BU1NPQ19MSU1JVChwLCBmLCBhLi4uKQlcCisJCUlXTF9ERUJVR19MSU1JVChwLCBJV0xfRExfQVNTT0MgfCBJV0xfRExfSU5GTywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX0hUKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfSFQsIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19TVEFUUyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfU1RBVFNfTElNSVQocCwgZiwgYS4uLikJXAorCQlJV0xfREVCVUdfTElNSVQocCwgSVdMX0RMX1NUQVRTLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfVFhfUkVQTFkocCwgZiwgYS4uLikJSVdMX0RFQlVHKHAsIElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1RYX1JFUExZX0xJTUlUKHAsIGYsIGEuLi4pIFwKKwkJSVdMX0RFQlVHX0xJTUlUKHAsIElXTF9ETF9UWF9SRVBMWSwgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1FPUyhwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1FPUywgZiwgIyMgYSkKKyNkZWZpbmUgSVdMX0RFQlVHX1JBRElPKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfUkFESU8sIGYsICMjIGEpCisjZGVmaW5lIElXTF9ERUJVR19QT1dFUihwLCBmLCBhLi4uKQlJV0xfREVCVUcocCwgSVdMX0RMX1BPV0VSLCBmLCAjIyBhKQorI2RlZmluZSBJV0xfREVCVUdfMTFIKHAsIGYsIGEuLi4pCUlXTF9ERUJVRyhwLCBJV0xfRExfMTFILCBmLCAjIyBhKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYwppbmRleCBkNTI1M2ExLi42NGViNTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCkBAIC0yLDcgKzIsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTYzLDYgKzYzLDE0IEBACiAJCWdvdG8gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSB3aGlsZSAoMCkKIAorI2RlZmluZSBERUJVR0ZTX0FERF9YMzIobmFtZSwgcGFyZW50LCBwdHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCisJZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKKwlkZWJ1Z2ZzX2NyZWF0ZV94MzIoI25hbWUsIDA0NDQsIGRiZ2ZzLT5kaXJfIyNwYXJlbnQsIHB0cik7ICAgICBcCisJaWYgKElTX0VSUihkYmdmcy0+ZGJnZnNfIyNwYXJlbnQjI19maWxlcy5maWxlXyMjbmFtZSkJCVwKKwkJCXx8ICFkYmdmcy0+ZGJnZnNfIyNwYXJlbnQjI19maWxlcy5maWxlXyMjbmFtZSkJXAorCQlnb3RvIGVycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKICNkZWZpbmUgREVCVUdGU19SRU1PVkUobmFtZSkgIGRvIHsgICAgICAgICAgICAgIFwKIAlkZWJ1Z2ZzX3JlbW92ZShuYW1lKTsgICAgICAgICAgICAgICAgICAgXAogCW5hbWUgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNjQsOSArMTcyLDYgQEAKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgIm9mZnNldCBpczogMHgleFx0bGVuIGlzOiAweCV4XG4iLAotCXByaXYtPmRiZ2ZzLT5zcmFtX29mZnNldCwgcHJpdi0+ZGJnZnMtPnNyYW1fbGVuKTsKLQogCWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdik7CiAJZm9yIChpID0gcHJpdi0+ZGJnZnMtPnNyYW1fbGVuOyBpID4gMDsgaSAtPSA0KSB7CiAJCXZhbCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHByaXYtPmRiZ2ZzLT5zcmFtX29mZnNldCArIFwKQEAgLTMwMSwxNCArMzA2LDE0IEBACiAJYnVmX3NpemUgPSA0ICogZWVwcm9tX2xlbiArIDI1NjsKIAogCWlmIChlZXByb21fbGVuICUgMTYpIHsKLQkJSVdMX0VSUk9SKCJFRVBST00gc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMTYuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRUVQUk9NIHNpemUgaXMgbm90IG11bHRpcGxlIG9mIDE2LlxuIik7CiAJCXJldHVybiAtRU5PREFUQTsKIAl9CiAKIAkvKiA0IGNoYXJhY3RlcnMgZm9yIGJ5dGUgMHhZWSAqLwogCWJ1ZiA9IGt6YWxsb2MoYnVmX3NpemUsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKSB7Ci0JCUlXTF9FUlJPUigiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOworCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMzY1LDcgKzM3MCw3IEBACiAKIAlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgQnVmZmVyXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQyMCw2ICs0MjUsNTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfc3RhdHVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls1MTJdOworCWludCBwb3MgPSAwOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX0hDTURfQUNUSVZFOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfSENNRF9TWU5DX0FDVElWRTogJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX0lOVF9FTkFCTEVEOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfUkZfS0lMTF9IVzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfUkZfS0lMTF9TVzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfSU5JVDpcdFx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfSU5JVCwgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19BTElWRTpcdFx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfUkVBRFk6XHRcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX1RFTVBFUkFUVVJFOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfVEVNUEVSQVRVUkUsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfR0VPX0NPTkZJR1VSRUQ6XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19FWElUX1BFTkRJTkc6XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfSU5fU1VTUEVORDpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfU1RBVElTVElDUzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1NUQVRJU1RJQ1MsICZwcml2LT5zdGF0dXMpKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfU0NBTk5JTkc6XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19TQ0FOX0FCT1JUSU5HOlx0ICVkXG4iLAorCQl0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19TQ0FOX0hXOlx0XHQgJWRcbiIsCisJCXRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX1BPV0VSX1BNSTpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cykpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlNUQVRVU19GV19FUlJPUjpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX01PREVfUEVORElORzpcdCAlZFxuIiwKKwkJdGVzdF9iaXQoU1RBVFVTX01PREVfUEVORElORywgJnByaXYtPnN0YXR1cykpOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKK30KIAogREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHNyYW0pOwogREVCVUdGU19XUklURV9GSUxFX09QUyhsb2dfZXZlbnQpOwpAQCAtNDI4LDYgKzQ4Miw3IEBACiBERUJVR0ZTX1JFQURfRklMRV9PUFMocnhfc3RhdGlzdGljcyk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFModHhfc3RhdGlzdGljcyk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFMoY2hhbm5lbHMpOworREVCVUdGU19SRUFEX0ZJTEVfT1BTKHN0YXR1cyk7CiAKIC8qCiAgKiBDcmVhdGUgdGhlIGRlYnVnZnMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCkBAIC00NjIsNiArNTE3LDcgQEAKIAlERUJVR0ZTX0FERF9GSUxFKHJ4X3N0YXRpc3RpY3MsIGRhdGEpOwogCURFQlVHRlNfQUREX0ZJTEUodHhfc3RhdGlzdGljcywgZGF0YSk7CiAJREVCVUdGU19BRERfRklMRShjaGFubmVscywgZGF0YSk7CisJREVCVUdGU19BRERfRklMRShzdGF0dXMsIGRhdGEpOwogCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV9zZW5zaXRpdml0eSwgcmYsICZwcml2LT5kaXNhYmxlX3NlbnNfY2FsKTsKIAlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfY2hhaW5fbm9pc2UsIHJmLAogCQkJICZwcml2LT5kaXNhYmxlX2NoYWluX25vaXNlX2NhbCk7CkBAIC00NjksNyArNTI1LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyOgotCUlXTF9FUlJPUigiQ2FuJ3Qgb3BlbiB0aGUgZGVidWdmcyBkaXJlY3RvcnlcbiIpOworCUlXTF9FUlIocHJpdiwgIkNhbid0IG9wZW4gdGhlIGRlYnVnZnMgZGlyZWN0b3J5XG4iKTsKIAlpd2xfZGJnZnNfdW5yZWdpc3Rlcihwcml2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDkxLDYgKzU0Nyw3IEBACiAJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9sb2dfZXZlbnQpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdGlvbnMpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfY2hhbm5lbHMpOworCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc3RhdHVzKTsKIAlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGlyX2RhdGEpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHkpOwogCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfY2hhaW5fbm9pc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAppbmRleCAwNDY4ZmNjLi5lYzlhMTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zNiwxMyArMzYsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAKLSNkZWZpbmUgRFJWX05BTUUgICAgICAgICJpd2xhZ24iCi0jaW5jbHVkZSAiaXdsLXJma2lsbC5oIgogI2luY2x1ZGUgIml3bC1lZXByb20uaCIKLSNpbmNsdWRlICJpd2wtNDk2NS1ody5oIgogI2luY2x1ZGUgIml3bC1jc3IuaCIKICNpbmNsdWRlICJpd2wtcHJwaC5oIgorI2luY2x1ZGUgIml3bC1maC5oIgogI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgorI2luY2x1ZGUgIml3bC1yZmtpbGwuaCIKKyNpbmNsdWRlICJpd2wtNDk2NS1ody5oIgorI2luY2x1ZGUgIml3bC0zOTQ1LWh3LmgiCisjaW5jbHVkZSAiaXdsLTM5NDUtbGVkLmgiCiAjaW5jbHVkZSAiaXdsLWxlZC5oIgogI2luY2x1ZGUgIml3bC1wb3dlci5oIgogI2luY2x1ZGUgIml3bC1hZ24tcnMuaCIKQEAgLTU1LDYgKzU3LDI4IEBACiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9iZ19jZmc7CiBleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9hYmdfY2ZnOwogZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDUxNTBfYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwXzJhZ19jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjAwMF8yYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDAwXzNhZ25fY2ZnOworZXh0ZXJuIHN0cnVjdCBpd2xfY2ZnIGl3bDYwNTBfMmFnbl9jZmc7CitleHRlcm4gc3RydWN0IGl3bF9jZmcgaXdsNjA1MF8zYWduX2NmZzsKK2V4dGVybiBzdHJ1Y3QgaXdsX2NmZyBpd2wxMDAwX2Jnbl9jZmc7CisKKy8qIHNoYXJlZCBzdHJ1Y3R1cmVzIGZyb20gaXdsLTUwMDAuYyAqLworZXh0ZXJuIHN0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2w1MF9tb2RfcGFyYW1zOworZXh0ZXJuIHN0cnVjdCBpd2xfb3BzIGl3bDUwMDBfb3BzOworZXh0ZXJuIHN0cnVjdCBpd2xfbGliX29wcyBpd2w1MDAwX2xpYjsKK2V4dGVybiBzdHJ1Y3QgaXdsX2hjbWRfb3BzIGl3bDUwMDBfaGNtZDsKK2V4dGVybiBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDUwMDBfaGNtZF91dGlsczsKKworLyogc2hhcmVkIGZ1bmN0aW9ucyBmcm9tIGl3bC01MDAwLmMgKi8KK2V4dGVybiB1MTYgaXdsNTAwMF9nZXRfaGNtZF9zaXplKHU4IGNtZF9pZCwgdTE2IGxlbik7CitleHRlcm4gdTE2IGl3bDUwMDBfYnVpbGRfYWRkc3RhX2hjbWQoY29uc3Qgc3RydWN0IGl3bF9hZGRzdGFfY21kICpjbWQsCisJCQkJICAgICB1OCAqZGF0YSk7CitleHRlcm4gdm9pZCBpd2w1MDAwX3J0c190eF9jbWRfZmxhZyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCisJCQkJICAgIF9fbGUzMiAqdHhfZmxhZ3MpOworZXh0ZXJuIGludCBpd2w1MDAwX2NhbGNfcnNzaShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgIHN0cnVjdCBpd2xfcnhfcGh5X3JlcyAqcnhfcmVzcCk7CiAKIC8qIENULUtJTEwgY29uc3RhbnRzICovCiAjZGVmaW5lIENUX0tJTExfVEhSRVNIT0xECTExMCAvKiBpbiBDZWxzaXVzICovCkBAIC0xMzIsOSArMTU2LDEyIEBACiAgKiBBIFR4IHF1ZXVlIGNvbnNpc3RzIG9mIGNpcmN1bGFyIGJ1ZmZlciBvZiBCRHMgKGEuay5hLiBURkRzLCB0cmFuc21pdCBmcmFtZQogICogZGVzY3JpcHRvcnMpIGFuZCByZXF1aXJlZCBsb2NraW5nIHN0cnVjdHVyZXMuCiAgKi8KKyNkZWZpbmUgVEZEX1RYX0NNRF9TTE9UUyAyNTYKKyNkZWZpbmUgVEZEX0NNRF9TTE9UUyAzMgorCiBzdHJ1Y3QgaXdsX3R4X3F1ZXVlIHsKIAlzdHJ1Y3QgaXdsX3F1ZXVlIHE7Ci0Jc3RydWN0IGl3bF90ZmQgKnRmZHM7CisJdm9pZCAqdGZkczsKIAlzdHJ1Y3QgaXdsX2NtZCAqY21kW1RGRF9UWF9DTURfU0xPVFNdOwogCXN0cnVjdCBpd2xfdHhfaW5mbyAqdHhiOwogCXU4IG5lZWRfdXBkYXRlOwpAQCAtMTU0LDYgKzE4MSwzNiBAQAogCXM2NCBsYXN0X3JhZGFyX3RpbWU7CiB9OwogCisjZGVmaW5lIElXTDQ5NjVfTUFYX1JBVEUgKDMzKQorCitzdHJ1Y3QgaXdsMzk0NV9jbGlwX2dyb3VwIHsKKwkvKiBtYXhpbXVtIHBvd2VyIGxldmVsIHRvIHByZXZlbnQgY2xpcHBpbmcgZm9yIGVhY2ggcmF0ZSwgZGVyaXZlZCBieQorCSAqICAgdXMgZnJvbSB0aGlzIGJhbmQncyBzYXR1cmF0aW9uIHBvd2VyIGluIEVFUFJPTSAqLworCWNvbnN0IHM4IGNsaXBfcG93ZXJzW0lXTF9NQVhfUkFURVNdOworfTsKKworLyogY3VycmVudCBUeCBwb3dlciB2YWx1ZXMgdG8gdXNlLCBvbmUgZm9yIGVhY2ggcmF0ZSBmb3IgZWFjaCBjaGFubmVsLgorICogcmVxdWVzdGVkIHBvd2VyIGlzIGxpbWl0ZWQgYnk6CisgKiAtLSByZWd1bGF0b3J5IEVFUFJPTSBsaW1pdHMgZm9yIHRoaXMgY2hhbm5lbAorICogLS0gaGFyZHdhcmUgY2FwYWJpbGl0aWVzIChjbGlwLXBvd2VycykKKyAqIC0tIHNwZWN0cnVtIG1hbmFnZW1lbnQKKyAqIC0tIHVzZXIgcHJlZmVyZW5jZSAoZS5nLiBpd2NvbmZpZykKKyAqIHdoZW4gcmVxdWVzdGVkIHBvd2VyIGlzIHNldCwgYmFzZSBwb3dlciBpbmRleCBtdXN0IGFsc28gYmUgc2V0LiAqLworc3RydWN0IGl3bDM5NDVfY2hhbm5lbF9wb3dlcl9pbmZvIHsKKwlzdHJ1Y3QgaXdsMzk0NV90eF9wb3dlciB0cGM7CS8qIGFjdHVhbCByYWRpbyBhbmQgRFNQIGdhaW4gc2V0dGluZ3MgKi8KKwlzOCBwb3dlcl90YWJsZV9pbmRleDsJLyogYWN0dWFsIChjb21wZW5zdCdkKSBpbmRleCBpbnRvIGdhaW4gdGFibGUgKi8KKwlzOCBiYXNlX3Bvd2VyX2luZGV4OwkvKiBnYWluIGluZGV4IGZvciBwb3dlciBhdCBmYWN0b3J5IHRlbXAuICovCisJczggcmVxdWVzdGVkX3Bvd2VyOwkvKiBwb3dlciAoZEJtKSByZXF1ZXN0ZWQgZm9yIHRoaXMgY2hubC9yYXRlICovCit9OworCisvKiBjdXJyZW50IHNjYW4gVHggcG93ZXIgdmFsdWVzIHRvIHVzZSwgb25lIGZvciBlYWNoIHNjYW4gcmF0ZSBmb3IgZWFjaAorICogY2hhbm5lbC4gKi8KK3N0cnVjdCBpd2wzOTQ1X3NjYW5fcG93ZXJfaW5mbyB7CisJc3RydWN0IGl3bDM5NDVfdHhfcG93ZXIgdHBjOwkvKiBhY3R1YWwgcmFkaW8gYW5kIERTUCBnYWluIHNldHRpbmdzICovCisJczggcG93ZXJfdGFibGVfaW5kZXg7CS8qIGFjdHVhbCAoY29tcGVuc3QnZCkgaW5kZXggaW50byBnYWluIHRhYmxlICovCisJczggcmVxdWVzdGVkX3Bvd2VyOwkvKiBzY2FuIHB3ciAoZEJtKSByZXF1ZXN0ZWQgZm9yIGNobmwvcmF0ZSAqLworfTsKKwogLyoKICAqIE9uZSBmb3IgZWFjaCBjaGFubmVsLCBob2xkcyBhbGwgY2hhbm5lbCBzZXR1cCBkYXRhCiAgKiBTb21lIG9mIHRoZSBmaWVsZHMgKGUuZy4gZWVwcm9tIGFuZCBmbGFncy9tYXhfcG93ZXJfYXZnKSBhcmUgcmVkdW5kYW50CkBAIC0xODQsOCArMjQxLDE1IEBACiAJczggZmF0X3NjYW5fcG93ZXI7CS8qIChkQm0pIGVlcHJvbSwgZGlyZWN0IHNjYW5zLCBhbnkgcmF0ZSAqLwogCXU4IGZhdF9mbGFnczsJCS8qIGZsYWdzIGNvcGllZCBmcm9tIEVFUFJPTSAqLwogCXU4IGZhdF9leHRlbnNpb25fY2hhbm5lbDsgLyogSFRfSUVfRVhUX0NIQU5ORUxfKiAqLwotfTsKIAorCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoICJub3JtYWwiIGRhdGEgVHggcmF0ZS4KKwkgKiBUaGVzZSBpbmNsdWRlLCBpbiBhZGRpdGlvbiB0byBSRiBhbmQgRFNQIGdhaW4sIGEgZmV3IGZpZWxkcyBmb3IKKwkgKiAgIHJlbWVtYmVyaW5nL21vZGlmeWluZyBnYWluIHNldHRpbmdzIChpbmRleGVzKS4gKi8KKwlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX3Bvd2VyX2luZm8gcG93ZXJfaW5mb1tJV0w0OTY1X01BWF9SQVRFXTsKKworCS8qIFJhZGlvL0RTUCBnYWluIHNldHRpbmdzIGZvciBlYWNoIHNjYW4gcmF0ZSwgZm9yIGRpcmVjdGVkIHNjYW5zLiAqLworCXN0cnVjdCBpd2wzOTQ1X3NjYW5fcG93ZXJfaW5mbyBzY2FuX3B3cl9pbmZvW0lXTF9OVU1fU0NBTl9SQVRFU107Cit9OwogCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMAkwCiAjZGVmaW5lIElXTF9UWF9GSUZPX0FDMQkxCkBAIC0zNzAsNyArNDM0LDcgQEAKIAl1OCBrZXlbMzJdOwogfTsKIAotdW5pb24gaXdsNDk2NV9odF9yYXRlX3N1cHAgewordW5pb24gaXdsX2h0X3JhdGVfc3VwcCB7CiAJdTE2IHJhdGVzOwogCXN0cnVjdCB7CiAJCXU4IHNpc29fcmF0ZTsKQEAgLTQzMCw2ICs0OTQsMjQgQEAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19XQUtFICAgICAgICAgICAgIDAKICNkZWZpbmUgU1RBX1BTX1NUQVRVU19TTEVFUCAgICAgICAgICAgIDEKIAorc3RydWN0IGl3bDM5NDVfdGlkX2RhdGEgeworCXUxNiBzZXFfbnVtYmVyOworfTsKKworc3RydWN0IGl3bDM5NDVfaHdfa2V5IHsKKwllbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZzsKKwlpbnQga2V5bGVuOworCXU4IGtleVszMl07Cit9OworCitzdHJ1Y3QgaXdsMzk0NV9zdGF0aW9uX2VudHJ5IHsKKwlzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kIHN0YTsKKwlzdHJ1Y3QgaXdsMzk0NV90aWRfZGF0YSB0aWRbTUFYX1RJRF9DT1VOVF07CisJdTggdXNlZDsKKwl1OCBwc19zdGF0dXM7CisJc3RydWN0IGl3bDM5NDVfaHdfa2V5IGtleWluZm87Cit9OworCiBzdHJ1Y3QgaXdsX3N0YXRpb25fZW50cnkgewogCXN0cnVjdCBpd2xfYWRkc3RhX2NtZCBzdGE7CiAJc3RydWN0IGl3bF90aWRfZGF0YSB0aWRbTUFYX1RJRF9DT1VOVF07CkBAIC00OTcsMTEgKzU3OSwxMyBAQAogICogQG1heF90eHFfbnVtOiBNYXggIyBUeCBxdWV1ZXMgc3VwcG9ydGVkCiAgKiBAZG1hX2NobmxfbnVtOiBOdW1iZXIgb2YgVHggRE1BL0ZJRk8gY2hhbm5lbHMKICAqIEBzY2RfYmNfdGJsc19zaXplOiBzaXplIG9mIHNjaGVkdWxlciBieXRlIGNvdW50IHRhYmxlcworICogQHRmZF9zaXplOiBURkQgc2l6ZQogICogQHR4L3J4X2NoYWluc19udW06IE51bWJlciBvZiBUWC9SWCBjaGFpbnMKICAqIEB2YWxpZF90eC9yeF9hbnQ6IHVzYWJsZSBhbnRlbm5hcwogICogQG1heF9yeHFfc2l6ZTogTWF4ICMgUnggZnJhbWVzIGluIFJ4IHF1ZXVlIChtdXN0IGJlIHBvd2VyLW9mLTIpCiAgKiBAbWF4X3J4cV9sb2c6IExvZy1iYXNlLTIgb2YgbWF4X3J4cV9zaXplCiAgKiBAcnhfYnVmX3NpemU6IFJ4IGJ1ZmZlciBzaXplCisgKiBAcnhfd3J0X3B0cl9yZWc6IEZIezM5fV9SU0NTUl9DSE5MMF9XUFRSCiAgKiBAbWF4X3N0YXRpb25zOgogICogQGJjYXN0X3N0YV9pZDoKICAqIEBmYXRfY2hhbm5lbDogaXMgNDBNSHogd2lkdGggcG9zc2libGUgaW4gYmFuZCAyLjQKQEAgLTUxNiw2ICs2MDAsNyBAQAogCXU4IG1heF90eHFfbnVtOwogCXU4IGRtYV9jaG5sX251bTsKIAl1MTYgc2NkX2JjX3RibHNfc2l6ZTsKKwl1MzIgdGZkX3NpemU7CiAJdTggIHR4X2NoYWluc19udW07CiAJdTggIHJ4X2NoYWluc19udW07CiAJdTggIHZhbGlkX3R4X2FudDsKQEAgLTUyMyw2ICs2MDgsNyBAQAogCXUxNiBtYXhfcnhxX3NpemU7CiAJdTE2IG1heF9yeHFfbG9nOwogCXUzMiByeF9idWZfc2l6ZTsKKwl1MzIgcnhfd3J0X3B0cl9yZWc7CiAJdTMyIG1heF9wa3Rfc2l6ZTsKIAl1OCAgbWF4X3N0YXRpb25zOwogCXU4ICBiY2FzdF9zdGFfaWQ7CkBAIC03NTUsNyArODQxLDcgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZHNbSUVFRTgwMjExX05VTV9CQU5EU107CiAKLSNpZmRlZiBDT05GSUdfSVdMQUdOX1NQRUNUUlVNX01FQVNVUkVNRU5UCisjaWYgZGVmaW5lZChDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVCkgfHwgZGVmaW5lZChDT05GSUdfSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVCkKIAkvKiBzcGVjdHJ1bSBtZWFzdXJlbWVudCByZXBvcnQgY2FjaGluZyAqLwogCXN0cnVjdCBpd2xfc3BlY3RydW1fbm90aWZpY2F0aW9uIG1lYXN1cmVfcmVwb3J0OwogCXU4IG1lYXN1cmVtZW50X3N0YXR1czsKQEAgLTc2OCw2ICs4NTQsMTAgQEAKIAlzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hhbm5lbF9pbmZvOwkvKiBjaGFubmVsIGluZm8gYXJyYXkgKi8KIAl1OCBjaGFubmVsX2NvdW50OwkvKiAjIG9mIGNoYW5uZWxzICovCiAKKwkvKiBlYWNoIGNhbGlicmF0aW9uIGNoYW5uZWwgZ3JvdXAgaW4gdGhlIEVFUFJPTSBoYXMgYSBkZXJpdmVkCisJICogY2xpcCBzZXR0aW5nIGZvciBlYWNoIHJhdGUuIDM5NDUgb25seS4qLworCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2NsaXBfZ3JvdXAgY2xpcDM5X2dyb3Vwc1s1XTsKKwogCS8qIHRoZXJtYWwgY2FsaWJyYXRpb24gKi8KIAlzMzIgdGVtcGVyYXR1cmU7CS8qIGRlZ3JlZXMgS2VsdmluICovCiAJczMyIGxhc3RfdGVtcGVyYXR1cmU7CkBAIC03ODEsNyArODcxLDcgQEAKIAl1bnNpZ25lZCBsb25nIHNjYW5fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzY2FuX3Bhc3Nfc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBzY2FuX3N0YXJ0X3RzZjsKLQlzdHJ1Y3QgaXdsX3NjYW5fY21kICpzY2FuOworCXZvaWQgKnNjYW47CiAJaW50IHNjYW5fYmFuZHM7CiAJaW50IG9uZV9kaXJlY3Rfc2NhbjsKIAl1OCBkaXJlY3Rfc3NpZF9sZW47CkBAIC04MzIsMTggKzkyMiwxOCBAQAogCSAqIDQ5NjUncyBpbml0aWFsaXplIGFsaXZlIHJlc3BvbnNlIGNvbnRhaW5zIHNvbWUgY2FsaWJyYXRpb24gZGF0YS4gKi8KIAlzdHJ1Y3QgaXdsX2luaXRfYWxpdmVfcmVzcCBjYXJkX2FsaXZlX2luaXQ7CiAJc3RydWN0IGl3bF9hbGl2ZV9yZXNwIGNhcmRfYWxpdmU7Ci0jaWZkZWYgQ09ORklHX0lXTFdJRklfUkZLSUxMCisjaWYgZGVmaW5lZChDT05GSUdfSVdMV0lGSV9SRktJTEwpCiAJc3RydWN0IHJma2lsbCAqcmZraWxsOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCi0Jc3RydWN0IGl3bF9sZWQgbGVkW0lXTF9MRURfVFJHX01BWF07CiAJdW5zaWduZWQgbG9uZyBsYXN0X2JsaW5rX3RpbWU7CiAJdTggbGFzdF9ibGlua19yYXRlOwogCXU4IGFsbG93X2JsaW5raW5nOwogCXU2NCBsZWRfdHB0OworCXN0cnVjdCBpd2xfbGVkIGxlZFtJV0xfTEVEX1RSR19NQVhdOworCXVuc2lnbmVkIGludCByeHR4cGFja2V0czsKICNlbmRpZgotCiAJdTE2IGFjdGl2ZV9yYXRlOwogCXUxNiBhY3RpdmVfcmF0ZV9iYXNpYzsKIApAQCAtODkzLDcgKzk4Myw2IEBACiAJdTE2IHJhdGVzX21hc2s7CiAKIAl1MzIgcG93ZXJfbW9kZTsKLQl1MzIgYW50ZW5uYTsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJdTE2IHJ0c190aHJlc2hvbGQ7CiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwpAQCAtOTA3LDYgKzk5NiwxMiBAQAogCXU4IGtleV9tYXBwaW5nX2tleTsKIAl1bnNpZ25lZCBsb25nIHVjb2RlX2tleV90YWJsZTsKIAorCS8qIHF1ZXVlIHJlZmNvdW50cyAqLworI2RlZmluZSBJV0xfTUFYX0hXX1FVRVVFUwkzMgorCXVuc2lnbmVkIGxvbmcgcXVldWVfc3RvcHBlZFtCSVRTX1RPX0xPTkdTKElXTF9NQVhfSFdfUVVFVUVTKV07CisJLyogZm9yIGVhY2ggQUMgKi8KKwlhdG9taWNfdCBxdWV1ZV9zdG9wX2NvdW50WzRdOworCiAJLyogSW5kaWNhdGlvbiBpZiBpZWVlODAyMTFfb3BzLT5vcGVuIGhhcyBiZWVuIGNhbGxlZCAqLwogCXU4IGlzX29wZW47CiAKQEAgLTkyOSw2ICsxMDI0LDEwIEBACiAJdTE2IGJlYWNvbl9pbnQ7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKIAorCS8qQWRkZWQgZm9yIDM5NDUgKi8KKwl2b2lkICpzaGFyZWRfdmlydDsKKwlkbWFfYWRkcl90IHNoYXJlZF9waHlzOworCS8qRW5kKi8KIAlzdHJ1Y3QgaXdsX2h3X3BhcmFtcyBod19wYXJhbXM7CiAKIApAQCAtOTYwLDYgKzEwNTksMTEgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGluaXRfYWxpdmVfc3RhcnQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBhbGl2ZV9zdGFydDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fY2hlY2s7CisKKwkvKkZvciAzOTQ1IG9ubHkqLworCXN0cnVjdCBkZWxheWVkX3dvcmsgdGhlcm1hbF9wZXJpb2RpYzsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF9wb2xsOworCiAJLyogVFggUG93ZXIgKi8KIAlzOCB0eF9wb3dlcl91c2VyX2xtdDsKIAlzOCB0eF9wb3dlcl9jaGFubmVsX2xtdDsKQEAgLTk4Miw2ICsxMDg2LDE1IEBACiAJdTMyIGRpc2FibGVfdHhfcG93ZXJfY2FsOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBydW5fdGltZV9jYWxpYl93b3JrOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YXRpc3RpY3NfcGVyaW9kaWM7CisKKwkvKkZvciAzOTQ1Ki8KKyNkZWZpbmUgSVdMX0RFRkFVTFRfVFhfUE9XRVIgMHgwRgorCisJc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzXzM5OworCisJc3RydWN0IGl3bDM5NDVfc3RhdGlvbl9lbnRyeSBzdGF0aW9uc18zOVtJV0xfU1RBVElPTl9DT1VOVF07CisKKwl1MzIgc3RhX3N1cHBfcmF0ZXM7CiB9OyAvKml3bF9wcml2ICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdHhxX2N0eF9hY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCmluZGV4IGNlMmY0NzMuLjc1NTE3ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xNDUsNyArMTQ1LDcgQEAKIHsKIAl1MzIgZ3AgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9FRVBST01fR1ApOwogCWlmICgoZ3AgJiBDU1JfRUVQUk9NX0dQX1ZBTElEX01TSykgPT0gQ1NSX0VFUFJPTV9HUF9CQURfU0lHTkFUVVJFKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eFxuIiwgZ3ApOworCQlJV0xfRVJSKHByaXYsICJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE3Myw3ICsxNzMsNyBAQAogCQkJCUNTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9FRVBST01fT1dOX1NFTSwKIAkJCQlFRVBST01fU0VNX1RJTUVPVVQpOwogCQlpZiAocmV0ID49IDApIHsKLQkJCUlXTF9ERUJVR19JTygiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKKwkJCUlXTF9ERUJVR19JTyhwcml2LCAiQWNxdWlyZWQgc2VtYXBob3JlIGFmdGVyICVkIHRyaWVzLlxuIiwKIAkJCQljb3VudCsxKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTIyMyw3ICsyMjMsNyBAQAogCiAJcmV0ID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy52ZXJpZnlfc2lnbmF0dXJlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRUVQUk9NIG5vdCBmb3VuZCwgRUVQUk9NX0dQPTB4JTA4eFxuIiwgZ3ApOworCQlJV0xfRVJSKHByaXYsICJFRVBST00gbm90IGZvdW5kLCBFRVBST01fR1A9MHglMDh4XG4iLCBncCk7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTIzMSw3ICsyMzEsNyBAQAogCS8qIE1ha2Ugc3VyZSBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUpIGlzIGFsbG93ZWQgdG8gcmVhZCBFRVBST00gKi8KIAlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmFjcXVpcmVfc2VtYXBob3JlKHByaXYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIGFjcXVpcmUgRUVQUk9NIHNlbWFwaG9yZS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJGYWlsZWQgdG8gYWNxdWlyZSBFRVBST00gc2VtYXBob3JlLlxuIik7CiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTI0Nyw3ICsyNDcsNyBAQAogCQkJCQkgIENTUl9FRVBST01fUkVHX1JFQURfVkFMSURfTVNLLAogCQkJCQkgIElXTF9FRVBST01fQUNDRVNTX1RJTUVPVVQpOwogCQlpZiAocmV0IDwgMCkgewotCQkJSVdMX0VSUk9SKCJUaW1lIG91dCByZWFkaW5nIEVFUFJPTVslZF1cbiIsIGFkZHIpOworCQkJSVdMX0VSUihwcml2LCAiVGltZSBvdXQgcmVhZGluZyBFRVBST01bJWRdXG4iLCBhZGRyKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQlyID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKQEAgLTI4NSw3ICsyODUsNyBAQAogCiAJcmV0dXJuIDA7CiBlcnI6Ci0JSVdMX0VSUk9SKCJVbnN1cHBvcnRlZCBFRVBST00gVkVSPTB4JXggPCAweCV4IENBTElCPTB4JXggPCAweCV4XG4iLAorCUlXTF9FUlIocHJpdiwgIlVuc3VwcG9ydGVkIEVFUFJPTSBWRVI9MHgleCA8IDB4JXggQ0FMSUI9MHgleCA8IDB4JXhcbiIsCiAJCSAgZWVwcm9tX3ZlciwgcHJpdi0+Y2ZnLT5lZXByb21fdmVyLAogCQkgIGNhbGliX3ZlciwgIHByaXYtPmNmZy0+ZWVwcm9tX2NhbGliX3Zlcik7CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0zOTAsNyArMzkwLDcgQEAKIAlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpCiAJCXJldHVybiAtMTsKIAotCUlXTF9ERUJVR19JTkZPKCJGQVQgQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiRkFUIENoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMoMHglMDJ4ICVkZEJtKToiCiAJCQkiIEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKIAkJCWNoX2luZm8tPmNoYW5uZWwsCiAJCQlpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/CkBAIC00MzIsMTEgKzQzMiwxMSBAQAogCXN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCiAJaWYgKHByaXYtPmNoYW5uZWxfY291bnQpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoYW5uZWwgbWFwIGFscmVhZHkgaW5pdGlhbGl6ZWQuXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemluZyByZWd1bGF0b3J5IGluZm8gZnJvbSBFRVBST01cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJJbml0aWFsaXppbmcgcmVndWxhdG9yeSBpbmZvIGZyb20gRUVQUk9NXG4iKTsKIAogCXByaXYtPmNoYW5uZWxfY291bnQgPQogCSAgICBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF8xKSArCkBAIC00NDUsMTIgKzQ0NSwxMiBAQAogCSAgICBBUlJBWV9TSVpFKGl3bF9lZXByb21fYmFuZF80KSArCiAJICAgIEFSUkFZX1NJWkUoaXdsX2VlcHJvbV9iYW5kXzUpOwogCi0JSVdMX0RFQlVHX0lORk8oIlBhcnNpbmcgZGF0YSBmb3IgJWQgY2hhbm5lbHMuXG4iLCBwcml2LT5jaGFubmVsX2NvdW50KTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiUGFyc2luZyBkYXRhIGZvciAlZCBjaGFubmVscy5cbiIsIHByaXYtPmNoYW5uZWxfY291bnQpOwogCiAJcHJpdi0+Y2hhbm5lbF9pbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGl3bF9jaGFubmVsX2luZm8pICoKIAkJCQkgICAgIHByaXYtPmNoYW5uZWxfY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+Y2hhbm5lbF9pbmZvKSB7Ci0JCUlXTF9FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWxfaW5mb1xuIik7CisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsX2luZm9cbiIpOwogCQlwcml2LT5jaGFubmVsX2NvdW50ID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJCQkJIElFRUU4MDIxMV9DSEFOX05PX0ZBVF9CRUxPVyk7CiAKIAkJCWlmICghKGlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpKSB7Ci0JCQkJSVdMX0RFQlVHX0lORk8oIkNoLiAlZCBGbGFncyAleCBbJXNHSHpdIC0gIgorCQkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDaC4gJWQgRmxhZ3MgJXggWyVzR0h6XSAtICIKIAkJCQkJICAgICAgICJObyB0cmFmZmljXG4iLAogCQkJCQkgICAgICAgY2hfaW5mby0+Y2hhbm5lbCwKIAkJCQkJICAgICAgIGNoX2luZm8tPmZsYWdzLApAQCAtNTAxLDcgKzUwMSw3IEBACiAJCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7CiAJCQljaF9pbmZvLT5taW5fcG93ZXIgPSAwOwogCi0JCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcyVzKDB4JTAyeCAlZGRCbSk6IgorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNoLiAlZCBbJXNHSHpdICVzJXMlcyVzJXMlcygweCUwMnggJWRkQm0pOiIKIAkJCQkgICAgICAgIiBBZC1Ib2MgJXNzdXBwb3J0ZWRcbiIsCiAJCQkJICAgICAgIGNoX2luZm8tPmNoYW5uZWwsCiAJCQkJICAgICAgIGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pID8KQEAgLTUyMCw3ICs1MjAsNyBAQAogCQkJCQkgICAgIGZsYWdzICYgRUVQUk9NX0NIQU5ORUxfUkFEQVIpKQogCQkJCSAgICAgICA/ICIiIDogIm5vdCAiKTsKIAotCQkJLyogU2V0IHRoZSB1c2VyX3R4cG93ZXJfbGltaXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKKwkJCS8qIFNldCB0aGUgdHhfcG93ZXJfdXNlcl9sbXQgdG8gdGhlIGhpZ2hlc3QgcG93ZXIKIAkJCSAqIHN1cHBvcnRlZCBieSBhbnkgY2hhbm5lbCAqLwogCQkJaWYgKGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnID4KIAkJCQkJCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KQpAQCAtNTMxLDYgKzUzMSwxMyBAQAogCQl9CiAJfQogCisJLyogQ2hlY2sgaWYgd2UgZG8gaGF2ZSBGQVQgY2hhbm5lbHMgKi8KKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZWVwcm9tX29wcy5yZWd1bGF0b3J5X2JhbmRzWzVdID09CisJICAgIEVFUFJPTV9SRUdVTEFUT1JZX0JBTkRfTk9fRkFUICYmCisJICAgIHByaXYtPmNmZy0+b3BzLT5saWItPmVlcHJvbV9vcHMucmVndWxhdG9yeV9iYW5kc1s2XSA9PQorCSAgICBFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVCkKKwkJcmV0dXJuIDA7CisKIAkvKiBUd28gYWRkaXRpb25hbCBFRVBST00gYmFuZHMgZm9yIDIuNCBhbmQgNSBHSHogRkFUIGNoYW5uZWxzICovCiAJZm9yIChiYW5kID0gNjsgYmFuZCA8PSA3OyBiYW5kKyspIHsKIAkJZW51bSBpZWVlODAyMTFfYmFuZCBpZWVlYmFuZDsKQEAgLTU4Miw2ICs1ODksNyBAQAogCWtmcmVlKHByaXYtPmNoYW5uZWxfaW5mbyk7CiAJcHJpdi0+Y2hhbm5lbF9jb3VudCA9IDA7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9mcmVlX2NoYW5uZWxfbWFwKTsKIAogLyoqCiAgKiBpd2xfZ2V0X2NoYW5uZWxfaW5mbyAtIEZpbmQgZHJpdmVyJ3MgcHJpdmF0ZSBjaGFubmVsIGluZm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKaW5kZXggNjAzYzg0Yi4uMzQ3OTE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTExOCw2ICsxMTgsOSBAQAogCXM4IG1heF9wb3dlcl9hdmc7CS8qIG1heCBwb3dlciAoZEJtKSBvbiB0aGlzIGNobmwsIGxpbWl0IDMxICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyogMzk0NSBTcGVjaWZpYyAqLworI2RlZmluZSBFRVBST01fMzk0NV9FRVBST01fVkVSU0lPTgkoMHgyZikKKwogLyogNDk2NSBoYXMgdHdvIHJhZGlvIHRyYW5zbWl0dGVycyAoYW5kIDMgcmFkaW8gcmVjZWl2ZXJzKSAqLwogI2RlZmluZSBFRVBST01fVFhfUE9XRVJfVFhfQ0hBSU5TICAgICAgKDIpCiAKQEAgLTM2Nyw2ICszNzAsOCBAQAogICovCiAjZGVmaW5lIEVFUFJPTV80OTY1X1JFR1VMQVRPUllfQkFORF81Ml9GQVRfQ0hBTk5FTFMgKDIqMHhBOCkJLyogMjIgYnl0ZXMgKi8KIAorI2RlZmluZSBFRVBST01fUkVHVUxBVE9SWV9CQU5EX05PX0ZBVAkJCSgwKQorCiBzdHJ1Y3QgaXdsX2VlcHJvbV9vcHMgewogCWNvbnN0IHUzMiByZWd1bGF0b3J5X2JhbmRzWzddOwogCWludCAoKnZlcmlmeV9zaWduYXR1cmUpIChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKaW5kZXggZDdkYTE5OC4uNjVmYThhNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM5OSw2ICszOTksMjEgQEAKICAqLwogI2RlZmluZSBGSF9UWF9DSElDS0VOX0JJVFNfU0NEX0FVVE9fUkVUUllfRU4JKDB4MDAwMDAwMDIpCiAKKyNkZWZpbmUgUlhfUVVFVUVfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgUlhfUVVFVUVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAyNTUKKyNkZWZpbmUgUlhfUVVFVUVfU0laRV9MT0cgICAgICAgICAgICAgICAgICAgICA4CisKKy8qCisgKiBSWCByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucworICovCisjZGVmaW5lIFJYX0ZSRUVfQlVGRkVSUyA2NAorI2RlZmluZSBSWF9MT1dfV0FURVJNQVJLIDgKKworLyogU2l6ZSBvZiBvbmUgUnggYnVmZmVyIGluIGhvc3QgRFJBTSAqLworI2RlZmluZSBJV0xfUlhfQlVGX1NJWkVfM0sgKDMgKiAxMDAwKSAvKiAzOTQ1IG9ubHkgKi8KKyNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzRLICg0ICogMTAyNCkKKyNkZWZpbmUgSVdMX1JYX0JVRl9TSVpFXzhLICg4ICogMTAyNCkKKwogLyoqCiAgKiBzdHJ1Y3QgaXdsX3JiX3N0YXR1cyAtIHJlc2V2ZSBidWZmZXIgc3RhdHVzCiAgKiAJaG9zdCBtZW1vcnkgbWFwcGVkIEZIIHJlZ2lzdGVycwpAQCAtNDE0LDYgKzQyOSw3IEBACiAJX19sZTE2IGNsb3NlZF9mcl9udW07CiAJX19sZTE2IGZpbmlzaGVkX3JiX251bTsKIAlfX2xlMTYgZmluaXNoZWRfZnJfbmFtOworCV9fbGUzMiBfX3VudXNlZDsgLyogMzk0NSBvbmx5ICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCkBAIC00NzcsNyArNDkzLDYgQEAKIAlfX2xlMzIgX19wYWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotCiAvKiBLZWVwIFdhcm0gU2l6ZSAqLwogI2RlZmluZSBJV0xfS1dfU0laRSAweDEwMDAJLyogNGsgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCmluZGV4IDRiMzViMzAuLjE3ZDYxYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTA5LDE0ICsxMDksMTQgQEAKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gTlVMTDsKIAogCWlmICghc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJXMuXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiAlcy5cbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcoY21kLT5oZHIuY21kKSk7CiAJCXJldHVybiAxOwogCX0KIAogCXBrdCA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKIAlpZiAocGt0LT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gJXMgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTI1LDExICsxMjUsMTEgQEAKIAlzd2l0Y2ggKGNtZC0+aGRyLmNtZCkgewogCWNhc2UgUkVQTFlfVFhfTElOS19RVUFMSVRZX0NNRDoKIAljYXNlIFNFTlNJVElWSVRZX0NNRDoKLQkJSVdMX0RFQlVHX0hDX0RVTVAoImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKKwkJSVdMX0RFQlVHX0hDX0RVTVAocHJpdiwgImJhY2sgZnJvbSAlcyAoMHglMDhYKVxuIiwKIAkJCQlnZXRfY21kX3N0cmluZyhjbWQtPmhkci5jbWQpLCBwa3QtPmhkci5mbGFncyk7CiAJCQkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0RFQlVHX0hDKCJiYWNrIGZyb20gJXMgKDB4JTA4WClcbiIsCisJCUlXTF9ERUJVR19IQyhwcml2LCAiYmFjayBmcm9tICVzICgweCUwOFgpXG4iLAogCQkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCksIHBrdC0+aGRyLmZsYWdzKTsKIAl9CiAjZW5kaWYKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAJcmV0ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogZW5xdWV1ZV9oY21kIGZhaWxlZDogJWRcbiIsCisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAogCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xNzQsOCArMTc0LDkgQEAKIAlCVUdfT04oY21kLT5tZXRhLnUuY2FsbGJhY2sgIT0gTlVMTCk7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBBbHJlYWR5IHNlbmRpbmcgYSBob3N0IGNvbW1hbmRcbiIsCi0JCQkgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIkVycm9yIHNlbmRpbmcgJXM6IEFscmVhZHkgc2VuZGluZyBhIGhvc3QgY29tbWFuZFxuIiwKKwkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xODgsNyArMTg5LDcgQEAKIAljbWRfaWR4ID0gaXdsX2VucXVldWVfaGNtZChwcml2LCBjbWQpOwogCWlmIChjbWRfaWR4IDwgMCkgewogCQlyZXQgPSBjbWRfaWR4OwotCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IGVucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAorCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZW5kaW5nICVzOiBlbnF1ZXVlX2hjbWQgZmFpbGVkOiAlZFxuIiwKIAkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCksIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTE5OCw5ICsxOTksMTAgQEAKIAkJCUhPU1RfQ09NUExFVEVfVElNRU9VVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKHRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogdGltZSBvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwKLQkJCQkgIGppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7CisJCQlJV0xfRVJSKHByaXYsCisJCQkJIkVycm9yIHNlbmRpbmcgJXM6IHRpbWUgb3V0IGFmdGVyICVkbXMuXG4iLAorCQkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpLAorCQkJCWppZmZpZXNfdG9fbXNlY3MoSE9TVF9DT01QTEVURV9USU1FT1VUKSk7CiAKIAkJCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwogCQkJcmV0ID0gLUVUSU1FRE9VVDsKQEAgLTIwOSwxOSArMjExLDE5IEBACiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQ29tbWFuZCAlcyBhYm9ydGVkOiBSRiBLSUxMIFN3aXRjaFxuIiwKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1hbmQgJXMgYWJvcnRlZDogUkYgS0lMTCBTd2l0Y2hcbiIsCiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUNBTkNFTEVEOwogCQlnb3RvIGZhaWw7CiAJfQogCWlmICh0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCiAJCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGZhaWw7CiAJfQogCWlmICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSAmJiAhY21kLT5tZXRhLnUuc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKIAkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIGNhbmNlbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAppbmRleCBjYTRmNjM4Li5hMTMyOGMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC05Myw0ICs5Myw1NiBAQAogCXJldHVybiAoZGVzYy0+dl9hZGRyICE9IE5VTEwpID8gMCA6IC1FTk9NRU07CiB9CiAKKy8qCisgKiB3ZSBoYXZlIDggYml0cyB1c2VkIGxpa2UgdGhpczoKKyAqCisgKiA3IDYgNSA0IDMgMiAxIDAKKyAqIHwgfCB8IHwgfCB8IHwgfAorICogfCB8IHwgfCB8IHwgKy0rLS0tLS0tLS0gQUMgcXVldWUgKDAtMykKKyAqIHwgfCB8IHwgfCB8CisgKiB8ICstKy0rLSstKy0tLS0tLS0tLS0tLSBIVyBBLU1QRFUgcXVldWUKKyAqIHwKKyAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGluZGljYXRlcyBhZ2cgcXVldWUKKyAqLworc3RhdGljIGlubGluZSB1OCBpd2xfdmlydHVhbF9hZ2dfcXVldWVfbnVtKHU4IGFjLCB1OCBod3EpCit7CisJQlVHX09OKGFjID4gMyk7ICAgLyogb25seSBoYXZlIDIgYml0cyAqLworCUJVR19PTihod3EgPiAzMSk7IC8qIG9ubHkgaGF2ZSA1IGJpdHMgKi8KKworCXJldHVybiAweDgwIHwgKGh3cSA8PCAyKSB8IGFjOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3dha2VfcXVldWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBxdWV1ZSkKK3sKKwl1OCBhYyA9IHF1ZXVlOworCXU4IGh3cSA9IHF1ZXVlOworCisJaWYgKHF1ZXVlICYgMHg4MCkgeworCQlhYyA9IHF1ZXVlICYgMzsKKwkJaHdxID0gKHF1ZXVlID4+IDIpICYgMHgxZjsKKwl9CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGh3cSwgcHJpdi0+cXVldWVfc3RvcHBlZCkpCisJCWlmIChhdG9taWNfZGVjX3JldHVybigmcHJpdi0+cXVldWVfc3RvcF9jb3VudFthY10pIDw9IDApCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShwcml2LT5odywgYWMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3N0b3BfcXVldWUoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1OCBxdWV1ZSkKK3sKKwl1OCBhYyA9IHF1ZXVlOworCXU4IGh3cSA9IHF1ZXVlOworCisJaWYgKHF1ZXVlICYgMHg4MCkgeworCQlhYyA9IHF1ZXVlICYgMzsKKwkJaHdxID0gKHF1ZXVlID4+IDIpICYgMHgxZjsKKwl9CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaHdxLCBwcml2LT5xdWV1ZV9zdG9wcGVkKSkKKwkJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwcml2LT5xdWV1ZV9zdG9wX2NvdW50W2FjXSkgPiAwKQorCQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aHcsIGFjKTsKK30KKworI2RlZmluZSBpZWVlODAyMTFfc3RvcF9xdWV1ZSBET19OT1RfVVNFX2llZWU4MDIxMV9zdG9wX3F1ZXVlCisjZGVmaW5lIGllZWU4MDIxMV93YWtlX3F1ZXVlIERPX05PVF9VU0VfaWVlZTgwMjExX3dha2VfcXVldWUKKwogI2VuZGlmCQkJCS8qIF9faXdsX2hlbHBlcnNfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaAppbmRleCAwYTkyZTc0Li4wODNlYTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtNjYsNyArNjYsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIF9faXdsX3dyaXRlMzIoY29uc3QgY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgdTMyIG9mcywgdTMyIHZhbCkKIHsKLQlJV0xfREVCVUdfSU8oIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgIndyaXRlMzIoMHglMDhYLCAweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgdmFsLCBmLCBsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgb2ZzLCB2YWwpOwogfQogI2RlZmluZSBpd2xfd3JpdGUzMihwcml2LCBvZnMsIHZhbCkgXApAQCAtNzksNyArNzksNyBAQAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiBzdGF0aWMgaW5saW5lIHUzMiBfX2l3bF9yZWFkMzIoY2hhciAqZiwgdTMyIGwsIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIG9mcykKIHsKLQlJV0xfREVCVUdfSU8oInJlYWRfZGlyZWN0MzIoMHglMDhYKSAtICVzICVkXG4iLCBvZnMsIGYsIGwpOworCUlXTF9ERUJVR19JTyhwcml2LCAicmVhZF9kaXJlY3QzMigweCUwOFgpIC0gJXMgJWRcbiIsIG9mcywgZiwgbCk7CiAJcmV0dXJuIF9pd2xfcmVhZDMyKHByaXYsIG9mcyk7CiB9CiAjZGVmaW5lIGl3bF9yZWFkMzIocHJpdiwgb2ZzKSBfX2l3bF9yZWFkMzIoX19GSUxFX18sIF9fTElORV9fLCBwcml2LCBvZnMpCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkJCQkgdTMyIGJpdHMsIHUzMiBtYXNrLCBpbnQgdGltZW91dCkKIHsKIAlpbnQgcmV0ID0gX2l3bF9wb2xsX2JpdChwcml2LCBhZGRyLCBiaXRzLCBtYXNrLCB0aW1lb3V0KTsKLQlJV0xfREVCVUdfSU8oInBvbGxfYml0KDB4JTA4WCwgMHglMDhYLCAweCUwOFgpIC0gJXMtICVzICVkXG4iLAorCUlXTF9ERUJVR19JTyhwcml2LCAicG9sbF9iaXQoMHglMDhYLCAweCUwOFgsIDB4JTA4WCkgLSAlcy0gJXMgJWRcbiIsCiAJCSAgICAgYWRkciwgYml0cywgbWFzaywKIAkJICAgICB1bmxpa2VseShyZXQgID09IC1FVElNRURPVVQpID8gInRpbWVvdXQiIDogIiIsIGYsIGwpOwogCXJldHVybiByZXQ7CkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJCQkgc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgcmVnLCB1MzIgbWFzaykKIHsKIAl1MzIgdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgcmVnKSB8IG1hc2s7Ci0JSVdMX0RFQlVHX0lPKCJzZXRfYml0KDB4JTA4WCwgMHglMDhYKSA9IDB4JTA4WFxuIiwgcmVnLCBtYXNrLCB2YWwpOworCUlXTF9ERUJVR19JTyhwcml2LCAic2V0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWwpOwogfQogI2RlZmluZSBpd2xfc2V0X2JpdChwLCByLCBtKSBfX2l3bF9zZXRfYml0KF9fRklMRV9fLCBfX0xJTkVfXywgcCwgciwgbSkKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQkJCSAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIG1hc2spCiB7CiAJdTMyIHZhbCA9IF9pd2xfcmVhZDMyKHByaXYsIHJlZykgJiB+bWFzazsKLQlJV0xfREVCVUdfSU8oImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgImNsZWFyX2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFhcbiIsIHJlZywgbWFzaywgdmFsKTsKIAlfaXdsX3dyaXRlMzIocHJpdiwgcmVnLCB2YWwpOwogfQogI2RlZmluZSBpd2xfY2xlYXJfYml0KHAsIHIsIG0pIF9faXdsX2NsZWFyX2JpdChfX0ZJTEVfXywgX19MSU5FX18sIHAsIHIsIG0pCkBAIC0xNTYsNiArMTU2LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OworCXUzMiB2YWw7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCiAJCXJldHVybiAwOwpAQCAtMTY1LDkgKzE2NiwxMCBAQAogCXJldCA9IF9pd2xfcG9sbF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJICAgQ1NSX0dQX0NOVFJMX1JFR19WQUxfTUFDX0FDQ0VTU19FTiwKIAkJCSAgIChDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0NMT0NLX1JFQURZIHwKLQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfR09JTkdfVE9fU0xFRVApLCA1MCk7CisJCQkgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX0dPSU5HX1RPX1NMRUVQKSwgMTUwMDApOwogCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiTUFDIGlzIGluIGRlZXAgc2xlZXAhXG4iKTsKKwkJdmFsID0gX2l3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKTsKKwkJSVdMX0VSUihwcml2LCAiTUFDIGlzIGluIGRlZXAgc2xlZXAhLiAgQ1NSX0dQX0NOVFJMID0gMHglMDhYXG4iLCB2YWwpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE4Miw5ICsxODQsOSBAQAogCQkJCQkgICAgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJHcmFiYmluZyBhY2Nlc3Mgd2hpbGUgYWxyZWFkeSBoZWxkICVzICVkLlxuIiwgZiwgbCk7CisJCUlXTF9FUlIocHJpdiwgIkdyYWJiaW5nIGFjY2VzcyB3aGlsZSBhbHJlYWR5IGhlbGQgJXMgJWQuXG4iLCBmLCBsKTsKIAotCUlXTF9ERUJVR19JTygiZ3JhYmJpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgImdyYWJiaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7CiAJcmV0dXJuIF9pd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogfQogI2RlZmluZSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpIFwKQEAgLTIwNyw5ICsyMDksOSBAQAogCQkJCQkgICAgc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSA8PSAwKQotCQlJV0xfRVJST1IoIlJlbGVhc2UgdW5oZWxkIG5pYyBhY2Nlc3MgYXQgbGluZSAlcyAlZC5cbiIsIGYsIGwpOworCQlJV0xfRVJSKHByaXYsICJSZWxlYXNlIHVuaGVsZCBuaWMgYWNjZXNzIGF0IGxpbmUgJXMgJWQuXG4iLCBmLCBsKTsKIAotCUlXTF9ERUJVR19JTygicmVsZWFzaW5nIG5pYyBhY2Nlc3MgLSAlcyAlZFxuIiwgZiwgbCk7CisJSVdMX0RFQlVHX0lPKHByaXYsICJyZWxlYXNpbmcgbmljIGFjY2VzcyAtICVzICVkXG4iLCBmLCBsKTsKIAlfaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIH0KICNkZWZpbmUgaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KSBcCkBAIC0yMjksOCArMjMxLDggQEAKIHsKIAl1MzIgdmFsdWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgcmVnKTsKIAlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyAlZFxuIiwgZiwgbCk7Ci0JSVdMX0RFQlVHX0lPKCJyZWFkX2RpcmVjdDMyKDB4JTRYKSA9IDB4JTA4eCAtICVzICVkIFxuIiwgcmVnLCB2YWx1ZSwKKwkJSVdMX0VSUihwcml2LCAiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzICVkXG4iLCBmLCBsKTsKKwlJV0xfREVCVUdfSU8ocHJpdiwgInJlYWRfZGlyZWN0MzIoMHglNFgpID0gMHglMDh4IC0gJXMgJWQgXG4iLCByZWcsIHZhbHVlLAogCQkgICAgIGYsIGwpOwogCXJldHVybiB2YWx1ZTsKIH0KQEAgLTI1MCw3ICsyNTIsNyBAQAogCQkJCSAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHJlZywgdTMyIHZhbHVlKQogewogCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCQlJV0xfRVJSKHByaXYsICJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CiAJX2l3bF93cml0ZV9kaXJlY3QzMihwcml2LCByZWcsIHZhbHVlKTsKIH0KICNkZWZpbmUgaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIHJlZywgdmFsdWUpIFwKQEAgLTI4NCwxMCArMjg2LDEwIEBACiAJaW50IHJldCAgPSBfaXdsX3BvbGxfZGlyZWN0X2JpdChwcml2LCBhZGRyLCBtYXNrLCB0aW1lb3V0KTsKIAogCWlmICh1bmxpa2VseShyZXQgPT0gLUVUSU1FRE9VVCkpCi0JCUlXTF9ERUJVR19JTygicG9sbF9kaXJlY3RfYml0KDB4JTA4WCwgMHglMDhYKSAtICIKKwkJSVdMX0RFQlVHX0lPKHByaXYsICJwb2xsX2RpcmVjdF9iaXQoMHglMDhYLCAweCUwOFgpIC0gIgogCQkJICAgICAidGltZWRvdXQgLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgZiwgbCk7CiAJZWxzZQotCQlJV0xfREVCVUdfSU8oInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFggIgorCQlJV0xfREVCVUdfSU8ocHJpdiwgInBvbGxfZGlyZWN0X2JpdCgweCUwOFgsIDB4JTA4WCkgPSAweCUwOFggIgogCQkJICAgICAiLSAlcyAlZFxuIiwgYWRkciwgbWFzaywgcmV0LCBmLCBsKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzA4LDcgKzMxMCw3IEBACiAJCQkJICBzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcpCiB7CiAJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CisJCUlXTF9FUlIocHJpdiwgIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKIAlyZXR1cm4gX2l3bF9yZWFkX3BycGgocHJpdiwgcmVnKTsKIH0KIApAQCAtMzMxLDcgKzMzMyw3IEBACiAJCQkJICAgIHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUzMiB2YWwpCiB7CiAJaWYgKCFhdG9taWNfcmVhZCgmcHJpdi0+cmVzdHJpY3RfcmVmY250KSkKLQkJSVdMX0VSUk9SKCJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CisJCUlXTF9FUlIocHJpdiwgIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKIAlfaXdsX3dyaXRlX3BycGgocHJpdiwgYWRkciwgdmFsKTsKIH0KIApAQCAtMzQ5LDcgKzM1MSw3IEBACiAJCQkJICAgICAgIHUzMiByZWcsIHUzMiBtYXNrKQogewogCWlmICghYXRvbWljX3JlYWQoJnByaXYtPnJlc3RyaWN0X3JlZmNudCkpCi0JCUlXTF9FUlJPUigiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOworCQlJV0xfRVJSKHByaXYsICJOaWMgYWNjZXNzIG5vdCBoZWxkIGZyb20gJXMgbGluZSAlZFxuIiwgZiwgbGluZSk7CiAKIAlfaXdsX3NldF9iaXRzX3BycGgocHJpdiwgcmVnLCBtYXNrKTsKIH0KQEAgLTM2Nyw3ICszNjksNyBAQAogCQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiByZWcsIHUzMiBiaXRzLCB1MzIgbWFzaykKIHsKIAlpZiAoIWF0b21pY19yZWFkKCZwcml2LT5yZXN0cmljdF9yZWZjbnQpKQotCQlJV0xfRVJST1IoIk5pYyBhY2Nlc3Mgbm90IGhlbGQgZnJvbSAlcyBsaW5lICVkXG4iLCBmLCBsaW5lKTsKKwkJSVdMX0VSUihwcml2LCAiTmljIGFjY2VzcyBub3QgaGVsZCBmcm9tICVzIGxpbmUgJWRcbiIsIGYsIGxpbmUpOwogCV9pd2xfc2V0X2JpdHNfbWFza19wcnBoKHByaXYsIHJlZywgYml0cywgbWFzayk7CiB9CiAjZGVmaW5lIGl3bF9zZXRfYml0c19tYXNrX3BycGgocHJpdiwgcmVnLCBiaXRzLCBtYXNrKSBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCmluZGV4IDExZWNjZDcuLjE5NjgwZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTEyMyw3ICsxMjMsNyBAQAogLyogU2V0IGxlZCByZWdpc3RlciBvZmYgKi8KIHN0YXRpYyBpbnQgaXdsNDk2NV9sZWRfb25fcmVnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKIHsKLQlJV0xfREVCVUdfTEVEKCJsZWQgb24gJWRcbiIsIGxlZF9pZCk7CisJSVdMX0RFQlVHX0xFRChwcml2LCAibGVkIG9uICVkXG4iLCBsZWRfaWQpOwogCWl3bF93cml0ZTMyKHByaXYsIENTUl9MRURfUkVHLCBDU1JfTEVEX1JFR19UUlVOX09OKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MCw3ICsxNTAsNyBAQAogCQkub2ZmID0gMCwKIAkJLmludGVydmFsID0gSVdMX0RFRl9MRURfSU5UUlZMCiAJfTsKLQlJV0xfREVCVUdfTEVEKCJsZWQgb2ZmICVkXG4iLCBsZWRfaWQpOworCUlXTF9ERUJVR19MRUQocHJpdiwgImxlZCBvZmYgJWRcbiIsIGxlZF9pZCk7CiAJcmV0dXJuIGl3bF9zZW5kX2xlZF9jbWQocHJpdiwgJmxlZF9jbWQpOwogfQogI2VuZGlmCkBAIC0xNTksNyArMTU5LDcgQEAKIC8qIFNldCBsZWQgcmVnaXN0ZXIgb2ZmICovCiBzdGF0aWMgaW50IGl3bDQ5NjVfbGVkX29mZl9yZWcoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbGVkX2lkKQogewotCUlXTF9ERUJVR19MRUQoIkxFRCBSZWcgb2ZmXG4iKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJMRUQgUmVnIG9mZlxuIik7CiAJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0xFRF9SRUcsIENTUl9MRURfUkVHX1RSVU5fT0ZGKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OSw3ICsxNjksNyBAQAogICovCiBzdGF0aWMgaW50IGl3bF9sZWRfYXNzb2NpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IGxlZF9pZCkKIHsKLQlJV0xfREVCVUdfTEVEKCJBc3NvY2lhdGVkXG4iKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJBc3NvY2lhdGVkXG4iKTsKIAlwcml2LT5hbGxvd19ibGlua2luZyA9IDE7CiAJcmV0dXJuIGl3bDQ5NjVfbGVkX29uX3JlZyhwcml2LCBsZWRfaWQpOwogfQpAQCAtMjEzLDcgKzIxMyw3IEBACiAJCXJldHVybjsKIAogCi0JSVdMX0RFQlVHX0xFRCgiTGVkIHR5cGUgPSAlcyBicmlnaHRuZXNzID0gJWRcbiIsCisJSVdMX0RFQlVHX0xFRChwcml2LCAiTGVkIHR5cGUgPSAlcyBicmlnaHRuZXNzID0gJWRcbiIsCiAJCQlsZWRfdHlwZV9zdHJbbGVkLT50eXBlXSwgYnJpZ2h0bmVzcyk7CiAJc3dpdGNoIChicmlnaHRuZXNzKSB7CiAJY2FzZSBMRURfRlVMTDoKQEAgLTI1NCw3ICsyNTQsNyBAQAogCiAJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKGRldmljZSwgJmxlZC0+bGVkX2Rldik7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIkVycm9yOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbGVkIGhhbmRsZXIuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IGZhaWxlZCB0byByZWdpc3RlciBsZWQgaGFuZGxlci5cbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMjgwLDcgKzI4MCw3IEBACiAJaWYgKHRwdCA8IDApIC8qIHdyYXBhcm91bmQgKi8KIAkJdHB0ID0gLXRwdDsKIAotCUlXTF9ERUJVR19MRUQoInRwdCAlbGxkIGN1cnJlbnRfdHB0ICVsbHVcbiIsCisJSVdMX0RFQlVHX0xFRChwcml2LCAidHB0ICVsbGQgY3VycmVudF90cHQgJWxsdVxuIiwKIAkJKGxvbmcgbG9uZyl0cHQsCiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpY3VycmVudF90cHQpOwogCXByaXYtPmxlZF90cHQgPSBjdXJyZW50X3RwdDsKQEAgLTI5Miw3ICsyOTIsNyBAQAogCQkJaWYgKHRwdCAgPiAoYmxpbmtfdGJsW2ldLnRwdCAqIElXTF8xTUJfUkFURSkpCiAJCQkJYnJlYWs7CiAKLQlJV0xfREVCVUdfTEVEKCJMRUQgQkxJTksgSURYPSVkXG4iLCBpKTsKKwlJV0xfREVCVUdfTEVEKHByaXYsICJMRUQgQkxJTksgSURYPSVkXG4iLCBpKTsKIAlyZXR1cm4gaTsKIH0KIApAQCAtMzUyLDcgKzM1Miw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JBRElPXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSksICJpd2wtJXM6cmFkaW8iLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SQURJT10ubmFtZSksICJpd2wtJXM6OnJhZGlvIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlwcml2LT5sZWRbSVdMX0xFRF9UUkdfUkFESU9dLmxlZF9vbiA9IGl3bDQ5NjVfbGVkX29uX3JlZzsKQEAgLTM2Niw3ICszNjYsNyBAQAogCiAJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUocHJpdi0+aHcpOwogCXNucHJpbnRmKHByaXYtPmxlZFtJV0xfTEVEX1RSR19BU1NPQ10ubmFtZSwKLQkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOmFzc29jIiwKKwkJIHNpemVvZihwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLm5hbWUpLCAiaXdsLSVzOjphc3NvYyIsCiAJCSB3aXBoeV9uYW1lKHByaXYtPmh3LT53aXBoeSkpOwogCiAJcmV0ID0gaXdsX2xlZHNfcmVnaXN0ZXJfbGVkKHByaXYsICZwcml2LT5sZWRbSVdMX0xFRF9UUkdfQVNTT0NdLApAQCAtMzgyLDcgKzM4Miw3IEBACiAKIAl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShwcml2LT5odyk7CiAJc25wcmludGYocHJpdi0+bGVkW0lXTF9MRURfVFJHX1JYXS5uYW1lLAotCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubmFtZSksICJpd2wtJXM6UlgiLAorCQkgc2l6ZW9mKHByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0ubmFtZSksICJpd2wtJXM6OlJYIiwKIAkJIHdpcGh5X25hbWUocHJpdi0+aHctPndpcGh5KSk7CiAKIAlyZXQgPSBpd2xfbGVkc19yZWdpc3Rlcl9sZWQocHJpdiwgJnByaXYtPmxlZFtJV0xfTEVEX1RSR19SWF0sCkBAIC0zOTcsNyArMzk3LDcgQEAKIAogCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHByaXYtPmh3KTsKIAlzbnByaW50Zihwcml2LT5sZWRbSVdMX0xFRF9UUkdfVFhdLm5hbWUsCi0JCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lKSwgIml3bC0lczpUWCIsCisJCSBzaXplb2YocHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXS5uYW1lKSwgIml3bC0lczo6VFgiLAogCQkgd2lwaHlfbmFtZShwcml2LT5ody0+d2lwaHkpKTsKIAogCXJldCA9IGl3bF9sZWRzX3JlZ2lzdGVyX2xlZChwcml2LCAmcHJpdi0+bGVkW0lXTF9MRURfVFJHX1RYXSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKaW5kZXggMDIxZTAwYi4uZWY5YjE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzUsNyArMzUsNyBAQAogCiAjZGVmaW5lIElXTF9MRURfU09MSUQgMTEKICNkZWZpbmUgSVdMX0xFRF9OQU1FX0xFTiAzMQotI2RlZmluZSBJV0xfREVGX0xFRF9JTlRSVkwgX19jb25zdGFudF9jcHVfdG9fbGUzMigxMDAwKQorI2RlZmluZSBJV0xfREVGX0xFRF9JTlRSVkwgY3B1X3RvX2xlMzIoMTAwMCkKIAogI2RlZmluZSBJV0xfTEVEX0FDVElWSVRZICAgICAgICgwPDwxKQogI2RlZmluZSBJV0xfTEVEX0xJTksgICAgICAgICAgICgxPDwxKQpAQCAtNDcsNyArNDcsOSBAQAogCUlXTF9MRURfVFJHX1JBRElPLAogCUlXTF9MRURfVFJHX01BWCwKIH07CisjZW5kaWYKIAorI2lmZGVmIENPTkZJR19JV0xXSUZJX0xFRFMKIAogc3RydWN0IGl3bF9sZWQgewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCmluZGV4IDc1Y2E2YTUuLjQ3Yzg5NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNjAsMTQgKzYwLDYgQEAKICNkZWZpbmUgSVdMX1BPV0VSX1JBTkdFXzFfTUFYICAoMTApCiAKIAotI2RlZmluZSBOT1NMUCBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApLCAwLCAwCi0jZGVmaW5lIFNMUCBJV0xfUE9XRVJfRFJJVkVSX0FMTE9XX1NMRUVQX01TSywgMCwgMAotI2RlZmluZSBTTFBfVE9VVChUKSBfX2NvbnN0YW50X2NwdV90b19sZTMyKChUKSAqIE1TRUNfVE9fVVNFQykKLSNkZWZpbmUgU0xQX1ZFQyhYMCwgWDEsIFgyLCBYMywgWDQpIHtfX2NvbnN0YW50X2NwdV90b19sZTMyKFgwKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMSksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDIpLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgzKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYNCl9CiAKICNkZWZpbmUgSVdMX1BPV0VSX09OX0JBVFRFUlkJCUlXTF9QT1dFUl9JTkRFWF81CiAjZGVmaW5lIElXTF9QT1dFUl9PTl9BQ19ESVNBU1NPQwlJV0xfUE9XRVJfTU9ERV9DQU0KQEAgLTExMCw2ICsxMDIsNyBAQAogCXt7U0xQLCBTTFBfVE9VVCgyNSksIFNMUF9UT1VUKDI1KSwgU0xQX1ZFQyg0LCA3LCAxMCwgMTAsIDB4RkYpfSwgMH0KIH07CiAKKwogLyogc2V0IGNhcmQgcG93ZXIgY29tbWFuZCAqLwogc3RhdGljIGludCBpd2xfc2V0X3Bvd2VyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdm9pZCAqY21kKQogewpAQCAtMTM0LDEzICsxMjcsNiBAQAogCQllbHNlCiAJCQltb2RlID0gSVdMX1BPV0VSX09OX0FDX0RJU0FTU09DOwogCQlicmVhazsKLQkvKiBGSVhNRTogcmVtb3ZlIGJhdHRlcnkgYW5kIGFjIGZyb20gaGVyZSAqLwotCWNhc2UgSVdMX1BPV0VSX0JBVFRFUlk6Ci0JCW1vZGUgPSBJV0xfUE9XRVJfSU5ERVhfMzsKLQkJYnJlYWs7Ci0JY2FzZSBJV0xfUE9XRVJfQUM6Ci0JCW1vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW1vZGUgPSBwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZzsKIAkJYnJlYWs7CkBAIC0xNDksMTcgKzEzNSwxNyBAQAogfQogCiAvKiBpbml0aWFsaXplIHRvIGRlZmF1bHQgKi8KLXN0YXRpYyBpbnQgaXdsX3Bvd2VyX2luaXRfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bF9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9wb3dlcl9tZ3IgKnBvd19kYXRhOwogCWludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5KSAqIElXTF9QT1dFUl9NQVg7CiAJc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kOwogCWludCBpOwotCXUxNiBwY2lfcG07CisJdTE2IGxjdGw7CiAKLQlJV0xfREVCVUdfUE9XRVIoIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKIAotCXBvd19kYXRhID0gJihwcml2LT5wb3dlcl9kYXRhKTsKKwlwb3dfZGF0YSA9ICZwcml2LT5wb3dlcl9kYXRhOwogCiAJbWVtc2V0KHBvd19kYXRhLCAwLCBzaXplb2YoKnBvd19kYXRhKSk7CiAKQEAgLTE2NywzOCArMTUzLDM3IEBACiAJbWVtY3B5KCZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMF0sICZyYW5nZV8xWzBdLCBzaXplKTsKIAltZW1jcHkoJnBvd19kYXRhLT5wd3JfcmFuZ2VfMlswXSwgJnJhbmdlXzJbMF0sIHNpemUpOwogCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0NGR19MSU5LX0NUUkwsICZwY2lfcG0pOworCWxjdGwgPSBpd2xfcGNpZV9saW5rX2N0bChwcml2KTsKIAotCUlXTF9ERUJVR19QT1dFUigiYWRqdXN0IHBvd2VyIGNvbW1hbmQgZmxhZ3NcbiIpOworCUlXTF9ERUJVR19QT1dFUihwcml2LCAiYWRqdXN0IHBvd2VyIGNvbW1hbmQgZmxhZ3NcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IElXTF9QT1dFUl9NQVg7IGkrKykgewogCQljbWQgPSAmcG93X2RhdGEtPnB3cl9yYW5nZV8wW2ldLmNtZDsKIAotCQlpZiAocGNpX3BtICYgUENJX0NGR19MSU5LX0NUUkxfVkFMX0wwU19FTikKKwkJaWYgKGxjdGwgJiBQQ0lfQ0ZHX0xJTktfQ1RSTF9WQUxfTDBTX0VOKQogCQkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX1BDSV9QTV9NU0s7CiAJCWVsc2UKIAkJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1BDSV9QTV9NU0s7CiAJfQotCXJldHVybiAwOwogfQogCiAvKiBhZGp1c3QgcG93ZXIgY29tbWFuZCBhY2NvcmRpbmcgdG8gRFRJTSBwZXJpb2QgYW5kIHBvd2VyIGxldmVsKi8KLXN0YXRpYyBpbnQgaXdsX3VwZGF0ZV9wb3dlcl9jb21tYW5kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCAqY21kLAotCQkJCSAgICB1MTYgbW9kZSkKK3N0YXRpYyBpbnQgaXdsX3VwZGF0ZV9wb3dlcl9jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQgKmNtZCwgdTE2IG1vZGUpCiB7Ci0JaW50IHJldCA9IDAsIGk7Ci0JdTggc2tpcDsKLQl1MzIgbWF4X3NsZWVwID0gMDsKIAlzdHJ1Y3QgaXdsX3Bvd2VyX3ZlY19lbnRyeSAqcmFuZ2U7Ci0JdTggcGVyaW9kID0gMDsKIAlzdHJ1Y3QgaXdsX3Bvd2VyX21nciAqcG93X2RhdGE7CisJaW50IGk7CisJdTMyIG1heF9zbGVlcCA9IDA7CisJdTggcGVyaW9kOworCWJvb2wgc2tpcDsKIAogCWlmIChtb2RlID4gSVdMX1BPV0VSX0lOREVYXzUpIHsKLQkJSVdMX0RFQlVHX1BPV0VSKCJFcnJvciBpbnZhbGlkIHBvd2VyIG1vZGUgXG4iKTsKLQkJcmV0dXJuIC0xOworCQlJV0xfREVCVUdfUE9XRVIocHJpdiwgIkVycm9yIGludmFsaWQgcG93ZXIgbW9kZSBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcG93X2RhdGEgPSAmKHByaXYtPnBvd2VyX2RhdGEpOworCisJcG93X2RhdGEgPSAmcHJpdi0+cG93ZXJfZGF0YTsKIAogCWlmIChwb3dfZGF0YS0+ZHRpbV9wZXJpb2QgPD0gSVdMX1BPV0VSX1JBTkdFXzBfTUFYKQogCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbMF07CkBAIC0yMTIsMTQgKzE5NywxMiBAQAogCiAJaWYgKHBlcmlvZCA9PSAwKSB7CiAJCXBlcmlvZCA9IDE7Ci0JCXNraXAgPSAwOwotCX0gZWxzZQotCQlza2lwID0gcmFuZ2VbbW9kZV0ubm9fZHRpbTsKLQotCWlmIChza2lwID09IDApIHsKLQkJbWF4X3NsZWVwID0gcGVyaW9kOwotCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKKwkJc2tpcCA9IGZhbHNlOwogCX0gZWxzZSB7CisJCXNraXAgPSAhIXJhbmdlW21vZGVdLm5vX2R0aW07CisJfQorCisJaWYgKHNraXApIHsKIAkJX19sZTMyIHNscF9pdHJ2bCA9IGNtZC0+c2xlZXBfaW50ZXJ2YWxbSVdMX1BPV0VSX1ZFQ19TSVpFIC0gMV07CiAJCW1heF9zbGVlcCA9IGxlMzJfdG9fY3B1KHNscF9pdHJ2bCk7CiAJCWlmIChtYXhfc2xlZXAgPT0gMHhGRikKQEAgLTIyNywyNCArMjEwLDI2IEBACiAJCWVsc2UgaWYgKG1heF9zbGVlcCA+ICBwZXJpb2QpCiAJCQltYXhfc2xlZXAgPSAobGUzMl90b19jcHUoc2xwX2l0cnZsKSAvIHBlcmlvZCkgKiBwZXJpb2Q7CiAJCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1NMRUVQX09WRVJfRFRJTV9NU0s7CisJfSBlbHNlIHsKKwkJbWF4X3NsZWVwID0gcGVyaW9kOworCQljbWQtPmZsYWdzICY9IH5JV0xfUE9XRVJfU0xFRVBfT1ZFUl9EVElNX01TSzsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX1ZFQ19TSVpFOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgSVdMX1BPV0VSX1ZFQ19TSVpFOyBpKyspCiAJCWlmIChsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsW2ldKSA+IG1heF9zbGVlcCkKIAkJCWNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0gPSBjcHVfdG9fbGUzMihtYXhfc2xlZXApOwotCX0KIAotCUlXTF9ERUJVR19QT1dFUigiRmxhZ3MgdmFsdWUgPSAweCUwOFhcbiIsIGNtZC0+ZmxhZ3MpOwotCUlXTF9ERUJVR19QT1dFUigiVHggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnR4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiUnggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnJ4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiU2xlZXAgaW50ZXJ2YWwgdmVjdG9yID0geyAlZCAsICVkICwgJWQgLCAlZCAsICVkIH1cbiIsCisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJGbGFncyB2YWx1ZSA9IDB4JTA4WFxuIiwgY21kLT5mbGFncyk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJUeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+dHhfZGF0YV90aW1lb3V0KSk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJSeCB0aW1lb3V0ID0gJXVcbiIsIGxlMzJfdG9fY3B1KGNtZC0+cnhfZGF0YV90aW1lb3V0KSk7CisJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJTbGVlcCBpbnRlcnZhbCB2ZWN0b3IgPSB7ICVkICwgJWQgLCAlZCAsICVkICwgJWQgfVxuIiwKIAkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMF0pLAogCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFsxXSksCiAJCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzJdKSwKIAkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbM10pLAogCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFs0XSkpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogCkBAIC0yODgsMTQgKzI3MywxNCBAQAogCWlmIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCWZpbmFsX21vZGUgPSBJV0xfUE9XRVJfTU9ERV9DQU07CiAKLQlpZiAoIWl3bF9pc19yZmtpbGwocHJpdikgJiYgIXNldHRpbmctPnBvd2VyX2Rpc2FibGVkICYmCisJaWYgKGl3bF9pc19yZWFkeV9yZihwcml2KSAmJiAhc2V0dGluZy0+cG93ZXJfZGlzYWJsZWQgJiYKIAkgICAgKChzZXR0aW5nLT5wb3dlcl9tb2RlICE9IGZpbmFsX21vZGUpIHx8IGZvcmNlKSkgewogCQlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kIGNtZDsKIAogCQlpZiAoZmluYWxfbW9kZSAhPSBJV0xfUE9XRVJfTU9ERV9DQU0pCiAJCQlzZXRfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpOwogCi0JCWl3bF91cGRhdGVfcG93ZXJfY29tbWFuZChwcml2LCAmY21kLCBmaW5hbF9tb2RlKTsKKwkJaXdsX3VwZGF0ZV9wb3dlcl9jbWQocHJpdiwgJmNtZCwgZmluYWxfbW9kZSk7CiAJCWNtZC5rZWVwX2FsaXZlX2JlYWNvbnMgPSAwOwogCiAJCWlmIChmaW5hbF9tb2RlID09IElXTF9QT1dFUl9JTkRFWF81KQpAQCAtMzExLDcgKzI5Niw3IEBACiAJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT51cGRhdGVfY2hhaW5fZmxhZ3MgJiYgdXBkYXRlX2NoYWlucykKIAkJCXByaXYtPmNmZy0+b3BzLT5saWItPnVwZGF0ZV9jaGFpbl9mbGFncyhwcml2KTsKIAkJZWxzZQotCQkJSVdMX0RFQlVHX1BPV0VSKCJDYW5ub3QgdXBkYXRlIHRoZSBwb3dlciwgY2hhaW4gbm9pc2UgIgorCQkJSVdMX0RFQlVHX1BPV0VSKHByaXYsICJDYW5ub3QgdXBkYXRlIHRoZSBwb3dlciwgY2hhaW4gbm9pc2UgIgogCQkJCQkiY2FsaWJyYXRpb24gcnVubmluZzogJWRcbiIsCiAJCQkJCXByaXYtPmNoYWluX25vaXNlX2RhdGEuc3RhdGUpOwogCQlpZiAoIXJldCkKQEAgLTM2Niw3ICszNTEsNyBAQAogLyogc2V0IHVzZXJfcG93ZXJfc2V0dGluZyAqLwogaW50IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IG1vZGUpCiB7Ci0JaWYgKG1vZGUgPiBJV0xfUE9XRVJfTElNSVQpCisJaWYgKG1vZGUgPiBJV0xfUE9XRVJfTUFYKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByaXYtPnBvd2VyX2RhdGEudXNlcl9wb3dlcl9zZXR0aW5nID0gbW9kZTsKQEAgLTM4MCwxMSArMzY1LDEwIEBACiAgKi8KIGludCBpd2xfcG93ZXJfc2V0X3N5c3RlbV9tb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTE2IG1vZGUpCiB7Ci0JaWYgKG1vZGUgPiBJV0xfUE9XRVJfTElNSVQpCisJaWYgKG1vZGUgPCBJV0xfUE9XRVJfU1lTX01BWCkKKwkJcHJpdi0+cG93ZXJfZGF0YS5zeXN0ZW1fcG93ZXJfc2V0dGluZyA9IG1vZGU7CisJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKLQotCXByaXYtPnBvd2VyX2RhdGEuc3lzdGVtX3Bvd2VyX3NldHRpbmcgPSBtb2RlOwotCiAJcmV0dXJuIGl3bF9wb3dlcl91cGRhdGVfbW9kZShwcml2LCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3Bvd2VyX3NldF9zeXN0ZW1fbW9kZSk7CkBAIC0zOTIsMTMgKzM3NiwxMSBAQAogLyogaW5pdGlhbGl6ZSB0byBkZWZhdWx0ICovCiB2b2lkIGl3bF9wb3dlcl9pbml0aWFsaXplKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQogCWl3bF9wb3dlcl9pbml0X2hhbmRsZShwcml2KTsKIAlwcml2LT5wb3dlcl9kYXRhLnVzZXJfcG93ZXJfc2V0dGluZyA9IElXTF9QT1dFUl9BVVRPOwotCXByaXYtPnBvd2VyX2RhdGEucG93ZXJfZGlzYWJsZWQgPSAwOwogCXByaXYtPnBvd2VyX2RhdGEuc3lzdGVtX3Bvd2VyX3NldHRpbmcgPSBJV0xfUE9XRVJfU1lTX0FVVE87Ci0JcHJpdi0+cG93ZXJfZGF0YS5pc19iYXR0ZXJ5X2FjdGl2ZSA9IDA7CiAJcHJpdi0+cG93ZXJfZGF0YS5wb3dlcl9kaXNhYmxlZCA9IDA7CisJcHJpdi0+cG93ZXJfZGF0YS5pc19iYXR0ZXJ5X2FjdGl2ZSA9IDA7CiAJcHJpdi0+cG93ZXJfZGF0YS5jcml0aWNhbF9wb3dlcl9zZXR0aW5nID0gMDsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3Bvd2VyX2luaXRpYWxpemUpOwpAQCAtNDA3LDggKzM4OSw4IEBACiBpbnQgaXdsX3Bvd2VyX3RlbXBlcmF0dXJlX2NoYW5nZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldCA9IDA7Ci0JdTE2IG5ld19jcml0aWNhbCA9IHByaXYtPnBvd2VyX2RhdGEuY3JpdGljYWxfcG93ZXJfc2V0dGluZzsKIAlzMzIgdGVtcGVyYXR1cmUgPSBLRUxWSU5fVE9fQ0VMU0lVUyhwcml2LT5sYXN0X3RlbXBlcmF0dXJlKTsKKwl1MTYgbmV3X2NyaXRpY2FsID0gcHJpdi0+cG93ZXJfZGF0YS5jcml0aWNhbF9wb3dlcl9zZXR0aW5nOwogCiAJaWYgKHRlbXBlcmF0dXJlID4gSVdMX0NUX0tJTExfVEVNUEVSQVRVUkUpCiAJCXJldHVybiAwOwpAQCAtNDM0LDcgKzQxNiw3IEBACiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJc3RydWN0IGl3bF9wcml2LCBzZXRfcG93ZXJfc2F2ZS53b3JrKTsKLQlJV0xfREVCVUcoSVdMX0RMX1NUQVRFLCAidXBkYXRlIHBvd2VyXG4iKTsKKwlJV0xfREVCVUdfUE9XRVIocHJpdiwgInVwZGF0ZSBwb3dlclxuIik7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oCmluZGV4IGZhMDk4ZDguLjE4OTYzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNDIsMjIgKzQyLDI2IEBACiAJSVdMX1BPV0VSX0lOREVYXzUsCiAJSVdMX1BPV0VSX0FVVE8sCiAJSVdMX1BPV0VSX01BWCA9IElXTF9QT1dFUl9BVVRPLAotCUlXTF9QT1dFUl9BQywKLQlJV0xfUE9XRVJfQkFUVEVSWSwKIH07CiAKIGVudW0gewogCUlXTF9QT1dFUl9TWVNfQVVUTywKIAlJV0xfUE9XRVJfU1lTX0FDLAogCUlXTF9QT1dFUl9TWVNfQkFUVEVSWSwKKwlJV0xfUE9XRVJfU1lTX01BWCwKIH07CiAKLSNkZWZpbmUgSVdMX1BPV0VSX0xJTUlUCQkweDA4Ci0jZGVmaW5lIElXTF9QT1dFUl9NQVNLCQkweDBGCi0jZGVmaW5lIElXTF9QT1dFUl9FTkFCTEVECTB4MTAKIAogLyogUG93ZXIgbWFuYWdlbWVudCAobm90IFR4IHBvd2VyKSBzdHJ1Y3R1cmVzICovCiAKKyNkZWZpbmUgTk9TTFAgY3B1X3RvX2xlMTYoMCksIDAsIDAKKyNkZWZpbmUgU0xQIElXTF9QT1dFUl9EUklWRVJfQUxMT1dfU0xFRVBfTVNLLCAwLCAwCisjZGVmaW5lIFNMUF9UT1VUKFQpIGNwdV90b19sZTMyKChUKSAqIE1TRUNfVE9fVVNFQykKKyNkZWZpbmUgU0xQX1ZFQyhYMCwgWDEsIFgyLCBYMywgWDQpIHtjcHVfdG9fbGUzMihYMCksIFwKKwkJCQkgICAgIGNwdV90b19sZTMyKFgxKSwgXAorCQkJCSAgICAgY3B1X3RvX2xlMzIoWDIpLCBcCisJCQkJICAgICBjcHVfdG9fbGUzMihYMyksIFwKKwkJCQkgICAgIGNwdV90b19sZTMyKFg0KX0KIHN0cnVjdCBpd2xfcG93ZXJfdmVjX2VudHJ5IHsKIAlzdHJ1Y3QgaXdsX3Bvd2VydGFibGVfY21kIGNtZDsKIAl1OCBub19kdGltOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCmluZGV4IGI3YTVmMjMuLjNiOWNhYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yZmtpbGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jCmluZGV4IDRiNjlkYTMuLjJhZDlmYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC00Nyw3ICs0Nyw3IEBACiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm4gMDsKIAotCUlXTF9ERUJVR19SRl9LSUxMKCJ3ZSByZWNlaXZlZCBzb2Z0IFJGS0lMTCBzZXQgdG8gc3RhdGUgJWRcbiIsIHN0YXRlKTsKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAid2UgcmVjZWl2ZWQgc29mdCBSRktJTEwgc2V0IHRvIHN0YXRlICVkXG4iLCBzdGF0ZSk7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJc3dpdGNoIChzdGF0ZSkgewpAQCAtNjIsNyArNjIsOCBAQAogCQlpd2xfcmFkaW9fa2lsbF9zd19kaXNhYmxlX3JhZGlvKHByaXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlJV0xfV0FSTklORygid2UgcmVjZWl2ZWQgdW5leHBlY3RlZCBSRktJTEwgc3RhdGUgJWRcbiIsIHN0YXRlKTsKKwkJSVdMX1dBUk4ocHJpdiwgIndlIHJlY2VpdmVkIHVuZXhwZWN0ZWQgUkZLSUxMIHN0YXRlICVkXG4iLAorCQkJc3RhdGUpOwogCQlicmVhazsKIAl9CiBvdXRfdW5sb2NrOgpAQCAtNzgsMTAgKzc5LDEwIEBACiAKIAlCVUdfT04oZGV2aWNlID09IE5VTEwpOwogCi0JSVdMX0RFQlVHX1JGX0tJTEwoIkluaXRpYWxpemluZyBSRktJTEwuXG4iKTsKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiSW5pdGlhbGl6aW5nIFJGS0lMTC5cbiIpOwogCXByaXYtPnJma2lsbCA9IHJma2lsbF9hbGxvY2F0ZShkZXZpY2UsIFJGS0lMTF9UWVBFX1dMQU4pOwogCWlmICghcHJpdi0+cmZraWxsKSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGFsbG9jYXRlIFJGS0lMTCBkZXZpY2UuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIFJGS0lMTCBkZXZpY2UuXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC05NywxMSArOTgsMTEgQEAKIAogCXJldCA9IHJma2lsbF9yZWdpc3Rlcihwcml2LT5yZmtpbGwpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gcmVnaXN0ZXIgUkZLSUxMOiAlZFxuIiwgcmV0KTsKKwkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIFJGS0lMTDogJWRcbiIsIHJldCk7CiAJCWdvdG8gZnJlZV9yZmtpbGw7CiAJfQogCi0JSVdMX0RFQlVHX1JGX0tJTEwoIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOworCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJSRktJTEwgaW5pdGlhbGl6YXRpb24gY29tcGxldGUuXG4iKTsKIAlyZXR1cm4gcmV0OwogCiBmcmVlX3Jma2lsbDoKQEAgLTExMCw3ICsxMTEsNyBAQAogCXByaXYtPnJma2lsbCA9IE5VTEw7CiAKIGVycm9yOgotCUlXTF9ERUJVR19SRl9LSUxMKCJSRktJTEwgaW5pdGlhbGl6YXRpb24gY29tcGxldGUuXG4iKTsKKwlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiUkZLSUxMIGluaXRpYWxpemF0aW9uIGNvbXBsZXRlLlxuIik7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3Jma2lsbF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJma2lsbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmgKaW5kZXggODZkYzA1NS4uNjMzZGFmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcmZraWxsLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCmluZGV4IGM1ZjFhYTAuLjhmNjU5MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtMTI1LDkgKzEyNSwxMCBAQAogICovCiBpbnQgaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpxKQogewotCXUzMiByZWcgPSAwOwotCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHJ4X3dydF9wdHJfcmVnID0gcHJpdi0+aHdfcGFyYW1zLnJ4X3dydF9wdHJfcmVnOworCXUzMiByZWc7CisJaW50IHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+bG9jaywgZmxhZ3MpOwogCkBAIC0xNDksMTUgKzE1MCwxNCBAQAogCQkJZ290byBleGl0X3VubG9jazsKIAogCQkvKiBEZXZpY2UgZXhwZWN0cyBhIG11bHRpcGxlIG9mIDggKi8KLQkJaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEZIX1JTQ1NSX0NITkwwX1dQVFIsCi0JCQkJICAgICBxLT53cml0ZSAmIH4weDcpOworCQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgcnhfd3J0X3B0cl9yZWcsIHEtPndyaXRlICYgfjB4Nyk7CiAJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAkvKiBFbHNlIGRldmljZSBpcyBhc3N1bWVkIHRvIGJlIGF3YWtlICovCi0JfSBlbHNlCisJfSBlbHNlIHsKIAkJLyogRGV2aWNlIGV4cGVjdHMgYSBtdWx0aXBsZSBvZiA4ICovCi0JCWl3bF93cml0ZTMyKHByaXYsIEZIX1JTQ1NSX0NITkwwX1dQVFIsIHEtPndyaXRlICYgfjB4Nyk7Ci0KKwkJaXdsX3dyaXRlMzIocHJpdiwgcnhfd3J0X3B0cl9yZWcsIHEtPndyaXRlICYgfjB4Nyk7CisJfQogCiAJcS0+bmVlZF91cGRhdGUgPSAwOwogCkBAIC0yNjIsOCArMjYyLDcgQEAKIAkJcnhiLT5za2IgPSBhbGxvY19za2IocHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplICsgMjU2LAogCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICghcnhiLT5za2IpIHsKLQkJCXByaW50ayhLRVJOX0NSSVQgRFJWX05BTUUKLQkJCQkgICAiQ2FuIG5vdCBhbGxvY2F0ZSBTS0IgYnVmZmVyc1xuIik7CisJCQlJV0xfQ1JJVChwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBTS0IgYnVmZmVyc1xuIik7CiAJCQkvKiBXZSBkb24ndCByZXNjaGVkdWxlIHJlcGxlbmlzaCB3b3JrIGhlcmUgLS0gd2Ugd2lsbAogCQkJICogY2FsbCB0aGUgcmVzdG9jayBtZXRob2QgYW5kIGlmIGl0IHN0aWxsIG5lZWRzCiAJCQkgKiBtb3JlIGJ1ZmZlcnMgaXQgd2lsbCBzY2hlZHVsZSByZXBsZW5pc2ggKi8KQEAgLTQ5NSw3ICs0OTQsNyBAQAogCiAJbWlzc2VkX2JlYWNvbiA9ICZwa3QtPnUubWlzc2VkX2JlYWNvbjsKIAlpZiAobGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+Y29uc2VxdXRpdmVfbWlzc2VkX2JlYWNvbnMpID4gNSkgewotCQlJV0xfREVCVUdfQ0FMSUIoIm1pc3NlZCBiY24gY25zcSAlZCB0b3RsICVkIHJjZCAlZCBleHBjdGQgJWRcbiIsCisJCUlXTF9ERUJVR19DQUxJQihwcml2LCAibWlzc2VkIGJjbiBjbnNxICVkIHRvdGwgJWQgcmNkICVkIGV4cGN0ZCAlZFxuIiwKIAkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlcXV0aXZlX21pc3NlZF9iZWFjb25zKSwKIAkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPnRvdGFsX21pc3NlZF9iZWNvbnMpLAogCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+bnVtX3JlY3ZkX2JlYWNvbnMpLApAQCAtNTQyLDcgKzU0MSw3IEBACiAJZWxzZQogCQlwcml2LT5sYXN0X3J4X25vaXNlID0gSVdMX05PSVNFX01FQVNfTk9UX0FWQUlMQUJMRTsKIAotCUlXTF9ERUJVR19DQUxJQigiaW5iYW5kIHNpbGVuY2UgYSAldSwgYiAldSwgYyAldSwgZEJtICVkXG4iLAorCUlXTF9ERUJVR19DQUxJQihwcml2LCAiaW5iYW5kIHNpbGVuY2UgYSAldSwgYiAldSwgYyAldSwgZEJtICVkXG4iLAogCQkJYmNuX3NpbGVuY2VfYSwgYmNuX3NpbGVuY2VfYiwgYmNuX3NpbGVuY2VfYywKIAkJCXByaXYtPmxhc3Rfcnhfbm9pc2UpOwogfQpAQCAtNTU1LDcgKzU1NCw3IEBACiAJaW50IGNoYW5nZTsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7CiAKLQlJV0xfREVCVUdfUlgoIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAorCUlXTF9ERUJVR19SWChwcml2LCAiU3RhdGlzdGljcyBub3RpZmljYXRpb24gcmVjZWl2ZWQgKCVkIHZzICVkKS5cbiIsCiAJCSAgICAgKGludClzaXplb2YocHJpdi0+c3RhdGlzdGljcyksIHBrdC0+bGVuKTsKIAogCWNoYW5nZSA9ICgocHJpdi0+c3RhdGlzdGljcy5nZW5lcmFsLnRlbXBlcmF0dXJlICE9CkBAIC03NDIsMTMgKzc0MSwxMyBAQAogCQkgKiBNQUMgYWRkcmVzc2VzIHNob3cganVzdCB0aGUgbGFzdCBieXRlIChmb3IgYnJldml0eSksCiAJCSAqICAgIGJ1dCB5b3UgY2FuIGhhY2sgaXQgdG8gc2hvdyBtb3JlLCBpZiB5b3UnZCBsaWtlIHRvLiAqLwogCQlpZiAoZGF0YWZyYW1lKQotCQkJSVdMX0RFQlVHX1JYKCIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgorCQkJSVdMX0RFQlVHX1JYKHByaXYsICIlczogbWhkPTB4JTA0eCwgZHN0PTB4JTAyeCwgIgogCQkJCSAgICAgImxlbj0ldSwgcnNzaT0lZCwgY2hubD0lZCwgcmF0ZT0ldSwgXG4iLAogCQkJCSAgICAgdGl0bGUsIGxlMTZfdG9fY3B1KGZjKSwgaGVhZGVyLT5hZGRyMVs1XSwKIAkJCQkgICAgIGxlbmd0aCwgcnNzaSwgY2hhbm5lbCwgYml0cmF0ZSk7CiAJCWVsc2UgewogCQkJLyogc3JjL2RzdCBhZGRyZXNzZXMgYXNzdW1lIG1hbmFnZWQgbW9kZSAqLwotCQkJSVdMX0RFQlVHX1JYKCIlczogMHglMDR4LCBkc3Q9MHglMDJ4LCBzcmM9MHglMDJ4LCAiCisJCQlJV0xfREVCVUdfUlgocHJpdiwgIiVzOiAweCUwNHgsIGRzdD0weCUwMngsIHNyYz0weCUwMngsICIKIAkJCQkgICAgICJsZW49JXUsIHJzc2k9JWQsIHRpbT0lbHUgdXNlYywgIgogCQkJCSAgICAgInBoeT0weCUwMngsIGNobmw9JWRcbiIsCiAJCQkJICAgICB0aXRsZSwgbGUxNl90b19jcHUoZmMpLCBoZWFkZXItPmFkZHIxWzVdLApAQCAtNzczLDEwICs3NzIsMTAgQEAKIC8qCiAgKiByZXR1cm5zIG5vbi16ZXJvIGlmIHBhY2tldCBzaG91bGQgYmUgZHJvcHBlZAogICovCi1zdGF0aWMgaW50IGl3bF9zZXRfZGVjcnlwdGVkX2ZsYWcoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCi0JCQkJICAgICAgdTMyIGRlY3J5cHRfcmVzLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0cykKK2ludCBpd2xfc2V0X2RlY3J5cHRlZF9mbGFnKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsCisJCQkgICB1MzIgZGVjcnlwdF9yZXMsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCiB7CiAJdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jb250cm9sKTsKIApAQCAtNzg2LDcgKzc4NSw3IEBACiAJaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKQogCQlyZXR1cm4gMDsKIAotCUlXTF9ERUJVR19SWCgiZGVjcnlwdF9yZXM6MHgleFxuIiwgZGVjcnlwdF9yZXMpOworCUlXTF9ERUJVR19SWChwcml2LCAiZGVjcnlwdF9yZXM6MHgleFxuIiwgZGVjcnlwdF9yZXMpOwogCXN3aXRjaCAoZGVjcnlwdF9yZXMgJiBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX01TSykgewogCWNhc2UgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9US0lQOgogCQkvKiBUaGUgdUNvZGUgaGFzIGdvdCBhIGJhZCBwaGFzZSAxIEtleSwgcHVzaGVzIHRoZSBwYWNrZXQuCkBAIC04MDAsMTMgKzc5OSwxMyBAQAogCQkgICAgUlhfUkVTX1NUQVRVU19CQURfSUNWX01JQykgewogCQkJLyogYmFkIElDViwgdGhlIHBhY2tldCBpcyBkZXN0cm95ZWQgc2luY2UgdGhlCiAJCQkgKiBkZWNyeXB0aW9uIGlzIGlucGxhY2UsIGRyb3AgaXQgKi8KLQkJCUlXTF9ERUJVR19SWCgiUGFja2V0IGRlc3Ryb3llZFxuIik7CisJCQlJV0xfREVCVUdfUlgocHJpdiwgIlBhY2tldCBkZXN0cm95ZWRcbiIpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJY2FzZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX0NDTVA6CiAJCWlmICgoZGVjcnlwdF9yZXMgJiBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfVFlQRV9NU0spID09CiAJCSAgICBSWF9SRVNfU1RBVFVTX0RFQ1JZUFRfT0spIHsKLQkJCUlXTF9ERUJVR19SWCgiaHcgZGVjcnlwdCBzdWNjZXNzZnVsbHkhISFcbiIpOworCQkJSVdMX0RFQlVHX1JYKHByaXYsICJodyBkZWNyeXB0IHN1Y2Nlc3NmdWxseSEhIVxuIik7CiAJCQlzdGF0cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKIAkJfQogCQlicmVhazsKQEAgLTgxNiw2ICs4MTUsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX3NldF9kZWNyeXB0ZWRfZmxhZyk7CiAKIHN0YXRpYyB1MzIgaXdsX3RyYW5zbGF0ZV9yeF9zdGF0dXMoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgZGVjcnlwdF9pbikKIHsKQEAgLTg3MCw3ICs4NzAsNyBAQAogCQlicmVhazsKIAl9OwogCi0JSVdMX0RFQlVHX1JYKCJkZWNyeXB0X2luOjB4JXggIGRlY3J5cHRfb3V0ID0gMHgleFxuIiwKKwlJV0xfREVCVUdfUlgocHJpdiwgImRlY3J5cHRfaW46MHgleCAgZGVjcnlwdF9vdXQgPSAweCV4XG4iLAogCQkJCQlkZWNyeXB0X2luLCBkZWNyeXB0X291dCk7CiAKIAlyZXR1cm4gZGVjcnlwdF9vdXQ7CkBAIC04OTUsNyArODk1LDcgQEAKIAkJcnhfc3RhcnQgPSAoc3RydWN0IGl3bF9yeF9waHlfcmVzICopJnByaXYtPmxhc3RfcGh5X3Jlc1sxXTsKIAogCWlmICghcnhfc3RhcnQpIHsKLQkJSVdMX0VSUk9SKCJNUERVIGZyYW1lIHdpdGhvdXQgYSBQSFkgZGF0YVxuIik7CisJCUlXTF9FUlIocHJpdiwgIk1QRFUgZnJhbWUgd2l0aG91dCBhIFBIWSBkYXRhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoaW5jbHVkZV9waHkpIHsKQEAgLTkzNCw4ICs5MzQsOCBAQAogCiAJLyogV2Ugb25seSBwcm9jZXNzIGRhdGEgcGFja2V0cyBpZiB0aGUgaW50ZXJmYWNlIGlzIG9wZW4gKi8KIAlpZiAodW5saWtlbHkoIXByaXYtPmlzX29wZW4pKSB7Ci0JCUlXTF9ERUJVR19EUk9QX0xJTUlUCi0JCSAgICAoIkRyb3BwaW5nIHBhY2tldCB3aGlsZSBpbnRlcmZhY2UgaXMgbm90IG9wZW4uXG4iKTsKKwkJSVdMX0RFQlVHX0RST1BfTElNSVQocHJpdiwKKwkJICAgICJEcm9wcGluZyBwYWNrZXQgd2hpbGUgaW50ZXJmYWNlIGlzIG5vdCBvcGVuLlxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwMDcsNyArMTAwNyw3IEBACiAJLypyeF9zdGF0dXMuZmxhZyB8PSBSWF9GTEFHX1RTRlQ7Ki8KIAogCWlmICgodW5saWtlbHkocnhfc3RhcnQtPmNmZ19waHlfY250ID4gMjApKSkgewotCQlJV0xfREVCVUdfRFJPUCgiZHNwIHNpemUgb3V0IG9mIHJhbmdlIFswLDIwXTogJWQvbiIsCisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJkc3Agc2l6ZSBvdXQgb2YgcmFuZ2UgWzAsMjBdOiAlZC9uIiwKIAkJCQlyeF9zdGFydC0+Y2ZnX3BoeV9jbnQpOwogCQlyZXR1cm47CiAJfQpAQCAtMTAyMSw3ICsxMDIxLDcgQEAKIAl9CiAKIAlpZiAoIXJ4X3N0YXJ0KSB7Ci0JCUlXTF9FUlJPUigiTVBEVSBmcmFtZSB3aXRob3V0IGEgUEhZIGRhdGFcbiIpOworCQlJV0xfRVJSKHByaXYsICJNUERVIGZyYW1lIHdpdGhvdXQgYSBQSFkgZGF0YVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwNDUsNyArMTA0NSw3IEBACiAKIAlpZiAoISgqcnhfZW5kICYgUlhfUkVTX1NUQVRVU19OT19DUkMzMl9FUlJPUikgfHwKIAkgICAgISgqcnhfZW5kICYgUlhfUkVTX1NUQVRVU19OT19SWEVfT1ZFUkZMT1cpKSB7Ci0JCUlXTF9ERUJVR19SWCgiQmFkIENSQyBvciBGSUZPOiAweCUwOFguXG4iLAorCQlJV0xfREVCVUdfUlgocHJpdiwgIkJhZCBDUkMgb3IgRklGTzogMHglMDhYLlxuIiwKIAkJCQlsZTMyX3RvX2NwdSgqcnhfZW5kKSk7CiAJCXJldHVybjsKIAl9CkBAIC0xMDc4LDcgKzEwNzgsNyBAQAogCWlmICh1bmxpa2VseShwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9SWCkpCiAJCWl3bF9kYmdfcmVwb3J0X2ZyYW1lKHByaXYsIHJ4X3N0YXJ0LCBsZW4sIGhlYWRlciwgMSk7CiAjZW5kaWYKLQlJV0xfREVCVUdfU1RBVFNfTElNSVQoIlJzc2kgJWQsIG5vaXNlICVkLCBxdWFsICVkLCBUU0YgJWxsdVxuIiwKKwlJV0xfREVCVUdfU1RBVFNfTElNSVQocHJpdiwgIlJzc2kgJWQsIG5vaXNlICVkLCBxdWFsICVkLCBUU0YgJWxsdVxuIiwKIAkJcnhfc3RhdHVzLnNpZ25hbCwgcnhfc3RhdHVzLm5vaXNlLCByeF9zdGF0dXMuc2lnbmFsLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXJ4X3N0YXR1cy5tYWN0aW1lKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCmluZGV4IDNjODAzZjYuLjIzNjQ0Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtNDYsMTUgKzQ2LDYgQEAKICNkZWZpbmUgSVdMX0FDVElWRV9EV0VMTF9GQUNUT1JfMjRHSFogKDMpCiAjZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzUyR0haICgyKQogCi0vKiBGb3IgZmFzdGVyIGFjdGl2ZSBzY2FubmluZywgc2NhbiB3aWxsIG1vdmUgdG8gdGhlIG5leHQgY2hhbm5lbCBpZiBmZXdlciB0aGFuCi0gKiBQTENQX1FVSUVUX1RIUkVTSCBwYWNrZXRzIGFyZSBoZWFyZCBvbiB0aGlzIGNoYW5uZWwgd2l0aGluCi0gKiBBQ1RJVkVfUVVJRVRfVElNRSBhZnRlciBzZW5kaW5nIHByb2JlIHJlcXVlc3QuICBUaGlzIHNob3J0ZW5zIHRoZSBkd2VsbAotICogdGltZSBpZiBpdCdzIGEgcXVpZXQgY2hhbm5lbCAobm90aGluZyByZXNwb25kZWQgdG8gb3VyIHByb2JlLCBhbmQgdGhlcmUncwotICogbm8gb3RoZXIgdHJhZmZpYykuCi0gKiBEaXNhYmxlICJxdWlldCIgZmVhdHVyZSBieSBzZXR0aW5nIFBMQ1BfUVVJRVRfVEhSRVNIIHRvIDAuICovCi0jZGVmaW5lIElXTF9QTENQX1FVSUVUX1RIUkVTSCAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpICAvKiBwYWNrZXRzICovCi0jZGVmaW5lIElXTF9BQ1RJVkVfUVVJRVRfVElNRSAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEwKSAgLyogbXNlYyAqLwotCiAvKiBGb3IgcGFzc2l2ZSBzY2FuLCBsaXN0ZW4gUEFTU0lWRV9EV0VMTF9USU1FIChtc2VjKSBvbiBlYWNoIGNoYW5uZWwuCiAgKiBNdXN0IGJlIHNldCBsb25nZXIgdGhhbiBhY3RpdmUgZHdlbGwgdGltZS4KICAqIEZvciB0aGUgbW9zdCByZWxpYWJsZSBzY2FuLCBzZXQgPiBBUCBiZWFjb24gaW50ZXJ2YWwgKHR5cGljYWxseSAxMDBtc2VjKS4gKi8KQEAgLTYzLDcgKzU0LDYgQEAKICNkZWZpbmUgSVdMX1BBU1NJVkVfRFdFTExfQkFTRSAgICAgICgxMDApCiAjZGVmaW5lIElXTF9DSEFOTkVMX1RVTkVfVElNRSAgICAgICA1CiAKLSNkZWZpbmUgSVdMX1NDQU5fUFJPQkVfTUFTSyhuKSAJY3B1X3RvX2xlMzIoKEJJVChuKSB8IChCSVQobikgLSBCSVQoMSkpKSkKIAogCiAvKioKQEAgLTgwLDEyICs3MCwxMiBAQAogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJCUlXTF9ERUJVR19TQ0FOKCJRdWV1aW5nIHNjYW4gYWJvcnQuXG4iKTsKKwkJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJRdWV1aW5nIHNjYW4gYWJvcnQuXG4iKTsKIAkJCXNldF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwogCQkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5hYm9ydF9zY2FuKTsKIAogCQl9IGVsc2UKLQkJCUlXTF9ERUJVR19TQ0FOKCJTY2FuIGFib3J0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKKwkJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIGFib3J0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKIAogCQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKTsKIAl9CkBAIC0xMTksNyArMTA5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQpOwogCi1zdGF0aWMgaW50IGl3bF9zZW5kX3NjYW5fYWJvcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQoraW50IGl3bF9zZW5kX3NjYW5fYWJvcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpyZXM7CkBAIC0xNTAsNyArMTQwLDcgQEAKIAkJICogY2FuIG9jY3VyIGlmIHdlIHNlbmQgdGhlIHNjYW4gYWJvcnQgYmVmb3JlIHdlCiAJCSAqIHRoZSBtaWNyb2NvZGUgaGFzIG5vdGlmaWVkIHVzIHRoYXQgYSBzY2FuIGlzCiAJCSAqIGNvbXBsZXRlZC4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIlNDQU5fQUJPUlQgcmV0dXJuZWQgJWQuXG4iLCByZXMtPnUuc3RhdHVzKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNDQU5fQUJPUlQgcmV0dXJuZWQgJWQuXG4iLCByZXMtPnUuc3RhdHVzKTsKIAkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKIAkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKTsKIAl9CkBAIC0xNjAsNyArMTUwLDcgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KK0VYUE9SVF9TWU1CT0woaXdsX3NlbmRfc2Nhbl9hYm9ydCk7CiAKIC8qIFNlcnZpY2UgcmVzcG9uc2UgdG8gUkVQTFlfU0NBTl9DTUQgKDB4ODApICovCiBzdGF0aWMgdm9pZCBpd2xfcnhfcmVwbHlfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0xNzEsNyArMTYxLDcgQEAKIAlzdHJ1Y3QgaXdsX3NjYW5yZXFfbm90aWZpY2F0aW9uICpub3RpZiA9CiAJICAgIChzdHJ1Y3QgaXdsX3NjYW5yZXFfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKIAotCUlXTF9ERUJVR19SWCgiU2NhbiByZXF1ZXN0IHN0YXR1cyA9IDB4JXhcbiIsIG5vdGlmLT5zdGF0dXMpOworCUlXTF9ERUJVR19SWChwcml2LCAiU2NhbiByZXF1ZXN0IHN0YXR1cyA9IDB4JXhcbiIsIG5vdGlmLT5zdGF0dXMpOwogI2VuZGlmCiB9CiAKQEAgLTE4Myw3ICsxNzMsNyBAQAogCXN0cnVjdCBpd2xfc2NhbnN0YXJ0X25vdGlmaWNhdGlvbiAqbm90aWYgPQogCSAgICAoc3RydWN0IGl3bF9zY2Fuc3RhcnRfbm90aWZpY2F0aW9uICopcGt0LT51LnJhdzsKIAlwcml2LT5zY2FuX3N0YXJ0X3RzZiA9IGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfbG93KTsKLQlJV0xfREVCVUdfU0NBTigiU2NhbiBzdGFydDogIgorCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIHN0YXJ0OiAiCiAJCSAgICAgICAiJWQgWzgwMi4xMSVzXSAiCiAJCSAgICAgICAiKFRTRjogMHglMDhYOiUwOFgpIC0gJWQgKGJlYWNvbiB0aW1lciAldSlcbiIsCiAJCSAgICAgICBub3RpZi0+Y2hhbm5lbCwKQEAgLTIwMiw3ICsxOTIsNyBAQAogCXN0cnVjdCBpd2xfc2NhbnJlc3VsdHNfbm90aWZpY2F0aW9uICpub3RpZiA9CiAJICAgIChzdHJ1Y3QgaXdsX3NjYW5yZXN1bHRzX25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7CiAKLQlJV0xfREVCVUdfU0NBTigiU2NhbiBjaC5yZXM6ICIKKwlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjaC5yZXM6ICIKIAkJICAgICAgICIlZCBbODAyLjExJXNdICIKIAkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAiCiAJCSAgICAgICAiZWxhcHNlZD0lbHUgdXNlYyAoJWRtcyBzaW5jZSBsYXN0KVxuIiwKQEAgLTIyOCw3ICsyMTgsNyBAQAogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsX3NjYW5jb21wbGV0ZV9ub3RpZmljYXRpb24gKnNjYW5fbm90aWYgPSAodm9pZCAqKXBrdC0+dS5yYXc7CiAKLQlJV0xfREVCVUdfU0NBTigiU2NhbiBjb21wbGV0ZTogJWQgY2hhbm5lbHMgKFRTRiAweCUwOFg6JTA4WCkgLSAlZFxuIiwKKwlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjb21wbGV0ZTogJWQgY2hhbm5lbHMgKFRTRiAweCUwOFg6JTA4WCkgLSAlZFxuIiwKIAkJICAgICAgIHNjYW5fbm90aWYtPnNjYW5uZWRfY2hhbm5lbHMsCiAJCSAgICAgICBzY2FuX25vdGlmLT50c2ZfbG93LAogCQkgICAgICAgc2Nhbl9ub3RpZi0+dHNmX2hpZ2gsIHNjYW5fbm90aWYtPnN0YXR1cyk7CkBAIC0yNDAsNyArMjMwLDcgQEAKIAkvKiBUaGUgc2NhbiBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBjYW1lIGluLCBzbyBraWxsIHRoYXQgdGltZXIuLi4gKi8KIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKIAotCUlXTF9ERUJVR19JTkZPKCJTY2FuIHBhc3Mgb24gJXNHSHogdG9vayAlZG1zXG4iLAorCUlXTF9ERUJVR19JTkZPKHByaXYsICJTY2FuIHBhc3Mgb24gJXNHSHogdG9vayAlZG1zXG4iLAogCQkgICAgICAgKHByaXYtPnNjYW5fYmFuZHMgJiBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWikpID8KIAkJCQkJCSIyLjQiIDogIjUuMiIsCiAJCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGVsYXBzZWRfamlmZmllcwpAQCAtMjU4LDcgKzI0OCw3IEBACiAJICogdGhlbiB3ZSByZXNldCB0aGUgc2NhbiBzdGF0ZSBtYWNoaW5lIGFuZCB0ZXJtaW5hdGUsCiAJICogcmUtcXVldWluZyBhbm90aGVyIHNjYW4gaWYgb25lIGhhcyBiZWVuIHJlcXVlc3RlZCAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkFib3J0ZWQgc2NhbiBjb21wbGV0ZWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkFib3J0ZWQgc2NhbiBjb21wbGV0ZWQuXG4iKTsKIAkJY2xlYXJfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKIAl9IGVsc2UgewogCQkvKiBJZiB0aGVyZSBhcmUgbW9yZSBiYW5kcyBvbiB0aGlzIHNjYW4gcGFzcyByZXNjaGVkdWxlICovCkBAIC0yNjgsMTEgKzI1OCwxMSBAQAogCiAJcHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzOwogCXByaXYtPm5leHRfc2Nhbl9qaWZmaWVzID0gMDsKLQlJV0xfREVCVUdfSU5GTygiU2V0dGluZyBzY2FuIHRvIG9mZlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNldHRpbmcgc2NhbiB0byBvZmZcbiIpOwogCiAJY2xlYXJfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CiAKLQlJV0xfREVCVUdfSU5GTygiU2NhbiB0b29rICVkbXNcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNjYW4gdG9vayAlZG1zXG4iLAogCQlqaWZmaWVzX3RvX21zZWNzKGVsYXBzZWRfamlmZmllcyhwcml2LT5zY2FuX3N0YXJ0LCBqaWZmaWVzKSkpOwogCiAJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7CkBAIC0yOTYsOSArMjg2LDkgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NldHVwX3J4X3NjYW5faGFuZGxlcnMpOwogCi1zdGF0aWMgaW5saW5lIHUxNiBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKLQkJCQkJICAgIHU4IG5fcHJvYmVzKQoraW5saW5lIHUxNiBpd2xfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCQkgICAgIHU4IG5fcHJvYmVzKQogewogCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCiAJCXJldHVybiBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfNTIgKwpAQCAtMzA3LDkgKzI5NywxMCBAQAogCQlyZXR1cm4gSVdMX0FDVElWRV9EV0VMTF9USU1FXzI0ICsKIAkJCUlXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzI0R0haICogKG5fcHJvYmVzICsgMSk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUpOwogCi1zdGF0aWMgdTE2IGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCit1MTYgaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKIHsKIAl1MTYgcGFzc2l2ZSA9IChiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopID8KIAkgICAgSVdMX1BBU1NJVkVfRFdFTExfQkFTRSArIElXTF9QQVNTSVZFX0RXRUxMX1RJTUVfMjQgOgpAQCAtMzI3LDYgKzMxOCw3IEBACiAKIAlyZXR1cm4gcGFzc2l2ZTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUpOwogCiBzdGF0aWMgaW50IGl3bF9nZXRfY2hhbm5lbHNfZm9yX3NjYW4oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLApAQCAtMzYzLDcgKzM1NSw3IEBACiAKIAkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGJhbmQsIGNoYW5uZWwpOwogCQlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpIHsKLQkJCUlXTF9ERUJVR19TQ0FOKCJDaGFubmVsICVkIGlzIElOVkFMSUQgZm9yIHRoaXMgYmFuZC5cbiIsCisJCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQ2hhbm5lbCAlZCBpcyBJTlZBTElEIGZvciB0aGlzIGJhbmQuXG4iLAogCQkJCQljaGFubmVsKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0zOTIsNyArMzg0LDcgQEAKIAkJZWxzZQogCQkJc2Nhbl9jaC0+dHhfZ2FpbiA9ICgoMSA8PCA1KSB8ICg1IDw8IDMpKTsKIAotCQlJV0xfREVCVUdfU0NBTigiU2Nhbm5pbmcgY2g9JWQgcHJvYj0weCVYIFslcyAlZF1cbiIsCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FubmluZyBjaD0lZCBwcm9iPTB4JVggWyVzICVkXVxuIiwKIAkJCSAgICAgICBjaGFubmVsLCBsZTMyX3RvX2NwdShzY2FuX2NoLT50eXBlKSwKIAkJCSAgICAgICAoc2Nhbl9jaC0+dHlwZSAmIFNDQU5fQ0hBTk5FTF9UWVBFX0FDVElWRSkgPwogCQkJCSJBQ1RJVkUiIDogIlBBU1NJVkUiLApAQCAtNDAzLDcgKzM5NSw3IEBACiAJCWFkZGVkKys7CiAJfQogCi0JSVdMX0RFQlVHX1NDQU4oInRvdGFsIGNoYW5uZWxzIHRvIHNjYW4gJWQgXG4iLCBhZGRlZCk7CisJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInRvdGFsIGNoYW5uZWxzIHRvIHNjYW4gJWQgXG4iLCBhZGRlZCk7CiAJcmV0dXJuIGFkZGVkOwogfQogCkBAIC00MTksMjEgKzQxMSwyMSBAQAogaW50IGl3bF9zY2FuX2luaXRpYXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfU0NBTigiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm90IHJlYWR5LlxuIik7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBub3QgcmVhZHkuXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nXG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nXG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oIlN0YXJ0aW5nIHNjYW4uLi5cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJTdGFydGluZyBzY2FuLi4uXG4iKTsKIAlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0cpCiAJCXByaXYtPnNjYW5fYmFuZHMgfD0gQklUKElFRUU4MDIxMV9CQU5EXzJHSFopOwogCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkKQEAgLTQ0OCw5ICs0NDAsNzcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NjYW5faW5pdGlhdGUpOwogCisjZGVmaW5lIElXTF9ERUxBWV9ORVhUX1NDQU4gKEhaKjIpCisKK2ludCBpd2xfbWFjX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJldDsKKwl1OCAqc3NpZCA9IE5VTEw7CisJc2l6ZV90IHNzaWRfbGVuID0gMDsKKworCWlmIChyZXEtPm5fc3NpZHMpIHsKKwkJc3NpZCA9IHJlcS0+c3NpZHNbMF0uc3NpZDsKKwkJc3NpZF9sZW4gPSByZXEtPnNzaWRzWzBdLnNzaWRfbGVuOworCX0KKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlyZXQgPSAtRUlPOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IHJlYWR5IG9yIGV4aXQgcGVuZGluZ1xuIik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwkvKiBXZSBkb24ndCBzY2hlZHVsZSBzY2FuIHdpdGhpbiBuZXh0X3NjYW5famlmZmllcyBwZXJpb2QuCisJICogQXZvaWQgc2Nhbm5pbmcgZHVyaW5nIHBvc3NpYmxlIEVBUE9MIGV4Y2hhbmdlLCByZXR1cm4KKwkgKiBzdWNjZXNzIGltbWVkaWF0ZWx5LgorCSAqLworCWlmIChwcml2LT5uZXh0X3NjYW5famlmZmllcyAmJgorCSAgICB0aW1lX2FmdGVyKHByaXYtPm5leHRfc2Nhbl9qaWZmaWVzLCBqaWZmaWVzKSkgeworCQlJV0xfREVCVUdfU0NBTihwcml2LCAic2NhbiByZWplY3RlZDogd2l0aGluIG5leHQgc2NhbiBwZXJpb2RcbiIpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY29tcGxldGVkKTsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCS8qIGlmIHdlIGp1c3QgZmluaXNoZWQgc2NhbiBhc2sgZm9yIGRlbGF5ICovCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICYmCisJICAgIHRpbWVfYWZ0ZXIocHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgKyBJV0xfREVMQVlfTkVYVF9TQ0FOLCBqaWZmaWVzKSkgeworCQlJV0xfREVCVUdfU0NBTihwcml2LCAic2NhbiByZWplY3RlZDogd2l0aGluIHByZXZpb3VzIHNjYW4gcGVyaW9kXG4iKTsKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuX2NvbXBsZXRlZCk7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlpZiAoc3NpZF9sZW4pIHsKKwkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMTsKKwkJcHJpdi0+ZGlyZWN0X3NzaWRfbGVuID0gIHNzaWRfbGVuOworCQltZW1jcHkocHJpdi0+ZGlyZWN0X3NzaWQsIHNzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7CisJfSBlbHNlIHsKKwkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMDsKKwl9CisKKwlyZXQgPSBpd2xfc2Nhbl9pbml0aWF0ZShwcml2KTsKKworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOworCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9tYWNfaHdfc2Nhbik7CisKICNkZWZpbmUgSVdMX1NDQU5fQ0hFQ0tfV0FUQ0hET0cgKDcgKiBIWikKIAotc3RhdGljIHZvaWQgaXdsX2JnX3NjYW5fY2hlY2soc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQordm9pZCBpd2xfYmdfc2Nhbl9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KIAkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgc2Nhbl9jaGVjay53b3JrKTsKQEAgLTQ2MSw3ICs1MjEsNyBAQAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSB8fAogCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHKElXTF9ETF9TQ0FOLCAiU2NhbiBjb21wbGV0aW9uIHdhdGNoZG9nIHJlc2V0dGluZyAiCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIGNvbXBsZXRpb24gd2F0Y2hkb2cgcmVzZXR0aW5nICIKIAkJCSJhZGFwdGVyICglZG1zKVxuIiwKIAkJCWppZmZpZXNfdG9fbXNlY3MoSVdMX1NDQU5fQ0hFQ0tfV0FUQ0hET0cpKTsKIApAQCAtNDcwLDYgKzUzMCw4IEBACiAJfQogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQorRVhQT1JUX1NZTUJPTChpd2xfYmdfc2Nhbl9jaGVjayk7CisKIC8qKgogICogaXdsX3N1cHBvcnRlZF9yYXRlX3RvX2llIC0gZmlsbCBpbiB0aGUgc3VwcG9ydGVkIHJhdGUgaW4gSUUgZmllbGQKICAqCkBAIC01MjcsMTAgKzU4OSwxMCBAQAogICogaXdsX2ZpbGxfcHJvYmVfcmVxIC0gZmlsbCBpbiBhbGwgcmVxdWlyZWQgZmllbGRzIGFuZCBJRSBmb3IgcHJvYmUgcmVxdWVzdAogICovCiAKLXN0YXRpYyB1MTYgaXdsX2ZpbGxfcHJvYmVfcmVxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqZnJhbWUsCi0JCQkJICBpbnQgbGVmdCkKK3UxNiBpd2xfZmlsbF9wcm9iZV9yZXEoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkgICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKKwkJICAgICAgIGludCBsZWZ0KQogewogCWludCBsZW4gPSAwOwogCXU4ICpwb3MgPSBOVUxMOwpAQCAtNjI0LDYgKzY4Niw3IEBACiAKIAlyZXR1cm4gKHUxNilsZW47CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9maWxsX3Byb2JlX3JlcSk7CiAKIHN0YXRpYyB2b2lkIGl3bF9iZ19yZXF1ZXN0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewpAQCAtNjUwLDcgKzcxMyw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKCFpd2xfaXNfcmVhZHkocHJpdikpIHsKLQkJSVdMX1dBUk5JTkcoInJlcXVlc3Qgc2NhbiBjYWxsZWQgd2hlbiBkcml2ZXIgbm90IHJlYWR5LlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJyZXF1ZXN0IHNjYW4gY2FsbGVkIHdoZW4gZHJpdmVyIG5vdCByZWFkeS5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC02NjIsMzQgKzcyNSwzNCBAQAogCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvciBzY2hlZHVsZWQgaWYgdGhlcmUgaXMgY3VycmVudGx5CiAJICogYSBzY2FuIGFjdGl2ZSBpbiB0aGUgaGFyZHdhcmUuICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiTXVsdGlwbGUgY29uY3VycmVudCBzY2FuIHJlcXVlc3RzIGluIHBhcmFsbGVsLiAiCisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJNdWx0aXBsZSBjb25jdXJyZW50IHNjYW4gcmVxdWVzdHMgaW4gcGFyYWxsZWwuICIKIAkJCSAgICAgICAiSWdub3Jpbmcgc2Vjb25kIHJlcXVlc3QuXG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfU0NBTigiQWJvcnRpbmcgc2NhbiBkdWUgdG8gZGV2aWNlIHNodXRkb3duXG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIkFib3J0aW5nIHNjYW4gZHVlIHRvIGRldmljZSBzaHV0ZG93blxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19IQygiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuICBRdWV1aW5nLlxuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LCAiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuICBRdWV1aW5nLlxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSEMoIkFib3J0aW5nIHNjYW4gZHVlIHRvIFJGIEtpbGwgYWN0aXZhdGlvblxuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gUkYgS2lsbCBhY3RpdmF0aW9uXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICghdGVzdF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSEMoIlNjYW4gcmVxdWVzdCB3aGlsZSB1bmluaXRpYWxpemVkLiAgUXVldWluZy5cbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwgIlNjYW4gcmVxdWVzdCB3aGlsZSB1bmluaXRpYWxpemVkLiAgUXVldWluZy5cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKCFwcml2LT5zY2FuX2JhbmRzKSB7Ci0JCUlXTF9ERUJVR19IQygiQWJvcnRpbmcgc2NhbiBkdWUgdG8gbm8gcmVxdWVzdGVkIGJhbmRzXG4iKTsKKwkJSVdMX0RFQlVHX0hDKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBubyByZXF1ZXN0ZWQgYmFuZHNcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC03MTQsNyArNzc3LDcgQEAKIAkJdTMyIHNjYW5fc3VzcGVuZF90aW1lID0gMTAwOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCUlXTF9ERUJVR19JTkZPKCJTY2FubmluZyB3aGlsZSBhc3NvY2lhdGVkLi4uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNjYW5uaW5nIHdoaWxlIGFzc29jaWF0ZWQuLi5cbiIpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCWludGVydmFsID0gcHJpdi0+YmVhY29uX2ludDsKQEAgLTcyOSwxMyArNzkyLDEzIEBACiAJCXNjYW5fc3VzcGVuZF90aW1lID0gKGV4dHJhIHwKIAkJICAgICgoc3VzcGVuZF90aW1lICUgaW50ZXJ2YWwpICogMTAyNCkpOwogCQlzY2FuLT5zdXNwZW5kX3RpbWUgPSBjcHVfdG9fbGUzMihzY2FuX3N1c3BlbmRfdGltZSk7Ci0JCUlXTF9ERUJVR19TQ0FOKCJzdXNwZW5kX3RpbWUgMHglWCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJzdXNwZW5kX3RpbWUgMHglWCBiZWFjb24gaW50ZXJ2YWwgJWRcbiIsCiAJCQkgICAgICAgc2Nhbl9zdXNwZW5kX3RpbWUsIGludGVydmFsKTsKIAl9CiAKIAkvKiBXZSBzaG91bGQgYWRkIHRoZSBhYmlsaXR5IGZvciB1c2VyIHRvIGxvY2sgdG8gUEFTU0lWRSBPTkxZICovCiAJaWYgKHByaXYtPm9uZV9kaXJlY3Rfc2NhbikgewotCQlJV0xfREVCVUdfU0NBTigiU3RhcnQgZGlyZWN0IHNjYW4gZm9yICclcydcbiIsCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTdGFydCBkaXJlY3Qgc2NhbiBmb3IgJyVzJ1xuIiwKIAkJCQlwcmludF9zc2lkKHNzaWQsIHByaXYtPmRpcmVjdF9zc2lkLAogCQkJCQkgICBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pKTsKIAkJc2Nhbi0+ZGlyZWN0X3NjYW5bMF0uaWQgPSBXTEFOX0VJRF9TU0lEOwpAQCAtNzQ0LDcgKzgwNyw3IEBACiAJCSAgICAgICBwcml2LT5kaXJlY3Rfc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKTsKIAkJbl9wcm9iZXMrKzsKIAl9IGVsc2UgewotCQlJV0xfREVCVUdfU0NBTigiU3RhcnQgaW5kaXJlY3Qgc2Nhbi5cbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU3RhcnQgaW5kaXJlY3Qgc2Nhbi5cbiIpOwogCX0KIAogCXNjYW4tPnR4X2NtZC50eF9mbGFncyA9IFRYX0NNRF9GTEdfU0VRX0NUTF9NU0s7CkBAIC03NzMsNyArODM2LDcgQEAKIAkJaWYgKChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSA9PSBDU1JfSFdfUkVWX1RZUEVfNDk2NSkKIAkJCXJ4X2NoYWluID0gMHg2OwogCX0gZWxzZSB7Ci0JCUlXTF9XQVJOSU5HKCJJbnZhbGlkIHNjYW4gYmFuZCBjb3VudFxuIik7CisJCUlXTF9XQVJOKHByaXYsICJJbnZhbGlkIHNjYW4gYmFuZCBjb3VudFxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTgwNiw3ICs4NjksNyBAQAogCQkJKHZvaWQgKikmc2Nhbi0+ZGF0YVtsZTE2X3RvX2NwdShzY2FuLT50eF9jbWQubGVuKV0pOwogCiAJaWYgKHNjYW4tPmNoYW5uZWxfY291bnQgPT0gMCkgewotCQlJV0xfREVCVUdfU0NBTigiY2hhbm5lbCBjb3VudCAlZFxuIiwgc2Nhbi0+Y2hhbm5lbF9jb3VudCk7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJjaGFubmVsIGNvdW50ICVkXG4iLCBzY2FuLT5jaGFubmVsX2NvdW50KTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtODM5LDcgKzkwMiw3IEBACiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bF9iZ19hYm9ydF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3ZvaWQgaXdsX2JnX2Fib3J0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsX3ByaXYsIGFib3J0X3NjYW4pOwogCkBAIC04NTMsMTggKzkxNiwxOSBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9iZ19hYm9ydF9zY2FuKTsKIAotc3RhdGljIHZvaWQgaXdsX2JnX3NjYW5fY29tcGxldGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3ZvaWQgaXdsX2JnX3NjYW5fY29tcGxldGVkKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQogCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCBzY2FuX2NvbXBsZXRlZCk7CiAKLQlJV0xfREVCVUdfU0NBTigiU0NBTiBjb21wbGV0ZSBzY2FuXG4iKTsKKwlJV0xfREVCVUdfU0NBTihwcml2LCAiU0NBTiBjb21wbGV0ZSBzY2FuXG4iKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwogCi0JaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHByaXYtPmh3KTsKKwlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQocHJpdi0+aHcsIGZhbHNlKTsKIAogCS8qIFNpbmNlIHNldHRpbmcgdGhlIFRYUE9XRVIgbWF5IGhhdmUgYmVlbiBkZWZlcnJlZCB3aGlsZQogCSAqIHBlcmZvcm1pbmcgdGhlIHNjYW4sIGZpcmUgb25lIG9mZiAqLwpAQCAtODcyLDcgKzkzNiw3IEBACiAJaXdsX3NldF90eF9wb3dlcihwcml2LCBwcml2LT50eF9wb3dlcl91c2VyX2xtdCwgdHJ1ZSk7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9Ci0KK0VYUE9SVF9TWU1CT0woaXdsX2JnX3NjYW5fY29tcGxldGVkKTsKIAogdm9pZCBpd2xfc2V0dXBfc2Nhbl9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5jCmluZGV4IDgzNmMzYzguLjAyMmJjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhfT05fQVNTT0MgY29tbWFuZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWF9PTl9BU1NPQyBjb21tYW5kXG4iKTsKIAkJcmMgPSAtRUlPOwogCX0KIApAQCAtMTU0LDkgKzE1NCw5IEBACiAJc3dpdGNoIChzcGVjdHJ1bV9yZXNwX3N0YXR1cykgewogCWNhc2UgMDoJCS8qIENvbW1hbmQgd2lsbCBiZSBoYW5kbGVkICovCiAJCWlmIChyZXMtPnUuc3BlY3RydW0uaWQgIT0gMHhmZikgewotCQkJSVdMX0RFQlVHX0lORk8KLQkJCSAgICAoIlJlcGxhY2VkIGV4aXN0aW5nIG1lYXN1cmVtZW50OiAlZFxuIiwKLQkJCSAgICAgcmVzLT51LnNwZWN0cnVtLmlkKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkJIlJlcGxhY2VkIGV4aXN0aW5nIG1lYXN1cmVtZW50OiAlZFxuIiwKKwkJCQlyZXMtPnUuc3BlY3RydW0uaWQpOwogCQkJcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzICY9IH5NRUFTVVJFTUVOVF9SRUFEWTsKIAkJfQogCQlwcml2LT5tZWFzdXJlbWVudF9zdGF0dXMgfD0gTUVBU1VSRU1FTlRfQUNUSVZFOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJc3RydWN0IGl3bF9zcGVjdHJ1bV9ub3RpZmljYXRpb24gKnJlcG9ydCA9ICYocGt0LT51LnNwZWN0cnVtX25vdGlmKTsKIAogCWlmICghcmVwb3J0LT5zdGF0ZSkgewotCQlJV0xfREVCVUcoSVdMX0RMXzExSCwKKwkJSVdMX0RFQlVHXzExSChwcml2LAogCQkJIlNwZWN0cnVtIE1lYXN1cmUgTm90aWZpY2F0aW9uOiBTdGFydFxuIik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uaAppbmRleCBiN2Q3OTQzLi5hNzdjMWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCmluZGV4IDcwYThiMjEuLjU3OThmZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC02MCw3ICs2MCw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JSVdMX0RFQlVHX0FTU09DX0xJTUlUKCJjYW4gbm90IGZpbmQgU1RBICVwTSB0b3RhbCAlZFxuIiwKKwlJV0xfREVCVUdfQVNTT0NfTElNSVQocHJpdiwgImNhbiBub3QgZmluZCBTVEEgJXBNIHRvdGFsICVkXG4iLAogCQkJICAgICAgYWRkciwgcHJpdi0+bnVtX3N0YXRpb25zKTsKIAogIG91dDoKQEAgLTg2LDExICs4NiwxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKLQlpZiAoIShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJiBJV0xfU1RBX0RSSVZFUl9BQ1RJVkUpKQotCQlJV0xfRVJST1IoIkFDVElWQVRFIGEgbm9uIERSSVZFUiBhY3RpdmUgc3RhdGlvbiAlZFxuIiwgc3RhX2lkKTsKKwlpZiAoIShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJiBJV0xfU1RBX0RSSVZFUl9BQ1RJVkUpICYmCisJICAgICEocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS51c2VkICYgSVdMX1NUQV9EUklWRVJfQUNUSVZFKSkKKwkJSVdMX0VSUihwcml2LCAiQUNUSVZBVEUgYSBub24gRFJJVkVSIGFjdGl2ZSBzdGF0aW9uICVkXG4iLAorCQkJc3RhX2lkKTsKIAogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCB8PSBJV0xfU1RBX1VDT0RFX0FDVElWRTsKLQlJV0xfREVCVUdfQVNTT0MoIkFkZGVkIFNUQSB0byBVY29kZTogJXBNXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiQWRkZWQgU1RBIHRvIFVjb2RlOiAlcE1cbiIsCiAJCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5zdGEuYWRkcik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwpAQCAtMTA1LDEzICsxMDcsMTMgQEAKIAl1OCBzdGFfaWQgPSBhZGRzdGEtPnN0YS5zdGFfaWQ7CiAKIAlpZiAoIXNrYikgewotCQlJV0xfRVJST1IoIkVycm9yOiBSZXNwb25zZSBOVUxMIGluIFJFUExZX0FERF9TVEEuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gUkVQTFlfQUREX1NUQS5cbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilza2ItPmRhdGE7CiAJaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCisJCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAogCQkJICByZXMtPmhkci5mbGFncyk7CiAJCXJldHVybiAxOwogCX0KQEAgLTEyMSw3ICsxMjMsNyBAQAogCQlpd2xfc3RhX3Vjb2RlX2FjdGl2YXRlKHByaXYsIHN0YV9pZCk7CiAJCSAvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgotCQlJV0xfREVCVUdfSEMoIlJlY2VpdmVkIFJFUExZX0FERF9TVEE6KDB4JTA4WClcbiIsCisJCUlXTF9ERUJVR19IQyhwcml2LCAiUmVjZWl2ZWQgUkVQTFlfQUREX1NUQTooMHglMDhYKVxuIiwKIAkJCSAgICAgcmVzLT51LmFkZF9zdGEuc3RhdHVzKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTMwLDcgKzEzMiw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgaXdsX3NlbmRfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCitpbnQgaXdsX3NlbmRfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCSAgICAgc3RydWN0IGl3bF9hZGRzdGFfY21kICpzdGEsIHU4IGZsYWdzKQogewogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwpAQCAtMTU1LDcgKzE1Nyw3IEBACiAKIAlyZXMgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKKwkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCiAJCQkgIHJlcy0+aGRyLmZsYWdzKTsKIAkJcmV0ID0gLUVJTzsKIAl9CkBAIC0xNjQsMTEgKzE2NiwxMSBAQAogCQlzd2l0Y2ggKHJlcy0+dS5hZGRfc3RhLnN0YXR1cykgewogCQljYXNlIEFERF9TVEFfU1VDQ0VTU19NU0s6CiAJCQlpd2xfc3RhX3Vjb2RlX2FjdGl2YXRlKHByaXYsIHN0YS0+c3RhLnN0YV9pZCk7Ci0JCQlJV0xfREVCVUdfSU5GTygiUkVQTFlfQUREX1NUQSBQQVNTRURcbiIpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJFUExZX0FERF9TVEEgUEFTU0VEXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcmV0ID0gLUVJTzsKLQkJCUlXTF9XQVJOSU5HKCJSRVBMWV9BRERfU1RBIGZhaWxlZFxuIik7CisJCQlJV0xfV0FSTihwcml2LCAiUkVQTFlfQUREX1NUQSBmYWlsZWRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xNzgsNiArMTgwLDcgQEAKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9zZW5kX2FkZF9zdGEpOwogCiBzdGF0aWMgdm9pZCBpd2xfc2V0X2h0X2FkZF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggaW5kZXgsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpzdGFfaHRfaW5mKQpAQCAtMjA0LDcgKzIwNyw3IEBACiAJY2FzZSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX1dBUk5JTkcoIkludmFsaWQgTUlNTyBQUyBtb2RlICVkXG4iLCBtaW1vX3BzX21vZGUpOworCQlJV0xfV0FSTihwcml2LCAiSW52YWxpZCBNSU1PIFBTIG1vZGUgJWRcbiIsIG1pbW9fcHNfbW9kZSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMjY5LDcgKzI3Miw3IEBACiAKIAlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zW3N0YV9pZF07CiAJc3RhdGlvbi0+dXNlZCA9IElXTF9TVEFfRFJJVkVSX0FDVElWRTsKLQlJV0xfREVCVUdfQVNTT0MoIkFkZCBTVEEgdG8gZHJpdmVyIElEICVkOiAlcE1cbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJBZGQgU1RBIHRvIGRyaXZlciBJRCAlZDogJXBNXG4iLAogCQkJc3RhX2lkLCBhZGRyKTsKIAlwcml2LT5udW1fc3RhdGlvbnMrKzsKIApAQCAtMzAxLDEzICszMDQsMTMgQEAKIAogCUJVR19PTihzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTik7CiAKLQlJV0xfREVCVUdfQVNTT0MoIlJlbW92ZWQgU1RBIGZyb20gVWNvZGU6ICVwTVxuIiwgYWRkcik7CisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJSZW1vdmVkIFNUQSBmcm9tIFVjb2RlOiAlcE1cbiIsIGFkZHIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKIAkvKiBVY29kZSBtdXN0IGJlIGFjdGl2ZSBhbmQgZHJpdmVyIG11c3QgYmUgbm9uIGFjdGl2ZSAqLwogCWlmIChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgIT0gSVdMX1NUQV9VQ09ERV9BQ1RJVkUpCi0JCUlXTF9FUlJPUigicmVtb3ZlZCBub24gYWN0aXZlIFNUQSAlZFxuIiwgc3RhX2lkKTsKKwkJSVdMX0VSUihwcml2LCAicmVtb3ZlZCBub24gYWN0aXZlIFNUQSAlZFxuIiwgc3RhX2lkKTsKIAogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmPSB+SVdMX1NUQV9VQ09ERV9BQ1RJVkU7CiAKQEAgLTMyNCwxMyArMzI3LDEzIEBACiAJY29uc3QgY2hhciAqYWRkciA9IHJtX3N0YS0+YWRkcjsKIAogCWlmICghc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gUkVQTFlfUkVNT1ZFX1NUQS5cbiIpOworCQlJV0xfRVJSKHByaXYsICJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiBSRVBMWV9SRU1PVkVfU1RBLlxuIik7CiAJCXJldHVybiAxOwogCX0KIAogCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKXNrYi0+ZGF0YTsKIAlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUkVNT1ZFX1NUQSAoMHglMDhYKVxuIiwKKwkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JFTU9WRV9TVEEgKDB4JTA4WClcbiIsCiAJCXJlcy0+aGRyLmZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMzQwLDcgKzM0Myw3IEBACiAJCWl3bF9zdGFfdWNvZGVfZGVhY3RpdmF0ZShwcml2LCBhZGRyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJSVdMX0VSUk9SKCJSRVBMWV9SRU1PVkVfU1RBIGZhaWxlZFxuIik7CisJCUlXTF9FUlIocHJpdiwgIlJFUExZX1JFTU9WRV9TVEEgZmFpbGVkXG4iKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zNzgsNyArMzgxLDcgQEAKIAogCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SRU1PVkVfU1RBICgweCUwOFgpXG4iLAorCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUkVNT1ZFX1NUQSAoMHglMDhYKVxuIiwKIAkJCSAgcmVzLT5oZHIuZmxhZ3MpOwogCQlyZXQgPSAtRUlPOwogCX0KQEAgLTM4NywxMSArMzkwLDExIEBACiAJCXN3aXRjaCAocmVzLT51LnJlbV9zdGEuc3RhdHVzKSB7CiAJCWNhc2UgUkVNX1NUQV9TVUNDRVNTX01TSzoKIAkJCWl3bF9zdGFfdWNvZGVfZGVhY3RpdmF0ZShwcml2LCBhZGRyKTsKLQkJCUlXTF9ERUJVR19BU1NPQygiUkVQTFlfUkVNT1ZFX1NUQSBQQVNTRURcbiIpOworCQkJSVdMX0RFQlVHX0FTU09DKHByaXYsICJSRVBMWV9SRU1PVkVfU1RBIFBBU1NFRFxuIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FSU87Ci0JCQlJV0xfRVJST1IoIlJFUExZX1JFTU9WRV9TVEEgZmFpbGVkXG4iKTsKKwkJCUlXTF9FUlIocHJpdiwgIlJFUExZX1JFTU9WRV9TVEEgZmFpbGVkXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNDI5LDE3ICs0MzIsMTcgQEAKIAlpZiAodW5saWtlbHkoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pKQogCQlnb3RvIG91dDsKIAotCUlXTF9ERUJVR19BU1NPQygiUmVtb3ZpbmcgU1RBIGZyb20gZHJpdmVyOiVkICAlcE1cbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJSZW1vdmluZyBTVEEgZnJvbSBkcml2ZXI6JWQgICVwTVxuIiwKIAkJc3RhX2lkLCBhZGRyKTsKIAogCWlmICghKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfRFJJVkVSX0FDVElWRSkpIHsKLQkJSVdMX0VSUk9SKCJSZW1vdmluZyAlcE0gYnV0IG5vbiBEUklWRVIgYWN0aXZlXG4iLAorCQlJV0xfRVJSKHByaXYsICJSZW1vdmluZyAlcE0gYnV0IG5vbiBEUklWRVIgYWN0aXZlXG4iLAogCQkJCWFkZHIpOwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoIShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgJiBJV0xfU1RBX1VDT0RFX0FDVElWRSkpIHsKLQkJSVdMX0VSUk9SKCJSZW1vdmluZyAlcE0gYnV0IG5vbiBVQ09ERSBhY3RpdmVcbiIsCisJCUlXTF9FUlIocHJpdiwgIlJlbW92aW5nICVwTSBidXQgbm9uIFVDT0RFIGFjdGl2ZVxuIiwKIAkJCQlhZGRyKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNDY5LDEzICs0NzIsMTQgQEAKIHZvaWQgaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKIAlpZiAoaXdsX2lzX2FsaXZlKHByaXYpICYmCiAJICAgIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpICYmCiAJICAgaXdsX3NlbmRfY21kX3BkdV9hc3luYyhwcml2LCBSRVBMWV9SRU1PVkVfQUxMX1NUQSwgMCwgTlVMTCwgTlVMTCkpCi0JCUlXTF9FUlJPUigiQ291bGRuJ3QgY2xlYXIgdGhlIHN0YXRpb24gdGFibGVcbiIpOworCQlJV0xfRVJSKHByaXYsICJDb3VsZG4ndCBjbGVhciB0aGUgc3RhdGlvbiB0YWJsZVxuIik7CiAKIAlwcml2LT5udW1fc3RhdGlvbnMgPSAwOwogCW1lbXNldChwcml2LT5zdGF0aW9ucywgMCwgc2l6ZW9mKHByaXYtPnN0YXRpb25zKSk7CkBAIC00ODMsMTEgKzQ4NywxNyBAQAogCS8qIGNsZWFuIHVjb2RlIGtleSB0YWJsZSBiaXQgbWFwICovCiAJcHJpdi0+dWNvZGVfa2V5X3RhYmxlID0gMDsKIAorCS8qIGtlZXAgdHJhY2sgb2Ygc3RhdGljIGtleXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgV0VQX0tFWVNfTUFYIDsgaSsrKSB7CisJCWlmIChwcml2LT53ZXBfa2V5c1tpXS5rZXlfc2l6ZSkKKwkJCXRlc3RfYW5kX3NldF9iaXQoaSwgJnByaXYtPnVjb2RlX2tleV90YWJsZSk7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKTsKIAotc3RhdGljIGludCBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK2ludCBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgaTsKIApAQCAtNDk3LDYgKzUwNyw3IEBACiAKIAlyZXR1cm4gV0VQX0lOVkFMSURfT0ZGU0VUOwogfQorRVhQT1JUX1NZTUJPTChpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KTsKIAogaW50IGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTggc2VuZF9pZl9lbXB0eSkKIHsKQEAgLTU1MSwxMyArNTYyLDEzIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChrZXljb25mLT5rZXlpZHgsICZwcml2LT51Y29kZV9rZXlfdGFibGUpKQotCQlJV0xfRVJST1IoImluZGV4ICVkIG5vdCB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCisJCUlXTF9FUlIocHJpdiwgImluZGV4ICVkIG5vdCB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCiAJCQkgIGtleWNvbmYtPmtleWlkeCk7CiAKIAlwcml2LT5kZWZhdWx0X3dlcF9rZXktLTsKIAltZW1zZXQoJnByaXYtPndlcF9rZXlzW2tleWNvbmYtPmtleWlkeF0sIDAsIHNpemVvZihwcml2LT53ZXBfa2V5c1swXSkpOwogCXJldCA9IGl3bF9zZW5kX3N0YXRpY193ZXBrZXlfY21kKHByaXYsIDEpOwotCUlXTF9ERUJVR19XRVAoIlJlbW92ZSBkZWZhdWx0IFdFUCBrZXk6IGlkeD0lZCByZXQ9JWRcbiIsCisJSVdMX0RFQlVHX1dFUChwcml2LCAiUmVtb3ZlIGRlZmF1bHQgV0VQIGtleTogaWR4PSVkIHJldD0lZFxuIiwKIAkJICAgICAga2V5Y29uZi0+a2V5aWR4LCByZXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAKQEAgLTU3Myw3ICs1ODQsNyBAQAogCiAJaWYgKGtleWNvbmYtPmtleWxlbiAhPSBXRVBfS0VZX0xFTl8xMjggJiYKIAkgICAga2V5Y29uZi0+a2V5bGVuICE9IFdFUF9LRVlfTEVOXzY0KSB7Ci0JCUlXTF9ERUJVR19XRVAoIkJhZCBXRVAga2V5IGxlbmd0aCAlZFxuIiwga2V5Y29uZi0+a2V5bGVuKTsKKwkJSVdMX0RFQlVHX1dFUChwcml2LCAiQmFkIFdFUCBrZXkgbGVuZ3RoICVkXG4iLCBrZXljb25mLT5rZXlsZW4pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU4NSw3ICs1OTYsNyBAQAogCXByaXYtPmRlZmF1bHRfd2VwX2tleSsrOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoa2V5Y29uZi0+a2V5aWR4LCAmcHJpdi0+dWNvZGVfa2V5X3RhYmxlKSkKLQkJSVdMX0VSUk9SKCJpbmRleCAlZCBhbHJlYWR5IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKKwkJSVdMX0VSUihwcml2LCAiaW5kZXggJWQgYWxyZWFkeSB1c2VkIGluIHVDb2RlIGtleSB0YWJsZS5cbiIsCiAJCQlrZXljb25mLT5rZXlpZHgpOwogCiAJcHJpdi0+d2VwX2tleXNba2V5Y29uZi0+a2V5aWR4XS5rZXlfc2l6ZSA9IGtleWNvbmYtPmtleWxlbjsKQEAgLTU5Myw3ICs2MDQsNyBAQAogCQkJCQkJCWtleWNvbmYtPmtleWxlbik7CiAKIAlyZXQgPSBpd2xfc2VuZF9zdGF0aWNfd2Vwa2V5X2NtZChwcml2LCAwKTsKLQlJV0xfREVCVUdfV0VQKCJTZXQgZGVmYXVsdCBXRVAga2V5OiBsZW49JWQgaWR4PSVkIHJldD0lZFxuIiwKKwlJV0xfREVCVUdfV0VQKHByaXYsICJTZXQgZGVmYXVsdCBXRVAga2V5OiBsZW49JWQgaWR4PSVkIHJldD0lZFxuIiwKIAkJa2V5Y29uZi0+a2V5bGVuLCBrZXljb25mLT5rZXlpZHgsIHJldCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIApAQCAtNjQxLDcgKzY1Miw3IEBACiAJICogaW4gdUNvZGUuICovCiAKIAlXQVJOKHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0ID09IFdFUF9JTlZBTElEX09GRlNFVCwKLQkJIm5vIHNwYWNlIGZvciBuZXcga2V3Iik7CisJCSJubyBzcGFjZSBmb3IgYSBuZXcga2V5Iik7CiAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0ga2V5X2ZsYWdzOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CkBAIC02ODksNyArNzAwLDcgQEAKIAkgKiBpbiB1Q29kZS4gKi8KIAogCVdBUk4ocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPT0gV0VQX0lOVkFMSURfT0ZGU0VULAotCQkibm8gc3BhY2UgZm9yIG5ldyBrZXciKTsKKwkJIm5vIHNwYWNlIGZvciBhIG5ldyBrZXkiKTsKIAogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgPSBrZXlfZmxhZ3M7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLm1vZGlmeV9tYXNrID0gU1RBX01PRElGWV9LRVlfTUFTSzsKQEAgLTcyNSw3ICs3MzYsNyBAQAogCSAqIGluIHVDb2RlLiAqLwogCiAJV0FSTihwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCA9PSBXRVBfSU5WQUxJRF9PRkZTRVQsCi0JCSJubyBzcGFjZSBmb3IgbmV3IGtldyIpOworCQkibm8gc3BhY2UgZm9yIGEgbmV3IGtleSIpOwogCiAJLyogVGhpcyBjb3B5IGlzIGFjdXRhbGx5IG5vdCBuZWVkZWQ6IHdlIGdldCB0aGUga2V5IHdpdGggZWFjaCBUWCAqLwogCW1lbWNweShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8ua2V5LCBrZXljb25mLT5rZXksIDE2KTsKQEAgLTc0OSw3ICs3NjAsNyBAQAogCiAJc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBhZGRyKTsKIAlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAorCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gJXBNIG5vdCBpbiBzdGF0aW9uIG1hcC5cbiIsCiAJCQkJICAgYWRkcik7CiAJCXJldHVybjsKIAl9CkBAIC04MDEsNyArODEyLDcgQEAKIAlrZXlfZmxhZ3MgPSBsZTE2X3RvX2NwdShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzKTsKIAlrZXlpZHggPSAoa2V5X2ZsYWdzID4+IFNUQV9LRVlfRkxHX0tFWUlEX1BPUykgJiAweDM7CiAKLQlJV0xfREVCVUdfV0VQKCJSZW1vdmUgZHluYW1pYyBrZXk6IGlkeD0lZCBzdGE9JWRcbiIsCisJSVdMX0RFQlVHX1dFUChwcml2LCAiUmVtb3ZlIGR5bmFtaWMga2V5OiBpZHg9JWQgc3RhPSVkXG4iLAogCQkgICAgICBrZXljb25mLT5rZXlpZHgsIHN0YV9pZCk7CiAKIAlpZiAoa2V5Y29uZi0+a2V5aWR4ICE9IGtleWlkeCkgewpAQCAtODE1LDcgKzgyNiw3IEBACiAJfQogCiAJaWYgKHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0ID09IFdFUF9JTlZBTElEX09GRlNFVCkgewotCQlJV0xfV0FSTklORygiUmVtb3Zpbmcgd3Jvbmcga2V5ICVkIDB4JXhcbiIsCisJCUlXTF9XQVJOKHByaXYsICJSZW1vdmluZyB3cm9uZyBrZXkgJWQgMHgleFxuIiwKIAkJCSAgICBrZXljb25mLT5rZXlpZHgsIGtleV9mbGFncyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAwOwpAQCAtODIzLDcgKzgzNCw3IEBACiAKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X29mZnNldCwKIAkJJnByaXYtPnVjb2RlX2tleV90YWJsZSkpCi0JCUlXTF9FUlJPUigiaW5kZXggJWQgbm90IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKKwkJSVdMX0VSUihwcml2LCAiaW5kZXggJWQgbm90IHVzZWQgaW4gdUNvZGUga2V5IHRhYmxlLlxuIiwKIAkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleS5rZXlfb2Zmc2V0KTsKIAltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mbywgMCwKIAkJCQkJc2l6ZW9mKHN0cnVjdCBpd2xfaHdfa2V5KSk7CkBAIC04NjAsMTEgKzg3MSwxMiBAQAogCQlyZXQgPSBpd2xfc2V0X3dlcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleWNvbmYsIHN0YV9pZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9FUlJPUigiVW5rbm93biBhbGc6ICVzIGFsZyA9ICVkXG4iLCBfX2Z1bmNfXywga2V5Y29uZi0+YWxnKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIlVua25vd24gYWxnOiAlcyBhbGcgPSAlZFxuIiwgX19mdW5jX18sIGtleWNvbmYtPmFsZyk7CiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0JSVdMX0RFQlVHX1dFUCgiU2V0IGR5bmFtaWMga2V5OiBhbGc9ICVkIGxlbj0lZCBpZHg9JWQgc3RhPSVkIHJldD0lZFxuIiwKKwlJV0xfREVCVUdfV0VQKHByaXYsICJTZXQgZHluYW1pYyBrZXk6IGFsZz0gJWQgbGVuPSVkIGlkeD0lZCBzdGE9JWQgcmV0PSVkXG4iLAogCQkgICAgICBrZXljb25mLT5hbGcsIGtleWNvbmYtPmtleWxlbiwga2V5Y29uZi0+a2V5aWR4LAogCQkgICAgICBzdGFfaWQsIHJldCk7CiAKQEAgLTg3NywxMyArODg5LDEzIEBACiAJCQkgICBzdHJ1Y3QgaXdsX2xpbmtfcXVhbGl0eV9jbWQgKmxxKQogewogCWludCBpOwotCUlXTF9ERUJVR19SQVRFKCJscSBzdGF0aW9uIGlkIDB4JXhcbiIsIGxxLT5zdGFfaWQpOwotCUlXTF9ERUJVR19SQVRFKCJscSBhbnQgMHglWCAweCVYXG4iLAorCUlXTF9ERUJVR19SQVRFKHByaXYsICJscSBzdGF0aW9uIGlkIDB4JXhcbiIsIGxxLT5zdGFfaWQpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJscSBhbnQgMHglWCAweCVYXG4iLAogCQkgICAgICAgbHEtPmdlbmVyYWxfcGFyYW1zLnNpbmdsZV9zdHJlYW1fYW50X21zaywKIAkJICAgICAgIGxxLT5nZW5lcmFsX3BhcmFtcy5kdWFsX3N0cmVhbV9hbnRfbXNrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBMSU5LX1FVQUxfTUFYX1JFVFJZX05VTTsgaSsrKQotCQlJV0xfREVCVUdfUkFURSgibHEgaW5kZXggJWQgMHglWFxuIiwKKwkJSVdMX0RFQlVHX1JBVEUocHJpdiwgImxxIGluZGV4ICVkIDB4JVhcbiIsCiAJCQkgICAgICAgaSwgbHEtPnJzX3RhYmxlW2ldLnJhdGVfbl9mbGFncyk7CiB9CiAjZWxzZQpAQCAtMTA2MCw3ICsxMDcyLDcgQEAKIAkJaWYgKHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKQogCQkJcmV0dXJuIHN0YV9pZDsKIAotCQlJV0xfREVCVUdfRFJPUCgiU3RhdGlvbiAlcE0gbm90IGluIHN0YXRpb24gbWFwLiAiCisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJTdGF0aW9uICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuICIKIAkJCSAgICAgICAiRGVmYXVsdGluZyB0byBicm9hZGNhc3QuLi5cbiIsCiAJCQkgICAgICAgaGRyLT5hZGRyMSk7CiAJCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfRFJPUCwgKHU4ICopIGhkciwgc2l6ZW9mKCpoZHIpKTsKQEAgLTEwNzIsNyArMTA4NCw4IEBACiAJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJZGVmYXVsdDoKLQkJSVdMX1dBUk5JTkcoIlVua25vd24gbW9kZSBvZiBvcGVyYXRpb246ICVkXG4iLCBwcml2LT5pd19tb2RlKTsKKwkJSVdMX1dBUk4ocHJpdiwgIlVua25vd24gbW9kZSBvZiBvcGVyYXRpb246ICVkXG4iLAorCQkJcHJpdi0+aXdfbW9kZSk7CiAJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCX0KIH0KQEAgLTExMjUsOCArMTEzOCwxMCBAQAogCWludCBzdGFfaWQ7CiAKIAlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOwotCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikKKwlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBzdGF0aW9uIGZvciBBR0cgdGlkICVkXG4iLCB0aWQpOwogCQlyZXR1cm4gLUVOWElPOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YXRpb25fZmxhZ3NfbXNrID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKaW5kZXggOWJiN2NlZi4uNTlhNTg2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA4IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTU0LDggKzU0LDExIEBACiBpbnQgaXdsX3J4b25fYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKTsKIGludCBpd2xfcmVtb3ZlX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKTsKIHZvaWQgaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CitpbnQgaXdsX2dldF9mcmVlX3Vjb2RlX2tleV9pbmRleChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9nZXRfc3RhX2lkKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcik7CiBpbnQgaXdsX2dldF9yYV9zdGFfaWQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKTsKK2ludCBpd2xfc2VuZF9hZGRfc3RhKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJICAgICBzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKnN0YSwgdTggZmxhZ3MpOwogdTggaXdsX2FkZF9zdGF0aW9uX2ZsYWdzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsCiAJCQlpbnQgaXNfYXAsIHU4IGZsYWdzLAogCQkJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9pbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCmluZGV4IGFiMTNmZjIuLjFmMTE3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNzYsMTE2ICs3Niw2IEBACiAJbWVtc2V0KHB0ciwgMCwgc2l6ZW9mKCpwdHIpKTsKIH0KIAotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGl3bF90ZmRfdGJfZ2V0X2FkZHIoc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQotewotCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOwotCi0JZG1hX2FkZHJfdCBhZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZ0Yi0+bG8pOwotCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPiBzaXplb2YodTMyKSkKLQkJYWRkciB8PQotCQkoKGRtYV9hZGRyX3QpKGxlMTZfdG9fY3B1KHRiLT5oaV9uX2xlbikgJiAweEYpIDw8IDE2KSA8PCAxNjsKLQotCXJldHVybiBhZGRyOwotfQotCi1zdGF0aWMgaW5saW5lIHUxNiBpd2xfdGZkX3RiX2dldF9sZW4oc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQotewotCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOwotCi0JcmV0dXJuIGxlMTZfdG9fY3B1KHRiLT5oaV9uX2xlbikgPj4gNDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGl3bF90ZmRfc2V0X3RiKHN0cnVjdCBpd2xfdGZkICp0ZmQsIHU4IGlkeCwKLQkJCQkgIGRtYV9hZGRyX3QgYWRkciwgdTE2IGxlbikKLXsKLQlzdHJ1Y3QgaXdsX3RmZF90YiAqdGIgPSAmdGZkLT50YnNbaWR4XTsKLQl1MTYgaGlfbl9sZW4gPSBsZW4gPDwgNDsKLQotCXB1dF91bmFsaWduZWRfbGUzMihhZGRyLCAmdGItPmxvKTsKLQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID4gc2l6ZW9mKHUzMikpCi0JCWhpX25fbGVuIHw9ICgoYWRkciA+PiAxNikgPj4gMTYpICYgMHhGOwotCi0JdGItPmhpX25fbGVuID0gY3B1X3RvX2xlMTYoaGlfbl9sZW4pOwotCi0JdGZkLT5udW1fdGJzID0gaWR4ICsgMTsKLX0KLQotc3RhdGljIGlubGluZSB1OCBpd2xfdGZkX2dldF9udW1fdGJzKHN0cnVjdCBpd2xfdGZkICp0ZmQpCi17Ci0JcmV0dXJuIHRmZC0+bnVtX3RicyAmIDB4MWY7Ci19Ci0KLS8qKgotICogaXdsX2h3X3R4cV9mcmVlX3RmZCAtIEZyZWUgYWxsIGNodW5rcyByZWZlcmVuY2VkIGJ5IFRGRCBbdHhxLT5xLnJlYWRfcHRyXQotICogQHByaXYgLSBkcml2ZXIgcHJpdmF0ZSBkYXRhCi0gKiBAdHhxIC0gdHggcXVldWUKLSAqCi0gKiBEb2VzIE5PVCBhZHZhbmNlIGFueSBURkQgY2lyY3VsYXIgYnVmZmVyIHJlYWQvd3JpdGUgaW5kZXhlcwotICogRG9lcyBOT1QgZnJlZSB0aGUgVEZEIGl0c2VsZiAod2hpY2ggaXMgd2l0aGluIGNpcmN1bGFyIGJ1ZmZlcikKLSAqLwotc3RhdGljIHZvaWQgaXdsX2h3X3R4cV9mcmVlX3RmZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKLXsKLQlzdHJ1Y3QgaXdsX3RmZCAqdGZkX3RtcCA9IChzdHJ1Y3QgaXdsX3RmZCAqKSZ0eHEtPnRmZHNbMF07Ci0Jc3RydWN0IGl3bF90ZmQgKnRmZDsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKLQlpbnQgaW5kZXggPSB0eHEtPnEucmVhZF9wdHI7Ci0JaW50IGk7Ci0JaW50IG51bV90YnM7Ci0KLQl0ZmQgPSAmdGZkX3RtcFtpbmRleF07Ci0KLQkvKiBTYW5pdHkgY2hlY2sgb24gbnVtYmVyIG9mIGNodW5rcyAqLwotCW51bV90YnMgPSBpd2xfdGZkX2dldF9udW1fdGJzKHRmZCk7Ci0KLQlpZiAobnVtX3RicyA+PSBJV0xfTlVNX09GX1RCUykgewotCQlJV0xfRVJST1IoIlRvbyBtYW55IGNodW5rczogJWlcbiIsIG51bV90YnMpOwotCQkvKiBAdG9kbyBpc3N1ZSBmYXRhbCBlcnJvciwgaXQgaXMgcXVpdGUgc2VyaW91cyBzaXR1YXRpb24gKi8KLQkJcmV0dXJuOwotCX0KLQotCS8qIFVubWFwIHR4X2NtZCAqLwotCWlmIChudW1fdGJzKQotCQlwY2lfdW5tYXBfc2luZ2xlKGRldiwKLQkJCQlwY2lfdW5tYXBfYWRkcigmdHhxLT5jbWRbaW5kZXhdLT5tZXRhLCBtYXBwaW5nKSwKLQkJCQlwY2lfdW5tYXBfbGVuKCZ0eHEtPmNtZFtpbmRleF0tPm1ldGEsIGxlbiksCi0JCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKLQotCS8qIFVubWFwIGNodW5rcywgaWYgYW55LiAqLwotCWZvciAoaSA9IDE7IGkgPCBudW1fdGJzOyBpKyspIHsKLQkJcGNpX3VubWFwX3NpbmdsZShkZXYsIGl3bF90ZmRfdGJfZ2V0X2FkZHIodGZkLCBpKSwKLQkJCQlpd2xfdGZkX3RiX2dldF9sZW4odGZkLCBpKSwgUENJX0RNQV9UT0RFVklDRSk7Ci0KLQkJaWYgKHR4cS0+dHhiKSB7Ci0JCQlkZXZfa2ZyZWVfc2tiKHR4cS0+dHhiW3R4cS0+cS5yZWFkX3B0cl0uc2tiW2kgLSAxXSk7Ci0JCQl0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdLnNrYltpIC0gMV0gPSBOVUxMOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IGl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCQlzdHJ1Y3QgaXdsX3RmZCAqdGZkLAotCQkJCQlkbWFfYWRkcl90IGFkZHIsIHUxNiBsZW4pCi17Ci0KLQl1MzIgbnVtX3RicyA9IGl3bF90ZmRfZ2V0X251bV90YnModGZkKTsKLQotCS8qIEVhY2ggVEZEIGNhbiBwb2ludCB0byBhIG1heGltdW0gMjAgVHggYnVmZmVycyAqLwotCWlmIChudW1fdGJzID49IElXTF9OVU1fT0ZfVEJTKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgY2FuIG5vdCBzZW5kIG1vcmUgdGhhbiAlZCBjaHVua3NcbiIsCi0JCQkgIElXTF9OVU1fT0ZfVEJTKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JQlVHX09OKGFkZHIgJiB+RE1BX0JJVF9NQVNLKDM2KSk7Ci0JaWYgKHVubGlrZWx5KGFkZHIgJiB+SVdMX1RYX0RNQV9NQVNLKSkKLQkJSVdMX0VSUk9SKCJVbmFsaWduZWQgYWRkcmVzcyA9ICVsbHhcbiIsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpYWRkcik7Ci0KLQlpd2xfdGZkX3NldF90Yih0ZmQsIG51bV90YnMsIGFkZHIsIGxlbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIgLSBTZW5kIG5ldyB3cml0ZSBpbmRleCB0byBoYXJkd2FyZQogICovCkBAIC0yMDYsNyArOTYsNyBAQAogCQlyZWcgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKIAogCQlpZiAocmVnICYgQ1NSX1VDT0RFX0RSVl9HUDFfQklUX01BQ19TTEVFUCkgewotCQkJSVdMX0RFQlVHX0lORk8oIlJlcXVlc3Rpbmcgd2FrZXVwLCBHUDEgPSAweCV4XG4iLCByZWcpOworCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJlcXVlc3Rpbmcgd2FrZXVwLCBHUDEgPSAweCV4XG4iLCByZWcpOwogCQkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0FDQ0VTU19SRVEpOwogCQkJcmV0dXJuIHJldDsKQEAgLTI0MSw3ICsxMzEsNyBAQAogICogRnJlZSBhbGwgYnVmZmVycy4KICAqIDAtZmlsbCwgYnV0IGRvIG5vdCBmcmVlICJ0eHEiIGRlc2NyaXB0b3Igc3RydWN0dXJlLgogICovCi1zdGF0aWMgdm9pZCBpd2xfdHhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpCit2b2lkIGl3bF90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCkKIHsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW3R4cV9pZF07CiAJc3RydWN0IGl3bF9xdWV1ZSAqcSA9ICZ0eHEtPnE7CkBAIC0yNTQsNyArMTQ0LDcgQEAKIAkvKiBmaXJzdCwgZW1wdHkgYWxsIEJEJ3MgKi8KIAlmb3IgKDsgcS0+d3JpdGVfcHRyICE9IHEtPnJlYWRfcHRyOwogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKQotCQlpd2xfaHdfdHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CisJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9mcmVlX3RmZChwcml2LCB0eHEpOwogCiAJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfY21kKSAqIHEtPm5fd2luZG93OwogCkBAIC0yNjQsNyArMTU0LDcgQEAKIAogCS8qIERlLWFsbG9jIGNpcmN1bGFyIGJ1ZmZlciBvZiBURkRzICovCiAJaWYgKHR4cS0+cS5uX2JkKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgc2l6ZW9mKHN0cnVjdCBpd2xfdGZkKSAqCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBwcml2LT5od19wYXJhbXMudGZkX3NpemUgKgogCQkJCSAgICB0eHEtPnEubl9iZCwgdHhxLT50ZmRzLCB0eHEtPnEuZG1hX2FkZHIpOwogCiAJLyogRGUtYWxsb2MgYXJyYXkgb2YgcGVyLVRGRCBkcml2ZXIgZGF0YSAqLwpAQCAtMjc0LDcgKzE2NCw3IEBACiAJLyogMC1maWxsIHF1ZXVlIGRlc2NyaXB0b3Igc3RydWN0dXJlICovCiAJbWVtc2V0KHR4cSwgMCwgc2l6ZW9mKCp0eHEpKTsKIH0KLQorRVhQT1JUX1NZTUJPTChpd2xfdHhfcXVldWVfZnJlZSk7CiAKIC8qKgogICogaXdsX2NtZF9xdWV1ZV9mcmVlIC0gRGVhbGxvY2F0ZSBETUEgcXVldWUuCkBAIC0yODQsNyArMTc0LDcgQEAKICAqIEZyZWUgYWxsIGJ1ZmZlcnMuCiAgKiAwLWZpbGwsIGJ1dCBkbyBub3QgZnJlZSAidHhxIiBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqLwotc3RhdGljIHZvaWQgaXdsX2NtZF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3ZvaWQgaXdsX2NtZF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXTsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKQEAgLTMwMywxMiArMTkzLDE0IEBACiAKIAkvKiBEZS1hbGxvYyBjaXJjdWxhciBidWZmZXIgb2YgVEZEcyAqLwogCWlmICh0eHEtPnEubl9iZCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHNpemVvZihzdHJ1Y3QgaXdsX3RmZCkgKgorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICoKIAkJCQkgICAgdHhxLT5xLm5fYmQsIHR4cS0+dGZkcywgdHhxLT5xLmRtYV9hZGRyKTsKIAogCS8qIDAtZmlsbCBxdWV1ZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSAqLwogCW1lbXNldCh0eHEsIDAsIHNpemVvZigqdHhxKSk7CiB9CitFWFBPUlRfU1lNQk9MKGl3bF9jbWRfcXVldWVfZnJlZSk7CisKIC8qKioqKioqKioqKioqKiogRE1BLVFVRVVFLUdFTkVSQUwtRlVOQ1RJT05TICAqKioqKgogICogRE1BIHNlcnZpY2VzCiAgKgpAQCAtMzg4LDYgKzI4MCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsIHUzMiBpZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlzaXplX3QgdGZkX3N6ID0gcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICogVEZEX1FVRVVFX1NJWkVfTUFYOwogCiAJLyogRHJpdmVyIHByaXZhdGUgZGF0YSwgb25seSBmb3IgVHggKG5vdCBjb21tYW5kKSBxdWV1ZXMsCiAJICogbm90IHNoYXJlZCB3aXRoIGRldmljZS4gKi8KQEAgLTM5NSwyMiArMjg4LDIwIEBACiAJCXR4cS0+dHhiID0ga21hbGxvYyhzaXplb2YodHhxLT50eGJbMF0pICoKIAkJCQkgICBURkRfUVVFVUVfU0laRV9NQVgsIEdGUF9LRVJORUwpOwogCQlpZiAoIXR4cS0+dHhiKSB7Ci0JCQlJV0xfRVJST1IoImttYWxsb2MgZm9yIGF1eGlsaWFyeSBCRCAiCisJCQlJV0xfRVJSKHByaXYsICJrbWFsbG9jIGZvciBhdXhpbGlhcnkgQkQgIgogCQkJCSAgInN0cnVjdHVyZXMgZmFpbGVkXG4iKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQl9IGVsc2UKKwl9IGVsc2UgewogCQl0eHEtPnR4YiA9IE5VTEw7CisJfQogCiAJLyogQ2lyY3VsYXIgYnVmZmVyIG9mIHRyYW5zbWl0IGZyYW1lIGRlc2NyaXB0b3JzIChURkRzKSwKIAkgKiBzaGFyZWQgd2l0aCBkZXZpY2UgKi8KLQl0eHEtPnRmZHMgPSBwY2lfYWxsb2NfY29uc2lzdGVudChkZXYsCi0JCQlzaXplb2YodHhxLT50ZmRzWzBdKSAqIFRGRF9RVUVVRV9TSVpFX01BWCwKLQkJCSZ0eHEtPnEuZG1hX2FkZHIpOworCXR4cS0+dGZkcyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwgdGZkX3N6LCAmdHhxLT5xLmRtYV9hZGRyKTsKIAogCWlmICghdHhxLT50ZmRzKSB7Ci0JCUlXTF9FUlJPUigicGNpX2FsbG9jX2NvbnNpc3RlbnQoJXpkKSBmYWlsZWRcbiIsCi0JCQkgIHNpemVvZih0eHEtPnRmZHNbMF0pICogVEZEX1FVRVVFX1NJWkVfTUFYKTsKKwkJSVdMX0VSUihwcml2LCAicGNpX2FsbG9jX2NvbnNpc3RlbnQoJXpkKSBmYWlsZWRcbiIsIHRmZF9zeik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCXR4cS0+cS5pZCA9IGlkOwpAQCAtNDI0LDQyICszMTUsMTEgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotLyoKLSAqIFRlbGwgbmljIHdoZXJlIHRvIGZpbmQgY2lyY3VsYXIgYnVmZmVyIG9mIFR4IEZyYW1lIERlc2NyaXB0b3JzIGZvcgotICogZ2l2ZW4gVHggcXVldWUsIGFuZCBlbmFibGUgdGhlIERNQSBjaGFubmVsIHVzZWQgZm9yIHRoYXQgcXVldWUuCi0gKgotICogNDk2NSBzdXBwb3J0cyB1cCB0byAxNiBUeCBxdWV1ZXMgaW4gRFJBTSwgbWFwcGVkIHRvIHVwIHRvIDggVHggRE1BCi0gKiBjaGFubmVscyBzdXBwb3J0ZWQgaW4gaGFyZHdhcmUuCi0gKi8KLXN0YXRpYyBpbnQgaXdsX2h3X3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmV0KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBDaXJjdWxhciBidWZmZXIgKFRGRCBxdWV1ZSBpbiBEUkFNKSBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KLQlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfTUVNX0NCQkNfUVVFVUUodHhxX2lkKSwKLQkJCSAgICAgdHhxLT5xLmRtYV9hZGRyID4+IDgpOwotCi0JaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyoqCiAgKiBpd2xfdHhfcXVldWVfaW5pdCAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIG9uZSB0eC9jbWQgcXVldWUKICAqLwotc3RhdGljIGludCBpd2xfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKLQkJCSAgICAgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKK2ludCBpd2xfdHhfcXVldWVfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSwKKwkJICAgICAgaW50IHNsb3RzX251bSwgdTMyIHR4cV9pZCkKIHsKIAlpbnQgaSwgbGVuOwogCWludCByZXQ7CkBAIC01MDEsNyArMzYxLDcgQEAKIAlpd2xfcXVldWVfaW5pdChwcml2LCAmdHhxLT5xLCBURkRfUVVFVUVfU0laRV9NQVgsIHNsb3RzX251bSwgdHhxX2lkKTsKIAogCS8qIFRlbGwgZGV2aWNlIHdoZXJlIHRvIGZpbmQgcXVldWUgKi8KLQlpd2xfaHdfdHhfcXVldWVfaW5pdChwcml2LCB0eHEpOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9pbml0KHByaXYsIHR4cSk7CiAKIAlyZXR1cm4gMDsKIGVycjoKQEAgLTUxNiw2ICszNzYsOCBAQAogCX0KIAlyZXR1cm4gLUVOT01FTTsKIH0KK0VYUE9SVF9TWU1CT0woaXdsX3R4X3F1ZXVlX2luaXQpOworCiAvKioKICAqIGl3bF9od190eHFfY3R4X2ZyZWUgLSBGcmVlIFRYUSBDb250ZXh0CiAgKgpAQCAtNTU3LDEzICs0MTksMTMgQEAKIAlyZXQgPSBpd2xfYWxsb2NfZG1hX3B0cihwcml2LCAmcHJpdi0+c2NkX2JjX3RibHMsCiAJCQkJcHJpdi0+aHdfcGFyYW1zLnNjZF9iY190YmxzX3NpemUpOwogCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJTY2hlZHVsZXIgQkMgVGFibGUgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJTY2hlZHVsZXIgQkMgVGFibGUgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yX2JjX3RibHM7CiAJfQogCS8qIEFsbG9jIGtlZXAtd2FybSBidWZmZXIgKi8KIAlyZXQgPSBpd2xfYWxsb2NfZG1hX3B0cihwcml2LCAmcHJpdi0+a3csIElXTF9LV19TSVpFKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiS2VlcCBXYXJtIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiS2VlcCBXYXJtIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcl9rdzsKIAl9CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKQEAgLTU4OSw3ICs0NTEsNyBAQAogCQlyZXQgPSBpd2xfdHhfcXVldWVfaW5pdChwcml2LCAmcHJpdi0+dHhxW3R4cV9pZF0sIHNsb3RzX251bSwKIAkJCQkgICAgICAgdHhxX2lkKTsKIAkJaWYgKHJldCkgewotCQkJSVdMX0VSUk9SKCJUeCAlZCBxdWV1ZSBpbml0IGZhaWxlZFxuIiwgdHhxX2lkKTsKKwkJCUlXTF9FUlIocHJpdiwgIlR4ICVkIHF1ZXVlIGluaXQgZmFpbGVkXG4iLCB0eHFfaWQpOwogCQkJZ290byBlcnJvcjsKIAkJfQogCX0KQEAgLTc3OCwxNCArNjQwLDE0IEBACiAJCW1lbWNweSh0eF9jbWQtPmtleSwga2V5Y29uZi0+a2V5LCBrZXljb25mLT5rZXlsZW4pOwogCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQogCQkJdHhfY21kLT50eF9mbGFncyB8PSBUWF9DTURfRkxHX0FHR19DQ01QX01TSzsKLQkJSVdMX0RFQlVHX1RYKCJ0eF9jbWQgd2l0aCBBRVMgaHdjcnlwdG9cbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgInR4X2NtZCB3aXRoIEFFUyBod2NyeXB0b1xuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfVEtJUDoKIAkJdHhfY21kLT5zZWNfY3RsID0gVFhfQ01EX1NFQ19US0lQOwogCQlpZWVlODAyMTFfZ2V0X3RraXBfa2V5KGtleWNvbmYsIHNrYl9mcmFnLAogCQkJSUVFRTgwMjExX1RLSVBfUDJfS0VZLCB0eF9jbWQtPmtleSk7Ci0JCUlXTF9ERUJVR19UWCgidHhfY21kIHdpdGggdGtpcCBod2NyeXB0b1xuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAidHhfY21kIHdpdGggdGtpcCBod2NyeXB0b1xuIik7CiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfV0VQOgpAQCAtNzk3LDEyICs2NTksMTIgQEAKIAogCQltZW1jcHkoJnR4X2NtZC0+a2V5WzNdLCBrZXljb25mLT5rZXksIGtleWNvbmYtPmtleWxlbik7CiAKLQkJSVdMX0RFQlVHX1RYKCJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKIAkJCSAgICAgIndpdGgga2V5ICVkXG4iLCBrZXljb25mLT5rZXlpZHgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5rbm93biBlbmNvZGUgYWxnICVkXG4iLCBrZXljb25mLT5hbGcpOworCQlJV0xfRVJSKHByaXYsICJVbmtub3duIGVuY29kZSBhbGcgJWRcbiIsIGtleWNvbmYtPmFsZyk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTgyMiw3ICs2ODQsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpd2xfdGZkICp0ZmQ7CiAJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxOwogCXN0cnVjdCBpd2xfcXVldWUgKnE7CiAJc3RydWN0IGl3bF9jbWQgKm91dF9jbWQ7CkBAIC04NDQsMTMgKzcwNSwxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSBSRiBLSUxMXG4iKTsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gUkYgS0lMTFxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCiAJaWYgKChpZWVlODAyMTFfZ2V0X3R4X3JhdGUocHJpdi0+aHcsIGluZm8pLT5od192YWx1ZSAmIDB4RkYpID09CiAJICAgICBJV0xfSU5WQUxJRF9SQVRFKSB7Ci0JCUlXTF9FUlJPUigiRVJST1I6IE5vIFRYIHJhdGUgYXZhaWxhYmxlLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIkVSUk9SOiBObyBUWCByYXRlIGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtODU4LDExICs3MTksMTEgQEAKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJaWYgKGllZWU4MDIxMV9pc19hdXRoKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFVVEggZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgQVVUSCBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShmYykpCi0JCUlXTF9ERUJVR19UWCgiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBBU1NPQyBmcmFtZVxuIik7CiAJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3JlYXNzb2NfcmVxKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIFJFQVNTT0MgZnJhbWVcbiIpOworCQlJV0xfREVCVUdfVFgocHJpdiwgIlNlbmRpbmcgUkVBU1NPQyBmcmFtZVxuIik7CiAjZW5kaWYKIAogCS8qIGRyb3AgYWxsIGRhdGEgZnJhbWUgaWYgd2UgYXJlIG5vdCBhc3NvY2lhdGVkICovCkBAIC04NzIsNyArNzMzLDcgQEAKIAkgICAgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSB8fAogCSAgICAgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pICYmICFwcml2LT5hc3NvY19pZCkgfHwKIAkgICAgICFwcml2LT5hc3NvY19zdGF0aW9uX2FkZGVkKSkgewotCQlJV0xfREVCVUdfRFJPUCgiRHJvcHBpbmcgLSAhaXdsX2lzX2Fzc29jaWF0ZWRcbiIpOworCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSAhaXdsX2lzX2Fzc29jaWF0ZWRcbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtODgzLDEyICs3NDQsMTIgQEAKIAkvKiBGaW5kIChvciBjcmVhdGUpIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLwogCXN0YV9pZCA9IGl3bF9nZXRfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKIAkJCSAgICAgICBoZHItPmFkZHIxKTsKIAkJZ290byBkcm9wOwogCX0KIAotCUlXTF9ERUJVR19UWCgic3RhdGlvbiBJZCAlZFxuIiwgc3RhX2lkKTsKKwlJV0xfREVCVUdfVFgocHJpdiwgInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7CiAKIAlzd3FfaWQgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAl0eHFfaWQgPSBzd3FfaWQ7CkBAIC04OTgsMTIgKzc1OSwxNCBAQAogCQlzZXFfbnVtYmVyID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5zZXFfbnVtYmVyOwogCQlzZXFfbnVtYmVyICY9IElFRUU4MDIxMV9TQ1RMX1NFUTsKIAkJaGRyLT5zZXFfY3RybCA9IGhkci0+c2VxX2N0cmwgJgotCQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7CisJCQkJY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7CiAJCWhkci0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYoc2VxX251bWJlcik7CiAJCXNlcV9udW1iZXIgKz0gMHgxMDsKIAkJLyogYWdncmVnYXRpb24gaXMgb24gZm9yIHRoaXMgPHN0YSx0aWQ+ICovCi0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpCisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKIAkJCXR4cV9pZCA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uYWdnLnR4cV9pZDsKKwkJCXN3cV9pZCA9IGl3bF92aXJ0dWFsX2FnZ19xdWV1ZV9udW0oc3dxX2lkLCB0eHFfaWQpOworCQl9CiAJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0udGZkc19pbl9xdWV1ZSsrOwogCX0KIApAQCAtOTEzLDEwICs3NzYsNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCS8qIFNldCB1cCBmaXJzdCBlbXB0eSBURkQgd2l0aGluIHRoaXMgcXVldWUncyBjaXJjdWxhciBURkQgYnVmZmVyICovCi0JdGZkID0gJnR4cS0+dGZkc1txLT53cml0ZV9wdHJdOwotCW1lbXNldCh0ZmQsIDAsIHNpemVvZigqdGZkKSk7Ci0KIAkvKiBTZXQgdXAgZHJpdmVyIGRhdGEgZm9yIHRoaXMgVEZEICovCiAJbWVtc2V0KCYodHhxLT50eGJbcS0+d3JpdGVfcHRyXSksIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3R4X2luZm8pKTsKIAl0eHEtPnR4YltxLT53cml0ZV9wdHJdLnNrYlswXSA9IHNrYjsKQEAgLTk3MCw3ICs4MjksOCBAQAogCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCiAJICogZmlyc3QgZW50cnkgKi8KIAl0eGNtZF9waHlzICs9IG9mZnNldG9mKHN0cnVjdCBpd2xfY21kLCBoZHIpOwotCWl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCB0eGNtZF9waHlzLCBsZW4pOworCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCisJCQkJCQkgICB0eGNtZF9waHlzLCBsZW4sIDEsIDApOwogCiAJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQogCQlpd2xfdHhfY21kX2J1aWxkX2h3Y3J5cHRvKHByaXYsIGluZm8sIHR4X2NtZCwgc2tiLCBzdGFfaWQpOwpAQCAtOTgxLDcgKzg0MSw5IEBACiAJaWYgKGxlbikgewogCQlwaHlzX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCBza2ItPmRhdGEgKyBoZHJfbGVuLAogCQkJCQkgICBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQlpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHRmZCwgcGh5c19hZGRyLCBsZW4pOworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAorCQkJCQkJCSAgIHBoeXNfYWRkciwgbGVuLAorCQkJCQkJCSAgIDAsIDApOwogCX0KIAogCS8qIFRlbGwgTklDIGFib3V0IGFueSAyLWJ5dGUgcGFkZGluZyBhZnRlciBNQUMgaGVhZGVyICovCkBAIC0xMDM1LDcgKzg5Nyw3IEBACiAJCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJfSBlbHNlIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKHByaXYtPmh3LCB0eHEtPnN3cV9pZCk7CisJCQlpd2xfc3RvcF9xdWV1ZShwcml2LCB0eHEtPnN3cV9pZCk7CiAJCX0KIAl9CiAKQEAgLTEwNjMsNyArOTI1LDYgQEAKIHsKIAlzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXTsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgaXdsX3RmZCAqdGZkOwogCXN0cnVjdCBpd2xfY21kICpvdXRfY21kOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDgxLDIxICs5NDIsMTcgQEAKIAkgICAgICAgIShjbWQtPm1ldGEuZmxhZ3MgJiBDTURfU0laRV9IVUdFKSk7CiAKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSU5GTygiTm90IHNlbmRpbmcgY29tbWFuZCAtIFJGIEtJTEwiKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIk5vdCBzZW5kaW5nIGNvbW1hbmQgLSBSRiBLSUxMIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmIChpd2xfcXVldWVfc3BhY2UocSkgPCAoKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykgPyAyIDogMSkpIHsKLQkJSVdMX0VSUk9SKCJObyBzcGFjZSBmb3IgVHhcbiIpOworCQlJV0xfRVJSKHByaXYsICJObyBzcGFjZSBmb3IgVHhcbiIpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+aGNtZF9sb2NrLCBmbGFncyk7CiAKLQl0ZmQgPSAmdHhxLT50ZmRzW3EtPndyaXRlX3B0cl07Ci0JbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKLQotCiAJaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIGNtZC0+bWV0YS5mbGFncyAmIENNRF9TSVpFX0hVR0UpOwogCW91dF9jbWQgPSB0eHEtPmNtZFtpZHhdOwogCkBAIC0xMTIwLDEzICs5NzcsMTUgQEAKIAlwY2lfdW5tYXBfbGVuX3NldCgmb3V0X2NtZC0+bWV0YSwgbGVuLCBsZW4pOwogCXBoeXNfYWRkciArPSBvZmZzZXRvZihzdHJ1Y3QgaXdsX2NtZCwgaGRyKTsKIAotCWl3bF9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCBwaHlzX2FkZHIsIGZpeF9zaXplKTsKKwlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdHhxLAorCQkJCQkJICAgcGh5c19hZGRyLCBmaXhfc2l6ZSwgMSwKKwkJCQkJCSAgIFUzMl9QQUQoY21kLT5sZW4pKTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJc3dpdGNoIChvdXRfY21kLT5oZHIuY21kKSB7CiAJY2FzZSBSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01EOgogCWNhc2UgU0VOU0lUSVZJVFlfQ01EOgotCQlJV0xfREVCVUdfSENfRFVNUCgiU2VuZGluZyBjb21tYW5kICVzICgjJXgpLCBzZXE6IDB4JTA0WCwgIgorCQlJV0xfREVCVUdfSENfRFVNUChwcml2LCAiU2VuZGluZyBjb21tYW5kICVzICgjJXgpLCBzZXE6IDB4JTA0WCwgIgogCQkJCSIlZCBieXRlcyBhdCAlZFslZF06JWRcbiIsCiAJCQkJZ2V0X2NtZF9zdHJpbmcob3V0X2NtZC0+aGRyLmNtZCksCiAJCQkJb3V0X2NtZC0+aGRyLmNtZCwKQEAgLTExMzQsNyArOTkzLDcgQEAKIAkJCQlxLT53cml0ZV9wdHIsIGlkeCwgSVdMX0NNRF9RVUVVRV9OVU0pOwogCQkJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUlXTF9ERUJVR19IQygiU2VuZGluZyBjb21tYW5kICVzICgjJXgpLCBzZXE6IDB4JTA0WCwgIgorCQlJV0xfREVCVUdfSEMocHJpdiwgIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKIAkJCQkiJWQgYnl0ZXMgYXQgJWRbJWRdOiVkXG4iLAogCQkJCWdldF9jbWRfc3RyaW5nKG91dF9jbWQtPmhkci5jbWQpLAogCQkJCW91dF9jbWQtPmhkci5jbWQsCkBAIC0xMTQ0LDggKzEwMDMsOSBAQAogI2VuZGlmCiAJdHhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAKLQkvKiBTZXQgdXAgZW50cnkgaW4gcXVldWUncyBieXRlIGNvdW50IGNpcmN1bGFyIGJ1ZmZlciAqLwotCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKHByaXYsIHR4cSwgMCk7CisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnR4cV91cGRhdGVfYnl0ZV9jbnRfdGJsKQorCQkvKiBTZXQgdXAgZW50cnkgaW4gcXVldWUncyBieXRlIGNvdW50IGNpcmN1bGFyIGJ1ZmZlciAqLworCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfdXBkYXRlX2J5dGVfY250X3RibChwcml2LCB0eHEsIDApOwogCiAJLyogSW5jcmVtZW50IGFuZCB1cGRhdGUgcXVldWUncyB3cml0ZSBpbmRleCAqLwogCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwpAQCAtMTE2Myw3ICsxMDIzLDcgQEAKIAlpbnQgbmZyZWVkID0gMDsKIAogCWlmICgoaW5kZXggPj0gcS0+bl9iZCkgfHwgKGl3bF9xdWV1ZV91c2VkKHEsIGluZGV4KSA9PSAwKSkgewotCQlJV0xfRVJST1IoIlJlYWQgaW5kZXggZm9yIERNQSBxdWV1ZSB0eHEgaWQgKCVkKSwgaW5kZXggJWQsICIKKwkJSVdMX0VSUihwcml2LCAiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgogCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZC5cbiIsIHR4cV9pZCwKIAkJCSAgaW5kZXgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwogCQlyZXR1cm4gMDsKQEAgLTExODAsNyArMTA0MCw3IEBACiAJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKQogCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ludmFsX2J5dGVfY250X3RibChwcml2LCB0eHEpOwogCi0JCWl3bF9od190eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2ZyZWVfdGZkKHByaXYsIHR4cSk7CiAJCW5mcmVlZCsrOwogCX0KIAlyZXR1cm4gbmZyZWVkOwpAQCAtMTIwMyw3ICsxMDYzLDcgQEAKIAlpbnQgbmZyZWVkID0gMDsKIAogCWlmICgoaWR4ID49IHEtPm5fYmQpIHx8IChpd2xfcXVldWVfdXNlZChxLCBpZHgpID09IDApKSB7Ci0JCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgorCQlJV0xfRVJSKHByaXYsICJSZWFkIGluZGV4IGZvciBETUEgcXVldWUgdHhxIGlkICglZCksIGluZGV4ICVkLCAiCiAJCQkgICJpcyBvdXQgb2YgcmFuZ2UgWzAtJWRdICVkICVkLlxuIiwgdHhxX2lkLAogCQkJICBpZHgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwogCQlyZXR1cm47CkBAIC0xMjE4LDcgKzEwNzgsNyBAQAogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CiAKIAkJaWYgKG5mcmVlZCsrID4gMCkgewotCQkJSVdMX0VSUk9SKCJIQ01EIHNraXBwZWQ6IGluZGV4ICglZCkgJWQgJWRcbiIsIGlkeCwKKwkJCUlXTF9FUlIocHJpdiwgIkhDTUQgc2tpcHBlZDogaW5kZXggKCVkKSAlZCAlZFxuIiwgaWR4LAogCQkJCQlxLT53cml0ZV9wdHIsIHEtPnJlYWRfcHRyKTsKIAkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7CiAJCX0KQEAgLTEzMDYsNyArMTE2Niw3IEBACiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCUlXTF9XQVJOSU5HKCIlcyBvbiByYSA9ICVwTSB0aWQgPSAlZFxuIiwKKwlJV0xfV0FSTihwcml2LCAiJXMgb24gcmEgPSAlcE0gdGlkID0gJWRcbiIsCiAJCQlfX2Z1bmNfXywgcmEsIHRpZCk7CiAKIAlzdGFfaWQgPSBpd2xfZmluZF9zdGF0aW9uKHByaXYsIHJhKTsKQEAgLTEzMTQsNyArMTE3NCw3IEBACiAJCXJldHVybiAtRU5YSU87CiAKIAlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgIT0gSVdMX0FHR19PRkYpIHsKLQkJSVdMX0VSUk9SKCJTdGFydCBBR0cgd2hlbiBzdGF0ZSBpcyBub3QgSVdMX0FHR19PRkYgIVxuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXJ0IEFHRyB3aGVuIHN0YXRlIGlzIG5vdCBJV0xfQUdHX09GRiAhXG4iKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKQEAgLTEzMzQsMTEgKzExOTQsMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmICh0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSFcgcXVldWUgaXMgZW1wdHlcbiIpOworCQlJV0xfRVJSKHByaXYsICJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CiAJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfQUdHX09OOwogCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShwcml2LT5odywgcmEsIHRpZCk7CiAJfSBlbHNlIHsKLQkJSVdMX0RFQlVHX0hUKCJIVyBxdWV1ZSBpcyBOT1QgZW1wdHk6ICVkIHBhY2tldHMgaW4gSFcgcXVldWVcbiIsCisJCUlXTF9ERUJVR19IVChwcml2LCAiSFcgcXVldWUgaXMgTk9UIGVtcHR5OiAlZCBwYWNrZXRzIGluIEhXIHF1ZXVlXG4iLAogCQkJICAgICB0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSk7CiAJCXRpZF9kYXRhLT5hZ2cuc3RhdGUgPSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfQUREQkE7CiAJfQpAQCAtMTM1NCw3ICsxMjE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFyYSkgewotCQlJV0xfRVJST1IoInJhID0gTlVMTFxuIik7CisJCUlXTF9FUlIocHJpdiwgInJhID0gTlVMTFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTM2NSwxMSArMTIyNSwxMyBAQAogCiAJc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCByYSk7CiAKLQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pCisJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CisJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgc3RhdGlvbiBmb3IgQUdHIHRpZCAlZFxuIiwgdGlkKTsKIAkJcmV0dXJuIC1FTlhJTzsKKwl9CiAKIAlpZiAocHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgIT0gSVdMX0FHR19PTikKLQkJSVdMX1dBUk5JTkcoIlN0b3BwaW5nIEFHRyB3aGlsZSBzdGF0ZSBub3QgSVdMX0FHR19PTlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJTdG9wcGluZyBBR0cgd2hpbGUgc3RhdGUgbm90IElXTF9BR0dfT05cbiIpOwogCiAJdGlkX2RhdGEgPSAmcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXTsKIAlzc24gPSAodGlkX2RhdGEtPnNlcV9udW1iZXIgJiBJRUVFODAyMTFfU0NUTF9TRVEpID4+IDQ7CkBAIC0xMzc5LDEzICsxMjQxLDEzIEBACiAKIAkvKiBUaGUgcXVldWUgaXMgbm90IGVtcHR5ICovCiAJaWYgKHdyaXRlX3B0ciAhPSByZWFkX3B0cikgewotCQlJV0xfREVCVUdfSFQoIlN0b3BwaW5nIGEgbm9uIGVtcHR5IEFHRyBIVyBRVUVVRVxuIik7CisJCUlXTF9ERUJVR19IVChwcml2LCAiU3RvcHBpbmcgYSBub24gZW1wdHkgQUdHIEhXIFFVRVVFXG4iKTsKIAkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPQogCQkJCUlXTF9FTVBUWUlOR19IV19RVUVVRV9ERUxCQTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JSVdMX0RFQlVHX0hUKCJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CisJSVdMX0RFQlVHX0hUKHByaXYsICJIVyBxdWV1ZSBpcyBlbXB0eVxuIik7CiAJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPSBJV0xfQUdHX09GRjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0xNDE2LDcgKzEyNzgsNyBAQAogCQkgICAgKHEtPnJlYWRfcHRyID09IHEtPndyaXRlX3B0cikpIHsKIAkJCXUxNiBzc24gPSBTRVFfVE9fU04odGlkX2RhdGEtPnNlcV9udW1iZXIpOwogCQkJaW50IHR4X2ZpZm8gPSBkZWZhdWx0X3RpZF90b190eF9maWZvW3RpZF07Ci0JCQlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGVtcHR5OiBjb250aW51ZSBERUxCQSBmbG93XG4iKTsKKwkJCUlXTF9ERUJVR19IVChwcml2LCAiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIERFTEJBIGZsb3dcbiIpOwogCQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2FnZ19kaXNhYmxlKHByaXYsIHR4cV9pZCwKIAkJCQkJCQkgICAgIHNzbiwgdHhfZmlmbyk7CiAJCQl0aWRfZGF0YS0+YWdnLnN0YXRlID0gSVdMX0FHR19PRkY7CkBAIC0xNDI2LDcgKzEyODgsNyBAQAogCWNhc2UgSVdMX0VNUFRZSU5HX0hXX1FVRVVFX0FEREJBOgogCQkvKiBXZSBhcmUgcmVjbGFpbWluZyB0aGUgbGFzdCBwYWNrZXQgb2YgdGhlIHF1ZXVlICovCiAJCWlmICh0aWRfZGF0YS0+dGZkc19pbl9xdWV1ZSA9PSAwKSB7Ci0JCQlJV0xfREVCVUdfSFQoIkhXIHF1ZXVlIGVtcHR5OiBjb250aW51ZSBBRERCQSBmbG93XG4iKTsKKwkJCUlXTF9ERUJVR19IVChwcml2LCAiSFcgcXVldWUgZW1wdHk6IGNvbnRpbnVlIEFEREJBIGZsb3dcbiIpOwogCQkJdGlkX2RhdGEtPmFnZy5zdGF0ZSA9IElXTF9BR0dfT047CiAJCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShwcml2LT5odywgYWRkciwgdGlkKTsKIAkJfQpAQCAtMTQ1NSwxMyArMTMxNywxMyBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAogCWlmICh1bmxpa2VseSghYWdnLT53YWl0X2Zvcl9iYSkpICB7Ci0JCUlXTF9FUlJPUigiUmVjZWl2ZWQgQkEgd2hlbiBub3QgZXhwZWN0ZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJSZWNlaXZlZCBCQSB3aGVuIG5vdCBleHBlY3RlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIE1hcmsgdGhhdCB0aGUgZXhwZWN0ZWQgYmxvY2stYWNrIHJlc3BvbnNlIGFycml2ZWQgKi8KIAlhZ2ctPndhaXRfZm9yX2JhID0gMDsKLQlJV0xfREVCVUdfVFhfUkVQTFkoIkJBICVkICVkXG4iLCBhZ2ctPnN0YXJ0X2lkeCwgYmFfcmVzcC0+c2VxX2N0bCk7CisJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJCQSAlZCAlZFxuIiwgYWdnLT5zdGFydF9pZHgsIGJhX3Jlc3AtPnNlcV9jdGwpOwogCiAJLyogQ2FsY3VsYXRlIHNoaWZ0IHRvIGFsaWduIGJsb2NrLWFjayBiaXRzIHdpdGggb3VyIFR4IHdpbmRvdyBiaXRzICovCiAJc2ggPSBhZ2ctPnN0YXJ0X2lkeCAtIFNFUV9UT19JTkRFWChzZXFfY3RsID4+IDQpOwpAQCAtMTQ3Miw3ICsxMzM0LDcgQEAKIAliaXRtYXAgPSBsZTY0X3RvX2NwdShiYV9yZXNwLT5iaXRtYXApID4+IHNoOwogCiAJaWYgKGFnZy0+ZnJhbWVfY291bnQgPiAoNjQgLSBzaCkpIHsKLQkJSVdMX0RFQlVHX1RYX1JFUExZKCJtb3JlIGZyYW1lcyB0aGFuIGJpdG1hcCBzaXplIik7CisJCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAibW9yZSBmcmFtZXMgdGhhbiBiaXRtYXAgc2l6ZSIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNDg1LDcgKzEzNDcsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBhZ2ctPmZyYW1lX2NvdW50IDsgaSsrKSB7CiAJCWFjayA9IGJpdG1hcCAmICgxVUxMIDw8IGkpOwogCQlzdWNjZXNzZXMgKz0gISFhY2s7Ci0JCUlXTF9ERUJVR19UWF9SRVBMWSgiJXMgT04gaT0lZCBpZHg9JWQgcmF3PSVkXG4iLAorCQlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIiVzIE9OIGk9JWQgaWR4PSVkIHJhdz0lZFxuIiwKIAkJCWFjayA/ICJBQ0siIDogIk5BQ0siLCBpLCAoYWdnLT5zdGFydF9pZHggKyBpKSAmIDB4ZmYsCiAJCQlhZ2ctPnN0YXJ0X2lkeCArIGkpOwogCX0KQEAgLTE0OTgsNyArMTM2MCw3IEBACiAJaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4gPSBhZ2ctPmZyYW1lX2NvdW50OwogCWl3bF9od3JhdGVfdG9fdHhfY29udHJvbChwcml2LCBhZ2ctPnJhdGVfbl9mbGFncywgaW5mbyk7CiAKLQlJV0xfREVCVUdfVFhfUkVQTFkoIkJpdG1hcCAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWJpdG1hcCk7CisJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJCaXRtYXAgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRtYXApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTI4LDcgKzEzOTAsOCBAQAogCXUxNiBiYV9yZXNwX3NjZF9zc24gPSBsZTE2X3RvX2NwdShiYV9yZXNwLT5zY2Rfc3NuKTsKIAogCWlmIChzY2RfZmxvdyA+PSBwcml2LT5od19wYXJhbXMubWF4X3R4cV9udW0pIHsKLQkJSVdMX0VSUk9SKCJCVUdfT04gc2NkX2Zsb3cgaXMgYmlnZ2VyIHRoYW4gbnVtYmVyIG9mIHF1ZXVlc1xuIik7CisJCUlXTF9FUlIocHJpdiwKKwkJCSJCVUdfT04gc2NkX2Zsb3cgaXMgYmlnZ2VyIHRoYW4gbnVtYmVyIG9mIHF1ZXVlc1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE1NDIsMTkgKzE0MDUsMTkgQEAKIAogCS8qIFRPRE86IE5lZWQgdG8gZ2V0IHRoaXMgY29weSBtb3JlIHNhZmVseSAtIG5vdyBnb29kIGZvciBkZWJ1ZyAqLwogCi0JSVdMX0RFQlVHX1RYX1JFUExZKCJSRVBMWV9DT01QUkVTU0VEX0JBIFslZF0gUmVjZWl2ZWQgZnJvbSAlcE0sICIKKwlJV0xfREVCVUdfVFhfUkVQTFkocHJpdiwgIlJFUExZX0NPTVBSRVNTRURfQkEgWyVkXSBSZWNlaXZlZCBmcm9tICVwTSwgIgogCQkJICAgInN0YV9pZCA9ICVkXG4iLAogCQkJICAgYWdnLT53YWl0X2Zvcl9iYSwKIAkJCSAgICh1OCAqKSAmYmFfcmVzcC0+c3RhX2FkZHJfbG8zMiwKIAkJCSAgIGJhX3Jlc3AtPnN0YV9pZCk7Ci0JSVdMX0RFQlVHX1RYX1JFUExZKCJUSUQgPSAlZCwgU2VxQ3RsID0gJWQsIGJpdG1hcCA9IDB4JWxseCwgc2NkX2Zsb3cgPSAiCisJSVdMX0RFQlVHX1RYX1JFUExZKHByaXYsICJUSUQgPSAlZCwgU2VxQ3RsID0gJWQsIGJpdG1hcCA9IDB4JWxseCwgc2NkX2Zsb3cgPSAiCiAJCQkgICAiJWQsIHNjZF9zc24gPSAlZFxuIiwKIAkJCSAgIGJhX3Jlc3AtPnRpZCwKIAkJCSAgIGJhX3Jlc3AtPnNlcV9jdGwsCiAJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGJhX3Jlc3AtPmJpdG1hcCksCiAJCQkgICBiYV9yZXNwLT5zY2RfZmxvdywKIAkJCSAgIGJhX3Jlc3AtPnNjZF9zc24pOwotCUlXTF9ERUJVR19UWF9SRVBMWSgiREFUIHN0YXJ0X2lkeCA9ICVkLCBiaXRtYXAgPSAweCVsbHggXG4iLAorCUlXTF9ERUJVR19UWF9SRVBMWShwcml2LCAiREFUIHN0YXJ0X2lkeCA9ICVkLCBiaXRtYXAgPSAweCVsbHggXG4iLAogCQkJICAgYWdnLT5zdGFydF9pZHgsCiAJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWFnZy0+Yml0bWFwKTsKIApAQCAtMTU3Miw3ICsxNDM1LDcgQEAKIAkJaWYgKChpd2xfcXVldWVfc3BhY2UoJnR4cS0+cSkgPiB0eHEtPnEubG93X21hcmspICYmCiAJCSAgICBwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkICYmCiAJCSAgICAoYWdnLT5zdGF0ZSAhPSBJV0xfRU1QVFlJTkdfSFdfUVVFVUVfREVMQkEpKQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUocHJpdi0+aHcsIHR4cS0+c3dxX2lkKTsKKwkJCWl3bF93YWtlX3F1ZXVlKHByaXYsIHR4cS0+c3dxX2lkKTsKIAogCQlpd2xfdHhxX2NoZWNrX2VtcHR5KHByaXYsIHN0YV9pZCwgdGlkLCBzY2RfZmxvdyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKaW5kZXggNTdkZDM0ZS4uYTcxYjA4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC00Niw0MCArNDYsMjUgQEAKIAogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCi0jaW5jbHVkZSAiaXdsLTM5NDUtY29yZS5oIgorI2RlZmluZSBEUlZfTkFNRQkiaXdsMzk0NSIKKworI2luY2x1ZGUgIml3bC1maC5oIgorI2luY2x1ZGUgIml3bC0zOTQ1LWZoLmgiCisjaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCisjaW5jbHVkZSAiaXdsLXN0YS5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LmgiCiAjaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKLQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi11MzIgaXdsMzk0NV9kZWJ1Z19sZXZlbDsKLSNlbmRpZgotCi1zdGF0aWMgaW50IGl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBtb2R1bGUgYm9pbGVyIHBsYXRlCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9wYXJhbV9kaXNhYmxlX2h3X3NjYW47IC8qIGRlZjogMCA9IHVzZSAzOTQ1J3MgaC93IHNjYW4gKi8KLXN0YXRpYyB1MzIgaXdsMzk0NV9wYXJhbV9kZWJ1ZzsgICAgLyogZGVmOiAwID0gbWluaW1hbCBkZWJ1ZyBsb2cgbWVzc2FnZXMgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9wYXJhbV9kaXNhYmxlOyAgLyogZGVmOiAwID0gZW5hYmxlIHJhZGlvICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcGFyYW1fYW50ZW5uYTsgIC8qIGRlZjogMCA9IGJvdGggYW50ZW5uYXMgKHVzZSBkaXZlcnNpdHkpICovCi1pbnQgaXdsMzk0NV9wYXJhbV9od2NyeXB0bzsgICAgICAgIC8qIGRlZjogMCA9IHVzZSBzb2Z0d2FyZSBlbmNyeXB0aW9uICovCi1pbnQgaXdsMzk0NV9wYXJhbV9xdWV1ZXNfbnVtID0gSVdMMzlfTUFYX05VTV9RVUVVRVM7IC8qIGRlZjogOCBUeCBxdWV1ZXMgKi8KKyNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1kZXYuaCIKIAogLyoKICAqIG1vZHVsZSBuYW1lLCBjb3B5cmlnaHQsIHZlcnNpb24sIGV0Yy4KLSAqIE5PVEU6IERSVl9OQU1FIGlzIGRlZmluZWQgaW4gaXdsd2lmaS5oIGZvciB1c2UgYnkgaXdsLWRlYnVnLmggYW5kIHByaW50awogICovCiAKICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCVwKICJJbnRlbChSKSBQUk8vV2lyZWxlc3MgMzk0NUFCRy9CRyBOZXR3b3JrIENvbm5lY3Rpb24gZHJpdmVyIGZvciBMaW51eCIKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKICNkZWZpbmUgVkQgImQiCiAjZWxzZQogI2RlZmluZSBWRApAQCAtOTEsMTAgKzc2LDEwIEBACiAjZGVmaW5lIFZTCiAjZW5kaWYKIAotI2RlZmluZSBJV0xXSUZJX1ZFUlNJT04gIjEuMi4yNmsiIFZEIFZTCi0jZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDggSW50ZWwgQ29ycG9yYXRpb24iCisjZGVmaW5lIElXTDM5X1ZFUlNJT04gIjEuMi4yNmsiIFZEIFZTCisjZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDkgSW50ZWwgQ29ycG9yYXRpb24iCiAjZGVmaW5lIERSVl9BVVRIT1IgICAgICI8aWx3QGxpbnV4LmludGVsLmNvbT4iCi0jZGVmaW5lIERSVl9WRVJTSU9OICAgICBJV0xXSUZJX1ZFUlNJT04KKyNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElXTDM5X1ZFUlNJT04KIAogCiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTsKQEAgLTEwMiwyMzUgKzg3LDEzIEBACiBNT0RVTEVfQVVUSE9SKERSVl9DT1BZUklHSFQgIiAiIERSVl9BVVRIT1IpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqaXdsMzk0NV9nZXRfYmFuZCgKLQkJc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQotewotCXJldHVybiBwcml2LT5ody0+d2lwaHktPmJhbmRzW2JhbmRdOwotfQotCi0vKioqKioqKioqKioqKioqIERNQS1RVUVVRS1HRU5FUkFMLUZVTkNUSU9OUyAgKioqKioKLSAqIERNQSBzZXJ2aWNlcwotICoKLSAqIFRoZW9yeSBvZiBvcGVyYXRpb24KLSAqCi0gKiBBIFR4IG9yIFJ4IHF1ZXVlIHJlc2lkZXMgaW4gaG9zdCBEUkFNLCBhbmQgaXMgY29tcHJpc2VkIG9mIGEgY2lyY3VsYXIgYnVmZmVyCi0gKiBvZiBidWZmZXIgZGVzY3JpcHRvcnMsIGVhY2ggb2Ygd2hpY2ggcG9pbnRzIHRvIG9uZSBvciBtb3JlIGRhdGEgYnVmZmVycyBmb3IKLSAqIHRoZSBkZXZpY2UgdG8gcmVhZCBmcm9tIG9yIGZpbGwuICBEcml2ZXIgYW5kIGRldmljZSBleGNoYW5nZSBzdGF0dXMgb2YgZWFjaAotICogcXVldWUgdmlhICJyZWFkIiBhbmQgIndyaXRlIiBwb2ludGVycy4gIERyaXZlciBrZWVwcyBtaW5pbXVtIG9mIDIgZW1wdHkKLSAqIGVudHJpZXMgaW4gZWFjaCBjaXJjdWxhciBidWZmZXIsIHRvIHByb3RlY3QgYWdhaW5zdCBjb25mdXNpbmcgZW1wdHkgYW5kIGZ1bGwKLSAqIHF1ZXVlIHN0YXRlcy4KLSAqCi0gKiBUaGUgZGV2aWNlIHJlYWRzIG9yIHdyaXRlcyB0aGUgZGF0YSBpbiB0aGUgcXVldWVzIHZpYSB0aGUgZGV2aWNlJ3Mgc2V2ZXJhbAotICogRE1BL0ZJRk8gY2hhbm5lbHMuICBFYWNoIHF1ZXVlIGlzIG1hcHBlZCB0byBhIHNpbmdsZSBETUEgY2hhbm5lbC4KLSAqCi0gKiBGb3IgVHggcXVldWUsIHRoZXJlIGFyZSBsb3cgbWFyayBhbmQgaGlnaCBtYXJrIGxpbWl0cy4gSWYsIGFmdGVyIHF1ZXVpbmcKLSAqIHRoZSBwYWNrZXQgZm9yIFR4LCBmcmVlIHNwYWNlIGJlY29tZSA8IGxvdyBtYXJrLCBUeCBxdWV1ZSBzdG9wcGVkLiBXaGVuCi0gKiByZWNsYWltaW5nIHBhY2tldHMgKG9uICd0eCBkb25lIElSUSksIGlmIGZyZWUgc3BhY2UgYmVjb21lID4gaGlnaCBtYXJrLAotICogVHggcXVldWUgcmVzdW1lZC4KLSAqCi0gKiBUaGUgMzk0NSBvcGVyYXRlcyB3aXRoIHNpeCBxdWV1ZXM6ICBPbmUgcmVjZWl2ZSBxdWV1ZSwgb25lIHRyYW5zbWl0IHF1ZXVlCi0gKiAoIzQpIGZvciBzZW5kaW5nIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UgZmlybXdhcmUsIGFuZCBmb3VyIHRyYW5zbWl0IHF1ZXVlcwotICogKCMwLTMpIGZvciBkYXRhIHR4IHZpYSBFRENBLiAgQW4gYWRkaXRpb25hbCAyIEhDQ0EgcXVldWVzIGFyZSB1bnVzZWQuCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1pbnQgaXdsMzk0NV9xdWV1ZV9zcGFjZShjb25zdCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSkKLXsKLQlpbnQgcyA9IHEtPnJlYWRfcHRyIC0gcS0+d3JpdGVfcHRyOwotCi0JaWYgKHEtPnJlYWRfcHRyID4gcS0+d3JpdGVfcHRyKQotCQlzIC09IHEtPm5fYmQ7Ci0KLQlpZiAocyA8PSAwKQotCQlzICs9IHEtPm5fd2luZG93OwotCS8qIGtlZXAgc29tZSByZXNlcnZlIHRvIG5vdCBjb25mdXNlIGVtcHR5IGFuZCBmdWxsIHNpdHVhdGlvbnMgKi8KLQlzIC09IDI7Ci0JaWYgKHMgPCAwKQotCQlzID0gMDsKLQlyZXR1cm4gczsKLX0KLQotaW50IGl3bDM5NDVfeDJfcXVldWVfdXNlZChjb25zdCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSwgaW50IGkpCi17Ci0JcmV0dXJuIHEtPndyaXRlX3B0ciA+IHEtPnJlYWRfcHRyID8KLQkJKGkgPj0gcS0+cmVhZF9wdHIgJiYgaSA8IHEtPndyaXRlX3B0cikgOgotCQkhKGkgPCBxLT5yZWFkX3B0ciAmJiBpID49IHEtPndyaXRlX3B0cik7Ci19Ci0KLQotc3RhdGljIGlubGluZSB1OCBnZXRfY21kX2luZGV4KHN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxLCB1MzIgaW5kZXgsIGludCBpc19odWdlKQotewotCS8qIFRoaXMgaXMgZm9yIHNjYW4gY29tbWFuZCwgdGhlIGJpZyBidWZmZXIgYXQgZW5kIG9mIGNvbW1hbmQgYXJyYXkgKi8KLQlpZiAoaXNfaHVnZSkKLQkJcmV0dXJuIHEtPm5fd2luZG93OwkvKiBtdXN0IGJlIHBvd2VyIG9mIDIgKi8KLQotCS8qIE90aGVyd2lzZSwgdXNlIG5vcm1hbCBzaXplIGJ1ZmZlcnMgKi8KLQlyZXR1cm4gaW5kZXggJiAocS0+bl93aW5kb3cgLSAxKTsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3F1ZXVlX2luaXQgLSBJbml0aWFsaXplIHF1ZXVlJ3MgaGlnaC9sb3ctd2F0ZXIgYW5kIHJlYWQvd3JpdGUgaW5kZXhlcwotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcXVldWVfaW5pdChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSwKLQkJCSAgaW50IGNvdW50LCBpbnQgc2xvdHNfbnVtLCB1MzIgaWQpCi17Ci0JcS0+bl9iZCA9IGNvdW50OwotCXEtPm5fd2luZG93ID0gc2xvdHNfbnVtOwotCXEtPmlkID0gaWQ7Ci0KLQkvKiBjb3VudCBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UgaXdsX3F1ZXVlX2luY193cmFwCi0JICogYW5kIGl3bF9xdWV1ZV9kZWNfd3JhcCBhcmUgYnJva2VuLiAqLwotCUJVR19PTighaXNfcG93ZXJfb2ZfMihjb3VudCkpOwotCi0JLyogc2xvdHNfbnVtIG11c3QgYmUgcG93ZXItb2YtdHdvIHNpemUsIG90aGVyd2lzZQotCSAqIGdldF9jbWRfaW5kZXggaXMgYnJva2VuLiAqLwotCUJVR19PTighaXNfcG93ZXJfb2ZfMihzbG90c19udW0pKTsKLQotCXEtPmxvd19tYXJrID0gcS0+bl93aW5kb3cgLyA0OwotCWlmIChxLT5sb3dfbWFyayA8IDQpCi0JCXEtPmxvd19tYXJrID0gNDsKLQotCXEtPmhpZ2hfbWFyayA9IHEtPm5fd2luZG93IC8gODsKLQlpZiAocS0+aGlnaF9tYXJrIDwgMikKLQkJcS0+aGlnaF9tYXJrID0gMjsKLQotCXEtPndyaXRlX3B0ciA9IHEtPnJlYWRfcHRyID0gMDsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfdHhfcXVldWVfYWxsb2MgLSBBbGxvYyBkcml2ZXIgZGF0YSBhbmQgVEZEIENCIGZvciBvbmUgVHgvY21kIHF1ZXVlCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSwgdTMyIGlkKQotewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwotCi0JLyogRHJpdmVyIHByaXZhdGUgZGF0YSwgb25seSBmb3IgVHggKG5vdCBjb21tYW5kKSBxdWV1ZXMsCi0JICogbm90IHNoYXJlZCB3aXRoIGRldmljZS4gKi8KLQlpZiAoaWQgIT0gSVdMX0NNRF9RVUVVRV9OVU0pIHsKLQkJdHhxLT50eGIgPSBrbWFsbG9jKHNpemVvZih0eHEtPnR4YlswXSkgKgotCQkJCSAgIFRGRF9RVUVVRV9TSVpFX01BWCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdHhxLT50eGIpIHsKLQkJCUlXTF9FUlJPUigia21hbGxvYyBmb3IgYXV4aWxpYXJ5IEJEICIKLQkJCQkgICJzdHJ1Y3R1cmVzIGZhaWxlZFxuIik7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfSBlbHNlCi0JCXR4cS0+dHhiID0gTlVMTDsKLQotCS8qIENpcmN1bGFyIGJ1ZmZlciBvZiB0cmFuc21pdCBmcmFtZSBkZXNjcmlwdG9ycyAoVEZEcyksCi0JICogc2hhcmVkIHdpdGggZGV2aWNlICovCi0JdHhxLT5iZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwKLQkJCXNpemVvZih0eHEtPmJkWzBdKSAqIFRGRF9RVUVVRV9TSVpFX01BWCwKLQkJCSZ0eHEtPnEuZG1hX2FkZHIpOwotCi0JaWYgKCF0eHEtPmJkKSB7Ci0JCUlXTF9FUlJPUigicGNpX2FsbG9jX2NvbnNpc3RlbnQoJXpkKSBmYWlsZWRcbiIsCi0JCQkgIHNpemVvZih0eHEtPmJkWzBdKSAqIFRGRF9RVUVVRV9TSVpFX01BWCk7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCXR4cS0+cS5pZCA9IGlkOwotCi0JcmV0dXJuIDA7Ci0KLSBlcnJvcjoKLQlrZnJlZSh0eHEtPnR4Yik7Ci0JdHhxLT50eGIgPSBOVUxMOwotCi0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLS8qKgotICogaXdsMzk0NV90eF9xdWV1ZV9pbml0IC0gQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgb25lIHR4L2NtZCBxdWV1ZQotICovCi1pbnQgaXdsMzk0NV90eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCSAgICAgIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEsIGludCBzbG90c19udW0sIHUzMiB0eHFfaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7Ci0JaW50IGxlbjsKLQlpbnQgcmMgPSAwOwotCi0JLyoKLQkgKiBBbGxvYyBidWZmZXIgYXJyYXkgZm9yIGNvbW1hbmRzIChUeCBvciBvdGhlciB0eXBlcyBvZiBjb21tYW5kcykuCi0JICogRm9yIHRoZSBjb21tYW5kIHF1ZXVlICgjNCksIGFsbG9jYXRlIGNvbW1hbmQgc3BhY2UgKyBvbmUgYmlnCi0JICogY29tbWFuZCBmb3Igc2Nhbiwgc2luY2Ugc2NhbiBjb21tYW5kIGlzIHZlcnkgaHVnZTsgdGhlIHN5c3RlbSB3aWxsCi0JICogbm90IGhhdmUgdHdvIHNjYW5zIGF0IHRoZSBzYW1lIHRpbWUsIHNvIG9ubHkgb25lIGlzIG5lZWRlZC4KLQkgKiBGb3IgZGF0YSBUeCBxdWV1ZXMgKGFsbCBvdGhlciBxdWV1ZXMpLCBubyBzdXBlci1zaXplIGNvbW1hbmQKLQkgKiBzcGFjZSBpcyBuZWVkZWQuCi0JICovCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgKiBzbG90c19udW07Ci0JaWYgKHR4cV9pZCA9PSBJV0xfQ01EX1FVRVVFX05VTSkKLQkJbGVuICs9ICBJV0xfTUFYX1NDQU5fU0laRTsKLQl0eHEtPmNtZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwgbGVuLCAmdHhxLT5kbWFfYWRkcl9jbWQpOwotCWlmICghdHhxLT5jbWQpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogQWxsb2MgZHJpdmVyIGRhdGEgYXJyYXkgYW5kIFRGRCBjaXJjdWxhciBidWZmZXIgKi8KLQlyYyA9IGl3bDM5NDVfdHhfcXVldWVfYWxsb2MocHJpdiwgdHhxLCB0eHFfaWQpOwotCWlmIChyYykgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgbGVuLCB0eHEtPmNtZCwgdHhxLT5kbWFfYWRkcl9jbWQpOwotCi0JCXJldHVybiAtRU5PTUVNOwotCX0KLQl0eHEtPm5lZWRfdXBkYXRlID0gMDsKLQotCS8qIFRGRF9RVUVVRV9TSVpFX01BWCBtdXN0IGJlIHBvd2VyLW9mLXR3byBzaXplLCBvdGhlcndpc2UKLQkgKiBpd2xfcXVldWVfaW5jX3dyYXAgYW5kIGl3bF9xdWV1ZV9kZWNfd3JhcCBhcmUgYnJva2VuLiAqLwotCUJVSUxEX0JVR19PTihURkRfUVVFVUVfU0laRV9NQVggJiAoVEZEX1FVRVVFX1NJWkVfTUFYIC0gMSkpOwotCi0JLyogSW5pdGlhbGl6ZSBxdWV1ZSBoaWdoL2xvdy13YXRlciwgaGVhZC90YWlsIGluZGV4ZXMgKi8KLQlpd2wzOTQ1X3F1ZXVlX2luaXQocHJpdiwgJnR4cS0+cSwgVEZEX1FVRVVFX1NJWkVfTUFYLCBzbG90c19udW0sIHR4cV9pZCk7Ci0KLQkvKiBUZWxsIGRldmljZSB3aGVyZSB0byBmaW5kIHF1ZXVlLCBlbmFibGUgRE1BIGNoYW5uZWwuICovCi0JaXdsMzk0NV9od190eF9xdWV1ZV9pbml0KHByaXYsIHR4cSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3R4X3F1ZXVlX2ZyZWUgLSBEZWFsbG9jYXRlIERNQSBxdWV1ZS4KLSAqIEB0eHE6IFRyYW5zbWl0IHF1ZXVlIHRvIGRlYWxsb2NhdGUuCi0gKgotICogRW1wdHkgcXVldWUgYnkgcmVtb3ZpbmcgYW5kIGRlc3Ryb3lpbmcgYWxsIEJEJ3MuCi0gKiBGcmVlIGFsbCBidWZmZXJzLgotICogMC1maWxsLCBidXQgZG8gbm90IGZyZWUgInR4cSIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCi0gKi8KLXZvaWQgaXdsMzk0NV90eF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcXVldWUgKnEgPSAmdHhxLT5xOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OwotCWludCBsZW47Ci0KLQlpZiAocS0+bl9iZCA9PSAwKQotCQlyZXR1cm47Ci0KLQkvKiBmaXJzdCwgZW1wdHkgYWxsIEJEJ3MgKi8KLQlmb3IgKDsgcS0+d3JpdGVfcHRyICE9IHEtPnJlYWRfcHRyOwotCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKQotCQlpd2wzOTQ1X2h3X3R4cV9mcmVlX3RmZChwcml2LCB0eHEpOwotCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgKiBxLT5uX3dpbmRvdzsKLQlpZiAocS0+aWQgPT0gSVdMX0NNRF9RVUVVRV9OVU0pCi0JCWxlbiArPSBJV0xfTUFYX1NDQU5fU0laRTsKLQotCS8qIERlLWFsbG9jIGFycmF5IG9mIGNvbW1hbmQvdHggYnVmZmVycyAqLwotCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBsZW4sIHR4cS0+Y21kLCB0eHEtPmRtYV9hZGRyX2NtZCk7Ci0KLQkvKiBEZS1hbGxvYyBjaXJjdWxhciBidWZmZXIgb2YgVEZEcyAqLwotCWlmICh0eHEtPnEubl9iZCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90ZmRfZnJhbWUpICoKLQkJCQkgICAgdHhxLT5xLm5fYmQsIHR4cS0+YmQsIHR4cS0+cS5kbWFfYWRkcik7Ci0KLQkvKiBEZS1hbGxvYyBhcnJheSBvZiBwZXItVEZEIGRyaXZlciBkYXRhICovCi0Ja2ZyZWUodHhxLT50eGIpOwotCXR4cS0+dHhiID0gTlVMTDsKLQotCS8qIDAtZmlsbCBxdWV1ZSBkZXNjcmlwdG9yIHN0cnVjdHVyZSAqLwotCW1lbXNldCh0eHEsIDAsIHNpemVvZigqdHhxKSk7Ci19Ci0KLWNvbnN0IHU4IGl3bDM5NDVfYnJvYWRjYXN0X2FkZHJbRVRIX0FMRU5dID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07CisgLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBpd2xfbW9kX3BhcmFtcyBpd2wzOTQ1X21vZF9wYXJhbXMgPSB7CisJLm51bV9vZl9xdWV1ZXMgPSBJV0wzOV9NQVhfTlVNX1FVRVVFUywKKwkuc3dfY3J5cHRvID0gMSwKKwkucmVzdGFydF9mdyA9IDEsCisJLyogdGhlIHJlc3QgYXJlIDAgYnkgZGVmYXVsdCAqLworfTsKIAogLyoqKioqKioqKioqKioqKiBTVEFUSU9OIFRBQkxFIE1BTkFHRU1FTlQgKioqKgogICogbWFjODAyMTEgc2hvdWxkIGJlIGV4YW1pbmVkIHRvIGRldGVybWluZSBpZiBzdGFfaW5mbyBpcyBkdXBsaWNhdGluZwpAQCAtMzQ0LDcgKzEwNyw3IEBACiAgKgogICogTk9URTogIFRoaXMgZG9lcyBub3QgcmVtb3ZlIHN0YXRpb24gZnJvbSBkZXZpY2UncyBzdGF0aW9uIHRhYmxlLgogICovCi1zdGF0aWMgdTggaXdsMzk0NV9yZW1vdmVfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQorc3RhdGljIHU4IGl3bDM5NDVfcmVtb3ZlX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwKQogewogCWludCBpbmRleCA9IElXTF9JTlZBTElEX1NUQVRJT047CiAJaW50IGk7CkBAIC0zNTUsMTEgKzExOCwxMSBAQAogCWlmIChpc19hcCkKIAkJaW5kZXggPSBJV0xfQVBfSUQ7CiAJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoYWRkcikpCi0JCWluZGV4ID0gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCWluZGV4ID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAllbHNlCi0JCWZvciAoaSA9IElXTF9TVEFfSUQ7IGkgPCBwcml2LT5od19zZXR0aW5nLm1heF9zdGF0aW9uczsgaSsrKQotCQkJaWYgKHByaXYtPnN0YXRpb25zW2ldLnVzZWQgJiYKLQkJCSAgICAhY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zW2ldLnN0YS5zdGEuYWRkciwKKwkJZm9yIChpID0gSVdMX1NUQV9JRDsgaSA8IHByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnM7IGkrKykKKwkJCWlmIChwcml2LT5zdGF0aW9uc18zOVtpXS51c2VkICYmCisJCQkgICAgIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc18zOVtpXS5zdGEuc3RhLmFkZHIsCiAJCQkJCQlhZGRyKSkgewogCQkJCWluZGV4ID0gaTsKIAkJCQlicmVhazsKQEAgLTM2OCw4ICsxMzEsOCBAQAogCWlmICh1bmxpa2VseShpbmRleCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSkKIAkJZ290byBvdXQ7CiAKLQlpZiAocHJpdi0+c3RhdGlvbnNbaW5kZXhdLnVzZWQpIHsKLQkJcHJpdi0+c3RhdGlvbnNbaW5kZXhdLnVzZWQgPSAwOworCWlmIChwcml2LT5zdGF0aW9uc18zOVtpbmRleF0udXNlZCkgeworCQlwcml2LT5zdGF0aW9uc18zOVtpbmRleF0udXNlZCA9IDA7CiAJCXByaXYtPm51bV9zdGF0aW9ucy0tOwogCX0KIApAQCAtMzg2LDE0ICsxNDksMTQgQEAKICAqCiAgKiBOT1RFOiAgVGhpcyBkb2VzIG5vdCBjbGVhciBvciBvdGhlcndpc2UgYWx0ZXIgdGhlIGRldmljZSdzIHN0YXRpb24gdGFibGUuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAogCXByaXYtPm51bV9zdGF0aW9ucyA9IDA7Ci0JbWVtc2V0KHByaXYtPnN0YXRpb25zLCAwLCBzaXplb2YocHJpdi0+c3RhdGlvbnMpKTsKKwltZW1zZXQocHJpdi0+c3RhdGlvbnNfMzksIDAsIHNpemVvZihwcml2LT5zdGF0aW9uc18zOSkpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTQwMSw3ICsxNjQsNyBAQAogLyoqCiAgKiBpd2wzOTQ1X2FkZF9zdGF0aW9uIC0gQWRkIHN0YXRpb24gdG8gc3RhdGlvbiB0YWJsZXMgaW4gZHJpdmVyIGFuZCBkZXZpY2UKICAqLwotdTggaXdsMzk0NV9hZGRfc3RhdGlvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwLCB1OCBmbGFncykKK3U4IGl3bDM5NDVfYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgaW50IGlzX2FwLCB1OCBmbGFncykKIHsKIAlpbnQgaTsKIAlpbnQgaW5kZXggPSBJV0xfSU5WQUxJRF9TVEFUSU9OOwpAQCAtNDEzLDE2ICsxNzYsMTYgQEAKIAlpZiAoaXNfYXApCiAJCWluZGV4ID0gSVdMX0FQX0lEOwogCWVsc2UgaWYgKGlzX2Jyb2FkY2FzdF9ldGhlcl9hZGRyKGFkZHIpKQotCQlpbmRleCA9IHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlpbmRleCA9IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAJZWxzZQotCQlmb3IgKGkgPSBJV0xfU1RBX0lEOyBpIDwgcHJpdi0+aHdfc2V0dGluZy5tYXhfc3RhdGlvbnM7IGkrKykgewotCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhdGlvbnNbaV0uc3RhLnN0YS5hZGRyLAorCQlmb3IgKGkgPSBJV0xfU1RBX0lEOyBpIDwgcHJpdi0+aHdfcGFyYW1zLm1heF9zdGF0aW9uczsgaSsrKSB7CisJCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihwcml2LT5zdGF0aW9uc18zOVtpXS5zdGEuc3RhLmFkZHIsCiAJCQkJCQlhZGRyKSkgewogCQkJCWluZGV4ID0gaTsKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKCFwcml2LT5zdGF0aW9uc1tpXS51c2VkICYmCisJCQlpZiAoIXByaXYtPnN0YXRpb25zXzM5W2ldLnVzZWQgJiYKIAkJCSAgICBpbmRleCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKQogCQkJCWluZGV4ID0gaTsKIAkJfQpAQCAtNDM0LDE0ICsxOTcsMTQgQEAKIAkJcmV0dXJuIGluZGV4OwogCX0KIAotCWlmIChwcml2LT5zdGF0aW9uc1tpbmRleF0udXNlZCAmJgotCSAgICFjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhdGlvbnNbaW5kZXhdLnN0YS5zdGEuYWRkciwgYWRkcikpIHsKKwlpZiAocHJpdi0+c3RhdGlvbnNfMzlbaW5kZXhdLnVzZWQgJiYKKwkgICAhY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YXRpb25zXzM5W2luZGV4XS5zdGEuc3RhLmFkZHIsIGFkZHIpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9sb2NrLCBmbGFnc19zcGluKTsKIAkJcmV0dXJuIGluZGV4OwogCX0KIAotCUlXTF9ERUJVR19BU1NPQygiQWRkIFNUQSBJRCAlZDogJXBNXG4iLCBpbmRleCwgYWRkcik7Ci0Jc3RhdGlvbiA9ICZwcml2LT5zdGF0aW9uc1tpbmRleF07CisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJBZGQgU1RBIElEICVkOiAlcE1cbiIsIGluZGV4LCBhZGRyKTsKKwlzdGF0aW9uID0gJnByaXYtPnN0YXRpb25zXzM5W2luZGV4XTsKIAlzdGF0aW9uLT51c2VkID0gMTsKIAlwcml2LT5udW1fc3RhdGlvbnMrKzsKIApAQCAtNDYwLDUzMSArMjIzLDM1IEBACiAJLyogVHVybiBvbiBib3RoIGFudGVubmFzIGZvciB0aGUgc3RhdGlvbi4uLiAqLwogCXN0YXRpb24tPnN0YS5yYXRlX25fZmxhZ3MgPQogCQkJaXdsMzk0NV9od19zZXRfcmF0ZV9uX2ZsYWdzKHJhdGUsIFJBVEVfTUNTX0FOVF9BQl9NU0spOwotCXN0YXRpb24tPmN1cnJlbnRfcmF0ZS5yYXRlX25fZmxhZ3MgPQotCQkJbGUxNl90b19jcHUoc3RhdGlvbi0+c3RhLnJhdGVfbl9mbGFncyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3Nfc3Bpbik7CiAKIAkvKiBBZGQgc3RhdGlvbiB0byBkZXZpY2UncyBzdGF0aW9uIHRhYmxlICovCi0JaXdsMzk0NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZzdGF0aW9uLT5zdGEsIGZsYWdzKTsKKwlpd2xfc2VuZF9hZGRfc3RhKHByaXYsCisJCQkgKHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqKSZzdGF0aW9uLT5zdGEsIGZsYWdzKTsKIAlyZXR1cm4gaW5kZXg7CiAKIH0KIAotLyoqKioqKioqKioqKioqKiBEUklWRVIgU1RBVFVTIEZVTkNUSU9OUyAgICoqKioqLwotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX3JlYWR5KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JLyogVGhlIGFkYXB0ZXIgaXMgJ3JlYWR5JyBpZiBSRUFEWSBhbmQgR0VPX0NPTkZJR1VSRUQgYml0cyBhcmUKLQkgKiBzZXQgYnV0IEVYSVRfUEVORElORyBpcyBub3QgKi8KLQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKSAmJgotCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfR0VPX0NPTkZJR1VSRUQsICZwcml2LT5zdGF0dXMpICYmCi0JICAgICAgICF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19hbGl2ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfQUxJVkUsICZwcml2LT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gdGVzdF9iaXQoU1RBVFVTX0lOSVQsICZwcml2LT5zdGF0dXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpd2wzOTQ1X2lzX3Jma2lsbF9zdyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXJldHVybiB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfcmZraWxsX2h3KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JcmV0dXJuIHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaXdsMzk0NV9pc19yZmtpbGwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gaXdsMzk0NV9pc19yZmtpbGxfaHcocHJpdikgfHwKLQkJaXdsMzk0NV9pc19yZmtpbGxfc3cocHJpdik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfaXNfcmVhZHlfcmYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gaXdsMzk0NV9pc19yZWFkeShwcml2KTsKLX0KLQotLyoqKioqKioqKioqKioqKiBIT1NUIENPTU1BTkQgUVVFVUUgRlVOQ1RJT05TICAgKioqKiovCi0KLSNkZWZpbmUgSVdMX0NNRCh4KSBjYXNlIHg6IHJldHVybiAjeAotCi1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X2NtZF9zdHJpbmcodTggY21kKQotewotCXN3aXRjaCAoY21kKSB7Ci0JCUlXTF9DTUQoUkVQTFlfQUxJVkUpOwotCQlJV0xfQ01EKFJFUExZX0VSUk9SKTsKLQkJSVdMX0NNRChSRVBMWV9SWE9OKTsKLQkJSVdMX0NNRChSRVBMWV9SWE9OX0FTU09DKTsKLQkJSVdMX0NNRChSRVBMWV9RT1NfUEFSQU0pOwotCQlJV0xfQ01EKFJFUExZX1JYT05fVElNSU5HKTsKLQkJSVdMX0NNRChSRVBMWV9BRERfU1RBKTsKLQkJSVdMX0NNRChSRVBMWV9SRU1PVkVfU1RBKTsKLQkJSVdMX0NNRChSRVBMWV9SRU1PVkVfQUxMX1NUQSk7Ci0JCUlXTF9DTUQoUkVQTFlfMzk0NV9SWCk7Ci0JCUlXTF9DTUQoUkVQTFlfVFgpOwotCQlJV0xfQ01EKFJFUExZX1JBVEVfU0NBTEUpOwotCQlJV0xfQ01EKFJFUExZX0xFRFNfQ01EKTsKLQkJSVdMX0NNRChSRVBMWV9UWF9MSU5LX1FVQUxJVFlfQ01EKTsKLQkJSVdMX0NNRChSQURBUl9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFJFUExZX1FVSUVUX0NNRCk7Ci0JCUlXTF9DTUQoUkVQTFlfQ0hBTk5FTF9TV0lUQ0gpOwotCQlJV0xfQ01EKENIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfU1BFQ1RSVU1fTUVBU1VSRU1FTlRfQ01EKTsKLQkJSVdMX0NNRChTUEVDVFJVTV9NRUFTVVJFX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUE9XRVJfVEFCTEVfQ01EKTsKLQkJSVdMX0NNRChQTV9TTEVFUF9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFBNX0RFQlVHX1NUQVRJU1RJQ19OT1RJRklDKTsKLQkJSVdMX0NNRChSRVBMWV9TQ0FOX0NNRCk7Ci0JCUlXTF9DTUQoUkVQTFlfU0NBTl9BQk9SVF9DTUQpOwotCQlJV0xfQ01EKFNDQU5fU1RBUlRfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChTQ0FOX1JFU1VMVFNfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChTQ0FOX0NPTVBMRVRFX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoQkVBQ09OX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfVFhfQkVBQ09OKTsKLQkJSVdMX0NNRChXSE9fSVNfQVdBS0VfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChRVUlFVF9OT1RJRklDQVRJT04pOwotCQlJV0xfQ01EKFJFUExZX1RYX1BXUl9UQUJMRV9DTUQpOwotCQlJV0xfQ01EKE1FQVNVUkVfQUJPUlRfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChSRVBMWV9CVF9DT05GSUcpOwotCQlJV0xfQ01EKFJFUExZX1NUQVRJU1RJQ1NfQ01EKTsKLQkJSVdMX0NNRChTVEFUSVNUSUNTX05PVElGSUNBVElPTik7Ci0JCUlXTF9DTUQoUkVQTFlfQ0FSRF9TVEFURV9DTUQpOwotCQlJV0xfQ01EKENBUkRfU1RBVEVfTk9USUZJQ0FUSU9OKTsKLQkJSVdMX0NNRChNSVNTRURfQkVBQ09OU19OT1RJRklDQVRJT04pOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAiVU5LTk9XTiI7Ci0KLQl9Ci19Ci0KLSNkZWZpbmUgSE9TVF9DT01QTEVURV9USU1FT1VUIChIWiAvIDIpCi0KLS8qKgotICogaXdsMzk0NV9lbnF1ZXVlX2hjbWQgLSBlbnF1ZXVlIGEgdUNvZGUgY29tbWFuZAotICogQHByaXY6IGRldmljZSBwcml2YXRlIGRhdGEgcG9pbnQKLSAqIEBjbWQ6IGEgcG9pbnQgdG8gdGhlIHVjb2RlIGNvbW1hbmQgc3RydWN0dXJlCi0gKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgPCAwIHZhbHVlcyB0byBpbmRpY2F0ZSB0aGUgb3BlcmF0aW9uIGlzCi0gKiBmYWlsZWQuIE9uIHN1Y2Nlc3MsIGl0IHR1cm5zIHRoZSBpbmRleCAoPiAwKSBvZiBjb21tYW5kIGluIHRoZQotICogY29tbWFuZCBxdWV1ZS4KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2VucXVldWVfaGNtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCAqY21kKQotewotCXN0cnVjdCBpd2wzOTQ1X3R4X3F1ZXVlICp0eHEgPSAmcHJpdi0+dHhxW0lXTF9DTURfUVVFVUVfTlVNXTsKLQlzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0Jc3RydWN0IGl3bDM5NDVfdGZkX2ZyYW1lICp0ZmQ7Ci0JdTMyICpjb250cm9sX2ZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X2NtZCAqb3V0X2NtZDsKLQl1MzIgaWR4OwotCXUxNiBmaXhfc2l6ZSA9ICh1MTYpKGNtZC0+bGVuICsgc2l6ZW9mKG91dF9jbWQtPmhkcikpOwotCWRtYV9hZGRyX3QgcGh5c19hZGRyOwotCWludCBwYWQ7Ci0JdTE2IGNvdW50OwotCWludCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIElmIGFueSBvZiB0aGUgY29tbWFuZCBzdHJ1Y3R1cmVzIGVuZCB1cCBiZWluZyBsYXJnZXIgdGhhbgotCSAqIHRoZSBURkRfTUFYX1BBWUxPQURfU0laRSwgYW5kIGl0IHNlbnQgYXMgYSAnc21hbGwnIGNvbW1hbmQgdGhlbgotCSAqIHdlIHdpbGwgbmVlZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgVEZEIGVudHJpZXMgKi8KLQlCVUdfT04oKGZpeF9zaXplID4gVEZEX01BWF9QQVlMT0FEX1NJWkUpICYmCi0JICAgICAgICEoY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSkpOwotCi0KLQlpZiAoaXdsMzk0NV9pc19yZmtpbGwocHJpdikpIHsKLQkJSVdMX0RFQlVHX0lORk8oIk5vdCBzZW5kaW5nIGNvbW1hbmQgLSBSRiBLSUxMIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWlmIChpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpIDwgKChjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpID8gMiA6IDEpKSB7Ci0JCUlXTF9FUlJPUigiTm8gc3BhY2UgZm9yIFR4XG4iKTsKLQkJcmV0dXJuIC1FTk9TUEM7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwotCi0JdGZkID0gJnR4cS0+YmRbcS0+d3JpdGVfcHRyXTsKLQltZW1zZXQodGZkLCAwLCBzaXplb2YoKnRmZCkpOwotCi0JY29udHJvbF9mbGFncyA9ICh1MzIgKikgdGZkOwotCi0JaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIGNtZC0+bWV0YS5mbGFncyAmIENNRF9TSVpFX0hVR0UpOwotCW91dF9jbWQgPSAmdHhxLT5jbWRbaWR4XTsKLQotCW91dF9jbWQtPmhkci5jbWQgPSBjbWQtPmlkOwotCW1lbWNweSgmb3V0X2NtZC0+bWV0YSwgJmNtZC0+bWV0YSwgc2l6ZW9mKGNtZC0+bWV0YSkpOwotCW1lbWNweSgmb3V0X2NtZC0+Y21kLnBheWxvYWQsIGNtZC0+ZGF0YSwgY21kLT5sZW4pOwotCi0JLyogQXQgdGhpcyBwb2ludCwgdGhlIG91dF9jbWQgbm93IGhhcyBhbGwgb2YgdGhlIGluY29taW5nIGNtZAotCSAqIGluZm9ybWF0aW9uICovCi0KLQlvdXRfY21kLT5oZHIuZmxhZ3MgPSAwOwotCW91dF9jbWQtPmhkci5zZXF1ZW5jZSA9IGNwdV90b19sZTE2KFFVRVVFX1RPX1NFUShJV0xfQ01EX1FVRVVFX05VTSkgfAotCQkJSU5ERVhfVE9fU0VRKHEtPndyaXRlX3B0cikpOwotCWlmIChvdXRfY21kLT5tZXRhLmZsYWdzICYgQ01EX1NJWkVfSFVHRSkKLQkJb3V0X2NtZC0+aGRyLnNlcXVlbmNlIHw9IGNwdV90b19sZTE2KFNFUV9IVUdFX0ZSQU1FKTsKLQotCXBoeXNfYWRkciA9IHR4cS0+ZG1hX2FkZHJfY21kICsgc2l6ZW9mKHR4cS0+Y21kWzBdKSAqIGlkeCArCi0JCQlvZmZzZXRvZihzdHJ1Y3QgaXdsMzk0NV9jbWQsIGhkcik7Ci0JaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCBwaHlzX2FkZHIsIGZpeF9zaXplKTsKLQotCXBhZCA9IFUzMl9QQUQoY21kLT5sZW4pOwotCWNvdW50ID0gVEZEX0NUTF9DT1VOVF9HRVQoKmNvbnRyb2xfZmxhZ3MpOwotCSpjb250cm9sX2ZsYWdzID0gVEZEX0NUTF9DT1VOVF9TRVQoY291bnQpIHwgVEZEX0NUTF9QQURfU0VUKHBhZCk7Ci0KLQlJV0xfREVCVUdfSEMoIlNlbmRpbmcgY29tbWFuZCAlcyAoIyV4KSwgc2VxOiAweCUwNFgsICIKLQkJICAgICAiJWQgYnl0ZXMgYXQgJWRbJWRdOiVkXG4iLAotCQkgICAgIGdldF9jbWRfc3RyaW5nKG91dF9jbWQtPmhkci5jbWQpLAotCQkgICAgIG91dF9jbWQtPmhkci5jbWQsIGxlMTZfdG9fY3B1KG91dF9jbWQtPmhkci5zZXF1ZW5jZSksCi0JCSAgICAgZml4X3NpemUsIHEtPndyaXRlX3B0ciwgaWR4LCBJV0xfQ01EX1FVRVVFX05VTSk7Ci0KLQl0eHEtPm5lZWRfdXBkYXRlID0gMTsKLQotCS8qIEluY3JlbWVudCBhbmQgdXBkYXRlIHF1ZXVlJ3Mgd3JpdGUgaW5kZXggKi8KLQlxLT53cml0ZV9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKLQlyZXQgPSBpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQgPyByZXQgOiBpZHg7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCAqY21kKQotewotCWludCByZXQ7Ci0KLQlCVUdfT04oIShjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpKTsKLQotCS8qIEFuIGFzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgZXhwZWN0IGFuIFNLQiB0byBiZSBzZXQuICovCi0JQlVHX09OKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQik7Ci0KLQkvKiBBbiBhc3luY2hyb25vdXMgY29tbWFuZCBNVVNUIGhhdmUgYSBjYWxsYmFjay4gKi8KLQlCVUdfT04oIWNtZC0+bWV0YS51LmNhbGxiYWNrKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXJldCA9IGl3bDM5NDVfZW5xdWV1ZV9oY21kKHByaXYsIGNtZCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBpd2wzOTQ1X2VucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kICpjbWQpCi17Ci0JaW50IGNtZF9pZHg7Ci0JaW50IHJldDsKLQotCUJVR19PTihjbWQtPm1ldGEuZmxhZ3MgJiBDTURfQVNZTkMpOwotCi0JIC8qIEEgc3luY2hyb25vdXMgY29tbWFuZCBjYW4gbm90IGhhdmUgYSBjYWxsYmFjayBzZXQuICovCi0JQlVHX09OKGNtZC0+bWV0YS51LmNhbGxiYWNrICE9IE5VTEwpOwotCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkUsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2VuZGluZyAlczogQWxyZWFkeSBzZW5kaW5nIGEgaG9zdCBjb21tYW5kXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSk7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc2V0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOwotCi0JaWYgKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQikKLQkJY21kLT5tZXRhLnNvdXJjZSA9ICZjbWQtPm1ldGE7Ci0KLQljbWRfaWR4ID0gaXdsMzk0NV9lbnF1ZXVlX2hjbWQocHJpdiwgY21kKTsKLQlpZiAoY21kX2lkeCA8IDApIHsKLQkJcmV0ID0gY21kX2lkeDsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZW5kaW5nICVzOiBpd2wzOTQ1X2VucXVldWVfaGNtZCBmYWlsZWQ6ICVkXG4iLAotCQkJICBnZXRfY21kX3N0cmluZyhjbWQtPmlkKSwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLAotCQkJIXRlc3RfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyksCi0JCQlIT1NUX0NPTVBMRVRFX1RJTUVPVVQpOwotCWlmICghcmV0KSB7Ci0JCWlmICh0ZXN0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIHNlbmRpbmcgJXM6IHRpbWUgb3V0IGFmdGVyICVkbXMuXG4iLAotCQkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCksCi0JCQkJICBqaWZmaWVzX3RvX21zZWNzKEhPU1RfQ09NUExFVEVfVElNRU9VVCkpOwotCi0JCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKLQkJCXJldCA9IC1FVElNRURPVVQ7Ci0JCQlnb3RvIGNhbmNlbDsKLQkJfQotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNvbW1hbmQgJXMgYWJvcnRlZDogUkYgS0lMTCBTd2l0Y2hcbiIsCi0JCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwotCQlyZXQgPSAtRUNBTkNFTEVEOwotCQlnb3RvIGZhaWw7Ci0JfQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJDb21tYW5kICVzIGZhaWxlZDogRlcgRXJyb3JcbiIsCi0JCQkgICAgICAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGZhaWw7Ci0JfQotCWlmICgoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSAmJiAhY21kLT5tZXRhLnUuc2tiKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3I6IFJlc3BvbnNlIE5VTEwgaW4gJyVzJ1xuIiwKLQkJCSAgZ2V0X2NtZF9zdHJpbmcoY21kLT5pZCkpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGNhbmNlbDsKLQl9Ci0KLQlyZXQgPSAwOwotCWdvdG8gb3V0OwotCi1jYW5jZWw6Ci0JaWYgKGNtZC0+bWV0YS5mbGFncyAmIENNRF9XQU5UX1NLQikgewotCQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKnFjbWQ7Ci0KLQkJLyogQ2FuY2VsIHRoZSBDTURfV0FOVF9TS0IgZmxhZyBmb3IgdGhlIGNtZCBpbiB0aGUKLQkJICogVFggY21kIHF1ZXVlLiBPdGhlcndpc2UgaW4gY2FzZSB0aGUgY21kIGNvbWVzCi0JCSAqIGluIGxhdGVyLCBpdCB3aWxsIHBvc3NpYmx5IHNldCBhbiBpbnZhbGlkCi0JCSAqIGFkZHJlc3MgKGNtZC0+bWV0YS5zb3VyY2UpLiAqLwotCQlxY21kID0gJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0uY21kW2NtZF9pZHhdOwotCQlxY21kLT5tZXRhLmZsYWdzICY9IH5DTURfV0FOVF9TS0I7Ci0JfQotZmFpbDoKLQlpZiAoY21kLT5tZXRhLnUuc2tiKSB7Ci0JCWRldl9rZnJlZV9za2JfYW55KGNtZC0+bWV0YS51LnNrYik7Ci0JCWNtZC0+bWV0YS51LnNrYiA9IE5VTEw7Ci0JfQotb3V0OgotCWNsZWFyX2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGl3bDM5NDVfc2VuZF9jbWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgKmNtZCkKLXsKLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX0FTWU5DKQotCQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9hc3luYyhwcml2LCBjbWQpOwotCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWRfc3luYyhwcml2LCBjbWQpOwotfQotCi1pbnQgaXdsMzk0NV9zZW5kX2NtZF9wZHUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTggaWQsIHUxNiBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0gewotCQkuaWQgPSBpZCwKLQkJLmxlbiA9IGxlbiwKLQkJLmRhdGEgPSBkYXRhLAotCX07Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwotfQotCi1zdGF0aWMgaW50IF9fbXVzdF9jaGVjayBpd2wzOTQ1X3NlbmRfY21kX3UzMihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCBpZCwgdTMyIHZhbCkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7Ci0JCS5pZCA9IGlkLAotCQkubGVuID0gc2l6ZW9mKHZhbCksCi0JCS5kYXRhID0gJnZhbCwKLQl9OwotCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKLX0KLQotaW50IGl3bDM5NDVfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3Qoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZF91MzIocHJpdiwgUkVQTFlfU1RBVElTVElDU19DTUQsIDApOwotfQotCi0vKioKLSAqIGl3bDM5NDVfc2V0X3J4b25fY2hhbm5lbCAtIFNldCB0aGUgcGh5bW9kZSBhbmQgY2hhbm5lbCB2YWx1ZXMgaW4gc3RhZ2luZyBSWE9OCi0gKiBAYmFuZDogMi40IG9yIDUgR0h6IGJhbmQKLSAqIEBjaGFubmVsOiBBbnkgY2hhbm5lbCB2YWxpZCBmb3IgdGhlIHJlcXVlc3RlZCBiYW5kCi0KLSAqIEluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIHN0YWdpbmcgUlhPTiwgcHJpdi0+YmFuZCBpcyBhbHNvIHNldC4KLSAqCi0gKiBOT1RFOiAgRG9lcyBub3QgY29tbWl0IHRvIHRoZSBoYXJkd2FyZTsgaXQgc2V0cyBhcHByb3ByaWF0ZSBiaXQgZmllbGRzCi0gKiBpbiB0aGUgc3RhZ2luZyBSWE9OIGZsYWcgc3RydWN0dXJlIGJhc2VkIG9uIHRoZSBiYW5kCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZXRfcnhvbl9jaGFubmVsKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKLQkJCQkgICAgdTE2IGNoYW5uZWwpCi17Ci0JaWYgKCFpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgYmFuZCwgY2hhbm5lbCkpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkNvdWxkIG5vdCBzZXQgY2hhbm5lbCB0byAlZCBbJWRdXG4iLAotCQkJICAgICAgIGNoYW5uZWwsIGJhbmQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoKGxlMTZfdG9fY3B1KHByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsKSA9PSBjaGFubmVsKSAmJgotCSAgICAocHJpdi0+YmFuZCA9PSBiYW5kKSkKLQkJcmV0dXJuIDA7Ci0KLQlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW5uZWwpOwotCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfQkFORF8yNEdfTVNLOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX0JBTkRfMjRHX01TSzsKLQotCXByaXYtPmJhbmQgPSBiYW5kOwotCi0JSVdMX0RFQlVHX0lORk8oIlN0YWdpbmcgY2hhbm5lbCBzZXQgdG8gJWQgWyVkXVxuIiwgY2hhbm5lbCwgYmFuZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X2NoZWNrX3J4b25fY21kIC0gdmFsaWRhdGUgUlhPTiBzdHJ1Y3R1cmUgaXMgdmFsaWQKLSAqCi0gKiBOT1RFOiAgVGhpcyBpcyByZWFsbHkgb25seSB1c2VmdWwgZHVyaW5nIGRldmVsb3BtZW50IGFuZCBjYW4gZXZlbnR1YWxseQotICogYmUgI2lmZGVmJ2Qgb3V0IG9uY2UgdGhlIGRyaXZlciBpcyBzdGFibGUgYW5kIGZvbGtzIGFyZW4ndCBhY3RpdmVseQotICogbWFraW5nIGNoYW5nZXMKLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2NoZWNrX3J4b25fY21kKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uKQotewotCWludCBlcnJvciA9IDA7Ci0JaW50IGNvdW50ZXIgPSAxOwotCi0JaWYgKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSB7Ci0JCWVycm9yIHw9IGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzICYKLQkJCQkoUlhPTl9GTEdfVEdKX05BUlJPV19CQU5EX01TSyB8Ci0JCQkJIFJYT05fRkxHX1JBREFSX0RFVEVDVF9NU0spKTsKLQkJaWYgKGVycm9yKQotCQkJSVdMX1dBUk5JTkcoImNoZWNrIDI0RyBmaWVsZHMgJWQgfCAlZFxuIiwKLQkJCQkgICAgY291bnRlcisrLCBlcnJvcik7Ci0JfSBlbHNlIHsKLQkJZXJyb3IgfD0gKHJ4b24tPmZsYWdzICYgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spID8KLQkJCQkwIDogbGUzMl90b19jcHUoUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spOwotCQlpZiAoZXJyb3IpCi0JCQlJV0xfV0FSTklORygiY2hlY2sgNTIgZmllbGRzICVkIHwgJWRcbiIsCi0JCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCQllcnJvciB8PSBsZTMyX3RvX2NwdShyeG9uLT5mbGFncyAmIFJYT05fRkxHX0NDS19NU0spOwotCQlpZiAoZXJyb3IpCi0JCQlJV0xfV0FSTklORygiY2hlY2sgNTIgQ0NLICVkIHwgJWRcbiIsCi0JCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCX0KLQllcnJvciB8PSAocnhvbi0+bm9kZV9hZGRyWzBdIHwgcnhvbi0+YnNzaWRfYWRkclswXSkgJiAweDE7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgbWFjIGFkZHIgJWQgfCAlZFxuIiwgY291bnRlcisrLCBlcnJvcik7Ci0KLQkvKiBtYWtlIHN1cmUgYmFzaWMgcmF0ZXMgNk1icHMgYW5kIDFNYnBzIGFyZSBzdXBwb3J0ZWQgKi8KLQllcnJvciB8PSAoKChyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzICYgSVdMX1JBVEVfNk1fTUFTSykgPT0gMCkgJiYKLQkJICAoKHJ4b24tPmNja19iYXNpY19yYXRlcyAmIElXTF9SQVRFXzFNX01BU0spID09IDApKTsKLQlpZiAoZXJyb3IpCi0JCUlXTF9XQVJOSU5HKCJjaGVjayBiYXNpYyByYXRlICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JZXJyb3IgfD0gKGxlMTZfdG9fY3B1KHJ4b24tPmFzc29jX2lkKSA+IDIwMDcpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIGFzc29jIGlkICVkIHwgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfU0hPUlRfU0xPVF9NU0spKQotCQkJPT0gKFJYT05fRkxHX0NDS19NU0sgfCBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykpOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIENDSyBhbmQgc2hvcnQgc2xvdCAlZCB8ICVkXG4iLAotCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSkKLQkJCT09IChSWE9OX0ZMR19DQ0tfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLKSk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgQ0NLICYgYXV0byBkZXRlY3QgJWQgfCAlZFxuIiwKLQkJCSAgICBjb3VudGVyKyssIGVycm9yKTsKLQotCWVycm9yIHw9ICgocnhvbi0+ZmxhZ3MgJiAoUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLIHwKLQkJCVJYT05fRkxHX1RHR19QUk9URUNUX01TSykpID09IFJYT05fRkxHX1RHR19QUk9URUNUX01TSyk7Ci0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiY2hlY2sgVEdHIGFuZCBhdXRvIGRldGVjdCAlZCB8ICVkXG4iLAotCQkJICAgIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JaWYgKChyeG9uLT5mbGFncyAmIFJYT05fRkxHX0RJU19ESVZfTVNLKSkKLQkJZXJyb3IgfD0gKChyeG9uLT5mbGFncyAmIChSWE9OX0ZMR19BTlRfQl9NU0sgfAotCQkJCVJYT05fRkxHX0FOVF9BX01TSykpID09IDApOwotCWlmIChlcnJvcikKLQkJSVdMX1dBUk5JTkcoImNoZWNrIGFudGVubmEgJWQgJWRcbiIsIGNvdW50ZXIrKywgZXJyb3IpOwotCi0JaWYgKGVycm9yKQotCQlJV0xfV0FSTklORygiVHVuaW5nIHRvIGNoYW5uZWwgJWRcbiIsCi0JCQkgICAgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOwotCi0JaWYgKGVycm9yKSB7Ci0JCUlXTF9FUlJPUigiTm90IGEgdmFsaWQgaXdsMzk0NV9yeG9uX2Fzc29jX2NtZCBmaWVsZCB2YWx1ZXNcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGl3bDM5NDVfZnVsbF9yeG9uX3JlcXVpcmVkIC0gY2hlY2sgaWYgZnVsbCBSWE9OICh2cyBSWE9OX0FTU09DKSBjbWQgaXMgbmVlZGVkCi0gKiBAcHJpdjogc3RhZ2luZ19yeG9uIGlzIGNvbXBhcmVkIHRvIGFjdGl2ZV9yeG9uCi0gKgotICogSWYgdGhlIFJYT04gc3RydWN0dXJlIGlzIGNoYW5naW5nIGVub3VnaCB0byByZXF1aXJlIGEgbmV3IHR1bmUsCi0gKiBvciBpcyBjbGVhcmluZyB0aGUgUlhPTl9GSUxURVJfQVNTT0NfTVNLLCB0aGVuIHJldHVybiAxIHRvIGluZGljYXRlIHRoYXQKLSAqIGEgbmV3IHR1bmUgKGZ1bGwgUlhPTiBjb21tYW5kLCByYXRoZXIgdGhhbiBSWE9OX0FTU09DIGNtZCkgaXMgcmVxdWlyZWQuCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9mdWxsX3J4b25fcmVxdWlyZWQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQotCS8qIFRoZXNlIGl0ZW1zIGFyZSBvbmx5IHNldHRhYmxlIGZyb20gdGhlIGZ1bGwgUlhPTiBjb21tYW5kICovCi0JaWYgKCEoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB8fAotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhZ2luZ19yeG9uLmJzc2lkX2FkZHIsCi0JCQkgICAgICAgcHJpdi0+YWN0aXZlX3J4b24uYnNzaWRfYWRkcikgfHwKLQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsCi0JCQkgICAgICAgcHJpdi0+YWN0aXZlX3J4b24ubm9kZV9hZGRyKSB8fAotCSAgICBjb21wYXJlX2V0aGVyX2FkZHIocHJpdi0+c3RhZ2luZ19yeG9uLndsYXBfYnNzaWRfYWRkciwKLQkJCSAgICAgICBwcml2LT5hY3RpdmVfcnhvbi53bGFwX2Jzc2lkX2FkZHIpIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uZGV2X3R5cGUgIT0gcHJpdi0+YWN0aXZlX3J4b24uZGV2X3R5cGUpIHx8Ci0JICAgIChwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCAhPSBwcml2LT5hY3RpdmVfcnhvbi5jaGFubmVsKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmFpcl9wcm9wYWdhdGlvbiAhPQotCSAgICAgcHJpdi0+YWN0aXZlX3J4b24uYWlyX3Byb3BhZ2F0aW9uKSB8fAotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmFzc29jX2lkICE9IHByaXYtPmFjdGl2ZV9yeG9uLmFzc29jX2lkKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBmbGFncywgZmlsdGVyX2ZsYWdzLCBvZmRtX2Jhc2ljX3JhdGVzLCBhbmQgY2NrX2Jhc2ljX3JhdGVzIGNhbgotCSAqIGJlIHVwZGF0ZWQgd2l0aCB0aGUgUlhPTl9BU1NPQyBjb21tYW5kIC0tIGhvd2V2ZXIgb25seSBzb21lCi0JICogZmxhZyB0cmFuc2l0aW9ucyBhcmUgYWxsb3dlZCB1c2luZyBSWE9OX0FTU09DICovCi0KLQkvKiBDaGVjayBpZiB3ZSBhcmUgbm90IHN3aXRjaGluZyBiYW5kcyAqLwotCWlmICgocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKSAhPQotCSAgICAocHJpdi0+YWN0aXZlX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19CQU5EXzI0R19NU0spKQotCQlyZXR1cm4gMTsKLQotCS8qIENoZWNrIGlmIHdlIGFyZSBzd2l0Y2hpbmcgYXNzb2NpYXRpb24gdG9nZ2xlICovCi0JaWYgKChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSAhPQotCQkocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzICYgUlhPTl9GSUxURVJfQVNTT0NfTVNLKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfcnhvbl9hc3NvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMDsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlcyA9IE5VTEw7CiAJc3RydWN0IGl3bDM5NDVfcnhvbl9hc3NvY19jbWQgcnhvbl9hc3NvYzsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1JYT05fQVNTT0MsCiAJCS5sZW4gPSBzaXplb2Yocnhvbl9hc3NvYyksCiAJCS5tZXRhLmZsYWdzID0gQ01EX1dBTlRfU0tCLAogCQkuZGF0YSA9ICZyeG9uX2Fzc29jLAogCX07Ci0JY29uc3Qgc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgKnJ4b24xID0gJnByaXYtPnN0YWdpbmdfcnhvbjsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqcnhvbjIgPSAmcHJpdi0+YWN0aXZlX3J4b247CisJY29uc3Qgc3RydWN0IGl3bF9yeG9uX2NtZCAqcnhvbjEgPSAmcHJpdi0+c3RhZ2luZ19yeG9uOworCWNvbnN0IHN0cnVjdCBpd2xfcnhvbl9jbWQgKnJ4b24yID0gJnByaXYtPmFjdGl2ZV9yeG9uOwogCiAJaWYgKChyeG9uMS0+ZmxhZ3MgPT0gcnhvbjItPmZsYWdzKSAmJgogCSAgICAocnhvbjEtPmZpbHRlcl9mbGFncyA9PSByeG9uMi0+ZmlsdGVyX2ZsYWdzKSAmJgogCSAgICAocnhvbjEtPmNja19iYXNpY19yYXRlcyA9PSByeG9uMi0+Y2NrX2Jhc2ljX3JhdGVzKSAmJgogCSAgICAocnhvbjEtPm9mZG1fYmFzaWNfcmF0ZXMgPT0gcnhvbjItPm9mZG1fYmFzaWNfcmF0ZXMpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJVc2luZyBjdXJyZW50IFJYT05fQVNTT0MuICBOb3QgcmVzZW5kaW5nLlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTk0LDEzICsyNjEsMTMgQEAKIAlyeG9uX2Fzc29jLmNja19iYXNpY19yYXRlcyA9IHByaXYtPnN0YWdpbmdfcnhvbi5jY2tfYmFzaWNfcmF0ZXM7CiAJcnhvbl9hc3NvYy5yZXNlcnZlZCA9IDA7CiAKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOworCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWE9OX0FTU09DIGNvbW1hbmRcbiIpOworCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhPTl9BU1NPQyBjb21tYW5kXG4iKTsKIAkJcmMgPSAtRUlPOwogCX0KIApAQCAtMTAxMSw2ICsyNzgsNDMgQEAKIH0KIAogLyoqCisgKiBpd2wzOTQ1X2dldF9hbnRlbm5hX2ZsYWdzIC0gR2V0IGFudGVubmEgZmxhZ3MgZm9yIFJYT04gY29tbWFuZAorICogQHByaXY6IGVlcHJvbSBhbmQgYW50ZW5uYSBmaWVsZHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGFudGVubmEgZmxhZ3MKKyAqCisgKiBwcml2LT5lZXByb20zOSAgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYW50ZW5uYSBBVVgvTUFJTiBhcmUgcmV2ZXJzZWQKKyAqIGl3bDM5NDVfbW9kX3BhcmFtcy5hbnRlbm5hIHNwZWNpZmllcyB0aGUgYW50ZW5uYSBkaXZlcnNpdHkgbW9kZToKKyAqCisgKiBJV0xfQU5URU5OQV9ESVZFUlNJVFkgLSBOSUMgc2VsZWN0cyBiZXN0IGFudGVubmEgYnkgaXRzZWxmCisgKiBJV0xfQU5URU5OQV9NQUlOICAgICAgLSBGb3JjZSBNQUlOIGFudGVubmEKKyAqIElXTF9BTlRFTk5BX0FVWCAgICAgICAtIEZvcmNlIEFVWCBhbnRlbm5hCisgKi8KK19fbGUzMiBpd2wzOTQ1X2dldF9hbnRlbm5hX2ZsYWdzKGNvbnN0IHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CisKKwlzd2l0Y2ggKGl3bDM5NDVfbW9kX3BhcmFtcy5hbnRlbm5hKSB7CisJY2FzZSBJV0xfQU5URU5OQV9ESVZFUlNJVFk6CisJCXJldHVybiAwOworCisJY2FzZSBJV0xfQU5URU5OQV9NQUlOOgorCQlpZiAoZWVwcm9tLT5hbnRlbm5hX3N3aXRjaF90eXBlKQorCQkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0JfTVNLOworCQlyZXR1cm4gUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfQV9NU0s7CisKKwljYXNlIElXTF9BTlRFTk5BX0FVWDoKKwkJaWYgKGVlcHJvbS0+YW50ZW5uYV9zd2l0Y2hfdHlwZSkKKwkJCXJldHVybiBSWE9OX0ZMR19ESVNfRElWX01TSyB8IFJYT05fRkxHX0FOVF9BX01TSzsKKwkJcmV0dXJuIFJYT05fRkxHX0RJU19ESVZfTVNLIHwgUlhPTl9GTEdfQU5UX0JfTVNLOworCX0KKworCS8qIGJhZCBhbnRlbm5hIHNlbGVjdG9yIHZhbHVlICovCisJSVdMX0VSUihwcml2LCAiQmFkIGFudGVubmEgc2VsZWN0b3IgdmFsdWUgKDB4JXgpXG4iLAorCQlpd2wzOTQ1X21vZF9wYXJhbXMuYW50ZW5uYSk7CisKKwlyZXR1cm4gMDsJCS8qICJkaXZlcnNpdHkiIGlzIGRlZmF1bHQgaWYgZXJyb3IgKi8KK30KKworLyoqCiAgKiBpd2wzOTQ1X2NvbW1pdF9yeG9uIC0gY29tbWl0IHN0YWdpbmdfcnhvbiB0byBoYXJkd2FyZQogICoKICAqIFRoZSBSWE9OIGNvbW1hbmQgaW4gc3RhZ2luZ19yeG9uIGlzIGNvbW1pdHRlZCB0byB0aGUgaGFyZHdhcmUgYW5kCkBAIC0xMDE4LDQxICszMjIsNDQgQEAKICAqIGZ1bmN0aW9uIGNvcnJlY3RseSB0cmFuc2l0aW9ucyBvdXQgb2YgdGhlIFJYT05fQVNTT0NfTVNLIHN0YXRlIGlmCiAgKiBhIEhXIHR1bmUgaXMgcmVxdWlyZWQgYmFzZWQgb24gdGhlIFJYT04gc3RydWN0dXJlIGNoYW5nZXMuCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9jb21taXRfcnhvbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X2NvbW1pdF9yeG9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiBjYXN0IGF3YXkgdGhlIGNvbnN0IGZvciBhY3RpdmVfcnhvbiBpbiB0aGlzIGZ1bmN0aW9uICovCiAJc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgKmFjdGl2ZV9yeG9uID0gKHZvaWQgKikmcHJpdi0+YWN0aXZlX3J4b247CisJc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQgKnN0YWdpbmdfcnhvbiA9ICh2b2lkICopJnByaXYtPnN0YWdpbmdfcnhvbjsKIAlpbnQgcmMgPSAwOworCWJvb2wgbmV3X2Fzc29jID0KKwkJISEocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSyk7CiAKLQlpZiAoIWl3bDM5NDVfaXNfYWxpdmUocHJpdikpCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtMTsKIAogCS8qIGFsd2F5cyBnZXQgdGltZXN0YW1wIHdpdGggUnggZnJhbWUgKi8KLQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfVFNGMkhPU1RfTVNLOworCXN0YWdpbmdfcnhvbi0+ZmxhZ3MgfD0gUlhPTl9GTEdfVFNGMkhPU1RfTVNLOwogCiAJLyogc2VsZWN0IGFudGVubmEgKi8KLQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0KKwlzdGFnaW5nX3J4b24tPmZsYWdzICY9CiAJICAgIH4oUlhPTl9GTEdfRElTX0RJVl9NU0sgfCBSWE9OX0ZMR19BTlRfU0VMX01TSyk7Ci0JcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MocHJpdik7CisJc3RhZ2luZ19yeG9uLT5mbGFncyB8PSBpd2wzOTQ1X2dldF9hbnRlbm5hX2ZsYWdzKHByaXYpOwogCi0JcmMgPSBpd2wzOTQ1X2NoZWNrX3J4b25fY21kKCZwcml2LT5zdGFnaW5nX3J4b24pOworCXJjID0gaXdsX2NoZWNrX3J4b25fY21kKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfRVJST1IoIkludmFsaWQgUlhPTiBjb25maWd1cmF0aW9uLiAgTm90IGNvbW1pdHRpbmcuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBSWE9OIGNvbmZpZ3VyYXRpb24uICBOb3QgY29tbWl0dGluZy5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBJZiB3ZSBkb24ndCBuZWVkIHRvIHNlbmQgYSBmdWxsIFJYT04sIHdlIGNhbiB1c2UKIAkgKiBpd2wzOTQ1X3J4b25fYXNzb2NfY21kIHdoaWNoIGlzIHVzZWQgdG8gcmVjb25maWd1cmUgZmlsdGVyCiAJICogYW5kIG90aGVyIGZsYWdzIGZvciB0aGUgY3VycmVudCByYWRpbyBjb25maWd1cmF0aW9uLiAqLwotCWlmICghaXdsMzk0NV9mdWxsX3J4b25fcmVxdWlyZWQocHJpdikpIHsKKwlpZiAoIWl3bF9mdWxsX3J4b25fcmVxdWlyZWQocHJpdikpIHsKIAkJcmMgPSBpd2wzOTQ1X3NlbmRfcnhvbl9hc3NvYyhwcml2KTsKIAkJaWYgKHJjKSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgUlhPTl9BU1NPQyAiCisJCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIFJYT05fQVNTT0MgIgogCQkJCSAgImNvbmZpZ3VyYXRpb24gKCVkKS5cbiIsIHJjKTsKIAkJCXJldHVybiByYzsKIAkJfQogCi0JCW1lbWNweShhY3RpdmVfcnhvbiwgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKCphY3RpdmVfcnhvbikpOworCQltZW1jcHkoYWN0aXZlX3J4b24sIHN0YWdpbmdfcnhvbiwgc2l6ZW9mKCphY3RpdmVfcnhvbikpOwogCiAJCXJldHVybiAwOwogCX0KQEAgLTEwNjEsMTIgKzM2OCwxNyBAQAogCSAqIGFuIFJYT05fQVNTT0MgYW5kIHRoZSBuZXcgY29uZmlnIHdhbnRzIHRoZSBhc3NvY2lhdGVkIG1hc2sgZW5hYmxlZCwKIAkgKiB3ZSBtdXN0IGNsZWFyIHRoZSBhc3NvY2lhdGVkIGZyb20gdGhlIGFjdGl2ZSBjb25maWd1cmF0aW9uCiAJICogYmVmb3JlIHdlIGFwcGx5IHRoZSBuZXcgY29uZmlnICovCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSAmJgotCSAgICAocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0FTU09DX01TSykpIHsKLQkJSVdMX0RFQlVHX0lORk8oIlRvZ2dsaW5nIGFzc29jaWF0ZWQgYml0IG9uIGN1cnJlbnQgUlhPTlxuIik7CisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpICYmIG5ld19hc3NvYykgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiVG9nZ2xpbmcgYXNzb2NpYXRlZCBiaXQgb24gY3VycmVudCBSWE9OXG4iKTsKIAkJYWN0aXZlX3J4b24tPmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCi0JCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTiwKKwkJLyoKKwkJICogcmVzZXJ2ZWQ0IGFuZCA1IGNvdWxkIGhhdmUgYmVlbiBmaWxsZWQgYnkgdGhlIGl3bGNvcmUgY29kZS4KKwkJICogTGV0J3MgY2xlYXIgdGhlbSBiZWZvcmUgcHVzaGluZyB0byB0aGUgMzk0NS4KKwkJICovCisJCWFjdGl2ZV9yeG9uLT5yZXNlcnZlZDQgPSAwOworCQlhY3RpdmVfcnhvbi0+cmVzZXJ2ZWQ1ID0gMDsKKwkJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCiAJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kKSwKIAkJCQkgICAgICAmcHJpdi0+YWN0aXZlX3J4b24pOwogCkBAIC0xMDc0LDI5MCArMzg2LDIxMyBAQAogCQkgKiBhY3RpdmVfcnhvbiBiYWNrIHRvIHdoYXQgaXQgd2FzIHByZXZpb3VzbHkgKi8KIAkJaWYgKHJjKSB7CiAJCQlhY3RpdmVfcnhvbi0+ZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKLQkJCUlXTF9FUlJPUigiRXJyb3IgY2xlYXJpbmcgQVNTT0NfTVNLIG9uIGN1cnJlbnQgIgorCQkJSVdMX0VSUihwcml2LCAiRXJyb3IgY2xlYXJpbmcgQVNTT0NfTVNLIG9uIGN1cnJlbnQgIgogCQkJCSAgImNvbmZpZ3VyYXRpb24gKCVkKS5cbiIsIHJjKTsKIAkJCXJldHVybiByYzsKIAkJfQogCX0KIAotCUlXTF9ERUJVR19JTkZPKCJTZW5kaW5nIFJYT05cbiIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiU2VuZGluZyBSWE9OXG4iCiAJCSAgICAgICAiKiB3aXRoJXMgUlhPTl9GSUxURVJfQVNTT0NfTVNLXG4iCiAJCSAgICAgICAiKiBjaGFubmVsID0gJWRcbiIKIAkJICAgICAgICIqIGJzc2lkID0gJXBNXG4iLAotCQkgICAgICAgKChwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICYKLQkJCSBSWE9OX0ZJTFRFUl9BU1NPQ19NU0spID8gIiIgOiAib3V0IiksCi0JCSAgICAgICBsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCksCi0JCSAgICAgICBwcml2LT5zdGFnaW5nX3J4b24uYnNzaWRfYWRkcik7CisJCSAgICAgICAobmV3X2Fzc29jID8gIiIgOiAib3V0IiksCisJCSAgICAgICBsZTE2X3RvX2NwdShzdGFnaW5nX3J4b24tPmNoYW5uZWwpLAorCQkgICAgICAgc3RhZ2luZ19yeG9uLT5ic3NpZF9hZGRyKTsKKworCS8qCisJICogcmVzZXJ2ZWQ0IGFuZCA1IGNvdWxkIGhhdmUgYmVlbiBmaWxsZWQgYnkgdGhlIGl3bGNvcmUgY29kZS4KKwkgKiBMZXQncyBjbGVhciB0aGVtIGJlZm9yZSBwdXNoaW5nIHRvIHRoZSAzOTQ1LgorCSAqLworCXN0YWdpbmdfcnhvbi0+cmVzZXJ2ZWQ0ID0gMDsKKwlzdGFnaW5nX3J4b24tPnJlc2VydmVkNSA9IDA7CisKKwlpd2xfc2V0X3J4b25faHdjcnlwdG8ocHJpdiwgIXByaXYtPmh3X3BhcmFtcy5zd19jcnlwdG8pOwogCiAJLyogQXBwbHkgdGhlIG5ldyBjb25maWd1cmF0aW9uICovCi0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OLAotCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3J4b25fY21kKSwgJnByaXYtPnN0YWdpbmdfcnhvbik7CisJcmMgPSBpd2xfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT04sCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpLAorCQkJICAgICAgc3RhZ2luZ19yeG9uKTsKIAlpZiAocmMpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBzZXR0aW5nIG5ldyBjb25maWd1cmF0aW9uICglZCkuXG4iLCByYyk7CisJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNldHRpbmcgbmV3IGNvbmZpZ3VyYXRpb24gKCVkKS5cbiIsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KIAotCW1lbWNweShhY3RpdmVfcnhvbiwgJnByaXYtPnN0YWdpbmdfcnhvbiwgc2l6ZW9mKCphY3RpdmVfcnhvbikpOworCW1lbWNweShhY3RpdmVfcnhvbiwgc3RhZ2luZ19yeG9uLCBzaXplb2YoKmFjdGl2ZV9yeG9uKSk7CiAKIAlpd2wzOTQ1X2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwogCiAJLyogSWYgd2UgaXNzdWUgYSBuZXcgUlhPTiBjb21tYW5kIHdoaWNoIHJlcXVpcmVkIGEgdHVuZSB0aGVuIHdlIG11c3QKIAkgKiBzZW5kIGEgbmV3IFRYUE9XRVIgY29tbWFuZCBvciB3ZSB3b24ndCBiZSBhYmxlIHRvIFR4IGFueSBmcmFtZXMgKi8KLQlyYyA9IGl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihwcml2KTsKKwlyYyA9IHByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIocHJpdik7CiAJaWYgKHJjKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3Igc2V0dGluZyBUeCBwb3dlciAoJWQpLlxuIiwgcmMpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIFR4IHBvd2VyICglZCkuXG4iLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAKIAkvKiBBZGQgdGhlIGJyb2FkY2FzdCBhZGRyZXNzIHNvIHdlIGNhbiBzZW5kIGJyb2FkY2FzdCBmcmFtZXMgKi8KLQlpZiAoaXdsMzk0NV9hZGRfc3RhdGlvbihwcml2LCBpd2wzOTQ1X2Jyb2FkY2FzdF9hZGRyLCAwLCAwKSA9PQorCWlmIChpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIGl3bF9iY2FzdF9hZGRyLCAwLCAwKSA9PQogCSAgICBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9FUlJPUigiRXJyb3IgYWRkaW5nIEJST0FEQ0FTVCBhZGRyZXNzIGZvciB0cmFuc21pdC5cbiIpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBhZGRpbmcgQlJPQURDQVNUIGFkZHJlc3MgZm9yIHRyYW5zbWl0LlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIElmIHdlIGhhdmUgc2V0IHRoZSBBU1NPQ19NU0sgYW5kIHdlIGFyZSBpbiBCU1MgbW9kZSB0aGVuCiAJICogYWRkIHRoZSBJV0xfQVBfSUQgdG8gdGhlIHN0YXRpb24gcmF0ZSB0YWJsZSAqLwotCWlmIChpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikgJiYKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgJiYKIAkgICAgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCi0JCWlmIChpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIsIDEsIDApCisJCWlmIChpd2wzOTQ1X2FkZF9zdGF0aW9uKHByaXYsIHByaXYtPmFjdGl2ZV9yeG9uLmJzc2lkX2FkZHIsCisJCQkJCTEsIDApCiAJCSAgICA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCQlJV0xfRVJST1IoIkVycm9yIGFkZGluZyBBUCBhZGRyZXNzIGZvciB0cmFuc21pdC5cbiIpOworCQkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWRkaW5nIEFQIGFkZHJlc3MgZm9yIHRyYW5zbWl0XG4iKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CiAKIAkvKiBJbml0IHRoZSBoYXJkd2FyZSdzIHJhdGUgZmFsbGJhY2sgb3JkZXIgYmFzZWQgb24gdGhlIGJhbmQgKi8KIAlyYyA9IGl3bDM5NDVfaW5pdF9od19yYXRlX3RhYmxlKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfRVJST1IoIkVycm9yIHNldHRpbmcgSFcgcmF0ZSB0YWJsZTogJTAyWFxuIiwgcmMpOworCQlJV0xfRVJSKHByaXYsICJFcnJvciBzZXR0aW5nIEhXIHJhdGUgdGFibGU6ICUwMlhcbiIsIHJjKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX2J0X2NvbmZpZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCXN0cnVjdCBpd2wzOTQ1X2J0X2NtZCBidF9jbWQgPSB7Ci0JCS5mbGFncyA9IDMsCi0JCS5sZWFkX3RpbWUgPSAweEFBLAotCQkubWF4X2tpbGwgPSAxLAotCQkua2lsbF9hY2tfbWFzayA9IDAsCi0JCS5raWxsX2N0c19tYXNrID0gMCwKLQl9OwotCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX0JUX0NPTkZJRywKLQkJCQlzaXplb2Yoc3RydWN0IGl3bDM5NDVfYnRfY21kKSwgJmJ0X2NtZCk7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZW5kX3NjYW5fYWJvcnQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcmVzOwotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfU0NBTl9BQk9SVF9DTUQsCi0JCS5tZXRhLmZsYWdzID0gQ01EX1dBTlRfU0tCLAotCX07Ci0KLQkvKiBJZiB0aGVyZSBpc24ndCBhIHNjYW4gYWN0aXZlbHkgZ29pbmcgb24gaW4gdGhlIGhhcmR3YXJlCi0JICogdGhlbiB3ZSBhcmUgaW4gYmV0d2VlbiBzY2FuIGJhbmRzIGFuZCBub3QgYWN0dWFsbHkKLQkgKiBhY3RpdmVseSBzY2FubmluZywgc28gZG9uJ3Qgc2VuZCB0aGUgYWJvcnQgY29tbWFuZCAqLwotCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cyk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwotCWlmIChyYykgewotCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwotCWlmIChyZXMtPnUuc3RhdHVzICE9IENBTl9BQk9SVF9TVEFUVVMpIHsKLQkJLyogVGhlIHNjYW4gYWJvcnQgd2lsbCByZXR1cm4gMSBmb3Igc3VjY2VzcyBvcgotCQkgKiAyIGZvciAiZmFpbHVyZSIuICBBIGZhaWx1cmUgY29uZGl0aW9uIGNhbiBiZQotCQkgKiBkdWUgdG8gc2ltcGx5IG5vdCBiZWluZyBpbiBhbiBhY3RpdmUgc2NhbiB3aGljaAotCQkgKiBjYW4gb2NjdXIgaWYgd2Ugc2VuZCB0aGUgc2NhbiBhYm9ydCBiZWZvcmUgd2UKLQkJICogdGhlIG1pY3JvY29kZSBoYXMgbm90aWZpZWQgdXMgdGhhdCBhIHNjYW4gaXMKLQkJICogY29tcGxldGVkLiAqLwotCQlJV0xfREVCVUdfSU5GTygiU0NBTl9BQk9SVCByZXR1cm5lZCAlZC5cbiIsIHJlcy0+dS5zdGF0dXMpOwotCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwotCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fSFcsICZwcml2LT5zdGF0dXMpOwotCX0KLQotCWRldl9rZnJlZV9za2JfYW55KGNtZC5tZXRhLnUuc2tiKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X2NhcmRfc3RhdGVfc3luY19jYWxsYmFjayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQlzdHJ1Y3QgaXdsMzk0NV9jbWQgKmNtZCwKLQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIENBUkRfU1RBVEVfQ01ECi0gKgotICogVXNlOiBTZXRzIHRoZSBkZXZpY2UncyBpbnRlcm5hbCBjYXJkIHN0YXRlIHRvIGVuYWJsZSwgZGlzYWJsZSwgb3IgaGFsdAotICoKLSAqIFdoZW4gaW4gdGhlICdlbmFibGUnIHN0YXRlIHRoZSBjYXJkIG9wZXJhdGVzIGFzIG5vcm1hbC4KLSAqIFdoZW4gaW4gdGhlICdkaXNhYmxlJyBzdGF0ZSwgdGhlIGNhcmQgZW50ZXJzIGludG8gYSBsb3cgcG93ZXIgbW9kZS4KLSAqIFdoZW4gaW4gdGhlICdoYWx0JyBzdGF0ZSwgdGhlIGNhcmQgaXMgc2h1dCBkb3duIGFuZCBtdXN0IGJlIGZ1bGx5Ci0gKiByZXN0YXJ0ZWQgdG8gY29tZSBiYWNrIG9uLgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfc2VuZF9jYXJkX3N0YXRlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHUzMiBmbGFncywgdTggbWV0YV9mbGFnKQotewotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfQ0FSRF9TVEFURV9DTUQsCi0JCS5sZW4gPSBzaXplb2YodTMyKSwKLQkJLmRhdGEgPSAmZmxhZ3MsCi0JCS5tZXRhLmZsYWdzID0gbWV0YV9mbGFnLAotCX07Ci0KLQlpZiAobWV0YV9mbGFnICYgQ01EX0FTWU5DKQotCQljbWQubWV0YS51LmNhbGxiYWNrID0gaXdsMzk0NV9jYXJkX3N0YXRlX3N5bmNfY2FsbGJhY2s7Ci0KLQlyZXR1cm4gaXdsMzk0NV9zZW5kX2NtZChwcml2LCAmY21kKTsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X2FkZF9zdGFfc3luY19jYWxsYmFjayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpyZXMgPSBOVUxMOwotCi0JaWYgKCFza2IpIHsKLQkJSVdMX0VSUk9SKCJFcnJvcjogUmVzcG9uc2UgTlVMTCBpbiBSRVBMWV9BRERfU1RBLlxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCXJlcyA9IChzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKilza2ItPmRhdGE7Ci0JaWYgKHJlcy0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlJPUigiQmFkIHJldHVybiBmcm9tIFJFUExZX0FERF9TVEEgKDB4JTA4WClcbiIsCi0JCQkgIHJlcy0+aGRyLmZsYWdzKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0Jc3dpdGNoIChyZXMtPnUuYWRkX3N0YS5zdGF0dXMpIHsKLQljYXNlIEFERF9TVEFfU1VDQ0VTU19NU0s6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCS8qIFdlIGRpZG4ndCBjYWNoZSB0aGUgU0tCOyBsZXQgdGhlIGNhbGxlciBmcmVlIGl0ICovCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBpd2wzOTQ1X3NlbmRfYWRkX3N0YXRpb24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCSBzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kICpzdGEsIHU4IGZsYWdzKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcmVzID0gTlVMTDsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfQUREX1NUQSwKLQkJLmxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9hZGRzdGFfY21kKSwKLQkJLm1ldGEuZmxhZ3MgPSBmbGFncywKLQkJLmRhdGEgPSBzdGEsCi0JfTsKLQotCWlmIChmbGFncyAmIENNRF9BU1lOQykKLQkJY21kLm1ldGEudS5jYWxsYmFjayA9IGl3bDM5NDVfYWRkX3N0YV9zeW5jX2NhbGxiYWNrOwotCWVsc2UKLQkJY21kLm1ldGEuZmxhZ3MgfD0gQ01EX1dBTlRfU0tCOwotCi0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kKHByaXYsICZjbWQpOwotCi0JaWYgKHJjIHx8IChmbGFncyAmIENNRF9BU1lOQykpCi0JCXJldHVybiByYzsKLQotCXJlcyA9IChzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKiljbWQubWV0YS51LnNrYi0+ZGF0YTsKLQlpZiAocmVzLT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKLQkJSVdMX0VSUk9SKCJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKLQkJCSAgcmVzLT5oZHIuZmxhZ3MpOwotCQlyYyA9IC1FSU87Ci0JfQotCi0JaWYgKHJjID09IDApIHsKLQkJc3dpdGNoIChyZXMtPnUuYWRkX3N0YS5zdGF0dXMpIHsKLQkJY2FzZSBBRERfU1RBX1NVQ0NFU1NfTVNLOgotCQkJSVdMX0RFQlVHX0lORk8oIlJFUExZX0FERF9TVEEgUEFTU0VEXG4iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmMgPSAtRUlPOwotCQkJSVdMX1dBUk5JTkcoIlJFUExZX0FERF9TVEEgZmFpbGVkXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcHJpdi0+YWxsb2NfcnhiX3NrYi0tOwotCWRldl9rZnJlZV9za2JfYW55KGNtZC5tZXRhLnUuc2tiKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3VwZGF0ZV9zdGFfa2V5X2luZm8oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXRfY2NtcF9keW5hbWljX2tleV9pbmZvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAogCQkJCSAgIHU4IHN0YV9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCV9fbGUxNiBrZXlfZmxhZ3MgPSAwOworCWludCByZXQ7CiAKLQlzd2l0Y2ggKGtleWNvbmYtPmFsZykgewotCWNhc2UgQUxHX0NDTVA6Ci0JCWtleV9mbGFncyB8PSBTVEFfS0VZX0ZMR19DQ01QOwotCQlrZXlfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoCi0JCQkJa2V5Y29uZi0+a2V5aWR4IDw8IFNUQV9LRVlfRkxHX0tFWUlEX1BPUyk7Ci0JCWtleV9mbGFncyAmPSB+U1RBX0tFWV9GTEdfSU5WQUxJRDsKLQkJYnJlYWs7Ci0JY2FzZSBBTEdfVEtJUDoKLQljYXNlIEFMR19XRVA6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWtleV9mbGFncyB8PSAoU1RBX0tFWV9GTEdfQ0NNUCB8IFNUQV9LRVlfRkxHX01BUF9LRVlfTVNLKTsKKwlrZXlfZmxhZ3MgfD0gY3B1X3RvX2xlMTYoa2V5Y29uZi0+a2V5aWR4IDw8IFNUQV9LRVlfRkxHX0tFWUlEX1BPUyk7CisKKwlpZiAoc3RhX2lkID09IHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQpCisJCWtleV9mbGFncyB8PSBTVEFfS0VZX01VTFRJQ0FTVF9NU0s7CisKKwlrZXljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7CisJa2V5Y29uZi0+aHdfa2V5X2lkeCA9IGtleWNvbmYtPmtleWlkeDsKKwlrZXlfZmxhZ3MgJj0gflNUQV9LRVlfRkxHX0lOVkFMSUQ7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8uYWxnID0ga2V5Y29uZi0+YWxnOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5rZXlsZW4gPSBrZXljb25mLT5rZXlsZW47Ci0JbWVtY3B5KHByaXYtPnN0YXRpb25zW3N0YV9pZF0ua2V5aW5mby5rZXksIGtleWNvbmYtPmtleSwKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLmtleWluZm8uYWxnID0ga2V5Y29uZi0+YWxnOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mby5rZXlsZW4gPSBrZXljb25mLT5rZXlsZW47CisJbWVtY3B5KHByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0ua2V5aW5mby5rZXksIGtleWNvbmYtPmtleSwKIAkgICAgICAga2V5Y29uZi0+a2V5bGVuKTsKIAotCW1lbWNweShwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5LCBrZXljb25mLT5rZXksCisJbWVtY3B5KHByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLmtleS5rZXksIGtleWNvbmYtPmtleSwKIAkgICAgICAga2V5Y29uZi0+a2V5bGVuKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0ga2V5X2ZsYWdzOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CisKKwlpZiAoKHByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLmtleS5rZXlfZmxhZ3MgJiBTVEFfS0VZX0ZMR19FTkNSWVBUX01TSykKKwkJCT09IFNUQV9LRVlfRkxHX05PX0VOQykKKwkJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPQorCQkJCSBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHByaXYpOworCS8qIGVsc2UsIHdlIGFyZSBvdmVycmlkaW5nIGFuIGV4aXN0aW5nIGtleSA9PiBubyBuZWVkIHRvIGFsbG9jYXRlZCByb29tCisJKiBpbiB1Q29kZS4gKi8KKworCVdBUk4ocHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LmtleV9vZmZzZXQgPT0gV0VQX0lOVkFMSURfT0ZGU0VULAorCQkibm8gc3BhY2UgZm9yIGEgbmV3IGtleSIpOworCisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEua2V5LmtleV9mbGFncyA9IGtleV9mbGFnczsKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5zdGEubW9kaWZ5X21hc2sgPSBTVEFfTU9ESUZZX0tFWV9NQVNLOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLm1vZGUgPSBTVEFfQ09OVFJPTF9NT0RJRllfTVNLOworCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImh3Y3J5cHRvOiBtb2RpZnkgdWNvZGUgc3RhdGlvbiBrZXkgaW5mb1xuIik7CisKKwlyZXQgPSBpd2xfc2VuZF9hZGRfc3RhKHByaXYsCisJCShzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKikmcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEsIENNRF9BU1lOQyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbG9jaywgZmxhZ3MpOwogCi0JSVdMX0RFQlVHX0lORk8oImh3Y3J5cHRvOiBtb2RpZnkgdWNvZGUgc3RhdGlvbiBrZXkgaW5mb1xuIik7Ci0JaXdsMzk0NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgMCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X2NsZWFyX3N0YV9rZXlfaW5mbyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1OCBzdGFfaWQpCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X3RraXBfZHluYW1pY19rZXlfaW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAorCQkJCSAgdTggc3RhX2lkKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X3NldF93ZXBfZHluYW1pY19rZXlfaW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXljb25mLAorCQkJCSAgdTggc3RhX2lkKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X2NsZWFyX3N0YV9rZXlfaW5mbyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHN0YV9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9sb2NrLCBmbGFncyk7Ci0JbWVtc2V0KCZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLmtleWluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9od19rZXkpKTsKLQltZW1zZXQoJnByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLmtleSwgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2tleWluZm8pKTsKLQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0gU1RBX0tFWV9GTEdfTk9fRU5DOwotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7Ci0JcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CisJbWVtc2V0KCZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLmtleWluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9od19rZXkpKTsKKwltZW1zZXQoJnByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLmtleSwgMCwKKwkJc2l6ZW9mKHN0cnVjdCBpd2w0OTY1X2tleWluZm8pKTsKKwlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnN0YS5rZXkua2V5X2ZsYWdzID0gU1RBX0tFWV9GTEdfTk9fRU5DOworCXByaXYtPnN0YXRpb25zXzM5W3N0YV9pZF0uc3RhLnN0YS5tb2RpZnlfbWFzayA9IFNUQV9NT0RJRllfS0VZX01BU0s7CisJcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEubW9kZSA9IFNUQV9DT05UUk9MX01PRElGWV9NU0s7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAotCUlXTF9ERUJVR19JTkZPKCJod2NyeXB0bzogY2xlYXIgdWNvZGUgc3RhdGlvbiBrZXkgaW5mb1xuIik7Ci0JaXdsMzk0NV9zZW5kX2FkZF9zdGF0aW9uKHByaXYsICZwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnN0YSwgMCk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImh3Y3J5cHRvOiBjbGVhciB1Y29kZSBzdGF0aW9uIGtleSBpbmZvXG4iKTsKKwlpd2xfc2VuZF9hZGRfc3RhKHByaXYsCisJCShzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKikmcHJpdi0+c3RhdGlvbnNfMzlbc3RhX2lkXS5zdGEsIDApOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2NsZWFyX2ZyZWVfZnJhbWVzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X2R5bmFtaWNfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsIHU4IHN0YV9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWtleWNvbmYtPmh3X2tleV9pZHggPSBIV19LRVlfRFlOQU1JQzsKKworCXN3aXRjaCAoa2V5Y29uZi0+YWxnKSB7CisJY2FzZSBBTEdfQ0NNUDoKKwkJcmV0ID0gaXdsMzk0NV9zZXRfY2NtcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleWNvbmYsIHN0YV9pZCk7CisJCWJyZWFrOworCWNhc2UgQUxHX1RLSVA6CisJCXJldCA9IGl3bDM5NDVfc2V0X3RraXBfZHluYW1pY19rZXlfaW5mbyhwcml2LCBrZXljb25mLCBzdGFfaWQpOworCQlicmVhazsKKwljYXNlIEFMR19XRVA6CisJCXJldCA9IGl3bDM5NDVfc2V0X3dlcF9keW5hbWljX2tleV9pbmZvKHByaXYsIGtleWNvbmYsIHN0YV9pZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUlXTF9FUlIocHJpdiwgIlVua25vd24gYWxnOiAlcyBhbGcgPSAlZFxuIiwgX19mdW5jX18sIGtleWNvbmYtPmFsZyk7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJSVdMX0RFQlVHX1dFUChwcml2LCAiU2V0IGR5bmFtaWMga2V5OiBhbGc9ICVkIGxlbj0lZCBpZHg9JWQgc3RhPSVkIHJldD0lZFxuIiwKKwkJICAgICAga2V5Y29uZi0+YWxnLCBrZXljb25mLT5rZXlsZW4sIGtleWNvbmYtPmtleWlkeCwKKwkJICAgICAgc3RhX2lkLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpd2wzOTQ1X3JlbW92ZV9zdGF0aWNfa2V5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgcmV0ID0gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X3N0YXRpY19rZXkoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKK3sKKwlpZiAoa2V5LT5hbGcgPT0gQUxHX1dFUCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJSVdMX0VSUihwcml2LCAiU3RhdGljIGtleSBpbnZhbGlkOiBhbGcgJWRcbiIsIGtleS0+YWxnKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHZvaWQgaXdsMzk0NV9jbGVhcl9mcmVlX2ZyYW1lcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKIAotCUlXTF9ERUJVR19JTkZPKCIlZCBmcmFtZXMgb24gcHJlLWFsbG9jYXRlZCBoZWFwIG9uIGNsZWFyLlxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiJWQgZnJhbWVzIG9uIHByZS1hbGxvY2F0ZWQgaGVhcCBvbiBjbGVhci5cbiIsCiAJCSAgICAgICBwcml2LT5mcmFtZXNfY291bnQpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZwcml2LT5mcmVlX2ZyYW1lcykpIHsKQEAgLTEzNjgsMjAgKzYwMywyMCBAQAogCX0KIAogCWlmIChwcml2LT5mcmFtZXNfY291bnQpIHsKLQkJSVdMX1dBUk5JTkcoIiVkIGZyYW1lcyBzdGlsbCBpbiB1c2UuICBEaWQgd2UgbG9zZSBvbmU/XG4iLAorCQlJV0xfV0FSTihwcml2LCAiJWQgZnJhbWVzIHN0aWxsIGluIHVzZS4gIERpZCB3ZSBsb3NlIG9uZT9cbiIsCiAJCQkgICAgcHJpdi0+ZnJhbWVzX2NvdW50KTsKIAkJcHJpdi0+ZnJhbWVzX2NvdW50ID0gMDsKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqaXdsMzk0NV9nZXRfZnJlZV9mcmFtZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICppd2wzOTQ1X2dldF9mcmVlX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsMzk0NV9mcmFtZSAqZnJhbWU7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKIAlpZiAobGlzdF9lbXB0eSgmcHJpdi0+ZnJlZV9mcmFtZXMpKSB7CiAJCWZyYW1lID0ga3phbGxvYyhzaXplb2YoKmZyYW1lKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZnJhbWUpIHsKLQkJCUlXTF9FUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIGZyYW1lIVxuIik7CisJCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgYWxsb2NhdGUgZnJhbWUhXG4iKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKQEAgLTEzOTQsMTggKzYyOSwxOCBAQAogCXJldHVybiBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lLCBsaXN0KTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9mcmVlX2ZyYW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZSkKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZnJlZV9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X2ZyYW1lICpmcmFtZSkKIHsKIAltZW1zZXQoZnJhbWUsIDAsIHNpemVvZigqZnJhbWUpKTsKIAlsaXN0X2FkZCgmZnJhbWUtPmxpc3QsICZwcml2LT5mcmVlX2ZyYW1lcyk7CiB9CiAKLXVuc2lnbmVkIGludCBpd2wzOTQ1X2ZpbGxfYmVhY29uX2ZyYW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCit1bnNpZ25lZCBpbnQgaXdsMzk0NV9maWxsX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKIAkJCQlpbnQgbGVmdCkKIHsKIAotCWlmICghaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpIHx8ICFwcml2LT5pYnNzX2JlYWNvbiB8fAorCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikgfHwgIXByaXYtPmlic3NfYmVhY29uIHx8CiAJICAgICgocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKIAkgICAgIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQKSkpCiAJCXJldHVybiAwOwpAQCAtMTQxOCwzMSArNjUzLDcgQEAKIAlyZXR1cm4gcHJpdi0+aWJzc19iZWFjb24tPmxlbjsKIH0KIAotc3RhdGljIHU4IGl3bDM5NDVfcmF0ZV9nZXRfbG93ZXN0X3BsY3Aoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQl1OCBpOwotCWludCByYXRlX21hc2s7Ci0KLQkvKiBTZXQgcmF0ZSBtYXNrKi8KLQlpZiAocHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKQotCQlyYXRlX21hc2sgPSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9DQ0tfUkFURVNfTUFTSzsKLQllbHNlCi0JCXJhdGVfbWFzayA9IHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYgSVdMX09GRE1fUkFURVNfTUFTSzsKLQotCWZvciAoaSA9IElXTF9SQVRFXzFNX0lOREVYOyBpICE9IElXTF9SQVRFX0lOVkFMSUQ7Ci0JICAgICBpID0gaXdsMzk0NV9yYXRlc1tpXS5uZXh0X2llZWUpIHsKLQkJaWYgKHJhdGVfbWFzayAmICgxIDw8IGkpKQotCQkJcmV0dXJuIGl3bDM5NDVfcmF0ZXNbaV0ucGxjcDsKLQl9Ci0KLQkvKiBObyB2YWxpZCByYXRlIHdhcyBmb3VuZC4gQXNzaWduIHRoZSBsb3dlc3Qgb25lICovCi0JaWYgKHByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmIFJYT05fRkxHX0JBTkRfMjRHX01TSykKLQkJcmV0dXJuIElXTF9SQVRFXzFNX1BMQ1A7Ci0JZWxzZQotCQlyZXR1cm4gSVdMX1JBVEVfNk1fUExDUDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfYmVhY29uX2NtZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bDM5NDVfZnJhbWUgKmZyYW1lOwogCXVuc2lnbmVkIGludCBmcmFtZV9zaXplOwpAQCAtMTQ1MiwxNiArNjYzLDE2IEBACiAJZnJhbWUgPSBpd2wzOTQ1X2dldF9mcmVlX2ZyYW1lKHByaXYpOwogCiAJaWYgKCFmcmFtZSkgewotCQlJV0xfRVJST1IoIkNvdWxkIG5vdCBvYnRhaW4gZnJlZSBmcmFtZSBidWZmZXIgZm9yIGJlYWNvbiAiCisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBvYnRhaW4gZnJlZSBmcmFtZSBidWZmZXIgZm9yIGJlYWNvbiAiCiAJCQkgICJjb21tYW5kLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXJhdGUgPSBpd2wzOTQ1X3JhdGVfZ2V0X2xvd2VzdF9wbGNwKHByaXYpOworCXJhdGUgPSBpd2xfcmF0ZV9nZXRfbG93ZXN0X3BsY3AocHJpdik7CiAKIAlmcmFtZV9zaXplID0gaXdsMzk0NV9od19nZXRfYmVhY29uX2NtZChwcml2LCBmcmFtZSwgcmF0ZSk7CiAKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1RYX0JFQUNPTiwgZnJhbWVfc2l6ZSwKKwlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfVFhfQkVBQ09OLCBmcmFtZV9zaXplLAogCQkJICAgICAgJmZyYW1lLT51LmNtZFswXSk7CiAKIAlpd2wzOTQ1X2ZyZWVfZnJhbWUocHJpdiwgZnJhbWUpOwpAQCAtMTQ2OSw1NjYgKzY4MCwxNyBAQAogCXJldHVybiByYzsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIEVFUFJPTSByZWxhdGVkIGZ1bmN0aW9ucwotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGdldF9lZXByb21fbWFjKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHU4ICptYWMpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3Vuc2V0X2h3X3BhcmFtcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JbWVtY3B5KG1hYywgcHJpdi0+ZWVwcm9tLm1hY19hZGRyZXNzLCA2KTsKLX0KLQotLyoKLSAqIENsZWFyIHRoZSBPV05FUl9NU0ssIHRvIGVzdGFibGlzaCBkcml2ZXIgKGluc3RlYWQgb2YgdUNvZGUgcnVubmluZyBvbgotICogZW1iZWRkZWQgY29udHJvbGxlcikgYXMgRUVQUk9NIHJlYWRlcjsgZWFjaCByZWFkIGlzIGEgc2VyaWVzIG9mIHB1bHNlcwotICogdG8vZnJvbSB0aGUgRUVQUk9NIGNoaXAsIG5vdCBhIHNpbmdsZSBldmVudCwgc28gZXZlbiByZWFkcyBjb3VsZCBjb25mbGljdAotICogaWYgdGhleSB3ZXJlbid0IGFyYml0cmF0ZWQgYnkgc29tZSBvd25lcnNoaXAgbWVjaGFuaXNtLiAgSGVyZSwgdGhlIGRyaXZlcgotICogc2ltcGx5IGNsYWltcyBvd25lcnNoaXAsIHdoaWNoIHNob3VsZCBiZSBzYWZlIHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKLSAqIChpLmUuIGJlZm9yZSBsb2FkaW5nIHVDb2RlISkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGl3bDM5NDVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JX2l3bDM5NDVfY2xlYXJfYml0KHByaXYsIENTUl9FRVBST01fR1AsIENTUl9FRVBST01fR1BfSUZfT1dORVJfTVNLKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X2VlcHJvbV9pbml0IC0gcmVhZCBFRVBST00gY29udGVudHMKLSAqCi0gKiBMb2FkIHRoZSBFRVBST00gY29udGVudHMgZnJvbSBhZGFwdGVyIGludG8gcHJpdi0+ZWVwcm9tCi0gKgotICogTk9URTogIFRoaXMgcm91dGluZSB1c2VzIHRoZSBub24tZGVidWcgSU8gYWNjZXNzIGZ1bmN0aW9ucy4KLSAqLwotaW50IGl3bDM5NDVfZWVwcm9tX2luaXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQl1MTYgKmUgPSAodTE2ICopJnByaXYtPmVlcHJvbTsKLQl1MzIgZ3AgPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfRUVQUk9NX0dQKTsKLQlpbnQgc3ogPSBzaXplb2YocHJpdi0+ZWVwcm9tKTsKLQlpbnQgcmV0OwotCXUxNiBhZGRyOwotCi0JLyogVGhlIEVFUFJPTSBzdHJ1Y3R1cmUgaGFzIHNldmVyYWwgcGFkZGluZyBidWZmZXJzIHdpdGhpbiBpdAotCSAqIGFuZCB3aGVuIGFkZGluZyBuZXcgRUVQUk9NIG1hcHMgaXMgc3ViamVjdCB0byBwcm9ncmFtbWVyIGVycm9ycwotCSAqIHdoaWNoIG1heSBiZSB2ZXJ5IGRpZmZpY3VsdCB0byBpZGVudGlmeSB3aXRob3V0IGV4cGxpY2l0bHkKLQkgKiBjaGVja2luZyB0aGUgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGVlcHJvbSBtYXAuICovCi0JQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5lZXByb20pICE9IElXTF9FRVBST01fSU1BR0VfU0laRSk7Ci0KLQlpZiAoKGdwICYgQ1NSX0VFUFJPTV9HUF9WQUxJRF9NU0spID09IENTUl9FRVBST01fR1BfQkFEX1NJR05BVFVSRSkgewotCQlJV0xfRVJST1IoIkVFUFJPTSBub3QgZm91bmQsIEVFUFJPTV9HUD0weCUwOHhcbiIsIGdwKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JLyogTWFrZSBzdXJlIGRyaXZlciAoaW5zdGVhZCBvZiB1Q29kZSkgaXMgYWxsb3dlZCB0byByZWFkIEVFUFJPTSAqLwotCXJldCA9IGl3bDM5NDVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlKHByaXYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCUlXTF9FUlJPUigiRmFpbGVkIHRvIGFjcXVpcmUgRUVQUk9NIHNlbWFwaG9yZS5cbiIpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0KLQkvKiBlZXByb20gaXMgYW4gYXJyYXkgb2YgMTZiaXQgdmFsdWVzICovCi0JZm9yIChhZGRyID0gMDsgYWRkciA8IHN6OyBhZGRyICs9IHNpemVvZih1MTYpKSB7Ci0JCXUzMiByOwotCi0JCV9pd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0VFUFJPTV9SRUcsCi0JCQkJIENTUl9FRVBST01fUkVHX01TS19BRERSICYgKGFkZHIgPDwgMSkpOwotCQlfaXdsMzk0NV9jbGVhcl9iaXQocHJpdiwgQ1NSX0VFUFJPTV9SRUcsIENTUl9FRVBST01fUkVHX0JJVF9DTUQpOwotCQlyZXQgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfRUVQUk9NX1JFRywKLQkJCQkJICAgICAgQ1NSX0VFUFJPTV9SRUdfUkVBRF9WQUxJRF9NU0ssCi0JCQkJCSAgICAgIElXTF9FRVBST01fQUNDRVNTX1RJTUVPVVQpOwotCQlpZiAocmV0IDwgMCkgewotCQkJSVdMX0VSUk9SKCJUaW1lIG91dCByZWFkaW5nIEVFUFJPTVslZF1cbiIsIGFkZHIpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCi0JCXIgPSBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIENTUl9FRVBST01fUkVHKTsKLQkJZVthZGRyIC8gMl0gPSBsZTE2X3RvX2NwdSgoX19mb3JjZSBfX2xlMTYpKHIgPj4gMTYpKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV91bnNldF9od19zZXR0aW5nKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JaWYgKHByaXYtPmh3X3NldHRpbmcuc2hhcmVkX3ZpcnQpCisJaWYgKHByaXYtPnNoYXJlZF92aXJ0KQogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsCiAJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9zaGFyZWQpLAotCQkJCSAgICBwcml2LT5od19zZXR0aW5nLnNoYXJlZF92aXJ0LAotCQkJCSAgICBwcml2LT5od19zZXR0aW5nLnNoYXJlZF9waHlzKTsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3N1cHBvcnRlZF9yYXRlX3RvX2llIC0gZmlsbCBpbiB0aGUgc3VwcG9ydGVkIHJhdGUgaW4gSUUgZmllbGQKLSAqCi0gKiByZXR1cm4gOiBzZXQgdGhlIGJpdCBmb3IgZWFjaCBzdXBwb3J0ZWQgcmF0ZSBpbnNlcnQgaW4gaWUKLSAqLwotc3RhdGljIHUxNiBpd2wzOTQ1X3N1cHBvcnRlZF9yYXRlX3RvX2llKHU4ICppZSwgdTE2IHN1cHBvcnRlZF9yYXRlLAotCQkJCSAgICB1MTYgYmFzaWNfcmF0ZSwgaW50ICpsZWZ0KQotewotCXUxNiByZXRfcmF0ZXMgPSAwLCBiaXQ7Ci0JaW50IGk7Ci0JdTggKmNudCA9IGllOwotCXU4ICpyYXRlcyA9IGllICsgMTsKLQotCWZvciAoYml0ID0gMSwgaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVDsgaSsrLCBiaXQgPDw9IDEpIHsKLQkJaWYgKGJpdCAmIHN1cHBvcnRlZF9yYXRlKSB7Ci0JCQlyZXRfcmF0ZXMgfD0gYml0OwotCQkJcmF0ZXNbKmNudF0gPSBpd2wzOTQ1X3JhdGVzW2ldLmllZWUgfAotCQkJCSgoYml0ICYgYmFzaWNfcmF0ZSkgPyAweDgwIDogMHgwMCk7Ci0JCQkoKmNudCkrKzsKLQkJCSgqbGVmdCktLTsKLQkJCWlmICgoKmxlZnQgPD0gMCkgfHwKLQkJCSAgICAoKmNudCA+PSBJV0xfU1VQUE9SVEVEX1JBVEVTX0lFX0xFTikpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0X3JhdGVzOwotfQotCi0vKioKLSAqIGl3bDM5NDVfZmlsbF9wcm9iZV9yZXEgLSBmaWxsIGluIGFsbCByZXF1aXJlZCBmaWVsZHMgYW5kIElFIGZvciBwcm9iZSByZXF1ZXN0Ci0gKi8KLXN0YXRpYyB1MTYgaXdsMzk0NV9maWxsX3Byb2JlX3JlcShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKLQkJCSAgICAgIGludCBsZWZ0KQotewotCWludCBsZW4gPSAwOwotCXU4ICpwb3MgPSBOVUxMOwotCXUxNiBhY3RpdmVfcmF0ZXMsIHJldF9yYXRlcywgY2NrX3JhdGVzOwotCi0JLyogTWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgdGhlIHByb2JlIHJlcXVlc3QsCi0JICogdHdvIG1hbmRhdG9yeSBJRXMgYW5kIHRoZSBkYXRhICovCi0JbGVmdCAtPSAyNDsKLQlpZiAobGVmdCA8IDApCi0JCXJldHVybiAwOwotCWxlbiArPSAyNDsKLQotCWZyYW1lLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7Ci0JbWVtY3B5KGZyYW1lLT5kYSwgaXdsMzk0NV9icm9hZGNhc3RfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShmcmFtZS0+c2EsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KGZyYW1lLT5ic3NpZCwgaXdsMzk0NV9icm9hZGNhc3RfYWRkciwgRVRIX0FMRU4pOwotCWZyYW1lLT5zZXFfY3RybCA9IDA7Ci0KLQkvKiBmaWxsIGluIG91ciBpbmRpcmVjdCBTU0lEIElFICovCi0JLyogLi4ubmV4dCBJRS4uLiAqLwotCi0JbGVmdCAtPSAyOwotCWlmIChsZWZ0IDwgMCkKLQkJcmV0dXJuIDA7Ci0JbGVuICs9IDI7Ci0JcG9zID0gJihmcmFtZS0+dS5wcm9iZV9yZXEudmFyaWFibGVbMF0pOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gMDsKLQotCS8qIGZpbGwgaW4gc3VwcG9ydGVkIHJhdGUgKi8KLQkvKiAuLi5uZXh0IElFLi4uICovCi0JbGVmdCAtPSAyOwotCWlmIChsZWZ0IDwgMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiAuLi4gZmlsbCBpdCBpbi4uLiAqLwotCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7Ci0JKnBvcyA9IDA7Ci0KLQlwcml2LT5hY3RpdmVfcmF0ZSA9IHByaXYtPnJhdGVzX21hc2s7Ci0JYWN0aXZlX3JhdGVzID0gcHJpdi0+YWN0aXZlX3JhdGU7Ci0JcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgPSBwcml2LT5yYXRlc19tYXNrICYgSVdMX0JBU0lDX1JBVEVTX01BU0s7Ci0KLQljY2tfcmF0ZXMgPSBJV0xfQ0NLX1JBVEVTX01BU0sgJiBhY3RpdmVfcmF0ZXM7Ci0JcmV0X3JhdGVzID0gaXdsMzk0NV9zdXBwb3J0ZWRfcmF0ZV90b19pZShwb3MsIGNja19yYXRlcywKLQkJCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljLCAmbGVmdCk7Ci0JYWN0aXZlX3JhdGVzICY9IH5yZXRfcmF0ZXM7Ci0KLQlyZXRfcmF0ZXMgPSBpd2wzOTQ1X3N1cHBvcnRlZF9yYXRlX3RvX2llKHBvcywgYWN0aXZlX3JhdGVzLAotCQkJCSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYywgJmxlZnQpOwotCWFjdGl2ZV9yYXRlcyAmPSB+cmV0X3JhdGVzOwotCi0JbGVuICs9IDIgKyAqcG9zOwotCXBvcyArPSAoKnBvcykgKyAxOwotCWlmIChhY3RpdmVfcmF0ZXMgPT0gMCkKLQkJZ290byBmaWxsX2VuZDsKLQotCS8qIGZpbGwgaW4gc3VwcG9ydGVkIGV4dGVuZGVkIHJhdGUgKi8KLQkvKiAuLi5uZXh0IElFLi4uICovCi0JbGVmdCAtPSAyOwotCWlmIChsZWZ0IDwgMCkKLQkJcmV0dXJuIDA7Ci0JLyogLi4uIGZpbGwgaXQgaW4uLi4gKi8KLQkqcG9zKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQkqcG9zID0gMDsKLQlpd2wzOTQ1X3N1cHBvcnRlZF9yYXRlX3RvX2llKHBvcywgYWN0aXZlX3JhdGVzLAotCQkJCSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYywgJmxlZnQpOwotCWlmICgqcG9zID4gMCkKLQkJbGVuICs9IDIgKyAqcG9zOwotCi0gZmlsbF9lbmQ6Ci0JcmV0dXJuICh1MTYpbGVuOwotfQotCi0vKgotICogUW9TICBzdXBwb3J0Ci0qLwotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfcW9zX3BhcmFtc19jb21tYW5kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgICAgIHN0cnVjdCBpd2wzOTQ1X3Fvc3BhcmFtX2NtZCAqcW9zKQotewotCi0JcmV0dXJuIGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1FPU19QQVJBTSwKLQkJCQlzaXplb2Yoc3RydWN0IGl3bDM5NDVfcW9zcGFyYW1fY21kKSwgcW9zKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yZXNldF9xb3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQl1MTYgY3dfbWluID0gMTU7Ci0JdTE2IGN3X21heCA9IDEwMjM7Ci0JdTggYWlmcyA9IDI7Ci0JdTggaXNfbGVnYWN5ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMDsKLQotCS8qIFFvUyBhbHdheXMgYWN0aXZlIGluIEFQIGFuZCBBREhPQyBtb2RlCi0JICogSW4gU1RBIG1vZGUgd2FpdCBmb3IgYXNzb2NpYXRpb24KLQkgKi8KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAotCSAgICBwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMTsKLQllbHNlCi0JCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAwOwotCi0KLQkvKiBjaGVjayBmb3IgbGVnYWN5IG1vZGUgKi8KLQlpZiAoKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKLQkgICAgIChwcml2LT5hY3RpdmVfcmF0ZSAmIElXTF9PRkRNX1JBVEVTX01BU0spID09IDApIHx8Ci0JICAgIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgIChwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJiBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSykgPT0gMCkpIHsKLQkJY3dfbWluID0gMzE7Ci0JCWlzX2xlZ2FjeSA9IDE7Ci0JfQotCi0JaWYgKHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpCi0JCWFpZnMgPSAzOwotCi0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLmN3X21pbiA9IGNwdV90b19sZTE2KGN3X21pbik7Ci0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLmN3X21heCA9IGNwdV90b19sZTE2KGN3X21heCk7Ci0JcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjWzBdLmFpZnNuID0gYWlmczsKLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbMF0uZWRjYV90eG9wID0gMDsKLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbMF0ucmVzZXJ2ZWQxID0gMDsKLQotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlKSB7Ci0JCWkgPSAxOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWluID0gY3B1X3RvX2xlMTYoY3dfbWluKTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21heCA9IGNwdV90b19sZTE2KGN3X21heCk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5haWZzbiA9IDc7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPSAwOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0ucmVzZXJ2ZWQxID0gMDsKLQotCQlpID0gMjsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21pbiA9Ci0JCQljcHVfdG9fbGUxNigoY3dfbWluICsgMSkgLyAyIC0gMSk7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19tYXggPQotCQkJY3B1X3RvX2xlMTYoY3dfbWF4KTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmFpZnNuID0gMjsKLQkJaWYgKGlzX2xlZ2FjeSkKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5lZGNhX3R4b3AgPQotCQkJCWNwdV90b19sZTE2KDYwMTYpOwotCQllbHNlCi0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0KLQkJCQljcHVfdG9fbGUxNigzMDA4KTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLnJlc2VydmVkMSA9IDA7Ci0KLQkJaSA9IDM7Ci0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19taW4gPQotCQkJY3B1X3RvX2xlMTYoKGN3X21pbiArIDEpIC8gNCAtIDEpOwotCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uY3dfbWF4ID0KLQkJCWNwdV90b19sZTE2KChjd19tYXggKyAxKSAvIDIgLSAxKTsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmFpZnNuID0gMjsKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLnJlc2VydmVkMSA9IDA7Ci0JCWlmIChpc19sZWdhY3kpCi0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uZWRjYV90eG9wID0KLQkJCQljcHVfdG9fbGUxNigzMjY0KTsKLQkJZWxzZQotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9Ci0JCQkJY3B1X3RvX2xlMTYoMTUwNCk7Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gMTsgaSA8IDQ7IGkrKykgewotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmN3X21pbiA9Ci0JCQkJY3B1X3RvX2xlMTYoY3dfbWluKTsKLQkJCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5hY1tpXS5jd19tYXggPQotCQkJCWNwdV90b19sZTE2KGN3X21heCk7Ci0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0uYWlmc24gPSBhaWZzOwotCQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLmFjW2ldLmVkY2FfdHhvcCA9IDA7Ci0JCQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0uYWNbaV0ucmVzZXJ2ZWQxID0gMDsKLQkJfQotCX0KLQlJV0xfREVCVUdfUU9TKCJzZXQgUW9TIHRvIGRlZmF1bHQgXG4iKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9hY3RpdmF0ZV9xb3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgdTggZm9yY2UpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlwcml2LT5xb3NfZGF0YS5kZWZfcW9zX3Bhcm0ucW9zX2ZsYWdzID0gMDsKLQotCWlmIChwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnFfQVAucXVldWVfcmVxdWVzdCAmJgotCSAgICAhcHJpdi0+cW9zX2RhdGEucW9zX2NhcC5xX0FQLnR4b3BfcmVxdWVzdCkKLQkJcHJpdi0+cW9zX2RhdGEuZGVmX3Fvc19wYXJtLnFvc19mbGFncyB8PQotCQkJUU9TX1BBUkFNX0ZMR19UWE9QX1RZUEVfTVNLOwotCi0JaWYgKHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpCi0JCXByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybS5xb3NfZmxhZ3MgfD0KLQkJCVFPU19QQVJBTV9GTEdfVVBEQVRFX0VEQ0FfTVNLOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKGZvcmNlIHx8IGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkgewotCQlJV0xfREVCVUdfUU9TKCJzZW5kIFFvUyBjbWQgd2l0aCBRb1MgYWN0aXZlICVkIFxuIiwKLQkJCSAgICAgIHByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUpOwotCi0JCWl3bDM5NDVfc2VuZF9xb3NfcGFyYW1zX2NvbW1hbmQocHJpdiwKLQkJCQkmKHByaXYtPnFvc19kYXRhLmRlZl9xb3NfcGFybSkpOwotCX0KLX0KLQotLyoKLSAqIFBvd2VyIG1hbmFnZW1lbnQgKG5vdCBUeCBwb3dlciEpIGZ1bmN0aW9ucwotICovCi0jZGVmaW5lIE1TRUNfVE9fVVNFQyAxMDI0Ci0KLSNkZWZpbmUgTk9TTFAgX19jb25zdGFudF9jcHVfdG9fbGUzMigwKQotI2RlZmluZSBTTFAgSVdMX1BPV0VSX0RSSVZFUl9BTExPV19TTEVFUF9NU0sKLSNkZWZpbmUgU0xQX1RJTUVPVVQoVCkgX19jb25zdGFudF9jcHVfdG9fbGUzMigoVCkgKiBNU0VDX1RPX1VTRUMpCi0jZGVmaW5lIFNMUF9WRUMoWDAsIFgxLCBYMiwgWDMsIFg0KSB7X19jb25zdGFudF9jcHVfdG9fbGUzMihYMCksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDEpLCBcCi0JCQkJICAgICBfX2NvbnN0YW50X2NwdV90b19sZTMyKFgyKSwgXAotCQkJCSAgICAgX19jb25zdGFudF9jcHVfdG9fbGUzMihYMyksIFwKLQkJCQkgICAgIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoWDQpfQotCi0KLS8qIGRlZmF1bHQgcG93ZXIgbWFuYWdlbWVudCAobm90IFR4IHBvd2VyKSB0YWJsZSB2YWx1ZXMgKi8KLS8qIGZvciBUSU0gIDAtMTAgKi8KLXN0YXRpYyBzdHJ1Y3QgaXdsMzk0NV9wb3dlcl92ZWNfZW50cnkgcmFuZ2VfMFtJV0xfUE9XRVJfQUNdID0gewotCXt7Tk9TTFAsIFNMUF9USU1FT1VUKDApLCBTTFBfVElNRU9VVCgwKSwgU0xQX1ZFQygwLCAwLCAwLCAwLCAwKX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCgyMDApLCBTTFBfVElNRU9VVCg1MDApLCBTTFBfVkVDKDEsIDIsIDMsIDQsIDQpfSwgMH0sCi0Je3tTTFAsIFNMUF9USU1FT1VUKDIwMCksIFNMUF9USU1FT1VUKDMwMCksIFNMUF9WRUMoMiwgNCwgNiwgNywgNyl9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoNTApLCBTTFBfVElNRU9VVCgxMDApLCBTTFBfVkVDKDIsIDYsIDksIDksIDEwKX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCg1MCksIFNMUF9USU1FT1VUKDI1KSwgU0xQX1ZFQygyLCA3LCA5LCA5LCAxMCl9LCAxfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjUpLCBTTFBfVElNRU9VVCgyNSksIFNMUF9WRUMoNCwgNywgMTAsIDEwLCAxMCl9LCAxfQotfTsKLQotLyogZm9yIFRJTSA+IDEwICovCi1zdGF0aWMgc3RydWN0IGl3bDM5NDVfcG93ZXJfdmVjX2VudHJ5IHJhbmdlXzFbSVdMX1BPV0VSX0FDXSA9IHsKLQl7e05PU0xQLCBTTFBfVElNRU9VVCgwKSwgU0xQX1RJTUVPVVQoMCksIFNMUF9WRUMoMCwgMCwgMCwgMCwgMCl9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjAwKSwgU0xQX1RJTUVPVVQoNTAwKSwKLQkJIFNMUF9WRUMoMSwgMiwgMywgNCwgMHhGRil9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoMjAwKSwgU0xQX1RJTUVPVVQoMzAwKSwKLQkJIFNMUF9WRUMoMiwgNCwgNiwgNywgMHhGRil9LCAwfSwKLQl7e1NMUCwgU0xQX1RJTUVPVVQoNTApLCBTTFBfVElNRU9VVCgxMDApLAotCQkgU0xQX1ZFQygyLCA2LCA5LCA5LCAweEZGKX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCg1MCksIFNMUF9USU1FT1VUKDI1KSwgU0xQX1ZFQygyLCA3LCA5LCA5LCAweEZGKX0sIDB9LAotCXt7U0xQLCBTTFBfVElNRU9VVCgyNSksIFNMUF9USU1FT1VUKDI1KSwKLQkJIFNMUF9WRUMoNCwgNywgMTAsIDEwLCAweEZGKX0sIDB9Ci19OwotCi1pbnQgaXdsMzk0NV9wb3dlcl9pbml0X2hhbmRsZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWludCByYyA9IDAsIGk7Ci0Jc3RydWN0IGl3bDM5NDVfcG93ZXJfbWdyICpwb3dfZGF0YTsKLQlpbnQgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9wb3dlcl92ZWNfZW50cnkpICogSVdMX1BPV0VSX0FDOwotCXUxNiBwY2lfcG07Ci0KLQlJV0xfREVCVUdfUE9XRVIoIkluaXRpYWxpemUgcG93ZXIgXG4iKTsKLQotCXBvd19kYXRhID0gJihwcml2LT5wb3dlcl9kYXRhKTsKLQotCW1lbXNldChwb3dfZGF0YSwgMCwgc2l6ZW9mKCpwb3dfZGF0YSkpOwotCi0JcG93X2RhdGEtPmFjdGl2ZV9pbmRleCA9IElXTF9QT1dFUl9SQU5HRV8wOwotCXBvd19kYXRhLT5kdGltX3ZhbCA9IDB4ZmZmZjsKLQotCW1lbWNweSgmcG93X2RhdGEtPnB3cl9yYW5nZV8wWzBdLCAmcmFuZ2VfMFswXSwgc2l6ZSk7Ci0JbWVtY3B5KCZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMF0sICZyYW5nZV8xWzBdLCBzaXplKTsKLQotCXJjID0gcGNpX3JlYWRfY29uZmlnX3dvcmQocHJpdi0+cGNpX2RldiwgUENJX0xJTktfQ1RSTCwgJnBjaV9wbSk7Ci0JaWYgKHJjICE9IDApCi0JCXJldHVybiAwOwotCWVsc2UgewotCQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcnRhYmxlX2NtZCAqY21kOwotCi0JCUlXTF9ERUJVR19QT1dFUigiYWRqdXN0IHBvd2VyIGNvbW1hbmQgZmxhZ3NcbiIpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBJV0xfUE9XRVJfQUM7IGkrKykgewotCQkJY21kID0gJnBvd19kYXRhLT5wd3JfcmFuZ2VfMFtpXS5jbWQ7Ci0KLQkJCWlmIChwY2lfcG0gJiAweDEpCi0JCQkJY21kLT5mbGFncyAmPSB+SVdMX1BPV0VSX1BDSV9QTV9NU0s7Ci0JCQllbHNlCi0JCQkJY21kLT5mbGFncyB8PSBJV0xfUE9XRVJfUENJX1BNX01TSzsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV91cGRhdGVfcG93ZXJfY21kKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQgKmNtZCwgdTMyIG1vZGUpCi17Ci0JaW50IHJjID0gMCwgaTsKLQl1OCBza2lwOwotCXUzMiBtYXhfc2xlZXAgPSAwOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VyX3ZlY19lbnRyeSAqcmFuZ2U7Ci0JdTggcGVyaW9kID0gMDsKLQlzdHJ1Y3QgaXdsMzk0NV9wb3dlcl9tZ3IgKnBvd19kYXRhOwotCi0JaWYgKG1vZGUgPiBJV0xfUE9XRVJfSU5ERVhfNSkgewotCQlJV0xfREVCVUdfUE9XRVIoIkVycm9yIGludmFsaWQgcG93ZXIgbW9kZSBcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXBvd19kYXRhID0gJihwcml2LT5wb3dlcl9kYXRhKTsKLQotCWlmIChwb3dfZGF0YS0+YWN0aXZlX2luZGV4ID09IElXTF9QT1dFUl9SQU5HRV8wKQotCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzBbMF07Ci0JZWxzZQotCQlyYW5nZSA9ICZwb3dfZGF0YS0+cHdyX3JhbmdlXzFbMV07Ci0KLQltZW1jcHkoY21kLCAmcmFuZ2VbbW9kZV0uY21kLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcG93ZXJ0YWJsZV9jbWQpKTsKLQotI2lmZGVmIElXTF9NQUM4MDIxMV9ESVNBQkxFCi0JaWYgKHByaXYtPmFzc29jX25ldHdvcmsgIT0gTlVMTCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCXBlcmlvZCA9IHByaXYtPmFzc29jX25ldHdvcmstPnRpbS50aW1fcGVyaW9kOwotCX0KLSNlbmRpZgkvKklXTF9NQUM4MDIxMV9ESVNBQkxFICovCi0Jc2tpcCA9IHJhbmdlW21vZGVdLm5vX2R0aW07Ci0KLQlpZiAocGVyaW9kID09IDApIHsKLQkJcGVyaW9kID0gMTsKLQkJc2tpcCA9IDA7Ci0JfQotCi0JaWYgKHNraXAgPT0gMCkgewotCQltYXhfc2xlZXAgPSBwZXJpb2Q7Ci0JCWNtZC0+ZmxhZ3MgJj0gfklXTF9QT1dFUl9TTEVFUF9PVkVSX0RUSU1fTVNLOwotCX0gZWxzZSB7Ci0JCV9fbGUzMiBzbHBfaXRydmwgPSBjbWQtPnNsZWVwX2ludGVydmFsW0lXTF9QT1dFUl9WRUNfU0laRSAtIDFdOwotCQltYXhfc2xlZXAgPSAobGUzMl90b19jcHUoc2xwX2l0cnZsKSAvIHBlcmlvZCkgKiBwZXJpb2Q7Ci0JCWNtZC0+ZmxhZ3MgfD0gSVdMX1BPV0VSX1NMRUVQX09WRVJfRFRJTV9NU0s7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IElXTF9QT1dFUl9WRUNfU0laRTsgaSsrKSB7Ci0JCWlmIChsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsW2ldKSA+IG1heF9zbGVlcCkKLQkJCWNtZC0+c2xlZXBfaW50ZXJ2YWxbaV0gPSBjcHVfdG9fbGUzMihtYXhfc2xlZXApOwotCX0KLQotCUlXTF9ERUJVR19QT1dFUigiRmxhZ3MgdmFsdWUgPSAweCUwOFhcbiIsIGNtZC0+ZmxhZ3MpOwotCUlXTF9ERUJVR19QT1dFUigiVHggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnR4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiUnggdGltZW91dCA9ICV1XG4iLCBsZTMyX3RvX2NwdShjbWQtPnJ4X2RhdGFfdGltZW91dCkpOwotCUlXTF9ERUJVR19QT1dFUigiU2xlZXAgaW50ZXJ2YWwgdmVjdG9yID0geyAlZCAsICVkICwgJWQgLCAlZCAsICVkIH1cbiIsCi0JCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzBdKSwKLQkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbMV0pLAotCQkJbGUzMl90b19jcHUoY21kLT5zbGVlcF9pbnRlcnZhbFsyXSksCi0JCQlsZTMyX3RvX2NwdShjbWQtPnNsZWVwX2ludGVydmFsWzNdKSwKLQkJCWxlMzJfdG9fY3B1KGNtZC0+c2xlZXBfaW50ZXJ2YWxbNF0pKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NlbmRfcG93ZXJfbW9kZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgbW9kZSkKLXsKLQl1MzIgdW5pbml0aWFsaXplZF92YXIoZmluYWxfbW9kZSk7Ci0JaW50IHJjOwotCXN0cnVjdCBpd2wzOTQ1X3Bvd2VydGFibGVfY21kIGNtZDsKLQotCS8qIElmIG9uIGJhdHRlcnksIHNldCB0byAzLAotCSAqIGlmIHBsdWdnZWQgaW50byBBQyBwb3dlciwgc2V0IHRvIENBTSAoImNvbnRpbnVvdXNseSBhd2FyZSBtb2RlIiksCi0JICogZWxzZSB1c2VyIGxldmVsICovCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBJV0xfUE9XRVJfQkFUVEVSWToKLQkJZmluYWxfbW9kZSA9IElXTF9QT1dFUl9JTkRFWF8zOwotCQlicmVhazsKLQljYXNlIElXTF9QT1dFUl9BQzoKLQkJZmluYWxfbW9kZSA9IElXTF9QT1dFUl9NT0RFX0NBTTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZmluYWxfbW9kZSA9IG1vZGU7Ci0JCWJyZWFrOwotCX0KLQotCWl3bDM5NDVfdXBkYXRlX3Bvd2VyX2NtZChwcml2LCAmY21kLCBmaW5hbF9tb2RlKTsKLQotCXJjID0gaXdsMzk0NV9zZW5kX2NtZF9wZHUocHJpdiwgUE9XRVJfVEFCTEVfQ01ELCBzaXplb2YoY21kKSwgJmNtZCk7Ci0KLQlpZiAoZmluYWxfbW9kZSA9PSBJV0xfUE9XRVJfTU9ERV9DQU0pCi0JCWNsZWFyX2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKTsKLQllbHNlCi0JCXNldF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9zY2FuX2NhbmNlbCAtIENhbmNlbCBhbnkgY3VycmVudGx5IGV4ZWN1dGluZyBIVyBzY2FuCi0gKgotICogTk9URTogcHJpdi0+bXV0ZXggaXMgbm90IHJlcXVpcmVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3NjYW5fY2FuY2VsKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JaWYgKCF0ZXN0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cykpIHsKLQkJY2xlYXJfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCWlmICghdGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfREVCVUdfU0NBTigiUXVldWluZyBzY2FuIGFib3J0LlxuIik7Ci0JCQlzZXRfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKTsKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+YWJvcnRfc2Nhbik7Ci0KLQkJfSBlbHNlCi0JCQlJV0xfREVCVUdfU0NBTigiU2NhbiBhYm9ydCBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7Ci0KLQkJcmV0dXJuIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0IC0gQ2FuY2VsIGFueSBjdXJyZW50bHkgZXhlY3V0aW5nIEhXIHNjYW4KLSAqIEBtczogYW1vdW50IG9mIHRpbWUgdG8gd2FpdCAoaW4gbWlsbGlzZWNvbmRzKSBmb3Igc2NhbiB0byBhYm9ydAotICoKLSAqIE5PVEU6IHByaXYtPm11dGV4IG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHVuc2lnbmVkIGxvbmcgbXMpCi17Ci0JdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwotCWludCByZXQ7Ci0KLQlyZXQgPSBpd2wzOTQ1X3NjYW5fY2FuY2VsKHByaXYpOwotCWlmIChyZXQgJiYgbXMpIHsKLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JCXdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCBub3cgKyBtc2Vjc190b19qaWZmaWVzKG1zKSkgJiYKLQkJCQl0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKQotCQkJbXNsZWVwKDEpOwotCQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQkJcmV0dXJuIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwkJCQkgICAgcHJpdi0+c2hhcmVkX3ZpcnQsCisJCQkJICAgIHByaXYtPnNoYXJlZF9waHlzKTsKIH0KIAogI2RlZmluZSBNQVhfVUNPREVfQkVBQ09OX0lOVEVSVkFMCTEwMjQKLSNkZWZpbmUgSU5URUxfQ09OTl9MSVNURU5fSU5URVJWQUwJX19jb25zdGFudF9jcHVfdG9fbGUxNigweEEpCisjZGVmaW5lIElOVEVMX0NPTk5fTElTVEVOX0lOVEVSVkFMCWNwdV90b19sZTE2KDB4QSkKIAogc3RhdGljIF9fbGUxNiBpd2wzOTQ1X2FkanVzdF9iZWFjb25faW50ZXJ2YWwodTE2IGJlYWNvbl92YWwpCiB7CkBAIC0yMDQzLDcgKzcwNSw3IEBACiAJcmV0dXJuIGNwdV90b19sZTE2KG5ld192YWwpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3NldHVwX3J4b25fdGltaW5nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1NjQgaW50ZXJ2YWxfdG1fdW5pdDsKIAl1NjQgdHNmLCByZXN1bHQ7CkBAIC0yMDU0LDEzICs3MTYsMTAgQEAKIAljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+cnhvbl90aW1pbmcudGltZXN0YW1wLmR3WzFdID0gY3B1X3RvX2xlMzIocHJpdi0+dGltZXN0YW1wMSk7Ci0JcHJpdi0+cnhvbl90aW1pbmcudGltZXN0YW1wLmR3WzBdID0gY3B1X3RvX2xlMzIocHJpdi0+dGltZXN0YW1wMCk7Ci0KKwlwcml2LT5yeG9uX3RpbWluZy50aW1lc3RhbXAgPSBjcHVfdG9fbGU2NChwcml2LT50aW1lc3RhbXApOwogCXByaXYtPnJ4b25fdGltaW5nLmxpc3Rlbl9pbnRlcnZhbCA9IElOVEVMX0NPTk5fTElTVEVOX0lOVEVSVkFMOwogCi0JdHNmID0gcHJpdi0+dGltZXN0YW1wMTsKLQl0c2YgPSAoKHRzZiA8PCAzMikgfCBwcml2LT50aW1lc3RhbXAwKTsKKwl0c2YgPSBwcml2LT50aW1lc3RhbXA7CiAKIAliZWFjb25faW50ID0gcHJpdi0+YmVhY29uX2ludDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0yMDkyLDE4MyArNzUxLDQxIEBACiAJcHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsID0KIAkgICAgY3B1X3RvX2xlMzIoKHUzMikgKCh1NjQpIGludGVydmFsX3RtX3VuaXQgLSByZXN1bHQpKTsKIAotCUlXTF9ERUJVR19BU1NPQwotCSAgICAoImJlYWNvbiBpbnRlcnZhbCAlZCBiZWFjb24gdGltZXIgJWQgYmVhY29uIHRpbSAlZFxuIiwKKwlJV0xfREVCVUdfQVNTT0MocHJpdiwKKwkJImJlYWNvbiBpbnRlcnZhbCAlZCBiZWFjb24gdGltZXIgJWQgYmVhY29uIHRpbSAlZFxuIiwKIAkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSwKIAkJbGUzMl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2luaXRfdmFsKSwKIAkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYXRpbV93aW5kb3cpKTsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X3NjYW5faW5pdGlhdGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vdCByZWFkeS5cbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfU0NBTigiU2NhbiBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nLiAgIgotCQkJICAgICAgICJRdWV1aW5nLlxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQotCUlXTF9ERUJVR19JTkZPKCJTdGFydGluZyBzY2FuLi4uXG4iKTsKLQlpZiAocHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0cpCi0JCXByaXYtPnNjYW5fYmFuZHMgfD0gQklUKElFRUU4MDIxMV9CQU5EXzJHSFopOwotCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkKLQkJcHJpdi0+c2Nhbl9iYW5kcyB8PSBCSVQoSUVFRTgwMjExX0JBTkRfNUdIWik7Ci0Jc2V0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOwotCXByaXYtPnNjYW5fc3RhcnQgPSBqaWZmaWVzOwotCXByaXYtPnNjYW5fcGFzc19zdGFydCA9IHByaXYtPnNjYW5fc3RhcnQ7Ci0KLQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlcXVlc3Rfc2Nhbik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpd2wzOTQ1X3NldF9yeG9uX2h3Y3J5cHRvKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBod19kZWNyeXB0KQotewotCXN0cnVjdCBpd2wzOTQ1X3J4b25fY21kICpyeG9uID0gJnByaXYtPnN0YWdpbmdfcnhvbjsKLQotCWlmIChod19kZWNyeXB0KQotCQlyeG9uLT5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSzsKLQllbHNlCi0JCXJ4b24tPmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9ESVNfREVDUllQVF9NU0s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkJICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCi17Ci0JaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgewotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0KLQkJICAgIH4oUlhPTl9GTEdfQkFORF8yNEdfTVNLIHwgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLCi0JCSAgICAgIHwgUlhPTl9GTEdfQ0NLX01TSyk7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQl9IGVsc2UgewotCQkvKiBDb3BpZWQgZnJvbSBpd2wzOTQ1X2JnX3Bvc3RfYXNzb2NpYXRlKCkgKi8KLQkJaWYgKHByaXYtPmFzc29jX2NhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKQotCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCQllbHNlCi0JCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1NMT1RfTVNLOwotCi0JCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9IH5SWE9OX0ZMR19TSE9SVF9TTE9UX01TSzsKLQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQkFORF8yNEdfTVNLOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgfD0gUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX0NDS19NU0s7Ci0JfQotfQotCi0vKgotICogaW5pdGlhbGl6ZSByeG9uIHN0cnVjdHVyZSB3aXRoIGRlZmF1bHQgdmFsdWVzIGZyb20gZWVwcm9tCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkgICAgICBpbnQgbW9kZSkKLXsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm87Ci0KLQltZW1zZXQoJnByaXYtPnN0YWdpbmdfcnhvbiwgMCwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpOwotCi0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9BUDsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5kZXZfdHlwZSA9IFJYT05fREVWX1RZUEVfRVNTOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JCWJyZWFrOwotCi0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9JQlNTOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgPSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7Ci0JCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSyB8Ci0JCQkJCQkgIFJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCQlicmVhazsKLQotCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmRldl90eXBlID0gUlhPTl9ERVZfVFlQRV9TTklGRkVSOwotCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzID0gUlhPTl9GSUxURVJfUFJPTUlTQ19NU0sgfAotCQkgICAgUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLIHwgUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUlXTF9FUlJPUigiVW5zdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGUgJWRcbiIsIG1vZGUpOwotCQlicmVhazsKLQl9Ci0KLSNpZiAwCi0JLyogVE9ETzogIEZpZ3VyZSBvdXQgd2hlbiBzaG9ydF9wcmVhbWJsZSB3b3VsZCBiZSBzZXQgYW5kIGNhY2hlIGZyb20KLQkgKiB0aGF0ICovCi0JaWYgKCFod190b19sb2NhbChwcml2LT5odyktPnNob3J0X3ByZWFtYmxlKQotCQlwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MgJj0gflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKLQllbHNlCi0JCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7Ci0jZW5kaWYKLQotCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgcHJpdi0+YmFuZCwKLQkJCQkgICAgICAgbGUxNl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uY2hhbm5lbCkpOwotCi0JaWYgKCFjaF9pbmZvKQotCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKLQotCS8qCi0JICogaW4gc29tZSBjYXNlIEEgY2hhbm5lbHMgYXJlIGFsbCBub24gSUJTUwotCSAqIGluIHRoaXMgY2FzZSBmb3JjZSBCL0cgY2hhbm5lbAotCSAqLwotCWlmICgobW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYgIShpc19jaGFubmVsX2lic3MoY2hfaW5mbykpKQotCQljaF9pbmZvID0gJnByaXYtPmNoYW5uZWxfaW5mb1swXTsKLQotCXByaXYtPnN0YWdpbmdfcnhvbi5jaGFubmVsID0gY3B1X3RvX2xlMTYoY2hfaW5mby0+Y2hhbm5lbCk7Ci0JaWYgKGlzX2NoYW5uZWxfYV9iYW5kKGNoX2luZm8pKQotCQlwcml2LT5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKLQllbHNlCi0JCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCi0JaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgcHJpdi0+YmFuZCk7Ci0KLQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JICAgIChJV0xfT0ZETV9SQVRFU19NQVNLID4+IElXTF9GSVJTVF9PRkRNX1JBVEUpICYgMHhGRjsKLQlwcml2LT5zdGFnaW5nX3J4b24uY2NrX2Jhc2ljX3JhdGVzID0KLQkgICAgKElXTF9DQ0tfUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfQ0NLX1JBVEUpICYgMHhGOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfc2V0X21vZGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgaW50IG1vZGUpCitzdGF0aWMgaW50IGl3bDM5NDVfc2V0X21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSkKIHsKIAlpZiAobW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOwogCi0JCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwKKwkJY2hfaW5mbyA9IGl3bF9nZXRfY2hhbm5lbF9pbmZvKHByaXYsCiAJCQlwcml2LT5iYW5kLAogCQkJbGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpKTsKIAogCQlpZiAoIWNoX2luZm8gfHwgIWlzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkgewotCQkJSVdMX0VSUk9SKCJjaGFubmVsICVkIG5vdCBJQlNTIGNoYW5uZWxcbiIsCisJCQlJV0xfRVJSKHByaXYsICJjaGFubmVsICVkIG5vdCBJQlNTIGNoYW5uZWxcbiIsCiAJCQkJICBsZTE2X3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLQlpd2wzOTQ1X2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgbW9kZSk7Ci0JbWVtY3B5KHByaXYtPnN0YWdpbmdfcnhvbi5ub2RlX2FkZHIsIHByaXYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJaXdsX2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgbW9kZSk7CiAKIAlpd2wzOTQ1X2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwogCiAJLyogZG9uJ3QgY29tbWl0IHJ4b24gaWYgcmYta2lsbCBpcyBvbiovCi0JaWYgKCFpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKQorCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fY2hlY2spOwotCWlmIChpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgewotCQlJV0xfV0FSTklORygiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIDEwMG1zXG4iKTsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKKwlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgeworCQlJV0xfV0FSTihwcml2LCAiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzIGFmdGVyIDEwMG1zXG4iKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2aW5nIC0gc2NhbiBhYm9ydCBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCkBAIC0yMjc3LDQ5ICs3OTQsNDEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9idWlsZF90eF9jbWRfaHdjcnlwdG8oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyB2b2lkIGl3bDM5NDVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sCi0JCQkJICAgICAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCisJCQkJICAgICAgc3RydWN0IGl3bF9jbWQgKmNtZCwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2ZyYWcsCi0JCQkJICAgICAgaW50IGxhc3RfZnJhZykKKwkJCQkgICAgICBpbnQgc3RhX2lkKQogeworCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopY21kLT5jbWQucGF5bG9hZDsKIAlzdHJ1Y3QgaXdsMzk0NV9od19rZXkgKmtleWluZm8gPQotCSAgICAmcHJpdi0+c3RhdGlvbnNbaW5mby0+Y29udHJvbC5od19rZXktPmh3X2tleV9pZHhdLmtleWluZm87CisJICAgICZwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLmtleWluZm87CiAKIAlzd2l0Y2ggKGtleWluZm8tPmFsZykgewogCWNhc2UgQUxHX0NDTVA6Ci0JCWNtZC0+Y21kLnR4LnNlY19jdGwgPSBUWF9DTURfU0VDX0NDTTsKLQkJbWVtY3B5KGNtZC0+Y21kLnR4LmtleSwga2V5aW5mby0+a2V5LCBrZXlpbmZvLT5rZXlsZW4pOwotCQlJV0xfREVCVUdfVFgoInR4X2NtZCB3aXRoIEFFUyBod2NyeXB0b1xuIik7CisJCXR4LT5zZWNfY3RsID0gVFhfQ01EX1NFQ19DQ007CisJCW1lbWNweSh0eC0+a2V5LCBrZXlpbmZvLT5rZXksIGtleWluZm8tPmtleWxlbik7CisJCUlXTF9ERUJVR19UWChwcml2LCAidHhfY21kIHdpdGggQUVTIGh3Y3J5cHRvXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIEFMR19US0lQOgotI2lmIDAKLQkJY21kLT5jbWQudHguc2VjX2N0bCA9IFRYX0NNRF9TRUNfVEtJUDsKLQotCQlpZiAobGFzdF9mcmFnKQotCQkJbWVtY3B5KGNtZC0+Y21kLnR4LnRraXBfbWljLmJ5dGUsIHNrYl9mcmFnLT50YWlsIC0gOCwKLQkJCSAgICAgICA4KTsKLQkJZWxzZQotCQkJbWVtc2V0KGNtZC0+Y21kLnR4LnRraXBfbWljLmJ5dGUsIDAsIDgpOwotI2VuZGlmCiAJCWJyZWFrOwogCiAJY2FzZSBBTEdfV0VQOgotCQljbWQtPmNtZC50eC5zZWNfY3RsID0gVFhfQ01EX1NFQ19XRVAgfAorCQl0eC0+c2VjX2N0bCA9IFRYX0NNRF9TRUNfV0VQIHwKIAkJICAgIChpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeCAmIFRYX0NNRF9TRUNfTVNLKSA8PCBUWF9DTURfU0VDX1NISUZUOwogCiAJCWlmIChrZXlpbmZvLT5rZXlsZW4gPT0gMTMpCi0JCQljbWQtPmNtZC50eC5zZWNfY3RsIHw9IFRYX0NNRF9TRUNfS0VZMTI4OworCQkJdHgtPnNlY19jdGwgfD0gVFhfQ01EX1NFQ19LRVkxMjg7CiAKLQkJbWVtY3B5KCZjbWQtPmNtZC50eC5rZXlbM10sIGtleWluZm8tPmtleSwga2V5aW5mby0+a2V5bGVuKTsKKwkJbWVtY3B5KCZ0eC0+a2V5WzNdLCBrZXlpbmZvLT5rZXksIGtleWluZm8tPmtleWxlbik7CiAKLQkJSVdMX0RFQlVHX1RYKCJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJDb25maWd1cmluZyBwYWNrZXQgZm9yIFdFUCBlbmNyeXB0aW9uICIKIAkJCSAgICAgIndpdGgga2V5ICVkXG4iLCBpbmZvLT5jb250cm9sLmh3X2tleS0+aHdfa2V5X2lkeCk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIGVuY29kZSBhbGcgJWRcbiIsIGtleWluZm8tPmFsZyk7CisJCUlXTF9FUlIocHJpdiwgIlVua25vd24gZW5jb2RlIGFsZyAlZFxuIiwga2V5aW5mby0+YWxnKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMjMyNywxNyArODM2LDE3IEBACiAvKgogICogaGFuZGxlIGJ1aWxkIFJFUExZX1RYIGNvbW1hbmQgbm90aWZpY2F0aW9uLgogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2J1aWxkX3R4X2NtZF9iYXNpYyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgc3RydWN0IGl3bDM5NDVfY21kICpjbWQsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2J1aWxkX3R4X2NtZF9iYXNpYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJICBzdHJ1Y3QgaXdsX2NtZCAqY21kLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciwKLQkJCQkgIGludCBpc191bmljYXN0LCB1OCBzdGRfaWQpCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLCB1OCBzdGRfaWQpCiB7CisJc3RydWN0IGl3bDM5NDVfdHhfY21kICp0eCA9IChzdHJ1Y3QgaXdsMzk0NV90eF9jbWQgKiljbWQtPmNtZC5wYXlsb2FkOworCV9fbGUzMiB0eF9mbGFncyA9IHR4LT50eF9mbGFnczsKIAlfX2xlMTYgZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0JX19sZTMyIHR4X2ZsYWdzID0gY21kLT5jbWQudHgudHhfZmxhZ3M7CiAJdTggcmNfZmxhZ3MgPSBpbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzOwogCi0JY21kLT5jbWQudHguc3RvcF90aW1lLmxpZmVfdGltZSA9IFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEU7CisJdHgtPnN0b3BfdGltZS5saWZlX3RpbWUgPSBUWF9DTURfTElGRV9USU1FX0lORklOSVRFOwogCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKSB7CiAJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQUNLX01TSzsKIAkJaWYgKGllZWU4MDIxMV9pc19tZ210KGZjKSkKQEAgLTIzNTAsMTMgKzg1OSwxMyBAQAogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX1NFUV9DVExfTVNLOwogCX0KIAotCWNtZC0+Y21kLnR4LnN0YV9pZCA9IHN0ZF9pZDsKKwl0eC0+c3RhX2lkID0gc3RkX2lkOwogCWlmIChpZWVlODAyMTFfaGFzX21vcmVmcmFncyhmYykpCiAJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfTU9SRV9GUkFHX01TSzsKIAogCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CiAJCXU4ICpxYyA9IGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpOwotCQljbWQtPmNtZC50eC50aWRfdHNwZWMgPSBxY1swXSAmIDB4ZjsKKwkJdHgtPnRpZF90c3BlYyA9IHFjWzBdICYgMHhmOwogCQl0eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19TRVFfQ1RMX01TSzsKIAl9IGVsc2UgewogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX1NFUV9DVExfTVNLOwpAQCAtMjM3NiwyNSArODg1LDI1IEBACiAJdHhfZmxhZ3MgJj0gfihUWF9DTURfRkxHX0FOVF9TRUxfTVNLKTsKIAlpZiAoaWVlZTgwMjExX2lzX21nbXQoZmMpKSB7CiAJCWlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKGZjKSB8fCBpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEoZmMpKQotCQkJY21kLT5jbWQudHgudGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gY3B1X3RvX2xlMTYoMyk7CisJCQl0eC0+dGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gY3B1X3RvX2xlMTYoMyk7CiAJCWVsc2UKLQkJCWNtZC0+Y21kLnR4LnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IGNwdV90b19sZTE2KDIpOworCQkJdHgtPnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IGNwdV90b19sZTE2KDIpOwogCX0gZWxzZSB7Ci0JCWNtZC0+Y21kLnR4LnRpbWVvdXQucG1fZnJhbWVfdGltZW91dCA9IDA7Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfTEVEUworCQl0eC0+dGltZW91dC5wbV9mcmFtZV90aW1lb3V0ID0gMDsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9MRURTCiAJCXByaXYtPnJ4dHhwYWNrZXRzICs9IGxlMTZfdG9fY3B1KGNtZC0+Y21kLnR4Lmxlbik7CiAjZW5kaWYKIAl9CiAKLQljbWQtPmNtZC50eC5kcml2ZXJfdHhvcCA9IDA7Ci0JY21kLT5jbWQudHgudHhfZmxhZ3MgPSB0eF9mbGFnczsKLQljbWQtPmNtZC50eC5uZXh0X2ZyYW1lX2xlbiA9IDA7CisJdHgtPmRyaXZlcl90eG9wID0gMDsKKwl0eC0+dHhfZmxhZ3MgPSB0eF9mbGFnczsKKwl0eC0+bmV4dF9mcmFtZV9sZW4gPSAwOwogfQogCiAvKioKICAqIGl3bDM5NDVfZ2V0X3N0YV9pZCAtIEZpbmQgc3RhdGlvbidzIGluZGV4IHdpdGhpbiBzdGF0aW9uIHRhYmxlCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9nZXRfc3RhX2lkKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCitzdGF0aWMgaW50IGl3bDM5NDVfZ2V0X3N0YV9pZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCiB7CiAJaW50IHN0YV9pZDsKIAl1MTYgZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwpAQCAtMjQwMiw3ICs5MTEsNyBAQAogCS8qIElmIHRoaXMgZnJhbWUgaXMgYnJvYWRjYXN0IG9yIG1hbmFnZW1lbnQsIHVzZSBicm9hZGNhc3Qgc3RhdGlvbiBpZCAqLwogCWlmICgoKGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUpICE9IElFRUU4MDIxMV9GVFlQRV9EQVRBKSB8fAogCSAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKLQkJcmV0dXJuIHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAogCXN3aXRjaCAocHJpdi0+aXdfbW9kZSkgewogCkBAIC0yNDE2LDcgKzkyNSw3IEBACiAJCXN0YV9pZCA9IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGhkci0+YWRkcjEpOwogCQlpZiAoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pCiAJCQlyZXR1cm4gc3RhX2lkOwotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJLyogSWYgdGhpcyBmcmFtZSBpcyBnb2luZyBvdXQgdG8gYW4gSUJTUyBuZXR3b3JrLCBmaW5kIHRoZSBzdGF0aW9uLAogCSAqIG9yIGNyZWF0ZSBhIG5ldyBzdGF0aW9uIHRhYmxlIGVudHJ5ICovCkBAIC0yNDMxLDM4ICs5NDAsMzggQEAKIAkJaWYgKHN0YV9pZCAhPSBJV0xfSU5WQUxJRF9TVEFUSU9OKQogCQkJcmV0dXJuIHN0YV9pZDsKIAotCQlJV0xfREVCVUdfRFJPUCgiU3RhdGlvbiAlcE0gbm90IGluIHN0YXRpb24gbWFwLiAiCisJCUlXTF9ERUJVR19EUk9QKHByaXYsICJTdGF0aW9uICVwTSBub3QgaW4gc3RhdGlvbiBtYXAuICIKIAkJCSAgICAgICAiRGVmYXVsdGluZyB0byBicm9hZGNhc3QuLi5cbiIsCiAJCQkgICAgICAgaGRyLT5hZGRyMSk7Ci0JCWl3bDM5NDVfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX0RST1AsICh1OCAqKSBoZHIsIHNpemVvZigqaGRyKSk7Ci0JCXJldHVybiBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwkJaXdsX3ByaW50X2hleF9kdW1wKHByaXYsIElXTF9ETF9EUk9QLCAodTggKikgaGRyLCBzaXplb2YoKmhkcikpOworCQlyZXR1cm4gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAl9CiAJLyogSWYgd2UgYXJlIGluIG1vbml0b3IgbW9kZSwgdXNlIEJDQVNULiBUaGlzIGlzIHJlcXVpcmVkIGZvcgogCSAqIHBhY2tldCBpbmplY3Rpb24uICovCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgotCQlyZXR1cm4gcHJpdi0+aHdfc2V0dGluZy5iY2FzdF9zdGFfaWQ7CisJCXJldHVybiBwcml2LT5od19wYXJhbXMuYmNhc3Rfc3RhX2lkOwogCiAJZGVmYXVsdDoKLQkJSVdMX1dBUk5JTkcoIlVua25vd24gbW9kZSBvZiBvcGVyYXRpb246ICVkXG4iLCBwcml2LT5pd19tb2RlKTsKLQkJcmV0dXJuIHByaXYtPmh3X3NldHRpbmcuYmNhc3Rfc3RhX2lkOworCQlJV0xfV0FSTihwcml2LCAiVW5rbm93biBtb2RlIG9mIG9wZXJhdGlvbjogJWRcbiIsCisJCQlwcml2LT5pd19tb2RlKTsKKwkJcmV0dXJuIHByaXYtPmh3X3BhcmFtcy5iY2FzdF9zdGFfaWQ7CiAJfQogfQogCiAvKgogICogc3RhcnQgUkVQTFlfVFggY29tbWFuZCBwcm9jZXNzCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eF9za2Ioc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgaXdsMzk0NV90eF9za2Ioc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCXN0cnVjdCBpd2wzOTQ1X3RmZF9mcmFtZSAqdGZkOwotCXUzMiAqY29udHJvbF9mbGFnczsKLQlpbnQgdHhxX2lkID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSA9IE5VTEw7Ci0Jc3RydWN0IGl3bDM5NDVfcXVldWUgKnEgPSBOVUxMOworCXN0cnVjdCBpd2wzOTQ1X3R4X2NtZCAqdHg7CisJc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gTlVMTDsKKwlzdHJ1Y3QgaXdsX2NtZCAqb3V0X2NtZCA9IE5VTEw7CiAJZG1hX2FkZHJfdCBwaHlzX2FkZHI7CiAJZG1hX2FkZHJfdCB0eGNtZF9waHlzOwotCXN0cnVjdCBpd2wzOTQ1X2NtZCAqb3V0X2NtZCA9IE5VTEw7CisJaW50IHR4cV9pZCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCXUxNiBsZW4sIGlkeCwgbGVuX29yZywgaGRyX2xlbjsKIAl1OCBpZDsKIAl1OCB1bmljYXN0OwpAQCAtMjQ3NiwxMyArOTg1LDEzIEBACiAJaW50IHJjOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpZiAoaXdsMzk0NV9pc19yZmtpbGwocHJpdikpIHsKLQkJSVdMX0RFQlVHX0RST1AoIkRyb3BwaW5nIC0gUkYgS0lMTFxuIik7CisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKKwkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gUkYgS0lMTFxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCiAJaWYgKChpZWVlODAyMTFfZ2V0X3R4X3JhdGUocHJpdi0+aHcsIGluZm8pLT5od192YWx1ZSAmIDB4RkYpID09IElXTF9JTlZBTElEX1JBVEUpIHsKLQkJSVdMX0VSUk9SKCJFUlJPUjogTm8gVFggcmF0ZSBhdmFpbGFibGUuXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRVJST1I6IE5vIFRYIHJhdGUgYXZhaWxhYmxlLlxuIik7CiAJCWdvdG8gZHJvcF91bmxvY2s7CiAJfQogCkBAIC0yNDkxLDIxICsxMDAwLDIxIEBACiAKIAlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlpZiAoaWVlZTgwMjExX2lzX2F1dGgoZmMpKQotCQlJV0xfREVCVUdfVFgoIlNlbmRpbmcgQVVUSCBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBBVVRIIGZyYW1lXG4iKTsKIAllbHNlIGlmIChpZWVlODAyMTFfaXNfYXNzb2NfcmVxKGZjKSkKLQkJSVdMX0RFQlVHX1RYKCJTZW5kaW5nIEFTU09DIGZyYW1lXG4iKTsKKwkJSVdMX0RFQlVHX1RYKHByaXYsICJTZW5kaW5nIEFTU09DIGZyYW1lXG4iKTsKIAllbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXEoZmMpKQotCQlJV0xfREVCVUdfVFgoIlNlbmRpbmcgUkVBU1NPQyBmcmFtZVxuIik7CisJCUlXTF9ERUJVR19UWChwcml2LCAiU2VuZGluZyBSRUFTU09DIGZyYW1lXG4iKTsKICNlbmRpZgogCiAJLyogZHJvcCBhbGwgZGF0YSBmcmFtZSBpZiB3ZSBhcmUgbm90IGFzc29jaWF0ZWQgKi8KIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpICYmCiAJICAgIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpICYmIC8qIHBhY2tldCBpbmplY3Rpb24gKi8KLQkgICAgKCFpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikgfHwKKwkgICAgKCFpd2xfaXNfYXNzb2NpYXRlZChwcml2KSB8fAogCSAgICAgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pICYmICFwcml2LT5hc3NvY19pZCkpKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtICFpd2wzOTQ1X2lzX2Fzc29jaWF0ZWRcbiIpOworCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSAhaXdsX2lzX2Fzc29jaWF0ZWRcbiIpOwogCQlnb3RvIGRyb3BfdW5sb2NrOwogCX0KIApAQCAtMjUxNiwyMSArMTAyNSwyMSBAQAogCS8qIEZpbmQgKG9yIGNyZWF0ZSkgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCiAJc3RhX2lkID0gaXdsMzk0NV9nZXRfc3RhX2lkKHByaXYsIGhkcik7CiAJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19EUk9QKCJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAorCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKIAkJCSAgICAgICBoZHItPmFkZHIxKTsKIAkJZ290byBkcm9wOwogCX0KIAotCUlXTF9ERUJVR19SQVRFKCJzdGF0aW9uIElkICVkXG4iLCBzdGFfaWQpOworCUlXTF9ERUJVR19SQVRFKHByaXYsICJzdGF0aW9uIElkICVkXG4iLCBzdGFfaWQpOwogCiAJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKIAkJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdGlkID0gcWNbMF0gJiBJRUVFODAyMTFfUU9TX0NUTF9USURfTUFTSzsKLQkJc2VxX251bWJlciA9IHByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciAmCisJCXNlcV9udW1iZXIgPSBwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXIgJgogCQkJCUlFRUU4MDIxMV9TQ1RMX1NFUTsKIAkJaGRyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KHNlcV9udW1iZXIpIHwKIAkJCShoZHItPnNlcV9jdHJsICYKLQkJCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpKTsKKwkJCQljcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKSk7CiAJCXNlcV9udW1iZXIgKz0gMHgxMDsKIAl9CiAKQEAgLTI1NDAsMjAgKzEwNDksMTcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQkvKiBTZXQgdXAgZmlyc3QgZW1wdHkgVEZEIHdpdGhpbiB0aGlzIHF1ZXVlJ3MgY2lyY3VsYXIgVEZEIGJ1ZmZlciAqLwotCXRmZCA9ICZ0eHEtPmJkW3EtPndyaXRlX3B0cl07Ci0JbWVtc2V0KHRmZCwgMCwgc2l6ZW9mKCp0ZmQpKTsKLQljb250cm9sX2ZsYWdzID0gKHUzMiAqKSB0ZmQ7CiAJaWR4ID0gZ2V0X2NtZF9pbmRleChxLCBxLT53cml0ZV9wdHIsIDApOwogCiAJLyogU2V0IHVwIGRyaXZlciBkYXRhIGZvciB0aGlzIFRGRCAqLwotCW1lbXNldCgmKHR4cS0+dHhiW3EtPndyaXRlX3B0cl0pLCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfdHhfaW5mbykpOworCW1lbXNldCgmKHR4cS0+dHhiW3EtPndyaXRlX3B0cl0pLCAwLCBzaXplb2Yoc3RydWN0IGl3bF90eF9pbmZvKSk7CiAJdHhxLT50eGJbcS0+d3JpdGVfcHRyXS5za2JbMF0gPSBza2I7CiAKIAkvKiBJbml0IGZpcnN0IGVtcHR5IGVudHJ5IGluIHF1ZXVlJ3MgYXJyYXkgb2YgVHgvY21kIGJ1ZmZlcnMgKi8KLQlvdXRfY21kID0gJnR4cS0+Y21kW2lkeF07CisJb3V0X2NtZCA9IHR4cS0+Y21kW2lkeF07CisJdHggPSAoc3RydWN0IGl3bDM5NDVfdHhfY21kICopb3V0X2NtZC0+Y21kLnBheWxvYWQ7CiAJbWVtc2V0KCZvdXRfY21kLT5oZHIsIDAsIHNpemVvZihvdXRfY21kLT5oZHIpKTsKLQltZW1zZXQoJm91dF9jbWQtPmNtZC50eCwgMCwgc2l6ZW9mKG91dF9jbWQtPmNtZC50eCkpOworCW1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpOwogCiAJLyoKIAkgKiBTZXQgdXAgdGhlIFR4LWNvbW1hbmQgKG5vdCBNQUMhKSBoZWFkZXIuCkBAIC0yNTY2LDcgKzEwNzIsNyBAQAogCQkJCUlOREVYX1RPX1NFUShxLT53cml0ZV9wdHIpKSk7CiAKIAkvKiBDb3B5IE1BQyBoZWFkZXIgZnJvbSBza2IgaW50byBjb21tYW5kIGJ1ZmZlciAqLwotCW1lbWNweShvdXRfY21kLT5jbWQudHguaGRyLCBoZHIsIGhkcl9sZW4pOworCW1lbWNweSh0eC0+aGRyLCBoZHIsIGhkcl9sZW4pOwogCiAJLyoKIAkgKiBVc2UgdGhlIGZpcnN0IGVtcHR5IGVudHJ5IGluIHRoaXMgcXVldWUncyBjb21tYW5kIGJ1ZmZlciBhcnJheQpAQCAtMjU3Nyw4ICsxMDgzLDggQEAKIAkgKiBvZiB0aGUgTUFDIGhlYWRlciAoZGV2aWNlIHJlYWRzIG9uIGR3b3JkIGJvdW5kYXJpZXMpLgogCSAqIFdlJ2xsIHRlbGwgZGV2aWNlIGFib3V0IHRoaXMgcGFkZGluZyBsYXRlci4KIAkgKi8KLQlsZW4gPSBwcml2LT5od19zZXR0aW5nLnR4X2NtZF9sZW4gKwotCQlzaXplb2Yoc3RydWN0IGl3bDM5NDVfY21kX2hlYWRlcikgKyBoZHJfbGVuOworCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV90eF9jbWQpICsKKwkJCXNpemVvZihzdHJ1Y3QgaXdsX2NtZF9oZWFkZXIpICsgaGRyX2xlbjsKIAogCWxlbl9vcmcgPSBsZW47CiAJbGVuID0gKGxlbiArIDMpICYgfjM7CkBAIC0yNTkwLDE1ICsxMDk2LDIyIEBACiAKIAkvKiBQaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgVHggY29tbWFuZCdzIGhlYWRlciAobm90IE1BQyBoZWFkZXIhKSwKIAkgKiB3aXRoaW4gY29tbWFuZCBidWZmZXIgYXJyYXkuICovCi0JdHhjbWRfcGh5cyA9IHR4cS0+ZG1hX2FkZHJfY21kICsgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NtZCkgKiBpZHggKwotCQkgICAgIG9mZnNldG9mKHN0cnVjdCBpd2wzOTQ1X2NtZCwgaGRyKTsKKwl0eGNtZF9waHlzID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2RldiwKKwkJCQkgICAgb3V0X2NtZCwgc2l6ZW9mKHN0cnVjdCBpd2xfY21kKSwKKwkJCQkgICAgUENJX0RNQV9UT0RFVklDRSk7CisJcGNpX3VubWFwX2FkZHJfc2V0KCZvdXRfY21kLT5tZXRhLCBtYXBwaW5nLCB0eGNtZF9waHlzKTsKKwlwY2lfdW5tYXBfbGVuX3NldCgmb3V0X2NtZC0+bWV0YSwgbGVuLCBzaXplb2Yoc3RydWN0IGl3bF9jbWQpKTsKKwkvKiBBZGQgYnVmZmVyIGNvbnRhaW5pbmcgVHggY29tbWFuZCBhbmQgTUFDKCEpIGhlYWRlciB0byBURkQncworCSAqIGZpcnN0IGVudHJ5ICovCisJdHhjbWRfcGh5cyArPSBvZmZzZXRvZihzdHJ1Y3QgaXdsX2NtZCwgaGRyKTsKIAogCS8qIEFkZCBidWZmZXIgY29udGFpbmluZyBUeCBjb21tYW5kIGFuZCBNQUMoISkgaGVhZGVyIHRvIFRGRCdzCiAJICogZmlyc3QgZW50cnkgKi8KLQlpd2wzOTQ1X2h3X3R4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0ZmQsIHR4Y21kX3BoeXMsIGxlbik7CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dHhxX2F0dGFjaF9idWZfdG9fdGZkKHByaXYsIHR4cSwKKwkJCQkJCSAgIHR4Y21kX3BoeXMsIGxlbiwgMSwgMCk7CiAKIAlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCi0JCWl3bDM5NDVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHByaXYsIGluZm8sIG91dF9jbWQsIHNrYiwgMCk7CisJCWl3bDM5NDVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHByaXYsIGluZm8sIG91dF9jbWQsIHNrYiwgc3RhX2lkKTsKIAogCS8qIFNldCB1cCBURkQncyAybmQgZW50cnkgdG8gcG9pbnQgZGlyZWN0bHkgdG8gcmVtYWluZGVyIG9mIHNrYiwKIAkgKiBpZiBhbnkgKDgwMi4xMSBudWxsIGZyYW1lcyBoYXZlIG5vIHBheWxvYWQpLiAqLwpAQCAtMjYwNiw2NCArMTExOSw1NiBAQAogCWlmIChsZW4pIHsKIAkJcGh5c19hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGNpX2Rldiwgc2tiLT5kYXRhICsgaGRyX2xlbiwKIAkJCQkJICAgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJaXdsMzk0NV9od190eHFfYXR0YWNoX2J1Zl90b190ZmQocHJpdiwgdGZkLCBwaHlzX2FkZHIsIGxlbik7CisJCXByaXYtPmNmZy0+b3BzLT5saWItPnR4cV9hdHRhY2hfYnVmX3RvX3RmZChwcml2LCB0eHEsCisJCQkJCQkJICAgcGh5c19hZGRyLCBsZW4sCisJCQkJCQkJICAgMCwgVTMyX1BBRChsZW4pKTsKIAl9CiAKLQlpZiAoIWxlbikKLQkJLyogSWYgdGhlcmUgaXMgbm8gcGF5bG9hZCwgdGhlbiB3ZSB1c2Ugb25seSBvbmUgVHggYnVmZmVyICovCi0JCSpjb250cm9sX2ZsYWdzID0gVEZEX0NUTF9DT1VOVF9TRVQoMSk7Ci0JZWxzZQotCQkvKiBFbHNlIHVzZSAyIGJ1ZmZlcnMuCi0JCSAqIFRlbGwgMzk0NSBhYm91dCBhbnkgcGFkZGluZyBhZnRlciBNQUMgaGVhZGVyICovCi0JCSpjb250cm9sX2ZsYWdzID0gVEZEX0NUTF9DT1VOVF9TRVQoMikgfAotCQkJVEZEX0NUTF9QQURfU0VUKFUzMl9QQUQobGVuKSk7Ci0KIAkvKiBUb3RhbCAjIGJ5dGVzIHRvIGJlIHRyYW5zbWl0dGVkICovCiAJbGVuID0gKHUxNilza2ItPmxlbjsKLQlvdXRfY21kLT5jbWQudHgubGVuID0gY3B1X3RvX2xlMTYobGVuKTsKKwl0eC0+bGVuID0gY3B1X3RvX2xlMTYobGVuKTsKIAogCS8qIFRPRE8gbmVlZCB0aGlzIGZvciBidXJzdCBtb2RlIGxhdGVyIG9uICovCi0JaXdsMzk0NV9idWlsZF90eF9jbWRfYmFzaWMocHJpdiwgb3V0X2NtZCwgaW5mbywgaGRyLCB1bmljYXN0LCBzdGFfaWQpOworCWl3bDM5NDVfYnVpbGRfdHhfY21kX2Jhc2ljKHByaXYsIG91dF9jbWQsIGluZm8sIGhkciwgc3RhX2lkKTsKIAogCS8qIHNldCBpc19oY2NhIHRvIDA7IGl0IHByb2JhYmx5IHdpbGwgbmV2ZXIgYmUgaW1wbGVtZW50ZWQgKi8KIAlpd2wzOTQ1X2h3X2J1aWxkX3R4X2NtZF9yYXRlKHByaXYsIG91dF9jbWQsIGluZm8sIGhkciwgc3RhX2lkLCAwKTsKIAotCW91dF9jbWQtPmNtZC50eC50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19BTlRfQV9NU0s7Ci0Jb3V0X2NtZC0+Y21kLnR4LnR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX0FOVF9CX01TSzsKKwl0eC0+dHhfZmxhZ3MgJj0gflRYX0NNRF9GTEdfQU5UX0FfTVNLOworCXR4LT50eF9mbGFncyAmPSB+VFhfQ01EX0ZMR19BTlRfQl9NU0s7CiAKIAlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJdHhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAJCWlmIChxYykKLQkJCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udGlkW3RpZF0uc2VxX251bWJlciA9IHNlcV9udW1iZXI7CisJCQlwcml2LT5zdGF0aW9uc18zOVtzdGFfaWRdLnRpZFt0aWRdLnNlcV9udW1iZXIgPSBzZXFfbnVtYmVyOwogCX0gZWxzZSB7CiAJCXdhaXRfd3JpdGVfcHRyID0gMTsKIAkJdHhxLT5uZWVkX3VwZGF0ZSA9IDA7CiAJfQogCi0JaXdsMzk0NV9wcmludF9oZXhfZHVtcChJV0xfRExfVFgsIG91dF9jbWQtPmNtZC5wYXlsb2FkLAotCQkJICAgc2l6ZW9mKG91dF9jbWQtPmNtZC50eCkpOworCWl3bF9wcmludF9oZXhfZHVtcChwcml2LCBJV0xfRExfVFgsIHR4LCBzaXplb2YoKnR4KSk7CiAKLQlpd2wzOTQ1X3ByaW50X2hleF9kdW1wKElXTF9ETF9UWCwgKHU4ICopb3V0X2NtZC0+Y21kLnR4LmhkciwKKwlpd2xfcHJpbnRfaGV4X2R1bXAocHJpdiwgSVdMX0RMX1RYLCAodTggKil0eC0+aGRyLAogCQkJICAgaWVlZTgwMjExX2hkcmxlbihmYykpOwogCiAJLyogVGVsbCBkZXZpY2UgdGhlIHdyaXRlIGluZGV4ICpqdXN0IHBhc3QqIHRoaXMgbGF0ZXN0IGZpbGxlZCBURkQgKi8KIAlxLT53cml0ZV9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKLQlyYyA9IGl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOworCXJjID0gaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHR4cSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlpZiAoKGl3bDM5NDVfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspCisJaWYgKChpd2xfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspCiAJICAgICYmIHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpIHsKIAkJaWYgKHdhaXRfd3JpdGVfcHRyKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQkJdHhxLT5uZWVkX3VwZGF0ZSA9IDE7Ci0JCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKKwkJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQl9CiAKLQkJaWVlZTgwMjExX3N0b3BfcXVldWUocHJpdi0+aHcsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKKwkJaXdsX3N0b3BfcXVldWUocHJpdiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjY3NCwxNDIgKzExNzksNiBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9zZXRfcmF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gTlVMTDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGU7Ci0JaW50IGk7Ci0KLQlzYmFuZCA9IGl3bDM5NDVfZ2V0X2JhbmQocHJpdiwgcHJpdi0+YmFuZCk7Ci0JaWYgKCFzYmFuZCkgewotCQlJV0xfRVJST1IoIkZhaWxlZCB0byBzZXQgcmF0ZTogdW5hYmxlIHRvIGdldCBodyBtb2RlXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCXByaXYtPmFjdGl2ZV9yYXRlID0gMDsKLQlwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyA9IDA7Ci0KLQlJV0xfREVCVUdfUkFURSgiU2V0dGluZyByYXRlcyBmb3IgJXMgR0h6XG4iLAotCQkgICAgICAgc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiA/ICIyLjQiIDogIjUiKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7Ci0JCXJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOwotCQlpZiAoKHJhdGUtPmh3X3ZhbHVlIDwgSVdMX1JBVEVfQ09VTlQpICYmCi0JCSAgICAhKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpKSB7Ci0JCQlJV0xfREVCVUdfUkFURSgiQWRkaW5nIHJhdGUgaW5kZXggJWQgKHBsY3AgJWQpXG4iLAotCQkJCSAgICAgICByYXRlLT5od192YWx1ZSwgaXdsMzk0NV9yYXRlc1tyYXRlLT5od192YWx1ZV0ucGxjcCk7Ci0JCQlwcml2LT5hY3RpdmVfcmF0ZSB8PSAoMSA8PCByYXRlLT5od192YWx1ZSk7Ci0JCX0KLQl9Ci0KLQlJV0xfREVCVUdfUkFURSgiU2V0IGFjdGl2ZV9yYXRlID0gJTB4LCBhY3RpdmVfcmF0ZV9iYXNpYyA9ICUweFxuIiwKLQkJICAgICAgIHByaXYtPmFjdGl2ZV9yYXRlLCBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyk7Ci0KLQkvKgotCSAqIElmIGEgYmFzaWMgcmF0ZSBpcyBjb25maWd1cmVkLCB0aGVuIHVzZSBpdCAoYWRkaW5nIElXTF9SQVRFXzFNX01BU0spCi0JICogb3RoZXJ3aXNlIHNldCBpdCB0byB0aGUgZGVmYXVsdCBvZiBhbGwgQ0NLIHJhdGVzIGFuZCA2LCAxMiwgMjQgZm9yCi0JICogT0ZETQotCSAqLwotCWlmIChwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyAmIElXTF9DQ0tfQkFTSUNfUkFURVNfTUFTSykKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JCSAgICAoKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYKLQkJICAgICAgSVdMX0NDS19SQVRFU19NQVNLKSA+PiBJV0xfRklSU1RfQ0NLX1JBVEUpICYgMHhGOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLmNja19iYXNpY19yYXRlcyA9Ci0JCSAgICAoSVdMX0NDS19CQVNJQ19SQVRFU19NQVNLID4+IElXTF9GSVJTVF9DQ0tfUkFURSkgJiAweEY7Ci0KLQlpZiAocHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgJiBJV0xfT0ZETV9CQVNJQ19SQVRFU19NQVNLKQotCQlwcml2LT5zdGFnaW5nX3J4b24ub2ZkbV9iYXNpY19yYXRlcyA9Ci0JCSAgICAoKHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljICYKLQkJICAgICAgKElXTF9PRkRNX0JBU0lDX1JBVEVTX01BU0sgfCBJV0xfUkFURV82TV9NQVNLKSkgPj4KLQkJICAgICAgSVdMX0ZJUlNUX09GRE1fUkFURSkgJiAweEZGOwotCWVsc2UKLQkJcHJpdi0+c3RhZ2luZ19yeG9uLm9mZG1fYmFzaWNfcmF0ZXMgPQotCQkgICAoSVdMX09GRE1fQkFTSUNfUkFURVNfTUFTSyA+PiBJV0xfRklSU1RfT0ZETV9SQVRFKSAmIDB4RkY7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcmFkaW9fa2lsbF9zdyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCBpbnQgZGlzYWJsZV9yYWRpbykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCEhZGlzYWJsZV9yYWRpbyA9PSB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKLQotCUlXTF9ERUJVR19SRl9LSUxMKCJNYW51YWwgU1cgUkYgS0lMTCBzZXQgdG86IFJBRElPICVzXG4iLAotCQkJICBkaXNhYmxlX3JhZGlvID8gIk9GRiIgOiAiT04iKTsKLQotCWlmIChkaXNhYmxlX3JhZGlvKSB7Ci0JCWl3bDM5NDVfc2Nhbl9jYW5jZWwocHJpdik7Ci0JCS8qIEZJWE1FOiBUaGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgQVAgKi8KLQkJaWYgKHByaXYtPml3X21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfU0VULAotCQkJCSAgICBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlpd2wzOTQ1X3NlbmRfY2FyZF9zdGF0ZShwcml2LCBDQVJEX1NUQVRFX0NNRF9ESVNBQkxFLCAwKTsKLQkJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKLQotCWNsZWFyX2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JLyogd2FrZSB1cCB1Y29kZSAqLwotCW1zbGVlcCgxMCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxKTsKLQlpZiAoIWl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKQotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19SRl9LSUxMKCJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKLQkJCQkgICJkaXNhYmxlZCBieSBIVyBzd2l0Y2hcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHByaXYtPmlzX29wZW4pCi0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JcmV0dXJuOwotfQotCi12b2lkIGl3bDM5NDVfc2V0X2RlY3J5cHRlZF9mbGFnKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgdTMyIGRlY3J5cHRfcmVzLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHMpCi17Ci0JdTE2IGZjID0KLQkgICAgbGUxNl90b19jcHUoKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YSktPmZyYW1lX2NvbnRyb2wpOwotCi0JaWYgKHByaXYtPmFjdGl2ZV9yeG9uLmZpbHRlcl9mbGFncyAmIFJYT05fRklMVEVSX0RJU19ERUNSWVBUX01TSykKLQkJcmV0dXJuOwotCi0JaWYgKCEoZmMgJiBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpKQotCQlyZXR1cm47Ci0KLQlJV0xfREVCVUdfUlgoImRlY3J5cHRfcmVzOjB4JXhcbiIsIGRlY3J5cHRfcmVzKTsKLQlzd2l0Y2ggKGRlY3J5cHRfcmVzICYgUlhfUkVTX1NUQVRVU19TRUNfVFlQRV9NU0spIHsKLQljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfVEtJUDoKLQkJaWYgKChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSykgPT0KLQkJICAgIFJYX1JFU19TVEFUVVNfQkFEX0lDVl9NSUMpCi0JCQlzdGF0cy0+ZmxhZyB8PSBSWF9GTEFHX01NSUNfRVJST1I7Ci0JY2FzZSBSWF9SRVNfU1RBVFVTX1NFQ19UWVBFX1dFUDoKLQljYXNlIFJYX1JFU19TVEFUVVNfU0VDX1RZUEVfQ0NNUDoKLQkJaWYgKChkZWNyeXB0X3JlcyAmIFJYX1JFU19TVEFUVVNfREVDUllQVF9UWVBFX01TSykgPT0KLQkJICAgIFJYX1JFU19TVEFUVVNfREVDUllQVF9PSykgewotCQkJSVdMX0RFQlVHX1JYKCJodyBkZWNyeXB0IHN1Y2Nlc3NmdWxseSEhIVxuIik7Ci0JCQlzdGF0cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQogI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCiAKICNpbmNsdWRlICJpd2wtc3BlY3RydW0uaCIKQEAgLTI4NjMsMTMgKzEyMzIsMTMgQEAKIAlyZXR1cm4gY3B1X3RvX2xlMzIocmVzKTsKIH0KIAotc3RhdGljIGludCBpd2wzOTQ1X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGludCBpd2wzOTQ1X2dldF9tZWFzdXJlbWVudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgKnBhcmFtcywKIAkJCSAgICAgICB1OCB0eXBlKQogewotCXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX2NtZCBzcGVjdHJ1bTsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnJlczsKLQlzdHJ1Y3QgaXdsMzk0NV9ob3N0X2NtZCBjbWQgPSB7CisJc3RydWN0IGl3bF9zcGVjdHJ1bV9jbWQgc3BlY3RydW07CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlczsKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKIAkJLmlkID0gUkVQTFlfU1BFQ1RSVU1fTUVBU1VSRU1FTlRfQ01ELAogCQkuZGF0YSA9ICh2b2lkICopJnNwZWN0cnVtLAogCQkubWV0YS5mbGFncyA9IENNRF9XQU5UX1NLQiwKQEAgLTI4NzksNyArMTI0OCw3IEBACiAJaW50IHNwZWN0cnVtX3Jlc3Bfc3RhdHVzOwogCWludCBkdXJhdGlvbiA9IGxlMTZfdG9fY3B1KHBhcmFtcy0+ZHVyYXRpb24pOwogCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkKKwlpZiAoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpCiAJCWFkZF90aW1lID0KIAkJICAgIGl3bDM5NDVfdXNlY3NfdG9fYmVhY29ucygKIAkJCWxlNjRfdG9fY3B1KHBhcmFtcy0+c3RhcnRfdGltZSkgLSBwcml2LT5sYXN0X3RzZiwKQEAgLTI4OTQsNyArMTI2Myw3IEBACiAJY21kLmxlbiA9IHNpemVvZihzcGVjdHJ1bSk7CiAJc3BlY3RydW0ubGVuID0gY3B1X3RvX2xlMTYoY21kLmxlbiAtIHNpemVvZihzcGVjdHJ1bS5sZW4pKTsKIAotCWlmIChpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpCisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKQogCQlzcGVjdHJ1bS5zdGFydF90aW1lID0KIAkJICAgIGl3bDM5NDVfYWRkX2JlYWNvbl90aW1lKHByaXYtPmxhc3RfYmVhY29uX3RpbWUsCiAJCQkJYWRkX3RpbWUsCkBAIC0yOTA5LDEzICsxMjc4LDEzIEBACiAJCXNwZWN0cnVtLmZsYWdzIHw9IFJYT05fRkxHX0JBTkRfMjRHX01TSyB8CiAJCSAgICBSWE9OX0ZMR19BVVRPX0RFVEVDVF9NU0sgfCBSWE9OX0ZMR19UR0dfUFJPVEVDVF9NU0s7CiAKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKKwlyYyA9IGl3bF9zZW5kX2NtZF9zeW5jKHByaXYsICZjbWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JcmVzID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOworCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwogCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJST1IoIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9SWF9PTl9BU1NPQyBjb21tYW5kXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiQmFkIHJldHVybiBmcm9tIFJFUExZX1JYX09OX0FTU09DIGNvbW1hbmRcbiIpOwogCQlyYyA9IC1FSU87CiAJfQogCkBAIC0yOTIzLDcgKzEyOTIsNyBAQAogCXN3aXRjaCAoc3BlY3RydW1fcmVzcF9zdGF0dXMpIHsKIAljYXNlIDA6CQkvKiBDb21tYW5kIHdpbGwgYmUgaGFuZGxlZCAqLwogCQlpZiAocmVzLT51LnNwZWN0cnVtLmlkICE9IDB4ZmYpIHsKLQkJCUlXTF9ERUJVR19JTkZPKCJSZXBsYWNlZCBleGlzdGluZyBtZWFzdXJlbWVudDogJWRcbiIsCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiUmVwbGFjZWQgZXhpc3RpbmcgbWVhc3VyZW1lbnQ6ICVkXG4iLAogCQkJCQkJcmVzLT51LnNwZWN0cnVtLmlkKTsKIAkJCXByaXYtPm1lYXN1cmVtZW50X3N0YXR1cyAmPSB+TUVBU1VSRU1FTlRfUkVBRFk7CiAJCX0KQEAgLTI5NDIsMzAgKzEzMTEsMjkgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2FsaXZlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9hbGl2ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X2FsaXZlX3Jlc3AgKnBhbGl2ZTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaXdsX2FsaXZlX3Jlc3AgKnBhbGl2ZTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpwd29yazsKIAogCXBhbGl2ZSA9ICZwa3QtPnUuYWxpdmVfZnJhbWU7CiAKLQlJV0xfREVCVUdfSU5GTygiQWxpdmUgdWNvZGUgc3RhdHVzIDB4JTA4WCByZXZpc2lvbiAiCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkFsaXZlIHVjb2RlIHN0YXR1cyAweCUwOFggcmV2aXNpb24gIgogCQkgICAgICAgIjB4JTAxWCAweCUwMVhcbiIsCiAJCSAgICAgICBwYWxpdmUtPmlzX3ZhbGlkLCBwYWxpdmUtPnZlcl90eXBlLAogCQkgICAgICAgcGFsaXZlLT52ZXJfc3VidHlwZSk7CiAKIAlpZiAocGFsaXZlLT52ZXJfc3VidHlwZSA9PSBJTklUSUFMSVpFX1NVQlRZUEUpIHsKLQkJSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7Ci0JCW1lbWNweSgmcHJpdi0+Y2FyZF9hbGl2ZV9pbml0LAotCQkgICAgICAgJnBrdC0+dS5hbGl2ZV9mcmFtZSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9pbml0X2FsaXZlX3Jlc3ApKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJCW1lbWNweSgmcHJpdi0+Y2FyZF9hbGl2ZV9pbml0LCAmcGt0LT51LmFsaXZlX2ZyYW1lLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfYWxpdmVfcmVzcCkpOwogCQlwd29yayA9ICZwcml2LT5pbml0X2FsaXZlX3N0YXJ0OwogCX0gZWxzZSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSdW50aW1lIEFsaXZlIHJlY2VpdmVkLlxuIik7CiAJCW1lbWNweSgmcHJpdi0+Y2FyZF9hbGl2ZSwgJnBrdC0+dS5hbGl2ZV9mcmFtZSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9hbGl2ZV9yZXNwKSk7CisJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAJCXB3b3JrID0gJnByaXYtPmFsaXZlX3N0YXJ0OwogCQlpd2wzOTQ1X2Rpc2FibGVfZXZlbnRzKHByaXYpOwogCX0KQEAgLTI5NzYsOTUgKzEzNDQsMzEgQEAKIAkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgcHdvcmssCiAJCQkJICAgbXNlY3NfdG9famlmZmllcyg1KSk7CiAJZWxzZQotCQlJV0xfV0FSTklORygidUNvZGUgZGlkIG5vdCByZXNwb25kIE9LLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJ1Q29kZSBkaWQgbm90IHJlc3BvbmQgT0suXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9hZGRfc3RhKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOworI2VuZGlmCiAKLQlJV0xfREVCVUdfUlgoIlJlY2VpdmVkIFJFUExZX0FERF9TVEE6IDB4JTAyWFxuIiwgcGt0LT51LnN0YXR1cyk7CisJSVdMX0RFQlVHX1JYKHByaXYsICJSZWNlaXZlZCBSRVBMWV9BRERfU1RBOiAweCUwMlhcbiIsIHBrdC0+dS5zdGF0dXMpOwogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9yZXBseV9lcnJvcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0KLQlJV0xfRVJST1IoIkVycm9yIFJlcGx5IHR5cGUgMHglMDhYIGNtZCAlcyAoMHglMDJYKSAiCi0JCSJzZXEgMHglMDRYIHNlciAweCUwOFhcbiIsCi0JCWxlMzJfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5lcnJvcl90eXBlKSwKLQkJZ2V0X2NtZF9zdHJpbmcocGt0LT51LmVycl9yZXNwLmNtZF9pZCksCi0JCXBrdC0+dS5lcnJfcmVzcC5jbWRfaWQsCi0JCWxlMTZfdG9fY3B1KHBrdC0+dS5lcnJfcmVzcC5iYWRfY21kX3NlcV9udW0pLAotCQlsZTMyX3RvX2NwdShwa3QtPnUuZXJyX3Jlc3AuZXJyb3JfaW5mbykpOwotfQotCi0jZGVmaW5lIFRYX1NUQVRVU19FTlRSWSh4KSBjYXNlIFRYX1NUQVRVU19GQUlMXyAjIyB4OiByZXR1cm4gI3gKLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9jc2Eoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqcnhvbiA9ICh2b2lkICopJnByaXYtPmFjdGl2ZV9yeG9uOwotCXN0cnVjdCBpd2wzOTQ1X2NzYV9ub3RpZmljYXRpb24gKmNzYSA9ICYocGt0LT51LmNzYV9ub3RpZik7Ci0JSVdMX0RFQlVHXzExSCgiQ1NBIG5vdGlmOiBjaGFubmVsICVkLCBzdGF0dXMgJWRcbiIsCi0JCSAgICAgIGxlMTZfdG9fY3B1KGNzYS0+Y2hhbm5lbCksIGxlMzJfdG9fY3B1KGNzYS0+c3RhdHVzKSk7Ci0Jcnhvbi0+Y2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKLQlwcml2LT5zdGFnaW5nX3J4b24uY2hhbm5lbCA9IGNzYS0+Y2hhbm5lbDsKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCi0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX25vdGlmaWNhdGlvbiAqcmVwb3J0ID0gJihwa3QtPnUuc3BlY3RydW1fbm90aWYpOwotCi0JaWYgKCFyZXBvcnQtPnN0YXRlKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfMTFIIHwgSVdMX0RMX0lORk8sCi0JCQkgICJTcGVjdHJ1bSBNZWFzdXJlIE5vdGlmaWNhdGlvbjogU3RhcnRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbWVtY3B5KCZwcml2LT5tZWFzdXJlX3JlcG9ydCwgcmVwb3J0LCBzaXplb2YoKnJlcG9ydCkpOwotCXByaXYtPm1lYXN1cmVtZW50X3N0YXR1cyB8PSBNRUFTVVJFTUVOVF9SRUFEWTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3BtX3NsZWVwX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc2xlZXBfbm90aWZpY2F0aW9uICpzbGVlcCA9ICYocGt0LT51LnNsZWVwX25vdGlmKTsKLQlJV0xfREVCVUdfUlgoInNsZWVwIG1vZGU6ICVkLCBzcmM6ICVkXG4iLAotCQkgICAgIHNsZWVwLT5wbV9zbGVlcF9tb2RlLCBzbGVlcC0+cG1fd2FrZXVwX3NyYyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlJV0xfREVCVUdfUkFESU8oIkR1bXBpbmcgJWQgYnl0ZXMgb2YgdW5oYW5kbGVkICIKLQkJCSJub3RpZmljYXRpb24gZm9yICVzOlxuIiwKLQkJCWxlMzJfdG9fY3B1KHBrdC0+bGVuKSwgZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSk7Ci0JaXdsMzk0NV9wcmludF9oZXhfZHVtcChJV0xfRExfUkFESU8sIHBrdC0+dS5yYXcsIGxlMzJfdG9fY3B1KHBrdC0+bGVuKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfYmVhY29uX3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBiZWFjb25fdXBkYXRlKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9wcml2LCBiZWFjb25fdXBkYXRlKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uOwogCiAJLyogUHVsbCB1cGRhdGVkIEFQIGJlYWNvbiBmcm9tIG1hYzgwMjExLiB3aWxsIGZhaWwgaWYgbm90IGluIEFQIG1vZGUgKi8KIAliZWFjb24gPSBpZWVlODAyMTFfYmVhY29uX2dldChwcml2LT5odywgcHJpdi0+dmlmKTsKIAogCWlmICghYmVhY29uKSB7Ci0JCUlXTF9FUlJPUigidXBkYXRlIGJlYWNvbiBmYWlsZWRcbiIpOworCQlJV0xfRVJSKHByaXYsICJ1cGRhdGUgYmVhY29uIGZhaWxlZFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMwNzksMTUgKzEzODMsMTUgQEAKIAlpd2wzOTQ1X3NlbmRfYmVhY29uX2NtZChwcml2KTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9iZWFjb25fbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2JlYWNvbl9ub3RpZihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7Ci0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKIAlzdHJ1Y3QgaXdsMzk0NV9iZWFjb25fbm90aWYgKmJlYWNvbiA9ICYocGt0LT51LmJlYWNvbl9zdGF0dXMpOwogCXU4IHJhdGUgPSBiZWFjb24tPmJlYWNvbl9ub3RpZnlfaGRyLnJhdGU7CiAKLQlJV0xfREVCVUdfUlgoImJlYWNvbiBzdGF0dXMgJXggcmV0cmllcyAlZCBpc3MgJWQgIgorCUlXTF9ERUJVR19SWChwcml2LCAiYmVhY29uIHN0YXR1cyAleCByZXRyaWVzICVkIGlzcyAlZCAiCiAJCSJ0c2YgJWQgJWQgcmF0ZSAlZFxuIiwKIAkJbGUzMl90b19jcHUoYmVhY29uLT5iZWFjb25fbm90aWZ5X2hkci5zdGF0dXMpICYgVFhfU1RBVFVTX01TSywKIAkJYmVhY29uLT5iZWFjb25fbm90aWZ5X2hkci5mYWlsdXJlX2ZyYW1lLApAQCAtMzEwMSwxMzcgKzE0MDUsMjAgQEAKIAkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5iZWFjb25fdXBkYXRlKTsKIH0KIAotLyogU2VydmljZSByZXNwb25zZSB0byBSRVBMWV9TQ0FOX0NNRCAoMHg4MCkgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfcmVwbHlfc2NhbihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhOwotCXN0cnVjdCBpd2wzOTQ1X3NjYW5yZXFfbm90aWZpY2F0aW9uICpub3RpZiA9Ci0JICAgIChzdHJ1Y3QgaXdsMzk0NV9zY2FucmVxX25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7Ci0KLQlJV0xfREVCVUdfUlgoIlNjYW4gcmVxdWVzdCBzdGF0dXMgPSAweCV4XG4iLCBub3RpZi0+c3RhdHVzKTsKLSNlbmRpZgotfQotCi0vKiBTZXJ2aWNlIFNDQU5fU1RBUlRfTk9USUZJQ0FUSU9OICgweDgyKSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9zY2FuX3N0YXJ0X25vdGlmKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc2NhbnN0YXJ0X25vdGlmaWNhdGlvbiAqbm90aWYgPQotCSAgICAoc3RydWN0IGl3bDM5NDVfc2NhbnN0YXJ0X25vdGlmaWNhdGlvbiAqKXBrdC0+dS5yYXc7Ci0JcHJpdi0+c2Nhbl9zdGFydF90c2YgPSBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdyk7Ci0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gc3RhcnQ6ICIKLQkJICAgICAgICIlZCBbODAyLjExJXNdICIKLQkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAoYmVhY29uIHRpbWVyICV1KVxuIiwKLQkJICAgICAgIG5vdGlmLT5jaGFubmVsLAotCQkgICAgICAgbm90aWYtPmJhbmQgPyAiYmciIDogImEiLAotCQkgICAgICAgbm90aWYtPnRzZl9oaWdoLAotCQkgICAgICAgbm90aWYtPnRzZl9sb3csIG5vdGlmLT5zdGF0dXMsIG5vdGlmLT5iZWFjb25fdGltZXIpOwotfQotCi0vKiBTZXJ2aWNlIFNDQU5fUkVTVUxUU19OT1RJRklDQVRJT04gKDB4ODMpICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NjYW5fcmVzdWx0c19ub3RpZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICAgIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7Ci0Jc3RydWN0IGl3bDM5NDVfc2NhbnJlc3VsdHNfbm90aWZpY2F0aW9uICpub3RpZiA9Ci0JICAgIChzdHJ1Y3QgaXdsMzk0NV9zY2FucmVzdWx0c19ub3RpZmljYXRpb24gKilwa3QtPnUucmF3OwotCi0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gY2gucmVzOiAiCi0JCSAgICAgICAiJWQgWzgwMi4xMSVzXSAiCi0JCSAgICAgICAiKFRTRjogMHglMDhYOiUwOFgpIC0gJWQgIgotCQkgICAgICAgImVsYXBzZWQ9JWx1IHVzZWMgKCVkbXMgc2luY2UgbGFzdClcbiIsCi0JCSAgICAgICBub3RpZi0+Y2hhbm5lbCwKLQkJICAgICAgIG5vdGlmLT5iYW5kID8gImJnIiA6ICJhIiwKLQkJICAgICAgIGxlMzJfdG9fY3B1KG5vdGlmLT50c2ZfaGlnaCksCi0JCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdyksCi0JCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+c3RhdGlzdGljc1swXSksCi0JCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdykgLSBwcml2LT5zY2FuX3N0YXJ0X3RzZiwKLQkJICAgICAgIGppZmZpZXNfdG9fbXNlY3MoZWxhcHNlZF9qaWZmaWVzCi0JCQkJCShwcml2LT5sYXN0X3NjYW5famlmZmllcywgamlmZmllcykpKTsKLQotCXByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzID0gamlmZmllczsKLQlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IDA7Ci19Ci0KLS8qIFNlcnZpY2UgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04gKDB4ODQpICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3NjYW5fY29tcGxldGVfbm90aWYoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgc3RydWN0IGl3bDM5NDVfcnhfbWVtX2J1ZmZlciAqcnhiKQotewotCXN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqcGt0ID0gKHZvaWQgKilyeGItPnNrYi0+ZGF0YTsKLQlzdHJ1Y3QgaXdsMzk0NV9zY2FuY29tcGxldGVfbm90aWZpY2F0aW9uICpzY2FuX25vdGlmID0gKHZvaWQgKilwa3QtPnUucmF3OwotCi0JSVdMX0RFQlVHX1NDQU4oIlNjYW4gY29tcGxldGU6ICVkIGNoYW5uZWxzIChUU0YgMHglMDhYOiUwOFgpIC0gJWRcbiIsCi0JCSAgICAgICBzY2FuX25vdGlmLT5zY2FubmVkX2NoYW5uZWxzLAotCQkgICAgICAgc2Nhbl9ub3RpZi0+dHNmX2xvdywKLQkJICAgICAgIHNjYW5fbm90aWYtPnRzZl9oaWdoLCBzY2FuX25vdGlmLT5zdGF0dXMpOwotCi0JLyogVGhlIEhXIGlzIG5vIGxvbmdlciBzY2FubmluZyAqLwotCWNsZWFyX2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKiBUaGUgc2NhbiBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBjYW1lIGluLCBzbyBraWxsIHRoYXQgdGltZXIuLi4gKi8KLQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKLQotCUlXTF9ERUJVR19JTkZPKCJTY2FuIHBhc3Mgb24gJXNHSHogdG9vayAlZG1zXG4iLAotCQkgICAgICAgKHByaXYtPnNjYW5fYmFuZHMgJiBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWikpID8KLQkJCQkJCQkiMi40IiA6ICI1LjIiLAotCQkgICAgICAgamlmZmllc190b19tc2VjcyhlbGFwc2VkX2ppZmZpZXMKLQkJCQkJKHByaXYtPnNjYW5fcGFzc19zdGFydCwgamlmZmllcykpKTsKLQotCS8qIFJlbW92ZSB0aGlzIHNjYW5uZWQgYmFuZCBmcm9tIHRoZSBsaXN0IG9mIHBlbmRpbmcKLQkgKiBiYW5kcyB0byBzY2FuLCBiYW5kIEcgcHJlY2VkZXMgQSBpbiBvcmRlciBvZiBzY2FubmluZwotCSAqIGFzIHNlZW4gaW4gaXdsMzk0NV9iZ19yZXF1ZXN0X3NjYW4gKi8KLQlpZiAocHJpdi0+c2Nhbl9iYW5kcyAmIEJJVChJRUVFODAyMTFfQkFORF8yR0haKSkKLQkJcHJpdi0+c2Nhbl9iYW5kcyAmPSB+QklUKElFRUU4MDIxMV9CQU5EXzJHSFopOwotCWVsc2UgaWYgKHByaXYtPnNjYW5fYmFuZHMgJiAgQklUKElFRUU4MDIxMV9CQU5EXzVHSFopKQotCQlwcml2LT5zY2FuX2JhbmRzICY9IH5CSVQoSUVFRTgwMjExX0JBTkRfNUdIWik7Ci0KLQkvKiBJZiBhIHJlcXVlc3QgdG8gYWJvcnQgd2FzIGdpdmVuLCBvciB0aGUgc2NhbiBkaWQgbm90IHN1Y2NlZWQKLQkgKiB0aGVuIHdlIHJlc2V0IHRoZSBzY2FuIHN0YXRlIG1hY2hpbmUgYW5kIHRlcm1pbmF0ZSwKLQkgKiByZS1xdWV1aW5nIGFub3RoZXIgc2NhbiBpZiBvbmUgaGFzIGJlZW4gcmVxdWVzdGVkICovCi0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0FCT1JUSU5HLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiQWJvcnRlZCBzY2FuIGNvbXBsZXRlZC5cbiIpOwotCQljbGVhcl9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwotCX0gZWxzZSB7Ci0JCS8qIElmIHRoZXJlIGFyZSBtb3JlIGJhbmRzIG9uIHRoaXMgc2NhbiBwYXNzIHJlc2NoZWR1bGUgKi8KLQkJaWYgKHByaXYtPnNjYW5fYmFuZHMgPiAwKQotCQkJZ290byByZXNjaGVkdWxlOwotCX0KLQotCXByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzID0gamlmZmllczsKLQlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IDA7Ci0JSVdMX0RFQlVHX0lORk8oIlNldHRpbmcgc2NhbiB0byBvZmZcbiIpOwotCi0JY2xlYXJfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7Ci0KLQlJV0xfREVCVUdfSU5GTygiU2NhbiB0b29rICVkbXNcbiIsCi0JCWppZmZpZXNfdG9fbXNlY3MoZWxhcHNlZF9qaWZmaWVzKHByaXYtPnNjYW5fc3RhcnQsIGppZmZpZXMpKSk7Ci0KLQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY29tcGxldGVkKTsKLQotCXJldHVybjsKLQotcmVzY2hlZHVsZToKLQlwcml2LT5zY2FuX3Bhc3Nfc3RhcnQgPSBqaWZmaWVzOwotCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKLX0KLQogLyogSGFuZGxlIG5vdGlmaWNhdGlvbiBmcm9tIHVDb2RlIHRoYXQgY2FyZCdzIHBvd2VyIHN0YXRlIGlzIGNoYW5naW5nCiAgKiBkdWUgdG8gc29mdHdhcmUsIGhhcmR3YXJlLCBvciBjcml0aWNhbCB0ZW1wZXJhdHVyZSBSRktJTEwgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfcnhfY2FyZF9zdGF0ZV9ub3RpZihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X2NhcmRfc3RhdGVfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCA9ICh2b2lkICopcnhiLT5za2ItPmRhdGE7CiAJdTMyIGZsYWdzID0gbGUzMl90b19jcHUocGt0LT51LmNhcmRfc3RhdGVfbm90aWYuZmxhZ3MpOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzID0gcHJpdi0+c3RhdHVzOwogCi0JSVdMX0RFQlVHX1JGX0tJTEwoIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzXG4iLAorCUlXTF9ERUJVR19SRl9LSUxMKHByaXYsICJDYXJkIHN0YXRlIHJlY2VpdmVkOiBIVzolcyBTVzolc1xuIiwKIAkJCSAgKGZsYWdzICYgSFdfQ0FSRF9ESVNBQkxFRCkgPyAiS2lsbCIgOiAiT24iLAogCQkJICAoZmxhZ3MgJiBTV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIpOwogCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9TRVQsCiAJCSAgICBDU1JfVUNPREVfRFJWX0dQMV9CSVRfQ01EX0JMT0NLRUQpOwogCiAJaWYgKGZsYWdzICYgSFdfQ0FSRF9ESVNBQkxFRCkKQEAgLTMyNDUsNyArMTQzMiw3IEBACiAJZWxzZQogCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfU1csICZwcml2LT5zdGF0dXMpOwogCi0JaXdsMzk0NV9zY2FuX2NhbmNlbChwcml2KTsKKwlpd2xfc2Nhbl9jYW5jZWwocHJpdik7CiAKIAlpZiAoKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmc3RhdHVzKSAhPQogCSAgICAgdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpKSB8fApAQCAtMzI2NSwxNyArMTQ1MiwxNSBAQAogICogVGhpcyBmdW5jdGlvbiBjaGFpbnMgaW50byB0aGUgaGFyZHdhcmUgc3BlY2lmaWMgZmlsZXMgZm9yIHRoZW0gdG8gc2V0dXAKICAqIGFueSBoYXJkd2FyZSBzcGVjaWZpYyBoYW5kbGVycyBhcyB3ZWxsLgogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NldHVwX3J4X2hhbmRsZXJzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X3NldHVwX3J4X2hhbmRsZXJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9BTElWRV0gPSBpd2wzOTQ1X3J4X3JlcGx5X2FsaXZlOwogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0FERF9TVEFdID0gaXdsMzk0NV9yeF9yZXBseV9hZGRfc3RhOwotCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0VSUk9SXSA9IGl3bDM5NDVfcnhfcmVwbHlfZXJyb3I7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OXSA9IGl3bDM5NDVfcnhfY3NhOwotCXByaXYtPnJ4X2hhbmRsZXJzW1NQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OXSA9Ci0JICAgIGl3bDM5NDVfcnhfc3BlY3RydW1fbWVhc3VyZV9ub3RpZjsKLQlwcml2LT5yeF9oYW5kbGVyc1tQTV9TTEVFUF9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9wbV9zbGVlcF9ub3RpZjsKKwlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9FUlJPUl0gPSBpd2xfcnhfcmVwbHlfZXJyb3I7CisJcHJpdi0+cnhfaGFuZGxlcnNbQ0hBTk5FTF9TV0lUQ0hfTk9USUZJQ0FUSU9OXSA9IGl3bF9yeF9jc2E7CisJcHJpdi0+cnhfaGFuZGxlcnNbUE1fU0xFRVBfTk9USUZJQ0FUSU9OXSA9IGl3bF9yeF9wbV9zbGVlcF9ub3RpZjsKIAlwcml2LT5yeF9oYW5kbGVyc1tQTV9ERUJVR19TVEFUSVNUSUNfTk9USUZJQ10gPQotCSAgICBpd2wzOTQ1X3J4X3BtX2RlYnVnX3N0YXRpc3RpY3Nfbm90aWY7CisJICAgIGl3bF9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmOwogCXByaXYtPnJ4X2hhbmRsZXJzW0JFQUNPTl9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9iZWFjb25fbm90aWY7CiAKIAkvKgpAQCAtMzI4Niw5MCArMTQ3MSwxNCBAQAogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1NUQVRJU1RJQ1NfQ01EXSA9IGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljczsKIAlwcml2LT5yeF9oYW5kbGVyc1tTVEFUSVNUSUNTX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X2h3X3J4X3N0YXRpc3RpY3M7CiAKLQlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9TQ0FOX0NNRF0gPSBpd2wzOTQ1X3J4X3JlcGx5X3NjYW47Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU0NBTl9TVEFSVF9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9zY2FuX3N0YXJ0X25vdGlmOwotCXByaXYtPnJ4X2hhbmRsZXJzW1NDQU5fUkVTVUxUU19OT1RJRklDQVRJT05dID0KLQkgICAgaXdsMzk0NV9yeF9zY2FuX3Jlc3VsdHNfbm90aWY7Ci0JcHJpdi0+cnhfaGFuZGxlcnNbU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT05dID0KLQkgICAgaXdsMzk0NV9yeF9zY2FuX2NvbXBsZXRlX25vdGlmOworCWl3bF9zZXR1cF9zcGVjdHJ1bV9oYW5kbGVycyhwcml2KTsKKwlpd2xfc2V0dXBfcnhfc2Nhbl9oYW5kbGVycyhwcml2KTsKIAlwcml2LT5yeF9oYW5kbGVyc1tDQVJEX1NUQVRFX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X3J4X2NhcmRfc3RhdGVfbm90aWY7CiAKIAkvKiBTZXQgdXAgaGFyZHdhcmUgc3BlY2lmaWMgUnggaGFuZGxlcnMgKi8KIAlpd2wzOTQ1X2h3X3J4X2hhbmRsZXJfc2V0dXAocHJpdik7CiB9CiAKLS8qKgotICogaXdsMzk0NV9jbWRfcXVldWVfcmVjbGFpbSAtIFJlY2xhaW0gQ01EIHF1ZXVlIGVudHJpZXMKLSAqIFdoZW4gRlcgYWR2YW5jZXMgJ1InIGluZGV4LCBhbGwgZW50cmllcyBiZXR3ZWVuIG9sZCBhbmQgbmV3ICdSJyBpbmRleAotICogbmVlZCB0byBiZSByZWNsYWltZWQuCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfY21kX3F1ZXVlX3JlY2xhaW0oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQkgICAgICBpbnQgdHhxX2lkLCBpbnQgaW5kZXgpCi17Ci0Jc3RydWN0IGl3bDM5NDVfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKLQlzdHJ1Y3QgaXdsMzk0NV9xdWV1ZSAqcSA9ICZ0eHEtPnE7Ci0JaW50IG5mcmVlZCA9IDA7Ci0KLQlpZiAoKGluZGV4ID49IHEtPm5fYmQpIHx8IChpd2wzOTQ1X3gyX3F1ZXVlX3VzZWQocSwgaW5kZXgpID09IDApKSB7Ci0JCUlXTF9FUlJPUigiUmVhZCBpbmRleCBmb3IgRE1BIHF1ZXVlIHR4cSBpZCAoJWQpLCBpbmRleCAlZCwgIgotCQkJICAiaXMgb3V0IG9mIHJhbmdlIFswLSVkXSAlZCAlZC5cbiIsIHR4cV9pZCwKLQkJCSAgaW5kZXgsIHEtPm5fYmQsIHEtPndyaXRlX3B0ciwgcS0+cmVhZF9wdHIpOwotCQlyZXR1cm47Ci0JfQotCi0JZm9yIChpbmRleCA9IGl3bF9xdWV1ZV9pbmNfd3JhcChpbmRleCwgcS0+bl9iZCk7IHEtPnJlYWRfcHRyICE9IGluZGV4OwotCQlxLT5yZWFkX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT5yZWFkX3B0ciwgcS0+bl9iZCkpIHsKLQkJaWYgKG5mcmVlZCA+IDEpIHsKLQkJCUlXTF9FUlJPUigiSENNRCBza2lwcGVkOiBpbmRleCAoJWQpICVkICVkXG4iLCBpbmRleCwKLQkJCQkJcS0+d3JpdGVfcHRyLCBxLT5yZWFkX3B0cik7Ci0JCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJbmZyZWVkKys7Ci0JfQotfQotCi0KLS8qKgotICogaXdsMzk0NV90eF9jbWRfY29tcGxldGUgLSBQdWxsIHVudXNlZCBidWZmZXJzIG9mZiB0aGUgcXVldWUgYW5kIHJlY2xhaW0gdGhlbQotICogQHJ4YjogUnggYnVmZmVyIHRvIHJlY2xhaW0KLSAqCi0gKiBJZiBhbiBSeCBidWZmZXIgaGFzIGFuIGFzeW5jIGNhbGxiYWNrIGFzc29jaWF0ZWQgd2l0aCBpdCB0aGUgY2FsbGJhY2sKLSAqIHdpbGwgYmUgZXhlY3V0ZWQuICBUaGUgYXR0YWNoZWQgc2tiIChpZiBwcmVzZW50KSB3aWxsIG9ubHkgYmUgZnJlZWQKLSAqIGlmIHRoZSBjYWxsYmFjayByZXR1cm5zIDEKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV90eF9jbWRfY29tcGxldGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGIpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3QgPSAoc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICopcnhiLT5za2ItPmRhdGE7Ci0JdTE2IHNlcXVlbmNlID0gbGUxNl90b19jcHUocGt0LT5oZHIuc2VxdWVuY2UpOwotCWludCB0eHFfaWQgPSBTRVFfVE9fUVVFVUUoc2VxdWVuY2UpOwotCWludCBpbmRleCA9IFNFUV9UT19JTkRFWChzZXF1ZW5jZSk7Ci0JaW50IGh1Z2UgPSBzZXF1ZW5jZSAmIFNFUV9IVUdFX0ZSQU1FOwotCWludCBjbWRfaW5kZXg7Ci0Jc3RydWN0IGl3bDM5NDVfY21kICpjbWQ7Ci0KLQlCVUdfT04odHhxX2lkICE9IElXTF9DTURfUVVFVUVfTlVNKTsKLQotCWNtZF9pbmRleCA9IGdldF9jbWRfaW5kZXgoJnByaXYtPnR4cVtJV0xfQ01EX1FVRVVFX05VTV0ucSwgaW5kZXgsIGh1Z2UpOwotCWNtZCA9ICZwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dLmNtZFtjbWRfaW5kZXhdOwotCi0JLyogSW5wdXQgZXJyb3IgY2hlY2tpbmcgaXMgZG9uZSB3aGVuIGNvbW1hbmRzIGFyZSBhZGRlZCB0byBxdWV1ZS4gKi8KLQlpZiAoY21kLT5tZXRhLmZsYWdzICYgQ01EX1dBTlRfU0tCKSB7Ci0JCWNtZC0+bWV0YS5zb3VyY2UtPnUuc2tiID0gcnhiLT5za2I7Ci0JCXJ4Yi0+c2tiID0gTlVMTDsKLQl9IGVsc2UgaWYgKGNtZC0+bWV0YS51LmNhbGxiYWNrICYmCi0JCSAgICFjbWQtPm1ldGEudS5jYWxsYmFjayhwcml2LCBjbWQsIHJ4Yi0+c2tiKSkKLQkJcnhiLT5za2IgPSBOVUxMOwotCi0JaXdsMzk0NV9jbWRfcXVldWVfcmVjbGFpbShwcml2LCB0eHFfaWQsIGluZGV4KTsKLQotCWlmICghKGNtZC0+bWV0YS5mbGFncyAmIENNRF9BU1lOQykpIHsKLQkJY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQl9Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiBSWC1GVU5DVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCiAgKiBSeCB0aGVvcnkgb2Ygb3BlcmF0aW9uCkBAIC0zNDE3LDcgKzE1MjYsNiBAQAogICoKICAqIERyaXZlciBzZXF1ZW5jZToKICAqCi0gKiBpd2wzOTQ1X3J4X3F1ZXVlX2FsbG9jKCkgICBBbGxvY2F0ZXMgcnhfZnJlZQogICogaXdsMzk0NV9yeF9yZXBsZW5pc2goKSAgICAgUmVwbGVuaXNoZXMgcnhfZnJlZSBsaXN0IGZyb20gcnhfdXNlZCwgYW5kIGNhbGxzCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2sKICAqIGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jaygpIE1vdmVzIGF2YWlsYWJsZSBidWZmZXJzIGZyb20gcnhfZnJlZSBpbnRvIFJ4CkBAIC0zNDI2LDcgKzE1MzQsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIGF2YWlsYWJsZSwgc2NoZWR1bGVzIGl3bDM5NDVfcnhfcmVwbGVuaXNoCiAgKgogICogLS0gZW5hYmxlIGludGVycnVwdHMgLS0KLSAqIElTUiAtIGl3bDM5NDVfcngoKSAgICAgICAgIERldGFjaCBpd2wzOTQ1X3J4X21lbV9idWZmZXJzIGZyb20gcG9vbCB1cCB0byB0aGUKKyAqIElTUiAtIGl3bDM5NDVfcngoKSAgICAgICAgIERldGFjaCBpd2xfcnhfbWVtX2J1ZmZlcnMgZnJvbSBwb29sIHVwIHRvIHRoZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVBRCBJTkRFWCwgZGV0YWNoaW5nIHRoZSBTS0IgZnJvbSB0aGUgcG9vbC4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVzIHRoZSBwYWNrZXQgYnVmZmVyIGZyb20gcXVldWUgdG8gcnhfdXNlZC4KICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxzIGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jayB0byByZWZpbGwgYW55IGVtcHR5CkBAIC0zNDM2LDcwICsxNTQ0LDkgQEAKICAqLwogCiAvKioKLSAqIGl3bDM5NDVfcnhfcXVldWVfc3BhY2UgLSBSZXR1cm4gbnVtYmVyIG9mIGZyZWUgc2xvdHMgYXZhaWxhYmxlIGluIHF1ZXVlLgotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcnhfcXVldWVfc3BhY2UoY29uc3Qgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnEpCi17Ci0JaW50IHMgPSBxLT5yZWFkIC0gcS0+d3JpdGU7Ci0JaWYgKHMgPD0gMCkKLQkJcyArPSBSWF9RVUVVRV9TSVpFOwotCS8qIGtlZXAgc29tZSBidWZmZXIgdG8gbm90IGNvbmZ1c2UgZnVsbCBhbmQgZW1wdHkgcXVldWUgKi8KLQlzIC09IDI7Ci0JaWYgKHMgPCAwKQotCQlzID0gMDsKLQlyZXR1cm4gczsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIgLSBVcGRhdGUgdGhlIHdyaXRlIHBvaW50ZXIgZm9yIHRoZSBSWCBxdWV1ZQotICovCi1pbnQgaXdsMzk0NV9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpxKQotewotCXUzMiByZWcgPSAwOwotCWludCByYyA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAocS0+bmVlZF91cGRhdGUgPT0gMCkKLQkJZ290byBleGl0X3VubG9jazsKLQotCS8qIElmIHBvd2VyLXNhdmluZyBpcyBpbiB1c2UsIG1ha2Ugc3VyZSBkZXZpY2UgaXMgYXdha2UgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cykpIHsKLQkJcmVnID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOwotCi0JCWlmIChyZWcgJiBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQKSB7Ci0JCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0FDQ0VTU19SRVEpOwotCQkJZ290byBleGl0X3VubG9jazsKLQkJfQotCi0JCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JCWlmIChyYykKLQkJCWdvdG8gZXhpdF91bmxvY2s7Ci0KLQkJLyogRGV2aWNlIGV4cGVjdHMgYSBtdWx0aXBsZSBvZiA4ICovCi0JCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgRkhfUlNDU1JfQ0hOTDBfV1BUUiwKLQkJCQkgICAgIHEtPndyaXRlICYgfjB4Nyk7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCi0JLyogRWxzZSBkZXZpY2UgaXMgYXNzdW1lZCB0byBiZSBhd2FrZSAqLwotCX0gZWxzZQotCQkvKiBEZXZpY2UgZXhwZWN0cyBhIG11bHRpcGxlIG9mIDggKi8KLQkJaXdsMzk0NV93cml0ZTMyKHByaXYsIEZIX1JTQ1NSX0NITkwwX1dQVFIsIHEtPndyaXRlICYgfjB4Nyk7Ci0KLQotCXEtPm5lZWRfdXBkYXRlID0gMDsKLQotIGV4aXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgogICogaXdsMzk0NV9kbWFfYWRkcjJyYmRfcHRyIC0gY29udmVydCBhIERNQSBhZGRyZXNzIHRvIGEgdUNvZGUgcmVhZCBidWZmZXIgcHRyCiAgKi8KLXN0YXRpYyBpbmxpbmUgX19sZTMyIGl3bDM5NDVfZG1hX2FkZHIycmJkX3B0cihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAorc3RhdGljIGlubGluZSBfX2xlMzIgaXdsMzk0NV9kbWFfYWRkcjJyYmRfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJICBkbWFfYWRkcl90IGRtYV9hZGRyKQogewogCXJldHVybiBjcHVfdG9fbGUzMigodTMyKWRtYV9hZGRyKTsKQEAgLTM1MTYsMjQgKzE1NjMsMjQgQEAKICAqIGFsc28gdXBkYXRlcyB0aGUgbWVtb3J5IGFkZHJlc3MgaW4gdGhlIGZpcm13YXJlIHRvIHJlZmVyZW5jZSB0aGUgbmV3CiAgKiB0YXJnZXQgYnVmZmVyLgogICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcnhfcXVldWVfcmVzdG9jayhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2soc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCXN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOworCXN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGI7CisJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgd3JpdGUsIHJjOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogCXdyaXRlID0gcnhxLT53cml0ZSAmIH4weDc7Ci0Jd2hpbGUgKChpd2wzOTQ1X3J4X3F1ZXVlX3NwYWNlKHJ4cSkgPiAwKSAmJiAocnhxLT5mcmVlX2NvdW50KSkgeworCXdoaWxlICgoaXdsX3J4X3F1ZXVlX3NwYWNlKHJ4cSkgPiAwKSAmJiAocnhxLT5mcmVlX2NvdW50KSkgewogCQkvKiBHZXQgbmV4dCBmcmVlIFJ4IGJ1ZmZlciwgcmVtb3ZlIGZyb20gZnJlZSBsaXN0ICovCiAJCWVsZW1lbnQgPSByeHEtPnJ4X2ZyZWUubmV4dDsKLQkJcnhiID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyLCBsaXN0KTsKKwkJcnhiID0gbGlzdF9lbnRyeShlbGVtZW50LCBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIsIGxpc3QpOwogCQlsaXN0X2RlbChlbGVtZW50KTsKIAogCQkvKiBQb2ludCB0byBSeCBidWZmZXIgdmlhIG5leHQgUkJEIGluIGNpcmN1bGFyIGJ1ZmZlciAqLwotCQlyeHEtPmJkW3J4cS0+d3JpdGVdID0gaXdsMzk0NV9kbWFfYWRkcjJyYmRfcHRyKHByaXYsIHJ4Yi0+ZG1hX2FkZHIpOworCQlyeHEtPmJkW3J4cS0+d3JpdGVdID0gaXdsMzk0NV9kbWFfYWRkcjJyYmRfcHRyKHByaXYsIHJ4Yi0+cmVhbF9kbWFfYWRkcik7CiAJCXJ4cS0+cXVldWVbcnhxLT53cml0ZV0gPSByeGI7CiAJCXJ4cS0+d3JpdGUgPSAocnhxLT53cml0ZSArIDEpICYgUlhfUVVFVUVfTUFTSzsKIAkJcnhxLT5mcmVlX2NvdW50LS07CkBAIC0zNTUyLDcgKzE1OTksNyBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7CiAJCXJ4cS0+bmVlZF91cGRhdGUgPSAxOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyeHEtPmxvY2ssIGZsYWdzKTsKLQkJcmMgPSBpd2wzOTQ1X3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgcnhxKTsKKwkJcmMgPSBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCByeHEpOwogCQlpZiAocmMpCiAJCQlyZXR1cm4gcmM7CiAJfQpAQCAtMzU2OCwyNCArMTYxNSwyNCBAQAogICogQWxzbyByZXN0b2NrIHRoZSBSeCBxdWV1ZSB2aWEgaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrLgogICogVGhpcyBpcyBjYWxsZWQgYXMgYSBzY2hlZHVsZWQgd29yayBpdGVtIChleGNlcHQgZm9yIGR1cmluZyBpbml0aWFsaXphdGlvbikKICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9hbGxvY2F0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9hbGxvY2F0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CisJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbGVtZW50OwotCXN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIgKnJ4YjsKKwlzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJnJ4cS0+cnhfdXNlZCkpIHsKIAkJZWxlbWVudCA9IHJ4cS0+cnhfdXNlZC5uZXh0OwotCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2wzOTQ1X3J4X21lbV9idWZmZXIsIGxpc3QpOworCQlyeGIgPSBsaXN0X2VudHJ5KGVsZW1lbnQsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciwgbGlzdCk7CiAKIAkJLyogQWxsb2MgYSBuZXcgcmVjZWl2ZSBidWZmZXIgKi8KIAkJcnhiLT5za2IgPQotCQkgICAgYWxsb2Nfc2tiKElXTF9SWF9CVUZfU0laRSwgX19HRlBfTk9XQVJOIHwgR0ZQX0FUT01JQyk7CisJCSAgICBhbGxvY19za2IocHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAorCQkJCV9fR0ZQX05PV0FSTiB8IEdGUF9BVE9NSUMpOwogCQlpZiAoIXJ4Yi0+c2tiKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0NSSVQgRFJWX05BTUUKLQkJCQkgICAgICAgIjogQ2FuIG5vdCBhbGxvY2F0ZSBTS0IgYnVmZmVyc1xuIik7CisJCQkJSVdMX0NSSVQocHJpdiwgIjogQ2FuIG5vdCBhbGxvY2F0ZSBTS0IgYnVmZmVyc1xuIik7CiAJCQkvKiBXZSBkb24ndCByZXNjaGVkdWxlIHJlcGxlbmlzaCB3b3JrIGhlcmUgLS0gd2Ugd2lsbAogCQkJICogY2FsbCB0aGUgcmVzdG9jayBtZXRob2QgYW5kIGlmIGl0IHN0aWxsIG5lZWRzCiAJCQkgKiBtb3JlIGJ1ZmZlcnMgaXQgd2lsbCBzY2hlZHVsZSByZXBsZW5pc2ggKi8KQEAgLTM2MDQsOSArMTY1MSwxMCBAQAogCQlsaXN0X2RlbChlbGVtZW50KTsKIAogCQkvKiBHZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBSQi9TS0IgKi8KLQkJcnhiLT5kbWFfYWRkciA9Ci0JCSAgICBwY2lfbWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCByeGItPnNrYi0+ZGF0YSwKLQkJCQkgICBJV0xfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXJ4Yi0+cmVhbF9kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCisJCQkJCQlyeGItPnNrYi0+ZGF0YSwKKwkJCQkJCXByaXYtPmh3X3BhcmFtcy5yeF9idWZfc2l6ZSwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWxpc3RfYWRkX3RhaWwoJnJ4Yi0+bGlzdCwgJnJ4cS0+cnhfZnJlZSk7CiAJCXJ4cS0+ZnJlZV9jb3VudCsrOwogCX0KQEAgLTM2MTgsNyArMTY2Niw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faXdsMzk0NV9yeF9yZXBsZW5pc2godm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkYXRhOwogCiAJaXdsMzk0NV9yeF9hbGxvY2F0ZShwcml2KTsKIAlpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2socHJpdik7CkBAIC0zNjI3LDcgKzE2NzUsNyBAQAogCiB2b2lkIGl3bDM5NDVfcnhfcmVwbGVuaXNoKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaXdsMzk0NV9yeF9hbGxvY2F0ZShwcml2KTsKQEAgLTM2MzcsODQgKzE2ODUsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIH0KIAotLyogQXNzdW1lcyB0aGF0IHRoZSBza2IgZmllbGQgb2YgdGhlIGJ1ZmZlcnMgaW4gJ3Bvb2wnIGlzIGtlcHQgYWNjdXJhdGUuCi0gKiBJZiBhbiBTS0IgaGFzIGJlZW4gZGV0YWNoZWQsIHRoZSBQT09MIG5lZWRzIHRvIGhhdmUgaXRzIFNLQiBzZXQgdG8gTlVMTAotICogVGhpcyBmcmVlIHJvdXRpbmUgd2Fsa3MgdGhlIGxpc3Qgb2YgUE9PTCBlbnRyaWVzIGFuZCBpZiBTS0IgaXMgc2V0IHRvCi0gKiBub24gTlVMTCBpdCBpcyB1bm1hcHBlZCBhbmQgZnJlZWQKLSAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9xdWV1ZV9mcmVlKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIHN0cnVjdCBpd2wzOTQ1X3J4X3F1ZXVlICpyeHEpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IFJYX1FVRVVFX1NJWkUgKyBSWF9GUkVFX0JVRkZFUlM7IGkrKykgewotCQlpZiAocnhxLT5wb29sW2ldLnNrYiAhPSBOVUxMKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsCi0JCQkJCSByeHEtPnBvb2xbaV0uZG1hX2FkZHIsCi0JCQkJCSBJV0xfUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlkZXZfa2ZyZWVfc2tiKHJ4cS0+cG9vbFtpXS5za2IpOwotCQl9Ci0JfQotCi0JcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgcnhxLT5iZCwKLQkJCSAgICByeHEtPmRtYV9hZGRyKTsKLQlyeHEtPmJkID0gTlVMTDsKLX0KLQotaW50IGl3bDM5NDVfcnhfcXVldWVfYWxsb2Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKLQlpbnQgaTsKLQotCXNwaW5fbG9ja19pbml0KCZyeHEtPmxvY2spOwotCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X2ZyZWUpOwotCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X3VzZWQpOwotCi0JLyogQWxsb2MgdGhlIGNpcmN1bGFyIGJ1ZmZlciBvZiBSZWFkIEJ1ZmZlciBEZXNjcmlwdG9ycyAoUkJEcykgKi8KLQlyeHEtPmJkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgJnJ4cS0+ZG1hX2FkZHIpOwotCWlmICghcnhxLT5iZCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBGaWxsIHRoZSByeF91c2VkIHF1ZXVlIHdpdGggX2FsbF8gb2YgdGhlIFJ4IGJ1ZmZlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUlhfRlJFRV9CVUZGRVJTICsgUlhfUVVFVUVfU0laRTsgaSsrKQotCQlsaXN0X2FkZF90YWlsKCZyeHEtPnBvb2xbaV0ubGlzdCwgJnJ4cS0+cnhfdXNlZCk7Ci0KLQkvKiBTZXQgdXMgc28gdGhhdCB3ZSBoYXZlIHByb2Nlc3NlZCBhbmQgdXNlZCBhbGwgYnVmZmVycywgYnV0IGhhdmUKLQkgKiBub3QgcmVzdG9ja2VkIHRoZSBSeCBxdWV1ZSB3aXRoIGZyZXNoIGJ1ZmZlcnMgKi8KLQlyeHEtPnJlYWQgPSByeHEtPndyaXRlID0gMDsKLQlyeHEtPmZyZWVfY291bnQgPSAwOwotCXJ4cS0+bmVlZF91cGRhdGUgPSAwOwotCXJldHVybiAwOwotfQotCi12b2lkIGl3bDM5NDVfcnhfcXVldWVfcmVzZXQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKLQlJTklUX0xJU1RfSEVBRCgmcnhxLT5yeF9mcmVlKTsKLQlJTklUX0xJU1RfSEVBRCgmcnhxLT5yeF91c2VkKTsKLQkvKiBGaWxsIHRoZSByeF91c2VkIHF1ZXVlIHdpdGggX2FsbF8gb2YgdGhlIFJ4IGJ1ZmZlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgUlhfRlJFRV9CVUZGRVJTICsgUlhfUVVFVUVfU0laRTsgaSsrKSB7Ci0JCS8qIEluIHRoZSByZXNldCBmdW5jdGlvbiwgdGhlc2UgYnVmZmVycyBtYXkgaGF2ZSBiZWVuIGFsbG9jYXRlZAotCQkgKiB0byBhbiBTS0IsIHNvIHdlIG5lZWQgdG8gdW5tYXAgYW5kIGZyZWUgcG90ZW50aWFsIHN0b3JhZ2UgKi8KLQkJaWYgKHJ4cS0+cG9vbFtpXS5za2IgIT0gTlVMTCkgewotCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LAotCQkJCQkgcnhxLT5wb29sW2ldLmRtYV9hZGRyLAotCQkJCQkgSVdMX1JYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJcHJpdi0+YWxsb2NfcnhiX3NrYi0tOwotCQkJZGV2X2tmcmVlX3NrYihyeHEtPnBvb2xbaV0uc2tiKTsKLQkJCXJ4cS0+cG9vbFtpXS5za2IgPSBOVUxMOwotCQl9Ci0JCWxpc3RfYWRkX3RhaWwoJnJ4cS0+cG9vbFtpXS5saXN0LCAmcnhxLT5yeF91c2VkKTsKLQl9Ci0KLQkvKiBTZXQgdXMgc28gdGhhdCB3ZSBoYXZlIHByb2Nlc3NlZCBhbmQgdXNlZCBhbGwgYnVmZmVycywgYnV0IGhhdmUKLQkgKiBub3QgcmVzdG9ja2VkIHRoZSBSeCBxdWV1ZSB3aXRoIGZyZXNoIGJ1ZmZlcnMgKi8KLQlyeHEtPnJlYWQgPSByeHEtPndyaXRlID0gMDsKLQlyeHEtPmZyZWVfY291bnQgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotfQotCiAvKiBDb252ZXJ0IGxpbmVhciBzaWduYWwtdG8tbm9pc2UgcmF0aW8gaW50byBkQiAqLwogc3RhdGljIHU4IHJhdGlvMmRCWzEwMF0gPSB7CiAvKgkgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICA4ICAgOSAqLwpAQCAtMzgwMCwxMSArMTc3MCwxMSBAQAogICogdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXJzLCBpbmNsdWRpbmcgY29tbWFuZCByZXNwb25zZXMsCiAgKiBmcmFtZS1yZWNlaXZlZCBub3RpZmljYXRpb25zLCBhbmQgb3RoZXIgbm90aWZpY2F0aW9ucy4KICAqLwotc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9oYW5kbGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcnhfaGFuZGxlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9yeF9tZW1fYnVmZmVyICpyeGI7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcGFja2V0ICpwa3Q7Ci0Jc3RydWN0IGl3bDM5NDVfcnhfcXVldWUgKnJ4cSA9ICZwcml2LT5yeHE7CisJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGI7CisJc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdDsKKwlzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCXUzMiByLCBpOwogCWludCByZWNsYWltOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zODEzLDE0ICsxNzgzLDE0IEBACiAKIAkvKiB1Q29kZSdzIHJlYWQgaW5kZXggKHN0b3JlZCBpbiBzaGFyZWQgRFJBTSkgaW5kaWNhdGVzIHRoZSBsYXN0IFJ4CiAJICogYnVmZmVyIHRoYXQgdGhlIGRyaXZlciBtYXkgcHJvY2VzcyAobGFzdCBidWZmZXIgZmlsbGVkIGJ5IHVjb2RlKS4gKi8KLQlyID0gaXdsMzk0NV9od19nZXRfcnhfcmVhZChwcml2KTsKKwlyID0gbGUxNl90b19jcHUocnhxLT5yYl9zdHRzLT5jbG9zZWRfcmJfbnVtKSAmICAweDBGRkY7CiAJaSA9IHJ4cS0+cmVhZDsKIAotCWlmIChpd2wzOTQ1X3J4X3F1ZXVlX3NwYWNlKHJ4cSkgPiAoUlhfUVVFVUVfU0laRSAvIDIpKQorCWlmIChpd2xfcnhfcXVldWVfc3BhY2UocnhxKSA+IChSWF9RVUVVRV9TSVpFIC8gMikpCiAJCWZpbGxfcnggPSAxOwogCS8qIFJ4IGludGVycnVwdCwgYnV0IG5vdGhpbmcgc2VudCBmcm9tIHVDb2RlICovCiAJaWYgKGkgPT0gcikKLQkJSVdMX0RFQlVHKElXTF9ETF9SWCB8IElXTF9ETF9JU1IsICJyID0gJWQsIGkgPSAlZFxuIiwgciwgaSk7CisJCUlXTF9ERUJVRyhwcml2LCBJV0xfRExfUlggfCBJV0xfRExfSVNSLCAiciA9ICVkLCBpID0gJWRcbiIsIHIsIGkpOwogCiAJd2hpbGUgKGkgIT0gcikgewogCQlyeGIgPSByeHEtPnF1ZXVlW2ldOwpAQCAtMzgzMiwxMCArMTgwMiwxMCBAQAogCiAJCXJ4cS0+cXVldWVbaV0gPSBOVUxMOwogCi0JCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwcml2LT5wY2lfZGV2LCByeGItPmRtYV9hZGRyLAotCQkJCQkgICAgSVdMX1JYX0JVRl9TSVpFLAorCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUocHJpdi0+cGNpX2RldiwgcnhiLT5yZWFsX2RtYV9hZGRyLAorCQkJCQkgICAgcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAogCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJcGt0ID0gKHN0cnVjdCBpd2wzOTQ1X3J4X3BhY2tldCAqKXJ4Yi0+c2tiLT5kYXRhOworCQlwa3QgPSAoc3RydWN0IGl3bF9yeF9wYWNrZXQgKilyeGItPnNrYi0+ZGF0YTsKIAogCQkvKiBSZWNsYWltIGEgY29tbWFuZCBidWZmZXIgb25seSBpZiB0aGlzIHBhY2tldCBpcyBhIHJlc3BvbnNlCiAJCSAqICAgdG8gYSAoZHJpdmVyLW9yaWdpbmF0ZWQpIGNvbW1hbmQuCkBAIC0zODUxLDEzICsxODIxLDEzIEBACiAJCSAqICAgaGFuZGxlIHRob3NlIHRoYXQgbmVlZCBoYW5kbGluZyB2aWEgZnVuY3Rpb24gaW4KIAkJICogICByeF9oYW5kbGVycyB0YWJsZS4gIFNlZSBpd2wzOTQ1X3NldHVwX3J4X2hhbmRsZXJzKCkgKi8KIAkJaWYgKHByaXYtPnJ4X2hhbmRsZXJzW3BrdC0+aGRyLmNtZF0pIHsKLQkJCUlXTF9ERUJVRyhJV0xfRExfSE9TVF9DT01NQU5EIHwgSVdMX0RMX1JYIHwgSVdMX0RMX0lTUiwKKwkJCUlXTF9ERUJVRyhwcml2LCBJV0xfRExfSENNRCB8IElXTF9ETF9SWCB8IElXTF9ETF9JU1IsCiAJCQkJInIgPSAlZCwgaSA9ICVkLCAlcywgMHglMDJ4XG4iLCByLCBpLAogCQkJCWdldF9jbWRfc3RyaW5nKHBrdC0+aGRyLmNtZCksIHBrdC0+aGRyLmNtZCk7CiAJCQlwcml2LT5yeF9oYW5kbGVyc1twa3QtPmhkci5jbWRdIChwcml2LCByeGIpOwogCQl9IGVsc2UgewogCQkJLyogTm8gaGFuZGxpbmcgbmVlZGVkICovCi0JCQlJV0xfREVCVUcoSVdMX0RMX0hPU1RfQ09NTUFORCB8IElXTF9ETF9SWCB8IElXTF9ETF9JU1IsCisJCQlJV0xfREVCVUcocHJpdiwgSVdMX0RMX0hDTUQgfCBJV0xfRExfUlggfCBJV0xfRExfSVNSLAogCQkJCSJyICVkIGkgJWQgTm8gaGFuZGxlciBuZWVkZWQgZm9yICVzLCAweCUwMnhcbiIsCiAJCQkJciwgaSwgZ2V0X2NtZF9zdHJpbmcocGt0LT5oZHIuY21kKSwKIAkJCQlwa3QtPmhkci5jbWQpOwpAQCAtMzg2NSwxMiArMTgzNSwxMiBAQAogCiAJCWlmIChyZWNsYWltKSB7CiAJCQkvKiBJbnZva2UgYW55IGNhbGxiYWNrcywgdHJhbnNmZXIgdGhlIHNrYiB0byBjYWxsZXIsIGFuZAotCQkJICogZmlyZSBvZmYgdGhlIChwb3NzaWJseSkgYmxvY2tpbmcgaXdsMzk0NV9zZW5kX2NtZCgpCisJCQkgKiBmaXJlIG9mZiB0aGUgKHBvc3NpYmx5KSBibG9ja2luZyBpd2xfc2VuZF9jbWQoKQogCQkJICogYXMgd2UgcmVjbGFpbSB0aGUgZHJpdmVyIGNvbW1hbmQgcXVldWUgKi8KIAkJCWlmIChyeGIgJiYgcnhiLT5za2IpCi0JCQkJaXdsMzk0NV90eF9jbWRfY29tcGxldGUocHJpdiwgcnhiKTsKKwkJCQlpd2xfdHhfY21kX2NvbXBsZXRlKHByaXYsIHJ4Yik7CiAJCQllbHNlCi0JCQkJSVdMX1dBUk5JTkcoIkNsYWltIG51bGwgcnhiP1xuIik7CisJCQkJSVdMX1dBUk4ocHJpdiwgIkNsYWltIG51bGwgcnhiP1xuIik7CiAJCX0KIAogCQkvKiBGb3Igbm93IHdlIGp1c3QgZG9uJ3QgcmUtdXNlIGFueXRoaW5nLiAgV2UgY2FuIHR3ZWFrIHRoaXMKQEAgLTM4ODIsOCArMTg1Miw5IEBACiAJCQlyeGItPnNrYiA9IE5VTEw7CiAJCX0KIAotCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4Yi0+ZG1hX2FkZHIsCi0JCQkJIElXTF9SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wY2lfZGV2LCByeGItPnJlYWxfZG1hX2FkZHIsCisJCQkJcHJpdi0+aHdfcGFyYW1zLnJ4X2J1Zl9zaXplLAorCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAkJbGlzdF9hZGRfdGFpbCgmcnhiLT5saXN0LCAmcHJpdi0+cnhxLnJ4X3VzZWQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyeHEtPmxvY2ssIGZsYWdzKTsKQEAgLTM5MDUsMTAyICsxODc2LDE0IEBACiAJaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrKHByaXYpOwogfQogCi0vKioKLSAqIGl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0ciAtIFNlbmQgbmV3IHdyaXRlIGluZGV4IHRvIGhhcmR3YXJlCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJICBzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxKQotewotCXUzMiByZWcgPSAwOwotCWludCByYyA9IDA7Ci0JaW50IHR4cV9pZCA9IHR4cS0+cS5pZDsKLQotCWlmICh0eHEtPm5lZWRfdXBkYXRlID09IDApCi0JCXJldHVybiByYzsKLQotCS8qIGlmIHdlJ3JlIHRyeWluZyB0byBzYXZlIHBvd2VyICovCi0JaWYgKHRlc3RfYml0KFNUQVRVU19QT1dFUl9QTUksICZwcml2LT5zdGF0dXMpKSB7Ci0JCS8qIHdha2UgdXAgbmljIGlmIGl0J3MgcG93ZXJlZCBkb3duIC4uLgotCQkgKiB1Q29kZSB3aWxsIHdha2UgdXAsIGFuZCBpbnRlcnJ1cHQgdXMgYWdhaW4sIHNvIG5leHQKLQkJICogdGltZSB3ZSdsbCBza2lwIHRoaXMgcGFydC4gKi8KLQkJcmVnID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDEpOwotCi0JCWlmIChyZWcgJiBDU1JfVUNPREVfRFJWX0dQMV9CSVRfTUFDX1NMRUVQKSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiUmVxdWVzdGluZyB3YWtldXAsIEdQMSA9IDB4JXhcbiIsIHJlZyk7Ci0JCQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAotCQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0FDQ0VTU19SRVEpOwotCQkJcmV0dXJuIHJjOwotCQl9Ci0KLQkJLyogcmVzdG9yZSB0aGlzIHF1ZXVlJ3MgcGFyYW1ldGVycyBpbiBuaWMgaGFyZHdhcmUuICovCi0JCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKLQkJaXdsMzk0NV93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfV1JQVFIsCi0JCQkJICAgICB0eHEtPnEud3JpdGVfcHRyIHwgKHR4cV9pZCA8PCA4KSk7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCi0JLyogZWxzZSBub3QgaW4gcG93ZXItc2F2ZSBtb2RlLCB1Q29kZSB3aWxsIG5ldmVyIHNsZWVwIHdoZW4gd2UncmUKLQkgKiB0cnlpbmcgdG8gdHggKGR1cmluZyBSRktJTEwsIHdlJ3JlIG5vdCB0cnlpbmcgdG8gdHgpLiAqLwotCX0gZWxzZQotCQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgSEJVU19UQVJHX1dSUFRSLAotCQkJICAgIHR4cS0+cS53cml0ZV9wdHIgfCAodHhxX2lkIDw8IDgpKTsKLQotCXR4cS0+bmVlZF91cGRhdGUgPSAwOwotCi0JcmV0dXJuIHJjOwotfQotCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLXN0YXRpYyB2b2lkIGl3bDM5NDVfcHJpbnRfcnhfY29uZmlnX2NtZChzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqcnhvbikKLXsKLQlJV0xfREVCVUdfUkFESU8oIlJYIENPTkZJRzpcbiIpOwotCWl3bDM5NDVfcHJpbnRfaGV4X2R1bXAoSVdMX0RMX1JBRElPLCAodTggKikgcnhvbiwgc2l6ZW9mKCpyeG9uKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MTYgY2hhbm5lbDogMHgleFxuIiwgbGUxNl90b19jcHUocnhvbi0+Y2hhbm5lbCkpOwotCUlXTF9ERUJVR19SQURJTygidTMyIGZsYWdzOiAweCUwOFhcbiIsIGxlMzJfdG9fY3B1KHJ4b24tPmZsYWdzKSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1MzIgZmlsdGVyX2ZsYWdzOiAweCUwOHhcbiIsCi0JCQlsZTMyX3RvX2NwdShyeG9uLT5maWx0ZXJfZmxhZ3MpKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IGRldl90eXBlOiAweCV4XG4iLCByeG9uLT5kZXZfdHlwZSk7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OCBvZmRtX2Jhc2ljX3JhdGVzOiAweCUwMnhcbiIsCi0JCQlyeG9uLT5vZmRtX2Jhc2ljX3JhdGVzKTsKLQlJV0xfREVCVUdfUkFESU8oInU4IGNja19iYXNpY19yYXRlczogMHglMDJ4XG4iLCByeG9uLT5jY2tfYmFzaWNfcmF0ZXMpOwotCUlXTF9ERUJVR19SQURJTygidThbNl0gbm9kZV9hZGRyOiAlcE1cbiIsIHJ4b24tPm5vZGVfYWRkcik7Ci0JSVdMX0RFQlVHX1JBRElPKCJ1OFs2XSBic3NpZF9hZGRyOiAlcE1cbiIsIHJ4b24tPmJzc2lkX2FkZHIpOwotCUlXTF9ERUJVR19SQURJTygidTE2IGFzc29jX2lkOiAweCV4XG4iLCBsZTE2X3RvX2NwdShyeG9uLT5hc3NvY19pZCkpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlJV0xfREVCVUdfSVNSKCJFbmFibGluZyBpbnRlcnJ1cHRzXG4iKTsKLQlzZXRfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cyk7Ci0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlRfTUFTSywgQ1NSX0lOSV9TRVRfTUFTSyk7Ci19Ci0KLQogLyogY2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGZsdXNoIGFueSBzY2hlZHVsZWQgdGFza2xldCAqLwotc3RhdGljIGlubGluZSB2b2lkIGl3bF9zeW5jaHJvbml6ZV9pcnEoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc3luY2hyb25pemVfaXJxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAkvKiB3YWl0IHRvIG1ha2Ugc3VyZSB3ZSBmbHVzaCBwZW5kaW5nIHRhc2tsZXQqLwogCXN5bmNocm9uaXplX2lycShwcml2LT5wY2lfZGV2LT5pcnEpOwogCXRhc2tsZXRfa2lsbCgmcHJpdi0+aXJxX3Rhc2tsZXQpOwogfQogCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWNsZWFyX2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpOwotCi0JLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGZyb20gdUNvZGUvTklDIHRvIGhvc3QgKi8KLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVF9NQVNLLCAweDAwMDAwMDAwKTsKLQotCS8qIGFja25vd2xlZGdlL2NsZWFyL3Jlc2V0IGFueSBpbnRlcnJ1cHRzIHN0aWxsIHBlbmRpbmcKLQkgKiBmcm9tIHVDb2RlIG9yIGZsb3cgaGFuZGxlciAoUngvVHggRE1BKSAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweGZmZmZmZmZmKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIDB4ZmZmZmZmZmYpOwotCUlXTF9ERUJVR19JU1IoIkRpc2FibGVkIGludGVycnVwdHNcbiIpOwotfQotCiBzdGF0aWMgY29uc3QgY2hhciAqZGVzY19sb29rdXAoaW50IGkpCiB7CiAJc3dpdGNoIChpKSB7CkBAIC00MDI0LDcgKzE5MDcsNyBAQAogI2RlZmluZSBFUlJPUl9TVEFSVF9PRkZTRVQgICgxICogc2l6ZW9mKHUzMikpCiAjZGVmaW5lIEVSUk9SX0VMRU1fU0laRSAgICAgKDcgKiBzaXplb2YodTMyKSkKIAotc3RhdGljIHZvaWQgaXdsMzk0NV9kdW1wX25pY19lcnJvcl9sb2coc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZHVtcF9uaWNfZXJyb3JfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MzIgaTsKIAl1MzIgZGVzYywgdGltZSwgY291bnQsIGJhc2UsIGRhdGExOwpAQCAtNDAzNCw0OSArMTkxNyw1MCBAQAogCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmVycm9yX2V2ZW50X3RhYmxlX3B0cik7CiAKIAlpZiAoIWl3bDM5NDVfaHdfdmFsaWRfcnRjX2RhdGFfYWRkcihiYXNlKSkgewotCQlJV0xfRVJST1IoIk5vdCB2YWxpZCBlcnJvciBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJOb3QgdmFsaWQgZXJyb3IgbG9nIHBvaW50ZXIgMHglMDhYXG4iLCBiYXNlKTsKIAkJcmV0dXJuOwogCX0KIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewotCQlJV0xfV0FSTklORygiQ2FuIG5vdCByZWFkIGZyb20gYWRhcHRlciBhdCB0aGlzIHRpbWUuXG4iKTsKKwkJSVdMX1dBUk4ocHJpdiwgIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CiAJCXJldHVybjsKIAl9CiAKLQljb3VudCA9IGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlKTsKKwljb3VudCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwogCiAJaWYgKEVSUk9SX1NUQVJUX09GRlNFVCA8PSBjb3VudCAqIEVSUk9SX0VMRU1fU0laRSkgewotCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFcnJvciBMb2cgRHVtcDpcbiIpOwotCQlJV0xfRVJST1IoIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLCBwcml2LT5zdGF0dXMsIGNvdW50KTsKKwkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEVycm9yIExvZyBEdW1wOlxuIik7CisJCUlXTF9FUlIocHJpdiwgIlN0YXR1czogMHglMDhsWCwgY291bnQ6ICVkXG4iLAorCQkJcHJpdi0+c3RhdHVzLCBjb3VudCk7CiAJfQogCi0JSVdMX0VSUk9SKCJEZXNjICAgICAgIFRpbWUgICAgICAgYXNydFBDICBibGluazIgIgorCUlXTF9FUlIocHJpdiwgIkRlc2MgICAgICAgVGltZSAgICAgICBhc3J0UEMgIGJsaW5rMiAiCiAJCSAgImlsaW5rMSAgbm1pUEMgICBMaW5lXG4iKTsKIAlmb3IgKGkgPSBFUlJPUl9TVEFSVF9PRkZTRVQ7CiAJICAgICBpIDwgKGNvdW50ICogRVJST1JfRUxFTV9TSVpFKSArIEVSUk9SX1NUQVJUX09GRlNFVDsKIAkgICAgIGkgKz0gRVJST1JfRUxFTV9TSVpFKSB7Ci0JCWRlc2MgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkpOworCQlkZXNjID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkpOwogCQl0aW1lID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDEgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDEgKiBzaXplb2YodTMyKSk7CiAJCWJsaW5rMSA9Ci0JCSAgICBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyAyICogc2l6ZW9mKHUzMikpOworCQkgICAgaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyAyICogc2l6ZW9mKHUzMikpOwogCQlibGluazIgPQotCQkgICAgaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgMyAqIHNpemVvZih1MzIpKTsKKwkJICAgIGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyBpICsgMyAqIHNpemVvZih1MzIpKTsKIAkJaWxpbmsxID0KLQkJICAgIGl3bDM5NDVfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDQgKiBzaXplb2YodTMyKSk7CisJCSAgICBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgaSArIDQgKiBzaXplb2YodTMyKSk7CiAJCWlsaW5rMiA9Ci0JCSAgICBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyA1ICogc2l6ZW9mKHUzMikpOworCQkgICAgaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyA1ICogc2l6ZW9mKHUzMikpOwogCQlkYXRhMSA9Ci0JCSAgICBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyA2ICogc2l6ZW9mKHUzMikpOworCQkgICAgaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArIGkgKyA2ICogc2l6ZW9mKHUzMikpOwogCi0JCUlXTF9FUlJPUgotCQkgICAgKCIlLTEzcyAoIyVkKSAlMDEwdSAweCUwNVggMHglMDVYIDB4JTA1WCAweCUwNVggJXVcblxuIiwKLQkJICAgICBkZXNjX2xvb2t1cChkZXNjKSwgZGVzYywgdGltZSwgYmxpbmsxLCBibGluazIsCi0JCSAgICAgaWxpbmsxLCBpbGluazIsIGRhdGExKTsKKwkJSVdMX0VSUihwcml2LAorCQkJIiUtMTNzICgjJWQpICUwMTB1IDB4JTA1WCAweCUwNVggMHglMDVYIDB4JTA1WCAldVxuXG4iLAorCQkJZGVzY19sb29rdXAoZGVzYyksIGRlc2MsIHRpbWUsIGJsaW5rMSwgYmxpbmsyLAorCQkJaWxpbmsxLCBpbGluazIsIGRhdGExKTsKIAl9CiAKLQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCiB9CiAKQEAgLTQwODUsOSArMTk2OSw5IEBACiAvKioKICAqIGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nIC0gRHVtcCBlcnJvciBldmVudCBsb2cgdG8gc3lzbG9nCiAgKgotICogTk9URTogTXVzdCBiZSBjYWxsZWQgd2l0aCBpd2wzOTQ1X2dyYWJfbmljX2FjY2VzcygpIGFscmVhZHkgb2J0YWluZWQhCisgKiBOT1RFOiBNdXN0IGJlIGNhbGxlZCB3aXRoIGl3bF9ncmFiX25pY19hY2Nlc3MoKSBhbHJlYWR5IG9idGFpbmVkIQogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LCB1MzIgc3RhcnRfaWR4LAorc3RhdGljIHZvaWQgaXdsMzk0NV9wcmludF9ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgc3RhcnRfaWR4LAogCQkJCXUzMiBudW1fZXZlbnRzLCB1MzIgbW9kZSkKIHsKIAl1MzIgaTsKQEAgLTQxMTEsMjEgKzE5OTUsMjIgQEAKIAkvKiAidGltZSIgaXMgYWN0dWFsbHkgImRhdGEiIGZvciBtb2RlIDAgKG5vIHRpbWVzdGFtcCkuCiAJICogcGxhY2UgZXZlbnQgaWQgIyBhdCBmYXIgcmlnaHQgZm9yIGVhc2llciB2aXN1YWwgcGFyc2luZy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2V2ZW50czsgaSsrKSB7Ci0JCWV2ID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIHB0cik7CisJCWV2ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKIAkJcHRyICs9IHNpemVvZih1MzIpOwotCQl0aW1lID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIHB0cik7CisJCXRpbWUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwdHIpOwogCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCWlmIChtb2RlID09IDApCi0JCQlJV0xfRVJST1IoIjB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZXYpOyAvKiBkYXRhLCBldiAqLwotCQllbHNlIHsKLQkJCWRhdGEgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgcHRyKTsKKwkJaWYgKG1vZGUgPT0gMCkgeworCQkJLyogZGF0YSwgZXYgKi8KKwkJCUlXTF9FUlIocHJpdiwgIjB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZXYpOworCQl9IGVsc2UgeworCQkJZGF0YSA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHB0cik7CiAJCQlwdHIgKz0gc2l6ZW9mKHUzMik7Ci0JCQlJV0xfRVJST1IoIiUwMTB1XHQweCUwOHhcdCUwNHVcbiIsIHRpbWUsIGRhdGEsIGV2KTsKKwkJCUlXTF9FUlIocHJpdiwgIiUwMTB1XHQweCUwOHhcdCUwNHVcbiIsIHRpbWUsIGRhdGEsIGV2KTsKIAkJfQogCX0KIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZHVtcF9uaWNfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmM7CiAJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KQEAgLTQxMzcsMzIgKzIwMjIsMzIgQEAKIAogCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOwogCWlmICghaXdsMzk0NV9od192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7Ci0JCUlXTF9FUlJPUigiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOworCQlJV0xfRVJSKHByaXYsICJJbnZhbGlkIGV2ZW50IGxvZyBwb2ludGVyIDB4JTA4WFxuIiwgYmFzZSk7CiAJCXJldHVybjsKIAl9CiAKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBmcm9tIGFkYXB0ZXIgYXQgdGhpcyB0aW1lLlxuIik7CisJCUlXTF9XQVJOKHByaXYsICJDYW4gbm90IHJlYWQgZnJvbSBhZGFwdGVyIGF0IHRoaXMgdGltZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogZXZlbnQgbG9nIGhlYWRlciAqLwotCWNhcGFjaXR5ID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UpOwotCW1vZGUgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgxICogc2l6ZW9mKHUzMikpKTsKLQludW1fd3JhcHMgPSBpd2wzOTQ1X3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgyICogc2l6ZW9mKHUzMikpKTsKLQluZXh0X2VudHJ5ID0gaXdsMzk0NV9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMyAqIHNpemVvZih1MzIpKSk7CisJY2FwYWNpdHkgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlKTsKKwltb2RlID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgxICogc2l6ZW9mKHUzMikpKTsKKwludW1fd3JhcHMgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDIgKiBzaXplb2YodTMyKSkpOworCW5leHRfZW50cnkgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDMgKiBzaXplb2YodTMyKSkpOwogCiAJc2l6ZSA9IG51bV93cmFwcyA/IGNhcGFjaXR5IDogbmV4dF9lbnRyeTsKIAogCS8qIGJhaWwgb3V0IGlmIG5vdGhpbmcgaW4gbG9nICovCiAJaWYgKHNpemUgPT0gMCkgewotCQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogbm90aGluZyBpbiBsb2dcbiIpOwotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBub3RoaW5nIGluIGxvZ1xuIik7CisJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJCXJldHVybjsKIAl9CiAKLQlJV0xfRVJST1IoIlN0YXJ0IElXTCBFdmVudCBMb2cgRHVtcDogZGlzcGxheSBjb3VudCAlZCwgd3JhcHMgJWRcbiIsCisJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBkaXNwbGF5IGNvdW50ICVkLCB3cmFwcyAlZFxuIiwKIAkJICBzaXplLCBudW1fd3JhcHMpOwogCiAJLyogaWYgdUNvZGUgaGFzIHdyYXBwZWQgYmFjayB0byB0b3Agb2YgbG9nLCBzdGFydCBhdCB0aGUgb2xkZXN0IGVudHJ5LApAQCAtNDE3NCw0OCArMjA1OSwxMCBAQAogCS8qICh0aGVuL2Vsc2UpIHN0YXJ0IGF0IHRvcCBvZiBsb2cgKi8KIAlpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLCBuZXh0X2VudHJ5LCBtb2RlKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiB9CiAKLS8qKgotICogaXdsMzk0NV9pcnFfaGFuZGxlX2Vycm9yIC0gY2FsbGVkIGZvciBIVyBvciBTVyBlcnJvciBpbnRlcnJ1cHQgZnJvbSBjYXJkCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfaXJxX2hhbmRsZV9lcnJvcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCS8qIFNldCB0aGUgRlcgZXJyb3IgZmxhZyAtLSBjbGVhcmVkIG9uIGl3bDM5NDVfZG93biAqLwotCXNldF9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKTsKLQotCS8qIENhbmNlbCBjdXJyZW50bHkgcXVldWVkIGNvbW1hbmQuICovCi0JY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7Ci0KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWlmIChpd2wzOTQ1X2RlYnVnX2xldmVsICYgSVdMX0RMX0ZXX0VSUk9SUykgewotCQlpd2wzOTQ1X2R1bXBfbmljX2Vycm9yX2xvZyhwcml2KTsKLQkJaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2cocHJpdik7Ci0JCWl3bDM5NDVfcHJpbnRfcnhfY29uZmlnX2NtZCgmcHJpdi0+c3RhZ2luZ19yeG9uKTsKLQl9Ci0jZW5kaWYKLQotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKLQotCS8qIEtlZXAgdGhlIHJlc3RhcnQgcHJvY2VzcyBmcm9tIHRyeWluZyB0byBzZW5kIGhvc3QKLQkgKiBjb21tYW5kcyBieSBjbGVhcmluZyB0aGUgSU5JVCBzdGF0dXMgYml0ICovCi0JY2xlYXJfYml0KFNUQVRVU19SRUFEWSwgJnByaXYtPnN0YXR1cyk7Ci0KLQlpZiAoIXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9GV19FUlJPUlMsCi0JCQkgICJSZXN0YXJ0aW5nIGFkYXB0ZXIgZHVlIHRvIHVDb2RlIGVycm9yLlxuIik7Ci0KLQkJaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkgewotCQkJbWVtY3B5KCZwcml2LT5yZWNvdmVyeV9yeG9uLCAmcHJpdi0+YWN0aXZlX3J4b24sCi0JCQkgICAgICAgc2l6ZW9mKHByaXYtPnJlY292ZXJ5X3J4b24pKTsKLQkJCXByaXYtPmVycm9yX3JlY292ZXJpbmcgPSAxOwotCQl9Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2Vycm9yX3JlY292ZXJ5KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2Vycm9yX3JlY292ZXJ5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC00MjMyLDEyICsyMDc5LDEyIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2lycV90YXNrbGV0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2lycV90YXNrbGV0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAl1MzIgaW50YSwgaGFuZGxlZCA9IDA7CiAJdTMyIGludGFfZmg7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJdTMyIGludGFfbWFzazsKICNlbmRpZgogCkBAIC00MjQ2LDIwICsyMDkzLDIwIEBACiAJLyogQWNrL2NsZWFyL3Jlc2V0IHBlbmRpbmcgdUNvZGUgaW50ZXJydXB0cy4KIAkgKiBOb3RlOiAgU29tZSBiaXRzIGluIENTUl9JTlQgYXJlICJPUiIgb2YgYml0cyBpbiBDU1JfRkhfSU5UX1NUQVRVUywKIAkgKiAgYW5kIHdpbGwgY2xlYXIgb25seSB3aGVuIENTUl9GSF9JTlRfU1RBVFVTIGdldHMgY2xlYXJlZC4gKi8KLQlpbnRhID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7Ci0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlQsIGludGEpOworCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIGludGEpOwogCiAJLyogQWNrL2NsZWFyL3Jlc2V0IHBlbmRpbmcgZmxvdy1oYW5kbGVyIChETUEpIGludGVycnVwdHMuCiAJICogQW55IG5ldyBpbnRlcnJ1cHRzIHRoYXQgaGFwcGVuIGFmdGVyIHRoaXMsIGVpdGhlciB3aGlsZSB3ZSdyZQogCSAqIGluIHRoaXMgdGFza2xldCwgb3IgbGF0ZXIsIHdpbGwgc2hvdyB1cCBpbiBuZXh0IElTUi90YXNrbGV0LiAqLwotCWludGFfZmggPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7Ci0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCBpbnRhX2ZoKTsKKwlpbnRhX2ZoID0gaXdsX3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX0ZIX0lOVF9TVEFUVVMsIGludGFfZmgpOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIElXTF9ETF9JU1IpIHsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCWlmIChwcml2LT5kZWJ1Z19sZXZlbCAmIElXTF9ETF9JU1IpIHsKIAkJLyoganVzdCBmb3IgZGVidWcgKi8KLQkJaW50YV9tYXNrID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKLQkJSVdMX0RFQlVHX0lTUigiaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCisJCWludGFfbWFzayA9IGl3bF9yZWFkMzIocHJpdiwgQ1NSX0lOVF9NQVNLKTsKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCiAJCQkgICAgICBpbnRhLCBpbnRhX21hc2ssIGludGFfZmgpOwogCX0KICNlbmRpZgpAQCAtNDI3NSwxMiArMjEyMiwxMiBAQAogCiAJLyogTm93IHNlcnZpY2UgYWxsIGludGVycnVwdCBiaXRzIGRpc2NvdmVyZWQgYWJvdmUuICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9IV19FUlIpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgSFcgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nLlxuIik7CisJCUlXTF9FUlIocHJpdiwgIk1pY3JvY29kZSBIVyBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKIAogCQkvKiBUZWxsIHRoZSBkZXZpY2UgdG8gc3RvcCBzZW5kaW5nIGludGVycnVwdHMgKi8KLQkJaXdsMzk0NV9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisJCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAKLQkJaXdsMzk0NV9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOworCQlpd2xfaXJxX2hhbmRsZV9lcnJvcihwcml2KTsKIAogCQloYW5kbGVkIHw9IENTUl9JTlRfQklUX0hXX0VSUjsKIApAQCAtNDI4OSwxNiArMjEzNiwxNiBAQAogCQlyZXR1cm47CiAJfQogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgeworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CiAJCS8qIE5JQyBmaXJlcyB0aGlzLCBidXQgd2UgZG9uJ3QgdXNlIGl0LCByZWR1bmRhbnQgd2l0aCBXQUtFVVAgKi8KIAkJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TQ0QpCi0JCQlJV0xfREVCVUdfSVNSKCJTY2hlZHVsZXIgZmluaXNoZWQgdG8gdHJhbnNtaXQgIgorCQkJSVdMX0RFQlVHX0lTUihwcml2LCAiU2NoZWR1bGVyIGZpbmlzaGVkIHRvIHRyYW5zbWl0ICIKIAkJCQkgICAgICAidGhlIGZyYW1lL2ZyYW1lcy5cbiIpOwogCiAJCS8qIEFsaXZlIG5vdGlmaWNhdGlvbiB2aWEgUnggaW50ZXJydXB0IHdpbGwgZG8gdGhlIHJlYWwgd29yayAqLwogCQlpZiAoaW50YSAmIENTUl9JTlRfQklUX0FMSVZFKQotCQkJSVdMX0RFQlVHX0lTUigiQWxpdmUgaW50ZXJydXB0XG4iKTsKKwkJCUlXTF9ERUJVR19JU1IocHJpdiwgIkFsaXZlIGludGVycnVwdFxuIik7CiAJfQogI2VuZGlmCiAJLyogU2FmZWx5IGlnbm9yZSB0aGVzZSBiaXRzIGZvciBkZWJ1ZyBjaGVja3MgYmVsb3cgKi8KQEAgLTQzMDYsMjIgKzIxNTMsMjIgQEAKIAogCS8qIEVycm9yIGRldGVjdGVkIGJ5IHVDb2RlICovCiAJaWYgKGludGEgJiBDU1JfSU5UX0JJVF9TV19FUlIpIHsKLQkJSVdMX0VSUk9SKCJNaWNyb2NvZGUgU1cgZXJyb3IgZGV0ZWN0ZWQuICBSZXN0YXJ0aW5nIDB4JVguXG4iLAotCQkJICBpbnRhKTsKLQkJaXdsMzk0NV9pcnFfaGFuZGxlX2Vycm9yKHByaXYpOworCQlJV0xfRVJSKHByaXYsICJNaWNyb2NvZGUgU1cgZXJyb3IgZGV0ZWN0ZWQuICIKKwkJCSJSZXN0YXJ0aW5nIDB4JVguXG4iLCBpbnRhKTsKKwkJaXdsX2lycV9oYW5kbGVfZXJyb3IocHJpdik7CiAJCWhhbmRsZWQgfD0gQ1NSX0lOVF9CSVRfU1dfRVJSOwogCX0KIAogCS8qIHVDb2RlIHdha2VzIHVwIGFmdGVyIHBvd2VyLWRvd24gc2xlZXAgKi8KIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX1dBS0VVUCkgewotCQlJV0xfREVCVUdfSVNSKCJXYWtldXAgaW50ZXJydXB0XG4iKTsKLQkJaXdsMzk0NV9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT5yeHEpOwotCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVswXSk7Ci0JCWl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzFdKTsKLQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMl0pOwotCQlpd2wzOTQ1X3R4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVszXSk7Ci0JCWl3bDM5NDVfdHhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzRdKTsKLQkJaXdsMzk0NV90eF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbNV0pOworCQlJV0xfREVCVUdfSVNSKHByaXYsICJXYWtldXAgaW50ZXJydXB0XG4iKTsKKwkJaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnJ4cSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzBdKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbMV0pOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVsyXSk7CisJCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCAmcHJpdi0+dHhxWzNdKTsKKwkJaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHByaXYsICZwcml2LT50eHFbNF0pOworCQlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgJnByaXYtPnR4cVs1XSk7CiAKIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9XQUtFVVA7CiAJfQpAQCAtNDMzNSw0MzIgKzIxODIsNjMgQEAKIAl9CiAKIAlpZiAoaW50YSAmIENTUl9JTlRfQklUX0ZIX1RYKSB7Ci0JCUlXTF9ERUJVR19JU1IoIlR4IGludGVycnVwdFxuIik7CisJCUlXTF9ERUJVR19JU1IocHJpdiwgIlR4IGludGVycnVwdFxuIik7CiAKLQkJaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTLCAoMSA8PCA2KSk7Ci0JCWlmICghaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKLQkJCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwKLQkJCQkJICAgICBGSF9UQ1NSX0NSRURJVAotCQkJCQkgICAgIChBTE1fRkhfU1JWQ19DSE5MKSwgMHgwKTsKLQkJCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlpd2xfd3JpdGUzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUywgKDEgPDwgNikpOworCQlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKKwkJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBGSDM5X1RDU1JfQ1JFRElUCisJCQkJCSAgICAgKEZIMzlfU1JWQ19DSE5MKSwgMHgwKTsKKwkJCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAJCX0KIAkJaGFuZGxlZCB8PSBDU1JfSU5UX0JJVF9GSF9UWDsKIAl9CiAKIAlpZiAoaW50YSAmIH5oYW5kbGVkKQotCQlJV0xfRVJST1IoIlVuaGFuZGxlZCBJTlRBIGJpdHMgMHglMDh4XG4iLCBpbnRhICYgfmhhbmRsZWQpOworCQlJV0xfRVJSKHByaXYsICJVbmhhbmRsZWQgSU5UQSBiaXRzIDB4JTA4eFxuIiwgaW50YSAmIH5oYW5kbGVkKTsKIAogCWlmIChpbnRhICYgfkNTUl9JTklfU0VUX01BU0spIHsKLQkJSVdMX1dBUk5JTkcoIkRpc2FibGVkIElOVEEgYml0cyAweCUwOHggd2VyZSBwZW5kaW5nXG4iLAorCQlJV0xfV0FSTihwcml2LCAiRGlzYWJsZWQgSU5UQSBiaXRzIDB4JTA4eCB3ZXJlIHBlbmRpbmdcbiIsCiAJCQkgaW50YSAmIH5DU1JfSU5JX1NFVF9NQVNLKTsKLQkJSVdMX1dBUk5JTkcoIiAgIHdpdGggRkhfSU5UID0gMHglMDh4XG4iLCBpbnRhX2ZoKTsKKwkJSVdMX1dBUk4ocHJpdiwgIiAgIHdpdGggRkhfSU5UID0gMHglMDh4XG4iLCBpbnRhX2ZoKTsKIAl9CiAKIAkvKiBSZS1lbmFibGUgYWxsIGludGVycnVwdHMgKi8KIAkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfREVCVUcKLQlpZiAoaXdsMzk0NV9kZWJ1Z19sZXZlbCAmIChJV0xfRExfSVNSKSkgewotCQlpbnRhID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7Ci0JCWludGFfbWFzayA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7Ci0JCWludGFfZmggPSBpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfRkhfSU5UX1NUQVRVUyk7Ci0JCUlXTF9ERUJVR19JU1IoIkVuZCBpbnRhIDB4JTA4eCwgZW5hYmxlZCAweCUwOHgsIGZoIDB4JTA4eCwgIgorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJaWYgKHByaXYtPmRlYnVnX2xldmVsICYgKElXTF9ETF9JU1IpKSB7CisJCWludGEgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlQpOworCQlpbnRhX21hc2sgPSBpd2xfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7CisJCWludGFfZmggPSBpd2xfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKKwkJSVdMX0RFQlVHX0lTUihwcml2LCAiRW5kIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCwgZmggMHglMDh4LCAiCiAJCQkiZmxhZ3MgMHglMDhseFxuIiwgaW50YSwgaW50YV9tYXNrLCBpbnRhX2ZoLCBmbGFncyk7CiAJfQogI2VuZGlmCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgaXdsMzk0NV9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGF0YTsKLQl1MzIgaW50YSwgaW50YV9tYXNrOwotCXUzMiBpbnRhX2ZoOwotCWlmICghcHJpdikKLQkJcmV0dXJuIElSUV9OT05FOwotCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKLQotCS8qIERpc2FibGUgKGJ1dCBkb24ndCBjbGVhciEpIGludGVycnVwdHMgaGVyZSB0byBhdm9pZAotCSAqICAgIGJhY2stdG8tYmFjayBJU1JzIGFuZCBzcG9yYWRpYyBpbnRlcnJ1cHRzIGZyb20gb3VyIE5JQy4KLQkgKiBJZiB3ZSBoYXZlIHNvbWV0aGluZyB0byBzZXJ2aWNlLCB0aGUgdGFza2xldCB3aWxsIHJlLWVuYWJsZSBpbnRzLgotCSAqIElmIHdlICpkb24ndCogaGF2ZSBzb21ldGhpbmcsIHdlJ2xsIHJlLWVuYWJsZSBiZWZvcmUgbGVhdmluZyBoZXJlLiAqLwotCWludGFfbWFzayA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9JTlRfTUFTSyk7ICAvKiBqdXN0IGZvciBkZWJ1ZyAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfSU5UX01BU0ssIDB4MDAwMDAwMDApOwotCi0JLyogRGlzY292ZXIgd2hpY2ggaW50ZXJydXB0cyBhcmUgYWN0aXZlL3BlbmRpbmcgKi8KLQlpbnRhID0gaXdsMzk0NV9yZWFkMzIocHJpdiwgQ1NSX0lOVCk7Ci0JaW50YV9maCA9IGl3bDM5NDVfcmVhZDMyKHByaXYsIENTUl9GSF9JTlRfU1RBVFVTKTsKLQotCS8qIElnbm9yZSBpbnRlcnJ1cHQgaWYgdGhlcmUncyBub3RoaW5nIGluIE5JQyB0byBzZXJ2aWNlLgotCSAqIFRoaXMgbWF5IGJlIGR1ZSB0byBJUlEgc2hhcmVkIHdpdGggYW5vdGhlciBkZXZpY2UsCi0JICogb3IgZHVlIHRvIHNwb3JhZGljIGludGVycnVwdHMgdGhyb3duIGZyb20gb3VyIE5JQy4gKi8KLQlpZiAoIWludGEgJiYgIWludGFfZmgpIHsKLQkJSVdMX0RFQlVHX0lTUigiSWdub3JlIGludGVycnVwdCwgaW50YSA9PSAwLCBpbnRhX2ZoID09IDBcbiIpOwotCQlnb3RvIG5vbmU7Ci0JfQotCi0JaWYgKChpbnRhID09IDB4RkZGRkZGRkYpIHx8ICgoaW50YSAmIDB4RkZGRkZGRjApID09IDB4YTVhNWE1YTApKSB7Ci0JCS8qIEhhcmR3YXJlIGRpc2FwcGVhcmVkICovCi0JCUlXTF9XQVJOSU5HKCJIQVJEV0FSRSBHT05FPz8gSU5UQSA9PSAweCUwOHhcbiIsIGludGEpOwotCQlnb3RvIHVucGx1Z2dlZDsKLQl9Ci0KLQlJV0xfREVCVUdfSVNSKCJJU1IgaW50YSAweCUwOHgsIGVuYWJsZWQgMHglMDh4LCBmaCAweCUwOHhcbiIsCi0JCSAgICAgIGludGEsIGludGFfbWFzaywgaW50YV9maCk7Ci0KLQlpbnRhICY9IH5DU1JfSU5UX0JJVF9TQ0Q7Ci0KLQkvKiBpd2wzOTQ1X2lycV90YXNrbGV0KCkgd2lsbCBzZXJ2aWNlIGludGVycnVwdHMgYW5kIHJlLWVuYWJsZSB0aGVtICovCi0JaWYgKGxpa2VseShpbnRhIHx8IGludGFfZmgpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5pcnFfdGFza2xldCk7Ci11bnBsdWdnZWQ6Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotCi0gbm9uZToKLQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBoZXJlIHNpbmNlIHdlIGRvbid0IGhhdmUgYW55dGhpbmcgdG8gc2VydmljZS4gKi8KLQkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKLQkJaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Ci0JcmV0dXJuIElSUV9OT05FOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKiogRUVQUk9NIEJBTkRTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBUaGUgaXdsMzk0NV9lZXByb21fYmFuZCBkZWZpbml0aW9ucyBiZWxvdyBwcm92aWRlIHRoZSBtYXBwaW5nIGZyb20gdGhlCi0gKiBFRVBST00gY29udGVudHMgdG8gdGhlIHNwZWNpZmljIGNoYW5uZWwgbnVtYmVyIHN1cHBvcnRlZCBmb3IgZWFjaAotICogYmFuZC4KLSAqCi0gKiBGb3IgZXhhbXBsZSwgaXdsMzk0NV9wcml2LT5lZXByb20uYmFuZF8zX2NoYW5uZWxzWzRdIGZyb20gdGhlIGJhbmRfMwotICogZGVmaW5pdGlvbiBiZWxvdyBtYXBzIHRvIHBoeXNpY2FsIGNoYW5uZWwgNDIgaW4gdGhlIDUuMkdIeiBzcGVjdHJ1bS4KLSAqIFRoZSBzcGVjaWZpYyBnZW9ncmFwaHkgYW5kIGNhbGlicmF0aW9uIGluZm9ybWF0aW9uIGZvciB0aGF0IGNoYW5uZWwKLSAqIGlzIGNvbnRhaW5lZCBpbiB0aGUgZWVwcm9tIG1hcCBpdHNlbGYuCi0gKgotICogRHVyaW5nIGluaXQsIHdlIGNvcHkgdGhlIGVlcHJvbSBpbmZvcm1hdGlvbiBhbmQgY2hhbm5lbCBtYXAKLSAqIGluZm9ybWF0aW9uIGludG8gcHJpdi0+Y2hhbm5lbF9pbmZvXzI0LzUyIGFuZCBwcml2LT5jaGFubmVsX21hcF8yNC81MgotICoKLSAqIGNoYW5uZWxfbWFwXzI0LzUyIHByb3ZpZGVzIHRoZSBpbmRleCBpbiB0aGUgY2hhbm5lbF9pbmZvIGFycmF5IGZvciBhCi0gKiBnaXZlbiBjaGFubmVsLiAgV2UgaGF2ZSB0byBoYXZlIHR3byBzZXBhcmF0ZSBtYXBzIGFzIHRoZXJlIGlzIGNoYW5uZWwKLSAqIG92ZXJsYXAgd2l0aCB0aGUgMi40R0h6IGFuZCA1LjJHSHogc3BlY3RydW0gYXMgc2VlbiBpbiBiYW5kXzEgYW5kCi0gKiBiYW5kXzIKLSAqCi0gKiBBIHZhbHVlIG9mIDB4ZmYgc3RvcmVkIGluIHRoZSBjaGFubmVsX21hcCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hhbm5lbAotICogaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUgYXQgYWxsLgotICoKLSAqIEEgdmFsdWUgb2YgMHhmZSBpbiB0aGUgY2hhbm5lbF9tYXAgaW5kaWNhdGVzIHRoYXQgdGhlIGNoYW5uZWwgaXMgbm90Ci0gKiB2YWxpZCBmb3IgVHggd2l0aCB0aGUgY3VycmVudCBoYXJkd2FyZS4gIFRoaXMgbWVhbnMgdGhhdAotICogd2hpbGUgdGhlIHN5c3RlbSBjYW4gdHVuZSBhbmQgcmVjZWl2ZSBvbiBhIGdpdmVuIGNoYW5uZWwsIGl0IG1heSBub3QKLSAqIGJlIGFibGUgdG8gYXNzb2NpYXRlIG9yIHRyYW5zbWl0IGFueSBmcmFtZXMgb24gdGhhdAotICogY2hhbm5lbC4gIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCBpbmZvcm1hdGlvbiBmb3IgdGhhdAotICogZW50cnkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogMi40IEdIeiAqLwotc3RhdGljIGNvbnN0IHU4IGl3bDM5NDVfZWVwcm9tX2JhbmRfMVsxNF0gPSB7Ci0JMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0Ci19OwotCi0vKiA1LjIgR0h6IGJhbmRzICovCi1zdGF0aWMgY29uc3QgdTggaXdsMzk0NV9lZXByb21fYmFuZF8yW10gPSB7CS8qIDQ5MTUtNTA4ME1IeiAqLwotCTE4MywgMTg0LCAxODUsIDE4NywgMTg4LCAxODksIDE5MiwgMTk2LCA3LCA4LCAxMSwgMTIsIDE2Ci19OwotCi1zdGF0aWMgY29uc3QgdTggaXdsMzk0NV9lZXByb21fYmFuZF8zW10gPSB7CS8qIDUxNzAtNTMyME1IeiAqLwotCTM0LCAzNiwgMzgsIDQwLCA0MiwgNDQsIDQ2LCA0OCwgNTIsIDU2LCA2MCwgNjQKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBpd2wzOTQ1X2VlcHJvbV9iYW5kXzRbXSA9IHsJLyogNTUwMC01NzAwTUh6ICovCi0JMTAwLCAxMDQsIDEwOCwgMTEyLCAxMTYsIDEyMCwgMTI0LCAxMjgsIDEzMiwgMTM2LCAxNDAKLX07Ci0KLXN0YXRpYyBjb25zdCB1OCBpd2wzOTQ1X2VlcHJvbV9iYW5kXzVbXSA9IHsJLyogNTcyNS01ODI1TUh6ICovCi0JMTQ1LCAxNDksIDE1MywgMTU3LCAxNjEsIDE2NQotfTsKLQotc3RhdGljIHZvaWQgaXdsMzk0NV9pbml0X2JhbmRfcmVmZXJlbmNlKGNvbnN0IHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsIGludCBiYW5kLAotCQkJCSAgICBpbnQgKmVlcHJvbV9jaF9jb3VudCwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGl3bDM5NDVfZWVwcm9tX2NoYW5uZWwKLQkJCQkgICAgKiplZXByb21fY2hfaW5mbywKLQkJCQkgICAgY29uc3QgdTggKiplZXByb21fY2hfaW5kZXgpCi17Ci0Jc3dpdGNoIChiYW5kKSB7Ci0JY2FzZSAxOgkJLyogMi40R0h6IGJhbmQgKi8KLQkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsMzk0NV9lZXByb21fYmFuZF8xKTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfMV9jaGFubmVsczsKLQkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bDM5NDVfZWVwcm9tX2JhbmRfMTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgkJLyogNC45R0h6IGJhbmQgKi8KLQkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsMzk0NV9lZXByb21fYmFuZF8yKTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfMl9jaGFubmVsczsKLQkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bDM5NDVfZWVwcm9tX2JhbmRfMjsKLQkJYnJlYWs7Ci0JY2FzZSAzOgkJLyogNS4yR0h6IGJhbmQgKi8KLQkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsMzk0NV9lZXByb21fYmFuZF8zKTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfM19jaGFubmVsczsKLQkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bDM5NDVfZWVwcm9tX2JhbmRfMzsKLQkJYnJlYWs7Ci0JY2FzZSA0OgkJLyogNS41R0h6IGJhbmQgKi8KLQkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsMzk0NV9lZXByb21fYmFuZF80KTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfNF9jaGFubmVsczsKLQkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bDM5NDVfZWVwcm9tX2JhbmRfNDsKLQkJYnJlYWs7Ci0JY2FzZSA1OgkJLyogNS43R0h6IGJhbmQgKi8KLQkJKmVlcHJvbV9jaF9jb3VudCA9IEFSUkFZX1NJWkUoaXdsMzk0NV9lZXByb21fYmFuZF81KTsKLQkJKmVlcHJvbV9jaF9pbmZvID0gcHJpdi0+ZWVwcm9tLmJhbmRfNV9jaGFubmVsczsKLQkJKmVlcHJvbV9jaF9pbmRleCA9IGl3bDM5NDVfZWVwcm9tX2JhbmRfNTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JCXJldHVybjsKLQl9Ci19Ci0KLS8qKgotICogaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvIC0gRmluZCBkcml2ZXIncyBwcml2YXRlIGNoYW5uZWwgaW5mbwotICoKLSAqIEJhc2VkIG9uIGJhbmQgYW5kIGNoYW5uZWwgbnVtYmVyLgotICovCi1jb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKml3bDM5NDVfZ2V0X2NoYW5uZWxfaW5mbyhjb25zdCBzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2LAotCQkJCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwgdTE2IGNoYW5uZWwpCi17Ci0JaW50IGk7Ci0KLQlzd2l0Y2ggKGJhbmQpIHsKLQljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6Ci0JCWZvciAoaSA9IDE0OyBpIDwgcHJpdi0+Y2hhbm5lbF9jb3VudDsgaSsrKSB7Ci0JCQlpZiAocHJpdi0+Y2hhbm5lbF9pbmZvW2ldLmNoYW5uZWwgPT0gY2hhbm5lbCkKLQkJCQlyZXR1cm4gJnByaXYtPmNoYW5uZWxfaW5mb1tpXTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKLQkJaWYgKGNoYW5uZWwgPj0gMSAmJiBjaGFubmVsIDw9IDE0KQotCQkJcmV0dXJuICZwcml2LT5jaGFubmVsX2luZm9bY2hhbm5lbCAtIDFdOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9OVU1fQkFORFM6Ci0JCVdBUk5fT04oMSk7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLSNkZWZpbmUgQ0hFQ0tfQU5EX1BSSU5UKHgpICgoZWVwcm9tX2NoX2luZm9bY2hdLmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfIyN4KSBcCi0JCQkgICAgPyAjIHggIiAiIDogIiIpCi0KLS8qKgotICogaXdsMzk0NV9pbml0X2NoYW5uZWxfbWFwIC0gU2V0IHVwIGRyaXZlcidzIGluZm8gZm9yIGFsbCBwb3NzaWJsZSBjaGFubmVscwotICovCi1zdGF0aWMgaW50IGl3bDM5NDVfaW5pdF9jaGFubmVsX21hcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWludCBlZXByb21fY2hfY291bnQgPSAwOwotCWNvbnN0IHU4ICplZXByb21fY2hfaW5kZXggPSBOVUxMOwotCWNvbnN0IHN0cnVjdCBpd2wzOTQ1X2VlcHJvbV9jaGFubmVsICplZXByb21fY2hfaW5mbyA9IE5VTEw7Ci0JaW50IGJhbmQsIGNoOwotCXN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKLQotCWlmIChwcml2LT5jaGFubmVsX2NvdW50KSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJDaGFubmVsIG1hcCBhbHJlYWR5IGluaXRpYWxpemVkLlxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChwcml2LT5lZXByb20udmVyc2lvbiA8IDB4MmYpIHsKLQkJSVdMX1dBUk5JTkcoIlVuc3VwcG9ydGVkIEVFUFJPTSB2ZXJzaW9uOiAweCUwNFhcbiIsCi0JCQkgICAgcHJpdi0+ZWVwcm9tLnZlcnNpb24pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlJV0xfREVCVUdfSU5GTygiSW5pdGlhbGl6aW5nIHJlZ3VsYXRvcnkgaW5mbyBmcm9tIEVFUFJPTVxuIik7Ci0KLQlwcml2LT5jaGFubmVsX2NvdW50ID0KLQkgICAgQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzEpICsKLQkgICAgQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzIpICsKLQkgICAgQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzMpICsKLQkgICAgQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzQpICsKLQkgICAgQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzUpOwotCi0JSVdMX0RFQlVHX0lORk8oIlBhcnNpbmcgZGF0YSBmb3IgJWQgY2hhbm5lbHMuXG4iLCBwcml2LT5jaGFubmVsX2NvdW50KTsKLQotCXByaXYtPmNoYW5uZWxfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X2NoYW5uZWxfaW5mbykgKgotCQkJCSAgICAgcHJpdi0+Y2hhbm5lbF9jb3VudCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwcml2LT5jaGFubmVsX2luZm8pIHsKLQkJSVdMX0VSUk9SKCJDb3VsZCBub3QgYWxsb2NhdGUgY2hhbm5lbF9pbmZvXG4iKTsKLQkJcHJpdi0+Y2hhbm5lbF9jb3VudCA9IDA7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWNoX2luZm8gPSBwcml2LT5jaGFubmVsX2luZm87Ci0KLQkvKiBMb29wIHRocm91Z2ggdGhlIDUgRUVQUk9NIGJhbmRzIGFkZGluZyB0aGVtIGluIG9yZGVyIHRvIHRoZQotCSAqIGNoYW5uZWwgbWFwIHdlIG1haW50YWluICh0aGF0IGNvbnRhaW5zIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdGhhbgotCSAqIHdoYXQganVzdCBpbiB0aGUgRUVQUk9NKSAqLwotCWZvciAoYmFuZCA9IDE7IGJhbmQgPD0gNTsgYmFuZCsrKSB7Ci0KLQkJaXdsMzk0NV9pbml0X2JhbmRfcmVmZXJlbmNlKHByaXYsIGJhbmQsICZlZXByb21fY2hfY291bnQsCi0JCQkJCSZlZXByb21fY2hfaW5mbywgJmVlcHJvbV9jaF9pbmRleCk7Ci0KLQkJLyogTG9vcCB0aHJvdWdoIGVhY2ggYmFuZCBhZGRpbmcgZWFjaCBvZiB0aGUgY2hhbm5lbHMgKi8KLQkJZm9yIChjaCA9IDA7IGNoIDwgZWVwcm9tX2NoX2NvdW50OyBjaCsrKSB7Ci0JCQljaF9pbmZvLT5jaGFubmVsID0gZWVwcm9tX2NoX2luZGV4W2NoXTsKLQkJCWNoX2luZm8tPmJhbmQgPSAoYmFuZCA9PSAxKSA/IElFRUU4MDIxMV9CQU5EXzJHSFogOgotCQkJICAgIElFRUU4MDIxMV9CQU5EXzVHSFo7Ci0KLQkJCS8qIHBlcm1hbmVudGx5IHN0b3JlIEVFUFJPTSdzIGNoYW5uZWwgcmVndWxhdG9yeSBmbGFncwotCQkJICogICBhbmQgbWF4IHBvd2VyIGluIGNoYW5uZWwgaW5mbyBkYXRhYmFzZS4gKi8KLQkJCWNoX2luZm8tPmVlcHJvbSA9IGVlcHJvbV9jaF9pbmZvW2NoXTsKLQotCQkJLyogQ29weSB0aGUgcnVuLXRpbWUgZmxhZ3Mgc28gdGhleSBhcmUgdGhlcmUgZXZlbiBvbgotCQkJICogaW52YWxpZCBjaGFubmVscyAqLwotCQkJY2hfaW5mby0+ZmxhZ3MgPSBlZXByb21fY2hfaW5mb1tjaF0uZmxhZ3M7Ci0KLQkJCWlmICghKGlzX2NoYW5uZWxfdmFsaWQoY2hfaW5mbykpKSB7Ci0JCQkJSVdMX0RFQlVHX0lORk8oIkNoLiAlZCBGbGFncyAleCBbJXNHSHpdIC0gIgotCQkJCQkgICAgICAgIk5vIHRyYWZmaWNcbiIsCi0JCQkJCSAgICAgICBjaF9pbmZvLT5jaGFubmVsLAotCQkJCQkgICAgICAgY2hfaW5mby0+ZmxhZ3MsCi0JCQkJCSAgICAgICBpc19jaGFubmVsX2FfYmFuZChjaF9pbmZvKSA/Ci0JCQkJCSAgICAgICAiNS4yIiA6ICIyLjQiKTsKLQkJCQljaF9pbmZvKys7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIEluaXRpYWxpemUgcmVndWxhdG9yeS1iYXNlZCBydW4tdGltZSBkYXRhICovCi0JCQljaF9pbmZvLT5tYXhfcG93ZXJfYXZnID0gY2hfaW5mby0+Y3Vycl90eHBvdyA9Ci0JCQkgICAgZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7Ci0JCQljaF9pbmZvLT5zY2FuX3Bvd2VyID0gZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmc7Ci0JCQljaF9pbmZvLT5taW5fcG93ZXIgPSAwOwotCi0JCQlJV0xfREVCVUdfSU5GTygiQ2guICVkIFslc0dIel0gJXMlcyVzJXMlcyVzKDB4JTAyeCIKLQkJCQkgICAgICAgIiAlZGRCbSk6IEFkLUhvYyAlc3N1cHBvcnRlZFxuIiwKLQkJCQkgICAgICAgY2hfaW5mby0+Y2hhbm5lbCwKLQkJCQkgICAgICAgaXNfY2hhbm5lbF9hX2JhbmQoY2hfaW5mbykgPwotCQkJCSAgICAgICAiNS4yIiA6ICIyLjQiLAotCQkJCSAgICAgICBDSEVDS19BTkRfUFJJTlQoVkFMSUQpLAotCQkJCSAgICAgICBDSEVDS19BTkRfUFJJTlQoSUJTUyksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChBQ1RJVkUpLAotCQkJCSAgICAgICBDSEVDS19BTkRfUFJJTlQoUkFEQVIpLAotCQkJCSAgICAgICBDSEVDS19BTkRfUFJJTlQoV0lERSksCi0JCQkJICAgICAgIENIRUNLX0FORF9QUklOVChERlMpLAotCQkJCSAgICAgICBlZXByb21fY2hfaW5mb1tjaF0uZmxhZ3MsCi0JCQkJICAgICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnLAotCQkJCSAgICAgICAoKGVlcHJvbV9jaF9pbmZvW2NoXS4KLQkJCQkJIGZsYWdzICYgRUVQUk9NX0NIQU5ORUxfSUJTUykKLQkJCQkJJiYgIShlZXByb21fY2hfaW5mb1tjaF0uCi0JCQkJCSAgICAgZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9SQURBUikpCi0JCQkJICAgICAgID8gIiIgOiAibm90ICIpOwotCi0JCQkvKiBTZXQgdGhlIHVzZXJfdHhwb3dlcl9saW1pdCB0byB0aGUgaGlnaGVzdCBwb3dlcgotCQkJICogc3VwcG9ydGVkIGJ5IGFueSBjaGFubmVsICovCi0JCQlpZiAoZWVwcm9tX2NoX2luZm9bY2hdLm1heF9wb3dlcl9hdmcgPgotCQkJICAgIHByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCkKLQkJCQlwcml2LT51c2VyX3R4cG93ZXJfbGltaXQgPQotCQkJCSAgICBlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZzsKLQotCQkJY2hfaW5mbysrOwotCQl9Ci0JfQotCi0JLyogU2V0IHVwIHR4cG93ZXIgc2V0dGluZ3MgaW4gZHJpdmVyIGZvciBhbGwgY2hhbm5lbHMgKi8KLQlpZiAoaXdsMzk0NV90eHBvd2VyX3NldF9mcm9tX2VlcHJvbShwcml2KSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGl3bDM5NDVfZnJlZV9jaGFubmVsX21hcCAtIHVuZG8gYWxsb2NhdGlvbnMgaW4gaXdsMzk0NV9pbml0X2NoYW5uZWxfbWFwCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZnJlZV9jaGFubmVsX21hcChzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWtmcmVlKHByaXYtPmNoYW5uZWxfaW5mbyk7Ci0JcHJpdi0+Y2hhbm5lbF9jb3VudCA9IDA7Ci19Ci0KLS8qIEZvciBhY3RpdmUgc2NhbiwgbGlzdGVuIEFDVElWRV9EV0VMTF9USU1FIChtc2VjKSBvbiBlYWNoIGNoYW5uZWwgYWZ0ZXIKLSAqIHNlbmRpbmcgcHJvYmUgcmVxLiAgVGhpcyBzaG91bGQgYmUgc2V0IGxvbmcgZW5vdWdoIHRvIGhlYXIgcHJvYmUgcmVzcG9uc2VzCi0gKiBmcm9tIG1vcmUgdGhhbiBvbmUgQVAuICAqLwotI2RlZmluZSBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfMjQgICAgKDMwKQkvKiBhbGwgdGltZXMgaW4gbXNlYyAqLwotI2RlZmluZSBJV0xfQUNUSVZFX0RXRUxMX1RJTUVfNTIgICAgKDIwKQotCi0jZGVmaW5lIElXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzI0R0haICgzKQotI2RlZmluZSBJV0xfQUNUSVZFX0RXRUxMX0ZBQ1RPUl81MkdIWiAoMikKLQotLyogRm9yIGZhc3RlciBhY3RpdmUgc2Nhbm5pbmcsIHNjYW4gd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IGNoYW5uZWwgaWYgZmV3ZXIgdGhhbgotICogUExDUF9RVUlFVF9USFJFU0ggcGFja2V0cyBhcmUgaGVhcmQgb24gdGhpcyBjaGFubmVsIHdpdGhpbgotICogQUNUSVZFX1FVSUVUX1RJTUUgYWZ0ZXIgc2VuZGluZyBwcm9iZSByZXF1ZXN0LiAgVGhpcyBzaG9ydGVucyB0aGUgZHdlbGwKLSAqIHRpbWUgaWYgaXQncyBhIHF1aWV0IGNoYW5uZWwgKG5vdGhpbmcgcmVzcG9uZGVkIHRvIG91ciBwcm9iZSwgYW5kIHRoZXJlJ3MKLSAqIG5vIG90aGVyIHRyYWZmaWMpLgotICogRGlzYWJsZSAicXVpZXQiIGZlYXR1cmUgYnkgc2V0dGluZyBQTENQX1FVSUVUX1RIUkVTSCB0byAwLiAqLwotI2RlZmluZSBJV0xfUExDUF9RVUlFVF9USFJFU0ggICAgICAgX19jb25zdGFudF9jcHVfdG9fbGUxNigxKQkvKiBwYWNrZXRzICovCi0jZGVmaW5lIElXTF9BQ1RJVkVfUVVJRVRfVElNRSAgICAgICBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEwKQkvKiBtc2VjICovCi0KLS8qIEZvciBwYXNzaXZlIHNjYW4sIGxpc3RlbiBQQVNTSVZFX0RXRUxMX1RJTUUgKG1zZWMpIG9uIGVhY2ggY2hhbm5lbC4KLSAqIE11c3QgYmUgc2V0IGxvbmdlciB0aGFuIGFjdGl2ZSBkd2VsbCB0aW1lLgotICogRm9yIHRoZSBtb3N0IHJlbGlhYmxlIHNjYW4sIHNldCA+IEFQIGJlYWNvbiBpbnRlcnZhbCAodHlwaWNhbGx5IDEwMG1zZWMpLiAqLwotI2RlZmluZSBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzI0ICAgKDIwKQkvKiBhbGwgdGltZXMgaW4gbXNlYyAqLwotI2RlZmluZSBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzUyICAgKDEwKQotI2RlZmluZSBJV0xfUEFTU0lWRV9EV0VMTF9CQVNFICAgICAgKDEwMCkKLSNkZWZpbmUgSVdMX0NIQU5ORUxfVFVORV9USU1FICAgICAgIDUKLQotI2RlZmluZSBJV0xfU0NBTl9QUk9CRV9NQVNLKG4pCSAoQklUKG4pIHwgKEJJVChuKSAtIEJJVCgxKSkpCi0KLXN0YXRpYyBpbmxpbmUgdTE2IGl3bDM5NDVfZ2V0X2FjdGl2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCi0JCQkJCQl1OCBuX3Byb2JlcykKLXsKLQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQotCQlyZXR1cm4gSVdMX0FDVElWRV9EV0VMTF9USU1FXzUyICsKLQkJCUlXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzUyR0haICogKG5fcHJvYmVzICsgMSk7Ci0JZWxzZQotCQlyZXR1cm4gSVdMX0FDVElWRV9EV0VMTF9USU1FXzI0ICsKLQkJCUlXTF9BQ1RJVkVfRFdFTExfRkFDVE9SXzI0R0haICogKG5fcHJvYmVzICsgMSk7Ci19Ci0KLXN0YXRpYyB1MTYgaXdsMzk0NV9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCi0JCQkJCSAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQotewotCXUxNiBwYXNzaXZlID0gKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgPwotCSAgICBJV0xfUEFTU0lWRV9EV0VMTF9CQVNFICsgSVdMX1BBU1NJVkVfRFdFTExfVElNRV8yNCA6Ci0JICAgIElXTF9QQVNTSVZFX0RXRUxMX0JBU0UgKyBJV0xfUEFTU0lWRV9EV0VMTF9USU1FXzUyOwotCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkgewotCQkvKiBJZiB3ZSdyZSBhc3NvY2lhdGVkLCB3ZSBjbGFtcCB0aGUgbWF4aW11bSBwYXNzaXZlCi0JCSAqIGR3ZWxsIHRpbWUgdG8gYmUgOTglIG9mIHRoZSBiZWFjb24gaW50ZXJ2YWwgKG1pbnVzCi0JCSAqIDIgKiBjaGFubmVsIHR1bmUgdGltZSkgKi8KLQkJcGFzc2l2ZSA9IHByaXYtPmJlYWNvbl9pbnQ7Ci0JCWlmICgocGFzc2l2ZSA+IElXTF9QQVNTSVZFX0RXRUxMX0JBU0UpIHx8ICFwYXNzaXZlKQotCQkJcGFzc2l2ZSA9IElXTF9QQVNTSVZFX0RXRUxMX0JBU0U7Ci0JCXBhc3NpdmUgPSAocGFzc2l2ZSAqIDk4KSAvIDEwMCAtIElXTF9DSEFOTkVMX1RVTkVfVElNRSAqIDI7Ci0JfQotCi0JcmV0dXJuIHBhc3NpdmU7Ci19Ci0KLXN0YXRpYyBpbnQgaXdsMzk0NV9nZXRfY2hhbm5lbHNfZm9yX3NjYW4oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwKK3N0YXRpYyBpbnQgaXdsMzk0NV9nZXRfY2hhbm5lbHNfZm9yX3NjYW4oc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCQkgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAogCQkJCSAgICAgdTggaXNfYWN0aXZlLCB1OCBuX3Byb2JlcywKIAkJCQkgICAgIHN0cnVjdCBpd2wzOTQ1X3NjYW5fY2hhbm5lbCAqc2Nhbl9jaCkKIHsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWxzID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJdTE2IHBhc3NpdmVfZHdlbGwgPSAwOwogCXUxNiBhY3RpdmVfZHdlbGwgPSAwOwogCWludCBhZGRlZCwgaTsKIAotCXNiYW5kID0gaXdsMzk0NV9nZXRfYmFuZChwcml2LCBiYW5kKTsKKwlzYmFuZCA9IGl3bF9nZXRfaHdfbW9kZShwcml2LCBiYW5kKTsKIAlpZiAoIXNiYW5kKQogCQlyZXR1cm4gMDsKIAogCWNoYW5uZWxzID0gc2JhbmQtPmNoYW5uZWxzOwogCi0JYWN0aXZlX2R3ZWxsID0gaXdsMzk0NV9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCwgbl9wcm9iZXMpOwotCXBhc3NpdmVfZHdlbGwgPSBpd2wzOTQ1X2dldF9wYXNzaXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCk7CisJYWN0aXZlX2R3ZWxsID0gaXdsX2dldF9hY3RpdmVfZHdlbGxfdGltZShwcml2LCBiYW5kLCBuX3Byb2Jlcyk7CisJcGFzc2l2ZV9kd2VsbCA9IGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQpOwogCiAJaWYgKHBhc3NpdmVfZHdlbGwgPD0gYWN0aXZlX2R3ZWxsKQogCQlwYXNzaXZlX2R3ZWxsID0gYWN0aXZlX2R3ZWxsICsgMTsKQEAgLTQ3NzEsOSArMjI0OSw5IEBACiAKIAkJc2Nhbl9jaC0+Y2hhbm5lbCA9IGNoYW5uZWxzW2ldLmh3X3ZhbHVlOwogCi0JCWNoX2luZm8gPSBpd2wzOTQ1X2dldF9jaGFubmVsX2luZm8ocHJpdiwgYmFuZCwgc2Nhbl9jaC0+Y2hhbm5lbCk7CisJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LCBiYW5kLCBzY2FuX2NoLT5jaGFubmVsKTsKIAkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKSB7Ci0JCQlJV0xfREVCVUdfU0NBTigiQ2hhbm5lbCAlZCBpcyBJTlZBTElEIGZvciB0aGlzIGJhbmQuXG4iLAorCQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIkNoYW5uZWwgJWQgaXMgSU5WQUxJRCBmb3IgdGhpcyBiYW5kLlxuIiwKIAkJCQkgICAgICAgc2Nhbl9jaC0+Y2hhbm5lbCk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNDc5OCwxMiArMjI3NiwxMiBAQAogCQkgKiBoZWFyaW5nIGNsZWFyIFJ4IHBhY2tldCkuKi8KIAkJaWYgKElXTF9VQ09ERV9BUEkocHJpdi0+dWNvZGVfdmVyKSA+PSAyKSB7CiAJCQlpZiAobl9wcm9iZXMpCi0JCQkJc2Nhbl9jaC0+dHlwZSB8PSBJV0xfU0NBTl9QUk9CRV9NQVNLKG5fcHJvYmVzKTsKKwkJCQlzY2FuX2NoLT50eXBlIHw9IElXTDM5X1NDQU5fUFJPQkVfTUFTSyhuX3Byb2Jlcyk7CiAJCX0gZWxzZSB7CiAJCQkvKiB1Q29kZSB2MSBkb2VzIG5vdCBhbGxvdyBzZXR0aW5nIGRpcmVjdCBwcm9iZSBiaXRzIG9uCiAJCQkgKiBwYXNzaXZlIGNoYW5uZWwuICovCiAJCQlpZiAoKHNjYW5fY2gtPnR5cGUgJiAxKSAmJiBuX3Byb2JlcykKLQkJCQlzY2FuX2NoLT50eXBlIHw9IElXTF9TQ0FOX1BST0JFX01BU0sobl9wcm9iZXMpOworCQkJCXNjYW5fY2gtPnR5cGUgfD0gSVdMMzlfU0NBTl9QUk9CRV9NQVNLKG5fcHJvYmVzKTsKIAkJfQogCiAJCS8qIFNldCB0eHBvd2VyIGxldmVscyB0byBkZWZhdWx0cyAqLwpAQCAtNDgyMSw3ICsyMjk5LDcgQEAKIAkJCSAqLwogCQl9CiAKLQkJSVdMX0RFQlVHX1NDQU4oIlNjYW5uaW5nICVkIFslcyAlZF1cbiIsCisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FubmluZyAlZCBbJXMgJWRdXG4iLAogCQkJICAgICAgIHNjYW5fY2gtPmNoYW5uZWwsCiAJCQkgICAgICAgKHNjYW5fY2gtPnR5cGUgJiAxKSA/ICJBQ1RJVkUiIDogIlBBU1NJVkUiLAogCQkJICAgICAgIChzY2FuX2NoLT50eXBlICYgMSkgPwpAQCAtNDgzMSwxMSArMjMwOSwxMSBAQAogCQlhZGRlZCsrOwogCX0KIAotCUlXTF9ERUJVR19TQ0FOKCJ0b3RhbCBjaGFubmVscyB0byBzY2FuICVkIFxuIiwgYWRkZWQpOworCUlXTF9ERUJVR19TQ0FOKHByaXYsICJ0b3RhbCBjaGFubmVscyB0byBzY2FuICVkIFxuIiwgYWRkZWQpOwogCXJldHVybiBhZGRlZDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9pbml0X2h3X3JhdGVzKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYsCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2luaXRfaHdfcmF0ZXMoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlcykKIHsKIAlpbnQgaTsKQEAgLTQ4NDUsNyArMjMyMyw3IEBACiAJCXJhdGVzW2ldLmh3X3ZhbHVlID0gaTsgLyogUmF0ZSBzY2FsaW5nIHdpbGwgd29yayBvbiBpbmRleGVzICovCiAJCXJhdGVzW2ldLmh3X3ZhbHVlX3Nob3J0ID0gaTsKIAkJcmF0ZXNbaV0uZmxhZ3MgPSAwOwotCQlpZiAoKGkgPiBJV0xfTEFTVF9PRkRNX1JBVEUpIHx8IChpIDwgSVdMX0ZJUlNUX09GRE1fUkFURSkpIHsKKwkJaWYgKChpID4gSVdMMzlfTEFTVF9PRkRNX1JBVEUpIHx8IChpIDwgSVdMX0ZJUlNUX09GRE1fUkFURSkpIHsKIAkJCS8qCiAJCQkgKiBJZiBDQ0sgIT0gMU0gdGhlbiBzZXQgc2hvcnQgcHJlYW1ibGUgcmF0ZSBmbGFnLgogCQkJICovCkBAIC00ODU1LDE0NSArMjMzMywxMyBAQAogCX0KIH0KIAotLyoqCi0gKiBpd2wzOTQ1X2luaXRfZ2VvcyAtIEluaXRpYWxpemUgbWFjODAyMTEncyBnZW8vY2hhbm5lbCBpbmZvIGJhc2VkIGZyb20gZWVwcm9tCi0gKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9pbml0X2dlb3Moc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpnZW9fY2g7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlczsKLQlpbnQgaSA9IDA7Ci0KLQlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9iaXRyYXRlcyB8fAotCSAgICBwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2JpdHJhdGVzKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJHZW9ncmFwaHkgbW9kZXMgYWxyZWFkeSBpbml0aWFsaXplZC5cbiIpOwotCQlzZXRfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7Ci0JCXJldHVybiAwOwotCX0KLQotCWNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSAqCi0JCQkgICBwcml2LT5jaGFubmVsX2NvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNoYW5uZWxzKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJhdGVzID0ga3phbGxvYygoc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmF0ZSkgKiAoSVdMX1JBVEVfQ09VTlQgKyAxKSksCi0JCQlHRlBfS0VSTkVMKTsKLQlpZiAoIXJhdGVzKSB7Ci0JCWtmcmVlKGNoYW5uZWxzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogNS4yR0h6IGNoYW5uZWxzIHN0YXJ0IGFmdGVyIHRoZSAyLjRHSHogY2hhbm5lbHMgKi8KLQlzYmFuZCA9ICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLQlzYmFuZC0+Y2hhbm5lbHMgPSAmY2hhbm5lbHNbQVJSQVlfU0laRShpd2wzOTQ1X2VlcHJvbV9iYW5kXzEpXTsKLQkvKiBqdXN0IE9GRE0gKi8KLQlzYmFuZC0+Yml0cmF0ZXMgPSAmcmF0ZXNbSVdMX0ZJUlNUX09GRE1fUkFURV07Ci0Jc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVCAtIElXTF9GSVJTVF9PRkRNX1JBVEU7Ci0KLQlzYmFuZCA9ICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKLQlzYmFuZC0+Y2hhbm5lbHMgPSBjaGFubmVsczsKLQkvKiBPRkRNICYgQ0NLICovCi0Jc2JhbmQtPmJpdHJhdGVzID0gcmF0ZXM7Ci0Jc2JhbmQtPm5fYml0cmF0ZXMgPSBJV0xfUkFURV9DT1VOVDsKLQotCXByaXYtPmllZWVfY2hhbm5lbHMgPSBjaGFubmVsczsKLQlwcml2LT5pZWVlX3JhdGVzID0gcmF0ZXM7Ci0KLQlpd2wzOTQ1X2luaXRfaHdfcmF0ZXMocHJpdiwgcmF0ZXMpOwotCi0JZm9yIChpID0gMDsgIGkgPCBwcml2LT5jaGFubmVsX2NvdW50OyBpKyspIHsKLQkJY2ggPSAmcHJpdi0+Y2hhbm5lbF9pbmZvW2ldOwotCi0JCS8qIEZJWE1FOiBtaWdodCBiZSByZW1vdmVkIGlmIHNjYW4gaXMgT0sqLwotCQlpZiAoIWlzX2NoYW5uZWxfdmFsaWQoY2gpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGlzX2NoYW5uZWxfYV9iYW5kKGNoKSkKLQkJCXNiYW5kID0gICZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLQkJZWxzZQotCQkJc2JhbmQgPSAgJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwotCi0JCWdlb19jaCA9ICZzYmFuZC0+Y2hhbm5lbHNbc2JhbmQtPm5fY2hhbm5lbHMrK107Ci0KLQkJZ2VvX2NoLT5jZW50ZXJfZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaC0+Y2hhbm5lbCk7Ci0JCWdlb19jaC0+bWF4X3Bvd2VyID0gY2gtPm1heF9wb3dlcl9hdmc7Ci0JCWdlb19jaC0+bWF4X2FudGVubmFfZ2FpbiA9IDB4ZmY7Ci0JCWdlb19jaC0+aHdfdmFsdWUgPSBjaC0+Y2hhbm5lbDsKLQotCQlpZiAoaXNfY2hhbm5lbF92YWxpZChjaCkpIHsKLQkJCWlmICghKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0lCU1MpKQotCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fTk9fSUJTUzsKLQotCQkJaWYgKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfQUNUSVZFKSkKLQkJCQlnZW9fY2gtPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKLQotCQkJaWYgKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX1JBREFSKQotCQkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fUkFEQVI7Ci0KLQkJCWlmIChjaC0+bWF4X3Bvd2VyX2F2ZyA+IHByaXYtPm1heF9jaGFubmVsX3R4cG93ZXJfbGltaXQpCi0JCQkJcHJpdi0+bWF4X2NoYW5uZWxfdHhwb3dlcl9saW1pdCA9Ci0JCQkJICAgIGNoLT5tYXhfcG93ZXJfYXZnOwotCQl9IGVsc2UgewotCQkJZ2VvX2NoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRDsKLQkJfQotCi0JCS8qIFNhdmUgZmxhZ3MgZm9yIHJlZyBkb21haW4gdXNhZ2UgKi8KLQkJZ2VvX2NoLT5vcmlnX2ZsYWdzID0gZ2VvX2NoLT5mbGFnczsKLQotCQlJV0xfREVCVUdfSU5GTygiQ2hhbm5lbCAlZCBGcmVxPSVkWyVzR0h6XSAlcyBmbGFnPTAlWFxuIiwKLQkJCQljaC0+Y2hhbm5lbCwgZ2VvX2NoLT5jZW50ZXJfZnJlcSwKLQkJCQlpc19jaGFubmVsX2FfYmFuZChjaCkgPyAgIjUuMiIgOiAiMi40IiwKLQkJCQlnZW9fY2gtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQgPwotCQkJCSJyZXN0cmljdGVkIiA6ICJ2YWxpZCIsCi0JCQkJIGdlb19jaC0+ZmxhZ3MpOwotCX0KLQotCWlmICgocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyA9PSAwKSAmJgotCSAgICAgcHJpdi0+Y2ZnLT5za3UgJiBJV0xfU0tVX0EpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkgICAgICAgIjogSW5jb3JyZWN0bHkgZGV0ZWN0ZWQgQkcgY2FyZCBhcyBBQkcuICBQbGVhc2Ugc2VuZCAiCi0JCSAgICAgICAieW91ciBQQ0kgSUQgMHglMDRYOjB4JTA0WCB0byBtYWludGFpbmVyLlxuIiwKLQkJICAgICAgIHByaXYtPnBjaV9kZXYtPmRldmljZSwgcHJpdi0+cGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSk7Ci0JCSBwcml2LT5jZmctPnNrdSAmPSB+SVdMX1NLVV9BOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkgICAgICAgIjogVHVuYWJsZSBjaGFubmVsczogJWQgODAyLjExYmcsICVkIDgwMi4xMWEgY2hhbm5lbHNcbiIsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMsCi0JICAgICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fY2hhbm5lbHMpOwotCi0JaWYgKHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMpCi0JCXByaXYtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPQotCQkJJnByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwotCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzKQotCQlwcml2LT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KLQkJCSZwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLQotCXNldF9iaXQoU1RBVFVTX0dFT19DT05GSUdVUkVELCAmcHJpdi0+c3RhdHVzKTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogaXdsMzk0NV9mcmVlX2dlb3MgLSB1bmRvIGFsbG9jYXRpb25zIGluIGl3bDM5NDVfaW5pdF9nZW9zCi0gKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfZnJlZV9nZW9zKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0Ja2ZyZWUocHJpdi0+aWVlZV9jaGFubmVscyk7Ci0Ja2ZyZWUocHJpdi0+aWVlZV9yYXRlcyk7Ci0JY2xlYXJfYml0KFNUQVRVU19HRU9fQ09ORklHVVJFRCwgJnByaXYtPnN0YXR1cyk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiB1Q29kZSBkb3dubG9hZCBmdW5jdGlvbnMKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2RlYWxsb2NfdWNvZGVfcGNpKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2RlYWxsb2NfdWNvZGVfcGNpKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpd2xfZnJlZV9md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9jb2RlKTsKIAlpd2xfZnJlZV9md19kZXNjKHByaXYtPnBjaV9kZXYsICZwcml2LT51Y29kZV9kYXRhKTsKQEAgLTUwMDcsMjkgKzIzNTMsMzAgQEAKICAqIGl3bDM5NDVfdmVyaWZ5X2luc3RfZnVsbCAtIHZlcmlmeSBydW50aW1lIHVDb2RlIGltYWdlIGluIGNhcmQgdnMuIGhvc3QsCiAgKiAgICAgbG9va2luZyBhdCBhbGwgZGF0YS4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9pbnN0X2Z1bGwoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgX19sZTMyICppbWFnZSwgdTMyIGxlbikKK3N0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfaW5zdF9mdWxsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgX19sZTMyICppbWFnZSwgdTMyIGxlbikKIHsKIAl1MzIgdmFsOwogCXUzMiBzYXZlX2xlbiA9IGxlbjsKIAlpbnQgcmMgPSAwOwogCXUzMiBlcnJjbnQ7CiAKLQlJV0xfREVCVUdfSU5GTygidWNvZGUgaW5zdCBpbWFnZSBzaXplIGlzICV1XG4iLCBsZW4pOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CiAKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCWl3bDM5NDVfd3JpdGVfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SQUREUiwgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOworCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLAorCQkJICAgICAgIElXTDM5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKIAogCWVycmNudCA9IDA7CiAJZm9yICg7IGxlbiA+IDA7IGxlbiAtPSBzaXplb2YodTMyKSwgaW1hZ2UrKykgewogCQkvKiByZWFkIGRhdGEgY29tZXMgdGhyb3VnaCBzaW5nbGUgcG9ydCwgYXV0by1pbmNyIGFkZHIgKi8KIAkJLyogTk9URTogVXNlIHRoZSBkZWJ1Z2xlc3MgcmVhZCBzbyB3ZSBkb24ndCBmbG9vZCBrZXJuZWwgbG9nCiAJCSAqIGlmIElXTF9ETF9JTyBpcyBzZXQgKi8KLQkJdmFsID0gX2l3bDM5NDVfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQl2YWwgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKHZhbCAhPSBsZTMyX3RvX2NwdSgqaW1hZ2UpKSB7Ci0JCQlJV0xfRVJST1IoInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKKwkJCUlXTF9FUlIocHJpdiwgInVDb2RlIElOU1Qgc2VjdGlvbiBpcyBpbnZhbGlkIGF0ICIKIAkJCQkgICJvZmZzZXQgMHgleCwgaXMgMHgleCwgcy9iIDB4JXhcbiIsCiAJCQkJICBzYXZlX2xlbiAtIGxlbiwgdmFsLCBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKIAkJCXJjID0gLUVJTzsKQEAgLTUwMzksMTAgKzIzODYsMTEgQEAKIAkJfQogCX0KIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlpZiAoIWVycmNudCkKLQkJSVdMX0RFQlVHX0lORk8oInVjb2RlIGltYWdlIGluIElOU1RSVUNUSU9OIG1lbW9yeSBpcyBnb29kXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCSJ1Y29kZSBpbWFnZSBpbiBJTlNUUlVDVElPTiBtZW1vcnkgaXMgZ29vZFxuIik7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC01MDUzLDE2ICsyNDAxLDE2IEBACiAgKiAgIHVzaW5nIHNhbXBsZSBkYXRhIDEwMCBieXRlcyBhcGFydC4gIElmIHRoZXNlIHNhbXBsZSBwb2ludHMgYXJlIGdvb2QsCiAgKiAgIGl0J3MgYSBwcmV0dHkgZ29vZCBiZXQgdGhhdCBldmVyeXRoaW5nIGJldHdlZW4gdGhlbSBpcyBnb29kLCB0b28uCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfaW5zdF9zcGFyc2Uoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiwgX19sZTMyICppbWFnZSwgdTMyIGxlbikKK3N0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfaW5zdF9zcGFyc2Uoc3RydWN0IGl3bF9wcml2ICpwcml2LCBfX2xlMzIgKmltYWdlLCB1MzIgbGVuKQogewogCXUzMiB2YWw7CiAJaW50IHJjID0gMDsKIAl1MzIgZXJyY250ID0gMDsKIAl1MzIgaTsKIAotCUlXTF9ERUJVR19JTkZPKCJ1Y29kZSBpbnN0IGltYWdlIHNpemUgaXMgJXVcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVjb2RlIGluc3QgaW1hZ2Ugc2l6ZSBpcyAldVxuIiwgbGVuKTsKIAotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCkBAIC01MDcwLDEyICsyNDE4LDEyIEBACiAJCS8qIHJlYWQgZGF0YSBjb21lcyB0aHJvdWdoIHNpbmdsZSBwb3J0LCBhdXRvLWluY3IgYWRkciAqLwogCQkvKiBOT1RFOiBVc2UgdGhlIGRlYnVnbGVzcyByZWFkIHNvIHdlIGRvbid0IGZsb29kIGtlcm5lbCBsb2cKIAkJICogaWYgSVdMX0RMX0lPIGlzIHNldCAqLwotCQlpd2wzOTQ1X3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsCi0JCQlpICsgUlRDX0lOU1RfTE9XRVJfQk9VTkQpOwotCQl2YWwgPSBfaXdsMzk0NV9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CisJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JBRERSLAorCQkJaSArIElXTDM5X1JUQ19JTlNUX0xPV0VSX0JPVU5EKTsKKwkJdmFsID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCWlmICh2YWwgIT0gbGUzMl90b19jcHUoKmltYWdlKSkgewogI2lmIDAgLyogRW5hYmxlIHRoaXMgaWYgeW91IHdhbnQgdG8gc2VlIGRldGFpbHMgKi8KLQkJCUlXTF9FUlJPUigidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgorCQkJSVdMX0VSUihwcml2LCAidUNvZGUgSU5TVCBzZWN0aW9uIGlzIGludmFsaWQgYXQgIgogCQkJCSAgIm9mZnNldCAweCV4LCBpcyAweCV4LCBzL2IgMHgleFxuIiwKIAkJCQkgIGksIHZhbCwgKmltYWdlKTsKICNlbmRpZgpAQCAtNTA4Niw3ICsyNDM0LDcgQEAKIAkJfQogCX0KIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC01MDk2LDcgKzI0NDQsNyBAQAogICogaXdsMzk0NV92ZXJpZnlfdWNvZGUgLSBkZXRlcm1pbmUgd2hpY2ggaW5zdHJ1Y3Rpb24gaW1hZ2UgaXMgaW4gU1JBTSwKICAqICAgIGFuZCB2ZXJpZnkgaXRzIGNvbnRlbnRzCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfdWNvZGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV92ZXJpZnlfdWNvZGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCV9fbGUzMiAqaW1hZ2U7CiAJdTMyIGxlbjsKQEAgLTUxMDcsNyArMjQ1NSw3IEBACiAJbGVuID0gcHJpdi0+dWNvZGVfYm9vdC5sZW47CiAJcmMgPSBpd2wzOTQ1X3ZlcmlmeV9pbnN0X3NwYXJzZShwcml2LCBpbWFnZSwgbGVuKTsKIAlpZiAocmMgPT0gMCkgewotCQlJV0xfREVCVUdfSU5GTygiQm9vdHN0cmFwIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJvb3RzdHJhcCB1Q29kZSBpcyBnb29kIGluIGluc3QgU1JBTVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTExNiw3ICsyNDY0LDcgQEAKIAlsZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKIAlyYyA9IGl3bDM5NDVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmIChyYyA9PSAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUxMjUsMTEgKzI0NzMsMTEgQEAKIAlsZW4gPSBwcml2LT51Y29kZV9jb2RlLmxlbjsKIAlyYyA9IGl3bDM5NDVfdmVyaWZ5X2luc3Rfc3BhcnNlKHByaXYsIGltYWdlLCBsZW4pOwogCWlmIChyYyA9PSAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIHVDb2RlIGlzIGdvb2QgaW4gaW5zdCBTUkFNXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgdUNvZGUgaXMgZ29vZCBpbiBpbnN0IFNSQU1cbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJV0xfRVJST1IoIk5PIFZBTElEIFVDT0RFIElNQUdFIElOIElOU1RSVUNUSU9OIFNSQU0hIVxuIik7CisJSVdMX0VSUihwcml2LCAiTk8gVkFMSUQgVUNPREUgSU1BR0UgSU4gSU5TVFJVQ1RJT04gU1JBTSEhXG4iKTsKIAogCS8qIFNpbmNlIG5vdGhpbmcgc2VlbXMgdG8gbWF0Y2gsIHNob3cgZmlyc3Qgc2V2ZXJhbCBkYXRhIGVudHJpZXMgaW4KIAkgKiBpbnN0cnVjdGlvbiBTUkFNLCBzbyBtYXliZSB2aXN1YWwgaW5zcGVjdGlvbiB3aWxsIGdpdmUgYSBjbHVlLgpAQCAtNTE0MSwxNjAgKzI0ODksMTAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQotLyogY2hlY2sgY29udGVudHMgb2Ygc3BlY2lhbCBib290c3RyYXAgdUNvZGUgU1JBTSAqLwotc3RhdGljIGludCBpd2wzOTQ1X3ZlcmlmeV9ic20oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKLXsKLQlfX2xlMzIgKmltYWdlID0gcHJpdi0+dWNvZGVfYm9vdC52X2FkZHI7Ci0JdTMyIGxlbiA9IHByaXYtPnVjb2RlX2Jvb3QubGVuOwotCXUzMiByZWc7Ci0JdTMyIHZhbDsKLQotCUlXTF9ERUJVR19JTkZPKCJCZWdpbiB2ZXJpZnkgYnNtXG4iKTsKLQotCS8qIHZlcmlmeSBCU00gU1JBTSBjb250ZW50cyAqLwotCXZhbCA9IGl3bDM5NDVfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9EV0NPVU5UX1JFRyk7Ci0JZm9yIChyZWcgPSBCU01fU1JBTV9MT1dFUl9CT1VORDsKLQkgICAgIHJlZyA8IEJTTV9TUkFNX0xPV0VSX0JPVU5EICsgbGVuOwotCSAgICAgcmVnICs9IHNpemVvZih1MzIpLCBpbWFnZSsrKSB7Ci0JCXZhbCA9IGl3bDM5NDVfcmVhZF9wcnBoKHByaXYsIHJlZyk7Ci0JCWlmICh2YWwgIT0gbGUzMl90b19jcHUoKmltYWdlKSkgewotCQkJSVdMX0VSUk9SKCJCU00gdUNvZGUgdmVyaWZpY2F0aW9uIGZhaWxlZCBhdCAiCi0JCQkJICAiYWRkciAweCUwOFgrJXUgKG9mICV1KSwgaXMgMHgleCwgcy9iIDB4JXhcbiIsCi0JCQkJICBCU01fU1JBTV9MT1dFUl9CT1VORCwKLQkJCQkgIHJlZyAtIEJTTV9TUkFNX0xPV0VSX0JPVU5ELCBsZW4sCi0JCQkJICB2YWwsIGxlMzJfdG9fY3B1KCppbWFnZSkpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQlJV0xfREVCVUdfSU5GTygiQlNNIGJvb3RzdHJhcCB1Q29kZSBpbWFnZSBPS1xuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBpd2wzOTQ1X2xvYWRfYnNtIC0gTG9hZCBib290c3RyYXAgaW5zdHJ1Y3Rpb25zCi0gKgotICogQlNNIG9wZXJhdGlvbjoKLSAqCi0gKiBUaGUgQm9vdHN0cmFwIFN0YXRlIE1hY2hpbmUgKEJTTSkgc3RvcmVzIGEgc2hvcnQgYm9vdHN0cmFwIHVDb2RlIHByb2dyYW0KLSAqIGluIHNwZWNpYWwgU1JBTSB0aGF0IGRvZXMgbm90IHBvd2VyIGRvd24gZHVyaW5nIFJGS0lMTC4gIFdoZW4gcG93ZXJpbmcgYmFjawotICogdXAgYWZ0ZXIgcG93ZXItc2F2aW5nIHNsZWVwcyAob3IgZHVyaW5nIGluaXRpYWwgdUNvZGUgbG9hZCksIHRoZSBCU00gbG9hZHMKLSAqIHRoZSBib290c3RyYXAgcHJvZ3JhbSBpbnRvIHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IsIGFuZCBzdGFydHMgaXQuCi0gKgotICogVGhlIGJvb3RzdHJhcCBwcm9ncmFtIGxvYWRzICh2aWEgRE1BKSBpbnN0cnVjdGlvbnMgYW5kIGRhdGEgZm9yIGEgbmV3Ci0gKiBwcm9ncmFtIGZyb20gaG9zdCBEUkFNIGxvY2F0aW9ucyBpbmRpY2F0ZWQgYnkgdGhlIGhvc3QgZHJpdmVyIGluIHRoZQotICogQlNNX0RSQU1fKiByZWdpc3RlcnMuICBPbmNlIHRoZSBuZXcgcHJvZ3JhbSBpcyBsb2FkZWQsIGl0IHN0YXJ0cwotICogYXV0b21hdGljYWxseS4KLSAqCi0gKiBXaGVuIGluaXRpYWxpemluZyB0aGUgTklDLCB0aGUgaG9zdCBkcml2ZXIgcG9pbnRzIHRoZSBCU00gdG8gdGhlCi0gKiAiaW5pdGlhbGl6ZSIgdUNvZGUgaW1hZ2UuICBUaGlzIHVDb2RlIHNldHMgdXAgc29tZSBpbnRlcm5hbCBkYXRhLCB0aGVuCi0gKiBub3RpZmllcyBob3N0IHZpYSAiaW5pdGlhbGl6ZSBhbGl2ZSIgdGhhdCBpdCBpcyBjb21wbGV0ZS4KLSAqCi0gKiBUaGUgaG9zdCB0aGVuIHJlcGxhY2VzIHRoZSBCU01fRFJBTV8qIHBvaW50ZXIgdmFsdWVzIHRvIHBvaW50IHRvIHRoZQotICogbm9ybWFsIHJ1bnRpbWUgdUNvZGUgaW5zdHJ1Y3Rpb25zIGFuZCBhIGJhY2t1cCB1Q29kZSBkYXRhIGNhY2hlIGJ1ZmZlcgotICogKGZpbGxlZCBpbml0aWFsbHkgd2l0aCBzdGFydGluZyBkYXRhIHZhbHVlcyBmb3IgdGhlIG9uLWJvYXJkIHByb2Nlc3NvciksCi0gKiB0aGVuIHRyaWdnZXJzIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgdG8gbG9hZCBhbmQgbGF1bmNoIHRoZSBydW50aW1lIHVDb2RlLAotICogd2hpY2ggYmVnaW5zIG5vcm1hbCBvcGVyYXRpb24uCi0gKgotICogV2hlbiBkb2luZyBhIHBvd2VyLXNhdmUgc2h1dGRvd24sIHJ1bnRpbWUgdUNvZGUgc2F2ZXMgZGF0YSBTUkFNIGludG8KLSAqIHRoZSBiYWNrdXAgZGF0YSBjYWNoZSBpbiBEUkFNIGJlZm9yZSBTUkFNIGlzIHBvd2VyZWQgZG93bi4KLSAqCi0gKiBXaGVuIHBvd2VyaW5nIGJhY2sgdXAsIHRoZSBCU00gbG9hZHMgdGhlIGJvb3RzdHJhcCBwcm9ncmFtLiAgVGhpcyByZWxvYWRzCi0gKiB0aGUgcnVudGltZSB1Q29kZSBpbnN0cnVjdGlvbnMgYW5kIHRoZSBiYWNrdXAgZGF0YSBjYWNoZSBpbnRvIFNSQU0sCi0gKiBhbmQgcmUtbGF1bmNoZXMgdGhlIHJ1bnRpbWUgdUNvZGUgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZi4KLSAqLwotc3RhdGljIGludCBpd2wzOTQ1X2xvYWRfYnNtKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0JX19sZTMyICppbWFnZSA9IHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyOwotCXUzMiBsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKLQlkbWFfYWRkcl90IHBpbnN0OwotCWRtYV9hZGRyX3QgcGRhdGE7Ci0JdTMyIGluc3RfbGVuOwotCXUzMiBkYXRhX2xlbjsKLQlpbnQgcmM7Ci0JaW50IGk7Ci0JdTMyIGRvbmU7Ci0JdTMyIHJlZ19vZmZzZXQ7Ci0KLQlJV0xfREVCVUdfSU5GTygiQmVnaW4gbG9hZCBic21cbiIpOwotCi0JLyogbWFrZSBzdXJlIGJvb3RzdHJhcCBwcm9ncmFtIGlzIG5vIGxhcmdlciB0aGFuIEJTTSdzIFNSQU0gc2l6ZSAqLwotCWlmIChsZW4gPiBJV0xfTUFYX0JTTV9TSVpFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIFRlbGwgYm9vdHN0cmFwIHVDb2RlIHdoZXJlIHRvIGZpbmQgdGhlICJJbml0aWFsaXplIiB1Q29kZQotCSAqICAgaW4gaG9zdCBEUkFNIC4uLiBob3N0IERSQU0gcGh5c2ljYWwgYWRkcmVzcyBiaXRzIDMxOjAgZm9yIDM5NDUuCi0JICogTk9URTogIGl3bDM5NDVfaW5pdGlhbGl6ZV9hbGl2ZV9zdGFydCgpIHdpbGwgcmVwbGFjZSB0aGVzZSB2YWx1ZXMsCi0JICogICAgICAgIGFmdGVyIHRoZSAiaW5pdGlhbGl6ZSIgdUNvZGUgaGFzIHJ1biwgdG8gcG9pbnQgdG8KLQkgKiAgICAgICAgcnVudGltZS9wcm90b2NvbCBpbnN0cnVjdGlvbnMgYW5kIGJhY2t1cCBkYXRhIGNhY2hlLiAqLwotCXBpbnN0ID0gcHJpdi0+dWNvZGVfaW5pdC5wX2FkZHI7Ci0JcGRhdGEgPSBwcml2LT51Y29kZV9pbml0X2RhdGEucF9hZGRyOwotCWluc3RfbGVuID0gcHJpdi0+dWNvZGVfaW5pdC5sZW47Ci0JZGF0YV9sZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOwotCi0JcmMgPSBpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX1BUUl9SRUcsIHBpbnN0KTsKLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9QVFJfUkVHLCBwZGF0YSk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfQllURUNPVU5UX1JFRywgaW5zdF9sZW4pOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX0JZVEVDT1VOVF9SRUcsIGRhdGFfbGVuKTsKLQotCS8qIEZpbGwgQlNNIG1lbW9yeSB3aXRoIGJvb3RzdHJhcCBpbnN0cnVjdGlvbnMgKi8KLQlmb3IgKHJlZ19vZmZzZXQgPSBCU01fU1JBTV9MT1dFUl9CT1VORDsKLQkgICAgIHJlZ19vZmZzZXQgPCBCU01fU1JBTV9MT1dFUl9CT1VORCArIGxlbjsKLQkgICAgIHJlZ19vZmZzZXQgKz0gc2l6ZW9mKHUzMiksIGltYWdlKyspCi0JCV9pd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgcmVnX29mZnNldCwKLQkJCQkJICBsZTMyX3RvX2NwdSgqaW1hZ2UpKTsKLQotCXJjID0gaXdsMzk0NV92ZXJpZnlfYnNtKHByaXYpOwotCWlmIChyYykgewotCQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKLQkJcmV0dXJuIHJjOwotCX0KLQotCS8qIFRlbGwgQlNNIHRvIGNvcHkgZnJvbSBCU00gU1JBTSBpbnRvIGluc3RydWN0aW9uIFNSQU0sIHdoZW4gYXNrZWQgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX01FTV9TUkNfUkVHLCAweDApOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fV1JfTUVNX0RTVF9SRUcsCi0JCQkJIFJUQ19JTlNUX0xPV0VSX0JPVU5EKTsKLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0RXQ09VTlRfUkVHLCBsZW4gLyBzaXplb2YodTMyKSk7Ci0KLQkvKiBMb2FkIGJvb3RzdHJhcCBjb2RlIGludG8gaW5zdHJ1Y3Rpb24gU1JBTSBub3csCi0JICogICB0byBwcmVwYXJlIHRvIGxvYWQgImluaXRpYWxpemUiIHVDb2RlICovCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9XUl9DVFJMX1JFRywKLQkJQlNNX1dSX0NUUkxfUkVHX0JJVF9TVEFSVCk7Ci0KLQkvKiBXYWl0IGZvciBsb2FkIG9mIGJvb3RzdHJhcCB1Q29kZSB0byBmaW5pc2ggKi8KLQlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLQkJZG9uZSA9IGl3bDM5NDVfcmVhZF9wcnBoKHByaXYsIEJTTV9XUl9DVFJMX1JFRyk7Ci0JCWlmICghKGRvbmUgJiBCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUKSkKLQkJCWJyZWFrOwotCQl1ZGVsYXkoMTApOwotCX0KLQlpZiAoaSA8IDEwMCkKLQkJSVdMX0RFQlVHX0lORk8oIkJTTSB3cml0ZSBjb21wbGV0ZSwgcG9sbCAlZCBpdGVyYXRpb25zXG4iLCBpKTsKLQllbHNlIHsKLQkJSVdMX0VSUk9SKCJCU00gd3JpdGUgZGlkIG5vdCBjb21wbGV0ZSFcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKiBFbmFibGUgZnV0dXJlIGJvb3QgbG9hZHMgd2hlbmV2ZXIgcG93ZXIgbWFuYWdlbWVudCB1bml0IHRyaWdnZXJzIGl0Ci0JICogICAoZS5nLiB3aGVuIHBvd2VyaW5nIGJhY2sgdXAgYWZ0ZXIgcG93ZXItc2F2ZSBzaHV0ZG93bikgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX1dSX0NUUkxfUkVHLAotCQlCU01fV1JfQ1RSTF9SRUdfQklUX1NUQVJUX0VOKTsKLQotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfbmljX3N0YXJ0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X25pY19zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogUmVtb3ZlIGFsbCByZXNldHMgdG8gYWxsb3cgTklDIHRvIG9wZXJhdGUgKi8KLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCAwKTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfUkVTRVQsIDApOwogfQogCiAvKioKQEAgLTUzMDIsOSArMjUwMCw5IEBACiAgKgogICogQ29weSBpbnRvIGJ1ZmZlcnMgZm9yIGNhcmQgdG8gZmV0Y2ggdmlhIGJ1cy1tYXN0ZXJpbmcKICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3JlYWRfdWNvZGUoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsMzk0NV9yZWFkX3Vjb2RlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV91Y29kZSAqdWNvZGU7CisJc3RydWN0IGl3bF91Y29kZSAqdWNvZGU7CiAJaW50IHJldCA9IC1FSU5WQUwsIGluZGV4OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWNvZGVfcmF3OwogCS8qIGZpcm13YXJlIGZpbGUgbmFtZSBjb250YWlucyB1Q29kZS9kcml2ZXIgY29tcGF0aWJpbGl0eSB2ZXJzaW9uICovCkBAIC01MzIyLDcgKzI1MjAsNyBAQAogCQlzcHJpbnRmKGJ1ZiwgIiVzJXUlcyIsIG5hbWVfcHJlLCBpbmRleCwgIi51Y29kZSIpOwogCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZ1Y29kZV9yYXcsIGJ1ZiwgJnByaXYtPnBjaV9kZXYtPmRldik7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlJV0xfRVJST1IoIiVzIGZpcm13YXJlIGZpbGUgcmVxIGZhaWxlZDogUmVhc29uICVkXG4iLAorCQkJSVdMX0VSUihwcml2LCAiJXMgZmlybXdhcmUgZmlsZSByZXEgZmFpbGVkOiAlZFxuIiwKIAkJCQkgIGJ1ZiwgcmV0KTsKIAkJCWlmIChyZXQgPT0gLUVOT0VOVCkKIAkJCQljb250aW51ZTsKQEAgLTUzMzAsOSArMjUyOCwxMiBAQAogCQkJCWdvdG8gZXJyb3I7CiAJCX0gZWxzZSB7CiAJCQlpZiAoaW5kZXggPCBhcGlfbWF4KQotCQkJCUlXTF9FUlJPUigiTG9hZGVkIGZpcm13YXJlICVzLCB3aGljaCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIEFQSSB2JXUgaW5zdGVhZC5cbiIsCisJCQkJSVdMX0VSUihwcml2LCAiTG9hZGVkIGZpcm13YXJlICVzLCAiCisJCQkJCSJ3aGljaCBpcyBkZXByZWNhdGVkLiAiCisJCQkJCSIgUGxlYXNlIHVzZSBBUEkgdiV1IGluc3RlYWQuXG4iLAogCQkJCQkgIGJ1ZiwgYXBpX21heCk7Ci0JCQlJV0xfREVCVUdfSU5GTygiR290IGZpcm13YXJlICclcycgZmlsZSAoJXpkIGJ5dGVzKSBmcm9tIGRpc2tcbiIsCisJCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiR290IGZpcm13YXJlICclcycgZmlsZSAiCisJCQkJICAgICAgICIoJXpkIGJ5dGVzKSBmcm9tIGRpc2tcbiIsCiAJCQkJICAgICAgIGJ1ZiwgdWNvZGVfcmF3LT5zaXplKTsKIAkJCWJyZWFrOwogCQl9CkBAIC01MzQzLDcgKzI1NDQsNyBAQAogCiAJLyogTWFrZSBzdXJlIHRoYXQgd2UgZ290IGF0IGxlYXN0IG91ciBoZWFkZXIhICovCiAJaWYgKHVjb2RlX3Jhdy0+c2l6ZSA8IHNpemVvZigqdWNvZGUpKSB7Ci0JCUlXTF9FUlJPUigiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiRmlsZSBzaXplIHdheSB0b28gc21hbGwhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CkBAIC01MzY0LDcgKzI1NjUsNyBAQAogCSAqIG9uIHRoZSBBUEkgdmVyc2lvbiByZWFkIGZyb20gZmlyd2FyZSBoZWFkZXIgZnJvbSBoZXJlIG9uIGZvcndhcmQgKi8KIAogCWlmIChhcGlfdmVyIDwgYXBpX21pbiB8fCBhcGlfdmVyID4gYXBpX21heCkgewotCQlJV0xfRVJST1IoIkRyaXZlciB1bmFibGUgdG8gc3VwcG9ydCB5b3VyIGZpcm13YXJlIEFQSS4gIgorCQlJV0xfRVJSKHByaXYsICJEcml2ZXIgdW5hYmxlIHRvIHN1cHBvcnQgeW91ciBmaXJtd2FyZSBBUEkuICIKIAkJCSAgIkRyaXZlciBzdXBwb3J0cyB2JXUsIGZpcm13YXJlIGlzIHYldS5cbiIsCiAJCQkgIGFwaV9tYXgsIGFwaV92ZXIpOwogCQlwcml2LT51Y29kZV92ZXIgPSAwOwpAQCAtNTM3MiwyMyArMjU3MywyOSBAQAogCQlnb3RvIGVycl9yZWxlYXNlOwogCX0KIAlpZiAoYXBpX3ZlciAhPSBhcGlfbWF4KQotCQlJV0xfRVJST1IoIkZpcm13YXJlIGhhcyBvbGQgQVBJIHZlcnNpb24uIEV4cGVjdGVkICV1LCAiCisJCUlXTF9FUlIocHJpdiwgIkZpcm13YXJlIGhhcyBvbGQgQVBJIHZlcnNpb24uIEV4cGVjdGVkICV1LCAiCiAJCQkgICJnb3QgJXUuIE5ldyBmaXJtd2FyZSBjYW4gYmUgb2J0YWluZWQgIgogCQkJICAiZnJvbSBodHRwOi8vd3d3LmludGVsbGludXh3aXJlbGVzcy5vcmcuXG4iLAogCQkJICBhcGlfbWF4LCBhcGlfdmVyKTsKIAotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIiBsb2FkZWQgZmlybXdhcmUgdmVyc2lvbiAldS4ldS4ldS4ldVxuIiwKLQkJICAgICAgIElXTF9VQ09ERV9NQUpPUihwcml2LT51Y29kZV92ZXIpLAotCQkgICAgICAgSVdMX1VDT0RFX01JTk9SKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfQVBJKHByaXYtPnVjb2RlX3ZlciksCi0JCSAgICAgICBJV0xfVUNPREVfU0VSSUFMKHByaXYtPnVjb2RlX3ZlcikpOwotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgdWNvZGUgdmVyc2lvbiByYXcgPSAweCV4XG4iLAorCUlXTF9JTkZPKHByaXYsICJsb2FkZWQgZmlybXdhcmUgdmVyc2lvbiAldS4ldS4ldS4ldVxuIiwKKwkJSVdMX1VDT0RFX01BSk9SKHByaXYtPnVjb2RlX3ZlciksCisJCUlXTF9VQ09ERV9NSU5PUihwcml2LT51Y29kZV92ZXIpLAorCQlJV0xfVUNPREVfQVBJKHByaXYtPnVjb2RlX3ZlciksCisJCUlXTF9VQ09ERV9TRVJJQUwocHJpdi0+dWNvZGVfdmVyKSk7CisKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIHVjb2RlIHZlcnNpb24gcmF3ID0gMHgleFxuIiwKIAkJICAgICAgIHByaXYtPnVjb2RlX3Zlcik7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGluc3Qgc2l6ZSA9ICV1XG4iLCBpbnN0X3NpemUpOwotCUlXTF9ERUJVR19JTkZPKCJmL3cgcGFja2FnZSBoZHIgcnVudGltZSBkYXRhIHNpemUgPSAldVxuIiwgZGF0YV9zaXplKTsKLQlJV0xfREVCVUdfSU5GTygiZi93IHBhY2thZ2UgaGRyIGluaXQgaW5zdCBzaXplID0gJXVcbiIsIGluaXRfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBpbml0IGRhdGEgc2l6ZSA9ICV1XG4iLCBpbml0X2RhdGFfc2l6ZSk7Ci0JSVdMX0RFQlVHX0lORk8oImYvdyBwYWNrYWdlIGhkciBib290IGluc3Qgc2l6ZSA9ICV1XG4iLCBib290X3NpemUpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgcnVudGltZSBpbnN0IHNpemUgPSAldVxuIiwKKwkJICAgICAgIGluc3Rfc2l6ZSk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgImYvdyBwYWNrYWdlIGhkciBydW50aW1lIGRhdGEgc2l6ZSA9ICV1XG4iLAorCQkgICAgICAgZGF0YV9zaXplKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIGluaXQgaW5zdCBzaXplID0gJXVcbiIsCisJCSAgICAgICBpbml0X3NpemUpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJmL3cgcGFja2FnZSBoZHIgaW5pdCBkYXRhIHNpemUgPSAldVxuIiwKKwkJICAgICAgIGluaXRfZGF0YV9zaXplKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiZi93IHBhY2thZ2UgaGRyIGJvb3QgaW5zdCBzaXplID0gJXVcbiIsCisJCSAgICAgICBib290X3NpemUpOwogCiAKIAkvKiBWZXJpZnkgc2l6ZSBvZiBmaWxlIHZzLiBpbWFnZSBzaXplIGluZm8gaW4gZmlsZSdzIGhlYWRlciAqLwpAQCAtNTM5Niw0MCArMjYwMyw0MyBAQAogCQlpbnN0X3NpemUgKyBkYXRhX3NpemUgKyBpbml0X3NpemUgKwogCQlpbml0X2RhdGFfc2l6ZSArIGJvb3Rfc2l6ZSkgewogCi0JCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBmaWxlIHNpemUgJWQgdG9vIHNtYWxsXG4iLAotCQkJICAgICAgIChpbnQpdWNvZGVfcmF3LT5zaXplKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGZpbGUgc2l6ZSAlemQgdG9vIHNtYWxsXG4iLAorCQkJICAgICAgIHVjb2RlX3Jhdy0+c2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCiAJLyogVmVyaWZ5IHRoYXQgdUNvZGUgaW1hZ2VzIHdpbGwgZml0IGluIGNhcmQncyBTUkFNICovCi0JaWYgKGluc3Rfc2l6ZSA+IElXTF9NQVhfSU5TVF9TSVpFKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwlpZiAoaW5zdF9zaXplID4gSVdMMzlfTUFYX0lOU1RfU0laRSkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAidUNvZGUgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkgICAgICAgaW5zdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9CiAKLQlpZiAoZGF0YV9zaXplID4gSVdMX01BWF9EQVRBX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGRhdGEgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCisJaWYgKGRhdGFfc2l6ZSA+IElXTDM5X01BWF9EQVRBX1NJWkUpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGRhdGEgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkgICAgICAgZGF0YV9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9Ci0JaWYgKGluaXRfc2l6ZSA+IElXTF9NQVhfSU5TVF9TSVpFKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBpbml0IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCWlmIChpbml0X3NpemUgPiBJV0wzOV9NQVhfSU5TVF9TSVpFKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkJInVDb2RlIGluaXQgaW5zdHIgbGVuICVkIHRvbyBsYXJnZSB0byBmaXQgaW5cbiIsCiAJCQkJaW5pdF9zaXplKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfcmVsZWFzZTsKIAl9Ci0JaWYgKGluaXRfZGF0YV9zaXplID4gSVdMX01BWF9EQVRBX1NJWkUpIHsKLQkJSVdMX0RFQlVHX0lORk8oInVDb2RlIGluaXQgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKKwlpZiAoaW5pdF9kYXRhX3NpemUgPiBJV0wzOV9NQVhfREFUQV9TSVpFKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkJInVDb2RlIGluaXQgZGF0YSBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCQlpbml0X2RhdGFfc2l6ZSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQotCWlmIChib290X3NpemUgPiBJV0xfTUFYX0JTTV9TSVpFKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJ1Q29kZSBib290IGluc3RyIGxlbiAlZCB0b28gbGFyZ2UgdG8gZml0IGluXG4iLAorCWlmIChib290X3NpemUgPiBJV0wzOV9NQVhfQlNNX1NJWkUpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJCQkidUNvZGUgYm9vdCBpbnN0ciBsZW4gJWQgdG9vIGxhcmdlIHRvIGZpdCBpblxuIiwKIAkJCQlib290X3NpemUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9yZWxlYXNlOwpAQCAtNTQ3OSwxNiArMjY4OSwxOCBAQAogCS8qIFJ1bnRpbWUgaW5zdHJ1Y3Rpb25zIChmaXJzdCBibG9jayBvZiBkYXRhIGluIGZpbGUpICovCiAJc3JjID0gJnVjb2RlLT5kYXRhWzBdOwogCWxlbiA9IHByaXYtPnVjb2RlX2NvZGUubGVuOwotCUlXTF9ERUJVR19JTkZPKCJDb3B5aW5nIChidXQgbm90IGxvYWRpbmcpIHVDb2RlIGluc3RyIGxlbiAlWmRcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgaW5zdHIgbGVuICV6ZFxuIiwgbGVuKTsKIAltZW1jcHkocHJpdi0+dWNvZGVfY29kZS52X2FkZHIsIHNyYywgbGVuKTsKLQlJV0xfREVCVUdfSU5GTygidUNvZGUgaW5zdHIgYnVmIHZhZGRyID0gMHglcCwgcGFkZHIgPSAweCUwOHhcbiIsCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgInVDb2RlIGluc3RyIGJ1ZiB2YWRkciA9IDB4JXAsIHBhZGRyID0gMHglMDh4XG4iLAogCQlwcml2LT51Y29kZV9jb2RlLnZfYWRkciwgKHUzMilwcml2LT51Y29kZV9jb2RlLnBfYWRkcik7CiAKIAkvKiBSdW50aW1lIGRhdGEgKDJuZCBibG9jaykKIAkgKiBOT1RFOiAgQ29weSBpbnRvIGJhY2t1cCBidWZmZXIgd2lsbCBiZSBkb25lIGluIGl3bDM5NDVfdXAoKSAgKi8KIAlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplXTsKIAlsZW4gPSBwcml2LT51Y29kZV9kYXRhLmxlbjsKLQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSB1Q29kZSBkYXRhIGxlbiAlWmRcbiIsIGxlbik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwKKwkJIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgdUNvZGUgZGF0YSBsZW4gJXpkXG4iLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9kYXRhLnZfYWRkciwgc3JjLCBsZW4pOwogCW1lbWNweShwcml2LT51Y29kZV9kYXRhX2JhY2t1cC52X2FkZHIsIHNyYywgbGVuKTsKIApAQCAtNTQ5Niw4ICsyNzA4LDggQEAKIAlpZiAoaW5pdF9zaXplKSB7CiAJCXNyYyA9ICZ1Y29kZS0+ZGF0YVtpbnN0X3NpemUgKyBkYXRhX3NpemVdOwogCQlsZW4gPSBwcml2LT51Y29kZV9pbml0LmxlbjsKLQkJSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBpbnN0ciBsZW4gJVpkXG4iLAotCQkJICAgICAgIGxlbik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGluc3RyIGxlbiAlemRcbiIsIGxlbik7CiAJCW1lbWNweShwcml2LT51Y29kZV9pbml0LnZfYWRkciwgc3JjLCBsZW4pOwogCX0KIApAQCAtNTUwNSwxNiArMjcxNywxNiBAQAogCWlmIChpbml0X2RhdGFfc2l6ZSkgewogCQlzcmMgPSAmdWNvZGUtPmRhdGFbaW5zdF9zaXplICsgZGF0YV9zaXplICsgaW5pdF9zaXplXTsKIAkJbGVuID0gcHJpdi0+dWNvZGVfaW5pdF9kYXRhLmxlbjsKLQkJSVdMX0RFQlVHX0lORk8oIkNvcHlpbmcgKGJ1dCBub3QgbG9hZGluZykgaW5pdCBkYXRhIGxlbiAlZFxuIiwKLQkJCSAgICAgICAoaW50KWxlbik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsCisJCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBpbml0IGRhdGEgbGVuICV6ZFxuIiwgbGVuKTsKIAkJbWVtY3B5KHByaXYtPnVjb2RlX2luaXRfZGF0YS52X2FkZHIsIHNyYywgbGVuKTsKIAl9CiAKIAkvKiBCb290c3RyYXAgaW5zdHJ1Y3Rpb25zICg1dGggYmxvY2spICovCiAJc3JjID0gJnVjb2RlLT5kYXRhW2luc3Rfc2l6ZSArIGRhdGFfc2l6ZSArIGluaXRfc2l6ZSArIGluaXRfZGF0YV9zaXplXTsKIAlsZW4gPSBwcml2LT51Y29kZV9ib290LmxlbjsKLQlJV0xfREVCVUdfSU5GTygiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBib290IGluc3RyIGxlbiAlZFxuIiwKLQkJICAgICAgIChpbnQpbGVuKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LAorCQkiQ29weWluZyAoYnV0IG5vdCBsb2FkaW5nKSBib290IGluc3RyIGxlbiAlemRcbiIsIGxlbik7CiAJbWVtY3B5KHByaXYtPnVjb2RlX2Jvb3Qudl9hZGRyLCBzcmMsIGxlbik7CiAKIAkvKiBXZSBoYXZlIG91ciBjb3BpZXMgbm93LCBhbGxvdyBPUyByZWxlYXNlIGl0cyBjb3BpZXMgKi8KQEAgLTU1MjIsNyArMjczNCw3IEBACiAJcmV0dXJuIDA7CiAKICBlcnJfcGNpX2FsbG9jOgotCUlXTF9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHBjaSBtZW1vcnlcbiIpOworCUlXTF9FUlIocHJpdiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwY2kgbWVtb3J5XG4iKTsKIAlyZXQgPSAtRU5PTUVNOwogCWl3bDM5NDVfZGVhbGxvY191Y29kZV9wY2kocHJpdik7CiAKQEAgLTU1NDMsNyArMjc1NSw3IEBACiAgKiBXZSBuZWVkIHRvIHJlcGxhY2UgdGhlbSB0byBsb2FkIHJ1bnRpbWUgdUNvZGUgaW5zdCBhbmQgZGF0YSwKICAqIGFuZCB0byBzYXZlIHJ1bnRpbWUgZGF0YSB3aGVuIHBvd2VyaW5nIGRvd24uCiAgKi8KLXN0YXRpYyBpbnQgaXdsMzk0NV9zZXRfdWNvZGVfcHRycyhzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIGludCBpd2wzOTQ1X3NldF91Y29kZV9wdHJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlkbWFfYWRkcl90IHBpbnN0OwogCWRtYV9hZGRyX3QgcGRhdGE7CkBAIC01NTU1LDI4ICsyNzY3LDI4IEBACiAJcGRhdGEgPSBwcml2LT51Y29kZV9kYXRhX2JhY2t1cC5wX2FkZHI7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCXJjID0gaXdsMzk0NV9ncmFiX25pY19hY2Nlc3MocHJpdik7CisJcmMgPSBpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOwogCWlmIChyYykgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiByYzsKIAl9CiAKIAkvKiBUZWxsIGJvb3RzdHJhcCB1Q29kZSB3aGVyZSB0byBmaW5kIGltYWdlIHRvIGxvYWQgKi8KLQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9QVFJfUkVHLCBwaW5zdCk7Ci0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0RBVEFfUFRSX1JFRywgcGRhdGEpOwotCWl3bDM5NDVfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9EQVRBX0JZVEVDT1VOVF9SRUcsCisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fSU5TVF9QVFJfUkVHLCBwaW5zdCk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9QVFJfUkVHLCBwZGF0YSk7CisJaXdsX3dyaXRlX3BycGgocHJpdiwgQlNNX0RSQU1fREFUQV9CWVRFQ09VTlRfUkVHLAogCQkJCSBwcml2LT51Y29kZV9kYXRhLmxlbik7CiAKIAkvKiBJbnN0IGJ5dGUgY291bnQgbXVzdCBiZSBsYXN0IHRvIHNldCB1cCwgYml0IDMxIHNpZ25hbHMgdUNvZGUKIAkgKiAgIHRoYXQgYWxsIG5ldyBwdHIvc2l6ZSBpbmZvIGlzIGluIHBsYWNlICovCi0JaXdsMzk0NV93cml0ZV9wcnBoKHByaXYsIEJTTV9EUkFNX0lOU1RfQllURUNPVU5UX1JFRywKKwlpd2xfd3JpdGVfcHJwaChwcml2LCBCU01fRFJBTV9JTlNUX0JZVEVDT1VOVF9SRUcsCiAJCQkJIHByaXYtPnVjb2RlX2NvZGUubGVuIHwgQlNNX0RSQU1fSU5TVF9MT0FEKTsKIAotCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCWl3bF9yZWxlYXNlX25pY19hY2Nlc3MocHJpdik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfSU5GTygiUnVudGltZSB1Q29kZSBwb2ludGVycyBhcmUgc2V0LlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgdUNvZGUgcG9pbnRlcnMgYXJlIHNldC5cbiIpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtNTU4OCwxMyArMjgwMCwxMyBAQAogICoKICAqIFRlbGwgImluaXRpYWxpemUiIHVDb2RlIHRvIGdvIGFoZWFkIGFuZCBsb2FkIHRoZSBydW50aW1lIHVDb2RlLgogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2luaXRfYWxpdmVfc3RhcnQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfaW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJLyogQ2hlY2sgYWxpdmUgcmVzcG9uc2UgZm9yICJ2YWxpZCIgc2lnbiBmcm9tIHVDb2RlICovCiAJaWYgKHByaXYtPmNhcmRfYWxpdmVfaW5pdC5pc192YWxpZCAhPSBVQ09ERV9WQUxJRF9PSykgewogCQkvKiBXZSBoYWQgYW4gZXJyb3IgYnJpbmdpbmcgdXAgdGhlIGhhcmR3YXJlLCBzbyB0YWtlIGl0CiAJCSAqIGFsbCB0aGUgd2F5IGJhY2sgZG93biBzbyB3ZSBjYW4gdHJ5IGFnYWluICovCi0JCUlXTF9ERUJVR19JTkZPKCJJbml0aWFsaXplIEFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW5pdGlhbGl6ZSBBbGl2ZSBmYWlsZWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIApAQCAtNTYwNCwxOCArMjgxNiwxOCBAQAogCWlmIChpd2wzOTQ1X3ZlcmlmeV91Y29kZShwcml2KSkgewogCQkvKiBSdW50aW1lIGluc3RydWN0aW9uIGxvYWQgd2FzIGJhZDsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQmFkIFwiaW5pdGlhbGl6ZVwiIHVDb2RlIGxvYWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJhZCBcImluaXRpYWxpemVcIiB1Q29kZSBsb2FkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKIAkvKiBTZW5kIHBvaW50ZXJzIHRvIHByb3RvY29sL3J1bnRpbWUgdUNvZGUgaW1hZ2UgLi4uIGluaXQgY29kZSB3aWxsCiAJICogbG9hZCBhbmQgbGF1bmNoIHJ1bnRpbWUgdUNvZGUsIHdoaWNoIHdpbGwgc2VuZCB1cyBhbm90aGVyICJBbGl2ZSIKIAkgKiBub3RpZmljYXRpb24uICovCi0JSVdMX0RFQlVHX0lORk8oIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkluaXRpYWxpemF0aW9uIEFsaXZlIHJlY2VpdmVkLlxuIik7CiAJaWYgKGl3bDM5NDVfc2V0X3Vjb2RlX3B0cnMocHJpdikpIHsKIAkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdvbid0IGhhcHBlbjsKIAkJICogdGFrZSBpdCBhbGwgdGhlIHdheSBiYWNrIGRvd24gc28gd2UgY2FuIHRyeSBhZ2FpbiAqLwotCQlJV0xfREVCVUdfSU5GTygiQ291bGRuJ3Qgc2V0IHVwIHVDb2RlIHBvaW50ZXJzLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb3VsZG4ndCBzZXQgdXAgdUNvZGUgcG9pbnRlcnMuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIAlyZXR1cm47CkBAIC01NjM0LDE4ICsyODQ2LDE4IEBACiAgKiAgICAgICAgICAgICAgICAgICBmcm9tIHByb3RvY29sL3J1bnRpbWUgdUNvZGUgKGluaXRpYWxpemF0aW9uIHVDb2RlJ3MKICAqICAgICAgICAgICAgICAgICAgIEFsaXZlIGdldHMgaGFuZGxlZCBieSBpd2wzOTQ1X2luaXRfYWxpdmVfc3RhcnQoKSkuCiAgKi8KLXN0YXRpYyB2b2lkIGl3bDM5NDVfYWxpdmVfc3RhcnQoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfYWxpdmVfc3RhcnQoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWludCByYyA9IDA7CiAJaW50IHRoZXJtYWxfc3BpbiA9IDA7CiAJdTMyIHJma2lsbDsKIAotCUlXTF9ERUJVR19JTkZPKCJSdW50aW1lIEFsaXZlIHJlY2VpdmVkLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJ1bnRpbWUgQWxpdmUgcmVjZWl2ZWQuXG4iKTsKIAogCWlmIChwcml2LT5jYXJkX2FsaXZlLmlzX3ZhbGlkICE9IFVDT0RFX1ZBTElEX09LKSB7CiAJCS8qIFdlIGhhZCBhbiBlcnJvciBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUsIHNvIHRha2UgaXQKIAkJICogYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkFsaXZlIGZhaWxlZC5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWxpdmUgZmFpbGVkLlxuIik7CiAJCWdvdG8gcmVzdGFydDsKIAl9CiAKQEAgLTU2NTUsMjEgKzI4NjcsMjEgQEAKIAlpZiAoaXdsMzk0NV92ZXJpZnlfdWNvZGUocHJpdikpIHsKIAkJLyogUnVudGltZSBpbnN0cnVjdGlvbiBsb2FkIHdhcyBiYWQ7CiAJCSAqIHRha2UgaXQgYWxsIHRoZSB3YXkgYmFjayBkb3duIHNvIHdlIGNhbiB0cnkgYWdhaW4gKi8KLQkJSVdMX0RFQlVHX0lORk8oIkJhZCBydW50aW1lIHVDb2RlIGxvYWQuXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJhZCBydW50aW1lIHVDb2RlIGxvYWQuXG4iKTsKIAkJZ290byByZXN0YXJ0OwogCX0KIAogCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKLQlyYyA9IGl3bDM5NDVfZ3JhYl9uaWNfYWNjZXNzKHByaXYpOworCXJjID0gaXdsX2dyYWJfbmljX2FjY2Vzcyhwcml2KTsKIAlpZiAocmMpIHsKLQkJSVdMX1dBUk5JTkcoIkNhbiBub3QgcmVhZCBSRktJTEwgc3RhdHVzIGZyb20gYWRhcHRlclxuIik7CisJCUlXTF9XQVJOKHByaXYsICJDYW4gbm90IHJlYWQgUkZLSUxMIHN0YXR1cyBmcm9tIGFkYXB0ZXJcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JcmZraWxsID0gaXdsMzk0NV9yZWFkX3BycGgocHJpdiwgQVBNR19SRktJTExfUkVHKTsKLQlJV0xfREVCVUdfSU5GTygiUkZLSUxMIHN0YXR1czogMHgleFxuIiwgcmZraWxsKTsKLQlpd2wzOTQ1X3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlyZmtpbGwgPSBpd2xfcmVhZF9wcnBoKHByaXYsIEFQTUdfUkZLSUxMX1JFRyk7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJGS0lMTCBzdGF0dXM6IDB4JXhcbiIsIHJma2lsbCk7CisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAogCWlmIChyZmtpbGwgJiAweDEpIHsKIAkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKQEAgLTU2ODEsNyArMjg5Myw3IEBACiAJCX0KIAogCQlpZiAodGhlcm1hbF9zcGluKQotCQkJSVdMX0RFQlVHX0lORk8oIlRoZXJtYWwgY2FsaWJyYXRpb24gdG9vayAlZHVzXG4iLAorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlRoZXJtYWwgY2FsaWJyYXRpb24gdG9vayAlZHVzXG4iLAogCQkJCSAgICAgICB0aGVybWFsX3NwaW4gKiAxMCk7CiAJfSBlbHNlCiAJCXNldF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwpAQCAtNTY5Miw3ICsyOTA0LDcgQEAKIAkvKiBDbGVhciBvdXQgdGhlIHVDb2RlIGVycm9yIGJpdCBpZiBpdCBpcyBzZXQgKi8KIAljbGVhcl9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKTsKIAotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkKKwlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkKIAkJcmV0dXJuOwogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzKHByaXYtPmh3KTsKQEAgLTU3MDAsOSArMjkxMiw5IEBACiAJcHJpdi0+YWN0aXZlX3JhdGUgPSBwcml2LT5yYXRlc19tYXNrOwogCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljID0gcHJpdi0+cmF0ZXNfbWFzayAmIElXTF9CQVNJQ19SQVRFU19NQVNLOwogCi0JaXdsMzk0NV9zZW5kX3Bvd2VyX21vZGUocHJpdiwgSVdMX1BPV0VSX0xFVkVMKHByaXYtPnBvd2VyX21vZGUpKTsKKwlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgZmFsc2UpOwogCi0JaWYgKGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSkgeworCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkgewogCQlzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqYWN0aXZlX3J4b24gPQogCQkJCShzdHJ1Y3QgaXdsMzk0NV9yeG9uX2NtZCAqKSgmcHJpdi0+YWN0aXZlX3J4b24pOwogCkBAIC01NzExLDEyICsyOTIzLDExIEBACiAJCWFjdGl2ZV9yeG9uLT5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAl9IGVsc2UgewogCQkvKiBJbml0aWFsaXplIG91ciByeF9jb25maWcgZGF0YSAqLwotCQlpd2wzOTQ1X2Nvbm5lY3Rpb25faW5pdF9yeF9jb25maWcocHJpdiwgcHJpdi0+aXdfbW9kZSk7Ci0JCW1lbWNweShwcml2LT5zdGFnaW5nX3J4b24ubm9kZV9hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCQlpd2xfY29ubmVjdGlvbl9pbml0X3J4X2NvbmZpZyhwcml2LCBwcml2LT5pd19tb2RlKTsKIAl9CiAKIAkvKiBDb25maWd1cmUgQmx1ZXRvb3RoIGRldmljZSBjb2V4aXN0ZW5jZSBzdXBwb3J0ICovCi0JaXdsMzk0NV9zZW5kX2J0X2NvbmZpZyhwcml2KTsKKwlpd2xfc2VuZF9idF9jb25maWcocHJpdik7CiAKIAkvKiBDb25maWd1cmUgdGhlIGFkYXB0ZXIgZm9yIHVuYXNzb2NpYXRlZCBvcGVyYXRpb24gKi8KIAlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwpAQCAtNTcyNSw3ICsyOTM2LDcgQEAKIAogCWl3bDM5NDVfbGVkX3JlZ2lzdGVyKHByaXYpOwogCi0JSVdMX0RFQlVHX0lORk8oIkFMSVZFIHByb2Nlc3NpbmcgY29tcGxldGUuXG4iKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQUxJVkUgcHJvY2Vzc2luZyBjb21wbGV0ZS5cbiIpOwogCXNldF9iaXQoU1RBVFVTX1JFQURZLCAmcHJpdi0+c3RhdHVzKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAKQEAgLTU3NDYsMTUgKzI5NTcsMTUgQEAKIAlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpOworc3RhdGljIHZvaWQgaXdsMzk0NV9jYW5jZWxfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCi1zdGF0aWMgdm9pZCBfX2l3bDM5NDVfZG93bihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgX19pd2wzOTQ1X2Rvd24oc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGV4aXRfcGVuZGluZyA9IHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9IE5VTEw7CiAKLQlJV0xfREVCVUdfSU5GTyhEUlZfTkFNRSAiIGlzIGdvaW5nIGRvd25cbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsIERSVl9OQU1FICIgaXMgZ29pbmcgZG93blxuIik7CiAKIAljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKIApAQCAtNTc3MywxMSArMjk4NCwxMSBAQAogCQljbGVhcl9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAKIAkvKiBzdG9wIGFuZCByZXNldCB0aGUgb24tYm9hcmQgcHJvY2Vzc29yICovCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQpOwogCiAJLyogdGVsbCB0aGUgZGV2aWNlIHRvIHN0b3Agc2VuZGluZyBpbnRlcnJ1cHRzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2wzOTQ1X2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKKwlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpd2xfc3luY2hyb25pemVfaXJxKHByaXYpOwogCkBAIC01Nzg2LDcgKzI5OTcsNyBAQAogCiAJLyogSWYgd2UgaGF2ZSBub3QgcHJldmlvdXNseSBjYWxsZWQgaXdsMzk0NV9pbml0KCkgdGhlbgogCSAqIGNsZWFyIGFsbCBiaXRzIGJ1dCB0aGUgUkYgS2lsbCBhbmQgU1VTUEVORCBiaXRzIGFuZCByZXR1cm4gKi8KLQlpZiAoIWl3bDM5NDVfaXNfaW5pdChwcml2KSkgeworCWlmICghaXdsX2lzX2luaXQocHJpdikpIHsKIAkJcHJpdi0+c3RhdHVzID0gdGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJCVNUQVRVU19SRl9LSUxMX0hXIHwKIAkJCSAgICAgICB0ZXN0X2JpdChTVEFUVVNfUkZfS0lMTF9TVywgJnByaXYtPnN0YXR1cykgPDwKQEAgLTU4MTUsMjkgKzMwMjYsMzEgQEAKIAkJCXRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpIDw8CiAJCQkJU1RBVFVTX0VYSVRfUEVORElORzsKIAorCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMucmVzZXQocHJpdik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlpd2wzOTQ1X2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7CisJaXdsX2NsZWFyX2JpdChwcml2LCBDU1JfR1BfQ05UUkwsIENTUl9HUF9DTlRSTF9SRUdfRkxBR19NQUNfQUNDRVNTX1JFUSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJaXdsMzk0NV9od190eHFfY3R4X3N0b3AocHJpdik7CiAJaXdsMzk0NV9od19yeHFfc3RvcChwcml2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFpd2wzOTQ1X2dyYWJfbmljX2FjY2Vzcyhwcml2KSkgewotCQlpd2wzOTQ1X3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRElTX1JFRywKKwlpZiAoIWl3bF9ncmFiX25pY19hY2Nlc3MocHJpdikpIHsKKwkJaXdsX3dyaXRlX3BycGgocHJpdiwgQVBNR19DTEtfRElTX1JFRywKIAkJCQkJIEFQTUdfQ0xLX1ZBTF9ETUFfQ0xLX1JRVCk7Ci0JCWl3bDM5NDVfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOworCQlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAl1ZGVsYXkoNSk7CiAKLQlpd2wzOTQ1X2h3X25pY19zdG9wX21hc3Rlcihwcml2KTsKLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1dfUkVTRVQpOwotCWl3bDM5NDVfaHdfbmljX3Jlc2V0KHByaXYpOworCWlmIChleGl0X3BlbmRpbmcgfHwgdGVzdF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLnN0b3AocHJpdik7CisJZWxzZQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5hcG1fb3BzLnJlc2V0KHByaXYpOwogCiAgZXhpdDoKLQltZW1zZXQoJnByaXYtPmNhcmRfYWxpdmUsIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9hbGl2ZV9yZXNwKSk7CisJbWVtc2V0KCZwcml2LT5jYXJkX2FsaXZlLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9hbGl2ZV9yZXNwKSk7CiAKIAlpZiAocHJpdi0+aWJzc19iZWFjb24pCiAJCWRldl9rZnJlZV9za2IocHJpdi0+aWJzc19iZWFjb24pOwpAQCAtNTg0Nyw3ICszMDYwLDcgQEAKIAlpd2wzOTQ1X2NsZWFyX2ZyZWVfZnJhbWVzKHByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2Rvd24oc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfZG93bihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCV9faXdsMzk0NV9kb3duKHByaXYpOwpAQCAtNTg1OCw1OCArMzA3MSw1OCBAQAogCiAjZGVmaW5lIE1BWF9IV19SRVNUQVJUUyA1CiAKLXN0YXRpYyBpbnQgX19pd2wzOTQ1X3VwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgaW50IF9faXdsMzk0NV91cChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjLCBpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9XQVJOSU5HKCJFeGl0IHBlbmRpbmc7IHdpbGwgbm90IGJyaW5nIHRoZSBOSUMgdXBcbiIpOworCQlJV0xfV0FSTihwcml2LCAiRXhpdCBwZW5kaW5nOyB3aWxsIG5vdCBicmluZyB0aGUgTklDIHVwXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfV0FSTklORygiUmFkaW8gZGlzYWJsZWQgYnkgU1cgUkYga2lsbCAobW9kdWxlICIKKwkJSVdMX1dBUk4ocHJpdiwgIlJhZGlvIGRpc2FibGVkIGJ5IFNXIFJGIGtpbGwgKG1vZHVsZSAiCiAJCQkgICAgInBhcmFtZXRlcilcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoIXByaXYtPnVjb2RlX2RhdGFfYmFja3VwLnZfYWRkciB8fCAhcHJpdi0+dWNvZGVfZGF0YS52X2FkZHIpIHsKLQkJSVdMX0VSUk9SKCJ1Y29kZSBub3QgYXZhaWxhYmxlIGZvciBkZXZpY2UgYnJpbmcgdXBcbiIpOworCQlJV0xfRVJSKHByaXYsICJ1Y29kZSBub3QgYXZhaWxhYmxlIGZvciBkZXZpY2UgYnJpbmcgdXBcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBJZiBwbGF0Zm9ybSdzIFJGX0tJTEwgc3dpdGNoIGlzIE5PVCBzZXQgdG8gS0lMTCAqLwotCWlmIChpd2wzOTQ1X3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYKKwlpZiAoaXdsX3JlYWQzMihwcml2LCBDU1JfR1BfQ05UUkwpICYKIAkJCQlDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSFdfUkZfS0lMTF9TVykKIAkJY2xlYXJfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKTsKIAllbHNlIHsKIAkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CiAJCWlmICghdGVzdF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfV0FSTklORygiUmFkaW8gZGlzYWJsZWQgYnkgSFcgUkYgS2lsbCBzd2l0Y2hcbiIpOworCQkJSVdMX1dBUk4ocHJpdiwgIlJhZGlvIGRpc2FibGVkIGJ5IEhXIFJGIEtpbGwgc3dpdGNoXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQogCi0JaXdsMzk0NV93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9JTlQsIDB4RkZGRkZGRkYpOwogCiAJcmMgPSBpd2wzOTQ1X2h3X25pY19pbml0KHByaXYpOwogCWlmIChyYykgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbnQgbmljXG4iKTsKKwkJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGludCBuaWNcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogbWFrZSBzdXJlIHJma2lsbCBoYW5kc2hha2UgYml0cyBhcmUgY2xlYXJlZCAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLAorCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOworCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwKIAkJICAgIENTUl9VQ09ERV9EUlZfR1AxX0JJVF9DTURfQkxPQ0tFRCk7CiAKIAkvKiBjbGVhciAoYWdhaW4pLCB0aGVuIGVuYWJsZSBob3N0IGludGVycnVwdHMgKi8KLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX0lOVCwgMHhGRkZGRkZGRik7Ci0JaXdsMzk0NV9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwlpd2xfd3JpdGUzMihwcml2LCBDU1JfSU5ULCAweEZGRkZGRkZGKTsKKwlpd2xfZW5hYmxlX2ludGVycnVwdHMocHJpdik7CiAKIAkvKiByZWFsbHkgbWFrZSBzdXJlIHJma2lsbCBoYW5kc2hha2UgYml0cyBhcmUgY2xlYXJlZCAqLwotCWl3bDM5NDVfd3JpdGUzMihwcml2LCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsIENTUl9VQ09ERV9TV19CSVRfUkZLSUxMKTsKLQlpd2wzOTQ1X3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1VDT0RFX0RSVl9HUDFfQ0xSLCBDU1JfVUNPREVfU1dfQklUX1JGS0lMTCk7CiAKIAkvKiBDb3B5IG9yaWdpbmFsIHVjb2RlIGRhdGEgaW1hZ2UgZnJvbSBkaXNrIGludG8gYmFja3VwIGNhY2hlLgogCSAqIFRoaXMgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIG9uLWJvYXJkIHByb2Nlc3NvcidzCkBAIC01OTI4LDE3ICszMTQxLDE4IEBACiAJCS8qIGxvYWQgYm9vdHN0cmFwIHN0YXRlIG1hY2hpbmUsCiAJCSAqIGxvYWQgYm9vdHN0cmFwIHByb2dyYW0gaW50byBwcm9jZXNzb3IncyBtZW1vcnksCiAJCSAqIHByZXBhcmUgdG8gbG9hZCB0aGUgImluaXRpYWxpemUiIHVDb2RlICovCi0JCXJjID0gaXdsMzk0NV9sb2FkX2JzbShwcml2KTsKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+bG9hZF91Y29kZShwcml2KTsKIAogCQlpZiAocmMpIHsKLQkJCUlXTF9FUlJPUigiVW5hYmxlIHRvIHNldCB1cCBib290c3RyYXAgdUNvZGU6ICVkXG4iLCByYyk7CisJCQlJV0xfRVJSKHByaXYsCisJCQkJIlVuYWJsZSB0byBzZXQgdXAgYm9vdHN0cmFwIHVDb2RlOiAlZFxuIiwgcmMpOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBzdGFydCBjYXJkOyAiaW5pdGlhbGl6ZSIgd2lsbCBsb2FkIHJ1bnRpbWUgdWNvZGUgKi8KIAkJaXdsMzk0NV9uaWNfc3RhcnQocHJpdik7CiAKLQkJSVdMX0RFQlVHX0lORk8oRFJWX05BTUUgIiBpcyBjb21pbmcgdXBcbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCBEUlZfTkFNRSAiIGlzIGNvbWluZyB1cFxuIik7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTk0OSw3ICszMTYzLDcgQEAKIAogCS8qIHRyaWVkIHRvIHJlc3RhcnQgYW5kIGNvbmZpZyB0aGUgZGV2aWNlIGZvciBhcyBsb25nIGFzIG91cgogCSAqIHBhdGllbmNlIGNvdWxkIHdpdGhzdGFuZCAqLwotCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgZGV2aWNlIGFmdGVyICVkIGF0dGVtcHRzLlxuIiwgaSk7CisJSVdMX0VSUihwcml2LCAiVW5hYmxlIHRvIGluaXRpYWxpemUgZGV2aWNlIGFmdGVyICVkIGF0dGVtcHRzLlxuIiwgaSk7CiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTU5NjIsOCArMzE3Niw4IEBACiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfaW5pdF9hbGl2ZV9zdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBpbml0X2FsaXZlX3N0YXJ0LndvcmspOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIGluaXRfYWxpdmVfc3RhcnQud29yayk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTU5NzUsOCArMzE4OSw4IEBACiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfYWxpdmVfc3RhcnQoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bDM5NDVfcHJpdiwgYWxpdmVfc3RhcnQud29yayk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgYWxpdmVfc3RhcnQud29yayk7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKQEAgLTU5ODYsNjYgKzMyMDAsMzEgQEAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZl9raWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIGl3bDM5NDVfcmZraWxsX3BvbGwoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDM5NDVfcHJpdiwgcmZfa2lsbCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0KKwkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgcmZraWxsX3BvbGwud29yayk7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBwcml2LT5zdGF0dXM7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CisJaWYgKGl3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSAmIENTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKQorCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOworCWVsc2UKKwkJc2V0X2JpdChTVEFUVVNfUkZfS0lMTF9IVywgJnByaXYtPnN0YXR1cyk7CiAKLQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCXJldHVybjsKKwlpZiAodGVzdF9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZzdGF0dXMpICE9IHRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkKKwkJcXVldWVfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5yZl9raWxsKTsKIAotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmZraWxsX3BvbGwsCisJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKDIgKiBIWikpOwogCi0JaWYgKCFpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUcoSVdMX0RMX0lORk8gfCBJV0xfRExfUkZfS0lMTCwKLQkJCSAgIkhXIGFuZC9vciBTVyBSRiBLaWxsIG5vIGxvbmdlciBhY3RpdmUsIHJlc3RhcnRpbmcgIgotCQkJICAiZGV2aWNlXG4iKTsKLQkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVzdGFydCk7Ci0JfSBlbHNlIHsKLQotCQlpZiAoIXRlc3RfYml0KFNUQVRVU19SRl9LSUxMX0hXLCAmcHJpdi0+c3RhdHVzKSkKLQkJCUlXTF9ERUJVR19SRl9LSUxMKCJDYW4gbm90IHR1cm4gcmFkaW8gYmFjayBvbiAtICIKLQkJCQkJICAiZGlzYWJsZWQgYnkgU1cgc3dpdGNoXG4iKTsKLQkJZWxzZQotCQkJSVdMX1dBUk5JTkcoIlJhZGlvIEZyZXF1ZW5jeSBLaWxsIFN3aXRjaCBpcyBPbjpcbiIKLQkJCQkgICAgIktpbGwgc3dpdGNoIG11c3QgYmUgdHVybmVkIG9mZiBmb3IgIgotCQkJCSAgICAid2lyZWxlc3MgbmV0d29ya2luZyB0byB3b3JrLlxuIik7Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0JaXdsMzk0NV9yZmtpbGxfc2V0X2h3X3N0YXRlKHByaXYpOwogfQogCiAjZGVmaW5lIElXTF9TQ0FOX0NIRUNLX1dBVENIRE9HICg3ICogSFopCi0KLXN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfc2Nhbl9jaGVjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9Ci0JICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCBzY2FuX2NoZWNrLndvcmspOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykgfHwKLQkgICAgdGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVRyhJV0xfRExfSU5GTyB8IElXTF9ETF9TQ0FOLAotCQkJICAiU2NhbiBjb21wbGV0aW9uIHdhdGNoZG9nIHJlc2V0dGluZyBhZGFwdGVyICglZG1zKVxuIiwKLQkJCSAgamlmZmllc190b19tc2VjcyhJV0xfU0NBTl9DSEVDS19XQVRDSERPRykpOwotCi0JCWlmICghdGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCQlpd2wzOTQ1X3NlbmRfc2Nhbl9hYm9ydChwcml2KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfcmVxdWVzdF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0KLQkgICAgY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2wzOTQ1X3ByaXYsIHJlcXVlc3Rfc2Nhbik7Ci0Jc3RydWN0IGl3bDM5NDVfaG9zdF9jbWQgY21kID0geworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9CisJICAgIGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHJlcXVlc3Rfc2Nhbik7CisJc3RydWN0IGl3bF9ob3N0X2NtZCBjbWQgPSB7CiAJCS5pZCA9IFJFUExZX1NDQU5fQ01ELAogCQkubGVuID0gc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3NjYW5fY21kKSwKIAkJLm1ldGEuZmxhZ3MgPSBDTURfU0laRV9IVUdFLApAQCAtNjA2MSw4ICszMjQwLDggQEAKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCWlmICghaXdsMzk0NV9pc19yZWFkeShwcml2KSkgewotCQlJV0xfV0FSTklORygicmVxdWVzdCBzY2FuIGNhbGxlZCB3aGVuIGRyaXZlciBub3QgcmVhZHkuXG4iKTsKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgeworCQlJV0xfV0FSTihwcml2LCAicmVxdWVzdCBzY2FuIGNhbGxlZCB3aGVuIGRyaXZlciBub3QgcmVhZHkuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIApAQCAtNjA3NCwzNCArMzI1MywzNiBAQAogCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBvciBzY2hlZHVsZWQgaWYgdGhlcmUgaXMgY3VycmVudGx5CiAJICogYSBzY2FuIGFjdGl2ZSBpbiB0aGUgaGFyZHdhcmUuICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOX0hXLCAmcHJpdi0+c3RhdHVzKSkgewotCQlJV0xfREVCVUdfSU5GTygiTXVsdGlwbGUgY29uY3VycmVudCBzY2FuIHJlcXVlc3RzIGluIHBhcmFsbGVsLiAiCi0JCQkgICAgICAgIklnbm9yaW5nIHNlY29uZCByZXF1ZXN0LlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJNdWx0aXBsZSBjb25jdXJyZW50IHNjYW4gcmVxdWVzdHMgICIKKwkJCQkiSWdub3Jpbmcgc2Vjb25kIHJlcXVlc3QuXG4iKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBkZXZpY2Ugc2h1dGRvd25cbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiQWJvcnRpbmcgc2NhbiBkdWUgdG8gZGV2aWNlIHNodXRkb3duXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX0hDKCJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZy4gIFF1ZXVpbmcuXG4iKTsKKwkJSVdMX0RFQlVHX0hDKHByaXYsCisJCQkiU2NhbiByZXF1ZXN0IHdoaWxlIGFib3J0IHBlbmRpbmcuIFF1ZXVpbmcuXG4iKTsKIAkJZ290byBkb25lOwogCX0KIAotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfSEMoIkFib3J0aW5nIHNjYW4gZHVlIHRvIFJGIEtpbGwgYWN0aXZhdGlvblxuIik7CisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKKwkJSVdMX0RFQlVHX0hDKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBSRiBLaWxsIGFjdGl2YXRpb25cbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19IQygiU2NhbiByZXF1ZXN0IHdoaWxlIHVuaW5pdGlhbGl6ZWQuICBRdWV1aW5nLlxuIik7CisJCUlXTF9ERUJVR19IQyhwcml2LAorCQkJIlNjYW4gcmVxdWVzdCB3aGlsZSB1bmluaXRpYWxpemVkLiBRdWV1aW5nLlxuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoIXByaXYtPnNjYW5fYmFuZHMpIHsKLQkJSVdMX0RFQlVHX0hDKCJBYm9ydGluZyBzY2FuIGR1ZSB0byBubyByZXF1ZXN0ZWQgYmFuZHNcbiIpOworCQlJV0xfREVCVUdfSEMocHJpdiwgIkFib3J0aW5nIHNjYW4gZHVlIHRvIG5vIHJlcXVlc3RlZCBiYW5kc1xuIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTYxMTksMTQgKzMzMDAsMTQgQEAKIAlzY2FuLT5xdWlldF9wbGNwX3RoID0gSVdMX1BMQ1BfUVVJRVRfVEhSRVNIOwogCXNjYW4tPnF1aWV0X3RpbWUgPSBJV0xfQUNUSVZFX1FVSUVUX1RJTUU7CiAKLQlpZiAoaXdsMzk0NV9pc19hc3NvY2lhdGVkKHByaXYpKSB7CisJaWYgKGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKSB7CiAJCXUxNiBpbnRlcnZhbCA9IDA7CiAJCXUzMiBleHRyYTsKIAkJdTMyIHN1c3BlbmRfdGltZSA9IDEwMDsKIAkJdTMyIHNjYW5fc3VzcGVuZF90aW1lID0gMTAwOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCUlXTF9ERUJVR19JTkZPKCJTY2FubmluZyB3aGlsZSBhc3NvY2lhdGVkLi4uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNjYW5uaW5nIHdoaWxlIGFzc29jaWF0ZWQuLi5cbiIpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCWludGVydmFsID0gcHJpdi0+YmVhY29uX2ludDsKQEAgLTYxNDgsMTUgKzMzMjksMTQgQEAKIAkJICAgIChleHRyYSB8ICgoc3VzcGVuZF90aW1lICUgaW50ZXJ2YWwpICogMTAyNCkpOwogCiAJCXNjYW4tPnN1c3BlbmRfdGltZSA9IGNwdV90b19sZTMyKHNjYW5fc3VzcGVuZF90aW1lKTsKLQkJSVdMX0RFQlVHX1NDQU4oInN1c3BlbmRfdGltZSAweCVYIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInN1c3BlbmRfdGltZSAweCVYIGJlYWNvbiBpbnRlcnZhbCAlZFxuIiwKIAkJCSAgICAgICBzY2FuX3N1c3BlbmRfdGltZSwgaW50ZXJ2YWwpOwogCX0KIAogCS8qIFdlIHNob3VsZCBhZGQgdGhlIGFiaWxpdHkgZm9yIHVzZXIgdG8gbG9jayB0byBQQVNTSVZFIE9OTFkgKi8KIAlpZiAocHJpdi0+b25lX2RpcmVjdF9zY2FuKSB7Ci0JCUlXTF9ERUJVR19TQ0FOCi0JCSAgICAoIktpY2tpbmcgb2ZmIG9uZSBkaXJlY3Qgc2NhbiBmb3IgJyVzJ1xuIiwKLQkJICAgICBwcmludF9zc2lkKHNzaWQsIHByaXYtPmRpcmVjdF9zc2lkLAorCQlJV0xfREVCVUdfU0NBTihwcml2LCAiS2lja2luZyBvZmYgb25lIGRpcmVjdCBzY2FuIGZvciAnJXMnXG4iLAorCQkJCXByaW50X3NzaWQoc3NpZCwgcHJpdi0+ZGlyZWN0X3NzaWQsCiAJCQkJcHJpdi0+ZGlyZWN0X3NzaWRfbGVuKSk7CiAJCXNjYW4tPmRpcmVjdF9zY2FuWzBdLmlkID0gV0xBTl9FSURfU1NJRDsKIAkJc2Nhbi0+ZGlyZWN0X3NjYW5bMF0ubGVuID0gcHJpdi0+ZGlyZWN0X3NzaWRfbGVuOwpAQCAtNjE2NCwxNSArMzM0NCwxMiBAQAogCQkgICAgICAgcHJpdi0+ZGlyZWN0X3NzaWQsIHByaXYtPmRpcmVjdF9zc2lkX2xlbik7CiAJCW5fcHJvYmVzKys7CiAJfSBlbHNlCi0JCUlXTF9ERUJVR19TQ0FOKCJLaWNraW5nIG9mZiBvbmUgaW5kaXJlY3Qgc2Nhbi5cbiIpOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiS2lja2luZyBvZmYgb25lIGluZGlyZWN0IHNjYW4uXG4iKTsKIAogCS8qIFdlIGRvbid0IGJ1aWxkIGEgZGlyZWN0IHNjYW4gcHJvYmUgcmVxdWVzdDsgdGhlIHVDb2RlIHdpbGwgZG8KIAkgKiB0aGF0IGJhc2VkIG9uIHRoZSBkaXJlY3RfbWFzayBhZGRlZCB0byBlYWNoIGNoYW5uZWwgZW50cnkgKi8KLQlzY2FuLT50eF9jbWQubGVuID0gY3B1X3RvX2xlMTYoCi0JCWl3bDM5NDVfZmlsbF9wcm9iZV9yZXEocHJpdiwgKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNjYW4tPmRhdGEsCi0JCQlJV0xfTUFYX1NDQU5fU0laRSAtIHNpemVvZigqc2NhbikpKTsKIAlzY2FuLT50eF9jbWQudHhfZmxhZ3MgPSBUWF9DTURfRkxHX1NFUV9DVExfTVNLOwotCXNjYW4tPnR4X2NtZC5zdGFfaWQgPSBwcml2LT5od19zZXR0aW5nLmJjYXN0X3N0YV9pZDsKKwlzY2FuLT50eF9jbWQuc3RhX2lkID0gcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZDsKIAlzY2FuLT50eF9jbWQuc3RvcF90aW1lLmxpZmVfdGltZSA9IFRYX0NNRF9MSUZFX1RJTUVfSU5GSU5JVEU7CiAKIAkvKiBmbGFncyArIHJhdGUgc2VsZWN0aW9uICovCkBAIC02MTg3LDEwICszMzY0LDE1IEBACiAJCXNjYW4tPmdvb2RfQ1JDX3RoID0gSVdMX0dPT0RfQ1JDX1RIOwogCQliYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKIAl9IGVsc2UgewotCQlJV0xfV0FSTklORygiSW52YWxpZCBzY2FuIGJhbmQgY291bnRcbiIpOworCQlJV0xfV0FSTihwcml2LCAiSW52YWxpZCBzY2FuIGJhbmQgY291bnRcbiIpOwogCQlnb3RvIGRvbmU7CiAJfQogCisJc2Nhbi0+dHhfY21kLmxlbiA9IGNwdV90b19sZTE2KAorCQlpd2xfZmlsbF9wcm9iZV9yZXEocHJpdiwgYmFuZCwKKwkJCQkgICAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2Nhbi0+ZGF0YSwKKwkJCQkgICBJV0xfTUFYX1NDQU5fU0laRSAtIHNpemVvZigqc2NhbikpKTsKKwogCS8qIHNlbGVjdCBSeCBhbnRlbm5hcyAqLwogCXNjYW4tPmZsYWdzIHw9IGl3bDM5NDVfZ2V0X2FudGVubmFfZmxhZ3MocHJpdik7CiAKQEAgLTYyMDMsNyArMzM4NSw3IEBACiAJCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KHNjYW4tPnR4X2NtZC5sZW4pXSk7CiAKIAlpZiAoc2Nhbi0+Y2hhbm5lbF9jb3VudCA9PSAwKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKCJjaGFubmVsIGNvdW50ICVkXG4iLCBzY2FuLT5jaGFubmVsX2NvdW50KTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgImNoYW5uZWwgY291bnQgJWRcbiIsIHNjYW4tPmNoYW5uZWxfY291bnQpOwogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC02MjEzLDcgKzMzOTUsNyBAQAogCXNjYW4tPmxlbiA9IGNwdV90b19sZTE2KGNtZC5sZW4pOwogCiAJc2V0X2JpdChTVEFUVVNfU0NBTl9IVywgJnByaXYtPnN0YXR1cyk7Ci0JcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3N5bmMocHJpdiwgJmNtZCk7CisJcmMgPSBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKIAlpZiAocmMpCiAJCWdvdG8gZG9uZTsKIApAQCAtNjIzOSw3ICszNDIxLDcgQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ191cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCB1cCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgdXApOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CkBAIC02MjQ3LDEyICszNDI5LDEyIEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCV9faXdsMzk0NV91cChwcml2KTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfcmVzdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsMzk0NV9wcml2LCByZXN0YXJ0KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCByZXN0YXJ0KTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKIAkJcmV0dXJuOwpAQCAtNjI2Myw4ICszNDQ1LDggQEAKIAogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yeF9yZXBsZW5pc2goc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bDM5NDVfcHJpdiwgcnhfcmVwbGVuaXNoKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPQorCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCByeF9yZXBsZW5pc2gpOwogCiAJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQogCQlyZXR1cm47CkBAIC02Mjc2LDE4ICszNDU4LDE4IEBACiAKICNkZWZpbmUgSVdMX0RFTEFZX05FWFRfU0NBTiAoSFoqMikKIAotc3RhdGljIHZvaWQgaXdsMzk0NV9wb3N0X2Fzc29jaWF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9wb3N0X2Fzc29jaWF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSBOVUxMOwogCiAJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKLQkJSVdMX0VSUk9SKCIlcyBTaG91bGQgbm90IGJlIGNhbGxlZCBpbiBBUCBtb2RlXG4iLCBfX2Z1bmNfXyk7CisJCUlXTF9FUlIocHJpdiwgIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluIEFQIG1vZGVcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwogCX0KIAogCi0JSVdMX0RFQlVHX0FTU09DKCJBc3NvY2lhdGVkIGFzICVkIHRvOiAlcE1cbiIsCisJSVdMX0RFQlVHX0FTU09DKHByaXYsICJBc3NvY2lhdGVkIGFzICVkIHRvOiAlcE1cbiIsCiAJCQlwcml2LT5hc3NvY19pZCwgcHJpdi0+YWN0aXZlX3J4b24uYnNzaWRfYWRkcik7CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCkBAIC02Mjk2LDI2ICszNDc4LDI2IEBACiAJaWYgKCFwcml2LT52aWYgfHwgIXByaXYtPmlzX29wZW4pCiAJCXJldHVybjsKIAotCWl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAyMDApOworCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDIwMCk7CiAKIAljb25mID0gaWVlZTgwMjExX2dldF9od19jb25mKHByaXYtPmh3KTsKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwogCi0JbWVtc2V0KCZwcml2LT5yeG9uX3RpbWluZywgMCwgc2l6ZW9mKHN0cnVjdCBpd2wzOTQ1X3J4b25fdGltZV9jbWQpKTsKKwltZW1zZXQoJnByaXYtPnJ4b25fdGltaW5nLCAwLCBzaXplb2Yoc3RydWN0IGl3bF9yeG9uX3RpbWVfY21kKSk7CiAJaXdsMzk0NV9zZXR1cF9yeG9uX3RpbWluZyhwcml2KTsKLQlyYyA9IGl3bDM5NDVfc2VuZF9jbWRfcGR1KHByaXYsIFJFUExZX1JYT05fVElNSU5HLAorCXJjID0gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKIAkJCSAgICAgIHNpemVvZihwcml2LT5yeG9uX3RpbWluZyksICZwcml2LT5yeG9uX3RpbWluZyk7CiAJaWYgKHJjKQotCQlJV0xfV0FSTklORygiUkVQTFlfUlhPTl9USU1JTkcgZmFpbGVkIC0gIgorCQlJV0xfV0FSTihwcml2LCAiUkVQTFlfUlhPTl9USU1JTkcgZmFpbGVkIC0gIgogCQkJICAgICJBdHRlbXB0aW5nIHRvIGNvbnRpbnVlLlxuIik7CiAKIAlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKIAogCXByaXYtPnN0YWdpbmdfcnhvbi5hc3NvY19pZCA9IGNwdV90b19sZTE2KHByaXYtPmFzc29jX2lkKTsKIAotCUlXTF9ERUJVR19BU1NPQygiYXNzb2MgaWQgJWQgYmVhY29uIGludGVydmFsICVkXG4iLAorCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiYXNzb2MgaWQgJWQgYmVhY29uIGludGVydmFsICVkXG4iLAogCQkJcHJpdi0+YXNzb2NfaWQsIHByaXYtPmJlYWNvbl9pbnQpOwogCiAJaWYgKHByaXYtPmFzc29jX2NhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpCkBAIC02MzU1LDU2ICszNTM3LDE5IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJIElXTF9FUlJPUigiJXMgU2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gJWQgbW9kZVxuIiwKKwkJIElXTF9FUlIocHJpdiwgIiVzIFNob3VsZCBub3QgYmUgY2FsbGVkIGluICVkIG1vZGVcbiIsCiAJCQkgICBfX2Z1bmNfXywgcHJpdi0+aXdfbW9kZSk7CiAJCWJyZWFrOwogCX0KIAotCWl3bDM5NDVfYWN0aXZhdGVfcW9zKHByaXYsIDApOworCWl3bF9hY3RpdmF0ZV9xb3MocHJpdiwgMCk7CiAKIAkvKiB3ZSBoYXZlIGp1c3QgYXNzb2NpYXRlZCwgZG9uJ3Qgc3RhcnQgc2NhbiB0b28gZWFybHkgKi8KIAlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IGppZmZpZXMgKyBJV0xfREVMQVlfTkVYVF9TQ0FOOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2JnX2Fib3J0X3NjYW4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDM5NDVfcHJpdiwgYWJvcnRfc2Nhbik7Ci0KLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHkocHJpdikpCi0JCXJldHVybjsKLQotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQotCXNldF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpOwotCWl3bDM5NDVfc2VuZF9zY2FuX2Fib3J0KHByaXYpOwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci19Ci0KIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPQotCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bDM5NDVfcHJpdiwgc2Nhbl9jb21wbGV0ZWQpOwotCi0JSVdMX0RFQlVHKElXTF9ETF9JTkZPIHwgSVdMX0RMX1NDQU4sICJTQ0FOIGNvbXBsZXRlIHNjYW5cbiIpOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX0NPTkZfUEVORElORywgJnByaXYtPnN0YXR1cykpCi0JCWl3bDM5NDVfbWFjX2NvbmZpZyhwcml2LT5odywgMCk7Ci0KLQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQocHJpdi0+aHcpOwotCi0JLyogU2luY2Ugc2V0dGluZyB0aGUgVFhQT1dFUiBtYXkgaGF2ZSBiZWVuIGRlZmVycmVkIHdoaWxlCi0JICogcGVyZm9ybWluZyB0aGUgc2NhbiwgZmlyZSBvbmUgb2ZmICovCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCWl3bDM5NDVfaHdfcmVnX3NlbmRfdHhwb3dlcihwcml2KTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogbWFjODAyMTEgZW50cnkgcG9pbnQgZnVuY3Rpb25zCkBAIC02NDE1LDM2ICszNTYwLDIyIEBACiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCByZXQ7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKLQotCWlmIChwY2lfZW5hYmxlX2RldmljZShwcml2LT5wY2lfZGV2KSkgewotCQlJV0xfRVJST1IoIkZhaWwgdG8gcGNpX2VuYWJsZV9kZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2VuYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIGl3bDM5NDVfaXNyLCBJUlFGX1NIQVJFRCwKLQkJCSAgRFJWX05BTUUsIHByaXYpOwotCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJFcnJvciBhbGxvY2F0aW5nIElSUSAlZFxuIiwgcHJpdi0+cGNpX2Rldi0+aXJxKTsKLQkJZ290byBvdXRfZGlzYWJsZV9tc2k7Ci0JfQorCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCiAJLyogd2Ugc2hvdWxkIGJlIHZlcmlmeWluZyB0aGUgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIG9wZW5lZCAqLwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAotCW1lbXNldCgmcHJpdi0+c3RhZ2luZ19yeG9uLCAwLCBzaXplb2Yoc3RydWN0IGl3bDM5NDVfcnhvbl9jbWQpKTsKKwltZW1zZXQoJnByaXYtPnN0YWdpbmdfcnhvbiwgMCwgc2l6ZW9mKHByaXYtPnN0YWdpbmdfcnhvbikpOwogCS8qIGZldGNoIHVjb2RlIGZpbGUgZnJvbSBkaXNrLCBhbGxvYyBhbmQgY29weSB0byBidXMtbWFzdGVyIGJ1ZmZlcnMgLi4uCiAJICogdWNvZGUgZmlsZW5hbWUgYW5kIG1heCBzaXplcyBhcmUgY2FyZC1zcGVjaWZpYy4gKi8KIAogCWlmICghcHJpdi0+dWNvZGVfY29kZS5sZW4pIHsKIAkJcmV0ID0gaXdsMzk0NV9yZWFkX3Vjb2RlKHByaXYpOwogCQlpZiAocmV0KSB7Ci0JCQlJV0xfRVJST1IoIkNvdWxkIG5vdCByZWFkIG1pY3JvY29kZTogJWRcbiIsIHJldCk7CisJCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgcmVhZCBtaWNyb2NvZGU6ICVkXG4iLCByZXQpOwogCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKIAkJfQpAQCAtNjQ1NCwxMiArMzU4NSwxMiBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlpd2wzOTQ1X3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CiAKIAlpZiAocmV0KQogCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKIAotCUlXTF9ERUJVR19JTkZPKCJTdGFydCBVUCB3b3JrLlxuIik7CisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlN0YXJ0IFVQIHdvcmsuXG4iKTsKIAogCWlmICh0ZXN0X2JpdChTVEFUVVNfSU5fU1VTUEVORCwgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybiAwOwpAQCAtNjQ3MSw4NiArMzYwMiw4NyBAQAogCQkJVUNPREVfUkVBRFlfVElNRU9VVCk7CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpKSB7Ci0JCQlJV0xfRVJST1IoIldhaXQgZm9yIFNUQVJUX0FMSVZFIHRpbWVvdXQgYWZ0ZXIgJWRtcy5cbiIsCi0JCQkJICBqaWZmaWVzX3RvX21zZWNzKFVDT0RFX1JFQURZX1RJTUVPVVQpKTsKKwkJCUlXTF9FUlIocHJpdiwKKwkJCQkiV2FpdCBmb3IgU1RBUlRfQUxJVkUgdGltZW91dCBhZnRlciAlZG1zLlxuIiwKKwkJCQlqaWZmaWVzX3RvX21zZWNzKFVDT0RFX1JFQURZX1RJTUVPVVQpKTsKIAkJCXJldCA9IC1FVElNRURPVVQ7CiAJCQlnb3RvIG91dF9yZWxlYXNlX2lycTsKIAkJfQogCX0KIAorCS8qIHVjb2RlIGlzIHJ1bm5pbmcgYW5kIHdpbGwgc2VuZCByZmtpbGwgbm90aWZpY2F0aW9ucywKKwkgKiBubyBuZWVkIHRvIHBvbGwgdGhlIGtpbGxzd2l0Y2ggc3RhdGUgYW55bW9yZSAqLworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnJma2lsbF9wb2xsKTsKKwogCXByaXYtPmlzX29wZW4gPSAxOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCXJldHVybiAwOwogCiBvdXRfcmVsZWFzZV9pcnE6Ci0JZnJlZV9pcnEocHJpdi0+cGNpX2Rldi0+aXJxLCBwcml2KTsKLW91dF9kaXNhYmxlX21zaToKLQlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHByaXYtPnBjaV9kZXYpOwogCXByaXYtPmlzX29wZW4gPSAwOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBmYWlsZWRcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBmYWlsZWRcbiIpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfbWFjX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAlpZiAoIXByaXYtPmlzX29wZW4pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHNraXBcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gc2tpcFxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlwcml2LT5pc19vcGVuID0gMDsKIAotCWlmIChpd2wzOTQ1X2lzX3JlYWR5X3JmKHByaXYpKSB7CisJaWYgKGl3bF9pc19yZWFkeV9yZihwcml2KSkgewogCQkvKiBzdG9wIG1hYywgY2FuY2VsIGFueSBzY2FuIHJlcXVlc3QgYW5kIGNsZWFyCiAJCSAqIFJYT05fRklMVEVSX0FTU09DX01TSyBCSVQKIAkJICovCiAJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQkJaXdsMzk0NV9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCX0KIAogCWl3bDM5NDVfZG93bihwcml2KTsKIAogCWZsdXNoX3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwotCWZyZWVfaXJxKHByaXYtPnBjaV9kZXYtPmlycSwgcHJpdik7Ci0JcGNpX2Rpc2FibGVfbXNpKHByaXYtPnBjaV9kZXYpOwotCXBjaV9zYXZlX3N0YXRlKHByaXYtPnBjaV9kZXYpOwotCXBjaV9kaXNhYmxlX2RldmljZShwcml2LT5wY2lfZGV2KTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCS8qIHN0YXJ0IHBvbGxpbmcgdGhlIGtpbGxzd2l0Y2ggc3RhdGUgYWdhaW4gKi8KKwlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmZraWxsX3BvbGwsCisJCQkgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKDIgKiBIWikpOworCisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlJV0xfREVCVUdfVFgoImRldi0+eG1pdCglZCBieXRlcykgYXQgcmF0ZSAweCUwMnhcbiIsIHNrYi0+bGVuLAorCUlXTF9ERUJVR19UWChwcml2LCAiZGV2LT54bWl0KCVkIGJ5dGVzKSBhdCByYXRlIDB4JTAyeFxuIiwgc2tiLT5sZW4sCiAJCSAgICAgaWVlZTgwMjExX2dldF90eF9yYXRlKGh3LCBJRUVFODAyMTFfU0tCX0NCKHNrYikpLT5iaXRyYXRlKTsKIAogCWlmIChpd2wzOTQ1X3R4X3NrYihwcml2LCBza2IpKQogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogc3RhdGljIGludCBpd2wzOTQ1X21hY19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXI6IHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXI6IHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOwogCiAJaWYgKHByaXYtPnZpZikgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gdmlmICE9IE5VTExcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gdmlmICE9IE5VTExcbiIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC02NTYzLDE2ICszNjk1LDE2IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJaWYgKGNvbmYtPm1hY19hZGRyKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgiU2V0OiAlcE1cbiIsIGNvbmYtPm1hY19hZGRyKTsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJTZXQ6ICVwTVxuIiwgY29uZi0+bWFjX2FkZHIpOwogCQltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CiAJfQogCi0JaWYgKGl3bDM5NDVfaXNfcmVhZHkocHJpdikpCisJaWYgKGl3bF9pc19yZWFkeShwcml2KSkKIAkJaXdsMzk0NV9zZXRfbW9kZShwcml2LCBjb25mLT50eXBlKTsKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY1ODUsMjQgKzM3MTcsMjUgQEAKICAqLwogc3RhdGljIGludCBpd2wzOTQ1X21hY19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQljb25zdCBzdHJ1Y3QgaXdsMzk0NV9jaGFubmVsX2luZm8gKmNoX2luZm87CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJY29uc3Qgc3RydWN0IGl3bF9jaGFubmVsX2luZm8gKmNoX2luZm87CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlciB0byBjaGFubmVsICVkXG4iLCBjb25mLT5jaGFubmVsLT5od192YWx1ZSk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlciB0byBjaGFubmVsICVkXG4iLAorCQkJCWNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlKTsKIAotCWlmICghaXdsMzk0NV9pc19yZWFkeShwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKKwlpZiAoIWl3bF9pc19yZWFkeShwcml2KSkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKIAkJcmV0ID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHVubGlrZWx5KCFpd2wzOTQ1X3BhcmFtX2Rpc2FibGVfaHdfc2NhbiAmJgorCWlmICh1bmxpa2VseSghaXdsMzk0NV9tb2RfcGFyYW1zLmRpc2FibGVfaHdfc2NhbiAmJgogCQkgICAgIHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBzY2FubmluZ1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBzY2FubmluZ1xuIik7CiAJCXNldF9iaXQoU1RBVFVTX0NPTkZfUEVORElORywgJnByaXYtPnN0YXR1cyk7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm4gMDsKQEAgLTY2MTAsMjUgKzM3NDMsMjYgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQljaF9pbmZvID0gaXdsMzk0NV9nZXRfY2hhbm5lbF9pbmZvKHByaXYsIGNvbmYtPmNoYW5uZWwtPmJhbmQsCi0JCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmh3X3ZhbHVlKTsKKwljaF9pbmZvID0gaXdsX2dldF9jaGFubmVsX2luZm8ocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwKKwkJCQkgICAgICAgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOwogCWlmICghaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkgewotCQlJV0xfREVCVUdfU0NBTigiQ2hhbm5lbCAlZCBbJWRdIGlzIElOVkFMSUQgZm9yIHRoaXMgYmFuZC5cbiIsCi0JCQkgICAgICAgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOwotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gaW52YWxpZCBjaGFubmVsXG4iKTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwKKwkJCQkiQ2hhbm5lbCAlZCBbJWRdIGlzIElOVkFMSUQgZm9yIHRoaXMgYmFuZC5cbiIsCisJCQkJY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUsIGNvbmYtPmNoYW5uZWwtPmJhbmQpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gaW52YWxpZCBjaGFubmVsXG4iKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpd2wzOTQ1X3NldF9yeG9uX2NoYW5uZWwocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCwgY29uZi0+Y2hhbm5lbC0+aHdfdmFsdWUpOworCWl3bF9zZXRfcnhvbl9jaGFubmVsKHByaXYsIGNvbmYtPmNoYW5uZWwpOwogCi0JaXdsMzk0NV9zZXRfZmxhZ3NfZm9yX3BoeW1vZGUocHJpdiwgY29uZi0+Y2hhbm5lbC0+YmFuZCk7CisJaXdsX3NldF9mbGFnc19mb3JfYmFuZChwcml2LCBjb25mLT5jaGFubmVsLT5iYW5kKTsKIAogCS8qIFRoZSBsaXN0IG9mIHN1cHBvcnRlZCByYXRlcyBhbmQgcmF0ZSBtYXNrIGNhbiBiZSBkaWZmZXJlbnQKIAkgKiBmb3IgZWFjaCBwaHltb2RlOyBzaW5jZSB0aGUgcGh5bW9kZSBtYXkgaGF2ZSBjaGFuZ2VkLCByZXNldAogCSAqIHRoZSByYXRlIG1hc2sgdG8gd2hhdCBtYWM4MDIxMSBsaXN0cyAqLwotCWl3bDM5NDVfc2V0X3JhdGUocHJpdik7CisJaXdsX3NldF9yYXRlKHByaXYpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCkBAIC02NjM5LDI4ICszNzczLDM2IEBACiAJfQogI2VuZGlmCiAKLQlpd2wzOTQ1X3JhZGlvX2tpbGxfc3cocHJpdiwgIWNvbmYtPnJhZGlvX2VuYWJsZWQpOworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQpIHsKKwkJaWYgKGNvbmYtPnJhZGlvX2VuYWJsZWQgJiYKKwkJICAgIGl3bF9yYWRpb19raWxsX3N3X2VuYWJsZV9yYWRpbyhwcml2KSkgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGLUtJTEwgLSAiCisJCQkJCQkgIndhaXRpbmcgZm9yIHVDb2RlXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CiAKLQlpZiAoIWNvbmYtPnJhZGlvX2VuYWJsZWQpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHJhZGlvIGRpc2FibGVkXG4iKTsKLQkJZ290byBvdXQ7CisJCWlmICghY29uZi0+cmFkaW9fZW5hYmxlZCkgeworCQkJaXdsX3JhZGlvX2tpbGxfc3dfZGlzYWJsZV9yYWRpbyhwcml2KTsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSByYWRpbyBkaXNhYmxlZFxuIik7CisJCQlnb3RvIG91dDsKKwkJfQogCX0KIAotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbChwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYga2lsbFxuIik7CisJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIGtpbGxcbiIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpd2wzOTQ1X3NldF9yYXRlKHByaXYpOworCWl3bF9zZXRfcmF0ZShwcml2KTsKIAogCWlmIChtZW1jbXAoJnByaXYtPmFjdGl2ZV9yeG9uLAogCQkgICAmcHJpdi0+c3RhZ2luZ19yeG9uLCBzaXplb2YocHJpdi0+c3RhZ2luZ19yeG9uKSkpCiAJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAJZWxzZQotCQlJV0xfREVCVUdfSU5GTygiTm8gcmUtc2VuZGluZyBzYW1lIFJYT04gY29uZmlndXJhdGlvbi5cbiIpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiTm90IHJlLXNlbmRpbmcgc2FtZSBSWE9OIGNvbmZpZ3VyYXRpb25cbiIpOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKIG91dDoKIAljbGVhcl9iaXQoU1RBVFVTX0NPTkZfUEVORElORywgJnByaXYtPnN0YXR1cyk7CkBAIC02NjY4LDcgKzM4MTAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfY29uZmlnX2FwKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2NvbmZpZ19hcChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJjID0gMDsKIApAQCAtNjY3NiwxOSArMzgxOCwyMCBAQAogCQlyZXR1cm47CiAKIAkvKiBUaGUgZm9sbG93aW5nIHNob3VsZCBiZSBkb25lIG9ubHkgYXQgQVAgYnJpbmcgdXAgKi8KLQlpZiAoIShpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpKSB7CisJaWYgKCEoaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpKSB7CiAKIAkJLyogUlhPTiAtIHVuYXNzb2MgKHRvIHNldCB0aW1pbmcgY29tbWFuZCkgKi8KIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwogCiAJCS8qIFJYT04gVGltaW5nICovCi0JCW1lbXNldCgmcHJpdi0+cnhvbl90aW1pbmcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9yeG9uX3RpbWVfY21kKSk7CisJCW1lbXNldCgmcHJpdi0+cnhvbl90aW1pbmcsIDAsIHNpemVvZihzdHJ1Y3QgaXdsX3J4b25fdGltZV9jbWQpKTsKIAkJaXdsMzk0NV9zZXR1cF9yeG9uX3RpbWluZyhwcml2KTsKLQkJcmMgPSBpd2wzOTQ1X3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9SWE9OX1RJTUlORywKLQkJCQlzaXplb2YocHJpdi0+cnhvbl90aW1pbmcpLCAmcHJpdi0+cnhvbl90aW1pbmcpOworCQlyYyA9IGl3bF9zZW5kX2NtZF9wZHUocHJpdiwgUkVQTFlfUlhPTl9USU1JTkcsCisJCQkJICAgICAgc2l6ZW9mKHByaXYtPnJ4b25fdGltaW5nKSwKKwkJCQkgICAgICAmcHJpdi0+cnhvbl90aW1pbmcpOwogCQlpZiAocmMpCi0JCQlJV0xfV0FSTklORygiUkVQTFlfUlhPTl9USU1JTkcgZmFpbGVkIC0gIgorCQkJSVdMX1dBUk4ocHJpdiwgIlJFUExZX1JYT05fVElNSU5HIGZhaWxlZCAtICIKIAkJCQkJIkF0dGVtcHRpbmcgdG8gY29udGludWUuXG4iKTsKIAogCQkvKiBGSVhNRTogd2hhdCBzaG91bGQgYmUgdGhlIGFzc29jX2lkIGZvciBBUD8gKi8KQEAgLTY3MTYsNyArMzg1OSw3IEBACiAJCS8qIHJlc3RvcmUgUlhPTiBhc3NvYyAqLwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKLQkJaXdsMzk0NV9hZGRfc3RhdGlvbihwcml2LCBpd2wzOTQ1X2Jyb2FkY2FzdF9hZGRyLCAwLCAwKTsKKwkJaXdsMzk0NV9hZGRfc3RhdGlvbihwcml2LCBpd2xfYmNhc3RfYWRkciwgMCwgMCk7CiAJfQogCWl3bDM5NDVfc2VuZF9iZWFjb25fY21kKHByaXYpOwogCkBAIC02NzI3LDE2ICszODcwLDE2IEBACiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfY29uZmlnX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9jb25mICpjb25mKQorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2NvbmYgKmNvbmYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCByYzsKIAogCWlmIChjb25mID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwogCiAJaWYgKHByaXYtPnZpZiAhPSB2aWYpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHByaXYtPnZpZiAhPSB2aWZcbiIpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gcHJpdi0+dmlmICE9IHZpZlxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNjc1MywxMyArMzg5NiwxMyBAQAogCQkJcmV0dXJuIHJjOwogCX0KIAotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAoY29uZi0+YnNzaWQpCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgiYnNzaWQ6ICVwTVxuIiwgY29uZi0+YnNzaWQpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImJzc2lkOiAlcE1cbiIsIGNvbmYtPmJzc2lkKTsKIAogLyoKICAqIHZlcnkgZHViaW91cyBjb2RlIHdhcyBoZXJlOyB0aGUgcHJvYmUgZmlsdGVyaW5nIGZsYWcgaXMgbmV2ZXIgc2V0OgpAQCAtNjc3Miw3ICszOTE1LDcgQEAKIAkJaWYgKCFjb25mLT5ic3NpZCkgewogCQkJY29uZi0+YnNzaWQgPSBwcml2LT5tYWNfYWRkcjsKIAkJCW1lbWNweShwcml2LT5ic3NpZCwgcHJpdi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiYnNzaWQgd2FzIHNldCB0bzogJXBNXG4iLAorCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJic3NpZCB3YXMgc2V0IHRvOiAlcE1cbiIsCiAJCQkJCSAgIGNvbmYtPmJzc2lkKTsKIAkJfQogCQlpZiAocHJpdi0+aWJzc19iZWFjb24pCkBAIC02NzgxLDE3ICszOTI0LDE3IEBACiAJCXByaXYtPmlic3NfYmVhY29uID0gaWVlZTgwMjExX2JlYWNvbl9nZXQoaHcsIHZpZik7CiAJfQogCi0JaWYgKGl3bDM5NDVfaXNfcmZraWxsKHByaXYpKQorCWlmIChpd2xfaXNfcmZraWxsKHByaXYpKQogCQlnb3RvIGRvbmU7CiAKIAlpZiAoY29uZi0+YnNzaWQgJiYgIWlzX3plcm9fZXRoZXJfYWRkcihjb25mLT5ic3NpZCkgJiYKIAkgICAgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbmYtPmJzc2lkKSkgewogCQkvKiBJZiB0aGVyZSBpcyBjdXJyZW50bHkgYSBIVyBzY2FuIGdvaW5nIG9uIGluIHRoZSBiYWNrZ3JvdW5kCiAJCSAqIHRoZW4gd2UgbmVlZCB0byBjYW5jZWwgaXQgZWxzZSB0aGUgUlhPTiBiZWxvdyB3aWxsIGZhaWwuICovCi0JCWlmIChpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkgewotCQkJSVdMX1dBUk5JTkcoIkFib3J0ZWQgc2NhbiBzdGlsbCBpbiBwcm9ncmVzcyAiCisJCWlmIChpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKSB7CisJCQlJV0xfV0FSTihwcml2LCAiQWJvcnRlZCBzY2FuIHN0aWxsIGluIHByb2dyZXNzICIKIAkJCQkgICAgImFmdGVyIDEwMG1zXG4iKTsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmluZyAtIHNjYW4gYWJvcnQgZmFpbGVkLlxuIik7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZpbmc6c2NhbiBhYm9ydCBmYWlsZWRcbiIpOwogCQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJfQpAQCAtNjgxMyw3NSArMzk1NiwyOSBAQAogCQl9CiAKIAl9IGVsc2UgewotCQlpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwkJaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKIAkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQVNTT0NfTVNLOwogCQlpd2wzOTQ1X2NvbW1pdF9yeG9uKHByaXYpOwogCX0KIAogIGRvbmU6Ci0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXdsMzk0NV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKLQkJCQkgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKLQkJCQkgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JX19sZTMyICpmaWx0ZXJfZmxhZ3MgPSAmcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFnczsKLQotCUlXTF9ERUJVR19NQUM4MDIxMSgiRW50ZXI6IGNoYW5nZWQ6IDB4JXgsIHRvdGFsOiAweCV4XG4iLAotCQkJY2hhbmdlZF9mbGFncywgKnRvdGFsX2ZsYWdzKTsKLQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgKEZJRl9PVEhFUl9CU1MgfCBGSUZfUFJPTUlTQ19JTl9CU1MpKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiAoRklGX09USEVSX0JTUyB8IEZJRl9QUk9NSVNDX0lOX0JTUykpCi0JCQkqZmlsdGVyX2ZsYWdzIHw9IFJYT05fRklMVEVSX1BST01JU0NfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKLQl9Ci0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfQUxMTVVMVEkpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9BTExNVUxUSSkKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0s7Ci0JCWVsc2UKLQkJCSpmaWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FDQ0VQVF9HUlBfTVNLOwotCX0KLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9DT05UUk9MKSB7Ci0JCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQ09OVFJPTCkKLQkJCSpmaWx0ZXJfZmxhZ3MgfD0gUlhPTl9GSUxURVJfQ1RMMkhPU1RfTVNLOwotCQllbHNlCi0JCQkqZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9DVEwySE9TVF9NU0s7Ci0JfQotCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpIHsKLQkJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKQotCQkJKmZpbHRlcl9mbGFncyB8PSBSWE9OX0ZJTFRFUl9CQ09OX0FXQVJFX01TSzsKLQkJZWxzZQotCQkJKmZpbHRlcl9mbGFncyAmPSB+UlhPTl9GSUxURVJfQkNPTl9BV0FSRV9NU0s7Ci0JfQotCi0JLyogV2UgYXZvaWQgaXdsX2NvbW1pdF9yeG9uIGhlcmUgdG8gY29tbWl0IHRoZSBuZXcgZmlsdGVyIGZsYWdzCi0JICogc2luY2UgbWFjODAyMTEgd2lsbCBjYWxsIGllZWU4MDIxMV9od19jb25maWcgaW1tZWRpYXRlbHkuCi0JICogKG1jX2xpc3QgaXMgbm90IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUpLiBPdGhlcndpc2UsIHdlIG5lZWQgdG8KLQkgKiBxdWV1ZSBhIGJhY2tncm91bmQgaXdsX2NvbW1pdF9yeG9uIHdvcmsuCi0JICovCi0KLQkqdG90YWxfZmxhZ3MgJj0gRklGX09USEVSX0JTUyB8IEZJRl9BTExNVUxUSSB8IEZJRl9QUk9NSVNDX0lOX0JTUyB8Ci0JCQlGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQyB8IEZJRl9DT05UUk9MOwotfQotCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X21hY19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlpZiAoaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkgewotCQlpd2wzOTQ1X3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKTsKKwlpZiAoaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7CisJCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKIAl9CkBAIC02ODkxLDcgKzM5ODgsNyBAQAogCX0KIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogfQogCiAjZGVmaW5lIElXTF9ERUxBWV9ORVhUX1NDQU5fQUZURVJfQVNTT0MgKEhaKjYpCkBAIC02OTAxLDIxICszOTk4LDIzIEBACiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKIAkJCQkgICAgIHUzMiBjaGFuZ2VzKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgiY2hhbmdlcyA9IDB4JVhcbiIsIGNoYW5nZXMpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiY2hhbmdlcyA9IDB4JVhcbiIsIGNoYW5nZXMpOwogCiAJaWYgKGNoYW5nZXMgJiBCU1NfQ0hBTkdFRF9FUlBfUFJFQU1CTEUpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJFUlBfUFJFQU1CTEUgJWRcbiIsCisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiRVJQX1BSRUFNQkxFICVkXG4iLAogCQkJCSAgIGJzc19jb25mLT51c2Vfc2hvcnRfcHJlYW1ibGUpOwogCQlpZiAoYnNzX2NvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZSkKIAkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyB8PSBSWE9OX0ZMR19TSE9SVF9QUkVBTUJMRV9NU0s7CiAJCWVsc2UKLQkJCXByaXYtPnN0YWdpbmdfcnhvbi5mbGFncyAmPSB+UlhPTl9GTEdfU0hPUlRfUFJFQU1CTEVfTVNLOworCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzICY9CisJCQkJflJYT05fRkxHX1NIT1JUX1BSRUFNQkxFX01TSzsKIAl9CiAKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0VSUF9DVFNfUFJPVCkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoIkVSUF9DVFMgJWRcbiIsIGJzc19jb25mLT51c2VfY3RzX3Byb3QpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgIkVSUF9DVFMgJWRcbiIsCisJCQkJICAgYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCk7CiAJCWlmIChic3NfY29uZi0+dXNlX2N0c19wcm90ICYmIChwcml2LT5iYW5kICE9IElFRUU4MDIxMV9CQU5EXzVHSFopKQogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzIHw9IFJYT05fRkxHX1RHR19QUk9URUNUX01TSzsKIAkJZWxzZQpAQCAtNjkyMyw3ICs0MDIyLDcgQEAKIAl9CiAKIAlpZiAoY2hhbmdlcyAmIEJTU19DSEFOR0VEX0FTU09DKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgiQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CiAJCS8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBhcyB0aGlzIGZ1bmN0aW9uIHNob3VsZAogCQkgKiBuZXZlciBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4gKi8KIAkJaWYgKFdBUk5fT05fT05DRShpbl9pbnRlcnJ1cHQoKSkpCkBAIC02OTMxLDEwICs0MDMwLDkgQEAKIAkJaWYgKGJzc19jb25mLT5hc3NvYykgewogCQkJcHJpdi0+YXNzb2NfaWQgPSBic3NfY29uZi0+YWlkOwogCQkJcHJpdi0+YmVhY29uX2ludCA9IGJzc19jb25mLT5iZWFjb25faW50OwotCQkJcHJpdi0+dGltZXN0YW1wMCA9IGJzc19jb25mLT50aW1lc3RhbXAgJiAweEZGRkZGRkZGOwotCQkJcHJpdi0+dGltZXN0YW1wMSA9IChic3NfY29uZi0+dGltZXN0YW1wID4+IDMyKSAmCi0JCQkJCSAgICAgMHhGRkZGRkZGRjsKKwkJCXByaXYtPnRpbWVzdGFtcCA9IGJzc19jb25mLT50aW1lc3RhbXA7CiAJCQlwcml2LT5hc3NvY19jYXBhYmlsaXR5ID0gYnNzX2NvbmYtPmFzc29jX2NhcGFiaWxpdHk7CisJCQlwcml2LT5wb3dlcl9kYXRhLmR0aW1fcGVyaW9kID0gYnNzX2NvbmYtPmR0aW1fcGVyaW9kOwogCQkJcHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgPSBqaWZmaWVzICsKIAkJCQkJSVdMX0RFTEFZX05FWFRfU0NBTl9BRlRFUl9BU1NPQzsKIAkJCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKQEAgLTY5NDIsMTQzICs0MDQwLDkxIEBACiAJCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAkJfSBlbHNlIHsKIAkJCXByaXYtPmFzc29jX2lkID0gMDsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiRElTQVNTT0MgJWRcbiIsIGJzc19jb25mLT5hc3NvYyk7CisJCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwKKwkJCQkJIkRJU0FTU09DICVkXG4iLCBic3NfY29uZi0+YXNzb2MpOwogCQl9Ci0JfSBlbHNlIGlmIChjaGFuZ2VzICYmIGl3bDM5NDVfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5hc3NvY19pZCkgewotCQkJSVdMX0RFQlVHX01BQzgwMjExKCJBc3NvY2lhdGVkIENoYW5nZXMgJWRcbiIsIGNoYW5nZXMpOworCX0gZWxzZSBpZiAoY2hhbmdlcyAmJiBpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5hc3NvY19pZCkgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsCisJCQkJCSJBc3NvY2lhdGVkIENoYW5nZXMgJWRcbiIsIGNoYW5nZXMpOwogCQkJaXdsMzk0NV9zZW5kX3J4b25fYXNzb2MocHJpdik7CiAJfQogCiB9CiAKLXN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnNzaWQsIHNpemVfdCBsZW4pCi17Ci0JaW50IHJjID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlERUNMQVJFX1NTSURfQlVGKHNzaWRfYnVmKTsKLQotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJcmMgPSAtRUlPOwotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5IG9yIGV4aXQgcGVuZGluZ1xuIik7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQkvKiB3ZSBkb24ndCBzY2hlZHVsZSBzY2FuIHdpdGhpbiBuZXh0X3NjYW5famlmZmllcyBwZXJpb2QgKi8KLQlpZiAocHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgJiYKLQkJCXRpbWVfYWZ0ZXIocHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMsIGppZmZpZXMpKSB7Ci0JCXJjID0gLUVBR0FJTjsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0KLQkvKiBpZiB3ZSBqdXN0IGZpbmlzaGVkIHNjYW4gYXNrIGZvciBkZWxheSBmb3IgYSBicm9hZGNhc3Qgc2NhbiAqLwotCWlmICgobGVuID09IDApICYmIHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICYmCi0JICAgIHRpbWVfYWZ0ZXIocHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMgKyBJV0xfREVMQVlfTkVYVF9TQ0FOLAotCQkgICAgICAgamlmZmllcykpIHsKLQkJcmMgPSAtRUFHQUlOOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCWlmIChsZW4pIHsKLQkJSVdMX0RFQlVHX1NDQU4oImRpcmVjdCBzY2FuIGZvciAlcyBbJWRdXG4gIiwKLQkJCSAgICAgICBwcmludF9zc2lkKHNzaWRfYnVmLCBzc2lkLCBsZW4pLCAoaW50KWxlbik7Ci0KLQkJcHJpdi0+b25lX2RpcmVjdF9zY2FuID0gMTsKLQkJcHJpdi0+ZGlyZWN0X3NzaWRfbGVuID0gKHU4KQotCQkgICAgbWluKCh1OCkgbGVuLCAodTgpIElXX0VTU0lEX01BWF9TSVpFKTsKLQkJbWVtY3B5KHByaXYtPmRpcmVjdF9zc2lkLCBzc2lkLCBwcml2LT5kaXJlY3Rfc3NpZF9sZW4pOwotCX0gZWxzZQotCQlwcml2LT5vbmVfZGlyZWN0X3NjYW4gPSAwOwotCi0JcmMgPSBpd2wzOTQ1X3NjYW5faW5pdGlhdGUocHJpdik7Ci0KLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKLQotb3V0X3VubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgZW51bSBzZXRfa2V5X2NtZCBjbWQsCi0JCQkgICBjb25zdCB1OCAqbG9jYWxfYWRkciwgY29uc3QgdTggKmFkZHIsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7Ci0JaW50IHJjID0gMDsKLQl1OCBzdGFfaWQ7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CisJY29uc3QgdTggKmFkZHI7CisJaW50IHJldCA9IDA7CisJdTggc3RhX2lkID0gSVdMX0lOVkFMSURfU1RBVElPTjsKKwl1OCBzdGF0aWNfa2V5OwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAoIWl3bDM5NDVfcGFyYW1faHdjcnlwdG8pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIGh3Y3J5cHRvIGRpc2FibGVkXG4iKTsKKwlpZiAoaXdsMzk0NV9tb2RfcGFyYW1zLnN3X2NyeXB0bykgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gaHdjcnlwdG8gZGlzYWJsZWRcbiIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JaWYgKGlzX3plcm9fZXRoZXJfYWRkcihhZGRyKSkKLQkJLyogb25seSBzdXBwb3J0IHBhaXJ3aXNlIGtleXMgKi8KLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWFkZHIgPSBzdGEgPyBzdGEtPmFkZHIgOiBpd2xfYmNhc3RfYWRkcjsKKwlzdGF0aWNfa2V5ID0gIWl3bF9pc19hc3NvY2lhdGVkKHByaXYpOwogCi0Jc3RhX2lkID0gaXdsMzk0NV9od19maW5kX3N0YXRpb24ocHJpdiwgYWRkcik7Ci0JaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSAlcE0gbm90IGluIHN0YXRpb24gbWFwLlxuIiwKLQkJCQkgICBhZGRyKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFzdGF0aWNfa2V5KSB7CisJCXN0YV9pZCA9IGl3bDM5NDVfaHdfZmluZF9zdGF0aW9uKHByaXYsIGFkZHIpOworCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKKwkJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSAlcE1ub3QgaW4gc3RhdGlvbiBtYXAuXG4iLAorCQkJCQkgICAgYWRkcik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCX0KIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQotCWl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOworCWl3bF9zY2FuX2NhbmNlbF90aW1lb3V0KHByaXYsIDEwMCk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgIFNFVF9LRVk6Ci0JCXJjID0gaXdsMzk0NV91cGRhdGVfc3RhX2tleV9pbmZvKHByaXYsIGtleSwgc3RhX2lkKTsKLQkJaWYgKCFyYykgewotCQkJaXdsMzk0NV9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAxKTsKLQkJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7Ci0JCQlrZXktPmh3X2tleV9pZHggPSBzdGFfaWQ7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoInNldF9rZXkgc3VjY2VzcywgdXNpbmcgaHdjcnlwdG9cbiIpOwotCQkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVY7Ci0JCX0KKwljYXNlIFNFVF9LRVk6CisJCWlmIChzdGF0aWNfa2V5KQorCQkJcmV0ID0gaXdsMzk0NV9zZXRfc3RhdGljX2tleShwcml2LCBrZXkpOworCQllbHNlCisJCQlyZXQgPSBpd2wzOTQ1X3NldF9keW5hbWljX2tleShwcml2LCBrZXksIHN0YV9pZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW5hYmxlIGh3Y3J5cHRvIGtleVxuIik7CiAJCWJyZWFrOwogCWNhc2UgRElTQUJMRV9LRVk6Ci0JCXJjID0gaXdsMzk0NV9jbGVhcl9zdGFfa2V5X2luZm8ocHJpdiwgc3RhX2lkKTsKLQkJaWYgKCFyYykgewotCQkJaXdsMzk0NV9zZXRfcnhvbl9od2NyeXB0byhwcml2LCAwKTsKLQkJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7Ci0JCQlJV0xfREVCVUdfTUFDODAyMTEoImRpc2FibGUgaHdjcnlwdG8ga2V5XG4iKTsKLQkJfQorCQlpZiAoc3RhdGljX2tleSkKKwkJCXJldCA9IGl3bDM5NDVfcmVtb3ZlX3N0YXRpY19rZXkocHJpdik7CisJCWVsc2UKKwkJCXJldCA9IGl3bDM5NDVfY2xlYXJfc3RhX2tleV9pbmZvKHByaXYsIHN0YV9pZCk7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZGlzYWJsZSBod2NyeXB0byBrZXlcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyYyA9IC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZVxuIik7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBpd2wzOTQ1X21hY19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCiAJCQkgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBxOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmIChxdWV1ZSA+PSBBQ19OVU0pIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIHF1ZXVlID49IEFDX05VTSAlZFxuIiwgcXVldWUpOworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gcXVldWUgPj0gQUNfTlVNICVkXG4iLCBxdWV1ZSk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNzA5OSwyOSArNDE0NSwyOSBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQlpd2wzOTQ1X2FjdGl2YXRlX3Fvcyhwcml2LCAxKTsKLQllbHNlIGlmIChwcml2LT5hc3NvY19pZCAmJiBpd2wzOTQ1X2lzX2Fzc29jaWF0ZWQocHJpdikpCi0JCWl3bDM5NDVfYWN0aXZhdGVfcW9zKHByaXYsIDApOworCQlpd2xfYWN0aXZhdGVfcW9zKHByaXYsIDEpOworCWVsc2UgaWYgKHByaXYtPmFzc29jX2lkICYmIGl3bF9pc19hc3NvY2lhdGVkKHByaXYpKQorCQlpd2xfYWN0aXZhdGVfcW9zKHByaXYsIDApOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpd2wzOTQ1X21hY19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCBpLCBhdmFpbDsKLQlzdHJ1Y3QgaXdsMzk0NV90eF9xdWV1ZSAqdHhxOwotCXN0cnVjdCBpd2wzOTQ1X3F1ZXVlICpxOworCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cTsKKwlzdHJ1Y3QgaXdsX3F1ZXVlICpxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAotCWlmICghaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gUkYgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC03MTMwLDcgKzQxNzYsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBBQ19OVU07IGkrKykgewogCQl0eHEgPSAmcHJpdi0+dHhxW2ldOwogCQlxID0gJnR4cS0+cTsKLQkJYXZhaWwgPSBpd2wzOTQ1X3F1ZXVlX3NwYWNlKHEpOworCQlhdmFpbCA9IGl3bF9xdWV1ZV9zcGFjZShxKTsKIAogCQlzdGF0c1tpXS5sZW4gPSBxLT5uX3dpbmRvdyAtIGF2YWlsOwogCQlzdGF0c1tpXS5saW1pdCA9IHEtPm5fd2luZG93IC0gcS0+aGlnaF9tYXJrOwpAQCAtNzEzOSwzNCArNDE4NSwyNCBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGl3bDM5NDVfbWFjX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9sb3dfbGV2ZWxfc3RhdHMgKnN0YXRzKQotewotCUlXTF9ERUJVR19NQUM4MDIxMSgiZW50ZXJcbiIpOwotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfbWFjX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlJV0xfREVCVUdfTUFDODAyMTEoImVudGVyXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyXG4iKTsKIAotCWl3bDM5NDVfcmVzZXRfcW9zKHByaXYpOworCWl3bF9yZXNldF9xb3MocHJpdik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXByaXYtPmFzc29jX2lkID0gMDsKIAlwcml2LT5hc3NvY19jYXBhYmlsaXR5ID0gMDsKLQlwcml2LT5jYWxsX3Bvc3RfYXNzb2NfZnJvbV9iZWFjb24gPSAwOwogCiAJLyogbmV3IGFzc29jaWF0aW9uIGdldCByaWQgb2YgaWJzcyBiZWFjb24gc2tiICovCiAJaWYgKHByaXYtPmlic3NfYmVhY29uKQpAQCAtNzE3NSwxNSArNDIxMSwxNCBAQAogCXByaXYtPmlic3NfYmVhY29uID0gTlVMTDsKIAogCXByaXYtPmJlYWNvbl9pbnQgPSBwcml2LT5ody0+Y29uZi5iZWFjb25faW50OwotCXByaXYtPnRpbWVzdGFtcDEgPSAwOwotCXByaXYtPnRpbWVzdGFtcDAgPSAwOworCXByaXYtPnRpbWVzdGFtcCA9IDA7CiAJaWYgKChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQogCQlwcml2LT5iZWFjb25faW50ID0gMDsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWlmICghaXdsMzk0NV9pc19yZWFkeV9yZihwcml2KSkgewotCQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlIC0gbm90IHJlYWR5XG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJCXJldHVybjsKIAl9CkBAIC03MTkyLDcgKzQyMjcsNyBAQAogCSAqIGNsZWFyIFJYT05fRklMVEVSX0FTU09DX01TSyBiaXQKIAkqLwogCWlmIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7Ci0JCWl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOworCQlpd2xfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApOwogCQlwcml2LT5zdGFnaW5nX3J4b24uZmlsdGVyX2ZsYWdzICY9IH5SWE9OX0ZJTFRFUl9BU1NPQ19NU0s7CiAJCWl3bDM5NDVfY29tbWl0X3J4b24ocHJpdik7CiAJfQpAQCAtNzIwMCwzMyArNDIzNSwzNCBAQAogCS8qIFBlciBtYWM4MDIxMS5oOiBUaGlzIGlzIG9ubHkgdXNlZCBpbiBJQlNTIG1vZGUuLi4gKi8KIAlpZiAocHJpdi0+aXdfbW9kZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCi0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgaW4gSUJTU1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgaW4gSUJTU1xuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm47CiAJfQogCi0JaXdsMzk0NV9zZXRfcmF0ZShwcml2KTsKKwlpd2xfc2V0X3JhdGUocHJpdik7CiAKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAotCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmVcbiIpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmVcbiIpOwogCiB9CiAKIHN0YXRpYyBpbnQgaXdsMzk0NV9tYWNfYmVhY29uX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlfX2xlNjQgdGltZXN0YW1wOwogCi0JSVdMX0RFQlVHX01BQzgwMjExKCJlbnRlclxuIik7CisJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJlbnRlclxuIik7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKCJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CisJaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCWlmIChwcml2LT5pd19tb2RlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCUlXTF9ERUJVR19NQUM4MDIxMSgibGVhdmUgLSBub3QgSUJTU1xuIik7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgSUJTU1xuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNzIzOCwxMSArNDI3NCwxMyBAQAogCXByaXYtPmlic3NfYmVhY29uID0gc2tiOwogCiAJcHJpdi0+YXNzb2NfaWQgPSAwOworCXRpbWVzdGFtcCA9ICgoc3RydWN0IGllZWU4MDIxMV9tZ210ICopc2tiLT5kYXRhKS0+dS5iZWFjb24udGltZXN0YW1wOworCXByaXYtPnRpbWVzdGFtcCA9IGxlNjRfdG9fY3B1KHRpbWVzdGFtcCk7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEoImxlYXZlXG4iKTsKKwlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImxlYXZlXG4iKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpd2wzOTQ1X3Jlc2V0X3Fvcyhwcml2KTsKKwlpd2xfcmVzZXRfcW9zKHByaXYpOwogCiAJaXdsMzk0NV9wb3N0X2Fzc29jaWF0ZShwcml2KTsKIApAQCAtNzI1Niw3ICs0Mjk0LDcgQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGFkZHMgYSBuZXcgYXR0cmlidXRlIHRvIHRoZSBzeXNmcyByZXByZXNlbnRhdGlvbgpAQCAtNzI2NSwzOCArNDMwMyw0MSBAQAogICoKICAqIFNlZSB0aGUgbGV2ZWwgZGVmaW5pdGlvbnMgaW4gaXdsIGZvciBkZXRhaWxzLgogICovCi0KLXN0YXRpYyBzc2l6ZV90IHNob3dfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZV9kcml2ZXIgKmQsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4WFxuIiwgaXdsMzk0NV9kZWJ1Z19sZXZlbCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZC0+ZHJpdmVyX2RhdGE7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOFhcbiIsIHByaXYtPmRlYnVnX2xldmVsKTsKIH0KLXN0YXRpYyBzc2l6ZV90IHN0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkLAorc3RhdGljIHNzaXplX3Qgc3RvcmVfZGVidWdfbGV2ZWwoc3RydWN0IGRldmljZSAqZCwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JY2hhciAqcCA9IChjaGFyICopYnVmOwotCXUzMiB2YWw7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZC0+ZHJpdmVyX2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKIAotCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKHAsICZwLCAwKTsKLQlpZiAocCA9PSBidWYpCi0JCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJICAgICAgICI6ICVzIGlzIG5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOworCWlmIChyZXQpCisJCUlXTF9JTkZPKHByaXYsICIlcyBpcyBub3QgaW4gaGV4IG9yIGRlY2ltYWwgZm9ybS5cbiIsIGJ1Zik7CiAJZWxzZQotCQlpd2wzOTQ1X2RlYnVnX2xldmVsID0gdmFsOworCQlwcml2LT5kZWJ1Z19sZXZlbCA9IHZhbDsKIAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgRFJJVkVSX0FUVFIoZGVidWdfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkgICBzaG93X2RlYnVnX2xldmVsLCBzdG9yZV9kZWJ1Z19sZXZlbCk7CitzdGF0aWMgREVWSUNFX0FUVFIoZGVidWdfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19kZWJ1Z19sZXZlbCwgc3RvcmVfZGVidWdfbGV2ZWwpOwogCi0jZW5kaWYgLyogQ09ORklHX0lXTDM5NDVfREVCVUcgKi8KKyNlbmRpZiAvKiBDT05GSUdfSVdMV0lGSV9ERUJVRyAqLwogCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBlcmF0dXJlKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CiAKLQlpZiAoIWl3bDM5NDVfaXNfYWxpdmUocHJpdikpCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGl3bDM5NDVfaHdfZ2V0X3RlbXBlcmF0dXJlKHByaXYpKTsKQEAgLTczMDcsMjIgKzQzNDgsMjEgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdHhfcG93ZXIoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+dXNlcl90eHBvd2VyX2xpbWl0KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHByaXYtPnR4X3Bvd2VyX3VzZXJfbG10KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfdHhfcG93ZXIoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKIAl1MzIgdmFsOwogCiAJdmFsID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDEwKTsKIAlpZiAocCA9PSBidWYpCi0JCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJICAgICAgICI6ICVzIGlzIG5vdCBpbiBkZWNpbWFsIGZvcm0uXG4iLCBidWYpOworCQlJV0xfSU5GTyhwcml2LCAiOiAlcyBpcyBub3QgaW4gZGVjaW1hbCBmb3JtLlxuIiwgYnVmKTsKIAllbHNlCiAJCWl3bDM5NDVfaHdfcmVnX3NldF90eHBvd2VyKHByaXYsIHZhbCk7CiAKQEAgLTczMzQsNyArNDM3NCw3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2ZsYWdzKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDRYXG4iLCBwcml2LT5hY3RpdmVfcnhvbi5mbGFncyk7CiB9CkBAIC03MzQzLDE2ICs0MzgzLDE2IEBACiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAl1MzIgZmxhZ3MgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCWlmIChsZTMyX3RvX2NwdShwcml2LT5zdGFnaW5nX3J4b24uZmxhZ3MpICE9IGZsYWdzKSB7CiAJCS8qIENhbmNlbCBhbnkgY3VycmVudGx5IHJ1bm5pbmcgc2NhbnMuLi4gKi8KLQkJaWYgKGl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQotCQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOworCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKKwkJCUlXTF9XQVJOKHByaXYsICJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKIAkJZWxzZSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0dGluZyByeG9uLmZsYWdzID0gMHglMDRYXG4iLAorCQkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkNvbW1pdHRpbmcgcnhvbi5mbGFncyA9IDB4JTA0WFxuIiwKIAkJCQkgICAgICAgZmxhZ3MpOwogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwogCQkJaXdsMzk0NV9jb21taXRfcnhvbihwcml2KTsKQEAgLTczNjgsNyArNDQwOCw3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2ZpbHRlcl9mbGFncyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA0WFxuIiwKIAkJbGUzMl90b19jcHUocHJpdi0+YWN0aXZlX3J4b24uZmlsdGVyX2ZsYWdzKSk7CkBAIC03Mzc4LDE2ICs0NDE4LDE2IEBACiAJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKIAl1MzIgZmlsdGVyX2ZsYWdzID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAobGUzMl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncykgIT0gZmlsdGVyX2ZsYWdzKSB7CiAJCS8qIENhbmNlbCBhbnkgY3VycmVudGx5IHJ1bm5pbmcgc2NhbnMuLi4gKi8KLQkJaWYgKGl3bDM5NDVfc2Nhbl9jYW5jZWxfdGltZW91dChwcml2LCAxMDApKQotCQkJSVdMX1dBUk5JTkcoIkNvdWxkIG5vdCBjYW5jZWwgc2Nhbi5cbiIpOworCQlpZiAoaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQocHJpdiwgMTAwKSkKKwkJCUlXTF9XQVJOKHByaXYsICJDb3VsZCBub3QgY2FuY2VsIHNjYW4uXG4iKTsKIAkJZWxzZSB7Ci0JCQlJV0xfREVCVUdfSU5GTygiQ29tbWl0dGluZyByeG9uLmZpbHRlcl9mbGFncyA9ICIKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDb21taXR0aW5nIHJ4b24uZmlsdGVyX2ZsYWdzID0gIgogCQkJCSAgICAgICAiMHglMDRYXG4iLCBmaWx0ZXJfZmxhZ3MpOwogCQkJcHJpdi0+c3RhZ2luZ19yeG9uLmZpbHRlcl9mbGFncyA9CiAJCQkJY3B1X3RvX2xlMzIoZmlsdGVyX2ZsYWdzKTsKQEAgLTc0MDcsOCArNDQ0Nyw4IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X21lYXN1cmVtZW50KHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwotCXN0cnVjdCBpd2wzOTQ1X3NwZWN0cnVtX25vdGlmaWNhdGlvbiBtZWFzdXJlX3JlcG9ydDsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9zcGVjdHJ1bV9ub3RpZmljYXRpb24gbWVhc3VyZV9yZXBvcnQ7CiAJdTMyIHNpemUgPSBzaXplb2YobWVhc3VyZV9yZXBvcnQpLCBsZW4gPSAwLCBvZnMgPSAwOwogCXU4ICpkYXRhID0gKHU4ICopJm1lYXN1cmVfcmVwb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NDQwLDcgKzQ0ODAsNyBAQAogCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgcGFyYW1zID0gewogCQkuY2hhbm5lbCA9IGxlMTZfdG9fY3B1KHByaXYtPmFjdGl2ZV9yeG9uLmNoYW5uZWwpLAogCQkuc3RhcnRfdGltZSA9IGNwdV90b19sZTY0KHByaXYtPmxhc3RfdHNmKSwKQEAgLTc0NjQsNyArNDUwNCw3IEBACiAJCQl0eXBlID0gc2ltcGxlX3N0cnRvdWwocCArIDEsIE5VTEwsIDApOwogCX0KIAotCUlXTF9ERUJVR19JTkZPKCJJbnZva2luZyBtZWFzdXJlbWVudCBvZiB0eXBlICVkIG9uICIKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiSW52b2tpbmcgbWVhc3VyZW1lbnQgb2YgdHlwZSAlZCBvbiAiCiAJCSAgICAgICAiY2hhbm5lbCAlZCAoZm9yICclcycpXG4iLCB0eXBlLCBwYXJhbXMuY2hhbm5lbCwgYnVmKTsKIAlpd2wzOTQ1X2dldF9tZWFzdXJlbWVudChwcml2LCAmcGFyYW1zLCB0eXBlKTsKIApAQCAtNzQ3OSw3ICs0NTE5LDcgQEAKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAogCXByaXYtPnJldHJ5X3JhdGUgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDApOwogCWlmIChwcml2LT5yZXRyeV9yYXRlIDw9IDApCkBAIC03NDkxLDUwICs0NTMxLDcyIEBACiBzdGF0aWMgc3NpemVfdCBzaG93X3JldHJ5X3JhdGUoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkIiwgcHJpdi0+cmV0cnlfcmF0ZSk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihyZXRyeV9yYXRlLCBTX0lXVVNSIHwgU19JUlVTUiwgc2hvd19yZXRyeV9yYXRlLAogCQkgICBzdG9yZV9yZXRyeV9yYXRlKTsKIAorCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9wb3dlcl9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAogCQkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgcmM7Ci0JaW50IG1vZGU7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBtb2RlOwogCi0JbW9kZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlpZiAoIWl3bDM5NDVfaXNfcmVhZHkocHJpdikpIHsKLQkJcmMgPSAtRUFHQUlOOworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZtb2RlKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXJldCA9IGl3bF9wb3dlcl9zZXRfdXNlcl9tb2RlKHByaXYsIG1vZGUpOworCWlmIChyZXQpIHsKKwkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJmYWlsZWQgc2V0dGluZyBwb3dlciBtb2RlLlxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQotCWlmICgobW9kZSA8IDEpIHx8IChtb2RlID4gSVdMX1BPV0VSX0xJTUlUKSB8fCAobW9kZSA9PSBJV0xfUE9XRVJfQUMpKQotCQltb2RlID0gSVdMX1BPV0VSX0FDOwotCWVsc2UKLQkJbW9kZSB8PSBJV0xfUE9XRVJfRU5BQkxFRDsKLQotCWlmIChtb2RlICE9IHByaXYtPnBvd2VyX21vZGUpIHsKLQkJcmMgPSBpd2wzOTQ1X3NlbmRfcG93ZXJfbW9kZShwcml2LCBJV0xfUE9XRVJfTEVWRUwobW9kZSkpOwotCQlpZiAocmMpIHsKLQkJCUlXTF9ERUJVR19NQUM4MDIxMSgiZmFpbGVkIHNldHRpbmcgcG93ZXIgbW9kZS5cbiIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJcHJpdi0+cG93ZXJfbW9kZSA9IG1vZGU7Ci0JfQotCi0JcmMgPSBjb3VudDsKKwlyZXQgPSBjb3VudDsKIAogIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2hvd19wb3dlcl9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCWludCBtb2RlID0gcHJpdi0+cG93ZXJfZGF0YS51c2VyX3Bvd2VyX3NldHRpbmc7CisJaW50IHN5c3RlbSA9IHByaXYtPnBvd2VyX2RhdGEuc3lzdGVtX3Bvd2VyX3NldHRpbmc7CisJaW50IGxldmVsID0gcHJpdi0+cG93ZXJfZGF0YS5wb3dlcl9tb2RlOworCWNoYXIgKnAgPSBidWY7CisKKwlzd2l0Y2ggKHN5c3RlbSkgeworCWNhc2UgSVdMX1BPV0VSX1NZU19BVVRPOgorCQlwICs9IHNwcmludGYocCwgIlNZU1RFTTphdXRvIik7CisJCWJyZWFrOworCWNhc2UgSVdMX1BPV0VSX1NZU19BQzoKKwkJcCArPSBzcHJpbnRmKHAsICJTWVNURU06YWMiKTsKKwkJYnJlYWs7CisJY2FzZSBJV0xfUE9XRVJfU1lTX0JBVFRFUlk6CisJCXAgKz0gc3ByaW50ZihwLCAiU1lTVEVNOmJhdHRlcnkiKTsKKwkJYnJlYWs7CisJfQorCisJcCArPSBzcHJpbnRmKHAsICJcdE1PREU6JXMiLCAobW9kZSA8IElXTF9QT1dFUl9BVVRPKSA/CisJCQkiZml4ZWQiIDogImF1dG8iKTsKKwlwICs9IHNwcmludGYocCwgIlx0SU5ERVg6JWQiLCBsZXZlbCk7CisJcCArPSBzcHJpbnRmKHAsICJcbiIpOworCXJldHVybiBwIC0gYnVmICsgMTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBvd2VyX2xldmVsLCBTX0lXVVNSIHwgU19JUlVTUiwKKwkJICAgc2hvd19wb3dlcl9sZXZlbCwgc3RvcmVfcG93ZXJfbGV2ZWwpOworCiAjZGVmaW5lIE1BWF9XWF9TVFJJTkcgODAKIAogLyogVmFsdWVzIGFyZSBpbiBtaWNyb3NlY29uZCAqLwpAQCAtNzU1Myw0MSArNDYxNSw2IEBACiAJMTAwMDAwMAogfTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19wb3dlcl9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkLAotCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLQlpbnQgbGV2ZWwgPSBJV0xfUE9XRVJfTEVWRUwocHJpdi0+cG93ZXJfbW9kZSk7Ci0JY2hhciAqcCA9IGJ1ZjsKLQotCXAgKz0gc3ByaW50ZihwLCAiJWQgIiwgbGV2ZWwpOwotCXN3aXRjaCAobGV2ZWwpIHsKLQljYXNlIElXTF9QT1dFUl9NT0RFX0NBTToKLQljYXNlIElXTF9QT1dFUl9BQzoKLQkJcCArPSBzcHJpbnRmKHAsICIoQUMpIik7Ci0JCWJyZWFrOwotCWNhc2UgSVdMX1BPV0VSX0JBVFRFUlk6Ci0JCXAgKz0gc3ByaW50ZihwLCAiKEJBVFRFUlkpIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXAgKz0gc3ByaW50ZihwLAotCQkJICAgICAiKFRpbWVvdXQgJWRtcywgUGVyaW9kICVkbXMpIiwKLQkJCSAgICAgdGltZW91dF9kdXJhdGlvbltsZXZlbCAtIDFdIC8gMTAwMCwKLQkJCSAgICAgcGVyaW9kX2R1cmF0aW9uW2xldmVsIC0gMV0gLyAxMDAwKTsKLQl9Ci0KLQlpZiAoIShwcml2LT5wb3dlcl9tb2RlICYgSVdMX1BPV0VSX0VOQUJMRUQpKQotCQlwICs9IHNwcmludGYocCwgIiBPRkZcbiIpOwotCWVsc2UKLQkJcCArPSBzcHJpbnRmKHAsICIgXG4iKTsKLQotCXJldHVybiBwIC0gYnVmICsgMTsKLQotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfbGV2ZWwsIFNfSVdVU1IgfCBTX0lSVVNSLCBzaG93X3Bvd2VyX2xldmVsLAotCQkgICBzdG9yZV9wb3dlcl9sZXZlbCk7Ci0KIHN0YXRpYyBzc2l6ZV90IHNob3dfY2hhbm5lbHMoc3RydWN0IGRldmljZSAqZCwKIAkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTc2MDAsMTcgKzQ2MjcsMTcgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfc3RhdGlzdGljcyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZCk7CiAJdTMyIHNpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfbm90aWZfc3RhdGlzdGljcyk7CiAJdTMyIGxlbiA9IDAsIG9mcyA9IDA7Ci0JdTggKmRhdGEgPSAodTggKikmcHJpdi0+c3RhdGlzdGljczsKKwl1OCAqZGF0YSA9ICh1OCAqKSZwcml2LT5zdGF0aXN0aWNzXzM5OwogCWludCByYyA9IDA7CiAKLQlpZiAoIWl3bDM5NDVfaXNfYWxpdmUocHJpdikpCisJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCXJjID0gaXdsMzk0NV9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2KTsKKwlyYyA9IGl3bF9zZW5kX3N0YXRpc3RpY3NfcmVxdWVzdChwcml2LCAwKTsKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAogCWlmIChyYykgewpAQCAtNzYzOCwzNCArNDY2NSwzNCBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19hbnRlbm5hKHN0cnVjdCBkZXZpY2UgKmQsCiAJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGQpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAotCWlmICghaXdsMzk0NV9pc19hbGl2ZShwcml2KSkKKwlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcHJpdi0+YW50ZW5uYSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGl3bDM5NDVfbW9kX3BhcmFtcy5hbnRlbm5hKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfYW50ZW5uYShzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CisJc3RydWN0IGl3bF9wcml2ICpwcml2IF9fbWF5YmVfdW51c2VkID0gZGV2X2dldF9kcnZkYXRhKGQpOwogCWludCBhbnQ7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKIAogCWlmIChjb3VudCA9PSAwKQogCQlyZXR1cm4gMDsKIAogCWlmIChzc2NhbmYoYnVmLCAiJTFpIiwgJmFudCkgIT0gMSkgewotCQlJV0xfREVCVUdfSU5GTygibm90IGluIGhleCBvciBkZWNpbWFsIGZvcm0uXG4iKTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIm5vdCBpbiBoZXggb3IgZGVjaW1hbCBmb3JtLlxuIik7CiAJCXJldHVybiBjb3VudDsKIAl9CiAKIAlpZiAoKGFudCA+PSAwKSAmJiAoYW50IDw9IDIpKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJTZXR0aW5nIGFudGVubmEgc2VsZWN0IHRvICVkLlxuIiwgYW50KTsKLQkJcHJpdi0+YW50ZW5uYSA9IChlbnVtIGl3bDM5NDVfYW50ZW5uYSlhbnQ7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZXR0aW5nIGFudGVubmEgc2VsZWN0IHRvICVkLlxuIiwgYW50KTsKKwkJaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEgPSAoZW51bSBpd2wzOTQ1X2FudGVubmEpYW50OwogCX0gZWxzZQotCQlJV0xfREVCVUdfSU5GTygiQmFkIGFudGVubmEgc2VsZWN0IHZhbHVlICVkLlxuIiwgYW50KTsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIkJhZCBhbnRlbm5hIHNlbGVjdCB2YWx1ZSAlZC5cbiIsIGFudCk7CiAKIAogCXJldHVybiBjb3VudDsKQEAgLTc2NzYsOCArNDcwMyw4IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkLAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKilkLT5kcml2ZXJfZGF0YTsKLQlpZiAoIWl3bDM5NDVfaXNfYWxpdmUocHJpdikpCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhOworCWlmICghaXdsX2lzX2FsaXZlKHByaXYpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOHhcbiIsIChpbnQpcHJpdi0+c3RhdHVzKTsKIH0KQEAgLTc2OTEsNyArNDcxOCw3IEBACiAJY2hhciAqcCA9IChjaGFyICopYnVmOwogCiAJaWYgKHBbMF0gPT0gJzEnKQotCQlpd2wzOTQ1X2R1bXBfbmljX2Vycm9yX2xvZygoc3RydWN0IGl3bDM5NDVfcHJpdiAqKWQtPmRyaXZlcl9kYXRhKTsKKwkJaXdsMzk0NV9kdW1wX25pY19lcnJvcl9sb2coKHN0cnVjdCBpd2xfcHJpdiAqKWQtPmRyaXZlcl9kYXRhKTsKIAogCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOwogfQpAQCAtNzcwNSw3ICs0NzMyLDcgQEAKIAljaGFyICpwID0gKGNoYXIgKilidWY7CiAKIAlpZiAocFswXSA9PSAnMScpCi0JCWl3bDM5NDVfZHVtcF9uaWNfZXZlbnRfbG9nKChzdHJ1Y3QgaXdsMzk0NV9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOworCQlpd2wzOTQ1X2R1bXBfbmljX2V2ZW50X2xvZygoc3RydWN0IGl3bF9wcml2ICopZC0+ZHJpdmVyX2RhdGEpOwogCiAJcmV0dXJuIHN0cm5sZW4oYnVmLCBjb3VudCk7CiB9CkBAIC03NzE4LDIzICs0NzQ1LDI0IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3NldHVwX2RlZmVycmVkX3dvcmsoc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGl3bDM5NDVfc2V0dXBfZGVmZXJyZWRfd29yayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JcHJpdi0+d29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZShEUlZfTkFNRSk7CisJcHJpdi0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoRFJWX05BTUUpOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIAogCUlOSVRfV09SSygmcHJpdi0+dXAsIGl3bDM5NDVfYmdfdXApOwogCUlOSVRfV09SSygmcHJpdi0+cmVzdGFydCwgaXdsMzk0NV9iZ19yZXN0YXJ0KTsKIAlJTklUX1dPUksoJnByaXYtPnJ4X3JlcGxlbmlzaCwgaXdsMzk0NV9iZ19yeF9yZXBsZW5pc2gpOwotCUlOSVRfV09SSygmcHJpdi0+c2Nhbl9jb21wbGV0ZWQsIGl3bDM5NDVfYmdfc2Nhbl9jb21wbGV0ZWQpOwotCUlOSVRfV09SSygmcHJpdi0+cmVxdWVzdF9zY2FuLCBpd2wzOTQ1X2JnX3JlcXVlc3Rfc2Nhbik7Ci0JSU5JVF9XT1JLKCZwcml2LT5hYm9ydF9zY2FuLCBpd2wzOTQ1X2JnX2Fib3J0X3NjYW4pOwotCUlOSVRfV09SSygmcHJpdi0+cmZfa2lsbCwgaXdsMzk0NV9iZ19yZl9raWxsKTsKKwlJTklUX1dPUksoJnByaXYtPnJmX2tpbGwsIGl3bF9iZ19yZl9raWxsKTsKIAlJTklUX1dPUksoJnByaXYtPmJlYWNvbl91cGRhdGUsIGl3bDM5NDVfYmdfYmVhY29uX3VwZGF0ZSk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmluaXRfYWxpdmVfc3RhcnQsIGl3bDM5NDVfYmdfaW5pdF9hbGl2ZV9zdGFydCk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmFsaXZlX3N0YXJ0LCBpd2wzOTQ1X2JnX2FsaXZlX3N0YXJ0KTsKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+c2Nhbl9jaGVjaywgaXdsMzk0NV9iZ19zY2FuX2NoZWNrKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cmZraWxsX3BvbGwsIGl3bDM5NDVfcmZraWxsX3BvbGwpOworCUlOSVRfV09SSygmcHJpdi0+c2Nhbl9jb21wbGV0ZWQsIGl3bF9iZ19zY2FuX2NvbXBsZXRlZCk7CisJSU5JVF9XT1JLKCZwcml2LT5yZXF1ZXN0X3NjYW4sIGl3bDM5NDVfYmdfcmVxdWVzdF9zY2FuKTsKKwlJTklUX1dPUksoJnByaXYtPmFib3J0X3NjYW4sIGl3bF9iZ19hYm9ydF9zY2FuKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+c2Nhbl9jaGVjaywgaXdsX2JnX3NjYW5fY2hlY2spOwogCiAJaXdsMzk0NV9od19zZXR1cF9kZWZlcnJlZF93b3JrKHByaXYpOwogCkBAIC03NzQyLDcgKzQ3NzAsNyBAQAogCQkgICAgIGl3bDM5NDVfaXJxX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKXByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCitzdGF0aWMgdm9pZCBpd2wzOTQ1X2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpd2wzOTQ1X2h3X2NhbmNlbF9kZWZlcnJlZF93b3JrKHByaXYpOwogCkBAIC03NzY4LDcgKzQ3OTYsOSBAQAogCSZkZXZfYXR0cl9zdGF0dXMuYXR0ciwKIAkmZGV2X2F0dHJfdGVtcGVyYXR1cmUuYXR0ciwKIAkmZGV2X2F0dHJfdHhfcG93ZXIuYXR0ciwKLQorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCisJJmRldl9hdHRyX2RlYnVnX2xldmVsLmF0dHIsCisjZW5kaWYKIAlOVUxMCiB9OwogCkBAIC03Nzg1LDgzICs0ODE1LDE3OSBAQAogCS5yZW1vdmVfaW50ZXJmYWNlID0gaXdsMzk0NV9tYWNfcmVtb3ZlX2ludGVyZmFjZSwKIAkuY29uZmlnID0gaXdsMzk0NV9tYWNfY29uZmlnLAogCS5jb25maWdfaW50ZXJmYWNlID0gaXdsMzk0NV9tYWNfY29uZmlnX2ludGVyZmFjZSwKLQkuY29uZmlndXJlX2ZpbHRlciA9IGl3bDM5NDVfY29uZmlndXJlX2ZpbHRlciwKKwkuY29uZmlndXJlX2ZpbHRlciA9IGl3bF9jb25maWd1cmVfZmlsdGVyLAogCS5zZXRfa2V5ID0gaXdsMzk0NV9tYWNfc2V0X2tleSwKLQkuZ2V0X3N0YXRzID0gaXdsMzk0NV9tYWNfZ2V0X3N0YXRzLAogCS5nZXRfdHhfc3RhdHMgPSBpd2wzOTQ1X21hY19nZXRfdHhfc3RhdHMsCiAJLmNvbmZfdHggPSBpd2wzOTQ1X21hY19jb25mX3R4LAogCS5yZXNldF90c2YgPSBpd2wzOTQ1X21hY19yZXNldF90c2YsCiAJLmJzc19pbmZvX2NoYW5nZWQgPSBpd2wzOTQ1X2Jzc19pbmZvX2NoYW5nZWQsCi0JLmh3X3NjYW4gPSBpd2wzOTQ1X21hY19od19zY2FuCisJLmh3X3NjYW4gPSBpd2xfbWFjX2h3X3NjYW4KIH07CiAKK3N0YXRpYyBpbnQgaXdsMzk0NV9pbml0X2RydihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbSA9IChzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKilwcml2LT5lZXByb207CisKKwlwcml2LT5yZXRyeV9yYXRlID0gMTsKKwlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnBvd2VyX2RhdGEubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YV9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aGNtZF9sb2NrKTsKKworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7CisKKwltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CisKKwkvKiBDbGVhciB0aGUgZHJpdmVyJ3MgKG5vdCBkZXZpY2Uncykgc3RhdGlvbiB0YWJsZSAqLworCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CisKKwlwcml2LT5kYXRhX3JldHJ5X2xpbWl0ID0gLTE7CisJcHJpdi0+aWVlZV9jaGFubmVscyA9IE5VTEw7CisJcHJpdi0+aWVlZV9yYXRlcyA9IE5VTEw7CisJcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisKKwlwcml2LT5pd19tb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKworCWl3bF9yZXNldF9xb3MocHJpdik7CisKKwlwcml2LT5xb3NfZGF0YS5xb3NfYWN0aXZlID0gMDsKKwlwcml2LT5xb3NfZGF0YS5xb3NfY2FwLnZhbCA9IDA7CisKKwlwcml2LT5yYXRlc19tYXNrID0gSVdMX1JBVEVTX01BU0s7CisJLyogSWYgcG93ZXIgbWFuYWdlbWVudCBpcyB0dXJuZWQgb24sIGRlZmF1bHQgdG8gQ0FNIG1vZGUgKi8KKwlwcml2LT5wb3dlcl9tb2RlID0gSVdMX1BPV0VSX01PREVfQ0FNOworCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7CisKKwlpZiAoZWVwcm9tLT52ZXJzaW9uIDwgRUVQUk9NXzM5NDVfRUVQUk9NX1ZFUlNJT04pIHsKKwkJSVdMX1dBUk4ocHJpdiwgIlVuc3VwcG9ydGVkIEVFUFJPTSB2ZXJzaW9uOiAweCUwNFhcbiIsCisJCQkgZWVwcm9tLT52ZXJzaW9uKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCXJldCA9IGl3bF9pbml0X2NoYW5uZWxfbWFwKHByaXYpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIHJlZ3VsYXRvcnkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnI7CisJfQorCisJLyogU2V0IHVwIHR4cG93ZXIgc2V0dGluZ3MgaW4gZHJpdmVyIGZvciBhbGwgY2hhbm5lbHMgKi8KKwlpZiAoaXdsMzk0NV90eHBvd2VyX3NldF9mcm9tX2VlcHJvbShwcml2KSkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIGVycl9mcmVlX2NoYW5uZWxfbWFwOworCX0KKworCXJldCA9IGl3bGNvcmVfaW5pdF9nZW9zKHByaXYpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiaW5pdGlhbGl6aW5nIGdlb3MgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZnJlZV9jaGFubmVsX21hcDsKKwl9CisJaXdsMzk0NV9pbml0X2h3X3JhdGVzKHByaXYsIHByaXYtPmllZWVfcmF0ZXMpOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2NoYW5uZWxfbWFwOgorCWl3bF9mcmVlX2NoYW5uZWxfbWFwKHByaXYpOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXdsMzk0NV9zZXR1cF9tYWMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWludCByZXQ7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwcml2LT5odzsKKworCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gIml3bC0zOTQ1LXJzIjsKKwlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9zdGFfcHJpdik7CisKKwkvKiBUZWxsIG1hYzgwMjExIG91ciBjaGFyYWN0ZXJpc3RpY3MgKi8KKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCSAgICBJRUVFODAyMTFfSFdfTk9JU0VfREJNIHwKKwkJICAgIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UOworCisJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQorCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAorCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOworCisJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisKKwkvKiBEZWZhdWx0IHZhbHVlOyA0IEVEQ0EgUU9TIHByaW9yaXRpZXMgKi8KKwlody0+cXVldWVzID0gNDsKKworCWh3LT5jb25mLmJlYWNvbl9pbnQgPSAxMDA7CisKKwlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9jaGFubmVscykKKwkJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9CisJCQkmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisKKwlpZiAocHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscykKKwkJcHJpdi0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9CisJCQkmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl07CisKKwlyZXQgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcocHJpdi0+aHcpOworCWlmIChyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3IChlcnJvciAlZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgaXdsMzk0NV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IGVyciA9IDA7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0Jc3RydWN0IGl3bF8zOTQ1X2NmZyAqY2ZnID0gKHN0cnVjdCBpd2xfMzk0NV9jZmcgKikoZW50LT5kcml2ZXJfZGF0YSk7CisJc3RydWN0IGl3bF9jZmcgKmNmZyA9IChzdHJ1Y3QgaXdsX2NmZyAqKShlbnQtPmRyaXZlcl9kYXRhKTsKKwlzdHJ1Y3QgaXdsMzk0NV9lZXByb20gKmVlcHJvbTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqCiAJICogMS4gQWxsb2NhdGluZyBIVyBkYXRhCiAJICogKioqKioqKioqKioqKioqKioqKiovCiAKLQkvKiBEaXNhYmxpbmcgaGFyZHdhcmUgc2NhbiBtZWFucyB0aGF0IG1hYzgwMjExIHdpbGwgcGVyZm9ybSBzY2FucwotCSAqICJ0aGUgaGFyZCB3YXkiLCByYXRoZXIgdGhhbiB1c2luZyBkZXZpY2UncyBzY2FuLiAqLwotCWlmIChpd2wzOTQ1X3BhcmFtX2Rpc2FibGVfaHdfc2NhbikgewotCQlJV0xfREVCVUdfSU5GTygiRGlzYWJsaW5nIGh3X3NjYW5cbiIpOwotCQlpd2wzOTQ1X2h3X29wcy5od19zY2FuID0gTlVMTDsKLQl9Ci0KLQlpZiAoKGl3bDM5NDVfcGFyYW1fcXVldWVzX251bSA+IElXTDM5X01BWF9OVU1fUVVFVUVTKSB8fAotCSAgICAoaXdsMzk0NV9wYXJhbV9xdWV1ZXNfbnVtIDwgSVdMX01JTl9OVU1fUVVFVUVTKSkgewotCQlJV0xfRVJST1IoImludmFsaWQgcXVldWVzX251bSwgc2hvdWxkIGJlIGJldHdlZW4gJWQgYW5kICVkXG4iLAotCQkJICBJV0xfTUlOX05VTV9RVUVVRVMsIElXTDM5X01BWF9OVU1fUVVFVUVTKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJLyogbWFjODAyMTEgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhpcyBkZXZpY2UgaW5zdGFuY2UsIGluY2x1ZGluZwogCSAqICAgc3BhY2UgZm9yIHRoaXMgZHJpdmVyJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KLQlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGl3bDM5NDVfcHJpdiksICZpd2wzOTQ1X2h3X29wcyk7CisJaHcgPSBpd2xfYWxsb2NfYWxsKGNmZywgJml3bDM5NDVfaHdfb3BzKTsKIAlpZiAoaHcgPT0gTlVMTCkgewotCQlJV0xfRVJST1IoIkNhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIkNhbiBub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9Ci0KKwlwcml2ID0gaHctPnByaXY7CiAJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOwogCi0JcHJpdiA9IGh3LT5wcml2OwotCXByaXYtPmh3ID0gaHc7Ci0JcHJpdi0+cGNpX2RldiA9IHBkZXY7CisJaWYgKChpd2wzOTQ1X21vZF9wYXJhbXMubnVtX29mX3F1ZXVlcyA+IElXTDM5X01BWF9OVU1fUVVFVUVTKSB8fAorCSAgICAgKGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzIDwgSVdMX01JTl9OVU1fUVVFVUVTKSkgeworCQlJV0xfRVJSKHByaXYsCisJCQkiaW52YWxpZCBxdWV1ZXNfbnVtLCBzaG91bGQgYmUgYmV0d2VlbiAlZCBhbmQgJWRcbiIsCisJCQlJV0xfTUlOX05VTV9RVUVVRVMsIElXTDM5X01BWF9OVU1fUVVFVUVTKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfaWVlZTgwMjExX2ZyZWVfaHc7CisJfQorCisJLyoKKwkgKiBEaXNhYmxpbmcgaGFyZHdhcmUgc2NhbiBtZWFucyB0aGF0IG1hYzgwMjExIHdpbGwgcGVyZm9ybSBzY2FucworCSAqICJ0aGUgaGFyZCB3YXkiLCByYXRoZXIgdGhhbiB1c2luZyBkZXZpY2UncyBzY2FuLgorCSAqLworCWlmIChpd2wzOTQ1X21vZF9wYXJhbXMuZGlzYWJsZV9od19zY2FuKSB7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJEaXNhYmxpbmcgaHdfc2NhblxuIik7CisJCWl3bDM5NDVfaHdfb3BzLmh3X3NjYW4gPSBOVUxMOworCX0KKworCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIioqKiBMT0FEIERSSVZFUiAqKipcbiIpOwogCXByaXYtPmNmZyA9IGNmZzsKKwlwcml2LT5wY2lfZGV2ID0gcGRldjsKIAotCUlXTF9ERUJVR19JTkZPKCIqKiogTE9BRCBEUklWRVIgKioqXG4iKTsKLQlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJpd2wtMzk0NS1ycyI7Ci0JaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc3RhX3ByaXYpOwotCi0JLyogU2VsZWN0IGFudGVubmEgKG1heSBiZSBoZWxwZnVsIGlmIG9ubHkgb25lIGFudGVubmEgaXMgY29ubmVjdGVkKSAqLwotCXByaXYtPmFudGVubmEgPSAoZW51bSBpd2wzOTQ1X2FudGVubmEpaXdsMzk0NV9wYXJhbV9hbnRlbm5hOwotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JaXdsMzk0NV9kZWJ1Z19sZXZlbCA9IGl3bDM5NDVfcGFyYW1fZGVidWc7CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlwcml2LT5kZWJ1Z19sZXZlbCA9IGl3bDM5NDVfbW9kX3BhcmFtcy5kZWJ1ZzsKIAlhdG9taWNfc2V0KCZwcml2LT5yZXN0cmljdF9yZWZjbnQsIDApOwogI2VuZGlmCiAKLQkvKiBUZWxsIG1hYzgwMjExIG91ciBjaGFyYWN0ZXJpc3RpY3MgKi8KLQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCSAgICBJRUVFODAyMTFfSFdfTk9JU0VfREJNOwotCi0JaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQotCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAotCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpOwotCi0JaHctPndpcGh5LT5md19oYW5kbGVzX3JlZ3VsYXRvcnkgPSB0cnVlOwotCi0JLyogNCBFRENBIFFPUyBwcmlvcml0aWVzICovCi0JaHctPnF1ZXVlcyA9IDQ7Ci0KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJICogMi4gSW5pdGlhbGl6aW5nIFBDSSBidXMKIAkgKiAqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzg3Niw3ICs1MDAyLDcgQEAKIAlpZiAoIWVycikKIAkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUgIjogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOworCQlJV0xfV0FSTihwcml2LCAiTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOwogCQlnb3RvIG91dF9wY2lfZGlzYWJsZV9kZXZpY2U7CiAJfQogCkBAIC03ODk0LDk4ICs1MDIwLDU4IEBACiAJCWdvdG8gb3V0X3BjaV9yZWxlYXNlX3JlZ2lvbnM7CiAJfQogCi0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9sZW4gPSAweCUwOGxseFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAicGNpX3Jlc291cmNlX2xlbiA9IDB4JTA4bGx4XG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7Ci0JSVdMX0RFQlVHX0lORk8oInBjaV9yZXNvdXJjZV9iYXNlID0gJXBcbiIsIHByaXYtPmh3X2Jhc2UpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJwY2lfcmVzb3VyY2VfYmFzZSA9ICVwXG4iLCBwcml2LT5od19iYXNlKTsKIAogCS8qIFdlIGRpc2FibGUgdGhlIFJFVFJZX1RJTUVPVVQgcmVnaXN0ZXIgKDB4NDEpIHRvIGtlZXAKIAkgKiBQQ0kgVHggcmV0cmllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggQzMgQ1BVIHN0YXRlICovCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDEsIDB4MDApOwogCi0JLyogbmljIGluaXQgKi8KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dJT19DSElDS0VOX0JJVFMsCi0JCQlDU1JfR0lPX0NISUNLRU5fQklUU19SRUdfQklUX0RJU19MMFNfRVhJVF9USU1FUik7Ci0KLQlpd2wzOTQ1X3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLCBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfSU5JVF9ET05FKTsKLQllcnIgPSBpd2wzOTQ1X3BvbGxfZGlyZWN0X2JpdChwcml2LCBDU1JfR1BfQ05UUkwsCi0JCQkJQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19DTE9DS19SRUFEWSwgMjUwMDApOworCS8qIGFtcCBpbml0ICovCisJZXJyID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YXBtX29wcy5pbml0KHByaXYpOwogCWlmIChlcnIgPCAwKSB7Ci0JCUlXTF9ERUJVR19JTkZPKCJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJGYWlsZWQgdG8gaW5pdCB0aGUgY2FyZFxuIik7CiAJCWdvdG8gb3V0X2lvdW5tYXA7CiAJfQogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqCiAJICogNC4gUmVhZCBFRVBST00KIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KKwogCS8qIFJlYWQgdGhlIEVFUFJPTSAqLwotCWVyciA9IGl3bDM5NDVfZWVwcm9tX2luaXQocHJpdik7CisJZXJyID0gaXdsX2VlcHJvbV9pbml0KHByaXYpOwogCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gaW5pdCBFRVBST01cbiIpOworCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdCBFRVBST01cbiIpOwogCQlnb3RvIG91dF9pb3VubWFwOwogCX0KIAkvKiBNQUMgQWRkcmVzcyBsb2NhdGlvbiBpbiBFRVBST00gc2FtZSBmb3IgMzk0NS80OTY1ICovCi0JZ2V0X2VlcHJvbV9tYWMocHJpdiwgcHJpdi0+bWFjX2FkZHIpOwotCUlXTF9ERUJVR19JTkZPKCJNQUMgYWRkcmVzczogJXBNXG4iLCBwcml2LT5tYWNfYWRkcik7CisJZWVwcm9tID0gKHN0cnVjdCBpd2wzOTQ1X2VlcHJvbSAqKXByaXYtPmVlcHJvbTsKKwltZW1jcHkocHJpdi0+bWFjX2FkZHIsIGVlcHJvbS0+bWFjX2FkZHJlc3MsIEVUSF9BTEVOKTsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiTUFDIGFkZHJlc3M6ICVwTVxuIiwgcHJpdi0+bWFjX2FkZHIpOwogCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHByaXYtPmh3LCBwcml2LT5tYWNfYWRkcik7CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiA1LiBTZXR1cCBIVyBDb25zdGFudHMKIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KIAkvKiBEZXZpY2Utc3BlY2lmaWMgc2V0dXAgKi8KLQlpZiAoaXdsMzk0NV9od19zZXRfaHdfc2V0dGluZyhwcml2KSkgewotCQlJV0xfRVJST1IoImZhaWxlZCB0byBzZXQgaHcgc2V0dGluZ3NcbiIpOwotCQlnb3RvIG91dF9pb3VubWFwOworCWlmIChpd2wzOTQ1X2h3X3NldF9od19wYXJhbXMocHJpdikpIHsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIHNldCBodyBzZXR0aW5nc1xuIik7CisJCWdvdG8gb3V0X2VlcHJvbV9mcmVlOwogCX0KIAogCS8qKioqKioqKioqKioqKioqKioqKioqKgogCSAqIDYuIFNldHVwIHByaXYKIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KLQlwcml2LT5yZXRyeV9yYXRlID0gMTsKLQlwcml2LT5pYnNzX2JlYWNvbiA9IE5VTEw7CiAKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnBvd2VyX2RhdGEubG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPnN0YV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aGNtZF9sb2NrKTsKLQotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7Ci0JbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOwotCi0JLyogQ2xlYXIgdGhlIGRyaXZlcidzIChub3QgZGV2aWNlJ3MpIHN0YXRpb24gdGFibGUgKi8KLQlpd2wzOTQ1X2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwotCi0JcHJpdi0+ZGF0YV9yZXRyeV9saW1pdCA9IC0xOwotCXByaXYtPmllZWVfY2hhbm5lbHMgPSBOVUxMOwotCXByaXYtPmllZWVfcmF0ZXMgPSBOVUxMOwotCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwotCi0JcHJpdi0+aXdfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047Ci0KLQlpd2wzOTQ1X3Jlc2V0X3Fvcyhwcml2KTsKLQotCXByaXYtPnFvc19kYXRhLnFvc19hY3RpdmUgPSAwOwotCXByaXYtPnFvc19kYXRhLnFvc19jYXAudmFsID0gMDsKLQotCi0JcHJpdi0+cmF0ZXNfbWFzayA9IElXTF9SQVRFU19NQVNLOwotCS8qIElmIHBvd2VyIG1hbmFnZW1lbnQgaXMgdHVybmVkIG9uLCBkZWZhdWx0IHRvIEFDIG1vZGUgKi8KLQlwcml2LT5wb3dlcl9tb2RlID0gSVdMX1BPV0VSX0FDOwotCXByaXYtPnVzZXJfdHhwb3dlcl9saW1pdCA9IElXTF9ERUZBVUxUX1RYX1BPV0VSOwotCi0JZXJyID0gaXdsMzk0NV9pbml0X2NoYW5uZWxfbWFwKHByaXYpOworCWVyciA9IGl3bDM5NDVfaW5pdF9kcnYocHJpdik7CiAJaWYgKGVycikgewotCQlJV0xfRVJST1IoImluaXRpYWxpemluZyByZWd1bGF0b3J5IGZhaWxlZDogJWRcbiIsIGVycik7Ci0JCWdvdG8gb3V0X3Vuc2V0X2h3X3NldHRpbmc7CisJCUlXTF9FUlIocHJpdiwgImluaXRpYWxpemluZyBkcml2ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBvdXRfdW5zZXRfaHdfcGFyYW1zOwogCX0KIAotCWVyciA9IGl3bDM5NDVfaW5pdF9nZW9zKHByaXYpOwotCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJpbml0aWFsaXppbmcgZ2VvcyBmYWlsZWQ6ICVkXG4iLCBlcnIpOwotCQlnb3RvIG91dF9mcmVlX2NoYW5uZWxfbWFwOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKLQkJIjogRGV0ZWN0ZWQgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rICVzXG4iLCBwcml2LT5jZmctPm5hbWUpOworCUlXTF9JTkZPKHByaXYsICJEZXRlY3RlZCBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgJXNcbiIsCisJCXByaXYtPmNmZy0+bmFtZSk7CiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKiA3LiBJbml0aWFsaXplIE1vZHVsZSBQYXJhbWV0ZXJzCkBAIC03OTkzLDkgKzUwNzksOSBAQAogCiAJLyogSW5pdGlhbGl6ZSBtb2R1bGUgcGFyYW1ldGVyIHZhbHVlcyBoZXJlICovCiAJLyogRGlzYWJsZSByYWRpbyAoU1cgUkYgS0lMTCkgdmlhIHBhcmFtZXRlciB3aGVuIGxvYWRpbmcgZHJpdmVyICovCi0JaWYgKGl3bDM5NDVfcGFyYW1fZGlzYWJsZSkgeworCWlmIChpd2wzOTQ1X21vZF9wYXJhbXMuZGlzYWJsZSkgewogCQlzZXRfYml0KFNUQVRVU19SRl9LSUxMX1NXLCAmcHJpdi0+c3RhdHVzKTsKLQkJSVdMX0RFQlVHX0lORk8oIlJhZGlvIGRpc2FibGVkLlxuIik7CisJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSYWRpbyBkaXNhYmxlZC5cbiIpOwogCX0KIAogCkBAIC04MDA0LDQzICs1MDkwLDQ5IEBACiAJICogKioqKioqKioqKioqKioqKioqKiovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWl3bDM5NDVfZGlzYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCWl3bF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCisJcGNpX2VuYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7CisKKwllcnIgPSByZXF1ZXN0X2lycShwcml2LT5wY2lfZGV2LT5pcnEsIGl3bF9pc3IsIElSUUZfU0hBUkVELAorCQkJICBEUlZfTkFNRSwgcHJpdik7CisJaWYgKGVycikgeworCQlJV0xfRVJSKHByaXYsICJFcnJvciBhbGxvY2F0aW5nIElSUSAlZFxuIiwgcHJpdi0+cGNpX2Rldi0+aXJxKTsKKwkJZ290byBvdXRfZGlzYWJsZV9tc2k7CisJfQorCiAJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJml3bDM5NDVfYXR0cmlidXRlX2dyb3VwKTsKIAlpZiAoZXJyKSB7Ci0JCUlXTF9FUlJPUigiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIik7Ci0JCWdvdG8gb3V0X2ZyZWVfZ2VvczsKKwkJSVdMX0VSUihwcml2LCAiZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBkZXZpY2UgYXR0cmlidXRlc1xuIik7CisJCWdvdG8gb3V0X3JlbGVhc2VfaXJxOwogCX0KIAotCWl3bDM5NDVfc2V0X3J4b25fY2hhbm5lbChwcml2LCBJRUVFODAyMTFfQkFORF8yR0haLCA2KTsKKwlpd2xfc2V0X3J4b25fY2hhbm5lbChwcml2LAorCQkJICAgICAmcHJpdi0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHNbNV0pOwogCWl3bDM5NDVfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTsKIAlpd2wzOTQ1X3NldHVwX3J4X2hhbmRsZXJzKHByaXYpOwogCi0JLyoqKioqKioqKioqKioqKioqKioqKioqCi0JICogOS4gQ29uY2x1ZGUKLQkgKiAqKioqKioqKioqKioqKioqKioqKi8KLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0JICogMTAuIFNldHVwIGFuZCBSZWdpc3RlciBtYWM4MDIxMQorCSAqIDkuIFNldHVwIGFuZCBSZWdpc3RlciBtYWM4MDIxMQogCSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcocHJpdi0+aHcpOwotCWlmIChlcnIpIHsKLQkJSVdMX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgbmV0d29yayBkZXZpY2UgKGVycm9yICVkKVxuIiwgZXJyKTsKLQkJZ290byAgb3V0X3JlbW92ZV9zeXNmczsKLQl9CisJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCi0JcHJpdi0+aHctPmNvbmYuYmVhY29uX2ludCA9IDEwMDsKLQlwcml2LT5tYWM4MDIxMV9yZWdpc3RlcmVkID0gMTsKLQotCi0JZXJyID0gaXdsMzk0NV9yZmtpbGxfaW5pdChwcml2KTsKKwllcnIgPSBpd2wzOTQ1X3NldHVwX21hYyhwcml2KTsKIAlpZiAoZXJyKQotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBpbml0aWFsaXplIFJGS0lMTCBzeXN0ZW0uICIKKwkJZ290byAgb3V0X3JlbW92ZV9zeXNmczsKKworCWVyciA9IGl3bF9yZmtpbGxfaW5pdChwcml2KTsKKwlpZiAoZXJyKQorCQlJV0xfRVJSKHByaXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBSRktJTEwgc3lzdGVtLiAiCiAJCQkJICAiSWdub3JpbmcgZXJyb3I6ICVkXG4iLCBlcnIpOworCWVsc2UKKwkJaXdsX3Jma2lsbF9zZXRfaHdfc3RhdGUocHJpdik7CisKKwkvKiBTdGFydCBtb25pdG9yaW5nIHRoZSBraWxsc3dpdGNoICovCisJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJma2lsbF9wb2xsLAorCQkJICAgMiAqIEhaKTsKIAogCXJldHVybiAwOwogCkBAIC04MDQ4LDEyICs1MTQwLDE2IEBACiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0+d29ya3F1ZXVlKTsKIAlwcml2LT53b3JrcXVldWUgPSBOVUxMOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpd2wzOTQ1X2F0dHJpYnV0ZV9ncm91cCk7Ci0gb3V0X2ZyZWVfZ2VvczoKLQlpd2wzOTQ1X2ZyZWVfZ2Vvcyhwcml2KTsKLSBvdXRfZnJlZV9jaGFubmVsX21hcDoKLQlpd2wzOTQ1X2ZyZWVfY2hhbm5lbF9tYXAocHJpdik7Ci0gb3V0X3Vuc2V0X2h3X3NldHRpbmc6Ci0JaXdsMzk0NV91bnNldF9od19zZXR0aW5nKHByaXYpOworIG91dF9yZWxlYXNlX2lycToKKwlmcmVlX2lycShwcml2LT5wY2lfZGV2LT5pcnEsIHByaXYpOworIG91dF9kaXNhYmxlX21zaToKKwlwY2lfZGlzYWJsZV9tc2kocHJpdi0+cGNpX2Rldik7CisJaXdsY29yZV9mcmVlX2dlb3MocHJpdik7CisJaXdsX2ZyZWVfY2hhbm5lbF9tYXAocHJpdik7Cisgb3V0X3Vuc2V0X2h3X3BhcmFtczoKKwlpd2wzOTQ1X3Vuc2V0X2h3X3BhcmFtcyhwcml2KTsKKyBvdXRfZWVwcm9tX2ZyZWU6CisJaXdsX2VlcHJvbV9mcmVlKHByaXYpOwogIG91dF9pb3VubWFwOgogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3X2Jhc2UpOwogIG91dF9wY2lfcmVsZWFzZV9yZWdpb25zOgpAQCAtODA2OSw0MiArNTE2NSw0NiBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgaXdsMzk0NV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIXByaXYpCiAJCXJldHVybjsKIAotCUlXTF9ERUJVR19JTkZPKCIqKiogVU5MT0FEIERSSVZFUiAqKipcbiIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICIqKiogVU5MT0FEIERSSVZFUiAqKipcbiIpOwogCiAJc2V0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKTsKIAotCWl3bDM5NDVfZG93bihwcml2KTsKKwlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgeworCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhwcml2LT5odyk7CisJCXByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQgPSAwOworCX0gZWxzZSB7CisJCWl3bDM5NDVfZG93bihwcml2KTsKKwl9CiAKIAkvKiBtYWtlIHN1cmUgd2UgZmx1c2ggYW55IHBlbmRpbmcgaXJxIG9yCiAJICogdGFza2xldCBmb3IgdGhlIGRyaXZlcgogCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JaXdsMzk0NV9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CisJaXdsX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpd2xfc3luY2hyb25pemVfaXJxKHByaXYpOwogCiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJml3bDM5NDVfYXR0cmlidXRlX2dyb3VwKTsKIAotCWl3bDM5NDVfcmZraWxsX3VucmVnaXN0ZXIocHJpdik7CisJaXdsX3Jma2lsbF91bnJlZ2lzdGVyKHByaXYpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnJma2lsbF9wb2xsKTsKKwogCWl3bDM5NDVfZGVhbGxvY191Y29kZV9wY2kocHJpdik7CiAKIAlpZiAocHJpdi0+cnhxLmJkKQotCQlpd2wzOTQ1X3J4X3F1ZXVlX2ZyZWUocHJpdiwgJnByaXYtPnJ4cSk7CisJCWl3bF9yeF9xdWV1ZV9mcmVlKHByaXYsICZwcml2LT5yeHEpOwogCWl3bDM5NDVfaHdfdHhxX2N0eF9mcmVlKHByaXYpOwogCi0JaXdsMzk0NV91bnNldF9od19zZXR0aW5nKHByaXYpOworCWl3bDM5NDVfdW5zZXRfaHdfcGFyYW1zKHByaXYpOwogCWl3bDM5NDVfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CiAKLQlpZiAocHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkKLQkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcocHJpdi0+aHcpOwotCiAJLypuZXRpZl9zdG9wX3F1ZXVlKGRldik7ICovCiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndvcmtxdWV1ZSk7CiAKQEAgLTgxMTQsMTMgKzUyMTQsMTYgQEAKIAlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwogCXByaXYtPndvcmtxdWV1ZSA9IE5VTEw7CiAKKwlmcmVlX2lycShwZGV2LT5pcnEsIHByaXYpOworCXBjaV9kaXNhYmxlX21zaShwZGV2KTsKKwogCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPmh3X2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAotCWl3bDM5NDVfZnJlZV9jaGFubmVsX21hcChwcml2KTsKLQlpd2wzOTQ1X2ZyZWVfZ2Vvcyhwcml2KTsKKwlpd2xfZnJlZV9jaGFubmVsX21hcChwcml2KTsKKwlpd2xjb3JlX2ZyZWVfZ2Vvcyhwcml2KTsKIAlrZnJlZShwcml2LT5zY2FuKTsKIAlpZiAocHJpdi0+aWJzc19iZWFjb24pCiAJCWRldl9rZnJlZV9za2IocHJpdi0+aWJzc19iZWFjb24pOwpAQCAtODEzMiwyNyArNTIzNSwxNSBAQAogCiBzdGF0aWMgaW50IGl3bDM5NDVfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChwcml2LT5pc19vcGVuKSB7CiAJCXNldF9iaXQoU1RBVFVTX0lOX1NVU1BFTkQsICZwcml2LT5zdGF0dXMpOwogCQlpd2wzOTQ1X21hY19zdG9wKHByaXYtPmh3KTsKIAkJcHJpdi0+aXNfb3BlbiA9IDE7CiAJfQotCi0JLyogcGNpIGRyaXZlciBhc3N1bWVzIHN0YXRlIHdpbGwgYmUgc2F2ZWQgaW4gdGhpcyBmdW5jdGlvbi4KLQkgKiBwY2kgc3RhdGUgaXMgc2F2ZWQgYW5kIGRldmljZSBkaXNhYmxlZCB3aGVuIGludGVyZmFjZSBpcwotCSAqIHN0b3BwZWQsIHNvIGF0IHRoaXMgdGltZSBwY2kgZGV2aWNlIHdpbGwgYWx3YXlzIGJlIGRpc2FibGVkIC0KLQkgKiB3aGV0aGVyIGludGVyZmFjZSB3YXMgc3RhcnRlZCBvciBub3QuIHNhdmluZyBwY2kgc3RhdGUgbm93IHdpbGwKLQkgKiBjYXVzZSBzYXZlZCBzdGF0ZSBiZSB0aGF0IG9mIGEgZGlzYWJsZWQgZGV2aWNlLCB3aGljaCB3aWxsIGNhdXNlCi0JICogcHJvYmxlbXMgZHVyaW5nIHJlc3VtZSBpbiB0aGF0IHdlIHdpbGwgZW5kIHVwIHdpdGggYSBkaXNhYmxlZCBkZXZpY2UuCi0JICoKLQkgKiBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IHNhdmVkIHN0YXRlIChmcm9tIHdoZW4gaW50ZXJmYWNlIHdhcwotCSAqIHN0b3BwZWQpIGlzIHZhbGlkLiBpZiBpbnRlcmZhY2Ugd2FzIG5ldmVyIHVwIGF0IHRpbWUgb2Ygc3VzcGVuZAotCSAqIHRoZW4gdGhlIHNhdmVkIHN0YXRlIHdpbGwgc3RpbGwgYmUgdmFsaWQgYXMgaXQgd2FzIHNhdmVkIGR1cmluZwotCSAqIC5wcm9iZS4gKi8KLQlwZGV2LT5zdGF0ZV9zYXZlZCA9IHRydWU7Ci0KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogCiAJcmV0dXJuIDA7CkBAIC04MTYwLDkgKzUyNTEsMTQgQEAKIAogc3RhdGljIGludCBpd2wzOTQ1X3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IGl3bDM5NDVfcHJpdiAqcHJpdiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldDsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCiAJaWYgKHByaXYtPmlzX29wZW4pCiAJCWl3bDM5NDVfbWFjX3N0YXJ0KHByaXYtPmh3KTsKQEAgLTgxNzMsMTE0ICs1MjY5LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi0vKioqKioqKioqKioqKioqIFJGS0lMTCBGVU5DVElPTlMgKioqKioqKioqKi8KLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9SRktJTEwKLS8qIHNvZnR3YXJlIHJmLWtpbGwgZnJvbSB1c2VyICovCi1zdGF0aWMgaW50IGl3bDM5NDVfcmZraWxsX3NvZnRfcmZfa2lsbCh2b2lkICpkYXRhLCBlbnVtIHJma2lsbF9zdGF0ZSBzdGF0ZSkKLXsKLQlzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2ID0gZGF0YTsKLQlpbnQgZXJyID0gMDsKLQotCWlmICghcHJpdi0+cmZraWxsKQotCXJldHVybiAwOwotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm4gMDsKLQotCUlXTF9ERUJVR19SRl9LSUxMKCJ3ZSByZWNlaXZlZCBzb2Z0IFJGS0lMTCBzZXQgdG8gc3RhdGUgJWRcbiIsIHN0YXRlKTsKLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSBSRktJTExfU1RBVEVfVU5CTE9DS0VEOgotCQlpZiAoaXdsMzk0NV9pc19yZmtpbGxfaHcocHJpdikpIHsKLQkJCWVyciA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCQlpd2wzOTQ1X3JhZGlvX2tpbGxfc3cocHJpdiwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRDoKLQkJaXdsMzk0NV9yYWRpb19raWxsX3N3KHByaXYsIDEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlJV0xfV0FSTklORygid2UgcmVjZWl2ZWQgdW5leHBlY3RlZCBSRktJTEwgc3RhdGUgJWRcbiIsIHN0YXRlKTsKLQkJYnJlYWs7Ci0JfQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBpd2wzOTQ1X3Jma2lsbF9pbml0KHN0cnVjdCBpd2wzOTQ1X3ByaXYgKnByaXYpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2aWNlID0gd2lwaHlfZGV2KHByaXYtPmh3LT53aXBoeSk7Ci0JaW50IHJldCA9IDA7Ci0KLQlCVUdfT04oZGV2aWNlID09IE5VTEwpOwotCi0JSVdMX0RFQlVHX1JGX0tJTEwoIkluaXRpYWxpemluZyBSRktJTEwuXG4iKTsKLQlwcml2LT5yZmtpbGwgPSByZmtpbGxfYWxsb2NhdGUoZGV2aWNlLCBSRktJTExfVFlQRV9XTEFOKTsKLQlpZiAoIXByaXYtPnJma2lsbCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBhbGxvY2F0ZSByZmtpbGwgZGV2aWNlLlxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JcHJpdi0+cmZraWxsLT5uYW1lID0gcHJpdi0+Y2ZnLT5uYW1lOwotCXByaXYtPnJma2lsbC0+ZGF0YSA9IHByaXY7Ci0JcHJpdi0+cmZraWxsLT5zdGF0ZSA9IFJGS0lMTF9TVEFURV9VTkJMT0NLRUQ7Ci0JcHJpdi0+cmZraWxsLT50b2dnbGVfcmFkaW8gPSBpd2wzOTQ1X3Jma2lsbF9zb2Z0X3JmX2tpbGw7Ci0JcHJpdi0+cmZraWxsLT51c2VyX2NsYWltX3Vuc3VwcG9ydGVkID0gMTsKLQotCXByaXYtPnJma2lsbC0+ZGV2LmNsYXNzLT5zdXNwZW5kID0gTlVMTDsKLQlwcml2LT5yZmtpbGwtPmRldi5jbGFzcy0+cmVzdW1lID0gTlVMTDsKLQotCXJldCA9IHJma2lsbF9yZWdpc3Rlcihwcml2LT5yZmtpbGwpOwotCWlmIChyZXQpIHsKLQkJSVdMX0VSUk9SKCJVbmFibGUgdG8gcmVnaXN0ZXIgcmZraWxsOiAlZFxuIiwgcmV0KTsKLQkJZ290byBmcmVlZF9yZmtpbGw7Ci0JfQotCi0JSVdMX0RFQlVHX1JGX0tJTEwoIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOwotCXJldHVybiByZXQ7Ci0KLWZyZWVkX3Jma2lsbDoKLQlpZiAocHJpdi0+cmZraWxsICE9IE5VTEwpCi0JCXJma2lsbF9mcmVlKHByaXYtPnJma2lsbCk7Ci0JcHJpdi0+cmZraWxsID0gTlVMTDsKLQotZXJyb3I6Ci0JSVdMX0RFQlVHX1JGX0tJTEwoIlJGS0lMTCBpbml0aWFsaXphdGlvbiBjb21wbGV0ZS5cbiIpOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgaXdsMzk0NV9yZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCWlmIChwcml2LT5yZmtpbGwpCi0JCXJma2lsbF91bnJlZ2lzdGVyKHByaXYtPnJma2lsbCk7Ci0KLQlwcml2LT5yZmtpbGwgPSBOVUxMOwotfQotCi0vKiBzZXQgcmYta2lsbCB0byB0aGUgcmlnaHQgc3RhdGUuICovCi12b2lkIGl3bDM5NDVfcmZraWxsX3NldF9od19zdGF0ZShzdHJ1Y3QgaXdsMzk0NV9wcml2ICpwcml2KQotewotCi0JaWYgKCFwcml2LT5yZmtpbGwpCi0JCXJldHVybjsKLQotCWlmIChpd2wzOTQ1X2lzX3Jma2lsbF9odyhwcml2KSkgewotCQlyZmtpbGxfZm9yY2Vfc3RhdGUocHJpdi0+cmZraWxsLCBSRktJTExfU1RBVEVfSEFSRF9CTE9DS0VEKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICghaXdsMzk0NV9pc19yZmtpbGxfc3cocHJpdikpCi0JCXJma2lsbF9mb3JjZV9zdGF0ZShwcml2LT5yZmtpbGwsIFJGS0lMTF9TVEFURV9VTkJMT0NLRUQpOwotCWVsc2UKLQkJcmZraWxsX2ZvcmNlX3N0YXRlKHByaXYtPnJma2lsbCwgUkZLSUxMX1NUQVRFX1NPRlRfQkxPQ0tFRCk7Ci19Ci0jZW5kaWYKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogZHJpdmVyIGFuZCBtb2R1bGUgZW50cnkgcG9pbnQKQEAgLTgzMDcsMjkgKzUyOTUsMTkgQEAKIAogCXJldCA9IGl3bDM5NDVfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCk7CiAJaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byByZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtOiAlZFxuIiwgcmV0KTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCSAgICAgICAiVW5hYmxlIHRvIHJlZ2lzdGVyIHJhdGUgY29udHJvbCBhbGdvcml0aG06ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJml3bDM5NDVfZHJpdmVyKTsKIAlpZiAocmV0KSB7Ci0JCUlXTF9FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUENJIG1vZHVsZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiVW5hYmxlIHRvIGluaXRpYWxpemUgUENJIG1vZHVsZVxuIik7CiAJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CiAJfQotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi0JcmV0ID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZpd2wzOTQ1X2RyaXZlci5kcml2ZXIsICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7Ci0JaWYgKHJldCkgewotCQlJV0xfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgZHJpdmVyIHN5c2ZzIGZpbGVcbiIpOwotCQlnb3RvIGVycm9yX2RlYnVnOwotCX0KLSNlbmRpZgogCiAJcmV0dXJuIHJldDsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X0RFQlVHCi1lcnJvcl9kZWJ1ZzoKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJml3bDM5NDVfZHJpdmVyKTsKLSNlbmRpZgogZXJyb3JfcmVnaXN0ZXI6CiAJaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwogCXJldHVybiByZXQ7CkBAIC04MzM3LDI5ICs1MzE1LDI5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpd2wzOTQ1X2V4aXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfSVdMMzk0NV9ERUJVRwotCWRyaXZlcl9yZW1vdmVfZmlsZSgmaXdsMzk0NV9kcml2ZXIuZHJpdmVyLCAmZHJpdmVyX2F0dHJfZGVidWdfbGV2ZWwpOwotI2VuZGlmCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpd2wzOTQ1X2RyaXZlcik7CiAJaXdsMzk0NV9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOwogfQogCiBNT0RVTEVfRklSTVdBUkUoSVdMMzk0NV9NT0RVTEVfRklSTVdBUkUoSVdMMzk0NV9VQ09ERV9BUElfTUFYKSk7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZChhbnRlbm5hLCBpd2wzOTQ1X3BhcmFtX2FudGVubmEsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoYW50ZW5uYSwgaXdsMzk0NV9tb2RfcGFyYW1zLmFudGVubmEsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGFudGVubmEsICJzZWxlY3QgYW50ZW5uYSAoMT1NYWluLCAyPUF1eCwgZGVmYXVsdCAwIFtib3RoXSkiKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlLCBpd2wzOTQ1X3BhcmFtX2Rpc2FibGUsIGludCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGlzYWJsZSwgaXdsMzk0NV9tb2RfcGFyYW1zLmRpc2FibGUsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGUsICJtYW51YWxseSBkaXNhYmxlIHRoZSByYWRpbyAoZGVmYXVsdCAwIFtyYWRpbyBvbl0pIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoaHdjcnlwdG8sIGl3bDM5NDVfcGFyYW1faHdjcnlwdG8sIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGh3Y3J5cHRvLAotCQkgInVzaW5nIGhhcmR3YXJlIGNyeXB0byBlbmdpbmUgKGRlZmF1bHQgMCBbc29mdHdhcmVdKVxuIik7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGl3bDM5NDVfcGFyYW1fZGVidWcsIHVpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHN3Y3J5cHRvLCBpd2wzOTQ1X21vZF9wYXJhbXMuc3dfY3J5cHRvLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhzd2NyeXB0bywKKwkJICJ1c2luZyBzb2Z0d2FyZSBjcnlwdG8gKGRlZmF1bHQgMSBbc29mdHdhcmVdKVxuIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGl3bDM5NDVfbW9kX3BhcmFtcy5kZWJ1ZywgdWludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiZGVidWcgb3V0cHV0IG1hc2siKTsKLW1vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlX2h3X3NjYW4sIGl3bDM5NDVfcGFyYW1fZGlzYWJsZV9od19zY2FuLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKGRpc2FibGVfaHdfc2NhbiwgaXdsMzk0NV9tb2RfcGFyYW1zLmRpc2FibGVfaHdfc2NhbiwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9od19zY2FuLCAiZGlzYWJsZSBoYXJkd2FyZSBzY2FubmluZyAoZGVmYXVsdCAwKSIpOwogCi1tb2R1bGVfcGFyYW1fbmFtZWQocXVldWVzX251bSwgaXdsMzk0NV9wYXJhbV9xdWV1ZXNfbnVtLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtX25hbWVkKHF1ZXVlc19udW0sIGl3bDM5NDVfbW9kX3BhcmFtcy5udW1fb2ZfcXVldWVzLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhxdWV1ZXNfbnVtLCAibnVtYmVyIG9mIGh3IHF1ZXVlcy4iKTsKIAorbW9kdWxlX3BhcmFtX25hbWVkKGZ3X3Jlc3RhcnQzOTQ1LCBpd2wzOTQ1X21vZF9wYXJhbXMucmVzdGFydF9mdywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZndfcmVzdGFydDM5NDUsICJyZXN0YXJ0IGZpcm13YXJlIGluIGNhc2Ugb2YgZXJyb3IiKTsKKwogbW9kdWxlX2V4aXQoaXdsMzk0NV9leGl0KTsKIG1vZHVsZV9pbml0KGl3bDM5NDVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCmluZGV4IDAyMDgwYTMuLjBiNjkxODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCkBAIC00LDggKzQsMTAgQEAKIHVzYjh4eHgtb2JqcyArPSBpZl91c2IubwogbGliZXJ0YXNfY3Mtb2JqcyArPSBpZl9jcy5vCiBsaWJlcnRhc19zZGlvLW9ianMgKz0gaWZfc2Rpby5vCitsaWJlcnRhc19zcGktb2JqcyArPSBpZl9zcGkubwogCiBvYmotJChDT05GSUdfTElCRVJUQVMpICAgICArPSBsaWJlcnRhcy5vCiBvYmotJChDT05GSUdfTElCRVJUQVNfVVNCKSArPSB1c2I4eHh4Lm8KIG9iai0kKENPTkZJR19MSUJFUlRBU19DUykgICs9IGxpYmVydGFzX2NzLm8KIG9iai0kKENPTkZJR19MSUJFUlRBU19TRElPKSArPSBsaWJlcnRhc19zZGlvLm8KK29iai0kKENPTkZJR19MSUJFUlRBU19TUEkpICs9IGxpYmVydGFzX3NwaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWJ1Z2ZzLmMKaW5kZXggZWM0ZWZkNy4uNTBlMjhhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlYnVnZnMuYwpAQCAtNjI5LDcgKzYyOSw3IEBACiAJCXJlcyA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JcHJpdi0+cmZfb2Zmc2V0ID0gc2ltcGxlX3N0cnRvdWwoKGNoYXIgKilidWYsIE5VTEwsIDE2KTsKKwlwcml2LT5yZl9vZmZzZXQgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDE2KTsKIAlyZXMgPSBjb3VudDsKIG91dF91bmxvY2s6CiAJZnJlZV9wYWdlKGFkZHIpOwpAQCAtNjgwLDEyICs2ODAsMTIgQEAKIH0KIAogc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IHBlcm07CiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzOwogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2ZpbGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzIGRlYnVnZnNfZmlsZXNbXSA9IHsKIAl7ICJpbmZvIiwgMDQ0NCwgRk9QUyhsYnNfZGV2X2luZm8sIHdyaXRlX2ZpbGVfZHVtbXkpLCB9LAogCXsgImdldHNjYW50YWJsZSIsIDA0NDQsIEZPUFMobGJzX2dldHNjYW50YWJsZSwKIAkJCQkJd3JpdGVfZmlsZV9kdW1teSksIH0sCkBAIC02OTMsNyArNjkzLDcgQEAKIAkJCQlsYnNfc2xlZXBwYXJhbXNfd3JpdGUpLCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2V2ZW50c19maWxlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX2V2ZW50c19maWxlc1tdID0gewogCXsibG93X3Jzc2kiLCAwNjQ0LCBGT1BTKGxic19sb3dyc3NpX3JlYWQsCiAJCQkJbGJzX2xvd3Jzc2lfd3JpdGUpLCB9LAogCXsibG93X3NuciIsIDA2NDQsIEZPUFMobGJzX2xvd3Nucl9yZWFkLApAQCAtNzA4LDcgKzcwOCw3IEBACiAJCQkJbGJzX2hpZ2hzbnJfd3JpdGUpLCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBsYnNfZGVidWdmc19maWxlcyBkZWJ1Z2ZzX3JlZ3NfZmlsZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgZGVidWdmc19yZWdzX2ZpbGVzW10gPSB7CiAJeyJyZG1hYyIsIDA2NDQsIEZPUFMobGJzX3JkbWFjX3JlYWQsIGxic19yZG1hY193cml0ZSksIH0sCiAJeyJ3cm1hYyIsIDA2MDAsIEZPUFMoTlVMTCwgbGJzX3dybWFjX3dyaXRlKSwgfSwKIAl7InJkYmJwIiwgMDY0NCwgRk9QUyhsYnNfcmRiYnBfcmVhZCwgbGJzX3JkYmJwX3dyaXRlKSwgfSwKQEAgLTczNSw3ICs3MzUsNyBAQAogdm9pZCBsYnNfZGVidWdmc19pbml0X29uZShzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGxic19kZWJ1Z2ZzX2ZpbGVzICpmaWxlczsKKwljb25zdCBzdHJ1Y3QgbGJzX2RlYnVnZnNfZmlsZXMgKmZpbGVzOwogCWlmICghbGJzX2RpcikKIAkJZ290byBleGl0OwogCkBAIC05MzgsNyArOTM4LDcgQEAKIAlyZXR1cm4gKHNzaXplX3QpY250OwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsYnNfZGVidWdfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxic19kZWJ1Z19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gb3Blbl9maWxlX2dlbmVyaWMsCiAJLndyaXRlID0gbGJzX2RlYnVnZnNfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKaW5kZXggYzM2NGU0YzAuLmU4ZGZkZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNkZWZpbmUgTEJTX0RFQl9IRVgJMHgwMDIwMDAwMAogI2RlZmluZSBMQlNfREVCX1NESU8JMHgwMDQwMDAwMAogI2RlZmluZSBMQlNfREVCX1NZU0ZTCTB4MDA4MDAwMDAKKyNkZWZpbmUgTEJTX0RFQl9TUEkJMHgwMTAwMDAwMAogCiBleHRlcm4gdW5zaWduZWQgaW50IGxic19kZWJ1ZzsKIApAQCAtODQsNiArODUsNyBAQAogI2RlZmluZSBsYnNfZGViX3RocmVhZChmbXQsIGFyZ3MuLi4pICAgIExCU19ERUJfTEwoTEJTX0RFQl9USFJFQUQsICIgdGhyZWFkIiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIGxic19kZWJfc2RpbyhmbXQsIGFyZ3MuLi4pICAgICAgTEJTX0RFQl9MTChMQlNfREVCX1NESU8sICIgc2RpbyIsIGZtdCwgIyNhcmdzKQogI2RlZmluZSBsYnNfZGViX3N5c2ZzKGZtdCwgYXJncy4uLikgICAgIExCU19ERUJfTEwoTEJTX0RFQl9TWVNGUywgIiBzeXNmcyIsIGZtdCwgIyNhcmdzKQorI2RlZmluZSBsYnNfZGViX3NwaShmbXQsIGFyZ3MuLi4pICAgICAgIExCU19ERUJfTEwoTEJTX0RFQl9TUEksICIgc3BpIiwgZm10LCAjI2FyZ3MpCiAKICNkZWZpbmUgbGJzX3ByX2luZm8oZm9ybWF0LCBhcmdzLi4uKSBcCiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSI6ICIgZm9ybWF0LCAjIyBhcmdzKQpAQCAtMjYzLDYgKzI2NSw3IEBACiAKICNkZWZpbmUJQ01EX0ZfSE9TVENNRAkJKDEgPDwgMCkKICNkZWZpbmUgRldfQ0FQSU5GT19XUEEgIAkoMSA8PCAwKQorI2RlZmluZSBGV19DQVBJTkZPX1BTICAJCSgxIDw8IDEpCiAjZGVmaW5lIEZXX0NBUElORk9fRklSTVdBUkVfVVBHUkFERQkoMSA8PCAxMykKICNkZWZpbmUgRldfQ0FQSU5GT19CT09UMl9VUEdSQURFCSgxPDwxNCkKICNkZWZpbmUgRldfQ0FQSU5GT19QRVJTSVNURU5UX0NPTkZJRwkoMTw8MTUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IGRkNjgyYzQuLjI3ZTgxZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCkBAIC0xMDksNyArMTA5LDYgQEAKIAl2b2lkICpjYXJkOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9kZXY7IC8qIFZpcnR1YWwgZGV2aWNlICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKnJ0YXBfbmV0X2RldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdC5oCmluZGV4IDI3N2ZmMTkuLmQ0NDU3ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0LmgKQEAgLTY2LDYgKzY2LDcgQEAKICNkZWZpbmUgQ01EXzgwMl8xMV9MRURfR1BJT19DVFJMCQkweDAwNGUKICNkZWZpbmUgQ01EXzgwMl8xMV9FRVBST01fQUNDRVNTCQkweDAwNTkKICNkZWZpbmUgQ01EXzgwMl8xMV9CQU5EX0NPTkZJRwkJCTB4MDA1OAorI2RlZmluZSBDTURfR1NQSV9CVVNfQ09ORklHCQkJMHgwMDVhCiAjZGVmaW5lIENNRF84MDJfMTFEX0RPTUFJTl9JTkZPCQkJMHgwMDViCiAjZGVmaW5lIENNRF84MDJfMTFfS0VZX01BVEVSSUFMCQkJMHgwMDVlCiAjZGVmaW5lIENNRF84MDJfMTFfU0xFRVBfUEFSQU1TCQkJMHgwMDY2CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ob3N0Y21kLmgKaW5kZXggZjZhNzlhNi4uYTg5OWFlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaG9zdGNtZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2hvc3RjbWQuaApAQCAtMjIxLDYgKzIyMSwxNCBAQAogCXU4IG1hY2xpc3RbRVRIX0FMRU4gKiBNUlZEUlZfTUFYX01VTFRJQ0FTVF9MSVNUX1NJWkVdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBjbWRfZHNfZ3NwaV9idXNfY29uZmlnIHsKKwlzdHJ1Y3QgY21kX2hlYWRlciBoZHI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgYnVzX2RlbGF5X21vZGU7CisJX19sZTE2IGhvc3RfdGltZV9kZWxheV90b19yZWFkX3BvcnQ7CisJX19sZTE2IGhvc3RfdGltZV9kZWxheV90b19yZWFkX3JlZ2lzdGVyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBjbWRfZHNfODAyXzExX2F1dGhlbnRpY2F0ZSB7CiAJdTggbWFjYWRkcltFVEhfQUxFTl07CiAJdTggYXV0aHR5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfY3MuYwppbmRleCA4NDJhMDhkLi5jZWRlYWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX2NzLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgewogCQl1OCB2YWwgPSBpZl9jc19yZWFkOChjYXJkLCBhZGRyKTsKIAkJaWYgKHZhbCA9PSByZWcpCi0JCQlyZXR1cm4gaTsKKwkJCXJldHVybiAwOwogCQl1ZGVsYXkoNSk7CiAJfQogCXJldHVybiAtRVRJTUU7CkBAIC00MjEsNyArNDIxLDcgQEAKIAlsZW4gPSBpZl9jc19yZWFkMTYocHJpdi0+Y2FyZCwgSUZfQ1NfUkVBRF9MRU4pOwogCWlmIChsZW4gPT0gMCB8fCBsZW4gPiBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSkgewogCQlsYnNfcHJfZXJyKCJjYXJkIGRhdGEgYnVmZmVyIGhhcyBpbnZhbGlkICMgb2YgYnl0ZXMgKCVkKVxuIiwgbGVuKTsKLQkJcHJpdi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJZ290byBkYXRfZXJyOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc2Rpby5jCmluZGV4IDQ1MTlkNzMuLjc2ZjRjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zZGlvLmMKQEAgLTk1LDYgKzk1LDggQEAKIAogCXNwaW5sb2NrX3QJCWxvY2s7CiAJc3RydWN0IGlmX3NkaW9fcGFja2V0CSpwYWNrZXRzOworCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QJKndvcmtxdWV1ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcGFja2V0X3dvcmtlcjsKIH07CiAKQEAgLTIwOSw2ICsyMTEsOSBAQAogCQlldmVudCA9IHNkaW9fcmVhZGIoY2FyZC0+ZnVuYywgSUZfU0RJT19FVkVOVCwgJnJldCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKKworCQkvKiByaWdodCBzaGlmdCAzIGJpdHMgdG8gZ2V0IHRoZSBldmVudCBpZCAqLworCQlldmVudCA+Pj0gMzsKIAl9IGVsc2UgewogCQlpZiAoc2l6ZSA8IDQpIHsKIAkJCWxic19kZWJfc2RpbygiZXZlbnQgcGFja2V0IHRvbyBzbWFsbCAoJWQgYnl0ZXMpXG4iLApAQCAtNzQzLDcgKzc0OCw3IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAKLQlzY2hlZHVsZV93b3JrKCZjYXJkLT5wYWNrZXRfd29ya2VyKTsKKwlxdWV1ZV93b3JrKGNhcmQtPndvcmtxdWV1ZSwgJmNhcmQtPnBhY2tldF93b3JrZXIpOwogCiAJcmV0ID0gMDsKIApAQCAtODMzLDYgKzgzOCw3IEBACiAJY2FyZC0+ZnVuYyA9IGZ1bmM7CiAJY2FyZC0+bW9kZWwgPSBtb2RlbDsKIAlzcGluX2xvY2tfaW5pdCgmY2FyZC0+bG9jayk7CisJY2FyZC0+d29ya3F1ZXVlID0gY3JlYXRlX3dvcmtxdWV1ZSgibGliZXJ0YXNfc2RpbyIpOwogCUlOSVRfV09SSygmY2FyZC0+cGFja2V0X3dvcmtlciwgaWZfc2Rpb19ob3N0X3RvX2NhcmRfd29ya2VyKTsKIAogCWZvciAoaSA9IDA7aSA8IEFSUkFZX1NJWkUoaWZfc2Rpb19tb2RlbHMpO2krKykgewpAQCAtOTIxLDE1ICs5MjcsMTcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9hY3RpdmF0ZV9jYXJkOwogCisJaWYgKHByaXYtPmZ3Y2FwaW5mbyAmIEZXX0NBUElORk9fUFMpCisJCXByaXYtPnBzX3N1cHBvcnRlZCA9IDE7CisKIG91dDoKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TRElPLCAicmV0ICVkIiwgcmV0KTsKIAogCXJldHVybiByZXQ7CiAKIGVycl9hY3RpdmF0ZV9jYXJkOgotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JZnJlZV9uZXRkZXYocHJpdi0+ZGV2KTsKLQlrZnJlZShwcml2KTsKKwlmbHVzaF93b3JrcXVldWUoY2FyZC0+d29ya3F1ZXVlKTsKKwlsYnNfcmVtb3ZlX2NhcmQocHJpdik7CiByZWNsYWltOgogCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKIHJlbGVhc2VfaW50OgpAQCAtOTM5LDYgKzk0Nyw3IEBACiByZWxlYXNlOgogCXNkaW9fcmVsZWFzZV9ob3N0KGZ1bmMpOwogZnJlZToKKwlkZXN0cm95X3dvcmtxdWV1ZShjYXJkLT53b3JrcXVldWUpOwogCXdoaWxlIChjYXJkLT5wYWNrZXRzKSB7CiAJCXBhY2tldCA9IGNhcmQtPnBhY2tldHM7CiAJCWNhcmQtPnBhY2tldHMgPSBjYXJkLT5wYWNrZXRzLT5uZXh0OwpAQCAtOTY1LDcgKzk3NCw4IEBACiAJbGJzX3N0b3BfY2FyZChjYXJkLT5wcml2KTsKIAlsYnNfcmVtb3ZlX2NhcmQoY2FyZC0+cHJpdik7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZsdXNoX3dvcmtxdWV1ZShjYXJkLT53b3JrcXVldWUpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGNhcmQtPndvcmtxdWV1ZSk7CiAKIAlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CiAJc2Rpb19yZWxlYXNlX2lycShmdW5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDczMTFlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCkBAIC0wLDAgKzEsMTIxOCBAQAorLyoKKyAqCWxpbnV4L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisgKgorICoJRHJpdmVyIGZvciBNYXJ2ZWxsIFNQSSBXTEFOIGNhcmRzLgorICoKKyAqCUNvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKglBdXRob3JzOgorICoJQW5kcmV5IFl1cm92c2t5IDxhbmRyZXlAY296eWJpdC5jb20+CisgKglDb2xpbiBNY0NhYmUgPGNvbGluQGNvenliaXQuY29tPgorICoKKyAqCUluc3BpcmVkIGJ5IGlmX3NkaW8uYywgQ29weXJpZ2h0IDIwMDctMjAwOCBQaWVycmUgT3NzbWFuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvbGliZXJ0YXNfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSAiaG9zdC5oIgorI2luY2x1ZGUgImRlY2wuaCIKKyNpbmNsdWRlICJkZWZzLmgiCisjaW5jbHVkZSAiZGV2LmgiCisjaW5jbHVkZSAiaWZfc3BpLmgiCisKK3N0cnVjdCBpZl9zcGlfcGFja2V0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlsaXN0OworCXUxNgkJCQlibGVuOworCXU4CQkJCWJ1ZmZlclswXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSk7Cit9OworCitzdHJ1Y3QgaWZfc3BpX2NhcmQgeworCXN0cnVjdCBzcGlfZGV2aWNlCQkqc3BpOworCXN0cnVjdCBsYnNfcHJpdmF0ZQkJKnByaXY7CisJc3RydWN0IGxpYmVydGFzX3NwaV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCWNoYXIJCQkJaGVscGVyX2Z3X25hbWVbRklSTVdBUkVfTkFNRV9NQVhdOworCWNoYXIJCQkJbWFpbl9md19uYW1lW0ZJUk1XQVJFX05BTUVfTUFYXTsKKworCS8qIFRoZSBjYXJkIElEIGFuZCBjYXJkIHJldmlzaW9uLCBhcyByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUuICovCisJdTE2CQkJCWNhcmRfaWQ7CisJdTgJCQkJY2FyZF9yZXY7CisKKwkvKiBQaW4gbnVtYmVyIGZvciBvdXIgR1BJTyBjaGlwLXNlbGVjdC4gKi8KKwkvKiBUT0RPOiBPbmNlIHRoZSBnZW5lcmljIFNQSSBsYXllciBoYXMgc29tZSBhZGRpdGlvbmFsIGZlYXR1cmVzLCB3ZQorCSAqIHNob3VsZCB0YWtlIHRoaXMgb3V0IGFuZCB1c2UgdGhlIG5vcm1hbCBjaGlwIHNlbGVjdCBoZXJlLgorCSAqIFdlIG5lZWQgc3VwcG9ydCBmb3IgY2hpcCBzZWxlY3QgZGVsYXlzLCBhbmQgbm90IGRyb3BwaW5nIGNoaXBzZWxlY3QKKwkgKiBhZnRlciBlYWNoIHdvcmQuICovCisJaW50CQkJCWdwaW9fY3M7CisKKwkvKiBUaGUgbGFzdCB0aW1lIHRoYXQgd2UgaW5pdGlhdGVkIGFuIFNQVSBvcGVyYXRpb24gKi8KKwl1bnNpZ25lZCBsb25nCQkJcHJldl94ZmVyX3RpbWU7CisKKwlpbnQJCQkJdXNlX2R1bW15X3dyaXRlczsKKwl1bnNpZ25lZCBsb25nCQkJc3B1X3BvcnRfZGVsYXk7CisJdW5zaWduZWQgbG9uZwkJCXNwdV9yZWdfZGVsYXk7CisKKwkvKiBIYW5kbGVzIGFsbCBTUEkgY29tbXVuaWNhdGlvbiAoZXhjZXB0IGZvciBGVyBsb2FkKSAqLworCXN0cnVjdCB0YXNrX3N0cnVjdAkJKnNwaV90aHJlYWQ7CisJaW50CQkJCXJ1bl90aHJlYWQ7CisKKwkvKiBVc2VkIHRvIHdha2UgdXAgdGhlIHNwaV90aHJlYWQgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlCQlzcGlfcmVhZHk7CisJc3RydWN0IHNlbWFwaG9yZQkJc3BpX3RocmVhZF90ZXJtaW5hdGVkOworCisJdTgJCQkJY21kX2J1ZmZlcltJRl9TUElfQ01EX0JVRl9TSVpFXTsKKworCS8qIEEgYnVmZmVyIG9mIGluY29taW5nIHBhY2tldHMgZnJvbSBsaWJlcnRhcyBjb3JlLgorCSAqIFNpbmNlIHdlIGNhbid0IHNsZWVwIGluIGh3X2hvc3RfdG9fY2FyZCwgd2UgaGF2ZSB0byBidWZmZXIKKwkgKiB0aGVtLiAqLworCXN0cnVjdCBsaXN0X2hlYWQJCWNtZF9wYWNrZXRfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlkYXRhX3BhY2tldF9saXN0OworCisJLyogUHJvdGVjdHMgY21kX3BhY2tldF9saXN0IGFuZCBkYXRhX3BhY2tldF9saXN0ICovCisJc3BpbmxvY2tfdAkJCWJ1ZmZlcl9sb2NrOworfTsKKworc3RhdGljIHZvaWQgZnJlZV9pZl9zcGlfY2FyZChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqY3Vyc29yLCAqbmV4dDsKKwlzdHJ1Y3QgaWZfc3BpX3BhY2tldCAqcGFja2V0OworCisJQlVHX09OKGNhcmQtPnJ1bl90aHJlYWQpOworCWxpc3RfZm9yX2VhY2hfc2FmZShjdXJzb3IsIG5leHQsICZjYXJkLT5jbWRfcGFja2V0X2xpc3QpIHsKKwkJcGFja2V0ID0gY29udGFpbmVyX29mKGN1cnNvciwgc3RydWN0IGlmX3NwaV9wYWNrZXQsIGxpc3QpOworCQlsaXN0X2RlbCgmcGFja2V0LT5saXN0KTsKKwkJa2ZyZWUocGFja2V0KTsKKwl9CisJbGlzdF9mb3JfZWFjaF9zYWZlKGN1cnNvciwgbmV4dCwgJmNhcmQtPmRhdGFfcGFja2V0X2xpc3QpIHsKKwkJcGFja2V0ID0gY29udGFpbmVyX29mKGN1cnNvciwgc3RydWN0IGlmX3NwaV9wYWNrZXQsIGxpc3QpOworCQlsaXN0X2RlbCgmcGFja2V0LT5saXN0KTsKKwkJa2ZyZWUocGFja2V0KTsKKwl9CisJc3BpX3NldF9kcnZkYXRhKGNhcmQtPnNwaSwgTlVMTCk7CisJa2ZyZWUoY2FyZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hpcF9pZGVudCBjaGlwX2lkX3RvX2RldmljZV9uYW1lW10gPSB7CisJeyAuY2hpcF9pZCA9IDB4MDQsIC5uYW1lID0gODM4NSB9LAorCXsgLmNoaXBfaWQgPSAweDBiLCAubmFtZSA9IDg2ODYgfSwKK307CisKKy8qCisgKiBTUEkgSW50ZXJmYWNlIFVuaXQgUm91dGluZXMKKyAqCisgKiBUaGUgU1BVIHNpdHMgYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIFdMQU4gbW9kdWxlLgorICogQWxsIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZmlybXdhcmUgaXMgdGhyb3VnaCBTUFUgdHJhbnNhY3Rpb25zLgorICoKKyAqIEZpcnN0IHdlIGhhdmUgdG8gcHV0IGEgU1BVIHJlZ2lzdGVyIG5hbWUgb24gdGhlIGJ1cy4gVGhlbiB3ZSBjYW4KKyAqIGVpdGhlciByZWFkIGZyb20gb3Igd3JpdGUgdG8gdGhhdCByZWdpc3Rlci4KKyAqCisgKiBGb3IgMTYtYml0IHRyYW5zYWN0aW9ucywgYnl0ZSBvcmRlciBvbiB0aGUgYnVzIGlzIGJpZy1lbmRpYW4uCisgKiBXZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoYXQgaGVyZSwgdGhvdWdoLgorICogVGhlIHRyYW5zbGF0aW9uIHRha2VzIHBsYWNlIGluIHRoZSBTUEkgcm91dGluZXMuCisgKi8KKworc3RhdGljIHZvaWQgc3B1X3RyYW5zYWN0aW9uX2luaXQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWlmICghdGltZV9hZnRlcihqaWZmaWVzLCBjYXJkLT5wcmV2X3hmZXJfdGltZSArIDEpKSB7CisJCS8qIFVuZm9ydHVuYXRlbHksIHRoZSBTUFUgcmVxdWlyZXMgYSBkZWxheSBiZXR3ZWVuIHN1Y2Nlc3NpdmUKKwkJICogdHJhbnNhY3Rpb25zLiBJZiBvdXIgbGFzdCB0cmFuc2FjdGlvbiB3YXMgbW9yZSB0aGFuIGEgamlmZnkKKwkJICogYWdvLCB3ZSBoYXZlIG9idmlvdXNseSBhbHJlYWR5IGRlbGF5ZWQgZW5vdWdoLgorCQkgKiBJZiBub3QsIHdlIGhhdmUgdG8gYnVzeS13YWl0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuICovCisJCW5kZWxheSg0MDApOworCX0KKwlncGlvX3NldF92YWx1ZShjYXJkLT5ncGlvX2NzLCAwKTsgLyogYXNzZXJ0IENTICovCit9CisKK3N0YXRpYyB2b2lkIHNwdV90cmFuc2FjdGlvbl9maW5pc2goc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWdwaW9fc2V0X3ZhbHVlKGNhcmQtPmdwaW9fY3MsIDEpOyAvKiBkcm9wIENTICovCisJY2FyZC0+cHJldl94ZmVyX3RpbWUgPSBqaWZmaWVzOworfQorCisvKiBXcml0ZSBvdXQgYSBieXRlIGJ1ZmZlciB0byBhbiBTUEkgcmVnaXN0ZXIsCisgKiB1c2luZyBhIHNlcmllcyBvZiAxNi1iaXQgdHJhbnNmZXJzLiAqLworc3RhdGljIGludCBzcHVfd3JpdGUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCBjb25zdCB1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCBlcnIgPSAwOworCXUxNiByZWdfb3V0ID0gcmVnIHwgSUZfU1BJX1dSSVRFX09QRVJBVElPTl9NQVNLOworCisJLyogWW91IG11c3QgZ2l2ZSBhbiBldmVuIG51bWJlciBvZiBieXRlcyB0byB0aGUgU1BVLCBldmVuIGlmIGl0CisJICogZG9lc24ndCBjYXJlIGFib3V0IHRoZSBsYXN0IG9uZS4gICovCisJQlVHX09OKGxlbiAmIDB4MSk7CisKKwlzcHVfdHJhbnNhY3Rpb25faW5pdChjYXJkKTsKKworCS8qIHdyaXRlIFNQVSByZWdpc3RlciBpbmRleCAqLworCWVyciA9IHNwaV93cml0ZShjYXJkLT5zcGksICh1OCAqKSZyZWdfb3V0LCBzaXplb2YodTE2KSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBzcGlfd3JpdGUoY2FyZC0+c3BpLCBidWYsIGxlbik7CisKK291dDoKKwlzcHVfdHJhbnNhY3Rpb25fZmluaXNoKGNhcmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNwdV93cml0ZV91MTYoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MTYgdmFsKQoreworCXJldHVybiBzcHVfd3JpdGUoY2FyZCwgcmVnLCAodTggKikmdmFsLCBzaXplb2YodTE2KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNwdV93cml0ZV91MzIoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCB1MTYgcmVnLCB1MzIgdmFsKQoreworCS8qIFRoZSBsb3dlciAxNiBiaXRzIGFyZSB3cml0dGVuIGZpcnN0LiAqLworCXUxNiBvdXRbMl07CisJb3V0WzBdID0gdmFsICYgMHhmZmZmOworCW91dFsxXSA9ICh2YWwgJiAweGZmZmYwMDAwKSA+PiAxNjsKKwlyZXR1cm4gc3B1X3dyaXRlKGNhcmQsIHJlZywgKHU4ICopJm91dCwgc2l6ZW9mKHUzMikpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzcHVfcmVnX2lzX3BvcnRfcmVnKHUxNiByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIElGX1NQSV9JT19SRFdSUE9SVF9SRUc6CisJY2FzZSBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRzoKKwljYXNlIElGX1NQSV9EQVRBX1JEV1JQT1JUX1JFRzoKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IHNwdV9yZWFkKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTE2IHJlZywgdTggKmJ1ZiwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgZGVsYXk7CisJaW50IGVyciA9IDA7CisJdTE2IHplcm8gPSAwOworCXUxNiByZWdfb3V0ID0gcmVnIHwgSUZfU1BJX1JFQURfT1BFUkFUSU9OX01BU0s7CisKKwkvKiBZb3UgbXVzdCB0YWtlIGFuIGV2ZW4gbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIFNQVSwgZXZlbiBpZiB5b3UKKwkgKiBkb24ndCBjYXJlIGFib3V0IHRoZSBsYXN0IG9uZS4gICovCisJQlVHX09OKGxlbiAmIDB4MSk7CisKKwlzcHVfdHJhbnNhY3Rpb25faW5pdChjYXJkKTsKKworCS8qIHdyaXRlIFNQVSByZWdpc3RlciBpbmRleCAqLworCWVyciA9IHNwaV93cml0ZShjYXJkLT5zcGksICh1OCAqKSZyZWdfb3V0LCBzaXplb2YodTE2KSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlkZWxheSA9IHNwdV9yZWdfaXNfcG9ydF9yZWcocmVnKSA/IGNhcmQtPnNwdV9wb3J0X2RlbGF5IDoKKwkJCQkJCWNhcmQtPnNwdV9yZWdfZGVsYXk7CisJaWYgKGNhcmQtPnVzZV9kdW1teV93cml0ZXMpIHsKKwkJLyogQ2xvY2sgaW4gZHVtbXkgY3ljbGVzIHdoaWxlIHRoZSBTUFUgZmlsbHMgdGhlIEZJRk8gKi8KKwkJZm9yIChpID0gMDsgaSA8IGRlbGF5IC8gMTY7ICsraSkgeworCQkJZXJyID0gc3BpX3dyaXRlKGNhcmQtPnNwaSwgKHU4ICopJnplcm8sIHNpemVvZih1MTYpKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEJ1c3ktd2FpdCB3aGlsZSB0aGUgU1BVIGZpbGxzIHRoZSBGSUZPICovCisJCW5kZWxheSgxMDAgKyAoZGVsYXkgKiAxMCkpOworCX0KKworCS8qIHJlYWQgaW4gZGF0YSAqLworCWVyciA9IHNwaV9yZWFkKGNhcmQtPnNwaSwgYnVmLCBsZW4pOworCitvdXQ6CisJc3B1X3RyYW5zYWN0aW9uX2ZpbmlzaChjYXJkKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBSZWFkIDE2IGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNwdV9yZWFkX3UxNihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUxNiAqdmFsKQoreworCXJldHVybiBzcHVfcmVhZChjYXJkLCByZWcsICh1OCAqKXZhbCwgc2l6ZW9mKHUxNikpOworfQorCisvKiBSZWFkIDMyIGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIuCisgKiBUaGUgbG93IDE2IGJpdHMgYXJlIHJlYWQgZmlyc3QuICovCitzdGF0aWMgaW50IHNwdV9yZWFkX3UzMihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsIHUzMiAqdmFsKQoreworCXUxNiBidWZbMl07CisJaW50IGVycjsKKwllcnIgPSBzcHVfcmVhZChjYXJkLCByZWcsICh1OCAqKWJ1Ziwgc2l6ZW9mKHUzMikpOworCWlmICghZXJyKQorCQkqdmFsID0gYnVmWzBdIHwgKGJ1ZlsxXSA8PCAxNik7CisJcmV0dXJuIGVycjsKK30KKworLyogS2VlcCByZWFkaW5nIDE2IGJpdHMgZnJvbSBhbiBTUEkgcmVnaXN0ZXIgdW50aWwgeW91IGdldCB0aGUgY29ycmVjdCByZXN1bHQuCisgKgorICogSWYgbWFzayA9IDAsIHRoZSBjb3JyZWN0IHJlc3VsdCBpcyBhbnkgbm9uLXplcm8gbnVtYmVyLgorICogSWYgbWFzayAhPSAwLCB0aGUgY29ycmVjdCByZXN1bHQgaXMgYW55IG51bWJlciB3aGVyZQorICogbnVtYmVyICYgdGFyZ2V0X21hc2sgPT0gdGFyZ2V0CisgKgorICogUmV0dXJucyAtRVRJTUVET1VUIGlmIGEgc2Vjb25kIHBhc3NlcyB3aXRob3V0IHRoZSBjb3JyZWN0IHJlc3VsdC4gKi8KK3N0YXRpYyBpbnQgc3B1X3dhaXRfZm9yX3UxNihzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiByZWcsCisJCQl1MTYgdGFyZ2V0X21hc2ssIHUxNiB0YXJnZXQpCit7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgNSpIWjsKKwl3aGlsZSAoMSkgeworCQl1MTYgdmFsOworCQllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgcmVnLCAmdmFsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWlmICh0YXJnZXRfbWFzaykgeworCQkJaWYgKCh2YWwgJiB0YXJnZXRfbWFzaykgPT0gdGFyZ2V0KQorCQkJCXJldHVybiAwOworCQl9IGVsc2UgeworCQkJaWYgKHZhbCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQl1ZGVsYXkoMTAwKTsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWxic19wcl9lcnIoIiVzOiB0aW1lb3V0IHdpdGggdmFsPSUwMngsICIKKwkJCSAgICAgICAidGFyZ2V0X21hc2s9JTAyeCwgdGFyZ2V0PSUwMnhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIHZhbCwgdGFyZ2V0X21hc2ssIHRhcmdldCk7CisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJfQorCX0KK30KKworLyogUmVhZCAxNiBiaXRzIGZyb20gYW4gU1BJIHJlZ2lzdGVyIHVudGlsIHlvdSByZWNlaXZlIGEgc3BlY2lmaWMgdmFsdWUuCisgKiBSZXR1cm5zIC1FVElNRURPVVQgaWYgYSA0IHRyaWVzIHBhc3Mgd2l0aG91dCBzdWNjZXNzLiAqLworc3RhdGljIGludCBzcHVfd2FpdF9mb3JfdTMyKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwgdTMyIHJlZywgdTMyIHRhcmdldCkKK3sKKwlpbnQgZXJyLCB0cnk7CisJZm9yICh0cnkgPSAwOyB0cnkgPCA0OyArK3RyeSkgeworCQl1MzIgdmFsID0gMDsKKwkJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIHJlZywgJnZhbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAodmFsID09IHRhcmdldCkKKwkJCXJldHVybiAwOworCQltZGVsYXkoMTAwKTsKKwl9CisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQgc3B1X3NldF9pbnRlcnJ1cHRfbW9kZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsCisJCQkgICBpbnQgc3VwcHJlc3NfaG9zdF9pbnQsCisJCQkgICBpbnQgYXV0b19pbnQpCit7CisJaW50IGVyciA9IDA7CisKKwkvKiBXZSBjYW4gc3VwcHJlc3MgYSBob3N0IGludGVycnVwdCBieSBjbGVhcmluZyB0aGUgYXBwcm9wcmlhdGUKKwkgKiBiaXQgaW4gdGhlICJob3N0IGludGVycnVwdCBzdGF0dXMgbWFzayIgcmVnaXN0ZXIgKi8KKwlpZiAoc3VwcHJlc3NfaG9zdF9pbnQpIHsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHLCAwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfSBlbHNlIHsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHLAorCQkJICAgICAgSUZfU1BJX0hJU01fVFhfRE9XTkxPQURfUkRZIHwKKwkJCSAgICAgIElGX1NQSV9ISVNNX1JYX1VQTE9BRF9SRFkgfAorCQkJICAgICAgSUZfU1BJX0hJU01fQ01EX0RPV05MT0FEX1JEWSB8CisJCQkgICAgICBJRl9TUElfSElTTV9DQVJERVZFTlQgfAorCQkJICAgICAgSUZfU1BJX0hJU01fQ01EX1VQTE9BRF9SRFkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBJZiBhdXRvLWludGVycnVwdHMgYXJlIG9uLCB0aGUgY29tcGxldGlvbiBvZiBjZXJ0YWluIHRyYW5zYWN0aW9ucworCSAqIHdpbGwgdHJpZ2dlciBhbiBpbnRlcnJ1cHQgYXV0b21hdGljYWxseS4gSWYgYXV0by1pbnRlcnJ1cHRzCisJICogYXJlIG9mZiwgd2UgbmVlZCB0byBzZXQgdGhlICJDYXJkIEludGVycnVwdCBDYXVzZSIgcmVnaXN0ZXIgdG8KKwkgKiB0cmlnZ2VyIGEgY2FyZCBpbnRlcnJ1cHQuICovCisJaWYgKGF1dG9faW50KSB7CisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX0NUUkxfUkVHLAorCQkJCUlGX1NQSV9ISUNUX1RYX0RPV05MT0FEX09WRVJfQVVUTyB8CisJCQkJSUZfU1BJX0hJQ1RfUlhfVVBMT0FEX09WRVJfQVVUTyB8CisJCQkJSUZfU1BJX0hJQ1RfQ01EX0RPV05MT0FEX09WRVJfQVVUTyB8CisJCQkJSUZfU1BJX0hJQ1RfQ01EX1VQTE9BRF9PVkVSX0FVVE8pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9IGVsc2UgeworCQllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfTUFTS19SRUcsIDApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzcHVfZ2V0X2NoaXBfcmV2aXNpb24oc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAorCQkJCSAgdTE2ICpjYXJkX2lkLCB1OCAqY2FyZF9yZXYpCit7CisJaW50IGVyciA9IDA7CisJdTMyIGRldl9jdHJsOworCWVyciA9IHNwdV9yZWFkX3UzMihjYXJkLCBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUcsICZkZXZfY3RybCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkqY2FyZF9pZCA9IElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFR19UT19DQVJEX0lEKGRldl9jdHJsKTsKKwkqY2FyZF9yZXYgPSBJRl9TUElfREVWSUNFSURfQ1RSTF9SRUdfVE9fQ0FSRF9SRVYoZGV2X2N0cmwpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc3B1X3NldF9idXNfbW9kZShzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQsIHUxNiBtb2RlKQoreworCWludCBlcnIgPSAwOworCXUxNiBydmFsOworCS8qIHNldCBidXMgbW9kZSAqLworCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX1NQVV9CVVNfTU9ERV9SRUcsIG1vZGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJLyogQ2hlY2sgdGhhdCB3ZSB3ZXJlIGFibGUgdG8gcmVhZCBiYWNrIHdoYXQgd2UganVzdCB3cm90ZS4gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NQVV9CVVNfTU9ERV9SRUcsICZydmFsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmIChydmFsICE9IG1vZGUpIHsKKwkJbGJzX3ByX2VycigiQ2FuJ3QgcmVhZCBidXMgbW9kZSByZWdpc3Rlci5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3B1X2luaXQoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLCBpbnQgdXNlX2R1bW15X3dyaXRlcykKK3sKKwlpbnQgZXJyID0gMDsKKwl1MzIgZGVsYXk7CisKKwkvKiBXZSBoYXZlIHRvIHN0YXJ0IHVwIGluIHRpbWVkIGRlbGF5IG1vZGUgc28gdGhhdCB3ZSBjYW4gc2FmZWx5CisJICogcmVhZCB0aGUgRGVsYXkgUmVhZCBSZWdpc3Rlci4gKi8KKwljYXJkLT51c2VfZHVtbXlfd3JpdGVzID0gMDsKKwllcnIgPSBzcHVfc2V0X2J1c19tb2RlKGNhcmQsCisJCQkJSUZfU1BJX0JVU19NT0RFX1NQSV9DTE9DS19QSEFTRV9SSVNJTkcgfAorCQkJCUlGX1NQSV9CVVNfTU9ERV9ERUxBWV9NRVRIT0RfVElNRUQgfAorCQkJCUlGX1NQSV9CVVNfTU9ERV8xNl9CSVRfQUREUkVTU18xNl9CSVRfREFUQSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwljYXJkLT5zcHVfcG9ydF9kZWxheSA9IDEwMDA7CisJY2FyZC0+c3B1X3JlZ19kZWxheSA9IDEwMDA7CisJZXJyID0gc3B1X3JlYWRfdTMyKGNhcmQsIElGX1NQSV9ERUxBWV9SRUFEX1JFRywgJmRlbGF5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWNhcmQtPnNwdV9wb3J0X2RlbGF5ID0gZGVsYXkgJiAweDAwMDBmZmZmOworCWNhcmQtPnNwdV9yZWdfZGVsYXkgPSAoZGVsYXkgJiAweGZmZmYwMDAwKSA+PiAxNjsKKworCS8qIElmIGR1bW15IGNsb2NrIGRlbGF5IG1vZGUgaGFzIGJlZW4gcmVxdWVzdGVkLCBzd2l0Y2ggdG8gaXQgbm93ICovCisJaWYgKHVzZV9kdW1teV93cml0ZXMpIHsKKwkJY2FyZC0+dXNlX2R1bW15X3dyaXRlcyA9IDE7CisJCWVyciA9IHNwdV9zZXRfYnVzX21vZGUoY2FyZCwKKwkJCQlJRl9TUElfQlVTX01PREVfU1BJX0NMT0NLX1BIQVNFX1JJU0lORyB8CisJCQkJSUZfU1BJX0JVU19NT0RFX0RFTEFZX01FVEhPRF9EVU1NWV9DTE9DSyB8CisJCQkJSUZfU1BJX0JVU19NT0RFXzE2X0JJVF9BRERSRVNTXzE2X0JJVF9EQVRBKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJbGJzX2RlYl9zcGkoIkluaXRpYWxpemVkIFNQVSB1bml0LiAiCisJCSAgICAic3B1X3BvcnRfZGVsYXk9MHglMDRseCwgc3B1X3JlZ19kZWxheT0weCUwNGx4XG4iLAorCQkgICAgY2FyZC0+c3B1X3BvcnRfZGVsYXksIGNhcmQtPnNwdV9yZWdfZGVsYXkpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBGaXJtd2FyZSBMb2FkaW5nCisgKi8KKworc3RhdGljIGludCBpZl9zcGlfcHJvZ19oZWxwZXJfZmlybXdhcmUoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCWludCBlcnIgPSAwOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUgPSBOVUxMOworCWludCBieXRlc19yZW1haW5pbmc7CisJY29uc3QgdTggKmZ3OworCXU4IHRlbXBbSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1pdOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBjYXJkLT5zcGk7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKworCWVyciA9IHNwdV9zZXRfaW50ZXJydXB0X21vZGUoY2FyZCwgMSwgMCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJLyogR2V0IGhlbHBlciBmaXJtd2FyZSBpbWFnZSAqLworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCBjYXJkLT5oZWxwZXJfZndfbmFtZSwgJnNwaS0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWxic19wcl9lcnIoInJlcXVlc3RfZmlybXdhcmUgZmFpbGVkIHdpdGggZXJyID0gJWRcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKwlieXRlc19yZW1haW5pbmcgPSBmaXJtd2FyZS0+c2l6ZTsKKwlmdyA9IGZpcm13YXJlLT5kYXRhOworCisJLyogTG9hZCBoZWxwZXIgZmlybXdhcmUgaW1hZ2UgKi8KKwl3aGlsZSAoYnl0ZXNfcmVtYWluaW5nID4gMCkgeworCQkvKiBTY3JhdGNoIHBhZCAxIHNob3VsZCBjb250YWluIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UKKwkJICogd2FudCB0byBkb3dubG9hZCB0byB0aGUgZmlybXdhcmUgKi8KKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywKKwkJCQkJSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1opOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCisJCWVyciA9IHNwdV93YWl0X2Zvcl91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsCisJCQkJCUlGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFksCisJCQkJCUlGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFkpOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCisJCS8qIEZlZWQgdGhlIGRhdGEgaW50byB0aGUgY29tbWFuZCByZWFkL3dyaXRlIHBvcnQgcmVnCisJCSAqIGluIGNodW5rcyBvZiA2NCBieXRlcyAqLworCQltZW1zZXQodGVtcCwgMCwgc2l6ZW9mKHRlbXApKTsKKwkJbWVtY3B5KHRlbXAsIGZ3LAorCQkgICAgICAgbWluKGJ5dGVzX3JlbWFpbmluZywgSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1opKTsKKwkJbWRlbGF5KDEwKTsKKwkJZXJyID0gc3B1X3dyaXRlKGNhcmQsIElGX1NQSV9DTURfUkRXUlBPUlRfUkVHLAorCQkJCQl0ZW1wLCBIRUxQRVJfRldfTE9BRF9DSFVOS19TWik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisKKwkJLyogSW50ZXJydXB0IHRoZSBib290IGNvZGUgKi8KKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywgMCk7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRywKKwkJCQkgICAgICAgSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCWJ5dGVzX3JlbWFpbmluZyAtPSBIRUxQRVJfRldfTE9BRF9DSFVOS19TWjsKKwkJZncgKz0gSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1o7CisJfQorCisJLyogT25jZSB0aGUgaGVscGVyIC8gc2luZ2xlIHN0YWdlIGZpcm13YXJlIGRvd25sb2FkIGlzIGNvbXBsZXRlLAorCSAqIHdyaXRlIDAgdG8gc2NyYXRjaCBwYWQgMSBhbmQgaW50ZXJydXB0IHRoZQorCSAqIGJvb3Rsb2FkZXIuIFRoaXMgY29tcGxldGVzIHRoZSBoZWxwZXIgZG93bmxvYWQuICovCisJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfU0NSQVRDSF8xX1JFRywgRklSTVdBUkVfRE5MRF9PSyk7CisJaWYgKGVycikKKwkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsIDApOworCWlmIChlcnIpCisJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwllcnIgPSBzcHVfd3JpdGVfdTE2KGNhcmQsIElGX1NQSV9DQVJEX0lOVF9DQVVTRV9SRUcsCisJCQkJSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUik7CisJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKworCWxic19kZWJfc3BpKCJ3YWl0aW5nIGZvciBoZWxwZXIgdG8gYm9vdC4uLlxuIik7CisKK3JlbGVhc2VfZmlybXdhcmU6CisJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7CitvdXQ6CisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGxvYWQgaGVscGVyIGZpcm13YXJlIChlcnI9JWQpXG4iLCBlcnIpOworCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NQSSwgImVyciAlZCIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworLyogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBuZXh0IHBhY2tldCB0aGUgZmlybXdhcmUgZXhwZWN0cyB1cyB0byBzZW5kCisgKiBTZXRzIGNyY19lcnIgaWYgdGhlIHByZXZpb3VzIHRyYW5zZmVyIGhhZCBhIENSQyBlcnJvci4gKi8KK3N0YXRpYyBpbnQgaWZfc3BpX3Byb2dfbWFpbl9maXJtd2FyZV9jaGVja19sZW4oc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkLAorCQkJCQkJaW50ICpjcmNfZXJyKQoreworCXUxNiBsZW47CisJaW50IGVyciA9IDA7CisKKwkvKiB3YWl0IHVudGlsIHRoZSBob3N0IGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgaW5kaWNhdGVzCisJICogdGhhdCB3ZSBhcmUgcmVhZHkgdG8gZG93bmxvYWQgKi8KKwllcnIgPSBzcHVfd2FpdF9mb3JfdTE2KGNhcmQsIElGX1NQSV9IT1NUX0lOVF9TVEFUVVNfUkVHLAorCQkJCUlGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFksCisJCQkJSUZfU1BJX0hJU1RfQ01EX0RPV05MT0FEX1JEWSk7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgaG9zdF9pbnRfc3RhdHVzXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBBc2sgdGhlIGRldmljZSBob3cgbWFueSBieXRlcyBvZiBmaXJtd2FyZSBpdCB3YW50cy4gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsICZsZW4pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAobGVuID4gSUZfU1BJX0NNRF9CVUZfU0laRSkgeworCQlsYnNfcHJfZXJyKCJmaXJtd2FyZSBsb2FkIGRldmljZSByZXF1ZXN0ZWQgYSBsYXJnZXIgIgorCQkJICAgInRyYW5mZXIgdGhhbiB3ZSBhcmUgcHJlcGFyZWQgdG8gIgorCQkJICAgImhhbmRsZS4gKGxlbiA9ICVkKVxuIiwgbGVuKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChsZW4gJiAweDEpIHsKKwkJbGJzX2RlYl9zcGkoIiVzOiBjcmMgZXJyb3JcbiIsIF9fZnVuY19fKTsKKwkJbGVuICY9IH4weDE7CisJCSpjcmNfZXJyID0gMTsKKwl9IGVsc2UKKwkJKmNyY19lcnIgPSAwOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBpZl9zcGlfcHJvZ19tYWluX2Zpcm13YXJlKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlpbnQgbGVuLCBwcmV2X2xlbjsKKwlpbnQgYnl0ZXMsIGNyY19lcnIgPSAwLCBlcnIgPSAwOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUgPSBOVUxMOworCWNvbnN0IHU4ICpmdzsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gY2FyZC0+c3BpOworCXUxNiBudW1fY3JjX2VycnM7CisKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKworCWVyciA9IHNwdV9zZXRfaW50ZXJydXB0X21vZGUoY2FyZCwgMSwgMCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBHZXQgZmlybXdhcmUgaW1hZ2UgKi8KKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgY2FyZC0+bWFpbl9md19uYW1lLCAmc3BpLT5kZXYpOworCWlmIChlcnIpIHsKKwkJbGJzX3ByX2VycigiJXM6IGNhbid0IGdldCBmaXJtd2FyZSAnJXMnIGZyb20ga2VybmVsLiAiCisJCQkiZXJyID0gJWRcbiIsIF9fZnVuY19fLCBjYXJkLT5tYWluX2Z3X25hbWUsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IHNwdV93YWl0X2Zvcl91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsIDAsIDApOworCWlmIChlcnIpIHsKKwkJbGJzX3ByX2VycigiJXM6IHRpbWVkIG91dCB3YWl0aW5nIGZvciBpbml0aWFsICIKKwkJCSAgICJzY3JhdGNoIHJlZyA9IDBcbiIsIF9fZnVuY19fKTsKKwkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCX0KKworCW51bV9jcmNfZXJycyA9IDA7CisJcHJldl9sZW4gPSAwOworCWJ5dGVzID0gZmlybXdhcmUtPnNpemU7CisJZncgPSBmaXJtd2FyZS0+ZGF0YTsKKwl3aGlsZSAoKGxlbiA9IGlmX3NwaV9wcm9nX21haW5fZmlybXdhcmVfY2hlY2tfbGVuKGNhcmQsICZjcmNfZXJyKSkpIHsKKwkJaWYgKGxlbiA8IDApIHsKKwkJCWVyciA9IGxlbjsKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJfQorCQlpZiAoYnl0ZXMgPCAwKSB7CisJCQkvKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBieXRlcyBsZWZ0LCB3ZSB3b3VsZCBub3JtYWxseQorCQkJICogZXhwZWN0IHRvIGhhdmUgdGVybWluYXRlZCB3aXRoIGxlbiA9IDAgKi8KKwkJCWxic19wcl9lcnIoIkZpcm13YXJlIGxvYWQgd2FudHMgbW9yZSBieXRlcyAiCisJCQkJICAgInRoYW4gd2UgaGF2ZSB0byBvZmZlci5cbiIpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNyY19lcnIpIHsKKwkJCS8qIFByZXZpb3VzIHRyYW5zZmVyIGZhaWxlZC4gKi8KKwkJCWlmICgrK251bV9jcmNfZXJycyA+IE1BWF9NQUlOX0ZXX0xPQURfQ1JDX0VSUikgeworCQkJCWxic19wcl9lcnIoIlRvbyBtYW55IENSQyBlcnJvcnMgZW5jb3VudGVyZWQgIgorCQkJCQkgICAiaW4gZmlybXdhcmUgbG9hZC5cbiIpOworCQkJCWVyciA9IC1FSU87CisJCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogUHJldmlvdXMgdHJhbnNmZXIgc3VjY2VlZGVkLiBBZHZhbmNlIGNvdW50ZXJzLiAqLworCQkJYnl0ZXMgLT0gcHJldl9sZW47CisJCQlmdyArPSBwcmV2X2xlbjsKKwkJfQorCQlpZiAoYnl0ZXMgPCBsZW4pIHsKKwkJCW1lbXNldChjYXJkLT5jbWRfYnVmZmVyLCAwLCBsZW4pOworCQkJbWVtY3B5KGNhcmQtPmNtZF9idWZmZXIsIGZ3LCBieXRlcyk7CisJCX0gZWxzZQorCQkJbWVtY3B5KGNhcmQtPmNtZF9idWZmZXIsIGZ3LCBsZW4pOworCisJCWVyciA9IHNwdV93cml0ZV91MTYoY2FyZCwgSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcsIDApOworCQlpZiAoZXJyKQorCQkJZ290byByZWxlYXNlX2Zpcm13YXJlOworCQllcnIgPSBzcHVfd3JpdGUoY2FyZCwgSUZfU1BJX0NNRF9SRFdSUE9SVF9SRUcsCisJCQkJY2FyZC0+Y21kX2J1ZmZlciwgbGVuKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcmVsZWFzZV9maXJtd2FyZTsKKwkJZXJyID0gc3B1X3dyaXRlX3UxNihjYXJkLCBJRl9TUElfQ0FSRF9JTlRfQ0FVU0VfUkVHICwKKwkJCQkJSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUik7CisJCWlmIChlcnIpCisJCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJCXByZXZfbGVuID0gbGVuOworCX0KKwlpZiAoYnl0ZXMgPiBwcmV2X2xlbikgeworCQlsYnNfcHJfZXJyKCJmaXJtd2FyZSBsb2FkIHdhbnRzIGZld2VyIGJ5dGVzIHRoYW4gIgorCQkJICAgIndlIGhhdmUgdG8gb2ZmZXIuXG4iKTsKKwl9CisKKwkvKiBDb25maXJtIGZpcm13YXJlIGRvd25sb2FkICovCisJZXJyID0gc3B1X3dhaXRfZm9yX3UzMihjYXJkLCBJRl9TUElfU0NSQVRDSF80X1JFRywKKwkJCQkJU1VDQ0VTU0ZVTF9GV19ET1dOTE9BRF9NQUdJQyk7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCJmYWlsZWQgdG8gY29uZmlybSB0aGUgZmlybXdhcmUgZG93bmxvYWRcbiIpOworCQlnb3RvIHJlbGVhc2VfZmlybXdhcmU7CisJfQorCityZWxlYXNlX2Zpcm13YXJlOgorCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworCitvdXQ6CisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiZmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgKGVycj0lZClcbiIsIGVycik7CisJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfU1BJLCAiZXJyICVkIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogU1BJIFRyYW5zZmVyIFRocmVhZAorICoKKyAqIFRoZSBTUEkgdGhyZWFkIGhhbmRsZXMgYWxsIFNQSSB0cmFuc2ZlcnMsIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgbG9jay4KKyAqLworCisvKiBNb3ZlIGEgY29tbWFuZCBmcm9tIHRoZSBjYXJkIHRvIHRoZSBob3N0ICovCitzdGF0aWMgaW50IGlmX3NwaV9jMmhfY21kKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYgPSBjYXJkLT5wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IDA7CisJdTE2IGxlbjsKKwl1OCBpOworCisJLyogV2UgbmVlZCBhIGJ1ZmZlciBiaWcgZW5vdWdoIHRvIGhhbmRsZSB3aGF0ZXZlciBwZW9wbGUgc2VuZCB0bworCSAqIGh3X2hvc3RfdG9fY2FyZCAqLworCUJVSUxEX0JVR19PTihJRl9TUElfQ01EX0JVRl9TSVpFIDwgTEJTX0NNRF9CVUZGRVJfU0laRSk7CisJQlVJTERfQlVHX09OKElGX1NQSV9DTURfQlVGX1NJWkUgPCBMQlNfVVBMRF9TSVpFKTsKKworCS8qIEl0J3MganVzdCBhbm5veWluZyBpZiB0aGUgYnVmZmVyIHNpemUgaXNuJ3QgYSBtdWx0aXBsZSBvZiA0LCBiZWNhdXNlCisJICogdGhlbiB3ZSBtaWdodCBoYXZlIGxlbiA8ICBJRl9TUElfQ01EX0JVRl9TSVpFIGJ1dAorCSAqIEFMSUdOKGxlbiwgNCkgPiBJRl9TUElfQ01EX0JVRl9TSVpFICovCisJQlVJTERfQlVHX09OKElGX1NQSV9DTURfQlVGX1NJWkUgJSA0ICE9IDApOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisKKwkvKiBIb3cgbWFueSBieXRlcyBhcmUgdGhlcmUgdG8gcmVhZD8gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMl9SRUcsICZsZW4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmICghbGVuKSB7CisJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogY2FyZCBoYXMgbm8gZGF0YSBmb3IgaG9zdFxuIiwKKwkJCSAgIF9fZnVuY19fKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChsZW4gPiBJRl9TUElfQ01EX0JVRl9TSVpFKSB7CisJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogcmVzcG9uc2UgcGFja2V0IHRvbyBsYXJnZTogIgorCQkJICAgIiVkIGJ5dGVzLCBidXQgbWF4aW11bSBpcyAlZFxuIiwKKwkJCSAgIF9fZnVuY19fLCBsZW4sIElGX1NQSV9DTURfQlVGX1NJWkUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBSZWFkIHRoZSBkYXRhIGZyb20gdGhlIFdMQU4gbW9kdWxlIGludG8gb3VyIGNvbW1hbmQgYnVmZmVyICovCisJZXJyID0gc3B1X3JlYWQoY2FyZCwgSUZfU1BJX0NNRF9SRFdSUE9SVF9SRUcsCisJCQkJY2FyZC0+Y21kX2J1ZmZlciwgQUxJR04obGVuLCA0KSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwlpID0gKHByaXYtPnJlc3BfaWR4ID09IDApID8gMSA6IDA7CisJQlVHX09OKHByaXYtPnJlc3BfbGVuW2ldKTsKKwlwcml2LT5yZXNwX2xlbltpXSA9IGxlbjsKKwltZW1jcHkocHJpdi0+cmVzcF9idWZbaV0sIGNhcmQtPmNtZF9idWZmZXIsIGxlbik7CisJbGJzX25vdGlmeV9jb21tYW5kX3Jlc3BvbnNlKHByaXYsIGkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCIlczogZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBNb3ZlIGRhdGEgZnJvbSB0aGUgY2FyZCB0byB0aGUgaG9zdCAqLworc3RhdGljIGludCBpZl9zcGlfYzJoX2RhdGEoc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJY2hhciAqZGF0YTsKKwl1MTYgbGVuOworCWludCBlcnIgPSAwOworCisJbGJzX2RlYl9lbnRlcihMQlNfREVCX1NQSSk7CisKKwkvKiBIb3cgbWFueSBieXRlcyBhcmUgdGhlcmUgdG8gcmVhZD8gKi8KKwllcnIgPSBzcHVfcmVhZF91MTYoY2FyZCwgSUZfU1BJX1NDUkFUQ0hfMV9SRUcsICZsZW4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmICghbGVuKSB7CisJCWxic19wcl9lcnIoIiVzOiBlcnJvcjogY2FyZCBoYXMgbm8gZGF0YSBmb3IgaG9zdFxuIiwKKwkJCSAgIF9fZnVuY19fKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChsZW4gPiBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSkgeworCQlsYnNfcHJfZXJyKCIlczogZXJyb3I6IGNhcmQgaGFzICVkIGJ5dGVzIG9mIGRhdGEsIGJ1dCAiCisJCQkgICAib3VyIG1heGltdW0gc2tiIHNpemUgaXMgJXVcbiIsCisJCQkgICBfX2Z1bmNfXywgbGVuLCBNUlZEUlZfRVRIX1JYX1BBQ0tFVF9CVUZGRVJfU0laRSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFRPRE86IHNob3VsZCB3ZSBhbGxvY2F0ZSBhIHNtYWxsZXIgc2tiIGlmIHdlIGhhdmUgbGVzcyBkYXRhPyAqLworCXNrYiA9IGRldl9hbGxvY19za2IoTVJWRFJWX0VUSF9SWF9QQUNLRVRfQlVGRkVSX1NJWkUpOworCWlmICghc2tiKSB7CisJCWVyciA9IC1FTk9CVUZTOworCQlnb3RvIG91dDsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBJUEZJRUxEX0FMSUdOX09GRlNFVCk7CisJZGF0YSA9IHNrYl9wdXQoc2tiLCBsZW4pOworCisJLyogUmVhZCB0aGUgZGF0YSBmcm9tIHRoZSBXTEFOIG1vZHVsZSBpbnRvIG91ciBza2IuLi4gKi8KKwllcnIgPSBzcHVfcmVhZChjYXJkLCBJRl9TUElfREFUQV9SRFdSUE9SVF9SRUcsIGRhdGEsIEFMSUdOKGxlbiwgNCkpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9za2I7CisKKwkvKiBwYXNzIHRoZSBTS0IgdG8gbGliZXJ0YXMgKi8KKwllcnIgPSBsYnNfcHJvY2Vzc19yeGVkX3BhY2tldChjYXJkLT5wcml2LCBza2IpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9za2I7CisKKwkvKiBzdWNjZXNzICovCisJZ290byBvdXQ7CisKK2ZyZWVfc2tiOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCIlczogZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwlsYnNfZGViX2xlYXZlKExCU19ERUJfU1BJKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBNb3ZlIGRhdGEgb3IgYSBjb21tYW5kIGZyb20gdGhlIGhvc3QgdG8gdGhlIGNhcmQuICovCitzdGF0aWMgdm9pZCBpZl9zcGlfaDJjKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCwKKwkJCXN0cnVjdCBpZl9zcGlfcGFja2V0ICpwYWNrZXQsIGludCB0eXBlKQoreworCWludCBlcnIgPSAwOworCXUxNiBpbnRfdHlwZSwgcG9ydF9yZWc7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE1WTVNfREFUOgorCQlpbnRfdHlwZSA9IElGX1NQSV9DSUNfVFhfRE9XTkxPQURfT1ZFUjsKKwkJcG9ydF9yZWcgPSBJRl9TUElfREFUQV9SRFdSUE9SVF9SRUc7CisJCWJyZWFrOworCWNhc2UgTVZNU19DTUQ6CisJCWludF90eXBlID0gSUZfU1BJX0NJQ19DTURfRE9XTkxPQURfT1ZFUjsKKwkJcG9ydF9yZWcgPSBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbGJzX3ByX2VycigiY2FuJ3QgdHJhbnNmZXIgYnVmZmVyIG9mIHR5cGUgJWRcbiIsIHR5cGUpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBXcml0ZSB0aGUgZGF0YSB0byB0aGUgY2FyZCAqLworCWVyciA9IHNwdV93cml0ZShjYXJkLCBwb3J0X3JlZywgcGFja2V0LT5idWZmZXIsIHBhY2tldC0+Ymxlbik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKK291dDoKKwlrZnJlZShwYWNrZXQpOworCisJaWYgKGVycikKKwkJbGJzX3ByX2VycigiJXM6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKK30KKworLyogSW5mb3JtIHRoZSBob3N0IGFib3V0IGEgY2FyZCBldmVudCAqLworc3RhdGljIHZvaWQgaWZfc3BpX2UyaChzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQpCit7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgY2F1c2U7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZC0+cHJpdjsKKworCWVyciA9IHNwdV9yZWFkX3UzMihjYXJkLCBJRl9TUElfU0NSQVRDSF8zX1JFRywgJmNhdXNlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCWxic19xdWV1ZV9ldmVudChwcml2LCBjYXVzZSAmIDB4ZmYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CisKK291dDoKKwlpZiAoZXJyKQorCQlsYnNfcHJfZXJyKCIlczogZXJyb3IgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworfQorCitzdGF0aWMgaW50IGxic19zcGlfdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQgPSBkYXRhOworCXUxNiBoaVN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpZl9zcGlfcGFja2V0ICpwYWNrZXQ7CisKKwl3aGlsZSAoMSkgeworCQkvKiBXYWl0IHRvIGJlIHdva2VuIHVwIGJ5IG9uZSBvZiB0d28gdGhpbmdzLiAgRmlyc3QsIG91ciBJU1IKKwkJICogY291bGQgdGVsbCB1cyB0aGF0IHNvbWV0aGluZyBoYXBwZW5lZCBvbiB0aGUgV0xBTi4KKwkJICogU2Vjb25kbHksIGxpYmVydGFzIGNvdWxkIGNhbGwgaHdfaG9zdF90b19jYXJkIHdpdGggbW9yZQorCQkgKiBkYXRhLCB3aGljaCB3ZSBtaWdodCBiZSBhYmxlIHRvIHNlbmQuCisJCSAqLworCQlkbyB7CisJCQllcnIgPSBkb3duX2ludGVycnVwdGlibGUoJmNhcmQtPnNwaV9yZWFkeSk7CisJCQlpZiAoIWNhcmQtPnJ1bl90aHJlYWQpIHsKKwkJCQl1cCgmY2FyZC0+c3BpX3RocmVhZF90ZXJtaW5hdGVkKTsKKwkJCQlkb19leGl0KDApOworCQkJfQorCQl9IHdoaWxlIChlcnIgPT0gRUlOVFIpOworCisJCS8qIFJlYWQgdGhlIGhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciB0byBzZWUgd2hhdCB3ZQorCQkgKiBjYW4gZG8uICovCisJCWVyciA9IHNwdV9yZWFkX3UxNihjYXJkLCBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRywKKwkJCQkJJmhpU3RhdHVzKTsKKwkJaWYgKGVycikgeworCQkJbGJzX3ByX2VycigiSS9PIGVycm9yXG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfQ01EX1VQTE9BRF9SRFkpCisJCQllcnIgPSBpZl9zcGlfYzJoX2NtZChjYXJkKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnI7CisJCWlmIChoaVN0YXR1cyAmIElGX1NQSV9ISVNUX1JYX1VQTE9BRF9SRFkpCisJCQllcnIgPSBpZl9zcGlfYzJoX2RhdGEoY2FyZCk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gZXJyOworCQlpZiAoaGlTdGF0dXMgJiBJRl9TUElfSElTVF9DTURfRE9XTkxPQURfUkRZKSB7CisJCQkvKiBUaGlzIG1lYW5zIHR3byB0aGluZ3MuIEZpcnN0IG9mIGFsbCwKKwkJCSAqIGlmIHRoZXJlIHdhcyBhIHByZXZpb3VzIGNvbW1hbmQgc2VudCwgdGhlIGNhcmQgaGFzCisJCQkgKiBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgaXQuCisJCQkgKiBTZWNvbmRseSwgaXQgaXMgbm93IHJlYWR5IHRvIGRvd25sb2FkIGFub3RoZXIKKwkJCSAqIGNvbW1hbmQuCisJCQkgKi8KKwkJCWxic19ob3N0X3RvX2NhcmRfZG9uZShjYXJkLT5wcml2KTsKKworCQkJLyogRG8gd2UgaGF2ZSBhbnkgY29tbWFuZCBwYWNrZXRzIGZyb20gdGhlIGhvc3QgdG8KKwkJCSAqIHNlbmQ/ICovCisJCQlwYWNrZXQgPSBOVUxMOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCQlpZiAoIWxpc3RfZW1wdHkoJmNhcmQtPmNtZF9wYWNrZXRfbGlzdCkpIHsKKwkJCQlwYWNrZXQgPSAoc3RydWN0IGlmX3NwaV9wYWNrZXQgKikoY2FyZC0+CisJCQkJCQljbWRfcGFja2V0X2xpc3QubmV4dCk7CisJCQkJbGlzdF9kZWwoJnBhY2tldC0+bGlzdCk7CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5idWZmZXJfbG9jaywgZmxhZ3MpOworCisJCQlpZiAocGFja2V0KQorCQkJCWlmX3NwaV9oMmMoY2FyZCwgcGFja2V0LCBNVk1TX0NNRCk7CisJCX0KKwkJaWYgKGhpU3RhdHVzICYgSUZfU1BJX0hJU1RfVFhfRE9XTkxPQURfUkRZKSB7CisJCQkvKiBEbyB3ZSBoYXZlIGFueSBkYXRhIHBhY2tldHMgZnJvbSB0aGUgaG9zdCB0bworCQkJICogc2VuZD8gKi8KKwkJCXBhY2tldCA9IE5VTEw7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJCWlmICghbGlzdF9lbXB0eSgmY2FyZC0+ZGF0YV9wYWNrZXRfbGlzdCkpIHsKKwkJCQlwYWNrZXQgPSAoc3RydWN0IGlmX3NwaV9wYWNrZXQgKikoY2FyZC0+CisJCQkJCQlkYXRhX3BhY2tldF9saXN0Lm5leHQpOworCQkJCWxpc3RfZGVsKCZwYWNrZXQtPmxpc3QpOworCQkJfQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKHBhY2tldCkKKwkJCQlpZl9zcGlfaDJjKGNhcmQsIHBhY2tldCwgTVZNU19EQVQpOworCQl9CisJCWlmIChoaVN0YXR1cyAmIElGX1NQSV9ISVNUX0NBUkRfRVZFTlQpCisJCQlpZl9zcGlfZTJoKGNhcmQpOworCitlcnI6CisJCWlmIChlcnIpCisJCQlsYnNfcHJfZXJyKCIlczogZ290IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwl9Cit9CisKKy8qIEJsb2NrIHVudGlsIGxic19zcGlfdGhyZWFkIHRocmVhZCBoYXMgdGVybWluYXRlZCAqLworc3RhdGljIHZvaWQgaWZfc3BpX3Rlcm1pbmF0ZV9zcGlfdGhyZWFkKHN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCkKK3sKKwkvKiBJdCB3b3VsZCBiZSBuaWNlIHRvIHVzZSBrdGhyZWFkX3N0b3AgaGVyZSwgYnV0IHRoYXQgZnVuY3Rpb24KKwkgKiBjYW4ndCB3YWtlIHRocmVhZHMgd2FpdGluZyBmb3IgYSBzZW1hcGhvcmUuICovCisJY2FyZC0+cnVuX3RocmVhZCA9IDA7CisJdXAoJmNhcmQtPnNwaV9yZWFkeSk7CisJZG93bigmY2FyZC0+c3BpX3RocmVhZF90ZXJtaW5hdGVkKTsKK30KKworLyoKKyAqIEhvc3QgdG8gQ2FyZAorICoKKyAqIENhbGxlZCBmcm9tIExpYmVydGFzIHRvIHRyYW5zZmVyIHNvbWUgZGF0YSB0byB0aGUgV0xBTiBkZXZpY2UKKyAqIFdlIGNhbid0IHNsZWVwIGhlcmUuICovCitzdGF0aWMgaW50IGlmX3NwaV9ob3N0X3RvX2NhcmQoc3RydWN0IGxic19wcml2YXRlICpwcml2LAorCQkJCXU4IHR5cGUsIHU4ICpidWYsIHUxNiBuYikKK3sKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpZl9zcGlfY2FyZCAqY2FyZCA9IHByaXYtPmNhcmQ7CisJc3RydWN0IGlmX3NwaV9wYWNrZXQgKnBhY2tldDsKKwl1MTYgYmxlbjsKKworCWxic19kZWJfZW50ZXJfYXJncyhMQlNfREVCX1NQSSwgInR5cGUgJWQsIGJ5dGVzICVkIiwgdHlwZSwgbmIpOworCisJaWYgKG5iID09IDApIHsKKwkJbGJzX3ByX2VycigiJXM6IGludmFsaWQgc2l6ZSByZXF1ZXN0ZWQ6ICVkXG4iLCBfX2Z1bmNfXywgbmIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJYmxlbiA9IEFMSUdOKG5iLCA0KTsKKwlwYWNrZXQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWZfc3BpX3BhY2tldCkgKyBibGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXBhY2tldCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJcGFja2V0LT5ibGVuID0gYmxlbjsKKwltZW1jcHkocGFja2V0LT5idWZmZXIsIGJ1ZiwgbmIpOworCW1lbXNldChwYWNrZXQtPmJ1ZmZlciArIG5iLCAwLCBibGVuIC0gbmIpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBNVk1TX0NNRDoKKwkJcHJpdi0+ZG5sZF9zZW50ID0gRE5MRF9DTURfU0VOVDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJnBhY2tldC0+bGlzdCwgJmNhcmQtPmNtZF9wYWNrZXRfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWNhc2UgTVZNU19EQVQ6CisJCXByaXYtPmRubGRfc2VudCA9IEROTERfREFUQV9TRU5UOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9hZGRfdGFpbCgmcGFja2V0LT5saXN0LCAmY2FyZC0+ZGF0YV9wYWNrZXRfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWxic19wcl9lcnIoImNhbid0IHRyYW5zZmVyIGJ1ZmZlciBvZiB0eXBlICVkIiwgdHlwZSk7CisJCWVyciA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCS8qIFdha2UgdXAgdGhlIHNwaSB0aHJlYWQgKi8KKwl1cCgmY2FyZC0+c3BpX3JlYWR5KTsKK291dDoKKwlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9TUEksICJlcnI9JWQiLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBIb3N0IEludGVycnVwdHMKKyAqCisgKiBTZXJ2aWNlIGluY29taW5nIGludGVycnVwdHMgZnJvbSB0aGUgV0xBTiBkZXZpY2UuIFdlIGNhbid0IHNsZWVwIGhlcmUsIHNvCisgKiBkb24ndCB0cnkgdG8gdGFsayBvbiB0aGUgU1BJIGJ1cywganVzdCB3YWtlIHVwIHRoZSBTUEkgdGhyZWFkLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgaWZfc3BpX2hvc3RfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQgPSBkZXZfaWQ7CisKKwl1cCgmY2FyZC0+c3BpX3JlYWR5KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKiBTUEkgY2FsbGJhY2tzCisgKi8KKworc3RhdGljIGludCBpZl9zcGlfY2FsY3VsYXRlX2Z3X25hbWVzKHUxNiBjYXJkX2lkLAorCQkJICAgICAgY2hhciAqaGVscGVyX2Z3LCBjaGFyICptYWluX2Z3KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoaXBfaWRfdG9fZGV2aWNlX25hbWUpOyArK2kpIHsKKwkJaWYgKGNhcmRfaWQgPT0gY2hpcF9pZF90b19kZXZpY2VfbmFtZVtpXS5jaGlwX2lkKQorCQkJYnJlYWs7CisJfQorCWlmIChpID09IEFSUkFZX1NJWkUoY2hpcF9pZF90b19kZXZpY2VfbmFtZSkpIHsKKwkJbGJzX3ByX2VycigiVW5zdXBwb3J0ZWQgY2hpcF9pZDogMHglMDJ4XG4iLCBjYXJkX2lkKTsKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisJfQorCXNucHJpbnRmKGhlbHBlcl9mdywgRklSTVdBUkVfTkFNRV9NQVgsICJsaWJlcnRhcy9nc3BpJWRfaGxwLmJpbiIsCisJCSBjaGlwX2lkX3RvX2RldmljZV9uYW1lW2ldLm5hbWUpOworCXNucHJpbnRmKG1haW5fZncsIEZJUk1XQVJFX05BTUVfTUFYLCAibGliZXJ0YXMvZ3NwaSVkLmJpbiIsCisJCSBjaGlwX2lkX3RvX2RldmljZV9uYW1lW2ldLm5hbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpZl9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgaWZfc3BpX2NhcmQgKmNhcmQ7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gTlVMTDsKKwlzdHJ1Y3QgbGliZXJ0YXNfc3BpX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgZXJyID0gMDsKKwl1MzIgc2NyYXRjaDsKKworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCisJaWYgKCFwZGF0YSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGRhdGEtPnNldHVwKSB7CisJCWVyciA9IHBkYXRhLT5zZXR1cChzcGkpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogQWxsb2NhdGUgY2FyZCBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IHRoaXMgc3BlY2lmaWMgZGV2aWNlICovCisJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZl9zcGlfY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJc3BpX3NldF9kcnZkYXRhKHNwaSwgY2FyZCk7CisJY2FyZC0+cGRhdGEgPSBwZGF0YTsKKwljYXJkLT5zcGkgPSBzcGk7CisJY2FyZC0+Z3Bpb19jcyA9IHBkYXRhLT5ncGlvX2NzOworCWNhcmQtPnByZXZfeGZlcl90aW1lID0gamlmZmllczsKKworCXNlbWFfaW5pdCgmY2FyZC0+c3BpX3JlYWR5LCAwKTsKKwlzZW1hX2luaXQoJmNhcmQtPnNwaV90aHJlYWRfdGVybWluYXRlZCwgMCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmNtZF9wYWNrZXRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmRhdGFfcGFja2V0X2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZjYXJkLT5idWZmZXJfbG9jayk7CisKKwkvKiBzZXQgdXAgR1BJTyBDUyBsaW5lLiBUT0RPOiB1c2UgIHJlZ3VsYXIgQ1MgbGluZSAqLworCWVyciA9IGdwaW9fcmVxdWVzdChjYXJkLT5ncGlvX2NzLCAiaWZfc3BpX2dwaW9fY2hpcF9zZWxlY3QiKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfY2FyZDsKKwllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoY2FyZC0+Z3Bpb19jcywgMSk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisKKwkvKiBJbml0aWFsaXplIHRoZSBTUEkgSW50ZXJmYWNlIFVuaXQgKi8KKwllcnIgPSBzcHVfaW5pdChjYXJkLCBwZGF0YS0+dXNlX2R1bW15X3dyaXRlcyk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX2dwaW87CisJZXJyID0gc3B1X2dldF9jaGlwX3JldmlzaW9uKGNhcmQsICZjYXJkLT5jYXJkX2lkLCAmY2FyZC0+Y2FyZF9yZXYpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9ncGlvOworCisJLyogRmlybXdhcmUgbG9hZCAqLworCWVyciA9IHNwdV9yZWFkX3UzMihjYXJkLCBJRl9TUElfU0NSQVRDSF80X1JFRywgJnNjcmF0Y2gpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9ncGlvOworCWlmIChzY3JhdGNoID09IFNVQ0NFU1NGVUxfRldfRE9XTkxPQURfTUFHSUMpCisJCWxic19kZWJfc3BpKCJGaXJtd2FyZSBpcyBhbHJlYWR5IGxvYWRlZCBmb3IgIgorCQkJICAgICJNYXJ2ZWxsIFdMQU4gODAyLjExIGFkYXB0ZXJcbiIpOworCWVsc2UgeworCQllcnIgPSBpZl9zcGlfY2FsY3VsYXRlX2Z3X25hbWVzKGNhcmQtPmNhcmRfaWQsCisJCQkJY2FyZC0+aGVscGVyX2Z3X25hbWUsIGNhcmQtPm1haW5fZndfbmFtZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZyZWVfZ3BpbzsKKworCQlsYnNfZGViX3NwaSgiSW5pdGlhbGl6aW5nIEZXIGZvciBNYXJ2ZWxsIFdMQU4gODAyLjExIGFkYXB0ZXIgIgorCQkJCSIoY2hpcF9pZCA9IDB4JTA0eCwgY2hpcF9yZXYgPSAweCUwMngpICIKKwkJCQkiYXR0YWNoZWQgdG8gU1BJIGJ1c19udW0gJWQsIGNoaXBfc2VsZWN0ICVkLiAiCisJCQkJInNwaS0+bWF4X3NwZWVkX2h6PSVkXG4iLAorCQkJCWNhcmQtPmNhcmRfaWQsIGNhcmQtPmNhcmRfcmV2LAorCQkJCXNwaS0+bWFzdGVyLT5idXNfbnVtLCBzcGktPmNoaXBfc2VsZWN0LAorCQkJCXNwaS0+bWF4X3NwZWVkX2h6KTsKKwkJZXJyID0gaWZfc3BpX3Byb2dfaGVscGVyX2Zpcm13YXJlKGNhcmQpOworCQlpZiAoZXJyKQorCQkJZ290byBmcmVlX2dwaW87CisJCWVyciA9IGlmX3NwaV9wcm9nX21haW5fZmlybXdhcmUoY2FyZCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZyZWVfZ3BpbzsKKwkJbGJzX2RlYl9zcGkoImxvYWRlZCBGVyBmb3IgTWFydmVsbCBXTEFOIDgwMi4xMSBhZGFwdGVyXG4iKTsKKwl9CisKKwllcnIgPSBzcHVfc2V0X2ludGVycnVwdF9tb2RlKGNhcmQsIDAsIDEpOworCWlmIChlcnIpCisJCWdvdG8gZnJlZV9ncGlvOworCisJLyogUmVnaXN0ZXIgb3VyIGNhcmQgd2l0aCBsaWJlcnRhcy4KKwkgKiBUaGlzIHdpbGwgY2FsbCBhbGxvY19ldGhlcmRldiAqLworCXByaXYgPSBsYnNfYWRkX2NhcmQoY2FyZCwgJnNwaS0+ZGV2KTsKKwlpZiAoIXByaXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmcmVlX2dwaW87CisJfQorCWNhcmQtPnByaXYgPSBwcml2OworCXByaXYtPmNhcmQgPSBjYXJkOworCXByaXYtPmh3X2hvc3RfdG9fY2FyZCA9IGlmX3NwaV9ob3N0X3RvX2NhcmQ7CisJcHJpdi0+ZndfcmVhZHkgPSAxOworCXByaXYtPnBzX3N1cHBvcnRlZCA9IDE7CisKKwkvKiBJbml0aWFsaXplIGludGVycnVwdCBoYW5kbGluZyBzdHVmZi4gKi8KKwljYXJkLT5ydW5fdGhyZWFkID0gMTsKKwljYXJkLT5zcGlfdGhyZWFkID0ga3RocmVhZF9ydW4obGJzX3NwaV90aHJlYWQsIGNhcmQsICJsYnNfc3BpX3RocmVhZCIpOworCWlmIChJU19FUlIoY2FyZC0+c3BpX3RocmVhZCkpIHsKKwkJY2FyZC0+cnVuX3RocmVhZCA9IDA7CisJCWVyciA9IFBUUl9FUlIoY2FyZC0+c3BpX3RocmVhZCk7CisJCWxic19wcl9lcnIoImVycm9yIGNyZWF0aW5nIFNQSSB0aHJlYWQ6IGVycj0lZFxuIiwgZXJyKTsKKwkJZ290byByZW1vdmVfY2FyZDsKKwl9CisJZXJyID0gcmVxdWVzdF9pcnEoc3BpLT5pcnEsIGlmX3NwaV9ob3N0X2ludGVycnVwdCwKKwkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLCAibGliZXJ0YXNfc3BpIiwgY2FyZCk7CisJaWYgKGVycikgeworCQlsYnNfcHJfZXJyKCJjYW4ndCBnZXQgaG9zdCBpcnEgbGluZS0tIHJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CisJCWdvdG8gdGVybWluYXRlX3RocmVhZDsKKwl9CisKKwkvKiBTdGFydCB0aGUgY2FyZC4KKwkgKiBUaGlzIHdpbGwgY2FsbCByZWdpc3Rlcl9uZXRkZXYsIGFuZCB3ZSdsbCBzdGFydAorCSAqIGdldHRpbmcgaW50ZXJydXB0cy4uLiAqLworCWVyciA9IGxic19zdGFydF9jYXJkKHByaXYpOworCWlmIChlcnIpCisJCWdvdG8gcmVsZWFzZV9pcnE7CisKKwlsYnNfZGViX3NwaSgiRmluaXNoZWQgaW5pdGlhbGl6aW5nIFdMQU4gbW9kdWxlLlxuIik7CisKKwkvKiBzdWNjZXNzZnVsIGV4aXQgKi8KKwlnb3RvIG91dDsKKworcmVsZWFzZV9pcnE6CisJZnJlZV9pcnEoc3BpLT5pcnEsIGNhcmQpOwordGVybWluYXRlX3RocmVhZDoKKwlpZl9zcGlfdGVybWluYXRlX3NwaV90aHJlYWQoY2FyZCk7CityZW1vdmVfY2FyZDoKKwlsYnNfcmVtb3ZlX2NhcmQocHJpdik7IC8qIHdpbGwgY2FsbCBmcmVlX25ldGRldiAqLworZnJlZV9ncGlvOgorCWdwaW9fZnJlZShjYXJkLT5ncGlvX2NzKTsKK2ZyZWVfY2FyZDoKKwlmcmVlX2lmX3NwaV9jYXJkKGNhcmQpOworb3V0OgorCWxic19kZWJfbGVhdmVfYXJncyhMQlNfREVCX1NQSSwgImVyciAlZFxuIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBsaWJlcnRhc19zcGlfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJc3RydWN0IGlmX3NwaV9jYXJkICpjYXJkID0gc3BpX2dldF9kcnZkYXRhKHNwaSk7CisJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gY2FyZC0+cHJpdjsKKworCWxic19kZWJfc3BpKCJsaWJlcnRhc19zcGlfcmVtb3ZlXG4iKTsKKwlsYnNfZGViX2VudGVyKExCU19ERUJfU1BJKTsKKwlwcml2LT5zdXJwcmlzZXJlbW92ZWQgPSAxOworCisJbGJzX3N0b3BfY2FyZChwcml2KTsKKwlmcmVlX2lycShzcGktPmlycSwgY2FyZCk7CisJaWZfc3BpX3Rlcm1pbmF0ZV9zcGlfdGhyZWFkKGNhcmQpOworCWxic19yZW1vdmVfY2FyZChwcml2KTsgLyogd2lsbCBjYWxsIGZyZWVfbmV0ZGV2ICovCisJZ3Bpb19mcmVlKGNhcmQtPmdwaW9fY3MpOworCWlmIChjYXJkLT5wZGF0YS0+dGVhcmRvd24pCisJCWNhcmQtPnBkYXRhLT50ZWFyZG93bihzcGkpOworCWZyZWVfaWZfc3BpX2NhcmQoY2FyZCk7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBsaWJlcnRhc19zcGlfZHJpdmVyID0geworCS5wcm9iZQk9IGlmX3NwaV9wcm9iZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobGliZXJ0YXNfc3BpX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAibGliZXJ0YXNfc3BpIiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCisvKgorICogTW9kdWxlIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbnQgX19pbml0IGlmX3NwaV9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQgPSAwOworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCXByaW50ayhLRVJOX0lORk8gImxpYmVydGFzX3NwaTogTGliZXJ0YXMgU1BJIGRyaXZlclxuIik7CisJcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmbGliZXJ0YXNfc3BpX2RyaXZlcik7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGlmX3NwaV9leGl0X21vZHVsZSh2b2lkKQoreworCWxic19kZWJfZW50ZXIoTEJTX0RFQl9TUEkpOworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmbGliZXJ0YXNfc3BpX2RyaXZlcik7CisJbGJzX2RlYl9sZWF2ZShMQlNfREVCX1NQSSk7Cit9CisKK21vZHVsZV9pbml0KGlmX3NwaV9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChpZl9zcGlfZXhpdF9tb2R1bGUpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkxpYmVydGFzIFNQSSBXTEFOIERyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQW5kcmV5IFl1cm92c2t5IDxhbmRyZXlAY296eWJpdC5jb20+LCAiCisJICAgICAgIkNvbGluIE1jQ2FiZSA8Y29saW5AY296eWJpdC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMDM4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuaApAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqCWxpbnV4L2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2lmX3NwaS5jCisgKgorICoJRHJpdmVyIGZvciBNYXJ2ZWxsIFNQSSBXTEFOIGNhcmRzLgorICoKKyAqCUNvcHlyaWdodCAyMDA4IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKglBdXRob3JzOgorICoJQW5kcmV5IFl1cm92c2t5IDxhbmRyZXlAY296eWJpdC5jb20+CisgKglDb2xpbiBNY0NhYmUgPGNvbGluQGNvenliaXQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfTEJTX0lGX1NQSV9IXworI2RlZmluZSBfTEJTX0lGX1NQSV9IXworCisjZGVmaW5lIElQRklFTERfQUxJR05fT0ZGU0VUIDIKKyNkZWZpbmUgSUZfU1BJX0NNRF9CVUZfU0laRSAyNDAwCisKKy8qKioqKioqKioqKioqKioqKiBGaXJtd2FyZSAqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBjaGlwX2lkZW50IHsKKwl1MTYgY2hpcF9pZDsKKwl1MTYgbmFtZTsKK307CisKKyNkZWZpbmUgTUFYX01BSU5fRldfTE9BRF9DUkNfRVJSIDEwCisKKy8qIENodW5rIHNpemUgd2hlbiBsb2FkaW5nIHRoZSBoZWxwZXIgZmlybXdhcmUgKi8KKyNkZWZpbmUgSEVMUEVSX0ZXX0xPQURfQ0hVTktfU1ogNjQKKworLyogVmFsdWUgdG8gd3JpdGUgdG8gaW5kaWNhdGUgZW5kIG9mIGhlbHBlciBmaXJtd2FyZSBkbmxkICovCisjZGVmaW5lIEZJUk1XQVJFX0ROTERfT0sgMHgwMDAwCisKKy8qIFZhbHVlIHRvIGNoZWNrIG9uY2UgdGhlIG1haW4gZmlybXdhcmUgaXMgZG93bmxvYWRlZCAqLworI2RlZmluZSBTVUNDRVNTRlVMX0ZXX0RPV05MT0FEX01BR0lDIDB4ODg4ODg4ODgKKworLyoqKioqKioqKioqKioqKioqIFNQSSBJbnRlcmZhY2UgVW5pdCAqKioqKioqKioqKioqKioqKi8KKy8qIE1hc2tzIHVzZWQgaW4gU1BJIHJlZ2lzdGVyIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyAqLworI2RlZmluZSBJRl9TUElfUkVBRF9PUEVSQVRJT05fTUFTSyAweDAKKyNkZWZpbmUgSUZfU1BJX1dSSVRFX09QRVJBVElPTl9NQVNLIDB4ODAwMAorCisvKiBTUEkgcmVnaXN0ZXIgb2Zmc2V0cy4gNC1ieXRlIGFsaWduZWQuICovCisjZGVmaW5lIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFRyAweDAwCS8qIERldmljZUlEIGNvbnRyb2xsZXIgcmVnICovCisjZGVmaW5lIElGX1NQSV9JT19SRUFEQkFTRV9SRUcgMHgwNCAJLyogUmVhZCBJL08gYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0lPX1dSSVRFQkFTRV9SRUcgMHgwOAkvKiBXcml0ZSBJL08gYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0lPX1JEV1JQT1JUX1JFRyAweDBDCS8qIFJlYWQvV3JpdGUgSS9PIHBvcnQgcmVnICovCisKKyNkZWZpbmUgSUZfU1BJX0NNRF9SRUFEQkFTRV9SRUcgMHgxMAkvKiBSZWFkIGNvbW1hbmQgYmFzZSByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0NNRF9XUklURUJBU0VfUkVHIDB4MTQJLyogV3JpdGUgY29tbWFuZCBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ01EX1JEV1JQT1JUX1JFRyAweDE4CS8qIFJlYWQvV3JpdGUgY29tbWFuZCBwb3J0IHJlZyAqLworCisjZGVmaW5lIElGX1NQSV9EQVRBX1JFQURCQVNFX1JFRyAweDFDCS8qIFJlYWQgZGF0YSBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfREFUQV9XUklURUJBU0VfUkVHIDB4MjAJLyogV3JpdGUgZGF0YSBiYXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfREFUQV9SRFdSUE9SVF9SRUcgMHgyNAkvKiBSZWFkL1dyaXRlIGRhdGEgcG9ydCByZWcgKi8KKworI2RlZmluZSBJRl9TUElfU0NSQVRDSF8xX1JFRyAweDI4CS8qIFNjcmF0Y2ggcmVnIDEgKi8KKyNkZWZpbmUgSUZfU1BJX1NDUkFUQ0hfMl9SRUcgMHgyQwkvKiBTY3JhdGNoIHJlZyAyICovCisjZGVmaW5lIElGX1NQSV9TQ1JBVENIXzNfUkVHIDB4MzAJLyogU2NyYXRjaCByZWcgMyAqLworI2RlZmluZSBJRl9TUElfU0NSQVRDSF80X1JFRyAweDM0CS8qIFNjcmF0Y2ggcmVnIDQgKi8KKworI2RlZmluZSBJRl9TUElfVFhfRlJBTUVfU0VRX05VTV9SRUcgMHgzOCAvKiBUeCBmcmFtZSBzZXF1ZW5jZSBudW1iZXIgcmVnICovCisjZGVmaW5lIElGX1NQSV9UWF9GUkFNRV9TVEFUVVNfUkVHIDB4M0MJLyogVHggZnJhbWUgc3RhdHVzIHJlZyAqLworCisjZGVmaW5lIElGX1NQSV9IT1NUX0lOVF9DVFJMX1JFRyAweDQwCS8qIEhvc3QgaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnICovCisKKyNkZWZpbmUgSUZfU1BJX0NBUkRfSU5UX0NBVVNFX1JFRyAweDQ0CS8qIENhcmQgaW50ZXJydXB0IGNhdXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX1JFRyAweDQ4IC8qIENhcmQgaW50ZXJ1cHQgc3RhdHVzIHJlZyAqLworI2RlZmluZSBJRl9TUElfQ0FSRF9JTlRfRVZFTlRfTUFTS19SRUcgMHg0QyAvKiBDYXJkIGludGVycnVwdCBldmVudCBtYXNrICovCisjZGVmaW5lIElGX1NQSV9DQVJEX0lOVF9TVEFUVVNfTUFTS19SRUcJMHg1MCAvKiBDYXJkIGludGVycnVwdCBzdGF0dXMgbWFzayAqLworCisjZGVmaW5lIElGX1NQSV9DQVJEX0lOVF9SRVNFVF9TRUxFQ1RfUkVHIDB4NTQgLyogQ2FyZCBpbnRlcnJ1cHQgcmVzZXQgc2VsZWN0ICovCisKKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX0NBVVNFX1JFRyAweDU4CS8qIEhvc3QgaW50ZXJydXB0IGNhdXNlIHJlZyAqLworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX1JFRyAweDVDCS8qIEhvc3QgaW50ZXJydXB0IHN0YXR1cyByZWcgKi8KKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX0VWRU5UX01BU0tfUkVHIDB4NjAgLyogSG9zdCBpbnRlcnJ1cHQgZXZlbnQgbWFzayAqLworI2RlZmluZSBJRl9TUElfSE9TVF9JTlRfU1RBVFVTX01BU0tfUkVHCTB4NjQgLyogSG9zdCBpbnRlcnJ1cHQgc3RhdHVzIG1hc2sgKi8KKyNkZWZpbmUgSUZfU1BJX0hPU1RfSU5UX1JFU0VUX1NFTEVDVF9SRUcgMHg2OCAvKiBIb3N0IGludGVycnVwdCByZXNldCBzZWxlY3QgKi8KKworI2RlZmluZSBJRl9TUElfREVMQVlfUkVBRF9SRUcgMHg2QwkvKiBEZWxheSByZWFkIHJlZyAqLworI2RlZmluZSBJRl9TUElfU1BVX0JVU19NT0RFX1JFRyAweDcwCS8qIFNQVSBCVVMgbW9kZSByZWcgKi8KKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFRyAqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUZfU1BJX0RFVklDRUlEX0NUUkxfUkVHX1RPX0NBUkRfSUQoZGMpICgoZGMgJiAweGZmZmYwMDAwKT4+MTYpCisjZGVmaW5lIElGX1NQSV9ERVZJQ0VJRF9DVFJMX1JFR19UT19DQVJEX1JFVihkYykgKGRjICYgMHgwMDAwMDBmZikKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9IT1NUX0lOVF9DVFJMX1JFRyAqKioqKioqKioqKioqKioqKi8KKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFdha2UgdXAgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfV0FLRV9VUAkJCQkoMTw8MCkKKy8qKiBIb3N0IEludGVycnVwdCBDb250cm9sIGJpdCA6IFdMQU4gcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfV0xBTl9SRUFEWQkJCQkoMTw8MSkKKy8qI2RlZmluZSBJRl9TUElfSElDVF9GSUZPX0ZJUlNUX0hBTEZfRU1QVFkJCSgxPDwyKSAqLworLyojZGVmaW5lIElGX1NQSV9ISUNUX0ZJRk9fU0VDT05EX0hBTEZfRU1QVFkJCSgxPDwzKSAqLworLyojZGVmaW5lIElGX1NQSV9ISUNUX0lSUVNSQ19XTEFOCQkJKDE8PDQpICovCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBUeCBhdXRvIGRvd25sb2FkICovCisjZGVmaW5lIElGX1NQSV9ISUNUX1RYX0RPV05MT0FEX09WRVJfQVVUTwkJKDE8PDUpCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBSeCBhdXRvIHVwbG9hZCAqLworI2RlZmluZSBJRl9TUElfSElDVF9SWF9VUExPQURfT1ZFUl9BVVRPCQkJKDE8PDYpCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBDb21tYW5kIGF1dG8gZG93bmxvYWQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJQ1RfQ01EX0RPV05MT0FEX09WRVJfQVVUTwkJKDE8PDcpCisvKiogSG9zdCBJbnRlcnJ1cHQgQ29udHJvbCBiaXQgOiBDb21tYW5kIGF1dG8gdXBsb2FkICovCisjZGVmaW5lIElGX1NQSV9ISUNUX0NNRF9VUExPQURfT1ZFUl9BVVRPCQkoMTw8OCkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9DQVJEX0lOVF9DQVVTRV9SRUcgKioqKioqKioqKioqKioqKiovCisvKiogQ2FyZCBJbnRlcnJ1cHQgQ2FzZSBiaXQgOiBUeCBkb3dubG9hZCBvdmVyICovCisjZGVmaW5lIElGX1NQSV9DSUNfVFhfRE9XTkxPQURfT1ZFUgkJCSgxPDwwKQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogUnggdXBsb2FkIG92ZXIgKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19SWF9VUExPQURfT1ZFUgkJCSgxPDwxKQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogQ29tbWFuZCBkb3dubG9hZCBvdmVyICovCisjZGVmaW5lIElGX1NQSV9DSUNfQ01EX0RPV05MT0FEX09WRVIJCQkoMTw8MikKKy8qKiBDYXJkIEludGVycnVwdCBDYXNlIGJpdCA6IEhvc3QgZXZlbnQgKi8KKyNkZWZpbmUgSUZfU1BJX0NJQ19IT1NUX0VWRU5UCQkJCSgxPDwzKQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogQ29tbWFuZCB1cGxvYWQgb3ZlciAqLworI2RlZmluZSBJRl9TUElfQ0lDX0NNRF9VUExPQURfT1ZFUgkJCSgxPDw0KQorLyoqIENhcmQgSW50ZXJydXB0IENhc2UgYml0IDogUG93ZXIgZG93biAqLworI2RlZmluZSBJRl9TUElfQ0lDX1BPV0VSX0RPV04JCQkJKDE8PDUpCisKKy8qKioqKioqKioqKioqKioqKiBJRl9TUElfQ0FSRF9JTlRfU1RBVFVTX1JFRyAqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgSUZfU1BJX0NJU19UWF9ET1dOTE9BRF9PVkVSCQkJKDE8PDApCisjZGVmaW5lIElGX1NQSV9DSVNfUlhfVVBMT0FEX09WRVIJCQkoMTw8MSkKKyNkZWZpbmUgSUZfU1BJX0NJU19DTURfRE9XTkxPQURfT1ZFUgkJCSgxPDwyKQorI2RlZmluZSBJRl9TUElfQ0lTX0hPU1RfRVZFTlQJCQkJKDE8PDMpCisjZGVmaW5lIElGX1NQSV9DSVNfQ01EX1VQTE9BRF9PVkVSCQkJKDE8PDQpCisjZGVmaW5lIElGX1NQSV9DSVNfUE9XRVJfRE9XTgkJCQkoMTw8NSkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9IT1NUX0lOVF9DQVVTRV9SRUcgKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIElGX1NQSV9ISUNVX1RYX0RPV05MT0FEX1JEWQkJCSgxPDwwKQorI2RlZmluZSBJRl9TUElfSElDVV9SWF9VUExPQURfUkRZCQkJKDE8PDEpCisjZGVmaW5lIElGX1NQSV9ISUNVX0NNRF9ET1dOTE9BRF9SRFkJCQkoMTw8MikKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfQ0FSRF9FVkVOVAkJCQkoMTw8MykKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfQ01EX1VQTE9BRF9SRFkJCQkoMTw8NCkKKyNkZWZpbmUgSUZfU1BJX0hJQ1VfSU9fV1JfRklGT19PVkVSRkxPVwkJCSgxPDw1KQorI2RlZmluZSBJRl9TUElfSElDVV9JT19SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDYpCisjZGVmaW5lIElGX1NQSV9ISUNVX0RBVEFfV1JfRklGT19PVkVSRkxPVwkJKDE8PDcpCisjZGVmaW5lIElGX1NQSV9ISUNVX0RBVEFfUkRfRklGT19VTkRFUkZMT1cJCSgxPDw4KQorI2RlZmluZSBJRl9TUElfSElDVV9DTURfV1JfRklGT19PVkVSRkxPVwkJKDE8PDkpCisjZGVmaW5lIElGX1NQSV9ISUNVX0NNRF9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDEwKQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19SRUcgKioqKioqKioqKioqKioqKiovCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IFR4IGRvd25sb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX1RYX0RPV05MT0FEX1JEWQkJCSgxPDwwKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBSeCB1cGxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU1RfUlhfVVBMT0FEX1JEWQkJCSgxPDwxKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIGRvd25sb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9ET1dOTE9BRF9SRFkJCQkoMTw8MikKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ2FyZCBldmVudCAqLworI2RlZmluZSBJRl9TUElfSElTVF9DQVJEX0VWRU5UCQkJCSgxPDwzKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBDb21tYW5kIHVwbG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTVF9DTURfVVBMT0FEX1JEWQkJCSgxPDw0KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBiaXQgOiBJL08gd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTVF9JT19XUl9GSUZPX09WRVJGTE9XCQkJKDE8PDUpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IEkvTyByZWFkIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0lPX1JEX0ZJRk9fVU5EUkZMT1cJCQkoMTw8NikKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogRGF0YSB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0RBVEFfV1JfRklGT19PVkVSRkxPVwkJKDE8PDcpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIGJpdCA6IERhdGEgcmVhZCBGSUZPIHVuZGVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTVF9EQVRBX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8OCkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIG92ZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9XUl9GSUZPX09WRVJGTE9XCQkoMTw8OSkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgYml0IDogQ29tbWFuZCByZWFkIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNUX0NNRF9SRF9GSUZPX1VOREVSRkxPVwkJKDE8PDEwKQorCisvKioqKioqKioqKioqKioqKiogSUZfU1BJX0hPU1RfSU5UX1NUQVRVU19NQVNLX1JFRyAqKioqKioqKioqKioqKioqKi8KKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBUeCBkb3dubG9hZCByZWFkeSAqLworI2RlZmluZSBJRl9TUElfSElTTV9UWF9ET1dOTE9BRF9SRFkJCQkoMTw8MCkKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBSeCB1cGxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fUlhfVVBMT0FEX1JEWQkJCSgxPDwxKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgZG93bmxvYWQgcmVhZHkgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fQ01EX0RPV05MT0FEX1JEWQkJCSgxPDwyKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENhcmQgZXZlbnQgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fQ0FSREVWRU5UCQkJCSgxPDwzKQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgdXBsb2FkIHJlYWR5ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0NNRF9VUExPQURfUkRZCQkJKDE8PDQpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogSS9PIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fSU9fV1JfRklGT19PVkVSRkxPVwkJCSgxPDw1KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IEkvTyByZWFkIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0lPX1JEX0ZJRk9fVU5ERVJGTE9XCQkoMTw8NikKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBEYXRhIHdyaXRlIEZJRk8gb3ZlcmZsb3cgKi8KKyNkZWZpbmUgSUZfU1BJX0hJU01fREFUQV9XUl9GSUZPX09WRVJGTE9XCQkoMTw8NykKKy8qKiBIb3N0IEludGVycnVwdCBTdGF0dXMgTWFzayBiaXQgOiBEYXRhIHdyaXRlIEZJRk8gdW5kZXJmbG93ICovCisjZGVmaW5lIElGX1NQSV9ISVNNX0RBVEFfUkRfRklGT19VTkRFUkZMT1cJCSgxPDw4KQorLyoqIEhvc3QgSW50ZXJydXB0IFN0YXR1cyBNYXNrIGJpdCA6IENvbW1hbmQgd3JpdGUgRklGTyBvdmVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9DTURfV1JfRklGT19PVkVSRkxPVwkJKDE8PDkpCisvKiogSG9zdCBJbnRlcnJ1cHQgU3RhdHVzIE1hc2sgYml0IDogQ29tbWFuZCB3cml0ZSBGSUZPIHVuZGVyZmxvdyAqLworI2RlZmluZSBJRl9TUElfSElTTV9DTURfUkRfRklGT19VTkRFUkZMT1cJCSgxPDwxMCkKKworLyoqKioqKioqKioqKioqKioqIElGX1NQSV9TUFVfQlVTX01PREVfUkVHICoqKioqKioqKioqKioqKioqLworLyogU0NLIGVkZ2Ugb24gd2hpY2ggdGhlIFdMQU4gbW9kdWxlIG91dHB1dHMgZGF0YSBvbiBNSVNPICovCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV9TUElfQ0xPQ0tfUEhBU0VfRkFMTElORyAweDgKKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFX1NQSV9DTE9DS19QSEFTRV9SSVNJTkcgMHgwCisKKy8qIEluIGEgU1BVIHJlYWQgb3BlcmF0aW9uLCB0aGVyZSBpcyBhIGRlbGF5IGJldHdlZW4gd3JpdGluZyB0aGUgU1BVCisgKiByZWdpc3RlciBuYW1lIGFuZCBnZXR0aW5nIGJhY2sgZGF0YSBmcm9tIHRoZSBXTEFOIG1vZHVsZS4KKyAqIFRoaXMgY2FuIGJlIHNwZWNpZmllZCBpbiB0ZXJtcyBvZiBuYW5vc2Vjb25kcyBvciBpbiB0ZXJtcyBvZiBkdW1teQorICogY2xvY2sgY3ljbGVzIHdoaWNoIHRoZSBtYXN0ZXIgbXVzdCBvdXRwdXQgYmVmb3JlIHJlY2VpdmluZyBhIHJlc3BvbnNlLiAqLworI2RlZmluZSBJRl9TUElfQlVTX01PREVfREVMQVlfTUVUSE9EX0RVTU1ZX0NMT0NLIDB4NAorI2RlZmluZSBJRl9TUElfQlVTX01PREVfREVMQVlfTUVUSE9EX1RJTUVEIDB4MAorCisvKiBTb21lIGRpZmZlcmVudCBtb2RlcyBvZiBTUEkgb3BlcmF0aW9uICovCisjZGVmaW5lIElGX1NQSV9CVVNfTU9ERV84X0JJVF9BRERSRVNTXzE2X0JJVF9EQVRBIDB4MDAKKyNkZWZpbmUgSUZfU1BJX0JVU19NT0RFXzhfQklUX0FERFJFU1NfMzJfQklUX0RBVEEgMHgwMQorI2RlZmluZSBJRl9TUElfQlVTX01PREVfMTZfQklUX0FERFJFU1NfMTZfQklUX0RBVEEgMHgwMgorI2RlZmluZSBJRl9TUElfQlVTX01PREVfMTZfQklUX0FERFJFU1NfMzJfQklUX0RBVEEgMHgwMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYwppbmRleCBmNzY2MjNlLi44YWU5MzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCkBAIC01ODIsMjAgKzU4Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfaG9zdF90b19jYXJkX2RvbmUpOwogCi0vKioKLSAqICBAYnJpZWYgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXR3b3JrIHN0YXRpc3RpY3MKLSAqCi0gKiAgQHBhcmFtIGRldiAgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKLSAqICBAcmV0dXJuIAkgICBBIHBvaW50ZXIgdG8gbmV0X2RldmljZV9zdGF0cyBzdHJ1Y3R1cmUKLSAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsYnNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gZGV2LT5tbF9wcml2OwotCi0JbGJzX2RlYl9lbnRlcihMQlNfREVCX05FVCk7Ci0JcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQogc3RhdGljIGludCBsYnNfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xMDA2LDkgKzk5Miw4IEBACiBFWFBPUlRfU1lNQk9MX0dQTChsYnNfcmVzdW1lKTsKIAogLyoqCi0gKiAgQGJyaWVmIFRoaXMgZnVuY3Rpb24gZG93bmxvYWRzIGZpcm13YXJlIGltYWdlLCBnZXRzCi0gKiAgSFcgc3BlYyBmcm9tIGZpcm13YXJlIGFuZCBzZXQgYmFzaWMgcGFyYW1ldGVycyB0bwotICogIGZpcm13YXJlLgorICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgSFcgc3BlYyBmcm9tIHRoZSBmaXJtd2FyZSBhbmQgc2V0cworICogICAgICAgIHNvbWUgYmFzaWMgcGFyYW1ldGVycy4KICAqCiAgKiAgQHBhcmFtIHByaXYgICAgQSBwb2ludGVyIHRvIHN0cnVjdCBsYnNfcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqICBAcmV0dXJuIAkgICAwIG9yIC0xCkBAIC0xMTYzLDYgKzExNDgsMTcgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfTUFJTik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbGJzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuIAkJPSBsYnNfZGV2X29wZW4sCisJLm5kb19zdG9wCQk9IGxic19ldGhfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGJzX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGxic19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb190eF90aW1lb3V0IAk9IGxic190eF90aW1lb3V0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbGJzX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioKICAqIEBicmllZiBUaGlzIGZ1bmN0aW9uIGFkZHMgdGhlIGNhcmQuIGl0IHdpbGwgcHJvYmUgdGhlCiAgKiBjYXJkLCBhbGxvY2F0ZSB0aGUgbGJzX3ByaXYgYW5kIGluaXRpYWxpemUgdGhlIGRldmljZS4KQEAgLTExOTcsMTkgKzExOTMsMTMgQEAKIAlwcml2LT5pbmZyYV9vcGVuID0gMDsKIAogCS8qIFNldHVwIHRoZSBPUyBJbnRlcmZhY2UgdG8gb3VyIGZ1bmN0aW9ucyAqLwotCWRldi0+b3BlbiA9IGxic19kZXZfb3BlbjsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxic19oYXJkX3N0YXJ0X3htaXQ7Ci0JZGV2LT5zdG9wID0gbGJzX2V0aF9zdG9wOwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gbGJzX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPnR4X3RpbWVvdXQgPSBsYnNfdHhfdGltZW91dDsKLQlkZXYtPmdldF9zdGF0cyA9IGxic19nZXRfc3RhdHM7CisgCWRldi0+bmV0ZGV2X29wcyA9ICZsYnNfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOwogCWRldi0+ZXRodG9vbF9vcHMgPSAmbGJzX2V0aHRvb2xfb3BzOwogI2lmZGVmCVdJUkVMRVNTX0VYVAotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJmxic19oYW5kbGVyX2RlZjsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJmxic19oYW5kbGVyX2RlZjsKICNlbmRpZgogCWRldi0+ZmxhZ3MgfD0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1Q7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBsYnNfc2V0X211bHRpY2FzdF9saXN0OwogCiAJU0VUX05FVERFVl9ERVYoZGV2LCBkbWRldik7CiAKQEAgLTE0MTksNiArMTQwOSwxNCBAQAogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3N0b3BfY2FyZCk7CiAKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtZXNoX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxic19kZXZfb3BlbiwKKwkubmRvX3N0b3AgCQk9IGxic19tZXNoX3N0b3AsCisJLm5kb19zdGFydF94bWl0CQk9IGxic19oYXJkX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBsYnNfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbGJzX3NldF9tdWx0aWNhc3RfbGlzdCwKK307CisKIC8qKgogICogQGJyaWVmIFRoaXMgZnVuY3Rpb24gYWRkcyBtc2hYIGludGVyZmFjZQogICoKQEAgLTE0NDEsMTEgKzE0MzksNyBAQAogCW1lc2hfZGV2LT5tbF9wcml2ID0gcHJpdjsKIAlwcml2LT5tZXNoX2RldiA9IG1lc2hfZGV2OwogCi0JbWVzaF9kZXYtPm9wZW4gPSBsYnNfZGV2X29wZW47Ci0JbWVzaF9kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxic19oYXJkX3N0YXJ0X3htaXQ7Ci0JbWVzaF9kZXYtPnN0b3AgPSBsYnNfbWVzaF9zdG9wOwotCW1lc2hfZGV2LT5nZXRfc3RhdHMgPSBsYnNfZ2V0X3N0YXRzOwotCW1lc2hfZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBsYnNfc2V0X21hY19hZGRyZXNzOworCW1lc2hfZGV2LT5uZXRkZXZfb3BzID0gJm1lc2hfbmV0ZGV2X29wczsKIAltZXNoX2Rldi0+ZXRodG9vbF9vcHMgPSAmbGJzX2V0aHRvb2xfb3BzOwogCW1lbWNweShtZXNoX2Rldi0+ZGV2X2FkZHIsIHByaXYtPmRldi0+ZGV2X2FkZHIsCiAJCQlzaXplb2YocHJpdi0+ZGV2LT5kZXZfYWRkcikpOwpAQCAtMTQ1Niw3ICsxNDUwLDYgQEAKIAltZXNoX2Rldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJm1lc2hfaGFuZGxlcl9kZWY7CiAjZW5kaWYKIAltZXNoX2Rldi0+ZmxhZ3MgfD0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1Q7Ci0JbWVzaF9kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxic19zZXRfbXVsdGljYXN0X2xpc3Q7CiAJLyogUmVnaXN0ZXIgdmlydHVhbCBtZXNoIGludGVyZmFjZSAqLwogCXJldCA9IHJlZ2lzdGVyX25ldGRldihtZXNoX2Rldik7CiAJaWYgKHJldCkgewpAQCAtMTY0OSwxNCArMTY0Miw2IEBACiAJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxic19ydGFwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGRldi0+bWxfcHJpdjsKLQlsYnNfZGViX2VudGVyKExCU19ERUJfTkVUKTsKLQlyZXR1cm4gJnByaXYtPnN0YXRzOwotfQotCi0KIHN0YXRpYyB2b2lkIGxic19yZW1vdmVfcnRhcChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CiAJbGJzX2RlYl9lbnRlcihMQlNfREVCX01BSU4pOwpAQCAtMTY2OSw2ICsxNjU0LDEyIEBACiAJbGJzX2RlYl9sZWF2ZShMQlNfREVCX01BSU4pOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0YXBfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBsYnNfcnRhcF9vcGVuLAorCS5uZG9fc3RvcCA9IGxic19ydGFwX3N0b3AsCisJLm5kb19zdGFydF94bWl0ID0gbGJzX3J0YXBfaGFyZF9zdGFydF94bWl0LAorfTsKKwogc3RhdGljIGludCBsYnNfYWRkX3J0YXAoc3RydWN0IGxic19wcml2YXRlICpwcml2KQogewogCWludCByZXQgPSAwOwpAQCAtMTY4OCwxMCArMTY3OSw3IEBACiAKIAltZW1jcHkocnRhcF9kZXYtPmRldl9hZGRyLCBwcml2LT5jdXJyZW50X2FkZHIsIEVUSF9BTEVOKTsKIAlydGFwX2Rldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVA7Ci0JcnRhcF9kZXYtPm9wZW4gPSBsYnNfcnRhcF9vcGVuOwotCXJ0YXBfZGV2LT5zdG9wID0gbGJzX3J0YXBfc3RvcDsKLQlydGFwX2Rldi0+Z2V0X3N0YXRzID0gbGJzX3J0YXBfZ2V0X3N0YXRzOwotCXJ0YXBfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsYnNfcnRhcF9oYXJkX3N0YXJ0X3htaXQ7CisJcnRhcF9kZXYtPm5ldGRldl9vcHMgPSAmcnRhcF9uZXRkZXZfb3BzOwogCXJ0YXBfZGV2LT5tbF9wcml2ID0gcHJpdjsKIAlTRVRfTkVUREVWX0RFVihydGFwX2RldiwgcHJpdi0+ZGV2LT5kZXYucGFyZW50KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcmFkaW90YXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3JhZGlvdGFwLmgKaW5kZXggZjhlYjkwOTcuLmQxNmIyNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3JhZGlvdGFwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcmFkaW90YXAuaApAQCAtMzMsMjIgKzMzLDEyIEBACiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgaGRyOwogCXU4IGZsYWdzOwogCXU4IHJhdGU7Ci0JdTE2IGNoYW5fZnJlcTsKLQl1MTYgY2hhbl9mbGFnczsKLQl1OCBhbnRlbm5hOwogCXU4IGFudHNpZ25hbDsKLQl1MTYgcnhfZmxhZ3M7Ci0jaWYgMAotCXU4IHBhZFtJRUVFODAyMTFfUkFESU9UQVBfSERSTEVOIC0gMThdOwotI2VuZGlmCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBSWF9SQURJT1RBUF9QUkVTRU5UICgJCQlcCiAJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8CVwKIAkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSkgfAlcCi0JKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUwpIHwJXAotCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BKSB8CVwKIAkoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMKSB8XAotCSgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHUykgfAlcCiAJMCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3J4LmMKaW5kZXggMDc5ZTZhYS4uNjNkN2UxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9yeC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAogCWlmIChza2ItPmxlbiA8IChFVEhfSExFTiArIDggKyBzaXplb2Yoc3RydWN0IHJ4cGQpKSkgewogCQlsYnNfZGViX3J4KCJyeCBlcnI6IGZyYW1lIHJlY2VpdmVkIHdpdGggYmFkIGxlbmd0aFxuIik7Ci0JCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCXJldCA9IDA7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC0xNzksNyArMTc5LDcgQEAKIAlpZiAoIShwX3J4X3BkLT5zdGF0dXMgJiBjcHVfdG9fbGUxNihNUlZEUlZfUlhQRF9TVEFUVVNfT0spKSkgewogCQlsYnNfZGViX3J4KCJyeCBlcnI6IGZyYW1lIHJlY2VpdmVkIHdpdGggYmFkIHN0YXR1c1xuIik7CiAJCWxic19wcl9hbGVydCgicnhwZCBub3Qgb2tcbiIpOwotCQlwcml2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJcmV0ID0gMDsKIAkJZ290byBkb25lOwogCX0KQEAgLTI0Myw4ICsyNDMsOCBAQAogCWxic19jb21wdXRlX3Jzc2kocHJpdiwgcF9yeF9wZCk7CiAKIAlsYnNfZGViX3J4KCJyeCBkYXRhOiBzaXplIG9mIGFjdHVhbCBwYWNrZXQgJWRcbiIsIHNrYi0+bGVuKTsKLQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJaWYgKGluX2ludGVycnVwdCgpKQpAQCAtMzExLDcgKzMxMSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcmV0ID0gMDsKLQorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7CiAJc3RydWN0IHJ4ODAyMTFwYWNrZXRoZHIgKnBfcnhfcGt0OwogCXN0cnVjdCByeHBkICpwcnhwZDsKIAlzdHJ1Y3QgcnhfcmFkaW90YXBfaGRyIHJhZGlvdGFwX2hkcjsKQEAgLTMyNiw3ICszMjYsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDwgKEVUSF9ITEVOICsgOCArIHNpemVvZihzdHJ1Y3QgcnhwZCkpKSB7CiAJCWxic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgbGVuZ3RoXG4iKTsKLQkJcHJpdi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZG9uZTsKQEAgLTMzNyw3ICszMzcsNyBAQAogCSAqLwogCWlmICghKHByeHBkLT5zdGF0dXMgJiBjcHVfdG9fbGUxNihNUlZEUlZfUlhQRF9TVEFUVVNfT0spKSkgewogCQkvL2xic19kZWJfcngoInJ4IGVycjogZnJhbWUgcmVjZWl2ZWQgd2l0aCBiYWQgc3RhdHVzXG4iKTsKLQkJcHJpdi0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJfQogCiAJbGJzX2RlYl9yeCgicnggZGF0YTogc2tiLT5sZW4tc2l6ZW9mKFJ4UGQpID0gJWQtJXpkID0gJXpkXG4iLApAQCAtMzUxLDE5ICszNTEsMTEgQEAKIAlyYWRpb3RhcF9oZHIuaGRyLml0X3BhZCA9IDA7CiAJcmFkaW90YXBfaGRyLmhkci5pdF9sZW4gPSBjcHVfdG9fbGUxNiAoc2l6ZW9mKHN0cnVjdCByeF9yYWRpb3RhcF9oZHIpKTsKIAlyYWRpb3RhcF9oZHIuaGRyLml0X3ByZXNlbnQgPSBjcHVfdG9fbGUzMiAoUlhfUkFESU9UQVBfUFJFU0VOVCk7Ci0JLyogdW5rbm93biB2YWx1ZXMgKi8KLQlyYWRpb3RhcF9oZHIuZmxhZ3MgPSAwOwotCXJhZGlvdGFwX2hkci5jaGFuX2ZyZXEgPSAwOwotCXJhZGlvdGFwX2hkci5jaGFuX2ZsYWdzID0gMDsKLQlyYWRpb3RhcF9oZHIuYW50ZW5uYSA9IDA7Ci0JLyoga25vd24gdmFsdWVzICovCisJaWYgKCEocHJ4cGQtPnN0YXR1cyAmIGNwdV90b19sZTE2KE1SVkRSVl9SWFBEX1NUQVRVU19PSykpKQorCQlyYWRpb3RhcF9oZHIuZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfQkFERkNTOwogCXJhZGlvdGFwX2hkci5yYXRlID0gY29udmVydF9tdl9yYXRlX3RvX3JhZGlvdGFwKHByeHBkLT5yeF9yYXRlKTsKIAkvKiBYWFggbXVzdCBjaGVjayBubyBjYXJyeW91dCAqLwogCXJhZGlvdGFwX2hkci5hbnRzaWduYWwgPSBwcnhwZC0+c25yICsgcHJ4cGQtPm5mOwotCXJhZGlvdGFwX2hkci5yeF9mbGFncyA9IDA7Ci0JaWYgKCEocHJ4cGQtPnN0YXR1cyAmIGNwdV90b19sZTE2KE1SVkRSVl9SWFBEX1NUQVRVU19PSykpKQotCQlyYWRpb3RhcF9oZHIucnhfZmxhZ3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfUlhfQkFERkNTOwotCS8vbWVtc2V0KHJhZGlvdGFwX2hkci5wYWQsIDB4MTEsIElFRUU4MDIxMV9SQURJT1RBUF9IRFJMRU4gLSAxOCk7CiAKIAkvKiBjaG9wIHRoZSByeHBkICovCiAJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHJ4cGQpKTsKQEAgLTM4OSw4ICszODEsOCBAQAogCWxic19jb21wdXRlX3Jzc2kocHJpdiwgcHJ4cGQpOwogCiAJbGJzX2RlYl9yeCgicnggZGF0YTogc2l6ZSBvZiBhY3R1YWwgcGFja2V0ICVkXG4iLCBza2ItPmxlbik7Ci0JcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBwcml2LT5ydGFwX25ldF9kZXYpOwogCW5ldGlmX3J4KHNrYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKaW5kZXggOTAxNDk1MC4uODEyNGRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwpAQCAtNjkyLDcgKzY5Miw3IEBACiAJCQkJCSAgICBic3MtPndwYV9pZV9sZW4pOwogCQkJfSBlbHNlIGlmIChwb3NbMV0gPj0gTUFSVkVMTF9NRVNIX0lFX0xFTkdUSCAmJgogCQkJCSAgIHBvc1syXSA9PSAweDAwICYmIHBvc1szXSA9PSAweDUwICYmCi0JCQkJICAgcG9zWzRdID09IDB4NDMgJiYgcG9zWzRdID09IDB4MDQpIHsKKwkJCQkgICBwb3NbNF0gPT0gMHg0MyAmJiBwb3NbNV0gPT0gMHgwNCkgewogCQkJCWxic19kZWJfc2NhbigiZ290IG1lc2ggSUVcbiIpOwogCQkJCWJzcy0+bWVzaCA9IDE7CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKaW5kZXggNjhiZWMzMS4uZjEwYWEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCkBAIC04Miw4ICs4Miw4IEBACiAJCSAgICAgICBza2ItPmxlbiwgTVJWRFJWX0VUSF9UWF9QQUNLRVRfQlVGRkVSX1NJWkUpOwogCQkvKiBXZSdsbCBuZXZlciBtYW5hZ2UgdG8gc2VuZCB0aGlzIG9uZTsgZHJvcCBpdCBhbmQgcmV0dXJuICdPSycgKi8KIAotCQlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJZ290byBmcmVlOwogCX0KIApAQCAtMTQ2LDggKzE0Niw4IEBACiAKIAlsYnNfZGViX3R4KCIlcyBsaW5lZCB1cCBwYWNrZXRcbiIsIF9fZnVuY19fKTsKIAotCXByaXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwppbmRleCBmMTZkMTM2Li44YmMxOTA3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYwpAQCAtODMwLDcgKzgzMCw3IEBACiAJcXVhbGl0eSA9IHJzc2lfcXVhbDsKIAogCS8qIFF1YWxpdHkgYnkgVFggZXJyb3JzICovCi0JcHJpdi0+d3N0YXRzLmRpc2NhcmQucmV0cmllcyA9IHByaXYtPnN0YXRzLnR4X2Vycm9yczsKKwlwcml2LT53c3RhdHMuZGlzY2FyZC5yZXRyaWVzID0gZGV2LT5zdGF0cy50eF9lcnJvcnM7CiAKIAltZW1zZXQoJmxvZywgMCwgc2l6ZW9mKGxvZykpOwogCWxvZy5oZHIuc2l6ZSA9IGNwdV90b19sZTE2KHNpemVvZihsb2cpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvY21kLmMKaW5kZXggM2QzOTE0Yy4uMjg3OTBlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvY21kLmMKQEAgLTI4Niw3ICsyODYsNyBAQAogCWxidGZfY21kX2FzeW5jKHByaXYsIENNRF84MDJfMTFfU0VUX01PREUsICZjbWQuaGRyLCBzaXplb2YoY21kKSk7CiB9CiAKLXZvaWQgbGJ0Zl9zZXRfYnNzaWQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgYm9vbCBhY3RpdmF0ZSwgdTggKmJzc2lkKQordm9pZCBsYnRmX3NldF9ic3NpZChzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBib29sIGFjdGl2YXRlLCBjb25zdCB1OCAqYnNzaWQpCiB7CiAJc3RydWN0IGNtZF9kc19zZXRfYnNzaWQgY21kOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9saWJlcnRhc190Zi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbGliZXJ0YXNfdGYuaAppbmRleCA4OTk1Y2Q3Li40Y2M0MmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9saWJlcnRhc190Zi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL2xpYmVydGFzX3RmLmgKQEAgLTQ2Myw3ICs0NjMsNyBAQAogaW50IGxidGZfdXBkYXRlX2h3X3NwZWMoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdik7CiBpbnQgbGJ0Zl9jbWRfc2V0X21hY19tdWx0aWNhc3RfYWRkcihzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2KTsKIHZvaWQgbGJ0Zl9zZXRfbW9kZShzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCBlbnVtIGxidGZfbW9kZSBtb2RlKTsKLXZvaWQgbGJ0Zl9zZXRfYnNzaWQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgYm9vbCBhY3RpdmF0ZSwgdTggKmJzc2lkKTsKK3ZvaWQgbGJ0Zl9zZXRfYnNzaWQoc3RydWN0IGxidGZfcHJpdmF0ZSAqcHJpdiwgYm9vbCBhY3RpdmF0ZSwgY29uc3QgdTggKmJzc2lkKTsKIGludCBsYnRmX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2LCB1aW50OF90ICptYWNfYWRkcik7CiAKIGludCBsYnRmX3NldF9jaGFubmVsKHN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYsIHU4IGNoYW5uZWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggZjgzZDY5ZS4uZDRmZGM4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC0xMCw3ICsxMCw2IEBACiAvKgogICogVE9ETzoKICAqIC0gSUJTUyBtb2RlIHNpbXVsYXRpb24gKEJlYWNvbiB0cmFuc21pc3Npb24gd2l0aCBjb21wZXRpdGlvbiBmb3IgImFpciB0aW1lIikKLSAqIC0gSUVFRSA4MDIuMTFhIGFuZCA4MDIuMTFuIG1vZGVzCiAgKiAtIFJYIGZpbHRlcmluZyBiYXNlZCBvbiBmaWx0ZXIgY29uZmlndXJhdGlvbiAoZGF0YS0+cnhfZmlsdGVyKQogICovCiAKQEAgLTMxLDYgKzMwLDExMiBAQAogbW9kdWxlX3BhcmFtKHJhZGlvcywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmFkaW9zLCAiTnVtYmVyIG9mIHNpbXVsYXRlZCByYWRpb3MiKTsKIAorLyoqCisgKiBlbnVtIGh3c2ltX3JlZ3Rlc3QgLSB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IHRlc3RzIHdlIG9mZmVyCisgKgorICogVGhlc2UgYXJlIHRoZSBkaWZmZXJlbnQgdmFsdWVzIHlvdSBjYW4gdXNlIGZvciB0aGUgcmVndGVzdAorICogbW9kdWxlIHBhcmFtZXRlci4gVGhpcyBpcyB1c2VmdWwgdG8gaGVscCB0ZXN0IHdvcmxkIHJvYW1pbmcKKyAqIGFuZCB0aGUgZHJpdmVyIHJlZ3VsYXRvcnlfaGludCgpIGNhbGwgYW5kIGNvbWJpbmF0aW9ucyBvZiB0aGVzZS4KKyAqIElmIHlvdSB3YW50IHRvIGRvIHNwZWNpZmljIGFscGhhMiByZWd1bGF0b3J5IGRvbWFpbiB0ZXN0cyBzaW1wbHkKKyAqIHVzZSB0aGUgdXNlcnNwYWNlIHJlZ3VsYXRvcnkgcmVxdWVzdCBhcyB0aGF0IHdpbGwgYmUgcmVzcGVjdGVkIGFzCisgKiB3ZWxsIHdpdGhvdXQgdGhlIG5lZWQgb2YgdGhpcyBtb2R1bGUgcGFyYW1ldGVyLiBUaGlzIGlzIGRlc2lnbmVkCisgKiBvbmx5IGZvciB0ZXN0aW5nIHRoZSBkcml2ZXIgcmVndWxhdG9yeSByZXF1ZXN0LCB3b3JsZCByb2FtaW5nCisgKiBhbmQgYWxsIHBvc3NpYmxlIGNvbWJpbmF0aW9ucy4KKyAqCisgKiBASFdTSU1fUkVHVEVTVF9ESVNBQkxFRDogTm8gcmVndWxhdG9yeSB0ZXN0cyBhcmUgcGVyZm9ybWVkLAorICogCXRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUuCisgKiBASFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0ZPTExPVzogVXNlZCBmb3IgdGVzdGluZyB0aGUgZHJpdmVyIHJlZ3VsYXRvcnkKKyAqCWhpbnQsIG9ubHkgb25lIGRyaXZlciByZWd1bGF0b3J5IGhpbnQgd2lsbCBiZSBzZW50IGFzIHN1Y2ggdGhlCisgKiAJc2Vjb25kYXJ5IHJhZGlvcyBhcmUgZXhwZWN0ZWQgdG8gZm9sbG93LgorICogQEhXU0lNX1JFR1RFU1RfRFJJVkVSX1JFR19BTEw6IFVzZWQgZm9yIHRlc3RpbmcgdGhlIGRyaXZlciByZWd1bGF0b3J5CisgKiAJcmVxdWVzdCB3aXRoIGFsbCByYWRpb3MgcmVwb3J0aW5nIHRoZSBzYW1lIHJlZ3VsYXRvcnkgZG9tYWluLgorICogQEhXU0lNX1JFR1RFU1RfRElGRl9DT1VOVFJZOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBkcml2ZXJzIGNhbGxpbmcKKyAqIAlkaWZmZXJlbnQgcmVndWxhdG9yeSBkb21haW5zIHJlcXVlc3RzLiBFeHBlY3RlZCBiZWhhdmlvdXIgaXMgZm9yCisgKiAJYW4gaW50ZXJzZWN0aW9uIHRvIG9jY3VyIGJ1dCBlYWNoIGRldmljZSB3aWxsIHN0aWxsIHVzZSB0aGVpcgorICogCXJlc3BlY3RpdmUgcmVndWxhdG9yeSByZXF1ZXN0ZWQgZG9tYWlucy4gU3Vic2VxdWVudCByYWRpb3Mgd2lsbAorICogCXVzZSB0aGUgcmVzdWx0aW5nIGludGVyc2VjdGlvbi4KKyAqIEBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06IFVzZWQgZm9yIHRlc3RpbmcgdGhlIHdvcmxkIHJvYW1pbmcuIFdlIGFjb21wbGlzaAorICoJdGhpcyBieSB1c2luZyBhIGN1c3RvbSBiZWFjb24tY2FwYWJsZSByZWd1bGF0b3J5IGRvbWFpbiBmb3IgdGhlIGZpcnN0CisgKglyYWRpby4gQWxsIG90aGVyIGRldmljZSB3b3JsZCByb2FtLgorICogQEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEOiBVc2VkIGZvciB0ZXN0aW5nIHRoZSBjdXN0b20gd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbiByZXF1ZXN0cy4gQWxsIHJhZGlvcyB3aWxsIGFkaGVyZSB0byB0aGlzIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisgKiAJZG9tYWluLgorICogQEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEXzI6IFVzZWQgZm9yIHRlc3RpbmcgMiBjdXN0b20gd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbiByZXF1ZXN0cy4gVGhlIGZpcnN0IHJhZGlvIHdpbGwgYWRoZXJlIHRvIHRoZSBmaXJzdCBjdXN0b20gd29ybGQKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbiwgdGhlIHNlY29uZCBvbmUgdG8gdGhlIHNlY29uZCBjdXN0b20gd29ybGQgcmVndWxhdG9yeQorICogCWRvbWFpbi4gQWxsIG90aGVyIGRldmljZXMgd2lsbCB3b3JsZCByb2FtLgorICogQEhXU0lNX1JFR1RFU1RfU1RSSUNUX0ZPTExPV186IFVzZWQgZm9yIHRlc3Rpbmcgc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluCisgKglzZXR0aW5ncywgb25seSB0aGUgZmlyc3QgcmFkaW8gd2lsbCBzZW5kIGEgcmVndWxhdG9yeSBkb21haW4gcmVxdWVzdAorICoJYW5kIHVzZSBzdHJpY3Qgc2V0dGluZ3MuIFRoZSByZXN0IG9mIHRoZSByYWRpb3MgYXJlIGV4cGVjdGVkIHRvIGZvbGxvdy4KKyAqIEBIV1NJTV9SRUdURVNUX1NUUklDVF9BTEw6IFVzZWQgZm9yIHRlc3Rpbmcgc3RyaWN0IHJlZ3VsYXRvcnkgZG9tYWluCisgKglzZXR0aW5ncy4gQWxsIHJhZGlvcyB3aWxsIGFkaGVyZSB0byB0aGlzLgorICogQEhXU0lNX1JFR1RFU1RfU1RSSUNUX0FORF9EUklWRVJfUkVHOiBVc2VkIGZvciB0ZXN0aW5nIHN0cmljdCByZWd1bGF0b3J5CisgKglkb21haW4gc2V0dGluZ3MsIGNvbWJpbmVkIHdpdGggc2Vjb25kYXJ5IGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbgorICoJc2V0dGluZ3MuIFRoZSBmaXJzdCByYWRpbyB3aWxsIGdldCBhIHN0cmljdCByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5nCisgKgl1c2luZyB0aGUgZmlyc3QgZHJpdmVyIHJlZ3VsYXRvcnkgcmVxdWVzdCBhbmQgdGhlIHNlY29uZCByYWRpbyB3aWxsIHVzZQorICoJbm9uLXN0cmljdCBzZXR0aW5ncyB1c2luZyB0aGUgc2Vjb25kIGRyaXZlciByZWd1bGF0b3J5IHJlcXVlc3QuIEFsbAorICoJb3RoZXIgZGV2aWNlcyBzaG91bGQgZm9sbG93IHRoZSBpbnRlcnNlY3Rpb24gY3JlYXRlZCBiZXR3ZWVuIHRoZQorICoJZmlyc3QgdHdvLgorICogQEhXU0lNX1JFR1RFU1RfQUxMOiBVc2VkIGZvciB0ZXN0aW5nIGV2ZXJ5IHBvc3NpYmxlIG1peC4gWW91IHdpbGwgbmVlZAorICogCWF0IGxlYXN0IDYgcmFkaW9zIGZvciBhIGNvbXBsZXRlIHRlc3QuIFdlIHdpbGwgdGVzdCBpbiB0aGlzIG9yZGVyOgorICogCTEgLSBkcml2ZXIgY3VzdG9tIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJMiAtIHNlY29uZCBjdXN0b20gd29ybGQgcmVndWxhdG9yeSBkb21haW4KKyAqIAkzIC0gZmlyc3QgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3QKKyAqIAk0IC0gc2Vjb25kIGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbiByZXF1ZXN0CisgKiAJNSAtIHN0cmljdCByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5ncyB1c2luZyB0aGUgdGhpcmQgZHJpdmVyIHJlZ3VsYXRvcnkKKyAqIAkgICAgZG9tYWluIHJlcXVlc3QKKyAqIAk2IGFuZCBvbiAtIHNob3VsZCBmb2xsb3cgdGhlIGludGVyc2VjdGlvbiBvZiB0aGUgM3JkLCA0cnRoIGFuZCA1dGggcmFkaW8KKyAqIAkgICAgICAgICAgIHJlZ3VsYXRvcnkgcmVxdWVzdHMuCisgKi8KK2VudW0gaHdzaW1fcmVndGVzdCB7CisJSFdTSU1fUkVHVEVTVF9ESVNBQkxFRCA9IDAsCisJSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0ZPTExPVyA9IDEsCisJSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0FMTCA9IDIsCisJSFdTSU1fUkVHVEVTVF9ESUZGX0NPVU5UUlkgPSAzLAorCUhXU0lNX1JFR1RFU1RfV09STERfUk9BTSA9IDQsCisJSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STEQgPSA1LAorCUhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEXzIgPSA2LAorCUhXU0lNX1JFR1RFU1RfU1RSSUNUX0ZPTExPVyA9IDcsCisJSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQUxMID0gOCwKKwlIV1NJTV9SRUdURVNUX1NUUklDVF9BTkRfRFJJVkVSX1JFRyA9IDksCisJSFdTSU1fUkVHVEVTVF9BTEwgPSAxMCwKK307CisKKy8qIFNldCB0byBvbmUgb2YgdGhlIEhXU0lNX1JFR1RFU1RfKiB2YWx1ZXMgYWJvdmUgKi8KK3N0YXRpYyBpbnQgcmVndGVzdCA9IEhXU0lNX1JFR1RFU1RfRElTQUJMRUQ7Cittb2R1bGVfcGFyYW0ocmVndGVzdCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocmVndGVzdCwgIlRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgdGVzdCB3ZSB3YW50IHRvIHJ1biIpOworCitzdGF0aWMgY29uc3QgY2hhciAqaHdzaW1fYWxwaGEyc1tdID0geworCSJGSSIsCisJIkFMIiwKKwkiVVMiLAorCSJERSIsCisJIkpQIiwKKwkiQUwiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDEgPSB7CisJLm5fcmVnX3J1bGVzID0gNCwKKwkuYWxwaGEyID0gICI5OSIsCisJLnJlZ19ydWxlcyA9IHsKKwkJUkVHX1JVTEUoMjQxMi0xMCwgMjQ2MisxMCwgNDAsIDAsIDIwLCAwKSwKKwkJUkVHX1JVTEUoMjQ4NC0xMCwgMjQ4NCsxMCwgNDAsIDAsIDIwLCAwKSwKKwkJUkVHX1JVTEUoNTE1MC0xMCwgNTI0MCsxMCwgNDAsIDAsIDMwLCAwKSwKKwkJUkVHX1JVTEUoNTc0NS0xMCwgNTgyNSsxMCwgNDAsIDAsIDMwLCAwKSwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMiA9IHsKKwkubl9yZWdfcnVsZXMgPSAyLAorCS5hbHBoYTIgPSAgIjk5IiwKKwkucmVnX3J1bGVzID0geworCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgMCwgMjAsIDApLAorCQlSRUdfUlVMRSg1NzI1LTEwLCA1ODUwKzEwLCA0MCwgMCwgMzAsCisJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfCBOTDgwMjExX1JSRl9OT19JQlNTKSwKKwl9Cit9OworCiBzdHJ1Y3QgaHdzaW1fdmlmX3ByaXYgewogCXUzMiBtYWdpYzsKIAl1OCBic3NpZFtFVEhfQUxFTl07CkBAIC04NiwyMiArMTkxLDY1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaHdzaW1fbW9uOyAvKiBnbG9iYWwgbW9uaXRvciBuZXRkZXYgKi8KIAorI2RlZmluZSBDSEFOMkcoX2ZyZXEpICB7IFwKKwkuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFosIFwKKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCBcCisJLmh3X3ZhbHVlID0gKF9mcmVxKSwgXAorCS5tYXhfcG93ZXIgPSAyMCwgXAorfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGh3c2ltX2NoYW5uZWxzW10gPSB7Ci0JeyAuY2VudGVyX2ZyZXEgPSAyNDEyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDE3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDIyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDI3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDMyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDM3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDQyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDQ3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDUyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDU3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDYyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDY3IH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDcyIH0sCi0JeyAuY2VudGVyX2ZyZXEgPSAyNDg0IH0sCisjZGVmaW5lIENIQU41RyhfZnJlcSkgeyBcCisJLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCBcCisJLmNlbnRlcl9mcmVxID0gKF9mcmVxKSwgXAorCS5od192YWx1ZSA9IChfZnJlcSksIFwKKwkubWF4X3Bvd2VyID0gMjAsIFwKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBod3NpbV9jaGFubmVsc18yZ2h6W10gPSB7CisJQ0hBTjJHKDI0MTIpLCAvKiBDaGFubmVsIDEgKi8KKwlDSEFOMkcoMjQxNyksIC8qIENoYW5uZWwgMiAqLworCUNIQU4yRygyNDIyKSwgLyogQ2hhbm5lbCAzICovCisJQ0hBTjJHKDI0MjcpLCAvKiBDaGFubmVsIDQgKi8KKwlDSEFOMkcoMjQzMiksIC8qIENoYW5uZWwgNSAqLworCUNIQU4yRygyNDM3KSwgLyogQ2hhbm5lbCA2ICovCisJQ0hBTjJHKDI0NDIpLCAvKiBDaGFubmVsIDcgKi8KKwlDSEFOMkcoMjQ0NyksIC8qIENoYW5uZWwgOCAqLworCUNIQU4yRygyNDUyKSwgLyogQ2hhbm5lbCA5ICovCisJQ0hBTjJHKDI0NTcpLCAvKiBDaGFubmVsIDEwICovCisJQ0hBTjJHKDI0NjIpLCAvKiBDaGFubmVsIDExICovCisJQ0hBTjJHKDI0NjcpLCAvKiBDaGFubmVsIDEyICovCisJQ0hBTjJHKDI0NzIpLCAvKiBDaGFubmVsIDEzICovCisJQ0hBTjJHKDI0ODQpLCAvKiBDaGFubmVsIDE0ICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGh3c2ltX2NoYW5uZWxzXzVnaHpbXSA9IHsKKwlDSEFONUcoNTE4MCksIC8qIENoYW5uZWwgMzYgKi8KKwlDSEFONUcoNTIwMCksIC8qIENoYW5uZWwgNDAgKi8KKwlDSEFONUcoNTIyMCksIC8qIENoYW5uZWwgNDQgKi8KKwlDSEFONUcoNTI0MCksIC8qIENoYW5uZWwgNDggKi8KKworCUNIQU41Ryg1MjYwKSwgLyogQ2hhbm5lbCA1MiAqLworCUNIQU41Ryg1MjgwKSwgLyogQ2hhbm5lbCA1NiAqLworCUNIQU41Ryg1MzAwKSwgLyogQ2hhbm5lbCA2MCAqLworCUNIQU41Ryg1MzIwKSwgLyogQ2hhbm5lbCA2NCAqLworCisJQ0hBTjVHKDU1MDApLCAvKiBDaGFubmVsIDEwMCAqLworCUNIQU41Ryg1NTIwKSwgLyogQ2hhbm5lbCAxMDQgKi8KKwlDSEFONUcoNTU0MCksIC8qIENoYW5uZWwgMTA4ICovCisJQ0hBTjVHKDU1NjApLCAvKiBDaGFubmVsIDExMiAqLworCUNIQU41Ryg1NTgwKSwgLyogQ2hhbm5lbCAxMTYgKi8KKwlDSEFONUcoNTYwMCksIC8qIENoYW5uZWwgMTIwICovCisJQ0hBTjVHKDU2MjApLCAvKiBDaGFubmVsIDEyNCAqLworCUNIQU41Ryg1NjQwKSwgLyogQ2hhbm5lbCAxMjggKi8KKwlDSEFONUcoNTY2MCksIC8qIENoYW5uZWwgMTMyICovCisJQ0hBTjVHKDU2ODApLCAvKiBDaGFubmVsIDEzNiAqLworCUNIQU41Ryg1NzAwKSwgLyogQ2hhbm5lbCAxNDAgKi8KKworCUNIQU41Ryg1NzQ1KSwgLyogQ2hhbm5lbCAxNDkgKi8KKwlDSEFONUcoNTc2NSksIC8qIENoYW5uZWwgMTUzICovCisJQ0hBTjVHKDU3ODUpLCAvKiBDaGFubmVsIDE1NyAqLworCUNIQU41Ryg1ODA1KSwgLyogQ2hhbm5lbCAxNjEgKi8KKwlDSEFONUcoNTgyNSksIC8qIENoYW5uZWwgMTY1ICovCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIGh3c2ltX3JhdGVzW10gPSB7CkBAIC0xMjYsOCArMjc0LDkgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNbQVJSQVlfU0laRShod3NpbV9jaGFubmVscyldOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZHNbMl07CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzJnaHpbQVJSQVlfU0laRShod3NpbV9jaGFubmVsc18yZ2h6KV07CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzVnaHpbQVJSQVlfU0laRShod3NpbV9jaGFubmVsc181Z2h6KV07CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0FSUkFZX1NJWkUoaHdzaW1fcmF0ZXMpXTsKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKQEAgLTU5MCwxMCArNzM5LDE2IEBACiAJLm5hbWUgPSAibWFjODAyMTFfaHdzaW0iCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGh3c2ltX25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0IAk9IGh3c2ltX21vbl94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OwogCiBzdGF0aWMgdm9pZCBod3NpbV9tb25fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGh3c2ltX21vbl94bWl0OworCWRldi0+bmV0ZGV2X29wcyA9ICZod3NpbV9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwogCWV0aGVyX3NldHVwKGRldik7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAwOwpAQCAtNzI4LDYgKzg4Myw3IEBACiAJdTggYWRkcltFVEhfQUxFTl07CiAJc3RydWN0IG1hYzgwMjExX2h3c2ltX2RhdGEgKmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOwogCiAJaWYgKHJhZGlvcyA8IDEgfHwgcmFkaW9zID4gMTAwKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTc3NywzMiArOTMzLDExNiBAQAogCQkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKIAkJCUJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAogCQkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpOwotCQlody0+YW1wZHVfcXVldWVzID0gMTsKKworCQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEU7CiAKIAkJLyogYXNrIG1hYzgwMjExIHRvIHJlc2VydmUgc3BhY2UgZm9yIG1hZ2ljICovCiAJCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBod3NpbV92aWZfcHJpdik7CiAJCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBod3NpbV9zdGFfcHJpdik7CiAKLQkJbWVtY3B5KGRhdGEtPmNoYW5uZWxzLCBod3NpbV9jaGFubmVscywgc2l6ZW9mKGh3c2ltX2NoYW5uZWxzKSk7CisJCW1lbWNweShkYXRhLT5jaGFubmVsc18yZ2h6LCBod3NpbV9jaGFubmVsc18yZ2h6LAorCQkJc2l6ZW9mKGh3c2ltX2NoYW5uZWxzXzJnaHopKTsKKwkJbWVtY3B5KGRhdGEtPmNoYW5uZWxzXzVnaHosIGh3c2ltX2NoYW5uZWxzXzVnaHosCisJCQlzaXplb2YoaHdzaW1fY2hhbm5lbHNfNWdoeikpOwogCQltZW1jcHkoZGF0YS0+cmF0ZXMsIGh3c2ltX3JhdGVzLCBzaXplb2YoaHdzaW1fcmF0ZXMpKTsKLQkJZGF0YS0+YmFuZC5jaGFubmVscyA9IGRhdGEtPmNoYW5uZWxzOwotCQlkYXRhLT5iYW5kLm5fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKGh3c2ltX2NoYW5uZWxzKTsKLQkJZGF0YS0+YmFuZC5iaXRyYXRlcyA9IGRhdGEtPnJhdGVzOwotCQlkYXRhLT5iYW5kLm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKGh3c2ltX3JhdGVzKTsKLQkJZGF0YS0+YmFuZC5odF9jYXAuaHRfc3VwcG9ydGVkID0gdHJ1ZTsKLQkJZGF0YS0+YmFuZC5odF9jYXAuY2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAotCQkJSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEIHwKLQkJCUlFRUU4MDIxMV9IVF9DQVBfU0dJXzQwIHwKLQkJCUlFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5hbXBkdV9mYWN0b3IgPSAweDM7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLmFtcGR1X2RlbnNpdHkgPSAweDY7Ci0JCW1lbXNldCgmZGF0YS0+YmFuZC5odF9jYXAubWNzLCAwLAotCQkgICAgICAgc2l6ZW9mKGRhdGEtPmJhbmQuaHRfY2FwLm1jcykpOwotCQlkYXRhLT5iYW5kLmh0X2NhcC5tY3MucnhfbWFza1swXSA9IDB4ZmY7Ci0JCWRhdGEtPmJhbmQuaHRfY2FwLm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKLQkJZGF0YS0+YmFuZC5odF9jYXAubWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKLQkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZkYXRhLT5iYW5kOwogCisJCWZvciAoYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kID0gJmRhdGEtPmJhbmRzW2JhbmRdOworCQkJc3dpdGNoIChiYW5kKSB7CisJCQljYXNlIElFRUU4MDIxMV9CQU5EXzJHSFo6CisJCQkJc2JhbmQtPmNoYW5uZWxzID0gZGF0YS0+Y2hhbm5lbHNfMmdoejsKKwkJCQlzYmFuZC0+bl9jaGFubmVscyA9CisJCQkJCUFSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHNfMmdoeik7CisJCQkJYnJlYWs7CisJCQljYXNlIElFRUU4MDIxMV9CQU5EXzVHSFo6CisJCQkJc2JhbmQtPmNoYW5uZWxzID0gZGF0YS0+Y2hhbm5lbHNfNWdoejsKKwkJCQlzYmFuZC0+bl9jaGFubmVscyA9CisJCQkJCUFSUkFZX1NJWkUoaHdzaW1fY2hhbm5lbHNfNWdoeik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCisJCQlzYmFuZC0+Yml0cmF0ZXMgPSBkYXRhLT5yYXRlczsKKwkJCXNiYW5kLT5uX2JpdHJhdGVzID0gQVJSQVlfU0laRShod3NpbV9yYXRlcyk7CisKKwkJCXNiYW5kLT5odF9jYXAuaHRfc3VwcG9ydGVkID0gdHJ1ZTsKKwkJCXNiYW5kLT5odF9jYXAuY2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAorCQkJCUlFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRCB8CisJCQkJSUVFRTgwMjExX0hUX0NBUF9TR0lfNDAgfAorCQkJCUlFRUU4MDIxMV9IVF9DQVBfRFNTU0NDSzQwOworCQkJc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3IgPSAweDM7CisJCQlzYmFuZC0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPSAweDY7CisJCQltZW1zZXQoJnNiYW5kLT5odF9jYXAubWNzLCAwLAorCQkJICAgICAgIHNpemVvZihzYmFuZC0+aHRfY2FwLm1jcykpOworCQkJc2JhbmQtPmh0X2NhcC5tY3MucnhfbWFza1swXSA9IDB4ZmY7CisJCQlzYmFuZC0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdID0gMHhmZjsKKwkJCXNiYW5kLT5odF9jYXAubWNzLnR4X3BhcmFtcyA9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKKworCQkJaHctPndpcGh5LT5iYW5kc1tiYW5kXSA9IHNiYW5kOworCQl9CisKKwkJLyogV29yayB0byBiZSBkb25lIHByaW9yIHRvIGllZWU4MDIxMV9yZWdpc3Rlcl9odygpICovCisJCXN3aXRjaCAocmVndGVzdCkgeworCQljYXNlIEhXU0lNX1JFR1RFU1RfRElTQUJMRUQ6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0ZPTExPVzoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfQUxMOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfRElGRl9DT1VOVFJZOgorCQkJLyoKKwkJCSAqIE5vdGhpbmcgdG8gYmUgZG9uZSBmb3IgZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluCisJCQkgKiBoaW50cyBwcmlvciB0byBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKQorCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1dPUkxEX1JPQU06CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0NVU1RPTV9XT1JMRDoKKwkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCSZod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tXzAxKTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfQ1VTVE9NX1dPUkxEXzI6CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9IGVsc2UgaWYgKGkgPT0gMSkgeworCQkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDIpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQUxMOgorCQkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9GT0xMT1c6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQU5EX0RSSVZFUl9SRUc6CisJCQlpZiAoaSA9PSAwKQorCQkJCWh3LT53aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9BTEw6CisJCQlpZiAoaSA9PSAwKSB7CisJCQkJaHctPndpcGh5LT5jdXN0b21fcmVndWxhdG9yeSA9IHRydWU7CisJCQkJd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoaHctPndpcGh5LAorCQkJCQkmaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbV8wMSk7CisJCQl9IGVsc2UgaWYgKGkgPT0gMSkgeworCQkJCWh3LT53aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkgPSB0cnVlOworCQkJCXdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5KGh3LT53aXBoeSwKKwkJCQkJJmh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21fMDIpOworCQkJfSBlbHNlIGlmIChpID09IDQpCisJCQkJaHctPndpcGh5LT5zdHJpY3RfcmVndWxhdG9yeSA9IHRydWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJLyogZ2l2ZSB0aGUgcmVndWxhdG9yeSB3b3JrcXVldWUgYSBjaGFuY2UgdG8gcnVuICovCisJCWlmIChyZWd0ZXN0KQorCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKDEpOwogCQllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIm1hYzgwMjExX2h3c2ltOiAiCkBAIC04MTAsNiArMTA1MCw1MiBAQAogCQkJZ290byBmYWlsZWRfaHc7CiAJCX0KIAorCQkvKiBXb3JrIHRvIGJlIGRvbmUgYWZ0ZXIgdG8gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KCkgKi8KKwkJc3dpdGNoIChyZWd0ZXN0KSB7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9XT1JMRF9ST0FNOgorCQljYXNlIEhXU0lNX1JFR1RFU1RfRElTQUJMRUQ6CisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX0RSSVZFUl9SRUdfRk9MTE9XOgorCQkJaWYgKCFpKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMF0pOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9EUklWRVJfUkVHX0FMTDoKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9BTEw6CisJCQlyZWd1bGF0b3J5X2hpbnQoaHctPndpcGh5LCBod3NpbV9hbHBoYTJzWzBdKTsKKwkJCWJyZWFrOworCQljYXNlIEhXU0lNX1JFR1RFU1RfRElGRl9DT1VOVFJZOgorCQkJaWYgKGkgPCBBUlJBWV9TSVpFKGh3c2ltX2FscGhhMnMpKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbaV0pOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STEQ6CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9DVVNUT01fV09STERfMjoKKwkJCS8qCisJCQkgKiBOb3RoaW5nIHRvIGJlIGRvbmUgZm9yIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5CisJCQkgKiBkb21haW5zIGFmdGVyIHRvIGllZWU4MDIxMV9yZWdpc3Rlcl9odworCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBIV1NJTV9SRUdURVNUX1NUUklDVF9GT0xMT1c6CisJCQlpZiAoaSA9PSAwKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMF0pOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9TVFJJQ1RfQU5EX0RSSVZFUl9SRUc6CisJCQlpZiAoaSA9PSAwKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMF0pOworCQkJZWxzZSBpZiAoaSA9PSAxKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMV0pOworCQkJYnJlYWs7CisJCWNhc2UgSFdTSU1fUkVHVEVTVF9BTEw6CisJCQlpZiAoaSA9PSAyKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMF0pOworCQkJZWxzZSBpZiAoaSA9PSAzKQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMV0pOworCQkJZWxzZSBpZiAoaSA9PSA0KQorCQkJCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGh3c2ltX2FscGhhMnNbMl0pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogaHdhZGRyICVwTSByZWdpc3RlcmVkXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLAogCQkgICAgICAgaHctPndpcGh5LT5wZXJtX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhMDI2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKQEAgLTAsMCArMSwzNzg5IEBACisvKgorICogZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYyBkcml2ZXIgZm9yIE1hcnZlbGwgVE9QRE9HIDgwMi4xMSBXaXJlbGVzcyBjYXJkcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKyNkZWZpbmUgTVdMOEtfREVTQwkiTWFydmVsbCBUT1BET0coUikgODAyLjExIFdpcmVsZXNzIE5ldHdvcmsgRHJpdmVyIgorI2RlZmluZSBNV0w4S19OQU1FCUtCVUlMRF9NT0ROQU1FCisjZGVmaW5lIE1XTDhLX1ZFUlNJT04JIjAuOS4xIgorCitNT0RVTEVfREVTQ1JJUFRJT04oTVdMOEtfREVTQyk7CitNT0RVTEVfVkVSU0lPTihNV0w4S19WRVJTSU9OKTsKK01PRFVMRV9BVVRIT1IoIkxlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQG1hcnZlbGwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobXdsOGtfdGFibGUpID0geworCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYTJiKSwgLmRyaXZlcl9kYXRhID0gODY4NywgfSwKKwl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4MmEzMCksIC5kcml2ZXJfZGF0YSA9IDg2ODcsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG13bDhrX3RhYmxlKTsKKworI2RlZmluZSBJRUVFODAyMTFfQUREUl9MRU4JCQlFVEhfQUxFTgorCisvKiBSZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNV0w4S19ISVVfR0VOX1BUUgkJCTB4MDAwMDBjMTAKKyNkZWZpbmUgIE1XTDhLX01PREVfU1RBCQkJCTB4MDAwMDAwNWEKKyNkZWZpbmUgIE1XTDhLX01PREVfQVAJCQkJMHgwMDAwMDBhNQorI2RlZmluZSBNV0w4S19ISVVfSU5UX0NPREUJCQkweDAwMDAwYzE0CisjZGVmaW5lICBNV0w4S19GV1NUQV9SRUFEWQkJCTB4ZjBmMWYyZjQKKyNkZWZpbmUgIE1XTDhLX0ZXQVBfUkVBRFkJCQkweGYxZjJmNGE1CisjZGVmaW5lICBNV0w4S19JTlRfQ09ERV9DTURfRklOSVNIRUQJCTB4MDAwMDAwMDUKKyNkZWZpbmUgTVdMOEtfSElVX1NDUkFUQ0gJCQkweDAwMDAwYzQwCisKKy8qIEhvc3QtPmRldmljZSBjb21tdW5pY2F0aW9ucyAqLworI2RlZmluZSBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMJCTB4MDAwMDBjMTgKKyNkZWZpbmUgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfU1RBVFVTCQkweDAwMDAwYzFjCisjZGVmaW5lIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX01BU0sJCTB4MDAwMDBjMjAKKyNkZWZpbmUgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfQ0xFQVJfU0VMCTB4MDAwMDBjMjQKKyNkZWZpbmUgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfU1RBVFVTX01BU0sJMHgwMDAwMGMyOAorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9EVU1NWQkJCSgxIDw8IDIwKQorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9SRVNFVAkJCSgxIDw8IDE1KQorI2RlZmluZSAgTVdMOEtfSDJBX0lOVF9QUwkJCSgxIDw8IDIpCisjZGVmaW5lICBNV0w4S19IMkFfSU5UX0RPT1JCRUxMCQkJKDEgPDwgMSkKKyNkZWZpbmUgIE1XTDhLX0gyQV9JTlRfUFBBX1JFQURZCQkoMSA8PCAwKQorCisvKiBEZXZpY2UtPmhvc3QgY29tbXVuaWNhdGlvbnMgKi8KKyNkZWZpbmUgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfRVZFTlRTCQkweDAwMDAwYzJjCisjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUwkJMHgwMDAwMGMzMAorI2RlZmluZSBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLCQkweDAwMDAwYzM0CisjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX0NMRUFSX1NFTAkweDAwMDAwYzM4CisjZGVmaW5lIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLCTB4MDAwMDBjM2MKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfRFVNTVkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfQ0hOTF9TV0lUQ0hFRAkJKDEgPDwgMTEpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX1FVRVVFX0VNUFRZCQkoMSA8PCAxMCkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfUkFEQVJfREVURUNUCQkoMSA8PCA3KQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9SQURJT19PTgkJCSgxIDw8IDYpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX1JBRElPX09GRgkJKDEgPDwgNSkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfTUFDX0VWRU5UCQkoMSA8PCAzKQorI2RlZmluZSAgTVdMOEtfQTJIX0lOVF9PUENfRE9ORQkJCSgxIDw8IDIpCisjZGVmaW5lICBNV0w4S19BMkhfSU5UX1JYX1JFQURZCQkJKDEgPDwgMSkKKyNkZWZpbmUgIE1XTDhLX0EySF9JTlRfVFhfRE9ORQkJCSgxIDw8IDApCisKKyNkZWZpbmUgTVdMOEtfQTJIX0VWRU5UUwkoTVdMOEtfQTJIX0lOVF9EVU1NWSB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9DSE5MX1NXSVRDSEVEIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1FVRVVFX0VNUFRZIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1JBREFSX0RFVEVDVCB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9SQURJT19PTiB8IFwKKwkJCQkgTVdMOEtfQTJIX0lOVF9SQURJT19PRkYgfCBcCisJCQkJIE1XTDhLX0EySF9JTlRfTUFDX0VWRU5UIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX09QQ19ET05FIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1JYX1JFQURZIHwgXAorCQkJCSBNV0w4S19BMkhfSU5UX1RYX0RPTkUpCisKKy8qIFdNRSBzdHJlYW0gY2xhc3NlcyAqLworI2RlZmluZSBXTUVfQUNfQkUJMAkJLyogYmVzdCBlZmZvcnQgKi8KKyNkZWZpbmUgV01FX0FDX0JLCTEJCS8qIGJhY2tncm91bmQgKi8KKyNkZWZpbmUgV01FX0FDX1ZJCTIJCS8qIHZpZGVvICovCisjZGVmaW5lIFdNRV9BQ19WTwkzCQkvKiB2b2ljZSAqLworCisjZGVmaW5lIE1XTDhLX1JYX1FVRVVFUwkJMQorI2RlZmluZSBNV0w4S19UWF9RVUVVRVMJCTQKKworc3RydWN0IG13bDhrX3J4X3F1ZXVlIHsKKwlpbnQgcnhfZGVzY19jb3VudDsKKworCS8qIGh3IHJlY2VpdmVzIGhlcmUgKi8KKwlpbnQgcnhfaGVhZDsKKworCS8qIHJlZmlsbCBkZXNjcyBoZXJlICovCisJaW50IHJ4X3RhaWw7CisKKwlzdHJ1Y3QgbXdsOGtfcnhfZGVzYyAqcnhfZGVzY19hcmVhOworCWRtYV9hZGRyX3QgcnhfZGVzY19kbWE7CisJc3RydWN0IHNrX2J1ZmYgKipyeF9za2I7Cit9OworCitzdHJ1Y3QgbXdsOGtfc2tiIHsKKwkvKgorCSAqIFRoZSBETUEgZW5naW5lIHJlcXVpcmVzIGEgbW9kaWZpY2F0aW9uIHRvIHRoZSBwYXlsb2FkLgorCSAqIElmIHRoZSBza2J1ZmYgaXMgc2hhcmVkL2Nsb25lZCwgaXQgbmVlZHMgdG8gYmUgdW5zaGFyZWQuCisJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBlbnN1cmUgdGhlIHN0YWNrIGFsd2F5cyBnZXRzIGJhY2sKKwkgKiB0aGUgc2tidWZmIGl0IHNlbnQgZm9yIHRyYW5zbWlzc2lvbi4KKwkgKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKK307CisKK3N0cnVjdCBtd2w4a190eF9xdWV1ZSB7CisJLyogaHcgdHJhbnNtaXRzIGhlcmUgKi8KKwlpbnQgdHhfaGVhZDsKKworCS8qIHN3IGFwcGVuZHMgaGVyZSAqLworCWludCB0eF90YWlsOworCisJc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0czsKKwlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhfZGVzY19hcmVhOworCWRtYV9hZGRyX3QgdHhfZGVzY19kbWE7CisJc3RydWN0IG13bDhrX3NrYiAqdHhfc2tiOworfTsKKworLyogUG9pbnRlcnMgdG8gdGhlIGZpcm13YXJlIGRhdGEgYW5kIG1ldGEgaW5mb3JtYXRpb24gYWJvdXQgaXQuICAqLworc3RydWN0IG13bDhrX2Zpcm13YXJlIHsKKwkvKiBNaWNyb2NvZGUgKi8KKwlzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlOworCisJLyogQm9vdCBoZWxwZXIgY29kZSAqLworCXN0cnVjdCBmaXJtd2FyZSAqaGVscGVyOworfTsKKworc3RydWN0IG13bDhrX3ByaXYgeworCXZvaWQgX19pb21lbSAqcmVnczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXU4IG5hbWVbMTZdOworCS8qIGZpcm13YXJlIGFjY2VzcyBsb2NrICovCisJc3BpbmxvY2tfdCBmd19sb2NrOworCisJLyogZmlybXdhcmUgZmlsZXMgYW5kIG1ldGEgZGF0YSAqLworCXN0cnVjdCBtd2w4a19maXJtd2FyZSBmdzsKKwl1MzIgcGFydF9udW07CisKKwkvKiBsb2NrIGhlbGQgb3ZlciBUWCBhbmQgVFggcmVhcCAqLworCXNwaW5sb2NrX3QgdHhfbG9jazsKKwl1MzIgaW50X21hc2s7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOworCXN0cnVjdCBsaXN0X2hlYWQgdmlmX2xpc3Q7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cnJlbnRfY2hhbm5lbDsKKworCS8qIHBvd2VyIG1hbmFnZW1lbnQgc3RhdHVzIGNvb2tpZSBmcm9tIGZpcm13YXJlICovCisJdTMyICpjb29raWU7CisJZG1hX2FkZHJfdCBjb29raWVfZG1hOworCisJdTE2IG51bV9tY2FkZHJzOworCXUxNiByZWdpb25fY29kZTsKKwl1OCBod19yZXY7CisJX19sZTMyIGZ3X3JldjsKKwl1MzIgd2VwX2VuYWJsZWQ7CisKKwkvKgorCSAqIFJ1bm5pbmcgY291bnQgb2YgVFggcGFja2V0cyBpbiBmbGlnaHQsIHRvIGF2b2lkCisJICogaXRlcmF0aW5nIG92ZXIgdGhlIHRyYW5zbWl0IHJpbmdzIGVhY2ggdGltZS4KKwkgKi8KKwlpbnQgcGVuZGluZ190eF9wa3RzOworCisJc3RydWN0IG13bDhrX3J4X3F1ZXVlIHJ4cVtNV0w4S19SWF9RVUVVRVNdOworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSB0eHFbTVdMOEtfVFhfUVVFVUVTXTsKKworCS8qIFBIWSBwYXJhbWV0ZXJzICovCisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc1sxNF07CisJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzWzEyXTsKKworCS8qIFJGIHByZWFtYmxlOiBTaG9ydCwgTG9uZyBvciBBdXRvICovCisJdTgJcmFkaW9fcHJlYW1ibGU7CisJdTgJcmFkaW9fc3RhdGU7CisKKwkvKiBXTU0gTU9ERSAxIGZvciBlbmFibGVkOyAwIGZvciBkaXNhYmxlZCAqLworCWJvb2wgd21tX21vZGU7CisKKwkvKiBTZXQgaWYgUEhZIGNvbmZpZyBpcyBpbiBwcm9ncmVzcyAqLworCWJvb2wgaW5jb25maWc7CisKKwkvKiBYWFggbmVlZCB0byBjb252ZXJ0IHRoaXMgdG8gaGFuZGxlIG11bHRpcGxlIGludGVyZmFjZXMgKi8KKwlib29sIGNhcHR1cmVfYmVhY29uOworCXU4IGNhcHR1cmVfYnNzaWRbSUVFRTgwMjExX0FERFJfTEVOXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uX3NrYjsKKworCS8qCisJICogVGhpcyBGSiB3b3JrZXIgaGFzIHRvIGJlIGdsb2JhbCBhcyBpdCBpcyBzY2hlZHVsZWQgZnJvbSB0aGUKKwkgKiBSWCBoYW5kbGVyLiAgQXQgdGhpcyBwb2ludCB3ZSBkb24ndCBrbm93IHdoaWNoIGludGVyZmFjZSBpdAorCSAqIGJlbG9uZ3MgdG8gdW50aWwgdGhlIGxpc3Qgb2YgYnNzaWRzIHdhaXRpbmcgdG8gY29tcGxldGUgam9pbgorCSAqIGlzIGNoZWNrZWQuCisJICovCisJc3RydWN0IHdvcmtfc3RydWN0IGZpbmFsaXplX2pvaW5fd29ya2VyOworCisJLyogVGFza2xldCB0byByZWNsYWltIFRYIGRlc2NyaXB0b3JzIGFuZCBidWZmZXJzIGFmdGVyIHR4ICovCisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHR4X3JlY2xhaW1fdGFzazsKKworCS8qIFdvcmsgdGhyZWFkIHRvIHNlcmlhbGl6ZSBjb25maWd1cmF0aW9uIHJlcXVlc3RzICovCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNvbmZpZ193cTsKKwlzdHJ1Y3QgY29tcGxldGlvbiAqaG9zdGNtZF93YWl0OworCXN0cnVjdCBjb21wbGV0aW9uICp0eF93YWl0OworfTsKKworLyogUGVyIGludGVyZmFjZSBzcGVjaWZpYyBwcml2YXRlIGRhdGEgKi8KK3N0cnVjdCBtd2w4a192aWYgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKworCS8qIGJhY2twb2ludGVyIHRvIHBhcmVudCBjb25maWcgYmxvY2sgKi8KKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdjsKKworCS8qIEJTUyBjb25maWcgb2YgQVAgb3IgSUJTUyBmcm9tIG1hYzgwMjExKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIGJzc19pbmZvOworCisJLyogQlNTSUQgb2YgQVAgb3IgSUJTUyAqLworCXU4CWJzc2lkW0lFRUU4MDIxMV9BRERSX0xFTl07CisJdTgJbWFjX2FkZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKKworCS8qCisJICogU3Vic2V0IG9mIHN1cHBvcnRlZCBsZWdhY3kgcmF0ZXMuCisJICogSW50ZXJzZWN0aW9uIG9mIEFQIGFuZCBTVEEgc3VwcG9ydGVkIHJhdGVzLgorCSAqLworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSBsZWdhY3lfcmF0ZXNbMTJdOworCisJLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBsZWdhY3kgcmF0ZXMgKi8KKwl1OAlsZWdhY3lfbnJhdGVzOworCisJLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBNQ1MgcmF0ZXMuIFdvcmsgaW4gcHJvZ3Jlc3MgKi8KKwl1OAltY3NfbnJhdGVzOworCisJIC8qIEluZGV4IGludG8gc3RhdGlvbiBkYXRhYmFzZS5SZXR1cm5lZCBieSB1cGRhdGVfc3RhX2RiIGNhbGwgKi8KKwl1OAlwZWVyX2lkOworCisJLyogTm9uIEFNUERVIHNlcXVlbmNlIG51bWJlciBhc3NpZ25lZCBieSBkcml2ZXIgKi8KKwl1MTYJc2Vxbm87CisKKwkvKiBOb3RlOlRoZXJlIGlzIG5vIGNoYW5uZWwgaW5mbywKKwkgKiByZWZlciB0byB0aGUgbWFzdGVyIGNoYW5uZWwgaW5mbyBpbiBwcml2CisJICovCit9OworCisjZGVmaW5lIE1XTDhLX1ZJRihfdmlmKSAoc3RydWN0IG13bDhrX3ZpZiAqKSgmKChfdmlmKS0+ZHJ2X3ByaXYpKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIG13bDhrX2NoYW5uZWxzW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSAyNDEyLCAuaHdfdmFsdWUgPSAxLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQxNywgLmh3X3ZhbHVlID0gMiwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MjIsIC5od192YWx1ZSA9IDMsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDI3LCAuaHdfdmFsdWUgPSA0LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQzMiwgLmh3X3ZhbHVlID0gNSwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0MzcsIC5od192YWx1ZSA9IDYsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDQyLCAuaHdfdmFsdWUgPSA3LCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ0NywgLmh3X3ZhbHVlID0gOCwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NTIsIC5od192YWx1ZSA9IDksIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDU3LCAuaHdfdmFsdWUgPSAxMCwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NjIsIC5od192YWx1ZSA9IDExLCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBtd2w4a19yYXRlc1tdID0geworCXsgLmJpdHJhdGUgPSAxMCwgLmh3X3ZhbHVlID0gMiwgfSwKKwl7IC5iaXRyYXRlID0gMjAsIC5od192YWx1ZSA9IDQsIH0sCisJeyAuYml0cmF0ZSA9IDU1LCAuaHdfdmFsdWUgPSAxMSwgfSwKKwl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDEyLCB9LAorCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gMTgsIH0sCisJeyAuYml0cmF0ZSA9IDExMCwgLmh3X3ZhbHVlID0gMjIsIH0sCisJeyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gMjQsIH0sCisJeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gMzYsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gNDgsIH0sCisJeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gNzIsIH0sCisJeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gOTYsIH0sCisJeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTA4LCB9LAorfTsKKworLyogUmFkaW8gc2V0dGluZ3MgKi8KKyNkZWZpbmUgTVdMOEtfUkFESU9fRk9SQ0UJCTB4MgorI2RlZmluZSBNV0w4S19SQURJT19FTkFCTEUJCTB4MQorI2RlZmluZSBNV0w4S19SQURJT19ESVNBQkxFCQkweDAKKyNkZWZpbmUgTVdMOEtfUkFESU9fQVVUT19QUkVBTUJMRQkweDAwMDUKKyNkZWZpbmUgTVdMOEtfUkFESU9fU0hPUlRfUFJFQU1CTEUJMHgwMDAzCisjZGVmaW5lIE1XTDhLX1JBRElPX0xPTkdfUFJFQU1CTEUJMHgwMDAxCisKKy8qIFdNTSAqLworI2RlZmluZSBNV0w4S19XTU1fRU5BQkxFCQkxCisjZGVmaW5lIE1XTDhLX1dNTV9ESVNBQkxFCQkwCisKKyNkZWZpbmUgTVdMOEtfUkFESU9fREVGQVVMVF9QUkVBTUJMRQlNV0w4S19SQURJT19MT05HX1BSRUFNQkxFCisKKy8qIFNsb3QgdGltZSAqLworCisvKiBTaG9ydCBTbG90OiA5dXMgc2xvdCB0aW1lICovCisjZGVmaW5lIE1XTDhLX1NIT1JUX1NMT1RUSU1FCQkxCisKKy8qIExvbmcgc2xvdDogMjB1cyBzbG90IHRpbWUgKi8KKyNkZWZpbmUgTVdMOEtfTE9OR19TTE9UVElNRQkJMAorCisvKiBTZXQgb3IgZ2V0IGluZm8gZnJvbSBGaXJtd2FyZSAqLworI2RlZmluZSBNV0w4S19DTURfU0VUCQkJMHgwMDAxCisjZGVmaW5lIE1XTDhLX0NNRF9HRVQJCQkweDAwMDAKKworLyogRmlybXdhcmUgY29tbWFuZCBjb2RlcyAqLworI2RlZmluZSBNV0w4S19DTURfQ09ERV9ETkxECQkweDAwMDEKKyNkZWZpbmUgTVdMOEtfQ01EX0dFVF9IV19TUEVDCQkweDAwMDMKKyNkZWZpbmUgTVdMOEtfQ01EX01BQ19NVUxUSUNBU1RfQURSCTB4MDAxMAorI2RlZmluZSBNV0w4S19DTURfR0VUX1NUQVQJCTB4MDAxNAorI2RlZmluZSBNV0w4S19DTURfUkFESU9fQ09OVFJPTAkJMHgwMDFDCisjZGVmaW5lIE1XTDhLX0NNRF9SRl9UWF9QT1dFUgkJMHgwMDFFCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUFJFX1NDQU4JCTB4MDEwNworI2RlZmluZSBNV0w4S19DTURfU0VUX1BPU1RfU0NBTgkJMHgwMTA4CisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUkZfQ0hBTk5FTAkweDAxMEEKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9TTE9UCQkweDAxMTQKKyNkZWZpbmUgTVdMOEtfQ01EX01JTU9fQ09ORklHCQkweDAxMjUKKyNkZWZpbmUgTVdMOEtfQ01EX0VOQUJMRV9TTklGRkVSCTB4MDE1MAorI2RlZmluZSBNV0w4S19DTURfU0VUX1dNTV9NT0RFCQkweDAxMjMKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9FRENBX1BBUkFNUwkweDAxMTUKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9GSU5BTElaRV9KT0lOCTB4MDExMQorI2RlZmluZSBNV0w4S19DTURfVVBEQVRFX1NUQURCCQkweDExMjMKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SQVRFQURBUFRfTU9ERQkweDAyMDMKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9MSU5LQURBUFRfTU9ERQkweDAxMjkKKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9BSUQJCTB4MDEwZAorI2RlZmluZSBNV0w4S19DTURfU0VUX1JBVEUJCTB4MDExMAorI2RlZmluZSBNV0w4S19DTURfVVNFX0ZJWEVEX1JBVEUJMHgwMTI2CisjZGVmaW5lIE1XTDhLX0NNRF9SVFNfVEhSRVNIT0xECQkweDAxMTMKKyNkZWZpbmUgTVdMOEtfQ01EX0VOQ1JZUFRJT04JCTB4MTEyMgorCitzdGF0aWMgY29uc3QgY2hhciAqbXdsOGtfY21kX25hbWUodTE2IGNtZCwgY2hhciAqYnVmLCBpbnQgYnVmc2l6ZSkKK3sKKyNkZWZpbmUgTVdMOEtfQ01ETkFNRSh4KQljYXNlIE1XTDhLX0NNRF8jI3g6IGRvIHtcCisJCQkJCXNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIiVzIiwgI3gpO1wKKwkJCQkJcmV0dXJuIGJ1ZjtcCisJCQkJCX0gd2hpbGUgKDApCisJc3dpdGNoIChjbWQgJiAofjB4ODAwMCkpIHsKKwkJTVdMOEtfQ01ETkFNRShDT0RFX0ROTEQpOworCQlNV0w4S19DTUROQU1FKEdFVF9IV19TUEVDKTsKKwkJTVdMOEtfQ01ETkFNRShNQUNfTVVMVElDQVNUX0FEUik7CisJCU1XTDhLX0NNRE5BTUUoR0VUX1NUQVQpOworCQlNV0w4S19DTUROQU1FKFJBRElPX0NPTlRST0wpOworCQlNV0w4S19DTUROQU1FKFJGX1RYX1BPV0VSKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfUFJFX1NDQU4pOworCQlNV0w4S19DTUROQU1FKFNFVF9QT1NUX1NDQU4pOworCQlNV0w4S19DTUROQU1FKFNFVF9SRl9DSEFOTkVMKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfU0xPVCk7CisJCU1XTDhLX0NNRE5BTUUoTUlNT19DT05GSUcpOworCQlNV0w4S19DTUROQU1FKEVOQUJMRV9TTklGRkVSKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfV01NX01PREUpOworCQlNV0w4S19DTUROQU1FKFNFVF9FRENBX1BBUkFNUyk7CisJCU1XTDhLX0NNRE5BTUUoU0VUX0ZJTkFMSVpFX0pPSU4pOworCQlNV0w4S19DTUROQU1FKFVQREFURV9TVEFEQik7CisJCU1XTDhLX0NNRE5BTUUoU0VUX1JBVEVBREFQVF9NT0RFKTsKKwkJTVdMOEtfQ01ETkFNRShTRVRfTElOS0FEQVBUX01PREUpOworCQlNV0w4S19DTUROQU1FKFNFVF9BSUQpOworCQlNV0w4S19DTUROQU1FKFNFVF9SQVRFKTsKKwkJTVdMOEtfQ01ETkFNRShVU0VfRklYRURfUkFURSk7CisJCU1XTDhLX0NNRE5BTUUoUlRTX1RIUkVTSE9MRCk7CisJCU1XTDhLX0NNRE5BTUUoRU5DUllQVElPTik7CisJZGVmYXVsdDoKKwkJc25wcmludGYoYnVmLCBidWZzaXplLCAiMHgleCIsIGNtZCk7CisJfQorI3VuZGVmIE1XTDhLX0NNRE5BTUUKKworCXJldHVybiBidWY7Cit9CisKKy8qIEhhcmR3YXJlIGFuZCBmaXJtd2FyZSByZXNldCAqLworc3RhdGljIHZvaWQgbXdsOGtfaHdfcmVzZXQoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfUkVTRVQsCisJCXByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX1JFU0VULAorCQlwcml2LT5yZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwltc2xlZXAoMjApOworfQorCisvKiBSZWxlYXNlIGZ3IGltYWdlICovCitzdGF0aWMgdm9pZCBtd2w4a19yZWxlYXNlX2Z3KHN0cnVjdCBmaXJtd2FyZSAqKmZ3KQoreworCWlmICgqZncgPT0gTlVMTCkKKwkJcmV0dXJuOworCXJlbGVhc2VfZmlybXdhcmUoKmZ3KTsKKwkqZncgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQoreworCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3LnVjb2RlKTsKKwltd2w4a19yZWxlYXNlX2Z3KCZwcml2LT5mdy5oZWxwZXIpOworfQorCisvKiBSZXF1ZXN0IGZ3IGltYWdlICovCitzdGF0aWMgaW50IG13bDhrX3JlcXVlc3RfZncoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJY29uc3QgY2hhciAqZm5hbWUsIHN0cnVjdCBmaXJtd2FyZSAqKmZ3KQoreworCS8qIHJlbGVhc2UgY3VycmVudCBpbWFnZSAqLworCWlmICgqZncgIT0gTlVMTCkKKwkJbXdsOGtfcmVsZWFzZV9mdyhmdyk7CisKKwlyZXR1cm4gcmVxdWVzdF9maXJtd2FyZSgoY29uc3Qgc3RydWN0IGZpcm13YXJlICoqKWZ3LAorCQkJCQkJZm5hbWUsICZwcml2LT5wZGV2LT5kZXYpOworfQorCitzdGF0aWMgaW50IG13bDhrX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsIHUzMiBwYXJ0X251bSkKK3sKKwl1OCBmaWxlbmFtZVs2NF07CisJaW50IHJjOworCisJcHJpdi0+cGFydF9udW0gPSBwYXJ0X251bTsKKworCXNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLAorCQkgIm13bDhrL2hlbHBlcl8ldS5mdyIsIHByaXYtPnBhcnRfbnVtKTsKKworCXJjID0gbXdsOGtfcmVxdWVzdF9mdyhwcml2LCBmaWxlbmFtZSwgJnByaXYtPmZ3LmhlbHBlcik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIiVzIEVycm9yIHJlcXVlc3RpbmcgaGVscGVyIGZpcm13YXJlIGZpbGUgJXNcbiIsCisJCQlwY2lfbmFtZShwcml2LT5wZGV2KSwgZmlsZW5hbWUpOworCQlyZXR1cm4gcmM7CisJfQorCisJc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksCisJCSAibXdsOGsvZm1pbWFnZV8ldS5mdyIsIHByaXYtPnBhcnRfbnVtKTsKKworCXJjID0gbXdsOGtfcmVxdWVzdF9mdyhwcml2LCBmaWxlbmFtZSwgJnByaXYtPmZ3LnVjb2RlKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcyBFcnJvciByZXF1ZXN0aW5nIGZpcm13YXJlIGZpbGUgJXNcbiIsCisJCQkJCXBjaV9uYW1lKHByaXYtPnBkZXYpLCBmaWxlbmFtZSk7CisJCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3LmhlbHBlcik7CisJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IG13bDhrX2NtZF9wa3QgeworCV9fbGUxNgljb2RlOworCV9fbGUxNglsZW5ndGg7CisJX19sZTE2CXNlcV9udW07CisJX19sZTE2CXJlc3VsdDsKKwljaGFyCXBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKgorICogRmlybXdhcmUgbG9hZGluZy4KKyAqLworc3RhdGljIGludAorbXdsOGtfc2VuZF9md19sb2FkX2NtZChzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiwgdm9pZCAqZGF0YSwgaW50IGxlbmd0aCkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBwcml2LT5yZWdzOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJaW50IHJjOworCWludCBsb29wczsKKworCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgZGF0YSwgbGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHByaXYtPnBkZXYsIGRtYV9hZGRyKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpb3dyaXRlMzIoZG1hX2FkZHIsIHJlZ3MgKyBNV0w4S19ISVVfR0VOX1BUUik7CisJaW93cml0ZTMyKDAsIHJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RPT1JCRUxMLAorCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9EVU1NWSwKKwkJcmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisKKwlyYyA9IC1FVElNRURPVVQ7CisJbG9vcHMgPSAxMDAwOworCWRvIHsKKwkJdTMyIGludF9jb2RlOworCisJCWludF9jb2RlID0gaW9yZWFkMzIocmVncyArIE1XTDhLX0hJVV9JTlRfQ09ERSk7CisJCWlmIChpbnRfY29kZSA9PSBNV0w4S19JTlRfQ09ERV9DTURfRklOSVNIRUQpIHsKKwkJCWlvd3JpdGUzMigwLCByZWdzICsgTVdMOEtfSElVX0lOVF9DT0RFKTsKKwkJCXJjID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKC0tbG9vcHMpOworCisJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBkbWFfYWRkciwgbGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCS8qCisJICogQ2xlYXIgJ2NvbW1hbmQgZG9uZScgaW50ZXJydXB0IGJpdC4KKwkgKi8KKwlsb29wcyA9IDEwMDA7CisJZG8geworCQl1MzIgc3RhdHVzOworCisJCXN0YXR1cyA9IGlvcmVhZDMyKHByaXYtPnJlZ3MgKworCQkJCU1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX09QQ19ET05FKSB7CisJCQlpb3dyaXRlMzIofk1XTDhLX0EySF9JTlRfT1BDX0RPTkUsCisJCQkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisJCQlpb3JlYWQzMihwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwkJCWJyZWFrOworCQl9CisKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKC0tbG9vcHMpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2xvYWRfZndfaW1hZ2Uoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgKmNtZDsKKwlpbnQgZG9uZTsKKwlpbnQgcmMgPSAwOworCisJY21kID0ga21hbGxvYyhzaXplb2YoKmNtZCkgKyAyNTYsIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfQ09ERV9ETkxEKTsKKwljbWQtPnNlcV9udW0gPSAwOworCWNtZC0+cmVzdWx0ID0gMDsKKworCWRvbmUgPSAwOworCXdoaWxlIChsZW5ndGgpIHsKKwkJaW50IGJsb2NrX3NpemUgPSBsZW5ndGggPiAyNTYgPyAyNTYgOiBsZW5ndGg7CisKKwkJbWVtY3B5KGNtZC0+cGF5bG9hZCwgZGF0YSArIGRvbmUsIGJsb2NrX3NpemUpOworCQljbWQtPmxlbmd0aCA9IGNwdV90b19sZTE2KGJsb2NrX3NpemUpOworCisJCXJjID0gbXdsOGtfc2VuZF9md19sb2FkX2NtZChwcml2LCBjbWQsCisJCQkJCQlzaXplb2YoKmNtZCkgKyBibG9ja19zaXplKTsKKwkJaWYgKHJjKQorCQkJYnJlYWs7CisKKwkJZG9uZSArPSBibG9ja19zaXplOworCQlsZW5ndGggLT0gYmxvY2tfc2l6ZTsKKwl9CisKKwlpZiAoIXJjKSB7CisJCWNtZC0+bGVuZ3RoID0gMDsKKwkJcmMgPSBtd2w4a19zZW5kX2Z3X2xvYWRfY21kKHByaXYsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwl9CisKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2ZlZWRfZndfaW1hZ2Uoc3RydWN0IG13bDhrX3ByaXYgKnByaXYsCisJCQkJY29uc3QgdTggKmRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCBtYXlfY29udGludWUsIHJjID0gMDsKKwl1MzIgZG9uZSwgcHJldl9ibG9ja19zaXplOworCisJYnVmZmVyID0ga21hbGxvYygxMDI0LCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmZmVyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJZG9uZSA9IDA7CisJcHJldl9ibG9ja19zaXplID0gMDsKKwltYXlfY29udGludWUgPSAxMDAwOworCXdoaWxlIChtYXlfY29udGludWUgPiAwKSB7CisJCXUzMiBibG9ja19zaXplOworCisJCWJsb2NrX3NpemUgPSBpb3JlYWQzMihwcml2LT5yZWdzICsgTVdMOEtfSElVX1NDUkFUQ0gpOworCQlpZiAoYmxvY2tfc2l6ZSAmIDEpIHsKKwkJCWJsb2NrX3NpemUgJj0gfjE7CisJCQltYXlfY29udGludWUtLTsKKwkJfSBlbHNlIHsKKwkJCWRvbmUgKz0gcHJldl9ibG9ja19zaXplOworCQkJbGVuZ3RoIC09IHByZXZfYmxvY2tfc2l6ZTsKKwkJfQorCisJCWlmIChibG9ja19zaXplID4gMTAyNCB8fCBibG9ja19zaXplID4gbGVuZ3RoKSB7CisJCQlyYyA9IC1FT1ZFUkZMT1c7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChsZW5ndGggPT0gMCkgeworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYmxvY2tfc2l6ZSA9PSAwKSB7CisJCQlyYyA9IC1FUFJPVE87CisJCQltYXlfY29udGludWUtLTsKKwkJCXVkZWxheSgxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJldl9ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKKwkJbWVtY3B5KGJ1ZmZlciwgZGF0YSArIGRvbmUsIGJsb2NrX3NpemUpOworCisJCXJjID0gbXdsOGtfc2VuZF9md19sb2FkX2NtZChwcml2LCBidWZmZXIsIGJsb2NrX3NpemUpOworCQlpZiAocmMpCisJCQlicmVhazsKKwl9CisKKwlpZiAoIXJjICYmIGxlbmd0aCAhPSAwKQorCQlyYyA9IC1FUkVNT1RFSU87CisKKwlrZnJlZShidWZmZXIpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2xvYWRfZmlybXdhcmUoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJaW50IGxvb3BzLCByYzsKKworCWNvbnN0IHU4ICp1Y29kZSA9IHByaXYtPmZ3LnVjb2RlLT5kYXRhOworCXNpemVfdCB1Y29kZV9sZW4gPSBwcml2LT5mdy51Y29kZS0+c2l6ZTsKKwljb25zdCB1OCAqaGVscGVyID0gcHJpdi0+ZncuaGVscGVyLT5kYXRhOworCXNpemVfdCBoZWxwZXJfbGVuID0gcHJpdi0+ZncuaGVscGVyLT5zaXplOworCisJaWYgKCFtZW1jbXAodWNvZGUsICJceDAxXHgwMFx4MDBceDAwIiwgNCkpIHsKKwkJcmMgPSBtd2w4a19sb2FkX2Z3X2ltYWdlKHByaXYsIGhlbHBlciwgaGVscGVyX2xlbik7CisJCWlmIChyYykgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgIgorCQkJCSJoZWxwZXIgaW1hZ2VcbiIsIHBjaV9uYW1lKHByaXYtPnBkZXYpKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQltc2xlZXAoMSk7CisKKwkJcmMgPSBtd2w4a19mZWVkX2Z3X2ltYWdlKHByaXYsIHVjb2RlLCB1Y29kZV9sZW4pOworCX0gZWxzZSB7CisJCXJjID0gbXdsOGtfbG9hZF9md19pbWFnZShwcml2LCB1Y29kZSwgdWNvZGVfbGVuKTsKKwl9CisKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgZGF0YVxuIiwKKwkJCXBjaV9uYW1lKHByaXYtPnBkZXYpKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWlvd3JpdGUzMihNV0w4S19NT0RFX1NUQSwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9HRU5fUFRSKTsKKwltc2xlZXAoMSk7CisKKwlsb29wcyA9IDIwMDAwMDsKKwlkbyB7CisJCWlmIChpb3JlYWQzMihwcml2LT5yZWdzICsgTVdMOEtfSElVX0lOVF9DT0RFKQorCQkJCQkJPT0gTVdMOEtfRldTVEFfUkVBRFkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKC0tbG9vcHMpOworCisJcmV0dXJuIGxvb3BzID8gMCA6IC1FVElNRURPVVQ7Cit9CisKKworLyoKKyAqIERlZmluZXMgc2hhcmVkIGJldHdlZW4gdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24uCisgKi8KKy8qIEhUIGNvbnRyb2wgZmllbGRzIGZvciBmaXJtd2FyZSAqLworc3RydWN0IGV3Y19odF9pbmZvIHsKKwlfX2xlMTYJY29udHJvbDE7CisJX19sZTE2CWNvbnRyb2wyOworCV9fbGUxNgljb250cm9sMzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIEZpcm13YXJlIFN0YXRpb24gZGF0YWJhc2Ugb3BlcmF0aW9ucyAqLworI2RlZmluZSBNV0w4S19TVEFfREJfQUREX0VOVFJZCQkwCisjZGVmaW5lIE1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlkJMQorI2RlZmluZSBNV0w4S19TVEFfREJfREVMX0VOVFJZCQkyCisjZGVmaW5lIE1XTDhLX1NUQV9EQl9GTFVTSAkJMworCisvKiBQZWVyIEVudHJ5IGZsYWdzIC0gdXNlZCB0byBkZWZpbmUgdGhlIHR5cGUgb2YgdGhlIHBlZXIgbm9kZSAqLworI2RlZmluZSBNV0w4S19QRUVSX1RZUEVfQUNDRVNTUE9JTlQJMgorI2RlZmluZSBNV0w4S19QRUVSX1RZUEVfQURIT0NfU1RBVElPTgk0CisKKyNkZWZpbmUgTVdMOEtfSUVFRV9MRUdBQ1lfREFUQV9SQVRFUwkxMgorI2RlZmluZSBNV0w4S19NQ1NfQklUTUFQX1NJWkUJCTE2CisjZGVmaW5lIHBhZF9zaXplCQkJMTYKKworc3RydWN0IHBlZXJfY2FwYWJpbGl0eV9pbmZvIHsKKwkvKiBQZWVyIHR5cGUgLSBBUCB2cy4gU1RBLiAgKi8KKwlfX3U4CXBlZXJfdHlwZTsKKworCS8qIEJhc2ljIDgwMi4xMSBjYXBhYmlsaXRpZXMgZnJvbSBhc3NvYyByZXNwLiAgKi8KKwlfX2xlMTYJYmFzaWNfY2FwczsKKworCS8qIFNldCBpZiBwZWVyIHN1cHBvcnRzIDgwMi4xMW4gaGlnaCB0aHJvdWdocHV0IChIVCkuICAqLworCV9fdTgJaHRfc3VwcG9ydDsKKworCS8qIFZhbGlkIGlmIEhUIGlzIHN1cHBvcnRlZC4gICovCisJX19sZTE2CWh0X2NhcHM7CisJX191OAlleHRlbmRlZF9odF9jYXBzOworCXN0cnVjdCBld2NfaHRfaW5mbwlld2NfaW5mbzsKKworCS8qIExlZ2FjeSByYXRlIHRhYmxlLiBJbnRlcnNlY3Rpb24gb2Ygb3VyIHJhdGVzIGFuZCBwZWVyIHJhdGVzLiAgKi8KKwlfX3U4CWxlZ2FjeV9yYXRlc1tNV0w4S19JRUVFX0xFR0FDWV9EQVRBX1JBVEVTXTsKKworCS8qIEhUIHJhdGUgdGFibGUuIEludGVyc2VjdGlvbiBvZiBvdXIgcmF0ZXMgYW5kIHBlZXIgcmF0ZXMuICAqLworCV9fdTgJaHRfcmF0ZXNbTVdMOEtfTUNTX0JJVE1BUF9TSVpFXTsKKwlfX3U4CXBhZFtwYWRfc2l6ZV07CisKKwkvKiBJZiBzZXQsIGludGVyb3BlcmFiaWxpdHkgbW9kZSwgbm8gcHJvcHJpZXRhcnkgZXh0ZW5zaW9ucy4gICovCisJX191OAlpbnRlcm9wOworCV9fdTgJcGFkMjsKKwlfX3U4CXN0YXRpb25faWQ7CisJX19sZTE2CWFtc2R1X2VuYWJsZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBJbmxpbmUgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgUW9TIGZpZWxkIGluIGRhdGEgZGVzY3JpcHRvci4gICovCitzdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X3RpZCh1MTYgcW9zLCB1OCB0aWQpCit7CisJdTE2IHZhbF9tYXNrID0gMHgwMDBmOworCXUxNiBxb3NfbWFzayA9IH52YWxfbWFzazsKKworCS8qIFRJRCBiaXRzIDAtMyAqLworCXJldHVybiAocW9zICYgcW9zX21hc2spIHwgKHRpZCAmIHZhbF9tYXNrKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF9lb3NwKHUxNiBxb3MpCit7CisJdTE2IHZhbF9tYXNrID0gMSA8PCA0OworCisJLyogRW5kIG9mIFNlcnZpY2UgUGVyaW9kIEJpdCA0ICovCisJcmV0dXJuIHFvcyB8IHZhbF9tYXNrOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X2Fjayh1MTYgcW9zLCB1OCBhY2tfcG9saWN5KQoreworCXUxNiB2YWxfbWFzayA9IDB4MzsKKwl1OAlzaGlmdCA9IDU7CisJdTE2IHFvc19tYXNrID0gfih2YWxfbWFzayA8PCBzaGlmdCk7CisKKwkvKiBBY2sgUG9saWN5IEJpdCA1LTYgKi8KKwlyZXR1cm4gKHFvcyAmIHFvc19tYXNrKSB8ICgoYWNrX3BvbGljeSAmIHZhbF9tYXNrKSA8PCBzaGlmdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfYW1zZHUodTE2IHFvcykKK3sKKwl1MTYgdmFsX21hc2sgPSAxIDw8IDc7CisKKwkvKiBBTVNEVSBwcmVzZW50IEJpdCA3ICovCisJcmV0dXJuIHFvcyB8IHZhbF9tYXNrOworfQorCitzdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X3FsZW4odTE2IHFvcywgdTggbGVuKQoreworCXUxNiB2YWxfbWFzayA9IDB4ZmY7CisJdTgJc2hpZnQgPSA4OworCXUxNiBxb3NfbWFzayA9IH4odmFsX21hc2sgPDwgc2hpZnQpOworCisJLyogUXVldWUgTGVuZ3RoIEJpdHMgOC0xNSAqLworCXJldHVybiAocW9zICYgcW9zX21hc2spIHwgKChsZW4gJiB2YWxfbWFzaykgPDwgc2hpZnQpOworfQorCisvKiBETUEgaGVhZGVyIHVzZWQgYnkgZmlybXdhcmUgYW5kIGhhcmR3YXJlLiAgKi8KK3N0cnVjdCBtd2w4a19kbWFfZGF0YSB7CisJX19sZTE2IGZ3bGVuOworCXN0cnVjdCBpZWVlODAyMTFfaGRyIHdoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogUm91dGluZXMgdG8gYWRkL3JlbW92ZSBETUEgaGVhZGVyIGZyb20gc2tiLiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG13bDhrX2RtYV9kYXRhICp0ciA9IChzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKikoc2tiLT5kYXRhKTsKKwl2b2lkICpkc3QsICpzcmMgPSAmdHItPndoOworCV9fbGUxNiBmYyA9IHRyLT53aC5mcmFtZV9jb250cm9sOworCWludCBoZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjKTsKKwl1MTYgc3BhY2UgPSBzaXplb2Yoc3RydWN0IG13bDhrX2RtYV9kYXRhKSAtIGhkcmxlbjsKKworCWRzdCA9ICh2b2lkICopdHIgKyBzcGFjZTsKKwlpZiAoZHN0ICE9IHNyYykgeworCQltZW1tb3ZlKGRzdCwgc3JjLCBoZHJsZW4pOworCQlza2JfcHVsbChza2IsIHNwYWNlKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbXdsOGtfYWRkX2RtYV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CisJdTMyIGhkcmxlbiwgcGt0bGVuOworCXN0cnVjdCBtd2w4a19kbWFfZGF0YSAqdHI7CisKKwl3aCA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKHdoLT5mcmFtZV9jb250cm9sKTsKKwlwa3RsZW4gPSBza2ItPmxlbjsKKworCS8qCisJICogQ29weSB1cC9kb3duIHRoZSA4MDIuMTEgaGVhZGVyOyB0aGUgZmlybXdhcmUgcmVxdWlyZXMKKwkgKiB3ZSBwcmVzZW50IGEgMi1ieXRlIHBheWxvYWQgbGVuZ3RoIGZvbGxvd2VkIGJ5IGEKKwkgKiA0LWFkZHJlc3MgaGVhZGVyICh3L28gUW9TKSwgZm9sbG93ZWQgKG9wdGlvbmFsbHkpIGJ5CisJICogYW55IFdFUC9FeHRJViBoZWFkZXIgKGJ1dCBvbmx5IGZpbGxlZCBpbiBmb3IgQ0NNUCkuCisJICovCisJaWYgKGhkcmxlbiAhPSBzaXplb2Yoc3RydWN0IG13bDhrX2RtYV9kYXRhKSkKKwkJc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IG13bDhrX2RtYV9kYXRhKSAtIGhkcmxlbik7CisKKwl0ciA9IChzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKilza2ItPmRhdGE7CisJaWYgKHdoICE9ICZ0ci0+d2gpCisJCW1lbW1vdmUoJnRyLT53aCwgd2gsIGhkcmxlbik7CisKKwkvKiBDbGVhciBhZGRyNCAqLworCW1lbXNldCh0ci0+d2guYWRkcjQsIDAsIElFRUU4MDIxMV9BRERSX0xFTik7CisKKwkvKgorCSAqIEZpcm13YXJlIGxlbmd0aCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBmdWxseSBmb3JtZWQgIjgwMi4xMQorCSAqIHBheWxvYWQiLiAgVGhhdCBpcywgZXZlcnl0aGluZyBleGNlcHQgZm9yIHRoZSA4MDIuMTEgaGVhZGVyLgorCSAqIFRoaXMgaW5jbHVkZXMgYWxsIGNyeXB0byBtYXRlcmlhbCBpbmNsdWRpbmcgdGhlIE1JQy4KKwkgKi8KKwl0ci0+ZndsZW4gPSBjcHVfdG9fbGUxNihwa3RsZW4gLSBoZHJsZW4pOworCisJcmV0dXJuIHNrYjsKK30KKworCisvKgorICogUGFja2V0IHJlY2VwdGlvbi4KKyAqLworI2RlZmluZSBNV0w4S19SWF9DVFJMX0tFWV9JTkRFWF9NQVNLCTB4MzAKKyNkZWZpbmUgTVdMOEtfUlhfQ1RSTF9PV05FRF9CWV9IT1NUCTB4MDIKKyNkZWZpbmUgTVdMOEtfUlhfQ1RSTF9BTVBEVQkJMHgwMQorCitzdHJ1Y3QgbXdsOGtfcnhfZGVzYyB7CisJX19sZTE2IHBrdF9sZW47CisJX191OCBsaW5rX3F1YWxpdHk7CisJX191OCBub2lzZV9sZXZlbDsKKwlfX2xlMzIgcGt0X3BoeXNfYWRkcjsKKwlfX2xlMzIgbmV4dF9yeF9kZXNjX3BoeXNfYWRkcjsKKwlfX2xlMTYgcW9zX2NvbnRyb2w7CisJX19sZTE2IHJhdGVfaW5mbzsKKwlfX2xlMzIgcGFkMFs0XTsKKwlfX3U4IHJzc2k7CisJX191OCBjaGFubmVsOworCV9fbGUxNiBwYWQxOworCV9fdTggcnhfY3RybDsKKwlfX3U4IHJ4X3N0YXR1czsKKwlfX3U4IHBhZDJbMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1XTDhLX1JYX0RFU0NTCQkyNTYKKyNkZWZpbmUgTVdMOEtfUlhfTUFYU1oJCTM4MDAKKworc3RhdGljIGludCBtd2w4a19yeHFfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3J4X3F1ZXVlICpyeHEgPSBwcml2LT5yeHEgKyBpbmRleDsKKwlpbnQgc2l6ZTsKKwlpbnQgaTsKKworCXJ4cS0+cnhfZGVzY19jb3VudCA9IDA7CisJcnhxLT5yeF9oZWFkID0gMDsKKwlyeHEtPnJ4X3RhaWwgPSAwOworCisJc2l6ZSA9IE1XTDhLX1JYX0RFU0NTICogc2l6ZW9mKHN0cnVjdCBtd2w4a19yeF9kZXNjKTsKKworCXJ4cS0+cnhfZGVzY19hcmVhID0KKwkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZSwgJnJ4cS0+cnhfZGVzY19kbWEpOworCWlmIChyeHEtPnJ4X2Rlc2NfYXJlYSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvYyBSWCBkZXNjcmlwdG9yc1xuIiwKKwkJICAgICAgIHByaXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHJ4cS0+cnhfZGVzY19hcmVhLCAwLCBzaXplKTsKKworCXJ4cS0+cnhfc2tiID0ga21hbGxvYyhNV0w4S19SWF9ERVNDUyAqCisJCQkJc2l6ZW9mKCpyeHEtPnJ4X3NrYiksIEdGUF9LRVJORUwpOworCWlmIChyeHEtPnJ4X3NrYiA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvYyBSWCBza2J1ZmYgbGlzdFxuIiwKKwkJCXByaXYtPm5hbWUpOworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIHNpemUsCisJCQkJICAgIHJ4cS0+cnhfZGVzY19hcmVhLCByeHEtPnJ4X2Rlc2NfZG1hKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChyeHEtPnJ4X3NrYiwgMCwgTVdMOEtfUlhfREVTQ1MgKiBzaXplb2YoKnJ4cS0+cnhfc2tiKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfUlhfREVTQ1M7IGkrKykgeworCQlzdHJ1Y3QgbXdsOGtfcnhfZGVzYyAqcnhfZGVzYzsKKwkJaW50IG5leHRpOworCisJCXJ4X2Rlc2MgPSByeHEtPnJ4X2Rlc2NfYXJlYSArIGk7CisJCW5leHRpID0gKGkgKyAxKSAlIE1XTDhLX1JYX0RFU0NTOworCisJCXJ4X2Rlc2MtPm5leHRfcnhfZGVzY19waHlzX2FkZHIgPQorCQkJY3B1X3RvX2xlMzIocnhxLT5yeF9kZXNjX2RtYQorCQkJCQkJKyBuZXh0aSAqIHNpemVvZigqcnhfZGVzYykpOworCQlyeF9kZXNjLT5yeF9jdHJsID0KKwkJCWNwdV90b19sZTMyKE1XTDhLX1JYX0NUUkxfT1dORURfQllfSE9TVCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnhxX3JlZmlsbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBpbnQgbGltaXQpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgKnJ4cSA9IHByaXYtPnJ4cSArIGluZGV4OworCWludCByZWZpbGxlZDsKKworCXJlZmlsbGVkID0gMDsKKwl3aGlsZSAocnhxLT5yeF9kZXNjX2NvdW50IDwgTVdMOEtfUlhfREVTQ1MgJiYgbGltaXQtLSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlpbnQgcng7CisKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihNV0w4S19SWF9NQVhTWik7CisJCWlmIChza2IgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCXJ4cS0+cnhfZGVzY19jb3VudCsrOworCisJCXJ4ID0gcnhxLT5yeF90YWlsOworCQlyeHEtPnJ4X3RhaWwgPSAocnggKyAxKSAlIE1XTDhLX1JYX0RFU0NTOworCisJCXJ4cS0+cnhfZGVzY19hcmVhW3J4XS5wa3RfcGh5c19hZGRyID0KKwkJCWNwdV90b19sZTMyKHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+ZGF0YSwKKwkJCQkJTVdMOEtfUlhfTUFYU1osIERNQV9GUk9NX0RFVklDRSkpOworCisJCXJ4cS0+cnhfZGVzY19hcmVhW3J4XS5wa3RfbGVuID0gY3B1X3RvX2xlMTYoTVdMOEtfUlhfTUFYU1opOworCQlyeHEtPnJ4X3NrYltyeF0gPSBza2I7CisJCXdtYigpOworCQlyeHEtPnJ4X2Rlc2NfYXJlYVtyeF0ucnhfY3RybCA9IDA7CisKKwkJcmVmaWxsZWQrKzsKKwl9CisKKwlyZXR1cm4gcmVmaWxsZWQ7Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiB0aGUgY2FyZCdzIHJlY2VwdGlvbiBpcyBjb21wbGV0ZWx5IGhhbHRlZCAqLworc3RhdGljIHZvaWQgbXdsOGtfcnhxX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3J4X3F1ZXVlICpyeHEgPSBwcml2LT5yeHEgKyBpbmRleDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19SWF9ERVNDUzsgaSsrKSB7CisJCWlmIChyeHEtPnJ4X3NrYltpXSAhPSBOVUxMKSB7CisJCQl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwkJCWFkZHIgPSBsZTMyX3RvX2NwdShyeHEtPnJ4X2Rlc2NfYXJlYVtpXS5wa3RfcGh5c19hZGRyKTsKKwkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwgYWRkciwgTVdMOEtfUlhfTUFYU1osCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJa2ZyZWVfc2tiKHJ4cS0+cnhfc2tiW2ldKTsKKwkJCXJ4cS0+cnhfc2tiW2ldID0gTlVMTDsKKwkJfQorCX0KKworCWtmcmVlKHJ4cS0+cnhfc2tiKTsKKwlyeHEtPnJ4X3NrYiA9IE5VTEw7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsCisJCQkgICAgTVdMOEtfUlhfREVTQ1MgKiBzaXplb2Yoc3RydWN0IG13bDhrX3J4X2Rlc2MpLAorCQkJICAgIHJ4cS0+cnhfZGVzY19hcmVhLCByeHEtPnJ4X2Rlc2NfZG1hKTsKKwlyeHEtPnJ4X2Rlc2NfYXJlYSA9IE5VTEw7Cit9CisKKworLyoKKyAqIFNjYW4gYSBsaXN0IG9mIEJTU0lEcyB0byBwcm9jZXNzIGZvciBmaW5hbGl6ZSBqb2luLgorICogQWxsb3dzIGZvciBleHRlbnNpb24gdG8gcHJvY2VzcyBtdWx0aXBsZSBCU1NJRHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cittd2w4a19jYXB0dXJlX2Jzc2lkKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2gpCit7CisJcmV0dXJuIHByaXYtPmNhcHR1cmVfYmVhY29uICYmCisJCWllZWU4MDIxMV9pc19iZWFjb24od2gtPmZyYW1lX2NvbnRyb2wpICYmCisJCSFjb21wYXJlX2V0aGVyX2FkZHIod2gtPmFkZHIzLCBwcml2LT5jYXB0dXJlX2Jzc2lkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG13bDhrX3NhdmVfYmVhY29uKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LAorCQkJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJcHJpdi0+Y2FwdHVyZV9iZWFjb24gPSBmYWxzZTsKKwltZW1zZXQocHJpdi0+Y2FwdHVyZV9ic3NpZCwgMCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCS8qCisJICogVXNlIEdGUF9BVE9NSUMgYXMgcnhxX3Byb2Nlc3MgaXMgY2FsbGVkIGZyb20KKwkgKiB0aGUgcHJpbWFyeSBpbnRlcnJ1cHQgaGFuZGxlciwgbWVtb3J5IGFsbG9jYXRpb24gY2FsbAorCSAqIG11c3Qgbm90IHNsZWVwLgorCSAqLworCXByaXYtPmJlYWNvbl9za2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCWlmIChwcml2LT5iZWFjb25fc2tiICE9IE5VTEwpCisJCXF1ZXVlX3dvcmsocHJpdi0+Y29uZmlnX3dxLAorCQkJCSZwcml2LT5maW5hbGl6ZV9qb2luX3dvcmtlcik7Cit9CisKK3N0YXRpYyBpbnQgcnhxX3Byb2Nlc3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCwgaW50IGxpbWl0KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3J4X3F1ZXVlICpyeHEgPSBwcml2LT5yeHEgKyBpbmRleDsKKwlpbnQgcHJvY2Vzc2VkOworCisJcHJvY2Vzc2VkID0gMDsKKwl3aGlsZSAocnhxLT5yeF9kZXNjX2NvdW50ICYmIGxpbWl0LS0pIHsKKwkJc3RydWN0IG13bDhrX3J4X2Rlc2MgKnJ4X2Rlc2M7CisJCXN0cnVjdCBza19idWZmICpza2I7CisJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzIHN0YXR1czsKKwkJdW5zaWduZWQgbG9uZyBhZGRyOworCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqd2g7CisKKwkJcnhfZGVzYyA9IHJ4cS0+cnhfZGVzY19hcmVhICsgcnhxLT5yeF9oZWFkOworCQlpZiAoIShyeF9kZXNjLT5yeF9jdHJsICYgTVdMOEtfUlhfQ1RSTF9PV05FRF9CWV9IT1NUKSkKKwkJCWJyZWFrOworCQlybWIoKTsKKworCQlza2IgPSByeHEtPnJ4X3NrYltyeHEtPnJ4X2hlYWRdOworCQlyeHEtPnJ4X3NrYltyeHEtPnJ4X2hlYWRdID0gTlVMTDsKKworCQlyeHEtPnJ4X2hlYWQgPSAocnhxLT5yeF9oZWFkICsgMSkgJSBNV0w4S19SWF9ERVNDUzsKKwkJcnhxLT5yeF9kZXNjX2NvdW50LS07CisKKwkJYWRkciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPnBrdF9waHlzX2FkZHIpOworCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGFkZHIsCisJCQkJCU1XTDhLX1JYX01BWFNaLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCXNrYl9wdXQoc2tiLCBsZTE2X3RvX2NwdShyeF9kZXNjLT5wa3RfbGVuKSk7CisJCWlmIChtd2w4a19yZW1vdmVfZG1hX2hlYWRlcihza2IpKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQljb250aW51ZTsKKwkJfQorCisJCXdoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCisJCS8qCisJCSAqIENoZWNrIGZvciBwZW5kaW5nIGpvaW4gb3BlcmF0aW9uLiBzYXZlIGEgY29weSBvZgorCQkgKiB0aGUgYmVhY29uIGFuZCBzY2hlZHVsZSBhIHRhc2tsZXQgdG8gc2VuZCBmaW5hbGl6ZQorCQkgKiBqb2luIGNvbW1hbmQgdG8gdGhlIGZpcm13YXJlLgorCQkgKi8KKwkJaWYgKG13bDhrX2NhcHR1cmVfYnNzaWQocHJpdiwgd2gpKQorCQkJbXdsOGtfc2F2ZV9iZWFjb24ocHJpdiwgc2tiKTsKKworCQltZW1zZXQoJnN0YXR1cywgMCwgc2l6ZW9mKHN0YXR1cykpOworCQlzdGF0dXMubWFjdGltZSA9IDA7CisJCXN0YXR1cy5zaWduYWwgPSAtcnhfZGVzYy0+cnNzaTsKKwkJc3RhdHVzLm5vaXNlID0gLXJ4X2Rlc2MtPm5vaXNlX2xldmVsOworCQlzdGF0dXMucXVhbCA9IHJ4X2Rlc2MtPmxpbmtfcXVhbGl0eTsKKwkJc3RhdHVzLmFudGVubmEgPSAxOworCQlzdGF0dXMucmF0ZV9pZHggPSAxOworCQlzdGF0dXMuZmxhZyA9IDA7CisJCXN0YXR1cy5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwkJc3RhdHVzLmZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3kocnhfZGVzYy0+Y2hhbm5lbCk7CisJCWllZWU4MDIxMV9yeF9pcnFzYWZlKGh3LCBza2IsICZzdGF0dXMpOworCisJCXByb2Nlc3NlZCsrOworCX0KKworCXJldHVybiBwcm9jZXNzZWQ7Cit9CisKKworLyoKKyAqIFBhY2tldCB0cmFuc21pc3Npb24uCisgKi8KKworLyogVHJhbnNtaXQgcXVldWUgYXNzaWdubWVudC4gICovCitlbnVtIHsKKwlNV0w4S19XTUVfQUNfQksJPSAwLAkJLyogYmFja2dyb3VuZCBhY2Nlc3MgKi8KKwlNV0w4S19XTUVfQUNfQkUJPSAxLAkJLyogYmVzdCBlZmZvcnQgYWNjZXNzICovCisJTVdMOEtfV01FX0FDX1ZJCT0gMiwJCS8qIHZpZGVvIGFjY2VzcyAqLworCU1XTDhLX1dNRV9BQ19WTwk9IDMsCQkvKiB2b2ljZSBhY2Nlc3MgKi8KK307CisKKy8qIFRyYW5zbWl0IHBhY2tldCBBQ0sgcG9saWN5ICovCisjZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PUk1BTAkJMAorI2RlZmluZSBNV0w4S19UWERfQUNLX1BPTElDWV9OT05FCQkxCisjZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PX0VYUExJQ0lUCTIKKyNkZWZpbmUgTVdMOEtfVFhEX0FDS19QT0xJQ1lfQkxPQ0tBQ0sJCTMKKworI2RlZmluZSBHRVRfVFhRKF9hYykgKFwKKwkJKChfYWMpID09IFdNRV9BQ19WTykgPyBNV0w4S19XTUVfQUNfVk8gOiBcCisJCSgoX2FjKSA9PSBXTUVfQUNfVkkpID8gTVdMOEtfV01FX0FDX1ZJIDogXAorCQkoKF9hYykgPT0gV01FX0FDX0JLKSA/IE1XTDhLX1dNRV9BQ19CSyA6IFwKKwkJTVdMOEtfV01FX0FDX0JFKQorCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfSURMRQkJCTB4MDAwMDAwMDAKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19VU0VECQkJMHgwMDAwMDAwMQorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX09LCQkJMHgwMDAwMDAwMQorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX09LX1JFVFJZCQkweDAwMDAwMDAyCisjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0tfTU9SRV9SRVRSWQkJMHgwMDAwMDAwNAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX01VTFRJQ0FTVF9UWAkJMHgwMDAwMDAwOAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0JST0FEQ0FTVF9UWAkJMHgwMDAwMDAxMAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZBSUxFRF9MSU5LX0VSUk9SCTB4MDAwMDAwMjAKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19GQUlMRURfRVhDRUVEX0xJTUlUCTB4MDAwMDAwNDAKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19GQUlMRURfQUdJTkcJCTB4MDAwMDAwODAKKyNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19IT1NUX0NNRAkJMHg0MDAwMDAwMAorI2RlZmluZSBNV0w4S19UWERfU1RBVFVTX0ZXX09XTkVECQkweDgwMDAwMDAwCisjZGVmaW5lICBNV0w4S19UWERfU09GVFNUQUxFCQkJCTB4ODAKKyNkZWZpbmUgIE1XTDhLX1RYRF9TT0ZUU1RBTEVfTUdNVF9SRVRSWQkJCTB4MDEKKworc3RydWN0IG13bDhrX3R4X2Rlc2MgeworCV9fbGUzMiBzdGF0dXM7CisJX191OCBkYXRhX3JhdGU7CisJX191OCB0eF9wcmlvcml0eTsKKwlfX2xlMTYgcW9zX2NvbnRyb2w7CisJX19sZTMyIHBrdF9waHlzX2FkZHI7CisJX19sZTE2IHBrdF9sZW47CisJX191OCBkZXN0X01BQ19hZGRyW0lFRUU4MDIxMV9BRERSX0xFTl07CisJX19sZTMyIG5leHRfdHhfZGVzY19waHlzX2FkZHI7CisJX19sZTMyIHJlc2VydmVkOworCV9fbGUxNiByYXRlX2luZm87CisJX191OCBwZWVyX2lkOworCV9fdTggdHhfZnJhZ19jbnQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1XTDhLX1RYX0RFU0NTCQkxMjgKKworc3RhdGljIGludCBtd2w4a190eHFfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKKwlpbnQgc2l6ZTsKKwlpbnQgaTsKKworCW1lbXNldCgmdHhxLT50eF9zdGF0cywgMCwKKwkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMpKTsKKwl0eHEtPnR4X3N0YXRzLmxpbWl0ID0gTVdMOEtfVFhfREVTQ1M7CisJdHhxLT50eF9oZWFkID0gMDsKKwl0eHEtPnR4X3RhaWwgPSAwOworCisJc2l6ZSA9IE1XTDhLX1RYX0RFU0NTICogc2l6ZW9mKHN0cnVjdCBtd2w4a190eF9kZXNjKTsKKworCXR4cS0+dHhfZGVzY19hcmVhID0KKwkJcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgc2l6ZSwgJnR4cS0+dHhfZGVzY19kbWEpOworCWlmICh0eHEtPnR4X2Rlc2NfYXJlYSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvYyBUWCBkZXNjcmlwdG9yc1xuIiwKKwkJICAgICAgIHByaXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KHR4cS0+dHhfZGVzY19hcmVhLCAwLCBzaXplKTsKKworCXR4cS0+dHhfc2tiID0ga21hbGxvYyhNV0w4S19UWF9ERVNDUyAqIHNpemVvZigqdHhxLT50eF9za2IpLAorCQkJCQkJCQlHRlBfS0VSTkVMKTsKKwlpZiAodHhxLT50eF9za2IgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2MgVFggc2tidWZmIGxpc3RcbiIsCisJCSAgICAgICBwcml2LT5uYW1lKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LCBzaXplLAorCQkJCSAgICB0eHEtPnR4X2Rlc2NfYXJlYSwgdHhxLT50eF9kZXNjX2RtYSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1zZXQodHhxLT50eF9za2IsIDAsIE1XTDhLX1RYX0RFU0NTICogc2l6ZW9mKCp0eHEtPnR4X3NrYikpOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX0RFU0NTOyBpKyspIHsKKwkJc3RydWN0IG13bDhrX3R4X2Rlc2MgKnR4X2Rlc2M7CisJCWludCBuZXh0aTsKKworCQl0eF9kZXNjID0gdHhxLT50eF9kZXNjX2FyZWEgKyBpOworCQluZXh0aSA9IChpICsgMSkgJSBNV0w4S19UWF9ERVNDUzsKKworCQl0eF9kZXNjLT5zdGF0dXMgPSAwOworCQl0eF9kZXNjLT5uZXh0X3R4X2Rlc2NfcGh5c19hZGRyID0KKwkJCWNwdV90b19sZTMyKHR4cS0+dHhfZGVzY19kbWEgKworCQkJCQkJbmV4dGkgKiBzaXplb2YoKnR4X2Rlc2MpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG13bDhrX3R4X3N0YXJ0KHN0cnVjdCBtd2w4a19wcml2ICpwcml2KQoreworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX1BQQV9SRUFEWSwKKwkJcHJpdi0+cmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJaW93cml0ZTMyKE1XTDhLX0gyQV9JTlRfRFVNTVksCisJCXByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSDJBX0lOVEVSUlVQVF9FVkVOVFMpOworCWlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfSU5UX0NPREUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtd2w4a190eHFfYnVzeShzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gcHJpdi0+cGVuZGluZ190eF9wa3RzOworfQorCitzdHJ1Y3QgbXdsOGtfdHhxX2luZm8geworCXUzMiBmd19vd25lZDsKKwl1MzIgZHJ2X293bmVkOworCXUzMiB1bnVzZWQ7CisJdTMyIGxlbjsKKwl1MzIgaGVhZDsKKwl1MzIgdGFpbDsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfc2Nhbl90eF9yaW5nKHN0cnVjdCBtd2w4a19wcml2ICpwcml2LAorCQkJCXN0cnVjdCBtd2w4a190eHFfaW5mbyB0eGluZm9bXSwKKwkJCQl1MzIgbnVtX3F1ZXVlcykKK3sKKwlpbnQgY291bnQsIGRlc2MsIHN0YXR1czsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cTsKKwlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhfZGVzYzsKKwlpbnQgbmRlc2NzID0gMDsKKworCW1lbXNldCh0eGluZm8sIDAsIG51bV9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IG13bDhrX3R4cV9pbmZvKSk7CisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBudW1fcXVldWVzOyBjb3VudCsrKSB7CisJCXR4cSA9IHByaXYtPnR4cSArIGNvdW50OworCQl0eGluZm9bY291bnRdLmxlbiA9IHR4cS0+dHhfc3RhdHMubGVuOworCQl0eGluZm9bY291bnRdLmhlYWQgPSB0eHEtPnR4X2hlYWQ7CisJCXR4aW5mb1tjb3VudF0udGFpbCA9IHR4cS0+dHhfdGFpbDsKKwkJZm9yIChkZXNjID0gMDsgZGVzYyA8IE1XTDhLX1RYX0RFU0NTOyBkZXNjKyspIHsKKwkJCXR4X2Rlc2MgPSB0eHEtPnR4X2Rlc2NfYXJlYSArIGRlc2M7CisJCQlzdGF0dXMgPSBsZTMyX3RvX2NwdSh0eF9kZXNjLT5zdGF0dXMpOworCisJCQlpZiAoc3RhdHVzICYgTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRCkKKwkJCQl0eGluZm9bY291bnRdLmZ3X293bmVkKys7CisJCQllbHNlCisJCQkJdHhpbmZvW2NvdW50XS5kcnZfb3duZWQrKzsKKworCQkJaWYgKHR4X2Rlc2MtPnBrdF9sZW4gPT0gMCkKKwkJCQl0eGluZm9bY291bnRdLnVudXNlZCsrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCXJldHVybiBuZGVzY3M7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfdHhfd2FpdF9lbXB0eShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGRlbGF5X21zKQoreworCXUzMiBjb3VudCA9IDA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNtZF93YWl0KTsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlpZiAocHJpdi0+dHhfd2FpdCAhPSBOVUxMKQorCQlwcmludGsoS0VSTl9FUlIgIldBUk5JTkcgUHJldmlvdXMgVFhXYWl0RW1wdHkgaW5zdGFuY2VcbiIpOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwljb3VudCA9IG13bDhrX3R4cV9idXN5KHByaXYpOworCWlmIChjb3VudCkgeworCQlwcml2LT50eF93YWl0ID0gJmNtZF93YWl0OworCQlpZiAocHJpdi0+cmFkaW9fc3RhdGUpCisJCQltd2w4a190eF9zdGFydChwcml2KTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJaWYgKGNvdW50KSB7CisJCXN0cnVjdCBtd2w4a190eHFfaW5mbyB0eGluZm9bNF07CisJCWludCBpbmRleDsKKwkJaW50IG5ld2NvdW50OworCisJCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNtZF93YWl0LAorCQkJCQltc2Vjc190b19qaWZmaWVzKGRlbGF5X21zKSk7CisJCWlmICh0aW1lb3V0KQorCQkJcmV0dXJuIDA7CisKKwkJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwkJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CisJCW5ld2NvdW50ID0gbXdsOGtfdHhxX2J1c3kocHJpdik7CisJCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCQlwcmludGsoS0VSTl9FUlIgIiVzKCV1KSBUSU1FRE9VVDoldW1zIFBlbmQ6JXUtLT4ldVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBfX0xJTkVfXywgZGVsYXlfbXMsIGNvdW50LCBuZXdjb3VudCk7CisKKwkJbXdsOGtfc2Nhbl90eF9yaW5nKHByaXYsIHR4aW5mbywgNCk7CisJCWZvciAoaW5kZXggPSAwIDsgaW5kZXggPCA0OyBpbmRleCsrKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIlRYUToldSBMOiV1IEg6JXUgVDoldSBGVzoldSBEUlY6JXUgVToldVxuIiwKKwkJCQkJaW5kZXgsCisJCQkJCXR4aW5mb1tpbmRleF0ubGVuLAorCQkJCQl0eGluZm9baW5kZXhdLmhlYWQsCisJCQkJCXR4aW5mb1tpbmRleF0udGFpbCwKKwkJCQkJdHhpbmZvW2luZGV4XS5md19vd25lZCwKKwkJCQkJdHhpbmZvW2luZGV4XS5kcnZfb3duZWQsCisJCQkJCXR4aW5mb1tpbmRleF0udW51c2VkKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTVdMOEtfVFhEX09LCShNV0w4S19UWERfU1RBVFVTX09LIHwgXAorCQkJIE1XTDhLX1RYRF9TVEFUVVNfT0tfUkVUUlkgfCBcCisJCQkgTVdMOEtfVFhEX1NUQVRVU19PS19NT1JFX1JFVFJZKQorI2RlZmluZSBNV0w4S19UWERfU1VDQ0VTUyhzdGF0KQkJKChzdGF0KSAmIE1XTDhLX1RYRF9PSykKKyNkZWZpbmUgTVdMOEtfVFhEX0ZBSUxfUkVUUlkoc3RhdCkJXAorCSgoc3RhdCkgJiAoTVdMOEtfVFhEX1NUQVRVU19GQUlMRURfRVhDRUVEX0xJTUlUKSkKKworc3RhdGljIHZvaWQgbXdsOGtfdHhxX3JlY2xhaW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCwgaW50IGZvcmNlKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKKwlpbnQgd2FrZSA9IDA7CisKKwl3aGlsZSAodHhxLT50eF9zdGF0cy5sZW4gPiAwKSB7CisJCWludCB0eDsKKwkJaW50IHJjOworCQlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHhfZGVzYzsKKwkJdW5zaWduZWQgbG9uZyBhZGRyOworCQlzaXplX3Qgc2l6ZTsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCQl1MzIgc3RhdHVzOworCisJCXJjID0gMDsKKwkJdHggPSB0eHEtPnR4X2hlYWQ7CisJCXR4X2Rlc2MgPSB0eHEtPnR4X2Rlc2NfYXJlYSArIHR4OworCisJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KHR4X2Rlc2MtPnN0YXR1cyk7CisKKwkJaWYgKHN0YXR1cyAmIE1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQpIHsKKwkJCWlmICghZm9yY2UpCisJCQkJYnJlYWs7CisJCQl0eF9kZXNjLT5zdGF0dXMgJj0KKwkJCQl+Y3B1X3RvX2xlMzIoTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRCk7CisJCX0KKworCQl0eHEtPnR4X2hlYWQgPSAodHggKyAxKSAlIE1XTDhLX1RYX0RFU0NTOworCQlCVUdfT04odHhxLT50eF9zdGF0cy5sZW4gPT0gMCk7CisJCXR4cS0+dHhfc3RhdHMubGVuLS07CisJCXByaXYtPnBlbmRpbmdfdHhfcGt0cy0tOworCisJCWFkZHIgPSBsZTMyX3RvX2NwdSh0eF9kZXNjLT5wa3RfcGh5c19hZGRyKTsKKwkJc2l6ZSA9ICh1MzIpKGxlMTZfdG9fY3B1KHR4X2Rlc2MtPnBrdF9sZW4pKTsKKwkJc2tiID0gdHhxLT50eF9za2JbdHhdLnNrYjsKKwkJdHhxLT50eF9za2JbdHhdLnNrYiA9IE5VTEw7CisKKwkJQlVHX09OKHNrYiA9PSBOVUxMKTsKKwkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBhZGRyLCBzaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQlyYyA9IG13bDhrX3JlbW92ZV9kbWFfaGVhZGVyKHNrYik7CisKKwkJLyogTWFyayBkZXNjcmlwdG9yIGFzIHVudXNlZCAqLworCQl0eF9kZXNjLT5wa3RfcGh5c19hZGRyID0gMDsKKwkJdHhfZGVzYy0+cGt0X2xlbiA9IDA7CisKKwkJaWYgKHR4cS0+dHhfc2tiW3R4XS5jbG9uZSkgeworCQkJLyogUmVwbGFjZSB3aXRoIG9yaWdpbmFsIHNrYgorCQkJICogYmVmb3JlIHJldHVybmluZyB0byBzdGFjaworCQkJICogYXMgYnVmZmVyIGhhcyBiZWVuIGNsb25lZAorCQkJICovCisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlza2IgPSB0eHEtPnR4X3NrYlt0eF0uY2xvbmU7CisJCQl0eHEtPnR4X3NrYlt0eF0uY2xvbmUgPSBOVUxMOworCQl9CisKKwkJaWYgKHJjKSB7CisJCQkvKiBTb21ldGhpbmcgaGFzIGdvbmUgd3JvbmcgaGVyZS4KKwkJCSAqIEZhaWxlZCB0byByZW1vdmUgRE1BIGhlYWRlci4KKwkJCSAqIFByaW50IGVycm9yIG1lc3NhZ2UgYW5kIGRyb3AgcGFja2V0LgorCQkJICovCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciByZW1vdmluZyBETUEgaGVhZGVyIGZyb20gIgorCQkJCQkidHggc2tiIDB4JXAuXG4iLCBwcml2LT5uYW1lLCBza2IpOworCisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhpbmZvKTsKKworCQkvKiBDb252ZXJ0IGZpcm13YXJlIHN0YXR1cyBzdHVmZiBpbnRvIHR4X3N0YXR1cyAqLworCQlpZiAoTVdMOEtfVFhEX1NVQ0NFU1Moc3RhdHVzKSkgeworCQkJLyogVHJhbnNtaXQgT0sgKi8KKwkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwkJfQorCisJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKKworCQl3YWtlID0gIXByaXYtPmluY29uZmlnICYmIHByaXYtPnJhZGlvX3N0YXRlOworCX0KKworCWlmICh3YWtlKQorCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgaW5kZXgpOworfQorCisvKiBtdXN0IGJlIGNhbGxlZCBvbmx5IHdoZW4gdGhlIGNhcmQncyB0cmFuc21pdCBpcyBjb21wbGV0ZWx5IGhhbHRlZCAqLworc3RhdGljIHZvaWQgbXdsOGtfdHhxX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKKworCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpbmRleCwgMSk7CisKKwlrZnJlZSh0eHEtPnR4X3NrYik7CisJdHhxLT50eF9za2IgPSBOVUxMOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wZGV2LAorCQkJICAgIE1XTDhLX1RYX0RFU0NTICogc2l6ZW9mKHN0cnVjdCBtd2w4a190eF9kZXNjKSwKKwkJCSAgICB0eHEtPnR4X2Rlc2NfYXJlYSwgdHhxLT50eF9kZXNjX2RtYSk7CisJdHhxLT50eF9kZXNjX2FyZWEgPSBOVUxMOworfQorCitzdGF0aWMgaW50Cittd2w4a190eHFfeG1pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGluZGV4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICp3aDsKKwlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cTsKKwlzdHJ1Y3QgbXdsOGtfdHhfZGVzYyAqdHg7CisJc3RydWN0IG13bDhrX2RtYV9kYXRhICp0cjsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWY7CisJc3RydWN0IHNrX2J1ZmYgKm9yZ19za2IgPSBza2I7CisJZG1hX2FkZHJfdCBkbWE7CisJdTE2IHFvcyA9IDA7CisJYm9vbCBxb3NmcmFtZSA9IGZhbHNlLCBhbXBkdWZyYW1lID0gZmFsc2U7CisJYm9vbCBtY2ZyYW1lID0gZmFsc2UsIGVhcG9sZnJhbWUgPSBmYWxzZTsKKwlib29sIGFtc2R1ZnJhbWUgPSBmYWxzZTsKKwlfX2xlMTYgZmM7CisKKwl0eHEgPSBwcml2LT50eHEgKyBpbmRleDsKKwl0eCA9IHR4cS0+dHhfZGVzY19hcmVhICsgdHhxLT50eF90YWlsOworCisJQlVHX09OKHR4cS0+dHhfc2tiW3R4cS0+dHhfdGFpbF0uc2tiICE9IE5VTEwpOworCisJLyoKKwkgKiBBcHBlbmQgSFcgRE1BIGhlYWRlciB0byBzdGFydCBvZiBwYWNrZXQuICBEcm9wIHBhY2tldCBpZgorCSAqIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2Ugb3IgYSBmYWlsdXJlIHRvIHVuc2hhcmUvdW5jbG9uZQorCSAqIHRoZSBza2IuCisJICovCisJc2tiID0gbXdsOGtfYWRkX2RtYV9oZWFkZXIoc2tiKTsKKworCWlmIChza2IgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBwcmVwZW5kIEhXIERNQSAiCisJCQkiaGVhZGVyLCBkcm9wcGluZyBUWCBmcmFtZS5cbiIsIHByaXYtPm5hbWUpOworCQlkZXZfa2ZyZWVfc2tiKG9yZ19za2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJbXdsOGtfdmlmID0gTVdMOEtfVklGKHR4X2luZm8tPmNvbnRyb2wudmlmKTsKKwl0ciA9IChzdHJ1Y3QgbXdsOGtfZG1hX2RhdGEgKilza2ItPmRhdGE7CisJd2ggPSAmdHItPndoOworCWZjID0gd2gtPmZyYW1lX2NvbnRyb2w7CisJcW9zZnJhbWUgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpOworCW1jZnJhbWUgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcih3aC0+YWRkcjEpOworCWFtcGR1ZnJhbWUgPSAhISh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpOworCisJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB7CisJCXUxNiBzZXFubyA9IG13bDhrX3ZpZi0+c2Vxbm87CisJCXdoLT5zZXFfY3RybCAmPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU0NUTF9GUkFHKTsKKwkJd2gtPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KHNlcW5vIDw8IDQpOworCQltd2w4a192aWYtPnNlcW5vID0gc2Vxbm8rKyAlIDQwOTY7CisJfQorCisJaWYgKHFvc2ZyYW1lKQorCQlxb3MgPSBsZTE2X3RvX2NwdSgqKChfX2xlMTYgKilpZWVlODAyMTFfZ2V0X3Fvc19jdGwod2gpKSk7CisKKwlkbWEgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEsCisJCQkJc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBkbWEpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGRtYSBtYXAgc2tiLCAiCisJCQkiZHJvcHBpbmcgVFggZnJhbWUuXG4iLCBwcml2LT5uYW1lKTsKKworCQlpZiAob3JnX3NrYiAhPSBOVUxMKQorCQkJZGV2X2tmcmVlX3NrYihvcmdfc2tiKTsKKwkJaWYgKHNrYiAhPSBOVUxMKQorCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCS8qIFNldCBkZXNjIGhlYWRlciwgY3B1IGJpdCBvcmRlci4gICovCisJdHgtPnN0YXR1cyA9IDA7CisJdHgtPmRhdGFfcmF0ZSA9IDA7CisJdHgtPnR4X3ByaW9yaXR5ID0gaW5kZXg7CisJdHgtPnFvc19jb250cm9sID0gMDsKKwl0eC0+cmF0ZV9pbmZvID0gMDsKKwl0eC0+cGVlcl9pZCA9IG13bDhrX3ZpZi0+cGVlcl9pZDsKKworCWFtc2R1ZnJhbWUgPSAhIShxb3MgJiBJRUVFODAyMTFfUU9TX0NPTlRST0xfQV9NU0RVX1BSRVNFTlQpOworCisJLyogU2V0dXAgZmlybXdhcmUgY29udHJvbCBiaXQgZmllbGRzIGZvciBlYWNoIGZyYW1lIHR5cGUuICAqLworCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykgfHwgaWVlZTgwMjExX2lzX2N0bChmYykpIHsKKwkJdHgtPmRhdGFfcmF0ZSA9IDA7CisJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfZW9zcChxb3MpOworCQkvKiBTZXQgUXVldWUgc2l6ZSB0byB1bnNwZWNpZmllZCAqLworCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X3FsZW4ocW9zLCAweGZmKTsKKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19kYXRhKGZjKSkgeworCQl0eC0+ZGF0YV9yYXRlID0gMTsKKwkJaWYgKG1jZnJhbWUpCisJCQl0eC0+c3RhdHVzIHw9IE1XTDhLX1RYRF9TVEFUVVNfTVVMVElDQVNUX1RYOworCisJCS8qCisJCSAqIFRlbGwgZmlybXdhcmUgdG8gbm90IHNlbmQgRUFQT0wgcGt0cyBpbiBhbgorCQkgKiBhZ2dyZWdhdGUuICBWZXJpZnkgYWdhaW5zdCBtYWM4MDIxMSB0eCBwYXRoLiAgSWYKKwkJICogc3RhY2sgdHVybnMgb2ZmIEFNUERVIGZvciBhbiBFQVBPTCBmcmFtZSB0aGlzCisJCSAqIGNoZWNrIHdpbGwgYmUgcmVtb3ZlZC4KKwkJICovCisJCWlmIChlYXBvbGZyYW1lKSB7CisJCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Fjayhxb3MsCisJCQkJTVdMOEtfVFhEX0FDS19QT0xJQ1lfTk9STUFMKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFNlbmQgcGt0IGluIGFuIGFnZ3JlZ2F0ZSBpZiBBTVBEVSBmcmFtZS4gICovCisJCQlpZiAoYW1wZHVmcmFtZSkKKwkJCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Fjayhxb3MsCisJCQkJCU1XTDhLX1RYRF9BQ0tfUE9MSUNZX0JMT0NLQUNLKTsKKwkJCWVsc2UKKwkJCQlxb3MgPSBtd2w4a19xb3Nfc2V0Yml0X2Fjayhxb3MsCisJCQkJCU1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PUk1BTCk7CisKKwkJCWlmIChhbXNkdWZyYW1lKQorCQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYW1zZHUocW9zKTsKKwkJfQorCX0KKworCS8qIENvbnZlcnQgdG8gbGl0dGxlIGVuZGlhbiAqLworCXR4LT5xb3NfY29udHJvbCA9IGNwdV90b19sZTE2KHFvcyk7CisJdHgtPnN0YXR1cyA9IGNwdV90b19sZTMyKHR4LT5zdGF0dXMpOworCXR4LT5wa3RfcGh5c19hZGRyID0gY3B1X3RvX2xlMzIoZG1hKTsKKwl0eC0+cGt0X2xlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKKworCXR4cS0+dHhfc2tiW3R4cS0+dHhfdGFpbF0uc2tiID0gc2tiOworCXR4cS0+dHhfc2tiW3R4cS0+dHhfdGFpbF0uY2xvbmUgPQorCQlza2IgPT0gb3JnX3NrYiA/IE5VTEwgOiBvcmdfc2tiOworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCXR4LT5zdGF0dXMgPSBjcHVfdG9fbGUzMihNV0w4S19UWERfU1RBVFVTX09LIHwKKwkJCQkJTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRCk7CisJd21iKCk7CisJdHhxLT50eF9zdGF0cy5sZW4rKzsKKwlwcml2LT5wZW5kaW5nX3R4X3BrdHMrKzsKKwl0eHEtPnR4X3N0YXRzLmNvdW50Kys7CisJdHhxLT50eF90YWlsKys7CisKKwlpZiAodHhxLT50eF90YWlsID09IE1XTDhLX1RYX0RFU0NTKQorCQl0eHEtPnR4X3RhaWwgPSAwOworCWlmICh0eHEtPnR4X2hlYWQgPT0gdHhxLT50eF90YWlsKQorCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShodywgaW5kZXgpOworCisJaWYgKHByaXYtPmluY29uZmlnKSB7CisJCS8qCisJCSAqIFNpbGVudGx5IHF1ZXVlIHBhY2tldCB3aGVuIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mCisJCSAqIGEgY29uZmlnIGN5Y2xlLiAgTm90aWZ5IGZpcm13YXJlIG9ubHkgaWYgd2UgYXJlCisJCSAqIHdhaXRpbmcgZm9yIFRYUXMgdG8gZW1wdHkuICBJZiBhIHBhY2tldCBpcyBzZW50CisJCSAqIGJlZm9yZSAuY29uZmlnKCkgaXMgY29tcGxldGUsIHBlcmhhcHMgaXQgaXMgYmV0dGVyCisJCSAqIHRvIGRyb3AgdGhlIHBhY2tldCwgYXMgdGhlIGNoYW5uZWwgaXMgYmVpbmcgY2hhbmdlZAorCQkgKiBhbmQgdGhlIHBhY2tldCB3aWxsIGVuZCB1cCBvbiB0aGUgd3JvbmcgY2hhbm5lbC4KKwkJICovCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogV0FSTklORyBUWCBhY3Rpdml0eSB3aGlsZSAiCisJCQkiaW4gY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisKKwkJaWYgKHByaXYtPnR4X3dhaXQgIT0gTlVMTCkKKwkJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCX0gZWxzZQorCQltd2w4a190eF9zdGFydChwcml2KTsKKworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKKworLyoKKyAqIENvbW1hbmQgcHJvY2Vzc2luZy4KKyAqLworCisvKiBUaW1lb3V0IGZpcm13YXJlIGNvbW1hbmRzIGFmdGVyIDIwMDBtcyAqLworI2RlZmluZSBNV0w4S19DTURfVElNRU9VVF9NUwkyMDAwCisKK3N0YXRpYyBpbnQgbXdsOGtfcG9zdF9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBtd2w4a19jbWRfcGt0ICpjbWQpCit7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY21kX3dhaXQpOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gcHJpdi0+cmVnczsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCXVuc2lnbmVkIGludCBkbWFfc2l6ZTsKKwlpbnQgcmM7CisJdTE2IF9faW9tZW0gKnJlc3VsdDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSAwOworCXU4IGJ1ZlszMl07CisKKwljbWQtPnJlc3VsdCA9IDB4RkZGRjsKKwlkbWFfc2l6ZSA9IGxlMTZfdG9fY3B1KGNtZC0+bGVuZ3RoKTsKKwlkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGNtZCwgZG1hX3NpemUsCisJCQkJICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocHJpdi0+cGRldiwgZG1hX2FkZHIpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChwcml2LT5ob3N0Y21kX3dhaXQgIT0gTlVMTCkKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HIGhvc3QgY29tbWFuZCBpbiBwcm9ncmVzc1xuIik7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKKwlwcml2LT5ob3N0Y21kX3dhaXQgPSAmY21kX3dhaXQ7CisJaW93cml0ZTMyKGRtYV9hZGRyLCByZWdzICsgTVdMOEtfSElVX0dFTl9QVFIpOworCWlvd3JpdGUzMihNV0w4S19IMkFfSU5UX0RPT1JCRUxMLAorCQlyZWdzICsgTVdMOEtfSElVX0gyQV9JTlRFUlJVUFRfRVZFTlRTKTsKKwlpb3dyaXRlMzIoTVdMOEtfSDJBX0lOVF9EVU1NWSwKKwkJcmVncyArIE1XTDhLX0hJVV9IMkFfSU5URVJSVVBUX0VWRU5UUyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5md19sb2NrKTsKKworCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNtZF93YWl0LAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoTVdMOEtfQ01EX1RJTUVPVVRfTVMpKTsKKworCXJlc3VsdCA9ICZjbWQtPnJlc3VsdDsKKwlpZiAoIXRpbWVvdXQpIHsKKwkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+ZndfbG9jayk7CisJCXByaXYtPmhvc3RjbWRfd2FpdCA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+ZndfbG9jayk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvbW1hbmQgJXMgdGltZW91dCBhZnRlciAldSBtc1xuIiwKKwkJICAgICAgIHByaXYtPm5hbWUsCisJCSAgICAgICBtd2w4a19jbWRfbmFtZShjbWQtPmNvZGUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpLAorCQkgICAgICAgTVdMOEtfQ01EX1RJTUVPVVRfTVMpOworCQlyYyA9IC1FVElNRURPVVQ7CisJfSBlbHNlIHsKKwkJcmMgPSAqcmVzdWx0ID8gLUVJTlZBTCA6IDA7CisJCWlmIChyYykKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvbW1hbmQgJXMgZXJyb3IgMHgleFxuIiwKKwkJCSAgICAgICBwcml2LT5uYW1lLAorCQkJICAgICAgIG13bDhrX2NtZF9uYW1lKGNtZC0+Y29kZSwgYnVmLCBzaXplb2YoYnVmKSksCisJCQkgICAgICAgKnJlc3VsdCk7CisJfQorCisJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBkbWFfYWRkciwgZG1hX3NpemUsCisJCQkJCVBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogR0VUX0hXX1NQRUMuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfZ2V0X2h3X3NwZWMgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX3U4IGh3X3JldjsKKwlfX3U4IGhvc3RfaW50ZXJmYWNlOworCV9fbGUxNiBudW1fbWNhZGRyczsKKwlfX3U4IHBlcm1fYWRkcltJRUVFODAyMTFfQUREUl9MRU5dOworCV9fbGUxNiByZWdpb25fY29kZTsKKwlfX2xlMzIgZndfcmV2OworCV9fbGUzMiBwc19jb29raWU7CisJX19sZTMyIGNhcHM7CisJX191OCBtY3NfYml0bWFwWzE2XTsKKwlfX2xlMzIgcnhfcXVldWVfcHRyOworCV9fbGUzMiBudW1fdHhfcXVldWVzOworCV9fbGUzMiB0eF9xdWV1ZV9wdHJzW01XTDhLX1RYX1FVRVVFU107CisJX19sZTMyIGNhcHMyOworCV9fbGUzMiBudW1fdHhfZGVzY19wZXJfcXVldWU7CisJX19sZTMyIHRvdGFsX3J4X2Rlc2M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9nZXRfaHdfc3BlYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19jbWRfZ2V0X2h3X3NwZWMgKmNtZDsKKwlpbnQgcmM7CisJaW50IGk7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfR0VUX0hXX1NQRUMpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwltZW1zZXQoY21kLT5wZXJtX2FkZHIsIDB4ZmYsIHNpemVvZihjbWQtPnBlcm1fYWRkcikpOworCWNtZC0+cHNfY29va2llID0gY3B1X3RvX2xlMzIocHJpdi0+Y29va2llX2RtYSk7CisJY21kLT5yeF9xdWV1ZV9wdHIgPSBjcHVfdG9fbGUzMihwcml2LT5yeHFbMF0ucnhfZGVzY19kbWEpOworCWNtZC0+bnVtX3R4X3F1ZXVlcyA9IE1XTDhLX1RYX1FVRVVFUzsKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCWNtZC0+dHhfcXVldWVfcHRyc1tpXSA9IGNwdV90b19sZTMyKHByaXYtPnR4cVtpXS50eF9kZXNjX2RtYSk7CisJY21kLT5udW1fdHhfZGVzY19wZXJfcXVldWUgPSBNV0w4S19UWF9ERVNDUzsKKwljbWQtPnRvdGFsX3J4X2Rlc2MgPSBNV0w4S19SWF9ERVNDUzsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisKKwlpZiAoIXJjKSB7CisJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKGh3LCBjbWQtPnBlcm1fYWRkcik7CisJCXByaXYtPm51bV9tY2FkZHJzID0gbGUxNl90b19jcHUoY21kLT5udW1fbWNhZGRycyk7CisJCXByaXYtPmZ3X3JldiA9IGNtZC0+ZndfcmV2OworCQlwcml2LT5od19yZXYgPSBjbWQtPmh3X3JldjsKKwkJcHJpdi0+cmVnaW9uX2NvZGUgPSBsZTE2X3RvX2NwdShjbWQtPnJlZ2lvbl9jb2RlKTsKKwl9CisKKwlrZnJlZShjbWQpOworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9NQUNfTVVMVElDQVNUX0FEUi4KKyAqLworc3RydWN0IG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkciB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG51bWFkZHI7CisJX191OCBhZGRyWzFdW0lFRUU4MDIxMV9BRERSX0xFTl07Cit9OworCisjZGVmaW5lIE1XTDhLX0VOQUJMRV9SWF9NVUxUSUNBU1QgMHgwMDBGCitzdGF0aWMgaW50IG13bDhrX2NtZF9tYWNfbXVsdGljYXN0X2FkcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJaW50IG1jX2NvdW50LAorCQkJCQlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQoreworCXN0cnVjdCBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHIgKmNtZDsKKwlpbnQgaW5kZXggPSAwOworCWludCByYzsKKwlpbnQgc2l6ZSA9IHNpemVvZigqY21kKSArICgobWNfY291bnQgLSAxKSAqIElFRUU4MDIxMV9BRERSX0xFTik7CisJY21kID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9NQUNfTVVMVElDQVNUX0FEUik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19FTkFCTEVfUlhfTVVMVElDQVNUKTsKKwljbWQtPm51bWFkZHIgPSBjcHVfdG9fbGUxNihtY19jb3VudCk7CisJd2hpbGUgKChpbmRleCA8IG1jX2NvdW50KSAmJiBtY2xpc3QpIHsKKwkJaWYgKG1jbGlzdC0+ZGFfYWRkcmxlbiAhPSBJRUVFODAyMTFfQUREUl9MRU4pIHsKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gbXdsOGtfY21kX21hY19tdWx0aWNhc3RfYWRyX2V4aXQ7CisJCX0KKwkJbWVtY3B5KGNtZC0+YWRkcltpbmRleF0sIG1jbGlzdC0+ZGFfYWRkciwgSUVFRTgwMjExX0FERFJfTEVOKTsKKwkJaW5kZXgrKzsKKwkJbWNsaXN0ID0gbWNsaXN0LT5uZXh0OworCX0KKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisKK213bDhrX2NtZF9tYWNfbXVsdGljYXN0X2Fkcl9leGl0OgorCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EXzgwMl8xMV9HRVRfU1RBVC4KKyAqLworc3RydWN0IG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUzMiBzdGF0c1s2NF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1XTDhLX1NUQVRfQUNLX0ZBSUxVUkUJOQorI2RlZmluZSBNV0w4S19TVEFUX1JUU19GQUlMVVJFCTEyCisjZGVmaW5lIE1XTDhLX1NUQVRfRkNTX0VSUk9SCTI0CisjZGVmaW5lIE1XTDhLX1NUQVRfUlRTX1NVQ0NFU1MJMTEKKworc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX2dldF9zdGF0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdCAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9HRVRfU1RBVCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9HRVQpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlpZiAoIXJjKSB7CisJCXN0YXRzLT5kb3QxMUFDS0ZhaWx1cmVDb3VudCA9CisJCQlsZTMyX3RvX2NwdShjbWQtPnN0YXRzW01XTDhLX1NUQVRfQUNLX0ZBSUxVUkVdKTsKKwkJc3RhdHMtPmRvdDExUlRTRmFpbHVyZUNvdW50ID0KKwkJCWxlMzJfdG9fY3B1KGNtZC0+c3RhdHNbTVdMOEtfU1RBVF9SVFNfRkFJTFVSRV0pOworCQlzdGF0cy0+ZG90MTFGQ1NFcnJvckNvdW50ID0KKwkJCWxlMzJfdG9fY3B1KGNtZC0+c3RhdHNbTVdMOEtfU1RBVF9GQ1NfRVJST1JdKTsKKwkJc3RhdHMtPmRvdDExUlRTU3VjY2Vzc0NvdW50ID0KKwkJCWxlMzJfdG9fY3B1KGNtZC0+c3RhdHNbTVdMOEtfU1RBVF9SVFNfU1VDQ0VTU10pOworCX0KKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EXzgwMl8xMV9SQURJT19DT05UUk9MLgorICovCitzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgY29udHJvbDsKKwlfX2xlMTYgcmFkaW9fb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2wgKmNtZDsKKwlpbnQgcmM7CisKKwlpZiAoKChlbmFibGUgJiBNV0w4S19SQURJT19FTkFCTEUpID09IHByaXYtPnJhZGlvX3N0YXRlKSAmJgorCSAgICAhKGVuYWJsZSAmIE1XTDhLX1JBRElPX0ZPUkNFKSkKKwkJcmV0dXJuIDA7CisKKwllbmFibGUgJj0gTVdMOEtfUkFESU9fRU5BQkxFOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1JBRElPX0NPTlRST0wpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKKwljbWQtPmNvbnRyb2wgPSBjcHVfdG9fbGUxNihwcml2LT5yYWRpb19wcmVhbWJsZSk7CisJY21kLT5yYWRpb19vbiA9IGNwdV90b19sZTE2KGVuYWJsZSA/IDB4MDAwMSA6IDB4MDAwMCk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlpZiAoIXJjKQorCQlwcml2LT5yYWRpb19zdGF0ZSA9IGVuYWJsZTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludAorbXdsOGtfc2V0X3JhZGlvX3ByZWFtYmxlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIHNob3J0X3ByZWFtYmxlKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2OworCisJaWYgKGh3ID09IE5VTEwgfHwgaHctPnByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcHJpdiA9IGh3LT5wcml2OworCisJcHJpdi0+cmFkaW9fcHJlYW1ibGUgPSAoc2hvcnRfcHJlYW1ibGUgPworCQlNV0w4S19SQURJT19TSE9SVF9QUkVBTUJMRSA6CisJCU1XTDhLX1JBRElPX0xPTkdfUFJFQU1CTEUpOworCisJcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywKKwkJCU1XTDhLX1JBRElPX0VOQUJMRSB8IE1XTDhLX1JBRElPX0ZPUkNFKTsKK30KKworLyoKKyAqIENNRF84MDJfMTFfUkZfVFhfUE9XRVIuCisgKi8KKyNkZWZpbmUgTVdMOEtfVFhfUE9XRVJfTEVWRUxfVE9UQUwJOAorCitzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlciB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IHN1cHBvcnRfbGV2ZWw7CisJX19sZTE2IGN1cnJlbnRfbGV2ZWw7CisJX19sZTE2IHJlc2VydmVkOworCV9fbGUxNiBwb3dlcl9sZXZlbF9saXN0W01XTDhLX1RYX1BPV0VSX0xFVkVMX1RPVEFMXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGRCbSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlciAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9SRl9UWF9QT1dFUik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+c3VwcG9ydF9sZXZlbCA9IGNwdV90b19sZTE2KGRCbSk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1BSRV9TQ0FOLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9wcmVfc2NhbiB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3ByZV9zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3ByZV9zY2FuICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9QUkVfU0NBTik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUE9TVF9TQ0FOLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9wb3N0X3NjYW4geworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgaXNpYnNzOworCV9fdTggYnNzaWRbSUVFRTgwMjExX0FERFJfTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQKK213bDhrX2NtZF9zZXRfcG9zdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IG1hY1tJRUVFODAyMTFfQUREUl9MRU5dKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbiAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUE9TVF9TQ0FOKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+aXNpYnNzID0gMDsKKwltZW1jcHkoY21kLT5ic3NpZCwgbWFjLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9SRl9DSEFOTkVMLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9yZl9jaGFubmVsIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX3U4IGN1cnJlbnRfY2hhbm5lbDsKKwlfX2xlMzIgY2hhbm5lbF9mbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9yZl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfcmZfY2hhbm5lbCAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfUkZfQ0hBTk5FTCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+Y3VycmVudF9jaGFubmVsID0gY2hhbm5lbC0+aHdfdmFsdWU7CisJaWYgKGNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJY21kLT5jaGFubmVsX2ZsYWdzID0gY3B1X3RvX2xlMzIoMHgwMDAwMDA4MSk7CisJZWxzZQorCQljbWQtPmNoYW5uZWxfZmxhZ3MgPSBjcHVfdG9fbGUzMigweDAwMDAwMDAwKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfU0xPVC4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfc2xvdCB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX191OCBzaG9ydF9zbG90OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X3Nsb3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBzbG90X3RpbWUpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfc2xvdCAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfU0xPVCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+c2hvcnRfc2xvdCA9IHNsb3RfdGltZSA9PSBNV0w4S19TSE9SVF9TTE9UVElNRSA/IDEgOiAwOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX01JTU9fQ09ORklHLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX21pbW9fY29uZmlnIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIGFjdGlvbjsKKwlfX3U4IHJ4X2FudGVubmFfbWFwOworCV9fdTggdHhfYW50ZW5uYV9tYXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9taW1vX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191OCByeCwgX191OCB0eCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX21pbW9fY29uZmlnICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX01JTU9fQ09ORklHKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoKHUzMilNV0w4S19DTURfU0VUKTsKKwljbWQtPnJ4X2FudGVubmFfbWFwID0gcng7CisJY21kLT50eF9hbnRlbm5hX21hcCA9IHR4OworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX0VOQUJMRV9TTklGRkVSLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX2VuYWJsZV9zbmlmZmVyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIGFjdGlvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfZW5hYmxlX3NuaWZmZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBtd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfRU5BQkxFX1NOSUZGRVIpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBlbmFibGUgPyBjcHVfdG9fbGUzMigodTMyKU1XTDhLX0NNRF9TRVQpIDogMDsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUkFURV9BREFQVF9NT0RFLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9yYXRlX2FkYXB0X21vZGUgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiBtb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0cmF0ZWFkYXB0bW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191MTYgbW9kZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9yYXRlX2FkYXB0X21vZGUgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1JBVEVBREFQVF9NT0RFKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7CisJY21kLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1dNTV9NT0RFLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF93bW0geworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19zZXRfd21tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3dtbSAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfV01NX01PREUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBlbmFibGUgPyBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKSA6IDA7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlpZiAoIXJjKQorCQlwcml2LT53bW1fbW9kZSA9IGVuYWJsZTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUlRTX1RIUkVTSE9MRC4KKyAqLworc3RydWN0IG13bDhrX2NtZF9ydHNfdGhyZXNob2xkIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTE2IGFjdGlvbjsKKwlfX2xlMTYgdGhyZXNob2xkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgIHUxNiBhY3Rpb24sIHUxNiAqdGhyZXNob2xkKQoreworCXN0cnVjdCBtd2w4a19jbWRfcnRzX3RocmVzaG9sZCAqY21kOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9SVFNfVEhSRVNIT0xEKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoYWN0aW9uKTsKKwljbWQtPnRocmVzaG9sZCA9IGNwdV90b19sZTE2KCp0aHJlc2hvbGQpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9FRENBX1BBUkFNUy4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfZWRjYV9wYXJhbXMgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKworCS8qIFNlZSBNV0w4S19TRVRfRURDQV9YWFggYmVsb3cgKi8KKwlfX2xlMTYgYWN0aW9uOworCisJLyogVFggb3Bwb3J0dW5pdHkgaW4gdW5pdHMgb2YgMzIgdXMgKi8KKwlfX2xlMTYgdHhvcDsKKworCS8qIExvZyBleHBvbmVudCBvZiBtYXggY29udGVudGlvbiBwZXJpb2Q6IDAuLi4xNSovCisJX191OCBsb2dfY3dfbWF4OworCisJLyogTG9nIGV4cG9uZW50IG9mIG1pbiBjb250ZW50aW9uIHBlcmlvZDogMC4uLjE1ICovCisJX191OCBsb2dfY3dfbWluOworCisJLyogQWRhcHRpdmUgaW50ZXJmcmFtZSBzcGFjaW5nIGluIHVuaXRzIG9mIDMydXMgKi8KKwlfX3U4IGFpZnM7CisKKwkvKiBUWCBxdWV1ZSB0byBjb25maWd1cmUgKi8KKwlfX3U4IHR4cTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfR0VUX0VEQ0FfQUxMCTAKKyNkZWZpbmUgTVdMOEtfU0VUX0VEQ0FfQ1cJMHgwMQorI2RlZmluZSBNV0w4S19TRVRfRURDQV9UWE9QCTB4MDIKKyNkZWZpbmUgTVdMOEtfU0VUX0VEQ0FfQUlGUwkweDA0CisKKyNkZWZpbmUgTVdMOEtfU0VUX0VEQ0FfQUxMCShNV0w4S19TRVRfRURDQV9DVyB8IFwKKwkJCQkgTVdMOEtfU0VUX0VEQ0FfVFhPUCB8IFwKKwkJCQkgTVdMOEtfU0VUX0VEQ0FfQUlGUykKKworc3RhdGljIGludAorbXdsOGtfc2V0X2VkY2FfcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IHFudW0sCisJCV9fdTE2IGN3X21pbiwgX191MTYgY3dfbWF4LAorCQlfX3U4IGFpZnMsIF9fdTE2IHR4b3ApCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfZWRjYV9wYXJhbXMgKmNtZDsKKwl1MzIgbG9nX2N3X21pbiwgbG9nX2N3X21heDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxvZ19jd19taW4gPSBpbG9nMihjd19taW4rMSk7CisJbG9nX2N3X21heCA9IGlsb2cyKGN3X21heCsxKTsKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9FRENBX1BBUkFNUyk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfU0VUX0VEQ0FfQUxMKTsKKwljbWQtPnR4b3AgPSBjcHVfdG9fbGUxNih0eG9wKTsKKwljbWQtPmxvZ19jd19tYXggPSAodTgpbG9nX2N3X21heDsKKwljbWQtPmxvZ19jd19taW4gPSAodTgpbG9nX2N3X21pbjsKKwljbWQtPmFpZnMgPSBhaWZzOworCWNtZC0+dHhxID0gcW51bTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9GSU5BTElaRV9KT0lOLgorICovCisKKy8qIEZKIGJlYWNvbiBidWZmZXIgc2l6ZSBpcyBjb21waWxlZCBpbnRvIHRoZSBmaXJtd2FyZS4gICovCisjZGVmaW5lIE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4JMTI4CisKK3N0cnVjdCBtd2w4a19jbWRfZmluYWxpemVfam9pbiB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMiBzbGVlcF9pbnRlcnZhbDsJLyogTnVtYmVyIG9mIGJlYWNvbiBwZXJpb2RzIHRvIHNsZWVwICovCisJX191OCBiZWFjb25fZGF0YVtNV0w4S19GSl9CRUFDT05fTUFYTEVOXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfZmluYWxpemVfam9pbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZnJhbWUsCisJCQkJX191MTYgZnJhbWVsZW4sIF9fdTE2IGR0aW0pCit7CisJc3RydWN0IG13bDhrX2NtZF9maW5hbGl6ZV9qb2luICpjbWQ7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICpwYXlsb2FkID0gZnJhbWU7CisJdTE2IGhkcmxlbjsKKwl1MzIgcGF5bG9hZF9sZW47CisJaW50IHJjOworCisJaWYgKGZyYW1lID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9GSU5BTElaRV9KT0lOKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJaWYgKGR0aW0pCisJCWNtZC0+c2xlZXBfaW50ZXJ2YWwgPSBjcHVfdG9fbGUzMihkdGltKTsKKwllbHNlCisJCWNtZC0+c2xlZXBfaW50ZXJ2YWwgPSBjcHVfdG9fbGUzMigxKTsKKworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4ocGF5bG9hZC0+ZnJhbWVfY29udHJvbCk7CisKKwlwYXlsb2FkX2xlbiA9IGZyYW1lbGVuID4gaGRybGVuID8gZnJhbWVsZW4gLSBoZHJsZW4gOiAwOworCisJLyogWFhYIFRCRCBNaWdodCBqdXN0IGhhdmUgdG8gYWJvcnQgYW5kIHJldHVybiBhbiBlcnJvciAqLworCWlmIChwYXlsb2FkX2xlbiA+IE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4pCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKTogV0FSTklORzogSW5jb21wbGV0ZSBiZWFjb24gIgorCQkJInNlbnQgdG8gZmlybXdhcmUuIFN6PSV1IE1BWD0ldVxuIiwgX19mdW5jX18sCisJCQlwYXlsb2FkX2xlbiwgTVdMOEtfRkpfQkVBQ09OX01BWExFTik7CisKKwlwYXlsb2FkX2xlbiA9IHBheWxvYWRfbGVuID4gTVdMOEtfRkpfQkVBQ09OX01BWExFTiA/CisJCQkJTVdMOEtfRkpfQkVBQ09OX01BWExFTiA6IHBheWxvYWRfbGVuOworCisJaWYgKHBheWxvYWQgJiYgcGF5bG9hZF9sZW4pCisJCW1lbWNweShjbWQtPmJlYWNvbl9kYXRhLCAmcGF5bG9hZC0+dS5iZWFjb24sIHBheWxvYWRfbGVuKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfVVBEQVRFX1NUQURCLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKworCS8qIFNlZSBTVEFEQl9BQ1RJT05fVFlQRSAqLworCV9fbGUzMglhY3Rpb247CisKKwkvKiBQZWVyIE1BQyBhZGRyZXNzICovCisJX191OAlwZWVyX2FkZHJbSUVFRTgwMjExX0FERFJfTEVOXTsKKworCV9fbGUzMglyZXNlcnZlZDsKKworCS8qIFBlZXIgaW5mbyAtIHZhbGlkIGR1cmluZyBhZGQvdXBkYXRlLiAgKi8KKwlzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8JcGVlcl9pbmZvOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgX191MzIgYWN0aW9uKQoreworCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8gPSAmbXZfdmlmLT5ic3NfaW5mbzsKKwlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIgKmNtZDsKKwlzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8gKnBlZXJfaW5mbzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzID0gbXZfdmlmLT5sZWdhY3lfcmF0ZXM7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJaW50IHJjOworCV9fdTggY291bnQsICpyYXRlczsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9VUERBVEVfU1RBREIpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKGFjdGlvbik7CisJcGVlcl9pbmZvID0gJmNtZC0+cGVlcl9pbmZvOworCW1lbWNweShjbWQtPnBlZXJfYWRkciwgbXZfdmlmLT5ic3NpZCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBNV0w4S19TVEFfREJfQUREX0VOVFJZOgorCWNhc2UgTVdMOEtfU1RBX0RCX01PRElGWV9FTlRSWToKKwkJLyogQnVpbGQgcGVlcl9pbmZvIGJsb2NrICovCisJCXBlZXJfaW5mby0+cGVlcl90eXBlID0gTVdMOEtfUEVFUl9UWVBFX0FDQ0VTU1BPSU5UOworCQlwZWVyX2luZm8tPmJhc2ljX2NhcHMgPSBjcHVfdG9fbGUxNihpbmZvLT5hc3NvY19jYXBhYmlsaXR5KTsKKwkJcGVlcl9pbmZvLT5pbnRlcm9wID0gMTsKKwkJcGVlcl9pbmZvLT5hbXNkdV9lbmFibGVkID0gMDsKKworCQlyYXRlcyA9IHBlZXJfaW5mby0+bGVnYWN5X3JhdGVzOworCQlmb3IgKGNvdW50ID0gMCA7IGNvdW50IDwgbXZfdmlmLT5sZWdhY3lfbnJhdGVzOyBjb3VudCsrKQorCQkJcmF0ZXNbY291bnRdID0gYml0cmF0ZXNbY291bnRdLmh3X3ZhbHVlOworCisJCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJCWlmIChyYyA9PSAwKQorCQkJbXZfdmlmLT5wZWVyX2lkID0gcGVlcl9pbmZvLT5zdGF0aW9uX2lkOworCisJCWJyZWFrOworCisJY2FzZSBNV0w4S19TVEFfREJfREVMX0VOVFJZOgorCWNhc2UgTVdMOEtfU1RBX0RCX0ZMVVNIOgorCWRlZmF1bHQ6CisJCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJCWlmIChyYyA9PSAwKQorCQkJbXZfdmlmLT5wZWVyX2lkID0gMDsKKwkJYnJlYWs7CisJfQorCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX0FJRC4KKyAqLworI2RlZmluZSBJRUVFODAyMTFfT1BNT0RFX0RJU0FCTEVECQkJMHgwMAorI2RlZmluZSBJRUVFODAyMTFfT1BNT0RFX05PTl9NRU1CRVJfUFJPVF9NT0RFCQkweDAxCisjZGVmaW5lIElFRUU4MDIxMV9PUE1PREVfT05FXzIwTUhaX1NUQV9QUk9UX01PREUJMHgwMgorI2RlZmluZSBJRUVFODAyMTFfT1BNT0RFX0hUTUlYRURfUFJPVF9NT0RFCQkweDAzCisKKyNkZWZpbmUgTVdMOEtfUkFURV9JTkRFWF9NQVhfQVJSQVkJCQkxNAorCisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQJCQkweDAwCisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFHCQkJCTB4MDcKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfNDBNSFpfT05MWQkJMHgwMgorI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF9BTEwJCQkweDA2CisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfTUFTSwkJCQkweDA3CisKK3N0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3NldF9haWQgeworCXN0cnVjdAltd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYJYWlkOworCisJIC8qIEFQJ3MgTUFDIGFkZHJlc3MgKEJTU0lEKSAqLworCV9fdTgJYnNzaWRbSUVFRTgwMjExX0FERFJfTEVOXTsKKwlfX2xlMTYJcHJvdGVjdGlvbl9tb2RlOworCV9fdTgJc3VwcF9yYXRlc1tNV0w4S19SQVRFX0lOREVYX01BWF9BUlJBWV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfYWlkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8gPSAmbXZfdmlmLT5ic3NfaW5mbzsKKwlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zZXRfYWlkICpjbWQ7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlcyA9IG12X3ZpZi0+bGVnYWN5X3JhdGVzOworCWludCBjb3VudDsKKwl1MTYgcHJvdF9tb2RlOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfQUlEKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWlkID0gY3B1X3RvX2xlMTYoaW5mby0+YWlkKTsKKworCW1lbWNweShjbWQtPmJzc2lkLCBtdl92aWYtPmJzc2lkLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF9ESVNBQkxFRDsKKworCWlmIChpbmZvLT51c2VfY3RzX3Byb3QpIHsKKwkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMUc7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChpbmZvLT5odC5vcGVyYXRpb25fbW9kZSAmCisJCQlJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OKSB7CisJCWNhc2UgSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTl8yME1IWjoKKwkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUXzQwTUhaX09OTFk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OX05PTkhUX01JWEVEOgorCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfQUxMOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UX0RJU0FCTEVEOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwljbWQtPnByb3RlY3Rpb25fbW9kZSA9IGNwdV90b19sZTE2KHByb3RfbW9kZSk7CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBtdl92aWYtPmxlZ2FjeV9ucmF0ZXM7IGNvdW50KyspCisJCWNtZC0+c3VwcF9yYXRlc1tjb3VudF0gPSBiaXRyYXRlc1tjb3VudF0uaHdfdmFsdWU7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1JBVEUuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3JhdGVzZXQgeworCXN0cnVjdAltd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX3U4CWxlZ2FjeV9yYXRlc1tNV0w4S19SQVRFX0lOREVYX01BWF9BUlJBWV07CisKKwkvKiBCaXRtYXAgZm9yIHN1cHBvcnRlZCBNQ1MgY29kZXMuICAqLworCV9fdTgJbWNzX3NldFtNV0w4S19JRUVFX0xFR0FDWV9EQVRBX1JBVEVTXTsKKwlfX3U4CXJlc2VydmVkW01XTDhLX0lFRUVfTEVHQUNZX0RBVEFfUkFURVNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a191cGRhdGVfcmF0ZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgbXdsOGtfdmlmICptdl92aWYgPSBNV0w4S19WSUYodmlmKTsKKwlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9yYXRlc2V0ICpjbWQ7CisJc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlcyA9IG12X3ZpZi0+bGVnYWN5X3JhdGVzOworCWludCBjb3VudDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1JBVEUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBtdl92aWYtPmxlZ2FjeV9ucmF0ZXM7IGNvdW50KyspCisJCWNtZC0+bGVnYWN5X3JhdGVzW2NvdW50XSA9IGJpdHJhdGVzW2NvdW50XS5od192YWx1ZTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9VU0VfRklYRURfUkFURS4KKyAqLworI2RlZmluZSBNV0w4S19SQVRFX1RBQkxFX1NJWkUJOAorI2RlZmluZSBNV0w4S19VQ0FTVF9SQVRFCTAKKyNkZWZpbmUgTVdMOEtfTUNBU1RfUkFURQkxCisjZGVmaW5lIE1XTDhLX0JDQVNUX1JBVEUJMgorCisjZGVmaW5lIE1XTDhLX1VTRV9GSVhFRF9SQVRFCTB4MDAwMQorI2RlZmluZSBNV0w4S19VU0VfQVVUT19SQVRFCTB4MDAwMgorCitzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSB7CisJLyogU2V0IHRvIDEgaWYgSFQgcmF0ZSwgMCBpZiBsZWdhY3kuICAqLworCV9fbGUzMglpc19odF9yYXRlOworCisJLyogU2V0IHRvIDEgdG8gdXNlIHJldHJ5X2NvdW50IGZpZWxkLiAgKi8KKwlfX2xlMzIJZW5hYmxlX3JldHJ5OworCisJLyogU3BlY2lmaWVkIGxlZ2FjeSByYXRlIG9yIE1DUy4gICovCisJX19sZTMyCXJhdGU7CisKKwkvKiBOdW1iZXIgb2YgYWxsb3dlZCByZXRyaWVzLiAgKi8KKwlfX2xlMzIJcmV0cnlfY291bnQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgbXdsOGtfcmF0ZV90YWJsZSB7CisJLyogMSB0byBhbGxvdyBzcGVjaWZpZWQgcmF0ZSBhbmQgYmVsb3cgKi8KKwlfX2xlMzIJYWxsb3dfcmF0ZV9kcm9wOworCV9fbGUzMgludW1fcmF0ZXM7CisJc3RydWN0IG13bDhrX3JhdGVfZW50cnkgcmF0ZV9lbnRyeVtNV0w4S19SQVRFX1RBQkxFX1NJWkVdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZSB7CisJc3RydWN0CW13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMglhY3Rpb247CisJc3RydWN0IG13bDhrX3JhdGVfdGFibGUgcmF0ZV90YWJsZTsKKworCS8qIFVuaWNhc3QsIEJyb2FkY2FzdCBvciBNdWx0aWNhc3QgKi8KKwlfX2xlMzIJcmF0ZV90eXBlOworCV9fbGUzMglyZXNlcnZlZDE7CisJX19sZTMyCXJlc2VydmVkMjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCXUzMiBhY3Rpb24sIHUzMiByYXRlX3R5cGUsIHN0cnVjdCBtd2w4a19yYXRlX3RhYmxlICpyYXRlX3RhYmxlKQoreworCXN0cnVjdCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUgKmNtZDsKKwlpbnQgY291bnQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1VTRV9GSVhFRF9SQVRFKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihhY3Rpb24pOworCWNtZC0+cmF0ZV90eXBlID0gY3B1X3RvX2xlMzIocmF0ZV90eXBlKTsKKworCWlmIChyYXRlX3RhYmxlICE9IE5VTEwpIHsKKwkJLyogQ29weSBvdmVyIGVhY2ggZmllbGQgbWFudWFsbHkgc28KKwkJKiB0aGF0IGJpdGZsaXBwaW5nIGNhbiBiZSBkb25lCisJCSovCisJCWNtZC0+cmF0ZV90YWJsZS5hbGxvd19yYXRlX2Ryb3AgPQorCQkJCWNwdV90b19sZTMyKHJhdGVfdGFibGUtPmFsbG93X3JhdGVfZHJvcCk7CisJCWNtZC0+cmF0ZV90YWJsZS5udW1fcmF0ZXMgPQorCQkJCWNwdV90b19sZTMyKHJhdGVfdGFibGUtPm51bV9yYXRlcyk7CisKKwkJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgcmF0ZV90YWJsZS0+bnVtX3JhdGVzOyBjb3VudCsrKSB7CisJCQlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSAqZHN0ID0KKwkJCQkmY21kLT5yYXRlX3RhYmxlLnJhdGVfZW50cnlbY291bnRdOworCQkJc3RydWN0IG13bDhrX3JhdGVfZW50cnkgKnNyYyA9CisJCQkJJnJhdGVfdGFibGUtPnJhdGVfZW50cnlbY291bnRdOworCisJCQlkc3QtPmlzX2h0X3JhdGUgPSBjcHVfdG9fbGUzMihzcmMtPmlzX2h0X3JhdGUpOworCQkJZHN0LT5lbmFibGVfcmV0cnkgPSBjcHVfdG9fbGUzMihzcmMtPmVuYWJsZV9yZXRyeSk7CisJCQlkc3QtPnJhdGUgPSBjcHVfdG9fbGUzMihzcmMtPnJhdGUpOworCQkJZHN0LT5yZXRyeV9jb3VudCA9IGNwdV90b19sZTMyKHNyYy0+cmV0cnlfY291bnQpOworCQl9CisJfQorCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisKKy8qCisgKiBJbnRlcnJ1cHQgaGFuZGxpbmcuCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtd2w4a19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gZGV2X2lkOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IGlvcmVhZDMyKHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCWlvd3JpdGUzMih+c3RhdHVzLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKworCXN0YXR1cyAmPSBwcml2LT5pbnRfbWFzazsKKwlpZiAoIXN0YXR1cykKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfVFhfRE9ORSkKKwkJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKworCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX1JYX1JFQURZKSB7CisJCXdoaWxlIChyeHFfcHJvY2VzcyhodywgMCwgMSkpCisJCQlyeHFfcmVmaWxsKGh3LCAwLCAxKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9PUENfRE9ORSkgeworCQlpZiAocHJpdi0+aG9zdGNtZF93YWl0ICE9IE5VTEwpIHsKKwkJCWNvbXBsZXRlKHByaXYtPmhvc3RjbWRfd2FpdCk7CisJCQlwcml2LT5ob3N0Y21kX3dhaXQgPSBOVUxMOworCQl9CisJfQorCisJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfUVVFVUVfRU1QVFkpIHsKKwkJaWYgKCFwcml2LT5pbmNvbmZpZyAmJgorCQkJcHJpdi0+cmFkaW9fc3RhdGUgJiYKKwkJCW13bDhrX3R4cV9idXN5KHByaXYpKQorCQkJCW13bDhrX3R4X3N0YXJ0KHByaXYpOworCX0KKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCisvKgorICogQ29yZSBkcml2ZXIgb3BlcmF0aW9ucy4KKyAqLworc3RhdGljIGludCBtd2w4a190eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCBpbmRleCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCWludCByYzsKKworCWlmIChwcml2LT5jdXJyZW50X2NoYW5uZWwgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgVFggZnJhbWUgc2luY2UgcmFkaW8gIgorCQkgICAgICAgImRpc2FibGVkXG4iLCBwcml2LT5uYW1lKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCXJjID0gbXdsOGtfdHhxX3htaXQoaHcsIGluZGV4LCBza2IpOworCisJcmV0dXJuIHJjOworfQorCitzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgeworCS8qIEluaXRpYWxpemVkIGJ5IG13bDhrX3F1ZXVlX3dvcmsoKS4gICovCisJc3RydWN0IHdvcmtfc3RydWN0IHd0OworCisJLyogUmVxdWlyZWQgZmllbGQgcGFzc2VkIGluIHRvIG13bDhrX3F1ZXVlX3dvcmsoKS4gICovCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisKKwkvKiBSZXF1aXJlZCBmaWVsZCBwYXNzZWQgaW4gdG8gbXdsOGtfcXVldWVfd29yaygpLiAgKi8KKwlpbnQgKCp3ZnVuYykoc3RydWN0IHdvcmtfc3RydWN0ICp3KTsKKworCS8qIEluaXRpYWxpemVkIGJ5IG13bDhrX3F1ZXVlX3dvcmsoKS4gICovCisJc3RydWN0IGNvbXBsZXRpb24gKmNtZF93YWl0OworCisJLyogUmVzdWx0IGNvZGUuICAqLworCWludCByYzsKKworCS8qCisJICogT3B0aW9uYWwgZmllbGQuIFJlZmVyIHRvIGV4cGxhbmF0aW9uIG9mIE1XTDhLX1dRX1hYWF9YWFgKKwkgKiBmbGFncyBmb3IgZXhwbGFuYXRpb24uICBEZWZhdWx0cyB0byBNV0w4S19XUV9ERUZBVUxUX09QVElPTlMuCisJICovCisJdTMyIG9wdGlvbnM7CisKKwkvKiBPcHRpb25hbCBmaWVsZC4gIERlZmF1bHRzIHRvIE1XTDhLX0NPTkZJR19USU1FT1VUX01TLiAgKi8KKwl1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXM7CisKKwkvKiBPcHRpb25hbCBmaWVsZC4gIERlZmF1bHRzIHRvIE1XTDhLX1dRX1RYV0FJVF9BVFRFTVBUUy4gICovCisJdTMyIHR4d2FpdF9hdHRlbXB0czsKKworCS8qIE9wdGlvbmFsIGZpZWxkLiAgRGVmYXVsdHMgdG8gTVdMOEtfVFhXQUlUX01TLiAgKi8KKwl1MzIgdHhfdGltZW91dF9tczsKKwl1MzIgc3RlcDsKK307CisKKy8qIEZsYWdzIGNvbnRyb2xsaW5nIGJlaGF2aW9yIG9mIGNvbmZpZyBxdWV1ZSByZXF1ZXN0cyAqLworCisvKiBDYWxsZXIgc3BpbnMgd2hpbGUgd2FpdGluZyBmb3IgY29tcGxldGlvbi4gICovCisjZGVmaW5lIE1XTDhLX1dRX1NQSU4JCQkweDAwMDAwMDAxCisKKy8qIFdhaXQgZm9yIFRYIHF1ZXVlcyB0byBlbXB0eSBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIGNvbmZpZ3VyYXRpb24uICAqLworI2RlZmluZSBNV0w4S19XUV9UWF9XQUlUX0VNUFRZCQkweDAwMDAwMDAyCisKKy8qIFF1ZXVlIHJlcXVlc3QgYW5kIHJldHVybiBpbW1lZGlhdGVseS4gICovCisjZGVmaW5lIE1XTDhLX1dRX1BPU1RfUkVRVUVTVAkJMHgwMDAwMDAwNAorCisvKgorICogQ2FsbGVyIHNsZWVwcyBhbmQgd2FpdHMgZm9yIHRhc2sgY29tcGxldGUgbm90aWZpY2F0aW9uLgorICogRG8gbm90IHVzZSBpbiBhdG9taWMgY29udGV4dC4KKyAqLworI2RlZmluZSBNV0w4S19XUV9TTEVFUAkJCTB4MDAwMDAwMDgKKworLyogRnJlZSB3b3JrIHN0cnVjdCB3aGVuIHRhc2sgaXMgZG9uZS4gICovCisjZGVmaW5lIE1XTDhLX1dRX0ZSRUVfV09SS1NUUlVDVAkweDAwMDAwMDEwCisKKy8qCisgKiBDb25maWcgcmVxdWVzdCBpcyBxdWV1ZWQgYW5kIHJldHVybnMgdG8gY2FsbGVyIGltZWRpYXRlbHkuICBVc2UKKyAqIHRoaXMgaW4gYXRvbWljIGNvbnRleHQuIFdvcmsgc3RydWN0IGlzIGZyZWVkIGJ5IG13bDhrX3F1ZXVlX3dvcmsoKQorICogd2hlbiB0aGlzIGZsYWcgaXMgc2V0LgorICovCisjZGVmaW5lIE1XTDhLX1dRX1FVRVVFX09OTFkJKE1XTDhLX1dRX1BPU1RfUkVRVUVTVCB8IFwKKwkJCQkgTVdMOEtfV1FfRlJFRV9XT1JLU1RSVUNUKQorCisvKiBEZWZhdWx0IHdvcmsgcXVldWUgYmVoYXZpb3IgaXMgdG8gc2xlZXAgYW5kIHdhaXQgZm9yIHR4IGNvbXBsZXRpb24uICAqLworI2RlZmluZSBNV0w4S19XUV9ERUZBVUxUX09QVElPTlMgKE1XTDhLX1dRX1NMRUVQIHwgTVdMOEtfV1FfVFhfV0FJVF9FTVBUWSkKKworLyoKKyAqIERlZmF1bHQgY29uZmlnIHJlcXVlc3QgdGltZW91dC4gIEFkZCBhZGp1c3RtZW50cyB0byBtYWtlIHN1cmUgdGhlCisgKiBjb25maWcgdGhyZWFkIHdhaXRzIGxvbmcgZW5vdWdoIGZvciBib3RoIHR4IHdhaXQgYW5kIGNtZCB3YWl0IGJlZm9yZQorICogdGltaW5nIG91dC4KKyAqLworCisvKiBUaW1lIHRvIHdhaXQgZm9yIGFsbCBUWFFzIHRvIGRyYWluLiAgVFggRG9vcmJlbGwgaXMgcHJlc3NlZCBlYWNoIHRpbWUuICAqLworI2RlZmluZSBNV0w4S19UWFdBSVRfVElNRU9VVF9NUwkJMTAwMAorCisvKiBEZWZhdWx0IG51bWJlciBvZiBUWCB3YWl0IGF0dGVtcHRzLiAgKi8KKyNkZWZpbmUgTVdMOEtfV1FfVFhXQUlUX0FUVEVNUFRTCTQKKworLyogVG90YWwgdGltZSB0byB3YWl0IGZvciBUWFEgdG8gZHJhaW4uICAqLworI2RlZmluZSBNV0w4S19UWFdBSVRfTVMJCQkoTVdMOEtfVFhXQUlUX1RJTUVPVVRfTVMgKiBcCisJCQkJCQlNV0w4S19XUV9UWFdBSVRfQVRURU1QVFMpCisKKy8qIFNjaGVkdWxpbmcgc2xvcC4gICovCisjZGVmaW5lIE1XTDhLX09TX1NDSEVEVUxFX09WRVJIRUFEX01TCTIwMAorCisjZGVmaW5lIE1XTDhLX0NPTkZJR19USU1FT1VUX01TCShNV0w4S19DTURfVElNRU9VVF9NUyArIFwKKwkJCQkgTVdMOEtfVFhXQUlUX01TICsgXAorCQkJCSBNV0w4S19PU19TQ0hFRFVMRV9PVkVSSEVBRF9NUykKKworc3RhdGljIHZvaWQgbXdsOGtfY29uZmlnX3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCAqd29ya2VyID0gKHN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCAqKXd0OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5odzsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYyA9IDA7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlwcml2LT5pbmNvbmZpZyA9IHRydWU7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKworCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CisKKwkvKgorCSAqIFdhaXQgZm9yIGhvc3QgcXVldWVzIHRvIGRyYWluIGJlZm9yZSBkb2luZyBQSFkKKwkgKiByZWNvbmZpZ3VyYXRpb24uIFRoaXMgYXZvaWRzIGludGVycnVwdGluZyBhbnkgaW4tZmxpZ2h0CisJICogRE1BIHRyYW5zZmVycyB0byB0aGUgaGFyZHdhcmUuCisJICovCisJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1RYX1dBSVRfRU1QVFkpIHsKKwkJdTMyIHRpbWVvdXQ7CisJCXUzMiB0aW1lX3JlbWFpbmluZzsKKwkJdTMyIGl0ZXI7CisJCXUzMiB0eF93YWl0X2F0dGVtcHRzID0gd29ya2VyLT50eHdhaXRfYXR0ZW1wdHM7CisKKwkJdGltZV9yZW1haW5pbmcgPSB3b3JrZXItPnR4X3RpbWVvdXRfbXM7CisJCWlmICghdHhfd2FpdF9hdHRlbXB0cykKKwkJCXR4X3dhaXRfYXR0ZW1wdHMgPSAxOworCisJCXRpbWVvdXQgPSB3b3JrZXItPnR4X3RpbWVvdXRfbXMvdHhfd2FpdF9hdHRlbXB0czsKKwkJaWYgKCF0aW1lb3V0KQorCQkJdGltZW91dCA9IDE7CisKKwkJaXRlciA9IHR4X3dhaXRfYXR0ZW1wdHM7CisJCWRvIHsKKwkJCWludCB3YWl0X3RpbWU7CisKKwkJCWlmICh0aW1lX3JlbWFpbmluZyA+IHRpbWVvdXQpIHsKKwkJCQl0aW1lX3JlbWFpbmluZyAtPSB0aW1lb3V0OworCQkJCXdhaXRfdGltZSA9IHRpbWVvdXQ7CisJCQl9IGVsc2UKKwkJCQl3YWl0X3RpbWUgPSB0aW1lX3JlbWFpbmluZzsKKworCQkJaWYgKCF3YWl0X3RpbWUpCisJCQkJd2FpdF90aW1lID0gMTsKKworCQkJcmMgPSBtd2w4a190eF93YWl0X2VtcHR5KGh3LCB3YWl0X3RpbWUpOworCQkJaWYgKHJjKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0eHdhaXQgdGltZW91dD0ldW1zICIKKwkJCQkJIlJldHJ5OiV1LyV1XG4iLCBfX2Z1bmNfXywgdGltZW91dCwKKwkJCQkJdHhfd2FpdF9hdHRlbXB0cyAtIGl0ZXIgKyAxLAorCQkJCQl0eF93YWl0X2F0dGVtcHRzKTsKKworCQl9IHdoaWxlIChyYyAmJiAtLWl0ZXIpOworCisJCXJjID0gaXRlciA/IDAgOiAtRVRJTUVET1VUOworCX0KKwlpZiAoIXJjKQorCQlyYyA9IHdvcmtlci0+d2Z1bmMod3QpOworCisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJcHJpdi0+aW5jb25maWcgPSBmYWxzZTsKKwlpZiAocHJpdi0+cGVuZGluZ190eF9wa3RzICYmIHByaXYtPnJhZGlvX3N0YXRlKQorCQltd2w4a190eF9zdGFydChwcml2KTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhodyk7CisKKwl3b3JrZXItPnJjID0gcmM7CisJaWYgKHdvcmtlci0+b3B0aW9ucyAmIE1XTDhLX1dRX1NMRUVQKQorCQljb21wbGV0ZSh3b3JrZXItPmNtZF93YWl0KTsKKworCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9GUkVFX1dPUktTVFJVQ1QpCisJCWtmcmVlKHd0KTsKK30KKworc3RhdGljIGludCBtd2w4a19xdWV1ZV93b3JrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCAqd29ya2VyLAorCQkJCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cXVldWUsCisJCQkJaW50ICgqd2Z1bmMpKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKKwlpbnQgcmMgPSAwOworCisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY21kX3dhaXQpOworCisJaWYgKCF3b3JrZXItPnRpbWVvdXRfbXMpCisJCXdvcmtlci0+dGltZW91dF9tcyA9IE1XTDhLX0NPTkZJR19USU1FT1VUX01TOworCisJaWYgKCF3b3JrZXItPm9wdGlvbnMpCisJCXdvcmtlci0+b3B0aW9ucyA9IE1XTDhLX1dRX0RFRkFVTFRfT1BUSU9OUzsKKworCWlmICghd29ya2VyLT50eHdhaXRfYXR0ZW1wdHMpCisJCXdvcmtlci0+dHh3YWl0X2F0dGVtcHRzID0gTVdMOEtfV1FfVFhXQUlUX0FUVEVNUFRTOworCisJaWYgKCF3b3JrZXItPnR4X3RpbWVvdXRfbXMpCisJCXdvcmtlci0+dHhfdGltZW91dF9tcyA9IE1XTDhLX1RYV0FJVF9NUzsKKworCXdvcmtlci0+aHcgPSBodzsKKwl3b3JrZXItPmNtZF93YWl0ID0gJmNtZF93YWl0OworCXdvcmtlci0+cmMgPSAxOworCXdvcmtlci0+d2Z1bmMgPSB3ZnVuYzsKKworCUlOSVRfV09SSygmd29ya2VyLT53dCwgbXdsOGtfY29uZmlnX3RocmVhZCk7CisJcXVldWVfd29yayh3cXVldWUsICZ3b3JrZXItPnd0KTsKKworCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9QT1NUX1JFUVVFU1QpIHsKKwkJcmMgPSAwOworCX0gZWxzZSB7CisJCWlmICh3b3JrZXItPm9wdGlvbnMgJiBNV0w4S19XUV9TUElOKSB7CisJCQl0aW1lb3V0ID0gd29ya2VyLT50aW1lb3V0X21zOworCQkJd2hpbGUgKHRpbWVvdXQgJiYgKHdvcmtlci0+cmMgPiAwKSkgeworCQkJCW1kZWxheSgxKTsKKwkJCQl0aW1lb3V0LS07CisJCQl9CisJCX0gZWxzZSBpZiAod29ya2VyLT5vcHRpb25zICYgTVdMOEtfV1FfU0xFRVApCisJCQl0aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjbWRfd2FpdCwKKwkJCQltc2Vjc190b19qaWZmaWVzKHdvcmtlci0+dGltZW91dF9tcykpOworCisJCWlmICh0aW1lb3V0KQorCQkJcmMgPSB3b3JrZXItPnJjOworCQllbHNlIHsKKwkJCWNhbmNlbF93b3JrX3N5bmMoJndvcmtlci0+d3QpOworCQkJcmMgPSAtRVRJTUVET1VUOworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdHJ1Y3QgbXdsOGtfc3RhcnRfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworfTsKKworc3RhdGljIGludCBtd2w4a19zdGFydF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19zdGFydF93b3JrZXIgKndvcmtlciA9IChzdHJ1Y3QgbXdsOGtfc3RhcnRfd29ya2VyICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCByYyA9IDA7CisKKwlpZiAocHJpdi0+dmlmICE9IE5VTEwpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJLyogVHVybiBvbiByYWRpbyAqLworCWlmIChtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIE1XTDhLX1JBRElPX0VOQUJMRSkpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG13bDhrX3N0YXJ0X2V4aXQ7CisJfQorCisJLyogUHVyZ2UgVFgvUlggSFcgcXVldWVzICovCisJaWYgKG13bDhrX2NtZF9zZXRfcHJlX3NjYW4oaHcpKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9leGl0OworCX0KKworCWlmIChtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbihodywgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9leGl0OworCX0KKworCS8qIEVuYWJsZSBmaXJtd2FyZSByYXRlIGFkYXB0YXRpb24gKi8KKwlpZiAobXdsOGtfY21kX3NldHJhdGVhZGFwdG1vZGUoaHcsIDApKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9leGl0OworCX0KKworCS8qIERpc2FibGUgV01NLiBXTU0gZ2V0cyBlbmFibGVkIHdoZW4gc3RhY2sgc2VuZHMgV01NIHBhcm1zICovCisJaWYgKG13bDhrX3NldF93bW0oaHcsIE1XTDhLX1dNTV9ESVNBQkxFKSkgeworCQlyYyA9IC1FSU87CisJCWdvdG8gbXdsOGtfc3RhcnRfZXhpdDsKKwl9CisKKwkvKiBEaXNhYmxlIHNuaWZmZXIgbW9kZSAqLworCWlmIChtd2w4a19lbmFibGVfc25pZmZlcihodywgMCkpCisJCXJjID0gLUVJTzsKKworbXdsOGtfc3RhcnRfZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IG13bDhrX3N0YXJ0X3dvcmtlciAqd29ya2VyOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjOworCisJLyogRW5hYmxlIHR4IHJlY2xhaW0gdGFza2xldCAqLworCXRhc2tsZXRfZW5hYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJcmMgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsICZtd2w4a19pbnRlcnJ1cHQsCisJCQkgSVJRRl9TSEFSRUQsIE1XTDhLX05BTUUsIGh3KTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iLAorCQkgICAgICAgcHJpdi0+bmFtZSk7CisJCXJjID0gLUVJTzsKKwkJZ290byBtd2w4a19zdGFydF9kaXNhYmxlX3Rhc2tsZXQ7CisJfQorCisJLyogRW5hYmxlIGludGVycnVwdHMgKi8KKwlpb3dyaXRlMzIocHJpdi0+aW50X21hc2ssIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAod29ya2VyID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG13bDhrX3N0YXJ0X2Rpc2FibGVfaXJxOworCX0KKworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLCBtd2w4a19zdGFydF93dCk7CisJa2ZyZWUod29ya2VyKTsKKwlpZiAoIXJjKQorCQlyZXR1cm4gcmM7CisKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCisJcmMgPSAtRUlPOworCittd2w4a19zdGFydF9kaXNhYmxlX2lycToKKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisKK213bDhrX3N0YXJ0X2Rpc2FibGVfdGFza2xldDoKKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0cnVjdCBtd2w4a19zdG9wX3dvcmtlciB7CisJc3RydWN0IG13bDhrX3dvcmtfc3RydWN0IGhlYWRlcjsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfc3RvcF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19zdG9wX3dvcmtlciAqd29ya2VyID0gKHN0cnVjdCBtd2w4a19zdG9wX3dvcmtlciAqKXd0OworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gd29ya2VyLT5oZWFkZXIuaHc7CisJaW50IHJjOworCisJcmMgPSBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2woaHcsIE1XTDhLX1JBRElPX0RJU0FCTEUpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCWludCByYzsKKwlzdHJ1Y3QgbXdsOGtfc3RvcF93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCBpOworCisJaWYgKHByaXYtPnZpZiAhPSBOVUxMKQorCQlyZXR1cm47CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX3N0b3Bfd3QpOworCWtmcmVlKHdvcmtlcik7CisJaWYgKHJjID09IC1FVElNRURPVVQpCisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLworCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKworCS8qIFN0b3AgZmluYWxpemUgam9pbiB3b3JrZXIgKi8KKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5maW5hbGl6ZV9qb2luX3dvcmtlcik7CisJaWYgKHByaXYtPmJlYWNvbl9za2IgIT0gTlVMTCkKKwkJZGV2X2tmcmVlX3NrYihwcml2LT5iZWFjb25fc2tiKTsKKworCS8qIFN0b3AgdHggcmVjbGFpbSB0YXNrbGV0ICovCisJdGFza2xldF9kaXNhYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCisJLyogU3RvcCBjb25maWcgdGhyZWFkICovCisJZmx1c2hfd29ya3F1ZXVlKHByaXYtPmNvbmZpZ193cSk7CisKKwkvKiBSZXR1cm4gYWxsIHNrYnMgdG8gbWFjODAyMTEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCAxKTsKK30KKworc3RhdGljIGludCBtd2w4a19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3ZpZiAqbXdsOGtfdmlmOworCisJLyoKKwkgKiBXZSBvbmx5IHN1cHBvcnQgb25lIGFjdGl2ZSBpbnRlcmZhY2UgYXQgYSB0aW1lLgorCSAqLworCWlmIChwcml2LT52aWYgIT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qCisJICogV2Ugb25seSBzdXBwb3J0IG1hbmFnZWQgaW50ZXJmYWNlcyBmb3Igbm93LgorCSAqLworCWlmIChjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENsZWFuIG91dCBkcml2ZXIgcHJpdmF0ZSBhcmVhICovCisJbXdsOGtfdmlmID0gTVdMOEtfVklGKGNvbmYtPnZpZik7CisJbWVtc2V0KG13bDhrX3ZpZiwgMCwgc2l6ZW9mKCptd2w4a192aWYpKTsKKworCS8qIFNhdmUgdGhlIG1hYyBhZGRyZXNzICovCisJbWVtY3B5KG13bDhrX3ZpZi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBJRUVFODAyMTFfQUREUl9MRU4pOworCisJLyogQmFjayBwb2ludGVyIHRvIHBhcmVudCBjb25maWcgYmxvY2sgKi8KKwltd2w4a192aWYtPnByaXYgPSBwcml2OworCisJLyogU2V0dXAgaW5pdGlhbCBQSFkgcGFyYW1ldGVycyAqLworCW1lbWNweShtd2w4a192aWYtPmxlZ2FjeV9yYXRlcyAsCisJCXByaXYtPnJhdGVzLCBzaXplb2YobXdsOGtfdmlmLT5sZWdhY3lfcmF0ZXMpKTsKKwltd2w4a192aWYtPmxlZ2FjeV9ucmF0ZXMgPSBBUlJBWV9TSVpFKHByaXYtPnJhdGVzKTsKKworCS8qIFNldCBJbml0aWFsIHNlcXVlbmNlIG51bWJlciB0byB6ZXJvICovCisJbXdsOGtfdmlmLT5zZXFubyA9IDA7CisKKwlwcml2LT52aWYgPSBjb25mLT52aWY7CisJcHJpdi0+Y3VycmVudF9jaGFubmVsID0gTlVMTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtd2w4a19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlpZiAocHJpdi0+dmlmID09IE5VTEwpCisJCXJldHVybjsKKworCXByaXYtPnZpZiA9IE5VTEw7Cit9CisKK3N0cnVjdCBtd2w4a19jb25maWdfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworCXUzMiBjaGFuZ2VkOworfTsKKworc3RhdGljIGludCBtd2w4a19jb25maWdfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY29uZmlnX3dvcmtlciAqd29ya2VyID0KKwkJKHN0cnVjdCBtd2w4a19jb25maWdfd29ya2VyICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmaHctPmNvbmY7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmMgPSAwOworCisJaWYgKCFjb25mLT5yYWRpb19lbmFibGVkKSB7CisJCW13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRElTQUJMRSk7CisJCXByaXYtPmN1cnJlbnRfY2hhbm5lbCA9IE5VTEw7CisJCXJjID0gMDsKKwkJZ290byBtd2w4a19jb25maWdfZXhpdDsKKwl9CisKKwlpZiAobXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCBNV0w4S19SQURJT19FTkFCTEUpKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBtd2w4a19jb25maWdfZXhpdDsKKwl9CisKKwlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBjb25mLT5jaGFubmVsOworCisJaWYgKG13bDhrX2NtZF9zZXRfcmZfY2hhbm5lbChodywgY29uZi0+Y2hhbm5lbCkpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OworCX0KKworCWlmIChjb25mLT5wb3dlcl9sZXZlbCA+IDE4KQorCQljb25mLT5wb3dlcl9sZXZlbCA9IDE4OworCWlmIChtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyKGh3LCBjb25mLT5wb3dlcl9sZXZlbCkpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG13bDhrX2NvbmZpZ19leGl0OworCX0KKworCWlmIChtd2w4a19jbWRfbWltb19jb25maWcoaHcsIDB4NywgMHg3KSkKKwkJcmMgPSAtRUlOVkFMOworCittd2w4a19jb25maWdfZXhpdDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCkKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBtd2w4a19jb25maWdfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCXdvcmtlciA9IGt6YWxsb2Moc2l6ZW9mKCp3b3JrZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAod29ya2VyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJd29ya2VyLT5jaGFuZ2VkID0gY2hhbmdlZDsKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwgbXdsOGtfY29uZmlnX3d0KTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgdGltZWQgb3V0LlxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FSU5WQUw7CisJfQorCisJa2ZyZWUod29ya2VyKTsKKworCS8qCisJICogbWFjODAyMTEgd2lsbCBjcmFzaCBvbiBhbnl0aGluZyBvdGhlciB0aGFuIC1FSU5WQUwgb24KKwkgKiBlcnJvci4gTG9va3MgbGlrZSB3aXJlbGVzcyBleHRlbnNpb25zIHdoaWNoIGNhbGxzIG1hYzgwMjExCisJICogbWF5IGJlIHRoZSBhY3R1YWwgY3VscHJpdC4uLgorCSAqLworCXJldHVybiByYyA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IG13bDhrX2NvbmZpZ19pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9pZl9jb25mICpjb25mKQoreworCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCXUzMiBjaGFuZ2VkID0gY29uZi0+Y2hhbmdlZDsKKworCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQlNTSUQpCisJCW1lbWNweShtdl92aWYtPmJzc2lkLCBjb25mLT5ic3NpZCwgSUVFRTgwMjExX0FERFJfTEVOKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvOworCXUzMiBjaGFuZ2VkOworfTsKKworc3RhdGljIGludCBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd29ya2VyICp3b3JrZXIgPQorCQkoc3RydWN0IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd29ya2VyICopd3Q7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gd29ya2VyLT52aWY7CisJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyA9IHdvcmtlci0+aW5mbzsKKwl1MzIgY2hhbmdlZDsKKwlpbnQgcmM7CisKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCisJY2hhbmdlZCA9IHdvcmtlci0+Y2hhbmdlZDsKKwlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IGZhbHNlOworCisJaWYgKGluZm8tPmFzc29jKSB7CisJCW1lbWNweSgmbXdsOGtfdmlmLT5ic3NfaW5mbywgaW5mbywKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mKSk7CisKKwkJLyogSW5zdGFsbCByYXRlcyAqLworCQlpZiAobXdsOGtfdXBkYXRlX3JhdGVzZXQoaHcsIHZpZikpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKiBUdXJuIG9uIHJhdGUgYWRhcHRhdGlvbiAqLworCQlpZiAobXdsOGtfY21kX3VzZV9maXhlZF9yYXRlKGh3LCBNV0w4S19VU0VfQVVUT19SQVRFLAorCQkJTVdMOEtfVUNBU1RfUkFURSwgTlVMTCkpCisJCQlnb3RvIG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfZXhpdDsKKworCQkvKiBTZXQgcmFkaW8gcHJlYW1ibGUgKi8KKwkJaWYgKG13bDhrX3NldF9yYWRpb19wcmVhbWJsZShodywKKwkJCQlpbmZvLT51c2Vfc2hvcnRfcHJlYW1ibGUpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyogU2V0IHNsb3QgdGltZSAqLworCQlpZiAobXdsOGtfY21kX3NldF9zbG90KGh3LCBpbmZvLT51c2Vfc2hvcnRfc2xvdCA/CisJCQkJTVdMOEtfU0hPUlRfU0xPVFRJTUUgOiBNV0w4S19MT05HX1NMT1RUSU1FKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qIFVwZGF0ZSBwZWVyIHJhdGUgaW5mbyAqLworCQlpZiAobXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIoaHcsIHZpZiwKKwkJCQlNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZKSkKKwkJCWdvdG8gbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9leGl0OworCisJCS8qIFNldCBBSUQgKi8KKwkJaWYgKG13bDhrX2NtZF9zZXRfYWlkKGh3LCB2aWYpKQorCQkJZ290byBtd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ7CisKKwkJLyoKKwkJICogRmluYWxpemUgdGhlIGpvaW4uICBUZWxsIHJ4IGhhbmRsZXIgdG8gcHJvY2VzcworCQkgKiBuZXh0IGJlYWNvbiBmcm9tIG91ciBCU1NJRC4KKwkJICovCisJCW1lbWNweShwcml2LT5jYXB0dXJlX2Jzc2lkLAorCQkJCW13bDhrX3ZpZi0+YnNzaWQsIElFRUU4MDIxMV9BRERSX0xFTik7CisJCXByaXYtPmNhcHR1cmVfYmVhY29uID0gdHJ1ZTsKKwl9IGVsc2UgeworCQltd2w4a19jbWRfdXBkYXRlX3N0YV9kYihodywgdmlmLCBNV0w4S19TVEFfREJfREVMX0VOVFJZKTsKKwkJbWVtc2V0KCZtd2w4a192aWYtPmJzc19pbmZvLCAwLAorCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYpKTsKKwkJbWVtc2V0KG13bDhrX3ZpZi0+YnNzaWQsIDAsIElFRUU4MDIxMV9BRERSX0xFTik7CisJfQorCittd2w4a19ic3NfaW5mb19jaGFuZ2VkX2V4aXQ6CisJcmMgPSAwOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgbXdsOGtfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCisJCQkJICAgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IG13bDhrX2Jzc19pbmZvX2NoYW5nZWRfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgcmM7CisKKwlpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgPT0gMCkKKwkJcmV0dXJuOworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJd29ya2VyLT52aWYgPSB2aWY7CisJd29ya2VyLT5pbmZvID0gaW5mbzsKKwl3b3JrZXItPmNoYW5nZWQgPSBjaGFuZ2VkOworCXJjID0gbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLAorCQkJICAgICAgcHJpdi0+Y29uZmlnX3dxLAorCQkJICAgICAgbXdsOGtfYnNzX2luZm9fY2hhbmdlZF93dCk7CisJa2ZyZWUod29ya2VyKTsKKwlpZiAocmMgPT0gLUVUSU1FRE9VVCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworfQorCitzdHJ1Y3QgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3M7CisJdW5zaWduZWQgaW50ICp0b3RhbF9mbGFnczsKKwlpbnQgbWNfY291bnQ7CisJc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jbGlzdDsKK307CisKKyNkZWZpbmUgTVdMOEtfU1VQUE9SVEVEX0lGX0ZMQUdTCUZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDCisKK3N0YXRpYyBpbnQgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3dvcmtlciAqd29ya2VyID0KKwkJKHN0cnVjdCBtd2w4a19jb25maWd1cmVfZmlsdGVyX3dvcmtlciAqKXd0OworCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncyA9IHdvcmtlci0+Y2hhbmdlZF9mbGFnczsKKwl1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzID0gd29ya2VyLT50b3RhbF9mbGFnczsKKwlpbnQgbWNfY291bnQgPSB3b3JrZXItPm1jX2NvdW50OworCXN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QgPSB3b3JrZXItPm1jbGlzdDsKKworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmOworCWludCByYyA9IDA7CisKKwlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSB7CisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfQkNOX1BSQlJFU1BfUFJPTUlTQykKKwkJCXJjID0gbXdsOGtfY21kX3NldF9wcmVfc2Nhbihodyk7CisJCWVsc2UgeworCQkJbXZfdmlmID0gTVdMOEtfVklGKHByaXYtPnZpZik7CisJCQlyYyA9IG13bDhrX2NtZF9zZXRfcG9zdF9zY2FuKGh3LCBtdl92aWYtPmJzc2lkKTsKKwkJfQorCX0KKworCWlmIChyYykKKwkJZ290byBtd2w4a19jb25maWd1cmVfZmlsdGVyX2V4aXQ7CisJaWYgKG1jX2NvdW50KSB7CisJCW1jX2NvdW50ID0gbWNfY291bnQgPCBwcml2LT5udW1fbWNhZGRycyA/CisJCQkJbWNfY291bnQgOiBwcml2LT5udW1fbWNhZGRyczsKKwkJcmMgPSBtd2w4a19jbWRfbWFjX211bHRpY2FzdF9hZHIoaHcsIG1jX2NvdW50LCBtY2xpc3QpOworCQlpZiAocmMpCisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSIlcygpRXJyb3Igc2V0dGluZyBtdWx0aWNhc3QgYWRkcmVzc2VzXG4iLAorCQkJX19mdW5jX18pOworCX0KKworbXdsOGtfY29uZmlndXJlX2ZpbHRlcl9leGl0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgbXdsOGtfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgICB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCQkgICB1bnNpZ25lZCBpbnQgKnRvdGFsX2ZsYWdzLAorCQkJCSAgIGludCBtY19jb3VudCwKKwkJCQkgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNsaXN0KQoreworCisJc3RydWN0IG13bDhrX2NvbmZpZ3VyZV9maWx0ZXJfd29ya2VyICp3b3JrZXI7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCS8qIENsZWFyIHVuc3VwcG9ydGVkIGZlYXR1cmUgZmxhZ3MgKi8KKwkqdG90YWxfZmxhZ3MgJj0gTVdMOEtfU1VQUE9SVEVEX0lGX0ZMQUdTOworCisJaWYgKCEoY2hhbmdlZF9mbGFncyAmIE1XTDhLX1NVUFBPUlRFRF9JRl9GTEFHUykgJiYgIW1jX2NvdW50KQorCQlyZXR1cm47CisKKwl3b3JrZXIgPSBremFsbG9jKHNpemVvZigqd29ya2VyKSwgR0ZQX0FUT01JQyk7CisJaWYgKHdvcmtlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl3b3JrZXItPmhlYWRlci5vcHRpb25zID0gTVdMOEtfV1FfUVVFVUVfT05MWSB8IE1XTDhLX1dRX1RYX1dBSVRfRU1QVFk7CisJd29ya2VyLT5jaGFuZ2VkX2ZsYWdzID0gY2hhbmdlZF9mbGFnczsKKwl3b3JrZXItPnRvdGFsX2ZsYWdzID0gdG90YWxfZmxhZ3M7CisJd29ya2VyLT5tY19jb3VudCA9IG1jX2NvdW50OworCXdvcmtlci0+bWNsaXN0ID0gbWNsaXN0OworCisJbXdsOGtfcXVldWVfd29yayhodywgJndvcmtlci0+aGVhZGVyLCBwcml2LT5jb25maWdfd3EsCisJCQkgbXdsOGtfY29uZmlndXJlX2ZpbHRlcl93dCk7Cit9CisKK3N0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJdTMyIHZhbHVlOworfTsKKworc3RhdGljIGludCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93dChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnd0KQoreworCXN0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgKndvcmtlciA9CisJCShzdHJ1Y3QgbXdsOGtfc2V0X3J0c190aHJlc2hvbGRfd29ya2VyICopd3Q7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHdvcmtlci0+aGVhZGVyLmh3OworCXUxNiB0aHJlc2hvbGQgPSAodTE2KSh3b3JrZXItPnZhbHVlKTsKKwlpbnQgcmM7CisKKwlyYyA9IG13bDhrX3J0c190aHJlc2hvbGQoaHcsIE1XTDhLX0NNRF9TRVQsICZ0aHJlc2hvbGQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCit7CisJaW50IHJjOworCXN0cnVjdCBtd2w4a19zZXRfcnRzX3RocmVzaG9sZF93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3b3JrZXItPnZhbHVlID0gdmFsdWU7CisKKwlyYyA9IG13bDhrX3F1ZXVlX3dvcmsoaHcsICZ3b3JrZXItPmhlYWRlciwKKwkJCSAgICAgIHByaXYtPmNvbmZpZ193cSwKKwkJCSAgICAgIG13bDhrX3NldF9ydHNfdGhyZXNob2xkX3d0KTsKKwlrZnJlZSh3b3JrZXIpOworCisJaWYgKHJjID09IC1FVElNRURPVVQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdHJ1Y3QgbXdsOGtfY29uZl90eF93b3JrZXIgeworCXN0cnVjdCBtd2w4a193b3JrX3N0cnVjdCBoZWFkZXI7CisJdTE2IHF1ZXVlOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXM7Cit9OworCitzdGF0aWMgaW50IG13bDhrX2NvbmZfdHhfd3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3dCkKK3sKKwlzdHJ1Y3QgbXdsOGtfY29uZl90eF93b3JrZXIgKndvcmtlciA9CisJKHN0cnVjdCBtd2w4a19jb25mX3R4X3dvcmtlciAqKXd0OworCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3b3JrZXItPmhlYWRlci5odzsKKwl1MTYgcXVldWUgPSB3b3JrZXItPnF1ZXVlOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMgPSB3b3JrZXItPnBhcmFtczsKKworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJjID0gMDsKKworCWlmIChwcml2LT53bW1fbW9kZSA9PSBNV0w4S19XTU1fRElTQUJMRSkKKwkJaWYgKG13bDhrX3NldF93bW0oaHcsIE1XTDhLX1dNTV9FTkFCTEUpKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIG13bDhrX2NvbmZfdHhfZXhpdDsKKwl9CisKKwlpZiAobXdsOGtfc2V0X2VkY2FfcGFyYW1zKGh3LCBHRVRfVFhRKHF1ZXVlKSwgcGFyYW1zLT5jd19taW4sCisJCXBhcmFtcy0+Y3dfbWF4LCBwYXJhbXMtPmFpZnMsIHBhcmFtcy0+dHhvcCkpCisJCQlyYyA9IC1FSU5WQUw7Cittd2w4a19jb25mX3R4X2V4aXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKKwkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQoreworCWludCByYzsKKwlzdHJ1Y3QgbXdsOGtfY29uZl90eF93b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3b3JrZXItPnF1ZXVlID0gcXVldWU7CisJd29ya2VyLT5wYXJhbXMgPSBwYXJhbXM7CisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX2NvbmZfdHhfd3QpOworCWtmcmVlKHdvcmtlcik7CisJaWYgKHJjID09IC1FVElNRURPVVQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlcygpIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FSU5WQUw7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBtd2w4a19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a190eF9xdWV1ZSAqdHhxOworCWludCBpbmRleDsKKworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTVdMOEtfVFhfUVVFVUVTOyBpbmRleCsrKSB7CisJCXR4cSA9IHByaXYtPnR4cSArIGluZGV4OworCQltZW1jcHkoJnN0YXRzW2luZGV4XSwgJnR4cS0+dHhfc3RhdHMsCisJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cykpOworCX0KKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBtd2w4a19nZXRfc3RhdHNfd29ya2VyIHsKKwlzdHJ1Y3QgbXdsOGtfd29ya19zdHJ1Y3QgaGVhZGVyOworCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0czsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfZ2V0X3N0YXRzX3d0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd3QpCit7CisJc3RydWN0IG13bDhrX2dldF9zdGF0c193b3JrZXIgKndvcmtlciA9CisJCShzdHJ1Y3QgbXdsOGtfZ2V0X3N0YXRzX3dvcmtlciAqKXd0OworCisJcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQod29ya2VyLT5oZWFkZXIuaHcsIHdvcmtlci0+c3RhdHMpOworfQorCitzdGF0aWMgaW50IG13bDhrX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKK3sKKwlpbnQgcmM7CisJc3RydWN0IG13bDhrX2dldF9zdGF0c193b3JrZXIgKndvcmtlcjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJd29ya2VyID0ga3phbGxvYyhzaXplb2YoKndvcmtlciksIEdGUF9LRVJORUwpOworCWlmICh3b3JrZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3b3JrZXItPnN0YXRzID0gc3RhdHM7CisJcmMgPSBtd2w4a19xdWV1ZV93b3JrKGh3LCAmd29ya2VyLT5oZWFkZXIsCisJCQkgICAgICBwcml2LT5jb25maWdfd3EsIG13bDhrX2dldF9zdGF0c193dCk7CisKKwlrZnJlZSh3b3JrZXIpOworCWlmIChyYyA9PSAtRVRJTUVET1VUKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB0aW1lZCBvdXRcbiIsIF9fZnVuY19fKTsKKwkJcmMgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIG13bDhrX29wcyA9IHsKKwkudHgJCQk9IG13bDhrX3R4LAorCS5zdGFydAkJCT0gbXdsOGtfc3RhcnQsCisJLnN0b3AJCQk9IG13bDhrX3N0b3AsCisJLmFkZF9pbnRlcmZhY2UJCT0gbXdsOGtfYWRkX2ludGVyZmFjZSwKKwkucmVtb3ZlX2ludGVyZmFjZQk9IG13bDhrX3JlbW92ZV9pbnRlcmZhY2UsCisJLmNvbmZpZwkJCT0gbXdsOGtfY29uZmlnLAorCS5jb25maWdfaW50ZXJmYWNlCT0gbXdsOGtfY29uZmlnX2ludGVyZmFjZSwKKwkuYnNzX2luZm9fY2hhbmdlZAk9IG13bDhrX2Jzc19pbmZvX2NoYW5nZWQsCisJLmNvbmZpZ3VyZV9maWx0ZXIJPSBtd2w4a19jb25maWd1cmVfZmlsdGVyLAorCS5zZXRfcnRzX3RocmVzaG9sZAk9IG13bDhrX3NldF9ydHNfdGhyZXNob2xkLAorCS5jb25mX3R4CQk9IG13bDhrX2NvbmZfdHgsCisJLmdldF90eF9zdGF0cwkJPSBtd2w4a19nZXRfdHhfc3RhdHMsCisJLmdldF9zdGF0cwkJPSBtd2w4a19nZXRfc3RhdHMsCit9OworCitzdGF0aWMgdm9pZCBtd2w4a190eF9yZWNsYWltX2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCWludCBpOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gKHN0cnVjdCBpZWVlODAyMTFfaHcgKikgZGF0YTsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCAwKTsKKworCWlmIChwcml2LT50eF93YWl0ICE9IE5VTEwpIHsKKwkJaW50IGNvdW50ID0gbXdsOGtfdHhxX2J1c3kocHJpdik7CisJCWlmIChjb3VudCA9PSAwKSB7CisJCQljb21wbGV0ZShwcml2LT50eF93YWl0KTsKKwkJCXByaXYtPnR4X3dhaXQgPSBOVUxMOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgbXdsOGtfZmluYWxpemVfam9pbl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtd2w4a19wcml2LCBmaW5hbGl6ZV9qb2luX3dvcmtlcik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHByaXYtPmJlYWNvbl9za2I7CisJdTggZHRpbSA9IChNV0w4S19WSUYocHJpdi0+dmlmKSktPmJzc19pbmZvLmR0aW1fcGVyaW9kOworCisJbXdsOGtfZmluYWxpemVfam9pbihwcml2LT5odywgc2tiLT5kYXRhLCBza2ItPmxlbiwgZHRpbSk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCisJcHJpdi0+YmVhY29uX3NrYiA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG13bDhrX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXY7CisJREVDTEFSRV9NQUNfQlVGKG1hYyk7CisJaW50IHJjOworCWludCBpOworCXU4ICpmdzsKKworCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBlbmFibGUgbmV3IFBDSSBkZXZpY2VcbiIsCisJCSAgICAgICBNV0w4S19OQU1FKTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBNV0w4S19OQU1FKTsKKwlpZiAocmMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iLAorCQkgICAgICAgTVdMOEtfTkFNRSk7CisJCXJldHVybiByYzsKKwl9CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCWh3ID0gaWVlZTgwMjExX2FsbG9jX2h3KHNpemVvZigqcHJpdiksICZtd2w4a19vcHMpOworCWlmIChodyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGllZWU4MDIxMSBhbGxvYyBmYWlsZWRcbiIsIE1XTDhLX05BTUUpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfcmVnOworCX0KKworCXByaXYgPSBody0+cHJpdjsKKwlwcml2LT5odyA9IGh3OworCXByaXYtPnBkZXYgPSBwZGV2OworCXByaXYtPmhvc3RjbWRfd2FpdCA9IE5VTEw7CisJcHJpdi0+dHhfd2FpdCA9IE5VTEw7CisJcHJpdi0+aW5jb25maWcgPSBmYWxzZTsKKwlwcml2LT53ZXBfZW5hYmxlZCA9IDA7CisJcHJpdi0+d21tX21vZGUgPSBmYWxzZTsKKwlwcml2LT5wZW5kaW5nX3R4X3BrdHMgPSAwOworCXN0cm5jcHkocHJpdi0+bmFtZSwgTVdMOEtfTkFNRSwgc2l6ZW9mKHByaXYtPm5hbWUpKTsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT5md19sb2NrKTsKKworCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmcGRldi0+ZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgaHcpOworCisJcHJpdi0+cmVncyA9IHBjaV9pb21hcChwZGV2LCAxLCAweDEwMDAwKTsKKwlpZiAocHJpdi0+cmVncyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgZGV2aWNlIG1lbW9yeVxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCisJbWVtY3B5KHByaXYtPmNoYW5uZWxzLCBtd2w4a19jaGFubmVscywgc2l6ZW9mKG13bDhrX2NoYW5uZWxzKSk7CisJcHJpdi0+YmFuZC5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwlwcml2LT5iYW5kLmNoYW5uZWxzID0gcHJpdi0+Y2hhbm5lbHM7CisJcHJpdi0+YmFuZC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShtd2w4a19jaGFubmVscyk7CisJcHJpdi0+YmFuZC5iaXRyYXRlcyA9IHByaXYtPnJhdGVzOworCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUobXdsOGtfcmF0ZXMpOworCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZDsKKworCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+cmF0ZXMpICE9IHNpemVvZihtd2w4a19yYXRlcykpOworCW1lbWNweShwcml2LT5yYXRlcywgbXdsOGtfcmF0ZXMsIHNpemVvZihtd2w4a19yYXRlcykpOworCisJLyoKKwkgKiBFeHRyYSBoZWFkcm9vbSBpcyB0aGUgc2l6ZSBvZiB0aGUgcmVxdWlyZWQgRE1BIGhlYWRlcgorCSAqIG1pbnVzIHRoZSBzaXplIG9mIHRoZSBzbWFsbGVzdCA4MDIuMTEgZnJhbWUgKENUUyBmcmFtZSkuCisJICovCisJaHctPmV4dHJhX3R4X2hlYWRyb29tID0KKwkJc2l6ZW9mKHN0cnVjdCBtd2w4a19kbWFfZGF0YSkgLSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jdHMpOworCisJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDsKKworCWh3LT5xdWV1ZXMgPSBNV0w4S19UWF9RVUVVRVM7CisKKwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CisJCUJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB8IEJJVChOTDgwMjExX0lGVFlQRV9NT05JVE9SKTsKKworCS8qIFNldCByc3NpIGFuZCBub2lzZSB2YWx1ZXMgdG8gZEJtICovCisJaHctPmZsYWdzIHw9IChJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8IElFRUU4MDIxMV9IV19OT0lTRV9EQk0pOworCWh3LT52aWZfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtd2w4a192aWYpOworCXByaXYtPnZpZiA9IE5VTEw7CisKKwkvKiBTZXQgZGVmYXVsdCByYWRpbyBzdGF0ZSBhbmQgcHJlYW1ibGUgKi8KKwlwcml2LT5yYWRpb19wcmVhbWJsZSA9IE1XTDhLX1JBRElPX0RFRkFVTFRfUFJFQU1CTEU7CisJcHJpdi0+cmFkaW9fc3RhdGUgPSBNV0w4S19SQURJT19ESVNBQkxFOworCisJLyogRmluYWxpemUgam9pbiB3b3JrZXIgKi8KKwlJTklUX1dPUksoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyLCBtd2w4a19maW5hbGl6ZV9qb2luX3dvcmtlcik7CisKKwkvKiBUWCByZWNsYWltIHRhc2tsZXQgKi8KKwl0YXNrbGV0X2luaXQoJnByaXYtPnR4X3JlY2xhaW1fdGFzaywKKwkJCW13bDhrX3R4X3JlY2xhaW1faGFuZGxlciwgKHVuc2lnbmVkIGxvbmcpaHcpOworCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKworCS8qIENvbmZpZyB3b3JrdGhyZWFkICovCisJcHJpdi0+Y29uZmlnX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm13bDhrX2NvbmZpZyIpOworCWlmIChwcml2LT5jb25maWdfd3EgPT0gTlVMTCkKKwkJZ290byBlcnJfaW91bm1hcDsKKworCS8qIFBvd2VyIG1hbmFnZW1lbnQgY29va2llICovCisJcHJpdi0+Y29va2llID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgNCwgJnByaXYtPmNvb2tpZV9kbWEpOworCWlmIChwcml2LT5jb29raWUgPT0gTlVMTCkKKwkJZ290byBlcnJfaW91bm1hcDsKKworCXJjID0gbXdsOGtfcnhxX2luaXQoaHcsIDApOworCWlmIChyYykKKwkJZ290byBlcnJfaW91bm1hcDsKKwlyeHFfcmVmaWxsKGh3LCAwLCBJTlRfTUFYKTsKKworCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykgeworCQlyYyA9IG13bDhrX3R4cV9pbml0KGh3LCBpKTsKKwkJaWYgKHJjKQorCQkJZ290byBlcnJfZnJlZV9xdWV1ZXM7CisJfQorCisJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCXByaXYtPmludF9tYXNrID0gMDsKKwlpb3dyaXRlMzIocHJpdi0+aW50X21hc2ssIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX0NMRUFSX1NFTCk7CisJaW93cml0ZTMyKDB4ZmZmZmZmZmYsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVNfTUFTSyk7CisKKwlyYyA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgJm13bDhrX2ludGVycnVwdCwKKwkJCSBJUlFGX1NIQVJFRCwgTVdMOEtfTkFNRSwgaHcpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIsCisJCSAgICAgICBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfZnJlZV9xdWV1ZXM7CisJfQorCisJLyogUmVzZXQgZmlybXdhcmUgYW5kIGhhcmR3YXJlICovCisJbXdsOGtfaHdfcmVzZXQocHJpdik7CisKKwkvKiBBc2sgdXNlcmxhbmQgaG90cGx1ZyBkYWVtb24gZm9yIHRoZSBkZXZpY2UgZmlybXdhcmUgKi8KKwlyYyA9IG13bDhrX3JlcXVlc3RfZmlybXdhcmUocHJpdiwgKHUzMilpZC0+ZHJpdmVyX2RhdGEpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGaXJtd2FyZSBmaWxlcyBub3QgZm91bmRcbiIsIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwkvKiBMb2FkIGZpcm13YXJlIGludG8gaGFyZHdhcmUgKi8KKwlyYyA9IG13bDhrX2xvYWRfZmlybXdhcmUocHJpdik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBzdGFydCBmaXJtd2FyZVxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJfQorCisJLyogUmVjbGFpbSBtZW1vcnkgb25jZSBmaXJtd2FyZSBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkICovCisJbXdsOGtfcmVsZWFzZV9maXJtd2FyZShwcml2KTsKKworCS8qCisJICogVGVtcG9yYXJpbHkgZW5hYmxlIGludGVycnVwdHMuICBJbml0aWFsIGZpcm13YXJlIGhvc3QKKwkgKiBjb21tYW5kcyB1c2UgaW50ZXJydXB0cyBhbmQgYXZvaWRzIHBvbGxpbmcuICBEaXNhYmxlCisJICogaW50ZXJydXB0cyB3aGVuIGRvbmUuCisJICovCisJcHJpdi0+aW50X21hc2sgfD0gTVdMOEtfQTJIX0VWRU5UUzsKKworCWlvd3JpdGUzMihwcml2LT5pbnRfbWFzaywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCisJLyogR2V0IGNvbmZpZyBkYXRhLCBtYWMgYWRkcnMgZXRjICovCisJcmMgPSBtd2w4a19jbWRfZ2V0X2h3X3NwZWMoaHcpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgaW5pdGlhbGlzZSBmaXJtd2FyZVxuIiwgcHJpdi0+bmFtZSk7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJfQorCisJLyogVHVybiByYWRpbyBvZmYgKi8KKwlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgTVdMOEtfUkFESU9fRElTQUJMRSk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBkaXNhYmxlXG4iLCBwcml2LT5uYW1lKTsKKwkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwl9CisKKwkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KKwlzcGluX2xvY2tfaXJxKCZwcml2LT50eF9sb2NrKTsKKwlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CisKKwlyYyA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhodyk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBkZXZpY2VcbiIsIHByaXYtPm5hbWUpOworCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCX0KKworCWZ3ID0gKHU4ICopJnByaXYtPmZ3X3JldjsKKwlwcmludGsoS0VSTl9JTkZPICIlczogODhXJXUgJXNcbiIsIHByaXYtPm5hbWUsIHByaXYtPnBhcnRfbnVtLAorCQlNV0w4S19ERVNDKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogRHJpdmVyIFZlcjolcyAgRmlybXdhcmUgVmVyOiV1LiV1LiV1LiV1XG4iLAorCQlwcml2LT5uYW1lLCBNV0w4S19WRVJTSU9OLCBmd1szXSwgZndbMl0sIGZ3WzFdLCBmd1swXSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1BQyBBZGRyZXNzOiAlc1xuIiwgcHJpdi0+bmFtZSwKKwkgICAgICAgcHJpbnRfbWFjKG1hYywgaHctPndpcGh5LT5wZXJtX2FkZHIpKTsKKworCXJldHVybiAwOworCitlcnJfc3RvcF9maXJtd2FyZToKKwltd2w4a19od19yZXNldChwcml2KTsKKwltd2w4a19yZWxlYXNlX2Zpcm13YXJlKHByaXYpOworCitlcnJfZnJlZV9pcnE6CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOworCitlcnJfZnJlZV9xdWV1ZXM6CisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCQltd2w4a190eHFfZGVpbml0KGh3LCBpKTsKKwltd2w4a19yeHFfZGVpbml0KGh3LCAwKTsKKworZXJyX2lvdW5tYXA6CisJaWYgKHByaXYtPmNvb2tpZSAhPSBOVUxMKQorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBkZXYsIDQsCisJCQkJcHJpdi0+Y29va2llLCBwcml2LT5jb29raWVfZG1hKTsKKworCWlmIChwcml2LT5yZWdzICE9IE5VTEwpCisJCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPnJlZ3MpOworCisJaWYgKHByaXYtPmNvbmZpZ193cSAhPSBOVUxMKQorCQlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT5jb25maWdfd3EpOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKKworZXJyX2ZyZWVfcmVnOgorCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbXdsOGtfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXByaW50ayhLRVJOX0VSUiAiPT09PiVzKCV1KVxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG13bDhrX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2OworCWludCBpOworCisJaWYgKGh3ID09IE5VTEwpCisJCXJldHVybjsKKwlwcml2ID0gaHctPnByaXY7CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOworCisJLyogUmVtb3ZlIHR4IHJlY2xhaW0gdGFza2xldCAqLworCXRhc2tsZXRfa2lsbCgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKworCS8qIFN0b3AgY29uZmlnIHRocmVhZCAqLworCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPmNvbmZpZ193cSk7CisKKwkvKiBTdG9wIGhhcmR3YXJlICovCisJbXdsOGtfaHdfcmVzZXQocHJpdik7CisKKwkvKiBSZXR1cm4gYWxsIHNrYnMgdG8gbWFjODAyMTEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCisJCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCAxKTsKKworCWllZWU4MDIxMV91bnJlZ2lzdGVyX2h3KGh3KTsKKworCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKKwkJbXdsOGtfdHhxX2RlaW5pdChodywgaSk7CisKKwltd2w4a19yeHFfZGVpbml0KGh3LCAwKTsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgNCwKKwkJCQlwcml2LT5jb29raWUsIHByaXYtPmNvb2tpZV9kbWEpOworCisJcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+cmVncyk7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWllZWU4MDIxMV9mcmVlX2h3KGh3KTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG13bDhrX2RyaXZlciA9IHsKKwkubmFtZQkJPSBNV0w4S19OQU1FLAorCS5pZF90YWJsZQk9IG13bDhrX3RhYmxlLAorCS5wcm9iZQkJPSBtd2w4a19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG13bDhrX3JlbW92ZSksCisJLnNodXRkb3duCT0gX19kZXZleGl0X3AobXdsOGtfc2h1dGRvd24pLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXdsOGtfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtd2w4a19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbXdsOGtfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbXdsOGtfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobXdsOGtfaW5pdCk7Cittb2R1bGVfZXhpdChtd2w4a19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYwppbmRleCAyNGNhZWM2Li5kNjNjODk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCkBAIC0yMTAsMTAgKzIxMCw2IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgbmV0d2F2ZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyB2b2lkIG5ldHdhdmVfd2F0Y2hkb2coc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKLS8qIFN0YXRpc3RpY3MgKi8KLXN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0d2F2ZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KIC8qIFdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KIHN0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyogbmV0d2F2ZV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKQEAgLTI3NSwxNCArMjcxLDkgQEAKICAgICBpbnQgICAgICAgIGxhc3RFeGVjOwogICAgIHN0cnVjdCB0aW1lcl9saXN0ICAgICAgd2F0Y2hkb2c7CS8qIFRvIGF2b2lkIGJsb2NraW5nIHN0YXRlICovCiAgICAgc3RydWN0IHNpdGVfc3VydmV5ICAgICBuc3M7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAgICAgc3RydWN0IGl3X3N0YXRpc3RpY3MgICBpd19zdGF0czsgICAgLyogV2lyZWxlc3Mgc3RhdHMgKi8KIH0gbmV0d2F2ZV9wcml2YXRlOwogCi0jaWZkZWYgTkVUV0FWRV9TVEFUUwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXR3YXZlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLSNlbmRpZgotCiAvKgogICogVGhlIE5ldHdhdmUgY2FyZCBpcyBsaXR0bGUtZW5kaWFuLCBzbyB3b24ndCB3b3JrIGZvciBiaWcgZW5kaWFuCiAgKiBzeXN0ZW1zLgpAQCAtMzY0LDYgKzM1NSwxNyBAQAogICAgIHJldHVybiAmcHJpdi0+aXdfc3RhdHM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0d2F2ZV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkgCT0gbmV0d2F2ZV9vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXR3YXZlX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBuZXR3YXZlX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb190eF90aW1lb3V0CQk9IG5ldHdhdmVfd2F0Y2hkb2csCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIC8qCiAgKiBGdW5jdGlvbiBuZXR3YXZlX2F0dGFjaCAodm9pZCkKICAqCkBAIC00MTIsMTcgKzQxNCwxMiBAQAogICAgIHNwaW5fbG9ja19pbml0KCZwcml2LT5zcGlubG9jayk7CiAKICAgICAvKiBOZXR3YXZlIHNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KLSAgICBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZuZXR3YXZlX3N0YXJ0X3htaXQ7Ci0gICAgZGV2LT5nZXRfc3RhdHMgID0gJm5ldHdhdmVfZ2V0X3N0YXRzOwotICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKKyAgICBkZXYtPm5ldGRldl9vcHMgPSAmbmV0d2F2ZV9uZXRkZXZfb3BzOwogICAgIC8qIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KLSAgICBkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gKHN0cnVjdCBpd19oYW5kbGVyX2RlZiAqKSZuZXR3YXZlX2hhbmRsZXJfZGVmOworICAgIGRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmbmV0d2F2ZV9oYW5kbGVyX2RlZjsKIAotICAgIGRldi0+dHhfdGltZW91dCA9ICZuZXR3YXZlX3dhdGNoZG9nOwogICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwogCi0gICAgZGV2LT5vcGVuID0gJm5ldHdhdmVfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmbmV0d2F2ZV9jbG9zZTsKICAgICBsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAKICAgICByZXR1cm4gbmV0d2F2ZV9wY21jaWFfY29uZmlnKCBsaW5rKTsKQEAgLTk4OCw3ICs5ODUsNyBAQAogCXJldHVybiAxOwogICAgIH0KIAotICAgIHByaXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKKyAgICBkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKIAogICAgIERFQlVHKDMsICJUcmFuc21pdHRpbmcgd2l0aCBTUENRICV4IFNQVSAleCBMSUYgJXggSVNQTFEgJXhcbiIsCiAJICByZWFkYihyYW1CYXNlICsgTkVUV0FWRV9FUkVHX1NQQ1EpLApAQCAtMTEwNywxMSArMTEwNCwxMSBAQAogCSAgICByc2VyID0gcmVhZGIocmFtQmFzZSArIE5FVFdBVkVfRVJFR19SU0VSKTsJCQkKIAkgICAgCiAJICAgIGlmIChyc2VyICYgMHgwNCkgewotCQkrK3ByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQ7IAotCQkrK3ByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnM7CisJCSsrZGV2LT5zdGF0cy5yeF9kcm9wcGVkOworCQkrK2Rldi0+c3RhdHMucnhfY3JjX2Vycm9yczsKIAkgICAgfQogCSAgICBpZiAocnNlciAmIDB4MDIpCi0JCSsrcHJpdi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzOworCQkrK2Rldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzOwogCQkJCiAJICAgIC8qIENsZWFyIHRoZSBSeEVyciBiaXQgaW4gUlNFUi4gUlNFUis0IGlzIHRoZQogCSAgICAgKiB3cml0ZSBwYXJ0LiBBbHNvIGNsZWFyIHRoZSBSeENSQyAoMHgwNCkgYW5kIApAQCAtMTEyNSw4ICsxMTIyLDggQEAKIAkgICAgd2FpdF9XT0MoaW9iYXNlKTsKIAkgICAgd3JpdGViKDB4NDAsIHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfQVNDQyk7CiAKLQkgICAgLyogUmVtZW1iZXIgdG8gY291bnQgdXAgcHJpdi0+c3RhdHMgb24gZXJyb3IgcGFja2V0cyAqLwotCSAgICArK3ByaXYtPnN0YXRzLnJ4X2Vycm9yczsKKwkgICAgLyogUmVtZW1iZXIgdG8gY291bnQgdXAgZGV2LT5zdGF0cyBvbiBlcnJvciBwYWNrZXRzICovCisJICAgICsrZGV2LT5zdGF0cy5yeF9lcnJvcnM7CiAJfQogCS8qIFR4RE4gKi8KIAlpZiAoc3RhdHVzICYgMHgyMCkgewpAQCAtMTE0MCwxNyArMTEzNywxNyBAQAogCQkvKiBUcmFuc21pdHRpbmcgd2FzIG9rYXksIGNsZWFyIGJpdHMgKi8KIAkJd2FpdF9XT0MoaW9iYXNlKTsKIAkJd3JpdGViKDB4MmYsIHJhbUJhc2UgKyBORVRXQVZFX0VSRUdfVFNFUiArIDQpOwotCQkrK3ByaXYtPnN0YXRzLnR4X3BhY2tldHM7CisJCSsrZGV2LT5zdGF0cy50eF9wYWNrZXRzOwogCSAgICB9CiAJCQkKIAkgICAgaWYgKHR4U3RhdHVzICYgMHhkMCkgewogCQlpZiAodHhTdGF0dXMgJiAweDgwKSB7Ci0JCSAgICArK3ByaXYtPnN0YXRzLmNvbGxpc2lvbnM7IC8qIEJlY2F1c2Ugb2YgL3Byb2MvbmV0L2RldiovCi0JCSAgICAvKiArK3ByaXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzOyAqLworCQkgICAgKytkZXYtPnN0YXRzLmNvbGxpc2lvbnM7IC8qIEJlY2F1c2Ugb2YgL3Byb2MvbmV0L2RldiovCisJCSAgICAvKiArK2Rldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnM7ICovCiAJCSAgICAvKiBwcmludGsoIkNvbGxpc2lvbi4gJWxkXG4iLCBqaWZmaWVzIC0gZGV2LT50cmFuc19zdGFydCk7ICovCiAJCX0KIAkJaWYgKHR4U3RhdHVzICYgMHg0MCkgCi0JCSAgICArK3ByaXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzOworCQkgICAgKytkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzOwogCQkvKiAweDgwIFR4R1UgVHJhbnNtaXQgZ2l2ZXVwIC0gbmluZSB0aW1lcyBhbmQgbm8gbHVjawogCQkgKiAweDQwIFR4Tk9BUCBObyBhY2Nlc3MgcG9pbnQuIERpc2NhcmRlZCBwYWNrZXQuCiAJCSAqIDB4MTAgVHhFcnIgVHJhbnNtaXQgZXJyb3IuIEFsd2F5cyBzZXQgd2hlbiAKQEAgLTExNjMsNyArMTE2MCw3IEBACiAJCS8qIENsZWFyIG91dCBUeEdVLCBUeE5PQVAsIFR4RXJyIGFuZCBUeFRyeXMgKi8KIAkJd2FpdF9XT0MoaW9iYXNlKTsKIAkJd3JpdGViKDB4ZGYgJiB0eFN0YXR1cywgcmFtQmFzZStORVRXQVZFX0VSRUdfVFNFUis0KTsKLQkJKytwcml2LT5zdGF0cy50eF9lcnJvcnM7CisJCSsrZGV2LT5zdGF0cy50eF9lcnJvcnM7CiAJICAgIH0KIAkgICAgREVCVUcoMywgIk5ldyBzdGF0dXMgaXMgVFNFUiAleCBBU1IgJXhcbiIsCiAJCSAgcmVhZGIocmFtQmFzZSArIE5FVFdBVkVfRVJFR19UU0VSKSwKQEAgLTExOTcsNDAgKzExOTQsNiBAQAogICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0gLyogbmV0d2F2ZV93YXRjaGRvZyAqLwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldHdhdmVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIHsKLSAgICBuZXR3YXZlX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0gICAgdXBkYXRlX3N0YXRzKGRldik7Ci0KLSAgICBERUJVRygyLCAibmV0d2F2ZTogU1BDUSAleCBTUFUgJXggTElGICV4IElTUExRICV4IE1IUyAleCByeHR4ICV4IgotCSAgIiAleCB0eCAleCAleCAleCAleFxuIiwgCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX1NQQ1EpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19TUFUpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19MSUYpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19JU1BMUSksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX01IUyksCi0JICByZWFkYihwcml2LT5yYW1CYXNlICsgTkVUV0FWRV9FUkVHX0VDICsgMHhlKSwKLQkgIHJlYWRiKHByaXYtPnJhbUJhc2UgKyBORVRXQVZFX0VSRUdfRUMgKyAweGYpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4MTgpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4MTkpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4MWEpLAotCSAgcmVhZGIocHJpdi0+cmFtQmFzZSArIE5FVFdBVkVfRVJFR19FQyArIDB4MWIpKTsKLQotICAgIHJldHVybiAmcHJpdi0+c3RhdHM7Ci19Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7Ci0gICAgLy91bnNpZ25lZCBsb25nIGZsYWdzOwotLyogICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7ICovCi0KLSAgICAvL3NwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zcGlubG9jaywgZmxhZ3MpOwotCi0vKiAgICBwcml2LT5zdGF0cy5yeF9wYWNrZXRzID0gcmVhZGIocHJpdi0+cmFtQmFzZSArIDB4MThlKTsgCi0gICAgcHJpdi0+c3RhdHMudHhfcGFja2V0cyA9IHJlYWRiKHByaXYtPnJhbUJhc2UgKyAweDE4Zik7ICovCi0KLSAgICAvL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnNwaW5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyBpbnQgbmV0d2F2ZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIG5ldHdhdmVfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMjc0LDcgKzEyMzcsNyBAQAogCWlmIChza2IgPT0gTlVMTCkgewogCSAgICBERUJVRygxLCAibmV0d2F2ZV9yeDogQ291bGQgbm90IGFsbG9jYXRlIGFuIHNrX2J1ZmYgb2YgIgogCQkgICJsZW5ndGggJWRcbiIsIHJjdkxlbik7Ci0JICAgICsrcHJpdi0+c3RhdHMucnhfZHJvcHBlZDsgCisJICAgICsrZGV2LT5zdGF0cy5yeF9kcm9wcGVkOwogCSAgICAvKiBUZWxsIHRoZSBhZGFwdGVyIHRvIHNraXAgdGhlIHBhY2tldCAqLwogCSAgICB3YWl0X1dPQyhpb2Jhc2UpOwogCSAgICB3cml0ZWIoTkVUV0FWRV9DTURfU1JQLCByYW1CYXNlICsgTkVUV0FWRV9FUkVHX0NCICsgMCk7CkBAIC0xMzA3LDggKzEyNzAsOCBAQAogCS8qIFF1ZXVlIHBhY2tldCBmb3IgbmV0d29yayBsYXllciAqLwogCW5ldGlmX3J4KHNrYik7CiAKLQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gcmN2TGVuOworCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gcmN2TGVuOwogCiAJLyogR290IHRoZSBwYWNrZXQsIHRlbGwgdGhlIGFkYXB0ZXIgdG8gc2tpcCBpdCAqLwogCXdhaXRfV09DKGlvYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0MTFlYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZwpAQCAtMCwwICsxLDEyMCBAQAorY29uZmlnIEhFUk1FUworCXRyaXN0YXRlICJIZXJtZXMgY2hpcHNldCA4MDIuMTFiIHN1cHBvcnQgKE9yaW5vY28vUHJpc20yL1N5bWJvbCkiCisJZGVwZW5kcyBvbiAoUFBDX1BNQUMgfHwgUENJIHx8IFBDTUNJQSkgJiYgV0xBTl84MDIxMQorCXNlbGVjdCBXSVJFTEVTU19FWFQKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IENSWVBUTworCXNlbGVjdCBDUllQVE9fTUlDSEFFTF9NSUMKKwktLS1oZWxwLS0tCisJICBBIGRyaXZlciBmb3IgODAyLjExYiB3aXJlbGVzcyBjYXJkcyBiYXNlZCBvbiB0aGUgIkhlcm1lcyIgb3IKKwkgIEludGVyc2lsIEhGQTM4NHggKFByaXNtIDIpIE1BQyBjb250cm9sbGVyLiAgVGhpcyBpbmNsdWRlcyB0aGUgdmFzdAorCSAgbWFqb3JpdHkgb2YgdGhlIFBDTUNJQSA4MDIuMTFiIGNhcmRzICh3aGljaCBhcmUgbmVhcmx5IGFsbCByZWJhZGdlcykKKwkgIC0gZXhjZXB0IGZvciB0aGUgQ2lzY28vQWlyb25ldCBjYXJkcy4gIENhcmRzIHN1cHBvcnRlZCBpbmNsdWRlIHRoZQorCSAgQXBwbGUgQWlycG9ydCAobm90IGEgUENNQ0lBIGNhcmQpLCBXYXZlbGFuSUVFRS9Pcmlub2NvLAorCSAgQ2FibGV0cm9uL0VudGVyYVN5cyBSb2FtYWJvdXQsIEVMU0EgQWlyTGFuY2VyLCBNRUxDTyBCdWZmYWxvLCBBdmF5YSwKKwkgIElCTSBIaWdoIFJhdGUgV2lyZWxlc3MsIEZhcnJhbG9uIFN5eWxpbmUsIFNhbXN1bmcgTWFnaWNMQU4sIE5ldGdlYXIKKwkgIE1BNDAxLCBMaW5rU3lzIFdQQy0xMSwgRC1MaW5rIERXTC02NTAsIDNDb20gQWlyQ29ubmVjdCwgSW50ZWwKKwkgIElQVzIwMTEsIGFuZCBTeW1ib2wgU3BlY3RydW0yNCBIaWdoIFJhdGUgYW1vbmdzdCBvdGhlcnMuCisKKwkgIFRoaXMgb3B0aW9uIGluY2x1ZGVzIHRoZSBndXRzIG9mIHRoZSBkcml2ZXIsIGJ1dCBpbiBvcmRlciB0bworCSAgYWN0dWFsbHkgdXNlIGEgY2FyZCB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQQorCSAgSGVybWVzIGNhcmRzLCBQTFg5MDUyIGJhc2VkIFBDSSBhZGFwdG9ycyBvciB0aGUgQXBwbGUgQWlycG9ydCBiZWxvdy4KKworCSAgWW91IHdpbGwgYWxzbyB2ZXJ5IGxpa2VseSBhbHNvIG5lZWQgdGhlIFdpcmVsZXNzIFRvb2xzIGluIG9yZGVyIHRvCisJICBjb25maWd1cmUgeW91ciBjYXJkIGFuZCB0aGF0IC9ldGMvcGNtY2lhL3dpcmVsZXNzLm9wdHMgd29ya3MgOgorCSAgPGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvVG9vbHMuaHRtbD4KKworY29uZmlnIEhFUk1FU19DQUNIRV9GV19PTl9JTklUCisJYm9vbCAiQ2FjaGUgSGVybWVzIGZpcm13YXJlIG9uIGRyaXZlciBpbml0aWFsaXNhdGlvbiIKKwlkZXBlbmRzIG9uIEhFUk1FUworCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIHRvIGNhY2hlIGFueSBmaXJtd2FyZSByZXF1aXJlZCBieSB0aGUgSGVybWVzIGRyaXZlcnMKKwkgIG9uIHN0YXJ0dXAuICBUaGUgZmlybXdhcmUgd2lsbCByZW1haW4gY2FjaGVkIHVudGlsIHRoZQorCSAgZHJpdmVyIGlzIHVubG9hZGVkLiAgVGhlIGNhY2hlIHVzZXMgNjRLIG9mIFJBTS4KKworCSAgT3RoZXJ3aXNlIGxvYWQgdGhlIGZpcm13YXJlIGZyb20gdXNlcnNwYWNlIGFzIHJlcXVpcmVkLiAgSW4KKwkgIHRoaXMgY2FzZSB0aGUgZHJpdmVyIHNob3VsZCBiZSB1bmxvYWRlZCBhbmQgcmVzdGFydGVkCisJICB3aGVuZXZlciB0aGUgZmlybXdhcmUgaXMgY2hhbmdlZC4KKworCSAgSWYgeW91IGFyZSBub3Qgc3VyZSwgc2F5IFkuCisKK2NvbmZpZyBBUFBMRV9BSVJQT1JUCisJdHJpc3RhdGUgIkFwcGxlIEFpcnBvcnQgc3VwcG9ydCAoYnVpbHQtaW4pIgorCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgSEVSTUVTCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBaXJwb3J0IDgwMi4xMWIgd2lyZWxlc3MgRXRoZXJuZXQgaGFyZHdhcmUKKwkgIGJ1aWx0IGludG8gdGhlIE1hY2ludG9zaCBpQm9vayBhbmQgb3RoZXIgcmVjZW50IFBvd2VyUEMtYmFzZWQKKwkgIE1hY2ludG9zaCBtYWNoaW5lcy4gVGhpcyBpcyBlc3NlbnRpYWxseSBhIEx1Y2VudCBPcmlub2NvIGNhcmQgd2l0aAorCSAgYSBub24tc3RhbmRhcmQgaW50ZXJmYWNlLgorCisJICBUaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBaXJwb3J0IEV4dHJlbWUgKDgwMi4xMWIvZykuIFVzZQorCSAgdGhlIEJDTTQzeHggZHJpdmVyIGZvciBBaXJwb3J0IEV4dHJlbWUgY2FyZHMuCisKK2NvbmZpZyBQTFhfSEVSTUVTCisJdHJpc3RhdGUgIkhlcm1lcyBpbiBQTFg5MDUyIGJhc2VkIFBDSSBhZGFwdG9yIHN1cHBvcnQgKE5ldGdlYXIgTUEzMDEgZXRjLikiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDTUNJQSBjYXJkcyBzdXBwb3J0ZWQgYnkgdGhlICJIZXJtZXMiIChha2EKKwkgIG9yaW5vY28pIGRyaXZlciB3aGVuIHVzZWQgaW4gUExYOTA1MiBiYXNlZCBQQ0kgYWRhcHRvcnMuICBUaGVzZQorCSAgYWRhcHRvcnMgYXJlIG5vdCBhIGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXIgYnV0IGFjdCBhcyBhIG1vcmUgbGltaXRlZAorCSAgUENJIDwtPiBQQ01DSUEgYnJpZGdlLiAgU2V2ZXJhbCB2ZW5kb3JzIHNlbGwgc3VjaCBhZGFwdG9ycyBzbyB0aGF0CisJICA4MDIuMTFiIFBDTUNJQSBjYXJkcyBjYW4gYmUgdXNlZCBpbiBkZXNrdG9wIG1hY2hpbmVzLiAgVGhlIE5ldGdlYXIKKwkgIE1BMzAxIGlzIHN1Y2ggYW4gYWRhcHRvci4KKworY29uZmlnIFRNRF9IRVJNRVMKKwl0cmlzdGF0ZSAiSGVybWVzIGluIFRNRDcxNjAgYmFzZWQgUENJIGFkYXB0b3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQorCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBUTUQ3MTYwIGJhc2VkIFBDSSBhZGFwdG9ycy4gIFRoZXNlCisJICBhZGFwdG9ycyBhcmUgbm90IGEgZnVsbCBQQ01DSUEgY29udHJvbGxlciBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCisJICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuICBTZXZlcmFsIHZlbmRvcnMgc2VsbCBzdWNoIGFkYXB0b3JzIHNvIHRoYXQKKwkgIDgwMi4xMWIgUENNQ0lBIGNhcmRzIGNhbiBiZSB1c2VkIGluIGRlc2t0b3AgbWFjaGluZXMuCisKK2NvbmZpZyBOT1JURUxfSEVSTUVTCisJdHJpc3RhdGUgIk5vcnRlbCBlbW9iaWxpdHkgUENJIGFkYXB0b3Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDSSAmJiBIRVJNRVMKKwloZWxwCisJICBFbmFibGUgc3VwcG9ydCBmb3IgUENNQ0lBIGNhcmRzIHN1cHBvcnRlZCBieSB0aGUgIkhlcm1lcyIgKGFrYQorCSAgb3Jpbm9jbykgZHJpdmVyIHdoZW4gdXNlZCBpbiBOb3J0ZWwgZW1vYmlsaXR5IFBDSSBhZGFwdG9ycy4gIFRoZXNlCisJICBhZGFwdG9ycyBhcmUgbm90IGZ1bGwgUENNQ0lBIGNvbnRyb2xsZXJzLCBidXQgYWN0IGFzIGEgbW9yZSBsaW1pdGVkCisJICBQQ0kgPC0+IFBDTUNJQSBicmlkZ2UuCisKK2NvbmZpZyBQQ0lfSEVSTUVTCisJdHJpc3RhdGUgIlByaXNtIDIuNSBQQ0kgODAyLjExYiBhZGFwdG9yIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSEVSTUVTCisJaGVscAorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIFBDSSBhbmQgbWluaS1QQ0kgODAyLjExYiB3aXJlbGVzcyBOSUNzIGJhc2VkIG9uCisJICB0aGUgUHJpc20gMi41IGNoaXBzZXQuICBUaGVzZSBhcmUgdHJ1ZSBQQ0kgY2FyZHMsIG5vdCB0aGUgODAyLjExYgorCSAgUENNQ0lBIGNhcmRzIGJ1bmRsZWQgd2l0aCBQQ0k8LT5QQ01DSUEgYWRhcHRvcnMgd2hpY2ggYXJlIGFsc28KKwkgIGNvbW1vbi4gIFNvbWUgb2YgdGhlIGJ1aWx0LWluIHdpcmVsZXNzIGFkYXB0b3JzIGluIGxhcHRvcHMgYXJlIG9mCisJICB0aGlzIHZhcmlldHkuCisKK2NvbmZpZyBQQ01DSUFfSEVSTUVTCisJdHJpc3RhdGUgIkhlcm1lcyBQQ01DSUEgY2FyZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENNQ0lBICYmIEhFUk1FUworCS0tLWhlbHAtLS0KKwkgIEEgZHJpdmVyIGZvciAiSGVybWVzIiBjaGlwc2V0IGJhc2VkIFBDTUNJQSB3aXJlbGVzcyBhZGFwdG9ycywgc3VjaAorCSAgYXMgdGhlIEx1Y2VudCBXYXZlbGFuSUVFRS9Pcmlub2NvIGNhcmRzIGFuZCB0aGVpciBPRU0gKENhYmxldHJvbi8KKwkgIEVudGVyYVN5cyBSb2FtQWJvdXQgODAyLjExLCBFTFNBIEFpcmxhbmNlciwgTWVsY28gQnVmZmFsbyBhbmQKKwkgIG90aGVycykuICBJdCBzaG91bGQgYWxzbyBiZSB1c2FibGUgb24gdmFyaW91cyBQcmlzbSBJSSBiYXNlZCBjYXJkcworCSAgc3VjaCBhcyB0aGUgTGlua3N5cywgRC1MaW5rIGFuZCBGYXJhbGxvbiBTa3lsaW5lLiAgSXQgc2hvdWxkIGFsc28KKwkgIHdvcmsgb24gU3ltYm9sIGNhcmRzIHN1Y2ggYXMgdGhlIDNDb20gQWlyQ29ubmVjdCBhbmQgRXJpY3Nzb24gV0xBTi4KKworCSAgWW91IHdpbGwgdmVyeSBsaWtlbHkgbmVlZCB0aGUgV2lyZWxlc3MgVG9vbHMgaW4gb3JkZXIgdG8KKwkgIGNvbmZpZ3VyZSB5b3VyIGNhcmQgYW5kIHRoYXQgL2V0Yy9wY21jaWEvd2lyZWxlc3Mub3B0cyB3b3JrczoKKwkgIDxodHRwOi8vd3d3LmhwbC5ocC5jb20vcGVyc29uYWwvSmVhbl9Ub3VycmlsaGVzL0xpbnV4L1Rvb2xzLmh0bWw+LgorCitjb25maWcgUENNQ0lBX1NQRUNUUlVNCisJdHJpc3RhdGUgIlN5bWJvbCBTcGVjdHJ1bTI0IFRyaWxvZ3kgUENNQ0lBIGNhcmQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBDTUNJQSAmJiBIRVJNRVMKKwktLS1oZWxwLS0tCisKKwkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIDgwMi4xMWIgY2FyZHMgdXNpbmcgUkFNLWxvYWRhYmxlIFN5bWJvbAorCSAgZmlybXdhcmUsIHN1Y2ggYXMgU3ltYm9sIFdpcmVsZXNzIE5ldHdvcmtlciBMQTQxMDAsIENvbXBhY3RGbGFzaAorCSAgY2FyZHMgYnkgU29ja2V0IENvbW11bmljYXRpb25zIGFuZCBJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIuCisKKwkgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGZpcm13YXJlIGRvd25sb2FkIG9uIHN0YXJ0dXAuICBVdGlsaXRpZXMKKwkgIGZvciBkb3dubG9hZGluZyBTeW1ib2wgZmlybXdhcmUgYXJlIGF2YWlsYWJsZSBhdAorCSAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvb3Jpbm9jby8+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9NYWtlZmlsZQppbmRleCA3OTEzNjZlLi4xZmM3NDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vTWFrZWZpbGUKQEAgLTEsOCArMSw5IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgb3Jpbm9jbyB3aXJlbGVzcyBkZXZpY2UgZHJpdmVycy4KICMKK29yaW5vY28tb2JqcyA6PSBtYWluLm8gZncubyBody5vIG1pYy5vIHNjYW4ubyB3ZXh0Lm8gaGVybWVzX2RsZC5vIGhlcm1lcy5vCiAKLW9iai0kKENPTkZJR19IRVJNRVMpCQkrPSBvcmlub2NvLm8gaGVybWVzLm8gaGVybWVzX2RsZC5vCitvYmotJChDT05GSUdfSEVSTUVTKQkJKz0gb3Jpbm9jby5vCiBvYmotJChDT05GSUdfUENNQ0lBX0hFUk1FUykJKz0gb3Jpbm9jb19jcy5vCiBvYmotJChDT05GSUdfQVBQTEVfQUlSUE9SVCkJKz0gYWlycG9ydC5vCiBvYmotJChDT05GSUdfUExYX0hFUk1FUykJKz0gb3Jpbm9jb19wbHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9haXJwb3J0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2FpcnBvcnQuYwppbmRleCAyOGYxY2FlLi44YzQwNjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2FpcnBvcnQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2FpcnBvcnQuYwpAQCAtMywxMCArMywxMCBAQAogICogQSBkcml2ZXIgZm9yICJIZXJtZXMiIGNoaXBzZXQgYmFzZWQgQXBwbGUgQWlycG9ydCB3aXJlbGVzcwogICogY2FyZC4KICAqCi0gKiBDb3B5cmlnaHQgbm90aWNlICYgcmVsZWFzZSBub3RlcyBpbiBmaWxlIG9yaW5vY28uYwotICogCisgKiBDb3B5cmlnaHQgbm90aWNlICYgcmVsZWFzZSBub3RlcyBpbiBmaWxlIG1haW4uYworICoKICAqIE5vdGUgc3BlY2lmaWMgdG8gYWlycG9ydCBzdHViOgotICogCisgKgogICogIDAuMDUgOiBmaXJzdCB2ZXJzaW9uIG9mIHRoZSBuZXcgc3BsaXQgZHJpdmVyCiAgKiAgMC4wNiA6IGZpeCBwb3NzaWJsZSBoYW5nIG9uIHBvd2VydXAsIGFkZCBzbGVlcCBzdXBwb3J0CiAgKi8KQEAgLTYwLDcgKzYwLDggQEAKIAlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwogCiAJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLCBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMCk7CisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCisJCQkgIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzUsNyArNzYsOCBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBaXJwb3J0IHdha2luZyB1cFxuIiwgZGV2LT5uYW1lKTsKIAotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLCBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMSk7CisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCisJCQkgIG1hY2lvX2dldF9vZl9ub2RlKG1kZXYpLCAwLCAxKTsKIAltc2xlZXAoMjAwKTsKIAogCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwpAQCAtOTMsNyArOTUsNyBAQAogCiAJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKIAotCWlmIChwcml2LT5vcGVuICYmICghIHByaXYtPmh3X3VuYXZhaWxhYmxlKSkgeworCWlmIChwcml2LT5vcGVuICYmICghcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7CiAJCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwogCQlpZiAoZXJyKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzdGFydGluZyBjYXJkIG9uIFBCT09LX1dBS0VcbiIsCkBAIC0xMjcsNyArMTI5LDggQEAKIAogCW1hY2lvX3JlbGVhc2VfcmVzb3VyY2UobWRldiwgMCk7CiAKLQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDApOworCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLAorCQkJICBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMCk7CiAJc3NsZWVwKDEpOwogCiAJbWFjaW9fc2V0X2RydmRhdGEobWRldiwgTlVMTCk7CkBAIC0xNTMsOSArMTU2LDExIEBACiAJICogb2ZmLiAqLwogCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKIAotCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLCBtYWNpb19nZXRfb2Zfbm9kZShjYXJkLT5tZGV2KSwgMCwgMCk7CisJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsCisJCQkgIG1hY2lvX2dldF9vZl9ub2RlKGNhcmQtPm1kZXYpLCAwLCAwKTsKIAlzc2xlZXAoMSk7Ci0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfQUlSUE9SVF9FTkFCTEUsIG1hY2lvX2dldF9vZl9ub2RlKGNhcmQtPm1kZXYpLCAwLCAxKTsKKwlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwKKwkJCSAgbWFjaW9fZ2V0X29mX25vZGUoY2FyZC0+bWRldiksIDAsIDEpOwogCXNzbGVlcCgxKTsKIAogCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwpAQCAtMTgyLDcgKzE4Nyw3IEBACiAJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KIAlkZXYgPSBhbGxvY19vcmlub2NvZGV2KHNpemVvZigqY2FyZCksICZtZGV2LT5vZmRldi5kZXYsCiAJCQkgICAgICAgYWlycG9ydF9oYXJkX3Jlc2V0LCBOVUxMKTsKLQlpZiAoISBkZXYpIHsKKwlpZiAoIWRldikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgYWxsb2NhdGUgbmV0d29yayBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0yMTQsOSArMjE5LDEwIEBACiAJfQogCiAJaGVybWVzX3N0cnVjdF9pbml0KGh3LCBjYXJkLT52YWRkciwgSEVSTUVTXzE2QklUX1JFR1NQQUNJTkcpOwotCQkKKwogCS8qIFBvd2VyIHVwIGNhcmQgKi8KLQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9BSVJQT1JUX0VOQUJMRSwgbWFjaW9fZ2V0X29mX25vZGUobWRldiksIDAsIDEpOworCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX0FJUlBPUlRfRU5BQkxFLAorCQkJICBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgMCwgMSk7CiAJc3NsZWVwKDEpOwogCiAJLyogUmVzZXQgaXQgYmVmb3JlIHdlIGdldCB0aGUgaW50ZXJydXB0ICovCkBAIC0yNDgsNyArMjU0LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgQXBwbGUgQWlycG9ydCB3aXJlbGVzcyBjYXJkLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgTVBML0dQTCIpOwogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhaXJwb3J0X21hdGNoW10gPSAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFpcnBvcnRfbWF0Y2hbXSA9CiB7CiAJewogCS5uYW1lIAkJPSAicmFkaW8iLApAQCAtMjU2LDEwICsyNjIsOSBAQAogCXt9LAogfTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRSAob2YsIGFpcnBvcnRfbWF0Y2gpOworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYWlycG9ydF9tYXRjaCk7CiAKLXN0YXRpYyBzdHJ1Y3QgbWFjaW9fZHJpdmVyIGFpcnBvcnRfZHJpdmVyID0gCi17CitzdGF0aWMgc3RydWN0IG1hY2lvX2RyaXZlciBhaXJwb3J0X2RyaXZlciA9IHsKIAkubmFtZSAJCT0gRFJJVkVSX05BTUUsCiAJLm1hdGNoX3RhYmxlCT0gYWlycG9ydF9tYXRjaCwKIAkucHJvYmUJCT0gYWlycG9ydF9hdHRhY2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4NGI0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuYwpAQCAtMCwwICsxLDM5MCBAQAorLyogRmlybXdhcmUgZmlsZSByZWFkaW5nIGFuZCBkb3dubG9hZCBoZWxwZXJzCisgKgorICogU2VlIGNvcHlyaWdodCBub3RpY2UgaW4gbWFpbi5jCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSAiaGVybWVzLmgiCisjaW5jbHVkZSAiaGVybWVzX2RsZC5oIgorI2luY2x1ZGUgIm9yaW5vY28uaCIKKworI2luY2x1ZGUgImZ3LmgiCisKKy8qIEVuZCBtYXJrZXJzIChmb3IgU3ltYm9sIGZpcm13YXJlIG9ubHkpICovCisjZGVmaW5lIFRFWFRfRU5ECTB4MUEJCS8qIEVuZCBvZiB0ZXh0IGhlYWRlciAqLworCitzdHJ1Y3QgZndfaW5mbyB7CisJY2hhciAqcHJpX2Z3OworCWNoYXIgKnN0YV9mdzsKKwljaGFyICphcF9mdzsKKwl1MzIgcGRhX2FkZHI7CisJdTE2IHBkYV9zaXplOworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmd19pbmZvIG9yaW5vY29fZndbXSA9IHsKKwl7IE5VTEwsICJhZ2VyZV9zdGFfZncuYmluIiwgImFnZXJlX2FwX2Z3LmJpbiIsIDB4MDAzOTAwMDAsIDEwMDAgfSwKKwl7IE5VTEwsICJwcmlzbV9zdGFfZncuYmluIiwgInByaXNtX2FwX2Z3LmJpbiIsIDAsIDEwMjQgfSwKKwl7ICJzeW1ib2xfc3AyNHRfcHJpbV9mdyIsICJzeW1ib2xfc3AyNHRfc2VjX2Z3IiwgTlVMTCwgMHgwMDAwMzEwMCwgNTEyIH0KK307CisKKy8qIFN0cnVjdHVyZSB1c2VkIHRvIGFjY2VzcyBmaWVsZHMgaW4gRlcKKyAqIE1ha2Ugc3VyZSBMRSBkZWNvZGluZyBtYWNyb3MgYXJlIHVzZWQKKyAqLworc3RydWN0IG9yaW5vY29fZndfaGVhZGVyIHsKKwljaGFyIGhkcl92ZXJzWzZdOyAgICAgICAvKiBBU0NJSSBzdHJpbmcgZm9yIGhlYWRlciB2ZXJzaW9uICovCisJX19sZTE2IGhlYWRlcnNpemU7ICAgICAgLyogVG90YWwgbGVuZ3RoIG9mIGhlYWRlciAqLworCV9fbGUzMiBlbnRyeV9wb2ludDsgICAgIC8qIE5JQyBlbnRyeSBwb2ludCAqLworCV9fbGUzMiBibG9ja3M7ICAgICAgICAgIC8qIE51bWJlciBvZiBibG9ja3MgdG8gcHJvZ3JhbSAqLworCV9fbGUzMiBibG9ja19vZmZzZXQ7ICAgIC8qIE9mZnNldCBvZiBibG9jayBkYXRhIGZyb20gZW9mIGhlYWRlciAqLworCV9fbGUzMiBwZHJfb2Zmc2V0OyAgICAgIC8qIE9mZnNldCB0byBQRFIgZGF0YSBmcm9tIGVvZiBoZWFkZXIgKi8KKwlfX2xlMzIgcHJpX29mZnNldDsgICAgICAvKiBPZmZzZXQgdG8gcHJpbWFyeSBwbHVnIGRhdGEgKi8KKwlfX2xlMzIgY29tcGF0X29mZnNldDsgICAvKiBPZmZzZXQgdG8gY29tcGF0aWJpbGl0eSBkYXRhKi8KKwljaGFyIHNpZ25hdHVyZVswXTsgICAgICAvKiBGVyBzaWduYXR1cmUgbGVuZ3RoIGhlYWRlcnNpemUtMjAgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBDaGVjayB0aGUgcmFuZ2Ugb2YgdmFyaW91cyBoZWFkZXIgZW50cmllcy4gUmV0dXJuIGEgcG9pbnRlciB0byBhCisgKiBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvYmxlbSwgb3IgTlVMTCBpZiBldmVyeXRoaW5nIGNoZWNrcyBvdXQuICovCitzdGF0aWMgY29uc3QgY2hhciAqdmFsaWRhdGVfZncoY29uc3Qgc3RydWN0IG9yaW5vY29fZndfaGVhZGVyICpoZHIsIHNpemVfdCBsZW4pCit7CisJdTE2IGhkcnNpemU7CisKKwlpZiAobGVuIDwgc2l6ZW9mKCpoZHIpKQorCQlyZXR1cm4gImltYWdlIHRvbyBzbWFsbCI7CisJaWYgKG1lbWNtcChoZHItPmhkcl92ZXJzLCAiSEZXIiwgMykgIT0gMCkKKwkJcmV0dXJuICJmb3JtYXQgbm90IHJlY29nbmlzZWQiOworCisJaGRyc2l6ZSA9IGxlMTZfdG9fY3B1KGhkci0+aGVhZGVyc2l6ZSk7CisJaWYgKGhkcnNpemUgPiBsZW4pCisJCXJldHVybiAiYmFkIGhlYWRlcnNpemUiOworCWlmICgoaGRyc2l6ZSArIGxlMzJfdG9fY3B1KGhkci0+YmxvY2tfb2Zmc2V0KSkgPiBsZW4pCisJCXJldHVybiAiYmFkIGJsb2NrIG9mZnNldCI7CisJaWYgKChoZHJzaXplICsgbGUzMl90b19jcHUoaGRyLT5wZHJfb2Zmc2V0KSkgPiBsZW4pCisJCXJldHVybiAiYmFkIFBEUiBvZmZzZXQiOworCWlmICgoaGRyc2l6ZSArIGxlMzJfdG9fY3B1KGhkci0+cHJpX29mZnNldCkpID4gbGVuKQorCQlyZXR1cm4gImJhZCBQUkkgb2Zmc2V0IjsKKwlpZiAoKGhkcnNpemUgKyBsZTMyX3RvX2NwdShoZHItPmNvbXBhdF9vZmZzZXQpKSA+IGxlbikKKwkJcmV0dXJuICJiYWQgY29tcGF0IG9mZnNldCI7CisKKwkvKiBUT0RPOiBjb25zaWRlciBhZGRpbmcgYSBjaGVja3N1bSBvciBDUkMgdG8gdGhlIGZpcm13YXJlIGZvcm1hdCAqLworCXJldHVybiBOVUxMOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQorc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKgorb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGJvb2wgcHJpbWFyeSkKK3sKKwlpZiAocHJpbWFyeSkKKwkJcmV0dXJuIHByaXYtPmNhY2hlZF9wcmlfZnc7CisJZWxzZQorCQlyZXR1cm4gcHJpdi0+Y2FjaGVkX2Z3OworfQorI2Vsc2UKKyNkZWZpbmUgb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIHByaW1hcnkpIChOVUxMKQorI2VuZGlmCisKKy8qIERvd25sb2FkIGVpdGhlciBTVEEgb3IgQVAgZmlybXdhcmUgaW50byB0aGUgY2FyZC4gKi8KK3N0YXRpYyBpbnQKK29yaW5vY29fZGxfZmlybXdhcmUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJICAgIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdywKKwkJICAgIGludCBhcCkKK3sKKwkvKiBQbHVnIERhdGEgQXJlYSAoUERBKSAqLworCV9fbGUxNiAqcGRhOworCisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisJY29uc3Qgc3RydWN0IG9yaW5vY29fZndfaGVhZGVyICpoZHI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqZmlyc3RfYmxvY2s7CisJY29uc3Qgdm9pZCAqZW5kOworCWNvbnN0IGNoYXIgKmZpcm13YXJlOworCWNvbnN0IGNoYXIgKmZ3X2VycjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlpbnQgZXJyID0gMDsKKworCXBkYSA9IGt6YWxsb2MoZnctPnBkYV9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkYSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoYXApCisJCWZpcm13YXJlID0gZnctPmFwX2Z3OworCWVsc2UKKwkJZmlybXdhcmUgPSBmdy0+c3RhX2Z3OworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBdHRlbXB0aW5nIHRvIGRvd25sb2FkIGZpcm13YXJlICVzXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGZpcm13YXJlKTsKKworCS8qIFJlYWQgY3VycmVudCBwbHVnIGRhdGEgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF9wZGEoaHcsIHBkYSwgZnctPnBkYV9hZGRyLCBmdy0+cGRhX3NpemUsIDApOworCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVhZCBQREEgcmV0dXJuZWQgJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWU7CisKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpIHsKKwkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZpcm13YXJlLCBwcml2LT5kZXYpOworCisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOworCQkJZXJyID0gLUVOT0VOVDsKKwkJCWdvdG8gZnJlZTsKKwkJfQorCX0gZWxzZQorCQlmd19lbnRyeSA9IG9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSk7CisKKwloZHIgPSAoY29uc3Qgc3RydWN0IG9yaW5vY29fZndfaGVhZGVyICopIGZ3X2VudHJ5LT5kYXRhOworCisJZndfZXJyID0gdmFsaWRhdGVfZncoaGRyLCBmd19lbnRyeS0+c2l6ZSk7CisJaWYgKGZ3X2VycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSW52YWxpZCBmaXJtd2FyZSBpbWFnZSBkZXRlY3RlZCAoJXMpLiAiCisJCSAgICAgICAiQWJvcnRpbmcgZG93bmxvYWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGZ3X2Vycik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gYWJvcnQ7CisJfQorCisJLyogRW5hYmxlIGF1eCBwb3J0IHRvIGFsbG93IHByb2dyYW1taW5nICovCisJZXJyID0gaGVybWVzaV9wcm9ncmFtX2luaXQoaHcsIGxlMzJfdG9fY3B1KGhkci0+ZW50cnlfcG9pbnQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gaW5pdCByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWlmIChlcnIgIT0gMCkKKwkJZ290byBhYm9ydDsKKworCS8qIFByb2dyYW0gZGF0YSAqLworCWZpcnN0X2Jsb2NrID0gKGZ3X2VudHJ5LT5kYXRhICsKKwkJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+aGVhZGVyc2l6ZSkgKworCQkgICAgICAgbGUzMl90b19jcHUoaGRyLT5ibG9ja19vZmZzZXQpKTsKKwllbmQgPSBmd19lbnRyeS0+ZGF0YSArIGZ3X2VudHJ5LT5zaXplOworCisJZXJyID0gaGVybWVzX3Byb2dyYW0oaHcsIGZpcnN0X2Jsb2NrLCBlbmQpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWlmIChlcnIgIT0gMCkKKwkJZ290byBhYm9ydDsKKworCS8qIFVwZGF0ZSBwcm9kdWN0aW9uIGRhdGEgKi8KKwlmaXJzdF9ibG9jayA9IChmd19lbnRyeS0+ZGF0YSArCisJCSAgICAgICBsZTE2X3RvX2NwdShoZHItPmhlYWRlcnNpemUpICsKKwkJICAgICAgIGxlMzJfdG9fY3B1KGhkci0+cGRyX29mZnNldCkpOworCisJZXJyID0gaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKGh3LCBmaXJzdF9ibG9jaywgZW5kLCBwZGEsCisJCQkJCSAgICAgJnBkYVtmdy0+cGRhX3NpemUgLyBzaXplb2YoKnBkYSldKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFwcGx5IFBEQSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCWlmIChlcnIpCisJCWdvdG8gYWJvcnQ7CisKKwkvKiBUZWxsIGNhcmQgd2UndmUgZmluaXNoZWQgKi8KKwllcnIgPSBoZXJtZXNpX3Byb2dyYW1fZW5kKGh3KTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gZW5kIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7CisJaWYgKGVyciAhPSAwKQorCQlnb3RvIGFib3J0OworCisJLyogQ2hlY2sgaWYgd2UncmUgcnVubmluZyAqLworCXByaW50ayhLRVJOX0RFQlVHICIlczogaGVybWVzX3ByZXNlbnQgcmV0dXJuZWQgJWRcbiIsCisJICAgICAgIGRldi0+bmFtZSwgaGVybWVzX3ByZXNlbnQoaHcpKTsKKworYWJvcnQ6CisJLyogSWYgd2UgcmVxdWVzdGVkIHRoZSBmaXJtd2FyZSwgcmVsZWFzZSBpdC4gKi8KKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpCisJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOworCitmcmVlOgorCWtmcmVlKHBkYSk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFByb2Nlc3MgYSBmaXJtd2FyZSBpbWFnZSAtIHN0b3AgdGhlIGNhcmQsIGxvYWQgdGhlIGZpcm13YXJlLCByZXNldAorICogdGhlIGNhcmQgYW5kIG1ha2Ugc3VyZSBpdCByZXNwb25kcy4gIEZvciB0aGUgc2Vjb25kYXJ5IGZpcm13YXJlIHRha2UKKyAqIGNhcmUgb2YgdGhlIFBEQSAtIHJlYWQgaXQgYW5kIHRoZW4gd3JpdGUgaXQgb24gdG9wIG9mIHRoZSBmaXJtd2FyZS4KKyAqLworc3RhdGljIGludAorc3ltYm9sX2RsX2ltYWdlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdywKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW1hZ2UsIGNvbnN0IHZvaWQgKmVuZCwKKwkJaW50IHNlY29uZGFyeSkKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IHJldCA9IDA7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcHRyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpcnN0X2Jsb2NrOworCisJLyogUGx1ZyBEYXRhIEFyZWEgKFBEQSkgKi8KKwlfX2xlMTYgKnBkYSA9IE5VTEw7CisKKwkvKiBCaW5hcnkgYmxvY2sgYmVnaW5zIGFmdGVyIHRoZSAweDFBIG1hcmtlciAqLworCXB0ciA9IGltYWdlOworCXdoaWxlICgqcHRyKysgIT0gVEVYVF9FTkQpOworCWZpcnN0X2Jsb2NrID0gcHRyOworCisJLyogUmVhZCB0aGUgUERBIGZyb20gRUVQUk9NICovCisJaWYgKHNlY29uZGFyeSkgeworCQlwZGEgPSBremFsbG9jKGZ3LT5wZGFfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGRhKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0ID0gaGVybWVzX3JlYWRfcGRhKGh3LCBwZGEsIGZ3LT5wZGFfYWRkciwgZnctPnBkYV9zaXplLCAxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZnJlZTsKKwl9CisKKwkvKiBTdG9wIHRoZSBmaXJtd2FyZSwgc28gdGhhdCBpdCBjYW4gYmUgc2FmZWx5IHJld3JpdHRlbiAqLworCWlmIChwcml2LT5zdG9wX2Z3KSB7CisJCXJldCA9IHByaXYtPnN0b3BfZncocHJpdiwgMSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZyZWU7CisJfQorCisJLyogUHJvZ3JhbSB0aGUgYWRhcHRlciB3aXRoIG5ldyBmaXJtd2FyZSAqLworCXJldCA9IGhlcm1lc19wcm9ncmFtKGh3LCBmaXJzdF9ibG9jaywgZW5kKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWU7CisKKwkvKiBXcml0ZSB0aGUgUERBIHRvIHRoZSBhZGFwdGVyICovCisJaWYgKHNlY29uZGFyeSkgeworCQlzaXplX3QgbGVuID0gaGVybWVzX2Jsb2Nrc19sZW5ndGgoZmlyc3RfYmxvY2ssIGVuZCk7CisJCXB0ciA9IGZpcnN0X2Jsb2NrICsgbGVuOworCQlyZXQgPSBoZXJtZXNfYXBwbHlfcGRhKGh3LCBwdHIsIGVuZCwgcGRhLAorCQkJCSAgICAgICAmcGRhW2Z3LT5wZGFfc2l6ZSAvIHNpemVvZigqcGRhKV0pOworCQlrZnJlZShwZGEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBSdW4gdGhlIGZpcm13YXJlICovCisJaWYgKHByaXYtPnN0b3BfZncpIHsKKwkJcmV0ID0gcHJpdi0+c3RvcF9mdyhwcml2LCAwKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyogUmVzZXQgaGVybWVzIGNoaXAgYW5kIG1ha2Ugc3VyZSBpdCByZXNwb25kcyAqLworCXJldCA9IGhlcm1lc19pbml0KGh3KTsKKworCS8qIGhlcm1lc19yZXNldCgpIHNob3VsZCByZXR1cm4gMCB3aXRoIHRoZSBzZWNvbmRhcnkgZmlybXdhcmUgKi8KKwlpZiAoc2Vjb25kYXJ5ICYmIHJldCAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEFuZCB0aGlzIHNob3VsZCB3b3JrIHdpdGggYW55IGZpcm13YXJlICovCisJaWYgKCFoZXJtZXNfcHJlc2VudChodykpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7CisKK2ZyZWU6CisJa2ZyZWUocGRhKTsKKwlyZXR1cm4gcmV0OworfQorCisKKy8qCisgKiBEb3dubG9hZCB0aGUgZmlybXdhcmUgaW50byB0aGUgY2FyZCwgdGhpcyBhbHNvIGRvZXMgYSBQQ01DSUEgc29mdAorICogcmVzZXQgb24gdGhlIGNhcmQsIHRvIG1ha2Ugc3VyZSBpdCdzIGluIGEgc2FuZSBzdGF0ZS4KKyAqLworc3RhdGljIGludAorc3ltYm9sX2RsX2Zpcm13YXJlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCSAgIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlpbnQgcmV0OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7CisKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCB0cnVlKSkgeworCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3LT5wcmlfZncsIHByaXYtPmRldikgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGZpbmQgZmlybXdhcmU6ICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZnctPnByaV9mdyk7CisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJfQorCX0gZWxzZQorCQlmd19lbnRyeSA9IG9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCB0cnVlKTsKKworCS8qIExvYWQgcHJpbWFyeSBmaXJtd2FyZSAqLworCXJldCA9IHN5bWJvbF9kbF9pbWFnZShwcml2LCBmdywgZndfZW50cnktPmRhdGEsCisJCQkgICAgICBmd19lbnRyeS0+ZGF0YSArIGZ3X2VudHJ5LT5zaXplLCAwKTsKKworCWlmICghb3Jpbm9jb19jYWNoZWRfZndfZ2V0KHByaXYsIHRydWUpKQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFByaW1hcnkgZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIW9yaW5vY29fY2FjaGVkX2Z3X2dldChwcml2LCBmYWxzZSkpIHsKKwkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdy0+c3RhX2Z3LCBwcml2LT5kZXYpICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlOiAlc1xuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGZ3LT5zdGFfZncpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwl9IGVsc2UKKwkJZndfZW50cnkgPSBvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgZmFsc2UpOworCisJLyogTG9hZCBzZWNvbmRhcnkgZmlybXdhcmUgKi8KKwlyZXQgPSBzeW1ib2xfZGxfaW1hZ2UocHJpdiwgZncsIGZ3X2VudHJ5LT5kYXRhLAorCQkJICAgICAgZndfZW50cnktPmRhdGEgKyBmd19lbnRyeS0+c2l6ZSwgMSk7CisJaWYgKCFvcmlub2NvX2NhY2hlZF9md19nZXQocHJpdiwgZmFsc2UpKQorCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFNlY29uZGFyeSBmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBvcmlub2NvX2Rvd25sb2FkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaW50IGVyciA9IDA7CisJLyogUmVsb2FkIGZpcm13YXJlICovCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQkvKiBjYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6ICovCisJCWVyciA9IG9yaW5vY29fZGxfZmlybXdhcmUocHJpdiwKKwkJCQkJICAmb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXSwgMCk7CisJCWJyZWFrOworCisJY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKKwkJZXJyID0gc3ltYm9sX2RsX2Zpcm13YXJlKHByaXYsCisJCQkJCSAmb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXSk7CisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKKwkJYnJlYWs7CisJfQorCS8qIFRPRE86IGlmIHdlIGZhaWwgd2UgcHJvYmFibHkgbmVlZCB0byByZWluaXRpYWxpc2UKKwkgKiB0aGUgZHJpdmVyICovCisKKwlyZXR1cm4gZXJyOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQordm9pZCBvcmlub2NvX2NhY2hlX2Z3KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBhcCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5ID0gTlVMTDsKKwljb25zdCBjaGFyICpwcmlfZnc7CisJY29uc3QgY2hhciAqZnc7CisKKwlwcmlfZncgPSBvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLnByaV9mdzsKKwlpZiAoYXApCisJCWZ3ID0gb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXS5hcF9mdzsKKwllbHNlCisJCWZ3ID0gb3Jpbm9jb19md1twcml2LT5maXJtd2FyZV90eXBlXS5zdGFfZnc7CisKKwlpZiAocHJpX2Z3KSB7CisJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgcHJpX2Z3LCBwcml2LT5kZXYpID09IDApCisJCQlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gZndfZW50cnk7CisJfQorCisJaWYgKGZ3KSB7CisJCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgZncsIHByaXYtPmRldikgPT0gMCkKKwkJCXByaXYtPmNhY2hlZF9mdyA9IGZ3X2VudHJ5OworCX0KK30KKwordm9pZCBvcmlub2NvX3VuY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlpZiAocHJpdi0+Y2FjaGVkX3ByaV9mdykKKwkJcmVsZWFzZV9maXJtd2FyZShwcml2LT5jYWNoZWRfcHJpX2Z3KTsKKwlpZiAocHJpdi0+Y2FjaGVkX2Z3KQorCQlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmNhY2hlZF9mdyk7CisKKwlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gTlVMTDsKKwlwcml2LT5jYWNoZWRfZncgPSBOVUxMOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2Z3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlmYzI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vZncuaApAQCAtMCwwICsxLDIxIEBACisvKiBGaXJtd2FyZSBmaWxlIHJlYWRpbmcgYW5kIGRvd25sb2FkIGhlbHBlcnMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2lmbmRlZiBfT1JJTk9DT19GV19IXworI2RlZmluZSBfT1JJTk9DT19GV19IXworCisvKiBGb3J3YXJkIGRlY2xhdGlvbnMgKi8KK3N0cnVjdCBvcmlub2NvX3ByaXZhdGU7CisKK2ludCBvcmlub2NvX2Rvd25sb2FkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworCisjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQordm9pZCBvcmlub2NvX2NhY2hlX2Z3KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBhcCk7Cit2b2lkIG9yaW5vY29fdW5jYWNoZV9mdyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKKyNlbHNlCisjZGVmaW5lIG9yaW5vY29fY2FjaGVfZncocHJpdiwgYXApIGRvIHsgfSB3aGlsZSgwKQorI2RlZmluZSBvcmlub2NvX3VuY2FjaGVfZncocHJpdikgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfT1JJTk9DT19GV19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmMKaW5kZXggYmZhMzc1My4uZjJjOTE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5jCkBAIC0xNSw3ICsxNSw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAwLCBEYXZpZCBHaWJzb24sIExpbnV4Y2FyZSBBdXN0cmFsaWEuCiAgKiAoQykgQ29weXJpZ2h0IERhdmlkIEdpYnNvbiwgSUJNIENvcnAuIDIwMDEtMjAwMy4KLSAqIAorICoKICAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UKICAqIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KICAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlCkBAIC00NSwxMSArNDUsNiBAQAogCiAjaW5jbHVkZSAiaGVybWVzLmgiCiAKLU1PRFVMRV9ERVNDUklQVElPTigiTG93LWxldmVsIGRyaXZlciBoZWxwZXIgZm9yIEx1Y2VudCBIZXJtZXMgY2hpcHNldCBhbmQgUHJpc20gSUkgSEZBMzg0eCB3aXJlbGVzcyBNQUMgY29udHJvbGxlciIpOwotTU9EVUxFX0FVVEhPUigiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4iCi0JIiAmIERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKLQogLyogVGhlc2UgYXJlIG1heGltdW0gdGltZW91dHMuIE1vc3Qgb2Z0ZW4sIGNhcmQgd2lsIHJlYWN0IG11Y2ggZmFzdGVyICovCiAjZGVmaW5lIENNRF9CVVNZX1RJTUVPVVQgKDEwMCkgLyogSW4gaXRlcmF0aW9ucyBvZiB+MXVzICovCiAjZGVmaW5lIENNRF9JTklUX1RJTUVPVVQgKDUwMDAwKSAvKiBpbiBpdGVyYXRpb25zIG9mIH4xMHVzICovCkBAIC02MSwxMyArNTYsMTMgQEAKICAqLwogCiAjZGVmaW5lIERNU0coc3R1ZmYuLi4pIGRvIHtwcmludGsoS0VSTl9ERUJVRyAiaGVybWVzIEAgJXA6ICIgLCBody0+aW9iYXNlKTsgXAotCQkJcHJpbnRrKHN0dWZmKTt9IHdoaWxlICgwKQorCQkJcHJpbnRrKHN0dWZmKTsgfSB3aGlsZSAoMCkKIAogI3VuZGVmIEhFUk1FU19ERUJVRwogI2lmZGVmIEhFUk1FU19ERUJVRwogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCi0jZGVmaW5lIERFQlVHKGx2bCwgc3R1ZmYuLi4pIGlmICggKGx2bCkgPD0gSEVSTUVTX0RFQlVHKSBETVNHKHN0dWZmKQorI2RlZmluZSBERUJVRyhsdmwsIHN0dWZmLi4uKSBpZiAoKGx2bCkgPD0gSEVSTUVTX0RFQlVHKSBETVNHKHN0dWZmKQogCiAjZWxzZSAvKiAhIEhFUk1FU19ERUJVRyAqLwogCkBAIC05NSwyMCArOTAsMTkgQEAKIAogCS8qIEZpcnN0IHdhaXQgZm9yIHRoZSBjb21tYW5kIHJlZ2lzdGVyIHRvIHVuYnVzeSAqLwogCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIENNRCk7Ci0Jd2hpbGUgKCAocmVnICYgSEVSTUVTX0NNRF9CVVNZKSAmJiBrICkgeworCXdoaWxlICgocmVnICYgSEVSTUVTX0NNRF9CVVNZKSAmJiBrKSB7CiAJCWstLTsKIAkJdWRlbGF5KDEpOwogCQlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBDTUQpOwogCX0KLQlpZiAocmVnICYgSEVSTUVTX0NNRF9CVVNZKSB7CisJaWYgKHJlZyAmIEhFUk1FU19DTURfQlVTWSkKIAkJcmV0dXJuIC1FQlVTWTsKLQl9CiAKIAloZXJtZXNfd3JpdGVfcmVnbihodywgUEFSQU0yLCBwYXJhbTIpOwogCWhlcm1lc193cml0ZV9yZWduKGh3LCBQQVJBTTEsIHBhcmFtMSk7CiAJaGVybWVzX3dyaXRlX3JlZ24oaHcsIFBBUkFNMCwgcGFyYW0wKTsKIAloZXJtZXNfd3JpdGVfcmVnbihodywgQ01ELCBjbWQpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5MSwyMyArMTg1LDIzIEBACiAJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCAweGZmZmYpOwogCiAJLyogTm9ybWFsbHkgaXQncyBhICJjYW4ndCBoYXBwZW4iIGZvciB0aGUgY29tbWFuZCByZWdpc3RlciB0bwotICAgICAgICAgICBiZSBidXN5IHdoZW4gd2UgZ28gdG8gaXNzdWUgYSBjb21tYW5kIGJlY2F1c2Ugd2UgYXJlCi0gICAgICAgICAgIHNlcmlhbGl6aW5nIGFsbCBjb21tYW5kcy4gIEhvd2V2ZXIgd2Ugd2FudCB0byBoYXZlIHNvbWUKLSAgICAgICAgICAgY2hhbmNlIG9mIHJlc2V0dGluZyB0aGUgY2FyZCBldmVuIGlmIGl0IGdldHMgaW50byBhIHN0dXBpZAotICAgICAgICAgICBzdGF0ZSwgc28gd2UgYWN0dWFsbHkgd2FpdCB0byBzZWUgaWYgdGhlIGNvbW1hbmQgcmVnaXN0ZXIKLSAgICAgICAgICAgd2lsbCB1bmJ1c3kgaXRzZWxmIGhlcmUuICovCisJICAgYmUgYnVzeSB3aGVuIHdlIGdvIHRvIGlzc3VlIGEgY29tbWFuZCBiZWNhdXNlIHdlIGFyZQorCSAgIHNlcmlhbGl6aW5nIGFsbCBjb21tYW5kcy4gIEhvd2V2ZXIgd2Ugd2FudCB0byBoYXZlIHNvbWUKKwkgICBjaGFuY2Ugb2YgcmVzZXR0aW5nIHRoZSBjYXJkIGV2ZW4gaWYgaXQgZ2V0cyBpbnRvIGEgc3R1cGlkCisJICAgc3RhdGUsIHNvIHdlIGFjdHVhbGx5IHdhaXQgdG8gc2VlIGlmIHRoZSBjb21tYW5kIHJlZ2lzdGVyCisJICAgd2lsbCB1bmJ1c3kgaXRzZWxmIGhlcmUuICovCiAJayA9IENNRF9CVVNZX1RJTUVPVVQ7CiAJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgQ01EKTsKIAl3aGlsZSAoayAmJiAocmVnICYgSEVSTUVTX0NNRF9CVVNZKSkgewotCQlpZiAocmVnID09IDB4ZmZmZikgLyogU3BlY2lhbCBjYXNlIC0gdGhlIGNhcmQgaGFzIHByb2JhYmx5IGJlZW4gcmVtb3ZlZCwKLQkJCQkgICAgICBzbyBkb24ndCB3YWl0IGZvciB0aGUgdGltZW91dCAqLworCQlpZiAocmVnID09IDB4ZmZmZikgLyogU3BlY2lhbCBjYXNlIC0gdGhlIGNhcmQgaGFzIHByb2JhYmx5IGJlZW4KKwkJCQkgICAgICByZW1vdmVkLCBzbyBkb24ndCB3YWl0IGZvciB0aGUgdGltZW91dCAqLwogCQkJcmV0dXJuIC1FTk9ERVY7CiAKIAkJay0tOwogCQl1ZGVsYXkoMSk7CiAJCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIENNRCk7CiAJfQotCQorCiAJLyogTm8gbmVlZCB0byBleHBsaWNpdGx5IGhhbmRsZSB0aGUgdGltZW91dCAtIGlmIHdlJ3ZlIHRpbWVkCiAJICAgb3V0IGhlcm1lc19pc3N1ZV9jbWQoKSB3aWxsIHByb2JhYmx5IHJldHVybiAtRUJVU1kgYmVsb3cgKi8KIApAQCAtMjI4LDcgKzIyMiwxMCBAQAogLyogSXNzdWUgYSBjb21tYW5kIHRvIHRoZSBjaGlwLCBhbmQgKGJ1c3khKSB3YWl0IGZvciBpdCB0bwogICogY29tcGxldGUuCiAgKgotICogUmV0dXJuczogPCAwIG9uIGludGVybmFsIGVycm9yLCAwIG9uIHN1Y2Nlc3MsID4gMCBvbiBlcnJvciByZXR1cm5lZCBieSB0aGUgZmlybXdhcmUKKyAqIFJldHVybnM6CisgKiAgICAgPCAwIG9uIGludGVybmFsIGVycm9yCisgKiAgICAgICAwIG9uIHN1Y2Nlc3MKKyAqICAgICA+IDAgb24gZXJyb3IgcmV0dXJuZWQgYnkgdGhlIGZpcm13YXJlCiAgKgogICogQ2FsbGFibGUgZnJvbSBhbnkgY29udGV4dCwgYnV0IGxvY2tpbmcgaXMgeW91ciBwcm9ibGVtLiAqLwogaW50IGhlcm1lc19kb2NtZF93YWl0KGhlcm1lc190ICpodywgdTE2IGNtZCwgdTE2IHBhcm0wLApAQCAtMjQxLDEzICsyMzgsMTMgQEAKIAogCWVyciA9IGhlcm1lc19pc3N1ZV9jbWQoaHcsIGNtZCwgcGFybTAsIDAsIDApOwogCWlmIChlcnIpIHsKLQkJaWYgKCEgaGVybWVzX3ByZXNlbnQoaHcpKSB7CisJCWlmICghaGVybWVzX3ByZXNlbnQoaHcpKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImhlcm1lcyBAICVwOiAiCiAJCQkJICAgICAgICJDYXJkIHJlbW92ZWQgd2hpbGUgaXNzdWluZyBjb21tYW5kICIKIAkJCQkgICAgICAgIjB4JTA0eC5cbiIsIGh3LT5pb2Jhc2UsIGNtZCk7CiAJCQllcnIgPSAtRU5PREVWOwotCQl9IGVsc2UgCisJCX0gZWxzZQogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQlwcmludGsoS0VSTl9FUlIgImhlcm1lcyBAICVwOiAiCiAJCQkJICAgICAgICJFcnJvciAlZCBpc3N1aW5nIGNvbW1hbmQgMHglMDR4LlxuIiwKQEAgLTI1NywyMSArMjU0LDIxIEBACiAKIAlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBFVlNUQVQpOwogCWsgPSBDTURfQ09NUExfVElNRU9VVDsKLQl3aGlsZSAoICghIChyZWcgJiBIRVJNRVNfRVZfQ01EKSkgJiYgaykgeworCXdoaWxlICgoIShyZWcgJiBIRVJNRVNfRVZfQ01EKSkgJiYgaykgewogCQlrLS07CiAJCXVkZWxheSgxMCk7CiAJCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7CiAJfQogCi0JaWYgKCEgaGVybWVzX3ByZXNlbnQoaHcpKSB7CisJaWYgKCFoZXJtZXNfcHJlc2VudChodykpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGVybWVzIEAgJXA6IENhcmQgcmVtb3ZlZCAiCiAJCSAgICAgICAid2hpbGUgd2FpdGluZyBmb3IgY29tbWFuZCAweCUwNHggY29tcGxldGlvbi5cbiIsCiAJCSAgICAgICBody0+aW9iYXNlLCBjbWQpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9Ci0JCQotCWlmICghIChyZWcgJiBIRVJNRVNfRVZfQ01EKSkgeworCisJaWYgKCEocmVnICYgSEVSTUVTX0VWX0NNRCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZXJtZXMgQCAlcDogVGltZW91dCB3YWl0aW5nIGZvciAiCiAJCSAgICAgICAiY29tbWFuZCAweCUwNHggY29tcGxldGlvbi5cbiIsIGh3LT5pb2Jhc2UsIGNtZCk7CiAJCWVyciA9IC1FVElNRURPVVQ7CkBAIC0zMDEsMzEgKzI5OCwzMCBAQAogCWludCBlcnIgPSAwOwogCWludCBrOwogCXUxNiByZWc7Ci0JCi0JaWYgKCAoc2l6ZSA8IEhFUk1FU19BTExPQ19MRU5fTUlOKSB8fCAoc2l6ZSA+IEhFUk1FU19BTExPQ19MRU5fTUFYKSApCisKKwlpZiAoKHNpemUgPCBIRVJNRVNfQUxMT0NfTEVOX01JTikgfHwgKHNpemUgPiBIRVJNRVNfQUxMT0NfTEVOX01BWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfQUxMT0MsIHNpemUsIE5VTEwpOwotCWlmIChlcnIpIHsKKwlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCX0KIAogCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7CiAJayA9IEFMTE9DX0NPTVBMX1RJTUVPVVQ7Ci0Jd2hpbGUgKCAoISAocmVnICYgSEVSTUVTX0VWX0FMTE9DKSkgJiYgaykgeworCXdoaWxlICgoIShyZWcgJiBIRVJNRVNfRVZfQUxMT0MpKSAmJiBrKSB7CiAJCWstLTsKIAkJdWRlbGF5KDEwKTsKIAkJcmVnID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKIAl9Ci0JCi0JaWYgKCEgaGVybWVzX3ByZXNlbnQoaHcpKSB7CisKKwlpZiAoIWhlcm1lc19wcmVzZW50KGh3KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZXJtZXMgQCAlcDogIgogCQkgICAgICAgIkNhcmQgcmVtb3ZlZCB3YWl0aW5nIGZvciBmcmFtZSBhbGxvY2F0aW9uLlxuIiwKIAkJICAgICAgIGh3LT5pb2Jhc2UpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JCQotCWlmICghIChyZWcgJiBIRVJNRVNfRVZfQUxMT0MpKSB7CisKKwlpZiAoIShyZWcgJiBIRVJNRVNfRVZfQUxMT0MpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGVybWVzIEAgJXA6ICIKIAkJICAgICAgICJUaW1lb3V0IHdhaXRpbmcgZm9yIGZyYW1lIGFsbG9jYXRpb25cbiIsCiAJCSAgICAgICBody0+aW9iYXNlKTsKQEAgLTMzNCwxNCArMzMwLDE3IEBACiAKIAkqZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgQUxMT0NGSUQpOwogCWhlcm1lc193cml0ZV9yZWduKGh3LCBFVkFDSywgSEVSTUVTX0VWX0FMTE9DKTsKLQkKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChoZXJtZXNfYWxsb2NhdGUpOwogCiAvKiBTZXQgdXAgYSBCQVAgdG8gcmVhZCBhIHBhcnRpY3VsYXIgY2h1bmsgb2YgZGF0YSBmcm9tIGNhcmQncyBpbnRlcm5hbCBidWZmZXIuCiAgKgotICogUmV0dXJuczogPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKSwgMCBvbiBzdWNjZXNzLCA+MCBvbiBlcnJvcgorICogUmV0dXJuczoKKyAqICAgICA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pCisgKiAgICAgICAwIG9uIHN1Y2Nlc3MKKyAqICAgICA+IDAgb24gZXJyb3IKICAqIGZyb20gZmlybXdhcmUKICAqCiAgKiBDYWxsYWJsZSBmcm9tIGFueSBjb250ZXh0ICovCkBAIC0zNTMsNyArMzUyLDcgQEAKIAl1MTYgcmVnOwogCiAJLyogUGFyYW5vaWEuLiAqLwotCWlmICggKG9mZnNldCA+IEhFUk1FU19CQVBfT0ZGU0VUX01BWCkgfHwgKG9mZnNldCAlIDIpICkKKwlpZiAoKG9mZnNldCA+IEhFUk1FU19CQVBfT0ZGU0VUX01BWCkgfHwgKG9mZnNldCAlIDIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWsgPSBIRVJNRVNfQkFQX0JVU1lfVElNRU9VVDsKQEAgLTM3NCw3ICszNzMsNyBAQAogCS8qIFdhaXQgZm9yIHRoZSBCQVAgdG8gYmUgcmVhZHkgKi8KIAlrID0gSEVSTUVTX0JBUF9CVVNZX1RJTUVPVVQ7CiAJcmVnID0gaGVybWVzX3JlYWRfcmVnKGh3LCBvcmVnKTsKLQl3aGlsZSAoIChyZWcgJiAoSEVSTUVTX09GRlNFVF9CVVNZIHwgSEVSTUVTX09GRlNFVF9FUlIpKSAmJiBrKSB7CisJd2hpbGUgKChyZWcgJiAoSEVSTUVTX09GRlNFVF9CVVNZIHwgSEVSTUVTX09GRlNFVF9FUlIpKSAmJiBrKSB7CiAJCWstLTsKIAkJdWRlbGF5KDEpOwogCQlyZWcgPSBoZXJtZXNfcmVhZF9yZWcoaHcsIG9yZWcpOwpAQCAtMzg2LDkgKzM4NSw4IEBACiAJCSAgICAgICAocmVnICYgSEVSTUVTX09GRlNFVF9CVVNZKSA/ICJ0aW1lb3V0IiA6ICJlcnJvciIsCiAJCSAgICAgICByZWcsIGlkLCBvZmZzZXQpOwogCi0JCWlmIChyZWcgJiBIRVJNRVNfT0ZGU0VUX0JVU1kpIHsKKwkJaWYgKHJlZyAmIEhFUk1FU19PRkZTRVRfQlVTWSkKIAkJCXJldHVybiAtRVRJTUVET1VUOwotCQl9CiAKIAkJcmV0dXJuIC1FSU87CQkvKiBlcnJvciBvciB3cm9uZyBvZmZzZXQgKi8KIAl9CkBAIC00MDAsNyArMzk4LDEwIEBACiAgKiBCQVAuIFN5bmNocm9uaXphdGlvbi9zZXJpYWxpemF0aW9uIGlzIHRoZSBjYWxsZXIncyBwcm9ibGVtLiAgbGVuCiAgKiBtdXN0IGJlIGV2ZW4uCiAgKgotICogUmV0dXJuczogPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKSwgMCBvbiBzdWNjZXNzLCA+IDAgb24gZXJyb3IgZnJvbSBmaXJtd2FyZQorICogUmV0dXJuczoKKyAqICAgICA8IDAgb24gaW50ZXJuYWwgZmFpbHVyZSAoZXJybm8pCisgKiAgICAgICAwIG9uIHN1Y2Nlc3MKKyAqICAgICA+IDAgb24gZXJyb3IgZnJvbSBmaXJtd2FyZQogICovCiBpbnQgaGVybWVzX2JhcF9wcmVhZChoZXJtZXNfdCAqaHcsIGludCBiYXAsIHZvaWQgKmJ1ZiwgaW50IGxlbiwKIAkJICAgICB1MTYgaWQsIHUxNiBvZmZzZXQpCkBAIC00MDgsNyArNDA5LDcgQEAKIAlpbnQgZHJlZyA9IGJhcCA/IEhFUk1FU19EQVRBMSA6IEhFUk1FU19EQVRBMDsKIAlpbnQgZXJyID0gMDsKIAotCWlmICggKGxlbiA8IDApIHx8IChsZW4gJSAyKSApCisJaWYgKChsZW4gPCAwKSB8fCAobGVuICUgMikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZXJyID0gaGVybWVzX2JhcF9zZWVrKGh3LCBiYXAsIGlkLCBvZmZzZXQpOwpAQCAtNDI2LDcgKzQyNywxMCBAQAogLyogV3JpdGUgYSBibG9jayBvZiBkYXRhIHRvIHRoZSBjaGlwJ3MgYnVmZmVyLCB2aWEgdGhlCiAgKiBCQVAuIFN5bmNocm9uaXphdGlvbi9zZXJpYWxpemF0aW9uIGlzIHRoZSBjYWxsZXIncyBwcm9ibGVtLgogICoKLSAqIFJldHVybnM6IDwgMCBvbiBpbnRlcm5hbCBmYWlsdXJlIChlcnJubyksIDAgb24gc3VjY2VzcywgPiAwIG9uIGVycm9yIGZyb20gZmlybXdhcmUKKyAqIFJldHVybnM6CisgKiAgICAgPCAwIG9uIGludGVybmFsIGZhaWx1cmUgKGVycm5vKQorICogICAgICAgMCBvbiBzdWNjZXNzCisgKiAgICAgPiAwIG9uIGVycm9yIGZyb20gZmlybXdhcmUKICAqLwogaW50IGhlcm1lc19iYXBfcHdyaXRlKGhlcm1lc190ICpodywgaW50IGJhcCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbGVuLAogCQkgICAgICB1MTYgaWQsIHUxNiBvZmZzZXQpCkBAIC00NDAsMTEgKzQ0NCwxMSBAQAogCWVyciA9IGhlcm1lc19iYXBfc2VlayhodywgYmFwLCBpZCwgb2Zmc2V0KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLQkKKwogCS8qIEFjdHVhbGx5IGRvIHRoZSB0cmFuc2ZlciAqLwogCWhlcm1lc193cml0ZV9ieXRlcyhodywgZHJlZywgYnVmLCBsZW4pOwogCi0gb3V0OgkKKyBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woaGVybWVzX2JhcF9wd3JpdGUpOwpAQCAtNDY1LDcgKzQ2OSw3IEBACiAJdTE2IHJsZW5ndGgsIHJ0eXBlOwogCXVuc2lnbmVkIG53b3JkczsKIAotCWlmICggKGJ1ZnNpemUgPCAwKSB8fCAoYnVmc2l6ZSAlIDIpICkKKwlpZiAoKGJ1ZnNpemUgPCAwKSB8fCAoYnVmc2l6ZSAlIDIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX0FDQ0VTUywgcmlkLCBOVUxMKTsKQEAgLTQ3OCw3ICs0ODIsNyBAQAogCiAJcmxlbmd0aCA9IGhlcm1lc19yZWFkX3JlZyhodywgZHJlZyk7CiAKLQlpZiAoISBybGVuZ3RoKQorCWlmICghcmxlbmd0aCkKIAkJcmV0dXJuIC1FTk9EQVRBOwogCiAJcnR5cGUgPSBoZXJtZXNfcmVhZF9yZWcoaHcsIGRyZWcpOwpAQCAtNTAzLDcgKzUwNyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGhlcm1lc19yZWFkX2x0dik7CiAKLWludCBoZXJtZXNfd3JpdGVfbHR2KGhlcm1lc190ICpodywgaW50IGJhcCwgdTE2IHJpZCwgCitpbnQgaGVybWVzX3dyaXRlX2x0dihoZXJtZXNfdCAqaHcsIGludCBiYXAsIHUxNiByaWQsCiAJCSAgICAgdTE2IGxlbmd0aCwgY29uc3Qgdm9pZCAqdmFsdWUpCiB7CiAJaW50IGRyZWcgPSBiYXAgPyBIRVJNRVNfREFUQTEgOiBIRVJNRVNfREFUQTA7CkBAIC01MzAsMTUgKzUzNCwzIEBACiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woaGVybWVzX3dyaXRlX2x0dik7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfaGVybWVzKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2hlcm1lcyh2b2lkKQotewotfQotCi1tb2R1bGVfaW5pdChpbml0X2hlcm1lcyk7Ci1tb2R1bGVfZXhpdChleGl0X2hlcm1lcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXMuaAppbmRleCA4YjEzYzhmLi5jNzhjNDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzLmgKQEAgLTE1LDcgKzE1LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwMCwgRGF2aWQgR2lic29uLCBMaW51eGNhcmUgQXVzdHJhbGlhLgogICogKEMpIENvcHlyaWdodCBEYXZpZCBHaWJzb24sIElCTSBDb3JwLiAyMDAxLTIwMDMuCiAgKgotICogUG9ydGlvbnMgdGFrZW4gZnJvbSBoZmEzODR4LmgsIENvcHlyaWdodCAoQykgMTk5OSBBYnNvbHV0ZVZhbHVlIFN5c3RlbXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFBvcnRpb25zIHRha2VuIGZyb20gaGZhMzg0eC5oLgorICogQ29weXJpZ2h0IChDKSAxOTk5IEFic29sdXRlVmFsdWUgU3lzdGVtcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgZmlsZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgR1BMLCB2ZXJzaW9uIDIuCiAgKi8KQEAgLTMxLDcgKzMyLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIC8qCiAgKiBMaW1pdHMgYW5kIGNvbnN0YW50cwpAQCAtMjAzLDcgKzIwNCw3IEBACiAJX19sZTMyIHN3X3N1cHBvcnQ7CiAJdTggcmV0cnlfY291bnQ7CiAJdTggdHhfcmF0ZTsKLQlfX2xlMTYgdHhfY29udHJvbDsJCisJX19sZTE2IHR4X2NvbnRyb2w7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2RlZmluZSBIRVJNRVNfVFhTVEFUX1JFVFJZRVJSCQkoMHgwMDAxKQpAQCAtMjk4LDcgKzI5OSw3IEBACiAJLyogYml0czogMC1lc3MsIDEtaWJzcywgNC1wcml2YWN5IFt3ZXBdICovCiAJX19sZTE2IGVzc2lkX2xlbjsJLyogRVNTSUQgbGVuZ3RoICovCiAJdTggZXNzaWRbMzJdOwkJLyogRVNTSUQgb2YgdGhlIG5ldHdvcmsgKi8KLSAgICAJX19sZTE2IHJhdGVzWzVdOwkvKiBCaXQgcmF0ZSBzdXBwb3J0ZWQgKi8KKwlfX2xlMTYgcmF0ZXNbNV07CS8qIEJpdCByYXRlIHN1cHBvcnRlZCAqLwogCV9fbGUxNiBiYXNpY19yYXRlczsJLyogQmFzaWMgcmF0ZXMgYml0bWFzayAqLwogCXU4IHVua25vd24yWzZdOwkJLyogQWx3YXlzIEZGOkZGOkZGOkZGOjAwOjAwICovCiAJdTggdW5rbm93bjNbOF07CQkvKiBBbHdheXMgMCwgYXBwZWFyZWQgaW4gZi93IDMuOTEtNjggKi8KQEAgLTM0NCwxNCArMzQ1LDE0IEBACiAJdTgJZGF0YVszMTZdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfTk9UX0NPTk5FQ1RFRCAgICgweDAwMDApICAKKyNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfTk9UX0NPTk5FQ1RFRCAgICgweDAwMDApCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX0NPTk5FQ1RFRCAgICAgICAoMHgwMDAxKQogI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19ESVNDT05ORUNURUQgICAgKDB4MDAwMikKICNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfQVBfQ0hBTkdFICAgICAgICgweDAwMDMpCiAjZGVmaW5lIEhFUk1FU19MSU5LU1RBVFVTX0FQX09VVF9PRl9SQU5HRSAoMHgwMDA0KQogI2RlZmluZSBIRVJNRVNfTElOS1NUQVRVU19BUF9JTl9SQU5HRSAgICAgKDB4MDAwNSkKICNkZWZpbmUgSEVSTUVTX0xJTktTVEFUVVNfQVNTT0NfRkFJTEVEICAgICgweDAwMDYpCi0gIAorCiBzdHJ1Y3QgaGVybWVzX2xpbmtzdGF0dXMgewogCV9fbGUxNiBsaW5rc3RhdHVzOyAgICAgICAgIC8qIExpbmsgc3RhdHVzICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKQEAgLTM4NCwxMSArMzg1LDEyIEBACiAKIC8qIFJlZ2lzdGVyIGFjY2VzcyBjb252ZW5pZW5jZSBtYWNyb3MgKi8KICNkZWZpbmUgaGVybWVzX3JlYWRfcmVnKGh3LCBvZmYpIFwKLQkoaW9yZWFkMTYoKGh3KS0+aW9iYXNlICsgKCAob2ZmKSA8PCAoaHcpLT5yZWdfc3BhY2luZyApKSkKKwkoaW9yZWFkMTYoKGh3KS0+aW9iYXNlICsgKChvZmYpIDw8IChodyktPnJlZ19zcGFjaW5nKSkpCiAjZGVmaW5lIGhlcm1lc193cml0ZV9yZWcoaHcsIG9mZiwgdmFsKSBcCiAJKGlvd3JpdGUxNigodmFsKSwgKGh3KS0+aW9iYXNlICsgKChvZmYpIDw8IChodyktPnJlZ19zcGFjaW5nKSkpCiAjZGVmaW5lIGhlcm1lc19yZWFkX3JlZ24oaHcsIG5hbWUpIGhlcm1lc19yZWFkX3JlZygoaHcpLCBIRVJNRVNfIyNuYW1lKQotI2RlZmluZSBoZXJtZXNfd3JpdGVfcmVnbihodywgbmFtZSwgdmFsKSBoZXJtZXNfd3JpdGVfcmVnKChodyksIEhFUk1FU18jI25hbWUsICh2YWwpKQorI2RlZmluZSBoZXJtZXNfd3JpdGVfcmVnbihodywgbmFtZSwgdmFsKSBcCisJaGVybWVzX3dyaXRlX3JlZygoaHcpLCBIRVJNRVNfIyNuYW1lLCAodmFsKSkKIAogLyogRnVuY3Rpb24gcHJvdG90eXBlcyAqLwogdm9pZCBoZXJtZXNfc3RydWN0X2luaXQoaGVybWVzX3QgKmh3LCB2b2lkIF9faW9tZW0gKmFkZHJlc3MsIGludCByZWdfc3BhY2luZyk7CkBAIC00MzAsNyArNDMyLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaGVybWVzX2Rpc2FibGVfcG9ydChoZXJtZXNfdCAqaHcsIGludCBwb3J0KQogewotCXJldHVybiBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9ESVNBQkxFIHwgKHBvcnQgPDwgOCksIAorCXJldHVybiBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9ESVNBQkxFIHwgKHBvcnQgPDwgOCksCiAJCQkJIDAsIE5VTEwpOwogfQogCkBAIC00NDEsMTEgKzQ0MywxMiBAQAogCXJldHVybiBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9JTlFVSVJFLCByaWQsIE5VTEwpOwogfQogCi0jZGVmaW5lIEhFUk1FU19CWVRFU19UT19SRUNMRU4obikgKCAoKChuKSsxKS8yKSArIDEgKQotI2RlZmluZSBIRVJNRVNfUkVDTEVOX1RPX0JZVEVTKG4pICggKChuKS0xKSAqIDIgKQorI2RlZmluZSBIRVJNRVNfQllURVNfVE9fUkVDTEVOKG4pICgoKChuKSsxKS8yKSArIDEpCisjZGVmaW5lIEhFUk1FU19SRUNMRU5fVE9fQllURVMobikgKCgobiktMSkgKiAyKQogCiAvKiBOb3RlIHRoYXQgZm9yIHRoZSBuZXh0IHR3bywgdGhlIGNvdW50IGlzIGluIDE2LWJpdCB3b3Jkcywgbm90IGJ5dGVzICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaGVybWVzX3JlYWRfd29yZHMoc3RydWN0IGhlcm1lcyAqaHcsIGludCBvZmYsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgaGVybWVzX3JlYWRfd29yZHMoc3RydWN0IGhlcm1lcyAqaHcsIGludCBvZmYsCisJCQkJICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGNvdW50KQogewogCW9mZiA9IG9mZiA8PCBody0+cmVnX3NwYWNpbmc7CiAJaW9yZWFkMTZfcmVwKGh3LT5pb2Jhc2UgKyBvZmYsIGJ1ZiwgY291bnQpOwpAQCAtNDYwLDcgKzQ2Myw4IEBACiAJCWlvd3JpdGU4KGJ1Zltjb3VudCAtIDFdLCBody0+aW9iYXNlICsgb2ZmKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGhlcm1lc19jbGVhcl93b3JkcyhzdHJ1Y3QgaGVybWVzICpodywgaW50IG9mZiwgdW5zaWduZWQgY291bnQpCitzdGF0aWMgaW5saW5lIHZvaWQgaGVybWVzX2NsZWFyX3dvcmRzKHN0cnVjdCBoZXJtZXMgKmh3LCBpbnQgb2ZmLAorCQkJCSAgICAgIHVuc2lnbmVkIGNvdW50KQogewogCXVuc2lnbmVkIGk7CiAKQEAgLTQ3MSw5ICs0NzUsMTAgQEAKIH0KIAogI2RlZmluZSBIRVJNRVNfUkVBRF9SRUNPUkQoaHcsIGJhcCwgcmlkLCBidWYpIFwKLQkoaGVybWVzX3JlYWRfbHR2KChodyksKGJhcCksKHJpZCksIHNpemVvZigqYnVmKSwgTlVMTCwgKGJ1ZikpKQorCShoZXJtZXNfcmVhZF9sdHYoKGh3KSwgKGJhcCksIChyaWQpLCBzaXplb2YoKmJ1ZiksIE5VTEwsIChidWYpKSkKICNkZWZpbmUgSEVSTUVTX1dSSVRFX1JFQ09SRChodywgYmFwLCByaWQsIGJ1ZikgXAotCShoZXJtZXNfd3JpdGVfbHR2KChodyksKGJhcCksKHJpZCksSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzaXplb2YoKmJ1ZikpLChidWYpKSkKKwkoaGVybWVzX3dyaXRlX2x0digoaHcpLCAoYmFwKSwgKHJpZCksIFwKKwkJCSAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzaXplb2YoKmJ1ZikpLCAoYnVmKSkpCiAKIHN0YXRpYyBpbmxpbmUgaW50IGhlcm1lc19yZWFkX3dvcmRyZWMoaGVybWVzX3QgKmh3LCBpbnQgYmFwLCB1MTYgcmlkLCB1MTYgKndvcmQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2hlcm1lc19kbGQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5jCmluZGV4IGQ4YzYyNmUuLmE5YmExOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5jCkBAIC0xLDEzICsxLDcgQEAKIC8qCi0gKiBIZXJtZXMgZG93bmxvYWQgaGVscGVyIGRyaXZlci4KKyAqIEhlcm1lcyBkb3dubG9hZCBoZWxwZXIuCiAgKgotICogVGhpcyBjb3VsZCBiZSBlbnRpcmVseSBtZXJnZWQgaW50byBoZXJtZXMuYy4KLSAqCi0gKiBJJ20ga2VlcGluZyBpdCBzZXBhcmF0ZSB0byBtaW5pbWlzZSB0aGUgYW1vdW50IG9mIG1lcmdpbmcgYmV0d2VlbgotICoga2VybmVsIHVwZ3JhZGVzLiBJdCBhbHNvIG1lYW5zIHRoZSBtZW1vcnkgb3ZlcmhlYWQgZm9yIGRyaXZlcnMgdGhhdAotICogZG9uJ3QgbmVlZCBmaXJtd2FyZSBkb3dubG9hZCBsb3cuCi0gKgotICogVGhpcyBkcml2ZXI6CisgKiBUaGlzIGhlbHBlcjoKICAqICAtIGlzIGNhcGFibGUgb2Ygd3JpdGluZyB0byB0aGUgdm9sYXRpbGUgYXJlYSBvZiB0aGUgaGVybWVzIGRldmljZQogICogIC0gaXMgY3VycmVudGx5IG5vdCBjYXBhYmxlIG9mIHdyaXRpbmcgdG8gbm9uLXZvbGF0aWxlIGFyZWFzCiAgKiAgLSBwcm92aWRlIGhlbHBlcnMgdG8gaWRlbnRpZnkgYW5kIHVwZGF0ZSBwbHVnaW4gZGF0YQpAQCAtNTAsMTAgKzQ0LDYgQEAKICNpbmNsdWRlICJoZXJtZXMuaCIKICNpbmNsdWRlICJoZXJtZXNfZGxkLmgiCiAKLU1PRFVMRV9ERVNDUklQVElPTigiRG93bmxvYWQgaGVscGVyIGZvciBMdWNlbnQgSGVybWVzIGNoaXBzZXQiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmlkIEtpbHJveSA8a2lscm95ZEBnbWFpbC5jb20+Iik7Ci1NT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7Ci0KICNkZWZpbmUgUEZYICJoZXJtZXNfZGxkOiAiCiAKIC8qCkBAIC04MSwxOCArNzEsNiBAQAogI2RlZmluZSBCTE9DS19FTkQJMHhGRkZGRkZGRgkvKiBMYXN0IGltYWdlIGJsb2NrICovCiAjZGVmaW5lIFRFWFRfRU5ECTB4MUEJCS8qIEVuZCBvZiB0ZXh0IGhlYWRlciAqLwogCi0vKgotICogUERBID09IFByb2R1Y3Rpb24gRGF0YSBBcmVhCi0gKgotICogSW4gcHJpbmNpcGxlLCB0aGUgbWF4LiBzaXplIG9mIHRoZSBQREEgaXMgaXMgNDA5NiB3b3Jkcy4gQ3VycmVudGx5LAotICogaG93ZXZlciwgb25seSBhYm91dCA1MDAgYnl0ZXMgb2YgdGhpcyBhcmVhIGFyZSB1c2VkLgotICoKLSAqIFNvbWUgVVNCIGltcGxlbWVudGF0aW9ucyBjYW4ndCBoYW5kbGUgc2l6ZXMgaW4gZXhjZXNzIG9mIDEwMTYuIE5vdGUKLSAqIHRoYXQgUERBIGlzIG5vdCBhY3R1YWxseSB1c2VkIGluIHRob3NlIFVTQiBlbnZpcm9ubWVudHMsIGJ1dCBtYXkgYmUKLSAqIHJldHJpZXZlZCBieSBjb21tb24gY29kZS4KLSAqLwotI2RlZmluZSBNQVhfUERBX1NJWkUJMTAwMAotCiAvKiBMaW1pdCB0aGUgYW1vdXQgd2UgdHJ5IHRvIGRvd25sb2FkIGluIGEgc2luZ2xlIHNob3QuCiAgKiBTaXplIGlzIGluIGJ5dGVzLgogICovCkBAIC0yMjgsMTMgKzIwNiwxNCBAQAogICogU2NhbiBQRFIgZm9yIHRoZSByZWNvcmQgd2l0aCB0aGUgc3BlY2lmaWVkIFJFQ09SRF9JRC4KICAqIElmIGl0J3Mgbm90IGZvdW5kLCByZXR1cm4gTlVMTC4KICAqLwotc3RhdGljIHN0cnVjdCBwZHIgKgotaGVybWVzX2ZpbmRfcGRyKHN0cnVjdCBwZHIgKmZpcnN0X3BkciwgdTMyIHJlY29yZF9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGRyICoKK2hlcm1lc19maW5kX3Bkcihjb25zdCBzdHJ1Y3QgcGRyICpmaXJzdF9wZHIsIHUzMiByZWNvcmRfaWQsIGNvbnN0IHZvaWQgKmVuZCkKIHsKLQlzdHJ1Y3QgcGRyICpwZHIgPSBmaXJzdF9wZHI7Ci0Jdm9pZCAqZW5kID0gKHZvaWQgKilmaXJzdF9wZHIgKyBNQVhfUERBX1NJWkU7CisJY29uc3Qgc3RydWN0IHBkciAqcGRyID0gZmlyc3RfcGRyOwogCi0Jd2hpbGUgKCgodm9pZCAqKXBkciA8IGVuZCkgJiYKKwllbmQgLT0gc2l6ZW9mKHN0cnVjdCBwZHIpOworCisJd2hpbGUgKCgodm9pZCAqKSBwZHIgPD0gZW5kKSAmJgogCSAgICAgICAocGRyX2lkKHBkcikgIT0gUERJX0VORCkpIHsKIAkJLyoKIAkJICogUERSIGFyZWEgaXMgY3VycmVudGx5IG5vdCB0ZXJtaW5hdGVkIGJ5IFBESV9FTkQuCkBAIC0yNTQsMTIgKzIzMywxNSBAQAogfQogCiAvKiBTY2FuIHByb2R1Y3Rpb24gZGF0YSBpdGVtcyBmb3IgYSBwYXJ0aWN1bGFyIGVudHJ5ICovCi1zdGF0aWMgc3RydWN0IHBkaSAqCi1oZXJtZXNfZmluZF9wZGkoc3RydWN0IHBkaSAqZmlyc3RfcGRpLCB1MzIgcmVjb3JkX2lkKQorc3RhdGljIGNvbnN0IHN0cnVjdCBwZGkgKgoraGVybWVzX2ZpbmRfcGRpKGNvbnN0IHN0cnVjdCBwZGkgKmZpcnN0X3BkaSwgdTMyIHJlY29yZF9pZCwgY29uc3Qgdm9pZCAqZW5kKQogewotCXN0cnVjdCBwZGkgKnBkaSA9IGZpcnN0X3BkaTsKKwljb25zdCBzdHJ1Y3QgcGRpICpwZGkgPSBmaXJzdF9wZGk7CiAKLQl3aGlsZSAocGRpX2lkKHBkaSkgIT0gUERJX0VORCkgeworCWVuZCAtPSBzaXplb2Yoc3RydWN0IHBkaSk7CisKKwl3aGlsZSAoKCh2b2lkICopIHBkaSA8PSBlbmQpICYmCisJICAgICAgIChwZGlfaWQocGRpKSAhPSBQRElfRU5EKSkgewogCiAJCS8qIElmIHRoZSByZWNvcmQgSUQgbWF0Y2hlcywgd2UgYXJlIGRvbmUgKi8KIAkJaWYgKHBkaV9pZChwZGkpID09IHJlY29yZF9pZCkKQEAgLTI3MiwxMiArMjU0LDEzIEBACiAKIC8qIFByb2Nlc3Mgb25lIFBsdWcgRGF0YSBJdGVtIC0gZmluZCBjb3JyZXNwb25kaW5nIFBEUiBhbmQgcGx1ZyBpdCAqLwogc3RhdGljIGludAotaGVybWVzX3BsdWdfcGRpKGhlcm1lc190ICpodywgc3RydWN0IHBkciAqZmlyc3RfcGRyLCBjb25zdCBzdHJ1Y3QgcGRpICpwZGkpCitoZXJtZXNfcGx1Z19wZGkoaGVybWVzX3QgKmh3LCBjb25zdCBzdHJ1Y3QgcGRyICpmaXJzdF9wZHIsCisJCWNvbnN0IHN0cnVjdCBwZGkgKnBkaSwgY29uc3Qgdm9pZCAqcGRyX2VuZCkKIHsKLQlzdHJ1Y3QgcGRyICpwZHI7CisJY29uc3Qgc3RydWN0IHBkciAqcGRyOwogCiAJLyogRmluZCB0aGUgUERSIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBQREkgKi8KLQlwZHIgPSBoZXJtZXNfZmluZF9wZHIoZmlyc3RfcGRyLCBwZGlfaWQocGRpKSk7CisJcGRyID0gaGVybWVzX2ZpbmRfcGRyKGZpcnN0X3BkciwgcGRpX2lkKHBkaSksIHBkcl9lbmQpOwogCiAJLyogTm8gbWF0Y2ggaXMgZm91bmQsIHNhZmUgdG8gaWdub3JlICovCiAJaWYgKCFwZHIpCkBAIC0zNDcsNyArMzMwLDYgQEAKIAogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNfcmVhZF9wZGEpOwogCiAvKiBQYXJzZSBQREEgYW5kIHdyaXRlIHRoZSByZWNvcmRzIGludG8gdGhlIGFkYXB0ZXIKICAqCkBAIC0zNTYsMTggKzMzOCwyMiBAQAogICovCiBpbnQgaGVybWVzX2FwcGx5X3BkYShoZXJtZXNfdCAqaHcsCiAJCSAgICAgY29uc3QgY2hhciAqZmlyc3RfcGRyLAotCQkgICAgIGNvbnN0IF9fbGUxNiAqcGRhKQorCQkgICAgIGNvbnN0IHZvaWQgKnBkcl9lbmQsCisJCSAgICAgY29uc3QgX19sZTE2ICpwZGEsCisJCSAgICAgY29uc3Qgdm9pZCAqcGRhX2VuZCkKIHsKIAlpbnQgcmV0OwogCWNvbnN0IHN0cnVjdCBwZGkgKnBkaTsKLQlzdHJ1Y3QgcGRyICpwZHI7CisJY29uc3Qgc3RydWN0IHBkciAqcGRyOwogCi0JcGRyID0gKHN0cnVjdCBwZHIgKikgZmlyc3RfcGRyOworCXBkciA9IChjb25zdCBzdHJ1Y3QgcGRyICopIGZpcnN0X3BkcjsKKwlwZGFfZW5kIC09IHNpemVvZihzdHJ1Y3QgcGRpKTsKIAogCS8qIEdvIHRocm91Z2ggZXZlcnkgUERJIGFuZCBwbHVnIHRoZW0gaW50byB0aGUgYWRhcHRlciAqLwogCXBkaSA9IChjb25zdCBzdHJ1Y3QgcGRpICopIChwZGEgKyAyKTsKLQl3aGlsZSAocGRpX2lkKHBkaSkgIT0gUERJX0VORCkgewotCQlyZXQgPSBoZXJtZXNfcGx1Z19wZGkoaHcsIHBkciwgcGRpKTsKKwl3aGlsZSAoKCh2b2lkICopIHBkaSA8PSBwZGFfZW5kKSAmJgorCSAgICAgICAocGRpX2lkKHBkaSkgIT0gUERJX0VORCkpIHsKKwkJcmV0ID0gaGVybWVzX3BsdWdfcGRpKGh3LCBwZHIsIHBkaSwgcGRyX2VuZCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC0zNzYsMjEgKzM2MiwyMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzX2FwcGx5X3BkYSk7CiAKIC8qIElkZW50aWZ5IHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gYWxsIGJsb2NrcwogICogaW5jbHVkaW5nIHRoZSBoZWFkZXIgZGF0YS4KICAqLwogc2l6ZV90Ci1oZXJtZXNfYmxvY2tzX2xlbmd0aChjb25zdCBjaGFyICpmaXJzdF9ibG9jaykKK2hlcm1lc19ibG9ja3NfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCB2b2lkICplbmQpCiB7CiAJY29uc3Qgc3RydWN0IGRibG9jayAqYmxrID0gKGNvbnN0IHN0cnVjdCBkYmxvY2sgKikgZmlyc3RfYmxvY2s7CiAJaW50IHRvdGFsX2xlbiA9IDA7CiAJaW50IGxlbjsKIAorCWVuZCAtPSBzaXplb2YoKmJsayk7CisKIAkvKiBTa2lwIGFsbCBibG9ja3MgdG8gbG9jYXRlIFBsdWcgRGF0YSBSZWZlcmVuY2VzCiAJICogKFNwZWN0cnVtIENTKSAqLwotCXdoaWxlIChkYmxvY2tfYWRkcihibGspICE9IEJMT0NLX0VORCkgeworCXdoaWxlICgoKHZvaWQgKikgYmxrIDw9IGVuZCkgJiYKKwkgICAgICAgKGRibG9ja19hZGRyKGJsaykgIT0gQkxPQ0tfRU5EKSkgewogCQlsZW4gPSBkYmxvY2tfbGVuKGJsayk7CiAJCXRvdGFsX2xlbiArPSBzaXplb2YoKmJsaykgKyBsZW47CiAJCWJsayA9IChzdHJ1Y3QgZGJsb2NrICopICZibGstPmRhdGFbbGVuXTsKQEAgLTM5OCw3ICszODYsNiBAQAogCiAJcmV0dXJuIHRvdGFsX2xlbjsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzX2Jsb2Nrc19sZW5ndGgpOwogCiAvKioqIEhlcm1lcyBwcm9ncmFtbWluZyAqKiovCiAKQEAgLTQ1Miw3ICs0MzksNiBAQAogCiAJcmV0dXJuIGVycjsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzaV9wcm9ncmFtX2luaXQpOwogCiAvKiBEb25lIHByb2dyYW1taW5nIGRhdGEgKEhlcm1lcyBJKQogICoKQEAgLTQ4OCwxMCArNDc0LDkgQEAKIAogCXJldHVybiByYyA/IHJjIDogZXJyOwogfQotRVhQT1JUX1NZTUJPTChoZXJtZXNpX3Byb2dyYW1fZW5kKTsKIAogLyogUHJvZ3JhbSB0aGUgZGF0YSBibG9ja3MgKi8KLWludCBoZXJtZXNfcHJvZ3JhbShoZXJtZXNfdCAqaHcsIGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrLCBjb25zdCBjaGFyICplbmQpCitpbnQgaGVybWVzX3Byb2dyYW0oaGVybWVzX3QgKmh3LCBjb25zdCBjaGFyICpmaXJzdF9ibG9jaywgY29uc3Qgdm9pZCAqZW5kKQogewogCWNvbnN0IHN0cnVjdCBkYmxvY2sgKmJsazsKIAl1MzIgYmxrYWRkcjsKQEAgLTUwMywxNCArNDg4LDE0IEBACiAKIAlibGsgPSAoY29uc3Qgc3RydWN0IGRibG9jayAqKSBmaXJzdF9ibG9jazsKIAotCWlmICgoY29uc3QgY2hhciAqKSBibGsgPiAoZW5kIC0gc2l6ZW9mKCpibGspKSkKKwlpZiAoKHZvaWQgKikgYmxrID4gKGVuZCAtIHNpemVvZigqYmxrKSkpCiAJCXJldHVybiAtRUlPOwogCiAJYmxrYWRkciA9IGRibG9ja19hZGRyKGJsayk7CiAJYmxrbGVuID0gZGJsb2NrX2xlbihibGspOwogCiAJd2hpbGUgKChibGthZGRyICE9IEJMT0NLX0VORCkgJiYKLQkgICAgICAgKCgoY29uc3QgY2hhciAqKSBibGsgKyBibGtsZW4pIDw9IGVuZCkpIHsKKwkgICAgICAgKCgodm9pZCAqKSBibGsgKyBibGtsZW4pIDw9IGVuZCkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCiAJCSAgICAgICAiUHJvZ3JhbW1pbmcgYmxvY2sgb2YgbGVuZ3RoICVkIHRvIGFkZHJlc3MgMHglMDh4XG4iLAogCQkgICAgICAgYmxrbGVuLCBibGthZGRyKTsKQEAgLTU0Miw3ICs1MjcsNyBAQAogI2VuZGlmCiAJCWJsayA9IChjb25zdCBzdHJ1Y3QgZGJsb2NrICopICZibGstPmRhdGFbYmxrbGVuXTsKIAotCQlpZiAoKGNvbnN0IGNoYXIgKikgYmxrID4gKGVuZCAtIHNpemVvZigqYmxrKSkpCisJCWlmICgodm9pZCAqKSBibGsgPiAoZW5kIC0gc2l6ZW9mKCpibGspKSkKIAkJCXJldHVybiAtRUlPOwogCiAJCWJsa2FkZHIgPSBkYmxvY2tfYWRkcihibGspOwpAQCAtNTUwLDE5ICs1MzUsNiBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzX3Byb2dyYW0pOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2hlcm1lc19kbGQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfaGVybWVzX2RsZCh2b2lkKQotewotfQotCi1tb2R1bGVfaW5pdChpbml0X2hlcm1lc19kbGQpOwotbW9kdWxlX2V4aXQoZXhpdF9oZXJtZXNfZGxkKTsKIAogLyoqKiBEZWZhdWx0IHBsdWdnaW5nIGRhdGEgZm9yIEhlcm1lcyBJICoqKi8KIC8qIFZhbHVlcyBmcm9tIHdsX2xrbV83MTgvaGNmL2RoZi5jICovCkBAIC01NzMsOSArNTQ1LDkgQEAKIAlfX2xlMTYgaWQ7CQkJCQkJCVwKIAl1OCB2YWxbbGVuZ3RoXTsJCQkJCQkJXAogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZGVmYXVsdF9wZHJfZGF0YV8jI3BpZCA9IHsJCQlcCi0JX19jb25zdGFudF9jcHVfdG9fbGUxNigoc2l6ZW9mKGRlZmF1bHRfcGRyX2RhdGFfIyNwaWQpLwkJXAorCWNwdV90b19sZTE2KChzaXplb2YoZGVmYXVsdF9wZHJfZGF0YV8jI3BpZCkvCQkJXAogCQkJCXNpemVvZihfX2xlMTYpKSAtIDEpLAkJCVwKLQlfX2NvbnN0YW50X2NwdV90b19sZTE2KHBpZCksCQkJCQlcCisJY3B1X3RvX2xlMTYocGlkKSwJCQkJCQlcCiAJZGF0YQkJCQkJCQkJXAogfQogCkBAIC02NDQsMTcgKzYxNiwyMCBAQAogICovCiBpbnQgaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKGhlcm1lc190ICpodywKIAkJCQkgICBjb25zdCBjaGFyICpmaXJzdF9wZHIsCi0JCQkJICAgY29uc3QgX19sZTE2ICpwZGEpCisJCQkJICAgY29uc3Qgdm9pZCAqcGRyX2VuZCwKKwkJCQkgICBjb25zdCBfX2xlMTYgKnBkYSwKKwkJCQkgICBjb25zdCB2b2lkICpwZGFfZW5kKQogewogCWNvbnN0IHN0cnVjdCBwZHIgKnBkciA9IChjb25zdCBzdHJ1Y3QgcGRyICopIGZpcnN0X3BkcjsKLQlzdHJ1Y3QgcGRpICpmaXJzdF9wZGkgPSAoc3RydWN0IHBkaSAqKSAmcGRhWzJdOwotCXN0cnVjdCBwZGkgKnBkaTsKLQlzdHJ1Y3QgcGRpICpkZWZhdWx0X3BkaSA9IE5VTEw7Ci0Jc3RydWN0IHBkaSAqb3V0ZG9vcl9wZGk7Ci0Jdm9pZCAqZW5kID0gKHZvaWQgKilmaXJzdF9wZHIgKyBNQVhfUERBX1NJWkU7CisJY29uc3Qgc3RydWN0IHBkaSAqZmlyc3RfcGRpID0gKGNvbnN0IHN0cnVjdCBwZGkgKikgJnBkYVsyXTsKKwljb25zdCBzdHJ1Y3QgcGRpICpwZGk7CisJY29uc3Qgc3RydWN0IHBkaSAqZGVmYXVsdF9wZGkgPSBOVUxMOworCWNvbnN0IHN0cnVjdCBwZGkgKm91dGRvb3JfcGRpOwogCWludCByZWNvcmRfaWQ7CiAKLQl3aGlsZSAoKCh2b2lkICopcGRyIDwgZW5kKSAmJgorCXBkcl9lbmQgLT0gc2l6ZW9mKHN0cnVjdCBwZHIpOworCisJd2hpbGUgKCgodm9pZCAqKSBwZHIgPD0gcGRyX2VuZCkgJiYKIAkgICAgICAgKHBkcl9pZChwZHIpICE9IFBESV9FTkQpKSB7CiAJCS8qCiAJCSAqIEZvciBzcGVjdHJ1bV9jcyBmaXJtd2FyZXMsCkBAIC02NjYsNyArNjQxLDcgQEAKIAkJCWJyZWFrOwogCQlyZWNvcmRfaWQgPSBwZHJfaWQocGRyKTsKIAotCQlwZGkgPSBoZXJtZXNfZmluZF9wZGkoZmlyc3RfcGRpLCByZWNvcmRfaWQpOworCQlwZGkgPSBoZXJtZXNfZmluZF9wZGkoZmlyc3RfcGRpLCByZWNvcmRfaWQsIHBkYV9lbmQpOwogCQlpZiAocGRpKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJGb3VuZCByZWNvcmQgMHglMDR4IGF0ICVwXG4iLAogCQkJICAgICAgIHJlY29yZF9pZCwgcGRpKTsKQEAgLTY3NCw3ICs2NDksOCBAQAogCQlzd2l0Y2ggKHJlY29yZF9pZCkgewogCQljYXNlIDB4MTEwOiAvKiBNb2RlbSBSRUZEQUMgdmFsdWVzICovCiAJCWNhc2UgMHgxMjA6IC8qIE1vZGVtIFZHREFDIHZhbHVlcyAqLwotCQkJb3V0ZG9vcl9wZGkgPSBoZXJtZXNfZmluZF9wZGkoZmlyc3RfcGRpLCByZWNvcmRfaWQgKyAxKTsKKwkJCW91dGRvb3JfcGRpID0gaGVybWVzX2ZpbmRfcGRpKGZpcnN0X3BkaSwgcmVjb3JkX2lkICsgMSwKKwkJCQkJCSAgICAgIHBkYV9lbmQpOwogCQkJZGVmYXVsdF9wZGkgPSBOVUxMOwogCQkJaWYgKG91dGRvb3JfcGRpKSB7CiAJCQkJcGRpID0gb3V0ZG9vcl9wZGk7CkBAIC03MTUsNyArNjkxLDggQEAKIAogCQlpZiAocGRpKSB7CiAJCQkvKiBMZW5ndGhzIG9mIHRoZSBkYXRhIGluIFBESSBhbmQgUERSIG11c3QgbWF0Y2ggKi8KLQkJCWlmIChwZGlfbGVuKHBkaSkgPT0gcGRyX2xlbihwZHIpKSB7CisJCQlpZiAoKHBkaV9sZW4ocGRpKSA9PSBwZHJfbGVuKHBkcikpICYmCisJCQkgICAgKCh2b2lkICopIHBkaS0+ZGF0YSArIHBkaV9sZW4ocGRpKSA8IHBkYV9lbmQpKSB7CiAJCQkJLyogZG8gdGhlIGFjdHVhbCBwbHVnZ2luZyAqLwogCQkJCWhlcm1lc19hdXhfc2V0YWRkcihodywgcGRyX2FkZHIocGRyKSk7CiAJCQkJaGVybWVzX3dyaXRlX2J5dGVzKGh3LCBIRVJNRVNfQVVYREFUQSwKQEAgLTcyNyw0ICs3MDQsMyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaGVybWVzX2RsZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmgKaW5kZXggNmZjYjI2Mi4uNTgzYTViYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9oZXJtZXNfZGxkLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogaW50IGhlcm1lc2lfcHJvZ3JhbV9pbml0KGhlcm1lc190ICpodywgdTMyIG9mZnNldCk7CiBpbnQgaGVybWVzaV9wcm9ncmFtX2VuZChoZXJtZXNfdCAqaHcpOwotaW50IGhlcm1lc19wcm9ncmFtKGhlcm1lc190ICpodywgY29uc3QgY2hhciAqZmlyc3RfYmxvY2ssIGNvbnN0IGNoYXIgKmVuZCk7CitpbnQgaGVybWVzX3Byb2dyYW0oaGVybWVzX3QgKmh3LCBjb25zdCBjaGFyICpmaXJzdF9ibG9jaywgY29uc3Qgdm9pZCAqZW5kKTsKIAogaW50IGhlcm1lc19yZWFkX3BkYShoZXJtZXNfdCAqaHcsCiAJCSAgICBfX2xlMTYgKnBkYSwKQEAgLTM4LDExICszOCwxNSBAQAogCQkgICAgaW50IHVzZV9lZXByb20pOwogaW50IGhlcm1lc19hcHBseV9wZGEoaGVybWVzX3QgKmh3LAogCQkgICAgIGNvbnN0IGNoYXIgKmZpcnN0X3BkciwKLQkJICAgICBjb25zdCBfX2xlMTYgKnBkYSk7CisJCSAgICAgY29uc3Qgdm9pZCAqcGRyX2VuZCwKKwkJICAgICBjb25zdCBfX2xlMTYgKnBkYSwKKwkJICAgICBjb25zdCB2b2lkICpwZGFfZW5kKTsKIGludCBoZXJtZXNfYXBwbHlfcGRhX3dpdGhfZGVmYXVsdHMoaGVybWVzX3QgKmh3LAogCQkJCSAgIGNvbnN0IGNoYXIgKmZpcnN0X3BkciwKLQkJCQkgICBjb25zdCBfX2xlMTYgKnBkYSk7CisJCQkJICAgY29uc3Qgdm9pZCAqcGRyX2VuZCwKKwkJCQkgICBjb25zdCBfX2xlMTYgKnBkYSwKKwkJCQkgICBjb25zdCB2b2lkICpwZGFfZW5kKTsKIAotc2l6ZV90IGhlcm1lc19ibG9ja3NfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpcnN0X2Jsb2NrKTsKK3NpemVfdCBoZXJtZXNfYmxvY2tzX2xlbmd0aChjb25zdCBjaGFyICpmaXJzdF9ibG9jaywgY29uc3Qgdm9pZCAqZW5kKTsKIAogI2VuZGlmIC8qIF9IRVJNRVNfRExEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODE0MjhkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jCkBAIC0wLDAgKzEsNTg2IEBACisvKiBFbmNhcHN1bGF0ZSBiYXNpYyBzZXR0aW5nIGNoYW5nZXMgYW5kIHJldHJpZXZhbCBvbiBIZXJtZXMgaGFyZHdhcmUKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CisKKyNpbmNsdWRlICJoZXJtZXMuaCIKKyNpbmNsdWRlICJoZXJtZXNfcmlkLmgiCisjaW5jbHVkZSAib3Jpbm9jby5oIgorCisjaW5jbHVkZSAiaHcuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRGF0YSB0YWJsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIHRhYmxlcyBnaXZlcyB0aGUgYWN0dWFsIG1lYW5pbmdzIG9mIHRoZSBiaXRyYXRlIElEcyByZXR1cm5lZAorICogYnkgdGhlIGZpcm13YXJlLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJaW50IGJpdHJhdGU7IC8qIGluIDEwMHMgb2Yga2lsb2JpdHMgKi8KKwlpbnQgYXV0b21hdGljOworCXUxNiBhZ2VyZV90eHJhdGVjdHJsOworCXUxNiBpbnRlcnNpbF90eHJhdGVjdHJsOworfSBiaXRyYXRlX3RhYmxlW10gPSB7CisJezExMCwgMSwgIDMsIDE1fSwgLyogRW50cnkgMCBpcyB0aGUgZGVmYXVsdCAqLworCXsxMCwgIDAsICAxLCAgMX0sCisJezEwLCAgMSwgIDEsICAxfSwKKwl7MjAsICAwLCAgMiwgIDJ9LAorCXsyMCwgIDEsICA2LCAgM30sCisJezU1LCAgMCwgIDQsICA0fSwKKwl7NTUsICAxLCAgNywgIDd9LAorCXsxMTAsIDAsICA1LCAgOH0sCit9OworI2RlZmluZSBCSVRSQVRFX1RBQkxFX1NJWkUgQVJSQVlfU0laRShiaXRyYXRlX3RhYmxlKQorCitpbnQgb3Jpbm9jb19nZXRfYml0cmF0ZW1vZGUoaW50IGJpdHJhdGUsIGludCBhdXRvbWF0aWMpCit7CisJaW50IHJhdGVtb2RlID0gLTE7CisJaW50IGk7CisKKwlpZiAoKGJpdHJhdGUgIT0gMTApICYmIChiaXRyYXRlICE9IDIwKSAmJgorCSAgICAoYml0cmF0ZSAhPSA1NSkgJiYgKGJpdHJhdGUgIT0gMTEwKSkKKwkJcmV0dXJuIHJhdGVtb2RlOworCisJZm9yIChpID0gMDsgaSA8IEJJVFJBVEVfVEFCTEVfU0laRTsgaSsrKSB7CisJCWlmICgoYml0cmF0ZV90YWJsZVtpXS5iaXRyYXRlID09IGJpdHJhdGUpICYmCisJCSAgICAoYml0cmF0ZV90YWJsZVtpXS5hdXRvbWF0aWMgPT0gYXV0b21hdGljKSkgeworCQkJcmF0ZW1vZGUgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHJhdGVtb2RlOworfQorCit2b2lkIG9yaW5vY29fZ2V0X3JhdGVtb2RlX2NmZyhpbnQgcmF0ZW1vZGUsIGludCAqYml0cmF0ZSwgaW50ICphdXRvbWF0aWMpCit7CisJQlVHX09OKChyYXRlbW9kZSA8IDApIHx8IChyYXRlbW9kZSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpKTsKKworCSpiaXRyYXRlID0gYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uYml0cmF0ZSAqIDEwMDAwMDsKKwkqYXV0b21hdGljID0gYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uYXV0b21hdGljOworfQorCisvKiBHZXQgdHNjIGZyb20gdGhlIGZpcm13YXJlICovCitpbnQgb3Jpbm9jb19od19nZXRfdGtpcF9pdihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5LCB1OCAqdHNjKQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwl1OCB0c2NfYXJyWzRdW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOworCisJaWYgKChrZXkgPCAwKSB8fCAoa2V5ID4gNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UX1RLSVBfSVYsCisJCQkgICAgICBzaXplb2YodHNjX2FyciksIE5VTEwsICZ0c2NfYXJyKTsKKwlpZiAoIWVycikKKwkJbWVtY3B5KHRzYywgJnRzY19hcnJba2V5XVswXSwgc2l6ZW9mKHRzY19hcnJbMF0pKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBfX29yaW5vY29faHdfc2V0X2JpdHJhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IHJhdGVtb2RlID0gcHJpdi0+Yml0cmF0ZW1vZGU7CisJaW50IGVyciA9IDA7CisKKwlpZiAocmF0ZW1vZGUgPj0gQklUUkFURV9UQUJMRV9TSVpFKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEJVRzogSW52YWxpZCBiaXRyYXRlIG1vZGUgJWRcbiIsCisJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCByYXRlbW9kZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCUhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTCwKKwkJCQliaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5hZ2VyZV90eHJhdGVjdHJsKTsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQlIRVJNRVNfUklEX0NORlRYUkFURUNPTlRST0wsCisJCQkJYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uaW50ZXJzaWxfdHhyYXRlY3RybCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK2ludCBvcmlub2NvX2h3X2dldF9hY3RfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgKmJpdHJhdGUpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBpOworCWludCBlcnIgPSAwOworCXUxNiB2YWw7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ1VSUkVOVFRYUkFURSwgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRTogLyogTHVjZW50IHN0eWxlIHJhdGUgKi8KKwkJLyogTm90ZSA6IGluIEx1Y2VudCBmaXJtd2FyZSwgdGhlIHJldHVybiB2YWx1ZSBvZgorCQkgKiBIRVJNRVNfUklEX0NVUlJFTlRUWFJBVEUgaXMgdGhlIGJpdHJhdGUgaW4gTWIvcywKKwkJICogYW5kIHRoZXJlZm9yZSBpcyB0b3RhbGx5IGRpZmZlcmVudCBmcm9tIHRoZQorCQkgKiBlbmNvZGluZyBvZiBIRVJNRVNfUklEX0NORlRYUkFURUNPTlRST0wuCisJCSAqIERvbid0IGZvcmdldCB0aGF0IDZNYi9zIGlzIHJlYWxseSA1LjVNYi9zICovCisJCWlmICh2YWwgPT0gNikKKwkJCSpiaXRyYXRlID0gNTUwMDAwMDsKKwkJZWxzZQorCQkJKmJpdHJhdGUgPSB2YWwgKiAxMDAwMDAwOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IC8qIEludGVyc2lsIHN0eWxlIHJhdGUgKi8KKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOiAvKiBTeW1ib2wgc3R5bGUgcmF0ZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgQklUUkFURV9UQUJMRV9TSVpFOyBpKyspCisJCQlpZiAoYml0cmF0ZV90YWJsZVtpXS5pbnRlcnNpbF90eHJhdGVjdHJsID09IHZhbCkKKwkJCQlicmVhazsKKworCQlpZiAoaSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5hYmxlIHRvIGRldGVybWluZSBjdXJyZW50IGJpdHJhdGUgKDB4JTA0aHgpXG4iLAorCQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIHZhbCk7CisKKwkJKmJpdHJhdGUgPSBiaXRyYXRlX3RhYmxlW2ldLmJpdHJhdGUgKiAxMDAwMDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qIFNldCBmaXhlZCBBUCBhZGRyZXNzICovCitpbnQgX19vcmlub2NvX2h3X3NldF93YXAoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlpbnQgcm9hbWluZ19mbGFnOworCWludCBlcnIgPSAwOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKworCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKKwkJLyogbm90IHN1cHBvcnRlZCAqLworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJCWlmIChwcml2LT5ic3NpZF9maXhlZCkKKwkJCXJvYW1pbmdfZmxhZyA9IDI7CisJCWVsc2UKKwkJCXJvYW1pbmdfZmxhZyA9IDE7CisKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlJPQU1JTkdNT0RFLAorCQkJCQkgICByb2FtaW5nX2ZsYWcpOworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORk1BTkRBVE9SWUJTU0lEX1NZTUJPTCwKKwkJCQkJICAmcHJpdi0+ZGVzaXJlZF9ic3NpZCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKiBDaGFuZ2UgdGhlIFdFUCBrZXlzIGFuZC9vciB0aGUgY3VycmVudCBrZXlzLiAgQ2FuIGJlIGNhbGxlZAorICogZWl0aGVyIGZyb20gX19vcmlub2NvX2h3X3NldHVwX2VuYygpIG9yIGRpcmVjdGx5IGZyb20KKyAqIG9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUoKS4gIEluIHRoZSBsYXRlciBjYXNlIHRoZSBhc3NvY2lhdGlvbgorICogd2l0aCB0aGUgQVAgaXMgbm90IGJyb2tlbiAoaWYgdGhlIGZpcm13YXJlIGNhbiBoYW5kbGUgaXQpLAorICogd2hpY2ggaXMgbmVlZGVkIGZvciA4MDIuMXggaW1wbGVtZW50YXRpb25zLiAqLworaW50IF9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORldFUEtFWVNfQUdFUkUsCisJCQkJCSAgJnByaXYtPmtleXMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORlRYS0VZX0FHRVJFLAorCQkJCQkgICBwcml2LT50eF9rZXkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCXsKKwkJCWludCBrZXlsZW47CisJCQlpbnQgaTsKKworCQkJLyogRm9yY2UgdW5pZm9ybSBrZXkgbGVuZ3RoIHRvIHdvcmsgYXJvdW5kCisJCQkgKiBmaXJtd2FyZSBidWdzICovCisJCQlrZXlsZW4gPSBsZTE2X3RvX2NwdShwcml2LT5rZXlzW3ByaXYtPnR4X2tleV0ubGVuKTsKKworCQkJaWYgKGtleWxlbiA+IExBUkdFX0tFWV9TSVpFKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQlVHOiBLZXkgJWQgaGFzIG92ZXJzaXplIGxlbmd0aCAlZC5cbiIsCisJCQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIHByaXYtPnR4X2tleSwga2V5bGVuKTsKKwkJCQlyZXR1cm4gLUUyQklHOworCQkJfQorCisJCQkvKiBXcml0ZSBhbGwgNCBrZXlzICovCisJCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfS0VZUzsgaSsrKSB7CisJCQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCisJCQkJCQlIRVJNRVNfUklEX0NORkRFRkFVTFRLRVkwICsgaSwKKwkJCQkJCUhFUk1FU19CWVRFU19UT19SRUNMRU4oa2V5bGVuKSwKKwkJCQkJCXByaXYtPmtleXNbaV0uZGF0YSk7CisJCQkJaWYgKGVycikKKwkJCQkJcmV0dXJuIGVycjsKKwkJCX0KKworCQkJLyogV3JpdGUgdGhlIGluZGV4IG9mIHRoZSBrZXkgdXNlZCBpbiB0cmFuc21pc3Npb24gKi8KKwkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJCUhFUk1FU19SSURfQ05GV0VQREVGQVVMVEtFWUlELAorCQkJCQkJcHJpdi0+dHhfa2V5KTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9fb3Jpbm9jb19od19zZXR1cF9lbmMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJaW50IG1hc3Rlcl93ZXBfZmxhZzsKKwlpbnQgYXV0aF9mbGFnOworCWludCBlbmNfZmxhZzsKKworCS8qIFNldHVwIFdFUCBrZXlzIGZvciBXRVAgYW5kIFdQQSAqLworCWlmIChwcml2LT5lbmNvZGVfYWxnKQorCQlfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhwcml2KTsKKworCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCisJCWF1dGhfZmxhZyA9IEhFUk1FU19BVVRIX1NIQVJFRF9LRVk7CisJZWxzZQorCQlhdXRoX2ZsYWcgPSBIRVJNRVNfQVVUSF9PUEVOOworCisJaWYgKHByaXYtPndwYV9lbmFibGVkKQorCQllbmNfZmxhZyA9IDI7CisJZWxzZSBpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1dFUCkKKwkJZW5jX2ZsYWcgPSAxOworCWVsc2UKKwkJZW5jX2ZsYWcgPSAwOworCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOiAvKiBBZ2VyZSBzdHlsZSBXRVAgKi8KKwkJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApIHsKKwkJCS8qIEVuYWJsZSB0aGUgc2hhcmVkLWtleSBhdXRoZW50aWNhdGlvbi4gKi8KKwkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJSEVSTUVTX1JJRF9DTkZBVVRIRU5USUNBVElPTl9BR0VSRSwKKwkJCQkJYXV0aF9mbGFnKTsKKwkJfQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GV0VQRU5BQkxFRF9BR0VSRSwKKwkJCQkJICAgZW5jX2ZsYWcpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAocHJpdi0+aGFzX3dwYSkgeworCQkJLyogU2V0IFdQQSBrZXkgbWFuYWdlbWVudCAqLworCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZTRVRXUEFBVVRITUdNVFNVSVRFX0FHRVJFLAorCQkJCSAgcHJpdi0+a2V5X21nbXQpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJYnJlYWs7CisKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IC8qIEludGVyc2lsIHN0eWxlIFdFUCAqLworCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6IC8qIFN5bWJvbCBzdHlsZSBXRVAgKi8KKwkJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApIHsKKwkJCWlmIChwcml2LT53ZXBfcmVzdHJpY3QgfHwKKwkJCSAgICAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCkpCisJCQkJbWFzdGVyX3dlcF9mbGFnID0gSEVSTUVTX1dFUF9QUklWQUNZX0lOVk9LRUQgfAorCQkJCQkJICBIRVJNRVNfV0VQX0VYQ0xfVU5FTkNSWVBURUQ7CisJCQllbHNlCisJCQkJbWFzdGVyX3dlcF9mbGFnID0gSEVSTUVTX1dFUF9QUklWQUNZX0lOVk9LRUQ7CisKKwkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJCSAgIEhFUk1FU19SSURfQ05GQVVUSEVOVElDQVRJT04sCisJCQkJCQkgICBhdXRoX2ZsYWcpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQl9IGVsc2UKKwkJCW1hc3Rlcl93ZXBfZmxhZyA9IDA7CisKKwkJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQorCQkJbWFzdGVyX3dlcF9mbGFnIHw9IEhFUk1FU19XRVBfSE9TVF9ERUNSWVBUOworCisJCS8qIE1hc3RlciBXRVAgc2V0dGluZyA6IG9uL29mZiAqLworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GV0VQRkxBR1NfSU5URVJTSUwsCisJCQkJCSAgIG1hc3Rlcl93ZXBfZmxhZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCisvKiBrZXkgbXVzdCBiZSAzMiBieXRlcywgaW5jbHVkaW5nIHRoZSB0eCBhbmQgcnggTUlDIGtleXMuCisgKiByc2MgbXVzdCBiZSA4IGJ5dGVzCisgKiB0c2MgbXVzdCBiZSA4IGJ5dGVzIG9yIE5VTEwKKyAqLworaW50IF9fb3Jpbm9jb19od19zZXRfdGtpcF9rZXkoaGVybWVzX3QgKmh3LCBpbnQga2V5X2lkeCwgaW50IHNldF90eCwKKwkJCSAgICAgIHU4ICprZXksIHU4ICpyc2MsIHU4ICp0c2MpCit7CisJc3RydWN0IHsKKwkJX19sZTE2IGlkeDsKKwkJdTggcnNjW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOworCQl1OCBrZXlbVEtJUF9LRVlMRU5dOworCQl1OCB0eF9taWNbTUlDX0tFWUxFTl07CisJCXU4IHJ4X21pY1tNSUNfS0VZTEVOXTsKKwkJdTggdHNjW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJ1ZjsKKwlpbnQgcmV0OworCWludCBlcnI7CisJaW50IGs7CisJdTE2IHhtaXR0aW5nOworCisJa2V5X2lkeCAmPSAweDM7CisKKwlpZiAoc2V0X3R4KQorCQlrZXlfaWR4IHw9IDB4ODAwMDsKKworCWJ1Zi5pZHggPSBjcHVfdG9fbGUxNihrZXlfaWR4KTsKKwltZW1jcHkoYnVmLmtleSwga2V5LAorCSAgICAgICBzaXplb2YoYnVmLmtleSkgKyBzaXplb2YoYnVmLnR4X21pYykgKyBzaXplb2YoYnVmLnJ4X21pYykpOworCisJaWYgKHJzYyA9PSBOVUxMKQorCQltZW1zZXQoYnVmLnJzYywgMCwgc2l6ZW9mKGJ1Zi5yc2MpKTsKKwllbHNlCisJCW1lbWNweShidWYucnNjLCByc2MsIHNpemVvZihidWYucnNjKSk7CisKKwlpZiAodHNjID09IE5VTEwpIHsKKwkJbWVtc2V0KGJ1Zi50c2MsIDAsIHNpemVvZihidWYudHNjKSk7CisJCWJ1Zi50c2NbNF0gPSAweDEwOworCX0gZWxzZSB7CisJCW1lbWNweShidWYudHNjLCB0c2MsIHNpemVvZihidWYudHNjKSk7CisJfQorCisJLyogV2FpdCB1cHRvIDEwMG1zIGZvciB0eCBxdWV1ZSB0byBlbXB0eSAqLworCWsgPSAxMDA7CisJZG8geworCQlrLS07CisJCXVkZWxheSgxMDAwKTsKKwkJcmV0ID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfVFhRVUVVRUVNUFRZLAorCQkJCQkgICZ4bWl0dGluZyk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9IHdoaWxlICgoayA+IDApICYmIHhtaXR0aW5nKTsKKworCWlmIChrID09IDApCisJCXJldCA9IC1FVElNRURPVVQ7CisKKwllcnIgPSBIRVJNRVNfV1JJVEVfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ05GQUREREVGQVVMVFRLSVBLRVlfQUdFUkUsCisJCQkJICAmYnVmKTsKKworCXJldHVybiByZXQgPyByZXQgOiBlcnI7Cit9CisKK2ludCBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXlfaWR4KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJbWVtc2V0KCZwcml2LT50a2lwX2tleVtrZXlfaWR4XSwgMCwgc2l6ZW9mKHByaXYtPnRraXBfa2V5W2tleV9pZHhdKSk7CisJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgIEhFUk1FU19SSURfQ05GUkVNREVGQVVMVFRLSVBLRVlfQUdFUkUsCisJCQkJICAga2V5X2lkeCk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIGNsZWFyaW5nIFRLSVAga2V5ICVkXG4iLAorCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgZXJyLCBrZXlfaWR4KTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgX19vcmlub2NvX2h3X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCwKKwkJCQkgICAgaW50IG1jX2NvdW50LCBpbnQgcHJvbWlzYykKK3sKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisKKwlpZiAocHJvbWlzYyAhPSBwcml2LT5wcm9taXNjdW91cykgeworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GUFJPTUlTQ1VPVVNNT0RFLAorCQkJCQkgICBwcm9taXNjKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBQUk9NSVNDVU9VU01PREUgdG8gMS5cbiIsCisJCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgZXJyKTsKKwkJfSBlbHNlCisJCQlwcml2LT5wcm9taXNjdW91cyA9IHByb21pc2M7CisJfQorCisJLyogSWYgd2UncmUgbm90IGluIHByb21pc2N1b3VzIG1vZGUsIHRoZW4gd2UgbmVlZCB0byBzZXQgdGhlCisJICogZ3JvdXAgYWRkcmVzcyBpZiBlaXRoZXIgd2Ugd2FudCB0byBtdWx0aWNhc3QsIG9yIGlmIHdlIHdlcmUKKwkgKiBtdWx0aWNhc3RpbmcgYW5kIHdhbnQgdG8gc3RvcCAqLworCWlmICghcHJvbWlzYyAmJiAobWNfY291bnQgfHwgcHJpdi0+bWNfY291bnQpKSB7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqcCA9IG1jX2xpc3Q7CisJCXN0cnVjdCBoZXJtZXNfbXVsdGljYXN0IG1jbGlzdDsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IG1jX2NvdW50OyBpKyspIHsKKwkJCS8qIHBhcmFub2lhOiBpcyBsaXN0IHNob3J0ZXIgdGhhbiBtY19jb3VudD8gKi8KKwkJCUJVR19PTighcCk7CisJCQkvKiBwYXJhbm9pYTogYmFkIGFkZHJlc3Mgc2l6ZSBpbiBsaXN0PyAqLworCQkJQlVHX09OKHAtPmRtaV9hZGRybGVuICE9IEVUSF9BTEVOKTsKKworCQkJbWVtY3B5KG1jbGlzdC5hZGRyW2ldLCBwLT5kbWlfYWRkciwgRVRIX0FMRU4pOworCQkJcCA9IHAtPm5leHQ7CisJCX0KKworCQlpZiAocCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNdWx0aWNhc3QgbGlzdCBpcyAiCisJCQkgICAgICAgImxvbmdlciB0aGFuIG1jX2NvdW50XG4iLCBwcml2LT5uZGV2LT5uYW1lKTsKKworCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKKwkJCQkgICBIRVJNRVNfUklEX0NORkdST1VQQUREUkVTU0VTLAorCQkJCSAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4obWNfY291bnQgKiBFVEhfQUxFTiksCisJCQkJICAgJm1jbGlzdCk7CisJCWlmIChlcnIpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIG11bHRpY2FzdCBsaXN0LlxuIiwKKwkJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBlcnIpOworCQllbHNlCisJCQlwcml2LT5tY19jb3VudCA9IG1jX2NvdW50OworCX0KKwlyZXR1cm4gZXJyOworfQorCisvKiBSZXR1cm4gOiA8IDAgLT4gZXJyb3IgY29kZSA7ID49IDAgLT4gbGVuZ3RoICovCitpbnQgb3Jpbm9jb19od19nZXRfZXNzaWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50ICphY3RpdmUsCisJCQkgY2hhciBidWZbSVdfRVNTSURfTUFYX1NJWkUrMV0pCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgZXNzaWRidWY7CisJY2hhciAqcCA9IChjaGFyICopKCZlc3NpZGJ1Zi52YWwpOworCWludCBsZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA+IDApIHsKKwkJLyogV2UgcmVhZCB0aGUgZGVzaXJlZCBTU0lEIGZyb20gdGhlIGhhcmR3YXJlIHJhdGhlcgorCQkgICB0aGFuIGZyb20gcHJpdi0+ZGVzaXJlZF9lc3NpZCwganVzdCBpbiBjYXNlIHRoZQorCQkgICBmaXJtd2FyZSBpcyBhbGxvd2VkIHRvIGNoYW5nZSBpdCBvbiB1cy4gSSdtIG5vdAorCQkgICBzdXJlIGFib3V0IHRoaXMgKi8KKwkJLyogTXkgZ3Vlc3MgaXMgdGhhdCB0aGUgT1dOU1NJRCBzaG91bGQgYWx3YXlzIGJlIHdoYXRldmVyCisJCSAqIHdlIHNldCB0byB0aGUgY2FyZCwgd2hlcmVhcyBDVVJSRU5UX1NTSUQgaXMgdGhlIG9uZSB0aGF0CisJCSAqIG1heSBjaGFuZ2UuLi4gLSBKZWFuIElJICovCisJCXUxNiByaWQ7CisKKwkJKmFjdGl2ZSA9IDE7CisKKwkJcmlkID0gKHByaXYtPnBvcnRfdHlwZSA9PSAzKSA/IEhFUk1FU19SSURfQ05GT1dOU1NJRCA6CisJCQlIRVJNRVNfUklEX0NORkRFU0lSRURTU0lEOworCisJCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIHJpZCwgc2l6ZW9mKGVzc2lkYnVmKSwKKwkJCQkgICAgICBOVUxMLCAmZXNzaWRidWYpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsX3VubG9jazsKKwl9IGVsc2UgeworCQkqYWN0aXZlID0gMDsKKworCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRTU0lELAorCQkJCSAgICAgIHNpemVvZihlc3NpZGJ1ZiksIE5VTEwsICZlc3NpZGJ1Zik7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWxfdW5sb2NrOworCX0KKworCWxlbiA9IGxlMTZfdG9fY3B1KGVzc2lkYnVmLmxlbik7CisJQlVHX09OKGxlbiA+IElXX0VTU0lEX01BWF9TSVpFKTsKKworCW1lbXNldChidWYsIDAsIElXX0VTU0lEX01BWF9TSVpFKTsKKwltZW1jcHkoYnVmLCBwLCBsZW4pOworCWVyciA9IGxlbjsKKworIGZhaWxfdW5sb2NrOgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgb3Jpbm9jb19od19nZXRfZnJlcShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwl1MTYgY2hhbm5lbDsKKwlpbnQgZnJlcSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVENIQU5ORUwsCisJCQkJICAmY2hhbm5lbCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBJbnRlcnNpbCBmaXJtd2FyZSAxLjMuNSByZXR1cm5zIDAgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KKwlpZiAoY2hhbm5lbCA9PSAwKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKChjaGFubmVsIDwgMSkgfHwgKGNoYW5uZWwgPiBOVU1fQ0hBTk5FTFMpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDaGFubmVsIG91dCBvZiByYW5nZSAoJWQpIVxuIiwKKwkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIGNoYW5uZWwpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCisJfQorCWZyZXEgPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoY2hhbm5lbCk7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCWlmIChlcnIgPiAwKQorCQllcnIgPSAtRUJVU1k7CisJcmV0dXJuIGVyciA/IGVyciA6IGZyZXE7Cit9CisKK2ludCBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJICAgICAgIGludCAqbnVtcmF0ZXMsIHMzMiAqcmF0ZXMsIGludCBtYXgpCit7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgbGlzdDsKKwl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKikmbGlzdC52YWw7CisJaW50IGVyciA9IDA7CisJaW50IG51bTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1NVUFBPUlRFRERBVEFSQVRFUywKKwkJCSAgICAgIHNpemVvZihsaXN0KSwgTlVMTCwgJmxpc3QpOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbnVtID0gbGUxNl90b19jcHUobGlzdC5sZW4pOworCSpudW1yYXRlcyA9IG51bTsKKwludW0gPSBtaW4obnVtLCBtYXgpOworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorCQlyYXRlc1tpXSA9IChwW2ldICYgMHg3ZikgKiA1MDAwMDA7IC8qIGNvbnZlcnQgdG8gYnBzICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzNmMjNhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qIEVuY2Fwc3VsYXRlIGJhc2ljIHNldHRpbmcgY2hhbmdlcyBvbiBIZXJtZXMgaGFyZHdhcmUKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2lmbmRlZiBfT1JJTk9DT19IV19IXworI2RlZmluZSBfT1JJTk9DT19IV19IXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorCisvKiBIYXJkd2FyZSBCQVBzICovCisjZGVmaW5lIFVTRVJfQkFQIDAKKyNkZWZpbmUgSVJRX0JBUCAgMQorCisvKiBXRVAga2V5IHNpemVzICovCisjZGVmaW5lIFNNQUxMX0tFWV9TSVpFIDUKKyNkZWZpbmUgTEFSR0VfS0VZX1NJWkUgMTMKKworLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBjaGFubmVscyAqLworI2RlZmluZSBOVU1fQ0hBTk5FTFMgMTQKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBvcmlub2NvX3ByaXZhdGU7CitzdHJ1Y3QgZGV2X2FkZHJfbGlzdDsKKworaW50IG9yaW5vY29fZ2V0X2JpdHJhdGVtb2RlKGludCBiaXRyYXRlLCBpbnQgYXV0b21hdGljKTsKK3ZvaWQgb3Jpbm9jb19nZXRfcmF0ZW1vZGVfY2ZnKGludCByYXRlbW9kZSwgaW50ICpiaXRyYXRlLCBpbnQgKmF1dG9tYXRpYyk7CisKK2ludCBvcmlub2NvX2h3X2dldF90a2lwX2l2KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCBrZXksIHU4ICp0c2MpOworaW50IF9fb3Jpbm9jb19od19zZXRfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK2ludCBvcmlub2NvX2h3X2dldF9hY3RfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQgKmJpdHJhdGUpOworaW50IF9fb3Jpbm9jb19od19zZXRfd2FwKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IF9fb3Jpbm9jb19od19zZXR1cF93ZXBrZXlzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IF9fb3Jpbm9jb19od19zZXR1cF9lbmMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgX19vcmlub2NvX2h3X3NldF90a2lwX2tleShoZXJtZXNfdCAqaHcsIGludCBrZXlfaWR4LCBpbnQgc2V0X3R4LAorCQkJICAgICAgdTggKmtleSwgdTggKnJzYywgdTggKnRzYyk7CitpbnQgb3Jpbm9jb19jbGVhcl90a2lwX2tleShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5X2lkeCk7CitpbnQgX19vcmlub2NvX2h3X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCSAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCwKKwkJCQkgICAgaW50IG1jX2NvdW50LCBpbnQgcHJvbWlzYyk7CitpbnQgb3Jpbm9jb19od19nZXRfZXNzaWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50ICphY3RpdmUsCisJCQkgY2hhciBidWZbSVdfRVNTSURfTUFYX1NJWkUrMV0pOworaW50IG9yaW5vY29faHdfZ2V0X2ZyZXEoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7CitpbnQgb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3Qoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgICBpbnQgKm51bXJhdGVzLCBzMzIgKnJhdGVzLCBpbnQgbWF4KTsKKworI2VuZGlmIC8qIF9PUklOT0NPX0hXX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NTU5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYwpAQCAtMCwwICsxLDI2NjcgQEAKKy8qIG1haW4uYyAtIChmb3JtZXJseSBrbm93biBhcyBkbGR3ZF9jcy5jLCBvcmlub2NvX2NzLmMgYW5kIG9yaW5vY28uYykKKyAqCisgKiBBIGRyaXZlciBmb3IgSGVybWVzIG9yIFByaXNtIDIgY2hpcHNldCBiYXNlZCBQQ01DSUEgd2lyZWxlc3MKKyAqIGFkYXB0b3JzLCB3aXRoIEx1Y2VudC9BZ2VyZSwgSW50ZXJzaWwgb3IgU3ltYm9sIGZpcm13YXJlLgorICoKKyAqIEN1cnJlbnQgbWFpbnRhaW5lcnMgKGFzIG9mIDI5IFNlcHRlbWJlciAyMDAzKSBhcmU6CisgKiAJUGF2ZWwgUm9za2luIDxwcm9za2kgQVQgZ251Lm9yZz4KKyAqIGFuZAlEYXZpZCBHaWJzb24gPGhlcm1lcyBBVCBnaWJzb24uZHJvcGJlYXIuaWQuYXU+CisgKgorICogKEMpIENvcHlyaWdodCBEYXZpZCBHaWJzb24sIElCTSBDb3Jwb3JhdGlvbiAyMDAxLTIwMDMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgR2lic29uLCBMaW51eGNhcmUgQXVzdHJhbGlhLgorICoJV2l0aCBzb21lIGhlbHAgZnJvbSA6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgSmVhbiBUb3VycmlsaGVzLCBIUCBMYWJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQmVuamFtaW4gSGVycmVuc2NobWlkdAorICoKKyAqIEJhc2VkIG9uIGR1bW15X2NzLmMgMS4yNyAyMDAwLzA2LzEyIDIxOjI3OjI1CisgKgorICogUG9ydGlvbnMgYmFzZWQgb24gd3ZsYW5fY3MuYyAxLjAuNiwgQ29weXJpZ2h0IEFuZHJlYXMgTmV1aGF1cyA8YW5keQorICogQVQgZmFzdGEuZmgtZG9ydG11bmQuZGU+CisgKiAgICAgIGh0dHA6Ly93d3cuc3R1ZC5maC1kb3J0bXVuZC5kZS9+YW5keS93dmxhbi8KKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCisgKiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZQorICogYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorICogYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZQorICogdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICogVGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBvcmlnaW5hbCBjb2RlIGlzIERhdmlkIEEuIEhpbmRzCisgKiA8ZGFoaW5kcyBBVCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LiAgUG9ydGlvbnMgY3JlYXRlZCBieSBEYXZpZAorICogQS4gSGluZHMgYXJlIENvcHlyaWdodCAoQykgMTk5OSBEYXZpZCBBLiBIaW5kcy4gIEFsbCBSaWdodHMKKyAqIFJlc2VydmVkLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCIpLCBpbgorICogd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhlCisgKiBhYm92ZS4gIElmIHlvdSB3aXNoIHRvIGFsbG93IHRoZSB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorICogb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91cgorICogdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICogZGVsZXRpbmcgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kCisgKiBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwuICBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUKKyAqIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorICogdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIEdQTC4gICovCisKKy8qCisgKiBUT0RPCisgKglvIEhhbmRsZSBkZS1lbmNhcHN1bGF0aW9uIHdpdGhpbiBuZXR3b3JrIGxheWVyLCBwcm92aWRlIDgwMi4xMQorICoJICBoZWFkZXJzIChwYXRjaCBmcm9tIFRob21hcyAnRGVudCcgTWlybGFjaGVyKQorICoJbyBGaXggcG9zc2libGUgcmFjZXMgaW4gU1BZIGhhbmRsaW5nLgorICoJbyBEaXNjb25uZWN0IHdpcmVsZXNzIGV4dGVuc2lvbnMgZnJvbSBmdW5kYW1lbnRhbCBjb25maWd1cmF0aW9uLgorICoJbyAobWF5YmUpIFNvZnR3YXJlIFdFUCBzdXBwb3J0IChwYXRjaCBmcm9tIFN0YW5vIE1lZHVuYSkuCisgKglvIChtYXliZSkgVXNlIG11bHRpcGxlIFR4IGJ1ZmZlcnMgLSBkcml2ZXIgaGFuZGxpbmcgcXVldWUKKyAqCSAgcmF0aGVyIHRoYW4gZmlybXdhcmUuCisgKi8KKworLyogTG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uOgorICoKKyAqIFRoZSBiYXNpYyBwcmluY2lwbGUgaXMgdGhhdCBldmVyeXRoaW5nIGlzIHNlcmlhbGl6ZWQgdGhyb3VnaCBhCisgKiBzaW5nbGUgc3BpbmxvY2ssIHByaXYtPmxvY2suICBUaGUgbG9jayBpcyB1c2VkIGluIHVzZXIsIGJoIGFuZCBpcnEKKyAqIGNvbnRleHQsIHNvIHdoZW4gdGFrZW4gb3V0c2lkZSBoYXJkaXJxIGNvbnRleHQgaXQgc2hvdWxkIGFsd2F5cyBiZQorICogdGFrZW4gd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLiAgVGhlIGxvY2sgcHJvdGVjdHMgYm90aCB0aGUKKyAqIGhhcmR3YXJlIGFuZCB0aGUgc3RydWN0IG9yaW5vY29fcHJpdmF0ZS4KKyAqCisgKiBBbm90aGVyIGZsYWcsIHByaXYtPmh3X3VuYXZhaWxhYmxlIGluZGljYXRlcyB0aGF0IHRoZSBoYXJkd2FyZSBpcworICogdW5hdmFpbGFibGUgZm9yIGFuIGV4dGVuZGVkIHBlcmlvZCBvZiB0aW1lIChlLmcuIHN1c3BlbmRlZCwgb3IgaW4KKyAqIHRoZSBtaWRkbGUgb2YgYSBoYXJkIHJlc2V0KS4gIFRoaXMgZmxhZyBpcyBwcm90ZWN0ZWQgYnkgdGhlCisgKiBzcGlubG9jay4gIEFsbCBjb2RlIHdoaWNoIHRvdWNoZXMgdGhlIGhhcmR3YXJlIHNob3VsZCBjaGVjayB0aGUKKyAqIGZsYWcgYWZ0ZXIgdGFraW5nIHRoZSBsb2NrLCBhbmQgaWYgaXQgaXMgc2V0LCBnaXZlIHVwIG9uIHdoYXRldmVyCisgKiB0aGV5IGFyZSBkb2luZyBhbmQgZHJvcCB0aGUgbG9jayBhZ2Fpbi4gIFRoZSBvcmlub2NvX2xvY2soKQorICogZnVuY3Rpb24gaGFuZGxlcyB0aGlzIChpdCB1bmxvY2tzIGFuZCByZXR1cm5zIC1FQlVTWSBpZgorICogaHdfdW5hdmFpbGFibGUgaXMgbm9uLXplcm8pLgorICovCisKKyNkZWZpbmUgRFJJVkVSX05BTUUgIm9yaW5vY28iCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorCisjaW5jbHVkZSAiaGVybWVzX3JpZC5oIgorI2luY2x1ZGUgImhlcm1lc19kbGQuaCIKKyNpbmNsdWRlICJody5oIgorI2luY2x1ZGUgInNjYW4uaCIKKyNpbmNsdWRlICJtaWMuaCIKKyNpbmNsdWRlICJmdy5oIgorI2luY2x1ZGUgIndleHQuaCIKKyNpbmNsdWRlICJtYWluLmgiCisKKyNpbmNsdWRlICJvcmlub2NvLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTU9EVUxFX0FVVEhPUigiUGF2ZWwgUm9za2luIDxwcm9za2lAZ251Lm9yZz4gJiAiCisJICAgICAgIkRhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBMdWNlbnQgT3Jpbm9jbywgUHJpc20gSUkgYmFzZWQgIgorCQkgICAiYW5kIHNpbWlsYXIgd2lyZWxlc3MgY2FyZHMiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKKworLyogTGV2ZWwgb2YgZGVidWdnaW5nLiBVc2VkIGluIHRoZSBtYWNyb3MgaW4gb3Jpbm9jby5oICovCisjaWZkZWYgT1JJTk9DT19ERUJVRworaW50IG9yaW5vY29fZGVidWcgPSBPUklOT0NPX0RFQlVHOworRVhQT1JUX1NZTUJPTChvcmlub2NvX2RlYnVnKTsKK21vZHVsZV9wYXJhbShvcmlub2NvX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhvcmlub2NvX2RlYnVnLCAiRGVidWcgbGV2ZWwiKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHN1cHByZXNzX2xpbmtzdGF0dXM7IC8qID0gMCAqLworbW9kdWxlX3BhcmFtKHN1cHByZXNzX2xpbmtzdGF0dXMsIGJvb2wsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhzdXBwcmVzc19saW5rc3RhdHVzLCAiRG9uJ3QgbG9nIGxpbmsgc3RhdHVzIGNoYW5nZXMiKTsKKworc3RhdGljIGludCBpZ25vcmVfZGlzY29ubmVjdDsgLyogPSAwICovCittb2R1bGVfcGFyYW0oaWdub3JlX2Rpc2Nvbm5lY3QsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGlnbm9yZV9kaXNjb25uZWN0LAorCQkgIkRvbid0IHJlcG9ydCBsb3N0IGxpbmsgdG8gdGhlIG5ldHdvcmsgbGF5ZXIiKTsKKworaW50IGZvcmNlX21vbml0b3I7IC8qID0gMCAqLworbW9kdWxlX3BhcmFtKGZvcmNlX21vbml0b3IsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZvcmNlX21vbml0b3IsICJBbGxvdyBtb25pdG9yIG1vZGUgZm9yIGFsbCBmaXJtd2FyZSB2ZXJzaW9ucyIpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbnRlcm5hbCBjb25zdGFudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIDgwMi4yIExMQy9TTkFQIGhlYWRlciB1c2VkIGZvciBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uIG92ZXIgODAyLjExICovCitzdGF0aWMgY29uc3QgdTggZW5jYXBzX2hkcltdID0gezB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9OworI2RlZmluZSBFTkNBUFNfT1ZFUkhFQUQJCShzaXplb2YoZW5jYXBzX2hkcikgKyAyKQorCisjZGVmaW5lIE9SSU5PQ09fTUlOX01UVQkJMjU2CisjZGVmaW5lIE9SSU5PQ09fTUFYX01UVQkJKElFRUU4MDIxMV9NQVhfREFUQV9MRU4gLSBFTkNBUFNfT1ZFUkhFQUQpCisKKyNkZWZpbmUgU1lNQk9MX01BWF9WRVJfTEVOCSgxNCkKKyNkZWZpbmUgTUFYX0lSUUxPT1BTX1BFUl9JUlEJMTAKKyNkZWZpbmUgTUFYX0lSUUxPT1BTX1BFUl9KSUZGWQkoMjAwMDAvSFopIC8qIEJhc2VkIG9uIGEgZ3Vlc3RpbWF0ZSBvZgorCQkJCQkgICAgKiBob3cgbWFueSBldmVudHMgdGhlCisJCQkJCSAgICAqIGRldmljZSBjb3VsZAorCQkJCQkgICAgKiBsZWdpdGltYXRlbHkgZ2VuZXJhdGUgKi8KKyNkZWZpbmUgVFhfTklDQlVGX1NJWkVfQlVHCTE1ODUJCS8qIEJ1ZyBpbiBTeW1ib2wgZmlybXdhcmUgKi8KKworI2RlZmluZSBEVU1NWV9GSUQJCTB4RkZGRgorCisvKiNkZWZpbmUgTUFYX01VTFRJQ0FTVChwcml2KQkocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0FHRVJFID8gXAorICBIRVJNRVNfTUFYX01VTFRJQ0FTVCA6IDApKi8KKyNkZWZpbmUgTUFYX01VTFRJQ0FTVChwcml2KQkoSEVSTUVTX01BWF9NVUxUSUNBU1QpCisKKyNkZWZpbmUgT1JJTk9DT19JTlRFTgkgCShIRVJNRVNfRVZfUlggfCBIRVJNRVNfRVZfQUxMT0MgXAorCQkJCSB8IEhFUk1FU19FVl9UWCB8IEhFUk1FU19FVl9UWEVYQyBcCisJCQkJIHwgSEVSTUVTX0VWX1dURVJSIHwgSEVSTUVTX0VWX0lORk8gXAorCQkJCSB8IEhFUk1FU19FVl9JTkZEUk9QKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9yaW5vY29fZXRodG9vbF9vcHM7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERhdGEgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQmVnaW5uaW5nIG9mIHRoZSBUeCBkZXNjcmlwdG9yLCB1c2VkIGluIFR4RXhjIGhhbmRsaW5nICovCitzdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEgeworCXN0cnVjdCBoZXJtZXNfdHhfZGVzY3JpcHRvciBkZXNjOworCV9fbGUxNiBmcmFtZV9jdGw7CisJX19sZTE2IGR1cmF0aW9uX2lkOworCXU4IGFkZHIxW0VUSF9BTEVOXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBSeCBmcmFtZSBoZWFkZXIgZXhjZXB0IGNvbXBhdGliaWxpdHkgODAyLjMgaGVhZGVyICovCitzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgeworCS8qIENvbnRyb2wgKi8KKwlfX2xlMTYgc3RhdHVzOworCV9fbGUzMiB0aW1lOworCXU4IHNpbGVuY2U7CisJdTggc2lnbmFsOworCXU4IHJhdGU7CisJdTggcnhmbG93OworCV9fbGUzMiByZXNlcnZlZDsKKworCS8qIDgwMi4xMSBoZWFkZXIgKi8KKwlfX2xlMTYgZnJhbWVfY3RsOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVtFVEhfQUxFTl07CisJdTggYWRkcjJbRVRIX0FMRU5dOworCXU4IGFkZHIzW0VUSF9BTEVOXTsKKwlfX2xlMTYgc2VxX2N0bDsKKwl1OCBhZGRyNFtFVEhfQUxFTl07CisKKwkvKiBEYXRhIGxlbmd0aCAqLworCV9fbGUxNiBkYXRhX2xlbjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhIHsKKwlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEludGVybmFsIGhlbHBlciBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZCBzZXRfcG9ydF90eXBlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJc3dpdGNoIChwcml2LT5pd19tb2RlKSB7CisJY2FzZSBJV19NT0RFX0lORlJBOgorCQlwcml2LT5wb3J0X3R5cGUgPSAxOworCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJV19NT0RFX0FESE9DOgorCQlpZiAocHJpdi0+cHJlZmVyX3BvcnQzKSB7CisJCQlwcml2LT5wb3J0X3R5cGUgPSAzOworCQkJcHJpdi0+Y3JlYXRlaWJzcyA9IDA7CisJCX0gZWxzZSB7CisJCQlwcml2LT5wb3J0X3R5cGUgPSBwcml2LT5pYnNzX3BvcnQ7CisJCQlwcml2LT5jcmVhdGVpYnNzID0gMTsKKwkJfQorCQlicmVhazsKKwljYXNlIElXX01PREVfTU9OSVRPUjoKKwkJcHJpdi0+cG9ydF90eXBlID0gMzsKKwkJcHJpdi0+Y3JlYXRlaWJzcyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgcHJpdi0+aXdfbW9kZSBpbiBzZXRfcG9ydF90eXBlKClcbiIsCisJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERldmljZSBtZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBvcmlub2NvX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnI7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOworCisJaWYgKCFlcnIpCisJCXByaXYtPm9wZW4gPSAxOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IDA7CisKKwkvKiBXZSBtdXN0bid0IHVzZSBvcmlub2NvX2xvY2soKSBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgdG8gYmUKKwkgICBhYmxlIHRvIGNsb3NlIHRoZSBpbnRlcmZhY2UgZXZlbiBpZiBod191bmF2YWlsYWJsZSBpcyBzZXQKKwkgICAoZS5nLiBhcyB3ZSdyZSByZWxlYXNlZCBhZnRlciBhIFBDIENhcmQgcmVtb3ZhbCkgKi8KKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXByaXYtPm9wZW4gPSAwOworCisJZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKKworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm9yaW5vY29fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlyZXR1cm4gJnByaXYtPnN0YXRzOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KCkgIgorCQkgICAgICAgImNhbGxlZCB3aGVuIGh3X3VuYXZhaWxhYmxlXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKChuZXdfbXR1IDwgT1JJTk9DT19NSU5fTVRVKSB8fCAobmV3X210dSA+IE9SSU5PQ09fTUFYX01UVSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogTVRVICsgZW5jYXBzdWxhdGlvbiArIGhlYWRlciBsZW5ndGggKi8KKwlpZiAoKG5ld19tdHUgKyBFTkNBUFNfT1ZFUkhFQUQgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpKSA+CisJICAgICAocHJpdi0+bmljYnVmX3NpemUgLSBFVEhfSExFTikpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2LT5tdHUgPSBuZXdfbXR1OworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFR4IHBhdGggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBvcmlub2NvX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnIgPSAwOworCXUxNiB0eGZpZCA9IHByaXYtPnR4ZmlkOworCXN0cnVjdCBldGhoZHIgKmVoOworCWludCB0eF9jb250cm9sOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUeCBvbiBzdG9wcGVkIGRldmljZSFcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFR4IHdoaWxlIHRyYW5zbWl0dGVyIGJ1c3khXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29feG1pdCgpIGNhbGxlZCB3aGlsZSBod191bmF2YWlsYWJsZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSB8fCAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpKSB7CisJCS8qIE9vcHMsIHRoZSBmaXJtd2FyZSBoYXNuJ3QgZXN0YWJsaXNoZWQgYSBjb25uZWN0aW9uLAorCQkgICBzaWxlbnRseSBkcm9wIHRoZSBwYWNrZXQgKHRoaXMgc2VlbXMgdG8gYmUgdGhlCisJCSAgIHNhZmVzdCBhcHByb2FjaCkuICovCisJCWdvdG8gZHJvcDsKKwl9CisKKwkvKiBDaGVjayBwYWNrZXQgbGVuZ3RoICovCisJaWYgKHNrYi0+bGVuIDwgRVRIX0hMRU4pCisJCWdvdG8gZHJvcDsKKworCXR4X2NvbnRyb2wgPSBIRVJNRVNfVFhDVFJMX1RYX09LIHwgSEVSTUVTX1RYQ1RSTF9UWF9FWDsKKworCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkKKwkJdHhfY29udHJvbCB8PSAocHJpdi0+dHhfa2V5IDw8IEhFUk1FU19NSUNfS0VZX0lEX1NISUZUKSB8CisJCQlIRVJNRVNfVFhDVFJMX01JQzsKKworCWlmIChwcml2LT5oYXNfYWx0X3R4Y250bCkgeworCQkvKiBXUEEgZW5hYmxlZCBmaXJtd2FyZXMgaGF2ZSB0eF9jbnRsIGF0IHRoZSBlbmQgb2YKKwkJICogdGhlIDgwMi4xMSBoZWFkZXIuICBTbyB3cml0ZSB6ZXJvZWQgZGVzY3JpcHRvciBhbmQKKwkJICogODAyLjExIGhlYWRlciBhdCB0aGUgc2FtZSB0aW1lCisJCSAqLworCQljaGFyIGRlc2NbSEVSTUVTXzgwMl8zX09GRlNFVF07CisJCV9fbGUxNiAqdHhjbnRsID0gKF9fbGUxNiAqKSAmZGVzY1tIRVJNRVNfVFhDTlRMMl9PRkZTRVRdOworCisJCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKKworCQkqdHhjbnRsID0gY3B1X3RvX2xlMTYodHhfY29udHJvbCk7CisJCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgJmRlc2MsIHNpemVvZihkZXNjKSwKKwkJCQkJdHhmaWQsIDApOworCQlpZiAoZXJyKSB7CisJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgVHggIgorCQkJCSAgICAgICAiZGVzY3JpcHRvciB0byBCQVBcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gYnVzeTsKKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBoZXJtZXNfdHhfZGVzY3JpcHRvciBkZXNjOworCisJCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKKworCQlkZXNjLnR4X2NvbnRyb2wgPSBjcHVfdG9fbGUxNih0eF9jb250cm9sKTsKKwkJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCAmZGVzYywgc2l6ZW9mKGRlc2MpLAorCQkJCQl0eGZpZCwgMCk7CisJCWlmIChlcnIpIHsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBUeCAiCisJCQkJICAgICAgICJkZXNjcmlwdG9yIHRvIEJBUFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQkJZ290byBidXN5OworCQl9CisKKwkJLyogQ2xlYXIgdGhlIDgwMi4xMSBoZWFkZXIgYW5kIGRhdGEgbGVuZ3RoIGZpZWxkcyAtIHNvbWUKKwkJICogZmlybXdhcmVzIChlLmcuIEx1Y2VudC9BZ2VyZSA4Lnh4KSBhcHBlYXIgdG8gZ2V0IGNvbmZ1c2VkCisJCSAqIGlmIHRoaXMgaXNuJ3QgZG9uZS4gKi8KKwkJaGVybWVzX2NsZWFyX3dvcmRzKGh3LCBIRVJNRVNfREFUQTAsCisJCQkJICAgSEVSTUVTXzgwMl8zX09GRlNFVCAtIEhFUk1FU184MDJfMTFfT0ZGU0VUKTsKKwl9CisKKwllaCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOworCisJLyogRW5jYXBzdWxhdGUgRXRoZXJuZXQtSUkgZnJhbWVzICovCisJaWYgKG50b2hzKGVoLT5oX3Byb3RvKSA+IEVUSF9EQVRBX0xFTikgeyAvKiBFdGhlcm5ldC1JSSBmcmFtZSAqLworCQlzdHJ1Y3QgaGVhZGVyX3N0cnVjdCB7CisJCQlzdHJ1Y3QgZXRoaGRyIGV0aDsJLyogODAyLjMgaGVhZGVyICovCisJCQl1OCBlbmNhcFs2XTsJCS8qIDgwMi4yIGhlYWRlciAqLworCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZHI7CisKKwkJLyogU3RyaXAgZGVzdGluYXRpb24gYW5kIHNvdXJjZSBmcm9tIHRoZSBkYXRhICovCisJCXNrYl9wdWxsKHNrYiwgMiAqIEVUSF9BTEVOKTsKKworCQkvKiBBbmQgbW92ZSB0aGVtIHRvIGEgc2VwYXJhdGUgaGVhZGVyICovCisJCW1lbWNweSgmaGRyLmV0aCwgZWgsIDIgKiBFVEhfQUxFTik7CisJCWhkci5ldGguaF9wcm90byA9IGh0b25zKHNpemVvZihlbmNhcHNfaGRyKSArIHNrYi0+bGVuKTsKKwkJbWVtY3B5KGhkci5lbmNhcCwgZW5jYXBzX2hkciwgc2l6ZW9mKGVuY2Fwc19oZHIpKTsKKworCQkvKiBJbnNlcnQgdGhlIFNOQVAgaGVhZGVyICovCisJCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IHNpemVvZihoZHIpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXM6IE5vdCBlbm91Z2ggaGVhZHJvb20gZm9yIDgwMi4yIGhlYWRlcnMgJWRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBza2JfaGVhZHJvb20oc2tiKSk7CisJCQlnb3RvIGRyb3A7CisJCX0KKwkJZWggPSAoc3RydWN0IGV0aGhkciAqKSBza2JfcHVzaChza2IsIHNpemVvZihoZHIpKTsKKwkJbWVtY3B5KGVoLCAmaGRyLCBzaXplb2YoaGRyKSk7CisJfQorCisJZXJyID0gaGVybWVzX2JhcF9wd3JpdGUoaHcsIFVTRVJfQkFQLCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCXR4ZmlkLCBIRVJNRVNfODAyXzNfT0ZGU0VUKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgcGFja2V0IHRvIEJBUFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBidXN5OworCX0KKworCS8qIENhbGN1bGF0ZSBNaWNoYWVsIE1JQyAqLworCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfVEtJUCkgeworCQl1OCBtaWNfYnVmW01JQ0hBRUxfTUlDX0xFTiArIDFdOworCQl1OCAqbWljOworCQlzaXplX3Qgb2Zmc2V0OworCQlzaXplX3QgbGVuOworCisJCWlmIChza2ItPmxlbiAlIDIpIHsKKwkJCS8qIE1JQyBzdGFydCBpcyBvbiBhbiBvZGQgYm91bmRhcnkgKi8KKwkJCW1pY19idWZbMF0gPSBza2ItPmRhdGFbc2tiLT5sZW4gLSAxXTsKKwkJCW1pYyA9ICZtaWNfYnVmWzFdOworCQkJb2Zmc2V0ID0gc2tiLT5sZW4gLSAxOworCQkJbGVuID0gTUlDSEFFTF9NSUNfTEVOICsgMTsKKwkJfSBlbHNlIHsKKwkJCW1pYyA9ICZtaWNfYnVmWzBdOworCQkJb2Zmc2V0ID0gc2tiLT5sZW47CisJCQlsZW4gPSBNSUNIQUVMX01JQ19MRU47CisJCX0KKworCQlvcmlub2NvX21pYyhwcml2LT50eF90Zm1fbWljLAorCQkJICAgIHByaXYtPnRraXBfa2V5W3ByaXYtPnR4X2tleV0udHhfbWljLAorCQkJICAgIGVoLT5oX2Rlc3QsIGVoLT5oX3NvdXJjZSwgMCAvKiBwcmlvcml0eSAqLywKKwkJCSAgICBza2ItPmRhdGEgKyBFVEhfSExFTiwgc2tiLT5sZW4gLSBFVEhfSExFTiwgbWljKTsKKworCQkvKiBXcml0ZSB0aGUgTUlDICovCisJCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgJm1pY19idWZbMF0sIGxlbiwKKwkJCQkJdHhmaWQsIEhFUk1FU184MDJfM19PRkZTRVQgKyBvZmZzZXQpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIE1JQyB0byBCQVBcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJZ290byBidXN5OworCQl9CisJfQorCisJLyogRmluYWxseSwgd2UgYWN0dWFsbHkgaW5pdGlhdGUgdGhlIHNlbmQgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9UWCB8IEhFUk1FU19DTURfUkVDTCwKKwkJCQl0eGZpZCwgTlVMTCk7CisJaWYgKGVycikgeworCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgdHJhbnNtaXR0aW5nIHBhY2tldFxuIiwKKwkJCQlkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gYnVzeTsKKwl9CisKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlzdGF0cy0+dHhfYnl0ZXMgKz0gSEVSTUVTXzgwMl8zX09GRlNFVCArIHNrYi0+bGVuOworCWdvdG8gb2s7CisKKyBkcm9wOgorCXN0YXRzLT50eF9lcnJvcnMrKzsKKwlzdGF0cy0+dHhfZHJvcHBlZCsrOworCisgb2s6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworIGJ1c3k6CisJaWYgKGVyciA9PSAtRUlPKQorCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBORVRERVZfVFhfQlVTWTsKK30KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2FsbG9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MTYgZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgQUxMT0NGSUQpOworCisJaWYgKGZpZCAhPSBwcml2LT50eGZpZCkgeworCQlpZiAoZmlkICE9IERVTU1ZX0ZJRCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBbGxvY2F0ZSBldmVudCBvbiB1bmV4cGVjdGVkIGZpZCAoJTA0WClcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBmaWQpOworCQlyZXR1cm47CisJfQorCisJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEFMTE9DRklELCBEVU1NWV9GSUQpOworfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKworCXN0YXRzLT50eF9wYWNrZXRzKys7CisKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CisKKwloZXJtZXNfd3JpdGVfcmVnbihodywgVFhDT01QTEZJRCwgRFVNTVlfRklEKTsKK30KKworc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3R4ZXhjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJdTE2IGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIFRYQ09NUExGSUQpOworCXUxNiBzdGF0dXM7CisJc3RydWN0IGhlcm1lc190eGV4Y19kYXRhIGhkcjsKKwlpbnQgZXJyID0gMDsKKworCWlmIChmaWQgPT0gRFVNTVlfRklEKQorCQlyZXR1cm47IC8qIE5vdGhpbmcncyByZWFsbHkgaGFwcGVuZWQgKi8KKworCS8qIFJlYWQgcGFydCBvZiB0aGUgZnJhbWUgaGVhZGVyIC0gd2UgbmVlZCBzdGF0dXMgYW5kIGFkZHIxICovCisJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgJmhkciwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGhlcm1lc190eGV4Y19kYXRhKSwKKwkJCSAgICAgICBmaWQsIDApOworCisJaGVybWVzX3dyaXRlX3JlZ24oaHcsIFRYQ09NUExGSUQsIERVTU1ZX0ZJRCk7CisJc3RhdHMtPnR4X2Vycm9ycysrOworCisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIHJlYWQgZGVzY3JpcHRvciBvbiBUeCBlcnJvciAiCisJCSAgICAgICAiKEZJRD0lMDRYIGVycm9yICVkKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZmlkLCBlcnIpOworCQlyZXR1cm47CisJfQorCisJREVCVUcoMSwgIiVzOiBUeCBlcnJvciwgZXJyICVkIChGSUQ9JTA0WClcbiIsIGRldi0+bmFtZSwKKwkgICAgICBlcnIsIGZpZCk7CisKKwkvKiBXZSBwcm9kdWNlIGEgVFhEUk9QIGV2ZW50IG9ubHkgZm9yIHJldHJ5IG9yIGxpZmV0aW1lCisJICogZXhjZWVkZWQsIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IHN0YXR1cyB0aGF0IHJlYWxseSBtZWFuCisJICogdGhhdCB0aGlzIHBhcnRpY3VsYXIgbm9kZSB3ZW50IGF3YXkuCisJICogT3RoZXIgZXJyb3JzIG1lYW5zIHRoYXQgKndlKiBzY3Jld2VkIHVwLiAtIEplYW4gSUkgKi8KKwlzdGF0dXMgPSBsZTE2X3RvX2NwdShoZHIuZGVzYy5zdGF0dXMpOworCWlmIChzdGF0dXMgJiAoSEVSTUVTX1RYU1RBVF9SRVRSWUVSUiB8IEhFUk1FU19UWFNUQVRfQUdFREVSUikpIHsKKwkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OworCisJCS8qIENvcHkgODAyLjExIGRlc3QgYWRkcmVzcy4KKwkJICogV2UgdXNlIHRoZSA4MDIuMTEgaGVhZGVyIGJlY2F1c2UgdGhlIGZyYW1lIG1heQorCQkgKiBub3QgYmUgODAyLjMgb3IgbWF5IGJlIG1hbmdsZWQuLi4KKwkJICogSW4gQWQtSG9jIG1vZGUsIGl0IHdpbGwgYmUgdGhlIG5vZGUgYWRkcmVzcy4KKwkJICogSW4gbWFuYWdlZCBtb2RlLCBpdCB3aWxsIGJlIG1vc3QgbGlrZWx5IHRoZSBBUCBhZGRyCisJCSAqIFVzZXIgc3BhY2Ugd2lsbCBmaWd1cmUgb3V0IGhvdyB0byBjb252ZXJ0IGl0IHRvCisJCSAqIHdoYXRldmVyIGl0IG5lZWRzIChJUCBhZGRyZXNzIG9yIGVsc2UpLgorCQkgKiAtIEplYW4gSUkgKi8KKwkJbWVtY3B5KHdycXUuYWRkci5zYV9kYXRhLCBoZHIuYWRkcjEsIEVUSF9BTEVOKTsKKwkJd3JxdS5hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKworCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KKwkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZUWERST1AsICZ3cnF1LCBOVUxMKTsKKwl9CisKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUeCB0aW1lb3V0ISAiCisJICAgICAgICJBTExPQ0ZJRD0lMDR4LCBUWENPTVBMRklEPSUwNHgsIEVWU1RBVD0lMDR4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGhlcm1lc19yZWFkX3JlZ24oaHcsIEFMTE9DRklEKSwKKwkgICAgICAgaGVybWVzX3JlYWRfcmVnbihodywgVFhDT01QTEZJRCksIGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCkpOworCisJc3RhdHMtPnR4X2Vycm9ycysrOworCisJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJ4IHBhdGggKGRhdGEgZnJhbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogRG9lcyB0aGUgZnJhbWUgaGF2ZSBhIFNOQVAgaGVhZGVyIGluZGljYXRpbmcgaXQgc2hvdWxkIGJlCisgKiBkZS1lbmNhcHN1bGF0ZWQgdG8gRXRoZXJuZXQtSUk/ICovCitzdGF0aWMgaW5saW5lIGludCBpc19ldGhlcnNuYXAodm9pZCAqX2hkcikKK3sKKwl1OCAqaGRyID0gX2hkcjsKKworCS8qIFdlIGRlLWVuY2Fwc3VsYXRlIGFsbCBwYWNrZXRzIHdoaWNoLCBhKSBoYXZlIFNOQVAgaGVhZGVycworCSAqIChpLmUuIFNTQVA9RFNBUD0weGFhIGFuZCBDVFJMPTB4MyBpbiB0aGUgODAyLjIgTExDIGhlYWRlcgorCSAqIGFuZCB3aGVyZSBiKSB0aGUgT1VJIG9mIHRoZSBTTkFQIGhlYWRlciBpcyAwMDowMDowMCBvcgorCSAqIDAwOjAwOmY4IC0gd2UgbmVlZCBib3RoIGJlY2F1c2UgZGlmZmVyZW50IEFQcyBhcHBlYXIgdG8gdXNlCisJICogZGlmZmVyZW50IE9VSXMgZm9yIHNvbWUgcmVhc29uICovCisJcmV0dXJuIChtZW1jbXAoaGRyLCAmZW5jYXBzX2hkciwgNSkgPT0gMCkKKwkJJiYgKChoZHJbNV0gPT0gMHgwMCkgfHwgKGhkcls1XSA9PSAweGY4KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBvcmlub2NvX3NweV9nYXRoZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdV9jaGFyICptYWMsCisJCQkJICAgICAgaW50IGxldmVsLCBpbnQgbm9pc2UpCit7CisJc3RydWN0IGl3X3F1YWxpdHkgd3N0YXRzOworCXdzdGF0cy5sZXZlbCA9IGxldmVsIC0gMHg5NTsKKwl3c3RhdHMubm9pc2UgPSBub2lzZSAtIDB4OTU7CisJd3N0YXRzLnF1YWwgPSAobGV2ZWwgPiBub2lzZSkgPyAobGV2ZWwgLSBub2lzZSkgOiAwOworCXdzdGF0cy51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOworCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLworCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBtYWMsICZ3c3RhdHMpOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3N0YXRfZ2F0aGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBVc2luZyBzcHkgc3VwcG9ydCB3aXRoIGxvdHMgb2YgUnggcGFja2V0cywgbGlrZSBpbiBhbgorCSAqIGluZnJhc3RydWN0dXJlIChBUCksIHdpbGwgcmVhbGx5IHNsb3cgZG93biBldmVyeXRoaW5nLCBiZWNhdXNlCisJICogdGhlIE1BQyBhZGRyZXNzIG11c3QgYmUgY29tcGFyZWQgdG8gZWFjaCBlbnRyeSBvZiB0aGUgc3B5IGxpc3QuCisJICogSWYgdGhlIHVzZXIgcmVhbGx5IGFza3MgZm9yIGl0IChzZXQgc29tZSBhZGRyZXNzIGluIHRoZQorCSAqIHNweSBsaXN0KSwgd2UgZG8gaXQsIGJ1dCBoZSB3aWxsIHBheSB0aGUgcHJpY2UuCisJICogTm90ZSB0aGF0IHRvIGdldCBoZXJlLCB5b3UgbmVlZCBib3RoIFdJUkVMRVNTX1NQWQorCSAqIGNvbXBpbGVkIGluIEFORCBzb21lIGFkZHJlc3NlcyBpbiB0aGUgbGlzdCAhISEKKwkgKi8KKwkvKiBOb3RlIDogZ2NjIHdpbGwgb3B0aW1pc2UgdGhlIHdob2xlIHNlY3Rpb24gYXdheSBpZgorCSAqIFdJUkVMRVNTX1NQWSBpcyBub3QgZGVmaW5lZC4uLiAtIEplYW4gSUkgKi8KKwlpZiAoU1BZX05VTUJFUihwcml2KSkgeworCQlvcmlub2NvX3NweV9nYXRoZXIoZGV2LCBza2JfbWFjX2hlYWRlcihza2IpICsgRVRIX0FMRU4sCisJCQkJICAgZGVzYy0+c2lnbmFsLCBkZXNjLT5zaWxlbmNlKTsKKwl9Cit9CisKKy8qCisgKiBvcmlub2NvX3J4X21vbml0b3IgLSBoYW5kbGUgcmVjZWl2ZWQgbW9uaXRvciBmcmFtZXMuCisgKgorICogQXJndW1lbnRzOgorICoJZGV2CQluZXR3b3JrIGRldmljZQorICoJcnhmaWQJCXJlY2VpdmVkIEZJRAorICoJZGVzYwkJcnggZGVzY3JpcHRvciBvZiB0aGUgZnJhbWUKKyAqCisgKiBDYWxsIGNvbnRleHQ6IGludGVycnVwdAorICovCitzdGF0aWMgdm9pZCBvcmlub2NvX3J4X21vbml0b3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJ4ZmlkLAorCQkJICAgICAgIHN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYykKK3sKKwl1MzIgaGRybGVuID0gMzA7CS8qIHJldHVybiBmdWxsIGhlYWRlciBieSBkZWZhdWx0ICovCisJdTMyIGRhdGFsZW4gPSAwOworCXUxNiBmYzsKKwlpbnQgZXJyOworCWludCBsZW47CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCisJbGVuID0gbGUxNl90b19jcHUoZGVzYy0+ZGF0YV9sZW4pOworCisJLyogRGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZSBoZWFkZXIgYW5kIHRoZSBkYXRhICovCisJZmMgPSBsZTE2X3RvX2NwdShkZXNjLT5mcmFtZV9jdGwpOworCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgeworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6CisJCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKQorCQkgICAgJiYgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSkKKwkJCWhkcmxlbiA9IDMwOworCQllbHNlCisJCQloZHJsZW4gPSAyNDsKKwkJZGF0YWxlbiA9IGxlbjsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKKwkJaGRybGVuID0gMjQ7CisJCWRhdGFsZW4gPSBsZW47CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKKwkJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BTUE9MTDoKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUlRTOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DRkVORDoKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ0ZFTkRBQ0s6CisJCQloZHJsZW4gPSAxNjsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DVFM6CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDSzoKKwkJCWhkcmxlbiA9IDEwOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVW5rbm93biBmcmFtZSB0eXBlICovCisJCWJyZWFrOworCX0KKworCS8qIHNhbml0eSBjaGVjayB0aGUgbGVuZ3RoICovCisJaWYgKGRhdGFsZW4gPiBJRUVFODAyMTFfTUFYX0RBVEFfTEVOICsgMTIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvdmVyc2l6ZWQgbW9uaXRvciBmcmFtZSwgIgorCQkgICAgICAgImRhdGEgbGVuZ3RoID0gJWRcbiIsIGRldi0+bmFtZSwgZGF0YWxlbik7CisJCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2IoaGRybGVuICsgZGF0YWxlbik7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbm5vdCBhbGxvY2F0ZSBza2IgZm9yIG1vbml0b3IgZnJhbWVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwkvKiBDb3B5IHRoZSA4MDIuMTEgaGVhZGVyIHRvIHRoZSBza2IgKi8KKwltZW1jcHkoc2tiX3B1dChza2IsIGhkcmxlbiksICYoZGVzYy0+ZnJhbWVfY3RsKSwgaGRybGVuKTsKKwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCisJLyogSWYgYW55LCBjb3B5IHRoZSBkYXRhIGZyb20gdGhlIGNhcmQgdG8gdGhlIHNrYiAqLworCWlmIChkYXRhbGVuID4gMCkgeworCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCBza2JfcHV0KHNrYiwgZGF0YWxlbiksCisJCQkJICAgICAgIEFMSUdOKGRhdGFsZW4sIDIpLCByeGZpZCwKKwkJCQkgICAgICAgSEVSTUVTXzgwMl8yX09GRlNFVCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgbW9uaXRvciBmcmFtZVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIGRyb3A7CisJCX0KKwl9CisKKwlza2ItPmRldiA9IGRldjsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CisJc2tiLT5wcm90b2NvbCA9IGNwdV90b19iZTE2KEVUSF9QXzgwMl8yKTsKKworCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCisJbmV0aWZfcngoc2tiKTsKKwlyZXR1cm47CisKKyBkcm9wOgorCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisgdXBkYXRlX3N0YXRzOgorCXN0YXRzLT5yeF9lcnJvcnMrKzsKKwlzdGF0cy0+cnhfZHJvcHBlZCsrOworfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKKwlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwl1MTYgcnhmaWQsIHN0YXR1czsKKwlpbnQgbGVuZ3RoOworCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYzsKKwlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhOworCWludCBlcnI7CisKKwlkZXNjID0ga21hbGxvYyhzaXplb2YoKmRlc2MpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWRlc2MpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIiVzOiBDYW4ndCBhbGxvY2F0ZSBzcGFjZSBmb3IgUlggZGVzY3JpcHRvclxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCXJ4ZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgUlhGSUQpOworCisJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgZGVzYywgc2l6ZW9mKCpkZXNjKSwKKwkJCSAgICAgICByeGZpZCwgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIFJ4IGRlc2NyaXB0b3IuICIKKwkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwlzdGF0dXMgPSBsZTE2X3RvX2NwdShkZXNjLT5zdGF0dXMpOworCisJaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfQkFEQ1JDKSB7CisJCURFQlVHKDEsICIlczogQmFkIENSQyBvbiBSeC4gRnJhbWUgZHJvcHBlZC5cbiIsCisJCSAgICAgIGRldi0+bmFtZSk7CisJCXN0YXRzLT5yeF9jcmNfZXJyb3JzKys7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCS8qIEhhbmRsZSBmcmFtZXMgaW4gbW9uaXRvciBtb2RlICovCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCW9yaW5vY29fcnhfbW9uaXRvcihkZXYsIHJ4ZmlkLCBkZXNjKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfVU5ERUNSWVBUQUJMRSkgeworCQlERUJVRygxLCAiJXM6IFVuZGVjcnlwdGFibGUgZnJhbWUgb24gUnguIEZyYW1lIGRyb3BwZWQuXG4iLAorCQkgICAgICBkZXYtPm5hbWUpOworCQl3c3RhdHMtPmRpc2NhcmQuY29kZSsrOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisKKwlsZW5ndGggPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7CisKKwkvKiBTYW5pdHkgY2hlY2tzICovCisJaWYgKGxlbmd0aCA8IDMpIHsgLyogTm8gZm9yIGV2ZW4gYW4gODAyLjIgTExDIGhlYWRlciAqLworCQkvKiBBdCBsZWFzdCBvbiBTeW1ib2wgZmlybXdhcmUgd2l0aCBQQ0Ygd2UgZ2V0IHF1aXRlIGEKKwkJICAgbG90IG9mIHRoZXNlIGxlZ2l0aW1hdGVseSAtIFBvbGwgZnJhbWVzIHdpdGggbm8KKwkJICAgZGF0YS4gKi8KKwkJZ290byBvdXQ7CisJfQorCWlmIChsZW5ndGggPiBJRUVFODAyMTFfTUFYX0RBVEFfTEVOKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgZnJhbWUgcmVjZWl2ZWQgKCVkIGJ5dGVzKVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgbGVuZ3RoKTsKKwkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJZ290byB1cGRhdGVfc3RhdHM7CisJfQorCisJLyogUGF5bG9hZCBzaXplIGRvZXMgbm90IGluY2x1ZGUgTWljaGFlbCBNSUMuIEluY3JlYXNlIHBheWxvYWQKKwkgKiBzaXplIHRvIHJlYWQgaXQgdG9nZXRoZXIgd2l0aCB0aGUgZGF0YS4gKi8KKwlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUMpCisJCWxlbmd0aCArPSBNSUNIQUVMX01JQ19MRU47CisKKwkvKiBXZSBuZWVkIHNwYWNlIGZvciB0aGUgcGFja2V0IGRhdGEgaXRzZWxmLCBwbHVzIGFuIGV0aGVybmV0CisJICAgaGVhZGVyLCBwbHVzIDIgYnl0ZXMgc28gd2UgY2FuIGFsaWduIHRoZSBJUCBoZWFkZXIgb24gYQorCSAgIDMyYml0IGJvdW5kYXJ5LCBwbHVzIDEgYnl0ZSBzbyB3ZSBjYW4gcmVhZCBpbiBvZGQgbGVuZ3RoCisJICAgcGFja2V0cyBmcm9tIHRoZSBjYXJkLCB3aGljaCBoYXMgYW4gSU8gZ3JhbnVsYXJpdHkgb2YgMTYKKwkgICBiaXRzICovCisJc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGgrRVRIX0hMRU4rMisxKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2FuJ3QgYWxsb2NhdGUgc2tiIGZvciBSeFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gdXBkYXRlX3N0YXRzOworCX0KKworCS8qIFdlJ2xsIHByZXBlbmQgdGhlIGhlYWRlciwgc28gcmVzZXJ2ZSBzcGFjZSBmb3IgaXQuICBUaGUgd29yc3QKKwkgICBjYXNlIGlzIG5vIGRlY2Fwc3VsYXRpb24sIHdoZW4gODAyLjMgaGVhZGVyIGlzIHByZXBlbmRlZCBhbmQKKwkgICBub3RoaW5nIGlzIHJlbW92ZWQuICAyIGlzIGZvciBhbGlnbmluZyB0aGUgSVAgaGVhZGVyLiAgKi8KKwlza2JfcmVzZXJ2ZShza2IsIEVUSF9ITEVOICsgMik7CisKKwllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCBza2JfcHV0KHNrYiwgbGVuZ3RoKSwKKwkJCSAgICAgICBBTElHTihsZW5ndGgsIDIpLCByeGZpZCwKKwkJCSAgICAgICBIRVJNRVNfODAyXzJfT0ZGU0VUKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgZnJhbWUuICIKKwkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIGRyb3A7CisJfQorCisJLyogQWRkIGRlc2MgYW5kIHNrYiB0byByeCBxdWV1ZSAqLworCXJ4X2RhdGEgPSBremFsbG9jKHNpemVvZigqcnhfZGF0YSksIEdGUF9BVE9NSUMpOworCWlmICghcnhfZGF0YSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2FuJ3QgYWxsb2NhdGUgUlggcGFja2V0XG4iLAorCQkJZGV2LT5uYW1lKTsKKwkJZ290byBkcm9wOworCX0KKwlyeF9kYXRhLT5kZXNjID0gZGVzYzsKKwlyeF9kYXRhLT5za2IgPSBza2I7CisJbGlzdF9hZGRfdGFpbCgmcnhfZGF0YS0+bGlzdCwgJnByaXYtPnJ4X2xpc3QpOworCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnJ4X3Rhc2tsZXQpOworCisJcmV0dXJuOworCitkcm9wOgorCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Cit1cGRhdGVfc3RhdHM6CisJc3RhdHMtPnJ4X2Vycm9ycysrOworCXN0YXRzLT5yeF9kcm9wcGVkKys7CitvdXQ6CisJa2ZyZWUoZGVzYyk7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIHN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYywKKwkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOworCXUxNiBzdGF0dXMsIGZjOworCWludCBsZW5ndGg7CisJc3RydWN0IGV0aGhkciAqaGRyOworCisJc3RhdHVzID0gbGUxNl90b19jcHUoZGVzYy0+c3RhdHVzKTsKKwlsZW5ndGggPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7CisJZmMgPSBsZTE2X3RvX2NwdShkZXNjLT5mcmFtZV9jdGwpOworCisJLyogQ2FsY3VsYXRlIGFuZCBjaGVjayBNSUMgKi8KKwlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUMpIHsKKwkJaW50IGtleV9pZCA9ICgoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUNfS0VZX0lEKSA+PgorCQkJICAgICAgSEVSTUVTX01JQ19LRVlfSURfU0hJRlQpOworCQl1OCBtaWNbTUlDSEFFTF9NSUNfTEVOXTsKKwkJdTggKnJ4bWljOworCQl1OCAqc3JjID0gKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSA/CisJCQlkZXNjLT5hZGRyMyA6IGRlc2MtPmFkZHIyOworCisJCS8qIEV4dHJhY3QgTWljaGFlbCBNSUMgZnJvbSBwYXlsb2FkICovCisJCXJ4bWljID0gc2tiLT5kYXRhICsgc2tiLT5sZW4gLSBNSUNIQUVMX01JQ19MRU47CisKKwkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIE1JQ0hBRUxfTUlDX0xFTik7CisJCWxlbmd0aCAtPSBNSUNIQUVMX01JQ19MRU47CisKKwkJb3Jpbm9jb19taWMocHJpdi0+cnhfdGZtX21pYywKKwkJCSAgICBwcml2LT50a2lwX2tleVtrZXlfaWRdLnJ4X21pYywKKwkJCSAgICBkZXNjLT5hZGRyMSwKKwkJCSAgICBzcmMsCisJCQkgICAgMCwgLyogcHJpb3JpdHkgb3IgUW9TPyAqLworCQkJICAgIHNrYi0+ZGF0YSwKKwkJCSAgICBza2ItPmxlbiwKKwkJCSAgICAmbWljWzBdKTsKKworCQlpZiAobWVtY21wKG1pYywgcnhtaWMsCisJCQkgICBNSUNIQUVMX01JQ19MRU4pKSB7CisJCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJCQlzdHJ1Y3QgaXdfbWljaGFlbG1pY2ZhaWx1cmUgd3htaWM7CisKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCisJCQkgICAgICAgIkludmFsaWQgTWljaGFlbCBNSUMgaW4gZGF0YSBmcmFtZSBmcm9tICVwTSwgIgorCQkJICAgICAgICJ1c2luZyBrZXkgJWlcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBzcmMsIGtleV9pZCk7CisKKwkJCS8qIFRPRE86IHVwZGF0ZSBzdGF0cyAqLworCisJCQkvKiBOb3RpZnkgdXNlcnNwYWNlICovCisJCQltZW1zZXQoJnd4bWljLCAwLCBzaXplb2Yod3htaWMpKTsKKwkJCXd4bWljLmZsYWdzID0ga2V5X2lkICYgSVdfTUlDRkFJTFVSRV9LRVlfSUQ7CisJCQl3eG1pYy5mbGFncyB8PSAoZGVzYy0+YWRkcjFbMF0gJiAxKSA/CisJCQkJSVdfTUlDRkFJTFVSRV9HUk9VUCA6IElXX01JQ0ZBSUxVUkVfUEFJUldJU0U7CisJCQl3eG1pYy5zcmNfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisJCQltZW1jcHkod3htaWMuc3JjX2FkZHIuc2FfZGF0YSwgc3JjLCBFVEhfQUxFTik7CisKKwkJCSh2b2lkKSBvcmlub2NvX2h3X2dldF90a2lwX2l2KHByaXYsIGtleV9pZCwKKwkJCQkJCSAgICAgICZ3eG1pYy50c2NbMF0pOworCisJCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisJCQl3cnF1LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHd4bWljKTsKKwkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWTUlDSEFFTE1JQ0ZBSUxVUkUsICZ3cnF1LAorCQkJCQkgICAgKGNoYXIgKikgJnd4bWljKTsKKworCQkJZ290byBkcm9wOworCQl9CisJfQorCisJLyogSGFuZGxlIGRlY2Fwc3VsYXRpb24KKwkgKiBJbiBtb3N0IGNhc2VzLCB0aGUgZmlybXdhcmUgdGVsbCB1cyBhYm91dCBTTkFQIGZyYW1lcy4KKwkgKiBGb3Igc29tZSByZWFzb24sIHRoZSBTTkFQIGZyYW1lcyBzZW50IGJ5IExpbmtTeXMgQVBzCisJICogYXJlIG5vdCBwcm9wZXJseSByZWNvZ25pc2VkIGJ5IG1vc3QgZmlybXdhcmVzLgorCSAqIFNvLCBjaGVjayBvdXJzZWx2ZXMgKi8KKwlpZiAobGVuZ3RoID49IEVOQ0FQU19PVkVSSEVBRCAmJgorCSAgICAoKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01TR1RZUEUpID09IEhFUk1FU19SWFNUQVRfMTA0MikgfHwKKwkgICAgICgoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NU0dUWVBFKSA9PSBIRVJNRVNfUlhTVEFUX1RVTk5FTCkgfHwKKwkgICAgIGlzX2V0aGVyc25hcChza2ItPmRhdGEpKSkgeworCQkvKiBUaGVzZSBpbmRpY2F0ZSBhIFNOQVAgd2l0aGluIDgwMi4yIExMQyB3aXRoaW4KKwkJICAgODAyLjExIGZyYW1lIHdoaWNoIHdlJ2xsIG5lZWQgdG8gZGUtZW5jYXBzdWxhdGUgdG8KKwkJICAgdGhlIG9yaWdpbmFsIEV0aGVybmV0SUkgZnJhbWUuICovCisJCWhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX3B1c2goc2tiLAorCQkJCQkJRVRIX0hMRU4gLSBFTkNBUFNfT1ZFUkhFQUQpOworCX0gZWxzZSB7CisJCS8qIDgwMi4zIGZyYW1lIC0gcHJlcGVuZCA4MDIuMyBoZWFkZXIgYXMgaXMgKi8KKwkJaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfcHVzaChza2IsIEVUSF9ITEVOKTsKKwkJaGRyLT5oX3Byb3RvID0gaHRvbnMobGVuZ3RoKTsKKwl9CisJbWVtY3B5KGhkci0+aF9kZXN0LCBkZXNjLT5hZGRyMSwgRVRIX0FMRU4pOworCWlmIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZST01EUykKKwkJbWVtY3B5KGhkci0+aF9zb3VyY2UsIGRlc2MtPmFkZHIzLCBFVEhfQUxFTik7CisJZWxzZQorCQltZW1jcHkoaGRyLT5oX3NvdXJjZSwgZGVzYy0+YWRkcjIsIEVUSF9BTEVOKTsKKworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCWlmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpCisJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1RIRVJIT1NUOworCisJLyogUHJvY2VzcyB0aGUgd2lyZWxlc3Mgc3RhdHMgaWYgbmVlZGVkICovCisJb3Jpbm9jb19zdGF0X2dhdGhlcihkZXYsIHNrYiwgZGVzYyk7CisKKwkvKiBQYXNzIHRoZSBwYWNrZXQgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgKi8KKwluZXRpZl9yeChza2IpOworCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJc3RhdHMtPnJ4X2J5dGVzICs9IGxlbmd0aDsKKworCXJldHVybjsKKworIGRyb3A6CisJZGV2X2tmcmVlX3NrYihza2IpOworCXN0YXRzLT5yeF9lcnJvcnMrKzsKKwlzdGF0cy0+cnhfZHJvcHBlZCsrOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3J4X2lzcl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YSwgKnRlbXA7CisJc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIG9yaW5vY29fcnggcmVxdWlyZXMgdGhlIGRyaXZlciBsb2NrLCBhbmQgd2UgYWxzbyBuZWVkIHRvCisJICogcHJvdGVjdCBwcml2LT5yeF9saXN0LCBzbyBqdXN0IGhvbGQgdGhlIGxvY2sgb3ZlciB0aGUKKwkgKiBsb3QuCisJICoKKwkgKiBJZiBvcmlub2NvX2xvY2sgZmFpbHMsIHdlJ3ZlIHVucGx1Z2dlZCB0aGUgY2FyZC4gSW4gdGhpcworCSAqIGNhc2UganVzdCBhYm9ydC4gKi8KKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuOworCisJLyogZXh0cmFjdCBkZXNjIGFuZCBza2IgZnJvbSBxdWV1ZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyeF9kYXRhLCB0ZW1wLCAmcHJpdi0+cnhfbGlzdCwgbGlzdCkgeworCQlkZXNjID0gcnhfZGF0YS0+ZGVzYzsKKwkJc2tiID0gcnhfZGF0YS0+c2tiOworCQlsaXN0X2RlbCgmcnhfZGF0YS0+bGlzdCk7CisJCWtmcmVlKHJ4X2RhdGEpOworCisJCW9yaW5vY29fcngoZGV2LCBkZXNjLCBza2IpOworCisJCWtmcmVlKGRlc2MpOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFJ4IHBhdGggKGluZm8gZnJhbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgcHJpbnRfbGlua3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgc3RhdHVzKQoreworCWNoYXIgKnM7CisKKwlpZiAoc3VwcHJlc3NfbGlua3N0YXR1cykKKwkJcmV0dXJuOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIEhFUk1FU19MSU5LU1RBVFVTX05PVF9DT05ORUNURUQ6CisJCXMgPSAiTm90IENvbm5lY3RlZCI7CisJCWJyZWFrOworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQ09OTkVDVEVEOgorCQlzID0gIkNvbm5lY3RlZCI7CisJCWJyZWFrOworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfRElTQ09OTkVDVEVEOgorCQlzID0gIkRpc2Nvbm5lY3RlZCI7CisJCWJyZWFrOworCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVBfQ0hBTkdFOgorCQlzID0gIkFQIENoYW5nZWQiOworCQlicmVhazsKKwljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FQX09VVF9PRl9SQU5HRToKKwkJcyA9ICJBUCBPdXQgb2YgUmFuZ2UiOworCQlicmVhazsKKwljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FQX0lOX1JBTkdFOgorCQlzID0gIkFQIEluIFJhbmdlIjsKKwkJYnJlYWs7CisJY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BU1NPQ19GQUlMRUQ6CisJCXMgPSAiQXNzb2NpYXRpb24gRmFpbGVkIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcyA9ICJVTktOT1dOIjsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5ldyBsaW5rIHN0YXR1czogJXMgKCUwNHgpXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHMsIHN0YXR1cyk7Cit9CisKKy8qIFNlYXJjaCBzY2FuIHJlc3VsdHMgZm9yIHJlcXVlc3RlZCBCU1NJRCwgam9pbiBpdCBpZiBmb3VuZCAqLworc3RhdGljIHZvaWQgb3Jpbm9jb19qb2luX2FwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsIGpvaW5fd29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBqb2luX3JlcSB7CisJCXU4IGJzc2lkW0VUSF9BTEVOXTsKKwkJX19sZTE2IGNoYW5uZWw7CisJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgcmVxOworCWNvbnN0IGludCBhdG9tX2xlbiA9IG9mZnNldG9mKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8sIGF0aW0pOworCXN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8gKmF0b20gPSBOVUxMOworCWludCBvZmZzZXQgPSA0OworCWludCBmb3VuZCA9IDA7CisJdTggKmJ1ZjsKKwl1MTYgbGVuOworCisJLyogQWxsb2NhdGUgYnVmZmVyIGZvciBzY2FuIHJlc3VsdHMgKi8KKwlidWYgPSBrbWFsbG9jKE1BWF9TQ0FOX0xFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybjsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlnb3RvIGZhaWxfbG9jazsKKworCS8qIFNhbml0eSBjaGVja3MgaW4gY2FzZSB1c2VyIGNoYW5nZWQgc29tZXRoaW5nIGluIHRoZSBtZWFudGltZSAqLworCWlmICghcHJpdi0+YnNzaWRfZml4ZWQpCisJCWdvdG8gb3V0OworCisJaWYgKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKQorCQlnb3RvIG91dDsKKworCS8qIFJlYWQgc2NhbiByZXN1bHRzIGZyb20gdGhlIGZpcm13YXJlICovCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwKKwkJCSAgICAgIEhFUk1FU19SSURfU0NBTlJFU1VMVFNUQUJMRSwKKwkJCSAgICAgIE1BWF9TQ0FOX0xFTiwgJmxlbiwgYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWFkIHNjYW4gcmVzdWx0c1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWxlbiA9IEhFUk1FU19SRUNMRU5fVE9fQllURVMobGVuKTsKKworCS8qIEdvIHRocm91Z2ggdGhlIHNjYW4gcmVzdWx0cyBsb29raW5nIGZvciB0aGUgY2hhbm5lbCBvZiB0aGUgQVAKKwkgKiB3ZSB3ZXJlIHJlcXVlc3RlZCB0byBqb2luICovCisJZm9yICg7IG9mZnNldCArIGF0b21fbGVuIDw9IGxlbjsgb2Zmc2V0ICs9IGF0b21fbGVuKSB7CisJCWF0b20gPSAoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbyAqKSAoYnVmICsgb2Zmc2V0KTsKKwkJaWYgKG1lbWNtcCgmYXRvbS0+YnNzaWQsIHByaXYtPmRlc2lyZWRfYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZm91bmQpIHsKKwkJREVCVUcoMSwgIiVzOiBSZXF1ZXN0ZWQgQVAgbm90IGZvdW5kIGluIHNjYW4gcmVzdWx0c1xuIiwKKwkJICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KHJlcS5ic3NpZCwgcHJpdi0+ZGVzaXJlZF9ic3NpZCwgRVRIX0FMRU4pOworCXJlcS5jaGFubmVsID0gYXRvbS0+Y2hhbm5lbDsJLyogYm90aCBhcmUgbGl0dGxlLWVuZGlhbiAqLworCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORkpPSU5SRVFVRVNULAorCQkJCSAgJnJlcSk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgaXNzdWluZyBqb2luIHJlcXVlc3RcbiIsIGRldi0+bmFtZSk7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworIGZhaWxfbG9jazoKKwlrZnJlZShidWYpOworfQorCisvKiBTZW5kIG5ldyBCU1NJRCB0byB1c2Vyc3BhY2UgKi8KK3N0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF9ic3NpZF93ZXZlbnQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisJaW50IGVycjsKKworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVEJTU0lELAorCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIHdycXUuYXBfYWRkci5zYV9kYXRhKTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVybjsKKworCXdycXUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CisKKwkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KKwl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fc2VuZF9hc3NvY3JlcWllX3dldmVudChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwlpbnQgZXJyOworCXU4IGJ1Zls4OF07CisJdTggKmllOworCisJaWYgKCFwcml2LT5oYXNfd3BhKQorCQlyZXR1cm47CisKKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRfQVNTT0NfUkVRX0lORk8sCisJCQkgICAgICBzaXplb2YoYnVmKSwgTlVMTCwgJmJ1Zik7CisJaWYgKGVyciAhPSAwKQorCQlyZXR1cm47CisKKwlpZSA9IG9yaW5vY29fZ2V0X3dwYV9pZShidWYsIHNpemVvZihidWYpKTsKKwlpZiAoaWUpIHsKKwkJaW50IHJlbSA9IHNpemVvZihidWYpIC0gKGllIC0gJmJ1ZlswXSk7CisJCXdycXUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7CisJCWlmICh3cnF1LmRhdGEubGVuZ3RoID4gcmVtKQorCQkJd3JxdS5kYXRhLmxlbmd0aCA9IHJlbTsKKworCQlpZiAod3JxdS5kYXRhLmxlbmd0aCkKKwkJCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZBU1NPQ1JFUUlFLCAmd3JxdSwgaWUpOworCX0KK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX2Fzc29jcmVzcGllX3dldmVudChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKKwlpbnQgZXJyOworCXU4IGJ1Zls4OF07IC8qIFRPRE86IHZlcmlmeSBtYXggc2l6ZSBvciBJV19HRU5FUklDX0lFX01BWCAqLworCXU4ICppZTsKKworCWlmICghcHJpdi0+aGFzX3dwYSkKKwkJcmV0dXJuOworCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UX0FTU09DX1JFU1BfSU5GTywKKwkJCSAgICAgIHNpemVvZihidWYpLCBOVUxMLCAmYnVmKTsKKwlpZiAoZXJyICE9IDApCisJCXJldHVybjsKKworCWllID0gb3Jpbm9jb19nZXRfd3BhX2llKGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChpZSkgeworCQlpbnQgcmVtID0gc2l6ZW9mKGJ1ZikgLSAoaWUgLSAmYnVmWzBdKTsKKwkJd3JxdS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKKwkJaWYgKHdycXUuZGF0YS5sZW5ndGggPiByZW0pCisJCQl3cnF1LmRhdGEubGVuZ3RoID0gcmVtOworCisJCWlmICh3cnF1LmRhdGEubGVuZ3RoKQorCQkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkFTU09DUkVTUElFLCAmd3JxdSwgaWUpOworCX0KK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX3dldmVudHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgd2V2ZW50X3dvcmspOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuOworCisJb3Jpbm9jb19zZW5kX2Fzc29jcmVxaWVfd2V2ZW50KHByaXYpOworCW9yaW5vY29fc2VuZF9hc3NvY3Jlc3BpZV93ZXZlbnQocHJpdik7CisJb3Jpbm9jb19zZW5kX2Jzc2lkX3dldmVudChwcml2KTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MTYgaW5mb2ZpZDsKKwlzdHJ1Y3QgeworCQlfX2xlMTYgbGVuOworCQlfX2xlMTYgdHlwZTsKKwl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBpbmZvOworCWludCBsZW4sIHR5cGU7CisJaW50IGVycjsKKworCS8qIFRoaXMgaXMgYW4gYW5zd2VyIHRvIGFuIElOUVVJUkUgY29tbWFuZCB0aGF0IHdlIGRpZCBlYXJsaWVyLAorCSAqIG9yIGFuIGluZm9ybWF0aW9uICJldmVudCIgZ2VuZXJhdGVkIGJ5IHRoZSBjYXJkCisJICogVGhlIGNvbnRyb2xsZXIgcmV0dXJuIHRvIHVzIGEgcHNldWRvIGZyYW1lIGNvbnRhaW5pbmcKKwkgKiB0aGUgaW5mb3JtYXRpb24gaW4gcXVlc3Rpb24gLSBKZWFuIElJICovCisJaW5mb2ZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIElORk9GSUQpOworCisJLyogUmVhZCB0aGUgaW5mbyBmcmFtZSBoZWFkZXIgLSBkb24ndCB0cnkgdG9vIGhhcmQgKi8KKwllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmaW5mbywgc2l6ZW9mKGluZm8pLAorCQkJICAgICAgIGluZm9maWQsIDApOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBpbmZvIGZyYW1lLiAiCisJCSAgICAgICAiRnJhbWUgZHJvcHBlZC5cbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuOworCX0KKworCWxlbiA9IEhFUk1FU19SRUNMRU5fVE9fQllURVMobGUxNl90b19jcHUoaW5mby5sZW4pKTsKKwl0eXBlID0gbGUxNl90b19jcHUoaW5mby50eXBlKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSEVSTUVTX0lOUV9UQUxMSUVTOiB7CisJCXN0cnVjdCBoZXJtZXNfdGFsbGllc19mcmFtZSB0YWxsaWVzOworCQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKKworCQlpZiAobGVuID4gc2l6ZW9mKHRhbGxpZXMpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGFsbGllcyBmcmFtZSB0b28gbG9uZyAoJWQgYnl0ZXMpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKKwkJCWxlbiA9IHNpemVvZih0YWxsaWVzKTsKKwkJfQorCisJCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZ0YWxsaWVzLCBsZW4sCisJCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKworCQkvKiBJbmNyZW1lbnQgb3VyIHZhcmlvdXMgY291bnRlcnMgKi8KKwkJLyogd3N0YXRzLT5kaXNjYXJkLm53aWQgLSBubyB3cm9uZyBCU1NJRCBzdHVmZiAqLworCQl3c3RhdHMtPmRpc2NhcmQuY29kZSArPQorCQkJbGUxNl90b19jcHUodGFsbGllcy5SeFdFUFVuZGVjcnlwdGFibGUpOworCQlpZiAobGVuID09IHNpemVvZih0YWxsaWVzKSkKKwkJCXdzdGF0cy0+ZGlzY2FyZC5jb2RlICs9CisJCQkJbGUxNl90b19jcHUodGFsbGllcy5SeERpc2NhcmRzX1dFUElDVkVycm9yKSArCisJCQkJbGUxNl90b19jcHUodGFsbGllcy5SeERpc2NhcmRzX1dFUEV4Y2x1ZGVkKTsKKwkJd3N0YXRzLT5kaXNjYXJkLm1pc2MgKz0KKwkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuVHhEaXNjYXJkc1dyb25nU0EpOworCQl3c3RhdHMtPmRpc2NhcmQuZnJhZ21lbnQgKz0KKwkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuUnhNc2dJbkJhZE1zZ0ZyYWdtZW50cyk7CisJCXdzdGF0cy0+ZGlzY2FyZC5yZXRyaWVzICs9CisJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlR4UmV0cnlMaW1pdEV4Y2VlZGVkKTsKKwkJLyogd3N0YXRzLT5taXNzLmJlYWNvbiAtIG5vIG1hdGNoICovCisJfQorCWJyZWFrOworCWNhc2UgSEVSTUVTX0lOUV9MSU5LU1RBVFVTOiB7CisJCXN0cnVjdCBoZXJtZXNfbGlua3N0YXR1cyBsaW5rc3RhdHVzOworCQl1MTYgbmV3c3RhdHVzOworCQlpbnQgY29ubmVjdGVkOworCisJCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikKKwkJCWJyZWFrOworCisJCWlmIChsZW4gIT0gc2l6ZW9mKGxpbmtzdGF0dXMpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5leHBlY3RlZCBzaXplIGZvciBsaW5rc3RhdHVzIGZyYW1lICglZCBieXRlcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOworCQkJYnJlYWs7CisJCX0KKworCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmbGlua3N0YXR1cywgbGVuLAorCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJCW5ld3N0YXR1cyA9IGxlMTZfdG9fY3B1KGxpbmtzdGF0dXMubGlua3N0YXR1cyk7CisKKwkJLyogU3ltYm9sIGZpcm13YXJlIHVzZXMgIm91dCBvZiByYW5nZSIgdG8gc2lnbmFsIHRoYXQKKwkJICogdGhlIGhvc3RzY2FuIGZyYW1lIGNhbiBiZSByZXF1ZXN0ZWQuICAqLworCQlpZiAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0FQX09VVF9PRl9SQU5HRSAmJgorCQkgICAgcHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCAmJgorCQkgICAgcHJpdi0+aGFzX2hvc3RzY2FuICYmIHByaXYtPnNjYW5faW5wcm9ncmVzcykgeworCQkJaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfSE9TVFNDQU5fU1lNQk9MKTsKKwkJCWJyZWFrOworCQl9CisKKwkJY29ubmVjdGVkID0gKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19DT05ORUNURUQpCisJCQl8fCAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0FQX0NIQU5HRSkKKwkJCXx8IChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfSU5fUkFOR0UpOworCisJCWlmIChjb25uZWN0ZWQpCisJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisJCWVsc2UgaWYgKCFpZ25vcmVfZGlzY29ubmVjdCkKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKKwkJaWYgKG5ld3N0YXR1cyAhPSBwcml2LT5sYXN0X2xpbmtzdGF0dXMpIHsKKwkJCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IG5ld3N0YXR1czsKKwkJCXByaW50X2xpbmtzdGF0dXMoZGV2LCBuZXdzdGF0dXMpOworCQkJLyogVGhlIGluZm8gZnJhbWUgY29udGFpbnMgb25seSBvbmUgd29yZCB3aGljaCBpcyB0aGUKKwkJCSAqIHN0YXR1cyAoc2VlIGhlcm1lcy5oKS4gVGhlIHN0YXR1cyBpcyBwcmV0dHkgYm9yaW5nCisJCQkgKiBpbiBpdHNlbGYsIHRoYXQncyB3aHkgd2UgZXhwb3J0IHRoZSBuZXcgQlNTSUQuLi4KKwkJCSAqIEplYW4gSUkgKi8KKwkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPndldmVudF93b3JrKTsKKwkJfQorCX0KKwlicmVhazsKKwljYXNlIEhFUk1FU19JTlFfU0NBTjoKKwkJaWYgKCFwcml2LT5zY2FuX2lucHJvZ3Jlc3MgJiYgcHJpdi0+YnNzaWRfZml4ZWQgJiYKKwkJICAgIHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9JTlRFUlNJTCkgeworCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+am9pbl93b3JrKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgSEVSTUVTX0lOUV9IT1NUU0NBTjoKKwljYXNlIEhFUk1FU19JTlFfSE9TVFNDQU5fU1lNQk9MOiB7CisJCS8qIFJlc3VsdCBvZiBhIHNjYW5uaW5nLiBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAorCQkgKiBjZWxscyBpbiB0aGUgdmljaW5pdHkgLSBKZWFuIElJICovCisJCXVuaW9uIGl3cmVxX2RhdGEJd3JxdTsKKwkJdW5zaWduZWQgY2hhciAqYnVmOworCisJCS8qIFNjYW4gaXMgbm8gbG9uZ2VyIGluIHByb2dyZXNzICovCisJCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDA7CisKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmIChsZW4gPiA0MDk2KSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogU2NhbiByZXN1bHRzIHRvbyBsYXJnZSAoJWQgYnl0ZXMpXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbGVuKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogQWxsb2NhdGUgYnVmZmVyIGZvciByZXN1bHRzICovCisJCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQorCQkJLyogTm8gbWVtb3J5LCBzbyBjYW4ndCBwcmludGsoKS4uLiAqLworCQkJYnJlYWs7CisKKwkJLyogUmVhZCBzY2FuIGRhdGEgKi8KKwkJZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgKHZvaWQgKikgYnVmLCBsZW4sCisJCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7CisJCWlmIChlcnIpIHsKKwkJCWtmcmVlKGJ1Zik7CisJCQlicmVhazsKKwkJfQorCisjaWZkZWYgT1JJTk9DT19ERUJVRworCQl7CisJCQlpbnQJaTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJTY2FuIHJlc3VsdCBbJTAyWCIsIGJ1ZlswXSk7CisJCQlmb3IgKGkgPSAxOyBpIDwgKGxlbiAqIDIpOyBpKyspCisJCQkJcHJpbnRrKCI6JTAyWCIsIGJ1ZltpXSk7CisJCQlwcmludGsoIl1cbiIpOworCQl9CisjZW5kaWYJLyogT1JJTk9DT19ERUJVRyAqLworCisJCWlmIChvcmlub2NvX3Byb2Nlc3Nfc2Nhbl9yZXN1bHRzKHByaXYsIGJ1ZiwgbGVuKSA9PSAwKSB7CisJCQkvKiBTZW5kIGFuIGVtcHR5IGV2ZW50IHRvIHVzZXIgc3BhY2UuCisJCQkgKiBXZSBkb24ndCBzZW5kIHRoZSByZWNlaXZlZCBkYXRhIG9uIHRoZSBldmVudCBiZWNhdXNlCisJCQkgKiBpdCB3b3VsZCByZXF1aXJlIHVzIHRvIGRvIGNvbXBsZXggdHJhbnNjb2RpbmcsIGFuZAorCQkJICogd2Ugd2FudCB0byBtaW5pbWlzZSB0aGUgd29yayBkb25lIGluIHRoZSBpcnEgaGFuZGxlcgorCQkJICogVXNlIGEgcmVxdWVzdCB0byBleHRyYWN0IHRoZSBkYXRhIC0gSmVhbiBJSSAqLworCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7CisJCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CisJCX0KKwkJa2ZyZWUoYnVmKTsKKwl9CisJYnJlYWs7CisJY2FzZSBIRVJNRVNfSU5RX0NIQU5ORUxJTkZPOgorCXsKKwkJc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmJzczsKKworCQlpZiAoIXByaXYtPnNjYW5faW5wcm9ncmVzcykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBHb3QgY2hhbmluZm8gd2l0aG91dCBzY2FuLCAiCisJCQkgICAgICAgImxlbj0lZFxuIiwgZGV2LT5uYW1lLCBsZW4pOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBBbiBlbXB0eSByZXN1bHQgaW5kaWNhdGVzIHRoYXQgdGhlIHNjYW4gaXMgY29tcGxldGUgKi8KKwkJaWYgKGxlbiA9PSAwKSB7CisJCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7CisKKwkJCS8qIFNjYW4gaXMgbm8gbG9uZ2VyIGluIHByb2dyZXNzICovCisJCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOworCisJCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwkJCXdycXUuZGF0YS5mbGFncyA9IDA7CisJCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWVsc2UgaWYgKGxlbiA+IHNpemVvZigqYnNzKSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogRXh0IHNjYW4gcmVzdWx0cyB0b28gbGFyZ2UgKCVkIGJ5dGVzKS4gIgorCQkJICAgICAgICJUcnVuY2F0aW5nIHJlc3VsdHMgdG8gJXpkIGJ5dGVzLlxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGxlbiwgc2l6ZW9mKCpic3MpKTsKKwkJCWxlbiA9IHNpemVvZigqYnNzKTsKKwkJfSBlbHNlIGlmIChsZW4gPCAob2Zmc2V0b2Yoc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8sCisJCQkJCSAgIGRhdGEpICsgMikpIHsKKwkJCS8qIERyb3AgdGhpcyByZXN1bHQgbm93IHNvIHdlIGRvbid0IGhhdmUgdG8KKwkJCSAqIGtlZXAgY2hlY2tpbmcgbGF0ZXIgKi8KKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICAgICAiJXM6IEV4dCBzY2FuIHJlc3VsdHMgdG9vIHNob3J0ICglZCBieXRlcylcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOworCQkJYnJlYWs7CisJCX0KKworCQlic3MgPSBrbWFsbG9jKHNpemVvZigqYnNzKSwgR0ZQX0FUT01JQyk7CisJCWlmIChic3MgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCS8qIFJlYWQgc2NhbiBkYXRhICovCisJCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICh2b2lkICopIGJzcywgbGVuLAorCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOworCQlpZiAoZXJyKSB7CisJCQlrZnJlZShic3MpOworCQkJYnJlYWs7CisJCX0KKworCQlvcmlub2NvX2FkZF9leHRfc2Nhbl9yZXN1bHQocHJpdiwgYnNzKTsKKworCQlrZnJlZShic3MpOworCQlicmVhazsKKwl9CisJY2FzZSBIRVJNRVNfSU5RX1NFQ19TVEFUX0FHRVJFOgorCQkvKiBTZWN1cml0eSBzdGF0dXMgKEFnZXJlIHNwZWNpZmljKSAqLworCQkvKiBJZ25vcmUgdGhpcyBmcmFtZSBmb3Igbm93ICovCisJCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUpCisJCQlicmVhazsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBVbmtub3duIGluZm9ybWF0aW9uIGZyYW1lIHJlY2VpdmVkOiAiCisJCSAgICAgICAidHlwZSAweCUwNHgsIGxlbmd0aCAlZFxuIiwgZGV2LT5uYW1lLCB0eXBlLCBsZW4pOworCQkvKiBXZSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBhYm91dCBpdCAqLworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9pbmZkcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKK3sKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEluZm9ybWF0aW9uIGZyYW1lIGxvc3QuXG4iLCBkZXYtPm5hbWUpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbnRlcm5hbCBoYXJkd2FyZSBjb250cm9sIHJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBfX29yaW5vY29fdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsgLyoganVzdCB0byBtYWtlIHN1cmUgKi8KKworCWVyciA9IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGNvbmZpZ3VyaW5nIGNhcmRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogRmlyZSB0aGluZ3MgdXAgYWdhaW4gKi8KKwloZXJtZXNfc2V0X2lycW1hc2soaHcsIE9SSU5PQ09fSU5URU4pOworCWVyciA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBlbmFibGluZyBNQUMgcG9ydFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKF9fb3Jpbm9jb191cCk7CisKK2ludCBfX29yaW5vY29fZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwlpZiAoIXByaXYtPmh3X3VuYXZhaWxhYmxlKSB7CisJCWlmICghcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0KSB7CisJCQllcnIgPSBoZXJtZXNfZGlzYWJsZV9wb3J0KGh3LCAwKTsKKwkJCWlmIChlcnIpIHsKKwkJCQkvKiBTb21lIGZpcm13YXJlcyAoZS5nLiBJbnRlcnNpbCAxLjMueCkgc2VlbQorCQkJCSAqIHRvIGhhdmUgcHJvYmxlbXMgZGlzYWJsaW5nIHRoZSBwb3J0LCBvaAorCQkJCSAqIHdlbGwsIHRvbyBiYWQuICovCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIGRpc2FibGluZyBNQUMgcG9ydFxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IDE7CisJCQl9CisJCX0KKwkJaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKKwkJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCAweGZmZmYpOworCX0KKworCS8qIGZpcm13YXJlIHdpbGwgaGF2ZSB0byByZWFzc29jaWF0ZSAqLworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKF9fb3Jpbm9jb19kb3duKTsKKworc3RhdGljIGludCBvcmlub2NvX2FsbG9jYXRlX2ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCWludCBlcnI7CisKKwllcnIgPSBoZXJtZXNfYWxsb2NhdGUoaHcsIHByaXYtPm5pY2J1Zl9zaXplLCAmcHJpdi0+dHhmaWQpOworCWlmIChlcnIgPT0gLUVJTyAmJiBwcml2LT5uaWNidWZfc2l6ZSA+IFRYX05JQ0JVRl9TSVpFX0JVRykgeworCQkvKiBUcnkgd29ya2Fyb3VuZCBmb3Igb2xkIFN5bWJvbCBmaXJtd2FyZSBidWcgKi8KKwkJcHJpdi0+bmljYnVmX3NpemUgPSBUWF9OSUNCVUZfU0laRV9CVUc7CisJCWVyciA9IGhlcm1lc19hbGxvY2F0ZShodywgcHJpdi0+bmljYnVmX3NpemUsICZwcml2LT50eGZpZCk7CisKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZpcm13YXJlIEFMTE9DIGJ1ZyBkZXRlY3RlZCAiCisJCSAgICAgICAiKG9sZCBTeW1ib2wgZmlybXdhcmU/KS4gV29yayBhcm91bmQgJXNcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVyciA/ICJmYWlsZWQhIiA6ICJvay4iKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgb3Jpbm9jb19yZWluaXRfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCisJZXJyID0gaGVybWVzX2luaXQoaHcpOworCWlmIChwcml2LT5kb19md19kb3dubG9hZCAmJiAhZXJyKSB7CisJCWVyciA9IG9yaW5vY29fZG93bmxvYWQocHJpdik7CisJCWlmIChlcnIpCisJCQlwcml2LT5kb19md19kb3dubG9hZCA9IDA7CisJfQorCWlmICghZXJyKQorCQllcnIgPSBvcmlub2NvX2FsbG9jYXRlX2ZpZChkZXYpOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wob3Jpbm9jb19yZWluaXRfZmlybXdhcmUpOworCitpbnQgX19vcmlub2NvX3Byb2dyYW1fcmlkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyOworCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgaWRidWY7CisKKwkvKiBTZXQgdGhlIE1BQyBhZGRyZXNzICovCisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTUFDQUREUiwKKwkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKEVUSF9BTEVOKSwgZGV2LT5kZXZfYWRkcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIE1BQyBhZGRyZXNzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCB1cCB0aGUgbGluayBtb2RlICovCisJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlBPUlRUWVBFLAorCQkJCSAgIHByaXYtPnBvcnRfdHlwZSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHBvcnQgdHlwZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJLyogU2V0IHRoZSBjaGFubmVsL2ZyZXF1ZW5jeSAqLworCWlmIChwcml2LT5jaGFubmVsICE9IDAgJiYgcHJpdi0+aXdfbW9kZSAhPSBJV19NT0RFX0lORlJBKSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZPV05DSEFOTkVMLAorCQkJCQkgICBwcml2LT5jaGFubmVsKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBjaGFubmVsICVkXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyLCBwcml2LT5jaGFubmVsKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAocHJpdi0+aGFzX2lic3MpIHsKKwkJdTE2IGNyZWF0ZWlic3M7CisKKwkJaWYgKChzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPT0gMCkgJiYgKHByaXYtPmNyZWF0ZWlic3MpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGhpcyBmaXJtd2FyZSByZXF1aXJlcyBhbiAiCisJCQkgICAgICAgIkVTU0lEIGluIElCU1MtQWQtSG9jIG1vZGUuXG4iLCBkZXYtPm5hbWUpOworCQkJLyogV2l0aCB3dmxhbl9jcywgaW4gdGhpcyBjYXNlLCB3ZSB3b3VsZCBjcmFzaC4KKwkJCSAqIGhvcGVmdWxseSwgdGhpcyBkcml2ZXIgd2lsbCBiZWhhdmUgYmV0dGVyLi4uCisJCQkgKiBKZWFuIElJICovCisJCQljcmVhdGVpYnNzID0gMDsKKwkJfSBlbHNlIHsKKwkJCWNyZWF0ZWlic3MgPSBwcml2LT5jcmVhdGVpYnNzOworCQl9CisKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORkNSRUFURUlCU1MsCisJCQkJCSAgIGNyZWF0ZWlic3MpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIENSRUFURUlCU1NcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8qIFNldCB0aGUgZGVzaXJlZCBCU1NJRCAqLworCWVyciA9IF9fb3Jpbm9jb19od19zZXRfd2FwKHByaXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBBUCBhZGRyZXNzXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwkvKiBTZXQgdGhlIGRlc2lyZWQgRVNTSUQgKi8KKwlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkpOworCW1lbWNweSgmaWRidWYudmFsLCBwcml2LT5kZXNpcmVkX2Vzc2lkLCBzaXplb2YoaWRidWYudmFsKSk7CisJLyogV2luWFAgd2FudHMgcGFydG5lciB0byBjb25maWd1cmUgT1dOU1NJRCBldmVuIGluIElCU1MgbW9kZS4gKGppbWMpICovCisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOU1NJRCwKKwkJCUhFUk1FU19CWVRFU19UT19SRUNMRU4oc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKzIpLAorCQkJJmlkYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgT1dOU1NJRFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GREVTSVJFRFNTSUQsCisJCQlIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSsyKSwKKwkJCSZpZGJ1Zik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIERFU0lSRURTU0lEXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCB0aGUgc3RhdGlvbiBuYW1lICovCisJaWRidWYubGVuID0gY3B1X3RvX2xlMTYoc3RybGVuKHByaXYtPm5pY2spKTsKKwltZW1jcHkoJmlkYnVmLnZhbCwgcHJpdi0+bmljaywgc2l6ZW9mKGlkYnVmLnZhbCkpOworCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk5BTUUsCisJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+bmljaykrMiksCisJCQkgICAgICAgJmlkYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgbmlja25hbWVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogU2V0IEFQIGRlbnNpdHkgKi8KKwlpZiAocHJpdi0+aGFzX3NlbnNpdGl2aXR5KSB7CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwKKwkJCQkJICAgcHJpdi0+YXBfZGVuc2l0eSk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFNZU1RFTVNDQUxFLiAiCisJCQkgICAgICAgIkRpc2FibGluZyBzZW5zaXRpdml0eSBjb250cm9sXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKworCQkJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMDsKKwkJfQorCX0KKworCS8qIFNldCBSVFMgdGhyZXNob2xkICovCisJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlJUU1RIUkVTSE9MRCwKKwkJCQkgICBwcml2LT5ydHNfdGhyZXNoKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgUlRTIHRocmVzaG9sZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgb3IgTVdPIHJvYnVzdG5lc3MgKi8KKwlpZiAocHJpdi0+aGFzX213bykKKwkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKKwkJCQkJICAgcHJpdi0+bXdvX3JvYnVzdCk7CisJZWxzZQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKKwkJCQkJICAgcHJpdi0+ZnJhZ190aHJlc2gpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBmcmFnbWVudGF0aW9uXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBiaXRyYXRlICovCisJZXJyID0gX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHByaXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBiaXRyYXRlXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFNldCBwb3dlciBtYW5hZ2VtZW50ICovCisJaWYgKHByaXYtPmhhc19wbSkgeworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GUE1FTkFCTEVELAorCQkJCQkgICBwcml2LT5wbV9vbik7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZNVUxUSUNBU1RSRUNFSVZFLAorCQkJCQkgICBwcml2LT5wbV9tY2FzdCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwKKwkJCQkJICAgcHJpdi0+cG1fcGVyaW9kKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICAgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sCisJCQkJCSAgIHByaXYtPnBtX3RpbWVvdXQpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwkvKiBTZXQgcHJlYW1ibGUgLSBvbmx5IGZvciBTeW1ib2wgc28gZmFyLi4uICovCisJaWYgKHByaXYtPmhhc19wcmVhbWJsZSkgeworCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCSAgIEhFUk1FU19SSURfQ05GUFJFQU1CTEVfU1lNQk9MLAorCQkJCQkgICBwcml2LT5wcmVhbWJsZSk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgcHJlYW1ibGVcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCS8qIFNldCB1cCBlbmNyeXB0aW9uICovCisJaWYgKHByaXYtPmhhc193ZXAgfHwgcHJpdi0+aGFzX3dwYSkgeworCQllcnIgPSBfX29yaW5vY29faHdfc2V0dXBfZW5jKHByaXYpOworCQlpZiAoZXJyKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBhY3RpdmF0aW5nIGVuY3J5cHRpb25cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgeworCQkvKiBFbmFibGUgbW9uaXRvciBtb2RlICovCisJCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7CisJCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfAorCQkJCQkgICAgSEVSTUVTX1RFU1RfTU9OSVRPUiwgMCwgTlVMTCk7CisJfSBlbHNlIHsKKwkJLyogRGlzYWJsZSBtb25pdG9yIG1vZGUgKi8KKwkJZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOworCQllcnIgPSBoZXJtZXNfZG9jbWRfd2FpdChodywgSEVSTUVTX0NNRF9URVNUIHwKKwkJCQkJICAgIEhFUk1FU19URVNUX1NUT1AsIDAsIE5VTEwpOworCX0KKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogU2V0IHByb21pc2N1aXR5IC8gbXVsdGljYXN0Ki8KKwlwcml2LT5wcm9taXNjdW91cyA9IDA7CisJcHJpdi0+bWNfY291bnQgPSAwOworCisJLyogRklYTUU6IHdoYXQgYWJvdXQgbmV0aWZfdHhfbG9jayAqLworCV9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKKworCXJldHVybiAwOworfQorCisvKiBGSVhNRTogcmV0dXJuIGludD8gKi8KK3N0YXRpYyB2b2lkCitfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IDA7CisJaW50IHByb21pc2MsIG1jX2NvdW50OworCisJLyogVGhlIEhlcm1lcyBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhbiBhbGxtdWx0aSBtb2RlLCBzbyB3ZSBnbworCSAqIGludG8gcHJvbWlzY3VvdXMgbW9kZSBhbmQgbGV0IHRoZSB1cHBlciBsZXZlbHMgZGVhbC4gKi8KKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CisJICAgIChkZXYtPm1jX2NvdW50ID4gTUFYX01VTFRJQ0FTVChwcml2KSkpIHsKKwkJcHJvbWlzYyA9IDE7CisJCW1jX2NvdW50ID0gMDsKKwl9IGVsc2UgeworCQlwcm9taXNjID0gMDsKKwkJbWNfY291bnQgPSBkZXYtPm1jX2NvdW50OworCX0KKworCWVyciA9IF9fb3Jpbm9jb19od19zZXRfbXVsdGljYXN0X2xpc3QocHJpdiwgZGV2LT5tY19saXN0LCBtY19jb3VudCwKKwkJCQkJICAgICAgcHJvbWlzYyk7Cit9CisKKy8qIFRoaXMgbXVzdCBiZSBjYWxsZWQgZnJvbSB1c2VyIGNvbnRleHQsIHdpdGhvdXQgbG9ja3MgaGVsZCAtIHVzZQorICogc2NoZWR1bGVfd29yaygpICovCit2b2lkIG9yaW5vY29fcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgcmVzZXRfd29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7CisJc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCS8qIFdoZW4gdGhlIGhhcmR3YXJlIGJlY29tZXMgYXZhaWxhYmxlIGFnYWluLCB3aGF0ZXZlcgorCQkgKiBkZXRlY3RzIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHJlLWluaXRpYWxpemluZworCQkgKiBpdC4gU28gbm8gbmVlZCBmb3IgYW55dGhpbmcgZnVydGhlciAqLworCQlyZXR1cm47CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwkvKiBTaHV0IG9mZiBpbnRlcnJ1cHRzLiAgRGVwZW5kaW5nIG9uIHdoYXQgc3RhdGUgdGhlIGhhcmR3YXJlCisJICogaXMgaW4sIHRoaXMgbWlnaHQgbm90IHdvcmssIGJ1dCB3ZSdsbCB0cnkgYW55d2F5ICovCisJaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKKwloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIDB4ZmZmZik7CisKKwlwcml2LT5od191bmF2YWlsYWJsZSsrOworCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IDB4ZmZmZjsgLyogZmlybXdhcmUgd2lsbCBoYXZlIHRvIHJlYXNzb2NpYXRlICovCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwkvKiBTY2FubmluZyBzdXBwb3J0OiBDbGVhbnVwIG9mIGRyaXZlciBzdHJ1Y3QgKi8KKwlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LCAwKTsKKwlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOworCisJaWYgKHByaXYtPmhhcmRfcmVzZXQpIHsKKwkJZXJyID0gKCpwcml2LT5oYXJkX3Jlc2V0KShwcml2KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgIgorCQkJICAgICAgICJwZXJmb3JtaW5nIGhhcmQgcmVzZXRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gZGlzYWJsZTsKKwkJfQorCX0KKworCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBvcmlub2NvX3Jlc2V0OiBFcnJvciAlZCByZS1pbml0aWFsaXppbmcgZmlybXdhcmVcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gZGlzYWJsZTsKKwl9CisKKwkvKiBUaGlzIGhhcyB0byBiZSBjYWxsZWQgZnJvbSB1c2VyIGNvbnRleHQgKi8KKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKworCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CisKKwkvKiBwcml2LT5vcGVuIG9yIHByaXYtPmh3X3VuYXZhaWxhYmxlIG1pZ2h0IGhhdmUgY2hhbmdlZCB3aGlsZQorCSAqIHdlIGRyb3BwZWQgdGhlIGxvY2sgKi8KKwlpZiAocHJpdi0+b3BlbiAmJiAoIXByaXYtPmh3X3VuYXZhaWxhYmxlKSkgeworCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgcmVlbmFibGluZyBjYXJkXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJfSBlbHNlCisJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCisJcmV0dXJuOworIGRpc2FibGU6CisJaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKKwluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJcHJpbnRrKEtFUk5fRVJSICIlczogRGV2aWNlIGhhcyBiZWVuIGRpc2FibGVkIVxuIiwgZGV2LT5uYW1lKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogSW50ZXJydXB0IGhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdGljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUSUNLXG4iLCBkZXYtPm5hbWUpOworfQorCitzdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfd3RlcnIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQoreworCS8qIFRoaXMgc2VlbXMgdG8gaGFwcGVuIGEgZmFpciBiaXQgdW5kZXIgbG9hZCwgYnV0IGlnbm9yaW5nIGl0CisJICAgc2VlbXMgdG8gd29yayBmaW5lLi4uKi8KKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1BQyBjb250cm9sbGVyIGVycm9yIChXVEVSUikuIElnbm9yaW5nLlxuIiwKKwkgICAgICAgZGV2LT5uYW1lKTsKK30KKworaXJxcmV0dXJuX3Qgb3Jpbm9jb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCWludCBjb3VudCA9IE1BWF9JUlFMT09QU19QRVJfSVJROworCXUxNiBldnN0YXQsIGV2ZW50czsKKwkvKiBUaGVzZSBhcmUgdXNlZCB0byBkZXRlY3QgYSBydW5hd2F5IGludGVycnVwdCBzaXR1YXRpb24uCisJICoKKwkgKiBJZiB3ZSBnZXQgbW9yZSB0aGFuIE1BWF9JUlFMT09QU19QRVJfSklGRlkgaXRlcmF0aW9ucyBpbiBhIGppZmZ5LAorCSAqIHdlIHBhbmljIGFuZCBzaHV0IGRvd24gdGhlIGhhcmR3YXJlCisJICovCisJLyogamlmZmllcyB2YWx1ZSB0aGUgbGFzdCB0aW1lIHdlIHdlcmUgY2FsbGVkICovCisJc3RhdGljIGludCBsYXN0X2lycV9qaWZmeTsgLyogPSAwICovCisJc3RhdGljIGludCBsb29wc190aGlzX2ppZmZ5OyAvKiA9IDAgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKKwkJLyogSWYgaHcgaXMgdW5hdmFpbGFibGUgLSB3ZSBkb24ndCBrbm93IGlmIHRoZSBpcnEgd2FzCisJCSAqIGZvciB1cyBvciBub3QgKi8KKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCWV2c3RhdCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7CisJZXZlbnRzID0gZXZzdGF0ICYgaHctPmludGVuOworCWlmICghZXZlbnRzKSB7CisJCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlpZiAoamlmZmllcyAhPSBsYXN0X2lycV9qaWZmeSkKKwkJbG9vcHNfdGhpc19qaWZmeSA9IDA7CisJbGFzdF9pcnFfamlmZnkgPSBqaWZmaWVzOworCisJd2hpbGUgKGV2ZW50cyAmJiBjb3VudC0tKSB7CisJCWlmICgrK2xvb3BzX3RoaXNfamlmZnkgPiBNQVhfSVJRTE9PUFNfUEVSX0pJRkZZKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogSVJRIGhhbmRsZXIgaXMgbG9vcGluZyB0b28gIgorCQkJICAgICAgICJtdWNoISBSZXNldHRpbmcuXG4iLCBkZXYtPm5hbWUpOworCQkJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZvciBub3cgKi8KKwkJCWhlcm1lc19zZXRfaXJxbWFzayhodywgMCk7CisJCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yZXNldF93b3JrKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogQ2hlY2sgdGhlIGNhcmQgaGFzbid0IGJlZW4gcmVtb3ZlZCAqLworCQlpZiAoIWhlcm1lc19wcmVzZW50KGh3KSkgeworCQkJREVCVUcoMCwgIm9yaW5vY29faW50ZXJydXB0KCk6IGNhcmQgcmVtb3ZlZFxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVElDSykKKwkJCV9fb3Jpbm9jb19ldl90aWNrKGRldiwgaHcpOworCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1dURVJSKQorCQkJX19vcmlub2NvX2V2X3d0ZXJyKGRldiwgaHcpOworCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX0lORkRST1ApCisJCQlfX29yaW5vY29fZXZfaW5mZHJvcChkZXYsIGh3KTsKKwkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9JTkZPKQorCQkJX19vcmlub2NvX2V2X2luZm8oZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfUlgpCisJCQlfX29yaW5vY29fZXZfcngoZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVFhFWEMpCisJCQlfX29yaW5vY29fZXZfdHhleGMoZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVFgpCisJCQlfX29yaW5vY29fZXZfdHgoZGV2LCBodyk7CisJCWlmIChldmVudHMgJiBIRVJNRVNfRVZfQUxMT0MpCisJCQlfX29yaW5vY29fZXZfYWxsb2MoZGV2LCBodyk7CisKKwkJaGVybWVzX3dyaXRlX3JlZ24oaHcsIEVWQUNLLCBldnN0YXQpOworCisJCWV2c3RhdCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7CisJCWV2ZW50cyA9IGV2c3RhdCAmIGh3LT5pbnRlbjsKKwl9OworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CitFWFBPUlRfU1lNQk9MKG9yaW5vY29faW50ZXJydXB0KTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogUG93ZXIgbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSAmJiAhZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpCitzdGF0aWMgaW50IG9yaW5vY29fcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpub3RpZmllciwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHBtX2V2ZW50LAorCQkJICAgICAgIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKG5vdGlmaWVyLAorCQkJCQkJICAgIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsCisJCQkJCQkgICAgcG1fbm90aWZpZXIpOworCisJLyogQWxsIHdlIG5lZWQgdG8gZG8gaXMgY2FjaGUgdGhlIGZpcm13YXJlIGJlZm9yZSBzdXNwZW5kLCBhbmQKKwkgKiByZWxlYXNlIGl0IHdoZW4gd2UgY29tZSBvdXQuCisJICoKKwkgKiBPbmx5IG5lZWQgdG8gZG8gdGhpcyBpZiB3ZSdyZSBkb3dubG9hZGluZyBmaXJtd2FyZS4gKi8KKwlpZiAoIXByaXYtPmRvX2Z3X2Rvd25sb2FkKQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlzd2l0Y2ggKHBtX2V2ZW50KSB7CisJY2FzZSBQTV9ISUJFUk5BVElPTl9QUkVQQVJFOgorCWNhc2UgUE1fU1VTUEVORF9QUkVQQVJFOgorCQlvcmlub2NvX2NhY2hlX2Z3KHByaXYsIDApOworCQlicmVhazsKKworCWNhc2UgUE1fUE9TVF9SRVNUT1JFOgorCQkvKiBSZXN0b3JlIGZyb20gaGliZXJuYXRpb24gZmFpbGVkLiBXZSBuZWVkIHRvIGNsZWFuCisJCSAqIHVwIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5LCBzbyBmYWxsIHRocm91Z2guICovCisJY2FzZSBQTV9QT1NUX0hJQkVSTkFUSU9OOgorCWNhc2UgUE1fUE9TVF9TVVNQRU5EOgorCQlvcmlub2NvX3VuY2FjaGVfZncocHJpdik7CisJCWJyZWFrOworCisJY2FzZSBQTV9SRVNUT1JFX1BSRVBBUkU6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgdm9pZCBvcmlub2NvX3JlZ2lzdGVyX3BtX25vdGlmaWVyKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJcHJpdi0+cG1fbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IG9yaW5vY29fcG1fbm90aWZpZXI7CisJcmVnaXN0ZXJfcG1fbm90aWZpZXIoJnByaXYtPnBtX25vdGlmaWVyKTsKK30KKworc3RhdGljIHZvaWQgb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCit7CisJdW5yZWdpc3Rlcl9wbV9ub3RpZmllcigmcHJpdi0+cG1fbm90aWZpZXIpOworfQorI2Vsc2UgLyogIVBNX1NMRUVQIHx8IEhFUk1FU19DQUNIRV9GV19PTl9JTklUICovCisjZGVmaW5lIG9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdikgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIG9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KSBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbml0aWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBjb21wX2lkIHsKKwl1MTYgaWQsIHZhcmlhbnQsIG1ham9yLCBtaW5vcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdGF0aWMgaW5saW5lIGZ3dHlwZV90IGRldGVybWluZV9maXJtd2FyZV90eXBlKHN0cnVjdCBjb21wX2lkICpuaWNfaWQpCit7CisJaWYgKG5pY19pZC0+aWQgPCAweDgwMDApCisJCXJldHVybiBGSVJNV0FSRV9UWVBFX0FHRVJFOworCWVsc2UgaWYgKG5pY19pZC0+aWQgPT0gMHg4MDAwICYmIG5pY19pZC0+bWFqb3IgPT0gMCkKKwkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfU1lNQk9MOworCWVsc2UKKwkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw7Cit9CisKKy8qIFNldCBwcml2LT5maXJtd2FyZSB0eXBlLCBkZXRlcm1pbmUgZmlybXdhcmUgcHJvcGVydGllcyAqLworc3RhdGljIGludCBkZXRlcm1pbmVfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKwlzdHJ1Y3QgY29tcF9pZCBuaWNfaWQsIHN0YV9pZDsKKwl1bnNpZ25lZCBpbnQgZmlybXZlcjsKKwljaGFyIHRtcFtTWU1CT0xfTUFYX1ZFUl9MRU4rMV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyKSkpOworCisJLyogR2V0IHRoZSBoYXJkd2FyZSB2ZXJzaW9uICovCisJZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9OSUNJRCwgJm5pY19pZCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBoYXJkd2FyZSBpZGVudGl0eTogZXJyb3IgJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJbGUxNl90b19jcHVzKCZuaWNfaWQuaWQpOworCWxlMTZfdG9fY3B1cygmbmljX2lkLnZhcmlhbnQpOworCWxlMTZfdG9fY3B1cygmbmljX2lkLm1ham9yKTsKKwlsZTE2X3RvX2NwdXMoJm5pY19pZC5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBIYXJkd2FyZSBpZGVudGl0eSAlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIG5pY19pZC5pZCwgbmljX2lkLnZhcmlhbnQsCisJICAgICAgIG5pY19pZC5tYWpvciwgbmljX2lkLm1pbm9yKTsKKworCXByaXYtPmZpcm13YXJlX3R5cGUgPSBkZXRlcm1pbmVfZmlybXdhcmVfdHlwZSgmbmljX2lkKTsKKworCS8qIEdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLworCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU1RBSUQsICZzdGFfaWQpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlYWQgc3RhdGlvbiBpZGVudGl0eTogZXJyb3IgJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJbGUxNl90b19jcHVzKCZzdGFfaWQuaWQpOworCWxlMTZfdG9fY3B1cygmc3RhX2lkLnZhcmlhbnQpOworCWxlMTZfdG9fY3B1cygmc3RhX2lkLm1ham9yKTsKKwlsZTE2X3RvX2NwdXMoJnN0YV9pZC5taW5vcik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTdGF0aW9uIGlkZW50aXR5ICAlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHN0YV9pZC5pZCwgc3RhX2lkLnZhcmlhbnQsCisJICAgICAgIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yKTsKKworCXN3aXRjaCAoc3RhX2lkLmlkKSB7CisJY2FzZSAweDE1OgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQcmltYXJ5IGZpcm13YXJlIGlzIGFjdGl2ZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCWNhc2UgMHgxNGI6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFRlcnRpYXJ5IGZpcm13YXJlIGlzIGFjdGl2ZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PREVWOworCWNhc2UgMHgxZjoJLyogSW50ZXJzaWwsIEFnZXJlLCBTeW1ib2wgU3BlY3RydW0yNCAqLworCWNhc2UgMHgyMToJLyogU3ltYm9sIFNwZWN0cnVtMjQgVHJpbG9neSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBVbmtub3duIHN0YXRpb24gSUQsIHBsZWFzZSByZXBvcnRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCQlicmVhazsKKwl9CisKKwkvKiBEZWZhdWx0IGNhcGFiaWxpdGllcyAqLworCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDE7CisJcHJpdi0+aGFzX213byA9IDA7CisJcHJpdi0+aGFzX3ByZWFtYmxlID0gMDsKKwlwcml2LT5oYXNfcG9ydDMgPSAxOworCXByaXYtPmhhc19pYnNzID0gMTsKKwlwcml2LT5oYXNfd2VwID0gMDsKKwlwcml2LT5oYXNfYmlnX3dlcCA9IDA7CisJcHJpdi0+aGFzX2FsdF90eGNudGwgPSAwOworCXByaXYtPmhhc19leHRfc2NhbiA9IDA7CisJcHJpdi0+aGFzX3dwYSA9IDA7CisJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOworCisJLyogRGV0ZXJtaW5lIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCisJc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgorCQkvKiBMdWNlbnQgV2F2ZWxhbiBJRUVFLCBMdWNlbnQgT3Jpbm9jbywgQ2FibGV0cm9uIFJvYW1BYm91dCwKKwkJICAgRUxTQSwgTWVsY28sIEhQLCBJQk0sIERlbGwgMTE1MCwgQ29tcGFxIDExMC8yMTAgKi8KKwkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKKwkJCSAiTHVjZW50L0FnZXJlICVkLiUwMmQiLCBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vcik7CisKKwkJZmlybXZlciA9ICgodW5zaWduZWQgbG9uZylzdGFfaWQubWFqb3IgPDwgMTYpIHwgc3RhX2lkLm1pbm9yOworCisJCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHg2MDAwNik7CisJCXByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDQwMDIwKTsKKwkJcHJpdi0+aGFzX2JpZ193ZXAgPSAxOyAvKiBGSVhNRTogdGhpcyBpcyB3cm9uZyAtIGhvdyBkbyB3ZSB0ZWxsCisJCQkJCSAgR29sZCBjYXJkcyBmcm9tIHRoZSBvdGhlcnM/ICovCisJCXByaXYtPmhhc19td28gPSAoZmlybXZlciA+PSAweDYwMDAwKTsKKwkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHg0MDAyMCk7IC8qIERvbid0IHdvcmsgaW4gNy41MiA/ICovCisJCXByaXYtPmlic3NfcG9ydCA9IDE7CisJCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4ODAwMGEpOworCQlwcml2LT5kb19md19kb3dubG9hZCA9IDE7CisJCXByaXYtPmJyb2tlbl9tb25pdG9yID0gKGZpcm12ZXIgPj0gMHg4MDAwMCk7CisJCXByaXYtPmhhc19hbHRfdHhjbnRsID0gKGZpcm12ZXIgPj0gMHg5MDAwMCk7IC8qIEFsbCA5LnggPyAqLworCQlwcml2LT5oYXNfZXh0X3NjYW4gPSAoZmlybXZlciA+PSAweDkwMDAwKTsgLyogQWxsIDkueCA/ICovCisJCXByaXYtPmhhc193cGEgPSAoZmlybXZlciA+PSAweDkwMDJhKTsKKwkJLyogVGVzdGVkIHdpdGggQWdlcmUgZmlybXdhcmUgOgorCQkgKgkxLjE2IDsgNC4wOCA7IDQuNTIgOyA2LjA0IDsgNi4xNiA7IDcuMjggPT4gSmVhbiBJSQorCQkgKiBUZXN0ZWQgQ2FibGVUcm9uIGZpcm13YXJlIDogNC4zMiA9PiBBbnRvbiAqLworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQkvKiBTeW1ib2wgLCAzQ29tIEFpckNvbm5lY3QsIEludGVsLCBFcmljc3NvbiBXTEFOICovCisJCS8qIEludGVsIE1BQyA6IDAwOjAyOkIzOiogKi8KKwkJLyogM0NvbSBNQUMgOiAwMDo1MDpEQToqICovCisJCW1lbXNldCh0bXAsIDAsIHNpemVvZih0bXApKTsKKwkJLyogR2V0IHRoZSBTeW1ib2wgZmlybXdhcmUgdmVyc2lvbiAqLworCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLAorCQkJCSAgICAgIEhFUk1FU19SSURfU0VDT05EQVJZVkVSU0lPTl9TWU1CT0wsCisJCQkJICAgICAgU1lNQk9MX01BWF9WRVJfTEVOLCBOVUxMLCAmdG1wKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICIlczogRXJyb3IgJWQgcmVhZGluZyBTeW1ib2wgZmlybXdhcmUgaW5mby4gIgorCQkJICAgICAgICJXaWxkbHkgZ3Vlc3NpbmcgY2FwYWJpbGl0aWVzLi4uXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKKwkJCWZpcm12ZXIgPSAwOworCQkJdG1wWzBdID0gJ1wwJzsKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBmaXJtd2FyZSByZXZpc2lvbiBpcyBhIHN0cmluZywgdGhlIGZvcm1hdCBpcworCQkJICogc29tZXRoaW5nIGxpa2UgOiAiVjIuMjAtMDEiLgorCQkJICogUXVpY2sgYW5kIGRpcnR5IHBhcnNpbmcuLi4gLSBKZWFuIElJCisJCQkgKi8KKwkJCWZpcm12ZXIgPSAoKHRtcFsxXSAtICcwJykgPDwgMTYpCisJCQkJfCAoKHRtcFszXSAtICcwJykgPDwgMTIpCisJCQkJfCAoKHRtcFs0XSAtICcwJykgPDwgOCkKKwkJCQl8ICgodG1wWzZdIC0gJzAnKSA8PCA0KQorCQkJCXwgKHRtcFs3XSAtICcwJyk7CisKKwkJCXRtcFtTWU1CT0xfTUFYX1ZFUl9MRU5dID0gJ1wwJzsKKwkJfQorCisJCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCisJCQkgIlN5bWJvbCAlcyIsIHRtcCk7CisKKwkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKKwkJcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4MTUwMTIpOworCQlwcml2LT5oYXNfYmlnX3dlcCA9IChmaXJtdmVyID49IDB4MjAwMDApOworCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDIwMDAwICYmIGZpcm12ZXIgPCAweDIyMDAwKSB8fAorCQkJICAgICAgIChmaXJtdmVyID49IDB4MjkwMDAgJiYgZmlybXZlciA8IDB4MzAwMDApIHx8CisJCQkgICAgICAgZmlybXZlciA+PSAweDMxMDAwOworCQlwcml2LT5oYXNfcHJlYW1ibGUgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKKwkJcHJpdi0+aWJzc19wb3J0ID0gNDsKKworCQkvKiBTeW1ib2wgZmlybXdhcmUgaXMgZm91bmQgb24gdmFyaW91cyBjYXJkcywgYnV0CisJCSAqIHRoZXJlIGhhcyBiZWVuIG5vIGF0dGVtcHQgdG8gY2hlY2sgZmlybXdhcmUKKwkJICogZG93bmxvYWQgb24gbm9uLXNwZWN0cnVtX2NzIGJhc2VkIGNhcmRzLgorCQkgKgorCQkgKiBHaXZlbiB0aGF0IHRoZSBBZ2VyZSBmaXJtd2FyZSBkb3dubG9hZCB3b3JrcworCQkgKiBkaWZmZXJlbnRseSwgd2Ugc2hvdWxkIGF2b2lkIGRvaW5nIGEgZmlybXdhcmUKKwkJICogZG93bmxvYWQgd2l0aCB0aGUgU3ltYm9sIGFsZ29yaXRobSBvbiBub24tc3BlY3RydW0KKwkJICogY2FyZHMuCisJCSAqCisJCSAqIEZvciBub3cgd2UgY2FuIGlkZW50aWZ5IGEgc3BlY3RydW1fY3MgYmFzZWQgY2FyZAorCQkgKiBiZWNhdXNlIGl0IGhhcyBhIGZpcm13YXJlIHJlc2V0IGZ1bmN0aW9uLgorCQkgKi8KKwkJcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAocHJpdi0+c3RvcF9mdyAhPSBOVUxMKTsKKworCQlwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQgPSAoZmlybXZlciA9PSAweDI1MDEzKSB8fAorCQkJCShmaXJtdmVyID49IDB4MzAwMDAgJiYgZmlybXZlciA8PSAweDMxMDAwKTsKKwkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgzMTAwMSkgfHwKKwkJCQkgICAgIChmaXJtdmVyID49IDB4MjkwNTcgJiYgZmlybXZlciA8IDB4MzAwMDApOworCQkvKiBUZXN0ZWQgd2l0aCBJbnRlbCBmaXJtd2FyZSA6IDB4MjAwMTUgPT4gSmVhbiBJSSAqLworCQkvKiBUZXN0ZWQgd2l0aCAzQ29tIGZpcm13YXJlIDogMHgxNTAxMiAmIDB4MjIwMDEgPT4gSmVhbiBJSSAqLworCQlicmVhazsKKwljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6CisJCS8qIEQtTGluaywgTGlua3N5cywgQWR0cm9uLCBab29tQWlyLCBhbmQgbWFueSBvdGhlcnMuLi4KKwkJICogU2Ftc3VuZywgQ29tcGFxIDEwMC8yMDAgYW5kIFByb3hpbSBhcmUgc2xpZ2h0bHkKKwkJICogZGlmZmVyZW50IGFuZCBsZXNzIHdlbGwgdGVzdGVkICovCisJCS8qIEQtTGluayBNQUMgOiAwMDo0MDowNToqICovCisJCS8qIEFkZHRyb24gTUFDIDogMDA6OTA6RDE6KiAqLworCQlzbnByaW50Zihwcml2LT5md19uYW1lLCBzaXplb2YocHJpdi0+ZndfbmFtZSkgLSAxLAorCQkJICJJbnRlcnNpbCAlZC4lZC4lZCIsIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yLAorCQkJIHN0YV9pZC52YXJpYW50KTsKKworCQlmaXJtdmVyID0gKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5tYWpvciA8PCAxNikgfAorCQkJKCh1bnNpZ25lZCBsb25nKXN0YV9pZC5taW5vciA8PCA4KSB8IHN0YV9pZC52YXJpYW50OworCisJCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHgwMDA3MDApOyAvKiBGSVhNRSAqLworCQlwcml2LT5oYXNfYmlnX3dlcCA9IHByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDAwMDgwMCk7CisJCXByaXYtPmhhc19wbSA9IChmaXJtdmVyID49IDB4MDAwNzAwKTsKKwkJcHJpdi0+aGFzX2hvc3RzY2FuID0gKGZpcm12ZXIgPj0gMHgwMTAzMDEpOworCisJCWlmIChmaXJtdmVyID49IDB4MDAwODAwKQorCQkJcHJpdi0+aWJzc19wb3J0ID0gMDsKKwkJZWxzZSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBJbnRlcnNpbCBmaXJtd2FyZSBlYXJsaWVyICIKKwkJCSAgICAgICAidGhhbiB2MC44LnggLSBzZXZlcmFsIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCXByaXYtPmlic3NfcG9ydCA9IDE7CisJCX0KKwkJYnJlYWs7CisJfQorCXByaW50ayhLRVJOX0RFQlVHICIlczogRmlybXdhcmUgZGV0ZXJtaW5lZCBhcyAlc1xuIiwgZGV2LT5uYW1lLAorCSAgICAgICBwcml2LT5md19uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIG5pY2tidWY7CisJdTE2IHJlY2xlbjsKKwlpbnQgbGVuOworCisJLyogTm8gbmVlZCB0byBsb2NrLCB0aGUgaHdfdW5hdmFpbGFibGUgZmxhZyBpcyBhbHJlYWR5IHNldCBpbgorCSAqIGFsbG9jX29yaW5vY29kZXYoKSAqLworCXByaXYtPm5pY2J1Zl9zaXplID0gSUVFRTgwMjExX01BWF9GUkFNRV9MRU4gKyBFVEhfSExFTjsKKworCS8qIEluaXRpYWxpemUgdGhlIGZpcm13YXJlICovCisJZXJyID0gaGVybWVzX2luaXQoaHcpOworCWlmIChlcnIgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZSAoZXJyID0gJWQpXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBkZXRlcm1pbmVfZmlybXdhcmUoZGV2KTsKKwlpZiAoZXJyICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW5jb21wYXRpYmxlIGZpcm13YXJlLCBhYm9ydGluZ1xuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwcml2LT5kb19md19kb3dubG9hZCkgeworI2lmZGVmIENPTkZJR19IRVJNRVNfQ0FDSEVfRldfT05fSU5JVAorCQlvcmlub2NvX2NhY2hlX2Z3KHByaXYsIDApOworI2VuZGlmCisKKwkJZXJyID0gb3Jpbm9jb19kb3dubG9hZChwcml2KTsKKwkJaWYgKGVycikKKwkJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKKworCQkvKiBDaGVjayBmaXJtd2FyZSB2ZXJzaW9uIGFnYWluICovCisJCWVyciA9IGRldGVybWluZV9maXJtd2FyZShkZXYpOworCQlpZiAoZXJyICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEluY29tcGF0aWJsZSBmaXJtd2FyZSwgYWJvcnRpbmdcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKHByaXYtPmhhc19wb3J0MykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZC1ob2MgZGVtbyBtb2RlIHN1cHBvcnRlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJaWYgKHByaXYtPmhhc19pYnNzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElFRUUgc3RhbmRhcmQgSUJTUyBhZC1ob2MgbW9kZSBzdXBwb3J0ZWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUpOworCWlmIChwcml2LT5oYXNfd2VwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogV0VQIHN1cHBvcnRlZCwgJXMtYml0IGtleVxuIiwgZGV2LT5uYW1lLAorCQkgICAgICAgcHJpdi0+aGFzX2JpZ193ZXAgPyAiMTA0IiA6ICI0MCIpOworCX0KKwlpZiAocHJpdi0+aGFzX3dwYSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdQQS1QU0sgc3VwcG9ydGVkXG4iLCBkZXYtPm5hbWUpOworCQlpZiAob3Jpbm9jb19taWNfaW5pdChwcml2KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRmFpbGVkIHRvIHNldHVwIE1JQyBjcnlwdG8gIgorCQkJICAgICAgICJhbGdvcml0aG0uIERpc2FibGluZyBXUEEgc3VwcG9ydFxuIiwgZGV2LT5uYW1lKTsKKwkJCXByaXYtPmhhc193cGEgPSAwOworCQl9CisJfQorCisJLyogTm93IHdlIGhhdmUgdGhlIGZpcm13YXJlIGNhcGFiaWxpdGllcywgYWxsb2NhdGUgYXBwcm9waWF0ZQorCSAqIHNpemVkIHNjYW4gYnVmZmVycyAqLworCWlmIChvcmlub2NvX2Jzc19kYXRhX2FsbG9jYXRlKHByaXYpKQorCQlnb3RvIG91dDsKKwlvcmlub2NvX2Jzc19kYXRhX2luaXQocHJpdik7CisKKwkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCisJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05NQUNBRERSLAorCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIGRldi0+ZGV2X2FkZHIpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZhaWxlZCB0byByZWFkIE1BQyBhZGRyZXNzIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICIlczogTUFDIGFkZHJlc3MgJXBNXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIGRldi0+ZGV2X2FkZHIpOworCisJLyogR2V0IHRoZSBzdGF0aW9uIG5hbWUgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk5BTUUsCisJCQkgICAgICBzaXplb2Yobmlja2J1ZiksICZyZWNsZW4sICZuaWNrYnVmKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIHN0YXRpb24gbmFtZVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAobmlja2J1Zi5sZW4pCisJCWxlbiA9IG1pbihJV19FU1NJRF9NQVhfU0laRSwgKGludClsZTE2X3RvX2NwdShuaWNrYnVmLmxlbikpOworCWVsc2UKKwkJbGVuID0gbWluKElXX0VTU0lEX01BWF9TSVpFLCAyICogcmVjbGVuKTsKKwltZW1jcHkocHJpdi0+bmljaywgJm5pY2tidWYudmFsLCBsZW4pOworCXByaXYtPm5pY2tbbGVuXSA9ICdcMCc7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFN0YXRpb24gbmFtZSBcIiVzXCJcbiIsIGRldi0+bmFtZSwgcHJpdi0+bmljayk7CisKKwllcnIgPSBvcmlub2NvX2FsbG9jYXRlX2ZpZChkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIE5JQyBidWZmZXIhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IGFsbG93ZWQgY2hhbm5lbHMgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DSEFOTkVMTElTVCwKKwkJCQkgICZwcml2LT5jaGFubmVsX21hc2spOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgY2hhbm5lbCBsaXN0IVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIEdldCBpbml0aWFsIEFQIGRlbnNpdHkgKi8KKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZTWVNURU1TQ0FMRSwKKwkJCQkgICZwcml2LT5hcF9kZW5zaXR5KTsKKwlpZiAoZXJyIHx8IHByaXYtPmFwX2RlbnNpdHkgPCAxIHx8IHByaXYtPmFwX2RlbnNpdHkgPiAzKQorCQlwcml2LT5oYXNfc2Vuc2l0aXZpdHkgPSAwOworCisJLyogR2V0IGluaXRpYWwgUlRTIHRocmVzaG9sZCAqLworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlJUU1RIUkVTSE9MRCwKKwkJCQkgICZwcml2LT5ydHNfdGhyZXNoKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIFJUUyB0aHJlc2hvbGQhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IGluaXRpYWwgZnJhZ21lbnRhdGlvbiBzZXR0aW5ncyAqLworCWlmIChwcml2LT5oYXNfbXdvKQorCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKKwkJCQkJICAmcHJpdi0+bXdvX3JvYnVzdCk7CisJZWxzZQorCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCisJCQkJCSAgJnByaXYtPmZyYWdfdGhyZXNoKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIGZyYWdtZW50YXRpb24gc2V0dGluZ3MhXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogUG93ZXIgbWFuYWdlbWVudCBzZXR1cCAqLworCWlmIChwcml2LT5oYXNfcG0pIHsKKwkJcHJpdi0+cG1fb24gPSAwOworCQlwcml2LT5wbV9tY2FzdCA9IDE7CisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwKKwkJCQkJICAmcHJpdi0+cG1fcGVyaW9kKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgcG93ZXIgbWFuYWdlbWVudCBwZXJpb2QhXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwKKwkJCQkJICAmcHJpdi0+cG1fdGltZW91dCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIHBvd2VyIG1hbmFnZW1lbnQgdGltZW91dCFcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogUHJlYW1ibGUgc2V0dXAgKi8KKwlpZiAocHJpdi0+aGFzX3ByZWFtYmxlKSB7CisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GUFJFQU1CTEVfU1lNQk9MLAorCQkJCQkgICZwcml2LT5wcmVhbWJsZSk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLworCXByaXYtPml3X21vZGUgPSBJV19NT0RFX0lORlJBOworCS8qIEJ5IGRlZmF1bHQgdXNlIElFRUUvSUJTUyBhZC1ob2MgbW9kZSBpZiB3ZSBoYXZlIGl0ICovCisJcHJpdi0+cHJlZmVyX3BvcnQzID0gcHJpdi0+aGFzX3BvcnQzICYmICghcHJpdi0+aGFzX2lic3MpOworCXNldF9wb3J0X3R5cGUocHJpdik7CisJcHJpdi0+Y2hhbm5lbCA9IDA7IC8qIHVzZSBmaXJtd2FyZSBkZWZhdWx0ICovCisKKwlwcml2LT5wcm9taXNjdW91cyA9IDA7CisJcHJpdi0+ZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKKwlwcml2LT50eF9rZXkgPSAwOworCXByaXYtPndwYV9lbmFibGVkID0gMDsKKwlwcml2LT50a2lwX2NtX2FjdGl2ZSA9IDA7CisJcHJpdi0+a2V5X21nbXQgPSAwOworCXByaXYtPndwYV9pZV9sZW4gPSAwOworCXByaXYtPndwYV9pZSA9IE5VTEw7CisKKwkvKiBNYWtlIHRoZSBoYXJkd2FyZSBhdmFpbGFibGUsIGFzIGxvbmcgYXMgaXQgaGFzbid0IGJlZW4KKwkgKiByZW1vdmVkIGVsc2V3aGVyZSAoZS5nLiBieSBQQ01DSUEgaG90IHVucGx1ZykgKi8KKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwlwcml2LT5od191bmF2YWlsYWJsZS0tOworCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlYWR5XG4iLCBkZXYtPm5hbWUpOworCisgb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgb3Jpbm9jb19uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAkJPSBvcmlub2NvX2luaXQsCisJLm5kb19vcGVuCQk9IG9yaW5vY29fb3BlbiwKKwkubmRvX3N0b3AJCT0gb3Jpbm9jb19zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBvcmlub2NvX3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBvcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUJCT0gb3Jpbm9jb19jaGFuZ2VfbXR1LAorCS5uZG9fdHhfdGltZW91dAkJPSBvcmlub2NvX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gb3Jpbm9jb19nZXRfc3RhdHMsCit9OworCitzdHJ1Y3QgbmV0X2RldmljZQorKmFsbG9jX29yaW5vY29kZXYoaW50IHNpemVvZl9jYXJkLAorCQkgIHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwkJICBpbnQgKCpoYXJkX3Jlc2V0KShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICopLAorCQkgIGludCAoKnN0b3BfZncpKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKiwgaW50KSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXY7CisKKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSkgKyBzaXplb2ZfY2FyZCk7CisJaWYgKCFkZXYpCisJCXJldHVybiBOVUxMOworCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXByaXYtPm5kZXYgPSBkZXY7CisJaWYgKHNpemVvZl9jYXJkKQorCQlwcml2LT5jYXJkID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcHJpdgorCQkJCSAgICAgICsgc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUpKTsKKwllbHNlCisJCXByaXYtPmNhcmQgPSBOVUxMOworCXByaXYtPmRldiA9IGRldmljZTsKKworCS8qIFNldHVwIC8gb3ZlcnJpZGUgbmV0X2RldmljZSBmaWVsZHMgKi8KKwlkZXYtPm5ldGRldl9vcHMgPSAmb3Jpbm9jb19uZXRkZXZfb3BzOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWjsgLyogMSBzZWNvbmQgdGltZW91dCAqLworCWRldi0+ZXRodG9vbF9vcHMgPSAmb3Jpbm9jb19ldGh0b29sX29wczsKKwlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJm9yaW5vY29faGFuZGxlcl9kZWY7CisjaWZkZWYgV0lSRUxFU1NfU1BZCisJcHJpdi0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZwcml2LT5zcHlfZGF0YTsKKwlkZXYtPndpcmVsZXNzX2RhdGEgPSAmcHJpdi0+d2lyZWxlc3NfZGF0YTsKKyNlbmRpZgorCS8qIHdlIHVzZSB0aGUgZGVmYXVsdCBldGhfbWFjX2FkZHIgZm9yIHNldHRpbmcgdGhlIE1BQyBhZGRyICovCisKKwkvKiBSZXNlcnZlIHNwYWNlIGluIHNrYiBmb3IgdGhlIFNOQVAgaGVhZGVyICovCisJZGV2LT5oYXJkX2hlYWRlcl9sZW4gKz0gRU5DQVBTX09WRVJIRUFEOworCisJLyogU2V0IHVwIGRlZmF1bHQgY2FsbGJhY2tzICovCisJcHJpdi0+aGFyZF9yZXNldCA9IGhhcmRfcmVzZXQ7CisJcHJpdi0+c3RvcF9mdyA9IHN0b3BfZnc7CisKKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcHJpdi0+b3BlbiA9IDA7CisJcHJpdi0+aHdfdW5hdmFpbGFibGUgPSAxOyAvKiBvcmlub2NvX2luaXQoKSBtdXN0IGNsZWFyIHRoaXMKKwkJCQkgICAqIGJlZm9yZSBhbnl0aGluZyBlbHNlIHRvdWNoZXMgdGhlCisJCQkJICAgKiBoYXJkd2FyZSAqLworCUlOSVRfV09SSygmcHJpdi0+cmVzZXRfd29yaywgb3Jpbm9jb19yZXNldCk7CisJSU5JVF9XT1JLKCZwcml2LT5qb2luX3dvcmssIG9yaW5vY29fam9pbl9hcCk7CisJSU5JVF9XT1JLKCZwcml2LT53ZXZlbnRfd29yaywgb3Jpbm9jb19zZW5kX3dldmVudHMpOworCisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnJ4X2xpc3QpOworCXRhc2tsZXRfaW5pdCgmcHJpdi0+cnhfdGFza2xldCwgb3Jpbm9jb19yeF9pc3JfdGFza2xldCwKKwkJICAgICAodW5zaWduZWQgbG9uZykgZGV2KTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOworCisjaWYgZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpIHx8IGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKQorCXByaXYtPmNhY2hlZF9wcmlfZncgPSBOVUxMOworCXByaXYtPmNhY2hlZF9mdyA9IE5VTEw7CisjZW5kaWYKKworCS8qIFJlZ2lzdGVyIFBNIG5vdGlmaWVycyAqLworCW9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdik7CisKKwlyZXR1cm4gZGV2OworfQorRVhQT1JUX1NZTUJPTChhbGxvY19vcmlub2NvZGV2KTsKKwordm9pZCBmcmVlX29yaW5vY29kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhLCAqdGVtcDsKKworCS8qIElmIHRoZSB0YXNrbGV0IGlzIHNjaGVkdWxlZCB3aGVuIHdlIGNhbGwgdGFza2xldF9raWxsIGl0CisJICogd2lsbCBydW4gb25lIGZpbmFsIHRpbWUuIEhvd2V2ZXIgdGhlIHRhc2tsZXQgd2lsbCBvbmx5CisJICogZHJhaW4gcHJpdi0+cnhfbGlzdCBpZiB0aGUgaHcgaXMgc3RpbGwgYXZhaWxhYmxlLiAqLworCXRhc2tsZXRfa2lsbCgmcHJpdi0+cnhfdGFza2xldCk7CisKKwkvKiBFeHBsaWNpdGx5IGRyYWluIHByaXYtPnJ4X2xpc3QgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocnhfZGF0YSwgdGVtcCwgJnByaXYtPnJ4X2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnJ4X2RhdGEtPmxpc3QpOworCisJCWRldl9rZnJlZV9za2IocnhfZGF0YS0+c2tiKTsKKwkJa2ZyZWUocnhfZGF0YS0+ZGVzYyk7CisJCWtmcmVlKHJ4X2RhdGEpOworCX0KKworCW9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KTsKKwlvcmlub2NvX3VuY2FjaGVfZncocHJpdik7CisKKwlwcml2LT53cGFfaWVfbGVuID0gMDsKKwlrZnJlZShwcml2LT53cGFfaWUpOworCW9yaW5vY29fbWljX2ZyZWUocHJpdik7CisJb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHByaXYpOworCWZyZWVfbmV0ZGV2KGRldik7Cit9CitFWFBPUlRfU1lNQk9MKGZyZWVfb3Jpbm9jb2Rldik7CisKK3N0YXRpYyB2b2lkIG9yaW5vY29fZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3RybmNweShpbmZvLT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSAtIDEpOworCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgRFJJVkVSX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSAtIDEpOworCXN0cm5jcHkoaW5mby0+ZndfdmVyc2lvbiwgcHJpdi0+ZndfbmFtZSwgc2l6ZW9mKGluZm8tPmZ3X3ZlcnNpb24pIC0gMSk7CisJaWYgKGRldi0+ZGV2LnBhcmVudCkKKwkJc3RybmNweShpbmZvLT5idXNfaW5mbywgZGV2X25hbWUoZGV2LT5kZXYucGFyZW50KSwKKwkJCXNpemVvZihpbmZvLT5idXNfaW5mbykgLSAxKTsKKwllbHNlCisJCXNucHJpbnRmKGluZm8tPmJ1c19pbmZvLCBzaXplb2YoaW5mby0+YnVzX2luZm8pIC0gMSwKKwkJCSAiUENNQ0lBICVwIiwgcHJpdi0+aHcuaW9iYXNlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcmlub2NvX2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbyA9IG9yaW5vY29fZ2V0X2RydmluZm8sCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1vZHVsZSBpbml0aWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ2FuJ3QgYmUgZGVjbGFyZWQgImNvbnN0IiBvciB0aGUgd2hvbGUgX19pbml0ZGF0YSBzZWN0aW9uIHdpbGwKKyAqIGJlY29tZSBjb25zdCAqLworc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBEUklWRVJfTkFNRSAiICIgRFJJVkVSX1ZFUlNJT04KKwkiIChEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+LCAiCisJIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+LCBldCBhbCkiOworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X29yaW5vY28odm9pZCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIHZlcnNpb24pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9vcmlub2NvKHZvaWQpCit7Cit9CisKK21vZHVsZV9pbml0KGluaXRfb3Jpbm9jbyk7Cittb2R1bGVfZXhpdChleGl0X29yaW5vY28pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjJiYWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmgKQEAgLTAsMCArMSw2MyBAQAorLyogRXhwb3J0cyBmcm9tIG1haW4gdG8gaGVscGVyIG1vZHVsZXMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2lmbmRlZiBfT1JJTk9DT19NQUlOX0hfCisjZGVmaW5lIF9PUklOT0NPX01BSU5fSF8KKworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgIm9yaW5vY28uaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQ29tcGlsZSB0aW1lIGNvbmZpZ3VyYXRpb24gYW5kIGNvbXBhdGliaWxpdHkgc3R1ZmYgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBXZSBkbyB0aGlzIHRoaXMgd2F5IHRvIGF2b2lkIGlmZGVmcyBpbiB0aGUgYWN0dWFsIGNvZGUgKi8KKyNpZmRlZiBXSVJFTEVTU19TUFkKKyNkZWZpbmUgU1BZX05VTUJFUihwcml2KQkocHJpdi0+c3B5X2RhdGEuc3B5X251bWJlcikKKyNlbHNlCisjZGVmaW5lIFNQWV9OVU1CRVIocHJpdikJMAorI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEV4cG9ydCBtb2R1bGUgcGFyYW1ldGVyICovCitleHRlcm4gaW50IGZvcmNlX21vbml0b3I7CisKKy8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCitzdHJ1Y3QgbmV0X2RldmljZTsKK3N0cnVjdCB3b3JrX3N0cnVjdDsKKwordm9pZCBzZXRfcG9ydF90eXBlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIG9yaW5vY29fcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKworCisvKiBJbmZvcm1hdGlvbiBlbGVtZW50IGhlbHBlcnMgLSBmaW5kIGEgaG9tZSBmb3IgdGhlc2UuLi4gKi8KK3N0YXRpYyBpbmxpbmUgdTggKm9yaW5vY29fZ2V0X2llKHU4ICpkYXRhLCBzaXplX3QgbGVuLAorCQkJCSBlbnVtIGllZWU4MDIxMV9laWQgZWlkKQoreworCXU4ICpwID0gZGF0YTsKKwl3aGlsZSAoKHAgKyAyKSA8IChkYXRhICsgbGVuKSkgeworCQlpZiAocFswXSA9PSBlaWQpCisJCQlyZXR1cm4gcDsKKwkJcCArPSBwWzFdICsgMjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKyNkZWZpbmUgV1BBX09VSV9UWVBFCSJceDAwXHg1MFx4RjJceDAxIgorI2RlZmluZSBXUEFfU0VMRUNUT1JfTEVOIDQKK3N0YXRpYyBpbmxpbmUgdTggKm9yaW5vY29fZ2V0X3dwYV9pZSh1OCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwl1OCAqcCA9IGRhdGE7CisJd2hpbGUgKChwICsgMiArIFdQQV9TRUxFQ1RPUl9MRU4pIDwgKGRhdGEgKyBsZW4pKSB7CisJCWlmICgocFswXSA9PSBXTEFOX0VJRF9HRU5FUklDKSAmJgorCQkgICAgKG1lbWNtcCgmcFsyXSwgV1BBX09VSV9UWVBFLCBXUEFfU0VMRUNUT1JfTEVOKSA9PSAwKSkKKwkJCXJldHVybiBwOworCQlwICs9IHBbMV0gKyAyOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworI2VuZGlmIC8qIF9PUklOT0NPX01BSU5fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWljLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwM2U3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21pYy5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qIE9yaW5vY28gTUlDIGhlbHBlcnMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKworI2luY2x1ZGUgIm9yaW5vY28uaCIKKyNpbmNsdWRlICJtaWMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTWljaGFlbCBNSUMgY3J5cHRvIHNldHVwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IG9yaW5vY29fbWljX2luaXQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKK3sKKwlwcml2LT50eF90Zm1fbWljID0gY3J5cHRvX2FsbG9jX2hhc2goIm1pY2hhZWxfbWljIiwgMCwgMCk7CisJaWYgKElTX0VSUihwcml2LT50eF90Zm1fbWljKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAib3Jpbm9jb19taWNfaW5pdDogY291bGQgbm90IGFsbG9jYXRlICIKKwkJICAgICAgICJjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKTsKKwkJcHJpdi0+dHhfdGZtX21pYyA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXByaXYtPnJ4X3RmbV9taWMgPSBjcnlwdG9fYWxsb2NfaGFzaCgibWljaGFlbF9taWMiLCAwLCAwKTsKKwlpZiAoSVNfRVJSKHByaXYtPnJ4X3RmbV9taWMpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJvcmlub2NvX21pY19pbml0OiBjb3VsZCBub3QgYWxsb2NhdGUgIgorCQkgICAgICAgImNyeXB0byBBUEkgbWljaGFlbF9taWNcbiIpOworCQlwcml2LT5yeF90Zm1fbWljID0gTlVMTDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgb3Jpbm9jb19taWNfZnJlZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWlmIChwcml2LT50eF90Zm1fbWljKQorCQljcnlwdG9fZnJlZV9oYXNoKHByaXYtPnR4X3RmbV9taWMpOworCWlmIChwcml2LT5yeF90Zm1fbWljKQorCQljcnlwdG9fZnJlZV9oYXNoKHByaXYtPnJ4X3RmbV9taWMpOworfQorCitpbnQgb3Jpbm9jb19taWMoc3RydWN0IGNyeXB0b19oYXNoICp0Zm1fbWljaGFlbCwgdTggKmtleSwKKwkJdTggKmRhLCB1OCAqc2EsIHU4IHByaW9yaXR5LAorCQl1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQoreworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07CisJdTggaGRyW0VUSF9ITEVOICsgMl07IC8qIHNpemUgb2YgaGVhZGVyICsgcGFkZGluZyAqLworCisJaWYgKHRmbV9taWNoYWVsID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAib3Jpbm9jb19taWM6IHRmbV9taWNoYWVsID09IE5VTExcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogQ29weSBoZWFkZXIgaW50byBidWZmZXIuIFdlIG5lZWQgdGhlIHBhZGRpbmcgb24gdGhlIGVuZCB6ZXJvZWQgKi8KKwltZW1jcHkoJmhkclswXSwgZGEsIEVUSF9BTEVOKTsKKwltZW1jcHkoJmhkcltFVEhfQUxFTl0sIHNhLCBFVEhfQUxFTik7CisJaGRyW0VUSF9BTEVOKjJdID0gcHJpb3JpdHk7CisJaGRyW0VUSF9BTEVOKjIrMV0gPSAwOworCWhkcltFVEhfQUxFTioyKzJdID0gMDsKKwloZHJbRVRIX0FMRU4qMiszXSA9IDA7CisKKwkvKiBVc2Ugc2NhdHRlciBnYXRoZXIgdG8gTUlDIGhlYWRlciBhbmQgZGF0YSBpbiBvbmUgZ28gKi8KKwlzZ19pbml0X3RhYmxlKHNnLCAyKTsKKwlzZ19zZXRfYnVmKCZzZ1swXSwgaGRyLCBzaXplb2YoaGRyKSk7CisJc2dfc2V0X2J1Zigmc2dbMV0sIGRhdGEsIGRhdGFfbGVuKTsKKworCWlmIChjcnlwdG9faGFzaF9zZXRrZXkodGZtX21pY2hhZWwsIGtleSwgTUlDX0tFWUxFTikpCisJCXJldHVybiAtMTsKKworCWRlc2MudGZtID0gdGZtX21pY2hhZWw7CisJZGVzYy5mbGFncyA9IDA7CisJcmV0dXJuIGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgc2csIGRhdGFfbGVuICsgc2l6ZW9mKGhkciksCisJCQkJICBtaWMpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9taWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkMDViYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWljLmgKQEAgLTAsMCArMSwyMiBAQAorLyogT3Jpbm9jbyBNSUMgaGVscGVycworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX01JQ19IXworI2RlZmluZSBfT1JJTk9DT19NSUNfSF8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgTUlDSEFFTF9NSUNfTEVOIDgKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK3N0cnVjdCBvcmlub2NvX3ByaXZhdGU7CitzdHJ1Y3QgY3J5cHRvX2hhc2g7CisKK2ludCBvcmlub2NvX21pY19pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOwordm9pZCBvcmlub2NvX21pY19mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworaW50IG9yaW5vY29fbWljKHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX21pY2hhZWwsIHU4ICprZXksCisJCXU4ICpkYSwgdTggKnNhLCB1OCBwcmlvcml0eSwKKwkJdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYyk7CisKKyNlbmRpZiAvKiBPUklOT0NPX01JQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjdkMWE5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jby5jCisrKyAvZGV2L251bGwKQEAgLTEsNjE1OSArMCwwIEBACi0vKiBvcmlub2NvLmMgLSAoZm9ybWVybHkga25vd24gYXMgZGxkd2RfY3MuYyBhbmQgb3Jpbm9jb19jcy5jKQotICoKLSAqIEEgZHJpdmVyIGZvciBIZXJtZXMgb3IgUHJpc20gMiBjaGlwc2V0IGJhc2VkIFBDTUNJQSB3aXJlbGVzcwotICogYWRhcHRvcnMsIHdpdGggTHVjZW50L0FnZXJlLCBJbnRlcnNpbCBvciBTeW1ib2wgZmlybXdhcmUuCi0gKgotICogQ3VycmVudCBtYWludGFpbmVycyAoYXMgb2YgMjkgU2VwdGVtYmVyIDIwMDMpIGFyZToKLSAqIAlQYXZlbCBSb3NraW4gPHByb3NraSBBVCBnbnUub3JnPgotICogYW5kCURhdmlkIEdpYnNvbiA8aGVybWVzIEFUIGdpYnNvbi5kcm9wYmVhci5pZC5hdT4KLSAqCi0gKiAoQykgQ29weXJpZ2h0IERhdmlkIEdpYnNvbiwgSUJNIENvcnBvcmF0aW9uIDIwMDEtMjAwMy4KLSAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBHaWJzb24sIExpbnV4Y2FyZSBBdXN0cmFsaWEuCi0gKglXaXRoIHNvbWUgaGVscCBmcm9tIDoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBKZWFuIFRvdXJyaWxoZXMsIEhQIExhYnMKLSAqIENvcHlyaWdodCAoQykgMjAwMSBCZW5qYW1pbiBIZXJyZW5zY2htaWR0Ci0gKgotICogQmFzZWQgb24gZHVtbXlfY3MuYyAxLjI3IDIwMDAvMDYvMTIgMjE6Mjc6MjUKLSAqCi0gKiBQb3J0aW9ucyBiYXNlZCBvbiB3dmxhbl9jcy5jIDEuMC42LCBDb3B5cmlnaHQgQW5kcmVhcyBOZXVoYXVzIDxhbmR5Ci0gKiBBVCBmYXN0YS5maC1kb3J0bXVuZC5kZT4KLSAqICAgICAgaHR0cDovL3d3dy5zdHVkLmZoLWRvcnRtdW5kLmRlL35hbmR5L3d2bGFuLwotICoKLSAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UKLSAqIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KLSAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlCi0gKiBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KLSAqCi0gKiBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCi0gKiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlCi0gKiB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqCi0gKiBUaGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIG9yaWdpbmFsIGNvZGUgaXMgRGF2aWQgQS4gSGluZHMKLSAqIDxkYWhpbmRzIEFUIHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uICBQb3J0aW9ucyBjcmVhdGVkIGJ5IERhdmlkCi0gKiBBLiBIaW5kcyBhcmUgQ29weXJpZ2h0IChDKSAxOTk5IERhdmlkIEEuIEhpbmRzLiAgQWxsIFJpZ2h0cwotICogUmVzZXJ2ZWQuCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKLSAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIiksIGluCi0gKiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZCBvZiB0aGUKLSAqIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdGhlIHVzZSBvZiB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCi0gKiBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR1BMIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZSB5b3VyCi0gKiB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5Ci0gKiBkZWxldGluZyB0aGUgcHJvdmlzaW9ucyBhYm92ZSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKLSAqIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIEdQTC4gIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZQotICogcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCi0gKiB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLiAgKi8KLQotLyoKLSAqIFRPRE8KLSAqCW8gSGFuZGxlIGRlLWVuY2Fwc3VsYXRpb24gd2l0aGluIG5ldHdvcmsgbGF5ZXIsIHByb3ZpZGUgODAyLjExCi0gKgkgIGhlYWRlcnMgKHBhdGNoIGZyb20gVGhvbWFzICdEZW50JyBNaXJsYWNoZXIpCi0gKglvIEZpeCBwb3NzaWJsZSByYWNlcyBpbiBTUFkgaGFuZGxpbmcuCi0gKglvIERpc2Nvbm5lY3Qgd2lyZWxlc3MgZXh0ZW5zaW9ucyBmcm9tIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb24uCi0gKglvIChtYXliZSkgU29mdHdhcmUgV0VQIHN1cHBvcnQgKHBhdGNoIGZyb20gU3Rhbm8gTWVkdW5hKS4KLSAqCW8gKG1heWJlKSBVc2UgbXVsdGlwbGUgVHggYnVmZmVycyAtIGRyaXZlciBoYW5kbGluZyBxdWV1ZQotICoJICByYXRoZXIgdGhhbiBmaXJtd2FyZS4KLSAqLwotCi0vKiBMb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb246Ci0gKgotICogVGhlIGJhc2ljIHByaW5jaXBsZSBpcyB0aGF0IGV2ZXJ5dGhpbmcgaXMgc2VyaWFsaXplZCB0aHJvdWdoIGEKLSAqIHNpbmdsZSBzcGlubG9jaywgcHJpdi0+bG9jay4gIFRoZSBsb2NrIGlzIHVzZWQgaW4gdXNlciwgYmggYW5kIGlycQotICogY29udGV4dCwgc28gd2hlbiB0YWtlbiBvdXRzaWRlIGhhcmRpcnEgY29udGV4dCBpdCBzaG91bGQgYWx3YXlzIGJlCi0gKiB0YWtlbiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuICBUaGUgbG9jayBwcm90ZWN0cyBib3RoIHRoZQotICogaGFyZHdhcmUgYW5kIHRoZSBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLgotICoKLSAqIEFub3RoZXIgZmxhZywgcHJpdi0+aHdfdW5hdmFpbGFibGUgaW5kaWNhdGVzIHRoYXQgdGhlIGhhcmR3YXJlIGlzCi0gKiB1bmF2YWlsYWJsZSBmb3IgYW4gZXh0ZW5kZWQgcGVyaW9kIG9mIHRpbWUgKGUuZy4gc3VzcGVuZGVkLCBvciBpbgotICogdGhlIG1pZGRsZSBvZiBhIGhhcmQgcmVzZXQpLiAgVGhpcyBmbGFnIGlzIHByb3RlY3RlZCBieSB0aGUKLSAqIHNwaW5sb2NrLiAgQWxsIGNvZGUgd2hpY2ggdG91Y2hlcyB0aGUgaGFyZHdhcmUgc2hvdWxkIGNoZWNrIHRoZQotICogZmxhZyBhZnRlciB0YWtpbmcgdGhlIGxvY2ssIGFuZCBpZiBpdCBpcyBzZXQsIGdpdmUgdXAgb24gd2hhdGV2ZXIKLSAqIHRoZXkgYXJlIGRvaW5nIGFuZCBkcm9wIHRoZSBsb2NrIGFnYWluLiAgVGhlIG9yaW5vY29fbG9jaygpCi0gKiBmdW5jdGlvbiBoYW5kbGVzIHRoaXMgKGl0IHVubG9ja3MgYW5kIHJldHVybnMgLUVCVVNZIGlmCi0gKiBod191bmF2YWlsYWJsZSBpcyBub24temVybykuCi0gKi8KLQotI2RlZmluZSBEUklWRVJfTkFNRSAib3Jpbm9jbyIKLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+Ci0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0KLSNpbmNsdWRlICJoZXJtZXNfcmlkLmgiCi0jaW5jbHVkZSAiaGVybWVzX2RsZC5oIgotI2luY2x1ZGUgIm9yaW5vY28uaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTW9kdWxlIGluZm9ybWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1NT0RVTEVfQVVUSE9SKCJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiAmIERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBMdWNlbnQgT3Jpbm9jbywgUHJpc20gSUkgYmFzZWQgYW5kIHNpbWlsYXIgd2lyZWxlc3MgY2FyZHMiKTsKLU1PRFVMRV9MSUNFTlNFKCJEdWFsIE1QTC9HUEwiKTsKLQotLyogTGV2ZWwgb2YgZGVidWdnaW5nLiBVc2VkIGluIHRoZSBtYWNyb3MgaW4gb3Jpbm9jby5oICovCi0jaWZkZWYgT1JJTk9DT19ERUJVRwotaW50IG9yaW5vY29fZGVidWcgPSBPUklOT0NPX0RFQlVHOwotbW9kdWxlX3BhcmFtKG9yaW5vY29fZGVidWcsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG9yaW5vY29fZGVidWcsICJEZWJ1ZyBsZXZlbCIpOwotRVhQT1JUX1NZTUJPTChvcmlub2NvX2RlYnVnKTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IHN1cHByZXNzX2xpbmtzdGF0dXM7IC8qID0gMCAqLwotbW9kdWxlX3BhcmFtKHN1cHByZXNzX2xpbmtzdGF0dXMsIGJvb2wsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhzdXBwcmVzc19saW5rc3RhdHVzLCAiRG9uJ3QgbG9nIGxpbmsgc3RhdHVzIGNoYW5nZXMiKTsKLXN0YXRpYyBpbnQgaWdub3JlX2Rpc2Nvbm5lY3Q7IC8qID0gMCAqLwotbW9kdWxlX3BhcmFtKGlnbm9yZV9kaXNjb25uZWN0LCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZ25vcmVfZGlzY29ubmVjdCwgIkRvbid0IHJlcG9ydCBsb3N0IGxpbmsgdG8gdGhlIG5ldHdvcmsgbGF5ZXIiKTsKLQotc3RhdGljIGludCBmb3JjZV9tb25pdG9yOyAvKiA9IDAgKi8KLW1vZHVsZV9wYXJhbShmb3JjZV9tb25pdG9yLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9tb25pdG9yLCAiQWxsb3cgbW9uaXRvciBtb2RlIGZvciBhbGwgZmlybXdhcmUgdmVyc2lvbnMiKTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQ29tcGlsZSB0aW1lIGNvbmZpZ3VyYXRpb24gYW5kIGNvbXBhdGliaWxpdHkgc3R1ZmYgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBXZSBkbyB0aGlzIHRoaXMgd2F5IHRvIGF2b2lkIGlmZGVmcyBpbiB0aGUgYWN0dWFsIGNvZGUgKi8KLSNpZmRlZiBXSVJFTEVTU19TUFkKLSNkZWZpbmUgU1BZX05VTUJFUihwcml2KQkocHJpdi0+c3B5X2RhdGEuc3B5X251bWJlcikKLSNlbHNlCi0jZGVmaW5lIFNQWV9OVU1CRVIocHJpdikJMAotI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJbnRlcm5hbCBjb25zdGFudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIDgwMi4yIExMQy9TTkFQIGhlYWRlciB1c2VkIGZvciBFdGhlcm5ldCBlbmNhcHN1bGF0aW9uIG92ZXIgODAyLjExICovCi1zdGF0aWMgY29uc3QgdTggZW5jYXBzX2hkcltdID0gezB4YWEsIDB4YWEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDB9OwotI2RlZmluZSBFTkNBUFNfT1ZFUkhFQUQJCShzaXplb2YoZW5jYXBzX2hkcikgKyAyKQotCi0jZGVmaW5lIE9SSU5PQ09fTUlOX01UVQkJMjU2Ci0jZGVmaW5lIE9SSU5PQ09fTUFYX01UVQkJKElFRUU4MDIxMV9NQVhfREFUQV9MRU4gLSBFTkNBUFNfT1ZFUkhFQUQpCi0KLSNkZWZpbmUgU1lNQk9MX01BWF9WRVJfTEVOCSgxNCkKLSNkZWZpbmUgVVNFUl9CQVAJCTAKLSNkZWZpbmUgSVJRX0JBUAkJCTEKLSNkZWZpbmUgTUFYX0lSUUxPT1BTX1BFUl9JUlEJMTAKLSNkZWZpbmUgTUFYX0lSUUxPT1BTX1BFUl9KSUZGWQkoMjAwMDAvSFopIC8qIEJhc2VkIG9uIGEgZ3Vlc3RpbWF0ZSBvZgotCQkJCQkgICAgKiBob3cgbWFueSBldmVudHMgdGhlCi0JCQkJCSAgICAqIGRldmljZSBjb3VsZAotCQkJCQkgICAgKiBsZWdpdGltYXRlbHkgZ2VuZXJhdGUgKi8KLSNkZWZpbmUgU01BTExfS0VZX1NJWkUJCTUKLSNkZWZpbmUgTEFSR0VfS0VZX1NJWkUJCTEzCi0jZGVmaW5lIFRYX05JQ0JVRl9TSVpFX0JVRwkxNTg1CQkvKiBCdWcgaW4gU3ltYm9sIGZpcm13YXJlICovCi0KLSNkZWZpbmUgRFVNTVlfRklECQkweEZGRkYKLQotLyojZGVmaW5lIE1BWF9NVUxUSUNBU1QocHJpdikJKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSA/IFwKLSAgSEVSTUVTX01BWF9NVUxUSUNBU1QgOiAwKSovCi0jZGVmaW5lIE1BWF9NVUxUSUNBU1QocHJpdikJKEhFUk1FU19NQVhfTVVMVElDQVNUKQotCi0jZGVmaW5lIE9SSU5PQ09fSU5URU4JIAkoSEVSTUVTX0VWX1JYIHwgSEVSTUVTX0VWX0FMTE9DIFwKLQkJCQkgfCBIRVJNRVNfRVZfVFggfCBIRVJNRVNfRVZfVFhFWEMgXAotCQkJCSB8IEhFUk1FU19FVl9XVEVSUiB8IEhFUk1FU19FVl9JTkZPIFwKLQkJCQkgfCBIRVJNRVNfRVZfSU5GRFJPUCApCi0KLSNkZWZpbmUgTUFYX1JJRF9MRU4gMTAyNAotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIG9yaW5vY29faGFuZGxlcl9kZWY7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9yaW5vY29fZXRodG9vbF9vcHM7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERhdGEgdGFibGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogVGhlIGZyZXF1ZW5jeSBvZiBlYWNoIGNoYW5uZWwgaW4gTUh6ICovCi1zdGF0aWMgY29uc3QgbG9uZyBjaGFubmVsX2ZyZXF1ZW5jeVtdID0gewotCTI0MTIsIDI0MTcsIDI0MjIsIDI0MjcsIDI0MzIsIDI0MzcsIDI0NDIsCi0JMjQ0NywgMjQ1MiwgMjQ1NywgMjQ2MiwgMjQ2NywgMjQ3MiwgMjQ4NAotfTsKLSNkZWZpbmUgTlVNX0NIQU5ORUxTIEFSUkFZX1NJWkUoY2hhbm5lbF9mcmVxdWVuY3kpCi0KLS8qIFRoaXMgdGFibGVzIGdpdmVzIHRoZSBhY3R1YWwgbWVhbmluZ3Mgb2YgdGhlIGJpdHJhdGUgSURzIHJldHVybmVkCi0gKiBieSB0aGUgZmlybXdhcmUuICovCi1zdGF0aWMgc3RydWN0IHsKLQlpbnQgYml0cmF0ZTsgLyogaW4gMTAwcyBvZiBraWxvYml0cyAqLwotCWludCBhdXRvbWF0aWM7Ci0JdTE2IGFnZXJlX3R4cmF0ZWN0cmw7Ci0JdTE2IGludGVyc2lsX3R4cmF0ZWN0cmw7Ci19IGJpdHJhdGVfdGFibGVbXSA9IHsKLQl7MTEwLCAxLCAgMywgMTV9LCAvKiBFbnRyeSAwIGlzIHRoZSBkZWZhdWx0ICovCi0JezEwLCAgMCwgIDEsICAxfSwKLQl7MTAsICAxLCAgMSwgIDF9LAotCXsyMCwgIDAsICAyLCAgMn0sCi0JezIwLCAgMSwgIDYsICAzfSwKLQl7NTUsICAwLCAgNCwgIDR9LAotCXs1NSwgIDEsICA3LCAgN30sCi0JezExMCwgMCwgIDUsICA4fSwKLX07Ci0jZGVmaW5lIEJJVFJBVEVfVEFCTEVfU0laRSBBUlJBWV9TSVpFKGJpdHJhdGVfdGFibGUpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIERhdGEgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQmVnaW5uaW5nIG9mIHRoZSBUeCBkZXNjcmlwdG9yLCB1c2VkIGluIFR4RXhjIGhhbmRsaW5nICovCi1zdHJ1Y3QgaGVybWVzX3R4ZXhjX2RhdGEgewotCXN0cnVjdCBoZXJtZXNfdHhfZGVzY3JpcHRvciBkZXNjOwotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKiBSeCBmcmFtZSBoZWFkZXIgZXhjZXB0IGNvbXBhdGliaWxpdHkgODAyLjMgaGVhZGVyICovCi1zdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3IgewotCS8qIENvbnRyb2wgKi8KLQlfX2xlMTYgc3RhdHVzOwotCV9fbGUzMiB0aW1lOwotCXU4IHNpbGVuY2U7Ci0JdTggc2lnbmFsOwotCXU4IHJhdGU7Ci0JdTggcnhmbG93OwotCV9fbGUzMiByZXNlcnZlZDsKLQotCS8qIDgwMi4xMSBoZWFkZXIgKi8KLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLQl1OCBhZGRyNFtFVEhfQUxFTl07Ci0KLQkvKiBEYXRhIGxlbmd0aCAqLwotCV9fbGUxNiBkYXRhX2xlbjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBGdW5jdGlvbiBwcm90b3R5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgX19vcmlub2NvX3Byb2dyYW1fcmlkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIE1pY2hhZWwgTUlDIGNyeXB0byBzZXR1cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgTUlDSEFFTF9NSUNfTEVOIDgKLXN0YXRpYyBpbnQgb3Jpbm9jb19taWNfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCXByaXYtPnR4X3RmbV9taWMgPSBjcnlwdG9fYWxsb2NfaGFzaCgibWljaGFlbF9taWMiLCAwLCAwKTsKLQlpZiAoSVNfRVJSKHByaXYtPnR4X3RmbV9taWMpKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJvcmlub2NvX21pY19pbml0OiBjb3VsZCBub3QgYWxsb2NhdGUgIgotCQkgICAgICAgImNyeXB0byBBUEkgbWljaGFlbF9taWNcbiIpOwotCQlwcml2LT50eF90Zm1fbWljID0gTlVMTDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcHJpdi0+cnhfdGZtX21pYyA9IGNyeXB0b19hbGxvY19oYXNoKCJtaWNoYWVsX21pYyIsIDAsIDApOwotCWlmIChJU19FUlIocHJpdi0+cnhfdGZtX21pYykpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIm9yaW5vY29fbWljX2luaXQ6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCi0JCSAgICAgICAiY3J5cHRvIEFQSSBtaWNoYWVsX21pY1xuIik7Ci0JCXByaXYtPnJ4X3RmbV9taWMgPSBOVUxMOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19taWNfZnJlZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWlmIChwcml2LT50eF90Zm1fbWljKQotCQljcnlwdG9fZnJlZV9oYXNoKHByaXYtPnR4X3RmbV9taWMpOwotCWlmIChwcml2LT5yeF90Zm1fbWljKQotCQljcnlwdG9fZnJlZV9oYXNoKHByaXYtPnJ4X3RmbV9taWMpOwotfQotCi1zdGF0aWMgaW50IG1pY2hhZWxfbWljKHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX21pY2hhZWwsIHU4ICprZXksCi0JCSAgICAgICB1OCAqZGEsIHU4ICpzYSwgdTggcHJpb3JpdHksCi0JCSAgICAgICB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQotewotCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07Ci0JdTggaGRyW0VUSF9ITEVOICsgMl07IC8qIHNpemUgb2YgaGVhZGVyICsgcGFkZGluZyAqLwotCi0JaWYgKHRmbV9taWNoYWVsID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWljaGFlbF9taWM6IHRmbV9taWNoYWVsID09IE5VTExcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogQ29weSBoZWFkZXIgaW50byBidWZmZXIuIFdlIG5lZWQgdGhlIHBhZGRpbmcgb24gdGhlIGVuZCB6ZXJvZWQgKi8KLQltZW1jcHkoJmhkclswXSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkoJmhkcltFVEhfQUxFTl0sIHNhLCBFVEhfQUxFTik7Ci0JaGRyW0VUSF9BTEVOKjJdID0gcHJpb3JpdHk7Ci0JaGRyW0VUSF9BTEVOKjIrMV0gPSAwOwotCWhkcltFVEhfQUxFTioyKzJdID0gMDsKLQloZHJbRVRIX0FMRU4qMiszXSA9IDA7Ci0KLQkvKiBVc2Ugc2NhdHRlciBnYXRoZXIgdG8gTUlDIGhlYWRlciBhbmQgZGF0YSBpbiBvbmUgZ28gKi8KLQlzZ19pbml0X3RhYmxlKHNnLCAyKTsKLQlzZ19zZXRfYnVmKCZzZ1swXSwgaGRyLCBzaXplb2YoaGRyKSk7Ci0Jc2dfc2V0X2J1Zigmc2dbMV0sIGRhdGEsIGRhdGFfbGVuKTsKLQotCWlmIChjcnlwdG9faGFzaF9zZXRrZXkodGZtX21pY2hhZWwsIGtleSwgTUlDX0tFWUxFTikpCi0JCXJldHVybiAtMTsKLQotCWRlc2MudGZtID0gdGZtX21pY2hhZWw7Ci0JZGVzYy5mbGFncyA9IDA7Ci0JcmV0dXJuIGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgc2csIGRhdGFfbGVuICsgc2l6ZW9mKGhkciksCi0JCQkJICBtaWMpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcG9ydF90eXBlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0Jc3dpdGNoIChwcml2LT5pd19tb2RlKSB7Ci0JY2FzZSBJV19NT0RFX0lORlJBOgotCQlwcml2LT5wb3J0X3R5cGUgPSAxOwotCQlwcml2LT5jcmVhdGVpYnNzID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19NT0RFX0FESE9DOgotCQlpZiAocHJpdi0+cHJlZmVyX3BvcnQzKSB7Ci0JCQlwcml2LT5wb3J0X3R5cGUgPSAzOwotCQkJcHJpdi0+Y3JlYXRlaWJzcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlwcml2LT5wb3J0X3R5cGUgPSBwcml2LT5pYnNzX3BvcnQ7Ci0JCQlwcml2LT5jcmVhdGVpYnNzID0gMTsKLQkJfQotCQlicmVhazsKLQljYXNlIElXX01PREVfTU9OSVRPUjoKLQkJcHJpdi0+cG9ydF90eXBlID0gMzsKLQkJcHJpdi0+Y3JlYXRlaWJzcyA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgcHJpdi0+aXdfbW9kZSBpbiBzZXRfcG9ydF90eXBlKClcbiIsCi0JCSAgICAgICBwcml2LT5uZGV2LT5uYW1lKTsKLQl9Ci19Ci0KLSNkZWZpbmUgT1JJTk9DT19NQVhfQlNTX0NPVU5UCTY0Ci1zdGF0aWMgaW50IG9yaW5vY29fYnNzX2RhdGFfYWxsb2NhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlpZiAocHJpdi0+YnNzX3hic3NfZGF0YSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAocHJpdi0+aGFzX2V4dF9zY2FuKQotCQlwcml2LT5ic3NfeGJzc19kYXRhID0ga3phbGxvYyhPUklOT0NPX01BWF9CU1NfQ09VTlQgKgotCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHhic3NfZWxlbWVudCksCi0JCQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWVsc2UKLQkJcHJpdi0+YnNzX3hic3NfZGF0YSA9IGt6YWxsb2MoT1JJTk9DT19NQVhfQlNTX0NPVU5UICoKLQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBic3NfZWxlbWVudCksCi0JCQkJCSAgICAgIEdGUF9LRVJORUwpOwotCi0JaWYgKCFwcml2LT5ic3NfeGJzc19kYXRhKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBiZWFjb25zIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19ic3NfZGF0YV9mcmVlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0Ja2ZyZWUocHJpdi0+YnNzX3hic3NfZGF0YSk7Ci0JcHJpdi0+YnNzX3hic3NfZGF0YSA9IE5VTEw7Ci19Ci0KLSNkZWZpbmUgUFJJVl9CU1MJKChzdHJ1Y3QgYnNzX2VsZW1lbnQgKilwcml2LT5ic3NfeGJzc19kYXRhKQotI2RlZmluZSBQUklWX1hCU1MJKChzdHJ1Y3QgeGJzc19lbGVtZW50ICopcHJpdi0+YnNzX3hic3NfZGF0YSkKLXN0YXRpYyB2b2lkIG9yaW5vY29fYnNzX2RhdGFfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWludCBpOwotCi0JSU5JVF9MSVNUX0hFQUQoJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCUlOSVRfTElTVF9IRUFEKCZwcml2LT5ic3NfbGlzdCk7Ci0JaWYgKHByaXYtPmhhc19leHRfc2NhbikKLQkJZm9yIChpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0JTU19DT1VOVDsgaSsrKQotCQkJbGlzdF9hZGRfdGFpbCgmKFBSSVZfWEJTU1tpXS5saXN0KSwKLQkJCQkgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7Ci0JZWxzZQotCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfQlNTX0NPVU5UOyBpKyspCi0JCQlsaXN0X2FkZF90YWlsKCYoUFJJVl9CU1NbaV0ubGlzdCksCi0JCQkJICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOwotCi19Ci0KLXN0YXRpYyBpbmxpbmUgdTggKm9yaW5vY29fZ2V0X2llKHU4ICpkYXRhLCBzaXplX3QgbGVuLAotCQkJCSBlbnVtIGllZWU4MDIxMV9laWQgZWlkKQotewotCXU4ICpwID0gZGF0YTsKLQl3aGlsZSAoKHAgKyAyKSA8IChkYXRhICsgbGVuKSkgewotCQlpZiAocFswXSA9PSBlaWQpCi0JCQlyZXR1cm4gcDsKLQkJcCArPSBwWzFdICsgMjsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLSNkZWZpbmUgV1BBX09VSV9UWVBFCSJceDAwXHg1MFx4RjJceDAxIgotI2RlZmluZSBXUEFfU0VMRUNUT1JfTEVOIDQKLXN0YXRpYyBpbmxpbmUgdTggKm9yaW5vY29fZ2V0X3dwYV9pZSh1OCAqZGF0YSwgc2l6ZV90IGxlbikKLXsKLQl1OCAqcCA9IGRhdGE7Ci0Jd2hpbGUgKChwICsgMiArIFdQQV9TRUxFQ1RPUl9MRU4pIDwgKGRhdGEgKyBsZW4pKSB7Ci0JCWlmICgocFswXSA9PSBXTEFOX0VJRF9HRU5FUklDKSAmJgotCQkgICAgKG1lbWNtcCgmcFsyXSwgV1BBX09VSV9UWVBFLCBXUEFfU0VMRUNUT1JfTEVOKSA9PSAwKSkKLQkJCXJldHVybiBwOwotCQlwICs9IHBbMV0gKyAyOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBEb3dubG9hZCBmdW5jdGlvbmFsaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBmd19pbmZvIHsKLQljaGFyICpwcmlfZnc7Ci0JY2hhciAqc3RhX2Z3OwotCWNoYXIgKmFwX2Z3OwotCXUzMiBwZGFfYWRkcjsKLQl1MTYgcGRhX3NpemU7Ci19OwotCi1jb25zdCBzdGF0aWMgc3RydWN0IGZ3X2luZm8gb3Jpbm9jb19md1tdID0gewotCXsgTlVMTCwgImFnZXJlX3N0YV9mdy5iaW4iLCAiYWdlcmVfYXBfZncuYmluIiwgMHgwMDM5MDAwMCwgMTAwMCB9LAotCXsgTlVMTCwgInByaXNtX3N0YV9mdy5iaW4iLCAicHJpc21fYXBfZncuYmluIiwgMCwgMTAyNCB9LAotCXsgInN5bWJvbF9zcDI0dF9wcmltX2Z3IiwgInN5bWJvbF9zcDI0dF9zZWNfZnciLCBOVUxMLCAweDAwMDAzMTAwLCA1MTIgfQotfTsKLQotLyogU3RydWN0dXJlIHVzZWQgdG8gYWNjZXNzIGZpZWxkcyBpbiBGVwotICogTWFrZSBzdXJlIExFIGRlY29kaW5nIG1hY3JvcyBhcmUgdXNlZAotICovCi1zdHJ1Y3Qgb3Jpbm9jb19md19oZWFkZXIgewotCWNoYXIgaGRyX3ZlcnNbNl07ICAgICAgIC8qIEFTQ0lJIHN0cmluZyBmb3IgaGVhZGVyIHZlcnNpb24gKi8KLQlfX2xlMTYgaGVhZGVyc2l6ZTsgICAgICAvKiBUb3RhbCBsZW5ndGggb2YgaGVhZGVyICovCi0JX19sZTMyIGVudHJ5X3BvaW50OyAgICAgLyogTklDIGVudHJ5IHBvaW50ICovCi0JX19sZTMyIGJsb2NrczsgICAgICAgICAgLyogTnVtYmVyIG9mIGJsb2NrcyB0byBwcm9ncmFtICovCi0JX19sZTMyIGJsb2NrX29mZnNldDsgICAgLyogT2Zmc2V0IG9mIGJsb2NrIGRhdGEgZnJvbSBlb2YgaGVhZGVyICovCi0JX19sZTMyIHBkcl9vZmZzZXQ7ICAgICAgLyogT2Zmc2V0IHRvIFBEUiBkYXRhIGZyb20gZW9mIGhlYWRlciAqLwotCV9fbGUzMiBwcmlfb2Zmc2V0OyAgICAgIC8qIE9mZnNldCB0byBwcmltYXJ5IHBsdWcgZGF0YSAqLwotCV9fbGUzMiBjb21wYXRfb2Zmc2V0OyAgIC8qIE9mZnNldCB0byBjb21wYXRpYmlsaXR5IGRhdGEqLwotCWNoYXIgc2lnbmF0dXJlWzBdOyAgICAgIC8qIEZXIHNpZ25hdHVyZSBsZW5ndGggaGVhZGVyc2l6ZS0yMCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIERvd25sb2FkIGVpdGhlciBTVEEgb3IgQVAgZmlybXdhcmUgaW50byB0aGUgY2FyZC4gKi8KLXN0YXRpYyBpbnQKLW9yaW5vY29fZGxfZmlybXdhcmUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJICAgIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdywKLQkJICAgIGludCBhcCkKLXsKLQkvKiBQbHVnIERhdGEgQXJlYSAoUERBKSAqLwotCV9fbGUxNiAqcGRhOwotCi0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7Ci0JY29uc3Qgc3RydWN0IG9yaW5vY29fZndfaGVhZGVyICpoZHI7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZmlyc3RfYmxvY2s7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqZW5kOwotCWNvbnN0IGNoYXIgKmZpcm13YXJlOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCWludCBlcnIgPSAwOwotCi0JcGRhID0ga3phbGxvYyhmdy0+cGRhX3NpemUsIEdGUF9LRVJORUwpOwotCWlmICghcGRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmIChhcCkKLQkJZmlybXdhcmUgPSBmdy0+YXBfZnc7Ci0JZWxzZQotCQlmaXJtd2FyZSA9IGZ3LT5zdGFfZnc7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEF0dGVtcHRpbmcgdG8gZG93bmxvYWQgZmlybXdhcmUgJXNcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgZmlybXdhcmUpOwotCi0JLyogUmVhZCBjdXJyZW50IHBsdWcgZGF0YSAqLwotCWVyciA9IGhlcm1lc19yZWFkX3BkYShodywgcGRhLCBmdy0+cGRhX2FkZHIsIGZ3LT5wZGFfc2l6ZSwgMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWFkIFBEQSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCWlmIChlcnIpCi0JCWdvdG8gZnJlZTsKLQotCWlmICghcHJpdi0+Y2FjaGVkX2Z3KSB7Ci0JCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmaXJtd2FyZSwgcHJpdi0+ZGV2KTsKLQotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZmluZCBmaXJtd2FyZSAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGZpcm13YXJlKTsKLQkJCWVyciA9IC1FTk9FTlQ7Ci0JCQlnb3RvIGZyZWU7Ci0JCX0KLQl9IGVsc2UKLQkJZndfZW50cnkgPSBwcml2LT5jYWNoZWRfZnc7Ci0KLQloZHIgPSAoY29uc3Qgc3RydWN0IG9yaW5vY29fZndfaGVhZGVyICopIGZ3X2VudHJ5LT5kYXRhOwotCi0JLyogRW5hYmxlIGF1eCBwb3J0IHRvIGFsbG93IHByb2dyYW1taW5nICovCi0JZXJyID0gaGVybWVzaV9wcm9ncmFtX2luaXQoaHcsIGxlMzJfdG9fY3B1KGhkci0+ZW50cnlfcG9pbnQpKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gaW5pdCByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCWlmIChlcnIgIT0gMCkKLQkJZ290byBhYm9ydDsKLQotCS8qIFByb2dyYW0gZGF0YSAqLwotCWZpcnN0X2Jsb2NrID0gKGZ3X2VudHJ5LT5kYXRhICsKLQkJICAgICAgIGxlMTZfdG9fY3B1KGhkci0+aGVhZGVyc2l6ZSkgKwotCQkgICAgICAgbGUzMl90b19jcHUoaGRyLT5ibG9ja19vZmZzZXQpKTsKLQllbmQgPSBmd19lbnRyeS0+ZGF0YSArIGZ3X2VudHJ5LT5zaXplOwotCi0JZXJyID0gaGVybWVzX3Byb2dyYW0oaHcsIGZpcnN0X2Jsb2NrLCBlbmQpOwotCXByaW50ayhLRVJOX0RFQlVHICIlczogUHJvZ3JhbSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCWlmIChlcnIgIT0gMCkKLQkJZ290byBhYm9ydDsKLQotCS8qIFVwZGF0ZSBwcm9kdWN0aW9uIGRhdGEgKi8KLQlmaXJzdF9ibG9jayA9IChmd19lbnRyeS0+ZGF0YSArCi0JCSAgICAgICBsZTE2X3RvX2NwdShoZHItPmhlYWRlcnNpemUpICsKLQkJICAgICAgIGxlMzJfdG9fY3B1KGhkci0+cGRyX29mZnNldCkpOwotCi0JZXJyID0gaGVybWVzX2FwcGx5X3BkYV93aXRoX2RlZmF1bHRzKGh3LCBmaXJzdF9ibG9jaywgcGRhKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFwcGx5IFBEQSByZXR1cm5lZCAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCWlmIChlcnIpCi0JCWdvdG8gYWJvcnQ7Ci0KLQkvKiBUZWxsIGNhcmQgd2UndmUgZmluaXNoZWQgKi8KLQllcnIgPSBoZXJtZXNpX3Byb2dyYW1fZW5kKGh3KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFByb2dyYW0gZW5kIHJldHVybmVkICVkXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JaWYgKGVyciAhPSAwKQotCQlnb3RvIGFib3J0OwotCi0JLyogQ2hlY2sgaWYgd2UncmUgcnVubmluZyAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlczogaGVybWVzX3ByZXNlbnQgcmV0dXJuZWQgJWRcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgaGVybWVzX3ByZXNlbnQoaHcpKTsKLQotYWJvcnQ6Ci0JLyogSWYgd2UgcmVxdWVzdGVkIHRoZSBmaXJtd2FyZSwgcmVsZWFzZSBpdC4gKi8KLQlpZiAoIXByaXYtPmNhY2hlZF9mdykKLQkJcmVsZWFzZV9maXJtd2FyZShmd19lbnRyeSk7Ci0KLWZyZWU6Ci0Ja2ZyZWUocGRhKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKiBFbmQgbWFya2VycyAqLwotI2RlZmluZSBURVhUX0VORAkweDFBCQkvKiBFbmQgb2YgdGV4dCBoZWFkZXIgKi8KLQotLyoKLSAqIFByb2Nlc3MgYSBmaXJtd2FyZSBpbWFnZSAtIHN0b3AgdGhlIGNhcmQsIGxvYWQgdGhlIGZpcm13YXJlLCByZXNldAotICogdGhlIGNhcmQgYW5kIG1ha2Ugc3VyZSBpdCByZXNwb25kcy4gIEZvciB0aGUgc2Vjb25kYXJ5IGZpcm13YXJlIHRha2UKLSAqIGNhcmUgb2YgdGhlIFBEQSAtIHJlYWQgaXQgYW5kIHRoZW4gd3JpdGUgaXQgb24gdG9wIG9mIHRoZSBmaXJtd2FyZS4KLSAqLwotc3RhdGljIGludAotc3ltYm9sX2RsX2ltYWdlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdywKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqaW1hZ2UsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVuZCwKLQkJaW50IHNlY29uZGFyeSkKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IHJldCA9IDA7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqcHRyOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZpcnN0X2Jsb2NrOwotCi0JLyogUGx1ZyBEYXRhIEFyZWEgKFBEQSkgKi8KLQlfX2xlMTYgKnBkYSA9IE5VTEw7Ci0KLQkvKiBCaW5hcnkgYmxvY2sgYmVnaW5zIGFmdGVyIHRoZSAweDFBIG1hcmtlciAqLwotCXB0ciA9IGltYWdlOwotCXdoaWxlICgqcHRyKysgIT0gVEVYVF9FTkQpOwotCWZpcnN0X2Jsb2NrID0gcHRyOwotCi0JLyogUmVhZCB0aGUgUERBIGZyb20gRUVQUk9NICovCi0JaWYgKHNlY29uZGFyeSkgewotCQlwZGEgPSBremFsbG9jKGZ3LT5wZGFfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGRhKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJcmV0ID0gaGVybWVzX3JlYWRfcGRhKGh3LCBwZGEsIGZ3LT5wZGFfYWRkciwgZnctPnBkYV9zaXplLCAxKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZnJlZTsKLQl9Ci0KLQkvKiBTdG9wIHRoZSBmaXJtd2FyZSwgc28gdGhhdCBpdCBjYW4gYmUgc2FmZWx5IHJld3JpdHRlbiAqLwotCWlmIChwcml2LT5zdG9wX2Z3KSB7Ci0JCXJldCA9IHByaXYtPnN0b3BfZncocHJpdiwgMSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGZyZWU7Ci0JfQotCi0JLyogUHJvZ3JhbSB0aGUgYWRhcHRlciB3aXRoIG5ldyBmaXJtd2FyZSAqLwotCXJldCA9IGhlcm1lc19wcm9ncmFtKGh3LCBmaXJzdF9ibG9jaywgZW5kKTsKLQlpZiAocmV0KQotCQlnb3RvIGZyZWU7Ci0KLQkvKiBXcml0ZSB0aGUgUERBIHRvIHRoZSBhZGFwdGVyICovCi0JaWYgKHNlY29uZGFyeSkgewotCQlzaXplX3QgbGVuID0gaGVybWVzX2Jsb2Nrc19sZW5ndGgoZmlyc3RfYmxvY2spOwotCQlwdHIgPSBmaXJzdF9ibG9jayArIGxlbjsKLQkJcmV0ID0gaGVybWVzX2FwcGx5X3BkYShodywgcHRyLCBwZGEpOwotCQlrZnJlZShwZGEpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvKiBSdW4gdGhlIGZpcm13YXJlICovCi0JaWYgKHByaXYtPnN0b3BfZncpIHsKLQkJcmV0ID0gcHJpdi0+c3RvcF9mdyhwcml2LCAwKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCi0JLyogUmVzZXQgaGVybWVzIGNoaXAgYW5kIG1ha2Ugc3VyZSBpdCByZXNwb25kcyAqLwotCXJldCA9IGhlcm1lc19pbml0KGh3KTsKLQotCS8qIGhlcm1lc19yZXNldCgpIHNob3VsZCByZXR1cm4gMCB3aXRoIHRoZSBzZWNvbmRhcnkgZmlybXdhcmUgKi8KLQlpZiAoc2Vjb25kYXJ5ICYmIHJldCAhPSAwKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIEFuZCB0aGlzIHNob3VsZCB3b3JrIHdpdGggYW55IGZpcm13YXJlICovCi0JaWYgKCFoZXJtZXNfcHJlc2VudChodykpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0dXJuIDA7Ci0KLWZyZWU6Ci0Ja2ZyZWUocGRhKTsKLQlyZXR1cm4gcmV0OwotfQotCi0KLS8qCi0gKiBEb3dubG9hZCB0aGUgZmlybXdhcmUgaW50byB0aGUgY2FyZCwgdGhpcyBhbHNvIGRvZXMgYSBQQ01DSUEgc29mdAotICogcmVzZXQgb24gdGhlIGNhcmQsIHRvIG1ha2Ugc3VyZSBpdCdzIGluIGEgc2FuZSBzdGF0ZS4KLSAqLwotc3RhdGljIGludAotc3ltYm9sX2RsX2Zpcm13YXJlKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCSAgIGNvbnN0IHN0cnVjdCBmd19pbmZvICpmdykKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlpbnQgcmV0OwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnk7Ci0KLQlpZiAoIXByaXYtPmNhY2hlZF9wcmlfZncpIHsKLQkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdy0+cHJpX2Z3LCBwcml2LT5kZXYpICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBmaW5kIGZpcm13YXJlOiAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGZ3LT5wcmlfZncpOwotCQkJcmV0dXJuIC1FTk9FTlQ7Ci0JCX0KLQl9IGVsc2UKLQkJZndfZW50cnkgPSBwcml2LT5jYWNoZWRfcHJpX2Z3OwotCi0JLyogTG9hZCBwcmltYXJ5IGZpcm13YXJlICovCi0JcmV0ID0gc3ltYm9sX2RsX2ltYWdlKHByaXYsIGZ3LCBmd19lbnRyeS0+ZGF0YSwKLQkJCSAgICAgIGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemUsIDApOwotCi0JaWYgKCFwcml2LT5jYWNoZWRfcHJpX2Z3KQotCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFByaW1hcnkgZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlpZiAoIXByaXYtPmNhY2hlZF9mdykgewotCQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3LT5zdGFfZncsIHByaXYtPmRldikgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGZpbmQgZmlybXdhcmU6ICVzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZnctPnN0YV9mdyk7Ci0JCQlyZXR1cm4gLUVOT0VOVDsKLQkJfQotCX0gZWxzZQotCQlmd19lbnRyeSA9IHByaXYtPmNhY2hlZF9mdzsKLQotCS8qIExvYWQgc2Vjb25kYXJ5IGZpcm13YXJlICovCi0JcmV0ID0gc3ltYm9sX2RsX2ltYWdlKHByaXYsIGZ3LCBmd19lbnRyeS0+ZGF0YSwKLQkJCSAgICAgIGZ3X2VudHJ5LT5kYXRhICsgZndfZW50cnktPnNpemUsIDEpOwotCWlmICghcHJpdi0+Y2FjaGVkX2Z3KQotCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFNlY29uZGFyeSBmaXJtd2FyZSBkb3dubG9hZCBmYWlsZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19kb3dubG9hZChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWludCBlcnIgPSAwOwotCS8qIFJlbG9hZCBmaXJtd2FyZSAqLwotCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRToKLQkJLyogY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiAqLwotCQllcnIgPSBvcmlub2NvX2RsX2Zpcm13YXJlKHByaXYsCi0JCQkJCSAgJm9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0sIDApOwotCQlicmVhazsKLQotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6Ci0JCWVyciA9IHN5bWJvbF9kbF9maXJtd2FyZShwcml2LAotCQkJCQkgJm9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0pOwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6Ci0JCWJyZWFrOwotCX0KLQkvKiBUT0RPOiBpZiB3ZSBmYWlsIHdlIHByb2JhYmx5IG5lZWQgdG8gcmVpbml0aWFsaXNlCi0JICogdGhlIGRyaXZlciAqLwotCi0JcmV0dXJuIGVycjsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKLXN0YXRpYyB2b2lkIG9yaW5vY29fY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGFwKQotewotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZndfZW50cnkgPSBOVUxMOwotCWNvbnN0IGNoYXIgKnByaV9mdzsKLQljb25zdCBjaGFyICpmdzsKLQotCXByaV9mdyA9IG9yaW5vY29fZndbcHJpdi0+ZmlybXdhcmVfdHlwZV0ucHJpX2Z3OwotCWlmIChhcCkKLQkJZncgPSBvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLmFwX2Z3OwotCWVsc2UKLQkJZncgPSBvcmlub2NvX2Z3W3ByaXYtPmZpcm13YXJlX3R5cGVdLnN0YV9mdzsKLQotCWlmIChwcmlfZncpIHsKLQkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBwcmlfZncsIHByaXYtPmRldikgPT0gMCkKLQkJCXByaXYtPmNhY2hlZF9wcmlfZncgPSBmd19lbnRyeTsKLQl9Ci0KLQlpZiAoZncpIHsKLQkJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCBmdywgcHJpdi0+ZGV2KSA9PSAwKQotCQkJcHJpdi0+Y2FjaGVkX2Z3ID0gZndfZW50cnk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3VuY2FjaGVfZncoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQlpZiAocHJpdi0+Y2FjaGVkX3ByaV9mdykKLQkJcmVsZWFzZV9maXJtd2FyZShwcml2LT5jYWNoZWRfcHJpX2Z3KTsKLQlpZiAocHJpdi0+Y2FjaGVkX2Z3KQotCQlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmNhY2hlZF9mdyk7Ci0KLQlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gTlVMTDsKLQlwcml2LT5jYWNoZWRfZncgPSBOVUxMOwotfQotI2Vsc2UKLSNkZWZpbmUgb3Jpbm9jb19jYWNoZV9mdyhwcml2LCBhcCkKLSNkZWZpbmUgb3Jpbm9jb191bmNhY2hlX2Z3KHByaXYpCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogRGV2aWNlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IG9yaW5vY29fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZXJyID0gX19vcmlub2NvX3VwKGRldik7Ci0KLQlpZiAoISBlcnIpCi0JCXByaXYtPm9wZW4gPSAxOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IDA7Ci0KLQkvKiBXZSBtdXN0bid0IHVzZSBvcmlub2NvX2xvY2soKSBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgdG8gYmUKLQkgICBhYmxlIHRvIGNsb3NlIHRoZSBpbnRlcmZhY2UgZXZlbiBpZiBod191bmF2YWlsYWJsZSBpcyBzZXQKLQkgICAoZS5nLiBhcyB3ZSdyZSByZWxlYXNlZCBhZnRlciBhIFBDIENhcmQgcmVtb3ZhbCkgKi8KLQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQotCXByaXYtPm9wZW4gPSAwOwotCi0JZXJyID0gX19vcmlub2NvX2Rvd24oZGV2KTsKLQotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm9yaW5vY29fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JCi0JcmV0dXJuICZwcml2LT5zdGF0czsKLX0KLQotc3RhdGljIHN0cnVjdCBpd19zdGF0aXN0aWNzICpvcmlub2NvX2dldF93aXJlbGVzc19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISBuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBnZXRfd2lyZWxlc3Nfc3RhdHMoKSBjYWxsZWQgd2hpbGUgZGV2aWNlIG5vdCBwcmVzZW50XG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIE5VTEw7IC8qIEZJWE1FOiBDYW4gd2UgZG8gYmV0dGVyIHRoYW4gdGhpcz8gKi8KLQl9Ci0KLQkvKiBJZiBidXN5LCByZXR1cm4gdGhlIG9sZCBzdGF0cy4gIFJldHVybmluZyBOVUxMIG1heSBjYXVzZQotCSAqIHRoZSBpbnRlcmZhY2UgdG8gZGlzYXBwZWFyIGZyb20gL3Byb2MvbmV0L3dpcmVsZXNzICovCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiB3c3RhdHM7Ci0KLQkvKiBXZSBjYW4ndCByZWFsbHkgd2FpdCBmb3IgdGhlIHRhbGxpZXMgaW5xdWlyeSBjb21tYW5kIHRvCi0JICogY29tcGxldGUsIHNvIHdlIGp1c3QgdXNlIHRoZSBwcmV2aW91cyByZXN1bHRzIGFuZCB0cmlnZ2VyCi0JICogYSBuZXcgdGFsbGllcyBpbnF1aXJ5IGNvbW1hbmQgZm9yIG5leHQgdGltZSAtIEplYW4gSUkgKi8KLQkvKiBGSVhNRTogUmVhbGx5IHdlIHNob3VsZCB3YWl0IGZvciB0aGUgaW5xdWlyeSB0byBjb21lIGJhY2sgLQotCSAqIGFzIGl0IGlzIHRoZSBzdGF0cyB3ZSBnaXZlIGRvbid0IG1ha2UgYSB3aG9sZSBsb3Qgb2Ygc2Vuc2UuCi0JICogVW5mb3J0dW5hdGVseSwgaXQncyBub3QgY2xlYXIgaG93IHRvIGRvIHRoYXQgd2l0aGluIHRoZQotCSAqIHdpcmVsZXNzIGV4dGVuc2lvbnMgZnJhbWV3b3JrOiBJIHRoaW5rIHdlJ3JlIGluIHVzZXIKLQkgKiBjb250ZXh0LCBidXQgYSBsb2NrIHNlZW1zIHRvIGJlIGhlbGQgYnkgdGhlIHRpbWUgd2UgZ2V0IGluCi0JICogaGVyZSBzbyB3ZSdyZSBub3Qgc2FmZSB0byBzbGVlcCBoZXJlLiAqLwotCWhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1RBTExJRVMpOwotCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgewotCQltZW1zZXQoJndzdGF0cy0+cXVhbCwgMCwgc2l6ZW9mKHdzdGF0cy0+cXVhbCkpOwotCQkvKiBJZiBhIHNweSBhZGRyZXNzIGlzIGRlZmluZWQsIHdlIHJlcG9ydCBzdGF0cyBvZiB0aGUKLQkJICogZmlyc3Qgc3B5IGFkZHJlc3MgLSBKZWFuIElJICovCi0JCWlmIChTUFlfTlVNQkVSKHByaXYpKSB7Ci0JCQl3c3RhdHMtPnF1YWwucXVhbCA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLnF1YWw7Ci0JCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBwcml2LT5zcHlfZGF0YS5zcHlfc3RhdFswXS5sZXZlbDsKLQkJCXdzdGF0cy0+cXVhbC5ub2lzZSA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLm5vaXNlOwotCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBwcml2LT5zcHlfZGF0YS5zcHlfc3RhdFswXS51cGRhdGVkOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHsKLQkJCV9fbGUxNiBxdWFsLCBzaWduYWwsIG5vaXNlLCB1bnVzZWQ7Ci0JCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGNxOwotCi0JCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJCSBIRVJNRVNfUklEX0NPTU1TUVVBTElUWSwgJmNxKTsKLQotCQlpZiAoIWVycikgewotCQkJd3N0YXRzLT5xdWFsLnF1YWwgPSAoaW50KWxlMTZfdG9fY3B1KGNxLnF1YWwpOwotCQkJd3N0YXRzLT5xdWFsLmxldmVsID0gKGludClsZTE2X3RvX2NwdShjcS5zaWduYWwpIC0gMHg5NTsKLQkJCXdzdGF0cy0+cXVhbC5ub2lzZSA9IChpbnQpbGUxNl90b19jcHUoY3Eubm9pc2UpIC0gMHg5NTsKLQkJCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOwotCQl9Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gd3N0YXRzOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KCkgIgotCQkgICAgICAgImNhbGxlZCB3aGVuIGh3X3VuYXZhaWxhYmxlXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0JX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKCAobmV3X210dSA8IE9SSU5PQ09fTUlOX01UVSkgfHwgKG5ld19tdHUgPiBPUklOT0NPX01BWF9NVFUpICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBNVFUgKyBlbmNhcHN1bGF0aW9uICsgaGVhZGVyIGxlbmd0aCAqLwotCWlmICggKG5ld19tdHUgKyBFTkNBUFNfT1ZFUkhFQUQgKyBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHIpKSA+Ci0JICAgICAocHJpdi0+bmljYnVmX3NpemUgLSBFVEhfSExFTikgKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWRldi0+bXR1ID0gbmV3X210dTsKLQotCXJldHVybiAwOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBUeCBwYXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgb3Jpbm9jb194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQl1MTYgdHhmaWQgPSBwcml2LT50eGZpZDsKLQlzdHJ1Y3QgZXRoaGRyICplaDsKLQlpbnQgdHhfY29udHJvbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCEgbmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFR4IG9uIHN0b3BwZWQgZGV2aWNlIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0JCi0JaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFR4IHdoaWxlIHRyYW5zbWl0dGVyIGJ1c3khXG4iLCAKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiBORVRERVZfVFhfQlVTWTsKLQl9Ci0JCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb194bWl0KCkgY2FsbGVkIHdoaWxlIGh3X3VuYXZhaWxhYmxlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwotCX0KLQotCWlmICghIG5ldGlmX2NhcnJpZXJfb2soZGV2KSB8fCAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpKSB7Ci0JCS8qIE9vcHMsIHRoZSBmaXJtd2FyZSBoYXNuJ3QgZXN0YWJsaXNoZWQgYSBjb25uZWN0aW9uLAotICAgICAgICAgICAgICAgICAgIHNpbGVudGx5IGRyb3AgdGhlIHBhY2tldCAodGhpcyBzZWVtcyB0byBiZSB0aGUKLSAgICAgICAgICAgICAgICAgICBzYWZlc3QgYXBwcm9hY2gpLiAqLwotCQlnb3RvIGRyb3A7Ci0JfQotCi0JLyogQ2hlY2sgcGFja2V0IGxlbmd0aCAqLwotCWlmIChza2ItPmxlbiA8IEVUSF9ITEVOKQotCQlnb3RvIGRyb3A7Ci0KLQl0eF9jb250cm9sID0gSEVSTUVTX1RYQ1RSTF9UWF9PSyB8IEhFUk1FU19UWENUUkxfVFhfRVg7Ci0KLQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApCi0JCXR4X2NvbnRyb2wgfD0gKHByaXYtPnR4X2tleSA8PCBIRVJNRVNfTUlDX0tFWV9JRF9TSElGVCkgfAotCQkJSEVSTUVTX1RYQ1RSTF9NSUM7Ci0KLQlpZiAocHJpdi0+aGFzX2FsdF90eGNudGwpIHsKLQkJLyogV1BBIGVuYWJsZWQgZmlybXdhcmVzIGhhdmUgdHhfY250bCBhdCB0aGUgZW5kIG9mCi0JCSAqIHRoZSA4MDIuMTEgaGVhZGVyLiAgU28gd3JpdGUgemVyb2VkIGRlc2NyaXB0b3IgYW5kCi0JCSAqIDgwMi4xMSBoZWFkZXIgYXQgdGhlIHNhbWUgdGltZQotCQkgKi8KLQkJY2hhciBkZXNjW0hFUk1FU184MDJfM19PRkZTRVRdOwotCQlfX2xlMTYgKnR4Y250bCA9IChfX2xlMTYgKikgJmRlc2NbSEVSTUVTX1RYQ05UTDJfT0ZGU0VUXTsKLQotCQltZW1zZXQoJmRlc2MsIDAsIHNpemVvZihkZXNjKSk7Ci0KLQkJKnR4Y250bCA9IGNwdV90b19sZTE2KHR4X2NvbnRyb2wpOwotCQllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsICZkZXNjLCBzaXplb2YoZGVzYyksCi0JCQkJCXR4ZmlkLCAwKTsKLQkJaWYgKGVycikgewotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIFR4ICIKLQkJCQkgICAgICAgImRlc2NyaXB0b3IgdG8gQkFQXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCQlnb3RvIGJ1c3k7Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3QgaGVybWVzX3R4X2Rlc2NyaXB0b3IgZGVzYzsKLQotCQltZW1zZXQoJmRlc2MsIDAsIHNpemVvZihkZXNjKSk7Ci0KLQkJZGVzYy50eF9jb250cm9sID0gY3B1X3RvX2xlMTYodHhfY29udHJvbCk7Ci0JCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgJmRlc2MsIHNpemVvZihkZXNjKSwKLQkJCQkJdHhmaWQsIDApOwotCQlpZiAoZXJyKSB7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHdyaXRpbmcgVHggIgotCQkJCSAgICAgICAiZGVzY3JpcHRvciB0byBCQVBcbiIsIGRldi0+bmFtZSwgZXJyKTsKLQkJCWdvdG8gYnVzeTsKLQkJfQotCi0JCS8qIENsZWFyIHRoZSA4MDIuMTEgaGVhZGVyIGFuZCBkYXRhIGxlbmd0aCBmaWVsZHMgLSBzb21lCi0JCSAqIGZpcm13YXJlcyAoZS5nLiBMdWNlbnQvQWdlcmUgOC54eCkgYXBwZWFyIHRvIGdldCBjb25mdXNlZAotCQkgKiBpZiB0aGlzIGlzbid0IGRvbmUuICovCi0JCWhlcm1lc19jbGVhcl93b3JkcyhodywgSEVSTUVTX0RBVEEwLAotCQkJCSAgIEhFUk1FU184MDJfM19PRkZTRVQgLSBIRVJNRVNfODAyXzExX09GRlNFVCk7Ci0JfQotCi0JZWggPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKLQotCS8qIEVuY2Fwc3VsYXRlIEV0aGVybmV0LUlJIGZyYW1lcyAqLwotCWlmIChudG9ocyhlaC0+aF9wcm90bykgPiBFVEhfREFUQV9MRU4pIHsgLyogRXRoZXJuZXQtSUkgZnJhbWUgKi8KLQkJc3RydWN0IGhlYWRlcl9zdHJ1Y3QgewotCQkJc3RydWN0IGV0aGhkciBldGg7CS8qIDgwMi4zIGhlYWRlciAqLwotCQkJdTggZW5jYXBbNl07CQkvKiA4MDIuMiBoZWFkZXIgKi8KLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGRyOwotCi0JCS8qIFN0cmlwIGRlc3RpbmF0aW9uIGFuZCBzb3VyY2UgZnJvbSB0aGUgZGF0YSAqLwotCQlza2JfcHVsbChza2IsIDIgKiBFVEhfQUxFTik7Ci0KLQkJLyogQW5kIG1vdmUgdGhlbSB0byBhIHNlcGFyYXRlIGhlYWRlciAqLwotCQltZW1jcHkoJmhkci5ldGgsIGVoLCAyICogRVRIX0FMRU4pOwotCQloZHIuZXRoLmhfcHJvdG8gPSBodG9ucyhzaXplb2YoZW5jYXBzX2hkcikgKyBza2ItPmxlbik7Ci0JCW1lbWNweShoZHIuZW5jYXAsIGVuY2Fwc19oZHIsIHNpemVvZihlbmNhcHNfaGRyKSk7Ci0KLQkJLyogSW5zZXJ0IHRoZSBTTkFQIGhlYWRlciAqLwotCQlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBzaXplb2YoaGRyKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBOb3QgZW5vdWdoIGhlYWRyb29tIGZvciA4MDIuMiBoZWFkZXJzICVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgc2tiX2hlYWRyb29tKHNrYikpOwotCQkJZ290byBkcm9wOwotCQl9Ci0JCWVoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX3B1c2goc2tiLCBzaXplb2YoaGRyKSk7Ci0JCW1lbWNweShlaCwgJmhkciwgc2l6ZW9mKGhkcikpOwotCX0KLQotCWVyciA9IGhlcm1lc19iYXBfcHdyaXRlKGh3LCBVU0VSX0JBUCwgc2tiLT5kYXRhLCBza2ItPmxlbiwKLQkJCQl0eGZpZCwgSEVSTUVTXzgwMl8zX09GRlNFVCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCB3cml0aW5nIHBhY2tldCB0byBCQVBcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCWdvdG8gYnVzeTsKLQl9Ci0KLQkvKiBDYWxjdWxhdGUgTWljaGFlbCBNSUMgKi8KLQlpZiAocHJpdi0+ZW5jb2RlX2FsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHsKLQkJdTggbWljX2J1ZltNSUNIQUVMX01JQ19MRU4gKyAxXTsKLQkJdTggKm1pYzsKLQkJc2l6ZV90IG9mZnNldDsKLQkJc2l6ZV90IGxlbjsKLQotCQlpZiAoc2tiLT5sZW4gJSAyKSB7Ci0JCQkvKiBNSUMgc3RhcnQgaXMgb24gYW4gb2RkIGJvdW5kYXJ5ICovCi0JCQltaWNfYnVmWzBdID0gc2tiLT5kYXRhW3NrYi0+bGVuIC0gMV07Ci0JCQltaWMgPSAmbWljX2J1ZlsxXTsKLQkJCW9mZnNldCA9IHNrYi0+bGVuIC0gMTsKLQkJCWxlbiA9IE1JQ0hBRUxfTUlDX0xFTiArIDE7Ci0JCX0gZWxzZSB7Ci0JCQltaWMgPSAmbWljX2J1ZlswXTsKLQkJCW9mZnNldCA9IHNrYi0+bGVuOwotCQkJbGVuID0gTUlDSEFFTF9NSUNfTEVOOwotCQl9Ci0KLQkJbWljaGFlbF9taWMocHJpdi0+dHhfdGZtX21pYywKLQkJCSAgICBwcml2LT50a2lwX2tleVtwcml2LT50eF9rZXldLnR4X21pYywKLQkJCSAgICBlaC0+aF9kZXN0LCBlaC0+aF9zb3VyY2UsIDAgLyogcHJpb3JpdHkgKi8sCi0JCQkgICAgc2tiLT5kYXRhICsgRVRIX0hMRU4sIHNrYi0+bGVuIC0gRVRIX0hMRU4sIG1pYyk7Ci0KLQkJLyogV3JpdGUgdGhlIE1JQyAqLwotCQllcnIgPSBoZXJtZXNfYmFwX3B3cml0ZShodywgVVNFUl9CQVAsICZtaWNfYnVmWzBdLCBsZW4sCi0JCQkJCXR4ZmlkLCBIRVJNRVNfODAyXzNfT0ZGU0VUICsgb2Zmc2V0KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgd3JpdGluZyBNSUMgdG8gQkFQXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCWdvdG8gYnVzeTsKLQkJfQotCX0KLQotCS8qIEZpbmFsbHksIHdlIGFjdHVhbGx5IGluaXRpYXRlIHRoZSBzZW5kICovCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVFggfCBIRVJNRVNfQ01EX1JFQ0wsCi0JCQkJdHhmaWQsIE5VTEwpOwotCWlmIChlcnIpIHsKLQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHRyYW5zbWl0dGluZyBwYWNrZXRcbiIsCi0JCQkJZGV2LT5uYW1lLCBlcnIpOwotCQlnb3RvIGJ1c3k7Ci0JfQotCi0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0Jc3RhdHMtPnR4X2J5dGVzICs9IEhFUk1FU184MDJfM19PRkZTRVQgKyBza2ItPmxlbjsKLQlnb3RvIG9rOwotCi0gZHJvcDoKLQlzdGF0cy0+dHhfZXJyb3JzKys7Ci0Jc3RhdHMtPnR4X2Ryb3BwZWQrKzsKLQotIG9rOgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCXJldHVybiBORVRERVZfVFhfT0s7Ci0KLSBidXN5OgotCWlmIChlcnIgPT0gLUVJTykKLQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JdTE2IGZpZCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEFMTE9DRklEKTsKLQotCWlmIChmaWQgIT0gcHJpdi0+dHhmaWQpIHsKLQkJaWYgKGZpZCAhPSBEVU1NWV9GSUQpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQWxsb2NhdGUgZXZlbnQgb24gdW5leHBlY3RlZCBmaWQgKCUwNFgpXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZmlkKTsKLQkJcmV0dXJuOwotCX0KLQotCWhlcm1lc193cml0ZV9yZWduKGh3LCBBTExPQ0ZJRCwgRFVNTVlfRklEKTsKLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+c3RhdHM7Ci0KLQlzdGF0cy0+dHhfcGFja2V0cysrOwotCi0JbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCi0JaGVybWVzX3dyaXRlX3JlZ24oaHcsIFRYQ09NUExGSUQsIERVTU1ZX0ZJRCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl90eGV4YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCXUxNiBmaWQgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBUWENPTVBMRklEKTsKLQl1MTYgc3RhdHVzOwotCXN0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSBoZHI7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoZmlkID09IERVTU1ZX0ZJRCkKLQkJcmV0dXJuOyAvKiBOb3RoaW5nJ3MgcmVhbGx5IGhhcHBlbmVkICovCi0KLQkvKiBSZWFkIHBhcnQgb2YgdGhlIGZyYW1lIGhlYWRlciAtIHdlIG5lZWQgc3RhdHVzIGFuZCBhZGRyMSAqLwotCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZoZHIsCi0JCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBoZXJtZXNfdHhleGNfZGF0YSksCi0JCQkgICAgICAgZmlkLCAwKTsKLQotCWhlcm1lc193cml0ZV9yZWduKGh3LCBUWENPTVBMRklELCBEVU1NWV9GSUQpOwotCXN0YXRzLT50eF9lcnJvcnMrKzsKLQotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFVuYWJsZSB0byByZWFkIGRlc2NyaXB0b3Igb24gVHggZXJyb3IgIgotCQkgICAgICAgIihGSUQ9JTA0WCBlcnJvciAlZClcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGZpZCwgZXJyKTsKLQkJcmV0dXJuOwotCX0KLQkKLQlERUJVRygxLCAiJXM6IFR4IGVycm9yLCBlcnIgJWQgKEZJRD0lMDRYKVxuIiwgZGV2LT5uYW1lLAotCSAgICAgIGVyciwgZmlkKTsKLSAgICAKLQkvKiBXZSBwcm9kdWNlIGEgVFhEUk9QIGV2ZW50IG9ubHkgZm9yIHJldHJ5IG9yIGxpZmV0aW1lCi0JICogZXhjZWVkZWQsIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IHN0YXR1cyB0aGF0IHJlYWxseSBtZWFuCi0JICogdGhhdCB0aGlzIHBhcnRpY3VsYXIgbm9kZSB3ZW50IGF3YXkuCi0JICogT3RoZXIgZXJyb3JzIG1lYW5zIHRoYXQgKndlKiBzY3Jld2VkIHVwLiAtIEplYW4gSUkgKi8KLQlzdGF0dXMgPSBsZTE2X3RvX2NwdShoZHIuZGVzYy5zdGF0dXMpOwotCWlmIChzdGF0dXMgJiAoSEVSTUVTX1RYU1RBVF9SRVRSWUVSUiB8IEhFUk1FU19UWFNUQVRfQUdFREVSUikpIHsKLQkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OwotCi0JCS8qIENvcHkgODAyLjExIGRlc3QgYWRkcmVzcy4KLQkJICogV2UgdXNlIHRoZSA4MDIuMTEgaGVhZGVyIGJlY2F1c2UgdGhlIGZyYW1lIG1heQotCQkgKiBub3QgYmUgODAyLjMgb3IgbWF5IGJlIG1hbmdsZWQuLi4KLQkJICogSW4gQWQtSG9jIG1vZGUsIGl0IHdpbGwgYmUgdGhlIG5vZGUgYWRkcmVzcy4KLQkJICogSW4gbWFuYWdlZCBtb2RlLCBpdCB3aWxsIGJlIG1vc3QgbGlrZWx5IHRoZSBBUCBhZGRyCi0JCSAqIFVzZXIgc3BhY2Ugd2lsbCBmaWd1cmUgb3V0IGhvdyB0byBjb252ZXJ0IGl0IHRvCi0JCSAqIHdoYXRldmVyIGl0IG5lZWRzIChJUCBhZGRyZXNzIG9yIGVsc2UpLgotCQkgKiAtIEplYW4gSUkgKi8KLQkJbWVtY3B5KHdycXUuYWRkci5zYV9kYXRhLCBoZHIuYWRkcjEsIEVUSF9BTEVOKTsKLQkJd3JxdS5hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQotCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KLQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIElXRVZUWERST1AsICZ3cnF1LCBOVUxMKTsKLQl9Ci0KLQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUeCB0aW1lb3V0ISAiCi0JICAgICAgICJBTExPQ0ZJRD0lMDR4LCBUWENPTVBMRklEPSUwNHgsIEVWU1RBVD0lMDR4XG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGhlcm1lc19yZWFkX3JlZ24oaHcsIEFMTE9DRklEKSwKLQkgICAgICAgaGVybWVzX3JlYWRfcmVnbihodywgVFhDT01QTEZJRCksIGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCkpOwotCi0Jc3RhdHMtPnR4X2Vycm9ycysrOwotCi0Jc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFJ4IHBhdGggKGRhdGEgZnJhbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogRG9lcyB0aGUgZnJhbWUgaGF2ZSBhIFNOQVAgaGVhZGVyIGluZGljYXRpbmcgaXQgc2hvdWxkIGJlCi0gKiBkZS1lbmNhcHN1bGF0ZWQgdG8gRXRoZXJuZXQtSUk/ICovCi1zdGF0aWMgaW5saW5lIGludCBpc19ldGhlcnNuYXAodm9pZCAqX2hkcikKLXsKLQl1OCAqaGRyID0gX2hkcjsKLQotCS8qIFdlIGRlLWVuY2Fwc3VsYXRlIGFsbCBwYWNrZXRzIHdoaWNoLCBhKSBoYXZlIFNOQVAgaGVhZGVycwotCSAqIChpLmUuIFNTQVA9RFNBUD0weGFhIGFuZCBDVFJMPTB4MyBpbiB0aGUgODAyLjIgTExDIGhlYWRlcgotCSAqIGFuZCB3aGVyZSBiKSB0aGUgT1VJIG9mIHRoZSBTTkFQIGhlYWRlciBpcyAwMDowMDowMCBvcgotCSAqIDAwOjAwOmY4IC0gd2UgbmVlZCBib3RoIGJlY2F1c2UgZGlmZmVyZW50IEFQcyBhcHBlYXIgdG8gdXNlCi0JICogZGlmZmVyZW50IE9VSXMgZm9yIHNvbWUgcmVhc29uICovCi0JcmV0dXJuIChtZW1jbXAoaGRyLCAmZW5jYXBzX2hkciwgNSkgPT0gMCkKLQkJJiYgKCAoaGRyWzVdID09IDB4MDApIHx8IChoZHJbNV0gPT0gMHhmOCkgKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG9yaW5vY29fc3B5X2dhdGhlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2NoYXIgKm1hYywKLQkJCQkgICAgICBpbnQgbGV2ZWwsIGludCBub2lzZSkKLXsKLQlzdHJ1Y3QgaXdfcXVhbGl0eSB3c3RhdHM7Ci0Jd3N0YXRzLmxldmVsID0gbGV2ZWwgLSAweDk1OwotCXdzdGF0cy5ub2lzZSA9IG5vaXNlIC0gMHg5NTsKLQl3c3RhdHMucXVhbCA9IChsZXZlbCA+IG5vaXNlKSA/IChsZXZlbCAtIG5vaXNlKSA6IDA7Ci0Jd3N0YXRzLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9VUERBVEVEIHwgSVdfUVVBTF9EQk07Ci0JLyogVXBkYXRlIHNweSByZWNvcmRzICovCi0Jd2lyZWxlc3Nfc3B5X3VwZGF0ZShkZXYsIG1hYywgJndzdGF0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fc3RhdF9nYXRoZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYykKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCS8qIFVzaW5nIHNweSBzdXBwb3J0IHdpdGggbG90cyBvZiBSeCBwYWNrZXRzLCBsaWtlIGluIGFuCi0JICogaW5mcmFzdHJ1Y3R1cmUgKEFQKSwgd2lsbCByZWFsbHkgc2xvdyBkb3duIGV2ZXJ5dGhpbmcsIGJlY2F1c2UKLQkgKiB0aGUgTUFDIGFkZHJlc3MgbXVzdCBiZSBjb21wYXJlZCB0byBlYWNoIGVudHJ5IG9mIHRoZSBzcHkgbGlzdC4KLQkgKiBJZiB0aGUgdXNlciByZWFsbHkgYXNrcyBmb3IgaXQgKHNldCBzb21lIGFkZHJlc3MgaW4gdGhlCi0JICogc3B5IGxpc3QpLCB3ZSBkbyBpdCwgYnV0IGhlIHdpbGwgcGF5IHRoZSBwcmljZS4KLQkgKiBOb3RlIHRoYXQgdG8gZ2V0IGhlcmUsIHlvdSBuZWVkIGJvdGggV0lSRUxFU1NfU1BZCi0JICogY29tcGlsZWQgaW4gQU5EIHNvbWUgYWRkcmVzc2VzIGluIHRoZSBsaXN0ICEhIQotCSAqLwotCS8qIE5vdGUgOiBnY2Mgd2lsbCBvcHRpbWlzZSB0aGUgd2hvbGUgc2VjdGlvbiBhd2F5IGlmCi0JICogV0lSRUxFU1NfU1BZIGlzIG5vdCBkZWZpbmVkLi4uIC0gSmVhbiBJSSAqLwotCWlmIChTUFlfTlVNQkVSKHByaXYpKSB7Ci0JCW9yaW5vY29fc3B5X2dhdGhlcihkZXYsIHNrYl9tYWNfaGVhZGVyKHNrYikgKyBFVEhfQUxFTiwKLQkJCQkgICBkZXNjLT5zaWduYWwsIGRlc2MtPnNpbGVuY2UpOwotCX0KLX0KLQotLyoKLSAqIG9yaW5vY29fcnhfbW9uaXRvciAtIGhhbmRsZSByZWNlaXZlZCBtb25pdG9yIGZyYW1lcy4KLSAqCi0gKiBBcmd1bWVudHM6Ci0gKglkZXYJCW5ldHdvcmsgZGV2aWNlCi0gKglyeGZpZAkJcmVjZWl2ZWQgRklECi0gKglkZXNjCQlyeCBkZXNjcmlwdG9yIG9mIHRoZSBmcmFtZQotICoKLSAqIENhbGwgY29udGV4dDogaW50ZXJydXB0Ci0gKi8KLXN0YXRpYyB2b2lkIG9yaW5vY29fcnhfbW9uaXRvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcnhmaWQsCi0JCQkgICAgICAgc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjKQotewotCXUzMiBoZHJsZW4gPSAzMDsJLyogcmV0dXJuIGZ1bGwgaGVhZGVyIGJ5IGRlZmF1bHQgKi8KLQl1MzIgZGF0YWxlbiA9IDA7Ci0JdTE2IGZjOwotCWludCBlcnI7Ci0JaW50IGxlbjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0KLQlsZW4gPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7Ci0KLQkvKiBEZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIGhlYWRlciBhbmQgdGhlIGRhdGEgKi8KLQlmYyA9IGxlMTZfdG9fY3B1KGRlc2MtPmZyYW1lX2N0bCk7Ci0Jc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfREFUQToKLQkJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpCi0JCSAgICAmJiAoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKQotCQkJaGRybGVuID0gMzA7Ci0JCWVsc2UKLQkJCWhkcmxlbiA9IDI0OwotCQlkYXRhbGVuID0gbGVuOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9GVFlQRV9NR01UOgotCQloZHJsZW4gPSAyNDsKLQkJZGF0YWxlbiA9IGxlbjsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfRlRZUEVfQ1RMOgotCQlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUFNQT0xMOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SVFM6Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NGRU5EOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9DRkVOREFDSzoKLQkJCWhkcmxlbiA9IDE2OwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0NUUzoKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQUNLOgotCQkJaGRybGVuID0gMTA7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBVbmtub3duIGZyYW1lIHR5cGUgKi8KLQkJYnJlYWs7Ci0JfQotCi0JLyogc2FuaXR5IGNoZWNrIHRoZSBsZW5ndGggKi8KLQlpZiAoZGF0YWxlbiA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gKyAxMikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG92ZXJzaXplZCBtb25pdG9yIGZyYW1lLCAiCi0JCSAgICAgICAiZGF0YSBsZW5ndGggPSAlZFxuIiwgZGV2LT5uYW1lLCBkYXRhbGVuKTsKLQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJZ290byB1cGRhdGVfc3RhdHM7Ci0JfQotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihoZHJsZW4gKyBkYXRhbGVuKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2Fubm90IGFsbG9jYXRlIHNrYiBmb3IgbW9uaXRvciBmcmFtZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCS8qIENvcHkgdGhlIDgwMi4xMSBoZWFkZXIgdG8gdGhlIHNrYiAqLwotCW1lbWNweShza2JfcHV0KHNrYiwgaGRybGVuKSwgJihkZXNjLT5mcmFtZV9jdGwpLCBoZHJsZW4pOwotCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0KLQkvKiBJZiBhbnksIGNvcHkgdGhlIGRhdGEgZnJvbSB0aGUgY2FyZCB0byB0aGUgc2tiICovCi0JaWYgKGRhdGFsZW4gPiAwKSB7Ci0JCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsIHNrYl9wdXQoc2tiLCBkYXRhbGVuKSwKLQkJCQkgICAgICAgQUxJR04oZGF0YWxlbiwgMiksIHJ4ZmlkLAotCQkJCSAgICAgICBIRVJNRVNfODAyXzJfT0ZGU0VUKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVhZGluZyBtb25pdG9yIGZyYW1lXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCWdvdG8gZHJvcDsKLQkJfQotCX0KLQotCXNrYi0+ZGV2ID0gZGV2OwotCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLQlza2ItPnByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMik7Ci0JCi0Jc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0KLQluZXRpZl9yeChza2IpOwotCXJldHVybjsKLQotIGRyb3A6Ci0JZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLSB1cGRhdGVfc3RhdHM6Ci0Jc3RhdHMtPnJ4X2Vycm9ycysrOwotCXN0YXRzLT5yeF9kcm9wcGVkKys7Ci19Ci0KLS8qIEdldCB0c2MgZnJvbSB0aGUgZmlybXdhcmUgKi8KLXN0YXRpYyBpbnQgb3Jpbm9jb19od19nZXRfdGtpcF9pdihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LCBpbnQga2V5LAotCQkJCSAgdTggKnRzYykKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JdTggdHNjX2Fycls0XVtJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKLQotCWlmICgoa2V5IDwgMCkgfHwgKGtleSA+IDQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVF9US0lQX0lWLAotCQkJICAgICAgc2l6ZW9mKHRzY19hcnIpLCBOVUxMLCAmdHNjX2Fycik7Ci0JaWYgKCFlcnIpCi0JCW1lbWNweSh0c2MsICZ0c2NfYXJyW2tleV1bMF0sIHNpemVvZih0c2NfYXJyWzBdKSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5zdGF0czsKLQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKLQl1MTYgcnhmaWQsIHN0YXR1czsKLQlpbnQgbGVuZ3RoOwotCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYzsKLQlzdHJ1Y3Qgb3Jpbm9jb19yeF9kYXRhICpyeF9kYXRhOwotCWludCBlcnI7Ci0KLQlkZXNjID0ga21hbGxvYyhzaXplb2YoKmRlc2MpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWRlc2MpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgIiVzOiBDYW4ndCBhbGxvY2F0ZSBzcGFjZSBmb3IgUlggZGVzY3JpcHRvclxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCXJ4ZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgUlhGSUQpOwotCi0JZXJyID0gaGVybWVzX2JhcF9wcmVhZChodywgSVJRX0JBUCwgZGVzYywgc2l6ZW9mKCpkZXNjKSwKLQkJCSAgICAgICByeGZpZCwgMCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIFJ4IGRlc2NyaXB0b3IuICIKLQkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQlnb3RvIHVwZGF0ZV9zdGF0czsKLQl9Ci0KLQlzdGF0dXMgPSBsZTE2X3RvX2NwdShkZXNjLT5zdGF0dXMpOwotCi0JaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfQkFEQ1JDKSB7Ci0JCURFQlVHKDEsICIlczogQmFkIENSQyBvbiBSeC4gRnJhbWUgZHJvcHBlZC5cbiIsCi0JCSAgICAgIGRldi0+bmFtZSk7Ci0JCXN0YXRzLT5yeF9jcmNfZXJyb3JzKys7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCS8qIEhhbmRsZSBmcmFtZXMgaW4gbW9uaXRvciBtb2RlICovCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7Ci0JCW9yaW5vY29fcnhfbW9uaXRvcihkZXYsIHJ4ZmlkLCBkZXNjKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfVU5ERUNSWVBUQUJMRSkgewotCQlERUJVRygxLCAiJXM6IFVuZGVjcnlwdGFibGUgZnJhbWUgb24gUnguIEZyYW1lIGRyb3BwZWQuXG4iLAotCQkgICAgICBkZXYtPm5hbWUpOwotCQl3c3RhdHMtPmRpc2NhcmQuY29kZSsrOwotCQlnb3RvIHVwZGF0ZV9zdGF0czsKLQl9Ci0KLQlsZW5ndGggPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7Ci0KLQkvKiBTYW5pdHkgY2hlY2tzICovCi0JaWYgKGxlbmd0aCA8IDMpIHsgLyogTm8gZm9yIGV2ZW4gYW4gODAyLjIgTExDIGhlYWRlciAqLwotCQkvKiBBdCBsZWFzdCBvbiBTeW1ib2wgZmlybXdhcmUgd2l0aCBQQ0Ygd2UgZ2V0IHF1aXRlIGEKLSAgICAgICAgICAgICAgICAgICBsb3Qgb2YgdGhlc2UgbGVnaXRpbWF0ZWx5IC0gUG9sbCBmcmFtZXMgd2l0aCBubwotICAgICAgICAgICAgICAgICAgIGRhdGEuICovCi0JCWdvdG8gb3V0OwotCX0KLQlpZiAobGVuZ3RoID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogT3ZlcnNpemVkIGZyYW1lIHJlY2VpdmVkICglZCBieXRlcylcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGxlbmd0aCk7Ci0JCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCS8qIFBheWxvYWQgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIE1pY2hhZWwgTUlDLiBJbmNyZWFzZSBwYXlsb2FkCi0JICogc2l6ZSB0byByZWFkIGl0IHRvZ2V0aGVyIHdpdGggdGhlIGRhdGEuICovCi0JaWYgKHN0YXR1cyAmIEhFUk1FU19SWFNUQVRfTUlDKQotCQlsZW5ndGggKz0gTUlDSEFFTF9NSUNfTEVOOwotCi0JLyogV2UgbmVlZCBzcGFjZSBmb3IgdGhlIHBhY2tldCBkYXRhIGl0c2VsZiwgcGx1cyBhbiBldGhlcm5ldAotCSAgIGhlYWRlciwgcGx1cyAyIGJ5dGVzIHNvIHdlIGNhbiBhbGlnbiB0aGUgSVAgaGVhZGVyIG9uIGEKLQkgICAzMmJpdCBib3VuZGFyeSwgcGx1cyAxIGJ5dGUgc28gd2UgY2FuIHJlYWQgaW4gb2RkIGxlbmd0aAotCSAgIHBhY2tldHMgZnJvbSB0aGUgY2FyZCwgd2hpY2ggaGFzIGFuIElPIGdyYW51bGFyaXR5IG9mIDE2Ci0JICAgYml0cyAqLyAgCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGgrRVRIX0hMRU4rMisxKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2FuJ3QgYWxsb2NhdGUgc2tiIGZvciBSeFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gdXBkYXRlX3N0YXRzOwotCX0KLQotCS8qIFdlJ2xsIHByZXBlbmQgdGhlIGhlYWRlciwgc28gcmVzZXJ2ZSBzcGFjZSBmb3IgaXQuICBUaGUgd29yc3QKLQkgICBjYXNlIGlzIG5vIGRlY2Fwc3VsYXRpb24sIHdoZW4gODAyLjMgaGVhZGVyIGlzIHByZXBlbmRlZCBhbmQKLQkgICBub3RoaW5nIGlzIHJlbW92ZWQuICAyIGlzIGZvciBhbGlnbmluZyB0aGUgSVAgaGVhZGVyLiAgKi8KLQlza2JfcmVzZXJ2ZShza2IsIEVUSF9ITEVOICsgMik7Ci0KLQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCBza2JfcHV0KHNrYiwgbGVuZ3RoKSwKLQkJCSAgICAgICBBTElHTihsZW5ndGgsIDIpLCByeGZpZCwKLQkJCSAgICAgICBIRVJNRVNfODAyXzJfT0ZGU0VUKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlYWRpbmcgZnJhbWUuICIKLQkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQlnb3RvIGRyb3A7Ci0JfQotCi0JLyogQWRkIGRlc2MgYW5kIHNrYiB0byByeCBxdWV1ZSAqLwotCXJ4X2RhdGEgPSBremFsbG9jKHNpemVvZigqcnhfZGF0YSksIEdGUF9BVE9NSUMpOwotCWlmICghcnhfZGF0YSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2FuJ3QgYWxsb2NhdGUgUlggcGFja2V0XG4iLAotCQkJZGV2LT5uYW1lKTsKLQkJZ290byBkcm9wOwotCX0KLQlyeF9kYXRhLT5kZXNjID0gZGVzYzsKLQlyeF9kYXRhLT5za2IgPSBza2I7Ci0JbGlzdF9hZGRfdGFpbCgmcnhfZGF0YS0+bGlzdCwgJnByaXYtPnJ4X2xpc3QpOwotCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnJ4X3Rhc2tsZXQpOwotCi0JcmV0dXJuOwotCi1kcm9wOgotCWRldl9rZnJlZV9za2JfaXJxKHNrYik7Ci11cGRhdGVfc3RhdHM6Ci0Jc3RhdHMtPnJ4X2Vycm9ycysrOwotCXN0YXRzLT5yeF9kcm9wcGVkKys7Ci1vdXQ6Ci0Ja2ZyZWUoZGVzYyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9yaW5vY29fcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgIHN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYywKLQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnByaXYtPnN0YXRzOwotCXUxNiBzdGF0dXMsIGZjOwotCWludCBsZW5ndGg7Ci0Jc3RydWN0IGV0aGhkciAqaGRyOwotCi0Jc3RhdHVzID0gbGUxNl90b19jcHUoZGVzYy0+c3RhdHVzKTsKLQlsZW5ndGggPSBsZTE2X3RvX2NwdShkZXNjLT5kYXRhX2xlbik7Ci0JZmMgPSBsZTE2X3RvX2NwdShkZXNjLT5mcmFtZV9jdGwpOwotCi0JLyogQ2FsY3VsYXRlIGFuZCBjaGVjayBNSUMgKi8KLQlpZiAoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUMpIHsKLQkJaW50IGtleV9pZCA9ICgoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NSUNfS0VZX0lEKSA+PgotCQkJICAgICAgSEVSTUVTX01JQ19LRVlfSURfU0hJRlQpOwotCQl1OCBtaWNbTUlDSEFFTF9NSUNfTEVOXTsKLQkJdTggKnJ4bWljOwotCQl1OCAqc3JjID0gKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKSA/Ci0JCQlkZXNjLT5hZGRyMyA6IGRlc2MtPmFkZHIyOwotCi0JCS8qIEV4dHJhY3QgTWljaGFlbCBNSUMgZnJvbSBwYXlsb2FkICovCi0JCXJ4bWljID0gc2tiLT5kYXRhICsgc2tiLT5sZW4gLSBNSUNIQUVMX01JQ19MRU47Ci0KLQkJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIE1JQ0hBRUxfTUlDX0xFTik7Ci0JCWxlbmd0aCAtPSBNSUNIQUVMX01JQ19MRU47Ci0KLQkJbWljaGFlbF9taWMocHJpdi0+cnhfdGZtX21pYywKLQkJCSAgICBwcml2LT50a2lwX2tleVtrZXlfaWRdLnJ4X21pYywKLQkJCSAgICBkZXNjLT5hZGRyMSwKLQkJCSAgICBzcmMsCi0JCQkgICAgMCwgLyogcHJpb3JpdHkgb3IgUW9TPyAqLwotCQkJICAgIHNrYi0+ZGF0YSwKLQkJCSAgICBza2ItPmxlbiwKLQkJCSAgICAmbWljWzBdKTsKLQotCQlpZiAobWVtY21wKG1pYywgcnhtaWMsCi0JCQkgICBNSUNIQUVMX01JQ19MRU4pKSB7Ci0JCQl1bmlvbiBpd3JlcV9kYXRhIHdycXU7Ci0JCQlzdHJ1Y3QgaXdfbWljaGFlbG1pY2ZhaWx1cmUgd3htaWM7Ci0KLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAiCi0JCQkgICAgICAgIkludmFsaWQgTWljaGFlbCBNSUMgaW4gZGF0YSBmcmFtZSBmcm9tICVwTSwgIgotCQkJICAgICAgICJ1c2luZyBrZXkgJWlcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBzcmMsIGtleV9pZCk7Ci0KLQkJCS8qIFRPRE86IHVwZGF0ZSBzdGF0cyAqLwotCi0JCQkvKiBOb3RpZnkgdXNlcnNwYWNlICovCi0JCQltZW1zZXQoJnd4bWljLCAwLCBzaXplb2Yod3htaWMpKTsKLQkJCXd4bWljLmZsYWdzID0ga2V5X2lkICYgSVdfTUlDRkFJTFVSRV9LRVlfSUQ7Ci0JCQl3eG1pYy5mbGFncyB8PSAoZGVzYy0+YWRkcjFbMF0gJiAxKSA/Ci0JCQkJSVdfTUlDRkFJTFVSRV9HUk9VUCA6IElXX01JQ0ZBSUxVUkVfUEFJUldJU0U7Ci0JCQl3eG1pYy5zcmNfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JCQltZW1jcHkod3htaWMuc3JjX2FkZHIuc2FfZGF0YSwgc3JjLCBFVEhfQUxFTik7Ci0KLQkJCSh2b2lkKSBvcmlub2NvX2h3X2dldF90a2lwX2l2KHByaXYsIGtleV9pZCwKLQkJCQkJCSAgICAgICZ3eG1pYy50c2NbMF0pOwotCi0JCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7Ci0JCQl3cnF1LmRhdGEubGVuZ3RoID0gc2l6ZW9mKHd4bWljKTsKLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWTUlDSEFFTE1JQ0ZBSUxVUkUsICZ3cnF1LAotCQkJCQkgICAgKGNoYXIgKikgJnd4bWljKTsKLQotCQkJZ290byBkcm9wOwotCQl9Ci0JfQotCi0JLyogSGFuZGxlIGRlY2Fwc3VsYXRpb24KLQkgKiBJbiBtb3N0IGNhc2VzLCB0aGUgZmlybXdhcmUgdGVsbCB1cyBhYm91dCBTTkFQIGZyYW1lcy4KLQkgKiBGb3Igc29tZSByZWFzb24sIHRoZSBTTkFQIGZyYW1lcyBzZW50IGJ5IExpbmtTeXMgQVBzCi0JICogYXJlIG5vdCBwcm9wZXJseSByZWNvZ25pc2VkIGJ5IG1vc3QgZmlybXdhcmVzLgotCSAqIFNvLCBjaGVjayBvdXJzZWx2ZXMgKi8KLQlpZiAobGVuZ3RoID49IEVOQ0FQU19PVkVSSEVBRCAmJgotCSAgICAoKChzdGF0dXMgJiBIRVJNRVNfUlhTVEFUX01TR1RZUEUpID09IEhFUk1FU19SWFNUQVRfMTA0MikgfHwKLQkgICAgICgoc3RhdHVzICYgSEVSTUVTX1JYU1RBVF9NU0dUWVBFKSA9PSBIRVJNRVNfUlhTVEFUX1RVTk5FTCkgfHwKLQkgICAgIGlzX2V0aGVyc25hcChza2ItPmRhdGEpKSkgewotCQkvKiBUaGVzZSBpbmRpY2F0ZSBhIFNOQVAgd2l0aGluIDgwMi4yIExMQyB3aXRoaW4KLQkJICAgODAyLjExIGZyYW1lIHdoaWNoIHdlJ2xsIG5lZWQgdG8gZGUtZW5jYXBzdWxhdGUgdG8KLQkJICAgdGhlIG9yaWdpbmFsIEV0aGVybmV0SUkgZnJhbWUuICovCi0JCWhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX3B1c2goc2tiLCBFVEhfSExFTiAtIEVOQ0FQU19PVkVSSEVBRCk7Ci0JfSBlbHNlIHsKLQkJLyogODAyLjMgZnJhbWUgLSBwcmVwZW5kIDgwMi4zIGhlYWRlciBhcyBpcyAqLwotCQloZHIgPSAoc3RydWN0IGV0aGhkciAqKXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwotCQloZHItPmhfcHJvdG8gPSBodG9ucyhsZW5ndGgpOwotCX0KLQltZW1jcHkoaGRyLT5oX2Rlc3QsIGRlc2MtPmFkZHIxLCBFVEhfQUxFTik7Ci0JaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTKQotCQltZW1jcHkoaGRyLT5oX3NvdXJjZSwgZGVzYy0+YWRkcjMsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbWNweShoZHItPmhfc291cmNlLCBkZXNjLT5hZGRyMiwgRVRIX0FMRU4pOwotCi0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7Ci0JaWYgKGZjICYgSUVFRTgwMjExX0ZDVExfVE9EUykKLQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7Ci0JCi0JLyogUHJvY2VzcyB0aGUgd2lyZWxlc3Mgc3RhdHMgaWYgbmVlZGVkICovCi0Jb3Jpbm9jb19zdGF0X2dhdGhlcihkZXYsIHNrYiwgZGVzYyk7Ci0KLQkvKiBQYXNzIHRoZSBwYWNrZXQgdG8gdGhlIG5ldHdvcmtpbmcgc3RhY2sgKi8KLQluZXRpZl9yeChza2IpOwotCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0Jc3RhdHMtPnJ4X2J5dGVzICs9IGxlbmd0aDsKLQotCXJldHVybjsKLQotIGRyb3A6Ci0JZGV2X2tmcmVlX3NrYihza2IpOwotCXN0YXRzLT5yeF9lcnJvcnMrKzsKLQlzdGF0cy0+cnhfZHJvcHBlZCsrOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3J4X2lzcl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YSwgKnRlbXA7Ci0Jc3RydWN0IGhlcm1lc19yeF9kZXNjcmlwdG9yICpkZXNjOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIG9yaW5vY29fcnggcmVxdWlyZXMgdGhlIGRyaXZlciBsb2NrLCBhbmQgd2UgYWxzbyBuZWVkIHRvCi0JICogcHJvdGVjdCBwcml2LT5yeF9saXN0LCBzbyBqdXN0IGhvbGQgdGhlIGxvY2sgb3ZlciB0aGUKLQkgKiBsb3QuCi0JICoKLQkgKiBJZiBvcmlub2NvX2xvY2sgZmFpbHMsIHdlJ3ZlIHVucGx1Z2dlZCB0aGUgY2FyZC4gSW4gdGhpcwotCSAqIGNhc2UganVzdCBhYm9ydC4gKi8KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuOwotCi0JLyogZXh0cmFjdCBkZXNjIGFuZCBza2IgZnJvbSBxdWV1ZSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyeF9kYXRhLCB0ZW1wLCAmcHJpdi0+cnhfbGlzdCwgbGlzdCkgewotCQlkZXNjID0gcnhfZGF0YS0+ZGVzYzsKLQkJc2tiID0gcnhfZGF0YS0+c2tiOwotCQlsaXN0X2RlbCgmcnhfZGF0YS0+bGlzdCk7Ci0JCWtmcmVlKHJ4X2RhdGEpOwotCi0JCW9yaW5vY29fcngoZGV2LCBkZXNjLCBza2IpOwotCi0JCWtmcmVlKGRlc2MpOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFJ4IHBhdGggKGluZm8gZnJhbWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIHZvaWQgcHJpbnRfbGlua3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgc3RhdHVzKQotewotCWNoYXIgKiBzOwotCi0JaWYgKHN1cHByZXNzX2xpbmtzdGF0dXMpCi0JCXJldHVybjsKLQotCXN3aXRjaCAoc3RhdHVzKSB7Ci0JY2FzZSBIRVJNRVNfTElOS1NUQVRVU19OT1RfQ09OTkVDVEVEOgotCQlzID0gIk5vdCBDb25uZWN0ZWQiOwotCQlicmVhazsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0NPTk5FQ1RFRDoKLQkJcyA9ICJDb25uZWN0ZWQiOwotCQlicmVhazsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0RJU0NPTk5FQ1RFRDoKLQkJcyA9ICJEaXNjb25uZWN0ZWQiOwotCQlicmVhazsKLQljYXNlIEhFUk1FU19MSU5LU1RBVFVTX0FQX0NIQU5HRToKLQkJcyA9ICJBUCBDaGFuZ2VkIjsKLQkJYnJlYWs7Ci0JY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BUF9PVVRfT0ZfUkFOR0U6Ci0JCXMgPSAiQVAgT3V0IG9mIFJhbmdlIjsKLQkJYnJlYWs7Ci0JY2FzZSBIRVJNRVNfTElOS1NUQVRVU19BUF9JTl9SQU5HRToKLQkJcyA9ICJBUCBJbiBSYW5nZSI7Ci0JCWJyZWFrOwotCWNhc2UgSEVSTUVTX0xJTktTVEFUVVNfQVNTT0NfRkFJTEVEOgotCQlzID0gIkFzc29jaWF0aW9uIEZhaWxlZCI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXMgPSAiVU5LTk9XTiI7Ci0JfQotCQotCXByaW50ayhLRVJOX0RFQlVHICIlczogTmV3IGxpbmsgc3RhdHVzOiAlcyAoJTA0eClcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcywgc3RhdHVzKTsKLX0KLQotLyogU2VhcmNoIHNjYW4gcmVzdWx0cyBmb3IgcmVxdWVzdGVkIEJTU0lELCBqb2luIGl0IGlmIGZvdW5kICovCi1zdGF0aWMgdm9pZCBvcmlub2NvX2pvaW5fYXAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgam9pbl93b3JrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHJpdi0+bmRldjsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGpvaW5fcmVxIHsKLQkJdTggYnNzaWRbRVRIX0FMRU5dOwotCQlfX2xlMTYgY2hhbm5lbDsKLQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSByZXE7Ci0JY29uc3QgaW50IGF0b21fbGVuID0gb2Zmc2V0b2Yoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbywgYXRpbSk7Ci0Jc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbyAqYXRvbSA9IE5VTEw7Ci0JaW50IG9mZnNldCA9IDQ7Ci0JaW50IGZvdW5kID0gMDsKLQl1OCAqYnVmOwotCXUxNiBsZW47Ci0KLQkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yIHNjYW4gcmVzdWx0cyAqLwotCWJ1ZiA9IGttYWxsb2MoTUFYX1NDQU5fTEVOLCBHRlBfS0VSTkVMKTsKLQlpZiAoISBidWYpCi0JCXJldHVybjsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlnb3RvIGZhaWxfbG9jazsKLQotCS8qIFNhbml0eSBjaGVja3MgaW4gY2FzZSB1c2VyIGNoYW5nZWQgc29tZXRoaW5nIGluIHRoZSBtZWFudGltZSAqLwotCWlmICghIHByaXYtPmJzc2lkX2ZpeGVkKQotCQlnb3RvIG91dDsKLQotCWlmIChzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkgPT0gMCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBSZWFkIHNjYW4gcmVzdWx0cyBmcm9tIHRoZSBmaXJtd2FyZSAqLwotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsCi0JCQkgICAgICBIRVJNRVNfUklEX1NDQU5SRVNVTFRTVEFCTEUsCi0JCQkgICAgICBNQVhfU0NBTl9MRU4sICZsZW4sIGJ1Zik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBzY2FuIHJlc3VsdHNcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlsZW4gPSBIRVJNRVNfUkVDTEVOX1RPX0JZVEVTKGxlbik7Ci0KLQkvKiBHbyB0aHJvdWdoIHRoZSBzY2FuIHJlc3VsdHMgbG9va2luZyBmb3IgdGhlIGNoYW5uZWwgb2YgdGhlIEFQCi0JICogd2Ugd2VyZSByZXF1ZXN0ZWQgdG8gam9pbiAqLwotCWZvciAoOyBvZmZzZXQgKyBhdG9tX2xlbiA8PSBsZW47IG9mZnNldCArPSBhdG9tX2xlbikgewotCQlhdG9tID0gKHN0cnVjdCBwcmlzbTJfc2Nhbl9hcGluZm8gKikgKGJ1ZiArIG9mZnNldCk7Ci0JCWlmIChtZW1jbXAoJmF0b20tPmJzc2lkLCBwcml2LT5kZXNpcmVkX2Jzc2lkLCBFVEhfQUxFTikgPT0gMCkgewotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoISBmb3VuZCkgewotCQlERUJVRygxLCAiJXM6IFJlcXVlc3RlZCBBUCBub3QgZm91bmQgaW4gc2NhbiByZXN1bHRzXG4iLAotCQkgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltZW1jcHkocmVxLmJzc2lkLCBwcml2LT5kZXNpcmVkX2Jzc2lkLCBFVEhfQUxFTik7Ci0JcmVxLmNoYW5uZWwgPSBhdG9tLT5jaGFubmVsOwkvKiBib3RoIGFyZSBsaXR0bGUtZW5kaWFuICovCi0JZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GSk9JTlJFUVVFU1QsCi0JCQkJICAmcmVxKTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBpc3N1aW5nIGpvaW4gcmVxdWVzdFxuIiwgZGV2LT5uYW1lKTsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0gZmFpbF9sb2NrOgotCWtmcmVlKGJ1Zik7Ci19Ci0KLS8qIFNlbmQgbmV3IEJTU0lEIHRvIHVzZXJzcGFjZSAqLwotc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX2Jzc2lkX3dldmVudChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZGV2OwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKLQlpbnQgZXJyOwotCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DVVJSRU5UQlNTSUQsCi0JCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgd3JxdS5hcF9hZGRyLnNhX2RhdGEpOwotCWlmIChlcnIgIT0gMCkKLQkJcmV0dXJuOwotCi0Jd3JxdS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQotCS8qIFNlbmQgZXZlbnQgdG8gdXNlciBzcGFjZSAqLwotCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19zZW5kX2Fzc29jcmVxaWVfd2V2ZW50KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCWludCBlcnI7Ci0JdTggYnVmWzg4XTsKLQl1OCAqaWU7Ci0KLQlpZiAoIXByaXYtPmhhc193cGEpCi0JCXJldHVybjsKLQotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVF9BU1NPQ19SRVFfSU5GTywKLQkJCSAgICAgIHNpemVvZihidWYpLCBOVUxMLCAmYnVmKTsKLQlpZiAoZXJyICE9IDApCi0JCXJldHVybjsKLQotCWllID0gb3Jpbm9jb19nZXRfd3BhX2llKGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChpZSkgewotCQlpbnQgcmVtID0gc2l6ZW9mKGJ1ZikgLSAoaWUgLSAmYnVmWzBdKTsKLQkJd3JxdS5kYXRhLmxlbmd0aCA9IGllWzFdICsgMjsKLQkJaWYgKHdycXUuZGF0YS5sZW5ndGggPiByZW0pCi0JCQl3cnF1LmRhdGEubGVuZ3RoID0gcmVtOwotCi0JCWlmICh3cnF1LmRhdGEubGVuZ3RoKQotCQkJLyogU2VuZCBldmVudCB0byB1c2VyIHNwYWNlICovCi0JCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgSVdFVkFTU09DUkVRSUUsICZ3cnF1LCBpZSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfYXNzb2NyZXNwaWVfd2V2ZW50KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCWludCBlcnI7Ci0JdTggYnVmWzg4XTsgLyogVE9ETzogdmVyaWZ5IG1heCBzaXplIG9yIElXX0dFTkVSSUNfSUVfTUFYICovCi0JdTggKmllOwotCi0JaWYgKCFwcml2LT5oYXNfd3BhKQotCQlyZXR1cm47Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRfQVNTT0NfUkVTUF9JTkZPLAotCQkJICAgICAgc2l6ZW9mKGJ1ZiksIE5VTEwsICZidWYpOwotCWlmIChlcnIgIT0gMCkKLQkJcmV0dXJuOwotCi0JaWUgPSBvcmlub2NvX2dldF93cGFfaWUoYnVmLCBzaXplb2YoYnVmKSk7Ci0JaWYgKGllKSB7Ci0JCWludCByZW0gPSBzaXplb2YoYnVmKSAtIChpZSAtICZidWZbMF0pOwotCQl3cnF1LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOwotCQlpZiAod3JxdS5kYXRhLmxlbmd0aCA+IHJlbSkKLQkJCXdycXUuZGF0YS5sZW5ndGggPSByZW07Ci0KLQkJaWYgKHdycXUuZGF0YS5sZW5ndGgpCi0JCQkvKiBTZW5kIGV2ZW50IHRvIHVzZXIgc3BhY2UgKi8KLQkJCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWQVNTT0NSRVNQSUUsICZ3cnF1LCBpZSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3NlbmRfd2V2ZW50cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlLCB3ZXZlbnRfd29yayk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm47Ci0KLQlvcmlub2NvX3NlbmRfYXNzb2NyZXFpZV93ZXZlbnQocHJpdik7Ci0Jb3Jpbm9jb19zZW5kX2Fzc29jcmVzcGllX3dldmVudChwcml2KTsKLQlvcmlub2NvX3NlbmRfYnNzaWRfd2V2ZW50KHByaXYpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIG9yaW5vY29fY2xlYXJfc2Nhbl9yZXN1bHRzKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2Nhbl9hZ2UpCi17Ci0JaWYgKHByaXYtPmhhc19leHRfc2NhbikgewotCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICpic3M7Ci0JCXN0cnVjdCB4YnNzX2VsZW1lbnQgKnRtcF9ic3M7Ci0KLQkJLyogQmxvdyBhd2F5IGN1cnJlbnQgbGlzdCBvZiBzY2FuIHJlc3VsdHMgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzcywgdG1wX2JzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCQlpZiAoIXNjYW5fYWdlIHx8Ci0JCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPmxhc3Rfc2Nhbm5lZCArIHNjYW5fYWdlKSkgewotCQkJCWxpc3RfbW92ZV90YWlsKCZic3MtPmxpc3QsCi0JCQkJCSAgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7Ci0JCQkJLyogRG9uJ3QgYmxvdyBhd2F5IC0+bGlzdCwganVzdCBCU1MgZGF0YSAqLwotCQkJCW1lbXNldCgmYnNzLT5ic3MsIDAsIHNpemVvZihic3MtPmJzcykpOwotCQkJCWJzcy0+bGFzdF9zY2FubmVkID0gMDsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCXN0cnVjdCBic3NfZWxlbWVudCAqYnNzOwotCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKnRtcF9ic3M7Ci0KLQkJLyogQmxvdyBhd2F5IGN1cnJlbnQgbGlzdCBvZiBzY2FuIHJlc3VsdHMgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzcywgdG1wX2JzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7Ci0JCQlpZiAoIXNjYW5fYWdlIHx8Ci0JCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBic3MtPmxhc3Rfc2Nhbm5lZCArIHNjYW5fYWdlKSkgewotCQkJCWxpc3RfbW92ZV90YWlsKCZic3MtPmxpc3QsCi0JCQkJCSAgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7Ci0JCQkJLyogRG9uJ3QgYmxvdyBhd2F5IC0+bGlzdCwganVzdCBCU1MgZGF0YSAqLwotCQkJCW1lbXNldCgmYnNzLT5ic3MsIDAsIHNpemVvZihic3MtPmJzcykpOwotCQkJCWJzcy0+bGFzdF9zY2FubmVkID0gMDsKLQkJCX0KLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb19hZGRfZXh0X3NjYW5fcmVzdWx0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJCXN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICphdG9tKQotewotCXN0cnVjdCB4YnNzX2VsZW1lbnQgKmJzcyA9IE5VTEw7Ci0JaW50IGZvdW5kID0gMDsKLQotCS8qIFRyeSB0byB1cGRhdGUgYW4gZXhpc3RpbmcgYnNzIGZpcnN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzcy0+YnNzLmJzc2lkLCBhdG9tLT5ic3NpZCkpCi0JCQljb250aW51ZTsKLQkJLyogRVNTSUQgbGVuZ3RocyAqLwotCQlpZiAoYnNzLT5ic3MuZGF0YVsxXSAhPSBhdG9tLT5kYXRhWzFdKQotCQkJY29udGludWU7Ci0JCWlmIChtZW1jbXAoJmJzcy0+YnNzLmRhdGFbMl0sICZhdG9tLT5kYXRhWzJdLAotCQkJICAgYXRvbS0+ZGF0YVsxXSkpCi0JCQljb250aW51ZTsKLQkJZm91bmQgPSAxOwotCQlicmVhazsKLQl9Ci0KLQkvKiBHcmFiIGEgYnNzIG9mZiB0aGUgZnJlZSBsaXN0ICovCi0JaWYgKCFmb3VuZCAmJiAhbGlzdF9lbXB0eSgmcHJpdi0+YnNzX2ZyZWVfbGlzdCkpIHsKLQkJYnNzID0gbGlzdF9lbnRyeShwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQsCi0JCQkJIHN0cnVjdCB4YnNzX2VsZW1lbnQsIGxpc3QpOwotCQlsaXN0X2RlbChwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQpOwotCi0JCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJnByaXYtPmJzc19saXN0KTsKLQl9Ci0KLQlpZiAoYnNzKSB7Ci0JCS8qIEFsd2F5cyB1cGRhdGUgdGhlIEJTUyB0byBnZXQgbGF0ZXN0IGJlYWNvbiBpbmZvICovCi0JCW1lbWNweSgmYnNzLT5ic3MsIGF0b20sIHNpemVvZihic3MtPmJzcykpOwotCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IGppZmZpZXM7Ci0JfQotfQotCi1zdGF0aWMgaW50IG9yaW5vY29fcHJvY2Vzc19zY2FuX3Jlc3VsdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJdW5zaWduZWQgY2hhciAqYnVmLAotCQkJCQlpbnQgbGVuKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludAkJCW9mZnNldDsJCS8qIEluIHRoZSBzY2FuIGRhdGEgKi8KLQl1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICphdG9tOwotCWludAkJCWF0b21fbGVuOwotCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQlhdG9tX2xlbiA9IHNpemVvZihzdHJ1Y3QgYWdlcmVfc2Nhbl9hcGluZm8pOwotCQlvZmZzZXQgPSAwOwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQkvKiBMYWNrIG9mIGRvY3VtZW50YXRpb24gbmVjZXNzaXRhdGVzIHRoaXMgaGFjay4KLQkJICogRGlmZmVyZW50IGZpcm13YXJlcyBoYXZlIDY4IG9yIDc2IGJ5dGUgbG9uZyBhdG9tcy4KLQkJICogV2UgdHJ5IG1vZHVsbyBmaXJzdC4gIElmIHRoZSBsZW5ndGggZGl2aWRlcyBieSBib3RoLAotCQkgKiB3ZSBjaGVjayB3aGF0IHdvdWxkIGJlIHRoZSBjaGFubmVsIGluIHRoZSBzZWNvbmQKLQkJICogZnJhbWUgZm9yIGEgNjgtYnl0ZSBhdG9tLiAgNzYtYnl0ZSBhdG9tcyBoYXZlIDAgdGhlcmUuCi0JCSAqIFZhbGlkIGNoYW5uZWwgY2Fubm90IGJlIDAuICAqLwotCQlpZiAobGVuICUgNzYpCi0JCQlhdG9tX2xlbiA9IDY4OwotCQllbHNlIGlmIChsZW4gJSA2OCkKLQkJCWF0b21fbGVuID0gNzY7Ci0JCWVsc2UgaWYgKGxlbiA+PSAxMjkyICYmIGJ1Zls2OF0gPT0gMCkKLQkJCWF0b21fbGVuID0gNzY7Ci0JCWVsc2UKLQkJCWF0b21fbGVuID0gNjg7Ci0JCW9mZnNldCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKLQkJb2Zmc2V0ID0gNDsKLQkJaWYgKHByaXYtPmhhc19ob3N0c2NhbikgewotCQkJYXRvbV9sZW4gPSBsZTE2X3RvX2NwdXAoKF9fbGUxNiAqKWJ1Zik7Ci0JCQkvKiBTYW5pdHkgY2hlY2sgZm9yIGF0b21fbGVuICovCi0JCQlpZiAoYXRvbV9sZW4gPCBzaXplb2Yoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbykpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGF0b21fbGVuIGluIHNjYW4gIgotCQkJCSAgICAgICAiZGF0YTogJWRcbiIsIGRldi0+bmFtZSwgYXRvbV9sZW4pOwotCQkJCXJldHVybiAtRUlPOwotCQkJfQotCQl9IGVsc2UKLQkJCWF0b21fbGVuID0gb2Zmc2V0b2Yoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbywgYXRpbSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQkvKiBDaGVjayB0aGF0IHdlIGdvdCBhbiB3aG9sZSBudW1iZXIgb2YgYXRvbXMgKi8KLQlpZiAoKGxlbiAtIG9mZnNldCkgJSBhdG9tX2xlbikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmV4cGVjdGVkIHNjYW4gZGF0YSBsZW5ndGggJWQsICIKLQkJICAgICAgICJhdG9tX2xlbiAlZCwgb2Zmc2V0ICVkXG4iLCBkZXYtPm5hbWUsIGxlbiwKLQkJICAgICAgIGF0b21fbGVuLCBvZmZzZXQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhwcml2LCBtc2Vjc190b19qaWZmaWVzKDE1MDAwKSk7Ci0KLQkvKiBSZWFkIHRoZSBlbnRyaWVzIG9uZSBieSBvbmUgKi8KLQlmb3IgKDsgb2Zmc2V0ICsgYXRvbV9sZW4gPD0gbGVuOyBvZmZzZXQgKz0gYXRvbV9sZW4pIHsKLQkJaW50IGZvdW5kID0gMDsKLQkJc3RydWN0IGJzc19lbGVtZW50ICpic3MgPSBOVUxMOwotCi0JCS8qIEdldCBuZXh0IGF0b20gKi8KLQkJYXRvbSA9ICh1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICopIChidWYgKyBvZmZzZXQpOwotCi0JCS8qIFRyeSB0byB1cGRhdGUgYW4gZXhpc3RpbmcgYnNzIGZpcnN0ICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzLT5ic3MuYS5ic3NpZCwgYXRvbS0+YS5ic3NpZCkpCi0JCQkJY29udGludWU7Ci0JCQlpZiAobGUxNl90b19jcHUoYnNzLT5ic3MuYS5lc3NpZF9sZW4pICE9Ci0JCQkgICAgICBsZTE2X3RvX2NwdShhdG9tLT5hLmVzc2lkX2xlbikpCi0JCQkJY29udGludWU7Ci0JCQlpZiAobWVtY21wKGJzcy0+YnNzLmEuZXNzaWQsIGF0b20tPmEuZXNzaWQsCi0JCQkgICAgICBsZTE2X3RvX2NwdShhdG9tLT5hLmVzc2lkX2xlbikpKQotCQkJCWNvbnRpbnVlOwotCQkJZm91bmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBHcmFiIGEgYnNzIG9mZiB0aGUgZnJlZSBsaXN0ICovCi0JCWlmICghZm91bmQgJiYgIWxpc3RfZW1wdHkoJnByaXYtPmJzc19mcmVlX2xpc3QpKSB7Ci0JCQlic3MgPSBsaXN0X2VudHJ5KHByaXYtPmJzc19mcmVlX2xpc3QubmV4dCwKLQkJCQkJIHN0cnVjdCBic3NfZWxlbWVudCwgbGlzdCk7Ci0JCQlsaXN0X2RlbChwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQpOwotCi0JCQlsaXN0X2FkZF90YWlsKCZic3MtPmxpc3QsICZwcml2LT5ic3NfbGlzdCk7Ci0JCX0KLQotCQlpZiAoYnNzKSB7Ci0JCQkvKiBBbHdheXMgdXBkYXRlIHRoZSBCU1MgdG8gZ2V0IGxhdGVzdCBiZWFjb24gaW5mbyAqLwotCQkJbWVtY3B5KCZic3MtPmJzcywgYXRvbSwgc2l6ZW9mKGJzcy0+YnNzKSk7Ci0JCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IGppZmZpZXM7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19vcmlub2NvX2V2X2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUxNiBpbmZvZmlkOwotCXN0cnVjdCB7Ci0JCV9fbGUxNiBsZW47Ci0JCV9fbGUxNiB0eXBlOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGluZm87Ci0JaW50IGxlbiwgdHlwZTsKLQlpbnQgZXJyOwotCi0JLyogVGhpcyBpcyBhbiBhbnN3ZXIgdG8gYW4gSU5RVUlSRSBjb21tYW5kIHRoYXQgd2UgZGlkIGVhcmxpZXIsCi0JICogb3IgYW4gaW5mb3JtYXRpb24gImV2ZW50IiBnZW5lcmF0ZWQgYnkgdGhlIGNhcmQKLQkgKiBUaGUgY29udHJvbGxlciByZXR1cm4gdG8gdXMgYSBwc2V1ZG8gZnJhbWUgY29udGFpbmluZwotCSAqIHRoZSBpbmZvcm1hdGlvbiBpbiBxdWVzdGlvbiAtIEplYW4gSUkgKi8KLQlpbmZvZmlkID0gaGVybWVzX3JlYWRfcmVnbihodywgSU5GT0ZJRCk7Ci0KLQkvKiBSZWFkIHRoZSBpbmZvIGZyYW1lIGhlYWRlciAtIGRvbid0IHRyeSB0b28gaGFyZCAqLwotCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZpbmZvLCBzaXplb2YoaW5mbyksCi0JCQkgICAgICAgaW5mb2ZpZCwgMCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWFkaW5nIGluZm8gZnJhbWUuICIKLQkJICAgICAgICJGcmFtZSBkcm9wcGVkLlxuIiwgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm47Ci0JfQotCQotCWxlbiA9IEhFUk1FU19SRUNMRU5fVE9fQllURVMobGUxNl90b19jcHUoaW5mby5sZW4pKTsKLQl0eXBlID0gbGUxNl90b19jcHUoaW5mby50eXBlKTsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgSEVSTUVTX0lOUV9UQUxMSUVTOiB7Ci0JCXN0cnVjdCBoZXJtZXNfdGFsbGllc19mcmFtZSB0YWxsaWVzOwotCQlzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqd3N0YXRzID0gJnByaXYtPndzdGF0czsKLQkJCi0JCWlmIChsZW4gPiBzaXplb2YodGFsbGllcykpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUYWxsaWVzIGZyYW1lIHRvbyBsb25nICglZCBieXRlcylcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOwotCQkJbGVuID0gc2l6ZW9mKHRhbGxpZXMpOwotCQl9Ci0JCQotCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAmdGFsbGllcywgbGVuLAotCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOwotCQlpZiAoZXJyKQotCQkJYnJlYWs7Ci0JCQotCQkvKiBJbmNyZW1lbnQgb3VyIHZhcmlvdXMgY291bnRlcnMgKi8KLQkJLyogd3N0YXRzLT5kaXNjYXJkLm53aWQgLSBubyB3cm9uZyBCU1NJRCBzdHVmZiAqLwotCQl3c3RhdHMtPmRpc2NhcmQuY29kZSArPQotCQkJbGUxNl90b19jcHUodGFsbGllcy5SeFdFUFVuZGVjcnlwdGFibGUpOwotCQlpZiAobGVuID09IHNpemVvZih0YWxsaWVzKSkgIAotCQkJd3N0YXRzLT5kaXNjYXJkLmNvZGUgKz0KLQkJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4RGlzY2FyZHNfV0VQSUNWRXJyb3IpICsKLQkJCQlsZTE2X3RvX2NwdSh0YWxsaWVzLlJ4RGlzY2FyZHNfV0VQRXhjbHVkZWQpOwotCQl3c3RhdHMtPmRpc2NhcmQubWlzYyArPQotCQkJbGUxNl90b19jcHUodGFsbGllcy5UeERpc2NhcmRzV3JvbmdTQSk7Ci0JCXdzdGF0cy0+ZGlzY2FyZC5mcmFnbWVudCArPQotCQkJbGUxNl90b19jcHUodGFsbGllcy5SeE1zZ0luQmFkTXNnRnJhZ21lbnRzKTsKLQkJd3N0YXRzLT5kaXNjYXJkLnJldHJpZXMgKz0KLQkJCWxlMTZfdG9fY3B1KHRhbGxpZXMuVHhSZXRyeUxpbWl0RXhjZWVkZWQpOwotCQkvKiB3c3RhdHMtPm1pc3MuYmVhY29uIC0gbm8gbWF0Y2ggKi8KLQl9Ci0JYnJlYWs7Ci0JY2FzZSBIRVJNRVNfSU5RX0xJTktTVEFUVVM6IHsKLQkJc3RydWN0IGhlcm1lc19saW5rc3RhdHVzIGxpbmtzdGF0dXM7Ci0JCXUxNiBuZXdzdGF0dXM7Ci0JCWludCBjb25uZWN0ZWQ7Ci0KLQkJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGxlbiAhPSBzaXplb2YobGlua3N0YXR1cykpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmV4cGVjdGVkIHNpemUgZm9yIGxpbmtzdGF0dXMgZnJhbWUgKCVkIGJ5dGVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGxlbik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICZsaW5rc3RhdHVzLCBsZW4sCi0JCQkJICAgICAgIGluZm9maWQsIHNpemVvZihpbmZvKSk7Ci0JCWlmIChlcnIpCi0JCQlicmVhazsKLQkJbmV3c3RhdHVzID0gbGUxNl90b19jcHUobGlua3N0YXR1cy5saW5rc3RhdHVzKTsKLQotCQkvKiBTeW1ib2wgZmlybXdhcmUgdXNlcyAib3V0IG9mIHJhbmdlIiB0byBzaWduYWwgdGhhdAotCQkgKiB0aGUgaG9zdHNjYW4gZnJhbWUgY2FuIGJlIHJlcXVlc3RlZC4gICovCi0JCWlmIChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfT1VUX09GX1JBTkdFICYmCi0JCSAgICBwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfU1lNQk9MICYmCi0JCSAgICBwcml2LT5oYXNfaG9zdHNjYW4gJiYgcHJpdi0+c2Nhbl9pbnByb2dyZXNzKSB7Ci0JCQloZXJtZXNfaW5xdWlyZShodywgSEVSTUVTX0lOUV9IT1NUU0NBTl9TWU1CT0wpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljb25uZWN0ZWQgPSAobmV3c3RhdHVzID09IEhFUk1FU19MSU5LU1RBVFVTX0NPTk5FQ1RFRCkKLQkJCXx8IChuZXdzdGF0dXMgPT0gSEVSTUVTX0xJTktTVEFUVVNfQVBfQ0hBTkdFKQotCQkJfHwgKG5ld3N0YXR1cyA9PSBIRVJNRVNfTElOS1NUQVRVU19BUF9JTl9SQU5HRSk7Ci0KLQkJaWYgKGNvbm5lY3RlZCkKLQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQkJZWxzZSBpZiAoIWlnbm9yZV9kaXNjb25uZWN0KQotCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQotCQlpZiAobmV3c3RhdHVzICE9IHByaXYtPmxhc3RfbGlua3N0YXR1cykgewotCQkJcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gbmV3c3RhdHVzOwotCQkJcHJpbnRfbGlua3N0YXR1cyhkZXYsIG5ld3N0YXR1cyk7Ci0JCQkvKiBUaGUgaW5mbyBmcmFtZSBjb250YWlucyBvbmx5IG9uZSB3b3JkIHdoaWNoIGlzIHRoZQotCQkJICogc3RhdHVzIChzZWUgaGVybWVzLmgpLiBUaGUgc3RhdHVzIGlzIHByZXR0eSBib3JpbmcKLQkJCSAqIGluIGl0c2VsZiwgdGhhdCdzIHdoeSB3ZSBleHBvcnQgdGhlIG5ldyBCU1NJRC4uLgotCQkJICogSmVhbiBJSSAqLwotCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+d2V2ZW50X3dvcmspOwotCQl9Ci0JfQotCWJyZWFrOwotCWNhc2UgSEVSTUVTX0lOUV9TQ0FOOgotCQlpZiAoIXByaXYtPnNjYW5faW5wcm9ncmVzcyAmJiBwcml2LT5ic3NpZF9maXhlZCAmJgotCQkgICAgcHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMKSB7Ci0JCQlzY2hlZHVsZV93b3JrKCZwcml2LT5qb2luX3dvcmspOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBIRVJNRVNfSU5RX0hPU1RTQ0FOOgotCWNhc2UgSEVSTUVTX0lOUV9IT1NUU0NBTl9TWU1CT0w6IHsKLQkJLyogUmVzdWx0IG9mIGEgc2Nhbm5pbmcuIENvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0Ci0JCSAqIGNlbGxzIGluIHRoZSB2aWNpbml0eSAtIEplYW4gSUkgKi8KLQkJdW5pb24gaXdyZXFfZGF0YQl3cnF1OwotCQl1bnNpZ25lZCBjaGFyICpidWY7Ci0KLQkJLyogU2NhbiBpcyBubyBsb25nZXIgaW4gcHJvZ3Jlc3MgKi8KLQkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMDsKLQotCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJaWYgKGxlbiA+IDQwOTYpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBTY2FuIHJlc3VsdHMgdG9vIGxhcmdlICglZCBieXRlcylcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBBbGxvY2F0ZSBidWZmZXIgZm9yIHJlc3VsdHMgKi8KLQkJYnVmID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpOwotCQlpZiAoYnVmID09IE5VTEwpCi0JCQkvKiBObyBtZW1vcnksIHNvIGNhbid0IHByaW50aygpLi4uICovCi0JCQlicmVhazsKLQotCQkvKiBSZWFkIHNjYW4gZGF0YSAqLwotCQllcnIgPSBoZXJtZXNfYmFwX3ByZWFkKGh3LCBJUlFfQkFQLCAodm9pZCAqKSBidWYsIGxlbiwKLQkJCQkgICAgICAgaW5mb2ZpZCwgc2l6ZW9mKGluZm8pKTsKLQkJaWYgKGVycikgewotCQkJa2ZyZWUoYnVmKTsKLQkJCWJyZWFrOwotCQl9Ci0KLSNpZmRlZiBPUklOT0NPX0RFQlVHCi0JCXsKLQkJCWludAlpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlNjYW4gcmVzdWx0IFslMDJYIiwgYnVmWzBdKTsKLQkJCWZvcihpID0gMTsgaSA8IChsZW4gKiAyKTsgaSsrKQotCQkJCXByaW50aygiOiUwMlgiLCBidWZbaV0pOwotCQkJcHJpbnRrKCJdXG4iKTsKLQkJfQotI2VuZGlmCS8qIE9SSU5PQ09fREVCVUcgKi8KLQotCQlpZiAob3Jpbm9jb19wcm9jZXNzX3NjYW5fcmVzdWx0cyhkZXYsIGJ1ZiwgbGVuKSA9PSAwKSB7Ci0JCQkvKiBTZW5kIGFuIGVtcHR5IGV2ZW50IHRvIHVzZXIgc3BhY2UuCi0JCQkgKiBXZSBkb24ndCBzZW5kIHRoZSByZWNlaXZlZCBkYXRhIG9uIHRoZSBldmVudCBiZWNhdXNlCi0JCQkgKiBpdCB3b3VsZCByZXF1aXJlIHVzIHRvIGRvIGNvbXBsZXggdHJhbnNjb2RpbmcsIGFuZAotCQkJICogd2Ugd2FudCB0byBtaW5pbWlzZSB0aGUgd29yayBkb25lIGluIHRoZSBpcnEgaGFuZGxlcgotCQkJICogVXNlIGEgcmVxdWVzdCB0byBleHRyYWN0IHRoZSBkYXRhIC0gSmVhbiBJSSAqLwotCQkJd3JxdS5kYXRhLmxlbmd0aCA9IDA7Ci0JCQl3cnF1LmRhdGEuZmxhZ3MgPSAwOwotCQkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7Ci0JCX0KLQkJa2ZyZWUoYnVmKTsKLQl9Ci0JYnJlYWs7Ci0JY2FzZSBIRVJNRVNfSU5RX0NIQU5ORUxJTkZPOgotCXsKLQkJc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmJzczsKLQotCQlpZiAoIXByaXYtPnNjYW5faW5wcm9ncmVzcykgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBHb3QgY2hhbmluZm8gd2l0aG91dCBzY2FuLCAiCi0JCQkgICAgICAgImxlbj0lZFxuIiwgZGV2LT5uYW1lLCBsZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBBbiBlbXB0eSByZXN1bHQgaW5kaWNhdGVzIHRoYXQgdGhlIHNjYW4gaXMgY29tcGxldGUgKi8KLQkJaWYgKGxlbiA9PSAwKSB7Ci0JCQl1bmlvbiBpd3JlcV9kYXRhCXdycXU7Ci0KLQkJCS8qIFNjYW4gaXMgbm8gbG9uZ2VyIGluIHByb2dyZXNzICovCi0JCQlwcml2LT5zY2FuX2lucHJvZ3Jlc3MgPSAwOwotCi0JCQl3cnF1LmRhdGEubGVuZ3RoID0gMDsKLQkJCXdycXUuZGF0YS5mbGFncyA9IDA7Ci0JCQl3aXJlbGVzc19zZW5kX2V2ZW50KGRldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogU2FuaXR5IGNoZWNrICovCi0JCWVsc2UgaWYgKGxlbiA+IHNpemVvZigqYnNzKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogRXh0IHNjYW4gcmVzdWx0cyB0b28gbGFyZ2UgKCVkIGJ5dGVzKS4gIgotCQkJICAgICAgICJUcnVuY2F0aW5nIHJlc3VsdHMgdG8gJXpkIGJ5dGVzLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGxlbiwgc2l6ZW9mKCpic3MpKTsKLQkJCWxlbiA9IHNpemVvZigqYnNzKTsKLQkJfSBlbHNlIGlmIChsZW4gPCAob2Zmc2V0b2Yoc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8sCi0JCQkJCSAgIGRhdGEpICsgMikpIHsKLQkJCS8qIERyb3AgdGhpcyByZXN1bHQgbm93IHNvIHdlIGRvbid0IGhhdmUgdG8KLQkJCSAqIGtlZXAgY2hlY2tpbmcgbGF0ZXIgKi8KLQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSAgICAgICAiJXM6IEV4dCBzY2FuIHJlc3VsdHMgdG9vIHNob3J0ICglZCBieXRlcylcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBsZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlic3MgPSBrbWFsbG9jKHNpemVvZigqYnNzKSwgR0ZQX0FUT01JQyk7Ci0JCWlmIChic3MgPT0gTlVMTCkKLQkJCWJyZWFrOwotCi0JCS8qIFJlYWQgc2NhbiBkYXRhICovCi0JCWVyciA9IGhlcm1lc19iYXBfcHJlYWQoaHcsIElSUV9CQVAsICh2b2lkICopIGJzcywgbGVuLAotCQkJCSAgICAgICBpbmZvZmlkLCBzaXplb2YoaW5mbykpOwotCQlpZiAoZXJyKSB7Ci0JCQlrZnJlZShic3MpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlvcmlub2NvX2FkZF9leHRfc2Nhbl9yZXN1bHQocHJpdiwgYnNzKTsKLQotCQlrZnJlZShic3MpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBIRVJNRVNfSU5RX1NFQ19TVEFUX0FHRVJFOgotCQkvKiBTZWN1cml0eSBzdGF0dXMgKEFnZXJlIHNwZWNpZmljKSAqLwotCQkvKiBJZ25vcmUgdGhpcyBmcmFtZSBmb3Igbm93ICovCi0JCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUpCi0JCQlicmVhazsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBVbmtub3duIGluZm9ybWF0aW9uIGZyYW1lIHJlY2VpdmVkOiAiCi0JCSAgICAgICAidHlwZSAweCUwNHgsIGxlbmd0aCAlZFxuIiwgZGV2LT5uYW1lLCB0eXBlLCBsZW4pOwotCQkvKiBXZSBkb24ndCBhY3R1YWxseSBkbyBhbnl0aGluZyBhYm91dCBpdCAqLwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fb3Jpbm9jb19ldl9pbmZkcm9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGhlcm1lc190ICpodykKLXsKLQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEluZm9ybWF0aW9uIGZyYW1lIGxvc3QuXG4iLCBkZXYtPm5hbWUpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJbnRlcm5hbCBoYXJkd2FyZSBjb250cm9sIHJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWludCBfX29yaW5vY29fdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsgLyoganVzdCB0byBtYWtlIHN1cmUgKi8KLQotCWVyciA9IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIGNvbmZpZ3VyaW5nIGNhcmRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogRmlyZSB0aGluZ3MgdXAgYWdhaW4gKi8KLQloZXJtZXNfc2V0X2lycW1hc2soaHcsIE9SSU5PQ09fSU5URU4pOwotCWVyciA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBlbmFibGluZyBNQUMgcG9ydFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBfX29yaW5vY29fZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQlpZiAoISBwcml2LT5od191bmF2YWlsYWJsZSkgewotCQlpZiAoISBwcml2LT5icm9rZW5fZGlzYWJsZXBvcnQpIHsKLQkJCWVyciA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOwotCQkJaWYgKGVycikgewotCQkJCS8qIFNvbWUgZmlybXdhcmVzIChlLmcuIEludGVyc2lsIDEuMy54KSBzZWVtCi0JCQkJICogdG8gaGF2ZSBwcm9ibGVtcyBkaXNhYmxpbmcgdGhlIHBvcnQsIG9oCi0JCQkJICogd2VsbCwgdG9vIGJhZC4gKi8KLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgJWQgZGlzYWJsaW5nIE1BQyBwb3J0XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQkJcHJpdi0+YnJva2VuX2Rpc2FibGVwb3J0ID0gMTsKLQkJCX0KLQkJfQotCQloZXJtZXNfc2V0X2lycW1hc2soaHcsIDApOwotCQloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIDB4ZmZmZik7Ci0JfQotCQotCS8qIGZpcm13YXJlIHdpbGwgaGF2ZSB0byByZWFzc29jaWF0ZSAqLwotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JcHJpdi0+bGFzdF9saW5rc3RhdHVzID0gMHhmZmZmOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19hbGxvY2F0ZV9maWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaGVybWVzICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyOwotCi0JZXJyID0gaGVybWVzX2FsbG9jYXRlKGh3LCBwcml2LT5uaWNidWZfc2l6ZSwgJnByaXYtPnR4ZmlkKTsKLQlpZiAoZXJyID09IC1FSU8gJiYgcHJpdi0+bmljYnVmX3NpemUgPiBUWF9OSUNCVUZfU0laRV9CVUcpIHsKLQkJLyogVHJ5IHdvcmthcm91bmQgZm9yIG9sZCBTeW1ib2wgZmlybXdhcmUgYnVnICovCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmaXJtd2FyZSBBTExPQyBidWcgZGV0ZWN0ZWQgIgotCQkgICAgICAgIihvbGQgU3ltYm9sIGZpcm13YXJlPykuIFRyeWluZyB0byB3b3JrIGFyb3VuZC4uLiAiLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCi0JCXByaXYtPm5pY2J1Zl9zaXplID0gVFhfTklDQlVGX1NJWkVfQlVHOwotCQllcnIgPSBoZXJtZXNfYWxsb2NhdGUoaHcsIHByaXYtPm5pY2J1Zl9zaXplLCAmcHJpdi0+dHhmaWQpOwotCQlpZiAoZXJyKQotCQkJcHJpbnRrKCJmYWlsZWQhXG4iKTsKLQkJZWxzZQotCQkJcHJpbnRrKCJvay5cbiIpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0KLQllcnIgPSBoZXJtZXNfaW5pdChodyk7Ci0JaWYgKHByaXYtPmRvX2Z3X2Rvd25sb2FkICYmICFlcnIpIHsKLQkJZXJyID0gb3Jpbm9jb19kb3dubG9hZChwcml2KTsKLQkJaWYgKGVycikKLQkJCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gMDsKLQl9Ci0JaWYgKCFlcnIpCi0JCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9fb3Jpbm9jb19od19zZXRfYml0cmF0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChwcml2LT5iaXRyYXRlbW9kZSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQlVHOiBJbnZhbGlkIGJpdHJhdGUgbW9kZSAlZFxuIiwKLQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIHByaXYtPmJpdHJhdGVtb2RlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTCwKLQkJCQkJICAgYml0cmF0ZV90YWJsZVtwcml2LT5iaXRyYXRlbW9kZV0uYWdlcmVfdHhyYXRlY3RybCk7Ci0JCWJyZWFrOwotCWNhc2UgRklSTVdBUkVfVFlQRV9JTlRFUlNJTDoKLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTCwKLQkJCQkJICAgYml0cmF0ZV90YWJsZVtwcml2LT5iaXRyYXRlbW9kZV0uaW50ZXJzaWxfdHhyYXRlY3RybCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qIFNldCBmaXhlZCBBUCBhZGRyZXNzICovCi1zdGF0aWMgaW50IF9fb3Jpbm9jb19od19zZXRfd2FwKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaW50IHJvYW1pbmdfZmxhZzsKLQlpbnQgZXJyID0gMDsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCS8qIG5vdCBzdXBwb3J0ZWQgKi8KLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgotCQlpZiAocHJpdi0+YnNzaWRfZml4ZWQpCi0JCQlyb2FtaW5nX2ZsYWcgPSAyOwotCQllbHNlCi0JCQlyb2FtaW5nX2ZsYWcgPSAxOwotCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZST0FNSU5HTU9ERSwKLQkJCQkJICAgcm9hbWluZ19mbGFnKTsKLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKLQkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZNQU5EQVRPUllCU1NJRF9TWU1CT0wsCi0JCQkJCSAgJnByaXYtPmRlc2lyZWRfYnNzaWQpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogQ2hhbmdlIHRoZSBXRVAga2V5cyBhbmQvb3IgdGhlIGN1cnJlbnQga2V5cy4gIENhbiBiZSBjYWxsZWQKLSAqIGVpdGhlciBmcm9tIF9fb3Jpbm9jb19od19zZXR1cF9lbmMoKSBvciBkaXJlY3RseSBmcm9tCi0gKiBvcmlub2NvX2lvY3RsX3NldGl3ZW5jb2RlKCkuICBJbiB0aGUgbGF0ZXIgY2FzZSB0aGUgYXNzb2NpYXRpb24KLSAqIHdpdGggdGhlIEFQIGlzIG5vdCBicm9rZW4gKGlmIHRoZSBmaXJtd2FyZSBjYW4gaGFuZGxlIGl0KSwKLSAqIHdoaWNoIGlzIG5lZWRlZCBmb3IgODAyLjF4IGltcGxlbWVudGF0aW9ucy4gKi8KLXN0YXRpYyBpbnQgX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdikKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0KLQlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKLQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GV0VQS0VZU19BR0VSRSwKLQkJCQkJICAmcHJpdi0+a2V5cyk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GVFhLRVlfQUdFUkUsCi0JCQkJCSAgIHByaXYtPnR4X2tleSk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX1NZTUJPTDoKLQkJewotCQkJaW50IGtleWxlbjsKLQkJCWludCBpOwotCi0JCQkvKiBGb3JjZSB1bmlmb3JtIGtleSBsZW5ndGggdG8gd29yayBhcm91bmQgZmlybXdhcmUgYnVncyAqLwotCQkJa2V5bGVuID0gbGUxNl90b19jcHUocHJpdi0+a2V5c1twcml2LT50eF9rZXldLmxlbik7Ci0JCQkKLQkJCWlmIChrZXlsZW4gPiBMQVJHRV9LRVlfU0laRSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEJVRzogS2V5ICVkIGhhcyBvdmVyc2l6ZSBsZW5ndGggJWQuXG4iLAotCQkJCSAgICAgICBwcml2LT5uZGV2LT5uYW1lLCBwcml2LT50eF9rZXksIGtleWxlbik7Ci0JCQkJcmV0dXJuIC1FMkJJRzsKLQkJCX0KLQotCQkJLyogV3JpdGUgYWxsIDQga2V5cyAqLwotCQkJZm9yKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfS0VZUzsgaSsrKSB7Ci0JCQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCi0JCQkJCQkgICAgICAgSEVSTUVTX1JJRF9DTkZERUZBVUxUS0VZMCArIGksCi0JCQkJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihrZXlsZW4pLAotCQkJCQkJICAgICAgIHByaXYtPmtleXNbaV0uZGF0YSk7Ci0JCQkJaWYgKGVycikKLQkJCQkJcmV0dXJuIGVycjsKLQkJCX0KLQotCQkJLyogV3JpdGUgdGhlIGluZGV4IG9mIHRoZSBrZXkgdXNlZCBpbiB0cmFuc21pc3Npb24gKi8KLQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgIEhFUk1FU19SSURfQ05GV0VQREVGQVVMVEtFWUlELAotCQkJCQkJICAgcHJpdi0+dHhfa2V5KTsKLQkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX29yaW5vY29faHdfc2V0dXBfZW5jKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCWludCBtYXN0ZXJfd2VwX2ZsYWc7Ci0JaW50IGF1dGhfZmxhZzsKLQlpbnQgZW5jX2ZsYWc7Ci0KLQkvKiBTZXR1cCBXRVAga2V5cyBmb3IgV0VQIGFuZCBXUEEgKi8KLQlpZiAocHJpdi0+ZW5jb2RlX2FsZykKLQkJX19vcmlub2NvX2h3X3NldHVwX3dlcGtleXMocHJpdik7Ci0KLQlpZiAocHJpdi0+d2VwX3Jlc3RyaWN0KQotCQlhdXRoX2ZsYWcgPSBIRVJNRVNfQVVUSF9TSEFSRURfS0VZOwotCWVsc2UKLQkJYXV0aF9mbGFnID0gSEVSTUVTX0FVVEhfT1BFTjsKLQotCWlmIChwcml2LT53cGFfZW5hYmxlZCkKLQkJZW5jX2ZsYWcgPSAyOwotCWVsc2UgaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApCi0JCWVuY19mbGFnID0gMTsKLQllbHNlCi0JCWVuY19mbGFnID0gMDsKLQotCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCWNhc2UgRklSTVdBUkVfVFlQRV9BR0VSRTogLyogQWdlcmUgc3R5bGUgV0VQICovCi0JCWlmIChwcml2LT5lbmNvZGVfYWxnID09IElXX0VOQ09ERV9BTEdfV0VQKSB7Ci0JCQkvKiBFbmFibGUgdGhlIHNoYXJlZC1rZXkgYXV0aGVudGljYXRpb24uICovCi0JCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQkgICBIRVJNRVNfUklEX0NORkFVVEhFTlRJQ0FUSU9OX0FHRVJFLAotCQkJCQkJICAgYXV0aF9mbGFnKTsKLQkJfQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GV0VQRU5BQkxFRF9BR0VSRSwKLQkJCQkJICAgZW5jX2ZsYWcpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlpZiAocHJpdi0+aGFzX3dwYSkgewotCQkJLyogU2V0IFdQQSBrZXkgbWFuYWdlbWVudCAqLwotCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCSAgSEVSTUVTX1JJRF9DTkZTRVRXUEFBVVRITUdNVFNVSVRFX0FHRVJFLAotCQkJCSAgcHJpdi0+a2V5X21nbXQpOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw6IC8qIEludGVyc2lsIHN0eWxlIFdFUCAqLwotCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6IC8qIFN5bWJvbCBzdHlsZSBXRVAgKi8KLQkJaWYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19XRVApIHsKLQkJCWlmIChwcml2LT53ZXBfcmVzdHJpY3QgfHwKLQkJCSAgICAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCkpCi0JCQkJbWFzdGVyX3dlcF9mbGFnID0gSEVSTUVTX1dFUF9QUklWQUNZX0lOVk9LRUQgfAotCQkJCQkJICBIRVJNRVNfV0VQX0VYQ0xfVU5FTkNSWVBURUQ7Ci0JCQllbHNlCi0JCQkJbWFzdGVyX3dlcF9mbGFnID0gSEVSTUVTX1dFUF9QUklWQUNZX0lOVk9LRUQ7Ci0KLQkJCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJCSAgIEhFUk1FU19SSURfQ05GQVVUSEVOVElDQVRJT04sCi0JCQkJCQkgICBhdXRoX2ZsYWcpOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9IGVsc2UKLQkJCW1hc3Rlcl93ZXBfZmxhZyA9IDA7Ci0KLQkJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQotCQkJbWFzdGVyX3dlcF9mbGFnIHw9IEhFUk1FU19XRVBfSE9TVF9ERUNSWVBUOwotCi0JCS8qIE1hc3RlciBXRVAgc2V0dGluZyA6IG9uL29mZiAqLwotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GV0VQRkxBR1NfSU5URVJTSUwsCi0JCQkJCSAgIG1hc3Rlcl93ZXBfZmxhZyk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyOwkKLQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoga2V5IG11c3QgYmUgMzIgYnl0ZXMsIGluY2x1ZGluZyB0aGUgdHggYW5kIHJ4IE1JQyBrZXlzLgotICogcnNjIG11c3QgYmUgOCBieXRlcwotICogdHNjIG11c3QgYmUgOCBieXRlcyBvciBOVUxMCi0gKi8KLXN0YXRpYyBpbnQgX19vcmlub2NvX2h3X3NldF90a2lwX2tleShoZXJtZXNfdCAqaHcsIGludCBrZXlfaWR4LCBpbnQgc2V0X3R4LAotCQkJCSAgICAgdTggKmtleSwgdTggKnJzYywgdTggKnRzYykKLXsKLQlzdHJ1Y3QgewotCQlfX2xlMTYgaWR4OwotCQl1OCByc2NbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07Ci0JCXU4IGtleVtUS0lQX0tFWUxFTl07Ci0JCXU4IHR4X21pY1tNSUNfS0VZTEVOXTsKLQkJdTggcnhfbWljW01JQ19LRVlMRU5dOwotCQl1OCB0c2NbSVdfRU5DT0RFX1NFUV9NQVhfU0laRV07Ci0JfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYnVmOwotCWludCByZXQ7Ci0JaW50IGVycjsKLQlpbnQgazsKLQl1MTYgeG1pdHRpbmc7Ci0KLQlrZXlfaWR4ICY9IDB4MzsKLQotCWlmIChzZXRfdHgpCi0JCWtleV9pZHggfD0gMHg4MDAwOwotCi0JYnVmLmlkeCA9IGNwdV90b19sZTE2KGtleV9pZHgpOwotCW1lbWNweShidWYua2V5LCBrZXksCi0JICAgICAgIHNpemVvZihidWYua2V5KSArIHNpemVvZihidWYudHhfbWljKSArIHNpemVvZihidWYucnhfbWljKSk7Ci0KLQlpZiAocnNjID09IE5VTEwpCi0JCW1lbXNldChidWYucnNjLCAwLCBzaXplb2YoYnVmLnJzYykpOwotCWVsc2UKLQkJbWVtY3B5KGJ1Zi5yc2MsIHJzYywgc2l6ZW9mKGJ1Zi5yc2MpKTsKLQotCWlmICh0c2MgPT0gTlVMTCkgewotCQltZW1zZXQoYnVmLnRzYywgMCwgc2l6ZW9mKGJ1Zi50c2MpKTsKLQkJYnVmLnRzY1s0XSA9IDB4MTA7Ci0JfSBlbHNlIHsKLQkJbWVtY3B5KGJ1Zi50c2MsIHRzYywgc2l6ZW9mKGJ1Zi50c2MpKTsKLQl9Ci0KLQkvKiBXYWl0IHVwdG8gMTAwbXMgZm9yIHR4IHF1ZXVlIHRvIGVtcHR5ICovCi0JayA9IDEwMDsKLQlkbyB7Ci0JCWstLTsKLQkJdWRlbGF5KDEwMDApOwotCQlyZXQgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9UWFFVRVVFRU1QVFksCi0JCQkJCSAgJnhtaXR0aW5nKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKChrID4gMCkgJiYgeG1pdHRpbmcpOwotCi0JaWYgKGsgPT0gMCkKLQkJcmV0ID0gLUVUSU1FRE9VVDsKLQotCWVyciA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAotCQkJCSAgSEVSTUVTX1JJRF9DTkZBRERERUZBVUxUVEtJUEtFWV9BR0VSRSwKLQkJCQkgICZidWYpOwotCi0JcmV0dXJuIHJldCA/IHJldCA6IGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2NsZWFyX3RraXBfa2V5KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCi0JCQkJICBpbnQga2V5X2lkeCkKLXsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQotCW1lbXNldCgmcHJpdi0+dGtpcF9rZXlba2V5X2lkeF0sIDAsIHNpemVvZihwcml2LT50a2lwX2tleVtrZXlfaWR4XSkpOwotCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkgICBIRVJNRVNfUklEX0NORlJFTURFRkFVTFRUS0lQS0VZX0FHRVJFLAotCQkJCSAgIGtleV9pZHgpOwotCWlmIChlcnIpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciAlZCBjbGVhcmluZyBUS0lQIGtleSAlZFxuIiwKLQkJICAgICAgIHByaXYtPm5kZXYtPm5hbWUsIGVyciwga2V5X2lkeCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBfX29yaW5vY29fcHJvZ3JhbV9yaWRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnI7Ci0Jc3RydWN0IGhlcm1lc19pZHN0cmluZyBpZGJ1ZjsKLQotCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgKi8KLQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZPV05NQUNBRERSLAotCQkJICAgICAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4oRVRIX0FMRU4pLCBkZXYtPmRldl9hZGRyKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgTUFDIGFkZHJlc3NcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IHVwIHRoZSBsaW5rIG1vZGUgKi8KLQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUE9SVFRZUEUsCi0JCQkJICAgcHJpdi0+cG9ydF90eXBlKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgcG9ydCB0eXBlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQkvKiBTZXQgdGhlIGNoYW5uZWwvZnJlcXVlbmN5ICovCi0JaWYgKHByaXYtPmNoYW5uZWwgIT0gMCAmJiBwcml2LT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpIHsKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORk9XTkNIQU5ORUwsCi0JCQkJCSAgIHByaXYtPmNoYW5uZWwpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIGNoYW5uZWwgJWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIsIHByaXYtPmNoYW5uZWwpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCWlmIChwcml2LT5oYXNfaWJzcykgewotCQl1MTYgY3JlYXRlaWJzczsKLQotCQlpZiAoKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKSAmJiAocHJpdi0+Y3JlYXRlaWJzcykpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUaGlzIGZpcm13YXJlIHJlcXVpcmVzIGFuICIKLQkJCSAgICAgICAiRVNTSUQgaW4gSUJTUy1BZC1Ib2MgbW9kZS5cbiIsIGRldi0+bmFtZSk7Ci0JCQkvKiBXaXRoIHd2bGFuX2NzLCBpbiB0aGlzIGNhc2UsIHdlIHdvdWxkIGNyYXNoLgotCQkJICogaG9wZWZ1bGx5LCB0aGlzIGRyaXZlciB3aWxsIGJlaGF2ZSBiZXR0ZXIuLi4KLQkJCSAqIEplYW4gSUkgKi8KLQkJCWNyZWF0ZWlic3MgPSAwOwotCQl9IGVsc2UgewotCQkJY3JlYXRlaWJzcyA9IHByaXYtPmNyZWF0ZWlic3M7Ci0JCX0KLQkJCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZDUkVBVEVJQlNTLAotCQkJCQkgICBjcmVhdGVpYnNzKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBDUkVBVEVJQlNTXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgdGhlIGRlc2lyZWQgQlNTSUQgKi8KLQllcnIgPSBfX29yaW5vY29faHdfc2V0X3dhcChwcml2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgQVAgYWRkcmVzc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JLyogU2V0IHRoZSBkZXNpcmVkIEVTU0lEICovCi0JaWRidWYubGVuID0gY3B1X3RvX2xlMTYoc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpKTsKLQltZW1jcHkoJmlkYnVmLnZhbCwgcHJpdi0+ZGVzaXJlZF9lc3NpZCwgc2l6ZW9mKGlkYnVmLnZhbCkpOwotCS8qIFdpblhQIHdhbnRzIHBhcnRuZXIgdG8gY29uZmlndXJlIE9XTlNTSUQgZXZlbiBpbiBJQlNTIG1vZGUuIChqaW1jKSAqLwotCWVyciA9IGhlcm1lc193cml0ZV9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTlNTSUQsCi0JCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkrMiksCi0JCQkgICAgICAgJmlkYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgT1dOU1NJRFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GREVTSVJFRFNTSUQsCi0JCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCkrMiksCi0JCQkgICAgICAgJmlkYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgREVTSVJFRFNTSURcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JLyogU2V0IHRoZSBzdGF0aW9uIG5hbWUgKi8KLQlpZGJ1Zi5sZW4gPSBjcHVfdG9fbGUxNihzdHJsZW4ocHJpdi0+bmljaykpOwotCW1lbWNweSgmaWRidWYudmFsLCBwcml2LT5uaWNrLCBzaXplb2YoaWRidWYudmFsKSk7Ci0JZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTkFNRSwKLQkJCSAgICAgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKHN0cmxlbihwcml2LT5uaWNrKSsyKSwKLQkJCSAgICAgICAmaWRidWYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBuaWNrbmFtZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgQVAgZGVuc2l0eSAqLwotCWlmIChwcml2LT5oYXNfc2Vuc2l0aXZpdHkpIHsKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLAotCQkJCQkgICBwcml2LT5hcF9kZW5zaXR5KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEVycm9yICVkIHNldHRpbmcgU1lTVEVNU0NBTEUuICAiCi0JCQkgICAgICAgIkRpc2FibGluZyBzZW5zaXRpdml0eSBjb250cm9sXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQotCQkJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMDsKLQkJfQotCX0KLQotCS8qIFNldCBSVFMgdGhyZXNob2xkICovCi0JZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlJUU1RIUkVTSE9MRCwKLQkJCQkgICBwcml2LT5ydHNfdGhyZXNoKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgUlRTIHRocmVzaG9sZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiBTZXQgZnJhZ21lbnRhdGlvbiB0aHJlc2hvbGQgb3IgTVdPIHJvYnVzdG5lc3MgKi8KLQlpZiAocHJpdi0+aGFzX213bykKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKLQkJCQkJICAgcHJpdi0+bXdvX3JvYnVzdCk7Ci0JZWxzZQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GRlJBR01FTlRBVElPTlRIUkVTSE9MRCwKLQkJCQkJICAgcHJpdi0+ZnJhZ190aHJlc2gpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBmcmFnbWVudGF0aW9uXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCBiaXRyYXRlICovCi0JZXJyID0gX19vcmlub2NvX2h3X3NldF9iaXRyYXRlKHByaXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBiaXRyYXRlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCS8qIFNldCBwb3dlciBtYW5hZ2VtZW50ICovCi0JaWYgKHByaXYtPmhhc19wbSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GUE1FTkFCTEVELAotCQkJCQkgICBwcml2LT5wbV9vbik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZNVUxUSUNBU1RSRUNFSVZFLAotCQkJCQkgICBwcml2LT5wbV9tY2FzdCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgdXAgUE1cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwKLQkJCQkJICAgcHJpdi0+cG1fcGVyaW9kKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyB1cCBQTVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWVyciA9IGhlcm1lc193cml0ZV93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICAgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sCi0JCQkJCSAgIHByaXYtPnBtX3RpbWVvdXQpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIHVwIFBNXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQkvKiBTZXQgcHJlYW1ibGUgLSBvbmx5IGZvciBTeW1ib2wgc28gZmFyLi4uICovCi0JaWYgKHByaXYtPmhhc19wcmVhbWJsZSkgewotCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCSAgIEhFUk1FU19SSURfQ05GUFJFQU1CTEVfU1lNQk9MLAotCQkJCQkgICBwcml2LT5wcmVhbWJsZSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgcHJlYW1ibGVcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCS8qIFNldCB1cCBlbmNyeXB0aW9uICovCi0JaWYgKHByaXYtPmhhc193ZXAgfHwgcHJpdi0+aGFzX3dwYSkgewotCQllcnIgPSBfX29yaW5vY29faHdfc2V0dXBfZW5jKHByaXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBhY3RpdmF0aW5nIGVuY3J5cHRpb25cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUikgewotCQkvKiBFbmFibGUgbW9uaXRvciBtb2RlICovCi0JCWRldi0+dHlwZSA9IEFSUEhSRF9JRUVFODAyMTE7Ci0JCWVyciA9IGhlcm1lc19kb2NtZF93YWl0KGh3LCBIRVJNRVNfQ01EX1RFU1QgfCAKLQkJCQkJICAgIEhFUk1FU19URVNUX01PTklUT1IsIDAsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCS8qIERpc2FibGUgbW9uaXRvciBtb2RlICovCi0JCWRldi0+dHlwZSA9IEFSUEhSRF9FVEhFUjsKLQkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8Ci0JCQkJCSAgICBIRVJNRVNfVEVTVF9TVE9QLCAwLCBOVUxMKTsKLQl9Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCS8qIFNldCBwcm9taXNjdWl0eSAvIG11bHRpY2FzdCovCi0JcHJpdi0+cHJvbWlzY3VvdXMgPSAwOwotCXByaXYtPm1jX2NvdW50ID0gMDsKLQotCS8qIEZJWE1FOiB3aGF0IGFib3V0IG5ldGlmX3R4X2xvY2sgKi8KLQlfX29yaW5vY29fc2V0X211bHRpY2FzdF9saXN0KGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogRklYTUU6IHJldHVybiBpbnQ/ICovCi1zdGF0aWMgdm9pZAotX19vcmlub2NvX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgZXJyID0gMDsKLQlpbnQgcHJvbWlzYywgbWNfY291bnQ7Ci0KLQkvKiBUaGUgSGVybWVzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFuIGFsbG11bHRpIG1vZGUsIHNvIHdlIGdvCi0JICogaW50byBwcm9taXNjdW91cyBtb2RlIGFuZCBsZXQgdGhlIHVwcGVyIGxldmVscyBkZWFsLiAqLwotCWlmICggKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JICAgICAoZGV2LT5tY19jb3VudCA+IE1BWF9NVUxUSUNBU1QocHJpdikpICkgewotCQlwcm9taXNjID0gMTsKLQkJbWNfY291bnQgPSAwOwotCX0gZWxzZSB7Ci0JCXByb21pc2MgPSAwOwotCQltY19jb3VudCA9IGRldi0+bWNfY291bnQ7Ci0JfQotCi0JaWYgKHByb21pc2MgIT0gcHJpdi0+cHJvbWlzY3VvdXMpIHsKLQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgICBIRVJNRVNfUklEX0NORlBST01JU0NVT1VTTU9ERSwKLQkJCQkJICAgcHJvbWlzYyk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHNldHRpbmcgUFJPTUlTQ1VPVVNNT0RFIHRvIDEuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJfSBlbHNlIAotCQkJcHJpdi0+cHJvbWlzY3VvdXMgPSBwcm9taXNjOwotCX0KLQotCS8qIElmIHdlJ3JlIG5vdCBpbiBwcm9taXNjdW91cyBtb2RlLCB0aGVuIHdlIG5lZWQgdG8gc2V0IHRoZQotCSAqIGdyb3VwIGFkZHJlc3MgaWYgZWl0aGVyIHdlIHdhbnQgdG8gbXVsdGljYXN0LCBvciBpZiB3ZSB3ZXJlCi0JICogbXVsdGljYXN0aW5nIGFuZCB3YW50IHRvIHN0b3AgKi8KLQlpZiAoISBwcm9taXNjICYmIChtY19jb3VudCB8fCBwcml2LT5tY19jb3VudCkgKSB7Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqcCA9IGRldi0+bWNfbGlzdDsKLQkJc3RydWN0IGhlcm1lc19tdWx0aWNhc3QgbWNsaXN0OwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbWNfY291bnQ7IGkrKykgewotCQkJLyogcGFyYW5vaWE6IGlzIGxpc3Qgc2hvcnRlciB0aGFuIG1jX2NvdW50PyAqLwotCQkJQlVHX09OKCEgcCk7Ci0JCQkvKiBwYXJhbm9pYTogYmFkIGFkZHJlc3Mgc2l6ZSBpbiBsaXN0PyAqLwotCQkJQlVHX09OKHAtPmRtaV9hZGRybGVuICE9IEVUSF9BTEVOKTsKLQkJCQotCQkJbWVtY3B5KG1jbGlzdC5hZGRyW2ldLCBwLT5kbWlfYWRkciwgRVRIX0FMRU4pOwotCQkJcCA9IHAtPm5leHQ7Ci0JCX0KLQkJCi0JCWlmIChwKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE11bHRpY2FzdCBsaXN0IGlzICIKLQkJCSAgICAgICAibG9uZ2VyIHRoYW4gbWNfY291bnRcbiIsIGRldi0+bmFtZSk7Ci0KLQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCi0JCQkJICAgSEVSTUVTX1JJRF9DTkZHUk9VUEFERFJFU1NFUywKLQkJCQkgICBIRVJNRVNfQllURVNfVE9fUkVDTEVOKG1jX2NvdW50ICogRVRIX0FMRU4pLAotCQkJCSAgICZtY2xpc3QpOwotCQlpZiAoZXJyKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBtdWx0aWNhc3QgbGlzdC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQllbHNlCi0JCQlwcml2LT5tY19jb3VudCA9IG1jX2NvdW50OwotCX0KLX0KLQotLyogVGhpcyBtdXN0IGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCwgd2l0aG91dCBsb2NrcyBoZWxkIC0gdXNlCi0gKiBzY2hlZHVsZV93b3JrKCkgKi8KLXN0YXRpYyB2b2lkIG9yaW5vY29fcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG9yaW5vY29fcHJpdmF0ZSwgcmVzZXRfd29yayk7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPm5kZXY7Ci0Jc3RydWN0IGhlcm1lcyAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCS8qIFdoZW4gdGhlIGhhcmR3YXJlIGJlY29tZXMgYXZhaWxhYmxlIGFnYWluLCB3aGF0ZXZlcgotCQkgKiBkZXRlY3RzIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHJlLWluaXRpYWxpemluZwotCQkgKiBpdC4gU28gbm8gbmVlZCBmb3IgYW55dGhpbmcgZnVydGhlciAqLwotCQlyZXR1cm47Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0KLQkvKiBTaHV0IG9mZiBpbnRlcnJ1cHRzLiAgRGVwZW5kaW5nIG9uIHdoYXQgc3RhdGUgdGhlIGhhcmR3YXJlCi0JICogaXMgaW4sIHRoaXMgbWlnaHQgbm90IHdvcmssIGJ1dCB3ZSdsbCB0cnkgYW55d2F5ICovCi0JaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKLQloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIDB4ZmZmZik7Ci0KLQlwcml2LT5od191bmF2YWlsYWJsZSsrOwotCXByaXYtPmxhc3RfbGlua3N0YXR1cyA9IDB4ZmZmZjsgLyogZmlybXdhcmUgd2lsbCBoYXZlIHRvIHJlYXNzb2NpYXRlICovCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLSAJLyogU2Nhbm5pbmcgc3VwcG9ydDogQ2xlYW51cCBvZiBkcml2ZXIgc3RydWN0ICovCi0Jb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMocHJpdiwgMCk7Ci0JcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMDsKLQotCWlmIChwcml2LT5oYXJkX3Jlc2V0KSB7Ci0JCWVyciA9ICgqcHJpdi0+aGFyZF9yZXNldCkocHJpdik7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG9yaW5vY29fcmVzZXQ6IEVycm9yICVkICIKLQkJCSAgICAgICAicGVyZm9ybWluZyBoYXJkIHJlc2V0XG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCQlnb3RvIGRpc2FibGU7Ci0JCX0KLQl9Ci0KLQllcnIgPSBvcmlub2NvX3JlaW5pdF9maXJtd2FyZShkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgcmUtaW5pdGlhbGl6aW5nIGZpcm13YXJlXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlcnIpOwotCQlnb3RvIGRpc2FibGU7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7IC8qIFRoaXMgaGFzIHRvIGJlIGNhbGxlZCBmcm9tIHVzZXIgY29udGV4dCAqLwotCi0JcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKLQotCS8qIHByaXYtPm9wZW4gb3IgcHJpdi0+aHdfdW5hdmFpbGFibGUgbWlnaHQgaGF2ZSBjaGFuZ2VkIHdoaWxlCi0JICogd2UgZHJvcHBlZCB0aGUgbG9jayAqLwotCWlmIChwcml2LT5vcGVuICYmICghIHByaXYtPmh3X3VuYXZhaWxhYmxlKSkgewotCQllcnIgPSBfX29yaW5vY29fdXAoZGV2KTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogb3Jpbm9jb19yZXNldDogRXJyb3IgJWQgcmVlbmFibGluZyBjYXJkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJfSBlbHNlCi0JCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCi0JcmV0dXJuOwotIGRpc2FibGU6Ci0JaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKLQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogRGV2aWNlIGhhcyBiZWVuIGRpc2FibGVkIVxuIiwgZGV2LT5uYW1lKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogSW50ZXJydXB0IGhhbmRsZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfdGljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBoZXJtZXNfdCAqaHcpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUSUNLXG4iLCBkZXYtPm5hbWUpOwotfQotCi1zdGF0aWMgdm9pZCBfX29yaW5vY29fZXZfd3RlcnIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaGVybWVzX3QgKmh3KQotewotCS8qIFRoaXMgc2VlbXMgdG8gaGFwcGVuIGEgZmFpciBiaXQgdW5kZXIgbG9hZCwgYnV0IGlnbm9yaW5nIGl0Ci0JICAgc2VlbXMgdG8gd29yayBmaW5lLi4uKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1BQyBjb250cm9sbGVyIGVycm9yIChXVEVSUikuIElnbm9yaW5nLlxuIiwKLQkgICAgICAgZGV2LT5uYW1lKTsKLX0KLQotaXJxcmV0dXJuX3Qgb3Jpbm9jb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaWQ7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBjb3VudCA9IE1BWF9JUlFMT09QU19QRVJfSVJROwotCXUxNiBldnN0YXQsIGV2ZW50czsKLQkvKiBUaGVzZSBhcmUgdXNlZCB0byBkZXRlY3QgYSBydW5hd2F5IGludGVycnVwdCBzaXR1YXRpb24gKi8KLQkvKiBJZiB3ZSBnZXQgbW9yZSB0aGFuIE1BWF9JUlFMT09QU19QRVJfSklGRlkgaXRlcmF0aW9ucyBpbiBhIGppZmZ5LAotCSAqIHdlIHBhbmljIGFuZCBzaHV0IGRvd24gdGhlIGhhcmR3YXJlICovCi0Jc3RhdGljIGludCBsYXN0X2lycV9qaWZmeSA9IDA7IC8qIGppZmZpZXMgdmFsdWUgdGhlIGxhc3QgdGltZQotCQkJCQkqIHdlIHdlcmUgY2FsbGVkICovCi0Jc3RhdGljIGludCBsb29wc190aGlzX2ppZmZ5ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKLQkJLyogSWYgaHcgaXMgdW5hdmFpbGFibGUgLSB3ZSBkb24ndCBrbm93IGlmIHRoZSBpcnEgd2FzCi0JCSAqIGZvciB1cyBvciBub3QgKi8KLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCWV2c3RhdCA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIEVWU1RBVCk7Ci0JZXZlbnRzID0gZXZzdGF0ICYgaHctPmludGVuOwotCWlmICghIGV2ZW50cykgewotCQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQotCQotCWlmIChqaWZmaWVzICE9IGxhc3RfaXJxX2ppZmZ5KQotCQlsb29wc190aGlzX2ppZmZ5ID0gMDsKLQlsYXN0X2lycV9qaWZmeSA9IGppZmZpZXM7Ci0KLQl3aGlsZSAoZXZlbnRzICYmIGNvdW50LS0pIHsKLQkJaWYgKCsrbG9vcHNfdGhpc19qaWZmeSA+IE1BWF9JUlFMT09QU19QRVJfSklGRlkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBJUlEgaGFuZGxlciBpcyBsb29waW5nIHRvbyAiCi0JCQkgICAgICAgIm11Y2ghIFJlc2V0dGluZy5cbiIsIGRldi0+bmFtZSk7Ci0JCQkvKiBEaXNhYmxlIGludGVycnVwdHMgZm9yIG5vdyAqLwotCQkJaGVybWVzX3NldF9pcnFtYXNrKGh3LCAwKTsKLQkJCXNjaGVkdWxlX3dvcmsoJnByaXYtPnJlc2V0X3dvcmspOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBDaGVjayB0aGUgY2FyZCBoYXNuJ3QgYmVlbiByZW1vdmVkICovCi0JCWlmICghIGhlcm1lc19wcmVzZW50KGh3KSkgewotCQkJREVCVUcoMCwgIm9yaW5vY29faW50ZXJydXB0KCk6IGNhcmQgcmVtb3ZlZFxuIik7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVElDSykKLQkJCV9fb3Jpbm9jb19ldl90aWNrKGRldiwgaHcpOwotCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX1dURVJSKQotCQkJX19vcmlub2NvX2V2X3d0ZXJyKGRldiwgaHcpOwotCQlpZiAoZXZlbnRzICYgSEVSTUVTX0VWX0lORkRST1ApCi0JCQlfX29yaW5vY29fZXZfaW5mZHJvcChkZXYsIGh3KTsKLQkJaWYgKGV2ZW50cyAmIEhFUk1FU19FVl9JTkZPKQotCQkJX19vcmlub2NvX2V2X2luZm8oZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfUlgpCi0JCQlfX29yaW5vY29fZXZfcngoZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVFhFWEMpCi0JCQlfX29yaW5vY29fZXZfdHhleGMoZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfVFgpCi0JCQlfX29yaW5vY29fZXZfdHgoZGV2LCBodyk7Ci0JCWlmIChldmVudHMgJiBIRVJNRVNfRVZfQUxMT0MpCi0JCQlfX29yaW5vY29fZXZfYWxsb2MoZGV2LCBodyk7Ci0JCQotCQloZXJtZXNfd3JpdGVfcmVnbihodywgRVZBQ0ssIGV2c3RhdCk7Ci0KLQkJZXZzdGF0ID0gaGVybWVzX3JlYWRfcmVnbihodywgRVZTVEFUKTsKLQkJZXZlbnRzID0gZXZzdGF0ICYgaHctPmludGVuOwotCX07Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUG93ZXIgbWFuYWdlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSAmJiAhZGVmaW5lZChDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQpCi1zdGF0aWMgaW50IG9yaW5vY29fcG1fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpub3RpZmllciwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHBtX2V2ZW50LAotCQkJICAgICAgIHZvaWQgKnVudXNlZCkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gY29udGFpbmVyX29mKG5vdGlmaWVyLAotCQkJCQkJICAgIHN0cnVjdCBvcmlub2NvX3ByaXZhdGUsCi0JCQkJCQkgICAgcG1fbm90aWZpZXIpOwotCi0JLyogQWxsIHdlIG5lZWQgdG8gZG8gaXMgY2FjaGUgdGhlIGZpcm13YXJlIGJlZm9yZSBzdXNwZW5kLCBhbmQKLQkgKiByZWxlYXNlIGl0IHdoZW4gd2UgY29tZSBvdXQuCi0JICoKLQkgKiBPbmx5IG5lZWQgdG8gZG8gdGhpcyBpZiB3ZSdyZSBkb3dubG9hZGluZyBmaXJtd2FyZS4gKi8KLQlpZiAoIXByaXYtPmRvX2Z3X2Rvd25sb2FkKQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KLQlzd2l0Y2ggKHBtX2V2ZW50KSB7Ci0JY2FzZSBQTV9ISUJFUk5BVElPTl9QUkVQQVJFOgotCWNhc2UgUE1fU1VTUEVORF9QUkVQQVJFOgotCQlvcmlub2NvX2NhY2hlX2Z3KHByaXYsIDApOwotCQlicmVhazsKLQotCWNhc2UgUE1fUE9TVF9SRVNUT1JFOgotCQkvKiBSZXN0b3JlIGZyb20gaGliZXJuYXRpb24gZmFpbGVkLiBXZSBuZWVkIHRvIGNsZWFuCi0JCSAqIHVwIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5LCBzbyBmYWxsIHRocm91Z2guICovCi0JY2FzZSBQTV9QT1NUX0hJQkVSTkFUSU9OOgotCWNhc2UgUE1fUE9TVF9TVVNQRU5EOgotCQlvcmlub2NvX3VuY2FjaGVfZncocHJpdik7Ci0JCWJyZWFrOwotCi0JY2FzZSBQTV9SRVNUT1JFX1BSRVBBUkU6Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCi1zdGF0aWMgdm9pZCBvcmlub2NvX3JlZ2lzdGVyX3BtX25vdGlmaWVyKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JcHJpdi0+cG1fbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IG9yaW5vY29fcG1fbm90aWZpZXI7Ci0JcmVnaXN0ZXJfcG1fbm90aWZpZXIoJnByaXYtPnBtX25vdGlmaWVyKTsKLX0KLQotc3RhdGljIHZvaWQgb3Jpbm9jb191bnJlZ2lzdGVyX3BtX25vdGlmaWVyKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JdW5yZWdpc3Rlcl9wbV9ub3RpZmllcigmcHJpdi0+cG1fbm90aWZpZXIpOwotfQotI2Vsc2UgLyogIVBNX1NMRUVQIHx8IEhFUk1FU19DQUNIRV9GV19PTl9JTklUICovCi0jZGVmaW5lIG9yaW5vY29fcmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdikgZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIG9yaW5vY29fdW5yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KSBkbyB7IH0gd2hpbGUoMCkKLSNlbmRpZgotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBJbml0aWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBjb21wX2lkIHsKLQl1MTYgaWQsIHZhcmlhbnQsIG1ham9yLCBtaW5vcjsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdGF0aWMgaW5saW5lIGZ3dHlwZV90IGRldGVybWluZV9maXJtd2FyZV90eXBlKHN0cnVjdCBjb21wX2lkICpuaWNfaWQpCi17Ci0JaWYgKG5pY19pZC0+aWQgPCAweDgwMDApCi0JCXJldHVybiBGSVJNV0FSRV9UWVBFX0FHRVJFOwotCWVsc2UgaWYgKG5pY19pZC0+aWQgPT0gMHg4MDAwICYmIG5pY19pZC0+bWFqb3IgPT0gMCkKLQkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfU1lNQk9MOwotCWVsc2UKLQkJcmV0dXJuIEZJUk1XQVJFX1RZUEVfSU5URVJTSUw7Ci19Ci0KLS8qIFNldCBwcml2LT5maXJtd2FyZSB0eXBlLCBkZXRlcm1pbmUgZmlybXdhcmUgcHJvcGVydGllcyAqLwotc3RhdGljIGludCBkZXRlcm1pbmVfZmlybXdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgY29tcF9pZCBuaWNfaWQsIHN0YV9pZDsKLQl1bnNpZ25lZCBpbnQgZmlybXZlcjsKLQljaGFyIHRtcFtTWU1CT0xfTUFYX1ZFUl9MRU4rMV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgyKSkpOwotCi0JLyogR2V0IHRoZSBoYXJkd2FyZSB2ZXJzaW9uICovCi0JZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9OSUNJRCwgJm5pY19pZCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVhZCBoYXJkd2FyZSBpZGVudGl0eTogZXJyb3IgJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbGUxNl90b19jcHVzKCZuaWNfaWQuaWQpOwotCWxlMTZfdG9fY3B1cygmbmljX2lkLnZhcmlhbnQpOwotCWxlMTZfdG9fY3B1cygmbmljX2lkLm1ham9yKTsKLQlsZTE2X3RvX2NwdXMoJm5pY19pZC5taW5vcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBIYXJkd2FyZSBpZGVudGl0eSAlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAotCSAgICAgICBkZXYtPm5hbWUsIG5pY19pZC5pZCwgbmljX2lkLnZhcmlhbnQsCi0JICAgICAgIG5pY19pZC5tYWpvciwgbmljX2lkLm1pbm9yKTsKLQotCXByaXYtPmZpcm13YXJlX3R5cGUgPSBkZXRlcm1pbmVfZmlybXdhcmVfdHlwZSgmbmljX2lkKTsKLQotCS8qIEdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLwotCWVyciA9IEhFUk1FU19SRUFEX1JFQ09SRChodywgVVNFUl9CQVAsIEhFUk1FU19SSURfU1RBSUQsICZzdGFfaWQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlYWQgc3RhdGlvbiBpZGVudGl0eTogZXJyb3IgJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbGUxNl90b19jcHVzKCZzdGFfaWQuaWQpOwotCWxlMTZfdG9fY3B1cygmc3RhX2lkLnZhcmlhbnQpOwotCWxlMTZfdG9fY3B1cygmc3RhX2lkLm1ham9yKTsKLQlsZTE2X3RvX2NwdXMoJnN0YV9pZC5taW5vcik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTdGF0aW9uIGlkZW50aXR5ICAlMDR4OiUwNHg6JTA0eDolMDR4XG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHN0YV9pZC5pZCwgc3RhX2lkLnZhcmlhbnQsCi0JICAgICAgIHN0YV9pZC5tYWpvciwgc3RhX2lkLm1pbm9yKTsKLQotCXN3aXRjaCAoc3RhX2lkLmlkKSB7Ci0JY2FzZSAweDE1OgotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQcmltYXJ5IGZpcm13YXJlIGlzIGFjdGl2ZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCWNhc2UgMHgxNGI6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFRlcnRpYXJ5IGZpcm13YXJlIGlzIGFjdGl2ZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybiAtRU5PREVWOwotCWNhc2UgMHgxZjoJLyogSW50ZXJzaWwsIEFnZXJlLCBTeW1ib2wgU3BlY3RydW0yNCAqLwotCWNhc2UgMHgyMToJLyogU3ltYm9sIFNwZWN0cnVtMjQgVHJpbG9neSAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBVbmtub3duIHN0YXRpb24gSUQsIHBsZWFzZSByZXBvcnRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBEZWZhdWx0IGNhcGFiaWxpdGllcyAqLwotCXByaXYtPmhhc19zZW5zaXRpdml0eSA9IDE7Ci0JcHJpdi0+aGFzX213byA9IDA7Ci0JcHJpdi0+aGFzX3ByZWFtYmxlID0gMDsKLQlwcml2LT5oYXNfcG9ydDMgPSAxOwotCXByaXYtPmhhc19pYnNzID0gMTsKLQlwcml2LT5oYXNfd2VwID0gMDsKLQlwcml2LT5oYXNfYmlnX3dlcCA9IDA7Ci0JcHJpdi0+aGFzX2FsdF90eGNudGwgPSAwOwotCXByaXYtPmhhc19leHRfc2NhbiA9IDA7Ci0JcHJpdi0+aGFzX3dwYSA9IDA7Ci0JcHJpdi0+ZG9fZndfZG93bmxvYWQgPSAwOwotCi0JLyogRGV0ZXJtaW5lIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBmaXJtd2FyZSB2ZXJzaW9uICovCi0Jc3dpdGNoIChwcml2LT5maXJtd2FyZV90eXBlKSB7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0FHRVJFOgotCQkvKiBMdWNlbnQgV2F2ZWxhbiBJRUVFLCBMdWNlbnQgT3Jpbm9jbywgQ2FibGV0cm9uIFJvYW1BYm91dCwKLQkJICAgRUxTQSwgTWVsY28sIEhQLCBJQk0sIERlbGwgMTE1MCwgQ29tcGFxIDExMC8yMTAgKi8KLQkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKLQkJCSAiTHVjZW50L0FnZXJlICVkLiUwMmQiLCBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vcik7Ci0KLQkJZmlybXZlciA9ICgodW5zaWduZWQgbG9uZylzdGFfaWQubWFqb3IgPDwgMTYpIHwgc3RhX2lkLm1pbm9yOwotCi0JCXByaXYtPmhhc19pYnNzID0gKGZpcm12ZXIgPj0gMHg2MDAwNik7Ci0JCXByaXYtPmhhc193ZXAgPSAoZmlybXZlciA+PSAweDQwMDIwKTsKLQkJcHJpdi0+aGFzX2JpZ193ZXAgPSAxOyAvKiBGSVhNRTogdGhpcyBpcyB3cm9uZyAtIGhvdyBkbyB3ZSB0ZWxsCi0JCQkJCSAgR29sZCBjYXJkcyBmcm9tIHRoZSBvdGhlcnM/ICovCi0JCXByaXYtPmhhc19td28gPSAoZmlybXZlciA+PSAweDYwMDAwKTsKLQkJcHJpdi0+aGFzX3BtID0gKGZpcm12ZXIgPj0gMHg0MDAyMCk7IC8qIERvbid0IHdvcmsgaW4gNy41MiA/ICovCi0JCXByaXYtPmlic3NfcG9ydCA9IDE7Ci0JCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4ODAwMGEpOwotCQlwcml2LT5kb19md19kb3dubG9hZCA9IDE7Ci0JCXByaXYtPmJyb2tlbl9tb25pdG9yID0gKGZpcm12ZXIgPj0gMHg4MDAwMCk7Ci0JCXByaXYtPmhhc19hbHRfdHhjbnRsID0gKGZpcm12ZXIgPj0gMHg5MDAwMCk7IC8qIEFsbCA5LnggPyAqLwotCQlwcml2LT5oYXNfZXh0X3NjYW4gPSAoZmlybXZlciA+PSAweDkwMDAwKTsgLyogQWxsIDkueCA/ICovCi0JCXByaXYtPmhhc193cGEgPSAoZmlybXZlciA+PSAweDkwMDJhKTsKLQkJLyogVGVzdGVkIHdpdGggQWdlcmUgZmlybXdhcmUgOgotCQkgKgkxLjE2IDsgNC4wOCA7IDQuNTIgOyA2LjA0IDsgNi4xNiA7IDcuMjggPT4gSmVhbiBJSQotCQkgKiBUZXN0ZWQgQ2FibGVUcm9uIGZpcm13YXJlIDogNC4zMiA9PiBBbnRvbiAqLwotCQlicmVhazsKLQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQkvKiBTeW1ib2wgLCAzQ29tIEFpckNvbm5lY3QsIEludGVsLCBFcmljc3NvbiBXTEFOICovCi0JCS8qIEludGVsIE1BQyA6IDAwOjAyOkIzOiogKi8KLQkJLyogM0NvbSBNQUMgOiAwMDo1MDpEQToqICovCi0JCW1lbXNldCh0bXAsIDAsIHNpemVvZih0bXApKTsKLQkJLyogR2V0IHRoZSBTeW1ib2wgZmlybXdhcmUgdmVyc2lvbiAqLwotCQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLAotCQkJCSAgICAgIEhFUk1FU19SSURfU0VDT05EQVJZVkVSU0lPTl9TWU1CT0wsCi0JCQkJICAgICAgU1lNQk9MX01BWF9WRVJfTEVOLCBOVUxMLCAmdG1wKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICIlczogRXJyb3IgJWQgcmVhZGluZyBTeW1ib2wgZmlybXdhcmUgaW5mby4gV2lsZGx5IGd1ZXNzaW5nIGNhcGFiaWxpdGllcy4uLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7Ci0JCQlmaXJtdmVyID0gMDsKLQkJCXRtcFswXSA9ICdcMCc7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBUaGUgZmlybXdhcmUgcmV2aXNpb24gaXMgYSBzdHJpbmcsIHRoZSBmb3JtYXQgaXMKLQkJCSAqIHNvbWV0aGluZyBsaWtlIDogIlYyLjIwLTAxIi4KLQkJCSAqIFF1aWNrIGFuZCBkaXJ0eSBwYXJzaW5nLi4uIC0gSmVhbiBJSQotCQkJICovCi0JCQlmaXJtdmVyID0gKCh0bXBbMV0gLSAnMCcpIDw8IDE2KSB8ICgodG1wWzNdIC0gJzAnKSA8PCAxMikKLQkJCQl8ICgodG1wWzRdIC0gJzAnKSA8PCA4KSB8ICgodG1wWzZdIC0gJzAnKSA8PCA0KQotCQkJCXwgKHRtcFs3XSAtICcwJyk7Ci0KLQkJCXRtcFtTWU1CT0xfTUFYX1ZFUl9MRU5dID0gJ1wwJzsKLQkJfQotCi0JCXNucHJpbnRmKHByaXYtPmZ3X25hbWUsIHNpemVvZihwcml2LT5md19uYW1lKSAtIDEsCi0JCQkgIlN5bWJvbCAlcyIsIHRtcCk7Ci0KLQkJcHJpdi0+aGFzX2lic3MgPSAoZmlybXZlciA+PSAweDIwMDAwKTsKLQkJcHJpdi0+aGFzX3dlcCA9IChmaXJtdmVyID49IDB4MTUwMTIpOwotCQlwcml2LT5oYXNfYmlnX3dlcCA9IChmaXJtdmVyID49IDB4MjAwMDApOwotCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDIwMDAwICYmIGZpcm12ZXIgPCAweDIyMDAwKSB8fCAKLQkJCSAgICAgICAoZmlybXZlciA+PSAweDI5MDAwICYmIGZpcm12ZXIgPCAweDMwMDAwKSB8fAotCQkJICAgICAgIGZpcm12ZXIgPj0gMHgzMTAwMDsKLQkJcHJpdi0+aGFzX3ByZWFtYmxlID0gKGZpcm12ZXIgPj0gMHgyMDAwMCk7Ci0JCXByaXYtPmlic3NfcG9ydCA9IDQ7Ci0KLQkJLyogU3ltYm9sIGZpcm13YXJlIGlzIGZvdW5kIG9uIHZhcmlvdXMgY2FyZHMsIGJ1dAotCQkgKiB0aGVyZSBoYXMgYmVlbiBubyBhdHRlbXB0IHRvIGNoZWNrIGZpcm13YXJlCi0JCSAqIGRvd25sb2FkIG9uIG5vbi1zcGVjdHJ1bV9jcyBiYXNlZCBjYXJkcy4KLQkJICoKLQkJICogR2l2ZW4gdGhhdCB0aGUgQWdlcmUgZmlybXdhcmUgZG93bmxvYWQgd29ya3MKLQkJICogZGlmZmVyZW50bHksIHdlIHNob3VsZCBhdm9pZCBkb2luZyBhIGZpcm13YXJlCi0JCSAqIGRvd25sb2FkIHdpdGggdGhlIFN5bWJvbCBhbGdvcml0aG0gb24gbm9uLXNwZWN0cnVtCi0JCSAqIGNhcmRzLgotCQkgKgotCQkgKiBGb3Igbm93IHdlIGNhbiBpZGVudGlmeSBhIHNwZWN0cnVtX2NzIGJhc2VkIGNhcmQKLQkJICogYmVjYXVzZSBpdCBoYXMgYSBmaXJtd2FyZSByZXNldCBmdW5jdGlvbi4KLQkJICovCi0JCXByaXYtPmRvX2Z3X2Rvd25sb2FkID0gKHByaXYtPnN0b3BfZncgIT0gTlVMTCk7Ci0KLSAJCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IChmaXJtdmVyID09IDB4MjUwMTMpIHx8Ci0gCQkJCQkgICAoZmlybXZlciA+PSAweDMwMDAwICYmIGZpcm12ZXIgPD0gMHgzMTAwMCk7Ci0JCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4MzEwMDEpIHx8Ci0JCQkJICAgICAoZmlybXZlciA+PSAweDI5MDU3ICYmIGZpcm12ZXIgPCAweDMwMDAwKTsKLQkJLyogVGVzdGVkIHdpdGggSW50ZWwgZmlybXdhcmUgOiAweDIwMDE1ID0+IEplYW4gSUkgKi8KLQkJLyogVGVzdGVkIHdpdGggM0NvbSBmaXJtd2FyZSA6IDB4MTUwMTIgJiAweDIyMDAxID0+IEplYW4gSUkgKi8KLQkJYnJlYWs7Ci0JY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgotCQkvKiBELUxpbmssIExpbmtzeXMsIEFkdHJvbiwgWm9vbUFpciwgYW5kIG1hbnkgb3RoZXJzLi4uCi0JCSAqIFNhbXN1bmcsIENvbXBhcSAxMDAvMjAwIGFuZCBQcm94aW0gYXJlIHNsaWdodGx5Ci0JCSAqIGRpZmZlcmVudCBhbmQgbGVzcyB3ZWxsIHRlc3RlZCAqLwotCQkvKiBELUxpbmsgTUFDIDogMDA6NDA6MDU6KiAqLwotCQkvKiBBZGR0cm9uIE1BQyA6IDAwOjkwOkQxOiogKi8KLQkJc25wcmludGYocHJpdi0+ZndfbmFtZSwgc2l6ZW9mKHByaXYtPmZ3X25hbWUpIC0gMSwKLQkJCSAiSW50ZXJzaWwgJWQuJWQuJWQiLCBzdGFfaWQubWFqb3IsIHN0YV9pZC5taW5vciwKLQkJCSBzdGFfaWQudmFyaWFudCk7Ci0KLQkJZmlybXZlciA9ICgodW5zaWduZWQgbG9uZylzdGFfaWQubWFqb3IgPDwgMTYpIHwKLQkJCSgodW5zaWduZWQgbG9uZylzdGFfaWQubWlub3IgPDwgOCkgfCBzdGFfaWQudmFyaWFudDsKLQotCQlwcml2LT5oYXNfaWJzcyA9IChmaXJtdmVyID49IDB4MDAwNzAwKTsgLyogRklYTUUgKi8KLQkJcHJpdi0+aGFzX2JpZ193ZXAgPSBwcml2LT5oYXNfd2VwID0gKGZpcm12ZXIgPj0gMHgwMDA4MDApOwotCQlwcml2LT5oYXNfcG0gPSAoZmlybXZlciA+PSAweDAwMDcwMCk7Ci0JCXByaXYtPmhhc19ob3N0c2NhbiA9IChmaXJtdmVyID49IDB4MDEwMzAxKTsKLQotCQlpZiAoZmlybXZlciA+PSAweDAwMDgwMCkKLQkJCXByaXYtPmlic3NfcG9ydCA9IDA7Ci0JCWVsc2UgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogSW50ZXJzaWwgZmlybXdhcmUgZWFybGllciAiCi0JCQkgICAgICAgInRoYW4gdjAuOC54IC0gc2V2ZXJhbCBmZWF0dXJlcyBub3Qgc3VwcG9ydGVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQlwcml2LT5pYnNzX3BvcnQgPSAxOwotCQl9Ci0JCWJyZWFrOwotCX0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZpcm13YXJlIGRldGVybWluZWQgYXMgJXNcbiIsIGRldi0+bmFtZSwKLQkgICAgICAgcHJpdi0+ZndfbmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IGhlcm1lc19pZHN0cmluZyBuaWNrYnVmOwotCXUxNiByZWNsZW47Ci0JaW50IGxlbjsKLQotCS8qIE5vIG5lZWQgdG8gbG9jaywgdGhlIGh3X3VuYXZhaWxhYmxlIGZsYWcgaXMgYWxyZWFkeSBzZXQgaW4KLQkgKiBhbGxvY19vcmlub2NvZGV2KCkgKi8KLQlwcml2LT5uaWNidWZfc2l6ZSA9IElFRUU4MDIxMV9NQVhfRlJBTUVfTEVOICsgRVRIX0hMRU47Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBmaXJtd2FyZSAqLwotCWVyciA9IGhlcm1lc19pbml0KGh3KTsKLQlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGluaXRpYWxpemUgZmlybXdhcmUgKGVyciA9ICVkKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0gZGV0ZXJtaW5lX2Zpcm13YXJlKGRldik7Ci0JaWYgKGVyciAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEluY29tcGF0aWJsZSBmaXJtd2FyZSwgYWJvcnRpbmdcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAocHJpdi0+ZG9fZndfZG93bmxvYWQpIHsKLSNpZmRlZiBDT05GSUdfSEVSTUVTX0NBQ0hFX0ZXX09OX0lOSVQKLQkJb3Jpbm9jb19jYWNoZV9mdyhwcml2LCAwKTsKLSNlbmRpZgotCi0JCWVyciA9IG9yaW5vY29fZG93bmxvYWQocHJpdik7Ci0JCWlmIChlcnIpCi0JCQlwcml2LT5kb19md19kb3dubG9hZCA9IDA7Ci0KLQkJLyogQ2hlY2sgZmlybXdhcmUgdmVyc2lvbiBhZ2FpbiAqLwotCQllcnIgPSBkZXRlcm1pbmVfZmlybXdhcmUoZGV2KTsKLQkJaWYgKGVyciAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbmNvbXBhdGlibGUgZmlybXdhcmUsIGFib3J0aW5nXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCWlmIChwcml2LT5oYXNfcG9ydDMpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogQWQtaG9jIGRlbW8gbW9kZSBzdXBwb3J0ZWRcbiIsIGRldi0+bmFtZSk7Ci0JaWYgKHByaXYtPmhhc19pYnNzKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElFRUUgc3RhbmRhcmQgSUJTUyBhZC1ob2MgbW9kZSBzdXBwb3J0ZWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCWlmIChwcml2LT5oYXNfd2VwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogV0VQIHN1cHBvcnRlZCwgIiwgZGV2LT5uYW1lKTsKLQkJaWYgKHByaXYtPmhhc19iaWdfd2VwKQotCQkJcHJpbnRrKCIxMDQtYml0IGtleVxuIik7Ci0JCWVsc2UKLQkJCXByaW50aygiNDAtYml0IGtleVxuIik7Ci0JfQotCWlmIChwcml2LT5oYXNfd3BhKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogV1BBLVBTSyBzdXBwb3J0ZWRcbiIsIGRldi0+bmFtZSk7Ci0JCWlmIChvcmlub2NvX21pY19pbml0KHByaXYpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gc2V0dXAgTUlDIGNyeXB0byAiCi0JCQkgICAgICAgImFsZ29yaXRobS4gRGlzYWJsaW5nIFdQQSBzdXBwb3J0XG4iLCBkZXYtPm5hbWUpOwotCQkJcHJpdi0+aGFzX3dwYSA9IDA7Ci0JCX0KLQl9Ci0KLQkvKiBOb3cgd2UgaGF2ZSB0aGUgZmlybXdhcmUgY2FwYWJpbGl0aWVzLCBhbGxvY2F0ZSBhcHByb3BpYXRlCi0JICogc2l6ZWQgc2NhbiBidWZmZXJzICovCi0JaWYgKG9yaW5vY29fYnNzX2RhdGFfYWxsb2NhdGUocHJpdikpCi0JCWdvdG8gb3V0OwotCW9yaW5vY29fYnNzX2RhdGFfaW5pdChwcml2KTsKLQotCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi8KLQllcnIgPSBoZXJtZXNfcmVhZF9sdHYoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk9XTk1BQ0FERFIsCi0JCQkgICAgICBFVEhfQUxFTiwgTlVMTCwgZGV2LT5kZXZfYWRkcik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3MhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNQUMgYWRkcmVzcyAlcE1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7Ci0KLQkvKiBHZXQgdGhlIHN0YXRpb24gbmFtZSAqLwotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GT1dOTkFNRSwKLQkJCSAgICAgIHNpemVvZihuaWNrYnVmKSwgJnJlY2xlbiwgJm5pY2tidWYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgc3RhdGlvbiBuYW1lXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChuaWNrYnVmLmxlbikKLQkJbGVuID0gbWluKElXX0VTU0lEX01BWF9TSVpFLCAoaW50KWxlMTZfdG9fY3B1KG5pY2tidWYubGVuKSk7Ci0JZWxzZQotCQlsZW4gPSBtaW4oSVdfRVNTSURfTUFYX1NJWkUsIDIgKiByZWNsZW4pOwotCW1lbWNweShwcml2LT5uaWNrLCAmbmlja2J1Zi52YWwsIGxlbik7Ci0JcHJpdi0+bmlja1tsZW5dID0gJ1wwJzsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogU3RhdGlvbiBuYW1lIFwiJXNcIlxuIiwgZGV2LT5uYW1lLCBwcml2LT5uaWNrKTsKLQotCWVyciA9IG9yaW5vY29fYWxsb2NhdGVfZmlkKGRldik7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgTklDIGJ1ZmZlciFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgYWxsb3dlZCBjaGFubmVscyAqLwotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NIQU5ORUxMSVNULAotCQkJCSAgJnByaXYtPmNoYW5uZWxfbWFzayk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVhZCBjaGFubmVsIGxpc3QhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogR2V0IGluaXRpYWwgQVAgZGVuc2l0eSAqLwotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLAotCQkJCSAgJnByaXYtPmFwX2RlbnNpdHkpOwotCWlmIChlcnIgfHwgcHJpdi0+YXBfZGVuc2l0eSA8IDEgfHwgcHJpdi0+YXBfZGVuc2l0eSA+IDMpIHsKLQkJcHJpdi0+aGFzX3NlbnNpdGl2aXR5ID0gMDsKLQl9Ci0KLQkvKiBHZXQgaW5pdGlhbCBSVFMgdGhyZXNob2xkICovCi0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ05GUlRTVEhSRVNIT0xELAotCQkJCSAgJnByaXYtPnJ0c190aHJlc2gpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgUlRTIHRocmVzaG9sZCFcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBHZXQgaW5pdGlhbCBmcmFnbWVudGF0aW9uIHNldHRpbmdzICovCi0JaWYgKHByaXYtPmhhc19td28pCi0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAotCQkJCQkgICZwcml2LT5td29fcm9idXN0KTsKLQllbHNlCi0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCi0JCQkJCSAgJnByaXYtPmZyYWdfdGhyZXNoKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIGZyYWdtZW50YXRpb24gc2V0dGluZ3MhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogUG93ZXIgbWFuYWdlbWVudCBzZXR1cCAqLwotCWlmIChwcml2LT5oYXNfcG0pIHsKLQkJcHJpdi0+cG1fb24gPSAwOwotCQlwcml2LT5wbV9tY2FzdCA9IDE7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwKLQkJCQkJICAmcHJpdi0+cG1fcGVyaW9kKTsKLQkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlYWQgcG93ZXIgbWFuYWdlbWVudCBwZXJpb2QhXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORlBNSE9MRE9WRVJEVVJBVElPTiwKLQkJCQkJICAmcHJpdi0+cG1fdGltZW91dCk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWFkIHBvd2VyIG1hbmFnZW1lbnQgdGltZW91dCFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JLyogUHJlYW1ibGUgc2V0dXAgKi8KLQlpZiAocHJpdi0+aGFzX3ByZWFtYmxlKSB7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ05GUFJFQU1CTEVfU1lNQk9MLAotCQkJCQkgICZwcml2LT5wcmVhbWJsZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0JCQotCS8qIFNldCB1cCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uICovCi0JcHJpdi0+aXdfbW9kZSA9IElXX01PREVfSU5GUkE7Ci0JLyogQnkgZGVmYXVsdCB1c2UgSUVFRS9JQlNTIGFkLWhvYyBtb2RlIGlmIHdlIGhhdmUgaXQgKi8KLQlwcml2LT5wcmVmZXJfcG9ydDMgPSBwcml2LT5oYXNfcG9ydDMgJiYgKCEgcHJpdi0+aGFzX2lic3MpOwotCXNldF9wb3J0X3R5cGUocHJpdik7Ci0JcHJpdi0+Y2hhbm5lbCA9IDA7IC8qIHVzZSBmaXJtd2FyZSBkZWZhdWx0ICovCi0KLQlwcml2LT5wcm9taXNjdW91cyA9IDA7Ci0JcHJpdi0+ZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKLQlwcml2LT50eF9rZXkgPSAwOwotCXByaXYtPndwYV9lbmFibGVkID0gMDsKLQlwcml2LT50a2lwX2NtX2FjdGl2ZSA9IDA7Ci0JcHJpdi0+a2V5X21nbXQgPSAwOwotCXByaXYtPndwYV9pZV9sZW4gPSAwOwotCXByaXYtPndwYV9pZSA9IE5VTEw7Ci0KLQkvKiBNYWtlIHRoZSBoYXJkd2FyZSBhdmFpbGFibGUsIGFzIGxvbmcgYXMgaXQgaGFzbid0IGJlZW4KLQkgKiByZW1vdmVkIGVsc2V3aGVyZSAoZS5nLiBieSBQQ01DSUEgaG90IHVucGx1ZykgKi8KLQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQlwcml2LT5od191bmF2YWlsYWJsZS0tOwotCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlYWR5XG4iLCBkZXYtPm5hbWUpOwotCi0gb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0cnVjdCBuZXRfZGV2aWNlCi0qYWxsb2Nfb3Jpbm9jb2RldihpbnQgc2l6ZW9mX2NhcmQsCi0JCSAgc3RydWN0IGRldmljZSAqZGV2aWNlLAotCQkgIGludCAoKmhhcmRfcmVzZXQpKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKiksCi0JCSAgaW50ICgqc3RvcF9mdykoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqLCBpbnQpKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdjsKLQotCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlKSArIHNpemVvZl9jYXJkKTsKLQlpZiAoISBkZXYpCi0JCXJldHVybiBOVUxMOwotCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXByaXYtPm5kZXYgPSBkZXY7Ci0JaWYgKHNpemVvZl9jYXJkKQotCQlwcml2LT5jYXJkID0gKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpcHJpdgotCQkJCSAgICAgICsgc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUpKTsKLQllbHNlCi0JCXByaXYtPmNhcmQgPSBOVUxMOwotCXByaXYtPmRldiA9IGRldmljZTsKLQotCS8qIFNldHVwIC8gb3ZlcnJpZGUgbmV0X2RldmljZSBmaWVsZHMgKi8KLQlkZXYtPmluaXQgPSBvcmlub2NvX2luaXQ7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBvcmlub2NvX3htaXQ7Ci0JZGV2LT50eF90aW1lb3V0ID0gb3Jpbm9jb190eF90aW1lb3V0OwotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBIWjsgLyogMSBzZWNvbmQgdGltZW91dCAqLwotCWRldi0+Z2V0X3N0YXRzID0gb3Jpbm9jb19nZXRfc3RhdHM7Ci0JZGV2LT5ldGh0b29sX29wcyA9ICZvcmlub2NvX2V0aHRvb2xfb3BzOwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJm9yaW5vY29faGFuZGxlcl9kZWY7Ci0jaWZkZWYgV0lSRUxFU1NfU1BZCi0JcHJpdi0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZwcml2LT5zcHlfZGF0YTsKLQlkZXYtPndpcmVsZXNzX2RhdGEgPSAmcHJpdi0+d2lyZWxlc3NfZGF0YTsKLSNlbmRpZgotCWRldi0+Y2hhbmdlX210dSA9IG9yaW5vY29fY2hhbmdlX210dTsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IG9yaW5vY29fc2V0X211bHRpY2FzdF9saXN0OwotCS8qIHdlIHVzZSB0aGUgZGVmYXVsdCBldGhfbWFjX2FkZHIgZm9yIHNldHRpbmcgdGhlIE1BQyBhZGRyICovCi0KLQkvKiBSZXNlcnZlIHNwYWNlIGluIHNrYiBmb3IgdGhlIFNOQVAgaGVhZGVyICovCi0JZGV2LT5oYXJkX2hlYWRlcl9sZW4gKz0gRU5DQVBTX09WRVJIRUFEOwotCi0JLyogU2V0IHVwIGRlZmF1bHQgY2FsbGJhY2tzICovCi0JZGV2LT5vcGVuID0gb3Jpbm9jb19vcGVuOwotCWRldi0+c3RvcCA9IG9yaW5vY29fc3RvcDsKLQlwcml2LT5oYXJkX3Jlc2V0ID0gaGFyZF9yZXNldDsKLQlwcml2LT5zdG9wX2Z3ID0gc3RvcF9mdzsKLQotCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKLQlwcml2LT5vcGVuID0gMDsKLQlwcml2LT5od191bmF2YWlsYWJsZSA9IDE7IC8qIG9yaW5vY29faW5pdCgpIG11c3QgY2xlYXIgdGhpcwotCQkJCSAgICogYmVmb3JlIGFueXRoaW5nIGVsc2UgdG91Y2hlcyB0aGUKLQkJCQkgICAqIGhhcmR3YXJlICovCi0JSU5JVF9XT1JLKCZwcml2LT5yZXNldF93b3JrLCBvcmlub2NvX3Jlc2V0KTsKLQlJTklUX1dPUksoJnByaXYtPmpvaW5fd29yaywgb3Jpbm9jb19qb2luX2FwKTsKLQlJTklUX1dPUksoJnByaXYtPndldmVudF93b3JrLCBvcmlub2NvX3NlbmRfd2V2ZW50cyk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmcHJpdi0+cnhfbGlzdCk7Ci0JdGFza2xldF9pbml0KCZwcml2LT5yeF90YXNrbGV0LCBvcmlub2NvX3J4X2lzcl90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKSBkZXYpOwotCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQlwcml2LT5sYXN0X2xpbmtzdGF0dXMgPSAweGZmZmY7Ci0KLQlwcml2LT5jYWNoZWRfcHJpX2Z3ID0gTlVMTDsKLQlwcml2LT5jYWNoZWRfZncgPSBOVUxMOwotCi0JLyogUmVnaXN0ZXIgUE0gbm90aWZpZXJzICovCi0Jb3Jpbm9jb19yZWdpc3Rlcl9wbV9ub3RpZmllcihwcml2KTsKLQotCXJldHVybiBkZXY7Ci19Ci0KLXZvaWQgZnJlZV9vcmlub2NvZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG9yaW5vY29fcnhfZGF0YSAqcnhfZGF0YSwgKnRlbXA7Ci0KLQkvKiBJZiB0aGUgdGFza2xldCBpcyBzY2hlZHVsZWQgd2hlbiB3ZSBjYWxsIHRhc2tsZXRfa2lsbCBpdAotCSAqIHdpbGwgcnVuIG9uZSBmaW5hbCB0aW1lLiBIb3dldmVyIHRoZSB0YXNrbGV0IHdpbGwgb25seQotCSAqIGRyYWluIHByaXYtPnJ4X2xpc3QgaWYgdGhlIGh3IGlzIHN0aWxsIGF2YWlsYWJsZS4gKi8KLQl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOwotCi0JLyogRXhwbGljaXRseSBkcmFpbiBwcml2LT5yeF9saXN0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJ4X2RhdGEsIHRlbXAsICZwcml2LT5yeF9saXN0LCBsaXN0KSB7Ci0JCWxpc3RfZGVsKCZyeF9kYXRhLT5saXN0KTsKLQotCQlkZXZfa2ZyZWVfc2tiKHJ4X2RhdGEtPnNrYik7Ci0JCWtmcmVlKHJ4X2RhdGEtPmRlc2MpOwotCQlrZnJlZShyeF9kYXRhKTsKLQl9Ci0KLQlvcmlub2NvX3VucmVnaXN0ZXJfcG1fbm90aWZpZXIocHJpdik7Ci0Jb3Jpbm9jb191bmNhY2hlX2Z3KHByaXYpOwotCi0JcHJpdi0+d3BhX2llX2xlbiA9IDA7Ci0Ja2ZyZWUocHJpdi0+d3BhX2llKTsKLQlvcmlub2NvX21pY19mcmVlKHByaXYpOwotCW9yaW5vY29fYnNzX2RhdGFfZnJlZShwcml2KTsKLQlmcmVlX25ldGRldihkZXYpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBXaXJlbGVzcyBleHRlbnNpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFJldHVybiA6IDwgMCAtPiBlcnJvciBjb2RlIDsgPj0gMCAtPiBsZW5ndGggKi8KLXN0YXRpYyBpbnQgb3Jpbm9jb19od19nZXRfZXNzaWQoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50ICphY3RpdmUsCi0JCQkJY2hhciBidWZbSVdfRVNTSURfTUFYX1NJWkUrMV0pCi17Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBoZXJtZXNfaWRzdHJpbmcgZXNzaWRidWY7Ci0JY2hhciAqcCA9IChjaGFyICopKCZlc3NpZGJ1Zi52YWwpOwotCWludCBsZW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA+IDApIHsKLQkJLyogV2UgcmVhZCB0aGUgZGVzaXJlZCBTU0lEIGZyb20gdGhlIGhhcmR3YXJlIHJhdGhlcgotCQkgICB0aGFuIGZyb20gcHJpdi0+ZGVzaXJlZF9lc3NpZCwganVzdCBpbiBjYXNlIHRoZQotCQkgICBmaXJtd2FyZSBpcyBhbGxvd2VkIHRvIGNoYW5nZSBpdCBvbiB1cy4gSSdtIG5vdAotCQkgICBzdXJlIGFib3V0IHRoaXMgKi8KLQkJLyogTXkgZ3Vlc3MgaXMgdGhhdCB0aGUgT1dOU1NJRCBzaG91bGQgYWx3YXlzIGJlIHdoYXRldmVyCi0JCSAqIHdlIHNldCB0byB0aGUgY2FyZCwgd2hlcmVhcyBDVVJSRU5UX1NTSUQgaXMgdGhlIG9uZSB0aGF0Ci0JCSAqIG1heSBjaGFuZ2UuLi4gLSBKZWFuIElJICovCi0JCXUxNiByaWQ7Ci0KLQkJKmFjdGl2ZSA9IDE7Ci0KLQkJcmlkID0gKHByaXYtPnBvcnRfdHlwZSA9PSAzKSA/IEhFUk1FU19SSURfQ05GT1dOU1NJRCA6Ci0JCQlIRVJNRVNfUklEX0NORkRFU0lSRURTU0lEOwotCQkKLQkJZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgcmlkLCBzaXplb2YoZXNzaWRidWYpLAotCQkJCSAgICAgIE5VTEwsICZlc3NpZGJ1Zik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGZhaWxfdW5sb2NrOwotCX0gZWxzZSB7Ci0JCSphY3RpdmUgPSAwOwotCi0JCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVFNTSUQsCi0JCQkJICAgICAgc2l6ZW9mKGVzc2lkYnVmKSwgTlVMTCwgJmVzc2lkYnVmKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZmFpbF91bmxvY2s7Ci0JfQotCi0JbGVuID0gbGUxNl90b19jcHUoZXNzaWRidWYubGVuKTsKLQlCVUdfT04obGVuID4gSVdfRVNTSURfTUFYX1NJWkUpOwotCi0JbWVtc2V0KGJ1ZiwgMCwgSVdfRVNTSURfTUFYX1NJWkUpOwotCW1lbWNweShidWYsIHAsIGxlbik7Ci0JZXJyID0gbGVuOwotCi0gZmFpbF91bmxvY2s6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7ICAgICAgIAotfQotCi1zdGF0aWMgbG9uZyBvcmlub2NvX2h3X2dldF9mcmVxKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpCi17Ci0JCi0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXUxNiBjaGFubmVsOwotCWxvbmcgZnJlcSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NVUlJFTlRDSEFOTkVMLCAmY2hhbm5lbCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQkvKiBJbnRlcnNpbCBmaXJtd2FyZSAxLjMuNSByZXR1cm5zIDAgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGRvd24gKi8KLQlpZiAoY2hhbm5lbCA9PSAwKSB7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKCAoY2hhbm5lbCA8IDEpIHx8IChjaGFubmVsID4gTlVNX0NIQU5ORUxTKSApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENoYW5uZWwgb3V0IG9mIHJhbmdlICglZCkhXG4iLAotCQkgICAgICAgcHJpdi0+bmRldi0+bmFtZSwgY2hhbm5lbCk7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0KLQl9Ci0JZnJlcSA9IGNoYW5uZWxfZnJlcXVlbmN5W2NoYW5uZWwtMV0gKiAxMDAwMDA7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCWlmIChlcnIgPiAwKQotCQllcnIgPSAtRUJVU1k7Ci0JcmV0dXJuIGVyciA/IGVyciA6IGZyZXE7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3Qoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgICBpbnQgKm51bXJhdGVzLCBzMzIgKnJhdGVzLCBpbnQgbWF4KQotewotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlzdHJ1Y3QgaGVybWVzX2lkc3RyaW5nIGxpc3Q7Ci0JdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopJmxpc3QudmFsOwotCWludCBlcnIgPSAwOwotCWludCBudW07Ci0JaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JZXJyID0gaGVybWVzX3JlYWRfbHR2KGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9TVVBQT1JURUREQVRBUkFURVMsCi0JCQkgICAgICBzaXplb2YobGlzdCksIE5VTEwsICZsaXN0KTsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQkKLQludW0gPSBsZTE2X3RvX2NwdShsaXN0Lmxlbik7Ci0JKm51bXJhdGVzID0gbnVtOwotCW51bSA9IG1pbihudW0sIG1heCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJcmF0ZXNbaV0gPSAocFtpXSAmIDB4N2YpICogNTAwMDAwOyAvKiBjb252ZXJ0IHRvIGJwcyAqLwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBjaGFyICpuYW1lLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgbnVtcmF0ZXM7Ci0JaW50IGVycjsKLQotCWVyciA9IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHByaXYsICZudW1yYXRlcywgTlVMTCwgMCk7Ci0KLQlpZiAoIWVyciAmJiAobnVtcmF0ZXMgPiAyKSkKLQkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMWIiKTsKLQllbHNlCi0JCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTEtRFMiKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0d2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0YXRpYyBjb25zdCB1OCBvZmZfYWRkcltdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07Ci0Jc3RhdGljIGNvbnN0IHU4IGFueV9hZGRyW10gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogRW5hYmxlIGF1dG9tYXRpYyByb2FtaW5nIC0gbm8gc2FuaXR5IGNoZWNrcyBhcmUgbmVlZGVkICovCi0JaWYgKG1lbWNtcCgmYXBfYWRkci0+c2FfZGF0YSwgb2ZmX2FkZHIsIEVUSF9BTEVOKSA9PSAwIHx8Ci0JICAgIG1lbWNtcCgmYXBfYWRkci0+c2FfZGF0YSwgYW55X2FkZHIsIEVUSF9BTEVOKSA9PSAwKSB7Ci0JCXByaXYtPmJzc2lkX2ZpeGVkID0gMDsKLQkJbWVtc2V0KHByaXYtPmRlc2lyZWRfYnNzaWQsIDAsIEVUSF9BTEVOKTsKLQotCQkvKiAib2ZmIiBtZWFucyBrZWVwIGV4aXN0aW5nIGNvbm5lY3Rpb24gKi8KLQkJaWYgKGFwX2FkZHItPnNhX2RhdGFbMF0gPT0gMCkgewotCQkJX19vcmlub2NvX2h3X3NldF93YXAocHJpdik7Ci0JCQllcnIgPSAwOwotCQl9Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEx1Y2VudC9BZ2VyZSBmaXJtd2FyZSBkb2Vzbid0ICIKLQkJICAgICAgICJzdXBwb3J0IG1hbnVhbCByb2FtaW5nXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChwcml2LT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1hbnVhbCByb2FtaW5nIHN1cHBvcnRlZCBvbmx5IGluICIKLQkJICAgICAgICJtYW5hZ2VkIG1vZGVcbiIsIGRldi0+bmFtZSk7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBJbnRlcnNpbCBmaXJtd2FyZSBoYW5ncyB3aXRob3V0IERlc2lyZWQgRVNTSUQgKi8KLQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMICYmCi0JICAgIHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEZXNpcmVkIEVTU0lEIG11c3QgYmUgc2V0IGZvciAiCi0JCSAgICAgICAibWFudWFsIHJvYW1pbmdcbiIsIGRldi0+bmFtZSk7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBGaW5hbGx5LCBlbmFibGUgbWFudWFsIHJvYW1pbmcgKi8KLQlwcml2LT5ic3NpZF9maXhlZCA9IDE7Ci0JbWVtY3B5KHByaXYtPmRlc2lyZWRfYnNzaWQsICZhcF9hZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0d2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVEJTU0lELAotCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIGFwX2FkZHItPnNhX2RhdGEpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHUzMiAqbW9kZSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHByaXYtPml3X21vZGUgPT0gKm1vZGUpCi0JCXJldHVybiAwOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlzd2l0Y2ggKCptb2RlKSB7Ci0JY2FzZSBJV19NT0RFX0FESE9DOgotCQlpZiAoIXByaXYtPmhhc19pYnNzICYmICFwcml2LT5oYXNfcG9ydDMpCi0JCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX01PREVfSU5GUkE6Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19NT0RFX01PTklUT1I6Ci0JCWlmIChwcml2LT5icm9rZW5fbW9uaXRvciAmJiAhZm9yY2VfbW9uaXRvcikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1vbml0b3IgbW9kZSBzdXBwb3J0IGlzICIKLQkJCSAgICAgICAiYnVnZ3kgaW4gdGhpcyBmaXJtd2FyZSwgbm90IGVuYWJsaW5nXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoZXJyID09IC1FSU5QUk9HUkVTUykgewotCQlwcml2LT5pd19tb2RlID0gKm1vZGU7Ci0JCXNldF9wb3J0X3R5cGUocHJpdik7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHUzMiAqbW9kZSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQkqbW9kZSA9IHByaXYtPml3X21vZGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgIHN0cnVjdCBpd19wb2ludCAqcnJxLAotCQkJCSAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKLQlpbnQgbnVtcmF0ZXM7Ci0JaW50IGksIGs7Ci0KLQlycnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOwotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOwotCi0JcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0JcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMjI7Ci0KLQkvKiBTZXQgYXZhaWxhYmxlIGNoYW5uZWxzL2ZyZXF1ZW5jaWVzICovCi0JcmFuZ2UtPm51bV9jaGFubmVscyA9IE5VTV9DSEFOTkVMUzsKLQlrID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKLQkJaWYgKHByaXYtPmNoYW5uZWxfbWFzayAmICgxIDw8IGkpKSB7Ci0JCQlyYW5nZS0+ZnJlcVtrXS5pID0gaSArIDE7Ci0JCQlyYW5nZS0+ZnJlcVtrXS5tID0gY2hhbm5lbF9mcmVxdWVuY3lbaV0gKiAxMDAwMDA7Ci0JCQlyYW5nZS0+ZnJlcVtrXS5lID0gMTsKLQkJCWsrKzsKLQkJfQotCQkKLQkJaWYgKGsgPj0gSVdfTUFYX0ZSRVFVRU5DSUVTKQotCQkJYnJlYWs7Ci0JfQotCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gazsKLQlyYW5nZS0+c2Vuc2l0aXZpdHkgPSAzOwotCi0JaWYgKHByaXYtPmhhc193ZXApIHsKLQkJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBPUklOT0NPX01BWF9LRVlTOwotCQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IFNNQUxMX0tFWV9TSVpFOwotCQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMTsKLQotCQlpZiAocHJpdi0+aGFzX2JpZ193ZXApIHsKLQkJCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gTEFSR0VfS0VZX1NJWkU7Ci0JCQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKLQkJfQotCX0KLQotCWlmIChwcml2LT5oYXNfd3BhKQotCQlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUDsKLQotCWlmICgocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJiAoIVNQWV9OVU1CRVIocHJpdikpKXsKLQkJLyogUXVhbGl0eSBzdGF0cyBtZWFuaW5nbGVzcyBpbiBhZC1ob2MgbW9kZSAqLwotCX0gZWxzZSB7Ci0JCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gMHg4YiAtIDB4MmY7Ci0JCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDB4MmYgLSAweDk1IC0gMTsKLQkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMHgyZiAtIDB4OTUgLSAxOwotCQkvKiBOZWVkIHRvIGdldCBiZXR0ZXIgdmFsdWVzICovCi0JCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gMHgyNDsKLQkJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gMHhDMjsKLQkJcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gMHg5RTsKLQl9Ci0KLQllcnIgPSBvcmlub2NvX2h3X2dldF9iaXRyYXRlbGlzdChwcml2LCAmbnVtcmF0ZXMsCi0JCQkJCSByYW5nZS0+Yml0cmF0ZSwgSVdfTUFYX0JJVFJBVEVTKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCXJhbmdlLT5udW1fYml0cmF0ZXMgPSBudW1yYXRlczsKLQotCS8qIFNldCBhbiBpbmRpY2F0aW9uIG9mIHRoZSBtYXggVENQIHRocm91Z2hwdXQgaW4gYml0L3MgdGhhdCB3ZSBjYW4KLQkgKiBleHBlY3QgdXNpbmcgdGhpcyBpbnRlcmZhY2UuIE1heSBiZSB1c2UgZm9yIFFvUyBzdHVmZi4uLgotCSAqIEplYW4gSUkgKi8KLQlpZiAobnVtcmF0ZXMgPiAyKQotCQlyYW5nZS0+dGhyb3VnaHB1dCA9IDUgKiAxMDAwICogMTAwMDsJLyogfjUgTWIvcyAqLwotCWVsc2UKLQkJcmFuZ2UtPnRocm91Z2hwdXQgPSAxLjUgKiAxMDAwICogMTAwMDsJLyogfjEuNSBNYi9zICovCi0KLQlyYW5nZS0+bWluX3J0cyA9IDA7Ci0JcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OwotCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKLQlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OwotCi0JcmFuZ2UtPm1pbl9wbXAgPSAwOwotCXJhbmdlLT5tYXhfcG1wID0gNjU1MzUwMDA7Ci0JcmFuZ2UtPm1pbl9wbXQgPSAwOwotCXJhbmdlLT5tYXhfcG10ID0gNjU1MzUgKiAxMDAwOwkvKiA/Pz8gKi8KLQlyYW5nZS0+cG1wX2ZsYWdzID0gSVdfUE9XRVJfUEVSSU9EOwotCXJhbmdlLT5wbXRfZmxhZ3MgPSBJV19QT1dFUl9USU1FT1VUOwotCXJhbmdlLT5wbV9jYXBhID0gSVdfUE9XRVJfUEVSSU9EIHwgSVdfUE9XRVJfVElNRU9VVCB8IElXX1BPV0VSX1VOSUNBU1RfUjsKLQotCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MSUZFVElNRTsKLQlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKLQlyYW5nZS0+cl90aW1lX2ZsYWdzID0gSVdfUkVUUllfTElGRVRJTUU7Ci0JcmFuZ2UtPm1pbl9yZXRyeSA9IDA7Ci0JcmFuZ2UtPm1heF9yZXRyeSA9IDY1NTM1OwkvKiA/Pz8gKi8KLQlyYW5nZS0+bWluX3JfdGltZSA9IDA7Ci0JcmFuZ2UtPm1heF9yX3RpbWUgPSA2NTUzNSAqIDEwMDA7CS8qID8/PyAqLwotCi0JaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkKLQkJcmFuZ2UtPnNjYW5fY2FwYSA9IElXX1NDQU5fQ0FQQV9FU1NJRDsKLQllbHNlCi0JCXJhbmdlLT5zY2FuX2NhcGEgPSBJV19TQ0FOX0NBUEFfTk9ORTsKLQotCS8qIEV2ZW50IGNhcGFiaWxpdHkgKGtlcm5lbCkgKi8KLQlJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwocmFuZ2UtPmV2ZW50X2NhcGEpOwotCS8qIEV2ZW50IGNhcGFiaWxpdHkgKGRyaXZlcikgKi8KLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1RIUlNQWSk7Ci0JSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdBUCk7Ci0JSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdTQ0FOKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgSVdFVlRYRFJPUCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGl3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsCi0JCQkJICAgICBjaGFyICprZXlidWYpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGluZGV4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKLQlpbnQgc2V0aW5kZXggPSBwcml2LT50eF9rZXk7Ci0JaW50IGVuY29kZV9hbGcgPSBwcml2LT5lbmNvZGVfYWxnOwotCWludCByZXN0cmljdGVkID0gcHJpdi0+d2VwX3Jlc3RyaWN0OwotCXUxNiB4bGVuID0gMDsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoISBwcml2LT5oYXNfd2VwKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoZXJxLT5wb2ludGVyKSB7Ci0JCS8qIFdlIGFjdHVhbGx5IGhhdmUgYSBrZXkgdG8gc2V0IC0gY2hlY2sgaXRzIGxlbmd0aCAqLwotCQlpZiAoZXJxLT5sZW5ndGggPiBMQVJHRV9LRVlfU0laRSkKLQkJCXJldHVybiAtRTJCSUc7Ci0KLQkJaWYgKCAoZXJxLT5sZW5ndGggPiBTTUFMTF9LRVlfU0laRSkgJiYgIXByaXYtPmhhc19iaWdfd2VwICkKLQkJCXJldHVybiAtRTJCSUc7Ci0JfQotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBDbGVhciBhbnkgVEtJUCBrZXkgd2UgaGF2ZSAqLwotCWlmICgocHJpdi0+aGFzX3dwYSkgJiYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSkKLQkJKHZvaWQpIG9yaW5vY29fY2xlYXJfdGtpcF9rZXkocHJpdiwgc2V0aW5kZXgpOwotCi0JaWYgKGVycS0+bGVuZ3RoID4gMCkgewotCQlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IE9SSU5PQ09fTUFYX0tFWVMpKQotCQkJaW5kZXggPSBwcml2LT50eF9rZXk7Ci0KLQkJLyogQWRqdXN0IGtleSBsZW5ndGggdG8gYSBzdXBwb3J0ZWQgdmFsdWUgKi8KLQkJaWYgKGVycS0+bGVuZ3RoID4gU01BTExfS0VZX1NJWkUpIHsKLQkJCXhsZW4gPSBMQVJHRV9LRVlfU0laRTsKLQkJfSBlbHNlIGlmIChlcnEtPmxlbmd0aCA+IDApIHsKLQkJCXhsZW4gPSBTTUFMTF9LRVlfU0laRTsKLQkJfSBlbHNlCi0JCQl4bGVuID0gMDsKLQotCQkvKiBTd2l0Y2ggb24gV0VQIGlmIG9mZiAqLwotCQlpZiAoKGVuY29kZV9hbGcgIT0gSVdfRU5DT0RFX0FMR19XRVApICYmICh4bGVuID4gMCkpIHsKLQkJCXNldGluZGV4ID0gaW5kZXg7Ci0JCQllbmNvZGVfYWxnID0gSVdfRU5DT0RFX0FMR19XRVA7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBJbXBvcnRhbnQgbm90ZSA6IGlmIHRoZSB1c2VyIGRvICJpd2NvbmZpZyBldGgwIGVuYyBvZmYiLAotCQkgKiB3ZSB3aWxsIGFycml2ZSB0aGVyZSB3aXRoIGFuIGluZGV4IG9mIC0xLiBUaGlzIGlzIHZhbGlkCi0JCSAqIGJ1dCBuZWVkIHRvIGJlIHRha2VuIGNhcmUgb2ZmLi4uIEplYW4gSUkgKi8KLQkJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBPUklOT0NPX01BWF9LRVlTKSkgewotCQkJaWYoKGluZGV4ICE9IC0xKSB8fCAoZXJxLT5mbGFncyA9PSAwKSkgewotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBTZXQgdGhlIGluZGV4IDogQ2hlY2sgdGhhdCB0aGUga2V5IGlzIHZhbGlkICovCi0JCQlpZihwcml2LT5rZXlzW2luZGV4XS5sZW4gPT0gMCkgewotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlzZXRpbmRleCA9IGluZGV4OwotCQl9Ci0JfQotCi0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCi0JCWVuY29kZV9hbGcgPSBJV19FTkNPREVfQUxHX05PTkU7Ci0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKLQkJcmVzdHJpY3RlZCA9IDA7Ci0JaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKLQkJcmVzdHJpY3RlZCA9IDE7Ci0KLQlpZiAoZXJxLT5wb2ludGVyICYmIGVycS0+bGVuZ3RoID4gMCkgewotCQlwcml2LT5rZXlzW2luZGV4XS5sZW4gPSBjcHVfdG9fbGUxNih4bGVuKTsKLQkJbWVtc2V0KHByaXYtPmtleXNbaW5kZXhdLmRhdGEsIDAsCi0JCSAgICAgICBzaXplb2YocHJpdi0+a2V5c1tpbmRleF0uZGF0YSkpOwotCQltZW1jcHkocHJpdi0+a2V5c1tpbmRleF0uZGF0YSwga2V5YnVmLCBlcnEtPmxlbmd0aCk7Ci0JfQotCXByaXYtPnR4X2tleSA9IHNldGluZGV4OwotCi0JLyogVHJ5IGZhc3Qga2V5IGNoYW5nZSBpZiBjb25uZWN0ZWQgYW5kIG9ubHkga2V5cyBhcmUgY2hhbmdlZCAqLwotCWlmICgocHJpdi0+ZW5jb2RlX2FsZyA9PSBlbmNvZGVfYWxnKSAmJgotCSAgICAocHJpdi0+d2VwX3Jlc3RyaWN0ID09IHJlc3RyaWN0ZWQpICYmCi0JICAgIG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewotCQllcnIgPSBfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhwcml2KTsKLQkJLyogTm8gbmVlZCB0byBjb21taXQgaWYgc3VjY2Vzc2Z1bCAqLwotCQlnb3RvIG91dDsKLQl9Ci0KLQlwcml2LT5lbmNvZGVfYWxnID0gZW5jb2RlX2FsZzsKLQlwcml2LT53ZXBfcmVzdHJpY3QgPSByZXN0cmljdGVkOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0aXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKLQkJCQkgICAgIGNoYXIgKmtleWJ1ZikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOwotCXUxNiB4bGVuID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKCEgcHJpdi0+aGFzX3dlcCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IE9SSU5PQ09fTUFYX0tFWVMpKQotCQlpbmRleCA9IHByaXYtPnR4X2tleTsKLQotCWVycS0+ZmxhZ3MgPSAwOwotCWlmICghcHJpdi0+ZW5jb2RlX2FsZykKLQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JZXJxLT5mbGFncyB8PSBpbmRleCArIDE7Ci0KLQlpZiAocHJpdi0+d2VwX3Jlc3RyaWN0KQotCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9SRVNUUklDVEVEOwotCWVsc2UKLQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsKLQotCXhsZW4gPSBsZTE2X3RvX2NwdShwcml2LT5rZXlzW2luZGV4XS5sZW4pOwotCi0JZXJxLT5sZW5ndGggPSB4bGVuOwotCi0JbWVtY3B5KGtleWJ1ZiwgcHJpdi0+a2V5c1tpbmRleF0uZGF0YSwgT1JJTk9DT19NQVhfS0VZX1NJWkUpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGVzc2lkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgc3RydWN0IGl3X3BvaW50ICplcnEsCi0JCQkJICBjaGFyICplc3NpZGJ1ZikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogTm90ZSA6IEVTU0lEIGlzIGlnbm9yZWQgaW4gQWQtSG9jIGRlbW8gbW9kZSwgYnV0IHdlIGNhbiBzZXQgaXQKLQkgKiBhbnl3YXkuLi4gLSBKZWFuIElJICovCi0KLQkvKiBIdW0uLi4gU2hvdWxkIG5vdCB1c2UgV2lyZWxlc3MgRXh0ZW5zaW9uIGNvbnN0YW50IChtYXkgY2hhbmdlKSwKLQkgKiBzaG91bGQgdXNlIG91ciBvd24uLi4gLSBKZWFuIElJICovCi0JaWYgKGVycS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpCi0JCXJldHVybiAtRTJCSUc7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIE5VTEwgdGhlIHN0cmluZyAoZm9yIE5VTEwgdGVybWluYXRpb24gJiBFU1NJRCA9IEFOWSkgLSBKZWFuIElJICovCi0JbWVtc2V0KHByaXYtPmRlc2lyZWRfZXNzaWQsIDAsIHNpemVvZihwcml2LT5kZXNpcmVkX2Vzc2lkKSk7Ci0KLQkvKiBJZiBub3QgQU5ZLCBnZXQgdGhlIG5ldyBFU1NJRCAqLwotCWlmIChlcnEtPmZsYWdzKSB7Ci0JCW1lbWNweShwcml2LT5kZXNpcmVkX2Vzc2lkLCBlc3NpZGJ1ZiwgZXJxLT5sZW5ndGgpOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKLQkJCQkgIGNoYXIgKmVzc2lkYnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBhY3RpdmU7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJZXJyID0gb3Jpbm9jb19od19nZXRfZXNzaWQocHJpdiwgJmFjdGl2ZSwgZXNzaWRidWYpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JCWVycS0+bGVuZ3RoID0gZXJyOwotCX0gZWxzZSB7Ci0JCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQkJcmV0dXJuIC1FQlVTWTsKLQkJbWVtY3B5KGVzc2lkYnVmLCBwcml2LT5kZXNpcmVkX2Vzc2lkLCBJV19FU1NJRF9NQVhfU0laRSk7Ci0JCWVycS0+bGVuZ3RoID0gc3RybGVuKHByaXYtPmRlc2lyZWRfZXNzaWQpOwotCQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCX0KLQotCWVycS0+ZmxhZ3MgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRuaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqbnJxLAotCQkJCSBjaGFyICpuaWNrYnVmKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAobnJxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKLQkJcmV0dXJuIC1FMkJJRzsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JbWVtc2V0KHByaXYtPm5pY2ssIDAsIHNpemVvZihwcml2LT5uaWNrKSk7Ci0JbWVtY3B5KHByaXYtPm5pY2ssIG5pY2tidWYsIG5ycS0+bGVuZ3RoKTsKLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bmljayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKm5ycSwKLQkJCQkgY2hhciAqbmlja2J1ZikKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQltZW1jcHkobmlja2J1ZiwgcHJpdi0+bmljaywgSVdfRVNTSURfTUFYX1NJWkUpOwotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlucnEtPmxlbmd0aCA9IHN0cmxlbihwcml2LT5uaWNrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfZnJlcSAqZnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgY2hhbiA9IC0xOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLQotCS8qIEluIGluZnJhc3RydWN0dXJlIG1vZGUgdGhlIEFQIHNldHMgdGhlIGNoYW5uZWwgKi8KLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKCAoZnJxLT5lID09IDApICYmIChmcnEtPm0gPD0gMTAwMCkgKSB7Ci0JCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KLQkJY2hhbiA9IGZycS0+bTsKLQl9IGVsc2UgewotCQkvKiBTZXR0aW5nIGJ5IGZyZXF1ZW5jeSAtIHNlYXJjaCB0aGUgdGFibGUgKi8KLQkJaW50IG11bHQgPSAxOwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgKDYgLSBmcnEtPmUpOyBpKyspCi0JCQltdWx0ICo9IDEwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykKLQkJCWlmIChmcnEtPm0gPT0gKGNoYW5uZWxfZnJlcXVlbmN5W2ldICogbXVsdCkpCi0JCQkJY2hhbiA9IGkrMTsKLQl9Ci0KLQlpZiAoIChjaGFuIDwgMSkgfHwgKGNoYW4gPiBOVU1fQ0hBTk5FTFMpIHx8Ci0JICAgICAhIChwcml2LT5jaGFubmVsX21hc2sgJiAoMSA8PCAoY2hhbi0xKSkgKSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlwcml2LT5jaGFubmVsID0gY2hhbjsKLQlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKLQkJLyogRmFzdCBjaGFubmVsIGNoYW5nZSAtIG5vIGNvbW1pdCBpZiBzdWNjZXNzZnVsICovCi0JCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8Ci0JCQkJCSAgICBIRVJNRVNfVEVTVF9TRVRfQ0hBTk5FTCwKLQkJCQkJY2hhbiwgTlVMTCk7Ci0JfQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfZnJlcSAqZnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgdG1wOwotCi0JLyogTG9ja2luZyBkb25lIGluIHRoZXJlICovCi0JdG1wID0gb3Jpbm9jb19od19nZXRfZnJlcShwcml2KTsKLQlpZiAodG1wIDwgMCkgewotCQlyZXR1cm4gdG1wOwotCX0KLQotCWZycS0+bSA9IHRtcDsKLQlmcnEtPmUgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqc3JxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JdTE2IHZhbDsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoIXByaXYtPmhhc19zZW5zaXRpdml0eSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJICBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLCAmdmFsKTsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXNycS0+dmFsdWUgPSB2YWw7Ci0Jc3JxLT5maXhlZCA9IDA7IC8qIGF1dG8gKi8KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnNycSwKLQkJCQkgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHZhbCA9IHNycS0+dmFsdWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghcHJpdi0+aGFzX3NlbnNpdGl2aXR5KQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoKHZhbCA8IDEpIHx8ICh2YWwgPiAzKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0JcHJpdi0+YXBfZGVuc2l0eSA9IHZhbDsKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHJ0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IGl3X3BhcmFtICpycnEsCi0JCQkJY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IHZhbCA9IHJycS0+dmFsdWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChycnEtPmRpc2FibGVkKQotCQl2YWwgPSAyMzQ3OwotCi0JaWYgKCAodmFsIDwgMCkgfHwgKHZhbCA+IDIzNDcpICkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXByaXYtPnJ0c190aHJlc2ggPSB2YWw7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCi19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLAotCQkJCWNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JcnJxLT52YWx1ZSA9IHByaXYtPnJ0c190aHJlc2g7Ci0JcnJxLT5kaXNhYmxlZCA9IChycnEtPnZhbHVlID09IDIzNDcpOwotCXJycS0+Zml4ZWQgPSAxOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqZnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmIChwcml2LT5oYXNfbXdvKSB7Ci0JCWlmIChmcnEtPmRpc2FibGVkKQotCQkJcHJpdi0+bXdvX3JvYnVzdCA9IDA7Ci0JCWVsc2UgewotCQkJaWYgKGZycS0+Zml4ZWQpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEZpeGVkIGZyYWdtZW50YXRpb24gaXMgIgotCQkJCSAgICAgICAibm90IHN1cHBvcnRlZCBvbiB0aGlzIGZpcm13YXJlLiAiCi0JCQkJICAgICAgICJVc2luZyBNV08gcm9idXN0IGluc3RlYWQuXG4iLCBkZXYtPm5hbWUpOwotCQkJcHJpdi0+bXdvX3JvYnVzdCA9IDE7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoZnJxLT5kaXNhYmxlZCkKLQkJCXByaXYtPmZyYWdfdGhyZXNoID0gMjM0NjsKLQkJZWxzZSB7Ci0JCQlpZiAoIChmcnEtPnZhbHVlIDwgMjU2KSB8fCAoZnJxLT52YWx1ZSA+IDIzNDYpICkKLQkJCQllcnIgPSAtRUlOVkFMOwotCQkJZWxzZQotCQkJCXByaXYtPmZyYWdfdGhyZXNoID0gZnJxLT52YWx1ZSAmIH4weDE7IC8qIG11c3QgYmUgZXZlbiAqLwotCQl9Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqZnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVycjsKLQl1MTYgdmFsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQkKLQlpZiAocHJpdi0+aGFzX213bykgewotCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkJICBIRVJNRVNfUklEX0NORk1XT1JPQlVTVF9BR0VSRSwKLQkJCQkJICAmdmFsKTsKLQkJaWYgKGVycikKLQkJCXZhbCA9IDA7Ci0KLQkJZnJxLT52YWx1ZSA9IHZhbCA/IDIzNDcgOiAwOwotCQlmcnEtPmRpc2FibGVkID0gISB2YWw7Ci0JCWZycS0+Zml4ZWQgPSAwOwotCX0gZWxzZSB7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCi0JCQkJCSAgJnZhbCk7Ci0JCWlmIChlcnIpCi0JCQl2YWwgPSAwOwotCi0JCWZycS0+dmFsdWUgPSB2YWw7Ci0JCWZycS0+ZGlzYWJsZWQgPSAodmFsID49IDIzNDYpOwotCQlmcnEtPmZpeGVkID0gMTsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqcnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgcmF0ZW1vZGUgPSAtMTsKLQlpbnQgYml0cmF0ZTsgLyogMTAwcyBvZiBraWxvYml0cyAqLwotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCi0JLyogQXMgdGhlIHVzZXIgc3BhY2UgZG9lc24ndCBrbm93IG91ciBoaWdoZXN0IHJhdGUsIGl0IHVzZXMgLTEKLQkgKiB0byBhc2sgdXMgdG8gc2V0IHRoZSBoaWdoZXN0IHJhdGUuICBUZXN0IGl0IHVzaW5nICJpd2NvbmZpZwotCSAqIGV0aFggcmF0ZSBhdXRvIiAtIEplYW4gSUkgKi8KLQlpZiAocnJxLT52YWx1ZSA9PSAtMSkKLQkJYml0cmF0ZSA9IDExMDsKLQllbHNlIHsKLQkJaWYgKHJycS0+dmFsdWUgJSAxMDAwMDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYml0cmF0ZSA9IHJycS0+dmFsdWUgLyAxMDAwMDA7Ci0JfQotCi0JaWYgKCAoYml0cmF0ZSAhPSAxMCkgJiYgKGJpdHJhdGUgIT0gMjApICYmCi0JICAgICAoYml0cmF0ZSAhPSA1NSkgJiYgKGJpdHJhdGUgIT0gMTEwKSApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChpID0gMDsgaSA8IEJJVFJBVEVfVEFCTEVfU0laRTsgaSsrKQotCQlpZiAoIChiaXRyYXRlX3RhYmxlW2ldLmJpdHJhdGUgPT0gYml0cmF0ZSkgJiYKLQkJICAgICAoYml0cmF0ZV90YWJsZVtpXS5hdXRvbWF0aWMgPT0gISBycnEtPmZpeGVkKSApIHsKLQkJCXJhdGVtb2RlID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JCi0JaWYgKHJhdGVtb2RlID09IC0xKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCXByaXYtPmJpdHJhdGVtb2RlID0gcmF0ZW1vZGU7Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiAtRUlOUFJPR1JFU1M7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRyYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wYXJhbSAqcnJxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0JaW50IGVyciA9IDA7Ci0JaW50IHJhdGVtb2RlOwotCWludCBpOwotCXUxNiB2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcmF0ZW1vZGUgPSBwcml2LT5iaXRyYXRlbW9kZTsKLQotCUJVR19PTigocmF0ZW1vZGUgPCAwKSB8fCAocmF0ZW1vZGUgPj0gQklUUkFURV9UQUJMRV9TSVpFKSk7Ci0KLQlycnEtPnZhbHVlID0gYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uYml0cmF0ZSAqIDEwMDAwMDsKLQlycnEtPmZpeGVkID0gISBiaXRyYXRlX3RhYmxlW3JhdGVtb2RlXS5hdXRvbWF0aWM7Ci0JcnJxLT5kaXNhYmxlZCA9IDA7Ci0KLQkvKiBJZiB0aGUgaW50ZXJmYWNlIGlzIHJ1bm5pbmcgd2UgdHJ5IHRvIGZpbmQgbW9yZSBhYm91dCB0aGUKLQkgICBjdXJyZW50IG1vZGUgKi8KLQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7Ci0JCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkgIEhFUk1FU19SSURfQ1VSUkVOVFRYUkFURSwgJnZhbCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQkJCi0JCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6IC8qIEx1Y2VudCBzdHlsZSByYXRlICovCi0JCQkvKiBOb3RlIDogaW4gTHVjZW50IGZpcm13YXJlLCB0aGUgcmV0dXJuIHZhbHVlIG9mCi0JCQkgKiBIRVJNRVNfUklEX0NVUlJFTlRUWFJBVEUgaXMgdGhlIGJpdHJhdGUgaW4gTWIvcywKLQkJCSAqIGFuZCB0aGVyZWZvcmUgaXMgdG90YWxseSBkaWZmZXJlbnQgZnJvbSB0aGUKLQkJCSAqIGVuY29kaW5nIG9mIEhFUk1FU19SSURfQ05GVFhSQVRFQ09OVFJPTC4KLQkJCSAqIERvbid0IGZvcmdldCB0aGF0IDZNYi9zIGlzIHJlYWxseSA1LjVNYi9zICovCi0JCQlpZiAodmFsID09IDYpCi0JCQkJcnJxLT52YWx1ZSA9IDU1MDAwMDA7Ci0JCQllbHNlCi0JCQkJcnJxLT52YWx1ZSA9IHZhbCAqIDEwMDAwMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiAvKiBJbnRlcnNpbCBzdHlsZSByYXRlICovCi0JCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6IC8qIFN5bWJvbCBzdHlsZSByYXRlICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgQklUUkFURV9UQUJMRV9TSVpFOyBpKyspCi0JCQkJaWYgKGJpdHJhdGVfdGFibGVbaV0uaW50ZXJzaWxfdHhyYXRlY3RybCA9PSB2YWwpIHsKLQkJCQkJcmF0ZW1vZGUgPSBpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQlpZiAoaSA+PSBCSVRSQVRFX1RBQkxFX1NJWkUpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuYWJsZSB0byBkZXRlcm1pbmUgY3VycmVudCBiaXRyYXRlICgweCUwNGh4KVxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCB2YWwpOwotCi0JCQlycnEtPnZhbHVlID0gYml0cmF0ZV90YWJsZVtyYXRlbW9kZV0uYml0cmF0ZSAqIDEwMDAwMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCX0KLQl9Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcHJxLAotCQkJCSAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAocHJxLT5kaXNhYmxlZCkgewotCQlwcml2LT5wbV9vbiA9IDA7Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfTU9ERSkgewotCQljYXNlIElXX1BPV0VSX1VOSUNBU1RfUjoKLQkJCXByaXYtPnBtX21jYXN0ID0gMDsKLQkJCXByaXYtPnBtX29uID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIElXX1BPV0VSX0FMTF9SOgotCQkJcHJpdi0+cG1fbWNhc3QgPSAxOwotCQkJcHJpdi0+cG1fb24gPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVdfUE9XRVJfT046Ci0JCQkvKiBObyBmbGFncyA6IGJ1dCB3ZSBtYXkgaGF2ZSBhIHZhbHVlIC0gSmVhbiBJSSAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJCi0JCWlmIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfVElNRU9VVCkgewotCQkJcHJpdi0+cG1fb24gPSAxOwotCQkJcHJpdi0+cG1fdGltZW91dCA9IHBycS0+dmFsdWUgLyAxMDAwOwotCQl9Ci0JCWlmIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfUEVSSU9EKSB7Ci0JCQlwcml2LT5wbV9vbiA9IDE7Ci0JCQlwcml2LT5wbV9wZXJpb2QgPSBwcnEtPnZhbHVlIC8gMTAwMDsKLQkJfQotCQkvKiBJdCdzIHZhbGlkIHRvIG5vdCBoYXZlIGEgdmFsdWUgaWYgd2UgYXJlIGp1c3QgdG9nZ2xpbmcKLQkJICogdGhlIGZsYWdzLi4uIEplYW4gSUkgKi8KLQkJaWYoIXByaXYtPnBtX29uKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0JCQkKLQl9Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcHJxLAotCQkJCSAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXUxNiBlbmFibGUsIHBlcmlvZCwgdGltZW91dCwgbWNhc3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORlBNRU5BQkxFRCwgJmVuYWJsZSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKLQkJCQkgIEhFUk1FU19SSURfQ05GTUFYU0xFRVBEVVJBVElPTiwgJnBlcmlvZCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sICZ0aW1lb3V0KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX0NORk1VTFRJQ0FTVFJFQ0VJVkUsICZtY2FzdCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQlwcnEtPmRpc2FibGVkID0gIWVuYWJsZTsKLQkvKiBOb3RlIDogYnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgcGVyaW9kICovCi0JaWYgKChwcnEtPmZsYWdzICYgSVdfUE9XRVJfVFlQRSkgPT0gSVdfUE9XRVJfVElNRU9VVCkgewotCQlwcnEtPmZsYWdzID0gSVdfUE9XRVJfVElNRU9VVDsKLQkJcHJxLT52YWx1ZSA9IHRpbWVvdXQgKiAxMDAwOwotCX0gZWxzZSB7Ci0JCXBycS0+ZmxhZ3MgPSBJV19QT1dFUl9QRVJJT0Q7Ci0JCXBycS0+dmFsdWUgPSBwZXJpb2QgKiAxMDAwOwotCX0KLQlpZiAobWNhc3QpCi0JCXBycS0+ZmxhZ3MgfD0gSVdfUE9XRVJfQUxMX1I7Ci0JZWxzZQotCQlwcnEtPmZsYWdzIHw9IElXX1BPV0VSX1VOSUNBU1RfUjsKLQotIG91dDoKLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKLQkJCQkgICAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKLQlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7Ci0JaW50IGlkeCwgYWxnID0gZXh0LT5hbGcsIHNldF9rZXkgPSAxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0JdTE2IGtleV9sZW47Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIERldGVybWluZSBhbmQgdmFsaWRhdGUgdGhlIGtleSBpbmRleCAqLwotCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQlpZiAoaWR4KSB7Ci0JCWlmICgoaWR4IDwgMSkgfHwgKGlkeCA+IDQpKQotCQkJZ290byBvdXQ7Ci0JCWlkeC0tOwotCX0gZWxzZQotCQlpZHggPSBwcml2LT50eF9rZXk7Ci0KLQlpZiAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0RJU0FCTEVEKQotCSAgICBhbGcgPSBJV19FTkNPREVfQUxHX05PTkU7Ci0KLQlpZiAocHJpdi0+aGFzX3dwYSAmJiAoYWxnICE9IElXX0VOQ09ERV9BTEdfVEtJUCkpIHsKLQkJLyogQ2xlYXIgYW55IFRLSVAgVFgga2V5IHdlIGhhZCAqLwotCQkodm9pZCkgb3Jpbm9jb19jbGVhcl90a2lwX2tleShwcml2LCBwcml2LT50eF9rZXkpOwotCX0KLQotCWlmIChleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSkgewotCQlwcml2LT50eF9rZXkgPSBpZHg7Ci0JCXNldF9rZXkgPSAoKGFsZyA9PSBJV19FTkNPREVfQUxHX1RLSVApIHx8Ci0JCQkgICAoZXh0LT5rZXlfbGVuID4gMCkpID8gMSA6IDA7Ci0JfQotCi0JaWYgKHNldF9rZXkpIHsKLQkJLyogU2V0IHRoZSByZXF1ZXN0ZWQga2V5IGZpcnN0ICovCi0JCXN3aXRjaCAoYWxnKSB7Ci0JCWNhc2UgSVdfRU5DT0RFX0FMR19OT05FOgotCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKLQkJCXByaXYtPmtleXNbaWR4XS5sZW4gPSAwOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKLQkJCWlmIChleHQtPmtleV9sZW4gPiBTTUFMTF9LRVlfU0laRSkKLQkJCQlrZXlfbGVuID0gTEFSR0VfS0VZX1NJWkU7Ci0JCQllbHNlIGlmIChleHQtPmtleV9sZW4gPiAwKQotCQkJCWtleV9sZW4gPSBTTUFMTF9LRVlfU0laRTsKLQkJCWVsc2UKLQkJCQlnb3RvIG91dDsKLQotCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKLQkJCXByaXYtPmtleXNbaWR4XS5sZW4gPSBjcHVfdG9fbGUxNihrZXlfbGVuKTsKLQotCQkJa2V5X2xlbiA9IG1pbihleHQtPmtleV9sZW4sIGtleV9sZW4pOwotCi0JCQltZW1zZXQocHJpdi0+a2V5c1tpZHhdLmRhdGEsIDAsIE9SSU5PQ09fTUFYX0tFWV9TSVpFKTsKLQkJCW1lbWNweShwcml2LT5rZXlzW2lkeF0uZGF0YSwgZXh0LT5rZXksIGtleV9sZW4pOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6Ci0JCXsKLQkJCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQkJCXU4ICp0a2lwX2l2ID0gTlVMTDsKLQotCQkJaWYgKCFwcml2LT5oYXNfd3BhIHx8Ci0JCQkgICAgKGV4dC0+a2V5X2xlbiA+IHNpemVvZihwcml2LT50a2lwX2tleVswXSkpKQotCQkJCWdvdG8gb3V0OwotCi0JCQlwcml2LT5lbmNvZGVfYWxnID0gYWxnOwotCQkJbWVtc2V0KCZwcml2LT50a2lwX2tleVtpZHhdLCAwLAotCQkJICAgICAgIHNpemVvZihwcml2LT50a2lwX2tleVtpZHhdKSk7Ci0JCQltZW1jcHkoJnByaXYtPnRraXBfa2V5W2lkeF0sIGV4dC0+a2V5LCBleHQtPmtleV9sZW4pOwotCi0JCQlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1JYX1NFUV9WQUxJRCkKLQkJCQl0a2lwX2l2ID0gJmV4dC0+cnhfc2VxWzBdOwotCi0JCQllcnIgPSBfX29yaW5vY29faHdfc2V0X3RraXBfa2V5KGh3LCBpZHgsCi0JCQkJIGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZLAotCQkJCSAodTggKikgJnByaXYtPnRraXBfa2V5W2lkeF0sCi0JCQkJIHRraXBfaXYsIE5VTEwpOwotCQkJaWYgKGVycikKLQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCBzZXR0aW5nIFRLSVAga2V5IgotCQkJCSAgICAgICAiXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0KLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQllcnIgPSAtRUlOUFJPR1JFU1M7Ci0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0X2VuY29kZWV4dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJCSAgICAgICBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaXdfcG9pbnQgKmVuY29kaW5nID0gJndycXUtPmVuY29kaW5nOwotCXN0cnVjdCBpd19lbmNvZGVfZXh0ICpleHQgPSAoc3RydWN0IGl3X2VuY29kZV9leHQgKilleHRyYTsKLQlpbnQgaWR4LCBtYXhfa2V5X2xlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnI7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWVyciA9IC1FSU5WQUw7Ci0JbWF4X2tleV9sZW4gPSBlbmNvZGluZy0+bGVuZ3RoIC0gc2l6ZW9mKCpleHQpOwotCWlmIChtYXhfa2V5X2xlbiA8IDApCi0JCWdvdG8gb3V0OwotCi0JaWR4ID0gZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYOwotCWlmIChpZHgpIHsKLQkJaWYgKChpZHggPCAxKSB8fCAoaWR4ID4gNCkpCi0JCQlnb3RvIG91dDsKLQkJaWR4LS07Ci0JfSBlbHNlCi0JCWlkeCA9IHByaXYtPnR4X2tleTsKLQotCWVuY29kaW5nLT5mbGFncyA9IGlkeCArIDE7Ci0JbWVtc2V0KGV4dCwgMCwgc2l6ZW9mKCpleHQpKTsKLQotCWV4dC0+YWxnID0gcHJpdi0+ZW5jb2RlX2FsZzsKLQlzd2l0Y2ggKHByaXYtPmVuY29kZV9hbGcpIHsKLQljYXNlIElXX0VOQ09ERV9BTEdfTk9ORToKLQkJZXh0LT5rZXlfbGVuID0gMDsKLQkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKLQkJYnJlYWs7Ci0JY2FzZSBJV19FTkNPREVfQUxHX1dFUDoKLQkJZXh0LT5rZXlfbGVuID0gbWluX3QodTE2LCBsZTE2X3RvX2NwdShwcml2LT5rZXlzW2lkeF0ubGVuKSwKLQkJCQkgICAgIG1heF9rZXlfbGVuKTsKLQkJbWVtY3B5KGV4dC0+a2V5LCBwcml2LT5rZXlzW2lkeF0uZGF0YSwgZXh0LT5rZXlfbGVuKTsKLQkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOwotCQlicmVhazsKLQljYXNlIElXX0VOQ09ERV9BTEdfVEtJUDoKLQkJZXh0LT5rZXlfbGVuID0gbWluX3QodTE2LCBzaXplb2Yoc3RydWN0IG9yaW5vY29fdGtpcF9rZXkpLAotCQkJCSAgICAgbWF4X2tleV9sZW4pOwotCQltZW1jcHkoZXh0LT5rZXksICZwcml2LT50a2lwX2tleVtpZHhdLCBleHQtPmtleV9sZW4pOwotCQllbmNvZGluZy0+ZmxhZ3MgfD0gSVdfRU5DT0RFX0VOQUJMRUQ7Ci0JCWJyZWFrOwotCX0KLQotCWVyciA9IDA7Ci0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0Jc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAtRUlOUFJPR1JFU1M7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgewotCWNhc2UgSVdfQVVUSF9XUEFfVkVSU0lPTjoKLQljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgotCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6Ci0JY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgotCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6Ci0JY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6Ci0JCS8qCi0JCSAqIG9yaW5vY28gZG9lcyBub3QgdXNlIHRoZXNlIHBhcmFtZXRlcnMKLQkJICovCi0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIX0tFWV9NR01UOgotCQkvKiB3bF9sa20gaW1wbGllcyB2YWx1ZSAyID09IFBTSyBmb3IgSGVybWVzIEkKLQkJICogd2hpY2ggdGllcyBpbiB3aXRoIFdFWFQKLQkJICogbm8gb3RoZXIgaGludHMgdGhvIDooCi0JCSAqLwotCQlwcml2LT5rZXlfbWdtdCA9IHBhcmFtLT52YWx1ZTsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6Ci0JCS8qIFdoZW4gY291bnRlcm1lYXN1cmVzIGFyZSBlbmFibGVkLCBzaHV0IGRvd24gdGhlCi0JCSAqIGNhcmQ7IHdoZW4gZGlzYWJsZWQsIHJlLWVuYWJsZSB0aGUgY2FyZC4gVGhpcyBtdXN0Ci0JCSAqIHRha2UgZWZmZWN0IGltbWVkaWF0ZWx5LgotCQkgKgotCQkgKiBUT0RPOiBNYWtlIHN1cmUgdGhhdCB0aGUgRUFQT0wgbWVzc2FnZSBpcyBnZXR0aW5nCi0JCSAqICAgICAgIG91dCBiZWZvcmUgY2FyZCBkaXNhYmxlZAotCQkgKi8KLQkJaWYgKHBhcmFtLT52YWx1ZSkgewotCQkJcHJpdi0+dGtpcF9jbV9hY3RpdmUgPSAxOwotCQkJcmV0ID0gaGVybWVzX2VuYWJsZV9wb3J0KGh3LCAwKTsKLQkJfSBlbHNlIHsKLQkJCXByaXYtPnRraXBfY21fYWN0aXZlID0gMDsKLQkJCXJldCA9IGhlcm1lc19kaXNhYmxlX3BvcnQoaHcsIDApOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfU0hBUkVEX0tFWSkKLQkJCXByaXYtPndlcF9yZXN0cmljdCA9IDE7Ci0JCWVsc2UgaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX09QRU5fU1lTVEVNKQotCQkJcHJpdi0+d2VwX3Jlc3RyaWN0ID0gMDsKLQkJZWxzZQotCQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6Ci0JCWlmIChwcml2LT5oYXNfd3BhKSB7Ci0JCQlwcml2LT53cGFfZW5hYmxlZCA9IHBhcmFtLT52YWx1ZSA/IDEgOiAwOwotCQl9IGVsc2UgewotCQkJaWYgKHBhcmFtLT52YWx1ZSkKLQkJCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJCS8qIGVsc2Ugc2lsZW50bHkgYWNjZXB0IGRpc2FibGUgb2YgV1BBICovCi0JCQlwcml2LT53cGFfZW5hYmxlZCA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0Jc3dpdGNoIChwYXJhbS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7Ci0JY2FzZSBJV19BVVRIX0tFWV9NR01UOgotCQlwYXJhbS0+dmFsdWUgPSBwcml2LT5rZXlfbWdtdDsKLQkJYnJlYWs7Ci0KLQljYXNlIElXX0FVVEhfVEtJUF9DT1VOVEVSTUVBU1VSRVM6Ci0JCXBhcmFtLT52YWx1ZSA9IHByaXYtPnRraXBfY21fYWN0aXZlOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKLQkJaWYgKHByaXYtPndlcF9yZXN0cmljdCkKLQkJCXBhcmFtLT52YWx1ZSA9IElXX0FVVEhfQUxHX1NIQVJFRF9LRVk7Ci0JCWVsc2UKLQkJCXBhcmFtLT52YWx1ZSA9IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOwotCQlicmVhazsKLQotCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKLQkJcGFyYW0tPnZhbHVlID0gcHJpdi0+d3BhX2VuYWJsZWQ7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1OCAqYnVmOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBjdXQgb2ZmIGF0IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gKi8KLQlpZiAoKHdycXUtPmRhdGEubGVuZ3RoID4gSUVFRTgwMjExX01BWF9EQVRBX0xFTikgfHwKLQkgICAgKHdycXUtPmRhdGEubGVuZ3RoICYmIChleHRyYSA9PSBOVUxMKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHdycXUtPmRhdGEubGVuZ3RoKSB7Ci0JCWJ1ZiA9IGttYWxsb2Mod3JxdS0+ZGF0YS5sZW5ndGgsIEdGUF9LRVJORUwpOwotCQlpZiAoYnVmID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQltZW1jcHkoYnVmLCBleHRyYSwgd3JxdS0+ZGF0YS5sZW5ndGgpOwotCX0gZWxzZQotCQlidWYgPSBOVUxMOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApIHsKLQkJa2ZyZWUoYnVmKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlrZnJlZShwcml2LT53cGFfaWUpOwotCXByaXYtPndwYV9pZSA9IGJ1ZjsKLQlwcml2LT53cGFfaWVfbGVuID0gd3JxdS0+ZGF0YS5sZW5ndGg7Ci0KLQlpZiAocHJpdi0+d3BhX2llKSB7Ci0JCS8qIExvb2tzIGxpa2Ugd2xfbGttIHdhbnRzIHRvIGNoZWNrIHRoZSBhdXRoIGFsZywgYW5kCi0JCSAqIHNvbWVob3cgcGFzcyBpdCB0byB0aGUgZmlybXdhcmUuCi0JCSAqIEluc3RlYWQgaXQganVzdCBjYWxscyB0aGUga2V5IG1nbXQgcmlkCi0JCSAqICAgLSB3ZSBkbyB0aGlzIGluIHNldCBhdXRoLgotCQkgKi8KLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0X2dlbmllKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSAwOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoKHByaXYtPndwYV9pZV9sZW4gPT0gMCkgfHwgKHByaXYtPndwYV9pZSA9PSBOVUxMKSkgewotCQl3cnF1LT5kYXRhLmxlbmd0aCA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA8IHByaXYtPndwYV9pZV9sZW4pIHsKLQkJZXJyID0gLUUyQklHOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl3cnF1LT5kYXRhLmxlbmd0aCA9IHByaXYtPndwYV9pZV9sZW47Ci0JbWVtY3B5KGV4dHJhLCBwcml2LT53cGFfaWUsIHByaXYtPndwYV9pZV9sZW4pOwotCi1vdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0X21sbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0Jc3RydWN0IGl3X21sbWUgKm1sbWUgPSAoc3RydWN0IGl3X21sbWUgKilleHRyYTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlzd2l0Y2ggKG1sbWUtPmNtZCkgewotCWNhc2UgSVdfTUxNRV9ERUFVVEg6Ci0JCS8qIHNpbGVudGx5IGlnbm9yZSAqLwotCQlicmVhazsKLQotCWNhc2UgSVdfTUxNRV9ESVNBU1NPQzoKLQl7Ci0JCXN0cnVjdCB7Ci0JCQl1OCBhZGRyW0VUSF9BTEVOXTsKLQkJCV9fbGUxNiByZWFzb25fY29kZTsKLQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYnVmOwotCi0JCW1lbWNweShidWYuYWRkciwgbWxtZS0+YWRkci5zYV9kYXRhLCBFVEhfQUxFTik7Ci0JCWJ1Zi5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KG1sbWUtPnJlYXNvbl9jb2RlKTsKLQkJcmV0ID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJCSAgSEVSTUVTX1JJRF9DTkZESVNBU1NPQ0lBVEUsCi0JCQkJCSAgJmJ1Zik7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRyZXRyeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcnJxLAotCQkJCSAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OwotCWludCBlcnIgPSAwOwotCXUxNiBzaG9ydF9saW1pdCwgbG9uZ19saW1pdCwgbGlmZXRpbWU7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1NIT1JUUkVUUllMSU1JVCwKLQkJCQkgICZzaG9ydF9saW1pdCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9MT05HUkVUUllMSU1JVCwKLQkJCQkgICZsb25nX2xpbWl0KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX01BWFRSQU5TTUlUTElGRVRJTUUsCi0JCQkJICAmbGlmZXRpbWUpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JcnJxLT5kaXNhYmxlZCA9IDA7CQkvKiBDYW4ndCBiZSBkaXNhYmxlZCAqLwotCi0JLyogTm90ZSA6IGJ5IGRlZmF1bHQsIGRpc3BsYXkgdGhlIHJldHJ5IG51bWJlciAqLwotCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09IElXX1JFVFJZX0xJRkVUSU1FKSB7Ci0JCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSUZFVElNRTsKLQkJcnJxLT52YWx1ZSA9IGxpZmV0aW1lICogMTAwMDsJLyogPz8/ICovCi0JfSBlbHNlIHsKLQkJLyogQnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgbWluIG51bWJlciAqLwotCQlpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSkgewotCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTE9ORzsKLQkJCXJycS0+dmFsdWUgPSBsb25nX2xpbWl0OwotCQl9IGVsc2UgewotCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUOwotCQkJcnJxLT52YWx1ZSA9IHNob3J0X2xpbWl0OwotCQkJaWYoc2hvcnRfbGltaXQgIT0gbG9uZ19saW1pdCkKLQkJCQlycnEtPmZsYWdzIHw9IElXX1JFVFJZX1NIT1JUOwotCQl9Ci0JfQotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgICAgIHZvaWQgKndycXUsCi0JCQkgICAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoISBjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0JaWYgKGluZm8tPmNtZCA9PSAoU0lPQ0lXRklSU1RQUklWICsgMHgxKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZvcmNpbmcgcmVzZXQhXG4iLCBkZXYtPm5hbWUpOwotCi0JCS8qIEZpcm13YXJlIHJlc2V0ICovCi0JCW9yaW5vY29fcmVzZXQoJnByaXYtPnJlc2V0X3dvcmspOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogRm9yY2Ugc2NoZWR1bGluZyByZXNldCFcbiIsIGRldi0+bmFtZSk7Ci0KLQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRpYnNzcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgIHZvaWQgKndycXUsCi0JCQkJICAgICBjaGFyICpleHRyYSkKLQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB2YWwgPSAqKCAoaW50ICopIGV4dHJhICk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcHJpdi0+aWJzc19wb3J0ID0gdmFsIDsKLQotCS8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgbW9kZSB3ZSBhcmUgdXNpbmcgKi8KLQlzZXRfcG9ydF90eXBlKHByaXYpOwotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0aWJzc3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICB2b2lkICp3cnF1LAotCQkJCSAgICAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOwotCi0JKnZhbCA9IHByaXYtPmlic3NfcG9ydDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHBvcnQzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgdm9pZCAqd3JxdSwKLQkJCQkgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB2YWwgPSAqKCAoaW50ICopIGV4dHJhICk7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0Jc3dpdGNoICh2YWwpIHsKLQljYXNlIDA6IC8qIFRyeSB0byBkbyBJRUVFIGFkLWhvYyBtb2RlICovCi0JCWlmICghIHByaXYtPmhhc19pYnNzKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJcHJpdi0+cHJlZmVyX3BvcnQzID0gMDsKLQkJCQotCQlicmVhazsKLQotCWNhc2UgMTogLyogVHJ5IHRvIGRvIEx1Y2VudCBwcm9wcmlldGFyeSBhZC1ob2MgbW9kZSAqLwotCQlpZiAoISBwcml2LT5oYXNfcG9ydDMpIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlwcml2LT5wcmVmZXJfcG9ydDMgPSAxOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotCi0JaWYgKCEgZXJyKSB7Ci0JCS8qIEFjdHVhbGx5IHVwZGF0ZSB0aGUgbW9kZSB3ZSBhcmUgdXNpbmcgKi8KLQkJc2V0X3BvcnRfdHlwZShwcml2KTsKLQkJZXJyID0gLUVJTlBST0dSRVNTOwotCX0KLQotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cG9ydDMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICB2b2lkICp3cnF1LAotCQkJCSAgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOwotCi0JKnZhbCA9IHByaXYtPnByZWZlcl9wb3J0MzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHByZWFtYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgdm9pZCAqd3JxdSwKLQkJCQkgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHZhbDsKLQotCWlmICghIHByaXYtPmhhc19wcmVhbWJsZSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogODAyLjExYiBoYXMgcmVjZW50bHkgZGVmaW5lZCBzb21lIHNob3J0IHByZWFtYmxlLgotCSAqIEJhc2ljYWxseSwgdGhlIFBoeSBoZWFkZXIgaGFzIGJlZW4gcmVkdWNlZCBpbiBzaXplLgotCSAqIFRoaXMgaW5jcmVhc2UgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgYXQgaGlnaCByYXRlcwotCSAqICh0aGUgcHJlYW1ibGUgaXMgdHJhbnNtaXR0ZWQgYXQgMU1iL3MpLCB1bmZvcnR1bmF0ZWx5Ci0JICogdGhpcyBnaXZlIGNvbXBhdGliaWxpdHkgdHJvdWJsZXMuLi4gLSBKZWFuIElJICovCi0JdmFsID0gKiggKGludCAqKSBleHRyYSApOwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAodmFsKQotCQlwcml2LT5wcmVhbWJsZSA9IDE7Ci0JZWxzZQotCQlwcml2LT5wcmVhbWJsZSA9IDA7Ci0KLQlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwotCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KLX0KLQotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHByZWFtYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgICAgdm9pZCAqd3JxdSwKLQkJCQkgICAgIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKLQotCWlmICghIHByaXYtPmhhc19wcmVhbWJsZSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JKnZhbCA9IHByaXYtPnByZWFtYmxlOwotCXJldHVybiAwOwotfQotCi0vKiBpb2N0bCBpbnRlcmZhY2UgdG8gaGVybWVzX3JlYWRfbHR2KCkKLSAqIFRvIHVzZSB3aXRoIGl3cHJpdiwgcGFzcyB0aGUgUklEIGFzIHRoZSB0b2tlbiBhcmd1bWVudCwgZS5nLgotICogaXdwcml2IGdldF9yaWQgWzB4ZmMwMF0KLSAqIEF0IGxlYXN0IFdpcmVsZXNzIFRvb2xzIDI1IGlzIHJlcXVpcmVkIHRvIHVzZSBpd3ByaXYuCi0gKiBGb3IgV2lyZWxlc3MgVG9vbHMgMjUgYW5kIDI2IGFwcGVuZCAiZHVtbXkiIGFyZSB0aGUgZW5kLiAqLwotc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHJpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJc3RydWN0IGl3X3BvaW50ICpkYXRhLAotCQkJCWNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKLQlpbnQgcmlkID0gZGF0YS0+ZmxhZ3M7Ci0JdTE2IGxlbmd0aDsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBJdCdzIGEgImdldCIgZnVuY3Rpb24sIGJ1dCB3ZSBkb24ndCB3YW50IHVzZXJzIHRvIGFjY2VzcyB0aGUKLQkgKiBXRVAga2V5IGFuZCBvdGhlciByYXcgZmlybXdhcmUgZGF0YSAqLwotCWlmICghIGNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlpZiAocmlkIDwgMHhmYzAwIHx8IHJpZCA+IDB4ZmZmZikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIHJpZCwgTUFYX1JJRF9MRU4sICZsZW5ndGgsCi0JCQkgICAgICBleHRyYSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQlkYXRhLT5sZW5ndGggPSBtaW5fdCh1MTYsIEhFUk1FU19SRUNMRU5fVE9fQllURVMobGVuZ3RoKSwKLQkJCSAgICAgTUFYX1JJRF9MRU4pOwotCi0gb3V0OgotCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogVHJpZ2dlciBhIHNjYW4gKGxvb2sgZm9yIG90aGVyIGNlbGxzIGluIHRoZSB2aWNpbml0eSkgKi8KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqc3JxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7Ci0Jc3RydWN0IGl3X3NjYW5fcmVxICpzaSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKikgZXh0cmE7Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIE5vdGUgOiB5b3UgbWF5IGhhdmUgcmVhbGlzZWQgdGhhdCwgYXMgdGhpcyBpcyBhIFNFVCBvcGVyYXRpb24sCi0JICogdGhpcyBpcyBwcml2aWxlZ2VkIGFuZCB0aGVyZWZvcmUgYSBub3JtYWwgdXNlciBjYW4ndAotCSAqIHBlcmZvcm0gc2Nhbm5pbmcuCi0JICogVGhpcyBpcyBub3QgYW4gZXJyb3IsIHdoaWxlIHRoZSBkZXZpY2UgcGVyZm9ybSBzY2FubmluZywKLQkgKiB0cmFmZmljIGRvZXNuJ3QgZmxvdywgc28gaXQncyBhIHBlcmZlY3QgRG9TLi4uCi0JICogSmVhbiBJSSAqLwotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBTY2FubmluZyB3aXRoIHBvcnQgMCBkaXNhYmxlZCB3b3VsZCBmYWlsICovCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKLQkJZXJyID0gLUVORVRET1dOOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBJbiBtb25pdG9yIG1vZGUsIHRoZSBzY2FuIHJlc3VsdHMgYXJlIGFsd2F5cyBlbXB0eS4KLQkgKiBQcm9iZSByZXNwb25zZXMgYXJlIHBhc3NlZCB0byB0aGUgZHJpdmVyIGFzIHJlY2VpdmVkCi0JICogZnJhbWVzIGFuZCBjb3VsZCBiZSBwcm9jZXNzZWQgaW4gc29mdHdhcmUuICovCi0JaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7Ci0JCWVyciA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBOb3RlIDogYmVjYXVzZSB3ZSBkb24ndCBsb2NrIG91dCB0aGUgaXJxIGhhbmRsZXIsIHRoZSB3YXkKLQkgKiB3ZSBhY2Nlc3Mgc2NhbiB2YXJpYWJsZXMgaW4gcHJpdiBpcyBjcml0aWNhbC4KLQkgKglvIHNjYW5faW5wcm9ncmVzcyA6IG5vdCB0b3VjaGVkIGJ5IGlycSBoYW5kbGVyCi0JICoJbyBzY2FuX21vZGUgOiBub3QgdG91Y2hlZCBieSBpcnEgaGFuZGxlcgotCSAqIEJlZm9yZSBtb2RpZnlpbmcgYW55dGhpbmcgb24gdGhvc2UgdmFyaWFibGVzLCBwbGVhc2UgdGhpbmsgaGFyZCAhCi0JICogSmVhbiBJSSAqLwotCi0JLyogU2F2ZSBmbGFncyAqLwotCXByaXYtPnNjYW5fbW9kZSA9IHNycS0+ZmxhZ3M7Ci0KLQkvKiBBbHdheXMgdHJpZ2dlciBzY2FubmluZywgZXZlbiBpZiBpdCdzIGluIHByb2dyZXNzLgotCSAqIFRoaXMgd2F5LCBpZiB0aGUgaW5mbyBmcmFtZSBnZXQgbG9zdCwgd2Ugd2lsbCByZWNvdmVyIHNvbWV3aGF0Ci0JICogZ3JhY2VmdWxseSAgLSBKZWFuIElJICovCi0KLQlpZiAocHJpdi0+aGFzX2hvc3RzY2FuKSB7Ci0JCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgewotCQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgotCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkJICAgSEVSTUVTX1JJRF9DTkZIT1NUU0NBTl9TWU1CT0wsCi0JCQkJCQkgICBIRVJNRVNfSE9TVFNDQU5fU1lNQk9MX09OQ0UgfAotCQkJCQkJICAgSEVSTUVTX0hPU1RTQ0FOX1NZTUJPTF9CQ0FTVCk7Ci0JCQlicmVhazsKLQkJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiB7Ci0JCQlfX2xlMTYgcmVxWzNdOwotCi0JCQlyZXFbMF0gPSBjcHVfdG9fbGUxNigweDNmZmYpOwkvKiBBbGwgY2hhbm5lbHMgKi8KLQkJCXJlcVsxXSA9IGNwdV90b19sZTE2KDB4MDAwMSk7CS8qIHJhdGUgMSBNYnBzICovCi0JCQlyZXFbMl0gPSAwOwkJCS8qIEFueSBFU1NJRCAqLwotCQkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCi0JCQkJCQkgIEhFUk1FU19SSURfQ05GSE9TVFNDQU4sICZyZXEpOwotCQl9Ci0JCWJyZWFrOwotCQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6Ci0JCQlpZiAocHJpdi0+c2Nhbl9tb2RlICYgSVdfU0NBTl9USElTX0VTU0lEKSB7Ci0JCQkJc3RydWN0IGhlcm1lc19pZHN0cmluZyBpZGJ1ZjsKLQkJCQlzaXplX3QgbGVuID0gbWluKHNpemVvZihpZGJ1Zi52YWwpLAotCQkJCQkJIChzaXplX3QpIHNpLT5lc3NpZF9sZW4pOwotCQkJCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KGxlbik7Ci0JCQkJbWVtY3B5KGlkYnVmLnZhbCwgc2ktPmVzc2lkLCBsZW4pOwotCi0JCQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCi0JCQkJCSAgICAgICBIRVJNRVNfUklEX0NORlNDQU5TU0lEX0FHRVJFLAotCQkJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihsZW4gKyAyKSwKLQkJCQkJICAgICAgICZpZGJ1Zik7Ci0JCQl9IGVsc2UKLQkJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCi0JCQkJCQkgICBIRVJNRVNfUklEX0NORlNDQU5TU0lEX0FHRVJFLAotCQkJCQkJICAgMCk7CS8qIEFueSBFU1NJRCAqLwotCQkJaWYgKGVycikKLQkJCQlicmVhazsKLQotCQkJaWYgKHByaXYtPmhhc19leHRfc2NhbikgewotCQkJCS8qIENsZWFyIHNjYW4gcmVzdWx0cyBhdCB0aGUgc3RhcnQgb2YKLQkJCQkgKiBhbiBleHRlbmRlZCBzY2FuICovCi0JCQkJb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMocHJpdiwKLQkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTUwMDApKTsKLQotCQkJCS8qIFRPRE86IElzIHRoaXMgYXZhaWxhYmxlIG9uIG9sZGVyIGZpcm13YXJlPwotCQkJCSAqICAgQ2FuIHdlIHVzZSBpdCB0byBzY2FuIHNwZWNpZmljIGNoYW5uZWxzCi0JCQkJICogICBmb3IgSVdfU0NBTl9USElTX0ZSRVE/ICovCi0JCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAotCQkJCQkJSEVSTUVTX1JJRF9DTkZTQ0FOQ0hBTk5FTFMyR0haLAotCQkJCQkJMHg3RkZGKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlnb3RvIG91dDsKLQotCQkJCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LAotCQkJCQkJICAgICBIRVJNRVNfSU5RX0NIQU5ORUxJTkZPKTsKLQkJCX0gZWxzZQotCQkJCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1NDQU4pOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UKLQkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfU0NBTik7Ci0KLQkvKiBPbmUgbW9yZSBjbGllbnQgKi8KLQlpZiAoISBlcnIpCi0JCXByaXYtPnNjYW5faW5wcm9ncmVzcyA9IDE7Ci0KLSBvdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi0jZGVmaW5lIE1BWF9DVVNUT01fTEVOIDY0Ci0KLS8qIFRyYW5zbGF0ZSBzY2FuIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgY2FyZCB0byBhIGNhcmQgaW5kZXBlbmRhbnQKLSAqIGZvcm1hdCB0aGF0IHRoZSBXaXJlbGVzcyBUb29scyB3aWxsIHVuZGVyc3RhbmQgLSBKZWFuIElJICovCi1zdGF0aWMgaW5saW5lIGNoYXIgKm9yaW5vY29fdHJhbnNsYXRlX3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkJICAgY2hhciAqY3VycmVudF9ldiwKLQkJCQkJICAgY2hhciAqZW5kX2J1ZiwKLQkJCQkJICAgdW5pb24gaGVybWVzX3NjYW5faW5mbyAqYnNzLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbm5lZCkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MTYJCQljYXBhYmlsaXRpZXM7Ci0JdTE2CQkJY2hhbm5lbDsKLQlzdHJ1Y3QgaXdfZXZlbnQJCWl3ZTsJCS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KLQljaGFyIGN1c3RvbVtNQVhfQ1VTVE9NX0xFTl07Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCi0JLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5hLmJzc2lkLCBFVEhfQUxFTik7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCSAgJml3ZSwgSVdfRVZfQUREUl9MRU4pOwotCi0JLyogT3RoZXIgZW50cmllcyB3aWxsIGJlIGRpc3BsYXllZCBpbiB0aGUgb3JkZXIgd2UgZ2l2ZSB0aGVtICovCi0KLQkvKiBBZGQgdGhlIEVTU0lEICovCi0JaXdlLnUuZGF0YS5sZW5ndGggPSBsZTE2X3RvX2NwdShic3MtPmEuZXNzaWRfbGVuKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGggPiAzMikKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKLQlpd2UuY21kID0gU0lPQ0dJV0VTU0lEOwotCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIGJzcy0+YS5lc3NpZCk7Ci0KLQkvKiBBZGQgbW9kZSAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKLQljYXBhYmlsaXRpZXMgPSBsZTE2X3RvX2NwdShic3MtPmEuY2FwYWJpbGl0aWVzKTsKLQlpZiAoY2FwYWJpbGl0aWVzICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykpIHsKLQkJaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NQVNURVI7Ci0JCWVsc2UKLQkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX0FESE9DOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfVUlOVF9MRU4pOwotCX0KLQotCWNoYW5uZWwgPSBic3MtPnMuY2hhbm5lbDsKLQlpZiAoKGNoYW5uZWwgPj0gMSkgJiYgKGNoYW5uZWwgPD0gTlVNX0NIQU5ORUxTKSkgewotCQkvKiBBZGQgY2hhbm5lbCBhbmQgZnJlcXVlbmN5ICovCi0JCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLQkJaXdlLnUuZnJlcS5tID0gY2hhbm5lbDsKLQkJaXdlLnUuZnJlcS5lID0gMDsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKLQotCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsX2ZyZXF1ZW5jeVtjaGFubmVsLTFdICogMTAwMDAwOwotCQlpd2UudS5mcmVxLmUgPSAxOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCX0KLQotCS8qIEFkZCBxdWFsaXR5IHN0YXRpc3RpY3MuIGxldmVsIGFuZCBub2lzZSBpbiBkQi4gTm8gbGluayBxdWFsaXR5ICovCi0JaXdlLmNtZCA9IElXRVZRVUFMOwotCWl3ZS51LnF1YWwudXBkYXRlZCA9IElXX1FVQUxfREJNIHwgSVdfUVVBTF9RVUFMX0lOVkFMSUQ7Ci0JaXdlLnUucXVhbC5sZXZlbCA9IChfX3U4KSBsZTE2X3RvX2NwdShic3MtPmEubGV2ZWwpIC0gMHg5NTsKLQlpd2UudS5xdWFsLm5vaXNlID0gKF9fdTgpIGxlMTZfdG9fY3B1KGJzcy0+YS5ub2lzZSkgLSAweDk1OwotCS8qIFdpcmVsZXNzIHRvb2xzIHByaW9yIHRvIDI3LnByZTIyIHdpbGwgc2hvdyBsaW5rIHF1YWxpdHkKLQkgKiBhbnl3YXksIHNvIHdlIHByb3ZpZGUgYSByZWFzb25hYmxlIHZhbHVlLiAqLwotCWlmIChpd2UudS5xdWFsLmxldmVsID4gaXdlLnUucXVhbC5ub2lzZSkKLQkJaXdlLnUucXVhbC5xdWFsID0gaXdlLnUucXVhbC5sZXZlbCAtIGl3ZS51LnF1YWwubm9pc2U7Ci0JZWxzZQotCQlpd2UudS5xdWFsLnF1YWwgPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKLQotCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KLQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQllbHNlCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIE5VTEwpOwotCi0JLyogQml0IHJhdGUgaXMgbm90IGF2YWlsYWJsZSBpbiBMdWNlbnQvQWdlcmUgZmlybXdhcmVzICovCi0JaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgIT0gRklSTVdBUkVfVFlQRV9BR0VSRSkgewotCQljaGFyICpjdXJyZW50X3ZhbCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7Ci0JCWludCBpOwotCQlpbnQgc3RlcDsKLQotCQlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX1NZTUJPTCkKLQkJCXN0ZXAgPSAyOwotCQllbHNlCi0JCQlzdGVwID0gMTsKLQotCQlpd2UuY21kID0gU0lPQ0dJV1JBVEU7Ci0JCS8qIFRob3NlIHR3byBmbGFncyBhcmUgaWdub3JlZC4uLiAqLwotCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7Ci0JCS8qIE1heCAxMCB2YWx1ZXMgKi8KLQkJZm9yIChpID0gMDsgaSA8IDEwOyBpICs9IHN0ZXApIHsKLQkJCS8qIE5VTEwgdGVybWluYXRlZCAqLwotCQkJaWYgKGJzcy0+cC5yYXRlc1tpXSA9PSAweDApCi0JCQkJYnJlYWs7Ci0JCQkvKiBCaXQgcmF0ZSBnaXZlbiBpbiA1MDAga2IvcyB1bml0cyAoKyAweDgwKSAqLwotCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9Ci0JCQkJKChic3MtPnAucmF0ZXNbaV0gJiAweDdmKSAqIDUwMDAwMCk7Ci0JCQljdXJyZW50X3ZhbCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICAgY3VycmVudF92YWwsCi0JCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwKLQkJCQkJCQkgICBJV19FVl9QQVJBTV9MRU4pOwotCQl9Ci0JCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLwotCQlpZiAoKGN1cnJlbnRfdmFsIC0gY3VycmVudF9ldikgPiBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbykpCi0JCQljdXJyZW50X2V2ID0gY3VycmVudF92YWw7Ci0JfQotCi0JLyogQmVhY29uIGludGVydmFsICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgImJjbl9pbnQ9JWQiLAotCQkJCSAgICAgbGUxNl90b19jcHUoYnNzLT5hLmJlYWNvbl9pbnRlcnYpKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQ2FwYWJpbGl0ZXMgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiY2FwYWI9MHglMDR4IiwKLQkJCQkgICAgIGNhcGFiaWxpdGllcyk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCS8qIEFkZCBFWFRSQTogQWdlIHRvIGRpc3BsYXkgc2Vjb25kcyBzaW5jZSBsYXN0IGJlYWNvbi9wcm9iZSByZXNwb25zZQotCSAqIGZvciBnaXZlbiBuZXR3b3JrLiAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKLQkJCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGxhc3Rfc2Nhbm5lZCkpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQlyZXR1cm4gY3VycmVudF9ldjsKLX0KLQotc3RhdGljIGlubGluZSBjaGFyICpvcmlub2NvX3RyYW5zbGF0ZV9leHRfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkJICAgICAgIGNoYXIgKmN1cnJlbnRfZXYsCi0JCQkJCSAgICAgICBjaGFyICplbmRfYnVmLAotCQkJCQkgICAgICAgc3RydWN0IGFnZXJlX2V4dF9zY2FuX2luZm8gKmJzcywKLQkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkKQotewotCXUxNgkJCWNhcGFiaWxpdGllczsKLQl1MTYJCQljaGFubmVsOwotCXN0cnVjdCBpd19ldmVudAkJaXdlOwkJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLwotCWNoYXIgY3VzdG9tW01BWF9DVVNUT01fTEVOXTsKLQl1OCAqaWU7Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCi0JLyogRmlyc3QgZW50cnkgKk1VU1QqIGJlIHRoZSBBUCBNQUMgYWRkcmVzcyAqLwotCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIElXX0VWX0FERFJfTEVOKTsKLQotCS8qIE90aGVyIGVudHJpZXMgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIG9yZGVyIHdlIGdpdmUgdGhlbSAqLwotCi0JLyogQWRkIHRoZSBFU1NJRCAqLwotCWllID0gYnNzLT5kYXRhOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV07Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKSB7Ci0JCWlmIChpd2UudS5kYXRhLmxlbmd0aCA+IDMyKQotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSAzMjsKLQkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCAmaWVbMl0pOwotCX0KLQotCS8qIEFkZCBtb2RlICovCi0JY2FwYWJpbGl0aWVzID0gbGUxNl90b19jcHUoYnNzLT5jYXBhYmlsaXRpZXMpOwotCWlmIChjYXBhYmlsaXRpZXMgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkgewotCQlpd2UuY21kID0gU0lPQ0dJV01PREU7Ci0JCWlmIChjYXBhYmlsaXRpZXMgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQotCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwotCQllbHNlCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKLQl9Ci0KLQlpZSA9IG9yaW5vY29fZ2V0X2llKGJzcy0+ZGF0YSwgc2l6ZW9mKGJzcy0+ZGF0YSksIFdMQU5fRUlEX0RTX1BBUkFNUyk7Ci0JY2hhbm5lbCA9IGllID8gaWVbMl0gOiAwOwotCWlmICgoY2hhbm5lbCA+PSAxKSAmJiAoY2hhbm5lbCA8PSBOVU1fQ0hBTk5FTFMpKSB7Ci0JCS8qIEFkZCBjaGFubmVsIGFuZCBmcmVxdWVuY3kgKi8KLQkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsOwotCQlpd2UudS5mcmVxLmUgPSAwOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOwotCi0JCWl3ZS51LmZyZXEubSA9IGNoYW5uZWxfZnJlcXVlbmN5W2NoYW5uZWwtMV0gKiAxMDAwMDA7Ci0JCWl3ZS51LmZyZXEuZSA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7Ci0JfQotCi0JLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcy4gbGV2ZWwgYW5kIG5vaXNlIGluIGRCLiBObyBsaW5rIHF1YWxpdHkgKi8KLQlpd2UuY21kID0gSVdFVlFVQUw7Ci0JaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9EQk0gfCBJV19RVUFMX1FVQUxfSU5WQUxJRDsKLQlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5sZXZlbCAtIDB4OTU7Ci0JaXdlLnUucXVhbC5ub2lzZSA9IGJzcy0+bm9pc2UgLSAweDk1OwotCS8qIFdpcmVsZXNzIHRvb2xzIHByaW9yIHRvIDI3LnByZTIyIHdpbGwgc2hvdyBsaW5rIHF1YWxpdHkKLQkgKiBhbnl3YXksIHNvIHdlIHByb3ZpZGUgYSByZWFzb25hYmxlIHZhbHVlLiAqLwotCWlmIChpd2UudS5xdWFsLmxldmVsID4gaXdlLnUucXVhbC5ub2lzZSkKLQkJaXdlLnUucXVhbC5xdWFsID0gaXdlLnUucXVhbC5sZXZlbCAtIGl3ZS51LnF1YWwubm9pc2U7Ci0JZWxzZQotCQlpd2UudS5xdWFsLnF1YWwgPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKLQotCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KLQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQllbHNlCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsIE5VTEwpOwotCi0JLyogV1BBIElFICovCi0JaWUgPSBvcmlub2NvX2dldF93cGFfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSk7Ci0JaWYgKGllKSB7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgaWUpOwotCX0KLQotCS8qIFJTTiBJRSAqLwotCWllID0gb3Jpbm9jb19nZXRfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSwgV0xBTl9FSURfUlNOKTsKLQlpZiAoaWUpIHsKLQkJaXdlLmNtZCA9IElXRVZHRU5JRTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBpZSk7Ci0JfQotCi0JaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9TVVBQX1JBVEVTKTsKLQlpZiAoaWUpIHsKLQkJY2hhciAqcCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7Ci0JCWludCBpOwotCi0JCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKLQkJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCi0JCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKLQotCQlmb3IgKGkgPSAyOyBpIDwgKGllWzFdICsgMik7IGkrKykgewotCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgoaWVbaV0gJiAweDdGKSAqIDUwMDAwMCk7Ci0JCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwgcCwgZW5kX2J1ZiwKLQkJCQkJCSAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOwotCQl9Ci0JCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLwotCQlpZiAocCA+IChjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pKSkKLQkJCWN1cnJlbnRfZXYgPSBwOwotCX0KLQotCS8qIFRpbWVzdGFtcCAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0KLQkJc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwgInRzZj0lMDE2bGx4IiwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShic3MtPnRpbWVzdGFtcCkpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQkvKiBCZWFjb24gaW50ZXJ2YWwgKi8KLQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCi0JCQkJICAgICAiYmNuX2ludD0lZCIsCi0JCQkJICAgICBsZTE2X3RvX2NwdShic3MtPmJlYWNvbl9pbnRlcnZhbCkpOwotCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIGN1c3RvbSk7Ci0KLQkvKiBDYXBhYmlsaXRlcyAqLwotCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOwotCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKLQkJCQkgICAgICJjYXBhYj0weCUwNHgiLAotCQkJCSAgICAgY2FwYWJpbGl0aWVzKTsKLQlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCi0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBjdXN0b20pOwotCi0JLyogQWRkIEVYVFJBOiBBZ2UgdG8gZGlzcGxheSBzZWNvbmRzIHNpbmNlIGxhc3QgYmVhY29uL3Byb2JlIHJlc3BvbnNlCi0JICogZm9yIGdpdmVuIG5ldHdvcmsuICovCi0JaXdlLmNtZCA9IElXRVZDVVNUT007Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAotCQkJCSAgICAgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAotCQkJCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbGFzdF9zY2FubmVkKSk7Ci0JaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKLQotCXJldHVybiBjdXJyZW50X2V2OwotfQotCi0vKiBSZXR1cm4gcmVzdWx0cyBvZiBhIHNjYW4gKi8KLXN0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBpd19wb2ludCAqc3JxLAotCQkJCSBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNoYXIgKmN1cnJlbnRfZXYgPSBleHRyYTsKLQotCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKHByaXYtPnNjYW5faW5wcm9ncmVzcykgewotCQkvKiBJbXBvcnRhbnQgbm90ZSA6IHdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGNhbGxlcgotCQkgKiB1bnRpbCByZXN1bHRzIGFyZSByZWFkeSBmb3IgdmFyaW91cyByZWFzb25zLgotCQkgKiBGaXJzdCwgbWFuYWdpbmcgd2FpdCBxdWV1ZXMgaXMgY29tcGxleCBhbmQgcmFjeS4KLQkJICogU2Vjb25kLCB3ZSBncmFiIHNvbWUgcnRuZXRsaW5rIGxvY2sgYmVmb3JlIGNvbW1pbmcKLQkJICogaGVyZSAoaW4gZGV2X2lvY3RsKCkpLgotCQkgKiBUaGlyZCwgd2UgZ2VuZXJhdGUgYW4gV2lyZWxlc3MgRXZlbnQsIHNvIHRoZQotCQkgKiBjYWxsZXIgY2FuIHdhaXQgaXRzZWxmIG9uIHRoYXQgLSBKZWFuIElJICovCi0JCWVyciA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKLQkJc3RydWN0IHhic3NfZWxlbWVudCAqYnNzOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKLQkJCS8qIFRyYW5zbGF0ZSB0aGlzIGVudHJ5IHRvIFdFIGZvcm1hdCAqLwotCQkJY3VycmVudF9ldiA9Ci0JCQkJb3Jpbm9jb190cmFuc2xhdGVfZXh0X3NjYW4oZGV2LCBpbmZvLAotCQkJCQkJCSAgIGN1cnJlbnRfZXYsCi0JCQkJCQkJICAgZXh0cmEgKyBzcnEtPmxlbmd0aCwKLQkJCQkJCQkgICAmYnNzLT5ic3MsCi0JCQkJCQkJICAgYnNzLT5sYXN0X3NjYW5uZWQpOwotCi0JCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igb25lIG1vcmUgZW50cnkgKi8KLQkJCWlmICgoZXh0cmEgKyBzcnEtPmxlbmd0aCAtIGN1cnJlbnRfZXYpCi0JCQkgICAgPD0gSVdfRVZfQUREUl9MRU4pIHsKLQkJCQkvKiBBc2sgdXNlciBzcGFjZSB0byB0cnkgYWdhaW4gd2l0aCBhCi0JCQkJICogYmlnZ2VyIGJ1ZmZlciAqLwotCQkJCWVyciA9IC1FMkJJRzsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCi0JfSBlbHNlIHsKLQkJc3RydWN0IGJzc19lbGVtZW50ICpic3M7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgewotCQkJLyogVHJhbnNsYXRlIHRoaXMgZW50cnkgdG8gV0UgZm9ybWF0ICovCi0JCQljdXJyZW50X2V2ID0gb3Jpbm9jb190cmFuc2xhdGVfc2NhbihkZXYsIGluZm8sCi0JCQkJCQkJICAgIGN1cnJlbnRfZXYsCi0JCQkJCQkJICAgIGV4dHJhICsgc3JxLT5sZW5ndGgsCi0JCQkJCQkJICAgICZic3MtPmJzcywKLQkJCQkJCQkgICAgYnNzLT5sYXN0X3NjYW5uZWQpOwotCi0JCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igb25lIG1vcmUgZW50cnkgKi8KLQkJCWlmICgoZXh0cmEgKyBzcnEtPmxlbmd0aCAtIGN1cnJlbnRfZXYpCi0JCQkgICAgPD0gSVdfRVZfQUREUl9MRU4pIHsKLQkJCQkvKiBBc2sgdXNlciBzcGFjZSB0byB0cnkgYWdhaW4gd2l0aCBhCi0JCQkJICogYmlnZ2VyIGJ1ZmZlciAqLwotCQkJCWVyciA9IC1FMkJJRzsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCX0KLQotCXNycS0+bGVuZ3RoID0gKGN1cnJlbnRfZXYgLSBleHRyYSk7Ci0Jc3JxLT5mbGFncyA9IChfX3UxNikgcHJpdi0+c2Nhbl9tb2RlOwotCi1vdXQ6Ci0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKiBDb21taXQgaGFuZGxlciwgY2FsbGVkIGFmdGVyIHNldCBvcGVyYXRpb25zICovCi1zdGF0aWMgaW50IG9yaW5vY29faW9jdGxfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQl2b2lkICp3cnF1LAotCQkJCWNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAoIXByaXYtPm9wZW4pCi0JCXJldHVybiAwOwotCi0JaWYgKHByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCkgewotCQlvcmlub2NvX3Jlc2V0KCZwcml2LT5yZXNldF93b3JrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBoZXJtZXNfZGlzYWJsZV9wb3J0KGh3LCAwKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gZGlzYWJsZSBwb3J0ICIKLQkJICAgICAgICJ3aGlsZSByZWNvbmZpZ3VyaW5nIGNhcmRcbiIsIGRldi0+bmFtZSk7Ci0JCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IDE7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gcmVjb25maWd1cmUgY2FyZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVyciA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGVuYWJsZSBwb3J0IHdoaWxlIHJlY29uZmlndXJpbmcgY2FyZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQotIG91dDoKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZXNldHRpbmcgaW5zdGVhZC4uLlxuIiwgZGV2LT5uYW1lKTsKLQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7Ci0JCWVyciA9IDA7Ci0JfQotCi0Jb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyBvcmlub2NvX3ByaXZ0YWJbXSA9IHsKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MCwgMCwgMCwgImZvcmNlX3Jlc2V0IiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHgxLCAwLCAwLCAiY2FyZF9yZXNldCIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MiwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICAwLCAic2V0X3BvcnQzIiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHgzLCAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgICJnZXRfcG9ydDMiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDQsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAgMCwgInNldF9wcmVhbWJsZSIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NSwgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCi0JICAiZ2V0X3ByZWFtYmxlIiB9LAotCXsgU0lPQ0lXRklSU1RQUklWICsgMHg2LCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKLQkgIDAsICJzZXRfaWJzc3BvcnQiIH0sCi0JeyBTSU9DSVdGSVJTVFBSSVYgKyAweDcsIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAotCSAgImdldF9pYnNzcG9ydCIgfSwKLQl7IFNJT0NJV0ZJUlNUUFJJViArIDB4OSwgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBNQVhfUklEX0xFTiwKLQkgICJnZXRfcmlkIiB9LAotfTsKLQotCi0vKgotICogU3RydWN0dXJlcyB0byBleHBvcnQgdGhlIFdpcmVsZXNzIEhhbmRsZXJzCi0gKi8KLQotI2RlZmluZSBTVERfSVdfSEFORExFUihpZCwgZnVuYykgXAotCVtJV19JT0NUTF9JRFgoaWQpXSA9IChpd19oYW5kbGVyKSBmdW5jCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlcglvcmlub2NvX2hhbmRsZXJbXSA9IHsKLQlTVERfSVdfSEFORExFUihTSU9DU0lXQ09NTUlULAlvcmlub2NvX2lvY3RsX2NvbW1pdCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV05BTUUsCW9yaW5vY29faW9jdGxfZ2V0bmFtZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0ZSRVEsCW9yaW5vY29faW9jdGxfc2V0ZnJlcSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0ZSRVEsCW9yaW5vY29faW9jdGxfZ2V0ZnJlcSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV01PREUsCW9yaW5vY29faW9jdGxfc2V0bW9kZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV01PREUsCW9yaW5vY29faW9jdGxfZ2V0bW9kZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NFTlMsCW9yaW5vY29faW9jdGxfc2V0c2VucyksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NFTlMsCW9yaW5vY29faW9jdGxfZ2V0c2VucyksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBTkdFLAlvcmlub2NvX2lvY3RsX2dldGl3cmFuZ2UpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdTUFksCWl3X2hhbmRsZXJfc2V0X3NweSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NQWSwJaXdfaGFuZGxlcl9nZXRfc3B5KSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXVEhSU1BZLAlpd19oYW5kbGVyX3NldF90aHJzcHkpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdUSFJTUFksCWl3X2hhbmRsZXJfZ2V0X3RocnNweSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0FQLAlvcmlub2NvX2lvY3RsX3NldHdhcCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0FQLAlvcmlub2NvX2lvY3RsX2dldHdhcCksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NDQU4sCW9yaW5vY29faW9jdGxfc2V0c2NhbiksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NDQU4sCW9yaW5vY29faW9jdGxfZ2V0c2NhbiksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VTU0lELAlvcmlub2NvX2lvY3RsX3NldGVzc2lkKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXRVNTSUQsCW9yaW5vY29faW9jdGxfZ2V0ZXNzaWQpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdOSUNLTiwJb3Jpbm9jb19pb2N0bF9zZXRuaWNrKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXTklDS04sCW9yaW5vY29faW9jdGxfZ2V0bmljayksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JBVEUsCW9yaW5vY29faW9jdGxfc2V0cmF0ZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBVEUsCW9yaW5vY29faW9jdGxfZ2V0cmF0ZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JUUywJb3Jpbm9jb19pb2N0bF9zZXRydHMpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSVFMsCW9yaW5vY29faW9jdGxfZ2V0cnRzKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXRlJBRywJb3Jpbm9jb19pb2N0bF9zZXRmcmFnKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXRlJBRywJb3Jpbm9jb19pb2N0bF9nZXRmcmFnKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXUkVUUlksCW9yaW5vY29faW9jdGxfZ2V0cmV0cnkpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdFTkNPREUsCW9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFTkNPREUsCW9yaW5vY29faW9jdGxfZ2V0aXdlbmNvZGUpLAotCVNURF9JV19IQU5ETEVSKFNJT0NTSVdQT1dFUiwJb3Jpbm9jb19pb2N0bF9zZXRwb3dlciksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1BPV0VSLAlvcmlub2NvX2lvY3RsX2dldHBvd2VyKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXR0VOSUUsCW9yaW5vY29faW9jdGxfc2V0X2dlbmllKSwKLQlTVERfSVdfSEFORExFUihTSU9DR0lXR0VOSUUsCW9yaW5vY29faW9jdGxfZ2V0X2dlbmllKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXTUxNRSwJb3Jpbm9jb19pb2N0bF9zZXRfbWxtZSksCi0JU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0FVVEgsCW9yaW5vY29faW9jdGxfc2V0X2F1dGgpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdBVVRILAlvcmlub2NvX2lvY3RsX2dldF9hdXRoKSwKLQlTVERfSVdfSEFORExFUihTSU9DU0lXRU5DT0RFRVhULCBvcmlub2NvX2lvY3RsX3NldF9lbmNvZGVleHQpLAotCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFTkNPREVFWFQsIG9yaW5vY29faW9jdGxfZ2V0X2VuY29kZWV4dCksCi19OwotCi0KLS8qCi0gIEFkZGVkIHR5cGVjYXN0aW5nIHNpbmNlIHdlIG5vIGxvbmdlciB1c2UgaXdyZXFfZGF0YSAtLSBNb3VzdGFmYQotICovCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlcglvcmlub2NvX3ByaXZhdGVfaGFuZGxlcltdID0gewotCVswXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3Jlc2V0LAotCVsxXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3Jlc2V0LAotCVsyXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldHBvcnQzLAotCVszXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHBvcnQzLAotCVs0XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldHByZWFtYmxlLAotCVs1XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHByZWFtYmxlLAotCVs2XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldGlic3Nwb3J0LAotCVs3XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldGlic3Nwb3J0LAotCVs5XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHJpZCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgb3Jpbm9jb19oYW5kbGVyX2RlZiA9IHsKLQkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShvcmlub2NvX2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZSA9IEFSUkFZX1NJWkUob3Jpbm9jb19wcml2YXRlX2hhbmRsZXIpLAotCS5udW1fcHJpdmF0ZV9hcmdzID0gQVJSQVlfU0laRShvcmlub2NvX3ByaXZ0YWIpLAotCS5zdGFuZGFyZCA9IG9yaW5vY29faGFuZGxlciwKLQkucHJpdmF0ZSA9IG9yaW5vY29fcHJpdmF0ZV9oYW5kbGVyLAotCS5wcml2YXRlX2FyZ3MgPSBvcmlub2NvX3ByaXZ0YWIsCi0JLmdldF93aXJlbGVzc19zdGF0cyA9IG9yaW5vY29fZ2V0X3dpcmVsZXNzX3N0YXRzLAotfTsKLQotc3RhdGljIHZvaWQgb3Jpbm9jb19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCi17Ci0Jc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlzdHJuY3B5KGluZm8tPmRyaXZlciwgRFJJVkVSX05BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpIC0gMSk7Ci0Jc3RybmNweShpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pIC0gMSk7Ci0Jc3RybmNweShpbmZvLT5md192ZXJzaW9uLCBwcml2LT5md19uYW1lLCBzaXplb2YoaW5mby0+ZndfdmVyc2lvbikgLSAxKTsKLQlpZiAoZGV2LT5kZXYucGFyZW50KQotCQlzdHJuY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkZXYtPmRldi5wYXJlbnQpLAotCQkJc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSAtIDEpOwotCWVsc2UKLQkJc25wcmludGYoaW5mby0+YnVzX2luZm8sIHNpemVvZihpbmZvLT5idXNfaW5mbykgLSAxLAotCQkJICJQQ01DSUEgJXAiLCBwcml2LT5ody5pb2Jhc2UpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9yaW5vY29fZXRodG9vbF9vcHMgPSB7Ci0JLmdldF9kcnZpbmZvID0gb3Jpbm9jb19nZXRfZHJ2aW5mbywKLQkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTW9kdWxlIGluaXRpYWxpemF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1FWFBPUlRfU1lNQk9MKGFsbG9jX29yaW5vY29kZXYpOwotRVhQT1JUX1NZTUJPTChmcmVlX29yaW5vY29kZXYpOwotCi1FWFBPUlRfU1lNQk9MKF9fb3Jpbm9jb191cCk7Ci1FWFBPUlRfU1lNQk9MKF9fb3Jpbm9jb19kb3duKTsKLUVYUE9SVF9TWU1CT0wob3Jpbm9jb19yZWluaXRfZmlybXdhcmUpOwotCi1FWFBPUlRfU1lNQk9MKG9yaW5vY29faW50ZXJydXB0KTsKLQotLyogQ2FuJ3QgYmUgZGVjbGFyZWQgImNvbnN0IiBvciB0aGUgd2hvbGUgX19pbml0ZGF0YSBzZWN0aW9uIHdpbGwKLSAqIGJlY29tZSBjb25zdCAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9faW5pdGRhdGEgPSBEUklWRVJfTkFNRSAiICIgRFJJVkVSX1ZFUlNJT04KLQkiIChEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+LCAiCi0JIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+LCBldCBhbCkiOwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X29yaW5vY28odm9pZCkKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIHZlcnNpb24pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9vcmlub2NvKHZvaWQpCi17Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfb3Jpbm9jbyk7Ci1tb2R1bGVfZXhpdChleGl0X29yaW5vY28pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uaAppbmRleCAwMDc1MGM4Li44ZTVhNzJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY28uaApAQCAtMSw1ICsxLDUgQEAKIC8qIG9yaW5vY28uaAotICogCisgKgogICogQ29tbW9uIGRlZmluaXRpb25zIHRvIGFsbCBwaWVjZXMgb2YgdGhlIHZhcmlvdXMgb3Jpbm9jbwogICogZHJpdmVycwogICovCkBAIC0xOCw5ICsxOCw5IEBACiAjaW5jbHVkZSAiaGVybWVzLmgiCiAKIC8qIFRvIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyAqLwotLy8jZGVmaW5lIE9SSU5PQ09fREVCVUcJCTMKKy8qI2RlZmluZSBPUklOT0NPX0RFQlVHCQkzKi8KIAotI2RlZmluZSBXSVJFTEVTU19TUFkJCS8vIGVuYWJsZSBpd3NweSBzdXBwb3J0CisjZGVmaW5lIFdJUkVMRVNTX1NQWQkJLyogZW5hYmxlIGl3c3B5IHN1cHBvcnQgKi8KIAogI2RlZmluZSBNQVhfU0NBTl9MRU4JCTQwOTYKIApAQCAtNTksMTQgKzU5LDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCi1zdHJ1Y3QgaGVybWVzX3J4X2Rlc2NyaXB0b3I7Ci0KLXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgewotCXN0cnVjdCBoZXJtZXNfcnhfZGVzY3JpcHRvciAqZGVzYzsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KIHN0cnVjdCBmaXJtd2FyZTsKIAogc3RydWN0IG9yaW5vY29fcHJpdmF0ZSB7CkBAIC04Myw3ICs3NSw2IEBACiAJLyogSW50ZXJydXB0IHRhc2tsZXRzICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHJ4X3Rhc2tsZXQ7CiAJc3RydWN0IGxpc3RfaGVhZCByeF9saXN0OwotCXN0cnVjdCBvcmlub2NvX3J4X2RhdGEgKnJ4X2RhdGE7CiAKIAkvKiBkcml2ZXIgc3RhdGUgKi8KIAlpbnQgb3BlbjsKQEAgLTEzMCw3ICsxMjEsNyBAQAogCXUxNiBlbmNvZGVfYWxnLCB3ZXBfcmVzdHJpY3QsIHR4X2tleTsKIAlzdHJ1Y3Qgb3Jpbm9jb19rZXkga2V5c1tPUklOT0NPX01BWF9LRVlTXTsKIAlpbnQgYml0cmF0ZW1vZGU7Ci0gCWNoYXIgbmlja1tJV19FU1NJRF9NQVhfU0laRSsxXTsKKwljaGFyIG5pY2tbSVdfRVNTSURfTUFYX1NJWkUrMV07CiAJY2hhciBkZXNpcmVkX2Vzc2lkW0lXX0VTU0lEX01BWF9TSVpFKzFdOwogCWNoYXIgZGVzaXJlZF9ic3NpZFtFVEhfQUxFTl07CiAJaW50IGJzc2lkX2ZpeGVkOwpAQCAtMTQwLDcgKzEzMSw3IEBACiAJdTE2IHBtX29uLCBwbV9tY2FzdCwgcG1fcGVyaW9kLCBwbV90aW1lb3V0OwogCXUxNiBwcmVhbWJsZTsKICNpZmRlZiBXSVJFTEVTU19TUFkKLSAJc3RydWN0IGl3X3NweV9kYXRhIHNweV9kYXRhOyAvKiBpd3NweSBzdXBwb3J0ICovCisJc3RydWN0IGl3X3NweV9kYXRhIHNweV9kYXRhOyAvKiBpd3NweSBzdXBwb3J0ICovCiAJc3RydWN0IGl3X3B1YmxpY19kYXRhCXdpcmVsZXNzX2RhdGE7CiAjZW5kaWYKIApAQCAtMTY4LDE2ICsxNTksMjEgQEAKIAl1bnNpZ25lZCBpbnQgdGtpcF9jbV9hY3RpdmU6MTsKIAl1bnNpZ25lZCBpbnQga2V5X21nbXQ6MzsKIAorI2lmIGRlZmluZWQoQ09ORklHX0hFUk1FU19DQUNIRV9GV19PTl9JTklUKSB8fCBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkKIAkvKiBDYWNoZWQgaW4gbWVtb3J5IGZpcm13YXJlIHRvIHVzZSBkdXJpbmcgLT5yZXN1bWUuICovCiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpjYWNoZWRfcHJpX2Z3OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqY2FjaGVkX2Z3OworI2VuZGlmCiAKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcG1fbm90aWZpZXI7CiB9OwogCiAjaWZkZWYgT1JJTk9DT19ERUJVRwogZXh0ZXJuIGludCBvcmlub2NvX2RlYnVnOwotI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBkbyB7IGlmIChvcmlub2NvX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgZG8geyBcCisJaWYgKG9yaW5vY29fZGVidWcgPiAobikpIFwKKwkJcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IFwKK30gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYJLyogT1JJTk9DT19ERUJVRyAqLwpAQCAtMTk0LDcgKzE5MCw3IEBACiBleHRlcm4gaW50IF9fb3Jpbm9jb191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgX19vcmlub2NvX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGlycXJldHVybl90IG9yaW5vY29faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKiBkZXZfaWQpOworZXh0ZXJuIGlycXJldHVybl90IG9yaW5vY29faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIExvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKaW5kZXggMGIzMjIxNS4uYjM4MWFlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKQEAgLTYsOCArNiw4IEBACiAgKiBJdCBzaG91bGQgYWxzbyBiZSB1c2FibGUgb24gdmFyaW91cyBQcmlzbSBJSSBiYXNlZCBjYXJkcyBzdWNoIGFzIHRoZQogICogTGlua3N5cywgRC1MaW5rIGFuZCBGYXJhbGxvbiBTa3lsaW5lLiBJdCBzaG91bGQgYWxzbyB3b3JrIG9uIFN5bWJvbAogICogY2FyZHMgc3VjaCBhcyB0aGUgM0NvbSBBaXJDb25uZWN0IGFuZCBFcmljc3NvbiBXTEFOLgotICogCi0gKiBDb3B5cmlnaHQgbm90aWNlICYgcmVsZWFzZSBub3RlcyBpbiBmaWxlIG9yaW5vY28uYworICoKKyAqIENvcHlyaWdodCBub3RpY2UgJiByZWxlYXNlIG5vdGVzIGluIGZpbGUgbWFpbi5jCiAgKi8KIAogI2RlZmluZSBEUklWRVJfTkFNRSAib3Jpbm9jb19jcyIKQEAgLTMwLDcgKzMwLDggQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogTU9EVUxFX0FVVEhPUigiRGF2aWQgR2lic29uIDxoZXJtZXNAZ2lic29uLmRyb3BiZWFyLmlkLmF1PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIFBDTUNJQSBMdWNlbnQgT3Jpbm9jbywgUHJpc20gSUkgYmFzZWQgYW5kIHNpbWlsYXIgd2lyZWxlc3MgY2FyZHMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBQQ01DSUEgTHVjZW50IE9yaW5vY28sIgorCQkgICAiIFByaXNtIElJIGJhc2VkIGFuZCBzaW1pbGFyIHdpcmVsZXNzIGNhcmRzIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CiAKIC8qIE1vZHVsZSBwYXJhbWV0ZXJzICovCkBAIC01Myw4ICs1NCw4IEBACiAKIAkvKiBVc2VkIHRvIGhhbmRsZSBoYXJkIHJlc2V0ICovCiAJLyogeXVjaywgd2UgbmVlZCB0aGlzIGhhY2sgdG8gd29yayBhcm91bmQgdGhlIGluc2FuaXR5IG9mIHRoZQotICAgICAgICAgKiBQQ01DSUEgbGF5ZXIgKi8KLQl1bnNpZ25lZCBsb25nIGhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3M7IAorCSAqIFBDTUNJQSBsYXllciAqLworCXVuc2lnbmVkIGxvbmcgaGFyZF9yZXNldF9pbl9wcm9ncmVzczsKIH07CiAKIApAQCAtOTgsNyArOTksNyBAQAogICogVGhpcyBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlciwgYWxsb2NhdGluZyBsb2NhbCBkYXRhCiAgKiBzdHJ1Y3R1cmVzIGZvciBvbmUgZGV2aWNlLiAgVGhlIGRldmljZSBpcyByZWdpc3RlcmVkIHdpdGggQ2FyZAogICogU2VydmljZXMuCi0gKiAKKyAqCiAgKiBUaGUgZGV2X2xpbmsgc3RydWN0dXJlIGlzIGluaXRpYWxpemVkLCBidXQgd2UgZG9uJ3QgYWN0dWFsbHkKICAqIGNvbmZpZ3VyZSB0aGUgY2FyZCBhdCB0aGlzIHBvaW50IC0tIHdlIHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhIGNhcmQKICAqIGluc2VydGlvbiBldmVudC4gICovCkBAIC0xMTEsNyArMTEyLDcgQEAKIAogCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJmhhbmRsZV90b19kZXYobGluayksCiAJCQkgICAgICAgb3Jpbm9jb19jc19oYXJkX3Jlc2V0LCBOVUxMKTsKLQlpZiAoISBkZXYpCisJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhcmQgPSBwcml2LT5jYXJkOwpAQCAtMTI0LDcgKzEyNSw3IEBACiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gb3Jpbm9jb19pbnRlcnJ1cHQ7Ci0JbGluay0+aXJxLkluc3RhbmNlID0gZGV2OyAKKwlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAKIAkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcwogCSAqIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvcgpAQCAtMTYyLDggKzE2MywxMCBAQAogICovCiAKICNkZWZpbmUgQ1NfQ0hFQ0soZm4sIHJldCkgZG8geyBcCi0JCWxhc3RfZm4gPSAoZm4pOyBpZiAoKGxhc3RfcmV0ID0gKHJldCkpICE9IDApIGdvdG8gY3NfZmFpbGVkOyBcCi0JfSB3aGlsZSAoMCkKKwlsYXN0X2ZuID0gKGZuKTsgXAorCWlmICgobGFzdF9yZXQgPSAocmV0KSkgIT0gMCkgXAorCQlnb3RvIGNzX2ZhaWxlZDsgXAorfSB3aGlsZSAoMCkKIAogc3RhdGljIGludCBvcmlub2NvX2NzX2NvbmZpZ19jaGVjayhzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsCiAJCQkJICAgY2lzdHBsX2NmdGFibGVfZW50cnlfdCAqY2ZnLApAQCAtMzA3LDggKzMxMCw4IEBACiAJICogaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2X25vZGUuICovCiAJc3RyY3B5KGNhcmQtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7CiAJbGluay0+ZGV2X25vZGUgPSAmY2FyZC0+bm9kZTsgLyogbGluay0+ZGV2X25vZGUgYmVpbmcgbm9uLU5VTEwgaXMgYWxzbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCisJCQkJICAgICAgICogdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQorCQkJCSAgICAgICAqIG5ldF9kZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLwogCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwogCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzLCBpcnEgJWQsIGlvICIKQEAgLTM1OSw3ICszNjIsNyBAQAogCS8qIFRoaXMgaXMgcHJvYmFibHkgcmFjeSwgYnV0IEkgY2FuJ3QgdGhpbmsgb2YKIAkgICBhIGJldHRlciB3YXksIHNob3J0IG9mIHJld3JpdGluZyB0aGUgUENNQ0lBCiAJICAgbGF5ZXIgdG8gbm90IHN1Y2sgOi0oICovCi0JaWYgKCEgdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7CisJaWYgKCF0ZXN0X2JpdCgwLCAmY2FyZC0+aGFyZF9yZXNldF9pbl9wcm9ncmVzcykpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCQllcnIgPSBfX29yaW5vY29fZG93bihkZXYpOwpAQCAtMzg0LDcgKzM4Nyw3IEBACiAJaW50IGVyciA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghIHRlc3RfYml0KDAsICZjYXJkLT5oYXJkX3Jlc2V0X2luX3Byb2dyZXNzKSkgeworCWlmICghdGVzdF9iaXQoMCwgJmNhcmQtPmhhcmRfcmVzZXRfaW5fcHJvZ3Jlc3MpKSB7CiAJCWVyciA9IG9yaW5vY29fcmVpbml0X2Zpcm13YXJlKGRldik7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yICVkIHJlLWluaXRpYWxpemluZyBmaXJtd2FyZVxuIiwKQEAgLTM5Nyw3ICs0MDAsNyBAQAogCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAJCXByaXYtPmh3X3VuYXZhaWxhYmxlLS07CiAKLQkJaWYgKHByaXYtPm9wZW4gJiYgISBwcml2LT5od191bmF2YWlsYWJsZSkgeworCQlpZiAocHJpdi0+b3BlbiAmJiAhcHJpdi0+aHdfdW5hdmFpbGFibGUpIHsKIAkJCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwogCQkJaWYgKGVycikKIAkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciAlZCByZXN0YXJ0aW5nIGNhcmRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMKaW5kZXggMmZjODY1OS4uYjAxNzI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19ub3J0ZWwuYwpAQCAtOSwxMiArOSwxMiBAQAogICoKICAqIFNvbWUgb2YgdGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20gb3Jpbm9jb19wbHguYwogICoJQ29weXJpZ2h0IChDKSAyMDAxIERhbmllbCBCYXJsb3cKLSAqIFNvbWUgb2YgdGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20gb3Jpbm9jb19wY2kuYyAKKyAqIFNvbWUgb2YgdGhpcyBjb2RlIGlzIGJvcnJvd2VkIGZyb20gb3Jpbm9jb19wY2kuYwogICogIENvcHlyaWdodCAoQykgMjAwMSBKZWFuIFRvdXJyaWxoZXMKICAqIFNvbWUgb2YgdGhpcyBjb2RlIGlzICJpbnNwaXJlZCIgYnkgbGludXgtd2xhbi1uZy0wLjEuMTAsIGJ1dCBub3RoaW5nCiAgKiBoYXMgYmVlbiBjb3BpZWQgZnJvbSBpdC4gbGludXgtd2xhbi1uZy0wLjEuMTAgaXMgb3JpZ2luYWxseSA6CiAgKglDb3B5cmlnaHQgKEMpIDE5OTkgQWJzb2x1dGVWYWx1ZSBTeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogCisgKgogICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQogICogVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgogICogY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKQEAgLTEwMyw5ICsxMDMsOCBAQAogCWlvd3JpdGUxNigweDgsIGNhcmQtPmJyaWRnZV9pbyArIDIpOwogCWZvciAoaSA9IDA7IGkgPCAzMDsgaSsrKSB7CiAJCW1kZWxheSgzMCk7Ci0JCWlmIChpb3JlYWQxNihjYXJkLT5icmlkZ2VfaW8pICYgMHgxMCkgeworCQlpZiAoaW9yZWFkMTYoY2FyZC0+YnJpZGdlX2lvKSAmIDB4MTApCiAJCQlicmVhazsKLQkJfQogCX0KIAlpZiAoaSA9PSAzMCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJicmcxIHRpbWVkIG91dFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMKaW5kZXggNGViZDYzOC4uNzhjYWZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIG9yaW5vY29fcGNpLmMKLSAqIAorICoKICAqIERyaXZlciBmb3IgUHJpc20gMi41LzMgZGV2aWNlcyB0aGF0IGhhdmUgYSBkaXJlY3QgUENJIGludGVyZmFjZQogICogKGkuZS4gdGhlc2UgYXJlIG5vdCBQQ01DSUEgY2FyZHMgaW4gYSBQQ01DSUEtdG8tUENJIGJyaWRnZSkuCiAgKiBUaGUgY2FyZCBjb250YWlucyBvbmx5IG9uZSBQQ0kgcmVnaW9uLCB3aGljaCBjb250YWlucyBhbGwgdGhlIHVzdWFsCkBAIC0yMzcsNyArMjM3LDggQEAKIAkiIChQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiwiCiAJIiBEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+ICYiCiAJIiBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+KSI7Ci1NT0RVTEVfQVVUSE9SKCJQYXZlbCBSb3NraW4gPHByb3NraUBnbnUub3JnPiAmIERhdmlkIEdpYnNvbiA8aGVybWVzQGdpYnNvbi5kcm9wYmVhci5pZC5hdT4iKTsKK01PRFVMRV9BVVRIT1IoIlBhdmVsIFJvc2tpbiA8cHJvc2tpQGdudS5vcmc+ICYiCisJICAgICAgIiBEYXZpZCBHaWJzb24gPGhlcm1lc0BnaWJzb24uZHJvcGJlYXIuaWQuYXU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3Igd2lyZWxlc3MgTEFOIGNhcmRzIHVzaW5nIGRpcmVjdCBQQ0kgaW50ZXJmYWNlIik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBNUEwvR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuaAppbmRleCBmNGU1ZTA2Li5jNjU1YjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5oCkBAIC0xLDEwICsxLDEwIEBACiAvKiBvcmlub2NvX3BjaS5oCi0gKiAKKyAqCiAgKiBDb21tb24gY29kZSBmb3IgYWxsIE9yaW5vY28gZHJpdmVycyBmb3IgUENJIGRldmljZXMsIGluY2x1ZGluZwogICogYm90aCBuYXRpdmUgUENJIGFuZCBQQ01DSUEtdG8tUENJIGJyaWRnZXMuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1LCBQYXZlbCBSb3NraW4uCi0gKiBTZWUgb3Jpbm9jby5jIGZvciBsaWNlbnNlLgorICogU2VlIG1haW4uYyBmb3IgbGljZW5zZS4KICAqLwogCiAjaWZuZGVmIF9PUklOT0NPX1BDSV9ICkBAIC0zNywxMSArMzcsMTEgQEAKIAlpZiAoZXJyKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZXJyb3IgJWQgYnJpbmdpbmcgaW50ZXJmYWNlIGRvd24gIgogCQkgICAgICAgImZvciBzdXNwZW5kXG4iLCBkZXYtPm5hbWUsIGVycik7Ci0JCisKIAluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKIAlwcml2LT5od191bmF2YWlsYWJsZSsrOwotCQorCiAJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKIAogCWZyZWVfaXJxKHBkZXYtPmlycSwgZGV2KTsKQEAgLTkwLDEzICs5MCwxMyBAQAogCiAJcHJpdi0+aHdfdW5hdmFpbGFibGUtLTsKIAotCWlmIChwcml2LT5vcGVuICYmICghIHByaXYtPmh3X3VuYXZhaWxhYmxlKSkgeworCWlmIChwcml2LT5vcGVuICYmICghcHJpdi0+aHdfdW5hdmFpbGFibGUpKSB7CiAJCWVyciA9IF9fb3Jpbm9jb191cChkZXYpOwogCQlpZiAoZXJyKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgcmVzdGFydGluZyBjYXJkIG9uIHJlc3VtZVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CiAJfQotCQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMKaW5kZXggZWY3NjE4NS4uYTJhNDQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYwpAQCAtMTQ2LDkgKzE0Niw4IEBACiAJfTsKIAogCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiQ0lTOiAiKTsKLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogCQlwcmludGsoIiUwMlg6IiwgaW9yZWFkOChjYXJkLT5hdHRyX2lvICsgKGkgPDwgMSkpKTsKLQl9CiAJcHJpbnRrKCJcbiIpOwogCiAJLyogVmVyaWZ5IHdoZXRoZXIgYSBzdXBwb3J0ZWQgUEMgY2FyZCBpcyBwcmVzZW50ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMKaW5kZXggZWRlMjRlYy4uY2RhMGU2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qIG9yaW5vY29fdG1kLmMKICAqCiAgKiBEcml2ZXIgZm9yIFByaXNtIElJIGRldmljZXMgd2hpY2ggd291bGQgdXN1YWxseSBiZSBkcml2ZW4gYnkgb3Jpbm9jb19jcywKLSAqIGJ1dCBhcmUgY29ubmVjdGVkIHRvIHRoZSBQQ0kgYnVzIGJ5IGEgVE1ENzE2MC4gCisgKiBidXQgYXJlIGNvbm5lY3RlZCB0byB0aGUgUENJIGJ1cyBieSBhIFRNRDcxNjAuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAzIEpvZXJnIERvcmNoYWluIDxqb2VyZyBBVCBkb3JjaGFpbi5uZXQ+CiAgKiBiYXNlZCBoZWF2aWx5IHVwb24gb3Jpbm9jb19wbHguYyBDb3B5cmlnaHQgKEMpIDIwMDEgRGFuaWVsIEJhcmxvdwpAQCAtMjcsNyArMjcsNyBAQAogICogcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQgbWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlCiAgKiB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgR1BMLgogICoKLSAqIFRoZSBhY3R1YWwgZHJpdmluZyBpcyBkb25lIGJ5IG9yaW5vY28uYywgdGhpcyBpcyBqdXN0IHJlc291cmNlCisgKiBUaGUgYWN0dWFsIGRyaXZpbmcgaXMgZG9uZSBieSBtYWluLmMsIHRoaXMgaXMganVzdCByZXNvdXJjZQogICogYWxsb2NhdGlvbiBzdHVmZi4KICAqCiAgKiBUaGlzIGRyaXZlciBpcyBtb2RlbGVkIGFmdGVyIHRoZSBvcmlub2NvX3BseCBkcml2ZXIuIFRoZSBtYWluCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDY5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uYwpAQCAtMCwwICsxLDIzMyBAQAorLyogSGVscGVycyBmb3IgbWFuYWdpbmcgc2NhbiBxdWV1ZXMKKyAqCisgKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBtYWluLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUgImhlcm1lcy5oIgorI2luY2x1ZGUgIm9yaW5vY28uaCIKKworI2luY2x1ZGUgInNjYW4uaCIKKworI2RlZmluZSBPUklOT0NPX01BWF9CU1NfQ09VTlQJNjQKKworI2RlZmluZSBQUklWX0JTUwkoKHN0cnVjdCBic3NfZWxlbWVudCAqKXByaXYtPmJzc194YnNzX2RhdGEpCisjZGVmaW5lIFBSSVZfWEJTUwkoKHN0cnVjdCB4YnNzX2VsZW1lbnQgKilwcml2LT5ic3NfeGJzc19kYXRhKQorCitpbnQgb3Jpbm9jb19ic3NfZGF0YV9hbGxvY2F0ZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWlmIChwcml2LT5ic3NfeGJzc19kYXRhKQorCQlyZXR1cm4gMDsKKworCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pCisJCXByaXYtPmJzc194YnNzX2RhdGEgPSBremFsbG9jKE9SSU5PQ09fTUFYX0JTU19DT1VOVCAqCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgeGJzc19lbGVtZW50KSwKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJZWxzZQorCQlwcml2LT5ic3NfeGJzc19kYXRhID0ga3phbGxvYyhPUklOT0NPX01BWF9CU1NfQ09VTlQgKgorCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGJzc19lbGVtZW50KSwKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXByaXYtPmJzc194YnNzX2RhdGEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGJlYWNvbnMiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCit2b2lkIG9yaW5vY29fYnNzX2RhdGFfZnJlZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWtmcmVlKHByaXYtPmJzc194YnNzX2RhdGEpOworCXByaXYtPmJzc194YnNzX2RhdGEgPSBOVUxMOworfQorCit2b2lkIG9yaW5vY29fYnNzX2RhdGFfaW5pdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KQoreworCWludCBpOworCisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmJzc19mcmVlX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT5ic3NfbGlzdCk7CisJaWYgKHByaXYtPmhhc19leHRfc2NhbikKKwkJZm9yIChpID0gMDsgaSA8IE9SSU5PQ09fTUFYX0JTU19DT1VOVDsgaSsrKQorCQkJbGlzdF9hZGRfdGFpbCgmKFBSSVZfWEJTU1tpXS5saXN0KSwKKwkJCQkgICAgICAmcHJpdi0+YnNzX2ZyZWVfbGlzdCk7CisJZWxzZQorCQlmb3IgKGkgPSAwOyBpIDwgT1JJTk9DT19NQVhfQlNTX0NPVU5UOyBpKyspCisJCQlsaXN0X2FkZF90YWlsKCYoUFJJVl9CU1NbaV0ubGlzdCksCisJCQkJICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOworCit9CisKK3ZvaWQgb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKKwkJCQl1bnNpZ25lZCBsb25nIHNjYW5fYWdlKQoreworCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKKwkJc3RydWN0IHhic3NfZWxlbWVudCAqYnNzOworCQlzdHJ1Y3QgeGJzc19lbGVtZW50ICp0bXBfYnNzOworCisJCS8qIEJsb3cgYXdheSBjdXJyZW50IGxpc3Qgb2Ygc2NhbiByZXN1bHRzICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcF9ic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgeworCQkJaWYgKCFzY2FuX2FnZSB8fAorCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT5sYXN0X3NjYW5uZWQgKyBzY2FuX2FnZSkpIHsKKwkJCQlsaXN0X21vdmVfdGFpbCgmYnNzLT5saXN0LAorCQkJCQkgICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOworCQkJCS8qIERvbid0IGJsb3cgYXdheSAtPmxpc3QsIGp1c3QgQlNTIGRhdGEgKi8KKwkJCQltZW1zZXQoJmJzcy0+YnNzLCAwLCBzaXplb2YoYnNzLT5ic3MpKTsKKwkJCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IDA7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgYnNzX2VsZW1lbnQgKmJzczsKKwkJc3RydWN0IGJzc19lbGVtZW50ICp0bXBfYnNzOworCisJCS8qIEJsb3cgYXdheSBjdXJyZW50IGxpc3Qgb2Ygc2NhbiByZXN1bHRzICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcF9ic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgeworCQkJaWYgKCFzY2FuX2FnZSB8fAorCQkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT5sYXN0X3NjYW5uZWQgKyBzY2FuX2FnZSkpIHsKKwkJCQlsaXN0X21vdmVfdGFpbCgmYnNzLT5saXN0LAorCQkJCQkgICAgICAgJnByaXYtPmJzc19mcmVlX2xpc3QpOworCQkJCS8qIERvbid0IGJsb3cgYXdheSAtPmxpc3QsIGp1c3QgQlNTIGRhdGEgKi8KKwkJCQltZW1zZXQoJmJzcy0+YnNzLCAwLCBzaXplb2YoYnNzLT5ic3MpKTsKKwkJCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IDA7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQgb3Jpbm9jb19hZGRfZXh0X3NjYW5fcmVzdWx0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCisJCQkJIHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICphdG9tKQoreworCXN0cnVjdCB4YnNzX2VsZW1lbnQgKmJzcyA9IE5VTEw7CisJaW50IGZvdW5kID0gMDsKKworCS8qIFRyeSB0byB1cGRhdGUgYW4gZXhpc3RpbmcgYnNzIGZpcnN0ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgeworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzcy0+YnNzLmJzc2lkLCBhdG9tLT5ic3NpZCkpCisJCQljb250aW51ZTsKKwkJLyogRVNTSUQgbGVuZ3RocyAqLworCQlpZiAoYnNzLT5ic3MuZGF0YVsxXSAhPSBhdG9tLT5kYXRhWzFdKQorCQkJY29udGludWU7CisJCWlmIChtZW1jbXAoJmJzcy0+YnNzLmRhdGFbMl0sICZhdG9tLT5kYXRhWzJdLAorCQkJICAgYXRvbS0+ZGF0YVsxXSkpCisJCQljb250aW51ZTsKKwkJZm91bmQgPSAxOworCQlicmVhazsKKwl9CisKKwkvKiBHcmFiIGEgYnNzIG9mZiB0aGUgZnJlZSBsaXN0ICovCisJaWYgKCFmb3VuZCAmJiAhbGlzdF9lbXB0eSgmcHJpdi0+YnNzX2ZyZWVfbGlzdCkpIHsKKwkJYnNzID0gbGlzdF9lbnRyeShwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQsCisJCQkJIHN0cnVjdCB4YnNzX2VsZW1lbnQsIGxpc3QpOworCQlsaXN0X2RlbChwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQpOworCisJCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJnByaXYtPmJzc19saXN0KTsKKwl9CisKKwlpZiAoYnNzKSB7CisJCS8qIEFsd2F5cyB1cGRhdGUgdGhlIEJTUyB0byBnZXQgbGF0ZXN0IGJlYWNvbiBpbmZvICovCisJCW1lbWNweSgmYnNzLT5ic3MsIGF0b20sIHNpemVvZihic3MtPmJzcykpOworCQlic3MtPmxhc3Rfc2Nhbm5lZCA9IGppZmZpZXM7CisJfQorfQorCitpbnQgb3Jpbm9jb19wcm9jZXNzX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCSB1bnNpZ25lZCBjaGFyICpidWYsCisJCQkJIGludCBsZW4pCit7CisJaW50CQkJb2Zmc2V0OwkJLyogSW4gdGhlIHNjYW4gZGF0YSAqLworCXVuaW9uIGhlcm1lc19zY2FuX2luZm8gKmF0b207CisJaW50CQkJYXRvbV9sZW47CisKKwlzd2l0Y2ggKHByaXYtPmZpcm13YXJlX3R5cGUpIHsKKwljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCWF0b21fbGVuID0gc2l6ZW9mKHN0cnVjdCBhZ2VyZV9zY2FuX2FwaW5mbyk7CisJCW9mZnNldCA9IDA7CisJCWJyZWFrOworCWNhc2UgRklSTVdBUkVfVFlQRV9TWU1CT0w6CisJCS8qIExhY2sgb2YgZG9jdW1lbnRhdGlvbiBuZWNlc3NpdGF0ZXMgdGhpcyBoYWNrLgorCQkgKiBEaWZmZXJlbnQgZmlybXdhcmVzIGhhdmUgNjggb3IgNzYgYnl0ZSBsb25nIGF0b21zLgorCQkgKiBXZSB0cnkgbW9kdWxvIGZpcnN0LiAgSWYgdGhlIGxlbmd0aCBkaXZpZGVzIGJ5IGJvdGgsCisJCSAqIHdlIGNoZWNrIHdoYXQgd291bGQgYmUgdGhlIGNoYW5uZWwgaW4gdGhlIHNlY29uZAorCQkgKiBmcmFtZSBmb3IgYSA2OC1ieXRlIGF0b20uICA3Ni1ieXRlIGF0b21zIGhhdmUgMCB0aGVyZS4KKwkJICogVmFsaWQgY2hhbm5lbCBjYW5ub3QgYmUgMC4gICovCisJCWlmIChsZW4gJSA3NikKKwkJCWF0b21fbGVuID0gNjg7CisJCWVsc2UgaWYgKGxlbiAlIDY4KQorCQkJYXRvbV9sZW4gPSA3NjsKKwkJZWxzZSBpZiAobGVuID49IDEyOTIgJiYgYnVmWzY4XSA9PSAwKQorCQkJYXRvbV9sZW4gPSA3NjsKKwkJZWxzZQorCQkJYXRvbV9sZW4gPSA2ODsKKwkJb2Zmc2V0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOgorCQlvZmZzZXQgPSA0OworCQlpZiAocHJpdi0+aGFzX2hvc3RzY2FuKSB7CisJCQlhdG9tX2xlbiA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopYnVmKTsKKwkJCS8qIFNhbml0eSBjaGVjayBmb3IgYXRvbV9sZW4gKi8KKwkJCWlmIChhdG9tX2xlbiA8IHNpemVvZihzdHJ1Y3QgcHJpc20yX3NjYW5fYXBpbmZvKSkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgYXRvbV9sZW4gaW4gc2NhbiAiCisJCQkJICAgICAgICJkYXRhOiAlZFxuIiwgcHJpdi0+bmRldi0+bmFtZSwKKwkJCQkgICAgICAgYXRvbV9sZW4pOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCQl9IGVsc2UKKwkJCWF0b21fbGVuID0gb2Zmc2V0b2Yoc3RydWN0IHByaXNtMl9zY2FuX2FwaW5mbywgYXRpbSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBDaGVjayB0aGF0IHdlIGdvdCBhbiB3aG9sZSBudW1iZXIgb2YgYXRvbXMgKi8KKwlpZiAoKGxlbiAtIG9mZnNldCkgJSBhdG9tX2xlbikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmV4cGVjdGVkIHNjYW4gZGF0YSBsZW5ndGggJWQsICIKKwkJICAgICAgICJhdG9tX2xlbiAlZCwgb2Zmc2V0ICVkXG4iLCBwcml2LT5uZGV2LT5uYW1lLCBsZW4sCisJCSAgICAgICBhdG9tX2xlbiwgb2Zmc2V0KTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMocHJpdiwgbXNlY3NfdG9famlmZmllcygxNTAwMCkpOworCisJLyogUmVhZCB0aGUgZW50cmllcyBvbmUgYnkgb25lICovCisJZm9yICg7IG9mZnNldCArIGF0b21fbGVuIDw9IGxlbjsgb2Zmc2V0ICs9IGF0b21fbGVuKSB7CisJCWludCBmb3VuZCA9IDA7CisJCXN0cnVjdCBic3NfZWxlbWVudCAqYnNzID0gTlVMTDsKKworCQkvKiBHZXQgbmV4dCBhdG9tICovCisJCWF0b20gPSAodW5pb24gaGVybWVzX3NjYW5faW5mbyAqKSAoYnVmICsgb2Zmc2V0KTsKKworCQkvKiBUcnkgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGJzcyBmaXJzdCAqLworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJnByaXYtPmJzc19saXN0LCBsaXN0KSB7CisJCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzcy0+YnNzLmEuYnNzaWQsIGF0b20tPmEuYnNzaWQpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGxlMTZfdG9fY3B1KGJzcy0+YnNzLmEuZXNzaWRfbGVuKSAhPQorCQkJICAgICAgbGUxNl90b19jcHUoYXRvbS0+YS5lc3NpZF9sZW4pKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKG1lbWNtcChic3MtPmJzcy5hLmVzc2lkLCBhdG9tLT5hLmVzc2lkLAorCQkJICAgICAgbGUxNl90b19jcHUoYXRvbS0+YS5lc3NpZF9sZW4pKSkKKwkJCQljb250aW51ZTsKKwkJCWZvdW5kID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogR3JhYiBhIGJzcyBvZmYgdGhlIGZyZWUgbGlzdCAqLworCQlpZiAoIWZvdW5kICYmICFsaXN0X2VtcHR5KCZwcml2LT5ic3NfZnJlZV9saXN0KSkgeworCQkJYnNzID0gbGlzdF9lbnRyeShwcml2LT5ic3NfZnJlZV9saXN0Lm5leHQsCisJCQkJCSBzdHJ1Y3QgYnNzX2VsZW1lbnQsIGxpc3QpOworCQkJbGlzdF9kZWwocHJpdi0+YnNzX2ZyZWVfbGlzdC5uZXh0KTsKKworCQkJbGlzdF9hZGRfdGFpbCgmYnNzLT5saXN0LCAmcHJpdi0+YnNzX2xpc3QpOworCQl9CisKKwkJaWYgKGJzcykgeworCQkJLyogQWx3YXlzIHVwZGF0ZSB0aGUgQlNTIHRvIGdldCBsYXRlc3QgYmVhY29uIGluZm8gKi8KKwkJCW1lbWNweSgmYnNzLT5ic3MsIGF0b20sIHNpemVvZihic3MtPmJzcykpOworCQkJYnNzLT5sYXN0X3NjYW5uZWQgPSBqaWZmaWVzOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc2Nhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMTlmNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NjYW4uaApAQCAtMCwwICsxLDI5IEBACisvKiBIZWxwZXJzIGZvciBtYW5hZ2luZyBzY2FuIHF1ZXVlcworICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX1NDQU5fSF8KKyNkZWZpbmUgX09SSU5PQ09fU0NBTl9IXworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworc3RydWN0IG9yaW5vY29fcHJpdmF0ZTsKK3N0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvOworCisvKiBTZXR1cCBhbmQgZnJlZSBtZW1vcnkgZm9yIHNjYW4gcmVzdWx0cyAqLworaW50IG9yaW5vY29fYnNzX2RhdGFfYWxsb2NhdGUoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdik7Cit2b2lkIG9yaW5vY29fYnNzX2RhdGFfZnJlZShzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2KTsKK3ZvaWQgb3Jpbm9jb19ic3NfZGF0YV9pbml0KHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYpOworCisvKiBBZGQgc2NhbiByZXN1bHRzICovCit2b2lkIG9yaW5vY29fYWRkX2V4dF9zY2FuX3Jlc3VsdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCSBzdHJ1Y3QgYWdlcmVfZXh0X3NjYW5faW5mbyAqYXRvbSk7CitpbnQgb3Jpbm9jb19wcm9jZXNzX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpkZXYsCisJCQkJIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCQkgaW50IGxlbik7CisKKy8qIENsZWFyIHNjYW4gcmVzdWx0cyAqLwordm9pZCBvcmlub2NvX2NsZWFyX3NjYW5fcmVzdWx0cyhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAorCQkJCXVuc2lnbmVkIGxvbmcgc2Nhbl9hZ2UpOworCisKKyNlbmRpZiAvKiBfT1JJTk9DT19TQ0FOX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3NwZWN0cnVtX2NzLmMKaW5kZXggYjJjYTJlMy4uMzhlNTE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9zcGVjdHJ1bV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vc3BlY3RydW1fY3MuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvbW11bmljYXRpb25zIGFuZCBJbnRlbCBQUk8vV2lyZWxlc3MgMjAxMUIuCiAgKgogICogVGhlIGRyaXZlciBpbXBsZW1lbnRzIFN5bWJvbCBmaXJtd2FyZSBkb3dubG9hZC4gIFRoZSByZXN0IGlzIGhhbmRsZWQKLSAqIGluIGhlcm1lcy5jIGFuZCBvcmlub2NvLmMuCisgKiBpbiBoZXJtZXMuYyBhbmQgbWFpbi5jLgogICoKICAqIFV0aWxpdGllcyBmb3IgZG93bmxvYWRpbmcgdGhlIFN5bWJvbCBmaXJtd2FyZSBhcmUgYXZhaWxhYmxlIGF0CiAgKiBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL29yaW5vY28vCkBAIC0xNSw3ICsxNSw3IEBACiAgKiBQb3J0aW9ucyBiYXNlZCBvbiBTcGVjdHJ1bTI0dERubGQuYyBmcm9tIG9yaWdpbmFsIHNwZWN0cnVtMjQgZHJpdmVyOgogICogCUNvcHlyaWdodCAoQykgU3ltYm9sIFRlY2hub2xvZ2llcy4KICAqCi0gKiBTZWUgY29weXJpZ2h0IG5vdGljZSBpbiBmaWxlIG9yaW5vY28uYy4KKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGZpbGUgbWFpbi5jLgogICovCiAKICNkZWZpbmUgRFJJVkVSX05BTUUgInNwZWN0cnVtX2NzIgpAQCAtMTMzLDcgKzEzMyw3IEBACiAJdWRlbGF5KDEwMDApOwogCXJldHVybiAwOwogCi0gICAgICBjc19mYWlsZWQ6Citjc19mYWlsZWQ6CiAJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCXJldHVybiAtRU5PREVWOwogfQpAQCAtMTcxLDcgKzE3MSw3IEBACiAgKiBUaGlzIGNyZWF0ZXMgYW4gImluc3RhbmNlIiBvZiB0aGUgZHJpdmVyLCBhbGxvY2F0aW5nIGxvY2FsIGRhdGEKICAqIHN0cnVjdHVyZXMgZm9yIG9uZSBkZXZpY2UuICBUaGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgd2l0aCBDYXJkCiAgKiBTZXJ2aWNlcy4KLSAqIAorICoKICAqIFRoZSBkZXZfbGluayBzdHJ1Y3R1cmUgaXMgaW5pdGlhbGl6ZWQsIGJ1dCB3ZSBkb24ndCBhY3R1YWxseQogICogY29uZmlndXJlIHRoZSBjYXJkIGF0IHRoaXMgcG9pbnQgLS0gd2Ugd2FpdCB1bnRpbCB3ZSByZWNlaXZlIGEgY2FyZAogICogaW5zZXJ0aW9uIGV2ZW50LiAgKi8KQEAgLTE4NSw3ICsxODUsNyBAQAogCWRldiA9IGFsbG9jX29yaW5vY29kZXYoc2l6ZW9mKCpjYXJkKSwgJmhhbmRsZV90b19kZXYobGluayksCiAJCQkgICAgICAgc3BlY3RydW1fY3NfaGFyZF9yZXNldCwKIAkJCSAgICAgICBzcGVjdHJ1bV9jc19zdG9wX2Zpcm13YXJlKTsKLQlpZiAoISBkZXYpCisJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhcmQgPSBwcml2LT5jYXJkOwpAQCAtMTk4LDcgKzE5OCw3IEBACiAJbGluay0+aXJxLkF0dHJpYnV0ZXMgPSBJUlFfVFlQRV9EWU5BTUlDX1NIQVJJTkcgfCBJUlFfSEFORExFX1BSRVNFTlQ7CiAJbGluay0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwogCWxpbmstPmlycS5IYW5kbGVyID0gb3Jpbm9jb19pbnRlcnJ1cHQ7Ci0JbGluay0+aXJxLkluc3RhbmNlID0gZGV2OyAKKwlsaW5rLT5pcnEuSW5zdGFuY2UgPSBkZXY7CiAKIAkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uIGRlZmF1bHRzIGNhbiBnbyBoZXJlLiAgSW4gdGhpcwogCSAqIGNsaWVudCwgd2UgYXNzdW1lIHZlcnkgbGl0dGxlLCBhbmQgcmVseSBvbiB0aGUgQ0lTIGZvcgpAQCAtMzY3LDkgKzM2Nyw4IEBACiAJY2FyZC0+bm9kZS5tYWpvciA9IGNhcmQtPm5vZGUubWlub3IgPSAwOwogCiAJLyogUmVzZXQgY2FyZCAqLwotCWlmIChzcGVjdHJ1bV9jc19oYXJkX3Jlc2V0KHByaXYpICE9IDApIHsKKwlpZiAoc3BlY3RydW1fY3NfaGFyZF9yZXNldChwcml2KSAhPSAwKQogCQlnb3RvIGZhaWxlZDsKLQl9CiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZoYW5kbGVfdG9fZGV2KGxpbmspKTsKIAkvKiBUZWxsIHRoZSBzdGFjayB3ZSBleGlzdCAqLwpAQCAtMzgyLDggKzM4MSw4IEBACiAJICogaW5pdGlhbGl6ZWQgYW5kIGFycmFuZ2VkIGluIGEgbGlua2VkIGxpc3QgYXQgbGluay0+ZGV2X25vZGUuICovCiAJc3RyY3B5KGNhcmQtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7CiAJbGluay0+ZGV2X25vZGUgPSAmY2FyZC0+bm9kZTsgLyogbGluay0+ZGV2X25vZGUgYmVpbmcgbm9uLU5VTEwgaXMgYWxzbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0X2RldmljZSBoYXMgYmVlbiByZWdpc3RlcmVkICovCisJCQkJICAgICAgICogdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQorCQkJCSAgICAgICAqIG5ldF9kZXZpY2UgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLwogCiAJLyogRmluYWxseSwgcmVwb3J0IHdoYXQgd2UndmUgZG9uZSAqLwogCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBEUklWRVJfTkFNRSAiIGF0ICVzLCBpcnEgJWQsIGlvICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwODE0MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vd2V4dC5jCkBAIC0wLDAgKzEsMjMyNSBAQAorLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyBzdXBwb3J0LgorICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgorCisjaW5jbHVkZSAiaGVybWVzLmgiCisjaW5jbHVkZSAiaGVybWVzX3JpZC5oIgorI2luY2x1ZGUgIm9yaW5vY28uaCIKKworI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAibWljLmgiCisjaW5jbHVkZSAic2Nhbi5oIgorI2luY2x1ZGUgIm1haW4uaCIKKworI2luY2x1ZGUgIndleHQuaCIKKworI2RlZmluZSBNQVhfUklEX0xFTiAxMDI0CisKK3N0YXRpYyBzdHJ1Y3QgaXdfc3RhdGlzdGljcyAqb3Jpbm9jb19nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IGl3X3N0YXRpc3RpY3MgKndzdGF0cyA9ICZwcml2LT53c3RhdHM7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBnZXRfd2lyZWxlc3Nfc3RhdHMoKSBjYWxsZWQgd2hpbGUgZGV2aWNlIG5vdCBwcmVzZW50XG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIE5VTEw7IC8qIEZJWE1FOiBDYW4gd2UgZG8gYmV0dGVyIHRoYW4gdGhpcz8gKi8KKwl9CisKKwkvKiBJZiBidXN5LCByZXR1cm4gdGhlIG9sZCBzdGF0cy4gIFJldHVybmluZyBOVUxMIG1heSBjYXVzZQorCSAqIHRoZSBpbnRlcmZhY2UgdG8gZGlzYXBwZWFyIGZyb20gL3Byb2MvbmV0L3dpcmVsZXNzICovCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiB3c3RhdHM7CisKKwkvKiBXZSBjYW4ndCByZWFsbHkgd2FpdCBmb3IgdGhlIHRhbGxpZXMgaW5xdWlyeSBjb21tYW5kIHRvCisJICogY29tcGxldGUsIHNvIHdlIGp1c3QgdXNlIHRoZSBwcmV2aW91cyByZXN1bHRzIGFuZCB0cmlnZ2VyCisJICogYSBuZXcgdGFsbGllcyBpbnF1aXJ5IGNvbW1hbmQgZm9yIG5leHQgdGltZSAtIEplYW4gSUkgKi8KKwkvKiBGSVhNRTogUmVhbGx5IHdlIHNob3VsZCB3YWl0IGZvciB0aGUgaW5xdWlyeSB0byBjb21lIGJhY2sgLQorCSAqIGFzIGl0IGlzIHRoZSBzdGF0cyB3ZSBnaXZlIGRvbid0IG1ha2UgYSB3aG9sZSBsb3Qgb2Ygc2Vuc2UuCisJICogVW5mb3J0dW5hdGVseSwgaXQncyBub3QgY2xlYXIgaG93IHRvIGRvIHRoYXQgd2l0aGluIHRoZQorCSAqIHdpcmVsZXNzIGV4dGVuc2lvbnMgZnJhbWV3b3JrOiBJIHRoaW5rIHdlJ3JlIGluIHVzZXIKKwkgKiBjb250ZXh0LCBidXQgYSBsb2NrIHNlZW1zIHRvIGJlIGhlbGQgYnkgdGhlIHRpbWUgd2UgZ2V0IGluCisJICogaGVyZSBzbyB3ZSdyZSBub3Qgc2FmZSB0byBzbGVlcCBoZXJlLiAqLworCWhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1RBTExJRVMpOworCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykgeworCQltZW1zZXQoJndzdGF0cy0+cXVhbCwgMCwgc2l6ZW9mKHdzdGF0cy0+cXVhbCkpOworCQkvKiBJZiBhIHNweSBhZGRyZXNzIGlzIGRlZmluZWQsIHdlIHJlcG9ydCBzdGF0cyBvZiB0aGUKKwkJICogZmlyc3Qgc3B5IGFkZHJlc3MgLSBKZWFuIElJICovCisJCWlmIChTUFlfTlVNQkVSKHByaXYpKSB7CisJCQl3c3RhdHMtPnF1YWwucXVhbCA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLnF1YWw7CisJCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBwcml2LT5zcHlfZGF0YS5zcHlfc3RhdFswXS5sZXZlbDsKKwkJCXdzdGF0cy0+cXVhbC5ub2lzZSA9IHByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLm5vaXNlOworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPQorCQkJCXByaXYtPnNweV9kYXRhLnNweV9zdGF0WzBdLnVwZGF0ZWQ7CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3QgeworCQkJX19sZTE2IHF1YWwsIHNpZ25hbCwgbm9pc2UsIHVudXNlZDsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY3E7CisKKwkJZXJyID0gSEVSTUVTX1JFQURfUkVDT1JEKGh3LCBVU0VSX0JBUCwKKwkJCQkJIEhFUk1FU19SSURfQ09NTVNRVUFMSVRZLCAmY3EpOworCisJCWlmICghZXJyKSB7CisJCQl3c3RhdHMtPnF1YWwucXVhbCA9IChpbnQpbGUxNl90b19jcHUoY3EucXVhbCk7CisJCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSAoaW50KWxlMTZfdG9fY3B1KGNxLnNpZ25hbCkgLSAweDk1OworCQkJd3N0YXRzLT5xdWFsLm5vaXNlID0gKGludClsZTE2X3RvX2NwdShjcS5ub2lzZSkgLSAweDk1OworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPQorCQkJCUlXX1FVQUxfQUxMX1VQREFURUQgfCBJV19RVUFMX0RCTTsKKwkJfQorCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIHdzdGF0czsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0bmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBjaGFyICpuYW1lLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgbnVtcmF0ZXM7CisJaW50IGVycjsKKworCWVyciA9IG9yaW5vY29faHdfZ2V0X2JpdHJhdGVsaXN0KHByaXYsICZudW1yYXRlcywgTlVMTCwgMCk7CisKKwlpZiAoIWVyciAmJiAobnVtcmF0ZXMgPiAyKSkKKwkJc3RyY3B5KG5hbWUsICJJRUVFIDgwMi4xMWIiKTsKKwllbHNlCisJCXN0cmNweShuYW1lLCAiSUVFRSA4MDIuMTEtRFMiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0d2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsCisJCQkJY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0YXRpYyBjb25zdCB1OCBvZmZfYWRkcltdID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisJc3RhdGljIGNvbnN0IHU4IGFueV9hZGRyW10gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogRW5hYmxlIGF1dG9tYXRpYyByb2FtaW5nIC0gbm8gc2FuaXR5IGNoZWNrcyBhcmUgbmVlZGVkICovCisJaWYgKG1lbWNtcCgmYXBfYWRkci0+c2FfZGF0YSwgb2ZmX2FkZHIsIEVUSF9BTEVOKSA9PSAwIHx8CisJICAgIG1lbWNtcCgmYXBfYWRkci0+c2FfZGF0YSwgYW55X2FkZHIsIEVUSF9BTEVOKSA9PSAwKSB7CisJCXByaXYtPmJzc2lkX2ZpeGVkID0gMDsKKwkJbWVtc2V0KHByaXYtPmRlc2lyZWRfYnNzaWQsIDAsIEVUSF9BTEVOKTsKKworCQkvKiAib2ZmIiBtZWFucyBrZWVwIGV4aXN0aW5nIGNvbm5lY3Rpb24gKi8KKwkJaWYgKGFwX2FkZHItPnNhX2RhdGFbMF0gPT0gMCkgeworCQkJX19vcmlub2NvX2h3X3NldF93YXAocHJpdik7CisJCQllcnIgPSAwOworCQl9CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwcml2LT5maXJtd2FyZV90eXBlID09IEZJUk1XQVJFX1RZUEVfQUdFUkUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEx1Y2VudC9BZ2VyZSBmaXJtd2FyZSBkb2Vzbid0ICIKKwkJICAgICAgICJzdXBwb3J0IG1hbnVhbCByb2FtaW5nXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwcml2LT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1hbnVhbCByb2FtaW5nIHN1cHBvcnRlZCBvbmx5IGluICIKKwkJICAgICAgICJtYW5hZ2VkIG1vZGVcbiIsIGRldi0+bmFtZSk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJbnRlcnNpbCBmaXJtd2FyZSBoYW5ncyB3aXRob3V0IERlc2lyZWQgRVNTSUQgKi8KKwlpZiAocHJpdi0+ZmlybXdhcmVfdHlwZSA9PSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMICYmCisJICAgIHN0cmxlbihwcml2LT5kZXNpcmVkX2Vzc2lkKSA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBEZXNpcmVkIEVTU0lEIG11c3QgYmUgc2V0IGZvciAiCisJCSAgICAgICAibWFudWFsIHJvYW1pbmdcbiIsIGRldi0+bmFtZSk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBGaW5hbGx5LCBlbmFibGUgbWFudWFsIHJvYW1pbmcgKi8KKwlwcml2LT5ic3NpZF9maXhlZCA9IDE7CisJbWVtY3B5KHByaXYtPmRlc2lyZWRfYnNzaWQsICZhcF9hZGRyLT5zYV9kYXRhLCBFVEhfQUxFTik7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0d2FwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFwX2FkZHIsCisJCQkJY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIEhFUk1FU19SSURfQ1VSUkVOVEJTU0lELAorCQkJICAgICAgRVRIX0FMRU4sIE5VTEwsIGFwX2FkZHItPnNhX2RhdGEpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHUzMiAqbW9kZSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHByaXYtPml3X21vZGUgPT0gKm1vZGUpCisJCXJldHVybiAwOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlzd2l0Y2ggKCptb2RlKSB7CisJY2FzZSBJV19NT0RFX0FESE9DOgorCQlpZiAoIXByaXYtPmhhc19pYnNzICYmICFwcml2LT5oYXNfcG9ydDMpCisJCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisKKwljYXNlIElXX01PREVfSU5GUkE6CisJCWJyZWFrOworCisJY2FzZSBJV19NT0RFX01PTklUT1I6CisJCWlmIChwcml2LT5icm9rZW5fbW9uaXRvciAmJiAhZm9yY2VfbW9uaXRvcikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1vbml0b3IgbW9kZSBzdXBwb3J0IGlzICIKKwkJCSAgICAgICAiYnVnZ3kgaW4gdGhpcyBmaXJtd2FyZSwgbm90IGVuYWJsaW5nXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlicmVhazsKKwl9CisKKwlpZiAoZXJyID09IC1FSU5QUk9HUkVTUykgeworCQlwcml2LT5pd19tb2RlID0gKm1vZGU7CisJCXNldF9wb3J0X3R5cGUocHJpdik7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRtb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHUzMiAqbW9kZSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwkqbW9kZSA9IHByaXYtPml3X21vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRpd3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgIHN0cnVjdCBpd19wb2ludCAqcnJxLAorCQkJCSAgICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwlpbnQgbnVtcmF0ZXM7CisJaW50IGksIGs7CisKKwlycnEtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpOworCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHN0cnVjdCBpd19yYW5nZSkpOworCisJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7CisJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMjI7CisKKwkvKiBTZXQgYXZhaWxhYmxlIGNoYW5uZWxzL2ZyZXF1ZW5jaWVzICovCisJcmFuZ2UtPm51bV9jaGFubmVscyA9IE5VTV9DSEFOTkVMUzsKKwlrID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0NIQU5ORUxTOyBpKyspIHsKKwkJaWYgKHByaXYtPmNoYW5uZWxfbWFzayAmICgxIDw8IGkpKSB7CisJCQlyYW5nZS0+ZnJlcVtrXS5pID0gaSArIDE7CisJCQlyYW5nZS0+ZnJlcVtrXS5tID0gKGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShpICsgMSkgKgorCQkJCQkgICAgMTAwMDAwKTsKKwkJCXJhbmdlLT5mcmVxW2tdLmUgPSAxOworCQkJaysrOworCQl9CisKKwkJaWYgKGsgPj0gSVdfTUFYX0ZSRVFVRU5DSUVTKQorCQkJYnJlYWs7CisJfQorCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gazsKKwlyYW5nZS0+c2Vuc2l0aXZpdHkgPSAzOworCisJaWYgKHByaXYtPmhhc193ZXApIHsKKwkJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBPUklOT0NPX01BWF9LRVlTOworCQlyYW5nZS0+ZW5jb2Rpbmdfc2l6ZVswXSA9IFNNQUxMX0tFWV9TSVpFOworCQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMTsKKworCQlpZiAocHJpdi0+aGFzX2JpZ193ZXApIHsKKwkJCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gTEFSR0VfS0VZX1NJWkU7CisJCQlyYW5nZS0+bnVtX2VuY29kaW5nX3NpemVzID0gMjsKKwkJfQorCX0KKworCWlmIChwcml2LT5oYXNfd3BhKQorCQlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUDsKKworCWlmICgocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSAmJiAoIVNQWV9OVU1CRVIocHJpdikpKSB7CisJCS8qIFF1YWxpdHkgc3RhdHMgbWVhbmluZ2xlc3MgaW4gYWQtaG9jIG1vZGUgKi8KKwl9IGVsc2UgeworCQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDB4OGIgLSAweDJmOworCQlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAweDJmIC0gMHg5NSAtIDE7CisJCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDB4MmYgLSAweDk1IC0gMTsKKwkJLyogTmVlZCB0byBnZXQgYmV0dGVyIHZhbHVlcyAqLworCQlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDB4MjQ7CisJCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IDB4QzI7CisJCXJhbmdlLT5hdmdfcXVhbC5ub2lzZSA9IDB4OUU7CisJfQorCisJZXJyID0gb3Jpbm9jb19od19nZXRfYml0cmF0ZWxpc3QocHJpdiwgJm51bXJhdGVzLAorCQkJCQkgcmFuZ2UtPmJpdHJhdGUsIElXX01BWF9CSVRSQVRFUyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlyYW5nZS0+bnVtX2JpdHJhdGVzID0gbnVtcmF0ZXM7CisKKwkvKiBTZXQgYW4gaW5kaWNhdGlvbiBvZiB0aGUgbWF4IFRDUCB0aHJvdWdocHV0IGluIGJpdC9zIHRoYXQgd2UgY2FuCisJICogZXhwZWN0IHVzaW5nIHRoaXMgaW50ZXJmYWNlLiBNYXkgYmUgdXNlIGZvciBRb1Mgc3R1ZmYuLi4KKwkgKiBKZWFuIElJICovCisJaWYgKG51bXJhdGVzID4gMikKKwkJcmFuZ2UtPnRocm91Z2hwdXQgPSA1ICogMTAwMCAqIDEwMDA7CS8qIH41IE1iL3MgKi8KKwllbHNlCisJCXJhbmdlLT50aHJvdWdocHV0ID0gMS41ICogMTAwMCAqIDEwMDA7CS8qIH4xLjUgTWIvcyAqLworCisJcmFuZ2UtPm1pbl9ydHMgPSAwOworCXJhbmdlLT5tYXhfcnRzID0gMjM0NzsKKwlyYW5nZS0+bWluX2ZyYWcgPSAyNTY7CisJcmFuZ2UtPm1heF9mcmFnID0gMjM0NjsKKworCXJhbmdlLT5taW5fcG1wID0gMDsKKwlyYW5nZS0+bWF4X3BtcCA9IDY1NTM1MDAwOworCXJhbmdlLT5taW5fcG10ID0gMDsKKwlyYW5nZS0+bWF4X3BtdCA9IDY1NTM1ICogMTAwMDsJLyogPz8/ICovCisJcmFuZ2UtPnBtcF9mbGFncyA9IElXX1BPV0VSX1BFUklPRDsKKwlyYW5nZS0+cG10X2ZsYWdzID0gSVdfUE9XRVJfVElNRU9VVDsKKwlyYW5nZS0+cG1fY2FwYSA9IChJV19QT1dFUl9QRVJJT0QgfCBJV19QT1dFUl9USU1FT1VUIHwKKwkJCSAgSVdfUE9XRVJfVU5JQ0FTVF9SKTsKKworCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MSUZFVElNRTsKKwlyYW5nZS0+cmV0cnlfZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKKwlyYW5nZS0+cl90aW1lX2ZsYWdzID0gSVdfUkVUUllfTElGRVRJTUU7CisJcmFuZ2UtPm1pbl9yZXRyeSA9IDA7CisJcmFuZ2UtPm1heF9yZXRyeSA9IDY1NTM1OwkvKiA/Pz8gKi8KKwlyYW5nZS0+bWluX3JfdGltZSA9IDA7CisJcmFuZ2UtPm1heF9yX3RpbWUgPSA2NTUzNSAqIDEwMDA7CS8qID8/PyAqLworCisJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9BR0VSRSkKKwkJcmFuZ2UtPnNjYW5fY2FwYSA9IElXX1NDQU5fQ0FQQV9FU1NJRDsKKwllbHNlCisJCXJhbmdlLT5zY2FuX2NhcGEgPSBJV19TQ0FOX0NBUEFfTk9ORTsKKworCS8qIEV2ZW50IGNhcGFiaWxpdHkgKGtlcm5lbCkgKi8KKwlJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwocmFuZ2UtPmV2ZW50X2NhcGEpOworCS8qIEV2ZW50IGNhcGFiaWxpdHkgKGRyaXZlcikgKi8KKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1RIUlNQWSk7CisJSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdBUCk7CisJSVdfRVZFTlRfQ0FQQV9TRVQocmFuZ2UtPmV2ZW50X2NhcGEsIFNJT0NHSVdTQ0FOKTsKKwlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgSVdFVlRYRFJPUCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldGl3ZW5jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgc3RydWN0IGl3X3BvaW50ICplcnEsCisJCQkJICAgICBjaGFyICprZXlidWYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGluZGV4ID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKwlpbnQgc2V0aW5kZXggPSBwcml2LT50eF9rZXk7CisJaW50IGVuY29kZV9hbGcgPSBwcml2LT5lbmNvZGVfYWxnOworCWludCByZXN0cmljdGVkID0gcHJpdi0+d2VwX3Jlc3RyaWN0OworCXUxNiB4bGVuID0gMDsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXByaXYtPmhhc193ZXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChlcnEtPnBvaW50ZXIpIHsKKwkJLyogV2UgYWN0dWFsbHkgaGF2ZSBhIGtleSB0byBzZXQgLSBjaGVjayBpdHMgbGVuZ3RoICovCisJCWlmIChlcnEtPmxlbmd0aCA+IExBUkdFX0tFWV9TSVpFKQorCQkJcmV0dXJuIC1FMkJJRzsKKworCQlpZiAoKGVycS0+bGVuZ3RoID4gU01BTExfS0VZX1NJWkUpICYmICFwcml2LT5oYXNfYmlnX3dlcCkKKwkJCXJldHVybiAtRTJCSUc7CisJfQorCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBDbGVhciBhbnkgVEtJUCBrZXkgd2UgaGF2ZSAqLworCWlmICgocHJpdi0+aGFzX3dwYSkgJiYgKHByaXYtPmVuY29kZV9hbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSkKKwkJKHZvaWQpIG9yaW5vY29fY2xlYXJfdGtpcF9rZXkocHJpdiwgc2V0aW5kZXgpOworCisJaWYgKGVycS0+bGVuZ3RoID4gMCkgeworCQlpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IE9SSU5PQ09fTUFYX0tFWVMpKQorCQkJaW5kZXggPSBwcml2LT50eF9rZXk7CisKKwkJLyogQWRqdXN0IGtleSBsZW5ndGggdG8gYSBzdXBwb3J0ZWQgdmFsdWUgKi8KKwkJaWYgKGVycS0+bGVuZ3RoID4gU01BTExfS0VZX1NJWkUpCisJCQl4bGVuID0gTEFSR0VfS0VZX1NJWkU7CisJCWVsc2UgaWYgKGVycS0+bGVuZ3RoID4gMCkKKwkJCXhsZW4gPSBTTUFMTF9LRVlfU0laRTsKKwkJZWxzZQorCQkJeGxlbiA9IDA7CisKKwkJLyogU3dpdGNoIG9uIFdFUCBpZiBvZmYgKi8KKwkJaWYgKChlbmNvZGVfYWxnICE9IElXX0VOQ09ERV9BTEdfV0VQKSAmJiAoeGxlbiA+IDApKSB7CisJCQlzZXRpbmRleCA9IGluZGV4OworCQkJZW5jb2RlX2FsZyA9IElXX0VOQ09ERV9BTEdfV0VQOworCQl9CisJfSBlbHNlIHsKKwkJLyogSW1wb3J0YW50IG5vdGUgOiBpZiB0aGUgdXNlciBkbyAiaXdjb25maWcgZXRoMCBlbmMgb2ZmIiwKKwkJICogd2Ugd2lsbCBhcnJpdmUgdGhlcmUgd2l0aCBhbiBpbmRleCBvZiAtMS4gVGhpcyBpcyB2YWxpZAorCQkgKiBidXQgbmVlZCB0byBiZSB0YWtlbiBjYXJlIG9mZi4uLiBKZWFuIElJICovCisJCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gT1JJTk9DT19NQVhfS0VZUykpIHsKKwkJCWlmICgoaW5kZXggIT0gLTEpIHx8IChlcnEtPmZsYWdzID09IDApKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFNldCB0aGUgaW5kZXggOiBDaGVjayB0aGF0IHRoZSBrZXkgaXMgdmFsaWQgKi8KKwkJCWlmIChwcml2LT5rZXlzW2luZGV4XS5sZW4gPT0gMCkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlzZXRpbmRleCA9IGluZGV4OworCQl9CisJfQorCisJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpCisJCWVuY29kZV9hbGcgPSBJV19FTkNPREVfQUxHX05PTkU7CisJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfT1BFTikKKwkJcmVzdHJpY3RlZCA9IDA7CisJaWYgKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfUkVTVFJJQ1RFRCkKKwkJcmVzdHJpY3RlZCA9IDE7CisKKwlpZiAoZXJxLT5wb2ludGVyICYmIGVycS0+bGVuZ3RoID4gMCkgeworCQlwcml2LT5rZXlzW2luZGV4XS5sZW4gPSBjcHVfdG9fbGUxNih4bGVuKTsKKwkJbWVtc2V0KHByaXYtPmtleXNbaW5kZXhdLmRhdGEsIDAsCisJCSAgICAgICBzaXplb2YocHJpdi0+a2V5c1tpbmRleF0uZGF0YSkpOworCQltZW1jcHkocHJpdi0+a2V5c1tpbmRleF0uZGF0YSwga2V5YnVmLCBlcnEtPmxlbmd0aCk7CisJfQorCXByaXYtPnR4X2tleSA9IHNldGluZGV4OworCisJLyogVHJ5IGZhc3Qga2V5IGNoYW5nZSBpZiBjb25uZWN0ZWQgYW5kIG9ubHkga2V5cyBhcmUgY2hhbmdlZCAqLworCWlmICgocHJpdi0+ZW5jb2RlX2FsZyA9PSBlbmNvZGVfYWxnKSAmJgorCSAgICAocHJpdi0+d2VwX3Jlc3RyaWN0ID09IHJlc3RyaWN0ZWQpICYmCisJICAgIG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgeworCQllcnIgPSBfX29yaW5vY29faHdfc2V0dXBfd2Vwa2V5cyhwcml2KTsKKwkJLyogTm8gbmVlZCB0byBjb21taXQgaWYgc3VjY2Vzc2Z1bCAqLworCQlnb3RvIG91dDsKKwl9CisKKwlwcml2LT5lbmNvZGVfYWxnID0gZW5jb2RlX2FsZzsKKwlwcml2LT53ZXBfcmVzdHJpY3QgPSByZXN0cmljdGVkOworCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0aXdlbmNvZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKKwkJCQkgICAgIGNoYXIgKmtleWJ1ZikKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaW5kZXggPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkgLSAxOworCXUxNiB4bGVuID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFwcml2LT5oYXNfd2VwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gT1JJTk9DT19NQVhfS0VZUykpCisJCWluZGV4ID0gcHJpdi0+dHhfa2V5OworCisJZXJxLT5mbGFncyA9IDA7CisJaWYgKCFwcml2LT5lbmNvZGVfYWxnKQorCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwllcnEtPmZsYWdzIHw9IGluZGV4ICsgMTsKKworCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCisJCWVycS0+ZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7CisJZWxzZQorCQllcnEtPmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOworCisJeGxlbiA9IGxlMTZfdG9fY3B1KHByaXYtPmtleXNbaW5kZXhdLmxlbik7CisKKwllcnEtPmxlbmd0aCA9IHhsZW47CisKKwltZW1jcHkoa2V5YnVmLCBwcml2LT5rZXlzW2luZGV4XS5kYXRhLCBPUklOT0NPX01BWF9LRVlfU0laRSk7CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0ZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaXdfcG9pbnQgKmVycSwKKwkJCQkgIGNoYXIgKmVzc2lkYnVmKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBOb3RlIDogRVNTSUQgaXMgaWdub3JlZCBpbiBBZC1Ib2MgZGVtbyBtb2RlLCBidXQgd2UgY2FuIHNldCBpdAorCSAqIGFueXdheS4uLiAtIEplYW4gSUkgKi8KKworCS8qIEh1bS4uLiBTaG91bGQgbm90IHVzZSBXaXJlbGVzcyBFeHRlbnNpb24gY29uc3RhbnQgKG1heSBjaGFuZ2UpLAorCSAqIHNob3VsZCB1c2Ugb3VyIG93bi4uLiAtIEplYW4gSUkgKi8KKwlpZiAoZXJxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKKwkJcmV0dXJuIC1FMkJJRzsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogTlVMTCB0aGUgc3RyaW5nIChmb3IgTlVMTCB0ZXJtaW5hdGlvbiAmIEVTU0lEID0gQU5ZKSAtIEplYW4gSUkgKi8KKwltZW1zZXQocHJpdi0+ZGVzaXJlZF9lc3NpZCwgMCwgc2l6ZW9mKHByaXYtPmRlc2lyZWRfZXNzaWQpKTsKKworCS8qIElmIG5vdCBBTlksIGdldCB0aGUgbmV3IEVTU0lEICovCisJaWYgKGVycS0+ZmxhZ3MpCisJCW1lbWNweShwcml2LT5kZXNpcmVkX2Vzc2lkLCBlc3NpZGJ1ZiwgZXJxLT5sZW5ndGgpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRlc3NpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBpd19wb2ludCAqZXJxLAorCQkJCSAgY2hhciAqZXNzaWRidWYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGFjdGl2ZTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSBvcmlub2NvX2h3X2dldF9lc3NpZChwcml2LCAmYWN0aXZlLCBlc3NpZGJ1Zik7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZXJxLT5sZW5ndGggPSBlcnI7CisJfSBlbHNlIHsKKwkJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCQlyZXR1cm4gLUVCVVNZOworCQltZW1jcHkoZXNzaWRidWYsIHByaXYtPmRlc2lyZWRfZXNzaWQsIElXX0VTU0lEX01BWF9TSVpFKTsKKwkJZXJxLT5sZW5ndGggPSBzdHJsZW4ocHJpdi0+ZGVzaXJlZF9lc3NpZCk7CisJCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJfQorCisJZXJxLT5mbGFncyA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldG5pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BvaW50ICpucnEsCisJCQkJIGNoYXIgKm5pY2tidWYpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChucnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKQorCQlyZXR1cm4gLUUyQklHOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwltZW1zZXQocHJpdi0+bmljaywgMCwgc2l6ZW9mKHByaXYtPm5pY2spKTsKKwltZW1jcHkocHJpdi0+bmljaywgbmlja2J1ZiwgbnJxLT5sZW5ndGgpOworCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRuaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wb2ludCAqbnJxLAorCQkJCSBjaGFyICpuaWNrYnVmKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW1lbWNweShuaWNrYnVmLCBwcml2LT5uaWNrLCBJV19FU1NJRF9NQVhfU0laRSk7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCW5ycS0+bGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19mcmVxICpmcnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBjaGFuID0gLTE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCisJLyogSW4gaW5mcmFzdHJ1Y3R1cmUgbW9kZSB0aGUgQVAgc2V0cyB0aGUgY2hhbm5lbCAqLworCWlmIChwcml2LT5pd19tb2RlID09IElXX01PREVfSU5GUkEpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoKGZycS0+ZSA9PSAwKSAmJiAoZnJxLT5tIDw9IDEwMDApKSB7CisJCS8qIFNldHRpbmcgYnkgY2hhbm5lbCBudW1iZXIgKi8KKwkJY2hhbiA9IGZycS0+bTsKKwl9IGVsc2UgeworCQkvKiBTZXR0aW5nIGJ5IGZyZXF1ZW5jeSAqLworCQlpbnQgZGVub20gPSAxOworCQlpbnQgaTsKKworCQkvKiBDYWxjdWxhdGUgZGVub21pbmF0b3IgdG8gcmVzY2FsZSB0byBNSHogKi8KKwkJZm9yIChpID0gMDsgaSA8ICg2IC0gZnJxLT5lKTsgaSsrKQorCQkJZGVub20gKj0gMTA7CisKKwkJY2hhbiA9IGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbihmcnEtPm0gLyBkZW5vbSk7CisJfQorCisJaWYgKChjaGFuIDwgMSkgfHwgKGNoYW4gPiBOVU1fQ0hBTk5FTFMpIHx8CisJICAgICAhKHByaXYtPmNoYW5uZWxfbWFzayAmICgxIDw8IChjaGFuLTEpKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlwcml2LT5jaGFubmVsID0gY2hhbjsKKwlpZiAocHJpdi0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKKwkJLyogRmFzdCBjaGFubmVsIGNoYW5nZSAtIG5vIGNvbW1pdCBpZiBzdWNjZXNzZnVsICovCisJCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwkJZXJyID0gaGVybWVzX2RvY21kX3dhaXQoaHcsIEhFUk1FU19DTURfVEVTVCB8CisJCQkJCSAgICBIRVJNRVNfVEVTVF9TRVRfQ0hBTk5FTCwKKwkJCQkJY2hhbiwgTlVMTCk7CisJfQorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0ZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfZnJlcSAqZnJxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdG1wOworCisJLyogTG9ja2luZyBkb25lIGluIHRoZXJlICovCisJdG1wID0gb3Jpbm9jb19od19nZXRfZnJlcShwcml2KTsKKwlpZiAodG1wIDwgMCkKKwkJcmV0dXJuIHRtcDsKKworCWZycS0+bSA9IHRtcCAqIDEwMDAwMDsKKwlmcnEtPmUgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRzZW5zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wYXJhbSAqc3JxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJdTE2IHZhbDsKKwlpbnQgZXJyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXByaXYtPmhhc19zZW5zaXRpdml0eSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisJZXJyID0gaGVybWVzX3JlYWRfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJICBIRVJNRVNfUklEX0NORlNZU1RFTVNDQUxFLCAmdmFsKTsKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXNycS0+dmFsdWUgPSB2YWw7CisJc3JxLT5maXhlZCA9IDA7IC8qIGF1dG8gKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0c2VucyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnNycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHZhbCA9IHNycS0+dmFsdWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghcHJpdi0+aGFzX3NlbnNpdGl2aXR5KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoKHZhbCA8IDEpIHx8ICh2YWwgPiAzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlwcml2LT5hcF9kZW5zaXR5ID0gdmFsOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQlzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKKwkJCQljaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdmFsID0gcnJxLT52YWx1ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKHJycS0+ZGlzYWJsZWQpCisJCXZhbCA9IDIzNDc7CisKKwlpZiAoKHZhbCA8IDApIHx8ICh2YWwgPiAyMzQ3KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXYtPnJ0c190aHJlc2ggPSB2YWw7CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBpd19wYXJhbSAqcnJxLAorCQkJCWNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcnJxLT52YWx1ZSA9IHByaXYtPnJ0c190aHJlc2g7CisJcnJxLT5kaXNhYmxlZCA9IChycnEtPnZhbHVlID09IDIzNDcpOworCXJycS0+Zml4ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wYXJhbSAqZnJxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChwcml2LT5oYXNfbXdvKSB7CisJCWlmIChmcnEtPmRpc2FibGVkKQorCQkJcHJpdi0+bXdvX3JvYnVzdCA9IDA7CisJCWVsc2UgeworCQkJaWYgKGZycS0+Zml4ZWQpCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEZpeGVkIGZyYWdtZW50YXRpb24gIgorCQkJCSAgICAgICAiaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGZpcm13YXJlLiAiCisJCQkJICAgICAgICJVc2luZyBNV08gcm9idXN0IGluc3RlYWQuXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJcHJpdi0+bXdvX3JvYnVzdCA9IDE7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoZnJxLT5kaXNhYmxlZCkKKwkJCXByaXYtPmZyYWdfdGhyZXNoID0gMjM0NjsKKwkJZWxzZSB7CisJCQlpZiAoKGZycS0+dmFsdWUgPCAyNTYpIHx8IChmcnEtPnZhbHVlID4gMjM0NikpCisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCQkvKiBtdXN0IGJlIGV2ZW4gKi8KKwkJCQlwcml2LT5mcmFnX3RocmVzaCA9IGZycS0+dmFsdWUgJiB+MHgxOworCQl9CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRmcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wYXJhbSAqZnJxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVycjsKKwl1MTYgdmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChwcml2LT5oYXNfbXdvKSB7CisJCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GTVdPUk9CVVNUX0FHRVJFLAorCQkJCQkgICZ2YWwpOworCQlpZiAoZXJyKQorCQkJdmFsID0gMDsKKworCQlmcnEtPnZhbHVlID0gdmFsID8gMjM0NyA6IDA7CisJCWZycS0+ZGlzYWJsZWQgPSAhdmFsOworCQlmcnEtPmZpeGVkID0gMDsKKwl9IGVsc2UgeworCQllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkJICBIRVJNRVNfUklEX0NORkZSQUdNRU5UQVRJT05USFJFU0hPTEQsCisJCQkJCSAgJnZhbCk7CisJCWlmIChlcnIpCisJCQl2YWwgPSAwOworCisJCWZycS0+dmFsdWUgPSB2YWw7CisJCWZycS0+ZGlzYWJsZWQgPSAodmFsID49IDIzNDYpOworCQlmcnEtPmZpeGVkID0gMTsKKwl9CisKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldHJhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgc3RydWN0IGl3X3BhcmFtICpycnEsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByYXRlbW9kZTsKKwlpbnQgYml0cmF0ZTsgLyogMTAwcyBvZiBraWxvYml0cyAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBBcyB0aGUgdXNlciBzcGFjZSBkb2Vzbid0IGtub3cgb3VyIGhpZ2hlc3QgcmF0ZSwgaXQgdXNlcyAtMQorCSAqIHRvIGFzayB1cyB0byBzZXQgdGhlIGhpZ2hlc3QgcmF0ZS4gIFRlc3QgaXQgdXNpbmcgIml3Y29uZmlnCisJICogZXRoWCByYXRlIGF1dG8iIC0gSmVhbiBJSSAqLworCWlmIChycnEtPnZhbHVlID09IC0xKQorCQliaXRyYXRlID0gMTEwOworCWVsc2UgeworCQlpZiAocnJxLT52YWx1ZSAlIDEwMDAwMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQliaXRyYXRlID0gcnJxLT52YWx1ZSAvIDEwMDAwMDsKKwl9CisKKwlyYXRlbW9kZSA9IG9yaW5vY29fZ2V0X2JpdHJhdGVtb2RlKGJpdHJhdGUsICFycnEtPmZpeGVkKTsKKworCWlmIChyYXRlbW9kZSA9PSAtMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlwcml2LT5iaXRyYXRlbW9kZSA9IHJhdGVtb2RlOworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKKwkJCQkgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IDA7CisJaW50IGJpdHJhdGUsIGF1dG9tYXRpYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlvcmlub2NvX2dldF9yYXRlbW9kZV9jZmcocHJpdi0+Yml0cmF0ZW1vZGUsICZiaXRyYXRlLCAmYXV0b21hdGljKTsKKworCS8qIElmIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZyB3ZSB0cnkgdG8gZmluZCBtb3JlIGFib3V0IHRoZQorCSAgIGN1cnJlbnQgbW9kZSAqLworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCWVyciA9IG9yaW5vY29faHdfZ2V0X2FjdF9iaXRyYXRlKHByaXYsICZiaXRyYXRlKTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlycnEtPnZhbHVlID0gYml0cmF0ZTsKKwlycnEtPmZpeGVkID0gIWF1dG9tYXRpYzsKKwlycnEtPmRpc2FibGVkID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRwb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcHJxLAorCQkJCSAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAocHJxLT5kaXNhYmxlZCkgeworCQlwcml2LT5wbV9vbiA9IDA7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChwcnEtPmZsYWdzICYgSVdfUE9XRVJfTU9ERSkgeworCQljYXNlIElXX1BPV0VSX1VOSUNBU1RfUjoKKwkJCXByaXYtPnBtX21jYXN0ID0gMDsKKwkJCXByaXYtPnBtX29uID0gMTsKKwkJCWJyZWFrOworCQljYXNlIElXX1BPV0VSX0FMTF9SOgorCQkJcHJpdi0+cG1fbWNhc3QgPSAxOworCQkJcHJpdi0+cG1fb24gPSAxOworCQkJYnJlYWs7CisJCWNhc2UgSVdfUE9XRVJfT046CisJCQkvKiBObyBmbGFncyA6IGJ1dCB3ZSBtYXkgaGF2ZSBhIHZhbHVlIC0gSmVhbiBJSSAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAocHJxLT5mbGFncyAmIElXX1BPV0VSX1RJTUVPVVQpIHsKKwkJCXByaXYtPnBtX29uID0gMTsKKwkJCXByaXYtPnBtX3RpbWVvdXQgPSBwcnEtPnZhbHVlIC8gMTAwMDsKKwkJfQorCQlpZiAocHJxLT5mbGFncyAmIElXX1BPV0VSX1BFUklPRCkgeworCQkJcHJpdi0+cG1fb24gPSAxOworCQkJcHJpdi0+cG1fcGVyaW9kID0gcHJxLT52YWx1ZSAvIDEwMDA7CisJCX0KKwkJLyogSXQncyB2YWxpZCB0byBub3QgaGF2ZSBhIHZhbHVlIGlmIHdlIGFyZSBqdXN0IHRvZ2dsaW5nCisJCSAqIHRoZSBmbGFncy4uLiBKZWFuIElJICovCisJCWlmICghcHJpdi0+cG1fb24pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldHBvd2VyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgc3RydWN0IGl3X3BhcmFtICpwcnEsCisJCQkJICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IGVyciA9IDA7CisJdTE2IGVuYWJsZSwgcGVyaW9kLCB0aW1lb3V0LCBtY2FzdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwKKwkJCQkgIEhFUk1FU19SSURfQ05GUE1FTkFCTEVELCAmZW5hYmxlKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZNQVhTTEVFUERVUkFUSU9OLCAmcGVyaW9kKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZQTUhPTERPVkVSRFVSQVRJT04sICZ0aW1lb3V0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCSAgSEVSTUVTX1JJRF9DTkZNVUxUSUNBU1RSRUNFSVZFLCAmbWNhc3QpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJcHJxLT5kaXNhYmxlZCA9ICFlbmFibGU7CisJLyogTm90ZSA6IGJ5IGRlZmF1bHQsIGRpc3BsYXkgdGhlIHBlcmlvZCAqLworCWlmICgocHJxLT5mbGFncyAmIElXX1BPV0VSX1RZUEUpID09IElXX1BPV0VSX1RJTUVPVVQpIHsKKwkJcHJxLT5mbGFncyA9IElXX1BPV0VSX1RJTUVPVVQ7CisJCXBycS0+dmFsdWUgPSB0aW1lb3V0ICogMTAwMDsKKwl9IGVsc2UgeworCQlwcnEtPmZsYWdzID0gSVdfUE9XRVJfUEVSSU9EOworCQlwcnEtPnZhbHVlID0gcGVyaW9kICogMTAwMDsKKwl9CisJaWYgKG1jYXN0KQorCQlwcnEtPmZsYWdzIHw9IElXX1BPV0VSX0FMTF9SOworCWVsc2UKKwkJcHJxLT5mbGFncyB8PSBJV19QT1dFUl9VTklDQVNUX1I7CisKKyBvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkJICAgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCWludCBpZHgsIGFsZyA9IGV4dC0+YWxnLCBzZXRfa2V5ID0gMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAtRUlOVkFMOworCXUxNiBrZXlfbGVuOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBEZXRlcm1pbmUgYW5kIHZhbGlkYXRlIHRoZSBrZXkgaW5kZXggKi8KKwlpZHggPSBlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVg7CisJaWYgKGlkeCkgeworCQlpZiAoKGlkeCA8IDEpIHx8IChpZHggPiA0KSkKKwkJCWdvdG8gb3V0OworCQlpZHgtLTsKKwl9IGVsc2UKKwkJaWR4ID0gcHJpdi0+dHhfa2V5OworCisJaWYgKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKKwkJYWxnID0gSVdfRU5DT0RFX0FMR19OT05FOworCisJaWYgKHByaXYtPmhhc193cGEgJiYgKGFsZyAhPSBJV19FTkNPREVfQUxHX1RLSVApKSB7CisJCS8qIENsZWFyIGFueSBUS0lQIFRYIGtleSB3ZSBoYWQgKi8KKwkJKHZvaWQpIG9yaW5vY29fY2xlYXJfdGtpcF9rZXkocHJpdiwgcHJpdi0+dHhfa2V5KTsKKwl9CisKKwlpZiAoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX1NFVF9UWF9LRVkpIHsKKwkJcHJpdi0+dHhfa2V5ID0gaWR4OworCQlzZXRfa2V5ID0gKChhbGcgPT0gSVdfRU5DT0RFX0FMR19US0lQKSB8fAorCQkJICAgKGV4dC0+a2V5X2xlbiA+IDApKSA/IDEgOiAwOworCX0KKworCWlmIChzZXRfa2V5KSB7CisJCS8qIFNldCB0aGUgcmVxdWVzdGVkIGtleSBmaXJzdCAqLworCQlzd2l0Y2ggKGFsZykgeworCQljYXNlIElXX0VOQ09ERV9BTEdfTk9ORToKKwkJCXByaXYtPmVuY29kZV9hbGcgPSBhbGc7CisJCQlwcml2LT5rZXlzW2lkeF0ubGVuID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CisJCQlpZiAoZXh0LT5rZXlfbGVuID4gU01BTExfS0VZX1NJWkUpCisJCQkJa2V5X2xlbiA9IExBUkdFX0tFWV9TSVpFOworCQkJZWxzZSBpZiAoZXh0LT5rZXlfbGVuID4gMCkKKwkJCQlrZXlfbGVuID0gU01BTExfS0VZX1NJWkU7CisJCQllbHNlCisJCQkJZ290byBvdXQ7CisKKwkJCXByaXYtPmVuY29kZV9hbGcgPSBhbGc7CisJCQlwcml2LT5rZXlzW2lkeF0ubGVuID0gY3B1X3RvX2xlMTYoa2V5X2xlbik7CisKKwkJCWtleV9sZW4gPSBtaW4oZXh0LT5rZXlfbGVuLCBrZXlfbGVuKTsKKworCQkJbWVtc2V0KHByaXYtPmtleXNbaWR4XS5kYXRhLCAwLCBPUklOT0NPX01BWF9LRVlfU0laRSk7CisJCQltZW1jcHkocHJpdi0+a2V5c1tpZHhdLmRhdGEsIGV4dC0+a2V5LCBrZXlfbGVuKTsKKwkJCWJyZWFrOworCisJCWNhc2UgSVdfRU5DT0RFX0FMR19US0lQOgorCQl7CisJCQloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJCQl1OCAqdGtpcF9pdiA9IE5VTEw7CisKKwkJCWlmICghcHJpdi0+aGFzX3dwYSB8fAorCQkJICAgIChleHQtPmtleV9sZW4gPiBzaXplb2YocHJpdi0+dGtpcF9rZXlbMF0pKSkKKwkJCQlnb3RvIG91dDsKKworCQkJcHJpdi0+ZW5jb2RlX2FsZyA9IGFsZzsKKwkJCW1lbXNldCgmcHJpdi0+dGtpcF9rZXlbaWR4XSwgMCwKKwkJCSAgICAgICBzaXplb2YocHJpdi0+dGtpcF9rZXlbaWR4XSkpOworCQkJbWVtY3B5KCZwcml2LT50a2lwX2tleVtpZHhdLCBleHQtPmtleSwgZXh0LT5rZXlfbGVuKTsKKworCQkJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9SWF9TRVFfVkFMSUQpCisJCQkJdGtpcF9pdiA9ICZleHQtPnJ4X3NlcVswXTsKKworCQkJZXJyID0gX19vcmlub2NvX2h3X3NldF90a2lwX2tleShodywgaWR4LAorCQkJCSBleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfU0VUX1RYX0tFWSwKKwkJCQkgKHU4ICopICZwcml2LT50a2lwX2tleVtpZHhdLAorCQkJCSB0a2lwX2l2LCBOVUxMKTsKKwkJCWlmIChlcnIpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgJWQgc2V0dGluZyBUS0lQIGtleSIKKwkJCQkgICAgICAgIlxuIiwgZGV2LT5uYW1lLCBlcnIpOworCisJCQlnb3RvIG91dDsKKwkJfQorCQlkZWZhdWx0OgorCQkJZ290byBvdXQ7CisJCX0KKwl9CisJZXJyID0gLUVJTlBST0dSRVNTOworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKKwkJCQkgICAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKKwlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CisJaW50IGlkeCwgbWF4X2tleV9sZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSAtRUlOVkFMOworCW1heF9rZXlfbGVuID0gZW5jb2RpbmctPmxlbmd0aCAtIHNpemVvZigqZXh0KTsKKwlpZiAobWF4X2tleV9sZW4gPCAwKQorCQlnb3RvIG91dDsKKworCWlkeCA9IGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKKwlpZiAoaWR4KSB7CisJCWlmICgoaWR4IDwgMSkgfHwgKGlkeCA+IDQpKQorCQkJZ290byBvdXQ7CisJCWlkeC0tOworCX0gZWxzZQorCQlpZHggPSBwcml2LT50eF9rZXk7CisKKwllbmNvZGluZy0+ZmxhZ3MgPSBpZHggKyAxOworCW1lbXNldChleHQsIDAsIHNpemVvZigqZXh0KSk7CisKKwlleHQtPmFsZyA9IHByaXYtPmVuY29kZV9hbGc7CisJc3dpdGNoIChwcml2LT5lbmNvZGVfYWxnKSB7CisJY2FzZSBJV19FTkNPREVfQUxHX05PTkU6CisJCWV4dC0+a2V5X2xlbiA9IDA7CisJCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRElTQUJMRUQ7CisJCWJyZWFrOworCWNhc2UgSVdfRU5DT0RFX0FMR19XRVA6CisJCWV4dC0+a2V5X2xlbiA9IG1pbl90KHUxNiwgbGUxNl90b19jcHUocHJpdi0+a2V5c1tpZHhdLmxlbiksCisJCQkJICAgICBtYXhfa2V5X2xlbik7CisJCW1lbWNweShleHQtPmtleSwgcHJpdi0+a2V5c1tpZHhdLmRhdGEsIGV4dC0+a2V5X2xlbik7CisJCWVuY29kaW5nLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKKwkJYnJlYWs7CisJY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CisJCWV4dC0+a2V5X2xlbiA9IG1pbl90KHUxNiwgc2l6ZW9mKHN0cnVjdCBvcmlub2NvX3RraXBfa2V5KSwKKwkJCQkgICAgIG1heF9rZXlfbGVuKTsKKwkJbWVtY3B5KGV4dC0+a2V5LCAmcHJpdi0+dGtpcF9rZXlbaWR4XSwgZXh0LT5rZXlfbGVuKTsKKwkJZW5jb2RpbmctPmZsYWdzIHw9IElXX0VOQ09ERV9FTkFCTEVEOworCQlicmVhazsKKwl9CisKKwllcnIgPSAwOworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCXN0cnVjdCBpd19wYXJhbSAqcGFyYW0gPSAmd3JxdS0+cGFyYW07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVJTlBST0dSRVNTOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046CisJY2FzZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRToKKwljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQOgorCWNhc2UgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTDoKKwljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgorCQkvKgorCQkgKiBvcmlub2NvIGRvZXMgbm90IHVzZSB0aGVzZSBwYXJhbWV0ZXJzCisJCSAqLworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKKwkJLyogd2xfbGttIGltcGxpZXMgdmFsdWUgMiA9PSBQU0sgZm9yIEhlcm1lcyBJCisJCSAqIHdoaWNoIHRpZXMgaW4gd2l0aCBXRVhUCisJCSAqIG5vIG90aGVyIGhpbnRzIHRobyA6KAorCQkgKi8KKwkJcHJpdi0+a2V5X21nbXQgPSBwYXJhbS0+dmFsdWU7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTOgorCQkvKiBXaGVuIGNvdW50ZXJtZWFzdXJlcyBhcmUgZW5hYmxlZCwgc2h1dCBkb3duIHRoZQorCQkgKiBjYXJkOyB3aGVuIGRpc2FibGVkLCByZS1lbmFibGUgdGhlIGNhcmQuIFRoaXMgbXVzdAorCQkgKiB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseS4KKwkJICoKKwkJICogVE9ETzogTWFrZSBzdXJlIHRoYXQgdGhlIEVBUE9MIG1lc3NhZ2UgaXMgZ2V0dGluZworCQkgKiAgICAgICBvdXQgYmVmb3JlIGNhcmQgZGlzYWJsZWQKKwkJICovCisJCWlmIChwYXJhbS0+dmFsdWUpIHsKKwkJCXByaXYtPnRraXBfY21fYWN0aXZlID0gMTsKKwkJCXJldCA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7CisJCX0gZWxzZSB7CisJCQlwcml2LT50a2lwX2NtX2FjdGl2ZSA9IDA7CisJCQlyZXQgPSBoZXJtZXNfZGlzYWJsZV9wb3J0KGh3LCAwKTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF84MDIxMV9BVVRIX0FMRzoKKwkJaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisJCQlwcml2LT53ZXBfcmVzdHJpY3QgPSAxOworCQllbHNlIGlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSkKKwkJCXByaXYtPndlcF9yZXN0cmljdCA9IDA7CisJCWVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorCQlpZiAocHJpdi0+aGFzX3dwYSkgeworCQkJcHJpdi0+d3BhX2VuYWJsZWQgPSBwYXJhbS0+dmFsdWUgPyAxIDogMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChwYXJhbS0+dmFsdWUpCisJCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCQkvKiBlbHNlIHNpbGVudGx5IGFjY2VwdCBkaXNhYmxlIG9mIFdQQSAqLworCQkJcHJpdi0+d3BhX2VuYWJsZWQgPSAwOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0X2F1dGgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgaXdfcGFyYW0gKnBhcmFtID0gJndycXUtPnBhcmFtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKKwkJcGFyYW0tPnZhbHVlID0gcHJpdi0+a2V5X21nbXQ7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTOgorCQlwYXJhbS0+dmFsdWUgPSBwcml2LT50a2lwX2NtX2FjdGl2ZTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCWlmIChwcml2LT53ZXBfcmVzdHJpY3QpCisJCQlwYXJhbS0+dmFsdWUgPSBJV19BVVRIX0FMR19TSEFSRURfS0VZOworCQllbHNlCisJCQlwYXJhbS0+dmFsdWUgPSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTTsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CisJCXBhcmFtLT52YWx1ZSA9IHByaXYtPndwYV9lbmFibGVkOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FT1BOT1RTVVBQOworCX0KKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdTggKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogY3V0IG9mZiBhdCBJRUVFODAyMTFfTUFYX0RBVEFfTEVOICovCisJaWYgKCh3cnF1LT5kYXRhLmxlbmd0aCA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU4pIHx8CisJICAgICh3cnF1LT5kYXRhLmxlbmd0aCAmJiAoZXh0cmEgPT0gTlVMTCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3cnF1LT5kYXRhLmxlbmd0aCkgeworCQlidWYgPSBrbWFsbG9jKHdycXUtPmRhdGEubGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGJ1ZiA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbWVtY3B5KGJ1ZiwgZXh0cmEsIHdycXUtPmRhdGEubGVuZ3RoKTsKKwl9IGVsc2UKKwkJYnVmID0gTlVMTDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKSB7CisJCWtmcmVlKGJ1Zik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJa2ZyZWUocHJpdi0+d3BhX2llKTsKKwlwcml2LT53cGFfaWUgPSBidWY7CisJcHJpdi0+d3BhX2llX2xlbiA9IHdycXUtPmRhdGEubGVuZ3RoOworCisJaWYgKHByaXYtPndwYV9pZSkgeworCQkvKiBMb29rcyBsaWtlIHdsX2xrbSB3YW50cyB0byBjaGVjayB0aGUgYXV0aCBhbGcsIGFuZAorCQkgKiBzb21laG93IHBhc3MgaXQgdG8gdGhlIGZpcm13YXJlLgorCQkgKiBJbnN0ZWFkIGl0IGp1c3QgY2FsbHMgdGhlIGtleSBtZ210IHJpZAorCQkgKiAgIC0gd2UgZG8gdGhpcyBpbiBzZXQgYXV0aC4KKwkJICovCisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgZXJyID0gMDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKChwcml2LT53cGFfaWVfbGVuID09IDApIHx8IChwcml2LT53cGFfaWUgPT0gTlVMTCkpIHsKKwkJd3JxdS0+ZGF0YS5sZW5ndGggPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPCBwcml2LT53cGFfaWVfbGVuKSB7CisJCWVyciA9IC1FMkJJRzsKKwkJZ290byBvdXQ7CisJfQorCisJd3JxdS0+ZGF0YS5sZW5ndGggPSBwcml2LT53cGFfaWVfbGVuOworCW1lbWNweShleHRyYSwgcHJpdi0+d3BhX2llLCBwcml2LT53cGFfaWVfbGVuKTsKKworb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3NldF9tbG1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaGVybWVzX3QgKmh3ID0gJnByaXYtPmh3OworCXN0cnVjdCBpd19tbG1lICptbG1lID0gKHN0cnVjdCBpd19tbG1lICopZXh0cmE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJc3dpdGNoIChtbG1lLT5jbWQpIHsKKwljYXNlIElXX01MTUVfREVBVVRIOgorCQkvKiBzaWxlbnRseSBpZ25vcmUgKi8KKwkJYnJlYWs7CisKKwljYXNlIElXX01MTUVfRElTQVNTT0M6CisJeworCQlzdHJ1Y3QgeworCQkJdTggYWRkcltFVEhfQUxFTl07CisJCQlfX2xlMTYgcmVhc29uX2NvZGU7CisJCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJ1ZjsKKworCQltZW1jcHkoYnVmLmFkZHIsIG1sbWUtPmFkZHIuc2FfZGF0YSwgRVRIX0FMRU4pOworCQlidWYucmVhc29uX2NvZGUgPSBjcHVfdG9fbGUxNihtbG1lLT5yZWFzb25fY29kZSk7CisJCXJldCA9IEhFUk1FU19XUklURV9SRUNPUkQoaHcsIFVTRVJfQkFQLAorCQkJCQkgIEhFUk1FU19SSURfQ05GRElTQVNTT0NJQVRFLAorCQkJCQkgICZidWYpOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cmV0cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICBzdHJ1Y3QgaXdfcGFyYW0gKnJycSwKKwkJCQkgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWhlcm1lc190ICpodyA9ICZwcml2LT5odzsKKwlpbnQgZXJyID0gMDsKKwl1MTYgc2hvcnRfbGltaXQsIGxvbmdfbGltaXQsIGxpZmV0aW1lOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX1NIT1JUUkVUUllMSU1JVCwKKwkJCQkgICZzaG9ydF9saW1pdCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBoZXJtZXNfcmVhZF93b3JkcmVjKGh3LCBVU0VSX0JBUCwgSEVSTUVTX1JJRF9MT05HUkVUUllMSU1JVCwKKwkJCQkgICZsb25nX2xpbWl0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCWVyciA9IGhlcm1lc19yZWFkX3dvcmRyZWMoaHcsIFVTRVJfQkFQLCBIRVJNRVNfUklEX01BWFRSQU5TTUlUTElGRVRJTUUsCisJCQkJICAmbGlmZXRpbWUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJcnJxLT5kaXNhYmxlZCA9IDA7CQkvKiBDYW4ndCBiZSBkaXNhYmxlZCAqLworCisJLyogTm90ZSA6IGJ5IGRlZmF1bHQsIGRpc3BsYXkgdGhlIHJldHJ5IG51bWJlciAqLworCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX1RZUEUpID09IElXX1JFVFJZX0xJRkVUSU1FKSB7CisJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSUZFVElNRTsKKwkJcnJxLT52YWx1ZSA9IGxpZmV0aW1lICogMTAwMDsJLyogPz8/ICovCisJfSBlbHNlIHsKKwkJLyogQnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgbWluIG51bWJlciAqLworCQlpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSkgeworCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTE9ORzsKKwkJCXJycS0+dmFsdWUgPSBsb25nX2xpbWl0OworCQl9IGVsc2UgeworCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUOworCQkJcnJxLT52YWx1ZSA9IHNob3J0X2xpbWl0OworCQkJaWYgKHNob3J0X2xpbWl0ICE9IGxvbmdfbGltaXQpCisJCQkJcnJxLT5mbGFncyB8PSBJV19SRVRSWV9TSE9SVDsKKwkJfQorCX0KKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgICB2b2lkICp3cnF1LAorCQkJICAgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKGluZm8tPmNtZCA9PSAoU0lPQ0lXRklSU1RQUklWICsgMHgxKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZvcmNpbmcgcmVzZXQhXG4iLCBkZXYtPm5hbWUpOworCisJCS8qIEZpcm13YXJlIHJlc2V0ICovCisJCW9yaW5vY29fcmVzZXQoJnByaXYtPnJlc2V0X3dvcmspOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogRm9yY2Ugc2NoZWR1bGluZyByZXNldCFcbiIsIGRldi0+bmFtZSk7CisKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRpYnNzcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICAgIHZvaWQgKndycXUsCisJCQkJICAgICBjaGFyICpleHRyYSkKKworeworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCB2YWwgPSAqKChpbnQgKikgZXh0cmEpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByaXYtPmlic3NfcG9ydCA9IHZhbCA7CisKKwkvKiBBY3R1YWxseSB1cGRhdGUgdGhlIG1vZGUgd2UgYXJlIHVzaW5nICovCisJc2V0X3BvcnRfdHlwZShwcml2KTsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KK30KKworc3RhdGljIGludCBvcmlub2NvX2lvY3RsX2dldGlic3Nwb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgICAgdm9pZCAqd3JxdSwKKwkJCQkgICAgIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCAqdmFsID0gKGludCAqKSBleHRyYTsKKworCSp2YWwgPSBwcml2LT5pYnNzX3BvcnQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRwb3J0MyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHZvaWQgKndycXUsCisJCQkJICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdmFsID0gKigoaW50ICopIGV4dHJhKTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMDogLyogVHJ5IHRvIGRvIElFRUUgYWQtaG9jIG1vZGUgKi8KKwkJaWYgKCFwcml2LT5oYXNfaWJzcykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXByaXYtPnByZWZlcl9wb3J0MyA9IDA7CisKKwkJYnJlYWs7CisKKwljYXNlIDE6IC8qIFRyeSB0byBkbyBMdWNlbnQgcHJvcHJpZXRhcnkgYWQtaG9jIG1vZGUgKi8KKwkJaWYgKCFwcml2LT5oYXNfcG9ydDMpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlwcml2LT5wcmVmZXJfcG9ydDMgPSAxOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJfQorCisJaWYgKCFlcnIpIHsKKwkJLyogQWN0dWFsbHkgdXBkYXRlIHRoZSBtb2RlIHdlIGFyZSB1c2luZyAqLworCQlzZXRfcG9ydF90eXBlKHByaXYpOworCQllcnIgPSAtRUlOUFJPR1JFU1M7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRwb3J0MyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgIHZvaWQgKndycXUsCisJCQkJICBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgKnZhbCA9IChpbnQgKikgZXh0cmE7CisKKwkqdmFsID0gcHJpdi0+cHJlZmVyX3BvcnQzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfc2V0cHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICB2b2lkICp3cnF1LAorCQkJCSAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdmFsOworCisJaWYgKCFwcml2LT5oYXNfcHJlYW1ibGUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCS8qIDgwMi4xMWIgaGFzIHJlY2VudGx5IGRlZmluZWQgc29tZSBzaG9ydCBwcmVhbWJsZS4KKwkgKiBCYXNpY2FsbHksIHRoZSBQaHkgaGVhZGVyIGhhcyBiZWVuIHJlZHVjZWQgaW4gc2l6ZS4KKwkgKiBUaGlzIGluY3JlYXNlIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGF0IGhpZ2ggcmF0ZXMKKwkgKiAodGhlIHByZWFtYmxlIGlzIHRyYW5zbWl0dGVkIGF0IDFNYi9zKSwgdW5mb3J0dW5hdGVseQorCSAqIHRoaXMgZ2l2ZSBjb21wYXRpYmlsaXR5IHRyb3VibGVzLi4uIC0gSmVhbiBJSSAqLworCXZhbCA9ICooKGludCAqKSBleHRyYSk7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICh2YWwpCisJCXByaXYtPnByZWFtYmxlID0gMTsKKwllbHNlCisJCXByaXYtPnByZWFtYmxlID0gMDsKKworCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisKKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworfQorCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfZ2V0cHJlYW1ibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJICAgICB2b2lkICp3cnF1LAorCQkJCSAgICAgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50ICp2YWwgPSAoaW50ICopIGV4dHJhOworCisJaWYgKCFwcml2LT5oYXNfcHJlYW1ibGUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCSp2YWwgPSBwcml2LT5wcmVhbWJsZTsKKwlyZXR1cm4gMDsKK30KKworLyogaW9jdGwgaW50ZXJmYWNlIHRvIGhlcm1lc19yZWFkX2x0digpCisgKiBUbyB1c2Ugd2l0aCBpd3ByaXYsIHBhc3MgdGhlIFJJRCBhcyB0aGUgdG9rZW4gYXJndW1lbnQsIGUuZy4KKyAqIGl3cHJpdiBnZXRfcmlkIFsweGZjMDBdCisgKiBBdCBsZWFzdCBXaXJlbGVzcyBUb29scyAyNSBpcyByZXF1aXJlZCB0byB1c2UgaXdwcml2LgorICogRm9yIFdpcmVsZXNzIFRvb2xzIDI1IGFuZCAyNiBhcHBlbmQgImR1bW15IiBhcmUgdGhlIGVuZC4gKi8KK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRyaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBpd19wb2ludCAqZGF0YSwKKwkJCQljaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJaW50IHJpZCA9IGRhdGEtPmZsYWdzOworCXUxNiBsZW5ndGg7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogSXQncyBhICJnZXQiIGZ1bmN0aW9uLCBidXQgd2UgZG9uJ3Qgd2FudCB1c2VycyB0byBhY2Nlc3MgdGhlCisJICogV0VQIGtleSBhbmQgb3RoZXIgcmF3IGZpcm13YXJlIGRhdGEgKi8KKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAocmlkIDwgMHhmYzAwIHx8IHJpZCA+IDB4ZmZmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob3Jpbm9jb19sb2NrKHByaXYsICZmbGFncykgIT0gMCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWVyciA9IGhlcm1lc19yZWFkX2x0dihodywgVVNFUl9CQVAsIHJpZCwgTUFYX1JJRF9MRU4sICZsZW5ndGgsCisJCQkgICAgICBleHRyYSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlkYXRhLT5sZW5ndGggPSBtaW5fdCh1MTYsIEhFUk1FU19SRUNMRU5fVE9fQllURVMobGVuZ3RoKSwKKwkJCSAgICAgTUFYX1JJRF9MRU4pOworCisgb3V0OgorCW9yaW5vY29fdW5sb2NrKHByaXYsICZmbGFncyk7CisJcmV0dXJuIGVycjsKK30KKworLyogVHJpZ2dlciBhIHNjYW4gKGxvb2sgZm9yIG90aGVyIGNlbGxzIGluIHRoZSB2aWNpbml0eSkgKi8KK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9zZXRzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wb2ludCAqc3JxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CisJc3RydWN0IGl3X3NjYW5fcmVxICpzaSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKikgZXh0cmE7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIE5vdGUgOiB5b3UgbWF5IGhhdmUgcmVhbGlzZWQgdGhhdCwgYXMgdGhpcyBpcyBhIFNFVCBvcGVyYXRpb24sCisJICogdGhpcyBpcyBwcml2aWxlZ2VkIGFuZCB0aGVyZWZvcmUgYSBub3JtYWwgdXNlciBjYW4ndAorCSAqIHBlcmZvcm0gc2Nhbm5pbmcuCisJICogVGhpcyBpcyBub3QgYW4gZXJyb3IsIHdoaWxlIHRoZSBkZXZpY2UgcGVyZm9ybSBzY2FubmluZywKKwkgKiB0cmFmZmljIGRvZXNuJ3QgZmxvdywgc28gaXQncyBhIHBlcmZlY3QgRG9TLi4uCisJICogSmVhbiBJSSAqLworCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBTY2FubmluZyB3aXRoIHBvcnQgMCBkaXNhYmxlZCB3b3VsZCBmYWlsICovCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZXJyID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBJbiBtb25pdG9yIG1vZGUsIHRoZSBzY2FuIHJlc3VsdHMgYXJlIGFsd2F5cyBlbXB0eS4KKwkgKiBQcm9iZSByZXNwb25zZXMgYXJlIHBhc3NlZCB0byB0aGUgZHJpdmVyIGFzIHJlY2VpdmVkCisJICogZnJhbWVzIGFuZCBjb3VsZCBiZSBwcm9jZXNzZWQgaW4gc29mdHdhcmUuICovCisJaWYgKHByaXYtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBOb3RlIDogYmVjYXVzZSB3ZSBkb24ndCBsb2NrIG91dCB0aGUgaXJxIGhhbmRsZXIsIHRoZSB3YXkKKwkgKiB3ZSBhY2Nlc3Mgc2NhbiB2YXJpYWJsZXMgaW4gcHJpdiBpcyBjcml0aWNhbC4KKwkgKglvIHNjYW5faW5wcm9ncmVzcyA6IG5vdCB0b3VjaGVkIGJ5IGlycSBoYW5kbGVyCisJICoJbyBzY2FuX21vZGUgOiBub3QgdG91Y2hlZCBieSBpcnEgaGFuZGxlcgorCSAqIEJlZm9yZSBtb2RpZnlpbmcgYW55dGhpbmcgb24gdGhvc2UgdmFyaWFibGVzLCBwbGVhc2UgdGhpbmsgaGFyZCAhCisJICogSmVhbiBJSSAqLworCisJLyogU2F2ZSBmbGFncyAqLworCXByaXYtPnNjYW5fbW9kZSA9IHNycS0+ZmxhZ3M7CisKKwkvKiBBbHdheXMgdHJpZ2dlciBzY2FubmluZywgZXZlbiBpZiBpdCdzIGluIHByb2dyZXNzLgorCSAqIFRoaXMgd2F5LCBpZiB0aGUgaW5mbyBmcmFtZSBnZXQgbG9zdCwgd2Ugd2lsbCByZWNvdmVyIHNvbWV3aGF0CisJICogZ3JhY2VmdWxseSAgLSBKZWFuIElJICovCisKKwlpZiAocHJpdi0+aGFzX2hvc3RzY2FuKSB7CisJCXN3aXRjaCAocHJpdi0+ZmlybXdhcmVfdHlwZSkgeworCQljYXNlIEZJUk1XQVJFX1RZUEVfU1lNQk9MOgorCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkJSEVSTUVTX1JJRF9DTkZIT1NUU0NBTl9TWU1CT0wsCisJCQkJCQlIRVJNRVNfSE9TVFNDQU5fU1lNQk9MX09OQ0UgfAorCQkJCQkJSEVSTUVTX0hPU1RTQ0FOX1NZTUJPTF9CQ0FTVCk7CisJCQlicmVhazsKKwkJY2FzZSBGSVJNV0FSRV9UWVBFX0lOVEVSU0lMOiB7CisJCQlfX2xlMTYgcmVxWzNdOworCisJCQlyZXFbMF0gPSBjcHVfdG9fbGUxNigweDNmZmYpOwkvKiBBbGwgY2hhbm5lbHMgKi8KKwkJCXJlcVsxXSA9IGNwdV90b19sZTE2KDB4MDAwMSk7CS8qIHJhdGUgMSBNYnBzICovCisJCQlyZXFbMl0gPSAwOwkJCS8qIEFueSBFU1NJRCAqLworCQkJZXJyID0gSEVSTUVTX1dSSVRFX1JFQ09SRChodywgVVNFUl9CQVAsCisJCQkJCQkgIEhFUk1FU19SSURfQ05GSE9TVFNDQU4sICZyZXEpOworCQl9CisJCWJyZWFrOworCQljYXNlIEZJUk1XQVJFX1RZUEVfQUdFUkU6CisJCQlpZiAocHJpdi0+c2Nhbl9tb2RlICYgSVdfU0NBTl9USElTX0VTU0lEKSB7CisJCQkJc3RydWN0IGhlcm1lc19pZHN0cmluZyBpZGJ1ZjsKKwkJCQlzaXplX3QgbGVuID0gbWluKHNpemVvZihpZGJ1Zi52YWwpLAorCQkJCQkJIChzaXplX3QpIHNpLT5lc3NpZF9sZW4pOworCQkJCWlkYnVmLmxlbiA9IGNwdV90b19sZTE2KGxlbik7CisJCQkJbWVtY3B5KGlkYnVmLnZhbCwgc2ktPmVzc2lkLCBsZW4pOworCisJCQkJZXJyID0gaGVybWVzX3dyaXRlX2x0dihodywgVVNFUl9CQVAsCisJCQkJCSAgICAgICBIRVJNRVNfUklEX0NORlNDQU5TU0lEX0FHRVJFLAorCQkJCQkgICAgICAgSEVSTUVTX0JZVEVTX1RPX1JFQ0xFTihsZW4gKyAyKSwKKwkJCQkJICAgICAgICZpZGJ1Zik7CisJCQl9IGVsc2UKKwkJCQllcnIgPSBoZXJtZXNfd3JpdGVfd29yZHJlYyhodywgVVNFUl9CQVAsCisJCQkJCQkgICBIRVJNRVNfUklEX0NORlNDQU5TU0lEX0FHRVJFLAorCQkJCQkJICAgMCk7CS8qIEFueSBFU1NJRCAqLworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKworCQkJaWYgKHByaXYtPmhhc19leHRfc2NhbikgeworCQkJCS8qIENsZWFyIHNjYW4gcmVzdWx0cyBhdCB0aGUgc3RhcnQgb2YKKwkJCQkgKiBhbiBleHRlbmRlZCBzY2FuICovCisJCQkJb3Jpbm9jb19jbGVhcl9zY2FuX3Jlc3VsdHMocHJpdiwKKwkJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTUwMDApKTsKKworCQkJCS8qIFRPRE86IElzIHRoaXMgYXZhaWxhYmxlIG9uIG9sZGVyIGZpcm13YXJlPworCQkJCSAqICAgQ2FuIHdlIHVzZSBpdCB0byBzY2FuIHNwZWNpZmljIGNoYW5uZWxzCisJCQkJICogICBmb3IgSVdfU0NBTl9USElTX0ZSRVE/ICovCisJCQkJZXJyID0gaGVybWVzX3dyaXRlX3dvcmRyZWMoaHcsIFVTRVJfQkFQLAorCQkJCQkJSEVSTUVTX1JJRF9DTkZTQ0FOQ0hBTk5FTFMyR0haLAorCQkJCQkJMHg3RkZGKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlnb3RvIG91dDsKKworCQkJCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LAorCQkJCQkJICAgICBIRVJNRVNfSU5RX0NIQU5ORUxJTkZPKTsKKwkJCX0gZWxzZQorCQkJCWVyciA9IGhlcm1lc19pbnF1aXJlKGh3LCBIRVJNRVNfSU5RX1NDQU4pOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UKKwkJZXJyID0gaGVybWVzX2lucXVpcmUoaHcsIEhFUk1FU19JTlFfU0NBTik7CisKKwkvKiBPbmUgbW9yZSBjbGllbnQgKi8KKwlpZiAoIWVycikKKwkJcHJpdi0+c2Nhbl9pbnByb2dyZXNzID0gMTsKKworIG91dDoKKwlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOworCXJldHVybiBlcnI7Cit9CisKKyNkZWZpbmUgTUFYX0NVU1RPTV9MRU4gNjQKKworLyogVHJhbnNsYXRlIHNjYW4gZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBjYXJkIHRvIGEgY2FyZCBpbmRlcGVuZGFudAorICogZm9ybWF0IHRoYXQgdGhlIFdpcmVsZXNzIFRvb2xzIHdpbGwgdW5kZXJzdGFuZCAtIEplYW4gSUkgKi8KK3N0YXRpYyBpbmxpbmUgY2hhciAqb3Jpbm9jb190cmFuc2xhdGVfc2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCQkgICBjaGFyICpjdXJyZW50X2V2LAorCQkJCQkgICBjaGFyICplbmRfYnVmLAorCQkJCQkgICB1bmlvbiBoZXJtZXNfc2Nhbl9pbmZvICpic3MsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXUxNgkJCWNhcGFiaWxpdGllczsKKwl1MTYJCQljaGFubmVsOworCXN0cnVjdCBpd19ldmVudAkJaXdlOwkJLyogVGVtcG9yYXJ5IGJ1ZmZlciAqLworCWNoYXIgY3VzdG9tW01BWF9DVVNUT01fTEVOXTsKKworCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisKKwkvKiBGaXJzdCBlbnRyeSAqTVVTVCogYmUgdGhlIEFQIE1BQyBhZGRyZXNzICovCisJaXdlLmNtZCA9IFNJT0NHSVdBUDsKKwlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPmEuYnNzaWQsIEVUSF9BTEVOKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBJV19FVl9BRERSX0xFTik7CisKKwkvKiBPdGhlciBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KKworCS8qIEFkZCB0aGUgRVNTSUQgKi8KKwlpd2UudS5kYXRhLmxlbmd0aCA9IGxlMTZfdG9fY3B1KGJzcy0+YS5lc3NpZF9sZW4pOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCA+IDMyKQorCQlpd2UudS5kYXRhLmxlbmd0aCA9IDMyOworCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJaXdlLnUuZGF0YS5mbGFncyA9IDE7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgYnNzLT5hLmVzc2lkKTsKKworCS8qIEFkZCBtb2RlICovCisJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOworCWNhcGFiaWxpdGllcyA9IGxlMTZfdG9fY3B1KGJzcy0+YS5jYXBhYmlsaXRpZXMpOworCWlmIChjYXBhYmlsaXRpZXMgJiAoV0xBTl9DQVBBQklMSVRZX0VTUyB8IFdMQU5fQ0FQQUJJTElUWV9JQlNTKSkgeworCQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX0VTUykKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJZWxzZQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJfQorCisJY2hhbm5lbCA9IGJzcy0+cy5jaGFubmVsOworCWlmICgoY2hhbm5lbCA+PSAxKSAmJiAoY2hhbm5lbCA8PSBOVU1fQ0hBTk5FTFMpKSB7CisJCS8qIEFkZCBjaGFubmVsIGFuZCBmcmVxdWVuY3kgKi8KKwkJaXdlLmNtZCA9IFNJT0NHSVdGUkVROworCQlpd2UudS5mcmVxLm0gPSBjaGFubmVsOworCQlpd2UudS5mcmVxLmUgPSAwOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfRlJFUV9MRU4pOworCisJCWl3ZS51LmZyZXEubSA9IGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFubmVsKSAqIDEwMDAwMDsKKwkJaXdlLnUuZnJlcS5lID0gMTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKwl9CisKKwkvKiBBZGQgcXVhbGl0eSBzdGF0aXN0aWNzLiBsZXZlbCBhbmQgbm9pc2UgaW4gZEIuIE5vIGxpbmsgcXVhbGl0eSAqLworCWl3ZS5jbWQgPSBJV0VWUVVBTDsKKwlpd2UudS5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0RCTSB8IElXX1FVQUxfUVVBTF9JTlZBTElEOworCWl3ZS51LnF1YWwubGV2ZWwgPSAoX191OCkgbGUxNl90b19jcHUoYnNzLT5hLmxldmVsKSAtIDB4OTU7CisJaXdlLnUucXVhbC5ub2lzZSA9IChfX3U4KSBsZTE2X3RvX2NwdShic3MtPmEubm9pc2UpIC0gMHg5NTsKKwkvKiBXaXJlbGVzcyB0b29scyBwcmlvciB0byAyNy5wcmUyMiB3aWxsIHNob3cgbGluayBxdWFsaXR5CisJICogYW55d2F5LCBzbyB3ZSBwcm92aWRlIGEgcmVhc29uYWJsZSB2YWx1ZS4gKi8KKwlpZiAoaXdlLnUucXVhbC5sZXZlbCA+IGl3ZS51LnF1YWwubm9pc2UpCisJCWl3ZS51LnF1YWwucXVhbCA9IGl3ZS51LnF1YWwubGV2ZWwgLSBpd2UudS5xdWFsLm5vaXNlOworCWVsc2UKKwkJaXdlLnUucXVhbC5xdWFsID0gMDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBJV19FVl9RVUFMX0xFTik7CisKKwkvKiBBZGQgZW5jcnlwdGlvbiBjYXBhYmlsaXR5ICovCisJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7CisJaWYgKGNhcGFiaWxpdGllcyAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0VOQUJMRUQgfCBJV19FTkNPREVfTk9LRVk7CisJZWxzZQorCQlpd2UudS5kYXRhLmZsYWdzID0gSVdfRU5DT0RFX0RJU0FCTEVEOworCWl3ZS51LmRhdGEubGVuZ3RoID0gMDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBOVUxMKTsKKworCS8qIEJpdCByYXRlIGlzIG5vdCBhdmFpbGFibGUgaW4gTHVjZW50L0FnZXJlIGZpcm13YXJlcyAqLworCWlmIChwcml2LT5maXJtd2FyZV90eXBlICE9IEZJUk1XQVJFX1RZUEVfQUdFUkUpIHsKKwkJY2hhciAqY3VycmVudF92YWwgPSBjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOworCQlpbnQgaTsKKwkJaW50IHN0ZXA7CisKKwkJaWYgKHByaXYtPmZpcm13YXJlX3R5cGUgPT0gRklSTVdBUkVfVFlQRV9TWU1CT0wpCisJCQlzdGVwID0gMjsKKwkJZWxzZQorCQkJc3RlcCA9IDE7CisKKwkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOworCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KKwkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOworCQkvKiBNYXggMTAgdmFsdWVzICovCisJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSArPSBzdGVwKSB7CisJCQkvKiBOVUxMIHRlcm1pbmF0ZWQgKi8KKwkJCWlmIChic3MtPnAucmF0ZXNbaV0gPT0gMHgwKQorCQkJCWJyZWFrOworCQkJLyogQml0IHJhdGUgZ2l2ZW4gaW4gNTAwIGtiL3MgdW5pdHMgKCsgMHg4MCkgKi8KKwkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPQorCQkJCSgoYnNzLT5wLnJhdGVzW2ldICYgMHg3ZikgKiA1MDAwMDApOworCQkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgIGN1cnJlbnRfdmFsLAorCQkJCQkJCSAgIGVuZF9idWYsICZpd2UsCisJCQkJCQkJICAgSVdfRVZfUEFSQU1fTEVOKTsKKwkJfQorCQkvKiBDaGVjayBpZiB3ZSBhZGRlZCBhbnkgZXZlbnQgKi8KKwkJaWYgKChjdXJyZW50X3ZhbCAtIGN1cnJlbnRfZXYpID4gaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pKQorCQkJY3VycmVudF9ldiA9IGN1cnJlbnRfdmFsOworCX0KKworCS8qIEJlYWNvbiBpbnRlcnZhbCAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKKwkJCQkgICAgICJiY25faW50PSVkIiwKKwkJCQkgICAgIGxlMTZfdG9fY3B1KGJzcy0+YS5iZWFjb25faW50ZXJ2KSk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCS8qIENhcGFiaWxpdGVzICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAorCQkJCSAgICAgImNhcGFiPTB4JTA0eCIsCisJCQkJICAgICBjYXBhYmlsaXRpZXMpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwkvKiBBZGQgRVhUUkE6IEFnZSB0byBkaXNwbGF5IHNlY29uZHMgc2luY2UgbGFzdCBiZWFjb24vcHJvYmUgcmVzcG9uc2UKKwkgKiBmb3IgZ2l2ZW4gbmV0d29yay4gKi8KKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCisJCQkJICAgICAiIExhc3QgYmVhY29uOiAlZG1zIGFnbyIsCisJCQkJICAgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBsYXN0X3NjYW5uZWQpKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBjdXN0b20pOworCisJcmV0dXJuIGN1cnJlbnRfZXY7Cit9CisKK3N0YXRpYyBpbmxpbmUgY2hhciAqb3Jpbm9jb190cmFuc2xhdGVfZXh0X3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJCSAgICAgICBjaGFyICpjdXJyZW50X2V2LAorCQkJCQkgICAgICAgY2hhciAqZW5kX2J1ZiwKKwkJCQkJICAgICAgIHN0cnVjdCBhZ2VyZV9leHRfc2Nhbl9pbmZvICpic3MsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbm5lZCkKK3sKKwl1MTYJCQljYXBhYmlsaXRpZXM7CisJdTE2CQkJY2hhbm5lbDsKKwlzdHJ1Y3QgaXdfZXZlbnQJCWl3ZTsJCS8qIFRlbXBvcmFyeSBidWZmZXIgKi8KKwljaGFyIGN1c3RvbVtNQVhfQ1VTVE9NX0xFTl07CisJdTggKmllOworCisJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKKworCS8qIEZpcnN0IGVudHJ5ICpNVVNUKiBiZSB0aGUgQVAgTUFDIGFkZHJlc3MgKi8KKwlpd2UuY21kID0gU0lPQ0dJV0FQOworCWl3ZS51LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJICAmaXdlLCBJV19FVl9BRERSX0xFTik7CisKKwkvKiBPdGhlciBlbnRyaWVzIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBvcmRlciB3ZSBnaXZlIHRoZW0gKi8KKworCS8qIEFkZCB0aGUgRVNTSUQgKi8KKwlpZSA9IGJzcy0+ZGF0YTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IGllWzFdOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkgeworCQlpZiAoaXdlLnUuZGF0YS5sZW5ndGggPiAzMikKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gMzI7CisJCWl3ZS5jbWQgPSBTSU9DR0lXRVNTSUQ7CisJCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgJmllWzJdKTsKKwl9CisKKwkvKiBBZGQgbW9kZSAqLworCWNhcGFiaWxpdGllcyA9IGxlMTZfdG9fY3B1KGJzcy0+Y2FwYWJpbGl0aWVzKTsKKwlpZiAoY2FwYWJpbGl0aWVzICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykpIHsKKwkJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOworCQlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX0VTUykKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01BU1RFUjsKKwkJZWxzZQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfQURIT0M7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9VSU5UX0xFTik7CisJfQorCisJaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9EU19QQVJBTVMpOworCWNoYW5uZWwgPSBpZSA/IGllWzJdIDogMDsKKwlpZiAoKGNoYW5uZWwgPj0gMSkgJiYgKGNoYW5uZWwgPD0gTlVNX0NIQU5ORUxTKSkgeworCQkvKiBBZGQgY2hhbm5lbCBhbmQgZnJlcXVlbmN5ICovCisJCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwkJaXdlLnUuZnJlcS5tID0gY2hhbm5lbDsKKwkJaXdlLnUuZnJlcS5lID0gMDsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX0ZSRVFfTEVOKTsKKworCQlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoY2hhbm5lbCkgKiAxMDAwMDA7CisJCWl3ZS51LmZyZXEuZSA9IDE7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBJV19FVl9GUkVRX0xFTik7CisJfQorCisJLyogQWRkIHF1YWxpdHkgc3RhdGlzdGljcy4gbGV2ZWwgYW5kIG5vaXNlIGluIGRCLiBObyBsaW5rIHF1YWxpdHkgKi8KKwlpd2UuY21kID0gSVdFVlFVQUw7CisJaXdlLnUucXVhbC51cGRhdGVkID0gSVdfUVVBTF9EQk0gfCBJV19RVUFMX1FVQUxfSU5WQUxJRDsKKwlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5sZXZlbCAtIDB4OTU7CisJaXdlLnUucXVhbC5ub2lzZSA9IGJzcy0+bm9pc2UgLSAweDk1OworCS8qIFdpcmVsZXNzIHRvb2xzIHByaW9yIHRvIDI3LnByZTIyIHdpbGwgc2hvdyBsaW5rIHF1YWxpdHkKKwkgKiBhbnl3YXksIHNvIHdlIHByb3ZpZGUgYSByZWFzb25hYmxlIHZhbHVlLiAqLworCWlmIChpd2UudS5xdWFsLmxldmVsID4gaXdlLnUucXVhbC5ub2lzZSkKKwkJaXdlLnUucXVhbC5xdWFsID0gaXdlLnUucXVhbC5sZXZlbCAtIGl3ZS51LnF1YWwubm9pc2U7CisJZWxzZQorCQlpd2UudS5xdWFsLnF1YWwgPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIElXX0VWX1FVQUxfTEVOKTsKKworCS8qIEFkZCBlbmNyeXB0aW9uIGNhcGFiaWxpdHkgKi8KKwlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKKwlpZiAoY2FwYWJpbGl0aWVzICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKKwllbHNlCisJCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7CisJaXdlLnUuZGF0YS5sZW5ndGggPSAwOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkgICZpd2UsIE5VTEwpOworCisJLyogV1BBIElFICovCisJaWUgPSBvcmlub2NvX2dldF93cGFfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSk7CisJaWYgKGllKSB7CisJCWl3ZS5jbWQgPSBJV0VWR0VOSUU7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV0gKyAyOworCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgaWUpOworCX0KKworCS8qIFJTTiBJRSAqLworCWllID0gb3Jpbm9jb19nZXRfaWUoYnNzLT5kYXRhLCBzaXplb2YoYnNzLT5kYXRhKSwgV0xBTl9FSURfUlNOKTsKKwlpZiAoaWUpIHsKKwkJaXdlLmNtZCA9IElXRVZHRU5JRTsKKwkJaXdlLnUuZGF0YS5sZW5ndGggPSBpZVsxXSArIDI7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBpZSk7CisJfQorCisJaWUgPSBvcmlub2NvX2dldF9pZShic3MtPmRhdGEsIHNpemVvZihic3MtPmRhdGEpLCBXTEFOX0VJRF9TVVBQX1JBVEVTKTsKKwlpZiAoaWUpIHsKKwkJY2hhciAqcCA9IGN1cnJlbnRfZXYgKyBpd2Vfc3RyZWFtX2xjcF9sZW4oaW5mbyk7CisJCWludCBpOworCisJCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKKwkJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCisJCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKKworCQlmb3IgKGkgPSAyOyBpIDwgKGllWzFdICsgMik7IGkrKykgeworCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9ICgoaWVbaV0gJiAweDdGKSAqIDUwMDAwMCk7CisJCQlwID0gaXdlX3N0cmVhbV9hZGRfdmFsdWUoaW5mbywgY3VycmVudF9ldiwgcCwgZW5kX2J1ZiwKKwkJCQkJCSAmaXdlLCBJV19FVl9QQVJBTV9MRU4pOworCQl9CisJCS8qIENoZWNrIGlmIHdlIGFkZGVkIGFueSBldmVudCAqLworCQlpZiAocCA+IChjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pKSkKKwkJCWN1cnJlbnRfZXYgPSBwOworCX0KKworCS8qIFRpbWVzdGFtcCAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0KKwkJc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwgInRzZj0lMDE2bGx4IiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBsZTY0X3RvX2NwdShic3MtPnRpbWVzdGFtcCkpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwkvKiBCZWFjb24gaW50ZXJ2YWwgKi8KKwlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IHNucHJpbnRmKGN1c3RvbSwgTUFYX0NVU1RPTV9MRU4sCisJCQkJICAgICAiYmNuX2ludD0lZCIsCisJCQkJICAgICBsZTE2X3RvX2NwdShic3MtPmJlYWNvbl9pbnRlcnZhbCkpOworCWlmIChpd2UudS5kYXRhLmxlbmd0aCkKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIGN1c3RvbSk7CisKKwkvKiBDYXBhYmlsaXRlcyAqLworCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCWl3ZS51LmRhdGEubGVuZ3RoID0gc25wcmludGYoY3VzdG9tLCBNQVhfQ1VTVE9NX0xFTiwKKwkJCQkgICAgICJjYXBhYj0weCUwNHgiLAorCQkJCSAgICAgY2FwYWJpbGl0aWVzKTsKKwlpZiAoaXdlLnUuZGF0YS5sZW5ndGgpCisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBjdXN0b20pOworCisJLyogQWRkIEVYVFJBOiBBZ2UgdG8gZGlzcGxheSBzZWNvbmRzIHNpbmNlIGxhc3QgYmVhY29uL3Byb2JlIHJlc3BvbnNlCisJICogZm9yIGdpdmVuIG5ldHdvcmsuICovCisJaXdlLmNtZCA9IElXRVZDVVNUT007CisJaXdlLnUuZGF0YS5sZW5ndGggPSBzbnByaW50ZihjdXN0b20sIE1BWF9DVVNUT01fTEVOLAorCQkJCSAgICAgIiBMYXN0IGJlYWNvbjogJWRtcyBhZ28iLAorCQkJCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbGFzdF9zY2FubmVkKSk7CisJaWYgKGl3ZS51LmRhdGEubGVuZ3RoKQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgY3VzdG9tKTsKKworCXJldHVybiBjdXJyZW50X2V2OworfQorCisvKiBSZXR1cm4gcmVzdWx0cyBvZiBhIHNjYW4gKi8KK3N0YXRpYyBpbnQgb3Jpbm9jb19pb2N0bF9nZXRzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHN0cnVjdCBpd19wb2ludCAqc3JxLAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKmN1cnJlbnRfZXYgPSBleHRyYTsKKworCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKHByaXYtPnNjYW5faW5wcm9ncmVzcykgeworCQkvKiBJbXBvcnRhbnQgbm90ZSA6IHdlIGRvbid0IHdhbnQgdG8gYmxvY2sgdGhlIGNhbGxlcgorCQkgKiB1bnRpbCByZXN1bHRzIGFyZSByZWFkeSBmb3IgdmFyaW91cyByZWFzb25zLgorCQkgKiBGaXJzdCwgbWFuYWdpbmcgd2FpdCBxdWV1ZXMgaXMgY29tcGxleCBhbmQgcmFjeS4KKwkJICogU2Vjb25kLCB3ZSBncmFiIHNvbWUgcnRuZXRsaW5rIGxvY2sgYmVmb3JlIGNvbW1pbmcKKwkJICogaGVyZSAoaW4gZGV2X2lvY3RsKCkpLgorCQkgKiBUaGlyZCwgd2UgZ2VuZXJhdGUgYW4gV2lyZWxlc3MgRXZlbnQsIHNvIHRoZQorCQkgKiBjYWxsZXIgY2FuIHdhaXQgaXRzZWxmIG9uIHRoYXQgLSBKZWFuIElJICovCisJCWVyciA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwcml2LT5oYXNfZXh0X3NjYW4pIHsKKwkJc3RydWN0IHhic3NfZWxlbWVudCAqYnNzOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmcHJpdi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJCS8qIFRyYW5zbGF0ZSB0aGlzIGVudHJ5IHRvIFdFIGZvcm1hdCAqLworCQkJY3VycmVudF9ldiA9CisJCQkJb3Jpbm9jb190cmFuc2xhdGVfZXh0X3NjYW4oZGV2LCBpbmZvLAorCQkJCQkJCSAgIGN1cnJlbnRfZXYsCisJCQkJCQkJICAgZXh0cmEgKyBzcnEtPmxlbmd0aCwKKwkJCQkJCQkgICAmYnNzLT5ic3MsCisJCQkJCQkJICAgYnNzLT5sYXN0X3NjYW5uZWQpOworCisJCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igb25lIG1vcmUgZW50cnkgKi8KKwkJCWlmICgoZXh0cmEgKyBzcnEtPmxlbmd0aCAtIGN1cnJlbnRfZXYpCisJCQkgICAgPD0gSVdfRVZfQUREUl9MRU4pIHsKKwkJCQkvKiBBc2sgdXNlciBzcGFjZSB0byB0cnkgYWdhaW4gd2l0aCBhCisJCQkJICogYmlnZ2VyIGJ1ZmZlciAqLworCQkJCWVyciA9IC1FMkJJRzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJfSBlbHNlIHsKKwkJc3RydWN0IGJzc19lbGVtZW50ICpic3M7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZwcml2LT5ic3NfbGlzdCwgbGlzdCkgeworCQkJLyogVHJhbnNsYXRlIHRoaXMgZW50cnkgdG8gV0UgZm9ybWF0ICovCisJCQljdXJyZW50X2V2ID0gb3Jpbm9jb190cmFuc2xhdGVfc2NhbihkZXYsIGluZm8sCisJCQkJCQkJICAgIGN1cnJlbnRfZXYsCisJCQkJCQkJICAgIGV4dHJhICsgc3JxLT5sZW5ndGgsCisJCQkJCQkJICAgICZic3MtPmJzcywKKwkJCQkJCQkgICAgYnNzLT5sYXN0X3NjYW5uZWQpOworCisJCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBmb3Igb25lIG1vcmUgZW50cnkgKi8KKwkJCWlmICgoZXh0cmEgKyBzcnEtPmxlbmd0aCAtIGN1cnJlbnRfZXYpCisJCQkgICAgPD0gSVdfRVZfQUREUl9MRU4pIHsKKwkJCQkvKiBBc2sgdXNlciBzcGFjZSB0byB0cnkgYWdhaW4gd2l0aCBhCisJCQkJICogYmlnZ2VyIGJ1ZmZlciAqLworCQkJCWVyciA9IC1FMkJJRzsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCX0KKworCXNycS0+bGVuZ3RoID0gKGN1cnJlbnRfZXYgLSBleHRyYSk7CisJc3JxLT5mbGFncyA9IChfX3UxNikgcHJpdi0+c2Nhbl9tb2RlOworCitvdXQ6CisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBDb21taXQgaGFuZGxlciwgY2FsbGVkIGFmdGVyIHNldCBvcGVyYXRpb25zICovCitzdGF0aWMgaW50IG9yaW5vY29faW9jdGxfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQl2b2lkICp3cnF1LAorCQkJCWNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoZXJtZXMgKmh3ID0gJnByaXYtPmh3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IDA7CisKKwlpZiAoIXByaXYtPm9wZW4pCisJCXJldHVybiAwOworCisJaWYgKHByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCkgeworCQlvcmlub2NvX3Jlc2V0KCZwcml2LT5yZXNldF93b3JrKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKG9yaW5vY29fbG9jayhwcml2LCAmZmxhZ3MpICE9IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBoZXJtZXNfZGlzYWJsZV9wb3J0KGh3LCAwKTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gZGlzYWJsZSBwb3J0ICIKKwkJICAgICAgICJ3aGlsZSByZWNvbmZpZ3VyaW5nIGNhcmRcbiIsIGRldi0+bmFtZSk7CisJCXByaXYtPmJyb2tlbl9kaXNhYmxlcG9ydCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IF9fb3Jpbm9jb19wcm9ncmFtX3JpZHMoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmFibGUgdG8gcmVjb25maWd1cmUgY2FyZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGhlcm1lc19lbmFibGVfcG9ydChodywgMCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVW5hYmxlIHRvIGVuYWJsZSBwb3J0IHdoaWxlIHJlY29uZmlndXJpbmcgY2FyZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworIG91dDoKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBSZXNldHRpbmcgaW5zdGVhZC4uLlxuIiwgZGV2LT5uYW1lKTsKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+cmVzZXRfd29yayk7CisJCWVyciA9IDA7CisJfQorCisJb3Jpbm9jb191bmxvY2socHJpdiwgJmZsYWdzKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyBvcmlub2NvX3ByaXZ0YWJbXSA9IHsKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MCwgMCwgMCwgImZvcmNlX3Jlc2V0IiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHgxLCAwLCAwLCAiY2FyZF9yZXNldCIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4MiwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAwLCAic2V0X3BvcnQzIiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHgzLCAwLCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgICJnZXRfcG9ydDMiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDQsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgMCwgInNldF9wcmVhbWJsZSIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4NSwgMCwgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICAiZ2V0X3ByZWFtYmxlIiB9LAorCXsgU0lPQ0lXRklSU1RQUklWICsgMHg2LCBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwKKwkgIDAsICJzZXRfaWJzc3BvcnQiIH0sCisJeyBTSU9DSVdGSVJTVFBSSVYgKyAweDcsIDAsIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAgImdldF9pYnNzcG9ydCIgfSwKKwl7IFNJT0NJV0ZJUlNUUFJJViArIDB4OSwgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBNQVhfUklEX0xFTiwKKwkgICJnZXRfcmlkIiB9LAorfTsKKworCisvKgorICogU3RydWN0dXJlcyB0byBleHBvcnQgdGhlIFdpcmVsZXNzIEhhbmRsZXJzCisgKi8KKworI2RlZmluZSBTVERfSVdfSEFORExFUihpZCwgZnVuYykgXAorCVtJV19JT0NUTF9JRFgoaWQpXSA9IChpd19oYW5kbGVyKSBmdW5jCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlcglvcmlub2NvX2hhbmRsZXJbXSA9IHsKKwlTVERfSVdfSEFORExFUihTSU9DU0lXQ09NTUlULAlvcmlub2NvX2lvY3RsX2NvbW1pdCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV05BTUUsCW9yaW5vY29faW9jdGxfZ2V0bmFtZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0ZSRVEsCW9yaW5vY29faW9jdGxfc2V0ZnJlcSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0ZSRVEsCW9yaW5vY29faW9jdGxfZ2V0ZnJlcSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV01PREUsCW9yaW5vY29faW9jdGxfc2V0bW9kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV01PREUsCW9yaW5vY29faW9jdGxfZ2V0bW9kZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NFTlMsCW9yaW5vY29faW9jdGxfc2V0c2VucyksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NFTlMsCW9yaW5vY29faW9jdGxfZ2V0c2VucyksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBTkdFLAlvcmlub2NvX2lvY3RsX2dldGl3cmFuZ2UpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdTUFksCWl3X2hhbmRsZXJfc2V0X3NweSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NQWSwJaXdfaGFuZGxlcl9nZXRfc3B5KSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXVEhSU1BZLAlpd19oYW5kbGVyX3NldF90aHJzcHkpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdUSFJTUFksCWl3X2hhbmRsZXJfZ2V0X3RocnNweSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0FQLAlvcmlub2NvX2lvY3RsX3NldHdhcCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV0FQLAlvcmlub2NvX2lvY3RsX2dldHdhcCksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1NDQU4sCW9yaW5vY29faW9jdGxfc2V0c2NhbiksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1NDQU4sCW9yaW5vY29faW9jdGxfZ2V0c2NhbiksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0VTU0lELAlvcmlub2NvX2lvY3RsX3NldGVzc2lkKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXRVNTSUQsCW9yaW5vY29faW9jdGxfZ2V0ZXNzaWQpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdOSUNLTiwJb3Jpbm9jb19pb2N0bF9zZXRuaWNrKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXTklDS04sCW9yaW5vY29faW9jdGxfZ2V0bmljayksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JBVEUsCW9yaW5vY29faW9jdGxfc2V0cmF0ZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1JBVEUsCW9yaW5vY29faW9jdGxfZ2V0cmF0ZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV1JUUywJb3Jpbm9jb19pb2N0bF9zZXRydHMpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdSVFMsCW9yaW5vY29faW9jdGxfZ2V0cnRzKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXRlJBRywJb3Jpbm9jb19pb2N0bF9zZXRmcmFnKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXRlJBRywJb3Jpbm9jb19pb2N0bF9nZXRmcmFnKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXUkVUUlksCW9yaW5vY29faW9jdGxfZ2V0cmV0cnkpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdFTkNPREUsCW9yaW5vY29faW9jdGxfc2V0aXdlbmNvZGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFTkNPREUsCW9yaW5vY29faW9jdGxfZ2V0aXdlbmNvZGUpLAorCVNURF9JV19IQU5ETEVSKFNJT0NTSVdQT1dFUiwJb3Jpbm9jb19pb2N0bF9zZXRwb3dlciksCisJU1REX0lXX0hBTkRMRVIoU0lPQ0dJV1BPV0VSLAlvcmlub2NvX2lvY3RsX2dldHBvd2VyKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXR0VOSUUsCW9yaW5vY29faW9jdGxfc2V0X2dlbmllKSwKKwlTVERfSVdfSEFORExFUihTSU9DR0lXR0VOSUUsCW9yaW5vY29faW9jdGxfZ2V0X2dlbmllKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXTUxNRSwJb3Jpbm9jb19pb2N0bF9zZXRfbWxtZSksCisJU1REX0lXX0hBTkRMRVIoU0lPQ1NJV0FVVEgsCW9yaW5vY29faW9jdGxfc2V0X2F1dGgpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdBVVRILAlvcmlub2NvX2lvY3RsX2dldF9hdXRoKSwKKwlTVERfSVdfSEFORExFUihTSU9DU0lXRU5DT0RFRVhULCBvcmlub2NvX2lvY3RsX3NldF9lbmNvZGVleHQpLAorCVNURF9JV19IQU5ETEVSKFNJT0NHSVdFTkNPREVFWFQsIG9yaW5vY29faW9jdGxfZ2V0X2VuY29kZWV4dCksCit9OworCisKKy8qCisgIEFkZGVkIHR5cGVjYXN0aW5nIHNpbmNlIHdlIG5vIGxvbmdlciB1c2UgaXdyZXFfZGF0YSAtLSBNb3VzdGFmYQorICovCitzdGF0aWMgY29uc3QgaXdfaGFuZGxlcglvcmlub2NvX3ByaXZhdGVfaGFuZGxlcltdID0geworCVswXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3Jlc2V0LAorCVsxXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3Jlc2V0LAorCVsyXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldHBvcnQzLAorCVszXSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHBvcnQzLAorCVs0XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldHByZWFtYmxlLAorCVs1XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHByZWFtYmxlLAorCVs2XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX3NldGlic3Nwb3J0LAorCVs3XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldGlic3Nwb3J0LAorCVs5XSA9IChpd19oYW5kbGVyKSBvcmlub2NvX2lvY3RsX2dldHJpZCwKK307CisKK2NvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBvcmlub2NvX2hhbmRsZXJfZGVmID0geworCS5udW1fc3RhbmRhcmQgPSBBUlJBWV9TSVpFKG9yaW5vY29faGFuZGxlciksCisJLm51bV9wcml2YXRlID0gQVJSQVlfU0laRShvcmlub2NvX3ByaXZhdGVfaGFuZGxlciksCisJLm51bV9wcml2YXRlX2FyZ3MgPSBBUlJBWV9TSVpFKG9yaW5vY29fcHJpdnRhYiksCisJLnN0YW5kYXJkID0gb3Jpbm9jb19oYW5kbGVyLAorCS5wcml2YXRlID0gb3Jpbm9jb19wcml2YXRlX2hhbmRsZXIsCisJLnByaXZhdGVfYXJncyA9IG9yaW5vY29fcHJpdnRhYiwKKwkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gb3Jpbm9jb19nZXRfd2lyZWxlc3Nfc3RhdHMsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL3dleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDc5ZjRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby93ZXh0LmgKQEAgLTAsMCArMSwxMyBAQAorLyogV2lyZWxlc3MgZXh0ZW5zaW9ucyBzdXBwb3J0LgorICoKKyAqIFNlZSBjb3B5cmlnaHQgbm90aWNlIGluIG1haW4uYworICovCisjaWZuZGVmIF9PUklOT0NPX1dFWFRfSF8KKyNkZWZpbmUgX09SSU5PQ09fV0VYVF9IXworCisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKworLyogU3RydWN0dXJlIGRlZmluaW5nIGFsbCBvdXIgV0VYVCBoYW5kbGVycyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBvcmlub2NvX2hhbmRsZXJfZGVmOworCisjZW5kaWYgLyogX09SSU5PQ09fV0VYVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZwppbmRleCBkMzQ2OWQwLi5iNDVkNmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvS2NvbmZpZwpAQCAtMSw5ICsxLDEwIEBACiBjb25maWcgUDU0X0NPTU1PTgogCXRyaXN0YXRlICJTb2Z0bWFjIFByaXNtNTQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1BQzgwMjExICYmIFdMQU5fODAyMTEgJiYgRldfTE9BREVSICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gTUFDODAyMTEgJiYgV0xBTl84MDIxMSAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgRldfTE9BREVSCiAJLS0taGVscC0tLQotCSAgVGhpcyBpcyBjb21tb24gY29kZSBmb3IgaXNsMzh4eCBiYXNlZCBjYXJkcy4KLQkgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSSBmcm9udGVuZHMKKwkgIFRoaXMgaXMgY29tbW9uIGNvZGUgZm9yIGlzbDM4eHgvc3RsYzQ1eHggYmFzZWQgbW9kdWxlcy4KKwkgIFRoaXMgbW9kdWxlIGRvZXMgbm90aGluZyBieSBpdHNlbGYgLSB0aGUgVVNCL1BDSS9TUEkgZnJvbnQtZW5kcwogCSAgYWxzbyBuZWVkIHRvIGJlIGVuYWJsZWQgaW4gb3JkZXIgdG8gc3VwcG9ydCBhbnkgZGV2aWNlcy4KIAogCSAgVGhlc2UgZGV2aWNlcyByZXF1aXJlIHNvZnRtYWMgZmlybXdhcmUgd2hpY2ggY2FuIGJlIGZvdW5kIGF0CkBAIC0xNywzMSArMTgsNiBAQAogCXNlbGVjdCBDUkMzMgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIGlzIGZvciBVU0IgaXNsMzh4eCBiYXNlZCB3aXJlbGVzcyBjYXJkcy4KLQkgIFRoZXNlIGFyZSBVU0IgYmFzZWQgYWRhcHRlcnMgZm91bmQgaW4gZGV2aWNlcyBzdWNoIGFzOgotCi0JICAzQ09NIDNDUldFMjU0RzcyCi0JICBTTUMgMjg2MlctRwotCSAgQWNjdG9uIDgwMi4xMWcgV040NTAxIFVTQgotCSAgU2llbWVucyBHaWdhc2V0IFVTQgotCSAgTmV0Z2VhciBXRzEyMQotCSAgTmV0Z2VhciBXRzExMQotCSAgTWVkaW9uIDQwOTAwLCBSb3BlciBFdXJvcGUKLQkgIFNodXR0bGUgUE4xNSwgQWlydmFzdCBXTTE2OGcsIElPR2VhciBHV1U1MTMKLQkgIExpbmtzeXMgV1VTQjU0RwotCSAgTGlua3N5cyBXVVNCNTRHIFBvcnRhYmxlCi0JICBETGluayBEV0wtRzEyMCBTcGlubmFrZXIKLQkgIERMaW5rIERXTC1HMTIyCi0JICBCZWxraW4gRjVENzA1MCB2ZXIgMTAwMAotCSAgQ29oaWJhIFByb3RvIGJvYXJkCi0JICBTTUMgMjg2MlctRyB2ZXJzaW9uIDIKLQkgIFUuUy4gUm9ib3RpY3MgVTUgODAyLjExZyBBZGFwdGVyCi0JICBGVUpJVFNVIEUtNTQwMCBVU0IgRDE3MDAKLQkgIFNhZ2VtIFhHNzAzQQotCSAgRExpbmsgRFdMLUcxMjAgQ29oaWJhCi0JICBTcGlubmFrZXIgUHJvdG8gYm9hcmQKLQkgIExpbmtzeXMgV1VTQjU0QUcKLQkgIEludmVudGVsIFVSMDU0RwotCSAgU3Bpbm5ha2VyIERVVAogCiAJICBUaGVzZSBkZXZpY2VzIHJlcXVpcmUgc29mdG1hYyBmaXJtd2FyZSB3aGljaCBjYW4gYmUgZm91bmQgYXQKIAkgIGh0dHA6Ly9wcmlzbTU0Lm9yZy8KQEAgLTYxLDMgKzM3LDE4IEBACiAJICBodHRwOi8vcHJpc201NC5vcmcvCiAKIAkgIElmIHlvdSBjaG9vc2UgdG8gYnVpbGQgYSBtb2R1bGUsIGl0J2xsIGJlIGNhbGxlZCBwNTRwY2kuCisKK2NvbmZpZyBQNTRfU1BJCisJdHJpc3RhdGUgIlByaXNtNTQgU1BJIChzdGxjNDV4eCkgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFA1NF9DT01NT04gJiYgU1BJX01BU1RFUiAmJiBHRU5FUklDX0hBUkRJUlFTCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHN0bGM0NTUwIG9yIHN0bGM0NTYwIGJhc2VkIHdpcmVsZXNzIGNoaXBzLgorCSAgVGhpcyBkcml2ZXIgaXMgZXhwZXJpbWVudGFsLCB1bnRlc3RlZCBhbmQgd2lsbCBwcm9iYWJseSBvbmx5IHdvcmsgb24KKwkgIE5va2lhJ3MgTjgwMC9OODEwIFBvcnRhYmxlIEludGVybmV0IFRhYmxldC4KKworCSAgSWYgeW91IGNob29zZSB0byBidWlsZCBhIG1vZHVsZSwgaXQnbGwgYmUgY2FsbGVkIHA1NHNwaS4KKworY29uZmlnIFA1NF9MRURTCisJYm9vbAorCWRlcGVuZHMgb24gUDU0X0NPTU1PTiAmJiBNQUM4MDIxMV9MRURTICYmIChMRURTX0NMQVNTID0geSB8fCBMRURTX0NMQVNTID0gUDU0X0NPTU1PTikKKwlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9NYWtlZmlsZQppbmRleCA0ZmE5Y2U3Li5jMjA1MGRlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKIG9iai0kKENPTkZJR19QNTRfQ09NTU9OKQkrPSBwNTRjb21tb24ubwogb2JqLSQoQ09ORklHX1A1NF9VU0IpCQkrPSBwNTR1c2Iubwogb2JqLSQoQ09ORklHX1A1NF9QQ0kpCQkrPSBwNTRwY2kubworb2JqLSQoQ09ORklHX1A1NF9TUEkpCQkrPSBwNTRzcGkubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCmluZGV4IGFiNzllMzIuLjJkZGE1ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKQEAgLTE0LDYgKzE0LDEwIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKwogZW51bSBwNTRfY29udHJvbF9mcmFtZV90eXBlcyB7CiAJUDU0X0NPTlRST0xfVFlQRV9TRVRVUCA9IDAsCiAJUDU0X0NPTlRST0xfVFlQRV9TQ0FOLApAQCAtNDQsNiArNDgsMTggQEAKIAlQNTRfQ09OVFJPTF9UWVBFX0JUX09QVElPTlMgPSAzNQogfTsKIAorLyogcHJvdmlkZSAxNiBieXRlcyBmb3IgdGhlIHRyYW5zcG9ydCBiYWNrLWVuZCAqLworI2RlZmluZSBQNTRfVFhfSU5GT19EQVRBX1NJWkUJCTE2CisKKy8qIHN0b3JlZCBpbiBpZWVlODAyMTFfdHhfaW5mbydzIHJhdGVfZHJpdmVyX2RhdGEgKi8KK3N0cnVjdCBwNTRfdHhfaW5mbyB7CisJdTMyIHN0YXJ0X2FkZHI7CisJdTMyIGVuZF9hZGRyOworCXZvaWQgKmRhdGFbUDU0X1RYX0lORk9fREFUQV9TSVpFIC8gc2l6ZW9mKHZvaWQgKildOworfTsKKworI2RlZmluZSBQNTRfTUFYX0NUUkxfRlJBTUVfTEVOCQkweDEwMDAKKwogI2RlZmluZSBQNTRfSERSX0ZMQUdfQ09OVFJPTAkJQklUKDE1KQogI2RlZmluZSBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVAkoQklUKDE1KSArIEJJVCgwKSkKIApAQCAtNzUsNiArOTEsMTQgQEAKIAlzMTYgbG9uZ2Jvd191bmsyOwogfTsKIAorc3RydWN0IHA1NF9jYWxfZGF0YWJhc2UgeworCXNpemVfdCBlbnRyaWVzOworCXNpemVfdCBlbnRyeV9zaXplOworCXNpemVfdCBvZmZzZXQ7CisJc2l6ZV90IGxlbjsKKwl1OCBkYXRhWzBdOworfTsKKwogI2RlZmluZSBFRVBST01fUkVBREJBQ0tfTEVOIDB4M2ZjCiAKICNkZWZpbmUgSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUiAweDIwMDAwCkBAIC04NCw2ICsxMDgsMjkgQEAKICNkZWZpbmUgRldfTE04NyAweDRjNGQzODM3CiAjZGVmaW5lIEZXX0xNMjAgMHg0YzRkMzIzMAogCitlbnVtIGZ3X3N0YXRlIHsKKwlGV19TVEFURV9PRkYsCisJRldfU1RBVEVfQk9PVElORywKKwlGV19TVEFURV9SRUFEWSwKKwlGV19TVEFURV9SRVNFVCwKKwlGV19TVEFURV9SRVNFVFRJTkcsCit9OworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKKworI2RlZmluZSBQNTRfTEVEX01BWF9OQU1FX0xFTiAzMQorCitzdHJ1Y3QgcDU0X2xlZF9kZXYgeworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3X2RldjsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGxlZF9kZXY7CisJY2hhciBuYW1lW1A1NF9MRURfTUFYX05BTUVfTEVOICsgMV07CisKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CisJdW5zaWduZWQgaW50IHJlZ2lzdGVyZWQ7Cit9OworCisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0xFRFMgKi8KKwogc3RydWN0IHA1NF9jb21tb24gewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXUzMiByeF9zdGFydDsKQEAgLTk5LDExICsxNDYsMTIgQEAKIAlzdHJ1Y3QgbXV0ZXggY29uZl9tdXRleDsKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAJdTggYnNzaWRbRVRIX0FMRU5dOworCXU4IHJ4X2RpdmVyc2l0eV9tYXNrOworCXU4IHR4X2RpdmVyc2l0eV9tYXNrOwogCXN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSAqaXFfYXV0b2NhbDsKIAl1bnNpZ25lZCBpbnQgaXFfYXV0b2NhbF9sZW47Ci0Jc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCAqb3V0cHV0X2xpbWl0OwotCXVuc2lnbmVkIGludCBvdXRwdXRfbGltaXRfbGVuOwotCXN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqY3VydmVfZGF0YTsKKwlzdHJ1Y3QgcDU0X2NhbF9kYXRhYmFzZSAqb3V0cHV0X2xpbWl0OworCXN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpjdXJ2ZV9kYXRhOwogCXN0cnVjdCBwNTRfcnNzaV9saW5lYXJfYXBwcm94aW1hdGlvbiByc3NpY2FsX2RiW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCXVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3M7CiAJYm9vbCB1c2Vfc2hvcnRfc2xvdDsKQEAgLTExNSw3ICsxNjMsNyBAQAogCXVuc2lnbmVkIGludCBvdXRwdXRfcG93ZXI7CiAJdTMyIHRzZl9sb3czMjsKIAl1MzIgdHNmX2hpZ2gzMjsKLQl1NjQgYmFzaWNfcmF0ZV9tYXNrOworCXUzMiBiYXNpY19yYXRlX21hc2s7CiAJdTE2IHdha2V1cF90aW1lcjsKIAl1MTYgYWlkOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHNbOF07CkBAIC0xMjgsMTMgKzE3NiwyMSBAQAogCXN0cnVjdCBjb21wbGV0aW9uIGVlcHJvbV9jb21wOwogCXU4IHByaXZhY3lfY2FwczsKIAl1OCByeF9rZXljYWNoZV9zaXplOworCS8qIExFRCBtYW5hZ2VtZW50ICovCisJI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCisJc3RydWN0IHA1NF9sZWRfZGV2IGFzc29jX2xlZDsKKwlzdHJ1Y3QgcDU0X2xlZF9kZXYgdHhfbGVkOworCSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfTEVEUyAqLworCXUxNiBzb2Z0bGVkX3N0YXRlOwkJLyogYml0IGZpZWxkIG9mIGdsb3dpbmcgTEVEcyAqLwogfTsKIAogaW50IHA1NF9yeChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBwNTRfZnJlZV9za2Ioc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBwNTRfcGFyc2VfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KTsKK2ludCBwNTRfcGFyc2VfZWVwcm9tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdm9pZCAqZWVwcm9tLCBpbnQgbGVuKTsKIGludCBwNTRfcmVhZF9lZXByb20oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKIHN0cnVjdCBpZWVlODAyMTFfaHcgKnA1NF9pbml0X2NvbW1vbihzaXplX3QgcHJpdl9kYXRhX2xlbik7CitpbnQgcDU0X3JlZ2lzdGVyX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHN0cnVjdCBkZXZpY2UgKnBkZXYpOwogdm9pZCBwNTRfZnJlZV9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KTsKIAogI2VuZGlmIC8qIFA1NF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmMKaW5kZXggZjE3MDEwNi4uMGMxYjA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uYwpAQCAtMjEsNiArMjEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpZmRlZiBDT05GSUdfUDU0X0xFRFMKKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCiAKICNpbmNsdWRlICJwNTQuaCIKICNpbmNsdWRlICJwNTRjb21tb24uaCIKQEAgLTIzOSwxMSArMjQyLDExIEBACiAKIAlpZiAocHJpdi0+ZndfdmFyID49IDB4MzAwKSB7CiAJCS8qIEZpcm13YXJlIHN1cHBvcnRzIFFvUywgdXNlIGl0ISAqLwotCQlwcml2LT50eF9zdGF0c1s0XS5saW1pdCA9IDM7CQkvKiBBQ19WTyAqLwotCQlwcml2LT50eF9zdGF0c1s1XS5saW1pdCA9IDQ7CQkvKiBBQ19WSSAqLwotCQlwcml2LT50eF9zdGF0c1s2XS5saW1pdCA9IDM7CQkvKiBBQ19CRSAqLwotCQlwcml2LT50eF9zdGF0c1s3XS5saW1pdCA9IDI7CQkvKiBBQ19CSyAqLwotCQlkZXYtPnF1ZXVlcyA9IDQ7CisJCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19WT10ubGltaXQgPSAzOworCQlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfQUNfVkldLmxpbWl0ID0gNDsKKwkJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0FDX0JFXS5saW1pdCA9IDM7CisJCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9BQ19CS10ubGltaXQgPSAyOworCQlkZXYtPnF1ZXVlcyA9IFA1NF9RVUVVRV9BQ19OVU07CiAJfQogCiAJaWYgKCFtb2RwYXJhbV9ub2h3Y3J5cHQpCkBAIC0yNzIsMTMgKzI3NSwxOSBAQAogCXVuc2lnbmVkIGludCBpLCBqOwogCXZvaWQgKnNvdXJjZSwgKnRhcmdldDsKIAotCXByaXYtPmN1cnZlX2RhdGEgPSBrbWFsbG9jKGNkX2xlbiwgR0ZQX0tFUk5FTCk7CisJcHJpdi0+Y3VydmVfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpwcml2LT5jdXJ2ZV9kYXRhKSArIGNkX2xlbiwKKwkJCQkgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYtPmN1cnZlX2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEsIGN1cnZlX2RhdGEsIHNpemVvZigqY3VydmVfZGF0YSkpOworCXByaXYtPmN1cnZlX2RhdGEtPmVudHJpZXMgPSBjdXJ2ZV9kYXRhLT5jaGFubmVsczsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyeV9zaXplID0gc2l6ZW9mKF9fbGUxNikgKworCQlzaXplb2YoKmRzdCkgKiBjdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWw7CisJcHJpdi0+Y3VydmVfZGF0YS0+b2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhLCBkYXRhKTsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5sZW4gPSBjZF9sZW47CisJbWVtY3B5KHByaXYtPmN1cnZlX2RhdGEtPmRhdGEsIGN1cnZlX2RhdGEsIHNpemVvZigqY3VydmVfZGF0YSkpOwogCXNvdXJjZSA9IGN1cnZlX2RhdGEtPmRhdGE7Ci0JdGFyZ2V0ID0gcHJpdi0+Y3VydmVfZGF0YS0+ZGF0YTsKKwl0YXJnZXQgPSAoKHN0cnVjdCBwZGFfcGFfY3VydmVfZGF0YSAqKSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhKS0+ZGF0YTsKIAlmb3IgKGkgPSAwOyBpIDwgY3VydmVfZGF0YS0+Y2hhbm5lbHM7IGkrKykgewogCQlfX2xlMTYgKmZyZXEgPSBzb3VyY2U7CiAJCXNvdXJjZSArPSBzaXplb2YoX19sZTE2KTsKQEAgLTMxOCwxMyArMzI3LDE5IEBACiAJdW5zaWduZWQgaW50IGksIGo7CiAJdm9pZCAqc291cmNlLCAqdGFyZ2V0OwogCi0JcHJpdi0+Y3VydmVfZGF0YSA9IGttYWxsb2MoY2RfbGVuLCBHRlBfS0VSTkVMKTsKKwlwcml2LT5jdXJ2ZV9kYXRhID0ga3phbGxvYyhjZF9sZW4gKyBzaXplb2YoKnByaXYtPmN1cnZlX2RhdGEpLAorCQkJCSAgIEdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+Y3VydmVfZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1jcHkocHJpdi0+Y3VydmVfZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7CisJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cmllcyA9IGN1cnZlX2RhdGEtPmNoYW5uZWxzOworCXByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemUgPSBzaXplb2YoX19sZTE2KSArCisJCXNpemVvZigqZHN0KSAqIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKKwlwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEsIGRhdGEpOworCXByaXYtPmN1cnZlX2RhdGEtPmxlbiA9IGNkX2xlbjsKKwltZW1jcHkocHJpdi0+Y3VydmVfZGF0YS0+ZGF0YSwgY3VydmVfZGF0YSwgc2l6ZW9mKCpjdXJ2ZV9kYXRhKSk7CiAJc291cmNlID0gY3VydmVfZGF0YS0+ZGF0YTsKLQl0YXJnZXQgPSBwcml2LT5jdXJ2ZV9kYXRhLT5kYXRhOworCXRhcmdldCA9ICgoc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGEpLT5kYXRhOwogCWZvciAoaSA9IDA7IGkgPCBjdXJ2ZV9kYXRhLT5jaGFubmVsczsgaSsrKSB7CiAJCV9fbGUxNiAqZnJlcSA9IHNvdXJjZTsKIAkJc291cmNlICs9IHNpemVvZihfX2xlMTYpOwpAQCAtMzc2LDcgKzM5MSwxMDIgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKK3N0YXRpYyB2b2lkIHA1NF9wYXJzZV9kZWZhdWx0X2NvdW50cnkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAorCQkJCSAgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJc3RydWN0IHBkYV9jb3VudHJ5ICpjb3VudHJ5OworCisJaWYgKGxlbiAhPSBzaXplb2YoKmNvdW50cnkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZvdW5kIHBvc3NpYmxlIGludmFsaWQgZGVmYXVsdCBjb3VudHJ5ICIKKwkJCQkiZWVwcm9tIGVudHJ5LiAoZW50cnkgc2l6ZTogJWQpXG4iLAorCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbGVuKTsKKworCQlwcmludF9oZXhfZHVtcF9ieXRlcygiY291bnRyeToiLCBEVU1QX1BSRUZJWF9OT05FLAorCQkJCSAgICAgZGF0YSwgbGVuKTsKKworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBwbGVhc2UgcmVwb3J0IHRoaXMgaXNzdWUuXG4iLAorCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCXJldHVybjsKKwl9CisKKwljb3VudHJ5ID0gKHN0cnVjdCBwZGFfY291bnRyeSAqKSBkYXRhOworCWlmIChjb3VudHJ5LT5mbGFncyA9PSBQRFJfQ09VTlRSWV9DRVJUX0NPREVfUFNFVURPKQorCQlyZWd1bGF0b3J5X2hpbnQoZGV2LT53aXBoeSwgY291bnRyeS0+YWxwaGEyKTsKKwllbHNlIHsKKwkJLyogVE9ETzoKKwkJICogd3JpdGUgYSBzaGFyZWQvY29tbW9uIGZ1bmN0aW9uIHRoYXQgY29udmVydHMKKwkJICogIlJlZ3VsYXRvcnkgZG9tYWluIGNvZGVzIiAoODAyLjExLTIwMDcgMTQuOC4yLjIpCisJCSAqIGludG8gSVNPL0lFQyAzMTY2LTEgYWxwaGEyIGZvciByZWd1bGF0b3J5X2hpbnQuCisJCSAqLworCX0KK30KKworc3RhdGljIGludCBwNTRfY29udmVydF9vdXRwdXRfbGltaXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKKwkJCQkgICAgIHU4ICpkYXRhLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCisJaWYgKGxlbiA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRhdGFbMF0gIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmtub3duIG91dHB1dCBwb3dlciBkYiByZXZpc2lvbjoleFxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIGRhdGFbMF0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoMiArIGRhdGFbMV0gKiBzaXplb2Yoc3RydWN0IHBkYV9jaGFubmVsX291dHB1dF9saW1pdCkgPiBsZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJcHJpdi0+b3V0cHV0X2xpbWl0ID0ga21hbGxvYyhkYXRhWzFdICoKKwkJc2l6ZW9mKHN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQpICsKKwkJc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcHJpdi0+b3V0cHV0X2xpbWl0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPm91dHB1dF9saW1pdC0+b2Zmc2V0ID0gMDsKKwlwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXMgPSBkYXRhWzFdOworCXByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSA9CisJCXNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KTsKKwlwcml2LT5vdXRwdXRfbGltaXQtPmxlbiA9IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSAqCisJCQkJICBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXMgKworCQkJCSAgcHJpdi0+b3V0cHV0X2xpbWl0LT5vZmZzZXQ7CisKKwltZW1jcHkocHJpdi0+b3V0cHV0X2xpbWl0LT5kYXRhLCAmZGF0YVsyXSwKKwkgICAgICAgZGF0YVsxXSAqIHNpemVvZihzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpwNTRfY29udmVydF9kYihzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICpzcmMsCisJCQkJCSAgICAgICBzaXplX3QgdG90YWxfbGVuKQoreworCXN0cnVjdCBwNTRfY2FsX2RhdGFiYXNlICpkc3Q7CisJc2l6ZV90IHBheWxvYWRfbGVuLCBlbnRyaWVzLCBlbnRyeV9zaXplLCBvZmZzZXQ7CisKKwlwYXlsb2FkX2xlbiA9IGxlMTZfdG9fY3B1KHNyYy0+bGVuKTsKKwllbnRyaWVzID0gbGUxNl90b19jcHUoc3JjLT5lbnRyaWVzKTsKKwllbnRyeV9zaXplID0gbGUxNl90b19jcHUoc3JjLT5lbnRyeV9zaXplKTsKKwlvZmZzZXQgPSBsZTE2X3RvX2NwdShzcmMtPm9mZnNldCk7CisJaWYgKCgoZW50cmllcyAqIGVudHJ5X3NpemUgKyBvZmZzZXQpICE9IHBheWxvYWRfbGVuKSB8fAorCSAgICAgKHBheWxvYWRfbGVuICsgc2l6ZW9mKCpzcmMpICE9IHRvdGFsX2xlbikpCisJCXJldHVybiBOVUxMOworCisJZHN0ID0ga21hbGxvYyhzaXplb2YoKmRzdCkgKyBwYXlsb2FkX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkc3QpCisJCXJldHVybiBOVUxMOworCisJZHN0LT5lbnRyaWVzID0gZW50cmllczsKKwlkc3QtPmVudHJ5X3NpemUgPSBlbnRyeV9zaXplOworCWRzdC0+b2Zmc2V0ID0gb2Zmc2V0OworCWRzdC0+bGVuID0gcGF5bG9hZF9sZW47CisKKwltZW1jcHkoZHN0LT5kYXRhLCBzcmMtPmRhdGEsIHBheWxvYWRfbGVuKTsKKwlyZXR1cm4gZHN0OworfQorCitpbnQgcDU0X3BhcnNlX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHZvaWQgKmVlcHJvbSwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgZWVwcm9tX3BkYV93cmFwICp3cmFwID0gTlVMTDsKQEAgLTQwMSwzMCArNTExLDE3IEBACiAKIAkJc3dpdGNoIChsZTE2X3RvX2NwdShlbnRyeS0+Y29kZSkpIHsKIAkJY2FzZSBQRFJfTUFDX0FERFJFU1M6CisJCQlpZiAoZGF0YV9sZW4gIT0gRVRIX0FMRU4pCisJCQkJYnJlYWs7CiAJCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihkZXYsIGVudHJ5LT5kYXRhKTsKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUUzoKLQkJCWlmIChkYXRhX2xlbiA8IDIpIHsKLQkJCQllcnIgPSAtRUlOVkFMOworCQkJaWYgKHByaXYtPm91dHB1dF9saW1pdCkKKwkJCQlicmVhazsKKwkJCWVyciA9IHA1NF9jb252ZXJ0X291dHB1dF9saW1pdHMoZGV2LCBlbnRyeS0+ZGF0YSwKKwkJCQkJCQlkYXRhX2xlbik7CisJCQlpZiAoZXJyKQogCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQlpZiAoMiArIGVudHJ5LT5kYXRhWzFdKnNpemVvZigqcHJpdi0+b3V0cHV0X2xpbWl0KSA+IGRhdGFfbGVuKSB7Ci0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIGVycjsKLQkJCX0KLQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0ID0ga21hbGxvYyhlbnRyeS0+ZGF0YVsxXSAqCi0JCQkJc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpLCBHRlBfS0VSTkVMKTsKLQotCQkJaWYgKCFwcml2LT5vdXRwdXRfbGltaXQpIHsKLQkJCQllcnIgPSAtRU5PTUVNOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCi0JCQltZW1jcHkocHJpdi0+b3V0cHV0X2xpbWl0LCAmZW50cnktPmRhdGFbMl0sCi0JCQkgICAgICAgZW50cnktPmRhdGFbMV0qc2l6ZW9mKCpwcml2LT5vdXRwdXRfbGltaXQpKTsKLQkJCXByaXYtPm91dHB1dF9saW1pdF9sZW4gPSBlbnRyeS0+ZGF0YVsxXTsKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQTogewogCQkJc3RydWN0IHBkYV9wYV9jdXJ2ZV9kYXRhICpjdXJ2ZV9kYXRhID0KQEAgLTQ2Myw2ICs1NjAsOSBAQAogCQkJbWVtY3B5KHByaXYtPmlxX2F1dG9jYWwsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7CiAJCQlwcml2LT5pcV9hdXRvY2FsX2xlbiA9IGRhdGFfbGVuIC8gc2l6ZW9mKHN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSk7CiAJCQlicmVhazsKKwkJY2FzZSBQRFJfREVGQVVMVF9DT1VOVFJZOgorCQkJcDU0X3BhcnNlX2RlZmF1bHRfY291bnRyeShkZXYsIGVudHJ5LT5kYXRhLCBkYXRhX2xlbik7CisJCQlicmVhazsKIAkJY2FzZSBQRFJfSU5URVJGQUNFX0xJU1Q6CiAJCQl0bXAgPSBlbnRyeS0+ZGF0YTsKIAkJCXdoaWxlICgodTggKil0bXAgPCBlbnRyeS0+ZGF0YSArIGRhdGFfbGVuKSB7CkBAIC00NzMsNiArNTczLDggQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFBEUl9IQVJEV0FSRV9QTEFURk9STV9DT01QT05FTlRfSUQ6CisJCQlpZiAoZGF0YV9sZW4gPCAyKQorCQkJCWJyZWFrOwogCQkJcHJpdi0+dmVyc2lvbiA9ICoodTggKikoZW50cnktPmRhdGEgKyAxKTsKIAkJCWJyZWFrOwogCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OOgpAQCAtNDgxLDYgKzU4MywzNCBAQAogCQkJcDU0X3BhcnNlX3Jzc2ljYWwoZGV2LCBlbnRyeS0+ZGF0YSwgZGF0YV9sZW4sCiAJCQkJCSAgbGUxNl90b19jcHUoZW50cnktPmNvZGUpKTsKIAkJCWJyZWFrOworCQljYXNlIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0NVU1RPTTogeworCQkJX19sZTE2ICpzcmMgPSAodm9pZCAqKSBlbnRyeS0+ZGF0YTsKKwkJCXMxNiAqZHN0ID0gKHZvaWQgKikgJnByaXYtPnJzc2ljYWxfZGI7CisJCQlpbnQgaTsKKworCQkJaWYgKGRhdGFfbGVuICE9IHNpemVvZihwcml2LT5yc3NpY2FsX2RiKSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBlcnI7CisJCQl9CisJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHByaXYtPnJzc2ljYWxfZGIpIC8KKwkJCQkJc2l6ZW9mKCpzcmMpOyBpKyspCisJCQkJKihkc3QrKykgPSAoczE2KSBsZTE2X3RvX2NwdSgqKHNyYysrKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQRFJfUFJJU01fUEFfQ0FMX09VVFBVVF9QT1dFUl9MSU1JVFNfQ1VTVE9NOiB7CisJCQlzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICpwZGEgPSAodm9pZCAqKSBlbnRyeS0+ZGF0YTsKKwkJCWlmIChwcml2LT5vdXRwdXRfbGltaXQgfHwgZGF0YV9sZW4gPCBzaXplb2YoKnBkYSkpCisJCQkJYnJlYWs7CisJCQlwcml2LT5vdXRwdXRfbGltaXQgPSBwNTRfY29udmVydF9kYihwZGEsIGRhdGFfbGVuKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQV9DVVNUT006IHsKKwkJCXN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKnBkYSA9ICh2b2lkICopIGVudHJ5LT5kYXRhOworCQkJaWYgKHByaXYtPmN1cnZlX2RhdGEgfHwgZGF0YV9sZW4gPCBzaXplb2YoKnBkYSkpCisJCQkJYnJlYWs7CisJCQlwcml2LT5jdXJ2ZV9kYXRhID0gcDU0X2NvbnZlcnRfZGIocGRhLCBkYXRhX2xlbik7CisJCQl9CisJCQlicmVhazsKIAkJY2FzZSBQRFJfRU5EOgogCQkJLyogbWFrZSBpdCBvdmVycnVuICovCiAJCQllbnRyeV9sZW4gPSBsZW47CkBAIC00OTcsNyArNjI3LDYgQEAKIAkJY2FzZSBQRFJfVVRGOF9PRU1fTkFNRToKIAkJY2FzZSBQRFJfVVRGOF9QUk9EVUNUX05BTUU6CiAJCWNhc2UgUERSX0NPVU5UUllfTElTVDoKLQkJY2FzZSBQRFJfREVGQVVMVF9DT1VOVFJZOgogCQljYXNlIFBEUl9BTlRFTk5BX0dBSU46CiAJCWNhc2UgUERSX1BSSVNNX0lORElHT19QQV9DQUxJQlJBVElPTl9EQVRBOgogCQljYXNlIFBEUl9SRUdVTEFUT1JZX1BPV0VSX0xJTUlUUzoKQEAgLTUyNSwxMiArNjU0LDE2IEBACiAJfQogCiAJcHJpdi0+cnhodyA9IHN5bnRoICYgUERSX1NZTlRIX0ZST05URU5EX01BU0s7Ci0JaWYgKHByaXYtPnJ4aHcgPT0gNCkKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfWEJPVykKIAkJcDU0X2luaXRfeGJvd19zeW50aChkZXYpOwogCWlmICghKHN5bnRoICYgUERSX1NZTlRIXzI0X0dIWl9ESVNBQkxFRCkpCiAJCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJmJhbmRfMkdIejsKIAlpZiAoIShzeW50aCAmIFBEUl9TWU5USF81X0dIWl9ESVNBQkxFRCkpCiAJCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0gJmJhbmRfNUdIejsKKwlpZiAoKHN5bnRoICYgUERSX1NZTlRIX1JYX0RJVl9NQVNLKSA9PSBQRFJfU1lOVEhfUlhfRElWX1NVUFBPUlRFRCkKKwkJcHJpdi0+cnhfZGl2ZXJzaXR5X21hc2sgPSAzOworCWlmICgoc3ludGggJiBQRFJfU1lOVEhfVFhfRElWX01BU0spID09IFBEUl9TWU5USF9UWF9ESVZfU1VQUE9SVEVEKQorCQlwcml2LT50eF9kaXZlcnNpdHlfbWFzayA9IDM7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT53aXBoeS0+cGVybV9hZGRyKSkgewogCQl1OCBwZXJtX2FkZHJbRVRIX0FMRU5dOwpAQCAtNTY4LDEzICs3MDEsMjEgQEAKIAkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9wYXJzZV9lZXByb20pOwogCiBzdGF0aWMgaW50IHA1NF9yc3NpX3RvX2RibShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGludCByc3NpKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCWludCBiYW5kID0gZGV2LT5jb25mLmNoYW5uZWwtPmJhbmQ7CiAKLQlyZXR1cm4gKChyc3NpICogcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpIC8gNjQgKworCWlmIChwcml2LT5yeGh3ICE9IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKQorCQlyZXR1cm4gKChyc3NpICogcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5tdWwpIC8gNjQgKworCQkJIHByaXYtPnJzc2ljYWxfZGJbYmFuZF0uYWRkKSAvIDQ7CisJZWxzZQorCQkvKgorCQkgKiBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IGZvcm11bGEKKwkJICovCisJCXJldHVybiAoKHJzc2kgKiBwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCkgLyA2NCArCiAJCQkgcHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpIC8gNDsKIH0KIApAQCAtNTk3LDEwICs3MzgsNyBAQAogCQlyZXR1cm4gMDsKIAogCWlmICghKGhkci0+ZmxhZ3MgJiBjcHVfdG9fbGUxNihQNTRfSERSX0ZMQUdfREFUQV9JTl9GQ1NfR09PRCkpKSB7Ci0JCWlmIChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfRkNTRkFJTCkKLQkJCXJ4X3N0YXR1cy5mbGFnIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7Ci0JCWVsc2UKLQkJCXJldHVybiAwOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoaGRyLT5kZWNyeXB0X3N0YXR1cyA9PSBQNTRfREVDUllQVF9PSykKQEAgLTY1NSw3ICs3OTMsOCBAQAogCQlyZXR1cm4gOwogCiAJZm9yIChpID0gMDsgaSA8IGRldi0+cXVldWVzOyBpKyspCi0JCWlmIChwcml2LT50eF9zdGF0c1tpICsgNF0ubGVuIDwgcHJpdi0+dHhfc3RhdHNbaSArIDRdLmxpbWl0KQorCQlpZiAocHJpdi0+dHhfc3RhdHNbaSArIFA1NF9RVUVVRV9EQVRBXS5sZW4gPAorCQkgICAgcHJpdi0+dHhfc3RhdHNbaSArIFA1NF9RVUVVRV9EQVRBXS5saW1pdCkKIAkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGRldiwgaSk7CiB9CiAKQEAgLTY2Myw3ICs4MDIsNyBAQAogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZTsKKwlzdHJ1Y3QgcDU0X3R4X2luZm8gKnJhbmdlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGZyZWVkID0gMCwgbGFzdF9hZGRyID0gcHJpdi0+cnhfc3RhcnQ7CiAKQEAgLTY4MSwxOCArODIwLDE4IEBACiAJcmFuZ2UgPSAodm9pZCAqKWluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CiAJaWYgKHNrYi0+cHJldiAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpuaTsKLQkJc3RydWN0IG1lbXJlY29yZCAqbXI7CisJCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7CiAKIAkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYi0+cHJldik7Ci0JCW1yID0gKHN0cnVjdCBtZW1yZWNvcmQgKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKKwkJbXIgPSAoc3RydWN0IHA1NF90eF9pbmZvICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CiAJCWxhc3RfYWRkciA9IG1yLT5lbmRfYWRkcjsKIAl9CiAJaWYgKHNrYi0+bmV4dCAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKIAkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpuaTsKLQkJc3RydWN0IG1lbXJlY29yZCAqbXI7CisJCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7CiAKIAkJbmkgPSBJRUVFODAyMTFfU0tCX0NCKHNrYi0+bmV4dCk7Ci0JCW1yID0gKHN0cnVjdCBtZW1yZWNvcmQgKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKKwkJbXIgPSAoc3RydWN0IHA1NF90eF9pbmZvICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CiAJCWZyZWVkID0gbXItPnN0YXJ0X2FkZHIgLSBsYXN0X2FkZHI7CiAJfSBlbHNlCiAJCWZyZWVkID0gcHJpdi0+cnhfZW5kIC0gbGFzdF9hZGRyOwpAQCAtNzM1LDcgKzg3NCw3IEBACiAJc3RydWN0IHA1NF9mcmFtZV9zZW50ICpwYXlsb2FkID0gKHN0cnVjdCBwNTRfZnJhbWVfc2VudCAqKSBoZHItPmRhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKmVudHJ5OwogCXUzMiBhZGRyID0gbGUzMl90b19jcHUoaGRyLT5yZXFfaWQpIC0gcHJpdi0+aGVhZHJvb207Ci0Jc3RydWN0IG1lbXJlY29yZCAqcmFuZ2UgPSBOVUxMOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqcmFuZ2UgPSBOVUxMOwogCXUzMiBmcmVlZCA9IDA7CiAJdTMyIGxhc3RfYWRkciA9IHByaXYtPnJ4X3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC03NTgsMTAgKzg5NywxMCBAQAogCiAJCWlmIChlbnRyeS0+bmV4dCAhPSAoc3RydWN0IHNrX2J1ZmYgKikmcHJpdi0+dHhfcXVldWUpIHsKIAkJCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqbmk7Ci0JCQlzdHJ1Y3QgbWVtcmVjb3JkICptcjsKKwkJCXN0cnVjdCBwNTRfdHhfaW5mbyAqbXI7CiAKIAkJCW5pID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+bmV4dCk7Ci0JCQltciA9IChzdHJ1Y3QgbWVtcmVjb3JkICopbmktPnJhdGVfZHJpdmVyX2RhdGE7CisJCQltciA9IChzdHJ1Y3QgcDU0X3R4X2luZm8gKiluaS0+cmF0ZV9kcml2ZXJfZGF0YTsKIAkJCWZyZWVkID0gbXItPnN0YXJ0X2FkZHIgLSBsYXN0X2FkZHI7CiAJCX0gZWxzZQogCQkJZnJlZWQgPSBwcml2LT5yeF9lbmQgLSBsYXN0X2FkZHI7CkBAIC03NzYsOSArOTE1LDE2IEBACiAJCXByaXYtPnR4X3N0YXRzW2VudHJ5X2RhdGEtPmh3X3F1ZXVlXS5sZW4tLTsKIAkJcHJpdi0+c3RhdHMuZG90MTFBQ0tGYWlsdXJlQ291bnQgKz0gcGF5bG9hZC0+dHJpZXMgLSAxOwogCi0JCWlmICh1bmxpa2VseShlbnRyeSA9PSBwcml2LT5jYWNoZWRfYmVhY29uKSkgeworCQkvKgorCQkgKiBGcmFtZXMgaW4gUDU0X1FVRVVFX0ZXU0NBTiBhbmQgUDU0X1FVRVVFX0JFQUNPTiBhcmUKKwkJICogZ2VuZXJhdGVkIGJ5IHRoZSBkcml2ZXIuIFRoZXJlZm9yZSB0eF9zdGF0dXMgaXMgYm9ndXMKKwkJICogYW5kIHdlIGRvbid0IHdhbnQgdG8gY29uZnVzZSB0aGUgbWFjODAyMTEgc3RhY2suCisJCSAqLworCQlpZiAodW5saWtlbHkoZW50cnlfZGF0YS0+aHdfcXVldWUgPCBQNTRfUVVFVUVfRldTQ0FOKSkgeworCQkJaWYgKGVudHJ5X2RhdGEtPmh3X3F1ZXVlID09IFA1NF9RVUVVRV9CRUFDT04pCisJCQkJcHJpdi0+Y2FjaGVkX2JlYWNvbiA9IE5VTEw7CisKIAkJCWtmcmVlX3NrYihlbnRyeSk7Ci0JCQlwcml2LT5jYWNoZWRfYmVhY29uID0gTlVMTDsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTk3MSw4ICsxMTE3LDggQEAKICAqIGNhbiBmaW5kIHNvbWUgdW51c2VkIG1lbW9yeSB0byB1cGxvYWQgb3VyIHBhY2tldHMgdG8uIEhvd2V2ZXIsIGRhdGEgdGhhdCB3ZQogICogd2FudCB0aGUgY2FyZCB0byBUWCBuZWVkcyB0byBzdGF5IGludGFjdCB1bnRpbCB0aGUgY2FyZCBoYXMgdG9sZCB1cyB0aGF0CiAgKiBpdCBpcyBkb25lIHdpdGggaXQuIFRoaXMgZnVuY3Rpb24gZmluZHMgZW1wdHkgcGxhY2VzIHdlIGNhbiB1cGxvYWQgdG8gYW5kCi0gKiBtYXJrcyBhbGxvY2F0ZWQgYXJlYXMgYXMgcmVzZXJ2ZWQgaWYgbmVjZXNzYXJ5LiBwNTRfcnhfZnJhbWVfc2VudCBmcmVlcwotICogYWxsb2NhdGVkIGFyZWFzLgorICogbWFya3MgYWxsb2NhdGVkIGFyZWFzIGFzIHJlc2VydmVkIGlmIG5lY2Vzc2FyeS4gcDU0X3J4X2ZyYW1lX3NlbnQgb3IKKyAqIHA1NF9mcmVlX3NrYiBmcmVlcyBhbGxvY2F0ZWQgYXJlYXMuCiAgKi8KIHN0YXRpYyBpbnQgcDU0X2Fzc2lnbl9hZGRyZXNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3QgcDU0X2hkciAqZGF0YSwgdTMyIGxlbikKQEAgLTk4MSw3ICsxMTI3LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqZW50cnk7CiAJc3RydWN0IHNrX2J1ZmYgKnRhcmdldF9za2IgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKLQlzdHJ1Y3QgbWVtcmVjb3JkICpyYW5nZTsKKwlzdHJ1Y3QgcDU0X3R4X2luZm8gKnJhbmdlOwogCXUzMiBsYXN0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKIAl1MzIgbGFyZ2VzdF9ob2xlID0gMDsKIAl1MzIgdGFyZ2V0X2FkZHIgPSBwcml2LT5yeF9zdGFydDsKQEAgLTEwNjMsMjUgKzEyMDksMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfYWxsb2Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJdTE2IGhkcl9mbGFncywgdTE2IGxlbiwgdTE2IHR5cGUsIGdmcF90IG1lbWZsYWdzKQorc3RhdGljIHN0cnVjdCBza19idWZmICpwNTRfYWxsb2Nfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTE2IGhkcl9mbGFncywKKwkJCQkgICAgIHUxNiBwYXlsb2FkX2xlbiwgdTE2IHR5cGUsIGdmcF90IG1lbWZsYWdzKQogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBwNTRfaGRyICpoZHI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzaXplX3QgZnJhbWVfbGVuID0gc2l6ZW9mKCpoZHIpICsgcGF5bG9hZF9sZW47CiAKLQlza2IgPSBfX2Rldl9hbGxvY19za2IobGVuICsgcHJpdi0+dHhfaGRyX2xlbiwgbWVtZmxhZ3MpOworCWlmIChmcmFtZV9sZW4gPiBQNTRfTUFYX0NUUkxfRlJBTUVfTEVOKQorCQlyZXR1cm4gTlVMTDsKKworCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihwcml2LT50eF9oZHJfbGVuICsgZnJhbWVfbGVuLCBtZW1mbGFncyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiBOVUxMOwogCXNrYl9yZXNlcnZlKHNrYiwgcHJpdi0+dHhfaGRyX2xlbik7CiAKIAloZHIgPSAoc3RydWN0IHA1NF9oZHIgKikgc2tiX3B1dChza2IsIHNpemVvZigqaGRyKSk7CiAJaGRyLT5mbGFncyA9IGNwdV90b19sZTE2KGhkcl9mbGFncyk7Ci0JaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihsZW4gLSBzaXplb2YoKmhkcikpOworCWhkci0+bGVuID0gY3B1X3RvX2xlMTYocGF5bG9hZF9sZW4pOwogCWhkci0+dHlwZSA9IGNwdV90b19sZTE2KHR5cGUpOwogCWhkci0+dHJpZXMgPSBoZHItPnJ0c190cmllcyA9IDA7CiAKLQlpZiAodW5saWtlbHkocDU0X2Fzc2lnbl9hZGRyZXNzKGRldiwgc2tiLCBoZHIsIGxlbikpKSB7CisJaWYgKHA1NF9hc3NpZ25fYWRkcmVzcyhkZXYsIHNrYiwgaGRyLCBmcmFtZV9sZW4pKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0xMDkxLDcgKzEyNDEsNiBAQAogaW50IHA1NF9yZWFkX2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7Ci0Jc3RydWN0IHA1NF9oZHIgKmhkciA9IE5VTEw7CiAJc3RydWN0IHA1NF9lZXByb21fbG04NiAqZWVwcm9tX2hkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNpemVfdCBlZXByb21fc2l6ZSA9IDB4MjAyMCwgb2Zmc2V0ID0gMCwgYmxvY2tzaXplLCBtYXhibG9ja3NpemU7CkBAIC0xMTA0LDkgKzEyNTMsOSBAQAogCWVsc2UKIAkJbWF4YmxvY2tzaXplIC09IDB4NDsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTCwgc2l6ZW9mKCpoZHIpICsKLQkJCSAgICBzaXplb2YoKmVlcHJvbV9oZHIpICsgbWF4YmxvY2tzaXplLAotCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfRUVQUk9NX1JFQURCQUNLLCBHRlBfS0VSTkVMKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsIHNpemVvZigqZWVwcm9tX2hkcikgKworCQkJICAgIG1heGJsb2Nrc2l6ZSwgUDU0X0NPTlRST0xfVFlQRV9FRVBST01fUkVBREJBQ0ssCisJCQkgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpCiAJCWdvdG8gZnJlZTsKIAlwcml2LT5lZXByb20gPSBremFsbG9jKEVFUFJPTV9SRUFEQkFDS19MRU4sIEdGUF9LRVJORUwpOwpAQCAtMTE2Miw5ICsxMzExLDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwNTRfdGltICp0aW07CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsCi0JCSAgICAgIHNpemVvZihzdHJ1Y3QgcDU0X2hkcikgKyBzaXplb2YoKnRpbSksCi0JCSAgICAgIFA1NF9DT05UUk9MX1RZUEVfVElNLCBHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqdGltKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1RJTSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMTgxLDkgKzEzMjksOCBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHA1NF9zdGFfdW5sb2NrICpzdGE7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsCi0JCXNpemVvZihzdHJ1Y3QgcDU0X2hkcikgKyBzaXplb2YoKnN0YSksCi0JCVA1NF9DT05UUk9MX1RZUEVfUFNNX1NUQV9VTkxPQ0ssIEdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpzdGEpLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfUFNNX1NUQV9VTkxPQ0ssIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTIyMyw5ICsxMzcwLDggQEAKIAlzdHJ1Y3QgcDU0X2hkciAqaGRyOwogCXN0cnVjdCBwNTRfdHhjYW5jZWwgKmNhbmNlbDsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwKLQkJc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSArIHNpemVvZigqY2FuY2VsKSwKLQkJUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwgR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmNhbmNlbCksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9UWENBTkNFTCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xMjQyLDQ2ICsxMzg4LDczIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICh1bmxpa2VseShpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKSkgewotCQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCQkqYWlkID0gMDsKLQkJCSpxdWV1ZSA9IDA7Ci0JCQkqZXh0cmFfbGVuID0gSUVFRTgwMjExX01BWF9USU1fTEVOOwotCQkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUDsKLQkJCXJldHVybiAwOwotCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJCSphaWQgPSAwOwotCQkJKnF1ZXVlID0gMjsKLQkJCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVAgfAotCQkJCSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUw7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKLQkJCSpxdWV1ZSA9IDI7Ci0JCQlyZXQgPSAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJKnF1ZXVlICs9IDQ7Ci0JCXJldCA9IDE7Ci0JfQorCWludCByZXQgPSAxOwogCiAJc3dpdGNoIChwcml2LT5tb2RlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQkvKgorCQkgKiBXZSBoYXZlIHRvIHNldCBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUFJPTUlTQyBmb3IKKwkJICogZXZlcnkgZnJhbWUgaW4gcHJvbWlzY3VvdXMvbW9uaXRvciBtb2RlLgorCQkgKiBzZWUgU1RTVzQ1eDBDIExNQUMgQVBJIC0gcGFnZSAxMi4KKwkJICovCisJCSphaWQgPSAwOworCQkqZmxhZ3MgPSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfUFJPTUlTQzsKKwkJKnF1ZXVlICs9IFA1NF9RVUVVRV9EQVRBOworCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCSphaWQgPSAxOworCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwkJCSpxdWV1ZSA9IFA1NF9RVUVVRV9NR01UOworCQkJcmV0ID0gMDsKKwkJfSBlbHNlCisJCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfU0VORF9BRlRFUl9EVElNKSB7CiAJCQkqYWlkID0gMDsKLQkJCSpxdWV1ZSA9IDM7CisJCQkqcXVldWUgPSBQNTRfUVVFVUVfQ0FCOwogCQkJcmV0dXJuIDA7CiAJCX0KKworCQlpZiAodW5saWtlbHkoaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkpIHsKKwkJCWlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCQkJKmFpZCA9IDA7CisJCQkJKnF1ZXVlID0gUDU0X1FVRVVFX01HTVQ7CisJCQkJKmZsYWdzID0gUDU0X0hEUl9GTEFHX0RBVEFfT1VUX1RJTUVTVEFNUCB8CisJCQkJCSBQNTRfSERSX0ZMQUdfREFUQV9PVVRfTk9DQU5DRUw7CisJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJCSphaWQgPSAwOworCisJCQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgeworCQkJCQkvKgorCQkJCQkgKiBJbmplY3RpbmcgYmVhY29ucyBvbiB0b3Agb2YgYSBBUCBpcworCQkJCQkgKiBub3QgYSBnb29kIGlkZWEuLi4gbmV2ZXJ0aGVsZXNzLAorCQkJCQkgKiBpdCBzaG91bGQgYmUgZG9hYmxlLgorCQkJCQkgKi8KKworCQkJCQkqcXVldWUgKz0gUDU0X1FVRVVFX0RBVEE7CisJCQkJCXJldHVybiAxOworCQkJCX0KKworCQkJCSpmbGFncyA9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9USU1FU1RBTVA7CisJCQkJKnF1ZXVlID0gUDU0X1FVRVVFX0JFQUNPTjsKKwkJCQkqZXh0cmFfbGVuID0gSUVFRTgwMjExX01BWF9USU1fTEVOOworCQkJCXJldHVybiAwOworCQkJfSBlbHNlIHsKKwkJCQkqcXVldWUgPSBQNTRfUVVFVUVfTUdNVDsKKwkJCQlyZXQgPSAwOworCQkJfQorCQl9IGVsc2UKKwkJCSpxdWV1ZSArPSBQNTRfUVVFVUVfREFUQTsKKwogCQlpZiAoaW5mby0+Y29udHJvbC5zdGEpCiAJCQkqYWlkID0gaW5mby0+Y29udHJvbC5zdGEtPmFpZDsKIAkJZWxzZQogCQkJKmZsYWdzIHw9IFA1NF9IRFJfRkxBR19EQVRBX09VVF9OT0NBTkNFTDsKKwkJYnJlYWs7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0xMzAzLDcgKzE0NzYsNyBAQAogc3RhdGljIGludCBwNTRfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpjdXJyZW50X3F1ZXVlID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpjdXJyZW50X3F1ZXVlOwogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBwNTRfaGRyICpoZHI7CiAJc3RydWN0IHA1NF90eF9kYXRhICp0eGhkcjsKQEAgLTE0NDYsMTUgKzE2MTksMTcgQEAKIAl9CiAJdHhoZHItPmNyeXB0X29mZnNldCA9IGNyeXB0X29mZnNldDsKIAl0eGhkci0+aHdfcXVldWUgPSBxdWV1ZTsKLQlpZiAoY3VycmVudF9xdWV1ZSkKLQkJdHhoZHItPmJhY2tsb2cgPSBjdXJyZW50X3F1ZXVlLT5sZW47Ci0JZWxzZQotCQl0eGhkci0+YmFja2xvZyA9IDA7CisJdHhoZHItPmJhY2tsb2cgPSBjdXJyZW50X3F1ZXVlLT5sZW47CiAJbWVtc2V0KHR4aGRyLT5kdXJhdGlvbnMsIDAsIHNpemVvZih0eGhkci0+ZHVyYXRpb25zKSk7Ci0JdHhoZHItPnR4X2FudGVubmEgPSAoaW5mby0+YW50ZW5uYV9zZWxfdHggPT0gMCkgPwotCQkyIDogaW5mby0+YW50ZW5uYV9zZWxfdHggLSAxOwotCXR4aGRyLT5vdXRwdXRfcG93ZXIgPSBwcml2LT5vdXRwdXRfcG93ZXI7Ci0JdHhoZHItPmN0c19yYXRlID0gY3RzX3JhdGU7CisJdHhoZHItPnR4X2FudGVubmEgPSAoKGluZm8tPmFudGVubmFfc2VsX3R4ID09IDApID8KKwkJMiA6IGluZm8tPmFudGVubmFfc2VsX3R4IC0gMSkgJiBwcml2LT50eF9kaXZlcnNpdHlfbWFzazsKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQl0eGhkci0+bG9uZ2Jvdy5jdHNfcmF0ZSA9IGN0c19yYXRlOworCQl0eGhkci0+bG9uZ2Jvdy5vdXRwdXRfcG93ZXIgPSBjcHVfdG9fbGUxNihwcml2LT5vdXRwdXRfcG93ZXIpOworCX0gZWxzZSB7CisJCXR4aGRyLT5ub3JtYWwub3V0cHV0X3Bvd2VyID0gcHJpdi0+b3V0cHV0X3Bvd2VyOworCQl0eGhkci0+bm9ybWFsLmN0c19yYXRlID0gY3RzX3JhdGU7CisJfQogCWlmIChwYWRkaW5nKQogCQl0eGhkci0+YWxpZ25bMF0gPSBwYWRkaW5nOwogCkBAIC0xNDY3LDE0ICsxNjQyLDEyIEBACiAJcXVldWVfZGVsYXllZF93b3JrKGRldi0+d29ya3F1ZXVlLCAmcHJpdi0+d29yaywKIAkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoUDU0X1RYX0ZSQU1FX0xJRkVUSU1FKSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAgZXJyOgogCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpICsgc2l6ZW9mKCp0eGhkcikgKyBwYWRkaW5nKTsKLQlpZiAoY3VycmVudF9xdWV1ZSkgewotCQljdXJyZW50X3F1ZXVlLT5sZW4tLTsKLQkJY3VycmVudF9xdWV1ZS0+Y291bnQtLTsKLQl9CisJY3VycmVudF9xdWV1ZS0+bGVuLS07CisJY3VycmVudF9xdWV1ZS0+Y291bnQtLTsKIAlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiB9CiAKQEAgLTE0ODUsOSArMTY1OCw4IEBACiAJc3RydWN0IHA1NF9zZXR1cF9tYWMgKnNldHVwOwogCXUxNiBtb2RlOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnNldHVwKSArCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwgUDU0X0NPTlRST0xfVFlQRV9TRVRVUCwKLQkJCSAgICBHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqc2V0dXApLAorCQkJICAgIFA1NF9DT05UUk9MX1RZUEVfU0VUVVAsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTUwNCwxOSArMTY3NiwyOSBAQAogCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCQltb2RlID0gUDU0X0ZJTFRFUl9UWVBFX0lCU1M7CiAJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUzsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9OT05FOworCQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7CiAJCQlicmVhazsKIAkJfQotCQlpZiAocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKQorCisJCS8qCisJCSAqICJUUkFOU1BBUkVOVCBhbmQgUFJPTUlTQ1VPVVMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSIKKwkJICogU1RTVzQ1WDBDIExNQUMgQVBJIC0gcGFnZSAxMgorCQkgKi8KKwkJaWYgKCgocHJpdi0+ZmlsdGVyX2ZsYWdzICYgRklGX1BST01JU0NfSU5fQlNTKSB8fAorCQkgICAgIChwcml2LT5maWx0ZXJfZmxhZ3MgJiBGSUZfT1RIRVJfQlNTKSkgJiYKKwkJICAgIChtb2RlICE9IFA1NF9GSUxURVJfVFlQRV9QUk9NSVNDVU9VUykpCiAJCQltb2RlIHw9IFA1NF9GSUxURVJfVFlQRV9UUkFOU1BBUkVOVDsKIAl9IGVsc2UKLQkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9SWF9ESVNBQkxFRDsKKwkJbW9kZSA9IFA1NF9GSUxURVJfVFlQRV9ISUJFUk5BVEU7CiAKIAlzZXR1cC0+bWFjX21vZGUgPSBjcHVfdG9fbGUxNihtb2RlKTsKIAltZW1jcHkoc2V0dXAtPm1hY19hZGRyLCBwcml2LT5tYWNfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShzZXR1cC0+YnNzaWQsIHByaXYtPmJzc2lkLCBFVEhfQUxFTik7Ci0Jc2V0dXAtPnJ4X2FudGVubmEgPSAyOyAvKiBhdXRvbWF0aWMgKi8KKwlzZXR1cC0+cnhfYW50ZW5uYSA9IDIgJiBwcml2LT5yeF9kaXZlcnNpdHlfbWFzazsgLyogYXV0b21hdGljICovCiAJc2V0dXAtPnJ4X2FsaWduID0gMDsKIAlpZiAocHJpdi0+ZndfdmFyIDwgMHg1MDApIHsKIAkJc2V0dXAtPnYxLmJhc2ljX3JhdGVfbWFzayA9IGNwdV90b19sZTMyKHByaXYtPmJhc2ljX3JhdGVfbWFzayk7CkBAIC0xNTQ5LDc5ICsxNzMxLDEzNyBAQAogewogCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHA1NF9zY2FuICpjaGFuOworCXN0cnVjdCBwNTRfaGRyICpoZHI7CisJc3RydWN0IHA1NF9zY2FuX2hlYWQgKmhlYWQ7CisJc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5ICppcV9hdXRvY2FsOworCXVuaW9uIHA1NF9zY2FuX2JvZHlfdW5pb24gKmJvZHk7CisJc3RydWN0IHA1NF9zY2FuX3RhaWxfcmF0ZSAqcmF0ZTsKKwlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICpyc3NpOwogCXVuc2lnbmVkIGludCBpOwogCXZvaWQgKmVudHJ5OwotCV9fbGUxNiBmcmVxID0gY3B1X3RvX2xlMTYoZGV2LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAlpbnQgYmFuZCA9IGRldi0+Y29uZi5jaGFubmVsLT5iYW5kOworCV9fbGUxNiBmcmVxID0gY3B1X3RvX2xlMTYoZGV2LT5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpjaGFuKSArCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwgUDU0X0NPTlRST0xfVFlQRV9TQ0FOLAotCQkJICAgIEdGUF9BVE9NSUMpOworCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCpoZWFkKSArCisJCQkgICAgMiArIHNpemVvZigqaXFfYXV0b2NhbCkgKyBzaXplb2YoKmJvZHkpICsKKwkJCSAgICBzaXplb2YoKnJhdGUpICsgMiAqIHNpemVvZigqcnNzaSksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9TQ0FOLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljaGFuID0gKHN0cnVjdCBwNTRfc2NhbiAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpjaGFuKSk7Ci0JbWVtc2V0KGNoYW4tPnBhZGRpbmcxLCAwLCBzaXplb2YoY2hhbi0+cGFkZGluZzEpKTsKLQljaGFuLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7Ci0JY2hhbi0+ZHdlbGwgPSBjcHVfdG9fbGUxNihkd2VsbCk7CisJaGVhZCA9IChzdHJ1Y3QgcDU0X3NjYW5faGVhZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZWFkKSk7CisJbWVtc2V0KGhlYWQtPnNjYW5fcGFyYW1zLCAwLCBzaXplb2YoaGVhZC0+c2Nhbl9wYXJhbXMpKTsKKwloZWFkLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CisJaGVhZC0+ZHdlbGwgPSBjcHVfdG9fbGUxNihkd2VsbCk7CisJaGVhZC0+ZnJlcSA9IGZyZXE7CiAKKwlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQlfX2xlMTYgKnBhX3Bvd2VyX3BvaW50cyA9IChfX2xlMTYgKikgc2tiX3B1dChza2IsIDIpOworCQkqcGFfcG93ZXJfcG9pbnRzID0gY3B1X3RvX2xlMTYoMHgwYyk7CisJfQorCisJaXFfYXV0b2NhbCA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmlxX2F1dG9jYWwpKTsKIAlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+aXFfYXV0b2NhbF9sZW47IGkrKykgewogCQlpZiAocHJpdi0+aXFfYXV0b2NhbFtpXS5mcmVxICE9IGZyZXEpCiAJCQljb250aW51ZTsKIAotCQltZW1jcHkoJmNoYW4tPmlxX2F1dG9jYWwsICZwcml2LT5pcV9hdXRvY2FsW2ldLAotCQkgICAgICAgc2l6ZW9mKCpwcml2LT5pcV9hdXRvY2FsKSk7CisJCW1lbWNweShpcV9hdXRvY2FsLCAmcHJpdi0+aXFfYXV0b2NhbFtpXS5wYXJhbXMsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5KSk7CiAJCWJyZWFrOwogCX0KIAlpZiAoaSA9PSBwcml2LT5pcV9hdXRvY2FsX2xlbikKIAkJZ290byBlcnI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+b3V0cHV0X2xpbWl0X2xlbjsgaSsrKSB7Ci0JCWlmIChwcml2LT5vdXRwdXRfbGltaXRbaV0uZnJlcSAhPSBmcmVxKQorCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKQorCQlib2R5ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZihib2R5LT5sb25nYm93KSk7CisJZWxzZQorCQlib2R5ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZihib2R5LT5ub3JtYWwpKTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5vdXRwdXRfbGltaXQtPmVudHJpZXM7IGkrKykgeworCQlfX2xlMTYgKmVudHJ5X2ZyZXEgPSAodm9pZCAqKSAocHJpdi0+b3V0cHV0X2xpbWl0LT5kYXRhICsKKwkJCQkgICAgIHByaXYtPm91dHB1dF9saW1pdC0+ZW50cnlfc2l6ZSAqIGkpOworCisJCWlmICgqZW50cnlfZnJlcSAhPSBmcmVxKQogCQkJY29udGludWU7CiAKLQkJY2hhbi0+dmFsX2JhcmtlciA9IDB4Mzg7Ci0JCWNoYW4tPnZhbF9icHNrID0gY2hhbi0+ZHVwX2Jwc2sgPQotCQkJcHJpdi0+b3V0cHV0X2xpbWl0W2ldLnZhbF9icHNrOwotCQljaGFuLT52YWxfcXBzayA9IGNoYW4tPmR1cF9xcHNrID0KLQkJCXByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfcXBzazsKLQkJY2hhbi0+dmFsXzE2cWFtID0gY2hhbi0+ZHVwXzE2cWFtID0KLQkJCXByaXYtPm91dHB1dF9saW1pdFtpXS52YWxfMTZxYW07Ci0JCWNoYW4tPnZhbF82NHFhbSA9IGNoYW4tPmR1cF82NHFhbSA9Ci0JCQlwcml2LT5vdXRwdXRfbGltaXRbaV0udmFsXzY0cWFtOworCQlpZiAocHJpdi0+cnhodyA9PSBQRFJfU1lOVEhfRlJPTlRFTkRfTE9OR0JPVykgeworCQkJbWVtY3B5KCZib2R5LT5sb25nYm93LnBvd2VyX2xpbWl0cywKKwkJCSAgICAgICAodm9pZCAqKSBlbnRyeV9mcmVxICsgc2l6ZW9mKF9fbGUxNiksCisJCQkgICAgICAgcHJpdi0+b3V0cHV0X2xpbWl0LT5lbnRyeV9zaXplKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwZGFfY2hhbm5lbF9vdXRwdXRfbGltaXQgKmxpbWl0cyA9CisJCQkgICAgICAgKHZvaWQgKikgZW50cnlfZnJlcTsKKworCQkJYm9keS0+bm9ybWFsLnZhbF9iYXJrZXIgPSAweDM4OworCQkJYm9keS0+bm9ybWFsLnZhbF9icHNrID0gYm9keS0+bm9ybWFsLmR1cF9icHNrID0KKwkJCQlsaW1pdHMtPnZhbF9icHNrOworCQkJYm9keS0+bm9ybWFsLnZhbF9xcHNrID0gYm9keS0+bm9ybWFsLmR1cF9xcHNrID0KKwkJCQlsaW1pdHMtPnZhbF9xcHNrOworCQkJYm9keS0+bm9ybWFsLnZhbF8xNnFhbSA9IGJvZHktPm5vcm1hbC5kdXBfMTZxYW0gPQorCQkJCWxpbWl0cy0+dmFsXzE2cWFtOworCQkJYm9keS0+bm9ybWFsLnZhbF82NHFhbSA9IGJvZHktPm5vcm1hbC5kdXBfNjRxYW0gPQorCQkJCWxpbWl0cy0+dmFsXzY0cWFtOworCQl9CiAJCWJyZWFrOwogCX0KLQlpZiAoaSA9PSBwcml2LT5vdXRwdXRfbGltaXRfbGVuKQorCWlmIChpID09IHByaXYtPm91dHB1dF9saW1pdC0+ZW50cmllcykKIAkJZ290byBlcnI7CiAKLQllbnRyeSA9IHByaXYtPmN1cnZlX2RhdGEtPmRhdGE7Ci0JZm9yIChpID0gMDsgaSA8IHByaXYtPmN1cnZlX2RhdGEtPmNoYW5uZWxzOyBpKyspIHsKKwllbnRyeSA9ICh2b2lkICopKHByaXYtPmN1cnZlX2RhdGEtPmRhdGEgKyBwcml2LT5jdXJ2ZV9kYXRhLT5vZmZzZXQpOworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzOyBpKyspIHsKIAkJaWYgKCooKF9fbGUxNiAqKWVudHJ5KSAhPSBmcmVxKSB7Ci0JCQllbnRyeSArPSBzaXplb2YoX19sZTE2KTsKLQkJCWVudHJ5ICs9IHNpemVvZihzdHJ1Y3QgcDU0X3BhX2N1cnZlX2RhdGFfc2FtcGxlKSAqCi0JCQkJIHByaXYtPmN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbDsKKwkJCWVudHJ5ICs9IHByaXYtPmN1cnZlX2RhdGEtPmVudHJ5X3NpemU7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCWVudHJ5ICs9IHNpemVvZihfX2xlMTYpOwotCQljaGFuLT5wYV9wb2ludHNfcGVyX2N1cnZlID0gODsKLQkJbWVtc2V0KGNoYW4tPmN1cnZlX2RhdGEsIDAsIHNpemVvZigqY2hhbi0+Y3VydmVfZGF0YSkpOwotCQltZW1jcHkoY2hhbi0+Y3VydmVfZGF0YSwgZW50cnksCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZSkgKgotCQkgICAgICAgbWluKCh1OCk4LCBwcml2LT5jdXJ2ZV9kYXRhLT5wb2ludHNfcGVyX2NoYW5uZWwpKTsKKwkJaWYgKHByaXYtPnJ4aHcgPT0gUERSX1NZTlRIX0ZST05URU5EX0xPTkdCT1cpIHsKKwkJCW1lbWNweSgmYm9keS0+bG9uZ2Jvdy5jdXJ2ZV9kYXRhLAorCQkJCSh2b2lkICopIGVudHJ5ICsgc2l6ZW9mKF9fbGUxNiksCisJCQkJcHJpdi0+Y3VydmVfZGF0YS0+ZW50cnlfc2l6ZSk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcDU0X3NjYW5fYm9keSAqY2hhbiA9ICZib2R5LT5ub3JtYWw7CisJCQlzdHJ1Y3QgcGRhX3BhX2N1cnZlX2RhdGEgKmN1cnZlX2RhdGEgPQorCQkJCSh2b2lkICopIHByaXYtPmN1cnZlX2RhdGEtPmRhdGE7CisKKwkJCWVudHJ5ICs9IHNpemVvZihfX2xlMTYpOworCQkJY2hhbi0+cGFfcG9pbnRzX3Blcl9jdXJ2ZSA9IDg7CisJCQltZW1zZXQoY2hhbi0+Y3VydmVfZGF0YSwgMCwgc2l6ZW9mKCpjaGFuLT5jdXJ2ZV9kYXRhKSk7CisJCQltZW1jcHkoY2hhbi0+Y3VydmVfZGF0YSwgZW50cnksCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGUpICoKKwkJCSAgICAgICBtaW4oKHU4KTgsIGN1cnZlX2RhdGEtPnBvaW50c19wZXJfY2hhbm5lbCkpOworCQl9CiAJCWJyZWFrOwogCX0KKwlpZiAoaSA9PSBwcml2LT5jdXJ2ZV9kYXRhLT5lbnRyaWVzKQorCQlnb3RvIGVycjsKIAotCWlmIChwcml2LT5md192YXIgPCAweDUwMCkgewotCQljaGFuLT52MV9yc3NpLm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubXVsKTsKLQkJY2hhbi0+djFfcnNzaS5hZGQgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLmFkZCk7Ci0JfSBlbHNlIHsKLQkJY2hhbi0+djIucnNzaS5tdWwgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCk7Ci0JCWNoYW4tPnYyLnJzc2kuYWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpOwotCQljaGFuLT52Mi5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOwotCQltZW1zZXQoY2hhbi0+djIucnRzX3JhdGVzLCAwLCA4KTsKKwlpZiAoKHByaXYtPmZ3X3ZhciA+PSAweDUwMCkgJiYgKHByaXYtPmZ3X3ZhciA8IDB4NTA5KSkgeworCQlyYXRlID0gKHZvaWQgKikgc2tiX3B1dChza2IsIHNpemVvZigqcmF0ZSkpOworCQlyYXRlLT5iYXNpY19yYXRlX21hc2sgPSBjcHVfdG9fbGUzMihwcml2LT5iYXNpY19yYXRlX21hc2spOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJhdGUtPnJ0c19yYXRlcyk7IGkrKykKKwkJCXJhdGUtPnJ0c19yYXRlc1tpXSA9IGk7CiAJfQorCisJcnNzaSA9IChzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5ICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJzc2kpKTsKKwlyc3NpLT5tdWwgPSBjcHVfdG9fbGUxNihwcml2LT5yc3NpY2FsX2RiW2JhbmRdLm11bCk7CisJcnNzaS0+YWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5hZGQpOworCWlmIChwcml2LT5yeGh3ID09IFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XKSB7CisJCS8qIExvbmdib3cgZnJvbnRlbmQgbmVlZHMgZXZlciBtb3JlICovCisJCXJzc2kgPSAodm9pZCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpyc3NpKSk7CisJCXJzc2ktPm11bCA9IGNwdV90b19sZTE2KHByaXYtPnJzc2ljYWxfZGJbYmFuZF0ubG9uZ2Jvd191bmtuKTsKKwkJcnNzaS0+YWRkID0gY3B1X3RvX2xlMTYocHJpdi0+cnNzaWNhbF9kYltiYW5kXS5sb25nYm93X3VuazIpOworCX0KKworCWlmIChwcml2LT5md192YXIgPj0gMHg1MDkpIHsKKwkJcmF0ZSA9ICh2b2lkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnJhdGUpKTsKKwkJcmF0ZS0+YmFzaWNfcmF0ZV9tYXNrID0gY3B1X3RvX2xlMzIocHJpdi0+YmFzaWNfcmF0ZV9tYXNrKTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemVvZihyYXRlLT5ydHNfcmF0ZXMpOyBpKyspCisJCQlyYXRlLT5ydHNfcmF0ZXNbaV0gPSBpOworCX0KKworCWhkciA9IChzdHJ1Y3QgcDU0X2hkciAqKSBza2ItPmRhdGE7CisJaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIHNpemVvZigqaGRyKSk7CisKIAlwcml2LT50eChkZXYsIHNrYik7CiAJcmV0dXJuIDA7CiAKQEAgLTE2MzEsMjMgKzE4NzEsMjIgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBwNTRfc2V0X2xlZHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBpbnQgbW9kZSwgaW50IGxpbmssIGludCBhY3QpCitzdGF0aWMgaW50IHA1NF9zZXRfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcDU0X2xlZCAqbGVkOwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKmxlZCkgKwotCQkJc2l6ZW9mKHN0cnVjdCBwNTRfaGRyKSwJUDU0X0NPTlRST0xfVFlQRV9MRUQsCi0JCQlHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqbGVkKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX0xFRCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbGVkID0gKHN0cnVjdCBwNTRfbGVkICopc2tiX3B1dChza2IsIHNpemVvZigqbGVkKSk7Ci0JbGVkLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7Ci0JbGVkLT5sZWRfcGVybWFuZW50ID0gY3B1X3RvX2xlMTYobGluayk7Ci0JbGVkLT5sZWRfdGVtcG9yYXJ5ID0gY3B1X3RvX2xlMTYoYWN0KTsKLQlsZWQtPmR1cmF0aW9uID0gY3B1X3RvX2xlMTYoMTAwMCk7CisJbGVkID0gKHN0cnVjdCBwNTRfbGVkICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKmxlZCkpOworCWxlZC0+ZmxhZ3MgPSBjcHVfdG9fbGUxNigweDAwMDMpOworCWxlZC0+bWFza1swXSA9IGxlZC0+bWFza1sxXSA9IGNwdV90b19sZTE2KHByaXYtPnNvZnRsZWRfc3RhdGUpOworCWxlZC0+ZGVsYXlbMF0gPSBjcHVfdG9fbGUxNigxKTsKKwlsZWQtPmRlbGF5WzFdID0gY3B1X3RvX2xlMTYoMCk7CiAJcHJpdi0+dHgoZGV2LCBza2IpOwogCXJldHVybiAwOwogfQpAQCAtMTY2Niw5ICsxOTA1LDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBwNTRfZWRjZiAqZWRjZjsKIAotCXNrYiA9IHA1NF9hbGxvY19za2IoZGV2LCBQNTRfSERSX0ZMQUdfQ09OVFJPTF9PUFNFVCwgc2l6ZW9mKCplZGNmKSArCi0JCQlzaXplb2Yoc3RydWN0IHA1NF9oZHIpLCBQNTRfQ09OVFJPTF9UWVBFX0RDRklOSVQsCi0JCQlHRlBfQVRPTUlDKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqZWRjZiksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9EQ0ZJTklULCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE2OTIsNiArMTkzMCw0MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHA1NF9zZXRfcHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHA1NF9wc20gKnBzbTsKKwl1MTYgbW9kZTsKKwlpbnQgaTsKKworCWlmIChkZXYtPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKKwkJbW9kZSA9IFA1NF9QU00gfCBQNTRfUFNNX0RUSU0gfCBQNTRfUFNNX01DQkM7CisJZWxzZQorCQltb2RlID0gUDU0X1BTTV9DQU07CisKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqcHNtKSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1BTTSwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJcHNtID0gKHN0cnVjdCBwNTRfcHNtICopc2tiX3B1dChza2IsIHNpemVvZigqcHNtKSk7CisJcHNtLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7CisJcHNtLT5haWQgPSBjcHVfdG9fbGUxNihwcml2LT5haWQpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBzbS0+aW50ZXJ2YWxzKTsgaSsrKSB7CisJCXBzbS0+aW50ZXJ2YWxzW2ldLmludGVydmFsID0KKwkJCWNwdV90b19sZTE2KGRldi0+Y29uZi5saXN0ZW5faW50ZXJ2YWwpOworCQlwc20tPmludGVydmFsc1tpXS5wZXJpb2RzID0gY3B1X3RvX2xlMTYoMSk7CisJfQorCisJcHNtLT5iZWFjb25fcnNzaV9za2lwX21heCA9IDYwOworCXBzbS0+cnNzaV9kZWx0YV90aHJlc2hvbGQgPSAwOworCXBzbS0+bnIgPSAwOworCisJcHJpdi0+dHgoZGV2LCBza2IpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcDU0X2JlYWNvbl90aW0oc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKgpAQCAtMTc5Niw2ICsyMDcwLDkgQEAKIAogCXF1ZXVlX2RlbGF5ZWRfd29yayhkZXYtPndvcmtxdWV1ZSwgJnByaXYtPndvcmssIDApOwogCisJcHJpdi0+c29mdGxlZF9zdGF0ZSA9IDA7CisJZXJyID0gcDU0X3NldF9sZWRzKGRldik7CisKIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXJldHVybiBlcnI7CkBAIC0xODA4LDYgKzIwODUsOSBAQAogCiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCXByaXYtPnNvZnRsZWRfc3RhdGUgPSAwOworCXA1NF9zZXRfbGVkcyhkZXYpOworCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT53b3JrKTsKIAlpZiAocHJpdi0+Y2FjaGVkX2JlYWNvbikKIAkJcDU0X3R4X2NhbmNlbChkZXYsIHByaXYtPmNhY2hlZF9iZWFjb24pOwpAQCAtMTg0NSw3ICsyMTI1LDYgQEAKIAogCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKIAlwNTRfc2V0dXBfbWFjKGRldik7Ci0JcDU0X3NldF9sZWRzKGRldiwgMSwgMCwgMCk7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4ODQsNiArMjE2MywxMSBAQAogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAJfQorCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSB7CisJCXJldCA9IHA1NF9zZXRfcHMoZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KIAogb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CkBAIC0xOTIwLDggKzIyMDQsNiBAQAogCQkJZ290byBvdXQ7CiAJfQogCi0JcmV0ID0gcDU0X3NldF9sZWRzKGRldiwgMSwgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHByaXYtPmJzc2lkKSwgMCk7Ci0KIG91dDoKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xOTM1LDEyICsyMjE3LDExIEBACiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAKIAkqdG90YWxfZmxhZ3MgJj0gRklGX1BST01JU0NfSU5fQlNTIHwKLQkJCSgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpID8KLQkJCQlGSUZfRkNTRkFJTCA6IDA7CisJCQlGSUZfT1RIRVJfQlNTOwogCiAJcHJpdi0+ZmlsdGVyX2ZsYWdzID0gKnRvdGFsX2ZsYWdzOwogCi0JaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfUFJPTUlTQ19JTl9CU1MpCisJaWYgKGNoYW5nZWRfZmxhZ3MgJiAoRklGX1BST01JU0NfSU5fQlNTIHwgRklGX09USEVSX0JTUykpCiAJCXA1NF9zZXR1cF9tYWMoZGV2KTsKIH0KIApAQCAtMTk2NywxMCArMjI0OCw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgcDU0X3hib3dfc3ludGggKnhib3c7CiAKLQlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqeGJvdykgKwotCQkJICAgIHNpemVvZihzdHJ1Y3QgcDU0X2hkciksCi0JCQkgICAgUDU0X0NPTlRST0xfVFlQRV9YQk9XX1NZTlRIX0NGRywKLQkJCSAgICBHRlBfS0VSTkVMKTsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0xfT1BTRVQsIHNpemVvZigqeGJvdyksCisJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9YQk9XX1NZTlRIX0NGRywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0xOTk5LDcgKzIyNzgsNyBAQAogCSAqICAgICAgMi4gY2FuY2VsIHN0dWNrIGZyYW1lcyAvIHJlc2V0IHRoZSBkZXZpY2UgaWYgbmVjZXNzYXJ5LgogCSAqLwogCi0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MLCBzaXplb2Yoc3RydWN0IHA1NF9oZHIpICsKKwlza2IgPSBwNTRfYWxsb2Nfc2tiKGRldiwgUDU0X0hEUl9GTEFHX0NPTlRST0wsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBwNTRfc3RhdGlzdGljcyksCiAJCQkgICAgUDU0X0NPTlRST0xfVFlQRV9TVEFUX1JFQURCQUNLLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKQEAgLTIwMjIsOCArMjMwMSw4IEBACiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAKLQltZW1jcHkoc3RhdHMsICZwcml2LT50eF9zdGF0c1s0XSwgc2l6ZW9mKHN0YXRzWzBdKSAqIGRldi0+cXVldWVzKTsKLQorCW1lbWNweShzdGF0cywgJnByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9EQVRBXSwKKwkgICAgICAgc2l6ZW9mKHN0YXRzWzBdKSAqIGRldi0+cXVldWVzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjA1OSw3ICsyMzM4LDcgQEAKIH0KIAogc3RhdGljIGludCBwNTRfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkgICAgICAgY29uc3QgdTggKmxvY2FsX2FkZHJlc3MsIGNvbnN0IHU4ICphZGRyZXNzLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSkKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKQEAgLTIxMTAsOSArMjM4OSw4IEBACiAJfQogCiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0Jc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnJ4a2V5KSArCi0JCQlzaXplb2Yoc3RydWN0IHA1NF9oZHIpLAlQNTRfQ09OVFJPTF9UWVBFX1JYX0tFWUNBQ0hFLAotCQkJR0ZQX0FUT01JQyk7CisJc2tiID0gcDU0X2FsbG9jX3NrYihkZXYsIFA1NF9IRFJfRkxBR19DT05UUk9MX09QU0VULCBzaXplb2YoKnJ4a2V5KSwKKwkJCSAgICBQNTRfQ09OVFJPTF9UWVBFX1JYX0tFWUNBQ0hFLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewogCQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTIxMjMsOCArMjQwMSw4IEBACiAJcnhrZXktPmVudHJ5ID0ga2V5LT5rZXlpZHg7CiAJcnhrZXktPmtleV9pZCA9IGtleS0+a2V5aWR4OwogCXJ4a2V5LT5rZXlfdHlwZSA9IGFsZ287Ci0JaWYgKGFkZHJlc3MpCi0JCW1lbWNweShyeGtleS0+bWFjLCBhZGRyZXNzLCBFVEhfQUxFTik7CisJaWYgKHN0YSkKKwkJbWVtY3B5KHJ4a2V5LT5tYWMsIHN0YS0+YWRkciwgRVRIX0FMRU4pOwogCWVsc2UKIAkJbWVtc2V0KHJ4a2V5LT5tYWMsIH4wLCBFVEhfQUxFTik7CiAJaWYgKGtleS0+YWxnICE9IEFMR19US0lQKSB7CkBAIC0yMTQyLDYgKzI0MjAsOTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QNTRfTEVEUworc3RhdGljIHZvaWQgcDU0X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfZGV2LAorCQkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgcDU0X2xlZF9kZXYgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfZGV2LCBzdHJ1Y3QgcDU0X2xlZF9kZXYsCisJCQkJCSAgICAgICBsZWRfZGV2KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYgPSBsZWQtPmh3X2RldjsKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJLyogRG9uJ3QgdG9nZ2xlIHRoZSBMRUQsIHdoZW4gdGhlIGRldmljZSBpcyBkb3duLiAqLworCWlmIChwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQorCQlyZXR1cm4gOworCisJaWYgKGJyaWdodG5lc3MgIT0gTEVEX09GRikKKwkJcHJpdi0+c29mdGxlZF9zdGF0ZSB8PSBCSVQobGVkLT5pbmRleCk7CisJZWxzZQorCQlwcml2LT5zb2Z0bGVkX3N0YXRlICY9IH5CSVQobGVkLT5pbmRleCk7CisKKwllcnIgPSBwNTRfc2V0X2xlZHMoZGV2KTsKKwlpZiAoZXJyICYmIG5ldF9yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHVwZGF0ZSAlcyBMRUQuXG4iLAorCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbGVkX2Rldi0+bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgcDU0X3JlZ2lzdGVyX2xlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCisJCQkgICAgc3RydWN0IHA1NF9sZWRfZGV2ICpsZWQsCisJCQkgICAgdW5zaWduZWQgaW50IGxlZF9pbmRleCwKKwkJCSAgICBjaGFyICpuYW1lLCBjaGFyICp0cmlnZ2VyKQoreworCWludCBlcnI7CisKKwlpZiAobGVkLT5yZWdpc3RlcmVkKQorCQlyZXR1cm4gLUVFWElTVDsKKworCXNucHJpbnRmKGxlZC0+bmFtZSwgc2l6ZW9mKGxlZC0+bmFtZSksICJwNTQtJXM6OiVzIiwKKwkJIHdpcGh5X25hbWUoZGV2LT53aXBoeSksIG5hbWUpOworCWxlZC0+aHdfZGV2ID0gZGV2OworCWxlZC0+aW5kZXggPSBsZWRfaW5kZXg7CisJbGVkLT5sZWRfZGV2Lm5hbWUgPSBsZWQtPm5hbWU7CisJbGVkLT5sZWRfZGV2LmRlZmF1bHRfdHJpZ2dlciA9IHRyaWdnZXI7CisJbGVkLT5sZWRfZGV2LmJyaWdodG5lc3Nfc2V0ID0gcDU0X2xlZF9icmlnaHRuZXNzX3NldDsKKworCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3Rlcih3aXBoeV9kZXYoZGV2LT53aXBoeSksICZsZWQtPmxlZF9kZXYpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byByZWdpc3RlciAlcyBMRUQuXG4iLAorCQkJd2lwaHlfbmFtZShkZXYtPndpcGh5KSwgbmFtZSk7CisJZWxzZQorCQlsZWQtPnJlZ2lzdGVyZWQgPSAxOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBwNTRfaW5pdF9sZWRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKKwlpbnQgZXJyOworCisJLyoKKwkgKiBUT0RPOgorCSAqIEZpZ3VyZSBvdXQgaWYgdGhlIEVFUFJPTSBjb250YWlucyBzb21lIGhpbnRzIGFib3V0IHRoZSBudW1iZXIKKwkgKiBvZiBhdmFpbGFibGUvcHJvZ3JhbW1hYmxlIExFRHMgb2YgdGhlIGRldmljZS4KKwkgKiBCdXQgZm9yIG5vdywgd2UgY2FuIGFzc3VtZSB0aGF0IHdlIGhhdmUgdHdvIHByb2dyYW1tYWJsZSBMRURzLgorCSAqLworCisJZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChkZXYsICZwcml2LT5hc3NvY19sZWQsIDAsICJhc3NvYyIsCisJCQkgICAgICAgaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShkZXYpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcDU0X3JlZ2lzdGVyX2xlZChkZXYsICZwcml2LT50eF9sZWQsIDEsICJ0eCIsCisJCQkgICAgICAgaWVlZTgwMjExX2dldF90eF9sZWRfbmFtZShkZXYpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcDU0X3NldF9sZWRzKGRldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcDU0X3VucmVnaXN0ZXJfbGVkcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAocHJpdi0+dHhfbGVkLnJlZ2lzdGVyZWQpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZwcml2LT50eF9sZWQubGVkX2Rldik7CisJaWYgKHByaXYtPmFzc29jX2xlZC5yZWdpc3RlcmVkKQorCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmcHJpdi0+YXNzb2NfbGVkLmxlZF9kZXYpOworfQorI2VuZGlmIC8qIENPTkZJR19QNTRfTEVEUyAqLworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcDU0X29wcyA9IHsKIAkudHgJCQk9IHA1NF90eCwKIAkuc3RhcnQJCQk9IHA1NF9zdGFydCwKQEAgLTIxNzUsNiArMjU0Myw4IEBACiAJcHJpdi0+YmFzaWNfcmF0ZV9tYXNrID0gMHgxNWY7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcHJpdi0+dHhfcXVldWUpOwogCWRldi0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAorCQkgICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyB8CiAJCSAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAogCQkgICAgIElFRUU4MDIxMV9IV19OT0lTRV9EQk07CiAKQEAgLTIxODQsMTEgKzI1NTQsMTEgQEAKIAkJCQkgICAgICBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCk7CiAKIAlkZXYtPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSAxMDAwOwkvKiBUT0RPOiBmaW5kIGFjdHVhbCB2YWx1ZSAqLwotCXByaXYtPnR4X3N0YXRzWzBdLmxpbWl0ID0gMTsJCS8qIEJlYWNvbiBxdWV1ZSAqLwotCXByaXYtPnR4X3N0YXRzWzFdLmxpbWl0ID0gMTsJCS8qIFByb2JlIHF1ZXVlIGZvciBIVyBzY2FuICovCi0JcHJpdi0+dHhfc3RhdHNbMl0ubGltaXQgPSAzOwkJLyogcXVldWUgZm9yIE1MTUVzICovCi0JcHJpdi0+dHhfc3RhdHNbM10ubGltaXQgPSAzOwkJLyogQnJvYWRjYXN0IC8gTUMgcXVldWUgKi8KLQlwcml2LT50eF9zdGF0c1s0XS5saW1pdCA9IDU7CQkvKiBEYXRhICovCisJcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0JFQUNPTl0ubGltaXQgPSAxOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9GV1NDQU5dLmxpbWl0ID0gMTsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfTUdNVF0ubGltaXQgPSAzOworCXByaXYtPnR4X3N0YXRzW1A1NF9RVUVVRV9DQUJdLmxpbWl0ID0gMzsKKwlwcml2LT50eF9zdGF0c1tQNTRfUVVFVUVfREFUQV0ubGltaXQgPSA1OwogCWRldi0+cXVldWVzID0gMTsKIAlwcml2LT5ub2lzZSA9IC05NDsKIAkvKgpAQCAtMjIxMiwxMiArMjU4MiwzNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocDU0X2luaXRfY29tbW9uKTsKIAoraW50IHA1NF9yZWdpc3Rlcl9jb21tb24oc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwZGV2KQoreworCWludCBlcnI7CisKKwllcnIgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIocGRldiwgIkNhbm5vdCByZWdpc3RlciBkZXZpY2UgKCVkKS5cbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisjaWZkZWYgQ09ORklHX1A1NF9MRURTCisJZXJyID0gcDU0X2luaXRfbGVkcyhkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisjZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCisKKwlkZXZfaW5mbyhwZGV2LCAiaXMgcmVnaXN0ZXJlZCBhcyAnJXMnXG4iLCB3aXBoeV9uYW1lKGRldi0+d2lwaHkpKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHA1NF9yZWdpc3Rlcl9jb21tb24pOworCiB2b2lkIHA1NF9mcmVlX2NvbW1vbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCiB7CiAJc3RydWN0IHA1NF9jb21tb24gKnByaXYgPSBkZXYtPnByaXY7CiAJa2ZyZWUocHJpdi0+aXFfYXV0b2NhbCk7CiAJa2ZyZWUocHJpdi0+b3V0cHV0X2xpbWl0KTsKIAlrZnJlZShwcml2LT5jdXJ2ZV9kYXRhKTsKKworI2lmZGVmIENPTkZJR19QNTRfTEVEUworCXA1NF91bnJlZ2lzdGVyX2xlZHMoZGV2KTsKKyNlbmRpZiAvKiBDT05GSUdfUDU0X0xFRFMgKi8KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHA1NF9mcmVlX2NvbW1vbik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRjb21tb24uaAppbmRleCBmNTcyOWRlLi43NWVhZDdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0Y29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NGNvbW1vbi5oCkBAIC0yNiwxMiArMjYsMTcgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKICNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX01BU0sJCTB4MDAwNworI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfRFVFVFRFMwkweDAwMDEKKyNkZWZpbmUgUERSX1NZTlRIX0ZST05URU5EX0RVRVRURTIJMHgwMDAyCisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9GUklTQkVFCTB4MDAwMworI2RlZmluZSBQRFJfU1lOVEhfRlJPTlRFTkRfWEJPVwkJMHgwMDA0CisjZGVmaW5lIFBEUl9TWU5USF9GUk9OVEVORF9MT05HQk9XCTB4MDAwNQogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX01BU0sJCTB4MDAxOAogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX1BBX0RFVEVDVE9SCTB4MDAwMAogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX0RJU0FCTEVECTB4MDAwOAogI2RlZmluZSBQRFJfU1lOVEhfSVFfQ0FMX1pJRgkJMHgwMDEwCiAjZGVmaW5lIFBEUl9TWU5USF9GQUFfU1dJVENIX01BU0sJMHgwMDIwCi0jZGVmaW5lIFBEUl9TWU5USF9GQUFfU1dJVENIX0VOQUJMRUQJMHgwMDAxCisjZGVmaW5lIFBEUl9TWU5USF9GQUFfU1dJVENIX0VOQUJMRUQJMHgwMDIwCiAjZGVmaW5lIFBEUl9TWU5USF8yNF9HSFpfTUFTSwkJMHgwMDQwCiAjZGVmaW5lIFBEUl9TWU5USF8yNF9HSFpfRElTQUJMRUQJMHgwMDQwCiAjZGVmaW5lIFBEUl9TWU5USF81X0dIWl9NQVNLCQkweDAwODAKQEAgLTEyNSw5ICsxMzAsMTMgQEAKIAl1OCBkYXRhWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBwNTRfaXFfYXV0b2NhbF9lbnRyeSB7CisJX19sZTE2IGlxX3BhcmFtWzRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBwZGFfaXFfYXV0b2NhbF9lbnRyeSB7CiAgICAgICAgIF9fbGUxNiBmcmVxOwotICAgICAgICBfX2xlMTYgaXFfcGFyYW1bNF07CisJc3RydWN0IHA1NF9pcV9hdXRvY2FsX2VudHJ5IHBhcmFtczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcGRhX2NoYW5uZWxfb3V0cHV0X2xpbWl0IHsKQEAgLTE4MCw2ICsxODksMzUgQEAKIAlfX2xlMTYgYWRkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCBwZGFfY291bnRyeSB7CisJdTggcmVnZG9tYWluOworCXU4IGFscGhhMlsyXTsKKwl1OCBmbGFnczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKgorICogV2FybmluZzogTG9uZ2JvdydzIHN0cnVjdHVyZXMgYXJlIGJvZ3VzLgorICovCitzdHJ1Y3QgcDU0X2NoYW5uZWxfb3V0cHV0X2xpbWl0X2xvbmdib3cgeworCV9fbGUxNiByZl9wb3dlcl9wb2ludHNbMTJdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwNTRfcGFfY3VydmVfZGF0YV9zYW1wbGVfbG9uZ2JvdyB7CisJX19sZTE2IHJmX3Bvd2VyOworCV9fbGUxNiBwYV9kZXRlY3RvcjsKKwlzdHJ1Y3QgeworCQlfX2xlMTYgZGF0YVs0XTsKKwl9IHBvaW50c1szXSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHBkYV9jdXN0b21fd3JhcHBlciB7CisJX19sZTE2IGVudHJpZXM7CisJX19sZTE2IGVudHJ5X3NpemU7CisJX19sZTE2IG9mZnNldDsKKwlfX2xlMTYgbGVuOworCXU4IGRhdGFbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyoKICAqIHRoaXMgZGVmaW5lcyB0aGUgUERSIGNvZGVzIHVzZWQgdG8gYnVpbGQgUERBcyBhcyBkZWZpbmVkIGluIGRvY3VtZW50CiAgKiBudW1iZXIgNTUzMTU1LiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBtaXJyb3JzIHZlcnNpb24gMS4xIG9mIHRoZQpAQCAtMjI1LDggKzI2MywxMyBAQAogLyogcmVzZXJ2ZWQgcmFuZ2UgKDB4MjAwMCAtIDB4N2ZmZikgKi8KIAogLyogY3VzdG9tZXIgcmFuZ2UgKDB4ODAwMCAtIDB4ZmZmZikgKi8KLSNkZWZpbmUgUERSX0JBU0VCQU5EX1JFR0lTVEVSUwkJCTB4ODAwMAotI2RlZmluZSBQRFJfUEVSX0NIQU5ORUxfQkFTRUJBTkRfUkVHSVNURVJTCTB4ODAwMQorI2RlZmluZSBQRFJfQkFTRUJBTkRfUkVHSVNURVJTCQkJCTB4ODAwMAorI2RlZmluZSBQRFJfUEVSX0NIQU5ORUxfQkFTRUJBTkRfUkVHSVNURVJTCQkweDgwMDEKKworLyogdXNlZCBieSBvdXIgbW9kaWZpY2F0ZWQgZWVwcm9tIGltYWdlICovCisjZGVmaW5lIFBEUl9SU1NJX0xJTkVBUl9BUFBST1hJTUFUSU9OX0NVU1RPTQkJMHhERUFECisjZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUU19DVVNUT00JMHhCRUVGCisjZGVmaW5lIFBEUl9QUklTTV9QQV9DQUxfQ1VSVkVfREFUQV9DVVNUT00JCTB4QjA1RAogCiAvKiBQRFIgZGVmaW5pdGlvbnMgZm9yIGRlZmF1bHQgY291bnRyeSAmIGNvdW50cnkgbGlzdCAqLwogI2RlZmluZSBQRFJfQ09VTlRSWV9DRVJUX0NPREUJCTB4ODAKQEAgLTI0MSwxMiArMjg0LDYgQEAKICNkZWZpbmUgUERSX0NPVU5UUllfQ0VSVF9JT0RPT1JfT1VURE9PUgkweDMwCiAjZGVmaW5lIFBEUl9DT1VOVFJZX0NFUlRfSU5ERVgJCTB4MEYKIAotLyogc3RvcmVkIGluIHNrYi0+Y2IgKi8KLXN0cnVjdCBtZW1yZWNvcmQgewotCXUzMiBzdGFydF9hZGRyOwotCXUzMiBlbmRfYWRkcjsKLX07Ci0KIHN0cnVjdCBwNTRfZWVwcm9tX2xtODYgewogCXVuaW9uIHsKIAkJc3RydWN0IHsKQEAgLTMyOSw3ICszNjYsNyBAQAogCXU4IHBhZGRpbmc7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotZW51bSAgcDU0X3R4X2RhdGFfY3J5cHQgeworZW51bSBwNTRfdHhfZGF0YV9jcnlwdCB7CiAJUDU0X0NSWVBUT19OT05FID0gMCwKIAlQNTRfQ1JZUFRPX1dFUCwKIAlQNTRfQ1JZUFRPX1RLSVAsCkBAIC0zNDAsNiArMzc3LDIzIEBACiAJUDU0X0NSWVBUT19BRVNDQ01QCiB9OwogCitlbnVtIHA1NF90eF9kYXRhX3F1ZXVlIHsKKwlQNTRfUVVFVUVfQkVBQ09OCT0gMCwKKwlQNTRfUVVFVUVfRldTQ0FOCT0gMSwKKwlQNTRfUVVFVUVfTUdNVAkJPSAyLAorCVA1NF9RVUVVRV9DQUIJCT0gMywKKwlQNTRfUVVFVUVfREFUQQkJPSA0LAorCisJUDU0X1FVRVVFX0FDX05VTQk9IDQsCisJUDU0X1FVRVVFX0FDX1ZPCQk9IDQsCisJUDU0X1FVRVVFX0FDX1ZJCQk9IDUsCisJUDU0X1FVRVVFX0FDX0JFCQk9IDYsCisJUDU0X1FVRVVFX0FDX0JLCQk9IDcsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlQNTRfUVVFVUVfTlVNCQk9IDgsCit9OworCiBzdHJ1Y3QgcDU0X3R4X2RhdGEgewogCXU4IHJhdGVzZXRbOF07CiAJdTggcnRzX3JhdGVfaWR4OwpAQCAtMzUxLDkgKzQwNSwxOCBAQAogCXU4IGJhY2tsb2c7CiAJX19sZTE2IGR1cmF0aW9uc1s0XTsKIAl1OCB0eF9hbnRlbm5hOwotCXU4IG91dHB1dF9wb3dlcjsKLQl1OCBjdHNfcmF0ZTsKLQl1OCB1bmFsbG9jMlszXTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCBjdHNfcmF0ZTsKKwkJCV9fbGUxNiBvdXRwdXRfcG93ZXI7CisJCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbG9uZ2JvdzsKKwkJc3RydWN0IHsKKwkJCXU4IG91dHB1dF9wb3dlcjsKKwkJCXU4IGN0c19yYXRlOworCQkJdTggdW5hbGxvYzsKKwkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgbm9ybWFsOworCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCXU4IHVuYWxsb2MyWzJdOwogCXU4IGFsaWduWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKQEAgLTQxNCwxMSArNDc3LDE0IEBACiAjZGVmaW5lIFA1NF9TQ0FOX0FDVElWRSBCSVQoMikKICNkZWZpbmUgUDU0X1NDQU5fRklMVEVSIEJJVCgzKQogCi1zdHJ1Y3QgcDU0X3NjYW4geworc3RydWN0IHA1NF9zY2FuX2hlYWQgewogCV9fbGUxNiBtb2RlOwogCV9fbGUxNiBkd2VsbDsKLQl1OCBwYWRkaW5nMVsyMF07Ci0Jc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5IGlxX2F1dG9jYWw7CisJdTggc2Nhbl9wYXJhbXNbMjBdOworCV9fbGUxNiBmcmVxOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwNTRfc2Nhbl9ib2R5IHsKIAl1OCBwYV9wb2ludHNfcGVyX2N1cnZlOwogCXU4IHZhbF9iYXJrZXI7CiAJdTggdmFsX2Jwc2s7CkBAIC00MzAsMjUgKzQ5NiwyOCBAQAogCXU4IGR1cF9xcHNrOwogCXU4IGR1cF8xNnFhbTsKIAl1OCBkdXBfNjRxYW07Ci0JdW5pb24gewotCQlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5IHYxX3Jzc2k7Ci0KLQkJc3RydWN0IHsKLQkJCV9fbGUzMiBiYXNpY19yYXRlX21hc2s7Ci0JCQl1OCBydHNfcmF0ZXNbOF07Ci0JCQlzdHJ1Y3QgcGRhX3Jzc2lfY2FsX2VudHJ5IHJzc2k7Ci0JCX0gdjIgX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgUDU0X1NDQU5fVjFfTEVOIDB4NzAKLSNkZWZpbmUgUDU0X1NDQU5fVjJfTEVOIDB4N2MKK3N0cnVjdCBwNTRfc2Nhbl9ib2R5X2xvbmdib3cgeworCXN0cnVjdCBwNTRfY2hhbm5lbF9vdXRwdXRfbGltaXRfbG9uZ2JvdyBwb3dlcl9saW1pdHM7CisJc3RydWN0IHA1NF9wYV9jdXJ2ZV9kYXRhX3NhbXBsZV9sb25nYm93IGN1cnZlX2RhdGFbOF07CisJX19sZTE2IHVua25bNl07CQkvKiBtYXliZSBtb3JlIHBvd2VyX2xpbWl0cyBvciByYXRlX21hc2sgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCit1bmlvbiBwNTRfc2Nhbl9ib2R5X3VuaW9uIHsKKwlzdHJ1Y3QgcDU0X3NjYW5fYm9keSBub3JtYWw7CisJc3RydWN0IHA1NF9zY2FuX2JvZHlfbG9uZ2JvdyBsb25nYm93OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBwNTRfc2Nhbl90YWlsX3JhdGUgeworCV9fbGUzMiBiYXNpY19yYXRlX21hc2s7CisJdTggcnRzX3JhdGVzWzhdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCBwNTRfbGVkIHsKLQlfX2xlMTYgbW9kZTsKLQlfX2xlMTYgbGVkX3RlbXBvcmFyeTsKLQlfX2xlMTYgbGVkX3Blcm1hbmVudDsKLQlfX2xlMTYgZHVyYXRpb247CisJX19sZTE2IGZsYWdzOworCV9fbGUxNiBtYXNrWzJdOworCV9fbGUxNiBkZWxheVsyXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgcDU0X2VkY2YgewpAQCAtNTExLDYgKzU4MCw3IEBACiAJX19sZTE2IHBlcmlvZHM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBQNTRfUFNNX0NBTQkJCTAKICNkZWZpbmUgUDU0X1BTTQkJCQlCSVQoMCkKICNkZWZpbmUgUDU0X1BTTV9EVElNCQkJQklUKDEpCiAjZGVmaW5lIFA1NF9QU01fTUNCQwkJCUJJVCgyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCmluZGV4IGFhMzY3YTAuLmUzNTY5YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKQEAgLTc5LDYgKzc5LDEyIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCWlmIChwcml2LT5jb21tb24uZndfaW50ZXJmYWNlICE9IEZXX0xNODYpIHsKKwkJZGV2X2VycigmcHJpdi0+cGRldi0+ZGV2LCAid3JvbmcgZmlybXdhcmUsICIKKwkJCSJwbGVhc2UgZ2V0IGEgTE04NihQQ0kpIGZpcm13YXJlIGEgdHJ5IGFnYWluLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWRhdGEgPSAoX19sZTMyICopIHByaXYtPmZpcm13YXJlLT5kYXRhOwogCXJlbWFpbnMgPSBwcml2LT5maXJtd2FyZS0+c2l6ZTsKIAlkZXZpY2VfYWRkciA9IElTTDM4WFhfREVWX0ZJUk1XQVJFX0FERFI7CkBAIC00MDcsOCArNDEzLDcgQEAKIAllcnIgPSByZXF1ZXN0X2lycShwcml2LT5wZGV2LT5pcnEsICZwNTRwX2ludGVycnVwdCwKIAkJCSAgSVJRRl9TSEFSRUQsICJwNTRwY2kiLCBkZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iLAotCQkgICAgICAgd2lwaHlfbmFtZShkZXYtPndpcGh5KSk7CisJCWRldl9lcnIoJnByaXYtPnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBJUlEgaGFuZGxlclxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC00NzAsMzAgKzQ3NSwyNiBAQAogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBDYW5ub3QgZW5hYmxlIG5ldyBQQ0kgZGV2aWNlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZW5hYmxlIG5ldyBQQ0kgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAltZW1fYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAltZW1fbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIAlpZiAobWVtX2xlbiA8IHNpemVvZihzdHJ1Y3QgcDU0cF9jc3IpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IFRvbyBzaG9ydCBQQ0kgcmVzb3VyY2VzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJUb28gc2hvcnQgUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZXJyX2Rpc2FibGVfZGV2OwogCX0KIAogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgInA1NHBjaSIpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGVycl9kaXNhYmxlX2RldjsKIAl9CiAKIAlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykgfHwKIAkgICAgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlXG4iKTsKIAkJZ290byBlcnJfZnJlZV9yZWc7CiAJfQogCkBAIC01MDUsOCArNTA2LDcgQEAKIAogCWRldiA9IHA1NF9pbml0X2NvbW1vbihzaXplb2YoKnByaXYpKTsKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzIChwNTRwY2kpOiBpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZV9yZWc7CiAJfQpAQCAtNTE5LDE3ICs1MTksMTUgQEAKIAogCXByaXYtPm1hcCA9IGlvcmVtYXAobWVtX2FkZHIsIG1lbV9sZW4pOwogCWlmICghcHJpdi0+bWFwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IENhbm5vdCBtYXAgZGV2aWNlIG1lbW9yeVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKLQkJZXJyID0gLUVJTlZBTDsJLy8gVE9ETzogdXNlIGEgYmV0dGVyIGVycm9yIGNvZGU/CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgZGV2aWNlIG1lbW9yeVxuIik7CisJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCX0KIAogCXByaXYtPnJpbmdfY29udHJvbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemVvZigqcHJpdi0+cmluZ19jb250cm9sKSwKIAkJCQkJCSAgJnByaXYtPnJpbmdfY29udHJvbF9kbWEpOwogCWlmICghcHJpdi0+cmluZ19jb250cm9sKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgKHA1NHBjaSk6IENhbm5vdCBhbGxvY2F0ZSByaW5nc1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGFsbG9jYXRlIHJpbmdzXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfaW91bm1hcDsKIAl9CkBAIC01NDMsOCArNTQxLDcgQEAKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwcml2LT5maXJtd2FyZSwgImlzbDM4ODZwY2kiLAogCQkJICAgICAgICZwcml2LT5wZGV2LT5kZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogY2Fubm90IGZpbmQgZmlybXdhcmUgIgotCQkJIihpc2wzODg2cGNpKVxuIiwgcGNpX25hbWUocHJpdi0+cGRldikpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZmluZCBmaXJtd2FyZSAoaXNsMzg4NnBjaSlcbiIpOwogCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwcml2LT5maXJtd2FyZSwgImlzbDM4ODYiLAogCQkJCSAgICAgICAmcHJpdi0+cGRldi0+ZGV2KTsKIAkJaWYgKGVycikKQEAgLTU1OSwxMiArNTU2LDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKIAotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlcyAocDU0cGNpKTogQ2Fubm90IHJlZ2lzdGVyIG5ldGRldmljZVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwllcnIgPSBwNTRfcmVnaXN0ZXJfY29tbW9uKGRldiwgJnBkZXYtPmRldik7CisJaWYgKGVycikKIAkJZ290byBlcnJfZnJlZV9jb21tb247Ci0JfQogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjIyMmFhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5jCkBAIC0wLDAgKzEsNzY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBMYW1wYXJ0ZXIgPGNodW5rZWV5QHdlYi5kZT4KKyAqIENvcHlyaWdodCAyMDA4ICAgICAgIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBkcml2ZXIgaXMgYSBwb3J0IGZyb20gc3RsYzQ1eHg6CisgKglDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgInA1NHNwaS5oIgorI2luY2x1ZGUgInA1NHNwaV9lZXByb20uaCIKKyNpbmNsdWRlICJwNTQuaCIKKworI2luY2x1ZGUgInA1NGNvbW1vbi5oIgorCitNT0RVTEVfRklSTVdBUkUoIjM4MjYuYXJtIik7CitNT0RVTEVfQUxJQVMoInN0bGM0NXh4Iik7CisKKy8qCisgKiBncGlvcyBzaG91bGQgYmUgaGFuZGxlZCBpbiBib2FyZCBmaWxlcyBhbmQgcHJvdmlkZWQgdmlhIHBsYXRmb3JtIGRhdGEsCisgKiBidXQgYmVjYXVzZSBpdCdzIGN1cnJlbnRseSBpbXBvc3NpYmxlIGZvciBwNTRzcGkgdG8gaGF2ZSBhIGhlYWRlciBmaWxlCisgKiBpbiBpbmNsdWRlL2xpbnV4LCBsZXQncyB1c2UgbW9kdWxlIHBhcmFtYXRlcnMgZm9yIG5vdworICovCisKK3N0YXRpYyBpbnQgcDU0c3BpX2dwaW9fcG93ZXIgPSA5NzsKK21vZHVsZV9wYXJhbShwNTRzcGlfZ3Bpb19wb3dlciwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocDU0c3BpX2dwaW9fcG93ZXIsICJncGlvIG51bWJlciBmb3IgcG93ZXIgbGluZSIpOworCitzdGF0aWMgaW50IHA1NHNwaV9ncGlvX2lycSA9IDg3OworbW9kdWxlX3BhcmFtKHA1NHNwaV9ncGlvX2lycSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MocDU0c3BpX2dwaW9faXJxLCAiZ3BpbyBudW1iZXIgZm9yIGlycSBsaW5lIik7CisKK3N0YXRpYyB2b2lkIHA1NHNwaV9zcGlfcmVhZChzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1OCBhZGRyZXNzLAorCQkJICAgICAgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBzcGlfdHJhbnNmZXIgdFsyXTsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UgbTsKKwlfX2xlMTYgYWRkcjsKKworCS8qIFdlIGZpcnN0IHB1c2ggdGhlIGFkZHJlc3MgKi8KKwlhZGRyID0gY3B1X3RvX2xlMTYoYWRkcmVzcyA8PCA4IHwgU1BJX0FEUlNfUkVBRF9CSVRfMTUpOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CisKKwl0WzBdLnR4X2J1ZiA9ICZhZGRyOworCXRbMF0ubGVuID0gc2l6ZW9mKGFkZHIpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKwl0WzFdLnJ4X2J1ZiA9IGJ1ZjsKKwl0WzFdLmxlbiA9IGxlbjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOworCisJc3BpX3N5bmMocHJpdi0+c3BpLCAmbSk7Cit9CisKKworc3RhdGljIHZvaWQgcDU0c3BpX3NwaV93cml0ZShzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1OCBhZGRyZXNzLAorCQkJICAgICBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNwaV90cmFuc2ZlciB0WzNdOworCXN0cnVjdCBzcGlfbWVzc2FnZSBtOworCV9fbGUxNiBhZGRyOworCisJLyogV2UgZmlyc3QgcHVzaCB0aGUgYWRkcmVzcyAqLworCWFkZHIgPSBjcHVfdG9fbGUxNihhZGRyZXNzIDw8IDgpOworCisJc3BpX21lc3NhZ2VfaW5pdCgmbSk7CisJbWVtc2V0KHQsIDAsIHNpemVvZih0KSk7CisKKwl0WzBdLnR4X2J1ZiA9ICZhZGRyOworCXRbMF0ubGVuID0gc2l6ZW9mKGFkZHIpOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0WzBdLCAmbSk7CisKKwl0WzFdLnR4X2J1ZiA9IGJ1ZjsKKwl0WzFdLmxlbiA9IGxlbjsKKwlzcGlfbWVzc2FnZV9hZGRfdGFpbCgmdFsxXSwgJm0pOworCisJaWYgKGxlbiAlIDIpIHsKKwkJX19sZTE2IGxhc3Rfd29yZDsKKwkJbGFzdF93b3JkID0gY3B1X3RvX2xlMTYoKCh1OCAqKWJ1ZilbbGVuIC0gMV0pOworCisJCXRbMl0udHhfYnVmID0gJmxhc3Rfd29yZDsKKwkJdFsyXS5sZW4gPSBzaXplb2YobGFzdF93b3JkKTsKKwkJc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnRbMl0sICZtKTsKKwl9CisKKwlzcGlfc3luYyhwcml2LT5zcGksICZtKTsKK30KKworc3RhdGljIHUxNiBwNTRzcGlfcmVhZDE2KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHIpCit7CisJX19sZTE2IHZhbDsKKworCXA1NHNwaV9zcGlfcmVhZChwcml2LCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7CisKKwlyZXR1cm4gbGUxNl90b19jcHUodmFsKTsKK30KKworc3RhdGljIHUzMiBwNTRzcGlfcmVhZDMyKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHIpCit7CisJX19sZTMyIHZhbDsKKworCXA1NHNwaV9zcGlfcmVhZChwcml2LCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7CisKKwlyZXR1cm4gbGUzMl90b19jcHUodmFsKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHA1NHNwaV93cml0ZTE2KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYsIHU4IGFkZHIsIF9fbGUxNiB2YWwpCit7CisJcDU0c3BpX3NwaV93cml0ZShwcml2LCBhZGRyLCAmdmFsLCBzaXplb2YodmFsKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwNTRzcGlfd3JpdGUzMihzdHJ1Y3QgcDU0c19wcml2ICpwcml2LCB1OCBhZGRyLCBfX2xlMzIgdmFsKQoreworCXA1NHNwaV9zcGlfd3JpdGUocHJpdiwgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCkpOworfQorCitzdHJ1Y3QgcDU0c3BpX3NwaV9yZWcgeworCXUxNiBhZGRyZXNzOwkJLyogX19sZTE2ID8gKi8KKwl1MTYgbGVuZ3RoOworCWNoYXIgKm5hbWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHA1NHNwaV9zcGlfcmVnIHA1NHNwaV9yZWdpc3RlcnNfYXJyYXlbXSA9Cit7CisJeyBTUElfQURSU19BUk1fSU5URVJSVVBUUywJMzIsICJBUk1fSU5UICAgICAiIH0sCisJeyBTUElfQURSU19BUk1fSU5UX0VOLAkJMzIsICJBUk1fSU5UX0VOQSAiIH0sCisJeyBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMsCTMyLCAiSE9TVF9JTlQgICAgIiB9LAorCXsgU1BJX0FEUlNfSE9TVF9JTlRfRU4sCQkzMiwgIkhPU1RfSU5UX0VOQSIgfSwKKwl7IFNQSV9BRFJTX0hPU1RfSU5UX0FDSywJMzIsICJIT1NUX0lOVF9BQ0siIH0sCisJeyBTUElfQURSU19HRU5fUFVSUF8xLAkJMzIsICJHUDFfQ09NTSAgICAiIH0sCisJeyBTUElfQURSU19HRU5fUFVSUF8yLAkJMzIsICJHUDJfQ09NTSAgICAiIH0sCisJeyBTUElfQURSU19ERVZfQ1RSTF9TVEFULAkzMiwgIkRFVl9DVFJMX1NUQSIgfSwKKwl7IFNQSV9BRFJTX0RNQV9EQVRBLAkJMTYsICJETUFfREFUQSAgICAiIH0sCisJeyBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwJMTYsICJETUFfV1JfQ1RSTCAiIH0sCisJeyBTUElfQURSU19ETUFfV1JJVEVfTEVOLAkxNiwgIkRNQV9XUl9MRU4gICIgfSwKKwl7IFNQSV9BRFJTX0RNQV9XUklURV9CQVNFLAkzMiwgIkRNQV9XUl9CQVNFICIgfSwKKwl7IFNQSV9BRFJTX0RNQV9SRUFEX0NUUkwsCTE2LCAiRE1BX1JEX0NUUkwgIiB9LAorCXsgU1BJX0FEUlNfRE1BX1JFQURfTEVOLAkxNiwgIkRNQV9SRF9MRU4gICIgfSwKKwl7IFNQSV9BRFJTX0RNQV9XUklURV9CQVNFLAkzMiwgIkRNQV9SRF9CQVNFICIgfQorfTsKKworc3RhdGljIGludCBwNTRzcGlfd2FpdF9iaXQoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTE2IHJlZywgX19sZTMyIGJpdHMpCit7CisJaW50IGk7CisJX19sZTMyIGJ1ZmZlcjsKKworCWZvciAoaSA9IDA7IGkgPCAyMDAwOyBpKyspIHsKKwkJcDU0c3BpX3NwaV9yZWFkKHByaXYsIHJlZywgJmJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikpOworCQlpZiAoYnVmZmVyID09IGJpdHMpCisJCQlyZXR1cm4gMTsKKworCQltc2xlZXAoMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA1NHNwaV9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCWludCByZXQ7CisKKwkvKiBGSVhNRTogc2hvdWxkIGRyaXZlciB1c2UgaXQncyBvd24gc3RydWN0IGRldmljZT8gKi8KKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZwcml2LT5maXJtd2FyZSwgIjM4MjYuYXJtIiwgJnByaXYtPnNwaS0+ZGV2KTsKKworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAicmVxdWVzdF9maXJtd2FyZSgpIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHA1NF9wYXJzZV9maXJtd2FyZShkZXYsIHByaXYtPmZpcm13YXJlKTsKKwlpZiAocmV0KSB7CisJCXJlbGVhc2VfZmlybXdhcmUocHJpdi0+ZmlybXdhcmUpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA1NHNwaV9yZXF1ZXN0X2VlcHJvbShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmVlcHJvbTsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBhbGxvdyB1c2VycyB0byBjdXN0b21pemUgdGhlaXIgZWVwcm9tLgorCSAqLworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZWVwcm9tLCAiMzgyNi5lZXByb20iLCAmcHJpdi0+c3BpLT5kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9pbmZvKCZwcml2LT5zcGktPmRldiwgImxvYWRpbmcgZGVmYXVsdCBlZXByb20uLi5cbiIpOworCQlyZXQgPSBwNTRfcGFyc2VfZWVwcm9tKGRldiwgKHZvaWQgKikgcDU0c3BpX2VlcHJvbSwKKwkJCQkgICAgICAgc2l6ZW9mKHA1NHNwaV9lZXByb20pKTsKKwl9IGVsc2UgeworCQlkZXZfaW5mbygmcHJpdi0+c3BpLT5kZXYsICJsb2FkaW5nIHVzZXIgZWVwcm9tLi4uXG4iKTsKKwkJcmV0ID0gcDU0X3BhcnNlX2VlcHJvbShkZXYsICh2b2lkICopIGVlcHJvbS0+ZGF0YSwKKwkJCQkgICAgICAgKGludCllZXByb20tPnNpemUpOworCQlyZWxlYXNlX2Zpcm13YXJlKGVlcHJvbSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX3VwbG9hZF9maXJtd2FyZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYpCit7CisJc3RydWN0IHA1NHNfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIGZ3X2xlbiwgZndfYWRkcjsKKwlsb25nIF9md19sZW47CisKKwkvKiBzdG9wIHRoZSBkZXZpY2UgKi8KKwlwNTRzcGlfd3JpdGUxNihwcml2LCBTUElfQURSU19ERVZfQ1RSTF9TVEFULCBjcHVfdG9fbGUxNigKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVCB8CisJCSAgICAgICBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRCkpOworCisJbXNsZWVwKFRBUkdFVF9CT09UX1NMRUVQKTsKKworCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsIGNwdV90b19sZTE2KAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfU1RBUlRfSEFMVEVEKSk7CisKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCisJZndfYWRkciA9IElTTDM4WFhfREVWX0ZJUk1XQVJFX0FERFI7CisJZndfbGVuID0gcHJpdi0+ZmlybXdhcmUtPnNpemU7CisKKwl3aGlsZSAoZndfbGVuID4gMCkgeworCQlfZndfbGVuID0gbWluX3QobG9uZywgZndfbGVuLCBTUElfTUFYX1BBQ0tFVF9TSVpFKTsKKworCQlwNTRzcGlfd3JpdGUxNihwcml2LCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwKKwkJCSAgICAgICBjcHVfdG9fbGUxNihTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFKSk7CisKKwkJaWYgKHA1NHNwaV93YWl0X2JpdChwcml2LCBTUElfQURSU19ETUFfV1JJVEVfQ1RSTCwKKwkJCQkgICAgY3B1X3RvX2xlMzIoSE9TVF9BTExPV0VEKSkgPT0gMCkgeworCQkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJmd191cGxvYWQgbm90IGFsbG93ZWQgIgorCQkJCSJ0byBETUEgd3JpdGUuIik7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCisJCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RNQV9XUklURV9MRU4sCisJCQkgICAgICAgY3B1X3RvX2xlMTYoX2Z3X2xlbikpOworCQlwNTRzcGlfd3JpdGUzMihwcml2LCBTUElfQURSU19ETUFfV1JJVEVfQkFTRSwKKwkJCSAgICAgICBjcHVfdG9fbGUzMihmd19hZGRyKSk7CisKKwkJcDU0c3BpX3NwaV93cml0ZShwcml2LCBTUElfQURSU19ETUFfREFUQSwKKwkJCQkgJnByaXYtPmZpcm13YXJlLT5kYXRhLCBfZndfbGVuKTsKKworCQlmd19sZW4gLT0gX2Z3X2xlbjsKKwkJZndfYWRkciArPSBfZndfbGVuOworCisJCS8qIEZJWE1FOiBJIHRoaW5rIHRoaXMgZG9lc24ndCB3b3JrIGlmIGZpcm13YXJlIGlzIGxhcmdlLAorCQkgKiB0aGlzIGxvb3AgZ29lcyB0byBzZWNvbmQgcm91bmQuIGZ3LT5kYXRhIGlzIG5vdAorCQkgKiBpbmNyZWFzZWQgYXQgYWxsISAqLworCX0KKworCUJVR19PTihmd19sZW4gIT0gMCk7CisKKwkvKiBlbmFibGUgaG9zdCBpbnRlcnJ1cHRzICovCisJcDU0c3BpX3dyaXRlMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRfRU4sCisJCSAgICAgICBjcHVfdG9fbGUzMihTUElfSE9TVF9JTlRTX0RFRkFVTFQpKTsKKworCS8qIGJvb3QgdGhlIGRldmljZSAqLworCXA1NHNwaV93cml0ZTE2KHByaXYsIFNQSV9BRFJTX0RFVl9DVFJMX1NUQVQsIGNwdV90b19sZTE2KAorCQkgICAgICAgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFIHwgU1BJX0NUUkxfU1RBVF9IT1NUX1JFU0VUIHwKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QpKTsKKworCW1zbGVlcChUQVJHRVRfQk9PVF9TTEVFUCk7CisKKwlwNTRzcGlfd3JpdGUxNihwcml2LCBTUElfQURSU19ERVZfQ1RSTF9TVEFULCBjcHVfdG9fbGUxNigKKwkJICAgICAgIFNQSV9DVFJMX1NUQVRfSE9TVF9PVkVSUklERSB8IFNQSV9DVFJMX1NUQVRfUkFNX0JPT1QpKTsKKwltc2xlZXAoVEFSR0VUX0JPT1RfU0xFRVApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfcG93ZXJfb2ZmKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJZGlzYWJsZV9pcnEoZ3Bpb190b19pcnEocDU0c3BpX2dwaW9faXJxKSk7CisJZ3Bpb19zZXRfdmFsdWUocDU0c3BpX2dwaW9fcG93ZXIsIDApOworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfcG93ZXJfb24oc3RydWN0IHA1NHNfcHJpdiAqcHJpdikKK3sKKwlncGlvX3NldF92YWx1ZShwNTRzcGlfZ3Bpb19wb3dlciwgMSk7CisJZW5hYmxlX2lycShncGlvX3RvX2lycShwNTRzcGlfZ3Bpb19pcnEpKTsKKworCS8qCisJICogbmVlZCB0byB3YWl0IGEgd2hpbGUgYmVmb3JlIGRldmljZSBjYW4gYmUgYWNjZXNzZWQsIHRoZSBsZW5naHQKKwkgKiBpcyBqdXN0IGEgZ3Vlc3MKKwkgKi8KKwltc2xlZXAoMTApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcDU0c3BpX2ludF9hY2soc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgdTMyIHZhbCkKK3sKKwlwNTRzcGlfd3JpdGUzMihwcml2LCBTUElfQURSU19IT1NUX0lOVF9BQ0ssIGNwdV90b19sZTMyKHZhbCkpOworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfd2FrZXVwKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCXUzMiBpbnRzOworCisJLyogd2FrZSB0aGUgY2hpcCAqLworCXA1NHNwaV93cml0ZTMyKHByaXYsIFNQSV9BRFJTX0FSTV9JTlRFUlJVUFRTLAorCQkgICAgICAgY3B1X3RvX2xlMzIoU1BJX1RBUkdFVF9JTlRfV0FLRVVQKSk7CisKKwkvKiBBbmQgd2FpdCBmb3IgdGhlIFJFQURZIGludGVycnVwdCAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgSFo7CisKKwlpbnRzID0gIHA1NHNwaV9yZWFkMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl3aGlsZSAoIShpbnRzICYgU1BJX0hPU1RfSU5UX1JFQURZKSkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkKKwkJCQlnb3RvIG91dDsKKwkJaW50cyA9IHA1NHNwaV9yZWFkMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl9CisKKwlwNTRzcGlfaW50X2Fjayhwcml2LCBTUElfSE9TVF9JTlRfUkVBRFkpOworCitvdXQ6CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcDU0c3BpX3NsZWVwKHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJcDU0c3BpX3dyaXRlMzIocHJpdiwgU1BJX0FEUlNfQVJNX0lOVEVSUlVQVFMsCisJCSAgICAgICBjcHVfdG9fbGUzMihTUElfVEFSR0VUX0lOVF9TTEVFUCkpOworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfaW50X3JlYWR5KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJcDU0c3BpX3dyaXRlMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRfRU4sIGNwdV90b19sZTMyKAorCQkgICAgICAgU1BJX0hPU1RfSU5UX1VQREFURSB8IFNQSV9IT1NUX0lOVF9TV19VUERBVEUpKTsKKworCXN3aXRjaCAocHJpdi0+Zndfc3RhdGUpIHsKKwljYXNlIEZXX1NUQVRFX0JPT1RJTkc6CisJCXByaXYtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7CisJCWNvbXBsZXRlKCZwcml2LT5md19jb21wKTsKKwkJYnJlYWs7CisJY2FzZSBGV19TVEFURV9SRVNFVFRJTkc6CisJCXByaXYtPmZ3X3N0YXRlID0gRldfU1RBVEVfUkVBRFk7CisJCS8qIFRPRE86IHJlaW5pdGlhbGl6ZSBzdGF0ZSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcDU0c3BpX3J4KHN0cnVjdCBwNTRzX3ByaXYgKnByaXYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgbGVuOworCisJcDU0c3BpX3dha2V1cChwcml2KTsKKworCS8qIGR1bW15IHJlYWQgdG8gZmx1c2ggU1BJIERNQSBjb250cm9sbGVyIGJ1ZyAqLworCXA1NHNwaV9yZWFkMTYocHJpdiwgU1BJX0FEUlNfR0VOX1BVUlBfMSk7CisKKwlsZW4gPSBwNTRzcGlfcmVhZDE2KHByaXYsIFNQSV9BRFJTX0RNQV9EQVRBKTsKKworCWlmIChsZW4gPT0gMCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgInJ4IHJlcXVlc3Qgb2YgemVybyBieXRlcyIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbik7CisJaWYgKCFza2IpIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJjb3VsZCBub3QgYWxsb2Mgc2tiIik7CisJCXJldHVybiAwOworCX0KKworCXA1NHNwaV9zcGlfcmVhZChwcml2LCBTUElfQURSU19ETUFfREFUQSwgc2tiX3B1dChza2IsIGxlbiksIGxlbik7CisJcDU0c3BpX3NsZWVwKHByaXYpOworCisJaWYgKHA1NF9yeChwcml2LT5odywgc2tiKSA9PSAwKQorCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3QgcDU0c3BpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpjb25maWcpCit7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IGNvbmZpZzsKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlxdWV1ZV93b3JrKHByaXYtPmh3LT53b3JrcXVldWUsICZwcml2LT53b3JrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBwNTRzcGlfdHhfZnJhbWUoc3RydWN0IHA1NHNfcHJpdiAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgcDU0X2hkciAqaGRyID0gKHN0cnVjdCBwNTRfaGRyICopIHNrYi0+ZGF0YTsKKwlzdHJ1Y3QgcDU0c19kbWFfcmVncyBkbWFfcmVnczsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CisJaW50IHJldCA9IDA7CisJdTMyIGludHM7CisKKwlwNTRzcGlfd2FrZXVwKHByaXYpOworCisJZG1hX3JlZ3MuY21kID0gY3B1X3RvX2xlMTYoU1BJX0RNQV9XUklURV9DVFJMX0VOQUJMRSk7CisJZG1hX3JlZ3MubGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOworCWRtYV9yZWdzLmFkZHIgPSBoZHItPnJlcV9pZDsKKworCXA1NHNwaV9zcGlfd3JpdGUocHJpdiwgU1BJX0FEUlNfRE1BX1dSSVRFX0NUUkwsICZkbWFfcmVncywKKwkJCSAgIHNpemVvZihkbWFfcmVncykpOworCisJcDU0c3BpX3NwaV93cml0ZShwcml2LCBTUElfQURSU19ETUFfREFUQSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIDIgKiBIWjsKKwlpbnRzID0gcDU0c3BpX3JlYWQzMihwcml2LCBTUElfQURSU19IT1NUX0lOVEVSUlVQVFMpOworCXdoaWxlICghKGludHMgJiBTUElfSE9TVF9JTlRfV1JfUkVBRFkpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgIldSX1JFQURZIHRpbWVvdXQiKTsKKwkJCXJldCA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKwkJaW50cyA9IHA1NHNwaV9yZWFkMzIocHJpdiwgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTKTsKKwl9CisKKwlwNTRzcGlfaW50X2Fjayhwcml2LCBTUElfSE9TVF9JTlRfV1JfUkVBRFkpOworCXA1NHNwaV9zbGVlcChwcml2KTsKKworb3V0OgorCWlmIChGUkVFX0FGVEVSX1RYKHNrYikpCisJCXA1NF9mcmVlX3NrYihwcml2LT5odywgc2tiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHA1NHNwaV93cV90eChzdHJ1Y3QgcDU0c19wcml2ICpwcml2KQoreworCXN0cnVjdCBwNTRzX3R4X2luZm8gKmVudHJ5OworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqbWluZm87CisJc3RydWN0IHA1NHNfdHhfaW5mbyAqZGluZm87CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZwcml2LT50eF9wZW5kaW5nKSkgeworCQllbnRyeSA9IGxpc3RfZW50cnkocHJpdi0+dHhfcGVuZGluZy5uZXh0LAorCQkJCSAgIHN0cnVjdCBwNTRzX3R4X2luZm8sIHR4X2xpc3QpOworCisJCWxpc3RfZGVsX2luaXQoJmVudHJ5LT50eF9saXN0KTsKKworCQlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwkJZGluZm8gPSBjb250YWluZXJfb2YoKHZvaWQgKikgZW50cnksIHN0cnVjdCBwNTRzX3R4X2luZm8sCisJCQkJICAgICB0eF9saXN0KTsKKwkJbWluZm8gPSBjb250YWluZXJfb2YoKHZvaWQgKikgZGluZm8sIHN0cnVjdCBwNTRfdHhfaW5mbywKKwkJCQkgICAgIGRhdGEpOworCQlpbmZvID0gY29udGFpbmVyX29mKCh2b2lkICopIG1pbmZvLCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8sCisJCQkJICAgIHJhdGVfZHJpdmVyX2RhdGEpOworCQlza2IgPSBjb250YWluZXJfb2YoKHZvaWQgKikgaW5mbywgc3RydWN0IHNrX2J1ZmYsIGNiKTsKKworCQlyZXQgPSBwNTRzcGlfdHhfZnJhbWUocHJpdiwgc2tiKTsKKworCQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJCWlmIChyZXQgPCAwKSB7CisJCQlwNTRfZnJlZV9za2IocHJpdi0+aHcsIHNrYik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBwNTRzcGlfb3BfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBwNTRfdHhfaW5mbyAqbWkgPSAoc3RydWN0IHA1NF90eF9pbmZvICopIGluZm8tPnJhdGVfZHJpdmVyX2RhdGE7CisJc3RydWN0IHA1NHNfdHhfaW5mbyAqZGkgPSAoc3RydWN0IHA1NHNfdHhfaW5mbyAqKSBtaS0+ZGF0YTsKKworCUJVSUxEX0JVR19PTihzaXplb2YoKmRpKSA+IHNpemVvZigobWktPmRhdGEpKSk7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmRpLT50eF9saXN0LCAmcHJpdi0+dHhfcGVuZGluZyk7CisJc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJcXVldWVfd29yayhwcml2LT5ody0+d29ya3F1ZXVlLCAmcHJpdi0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkIHA1NHNwaV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwNTRzX3ByaXYsIHdvcmspOworCXUzMiBpbnRzOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKwlpZiAocHJpdi0+Zndfc3RhdGUgPT0gRldfU1RBVEVfT0ZGICYmCisJICAgIHByaXYtPmZ3X3N0YXRlID09IEZXX1NUQVRFX1JFU0VUKQorCQlnb3RvIG91dDsKKworCWludHMgPSBwNTRzcGlfcmVhZDMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisKKwlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9SRUFEWSkgeworCQlwNTRzcGlfaW50X3JlYWR5KHByaXYpOworCQlwNTRzcGlfaW50X2Fjayhwcml2LCBTUElfSE9TVF9JTlRfUkVBRFkpOworCX0KKworCWlmIChwcml2LT5md19zdGF0ZSAhPSBGV19TVEFURV9SRUFEWSkKKwkJZ290byBvdXQ7CisKKwlpZiAoaW50cyAmIFNQSV9IT1NUX0lOVF9VUERBVEUpIHsKKwkJcDU0c3BpX2ludF9hY2socHJpdiwgU1BJX0hPU1RfSU5UX1VQREFURSk7CisJCXJldCA9IHA1NHNwaV9yeChwcml2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisJaWYgKGludHMgJiBTUElfSE9TVF9JTlRfU1dfVVBEQVRFKSB7CisJCXA1NHNwaV9pbnRfYWNrKHByaXYsIFNQSV9IT1NUX0lOVF9TV19VUERBVEUpOworCQlyZXQgPSBwNTRzcGlfcngocHJpdik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gcDU0c3BpX3dxX3R4KHByaXYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWludHMgPSBwNTRzcGlfcmVhZDMyKHByaXYsIFNQSV9BRFJTX0hPU1RfSU5URVJSVVBUUyk7CisKK291dDoKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKK30KKworc3RhdGljIGludCBwNTRzcGlfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCWludCByZXQgPSAwOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcHJpdi0+bXV0ZXgpKSB7CisJCXJldCA9IC1FSU5UUjsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpdi0+Zndfc3RhdGUgPSBGV19TVEFURV9CT09USU5HOworCisJcDU0c3BpX3Bvd2VyX29uKHByaXYpOworCisJcmV0ID0gcDU0c3BpX3VwbG9hZF9maXJtd2FyZShkZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXA1NHNwaV9wb3dlcl9vZmYocHJpdik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDIwMDApOworCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmcHJpdi0+ZndfY29tcCwKKwkJCQkJCQkgICAgdGltZW91dCk7CisJaWYgKCF0aW1lb3V0KSB7CisJCWRldl9lcnIoJnByaXYtPnNwaS0+ZGV2LCAiZmlybXdhcmUgYm9vdCBmYWlsZWQiKTsKKwkJcDU0c3BpX3Bvd2VyX29mZihwcml2KTsKKwkJcmV0ID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnByaXYtPm11dGV4KSkgeworCQlyZXQgPSAtRUlOVFI7CisJCXA1NHNwaV9wb3dlcl9vZmYocHJpdik7CisJCWdvdG8gb3V0OworCX0KKworCVdBUk5fT04ocHJpdi0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpOworCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcDU0c3BpX29wX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTRzX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwcml2LT5tdXRleCkpIHsKKwkJLyogRklYTUU6IGhvdyB0byBoYW5kbGUgdGhpcyBlcnJvcj8gKi8KKwkJcmV0dXJuOworCX0KKworCVdBUk5fT04ocHJpdi0+Zndfc3RhdGUgIT0gRldfU1RBVEVfUkVBRFkpOworCisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+d29yayk7CisKKwlwNTRzcGlfcG93ZXJfb2ZmKHByaXYpOworCXNwaW5fbG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnR4X3BlbmRpbmcpOworCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKKworCXByaXYtPmZ3X3N0YXRlID0gRldfU1RBVEVfT0ZGOworCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwNTRzcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWh3ID0gcDU0X2luaXRfY29tbW9uKHNpemVvZigqcHJpdikpOworCWlmICghaHcpIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJjb3VsZCBub3QgYWxsb2MgaWVlZTgwMjExX2h3Iik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXByaXYgPSBody0+cHJpdjsKKwlwcml2LT5odyA9IGh3OworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHByaXYpOworCXByaXYtPnNwaSA9IHNwaTsKKworCXNwaS0+Yml0c19wZXJfd29yZCA9IDE2OworCXNwaS0+bWF4X3NwZWVkX2h6ID0gMjQwMDAwMDA7CisKKwlyZXQgPSBzcGlfc2V0dXAoc3BpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgInNwaV9zZXR1cCBmYWlsZWQiKTsKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisJfQorCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHA1NHNwaV9ncGlvX3Bvd2VyLCAicDU0c3BpIHBvd2VyIik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJwb3dlciBHUElPIHJlcXVlc3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCX0KKworCXJldCA9IGdwaW9fcmVxdWVzdChwNTRzcGlfZ3Bpb19pcnEsICJwNTRzcGkgaXJxIik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcHJpdi0+c3BpLT5kZXYsICJpcnEgR1BJTyByZXF1ZXN0IGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKKwl9CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQocDU0c3BpX2dwaW9fcG93ZXIsIDApOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KHA1NHNwaV9ncGlvX2lycSk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShwNTRzcGlfZ3Bpb19pcnEpLAorCQkJICBwNTRzcGlfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAicDU0c3BpIiwKKwkJCSAgcHJpdi0+c3BpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwcml2LT5zcGktPmRldiwgInJlcXVlc3RfaXJxKCkgZmFpbGVkIik7CisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCX0KKworCXNldF9pcnFfdHlwZShncGlvX3RvX2lycShwNTRzcGlfZ3Bpb19pcnEpLAorCQkgICAgIElSUV9UWVBFX0VER0VfUklTSU5HKTsKKworCWRpc2FibGVfaXJxKGdwaW9fdG9faXJxKHA1NHNwaV9ncGlvX2lycSkpOworCisJSU5JVF9XT1JLKCZwcml2LT53b3JrLCBwNTRzcGlfd29yayk7CisJaW5pdF9jb21wbGV0aW9uKCZwcml2LT5md19jb21wKTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdi0+dHhfcGVuZGluZyk7CisJbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOworCVNFVF9JRUVFODAyMTFfREVWKGh3LCAmc3BpLT5kZXYpOworCXByaXYtPmNvbW1vbi5vcGVuID0gcDU0c3BpX29wX3N0YXJ0OworCXByaXYtPmNvbW1vbi5zdG9wID0gcDU0c3BpX29wX3N0b3A7CisJcHJpdi0+Y29tbW9uLnR4ID0gcDU0c3BpX29wX3R4OworCisJcmV0ID0gcDU0c3BpX3JlcXVlc3RfZmlybXdhcmUoaHcpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlX2NvbW1vbjsKKworCXJldCA9IHA1NHNwaV9yZXF1ZXN0X2VlcHJvbShodyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZnJlZV9jb21tb247CisKKwlyZXQgPSBwNTRfcmVnaXN0ZXJfY29tbW9uKGh3LCAmcHJpdi0+c3BpLT5kZXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWVfY29tbW9uOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2NvbW1vbjoKKwlwNTRfZnJlZV9jb21tb24ocHJpdi0+aHcpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHA1NHNwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgcDU0c19wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhwcml2LT5odyk7CisKKwlmcmVlX2lycShncGlvX3RvX2lycShwNTRzcGlfZ3Bpb19pcnEpLCBzcGkpOworCisJZ3Bpb19mcmVlKHA1NHNwaV9ncGlvX3Bvd2VyKTsKKwlncGlvX2ZyZWUocDU0c3BpX2dwaW9faXJxKTsKKwlyZWxlYXNlX2Zpcm13YXJlKHByaXYtPmZpcm13YXJlKTsKKworCW11dGV4X2Rlc3Ryb3koJnByaXYtPm11dGV4KTsKKworCXA1NF9mcmVlX2NvbW1vbihwcml2LT5odyk7CisJaWVlZTgwMjExX2ZyZWVfaHcocHJpdi0+aHcpOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHA1NHNwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLyogdXNlIGN4MzExMHggbmFtZSBiZWNhdXNlIGJvYXJkLW44MDAuYyB1c2VzIHRoYXQgZm9yIHRoZQorCQkgKiBTUEkgcG9ydCAqLworCQkubmFtZQkJPSAiY3gzMTEweCIsCisJCS5idXMJCT0gJnNwaV9idXNfdHlwZSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisKKwkucHJvYmUJCT0gcDU0c3BpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocDU0c3BpX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwNTRzcGlfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBzcGlfcmVnaXN0ZXJfZHJpdmVyKCZwNTRzcGlfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBTUEkgZHJpdmVyOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwNTRzcGlfZXhpdCh2b2lkKQoreworCXNwaV91bnJlZ2lzdGVyX2RyaXZlcigmcDU0c3BpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHA1NHNwaV9pbml0KTsKK21vZHVsZV9leGl0KHA1NHNwaV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYmU4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0c3BpLmgKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGEgcG9ydCBmcm9tIHN0bGM0NXh4OgorICoJQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBQNTRTUElfSAorI2RlZmluZSBQNTRTUElfSAorCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKKyNpbmNsdWRlICJwNTQuaCIKKworLyogQml0IDE1IGlzIHJlYWQvd3JpdGUgYml0OyBPTiA9IFJFQUQsIE9GRiA9IFdSSVRFICovCisjZGVmaW5lIFNQSV9BRFJTX1JFQURfQklUXzE1CQkweDgwMDAKKworI2RlZmluZSBTUElfQURSU19BUk1fSU5URVJSVVBUUwkJMHgwMAorI2RlZmluZSBTUElfQURSU19BUk1fSU5UX0VOCQkweDA0CisKKyNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRFUlJVUFRTCTB4MDgKKyNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRfRU4JCTB4MGMKKyNkZWZpbmUgU1BJX0FEUlNfSE9TVF9JTlRfQUNLCQkweDEwCisKKyNkZWZpbmUgU1BJX0FEUlNfR0VOX1BVUlBfMQkJMHgxNAorI2RlZmluZSBTUElfQURSU19HRU5fUFVSUF8yCQkweDE4CisKKyNkZWZpbmUgU1BJX0FEUlNfREVWX0NUUkxfU1RBVAkJMHgyNiAgICAvKiBoaWdoIHdvcmQgKi8KKworI2RlZmluZSBTUElfQURSU19ETUFfREFUQQkJMHgyOAorCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9DVFJMCQkweDJjCisjZGVmaW5lIFNQSV9BRFJTX0RNQV9XUklURV9MRU4JCTB4MmUKKyNkZWZpbmUgU1BJX0FEUlNfRE1BX1dSSVRFX0JBU0UJCTB4MzAKKworI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9DVFJMCQkweDM0CisjZGVmaW5lIFNQSV9BRFJTX0RNQV9SRUFEX0xFTgkJMHgzNgorI2RlZmluZSBTUElfQURSU19ETUFfUkVBRF9CQVNFCQkweDM4CisKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9IT1NUX09WRVJSSURFCTB4ODAwMAorI2RlZmluZSBTUElfQ1RSTF9TVEFUX1NUQVJUX0hBTFRFRAkweDQwMDAKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9SQU1fQk9PVAkJMHgyMDAwCisjZGVmaW5lIFNQSV9DVFJMX1NUQVRfSE9TVF9SRVNFVAkweDEwMDAKKyNkZWZpbmUgU1BJX0NUUkxfU1RBVF9IT1NUX0NQVV9FTgkweDA4MDAKKworI2RlZmluZSBTUElfRE1BX1dSSVRFX0NUUkxfRU5BQkxFCTB4MDAwMQorI2RlZmluZSBTUElfRE1BX1JFQURfQ1RSTF9FTkFCTEUJMHgwMDAxCisjZGVmaW5lIEhPU1RfQUxMT1dFRAkJCSgxIDw8IDcpCisKKyNkZWZpbmUgU1BJX1RJTUVPVVQJCQkxMDAgICAgICAgICAvKiBtc2VjICovCisKKyNkZWZpbmUgU1BJX01BWF9UWF9QQUNLRVRTCQkzMgorCisjZGVmaW5lIFNQSV9NQVhfUEFDS0VUX1NJWkUJCTMyNzY3CisKKyNkZWZpbmUgU1BJX1RBUkdFVF9JTlRfV0FLRVVQCQkweDAwMDAwMDAxCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1NMRUVQCQkweDAwMDAwMDAyCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX1JERE9ORQkJMHgwMDAwMDAwNAorCisjZGVmaW5lIFNQSV9UQVJHRVRfSU5UX0NUUwkJMHgwMDAwNDAwMAorI2RlZmluZSBTUElfVEFSR0VUX0lOVF9EUgkJMHgwMDAwODAwMAorCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9SRUFEWQkJMHgwMDAwMDAwMQorI2RlZmluZSBTUElfSE9TVF9JTlRfV1JfUkVBRFkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU1BJX0hPU1RfSU5UX1NXX1VQREFURQkJMHgwMDAwMDAwNAorI2RlZmluZSBTUElfSE9TVF9JTlRfVVBEQVRFCQkweDEwMDAwMDAwCisKKy8qIGNsZWFyIHRvIHNlbmQgKi8KKyNkZWZpbmUgU1BJX0hPU1RfSU5UX0NSCQkJMHgwMDAwNDAwMAorCisvKiBkYXRhIHJlYWR5ICovCisjZGVmaW5lIFNQSV9IT1NUX0lOVF9EUgkJCTB4MDAwMDgwMDAKKworI2RlZmluZSBTUElfSE9TVF9JTlRTX0RFRkFVTFQgCQkJCQkJICAgIFwKKwkoU1BJX0hPU1RfSU5UX1JFQURZIHwgU1BJX0hPU1RfSU5UX1VQREFURSB8IFNQSV9IT1NUX0lOVF9TV19VUERBVEUpCisKKyNkZWZpbmUgVEFSR0VUX0JPT1RfU0xFRVAgNTAKKworc3RydWN0IHA1NHNfZG1hX3JlZ3MgeworCV9fbGUxNiBjbWQ7CisJX19sZTE2IGxlbjsKKwlfX2xlMzIgYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgcDU0c190eF9pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHR4X2xpc3Q7Cit9OworCitzdHJ1Y3QgcDU0c19wcml2IHsKKwkvKiBwNTRfY29tbW9uIGhhcyB0byBiZSB0aGUgZmlyc3QgZW50cnkgKi8KKwlzdHJ1Y3QgcDU0X2NvbW1vbiBjb21tb247CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCisJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCBjb21wbGV0aW9uIGZ3X2NvbXA7CisKKwlzcGlubG9ja190IHR4X2xvY2s7CisKKwkvKiBwcm90ZWN0ZWQgYnkgdHhfbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgdHhfcGVuZGluZzsKKworCWVudW0gZndfc3RhdGUgZndfc3RhdGU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKK307CisKKyNlbmRpZiAvKiBQNTRTUElfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHNwaV9lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGlfZWVwcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVhMTA1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRzcGlfZWVwcm9tLmgKQEAgLTAsMCArMSw2NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQ29uZXhhbnQgQW1lcmljYXMgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgMjAwOCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDggQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlAd2ViLmRlPgorICoKKyAqIGJhc2VkIG9uOgorICogIC0gY3gzMTEweCdzIHBkYS5oIGZyb20gTm9raWEKKyAqICAtIGN4MzExMC10cmFuc2Zlci5sb2cgYnkgSm9oYW5uZXMgQmVyZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgUDU0U1BJX0VFUFJPTV9ICisjZGVmaW5lIFA1NFNQSV9FRVBST01fSAorCitzdGF0aWMgdW5zaWduZWQgY2hhciBwNTRzcGlfZWVwcm9tW10gPSB7CisKKy8qIHN0cnVjdCBlZXByb21fcGRhX3dyYXAgKi8KKzB4NDcsIDB4NGQsIDB4NTUsIDB4YWEsCS8qIG1hZ2ljICovCisweDAwLCAweDAwLAkJLyogcGFkICovCisweDAwLCAweDAwLAkJLyogZWVwcm9tX3BkYV9kYXRhX3dyYXAgbGVuZ3RoICovCisweDAwLCAweDAwLCAweDAwLCAweDAwLAkvKiBhcm0gb3Bjb2RlICovCisKKy8qIGJvZ3VzIE1BQyBhZGRyZXNzICovCisweDA0LCAweDAwLCAweDAxLCAweDAxLAkJLyogUERSX01BQ19BRERSRVNTICovCisJMHgwMCwgMHgwMiwgMHhlZSwgMHhjMCwgMHhmZiwgMHhlZSwKKworLyogc3RydWN0IGJvb3RyZWNfZXhwX2lmICovCisweDA2LCAweDAwLCAweDAxLCAweDEwLAkJLyogUERSX0lOVEVSRkFDRV9MSVNUICovCisJMHgwMCwgMHgwMCwJCQkvKiByb2xlICovCisJMHgwZiwgMHgwMCwJCQkvKiBpZl9pZCAqLworCTB4ODUsIDB4MDAsCQkJLyogdmFyaWFudCA9IExvbmdib3cgUkYsIDJHSHogKi8KKwkweDAxLCAweDAwLAkJCS8qIGJ0bV9jb21wYXQgKi8KKwkweDFmLCAweDAwLAkJCS8qIHRvcF9jb21wYXQgKi8KKworMHgwMywgMHgwMCwgMHgwMiwgMHgxMCwJCS8qIFBEUl9IQVJEV0FSRV9QTEFURk9STV9DT01QT05FTlRfSUQgKi8KKwkweDAzLCAweDIwLCAweDAwLCAweDQzLAorCisvKiBzdHJ1Y3QgcGRhX2NvdW50cnlbNl0gKi8KKzB4MGQsIDB4MDAsIDB4MDcsIDB4MTAsCQkvKiBQRFJfQ09VTlRSWV9MSVNUICovCisJMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDIwLCAweDAwLCAweDAwLCAweDAwLAorCTB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsCisJMHgzMSwgMHgwMCwgMHgwMCwgMHgwMCwKKwkweDMyLCAweDAwLCAweDAwLCAweDAwLAorCTB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsCisKKy8qIHN0cnVjdCBwZGFfY291bnRyeSAqLworMHgwMywgMHgwMCwgMHgwOCwgMHgxMCwJCS8qIFBEUl9ERUZBVUxUX0NPVU5UUlkgKi8KKwkweDMwLCAweDAwLCAweDAwLCAweDAwLAkJLyogRVRTSSAqLworCisweDAzLCAweDAwLCAweDAwLCAweDExLAkJLyogUERSX0FOVEVOTkFfR0FJTiAqLworCTB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsCisKKzB4MDksIDB4MDAsIDB4YWQsIDB4ZGUsCQkvKiBQRFJfUlNTSV9MSU5FQVJfQVBQUk9YSU1BVElPTl9DVVNUT00gKi8KKwkweDBhLCAweDAxLCAweDcyLCAweGZlLCAweDFhLCAweDAwLCAweDAwLCAweDAwLAorCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisKKy8qIHN0cnVjdCBwZGFfY3VzdG9tX3dyYXBwZXIgKi8KKzB4MTAsIDB4MDYsIDB4NWQsIDB4YjAsCQkvKiBQRFJfUFJJU01fUEFfQ0FMX0NVUlZFX0RBVEFfQ1VTVE9NICovCisJMHgwZCwgMHgwMCwgMHhlZSwgMHgwMCwJCS8qIDEzIGVudHJpZXMsIDIzOCBieXRlcyBwZXIgZW50cnkgKi8KKwkweDAwLCAweDAwLCAweDE2LCAweDBjLAkJLyogbm8gb2Zmc2V0LCAzMDk0IHRvdGFsIGxlbiAqLworCQkvKiAyNDEyIE1IeiAqLworCQkweDZjLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHg5YSwgMHg4NCwKKwkJCQkweGFhLCAweDhhLCAweGFhLCAweDhhLCAweGFhLCAweDhhLCAweGFhLCAweDhhLAorCQkJCTB4M2MsIDB4YjYsIDB4M2MsIDB4YjYsIDB4M2MsIDB4YjYsIDB4M2MsIDB4YjYsCisJCQkJMHgzYywgMHhiNiwgMHgzYywgMHhiNiwgMHgzYywgMHhiNiwgMHgzYywgMHhiNiwKKwkJCTB4ZjAsIDB4MDAsIDB4OTQsIDB4NmMsCisJCQkJMHg5OSwgMHg4MiwgMHg5OSwgMHg4MiwgMHg5OSwgMHg4MiwgMHg5OSwgMHg4MiwKKwkJCQkweDJiLCAweGFlLCAweDJiLCAweGFlLCAweDJiLCAweGFlLCAweDJiLCAweGFlLAorCQkJCTB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsIDB4MmIsIDB4YWUsCisJCQkweGQwLCAweDAwLCAweGFhLCAweDVhLAorCQkJCTB4ODgsIDB4N2EsIDB4ODgsIDB4N2EsIDB4ODgsIDB4N2EsIDB4ODgsIDB4N2EsCisJCQkJMHgxYSwgMHhhNiwgMHgxYSwgMHhhNiwgMHgxYSwgMHhhNiwgMHgxYSwgMHhhNiwKKwkJCQkweDFhLCAweGE2LCAweDFhLCAweGE2LCAweDFhLCAweGE2LCAweDFhLCAweGE2LAorCQkJMHhhMCwgMHgwMCwgMHhmMywgMHg0NywKKwkJCQkweDZlLCAweDZlLCAweDZlLCAweDZlLCAweDZlLCAweDZlLCAweDZlLCAweDZlLAorCQkJCTB4MDAsIDB4OWEsIDB4MDAsIDB4OWEsIDB4MDAsIDB4OWEsIDB4MDAsIDB4OWEsCisJCQkJMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwgMHgwMCwgMHg5YSwKKwkJCTB4NTAsIDB4MDAsIDB4NTksIDB4MzYsCisJCQkJMHg0MywgMHg1YSwgMHg0MywgMHg1YSwgMHg0MywgMHg1YSwgMHg0MywgMHg1YSwKKwkJCQkweGQ1LCAweDg1LCAweGQ1LCAweDg1LCAweGQ1LCAweDg1LCAweGQ1LCAweDg1LAorCQkJCTB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsIDB4ZDUsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweGU0LCAweDJkLAorCQkJCTB4MTgsIDB4NDYsIDB4MTgsIDB4NDYsIDB4MTgsIDB4NDYsIDB4MTgsIDB4NDYsCisJCQkJMHhhYSwgMHg3MSwgMHhhYSwgMHg3MSwgMHhhYSwgMHg3MSwgMHhhYSwgMHg3MSwKKwkJCQkweGFhLCAweDcxLCAweGFhLCAweDcxLCAweGFhLCAweDcxLCAweGFhLCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQxNyBNSHogKi8KKwkJMHg3MSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4YjksIDB4ODMsCisJCQkJMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwgMHg3ZCwgMHg4YSwKKwkJCQkweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LAorCQkJCTB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsIDB4MGYsIDB4YjYsCisJCQkweGYwLCAweDAwLCAweDJlLCAweDZjLAorCQkJCTB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsIDB4NjgsIDB4ODIsCisJCQkJMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwKKwkJCQkweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLCAweGZhLCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHg4ZCwgMHg1YSwKKwkJCQkweDUyLCAweDdhLCAweDUyLCAweDdhLCAweDUyLCAweDdhLCAweDUyLCAweDdhLAorCQkJCTB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsCisJCQkJMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwgMHhlNCwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4MGEsIDB4NDgsCisJCQkJMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwgMHgzMiwgMHg2ZSwKKwkJCQkweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LAorCQkJCTB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksIDB4YzQsIDB4OTksCisJCQkweDUwLCAweDAwLCAweDdjLCAweDM2LAorCQkJCTB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksIDB4ZmMsIDB4NTksCisJCQkJMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwKKwkJCQkweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LCAweDhlLCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHhmNSwgMHgyZCwKKwkJCQkweGM2LCAweDQ1LCAweGM2LCAweDQ1LCAweGM2LCAweDQ1LCAweGM2LCAweDQ1LAorCQkJCTB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsCisJCQkJMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwgMHg1OCwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0MjIgTUh6ICovCisJCTB4NzYsIDB4MDksCisJCQkweDEwLCAweDAxLCAweGI5LCAweDgzLAorCQkJCTB4N2QsIDB4OGEsIDB4N2QsIDB4OGEsIDB4N2QsIDB4OGEsIDB4N2QsIDB4OGEsCisJCQkJMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwgMHgwZiwgMHhiNiwKKwkJCQkweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LCAweDBmLCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHgyZSwgMHg2YywKKwkJCQkweDY4LCAweDgyLCAweDY4LCAweDgyLCAweDY4LCAweDgyLCAweDY4LCAweDgyLAorCQkJCTB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsIDB4ZmEsIDB4YWQsCisJCQkJMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwgMHhmYSwgMHhhZCwKKwkJCTB4ZDAsIDB4MDAsIDB4OGQsIDB4NWEsCisJCQkJMHg1MiwgMHg3YSwgMHg1MiwgMHg3YSwgMHg1MiwgMHg3YSwgMHg1MiwgMHg3YSwKKwkJCQkweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LCAweGU0LCAweGE1LAorCQkJCTB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsIDB4ZTQsIDB4YTUsCisJCQkweGEwLCAweDAwLCAweDBhLCAweDQ4LAorCQkJCTB4MzIsIDB4NmUsIDB4MzIsIDB4NmUsIDB4MzIsIDB4NmUsIDB4MzIsIDB4NmUsCisJCQkJMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwgMHhjNCwgMHg5OSwKKwkJCQkweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LCAweGM0LCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHg3YywgMHgzNiwKKwkJCQkweGZjLCAweDU5LCAweGZjLCAweDU5LCAweGZjLCAweDU5LCAweGZjLCAweDU5LAorCQkJCTB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsIDB4OGUsIDB4ODUsCisJCQkJMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwgMHg4ZSwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4ZjUsIDB4MmQsCisJCQkJMHhjNiwgMHg0NSwgMHhjNiwgMHg0NSwgMHhjNiwgMHg0NSwgMHhjNiwgMHg0NSwKKwkJCQkweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLCAweDU4LCAweDcxLAorCQkJCTB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsIDB4NTgsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDI3IE1IeiAqLworCQkweDdiLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHg0OCwgMHg4MywKKwkJCQkweDY3LCAweDhhLCAweDY3LCAweDhhLCAweDY3LCAweDhhLCAweDY3LCAweDhhLAorCQkJCTB4ZjksIDB4YjUsIDB4ZjksIDB4YjUsIDB4ZjksIDB4YjUsIDB4ZjksIDB4YjUsCisJCQkJMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwgMHhmOSwgMHhiNSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZmIsIDB4NmIsCisJCQkJMHg1MCwgMHg4MiwgMHg1MCwgMHg4MiwgMHg1MCwgMHg4MiwgMHg1MCwgMHg4MiwKKwkJCQkweGUyLCAweGFkLCAweGUyLCAweGFkLCAweGUyLCAweGFkLCAweGUyLCAweGFkLAorCQkJCTB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsIDB4ZTIsIDB4YWQsCisJCQkweGQwLCAweDAwLCAweDdlLCAweDVhLAorCQkJCTB4MzgsIDB4N2EsIDB4MzgsIDB4N2EsIDB4MzgsIDB4N2EsIDB4MzgsIDB4N2EsCisJCQkJMHhjYSwgMHhhNSwgMHhjYSwgMHhhNSwgMHhjYSwgMHhhNSwgMHhjYSwgMHhhNSwKKwkJCQkweGNhLCAweGE1LCAweGNhLCAweGE1LCAweGNhLCAweGE1LCAweGNhLCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHgxNSwgMHg0OCwKKwkJCQkweDE0LCAweDZlLCAweDE0LCAweDZlLCAweDE0LCAweDZlLCAweDE0LCAweDZlLAorCQkJCTB4YTYsIDB4OTksIDB4YTYsIDB4OTksIDB4YTYsIDB4OTksIDB4YTYsIDB4OTksCisJCQkJMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwgMHhhNiwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4OGUsIDB4MzYsCisJCQkJMHhkOSwgMHg1OSwgMHhkOSwgMHg1OSwgMHhkOSwgMHg1OSwgMHhkOSwgMHg1OSwKKwkJCQkweDZiLCAweDg1LCAweDZiLCAweDg1LCAweDZiLCAweDg1LCAweDZiLCAweDg1LAorCQkJCTB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsIDB4NmIsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweGZlLCAweDJkLAorCQkJCTB4OWQsIDB4NDUsIDB4OWQsIDB4NDUsIDB4OWQsIDB4NDUsIDB4OWQsIDB4NDUsCisJCQkJMHgyZiwgMHg3MSwgMHgyZiwgMHg3MSwgMHgyZiwgMHg3MSwgMHgyZiwgMHg3MSwKKwkJCQkweDJmLCAweDcxLCAweDJmLCAweDcxLCAweDJmLCAweDcxLCAweDJmLCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQzMiBNSHogKi8KKwkJMHg4MCwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4ZDcsIDB4ODIsCisJCQkJMHg1MSwgMHg4YSwgMHg1MSwgMHg4YSwgMHg1MSwgMHg4YSwgMHg1MSwgMHg4YSwKKwkJCQkweGUzLCAweGI1LCAweGUzLCAweGI1LCAweGUzLCAweGI1LCAweGUzLCAweGI1LAorCQkJCTB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsIDB4ZTMsIDB4YjUsCisJCQkweGYwLCAweDAwLCAweGM4LCAweDZiLAorCQkJCTB4MzcsIDB4ODIsIDB4MzcsIDB4ODIsIDB4MzcsIDB4ODIsIDB4MzcsIDB4ODIsCisJCQkJMHhjOSwgMHhhZCwgMHhjOSwgMHhhZCwgMHhjOSwgMHhhZCwgMHhjOSwgMHhhZCwKKwkJCQkweGM5LCAweGFkLCAweGM5LCAweGFkLCAweGM5LCAweGFkLCAweGM5LCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHg2ZiwgMHg1YSwKKwkJCQkweDFkLCAweDdhLCAweDFkLCAweDdhLCAweDFkLCAweDdhLCAweDFkLCAweDdhLAorCQkJCTB4YWYsIDB4YTUsIDB4YWYsIDB4YTUsIDB4YWYsIDB4YTUsIDB4YWYsIDB4YTUsCisJCQkJMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwgMHhhZiwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4MjAsIDB4NDgsCisJCQkJMHhmNiwgMHg2ZCwgMHhmNiwgMHg2ZCwgMHhmNiwgMHg2ZCwgMHhmNiwgMHg2ZCwKKwkJCQkweDg4LCAweDk5LCAweDg4LCAweDk5LCAweDg4LCAweDk5LCAweDg4LCAweDk5LAorCQkJCTB4ODgsIDB4OTksIDB4ODgsIDB4OTksIDB4ODgsIDB4OTksIDB4ODgsIDB4OTksCisJCQkweDUwLCAweDAwLCAweDlmLCAweDM2LAorCQkJCTB4YjUsIDB4NTksIDB4YjUsIDB4NTksIDB4YjUsIDB4NTksIDB4YjUsIDB4NTksCisJCQkJMHg0NywgMHg4NSwgMHg0NywgMHg4NSwgMHg0NywgMHg4NSwgMHg0NywgMHg4NSwKKwkJCQkweDQ3LCAweDg1LCAweDQ3LCAweDg1LCAweDQ3LCAweDg1LCAweDQ3LCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgwNiwgMHgyZSwKKwkJCQkweDc0LCAweDQ1LCAweDc0LCAweDQ1LCAweDc0LCAweDQ1LCAweDc0LCAweDQ1LAorCQkJCTB4MDYsIDB4NzEsIDB4MDYsIDB4NzEsIDB4MDYsIDB4NzEsIDB4MDYsIDB4NzEsCisJCQkJMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwgMHgwNiwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0MzcgTUh6ICovCisJCTB4ODUsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDY3LCAweDgyLAorCQkJCTB4M2EsIDB4OGEsIDB4M2EsIDB4OGEsIDB4M2EsIDB4OGEsIDB4M2EsIDB4OGEsCisJCQkJMHhjYywgMHhiNSwgMHhjYywgMHhiNSwgMHhjYywgMHhiNSwgMHhjYywgMHhiNSwKKwkJCQkweGNjLCAweGI1LCAweGNjLCAweGI1LCAweGNjLCAweGI1LCAweGNjLCAweGI1LAorCQkJMHhmMCwgMHgwMCwgMHg5NSwgMHg2YiwKKwkJCQkweDFmLCAweDgyLCAweDFmLCAweDgyLCAweDFmLCAweDgyLCAweDFmLCAweDgyLAorCQkJCTB4YjEsIDB4YWQsIDB4YjEsIDB4YWQsIDB4YjEsIDB4YWQsIDB4YjEsIDB4YWQsCisJCQkJMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwgMHhiMSwgMHhhZCwKKwkJCTB4ZDAsIDB4MDAsIDB4NjEsIDB4NWEsCisJCQkJMHgwMiwgMHg3YSwgMHgwMiwgMHg3YSwgMHgwMiwgMHg3YSwgMHgwMiwgMHg3YSwKKwkJCQkweDk0LCAweGE1LCAweDk0LCAweGE1LCAweDk0LCAweGE1LCAweDk0LCAweGE1LAorCQkJCTB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsIDB4OTQsIDB4YTUsCisJCQkweGEwLCAweDAwLCAweDJjLCAweDQ4LAorCQkJCTB4ZDgsIDB4NmQsIDB4ZDgsIDB4NmQsIDB4ZDgsIDB4NmQsIDB4ZDgsIDB4NmQsCisJCQkJMHg2YSwgMHg5OSwgMHg2YSwgMHg5OSwgMHg2YSwgMHg5OSwgMHg2YSwgMHg5OSwKKwkJCQkweDZhLCAweDk5LCAweDZhLCAweDk5LCAweDZhLCAweDk5LCAweDZhLCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHhiMSwgMHgzNiwKKwkJCQkweDkyLCAweDU5LCAweDkyLCAweDU5LCAweDkyLCAweDU5LCAweDkyLCAweDU5LAorCQkJCTB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsIDB4MjQsIDB4ODUsCisJCQkJMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MGYsIDB4MmUsCisJCQkJMHg0YiwgMHg0NSwgMHg0YiwgMHg0NSwgMHg0YiwgMHg0NSwgMHg0YiwgMHg0NSwKKwkJCQkweGRkLCAweDcwLCAweGRkLCAweDcwLCAweGRkLCAweDcwLCAweGRkLCAweDcwLAorCQkJCTB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsIDB4ZGQsIDB4NzAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDQyIE1IeiAqLworCQkweDhhLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhmNiwgMHg4MSwKKwkJCQkweDI0LCAweDhhLCAweDI0LCAweDhhLCAweDI0LCAweDhhLCAweDI0LCAweDhhLAorCQkJCTB4YjYsIDB4YjUsIDB4YjYsIDB4YjUsIDB4YjYsIDB4YjUsIDB4YjYsIDB4YjUsCisJCQkJMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwgMHhiNiwgMHhiNSwKKwkJCTB4ZjAsIDB4MDAsIDB4NjIsIDB4NmIsCisJCQkJMHgwNiwgMHg4MiwgMHgwNiwgMHg4MiwgMHgwNiwgMHg4MiwgMHgwNiwgMHg4MiwKKwkJCQkweDk4LCAweGFkLCAweDk4LCAweGFkLCAweDk4LCAweGFkLCAweDk4LCAweGFkLAorCQkJCTB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsIDB4OTgsIDB4YWQsCisJCQkweGQwLCAweDAwLCAweDUyLCAweDVhLAorCQkJCTB4ZTcsIDB4NzksIDB4ZTcsIDB4NzksIDB4ZTcsIDB4NzksIDB4ZTcsIDB4NzksCisJCQkJMHg3OSwgMHhhNSwgMHg3OSwgMHhhNSwgMHg3OSwgMHhhNSwgMHg3OSwgMHhhNSwKKwkJCQkweDc5LCAweGE1LCAweDc5LCAweGE1LCAweDc5LCAweGE1LCAweDc5LCAweGE1LAorCQkJMHhhMCwgMHgwMCwgMHgzNywgMHg0OCwKKwkJCQkweGJhLCAweDZkLCAweGJhLCAweDZkLCAweGJhLCAweDZkLCAweGJhLCAweDZkLAorCQkJCTB4NGMsIDB4OTksIDB4NGMsIDB4OTksIDB4NGMsIDB4OTksIDB4NGMsIDB4OTksCisJCQkJMHg0YywgMHg5OSwgMHg0YywgMHg5OSwgMHg0YywgMHg5OSwgMHg0YywgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4YzIsIDB4MzYsCisJCQkJMHg2ZSwgMHg1OSwgMHg2ZSwgMHg1OSwgMHg2ZSwgMHg1OSwgMHg2ZSwgMHg1OSwKKwkJCQkweDAwLCAweDg1LCAweDAwLCAweDg1LCAweDAwLCAweDg1LCAweDAwLCAweDg1LAorCQkJCTB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsIDB4MDAsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDE3LCAweDJlLAorCQkJCTB4MjIsIDB4NDUsIDB4MjIsIDB4NDUsIDB4MjIsIDB4NDUsIDB4MjIsIDB4NDUsCisJCQkJMHhiNCwgMHg3MCwgMHhiNCwgMHg3MCwgMHhiNCwgMHg3MCwgMHhiNCwgMHg3MCwKKwkJCQkweGI0LCAweDcwLCAweGI0LCAweDcwLCAweGI0LCAweDcwLCAweGI0LCAweDcwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjQ0NyBNSHogKi8KKwkJMHg4ZiwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4NzUsIDB4ODMsCisJCQkJMHg2MSwgMHg4YSwgMHg2MSwgMHg4YSwgMHg2MSwgMHg4YSwgMHg2MSwgMHg4YSwKKwkJCQkweGYzLCAweGI1LCAweGYzLCAweGI1LCAweGYzLCAweGI1LCAweGYzLCAweGI1LAorCQkJCTB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsIDB4ZjMsIDB4YjUsCisJCQkweGYwLCAweDAwLCAweDRiLCAweDZjLAorCQkJCTB4M2YsIDB4ODIsIDB4M2YsIDB4ODIsIDB4M2YsIDB4ODIsIDB4M2YsIDB4ODIsCisJCQkJMHhkMSwgMHhhZCwgMHhkMSwgMHhhZCwgMHhkMSwgMHhhZCwgMHhkMSwgMHhhZCwKKwkJCQkweGQxLCAweGFkLCAweGQxLCAweGFkLCAweGQxLCAweGFkLCAweGQxLCAweGFkLAorCQkJMHhkMCwgMHgwMCwgMHhkYSwgMHg1YSwKKwkJCQkweDFjLCAweDdhLCAweDFjLCAweDdhLCAweDFjLCAweDdhLCAweDFjLCAweDdhLAorCQkJCTB4YWUsIDB4YTUsIDB4YWUsIDB4YTUsIDB4YWUsIDB4YTUsIDB4YWUsIDB4YTUsCisJCQkJMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwgMHhhZSwgMHhhNSwKKwkJCTB4YTAsIDB4MDAsIDB4NmQsIDB4NDgsCisJCQkJMHhlOSwgMHg2ZCwgMHhlOSwgMHg2ZCwgMHhlOSwgMHg2ZCwgMHhlOSwgMHg2ZCwKKwkJCQkweDdiLCAweDk5LCAweDdiLCAweDk5LCAweDdiLCAweDk5LCAweDdiLCAweDk5LAorCQkJCTB4N2IsIDB4OTksIDB4N2IsIDB4OTksIDB4N2IsIDB4OTksIDB4N2IsIDB4OTksCisJCQkweDUwLCAweDAwLCAweGM2LCAweDM2LAorCQkJCTB4OTIsIDB4NTksIDB4OTIsIDB4NTksIDB4OTIsIDB4NTksIDB4OTIsIDB4NTksCisJCQkJMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwgMHgyNCwgMHg4NSwKKwkJCQkweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LCAweDI0LCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgxNSwgMHgyZSwKKwkJCQkweDNjLCAweDQ1LCAweDNjLCAweDQ1LCAweDNjLCAweDQ1LCAweDNjLCAweDQ1LAorCQkJCTB4Y2UsIDB4NzAsIDB4Y2UsIDB4NzAsIDB4Y2UsIDB4NzAsIDB4Y2UsIDB4NzAsCisJCQkJMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwgMHhjZSwgMHg3MCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI0NTIgTUh6ICovCisJCTB4OTQsIDB4MDksCisJCQkweDEwLCAweDAxLCAweGY0LCAweDg0LAorCQkJCTB4OWUsIDB4OGEsIDB4OWUsIDB4OGEsIDB4OWUsIDB4OGEsIDB4OWUsIDB4OGEsCisJCQkJMHgzMCwgMHhiNiwgMHgzMCwgMHhiNiwgMHgzMCwgMHhiNiwgMHgzMCwgMHhiNiwKKwkJCQkweDMwLCAweGI2LCAweDMwLCAweGI2LCAweDMwLCAweGI2LCAweDMwLCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHgzNCwgMHg2ZCwKKwkJCQkweDc3LCAweDgyLCAweDc3LCAweDgyLCAweDc3LCAweDgyLCAweDc3LCAweDgyLAorCQkJCTB4MDksIDB4YWUsIDB4MDksIDB4YWUsIDB4MDksIDB4YWUsIDB4MDksIDB4YWUsCisJCQkJMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwgMHgwOSwgMHhhZSwKKwkJCTB4ZDAsIDB4MDAsIDB4NjIsIDB4NWIsCisJCQkJMHg1MCwgMHg3YSwgMHg1MCwgMHg3YSwgMHg1MCwgMHg3YSwgMHg1MCwgMHg3YSwKKwkJCQkweGUyLCAweGE1LCAweGUyLCAweGE1LCAweGUyLCAweGE1LCAweGUyLCAweGE1LAorCQkJCTB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsIDB4ZTIsIDB4YTUsCisJCQkweGEwLCAweDAwLCAweGEyLCAweDQ4LAorCQkJCTB4MTcsIDB4NmUsIDB4MTcsIDB4NmUsIDB4MTcsIDB4NmUsIDB4MTcsIDB4NmUsCisJCQkJMHhhOSwgMHg5OSwgMHhhOSwgMHg5OSwgMHhhOSwgMHg5OSwgMHhhOSwgMHg5OSwKKwkJCQkweGE5LCAweDk5LCAweGE5LCAweDk5LCAweGE5LCAweDk5LCAweGE5LCAweDk5LAorCQkJMHg1MCwgMHgwMCwgMHhjOSwgMHgzNiwKKwkJCQkweGI3LCAweDU5LCAweGI3LCAweDU5LCAweGI3LCAweDU5LCAweGI3LCAweDU5LAorCQkJCTB4NDksIDB4ODUsIDB4NDksIDB4ODUsIDB4NDksIDB4ODUsIDB4NDksIDB4ODUsCisJCQkJMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwgMHg0OSwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MTIsIDB4MmUsCisJCQkJMHg1NywgMHg0NSwgMHg1NywgMHg0NSwgMHg1NywgMHg0NSwgMHg1NywgMHg0NSwKKwkJCQkweGU5LCAweDcwLCAweGU5LCAweDcwLCAweGU5LCAweDcwLCAweGU5LCAweDcwLAorCQkJCTB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsIDB4ZTksIDB4NzAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNDUyIE1IeiAqLworCQkweDk5LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHg3NCwgMHg4NiwKKwkJCQkweGRiLCAweDhhLCAweGRiLCAweDhhLCAweGRiLCAweDhhLCAweGRiLCAweDhhLAorCQkJCTB4NmQsIDB4YjYsIDB4NmQsIDB4YjYsIDB4NmQsIDB4YjYsIDB4NmQsIDB4YjYsCisJCQkJMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwgMHg2ZCwgMHhiNiwKKwkJCTB4ZjAsIDB4MDAsIDB4MWUsIDB4NmUsCisJCQkJMHhiMCwgMHg4MiwgMHhiMCwgMHg4MiwgMHhiMCwgMHg4MiwgMHhiMCwgMHg4MiwKKwkJCQkweDQyLCAweGFlLCAweDQyLCAweGFlLCAweDQyLCAweGFlLCAweDQyLCAweGFlLAorCQkJCTB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsIDB4NDIsIDB4YWUsCisJCQkweGQwLCAweDAwLCAweGViLCAweDViLAorCQkJCTB4ODUsIDB4N2EsIDB4ODUsIDB4N2EsIDB4ODUsIDB4N2EsIDB4ODUsIDB4N2EsCisJCQkJMHgxNywgMHhhNiwgMHgxNywgMHhhNiwgMHgxNywgMHhhNiwgMHgxNywgMHhhNiwKKwkJCQkweDE3LCAweGE2LCAweDE3LCAweGE2LCAweDE3LCAweGE2LCAweDE3LCAweGE2LAorCQkJMHhhMCwgMHgwMCwgMHhkOCwgMHg0OCwKKwkJCQkweDQ2LCAweDZlLCAweDQ2LCAweDZlLCAweDQ2LCAweDZlLCAweDQ2LCAweDZlLAorCQkJCTB4ZDgsIDB4OTksIDB4ZDgsIDB4OTksIDB4ZDgsIDB4OTksIDB4ZDgsIDB4OTksCisJCQkJMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwgMHhkOCwgMHg5OSwKKwkJCTB4NTAsIDB4MDAsIDB4Y2QsIDB4MzYsCisJCQkJMHhkYiwgMHg1OSwgMHhkYiwgMHg1OSwgMHhkYiwgMHg1OSwgMHhkYiwgMHg1OSwKKwkJCQkweDZkLCAweDg1LCAweDZkLCAweDg1LCAweDZkLCAweDg1LCAweDZkLCAweDg1LAorCQkJCTB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsIDB4NmQsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDEwLCAweDJlLAorCQkJCTB4NzEsIDB4NDUsIDB4NzEsIDB4NDUsIDB4NzEsIDB4NDUsIDB4NzEsIDB4NDUsCisJCQkJMHgwMywgMHg3MSwgMHgwMywgMHg3MSwgMHgwMywgMHg3MSwgMHgwMywgMHg3MSwKKwkJCQkweDAzLCAweDcxLCAweDAzLCAweDcxLCAweDAzLCAweDcxLCAweDAzLCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKwkJLyogMjU1NyBNSHogKi8KKwkJMHg5ZSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4ZjMsIDB4ODcsCisJCQkJMHgxNywgMHg4YiwgMHgxNywgMHg4YiwgMHgxNywgMHg4YiwgMHgxNywgMHg4YiwKKwkJCQkweGE5LCAweGI2LCAweGE5LCAweGI2LCAweGE5LCAweGI2LCAweGE5LCAweGI2LAorCQkJCTB4YTksIDB4YjYsIDB4YTksIDB4YjYsIDB4YTksIDB4YjYsIDB4YTksIDB4YjYsCisJCQkweGYwLCAweDAwLCAweDA3LCAweDZmLAorCQkJCTB4ZTksIDB4ODIsIDB4ZTksIDB4ODIsIDB4ZTksIDB4ODIsIDB4ZTksIDB4ODIsCisJCQkJMHg3YiwgMHhhZSwgMHg3YiwgMHhhZSwgMHg3YiwgMHhhZSwgMHg3YiwgMHhhZSwKKwkJCQkweDdiLCAweGFlLCAweDdiLCAweGFlLCAweDdiLCAweGFlLCAweDdiLCAweGFlLAorCQkJMHhkMCwgMHgwMCwgMHg3MywgMHg1YywKKwkJCQkweGJhLCAweDdhLCAweGJhLCAweDdhLCAweGJhLCAweDdhLCAweGJhLCAweDdhLAorCQkJCTB4NGMsIDB4YTYsIDB4NGMsIDB4YTYsIDB4NGMsIDB4YTYsIDB4NGMsIDB4YTYsCisJCQkJMHg0YywgMHhhNiwgMHg0YywgMHhhNiwgMHg0YywgMHhhNiwgMHg0YywgMHhhNiwKKwkJCTB4YTAsIDB4MDAsIDB4MGQsIDB4NDksCisJCQkJMHg3NCwgMHg2ZSwgMHg3NCwgMHg2ZSwgMHg3NCwgMHg2ZSwgMHg3NCwgMHg2ZSwKKwkJCQkweDA2LCAweDlhLCAweDA2LCAweDlhLCAweDA2LCAweDlhLCAweDA2LCAweDlhLAorCQkJCTB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsIDB4MDYsIDB4OWEsCisJCQkweDUwLCAweDAwLCAweGQxLCAweDM2LAorCQkJCTB4ZmYsIDB4NTksIDB4ZmYsIDB4NTksIDB4ZmYsIDB4NTksIDB4ZmYsIDB4NTksCisJCQkJMHg5MSwgMHg4NSwgMHg5MSwgMHg4NSwgMHg5MSwgMHg4NSwgMHg5MSwgMHg4NSwKKwkJCQkweDkxLCAweDg1LCAweDkxLCAweDg1LCAweDkxLCAweDg1LCAweDkxLCAweDg1LAorCQkJMHgwMCwgMHgwMCwgMHgwZSwgMHgyZSwKKwkJCQkweDhiLCAweDQ1LCAweDhiLCAweDQ1LCAweDhiLCAweDQ1LCAweDhiLCAweDQ1LAorCQkJCTB4MWQsIDB4NzEsIDB4MWQsIDB4NzEsIDB4MWQsIDB4NzEsIDB4MWQsIDB4NzEsCisJCQkJMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwgMHgxZCwgMHg3MSwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDgwLCAweDgwLCAweDAwLAorCisJCS8qIDI1NjIgTUh6ICovCisJCTB4YTMsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDcyLCAweDg5LAorCQkJCTB4NTQsIDB4OGIsIDB4NTQsIDB4OGIsIDB4NTQsIDB4OGIsIDB4NTQsIDB4OGIsCisJCQkJMHhlNiwgMHhiNiwgMHhlNiwgMHhiNiwgMHhlNiwgMHhiNiwgMHhlNiwgMHhiNiwKKwkJCQkweGU2LCAweGI2LCAweGU2LCAweGI2LCAweGU2LCAweGI2LCAweGU2LCAweGI2LAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHg2ZiwKKwkJCQkweDIxLCAweDgzLCAweDIxLCAweDgzLCAweDIxLCAweDgzLCAweDIxLCAweDgzLAorCQkJCTB4YjMsIDB4YWUsIDB4YjMsIDB4YWUsIDB4YjMsIDB4YWUsIDB4YjMsIDB4YWUsCisJCQkJMHhiMywgMHhhZSwgMHhiMywgMHhhZSwgMHhiMywgMHhhZSwgMHhiMywgMHhhZSwKKwkJCTB4ZDAsIDB4MDAsIDB4ZmIsIDB4NWMsCisJCQkJMHhlZSwgMHg3YSwgMHhlZSwgMHg3YSwgMHhlZSwgMHg3YSwgMHhlZSwgMHg3YSwKKwkJCQkweDgwLCAweGE2LCAweDgwLCAweGE2LCAweDgwLCAweGE2LCAweDgwLCAweGE2LAorCQkJCTB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsIDB4ODAsIDB4YTYsCisJCQkweGEwLCAweDAwLCAweDQzLCAweDQ5LAorCQkJCTB4YTMsIDB4NmUsIDB4YTMsIDB4NmUsIDB4YTMsIDB4NmUsIDB4YTMsIDB4NmUsCisJCQkJMHgzNSwgMHg5YSwgMHgzNSwgMHg5YSwgMHgzNSwgMHg5YSwgMHgzNSwgMHg5YSwKKwkJCQkweDM1LCAweDlhLCAweDM1LCAweDlhLCAweDM1LCAweDlhLCAweDM1LCAweDlhLAorCQkJMHg1MCwgMHgwMCwgMHhkNCwgMHgzNiwKKwkJCQkweDI0LCAweDVhLCAweDI0LCAweDVhLCAweDI0LCAweDVhLCAweDI0LCAweDVhLAorCQkJCTB4YjYsIDB4ODUsIDB4YjYsIDB4ODUsIDB4YjYsIDB4ODUsIDB4YjYsIDB4ODUsCisJCQkJMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwgMHhiNiwgMHg4NSwKKwkJCTB4MDAsIDB4MDAsIDB4MGIsIDB4MmUsCisJCQkJMHhhNiwgMHg0NSwgMHhhNiwgMHg0NSwgMHhhNiwgMHg0NSwgMHhhNiwgMHg0NSwKKwkJCQkweDM4LCAweDcxLCAweDM4LCAweDcxLCAweDM4LCAweDcxLCAweDM4LCAweDcxLAorCQkJCTB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsIDB4MzgsIDB4NzEsCisJCQkweDAwLCAweDgwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwNiwgMHg4MCwgMHg4MCwgMHgwMCwKKworCQkvKiAyNTcyIE1IeiAqLworCQkweGE4LCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHhmMSwgMHg4YSwKKwkJCQkweDkxLCAweDhiLCAweDkxLCAweDhiLCAweDkxLCAweDhiLCAweDkxLCAweDhiLAorCQkJCTB4MjMsIDB4YjcsIDB4MjMsIDB4YjcsIDB4MjMsIDB4YjcsIDB4MjMsIDB4YjcsCisJCQkJMHgyMywgMHhiNywgMHgyMywgMHhiNywgMHgyMywgMHhiNywgMHgyMywgMHhiNywKKwkJCTB4ZjAsIDB4MDAsIDB4ZDksIDB4NzAsCisJCQkJMHg1YSwgMHg4MywgMHg1YSwgMHg4MywgMHg1YSwgMHg4MywgMHg1YSwgMHg4MywKKwkJCQkweGVjLCAweGFlLCAweGVjLCAweGFlLCAweGVjLCAweGFlLCAweGVjLCAweGFlLAorCQkJCTB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsIDB4ZWMsIDB4YWUsCisJCQkweGQwLCAweDAwLCAweDgzLCAweDVkLAorCQkJCTB4MjMsIDB4N2IsIDB4MjMsIDB4N2IsIDB4MjMsIDB4N2IsIDB4MjMsIDB4N2IsCisJCQkJMHhiNSwgMHhhNiwgMHhiNSwgMHhhNiwgMHhiNSwgMHhhNiwgMHhiNSwgMHhhNiwKKwkJCQkweGI1LCAweGE2LCAweGI1LCAweGE2LCAweGI1LCAweGE2LCAweGI1LCAweGE2LAorCQkJMHhhMCwgMHgwMCwgMHg3OCwgMHg0OSwKKwkJCQkweGQxLCAweDZlLCAweGQxLCAweDZlLCAweGQxLCAweDZlLCAweGQxLCAweDZlLAorCQkJCTB4NjMsIDB4OWEsIDB4NjMsIDB4OWEsIDB4NjMsIDB4OWEsIDB4NjMsIDB4OWEsCisJCQkJMHg2MywgMHg5YSwgMHg2MywgMHg5YSwgMHg2MywgMHg5YSwgMHg2MywgMHg5YSwKKwkJCTB4NTAsIDB4MDAsIDB4ZDgsIDB4MzYsCisJCQkJMHg0OCwgMHg1YSwgMHg0OCwgMHg1YSwgMHg0OCwgMHg1YSwgMHg0OCwgMHg1YSwKKwkJCQkweGRhLCAweDg1LCAweGRhLCAweDg1LCAweGRhLCAweDg1LCAweGRhLCAweDg1LAorCQkJCTB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsIDB4ZGEsIDB4ODUsCisJCQkweDAwLCAweDAwLCAweDA5LCAweDJlLAorCQkJCTB4YzAsIDB4NDUsIDB4YzAsIDB4NDUsIDB4YzAsIDB4NDUsIDB4YzAsIDB4NDUsCisJCQkJMHg1MiwgMHg3MSwgMHg1MiwgMHg3MSwgMHg1MiwgMHg3MSwgMHg1MiwgMHg3MSwKKwkJCQkweDUyLCAweDcxLCAweDUyLCAweDcxLCAweDUyLCAweDcxLCAweDUyLCAweDcxLAorCQkJMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCTB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsCisJCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4ODAsIDB4ODAsIDB4MDAsCisKKy8qCisgKiBOb3QgcmVhbGx5IHN1cmUgaWYgdGhpcyBpcyBhY3R1YWxseSB0aGUgcG93ZXJfbGltaXQgZGF0YWJhc2UsCisgKiBpdCBsb29rcyBhIGJpdCAicmVsYXRlZCIgdG8gUERSX1BSSVNNX1pJRl9UWF9JUV9DQUxJQlJBVElPTgorICovCisvKiBzdHJ1Y3QgcGRhX2N1c3RvbV93cmFwcGVyICovCisweGFlLCAweDAwLCAweGVmLCAweGJlLCAgICAgIC8qIFBEUl9QUklTTV9QQV9DQUxfT1VUUFVUX1BPV0VSX0xJTUlUU19DVVNUT00gKi8KKwkweDBkLCAweDAwLCAweDFhLCAweDAwLAkJLyogMTMgZW50cmllcywgMjYgYnl0ZXMgcGVyIGVudHJ5ICovCisJMHgwMCwgMHgwMCwgMHg1MiwgMHgwMSwJCS8qIG5vIG9mZnNldCwgMzM4IGJ5dGVzIHRvdGFsICovCisKKwkJLyogMjQxMiBNSHogKi8KKwkJMHg2YywgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGUwLCAweDAwLCAweGUwLCAweDAwLCAweGUwLCAweDAwLCAweGUwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDE3IE1IeiAqLworCQkweDcxLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0MjIgTUh6ICovCisJCTB4NzYsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQyNyBNSHogKi8KKwkJMHg3YiwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDMyIE1IeiAqLworCQkweDgwLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0MzcgTUh6ICovCisJCTB4ODUsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ0MiBNSHogKi8KKwkJMHg4YSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDQ3IE1IeiAqLworCQkweDhmLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0NTIgTUh6ICovCisJCTB4OTQsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ1NyBNSHogKi8KKwkJMHg5OSwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworCQkvKiAyNDYyIE1IeiAqLworCQkweDllLCAweDA5LAorCQkJMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwgMHgxMCwgMHgwMSwKKwkJCTB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsCisJCQkweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLCAweGQwLCAweDAwLAorCisJCS8qIDI0NjcgTUh6ICovCisJCTB4YTMsIDB4MDksCisJCQkweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLCAweDEwLCAweDAxLAorCQkJMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwgMHhmMCwgMHgwMCwKKwkJCTB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsIDB4ZDAsIDB4MDAsCisKKwkJLyogMjQ3MiBNSHogKi8KKwkJMHhhOCwgMHgwOSwKKwkJCTB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsIDB4MTAsIDB4MDEsCisJCQkweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLCAweGYwLCAweDAwLAorCQkJMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwgMHhkMCwgMHgwMCwKKworLyogc3RydWN0IHBkYV9pcV9hdXRvY2FsX2VudHJ5WzEzXSAqLworMHg0MiwgMHgwMCwgMHgwNiwgMHgxOSwJCS8qIFBEUl9QUklTTV9aSUZfVFhfSVFfQ0FMSUJSQVRJT04gKi8KKwkvKiAyNDEyIE1IeiAqLworCTB4NmMsIDB4MDksIDB4MjYsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQxNyBNSHogKi8KKwkweDcxLCAweDA5LCAweDI2LCAweDAwLCAweGY4LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0MjIgTUh6ICovCisJMHg3NiwgMHgwOSwgMHgyNiwgMHgwMCwgMHhmOCwgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDI3IE1IeiAqLworCTB4N2IsIDB4MDksIDB4MjYsIDB4MDAsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQzMiBNSHogKi8KKwkweDgwLCAweDA5LCAweDI1LCAweDAwLCAweGY3LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0MzcgTUh6ICovCisJMHg4NSwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNywgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDQyIE1IeiAqLworCTB4OGEsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjcsIDB4ZmYsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJLyogMjQ0NyBNSHogKi8KKwkweDhmLCAweDA5LCAweDI1LCAweDAwLCAweGY3LCAweGZmLCAweGY3LCAweGZmLCAweGZmLCAweDAwLAorCS8qIDI0NTIgTUh6ICovCisJMHg5NCwgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNywgMHhmZiwgMHhmNywgMHhmZiwgMHhmZiwgMHgwMCwKKwkvKiAyNDU3IE1IeiAqLworCTB4OTksIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjUsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4MDAsIDB4MDEsCisJLyogMjQ2MiBNSHogKi8KKwkweDllLCAweDA5LCAweDI1LCAweDAwLCAweGY1LCAweGZmLCAweGY5LCAweGZmLCAweDAwLCAweDAxLAorCS8qIDI0NjcgTUh6ICovCisJMHhhMywgMHgwOSwgMHgyNSwgMHgwMCwgMHhmNSwgMHhmZiwgMHhmOSwgMHhmZiwgMHgwMCwgMHgwMSwKKwkvKiAyNDcyIE1IeiAqLworCTB4YTgsIDB4MDksIDB4MjUsIDB4MDAsIDB4ZjUsIDB4ZmYsIDB4ZjksIDB4ZmYsIDB4MDAsIDB4MDEsCisKKzB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCQkvKiBQRFJfRU5EICovCisJMHhhOCwgMHhmNQkJCS8qIGJvZ3VzIGRhdGEgKi8KK307CisKKyNlbmRpZiAvKiBQNTRTUElfRUVQUk9NX0ggKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCmluZGV4IDVkZTJlYmYuLmRhNjY0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKQEAgLTQyNCw5ICs0MjQsNDYgQEAKIAkJCSAgICBkYXRhLCBsZW4sICZhbGVuLCAyMDAwKTsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgcDU0dV9yb21ib290XzM4ODdbXSA9ICJ+fn5+IjsKK3N0YXRpYyBjb25zdCBjaGFyIHA1NHVfZmlybXdhcmVfdXBsb2FkXzM4ODdbXSA9ICI8XHIiOworCitzdGF0aWMgaW50IHA1NHVfZGV2aWNlX3Jlc2V0XzM4ODcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisJaW50IHJldCwgbG9jayA9IChwcml2LT5pbnRmLT5jb25kaXRpb24gIT0gVVNCX0lOVEVSRkFDRV9CSU5ESU5HKTsKKwl1OCBidWZbNF07CisKKwlpZiAobG9jaykgeworCQlyZXQgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHByaXYtPnVkZXYsIHByaXYtPmludGYpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAiKHA1NHVzYikgdW5hYmxlIHRvIGxvY2sgIgorCQkJCSIgZGV2aWNlIGZvciByZXNldDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gdXNiX3Jlc2V0X2RldmljZShwcml2LT51ZGV2KTsKKwlpZiAobG9jaykKKwkJdXNiX3VubG9ja19kZXZpY2UocHJpdi0+dWRldik7CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIihwNTR1c2IpIHVuYWJsZSB0byByZXNldCAiCisJCQkiZGV2aWNlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltZW1jcHkoJmJ1ZiwgcDU0dV9yb21ib290XzM4ODcsIHNpemVvZihidWYpKTsKKwlyZXQgPSBwNTR1X2J1bGtfbXNnKHByaXYsIFA1NFVfUElQRV9EQVRBLAorCQkJICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChyZXQpCisJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIihwNTR1c2IpIHVuYWJsZSB0byBqdW1wIHRvICIKKwkJCSJib290IFJPTTogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IHA1NHVfdXBsb2FkX2Zpcm13YXJlXzM4ODcoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogewotCXN0YXRpYyBjaGFyIHN0YXJ0X3N0cmluZ1tdID0gIn5+fn48XHIiOwogCXN0cnVjdCBwNTR1X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSA9IE5VTEw7CiAJaW50IGVyciwgYWxlbjsKQEAgLTQ0NSwxMiArNDgyLDkgQEAKIAkJZ290byBlcnJfYnVmYWxsb2M7CiAJfQogCi0JbWVtY3B5KGJ1Ziwgc3RhcnRfc3RyaW5nLCA0KTsKLQllcnIgPSBwNTR1X2J1bGtfbXNnKHByaXYsIFA1NFVfUElQRV9EQVRBLCBidWYsIDQpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAiKHA1NHVzYikgcmVzZXQgZmFpbGVkISAoJWQpXG4iLCBlcnIpOworCWVyciA9IHA1NHVfZGV2aWNlX3Jlc2V0XzM4ODcoZGV2KTsKKwlpZiAoZXJyKQogCQlnb3RvIGVycl9yZXNldDsKLQl9CiAKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgImlzbDM4ODd1c2IiLCAmcHJpdi0+dWRldi0+ZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC00NjYsMTUgKzUwMCwyMiBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3VwbG9hZF9mYWlsZWQ7CiAKKwlpZiAocHJpdi0+Y29tbW9uLmZ3X2ludGVyZmFjZSAhPSBGV19MTTg3KSB7CisJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwgIndyb25nIGZpcm13YXJlLCAiCisJCQkicGxlYXNlIGdldCBhIExNODcgZmlybXdhcmUgYW5kIHRyeSBhZ2Fpbi5cbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl91cGxvYWRfZmFpbGVkOworCX0KKwogCWxlZnQgPSBibG9ja19zaXplID0gbWluKChzaXplX3QpUDU0VV9GV19CTE9DSywgZndfZW50cnktPnNpemUpOwotCXN0cmNweShidWYsIHN0YXJ0X3N0cmluZyk7Ci0JbGVmdCAtPSBzdHJsZW4oc3RhcnRfc3RyaW5nKTsKLQl0bXAgKz0gc3RybGVuKHN0YXJ0X3N0cmluZyk7CisJc3RyY3B5KGJ1ZiwgcDU0dV9maXJtd2FyZV91cGxvYWRfMzg4Nyk7CisJbGVmdCAtPSBzdHJsZW4ocDU0dV9maXJtd2FyZV91cGxvYWRfMzg4Nyk7CisJdG1wICs9IHN0cmxlbihwNTR1X2Zpcm13YXJlX3VwbG9hZF8zODg3KTsKIAogCWRhdGEgPSBmd19lbnRyeS0+ZGF0YTsKIAlyZW1haW5zID0gZndfZW50cnktPnNpemU7CiAKLQloZHIgPSAoc3RydWN0IHgyX2hlYWRlciAqKShidWYgKyBzdHJsZW4oc3RhcnRfc3RyaW5nKSk7CisJaGRyID0gKHN0cnVjdCB4Ml9oZWFkZXIgKikoYnVmICsgc3RybGVuKHA1NHVfZmlybXdhcmVfdXBsb2FkXzM4ODcpKTsKIAltZW1jcHkoaGRyLT5zaWduYXR1cmUsIFgyX1NJR05BVFVSRSwgWDJfU0lHTkFUVVJFX1NJWkUpOwogCWhkci0+ZndfbG9hZF9hZGRyID0gY3B1X3RvX2xlMzIoSVNMMzhYWF9ERVZfRklSTVdBUkVfQUREUik7CiAJaGRyLT5md19sZW5ndGggPSBjcHVfdG9fbGUzMihmd19lbnRyeS0+c2l6ZSk7CkBAIC02MTYsNiArNjU3LDE0IEBACiAJCXJldHVybiBlcnI7CiAJfQogCisJaWYgKHByaXYtPmNvbW1vbi5md19pbnRlcmZhY2UgIT0gRldfTE04NikgeworCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICJ3cm9uZyBmaXJtd2FyZSwgIgorCQkJInBsZWFzZSBnZXQgYSBMTTg2KFVTQikgZmlybXdhcmUgYW5kIHRyeSBhZ2Fpbi5cbiIpOworCQlrZnJlZShidWYpOworCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAjZGVmaW5lIFA1NFVfV1JJVEUodHlwZSwgYWRkciwgZGF0YSkgXAogCWRvIHtcCiAJCWVyciA9IHA1NHVfd3JpdGUocHJpdiwgYnVmLCB0eXBlLFwKQEAgLTg3Niw2ICs5MjUsOSBAQAogCVNFVF9JRUVFODAyMTFfREVWKGRldiwgJmludGYtPmRldik7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBkZXYpOwogCXByaXYtPnVkZXYgPSB1ZGV2OworCXByaXYtPmludGYgPSBpbnRmOworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnJ4X3F1ZXVlKTsKKwlpbml0X3VzYl9hbmNob3IoJnByaXYtPnN1Ym1pdHRlZCk7CiAKIAl1c2JfZ2V0X2Rldih1ZGV2KTsKIApAQCAtOTE4LDIwICs5NzAsMTUgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2RldjsKIAotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnByaXYtPnJ4X3F1ZXVlKTsKLQlpbml0X3VzYl9hbmNob3IoJnByaXYtPnN1Ym1pdHRlZCk7Ci0KIAlwNTR1X29wZW4oZGV2KTsKIAllcnIgPSBwNTRfcmVhZF9lZXByb20oZGV2KTsKIAlwNTR1X3N0b3AoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9mcmVlX2RldjsKIAotCWVyciA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhkZXYpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAiKHA1NHVzYikgQ2Fubm90IHJlZ2lzdGVyIG5ldGRldmljZVxuIik7CisJZXJyID0gcDU0X3JlZ2lzdGVyX2NvbW1vbihkZXYsICZ1ZGV2LT5kZXYpOworCWlmIChlcnIpCiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwotCX0KIAogCXJldHVybiAwOwogCkBAIC05NTgsMTEgKzEwMDUsMjQgQEAKIAlpZWVlODAyMTFfZnJlZV9odyhkZXYpOwogfQogCitzdGF0aWMgaW50IHA1NHVfcHJlX3Jlc2V0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA1NHVfcG9zdF9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHA1NHVfZHJpdmVyID0gewogCS5uYW1lCT0gInA1NHVzYiIsCiAJLmlkX3RhYmxlID0gcDU0dV90YWJsZSwKIAkucHJvYmUgPSBwNTR1X3Byb2JlLAogCS5kaXNjb25uZWN0ID0gcDU0dV9kaXNjb25uZWN0LAorCS5wcmVfcmVzZXQgPSBwNTR1X3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9IHA1NHVfcG9zdF9yZXNldCwKKwkuc29mdF91bmJpbmQgPSAxLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcDU0dV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmgKaW5kZXggNTRlZTczOC4uOGJjNTg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuaApAQCAtMTI2LDYgKzEyNiw3IEBACiBzdHJ1Y3QgcDU0dV9wcml2IHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiBjb21tb247CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7CiAJZW51bSB7CiAJCVA1NFVfTkVUMjI4MCA9IDAsCiAJCVA1NFVfMzg4NwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKaW5kZXggNTdhMTUwYS4uNGM5N2M2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCkBAIC0yOTgxLDcgKzI5ODEsOCBAQAogCQl1bmlvbiBpd3JlcV9kYXRhICp1d3JxLCBjaGFyICpleHRyYSkKIHsKIAlpc2xwY2lfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwotCXUzMiB1LCBvaWQgPSBPSURfSU5MX0NPTkZJRzsKKwl1MzIgdTsKKwllbnVtIG9pZF9udW1fdCBvaWQgPSBPSURfSU5MX0NPTkZJRzsKIAogCWRvd25fd3JpdGUoJnByaXYtPm1pYl9zZW0pOwogCW1ndF9nZXQocHJpdiwgT0lEX0lOTF9DT05GSUcsICZ1KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKaW5kZXggOTE5NjgyNS4uMTY2ZWQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmMKQEAgLTQzLDcgKzQzLDYgQEAKIAogc3RhdGljIGludCBwcmlzbTU0X2JyaW5nX2Rvd24oaXNscGNpX3ByaXZhdGUgKik7CiBzdGF0aWMgaW50IGlzbHBjaV9hbGxvY19tZW1vcnkoaXNscGNpX3ByaXZhdGUgKik7Ci1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmlzbHBjaV9zdGF0aXN0aWNzKHN0cnVjdCBuZXRfZGV2aWNlICopOwogCiAvKiBUZW1wb3JhcnkgZHVtbXkgTUFDIGFkZHJlc3MgdG8gdXNlIHVudGlsIGZpcm13YXJlIGlzIGxvYWRlZC4KICAqIFRoZSBpZGVhIHRoZXJlIGlzIHRoYXQgc29tZSB0b29scyAoc3VjaCBhcyBuYW1laWYpIG1heSBxdWVyeQpAQCAtNjE0LDE4ICs2MTMsNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoKLWlzbHBjaV9zdGF0aXN0aWNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCWlzbHBjaV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7Ci0KLSNpZiBWRVJCT1NFID4gU0hPV19FUlJPUl9NRVNTQUdFUwotCURFQlVHKFNIT1dfRlVOQ1RJT05fQ0FMTFMsICJpc2xwY2lfc3RhdGlzdGljc1xuIik7Ci0jZW5kaWYKLQotCXJldHVybiAmcHJpdi0+c3RhdGlzdGljczsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgIE5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC04MDQsMTAgKzc5MSwyMiBAQAogCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgaXNscGNpX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpc2xwY2lfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gaXNscGNpX2V0aHRvb2xfZ2V0X2RydmluZm8sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlzbHBjaV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gaXNscGNpX29wZW4sCisJLm5kb19zdG9wCQk9IGlzbHBjaV9jbG9zZSwKKwkubmRvX2RvX2lvY3RsCQk9IHByaXNtNTRfaW9jdGwsCisJLm5kb19zdGFydF94bWl0CQk9IGlzbHBjaV9ldGhfdHJhbnNtaXQsCisJLm5kb190eF90aW1lb3V0CQk9IGlzbHBjaV9ldGhfdHhfdGltZW91dCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBwcmlzbTU0X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogc3RydWN0IG5ldF9kZXZpY2UgKgogaXNscGNpX3NldHVwKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtODI3LDI1ICs4MjYsMTYgQEAKIAluZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKIAkvKiBpbml0aWFsaXplIHRoZSBmdW5jdGlvbiBwb2ludGVycyAqLwotCW5kZXYtPm9wZW4gPSAmaXNscGNpX29wZW47Ci0JbmRldi0+c3RvcCA9ICZpc2xwY2lfY2xvc2U7Ci0JbmRldi0+Z2V0X3N0YXRzID0gJmlzbHBjaV9zdGF0aXN0aWNzOwotCW5kZXYtPmRvX2lvY3RsID0gJnByaXNtNTRfaW9jdGw7Ci0JbmRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPQotCSAgICAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopICZwcmlzbTU0X2hhbmRsZXJfZGVmOworCW5kZXYtPm5ldGRldl9vcHMgPSAmaXNscGNpX25ldGRldl9vcHM7CisJbmRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmcHJpc201NF9oYW5kbGVyX2RlZjsKIAluZGV2LT5ldGh0b29sX29wcyA9ICZpc2xwY2lfZXRodG9vbF9vcHM7CiAKLQluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmaXNscGNpX2V0aF90cmFuc21pdDsKIAkvKiBuZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmaXNscGNpX3NldF9tdWx0aWNhc3RfbGlzdDsgKi8KIAluZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwotCW5kZXYtPnNldF9tYWNfYWRkcmVzcyA9ICZwcmlzbTU0X3NldF9tYWNfYWRkcmVzczsKIAkvKiBHZXQgYSBub24temVybyBkdW1teSBNQUMgYWRkcmVzcyBmb3IgbmFtZWlmLiBKZWFuIElJICovCiAJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBkdW1teV9tYWMsIDYpOwogCi0jaWZkZWYgSEFWRV9UWF9USU1FT1VUCiAJbmRldi0+d2F0Y2hkb2dfdGltZW8gPSBJU0xQQ0lfVFhfVElNRU9VVDsKLQluZGV2LT50eF90aW1lb3V0ID0gJmlzbHBjaV9ldGhfdHhfdGltZW91dDsKLSNlbmRpZgogCiAJLyogYWxsb2NhdGUgYSBwcml2YXRlIGRldmljZSBzdHJ1Y3R1cmUgdG8gdGhlIG5ldHdvcmsgZGV2aWNlICAqLwogCXByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKaW5kZXggOGU1NWE1Zi4uYzRkMGYxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKQEAgLTE1OCw5ICsxNTgsNiBAQAogCWRtYV9hZGRyX3QgcGNpX21hcF90eF9hZGRyZXNzW0lTTDM4WFhfQ0JfVFhfUVNJWkVdOwogCWRtYV9hZGRyX3QgcGNpX21hcF9yeF9hZGRyZXNzW0lTTDM4WFhfQ0JfUlhfUVNJWkVdOwogCi0JLyogZHJpdmVyIG5ldHdvcmsgaW50ZXJmYWNlIG1lbWJlcnMgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0aXN0aWNzOwotCiAJLyogd2FpdCBmb3IgYSByZXNldCBpbnRlcnJ1cHQgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCByZXNldF9kb25lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ldGguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jCmluZGV4IGU0M2JhZTkuLmVmM2VmNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2V0aC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKICNpbmNsdWRlICJwcmlzbWNvbXBhdC5oIgogI2luY2x1ZGUgImlzbF8zOHh4LmgiCkBAIC0yMzAsOCArMjMxLDggQEAKIAogCS8qIHNldCB0aGUgdHJhbnNtaXNzaW9uIHRpbWUgKi8KIAluZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JcHJpdi0+c3RhdGlzdGljcy50eF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdGlzdGljcy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwluZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJbmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAkvKiB0cmlnZ2VyIHRoZSBkZXZpY2UgKi8KIAlpc2xwY2lfdHJpZ2dlcihwcml2KTsKQEAgLTI0Miw3ICsyNDMsNyBAQAogCXJldHVybiAwOwogCiAgICAgICBkcm9wX2ZyZWU6Ci0JcHJpdi0+c3RhdGlzdGljcy50eF9kcm9wcGVkKys7CisJbmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnNsb2NrLCBmbGFncyk7CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXJldHVybiBlcnI7CkBAIC00MDcsOCArNDA4LDggQEAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7CiAJfQogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQlwcml2LT5zdGF0aXN0aWNzLnJ4X3BhY2tldHMrKzsKLQlwcml2LT5zdGF0aXN0aWNzLnJ4X2J5dGVzICs9IHNpemU7CisJbmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCW5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNpemU7CiAKIAkvKiBkZWxpdmVyIHRoZSBza2IgdG8gdGhlIG5ldHdvcmsgbGF5ZXIgKi8KICNpZmRlZiBJU0xQQ0lfRVRIX0RFQlVHCkBAIC00NzEsOCArNDcyLDggQEAKIAkJd21iKCk7CiAKIAkJLyogaW5jcmVtZW50IHRoZSBkcml2ZXIgcmVhZCBwb2ludGVyICovCi0JCWFkZF9sZTMycCgmY29udHJvbF9ibG9jay0+Ci0JCQkgIGRyaXZlcl9jdXJyX2ZyYWdbSVNMMzhYWF9DQl9SWF9EQVRBX0xRXSwgMSk7CisJCWxlMzJfYWRkX2NwdSgmY29udHJvbF9ibG9jay0+CisJCQkgICAgIGRyaXZlcl9jdXJyX2ZyYWdbSVNMMzhYWF9DQl9SWF9EQVRBX0xRXSwgMSk7CiAJfQogCiAJLyogdHJpZ2dlciB0aGUgZGV2aWNlICovCkBAIC00OTYsMTAgKzQ5Nyw5IEBACiBpc2xwY2lfZXRoX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJaXNscGNpX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdGlzdGljcyA9ICZwcml2LT5zdGF0aXN0aWNzOwogCiAJLyogaW5jcmVtZW50IHRoZSB0cmFuc21pdCBlcnJvciBjb3VudGVyICovCi0Jc3RhdGlzdGljcy0+dHhfZXJyb3JzKys7CisJbmRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAKIAlpZiAoIXByaXYtPnJlc2V0X3Rhc2tfcGVuZGluZykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9tZ3QuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCmluZGV4IGY5MWE4OGYuLjg3YTE3MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX21ndC5oCkBAIC04NSwxMiArODUsNiBAQAogI2RlZmluZSBQSU1GT1JfRkxBR19BUFBMSUNfT1JJR0lOICAgICAgICAgICAgICAgMHgwMQogI2RlZmluZSBQSU1GT1JfRkxBR19MSVRUTEVfRU5ESUFOICAgICAgICAgICAgICAgMHgwMgogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFkZF9sZTMycChfX2xlMzIgKiBsZV9udW1iZXIsIHUzMiBhZGQpCi17Ci0JKmxlX251bWJlciA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1cChsZV9udW1iZXIpICsgYWRkKTsKLX0KLQogdm9pZCBkaXNwbGF5X2J1ZmZlcihjaGFyICosIGludCk7CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L29pZF9tZ3QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvb2lkX21ndC5jCmluZGV4IDU3YTRhYzMuLjExODdlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvb2lkX21ndC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvb2lkX21ndC5jCkBAIC02OTgsNyArNjk4LDcgQEAKIG1ndF9jb21taXQoaXNscGNpX3ByaXZhdGUgKnByaXYpCiB7CiAJaW50IHJ2YWx1ZTsKLQl1MzIgdTsKKwllbnVtIG9pZF9udW1fdCB1OwogCiAJaWYgKGlzbHBjaV9nZXRfc3RhdGUocHJpdikgPCBQUlZfU1RBVEVfSU5JVCkKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCmluZGV4IDk5ZWM3ZDYuLmZhOTBkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCkBAIC04LDcgKzgsNyBAQAogICogQ29weXJpZ2h0IChjKSAxOTk4ICBDb3JleSBUaG9tYXMgKGNvcmV5QHdvcmxkLnN0ZC5jb20pCiAgKgogICogVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvbmx5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb25seSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIEl0IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCkBAIC0yNyw3ICsyNyw3IEBACiAgKgogICogRGFuaWVsZSBCZWxsdWNjaSA8YmVsbHVjZGFAdGlzY2FsaS5pdD4gLSAwNy8xMC8yMDAzCiAgKiAtIEF1ZGl0IGNvcHlfdG9fdXNlciBpbiBpb2N0bChTSU9DR0lXRVNTSUQpCi0gKiAKKyAqCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTY1LDggKzY1LDggQEAKIC8qIFdhcm5pbmcgOiB0aGVzZSBzdHVmZiB3aWxsIHNsb3cgZG93biB0aGUgZHJpdmVyLi4uICovCiAjZGVmaW5lIFdJUkVMRVNTX1NQWQkJLyogRW5hYmxlIHNweWluZyBhZGRyZXNzZXMgKi8KIC8qIERlZmluaXRpb25zIHdlIG5lZWQgZm9yIHNweSAqLwotdHlwZWRlZiBzdHJ1Y3QgaXdfc3RhdGlzdGljcwlpd19zdGF0czsKLXR5cGVkZWYgdV9jaGFyCW1hY19hZGRyW0VUSF9BTEVOXTsJLyogSGFyZHdhcmUgYWRkcmVzcyAqLwordHlwZWRlZiBzdHJ1Y3QgaXdfc3RhdGlzdGljcyBpd19zdGF0czsKK3R5cGVkZWYgdV9jaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsJLyogSGFyZHdhcmUgYWRkcmVzcyAqLwogCiAjaW5jbHVkZSAicmF5Y3RsLmgiCiAjaW5jbHVkZSAicmF5X2NzLmgiCkBAIC04Niw3ICs4Niw3IEBACiBzdGF0aWMgaW50IHBjX2RlYnVnID0gUENNQ0lBX0RFQlVHOwogbW9kdWxlX3BhcmFtKHBjX2RlYnVnLCBpbnQsIDApOwogLyogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKTsgKi8KLSNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKGFyZ3MpOworI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWcgPiAobikpIHByaW50ayhhcmdzKTsKICNlbHNlCiAjZGVmaW5lIERFQlVHKG4sIGFyZ3MuLi4pCiAjZW5kaWYKQEAgLTEwOCwxMiArMTA4LDEyIEBACiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCByYXlfdXBkYXRlX211bHRpX2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGFsbCk7CiBzdGF0aWMgaW50IHRyYW5zbGF0ZV9mcmFtZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKTsKLXN0YXRpYyB2b2lkIHJheV9idWlsZF9oZWFkZXIocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsIFVDSEFSIG1zZ190eXBlLAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEpOworCQkJICAgdW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbik7CitzdGF0aWMgdm9pZCByYXlfYnVpbGRfaGVhZGVyKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4LAorCQkJICAgICBVQ0hBUiBtc2dfdHlwZSwgdW5zaWduZWQgY2hhciAqZGF0YSk7CiBzdGF0aWMgdm9pZCB1bnRyYW5zbGF0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKTsKLXN0YXRpYyBpd19zdGF0cyAqIHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYpOwotc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZglyYXlfaGFuZGxlcl9kZWY7CitzdGF0aWMgaXdfc3RhdHMgKnJheV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X2hhbmRsZXJfZGVmIHJheV9oYW5kbGVyX2RlZjsKIAogLyoqKioqIFByb3RvdHlwZXMgZm9yIHJheWxpbmsgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIGludCBhc2NfdG9faW50KGNoYXIgYSk7CkBAIC0xMjQsNyArMTI0LDcgQEAKIHN0YXRpYyBpbnQgZ2V0X2ZyZWVfdHhfY2NzKHJheV9kZXZfdCAqbG9jYWwpOwogc3RhdGljIHZvaWQgaW5pdF9zdGFydHVwX3BhcmFtcyhyYXlfZGV2X3QgKmxvY2FsKTsKIHN0YXRpYyBpbnQgcGFyc2VfYWRkcihjaGFyICppbl9zdHIsIFVDSEFSICpvdXQpOwotc3RhdGljIGludCByYXlfaHdfeG1pdCh1bnNpZ25lZCBjaGFyKiBkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCBVQ0hBUiB0eXBlKTsKK3N0YXRpYyBpbnQgcmF5X2h3X3htaXQodW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgVUNIQVIgdHlwZSk7CiBzdGF0aWMgaW50IHJheV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBpbnRlcnJ1cHRfZWNmKHJheV9kZXZfdCAqbG9jYWwsIGludCBjY3MpOwogc3RhdGljIHZvaWQgcmF5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTMyLDE3ICsxMzIsMTcgQEAKIHN0YXRpYyB2b2lkIHZlcmlmeV9kbF9zdGFydHVwKHVfbG9uZyk7CiAKIC8qIFByb3RvdHlwZXMgZm9yIGludGVycnB0IHRpbWUgZnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaXJxcmV0dXJuX3QgcmF5X2ludGVycnVwdCAoaW50IHJlZywgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCByYXlfaW50ZXJydXB0KGludCByZWcsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgdm9pZCBjbGVhcl9pbnRlcnJ1cHQocmF5X2Rldl90ICpsb2NhbCk7Ci1zdGF0aWMgdm9pZCByeF9kZWF1dGhlbnRpY2F0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsIAotICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pOworc3RhdGljIHZvaWQgcnhfZGVhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAorCQkJICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKTsKIHN0YXRpYyBpbnQgY29weV9mcm9tX3J4X2J1ZmYocmF5X2Rldl90ICpsb2NhbCwgVUNIQVIgKmRlc3QsIGludCBwa3RfYWRkciwgaW50IGxlbik7CiBzdGF0aWMgdm9pZCByYXlfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgcmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzKTsKIHN0YXRpYyB2b2lkIHJlbGVhc2VfZnJhZ19jaGFpbihyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MpOwogc3RhdGljIHZvaWQgcnhfYXV0aGVudGljYXRlKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywKLSAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbik7Ci1zdGF0aWMgdm9pZCByeF9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcywgdW5zaWduZWQgaW50IHBrdF9hZGRyLCAKLSAgICAgICAgICAgICBpbnQgcnhfbGVuKTsKKwkJCSAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pOworc3RhdGljIHZvaWQgcnhfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsCisJCSAgICB1bnNpZ25lZCBpbnQgcGt0X2FkZHIsIGludCByeF9sZW4pOwogc3RhdGljIHZvaWQgYXNzb2NpYXRlKHJheV9kZXZfdCAqbG9jYWwpOwogCiAvKiBDYXJkIGNvbW1hbmQgZnVuY3Rpb25zICovCkBAIC0yMTksODIgKzIxOSw5NyBAQAogbW9kdWxlX3BhcmFtKHJheV9tZW1fc3BlZWQsIGludCwgMCk7CiAKIHN0YXRpYyBVQ0hBUiBiNV9kZWZhdWx0X3N0YXJ0dXBfcGFybXNbXSA9IHsKLSAgICAwLCAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkaG9jIHN0YXRpb24gKi8KLSAgICdMJywnSScsJ04nLCdVJywnWCcsIDAsICAwLCAgMCwgIC8qIDMyIGNoYXIgRVNTSUQgKi8KLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAxLCAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFjdGl2ZSBzY2FuLCBDQSBNb2RlICovCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgICAgICAgICAvKiBObyBkZWZhdWx0IE1BQyBhZGRyICAqLwotICAgIDB4N2YsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogRnJhZyB0aHJlc2hvbGQgKi8KLSAgICAweDAwLCAweDgwLCAgICAgICAgICAgICAgICAgICAgIC8qIEhvcCB0aW1lIDEyOCBLdXMqLwotICAgIDB4MDEsIDB4MDAsICAgICAgICAgICAgICAgICAgICAgLyogQmVhY29uIHBlcmlvZCAyNTYgS3VzICovCi0gICAgMHgwMSwgMHgwNywgMHhhMywgICAgICAgICAgICAgICAvKiBEVElNLCByZXRyaWVzLCBhY2sgdGltZW91dCovCi0gICAgMHgxZCwgMHg4MiwgMHg0ZSwgICAgICAgICAgICAgICAvKiBTSUZTLCBESUZTLCBQSUZTICovCi0gICAgMHg3ZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBSVFMgdGhyZXNob2xkICovCi0gICAgMHgwNCwgMHhlMiwgMHgzOCwgMHhBNCwgICAgICAgICAvKiBzY2FuX2R3ZWxsLCBtYXhfc2Nhbl9kd2VsbCAqLwotICAgIDB4MDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXNzb2MgcmVzcCB0aW1lb3V0IHRocmVzaCAqLwotICAgIDB4MDgsIDB4MDIsIDB4MDgsICAgICAgICAgICAgICAgLyogYWRob2MsIGluZnJhLCBzdXBlciBjeWNsZSBtYXgqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvbWlzY3VvdXMgbW9kZSAqLwotICAgIDB4MGMsIDB4MGJkLCAgICAgICAgICAgICAgICAgICAgLyogVW5pcXVlIHdvcmQgKi8KLSAgICAweDMyLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsb3QgdGltZSAqLwotICAgIDB4ZmYsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogcm9hbS1sb3cgc25yLCBsb3cgc25yIGNvdW50ICovCi0gICAgMHgwNSwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBJbmZyYSwgYWRob2MgbWlzc2VkIGJjbiB0aHJlc2ggKi8KLSAgICAweDAxLCAweDBiLCAweDRmLCAgICAgICAgICAgICAgIC8qIFVTQSwgaG9wIHBhdHRlcm4sIGhvcCBwYXQgbGVuZ3RoICovCisJMCwgMCwJCQkvKiBBZGhvYyBzdGF0aW9uICovCisJJ0wnLCAnSScsICdOJywgJ1UnLCAnWCcsIDAsIDAsIDAsCS8qIDMyIGNoYXIgRVNTSUQgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkxLCAwLAkJCS8qIEFjdGl2ZSBzY2FuLCBDQSBNb2RlICovCisJMCwgMCwgMCwgMCwgMCwgMCwJLyogTm8gZGVmYXVsdCBNQUMgYWRkciAgKi8KKwkweDdmLCAweGZmLAkJLyogRnJhZyB0aHJlc2hvbGQgKi8KKwkweDAwLCAweDgwLAkJLyogSG9wIHRpbWUgMTI4IEt1cyAqLworCTB4MDEsIDB4MDAsCQkvKiBCZWFjb24gcGVyaW9kIDI1NiBLdXMgKi8KKwkweDAxLCAweDA3LCAweGEzLAkvKiBEVElNLCByZXRyaWVzLCBhY2sgdGltZW91dCAqLworCTB4MWQsIDB4ODIsIDB4NGUsCS8qIFNJRlMsIERJRlMsIFBJRlMgKi8KKwkweDdmLCAweGZmLAkJLyogUlRTIHRocmVzaG9sZCAqLworCTB4MDQsIDB4ZTIsIDB4MzgsIDB4QTQsCS8qIHNjYW5fZHdlbGwsIG1heF9zY2FuX2R3ZWxsICovCisJMHgwNSwJCQkvKiBhc3NvYyByZXNwIHRpbWVvdXQgdGhyZXNoICovCisJMHgwOCwgMHgwMiwgMHgwOCwJLyogYWRob2MsIGluZnJhLCBzdXBlciBjeWNsZSBtYXggKi8KKwkwLAkJCS8qIFByb21pc2N1b3VzIG1vZGUgKi8KKwkweDBjLCAweDBiZCwJCS8qIFVuaXF1ZSB3b3JkICovCisJMHgzMiwJCQkvKiBTbG90IHRpbWUgKi8KKwkweGZmLCAweGZmLAkJLyogcm9hbS1sb3cgc25yLCBsb3cgc25yIGNvdW50ICovCisJMHgwNSwgMHhmZiwJCS8qIEluZnJhLCBhZGhvYyBtaXNzZWQgYmNuIHRocmVzaCAqLworCTB4MDEsIDB4MGIsIDB4NGYsCS8qIFVTQSwgaG9wIHBhdHRlcm4sIGhvcCBwYXQgbGVuZ3RoICovCiAvKiBiNCAtIGI1IGRpZmZlcmVuY2VzIHN0YXJ0IGhlcmUgKi8KLSAgICAweDAwLCAweDNmLCAgICAgICAgICAgICAgICAgICAgIC8qIENXIG1heCAqLwotICAgIDB4MDAsIDB4MGYsICAgICAgICAgICAgICAgICAgICAgLyogQ1cgbWluICovCi0gICAgMHgwNCwgMHgwOCwgICAgICAgICAgICAgICAgICAgICAvKiBOb2lzZSBnYWluLCBsaW1pdCBvZmZzZXQgKi8KLSAgICAweDI4LCAweDI4LCAgICAgICAgICAgICAgICAgICAgIC8qIGRldCByc3NpLCBtZWQgYnVzeSBvZmZzZXRzICovCi0gICAgNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZXQgc3luYyB0aHJlc2ggKi8KLSAgICAwLCAyLCAyLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRlc3QgbW9kZSwgbWluLCBtYXggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFsbG93IGJyb2FkY2FzdCBTU0lEIHByb2JlIHJlc3AgKi8KLSAgICAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByaXZhY3kgbXVzdCBzdGFydCwgY2FuIGpvaW4gKi8KLSAgICAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwICAgICAgICAgIC8qIGJhc2ljIHJhdGUgc2V0ICovCisJMHgwMCwgMHgzZiwJCS8qIENXIG1heCAqLworCTB4MDAsIDB4MGYsCQkvKiBDVyBtaW4gKi8KKwkweDA0LCAweDA4LAkJLyogTm9pc2UgZ2FpbiwgbGltaXQgb2Zmc2V0ICovCisJMHgyOCwgMHgyOCwJCS8qIGRldCByc3NpLCBtZWQgYnVzeSBvZmZzZXRzICovCisJNywJCQkvKiBkZXQgc3luYyB0aHJlc2ggKi8KKwkwLCAyLCAyLAkJLyogdGVzdCBtb2RlLCBtaW4sIG1heCAqLworCTAsCQkJLyogYWxsb3cgYnJvYWRjYXN0IFNTSUQgcHJvYmUgcmVzcCAqLworCTAsIDAsCQkJLyogcHJpdmFjeSBtdXN0IHN0YXJ0LCBjYW4gam9pbiAqLworCTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAJLyogYmFzaWMgcmF0ZSBzZXQgKi8KIH07CiAKIHN0YXRpYyBVQ0hBUiBiNF9kZWZhdWx0X3N0YXJ0dXBfcGFybXNbXSA9IHsKLSAgICAwLCAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkaG9jIHN0YXRpb24gKi8KLSAgICdMJywnSScsJ04nLCdVJywnWCcsIDAsICAwLCAgMCwgIC8qIDMyIGNoYXIgRVNTSUQgKi8KLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKLSAgICAxLCAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFjdGl2ZSBzY2FuLCBDQSBNb2RlICovCi0gICAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgICAgICAgICAvKiBObyBkZWZhdWx0IE1BQyBhZGRyICAqLwotICAgIDB4N2YsIDB4ZmYsICAgICAgICAgICAgICAgICAgICAgLyogRnJhZyB0aHJlc2hvbGQgKi8KLSAgICAweDAyLCAweDAwLCAgICAgICAgICAgICAgICAgICAgIC8qIEhvcCB0aW1lICovCi0gICAgMHgwMCwgMHgwMSwgICAgICAgICAgICAgICAgICAgICAvKiBCZWFjb24gcGVyaW9kICovCi0gICAgMHgwMSwgMHgwNywgMHhhMywgICAgICAgICAgICAgICAvKiBEVElNLCByZXRyaWVzLCBhY2sgdGltZW91dCovCi0gICAgMHgxZCwgMHg4MiwgMHhjZSwgICAgICAgICAgICAgICAvKiBTSUZTLCBESUZTLCBQSUZTICovCi0gICAgMHg3ZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiBSVFMgdGhyZXNob2xkICovCi0gICAgMHhmYiwgMHgxZSwgMHhjNywgMHg1YywgICAgICAgICAvKiBzY2FuX2R3ZWxsLCBtYXhfc2Nhbl9kd2VsbCAqLwotICAgIDB4MDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYXNzb2MgcmVzcCB0aW1lb3V0IHRocmVzaCAqLwotICAgIDB4MDQsIDB4MDIsIDB4NCwgICAgICAgICAgICAgICAgLyogYWRob2MsIGluZnJhLCBzdXBlciBjeWNsZSBtYXgqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvbWlzY3VvdXMgbW9kZSAqLwotICAgIDB4MGMsIDB4MGJkLCAgICAgICAgICAgICAgICAgICAgLyogVW5pcXVlIHdvcmQgKi8KLSAgICAweDRlLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNsb3QgdGltZSAoVEJEIHNlZW1zIHdyb25nKSovCi0gICAgMHhmZiwgMHhmZiwgICAgICAgICAgICAgICAgICAgICAvKiByb2FtLWxvdyBzbnIsIGxvdyBzbnIgY291bnQgKi8KLSAgICAweDA1LCAweGZmLCAgICAgICAgICAgICAgICAgICAgIC8qIEluZnJhLCBhZGhvYyBtaXNzZWQgYmNuIHRocmVzaCAqLwotICAgIDB4MDEsIDB4MGIsIDB4NGUsICAgICAgICAgICAgICAgLyogVVNBLCBob3AgcGF0dGVybiwgaG9wIHBhdCBsZW5ndGggKi8KKwkwLCAwLAkJCS8qIEFkaG9jIHN0YXRpb24gKi8KKwknTCcsICdJJywgJ04nLCAnVScsICdYJywgMCwgMCwgMCwJLyogMzIgY2hhciBFU1NJRCAqLworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCTEsIDAsCQkJLyogQWN0aXZlIHNjYW4sIENBIE1vZGUgKi8KKwkwLCAwLCAwLCAwLCAwLCAwLAkvKiBObyBkZWZhdWx0IE1BQyBhZGRyICAqLworCTB4N2YsIDB4ZmYsCQkvKiBGcmFnIHRocmVzaG9sZCAqLworCTB4MDIsIDB4MDAsCQkvKiBIb3AgdGltZSAqLworCTB4MDAsIDB4MDEsCQkvKiBCZWFjb24gcGVyaW9kICovCisJMHgwMSwgMHgwNywgMHhhMywJLyogRFRJTSwgcmV0cmllcywgYWNrIHRpbWVvdXQgKi8KKwkweDFkLCAweDgyLCAweGNlLAkvKiBTSUZTLCBESUZTLCBQSUZTICovCisJMHg3ZiwgMHhmZiwJCS8qIFJUUyB0aHJlc2hvbGQgKi8KKwkweGZiLCAweDFlLCAweGM3LCAweDVjLAkvKiBzY2FuX2R3ZWxsLCBtYXhfc2Nhbl9kd2VsbCAqLworCTB4MDUsCQkJLyogYXNzb2MgcmVzcCB0aW1lb3V0IHRocmVzaCAqLworCTB4MDQsIDB4MDIsIDB4NCwJLyogYWRob2MsIGluZnJhLCBzdXBlciBjeWNsZSBtYXggKi8KKwkwLAkJCS8qIFByb21pc2N1b3VzIG1vZGUgKi8KKwkweDBjLCAweDBiZCwJCS8qIFVuaXF1ZSB3b3JkICovCisJMHg0ZSwJCQkvKiBTbG90IHRpbWUgKFRCRCBzZWVtcyB3cm9uZykgKi8KKwkweGZmLCAweGZmLAkJLyogcm9hbS1sb3cgc25yLCBsb3cgc25yIGNvdW50ICovCisJMHgwNSwgMHhmZiwJCS8qIEluZnJhLCBhZGhvYyBtaXNzZWQgYmNuIHRocmVzaCAqLworCTB4MDEsIDB4MGIsIDB4NGUsCS8qIFVTQSwgaG9wIHBhdHRlcm4sIGhvcCBwYXQgbGVuZ3RoICovCiAvKiBiNCAtIGI1IGRpZmZlcmVuY2VzIHN0YXJ0IGhlcmUgKi8KLSAgICAweDNmLCAweDBmLCAgICAgICAgICAgICAgICAgICAgIC8qIENXIG1heCwgbWluICovCi0gICAgMHgwNCwgMHgwOCwgICAgICAgICAgICAgICAgICAgICAvKiBOb2lzZSBnYWluLCBsaW1pdCBvZmZzZXQgKi8KLSAgICAweDI4LCAweDI4LCAgICAgICAgICAgICAgICAgICAgIC8qIGRldCByc3NpLCBtZWQgYnVzeSBvZmZzZXRzICovCi0gICAgNywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkZXQgc3luYyB0aHJlc2ggKi8KLSAgICAwLCAyLCAyICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRlc3QgbW9kZSwgbWluLCBtYXgqLworCTB4M2YsIDB4MGYsCQkvKiBDVyBtYXgsIG1pbiAqLworCTB4MDQsIDB4MDgsCQkvKiBOb2lzZSBnYWluLCBsaW1pdCBvZmZzZXQgKi8KKwkweDI4LCAweDI4LAkJLyogZGV0IHJzc2ksIG1lZCBidXN5IG9mZnNldHMgKi8KKwk3LAkJCS8qIGRldCBzeW5jIHRocmVzaCAqLworCTAsIDIsIDIJCQkvKiB0ZXN0IG1vZGUsIG1pbiwgbWF4ICovCiB9OworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBldGgyX2xsY1tdID0gezB4YWEsIDB4YWEsIDMsIDAsIDAsIDB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgZXRoMl9sbGNbXSA9IHsgMHhhYSwgMHhhYSwgMywgMCwgMCwgMCB9OwogCiBzdGF0aWMgY2hhciBob3BfcGF0dGVybl9sZW5ndGhbXSA9IHsgMSwKLQkgICAgIFVTQV9IT1BfTU9ELCAgICAgICAgICAgICBFVVJPUEVfSE9QX01PRCwKLQkgICAgIEpBUEFOX0hPUF9NT0QsICAgICAgICAgICBLT1JFQV9IT1BfTU9ELAotCSAgICAgU1BBSU5fSE9QX01PRCwgICAgICAgICAgIEZSQU5DRV9IT1BfTU9ELAotCSAgICAgSVNSQUVMX0hPUF9NT0QsICAgICAgICAgIEFVU1RSQUxJQV9IT1BfTU9ELAotCSAgICAgSkFQQU5fVEVTVF9IT1BfTU9ECisJVVNBX0hPUF9NT0QsIEVVUk9QRV9IT1BfTU9ELAorCUpBUEFOX0hPUF9NT0QsIEtPUkVBX0hPUF9NT0QsCisJU1BBSU5fSE9QX01PRCwgRlJBTkNFX0hPUF9NT0QsCisJSVNSQUVMX0hPUF9NT0QsIEFVU1RSQUxJQV9IT1BfTU9ELAorCUpBUEFOX1RFU1RfSE9QX01PRAogfTsKIAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICJSYXlsaW5rL1dlYkdlYXIgd2lyZWxlc3MgTEFOIC0gQ29yZXkgPFRob21hcyBjb3JleUB3b3JsZC5zdGQuY29tPiI7CitzdGF0aWMgY2hhciByY3NpZFtdID0KKyAgICAiUmF5bGluay9XZWJHZWFyIHdpcmVsZXNzIExBTiAtIENvcmV5IDxUaG9tYXMgY29yZXlAd29ybGQuc3RkLmNvbT4iOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJheV9uZXRkZXZfb3BzID0geworCS5uZG9faW5pdCAJCT0gcmF5X2Rldl9pbml0LAorCS5uZG9fb3BlbiAJCT0gcmF5X29wZW4sCisJLm5kb19zdG9wIAkJPSByYXlfZGV2X2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSByYXlfZGV2X3N0YXJ0X3htaXQsCisJLm5kb19zZXRfY29uZmlnCQk9IHJheV9kZXZfY29uZmlnLAorCS5uZG9fZ2V0X3N0YXRzCQk9IHJheV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBzZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICByYXlfYXR0YWNoKCkgY3JlYXRlcyBhbiAiaW5zdGFuY2UiIG9mIHRoZSBkcml2ZXIsIGFsbG9jYXRpbmcKQEAgLTMwNiw3MSArMzIxLDY2IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbDsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXJheV9kZXZfdCAqbG9jYWw7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAotICAgIERFQlVHKDEsICJyYXlfYXR0YWNoKClcbiIpOworCURFQlVHKDEsICJyYXlfYXR0YWNoKClcbiIpOwogCi0gICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KLSAgICBkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YocmF5X2Rldl90KSk7Ci0gICAgaWYgKCFkZXYpCi0JICAgIGdvdG8gZmFpbF9hbGxvY19kZXY7CisJLyogQWxsb2NhdGUgc3BhY2UgZm9yIHByaXZhdGUgZGV2aWNlLXNwZWNpZmljIGRhdGEgKi8KKwlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YocmF5X2Rldl90KSk7CisJaWYgKCFkZXYpCisJCWdvdG8gZmFpbF9hbGxvY19kZXY7CiAKLSAgICBsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgbG9jYWwtPmZpbmRlciA9IHBfZGV2OworCWxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlsb2NhbC0+ZmluZGVyID0gcF9kZXY7CiAKLSAgICAvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcuIE5vbmUgdXNlZCBoZXJlICovCi0gICAgcF9kZXYtPmlvLk51bVBvcnRzMSA9IDA7Ci0gICAgcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7Ci0gICAgcF9kZXYtPmlvLklPQWRkckxpbmVzID0gNTsKKwkvKiBUaGUgaW8gc3RydWN0dXJlIGRlc2NyaWJlcyBJTyBwb3J0IG1hcHBpbmcuIE5vbmUgdXNlZCBoZXJlICovCisJcF9kZXYtPmlvLk51bVBvcnRzMSA9IDA7CisJcF9kZXYtPmlvLkF0dHJpYnV0ZXMxID0gSU9fREFUQV9QQVRIX1dJRFRIXzg7CisJcF9kZXYtPmlvLklPQWRkckxpbmVzID0gNTsKIAotICAgIC8qIEludGVycnVwdCBzZXR1cC4gRm9yIFBDTUNJQSwgZHJpdmVyIHRha2VzIHdoYXQncyBnaXZlbiAqLwotICAgIHBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKLSAgICBwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOwotICAgIHBfZGV2LT5pcnEuSGFuZGxlciA9ICZyYXlfaW50ZXJydXB0OworCS8qIEludGVycnVwdCBzZXR1cC4gRm9yIFBDTUNJQSwgZHJpdmVyIHRha2VzIHdoYXQncyBnaXZlbiAqLworCXBfZGV2LT5pcnEuQXR0cmlidXRlcyA9IElSUV9UWVBFX0RZTkFNSUNfU0hBUklORyB8IElSUV9IQU5ETEVfUFJFU0VOVDsKKwlwX2Rldi0+aXJxLklSUUluZm8xID0gSVJRX0xFVkVMX0lEOworCXBfZGV2LT5pcnEuSGFuZGxlciA9ICZyYXlfaW50ZXJydXB0OwogCi0gICAgLyogR2VuZXJhbCBzb2NrZXQgY29uZmlndXJhdGlvbiAqLwotICAgIHBfZGV2LT5jb25mLkF0dHJpYnV0ZXMgPSBDT05GX0VOQUJMRV9JUlE7Ci0gICAgcF9kZXYtPmNvbmYuSW50VHlwZSA9IElOVF9NRU1PUllfQU5EX0lPOwotICAgIHBfZGV2LT5jb25mLkNvbmZpZ0luZGV4ID0gMTsKKwkvKiBHZW5lcmFsIHNvY2tldCBjb25maWd1cmF0aW9uICovCisJcF9kZXYtPmNvbmYuQXR0cmlidXRlcyA9IENPTkZfRU5BQkxFX0lSUTsKKwlwX2Rldi0+Y29uZi5JbnRUeXBlID0gSU5UX01FTU9SWV9BTkRfSU87CisJcF9kZXYtPmNvbmYuQ29uZmlnSW5kZXggPSAxOwogCi0gICAgcF9kZXYtPnByaXYgPSBkZXY7Ci0gICAgcF9kZXYtPmlycS5JbnN0YW5jZSA9IGRldjsKLSAgICAKLSAgICBsb2NhbC0+ZmluZGVyID0gcF9kZXY7Ci0gICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9JTlNFUlRFRDsKLSAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBVTkFVVEhFTlRJQ0FURUQ7Ci0gICAgbG9jYWwtPm51bV9tdWx0aSA9IDA7Ci0gICAgREVCVUcoMiwicmF5X2F0dGFjaCBwX2RldiA9ICVwLCAgZGV2ID0gJXAsICBsb2NhbCA9ICVwLCBpbnRyID0gJXBcbiIsCi0gICAgICAgICAgcF9kZXYsZGV2LGxvY2FsLCZyYXlfaW50ZXJydXB0KTsKKwlwX2Rldi0+cHJpdiA9IGRldjsKKwlwX2Rldi0+aXJxLkluc3RhbmNlID0gZGV2OwogCi0gICAgLyogUmF5bGluayBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlICovCi0gICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmcmF5X2Rldl9zdGFydF94bWl0OwotICAgIGRldi0+c2V0X2NvbmZpZyA9ICZyYXlfZGV2X2NvbmZpZzsKLSAgICBkZXYtPmdldF9zdGF0cyAgPSAmcmF5X2dldF9zdGF0czsKLSAgICBTRVRfRVRIVE9PTF9PUFMoZGV2LCAmbmV0ZGV2X2V0aHRvb2xfb3BzKTsKLSAgICBkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnJheV9oYW5kbGVyX2RlZjsKKwlsb2NhbC0+ZmluZGVyID0gcF9kZXY7CisJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9JTlNFUlRFRDsKKwlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBVTkFVVEhFTlRJQ0FURUQ7CisJbG9jYWwtPm51bV9tdWx0aSA9IDA7CisJREVCVUcoMiwgInJheV9hdHRhY2ggcF9kZXYgPSAlcCwgIGRldiA9ICVwLCAgbG9jYWwgPSAlcCwgaW50ciA9ICVwXG4iLAorCSAgICAgIHBfZGV2LCBkZXYsIGxvY2FsLCAmcmF5X2ludGVycnVwdCk7CisKKwkvKiBSYXlsaW5rIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlkZXYtPm5ldGRldl9vcHMgPSAmcmF5X25ldGRldl9vcHM7CisJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZyYXlfaGFuZGxlcl9kZWY7CiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gICAgbG9jYWwtPndpcmVsZXNzX2RhdGEuc3B5X2RhdGEgPSAmbG9jYWwtPnNweV9kYXRhOwotICAgIGRldi0+d2lyZWxlc3NfZGF0YSA9ICZsb2NhbC0+d2lyZWxlc3NfZGF0YTsKLSNlbmRpZgkvKiBXSVJFTEVTU19TUFkgKi8KKwlsb2NhbC0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZsb2NhbC0+c3B5X2RhdGE7CisJZGV2LT53aXJlbGVzc19kYXRhID0gJmxvY2FsLT53aXJlbGVzc19kYXRhOworI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLwogCi0gICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmc2V0X211bHRpY2FzdF9saXN0OwogCi0gICAgREVCVUcoMiwicmF5X2NzIHJheV9hdHRhY2ggY2FsbGluZyBldGhlcl9zZXR1cC4pXG4iKTsKLSAgICBkZXYtPmluaXQgPSAmcmF5X2Rldl9pbml0OwotICAgIGRldi0+b3BlbiA9ICZyYXlfb3BlbjsKLSAgICBkZXYtPnN0b3AgPSAmcmF5X2Rldl9jbG9zZTsKLSAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJREVCVUcoMiwgInJheV9jcyByYXlfYXR0YWNoIGNhbGxpbmcgZXRoZXJfc2V0dXAuKVxuIik7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0gICAgaW5pdF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlpbml0X3RpbWVyKCZsb2NhbC0+dGltZXIpOwogCi0gICAgdGhpc19kZXZpY2UgPSBwX2RldjsKLSAgICByZXR1cm4gcmF5X2NvbmZpZyhwX2Rldik7CisJdGhpc19kZXZpY2UgPSBwX2RldjsKKwlyZXR1cm4gcmF5X2NvbmZpZyhwX2Rldik7CiAKIGZhaWxfYWxsb2NfZGV2OgotICAgIHJldHVybiAtRU5PTUVNOworCXJldHVybiAtRU5PTUVNOwogfSAvKiByYXlfYXR0YWNoICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICBUaGlzIGRlbGV0ZXMgYSBkcml2ZXIgImluc3RhbmNlIi4gIFRoZSBkZXZpY2UgaXMgZGUtcmVnaXN0ZXJlZAogICAgIHdpdGggQ2FyZCBTZXJ2aWNlcy4gIElmIGl0IGhhcyBiZWVuIHJlbGVhc2VkLCBhbGwgbG9jYWwgZGF0YQpAQCAtMzc5LDI1ICszODksMjcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHJheV9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmspCiB7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLSAgICByYXlfZGV2X3QgKmxvY2FsOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJcmF5X2Rldl90ICpsb2NhbDsKIAotICAgIERFQlVHKDEsICJyYXlfZGV0YWNoKDB4JXApXG4iLCBsaW5rKTsKKwlERUJVRygxLCAicmF5X2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLSAgICB0aGlzX2RldmljZSA9IE5VTEw7Ci0gICAgZGV2ID0gbGluay0+cHJpdjsKKwl0aGlzX2RldmljZSA9IE5VTEw7CisJZGV2ID0gbGluay0+cHJpdjsKIAotICAgIHJheV9yZWxlYXNlKGxpbmspOworCXJheV9yZWxlYXNlKGxpbmspOwogCi0gICAgbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwogCi0gICAgaWYgKGxpbmstPnByaXYpIHsKLQlpZiAobGluay0+ZGV2X25vZGUpIHVucmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0gICAgICAgIGZyZWVfbmV0ZGV2KGRldik7Ci0gICAgfQotICAgIERFQlVHKDIsInJheV9jcyByYXlfZGV0YWNoIGVuZGluZ1xuIik7CisJaWYgKGxpbmstPnByaXYpIHsKKwkJaWYgKGxpbmstPmRldl9ub2RlKQorCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwkJZnJlZV9uZXRkZXYoZGV2KTsKKwl9CisJREVCVUcoMiwgInJheV9jcyByYXlfZGV0YWNoIGVuZGluZ1xuIik7CiB9IC8qIHJheV9kZXRhY2ggKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgIHJheV9jb25maWcoKSBpcyBydW4gYWZ0ZXIgYSBDQVJEX0lOU0VSVElPTiBldmVudAogICAgIGlzIHJlY2VpdmVkLCB0byBjb25maWd1cmUgdGhlIFBDTUNJQSBzb2NrZXQsIGFuZCB0byBtYWtlIHRoZQpAQCAtNDA4LDkyICs0MjAsMTAxIEBACiAjZGVmaW5lIE1BWF9UVVBMRV9TSVpFIDEyOAogc3RhdGljIGludCByYXlfY29uZmlnKHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rKQogewotICAgIGludCBsYXN0X2ZuID0gMCwgbGFzdF9yZXQgPSAwOwotICAgIGludCBpOwotICAgIHdpbl9yZXFfdCByZXE7Ci0gICAgbWVtcmVxX3QgbWVtOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilsaW5rLT5wcml2OwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBsYXN0X2ZuID0gMCwgbGFzdF9yZXQgPSAwOworCWludCBpOworCXdpbl9yZXFfdCByZXE7CisJbWVtcmVxX3QgbWVtOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilsaW5rLT5wcml2OworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0gICAgREVCVUcoMSwgInJheV9jb25maWcoMHglcClcbiIsIGxpbmspOworCURFQlVHKDEsICJyYXlfY29uZmlnKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIC8qIERldGVybWluZSBjYXJkIHR5cGUgYW5kIGZpcm13YXJlIHZlcnNpb24gKi8KLSAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfY3MgRGV0ZWN0ZWQ6ICVzJXMlcyVzXG4iLAotCSAgIGxpbmstPnByb2RfaWRbMF0gPyBsaW5rLT5wcm9kX2lkWzBdIDogIiAiLAotCSAgIGxpbmstPnByb2RfaWRbMV0gPyBsaW5rLT5wcm9kX2lkWzFdIDogIiAiLAotCSAgIGxpbmstPnByb2RfaWRbMl0gPyBsaW5rLT5wcm9kX2lkWzJdIDogIiAiLAotCSAgIGxpbmstPnByb2RfaWRbM10gPyBsaW5rLT5wcm9kX2lkWzNdIDogIiAiKTsKKwkvKiBEZXRlcm1pbmUgY2FyZCB0eXBlIGFuZCBmaXJtd2FyZSB2ZXJzaW9uICovCisJcHJpbnRrKEtFUk5fSU5GTyAicmF5X2NzIERldGVjdGVkOiAlcyVzJXMlc1xuIiwKKwkgICAgICAgbGluay0+cHJvZF9pZFswXSA/IGxpbmstPnByb2RfaWRbMF0gOiAiICIsCisJICAgICAgIGxpbmstPnByb2RfaWRbMV0gPyBsaW5rLT5wcm9kX2lkWzFdIDogIiAiLAorCSAgICAgICBsaW5rLT5wcm9kX2lkWzJdID8gbGluay0+cHJvZF9pZFsyXSA6ICIgIiwKKwkgICAgICAgbGluay0+cHJvZF9pZFszXSA/IGxpbmstPnByb2RfaWRbM10gOiAiICIpOwogCi0gICAgLyogTm93IGFsbG9jYXRlIGFuIGludGVycnVwdCBsaW5lLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QKLSAgICAgICBhY3R1YWxseSBhc3NpZ24gYSBoYW5kbGVyIHRvIHRoZSBpbnRlcnJ1cHQuCi0gICAgKi8KLSAgICBDU19DSEVDSyhSZXF1ZXN0SVJRLCBwY21jaWFfcmVxdWVzdF9pcnEobGluaywgJmxpbmstPmlycSkpOwotICAgIGRldi0+aXJxID0gbGluay0+aXJxLkFzc2lnbmVkSVJROwotICAgIAotICAgIC8qIFRoaXMgYWN0dWFsbHkgY29uZmlndXJlcyB0aGUgUENNQ0lBIHNvY2tldCAtLSBzZXR0aW5nIHVwCi0gICAgICAgdGhlIEkvTyB3aW5kb3dzIGFuZCB0aGUgaW50ZXJydXB0IG1hcHBpbmcuCi0gICAgKi8KLSAgICBDU19DSEVDSyhSZXF1ZXN0Q29uZmlndXJhdGlvbiwgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOworCS8qIE5vdyBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQgbGluZS4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90CisJICAgYWN0dWFsbHkgYXNzaWduIGEgaGFuZGxlciB0byB0aGUgaW50ZXJydXB0LgorCSAqLworCUNTX0NIRUNLKFJlcXVlc3RJUlEsIHBjbWNpYV9yZXF1ZXN0X2lycShsaW5rLCAmbGluay0+aXJxKSk7CisJZGV2LT5pcnEgPSBsaW5rLT5pcnEuQXNzaWduZWRJUlE7CisKKwkvKiBUaGlzIGFjdHVhbGx5IGNvbmZpZ3VyZXMgdGhlIFBDTUNJQSBzb2NrZXQgLS0gc2V0dGluZyB1cAorCSAgIHRoZSBJL08gd2luZG93cyBhbmQgdGhlIGludGVycnVwdCBtYXBwaW5nLgorCSAqLworCUNTX0NIRUNLKFJlcXVlc3RDb25maWd1cmF0aW9uLAorCQkgcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZikpOwogCiAvKioqIFNldCB1cCAzMmsgd2luZG93IGZvciBzaGFyZWQgbWVtb3J5ICh0cmFuc21pdCBhbmQgY29udHJvbCkgKioqKioqKioqKioqLwotICAgIHJlcS5BdHRyaWJ1dGVzID0gV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9DTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7Ci0gICAgcmVxLkJhc2UgPSAwOwotICAgIHJlcS5TaXplID0gMHg4MDAwOwotICAgIHJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7Ci0gICAgQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywgcGNtY2lhX3JlcXVlc3Rfd2luZG93KCZsaW5rLCAmcmVxLCAmbGluay0+d2luKSk7Ci0gICAgbWVtLkNhcmRPZmZzZXQgPSAweDAwMDA7IG1lbS5QYWdlID0gMDsKLSAgICBDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxpbmstPndpbiwgJm1lbSkpOwotICAgIGxvY2FsLT5zcmFtID0gaW9yZW1hcChyZXEuQmFzZSxyZXEuU2l6ZSk7CisJcmVxLkF0dHJpYnV0ZXMgPQorCSAgICBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKKwlyZXEuQmFzZSA9IDA7CisJcmVxLlNpemUgPSAweDgwMDA7CisJcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKKwlDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsaW5rLT53aW4pKTsKKwltZW0uQ2FyZE9mZnNldCA9IDB4MDAwMDsKKwltZW0uUGFnZSA9IDA7CisJQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsaW5rLT53aW4sICZtZW0pKTsKKwlsb2NhbC0+c3JhbSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKIAogLyoqKiBTZXQgdXAgMTZrIHdpbmRvdyBmb3Igc2hhcmVkIG1lbW9yeSAocmVjZWl2ZSBidWZmZXIpICoqKioqKioqKioqKioqKi8KLSAgICByZXEuQXR0cmlidXRlcyA9IFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQ00gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOwotICAgIHJlcS5CYXNlID0gMDsKLSAgICByZXEuU2l6ZSA9IDB4NDAwMDsKLSAgICByZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOwotICAgIENTX0NIRUNLKFJlcXVlc3RXaW5kb3csIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxvY2FsLT5ybWVtX2hhbmRsZSkpOwotICAgIG1lbS5DYXJkT2Zmc2V0ID0gMHg4MDAwOyBtZW0uUGFnZSA9IDA7Ci0gICAgQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsb2NhbC0+cm1lbV9oYW5kbGUsICZtZW0pKTsKLSAgICBsb2NhbC0+cm1lbSA9IGlvcmVtYXAocmVxLkJhc2UscmVxLlNpemUpOworCXJlcS5BdHRyaWJ1dGVzID0KKwkgICAgV0lOX0RBVEFfV0lEVEhfOCB8IFdJTl9NRU1PUllfVFlQRV9DTSB8IFdJTl9FTkFCTEUgfCBXSU5fVVNFX1dBSVQ7CisJcmVxLkJhc2UgPSAwOworCXJlcS5TaXplID0gMHg0MDAwOworCXJlcS5BY2Nlc3NTcGVlZCA9IHJheV9tZW1fc3BlZWQ7CisJQ1NfQ0hFQ0soUmVxdWVzdFdpbmRvdywKKwkJIHBjbWNpYV9yZXF1ZXN0X3dpbmRvdygmbGluaywgJnJlcSwgJmxvY2FsLT5ybWVtX2hhbmRsZSkpOworCW1lbS5DYXJkT2Zmc2V0ID0gMHg4MDAwOworCW1lbS5QYWdlID0gMDsKKwlDU19DSEVDSyhNYXBNZW1QYWdlLCBwY21jaWFfbWFwX21lbV9wYWdlKGxvY2FsLT5ybWVtX2hhbmRsZSwgJm1lbSkpOworCWxvY2FsLT5ybWVtID0gaW9yZW1hcChyZXEuQmFzZSwgcmVxLlNpemUpOwogCiAvKioqIFNldCB1cCB3aW5kb3cgZm9yIGF0dHJpYnV0ZSBtZW1vcnkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgcmVxLkF0dHJpYnV0ZXMgPSBXSU5fREFUQV9XSURUSF84IHwgV0lOX01FTU9SWV9UWVBFX0FNIHwgV0lOX0VOQUJMRSB8IFdJTl9VU0VfV0FJVDsKLSAgICByZXEuQmFzZSA9IDA7Ci0gICAgcmVxLlNpemUgPSAweDEwMDA7Ci0gICAgcmVxLkFjY2Vzc1NwZWVkID0gcmF5X21lbV9zcGVlZDsKLSAgICBDU19DSEVDSyhSZXF1ZXN0V2luZG93LCBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsb2NhbC0+YW1lbV9oYW5kbGUpKTsKLSAgICBtZW0uQ2FyZE9mZnNldCA9IDB4MDAwMDsgbWVtLlBhZ2UgPSAwOwotICAgIENTX0NIRUNLKE1hcE1lbVBhZ2UsIHBjbWNpYV9tYXBfbWVtX3BhZ2UobG9jYWwtPmFtZW1faGFuZGxlLCAmbWVtKSk7Ci0gICAgbG9jYWwtPmFtZW0gPSBpb3JlbWFwKHJlcS5CYXNlLHJlcS5TaXplKTsKKwlyZXEuQXR0cmlidXRlcyA9CisJICAgIFdJTl9EQVRBX1dJRFRIXzggfCBXSU5fTUVNT1JZX1RZUEVfQU0gfCBXSU5fRU5BQkxFIHwgV0lOX1VTRV9XQUlUOworCXJlcS5CYXNlID0gMDsKKwlyZXEuU2l6ZSA9IDB4MTAwMDsKKwlyZXEuQWNjZXNzU3BlZWQgPSByYXlfbWVtX3NwZWVkOworCUNTX0NIRUNLKFJlcXVlc3RXaW5kb3csCisJCSBwY21jaWFfcmVxdWVzdF93aW5kb3coJmxpbmssICZyZXEsICZsb2NhbC0+YW1lbV9oYW5kbGUpKTsKKwltZW0uQ2FyZE9mZnNldCA9IDB4MDAwMDsKKwltZW0uUGFnZSA9IDA7CisJQ1NfQ0hFQ0soTWFwTWVtUGFnZSwgcGNtY2lhX21hcF9tZW1fcGFnZShsb2NhbC0+YW1lbV9oYW5kbGUsICZtZW0pKTsKKwlsb2NhbC0+YW1lbSA9IGlvcmVtYXAocmVxLkJhc2UsIHJlcS5TaXplKTsKIAotICAgIERFQlVHKDMsInJheV9jb25maWcgc3JhbT0lcFxuIixsb2NhbC0+c3JhbSk7Ci0gICAgREVCVUcoMywicmF5X2NvbmZpZyBybWVtPSVwXG4iLGxvY2FsLT5ybWVtKTsKLSAgICBERUJVRygzLCJyYXlfY29uZmlnIGFtZW09JXBcbiIsbG9jYWwtPmFtZW0pOwotICAgIGlmIChyYXlfaW5pdChkZXYpIDwgMCkgewotICAgICAgICByYXlfcmVsZWFzZShsaW5rKTsKLSAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgfQorCURFQlVHKDMsICJyYXlfY29uZmlnIHNyYW09JXBcbiIsIGxvY2FsLT5zcmFtKTsKKwlERUJVRygzLCAicmF5X2NvbmZpZyBybWVtPSVwXG4iLCBsb2NhbC0+cm1lbSk7CisJREVCVUcoMywgInJheV9jb25maWcgYW1lbT0lcFxuIiwgbG9jYWwtPmFtZW0pOworCWlmIChyYXlfaW5pdChkZXYpIDwgMCkgeworCQlyYXlfcmVsZWFzZShsaW5rKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCi0gICAgU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7Ci0gICAgaSA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwotICAgIGlmIChpICE9IDApIHsKLSAgICAgICAgcHJpbnRrKCJyYXlfY29uZmlnIHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7Ci0gICAgICAgIHJheV9yZWxlYXNlKGxpbmspOwotICAgICAgICByZXR1cm4gaTsKLSAgICB9CisJU0VUX05FVERFVl9ERVYoZGV2LCAmaGFuZGxlX3RvX2RldihsaW5rKSk7CisJaSA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChpICE9IDApIHsKKwkJcHJpbnRrKCJyYXlfY29uZmlnIHJlZ2lzdGVyX25ldGRldigpIGZhaWxlZFxuIik7CisJCXJheV9yZWxlYXNlKGxpbmspOworCQlyZXR1cm4gaTsKKwl9CiAKLSAgICBzdHJjcHkobG9jYWwtPm5vZGUuZGV2X25hbWUsIGRldi0+bmFtZSk7Ci0gICAgbGluay0+ZGV2X25vZGUgPSAmbG9jYWwtPm5vZGU7CisJc3RyY3B5KGxvY2FsLT5ub2RlLmRldl9uYW1lLCBkZXYtPm5hbWUpOworCWxpbmstPmRldl9ub2RlID0gJmxvY2FsLT5ub2RlOwogCi0gICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJheUxpbmssIGlycSAlZCwgaHdfYWRkciAlcE1cbiIsCi0gICAgICAgZGV2LT5uYW1lLCBkZXYtPmlycSwgZGV2LT5kZXZfYWRkcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJheUxpbmssIGlycSAlZCwgaHdfYWRkciAlcE1cbiIsCisJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEsIGRldi0+ZGV2X2FkZHIpOwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiAKIGNzX2ZhaWxlZDoKLSAgICBjc19lcnJvcihsaW5rLCBsYXN0X2ZuLCBsYXN0X3JldCk7CisJY3NfZXJyb3IobGluaywgbGFzdF9mbiwgbGFzdF9yZXQpOwogCi0gICAgcmF5X3JlbGVhc2UobGluayk7Ci0gICAgcmV0dXJuIC1FTk9ERVY7CisJcmF5X3JlbGVhc2UobGluayk7CisJcmV0dXJuIC1FTk9ERVY7CiB9IC8qIHJheV9jb25maWcgKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2NzIF9faW9tZW0gKmNjc19iYXNlKHJheV9kZXZfdCAqZGV2KQpAQCAtNTE2LDI2NyArNTM3LDI3OCBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIGludCBpOwotICAgIFVDSEFSICpwOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgREVCVUcoMSwgInJheV9pbml0KDB4JXApXG4iLCBkZXYpOwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMCwicmF5X2luaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCWludCBpOworCVVDSEFSICpwOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJREVCVUcoMSwgInJheV9pbml0KDB4JXApXG4iLCBkZXYpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMCwgInJheV9pbml0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICAgIGxvY2FsLT5uZXRfdHlwZSA9IG5ldF90eXBlOwotICAgIGxvY2FsLT5zdGFfdHlwZSA9IFRZUEVfU1RBOworCWxvY2FsLT5uZXRfdHlwZSA9IG5ldF90eXBlOworCWxvY2FsLT5zdGFfdHlwZSA9IFRZUEVfU1RBOwogCi0gICAgLyogQ29weSB0aGUgc3RhcnR1cCByZXN1bHRzIHRvIGxvY2FsIG1lbW9yeSAqLwotICAgIG1lbWNweV9mcm9taW8oJmxvY2FsLT5zdGFydHVwX3JlcywgbG9jYWwtPnNyYW0gKyBFQ0ZfVE9fSE9TVF9CQVNFLFwKLSAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzdGFydHVwX3Jlc182KSk7CisJLyogQ29weSB0aGUgc3RhcnR1cCByZXN1bHRzIHRvIGxvY2FsIG1lbW9yeSAqLworCW1lbWNweV9mcm9taW8oJmxvY2FsLT5zdGFydHVwX3JlcywgbG9jYWwtPnNyYW0gKyBFQ0ZfVE9fSE9TVF9CQVNFLAorCQkgICAgICBzaXplb2Yoc3RydWN0IHN0YXJ0dXBfcmVzXzYpKTsKIAotICAgIC8qIENoZWNrIFBvd2VyIHVwIHRlc3Qgc3RhdHVzIGFuZCBnZXQgbWFjIGFkZHJlc3MgZnJvbSBjYXJkICovCi0gICAgaWYgKGxvY2FsLT5zdGFydHVwX3Jlcy5zdGFydHVwX3dvcmQgIT0gMHg4MCkgewotICAgIHByaW50ayhLRVJOX0lORk8gInJheV9pbml0IEVSUk9SIGNhcmQgc3RhdHVzID0gJTJ4XG4iLAotICAgICAgICAgICBsb2NhbC0+c3RhcnR1cF9yZXMuc3RhcnR1cF93b3JkKTsKLSAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9JTklUX0VSUk9SOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCS8qIENoZWNrIFBvd2VyIHVwIHRlc3Qgc3RhdHVzIGFuZCBnZXQgbWFjIGFkZHJlc3MgZnJvbSBjYXJkICovCisJaWYgKGxvY2FsLT5zdGFydHVwX3Jlcy5zdGFydHVwX3dvcmQgIT0gMHg4MCkgeworCQlwcmludGsoS0VSTl9JTkZPICJyYXlfaW5pdCBFUlJPUiBjYXJkIHN0YXR1cyA9ICUyeFxuIiwKKwkJICAgICAgIGxvY2FsLT5zdGFydHVwX3Jlcy5zdGFydHVwX3dvcmQpOworCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0lOSVRfRVJST1I7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICBsb2NhbC0+ZndfdmVyID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMF07Ci0gICAgbG9jYWwtPmZ3X2JsZCA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzFdOwotICAgIGxvY2FsLT5md192YXIgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblsyXTsKLSAgICBERUJVRygxLCJyYXlfaW5pdCBmaXJtd2FyZSB2ZXJzaW9uICVkLiVkIFxuIixsb2NhbC0+ZndfdmVyLCBsb2NhbC0+ZndfYmxkKTsKKwlsb2NhbC0+ZndfdmVyID0gbG9jYWwtPnN0YXJ0dXBfcmVzLmZpcm13YXJlX3ZlcnNpb25bMF07CisJbG9jYWwtPmZ3X2JsZCA9IGxvY2FsLT5zdGFydHVwX3Jlcy5maXJtd2FyZV92ZXJzaW9uWzFdOworCWxvY2FsLT5md192YXIgPSBsb2NhbC0+c3RhcnR1cF9yZXMuZmlybXdhcmVfdmVyc2lvblsyXTsKKwlERUJVRygxLCAicmF5X2luaXQgZmlybXdhcmUgdmVyc2lvbiAlZC4lZCBcbiIsIGxvY2FsLT5md192ZXIsCisJICAgICAgbG9jYWwtPmZ3X2JsZCk7CiAKLSAgICBsb2NhbC0+dGliX2xlbmd0aCA9IDB4MjA7Ci0gICAgaWYgKChsb2NhbC0+ZndfdmVyID09IDUpICYmIChsb2NhbC0+ZndfYmxkID49IDMwKSkKLSAgICAgICAgbG9jYWwtPnRpYl9sZW5ndGggPSBsb2NhbC0+c3RhcnR1cF9yZXMudGliX2xlbmd0aDsKLSAgICBERUJVRygyLCJyYXlfaW5pdCB0aWJfbGVuZ3RoID0gMHglMDJ4XG4iLCBsb2NhbC0+dGliX2xlbmd0aCk7Ci0gICAgLyogSW5pdGlhbGl6ZSBDQ1MncyB0byBidWZmZXIgZnJlZSBzdGF0ZSAqLwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCk7Ci0gICAgZm9yIChpPTA7ICBpPE5VTUJFUl9PRl9DQ1M7ICBpKyspIHsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICB9Ci0gICAgaW5pdF9zdGFydHVwX3BhcmFtcyhsb2NhbCk7CisJbG9jYWwtPnRpYl9sZW5ndGggPSAweDIwOworCWlmICgobG9jYWwtPmZ3X3ZlciA9PSA1KSAmJiAobG9jYWwtPmZ3X2JsZCA+PSAzMCkpCisJCWxvY2FsLT50aWJfbGVuZ3RoID0gbG9jYWwtPnN0YXJ0dXBfcmVzLnRpYl9sZW5ndGg7CisJREVCVUcoMiwgInJheV9pbml0IHRpYl9sZW5ndGggPSAweCUwMnhcbiIsIGxvY2FsLT50aWJfbGVuZ3RoKTsKKwkvKiBJbml0aWFsaXplIENDUydzIHRvIGJ1ZmZlciBmcmVlIHN0YXRlICovCisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NDUzsgaSsrKSB7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJfQorCWluaXRfc3RhcnR1cF9wYXJhbXMobG9jYWwpOwogCi0gICAgLyogY29weSBtYWMgYWRkcmVzcyB0byBzdGFydHVwIHBhcmFtZXRlcnMgKi8KLSAgICBpZiAocGFyc2VfYWRkcihwaHlfYWRkciwgbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIpKQotICAgIHsKLSAgICAgICAgcCA9IGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtZW1jcHkoJmxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLAotICAgICAgICAgICAgICAgJmxvY2FsLT5zdGFydHVwX3Jlcy5zdGF0aW9uX2FkZHIsIEFERFJMRU4pOwotICAgICAgICBwID0gbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHI7Ci0gICAgfQorCS8qIGNvcHkgbWFjIGFkZHJlc3MgdG8gc3RhcnR1cCBwYXJhbWV0ZXJzICovCisJaWYgKHBhcnNlX2FkZHIocGh5X2FkZHIsIGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyKSkgeworCQlwID0gbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHI7CisJfSBlbHNlIHsKKwkJbWVtY3B5KCZsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwKKwkJICAgICAgICZsb2NhbC0+c3RhcnR1cF9yZXMuc3RhdGlvbl9hZGRyLCBBRERSTEVOKTsKKwkJcCA9IGxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyOworCX0KIAotICAgIGNsZWFyX2ludGVycnVwdChsb2NhbCk7IC8qIENsZWFyIGFueSBpbnRlcnJ1cHQgZnJvbSB0aGUgY2FyZCAqLwotICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVdBSVRJTkdfUEFSQU07Ci0gICAgREVCVUcoMiwicmF5X2luaXQgZW5kaW5nXG4iKTsKLSAgICByZXR1cm4gMDsKKwljbGVhcl9pbnRlcnJ1cHQobG9jYWwpOwkvKiBDbGVhciBhbnkgaW50ZXJydXB0IGZyb20gdGhlIGNhcmQgKi8KKwlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FXQUlUSU5HX1BBUkFNOworCURFQlVHKDIsICJyYXlfaW5pdCBlbmRpbmdcbiIpOworCXJldHVybiAwOwogfSAvKiByYXlfaW5pdCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBEb3dubG9hZCBzdGFydHVwIHBhcmFtZXRlcnMgdG8gdGhlIGNhcmQgYW5kIGNvbW1hbmQgaXQgdG8gcmVhZCB0aGVtICAgICAgICovCiBzdGF0aWMgaW50IGRsX3N0YXJ0dXBfcGFyYW1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJaW50IGNjc2luZGV4OworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBERUJVRygxLCJkbF9zdGFydHVwX3BhcmFtcyBlbnRlcmVkXG4iKTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBkbF9zdGFydHVwX3BhcmFtcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgCi0gICAgLyogQ29weSBwYXJhbWV0ZXJzIHRvIGhvc3QgdG8gRUNGIGFyZWEgKi8KLSAgICBpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSAKLSAgICAgICAgbWVtY3B5X3RvaW8obG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFLCAmbG9jYWwtPnNwYXJtLmI0LAotICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBiNF9zdGFydHVwX3BhcmFtcykpOwotICAgIGVsc2UKLSAgICAgICAgbWVtY3B5X3RvaW8obG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFLCAmbG9jYWwtPnNwYXJtLmI1LAotICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcykpOworCURFQlVHKDEsICJkbF9zdGFydHVwX3BhcmFtcyBlbnRlcmVkXG4iKTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgZGxfc3RhcnR1cF9wYXJhbXMgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQogCi0gICAgCi0gICAgLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHJldHVybiAtMTsKLSAgICBsb2NhbC0+ZGxfcGFyYW1fY2NzID0gY2NzaW5kZXg7Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIHdyaXRlYihDQ1NfRE9XTkxPQURfU1RBUlRVUF9QQVJBTVMsICZwY2NzLT5jbWQpOwotICAgIERFQlVHKDIsImRsX3N0YXJ0dXBfcGFyYW1zIHN0YXJ0IGNjc2luZGV4ID0gJWRcbiIsIGxvY2FsLT5kbF9wYXJhbV9jY3MpOwotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKLSAgICAgICAgICAgIkVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNX0VSUk9SOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICByZXR1cm4gLTI7Ci0gICAgfQotICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRExfUEFSQU07Ci0gICAgLyogU3RhcnQga2VybmVsIHRpbWVyIHRvIHdhaXQgZm9yIGRsIHN0YXJ0dXAgdG8gY29tcGxldGUuICovCi0gICAgbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFovMjsKLSAgICBsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOwotICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZ2ZXJpZnlfZGxfc3RhcnR1cDsKLSAgICBhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgREVCVUcoMiwicmF5X2NzIGRsX3N0YXJ0dXBfcGFyYW1zIHN0YXJ0ZWQgdGltZXIgZm9yIHZlcmlmeV9kbF9zdGFydHVwXG4iKTsKLSAgICByZXR1cm4gMDsKKwkvKiBDb3B5IHBhcmFtZXRlcnMgdG8gaG9zdCB0byBFQ0YgYXJlYSAqLworCWlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpCisJCW1lbWNweV90b2lvKGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSwgJmxvY2FsLT5zcGFybS5iNCwKKwkJCSAgICBzaXplb2Yoc3RydWN0IGI0X3N0YXJ0dXBfcGFyYW1zKSk7CisJZWxzZQorCQltZW1jcHlfdG9pbyhsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UsICZsb2NhbC0+c3Bhcm0uYjUsCisJCQkgICAgc2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcykpOworCisJLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCisJCXJldHVybiAtMTsKKwlsb2NhbC0+ZGxfcGFyYW1fY2NzID0gY2NzaW5kZXg7CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXdyaXRlYihDQ1NfRE9XTkxPQURfU1RBUlRVUF9QQVJBTVMsICZwY2NzLT5jbWQpOworCURFQlVHKDIsICJkbF9zdGFydHVwX3BhcmFtcyBzdGFydCBjY3NpbmRleCA9ICVkXG4iLAorCSAgICAgIGxvY2FsLT5kbF9wYXJhbV9jY3MpOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmF5IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKKwkJICAgICAgICJFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTV9FUlJPUjsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwkJcmV0dXJuIC0yOworCX0KKwlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RMX1BBUkFNOworCS8qIFN0YXJ0IGtlcm5lbCB0aW1lciB0byB3YWl0IGZvciBkbCBzdGFydHVwIHRvIGNvbXBsZXRlLiAqLworCWxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaIC8gMjsKKwlsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOworCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZ2ZXJpZnlfZGxfc3RhcnR1cDsKKwlhZGRfdGltZXIoJmxvY2FsLT50aW1lcik7CisJREVCVUcoMiwKKwkgICAgICAicmF5X2NzIGRsX3N0YXJ0dXBfcGFyYW1zIHN0YXJ0ZWQgdGltZXIgZm9yIHZlcmlmeV9kbF9zdGFydHVwXG4iKTsKKwlyZXR1cm4gMDsKIH0gLyogZGxfc3RhcnR1cF9wYXJhbXMgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgaW5pdF9zdGFydHVwX3BhcmFtcyhyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIGludCBpOyAKKwlpbnQgaTsKIAotICAgIGlmIChjb3VudHJ5ID4gSkFQQU5fVEVTVCkgY291bnRyeSA9IFVTQTsKLSAgICBlbHNlCi0gICAgICAgIGlmIChjb3VudHJ5IDwgVVNBKSBjb3VudHJ5ID0gVVNBOwotICAgIC8qIHN0cnVjdHVyZSBmb3IgaG9wIHRpbWUgYW5kIGJlYWNvbiBwZXJpb2QgaXMgZGVmaW5lZCBoZXJlIHVzaW5nIAotICAgICAqIE5ldyA4MDIuMTFENi4xIGZvcm1hdC4gIENhcmQgZmlybXdhcmUgaXMgc3RpbGwgdXNpbmcgb2xkIGZvcm1hdAotICAgICAqIHVudGlsIHZlcnNpb24gNi4KLSAgICAgKiAgICBCZWZvcmUgICAgICAgICAgICAgICAgICAgIEFmdGVyCi0gICAgICogICAgYV9ob3BfdGltZSBtcyBieXRlICAgICAgICBhX2hvcF90aW1lIG1zIGJ5dGUKLSAgICAgKiAgICBhX2hvcF90aW1lIDJzIGJ5dGUgICAgICAgIGFfaG9wX3RpbWUgbHMgYnl0ZQotICAgICAqICAgIGFfaG9wX3RpbWUgbHMgYnl0ZSAgICAgICAgYV9iZWFjb25fcGVyaW9kIG1zIGJ5dGUKLSAgICAgKiAgICBhX2JlYWNvbl9wZXJpb2QgICAgICAgICAgIGFfYmVhY29uX3BlcmlvZCBscyBieXRlCi0gICAgICoKLSAgICAgKiAgICBhX2hvcF90aW1lID0gdVMgICAgICAgICAgIGFfaG9wX3RpbWUgPSBLdVMKLSAgICAgKiAgICBhX2JlYWNvbl9wZXJpb2QgPSBob3BzICAgIGFfYmVhY29uX3BlcmlvZCA9IEt1UwotICAgICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogNjRtcyA9IDAxMDAwMCAqLwotICAgIGlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpICB7Ci0gICAgICAgIG1lbWNweSgoVUNIQVIgKikmbG9jYWwtPnNwYXJtLmI0LCBiNF9kZWZhdWx0X3N0YXJ0dXBfcGFybXMsIAotICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBiNF9zdGFydHVwX3BhcmFtcykpOwotICAgICAgICAvKiBUcmFuc2xhdGUgc2FuZSBrdXMgaW5wdXQgdmFsdWVzIHRvIG9sZCBidWlsZCA0LzUgZm9ybWF0ICovCi0gICAgICAgIC8qIGkgPSBob3AgdGltZSBpbiB1UyB0cnVuY2F0ZWQgdG8gMyBieXRlcyAqLwotICAgICAgICBpID0gKGhvcF9kd2VsbCAqIDEwMjQpICYgMHhmZmZmZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2hvcF90aW1lWzBdID0gKGkgPj4gMTYpICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfaG9wX3RpbWVbMV0gPSAoaSA+PiA4KSAmIDB4ZmY7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2JlYWNvbl9wZXJpb2RbMF0gPSAwOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9iZWFjb25fcGVyaW9kWzFdID0KLSAgICAgICAgICAgICgoYmVhY29uX3BlcmlvZC9ob3BfZHdlbGwpIC0gMSkgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyX2NvdW50cnlfY29kZSA9IGNvdW50cnk7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2hvcF9wYXR0ZXJuX2xlbmd0aCA9IAotICAgICAgICAgICAgaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV0gLSAxOwotICAgICAgICBpZiAoYmMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2Fja190aW1lb3V0ID0gMHg1MDsKLSAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX3NpZnMgPSAweDNmOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgeyAgICAvKiBWZXJzaW9uIDUgdXNlcyByZWFsIGt1cyB2YWx1ZXMgKi8KLSAgICAgICAgbWVtY3B5KChVQ0hBUiAqKSZsb2NhbC0+c3Bhcm0uYjUsIGI1X2RlZmF1bHRfc3RhcnR1cF9wYXJtcywgCi0gICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKSk7CisJaWYgKGNvdW50cnkgPiBKQVBBTl9URVNUKQorCQljb3VudHJ5ID0gVVNBOworCWVsc2UgaWYgKGNvdW50cnkgPCBVU0EpCisJCWNvdW50cnkgPSBVU0E7CisJLyogc3RydWN0dXJlIGZvciBob3AgdGltZSBhbmQgYmVhY29uIHBlcmlvZCBpcyBkZWZpbmVkIGhlcmUgdXNpbmcKKwkgKiBOZXcgODAyLjExRDYuMSBmb3JtYXQuICBDYXJkIGZpcm13YXJlIGlzIHN0aWxsIHVzaW5nIG9sZCBmb3JtYXQKKwkgKiB1bnRpbCB2ZXJzaW9uIDYuCisJICogICAgQmVmb3JlICAgICAgICAgICAgICAgICAgICBBZnRlcgorCSAqICAgIGFfaG9wX3RpbWUgbXMgYnl0ZSAgICAgICAgYV9ob3BfdGltZSBtcyBieXRlCisJICogICAgYV9ob3BfdGltZSAycyBieXRlICAgICAgICBhX2hvcF90aW1lIGxzIGJ5dGUKKwkgKiAgICBhX2hvcF90aW1lIGxzIGJ5dGUgICAgICAgIGFfYmVhY29uX3BlcmlvZCBtcyBieXRlCisJICogICAgYV9iZWFjb25fcGVyaW9kICAgICAgICAgICBhX2JlYWNvbl9wZXJpb2QgbHMgYnl0ZQorCSAqCisJICogICAgYV9ob3BfdGltZSA9IHVTICAgICAgICAgICBhX2hvcF90aW1lID0gS3VTCisJICogICAgYV9iZWFjb25fcGVyaW9kID0gaG9wcyAgICBhX2JlYWNvbl9wZXJpb2QgPSBLdVMKKwkgKi8vKiA2NG1zID0gMDEwMDAwICovCisJaWYgKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgeworCQltZW1jcHkoKFVDSEFSICopICZsb2NhbC0+c3Bhcm0uYjQsIGI0X2RlZmF1bHRfc3RhcnR1cF9wYXJtcywKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgYjRfc3RhcnR1cF9wYXJhbXMpKTsKKwkJLyogVHJhbnNsYXRlIHNhbmUga3VzIGlucHV0IHZhbHVlcyB0byBvbGQgYnVpbGQgNC81IGZvcm1hdCAqLworCQkvKiBpID0gaG9wIHRpbWUgaW4gdVMgdHJ1bmNhdGVkIHRvIDMgYnl0ZXMgKi8KKwkJaSA9IChob3BfZHdlbGwgKiAxMDI0KSAmIDB4ZmZmZmZmOworCQlsb2NhbC0+c3Bhcm0uYjQuYV9ob3BfdGltZVswXSA9IChpID4+IDE2KSAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNC5hX2hvcF90aW1lWzFdID0gKGkgPj4gOCkgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjQuYV9iZWFjb25fcGVyaW9kWzBdID0gMDsKKwkJbG9jYWwtPnNwYXJtLmI0LmFfYmVhY29uX3BlcmlvZFsxXSA9CisJCSAgICAoKGJlYWNvbl9wZXJpb2QgLyBob3BfZHdlbGwpIC0gMSkgJiAweGZmOworCQlsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyX2NvdW50cnlfY29kZSA9IGNvdW50cnk7CisJCWxvY2FsLT5zcGFybS5iNC5hX2hvcF9wYXR0ZXJuX2xlbmd0aCA9CisJCSAgICBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XSAtIDE7CisJCWlmIChiYykgeworCQkJbG9jYWwtPnNwYXJtLmI0LmFfYWNrX3RpbWVvdXQgPSAweDUwOworCQkJbG9jYWwtPnNwYXJtLmI0LmFfc2lmcyA9IDB4M2Y7CisJCX0KKwl9IGVsc2UgeyAvKiBWZXJzaW9uIDUgdXNlcyByZWFsIGt1cyB2YWx1ZXMgKi8KKwkJbWVtY3B5KChVQ0hBUiAqKSAmbG9jYWwtPnNwYXJtLmI1LCBiNV9kZWZhdWx0X3N0YXJ0dXBfcGFybXMsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IGI1X3N0YXJ0dXBfcGFyYW1zKSk7CiAKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3RpbWVbMF0gPSAoaG9wX2R3ZWxsID4+IDgpICYgMHhmZjsKLSAgICAgICAgbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3RpbWVbMV0gPSBob3BfZHdlbGwgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9iZWFjb25fcGVyaW9kWzBdID0gKGJlYWNvbl9wZXJpb2QgPj4gOCkgJiAweGZmOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9iZWFjb25fcGVyaW9kWzFdID0gYmVhY29uX3BlcmlvZCAmIDB4ZmY7Ci0gICAgICAgIGlmIChwc20pCi0gICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9wb3dlcl9tZ3Rfc3RhdGUgPSAxOwotICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyX2NvdW50cnlfY29kZSA9IGNvdW50cnk7Ci0gICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2hvcF9wYXR0ZXJuX2xlbmd0aCA9IAotICAgICAgICAgICAgaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV07Ci0gICAgfQotICAgIAotICAgIGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9IG5ldF90eXBlICYgMHgwMTsKLSAgICBsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzID0gVFlQRV9TVEE7CisJCWxvY2FsLT5zcGFybS5iNS5hX2hvcF90aW1lWzBdID0gKGhvcF9kd2VsbCA+PiA4KSAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNS5hX2hvcF90aW1lWzFdID0gaG9wX2R3ZWxsICYgMHhmZjsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfYmVhY29uX3BlcmlvZFswXSA9CisJCSAgICAoYmVhY29uX3BlcmlvZCA+PiA4KSAmIDB4ZmY7CisJCWxvY2FsLT5zcGFybS5iNS5hX2JlYWNvbl9wZXJpb2RbMV0gPSBiZWFjb25fcGVyaW9kICYgMHhmZjsKKwkJaWYgKHBzbSkKKwkJCWxvY2FsLT5zcGFybS5iNS5hX3Bvd2VyX21ndF9zdGF0ZSA9IDE7CisJCWxvY2FsLT5zcGFybS5iNS5hX2N1cnJfY291bnRyeV9jb2RlID0gY291bnRyeTsKKwkJbG9jYWwtPnNwYXJtLmI1LmFfaG9wX3BhdHRlcm5fbGVuZ3RoID0KKwkJICAgIGhvcF9wYXR0ZXJuX2xlbmd0aFsoaW50KWNvdW50cnldOworCX0KIAotICAgIGlmIChlc3NpZCAhPSBOVUxMKQotICAgICAgICBzdHJuY3B5KGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkLCBlc3NpZCwgRVNTSURfU0laRSk7Ci19IC8qIGluaXRfc3RhcnR1cF9wYXJhbXMgKi8gCisJbG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID0gbmV0X3R5cGUgJiAweDAxOworCWxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMgPSBUWVBFX1NUQTsKKworCWlmIChlc3NpZCAhPSBOVUxMKQorCQlzdHJuY3B5KGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkLCBlc3NpZCwgRVNTSURfU0laRSk7Cit9IC8qIGluaXRfc3RhcnR1cF9wYXJhbXMgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgdmVyaWZ5X2RsX3N0YXJ0dXAodV9sb25nIGRhdGEpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkYXRhOwotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGxvY2FsLT5kbF9wYXJhbV9jY3M7Ci0gICAgVUNIQVIgc3RhdHVzOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKSBkYXRhOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGxvY2FsLT5kbF9wYXJhbV9jY3M7CisJVUNIQVIgc3RhdHVzOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIHZlcmlmeV9kbF9zdGFydHVwIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgdmVyaWZ5X2RsX3N0YXJ0dXAgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQogI2lmZGVmIFBDTUNJQV9ERUJVRwotICAgIGlmIChwY19kZWJ1ZyA+IDIpIHsKLSAgICBpbnQgaTsKLSAgICBwcmludGsoS0VSTl9ERUJVRyAidmVyaWZ5X2RsX3N0YXJ0dXAgcGFyYW1ldGVycyBzZW50IHZpYSBjY3MgJWQ6XG4iLAotICAgICAgICAgICBsb2NhbC0+ZGxfcGFyYW1fY2NzKTsKLSAgICAgICAgZm9yIChpPTA7IGk8c2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcyk7IGkrKykgewotICAgICAgICAgICAgcHJpbnRrKCIgJTJ4IiwgKHVuc2lnbmVkIGludCkgcmVhZGIobG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFICsgaSkpOwotICAgICAgICB9Ci0gICAgcHJpbnRrKCJcbiIpOwotICAgIH0KKwlpZiAocGNfZGVidWcgPiAyKSB7CisJCWludCBpOworCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgInZlcmlmeV9kbF9zdGFydHVwIHBhcmFtZXRlcnMgc2VudCB2aWEgY2NzICVkOlxuIiwKKwkJICAgICAgIGxvY2FsLT5kbF9wYXJhbV9jY3MpOworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBiNV9zdGFydHVwX3BhcmFtcyk7IGkrKykgeworCQkJcHJpbnRrKCIgJTJ4IiwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXJlYWRiKGxvY2FsLT5zcmFtICsKKwkJCQkJCSAgIEhPU1RfVE9fRUNGX0JBU0UgKyBpKSk7CisJCX0KKwkJcHJpbnRrKCJcbiIpOworCX0KICNlbmRpZgogCi0gICAgc3RhdHVzID0gcmVhZGIoJnBjY3MtPmJ1ZmZlcl9zdGF0dXMpOwotICAgIGlmIChzdGF0dXMhPSBDQ1NfQlVGRkVSX0ZSRUUpCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJEb3dubG9hZCBzdGFydHVwIHBhcmFtcyBmYWlsZWQuICBTdGF0dXMgPSAlZFxuIiwKLSAgICAgICAgICAgc3RhdHVzKTsKLSAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTV9FUlJPUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKQotICAgICAgICBzdGFydF9uZXQoKHVfbG9uZylsb2NhbCk7Ci0gICAgZWxzZQotICAgICAgICBqb2luX25ldCgodV9sb25nKWxvY2FsKTsKKwlzdGF0dXMgPSByZWFkYigmcGNjcy0+YnVmZmVyX3N0YXR1cyk7CisJaWYgKHN0YXR1cyAhPSBDQ1NfQlVGRkVSX0ZSRUUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIkRvd25sb2FkIHN0YXJ0dXAgcGFyYW1zIGZhaWxlZC4gIFN0YXR1cyA9ICVkXG4iLAorCQkgICAgICAgc3RhdHVzKTsKKwkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ETF9QQVJBTV9FUlJPUjsKKwkJcmV0dXJuOworCX0KKwlpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKQorCQlzdGFydF9uZXQoKHVfbG9uZykgbG9jYWwpOworCWVsc2UKKwkJam9pbl9uZXQoKHVfbG9uZykgbG9jYWwpOwogCi0gICAgcmV0dXJuOworCXJldHVybjsKIH0gLyogZW5kIHZlcmlmeV9kbF9zdGFydHVwICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIENvbW1hbmQgY2FyZCB0byBzdGFydCBhIG5ldHdvcmsgKi8KIHN0YXRpYyB2b2lkIHN0YXJ0X25ldCh1X2xvbmcgZGF0YSkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKWRhdGE7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIGludCBjY3NpbmRleDsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3Mgc3RhcnRfbmV0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvKiBGaWxsIGluIHRoZSBDQ1MgZmllbGRzIGZvciB0aGUgRUNGICovCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgcmV0dXJuOwotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICB3cml0ZWIoQ0NTX1NUQVJUX05FVFdPUkssICZwY2NzLT5jbWQpOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsudXBkYXRlX3BhcmFtKTsKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDEsInJheSBzdGFydCBuZXQgZmFpbGVkIC0gY2FyZCBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROwotICAgIHJldHVybjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKSBkYXRhOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlpbnQgY2NzaW5kZXg7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBzdGFydF9uZXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQorCS8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KKwlpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQorCQlyZXR1cm47CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXdyaXRlYihDQ1NfU1RBUlRfTkVUV09SSywgJnBjY3MtPmNtZCk7CisJd3JpdGViKDAsICZwY2NzLT52YXIuc3RhcnRfbmV0d29yay51cGRhdGVfcGFyYW0pOworCS8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLworCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMSwgInJheSBzdGFydCBuZXQgZmFpbGVkIC0gY2FyZCBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCQlyZXR1cm47CisJfQorCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROworCXJldHVybjsKIH0gLyogZW5kIHN0YXJ0X25ldCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBDb21tYW5kIGNhcmQgdG8gam9pbiBhIG5ldHdvcmsgKi8KIHN0YXRpYyB2b2lkIGpvaW5fbmV0KHVfbG9uZyBkYXRhKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSAocmF5X2Rldl90ICopZGF0YTsKKwlyYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKSBkYXRhOwogCi0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIGludCBjY3NpbmRleDsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3Mgam9pbl9uZXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8qIEZpbGwgaW4gdGhlIENDUyBmaWVsZHMgZm9yIHRoZSBFQ0YgKi8KLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKSByZXR1cm47Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIHdyaXRlYihDQ1NfSk9JTl9ORVRXT1JLLCAmcGNjcy0+Y21kKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci5qb2luX25ldHdvcmsudXBkYXRlX3BhcmFtKTsKLSAgICB3cml0ZWIoMCwgJnBjY3MtPnZhci5qb2luX25ldHdvcmsubmV0X2luaXRpYXRlZCk7Ci0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygxLCJyYXkgam9pbiBuZXQgZmFpbGVkIC0gY2FyZCBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROwotICAgIHJldHVybjsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJaW50IGNjc2luZGV4OworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBqb2luX25ldCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CisJLyogRmlsbCBpbiB0aGUgQ0NTIGZpZWxkcyBmb3IgdGhlIEVDRiAqLworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApCisJCXJldHVybjsKKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJd3JpdGViKENDU19KT0lOX05FVFdPUkssICZwY2NzLT5jbWQpOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLmpvaW5fbmV0d29yay51cGRhdGVfcGFyYW0pOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLmpvaW5fbmV0d29yay5uZXRfaW5pdGlhdGVkKTsKKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDEsICJyYXkgam9pbiBuZXQgZmFpbGVkIC0gY2FyZCBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCQlyZXR1cm47CisJfQorCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfRE9JTkdfQUNROworCXJldHVybjsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgQWZ0ZXIgYSBjYXJkIGlzIHJlbW92ZWQsIHJheV9yZWxlYXNlKCkgd2lsbCB1bnJlZ2lzdGVyIHRoZSBuZXQKICAgICBkZXZpY2UsIGFuZCByZWxlYXNlIHRoZSBQQ01DSUEgY29uZmlndXJhdGlvbi4gIElmIHRoZSBkZXZpY2UgaXMKQEAgLTc4NCwyNSArODE2LDI3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCByYXlfcmVsZWFzZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsgCi0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgaW50IGk7Ci0gICAgCi0gICAgREVCVUcoMSwgInJheV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKIAotICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlERUJVRygxLCAicmF5X3JlbGVhc2UoMHglcClcbiIsIGxpbmspOwogCi0gICAgaW91bm1hcChsb2NhbC0+c3JhbSk7Ci0gICAgaW91bm1hcChsb2NhbC0+cm1lbSk7Ci0gICAgaW91bm1hcChsb2NhbC0+YW1lbSk7Ci0gICAgLyogRG8gYm90aGVyIGNoZWNraW5nIHRvIHNlZSBpZiB0aGVzZSBzdWNjZWVkIG9yIG5vdCAqLwotICAgIGkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPmFtZW1faGFuZGxlKTsKLSAgICBpZiAoIGkgIT0gMCApIERFQlVHKDAsIlJlbGVhc2VXaW5kb3cobG9jYWwtPmFtZW0pIHJldCA9ICV4XG4iLGkpOwotICAgIGkgPSBwY21jaWFfcmVsZWFzZV93aW5kb3cobG9jYWwtPnJtZW1faGFuZGxlKTsKLSAgICBpZiAoIGkgIT0gMCApIERFQlVHKDAsIlJlbGVhc2VXaW5kb3cobG9jYWwtPnJtZW0pIHJldCA9ICV4XG4iLGkpOwotICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKKwlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CiAKLSAgICBERUJVRygyLCJyYXlfcmVsZWFzZSBlbmRpbmdcbiIpOworCWlvdW5tYXAobG9jYWwtPnNyYW0pOworCWlvdW5tYXAobG9jYWwtPnJtZW0pOworCWlvdW5tYXAobG9jYWwtPmFtZW0pOworCS8qIERvIGJvdGhlciBjaGVja2luZyB0byBzZWUgaWYgdGhlc2Ugc3VjY2VlZCBvciBub3QgKi8KKwlpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5hbWVtX2hhbmRsZSk7CisJaWYgKGkgIT0gMCkKKwkJREVCVUcoMCwgIlJlbGVhc2VXaW5kb3cobG9jYWwtPmFtZW0pIHJldCA9ICV4XG4iLCBpKTsKKwlpID0gcGNtY2lhX3JlbGVhc2Vfd2luZG93KGxvY2FsLT5ybWVtX2hhbmRsZSk7CisJaWYgKGkgIT0gMCkKKwkJREVCVUcoMCwgIlJlbGVhc2VXaW5kb3cobG9jYWwtPnJtZW0pIHJldCA9ICV4XG4iLCBpKTsKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UobGluayk7CisKKwlERUJVRygyLCAicmF5X3JlbGVhc2UgZW5kaW5nXG4iKTsKIH0KIAogc3RhdGljIGludCByYXlfc3VzcGVuZChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKQEAgLTgzMSwyMzYgKzg2NSwyNDIgQEAKIHN0YXRpYyBpbnQgcmF5X2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYgUkFZX0lNTUVESUFURV9JTklUCi0gICAgaW50IGk7Ci0jZW5kaWYJLyogUkFZX0lNTUVESUFURV9JTklUICovCi0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBpOworI2VuZGlmIC8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIERFQlVHKDEsInJheV9kZXZfaW5pdChkZXY9JXApXG4iLGRldik7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfZGV2X2luaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorCURFQlVHKDEsICJyYXlfZGV2X2luaXQoZGV2PSVwKVxuIiwgZGV2KTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfZGV2X2luaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQogI2lmZGVmIFJBWV9JTU1FRElBVEVfSU5JVAotICAgIC8qIERvd25sb2FkIHN0YXJ0dXAgcGFyYW1ldGVycyAqLwotICAgIGlmICggKGkgPSBkbF9zdGFydHVwX3BhcmFtcyhkZXYpKSA8IDApCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfZGV2X2luaXQgZGxfc3RhcnR1cF9wYXJhbXMgZmFpbGVkIC0gIgotICAgICAgICAgICAicmV0dXJucyAweCV4XG4iLGkpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotI2Vsc2UJLyogUkFZX0lNTUVESUFURV9JTklUICovCi0gICAgLyogUG9zdHBvbmUgdGhlIGNhcmQgaW5pdCBzbyB0aGF0IHdlIGNhbiBzdGlsbCBjb25maWd1cmUgdGhlIGNhcmQsCi0gICAgICogZm9yIGV4YW1wbGUgdXNpbmcgdGhlIFdpcmVsZXNzIEV4dGVuc2lvbnMuIFRoZSBpbml0IHdpbGwgaGFwcGVuCi0gICAgICogaW4gcmF5X29wZW4oKSAtIEplYW4gSUkgKi8KLSAgICBERUJVRygxLCJyYXlfZGV2X2luaXQ6IHBvc3Rwb25pbmcgY2FyZCBpbml0IHRvIHJheV9vcGVuKCkgOyBTdGF0dXMgPSAlZFxuIiwKLQkgIGxvY2FsLT5jYXJkX3N0YXR1cyk7Ci0jZW5kaWYJLyogUkFZX0lNTUVESUFURV9JTklUICovCisJLyogRG93bmxvYWQgc3RhcnR1cCBwYXJhbWV0ZXJzICovCisJaWYgKChpID0gZGxfc3RhcnR1cF9wYXJhbXMoZGV2KSkgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gInJheV9kZXZfaW5pdCBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCisJCSAgICAgICAicmV0dXJucyAweCV4XG4iLCBpKTsKKwkJcmV0dXJuIC0xOworCX0KKyNlbHNlIC8qIFJBWV9JTU1FRElBVEVfSU5JVCAqLworCS8qIFBvc3Rwb25lIHRoZSBjYXJkIGluaXQgc28gdGhhdCB3ZSBjYW4gc3RpbGwgY29uZmlndXJlIHRoZSBjYXJkLAorCSAqIGZvciBleGFtcGxlIHVzaW5nIHRoZSBXaXJlbGVzcyBFeHRlbnNpb25zLiBUaGUgaW5pdCB3aWxsIGhhcHBlbgorCSAqIGluIHJheV9vcGVuKCkgLSBKZWFuIElJICovCisJREVCVUcoMSwKKwkgICAgICAicmF5X2Rldl9pbml0OiBwb3N0cG9uaW5nIGNhcmQgaW5pdCB0byByYXlfb3BlbigpIDsgU3RhdHVzID0gJWRcbiIsCisJICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzKTsKKyNlbmRpZiAvKiBSQVlfSU1NRURJQVRFX0lOSVQgKi8KIAotICAgIC8qIGNvcHkgbWFjIGFuZCBicm9hZGNhc3QgYWRkcmVzc2VzIHRvIGxpbnV4IGRldmljZSAqLwotICAgIG1lbWNweSgmZGV2LT5kZXZfYWRkciwgJmxvY2FsLT5zcGFybS5iNC5hX21hY19hZGRyLCBBRERSTEVOKTsKLSAgICBtZW1zZXQoZGV2LT5icm9hZGNhc3QsIDB4ZmYsIEVUSF9BTEVOKTsKKwkvKiBjb3B5IG1hYyBhbmQgYnJvYWRjYXN0IGFkZHJlc3NlcyB0byBsaW51eCBkZXZpY2UgKi8KKwltZW1jcHkoJmRldi0+ZGV2X2FkZHIsICZsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwgQUREUkxFTik7CisJbWVtc2V0KGRldi0+YnJvYWRjYXN0LCAweGZmLCBFVEhfQUxFTik7CiAKLSAgICBERUJVRygyLCJyYXlfZGV2X2luaXQgZW5kaW5nXG4iKTsKLSAgICByZXR1cm4gMDsKKwlERUJVRygyLCAicmF5X2Rldl9pbml0IGVuZGluZ1xuIik7CisJcmV0dXJuIDA7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X2Rldl9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIC8qIER1bW15IHJvdXRpbmUgdG8gc2F0aXNmeSBkZXZpY2Ugc3RydWN0dXJlICovCi0gICAgREVCVUcoMSwicmF5X2Rldl9jb25maWcoZGV2PSVwLGlmbWFwPSVwKVxuIixkZXYsbWFwKTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9kZXZfY29uZmlnIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJLyogRHVtbXkgcm91dGluZSB0byBzYXRpc2Z5IGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlERUJVRygxLCAicmF5X2Rldl9jb25maWcoZGV2PSVwLGlmbWFwPSVwKVxuIiwgZGV2LCBtYXApOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9kZXZfY29uZmlnIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9kZXZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBzaG9ydCBsZW5ndGggPSBza2ItPmxlbjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJc2hvcnQgbGVuZ3RoID0gc2tiLT5sZW47CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9kZXZfc3RhcnRfeG1pdCAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgREVCVUcoMywicmF5X2Rldl9zdGFydF94bWl0KHNrYj0lcCwgZGV2PSVwKVxuIixza2IsZGV2KTsKLSAgICBpZiAobG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID09IE5FRURfVE9fQVVUSCkgewotICAgICAgICBERUJVRygwLCJyYXlfY3MgU2VuZGluZyBhdXRoZW50aWNhdGlvbiByZXF1ZXN0LlxuIik7Ci0gICAgICAgIGlmICghYnVpbGRfYXV0aF9mcmFtZSAobG9jYWwsIGxvY2FsLT5hdXRoX2lkLCBPUEVOX0FVVEhfUkVRVUVTVCkpIHsKLSAgICAgICAgICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IEFVVEhFTlRJQ0FURUQ7Ci0gICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfZGV2X3N0YXJ0X3htaXQgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCURFQlVHKDMsICJyYXlfZGV2X3N0YXJ0X3htaXQoc2tiPSVwLCBkZXY9JXApXG4iLCBza2IsIGRldik7CisJaWYgKGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9PSBORUVEX1RPX0FVVEgpIHsKKwkJREVCVUcoMCwgInJheV9jcyBTZW5kaW5nIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QuXG4iKTsKKwkJaWYgKCFidWlsZF9hdXRoX2ZyYW1lKGxvY2FsLCBsb2NhbC0+YXV0aF9pZCwgT1BFTl9BVVRIX1JFUVVFU1QpKSB7CisJCQlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBBVVRIRU5USUNBVEVEOworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CiAKLSAgICBpZiAobGVuZ3RoIDwgRVRIX1pMRU4pCi0gICAgewotICAgIAlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQotICAgIAkJcmV0dXJuIDA7Ci0gICAgCWxlbmd0aCA9IEVUSF9aTEVOOwotICAgIH0KLSAgICBzd2l0Y2ggKHJheV9od194bWl0KCBza2ItPmRhdGEsIGxlbmd0aCwgZGV2LCBEQVRBX1RZUEUpKSB7Ci0gICAgICAgIGNhc2UgWE1JVF9OT19DQ1M6Ci0gICAgICAgIGNhc2UgWE1JVF9ORUVEX0FVVEg6Ci0JICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICBjYXNlIFhNSVRfTk9fSU5UUjoKLSAgICAgICAgY2FzZSBYTUlUX01TR19CQUQ6Ci0gICAgICAgIGNhc2UgWE1JVF9PSzoKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotICAgICAgICAgICAgZGV2X2tmcmVlX3NrYihza2IpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiAwOworCWlmIChsZW5ndGggPCBFVEhfWkxFTikgeworCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQorCQkJcmV0dXJuIDA7CisJCWxlbmd0aCA9IEVUSF9aTEVOOworCX0KKwlzd2l0Y2ggKHJheV9od194bWl0KHNrYi0+ZGF0YSwgbGVuZ3RoLCBkZXYsIERBVEFfVFlQRSkpIHsKKwljYXNlIFhNSVRfTk9fQ0NTOgorCWNhc2UgWE1JVF9ORUVEX0FVVEg6CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJcmV0dXJuIDE7CisJY2FzZSBYTUlUX05PX0lOVFI6CisJY2FzZSBYTUlUX01TR19CQUQ6CisJY2FzZSBYTUlUX09LOgorCWRlZmF1bHQ6CisJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMDsKIH0gLyogcmF5X2Rldl9zdGFydF94bWl0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyBpbnQgcmF5X2h3X3htaXQodW5zaWduZWQgY2hhciogZGF0YSwgaW50IGxlbiwgc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgCi0gICAgICAgICAgICAgICAgVUNIQVIgbXNnX3R5cGUpCitzdGF0aWMgaW50IHJheV9od194bWl0KHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4sIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBVQ0hBUiBtc2dfdHlwZSkKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIGludCBvZmZzZXQ7Ci0gICAgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHg7IC8qIEFkZHJlc3Mgb2YgeG1pdCBidWZmZXIgaW4gUEMgc3BhY2UgKi8KLSAgICBzaG9ydCBpbnQgYWRkcjsgICAgIC8qIEFkZHJlc3Mgb2YgeG1pdCBidWZmZXIgaW4gY2FyZCBzcGFjZSAqLwotICAgIAotICAgIERFQlVHKDMsInJheV9od194bWl0KGRhdGE9JXAsIGxlbj0lZCwgZGV2PSVwKVxuIixkYXRhLGxlbixkZXYpOwotICAgIGlmIChsZW4gKyBUWF9IRUFERVJfTEVOR1RIID4gVFhfQlVGX1NJWkUpCi0gICAgewotICAgICAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfaHdfeG1pdCBwYWNrZXQgdG9vIGxhcmdlOiAlZCBieXRlc1xuIixsZW4pOwotICAgICAgICByZXR1cm4gWE1JVF9NU0dfQkFEOwotICAgIH0KKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJaW50IGNjc2luZGV4OworCWludCBvZmZzZXQ7CisJc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHg7CS8qIEFkZHJlc3Mgb2YgeG1pdCBidWZmZXIgaW4gUEMgc3BhY2UgKi8KKwlzaG9ydCBpbnQgYWRkcjsJCS8qIEFkZHJlc3Mgb2YgeG1pdCBidWZmZXIgaW4gY2FyZCBzcGFjZSAqLworCisJREVCVUcoMywgInJheV9od194bWl0KGRhdGE9JXAsIGxlbj0lZCwgZGV2PSVwKVxuIiwgZGF0YSwgbGVuLCBkZXYpOworCWlmIChsZW4gKyBUWF9IRUFERVJfTEVOR1RIID4gVFhfQlVGX1NJWkUpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAicmF5X2h3X3htaXQgcGFja2V0IHRvbyBsYXJnZTogJWQgYnl0ZXNcbiIsCisJCSAgICAgICBsZW4pOworCQlyZXR1cm4gWE1JVF9NU0dfQkFEOworCX0KIAlzd2l0Y2ggKGNjc2luZGV4ID0gZ2V0X2ZyZWVfdHhfY2NzKGxvY2FsKSkgewogCWNhc2UgRUNDU0JVU1k6Ci0JCURFQlVHKDIsInJheV9od194bWl0IHR4X2NjcyB0YWJsZSBidXN5XG4iKTsKKwkJREVCVUcoMiwgInJheV9od194bWl0IHR4X2NjcyB0YWJsZSBidXN5XG4iKTsKIAljYXNlIEVDQ1NGVUxMOgotICAgICAgICBERUJVRygyLCJyYXlfaHdfeG1pdCBObyBmcmVlIHR4IGNjc1xuIik7CisJCURFQlVHKDIsICJyYXlfaHdfeG1pdCBObyBmcmVlIHR4IGNjc1xuIik7CiAJY2FzZSBFQ0FSREdPTkU6Ci0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgICAgICByZXR1cm4gWE1JVF9OT19DQ1M7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJcmV0dXJuIFhNSVRfTk9fQ0NTOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KLSAgICBhZGRyID0gVFhfQlVGX0JBU0UgKyAoY2NzaW5kZXggPDwgMTEpOworCWFkZHIgPSBUWF9CVUZfQkFTRSArIChjY3NpbmRleCA8PCAxMSk7CiAKLSAgICBpZiAobXNnX3R5cGUgPT0gREFUQV9UWVBFKSB7Ci0gICAgICAgIGxvY2FsLT5zdGF0cy50eF9ieXRlcyArPSBsZW47Ci0gICAgICAgIGxvY2FsLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0gICAgfQorCWlmIChtc2dfdHlwZSA9PSBEQVRBX1RZUEUpIHsKKwkJbG9jYWwtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKKwkJbG9jYWwtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwl9CiAKLSAgICBwdHggPSBsb2NhbC0+c3JhbSArIGFkZHI7CisJcHR4ID0gbG9jYWwtPnNyYW0gKyBhZGRyOwogCi0gICAgcmF5X2J1aWxkX2hlYWRlcihsb2NhbCwgcHR4LCBtc2dfdHlwZSwgZGF0YSk7Ci0gICAgaWYgKHRyYW5zbGF0ZSkgewotICAgICAgICBvZmZzZXQgPSB0cmFuc2xhdGVfZnJhbWUobG9jYWwsIHB0eCwgZGF0YSwgbGVuKTsKLSAgICB9Ci0gICAgZWxzZSB7IC8qIEVuY2Fwc3VsYXRlIGZyYW1lICovCi0gICAgICAgIC8qIFRCRCBUSUIgbGVuZ3RoIHdpbGwgbW92ZSBhZGRyZXNzIG9mIHB0eC0+dmFyICovCi0gICAgICAgIG1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSwgbGVuKTsKLSAgICAgICAgb2Zmc2V0ID0gMDsKLSAgICB9CisJcmF5X2J1aWxkX2hlYWRlcihsb2NhbCwgcHR4LCBtc2dfdHlwZSwgZGF0YSk7CisJaWYgKHRyYW5zbGF0ZSkgeworCQlvZmZzZXQgPSB0cmFuc2xhdGVfZnJhbWUobG9jYWwsIHB0eCwgZGF0YSwgbGVuKTsKKwl9IGVsc2UgeyAvKiBFbmNhcHN1bGF0ZSBmcmFtZSAqLworCQkvKiBUQkQgVElCIGxlbmd0aCB3aWxsIG1vdmUgYWRkcmVzcyBvZiBwdHgtPnZhciAqLworCQltZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEsIGxlbik7CisJCW9mZnNldCA9IDA7CisJfQogCi0gICAgLyogZmlsbCBpbiB0aGUgQ0NTICovCi0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIGxlbiArPSBUWF9IRUFERVJfTEVOR1RIICsgb2Zmc2V0OwotICAgIHdyaXRlYihDQ1NfVFhfUkVRVUVTVCwgJnBjY3MtPmNtZCk7Ci0gICAgd3JpdGViKGFkZHIgPj4gOCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfcHRyWzBdKTsKLSAgICB3cml0ZWIobG9jYWwtPnRpYl9sZW5ndGgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0clsxXSk7Ci0gICAgd3JpdGViKGxlbiA+PiA4LCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGhbMF0pOwotICAgIHdyaXRlYihsZW4gJiAweGZmLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGhbMV0pOworCS8qIGZpbGwgaW4gdGhlIENDUyAqLworCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwlsZW4gKz0gVFhfSEVBREVSX0xFTkdUSCArIG9mZnNldDsKKwl3cml0ZWIoQ0NTX1RYX1JFUVVFU1QsICZwY2NzLT5jbWQpOworCXdyaXRlYihhZGRyID4+IDgsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0clswXSk7CisJd3JpdGViKGxvY2FsLT50aWJfbGVuZ3RoLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHJbMV0pOworCXdyaXRlYihsZW4gPj4gOCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoWzBdKTsKKwl3cml0ZWIobGVuICYgMHhmZiwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X2RhdGFfbGVuZ3RoWzFdKTsKIC8qIFRCRCBzdGlsbCBuZWVkIHBzbV9jYW0/ICovCi0gICAgd3JpdGViKFBTTV9DQU0sICZwY2NzLT52YXIudHhfcmVxdWVzdC5wb3dfc2F2X21vZGUpOwotICAgIHdyaXRlYihsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnR4X3JhdGUpOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QuYW50ZW5uYSk7Ci0gICAgREVCVUcoMywicmF5X2h3X3htaXQgZGVmYXVsdF90eF9yYXRlID0gMHgleFxuIixcCi0gICAgICAgICAgbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUpOworCXdyaXRlYihQU01fQ0FNLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QucG93X3Nhdl9tb2RlKTsKKwl3cml0ZWIobG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUsICZwY2NzLT52YXIudHhfcmVxdWVzdC50eF9yYXRlKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LmFudGVubmEpOworCURFQlVHKDMsICJyYXlfaHdfeG1pdCBkZWZhdWx0X3R4X3JhdGUgPSAweCV4XG4iLAorCSAgICAgIGxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlKTsKIAotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2h3X3htaXQgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygyLCAicmF5X2h3X3htaXQgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CiAvKiBUQkQgdmVyeSBpbmVmZmljaWVudCB0byBjb3B5IHBhY2tldCB0byBidWZmZXIsIGFuZCB0aGVuIG5vdAogICAgc2VuZCBpdCwgYnV0IHRoZSBhbHRlcm5hdGl2ZSBpcyB0byBxdWV1ZSB0aGUgbWVzc2FnZXMgYW5kIHRoYXQKICAgIHdvbid0IGJlIGRvbmUgZm9yIGEgd2hpbGUuICBNYXliZSBzZXQgdGJ1c3kgdW50aWwgYSBDQ1MgaXMgZnJlZT8KICovCi0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwY2NzLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgcmV0dXJuIFhNSVRfTk9fSU5UUjsKLSAgICB9Ci0gICAgcmV0dXJuIFhNSVRfT0s7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICZwY2NzLT5idWZmZXJfc3RhdHVzKTsKKwkJcmV0dXJuIFhNSVRfTk9fSU5UUjsKKwl9CisJcmV0dXJuIFhNSVRfT0s7CiB9IC8qIGVuZCByYXlfaHdfeG1pdCAqLwotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIGludCB0cmFuc2xhdGVfZnJhbWUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgIGludCBsZW4pCi17Ci0gICAgX19iZTE2IHByb3RvID0gKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfcHJvdG87Ci0gICAgaWYgKG50b2hzKHByb3RvKSA+PSAxNTM2KSB7IC8qIERJWCBJSSBldGhlcm5ldCBmcmFtZSAqLwotICAgICAgICBERUJVRygzLCJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIERJWCBJSVxuIik7Ci0gICAgICAgIC8qIENvcHkgTExDIGhlYWRlciB0byBjYXJkIGJ1ZmZlciAqLwotICAgICAgICBtZW1jcHlfdG9pbygmcHR4LT52YXIsIGV0aDJfbGxjLCBzaXplb2YoZXRoMl9sbGMpKTsKLSAgICAgICAgbWVtY3B5X3RvaW8oICgodm9pZCBfX2lvbWVtICopJnB0eC0+dmFyKSArIHNpemVvZihldGgyX2xsYyksIChVQ0hBUiAqKSZwcm90bywgMik7Ci0gICAgICAgIGlmIChwcm90byA9PSBodG9ucyhFVEhfUF9BQVJQKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9JUFgpKSB7Ci0gICAgICAgICAgICAvKiBUaGlzIGlzIHRoZSBzZWxlY3RpdmUgdHJhbnNsYXRpb24gdGFibGUsIG9ubHkgMiBlbnRyaWVzICovCi0gICAgICAgICAgICB3cml0ZWIoMHhmOCwgJigoc3RydWN0IHNuYXBoZHJfdCBfX2lvbWVtICopcHR4LT52YXIpLT5vcmdbM10pOwotICAgICAgICB9Ci0gICAgICAgIC8qIENvcHkgYm9keSBvZiBldGhlcm5ldCBwYWNrZXQgd2l0aG91dCBldGhlcm5ldCBoZWFkZXIgKi8KLSAgICAgICAgbWVtY3B5X3RvaW8oKHZvaWQgX19pb21lbSAqKSZwdHgtPnZhciArIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSwgXAotICAgICAgICAgICAgICAgICAgICBkYXRhICsgRVRIX0hMRU4sICBsZW4gLSBFVEhfSExFTik7Ci0gICAgICAgIHJldHVybiAoaW50KSBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKLSAgICB9Ci0gICAgZWxzZSB7IC8qIGFscmVhZHkgIDgwMiB0eXBlLCBhbmQgcHJvdG8gaXMgbGVuZ3RoICovCi0gICAgICAgIERFQlVHKDMsInJheV9jcyB0cmFuc2xhdGVfZnJhbWUgODAyXG4iKTsKLSAgICAgICAgaWYgKHByb3RvID09IGh0b25zKDB4ZmZmZikpIHsgLyogZXZpbCBuZXR3YXJlIElQWCA4MDIuMyB3aXRob3V0IExMQyAqLwotICAgICAgICBERUJVRygzLCJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIGV2aWwgSVBYXG4iKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSArIEVUSF9ITEVOLCAgbGVuIC0gRVRIX0hMRU4pOwotICAgICAgICAgICAgcmV0dXJuIDAgLSBFVEhfSExFTjsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHlfdG9pbygmcHR4LT52YXIsIGRhdGEgKyBFVEhfSExFTiwgIGxlbiAtIEVUSF9ITEVOKTsKLSAgICAgICAgcmV0dXJuIDAgLSBFVEhfSExFTjsKLSAgICB9Ci0gICAgLyogVEJEIGRvIG90aGVyIGZyYW1lIHR5cGVzICovCi19IC8qIGVuZCB0cmFuc2xhdGVfZnJhbWUgKi8KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJheV9idWlsZF9oZWFkZXIocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsIFVDSEFSIG1zZ190eXBlLAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEpCi17Ci0gICAgd3JpdGViKFBST1RPQ09MX1ZFUiB8IG1zZ190eXBlLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzEpOwotLyoqKiBJRUVFIDgwMi4xMSBBZGRyZXNzIGZpZWxkIGFzc2lnbm1lbnRzICoqKioqKioqKioqKioKLSAgICAgICAgICAgICAgICBUT0RTIEZST01EUyAgIGFkZHJfMSAgICAgYWRkcl8yICAgICAgICAgIGFkZHJfMyAgIGFkZHJfNAotQWRob2MgICAgICAgICAgIDAgICAgMCAgICAgICAgZGVzdCAgICAgICBzcmMgKHRlcm1pbmFsKSAgQlNTSUQgICAgTi9BCi1BUCB0byBUZXJtaW5hbCAgMCAgICAxICAgICAgICBkZXN0ICAgICAgIEFQKEJTU0lEKSAgICAgICBzb3VyY2UgICBOL0EKLVRlcm1pbmFsIHRvIEFQICAxICAgIDAgICAgICAgIEFQKEJTU0lEKSAgc3JjICh0ZXJtaW5hbCkgIGRlc3QgICAgIE4vQQotQVAgdG8gQVAgICAgICAgIDEgICAgMSAgICAgICAgZGVzdCBBUCAgICBzcmMgQVAgICAgICAgICAgZGVzdCAgICAgc291cmNlICAgICAgCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICAgIGlmIChsb2NhbC0+bmV0X3R5cGUgPT0gQURIT0MpIHsgICAKLSAgICAgICAgd3JpdGViKDAsICZwdHgtPm1hYy5mcmFtZV9jdGxfMik7Ci0gICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwgMiAqIEFERFJMRU4pOwotICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOwotICAgIH0KLSAgICBlbHNlIC8qIGluZnJhc3RydWN0dXJlICovCi0gICAgewotICAgICAgICBpZiAobG9jYWwtPnNwYXJtLmI0LmFfYWN0aW5nX2FzX2FwX3N0YXR1cykKLSAgICAgICAgewotICAgICAgICAgICAgd3JpdGViKEZDMl9GUk9NX0RTLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9kZXN0LCBBRERSTEVOKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwgbG9jYWwtPmJzc19pZCwgNik7Ci0gICAgICAgICAgICBtZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX3NvdXJjZSwgQUREUkxFTik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSAvKiBUZXJtaW5hbCAqLwotICAgICAgICB7Ci0gICAgICAgICAgICB3cml0ZWIoRkMyX1RPX0RTLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOwotICAgICAgICAgICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfc291cmNlLCBBRERSTEVOKTsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwgQUREUkxFTik7Ci0gICAgICAgIH0KLSAgICB9Ci19IC8qIGVuZCBlbmNhcHN1bGF0ZV9mcmFtZSAqLwogCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCitzdGF0aWMgaW50IHRyYW5zbGF0ZV9mcmFtZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3QgdHhfbXNnIF9faW9tZW0gKnB0eCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBsZW4pCit7CisJX19iZTE2IHByb3RvID0gKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfcHJvdG87CisJaWYgKG50b2hzKHByb3RvKSA+PSAxNTM2KSB7IC8qIERJWCBJSSBldGhlcm5ldCBmcmFtZSAqLworCQlERUJVRygzLCAicmF5X2NzIHRyYW5zbGF0ZV9mcmFtZSBESVggSUlcbiIpOworCQkvKiBDb3B5IExMQyBoZWFkZXIgdG8gY2FyZCBidWZmZXIgKi8KKwkJbWVtY3B5X3RvaW8oJnB0eC0+dmFyLCBldGgyX2xsYywgc2l6ZW9mKGV0aDJfbGxjKSk7CisJCW1lbWNweV90b2lvKCgodm9pZCBfX2lvbWVtICopJnB0eC0+dmFyKSArIHNpemVvZihldGgyX2xsYyksCisJCQkgICAgKFVDSEFSICopICZwcm90bywgMik7CisJCWlmIChwcm90byA9PSBodG9ucyhFVEhfUF9BQVJQKSB8fCBwcm90byA9PSBodG9ucyhFVEhfUF9JUFgpKSB7CisJCQkvKiBUaGlzIGlzIHRoZSBzZWxlY3RpdmUgdHJhbnNsYXRpb24gdGFibGUsIG9ubHkgMiBlbnRyaWVzICovCisJCQl3cml0ZWIoMHhmOCwKKwkJCSAgICAgICAmKChzdHJ1Y3Qgc25hcGhkcl90IF9faW9tZW0gKilwdHgtPnZhciktPm9yZ1szXSk7CisJCX0KKwkJLyogQ29weSBib2R5IG9mIGV0aGVybmV0IHBhY2tldCB3aXRob3V0IGV0aGVybmV0IGhlYWRlciAqLworCQltZW1jcHlfdG9pbygodm9pZCBfX2lvbWVtICopJnB0eC0+dmFyICsKKwkJCSAgICBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCksIGRhdGEgKyBFVEhfSExFTiwKKwkJCSAgICBsZW4gLSBFVEhfSExFTik7CisJCXJldHVybiAoaW50KXNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOworCX0gZWxzZSB7IC8qIGFscmVhZHkgIDgwMiB0eXBlLCBhbmQgcHJvdG8gaXMgbGVuZ3RoICovCisJCURFQlVHKDMsICJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIDgwMlxuIik7CisJCWlmIChwcm90byA9PSBodG9ucygweGZmZmYpKSB7IC8qIGV2aWwgbmV0d2FyZSBJUFggODAyLjMgd2l0aG91dCBMTEMgKi8KKwkJCURFQlVHKDMsICJyYXlfY3MgdHJhbnNsYXRlX2ZyYW1lIGV2aWwgSVBYXG4iKTsKKwkJCW1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSArIEVUSF9ITEVOLCBsZW4gLSBFVEhfSExFTik7CisJCQlyZXR1cm4gMCAtIEVUSF9ITEVOOworCQl9CisJCW1lbWNweV90b2lvKCZwdHgtPnZhciwgZGF0YSArIEVUSF9ITEVOLCBsZW4gLSBFVEhfSExFTik7CisJCXJldHVybiAwIC0gRVRIX0hMRU47CisJfQorCS8qIFRCRCBkbyBvdGhlciBmcmFtZSB0eXBlcyAqLworfSAvKiBlbmQgdHJhbnNsYXRlX2ZyYW1lICovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK3N0YXRpYyB2b2lkIHJheV9idWlsZF9oZWFkZXIocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHgsCisJCQkgICAgIFVDSEFSIG1zZ190eXBlLCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCXdyaXRlYihQUk9UT0NPTF9WRVIgfCBtc2dfdHlwZSwgJnB0eC0+bWFjLmZyYW1lX2N0bF8xKTsKKy8qKiogSUVFRSA4MDIuMTEgQWRkcmVzcyBmaWVsZCBhc3NpZ25tZW50cyAqKioqKioqKioqKioqCisJCVRPRFMJRlJPTURTCWFkZHJfMQkJYWRkcl8yCQlhZGRyXzMJYWRkcl80CitBZGhvYwkJMAkwCWRlc3QJCXNyYyAodGVybWluYWwpCUJTU0lECU4vQQorQVAgdG8gVGVybWluYWwJMAkxCWRlc3QJCUFQKEJTU0lEKQlzb3VyY2UJTi9BCitUZXJtaW5hbCB0byBBUAkxCTAJQVAoQlNTSUQpCXNyYyAodGVybWluYWwpCWRlc3QJTi9BCitBUCB0byBBUAkxCTEJZGVzdCBBUAkJc3JjIEFQCQlkZXN0CXNvdXJjZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpZiAobG9jYWwtPm5ldF90eXBlID09IEFESE9DKSB7CisJCXdyaXRlYigwLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOworCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsICgoc3RydWN0IGV0aGhkciAqKWRhdGEpLT5oX2Rlc3QsCisJCQkgICAgMiAqIEFERFJMRU4pOworCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzMsIGxvY2FsLT5ic3NfaWQsIEFERFJMRU4pOworCX0gZWxzZSB7IC8qIGluZnJhc3RydWN0dXJlICovCisKKwkJaWYgKGxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMpIHsKKwkJCXdyaXRlYihGQzJfRlJPTV9EUywgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwKKwkJCQkgICAgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwgQUREUkxFTik7CisJCQltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzIsIGxvY2FsLT5ic3NfaWQsIDYpOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLAorCQkJCSAgICAoKHN0cnVjdCBldGhoZHIgKilkYXRhKS0+aF9zb3VyY2UsIEFERFJMRU4pOworCQl9IGVsc2UgeyAvKiBUZXJtaW5hbCAqLworCisJCQl3cml0ZWIoRkMyX1RPX0RTLCAmcHR4LT5tYWMuZnJhbWVfY3RsXzIpOworCQkJbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8xLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwKKwkJCQkgICAgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfc291cmNlLCBBRERSTEVOKTsKKwkJCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywKKwkJCQkgICAgKChzdHJ1Y3QgZXRoaGRyICopZGF0YSktPmhfZGVzdCwgQUREUkxFTik7CisJCX0KKwl9Cit9IC8qIGVuZCBlbmNhcHN1bGF0ZV9mcmFtZSAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKQEAgLTEwNzEsNyArMTExMSw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewotCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCisJLmdldF9kcnZpbmZvID0gbmV0ZGV2X2dldF9kcnZpbmZvLAogfTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC0xMDgxLDkgKzExMjEsNyBAQAogICogV2lyZWxlc3MgSGFuZGxlciA6IGdldCBwcm90b2NvbCBuYW1lCiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJY2hhciAqY3dycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgY2hhciAqY3dycSwgY2hhciAqZXh0cmEpCiB7CiAJc3RyY3B5KGN3cnEsICJJRUVFIDgwMi4xMS1GSCIpOwogCXJldHVybiAwOwpAQCAtMTA5NSwxNCArMTEzMywxMyBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfZnJlcShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBpd19mcmVxICpmd3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfZnJlcSAqZndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVyciA9IC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogU2V0dGluZyBieSBjaGFubmVsIG51bWJlciAqLwpAQCAtMTExMywxNSArMTE1MCwxNCBAQAogCiAJcmV0dXJuIGVycjsKIH0KLSAKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgZnJlcXVlbmN5CiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X2ZyZXEgKmZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19mcmVxICpmd3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIApAQCAtMTEzNiwyMiArMTE3MiwyMSBAQAogICovCiBzdGF0aWMgaW50IHJheV9zZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwKLQkJCSBjaGFyICpleHRyYSkKKwkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIENoZWNrIGlmIHdlIGFza2VkIGZvciBgYW55JyAqLwotCWlmKGR3cnEtPmZsYWdzID09IDApIHsKKwlpZiAoZHdycS0+ZmxhZ3MgPT0gMCkgewogCQkvKiBDb3JleSA6IGNhbiB5b3UgZG8gdGhhdCA/ICovCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9IGVsc2UgewogCQkvKiBDaGVjayB0aGUgc2l6ZSBvZiB0aGUgc3RyaW5nICovCi0JCWlmKGR3cnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKSB7CisJCWlmIChkd3JxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkgewogCQkJcmV0dXJuIC1FMkJJRzsKIAkJfQogCkBAIC0xMTYwLDcgKzExOTUsNyBAQAogCQltZW1jcHkobG9jYWwtPnNwYXJtLmI1LmFfY3VycmVudF9lc3NfaWQsIGV4dHJhLCBkd3JxLT5sZW5ndGgpOwogCX0KIAotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMTY5LDggKzEyMDQsNyBAQAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJIHN0cnVjdCBpd19wb2ludCAqZHdycSwKLQkJCSBjaGFyICpleHRyYSkKKwkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC0xMTc5LDcgKzEyMTMsNyBAQAogCiAJLyogUHVzaCBpdCBvdXQgISAqLwogCWR3cnEtPmxlbmd0aCA9IHN0cmxlbihleHRyYSk7Ci0JZHdycS0+ZmxhZ3MgPSAxOyAvKiBhY3RpdmUgKi8KKwlkd3JxLT5mbGFncyA9IDE7CS8qIGFjdGl2ZSAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTg5LDkgKzEyMjMsOCBAQAogICogV2lyZWxlc3MgSGFuZGxlciA6IGdldCBBUCBhZGRyZXNzCiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF93YXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3Qgc29ja2FkZHIgKmF3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmF3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC0xMjA3LDI1ICsxMjQwLDI0IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9yYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogUmVqZWN0IGlmIGNhcmQgaXMgYWxyZWFkeSBpbml0aWFsaXNlZCAqLwotCWlmKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQorCWlmIChsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIENoZWNrIGlmIHJhdGUgaXMgaW4gcmFuZ2UgKi8KLQlpZigodndycS0+dmFsdWUgIT0gMTAwMDAwMCkgJiYgKHZ3cnEtPnZhbHVlICE9IDIwMDAwMDApKQorCWlmICgodndycS0+dmFsdWUgIT0gMTAwMDAwMCkgJiYgKHZ3cnEtPnZhbHVlICE9IDIwMDAwMDApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEhhY2sgZm9yIDEuNSBNYi9zIGluc3RlYWQgb2YgMiBNYi9zICovCi0JaWYoKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgJiYJCS8qIFBsZWFzZSBjaGVjayAqLwotCSAgICh2d3JxLT52YWx1ZSA9PSAyMDAwMDAwKSkKKwlpZiAoKGxvY2FsLT5md192ZXIgPT0gMHg1NSkgJiYJLyogUGxlYXNlIGNoZWNrICovCisJICAgICh2d3JxLT52YWx1ZSA9PSAyMDAwMDAwKSkKIAkJbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSAzOwogCWVsc2UKLQkJbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPSB2d3JxLT52YWx1ZS81MDAwMDA7CisJCWxvY2FsLT5uZXRfZGVmYXVsdF90eF9yYXRlID0gdndycS0+dmFsdWUgLyA1MDAwMDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMzYsMTYgKzEyNjgsMTUgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X3JhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZihsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9PSAzKQotCQl2d3JxLT52YWx1ZSA9IDIwMDAwMDA7CQkvKiBIdW0uLi4gKi8KKwlpZiAobG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgPT0gMykKKwkJdndycS0+dmFsdWUgPSAyMDAwMDAwOwkvKiBIdW0uLi4gKi8KIAllbHNlCiAJCXZ3cnEtPnZhbHVlID0gbG9jYWwtPm5ldF9kZWZhdWx0X3R4X3JhdGUgKiA1MDAwMDA7Ci0JdndycS0+Zml4ZWQgPSAwOwkJLyogV2UgYXJlIGluIGF1dG8gbW9kZSAqLworCXZ3cnEtPmZpeGVkID0gMDsJLyogV2UgYXJlIGluIGF1dG8gbW9kZSAqLwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjU2LDQzICsxMjg3LDQwIEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsCi0JCSAgICAgICBjaGFyICpleHRyYSkKKwkJICAgICAgIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCiB7CiAJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJ0aHIgPSB2d3JxLT52YWx1ZTsKIAogCS8qIFJlamVjdCBpZiBjYXJkIGlzIGFscmVhZHkgaW5pdGlhbGlzZWQgKi8KLQlpZihsb2NhbC0+Y2FyZF9zdGF0dXMgIT0gQ0FSRF9BV0FJVElOR19QQVJBTSkKKwlpZiAobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBpZih3cnEtPnUucnRzLmZpeGVkID09IDApIHdlIHNob3VsZCBjb21wbGFpbiAqLwotCWlmKHZ3cnEtPmRpc2FibGVkKQorCWlmICh2d3JxLT5kaXNhYmxlZCkKIAkJcnRociA9IDMyNzY3OwogCWVsc2UgewotCQlpZigocnRociA8IDApIHx8IChydGhyID4gMjM0NykpIC8qIFdoYXQncyB0aGUgbWF4IHBhY2tldCBzaXplID8/PyAqLworCQlpZiAoKHJ0aHIgPCAwKSB8fCAocnRociA+IDIzNDcpKSAgIC8qIFdoYXQncyB0aGUgbWF4IHBhY2tldCBzaXplID8/PyAqLwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWxvY2FsLT5zcGFybS5iNS5hX3J0c190aHJlc2hvbGRbMF0gPSAocnRociA+PiA4KSAmIDB4RkY7CiAJbG9jYWwtPnNwYXJtLmI1LmFfcnRzX3RocmVzaG9sZFsxXSA9IHJ0aHIgJiAweEZGOwogCi0JcmV0dXJuIC1FSU5QUk9HUkVTUzsJCS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KKwlyZXR1cm4gLUVJTlBST0dSRVNTOwkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCiB9CiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgUlRTIHRocmVzaG9sZAogICovCiBzdGF0aWMgaW50IHJheV9nZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgICAgc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkgICAgICAgY2hhciAqZXh0cmEpCisJCSAgICAgICBzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJdndycS0+dmFsdWUgPSAobG9jYWwtPnNwYXJtLmI1LmFfcnRzX3RocmVzaG9sZFswXSA8PCA4KQotCQkrIGxvY2FsLT5zcGFybS5iNS5hX3J0c190aHJlc2hvbGRbMV07CisJICAgICsgbG9jYWwtPnNwYXJtLmI1LmFfcnRzX3RocmVzaG9sZFsxXTsKIAl2d3JxLT5kaXNhYmxlZCA9ICh2d3JxLT52YWx1ZSA9PSAzMjc2Nyk7CiAJdndycS0+Zml4ZWQgPSAxOwogCkBAIC0xMzA1LDI3ICsxMzMzLDI2IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBmdGhyID0gdndycS0+dmFsdWU7CiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogaWYod3JxLT51LmZyYWcuZml4ZWQgPT0gMCkgc2hvdWxkIGNvbXBsYWluICovCi0JaWYodndycS0+ZGlzYWJsZWQpCisJaWYgKHZ3cnEtPmRpc2FibGVkKQogCQlmdGhyID0gMzI3Njc7CiAJZWxzZSB7Ci0JCWlmKChmdGhyIDwgMjU2KSB8fCAoZnRociA+IDIzNDcpKSAvKiBUbyBjaGVjayBvdXQgISAqLworCQlpZiAoKGZ0aHIgPCAyNTYpIHx8IChmdGhyID4gMjM0NykpCS8qIFRvIGNoZWNrIG91dCAhICovCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJbG9jYWwtPnNwYXJtLmI1LmFfZnJhZ190aHJlc2hvbGRbMF0gPSAoZnRociA+PiA4KSAmIDB4RkY7CiAJbG9jYWwtPnNwYXJtLmI1LmFfZnJhZ190aHJlc2hvbGRbMV0gPSBmdGhyICYgMHhGRjsKIAotCXJldHVybiAtRUlOUFJPR1JFU1M7CQkvKiBDYWxsIGNvbW1pdCBoYW5kbGVyICovCisJcmV0dXJuIC1FSU5QUk9HUkVTUzsJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMzM0LDEzICsxMzYxLDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X2dldF9mcmFnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJc3RydWN0IGl3X3BhcmFtICp2d3JxLAotCQkJY2hhciAqZXh0cmEpCisJCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJdndycS0+dmFsdWUgPSAobG9jYWwtPnNwYXJtLmI1LmFfZnJhZ190aHJlc2hvbGRbMF0gPDwgOCkKLQkJKyBsb2NhbC0+c3Bhcm0uYjUuYV9mcmFnX3RocmVzaG9sZFsxXTsKKwkgICAgKyBsb2NhbC0+c3Bhcm0uYjUuYV9mcmFnX3RocmVzaG9sZFsxXTsKIAl2d3JxLT5kaXNhYmxlZCA9ICh2d3JxLT52YWx1ZSA9PSAzMjc2Nyk7CiAJdndycS0+Zml4ZWQgPSAxOwogCkBAIC0xMzUyLDIzICsxMzc4LDIwIEBACiAgKiBXaXJlbGVzcyBIYW5kbGVyIDogc2V0IE1vZGUgb2YgT3BlcmF0aW9uCiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQlzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJX191MzIgKnV3cnEsCi0JCQljaGFyICpleHRyYSkKKwkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sIF9fdTMyICp1d3JxLCBjaGFyICpleHRyYSkKIHsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgZXJyID0gLUVJTlBST0dSRVNTOwkJLyogQ2FsbCBjb21taXQgaGFuZGxlciAqLworCWludCBlcnIgPSAtRUlOUFJPR1JFU1M7CS8qIENhbGwgY29tbWl0IGhhbmRsZXIgKi8KIAljaGFyIGNhcmRfbW9kZSA9IDE7CiAKIAkvKiBSZWplY3QgaWYgY2FyZCBpcyBhbHJlYWR5IGluaXRpYWxpc2VkICovCi0JaWYobG9jYWwtPmNhcmRfc3RhdHVzICE9IENBUkRfQVdBSVRJTkdfUEFSQU0pCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyAhPSBDQVJEX0FXQUlUSU5HX1BBUkFNKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3dpdGNoICgqdXdycSkKLQl7CisJc3dpdGNoICgqdXdycSkgewogCWNhc2UgSVdfTU9ERV9BREhPQzoKIAkJY2FyZF9tb2RlID0gMDsKLQkJLy8gRmFsbCB0aHJvdWdoCisJCS8qIEZhbGwgdGhyb3VnaCAqLwogCWNhc2UgSVdfTU9ERV9JTkZSQToKIAkJbG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlID0gY2FyZF9tb2RlOwogCQlicmVhazsKQEAgLTEzODQsMTMgKzE0MDcsMTEgQEAKICAqIFdpcmVsZXNzIEhhbmRsZXIgOiBnZXQgTW9kZSBvZiBPcGVyYXRpb24KICAqLwogc3RhdGljIGludCByYXlfZ2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQlfX3UzMiAqdXdycSwKLQkJCWNoYXIgKmV4dHJhKQorCQkJc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywgX191MzIgKnV3cnEsIGNoYXIgKmV4dHJhKQogewogCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYobG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlKQorCWlmIChsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGUpCiAJCSp1d3JxID0gSVdfTU9ERV9JTkZSQTsKIAllbHNlCiAJCSp1d3JxID0gSVdfTU9ERV9BREhPQzsKQEAgLTE0MDQsMTIgKzE0MjUsMTEgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X3JhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsCi0JCQkgY2hhciAqZXh0cmEpCisJCQkgc3RydWN0IGl3X3BvaW50ICpkd3JxLCBjaGFyICpleHRyYSkKIHsKLQlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKWV4dHJhOwogCi0JbWVtc2V0KChjaGFyICopIHJhbmdlLCAwLCBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKSk7CisJbWVtc2V0KChjaGFyICopcmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKIAogCS8qIFNldCB0aGUgbGVuZ3RoICh2ZXJ5IGltcG9ydGFudCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkgKi8KIAlkd3JxLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKQEAgLTE0MjAsNyArMTQ0MCw3IEBACiAKIAkvKiBTZXQgaW5mb3JtYXRpb24gaW4gdGhlIHJhbmdlIHN0cnVjdCAqLwogCXJhbmdlLT50aHJvdWdocHV0ID0gMS4xICogMTAwMCAqIDEwMDA7CS8qIFB1dCB0aGUgcmlnaHQgbnVtYmVyIGhlcmUgKi8KLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gaG9wX3BhdHRlcm5fbGVuZ3RoWyhpbnQpY291bnRyeV07IAorCXJhbmdlLT5udW1fY2hhbm5lbHMgPSBob3BfcGF0dGVybl9sZW5ndGhbKGludCljb3VudHJ5XTsKIAlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IDA7CiAJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAwOwogCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDI1NTsJLyogV2hhdCdzIHRoZSBjb3JyZWN0IHZhbHVlID8gKi8KQEAgLTE0MzcsOCArMTQ1Nyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcmF5X3NldF9mcmFtaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwKLQkJCSAgIGNoYXIgKmV4dHJhKQorCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCiB7CiAJdHJhbnNsYXRlID0gKihleHRyYSk7CS8qIFNldCBmcmFtaW5nIG1vZGUgKi8KIApAQCAtMTQ1MSw4ICsxNDcwLDcgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X2ZyYW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICAgY2hhciAqZXh0cmEpCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAkqKGV4dHJhKSA9IHRyYW5zbGF0ZTsKIApAQCAtMTQ2NSw4ICsxNDgzLDcgQEAKICAqLwogc3RhdGljIGludCByYXlfZ2V0X2NvdW50cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAotCQkJICAgY2hhciAqZXh0cmEpCisJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAkqKGV4dHJhKSA9IGNvdW50cnk7CiAKQEAgLTE0NzcsMTEgKzE0OTQsMTAgQEAKIC8qCiAgKiBDb21taXQgaGFuZGxlciA6IGNhbGxlZCBhZnRlciBhIGJ1bmNoIG9mIFNFVCBvcGVyYXRpb25zCiAgKi8KLXN0YXRpYyBpbnQgcmF5X2NvbW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAkvKiBOVUxMICovCi0JCSAgICAgIHZvaWQgKnp3cnEsCQkJLyogTlVMTCAqLwotCQkgICAgICBjaGFyICpleHRyYSkJCQkvKiBOVUxMICovCi17CitzdGF0aWMgaW50IHJheV9jb21taXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywJLyogTlVMTCAqLworCQkgICAgICB2b2lkICp6d3JxLAkvKiBOVUxMICovCisJCSAgICAgIGNoYXIgKmV4dHJhKQoreyAvKiBOVUxMICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0ODksMzMgKzE1MDUsMzQgQEAKIC8qCiAgKiBTdGF0cyBoYW5kbGVyIDogcmV0dXJuIFdpcmVsZXNzIFN0YXRzCiAgKi8KLXN0YXRpYyBpd19zdGF0cyAqIHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKglkZXYpCitzdGF0aWMgaXdfc3RhdHMgKnJheV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgcmF5X2Rldl90ICoJbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gIHN0cnVjdCBzdGF0dXMgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgU1RBVFVTX0JBU0U7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXN0cnVjdCBzdGF0dXMgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgU1RBVFVTX0JBU0U7CiAKLSAgaWYobG9jYWwgPT0gKHJheV9kZXZfdCAqKSBOVUxMKQotICAgIHJldHVybiAoaXdfc3RhdHMgKikgTlVMTDsKKwlpZiAobG9jYWwgPT0gKHJheV9kZXZfdCAqKSBOVUxMKQorCQlyZXR1cm4gKGl3X3N0YXRzICopIE5VTEw7CiAKLSAgbG9jYWwtPndzdGF0cy5zdGF0dXMgPSBsb2NhbC0+Y2FyZF9zdGF0dXM7CisJbG9jYWwtPndzdGF0cy5zdGF0dXMgPSBsb2NhbC0+Y2FyZF9zdGF0dXM7CiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gIGlmKChsb2NhbC0+c3B5X2RhdGEuc3B5X251bWJlciA+IDApICYmIChsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGUgPT0gMCkpCi0gICAgewotICAgICAgLyogR2V0IGl0IGZyb20gdGhlIGZpcnN0IG5vZGUgaW4gc3B5IGxpc3QgKi8KLSAgICAgIGxvY2FsLT53c3RhdHMucXVhbC5xdWFsID0gbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLnF1YWw7Ci0gICAgICBsb2NhbC0+d3N0YXRzLnF1YWwubGV2ZWwgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubGV2ZWw7Ci0gICAgICBsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubm9pc2U7Ci0gICAgICBsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS51cGRhdGVkOwotICAgIH0KKwlpZiAoKGxvY2FsLT5zcHlfZGF0YS5zcHlfbnVtYmVyID4gMCkKKwkgICAgJiYgKGxvY2FsLT5zcGFybS5iNS5hX25ldHdvcmtfdHlwZSA9PSAwKSkgeworCQkvKiBHZXQgaXQgZnJvbSB0aGUgZmlyc3Qgbm9kZSBpbiBzcHkgbGlzdCAqLworCQlsb2NhbC0+d3N0YXRzLnF1YWwucXVhbCA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5xdWFsOworCQlsb2NhbC0+d3N0YXRzLnF1YWwubGV2ZWwgPSBsb2NhbC0+c3B5X2RhdGEuc3B5X3N0YXRbMF0ubGV2ZWw7CisJCWxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IGxvY2FsLT5zcHlfZGF0YS5zcHlfc3RhdFswXS5ub2lzZTsKKwkJbG9jYWwtPndzdGF0cy5xdWFsLnVwZGF0ZWQgPQorCQkgICAgbG9jYWwtPnNweV9kYXRhLnNweV9zdGF0WzBdLnVwZGF0ZWQ7CisJfQogI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLwogCi0gIGlmKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgewotICAgIGxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IHJlYWRiKCZwLT5yeG5vaXNlKTsKLSAgICBsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCB8PSA0OwotICB9CisJaWYgKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgeworCQlsb2NhbC0+d3N0YXRzLnF1YWwubm9pc2UgPSByZWFkYigmcC0+cnhub2lzZSk7CisJCWxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkIHw9IDQ7CisJfQogCi0gIHJldHVybiAmbG9jYWwtPndzdGF0czsKKwlyZXR1cm4gJmxvY2FsLT53c3RhdHM7CiB9IC8qIGVuZCByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE1MjMsMTE1OSArMTU0MCwxMjY0IEBACiAgKiBTdHJ1Y3R1cmVzIHRvIGV4cG9ydCB0aGUgV2lyZWxlc3MgSGFuZGxlcnMKICAqLwogCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlcglyYXlfaGFuZGxlcltdID0gewotCVtTSU9DU0lXQ09NTUlULVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfY29tbWl0LAotCVtTSU9DR0lXTkFNRSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X25hbWUsCi0JW1NJT0NTSVdGUkVRICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZnJlcSwKLQlbU0lPQ0dJV0ZSRVEgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9mcmVxLAotCVtTSU9DU0lXTU9ERSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X21vZGUsCi0JW1NJT0NHSVdNT0RFICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfbW9kZSwKLQlbU0lPQ0dJV1JBTkdFIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9yYW5nZSwKK3N0YXRpYyBjb25zdCBpd19oYW5kbGVyIHJheV9oYW5kbGVyW10gPSB7CisJW1NJT0NTSVdDT01NSVQgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2NvbW1pdCwKKwlbU0lPQ0dJV05BTUUgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9uYW1lLAorCVtTSU9DU0lXRlJFUSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2ZyZXEsCisJW1NJT0NHSVdGUkVRIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9nZXRfZnJlcSwKKwlbU0lPQ1NJV01PREUgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9tb2RlLAorCVtTSU9DR0lXTU9ERSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X21vZGUsCisJW1NJT0NHSVdSQU5HRSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3JhbmdlLAogI2lmZGVmIFdJUkVMRVNTX1NQWQotIAlbU0lPQ1NJV1NQWSAgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9zZXRfc3B5LAotCVtTSU9DR0lXU1BZICAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX2dldF9zcHksCi0JW1NJT0NTSVdUSFJTUFktU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfc2V0X3RocnNweSwKLQlbU0lPQ0dJV1RIUlNQWS1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9nZXRfdGhyc3B5LAotI2VuZGlmCS8qIFdJUkVMRVNTX1NQWSAqLwotCVtTSU9DR0lXQVAgICAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3dhcCwKLQlbU0lPQ1NJV0VTU0lEIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9lc3NpZCwKLQlbU0lPQ0dJV0VTU0lEIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9lc3NpZCwKLQlbU0lPQ1NJV1JBVEUgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9yYXRlLAotCVtTSU9DR0lXUkFURSAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3JhdGUsCi0JW1NJT0NTSVdSVFMgICAtU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfcnRzLAotCVtTSU9DR0lXUlRTICAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3J0cywKLQlbU0lPQ1NJV0ZSQUcgIC1TSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9mcmFnLAotCVtTSU9DR0lXRlJBRyAgLVNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2ZyYWcsCisJW1NJT0NTSVdTUFkgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9zZXRfc3B5LAorCVtTSU9DR0lXU1BZIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIGl3X2hhbmRsZXJfZ2V0X3NweSwKKwlbU0lPQ1NJV1RIUlNQWSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSBpd19oYW5kbGVyX3NldF90aHJzcHksCisJW1NJT0NHSVdUSFJTUFkgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgaXdfaGFuZGxlcl9nZXRfdGhyc3B5LAorI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLworCVtTSU9DR0lXQVAgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF93YXAsCisJW1NJT0NTSVdFU1NJRCAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfc2V0X2Vzc2lkLAorCVtTSU9DR0lXRVNTSUQgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9lc3NpZCwKKwlbU0lPQ1NJV1JBVEUgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9yYXRlLAorCVtTSU9DR0lXUkFURSAtIFNJT0NJV0ZJUlNUXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X3JhdGUsCisJW1NJT0NTSVdSVFMgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X3NldF9ydHMsCisJW1NJT0NHSVdSVFMgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9ydHMsCisJW1NJT0NTSVdGUkFHIC0gU0lPQ0lXRklSU1RdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZnJhZywKKwlbU0lPQ0dJV0ZSQUcgLSBTSU9DSVdGSVJTVF0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9mcmFnLAogfTsKIAotI2RlZmluZSBTSU9DU0lQRlJBTUlORwlTSU9DSVdGSVJTVFBSSVYJCS8qIFNldCBmcmFtaW5nIG1vZGUgKi8KKyNkZWZpbmUgU0lPQ1NJUEZSQU1JTkcJU0lPQ0lXRklSU1RQUklWCS8qIFNldCBmcmFtaW5nIG1vZGUgKi8KICNkZWZpbmUgU0lPQ0dJUEZSQU1JTkcJU0lPQ0lXRklSU1RQUklWICsgMQkvKiBHZXQgZnJhbWluZyBtb2RlICovCiAjZGVmaW5lIFNJT0NHSVBDT1VOVFJZCVNJT0NJV0ZJUlNUUFJJViArIDMJLyogR2V0IGNvdW50cnkgY29kZSAqLwogCi1zdGF0aWMgY29uc3QgaXdfaGFuZGxlcglyYXlfcHJpdmF0ZV9oYW5kbGVyW10gPSB7CitzdGF0aWMgY29uc3QgaXdfaGFuZGxlciByYXlfcHJpdmF0ZV9oYW5kbGVyW10gPSB7CiAJWzBdID0gKGl3X2hhbmRsZXIpIHJheV9zZXRfZnJhbWluZywKIAlbMV0gPSAoaXdfaGFuZGxlcikgcmF5X2dldF9mcmFtaW5nLAogCVszXSA9IChpd19oYW5kbGVyKSByYXlfZ2V0X2NvdW50cnksCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncwlyYXlfcHJpdmF0ZV9hcmdzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3X3ByaXZfYXJncyByYXlfcHJpdmF0ZV9hcmdzW10gPSB7CiAvKiBjbWQsCQlzZXRfYXJncywJZ2V0X2FyZ3MsCW5hbWUgKi8KLXsgU0lPQ1NJUEZSQU1JTkcsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInNldF9mcmFtaW5nIiB9LAoteyBTSU9DR0lQRlJBTUlORywgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAiZ2V0X2ZyYW1pbmciIH0sCi17IFNJT0NHSVBDT1VOVFJZLCAwLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsICJnZXRfY291bnRyeSIgfSwKKwl7U0lPQ1NJUEZSQU1JTkcsIElXX1BSSVZfVFlQRV9CWVRFIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwKKwkgInNldF9mcmFtaW5nIn0sCisJe1NJT0NHSVBGUkFNSU5HLCAwLCBJV19QUklWX1RZUEVfQllURSB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsCisJICJnZXRfZnJhbWluZyJ9LAorCXtTSU9DR0lQQ09VTlRSWSwgMCwgSVdfUFJJVl9UWVBFX0JZVEUgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLAorCSAiZ2V0X2NvdW50cnkifSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYJcmF5X2hhbmRsZXJfZGVmID0KLXsKLQkubnVtX3N0YW5kYXJkCT0gQVJSQVlfU0laRShyYXlfaGFuZGxlciksCi0JLm51bV9wcml2YXRlCT0gQVJSQVlfU0laRShyYXlfcHJpdmF0ZV9oYW5kbGVyKSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcmF5X2hhbmRsZXJfZGVmID0geworCS5udW1fc3RhbmRhcmQgPSBBUlJBWV9TSVpFKHJheV9oYW5kbGVyKSwKKwkubnVtX3ByaXZhdGUgPSBBUlJBWV9TSVpFKHJheV9wcml2YXRlX2hhbmRsZXIpLAogCS5udW1fcHJpdmF0ZV9hcmdzID0gQVJSQVlfU0laRShyYXlfcHJpdmF0ZV9hcmdzKSwKLQkuc3RhbmRhcmQJPSByYXlfaGFuZGxlciwKLQkucHJpdmF0ZQk9IHJheV9wcml2YXRlX2hhbmRsZXIsCi0JLnByaXZhdGVfYXJncwk9IHJheV9wcml2YXRlX2FyZ3MsCisJLnN0YW5kYXJkID0gcmF5X2hhbmRsZXIsCisJLnByaXZhdGUgPSByYXlfcHJpdmF0ZV9oYW5kbGVyLAorCS5wcml2YXRlX2FyZ3MgPSByYXlfcHJpdmF0ZV9hcmdzLAogCS5nZXRfd2lyZWxlc3Nfc3RhdHMgPSByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzLAogfTsKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCByYXlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwotICAgIGxpbmsgPSBsb2NhbC0+ZmluZGVyOwotICAgIAotICAgIERFQlVHKDEsICJyYXlfb3BlbignJXMnKVxuIiwgZGV2LT5uYW1lKTsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwlsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmIChsaW5rLT5vcGVuID09IDApCi0JICAgIGxvY2FsLT5udW1fbXVsdGkgPSAwOwotICAgIGxpbmstPm9wZW4rKzsKKwlERUJVRygxLCAicmF5X29wZW4oJyVzJylcbiIsIGRldi0+bmFtZSk7CiAKLSAgICAvKiBJZiB0aGUgY2FyZCBpcyBub3Qgc3RhcnRlZCwgdGltZSB0byBzdGFydCBpdCAhIC0gSmVhbiBJSSAqLwotICAgIGlmKGxvY2FsLT5jYXJkX3N0YXR1cyA9PSBDQVJEX0FXQUlUSU5HX1BBUkFNKSB7Ci0JaW50IGk7CisJaWYgKGxpbmstPm9wZW4gPT0gMCkKKwkJbG9jYWwtPm51bV9tdWx0aSA9IDA7CisJbGluay0+b3BlbisrOwogCi0JREVCVUcoMSwicmF5X29wZW46IGRvaW5nIGluaXQgbm93ICFcbiIpOworCS8qIElmIHRoZSBjYXJkIGlzIG5vdCBzdGFydGVkLCB0aW1lIHRvIHN0YXJ0IGl0ICEgLSBKZWFuIElJICovCisJaWYgKGxvY2FsLT5jYXJkX3N0YXR1cyA9PSBDQVJEX0FXQUlUSU5HX1BBUkFNKSB7CisJCWludCBpOwogCi0JLyogRG93bmxvYWQgc3RhcnR1cCBwYXJhbWV0ZXJzICovCi0JaWYgKCAoaSA9IGRsX3N0YXJ0dXBfcGFyYW1zKGRldikpIDwgMCkKLQkgIHsKLQkgICAgcHJpbnRrKEtFUk5fSU5GTyAicmF5X2Rldl9pbml0IGRsX3N0YXJ0dXBfcGFyYW1zIGZhaWxlZCAtICIKLQkJICAgInJldHVybnMgMHgleFxuIixpKTsKLQkgICAgcmV0dXJuIC0xOwotCSAgfQotICAgICB9CisJCURFQlVHKDEsICJyYXlfb3BlbjogZG9pbmcgaW5pdCBub3cgIVxuIik7CiAKLSAgICBpZiAoc25pZmZlcikgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgIGVsc2UgICAgICAgICBuZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQkvKiBEb3dubG9hZCBzdGFydHVwIHBhcmFtZXRlcnMgKi8KKwkJaWYgKChpID0gZGxfc3RhcnR1cF9wYXJhbXMoZGV2KSkgPCAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgInJheV9kZXZfaW5pdCBkbF9zdGFydHVwX3BhcmFtcyBmYWlsZWQgLSAiCisJCQkgICAgICAgInJldHVybnMgMHgleFxuIiwgaSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CiAKLSAgICBERUJVRygyLCJyYXlfb3BlbiBlbmRpbmdcbiIpOwotICAgIHJldHVybiAwOworCWlmIChzbmlmZmVyKQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJZWxzZQorCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJREVCVUcoMiwgInJheV9vcGVuIGVuZGluZ1xuIik7CisJcmV0dXJuIDA7CiB9IC8qIGVuZCByYXlfb3BlbiAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IHJheV9kZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKLSAgICBsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluazsKKwlsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIERFQlVHKDEsICJyYXlfZGV2X2Nsb3NlKCclcycpXG4iLCBkZXYtPm5hbWUpOworCURFQlVHKDEsICJyYXlfZGV2X2Nsb3NlKCclcycpXG4iLCBkZXYtPm5hbWUpOwogCi0gICAgbGluay0+b3Blbi0tOwotICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlsaW5rLT5vcGVuLS07CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0gICAgLyogSW4gaGVyZSwgd2Ugc2hvdWxkIHN0b3AgdGhlIGhhcmR3YXJlIChzdG9wIGNhcmQgZnJvbSBiZWVpbmcgYWN0aXZlKQotICAgICAqIGFuZCBzZXQgbG9jYWwtPmNhcmRfc3RhdHVzIHRvIENBUkRfQVdBSVRJTkdfUEFSQU0sIHNvIHRoYXQgd2hpbGUgdGhlCi0gICAgICogY2FyZCBpcyBjbG9zZWQgd2UgY2FuIGNoYWdlIGl0cyBjb25maWd1cmF0aW9uLgotICAgICAqIFByb2JhYmx5IGFsc28gbmVlZCBhIENPUiByZXNldCB0byBnZXQgc2FuZSBzdGF0ZSAtIEplYW4gSUkgKi8KKwkvKiBJbiBoZXJlLCB3ZSBzaG91bGQgc3RvcCB0aGUgaGFyZHdhcmUgKHN0b3AgY2FyZCBmcm9tIGJlZWluZyBhY3RpdmUpCisJICogYW5kIHNldCBsb2NhbC0+Y2FyZF9zdGF0dXMgdG8gQ0FSRF9BV0FJVElOR19QQVJBTSwgc28gdGhhdCB3aGlsZSB0aGUKKwkgKiBjYXJkIGlzIGNsb3NlZCB3ZSBjYW4gY2hhZ2UgaXRzIGNvbmZpZ3VyYXRpb24uCisJICogUHJvYmFibHkgYWxzbyBuZWVkIGEgQ09SIHJlc2V0IHRvIGdldCBzYW5lIHN0YXRlIC0gSmVhbiBJSSAqLwogCi0gICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9IC8qIGVuZCByYXlfZGV2X2Nsb3NlICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIHJheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KSB7Ci0gICAgREVCVUcoMSwicmF5X3Jlc2V0IGVudGVyZWRcbiIpOwotICAgIHJldHVybjsKK3N0YXRpYyB2b2lkIHJheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCURFQlVHKDEsICJyYXlfcmVzZXQgZW50ZXJlZFxuIik7CisJcmV0dXJuOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAvKiBDYXVzZSBhIGZpcm13YXJlIGludGVycnVwdCBpZiBpdCBpcyByZWFkeSBmb3Igb25lICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBSZXR1cm4gbm9uemVybyBpZiBub3QgcmVhZHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBzdGF0aWMgaW50IGludGVycnVwdF9lY2YocmF5X2Rldl90ICpsb2NhbCwgaW50IGNjcykKIHsKLSAgICBpbnQgaSA9IDUwOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgaSA9IDUwOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGludGVycnVwdF9lY2YgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIERFQlVHKDIsImludGVycnVwdF9lY2YobG9jYWw9JXAsIGNjcyA9IDB4JXhcbiIsbG9jYWwsY2NzKTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgaW50ZXJydXB0X2VjZiAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJREVCVUcoMiwgImludGVycnVwdF9lY2YobG9jYWw9JXAsIGNjcyA9IDB4JXhcbiIsIGxvY2FsLCBjY3MpOwogCi0gICAgd2hpbGUgKCBpICYmIAotICAgICAgICAgICAgKHJlYWRiKGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEVDRl9JTlRSX09GRlNFVCkgJiBFQ0ZfSU5UUl9TRVQpKQotICAgICAgICBpLS07Ci0gICAgaWYgKGkgPT0gMCkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgaW50ZXJydXB0X2VjZiBjYXJkIG5vdCByZWFkeSBmb3IgaW50ZXJydXB0XG4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKwl3aGlsZSAoaSAmJgorCSAgICAgICAocmVhZGIobG9jYWwtPmFtZW0gKyBDSVNfT0ZGU0VUICsgRUNGX0lOVFJfT0ZGU0VUKSAmCisJCUVDRl9JTlRSX1NFVCkpCisJCWktLTsKKwlpZiAoaSA9PSAwKSB7CisJCURFQlVHKDIsICJyYXlfY3MgaW50ZXJydXB0X2VjZiBjYXJkIG5vdCByZWFkeSBmb3IgaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAkvKiBGaWxsIHRoZSBtYWlsYm94LCB0aGVuIGtpY2sgdGhlIGNhcmQgKi8KLSAgICB3cml0ZWIoY2NzLCBsb2NhbC0+c3JhbSArIFNDQl9CQVNFKTsKLSAgICB3cml0ZWIoRUNGX0lOVFJfU0VULCBsb2NhbC0+YW1lbSArIENJU19PRkZTRVQgKyBFQ0ZfSU5UUl9PRkZTRVQpOwotICAgIHJldHVybiAwOworCXdyaXRlYihjY3MsIGxvY2FsLT5zcmFtICsgU0NCX0JBU0UpOworCXdyaXRlYihFQ0ZfSU5UUl9TRVQsIGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEVDRl9JTlRSX09GRlNFVCk7CisJcmV0dXJuIDA7CiB9IC8qIGludGVycnVwdF9lY2YgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogR2V0IG5leHQgZnJlZSB0cmFuc21pdCBDQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogUmV0dXJuIC0gaW5kZXggb2YgY3VycmVudCB0eCBjY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogc3RhdGljIGludCBnZXRfZnJlZV90eF9jY3MocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICBpbnQgaTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCk7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBpOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBnZXRfZnJlZV90eF9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gRUNBUkRHT05FOwotICAgIH0KKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfY3MgZ2V0X2ZyZWVfdHhfY2NzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuIEVDQVJER09ORTsKKwl9CiAKLSAgICBpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCZsb2NhbC0+dHhfY2NzX2xvY2spKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyB0eF9jY3NfbG9jayBidXN5XG4iKTsKLSAgICAgICAgcmV0dXJuIEVDQ1NCVVNZOwotICAgIH0gCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmxvY2FsLT50eF9jY3NfbG9jaykpIHsKKwkJREVCVUcoMSwgInJheV9jcyB0eF9jY3NfbG9jayBidXN5XG4iKTsKKwkJcmV0dXJuIEVDQ1NCVVNZOworCX0KIAotICAgIGZvciAoaT0wOyBpIDwgTlVNQkVSX09GX1RYX0NDUzsgaSsrKSB7Ci0gICAgICAgIGlmIChyZWFkYigmKHBjY3MraSktPmJ1ZmZlcl9zdGF0dXMpID09IENDU19CVUZGRVJfRlJFRSkgewotICAgICAgICAgICAgd3JpdGViKENDU19CVUZGRVJfQlVTWSwgJihwY2NzK2kpLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgICAgIHdyaXRlYihDQ1NfRU5EX0xJU1QsICYocGNjcytpKS0+bGluayk7CisJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9PRl9UWF9DQ1M7IGkrKykgeworCQlpZiAocmVhZGIoJihwY2NzICsgaSktPmJ1ZmZlcl9zdGF0dXMpID09IENDU19CVUZGRVJfRlJFRSkgeworCQkJd3JpdGViKENDU19CVUZGRVJfQlVTWSwgJihwY2NzICsgaSktPmJ1ZmZlcl9zdGF0dXMpOworCQkJd3JpdGViKENDU19FTkRfTElTVCwgJihwY2NzICsgaSktPmxpbmspOwogCQkJbG9jYWwtPnR4X2Njc19sb2NrID0gMDsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQorCQkJcmV0dXJuIGk7CisJCX0KKwl9CiAJbG9jYWwtPnR4X2Njc19sb2NrID0gMDsKLSAgICBERUJVRygyLCJyYXlfY3MgRVJST1Igbm8gZnJlZSB0eCBDQ1MgZm9yIHJheWxpbmsgY2FyZFxuIik7Ci0gICAgcmV0dXJuIEVDQ1NGVUxMOworCURFQlVHKDIsICJyYXlfY3MgRVJST1Igbm8gZnJlZSB0eCBDQ1MgZm9yIHJheWxpbmsgY2FyZFxuIik7CisJcmV0dXJuIEVDQ1NGVUxMOwogfSAvKiBnZXRfZnJlZV90eF9jY3MgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogR2V0IG5leHQgZnJlZSBDQ1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyogUmV0dXJuIC0gaW5kZXggb2YgY3VycmVudCBjY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogc3RhdGljIGludCBnZXRfZnJlZV9jY3MocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICBpbnQgaTsKLSAgICBzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3MgPSBjY3NfYmFzZShsb2NhbCk7Ci0gICAgc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCWludCBpOworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjcyA9IGNjc19iYXNlKGxvY2FsKTsKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBnZXRfZnJlZV9jY3MgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm4gRUNBUkRHT05FOwotICAgIH0KLSAgICBpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCZsb2NhbC0+Y2NzX2xvY2spKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyBjY3NfbG9jayBidXN5XG4iKTsKLSAgICAgICAgcmV0dXJuIEVDQ1NCVVNZOwotICAgIH0gCisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGdldF9mcmVlX2NjcyAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiBFQ0FSREdPTkU7CisJfQorCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZsb2NhbC0+Y2NzX2xvY2spKSB7CisJCURFQlVHKDEsICJyYXlfY3MgY2NzX2xvY2sgYnVzeVxuIik7CisJCXJldHVybiBFQ0NTQlVTWTsKKwl9CiAKLSAgICBmb3IgKGkgPSBOVU1CRVJfT0ZfVFhfQ0NTOyBpIDwgTlVNQkVSX09GX0NDUzsgaSsrKSB7Ci0gICAgICAgIGlmIChyZWFkYigmKHBjY3MraSktPmJ1ZmZlcl9zdGF0dXMpID09IENDU19CVUZGRVJfRlJFRSkgewotICAgICAgICAgICAgd3JpdGViKENDU19CVUZGRVJfQlVTWSwgJihwY2NzK2kpLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgICAgIHdyaXRlYihDQ1NfRU5EX0xJU1QsICYocGNjcytpKS0+bGluayk7CisJZm9yIChpID0gTlVNQkVSX09GX1RYX0NDUzsgaSA8IE5VTUJFUl9PRl9DQ1M7IGkrKykgeworCQlpZiAocmVhZGIoJihwY2NzICsgaSktPmJ1ZmZlcl9zdGF0dXMpID09IENDU19CVUZGRVJfRlJFRSkgeworCQkJd3JpdGViKENDU19CVUZGRVJfQlVTWSwgJihwY2NzICsgaSktPmJ1ZmZlcl9zdGF0dXMpOworCQkJd3JpdGViKENDU19FTkRfTElTVCwgJihwY2NzICsgaSktPmxpbmspOwogCQkJbG9jYWwtPmNjc19sb2NrID0gMDsKLSAgICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQorCQkJcmV0dXJuIGk7CisJCX0KKwl9CiAJbG9jYWwtPmNjc19sb2NrID0gMDsKLSAgICBERUJVRygxLCJyYXlfY3MgRVJST1Igbm8gZnJlZSBDQ1MgZm9yIHJheWxpbmsgY2FyZFxuIik7Ci0gICAgcmV0dXJuIEVDQ1NGVUxMOworCURFQlVHKDEsICJyYXlfY3MgRVJST1Igbm8gZnJlZSBDQ1MgZm9yIHJheWxpbmsgY2FyZFxuIik7CisJcmV0dXJuIEVDQ1NGVUxMOwogfSAvKiBnZXRfZnJlZV9jY3MgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgYXV0aGVudGljYXRlX3RpbWVvdXQodV9sb25nIGRhdGEpCiB7Ci0gICAgcmF5X2Rldl90ICpsb2NhbCA9IChyYXlfZGV2X3QgKilkYXRhOwotICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICBwcmludGsoS0VSTl9JTkZPICJyYXlfY3MgQXV0aGVudGljYXRpb24gd2l0aCBhY2Nlc3MgcG9pbnQgZmFpbGVkIgotICAgICAgICIgLSB0aW1lb3V0XG4iKTsKLSAgICBqb2luX25ldCgodV9sb25nKWxvY2FsKTsKKwlyYXlfZGV2X3QgKmxvY2FsID0gKHJheV9kZXZfdCAqKSBkYXRhOworCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlwcmludGsoS0VSTl9JTkZPICJyYXlfY3MgQXV0aGVudGljYXRpb24gd2l0aCBhY2Nlc3MgcG9pbnQgZmFpbGVkIgorCSAgICAgICAiIC0gdGltZW91dFxuIik7CisJam9pbl9uZXQoKHVfbG9uZykgbG9jYWwpOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IGFzY190b19pbnQoY2hhciBhKQogewotICAgIGlmIChhIDwgJzAnKSByZXR1cm4gLTE7Ci0gICAgaWYgKGEgPD0gJzknKSByZXR1cm4gKGEgLSAnMCcpOwotICAgIGlmIChhIDwgJ0EnKSByZXR1cm4gLTE7Ci0gICAgaWYgKGEgPD0gJ0YnKSByZXR1cm4gKDEwICsgYSAtICdBJyk7Ci0gICAgaWYgKGEgPCAnYScpIHJldHVybiAtMTsKLSAgICBpZiAoYSA8PSAnZicpIHJldHVybiAoMTAgKyBhIC0gJ2EnKTsKLSAgICByZXR1cm4gLTE7CisJaWYgKGEgPCAnMCcpCisJCXJldHVybiAtMTsKKwlpZiAoYSA8PSAnOScpCisJCXJldHVybiAoYSAtICcwJyk7CisJaWYgKGEgPCAnQScpCisJCXJldHVybiAtMTsKKwlpZiAoYSA8PSAnRicpCisJCXJldHVybiAoMTAgKyBhIC0gJ0EnKTsKKwlpZiAoYSA8ICdhJykKKwkJcmV0dXJuIC0xOworCWlmIChhIDw9ICdmJykKKwkJcmV0dXJuICgxMCArIGEgLSAnYScpOworCXJldHVybiAtMTsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIGludCBwYXJzZV9hZGRyKGNoYXIgKmluX3N0ciwgVUNIQVIgKm91dCkKIHsKLSAgICBpbnQgbGVuOwotICAgIGludCBpLGosazsKLSAgICBpbnQgc3RhdHVzOwotICAgIAotICAgIGlmIChpbl9zdHIgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgaWYgKChsZW4gPSBzdHJsZW4oaW5fc3RyKSkgPCAyKSByZXR1cm4gMDsKLSAgICBtZW1zZXQob3V0LCAwLCBBRERSTEVOKTsKKwlpbnQgbGVuOworCWludCBpLCBqLCBrOworCWludCBzdGF0dXM7CiAKLSAgICBzdGF0dXMgPSAxOwotICAgIGogPSBsZW4gLSAxOwotICAgIGlmIChqID4gMTIpIGogPSAxMjsKLSAgICBpID0gNTsKLSAgICAKLSAgICB3aGlsZSAoaiA+IDApCi0gICAgewotICAgICAgICBpZiAoKGsgPSBhc2NfdG9faW50KGluX3N0cltqLS1dKSkgIT0gLTEpIG91dFtpXSA9IGs7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDA7CisJaWYgKGluX3N0ciA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlpZiAoKGxlbiA9IHN0cmxlbihpbl9zdHIpKSA8IDIpCisJCXJldHVybiAwOworCW1lbXNldChvdXQsIDAsIEFERFJMRU4pOwogCi0gICAgICAgIGlmIChqID09IDApIGJyZWFrOwotICAgICAgICBpZiAoKGsgPSBhc2NfdG9faW50KGluX3N0cltqLS1dKSkgIT0gLTEpIG91dFtpXSArPSBrIDw8IDQ7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDA7Ci0gICAgICAgIGlmICghaS0tKSBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXR1czsKKwlzdGF0dXMgPSAxOworCWogPSBsZW4gLSAxOworCWlmIChqID4gMTIpCisJCWogPSAxMjsKKwlpID0gNTsKKworCXdoaWxlIChqID4gMCkgeworCQlpZiAoKGsgPSBhc2NfdG9faW50KGluX3N0cltqLS1dKSkgIT0gLTEpCisJCQlvdXRbaV0gPSBrOworCQllbHNlCisJCQlyZXR1cm4gMDsKKworCQlpZiAoaiA9PSAwKQorCQkJYnJlYWs7CisJCWlmICgoayA9IGFzY190b19pbnQoaW5fc3RyW2otLV0pKSAhPSAtMSkKKwkJCW91dFtpXSArPSBrIDw8IDQ7CisJCWVsc2UKKwkJCXJldHVybiAwOworCQlpZiAoIWktLSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RhdHVzOwogfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJheV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgc3RydWN0IHN0YXR1cyBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBTVEFUVVNfQkFTRTsKLSAgICBpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7Ci0gICAgICAgIERFQlVHKDIsInJheV9jcyBuZXRfZGV2aWNlX3N0YXRzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuICZsb2NhbC0+c3RhdHM7Ci0gICAgfQotICAgIGlmIChyZWFkYigmcC0+bXJ4X292ZXJmbG93X2Zvcl9ob3N0KSkKLSAgICB7Ci0gICAgICAgIGxvY2FsLT5zdGF0cy5yeF9vdmVyX2Vycm9ycyArPSBzd2FiMTYocmVhZHcoJnAtPm1yeF9vdmVyZmxvdykpOwotICAgICAgICB3cml0ZWIoMCwmcC0+bXJ4X292ZXJmbG93KTsKLSAgICAgICAgd3JpdGViKDAsJnAtPm1yeF9vdmVyZmxvd19mb3JfaG9zdCk7Ci0gICAgfQotICAgIGlmIChyZWFkYigmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yX2Zvcl9ob3N0KSkKLSAgICB7Ci0gICAgICAgIGxvY2FsLT5zdGF0cy5yeF9jcmNfZXJyb3JzICs9IHN3YWIxNihyZWFkdygmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yKSk7Ci0gICAgICAgIHdyaXRlYigwLCZwLT5tcnhfY2hlY2tzdW1fZXJyb3IpOwotICAgICAgICB3cml0ZWIoMCwmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yX2Zvcl9ob3N0KTsKLSAgICB9Ci0gICAgaWYgKHJlYWRiKCZwLT5yeF9oZWNfZXJyb3JfZm9yX2hvc3QpKQotICAgIHsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPSBzd2FiMTYocmVhZHcoJnAtPnJ4X2hlY19lcnJvcikpOwotICAgICAgICB3cml0ZWIoMCwmcC0+cnhfaGVjX2Vycm9yKTsKLSAgICAgICAgd3JpdGViKDAsJnAtPnJ4X2hlY19lcnJvcl9mb3JfaG9zdCk7Ci0gICAgfQotICAgIHJldHVybiAmbG9jYWwtPnN0YXRzOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlzdHJ1Y3Qgc3RhdHVzIF9faW9tZW0gKnAgPSBsb2NhbC0+c3JhbSArIFNUQVRVU19CQVNFOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBuZXRfZGV2aWNlX3N0YXRzIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKKwkJcmV0dXJuICZsb2NhbC0+c3RhdHM7CisJfQorCWlmIChyZWFkYigmcC0+bXJ4X292ZXJmbG93X2Zvcl9ob3N0KSkgeworCQlsb2NhbC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMgKz0gc3dhYjE2KHJlYWR3KCZwLT5tcnhfb3ZlcmZsb3cpKTsKKwkJd3JpdGViKDAsICZwLT5tcnhfb3ZlcmZsb3cpOworCQl3cml0ZWIoMCwgJnAtPm1yeF9vdmVyZmxvd19mb3JfaG9zdCk7CisJfQorCWlmIChyZWFkYigmcC0+bXJ4X2NoZWNrc3VtX2Vycm9yX2Zvcl9ob3N0KSkgeworCQlsb2NhbC0+c3RhdHMucnhfY3JjX2Vycm9ycyArPQorCQkgICAgc3dhYjE2KHJlYWR3KCZwLT5tcnhfY2hlY2tzdW1fZXJyb3IpKTsKKwkJd3JpdGViKDAsICZwLT5tcnhfY2hlY2tzdW1fZXJyb3IpOworCQl3cml0ZWIoMCwgJnAtPm1yeF9jaGVja3N1bV9lcnJvcl9mb3JfaG9zdCk7CisJfQorCWlmIChyZWFkYigmcC0+cnhfaGVjX2Vycm9yX2Zvcl9ob3N0KSkgeworCQlsb2NhbC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9IHN3YWIxNihyZWFkdygmcC0+cnhfaGVjX2Vycm9yKSk7CisJCXdyaXRlYigwLCAmcC0+cnhfaGVjX2Vycm9yKTsKKwkJd3JpdGViKDAsICZwLT5yeF9oZWNfZXJyb3JfZm9yX2hvc3QpOworCX0KKwlyZXR1cm4gJmxvY2FsLT5zdGF0czsKIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcmF5X3VwZGF0ZV9wYXJtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIFVDSEFSIG9iamlkLCBVQ0hBUiAqdmFsdWUsIGludCBsZW4pCitzdGF0aWMgdm9pZCByYXlfdXBkYXRlX3Bhcm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgVUNIQVIgb2JqaWQsIFVDSEFSICp2YWx1ZSwKKwkJCSAgICBpbnQgbGVuKQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgaW50IGk7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlpbnQgY2NzaW5kZXg7CisJaW50IGk7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwogCi0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfdXBkYXRlX3Bhcm0gLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV91cGRhdGVfcGFybSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CiAKLSAgICBpZiAoKGNjc2luZGV4ID0gZ2V0X2ZyZWVfY2NzKGxvY2FsKSkgPCAwKQotICAgIHsKLSAgICAgICAgREVCVUcoMCwicmF5X3VwZGF0ZV9wYXJtIC0gTm8gZnJlZSBjY3NcbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKLSAgICB3cml0ZWIoQ0NTX1VQREFURV9QQVJBTVMsICZwY2NzLT5jbWQpOwotICAgIHdyaXRlYihvYmppZCwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0ub2JqZWN0X2lkKTsKLSAgICB3cml0ZWIoMSwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0ubnVtYmVyX29iamVjdHMpOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5mYWlsdXJlX2NhdXNlKTsKLSAgICBmb3IgKGk9MDsgaTxsZW47IGkrKykgewotICAgICAgICB3cml0ZWIodmFsdWVbaV0sIGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRSk7Ci0gICAgfQotICAgIC8qIEludGVycnVwdCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgY29tbWFuZCAqLwotICAgIGlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKLSAgICAgICAgREVCVUcoMCwicmF5X2NzIGFzc29jaWF0ZSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKLSAgICB9CisJaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkgeworCQlERUJVRygwLCAicmF5X3VwZGF0ZV9wYXJtIC0gTm8gZnJlZSBjY3NcbiIpOworCQlyZXR1cm47CisJfQorCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwl3cml0ZWIoQ0NTX1VQREFURV9QQVJBTVMsICZwY2NzLT5jbWQpOworCXdyaXRlYihvYmppZCwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0ub2JqZWN0X2lkKTsKKwl3cml0ZWIoMSwgJnBjY3MtPnZhci51cGRhdGVfcGFyYW0ubnVtYmVyX29iamVjdHMpOworCXdyaXRlYigwLCAmcGNjcy0+dmFyLnVwZGF0ZV9wYXJhbS5mYWlsdXJlX2NhdXNlKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJd3JpdGViKHZhbHVlW2ldLCBsb2NhbC0+c3JhbSArIEhPU1RfVE9fRUNGX0JBU0UpOworCX0KKwkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwlpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7CisJCURFQlVHKDAsICJyYXlfY3MgYXNzb2NpYXRlIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCX0KIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgcmF5X3VwZGF0ZV9tdWx0aV9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhbGwpCiB7Ci0gICAgc3RydWN0IGRldl9tY19saXN0ICpkbWksICoqZG1pcDsKLSAgICBpbnQgY2NzaW5kZXg7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIGludCBpID0gMDsKLSAgICByYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgdm9pZCBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pLCAqKmRtaXA7CisJaW50IGNjc2luZGV4OworCXN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKKwlpbnQgaSA9IDA7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKmxpbmsgPSBsb2NhbC0+ZmluZGVyOworCXZvaWQgX19pb21lbSAqcCA9IGxvY2FsLT5zcmFtICsgSE9TVF9UT19FQ0ZfQkFTRTsKIAotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X3VwZGF0ZV9tdWx0aV9saXN0IC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBlbHNlIAotICAgICAgICBERUJVRygyLCJyYXlfdXBkYXRlX211bHRpX2xpc3QoJXApXG4iLGRldik7Ci0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKLSAgICB7Ci0gICAgICAgIERFQlVHKDEsInJheV91cGRhdGVfbXVsdGkgLSBObyBmcmVlIGNjc1xuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OwotICAgIHdyaXRlYihDQ1NfVVBEQVRFX01VTFRJQ0FTVF9MSVNULCAmcGNjcy0+Y21kKTsKKwlpZiAoIShwY21jaWFfZGV2X3ByZXNlbnQobGluaykpKSB7CisJCURFQlVHKDIsICJyYXlfdXBkYXRlX211bHRpX2xpc3QgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfSBlbHNlCisJCURFQlVHKDIsICJyYXlfdXBkYXRlX211bHRpX2xpc3QoJXApXG4iLCBkZXYpOworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHsKKwkJREVCVUcoMSwgInJheV91cGRhdGVfbXVsdGkgLSBObyBmcmVlIGNjc1xuIik7CisJCXJldHVybjsKKwl9CisJcGNjcyA9IGNjc19iYXNlKGxvY2FsKSArIGNjc2luZGV4OworCXdyaXRlYihDQ1NfVVBEQVRFX01VTFRJQ0FTVF9MSVNULCAmcGNjcy0+Y21kKTsKIAotICAgIGlmIChhbGwpIHsKLSAgICAgICAgd3JpdGViKDB4ZmYsICZwY2NzLT52YXIpOwotICAgICAgICBsb2NhbC0+bnVtX211bHRpID0gMHhmZjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIENvcHkgdGhlIGtlcm5lbCdzIGxpc3Qgb2YgTUMgYWRkcmVzc2VzIHRvIGNhcmQgKi8KLSAgICAgICAgZm9yIChkbWlwPSZkZXYtPm1jX2xpc3Q7IChkbWk9KmRtaXApIT1OVUxMOyBkbWlwPSZkbWktPm5leHQpIHsKLSAgICAgICAgICAgIG1lbWNweV90b2lvKHAsIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKLSAgICAgICAgICAgIERFQlVHKDEsInJheV91cGRhdGVfbXVsdGkgYWRkIGFkZHIgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLGRtaS0+ZG1pX2FkZHJbMF0sZG1pLT5kbWlfYWRkclsxXSxkbWktPmRtaV9hZGRyWzJdLGRtaS0+ZG1pX2FkZHJbM10sZG1pLT5kbWlfYWRkcls0XSxkbWktPmRtaV9hZGRyWzVdKTsKLSAgICAgICAgICAgIHAgKz0gRVRIX0FMRU47Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPiAyNTYvQUREUkxFTikgaSA9IDI1Ni9BRERSTEVOOwotICAgICAgICB3cml0ZWIoKFVDSEFSKWksICZwY2NzLT52YXIpOwotICAgICAgICBERUJVRygxLCJyYXlfY3MgdXBkYXRlX211bHRpICVkIGFkZHJlc3NlcyBpbiBsaXN0XG4iLCBpKTsKLSAgICAgICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgICAgIGxvY2FsLT5udW1fbXVsdGkgPSBpOwotICAgIH0KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyB1cGRhdGVfbXVsdGkgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgfQorCWlmIChhbGwpIHsKKwkJd3JpdGViKDB4ZmYsICZwY2NzLT52YXIpOworCQlsb2NhbC0+bnVtX211bHRpID0gMHhmZjsKKwl9IGVsc2UgeworCQkvKiBDb3B5IHRoZSBrZXJuZWwncyBsaXN0IG9mIE1DIGFkZHJlc3NlcyB0byBjYXJkICovCisJCWZvciAoZG1pcCA9ICZkZXYtPm1jX2xpc3Q7IChkbWkgPSAqZG1pcCkgIT0gTlVMTDsKKwkJICAgICBkbWlwID0gJmRtaS0+bmV4dCkgeworCQkJbWVtY3B5X3RvaW8ocCwgZG1pLT5kbWlfYWRkciwgRVRIX0FMRU4pOworCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfdXBkYXRlX211bHRpIGFkZCBhZGRyICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCSAgICAgIGRtaS0+ZG1pX2FkZHJbMF0sIGRtaS0+ZG1pX2FkZHJbMV0sCisJCQkgICAgICBkbWktPmRtaV9hZGRyWzJdLCBkbWktPmRtaV9hZGRyWzNdLAorCQkJICAgICAgZG1pLT5kbWlfYWRkcls0XSwgZG1pLT5kbWlfYWRkcls1XSk7CisJCQlwICs9IEVUSF9BTEVOOworCQkJaSsrOworCQl9CisJCWlmIChpID4gMjU2IC8gQUREUkxFTikKKwkJCWkgPSAyNTYgLyBBRERSTEVOOworCQl3cml0ZWIoKFVDSEFSKSBpLCAmcGNjcy0+dmFyKTsKKwkJREVCVUcoMSwgInJheV9jcyB1cGRhdGVfbXVsdGkgJWQgYWRkcmVzc2VzIGluIGxpc3RcbiIsIGkpOworCQkvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KKwkJbG9jYWwtPm51bV9tdWx0aSA9IGk7CisJfQorCWlmIChpbnRlcnJ1cHRfZWNmKGxvY2FsLCBjY3NpbmRleCkpIHsKKwkJREVCVUcoMSwKKwkJICAgICAgInJheV9jcyB1cGRhdGVfbXVsdGkgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7CisJCXdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7CisJfQogfSAvKiBlbmQgcmF5X3VwZGF0ZV9tdWx0aV9saXN0ICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIFVDSEFSIHByb21pc2M7CisJcmF5X2Rldl90ICpsb2NhbCA9IG5ldGRldl9wcml2KGRldik7CisJVUNIQVIgcHJvbWlzYzsKIAotICAgIERFQlVHKDIsInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QoJXApXG4iLGRldik7CisJREVCVUcoMiwgInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QoJXApXG4iLCBkZXYpOwogCi0gICAgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKLSAgICB7Ci0gICAgICAgIGlmIChsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID09IDApIHsKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QgcHJvbWlzYyBvblxuIik7Ci0gICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID0gMTsKLSAgICAgICAgICAgIHByb21pc2MgPSAxOwotICAgICAgICAgICAgcmF5X3VwZGF0ZV9wYXJtKGRldiwgIE9CSklEX3Byb21pc2N1b3VzX21vZGUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvbWlzYywgc2l6ZW9mKHByb21pc2MpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPT0gMSkgewotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIHNldF9tdWx0aWNhc3RfbGlzdCBwcm9taXNjIG9mZlxuIik7Ci0gICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID0gMDsKLSAgICAgICAgICAgIHByb21pc2MgPSAwOwotICAgICAgICAgICAgcmF5X3VwZGF0ZV9wYXJtKGRldiwgIE9CSklEX3Byb21pc2N1b3VzX21vZGUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvbWlzYywgc2l6ZW9mKHByb21pc2MpKTsKLSAgICAgICAgfQotICAgIH0KKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCWlmIChsb2NhbC0+c3Bhcm0uYjUuYV9wcm9taXNjdW91c19tb2RlID09IDApIHsKKwkJCURFQlVHKDEsICJyYXlfY3Mgc2V0X211bHRpY2FzdF9saXN0IHByb21pc2Mgb25cbiIpOworCQkJbG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9IDE7CisJCQlwcm9taXNjID0gMTsKKwkJCXJheV91cGRhdGVfcGFybShkZXYsIE9CSklEX3Byb21pc2N1b3VzX21vZGUsCisJCQkJCSZwcm9taXNjLCBzaXplb2YocHJvbWlzYykpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGxvY2FsLT5zcGFybS5iNS5hX3Byb21pc2N1b3VzX21vZGUgPT0gMSkgeworCQkJREVCVUcoMSwgInJheV9jcyBzZXRfbXVsdGljYXN0X2xpc3QgcHJvbWlzYyBvZmZcbiIpOworCQkJbG9jYWwtPnNwYXJtLmI1LmFfcHJvbWlzY3VvdXNfbW9kZSA9IDA7CisJCQlwcm9taXNjID0gMDsKKwkJCXJheV91cGRhdGVfcGFybShkZXYsIE9CSklEX3Byb21pc2N1b3VzX21vZGUsCisJCQkJCSZwcm9taXNjLCBzaXplb2YocHJvbWlzYykpOworCQl9CisJfQogCi0gICAgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHJheV91cGRhdGVfbXVsdGlfbGlzdChkZXYsIDEpOwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGlmIChsb2NhbC0+bnVtX211bHRpICE9IGRldi0+bWNfY291bnQpIHJheV91cGRhdGVfbXVsdGlfbGlzdChkZXYsIDApOwotICAgIH0KKwlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKKwkJcmF5X3VwZGF0ZV9tdWx0aV9saXN0KGRldiwgMSk7CisJZWxzZSB7CisJCWlmIChsb2NhbC0+bnVtX211bHRpICE9IGRldi0+bWNfY291bnQpCisJCQlyYXlfdXBkYXRlX211bHRpX2xpc3QoZGV2LCAwKTsKKwl9CiB9IC8qIGVuZCBzZXRfbXVsdGljYXN0X2xpc3QgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQWxsIHJvdXRpbmVzIGJlbG93IGhlcmUgYXJlIHJ1biBhdCBpbnRlcnJ1cHQgdGltZS4KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpcnFyZXR1cm5fdCByYXlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwotICAgIHJheV9kZXZfdCAqbG9jYWw7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIHN0cnVjdCByY3MgX19pb21lbSAqcHJjczsKLSAgICBVQ0hBUiByY3NpbmRleDsKLSAgICBVQ0hBUiB0bXA7Ci0gICAgVUNIQVIgY21kOwotICAgIFVDSEFSIHN0YXR1czsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCXJheV9kZXZfdCAqbG9jYWw7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXN0cnVjdCByY3MgX19pb21lbSAqcHJjczsKKwlVQ0hBUiByY3NpbmRleDsKKwlVQ0hBUiB0bXA7CisJVUNIQVIgY21kOworCVVDSEFSIHN0YXR1czsKIAotICAgIGlmIChkZXYgPT0gTlVMTCkgLyogTm90ZSB0aGF0IHdlIHdhbnQgaW50ZXJydXB0cyB3aXRoIGRldi0+c3RhcnQgPT0gMCAqLwotCXJldHVybiBJUlFfTk9ORTsKKwlpZiAoZGV2ID09IE5VTEwpCS8qIE5vdGUgdGhhdCB3ZSB3YW50IGludGVycnVwdHMgd2l0aCBkZXYtPnN0YXJ0ID09IDAgKi8KKwkJcmV0dXJuIElSUV9OT05FOwogCi0gICAgREVCVUcoNCwicmF5X2NzOiBpbnRlcnJ1cHQgZm9yICpkZXY9JXBcbiIsZGV2KTsKKwlERUJVRyg0LCAicmF5X2NzOiBpbnRlcnJ1cHQgZm9yICpkZXY9JXBcbiIsIGRldik7CiAKLSAgICBsb2NhbCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgbGluayA9IChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqKWxvY2FsLT5maW5kZXI7Ci0gICAgaWYgKCFwY21jaWFfZGV2X3ByZXNlbnQobGluaykpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGludGVycnVwdCBmcm9tIGRldmljZSBub3QgcHJlc2VudCBvciBzdXNwZW5kZWQuXG4iKTsKLSAgICAgICAgcmV0dXJuIElSUV9OT05FOwotICAgIH0KLSAgICByY3NpbmRleCA9IHJlYWRiKCYoKHN0cnVjdCBzY2IgX19pb21lbSAqKShsb2NhbC0+c3JhbSkpLT5yY3NfaW5kZXgpOworCWxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlsaW5rID0gKHN0cnVjdCBwY21jaWFfZGV2aWNlICopbG9jYWwtPmZpbmRlcjsKKwlpZiAoIXBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkgeworCQlERUJVRygyLAorCQkgICAgICAicmF5X2NzIGludGVycnVwdCBmcm9tIGRldmljZSBub3QgcHJlc2VudCBvciBzdXNwZW5kZWQuXG4iKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwlyY3NpbmRleCA9IHJlYWRiKCYoKHN0cnVjdCBzY2IgX19pb21lbSAqKShsb2NhbC0+c3JhbSkpLT5yY3NfaW5kZXgpOwogCi0gICAgaWYgKHJjc2luZGV4ID49IChOVU1CRVJfT0ZfQ0NTICsgTlVNQkVSX09GX1JDUykpCi0gICAgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGJhZCByY3NpbmRleCA9IDB4JXhcbiIscmNzaW5kZXgpOwotICAgICAgICBjbGVhcl9pbnRlcnJ1cHQobG9jYWwpOwotICAgICAgICByZXR1cm4gSVJRX0hBTkRMRUQ7Ci0gICAgfQotICAgIGlmIChyY3NpbmRleCA8IE5VTUJFUl9PRl9DQ1MpIC8qIElmIGl0J3MgYSByZXR1cm5lZCBDQ1MgKi8KLSAgICB7Ci0gICAgICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKLSAgICAgICAgY21kID0gcmVhZGIoJnBjY3MtPmNtZCk7Ci0gICAgICAgIHN0YXR1cyA9IHJlYWRiKCZwY2NzLT5idWZmZXJfc3RhdHVzKTsKLSAgICAgICAgc3dpdGNoIChjbWQpCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBDQ1NfRE9XTkxPQURfU1RBUlRVUF9QQVJBTVM6IC8qIEhhcHBlbnMgaW4gZmlybXdhcmUgc29tZWRheSAqLwotICAgICAgICAgICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgewotICAgICAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgZG93bmxvYWRfc3RhcnR1cF9wYXJhbWV0ZXJzIE9LXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgZG93bmxvYWRfc3RhcnR1cF9wYXJhbWV0ZXJzIGZhaWxcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1VQREFURV9QQVJBTVM6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwYXJhbXMgZG9uZVxuIik7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzICE9IENDU19DT01NQU5EX0NPTVBMRVRFKSB7Ci0gICAgICAgICAgICAgICAgdG1wID0gcmVhZGIoJnBjY3MtPnZhci51cGRhdGVfcGFyYW0uZmFpbHVyZV9jYXVzZSk7Ci0gICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwYXJhbXMgZmFpbGVkIC0gcmVhc29uICVkXG4iLHRtcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfUkVQT1JUX1BBUkFNUzoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgcmVwb3J0IHBhcmFtcyBkb25lXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19VUERBVEVfTVVMVElDQVNUX0xJU1Q6IC8qIE5vdGUgdGhhdCB0aGlzIENDUyBpc24ndCByZXR1cm5lZCAqLwotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBDQ1MgVXBkYXRlIE11bHRpY2FzdCBMaXN0IGRvbmVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1VQREFURV9QT1dFUl9TQVZJTkdTX01PREU6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwb3dlciBzYXZlIG1vZGUgZG9uZVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfU1RBUlRfTkVUV09SSzoKLSAgICAgICAgY2FzZSBDQ1NfSk9JTl9ORVRXT1JLOgotICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgewotICAgICAgICAgICAgICAgIGlmIChyZWFkYigmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsubmV0X2luaXRpYXRlZCkgPT0gMSkgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIHN0YXJ0ZWRcbiIsXAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIGpvaW5lZFxuIixcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtY3B5X2Zyb21pbygmbG9jYWwtPmJzc19pZCxwY2NzLT52YXIuc3RhcnRfbmV0d29yay5ic3NpZCxBRERSTEVOKTsKKwlpZiAocmNzaW5kZXggPj0gKE5VTUJFUl9PRl9DQ1MgKyBOVU1CRVJfT0ZfUkNTKSkgeworCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCBiYWQgcmNzaW5kZXggPSAweCV4XG4iLCByY3NpbmRleCk7CisJCWNsZWFyX2ludGVycnVwdChsb2NhbCk7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisJaWYgKHJjc2luZGV4IDwgTlVNQkVSX09GX0NDUykgeyAvKiBJZiBpdCdzIGEgcmV0dXJuZWQgQ0NTICovCisJCXBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKKwkJY21kID0gcmVhZGIoJnBjY3MtPmNtZCk7CisJCXN0YXR1cyA9IHJlYWRiKCZwY2NzLT5idWZmZXJfc3RhdHVzKTsKKwkJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBDQ1NfRE9XTkxPQURfU1RBUlRVUF9QQVJBTVM6CS8qIEhhcHBlbnMgaW4gZmlybXdhcmUgc29tZWRheSAqLworCQkJZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOworCQkJaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgeworCQkJCURFQlVHKDEsCisJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgZG93bmxvYWRfc3RhcnR1cF9wYXJhbWV0ZXJzIE9LXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJREVCVUcoMSwKKwkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBkb3dubG9hZF9zdGFydHVwX3BhcmFtZXRlcnMgZmFpbFxuIik7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfVVBEQVRFX1BBUkFNUzoKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwYXJhbXMgZG9uZVxuIik7CisJCQlpZiAoc3RhdHVzICE9IENDU19DT01NQU5EX0NPTVBMRVRFKSB7CisJCQkJdG1wID0KKwkJCQkgICAgcmVhZGIoJnBjY3MtPnZhci51cGRhdGVfcGFyYW0uCisJCQkJCSAgZmFpbHVyZV9jYXVzZSk7CisJCQkJREVCVUcoMCwKKwkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCB1cGRhdGUgcGFyYW1zIGZhaWxlZCAtIHJlYXNvbiAlZFxuIiwKKwkJCQkgICAgICB0bXApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1JFUE9SVF9QQVJBTVM6CisJCQlERUJVRygxLCAicmF5X2NzIGludGVycnVwdCByZXBvcnQgcGFyYW1zIGRvbmVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1VQREFURV9NVUxUSUNBU1RfTElTVDoJLyogTm90ZSB0aGF0IHRoaXMgQ0NTIGlzbid0IHJldHVybmVkICovCisJCQlERUJVRygxLAorCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgQ0NTIFVwZGF0ZSBNdWx0aWNhc3QgTGlzdCBkb25lXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIENDU19VUERBVEVfUE9XRVJfU0FWSU5HU19NT0RFOgorCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IHVwZGF0ZSBwb3dlciBzYXZlIG1vZGUgZG9uZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfU1RBUlRfTkVUV09SSzoKKwkJY2FzZSBDQ1NfSk9JTl9ORVRXT1JLOgorCQkJaWYgKHN0YXR1cyA9PSBDQ1NfQ09NTUFORF9DT01QTEVURSkgeworCQkJCWlmIChyZWFkYgorCQkJCSAgICAoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLm5ldF9pbml0aWF0ZWQpID09CisJCQkJICAgIDEpIHsKKwkJCQkJREVCVUcoMCwKKwkJCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgbmV0d29yayBcIiVzXCIgc3RhcnRlZFxuIiwKKwkJCQkJICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOworCQkJCX0gZWxzZSB7CisJCQkJCURFQlVHKDAsCisJCQkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIGpvaW5lZFxuIiwKKwkJCQkJICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOworCQkJCX0KKwkJCQltZW1jcHlfZnJvbWlvKCZsb2NhbC0+YnNzX2lkLAorCQkJCQkgICAgICBwY2NzLT52YXIuc3RhcnRfbmV0d29yay5ic3NpZCwKKwkJCQkJICAgICAgQUREUkxFTik7CiAKLSAgICAgICAgICAgICAgICBpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KSBsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IDM7Ci0gICAgICAgICAgICAgICAgZWxzZSBsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRiKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay5uZXRfZGVmYXVsdF90eF9yYXRlKTsKLSAgICAgICAgICAgICAgICBsb2NhbC0+ZW5jcnlwdGlvbiA9IHJlYWRiKCZwY2NzLT52YXIuc3RhcnRfbmV0d29yay5lbmNyeXB0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNuaWZmZXIgJiYgKGxvY2FsLT5uZXRfdHlwZSA9PSBJTkZSQSkKLSAgICAgICAgICAgICAgICAgICAgJiYgIShsb2NhbC0+c3Bhcm0uYjQuYV9hY3RpbmdfYXNfYXBfc3RhdHVzKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGUobG9jYWwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9DT01QTEVURTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0ZBSUxFRDsKKwkJCQlpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KQorCQkJCQlsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9IDM7CisJCQkJZWxzZQorCQkJCQlsb2NhbC0+bmV0X2RlZmF1bHRfdHhfcmF0ZSA9CisJCQkJCSAgICByZWFkYigmcGNjcy0+dmFyLnN0YXJ0X25ldHdvcmsuCisJCQkJCQkgIG5ldF9kZWZhdWx0X3R4X3JhdGUpOworCQkJCWxvY2FsLT5lbmNyeXB0aW9uID0KKwkJCQkgICAgcmVhZGIoJnBjY3MtPnZhci5zdGFydF9uZXR3b3JrLmVuY3J5cHRpb24pOworCQkJCWlmICghc25pZmZlciAmJiAobG9jYWwtPm5ldF90eXBlID09IElORlJBKQorCQkJCSAgICAmJiAhKGxvY2FsLT5zcGFybS5iNC5hX2FjdGluZ19hc19hcF9zdGF0dXMpKSB7CisJCQkJCWF1dGhlbnRpY2F0ZShsb2NhbCk7CisJCQkJfQorCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQUNRX0NPTVBMRVRFOworCQkJfSBlbHNlIHsKKwkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9GQUlMRUQ7CiAKLSAgICAgICAgICAgICAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFoqNTsKLSAgICAgICAgICAgICAgICBsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOwotICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NTX1NUQVJUX05FVFdPUkspIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBzdGFydCBmYWlsZWRcbiIsXAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbC0+c3Bhcm0uYjQuYV9jdXJyZW50X2Vzc19pZCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZzdGFydF9uZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW50ZXJydXB0IG5ldHdvcmsgXCIlc1wiIGpvaW4gZmFpbGVkXG4iLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19TVEFSVF9BU1NPQ0lBVElPTjoKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0NPTVBMRVRFOwotICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBhc3NvY2lhdGlvbiBzdWNjZXNzZnVsXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgYXNzb2NpYXRpb24gZmFpbGVkLFxuIik7Ci0gICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19GQUlMRUQ7Ci0gICAgICAgICAgICAgICAgam9pbl9uZXQoKHVfbG9uZylsb2NhbCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfVFhfUkVRVUVTVDoKLSAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKLSAgICAgICAgICAgICAgICBERUJVRygzLCJyYXlfY3MgaW50ZXJydXB0IHR4IHJlcXVlc3QgY29tcGxldGVcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCB0eCByZXF1ZXN0IGZhaWxlZFxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNuaWZmZXIpIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0gICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfVEVTVF9NRU1PUlk6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IG1lbSB0ZXN0IGRvbmVcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ0NTX1NIVVRET1dOOgotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBVbmV4cGVjdGVkIENDUyByZXR1cm5lZCAtIFNodXRkb3duXG4iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENDU19EVU1QX01FTU9SWToKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgZHVtcCBtZW1vcnkgZG9uZVxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDQ1NfU1RBUlRfVElNRVI6Ci0gICAgICAgICAgICBERUJVRygyLCJyYXlfY3MgaW50ZXJydXB0IERJTkcgLSByYXlsaW5rIHRpbWVyIGV4cGlyZWRcbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IFVuZXhwZWN0ZWQgQ0NTIDB4JXggcmV0dXJuZWQgMHgleFxuIixcCi0gICAgICAgICAgICAgICAgICByY3NpbmRleCwgY21kKTsKLSAgICAgICAgfQotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcGNjcy0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgfQotICAgIGVsc2UgLyogSXQncyBhbiBSQ1MgKi8KLSAgICB7Ci0gICAgICAgIHByY3MgPSByY3NfYmFzZShsb2NhbCkgKyByY3NpbmRleDsKLSAgICAKLSAgICAgICAgc3dpdGNoIChyZWFkYigmcHJjcy0+aW50ZXJydXB0X2lkKSkKLSAgICAgICAgewotICAgICAgICBjYXNlIFBST0NFU1NfUlhfUEFDS0VUOgotICAgICAgICAgICAgcmF5X3J4KGRldiwgbG9jYWwsIHByY3MpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUkVKT0lOX05FVF9DT01QTEVURToKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBpbnRlcnJ1cHQgcmVqb2luIG5ldCBjb21wbGV0ZVxuIik7Ci0gICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FDUV9DT01QTEVURTsKLSAgICAgICAgICAgIC8qIGRvIHdlIG5lZWQgdG8gY2xlYXIgdHggYnVmZmVycyBDQ1Mncz8gKi8KLSAgICAgICAgICAgIGlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNuaWZmZXIpIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBtZW1jcHlfZnJvbWlvKCZsb2NhbC0+YnNzX2lkLCBwcmNzLT52YXIucmVqb2luX25ldF9jb21wbGV0ZS5ic3NpZCwgQUREUkxFTik7Ci0gICAgICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIG5ldyBCU1NJRCA9ICUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIixcCi0gICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmJzc19pZFswXSwgbG9jYWwtPmJzc19pZFsxXSwgbG9jYWwtPmJzc19pZFsyXSxcCi0gICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmJzc19pZFszXSwgbG9jYWwtPmJzc19pZFs0XSwgbG9jYWwtPmJzc19pZFs1XSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzbmlmZmVyKSBhdXRoZW50aWNhdGUobG9jYWwpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUk9BTUlOR19JTklUSUFURUQ6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IHJvYW1pbmcgaW5pdGlhdGVkXG4iKTsgCi0gICAgICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0RPSU5HX0FDUTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEpBUEFOX0NBTExfU0lHTl9SWEQ6Ci0gICAgICAgICAgICBERUJVRygxLCJyYXlfY3MgaW50ZXJydXB0IGphcGFuIGNhbGwgc2lnbiByeFxuIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERFQlVHKDEsInJheV9jcyBVbmV4cGVjdGVkIGludGVycnVwdCBmb3IgUkNTIDB4JXggY21kID0gMHgleFxuIixcCi0gICAgICAgICAgICAgICAgICByY3NpbmRleCwgKHVuc2lnbmVkIGludCkgcmVhZGIoJnByY3MtPmludGVycnVwdF9pZCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3MtPmJ1ZmZlcl9zdGF0dXMpOwotICAgIH0KLSAgICBjbGVhcl9pbnRlcnJ1cHQobG9jYWwpOwotICAgIHJldHVybiBJUlFfSEFORExFRDsKKwkJCQlkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7CisJCQkJbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogKiA1OworCQkJCWxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7CisJCQkJaWYgKHN0YXR1cyA9PSBDQ1NfU1RBUlRfTkVUV09SSykgeworCQkJCQlERUJVRygwLAorCQkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBzdGFydCBmYWlsZWRcbiIsCisJCQkJCSAgICAgIGxvY2FsLT5zcGFybS5iNC5hX2N1cnJlbnRfZXNzX2lkKTsKKwkJCQkJbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJnN0YXJ0X25ldDsKKwkJCQl9IGVsc2UgeworCQkJCQlERUJVRygwLAorCQkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBuZXR3b3JrIFwiJXNcIiBqb2luIGZhaWxlZFxuIiwKKwkJCQkJICAgICAgbG9jYWwtPnNwYXJtLmI0LmFfY3VycmVudF9lc3NfaWQpOworCQkJCQlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7CisJCQkJfQorCQkJCWFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIENDU19TVEFSVF9BU1NPQ0lBVElPTjoKKwkJCWlmIChzdGF0dXMgPT0gQ0NTX0NPTU1BTkRfQ09NUExFVEUpIHsKKwkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0NPTVBMRVRFOworCQkJCURFQlVHKDAsICJyYXlfY3MgYXNzb2NpYXRpb24gc3VjY2Vzc2Z1bFxuIik7CisJCQl9IGVsc2UgeworCQkJCURFQlVHKDAsICJyYXlfY3MgYXNzb2NpYXRpb24gZmFpbGVkLFxuIik7CisJCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19GQUlMRUQ7CisJCQkJam9pbl9uZXQoKHVfbG9uZykgbG9jYWwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1RYX1JFUVVFU1Q6CisJCQlpZiAoc3RhdHVzID09IENDU19DT01NQU5EX0NPTVBMRVRFKSB7CisJCQkJREVCVUcoMywKKwkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCB0eCByZXF1ZXN0IGNvbXBsZXRlXG4iKTsKKwkJCX0gZWxzZSB7CisJCQkJREVCVUcoMSwKKwkJCQkgICAgICAicmF5X2NzIGludGVycnVwdCB0eCByZXF1ZXN0IGZhaWxlZFxuIik7CisJCQl9CisJCQlpZiAoIXNuaWZmZXIpCisJCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwkJCWJyZWFrOworCQljYXNlIENDU19URVNUX01FTU9SWToKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IG1lbSB0ZXN0IGRvbmVcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX1NIVVRET1dOOgorCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfY3MgaW50ZXJydXB0IFVuZXhwZWN0ZWQgQ0NTIHJldHVybmVkIC0gU2h1dGRvd25cbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NTX0RVTVBfTUVNT1JZOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgZHVtcCBtZW1vcnkgZG9uZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBDQ1NfU1RBUlRfVElNRVI6CisJCQlERUJVRygyLAorCQkJICAgICAgInJheV9jcyBpbnRlcnJ1cHQgRElORyAtIHJheWxpbmsgdGltZXIgZXhwaXJlZFxuIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCURFQlVHKDEsCisJCQkgICAgICAicmF5X2NzIGludGVycnVwdCBVbmV4cGVjdGVkIENDUyAweCV4IHJldHVybmVkIDB4JXhcbiIsCisJCQkgICAgICByY3NpbmRleCwgY21kKTsKKwkJfQorCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcGNjcy0+YnVmZmVyX3N0YXR1cyk7CisJfSBlbHNlIHsgLyogSXQncyBhbiBSQ1MgKi8KKworCQlwcmNzID0gcmNzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7CisKKwkJc3dpdGNoIChyZWFkYigmcHJjcy0+aW50ZXJydXB0X2lkKSkgeworCQljYXNlIFBST0NFU1NfUlhfUEFDS0VUOgorCQkJcmF5X3J4KGRldiwgbG9jYWwsIHByY3MpOworCQkJYnJlYWs7CisJCWNhc2UgUkVKT0lOX05FVF9DT01QTEVURToKKwkJCURFQlVHKDEsICJyYXlfY3MgaW50ZXJydXB0IHJlam9pbiBuZXQgY29tcGxldGVcbiIpOworCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BQ1FfQ09NUExFVEU7CisJCQkvKiBkbyB3ZSBuZWVkIHRvIGNsZWFyIHR4IGJ1ZmZlcnMgQ0NTJ3M/ICovCisJCQlpZiAobG9jYWwtPnNwYXJtLmI0LmFfbmV0d29ya190eXBlID09IEFESE9DKSB7CisJCQkJaWYgKCFzbmlmZmVyKQorCQkJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCQkJfSBlbHNlIHsKKwkJCQltZW1jcHlfZnJvbWlvKCZsb2NhbC0+YnNzX2lkLAorCQkJCQkgICAgICBwcmNzLT52YXIucmVqb2luX25ldF9jb21wbGV0ZS4KKwkJCQkJICAgICAgYnNzaWQsIEFERFJMRU4pOworCQkJCURFQlVHKDEsCisJCQkJICAgICAgInJheV9jcyBuZXcgQlNTSUQgPSAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkJICAgICAgbG9jYWwtPmJzc19pZFswXSwgbG9jYWwtPmJzc19pZFsxXSwKKwkJCQkgICAgICBsb2NhbC0+YnNzX2lkWzJdLCBsb2NhbC0+YnNzX2lkWzNdLAorCQkJCSAgICAgIGxvY2FsLT5ic3NfaWRbNF0sIGxvY2FsLT5ic3NfaWRbNV0pOworCQkJCWlmICghc25pZmZlcikKKwkJCQkJYXV0aGVudGljYXRlKGxvY2FsKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFJPQU1JTkdfSU5JVElBVEVEOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgcm9hbWluZyBpbml0aWF0ZWRcbiIpOworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9ET0lOR19BQ1E7CisJCQlicmVhazsKKwkJY2FzZSBKQVBBTl9DQUxMX1NJR05fUlhEOgorCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgamFwYW4gY2FsbCBzaWduIHJ4XG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJREVCVUcoMSwKKwkJCSAgICAgICJyYXlfY3MgVW5leHBlY3RlZCBpbnRlcnJ1cHQgZm9yIFJDUyAweCV4IGNtZCA9IDB4JXhcbiIsCisJCQkgICAgICByY3NpbmRleCwKKwkJCSAgICAgICh1bnNpZ25lZCBpbnQpcmVhZGIoJnByY3MtPmludGVycnVwdF9pZCkpOworCQkJYnJlYWs7CisJCX0KKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJnByY3MtPmJ1ZmZlcl9zdGF0dXMpOworCX0KKwljbGVhcl9pbnRlcnJ1cHQobG9jYWwpOworCXJldHVybiBJUlFfSEFORExFRDsKIH0gLyogcmF5X2ludGVycnVwdCAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByYXlfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgcmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzKQorc3RhdGljIHZvaWQgcmF5X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHJheV9kZXZfdCAqbG9jYWwsCisJCSAgIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcykKIHsKLSAgICBpbnQgcnhfbGVuOwotICAgIHVuc2lnbmVkIGludCBwa3RfYWRkcjsKLSAgICB2b2lkIF9faW9tZW0gKnBtc2c7Ci0gICAgREVCVUcoNCwicmF5X3J4IHByb2Nlc3MgcnggcGFja2V0XG4iKTsKKwlpbnQgcnhfbGVuOworCXVuc2lnbmVkIGludCBwa3RfYWRkcjsKKwl2b2lkIF9faW9tZW0gKnBtc2c7CisJREVCVUcoNCwgInJheV9yeCBwcm9jZXNzIHJ4IHBhY2tldFxuIik7CiAKLSAgICAvKiBDYWxjdWxhdGUgYWRkcmVzcyBvZiBwYWNrZXQgd2l0aGluIFJ4IGJ1ZmZlciAqLwotICAgIHBrdF9hZGRyID0gKChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clswXSkgPDwgOCkKLSAgICAgICAgICAgICAgICArIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzFdKSkgJiBSWF9CVUZGX0VORDsKLSAgICAvKiBMZW5ndGggb2YgZmlyc3QgcGFja2V0IGZyYWdtZW50ICovCi0gICAgcnhfbGVuID0gKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzBdKSA8PCA4KQotICAgICAgICArIHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKTsKKwkvKiBDYWxjdWxhdGUgYWRkcmVzcyBvZiBwYWNrZXQgd2l0aGluIFJ4IGJ1ZmZlciAqLworCXBrdF9hZGRyID0gKChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX3B0clswXSkgPDwgOCkKKwkJICAgICsgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMV0pKSAmIFJYX0JVRkZfRU5EOworCS8qIExlbmd0aCBvZiBmaXJzdCBwYWNrZXQgZnJhZ21lbnQgKi8KKwlyeF9sZW4gPSAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pIDw8IDgpCisJICAgICsgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMV0pOwogCi0gICAgbG9jYWwtPmxhc3RfcnNsID0gcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfc2lnX2xldik7Ci0gICAgcG1zZyA9IGxvY2FsLT5ybWVtICsgcGt0X2FkZHI7Ci0gICAgc3dpdGNoKHJlYWRiKHBtc2cpKQotICAgIHsKLSAgICBjYXNlIERBVEFfVFlQRToKLSAgICAgICAgREVCVUcoNCwicmF5X3J4IGRhdGEgdHlwZVxuIik7Ci0gICAgICAgIHJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBVVRIRU5USUNfVFlQRToKLSAgICAgICAgREVCVUcoNCwicmF5X3J4IGF1dGhlbnRpYyB0eXBlXG4iKTsKLSAgICAgICAgaWYgKHNuaWZmZXIpIHJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKLSAgICAgICAgZWxzZSByeF9hdXRoZW50aWNhdGUobG9jYWwsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERFQVVUSEVOVElDX1RZUEU6Ci0gICAgICAgIERFQlVHKDQsInJheV9yeCBkZWF1dGggdHlwZVxuIik7Ci0gICAgICAgIGlmIChzbmlmZmVyKSByeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7Ci0gICAgICAgIGVsc2UgcnhfZGVhdXRoZW50aWNhdGUobG9jYWwsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE5VTExfTVNHX1RZUEU6Ci0gICAgICAgIERFQlVHKDMsInJheV9jcyByeCBOVUxMIG1zZ1xuIik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQkVBQ09OX1RZUEU6Ci0gICAgICAgIERFQlVHKDQsInJheV9yeCBiZWFjb24gdHlwZVxuIik7Ci0gICAgICAgIGlmIChzbmlmZmVyKSByeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CisJbG9jYWwtPmxhc3RfcnNsID0gcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQucnhfc2lnX2xldik7CisJcG1zZyA9IGxvY2FsLT5ybWVtICsgcGt0X2FkZHI7CisJc3dpdGNoIChyZWFkYihwbXNnKSkgeworCWNhc2UgREFUQV9UWVBFOgorCQlERUJVRyg0LCAicmF5X3J4IGRhdGEgdHlwZVxuIik7CisJCXJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJYnJlYWs7CisJY2FzZSBBVVRIRU5USUNfVFlQRToKKwkJREVCVUcoNCwgInJheV9yeCBhdXRoZW50aWMgdHlwZVxuIik7CisJCWlmIChzbmlmZmVyKQorCQkJcnhfZGF0YShkZXYsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCQllbHNlCisJCQlyeF9hdXRoZW50aWNhdGUobG9jYWwsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCQlicmVhazsKKwljYXNlIERFQVVUSEVOVElDX1RZUEU6CisJCURFQlVHKDQsICJyYXlfcnggZGVhdXRoIHR5cGVcbiIpOworCQlpZiAoc25pZmZlcikKKwkJCXJ4X2RhdGEoZGV2LCBwcmNzLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJZWxzZQorCQkJcnhfZGVhdXRoZW50aWNhdGUobG9jYWwsIHByY3MsIHBrdF9hZGRyLCByeF9sZW4pOworCQlicmVhazsKKwljYXNlIE5VTExfTVNHX1RZUEU6CisJCURFQlVHKDMsICJyYXlfY3MgcnggTlVMTCBtc2dcbiIpOworCQlicmVhazsKKwljYXNlIEJFQUNPTl9UWVBFOgorCQlERUJVRyg0LCAicmF5X3J4IGJlYWNvbiB0eXBlXG4iKTsKKwkJaWYgKHNuaWZmZXIpCisJCQlyeF9kYXRhKGRldiwgcHJjcywgcGt0X2FkZHIsIHJ4X2xlbik7CiAKLSAgICAgICAgY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIChVQ0hBUiAqKSZsb2NhbC0+bGFzdF9iY24sIHBrdF9hZGRyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcnhfbGVuIDwgc2l6ZW9mKHN0cnVjdCBiZWFjb25fcngpID8gCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJ4X2xlbiA6IHNpemVvZihzdHJ1Y3QgYmVhY29uX3J4KSk7CisJCWNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCAoVUNIQVIgKikgJmxvY2FsLT5sYXN0X2JjbiwgcGt0X2FkZHIsCisJCQkJICByeF9sZW4gPCBzaXplb2Yoc3RydWN0IGJlYWNvbl9yeCkgPworCQkJCSAgcnhfbGVuIDogc2l6ZW9mKHN0cnVjdCBiZWFjb25fcngpKTsKIAotCWxvY2FsLT5iZWFjb25fcnhlZCA9IDE7Ci0gICAgICAgIC8qIEdldCB0aGUgc3RhdGlzdGljcyBzbyB0aGUgY2FyZCBjb3VudGVycyBuZXZlciBvdmVyZmxvdyAqLwotICAgICAgICByYXlfZ2V0X3N0YXRzKGRldik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBERUJVRygwLCJyYXlfY3MgdW5rbm93biBwa3QgdHlwZSAlMnhcbiIsICh1bnNpZ25lZCBpbnQpIHJlYWRiKHBtc2cpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorCQlsb2NhbC0+YmVhY29uX3J4ZWQgPSAxOworCQkvKiBHZXQgdGhlIHN0YXRpc3RpY3Mgc28gdGhlIGNhcmQgY291bnRlcnMgbmV2ZXIgb3ZlcmZsb3cgKi8KKwkJcmF5X2dldF9zdGF0cyhkZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJVRygwLCAicmF5X2NzIHVua25vd24gcGt0IHR5cGUgJTJ4XG4iLAorCQkgICAgICAodW5zaWduZWQgaW50KXJlYWRiKHBtc2cpKTsKKwkJYnJlYWs7CisJfQogCiB9IC8qIGVuZCByYXlfcnggKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcnhfZGF0YShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3MsIHVuc2lnbmVkIGludCBwa3RfYWRkciwgCi0gICAgICAgICAgICAgaW50IHJ4X2xlbikKK3N0YXRpYyB2b2lkIHJ4X2RhdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAorCQkgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKQogewotICAgIHN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwotICAgIHN0cnVjdCByY3MgX19pb21lbSAqcHJjc2xpbmsgPSBwcmNzOwotICAgIHJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIFVDSEFSICpyeF9wdHI7Ci0gICAgaW50IHRvdGFsX2xlbjsKLSAgICBpbnQgdG1wOworCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXN0cnVjdCByY3MgX19pb21lbSAqcHJjc2xpbmsgPSBwcmNzOworCXJheV9kZXZfdCAqbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOworCVVDSEFSICpyeF9wdHI7CisJaW50IHRvdGFsX2xlbjsKKwlpbnQgdG1wOwogI2lmZGVmIFdJUkVMRVNTX1NQWQotICAgIGludCBzaWdsZXYgPSBsb2NhbC0+bGFzdF9yc2w7Ci0gICAgdV9jaGFyIGxpbmtzcmNhZGRyW0VUSF9BTEVOXTsJLyogT3RoZXIgZW5kIG9mIHRoZSB3aXJlbGVzcyBsaW5rICovCisJaW50IHNpZ2xldiA9IGxvY2FsLT5sYXN0X3JzbDsKKwl1X2NoYXIgbGlua3NyY2FkZHJbRVRIX0FMRU5dOwkvKiBPdGhlciBlbmQgb2YgdGhlIHdpcmVsZXNzIGxpbmsgKi8KICNlbmRpZgogCi0gICAgaWYgKCFzbmlmZmVyKSB7Ci0gICAgICAgIGlmICh0cmFuc2xhdGUpIHsKKwlpZiAoIXNuaWZmZXIpIHsKKwkJaWYgKHRyYW5zbGF0ZSkgewogLyogVEJEIGxlbmd0aCBuZWVkcyBmaXhpbmcgZm9yIHRyYW5zbGF0ZWQgaGVhZGVyICovCi0gICAgICAgICAgICBpZiAocnhfbGVuIDwgKEVUSF9ITEVOICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpIHx8Ci0gICAgICAgICAgICAgICAgcnhfbGVuID4gKGRldi0+bXR1ICsgUlhfTUFDX0hFQURFUl9MRU5HVEggKyBFVEhfSExFTiArIEZDU19MRU4pKSAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBERUJVRygwLCJyYXlfY3MgaW52YWxpZCBwYWNrZXQgbGVuZ3RoICVkIHJlY2VpdmVkIFxuIixyeF9sZW4pOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIC8qIGVuY2Fwc3VsYXRlZCBldGhlcm5ldCAqLyB7Ci0gICAgICAgICAgICBpZiAocnhfbGVuIDwgKEVUSF9ITEVOICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpIHx8Ci0gICAgICAgICAgICAgICAgcnhfbGVuID4gKGRldi0+bXR1ICsgUlhfTUFDX0hFQURFUl9MRU5HVEggKyBFVEhfSExFTiArIEZDU19MRU4pKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBpbnZhbGlkIHBhY2tldCBsZW5ndGggJWQgcmVjZWl2ZWQgXG4iLHJ4X2xlbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIERFQlVHKDQsInJheV9jcyByeF9kYXRhIHBhY2tldFxuIik7Ci0gICAgLyogSWYgZnJhZ21lbnRlZCBwYWNrZXQsIHZlcmlmeSBzaXplcyBvZiBmcmFnbWVudHMgYWRkIHVwICovCi0gICAgaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpIHsKLSAgICAgICAgREVCVUcoMSwicmF5X2NzIHJ4J2VkIGZyYWdtZW50XG4iKTsKLSAgICAgICAgdG1wID0gKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0LnRvdGFscGFja2V0bGVuZ3RoWzBdKSA8PCA4KQotICAgICAgICAgICAgKyAgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQudG90YWxwYWNrZXRsZW5ndGhbMV0pOwotICAgICAgICB0b3RhbF9sZW4gPSB0bXA7Ci0gICAgICAgIHByY3NsaW5rID0gcHJjczsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgdG1wIC09IChyZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9sZW5ndGhbMF0pIDw8IDgpCi0gICAgICAgICAgICAgICAgKyAgIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSk7Ci0gICAgICAgICAgICBpZiAocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpID09IDB4RkYKLSAgICAgICAgICAgICAgICB8fCB0bXAgPCAwKSBicmVhazsKLSAgICAgICAgICAgIHByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpCi0gICAgICAgICAgICAgICAgKyByZWFkYigmcHJjc2xpbmstPmxpbmtfZmllbGQpOwotICAgICAgICB9IHdoaWxlICgxKTsKKwkJCWlmIChyeF9sZW4gPCAoRVRIX0hMRU4gKyBSWF9NQUNfSEVBREVSX0xFTkdUSCkgfHwKKwkJCSAgICByeF9sZW4gPgorCQkJICAgIChkZXYtPm10dSArIFJYX01BQ19IRUFERVJfTEVOR1RIICsgRVRIX0hMRU4gKworCQkJICAgICBGQ1NfTEVOKSkgeworCQkJCURFQlVHKDAsCisJCQkJICAgICAgInJheV9jcyBpbnZhbGlkIHBhY2tldCBsZW5ndGggJWQgcmVjZWl2ZWQgXG4iLAorCQkJCSAgICAgIHJ4X2xlbik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeyAvKiBlbmNhcHN1bGF0ZWQgZXRoZXJuZXQgKi8KIAotICAgICAgICBpZiAodG1wIDwgMCkKLSAgICAgICAgewotICAgICAgICAgICAgREVCVUcoMCwicmF5X2NzIHJ4X2RhdGEgZnJhZ21lbnQgbGVuZ3RocyBkb24ndCBhZGQgdXBcbiIpOwotICAgICAgICAgICAgbG9jYWwtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsgCi0gICAgICAgICAgICByZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgeyAvKiBTaW5nbGUgdW5mcmFnbWVudGVkIHBhY2tldCAqLwotICAgICAgICB0b3RhbF9sZW4gPSByeF9sZW47Ci0gICAgfQorCQkJaWYgKHJ4X2xlbiA8IChFVEhfSExFTiArIFJYX01BQ19IRUFERVJfTEVOR1RIKSB8fAorCQkJICAgIHJ4X2xlbiA+CisJCQkgICAgKGRldi0+bXR1ICsgUlhfTUFDX0hFQURFUl9MRU5HVEggKyBFVEhfSExFTiArCisJCQkgICAgIEZDU19MRU4pKSB7CisJCQkJREVCVUcoMCwKKwkJCQkgICAgICAicmF5X2NzIGludmFsaWQgcGFja2V0IGxlbmd0aCAlZCByZWNlaXZlZCBcbiIsCisJCQkJICAgICAgcnhfbGVuKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisJREVCVUcoNCwgInJheV9jcyByeF9kYXRhIHBhY2tldFxuIik7CisJLyogSWYgZnJhZ21lbnRlZCBwYWNrZXQsIHZlcmlmeSBzaXplcyBvZiBmcmFnbWVudHMgYWRkIHVwICovCisJaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpIHsKKwkJREVCVUcoMSwgInJheV9jcyByeCdlZCBmcmFnbWVudFxuIik7CisJCXRtcCA9IChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC50b3RhbHBhY2tldGxlbmd0aFswXSkgPDwgOCkKKwkJICAgICsgcmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQudG90YWxwYWNrZXRsZW5ndGhbMV0pOworCQl0b3RhbF9sZW4gPSB0bXA7CisJCXByY3NsaW5rID0gcHJjczsKKwkJZG8geworCQkJdG1wIC09CisJCQkgICAgKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkKKwkJCSAgICAgPDwgOCkKKwkJCSAgICArIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSk7CisJCQlpZiAocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpCisJCQkgICAgPT0gMHhGRiB8fCB0bXAgPCAwKQorCQkJCWJyZWFrOworCQkJcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkKKwkJCSAgICArIHJlYWRiKCZwcmNzbGluay0+bGlua19maWVsZCk7CisJCX0gd2hpbGUgKDEpOwogCi0gICAgc2tiID0gZGV2X2FsbG9jX3NrYiggdG90YWxfbGVuKzUgKTsKLSAgICBpZiAoc2tiID09IE5VTEwpCi0gICAgewotICAgICAgICBERUJVRygwLCJyYXlfY3MgcnhfZGF0YSBjb3VsZCBub3QgYWxsb2NhdGUgc2tiXG4iKTsKLSAgICAgICAgbG9jYWwtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsgCi0gICAgICAgIGlmIChyZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPSAweEZGKQotICAgICAgICAgICAgcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBza2JfcmVzZXJ2ZSggc2tiLCAyKTsgICAvKiBBbGlnbiBJUCBvbiAxNiBieXRlIChUQkQgY2hlY2sgdGhpcykqLworCQlpZiAodG1wIDwgMCkgeworCQkJREVCVUcoMCwKKwkJCSAgICAgICJyYXlfY3MgcnhfZGF0YSBmcmFnbWVudCBsZW5ndGhzIGRvbid0IGFkZCB1cFxuIik7CisJCQlsb2NhbC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQkJcmVsZWFzZV9mcmFnX2NoYWluKGxvY2FsLCBwcmNzKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7IC8qIFNpbmdsZSB1bmZyYWdtZW50ZWQgcGFja2V0ICovCisJCXRvdGFsX2xlbiA9IHJ4X2xlbjsKKwl9CiAKLSAgICBERUJVRyg0LCJyYXlfY3MgcnhfZGF0YSB0b3RhbF9sZW4gPSAleCwgcnhfbGVuID0gJXhcbiIsdG90YWxfbGVuLHJ4X2xlbik7CisJc2tiID0gZGV2X2FsbG9jX3NrYih0b3RhbF9sZW4gKyA1KTsKKwlpZiAoc2tiID09IE5VTEwpIHsKKwkJREVCVUcoMCwgInJheV9jcyByeF9kYXRhIGNvdWxkIG5vdCBhbGxvY2F0ZSBza2JcbiIpOworCQlsb2NhbC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikKKwkJCXJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCAyKTsJLyogQWxpZ24gSVAgb24gMTYgYnl0ZSAoVEJEIGNoZWNrIHRoaXMpICovCisKKwlERUJVRyg0LCAicmF5X2NzIHJ4X2RhdGEgdG90YWxfbGVuID0gJXgsIHJ4X2xlbiA9ICV4XG4iLCB0b3RhbF9sZW4sCisJICAgICAgcnhfbGVuKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKi8KLSAgICAvKiBSZXNlcnZlIGVub3VnaCByb29tIGZvciB0aGUgd2hvbGUgZGFtbiBwYWNrZXQuICovCi0gICAgcnhfcHRyID0gc2tiX3B1dCggc2tiLCB0b3RhbF9sZW4pOwotICAgIC8qIENvcHkgdGhlIHdob2xlIHBhY2tldCB0byBza19idWZmICovCi0gICAgcnhfcHRyICs9IGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCByeF9wdHIsIHBrdF9hZGRyICYgUlhfQlVGRl9FTkQsIHJ4X2xlbik7Ci0gICAgLyogR2V0IHNvdXJjZSBhZGRyZXNzICovCisJLyogUmVzZXJ2ZSBlbm91Z2ggcm9vbSBmb3IgdGhlIHdob2xlIGRhbW4gcGFja2V0LiAqLworCXJ4X3B0ciA9IHNrYl9wdXQoc2tiLCB0b3RhbF9sZW4pOworCS8qIENvcHkgdGhlIHdob2xlIHBhY2tldCB0byBza19idWZmICovCisJcnhfcHRyICs9CisJICAgIGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCByeF9wdHIsIHBrdF9hZGRyICYgUlhfQlVGRl9FTkQsIHJ4X2xlbik7CisJLyogR2V0IHNvdXJjZSBhZGRyZXNzICovCiAjaWZkZWYgV0lSRUxFU1NfU1BZCi0gICAgc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLCBvZmZzZXRvZihzdHJ1Y3QgbWFjX2hlYWRlciwgYWRkcl8yKSwKLQkJCQkgICAgIGxpbmtzcmNhZGRyLCBFVEhfQUxFTik7CisJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YV9vZmZzZXQoc2tiLAorCQkJCQkgb2Zmc2V0b2Yoc3RydWN0IG1hY19oZWFkZXIsIGFkZHJfMiksCisJCQkJCSBsaW5rc3JjYWRkciwgRVRIX0FMRU4pOwogI2VuZGlmCi0gICAgLyogTm93LCBkZWFsIHdpdGggZW5jYXBzdWxhdGlvbi90cmFuc2xhdGlvbi9zbmlmZmVyICovCi0gICAgaWYgKCFzbmlmZmVyKSB7Ci0gICAgICAgIGlmICghdHJhbnNsYXRlKSB7IAotICAgICAgICAgICAgLyogRW5jYXBzdWxhdGVkIGV0aGVybmV0LCBzbyBqdXN0IGxvcCBvZmYgODAyLjExIE1BQyBoZWFkZXIgKi8KKwkvKiBOb3csIGRlYWwgd2l0aCBlbmNhcHN1bGF0aW9uL3RyYW5zbGF0aW9uL3NuaWZmZXIgKi8KKwlpZiAoIXNuaWZmZXIpIHsKKwkJaWYgKCF0cmFuc2xhdGUpIHsKKwkJCS8qIEVuY2Fwc3VsYXRlZCBldGhlcm5ldCwgc28ganVzdCBsb3Agb2ZmIDgwMi4xMSBNQUMgaGVhZGVyICovCiAvKiBUQkQgcmVzZXJ2ZSAgICAgICAgICAgIHNrYl9yZXNlcnZlKCBza2IsIFJYX01BQ19IRUFERVJfTEVOR1RIKTsgKi8KLSAgICAgICAgICAgIHNrYl9wdWxsKCBza2IsIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIERvIHRyYW5zbGF0aW9uICovCi0gICAgICAgICAgICB1bnRyYW5zbGF0ZShsb2NhbCwgc2tiLCB0b3RhbF9sZW4pOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgCi0gICAgeyAgLyogc25pZmZlciBtb2RlLCBzbyBqdXN0IHBhc3Mgd2hvbGUgcGFja2V0ICovICB9OworCQkJc2tiX3B1bGwoc2tiLCBSWF9NQUNfSEVBREVSX0xFTkdUSCk7CisJCX0gZWxzZSB7CisJCQkvKiBEbyB0cmFuc2xhdGlvbiAqLworCQkJdW50cmFuc2xhdGUobG9jYWwsIHNrYiwgdG90YWxfbGVuKTsKKwkJfQorCX0gZWxzZSB7IC8qIHNuaWZmZXIgbW9kZSwgc28ganVzdCBwYXNzIHdob2xlIHBhY2tldCAqLworCX07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgLyogTm93IHBpY2sgdXAgdGhlIHJlc3Qgb2YgdGhlIGZyYWdtZW50cyBpZiBhbnkgKi8KLSAgICB0bXAgPSAxNzsgCi0gICAgaWYgKHJlYWRiKCZwcmNzLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpICE9IDB4RkYpIHsKLSAgICAgICAgcHJjc2xpbmsgPSBwcmNzOwotICAgICAgICBERUJVRygxLCJyYXlfY3MgcnhfZGF0YSBpbiBmcmFnbWVudCBsb29wXG4iKTsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkKLSAgICAgICAgICAgICAgICArIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKLSAgICAgICAgICAgIHJ4X2xlbiA9ICgoIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkgPDwgOCkKLSAgICAgICAgICAgICAgICAgICAgICArIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFsxXSkpCi0gICAgICAgICAgICAgICAgJiBSWF9CVUZGX0VORDsKLSAgICAgICAgICAgIHBrdF9hZGRyID0gKCggcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzBdKSA8PCA4KQotICAgICAgICAgICAgICAgICAgICAgICAgKyByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMV0pKQotICAgICAgICAgICAgICAgICYgUlhfQlVGRl9FTkQ7CisJLyogTm93IHBpY2sgdXAgdGhlIHJlc3Qgb2YgdGhlIGZyYWdtZW50cyBpZiBhbnkgKi8KKwl0bXAgPSAxNzsKKwlpZiAocmVhZGIoJnByY3MtPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRikgeworCQlwcmNzbGluayA9IHByY3M7CisJCURFQlVHKDEsICJyYXlfY3MgcnhfZGF0YSBpbiBmcmFnbWVudCBsb29wXG4iKTsKKwkJZG8geworCQkJcHJjc2xpbmsgPSByY3NfYmFzZShsb2NhbCkKKwkJCSAgICArCisJCQkgICAgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOworCQkJcnhfbGVuID0KKwkJCSAgICAoKHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5yeF9kYXRhX2xlbmd0aFswXSkKKwkJCSAgICAgIDw8IDgpCisJCQkgICAgICsKKwkJCSAgICAgcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfbGVuZ3RoWzFdKSkKKwkJCSAgICAmIFJYX0JVRkZfRU5EOworCQkJcGt0X2FkZHIgPQorCQkJICAgICgocmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0LnJ4X2RhdGFfcHRyWzBdKSA8PAorCQkJICAgICAgOCkKKwkJCSAgICAgKyByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQucnhfZGF0YV9wdHJbMV0pKQorCQkJICAgICYgUlhfQlVGRl9FTkQ7CiAKLSAgICAgICAgICAgIHJ4X3B0ciArPSBjb3B5X2Zyb21fcnhfYnVmZihsb2NhbCwgcnhfcHRyLCBwa3RfYWRkciwgcnhfbGVuKTsKKwkJCXJ4X3B0ciArPQorCQkJICAgIGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCByeF9wdHIsIHBrdF9hZGRyLCByeF9sZW4pOwogCi0gICAgICAgIH0gd2hpbGUgKHRtcC0tICYmIAotICAgICAgICAgICAgICAgICByZWFkYigmcHJjc2xpbmstPnZhci5yeF9wYWNrZXQubmV4dF9mcmFnX3Jjc19pbmRleCkgIT0gMHhGRik7Ci0gICAgICAgIHJlbGVhc2VfZnJhZ19jaGFpbihsb2NhbCwgcHJjcyk7Ci0gICAgfQorCQl9IHdoaWxlICh0bXAtLSAmJgorCQkJIHJlYWRiKCZwcmNzbGluay0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KSAhPQorCQkJIDB4RkYpOworCQlyZWxlYXNlX2ZyYWdfY2hhaW4obG9jYWwsIHByY3MpOworCX0KIAotICAgIHNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsZGV2KTsKLSAgICBuZXRpZl9yeChza2IpOwotICAgIGxvY2FsLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0gICAgbG9jYWwtPnN0YXRzLnJ4X2J5dGVzICs9IHRvdGFsX2xlbjsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworCW5ldGlmX3J4KHNrYik7CisJbG9jYWwtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlsb2NhbC0+c3RhdHMucnhfYnl0ZXMgKz0gdG90YWxfbGVuOwogCi0gICAgLyogR2F0aGVyIHNpZ25hbCBzdHJlbmd0aCBwZXIgYWRkcmVzcyAqLworCS8qIEdhdGhlciBzaWduYWwgc3RyZW5ndGggcGVyIGFkZHJlc3MgKi8KICNpZmRlZiBXSVJFTEVTU19TUFkKLSAgICAvKiBGb3IgdGhlIEFjY2VzcyBQb2ludCBvciB0aGUgbm9kZSBoYXZpbmcgc3RhcnRlZCB0aGUgYWQtaG9jIG5ldAotICAgICAqIG5vdGUgOiBhZC1ob2Mgd29yayBvbmx5IGluIHNvbWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGJ1dCB3ZQotICAgICAqIGtsdWRnZSBpbiByYXlfZ2V0X3dpcmVsZXNzX3N0YXRzLi4uICovCi0gICAgaWYoIW1lbWNtcChsaW5rc3JjYWRkciwgbG9jYWwtPmJzc19pZCwgRVRIX0FMRU4pKQotICAgICAgewotCS8qIFVwZGF0ZSBzdGF0aXN0aWNzICovCi0JLypsb2NhbC0+d3N0YXRzLnF1YWwucXVhbCA9IG5vbmUgPyAqLwotCWxvY2FsLT53c3RhdHMucXVhbC5sZXZlbCA9IHNpZ2xldjsKLQkvKmxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IG5vbmUgPyAqLwotCWxvY2FsLT53c3RhdHMucXVhbC51cGRhdGVkID0gMHgyOwotICAgICAgfQotICAgIC8qIE5vdywgdXBkYXRlIHRoZSBzcHkgc3R1ZmYgKi8KLSAgICB7Ci0Jc3RydWN0IGl3X3F1YWxpdHkgd3N0YXRzOwotCXdzdGF0cy5sZXZlbCA9IHNpZ2xldjsKLQkvKiB3c3RhdHMubm9pc2UgPSBub25lID8gKi8KLQkvKiB3c3RhdHMucXVhbCA9IG5vbmUgPyAqLwotCXdzdGF0cy51cGRhdGVkID0gMHgyOwotCS8qIFVwZGF0ZSBzcHkgcmVjb3JkcyAqLwotCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBsaW5rc3JjYWRkciwgJndzdGF0cyk7Ci0gICAgfQotI2VuZGlmCS8qIFdJUkVMRVNTX1NQWSAqLworCS8qIEZvciB0aGUgQWNjZXNzIFBvaW50IG9yIHRoZSBub2RlIGhhdmluZyBzdGFydGVkIHRoZSBhZC1ob2MgbmV0CisJICogbm90ZSA6IGFkLWhvYyB3b3JrIG9ubHkgaW4gc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgYnV0IHdlCisJICoga2x1ZGdlIGluIHJheV9nZXRfd2lyZWxlc3Nfc3RhdHMuLi4gKi8KKwlpZiAoIW1lbWNtcChsaW5rc3JjYWRkciwgbG9jYWwtPmJzc19pZCwgRVRIX0FMRU4pKSB7CisJCS8qIFVwZGF0ZSBzdGF0aXN0aWNzICovCisJCS8qbG9jYWwtPndzdGF0cy5xdWFsLnF1YWwgPSBub25lID8gKi8KKwkJbG9jYWwtPndzdGF0cy5xdWFsLmxldmVsID0gc2lnbGV2OworCQkvKmxvY2FsLT53c3RhdHMucXVhbC5ub2lzZSA9IG5vbmUgPyAqLworCQlsb2NhbC0+d3N0YXRzLnF1YWwudXBkYXRlZCA9IDB4MjsKKwl9CisJLyogTm93LCB1cGRhdGUgdGhlIHNweSBzdHVmZiAqLworCXsKKwkJc3RydWN0IGl3X3F1YWxpdHkgd3N0YXRzOworCQl3c3RhdHMubGV2ZWwgPSBzaWdsZXY7CisJCS8qIHdzdGF0cy5ub2lzZSA9IG5vbmUgPyAqLworCQkvKiB3c3RhdHMucXVhbCA9IG5vbmUgPyAqLworCQl3c3RhdHMudXBkYXRlZCA9IDB4MjsKKwkJLyogVXBkYXRlIHNweSByZWNvcmRzICovCisJCXdpcmVsZXNzX3NweV91cGRhdGUoZGV2LCBsaW5rc3JjYWRkciwgJndzdGF0cyk7CisJfQorI2VuZGlmIC8qIFdJUkVMRVNTX1NQWSAqLwogfSAvKiBlbmQgcnhfZGF0YSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCB1bnRyYW5zbGF0ZShyYXlfZGV2X3QgKmxvY2FsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQogewotICAgIHNuYXBoZHJfdCAqcHNuYXAgPSAoc25hcGhkcl90ICopKHNrYi0+ZGF0YSArIFJYX01BQ19IRUFERVJfTEVOR1RIKTsKLSAgICBzdHJ1Y3QgaWVlZTgwMjExX2hkciAqcG1hYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKLSAgICBfX2JlMTYgdHlwZSA9ICooX19iZTE2ICopcHNuYXAtPmV0aGVydHlwZTsKLSAgICBpbnQgZGVsdGE7Ci0gICAgc3RydWN0IGV0aGhkciAqcGV0aDsKLSAgICBVQ0hBUiBzcmNhZGRyW0FERFJMRU5dOwotICAgIFVDSEFSIGRlc3RhZGRyW0FERFJMRU5dOwotICAgIHN0YXRpYyBVQ0hBUiBvcmdfYnJpZGdlWzNdID0gezAsIDAsIDB4Zjh9OwotICAgIHN0YXRpYyBVQ0hBUiBvcmdfMTA0MlszXSA9IHswLCAwLCAwfTsKKwlzbmFwaGRyX3QgKnBzbmFwID0gKHNuYXBoZHJfdCAqKSAoc2tiLT5kYXRhICsgUlhfTUFDX0hFQURFUl9MRU5HVEgpOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpwbWFjID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCV9fYmUxNiB0eXBlID0gKihfX2JlMTYgKikgcHNuYXAtPmV0aGVydHlwZTsKKwlpbnQgZGVsdGE7CisJc3RydWN0IGV0aGhkciAqcGV0aDsKKwlVQ0hBUiBzcmNhZGRyW0FERFJMRU5dOworCVVDSEFSIGRlc3RhZGRyW0FERFJMRU5dOworCXN0YXRpYyBVQ0hBUiBvcmdfYnJpZGdlWzNdID0geyAwLCAwLCAweGY4IH07CisJc3RhdGljIFVDSEFSIG9yZ18xMDQyWzNdID0geyAwLCAwLCAwIH07CiAKLSAgICBtZW1jcHkoZGVzdGFkZHIsIGllZWU4MDIxMV9nZXRfREEocG1hYyksIEFERFJMRU4pOwotICAgIG1lbWNweShzcmNhZGRyLCBpZWVlODAyMTFfZ2V0X1NBKHBtYWMpLCBBRERSTEVOKTsKKwltZW1jcHkoZGVzdGFkZHIsIGllZWU4MDIxMV9nZXRfREEocG1hYyksIEFERFJMRU4pOworCW1lbWNweShzcmNhZGRyLCBpZWVlODAyMTFfZ2V0X1NBKHBtYWMpLCBBRERSTEVOKTsKIAogI2lmZGVmIFBDTUNJQV9ERUJVRwotICAgIGlmIChwY19kZWJ1ZyA+IDMpIHsKLSAgICBpbnQgaTsKLSAgICBwcmludGsoS0VSTl9ERUJVRyAic2tiLT5kYXRhIGJlZm9yZSB1bnRyYW5zbGF0ZSIpOwotICAgIGZvciAoaT0wO2k8NjQ7aSsrKSAKLSAgICAgICAgcHJpbnRrKCIlMDJ4ICIsc2tiLT5kYXRhW2ldKTsKLSAgICBwcmludGsoIlxuIiBLRVJOX0RFQlVHICJ0eXBlID0gJTA4eCwgeHNhcCA9ICUwMnglMDJ4JTAyeCwgb3JnID0gJTAyeDAyeDAyeFxuIiwKLSAgICAgICAgICAgbnRvaHModHlwZSksCi0JICAgcHNuYXAtPmRzYXAsIHBzbmFwLT5zc2FwLCBwc25hcC0+Y3RybCwKLQkgICBwc25hcC0+b3JnWzBdLCBwc25hcC0+b3JnWzFdLCBwc25hcC0+b3JnWzJdKTsKLSAgICBwcmludGsoS0VSTl9ERUJVRyAidW50cmFuc2xhdGUgc2tiLT5kYXRhID0gJXBcbiIsc2tiLT5kYXRhKTsKLSAgICB9CisJaWYgKHBjX2RlYnVnID4gMykgeworCQlpbnQgaTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNrYi0+ZGF0YSBiZWZvcmUgdW50cmFuc2xhdGUiKTsKKwkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCisJCQlwcmludGsoIiUwMnggIiwgc2tiLT5kYXRhW2ldKTsKKwkJcHJpbnRrKCJcbiIgS0VSTl9ERUJVRworCQkgICAgICAgInR5cGUgPSAlMDh4LCB4c2FwID0gJTAyeCUwMnglMDJ4LCBvcmcgPSAlMDJ4MDJ4MDJ4XG4iLAorCQkgICAgICAgbnRvaHModHlwZSksIHBzbmFwLT5kc2FwLCBwc25hcC0+c3NhcCwgcHNuYXAtPmN0cmwsCisJCSAgICAgICBwc25hcC0+b3JnWzBdLCBwc25hcC0+b3JnWzFdLCBwc25hcC0+b3JnWzJdKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVudHJhbnNsYXRlIHNrYi0+ZGF0YSA9ICVwXG4iLCBza2ItPmRhdGEpOworCX0KICNlbmRpZgogCi0gICAgaWYgKHBzbmFwLT5kc2FwICE9IDB4YWEgfHwgcHNuYXAtPnNzYXAgIT0gMHhhYSB8fCBwc25hcC0+Y3RybCAhPSAzKSB7Ci0gICAgICAgIC8qIG5vdCBhIHNuYXAgdHlwZSBzbyBsZWF2ZSBpdCBhbG9uZSAqLwotICAgICAgICBERUJVRygzLCJyYXlfY3MgdW50cmFuc2xhdGUgTk9UIFNOQVAgJTAyeCAlMDJ4ICUwMnhcbiIsCi0JCXBzbmFwLT5kc2FwLCBwc25hcC0+c3NhcCwgcHNuYXAtPmN0cmwpOworCWlmIChwc25hcC0+ZHNhcCAhPSAweGFhIHx8IHBzbmFwLT5zc2FwICE9IDB4YWEgfHwgcHNuYXAtPmN0cmwgIT0gMykgeworCQkvKiBub3QgYSBzbmFwIHR5cGUgc28gbGVhdmUgaXQgYWxvbmUgKi8KKwkJREVCVUcoMywgInJheV9jcyB1bnRyYW5zbGF0ZSBOT1QgU05BUCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJICAgICAgcHNuYXAtPmRzYXAsIHBzbmFwLT5zc2FwLCBwc25hcC0+Y3RybCk7CiAKLSAgICAgICAgZGVsdGEgPSBSWF9NQUNfSEVBREVSX0xFTkdUSCAtIEVUSF9ITEVOOwotICAgICAgICBwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOwotICAgICAgICBwZXRoLT5oX3Byb3RvID0gaHRvbnMobGVuIC0gUlhfTUFDX0hFQURFUl9MRU5HVEgpOwotICAgIH0KLSAgICBlbHNlIHsgLyogSXRzIGEgU05BUCAqLwotICAgICAgICBpZiAobWVtY21wKHBzbmFwLT5vcmcsIG9yZ19icmlkZ2UsIDMpID09IDApIHsgLyogRXRoZXJJSSBhbmQgbnVrZSB0aGUgTExDICAqLwotICAgICAgICBERUJVRygzLCJyYXlfY3MgdW50cmFuc2xhdGUgQnJpZGdlIGVuY2FwXG4iKTsKLSAgICAgICAgICAgIGRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggCi0gICAgICAgICAgICAgICAgKyBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKLSAgICAgICAgICAgIHBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7Ci0gICAgICAgICAgICBwZXRoLT5oX3Byb3RvID0gdHlwZTsKLQl9IGVsc2UgaWYgKG1lbWNtcChwc25hcC0+b3JnLCBvcmdfMTA0MiwgMykgPT0gMCkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobnRvaHModHlwZSkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVUSF9QX0lQWDoKLSAgICAgICAgICAgICAgICBjYXNlIEVUSF9QX0FBUlA6Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDMsInJheV9jcyB1bnRyYW5zbGF0ZSBSRkMgSVBYL0FBUlBcbiIpOwotICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47Ci0gICAgICAgICAgICAgICAgICAgIHBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7Ci0gICAgICAgICAgICAgICAgICAgIHBldGgtPmhfcHJvdG8gPSBodG9ucyhsZW4gLSBSWF9NQUNfSEVBREVSX0xFTkdUSCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDMsInJheV9jcyB1bnRyYW5zbGF0ZSBSRkMgZGVmYXVsdFxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggKyAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc25hcGhkcl90KSAtIEVUSF9ITEVOOwotICAgICAgICAgICAgICAgICAgICBwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOwotICAgICAgICAgICAgICAgICAgICBwZXRoLT5oX3Byb3RvID0gdHlwZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCJyYXlfY3MgdW50cmFuc2xhdGUgdmVyeSBjb25mdXNlZCBieSBwYWNrZXRcbiIpOwotICAgICAgICAgICAgICAgIGRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKLSAgICAgICAgICAgICAgICBwZXRoID0gKHN0cnVjdCBldGhoZHIgKikoc2tiLT5kYXRhICsgZGVsdGEpOwotICAgICAgICAgICAgICAgIHBldGgtPmhfcHJvdG8gPSB0eXBlOworCQlkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47CisJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CisJCXBldGgtPmhfcHJvdG8gPSBodG9ucyhsZW4gLSBSWF9NQUNfSEVBREVSX0xFTkdUSCk7CisJfSBlbHNlIHsgLyogSXRzIGEgU05BUCAqLworCQlpZiAobWVtY21wKHBzbmFwLT5vcmcsIG9yZ19icmlkZ2UsIDMpID09IDApIHsKKwkJLyogRXRoZXJJSSBhbmQgbnVrZSB0aGUgTExDICovCisJCQlERUJVRygzLCAicmF5X2NzIHVudHJhbnNsYXRlIEJyaWRnZSBlbmNhcFxuIik7CisJCQlkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RICisJCQkgICAgKyBzaXplb2Yoc3RydWN0IHNuYXBoZHJfdCkgLSBFVEhfSExFTjsKKwkJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CisJCQlwZXRoLT5oX3Byb3RvID0gdHlwZTsKKwkJfSBlbHNlIGlmIChtZW1jbXAocHNuYXAtPm9yZywgb3JnXzEwNDIsIDMpID09IDApIHsKKwkJCXN3aXRjaCAobnRvaHModHlwZSkpIHsKKwkJCWNhc2UgRVRIX1BfSVBYOgorCQkJY2FzZSBFVEhfUF9BQVJQOgorCQkJCURFQlVHKDMsICJyYXlfY3MgdW50cmFuc2xhdGUgUkZDIElQWC9BQVJQXG4iKTsKKwkJCQlkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIIC0gRVRIX0hMRU47CisJCQkJcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKKwkJCQlwZXRoLT5oX3Byb3RvID0KKwkJCQkgICAgaHRvbnMobGVuIC0gUlhfTUFDX0hFQURFUl9MRU5HVEgpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlERUJVRygzLCAicmF5X2NzIHVudHJhbnNsYXRlIFJGQyBkZWZhdWx0XG4iKTsKKwkJCQlkZWx0YSA9IFJYX01BQ19IRUFERVJfTEVOR1RIICsKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmFwaGRyX3QpIC0gRVRIX0hMRU47CisJCQkJcGV0aCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIGRlbHRhKTsKKwkJCQlwZXRoLT5oX3Byb3RvID0gdHlwZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByaW50aygicmF5X2NzIHVudHJhbnNsYXRlIHZlcnkgY29uZnVzZWQgYnkgcGFja2V0XG4iKTsKKwkJCWRlbHRhID0gUlhfTUFDX0hFQURFUl9MRU5HVEggLSBFVEhfSExFTjsKKwkJCXBldGggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBkZWx0YSk7CisJCQlwZXRoLT5oX3Byb3RvID0gdHlwZTsKKwkJfQogCX0KLSAgICB9CiAvKiBUQkQgcmVzZXJ2ZSAgc2tiX3Jlc2VydmUoc2tiLCBkZWx0YSk7ICovCi0gICAgc2tiX3B1bGwoc2tiLCBkZWx0YSk7Ci0gICAgREVCVUcoMywidW50cmFuc2xhdGUgYWZ0ZXIgc2tiX3B1bGwoJWQpLCBza2ItPmRhdGEgPSAlcFxuIixkZWx0YSxza2ItPmRhdGEpOwotICAgIG1lbWNweShwZXRoLT5oX2Rlc3QsIGRlc3RhZGRyLCBBRERSTEVOKTsKLSAgICBtZW1jcHkocGV0aC0+aF9zb3VyY2UsIHNyY2FkZHIsIEFERFJMRU4pOworCXNrYl9wdWxsKHNrYiwgZGVsdGEpOworCURFQlVHKDMsICJ1bnRyYW5zbGF0ZSBhZnRlciBza2JfcHVsbCglZCksIHNrYi0+ZGF0YSA9ICVwXG4iLCBkZWx0YSwKKwkgICAgICBza2ItPmRhdGEpOworCW1lbWNweShwZXRoLT5oX2Rlc3QsIGRlc3RhZGRyLCBBRERSTEVOKTsKKwltZW1jcHkocGV0aC0+aF9zb3VyY2UsIHNyY2FkZHIsIEFERFJMRU4pOwogI2lmZGVmIFBDTUNJQV9ERUJVRwotICAgIGlmIChwY19kZWJ1ZyA+IDMpIHsKLSAgICBpbnQgaTsKLSAgICBwcmludGsoS0VSTl9ERUJVRyAic2tiLT5kYXRhIGFmdGVyIHVudHJhbnNsYXRlOiIpOwotICAgIGZvciAoaT0wO2k8NjQ7aSsrKQotICAgICAgICBwcmludGsoIiUwMnggIixza2ItPmRhdGFbaV0pOwotICAgIHByaW50aygiXG4iKTsKLSAgICB9CisJaWYgKHBjX2RlYnVnID4gMykgeworCQlpbnQgaTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNrYi0+ZGF0YSBhZnRlciB1bnRyYW5zbGF0ZToiKTsKKwkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCisJCQlwcmludGsoIiUwMnggIiwgc2tiLT5kYXRhW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KICNlbmRpZgogfSAvKiBlbmQgdW50cmFuc2xhdGUgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogLyogQ29weSBkYXRhIGZyb20gY2lyY3VsYXIgcmVjZWl2ZSBidWZmZXIgdG8gUEMgbWVtb3J5LgogICogZGVzdCAgICAgPSBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIFBDIG1lbW9yeQogICogcGt0X2FkZHIgPSBzb3VyY2UgYWRkcmVzcyBpbiByZWNlaXZlIGJ1ZmZlcgogICogbGVuICAgICAgPSBsZW5ndGggb2YgcGFja2V0IHRvIGNvcHkKICAqLwotc3RhdGljIGludCBjb3B5X2Zyb21fcnhfYnVmZihyYXlfZGV2X3QgKmxvY2FsLCBVQ0hBUiAqZGVzdCwgaW50IHBrdF9hZGRyLCBpbnQgbGVuZ3RoKQorc3RhdGljIGludCBjb3B5X2Zyb21fcnhfYnVmZihyYXlfZGV2X3QgKmxvY2FsLCBVQ0hBUiAqZGVzdCwgaW50IHBrdF9hZGRyLAorCQkJICAgICBpbnQgbGVuZ3RoKQogewotICAgIGludCB3cmFwX2J5dGVzID0gKHBrdF9hZGRyICsgbGVuZ3RoKSAtIChSWF9CVUZGX0VORCArIDEpOwotICAgIGlmICh3cmFwX2J5dGVzIDw9IDApCi0gICAgewotICAgICAgICBtZW1jcHlfZnJvbWlvKGRlc3QsbG9jYWwtPnJtZW0gKyBwa3RfYWRkcixsZW5ndGgpOwotICAgIH0KLSAgICBlbHNlIC8qIFBhY2tldCB3cmFwcGVkIGluIGNpcmN1bGFyIGJ1ZmZlciAqLwotICAgIHsKLSAgICAgICAgbWVtY3B5X2Zyb21pbyhkZXN0LGxvY2FsLT5ybWVtK3BrdF9hZGRyLGxlbmd0aCAtIHdyYXBfYnl0ZXMpOwotICAgICAgICBtZW1jcHlfZnJvbWlvKGRlc3QgKyBsZW5ndGggLSB3cmFwX2J5dGVzLCBsb2NhbC0+cm1lbSwgd3JhcF9ieXRlcyk7Ci0gICAgfQotICAgIHJldHVybiBsZW5ndGg7Ci19Ci0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi1zdGF0aWMgdm9pZCByZWxlYXNlX2ZyYWdfY2hhaW4ocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICogcHJjcykKLXsKLSAgICBzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3NsaW5rID0gcHJjczsKLSAgICBpbnQgdG1wID0gMTc7Ci0gICAgdW5zaWduZWQgcmNzaW5kZXggPSByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKKwlpbnQgd3JhcF9ieXRlcyA9IChwa3RfYWRkciArIGxlbmd0aCkgLSAoUlhfQlVGRl9FTkQgKyAxKTsKKwlpZiAod3JhcF9ieXRlcyA8PSAwKSB7CisJCW1lbWNweV9mcm9taW8oZGVzdCwgbG9jYWwtPnJtZW0gKyBwa3RfYWRkciwgbGVuZ3RoKTsKKwl9IGVsc2UgeyAvKiBQYWNrZXQgd3JhcHBlZCBpbiBjaXJjdWxhciBidWZmZXIgKi8KIAotICAgIHdoaWxlICh0bXAtLSkgewotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjc2xpbmstPmJ1ZmZlcl9zdGF0dXMpOwotICAgICAgICBpZiAocmNzaW5kZXggPj0gKE5VTUJFUl9PRl9DQ1MgKyBOVU1CRVJfT0ZfUkNTKSkgewotICAgICAgICAgICAgREVCVUcoMSwicmF5X2NzIGludGVycnVwdCBiYWQgcmNzaW5kZXggPSAweCV4XG4iLHJjc2luZGV4KTsKLSAgICAgICAgICAgIGJyZWFrOyAgICAgIAotICAgICAgICB9ICAgCi0gICAgICAgIHByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7Ci0gICAgICAgIHJjc2luZGV4ID0gcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOwotICAgIH0KLSAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjc2xpbmstPmJ1ZmZlcl9zdGF0dXMpOworCQltZW1jcHlfZnJvbWlvKGRlc3QsIGxvY2FsLT5ybWVtICsgcGt0X2FkZHIsCisJCQkgICAgICBsZW5ndGggLSB3cmFwX2J5dGVzKTsKKwkJbWVtY3B5X2Zyb21pbyhkZXN0ICsgbGVuZ3RoIC0gd3JhcF9ieXRlcywgbG9jYWwtPnJtZW0sCisJCQkgICAgICB3cmFwX2J5dGVzKTsKKwl9CisJcmV0dXJuIGxlbmd0aDsKIH0KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworc3RhdGljIHZvaWQgcmVsZWFzZV9mcmFnX2NoYWluKHJheV9kZXZfdCAqbG9jYWwsIHN0cnVjdCByY3MgX19pb21lbSAqcHJjcykKK3sKKwlzdHJ1Y3QgcmNzIF9faW9tZW0gKnByY3NsaW5rID0gcHJjczsKKwlpbnQgdG1wID0gMTc7CisJdW5zaWduZWQgcmNzaW5kZXggPSByZWFkYigmcHJjcy0+dmFyLnJ4X3BhY2tldC5uZXh0X2ZyYWdfcmNzX2luZGV4KTsKKworCXdoaWxlICh0bXAtLSkgeworCQl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjc2xpbmstPmJ1ZmZlcl9zdGF0dXMpOworCQlpZiAocmNzaW5kZXggPj0gKE5VTUJFUl9PRl9DQ1MgKyBOVU1CRVJfT0ZfUkNTKSkgeworCQkJREVCVUcoMSwgInJheV9jcyBpbnRlcnJ1cHQgYmFkIHJjc2luZGV4ID0gMHgleFxuIiwKKwkJCSAgICAgIHJjc2luZGV4KTsKKwkJCWJyZWFrOworCQl9CisJCXByY3NsaW5rID0gcmNzX2Jhc2UobG9jYWwpICsgcmNzaW5kZXg7CisJCXJjc2luZGV4ID0gcmVhZGIoJnByY3NsaW5rLT52YXIucnhfcGFja2V0Lm5leHRfZnJhZ19yY3NfaW5kZXgpOworCX0KKwl3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmcHJjc2xpbmstPmJ1ZmZlcl9zdGF0dXMpOworfQorCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCkKIHsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgREVCVUcoMCwicmF5X2NzIFN0YXJ0aW5nIGF1dGhlbnRpY2F0aW9uLlxuIik7Ci0gICAgaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgewotICAgICAgICBERUJVRygyLCJyYXlfY3MgYXV0aGVudGljYXRlIC0gZGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CisJREVCVUcoMCwgInJheV9jcyBTdGFydGluZyBhdXRoZW50aWNhdGlvbi5cbiIpOworCWlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKKwkJREVCVUcoMiwgInJheV9jcyBhdXRoZW50aWNhdGUgLSBkZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm47CisJfQogCi0gICAgZGVsX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgIGlmIChidWlsZF9hdXRoX2ZyYW1lKGxvY2FsLCBsb2NhbC0+YnNzX2lkLCBPUEVOX0FVVEhfUkVRVUVTVCkpIHsKLSAgICAgICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmpvaW5fbmV0OwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgbG9jYWwtPnRpbWVyLmZ1bmN0aW9uID0gJmF1dGhlbnRpY2F0ZV90aW1lb3V0OwotICAgIH0KLSAgICBsb2NhbC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWioyOwotICAgIGxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7Ci0gICAgYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IEFXQUlUSU5HX1JFU1BPTlNFOworCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlpZiAoYnVpbGRfYXV0aF9mcmFtZShsb2NhbCwgbG9jYWwtPmJzc19pZCwgT1BFTl9BVVRIX1JFUVVFU1QpKSB7CisJCWxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKKwl9IGVsc2UgeworCQlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmYXV0aGVudGljYXRlX3RpbWVvdXQ7CisJfQorCWxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaICogMjsKKwlsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOworCWFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBBV0FJVElOR19SRVNQT05TRTsKIH0gLyogZW5kIGF1dGhlbnRpY2F0ZSAqLworCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgdm9pZCByeF9hdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAotICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKQorCQkJICAgIHVuc2lnbmVkIGludCBwa3RfYWRkciwgaW50IHJ4X2xlbikKIHsKLSAgICBVQ0hBUiBidWZmWzI1Nl07Ci0gICAgc3RydWN0IHJ4X21zZyAqbXNnID0gKHN0cnVjdCByeF9tc2cgKilidWZmOwotICAgIAotICAgIGRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwlVQ0hBUiBidWZmWzI1Nl07CisJc3RydWN0IHJ4X21zZyAqbXNnID0gKHN0cnVjdCByeF9tc2cgKilidWZmOwogCi0gICAgY29weV9mcm9tX3J4X2J1ZmYobG9jYWwsIGJ1ZmYsIHBrdF9hZGRyLCByeF9sZW4gJiAweGZmKTsKLSAgICAvKiBpZiB3ZSBhcmUgdHJ5aW5nIHRvIGdldCBhdXRoZW50aWNhdGVkICovCi0gICAgaWYgKGxvY2FsLT5zcGFybS5iNC5hX25ldHdvcmtfdHlwZSA9PSBBREhPQykgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgcnhfYXV0aCB2YXI9ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLCBtc2ctPnZhclswXSxtc2ctPnZhclsxXSxtc2ctPnZhclsyXSxtc2ctPnZhclszXSxtc2ctPnZhcls0XSxtc2ctPnZhcls1XSk7Ci0gICAgICAgIGlmIChtc2ctPnZhclsyXSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDAsInJheV9jcyBTZW5kaW5nIGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYnVpbGRfYXV0aF9mcmFtZSAobG9jYWwsIG1zZy0+bWFjLmFkZHJfMiwgT1BFTl9BVVRIX1JFU1BPTlNFKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gTkVFRF9UT19BVVRIOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGxvY2FsLT5hdXRoX2lkLCBtc2ctPm1hYy5hZGRyXzIsIEFERFJMRU4pOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSAvKiBJbmZyYXN0cnVjdHVyZSBuZXR3b3JrICovCi0gICAgewotICAgICAgICBpZiAobG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID09IEFXQUlUSU5HX1JFU1BPTlNFKSB7Ci0gICAgICAgICAgICAvKiBWZXJpZnkgYXV0aGVudGljYXRpb24gc2VxdWVuY2UgIzIgYW5kIHN1Y2Nlc3MgKi8KLSAgICAgICAgICAgIGlmIChtc2ctPnZhclsyXSA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChtc2ctPnZhclszXSB8IG1zZy0+dmFyWzRdKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHKDEsIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3NmdWxcbiIpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FVVEhfQ09NUExFVEU7Ci0gICAgICAgICAgICAgICAgICAgIGFzc29jaWF0ZShsb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IEFVVEhFTlRJQ0FURUQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBERUJVRygwLCJBdXRoZW50aWNhdGlvbiByZWZ1c2VkXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BVVRIX1JFRlVTRUQ7Ci0gICAgICAgICAgICAgICAgICAgIGpvaW5fbmV0KCh1X2xvbmcpbG9jYWwpOwotICAgICAgICAgICAgICAgICAgICBsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPSBVTkFVVEhFTlRJQ0FURUQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQorCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKworCWNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCBidWZmLCBwa3RfYWRkciwgcnhfbGVuICYgMHhmZik7CisJLyogaWYgd2UgYXJlIHRyeWluZyB0byBnZXQgYXV0aGVudGljYXRlZCAqLworCWlmIChsb2NhbC0+c3Bhcm0uYjQuYV9uZXR3b3JrX3R5cGUgPT0gQURIT0MpIHsKKwkJREVCVUcoMSwgInJheV9jcyByeF9hdXRoIHZhcj0gJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJCSAgICAgIG1zZy0+dmFyWzBdLCBtc2ctPnZhclsxXSwgbXNnLT52YXJbMl0sIG1zZy0+dmFyWzNdLAorCQkgICAgICBtc2ctPnZhcls0XSwgbXNnLT52YXJbNV0pOworCQlpZiAobXNnLT52YXJbMl0gPT0gMSkgeworCQkJREVCVUcoMCwgInJheV9jcyBTZW5kaW5nIGF1dGhlbnRpY2F0aW9uIHJlc3BvbnNlLlxuIik7CisJCQlpZiAoIWJ1aWxkX2F1dGhfZnJhbWUKKwkJCSAgICAobG9jYWwsIG1zZy0+bWFjLmFkZHJfMiwgT1BFTl9BVVRIX1JFU1BPTlNFKSkgeworCQkJCWxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IE5FRURfVE9fQVVUSDsKKwkJCQltZW1jcHkobG9jYWwtPmF1dGhfaWQsIG1zZy0+bWFjLmFkZHJfMiwKKwkJCQkgICAgICAgQUREUkxFTik7CisJCQl9CisJCX0KKwl9IGVsc2UgeyAvKiBJbmZyYXN0cnVjdHVyZSBuZXR3b3JrICovCisKKwkJaWYgKGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9PSBBV0FJVElOR19SRVNQT05TRSkgeworCQkJLyogVmVyaWZ5IGF1dGhlbnRpY2F0aW9uIHNlcXVlbmNlICMyIGFuZCBzdWNjZXNzICovCisJCQlpZiAobXNnLT52YXJbMl0gPT0gMikgeworCQkJCWlmICgobXNnLT52YXJbM10gfCBtc2ctPnZhcls0XSkgPT0gMCkgeworCQkJCQlERUJVRygxLCAiQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bFxuIik7CisJCQkJCWxvY2FsLT5jYXJkX3N0YXR1cyA9IENBUkRfQVVUSF9DT01QTEVURTsKKwkJCQkJYXNzb2NpYXRlKGxvY2FsKTsKKwkJCQkJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0KKwkJCQkJICAgIEFVVEhFTlRJQ0FURUQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJREVCVUcoMCwgIkF1dGhlbnRpY2F0aW9uIHJlZnVzZWRcbiIpOworCQkJCQlsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FVVEhfUkVGVVNFRDsKKwkJCQkJam9pbl9uZXQoKHVfbG9uZykgbG9jYWwpOworCQkJCQlsb2NhbC0+YXV0aGVudGljYXRpb25fc3RhdGUgPQorCQkJCQkgICAgVU5BVVRIRU5USUNBVEVEOworCQkJCX0KKwkJCX0KKwkJfQorCX0KIAogfSAvKiBlbmQgcnhfYXV0aGVudGljYXRlICovCisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyB2b2lkIGFzc29jaWF0ZShyYXlfZGV2X3QgKmxvY2FsKQogewotICAgIHN0cnVjdCBjY3MgX19pb21lbSAqcGNjczsKLSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7Ci0gICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxpbmstPnByaXY7Ci0gICAgaW50IGNjc2luZGV4OwotICAgIGlmICghKHBjbWNpYV9kZXZfcHJlc2VudChsaW5rKSkpIHsKLSAgICAgICAgREVCVUcoMiwicmF5X2NzIGFzc29jaWF0ZSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLyogSWYgbm8gdHggYnVmZmVycyBhdmFpbGFibGUsIHJldHVybiovCi0gICAgaWYgKChjY3NpbmRleCA9IGdldF9mcmVlX2Njcyhsb2NhbCkpIDwgMCkKLSAgICB7CisJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rID0gbG9jYWwtPmZpbmRlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbGluay0+cHJpdjsKKwlpbnQgY2NzaW5kZXg7CisJaWYgKCEocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKSkgeworCQlERUJVRygyLCAicmF5X2NzIGFzc29jaWF0ZSAtIGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybjsKKwl9CisJLyogSWYgbm8gdHggYnVmZmVycyBhdmFpbGFibGUsIHJldHVybiAqLworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV9jY3MobG9jYWwpKSA8IDApIHsKIC8qIFRCRCBzaG91bGQgbmV2ZXIgYmUgaGVyZSBidXQuLi4gd2hhdCBpZiB3ZSBhcmU/ICovCi0gICAgICAgIERFQlVHKDEsInJheV9jcyBhc3NvY2lhdGUgLSBObyBmcmVlIGNjc1xuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgREVCVUcoMSwicmF5X2NzIFN0YXJ0aW5nIGFzc29jaWF0aW9uIHdpdGggYWNjZXNzIHBvaW50XG4iKTsKLSAgICBwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7Ci0gICAgLyogZmlsbCBpbiB0aGUgQ0NTICovCi0gICAgd3JpdGViKENDU19TVEFSVF9BU1NPQ0lBVElPTiwgJnBjY3MtPmNtZCk7Ci0gICAgLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCi0gICAgaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgewotICAgICAgICBERUJVRygxLCJyYXlfY3MgYXNzb2NpYXRlIGZhaWxlZCAtIEVDRiBub3QgcmVhZHkgZm9yIGludHJcbiIpOwotICAgICAgICB3cml0ZWIoQ0NTX0JVRkZFUl9GUkVFLCAmKHBjY3MrKyktPmJ1ZmZlcl9zdGF0dXMpOworCQlERUJVRygxLCAicmF5X2NzIGFzc29jaWF0ZSAtIE5vIGZyZWUgY2NzXG4iKTsKKwkJcmV0dXJuOworCX0KKwlERUJVRygxLCAicmF5X2NzIFN0YXJ0aW5nIGFzc29jaWF0aW9uIHdpdGggYWNjZXNzIHBvaW50XG4iKTsKKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CisJLyogZmlsbCBpbiB0aGUgQ0NTICovCisJd3JpdGViKENDU19TVEFSVF9BU1NPQ0lBVElPTiwgJnBjY3MtPmNtZCk7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygxLCAicmF5X2NzIGFzc29jaWF0ZSBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKIAotICAgICAgICBkZWxfdGltZXIoJmxvY2FsLT50aW1lcik7Ci0gICAgICAgIGxvY2FsLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaKjI7Ci0gICAgICAgIGxvY2FsLT50aW1lci5kYXRhID0gKGxvbmcpbG9jYWw7Ci0gICAgICAgIGxvY2FsLT50aW1lci5mdW5jdGlvbiA9ICZqb2luX25ldDsKLSAgICAgICAgYWRkX3RpbWVyKCZsb2NhbC0+dGltZXIpOwotICAgICAgICBsb2NhbC0+Y2FyZF9zdGF0dXMgPSBDQVJEX0FTU09DX0ZBSUxFRDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXNuaWZmZXIpIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCWRlbF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwkJbG9jYWwtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogKiAyOworCQlsb2NhbC0+dGltZXIuZGF0YSA9IChsb25nKWxvY2FsOworCQlsb2NhbC0+dGltZXIuZnVuY3Rpb24gPSAmam9pbl9uZXQ7CisJCWFkZF90aW1lcigmbG9jYWwtPnRpbWVyKTsKKwkJbG9jYWwtPmNhcmRfc3RhdHVzID0gQ0FSRF9BU1NPQ19GQUlMRUQ7CisJCXJldHVybjsKKwl9CisJaWYgKCFzbmlmZmVyKQorCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCiB9IC8qIGVuZCBhc3NvY2lhdGUgKi8KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotc3RhdGljIHZvaWQgcnhfZGVhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKQorc3RhdGljIHZvaWQgcnhfZGVhdXRoZW50aWNhdGUocmF5X2Rldl90ICpsb2NhbCwgc3RydWN0IHJjcyBfX2lvbWVtICpwcmNzLAorCQkJICAgICAgdW5zaWduZWQgaW50IHBrdF9hZGRyLCBpbnQgcnhfbGVuKQogewogLyogIFVDSEFSIGJ1ZmZbMjU2XTsKICAgICBzdHJ1Y3QgcnhfbXNnICptc2cgPSAoc3RydWN0IHJ4X21zZyAqKWJ1ZmY7CiAqLwotICAgIERFQlVHKDAsIkRlYXV0aGVudGljYXRpb24gZnJhbWUgcmVjZWl2ZWRcbiIpOwotICAgIGxvY2FsLT5hdXRoZW50aWNhdGlvbl9zdGF0ZSA9IFVOQVVUSEVOVElDQVRFRDsKLSAgICAvKiBOZWVkIHRvIHJlYXV0aGVudGljYXRlIG9yIHJlam9pbiBkZXBlbmRpbmcgb24gcmVhc29uIGNvZGUgKi8KKwlERUJVRygwLCAiRGVhdXRoZW50aWNhdGlvbiBmcmFtZSByZWNlaXZlZFxuIik7CisJbG9jYWwtPmF1dGhlbnRpY2F0aW9uX3N0YXRlID0gVU5BVVRIRU5USUNBVEVEOworCS8qIE5lZWQgdG8gcmVhdXRoZW50aWNhdGUgb3IgcmVqb2luIGRlcGVuZGluZyBvbiByZWFzb24gY29kZSAqLwogLyogIGNvcHlfZnJvbV9yeF9idWZmKGxvY2FsLCBidWZmLCBwa3RfYWRkciwgcnhfbGVuICYgMHhmZik7CiAgKi8KIH0KKwogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgY2xlYXJfaW50ZXJydXB0KHJheV9kZXZfdCAqbG9jYWwpCiB7Ci0gICAgd3JpdGViKDAsIGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEhDU19JTlRSX09GRlNFVCk7CisJd3JpdGViKDAsIGxvY2FsLT5hbWVtICsgQ0lTX09GRlNFVCArIEhDU19JTlRSX09GRlNFVCk7CiB9CisKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KICNpZmRlZiBDT05GSUdfUFJPQ19GUwogI2RlZmluZSBNQVhEQVRBIChQQUdFX1NJWkUgLSA4MCkKIAogc3RhdGljIGNoYXIgKmNhcmRfc3RhdHVzW10gPSB7Ci0gICAgIkNhcmQgaW5zZXJ0ZWQgLSB1bmluaXRpYWxpemVkIiwgICAgIC8qIDAgKi8KLSAgICAiQ2FyZCBub3QgZG93bmxvYWRlZCIsICAgICAgICAgICAgICAgLyogMSAqLwotICAgICJXYWl0aW5nIGZvciBkb3dubG9hZCBwYXJhbWV0ZXJzIiwgICAvKiAyICovCi0gICAgIkNhcmQgZG9pbmcgYWNxdWlzaXRpb24iLCAgICAgICAgICAgIC8qIDMgKi8KLSAgICAiQWNxdWlzaXRpb24gY29tcGxldGUiLCAgICAgICAgICAgICAgLyogNCAqLwotICAgICJBdXRoZW50aWNhdGlvbiBjb21wbGV0ZSIsICAgICAgICAgICAvKiA1ICovCi0gICAgIkFzc29jaWF0aW9uIGNvbXBsZXRlIiwgICAgICAgICAgICAgIC8qIDYgKi8KLSAgICAiPz8/IiwgIj8/PyIsICI/Pz8iLCAiPz8/IiwgICAgICAgICAgLyogNyA4IDkgMTAgdW5kZWZpbmVkICovCi0gICAgIkNhcmQgaW5pdCBlcnJvciIsICAgICAgICAgICAgICAgICAgIC8qIDExICovCi0gICAgIkRvd25sb2FkIHBhcmFtZXRlcnMgZXJyb3IiLCAgICAgICAgIC8qIDEyICovCi0gICAgIj8/PyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEzICovCi0gICAgIkFjcXVpc2l0aW9uIGZhaWxlZCIsICAgICAgICAgICAgICAgIC8qIDE0ICovCi0gICAgIkF1dGhlbnRpY2F0aW9uIHJlZnVzZWQiLCAgICAgICAgICAgIC8qIDE1ICovCi0gICAgIkFzc29jaWF0aW9uIGZhaWxlZCIgICAgICAgICAgICAgICAgIC8qIDE2ICovCisJIkNhcmQgaW5zZXJ0ZWQgLSB1bmluaXRpYWxpemVkIiwJLyogMCAqLworCSJDYXJkIG5vdCBkb3dubG9hZGVkIiwJCQkvKiAxICovCisJIldhaXRpbmcgZm9yIGRvd25sb2FkIHBhcmFtZXRlcnMiLAkvKiAyICovCisJIkNhcmQgZG9pbmcgYWNxdWlzaXRpb24iLAkJLyogMyAqLworCSJBY3F1aXNpdGlvbiBjb21wbGV0ZSIsCQkJLyogNCAqLworCSJBdXRoZW50aWNhdGlvbiBjb21wbGV0ZSIsCQkvKiA1ICovCisJIkFzc29jaWF0aW9uIGNvbXBsZXRlIiwJCQkvKiA2ICovCisJIj8/PyIsICI/Pz8iLCAiPz8/IiwgIj8/PyIsCQkvKiA3IDggOSAxMCB1bmRlZmluZWQgKi8KKwkiQ2FyZCBpbml0IGVycm9yIiwJCQkvKiAxMSAqLworCSJEb3dubG9hZCBwYXJhbWV0ZXJzIGVycm9yIiwJCS8qIDEyICovCisJIj8/PyIsCQkJCQkvKiAxMyAqLworCSJBY3F1aXNpdGlvbiBmYWlsZWQiLAkJCS8qIDE0ICovCisJIkF1dGhlbnRpY2F0aW9uIHJlZnVzZWQiLAkJLyogMTUgKi8KKwkiQXNzb2NpYXRpb24gZmFpbGVkIgkJCS8qIDE2ICovCiB9OwogCi1zdGF0aWMgY2hhciAqbmV0dHlwZVtdID0geyJBZGhvYyIsICJJbmZyYSAifTsKLXN0YXRpYyBjaGFyICpmcmFtaW5nW10gPSB7IkVuY2Fwc3VsYXRpb24iLCAiVHJhbnNsYXRpb24ifQorc3RhdGljIGNoYXIgKm5ldHR5cGVbXSA9IHsgIkFkaG9jIiwgIkluZnJhICIgfTsKK3N0YXRpYyBjaGFyICpmcmFtaW5nW10gPSB7ICJFbmNhcHN1bGF0aW9uIiwgIlRyYW5zbGF0aW9uIiB9CisKIDsKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIHN0YXRpYyBpbnQgcmF5X2NzX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAvKiBQcmludCBjdXJyZW50IHZhbHVlcyB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSB2aWEgb3RoZXIgbWVhbnMKLSAqIGVnIGlmY29uZmlnIAorICogZWcgaWZjb25maWcKICAqLwotICAgIGludCBpOwotICAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOwotICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0gICAgcmF5X2Rldl90ICpsb2NhbDsKLSAgICBVQ0hBUiAqcDsKLSAgICBzdHJ1Y3QgZnJlcV9ob3BfZWxlbWVudCAqcGZoOwotICAgIFVDSEFSIGNbMzNdOworCWludCBpOworCXN0cnVjdCBwY21jaWFfZGV2aWNlICpsaW5rOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJcmF5X2Rldl90ICpsb2NhbDsKKwlVQ0hBUiAqcDsKKwlzdHJ1Y3QgZnJlcV9ob3BfZWxlbWVudCAqcGZoOworCVVDSEFSIGNbMzNdOwogCi0gICAgbGluayA9IHRoaXNfZGV2aWNlOwotICAgIGlmICghbGluaykKLSAgICAJcmV0dXJuIDA7Ci0gICAgZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopbGluay0+cHJpdjsKLSAgICBpZiAoIWRldikKLSAgICAJcmV0dXJuIDA7Ci0gICAgbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIGlmICghbG9jYWwpCi0gICAgCXJldHVybiAwOworCWxpbmsgPSB0aGlzX2RldmljZTsKKwlpZiAoIWxpbmspCisJCXJldHVybiAwOworCWRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWxpbmstPnByaXY7CisJaWYgKCFkZXYpCisJCXJldHVybiAwOworCWxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpZiAoIWxvY2FsKQorCQlyZXR1cm4gMDsKIAotICAgIHNlcV9wdXRzKG0sICJSYXlsaW5rIFdpcmVsZXNzIExBTiBkcml2ZXIgc3RhdHVzXG4iKTsKLSAgICBzZXFfcHJpbnRmKG0sICIlc1xuIiwgcmNzaWQpOwotICAgIC8qIGJ1aWxkIDQgZG9lcyBub3QgcmVwb3J0IHZlcnNpb24sIGFuZCBmaWVsZCBpcyAweDU1IGFmdGVyIG1lbXRlc3QgKi8KLSAgICBzZXFfcHV0cyhtLCAiRmlybXdhcmUgdmVyc2lvbiAgICAgPSAiKTsKLSAgICBpZiAobG9jYWwtPmZ3X3ZlciA9PSAweDU1KQotICAgICAgICBzZXFfcHV0cyhtLCAiNCAtIFVzZSBkdW1wX2NpcyBmb3IgbW9yZSBkZXRhaWxzXG4iKTsKLSAgICBlbHNlCi0gICAgICAgIHNlcV9wcmludGYobSwgIiUyZC4lMDJkLiUwMmRcbiIsCi0gICAgICAgICAgICAgICAgICAgbG9jYWwtPmZ3X3ZlciwgbG9jYWwtPmZ3X2JsZCwgbG9jYWwtPmZ3X3Zhcik7CisJc2VxX3B1dHMobSwgIlJheWxpbmsgV2lyZWxlc3MgTEFOIGRyaXZlciBzdGF0dXNcbiIpOworCXNlcV9wcmludGYobSwgIiVzXG4iLCByY3NpZCk7CisJLyogYnVpbGQgNCBkb2VzIG5vdCByZXBvcnQgdmVyc2lvbiwgYW5kIGZpZWxkIGlzIDB4NTUgYWZ0ZXIgbWVtdGVzdCAqLworCXNlcV9wdXRzKG0sICJGaXJtd2FyZSB2ZXJzaW9uICAgICA9ICIpOworCWlmIChsb2NhbC0+ZndfdmVyID09IDB4NTUpCisJCXNlcV9wdXRzKG0sICI0IC0gVXNlIGR1bXBfY2lzIGZvciBtb3JlIGRldGFpbHNcbiIpOworCWVsc2UKKwkJc2VxX3ByaW50ZihtLCAiJTJkLiUwMmQuJTAyZFxuIiwKKwkJCSAgIGxvY2FsLT5md192ZXIsIGxvY2FsLT5md19ibGQsIGxvY2FsLT5md192YXIpOwogCi0gICAgZm9yIChpPTA7IGk8MzI7IGkrKykgY1tpXSA9IGxvY2FsLT5zcGFybS5iNS5hX2N1cnJlbnRfZXNzX2lkW2ldOwotICAgIGNbMzJdID0gMDsKLSAgICBzZXFfcHJpbnRmKG0sICIlcyBuZXR3b3JrIEVTU0lEID0gXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgICAgIG5ldHR5cGVbbG9jYWwtPnNwYXJtLmI1LmFfbmV0d29ya190eXBlXSwgYyk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCWNbaV0gPSBsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyZW50X2Vzc19pZFtpXTsKKwljWzMyXSA9IDA7CisJc2VxX3ByaW50ZihtLCAiJXMgbmV0d29yayBFU1NJRCA9IFwiJXNcIlxuIiwKKwkJICAgbmV0dHlwZVtsb2NhbC0+c3Bhcm0uYjUuYV9uZXR3b3JrX3R5cGVdLCBjKTsKIAotICAgIHAgPSBsb2NhbC0+YnNzX2lkOwotICAgIHNlcV9wcmludGYobSwgIkJTU0lEICAgICAgICAgICAgICAgID0gJXBNXG4iLCBwKTsKKwlwID0gbG9jYWwtPmJzc19pZDsKKwlzZXFfcHJpbnRmKG0sICJCU1NJRCAgICAgICAgICAgICAgICA9ICVwTVxuIiwgcCk7CiAKLSAgICBzZXFfcHJpbnRmKG0sICJDb3VudHJ5IGNvZGUgICAgICAgICA9ICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGxvY2FsLT5zcGFybS5iNS5hX2N1cnJfY291bnRyeV9jb2RlKTsKKwlzZXFfcHJpbnRmKG0sICJDb3VudHJ5IGNvZGUgICAgICAgICA9ICVkXG4iLAorCQkgICBsb2NhbC0+c3Bhcm0uYjUuYV9jdXJyX2NvdW50cnlfY29kZSk7CiAKLSAgICBpID0gbG9jYWwtPmNhcmRfc3RhdHVzOwotICAgIGlmIChpIDwgMCkgaSA9IDEwOwotICAgIGlmIChpID4gMTYpIGkgPSAxMDsKLSAgICBzZXFfcHJpbnRmKG0sICJDYXJkIHN0YXR1cyAgICAgICAgICA9ICVzXG4iLCBjYXJkX3N0YXR1c1tpXSk7CisJaSA9IGxvY2FsLT5jYXJkX3N0YXR1czsKKwlpZiAoaSA8IDApCisJCWkgPSAxMDsKKwlpZiAoaSA+IDE2KQorCQlpID0gMTA7CisJc2VxX3ByaW50ZihtLCAiQ2FyZCBzdGF0dXMgICAgICAgICAgPSAlc1xuIiwgY2FyZF9zdGF0dXNbaV0pOwogCi0gICAgc2VxX3ByaW50ZihtLCAiRnJhbWluZyBtb2RlICAgICAgICAgPSAlc1xuIixmcmFtaW5nW3RyYW5zbGF0ZV0pOworCXNlcV9wcmludGYobSwgIkZyYW1pbmcgbW9kZSAgICAgICAgID0gJXNcbiIsIGZyYW1pbmdbdHJhbnNsYXRlXSk7CiAKLSAgICBzZXFfcHJpbnRmKG0sICJMYXN0IHBrdCBzaWduYWwgbHZsICA9ICVkXG4iLCBsb2NhbC0+bGFzdF9yc2wpOworCXNlcV9wcmludGYobSwgIkxhc3QgcGt0IHNpZ25hbCBsdmwgID0gJWRcbiIsIGxvY2FsLT5sYXN0X3JzbCk7CiAKLSAgICBpZiAobG9jYWwtPmJlYWNvbl9yeGVkKSB7Ci0JLyogUHVsbCBzb21lIGZpZWxkcyBvdXQgb2YgbGFzdCBiZWFjb24gcmVjZWl2ZWQgKi8KLQlzZXFfcHJpbnRmKG0sICJCZWFjb24gSW50ZXJ2YWwgICAgICA9ICVkIEt1c1xuIiwKLQkJICAgICAgIGxvY2FsLT5sYXN0X2Jjbi5iZWFjb25faW50dmxbMF0KLQkJICAgICAgICsgMjU2ICogbG9jYWwtPmxhc3RfYmNuLmJlYWNvbl9pbnR2bFsxXSk7Ci0gICAgCi0gICAgcCA9IGxvY2FsLT5sYXN0X2Jjbi5lbGVtZW50czsKLSAgICBpZiAocFswXSA9PSBDX0VTU0lEX0VMRU1FTlRfSUQpIHAgKz0gcFsxXSArIDI7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHNlcV9wcmludGYobSwgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgZXNzaWQgZWxlbWVudCBpZCA9ICVkXG4iLHBbMF0pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisJaWYgKGxvY2FsLT5iZWFjb25fcnhlZCkgeworCQkvKiBQdWxsIHNvbWUgZmllbGRzIG91dCBvZiBsYXN0IGJlYWNvbiByZWNlaXZlZCAqLworCQlzZXFfcHJpbnRmKG0sICJCZWFjb24gSW50ZXJ2YWwgICAgICA9ICVkIEt1c1xuIiwKKwkJCSAgIGxvY2FsLT5sYXN0X2Jjbi5iZWFjb25faW50dmxbMF0KKwkJCSAgICsgMjU2ICogbG9jYWwtPmxhc3RfYmNuLmJlYWNvbl9pbnR2bFsxXSk7CiAKLSAgICBpZiAocFswXSA9PSBDX1NVUFBPUlRFRF9SQVRFU19FTEVNRU5UX0lEKSB7Ci0gICAgICAgIHNlcV9wdXRzKG0sICJTdXBwb3J0ZWQgcmF0ZSBjb2RlcyA9ICIpOwotICAgICAgICBmb3IgKGk9MjsgaTxwWzFdICsgMjsgaSsrKSAKLSAgICAgICAgICAgIHNlcV9wcmludGYobSwgIjB4JTAyeCAiLCBwW2ldKTsKLSAgICAgICAgc2VxX3B1dGMobSwgJ1xuJyk7Ci0gICAgICAgIHAgKz0gcFsxXSArIDI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzZXFfcHV0cyhtLCAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCByYXRlcyBlbGVtZW50XG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorCQlwID0gbG9jYWwtPmxhc3RfYmNuLmVsZW1lbnRzOworCQlpZiAocFswXSA9PSBDX0VTU0lEX0VMRU1FTlRfSUQpCisJCQlwICs9IHBbMV0gKyAyOworCQllbHNlIHsKKwkJCXNlcV9wcmludGYobSwKKwkJCQkgICAiUGFyc2UgYmVhY29uIGZhaWxlZCBhdCBlc3NpZCBlbGVtZW50IGlkID0gJWRcbiIsCisJCQkJICAgcFswXSk7CisJCQlyZXR1cm4gMDsKKwkJfQogCi0JaWYgKHBbMF0gPT0gQ19GSF9QQVJBTV9TRVRfRUxFTUVOVF9JRCkgewotCSAgICBwZmggPSAoc3RydWN0IGZyZXFfaG9wX2VsZW1lbnQgKilwOwotCSAgICBzZXFfcHJpbnRmKG0sICJIb3AgZHdlbGwgICAgICAgICAgICA9ICVkIEt1c1xuIiwKLQkJCSAgIHBmaC0+ZHdlbGxfdGltZVswXSArIDI1NiAqIHBmaC0+ZHdlbGxfdGltZVsxXSk7Ci0JICAgIHNlcV9wcmludGYobSwgIkhvcCBzZXQgICAgICAgICAgICAgID0gJWQgXG4iLCBwZmgtPmhvcF9zZXQpOwotCSAgICBzZXFfcHJpbnRmKG0sICJIb3AgcGF0dGVybiAgICAgICAgICA9ICVkIFxuIiwgcGZoLT5ob3BfcGF0dGVybik7Ci0JICAgIHNlcV9wcmludGYobSwgIkhvcCBpbmRleCAgICAgICAgICAgID0gJWQgXG4iLCBwZmgtPmhvcF9pbmRleCk7Ci0JICAgIHAgKz0gcFsxXSArIDI7CisJCWlmIChwWzBdID09IENfU1VQUE9SVEVEX1JBVEVTX0VMRU1FTlRfSUQpIHsKKwkJCXNlcV9wdXRzKG0sICJTdXBwb3J0ZWQgcmF0ZSBjb2RlcyA9ICIpOworCQkJZm9yIChpID0gMjsgaSA8IHBbMV0gKyAyOyBpKyspCisJCQkJc2VxX3ByaW50ZihtLCAiMHglMDJ4ICIsIHBbaV0pOworCQkJc2VxX3B1dGMobSwgJ1xuJyk7CisJCQlwICs9IHBbMV0gKyAyOworCQl9IGVsc2UgeworCQkJc2VxX3B1dHMobSwgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgcmF0ZXMgZWxlbWVudFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWlmIChwWzBdID09IENfRkhfUEFSQU1fU0VUX0VMRU1FTlRfSUQpIHsKKwkJCXBmaCA9IChzdHJ1Y3QgZnJlcV9ob3BfZWxlbWVudCAqKXA7CisJCQlzZXFfcHJpbnRmKG0sICJIb3AgZHdlbGwgICAgICAgICAgICA9ICVkIEt1c1xuIiwKKwkJCQkgICBwZmgtPmR3ZWxsX3RpbWVbMF0gKworCQkJCSAgIDI1NiAqIHBmaC0+ZHdlbGxfdGltZVsxXSk7CisJCQlzZXFfcHJpbnRmKG0sICJIb3Agc2V0ICAgICAgICAgICAgICA9ICVkIFxuIiwKKwkJCQkgICBwZmgtPmhvcF9zZXQpOworCQkJc2VxX3ByaW50ZihtLCAiSG9wIHBhdHRlcm4gICAgICAgICAgPSAlZCBcbiIsCisJCQkJICAgcGZoLT5ob3BfcGF0dGVybik7CisJCQlzZXFfcHJpbnRmKG0sICJIb3AgaW5kZXggICAgICAgICAgICA9ICVkIFxuIiwKKwkJCQkgICBwZmgtPmhvcF9pbmRleCk7CisJCQlwICs9IHBbMV0gKyAyOworCQl9IGVsc2UgeworCQkJc2VxX3B1dHMobSwKKwkJCQkgIlBhcnNlIGJlYWNvbiBmYWlsZWQgYXQgRkggcGFyYW0gZWxlbWVudFxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCXNlcV9wdXRzKG0sICJObyBiZWFjb25zIHJlY2VpdmVkXG4iKTsKIAl9Ci0JZWxzZSB7Ci0JICAgIHNlcV9wdXRzKG0sICJQYXJzZSBiZWFjb24gZmFpbGVkIGF0IEZIIHBhcmFtIGVsZW1lbnRcbiIpOwotCSAgICByZXR1cm4gMDsKLQl9Ci0gICAgfSBlbHNlIHsKLQlzZXFfcHV0cyhtLCAiTm8gYmVhY29ucyByZWNlaXZlZFxuIik7Ci0gICAgfQotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJheV9jc19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0yNjg0LDc0ICsyODA2LDc3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJheV9jc19wcm9jX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHJheV9jc19wcm9jX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHJheV9jc19wcm9jX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCiB9OwogI2VuZGlmCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiBzdGF0aWMgaW50IGJ1aWxkX2F1dGhfZnJhbWUocmF5X2Rldl90ICpsb2NhbCwgVUNIQVIgKmRlc3QsIGludCBhdXRoX3R5cGUpCiB7Ci0gICAgaW50IGFkZHI7Ci0gICAgc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotICAgIHN0cnVjdCB0eF9tc2cgX19pb21lbSAqcHR4OwotICAgIGludCBjY3NpbmRleDsKKwlpbnQgYWRkcjsKKwlzdHJ1Y3QgY2NzIF9faW9tZW0gKnBjY3M7CisJc3RydWN0IHR4X21zZyBfX2lvbWVtICpwdHg7CisJaW50IGNjc2luZGV4OwogCi0gICAgLyogSWYgbm8gdHggYnVmZmVycyBhdmFpbGFibGUsIHJldHVybiAqLwotICAgIGlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV90eF9jY3MobG9jYWwpKSA8IDApCi0gICAgewotICAgICAgICBERUJVRygxLCJyYXlfY3Mgc2VuZCBhdXRoZW50aWNhdGUgLSBObyBmcmVlIHR4IGNjc1xuIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CisJLyogSWYgbm8gdHggYnVmZmVycyBhdmFpbGFibGUsIHJldHVybiAqLworCWlmICgoY2NzaW5kZXggPSBnZXRfZnJlZV90eF9jY3MobG9jYWwpKSA8IDApIHsKKwkJREVCVUcoMSwgInJheV9jcyBzZW5kIGF1dGhlbnRpY2F0ZSAtIE5vIGZyZWUgdHggY2NzXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KIAotICAgIHBjY3MgPSBjY3NfYmFzZShsb2NhbCkgKyBjY3NpbmRleDsKKwlwY2NzID0gY2NzX2Jhc2UobG9jYWwpICsgY2NzaW5kZXg7CiAKLSAgICAvKiBBZGRyZXNzIGluIGNhcmQgc3BhY2UgKi8KLSAgICBhZGRyID0gVFhfQlVGX0JBU0UgKyAoY2NzaW5kZXggPDwgMTEpOwotICAgIC8qIGZpbGwgaW4gdGhlIENDUyAqLwotICAgIHdyaXRlYihDQ1NfVFhfUkVRVUVTVCwgJnBjY3MtPmNtZCk7Ci0gICAgd3JpdGViKGFkZHIgPj4gOCwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHIpOwotICAgIHdyaXRlYigweDIwLCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0ciArIDEpOwotICAgIHdyaXRlYihUWF9BVVRIRU5USUNBVEVfTEVOR1RIX01TQiwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGgpOwotICAgIHdyaXRlYihUWF9BVVRIRU5USUNBVEVfTEVOR1RIX0xTQixwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX2xlbmd0aCArIDEpOwotICAgIHdyaXRlYigwLCAmcGNjcy0+dmFyLnR4X3JlcXVlc3QucG93X3Nhdl9tb2RlKTsKKwkvKiBBZGRyZXNzIGluIGNhcmQgc3BhY2UgKi8KKwlhZGRyID0gVFhfQlVGX0JBU0UgKyAoY2NzaW5kZXggPDwgMTEpOworCS8qIGZpbGwgaW4gdGhlIENDUyAqLworCXdyaXRlYihDQ1NfVFhfUkVRVUVTVCwgJnBjY3MtPmNtZCk7CisJd3JpdGViKGFkZHIgPj4gOCwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9wdHIpOworCXdyaXRlYigweDIwLCBwY2NzLT52YXIudHhfcmVxdWVzdC50eF9kYXRhX3B0ciArIDEpOworCXdyaXRlYihUWF9BVVRIRU5USUNBVEVfTEVOR1RIX01TQiwgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGgpOworCXdyaXRlYihUWF9BVVRIRU5USUNBVEVfTEVOR1RIX0xTQiwKKwkgICAgICAgcGNjcy0+dmFyLnR4X3JlcXVlc3QudHhfZGF0YV9sZW5ndGggKyAxKTsKKwl3cml0ZWIoMCwgJnBjY3MtPnZhci50eF9yZXF1ZXN0LnBvd19zYXZfbW9kZSk7CiAKLSAgICBwdHggPSBsb2NhbC0+c3JhbSArIGFkZHI7Ci0gICAgLyogZmlsbCBpbiB0aGUgbWFjIGhlYWRlciAqLwotICAgIHdyaXRlYihQUk9UT0NPTF9WRVIgfCBBVVRIRU5USUNfVFlQRSwgJnB0eC0+bWFjLmZyYW1lX2N0bF8xKTsKLSAgICB3cml0ZWIoMCwgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKKwlwdHggPSBsb2NhbC0+c3JhbSArIGFkZHI7CisJLyogZmlsbCBpbiB0aGUgbWFjIGhlYWRlciAqLworCXdyaXRlYihQUk9UT0NPTF9WRVIgfCBBVVRIRU5USUNfVFlQRSwgJnB0eC0+bWFjLmZyYW1lX2N0bF8xKTsKKwl3cml0ZWIoMCwgJnB0eC0+bWFjLmZyYW1lX2N0bF8yKTsKIAotICAgIG1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMSwgZGVzdCwgQUREUkxFTik7Ci0gICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8yLCBsb2NhbC0+c3Bhcm0uYjQuYV9tYWNfYWRkciwgQUREUkxFTik7Ci0gICAgbWVtY3B5X3RvaW8ocHR4LT5tYWMuYWRkcl8zLCBsb2NhbC0+YnNzX2lkLCBBRERSTEVOKTsKKwltZW1jcHlfdG9pbyhwdHgtPm1hYy5hZGRyXzEsIGRlc3QsIEFERFJMRU4pOworCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMiwgbG9jYWwtPnNwYXJtLmI0LmFfbWFjX2FkZHIsIEFERFJMRU4pOworCW1lbWNweV90b2lvKHB0eC0+bWFjLmFkZHJfMywgbG9jYWwtPmJzc19pZCwgQUREUkxFTik7CiAKLSAgICAvKiBGaWxsIGluIG1zZyBib2R5IHdpdGggcHJvdG9jb2wgMDAgMDAsIHNlcXVlbmNlIDAxIDAwICxzdGF0dXMgMDAgMDAgKi8KLSAgICBtZW1zZXRfaW8ocHR4LT52YXIsIDAsIDYpOwotICAgIHdyaXRlYihhdXRoX3R5cGUgJiAweGZmLCBwdHgtPnZhciArIDIpOworCS8qIEZpbGwgaW4gbXNnIGJvZHkgd2l0aCBwcm90b2NvbCAwMCAwMCwgc2VxdWVuY2UgMDEgMDAgLHN0YXR1cyAwMCAwMCAqLworCW1lbXNldF9pbyhwdHgtPnZhciwgMCwgNik7CisJd3JpdGViKGF1dGhfdHlwZSAmIDB4ZmYsIHB0eC0+dmFyICsgMik7CiAKLSAgICAvKiBJbnRlcnJ1cHQgdGhlIGZpcm13YXJlIHRvIHByb2Nlc3MgdGhlIGNvbW1hbmQgKi8KLSAgICBpZiAoaW50ZXJydXB0X2VjZihsb2NhbCwgY2NzaW5kZXgpKSB7Ci0gICAgICAgIERFQlVHKDEsInJheV9jcyBzZW5kIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZmFpbGVkIC0gRUNGIG5vdCByZWFkeSBmb3IgaW50clxuIik7Ci0gICAgICAgIHdyaXRlYihDQ1NfQlVGRkVSX0ZSRUUsICYocGNjcysrKS0+YnVmZmVyX3N0YXR1cyk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisJLyogSW50ZXJydXB0IHRoZSBmaXJtd2FyZSB0byBwcm9jZXNzIHRoZSBjb21tYW5kICovCisJaWYgKGludGVycnVwdF9lY2YobG9jYWwsIGNjc2luZGV4KSkgeworCQlERUJVRygxLAorCQkgICAgICAicmF5X2NzIHNlbmQgYXV0aGVudGljYXRpb24gcmVxdWVzdCBmYWlsZWQgLSBFQ0Ygbm90IHJlYWR5IGZvciBpbnRyXG4iKTsKKwkJd3JpdGViKENDU19CVUZGRVJfRlJFRSwgJihwY2NzKyspLT5idWZmZXJfc3RhdHVzKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKIH0gLyogRW5kIGJ1aWxkX2F1dGhfZnJhbWUgKi8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgdm9pZCByYXljc193cml0ZShjb25zdCBjaGFyICpuYW1lLCB3cml0ZV9wcm9jX3QgKncsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICogZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShuYW1lLCBTX0lGUkVHIHwgU19JV1VTUiwgTlVMTCk7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9CisJICAgIGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIFNfSUZSRUcgfCBTX0lXVVNSLCBOVUxMKTsKIAlpZiAoZW50cnkpIHsKIAkJZW50cnktPndyaXRlX3Byb2MgPSB3OwogCQllbnRyeS0+ZGF0YSA9IGRhdGE7CiAJfQogfQogCi1zdGF0aWMgaW50IHdyaXRlX2Vzc2lkKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCB3cml0ZV9lc3NpZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RhdGljIGNoYXIgcHJvY19lc3NpZFszM107CiAJaW50IGxlbiA9IGNvdW50OwpAQCAtMjc2NSw3ICsyODkwLDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfaW50KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQorc3RhdGljIGludCB3cml0ZV9pbnQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCSAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKIHsKIAlzdGF0aWMgY2hhciBwcm9jX251bWJlclsxMF07CiAJY2hhciAqcDsKQEAgLTI3ODUsNyArMjkxMSw3IEBACiAJCXVuc2lnbmVkIGludCBjID0gKnAgLSAnMCc7CiAJCWlmIChjID4gOSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQluciA9IG5yKjEwICsgYzsKKwkJbnIgPSBuciAqIDEwICsgYzsKIAkJcCsrOwogCX0gd2hpbGUgKC0tbGVuKTsKIAkqKGludCAqKWRhdGEgPSBucjsKQEAgLTI3OTcsNTUgKzI5MjMsNTggQEAKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxYTYsIDB4MDAwMCksCiAJUENNQ0lBX0RFVklDRV9OVUxMLAogfTsKKwogTU9EVUxFX0RFVklDRV9UQUJMRShwY21jaWEsIHJheV9pZHMpOwogCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9kcml2ZXIgcmF5X2RyaXZlciA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmRydgkJPSB7Ci0JCS5uYW1lCT0gInJheV9jcyIsCi0JfSwKLQkucHJvYmUJCT0gcmF5X3Byb2JlLAotCS5yZW1vdmUJCT0gcmF5X2RldGFjaCwKLQkuaWRfdGFibGUgICAgICAgPSByYXlfaWRzLAotCS5zdXNwZW5kCT0gcmF5X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSByYXlfcmVzdW1lLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5kcnYgPSB7CisJCS5uYW1lID0gInJheV9jcyIsCisJCX0sCisJLnByb2JlID0gcmF5X3Byb2JlLAorCS5yZW1vdmUgPSByYXlfZGV0YWNoLAorCS5pZF90YWJsZSA9IHJheV9pZHMsCisJLnN1c3BlbmQgPSByYXlfc3VzcGVuZCwKKwkucmVzdW1lID0gcmF5X3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcmF5X2NzKHZvaWQpCiB7Ci0gICAgaW50IHJjOwotICAgIAotICAgIERFQlVHKDEsICIlc1xuIiwgcmNzaWQpOwotICAgIHJjID0gcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmcmF5X2RyaXZlcik7Ci0gICAgREVCVUcoMSwgInJheWxpbmsgaW5pdF9tb2R1bGUgcmVnaXN0ZXJfcGNtY2lhX2RyaXZlciByZXR1cm5zIDB4JXhcbiIscmMpOworCWludCByYzsKKworCURFQlVHKDEsICIlc1xuIiwgcmNzaWQpOworCXJjID0gcGNtY2lhX3JlZ2lzdGVyX2RyaXZlcigmcmF5X2RyaXZlcik7CisJREVCVUcoMSwgInJheWxpbmsgaW5pdF9tb2R1bGUgcmVnaXN0ZXJfcGNtY2lhX2RyaXZlciByZXR1cm5zIDB4JXhcbiIsCisJICAgICAgcmMpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLSAgICBwcm9jX21rZGlyKCJkcml2ZXIvcmF5X2NzIiwgTlVMTCk7CisJcHJvY19ta2RpcigiZHJpdmVyL3JheV9jcyIsIE5VTEwpOwogCi0gICAgcHJvY19jcmVhdGUoImRyaXZlci9yYXlfY3MvcmF5X2NzIiwgMCwgTlVMTCwgJnJheV9jc19wcm9jX2ZvcHMpOwotICAgIHJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL2Vzc2lkIiwgd3JpdGVfZXNzaWQsIE5VTEwpOwotICAgIHJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL25ldF90eXBlIiwgd3JpdGVfaW50LCAmbmV0X3R5cGUpOwotICAgIHJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL3RyYW5zbGF0ZSIsIHdyaXRlX2ludCwgJnRyYW5zbGF0ZSk7CisJcHJvY19jcmVhdGUoImRyaXZlci9yYXlfY3MvcmF5X2NzIiwgMCwgTlVMTCwgJnJheV9jc19wcm9jX2ZvcHMpOworCXJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL2Vzc2lkIiwgd3JpdGVfZXNzaWQsIE5VTEwpOworCXJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL25ldF90eXBlIiwgd3JpdGVfaW50LCAmbmV0X3R5cGUpOworCXJheWNzX3dyaXRlKCJkcml2ZXIvcmF5X2NzL3RyYW5zbGF0ZSIsIHdyaXRlX2ludCwgJnRyYW5zbGF0ZSk7CiAjZW5kaWYKLSAgICBpZiAodHJhbnNsYXRlICE9IDApIHRyYW5zbGF0ZSA9IDE7Ci0gICAgcmV0dXJuIDA7CisJaWYgKHRyYW5zbGF0ZSAhPSAwKQorCQl0cmFuc2xhdGUgPSAxOworCXJldHVybiAwOwogfSAvKiBpbml0X3JheV9jcyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JheV9jcyh2b2lkKQogewotICAgIERFQlVHKDAsICJyYXlfY3M6IGNsZWFudXBfbW9kdWxlXG4iKTsKKwlERUJVRygwLCAicmF5X2NzOiBjbGVhbnVwX21vZHVsZVxuIik7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL3JheV9jcyIsIE5VTEwpOwotICAgIHJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL2Vzc2lkIiwgTlVMTCk7Ci0gICAgcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvbmV0X3R5cGUiLCBOVUxMKTsKLSAgICByZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy90cmFuc2xhdGUiLCBOVUxMKTsKLSAgICByZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcyIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL3JheV9jcyIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvcmF5X2NzL2Vzc2lkIiwgTlVMTCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYXlfY3MvbmV0X3R5cGUiLCBOVUxMKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcy90cmFuc2xhdGUiLCBOVUxMKTsKKwlyZW1vdmVfcHJvY19lbnRyeSgiZHJpdmVyL3JheV9jcyIsIE5VTEwpOwogI2VuZGlmCiAKLSAgICBwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJnJheV9kcml2ZXIpOworCXBjbWNpYV91bnJlZ2lzdGVyX2RyaXZlcigmcmF5X2RyaXZlcik7CiB9IC8qIGV4aXRfcmF5X2NzICovCiAKIG1vZHVsZV9pbml0KGluaXRfcmF5X2NzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwppbmRleCBlZDkzYWM0Li5kYjkxZGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCkBAIC05MCw0NCArOTAsNDQgQEAKIAogCiAvKiB2YXJpb3VzIFJORElTIE9JRCBkZWZzICovCi0jZGVmaW5lIE9JRF9HRU5fTElOS19TUEVFRAkJCWNjcHUyKDB4MDAwMTAxMDcpCi0jZGVmaW5lIE9JRF9HRU5fUk5ESVNfQ09ORklHX1BBUkFNRVRFUgkJY2NwdTIoMHgwMDAxMDIxYikKKyNkZWZpbmUgT0lEX0dFTl9MSU5LX1NQRUVECQkJY3B1X3RvX2xlMzIoMHgwMDAxMDEwNykKKyNkZWZpbmUgT0lEX0dFTl9STkRJU19DT05GSUdfUEFSQU1FVEVSCQljcHVfdG9fbGUzMigweDAwMDEwMjFiKQogCi0jZGVmaW5lIE9JRF9HRU5fWE1JVF9PSwkJCQljY3B1MigweDAwMDIwMTAxKQotI2RlZmluZSBPSURfR0VOX1JDVl9PSwkJCQljY3B1MigweDAwMDIwMTAyKQotI2RlZmluZSBPSURfR0VOX1hNSVRfRVJST1IJCQljY3B1MigweDAwMDIwMTAzKQotI2RlZmluZSBPSURfR0VOX1JDVl9FUlJPUgkJCWNjcHUyKDB4MDAwMjAxMDQpCi0jZGVmaW5lIE9JRF9HRU5fUkNWX05PX0JVRkZFUgkJCWNjcHUyKDB4MDAwMjAxMDUpCisjZGVmaW5lIE9JRF9HRU5fWE1JVF9PSwkJCQljcHVfdG9fbGUzMigweDAwMDIwMTAxKQorI2RlZmluZSBPSURfR0VOX1JDVl9PSwkJCQljcHVfdG9fbGUzMigweDAwMDIwMTAyKQorI2RlZmluZSBPSURfR0VOX1hNSVRfRVJST1IJCQljcHVfdG9fbGUzMigweDAwMDIwMTAzKQorI2RlZmluZSBPSURfR0VOX1JDVl9FUlJPUgkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDQpCisjZGVmaW5lIE9JRF9HRU5fUkNWX05PX0JVRkZFUgkJCWNwdV90b19sZTMyKDB4MDAwMjAxMDUpCiAKLSNkZWZpbmUgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTCQljY3B1MigweDAxMDEwMTAxKQotI2RlZmluZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTCQljY3B1MigweDAxMDEwMTAyKQotI2RlZmluZSBPSURfODAyXzNfTVVMVElDQVNUX0xJU1QJCWNjcHUyKDB4MDEwMTAxMDMpCi0jZGVmaW5lIE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRQkJY2NwdTIoMHgwMTAxMDEwNCkKKyNkZWZpbmUgT0lEXzgwMl8zX1BFUk1BTkVOVF9BRERSRVNTCQljcHVfdG9fbGUzMigweDAxMDEwMTAxKQorI2RlZmluZSBPSURfODAyXzNfQ1VSUkVOVF9BRERSRVNTCQljcHVfdG9fbGUzMigweDAxMDEwMTAyKQorI2RlZmluZSBPSURfODAyXzNfTVVMVElDQVNUX0xJU1QJCWNwdV90b19sZTMyKDB4MDEwMTAxMDMpCisjZGVmaW5lIE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRQkJY3B1X3RvX2xlMzIoMHgwMTAxMDEwNCkKIAotI2RlZmluZSBPSURfODAyXzExX0JTU0lECQkJY2NwdTIoMHgwZDAxMDEwMSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9TU0lECQkJCWNjcHUyKDB4MGQwMTAxMDIpCi0jZGVmaW5lIE9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERQkJY2NwdTIoMHgwZDAxMDEwOCkKLSNkZWZpbmUgT0lEXzgwMl8xMV9BRERfV0VQCQkJY2NwdTIoMHgwZDAxMDExMykKLSNkZWZpbmUgT0lEXzgwMl8xMV9SRU1PVkVfV0VQCQkJY2NwdTIoMHgwZDAxMDExNCkKLSNkZWZpbmUgT0lEXzgwMl8xMV9ESVNBU1NPQ0lBVEUJCQljY3B1MigweDBkMDEwMTE1KQotI2RlZmluZSBPSURfODAyXzExX0FVVEhFTlRJQ0FUSU9OX01PREUJCWNjcHUyKDB4MGQwMTAxMTgpCi0jZGVmaW5lIE9JRF84MDJfMTFfUFJJVkFDWV9GSUxURVIJCWNjcHUyKDB4MGQwMTAxMTkpCi0jZGVmaW5lIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOCQljY3B1MigweDBkMDEwMTFhKQotI2RlZmluZSBPSURfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTCQljY3B1MigweDBkMDEwMTFiKQotI2RlZmluZSBPSURfODAyXzExX0FERF9LRVkJCQljY3B1MigweDBkMDEwMTFkKQotI2RlZmluZSBPSURfODAyXzExX1JFTU9WRV9LRVkJCQljY3B1MigweDBkMDEwMTFlKQotI2RlZmluZSBPSURfODAyXzExX0FTU09DSUFUSU9OX0lORk9STUFUSU9OCWNjcHUyKDB4MGQwMTAxMWYpCi0jZGVmaW5lIE9JRF84MDJfMTFfUE1LSUQJCQljY3B1MigweDBkMDEwMTIzKQotI2RlZmluZSBPSURfODAyXzExX05FVFdPUktfVFlQRVNfU1VQUE9SVEVECWNjcHUyKDB4MGQwMTAyMDMpCi0jZGVmaW5lIE9JRF84MDJfMTFfTkVUV09SS19UWVBFX0lOX1VTRQkJY2NwdTIoMHgwZDAxMDIwNCkKLSNkZWZpbmUgT0lEXzgwMl8xMV9UWF9QT1dFUl9MRVZFTAkJY2NwdTIoMHgwZDAxMDIwNSkKLSNkZWZpbmUgT0lEXzgwMl8xMV9SU1NJCQkJCWNjcHUyKDB4MGQwMTAyMDYpCi0jZGVmaW5lIE9JRF84MDJfMTFfUlNTSV9UUklHR0VSCQkJY2NwdTIoMHgwZDAxMDIwNykKLSNkZWZpbmUgT0lEXzgwMl8xMV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRAljY3B1MigweDBkMDEwMjA5KQotI2RlZmluZSBPSURfODAyXzExX1JUU19USFJFU0hPTEQJCWNjcHUyKDB4MGQwMTAyMGEpCi0jZGVmaW5lIE9JRF84MDJfMTFfU1VQUE9SVEVEX1JBVEVTCQljY3B1MigweDBkMDEwMjBlKQotI2RlZmluZSBPSURfODAyXzExX0NPTkZJR1VSQVRJT04JCWNjcHUyKDB4MGQwMTAyMTEpCi0jZGVmaW5lIE9JRF84MDJfMTFfQlNTSURfTElTVAkJCWNjcHUyKDB4MGQwMTAyMTcpCisjZGVmaW5lIE9JRF84MDJfMTFfQlNTSUQJCQljcHVfdG9fbGUzMigweDBkMDEwMTAxKQorI2RlZmluZSBPSURfODAyXzExX1NTSUQJCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDEwMikKKyNkZWZpbmUgT0lEXzgwMl8xMV9JTkZSQVNUUlVDVFVSRV9NT0RFCQljcHVfdG9fbGUzMigweDBkMDEwMTA4KQorI2RlZmluZSBPSURfODAyXzExX0FERF9XRVAJCQljcHVfdG9fbGUzMigweDBkMDEwMTEzKQorI2RlZmluZSBPSURfODAyXzExX1JFTU9WRV9XRVAJCQljcHVfdG9fbGUzMigweDBkMDEwMTE0KQorI2RlZmluZSBPSURfODAyXzExX0RJU0FTU09DSUFURQkJCWNwdV90b19sZTMyKDB4MGQwMTAxMTUpCisjZGVmaW5lIE9JRF84MDJfMTFfQVVUSEVOVElDQVRJT05fTU9ERQkJY3B1X3RvX2xlMzIoMHgwZDAxMDExOCkKKyNkZWZpbmUgT0lEXzgwMl8xMV9QUklWQUNZX0ZJTFRFUgkJY3B1X3RvX2xlMzIoMHgwZDAxMDExOSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4JCWNwdV90b19sZTMyKDB4MGQwMTAxMWEpCisjZGVmaW5lIE9JRF84MDJfMTFfRU5DUllQVElPTl9TVEFUVVMJCWNwdV90b19sZTMyKDB4MGQwMTAxMWIpCisjZGVmaW5lIE9JRF84MDJfMTFfQUREX0tFWQkJCWNwdV90b19sZTMyKDB4MGQwMTAxMWQpCisjZGVmaW5lIE9JRF84MDJfMTFfUkVNT1ZFX0tFWQkJCWNwdV90b19sZTMyKDB4MGQwMTAxMWUpCisjZGVmaW5lIE9JRF84MDJfMTFfQVNTT0NJQVRJT05fSU5GT1JNQVRJT04JY3B1X3RvX2xlMzIoMHgwZDAxMDExZikKKyNkZWZpbmUgT0lEXzgwMl8xMV9QTUtJRAkJCWNwdV90b19sZTMyKDB4MGQwMTAxMjMpCisjZGVmaW5lIE9JRF84MDJfMTFfTkVUV09SS19UWVBFU19TVVBQT1JURUQJY3B1X3RvX2xlMzIoMHgwZDAxMDIwMykKKyNkZWZpbmUgT0lEXzgwMl8xMV9ORVRXT1JLX1RZUEVfSU5fVVNFCQljcHVfdG9fbGUzMigweDBkMDEwMjA0KQorI2RlZmluZSBPSURfODAyXzExX1RYX1BPV0VSX0xFVkVMCQljcHVfdG9fbGUzMigweDBkMDEwMjA1KQorI2RlZmluZSBPSURfODAyXzExX1JTU0kJCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDIwNikKKyNkZWZpbmUgT0lEXzgwMl8xMV9SU1NJX1RSSUdHRVIJCQljcHVfdG9fbGUzMigweDBkMDEwMjA3KQorI2RlZmluZSBPSURfODAyXzExX0ZSQUdNRU5UQVRJT05fVEhSRVNIT0xECWNwdV90b19sZTMyKDB4MGQwMTAyMDkpCisjZGVmaW5lIE9JRF84MDJfMTFfUlRTX1RIUkVTSE9MRAkJY3B1X3RvX2xlMzIoMHgwZDAxMDIwYSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9TVVBQT1JURURfUkFURVMJCWNwdV90b19sZTMyKDB4MGQwMTAyMGUpCisjZGVmaW5lIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTgkJY3B1X3RvX2xlMzIoMHgwZDAxMDIxMSkKKyNkZWZpbmUgT0lEXzgwMl8xMV9CU1NJRF9MSVNUCQkJY3B1X3RvX2xlMzIoMHgwZDAxMDIxNykKIAogCiAvKiBUeXBpY2FsIG5vaXNlL21heGltdW0gc2lnbmFsIGxldmVsIHZhbHVlcyB0YWtlbiBmcm9tIG5kaXN3cmFwcGVyIGl3X25kaXMuaCAqLwpAQCAtMTQ0LDggKzE0NCw4IEBACiAKIAogLyogY29kZXMgZm9yICJzdGF0dXMiIGZpZWxkIG9mIGNvbXBsZXRpb24gbWVzc2FnZXMgKi8KLSNkZWZpbmUgUk5ESVNfU1RBVFVTX0FEQVBURVJfTk9UX1JFQURZCQljY3B1MigweGMwMDEwMDExKQotI2RlZmluZSBSTkRJU19TVEFUVVNfQURBUFRFUl9OT1RfT1BFTgkJY2NwdTIoMHhjMDAxMDAxMikKKyNkZWZpbmUgUk5ESVNfU1RBVFVTX0FEQVBURVJfTk9UX1JFQURZCQljcHVfdG9fbGUzMigweGMwMDEwMDExKQorI2RlZmluZSBSTkRJU19TVEFUVVNfQURBUFRFUl9OT1RfT1BFTgkJY3B1X3RvX2xlMzIoMHhjMDAxMDAxMikKIAogCiAvKiBORElTIGRhdGEgc3RydWN0dXJlcy4gVGFrZW4gZnJvbSB3cGFfc3VwcGxpY2FudCBkcml2ZXJfbmRpcy5jCkBAIC0zNjksOSArMzY5LDYgQEAKIH07CiAKIAotc3RhdGljIGNvbnN0IGludCBmcmVxX2NoYW5bXSA9IHsgMjQxMiwgMjQxNywgMjQyMiwgMjQyNywgMjQzMiwgMjQzNywgMjQ0MiwKLQkJCQkyNDQ3LCAyNDUyLCAyNDU3LCAyNDYyLCAyNDY3LCAyNDcyLCAyNDg0IH07Ci0KIHN0YXRpYyBjb25zdCBpbnQgcmF0ZXNfODAyMTFnWzhdID0geyA2LCA5LCAxMiwgMTgsIDI0LCAzNiwgNDgsIDU0IH07CiAKIHN0YXRpYyBjb25zdCBpbnQgYmNtNDMyMF9wb3dlcl9vdXRwdXRbNF0gPSB7IDI1LCA1MCwgNzUsIDEwMCB9OwpAQCAtNDQ1LDcgKzQ0Miw3IEBACiAKIAltZW1zZXQodS5nZXQsIDAsIHNpemVvZiAqdS5nZXQpOwogCXUuZ2V0LT5tc2dfdHlwZSA9IFJORElTX01TR19RVUVSWTsKLQl1LmdldC0+bXNnX2xlbiA9IGNjcHUyKHNpemVvZiAqdS5nZXQpOworCXUuZ2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mICp1LmdldCk7CiAJdS5nZXQtPm9pZCA9IG9pZDsKIAogCXJldCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgYnVmbGVuKTsKQEAgLTQ5NCw4ICs0OTEsOCBAQAogCXUuc2V0LT5tc2dfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKCp1LnNldCkgKyBsZW4pOwogCXUuc2V0LT5vaWQgPSBvaWQ7CiAJdS5zZXQtPmxlbiA9IGNwdV90b19sZTMyKGxlbik7Ci0JdS5zZXQtPm9mZnNldCA9IGNjcHUyKHNpemVvZigqdS5zZXQpIC0gOCk7Ci0JdS5zZXQtPmhhbmRsZSA9IGNjcHUyKDApOworCXUuc2V0LT5vZmZzZXQgPSBjcHVfdG9fbGUzMihzaXplb2YoKnUuc2V0KSAtIDgpOworCXUuc2V0LT5oYW5kbGUgPSBjcHVfdG9fbGUzMigwKTsKIAltZW1jcHkodS5idWYgKyBzaXplb2YoKnUuc2V0KSwgZGF0YSwgbGVuKTsKIAogCXJldCA9IHJuZGlzX2NvbW1hbmQoZGV2LCB1LmhlYWRlciwgYnVmbGVuKTsKQEAgLTY0MCw4ICs2MzcsOCBAQAogc3RhdGljIGludCBmcmVxX3RvX2RzY29uZmlnKHN0cnVjdCBpd19mcmVxICpmcmVxLCB1bnNpZ25lZCBpbnQgKmRzY29uZmlnKQogewogCWlmIChmcmVxLT5tIDwgMTAwMCAmJiBmcmVxLT5lID09IDApIHsKLQkJaWYgKGZyZXEtPm0gPj0gMSAmJiBmcmVxLT5tIDw9IEFSUkFZX1NJWkUoZnJlcV9jaGFuKSkKLQkJCSpkc2NvbmZpZyA9IGZyZXFfY2hhbltmcmVxLT5tIC0gMV0gKiAxMDAwOworCQlpZiAoZnJlcS0+bSA+PSAxICYmIGZyZXEtPm0gPD0gMTQpCisJCQkqZHNjb25maWcgPSBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEoZnJlcS0+bSkgKiAxMDAwOwogCQllbHNlCiAJCQlyZXR1cm4gLTE7CiAJfSBlbHNlIHsKQEAgLTExNzgsMTEgKzExNzUsMTEgQEAKIAkJcmFuZ2UtPnRocm91Z2hwdXQgPSAxMSAqIDEwMDAgKiAxMDAwIC8gMjsKIAl9CiAKLQlyYW5nZS0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShmcmVxX2NoYW4pOworCXJhbmdlLT5udW1fY2hhbm5lbHMgPSAxNDsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZyZXFfY2hhbikgJiYgaSA8IElXX01BWF9GUkVRVUVOQ0lFUzsgaSsrKSB7CisJZm9yIChpID0gMDsgKGkgPCAxNCkgJiYgKGkgPCBJV19NQVhfRlJFUVVFTkNJRVMpOyBpKyspIHsKIAkJcmFuZ2UtPmZyZXFbaV0uaSA9IGkgKyAxOwotCQlyYW5nZS0+ZnJlcVtpXS5tID0gZnJlcV9jaGFuW2ldICogMTAwMDAwOworCQlyYW5nZS0+ZnJlcVtpXS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGkgKyAxKSAqIDEwMDAwMDsKIAkJcmFuZ2UtPmZyZXFbaV0uZSA9IDE7CiAJfQogCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gaTsKQEAgLTE2MzMsNyArMTYzMCw3IEBACiAJZGV2ZGJnKHVzYmRldiwgIlNJT0NTSVdTQ0FOIik7CiAKIAlpZiAod3JxdS0+ZGF0YS5mbGFncyA9PSAwKSB7Ci0JCXRtcCA9IGNjcHUyKDEpOworCQl0bXAgPSBjcHVfdG9fbGUzMigxKTsKIAkJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQlNTSURfTElTVF9TQ0FOLCAmdG1wLAogCQkJCQkJCQlzaXplb2YodG1wKSk7CiAJCWV2dC5kYXRhLmZsYWdzID0gMDsKQEAgLTI0MzEsNyArMjQyOCw3IEBACiAJCS8qIFNlbmQgc2NhbiBPSUQuIFVzZSBvZiBib3RoIE9JRHMgaXMgcmVxdWlyZWQgdG8gZ2V0IGRldmljZQogCQkgKiB3b3JraW5nLgogCQkgKi8KLQkJdG1wID0gY2NwdTIoMSk7CisJCXRtcCA9IGNwdV90b19sZTMyKDEpOwogCQlybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9CU1NJRF9MSVNUX1NDQU4sICZ0bXAsCiAJCQkJCQkJCXNpemVvZih0bXApKTsKIApAQCAtMjUyNyw2ICsyNTI0LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHNhbWUgYXMgcm5kaXNfbmV0ZGV2X29wcyBidXQgd2l0aCBsb2NhbCBtdWx0aWNhc3QgaGFuZGxlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBybmRpc193ZXh0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAorCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gdXNibmV0X3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHVzYm5ldF90eF90aW1lb3V0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHJuZGlzX3dleHRfc2V0X211bHRpY2FzdF9saXN0LAorfTsKKwogCiBzdGF0aWMgaW50IHJuZGlzX3dleHRfYmluZChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewpAQCAtMjU2Miw3ICsyNTcwLDggQEAKIAkgKiBybmRpc19ob3N0IHdhbnRzIHRvIGF2b2lkIGFsbCBPSUQgYXMgbXVjaCBhcyBwb3NzaWJsZQogCSAqIHNvIGRvIHByb21pc2MvbXVsdGljYXN0IGhhbmRsaW5nIGluIHJuZGlzX3dleHQuCiAJICovCi0JdXNiZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHJuZGlzX3dleHRfc2V0X211bHRpY2FzdF9saXN0OworCXVzYmRldi0+bmV0LT5uZXRkZXZfb3BzID0gJnJuZGlzX3dleHRfbmV0ZGV2X29wczsKKwogCXRtcCA9IFJORElTX1BBQ0tFVF9UWVBFX0RJUkVDVEVEIHwgUk5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUOwogCXJldHZhbCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiwgJnRtcCwKIAkJCQkJCQkJc2l6ZW9mKHRtcCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwppbmRleCAxNzhiMzEzLi5iZmM1ZDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvS2NvbmZpZwpAQCAtOTcsMTAgKzk3LDExIEBACiAKIGNvbmZpZyBSVDJYMDBfTElCX1JGS0lMTAogCWJvb2xlYW4KLQlkZWZhdWx0IHkgaWYgKFJUMlgwMF9MSUI9eSAmJiBSRktJTEw9eSkgfHwgKFJUMlgwMF9MSUI9bSAmJiBSRktJTEwhPW4pCisJZGVmYXVsdCB5IGlmIChSVDJYMDBfTElCPXkgJiYgSU5QVVQ9eSkgfHwgKFJUMlgwMF9MSUI9bSAmJiBJTlBVVCE9bikKKwlzZWxlY3QgSU5QVVRfUE9MTERFVgogCi1jb21tZW50ICJydDJ4MDAgcmZraWxsIHN1cHBvcnQgZGlzYWJsZWQgZHVlIHRvIG1vZHVsYXJpemVkIFJGS0lMTCBhbmQgYnVpbHQtaW4gcnQyeDAwIgotCWRlcGVuZHMgb24gUlQyWDAwX0xJQj15ICYmIFJGS0lMTD1tCitjb21tZW50ICJydDJ4MDAgcmZraWxsIHN1cHBvcnQgZGlzYWJsZWQgZHVlIHRvIG1vZHVsYXJpemVkIElOUFVUIGFuZCBidWlsdC1pbiBydDJ4MDAiCisJZGVwZW5kcyBvbiBSVDJYMDBfTElCPXkgJiYgSU5QVVQ9bQogCiBjb25maWcgUlQyWDAwX0xJQl9MRURTCiAJYm9vbGVhbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL01ha2VmaWxlCmluZGV4IDkxN2NiNGYuLmYyMmQ4MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvTWFrZWZpbGUKQEAgLTIsNiArMiw3IEBACiBydDJ4MDBsaWIteQkJCQkrPSBydDJ4MDBtYWMubwogcnQyeDAwbGliLXkJCQkJKz0gcnQyeDAwY29uZmlnLm8KIHJ0MngwMGxpYi15CQkJCSs9IHJ0MngwMHF1ZXVlLm8KK3J0MngwMGxpYi15CQkJCSs9IHJ0MngwMGxpbmsubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUykJKz0gcnQyeDAwZGVidWcubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPKQkrPSBydDJ4MDBjcnlwdG8ubwogcnQyeDAwbGliLSQoQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMKQkrPSBydDJ4MDByZmtpbGwubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCmluZGV4IDZhOTc3NjcuLjBmMDg3NzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMTQsOSArMTE0LDYgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKCF3b3JkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIAkvKgpAQCAtNTI0LDYgKzUyMSwzMiBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjEyLCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfY29uZmlnX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQoreworCWVudW0gZGV2X3N0YXRlIHN0YXRlID0KKwkgICAgKGxpYmNvbmYtPmNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpID8KKwkJU1RBVEVfU0xFRVAgOiBTVEFURV9BV0FLRTsKKwl1MzIgcmVnOworCisJaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ1NSMjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfREVMQVlfQUZURVJfVEJDTiwKKwkJCQkgICAobGliY29uZi0+Y29uZi0+YmVhY29uX2ludCAtIDIwKSAqIDE2KTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX1RCQ05fQkVGT1JFX1dBS0VVUCwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5saXN0ZW5faW50ZXJ2YWwgLSAxKTsKKworCQkvKiBXZSBtdXN0IGZpcnN0IGRpc2FibGUgYXV0b3dha2UgYmVmb3JlIGl0IGNhbiBiZSBlbmFibGVkICovCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjIwLCByZWcpOworCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9BVVRPV0FLRSwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjIwLCByZWcpOworCX0KKworCXJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LCBzdGF0ZSk7Cit9CisKIHN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAogCQkJICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC01MzcsNiArNTYwLDggQEAKIAkJcnQyNDAwcGNpX2NvbmZpZ19yZXRyeV9saW1pdChydDJ4MDBkZXYsIGxpYmNvbmYpOwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCiAJCXJ0MjQwMHBjaV9jb25maWdfZHVyYXRpb24ocnQyeDAwZGV2LCBsaWJjb25mKTsKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCisJCXJ0MjQwMHBjaV9jb25maWdfcHMocnQyeDAwZGV2LCBsaWJjb25mKTsKIH0KIAogc3RhdGljIHZvaWQgcnQyNDAwcGNpX2NvbmZpZ19jdyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtNTcyLDM1ICs1OTcsMzcgQEAKIAlxdWFsLT5mYWxzZV9jY2EgPSBiYnA7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIGlubGluZSB2b2lkIHJ0MjQwMHBjaV9zZXRfdmdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCB1OCB2Z2NfbGV2ZWwpCiB7Ci0JcnQyNDAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDEzLCAweDA4KTsKLQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gMHgwODsKKwlydDI0MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTMsIHZnY19sZXZlbCk7CisJcXVhbC0+dmdjX2xldmVsID0gdmdjX2xldmVsOworCXF1YWwtPnZnY19sZXZlbF9yZWcgPSB2Z2NfbGV2ZWw7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjQwMHBjaV9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpCiB7Ci0JdTggcmVnOworCXJ0MjQwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgMHgwOCk7Cit9CiAKK3N0YXRpYyB2b2lkIHJ0MjQwMHBjaV9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwsIGNvbnN0IHUzMiBjb3VudCkKK3sKIAkvKgogCSAqIFRoZSBsaW5rIHR1bmVyIHNob3VsZCBub3QgcnVuIGxvbmdlciB0aGVuIDYwIHNlY29uZHMsCiAJICogYW5kIHNob3VsZCBydW4gb25jZSBldmVyeSAyIHNlY29uZHMuCiAJICovCi0JaWYgKHJ0MngwMGRldi0+bGluay5jb3VudCA+IDYwIHx8ICEocnQyeDAwZGV2LT5saW5rLmNvdW50ICYgMSkpCisJaWYgKGNvdW50ID4gNjAgfHwgIShjb3VudCAmIDEpKQogCQlyZXR1cm47CiAKIAkvKgogCSAqIEJhc2UgcjEzIGxpbmsgdHVuaW5nIG9uIHRoZSBmYWxzZSBjY2EgY291bnQuCiAJICovCi0JcnQyNDAwcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgMTMsICZyZWcpOwotCi0JaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA+IDUxMiAmJiByZWcgPCAweDIwKSB7Ci0JCXJ0MjQwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMywgKytyZWcpOwotCQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gcmVnOwotCX0gZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhIDwgMTAwICYmIHJlZyA+IDB4MDgpIHsKLQkJcnQyNDAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDEzLCAtLXJlZyk7Ci0JCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSByZWc7Ci0JfQorCWlmICgocXVhbC0+ZmFsc2VfY2NhID4gNTEyKSAmJiAocXVhbC0+dmdjX2xldmVsIDwgMHgyMCkpCisJCXJ0MjQwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgKytxdWFsLT52Z2NfbGV2ZWwpOworCWVsc2UgaWYgKChxdWFsLT5mYWxzZV9jY2EgPCAxMDApICYmIChxdWFsLT52Z2NfbGV2ZWwgPiAweDA4KSkKKwkJcnQyNDAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAtLXF1YWwtPnZnY19sZXZlbCk7CiB9CiAKIC8qCkBAIC05MDQsMjEgKzkzMSwxMCBAQAogCiBzdGF0aWMgdm9pZCBydDI0MDBwY2lfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXUzMiByZWc7Ci0KKwkvKgorCSAqIERpc2FibGUgcG93ZXIKKwkgKi8KIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQV1JDU1IwLCAwKTsKLQotCS8qCi0JICogRGlzYWJsZSBzeW5jaHJvbmlzYXRpb24uCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQ1NSMTQsIDApOwotCi0JLyoKLQkgKiBDYW5jZWwgUlggYW5kIFRYLgotCSAqLwotCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVFhDU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhDU1IwX0FCT1JULCAxKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CiB9CiAKIHN0YXRpYyBpbnQgcnQyNDAwcGNpX3NldF9zdGF0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtMTExNSw2ICsxMTMxLDIwIEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDI0MDBwY2lfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCkKK3sKKwl1MzIgcmVnOworCisJaWYgKHFpZCA9PSBRSURfQkVBQ09OKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCAwKTsKKwl9IGVsc2UgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfQUJPUlQsIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CisJfQorfQorCiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCkBAIC0xMzY1LDcgKzEzOTUsOSBAQAogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfTEVEX01PREUpOwogCiAJcnQyNDAwcGNpX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3JhZGlvLCBMRURfVFlQRV9SQURJTyk7Ci0JaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkpCisJaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkgfHwKKwkgICAgdmFsdWUgPT0gTEVEX01PREVfREVGQVVMVCB8fAorCSAgICB2YWx1ZSA9PSBMRURfTU9ERV9BU1VTKQogCQlydDI0MDBwY2lfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcXVhbCwKIAkJCQkgICBMRURfVFlQRV9BQ1RJVklUWSk7CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfTEVEUyAqLwpAQCAtMTQxOSw3ICsxNDUxLDkgQEAKIAkgKiBJbml0aWFsaXplIGFsbCBodyBmaWVsZHMuCiAJICovCiAJcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkJCSAgICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCQkgICAgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s7CiAJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSAwOwogCiAJU0VUX0lFRUU4MDIxMV9ERVYocnQyeDAwZGV2LT5odywgcnQyeDAwZGV2LT5kZXYpOwpAQCAtMTU3Miw2ICsxNjA2LDcgQEAKIAkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YSwKIAkud3JpdGVfYmVhY29uCQk9IHJ0MjQwMHBjaV93cml0ZV9iZWFjb24sCiAJLmtpY2tfdHhfcXVldWUJCT0gcnQyNDAwcGNpX2tpY2tfdHhfcXVldWUsCisJLmtpbGxfdHhfcXVldWUJCT0gcnQyNDAwcGNpX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0MjQwMHBjaV9maWxsX3J4ZG9uZSwKIAkuY29uZmlnX2ZpbHRlcgkJPSBydDI0MDBwY2lfY29uZmlnX2ZpbHRlciwKIAkuY29uZmlnX2ludGYJCT0gcnQyNDAwcGNpX2NvbmZpZ19pbnRmLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCmluZGV4IDlhZWZkYTQuLmVjM2IwMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC00OCw4ICs0OCw4IEBACiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJMHgwMTAwCiAjZGVmaW5lIEJCUF9CQVNFCQkJMHgwMDAwCiAjZGVmaW5lIEJCUF9TSVpFCQkJMHgwMDIwCi0jZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDAwCi0jZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDEwCisjZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDA0CisjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDBjCiAKIC8qCiAgKiBOdW1iZXIgb2YgVFggcXVldWVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCmluZGV4IGQzYmMyMTguLjI3NmE4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMTQsOSArMTE0LDYgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKCF3b3JkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIAkvKgpAQCAtNTczLDYgKzU3MCwzMiBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjEyLCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDI1MDBwY2lfY29uZmlnX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQoreworCWVudW0gZGV2X3N0YXRlIHN0YXRlID0KKwkgICAgKGxpYmNvbmYtPmNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpID8KKwkJU1RBVEVfU0xFRVAgOiBTVEFURV9BV0FLRTsKKwl1MzIgcmVnOworCisJaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ1NSMjAsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQ1NSMjBfREVMQVlfQUZURVJfVEJDTiwKKwkJCQkgICAobGliY29uZi0+Y29uZi0+YmVhY29uX2ludCAtIDIwKSAqIDE2KTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIENTUjIwX1RCQ05fQkVGT1JFX1dBS0VVUCwKKwkJCQkgICBsaWJjb25mLT5jb25mLT5saXN0ZW5faW50ZXJ2YWwgLSAxKTsKKworCQkvKiBXZSBtdXN0IGZpcnN0IGRpc2FibGUgYXV0b3dha2UgYmVmb3JlIGl0IGNhbiBiZSBlbmFibGVkICovCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjIwLCByZWcpOworCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBDU1IyMF9BVVRPV0FLRSwgMSk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjIwLCByZWcpOworCX0KKworCXJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LCBzdGF0ZSk7Cit9CisKIHN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9jb25maWcoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAogCQkJICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZmxhZ3MpCkBAIC01ODgsNiArNjExLDggQEAKIAkJcnQyNTAwcGNpX2NvbmZpZ19yZXRyeV9saW1pdChydDJ4MDBkZXYsIGxpYmNvbmYpOwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCiAJCXJ0MjUwMHBjaV9jb25maWdfZHVyYXRpb24ocnQyeDAwZGV2LCBsaWJjb25mKTsKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCisJCXJ0MjUwMHBjaV9jb25maWdfcHMocnQyeDAwZGV2LCBsaWJjb25mKTsKIH0KIAogLyoKQEAgLTYxMSwyOSArNjM2LDMzIEBACiAJcXVhbC0+ZmFsc2VfY2NhID0gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgQ05UM19GQUxTRV9DQ0EpOwogfQogCi1zdGF0aWMgdm9pZCBydDI1MDBwY2lfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDI1MDBwY2lfc2V0X3ZnYyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgdTggdmdjX2xldmVsKQogewotCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHg0OCk7Ci0JcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IDB4NDg7CisJaWYgKHF1YWwtPnZnY19sZXZlbF9yZWcgIT0gdmdjX2xldmVsKSB7CisJCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdmdjX2xldmVsKTsKKwkJcXVhbC0+dmdjX2xldmVsX3JlZyA9IHZnY19sZXZlbDsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgdm9pZCBydDI1MDBwY2lfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpCiB7Ci0JaW50IHJzc2kgPSBydDJ4MDBfZ2V0X2xpbmtfcnNzaSgmcnQyeDAwZGV2LT5saW5rKTsKLQl1OCByMTc7CisJcnQyNTAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDQ4KTsKK30KIAorc3RhdGljIHZvaWQgcnQyNTAwcGNpX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgY29uc3QgdTMyIGNvdW50KQorewogCS8qCiAJICogVG8gcHJldmVudCBjb2xsaXNpb25zIHdpdGggTUFDIEFTSUMgb24gY2hpcHNldHMKIAkgKiB1cCB0byB2ZXJzaW9uIEMgdGhlIGxpbmsgdHVuaW5nIHNob3VsZCBoYWx0IGFmdGVyIDIwCiAJICogc2Vjb25kcyB3aGlsZSBiZWluZyBhc3NvY2lhdGVkLgogCSAqLwogCWlmIChydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApIDwgUlQyNTYwX1ZFUlNJT05fRCAmJgotCSAgICBydDJ4MDBkZXYtPmludGZfYXNzb2NpYXRlZCAmJgotCSAgICBydDJ4MDBkZXYtPmxpbmsuY291bnQgPiAyMCkKKwkgICAgcnQyeDAwZGV2LT5pbnRmX2Fzc29jaWF0ZWQgJiYgY291bnQgPiAyMCkKIAkJcmV0dXJuOwogCi0JcnQyNTAwcGNpX2JicF9yZWFkKHJ0MngwMGRldiwgMTcsICZyMTcpOwotCiAJLyoKIAkgKiBDaGlwc2V0IHZlcnNpb25zIEMgYW5kIGxvd2VyIHNob3VsZCBkaXJlY3RseSBjb250aW51ZQogCSAqIHRvIHRoZSBkeW5hbWljIENDQSB0dW5pbmcuIENoaXBzZXQgdmVyc2lvbiBEIGFuZCBoaWdoZXIKQEAgLTY0OSwyOSArNjc4LDI1IEBACiAJICogdGhlbiBjb3JydXB0IHRoZSBSMTcgdHVuaW5nLiBUbyByZW1pZHkgdGhpcyB0aGUgdHVuaW5nIHNob3VsZAogCSAqIGJlIHN0b3BwZWQgKFdoaWxlIG1ha2luZyBzdXJlIHRoZSBSMTcgdmFsdWUgd2lsbCBub3QgZXhjZWVkIGxpbWl0cykKIAkgKi8KLQlpZiAocnNzaSA8IC04MCAmJiBydDJ4MDBkZXYtPmxpbmsuY291bnQgPiAyMCkgewotCQlpZiAocjE3ID49IDB4NDEpIHsKLQkJCXIxNyA9IHJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWw7Ci0JCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHIxNyk7Ci0JCX0KKwlpZiAocXVhbC0+cnNzaSA8IC04MCAmJiBjb3VudCA+IDIwKSB7CisJCWlmIChxdWFsLT52Z2NfbGV2ZWxfcmVnID49IDB4NDEpCisJCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIHF1YWwtPnZnY19sZXZlbCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3Igc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNTgpIHsKLQkJaWYgKHIxNyAhPSAweDUwKQotCQkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDUwKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNTgpIHsKKwkJcnQyNTAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDUwKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBtaWQtUjE3IGZvciBtaWRkbGUgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+PSAtNzQpIHsKLQkJaWYgKHIxNyAhPSAweDQxKQotCQkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDQxKTsKKwlpZiAocXVhbC0+cnNzaSA+PSAtNzQpIHsKKwkJcnQyNTAwcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDQxKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjc5LDggKzcwNCw4IEBACiAJICogTGVhdmUgc2hvcnQgb3IgbWlkZGxlIGRpc3RhbmNlIGNvbmRpdGlvbiwgcmVzdG9yZSByMTcKIAkgKiB0byB0aGUgZHluYW1pYyB0dW5pbmcgcmFuZ2UuCiAJICovCi0JaWYgKHIxNyA+PSAweDQxKSB7Ci0JCXJ0MjUwMHBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCk7CisJaWYgKHF1YWwtPnZnY19sZXZlbF9yZWcgPj0gMHg0MSkgeworCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIHF1YWwtPnZnY19sZXZlbCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY5MCwxMiArNzE1LDEyIEBACiAJICogUjE3IGlzIGluc2lkZSB0aGUgZHluYW1pYyB0dW5pbmcgcmFuZ2UsCiAJICogc3RhcnQgdHVuaW5nIHRoZSBsaW5rIGJhc2VkIG9uIHRoZSBmYWxzZSBjY2EgY291bnRlci4KIAkgKi8KLQlpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhID4gNTEyICYmIHIxNyA8IDB4NDApIHsKLQkJcnQyNTAwcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCArK3IxNyk7Ci0JCXJ0MngwMGRldi0+bGluay52Z2NfbGV2ZWwgPSByMTc7Ci0JfSBlbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPCAxMDAgJiYgcjE3ID4gMHgzMikgewotCQlydDI1MDBwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIC0tcjE3KTsKLQkJcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IHIxNzsKKwlpZiAocXVhbC0+ZmFsc2VfY2NhID4gNTEyICYmIHF1YWwtPnZnY19sZXZlbF9yZWcgPCAweDQwKSB7CisJCXJ0MjUwMHBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgKytxdWFsLT52Z2NfbGV2ZWxfcmVnKTsKKwkJcXVhbC0+dmdjX2xldmVsID0gcXVhbC0+dmdjX2xldmVsX3JlZzsKKwl9IGVsc2UgaWYgKHF1YWwtPmZhbHNlX2NjYSA8IDEwMCAmJiBxdWFsLT52Z2NfbGV2ZWxfcmVnID4gMHgzMikgeworCQlydDI1MDBwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIC0tcXVhbC0+dmdjX2xldmVsX3JlZyk7CisJCXF1YWwtPnZnY19sZXZlbCA9IHF1YWwtPnZnY19sZXZlbF9yZWc7CiAJfQogfQogCkBAIC0xMDY1LDIxICsxMDkwLDEwIEBACiAKIHN0YXRpYyB2b2lkIHJ0MjUwMHBjaV9kaXNhYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7Ci0JdTMyIHJlZzsKLQorCS8qCisJICogRGlzYWJsZSBwb3dlcgorCSAqLwogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBXUkNTUjAsIDApOwotCi0JLyoKLQkgKiBEaXNhYmxlIHN5bmNocm9uaXNhdGlvbi4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBDU1IxNCwgMCk7Ci0KLQkvKgotCSAqIENhbmNlbCBSWCBhbmQgVFguCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBUWENTUjAsICZyZWcpOwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfQUJPUlQsIDEpOwotCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYQ1NSMCwgcmVnKTsKIH0KIAogc3RhdGljIGludCBydDI1MDBwY2lfc2V0X3N0YXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCkBAIC0xMjA1LDcgKzEyMTksNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RJTUVTVEFNUCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09GRE0sCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmdHhkZXNjLT5mbGFncykpOworCQkJICAgKHR4ZGVzYy0+cmF0ZV9tb2RlID09IFJBVEVfTU9ERV9PRkRNKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfQ0lQSEVSX09XTkVSLCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9NT0RFLApAQCAtMTI3NSw2ICsxMjg5LDIwIEBACiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhDU1IwLCByZWcpOwogfQogCitzdGF0aWMgdm9pZCBydDI1MDBwY2lfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCkKK3sKKwl1MzIgcmVnOworCisJaWYgKHFpZCA9PSBRSURfQkVBQ09OKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIENTUjE0LCAwKTsKKwl9IGVsc2UgeworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYQ1NSMCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWENTUjBfQUJPUlQsIDEpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWENTUjAsIHJlZyk7CisJfQorfQorCiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCkBAIC0xNTI0LDcgKzE1NTIsOSBAQAogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfTEVEX01PREUpOwogCiAJcnQyNTAwcGNpX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3JhZGlvLCBMRURfVFlQRV9SQURJTyk7Ci0JaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkpCisJaWYgKHZhbHVlID09IExFRF9NT0RFX1RYUlhfQUNUSVZJVFkgfHwKKwkgICAgdmFsdWUgPT0gTEVEX01PREVfREVGQVVMVCB8fAorCSAgICB2YWx1ZSA9PSBMRURfTU9ERV9BU1VTKQogCQlydDI1MDBwY2lfaW5pdF9sZWQocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5sZWRfcXVhbCwKIAkJCQkgICBMRURfVFlQRV9BQ1RJVklUWSk7CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfTEVEUyAqLwpAQCAtMTcyMSw3ICsxNzUxLDkgQEAKIAkgKiBJbml0aWFsaXplIGFsbCBodyBmaWVsZHMuCiAJICovCiAJcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkJCSAgICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTTsKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJCQkgICAgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJCSAgICAgICBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s7CiAKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IDA7CiAKQEAgLTE4NzMsNiArMTkwNSw3IEBACiAJLndyaXRlX3R4X2RhdGEJCT0gcnQyeDAwcGNpX3dyaXRlX3R4X2RhdGEsCiAJLndyaXRlX2JlYWNvbgkJPSBydDI1MDBwY2lfd3JpdGVfYmVhY29uLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0MjUwMHBjaV9raWNrX3R4X3F1ZXVlLAorCS5raWxsX3R4X3F1ZXVlCQk9IHJ0MjUwMHBjaV9raWxsX3R4X3F1ZXVlLAogCS5maWxsX3J4ZG9uZQkJPSBydDI1MDBwY2lfZmlsbF9yeGRvbmUsCiAJLmNvbmZpZ19maWx0ZXIJCT0gcnQyNTAwcGNpX2NvbmZpZ19maWx0ZXIsCiAJLmNvbmZpZ19pbnRmCQk9IHJ0MjUwMHBjaV9jb25maWdfaW50ZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaAppbmRleCBlMTM1MjQ3Li5jZTJmMDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNTksOCArNTksOCBAQAogI2RlZmluZSBFRVBST01fU0laRQkJCTB4MDIwMAogI2RlZmluZSBCQlBfQkFTRQkJCTB4MDAwMAogI2RlZmluZSBCQlBfU0laRQkJCTB4MDA0MAotI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwMAotI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxNAorI2RlZmluZSBSRl9CQVNFCQkJCTB4MDAwNAorI2RlZmluZSBSRl9TSVpFCQkJCTB4MDAxMAogCiAvKgogICogTnVtYmVyIG9mIFRYIHF1ZXVlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYwppbmRleCAzZTJhYzJiLi45ZTYzMGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjA0LDkgKzIwNCw2IEBACiB7CiAJdTE2IHJlZzsKIAotCWlmICghd29yZCkKLQkJcmV0dXJuOwotCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiAJLyoKQEAgLTI4MCw2ICsyNzcsMTggQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfREVCVUdGUyAqLwogCisjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMCitzdGF0aWMgaW50IHJ0MjUwMHVzYl9yZmtpbGxfcG9sbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXUxNiByZWc7CisKKwlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxOSwgJnJlZyk7CisJcmV0dXJuIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IxOV9CSVQ3KTsKK30KKyNlbHNlCisjZGVmaW5lIHJ0MjUwMHVzYl9yZmtpbGxfcG9sbAlOVUxMCisjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCisKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9MRURTCiBzdGF0aWMgdm9pZCBydDI1MDB1c2JfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCiAJCQkJICAgICBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpCkBAIC02MzQsNiArNjQzLDMyIEBACiAJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1IxOCwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcnQyNTAwdXNiX2NvbmZpZ19wcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCXN0cnVjdCBydDJ4MDBsaWJfY29uZiAqbGliY29uZikKK3sKKwllbnVtIGRldl9zdGF0ZSBzdGF0ZSA9CisJICAgIChsaWJjb25mLT5jb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSA/CisJCVNUQVRFX1NMRUVQIDogU1RBVEVfQVdBS0U7CisJdTE2IHJlZzsKKworCWlmIChzdGF0ZSA9PSBTVEFURV9TTEVFUCkgeworCQlydDI1MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxOCwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBNQUNfQ1NSMThfREVMQVlfQUZURVJfQkVBQ09OLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmJlYWNvbl9pbnQgLSAyMCk7CisJCXJ0MngwMF9zZXRfZmllbGQxNigmcmVnLCBNQUNfQ1NSMThfQkVBQ09OU19CRUZPUkVfV0FLRVVQLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAtIDEpOworCisJCS8qIFdlIG11c3QgZmlyc3QgZGlzYWJsZSBhdXRvd2FrZSBiZWZvcmUgaXQgY2FuIGJlIGVuYWJsZWQgKi8KKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IxOF9BVVRPX1dBS0UsIDApOworCQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTgsIHJlZyk7CisKKwkJcnQyeDAwX3NldF9maWVsZDE2KCZyZWcsIE1BQ19DU1IxOF9BVVRPX1dBS0UsIDEpOworCQlydDI1MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTgsIHJlZyk7CisJfQorCisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIHN0YXRlKTsKK30KKwogc3RhdGljIHZvaWQgcnQyNTAwdXNiX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICBzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYsCiAJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCBmbGFncykKQEAgLTY0Nyw2ICs2ODIsOCBAQAogCQkJCQkgbGliY29uZi0+Y29uZi0+cG93ZXJfbGV2ZWwpOwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCiAJCXJ0MjUwMHVzYl9jb25maWdfZHVyYXRpb24ocnQyeDAwZGV2LCBsaWJjb25mKTsKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCisJCXJ0MjUwMHVzYl9jb25maWdfcHMocnQyeDAwZGV2LCBsaWJjb25mKTsKIH0KIAogLyoKQEAgLTY3MCw3ICs3MDcsOCBAQAogCXF1YWwtPmZhbHNlX2NjYSA9IHJ0MngwMF9nZXRfZmllbGQxNihyZWcsIFNUQV9DU1IzX0ZBTFNFX0NDQV9FUlJPUik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0MjUwMHVzYl9yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIHZvaWQgcnQyNTAwdXNiX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsKQogewogCXUxNiBlZXByb207CiAJdTE2IHZhbHVlOwpAQCAtNjkxLDcgKzcyOSw3IEBACiAJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQkJQVFVORV9WR0NVUFBFUik7CiAJcnQyNTAwdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCB2YWx1ZSk7CiAKLQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gdmFsdWU7CisJcXVhbC0+dmdjX2xldmVsID0gdmFsdWU7CiB9CiAKIC8qCkBAIC0xMTc2LDcgKzEyMTQsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX1RJTUVTVEFNUCwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9SRVFfVElNRVNUQU1QLCAmdHhkZXNjLT5mbGFncykpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmd29yZCwgVFhEX1cwX09GRE0sCi0JCQkgICB0ZXN0X2JpdChFTlRSWV9UWERfT0ZETV9SQVRFLCAmdHhkZXNjLT5mbGFncykpOworCQkJICAgKHR4ZGVzYy0+cmF0ZV9tb2RlID09IFJBVEVfTU9ERV9PRkRNKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfTkVXX1NFUSwKIAkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9GSVJTVF9GUkFHTUVOVCwgJnR4ZGVzYy0+ZmxhZ3MpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKQEAgLTE1NjIsMTIgKzE2MDAsMjIgQEAKIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX0xFRF9NT0RFKTsKIAogCXJ0MjUwMHVzYl9pbml0X2xlZChydDJ4MDBkZXYsICZydDJ4MDBkZXYtPmxlZF9yYWRpbywgTEVEX1RZUEVfUkFESU8pOwotCWlmICh2YWx1ZSA9PSBMRURfTU9ERV9UWFJYX0FDVElWSVRZKQorCWlmICh2YWx1ZSA9PSBMRURfTU9ERV9UWFJYX0FDVElWSVRZIHx8CisJICAgIHZhbHVlID09IExFRF9NT0RFX0RFRkFVTFQgfHwKKwkgICAgdmFsdWUgPT0gTEVEX01PREVfQVNVUykKIAkJcnQyNTAwdXNiX2luaXRfbGVkKHJ0MngwMGRldiwgJnJ0MngwMGRldi0+bGVkX3F1YWwsCiAJCQkJICAgTEVEX1RZUEVfQUNUSVZJVFkpOwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0xFRFMgKi8KIAogCS8qCisJICogRGV0ZWN0IGlmIHRoaXMgZGV2aWNlIGhhcyBhbiBoYXJkd2FyZSBjb250cm9sbGVkIHJhZGlvLgorCSAqLworI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAorCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9IQVJEV0FSRV9SQURJTykpCisJCV9fc2V0X2JpdChDT05GSUdfU1VQUE9SVF9IV19CVVRUT04sICZydDJ4MDBkZXYtPmZsYWdzKTsKKyNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwgKi8KKworCS8qCiAJICogQ2hlY2sgaWYgdGhlIEJCUCB0dW5pbmcgc2hvdWxkIGJlIGRpc2FibGVkLgogCSAqLwogCXJ0MngwMF9lZXByb21fcmVhZChydDJ4MDBkZXYsIEVFUFJPTV9OSUMsICZlZXByb20pOwpAQCAtMTc1Miw3ICsxODAwLDkgQEAKIAlydDJ4MDBkZXYtPmh3LT5mbGFncyA9CiAJICAgIElFRUU4MDIxMV9IV19SWF9JTkNMVURFU19GQ1MgfAogCSAgICBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CisJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkgICAgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLOwogCiAJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gPSBUWERfREVTQ19TSVpFOwogCkBAIC0xODM5LDcgKzE4ODksNyBAQAogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9TQ0hFRFVMRUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAlpZiAoIW1vZHBhcmFtX25vaHdjcnlwdCkgewogCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQ1JZUFRPLCAmcnQyeDAwZGV2LT5mbGFncyk7Ci0JCV9fc2V0X2JpdChDT05GSUdfQ1JZUFRPX0NPUFlfSVYsICZydDJ4MDBkZXYtPmZsYWdzKTsKKwkJX19zZXRfYml0KERSSVZFUl9SRVFVSVJFX0NPUFlfSVYsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAl9CiAJX19zZXRfYml0KENPTkZJR19ESVNBQkxFX0xJTktfVFVOSU5HLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKQEAgLTE4NzMsNiArMTkyMyw3IEBACiAJLnVuaW5pdGlhbGl6ZQkJPSBydDJ4MDB1c2JfdW5pbml0aWFsaXplLAogCS5jbGVhcl9lbnRyeQkJPSBydDJ4MDB1c2JfY2xlYXJfZW50cnksCiAJLnNldF9kZXZpY2Vfc3RhdGUJPSBydDI1MDB1c2Jfc2V0X2RldmljZV9zdGF0ZSwKKwkucmZraWxsX3BvbGwJCT0gcnQyNTAwdXNiX3Jma2lsbF9wb2xsLAogCS5saW5rX3N0YXRzCQk9IHJ0MjUwMHVzYl9saW5rX3N0YXRzLAogCS5yZXNldF90dW5lcgkJPSBydDI1MDB1c2JfcmVzZXRfdHVuZXIsCiAJLmxpbmtfdHVuZXIJCT0gcnQyNTAwdXNiX2xpbmtfdHVuZXIsCkBAIC0xODgxLDYgKzE5MzIsNyBAQAogCS53cml0ZV9iZWFjb24JCT0gcnQyNTAwdXNiX3dyaXRlX2JlYWNvbiwKIAkuZ2V0X3R4X2RhdGFfbGVuCT0gcnQyNTAwdXNiX2dldF90eF9kYXRhX2xlbiwKIAkua2lja190eF9xdWV1ZQkJPSBydDI1MDB1c2Jfa2lja190eF9xdWV1ZSwKKwkua2lsbF90eF9xdWV1ZQkJPSBydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQyNTAwdXNiX2ZpbGxfcnhkb25lLAogCS5jb25maWdfc2hhcmVkX2tleQk9IHJ0MjUwMHVzYl9jb25maWdfa2V5LAogCS5jb25maWdfcGFpcndpc2Vfa2V5CT0gcnQyNTAwdXNiX2NvbmZpZ19rZXksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmgKaW5kZXggNDM0N2RmZC4uNWJjNDZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTU5LDggKzU5LDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAwNmEKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwNjAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTQKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCkBAIC0xODksNiArMTg5LDE0IEBACiAgKiBNQUNfQ1NSMTk6IEdQSU8gY29udHJvbCByZWdpc3Rlci4KICAqLwogI2RlZmluZSBNQUNfQ1NSMTkJCQkweDA0MjYKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDAJCQlGSUVMRDMyKDB4MDAwMSkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDEJCQlGSUVMRDMyKDB4MDAwMikKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDIJCQlGSUVMRDMyKDB4MDAwNCkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDMJCQlGSUVMRDMyKDB4MDAwOCkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDQJCQlGSUVMRDMyKDB4MDAxMCkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDUJCQlGSUVMRDMyKDB4MDAyMCkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDYJCQlGSUVMRDMyKDB4MDA0MCkKKyNkZWZpbmUgTUFDX0NTUjE5X0JJVDcJCQlGSUVMRDMyKDB4MDA4MCkKIAogLyoKICAqIE1BQ19DU1IyMDogTEVEIGNvbnRyb2wgcmVnaXN0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKaW5kZXggMzllY2YzYi4uODRiZDZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0LXBvbGxkZXYuaD4KIAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCkBAIC00NCw3ICs0NSw3IEBACiAvKgogICogTW9kdWxlIGluZm9ybWF0aW9uLgogICovCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIyLjIuMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMy4wIgogI2RlZmluZSBEUlZfUFJPSkVDVAkiaHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tIgogCiAvKgpAQCAtMTc3LDUyICsxNzgsNDEgQEAKICAqLwogc3RydWN0IGxpbmtfcXVhbCB7CiAJLyoKLQkgKiBTdGF0aXN0aWNzIHJlcXVpcmVkIGZvciBMaW5rIHR1bmluZy4KLQkgKiBGb3IgdGhlIGF2ZXJhZ2UgUlNTSSB2YWx1ZSB3ZSB1c2UgdGhlICJXYWxraW5nIGF2ZXJhZ2UiIGFwcHJvYWNoLgotCSAqIFdoZW4gYWRkaW5nIFJTU0kgdG8gdGhlIGF2ZXJhZ2UgdmFsdWUgdGhlIGZvbGxvd2luZyBjYWxjdWxhdGlvbgotCSAqIGlzIG5lZWRlZDoKLQkgKgotCSAqICAgICAgICBhdmdfcnNzaSA9ICgoYXZnX3Jzc2kgKiA3KSArIHJzc2kpIC8gODsKLQkgKgotCSAqIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IHdlIG9ubHkgbmVlZCAxIHZhcmlhYmxlCi0JICogdG8gc3RvcmUgdGhlIGF2ZXJhZ2UgaW4gKE5vIG5lZWQgZm9yIGEgY291bnQgYW5kIGEgdG90YWwpLgotCSAqIEJ1dCBtb3JlIGltcG9ydGFudGx5LCBub3JtYWwgYXZlcmFnZSB2YWx1ZXMgd2lsbCBvdmVyIHRpbWUKLQkgKiBtb3ZlIGxlc3MgYW5kIGxlc3MgdG93YXJkcyBuZXdseSBhZGRlZCB2YWx1ZXMgdGhpcyByZXN1bHRzCi0JICogdGhhdCB3aXRoIGxpbmsgdHVuaW5nLCB0aGUgZGV2aWNlIGNhbiBoYXZlIGEgdmVyeSBnb29kIFJTU0kKLQkgKiBmb3IgYSBmZXcgbWludXRlcyBidXQgd2hlbiB0aGUgZGV2aWNlIGlzIG1vdmVkIGF3YXkgZnJvbSB0aGUgQVAKLQkgKiB0aGUgYXZlcmFnZSB3aWxsIG5vdCBkZWNyZWFzZSBmYXN0IGVub3VnaCB0byBjb21wZW5zYXRlLgotCSAqIFRoZSB3YWxraW5nIGF2ZXJhZ2UgY29tcGVuc2F0ZXMgdGhpcyBhbmQgd2lsbCBtb3ZlIHRvd2FyZHMKLQkgKiB0aGUgbmV3IHZhbHVlcyBjb3JyZWN0bHkgYWxsb3dpbmcgYSBlZmZlY3RpdmUgbGluayB0dW5pbmcuCisJICogU3RhdGlzdGljcyByZXF1aXJlZCBmb3IgTGluayB0dW5pbmcgYnkgZHJpdmVyCisJICogVGhlIHJzc2kgdmFsdWUgaXMgcHJvdmlkZWQgYnkgcnQyeDAwbGliIGR1cmluZyB0aGUKKwkgKiBsaW5rX3R1bmVyKCkgY2FsbGJhY2sgZnVuY3Rpb24uCisJICogVGhlIGZhbHNlX2NjYSBmaWVsZCBpcyBmaWxsZWQgZHVyaW5nIHRoZSBsaW5rX3N0YXRzKCkKKwkgKiBjYWxsYmFjayBmdW5jdGlvbiBhbmQgY291bGQgYmUgdXNlZCBkdXJpbmcgdGhlCisJICogbGlua190dW5lcigpIGNhbGxiYWNrIGZ1bmN0aW9uLgogCSAqLwotCWludCBhdmdfcnNzaTsKKwlpbnQgcnNzaTsKIAlpbnQgZmFsc2VfY2NhOwogCiAJLyoKLQkgKiBTdGF0aXN0aWNzIHJlcXVpcmVkIGZvciBTaWduYWwgcXVhbGl0eSBjYWxjdWxhdGlvbi4KLQkgKiBGb3IgY2FsY3VsYXRpbmcgdGhlIFNpZ25hbCBxdWFsaXR5IHdlIGhhdmUgdG8gZGV0ZXJtaW5lCi0JICogdGhlIHRvdGFsIG51bWJlciBvZiBzdWNjZXNzIGFuZCBmYWlsZWQgUlggYW5kIFRYIGZyYW1lcy4KLQkgKiBBZnRlciB0aGF0IHdlIGFsc28gdXNlIHRoZSBhdmVyYWdlIFJTU0kgdmFsdWUgdG8gaGVscAotCSAqIGRldGVybWluaW5nIHRoZSBzaWduYWwgcXVhbGl0eS4KLQkgKiBGb3IgdGhlIGNhbGN1bGF0aW9uIHdlIHdpbGwgdXNlIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtOgorCSAqIFZHQyBsZXZlbHMKKwkgKiBIYXJkd2FyZSBkcml2ZXIgd2lsbCB0dW5lIHRoZSBWR0MgbGV2ZWwgZHVyaW5nIGVhY2ggY2FsbAorCSAqIHRvIHRoZSBsaW5rX3R1bmVyKCkgY2FsbGJhY2sgZnVuY3Rpb24uIFRoaXMgdmdjX2xldmVsIGlzCisJICogaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgbGluayBxdWFsaXR5IHN0YXRpc3RpY3MgbGlrZQorCSAqIGF2ZXJhZ2UgUlNTSSBhbmQgdGhlIGZhbHNlIENDQSBjb3VudC4KIAkgKgotCSAqICAgICAgICAgcnNzaV9wZXJjZW50YWdlID0gKGF2Z19yc3NpICogMTAwKSAvIHJzc2lfb2Zmc2V0Ci0JICogICAgICAgICByeF9wZXJjZW50YWdlID0gKHJ4X3N1Y2Nlc3MgKiAxMDApIC8gcnhfdG90YWwKLQkgKiAgICAgICAgIHR4X3BlcmNlbnRhZ2UgPSAodHhfc3VjY2VzcyAqIDEwMCkgLyB0eF90b3RhbAotCSAqICAgICAgICAgYXZnX3NpZ25hbCA9ICgoV0VJR0hUX1JTU0kgKiBhdmdfcnNzaSkgKwotCSAqICAgICAgICAgICAgICAgICAgICAgICAoV0VJR0hUX1RYICogdHhfcGVyY2VudGFnZSkgKwotCSAqICAgICAgICAgICAgICAgICAgICAgICAoV0VJR0hUX1JYICogcnhfcGVyY2VudGFnZSkpIC8gMTAwCi0JICoKLQkgKiBUaGlzIHZhbHVlIHNob3VsZCB0aGVuIGJlIGNoZWNrZWQgdG8gbm90IGJlIGdyZWF0ZWQgdGhlbiAxMDAuCisJICogSW4gc29tZSBjYXNlcyB0aGUgZHJpdmVycyBuZWVkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbgorCSAqIHRoZSBjdXJyZW50bHkgImRlc2lyZWQiIFZHQyBsZXZlbCBhbmQgdGhlIGxldmVsIGNvbmZpZ3VyZWQKKwkgKiBpbiB0aGUgaGFyZHdhcmUuIFRoZSBsYXR0ZXIgaXMgaW1wb3J0YW50IHRvIHJlZHVjZSB0aGUKKwkgKiBudW1iZXIgb2YgQkJQIHJlZ2lzdGVyIHJlYWRzIHRvIHJlZHVjZSByZWdpc3RlciBhY2Nlc3MKKwkgKiBvdmVyaGVhZC4gRm9yIHRoaXMgcmVhc29uIHdlIHN0b3JlIGJvdGggdmFsdWVzIGhlcmUuCiAJICovCi0JaW50IHJ4X3BlcmNlbnRhZ2U7CisJdTggdmdjX2xldmVsOworCXU4IHZnY19sZXZlbF9yZWc7CisKKwkvKgorCSAqIFN0YXRpc3RpY3MgcmVxdWlyZWQgZm9yIFNpZ25hbCBxdWFsaXR5IGNhbGN1bGF0aW9uLgorCSAqIFRoZXNlIGZpZWxkcyBtaWdodCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgbGlua19zdGF0cygpCisJICogY2FsbGJhY2sgZnVuY3Rpb24uCisJICovCiAJaW50IHJ4X3N1Y2Nlc3M7CiAJaW50IHJ4X2ZhaWxlZDsKLQlpbnQgdHhfcGVyY2VudGFnZTsKIAlpbnQgdHhfc3VjY2VzczsKIAlpbnQgdHhfZmFpbGVkOwotI2RlZmluZSBXRUlHSFRfUlNTSQkyMAotI2RlZmluZSBXRUlHSFRfUlgJNDAKLSNkZWZpbmUgV0VJR0hUX1RYCTQwCiB9OwogCiAvKgpAQCAtMjg2LDkgKzI3NiwxNiBAQAogCXN0cnVjdCBsaW5rX2FudCBhbnQ7CiAKIAkvKgotCSAqIEFjdGl2ZSBWR0MgbGV2ZWwKKwkgKiBDdXJyZW50bHkgYWN0aXZlIGF2ZXJhZ2UgUlNTSSB2YWx1ZQogCSAqLwotCWludCB2Z2NfbGV2ZWw7CisJaW50IGF2Z19yc3NpOworCisJLyoKKwkgKiBDdXJyZW50bHkgcHJlY2FsY3VsYXRlZCBwZXJjZW50YWdlcyBvZiBzdWNjZXNzZnVsCisJICogVFggYW5kIFJYIGZyYW1lcy4KKwkgKi8KKwlpbnQgcnhfcGVyY2VudGFnZTsKKwlpbnQgdHhfcGVyY2VudGFnZTsKIAogCS8qCiAJICogV29yayBzdHJ1Y3R1cmUgZm9yIHNjaGVkdWxpbmcgcGVyaW9kaWMgbGluayB0dW5pbmcuCkBAIC0yOTcsNTUgKzI5NCw2IEBACiB9OwogCiAvKgotICogU21hbGwgaGVscGVyIG1hY3JvIHRvIHdvcmsgd2l0aCBtb3Zpbmcvd2Fsa2luZyBhdmVyYWdlcy4KLSAqLwotI2RlZmluZSBNT1ZJTkdfQVZFUkFHRShfX2F2ZywgX192YWwsIF9fc2FtcGxlcykgXAotCSggKCgoX19hdmcpICogKChfX3NhbXBsZXMpIC0gMSkpICsgKF9fdmFsKSkgLyAoX19zYW1wbGVzKSApCi0KLS8qCi0gKiBXaGVuIHdlIGxhY2sgUlNTSSBpbmZvcm1hdGlvbiByZXR1cm4gc29tZXRoaW5nIGxlc3MgdGhlbiAtODAgdG8KLSAqIHRlbGwgdGhlIGRyaXZlciB0byB0dW5lIHRoZSBkZXZpY2UgdG8gbWF4aW11bSBzZW5zaXRpdml0eS4KLSAqLwotI2RlZmluZSBERUZBVUxUX1JTU0kJKCAtMTI4ICkKLQotLyoKLSAqIExpbmsgcXVhbGl0eSBhY2Nlc3MgZnVuY3Rpb25zLgotICovCi1zdGF0aWMgaW5saW5lIGludCBydDJ4MDBfZ2V0X2xpbmtfcnNzaShzdHJ1Y3QgbGluayAqbGluaykKLXsKLQlpZiAobGluay0+cXVhbC5hdmdfcnNzaSAmJiBsaW5rLT5xdWFsLnJ4X3N1Y2Nlc3MpCi0JCXJldHVybiBsaW5rLT5xdWFsLmF2Z19yc3NpOwotCXJldHVybiBERUZBVUxUX1JTU0k7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJ0MngwMF9nZXRfbGlua19hbnRfcnNzaShzdHJ1Y3QgbGluayAqbGluaykKLXsKLQlpZiAobGluay0+YW50LnJzc2lfYW50ICYmIGxpbmstPnF1YWwucnhfc3VjY2VzcykKLQkJcmV0dXJuIGxpbmstPmFudC5yc3NpX2FudDsKLQlyZXR1cm4gREVGQVVMVF9SU1NJOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX3Jlc2V0X2xpbmtfYW50X3Jzc2koc3RydWN0IGxpbmsgKmxpbmspCi17Ci0JbGluay0+YW50LnJzc2lfYW50ID0gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcnQyeDAwX2dldF9saW5rX2FudF9yc3NpX2hpc3Rvcnkoc3RydWN0IGxpbmsgKmxpbmssCi0JCQkJCQkgICBlbnVtIGFudGVubmEgYW50KQotewotCWlmIChsaW5rLT5hbnQucnNzaV9oaXN0b3J5W2FudCAtIEFOVEVOTkFfQV0pCi0JCXJldHVybiBsaW5rLT5hbnQucnNzaV9oaXN0b3J5W2FudCAtIEFOVEVOTkFfQV07Ci0JcmV0dXJuIERFRkFVTFRfUlNTSTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcnQyeDAwX3VwZGF0ZV9hbnRfcnNzaShzdHJ1Y3QgbGluayAqbGluaywgaW50IHJzc2kpCi17Ci0JaW50IG9sZF9yc3NpID0gbGluay0+YW50LnJzc2lfaGlzdG9yeVtsaW5rLT5hbnQuYWN0aXZlLnJ4IC0gQU5URU5OQV9BXTsKLQlsaW5rLT5hbnQucnNzaV9oaXN0b3J5W2xpbmstPmFudC5hY3RpdmUucnggLSBBTlRFTk5BX0FdID0gcnNzaTsKLQlyZXR1cm4gb2xkX3Jzc2k7Ci19Ci0KLS8qCiAgKiBJbnRlcmZhY2Ugc3RydWN0dXJlCiAgKiBQZXIgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZGV0YWlscywgdGhpcyBzdHJ1Y3R1cmUKICAqIGlzIGFsbG9jYXRlZCBhcyB0aGUgcHJpdmF0ZSBkYXRhIGZvciBpZWVlODAyMTFfdmlmLgpAQCAtNDQ4LDcgKzM5Niw3IEBACiAJaW50IGFja190aW1lb3V0OwogCWludCBhY2tfY29uc3VtZV90aW1lOwogCi0JdTY0IGJhc2ljX3JhdGVzOworCXUzMiBiYXNpY19yYXRlczsKIAogCWludCBzbG90X3RpbWU7CiAKQEAgLTUyMCw5ICs0NjgsMTAgQEAKIAkgKi8KIAlpbnQgKCpwcm9iZV9odykgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCWNoYXIgKigqZ2V0X2Zpcm13YXJlX25hbWUpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKLQl1MTYgKCpnZXRfZmlybXdhcmVfY3JjKSAoY29uc3Qgdm9pZCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbik7Ci0JaW50ICgqbG9hZF9maXJtd2FyZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGNvbnN0IHZvaWQgKmRhdGEsCi0JCQkgICAgICBjb25zdCBzaXplX3QgbGVuKTsKKwlpbnQgKCpjaGVja19maXJtd2FyZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOworCWludCAoKmxvYWRfZmlybXdhcmUpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pOwogCiAJLyoKIAkgKiBEZXZpY2UgaW5pdGlhbGl6YXRpb24vZGVpbml0aWFsaXphdGlvbiBoYW5kbGVycy4KQEAgLTU0NCw4ICs0OTMsMTAgQEAKIAlpbnQgKCpyZmtpbGxfcG9sbCkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCXZvaWQgKCpsaW5rX3N0YXRzKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsKTsKLQl2b2lkICgqcmVzZXRfdHVuZXIpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKLQl2b2lkICgqbGlua190dW5lcikgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCXZvaWQgKCpyZXNldF90dW5lcikgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgIHN0cnVjdCBsaW5rX3F1YWwgKnF1YWwpOworCXZvaWQgKCpsaW5rX3R1bmVyKSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCBjb25zdCB1MzIgY291bnQpOwogCiAJLyoKIAkgKiBUWCBjb250cm9sIGhhbmRsZXJzCkBAIC01NTgsNiArNTA5LDggQEAKIAlpbnQgKCpnZXRfdHhfZGF0YV9sZW4pIChzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5KTsKIAl2b2lkICgqa2lja190eF9xdWV1ZSkgKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxdWV1ZSk7CisJdm9pZCAoKmtpbGxfdHhfcXVldWUpIChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgIGNvbnN0IGVudW0gZGF0YV9xdWV1ZV9xaWQgcXVldWUpOwogCiAJLyoKIAkgKiBSWCBjb250cm9sIGhhbmRsZXJzCkBAIC02MjUsNyArNTc4LDYgQEAKIAlERVZJQ0VfU1RBVEVfUkVHSVNURVJFRF9IVywKIAlERVZJQ0VfU1RBVEVfSU5JVElBTElaRUQsCiAJREVWSUNFX1NUQVRFX1NUQVJURUQsCi0JREVWSUNFX1NUQVRFX1NUQVJURURfU1VTUEVORCwKIAlERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywKIAlERVZJQ0VfU1RBVEVfRElTQUJMRURfUkFESU9fSFcsCiAKQEAgLTYzNyw2ICs1ODksNyBAQAogCURSSVZFUl9SRVFVSVJFX0FUSU1fUVVFVUUsCiAJRFJJVkVSX1JFUVVJUkVfU0NIRURVTEVELAogCURSSVZFUl9SRVFVSVJFX0RNQSwKKwlEUklWRVJfUkVRVUlSRV9DT1BZX0lWLAogCiAJLyoKIAkgKiBEcml2ZXIgZmVhdHVyZXMKQEAgLTY1Myw3ICs2MDYsNiBAQAogCUNPTkZJR19FWFRFUk5BTF9MTkFfQkcsCiAJQ09ORklHX0RPVUJMRV9BTlRFTk5BLAogCUNPTkZJR19ESVNBQkxFX0xJTktfVFVOSU5HLAotCUNPTkZJR19DUllQVE9fQ09QWV9JViwKIH07CiAKIC8qCkBAIC02ODksOCArNjQxLDggQEAKIAl1bnNpZ25lZCBsb25nIHJma2lsbF9zdGF0ZTsKICNkZWZpbmUgUkZLSUxMX1NUQVRFX0FMTE9DQVRFRAkJMQogI2RlZmluZSBSRktJTExfU1RBVEVfUkVHSVNURVJFRAkJMgotCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrIHJma2lsbF93b3JrOworI2RlZmluZSBSRktJTExfU1RBVEVfQkxPQ0tFRAkJMworCXN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpyZmtpbGxfcG9sbF9kZXY7CiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCiAKIAkvKgpAQCAtOTE4LDcgKzg3MCw3IEBACiAJcmV0dXJuIChjaGlwc2V0LT5yZiA9PSBjaGlwKTsKIH0KIAotc3RhdGljIGlubGluZSB1MTYgcnQyeDAwX3Jldihjb25zdCBzdHJ1Y3QgcnQyeDAwX2NoaXAgKmNoaXBzZXQpCitzdGF0aWMgaW5saW5lIHUzMiBydDJ4MDBfcmV2KGNvbnN0IHN0cnVjdCBydDJ4MDBfY2hpcCAqY2hpcHNldCkKIHsKIAlyZXR1cm4gY2hpcHNldC0+cmV2OwogfQpAQCAtOTgyLDcgKzkzNCw3IEBACiAJCQkJaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCk7CiAjaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPCiBpbnQgcnQyeDAwbWFjX3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkgICAgICBjb25zdCB1OCAqbG9jYWxfYWRkcmVzcywgY29uc3QgdTggKmFkZHJlc3MsCisJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiAjZWxzZQogI2RlZmluZSBydDJ4MDBtYWNfc2V0X2tleQlOVUxMCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKaW5kZXggZTY2ZmIzMS4uOWMyZjU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMyLDcgKzMyLDcgQEAKIHZvaWQgcnQyeDAwbGliX2NvbmZpZ19pbnRmKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICBzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYsCiAJCQkgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsCi0JCQkgICB1OCAqbWFjLCB1OCAqYnNzaWQpCisJCQkgICBjb25zdCB1OCAqbWFjLCBjb25zdCB1OCAqYnNzaWQpCiB7CiAJc3RydWN0IHJ0MngwMGludGZfY29uZiBjb25mOwogCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CkBAIC00Miw2ICs0Miw4IEBACiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKIAkJY29uZi5zeW5jID0gVFNGX1NZTkNfQkVBQ09OOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CkBAIC0xNTIsOCArMTU0LDcgQEAKIAkgKi8KIAlydDJ4MDBkZXYtPm9wcy0+bGliLT5jb25maWdfYW50KHJ0MngwMGRldiwgYW50KTsKIAotCXJ0MngwMGxpYl9yZXNldF9saW5rX3R1bmVyKHJ0MngwMGRldik7Ci0JcnQyeDAwX3Jlc2V0X2xpbmtfYW50X3Jzc2koJnJ0MngwMGRldi0+bGluayk7CisJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIHRydWUpOwogCiAJbWVtY3B5KGFjdGl2ZSwgYW50LCBzaXplb2YoKmFudCkpOwogCkBAIC0xOTEsNyArMTkyLDcgQEAKIAkgKiB3aGljaCBtZWFucyB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBsaW5rIHR1bmVyLgogCSAqLwogCWlmIChpZWVlODAyMTFfZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkKLQkJcnQyeDAwbGliX3Jlc2V0X2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKKwkJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIGZhbHNlKTsKIAogCXJ0MngwMGRldi0+Y3Vycl9iYW5kID0gY29uZi0+Y2hhbm5lbC0+YmFuZDsKIAlydDJ4MDBkZXYtPnR4X3Bvd2VyID0gY29uZi0+cG93ZXJfbGV2ZWw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY3J5cHRvLmMKaW5kZXggYWVlOWNiYS4uMGI0MTg0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNyeXB0by5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjcnlwdG8uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTQ5LDkgKzQ5LDE0IEBACiB2b2lkIHJ0MngwMGNyeXB0b19jcmVhdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAogCQkJCSAgICAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCiB7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqaHdfa2V5ID0gdHhfaW5mby0+Y29udHJvbC5od19rZXk7CiAKKwlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8CisJICAgICFod19rZXkgfHwgZW50cnktPnNrYi0+ZG9fbm90X2VuY3J5cHQpCisJCXJldHVybjsKKwogCV9fc2V0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy0+ZmxhZ3MpOwogCiAJdHhkZXNjLT5jaXBoZXIgPSBydDJ4MDBjcnlwdG9fa2V5X3RvX2NpcGhlcihod19rZXkpOwpAQCAtNjksMTEgKzc0LDE3IEBACiAJCV9fc2V0X2JpdChFTlRSWV9UWERfRU5DUllQVF9NTUlDLCAmdHhkZXNjLT5mbGFncyk7CiB9CiAKLXVuc2lnbmVkIGludCBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvKQordW5zaWduZWQgaW50IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSA9IHR4X2luZm8tPmNvbnRyb2wuaHdfa2V5OwogCXVuc2lnbmVkIGludCBvdmVyaGVhZCA9IDA7CiAKKwlpZiAoIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpIHx8CisJICAgICFrZXkgfHwgc2tiLT5kb19ub3RfZW5jcnlwdCkKKwkJcmV0dXJuIG92ZXJoZWFkOworCiAJLyoKIAkgKiBFeHRlbmQgZnJhbWUgbGVuZ3RoIHRvIGluY2x1ZGUgSVYvRUlWL0lDVi9NTUlDLAogCSAqIG5vdGUgdGhhdCB0aGVzZSBsZW5ndGhzIHNob3VsZCBvbmx5IGJlIGFkZGVkIHdoZW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKaW5kZXggNTRkZDEwMC4uMDdkMzc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMzAsOSArMTMwLDExIEBACiB9OwogCiB2b2lkIHJ0MngwMGRlYnVnX3VwZGF0ZV9jcnlwdG8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgICBlbnVtIGNpcGhlciBjaXBoZXIsIGVudW0gcnhfY3J5cHRvIHN0YXR1cykKKwkJCSAgICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKIAlzdHJ1Y3QgcnQyeDAwZGVidWdfaW50ZiAqaW50ZiA9IHJ0MngwMGRldi0+ZGVidWdmc19pbnRmOworCWVudW0gY2lwaGVyIGNpcGhlciA9IHJ4ZGVzYy0+Y2lwaGVyOworCWVudW0gcnhfY3J5cHRvIHN0YXR1cyA9IHJ4ZGVzYy0+Y2lwaGVyX3N0YXR1czsKIAogCWlmIChjaXBoZXIgPT0gQ0lQSEVSX1RLSVBfTk9fTUlDKQogCQljaXBoZXIgPSBDSVBIRVJfVEtJUDsKQEAgLTQzMywxMSArNDM1LDEyIEBACiAJaWYgKGluZGV4ID49IGRlYnVnLT5fX25hbWUud29yZF9jb3VudCkJCQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJXAogCQkJCQkJCQlcCisJaW5kZXggKz0gKGRlYnVnLT5fX25hbWUud29yZF9iYXNlIC8JCQlcCisJCSAgZGVidWctPl9fbmFtZS53b3JkX3NpemUpOwkJCVwKKwkJCQkJCQkJXAogCWlmIChkZWJ1Zy0+X19uYW1lLmZsYWdzICYgUlQyWDAwREVCVUdGU19PRkZTRVQpCQlcCiAJCWluZGV4ICo9IGRlYnVnLT5fX25hbWUud29yZF9zaXplOwkJXAogCQkJCQkJCQlcCi0JaW5kZXggKz0gZGVidWctPl9fbmFtZS53b3JkX2Jhc2U7CQkJXAotCQkJCQkJCQlcCiAJZGVidWctPl9fbmFtZS5yZWFkKGludGYtPnJ0MngwMGRldiwgaW5kZXgsICZ2YWx1ZSk7CVwKIAkJCQkJCQkJXAogCXNpemUgPSBzcHJpbnRmKGxpbmUsIF9fZm9ybWF0LCB2YWx1ZSk7CQkJXApAQCAtNDc0LDExICs0NzcsMTIgQEAKIAlzaXplID0gc3RybGVuKGxpbmUpOwkJCQkJXAogCXZhbHVlID0gc2ltcGxlX3N0cnRvdWwobGluZSwgTlVMTCwgMCk7CQkJXAogCQkJCQkJCQlcCisJaW5kZXggKz0gKGRlYnVnLT5fX25hbWUud29yZF9iYXNlIC8JCQlcCisJCSAgZGVidWctPl9fbmFtZS53b3JkX3NpemUpOwkJCVwKKwkJCQkJCQkJXAogCWlmIChkZWJ1Zy0+X19uYW1lLmZsYWdzICYgUlQyWDAwREVCVUdGU19PRkZTRVQpCQlcCiAJCWluZGV4ICo9IGRlYnVnLT5fX25hbWUud29yZF9zaXplOwkJXAogCQkJCQkJCQlcCi0JaW5kZXggKz0gZGVidWctPl9fbmFtZS53b3JkX2Jhc2U7CQkJXAotCQkJCQkJCQlcCiAJZGVidWctPl9fbmFtZS53cml0ZShpbnRmLT5ydDJ4MDBkZXYsIGluZGV4LCB2YWx1ZSk7CVwKIAkJCQkJCQkJXAogCSpvZmZzZXQgKz0gc2l6ZTsJCQkJCVwKQEAgLTU0Myw5ICs1NDcsOSBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWJsb2ItPmRhdGEgPSBkYXRhOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiZHJpdmVyOiAlc1xuIiwgaW50Zi0+cnQyeDAwZGV2LT5vcHMtPm5hbWUpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAidmVyc2lvbjogJXNcbiIsIERSVl9WRVJTSU9OKTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgImNvbXBpbGVkOiAlcyAlc1xuIiwgX19EQVRFX18sIF9fVElNRV9fKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgImRyaXZlcjpcdCVzXG4iLCBpbnRmLT5ydDJ4MDBkZXYtPm9wcy0+bmFtZSk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJ2ZXJzaW9uOlx0JXNcbiIsIERSVl9WRVJTSU9OKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgImNvbXBpbGVkOlx0JXMgJXNcbiIsIF9fREFURV9fLCBfX1RJTUVfXyk7CiAJYmxvYi0+c2l6ZSA9IHN0cmxlbihibG9iLT5kYXRhKTsKIAogCXJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9ibG9iKG5hbWUsIFNfSVJVU1IsIGludGYtPmRyaXZlcl9mb2xkZXIsIGJsb2IpOwpAQCAtNTY2LDE0ICs1NzAsMjcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlibG9iLT5kYXRhID0gZGF0YTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgInJ0IGNoaXA6ICUwNHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5ydCk7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZiBjaGlwOiAlMDR4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucmYpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmV2aXNpb246JTA4eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJldik7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJydCBjaGlwOlx0JTA0eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJ0KTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInJmIGNoaXA6XHQlMDR4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucmYpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicmV2aXNpb246XHQlMDh4XG4iLCBpbnRmLT5ydDJ4MDBkZXYtPmNoaXAucmV2KTsKIAlkYXRhICs9IHNwcmludGYoZGF0YSwgIlxuIik7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJjc3IgbGVuZ3RoOiAlZFxuIiwgZGVidWctPmNzci53b3JkX2NvdW50KTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgImVlcHJvbSBsZW5ndGg6ICVkXG4iLCBkZWJ1Zy0+ZWVwcm9tLndvcmRfY291bnQpOwotCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiYmJwIGxlbmd0aDogJWRcbiIsIGRlYnVnLT5iYnAud29yZF9jb3VudCk7Ci0JZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZiBsZW5ndGg6ICVkXG4iLCBkZWJ1Zy0+cmYud29yZF9jb3VudCk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZWdpc3Rlclx0YmFzZVx0d29yZHNcdHdvcmRzaXplXG4iKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgImNzclx0JWRcdCVkXHQlZFxuIiwKKwkJCWRlYnVnLT5jc3Iud29yZF9iYXNlLAorCQkJZGVidWctPmNzci53b3JkX2NvdW50LAorCQkJZGVidWctPmNzci53b3JkX3NpemUpOworCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiZWVwcm9tXHQlZFx0JWRcdCVkXG4iLAorCQkJZGVidWctPmVlcHJvbS53b3JkX2Jhc2UsCisJCQlkZWJ1Zy0+ZWVwcm9tLndvcmRfY291bnQsCisJCQlkZWJ1Zy0+ZWVwcm9tLndvcmRfc2l6ZSk7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJiYnBcdCVkXHQlZFx0JWRcbiIsCisJCQlkZWJ1Zy0+YmJwLndvcmRfYmFzZSwKKwkJCWRlYnVnLT5iYnAud29yZF9jb3VudCwKKwkJCWRlYnVnLT5iYnAud29yZF9zaXplKTsKKwlkYXRhICs9IHNwcmludGYoZGF0YSwgInJmXHQlZFx0JWRcdCVkXG4iLAorCQkJZGVidWctPnJmLndvcmRfYmFzZSwKKwkJCWRlYnVnLT5yZi53b3JkX2NvdW50LAorCQkJZGVidWctPnJmLndvcmRfc2l6ZSk7CiAJYmxvYi0+c2l6ZSA9IHN0cmxlbihibG9iLT5kYXRhKTsKIAogCXJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9ibG9iKG5hbWUsIFNfSVJVU1IsIGludGYtPmRyaXZlcl9mb2xkZXIsIGJsb2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuaAppbmRleCBhOTIxMDRkLi4wMzVjYmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGVidWcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwppbmRleCA4N2MwZjJjLi4wNWY5NGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzAsNjAgKzMwLDYgQEAKICNpbmNsdWRlICJydDJ4MDBsaWIuaCIKIAogLyoKLSAqIExpbmsgdHVuaW5nIGhhbmRsZXJzCi0gKi8KLXZvaWQgcnQyeDAwbGliX3Jlc2V0X2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9FTkFCTEVEX1JBRElPLCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybjsKLQotCS8qCi0JICogUmVzZXQgbGluayBpbmZvcm1hdGlvbi4KLQkgKiBCb3RoIHRoZSBjdXJyZW50bHkgYWN0aXZlIHZnYyBsZXZlbCBhcyB3ZWxsIGFzCi0JICogdGhlIGxpbmsgdHVuZXIgY291bnRlciBzaG91bGQgYmUgcmVzZXQuIFJlc2V0dGluZwotCSAqIHRoZSBjb3VudGVyIGlzIGltcG9ydGFudCBmb3IgZGV2aWNlcyB3aGVyZSB0aGUKLQkgKiBkZXZpY2Ugc2hvdWxkIG9ubHkgcGVyZm9ybSBsaW5rIHR1bmluZyBkdXJpbmcgdGhlCi0JICogZmlyc3QgbWludXRlIGFmdGVyIGJlaW5nIGVuYWJsZWQuCi0JICovCi0JcnQyeDAwZGV2LT5saW5rLmNvdW50ID0gMDsKLQlydDJ4MDBkZXYtPmxpbmsudmdjX2xldmVsID0gMDsKLQotCS8qCi0JICogUmVzZXQgdGhlIGxpbmsgdHVuZXIuCi0JICovCi0JcnQyeDAwZGV2LT5vcHMtPmxpYi0+cmVzZXRfdHVuZXIocnQyeDAwZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX3N0YXJ0X2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQkvKgotCSAqIENsZWFyIGFsbCAocG9zc2libHkpIHByZS1leGlzdGluZyBxdWFsaXR5IHN0YXRpc3RpY3MuCi0JICovCi0JbWVtc2V0KCZydDJ4MDBkZXYtPmxpbmsucXVhbCwgMCwgc2l6ZW9mKHJ0MngwMGRldi0+bGluay5xdWFsKSk7Ci0KLQkvKgotCSAqIFRoZSBSWCBhbmQgVFggcGVyY2VudGFnZSBzaG91bGQgc3RhcnQgYXQgNTAlCi0JICogdGhpcyB3aWxsIGFzc3VyZSB3ZSB3aWxsIGdldCBhdCBsZWFzdCBnZXQgc29tZQotCSAqIGRlY2VudCB2YWx1ZSB3aGVuIHRoZSBsaW5rIHR1bmVyIHN0YXJ0cy4KLQkgKiBUaGUgdmFsdWUgd2lsbCBiZSBkcm9wcGVkIGFuZCBvdmVyd3JpdHRlbiB3aXRoCi0JICogdGhlIGNvcnJlY3QgKG1lYXN1cmVkICl2YWx1ZSBhbnl3YXkgZHVyaW5nIHRoZQotCSAqIGZpcnN0IHJ1biBvZiB0aGUgbGluayB0dW5lci4KLQkgKi8KLQlydDJ4MDBkZXYtPmxpbmsucXVhbC5yeF9wZXJjZW50YWdlID0gNTA7Ci0JcnQyeDAwZGV2LT5saW5rLnF1YWwudHhfcGVyY2VudGFnZSA9IDUwOwotCi0JcnQyeDAwbGliX3Jlc2V0X2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKLQotCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsCi0JCQkgICAmcnQyeDAwZGV2LT5saW5rLndvcmssIExJTktfVFVORV9JTlRFUlZBTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9zdG9wX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ0MngwMGRldi0+bGluay53b3JrKTsKLX0KLQotLyoKICAqIFJhZGlvIGNvbnRyb2wgaGFuZGxlcnMuCiAgKi8KIGludCBydDJ4MDBsaWJfZW5hYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCkBAIC0xMzcsOSArODMsMTAgQEAKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiBTdG9wIHRoZSBUWCBxdWV1ZXMuCisJICogU3RvcCB0aGUgVFggcXVldWVzIGluIG1hYzgwMjExLgogCSAqLwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhydDJ4MDBkZXYtPmh3KTsKKwlydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlcyhydDJ4MDBkZXYpOwogCiAJLyoKIAkgKiBEaXNhYmxlIFJYLgpAQCAtMTYxLDIzOCArMTA4LDE1IEBACiAJICogV2hlbiB3ZSBhcmUgZGlzYWJsaW5nIHRoZSBSWCwgd2Ugc2hvdWxkIGFsc28gc3RvcCB0aGUgbGluayB0dW5lci4KIAkgKi8KIAlpZiAoc3RhdGUgPT0gU1RBVEVfUkFESU9fUlhfT0ZGKQotCQlydDJ4MDBsaWJfc3RvcF9saW5rX3R1bmVyKHJ0MngwMGRldik7CisJCXJ0MngwMGxpbmtfc3RvcF90dW5lcihydDJ4MDBkZXYpOwogCiAJcnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIHN0YXRlKTsKIAogCS8qCiAJICogV2hlbiB3ZSBhcmUgZW5hYmxpbmcgdGhlIFJYLCB3ZSBzaG91bGQgYWxzbyBzdGFydCB0aGUgbGluayB0dW5lci4KIAkgKi8KLQlpZiAoc3RhdGUgPT0gU1RBVEVfUkFESU9fUlhfT04gJiYKLQkgICAgKHJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCB8fCBydDJ4MDBkZXYtPmludGZfc3RhX2NvdW50KSkKLQkJcnQyeDAwbGliX3N0YXJ0X2xpbmtfdHVuZXIocnQyeDAwZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX2V2YWx1YXRlX2FudGVubmFfc2FtcGxlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0Jc3RydWN0IGFudGVubmFfc2V0dXAgYW50OwotCWludCBzYW1wbGVfYSA9Ci0JICAgIHJ0MngwMF9nZXRfbGlua19hbnRfcnNzaV9oaXN0b3J5KCZydDJ4MDBkZXYtPmxpbmssIEFOVEVOTkFfQSk7Ci0JaW50IHNhbXBsZV9iID0KLQkgICAgcnQyeDAwX2dldF9saW5rX2FudF9yc3NpX2hpc3RvcnkoJnJ0MngwMGRldi0+bGluaywgQU5URU5OQV9CKTsKLQotCW1lbWNweSgmYW50LCAmcnQyeDAwZGV2LT5saW5rLmFudC5hY3RpdmUsIHNpemVvZihhbnQpKTsKLQotCS8qCi0JICogV2UgYXJlIGRvbmUgc2FtcGxpbmcuIE5vdyB3ZSBzaG91bGQgZXZhbHVhdGUgdGhlIHJlc3VsdHMuCi0JICovCi0JcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmPSB+QU5URU5OQV9NT0RFX1NBTVBMRTsKLQotCS8qCi0JICogRHVyaW5nIHRoZSBsYXN0IHBlcmlvZCB3ZSBoYXZlIHNhbXBsZWQgdGhlIFJTU0kKLQkgKiBmcm9tIGJvdGggYW50ZW5uYSdzLiBJdCBub3cgaXMgdGltZSB0byBkZXRlcm1pbmUKLQkgKiB3aGljaCBhbnRlbm5hIGRlbW9uc3RyYXRlZCB0aGUgYmVzdCBwZXJmb3JtYW5jZS4KLQkgKiBXaGVuIHdlIGFyZSBhbHJlYWR5IG9uIHRoZSBhbnRlbm5hIHdpdGggdGhlIGJlc3QKLQkgKiBwZXJmb3JtYW5jZSwgdGhlbiB0aGVyZSByZWFsbHkgaXMgbm90aGluZyBmb3IgdXMKLQkgKiBsZWZ0IHRvIGRvLgotCSAqLwotCWlmIChzYW1wbGVfYSA9PSBzYW1wbGVfYikKLQkJcmV0dXJuOwotCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkKLQkJYW50LnJ4ID0gKHNhbXBsZV9hID4gc2FtcGxlX2IpID8gQU5URU5OQV9BIDogQU5URU5OQV9COwotCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkKLQkJYW50LnR4ID0gKHNhbXBsZV9hID4gc2FtcGxlX2IpID8gQU5URU5OQV9BIDogQU5URU5OQV9COwotCi0JcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgJmFudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9ldmFsdWF0ZV9hbnRlbm5hX2V2YWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKLXsKLQlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCBhbnQ7Ci0JaW50IHJzc2lfY3VyciA9IHJ0MngwMF9nZXRfbGlua19hbnRfcnNzaSgmcnQyeDAwZGV2LT5saW5rKTsKLQlpbnQgcnNzaV9vbGQgPSBydDJ4MDBfdXBkYXRlX2FudF9yc3NpKCZydDJ4MDBkZXYtPmxpbmssIHJzc2lfY3Vycik7Ci0KLQltZW1jcHkoJmFudCwgJnJ0MngwMGRldi0+bGluay5hbnQuYWN0aXZlLCBzaXplb2YoYW50KSk7Ci0KLQkvKgotCSAqIExlZ2FjeSBkcml2ZXIgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkIHN3YXAgYW50ZW5uYSdzCi0JICogd2hlbiB0aGUgZGlmZmVyZW5jZSBpbiBSU1NJIGlzIGdyZWF0ZXIgdGhhdCA1LiBUaGlzCi0JICogYWxzbyBzaG91bGQgYmUgZG9uZSB3aGVuIHRoZSBSU1NJIHdhcyBhY3R1YWxseSBiZXR0ZXIKLQkgKiB0aGVuIHRoZSBwcmV2aW91cyBzYW1wbGUuCi0JICogV2hlbiB0aGUgZGlmZmVyZW5jZSBleGNlZWRzIHRoZSB0aHJlc2hvbGQgd2Ugc2hvdWxkCi0JICogc2FtcGxlIHRoZSByc3NpIGZyb20gdGhlIG90aGVyIGFudGVubmEgdG8gbWFrZSBhIHZhbGlkCi0JICogY29tcGFyaXNvbiBiZXR3ZWVuIHRoZSAyIGFudGVubmFzLgotCSAqLwotCWlmIChhYnMocnNzaV9jdXJyIC0gcnNzaV9vbGQpIDwgNSkKLQkJcmV0dXJuOwotCi0JcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyB8PSBBTlRFTk5BX01PREVfU0FNUExFOwotCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkKLQkJYW50LnJ4ID0gKGFudC5yeCA9PSBBTlRFTk5BX0EpID8gQU5URU5OQV9CIDogQU5URU5OQV9BOwotCi0JaWYgKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkKLQkJYW50LnR4ID0gKGFudC50eCA9PSBBTlRFTk5BX0EpID8gQU5URU5OQV9CIDogQU5URU5OQV9BOwotCi0JcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgJmFudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9ldmFsdWF0ZV9hbnRlbm5hKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JLyoKLQkgKiBEZXRlcm1pbmUgaWYgc29mdHdhcmUgZGl2ZXJzaXR5IGlzIGVuYWJsZWQgZm9yCi0JICogZWl0aGVyIHRoZSBUWCBvciBSWCBhbnRlbm5hIChvciBib3RoKS4KLQkgKiBBbHdheXMgcGVyZm9ybSB0aGlzIGNoZWNrIHNpbmNlIHdpdGhpbiB0aGUgbGluawotCSAqIHR1bmVyIGludGVydmFsIHRoZSBjb25maWd1cmF0aW9uIG1pZ2h0IGhhdmUgY2hhbmdlZC4KLQkgKi8KLQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICY9IH5BTlRFTk5BX1JYX0RJVkVSU0lUWTsKLQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICY9IH5BTlRFTk5BX1RYX0RJVkVSU0lUWTsKLQotCWlmIChydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQotCQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzIHw9IEFOVEVOTkFfUlhfRElWRVJTSVRZOwotCWlmIChydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQotCQlydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzIHw9IEFOVEVOTkFfVFhfRElWRVJTSVRZOwotCi0JaWYgKCEocnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKSAmJgotCSAgICAhKHJ0MngwMGRldi0+bGluay5hbnQuZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkpIHsKLQkJcnQyeDAwZGV2LT5saW5rLmFudC5mbGFncyA9IDA7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIElmIHdlIGhhdmUgb25seSBzYW1wbGVkIHRoZSBkYXRhIG92ZXIgdGhlIGxhc3QgcGVyaW9kCi0JICogd2Ugc2hvdWxkIG5vdyBoYXJ2ZXN0IHRoZSBkYXRhLiBPdGhlcndpc2UganVzdCBldmFsdWF0ZQotCSAqIHRoZSBkYXRhLiBUaGUgbGF0dGVyIHNob3VsZCBvbmx5IGJlIHBlcmZvcm1lZCBvbmNlCi0JICogZXZlcnkgMiBzZWNvbmRzLgotCSAqLwotCWlmIChydDJ4MDBkZXYtPmxpbmsuYW50LmZsYWdzICYgQU5URU5OQV9NT0RFX1NBTVBMRSkKLQkJcnQyeDAwbGliX2V2YWx1YXRlX2FudGVubmFfc2FtcGxlKHJ0MngwMGRldik7Ci0JZWxzZSBpZiAocnQyeDAwZGV2LT5saW5rLmNvdW50ICYgMSkKLQkJcnQyeDAwbGliX2V2YWx1YXRlX2FudGVubmFfZXZhbChydDJ4MDBkZXYpOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfdXBkYXRlX2xpbmtfc3RhdHMoc3RydWN0IGxpbmsgKmxpbmssIGludCByc3NpKQotewotCWludCBhdmdfcnNzaSA9IHJzc2k7Ci0KLQkvKgotCSAqIFVwZGF0ZSBnbG9iYWwgUlNTSQotCSAqLwotCWlmIChsaW5rLT5xdWFsLmF2Z19yc3NpKQotCQlhdmdfcnNzaSA9IE1PVklOR19BVkVSQUdFKGxpbmstPnF1YWwuYXZnX3Jzc2ksIHJzc2ksIDgpOwotCWxpbmstPnF1YWwuYXZnX3Jzc2kgPSBhdmdfcnNzaTsKLQotCS8qCi0JICogVXBkYXRlIGFudGVubmEgUlNTSQotCSAqLwotCWlmIChsaW5rLT5hbnQucnNzaV9hbnQpCi0JCXJzc2kgPSBNT1ZJTkdfQVZFUkFHRShsaW5rLT5hbnQucnNzaV9hbnQsIHJzc2ksIDgpOwotCWxpbmstPmFudC5yc3NpX2FudCA9IHJzc2k7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ0MngwMGxpYl9wcmVjYWxjdWxhdGVfbGlua19zaWduYWwoc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKLXsKLQlpZiAocXVhbC0+cnhfZmFpbGVkIHx8IHF1YWwtPnJ4X3N1Y2Nlc3MpCi0JCXF1YWwtPnJ4X3BlcmNlbnRhZ2UgPQotCQkgICAgKHF1YWwtPnJ4X3N1Y2Nlc3MgKiAxMDApIC8KLQkJICAgIChxdWFsLT5yeF9mYWlsZWQgKyBxdWFsLT5yeF9zdWNjZXNzKTsKLQllbHNlCi0JCXF1YWwtPnJ4X3BlcmNlbnRhZ2UgPSA1MDsKLQotCWlmIChxdWFsLT50eF9mYWlsZWQgfHwgcXVhbC0+dHhfc3VjY2VzcykKLQkJcXVhbC0+dHhfcGVyY2VudGFnZSA9Ci0JCSAgICAocXVhbC0+dHhfc3VjY2VzcyAqIDEwMCkgLwotCQkgICAgKHF1YWwtPnR4X2ZhaWxlZCArIHF1YWwtPnR4X3N1Y2Nlc3MpOwotCWVsc2UKLQkJcXVhbC0+dHhfcGVyY2VudGFnZSA9IDUwOwotCi0JcXVhbC0+cnhfc3VjY2VzcyA9IDA7Ci0JcXVhbC0+cnhfZmFpbGVkID0gMDsKLQlxdWFsLT50eF9zdWNjZXNzID0gMDsKLQlxdWFsLT50eF9mYWlsZWQgPSAwOwotfQotCi1zdGF0aWMgaW50IHJ0MngwMGxpYl9jYWxjdWxhdGVfbGlua19zaWduYWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkJICAgaW50IHJzc2kpCi17Ci0JaW50IHJzc2lfcGVyY2VudGFnZSA9IDA7Ci0JaW50IHNpZ25hbDsKLQotCS8qCi0JICogV2UgbmVlZCBhIHBvc2l0aXZlIHZhbHVlIGZvciB0aGUgUlNTSS4KLQkgKi8KLQlpZiAocnNzaSA8IDApCi0JCXJzc2kgKz0gcnQyeDAwZGV2LT5yc3NpX29mZnNldDsKLQotCS8qCi0JICogQ2FsY3VsYXRlIHRoZSBkaWZmZXJlbnQgcGVyY2VudGFnZXMsCi0JICogd2hpY2ggd2lsbCBiZSB1c2VkIGZvciB0aGUgc2lnbmFsLgotCSAqLwotCWlmIChydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0KQotCQlyc3NpX3BlcmNlbnRhZ2UgPSAocnNzaSAqIDEwMCkgLyBydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0OwotCi0JLyoKLQkgKiBBZGQgdGhlIGluZGl2aWR1YWwgcGVyY2VudGFnZXMgYW5kIHVzZSB0aGUgV0VJR0hUCi0JICogZGVmaW5lcyB0byBjYWxjdWxhdGUgdGhlIGN1cnJlbnQgbGluayBzaWduYWwuCi0JICovCi0Jc2lnbmFsID0gKChXRUlHSFRfUlNTSSAqIHJzc2lfcGVyY2VudGFnZSkgKwotCQkgIChXRUlHSFRfVFggKiBydDJ4MDBkZXYtPmxpbmsucXVhbC50eF9wZXJjZW50YWdlKSArCi0JCSAgKFdFSUdIVF9SWCAqIHJ0MngwMGRldi0+bGluay5xdWFsLnJ4X3BlcmNlbnRhZ2UpKSAvIDEwMDsKLQotCXJldHVybiAoc2lnbmFsID4gMTAwKSA/IDEwMCA6IHNpZ25hbDsKLX0KLQotc3RhdGljIHZvaWQgcnQyeDAwbGliX2xpbmtfdHVuZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPQotCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0MngwMF9kZXYsIGxpbmsud29yay53b3JrKTsKLQotCS8qCi0JICogV2hlbiB0aGUgcmFkaW8gaXMgc2h1dHRpbmcgZG93biB3ZSBzaG91bGQKLQkgKiBpbW1lZGlhdGVseSBjZWFzZSBhbGwgbGluayB0dW5pbmcuCi0JICovCi0JaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIFVwZGF0ZSBzdGF0aXN0aWNzLgotCSAqLwotCXJ0MngwMGRldi0+b3BzLT5saWItPmxpbmtfc3RhdHMocnQyeDAwZGV2LCAmcnQyeDAwZGV2LT5saW5rLnF1YWwpOwotCXJ0MngwMGRldi0+bG93X2xldmVsX3N0YXRzLmRvdDExRkNTRXJyb3JDb3VudCArPQotCSAgICBydDJ4MDBkZXYtPmxpbmsucXVhbC5yeF9mYWlsZWQ7Ci0KLQkvKgotCSAqIE9ubHkgcGVyZm9ybSB0aGUgbGluayB0dW5pbmcgd2hlbiBMaW5rIHR1bmluZwotCSAqIGhhcyBiZWVuIGVuYWJsZWQgKFRoaXMgY291bGQgaGF2ZSBiZWVuIGRpc2FibGVkIGZyb20gdGhlIEVFUFJPTSkuCi0JICovCi0JaWYgKCF0ZXN0X2JpdChDT05GSUdfRElTQUJMRV9MSU5LX1RVTklORywgJnJ0MngwMGRldi0+ZmxhZ3MpKQotCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5saW5rX3R1bmVyKHJ0MngwMGRldik7Ci0KLQkvKgotCSAqIFByZWNhbGN1bGF0ZSBhIHBvcnRpb24gb2YgdGhlIGxpbmsgc2lnbmFsIHdoaWNoIGlzCi0JICogaW4gYmFzZWQgb24gdGhlIHR4L3J4IHN1Y2Nlc3MvZmFpbHVyZSBjb3VudGVycy4KLQkgKi8KLQlydDJ4MDBsaWJfcHJlY2FsY3VsYXRlX2xpbmtfc2lnbmFsKCZydDJ4MDBkZXYtPmxpbmsucXVhbCk7Ci0KLQkvKgotCSAqIFNlbmQgYSBzaWduYWwgdG8gdGhlIGxlZCB0byB1cGRhdGUgdGhlIGxlZCBzaWduYWwgc3RyZW5ndGguCi0JICovCi0JcnQyeDAwbGVkc19sZWRfcXVhbGl0eShydDJ4MDBkZXYsIHJ0MngwMGRldi0+bGluay5xdWFsLmF2Z19yc3NpKTsKLQotCS8qCi0JICogRXZhbHVhdGUgYW50ZW5uYSBzZXR1cCwgbWFrZSB0aGlzIHRoZSBsYXN0IHN0ZXAgc2luY2UgdGhpcyBjb3VsZAotCSAqIHBvc3NpYmx5IHJlc2V0IHNvbWUgc3RhdGlzdGljcy4KLQkgKi8KLQlydDJ4MDBsaWJfZXZhbHVhdGVfYW50ZW5uYShydDJ4MDBkZXYpOwotCi0JLyoKLQkgKiBJbmNyZWFzZSB0dW5lciBjb3VudGVyLCBhbmQgcmVzY2hlZHVsZSB0aGUgbmV4dCBsaW5rIHR1bmVyIHJ1bi4KLQkgKi8KLQlydDJ4MDBkZXYtPmxpbmsuY291bnQrKzsKLQlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLAotCQkJICAgJnJ0MngwMGRldi0+bGluay53b3JrLCBMSU5LX1RVTkVfSU5URVJWQUwpOworCWlmIChzdGF0ZSA9PSBTVEFURV9SQURJT19SWF9PTikKKwkJcnQyeDAwbGlua19zdGFydF90dW5lcihydDJ4MDBkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBydDJ4MDBsaWJfcGFja2V0ZmlsdGVyX3NjaGVkdWxlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC00MzQsNyArMTU4LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGRlbGF5ZWRfZmxhZ3MgJiBERUxBWUVEX1VQREFURV9CRUFDT04pCi0JCXJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24ocnQyeDAwZGV2LCB2aWYpOworCQlydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHJ0MngwMGRldiwgdmlmLCB0cnVlKTsKIAogCWlmIChkZWxheWVkX2ZsYWdzICYgREVMQVlFRF9DT05GSUdfRVJQKQogCQlydDJ4MDBsaWJfY29uZmlnX2VycChydDJ4MDBkZXYsIGludGYsICZjb25mKTsKQEAgLTQ2Nyw3ICsxOTEsOSBAQAogCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAKIAlpZiAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9XRFMpCiAJCXJldHVybjsKIAogCS8qCkBAIC00OTAsNyArMjE2LDcgQEAKIAkJCQkJCSAgIHJ0MngwMGxpYl9iZWFjb25kb25lX2l0ZXIsCiAJCQkJCQkgICBydDJ4MDBkZXYpOwogCi0Jc2NoZWR1bGVfd29yaygmcnQyeDAwZGV2LT5pbnRmX3dvcmspOworCXF1ZXVlX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLCAmcnQyeDAwZGV2LT5pbnRmX3dvcmspOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX2JlYWNvbmRvbmUpOwogCkBAIC01OTcsNyArMzIzLDYgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMgPSAmcnQyeDAwZGV2LT5yeF9zdGF0dXM7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAljb25zdCBzdHJ1Y3QgcnQyeDAwX3JhdGUgKnJhdGU7CiAJdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGg7CiAJdW5zaWduZWQgaW50IGFsaWduOwpAQCAtNjY4LDMwICszOTMsMjIgQEAKIAogCWlmIChpZHggPCAwKSB7CiAJCVdBUk5JTkcocnQyeDAwZGV2LCAiRnJhbWUgcmVjZWl2ZWQgd2l0aCB1bnJlY29nbml6ZWQgc2lnbmFsLCIKLQkJCSJzaWduYWw9MHglLjJ4LCBwbGNwPSVkLlxuIiwgcnhkZXNjLnNpZ25hbCwKLQkJCSEhKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfU0lHTkFMX1BMQ1ApKTsKKwkJCSJzaWduYWw9MHglLjJ4LCB0eXBlPSVkLlxuIiwgcnhkZXNjLnNpZ25hbCwKKwkJCShyeGRlc2MuZGV2X2ZsYWdzICYgUlhET05FX1NJR05BTF9NQVNLKSk7CiAJCWlkeCA9IDA7CiAJfQogCiAJLyoKLQkgKiBPbmx5IHVwZGF0ZSBsaW5rIHN0YXR1cyBpZiB0aGlzIGlzIGEgYmVhY29uIGZyYW1lIGNhcnJ5aW5nIG91ciBic3NpZC4KKwkgKiBVcGRhdGUgZXh0cmEgY29tcG9uZW50cwogCSAqLwotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWVudHJ5LT5za2ItPmRhdGE7Ci0JaWYgKGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSAmJgotCSAgICAocnhkZXNjLmRldl9mbGFncyAmIFJYRE9ORV9NWV9CU1MpKQotCQlydDJ4MDBsaWJfdXBkYXRlX2xpbmtfc3RhdHMoJnJ0MngwMGRldi0+bGluaywgcnhkZXNjLnJzc2kpOwotCi0JcnQyeDAwZGVidWdfdXBkYXRlX2NyeXB0byhydDJ4MDBkZXYsCi0JCQkJICByeGRlc2MuY2lwaGVyLAotCQkJCSAgcnhkZXNjLmNpcGhlcl9zdGF0dXMpOwotCi0JcnQyeDAwZGV2LT5saW5rLnF1YWwucnhfc3VjY2VzcysrOworCXJ0MngwMGxpbmtfdXBkYXRlX3N0YXRzKHJ0MngwMGRldiwgZW50cnktPnNrYiwgJnJ4ZGVzYyk7CisJcnQyeDAwZGVidWdfdXBkYXRlX2NyeXB0byhydDJ4MDBkZXYsICZyeGRlc2MpOwogCiAJcnhfc3RhdHVzLT5tYWN0aW1lID0gcnhkZXNjLnRpbWVzdGFtcDsKIAlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gaWR4OwotCXJ4X3N0YXR1cy0+cXVhbCA9Ci0JICAgIHJ0MngwMGxpYl9jYWxjdWxhdGVfbGlua19zaWduYWwocnQyeDAwZGV2LCByeGRlc2MucnNzaSk7CisJcnhfc3RhdHVzLT5xdWFsID0gcnQyeDAwbGlua19jYWxjdWxhdGVfc2lnbmFsKHJ0MngwMGRldiwgcnhkZXNjLnJzc2kpOwogCXJ4X3N0YXR1cy0+c2lnbmFsID0gcnhkZXNjLnJzc2k7CisJcnhfc3RhdHVzLT5ub2lzZSA9IHJ4ZGVzYy5ub2lzZTsKIAlyeF9zdGF0dXMtPmZsYWcgPSByeGRlc2MuZmxhZ3M7CiAJcnhfc3RhdHVzLT5hbnRlbm5hID0gcnQyeDAwZGV2LT5saW5rLmFudC5hY3RpdmUucng7CiAKQEAgLTEwNjcsNyArNzg0LDkgQEAKIAlpZiAocnQyeDAwZGV2LT5vcHMtPmJjbi0+ZW50cnlfbnVtID4gMCkKIAkJcnQyeDAwZGV2LT5ody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyB8PQogCQkgICAgQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8Ci0JCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfQVApOworCQkgICAgQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8CisJCSAgICBCSVQoTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgfAorCQkgICAgQklUKE5MODAyMTFfSUZUWVBFX1dEUyk7CiAKIAkvKgogCSAqIExldCB0aGUgZHJpdmVyIHByb2JlIHRoZSBkZXZpY2UgdG8gZGV0ZWN0IHRoZSBjYXBhYmlsaXRpZXMuCkBAIC0xMDgzLDcgKzgwMiw2IEBACiAJICovCiAJSU5JVF9XT1JLKCZydDJ4MDBkZXYtPmludGZfd29yaywgcnQyeDAwbGliX2ludGZfc2NoZWR1bGVkKTsKIAlJTklUX1dPUksoJnJ0MngwMGRldi0+ZmlsdGVyX3dvcmssIHJ0MngwMGxpYl9wYWNrZXRmaWx0ZXJfc2NoZWR1bGVkKTsKLQlJTklUX0RFTEFZRURfV09SSygmcnQyeDAwZGV2LT5saW5rLndvcmssIHJ0MngwMGxpYl9saW5rX3R1bmVyKTsKIAogCS8qCiAJICogQWxsb2NhdGUgcXVldWUgYXJyYXkuCkBAIC0xMTA0LDYgKzgyMiw3IEBACiAJLyoKIAkgKiBSZWdpc3RlciBleHRyYSBjb21wb25lbnRzLgogCSAqLworCXJ0MngwMGxpbmtfcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAlydDJ4MDBsZWRzX3JlZ2lzdGVyKHJ0MngwMGRldik7CiAJcnQyeDAwcmZraWxsX2FsbG9jYXRlKHJ0MngwMGRldik7CiAJcnQyeDAwZGVidWdfcmVnaXN0ZXIocnQyeDAwZGV2KTsKQEAgLTExNjMsMjMgKzg4MiwxNyBAQAogI2lmZGVmIENPTkZJR19QTQogaW50IHJ0MngwMGxpYl9zdXNwZW5kKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlpbnQgcmV0dmFsOwotCiAJTk9USUNFKHJ0MngwMGRldiwgIkdvaW5nIHRvIHNsZWVwLlxuIik7CiAKIAkvKgotCSAqIE9ubHkgY29udGludWUgaWYgbWFjODAyMTEgaGFzIG9wZW4gaW50ZXJmYWNlcy4KKwkgKiBQcmV2ZW50IG1hYzgwMjExIGZyb20gYWNjZXNzaW5nIGRyaXZlciB3aGlsZSBzdXNwZW5kZWQuCiAJICovCi0JaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSB8fAotCSAgICAhdGVzdF9iaXQoREVWSUNFX1NUQVRFX1NUQVJURUQsICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJZ290byBleGl0OwotCi0Jc2V0X2JpdChERVZJQ0VfU1RBVEVfU1RBUlRFRF9TVVNQRU5ELCAmcnQyeDAwZGV2LT5mbGFncyk7CisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIDA7CiAKIAkvKgotCSAqIERpc2FibGUgcmFkaW8uCisJICogQ2xlYW51cCBhcyBtdWNoIGFzIHBvc3NpYmxlLgogCSAqLwotCXJ0MngwMGxpYl9zdG9wKHJ0MngwMGRldik7CiAJcnQyeDAwbGliX3VuaW5pdGlhbGl6ZShydDJ4MDBkZXYpOwogCiAJLyoKQEAgLTExODgsNyArOTAxLDYgQEAKIAlydDJ4MDBsZWRzX3N1c3BlbmQocnQyeDAwZGV2KTsKIAlydDJ4MDBkZWJ1Z19kZXJlZ2lzdGVyKHJ0MngwMGRldik7CiAKLWV4aXQ6CiAJLyoKIAkgKiBTZXQgZGV2aWNlIG1vZGUgdG8gc2xlZXAgZm9yIHBvd2VyIG1hbmFnZW1lbnQsCiAJICogb24gc29tZSBoYXJkd2FyZSB0aGlzIGNhbGwgc2VlbXMgdG8gY29uc2lzdGVudGx5IGZhaWwuCkBAIC0xMjAwLDggKzkxMiw3IEBACiAJICogdGhlIHJhZGlvIGFuZCB0aGUgb3RoZXIgY29tcG9uZW50cyBhbHJlYWR5IGRpc2FibGVkIHRoZQogCSAqIGRldmljZSBpcyBhcyBnb29kIGFzIGRpc2FibGVkLgogCSAqLwotCXJldHZhbCA9IHJ0MngwMGRldi0+b3BzLT5saWItPnNldF9kZXZpY2Vfc3RhdGUocnQyeDAwZGV2LCBTVEFURV9TTEVFUCk7Ci0JaWYgKHJldHZhbCkKKwlpZiAocnQyeDAwZGV2LT5vcHMtPmxpYi0+c2V0X2RldmljZV9zdGF0ZShydDJ4MDBkZXYsIFNUQVRFX1NMRUVQKSkKIAkJV0FSTklORyhydDJ4MDBkZXYsICJEZXZpY2UgZmFpbGVkIHRvIGVudGVyIHNsZWVwIHN0YXRlLCAiCiAJCQkiY29udGludWUgc3VzcGVuZGluZy5cbiIpOwogCkBAIC0xMjA5LDMyICs5MjAsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX3N1c3BlbmQpOwogCi1zdGF0aWMgdm9pZCBydDJ4MDBsaWJfcmVzdW1lX2ludGYodm9pZCAqZGF0YSwgdTggKm1hYywKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGRhdGE7Ci0Jc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKLQotCXNwaW5fbG9jaygmaW50Zi0+bG9jayk7Ci0KLQlydDJ4MDBsaWJfY29uZmlnX2ludGYocnQyeDAwZGV2LCBpbnRmLAotCQkJICAgICAgdmlmLT50eXBlLCBpbnRmLT5tYWMsIGludGYtPmJzc2lkKTsKLQotCi0JLyoKLQkgKiBNYXN0ZXIgb3IgQWQtaG9jIG1vZGUgcmVxdWlyZSBhIG5ldyBiZWFjb24gdXBkYXRlLgotCSAqLwotCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKLQkgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQlpbnRmLT5kZWxheWVkX2ZsYWdzIHw9IERFTEFZRURfVVBEQVRFX0JFQUNPTjsKLQotCXNwaW5fdW5sb2NrKCZpbnRmLT5sb2NrKTsKLX0KLQogaW50IHJ0MngwMGxpYl9yZXN1bWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlpbnQgcmV0dmFsOwotCiAJTk9USUNFKHJ0MngwMGRldiwgIldha2luZyB1cC5cbiIpOwogCiAJLyoKQEAgLTEyNDQsNjAgKzkzMSwxMSBAQAogCXJ0MngwMGxlZHNfcmVzdW1lKHJ0MngwMGRldik7CiAKIAkvKgotCSAqIE9ubHkgY29udGludWUgaWYgbWFjODAyMTEgaGFkIG9wZW4gaW50ZXJmYWNlcy4KLQkgKi8KLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChERVZJQ0VfU1RBVEVfU1RBUlRFRF9TVVNQRU5ELCAmcnQyeDAwZGV2LT5mbGFncykpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBSZWluaXRpYWxpemUgZGV2aWNlIGFuZCBhbGwgYWN0aXZlIGludGVyZmFjZXMuCi0JICovCi0JcmV0dmFsID0gcnQyeDAwbGliX3N0YXJ0KHJ0MngwMGRldik7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0OwotCi0JLyoKLQkgKiBSZWNvbmZpZ3VyZSBkZXZpY2UuCi0JICovCi0JcmV0dmFsID0gcnQyeDAwbWFjX2NvbmZpZyhydDJ4MDBkZXYtPmh3LCB+MCk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBleGl0OwotCi0JLyoKLQkgKiBJdGVyYXRvciBvdmVyIGVhY2ggYWN0aXZlIGludGVyZmFjZSB0bwotCSAqIHJlY29uZmlndXJlIHRoZSBoYXJkd2FyZS4KLQkgKi8KLQlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyhydDJ4MDBkZXYtPmh3LAotCQkJCQkgICAgcnQyeDAwbGliX3Jlc3VtZV9pbnRmLCBydDJ4MDBkZXYpOwotCi0JLyoKIAkgKiBXZSBhcmUgcmVhZHkgYWdhaW4gdG8gcmVjZWl2ZSByZXF1ZXN0cyBmcm9tIG1hYzgwMjExLgogCSAqLwogCXNldF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAotCS8qCi0JICogSXQgaXMgcG9zc2libGUgdGhhdCBkdXJpbmcgdGhhdCBtYWM4MDIxMSBoYXMgYXR0ZW1wdGVkCi0JICogdG8gc2VuZCBmcmFtZXMgd2hpbGUgd2Ugd2VyZSBzdXNwZW5kaW5nIG9yIHJlc3VtaW5nLgotCSAqIEluIHRoYXQgY2FzZSB3ZSBoYXZlIGRpc2FibGVkIHRoZSBUWCBxdWV1ZSBhbmQgc2hvdWxkCi0JICogbm93IGVuYWJsZSBpdCBhZ2FpbgotCSAqLwotCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhydDJ4MDBkZXYtPmh3KTsKLQotCS8qCi0JICogRHVyaW5nIGludGVyZmFjZSBpdGVyYXRpb24gd2UgbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoZQotCSAqIGRlbGF5ZWRfZmxhZ3MsIHRpbWUgdG8gaGFuZGxlcyB0aGUgZXZlbnQgYnkgY2FsbGluZwotCSAqIHRoZSB3b3JrIGhhbmRsZXIgZGlyZWN0bHkuCi0JICovCi0JcnQyeDAwbGliX2ludGZfc2NoZWR1bGVkKCZydDJ4MDBkZXYtPmludGZfd29yayk7Ci0KIAlyZXR1cm4gMDsKLQotZXhpdDoKLQlydDJ4MDBsaWJfc3RvcChydDJ4MDBkZXYpOwotCXJ0MngwMGxpYl91bmluaXRpYWxpemUocnQyeDAwZGV2KTsKLQlydDJ4MDBkZWJ1Z19kZXJlZ2lzdGVyKHJ0MngwMGRldik7Ci0KLQlyZXR1cm4gcmV0dmFsOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbGliX3Jlc3VtZSk7CiAjZW5kaWYgLyogQ09ORklHX1BNICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGR1bXAuaAppbmRleCA3MTY5YzIyLi5mZGVkYjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZHVtcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkdW1wLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZmlybXdhcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCmluZGV4IGJhYjA1YTUuLmQyZGVlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMzUsNyArMzUsNiBAQAogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJY2hhciAqZndfbmFtZTsKIAlpbnQgcmV0dmFsOwotCXUxNiBjcmM7CiAKIAkvKgogCSAqIFJlYWQgY29ycmVjdCBmaXJtd2FyZSBmcm9tIGhhcmRkaXNrLgpAQCAtNjEsMTYgKzYwLDI2IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNyYyA9IHJ0MngwMGRldi0+b3BzLT5saWItPmdldF9maXJtd2FyZV9jcmMoZnctPmRhdGEsIGZ3LT5zaXplKTsKLQlpZiAoY3JjICE9IChmdy0+ZGF0YVtmdy0+c2l6ZSAtIDJdIDw8IDggfCBmdy0+ZGF0YVtmdy0+c2l6ZSAtIDFdKSkgewotCQlFUlJPUihydDJ4MDBkZXYsICJGaXJtd2FyZSBjaGVja3N1bSBlcnJvci5cbiIpOwotCQlyZXR2YWwgPSAtRU5PRU5UOwotCQlnb3RvIGV4aXQ7Ci0JfQotCiAJSU5GTyhydDJ4MDBkZXYsICJGaXJtd2FyZSBkZXRlY3RlZCAtIHZlcnNpb246ICVkLiVkLlxuIiwKIAkgICAgIGZ3LT5kYXRhW2Z3LT5zaXplIC0gNF0sIGZ3LT5kYXRhW2Z3LT5zaXplIC0gM10pOwogCisJcmV0dmFsID0gcnQyeDAwZGV2LT5vcHMtPmxpYi0+Y2hlY2tfZmlybXdhcmUocnQyeDAwZGV2LCBmdy0+ZGF0YSwgZnctPnNpemUpOworCXN3aXRjaCAocmV0dmFsKSB7CisJY2FzZSBGV19PSzoKKwkJYnJlYWs7CisJY2FzZSBGV19CQURfQ1JDOgorCQlFUlJPUihydDJ4MDBkZXYsICJGaXJtd2FyZSBjaGVja3N1bSBlcnJvci5cbiIpOworCQlnb3RvIGV4aXQ7CisJY2FzZSBGV19CQURfTEVOR1RIOgorCQlFUlJPUihydDJ4MDBkZXYsCisJCSAgICAgICJJbnZhbGlkIGZpcm13YXJlIGZpbGUgbGVuZ3RoIChsZW49JXp1KVxuIiwgZnctPnNpemUpOworCQlnb3RvIGV4aXQ7CisJY2FzZSBGV19CQURfVkVSU0lPTjoKKwkJRVJST1IocnQyeDAwZGV2LAorCQkgICAgICAiQ3VycmVudCBmaXJtd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGRldGVjdGVkIGNoaXBzZXQuXG4iKTsKKwkJZ290byBleGl0OworCX07CisKIAlydDJ4MDBkZXYtPmZ3ID0gZnc7CiAKIAlyZXR1cm4gMDsKQEAgLTc4LDcgKzg3LDcgQEAKIGV4aXQ6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKLQlyZXR1cm4gcmV0dmFsOworCXJldHVybiAtRU5PRU5UOwogfQogCiBpbnQgcnQyeDAwbGliX2xvYWRfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5jCmluZGV4IGEwY2QzNWIuLjQ5NjcxZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQkgcnQyeDAwZGV2LT5vcHMtPm5hbWUsIHdpcGh5X25hbWUocnQyeDAwZGV2LT5ody0+d2lwaHkpKTsKIAogCWlmIChydDJ4MDBkZXYtPmxlZF9yYWRpby5mbGFncyAmIExFRF9JTklUSUFMSVpFRCkgewotCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlczpyYWRpbyIsIGRldl9uYW1lKTsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6OnJhZGlvIiwgZGV2X25hbWUpOwogCiAJCXJldHZhbCA9IHJ0MngwMGxlZHNfcmVnaXN0ZXJfbGVkKHJ0MngwMGRldiwKIAkJCQkJCSAmcnQyeDAwZGV2LT5sZWRfcmFkaW8sCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAl9CiAKIAlpZiAocnQyeDAwZGV2LT5sZWRfYXNzb2MuZmxhZ3MgJiBMRURfSU5JVElBTElaRUQpIHsKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6YXNzb2MiLCBkZXZfbmFtZSk7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzOjphc3NvYyIsIGRldl9uYW1lKTsKIAogCQlyZXR2YWwgPSBydDJ4MDBsZWRzX3JlZ2lzdGVyX2xlZChydDJ4MDBkZXYsCiAJCQkJCQkgJnJ0MngwMGRldi0+bGVkX2Fzc29jLApAQCAtMTU0LDcgKzE1NCw3IEBACiAJfQogCiAJaWYgKHJ0MngwMGRldi0+bGVkX3F1YWwuZmxhZ3MgJiBMRURfSU5JVElBTElaRUQpIHsKLQkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6cXVhbGl0eSIsIGRldl9uYW1lKTsKKwkJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXM6OnF1YWxpdHkiLCBkZXZfbmFtZSk7CiAKIAkJcmV0dmFsID0gcnQyeDAwbGVkc19yZWdpc3Rlcl9sZWQocnQyeDAwZGV2LAogCQkJCQkJICZydDJ4MDBkZXYtPmxlZF9xdWFsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxlZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmgKaW5kZXggOWRmNGE0OWJkLi4xMDQ2OTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGVkcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsZWRzLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGliLmgKaW5kZXggODZjZDI2Zi4uYTYzMTYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGxpYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaWIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTMzLDcgKzMzLDcgQEAKICAqIEJvdGggdGhlIGxpbmsgdHVuZXIgYXMgdGhlIHJma2lsbCB3aWxsIGJlIGNhbGxlZCBvbmNlIHBlciBzZWNvbmQuCiAgKi8KICNkZWZpbmUgTElOS19UVU5FX0lOVEVSVkFMCSggcm91bmRfamlmZmllc19yZWxhdGl2ZShIWikgKQotI2RlZmluZSBSRktJTExfUE9MTF9JTlRFUlZBTAkoIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopICkKKyNkZWZpbmUgUkZLSUxMX1BPTExfSU5URVJWQUwJKCAxMDAwICkKIAogLyoKICAqIHJ0MngwMF9yYXRlOiBQZXIgcmF0ZSBkZXZpY2UgaW5mb3JtYXRpb24KQEAgLTYzLDcgKzYzLDYgQEAKIGludCBydDJ4MDBsaWJfZW5hYmxlX3JhZGlvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogdm9pZCBydDJ4MDBsaWJfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyeDAwbGliX3RvZ2dsZV9yeChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBlbnVtIGRldl9zdGF0ZSBzdGF0ZSk7Ci12b2lkIHJ0MngwMGxpYl9yZXNldF9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCiAvKgogICogSW5pdGlhbGl6YXRpb24gaGFuZGxlcnMuCkBAIC03Nyw3ICs3Niw3IEBACiB2b2lkIHJ0MngwMGxpYl9jb25maWdfaW50ZihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgc3RydWN0IHJ0MngwMF9pbnRmICppbnRmLAogCQkJICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLAotCQkJICAgdTggKm1hYywgdTggKmJzc2lkKTsKKwkJCSAgIGNvbnN0IHU4ICptYWMsIGNvbnN0IHU4ICpic3NpZCk7CiB2b2lkIHJ0MngwMGxpYl9jb25maWdfZXJwKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgIHN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiwKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZik7CkBAIC0xMjQsOSArMTIzLDExIEBACiAgKiBydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uIC0gU2VuZCBuZXcgYmVhY29uIGZyb20gbWFjODAyMTEgdG8gaGFyZHdhcmUKICAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgogICogQHZpZjogSW50ZXJmYWNlIGZvciB3aGljaCB0aGUgYmVhY29uIHNob3VsZCBiZSB1cGRhdGVkLgorICogQGVuYWJsZV9iZWFjb246IEVuYWJsZSBiZWFjb25pbmcKICAqLwogaW50IHJ0MngwMHF1ZXVlX3VwZGF0ZV9iZWFjb24oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOworCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGNvbnN0IGJvb2wgZW5hYmxlX2JlYWNvbik7CiAKIC8qKgogICogcnQyeDAwcXVldWVfaW5kZXhfaW5jIC0gSW5kZXggaW5jcmVtZW50YXRpb24gZnVuY3Rpb24KQEAgLTE0MCw2ICsxNDEsMTUgQEAKIHZvaWQgcnQyeDAwcXVldWVfaW5kZXhfaW5jKHN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZSwgZW51bSBxdWV1ZV9pbmRleCBpbmRleCk7CiAKIC8qKgorICogcnQyeDAwcXVldWVfc3RvcF9xdWV1ZXMgLSBIYWx0IGFsbCBkYXRhIHF1ZXVlcworICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGxvb3AgdGhyb3VnaCBhbGwgYXZhaWxhYmxlIHF1ZXVlcyB0byBzdG9wCisgKiBhbnkgcGVuZGluZyBvdXRnb2luZyBmcmFtZXMuCisgKi8KK3ZvaWQgcnQyeDAwcXVldWVfc3RvcF9xdWV1ZXMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKKy8qKgogICogcnQyeDAwcXVldWVfaW5pdF9xdWV1ZXMgLSBJbml0aWFsaXplIGFsbCBkYXRhIHF1ZXVlcwogICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCiAgKgpAQCAtMTU0LDYgKzE2NCw4MSBAQAogaW50IHJ0MngwMHF1ZXVlX2FsbG9jYXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogdm9pZCBydDJ4MDBxdWV1ZV9mcmVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCisvKioKKyAqIHJ0MngwMGxpbmtfdXBkYXRlX3N0YXRzIC0gVXBkYXRlIGxpbmsgc3RhdGlzdGljcyBmcm9tIFJYIGZyYW1lCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqIEBza2I6IFJlY2VpdmVkIGZyYW1lCisgKiBAcnhkZXNjOiBSZWNlaXZlZCBmcmFtZSBkZXNjcmlwdG9yCisgKgorICogVXBkYXRlIGxpbmsgc3RhdGlzdGljcyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUKKyAqIHJlY2VpdmVkIGZyYW1lIGRlc2NyaXB0b3IuCisgKi8KK3ZvaWQgcnQyeDAwbGlua191cGRhdGVfc3RhdHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpOworCisvKioKKyAqIHJ0MngwMGxpbmtfY2FsY3VsYXRlX3NpZ25hbCAtIENhbGN1bGF0ZSBzaWduYWwgcXVhbGl0eQorICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKiBAcnNzaTogUlggRnJhbWUgUlNTSQorICoKKyAqIENhbGN1bGF0ZSB0aGUgc2lnbmFsIHF1YWxpdHkgb2YgYSBmcmFtZSBiYXNlZCBvbiB0aGUgcnNzaQorICogbWVhc3VyZWQgZHVyaW5nIHRoZSByZWNlaXZpbmcgb2YgdGhlIGZyYW1lIGFuZCB0aGUgZ2xvYmFsCisgKiBsaW5rIHF1YWxpdHkgc3RhdGlzdGljcyBtZWFzdXJlZCBzaW5jZSB0aGUgc3RhcnQgb2YgdGhlCisgKiBsaW5rIHR1bmluZy4gVGhlIHJlc3VsdCBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMTAwIHdoaWNoCisgKiBpcyBhbiBpbmRpY2F0aW9uIG9mIHRoZSBzaWduYWwgcXVhbGl0eS4KKyAqLworaW50IHJ0MngwMGxpbmtfY2FsY3VsYXRlX3NpZ25hbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBpbnQgcnNzaSk7CisKKy8qKgorICogcnQyeDAwbGlua19zdGFydF90dW5lciAtIFN0YXJ0IHBlcmlvZGljIGxpbmsgdHVuZXIgd29yaworICogQHJ0MngwMGRldjogUG9pbnRlciB0byAmc3RydWN0IHJ0MngwMF9kZXYuCisgKgorICogVGhpcyBzdGFydCB0aGUgbGluayB0dW5lciBwZXJpb2RpYyB3b3JrLCB0aGlzIHdvcmsgd2lsbAorICogYmUgZXhlY3V0ZWQgcGVyaW9kaWNhbGx5IHVudGlsICZydDJ4MDBsaW5rX3N0b3BfdHVuZXIgaGFzCisgKiBiZWVuIGNhbGxlZC4KKyAqLwordm9pZCBydDJ4MDBsaW5rX3N0YXJ0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCisvKioKKyAqIHJ0MngwMGxpbmtfc3RvcF90dW5lciAtIFN0b3AgcGVyaW9kaWMgbGluayB0dW5lciB3b3JrCisgKiBAcnQyeDAwZGV2OiBQb2ludGVyIHRvICZzdHJ1Y3QgcnQyeDAwX2Rldi4KKyAqCisgKiBBZnRlciB0aGlzIGZ1bmN0aW9uIGNvbXBsZXRlZCB0aGUgbGluayB0dW5lciB3aWxsIG5vdAorICogYmUgcnVubmluZyB1bnRpbCAmcnQyeDAwbGlua19zdGFydF90dW5lciBpcyBjYWxsZWQuCisgKi8KK3ZvaWQgcnQyeDAwbGlua19zdG9wX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworCisvKioKKyAqIHJ0MngwMGxpbmtfcmVzZXRfdHVuZXIgLSBSZXNldCBwZXJpb2RpYyBsaW5rIHR1bmVyIHdvcmsKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICogQGFudGVubmE6IFNob3VsZCB0aGUgYW50ZW5uYSB0dW5pbmcgYWxzbyBiZSByZXNldAorICoKKyAqIFRoZSBWR0MgbGltaXQgY29uZmlndXJlZCBpbiB0aGUgaGFyZHdhcmUgd2lsbCBiZSByZXNldCB0byAwCisgKiB3aGljaCBmb3JjZXMgdGhlIGRyaXZlciB0byByZWRpc2NvdmVyIHRoZSBjb3JyZWN0IHZhbHVlIGZvcgorICogdGhlIGN1cnJlbnQgYXNzb2NpYXRpb24uIFRoaXMgaXMgbmVlZGVkIHdoZW4gY29uZmlndXJhdGlvbgorICogb3B0aW9ucyBoYXZlIGNoYW5nZWQgd2hpY2ggY291bGQgZHJhc3RpY2FsbHkgY2hhbmdlIHRoZQorICogU05SIGxldmVsIG9yIGxpbmsgcXVhbGl0eSAoaS5lLiBjaGFuZ2luZyB0aGUgYW50ZW5uYSBzZXR0aW5nKS4KKyAqCisgKiBSZXNldHRpbmcgdGhlIGxpbmsgdHVuZXIgd2lsbCBhbHNvIGNhdXNlIHRoZSBwZXJpb2RpYyB3b3JrIGNvdW50ZXIKKyAqIHRvIGJlIHJlc2V0LiBBbnkgZHJpdmVyIHdoaWNoIGhhcyBhIGZpeGVkIGxpbWl0IG9uIHRoZSBudW1iZXIKKyAqIG9mIHJvdW5kcyB0aGUgbGluayB0dW5lciBpcyBzdXBwb3NlZCB0byB3b3JrIHdpbGwgYWNjZXB0IHRoZQorICogdHVuZXIgYWN0aW9ucyBhZ2FpbiBpZiB0aGlzIGxpbWl0IHdhcyBwcmV2aW91c2x5IHJlYWNoZWQuCisgKgorICogSWYgQGFudGVubmEgaXMgc2V0IHRvIHRydWUgYSB0aGUgc29mdHdhcmUgYW50ZW5uYSBkaXZlcnNpdHkKKyAqIHR1bmluZyB3aWxsIGFsc28gYmUgcmVzZXQuCisgKi8KK3ZvaWQgcnQyeDAwbGlua19yZXNldF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBib29sIGFudGVubmEpOworCisvKioKKyAqIHJ0MngwMGxpbmtfcmVnaXN0ZXIgLSBJbml0aWFsaXplIGxpbmsgdHVuaW5nIGZ1bmN0aW9uYWxpdHkKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2LgorICoKKyAqIEluaXRpYWxpemUgd29yayBzdHJ1Y3R1cmUgYW5kIGFsbCBsaW5rIHR1bmluZyByZWxhdGVkCisgKiBwYXJhbXRlcnMuIFRoaXMgd2lsbCBub3Qgc3RhcnQgdGhlIGxpbmsgdHVuaW5nIHByb2Nlc3MgaXRzZWxmLgorICovCit2b2lkIHJ0MngwMGxpbmtfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CisKIC8qCiAgKiBGaXJtd2FyZSBoYW5kbGVycy4KICAqLwpAQCAtMTc5LDcgKzI2NCw3IEBACiB2b2lkIHJ0MngwMGRlYnVnX2R1bXBfZnJhbWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICBlbnVtIHJ0MngwMF9kdW1wX3R5cGUgdHlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHJ0MngwMGRlYnVnX3VwZGF0ZV9jcnlwdG8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCSAgICAgICBlbnVtIGNpcGhlciBjaXBoZXIsIGVudW0gcnhfY3J5cHRvIHN0YXR1cyk7CisJCQkgICAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBkZWJ1Z19yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewpAQCAtMTk2LDggKzI4MSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBkZWJ1Z191cGRhdGVfY3J5cHRvKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJCSAgICAgZW51bSBjaXBoZXIgY2lwaGVyLAotCQkJCQkgICAgIGVudW0gcnhfY3J5cHRvIHN0YXR1cykKKwkJCQkJICAgICBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2MgKnJ4ZGVzYykKIHsKIH0KICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTICovCkBAIC0yMDksNyArMjkzLDggQEAKIGVudW0gY2lwaGVyIHJ0MngwMGNyeXB0b19rZXlfdG9fY2lwaGVyKHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiB2b2lkIHJ0MngwMGNyeXB0b19jcmVhdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LAogCQkJCSAgICAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpOwotdW5zaWduZWQgaW50IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pOwordW5zaWduZWQgaW50IHJ0MngwMGNyeXB0b190eF9vdmVyaGVhZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBydDJ4MDBjcnlwdG9fdHhfY29weV9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaXZfbGVuKTsKIHZvaWQgcnQyeDAwY3J5cHRvX3R4X3JlbW92ZV9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaXZfbGVuKTsKIHZvaWQgcnQyeDAwY3J5cHRvX3R4X2luc2VydF9pdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTIyNyw3ICszMTIsOCBAQAogewogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQoc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBsaW5rLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYjVjZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbGluay5jCkBAIC0wLDAgKzEsNDcxIEBACisvKgorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgorCisJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKwlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisJTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisJR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisJYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisJRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorCTU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyoKKwlNb2R1bGU6IHJ0MngwMGxpYgorCUFic3RyYWN0OiBydDJ4MDAgZ2VuZXJpYyBsaW5rIHR1bmluZyByb3V0aW5lcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlICJydDJ4MDAuaCIKKyNpbmNsdWRlICJydDJ4MDBsaWIuaCIKKworLyoKKyAqIFdoZW4gd2UgbGFjayBSU1NJIGluZm9ybWF0aW9uIHJldHVybiBzb21ldGhpbmcgbGVzcyB0aGVuIC04MCB0bworICogdGVsbCB0aGUgZHJpdmVyIHRvIHR1bmUgdGhlIGRldmljZSB0byBtYXhpbXVtIHNlbnNpdGl2aXR5LgorICovCisjZGVmaW5lIERFRkFVTFRfUlNTSQkJLTEyOAorCisvKgorICogV2hlbiBubyBUWC9SWCBwZXJjZW50YWdlIGNvdWxkIGJlIGNhbGN1bGF0ZWQgZHVlIHRvIGxhY2sgb2YKKyAqIGZyYW1lcyBvbiB0aGUgYWlyLCB3ZSBmYWxsYmFjayB0byBhIHBlcmNlbnRhZ2Ugb2YgNTAlLgorICogVGhpcyB3aWxsIGFzc3VyZSB3ZSB3aWxsIGdldCBhdCBsZWFzdCBnZXQgc29tZSBkZWNlbnQgdmFsdWUKKyAqIHdoZW4gdGhlIGxpbmsgdHVuZXIgc3RhcnRzLgorICogVGhlIHZhbHVlIHdpbGwgYmUgZHJvcHBlZCBhbmQgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgY29ycmVjdCAobWVhc3VyZWQpCisgKiB2YWx1ZSBhbnl3YXkgZHVyaW5nIHRoZSBmaXJzdCBydW4gb2YgdGhlIGxpbmsgdHVuZXIuCisgKi8KKyNkZWZpbmUgREVGQVVMVF9QRVJDRU5UQUdFCTUwCisKKy8qCisgKiBTbWFsbCBoZWxwZXIgbWFjcm8gdG8gd29yayB3aXRoIG1vdmluZy93YWxraW5nIGF2ZXJhZ2VzLgorICogV2hlbiBhZGRpbmcgYSB2YWx1ZSB0byB0aGUgYXZlcmFnZSB2YWx1ZSB0aGUgZm9sbG93aW5nIGNhbGN1bGF0aW9uCisgKiBpcyBuZWVkZWQ6CisgKgorICogICAgICAgIGF2Z19yc3NpID0gKChhdmdfcnNzaSAqIDcpICsgcnNzaSkgLyA4OworICoKKyAqIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IHdlIG9ubHkgbmVlZCAxIHZhcmlhYmxlCisgKiB0byBzdG9yZSB0aGUgYXZlcmFnZSBpbiAoTm8gbmVlZCBmb3IgYSBjb3VudCBhbmQgYSB0b3RhbCkuCisgKiBCdXQgbW9yZSBpbXBvcnRhbnRseSwgbm9ybWFsIGF2ZXJhZ2UgdmFsdWVzIHdpbGwgb3ZlciB0aW1lCisgKiBtb3ZlIGxlc3MgYW5kIGxlc3MgdG93YXJkcyBuZXdseSBhZGRlZCB2YWx1ZXMgdGhpcyByZXN1bHRzCisgKiB0aGF0IHdpdGggbGluayB0dW5pbmcsIHRoZSBkZXZpY2UgY2FuIGhhdmUgYSB2ZXJ5IGdvb2QgUlNTSQorICogZm9yIGEgZmV3IG1pbnV0ZXMgYnV0IHdoZW4gdGhlIGRldmljZSBpcyBtb3ZlZCBhd2F5IGZyb20gdGhlIEFQCisgKiB0aGUgYXZlcmFnZSB3aWxsIG5vdCBkZWNyZWFzZSBmYXN0IGVub3VnaCB0byBjb21wZW5zYXRlLgorICogVGhlIHdhbGtpbmcgYXZlcmFnZSBjb21wZW5zYXRlcyB0aGlzIGFuZCB3aWxsIG1vdmUgdG93YXJkcworICogdGhlIG5ldyB2YWx1ZXMgY29ycmVjdGx5IGFsbG93aW5nIGEgZWZmZWN0aXZlIGxpbmsgdHVuaW5nLgorICovCisjZGVmaW5lIE1PVklOR19BVkVSQUdFKF9fYXZnLCBfX3ZhbCwgX19zYW1wbGVzKSBcCisJKCAoKChfX2F2ZykgKiAoKF9fc2FtcGxlcykgLSAxKSkgKyAoX192YWwpKSAvIChfX3NhbXBsZXMpICkKKworLyoKKyAqIFNtYWxsIGhlbHBlciBtYWNybyBmb3IgcGVyY2VudGFnZSBjYWxjdWxhdGlvbgorICogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIG1hY3JvIHdpdGggdGhlIG9ubHkgY2F0Y2ggdGhhdCBpdCB3aWxsCisgKiBwcm9kdWNlIGEgZGVmYXVsdCB2YWx1ZSBpbiBjYXNlIG5vIHRvdGFsIHZhbHVlIHdhcyBwcm92aWRlZC4KKyAqLworI2RlZmluZSBQRVJDRU5UQUdFKF9fdmFsdWUsIF9fdG90YWwpIFwKKwkoIChfX3RvdGFsKSA/ICgoKF9fdmFsdWUpICogMTAwKSAvIChfX3RvdGFsKSkgOiAoREVGQVVMVF9QRVJDRU5UQUdFKSApCisKKy8qCisgKiBGb3IgY2FsY3VsYXRpbmcgdGhlIFNpZ25hbCBxdWFsaXR5IHdlIGhhdmUgZGV0ZXJtaW5lZAorICogdGhlIHRvdGFsIG51bWJlciBvZiBzdWNjZXNzIGFuZCBmYWlsZWQgUlggYW5kIFRYIGZyYW1lcy4KKyAqIFdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBhdmVyYWdlIFJTU0kgdmFsdWUgd2UgY2FuIGRldGVybWluZQorICogdGhlIGxpbmsgcXVhbGl0eSB1c2luZyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobToKKyAqCisgKiAgICAgICAgIHJzc2lfcGVyY2VudGFnZSA9IChhdmdfcnNzaSAqIDEwMCkgLyByc3NpX29mZnNldAorICogICAgICAgICByeF9wZXJjZW50YWdlID0gKHJ4X3N1Y2Nlc3MgKiAxMDApIC8gcnhfdG90YWwKKyAqICAgICAgICAgdHhfcGVyY2VudGFnZSA9ICh0eF9zdWNjZXNzICogMTAwKSAvIHR4X3RvdGFsCisgKiAgICAgICAgIGF2Z19zaWduYWwgPSAoKFdFSUdIVF9SU1NJICogYXZnX3Jzc2kpICsKKyAqICAgICAgICAgICAgICAgICAgICAgICAoV0VJR0hUX1RYICogdHhfcGVyY2VudGFnZSkgKworICogICAgICAgICAgICAgICAgICAgICAgIChXRUlHSFRfUlggKiByeF9wZXJjZW50YWdlKSkgLyAxMDAKKyAqCisgKiBUaGlzIHZhbHVlIHNob3VsZCB0aGVuIGJlIGNoZWNrZWQgdG8gbm90IGJlIGdyZWF0ZXIgdGhlbiAxMDAuCisgKiBUaGlzIG1lYW5zIHRoZSB2YWx1ZXMgb2YgV0VJR0hUX1JTU0ksIFdFSUdIVF9SWCwgV0VJR0hUX1RYIG11c3QKKyAqIHN1bSB1cCB0byAxMDAgYXMgd2VsbC4KKyAqLworI2RlZmluZSBXRUlHSFRfUlNTSQkyMAorI2RlZmluZSBXRUlHSFRfUlgJNDAKKyNkZWZpbmUgV0VJR0hUX1RYCTQwCisKK3N0YXRpYyBpbnQgcnQyeDAwbGlua19hbnRlbm5hX2dldF9saW5rX3Jzc2koc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCisJaWYgKGFudC0+cnNzaV9hbnQgJiYgcnQyeDAwZGV2LT5saW5rLnF1YWwucnhfc3VjY2VzcykKKwkJcmV0dXJuIGFudC0+cnNzaV9hbnQ7CisJcmV0dXJuIERFRkFVTFRfUlNTSTsKK30KKworc3RhdGljIGludCBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCQkgICAgICAgZW51bSBhbnRlbm5hIGFudGVubmEpCit7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKworCWlmIChhbnQtPnJzc2lfaGlzdG9yeVthbnRlbm5hIC0gQU5URU5OQV9BXSkKKwkJcmV0dXJuIGFudC0+cnNzaV9oaXN0b3J5W2FudGVubmEgLSBBTlRFTk5BX0FdOworCXJldHVybiBERUZBVUxUX1JTU0k7Cit9CisvKiBTbWFsbCB3cmFwcGVyIGZvciBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeSgpICovCisjZGVmaW5lIHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9yeF9oaXN0b3J5KF9fZGV2KSBcCisJcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkoKF9fZGV2KSwgXAorCQkJCQkgICAgKF9fZGV2KS0+bGluay5hbnQuYWN0aXZlLnJ4KQorI2RlZmluZSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfdHhfaGlzdG9yeShfX2RldikgXAorCXJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KChfX2RldiksIFwKKwkJCQkJICAgIChfX2RldiktPmxpbmsuYW50LmFjdGl2ZS50eCkKKworc3RhdGljIHZvaWQgcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX2hpc3Rvcnkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkJCSAgIGVudW0gYW50ZW5uYSBhbnRlbm5hLAorCQkJCQkJICAgaW50IHJzc2kpCit7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKwlhbnQtPnJzc2lfaGlzdG9yeVthbnQtPmFjdGl2ZS5yeCAtIEFOVEVOTkFfQV0gPSByc3NpOworfQorLyogU21hbGwgd3JhcHBlciBmb3IgcnQyeDAwbGlua19hbnRlbm5hX2dldF9yc3NpX2hpc3RvcnkoKSAqLworI2RlZmluZSBydDJ4MDBsaW5rX2FudGVubmFfdXBkYXRlX3Jzc2lfcnhfaGlzdG9yeShfX2RldiwgX19yc3NpKSBcCisJcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX2hpc3RvcnkoKF9fZGV2KSwgXAorCQkJCQkgICAgICAgKF9fZGV2KS0+bGluay5hbnQuYWN0aXZlLnJ4LCBcCisJCQkJCSAgICAgICAoX19yc3NpKSkKKyNkZWZpbmUgcnQyeDAwbGlua19hbnRlbm5hX3VwZGF0ZV9yc3NpX3R4X2hpc3RvcnkoX19kZXYsIF9fcnNzaSkgXAorCXJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9oaXN0b3J5KChfX2RldiksIFwKKwkJCQkJICAgICAgIChfX2RldiktPmxpbmsuYW50LmFjdGl2ZS50eCwgXAorCQkJCQkgICAgICAgKF9fcnNzaSkpCisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpbmtfYW50ZW5uYV9yZXNldChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXJ0MngwMGRldi0+bGluay5hbnQucnNzaV9hbnQgPSAwOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHlfc2FtcGxlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKwlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCBuZXdfYW50OworCWludCBzYW1wbGVfYSA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfcnNzaV9oaXN0b3J5KHJ0MngwMGRldiwgQU5URU5OQV9BKTsKKwlpbnQgc2FtcGxlX2IgPSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfaGlzdG9yeShydDJ4MDBkZXYsIEFOVEVOTkFfQik7CisKKwltZW1jcHkoJm5ld19hbnQsICZhbnQtPmFjdGl2ZSwgc2l6ZW9mKG5ld19hbnQpKTsKKworCS8qCisJICogV2UgYXJlIGRvbmUgc2FtcGxpbmcuIE5vdyB3ZSBzaG91bGQgZXZhbHVhdGUgdGhlIHJlc3VsdHMuCisJICovCisJYW50LT5mbGFncyAmPSB+QU5URU5OQV9NT0RFX1NBTVBMRTsKKworCS8qCisJICogRHVyaW5nIHRoZSBsYXN0IHBlcmlvZCB3ZSBoYXZlIHNhbXBsZWQgdGhlIFJTU0kKKwkgKiBmcm9tIGJvdGggYW50ZW5uYSdzLiBJdCBub3cgaXMgdGltZSB0byBkZXRlcm1pbmUKKwkgKiB3aGljaCBhbnRlbm5hIGRlbW9uc3RyYXRlZCB0aGUgYmVzdCBwZXJmb3JtYW5jZS4KKwkgKiBXaGVuIHdlIGFyZSBhbHJlYWR5IG9uIHRoZSBhbnRlbm5hIHdpdGggdGhlIGJlc3QKKwkgKiBwZXJmb3JtYW5jZSwgdGhlbiB0aGVyZSByZWFsbHkgaXMgbm90aGluZyBmb3IgdXMKKwkgKiBsZWZ0IHRvIGRvLgorCSAqLworCWlmIChzYW1wbGVfYSA9PSBzYW1wbGVfYikKKwkJcmV0dXJuOworCisJaWYgKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1JYX0RJVkVSU0lUWSkKKwkJbmV3X2FudC5yeCA9IChzYW1wbGVfYSA+IHNhbXBsZV9iKSA/IEFOVEVOTkFfQSA6IEFOVEVOTkFfQjsKKworCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpCisJCW5ld19hbnQudHggPSAoc2FtcGxlX2EgPiBzYW1wbGVfYikgPyBBTlRFTk5BX0EgOiBBTlRFTk5BX0I7CisKKwlydDJ4MDBsaWJfY29uZmlnX2FudGVubmEocnQyeDAwZGV2LCAmbmV3X2FudCk7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eV9ldmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKwlzdHJ1Y3QgYW50ZW5uYV9zZXR1cCBuZXdfYW50OworCWludCByc3NpX2N1cnI7CisJaW50IHJzc2lfb2xkOworCisJbWVtY3B5KCZuZXdfYW50LCAmYW50LT5hY3RpdmUsIHNpemVvZihuZXdfYW50KSk7CisKKwkvKgorCSAqIEdldCBjdXJyZW50IFJTU0kgdmFsdWUgYWxvbmcgd2l0aCB0aGUgaGlzdG9yaWNhbCB2YWx1ZSwKKwkgKiBhZnRlciB0aGF0IHVwZGF0ZSB0aGUgaGlzdG9yeSB3aXRoIHRoZSBjdXJyZW50IHZhbHVlLgorCSAqLworCXJzc2lfY3VyciA9IHJ0MngwMGxpbmtfYW50ZW5uYV9nZXRfbGlua19yc3NpKHJ0MngwMGRldik7CisJcnNzaV9vbGQgPSBydDJ4MDBsaW5rX2FudGVubmFfZ2V0X3Jzc2lfcnhfaGlzdG9yeShydDJ4MDBkZXYpOworCXJ0MngwMGxpbmtfYW50ZW5uYV91cGRhdGVfcnNzaV9yeF9oaXN0b3J5KHJ0MngwMGRldiwgcnNzaV9jdXJyKTsKKworCS8qCisJICogTGVnYWN5IGRyaXZlciBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgc3dhcCBhbnRlbm5hJ3MKKwkgKiB3aGVuIHRoZSBkaWZmZXJlbmNlIGluIFJTU0kgaXMgZ3JlYXRlciB0aGF0IDUuIFRoaXMKKwkgKiBhbHNvIHNob3VsZCBiZSBkb25lIHdoZW4gdGhlIFJTU0kgd2FzIGFjdHVhbGx5IGJldHRlcgorCSAqIHRoZW4gdGhlIHByZXZpb3VzIHNhbXBsZS4KKwkgKiBXaGVuIHRoZSBkaWZmZXJlbmNlIGV4Y2VlZHMgdGhlIHRocmVzaG9sZCB3ZSBzaG91bGQKKwkgKiBzYW1wbGUgdGhlIHJzc2kgZnJvbSB0aGUgb3RoZXIgYW50ZW5uYSB0byBtYWtlIGEgdmFsaWQKKwkgKiBjb21wYXJpc29uIGJldHdlZW4gdGhlIDIgYW50ZW5uYXMuCisJICovCisJaWYgKGFicyhyc3NpX2N1cnIgLSByc3NpX29sZCkgPCA1KQorCQlyZXR1cm47CisKKwlhbnQtPmZsYWdzIHw9IEFOVEVOTkFfTU9ERV9TQU1QTEU7CisKKwlpZiAoYW50LT5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKQorCQluZXdfYW50LnJ4ID0gKG5ld19hbnQucnggPT0gQU5URU5OQV9BKSA/IEFOVEVOTkFfQiA6IEFOVEVOTkFfQTsKKworCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9UWF9ESVZFUlNJVFkpCisJCW5ld19hbnQudHggPSAobmV3X2FudC50eCA9PSBBTlRFTk5BX0EpID8gQU5URU5OQV9CIDogQU5URU5OQV9BOworCisJcnQyeDAwbGliX2NvbmZpZ19hbnRlbm5hKHJ0MngwMGRldiwgJm5ld19hbnQpOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaWJfYW50ZW5uYV9kaXZlcnNpdHkoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGlua19hbnQgKmFudCA9ICZydDJ4MDBkZXYtPmxpbmsuYW50OworCisJLyoKKwkgKiBEZXRlcm1pbmUgaWYgc29mdHdhcmUgZGl2ZXJzaXR5IGlzIGVuYWJsZWQgZm9yCisJICogZWl0aGVyIHRoZSBUWCBvciBSWCBhbnRlbm5hIChvciBib3RoKS4KKwkgKiBBbHdheXMgcGVyZm9ybSB0aGlzIGNoZWNrIHNpbmNlIHdpdGhpbiB0aGUgbGluaworCSAqIHR1bmVyIGludGVydmFsIHRoZSBjb25maWd1cmF0aW9uIG1pZ2h0IGhhdmUgY2hhbmdlZC4KKwkgKi8KKwlhbnQtPmZsYWdzICY9IH5BTlRFTk5BX1JYX0RJVkVSU0lUWTsKKwlhbnQtPmZsYWdzICY9IH5BTlRFTk5BX1RYX0RJVkVSU0lUWTsKKworCWlmIChydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnJ4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQorCQlhbnQtPmZsYWdzIHw9IEFOVEVOTkFfUlhfRElWRVJTSVRZOworCWlmIChydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID09IEFOVEVOTkFfU1dfRElWRVJTSVRZKQorCQlhbnQtPmZsYWdzIHw9IEFOVEVOTkFfVFhfRElWRVJTSVRZOworCisJaWYgKCEoYW50LT5mbGFncyAmIEFOVEVOTkFfUlhfRElWRVJTSVRZKSAmJgorCSAgICAhKGFudC0+ZmxhZ3MgJiBBTlRFTk5BX1RYX0RJVkVSU0lUWSkpIHsKKwkJYW50LT5mbGFncyA9IDA7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHdlIGhhdmUgb25seSBzYW1wbGVkIHRoZSBkYXRhIG92ZXIgdGhlIGxhc3QgcGVyaW9kCisJICogd2Ugc2hvdWxkIG5vdyBoYXJ2ZXN0IHRoZSBkYXRhLiBPdGhlcndpc2UganVzdCBldmFsdWF0ZQorCSAqIHRoZSBkYXRhLiBUaGUgbGF0dGVyIHNob3VsZCBvbmx5IGJlIHBlcmZvcm1lZCBvbmNlCisJICogZXZlcnkgMiBzZWNvbmRzLgorCSAqLworCWlmIChhbnQtPmZsYWdzICYgQU5URU5OQV9NT0RFX1NBTVBMRSkKKwkJcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5X3NhbXBsZShydDJ4MDBkZXYpOworCWVsc2UgaWYgKHJ0MngwMGRldi0+bGluay5jb3VudCAmIDEpCisJCXJ0MngwMGxpYl9hbnRlbm5hX2RpdmVyc2l0eV9ldmFsKHJ0MngwMGRldik7Cit9CisKK3ZvaWQgcnQyeDAwbGlua191cGRhdGVfc3RhdHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgc3RydWN0IHJ4ZG9uZV9lbnRyeV9kZXNjICpyeGRlc2MpCit7CisJc3RydWN0IGxpbmsgKmxpbmsgPSAmcnQyeDAwZGV2LT5saW5rOworCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwgPSAmcnQyeDAwZGV2LT5saW5rLnF1YWw7CisJc3RydWN0IGxpbmtfYW50ICphbnQgPSAmcnQyeDAwZGV2LT5saW5rLmFudDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWludCBhdmdfcnNzaSA9IHJ4ZGVzYy0+cnNzaTsKKwlpbnQgYW50X3Jzc2kgPSByeGRlc2MtPnJzc2k7CisKKwkvKgorCSAqIEZyYW1lIHdhcyByZWNlaXZlZCBzdWNjZXNzZnVsbHkgc2luY2Ugbm9uLXN1Y2Nlc2Z1bGwKKwkgKiBmcmFtZXMgd291bGQgaGF2ZSBiZWVuIGRyb3BwZWQgYnkgdGhlIGhhcmR3YXJlLgorCSAqLworCXF1YWwtPnJ4X3N1Y2Nlc3MrKzsKKworCS8qCisJICogV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBxdWFsaXR5IHN0YXRpc3RpY3MgZnJvbQorCSAqIGJlYWNvbnMgd2hpY2ggY2FtZSBmcm9tIHRoZSBCU1Mgd2hpY2ggd2UgYXJlCisJICogYXNzb2NpYXRlZCB3aXRoLgorCSAqLworCWlmICghaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJICAgICEocnhkZXNjLT5kZXZfZmxhZ3MgJiBSWERPTkVfTVlfQlNTKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBVcGRhdGUgZ2xvYmFsIFJTU0kKKwkgKi8KKwlpZiAobGluay0+YXZnX3Jzc2kpCisJCWF2Z19yc3NpID0gTU9WSU5HX0FWRVJBR0UobGluay0+YXZnX3Jzc2ksIHJ4ZGVzYy0+cnNzaSwgOCk7CisJbGluay0+YXZnX3Jzc2kgPSBhdmdfcnNzaTsKKworCS8qCisJICogVXBkYXRlIGFudGVubmEgUlNTSQorCSAqLworCWlmIChhbnQtPnJzc2lfYW50KQorCQlhbnRfcnNzaSA9IE1PVklOR19BVkVSQUdFKGFudC0+cnNzaV9hbnQsIHJ4ZGVzYy0+cnNzaSwgOCk7CisJYW50LT5yc3NpX2FudCA9IGFudF9yc3NpOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBsaW5rX3ByZWNhbGN1bGF0ZV9zaWduYWwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlzdHJ1Y3QgbGluayAqbGluayA9ICZydDJ4MDBkZXYtPmxpbms7CisJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCA9ICZydDJ4MDBkZXYtPmxpbmsucXVhbDsKKworCWxpbmstPnJ4X3BlcmNlbnRhZ2UgPQorCSAgICBQRVJDRU5UQUdFKHF1YWwtPnJ4X3N1Y2Nlc3MsIHF1YWwtPnJ4X2ZhaWxlZCArIHF1YWwtPnJ4X3N1Y2Nlc3MpOworCWxpbmstPnR4X3BlcmNlbnRhZ2UgPQorCSAgICBQRVJDRU5UQUdFKHF1YWwtPnR4X3N1Y2Nlc3MsIHF1YWwtPnR4X2ZhaWxlZCArIHF1YWwtPnR4X3N1Y2Nlc3MpOworfQorCitpbnQgcnQyeDAwbGlua19jYWxjdWxhdGVfc2lnbmFsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGludCByc3NpKQoreworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKwlpbnQgcnNzaV9wZXJjZW50YWdlID0gMDsKKwlpbnQgc2lnbmFsOworCisJLyoKKwkgKiBXZSBuZWVkIGEgcG9zaXRpdmUgdmFsdWUgZm9yIHRoZSBSU1NJLgorCSAqLworCWlmIChyc3NpIDwgMCkKKwkJcnNzaSArPSBydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0OworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIGRpZmZlcmVudCBwZXJjZW50YWdlcywKKwkgKiB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIHRoZSBzaWduYWwuCisJICovCisJcnNzaV9wZXJjZW50YWdlID0gUEVSQ0VOVEFHRShyc3NpLCBydDJ4MDBkZXYtPnJzc2lfb2Zmc2V0KTsKKworCS8qCisJICogQWRkIHRoZSBpbmRpdmlkdWFsIHBlcmNlbnRhZ2VzIGFuZCB1c2UgdGhlIFdFSUdIVAorCSAqIGRlZmluZXMgdG8gY2FsY3VsYXRlIHRoZSBjdXJyZW50IGxpbmsgc2lnbmFsLgorCSAqLworCXNpZ25hbCA9ICgoV0VJR0hUX1JTU0kgKiByc3NpX3BlcmNlbnRhZ2UpICsKKwkJICAoV0VJR0hUX1RYICogbGluay0+dHhfcGVyY2VudGFnZSkgKworCQkgIChXRUlHSFRfUlggKiBsaW5rLT5yeF9wZXJjZW50YWdlKSkgLyAxMDA7CisKKwlyZXR1cm4gbWF4X3QoaW50LCBzaWduYWwsIDEwMCk7Cit9CisKK3ZvaWQgcnQyeDAwbGlua19zdGFydF90dW5lcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rICpsaW5rID0gJnJ0MngwMGRldi0+bGluazsKKworCS8qCisJICogTGluayB0dW5pbmcgc2hvdWxkIG9ubHkgYmUgcGVyZm9ybWVkIHdoZW4KKwkgKiBhbiBhY3RpdmUgc3RhIG9yIG1hc3RlciBpbnRlcmZhY2UgZXhpc3RzLgorCSAqIFNpbmdsZSBtb25pdG9yIG1vZGUgaW50ZXJmYWNlcyBzaG91bGQgbmV2ZXIgaGF2ZQorCSAqIHdvcmsgd2l0aCBsaW5rIHR1bmVycy4KKwkgKi8KKwlpZiAoIXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCAmJiAhcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkKKwkJcmV0dXJuOworCisJbGluay0+cnhfcGVyY2VudGFnZSA9IERFRkFVTFRfUEVSQ0VOVEFHRTsKKwlsaW5rLT50eF9wZXJjZW50YWdlID0gREVGQVVMVF9QRVJDRU5UQUdFOworCisJcnQyeDAwbGlua19yZXNldF90dW5lcihydDJ4MDBkZXYsIGZhbHNlKTsKKworCXF1ZXVlX2RlbGF5ZWRfd29yayhydDJ4MDBkZXYtPmh3LT53b3JrcXVldWUsCisJCQkgICAmbGluay0+d29yaywgTElOS19UVU5FX0lOVEVSVkFMKTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3N0b3BfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJ0MngwMGRldi0+bGluay53b3JrKTsKK30KKwordm9pZCBydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGJvb2wgYW50ZW5uYSkKK3sKKwlzdHJ1Y3QgbGlua19xdWFsICpxdWFsID0gJnJ0MngwMGRldi0+bGluay5xdWFsOworCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFJlc2V0IGxpbmsgaW5mb3JtYXRpb24uCisJICogQm90aCB0aGUgY3VycmVudGx5IGFjdGl2ZSB2Z2MgbGV2ZWwgYXMgd2VsbCBhcworCSAqIHRoZSBsaW5rIHR1bmVyIGNvdW50ZXIgc2hvdWxkIGJlIHJlc2V0LiBSZXNldHRpbmcKKwkgKiB0aGUgY291bnRlciBpcyBpbXBvcnRhbnQgZm9yIGRldmljZXMgd2hlcmUgdGhlCisJICogZGV2aWNlIHNob3VsZCBvbmx5IHBlcmZvcm0gbGluayB0dW5pbmcgZHVyaW5nIHRoZQorCSAqIGZpcnN0IG1pbnV0ZSBhZnRlciBiZWluZyBlbmFibGVkLgorCSAqLworCXJ0MngwMGRldi0+bGluay5jb3VudCA9IDA7CisJbWVtc2V0KHF1YWwsIDAsIHNpemVvZigqcXVhbCkpOworCisJLyoKKwkgKiBSZXNldCB0aGUgbGluayB0dW5lci4KKwkgKi8KKwlydDJ4MDBkZXYtPm9wcy0+bGliLT5yZXNldF90dW5lcihydDJ4MDBkZXYsIHF1YWwpOworCisJaWYgKGFudGVubmEpCisJCXJ0MngwMGxpbmtfYW50ZW5uYV9yZXNldChydDJ4MDBkZXYpOworfQorCit2b2lkIHJ0MngwMGxpbmtfcmVzZXRfcXVhbChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBsaW5rX3F1YWwgKnF1YWwgPSAmcnQyeDAwZGV2LT5saW5rLnF1YWw7CisKKwlxdWFsLT5yeF9zdWNjZXNzID0gMDsKKwlxdWFsLT5yeF9mYWlsZWQgPSAwOworCXF1YWwtPnR4X3N1Y2Nlc3MgPSAwOworCXF1YWwtPnR4X2ZhaWxlZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ0MngwMGxpbmtfdHVuZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPQorCSAgICBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0MngwMF9kZXYsIGxpbmsud29yay53b3JrKTsKKwlzdHJ1Y3QgbGluayAqbGluayA9ICZydDJ4MDBkZXYtPmxpbms7CisJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCA9ICZydDJ4MDBkZXYtPmxpbmsucXVhbDsKKworCS8qCisJICogV2hlbiB0aGUgcmFkaW8gaXMgc2h1dHRpbmcgZG93biB3ZSBzaG91bGQKKwkgKiBpbW1lZGlhdGVseSBjZWFzZSBhbGwgbGluayB0dW5pbmcuCisJICovCisJaWYgKCF0ZXN0X2JpdChERVZJQ0VfU1RBVEVfRU5BQkxFRF9SQURJTywgJnJ0MngwMGRldi0+ZmxhZ3MpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFVwZGF0ZSBzdGF0aXN0aWNzLgorCSAqLworCXJ0MngwMGRldi0+b3BzLT5saWItPmxpbmtfc3RhdHMocnQyeDAwZGV2LCBxdWFsKTsKKwlydDJ4MDBkZXYtPmxvd19sZXZlbF9zdGF0cy5kb3QxMUZDU0Vycm9yQ291bnQgKz0gcXVhbC0+cnhfZmFpbGVkOworCisJLyoKKwkgKiBVcGRhdGUgcXVhbGl0eSBSU1NJIGZvciBsaW5rIHR1bmluZywKKwkgKiB3aGVuIHdlIGhhdmUgcmVjZWl2ZWQgc29tZSBmcmFtZXMgYW5kIHdlIG1hbmFnZWQgdG8KKwkgKiBjb2xsZWN0IHRoZSBSU1NJIGRhdGEgd2UgY291bGQgdXNlIHRoaXMuIE90aGVyd2lzZSB3ZQorCSAqIG11c3QgZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgUlNTSSB2YWx1ZS4KKwkgKi8KKwlpZiAoIWxpbmstPmF2Z19yc3NpIHx8ICFxdWFsLT5yeF9zdWNjZXNzKQorCQlxdWFsLT5yc3NpID0gREVGQVVMVF9SU1NJOworCWVsc2UKKwkJcXVhbC0+cnNzaSA9IGxpbmstPmF2Z19yc3NpOworCisJLyoKKwkgKiBPbmx5IHBlcmZvcm0gdGhlIGxpbmsgdHVuaW5nIHdoZW4gTGluayB0dW5pbmcKKwkgKiBoYXMgYmVlbiBlbmFibGVkIChUaGlzIGNvdWxkIGhhdmUgYmVlbiBkaXNhYmxlZCBmcm9tIHRoZSBFRVBST00pLgorCSAqLworCWlmICghdGVzdF9iaXQoQ09ORklHX0RJU0FCTEVfTElOS19UVU5JTkcsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+bGlua190dW5lcihydDJ4MDBkZXYsIHF1YWwsIGxpbmstPmNvdW50KTsKKworCS8qCisJICogUHJlY2FsY3VsYXRlIGEgcG9ydGlvbiBvZiB0aGUgbGluayBzaWduYWwgd2hpY2ggaXMKKwkgKiBpbiBiYXNlZCBvbiB0aGUgdHgvcnggc3VjY2Vzcy9mYWlsdXJlIGNvdW50ZXJzLgorCSAqLworCXJ0MngwMGxpbmtfcHJlY2FsY3VsYXRlX3NpZ25hbChydDJ4MDBkZXYpOworCisJLyoKKwkgKiBTZW5kIGEgc2lnbmFsIHRvIHRoZSBsZWQgdG8gdXBkYXRlIHRoZSBsZWQgc2lnbmFsIHN0cmVuZ3RoLgorCSAqLworCXJ0MngwMGxlZHNfbGVkX3F1YWxpdHkocnQyeDAwZGV2LCBsaW5rLT5hdmdfcnNzaSk7CisKKwkvKgorCSAqIEV2YWx1YXRlIGFudGVubmEgc2V0dXAsIG1ha2UgdGhpcyB0aGUgbGFzdCBzdGVwIHNpbmNlIHRoaXMgY291bGQKKwkgKiBwb3NzaWJseSByZXNldCBzb21lIHN0YXRpc3RpY3MuCisJICovCisJcnQyeDAwbGliX2FudGVubmFfZGl2ZXJzaXR5KHJ0MngwMGRldik7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBxdWFsaXR5IGNvdW50ZXJzIHdoaWNoIHJlY291bnRlZCBkdXJpbmcgZWFjaCBwZXJpb2QuCisJICovCisJcnQyeDAwbGlua19yZXNldF9xdWFsKHJ0MngwMGRldik7CisKKwkvKgorCSAqIEluY3JlYXNlIHR1bmVyIGNvdW50ZXIsIGFuZCByZXNjaGVkdWxlIHRoZSBuZXh0IGxpbmsgdHVuZXIgcnVuLgorCSAqLworCWxpbmstPmNvdW50Kys7CisJcXVldWVfZGVsYXllZF93b3JrKHJ0MngwMGRldi0+aHctPndvcmtxdWV1ZSwKKwkJCSAgICZsaW5rLT53b3JrLCBMSU5LX1RVTkVfSU5URVJWQUwpOworfQorCit2b2lkIHJ0MngwMGxpbmtfcmVnaXN0ZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlJTklUX0RFTEFZRURfV09SSygmcnQyeDAwZGV2LT5saW5rLndvcmssIHJ0MngwMGxpbmtfdHVuZXIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCmluZGV4IDM4ZWRlZTUuLmM0MWEwYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC03OSw4ICs3OSw3IEBACiAJICogUlRTL0NUUyBmcmFtZSBzaG91bGQgdXNlIHRoZSBsZW5ndGggb2YgdGhlIGZyYW1lIHBsdXMgYW55CiAJICogZW5jcnlwdGlvbiBvdmVyaGVhZCB0aGF0IHdpbGwgYmUgYWRkZWQgYnkgdGhlIGhhcmR3YXJlLgogCSAqLwotCWlmICghZnJhZ19za2ItPmRvX25vdF9lbmNyeXB0KQotCQlkYXRhX2xlbmd0aCArPSBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQodHhfaW5mbyk7CisJZGF0YV9sZW5ndGggKz0gcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHJ0MngwMGRldiwgc2tiKTsKIAogCWlmICh0eF9pbmZvLT5jb250cm9sLnJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVCkKIAkJaWVlZTgwMjExX2N0c3Rvc2VsZl9nZXQocnQyeDAwZGV2LT5odywgdHhfaW5mby0+Y29udHJvbC52aWYsCkBAIC0yMjYsNiArMjI1LDggQEAKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfV0RTOgogCQkvKgogCQkgKiBXZSBkb24ndCBzdXBwb3J0IG1peGVkIGNvbWJpbmF0aW9ucyBvZgogCQkgKiBzdGEgYW5kIGFwIGludGVyZmFjZXMuCkBAIC00MzAsOCArNDMxLDEwIEBACiAJLyoKIAkgKiBVcGRhdGUgdGhlIGJlYWNvbi4KIAkgKi8KLQlpZiAoY29uZi0+Y2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikKLQkJc3RhdHVzID0gcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihydDJ4MDBkZXYsIHZpZik7CisJaWYgKGNvbmYtPmNoYW5nZWQgJiAoSUVFRTgwMjExX0lGQ0NfQkVBQ09OIHwKKwkJCSAgICAgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpKQorCQlzdGF0dXMgPSBydDJ4MDBxdWV1ZV91cGRhdGVfYmVhY29uKHJ0MngwMGRldiwgdmlmLAorCQkJCQkJICAgY29uZi0+ZW5hYmxlX2JlYWNvbik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDgyLDE2ICs0ODUsMzYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19jb25maWd1cmVfZmlsdGVyKTsKIAogI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX0NSWVBUTworc3RhdGljIHZvaWQgbWVtY3B5X3RraXAoc3RydWN0IHJ0MngwMGxpYl9jcnlwdG8gKmNyeXB0bywgdTggKmtleSwgdTgga2V5X2xlbikKK3sKKwlpZiAoa2V5X2xlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9FTkNSX0tFWSkKKwkJbWVtY3B5KCZjcnlwdG8tPmtleSwKKwkJICAgICAgICZrZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZXSwKKwkJICAgICAgIHNpemVvZihjcnlwdG8tPmtleSkpOworCisJaWYgKGtleV9sZW4gPiBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfVFhfTUlDX0tFWSkKKwkJbWVtY3B5KCZjcnlwdG8tPnR4X21pYywKKwkJICAgICAgICZrZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVldLAorCQkgICAgICAgc2l6ZW9mKGNyeXB0by0+dHhfbWljKSk7CisKKwlpZiAoa2V5X2xlbiA+IE5MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9SWF9NSUNfS0VZKQorCQltZW1jcHkoJmNyeXB0by0+cnhfbWljLAorCQkgICAgICAgJmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfUlhfTUlDX0tFWV0sCisJCSAgICAgICBzaXplb2YoY3J5cHRvLT5yeF9taWMpKTsKK30KKwogaW50IHJ0MngwMG1hY19zZXRfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJICAgICAgY29uc3QgdTggKmxvY2FsX2FkZHJlc3MsIGNvbnN0IHU4ICphZGRyZXNzLAorCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7CisJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKIAlpbnQgKCpzZXRfa2V5KSAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCXN0cnVjdCBydDJ4MDBsaWJfY3J5cHRvICpjcnlwdG8sCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOwogCXN0cnVjdCBydDJ4MDBsaWJfY3J5cHRvIGNyeXB0bzsKKwlzdGF0aWMgY29uc3QgdTggYmNhc3RfYWRkcltFVEhfQUxFTl0gPQorCQl7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIH07CiAKIAlpZiAoIXRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybiAwOwpAQCAtNTA5LDQ1ICs1MzIsMjUgQEAKIAlpZiAocnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkKIAkJY3J5cHRvLmJzc2lkeCA9IDA7CiAJZWxzZQotCQljcnlwdG8uYnNzaWR4ID0KLQkJICAgIGxvY2FsX2FkZHJlc3NbNV0gJiAocnQyeDAwZGV2LT5vcHMtPm1heF9hcF9pbnRmIC0gMSk7CisJCWNyeXB0by5ic3NpZHggPSBpbnRmLT5tYWNbNV0gJiAocnQyeDAwZGV2LT5vcHMtPm1heF9hcF9pbnRmIC0gMSk7CiAKIAljcnlwdG8uY2lwaGVyID0gcnQyeDAwY3J5cHRvX2tleV90b19jaXBoZXIoa2V5KTsKIAlpZiAoY3J5cHRvLmNpcGhlciA9PSBDSVBIRVJfTk9ORSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJY3J5cHRvLmNtZCA9IGNtZDsKLQljcnlwdG8uYWRkcmVzcyA9IGFkZHJlc3M7CiAKLQlpZiAoY3J5cHRvLmNpcGhlciA9PSBDSVBIRVJfVEtJUCkgewotCQlpZiAoa2V5LT5rZXlsZW4gPiBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVkpCi0JCQltZW1jcHkoJmNyeXB0by5rZXksCi0JCQkgICAgICAgJmtleS0+a2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9FTkNSX0tFWV0sCi0JCQkgICAgICAgc2l6ZW9mKGNyeXB0by5rZXkpKTsKLQotCQlpZiAoa2V5LT5rZXlsZW4gPiBOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfVFhfTUlDX0tFWSkKLQkJCW1lbWNweSgmY3J5cHRvLnR4X21pYywKLQkJCSAgICAgICAma2V5LT5rZXlbTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVldLAotCQkJICAgICAgIHNpemVvZihjcnlwdG8udHhfbWljKSk7Ci0KLQkJaWYgKGtleS0+a2V5bGVuID4gTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVkpCi0JCQltZW1jcHkoJmNyeXB0by5yeF9taWMsCi0JCQkgICAgICAgJmtleS0+a2V5W05MODAyMTFfVEtJUF9EQVRBX09GRlNFVF9SWF9NSUNfS0VZXSwKLQkJCSAgICAgICBzaXplb2YoY3J5cHRvLnJ4X21pYykpOwotCX0gZWxzZQotCQltZW1jcHkoJmNyeXB0by5rZXksICZrZXktPmtleVswXSwga2V5LT5rZXlsZW4pOwotCi0JLyoKLQkgKiBEaXNjb3ZlciB0aGUgQXNzb2NpYXRpb24gSUQgZnJvbSBtYWM4MDIxMS4KLQkgKiBTb21lIGRyaXZlcnMgbmVlZCB0aGlzIGluZm9ybWF0aW9uIHdoZW4gdXBkYXRpbmcgdGhlCi0JICogaGFyZHdhcmUga2V5IChlaXRoZXIgYWRkaW5nIG9yIHJlbW92aW5nKS4KLQkgKi8KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKGh3LCBhZGRyZXNzKTsKLQlpZiAoc3RhKQorCWlmIChzdGEpIHsKKwkJLyogc29tZSBkcml2ZXJzIG5lZWQgdGhlIEFJRCAqLwogCQljcnlwdG8uYWlkID0gc3RhLT5haWQ7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJCWNyeXB0by5hZGRyZXNzID0gc3RhLT5hZGRyOworCX0gZWxzZQorCQljcnlwdG8uYWRkcmVzcyA9IGJjYXN0X2FkZHI7CiAKKwlpZiAoY3J5cHRvLmNpcGhlciA9PSBDSVBIRVJfVEtJUCkKKwkJbWVtY3B5X3RraXAoJmNyeXB0bywgJmtleS0+a2V5WzBdLCBrZXktPmtleWxlbik7CisJZWxzZQorCQltZW1jcHkoJmNyeXB0by5rZXksICZrZXktPmtleVswXSwga2V5LT5rZXlsZW4pOwogCS8qCiAJICogRWFjaCBCU1MgaGFzIGEgbWF4aW11bSBvZiA0IHNoYXJlZCBrZXlzLgogCSAqIFNoYXJlZCBrZXkgaW5kZXggdmFsdWVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCmluZGV4IGQ1MmIyMmIuLmU2MTZjMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKaW5kZXggOWMwYTRkNy4uMTVhMTI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggMDcwOWRlYy4uYTU2NjRiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xNDgsMjAgKzE0OCwxMDUgQEAKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogfQogCitzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcl9zZXEoc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKKwkJCQkJCSBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihlbnRyeS0+c2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopZW50cnktPnNrYi0+ZGF0YTsKKwlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zih0eF9pbmZvLT5jb250cm9sLnZpZik7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKKworCWlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BU1NJR05fU0VRKSB8fAorCSAgICB1bmxpa2VseSghdHhfaW5mby0+Y29udHJvbC52aWYpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEhhcmR3YXJlIHNob3VsZCBpbnNlcnQgc2VxdWVuY2UgY291bnRlci4KKwkgKiBGSVhNRTogV2UgaW5zZXJ0IGEgc29mdHdhcmUgc2VxdWVuY2UgY291bnRlciBmaXJzdCBmb3IKKwkgKiBoYXJkd2FyZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBoYXJkd2FyZSBzZXF1ZW5jZSBjb3VudGluZy4KKwkgKgorCSAqIFRoaXMgaXMgd3JvbmcgYmVjYXVzZSBiZWFjb25zIGFyZSBub3QgZ2V0dGluZyBzZXF1ZW5jZQorCSAqIG51bWJlcnMgYXNzaWduZWQgcHJvcGVybHkuCisJICoKKwkgKiBBIHNlY29uZGFyeSBwcm9ibGVtIGV4aXN0cyBmb3IgZHJpdmVycyB0aGF0IGNhbm5vdCB0b2dnbGUKKwkgKiBzZXF1ZW5jZSBjb3VudGluZyBwZXItZnJhbWUsIHNpbmNlIHRob3NlIHdpbGwgb3ZlcnJpZGUgdGhlCisJICogc2VxdWVuY2UgY291bnRlciBnaXZlbiBieSBtYWM4MDIxMS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW50Zi0+c2VxbG9jaywgaXJxZmxhZ3MpOworCisJaWYgKHRlc3RfYml0KEVOVFJZX1RYRF9GSVJTVF9GUkFHTUVOVCwgJnR4ZGVzYy0+ZmxhZ3MpKQorCQlpbnRmLT5zZXFubyArPSAweDEwOworCWhkci0+c2VxX2N0cmwgJj0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7CisJaGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihpbnRmLT5zZXFubyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnRmLT5zZXFsb2NrLCBpcnFmbGFncyk7CisKKwlfX3NldF9iaXQoRU5UUllfVFhEX0dFTkVSQVRFX1NFUSwgJnR4ZGVzYy0+ZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBydDJ4MDBxdWV1ZV9jcmVhdGVfdHhfZGVzY3JpcHRvcl9wbGNwKHN0cnVjdCBxdWV1ZV9lbnRyeSAqZW50cnksCisJCQkJCQkgIHN0cnVjdCB0eGVudHJ5X2Rlc2MgKnR4ZGVzYywKKwkJCQkJCSAgY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpod3JhdGUpCit7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7CisJc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eHJhdGUgPSAmdHhfaW5mby0+Y29udHJvbC5yYXRlc1swXTsKKwl1bnNpZ25lZCBpbnQgZGF0YV9sZW5ndGg7CisJdW5zaWduZWQgaW50IGR1cmF0aW9uOworCXVuc2lnbmVkIGludCByZXNpZHVhbDsKKworCS8qIERhdGEgbGVuZ3RoICsgQ1JDICsgQ3J5cHRvIG92ZXJoZWFkIChJVi9FSVYvSUNWL01JQykgKi8KKwlkYXRhX2xlbmd0aCA9IGVudHJ5LT5za2ItPmxlbiArIDQ7CisJZGF0YV9sZW5ndGggKz0gcnQyeDAwY3J5cHRvX3R4X292ZXJoZWFkKHJ0MngwMGRldiwgZW50cnktPnNrYik7CisKKwkvKgorCSAqIFBMQ1Agc2V0dXAKKwkgKiBMZW5ndGggY2FsY3VsYXRpb24gZGVwZW5kcyBvbiBPRkRNL0NDSyByYXRlLgorCSAqLworCXR4ZGVzYy0+c2lnbmFsID0gaHdyYXRlLT5wbGNwOworCXR4ZGVzYy0+c2VydmljZSA9IDB4MDQ7CisKKwlpZiAoaHdyYXRlLT5mbGFncyAmIERFVl9SQVRFX09GRE0pIHsKKwkJdHhkZXNjLT5sZW5ndGhfaGlnaCA9IChkYXRhX2xlbmd0aCA+PiA2KSAmIDB4M2Y7CisJCXR4ZGVzYy0+bGVuZ3RoX2xvdyA9IGRhdGFfbGVuZ3RoICYgMHgzZjsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBDb252ZXJ0IGxlbmd0aCB0byBtaWNyb3NlY29uZHMuCisJCSAqLworCQlyZXNpZHVhbCA9IEdFVF9EVVJBVElPTl9SRVMoZGF0YV9sZW5ndGgsIGh3cmF0ZS0+Yml0cmF0ZSk7CisJCWR1cmF0aW9uID0gR0VUX0RVUkFUSU9OKGRhdGFfbGVuZ3RoLCBod3JhdGUtPmJpdHJhdGUpOworCisJCWlmIChyZXNpZHVhbCAhPSAwKSB7CisJCQlkdXJhdGlvbisrOworCisJCQkvKgorCQkJICogQ2hlY2sgaWYgd2UgbmVlZCB0byBzZXQgdGhlIExlbmd0aCBFeHRlbnNpb24KKwkJCSAqLworCQkJaWYgKGh3cmF0ZS0+Yml0cmF0ZSA9PSAxMTAgJiYgcmVzaWR1YWwgPD0gMzApCisJCQkJdHhkZXNjLT5zZXJ2aWNlIHw9IDB4ODA7CisJCX0KKworCQl0eGRlc2MtPmxlbmd0aF9oaWdoID0gKGR1cmF0aW9uID4+IDgpICYgMHhmZjsKKwkJdHhkZXNjLT5sZW5ndGhfbG93ID0gZHVyYXRpb24gJiAweGZmOworCisJCS8qCisJCSAqIFdoZW4gcHJlYW1ibGUgaXMgZW5hYmxlZCB3ZSBzaG91bGQgc2V0IHRoZQorCQkgKiBwcmVhbWJsZSBiaXQgZm9yIHRoZSBzaWduYWwuCisJCSAqLworCQlpZiAodHhyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfU0hPUlRfUFJFQU1CTEUpCisJCQl0eGRlc2MtPnNpZ25hbCB8PSAweDA4OworCX0KK30KKwogc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3Ioc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSwKIAkJCQkJICAgICBzdHJ1Y3QgdHhlbnRyeV9kZXNjICp0eGRlc2MpCiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZW50cnktPnNrYik7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWVudHJ5LT5za2ItPmRhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICp0eHJhdGUgPSAmdHhfaW5mby0+Y29udHJvbC5yYXRlc1swXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPQogCSAgICBpZWVlODAyMTFfZ2V0X3R4X3JhdGUocnQyeDAwZGV2LT5odywgdHhfaW5mbyk7CiAJY29uc3Qgc3RydWN0IHJ0MngwMF9yYXRlICpod3JhdGU7Ci0JdW5zaWduZWQgaW50IGRhdGFfbGVuZ3RoOwotCXVuc2lnbmVkIGludCBkdXJhdGlvbjsKLQl1bnNpZ25lZCBpbnQgcmVzaWR1YWw7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKIAogCW1lbXNldCh0eGRlc2MsIDAsIHNpemVvZigqdHhkZXNjKSk7CiAKQEAgLTE3MywyNyArMjU4LDEyIEBACiAJdHhkZXNjLT5jd19tYXggPSBlbnRyeS0+cXVldWUtPmN3X21heDsKIAl0eGRlc2MtPmFpZnMgPSBlbnRyeS0+cXVldWUtPmFpZnM7CiAKLQkvKiBEYXRhIGxlbmd0aCArIENSQyAqLwotCWRhdGFfbGVuZ3RoID0gZW50cnktPnNrYi0+bGVuICsgNDsKLQogCS8qCiAJICogQ2hlY2sgd2hldGhlciB0aGlzIGZyYW1lIGlzIHRvIGJlIGFja2VkLgogCSAqLwogCWlmICghKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKQogCQlfX3NldF9iaXQoRU5UUllfVFhEX0FDSywgJnR4ZGVzYy0+ZmxhZ3MpOwogCi0JaWYgKHRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0NSWVBUTywgJnJ0MngwMGRldi0+ZmxhZ3MpICYmCi0JICAgICFlbnRyeS0+c2tiLT5kb19ub3RfZW5jcnlwdCkgewotCQkvKiBBcHBseSBjcnlwdG8gc3BlY2lmaWMgZGVzY3JpcHRvciBpbmZvcm1hdGlvbiAqLwotCQlydDJ4MDBjcnlwdG9fY3JlYXRlX3R4X2Rlc2NyaXB0b3IoZW50cnksIHR4ZGVzYyk7Ci0KLQkJLyoKLQkJICogRXh0ZW5kIGZyYW1lIGxlbmd0aCB0byBpbmNsdWRlIGFsbCBlbmNyeXB0aW9uIG92ZXJoZWFkCi0JCSAqIHRoYXQgd2lsbCBiZSBhZGRlZCBieSB0aGUgaGFyZHdhcmUuCi0JCSAqLwotCQlkYXRhX2xlbmd0aCArPSBydDJ4MDBjcnlwdG9fdHhfb3ZlcmhlYWQodHhfaW5mbyk7Ci0JfQotCiAJLyoKIAkgKiBDaGVjayBpZiB0aGlzIGlzIGEgUlRTL0NUUyBmcmFtZQogCSAqLwpAQCAtMjM3LDg2ICszMDcsMjcgQEAKIAkgKiBTZXQgaWZzIHRvIElGU19TSUZTIHdoZW4gdGhlIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBmcmFnbWVudCwKIAkgKiBvciB0aGlzIGZyYWdtZW50IGNhbWUgYWZ0ZXIgUlRTL0NUUy4KIAkgKi8KLQlpZiAodGVzdF9iaXQoRU5UUllfVFhEX1JUU19GUkFNRSwgJnR4ZGVzYy0+ZmxhZ3MpKSB7Ci0JCXR4ZGVzYy0+aWZzID0gSUZTX1NJRlM7Ci0JfSBlbHNlIGlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfRklSU1RfRlJBR01FTlQpIHsKKwlpZiAoKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9GSVJTVF9GUkFHTUVOVCkgJiYKKwkgICAgIXRlc3RfYml0KEVOVFJZX1RYRF9SVFNfRlJBTUUsICZ0eGRlc2MtPmZsYWdzKSkgewogCQlfX3NldF9iaXQoRU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5ULCAmdHhkZXNjLT5mbGFncyk7CiAJCXR4ZGVzYy0+aWZzID0gSUZTX0JBQ0tPRkY7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJdHhkZXNjLT5pZnMgPSBJRlNfU0lGUzsKLQl9CiAKIAkvKgotCSAqIEhhcmR3YXJlIHNob3VsZCBpbnNlcnQgc2VxdWVuY2UgY291bnRlci4KLQkgKiBGSVhNRTogV2UgaW5zZXJ0IGEgc29mdHdhcmUgc2VxdWVuY2UgY291bnRlciBmaXJzdCBmb3IKLQkgKiBoYXJkd2FyZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBoYXJkd2FyZSBzZXF1ZW5jZSBjb3VudGluZy4KLQkgKgotCSAqIFRoaXMgaXMgd3JvbmcgYmVjYXVzZSBiZWFjb25zIGFyZSBub3QgZ2V0dGluZyBzZXF1ZW5jZQotCSAqIG51bWJlcnMgYXNzaWduZWQgcHJvcGVybHkuCi0JICoKLQkgKiBBIHNlY29uZGFyeSBwcm9ibGVtIGV4aXN0cyBmb3IgZHJpdmVycyB0aGF0IGNhbm5vdCB0b2dnbGUKLQkgKiBzZXF1ZW5jZSBjb3VudGluZyBwZXItZnJhbWUsIHNpbmNlIHRob3NlIHdpbGwgb3ZlcnJpZGUgdGhlCi0JICogc2VxdWVuY2UgY291bnRlciBnaXZlbiBieSBtYWM4MDIxMS4KLQkgKi8KLQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKLQkJaWYgKGxpa2VseSh0eF9pbmZvLT5jb250cm9sLnZpZikpIHsKLQkJCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZjsKLQotCQkJaW50ZiA9IHZpZl90b19pbnRmKHR4X2luZm8tPmNvbnRyb2wudmlmKTsKLQotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmludGYtPnNlcWxvY2ssIGlycWZsYWdzKTsKLQotCQkJaWYgKHRlc3RfYml0KEVOVFJZX1RYRF9GSVJTVF9GUkFHTUVOVCwgJnR4ZGVzYy0+ZmxhZ3MpKQotCQkJCWludGYtPnNlcW5vICs9IDB4MTA7Ci0JCQloZHItPnNlcV9jdHJsICY9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TQ1RMX0ZSQUcpOwotCQkJaGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihpbnRmLT5zZXFubyk7Ci0KLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmludGYtPnNlcWxvY2ssIGlycWZsYWdzKTsKLQotCQkJX19zZXRfYml0KEVOVFJZX1RYRF9HRU5FUkFURV9TRVEsICZ0eGRlc2MtPmZsYWdzKTsKLQkJfQotCX0KLQotCS8qCi0JICogUExDUCBzZXR1cAotCSAqIExlbmd0aCBjYWxjdWxhdGlvbiBkZXBlbmRzIG9uIE9GRE0vQ0NLIHJhdGUuCisJICogRGV0ZXJtaW5lIHJhdGUgbW9kdWxhdGlvbi4KIAkgKi8KIAlod3JhdGUgPSBydDJ4MDBfZ2V0X3JhdGUocmF0ZS0+aHdfdmFsdWUpOwotCXR4ZGVzYy0+c2lnbmFsID0gaHdyYXRlLT5wbGNwOwotCXR4ZGVzYy0+c2VydmljZSA9IDB4MDQ7CisJdHhkZXNjLT5yYXRlX21vZGUgPSBSQVRFX01PREVfQ0NLOworCWlmIChod3JhdGUtPmZsYWdzICYgREVWX1JBVEVfT0ZETSkKKwkJdHhkZXNjLT5yYXRlX21vZGUgPSBSQVRFX01PREVfT0ZETTsKIAotCWlmIChod3JhdGUtPmZsYWdzICYgREVWX1JBVEVfT0ZETSkgewotCQlfX3NldF9iaXQoRU5UUllfVFhEX09GRE1fUkFURSwgJnR4ZGVzYy0+ZmxhZ3MpOwotCi0JCXR4ZGVzYy0+bGVuZ3RoX2hpZ2ggPSAoZGF0YV9sZW5ndGggPj4gNikgJiAweDNmOwotCQl0eGRlc2MtPmxlbmd0aF9sb3cgPSBkYXRhX2xlbmd0aCAmIDB4M2Y7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogQ29udmVydCBsZW5ndGggdG8gbWljcm9zZWNvbmRzLgotCQkgKi8KLQkJcmVzaWR1YWwgPSBHRVRfRFVSQVRJT05fUkVTKGRhdGFfbGVuZ3RoLCBod3JhdGUtPmJpdHJhdGUpOwotCQlkdXJhdGlvbiA9IEdFVF9EVVJBVElPTihkYXRhX2xlbmd0aCwgaHdyYXRlLT5iaXRyYXRlKTsKLQotCQlpZiAocmVzaWR1YWwgIT0gMCkgewotCQkJZHVyYXRpb24rKzsKLQotCQkJLyoKLQkJCSAqIENoZWNrIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSBMZW5ndGggRXh0ZW5zaW9uCi0JCQkgKi8KLQkJCWlmIChod3JhdGUtPmJpdHJhdGUgPT0gMTEwICYmIHJlc2lkdWFsIDw9IDMwKQotCQkJCXR4ZGVzYy0+c2VydmljZSB8PSAweDgwOwotCQl9Ci0KLQkJdHhkZXNjLT5sZW5ndGhfaGlnaCA9IChkdXJhdGlvbiA+PiA4KSAmIDB4ZmY7Ci0JCXR4ZGVzYy0+bGVuZ3RoX2xvdyA9IGR1cmF0aW9uICYgMHhmZjsKLQotCQkvKgotCQkgKiBXaGVuIHByZWFtYmxlIGlzIGVuYWJsZWQgd2Ugc2hvdWxkIHNldCB0aGUKLQkJICogcHJlYW1ibGUgYml0IGZvciB0aGUgc2lnbmFsLgotCQkgKi8KLQkJaWYgKHR4cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFKQotCQkJdHhkZXNjLT5zaWduYWwgfD0gMHgwODsKLQl9CisJLyoKKwkgKiBBcHBseSBUWCBkZXNjcmlwdG9yIGhhbmRsaW5nIGJ5IGNvbXBvbmVudHMKKwkgKi8KKwlydDJ4MDBjcnlwdG9fY3JlYXRlX3R4X2Rlc2NyaXB0b3IoZW50cnksIHR4ZGVzYyk7CisJcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3Jfc2VxKGVudHJ5LCB0eGRlc2MpOworCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX3BsY3AoZW50cnksIHR4ZGVzYywgaHdyYXRlKTsKIH0KIAogc3RhdGljIHZvaWQgcnQyeDAwcXVldWVfd3JpdGVfdHhfZGVzY3JpcHRvcihzdHJ1Y3QgcXVldWVfZW50cnkgKmVudHJ5LApAQCAtNDAzLDcgKzQxNCw3IEBACiAJICovCiAJaWYgKHRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBULCAmdHhkZXNjLmZsYWdzKSAmJgogCSAgICAhdGVzdF9iaXQoRU5UUllfVFhEX0VOQ1JZUFRfSVYsICZ0eGRlc2MuZmxhZ3MpKSB7Ci0JCWlmICh0ZXN0X2JpdChDT05GSUdfQ1JZUFRPX0NPUFlfSVYsICZxdWV1ZS0+cnQyeDAwZGV2LT5mbGFncykpCisJCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9DT1BZX0lWLCAmcXVldWUtPnJ0MngwMGRldi0+ZmxhZ3MpKQogCQkJcnQyeDAwY3J5cHRvX3R4X2NvcHlfaXYoc2tiLCBpdl9sZW4pOwogCQllbHNlCiAJCQlydDJ4MDBjcnlwdG9fdHhfcmVtb3ZlX2l2KHNrYiwgaXZfbGVuKTsKQEAgLTQzMiw3ICs0NDMsOCBAQAogfQogCiBpbnQgcnQyeDAwcXVldWVfdXBkYXRlX2JlYWNvbihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgICBjb25zdCBib29sIGVuYWJsZV9iZWFjb24pCiB7CiAJc3RydWN0IHJ0MngwMF9pbnRmICppbnRmID0gdmlmX3RvX2ludGYodmlmKTsKIAlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2M7CkBAIC00NDIsNiArNDU0LDExIEBACiAJaWYgKHVubGlrZWx5KCFpbnRmLT5iZWFjb24pKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKKwlpZiAoIWVuYWJsZV9iZWFjb24pIHsKKwkJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lsbF90eF9xdWV1ZShydDJ4MDBkZXYsIFFJRF9CRUFDT04pOworCQlyZXR1cm4gMDsKKwl9CisKIAlpbnRmLT5iZWFjb24tPnNrYiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KHJ0MngwMGRldi0+aHcsIHZpZik7CiAJaWYgKCFpbnRmLT5iZWFjb24tPnNrYikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00OTAsNiArNTA3LDkgQEAKIHsKIAlpbnQgYXRpbSA9IHRlc3RfYml0KERSSVZFUl9SRVFVSVJFX0FUSU1fUVVFVUUsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAorCWlmIChxdWV1ZSA9PSBRSURfUlgpCisJCXJldHVybiBydDJ4MDBkZXYtPnJ4OworCiAJaWYgKHF1ZXVlIDwgcnQyeDAwZGV2LT5vcHMtPnR4X3F1ZXVlcyAmJiBydDJ4MDBkZXYtPnR4KQogCQlyZXR1cm4gJnJ0MngwMGRldi0+dHhbcXVldWVdOwogCkBAIC01NjYsNiArNTg2LDE0IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXVldWUtPmxvY2ssIGlycWZsYWdzKTsKIH0KIAordm9pZCBydDJ4MDBxdWV1ZV9zdG9wX3F1ZXVlcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQoreworCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKKworCXR4YWxsX3F1ZXVlX2Zvcl9lYWNoKHJ0MngwMGRldiwgcXVldWUpCisJCXJ0MngwMGRldi0+b3BzLT5saWItPmtpbGxfdHhfcXVldWUocnQyeDAwZGV2LCBxdWV1ZS0+cWlkKTsKK30KKwogdm9pZCBydDJ4MDBxdWV1ZV9pbml0X3F1ZXVlcyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXN0cnVjdCBkYXRhX3F1ZXVlICpxdWV1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKaW5kZXggMjgyOTM3MS4uOTdlMmFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xNTgsNiArMTU4LDE0IEBACiB9OwogCiAvKioKKyAqIFJYRE9ORV9TSUdOQUxfTUFTSyAtIERlZmluZSB0byBtYXNrIG9mZiBhbGwgJnJ4ZG9uZV9lbnRyeV9kZXNjX2ZsYWdzIGZsYWdzCisgKiBleGNlcHQgZm9yIHRoZSBSWERPTkVfU0lHTkFMXyogZmxhZ3MuIFRoaXMgaXMgdXNlZnVsIHRvIGNvbnZlcnQgdGhlIGRldl9mbGFncworICogZnJvbSAmcnhkb25lX2VudHJ5X2Rlc2MgdG8gYSBzaWduYWwgdmFsdWUgdHlwZS4KKyAqLworI2RlZmluZSBSWERPTkVfU0lHTkFMX01BU0sgXAorICAgICAgICggUlhET05FX1NJR05BTF9QTENQIHwgUlhET05FX1NJR05BTF9CSVRSQVRFICkKKworLyoqCiAgKiBzdHJ1Y3Qgcnhkb25lX2VudHJ5X2Rlc2M6IFJYIEVudHJ5IGRlc2NyaXB0b3IKICAqCiAgKiBTdW1tYXJ5IG9mIGluZm9ybWF0aW9uIHRoYXQgaGFzIGJlZW4gcmVhZCBmcm9tIHRoZSBSWCBmcmFtZSBkZXNjcmlwdG9yLgpAQCAtMTY1LDYgKzE3Myw3IEBACiAgKiBAdGltZXN0YW1wOiBSWCBUaW1lc3RhbXAKICAqIEBzaWduYWw6IFNpZ25hbCBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUuCiAgKiBAcnNzaTogUlNTSSBvZiB0aGUgcmVjZWl2ZWQgZnJhbWUuCisgKiBAbm9pc2U6IE1lYXN1cmVkIG5vaXNlIGR1cmluZyBmcmFtZSByZWNlcHRpb24uCiAgKiBAc2l6ZTogRGF0YSBzaXplIG9mIHRoZSByZWNlaXZlZCBmcmFtZS4KICAqIEBmbGFnczogTUFDODAyMTEgcmVjZWl2ZSBmbGFncyAoU2VlICZlbnVtIG1hYzgwMjExX3J4X2ZsYWdzKS4KICAqIEBkZXZfZmxhZ3M6IFJhbGluayByZWNlaXZlIGZsYWdzIChTZWUgJmVudW0gcnhkb25lX2VudHJ5X2Rlc2NfZmxhZ3MpLgpAQCAtMTc3LDYgKzE4Niw3IEBACiAJdTY0IHRpbWVzdGFtcDsKIAlpbnQgc2lnbmFsOwogCWludCByc3NpOworCWludCBub2lzZTsKIAlpbnQgc2l6ZTsKIAlpbnQgZmxhZ3M7CiAJaW50IGRldl9mbGFnczsKQEAgLTIyMiw3ICsyMzIsNiBAQAogICoKICAqIEBFTlRSWV9UWERfUlRTX0ZSQU1FOiBUaGlzIGZyYW1lIGlzIGEgUlRTIGZyYW1lLgogICogQEVOVFJZX1RYRF9DVFNfRlJBTUU6IFRoaXMgZnJhbWUgaXMgYSBDVFMtdG8tc2VsZiBmcmFtZS4KLSAqIEBFTlRSWV9UWERfT0ZETV9SQVRFOiBUaGlzIGZyYW1lIGlzIHNlbmQgb3V0IHdpdGggYW4gT0ZETSByYXRlLgogICogQEVOVFJZX1RYRF9HRU5FUkFURV9TRVE6IFRoaXMgZnJhbWUgcmVxdWlyZXMgc2VxdWVuY2UgY291bnRlci4KICAqIEBFTlRSWV9UWERfRklSU1RfRlJBR01FTlQ6IFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLgogICogQEVOVFJZX1RYRF9NT1JFX0ZSQUc6IFRoaXMgZnJhbWUgaXMgZm9sbG93ZWQgYnkgYW5vdGhlciBmcmFnbWVudC4KQEAgLTIzOCw3ICsyNDcsNiBAQAogZW51bSB0eGVudHJ5X2Rlc2NfZmxhZ3MgewogCUVOVFJZX1RYRF9SVFNfRlJBTUUsCiAJRU5UUllfVFhEX0NUU19GUkFNRSwKLQlFTlRSWV9UWERfT0ZETV9SQVRFLAogCUVOVFJZX1RYRF9HRU5FUkFURV9TRVEsCiAJRU5UUllfVFhEX0ZJUlNUX0ZSQUdNRU5ULAogCUVOVFJZX1RYRF9NT1JFX0ZSQUcsCkBAIC0yNjMsNiArMjcxLDcgQEAKICAqIEBsZW5ndGhfbG93OiBQTENQIGxlbmd0aCBsb3cgd29yZC4KICAqIEBzaWduYWw6IFBMQ1Agc2lnbmFsLgogICogQHNlcnZpY2U6IFBMQ1Agc2VydmljZS4KKyAqIEByYXRlX21vZGU6IFJhdGUgbW9kZSAoU2VlIEBlbnVtIHJhdGVfbW9kdWxhdGlvbikuCiAgKiBAcmV0cnlfbGltaXQ6IE1heCBudW1iZXIgb2YgcmV0cmllcy4KICAqIEBhaWZzOiBBSUZTIHZhbHVlLgogICogQGlmczogSUZTIHZhbHVlLgpAQCAtMjgyLDYgKzI5MSw4IEBACiAJdTE2IHNpZ25hbDsKIAl1MTYgc2VydmljZTsKIAorCXUxNiByYXRlX21vZGU7CisKIAlzaG9ydCByZXRyeV9saW1pdDsKIAlzaG9ydCBhaWZzOwogCXNob3J0IGlmczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZWcuaAppbmRleCBjMmZiYTdjLi44NjEzMjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJlZy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTI1LDYgKzEyNSwyNiBAQAogfTsKIAogLyoKKyAqIFJhdGUgbW9kdWxhdGlvbnMKKyAqLworZW51bSByYXRlX21vZHVsYXRpb24geworCVJBVEVfTU9ERV9DQ0sgPSAwLAorCVJBVEVfTU9ERV9PRkRNID0gMSwKKwlSQVRFX01PREVfSFRfTUlYID0gMiwKKwlSQVRFX01PREVfSFRfR1JFRU5GSUVMRCA9IDMsCit9OworCisvKgorICogRmlybXdhcmUgdmFsaWRhdGlvbiBlcnJvciBjb2RlcworICovCitlbnVtIGZpcm13YXJlX2Vycm9ycyB7CisJRldfT0ssCisJRldfQkFEX0NSQywKKwlGV19CQURfTEVOR1RILAorCUZXX0JBRF9WRVJTSU9OLAorfTsKKworLyoKICAqIFJlZ2lzdGVyIGhhbmRsZXJzLgogICogV2Ugc3RvcmUgdGhlIHBvc2l0aW9uIG9mIGEgcmVnaXN0ZXIgZmllbGQgaW5zaWRlIGEgZmllbGQgc3RydWN0dXJlLAogICogVGhpcyB3aWxsIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIHNldHRpbmcgYW5kIHJlYWRpbmcgYSBjZXJ0YWluIGZpZWxkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcmZraWxsLmMKaW5kZXggMzI5OGNhZS4uYjZkNGM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHJma2lsbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDByZmtpbGwuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI1LDczICsyNSwzMCBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CiAKICNpbmNsdWRlICJydDJ4MDAuaCIKICNpbmNsdWRlICJydDJ4MDBsaWIuaCIKIAotc3RhdGljIGludCBydDJ4MDByZmtpbGxfdG9nZ2xlX3JhZGlvKHZvaWQgKmRhdGEsIGVudW0gcmZraWxsX3N0YXRlIHN0YXRlKQorc3RhdGljIHZvaWQgcnQyeDAwcmZraWxsX3BvbGwoc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnBvbGxfZGV2KQogewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkYXRhOwotCWludCByZXR2YWwgPSAwOwotCi0JaWYgKHVubGlrZWx5KCFydDJ4MDBkZXYpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogT25seSBjb250aW51ZSBpZiB0aGVyZSBhcmUgZW5hYmxlZCBpbnRlcmZhY2VzLgotCSAqLwotCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1NUQVJURUQsICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoc3RhdGUgPT0gUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRCkgewotCQlJTkZPKHJ0MngwMGRldiwgIlJGS0lMTCBldmVudDogZW5hYmxpbmcgcmFkaW8uXG4iKTsKLQkJY2xlYXJfYml0KERFVklDRV9TVEFURV9ESVNBQkxFRF9SQURJT19IVywgJnJ0MngwMGRldi0+ZmxhZ3MpOwotCQlyZXR2YWwgPSBydDJ4MDBsaWJfZW5hYmxlX3JhZGlvKHJ0MngwMGRldik7Ci0JfSBlbHNlIGlmIChzdGF0ZSA9PSBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEKSB7Ci0JCUlORk8ocnQyeDAwZGV2LCAiUkZLSUxMIGV2ZW50OiBkaXNhYmxpbmcgcmFkaW8uXG4iKTsKLQkJc2V0X2JpdChERVZJQ0VfU1RBVEVfRElTQUJMRURfUkFESU9fSFcsICZydDJ4MDBkZXYtPmZsYWdzKTsKLQkJcnQyeDAwbGliX2Rpc2FibGVfcmFkaW8ocnQyeDAwZGV2KTsKLQl9IGVsc2UgewotCQlXQVJOSU5HKHJ0MngwMGRldiwgIlJGS0lMTCBldmVudDogdW5rbm93biBzdGF0ZSAlZC5cbiIsIHN0YXRlKTsKLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IHJ0MngwMHJma2lsbF9nZXRfc3RhdGUodm9pZCAqZGF0YSwgZW51bSByZmtpbGxfc3RhdGUgKnN0YXRlKQotewotCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBkYXRhOwotCi0JLyoKLQkgKiByZmtpbGxfcG9sbCByZXBvcnRzIDEgd2hlbiB0aGUga2V5IGhhcyBiZWVuIHByZXNzZWQgYW5kIHRoZQotCSAqIHJhZGlvIHNob3VsZCBiZSBibG9ja2VkLgotCSAqLwotCSpzdGF0ZSA9IHJ0MngwMGRldi0+b3BzLT5saWItPnJma2lsbF9wb2xsKHJ0MngwMGRldikgPwotCSAgICBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEIDogUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBydDJ4MDByZmtpbGxfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9Ci0JICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnQyeDAwX2RldiwgcmZraWxsX3dvcmsud29yayk7Ci0JZW51bSByZmtpbGxfc3RhdGUgc3RhdGU7CisJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IHBvbGxfZGV2LT5wcml2YXRlOworCWludCBzdGF0ZSwgb2xkX3N0YXRlOwogCiAJaWYgKCF0ZXN0X2JpdChSRktJTExfU1RBVEVfUkVHSVNURVJFRCwgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSB8fAogCSAgICAhdGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybjsKIAogCS8qCi0JICogUG9sbCBsYXRlc3Qgc3RhdGUgYW5kIHJlcG9ydCBpdCB0byByZmtpbGwgd2hvIHNob3VsZCBzb3J0Ci0JICogb3V0IGlmIHRoZSBzdGF0ZSBzaG91bGQgYmUgdG9nZ2xlZCBvciBub3QuCisJICogUG9sbCBsYXRlc3Qgc3RhdGUsIGlmIHRoZSBzdGF0ZSBpcyBkaWZmZXJlbnQgdGhlbiB0aGUgcHJldmlvdXMgc3RhdGUsCisJICogd2Ugc2hvdWxkIGdlbmVyYXRlIGFuIGlucHV0IGV2ZW50LgogCSAqLwotCWlmICghcnQyeDAwcmZraWxsX2dldF9zdGF0ZShydDJ4MDBkZXYsICZzdGF0ZSkpCi0JCXJma2lsbF9mb3JjZV9zdGF0ZShydDJ4MDBkZXYtPnJma2lsbCwgc3RhdGUpOworCXN0YXRlID0gISFydDJ4MDBkZXYtPm9wcy0+bGliLT5yZmtpbGxfcG9sbChydDJ4MDBkZXYpOworCW9sZF9zdGF0ZSA9ICEhdGVzdF9iaXQoUkZLSUxMX1NUQVRFX0JMT0NLRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7CiAKLQlxdWV1ZV9kZWxheWVkX3dvcmsocnQyeDAwZGV2LT5ody0+d29ya3F1ZXVlLAotCQkJICAgJnJ0MngwMGRldi0+cmZraWxsX3dvcmssIFJGS0lMTF9QT0xMX0lOVEVSVkFMKTsKKwlpZiAob2xkX3N0YXRlICE9IHN0YXRlKSB7CisJCWlucHV0X3JlcG9ydF9zd2l0Y2gocG9sbF9kZXYtPmlucHV0LCBTV19SRktJTExfQUxMLCBzdGF0ZSk7CisJCWNoYW5nZV9iaXQoUkZLSUxMX1NUQVRFX0JMT0NLRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSk7CisJfQogfQogCiB2b2lkIHJ0MngwMHJma2lsbF9yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtMTAwLDggKzU3LDggQEAKIAkgICAgdGVzdF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCiAJCXJldHVybjsKIAotCWlmIChyZmtpbGxfcmVnaXN0ZXIocnQyeDAwZGV2LT5yZmtpbGwpKSB7Ci0JCUVSUk9SKHJ0MngwMGRldiwgIkZhaWxlZCB0byByZWdpc3RlciByZmtpbGwgaGFuZGxlci5cbiIpOworCWlmIChpbnB1dF9yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KSkgeworCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgcG9sbGVkIGRldmljZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMDksMTAgKzY2LDEwIEBACiAKIAkvKgogCSAqIEZvcmNlIGluaXRpYWwgcG9sbCB3aGljaCB3aWxsIGRldGVjdCB0aGUgaW5pdGlhbCBkZXZpY2Ugc3RhdGUsCi0JICogYW5kIGNvcnJlY3RseSBzZW5kcyB0aGUgc2lnbmFsIHRvIHRoZSByZmtpbGwgbGF5ZXIgYWJvdXQgdGhpcworCSAqIGFuZCBjb3JyZWN0bHkgc2VuZHMgdGhlIHNpZ25hbCB0byB0aGUgaW5wdXQgbGF5ZXIgYWJvdXQgdGhpcwogCSAqIHN0YXRlLgogCSAqLwotCXJ0MngwMHJma2lsbF9wb2xsKCZydDJ4MDBkZXYtPnJma2lsbF93b3JrLndvcmspOworCXJ0MngwMHJma2lsbF9wb2xsKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KTsKIH0KIAogdm9pZCBydDJ4MDByZmtpbGxfdW5yZWdpc3RlcihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQpAQCAtMTIxLDUyICs3OCw1MCBAQAogCSAgICAhdGVzdF9iaXQoUkZLSUxMX1NUQVRFX1JFR0lTVEVSRUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCiAJCXJldHVybjsKIAotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcnQyeDAwZGV2LT5yZmtpbGxfd29yayk7Ci0KLQlyZmtpbGxfdW5yZWdpc3RlcihydDJ4MDBkZXYtPnJma2lsbCk7CisJaW5wdXRfdW5yZWdpc3Rlcl9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KTsKIAogCV9fY2xlYXJfYml0KFJGS0lMTF9TVEFURV9SRUdJU1RFUkVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwogfQogCiB2b2lkIHJ0MngwMHJma2lsbF9hbGxvY2F0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IHdpcGh5X2RldihydDJ4MDBkZXYtPmh3LT53aXBoeSk7CisJc3RydWN0IGlucHV0X3BvbGxlZF9kZXYgKnBvbGxfZGV2OwogCi0JaWYgKHRlc3RfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCisJaWYgKHRlc3RfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkgfHwKKwkgICAgIXRlc3RfYml0KENPTkZJR19TVVBQT1JUX0hXX0JVVFRPTiwgJnJ0MngwMGRldi0+ZmxhZ3MpKQogCQlyZXR1cm47CiAKLQlydDJ4MDBkZXYtPnJma2lsbCA9IHJma2lsbF9hbGxvY2F0ZShkZXYsIFJGS0lMTF9UWVBFX1dMQU4pOwotCWlmICghcnQyeDAwZGV2LT5yZmtpbGwpIHsKLQkJRVJST1IocnQyeDAwZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIHJma2lsbCBoYW5kbGVyLlxuIik7CisJcG9sbF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9wb2xsZWRfZGV2aWNlKCk7CisJaWYgKCFwb2xsX2RldikgeworCQlFUlJPUihydDJ4MDBkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgcG9sbGVkIGRldmljZS5cbiIpOwogCQlyZXR1cm47CiAJfQogCisJcG9sbF9kZXYtPnByaXZhdGUgPSBydDJ4MDBkZXY7CisJcG9sbF9kZXYtPnBvbGwgPSBydDJ4MDByZmtpbGxfcG9sbDsKKwlwb2xsX2Rldi0+cG9sbF9pbnRlcnZhbCA9IFJGS0lMTF9QT0xMX0lOVEVSVkFMOworCisJcG9sbF9kZXYtPmlucHV0LT5uYW1lID0gcnQyeDAwZGV2LT5vcHMtPm5hbWU7CisJcG9sbF9kZXYtPmlucHV0LT5waHlzID0gd2lwaHlfbmFtZShydDJ4MDBkZXYtPmh3LT53aXBoeSk7CisJcG9sbF9kZXYtPmlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJcG9sbF9kZXYtPmlucHV0LT5pZC52ZW5kb3IgPSAweDE4MTQ7CisJcG9sbF9kZXYtPmlucHV0LT5pZC5wcm9kdWN0ID0gcnQyeDAwZGV2LT5jaGlwLnJ0OworCXBvbGxfZGV2LT5pbnB1dC0+aWQudmVyc2lvbiA9IHJ0MngwMGRldi0+Y2hpcC5yZXY7CisJcG9sbF9kZXYtPmlucHV0LT5kZXYucGFyZW50ID0gd2lwaHlfZGV2KHJ0MngwMGRldi0+aHctPndpcGh5KTsKKwlwb2xsX2Rldi0+aW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX1NXKTsKKwlwb2xsX2Rldi0+aW5wdXQtPnN3Yml0WzBdID0gQklUKFNXX1JGS0lMTF9BTEwpOworCisJcnQyeDAwZGV2LT5yZmtpbGxfcG9sbF9kZXYgPSBwb2xsX2RldjsKKwogCV9fc2V0X2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELCAmcnQyeDAwZGV2LT5yZmtpbGxfc3RhdGUpOwotCi0JcnQyeDAwZGV2LT5yZmtpbGwtPm5hbWUgPSBydDJ4MDBkZXYtPm9wcy0+bmFtZTsKLQlydDJ4MDBkZXYtPnJma2lsbC0+ZGF0YSA9IHJ0MngwMGRldjsKLQlydDJ4MDBkZXYtPnJma2lsbC0+dG9nZ2xlX3JhZGlvID0gcnQyeDAwcmZraWxsX3RvZ2dsZV9yYWRpbzsKLQlpZiAodGVzdF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKLQkJcnQyeDAwZGV2LT5yZmtpbGwtPmdldF9zdGF0ZSA9IHJ0MngwMHJma2lsbF9nZXRfc3RhdGU7Ci0JCXJ0MngwMGRldi0+cmZraWxsLT5zdGF0ZSA9Ci0JCQlydDJ4MDBkZXYtPm9wcy0+bGliLT5yZmtpbGxfcG9sbChydDJ4MDBkZXYpID8KLQkJCSAgICBSRktJTExfU1RBVEVfU09GVF9CTE9DS0VEIDogUkZLSUxMX1NUQVRFX1VOQkxPQ0tFRDsKLQl9IGVsc2UgewotCQlydDJ4MDBkZXYtPnJma2lsbC0+c3RhdGUgPSBSRktJTExfU1RBVEVfVU5CTE9DS0VEOwotCX0KLQotCUlOSVRfREVMQVlFRF9XT1JLKCZydDJ4MDBkZXYtPnJma2lsbF93b3JrLCBydDJ4MDByZmtpbGxfcG9sbCk7Ci0KLQlyZXR1cm47CiB9CiAKIHZvaWQgcnQyeDAwcmZraWxsX2ZyZWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlpZiAoIXRlc3RfYml0KFJGS0lMTF9TVEFURV9BTExPQ0FURUQsICZydDJ4MDBkZXYtPnJma2lsbF9zdGF0ZSkpCisJaWYgKCFfX3Rlc3RfYW5kX2NsZWFyX2JpdChSRktJTExfU1RBVEVfQUxMT0NBVEVELAorCQkJCSAgJnJ0MngwMGRldi0+cmZraWxsX3N0YXRlKSkKIAkJcmV0dXJuOwogCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydDJ4MDBkZXYtPnJma2lsbF93b3JrKTsKLQotCXJma2lsbF9mcmVlKHJ0MngwMGRldi0+cmZraWxsKTsKLQlydDJ4MDBkZXYtPnJma2lsbCA9IE5VTEw7CisJaW5wdXRfZnJlZV9wb2xsZWRfZGV2aWNlKHJ0MngwMGRldi0+cmZraWxsX3BvbGxfZGV2KTsKKwlydDJ4MDBkZXYtPnJma2lsbF9wb2xsX2RldiA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKaW5kZXggMGIyOWQ3Ni4uN2Q1MGNhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI5Niw2ICsyOTYsNDEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMHVzYl9raWNrX3R4X3F1ZXVlKTsKIAordm9pZCBydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCkKK3sKKwlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWUgPSBydDJ4MDBxdWV1ZV9nZXRfcXVldWUocnQyeDAwZGV2LCBxaWQpOworCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdjsKKwlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfYmNuICpiY25fcHJpdjsKKwl1bnNpZ25lZCBpbnQgaTsKKwlib29sIGtpbGxfZ3VhcmQ7CisKKwkvKgorCSAqIFdoZW4ga2lsbGluZyB0aGUgYmVhY29uIHF1ZXVlLCB3ZSBtdXN0IGFsc28ga2lsbAorCSAqIHRoZSBiZWFjb24gZ3VhcmQgYnl0ZS4KKwkgKi8KKwlraWxsX2d1YXJkID0KKwkgICAgKHFpZCA9PSBRSURfQkVBQ09OKSAmJgorCSAgICAodGVzdF9iaXQoRFJJVkVSX1JFUVVJUkVfQkVBQ09OX0dVQVJELCAmcnQyeDAwZGV2LT5mbGFncykpOworCisJLyoKKwkgKiBDYW5jZWwgYWxsIGVudHJpZXMuCisJICovCisJZm9yIChpID0gMDsgaSA8IHF1ZXVlLT5saW1pdDsgaSsrKSB7CisJCWVudHJ5X3ByaXYgPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7CisJCXVzYl9raWxsX3VyYihlbnRyeV9wcml2LT51cmIpOworCisJCS8qCisJCSAqIEtpbGwgZ3VhcmRpYW4gdXJiIChpZiByZXF1aXJlZCBieSBkcml2ZXIpLgorCQkgKi8KKwkJaWYgKGtpbGxfZ3VhcmQpIHsKKwkJCWJjbl9wcml2ID0gcXVldWUtPmVudHJpZXNbaV0ucHJpdl9kYXRhOworCQkJdXNiX2tpbGxfdXJiKGJjbl9wcml2LT5ndWFyZGlhbl91cmIpOworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwdXNiX2tpbGxfdHhfcXVldWUpOworCiAvKgogICogUlggZGF0YSBoYW5kbGVycy4KICAqLwpAQCAtMzM4LDM1ICszNzMsMTQgQEAKICAqLwogdm9pZCBydDJ4MDB1c2JfZGlzYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewotCXN0cnVjdCBxdWV1ZV9lbnRyeV9wcml2X3VzYiAqZW50cnlfcHJpdjsKLQlzdHJ1Y3QgcXVldWVfZW50cnlfcHJpdl91c2JfYmNuICpiY25fcHJpdjsKLQlzdHJ1Y3QgZGF0YV9xdWV1ZSAqcXVldWU7Ci0JdW5zaWduZWQgaW50IGk7Ci0KIAlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3Rfc3cocnQyeDAwZGV2LCBVU0JfUlhfQ09OVFJPTCwgMCwgMCwKIAkJCQkgICAgUkVHSVNURVJfVElNRU9VVCk7CiAKIAkvKgotCSAqIENhbmNlbCBhbGwgcXVldWVzLgorCSAqIFRoZSBVU0IgdmVyc2lvbiBvZiBraWxsX3R4X3F1ZXVlIGFsc28gd29ya3MKKwkgKiBvbiB0aGUgUlggcXVldWUuCiAJICovCi0JcXVldWVfZm9yX2VhY2gocnQyeDAwZGV2LCBxdWV1ZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgcXVldWUtPmxpbWl0OyBpKyspIHsKLQkJCWVudHJ5X3ByaXYgPSBxdWV1ZS0+ZW50cmllc1tpXS5wcml2X2RhdGE7Ci0JCQl1c2Jfa2lsbF91cmIoZW50cnlfcHJpdi0+dXJiKTsKLQkJfQotCX0KLQotCS8qCi0JICogS2lsbCBndWFyZGlhbiB1cmIgKGlmIHJlcXVpcmVkIGJ5IGRyaXZlcikuCi0JICovCi0JaWYgKCF0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmZsYWdzKSkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IHJ0MngwMGRldi0+YmNuLT5saW1pdDsgaSsrKSB7Ci0JCWJjbl9wcml2ID0gcnQyeDAwZGV2LT5iY24tPmVudHJpZXNbaV0ucHJpdl9kYXRhOwotCQlpZiAoYmNuX3ByaXYtPmd1YXJkaWFuX3VyYikKLQkJCXVzYl9raWxsX3VyYihiY25fcHJpdi0+Z3VhcmRpYW5fdXJiKTsKLQl9CisJcnQyeDAwZGV2LT5vcHMtPmxpYi0+a2lsbF90eF9xdWV1ZShydDJ4MDBkZXYsIFFJRF9SWCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDB1c2JfZGlzYWJsZV9yYWRpbyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuaAppbmRleCAyYmQ0YWM4Li5iZDJkNTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLQlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA4IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CisJQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOSBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAogCTxodHRwOi8vcnQyeDAwLnNlcmlhbG1vbmtleS5jb20+CiAKIAlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDE5LDYgKzQxOSwxNyBAQAogdm9pZCBydDJ4MDB1c2Jfa2lja190eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCk7CiAKKy8qKgorICogcnQyeDAwdXNiX2tpbGxfdHhfcXVldWUgLSBLaWxsIGRhdGEgcXVldWUKKyAqIEBydDJ4MDBkZXY6IFBvaW50ZXIgdG8gJnN0cnVjdCBydDJ4MDBfZGV2CisgKiBAcWlkOiBEYXRhIHF1ZXVlIHRvIGtpbGwKKyAqCisgKiBUaGlzIHdpbGwgd2FsayB0aHJvdWdoIGFsbCBlbnRyaWVzIG9mIHRoZSBxdWV1ZSBhbmQga2lsbCBhbGwKKyAqIHByZXZpb3VzbHkga2lja2VkIGZyYW1lcyBiZWZvcmUgdGhleSBjYW4gYmUgc2VuZC4KKyAqLwordm9pZCBydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJICAgICAgY29uc3QgZW51bSBkYXRhX3F1ZXVlX3FpZCBxaWQpOworCiAvKgogICogRGV2aWNlIGluaXRpYWxpemF0aW9uIGhhbmRsZXJzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYwppbmRleCA5ODdlODkwLi4yY2E4YjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xMjMsOSArMTIzLDYgQEAKIHsKIAl1MzIgcmVnOwogCi0JaWYgKCF3b3JkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZydDJ4MDBkZXYtPmNzcl9tdXRleCk7CiAKIAkvKgpAQCAtMTQ2LDEyICsxNDMsNiBAQAogCW11dGV4X3VubG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogfQogCi0jaWZkZWYgQ09ORklHX1JUMlgwMF9MSUJfTEVEUwotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgZnJvbSBydDYxcGNpX2xlZF9icmlnaHRuZXNzKCkKLSAqIG1ha2UgZ2NjIGhhcHB5IGJ5IHBsYWNpbmcgdGhpcyBmdW5jdGlvbiBpbnNpZGUgdGhlCi0gKiBzYW1lIGlmZGVmIHN0YXRlbWVudCBhcyB0aGUgY2FsbGVyLgotICovCiBzdGF0aWMgdm9pZCBydDYxcGNpX21jdV9yZXF1ZXN0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkJY29uc3QgdTggY29tbWFuZCwgY29uc3QgdTggdG9rZW4sCiAJCQkJY29uc3QgdTggYXJnMCwgY29uc3QgdTggYXJnMSkKQEAgLTE4MCw3ICsxNzEsNiBAQAogCW11dGV4X3VubG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwogCiB9Ci0jZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfTEVEUyAqLwogCiBzdGF0aWMgdm9pZCBydDYxcGNpX2VlcHJvbXJlZ2lzdGVyX3JlYWQoc3RydWN0IGVlcHJvbV85M2N4NiAqZWVwcm9tKQogewpAQCAtOTY3LDYgKzk1Nyw1MCBAQAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcnQ2MXBjaV9jb25maWdfcHMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQlzdHJ1Y3QgcnQyeDAwbGliX2NvbmYgKmxpYmNvbmYpCit7CisJZW51bSBkZXZfc3RhdGUgc3RhdGUgPQorCSAgICAobGliY29uZi0+Y29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgPworCQlTVEFURV9TTEVFUCA6IFNUQVRFX0FXQUtFOworCXUzMiByZWc7CisKKwlpZiAoc3RhdGUgPT0gU1RBVEVfU0xFRVApIHsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMTEsICZyZWcpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0RFTEFZX0FGVEVSX1RCQ04sCisJCQkJICAgbGliY29uZi0+Y29uZi0+YmVhY29uX2ludCAtIDEwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9UQkNOX0JFRk9SRV9XQUtFVVAsCisJCQkJICAgbGliY29uZi0+Y29uZi0+bGlzdGVuX2ludGVydmFsIC0gMSk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfV0FLRVVQX0xBVEVOQ1ksIDUpOworCisJCS8qIFdlIG11c3QgZmlyc3QgZGlzYWJsZSBhdXRvd2FrZSBiZWZvcmUgaXQgY2FuIGJlIGVuYWJsZWQgKi8KKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgcmVnKTsKKworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0FVVE9XQUtFLCAxKTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjExLCByZWcpOworCisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFNPRlRfUkVTRVRfQ1NSLCAweDAwMDAwMDA1KTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU9fQ05UTF9DU1IsIDB4MDAwMDAwMWMpOworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQQ0lfVVNFQ19DU1IsIDB4MDAwMDAwNjApOworCisJCXJ0NjFwY2lfbWN1X3JlcXVlc3QocnQyeDAwZGV2LCBNQ1VfU0xFRVAsIDB4ZmYsIDAsIDApOworCX0gZWxzZSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjExLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9ERUxBWV9BRlRFUl9UQkNOLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9UQkNOX0JFRk9SRV9XQUtFVVAsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX0FVVE9XQUtFLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9XQUtFVVBfTEFURU5DWSwgMCk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgcmVnKTsKKworCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBTT0ZUX1JFU0VUX0NTUiwgMHgwMDAwMDAwNyk7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIElPX0NOVExfQ1NSLCAweDAwMDAwMDE4KTsKKwkJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUENJX1VTRUNfQ1NSLCAweDAwMDAwMDIwKTsKKworCQlydDYxcGNpX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX1dBS0VVUCwgMHhmZiwgMCwgMCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBydDYxcGNpX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAogCQkJICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtOTg0LDYgKzEwMTgsOCBAQAogCQlydDYxcGNpX2NvbmZpZ19yZXRyeV9saW1pdChydDJ4MDBkZXYsIGxpYmNvbmYpOwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9CRUFDT05fSU5URVJWQUwpCiAJCXJ0NjFwY2lfY29uZmlnX2R1cmF0aW9uKHJ0MngwMGRldiwgbGliY29uZik7CisJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKQorCQlydDYxcGNpX2NvbmZpZ19wcyhydDJ4MDBkZXYsIGxpYmNvbmYpOwogfQogCiAvKgpAQCAtMTAwNywyMSArMTA0MywyOCBAQAogCXF1YWwtPmZhbHNlX2NjYSA9IHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFNUQV9DU1IxX0ZBTFNFX0NDQV9FUlJPUik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NjFwY2lfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDYxcGNpX3NldF92Z2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCB1OCB2Z2NfbGV2ZWwpCiB7Ci0JcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHgyMCk7Ci0JcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IDB4MjA7CisJaWYgKHF1YWwtPnZnY19sZXZlbCAhPSB2Z2NfbGV2ZWwpIHsKKwkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdmdjX2xldmVsKTsKKwkJcXVhbC0+dmdjX2xldmVsID0gdmdjX2xldmVsOworCQlxdWFsLT52Z2NfbGV2ZWxfcmVnID0gdmdjX2xldmVsOworCX0KIH0KIAotc3RhdGljIHZvaWQgcnQ2MXBjaV9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgdm9pZCBydDYxcGNpX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKIHsKLQlpbnQgcnNzaSA9IHJ0MngwMF9nZXRfbGlua19yc3NpKCZydDJ4MDBkZXYtPmxpbmspOwotCXU4IHIxNzsKKwlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDIwKTsKK30KKworc3RhdGljIHZvaWQgcnQ2MXBjaV9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgY29uc3QgdTMyIGNvdW50KQorewogCXU4IHVwX2JvdW5kOwogCXU4IGxvd19ib3VuZDsKIAotCXJ0NjFwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAxNywgJnIxNyk7Ci0KIAkvKgogCSAqIERldGVybWluZSByMTcgYm91bmRzLgogCSAqLwpAQCAtMTA1MSwzOCArMTA5NCwzMiBAQAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciB2ZXJ5IHNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTM1KSB7Ci0JCWlmIChyMTcgIT0gMHg2MCkKLQkJCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIDB4NjApOworCWlmIChxdWFsLT5yc3NpID49IC0zNSkgeworCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDYwKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciBzaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC01OCkgewotCQlpZiAocjE3ICE9IHVwX2JvdW5kKQotCQkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdXBfYm91bmQpOworCWlmIChxdWFsLT5yc3NpID49IC01OCkgeworCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCB1cF9ib3VuZCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3IgbWlkZGxlLXNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTY2KSB7Ci0JCWxvd19ib3VuZCArPSAweDEwOwotCQlpZiAocjE3ICE9IGxvd19ib3VuZCkKLQkJCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIGxvd19ib3VuZCk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTY2KSB7CisJCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIGxvd19ib3VuZCArIDB4MTApOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIG1pZC1SMTcgZm9yIG1pZGRsZSBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC03NCkgewotCQlsb3dfYm91bmQgKz0gMHgwODsKLQkJaWYgKHIxNyAhPSBsb3dfYm91bmQpCi0JCQlydDYxcGNpX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCBsb3dfYm91bmQpOworCWlmIChxdWFsLT5yc3NpID49IC03NCkgeworCQlydDYxcGNpX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCBsb3dfYm91bmQgKyAweDA4KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTA5MCwxMiArMTEyNywxMiBAQAogCSAqIFNwZWNpYWwgY2FzZTogQ2hhbmdlIHVwX2JvdW5kIGJhc2VkIG9uIHRoZSByc3NpLgogCSAqIExvd2VyIHVwX2JvdW5kIHdoZW4gcnNzaSBpcyB3ZWFrZXIgdGhlbiAtNzQgZEJtLgogCSAqLwotCXVwX2JvdW5kIC09IDIgKiAoLTc0IC0gcnNzaSk7CisJdXBfYm91bmQgLT0gMiAqICgtNzQgLSBxdWFsLT5yc3NpKTsKIAlpZiAobG93X2JvdW5kID4gdXBfYm91bmQpCiAJCXVwX2JvdW5kID0gbG93X2JvdW5kOwogCi0JaWYgKHIxNyA+IHVwX2JvdW5kKSB7Ci0JCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHVwX2JvdW5kKTsKKwlpZiAocXVhbC0+dmdjX2xldmVsID4gdXBfYm91bmQpIHsKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgdXBfYm91bmQpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMTA1LDE1ICsxMTQyLDEwIEBACiAJICogcjE3IGRvZXMgbm90IHlldCBleGNlZWQgdXBwZXIgbGltaXQsIGNvbnRpbnVlIGFuZCBiYXNlCiAJICogdGhlIHIxNyB0dW5pbmcgb24gdGhlIGZhbHNlIENDQSBjb3VudC4KIAkgKi8KLQlpZiAocnQyeDAwZGV2LT5saW5rLnF1YWwuZmFsc2VfY2NhID4gNTEyICYmIHIxNyA8IHVwX2JvdW5kKSB7Ci0JCWlmICgrK3IxNyA+IHVwX2JvdW5kKQotCQkJcjE3ID0gdXBfYm91bmQ7Ci0JCXJ0NjFwY2lfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHIxNyk7Ci0JfSBlbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPCAxMDAgJiYgcjE3ID4gbG93X2JvdW5kKSB7Ci0JCWlmICgtLXIxNyA8IGxvd19ib3VuZCkKLQkJCXIxNyA9IGxvd19ib3VuZDsKLQkJcnQ2MXBjaV9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgcjE3KTsKLQl9CisJaWYgKChxdWFsLT5mYWxzZV9jY2EgPiA1MTIpICYmIChxdWFsLT52Z2NfbGV2ZWwgPCB1cF9ib3VuZCkpCisJCXJ0NjFwY2lfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsICsrcXVhbC0+dmdjX2xldmVsKTsKKwllbHNlIGlmICgocXVhbC0+ZmFsc2VfY2NhIDwgMTAwKSAmJiAocXVhbC0+dmdjX2xldmVsID4gbG93X2JvdW5kKSkKKwkJcnQ2MXBjaV9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwgLS1xdWFsLT52Z2NfbGV2ZWwpOwogfQogCiAvKgpAQCAtMTE0MSwyNSArMTE3MywzNyBAQAogCXJldHVybiBmd19uYW1lOwogfQogCi1zdGF0aWMgdTE2IHJ0NjFwY2lfZ2V0X2Zpcm13YXJlX2NyYyhjb25zdCB2b2lkICpkYXRhLCBjb25zdCBzaXplX3QgbGVuKQorc3RhdGljIGludCBydDYxcGNpX2NoZWNrX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKIHsKKwl1MTYgZndfY3JjOwogCXUxNiBjcmM7CiAKIAkvKgotCSAqIFVzZSB0aGUgY3JjIGl0dS10IGFsZ29yaXRobS4KKwkgKiBPbmx5IHN1cHBvcnQgOGtiIGZpcm13YXJlIGZpbGVzLgorCSAqLworCWlmIChsZW4gIT0gODE5MikKKwkJcmV0dXJuIEZXX0JBRF9MRU5HVEg7CisKKwkvKgogCSAqIFRoZSBsYXN0IDIgYnl0ZXMgaW4gdGhlIGZpcm13YXJlIGFycmF5IGFyZSB0aGUgY3JjIGNoZWNrc3VtIGl0c2VsZiwKIAkgKiB0aGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIG5ldmVyIHBhc3MgdGhvc2UgMiBieXRlcyB0byB0aGUgY3JjCiAJICogYWxnb3JpdGhtLgogCSAqLworCWZ3X2NyYyA9IChkYXRhW2xlbiAtIDJdIDw8IDggfCBkYXRhW2xlbiAtIDFdKTsKKworCS8qCisJICogVXNlIHRoZSBjcmMgaXR1LXQgYWxnb3JpdGhtLgorCSAqLwogCWNyYyA9IGNyY19pdHVfdCgwLCBkYXRhLCBsZW4gLSAyKTsKIAljcmMgPSBjcmNfaXR1X3RfYnl0ZShjcmMsIDApOwogCWNyYyA9IGNyY19pdHVfdF9ieXRlKGNyYywgMCk7CiAKLQlyZXR1cm4gY3JjOworCXJldHVybiAoZndfY3JjID09IGNyYykgPyBGV19PSyA6IEZXX0JBRF9DUkM7CiB9CiAKLXN0YXRpYyBpbnQgcnQ2MXBjaV9sb2FkX2Zpcm13YXJlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsIGNvbnN0IHZvaWQgKmRhdGEsCi0JCQkJIGNvbnN0IHNpemVfdCBsZW4pCitzdGF0aWMgaW50IHJ0NjFwY2lfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSBjb25zdCB1OCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKIHsKIAlpbnQgaTsKIAl1MzIgcmVnOwpAQCAtMTY1NiwyNCArMTcwMCwxMCBAQAogCiBzdGF0aWMgdm9pZCBydDYxcGNpX2Rpc2FibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQl1MzIgcmVnOwotCisJLyoKKwkgKiBEaXNhYmxlIHBvd2VyCisJICovCiAJcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjEwLCAweDAwMDAxODE4KTsKLQotCS8qCi0JICogRGlzYWJsZSBzeW5jaHJvbmlzYXRpb24uCi0JICovCi0JcnQyeDAwcGNpX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhSWF9DU1I5LCAwKTsKLQotCS8qCi0JICogQ2FuY2VsIFJYIGFuZCBUWC4KLQkgKi8KLQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMwLCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMxLCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMyLCAxKTsKLQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMzLCAxKTsKLQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgcmVnKTsKIH0KIAogc3RhdGljIGludCBydDYxcGNpX3NldF9zdGF0ZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBlbnVtIGRldl9zdGF0ZSBzdGF0ZSkKQEAgLTE4MTIsNyArMTg0Miw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVElNRVNUQU1QLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CisJCQkgICAodHhkZXNjLT5yYXRlX21vZGUgPT0gUkFURV9NT0RFX09GRE0pKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9NT0RFLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFVFJZX01PREUsICZ0eGRlc2MtPmZsYWdzKSk7CkBAIC0xODk2LDYgKzE5MjYsMjQgQEAKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9DTlRMX0NTUiwgcmVnKTsKIH0KIAorc3RhdGljIHZvaWQgcnQ2MXBjaV9raWxsX3R4X3F1ZXVlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJICBjb25zdCBlbnVtIGRhdGFfcXVldWVfcWlkIHFpZCkKK3sKKwl1MzIgcmVnOworCisJaWYgKHFpZCA9PSBRSURfQkVBQ09OKSB7CisJCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYUlhfQ1NSOSwgMCk7CisJCXJldHVybjsKKwl9CisKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMwLCAocWlkID09IFFJRF9BQ19CRSkpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBUWF9DTlRMX0NTUl9BQk9SVF9UWF9BQzEsIChxaWQgPT0gUUlEX0FDX0JLKSk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFRYX0NOVExfQ1NSX0FCT1JUX1RYX0FDMiwgKHFpZCA9PSBRSURfQUNfVkkpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVFhfQ05UTF9DU1JfQUJPUlRfVFhfQUMzLCAocWlkID09IFFJRF9BQ19WTykpOworCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX0NOVExfQ1NSLCByZWcpOworfQorCiAvKgogICogUlggY29udHJvbCBoYW5kbGVycwogICovCkBAIC0yMTk1LDcgKzIyNDMsOCBAQAogCWlmICh3b3JkID09IDB4ZmZmZikgewogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfRU5BQkxFX0RJVkVSU0lUWSwgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQxNigmd29yZCwgRUVQUk9NX05JQ19UWF9ESVZFUlNJVFksIDApOwotCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfVFhfUlhfRklYRUQsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfUlhfRklYRUQsIDApOworCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfVFhfRklYRUQsIDApOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfRVhURVJOQUxfTE5BX0JHLCAwKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZ3b3JkLCBFRVBST01fTklDX0NBUkRCVVNfQUNDRUwsIDApOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9OSUNfRVhURVJOQUxfTE5BX0EsIDApOwpAQCAtMjMzOSwyNCArMjM4OCwxMCBAQAogCSAqLwogCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI5KSAmJgogCSAgICAhdGVzdF9iaXQoQ09ORklHX0RPVUJMRV9BTlRFTk5BLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKLQkJc3dpdGNoIChydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX1RYX1JYX0ZJWEVEKSkgewotCQljYXNlIDA6Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0gQU5URU5OQV9COwotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9IEFOVEVOTkFfQTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0gQU5URU5OQV9COwotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9IEFOVEVOTkFfQjsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0gQU5URU5OQV9BOwotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9IEFOVEVOTkFfQTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlydDJ4MDBkZXYtPmRlZmF1bHRfYW50LnR4ID0gQU5URU5OQV9BOwotCQkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9IEFOVEVOTkFfQjsKLQkJCWJyZWFrOwotCQl9CisJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQucnggPQorCQkgICAgQU5URU5OQV9BICsgcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19SWF9GSVhFRCk7CisJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPQorCQkgICAgQU5URU5OQV9CIC0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX05JQ19UWF9GSVhFRCk7CiAKIAkJaWYgKHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9OSUNfVFhfRElWRVJTSVRZKSkKIAkJCXJ0MngwMGRldi0+ZGVmYXVsdF9hbnQudHggPSBBTlRFTk5BX1NXX0RJVkVSU0lUWTsKQEAgLTI1MzQsNyArMjU2OSw5IEBACiAJICovCiAJcnQyeDAwZGV2LT5ody0+ZmxhZ3MgPQogCSAgICBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKLQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CisJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkgICAgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLOwogCXJ0MngwMGRldi0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gMDsKIAogCVNFVF9JRUVFODAyMTFfREVWKHJ0MngwMGRldi0+aHcsIHJ0MngwMGRldi0+ZGV2KTsKQEAgLTI2MzMsNiArMjY3MCw3IEBACiAJc3RydWN0IHJ0MngwMF9maWVsZDMyIGZpZWxkOwogCWludCByZXR2YWw7CiAJdTMyIHJlZzsKKwl1MzIgb2Zmc2V0OwogCiAJLyoKIAkgKiBGaXJzdCBwYXNzIHRoZSBjb25maWd1cmF0aW9uIHRocm91Z2ggcnQyeDAwbGliLCB0aGF0IHdpbGwKQEAgLTI2NDQsMjQgKzI2ODIsMjMgQEAKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCisJLyoKKwkgKiBXZSBvbmx5IG5lZWQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uCisJICogZm9yIFdNTSBxdWV1ZXMvCisJICovCisJaWYgKHF1ZXVlX2lkeCA+PSA0KQorCQlyZXR1cm4gMDsKKwogCXF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgcXVldWVfaWR4KTsKIAogCS8qIFVwZGF0ZSBXTU0gVFhPUCByZWdpc3RlciAqLwotCWlmIChxdWV1ZV9pZHggPCAyKSB7Ci0JCWZpZWxkLmJpdF9vZmZzZXQgPSBxdWV1ZV9pZHggKiAxNjsKLQkJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKKwlvZmZzZXQgPSBBQ19UWE9QX0NTUjAgKyAoc2l6ZW9mKHUzMikgKiAoISEocXVldWVfaWR4ICYgMikpKTsKKwlmaWVsZC5iaXRfb2Zmc2V0ID0gKHF1ZXVlX2lkeCAmIDEpICogMTY7CisJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKIAotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMCwgJnJlZyk7Ci0JCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBmaWVsZCwgcXVldWUtPnR4b3ApOwotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjAsIHJlZyk7Ci0JfSBlbHNlIGlmIChxdWV1ZV9pZHggPCA0KSB7Ci0JCWZpZWxkLmJpdF9vZmZzZXQgPSAocXVldWVfaWR4IC0gMikgKiAxNjsKLQkJZmllbGQuYml0X21hc2sgPSAweGZmZmYgPDwgZmllbGQuYml0X29mZnNldDsKLQotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIEFDX1RYT1BfQ1NSMSwgJnJlZyk7Ci0JCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBmaWVsZCwgcXVldWUtPnR4b3ApOwotCQlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjEsIHJlZyk7Ci0JfQorCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgb2Zmc2V0LCAmcmVnKTsKKwlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKKwlydDJ4MDBwY2lfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBvZmZzZXQsIHJlZyk7CiAKIAkvKiBVcGRhdGUgV01NIHJlZ2lzdGVycyAqLwogCWZpZWxkLmJpdF9vZmZzZXQgPSBxdWV1ZV9pZHggKiA0OwpAQCAtMjcxNyw3ICsyNzU0LDcgQEAKIAkuaXJxX2hhbmRsZXIJCT0gcnQ2MXBjaV9pbnRlcnJ1cHQsCiAJLnByb2JlX2h3CQk9IHJ0NjFwY2lfcHJvYmVfaHcsCiAJLmdldF9maXJtd2FyZV9uYW1lCT0gcnQ2MXBjaV9nZXRfZmlybXdhcmVfbmFtZSwKLQkuZ2V0X2Zpcm13YXJlX2NyYwk9IHJ0NjFwY2lfZ2V0X2Zpcm13YXJlX2NyYywKKwkuY2hlY2tfZmlybXdhcmUJCT0gcnQ2MXBjaV9jaGVja19maXJtd2FyZSwKIAkubG9hZF9maXJtd2FyZQkJPSBydDYxcGNpX2xvYWRfZmlybXdhcmUsCiAJLmluaXRpYWxpemUJCT0gcnQyeDAwcGNpX2luaXRpYWxpemUsCiAJLnVuaW5pdGlhbGl6ZQkJPSBydDJ4MDBwY2lfdW5pbml0aWFsaXplLApAQCAtMjczMiw2ICsyNzY5LDcgQEAKIAkud3JpdGVfdHhfZGF0YQkJPSBydDJ4MDBwY2lfd3JpdGVfdHhfZGF0YSwKIAkud3JpdGVfYmVhY29uCQk9IHJ0NjFwY2lfd3JpdGVfYmVhY29uLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0NjFwY2lfa2lja190eF9xdWV1ZSwKKwkua2lsbF90eF9xdWV1ZQkJPSBydDYxcGNpX2tpbGxfdHhfcXVldWUsCiAJLmZpbGxfcnhkb25lCQk9IHJ0NjFwY2lfZmlsbF9yeGRvbmUsCiAJLmNvbmZpZ19zaGFyZWRfa2V5CT0gcnQ2MXBjaV9jb25maWdfc2hhcmVkX2tleSwKIAkuY29uZmlnX3BhaXJ3aXNlX2tleQk9IHJ0NjFwY2lfY29uZmlnX3BhaXJ3aXNlX2tleSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCmluZGV4IDY1ZmUzMzMuLjQxZTg5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTUwLDggKzUwLDggQEAKICNkZWZpbmUgRUVQUk9NX1NJWkUJCQkweDAxMDAKICNkZWZpbmUgQkJQX0JBU0UJCQkweDAwMDAKICNkZWZpbmUgQkJQX1NJWkUJCQkweDAwODAKLSNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDAKLSNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTQKKyNkZWZpbmUgUkZfQkFTRQkJCQkweDAwMDQKKyNkZWZpbmUgUkZfU0laRQkJCQkweDAwMTAKIAogLyoKICAqIE51bWJlciBvZiBUWCBxdWV1ZXMuCkBAIC04OCw4ICs4OCwxMCBAQAogCiAvKgogICogU09GVF9SRVNFVF9DU1IKKyAqIEZPUkNFX0NMT0NLX09OOiBIb3N0IGZvcmNlIE1BQyBjbG9jayBPTgogICovCiAjZGVmaW5lIFNPRlRfUkVTRVRfQ1NSCQkJMHgwMDEwCisjZGVmaW5lIFNPRlRfUkVTRVRfQ1NSX0ZPUkNFX0NMT0NLX09OCUZJRUxEMzIoMHgwMDAwMDAwMikKIAogLyoKICAqIE1DVV9JTlRfU09VUkNFX0NTUjogTUNVIGludGVycnVwdCBzb3VyY2UvbWFzayByZWdpc3Rlci4KQEAgLTEwNTQsOCArMTA1NiwxMCBAQAogCiAvKgogICogSU9fQ05UTF9DU1IKKyAqIFJGX1BTOiBTZXQgUkYgaW50ZXJmYWNlIHZhbHVlIHRvIHBvd2VyIHNhdmUKICAqLwogI2RlZmluZSBJT19DTlRMX0NTUgkJCTB4MzQ5OAorI2RlZmluZSBJT19DTlRMX0NTUl9SRl9QUwkJRklFTEQzMigweDAwMDAwMDA0KQogCiAvKgogICogVUFSVF9JTlRfU09VUkNFX0NTUgpAQCAtMTE4Niw3ICsxMTkwLDggQEAKICNkZWZpbmUgRUVQUk9NX05JQwkJCTB4MDAxMQogI2RlZmluZSBFRVBST01fTklDX0VOQUJMRV9ESVZFUlNJVFkJRklFTEQxNigweDAwMDEpCiAjZGVmaW5lIEVFUFJPTV9OSUNfVFhfRElWRVJTSVRZCQlGSUVMRDE2KDB4MDAwMikKLSNkZWZpbmUgRUVQUk9NX05JQ19UWF9SWF9GSVhFRAkJRklFTEQxNigweDAwMGMpCisjZGVmaW5lIEVFUFJPTV9OSUNfUlhfRklYRUQJCUZJRUxEMTYoMHgwMDA0KQorI2RlZmluZSBFRVBST01fTklDX1RYX0ZJWEVECQlGSUVMRDE2KDB4MDAwOCkKICNkZWZpbmUgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkFfQkcJRklFTEQxNigweDAwMTApCiAjZGVmaW5lIEVFUFJPTV9OSUNfQ0FSREJVU19BQ0NFTAlGSUVMRDE2KDB4MDAyMCkKICNkZWZpbmUgRUVQUk9NX05JQ19FWFRFUk5BTF9MTkFfQQlGSUVMRDE2KDB4MDA0MCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCmluZGV4IGNlZmVlMWIuLjQyMGZmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0JQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwOCBydDJ4MDAgU291cmNlRm9yZ2UgUHJvamVjdAorCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDkgcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKIAk8aHR0cDovL3J0MngwMC5zZXJpYWxtb25rZXkuY29tPgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTEyMiw5ICsxMjIsNiBAQAogewogCXUzMiByZWc7CiAKLQlpZiAoIXdvcmQpCi0JCXJldHVybjsKLQogCW11dGV4X2xvY2soJnJ0MngwMGRldi0+Y3NyX211dGV4KTsKIAogCS8qCkBAIC0xODYsNiArMTgzLDE4IEBACiB9OwogI2VuZGlmIC8qIENPTkZJR19SVDJYMDBfTElCX0RFQlVHRlMgKi8KIAorI2lmZGVmIENPTkZJR19SVDJYMDBfTElCX1JGS0lMTAorc3RhdGljIGludCBydDczdXNiX3Jma2lsbF9wb2xsKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJdTMyIHJlZzsKKworCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjEzLCAmcmVnKTsKKwlyZXR1cm4gcnQyeDAwX2dldF9maWVsZDMyKHJlZywgTUFDX0NTUjEzX0JJVDcpOworfQorI2Vsc2UKKyNkZWZpbmUgcnQ3M3VzYl9yZmtpbGxfcG9sbAlOVUxMCisjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCisKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9MRURTCiBzdGF0aWMgdm9pZCBydDczdXNiX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogCQkJCSAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKQEAgLTg0NCw2ICs4NTMsNDQgQEAKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWFJYX0NTUjksIHJlZyk7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0NzN1c2JfY29uZmlnX3BzKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mKQoreworCWVudW0gZGV2X3N0YXRlIHN0YXRlID0KKwkgICAgKGxpYmNvbmYtPmNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpID8KKwkJU1RBVEVfU0xFRVAgOiBTVEFURV9BV0FLRTsKKwl1MzIgcmVnOworCisJaWYgKHN0YXRlID09IFNUQVRFX1NMRUVQKSB7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjExLCAmcmVnKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9ERUxBWV9BRlRFUl9UQkNOLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmJlYWNvbl9pbnQgLSAxMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfVEJDTl9CRUZPUkVfV0FLRVVQLAorCQkJCSAgIGxpYmNvbmYtPmNvbmYtPmxpc3Rlbl9pbnRlcnZhbCAtIDEpOworCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX0NTUjExX1dBS0VVUF9MQVRFTkNZLCA1KTsKKworCQkvKiBXZSBtdXN0IGZpcnN0IGRpc2FibGUgYXV0b3dha2UgYmVmb3JlIGl0IGNhbiBiZSBlbmFibGVkICovCisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfQVVUT1dBS0UsIDApOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMSk7CisJCXJ0MngwMHVzYl9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19DU1IxMSwgcmVnKTsKKworCQlydDJ4MDB1c2JfdmVuZG9yX3JlcXVlc3Rfc3cocnQyeDAwZGV2LCBVU0JfREVWSUNFX01PREUsIDAsCisJCQkJCSAgICBVU0JfTU9ERV9TTEVFUCwgUkVHSVNURVJfVElNRU9VVCk7CisJfSBlbHNlIHsKKwkJcnQyeDAwdXNiX3ZlbmRvcl9yZXF1ZXN0X3N3KHJ0MngwMGRldiwgVVNCX0RFVklDRV9NT0RFLCAwLAorCQkJCQkgICAgVVNCX01PREVfV0FLRVVQLCBSRUdJU1RFUl9USU1FT1VUKTsKKworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IxMSwgJnJlZyk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfREVMQVlfQUZURVJfVEJDTiwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfVEJDTl9CRUZPUkVfV0FLRVVQLCAwKTsKKwkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BQ19DU1IxMV9BVVRPV0FLRSwgMCk7CisJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQUNfQ1NSMTFfV0FLRVVQX0xBVEVOQ1ksIDApOworCQlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBNQUNfQ1NSMTEsIHJlZyk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBydDczdXNiX2NvbmZpZyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAogCQkJICAgc3RydWN0IHJ0MngwMGxpYl9jb25mICpsaWJjb25mLAogCQkJICAgY29uc3QgdW5zaWduZWQgaW50IGZsYWdzKQpAQCAtODYxLDYgKzkwOCw4IEBACiAJCXJ0NzN1c2JfY29uZmlnX3JldHJ5X2xpbWl0KHJ0MngwMGRldiwgbGliY29uZik7CiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCkKIAkJcnQ3M3VzYl9jb25maWdfZHVyYXRpb24ocnQyeDAwZGV2LCBsaWJjb25mKTsKKwlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpCisJCXJ0NzN1c2JfY29uZmlnX3BzKHJ0MngwMGRldiwgbGliY29uZik7CiB9CiAKIC8qCkBAIC04ODQsMjEgKzkzMywyOCBAQAogCXF1YWwtPmZhbHNlX2NjYSA9IHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFNUQV9DU1IxX0ZBTFNFX0NDQV9FUlJPUik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0NzN1c2JfcmVzZXRfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3N0YXRpYyBpbmxpbmUgdm9pZCBydDczdXNiX3NldF92Z2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgICBzdHJ1Y3QgbGlua19xdWFsICpxdWFsLCB1OCB2Z2NfbGV2ZWwpCiB7Ci0JcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgMHgyMCk7Ci0JcnQyeDAwZGV2LT5saW5rLnZnY19sZXZlbCA9IDB4MjA7CisJaWYgKHF1YWwtPnZnY19sZXZlbCAhPSB2Z2NfbGV2ZWwpIHsKKwkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdmdjX2xldmVsKTsKKwkJcXVhbC0+dmdjX2xldmVsID0gdmdjX2xldmVsOworCQlxdWFsLT52Z2NfbGV2ZWxfcmVnID0gdmdjX2xldmVsOworCX0KIH0KIAotc3RhdGljIHZvaWQgcnQ3M3VzYl9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCitzdGF0aWMgdm9pZCBydDczdXNiX3Jlc2V0X3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkJc3RydWN0IGxpbmtfcXVhbCAqcXVhbCkKIHsKLQlpbnQgcnNzaSA9IHJ0MngwMF9nZXRfbGlua19yc3NpKCZydDJ4MDBkZXYtPmxpbmspOwotCXU4IHIxNzsKKwlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDIwKTsKK30KKworc3RhdGljIHZvaWQgcnQ3M3VzYl9saW5rX3R1bmVyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCisJCQkgICAgICAgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwgY29uc3QgdTMyIGNvdW50KQorewogCXU4IHVwX2JvdW5kOwogCXU4IGxvd19ib3VuZDsKIAotCXJ0NzN1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAxNywgJnIxNyk7Ci0KIAkvKgogCSAqIERldGVybWluZSByMTcgYm91bmRzLgogCSAqLwpAQCAtOTExLDEwICs5NjcsMTAgQEAKIAkJCXVwX2JvdW5kICs9IDB4MTA7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAocnNzaSA+IC04MikgeworCQlpZiAocXVhbC0+cnNzaSA+IC04MikgewogCQkJbG93X2JvdW5kID0gMHgxYzsKIAkJCXVwX2JvdW5kID0gMHg0MDsKLQkJfSBlbHNlIGlmIChyc3NpID4gLTg0KSB7CisJCX0gZWxzZSBpZiAocXVhbC0+cnNzaSA+IC04NCkgewogCQkJbG93X2JvdW5kID0gMHgxYzsKIAkJCXVwX2JvdW5kID0gMHgyMDsKIAkJfSBlbHNlIHsKQEAgLTkzOCwzNyArOTk0LDMyIEBACiAJLyoKIAkgKiBTcGVjaWFsIGJpZy1SMTcgZm9yIHZlcnkgc2hvcnQgZGlzdGFuY2UKIAkgKi8KLQlpZiAocnNzaSA+IC0zNSkgewotCQlpZiAocjE3ICE9IDB4NjApCi0JCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCAweDYwKTsKKwlpZiAocXVhbC0+cnNzaSA+IC0zNSkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCAweDYwKTsKIAkJcmV0dXJuOwogCX0KIAogCS8qCiAJICogU3BlY2lhbCBiaWctUjE3IGZvciBzaG9ydCBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC01OCkgewotCQlpZiAocjE3ICE9IHVwX2JvdW5kKQotCQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdXBfYm91bmQpOworCWlmIChxdWFsLT5yc3NpID49IC01OCkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCB1cF9ib3VuZCk7CiAJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIFNwZWNpYWwgYmlnLVIxNyBmb3IgbWlkZGxlLXNob3J0IGRpc3RhbmNlCiAJICovCi0JaWYgKHJzc2kgPj0gLTY2KSB7Ci0JCWxvd19ib3VuZCArPSAweDEwOwotCQlpZiAocjE3ICE9IGxvd19ib3VuZCkKLQkJCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIGxvd19ib3VuZCk7CisJaWYgKHF1YWwtPnJzc2kgPj0gLTY2KSB7CisJCXJ0NzN1c2Jfc2V0X3ZnYyhydDJ4MDBkZXYsIHF1YWwsIGxvd19ib3VuZCArIDB4MTApOwogCQlyZXR1cm47CiAJfQogCiAJLyoKIAkgKiBTcGVjaWFsIG1pZC1SMTcgZm9yIG1pZGRsZSBkaXN0YW5jZQogCSAqLwotCWlmIChyc3NpID49IC03NCkgewotCQlpZiAocjE3ICE9IChsb3dfYm91bmQgKyAweDEwKSkKLQkJCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIGxvd19ib3VuZCArIDB4MDgpOworCWlmIChxdWFsLT5yc3NpID49IC03NCkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCBsb3dfYm91bmQgKyAweDA4KTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTc2LDEyICsxMDI3LDEyIEBACiAJICogU3BlY2lhbCBjYXNlOiBDaGFuZ2UgdXBfYm91bmQgYmFzZWQgb24gdGhlIHJzc2kuCiAJICogTG93ZXIgdXBfYm91bmQgd2hlbiByc3NpIGlzIHdlYWtlciB0aGVuIC03NCBkQm0uCiAJICovCi0JdXBfYm91bmQgLT0gMiAqICgtNzQgLSByc3NpKTsKKwl1cF9ib3VuZCAtPSAyICogKC03NCAtIHF1YWwtPnJzc2kpOwogCWlmIChsb3dfYm91bmQgPiB1cF9ib3VuZCkKIAkJdXBfYm91bmQgPSBsb3dfYm91bmQ7CiAKLQlpZiAocjE3ID4gdXBfYm91bmQpIHsKLQkJcnQ3M3VzYl9iYnBfd3JpdGUocnQyeDAwZGV2LCAxNywgdXBfYm91bmQpOworCWlmIChxdWFsLT52Z2NfbGV2ZWwgPiB1cF9ib3VuZCkgeworCQlydDczdXNiX3NldF92Z2MocnQyeDAwZGV2LCBxdWFsLCB1cF9ib3VuZCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTk5MSwxNyArMTA0MiwxMiBAQAogCSAqIHIxNyBkb2VzIG5vdCB5ZXQgZXhjZWVkIHVwcGVyIGxpbWl0LCBjb250aW51ZSBhbmQgYmFzZQogCSAqIHRoZSByMTcgdHVuaW5nIG9uIHRoZSBmYWxzZSBDQ0EgY291bnQuCiAJICovCi0JaWYgKHJ0MngwMGRldi0+bGluay5xdWFsLmZhbHNlX2NjYSA+IDUxMiAmJiByMTcgPCB1cF9ib3VuZCkgewotCQlyMTcgKz0gNDsKLQkJaWYgKHIxNyA+IHVwX2JvdW5kKQotCQkJcjE3ID0gdXBfYm91bmQ7Ci0JCXJ0NzN1c2JfYmJwX3dyaXRlKHJ0MngwMGRldiwgMTcsIHIxNyk7Ci0JfSBlbHNlIGlmIChydDJ4MDBkZXYtPmxpbmsucXVhbC5mYWxzZV9jY2EgPCAxMDAgJiYgcjE3ID4gbG93X2JvdW5kKSB7Ci0JCXIxNyAtPSA0OwotCQlpZiAocjE3IDwgbG93X2JvdW5kKQotCQkJcjE3ID0gbG93X2JvdW5kOwotCQlydDczdXNiX2JicF93cml0ZShydDJ4MDBkZXYsIDE3LCByMTcpOwotCX0KKwlpZiAoKHF1YWwtPmZhbHNlX2NjYSA+IDUxMikgJiYgKHF1YWwtPnZnY19sZXZlbCA8IHVwX2JvdW5kKSkKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwKKwkJCQltaW5fdCh1OCwgcXVhbC0+dmdjX2xldmVsICsgNCwgdXBfYm91bmQpKTsKKwllbHNlIGlmICgocXVhbC0+ZmFsc2VfY2NhIDwgMTAwKSAmJiAocXVhbC0+dmdjX2xldmVsID4gbG93X2JvdW5kKSkKKwkJcnQ3M3VzYl9zZXRfdmdjKHJ0MngwMGRldiwgcXVhbCwKKwkJCQltYXhfdCh1OCwgcXVhbC0+dmdjX2xldmVsIC0gNCwgbG93X2JvdW5kKSk7CiB9CiAKIC8qCkBAIC0xMDEyLDI1ICsxMDU4LDM3IEBACiAJcmV0dXJuIEZJUk1XQVJFX1JUMjU3MTsKIH0KIAotc3RhdGljIHUxNiBydDczdXNiX2dldF9maXJtd2FyZV9jcmMoY29uc3Qgdm9pZCAqZGF0YSwgY29uc3Qgc2l6ZV90IGxlbikKK3N0YXRpYyBpbnQgcnQ3M3VzYl9jaGVja19maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAorCQkJCSAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7CisJdTE2IGZ3X2NyYzsKIAl1MTYgY3JjOwogCiAJLyoKLQkgKiBVc2UgdGhlIGNyYyBpdHUtdCBhbGdvcml0aG0uCisJICogT25seSBzdXBwb3J0IDJrYiBmaXJtd2FyZSBmaWxlcy4KKwkgKi8KKwlpZiAobGVuICE9IDIwNDgpCisJCXJldHVybiBGV19CQURfTEVOR1RIOworCisJLyoKIAkgKiBUaGUgbGFzdCAyIGJ5dGVzIGluIHRoZSBmaXJtd2FyZSBhcnJheSBhcmUgdGhlIGNyYyBjaGVja3N1bSBpdHNlbGYsCiAJICogdGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCBuZXZlciBwYXNzIHRob3NlIDIgYnl0ZXMgdG8gdGhlIGNyYwogCSAqIGFsZ29yaXRobS4KIAkgKi8KKwlmd19jcmMgPSAoZGF0YVtsZW4gLSAyXSA8PCA4IHwgZGF0YVtsZW4gLSAxXSk7CisKKwkvKgorCSAqIFVzZSB0aGUgY3JjIGl0dS10IGFsZ29yaXRobS4KKwkgKi8KIAljcmMgPSBjcmNfaXR1X3QoMCwgZGF0YSwgbGVuIC0gMik7CiAJY3JjID0gY3JjX2l0dV90X2J5dGUoY3JjLCAwKTsKIAljcmMgPSBjcmNfaXR1X3RfYnl0ZShjcmMsIDApOwogCi0JcmV0dXJuIGNyYzsKKwlyZXR1cm4gKGZ3X2NyYyA9PSBjcmMpID8gRldfT0sgOiBGV19CQURfQ1JDOwogfQogCi1zdGF0aWMgaW50IHJ0NzN1c2JfbG9hZF9maXJtd2FyZShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCB2b2lkICpkYXRhLAotCQkJCSBjb25zdCBzaXplX3QgbGVuKQorc3RhdGljIGludCBydDczdXNiX2xvYWRfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKKwkJCQkgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHN0YXR1czsKQEAgLTE0NDksNyArMTUwNyw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfVElNRVNUQU1QLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFUV9USU1FU1RBTVAsICZ0eGRlc2MtPmZsYWdzKSk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZ3b3JkLCBUWERfVzBfT0ZETSwKLQkJCSAgIHRlc3RfYml0KEVOVFJZX1RYRF9PRkRNX1JBVEUsICZ0eGRlc2MtPmZsYWdzKSk7CisJCQkgICAodHhkZXNjLT5yYXRlX21vZGUgPT0gUkFURV9NT0RFX09GRE0pKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9JRlMsIHR4ZGVzYy0+aWZzKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJndvcmQsIFRYRF9XMF9SRVRSWV9NT0RFLAogCQkJICAgdGVzdF9iaXQoRU5UUllfVFhEX1JFVFJZX01PREUsICZ0eGRlc2MtPmZsYWdzKSk7CkBAIC0xODE2LDYgKzE4NzQsMTQgQEAKIAkJX19zZXRfYml0KENPTkZJR19GUkFNRV9UWVBFLCAmcnQyeDAwZGV2LT5mbGFncyk7CiAKIAkvKgorCSAqIERldGVjdCBpZiB0aGlzIGRldmljZSBoYXMgYW4gaGFyZHdhcmUgY29udHJvbGxlZCByYWRpby4KKwkgKi8KKyNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9SRktJTEwKKwlpZiAocnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfSEFSRFdBUkVfUkFESU8pKQorCQlfX3NldF9iaXQoQ09ORklHX1NVUFBPUlRfSFdfQlVUVE9OLCAmcnQyeDAwZGV2LT5mbGFncyk7CisjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfUkZLSUxMICovCisKKwkvKgogCSAqIFJlYWQgZnJlcXVlbmN5IG9mZnNldC4KIAkgKi8KIAlydDJ4MDBfZWVwcm9tX3JlYWQocnQyeDAwZGV2LCBFRVBST01fRlJFUSwgJmVlcHJvbSk7CkBAIC0yMDIwLDcgKzIwODYsOSBAQAogCSAqLwogCXJ0MngwMGRldi0+aHctPmZsYWdzID0KIAkgICAgSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8Ci0JICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREJNOworCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CisJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CisJICAgIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSzsKIAlydDJ4MDBkZXYtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IFRYRF9ERVNDX1NJWkU7CiAKIAlTRVRfSUVFRTgwMjExX0RFVihydDJ4MDBkZXYtPmh3LCBydDJ4MDBkZXYtPmRldik7CkBAIC0yMTIxLDYgKzIxODksNyBAQAogCXN0cnVjdCBydDJ4MDBfZmllbGQzMiBmaWVsZDsKIAlpbnQgcmV0dmFsOwogCXUzMiByZWc7CisJdTMyIG9mZnNldDsKIAogCS8qCiAJICogRmlyc3QgcGFzcyB0aGUgY29uZmlndXJhdGlvbiB0aHJvdWdoIHJ0MngwMGxpYiwgdGhhdCB3aWxsCkBAIC0yMTMyLDI0ICsyMjAxLDIzIEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAorCS8qCisJICogV2Ugb25seSBuZWVkIHRvIHBlcmZvcm0gYWRkaXRpb25hbCByZWdpc3RlciBpbml0aWFsaXphdGlvbgorCSAqIGZvciBXTU0gcXVldWVzLworCSAqLworCWlmIChxdWV1ZV9pZHggPj0gNCkKKwkJcmV0dXJuIDA7CisKIAlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF9xdWV1ZShydDJ4MDBkZXYsIHF1ZXVlX2lkeCk7CiAKIAkvKiBVcGRhdGUgV01NIFRYT1AgcmVnaXN0ZXIgKi8KLQlpZiAocXVldWVfaWR4IDwgMikgewotCQlmaWVsZC5iaXRfb2Zmc2V0ID0gcXVldWVfaWR4ICogMTY7Ci0JCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7CisJb2Zmc2V0ID0gQUNfVFhPUF9DU1IwICsgKHNpemVvZih1MzIpICogKCEhKHF1ZXVlX2lkeCAmIDIpKSk7CisJZmllbGQuYml0X29mZnNldCA9IChxdWV1ZV9pZHggJiAxKSAqIDE2OworCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7CiAKLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjAsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IwLCByZWcpOwotCX0gZWxzZSBpZiAocXVldWVfaWR4IDwgNCkgewotCQlmaWVsZC5iaXRfb2Zmc2V0ID0gKHF1ZXVlX2lkeCAtIDIpICogMTY7Ci0JCWZpZWxkLmJpdF9tYXNrID0gMHhmZmZmIDw8IGZpZWxkLmJpdF9vZmZzZXQ7Ci0KLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBBQ19UWE9QX0NTUjEsICZyZWcpOwotCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgZmllbGQsIHF1ZXVlLT50eG9wKTsKLQkJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQUNfVFhPUF9DU1IxLCByZWcpOwotCX0KKwlydDJ4MDB1c2JfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIG9mZnNldCwgJnJlZyk7CisJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIGZpZWxkLCBxdWV1ZS0+dHhvcCk7CisJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgb2Zmc2V0LCByZWcpOwogCiAJLyogVXBkYXRlIFdNTSByZWdpc3RlcnMgKi8KIAlmaWVsZC5iaXRfb2Zmc2V0ID0gcXVldWVfaWR4ICogNDsKQEAgLTIxNzAsMTMgKzIyMzgsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMAotLyoKLSAqIE1hYzgwMjExIGRlbWFuZHMgZ2V0X3RzZiBtdXN0IGJlIGF0b21pYy4KLSAqIFRoaXMgaXMgbm90IHBvc3NpYmxlIGZvciBydDczdXNiIHNpbmNlIGFsbCByZWdpc3RlciBhY2Nlc3MKLSAqIGZ1bmN0aW9ucyByZXF1aXJlIHNsZWVwaW5nLiBVbnRpbGwgbWFjODAyMTEgbm8gbG9uZ2VyIG5lZWRzCi0gKiBnZXRfdHNmIHRvIGJlIGF0b21pYywgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZGlzYWJsZWQuCi0gKi8KIHN0YXRpYyB1NjQgcnQ3M3VzYl9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKQEAgLTIxOTAsOSArMjI1MSw2IEBACiAKIAlyZXR1cm4gdHNmOwogfQotI2Vsc2UKLSNkZWZpbmUgcnQ3M3VzYl9nZXRfdHNmCU5VTEwKLSNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnQ3M3VzYl9tYWM4MDIxMV9vcHMgPSB7CiAJLnR4CQkJPSBydDJ4MDBtYWNfdHgsCkBAIC0yMjE0LDEyICsyMjcyLDEzIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0MngwMGxpYl9vcHMgcnQ3M3VzYl9ydDJ4MDBfb3BzID0gewogCS5wcm9iZV9odwkJPSBydDczdXNiX3Byb2JlX2h3LAogCS5nZXRfZmlybXdhcmVfbmFtZQk9IHJ0NzN1c2JfZ2V0X2Zpcm13YXJlX25hbWUsCi0JLmdldF9maXJtd2FyZV9jcmMJPSBydDczdXNiX2dldF9maXJtd2FyZV9jcmMsCisJLmNoZWNrX2Zpcm13YXJlCQk9IHJ0NzN1c2JfY2hlY2tfZmlybXdhcmUsCiAJLmxvYWRfZmlybXdhcmUJCT0gcnQ3M3VzYl9sb2FkX2Zpcm13YXJlLAogCS5pbml0aWFsaXplCQk9IHJ0MngwMHVzYl9pbml0aWFsaXplLAogCS51bmluaXRpYWxpemUJCT0gcnQyeDAwdXNiX3VuaW5pdGlhbGl6ZSwKIAkuY2xlYXJfZW50cnkJCT0gcnQyeDAwdXNiX2NsZWFyX2VudHJ5LAogCS5zZXRfZGV2aWNlX3N0YXRlCT0gcnQ3M3VzYl9zZXRfZGV2aWNlX3N0YXRlLAorCS5yZmtpbGxfcG9sbAkJPSBydDczdXNiX3Jma2lsbF9wb2xsLAogCS5saW5rX3N0YXRzCQk9IHJ0NzN1c2JfbGlua19zdGF0cywKIAkucmVzZXRfdHVuZXIJCT0gcnQ3M3VzYl9yZXNldF90dW5lciwKIAkubGlua190dW5lcgkJPSBydDczdXNiX2xpbmtfdHVuZXIsCkBAIC0yMjI4LDYgKzIyODcsNyBAQAogCS53cml0ZV9iZWFjb24JCT0gcnQ3M3VzYl93cml0ZV9iZWFjb24sCiAJLmdldF90eF9kYXRhX2xlbgk9IHJ0NzN1c2JfZ2V0X3R4X2RhdGFfbGVuLAogCS5raWNrX3R4X3F1ZXVlCQk9IHJ0NzN1c2Jfa2lja190eF9xdWV1ZSwKKwkua2lsbF90eF9xdWV1ZQkJPSBydDJ4MDB1c2Jfa2lsbF90eF9xdWV1ZSwKIAkuZmlsbF9yeGRvbmUJCT0gcnQ3M3VzYl9maWxsX3J4ZG9uZSwKIAkuY29uZmlnX3NoYXJlZF9rZXkJPSBydDczdXNiX2NvbmZpZ19zaGFyZWRfa2V5LAogCS5jb25maWdfcGFpcndpc2Vfa2V5CT0gcnQ3M3VzYl9jb25maWdfcGFpcndpc2Vfa2V5LApAQCAtMjM2NSw2ICsyNDI1LDggQEAKIAl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDk3MTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCS8qIFN1cmVjb20gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNzY5LCAweDMxZjMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCS8qIFRpbGdpbiAqLworCXsgVVNCX0RFVklDRSgweDY5MzMsIDB4NTAwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogUGhpbGlwcyAqLwogCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MjAwYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogUGxhbmV4ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaAppbmRleCA0NmUxNDA1Li5jODAxNmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKQEAgLTEsNSArMSw1IEBACiAvKgotCUNvcHlyaWdodCAoQykgMjAwNCAtIDIwMDggcnQyeDAwIFNvdXJjZUZvcmdlIFByb2plY3QKKwlDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA5IHJ0MngwMCBTb3VyY2VGb3JnZSBQcm9qZWN0CiAJPGh0dHA6Ly9ydDJ4MDAuc2VyaWFsbW9ua2V5LmNvbT4KIAogCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC01MCw4ICs1MCw4IEBACiAjZGVmaW5lIEVFUFJPTV9TSVpFCQkJMHgwMTAwCiAjZGVmaW5lIEJCUF9CQVNFCQkJMHgwMDAwCiAjZGVmaW5lIEJCUF9TSVpFCQkJMHgwMDgwCi0jZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDAwCi0jZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDE0CisjZGVmaW5lIFJGX0JBU0UJCQkJMHgwMDA0CisjZGVmaW5lIFJGX1NJWkUJCQkJMHgwMDEwCiAKIC8qCiAgKiBOdW1iZXIgb2YgVFggcXVldWVzLgpAQCAtMjY3LDYgKzI2NywxOSBAQAogICogTUFDX0NTUjEzOiBHUElPLgogICovCiAjZGVmaW5lIE1BQ19DU1IxMwkJCTB4MzAzNAorI2RlZmluZSBNQUNfQ1NSMTNfQklUMAkJCUZJRUxEMzIoMHgwMDAwMDAwMSkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDEJCQlGSUVMRDMyKDB4MDAwMDAwMDIpCisjZGVmaW5lIE1BQ19DU1IxM19CSVQyCQkJRklFTEQzMigweDAwMDAwMDA0KQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMwkJCUZJRUxEMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDQJCQlGSUVMRDMyKDB4MDAwMDAwMTApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ1CQkJRklFTEQzMigweDAwMDAwMDIwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUNgkJCUZJRUxEMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDcJCQlGSUVMRDMyKDB4MDAwMDAwODApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQ4CQkJRklFTEQzMigweDAwMDAwMTAwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUOQkJCUZJRUxEMzIoMHgwMDAwMDIwMCkKKyNkZWZpbmUgTUFDX0NTUjEzX0JJVDEwCQkJRklFTEQzMigweDAwMDAwNDAwKQorI2RlZmluZSBNQUNfQ1NSMTNfQklUMTEJCQlGSUVMRDMyKDB4MDAwMDA4MDApCisjZGVmaW5lIE1BQ19DU1IxM19CSVQxMgkJCUZJRUxEMzIoMHgwMDAwMTAwMCkKIAogLyoKICAqIE1BQ19DU1IxNDogTEVEIGNvbnRyb2wgcmVnaXN0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCmluZGV4IDNiMWUxYzIuLjk3MThmNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCkBAIC0xMDAsNiArMTAwLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKIAl1MzIgcnhfY29uZjsKIAlzdHJ1Y3QgdXNiX2FuY2hvciBhbmNob3JlZDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CisJc3RydWN0IGllZWU4MDIxMV9odyAqZGV2OwogCXUxNiB0eHB3cl9iYXNlOwogCXU4IGFzaWNfcmV2OwogCXU4IGlzX3J0bDgxODdiOwpAQCAtMTE3LDcgKzExOSw3IEBACiAJc3RydWN0IHsKIAkJX19sZTY0IGJ1ZjsKIAkJc3RydWN0IHNrX2J1ZmZfaGVhZCBxdWV1ZTsKLQl9IGJfdHhfc3RhdHVzOworCX0gYl90eF9zdGF0dXM7IC8qIFRoaXMgcXVldWUgaXMgdXNlZCBieSBib3RoIC1iIGFuZCBub24tYiBkZXZpY2VzICovCiB9OwogCiB2b2lkIHJ0bDgxODdfd3JpdGVfcGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTggYWRkciwgdTMyIGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCmluZGV4IGY0NzQ3YTEuLmZkODE4ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKQEAgLTE4OSwyNSArMTg5LDMzIEBACiAJCQkJCSAgc2l6ZW9mKHN0cnVjdCBydGw4MTg3X3R4X2hkcikpOwogCWllZWU4MDIxMV90eF9pbmZvX2NsZWFyX3N0YXR1cyhpbmZvKTsKIAotCWlmICghdXJiLT5zdGF0dXMgJiYKLQkgICAgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKSAmJgotCSAgICBwcml2LT5pc19ydGw4MTg3YikgewotCQlza2JfcXVldWVfdGFpbCgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUsIHNrYik7CisJaWYgKCEodXJiLT5zdGF0dXMpICYmICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykpIHsKKwkJaWYgKHByaXYtPmlzX3J0bDgxODdiKSB7CisJCQlza2JfcXVldWVfdGFpbCgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUsIHNrYik7CiAKLQkJLyogcXVldWUgaXMgImZ1bGwiLCBkaXNjYXJkIGxhc3QgaXRlbXMgKi8KLQkJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlKSA+IDUpIHsKLQkJCXN0cnVjdCBza19idWZmICpvbGRfc2tiOworCQkJLyogcXVldWUgaXMgImZ1bGwiLCBkaXNjYXJkIGxhc3QgaXRlbXMgKi8KKwkJCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSkgPiA1KSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKm9sZF9za2I7CiAKLQkJCWRldl9kYmcoJnByaXYtPnVkZXYtPmRldiwKLQkJCQkidHJhbnNtaXQgc3RhdHVzIHF1ZXVlIGZ1bGxcbiIpOworCQkJCWRldl9kYmcoJnByaXYtPnVkZXYtPmRldiwKKwkJCQkJInRyYW5zbWl0IHN0YXR1cyBxdWV1ZSBmdWxsXG4iKTsKIAotCQkJb2xkX3NrYiA9IHNrYl9kZXF1ZXVlKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSk7Ci0JCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIG9sZF9za2IpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYgIXVyYi0+c3RhdHVzKQorCQkJCW9sZF9za2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpOworCQkJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgb2xkX3NrYik7CisJCQl9CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CiAJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJCX0KKwl9CisJaWYgKHByaXYtPmlzX3J0bDgxODdiKQogCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CisJZWxzZSB7CisJCS8qIFJldHJ5IGluZm9ybWF0aW9uIGZvciB0aGUgUlRJODE4NyBpcyBvbmx5IGF2YWlsYWJsZSBieQorCQkgKiByZWFkaW5nIGEgcmVnaXN0ZXIgaW4gdGhlIGRldmljZS4gV2UgYXJlIGluIGludGVycnVwdCBtb2RlCisJCSAqIGhlcmUsIHRodXMgcXVldWUgdGhlIHNrYiBhbmQgZmluaXNoIG9uIGEgd29yayBxdWV1ZS4gKi8KKwkJc2tiX3F1ZXVlX3RhaWwoJnByaXYtPmJfdHhfc3RhdHVzLnF1ZXVlLCBza2IpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsoaHctPndvcmtxdWV1ZSwgJnByaXYtPndvcmssIDApOwogCX0KIH0KIApAQCAtNDAzLDcgKzQxMSw3IEBACiAJc3RydWN0IHJ0bDgxODdfcnhfaW5mbyAqaW5mbzsKIAlpbnQgcmV0ID0gMDsKIAotCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5yeF9xdWV1ZSkgPCA4KSB7CisJd2hpbGUgKHNrYl9xdWV1ZV9sZW4oJnByaXYtPnJ4X3F1ZXVlKSA8IDE2KSB7CiAJCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihSVEw4MTg3X01BWF9SWCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2tiKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtNjU3LDcgKzY2NSw3IEBACiAKIAlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5JTlRfVElNRU9VVCwgMCk7CiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5XUEFfQ09ORiwgMCk7Ci0JcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5SQVRFX0ZBTExCQUNLLCAweDgxKTsKKwlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0ssIDApOwogCiAJLy8gVE9ETzogc2V0IFJFU1BfUkFURSBhbmQgQlJTUiBwcm9wZXJseQogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkVTUF9SQVRFLCAoOCA8PCA0KSB8IDApOwpAQCAtNzc3LDkgKzc4NSw2IEBACiAJcnRsODE4eF9pb3dyaXRlOChwcml2LCAmcHJpdi0+bWFwLT5UWF9BR0NfQ1RMLCByZWcpOwogCiAJcnRsODE4eF9pb3dyaXRlMTZfaWR4KHByaXYsIChfX2xlMTYgKikweEZGRTAsIDB4MEZGRiwgMSk7Ci0JcmVnID0gcnRsODE4eF9pb3JlYWQ4KHByaXYsICZwcml2LT5tYXAtPlJBVEVfRkFMTEJBQ0spOwotCXJlZyB8PSBSVEw4MThYX1JBVEVfRkFMTEJBQ0tfRU5BQkxFOwotCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+UkFURV9GQUxMQkFDSywgcmVnKTsKIAogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsICZwcml2LT5tYXAtPkJFQUNPTl9JTlRFUlZBTCwgMTAwKTsKIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5BVElNX1dORCwgMik7CkBAIC04NjcsNiArODcyLDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHJ0bDgxODdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJLyogVGhlIFJUTDgxODcgcmV0dXJucyB0aGUgcmV0cnkgY291bnQgdGhyb3VnaCByZWdpc3RlciAweEZGRkEuIEluCisJICogYWRkaXRpb24sIGl0IGFwcGVhcnMgdG8gYmUgYSBjdW11bGF0aXZlIHJldHJ5IGNvdW50LCBub3QgdGhlCisJICogdmFsdWUgZm9yIHRoZSBjdXJyZW50IFRYIHBhY2tldC4gV2hlbiBtdWx0aXBsZSBUWCBlbnRyaWVzIGFyZQorCSAqIHF1ZXVlZCwgdGhlIHJldHJ5IGNvdW50IHdpbGwgYmUgdmFsaWQgZm9yIHRoZSBsYXN0IG9uZSBpbiB0aGUgcXVldWUuCisJICogVGhlICJlcnJvciIgc2hvdWxkIG5vdCBtYXR0ZXIgZm9yIHB1cnBvc2VzIG9mIHJhdGUgc2V0dGluZy4gKi8KKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydGw4MTg3X3ByaXYsCisJCQkJICAgIHdvcmsud29yayk7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IHByaXYtPmRldjsKKwlzdGF0aWMgdTE2IHJldHJ5OworCXUxNiB0bXA7CisKKwltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwl0bXAgPSBydGw4MTh4X2lvcmVhZDE2KHByaXYsIChfX2xlMTYgKikweEZGRkEpOworCXdoaWxlIChza2JfcXVldWVfbGVuKCZwcml2LT5iX3R4X3N0YXR1cy5xdWV1ZSkgPiAwKSB7CisJCXN0cnVjdCBza19idWZmICpvbGRfc2tiOworCisJCW9sZF9za2IgPSBza2JfZGVxdWV1ZSgmcHJpdi0+Yl90eF9zdGF0dXMucXVldWUpOworCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihvbGRfc2tiKTsKKwkJaW5mby0+c3RhdHVzLnJhdGVzWzBdLmNvdW50ID0gdG1wIC0gcmV0cnkgKyAxOworCQlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoZGV2LCBvbGRfc2tiKTsKKwl9CisJcmV0cnkgPSB0bXA7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKK30KKwogc3RhdGljIGludCBydGw4MTg3X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OwpAQCAtODgxLDYgKzkxNCw3IEBACiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAKIAlpbml0X3VzYl9hbmNob3IoJnByaXYtPmFuY2hvcmVkKTsKKwlwcml2LT5kZXYgPSBkZXY7CiAKIAlpZiAocHJpdi0+aXNfcnRsODE4N2IpIHsKIAkJcmVnID0gUlRMODE4WF9SWF9DT05GX01HTVQgfApAQCAtOTQ4LDYgKzk4Miw3IEBACiAJcmVnIHw9IFJUTDgxOFhfQ01EX1RYX0VOQUJMRTsKIAlyZWcgfD0gUlRMODE4WF9DTURfUlhfRU5BQkxFOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+Q01ELCByZWcpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT53b3JrLCBydGw4MTg3X3dvcmspOwogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTk3OCw2ICsxMDEzLDggQEAKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAogCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnByaXYtPmFuY2hvcmVkKTsKKwlpZiAoIXByaXYtPmlzX3J0bDgxODdiKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPndvcmspOwogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiB9CiAKQEAgLTk4NiwxOSArMTAyMywyMSBAQAogewogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJaW50IGk7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOwogCisJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7CiAJaWYgKHByaXYtPm1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlnb3RvIGV4aXQ7CiAKIAlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCXByaXYtPm1vZGUgPSBjb25mLT50eXBlOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCWdvdG8gZXhpdDsKIAl9CiAKLQltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKKwlyZXQgPSAwOwogCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKIAogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX0NPTkZJRyk7CkBAIC0xMDA3LDggKzEwNDYsOSBAQAogCQkJCSAoKHU4ICopY29uZi0+bWFjX2FkZHIpW2ldKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwogCitleGl0OgogCW11dGV4X3VubG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE4N19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCmluZGV4IDcwMTVmMjQuLmY5NTIwNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwpAQCAtOTUwLDYgKzk1MCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkICpzdHJpcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoUkNVKQogewogCXJjdV9yZWFkX2xvY2soKTsKIAlyZXR1cm4gKnBvcyA/IHN0cmlwX2dldF9pZHgoKnBvcyAtIDEpIDogU0VRX1NUQVJUX1RPS0VOOwpAQCAtOTczLDYgKzk3NCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHN0cmlwX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoUkNVKQogewogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtMTEyNSw3ICsxMTI3LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0cmlwX3NlcV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHN0cmlwX3NlcV9vcHMgPSB7CiAJLnN0YXJ0ID0gc3RyaXBfc2VxX3N0YXJ0LAogCS5uZXh0ICA9IHN0cmlwX3NlcV9uZXh0LAogCS5zdG9wICA9IHN0cmlwX3NlcV9zdG9wLApAQCAtMjQ3NSw2ICsyNDc3LDE2IEBACiAJLnJlYnVpbGQgPSBzdHJpcF9yZWJ1aWxkX2hlYWRlciwKIH07CiAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzdHJpcF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJPSBzdHJpcF9vcGVuX2xvdywKKwkubmRvX3N0b3AgCT0gc3RyaXBfY2xvc2VfbG93LAorCS5uZG9fc3RhcnRfeG1pdCA9IHN0cmlwX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBzdHJpcF9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19nZXRfc3RhdHMJPSBzdHJpcF9nZXRfc3RhdHMsCisJLm5kb19jaGFuZ2VfbXR1ID0gc3RyaXBfY2hhbmdlX210dSwKK307CisKIC8qCiAgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IERESSB3aGVuIHRoZQogICogKGR5bmFtaWNhbGx5IGFzc2lnbmVkKSBkZXZpY2UgaXMgcmVnaXN0ZXJlZApAQCAtMjUwMSwxOCArMjUxMyw4IEBACiAJZGV2LT5kZXZfYWRkclswXSA9IDA7CiAJZGV2LT5hZGRyX2xlbiA9IHNpemVvZihNZXRyaWNvbUFkZHJlc3MpOwogCi0JLyoKLQkgKiBQb2ludGVycyB0byBpbnRlcmZhY2Ugc2VydmljZSByb3V0aW5lcy4KLQkgKi8KLQotCWRldi0+b3BlbiA9IHN0cmlwX29wZW5fbG93OwotCWRldi0+c3RvcCA9IHN0cmlwX2Nsb3NlX2xvdzsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHN0cmlwX3htaXQ7Ci0JZGV2LT5oZWFkZXJfb3BzID0gJnN0cmlwX2hlYWRlcl9vcHM7Ci0KLQlkZXYtPnNldF9tYWNfYWRkcmVzcyA9IHN0cmlwX3NldF9tYWNfYWRkcmVzczsKLQlkZXYtPmdldF9zdGF0cyA9IHN0cmlwX2dldF9zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUgPSBzdHJpcF9jaGFuZ2VfbXR1OworCWRldi0+aGVhZGVyX29wcyA9ICZzdHJpcF9oZWFkZXJfb3BzLAorCWRldi0+bmV0ZGV2X29wcyA9ICZzdHJpcF9uZXRkZXZfb3BzOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5jCmluZGV4IDgzMjY3OTMuLjNhYjNlYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuLmMKQEAgLTQwLDExICs0MCwxMSBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCB3dl9wc2FfdG9faXJxKHU4IGlycXZhbCkKIHsKLQlpbnQgaXJxOworCWludCBpOwogCi0JZm9yIChpcnEgPSAwOyBpcnEgPCBBUlJBWV9TSVpFKGlycXZhbHMpOyBpcnErKykKLQkJaWYgKGlycXZhbHNbaXJxXSA9PSBpcnF2YWwpCi0JCQlyZXR1cm4gaXJxOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlycXZhbHMpOyBpKyspCisJCWlmIChpcnF2YWxzW2ldID09IGlycXZhbCkKKwkJCXJldHVybiBpOwogCiAJcmV0dXJuIC0xOwogfQpAQCAtNzM1LDkgKzczNSw5IEBACiAJCWlmICh0eF9zdGF0dXMgJiBBQ19TRkxEX09LKSB7CiAJCQlpbnQgbmNvbGxpc2lvbnM7CiAKLQkJCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCW5jb2xsaXNpb25zID0gdHhfc3RhdHVzICYgQUNfU0ZMRF9NQVhDT0w7Ci0JCQlscC0+c3RhdHMuY29sbGlzaW9ucyArPSBuY29sbGlzaW9uczsKKwkJCWRldi0+c3RhdHMuY29sbGlzaW9ucyArPSBuY29sbGlzaW9uczsKICNpZmRlZiBERUJVR19UWF9JTkZPCiAJCQlpZiAobmNvbGxpc2lvbnMgPiAwKQogCQkJCXByaW50ayhLRVJOX0RFQlVHCkBAIC03NDUsOSArNzQ1LDkgQEAKIAkJCQkgICAgICAgZGV2LT5uYW1lLCBuY29sbGlzaW9ucyk7CiAjZW5kaWYKIAkJfSBlbHNlIHsKLQkJCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQlpZiAodHhfc3RhdHVzICYgQUNfU0ZMRF9TMTApIHsKLQkJCQlscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CiAjaWZkZWYgREVCVUdfVFhfRkFJTAogCQkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJICAgICAgICIlczogd3ZfY29tcGxldGUoKTogdHggZXJyb3I6IG5vIENTLlxuIiwKQEAgLTc1NSw3ICs3NTUsNyBAQAogI2VuZGlmCiAJCQl9CiAJCQlpZiAodHhfc3RhdHVzICYgQUNfU0ZMRF9TOSkgewotCQkJCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKICNpZmRlZiBERUJVR19UWF9GQUlMCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiB3dl9jb21wbGV0ZSgpOiB0eCBlcnJvcjogbG9zdCBDVFMuXG4iLApAQCAtNzYzLDcgKzc2Myw3IEBACiAjZW5kaWYKIAkJCX0KIAkJCWlmICh0eF9zdGF0dXMgJiBBQ19TRkxEX1M4KSB7Ci0JCQkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1RYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X2NvbXBsZXRlKCk6IHR4IGVycm9yOiBzbG93IERNQS5cbiIsCkBAIC03NzEsNyArNzcxLDcgQEAKICNlbmRpZgogCQkJfQogCQkJaWYgKHR4X3N0YXR1cyAmIEFDX1NGTERfUzYpIHsKLQkJCQlscC0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfaGVhcnRiZWF0X2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1RYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X2NvbXBsZXRlKCk6IHR4IGVycm9yOiBoZWFydCBiZWF0LlxuIiwKQEAgLTc3OSw3ICs3NzksNyBAQAogI2VuZGlmCiAJCQl9CiAJCQlpZiAodHhfc3RhdHVzICYgQUNfU0ZMRF9TNSkgewotCQkJCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKICNpZmRlZiBERUJVR19UWF9GQUlMCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiB3dl9jb21wbGV0ZSgpOiB0eCBlcnJvcjogdG9vIG1hbnkgY29sbGlzaW9ucy5cbiIsCkBAIC0xMzQ2LDIwICsxMzQ2LDYgQEAKICAqIG9yIHdpcmVsZXNzIGV4dGVuc2lvbnMKICAqLwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogR2V0IHRoZSBjdXJyZW50IEV0aGVybmV0IHN0YXRpc3RpY3MuIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZQotICogY2FyZCBvcGVuIG9yIGNsb3NlZC4KLSAqIFVzZWQgd2hlbiB0aGUgdXNlciByZWFkIC9wcm9jL25ldC9kZXYKLSAqLwotc3RhdGljIGVuX3N0YXRzICp3YXZlbGFuX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKLXsKLSNpZmRlZiBERUJVR19JT0NUTF9UUkFDRQotCXByaW50ayhLRVJOX0RFQlVHICIlczogPD53YXZlbGFuX2dldF9zdGF0cygpXG4iLCBkZXYtPm5hbWUpOwotI2VuZGlmCi0KLQlyZXR1cm4gJigobmV0X2xvY2FsICopbmV0ZGV2X3ByaXYoZGV2KSktPnN0YXRzOwotfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgpAQCAtMjQ2Niw3ICsyNDUyLDcgQEAKIAkJICAgICAgICIlczogd3ZfcGFja2V0X3JlYWQoKTogY291bGQgbm90IGFsbG9jX3NrYiglZCwgR0ZQX0FUT01JQykuXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBza3NpemUpOwogI2VuZGlmCi0JCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNTI2LDggKzI1MTIsOCBAQAogCW5ldGlmX3J4KHNrYik7CiAKIAkvKiBLZWVwIHN0YXRpc3RpY3MgdXAgdG8gZGF0ZSAqLwotCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JbHAtPnN0YXRzLnJ4X2J5dGVzICs9IHNrc2l6ZTsKKwlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrc2l6ZTsKIAogI2lmZGVmIERFQlVHX1JYX1RSQUNFCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiA8LXd2X3BhY2tldF9yZWFkKClcbiIsIGRldi0+bmFtZSk7CkBAIC0yNjA4LDcgKzI1OTQsNyBAQAogI2VuZGlmCiAJCX0gZWxzZSB7CS8qIElmIHJlY2VwdGlvbiB3YXMgbm8gc3VjY2Vzc2Z1bCAqLwogCi0JCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCiAjaWZkZWYgREVCVUdfUlhfSU5GTwogCQkJcHJpbnRrKEtFUk5fREVCVUcKQEAgLTI2MjQsNyArMjYxMCw3IEBACiAjZW5kaWYKIAogCQkJaWYgKChmZC5mZF9zdGF0dXMgJiBGRF9TVEFUVVNfUzcpICE9IDApIHsKLQkJCQlscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1JYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X3JlY2VpdmUoKTogZnJhbWUgdG9vIHNob3J0LlxuIiwKQEAgLTI2MzMsNyArMjYxOSw3IEBACiAJCQl9CiAKIAkJCWlmICgoZmQuZmRfc3RhdHVzICYgRkRfU1RBVFVTX1M4KSAhPSAwKSB7Ci0JCQkJbHAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1JYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X3JlY2VpdmUoKTogcnggRE1BIG92ZXJydW4uXG4iLApAQCAtMjY0Miw3ICsyNjI4LDcgQEAKIAkJCX0KIAogCQkJaWYgKChmZC5mZF9zdGF0dXMgJiBGRF9TVEFUVVNfUzkpICE9IDApIHsKLQkJCQlscC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAjaWZkZWYgREVCVUdfUlhfRkFJTAogCQkJCXByaW50ayhLRVJOX0RFQlVHCiAJCQkJICAgICAgICIlczogd3ZfcmVjZWl2ZSgpOiByYW4gb3V0IG9mIHJlc291cmNlcy5cbiIsCkBAIC0yNjUxLDcgKzI2MzcsNyBAQAogCQkJfQogCiAJCQlpZiAoKGZkLmZkX3N0YXR1cyAmIEZEX1NUQVRVU19TMTApICE9IDApIHsKLQkJCQlscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKICNpZmRlZiBERUJVR19SWF9GQUlMCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkgICAgICAgIiVzOiB3dl9yZWNlaXZlKCk6IGFsaWdubWVudCBlcnJvci5cbiIsCkBAIC0yNjYwLDcgKzI2NDYsNyBAQAogCQkJfQogCiAJCQlpZiAoKGZkLmZkX3N0YXR1cyAmIEZEX1NUQVRVU19TMTEpICE9IDApIHsKLQkJCQlscC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogI2lmZGVmIERFQlVHX1JYX0ZBSUwKIAkJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJCSAgICAgICAiJXM6IHd2X3JlY2VpdmUoKTogQ1JDIGVycm9yLlxuIiwKQEAgLTI4MjYsNyArMjgxMiw3IEBACiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAkvKiBLZWVwIHN0YXRzIHVwIHRvIGRhdGUuICovCi0JbHAtPnN0YXRzLnR4X2J5dGVzICs9IGxlbmd0aDsKKwlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbmd0aDsKIAogCWlmIChscC0+dHhfZmlyc3RfaW5fdXNlID09IEk4MjU4Nk5VTEwpCiAJCWxwLT50eF9maXJzdF9pbl91c2UgPSB0eGJsb2NrOwpAQCAtNDAzOCw2ICs0MDI0LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgd2F2ZWxhbl9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiAJCT0gd2F2ZWxhbl9vcGVuLAorCS5uZG9fc3RvcCAJCT0gd2F2ZWxhbl9jbG9zZSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gd2F2ZWxhbl9wYWNrZXRfeG1pdCwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHdhdmVsYW5fc2V0X211bHRpY2FzdF9saXN0LAorICAgICAgICAubmRvX3R4X3RpbWVvdXQJCT0gd2F2ZWxhbl93YXRjaGRvZywKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCisjaWZkZWYgU0VUX01BQ19BRERSRVNTCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB3YXZlbGFuX3NldF9tYWNfYWRkcmVzcworI2Vsc2UKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisjZW5kaWYKK307CisKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKICAqIFByb2JlIGFuIEkvTyBhZGRyZXNzLCBhbmQgaWYgdGhlIFdhdmVMQU4gaXMgdGhlcmUgY29uZmlndXJlIHRoZQpAQCAtNDEzMCwxNyArNDEzMiw4IEBACiAJLyogSW5pdCBzcGlubG9jayAqLwogCXNwaW5fbG9ja19pbml0KCZscC0+c3BpbmxvY2spOwogCi0JZGV2LT5vcGVuID0gd2F2ZWxhbl9vcGVuOwotCWRldi0+c3RvcCA9IHdhdmVsYW5fY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB3YXZlbGFuX3BhY2tldF94bWl0OwotCWRldi0+Z2V0X3N0YXRzID0gd2F2ZWxhbl9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmd2F2ZWxhbl9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0gICAgICAgIGRldi0+dHhfdGltZW91dAkJPSAmd2F2ZWxhbl93YXRjaGRvZzsKLSAgICAgICAgZGV2LT53YXRjaGRvZ190aW1lbwk9IFdBVENIRE9HX0pJRkZJRVM7Ci0jaWZkZWYgU0VUX01BQ19BRERSRVNTCi0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmd2F2ZWxhbl9zZXRfbWFjX2FkZHJlc3M7Ci0jZW5kaWYJCQkJLyogU0VUX01BQ19BRERSRVNTICovCi0KKwlkZXYtPm5ldGRldl9vcHMgPSAmd2F2ZWxhbl9uZXRkZXZfb3BzOworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBXQVRDSERPR19KSUZGSUVTOwogCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmd2F2ZWxhbl9oYW5kbGVyX2RlZjsKIAlscC0+d2lyZWxlc3NfZGF0YS5zcHlfZGF0YSA9ICZscC0+c3B5X2RhdGE7CiAJZGV2LT53aXJlbGVzc19kYXRhID0gJmxwLT53aXJlbGVzc19kYXRhOwpAQCAtNDI4MSw4ICs0Mjc0LDcgQEAKIAogCiAJLyogTG9vcCBvbiBhbGwgcG9zc2libGUgYmFzZSBhZGRyZXNzZXMuICovCi0JaSA9IC0xOwotCXdoaWxlICgoaW9bKytpXSAhPSAwKSAmJiAoaSA8IEFSUkFZX1NJWkUoaW8pKSkgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlvKSAmJiBpb1tpXSAhPSAwOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihuZXRfbG9jYWwpKTsKIAkJaWYgKCFkZXYpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4ucC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmgKaW5kZXggNDRkMzFiYi4uMmRhYTAyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbi5wLmgKQEAgLTQ1OSwxMSArNDU5LDkgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVFlQRVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBTaG9ydGN1dHMgKi8KLXR5cGVkZWYgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJZW5fc3RhdHM7CiB0eXBlZGVmIHN0cnVjdCBpd19zdGF0aXN0aWNzCWl3X3N0YXRzOwogdHlwZWRlZiBzdHJ1Y3QgaXdfcXVhbGl0eQlpd19xdWFsOwotdHlwZWRlZiBzdHJ1Y3QgaXdfZnJlcQkJaXdfZnJlcTsKLXR5cGVkZWYgc3RydWN0IG5ldF9sb2NhbAluZXRfbG9jYWw7Cit0eXBlZGVmIHN0cnVjdCBpd19mcmVxCQlpd19mcmVxO3R5cGVkZWYgc3RydWN0IG5ldF9sb2NhbAluZXRfbG9jYWw7CiB0eXBlZGVmIHN0cnVjdCB0aW1lcl9saXN0CXRpbWVyX2xpc3Q7CiAKIC8qIEJhc2ljIHR5cGVzICovCkBAIC00NzUsMTUgKzQ3MywxMiBAQAogICogRm9yIGVhY2ggbmV0d29yayBpbnRlcmZhY2UsIExpbnV4IGtlZXBzIGRhdGEgaW4gdHdvIHN0cnVjdHVyZXM6ICAiZGV2aWNlIgogICoga2VlcHMgdGhlIGdlbmVyaWMgZGF0YSAoc2FtZSBmb3JtYXQgZm9yIGV2ZXJ5Ym9keSkgYW5kICJuZXRfbG9jYWwiIGtlZXBzCiAgKiBhZGRpdGlvbmFsIHNwZWNpZmljIGRhdGEuCi0gKiBOb3RlIHRoYXQgc29tZSBvZiB0aGlzIHNwZWNpZmljIGRhdGEgaXMgaW4gZmFjdCBnZW5lcmljIChlbl9zdGF0cywgZm9yCi0gKiBleGFtcGxlKS4KICAqLwogc3RydWN0IG5ldF9sb2NhbAogewogICBuZXRfbG9jYWwgKgluZXh0OwkJLyogbGlua2VkIGxpc3Qgb2YgdGhlIGRldmljZXMgKi8KICAgc3RydWN0IG5ldF9kZXZpY2UgKglkZXY7CQkvKiByZXZlcnNlIGxpbmsgKi8KICAgc3BpbmxvY2tfdAlzcGlubG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyB0byB0aGUgaGFyZHdhcmUgKFNNUCkgKi8KLSAgZW5fc3RhdHMJc3RhdHM7CQkvKiBFdGhlcm5ldCBpbnRlcmZhY2Ugc3RhdGlzdGljcyAqLwogICBpbnQJCW5yZXNldHM7CS8qIG51bWJlciBvZiBoYXJkd2FyZSByZXNldHMgKi8KICAgdV9jaGFyCXJlY29uZmlnXzgyNTg2OwkvKiBXZSBuZWVkIHRvIHJlY29uZmlndXJlIHRoZSBjb250cm9sbGVyLiAqLwogICB1X2NoYXIJcHJvbWlzY3VvdXM7CS8qIHByb21pc2N1b3VzIG1vZGUgKi8KQEAgLTYwMSw4ICs1OTYsNiBAQAogc3RhdGljIGlubGluZSB2b2lkCiAJd3ZfaW5pdF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBkaXNwbGF5IHN0YXJ0dXAgaW5mbyAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBJT0NUTCwgU1RBVFMgJiBSRUNPTkZJRyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgZW5fc3RhdHMJKgotCXdhdmVsYW5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBHaXZlIHN0YXRzIC9wcm9jL25ldC9kZXYgKi8KIHN0YXRpYyBpd19zdGF0cyAqCiAJd2F2ZWxhbl9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCmluZGV4IGRlNzE3ZjguLmU1NWIzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKQEAgLTgzOCw5ICs4MzgsOCBAQAogICAgIH0KICAgd2hpbGUoKChzdGF0dXMgJiBTUjNfRVhFQ19TVEFURV9NQVNLKSAhPSBTUjNfRVhFQ19JRExFKSAmJiAoc3Bpbi0tID4gMCkpOwogCi0gIC8qIElmIHRoZSBpbnRlcnJ1cHQgaGFzbid0IGJlIHBvc3RlZCAqLwotICBpZihzcGluIDw9IDApCi0gICAgeworICAvKiBJZiB0aGUgaW50ZXJydXB0IGhhc24ndCBiZWVuIHBvc3RlZCAqLworICBpZiAoc3BpbiA8IDApIHsKICNpZmRlZiBERUJVR19JTlRFUlJVUFRfRVJST1IKICAgICAgIHByaW50ayhLRVJOX0lORk8gInd2XzgyNTkzX2NtZDogJXMgdGltZW91dCAocHJldmlvdXMgY29tbWFuZCksIHN0YXR1cyAweCUwMnhcbiIsCiAJICAgICBzdHIsIHN0YXR1cyk7CkBAIC0xMzUzLDIxICsxMzUyLDYgQEAKICAqIG9yIHdpcmVsZXNzIGV4dGVuc2lvbnMKICAqLwogCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogR2V0IHRoZSBjdXJyZW50IGV0aGVybmV0IHN0YXRpc3RpY3MuIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZQotICogY2FyZCBvcGVuIG9yIGNsb3NlZC4KLSAqIFVzZWQgd2hlbiB0aGUgdXNlciByZWFkIC9wcm9jL25ldC9kZXYKLSAqLwotc3RhdGljIGVuX3N0YXRzCSoKLXdhdmVsYW5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2KQotewotI2lmZGVmIERFQlVHX0lPQ1RMX1RSQUNFCi0gIHByaW50ayhLRVJOX0RFQlVHICIlczogPD53YXZlbGFuX2dldF9zdGF0cygpXG4iLCBkZXYtPm5hbWUpOwotI2VuZGlmCi0KLSAgcmV0dXJuKCYoKG5ldF9sb2NhbCAqKW5ldGRldl9wcml2KGRldikpLT5zdGF0cyk7Ci19CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCkBAIC0yODE4LDcgKzI4MDIsNyBAQAogICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHd2X3BhY2tldF9yZWFkKCk6IGNvdWxkIG5vdCBhbGxvY19za2IoJWQsIEdGUF9BVE9NSUMpXG4iLAogCSAgICAgZGV2LT5uYW1lLCBza3NpemUpOwogI2VuZGlmCi0gICAgICBscC0+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+Z2V0X3N0YXRzID0gJndhdmVsYW5fZ2V0X3N0YXRzOwotICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZ3YXZlbGFuX3NldF9tdWx0aWNhc3RfbGlzdDsKLSNpZmRlZiBTRVRfTUFDX0FERFJFU1MKLSAgZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSAmd2F2ZWxhbl9zZXRfbWFjX2FkZHJlc3M7Ci0jZW5kaWYJLyogU0VUX01BQ19BRERSRVNTICovCi0KLSAgLyogU2V0IHRoZSB3YXRjaGRvZyB0aW1lciAqLwotICBkZXYtPnR4X3RpbWVvdXQJPSAmd2F2ZWxhbl93YXRjaGRvZzsKKyAgZGV2LT5uZXRkZXZfb3BzID0gJndhdmVsYW5fbmV0ZGV2X29wczsKICAgZGV2LT53YXRjaGRvZ190aW1lbwk9IFdBVENIRE9HX0pJRkZJRVM7CiAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZvcHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MucC5oCmluZGV4IDYyODE5MmQuLjcwNmZkMzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLnAuaApAQCAtNTc2LDcgKzU3Niw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogU2hvcnRjdXRzICovCi10eXBlZGVmIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCWVuX3N0YXRzOwogdHlwZWRlZiBzdHJ1Y3QgaXdfc3RhdGlzdGljcwlpd19zdGF0czsKIHR5cGVkZWYgc3RydWN0IGl3X3F1YWxpdHkJaXdfcXVhbDsKIHR5cGVkZWYgc3RydWN0IGl3X2ZyZXEJCWl3X2ZyZXE7CkBAIC01OTIsOCArNTkxLDYgQEAKICAqIEZvciBlYWNoIG5ldHdvcmsgaW50ZXJmYWNlLCBMaW51eCBrZWVwIGRhdGEgaW4gdHdvIHN0cnVjdHVyZS4gImRldmljZSIKICAqIGtlZXAgdGhlIGdlbmVyaWMgZGF0YSAoc2FtZSBmb3JtYXQgZm9yIGV2ZXJ5Ym9keSkgYW5kICJuZXRfbG9jYWwiIGtlZXAKICAqIHRoZSBhZGRpdGlvbmFsIHNwZWNpZmljIGRhdGEuCi0gKiBOb3RlIHRoYXQgc29tZSBvZiB0aGlzIHNwZWNpZmljIGRhdGEgaXMgaW4gZmFjdCBnZW5lcmljIChlbl9zdGF0cywgZm9yCi0gKiBleGFtcGxlKS4KICAqLwogc3RydWN0IG5ldF9sb2NhbAogewpAQCAtNjAxLDcgKzU5OCw2IEBACiAgIHN0cnVjdCBuZXRfZGV2aWNlICoJZGV2OwkJLyogUmV2ZXJzZSBsaW5rLi4uICovCiAgIHNwaW5sb2NrX3QJc3BpbmxvY2s7CS8qIFNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlIChTTVApICovCiAgIHN0cnVjdCBwY21jaWFfZGV2aWNlICoJbGluazsJCS8qIHBjbWNpYSBzdHJ1Y3R1cmUgKi8KLSAgZW5fc3RhdHMJc3RhdHM7CQkvKiBFdGhlcm5ldCBpbnRlcmZhY2Ugc3RhdGlzdGljcyAqLwogICBpbnQJCW5yZXNldHM7CS8qIE51bWJlciBvZiBodyByZXNldHMgKi8KICAgdV9jaGFyCWNvbmZpZ3VyZWQ7CS8qIElmIGl0IGlzIGNvbmZpZ3VyZWQgKi8KICAgdV9jaGFyCXJlY29uZmlnXzgyNTkzOwkvKiBOZWVkIHRvIHJlY29uZmlndXJlIHRoZSBjb250cm9sbGVyICovCkBAIC02OTQsOCArNjkwLDYgQEAKIHN0YXRpYyB2b2lkCiAJd3ZfaW5pdF9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBkaXNwbGF5IHN0YXJ0dXAgaW5mbyAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBJT0NUTCwgU1RBVFMgJiBSRUNPTkZJRyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgZW5fc3RhdHMJKgotCXdhdmVsYW5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICopOwkvKiBHaXZlIHN0YXRzIC9wcm9jL25ldC9kZXYgKi8KIHN0YXRpYyBpd19zdGF0cyAqCiAJd2F2ZWxhbl9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQQUNLRVQgUkVDRVBUSU9OIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDM1MDEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCmluZGV4IDU5YmIzYTUuLjhiY2UxYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMS5oCkBAIC02MDYsNyArNjA2LDcgQEAKIAl1OAkJCQlyZWdfZG9tYWluOwogCXU4CQkJCXZlcnNpb25bMl07CiAJc3RydWN0IHdsMzUwMV9zY2FuX2NvbmZpcm0JYnNzX3NldFsyMF07Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgCXN0YXRzOworCiAJc3RydWN0IGl3X3N0YXRpc3RpY3MJCXdzdGF0czsKIAlzdHJ1Y3QgaXdfc3B5X2RhdGEJCXNweV9kYXRhOwogCXN0cnVjdCBpd19wdWJsaWNfZGF0YQkJd2lyZWxlc3NfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggYzk5YTFiNi4uMWY2NGQ2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KIAogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAKQEAgLTExMSwxMiArMTEyLDYgQEAKICAqLwogc3RhdGljIGRldl9pbmZvX3Qgd2wzNTAxX2Rldl9pbmZvID0gIndsMzUwMV9jcyI7CiAKLXN0YXRpYyBpbnQgd2wzNTAxX2NoYW4yZnJlcVtdID0gewotCVswXSAgPSAyNDEyLCBbMV0gID0gMjQxNywgWzJdICA9IDI0MjIsIFszXSAgPSAyNDI3LCBbNF0gPSAyNDMyLAotCVs1XSAgPSAyNDM3LCBbNl0gID0gMjQ0MiwgWzddICA9IDI0NDcsIFs4XSAgPSAyNDUyLCBbOV0gPSAyNDU3LAotCVsxMF0gPSAyNDYyLCBbMTFdID0gMjQ2NywgWzEyXSA9IDI0NzIsIFsxM10gPSAyNDc3LAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJaW50IHJlZ19kb21haW47CiAJaW50IG1pbiwgbWF4LCBkZWZsdDsKQEAgLTEwMDUsNyArMTAwMCw3IEBACiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbid0IGFsbG9jIGEgc2tfYnVmZiBvZiBzaXplICVkLlxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgcGt0X2xlbik7Ci0JCXRoaXMtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJfSBlbHNlIHsKIAkJc2tiLT5kZXYgPSBkZXY7CiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7IC8qIElQIGhlYWRlcnMgb24gMTYgYnl0ZXMgYm91bmRhcmllcyAqLwpAQCAtMTAxMyw4ICsxMDA4LDggQEAKIAkJd2wzNTAxX3JlY2VpdmUodGhpcywgc2tiLT5kYXRhLCBwa3RfbGVuKTsKIAkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwogCQlza2ItPnByb3RvY29sCT0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQl0aGlzLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCXRoaXMtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKIAl9CiB9CkBAIC0xMzE2LDcgKzEzMTEsNyBAQAogc3RhdGljIHZvaWQgd2wzNTAxX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0aGlzLT5zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIApAQCAtMTM1MSwxMSArMTM0NiwxMSBAQAogCWlmIChlbmFibGVkKQogCQl3bDM1MDFfdW5ibG9ja19pbnRlcnJ1cHQodGhpcyk7CiAJaWYgKHJjKSB7Ci0JCSsrdGhpcy0+c3RhdHMudHhfZHJvcHBlZDsKKwkJKytkZXYtPnN0YXRzLnR4X2Ryb3BwZWQ7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9IGVsc2UgewotCQkrK3RoaXMtPnN0YXRzLnR4X3BhY2tldHM7Ci0JCXRoaXMtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCQkrK2Rldi0+c3RhdHMudHhfcGFja2V0czsKKwkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJa2ZyZWVfc2tiKHNrYik7CiAKIAkJaWYgKHRoaXMtPnR4X2J1ZmZlcl9jbnQgPCAyKQpAQCAtMTQwNSwxMyArMTQwMCw2IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqd2wzNTAxX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB3bDM1MDFfY2FyZCAqdGhpcyA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlyZXR1cm4gJnRoaXMtPnN0YXRzOwotfQotCiBzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKndsMzUwMV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTUxMCw3ICsxNDk4LDcgQEAKIHsKIAlzdHJ1Y3Qgd2wzNTAxX2NhcmQgKnRoaXMgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0Jd3JxdS0+ZnJlcS5tID0gd2wzNTAxX2NoYW4yZnJlcVt0aGlzLT5jaGFuIC0gMV0gKiAxMDAwMDA7CisJd3JxdS0+ZnJlcS5tID0gaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKHRoaXMtPmNoYW4pICogMTAwMDAwOwogCXdycXUtPmZyZXEuZSA9IDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0xODk1LDYgKzE4ODMsMTYgQEAKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gd2wzNTAxX2dldF93aXJlbGVzc19zdGF0cywKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgd2wzNTAxX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IHdsMzUwMV9vcGVuLAorCS5uZG9fc3RvcAkJPSB3bDM1MDFfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHdsMzUwMV9oYXJkX3N0YXJ0X3htaXQsCisJLm5kb190eF90aW1lb3V0CQk9IHdsMzUwMV90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKioKICAqIHdsMzUwMV9hdHRhY2ggLSBjcmVhdGVzIGFuICJpbnN0YW5jZSIgb2YgdGhlIGRyaXZlcgogICoKQEAgLTE5MjcsMTcgKzE5MjUsMTYgQEAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHdsMzUwMV9jYXJkKSk7CiAJaWYgKCFkZXYpCiAJCWdvdG8gb3V0X2xpbms7Ci0JZGV2LT5vcGVuCQk9IHdsMzUwMV9vcGVuOwotCWRldi0+c3RvcAkJPSB3bDM1MDFfY2xvc2U7Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSB3bDM1MDFfaGFyZF9zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dAkJPSB3bDM1MDFfdHhfdGltZW91dDsKKworCisJZGV2LT5uZXRkZXZfb3BzCQk9ICZ3bDM1MDFfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvCT0gNSAqIEhaOwotCWRldi0+Z2V0X3N0YXRzCQk9IHdsMzUwMV9nZXRfc3RhdHM7CisKIAl0aGlzID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl0aGlzLT53aXJlbGVzc19kYXRhLnNweV9kYXRhID0gJnRoaXMtPnNweV9kYXRhOwogCXRoaXMtPnBfZGV2ID0gcF9kZXY7CiAJZGV2LT53aXJlbGVzc19kYXRhCT0gJnRoaXMtPndpcmVsZXNzX2RhdGE7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycwk9IChzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgKikmd2wzNTAxX2hhbmRsZXJfZGVmOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMJPSAmd2wzNTAxX2hhbmRsZXJfZGVmOwogCVNFVF9FVEhUT09MX09QUyhkZXYsICZvcHMpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAlwX2Rldi0+cHJpdiA9IHBfZGV2LT5pcnEuSW5zdGFuY2UgPSBkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCmluZGV4IGI0NWMyN2QuLjliMjQ0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCkBAIC0zMjgsOCArMzI4LDggQEAKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgMiksICZkYXRhW2RhdGFsZW4tMjRdLCAyKTsKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSwgbGVuKTsKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHpkLT5kZXYpOwotCQkJemQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCXpkLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJCXpkLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCXpkLT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJbmV0aWZfcngoc2tiKTsKIAkJCWdvdG8gcmVzdWJtaXQ7CiAJCX0KQEAgLTM4NCw4ICszODQsOCBAQAogCQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBsZW4pLCBkYXRhKzgsIGxlbik7CiAJCX0KIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgemQtPmRldik7Ci0JCXpkLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCXpkLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJemQtPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQl6ZC0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbmV0aWZfcngoc2tiKTsKIAl9CiByZXN1Ym1pdDoKQEAgLTc4Nyw3ICs3ODcsNyBAQAogCXN0cnVjdCB1cmIgKnVyYiA9IHpkLT50eF91cmI7CiAKIAlpZiAoIXpkLT5tYWNfZW5hYmxlZCB8fCB6ZC0+bW9uaXRvcikgewotCQl6ZC0+c3RhdHMudHhfZHJvcHBlZCsrOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAwOwogCX0KQEAgLTgxNywxMiArODE3LDEyIEBACiAKIAllcnIgPSB1c2Jfc3VibWl0X3VyYih6ZC0+dHhfdXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyKSB7Ci0JCXpkLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JemQtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQl6ZC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlrZnJlZV9za2Ioc2tiKTsKIApAQCAtODM4LDcgKzgzOCw3IEBACiAJZGV2X3dhcm4oJnpkLT51c2ItPmRldiwgIiVzOiBUWCB0aW1lb3V0LCBzaG9vdGluZyBkb3duIHVyYlxuIiwKIAkgICAgZGV2LT5uYW1lKTsKIAl1c2JfdW5saW5rX3VyYih6ZC0+dHhfdXJiKTsKLQl6ZC0+c3RhdHMudHhfZXJyb3JzKys7CisJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkvKiBSZXN0YXJ0IHRoZSB0aW1lb3V0IHRvIHF1aWV0IHRoZSB3YXRjaGRvZzogKi8KIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIH0KQEAgLTg2MSwxMyArODYxLDYgQEAKIAlyZXR1cm4gemQxMjAxX21hY19yZXNldCh6ZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqemQxMjAxX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCB6ZDEyMDEgKnpkID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAmemQtPnN0YXRzOwotfQotCiBzdGF0aWMgc3RydWN0IGl3X3N0YXRpc3RpY3MgKnpkMTIwMV9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgemQxMjAxICp6ZCA9IG5ldGRldl9wcml2KGRldik7CkBAIC05MTksMTAgKzkxMiw5IEBACiAJaWYgKGZyZXEtPmUgPT0gMCkKIAkJY2hhbm5lbCA9IGZyZXEtPm07CiAJZWxzZSB7Ci0JCWlmIChmcmVxLT5tID49IDI0ODIpCi0JCQljaGFubmVsID0gMTQ7Ci0JCWlmIChmcmVxLT5tID49IDI0MDcpCi0JCQljaGFubmVsID0gKGZyZXEtPm0tMjQwNykvNTsKKwkJY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbihmcmVxLT5tKTsKKwkJaWYgKGNoYW5uZWwgPCAwKQorCQkJY2hhbm5lbCA9IDA7CiAJfQogCiAJZXJyID0gemQxMjAxX3NldGNvbmZpZzE2KHpkLCBaRDEyMDFfUklEX0NORk9XTkNIQU5ORUwsIGNoYW5uZWwpOwpAQCAtMTcyNSw2ICsxNzE3LDE4IEBACiAJLmdldF93aXJlbGVzc19zdGF0cwk9IHpkMTIwMV9nZXRfd2lyZWxlc3Nfc3RhdHMsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHpkMTIwMV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB6ZDEyMDFfbmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHpkMTIwMV9uZXRfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gemQxMjAxX2hhcmRfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gemQxMjAxX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB6ZDEyMDFfc2V0X211bHRpY2FzdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IHpkMTIwMV9zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKK307CisKIHN0YXRpYyBpbnQgemQxMjAxX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCiAJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CkBAIC0xNzc3LDE2ICsxNzgxLDkgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zdGFydDsKIAotCWRldi0+b3BlbiA9IHpkMTIwMV9uZXRfb3BlbjsKLQlkZXYtPnN0b3AgPSB6ZDEyMDFfbmV0X3N0b3A7Ci0JZGV2LT5nZXRfc3RhdHMgPSB6ZDEyMDFfZ2V0X3N0YXRzOwotCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPQotCSAgICAoc3RydWN0IGl3X2hhbmRsZXJfZGVmICopJnpkMTIwMV9pd19oYW5kbGVyczsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHpkMTIwMV9oYXJkX3N0YXJ0X3htaXQ7CisJZGV2LT5uZXRkZXZfb3BzID0gJnpkMTIwMV9uZXRkZXZfb3BzOworCWRldi0+d2lyZWxlc3NfaGFuZGxlcnMgPSAmemQxMjAxX2l3X2hhbmRsZXJzOwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBaRDEyMDFfVFhfVElNRU9VVDsKLQlkZXYtPnR4X3RpbWVvdXQgPSB6ZDEyMDFfdHhfdGltZW91dDsKLQlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHpkMTIwMV9zZXRfbXVsdGljYXN0OwotCWRldi0+c2V0X21hY19hZGRyZXNzID0gemQxMjAxX3NldF9tYWNfYWRkcmVzczsKIAlzdHJjcHkoZGV2LT5uYW1lLCAid2xhbiVkIik7CiAKIAllcnIgPSB6ZDEyMDFfZ2V0Y29uZmlnKHpkLCBaRDEyMDFfUklEX0NORk9XTk1BQ0FERFIsIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaAppbmRleCAyMzVmMGVlLi5kZDdlYTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuaApAQCAtMjYsNyArMjYsNiBAQAogCXN0cnVjdCB1c2JfZGV2aWNlCSp1c2I7CiAJaW50CQkJcmVtb3ZlZDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBpd19zdGF0aXN0aWNzCWl3c3RhdHM7CiAKIAlpbnQJCQllbmRwX2luOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IGYxNTE5MTQuLjJjODEzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKQEAgLTE2MTYsMyArMTYxNiwyNCBAQAogCiAJcmV0dXJuIHpkX2lvd3JpdGUzMmEoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOwogfQorCit1NjQgemRfY2hpcF9nZXRfdHNmKHN0cnVjdCB6ZF9jaGlwICpjaGlwKQoreworCWludCByOworCXN0YXRpYyBjb25zdCB6ZF9hZGRyX3QgYXdfcHRfYmlfYWRkcltdID0KKwkJeyBDUl9UU0ZfTE9XX1BBUlQsIENSX1RTRl9ISUdIX1BBUlQgfTsKKwl1MzIgdmFsdWVzWzJdOworCXU2NCB0c2Y7CisKKwltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJciA9IHpkX2lvcmVhZDMydl9sb2NrZWQoY2hpcCwgdmFsdWVzLCAoY29uc3QgemRfYWRkcl90ICopYXdfcHRfYmlfYWRkciwKKwkgICAgICAgICAgICAgICAgICAgICAgICBBUlJBWV9TSVpFKGF3X3B0X2JpX2FkZHIpKTsKKwltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKKwlpZiAocikKKwkJcmV0dXJuIDA7CisKKwl0c2YgPSB2YWx1ZXNbMV07CisJdHNmID0gKHRzZiA8PCAzMikgfCB2YWx1ZXNbMF07CisKKwlyZXR1cm4gdHNmOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCmluZGV4IGY4YzA2MWEuLmVlNDI3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKQEAgLTk1MCw0ICs5NTAsNiBAQAogaW50IHpkX2NoaXBfc2V0X211bHRpY2FzdF9oYXNoKHN0cnVjdCB6ZF9jaGlwICpjaGlwLAogCSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHpkX21jX2hhc2ggKmhhc2gpOwogCit1NjQgemRfY2hpcF9nZXRfdHNmKHN0cnVjdCB6ZF9jaGlwICpjaGlwKTsKKwogI2VuZGlmIC8qIF9aRF9DSElQX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKaW5kZXggNTIwMGRiNC4uNmFjNTk3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfZGVmLmgKQEAgLTMzLDggKzMzLDEzIEBACiAjaWZkZWYgREVCVUcKICMgIGRlZmluZSBkZXZfZGJnX2YoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKIAkgIGRldl9wcmludGtfZihLRVJOX0RFQlVHLCBkZXYsIGZtdCwgIyMgYXJncykKKyMgIGRlZmluZSBkZXZfZGJnX2ZfbGltaXQoZGV2LCBmbXQsIGFyZ3MuLi4pIGRvIHsgXAorCWlmIChuZXRfcmF0ZWxpbWl0KCkpIFwKKwkJZGV2X3ByaW50a19mKEtFUk5fREVCVUcsIGRldiwgZm10LCAjIyBhcmdzKTsgXAorfSB3aGlsZSAoMCkKICNlbHNlCiAjICBkZWZpbmUgZGV2X2RiZ19mKGRldiwgZm10LCBhcmdzLi4uKSBkbyB7ICh2b2lkKShkZXYpOyB9IHdoaWxlICgwKQorIyAgZGVmaW5lIGRldl9kYmdfZl9saW1pdChkZXYsIGZtdCwgYXJncy4uLikgZG8geyAodm9pZCkoZGV2KTsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBERUJVRyAqLwogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKaW5kZXggYTYxMWFkOC4uYzNhNTEyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMKQEAgLTE3MCwxMCArMTcwLDEwIEBACiAJCWdvdG8gZGlzYWJsZV9pbnQ7CiAKIAlyID0gemRfcmVnMmFscGhhMihtYWMtPnJlZ2RvbWFpbiwgYWxwaGEyKTsKLQlpZiAoIXIpCi0JCXJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIGFscGhhMik7CisJaWYgKHIpCisJCWdvdG8gZGlzYWJsZV9pbnQ7CiAKLQlyID0gMDsKKwlyID0gcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgYWxwaGEyKTsKIGRpc2FibGVfaW50OgogCXpkX2NoaXBfZGlzYWJsZV9pbnQoY2hpcCk7CiBvdXQ6CkBAIC01NzUsMTMgKzU3NSwxNyBAQAogCiAJciA9IGZpbGxfY3RybHNldChtYWMsIHNrYik7CiAJaWYgKHIpCi0JCXJldHVybiByOworCQlnb3RvIGZhaWw7CiAKIAlpbmZvLT5yYXRlX2RyaXZlcl9kYXRhWzBdID0gaHc7CiAKIAlyID0gemRfdXNiX3R4KCZtYWMtPmNoaXAudXNiLCBza2IpOwogCWlmIChyKQotCQlyZXR1cm4gcjsKKwkJZ290byBmYWlsOworCXJldHVybiAwOworCitmYWlsOgorCWRldl9rZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzY4LDEzICs3NzIsMjMgQEAKIAkJCWlmICghYmVhY29uKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJciA9IHpkX21hY19jb25maWdfYmVhY29uKGh3LCBiZWFjb24pOwotCQkJaWYgKHIgPCAwKQotCQkJCXJldHVybiByOwotCQkJciA9IHpkX3NldF9iZWFjb25faW50ZXJ2YWwoJm1hYy0+Y2hpcCwgQkNOX01PREVfSUJTUyB8Ci0JCQkJCWh3LT5jb25mLmJlYWNvbl9pbnQpOwotCQkJaWYgKHIgPCAwKQotCQkJCXJldHVybiByOwogCQkJa2ZyZWVfc2tiKGJlYWNvbik7CisKKwkJCWlmIChyIDwgMCkKKwkJCQlyZXR1cm4gcjsKKwkJfQorCisJCWlmIChjb25mLT5jaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpIHsKKwkJCXUzMiBpbnRlcnZhbDsKKworCQkJaWYgKGNvbmYtPmVuYWJsZV9iZWFjb24pCisJCQkJaW50ZXJ2YWwgPSBCQ05fTU9ERV9JQlNTIHwgaHctPmNvbmYuYmVhY29uX2ludDsKKwkJCWVsc2UKKwkJCQlpbnRlcnZhbCA9IDA7CisKKwkJCXIgPSB6ZF9zZXRfYmVhY29uX2ludGVydmFsKCZtYWMtPmNoaXAsIGludGVydmFsKTsKKwkJCWlmIChyIDwgMCkKKwkJCQlyZXR1cm4gcjsKIAkJfQogCX0gZWxzZQogCQlhc3NvY2lhdGVkID0gaXNfdmFsaWRfZXRoZXJfYWRkcihjb25mLT5ic3NpZCk7CkBAIC03OTMsMTAgKzgwNyw5IEBACiAJc3RydWN0IHpkX21hYyAqbWFjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB6ZF9tYWMsIHByb2Nlc3NfaW50cik7CiAKIAlpbnRfc3RhdHVzID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikobWFjLT5pbnRyX2J1ZmZlcis0KSk7Ci0JaWYgKGludF9zdGF0dXMgJiBJTlRfQ0ZHX05FWFRfQkNOKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlkZXZfZGJnX2YoemRfbWFjX2RldihtYWMpLCAiSU5UX0NGR19ORVhUX0JDTlxuIik7Ci0JfSBlbHNlCisJaWYgKGludF9zdGF0dXMgJiBJTlRfQ0ZHX05FWFRfQkNOKQorCQlkZXZfZGJnX2ZfbGltaXQoemRfbWFjX2RldihtYWMpLCAiSU5UX0NGR19ORVhUX0JDTlxuIik7CisJZWxzZQogCQlkZXZfZGJnX2YoemRfbWFjX2RldihtYWMpLCAiVW5zdXBwb3J0ZWQgaW50ZXJydXB0XG4iKTsKIAogCXpkX2NoaXBfZW5hYmxlX2h3aW50KCZtYWMtPmNoaXApOwpAQCAtOTI2LDYgKzkzOSwxMiBAQAogCX0KIH0KIAorc3RhdGljIHU2NCB6ZF9vcF9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHpkX2h3X21hYyhodyk7CisJcmV0dXJuIHpkX2NoaXBfZ2V0X3RzZigmbWFjLT5jaGlwKTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHpkX29wcyA9IHsKIAkudHgJCQk9IHpkX29wX3R4LAogCS5zdGFydAkJCT0gemRfb3Bfc3RhcnQsCkBAIC05MzYsNiArOTU1LDcgQEAKIAkuY29uZmlnX2ludGVyZmFjZQk9IHpkX29wX2NvbmZpZ19pbnRlcmZhY2UsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSB6ZF9vcF9jb25maWd1cmVfZmlsdGVyLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gemRfb3BfYnNzX2luZm9fY2hhbmdlZCwKKwkuZ2V0X3RzZgkJPSB6ZF9vcF9nZXRfdHNmLAogfTsKIAogc3RydWN0IGllZWU4MDIxMV9odyAqemRfbWFjX2FsbG9jX2h3KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpAQCAtOTY3LDcgKzk4Nyw3IEBACiAJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZtYWMtPmJhbmQ7CiAKIAlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKLQkJICAgIElFRUU4MDIxMV9IV19TSUdOQUxfREI7CisJCSAgICBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQzsKIAogCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KIAkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKaW5kZXggY2Q2MTg0ZS4uOWYxMDJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwogCXN0cnVjdCBuZXRmcm9udF9pbmZvICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0JbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwluYXBpX3NjaGVkdWxlKCZucC0+bmFwaSk7CiB9CiAKIHN0YXRpYyBpbnQgbmV0ZnJvbnRfdHhfc2xvdF9hdmFpbGFibGUoc3RydWN0IG5ldGZyb250X2luZm8gKm5wKQpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCXhlbm5ldF9hbGxvY19yeF9idWZmZXJzKGRldik7CiAJCW5wLT5yeC5zcmluZy0+cnNwX2V2ZW50ID0gbnAtPnJ4LnJzcF9jb25zICsgMTsKIAkJaWYgKFJJTkdfSEFTX1VOQ09OU1VNRURfUkVTUE9OU0VTKCZucC0+cngpKQotCQkJbmV0aWZfcnhfc2NoZWR1bGUoJm5wLT5uYXBpKTsKKwkJCW5hcGlfc2NoZWR1bGUoJm5wLT5uYXBpKTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJm5wLT5yeF9sb2NrKTsKIApAQCAtOTc5LDcgKzk3OSw3IEBACiAKIAkJUklOR19GSU5BTF9DSEVDS19GT1JfUkVTUE9OU0VTKCZucC0+cngsIG1vcmVfdG9fZG8pOwogCQlpZiAoIW1vcmVfdG9fZG8pCi0JCQlfX25ldGlmX3J4X2NvbXBsZXRlKG5hcGkpOworCQkJX19uYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CkBAIC0xMzE3LDcgKzEzMTcsNyBAQAogCQl4ZW5uZXRfdHhfYnVmX2djKGRldik7CiAJCS8qIFVuZGVyIHR4X2xvY2s6IHByb3RlY3RzIGFjY2VzcyB0byByeCBzaGFyZWQtcmluZyBpbmRleGVzLiAqLwogCQlpZiAoUklOR19IQVNfVU5DT05TVU1FRF9SRVNQT05TRVMoJm5wLT5yeCkpCi0JCQluZXRpZl9yeF9zY2hlZHVsZSgmbnAtPm5hcGkpOworCQkJbmFwaV9zY2hlZHVsZSgmbnAtPm5hcGkpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5wLT50eF9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94dHNvbmljLmMgYi9kcml2ZXJzL25ldC94dHNvbmljLmMKaW5kZXggMDNhM2YzNC4uYTEyYTcyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveHRzb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3h0c29uaWMuYwpAQCAtMTgzLDcgKzE4Myw3IEBACiAKIAlpZiAobHAtPmRlc2NyaXB0b3JzID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgYWxsb2MgRE1BIG1lbW9yeSBmb3IgIgotCQkJCSIgZGVzY3JpcHRvcnMuXG4iLCBscC0+ZGV2aWNlLT5idXNfaWQpOworCQkJCSIgZGVzY3JpcHRvcnMuXG4iLCBkZXZfbmFtZShscC0+ZGV2aWNlKSk7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCAyZjE2NDVkLi43NDc3ZmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYworKysgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwpAQCAtMTA3LDkgKzEwNyw5IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIFRoZXNlIGlkZW50aWZ5IHRoZSBkcml2ZXIgYmFzZSB2ZXJzaW9uIGFuZCBtYXkgbm90IGJlIHJlbW92ZWQuICovCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci1LRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjA1ICAxLzA5LzIwMDEgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKLUtFUk5fSU5GTyAiICAodW5vZmZpY2lhbCAyLjQueCBwb3J0LCAiIERSVl9WRVJTSU9OICIsICIgRFJWX1JFTERBVEUgIilcbiI7CitzdGF0aWMgY29uc3QgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0Y29uc3QgPQorICBLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYxLjA1ICAxLzA5LzIwMDEgIFdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKKyAgS0VSTl9JTkZPICIgICh1bm9mZmljaWFsIDIuNC54IHBvcnQsICIgRFJWX1ZFUlNJT04gIiwgIiBEUlZfUkVMREFURSAiKVxuIjsKIAogTU9EVUxFX0FVVEhPUigiRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUGFja2V0IEVuZ2luZXMgWWVsbG93ZmluIEctTklDIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC96bmV0LmMgYi9kcml2ZXJzL25ldC96bmV0LmMKaW5kZXggZjBiMTVjOS4uMGE2OTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvem5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3puZXQuYwpAQCAtMzU4LDYgKzM1OCwxNyBAQAogCSAqIG11bHRpY2FzdCBhZGRyZXNzIGNvbmZpZ3VyZWQgaXNuJ3QgZXF1YWwgdG8gSUZGX0FMTE1VTFRJICovCiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgem5ldF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSB6bmV0X29wZW4sCisJLm5kb19zdG9wCQk9IHpuZXRfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHpuZXRfc2VuZF9wYWNrZXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB6bmV0X3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gem5ldF90eF90aW1lb3V0LAorCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiAvKiBUaGUgWi1Ob3RlIHByb2JlIGlzIHByZXR0eSBlYXN5LiAgVGhlIE5FVElEQkxLIGV4aXN0cyBpbiB0aGUgc2FmZS10by1wcm9iZQogICAgQklPUyBhcmVhLiAgV2UganVzdCBzY2FuIGZvciB0aGUgc2lnbmF0dXJlLCBhbmQgcHVsbCB0aGUgdml0YWwgcGFyYW1ldGVycwogICAgb3V0IG9mIHRoZSBzdHJ1Y3R1cmUuICovCkBAIC00NDAsMTEgKzQ1MSw3IEBACiAJem5ldC0+dHhfZW5kID0gem5ldC0+dHhfc3RhcnQgKyB6bmV0LT50eF9idWZfbGVuOwogCiAJLyogVGhlIFpORVQtc3BlY2lmaWMgZW50cmllcyBpbiB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KLQlkZXYtPm9wZW4gPSAmem5ldF9vcGVuOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gJnpuZXRfc2VuZF9wYWNrZXQ7Ci0JZGV2LT5zdG9wID0gJnpuZXRfY2xvc2U7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSAmem5ldF9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JZGV2LT50eF90aW1lb3V0ID0gem5ldF90eF90aW1lb3V0OworCWRldi0+bmV0ZGV2X29wcyA9ICZ6bmV0X25ldGRldl9vcHM7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9zeXNmcy5jCmluZGV4IGExM2FiZjUuLjg0NTBmNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYwpAQCAtMjI1LDcgKzIyNSw4IEBACiAKIHZvaWQgY3BxaHBfY3JlYXRlX2RlYnVnZnNfZmlsZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpCiB7Ci0JY3RybC0+ZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZShjdHJsLT5wY2lfZGV2LT5kZXYuYnVzX2lkLCBTX0lSVUdPLCByb290LCBjdHJsLCAmZGVidWdfb3BzKTsKKwljdHJsLT5kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGRldl9uYW1lKCZjdHJsLT5wY2lfZGV2LT5kZXYpLAorCQkJCQkgICBTX0lSVUdPLCByb290LCBjdHJsLCAmZGVidWdfb3BzKTsKIH0KIAogdm9pZCBjcHFocF9yZW1vdmVfZGVidWdmc19maWxlcyhzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCmluZGV4IDQ1ZWZmYzUuLmI3MjFjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKKysrIGIvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYwpAQCAtMjAsNyArMjAsNyBAQAogCXU4ICBpcnRlX21hc2s7CiB9OwogCi0jaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogc3RhdGljIHN0cnVjdCBpcnFfMl9pb21tdSAqZ2V0X29uZV9mcmVlX2lycV8yX2lvbW11KGludCBjcHUpCiB7CiAJc3RydWN0IGlycV8yX2lvbW11ICppb21tdTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9hdTEwMDBfZ2VuZXJpYy5jCmluZGV4IGZjMWRlNDYuLjkwMDEzMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2F1MTAwMF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvYXUxMDAwX2dlbmVyaWMuYwpAQCAtNDY4LDEzICs0NjgsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBhdTF4MDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBza3RfZGV2X2luZm8gKnNpbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBpOwogCiAJbXV0ZXhfbG9jaygmcGNtY2lhX3NvY2tldHNfbG9jayk7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaW5mby0+bnNrdDsgaSsrKSB7CiAJCXN0cnVjdCBhdTEwMDBfcGNtY2lhX3NvY2tldCAqc2t0ID0gUENNQ0lBX1NPQ0tFVChpKTsKQEAgLTQ5OCwxMyArNDk4LDEzIEBACiAgKiBQQ01DSUEgIkRyaXZlciIgQVBJCiAgKi8KIAotc3RhdGljIGludCBhdTF4MDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF1MXgwMF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKIAogCW11dGV4X2xvY2soJnBjbWNpYV9zb2NrZXRzX2xvY2spOwogCWZvciAoaT0wOyBpIDwgQVJSQVlfU0laRShhdTF4MDBfcGNtY2lhX2h3X2luaXQpOyBpKyspIHsKLQkJcmV0ID0gYXUxeDAwX3BjbWNpYV9od19pbml0W2ldKGRldik7CisJCXJldCA9IGF1MXgwMF9wY21jaWFfaHdfaW5pdFtpXSgmZGV2LT5kZXYpOwogCQlpZiAocmV0ID09IDApCiAJCQlicmVhazsKIAl9CkBAIC01MTIsMTQgKzUxMiwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBhdTF4MDBfcGNtY2lhX2RyaXZlciA9IHsKK3N0YXRpYyBpbnQgYXUxeDAwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MXgwMF9wY21jaWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTF4MDAtcGNtY2lhIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGF1MXgwMF9kcnZfcGNtY2lhX3Byb2JlLAogCS5yZW1vdmUJCT0gYXUxeDAwX2Rydl9wY21jaWFfcmVtb3ZlLAotCS5uYW1lCQk9ICJhdTF4MDAtcGNtY2lhIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCisJLnN1c3BlbmQgCT0gYXUxeDAwX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IGF1MXgwMF9kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIApAQCAtNTMzLDggKzU0NSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhdTF4MDBfcGNtY2lhX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSAwOwotCWlmICgoZXJyb3IgPSBkcml2ZXJfcmVnaXN0ZXIoJmF1MXgwMF9wY21jaWFfZHJpdmVyKSkpCi0JCXJldHVybiBlcnJvcjsKKwllcnJvciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNTQ0LDcgKzU1NSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBhdTF4MDBfcGNtY2lhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYXUxeDAwX3BjbWNpYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdTF4MDBfcGNtY2lhX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF1MXgwMF9wY21jaWFfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9pODIzNjUuYyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCmluZGV4IDcxNjUzYWIuLjQwZDQ5NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2k4MjM2NS5jCkBAIC0xMjM4LDYgKzEyMzgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBpODIzNjVfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIHN0YXRpYyBzdHJ1Y3QgcGNjYXJkX29wZXJhdGlvbnMgcGNpY19vcGVyYXRpb25zID0gewogCS5pbml0CQkJPSBwY2ljX2luaXQsCiAJLmdldF9zdGF0dXMJCT0gcGNpY19nZXRfc3RhdHVzLApAQCAtMTI0OCwxMSArMTI1OCwxMyBAQAogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGk4MjM2NV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiaTgyMzY1IiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaTgyMzY1X2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpODIzNjUiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSBpODIzNjVfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gaTgyMzY1X2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmk4MjM2NV9kZXZpY2U7CkBAIC0xMjYxLDcgKzEyNzMsNyBAQAogewogICAgIGludCBpLCByZXQ7CiAKLSAgICByZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOworICAgIHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CiAgICAgaWYgKHJldCkKIAlnb3RvIGVycl9vdXQ7CiAKQEAgLTEzMzcsNyArMTM0OSw3IEBACiAJcG5wX2Rpc2FibGVfZGV2KGk4MjM2NV9wbnBkZXYpOwogI2VuZGlmCiBlcnJfZHJpdmVyX3VucmVnaXN0ZXI6Ci0gICAgZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOworICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpODIzNjVfZHJpdmVyKTsKIGVycl9vdXQ6CiAgICAgcmV0dXJuIHJldDsKIH0gLyogaW5pdF9pODIzNjUgKi8KQEAgLTEzNjUsNyArMTM3Nyw3IEBACiAgICAgaWYgKGk4MjM2NV9wbnBkZXYpCiAgICAgCQlwbnBfZGlzYWJsZV9kZXYoaTgyMzY1X3BucGRldik7CiAjZW5kaWYKLSAgICBkcml2ZXJfdW5yZWdpc3RlcigmaTgyMzY1X2RyaXZlcik7CisgICAgcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmk4MjM2NV9kcml2ZXIpOwogfSAvKiBleGl0X2k4MjM2NSAqLwogCiBtb2R1bGVfaW5pdChpbml0X2k4MjM2NSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jIGIvZHJpdmVycy9wY21jaWEvbTMycl9jZmMuYwppbmRleCAyYWI0ZjIyLi42MmI0ZWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9tMzJyX2NmYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL20zMnJfY2ZjLmMKQEAgLTY5NiwxMyArNjk2LDI1IEBACiAJLnNldF9tZW1fbWFwCQk9IHBjY19zZXRfbWVtX21hcCwKIH07CiAKK3N0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgY2ZjX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHBjY19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiY2ZjIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiY2ZjIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCisJLnN1c3BlbmQgCT0gY2ZjX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IGNmY19kcnZfcGNtY2lhX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjY19kZXZpY2UgPSB7CkBAIC03MTYsMTMgKzcyOCwxMyBAQAogewogCWludCBpLCByZXQ7CiAKLQlyZXQgPSBkcml2ZXJfcmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNjX2RldmljZSk7CiAJaWYgKHJldCl7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNzU0LDcgKzc2Niw3IEBACiAJaWYgKHBjY19zb2NrZXRzID09IDApIHsKIAkJcHJpbnRrKCJzb2NrZXQgaXMgbm90IGZvdW5kLlxuIik7CiAJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtODAyLDcgKzgxNCw3IEBACiAJaWYgKHBvbGxfaW50ZXJ2YWwgIT0gMCkKIAkJZGVsX3RpbWVyX3N5bmMoJnBvbGxfdGltZXIpOwogCi0JZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIH0gLyogZXhpdF9tMzJyX3BjYyAqLwogCiBtb2R1bGVfaW5pdChpbml0X20zMnJfcGNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCmluZGV4IDJmMTA4YzIuLjEyMDM0YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwpAQCAtNjcyLDEzICs2NzIsMjUgQEAKIAkuc2V0X21lbV9tYXAJCT0gcGNjX3NldF9tZW1fbWFwLAogfTsKIAorc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBwY2NfZHJ2X3BjbWNpYV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUoJmRldi0+ZGV2KTsKK30KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgcGNjX2RyaXZlciA9IHsKLQkubmFtZSA9ICJwY2MiLAotCS5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwY2NfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJwY2MiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSBwY2NfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gcGNjX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNjX2RldmljZSA9IHsKQEAgLTY5MiwxMyArNzA0LDEzIEBACiB7CiAJaW50IGksIHJldDsKIAotCXJldCA9IGRyaXZlcl9yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZwY2NfZGV2aWNlKTsKIAlpZiAocmV0KXsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC03MTUsNyArNzI3LDcgQEAKIAlpZiAocGNjX3NvY2tldHMgPT0gMCkgewogCQlwcmludGsoInNvY2tldCBpcyBub3QgZm91bmQuXG4iKTsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnBjY19kZXZpY2UpOwotCQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwY2NfZHJpdmVyKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03NjMsNyArNzc1LDcgQEAKIAlpZiAocG9sbF9pbnRlcnZhbCAhPSAwKQogCQlkZWxfdGltZXJfc3luYygmcG9sbF90aW1lcik7CiAKLQlkcml2ZXJfdW5yZWdpc3RlcigmcGNjX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBjY19kcml2ZXIpOwogfSAvKiBleGl0X20zMnJfcGNjICovCiAKIG1vZHVsZV9pbml0KGluaXRfbTMycl9wY2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKaW5kZXggYmI5ZGRiOS4uYzQ5YTcyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAKQEAgLTM5LDYgKzM4LDQ0IEBACiAjaW5jbHVkZSAic29jX2NvbW1vbi5oIgogI2luY2x1ZGUgInB4YTJ4eF9iYXNlLmgiCiAKKy8qCisgKiBQZXJzb25hbCBDb21wdXRlciBNZW1vcnkgQ2FyZCBJbnRlcm5hdGlvbmFsIEFzc29jaWF0aW9uIChQQ01DSUEpIHNvY2tldHMKKyAqLworCisjZGVmaW5lIFBDTUNJQVBydFNwCTB4MDQwMDAwMDAJLyogUENNQ0lBIFBhcnRpdGlvbiBTcGFjZSBbYnl0ZV0gICAqLworI2RlZmluZSBQQ01DSUFTcAkoNCpQQ01DSUFQcnRTcCkJLyogUENNQ0lBIFNwYWNlIFtieXRlXSAgICAgICAgICAgICAqLworI2RlZmluZSBQQ01DSUFJT1NwCVBDTUNJQVBydFNwCS8qIFBDTUNJQSBJL08gU3BhY2UgW2J5dGVdICAgICAgICAgKi8KKyNkZWZpbmUgUENNQ0lBQXR0clNwCVBDTUNJQVBydFNwCS8qIFBDTUNJQSBBdHRyaWJ1dGUgU3BhY2UgW2J5dGVdICAgKi8KKyNkZWZpbmUgUENNQ0lBTWVtU3AJUENNQ0lBUHJ0U3AJLyogUENNQ0lBIE1lbW9yeSBTcGFjZSBbYnl0ZV0gICAgICAqLworCisjZGVmaW5lIFBDTUNJQTBTcAlQQ01DSUFTcAkvKiBQQ01DSUEgMCBTcGFjZSBbYnl0ZV0gICAgICAgICAgICovCisjZGVmaW5lIFBDTUNJQTBJT1NwCVBDTUNJQUlPU3AJLyogUENNQ0lBIDAgSS9PIFNwYWNlIFtieXRlXSAgICAgICAqLworI2RlZmluZSBQQ01DSUEwQXR0clNwCVBDTUNJQUF0dHJTcAkvKiBQQ01DSUEgMCBBdHRyaWJ1dGUgU3BhY2UgW2J5dGVdICovCisjZGVmaW5lIFBDTUNJQTBNZW1TcAlQQ01DSUFNZW1TcAkvKiBQQ01DSUEgMCBNZW1vcnkgU3BhY2UgW2J5dGVdICAgICovCisKKyNkZWZpbmUgUENNQ0lBMVNwCVBDTUNJQVNwCS8qIFBDTUNJQSAxIFNwYWNlIFtieXRlXSAgICAgICAgICAgKi8KKyNkZWZpbmUgUENNQ0lBMUlPU3AJUENNQ0lBSU9TcAkvKiBQQ01DSUEgMSBJL08gU3BhY2UgW2J5dGVdICAgICAgICovCisjZGVmaW5lIFBDTUNJQTFBdHRyU3AJUENNQ0lBQXR0clNwCS8qIFBDTUNJQSAxIEF0dHJpYnV0ZSBTcGFjZSBbYnl0ZV0gKi8KKyNkZWZpbmUgUENNQ0lBMU1lbVNwCVBDTUNJQU1lbVNwCS8qIFBDTUNJQSAxIE1lbW9yeSBTcGFjZSBbYnl0ZV0gICAgKi8KKworI2RlZmluZSBfUENNQ0lBKE5iKQkJCS8qIFBDTUNJQSBbMC4uMV0gICAgICAgICAgICAgICAgICAgKi8gXAorCQkJKDB4MjAwMDAwMDAgKyAoTmIpICogUENNQ0lBU3ApCisjZGVmaW5lIF9QQ01DSUFJTyhOYikJX1BDTUNJQShOYikJLyogUENNQ0lBIEkvTyBbMC4uMV0gICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBQXR0cihOYikJCQkvKiBQQ01DSUEgQXR0cmlidXRlIFswLi4xXSAgICAgICAgICovIFwKKwkJCShfUENNQ0lBKE5iKSArIDIgKiBQQ01DSUFQcnRTcCkKKyNkZWZpbmUgX1BDTUNJQU1lbShOYikJCQkvKiBQQ01DSUEgTWVtb3J5IFswLi4xXSAgICAgICAgICAgICovIFwKKwkJCShfUENNQ0lBKE5iKSArIDMgKiBQQ01DSUFQcnRTcCkKKworI2RlZmluZSBfUENNQ0lBMAlfUENNQ0lBKDApCS8qIFBDTUNJQSAwICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQTBJTwlfUENNQ0lBSU8oMCkJLyogUENNQ0lBIDAgSS9PICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBMEF0dHIJX1BDTUNJQUF0dHIoMCkJLyogUENNQ0lBIDAgQXR0cmlidXRlICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBME1lbQlfUENNQ0lBTWVtKDApCS8qIFBDTUNJQSAwIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KKworI2RlZmluZSBfUENNQ0lBMQlfUENNQ0lBKDEpCS8qIFBDTUNJQSAxICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgX1BDTUNJQTFJTwlfUENNQ0lBSU8oMSkJLyogUENNQ0lBIDEgSS9PICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBMUF0dHIJX1BDTUNJQUF0dHIoMSkJLyogUENNQ0lBIDEgQXR0cmlidXRlICAgICAgICAgICAgICAqLworI2RlZmluZSBfUENNQ0lBMU1lbQlfUENNQ0lBTWVtKDEpCS8qIFBDTUNJQSAxIE1lbW9yeSAgICAgICAgICAgICAgICAgKi8KKwogCiAjZGVmaW5lIE1DWFhfU0VUVVBfTUFTSyAgICAgKDB4N2YpCiAjZGVmaW5lIE1DWFhfQVNTVF9NQVNLICAgICAgKDB4MWYpCkBAIC0xNzcsMjkgKzIxNCw3MyBAQAogCU1FQ1IgfD0gTUVDUl9DSVQ7CiAKIAkvKiBTZXQgTUVDUjpOT1MgKE51bWJlciBPZiBTb2NrZXRzKSAqLwotCWlmIChvcHMtPm5yID4gMSB8fCBtYWNoaW5lX2lzX3ZpcGVyKCkpCisJaWYgKChvcHMtPmZpcnN0ICsgb3BzLT5ucikgPiAxIHx8IG1hY2hpbmVfaXNfdmlwZXIoKSkKIAkJTUVDUiB8PSBNRUNSX05PUzsKIAllbHNlCiAJCU1FQ1IgJj0gfk1FQ1JfTk9TOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqc2t0X25hbWVzW10gPSB7CisJIlBDTUNJQSBzb2NrZXQgMCIsCisJIlBDTUNJQSBzb2NrZXQgMSIsCit9OworCisjZGVmaW5lIFNLVF9ERVZfSU5GT19TSVpFKG4pIFwKKwkoc2l6ZW9mKHN0cnVjdCBza3RfZGV2X2luZm8pICsgKG4pKnNpemVvZihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQpKQorCiBpbnQgX19weGEyeHhfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKKwlpbnQgaSwgcmV0OwogCXN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHM7CisJc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm87CisJc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3Q7CiAKIAlpZiAoIWRldiB8fCAhZGV2LT5wbGF0Zm9ybV9kYXRhKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW9wcyA9IChzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqKWRldi0+cGxhdGZvcm1fZGF0YTsKIAorCXNpbmZvID0ga3phbGxvYyhTS1RfREVWX0lORk9fU0laRShvcHMtPm5yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzaW5mby0+bnNrdCA9IG9wcy0+bnI7CisKKwkvKiBJbml0aWFsaXplIHByb2Nlc3NvciBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IG9wcy0+bnI7IGkrKykgeworCQlza3QgPSAmc2luZm8tPnNrdFtpXTsKKworCQlza3QtPm5yCQk9IG9wcy0+Zmlyc3QgKyBpOworCQlza3QtPmlycQk9IE5PX0lSUTsKKworCQlza3QtPnJlc19za3Quc3RhcnQJPSBfUENNQ0lBKHNrdC0+bnIpOworCQlza3QtPnJlc19za3QuZW5kCT0gX1BDTUNJQShza3QtPm5yKSArIFBDTUNJQVNwIC0gMTsKKwkJc2t0LT5yZXNfc2t0Lm5hbWUJPSBza3RfbmFtZXNbc2t0LT5ucl07CisJCXNrdC0+cmVzX3NrdC5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCisJCXNrdC0+cmVzX2lvLnN0YXJ0CT0gX1BDTUNJQUlPKHNrdC0+bnIpOworCQlza3QtPnJlc19pby5lbmQJCT0gX1BDTUNJQUlPKHNrdC0+bnIpICsgUENNQ0lBSU9TcCAtIDE7CisJCXNrdC0+cmVzX2lvLm5hbWUJPSAiaW8iOworCQlza3QtPnJlc19pby5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOworCisJCXNrdC0+cmVzX21lbS5zdGFydAk9IF9QQ01DSUFNZW0oc2t0LT5ucik7CisJCXNrdC0+cmVzX21lbS5lbmQJPSBfUENNQ0lBTWVtKHNrdC0+bnIpICsgUENNQ0lBTWVtU3AgLSAxOworCQlza3QtPnJlc19tZW0ubmFtZQk9ICJtZW1vcnkiOworCQlza3QtPnJlc19tZW0uZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKKworCQlza3QtPnJlc19hdHRyLnN0YXJ0CT0gX1BDTUNJQUF0dHIoc2t0LT5ucik7CisJCXNrdC0+cmVzX2F0dHIuZW5kCT0gX1BDTUNJQUF0dHIoc2t0LT5ucikgKyBQQ01DSUFBdHRyU3AgLSAxOworCQlza3QtPnJlc19hdHRyLm5hbWUJPSAiYXR0cmlidXRlIjsKKwkJc2t0LT5yZXNfYXR0ci5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCX0KKwogCS8qIFByb3ZpZGUgb3VyIFBYQTJ4eCBzcGVjaWZpYyB0aW1pbmcgcm91dGluZXMuICovCiAJb3BzLT5zZXRfdGltaW5nICA9IHB4YTJ4eF9wY21jaWFfc2V0X3RpbWluZzsKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIAlvcHMtPmZyZXF1ZW5jeV9jaGFuZ2UgPSBweGEyeHhfcGNtY2lhX2ZyZXF1ZW5jeV9jaGFuZ2U7CiAjZW5kaWYKIAotCXJldCA9IHNvY19jb21tb25fZHJ2X3BjbWNpYV9wcm9iZShkZXYsIG9wcywgb3BzLT5maXJzdCwgb3BzLT5ucik7CisJcmV0ID0gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKGRldiwgb3BzLCBzaW5mbyk7CiAKIAlpZiAoIXJldCkKIAkJcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNTUuYwppbmRleCA3YzhiY2I0Li40ZWQ2NGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI1NS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjU1LmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jbV94MjcwLmMKaW5kZXggNmMzYWFjMy4uYTdiOTQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NtX3gyNzAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY21feDI3MC5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9lNzQwLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfZTc0MC5jCmluZGV4IGY2NjNhMDEuLmQwOWMwZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9lNzQwLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2U3NDAuYwpAQCAtMTYsOCArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMKaW5kZXggMzdlYzU1ZC4uNmNiYjFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbHViYm9jay5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zYTExMTEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL2x1YmJvY2suaD4KIAogI2luY2x1ZGUgInNhMTExMV9nZW5lcmljLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbWFpbnN0b25lLmMgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbWFpbnN0b25lLmMKaW5kZXggODc3MDAxZC4uMTEzODU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X21haW5zdG9uZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9tYWluc3RvbmUuYwpAQCAtMjEsMTEgKzIxLDEwIEBACiAKICNpbmNsdWRlIDxwY21jaWEvc3MuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9tYWluc3RvbmUuaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtbGQuYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9wYWxtbGQuYwppbmRleCAxNzM2YzY3Li41YmE5YjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfcGFsbWxkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3BhbG1sZC5jCkBAIC05OCw4ICs5OCw4IEBACiBzdGF0aWMgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgcGFsbWxkX3BjbWNpYV9vcHMgPSB7CiAJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKIAotCS5maXJzdAkJCT0gMCwKLQkubnIJCQk9IDIsCisJLmZpcnN0CQkJPSAxLAorCS5ucgkJCT0gMSwKIAogCS5od19pbml0CQk9IHBhbG1sZF9wY21jaWFfaHdfaW5pdCwKIAkuaHdfc2h1dGRvd24JCT0gcGFsbWxkX3BjbWNpYV9od19zaHV0ZG93biwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF90cml6ZXBzNC5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKaW5kZXggMzZjN2EwYi4uZTBlNWNiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3RyaXplcHM0LmMKQEAgLTIyLDggKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvdHJpemVwczQuaD4KIAogI2luY2x1ZGUgInNvY19jb21tb24uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF92aXBlci5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMKaW5kZXggZGQxMDQ4MS4uMTc4NzEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X3ZpcGVyLmMKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KICNpbmNsdWRlIDxtYWNoL3ZpcGVyLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYyBiL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKaW5kZXggYzBlMmFmYy4uZTU5MmUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYworKysgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJdW5zaWduZWQgbG9uZyBhbGlnbiwgc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXMgPSBtYWtlX3Jlc291cmNlKDAsIG51bSwgSU9SRVNPVVJDRV9JTywKLQkJCQkJICAgICBzLT5kZXYuYnVzX2lkKTsKKwkJCQkJICAgICBkZXZfbmFtZSgmcy0+ZGV2KSk7CiAJc3RydWN0IHBjbWNpYV9hbGlnbl9kYXRhIGRhdGE7CiAJdW5zaWduZWQgbG9uZyBtaW4gPSBiYXNlOwogCWludCByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jIGIvZHJpdmVycy9wY21jaWEvc2ExMTAwX2dlbmVyaWMuYwppbmRleCBjNWIyYTQ0Li5kOGRhNWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTEwMF9nZW5lcmljLmMKQEAgLTY1LDcgKzY1LDcgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHNhMTF4MF9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKIApAQCAtNzMsNyArNzMsNyBAQAogCSAqIEluaXRpYWxpc2UgYW55ICJvbi1ib2FyZCIgUENNQ0lBIHNvY2tldHMuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2ExMXgwX3BjbWNpYV9od19pbml0KTsgaSsrKSB7Ci0JCXJldCA9IHNhMTF4MF9wY21jaWFfaHdfaW5pdFtpXShkZXYpOworCQlyZXQgPSBzYTExeDBfcGNtY2lhX2h3X2luaXRbaV0oJmRldi0+ZGV2KTsKIAkJaWYgKHJldCA9PSAwKQogCQkJYnJlYWs7CiAJfQpAQCAtODEsMTMgKzgxLDMxIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHNhMTF4MF9wY21jaWFfZHJpdmVyID0geworc3RhdGljIGludCBzYTExeDBfZHJ2X3BjbWNpYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJcmV0dXJuIHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQoJmRldi0+ZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgc2ExMXgwX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNhMTF4MF9wY21jaWFfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJzYTExeDAtcGNtY2lhIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IHNhMTF4MF9kcnZfcGNtY2lhX3Byb2JlLAotCS5yZW1vdmUJCT0gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3JlbW92ZSwKLQkubmFtZQkJPSAic2ExMXgwLXBjbWNpYSIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnN1c3BlbmQgCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lIAk9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKKwkucmVtb3ZlCQk9IHNhMTF4MF9kcnZfcGNtY2lhX3JlbW92ZSwKKwkuc3VzcGVuZCAJPSBzYTExeDBfZHJ2X3BjbWNpYV9zdXNwZW5kLAorCS5yZXN1bWUgCT0gc2ExMXgwX2Rydl9wY21jaWFfcmVzdW1lLAogfTsKIAogLyogc2ExMXgwX3BjbWNpYV9pbml0KCkKQEAgLTEwMCw3ICsxMTgsNyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBzYTExeDBfcGNtY2lhX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOwogfQogCiAvKiBzYTExeDBfcGNtY2lhX2V4aXQoKQpAQCAtMTEwLDcgKzEyOCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBzYTExeDBfcGNtY2lhX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXgwX3BjbWNpYV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExeDBfcGNtY2lhX2RyaXZlcik7CiB9CiAKIE1PRFVMRV9BVVRIT1IoIkpvaG4gRG9yc2V5IDxqb2huK0Bjcy5jbXUuZWR1PiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc2ExMTAwX2gzNjAwLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfaDM2MDAuYwppbmRleCA2ZGU0ZTFiLi4wY2MzNzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMDBfaDM2MDAuYworKysgYi9kcml2ZXJzL3BjbWNpYS9zYTExMDBfaDM2MDAuYwpAQCAtMzcsOSArMzcsOSBAQAogCXNvY19wY21jaWFfZnJlZV9pcnFzKHNrdCwgaXJxcywgQVJSQVlfU0laRShpcnFzKSk7CiAgIAogCS8qIERpc2FibGUgQ0YgYnVzOiAqLwotCWNscl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTik7Ci0JY2xyX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OKTsKLQlzZXRfaDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQpOworCWFzc2lnbl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTiwgMCk7CisJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OLCAwKTsKKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQsIDEpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNzksMTAgKzc5LDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkKLQkJc2V0X2gzNjAwX2VncGlvKElQQVFfRUdQSU9fQ0FSRF9SRVNFVCk7Ci0JZWxzZQotCQljbHJfaDM2MDBfZWdwaW8oSVBBUV9FR1BJT19DQVJEX1JFU0VUKTsKKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19DQVJEX1JFU0VULCAhIShzdGF0ZS0+ZmxhZ3MgJiBTU19SRVNFVCkpOwogCiAJLyogU2lsZW50bHkgaWdub3JlIFZwcCwgb3V0cHV0IGVuYWJsZSwgc3BlYWtlciBlbmFibGUuICovCiAKQEAgLTkyLDkgKzg5LDkgQEAKIHN0YXRpYyB2b2lkIGgzNjAwX3BjbWNpYV9zb2NrZXRfaW5pdChzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdCkKIHsKIAkvKiBFbmFibGUgQ0YgYnVzOiAqLwotCXNldF9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTik7Ci0Jc2V0X2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OKTsKLQljbHJfaDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQpOworCWFzc2lnbl9oMzYwMF9lZ3BpbyhJUEFRX0VHUElPX09QVF9OVlJBTV9PTiwgMSk7CisJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OLCAxKTsKKwlhc3NpZ25faDM2MDBfZWdwaW8oSVBBUV9FR1BJT19PUFRfUkVTRVQsIDApOwogCiAJbXNsZWVwKDEwKTsKIApAQCAtMTEyLDEwICsxMDksMTAgQEAKIAkgKiBzb2NrZXQgMCB0aGVuIHNvY2tldCAxLgogCSAqLwogCWlmIChza3QtPm5yID09IDEpIHsKLQkJY2xyX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OKTsKLQkJY2xyX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX05WUkFNX09OKTsKKwkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX09OLCAwKTsKKwkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX05WUkFNX09OLCAwKTsKIAkJLyogaG1tLCBkb2VzIHRoaXMgc3VjayBwb3dlcj8gKi8KLQkJc2V0X2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX1JFU0VUKTsKKwkJYXNzaWduX2gzNjAwX2VncGlvKElQQVFfRUdQSU9fT1BUX1JFU0VULCAxKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCmluZGV4IDY5MjRkMGUuLjQwMTA1MmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMKQEAgLTExLDEyICsxMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8cGNtY2lhL3NzLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3NhMTExMS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogI2luY2x1ZGUgInNhMTExMV9nZW5lcmljLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9zYTExeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvc2ExMXh4X2Jhc2UuYwppbmRleCA3Y2IxMjczLi5lMTVkNTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zYTExeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3NhMTF4eF9iYXNlLmMKQEAgLTM2LDkgKzM2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtMTYzLDkgKzE2Myw1NSBAQAogCXJldHVybiBwIC0gYnVmOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqc2t0X25hbWVzW10gPSB7CisJIlBDTUNJQSBzb2NrZXQgMCIsCisJIlBDTUNJQSBzb2NrZXQgMSIsCit9OworCisjZGVmaW5lIFNLVF9ERVZfSU5GT19TSVpFKG4pIFwKKwkoc2l6ZW9mKHN0cnVjdCBza3RfZGV2X2luZm8pICsgKG4pKnNpemVvZihzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQpKQorCiBpbnQgc2ExMXh4X2Rydl9wY21jaWFfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGNtY2lhX2xvd19sZXZlbCAqb3BzLAogCQkJICAgIGludCBmaXJzdCwgaW50IG5yKQogeworCXN0cnVjdCBza3RfZGV2X2luZm8gKnNpbmZvOworCXN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCAqc2t0OworCWludCBpOworCisJc2luZm8gPSBremFsbG9jKFNLVF9ERVZfSU5GT19TSVpFKG5yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzaW5mby0+bnNrdCA9IG5yOworCisJLyogSW5pdGlsaWF6ZSBwcm9jZXNzb3Igc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCWZvciAoaSA9IDA7IGkgPCBucjsgaSsrKSB7CisJCXNrdCA9ICZzaW5mby0+c2t0W2ldOworCisJCXNrdC0+bnIJCT0gZmlyc3QgKyBpOworCQlza3QtPmlycQk9IE5PX0lSUTsKKworCQlza3QtPnJlc19za3Quc3RhcnQJPSBfUENNQ0lBKHNrdC0+bnIpOworCQlza3QtPnJlc19za3QuZW5kCT0gX1BDTUNJQShza3QtPm5yKSArIFBDTUNJQVNwIC0gMTsKKwkJc2t0LT5yZXNfc2t0Lm5hbWUJPSBza3RfbmFtZXNbc2t0LT5ucl07CisJCXNrdC0+cmVzX3NrdC5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCisJCXNrdC0+cmVzX2lvLnN0YXJ0CT0gX1BDTUNJQUlPKHNrdC0+bnIpOworCQlza3QtPnJlc19pby5lbmQJCT0gX1BDTUNJQUlPKHNrdC0+bnIpICsgUENNQ0lBSU9TcCAtIDE7CisJCXNrdC0+cmVzX2lvLm5hbWUJPSAiaW8iOworCQlza3QtPnJlc19pby5mbGFncwk9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9CVVNZOworCisJCXNrdC0+cmVzX21lbS5zdGFydAk9IF9QQ01DSUFNZW0oc2t0LT5ucik7CisJCXNrdC0+cmVzX21lbS5lbmQJPSBfUENNQ0lBTWVtKHNrdC0+bnIpICsgUENNQ0lBTWVtU3AgLSAxOworCQlza3QtPnJlc19tZW0ubmFtZQk9ICJtZW1vcnkiOworCQlza3QtPnJlc19tZW0uZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKKworCQlza3QtPnJlc19hdHRyLnN0YXJ0CT0gX1BDTUNJQUF0dHIoc2t0LT5ucik7CisJCXNrdC0+cmVzX2F0dHIuZW5kCT0gX1BDTUNJQUF0dHIoc2t0LT5ucikgKyBQQ01DSUFBdHRyU3AgLSAxOworCQlza3QtPnJlc19hdHRyLm5hbWUJPSAiYXR0cmlidXRlIjsKKwkJc2t0LT5yZXNfYXR0ci5mbGFncwk9IElPUkVTT1VSQ0VfTUVNOworCX0KKwogCS8qCiAJICogc2V0IGRlZmF1bHQgTUVDUiBjYWxjdWxhdGlvbiBpZiB0aGUgYm9hcmQgc3BlY2lmaWMKIAkgKiBjb2RlIGRpZCBub3Qgc3BlY2lmeSBvbmUuLi4KQEAgLTE4MCw3ICsyMjYsNyBAQAogCW9wcy0+ZnJlcXVlbmN5X2NoYW5nZSA9IHNhMTEwMF9wY21jaWFfZnJlcXVlbmN5X2NoYW5nZTsKICNlbmRpZgogCi0JcmV0dXJuIHNvY19jb21tb25fZHJ2X3BjbWNpYV9wcm9iZShkZXYsIG9wcywgZmlyc3QsIG5yKTsKKwlyZXR1cm4gc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKGRldiwgb3BzLCBzaW5mbyk7CiB9CiBFWFBPUlRfU1lNQk9MKHNhMTF4eF9kcnZfcGNtY2lhX3Byb2JlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5jCmluZGV4IGY0OWFjNjYuLjE2M2NmOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uYworKysgYi9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmMKQEAgLTQ5LDExICs0OSw2IEBACiAKICNpbmNsdWRlICJzb2NfY29tbW9uLmgiCiAKLS8qIEZJWE1FOiBwbGF0Zm9ybSBkZXBlbmRlbnQgcmVzb3VyY2UgZGVjbGFyYXRpb24gaGFzIHRvIG1vdmUgb3V0IG9mIHRoaXMgZmlsZSAqLwotI2lmZGVmIENPTkZJR19BUkNIX1BYQQotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1BDTUNJQV9ERUJVRwogCiBzdGF0aWMgaW50IHBjX2RlYnVnOwpAQCAtNTgxLDE5ICs1NzYsNiBAQAogTElTVF9IRUFEKHNvY19wY21jaWFfc29ja2V0cyk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHNvY19wY21jaWFfc29ja2V0c19sb2NrKTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKnNrdF9uYW1lc1tdID0gewotCSJQQ01DSUEgc29ja2V0IDAiLAotCSJQQ01DSUEgc29ja2V0IDEiLAotfTsKLQotc3RydWN0IHNrdF9kZXZfaW5mbyB7Ci0JaW50IG5za3Q7Ci0Jc3RydWN0IHNvY19wY21jaWFfc29ja2V0IHNrdFswXTsKLX07Ci0KLSNkZWZpbmUgU0tUX0RFVl9JTkZPX1NJWkUobikgXAotCShzaXplb2Yoc3RydWN0IHNrdF9kZXZfaW5mbykgKyAobikqc2l6ZW9mKHN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCkpCi0KICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIHN0YXRpYyBpbnQKIHNvY19wY21jaWFfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCkBAIC02MzcsMjYgKzYxOSwxOCBAQAogc3RhdGljIHZvaWQgc29jX3BjbWNpYV9jcHVmcmVxX3VucmVnaXN0ZXIodm9pZCkge30KICNlbmRpZgogCi1pbnQgc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcywgaW50IGZpcnN0LCBpbnQgbnIpCitpbnQgc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcywKKwkJCQlzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbykKIHsKLQlzdHJ1Y3Qgc2t0X2Rldl9pbmZvICpzaW5mbzsKIAlzdHJ1Y3Qgc29jX3BjbWNpYV9zb2NrZXQgKnNrdDsKIAlpbnQgcmV0LCBpOwogCiAJbXV0ZXhfbG9jaygmc29jX3BjbWNpYV9zb2NrZXRzX2xvY2spOwogCi0Jc2luZm8gPSBremFsbG9jKFNLVF9ERVZfSU5GT19TSVpFKG5yKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzaW5mbykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzaW5mby0+bnNrdCA9IG5yOwotCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBwZXItc29ja2V0IHN0cnVjdHVyZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBzaW5mby0+bnNrdDsgaSsrKSB7CiAJCXNrdCA9ICZzaW5mby0+c2t0W2ldOwogCiAJCXNrdC0+c29ja2V0Lm9wcyA9ICZzb2NfY29tbW9uX3BjbWNpYV9vcGVyYXRpb25zOwpAQCAtNjY4LDQzICs2NDIsMjEgQEAKIAkJc2t0LT5wb2xsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylza3Q7CiAJCXNrdC0+cG9sbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIFNPQ19QQ01DSUFfUE9MTF9QRVJJT0Q7CiAKLQkJc2t0LT5ucgkJPSBmaXJzdCArIGk7Ci0JCXNrdC0+aXJxCT0gTk9fSVJROwogCQlza3QtPmRldgk9IGRldjsKIAkJc2t0LT5vcHMJPSBvcHM7CiAKLQkJc2t0LT5yZXNfc2t0LnN0YXJ0CT0gX1BDTUNJQShza3QtPm5yKTsKLQkJc2t0LT5yZXNfc2t0LmVuZAk9IF9QQ01DSUEoc2t0LT5ucikgKyBQQ01DSUFTcCAtIDE7Ci0JCXNrdC0+cmVzX3NrdC5uYW1lCT0gc2t0X25hbWVzW3NrdC0+bnJdOwotCQlza3QtPnJlc19za3QuZmxhZ3MJPSBJT1JFU09VUkNFX01FTTsKLQogCQlyZXQgPSByZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnNrdC0+cmVzX3NrdCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dF9lcnJfMTsKIAotCQlza3QtPnJlc19pby5zdGFydAk9IF9QQ01DSUFJTyhza3QtPm5yKTsKLQkJc2t0LT5yZXNfaW8uZW5kCQk9IF9QQ01DSUFJTyhza3QtPm5yKSArIFBDTUNJQUlPU3AgLSAxOwotCQlza3QtPnJlc19pby5uYW1lCT0gImlvIjsKLQkJc2t0LT5yZXNfaW8uZmxhZ3MJPSBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWTsKLQogCQlyZXQgPSByZXF1ZXN0X3Jlc291cmNlKCZza3QtPnJlc19za3QsICZza3QtPnJlc19pbyk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dF9lcnJfMjsKIAotCQlza3QtPnJlc19tZW0uc3RhcnQJPSBfUENNQ0lBTWVtKHNrdC0+bnIpOwotCQlza3QtPnJlc19tZW0uZW5kCT0gX1BDTUNJQU1lbShza3QtPm5yKSArIFBDTUNJQU1lbVNwIC0gMTsKLQkJc2t0LT5yZXNfbWVtLm5hbWUJPSAibWVtb3J5IjsKLQkJc2t0LT5yZXNfbWVtLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07Ci0KIAkJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZSgmc2t0LT5yZXNfc2t0LCAmc2t0LT5yZXNfbWVtKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0X2Vycl8zOwogCi0JCXNrdC0+cmVzX2F0dHIuc3RhcnQJPSBfUENNQ0lBQXR0cihza3QtPm5yKTsKLQkJc2t0LT5yZXNfYXR0ci5lbmQJPSBfUENNQ0lBQXR0cihza3QtPm5yKSArIFBDTUNJQUF0dHJTcCAtIDE7Ci0JCXNrdC0+cmVzX2F0dHIubmFtZQk9ICJhdHRyaWJ1dGUiOwotCQlza3QtPnJlc19hdHRyLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU07Ci0KIAkJcmV0ID0gcmVxdWVzdF9yZXNvdXJjZSgmc2t0LT5yZXNfc2t0LCAmc2t0LT5yZXNfYXR0cik7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dF9lcnJfNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaCBiL2RyaXZlcnMvcGNtY2lhL3NvY19jb21tb24uaAppbmRleCAzOGM2NzM3Li4yOTBlMTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9zb2NfY29tbW9uLmgKKysrIGIvZHJpdmVycy9wY21jaWEvc29jX2NvbW1vbi5oCkBAIC01OCw2ICs1OCwxMSBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIH07CiAKK3N0cnVjdCBza3RfZGV2X2luZm8geworCWludCBuc2t0OworCXN0cnVjdCBzb2NfcGNtY2lhX3NvY2tldCBza3RbMF07Cit9OworCiBzdHJ1Y3QgcGNtY2lhX3N0YXRlIHsKICAgdW5zaWduZWQgZGV0ZWN0OiAxLAogICAgICAgICAgICAgcmVhZHk6IDEsCkBAIC0xMzIsNyArMTM3LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgc29jX3BjbWNpYV9zb2NrZXRzOwogCi1leHRlcm4gaW50IHNvY19jb21tb25fZHJ2X3BjbWNpYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwY21jaWFfbG93X2xldmVsICpvcHMsIGludCBmaXJzdCwgaW50IG5yKTsKK2V4dGVybiBpbnQgc29jX2NvbW1vbl9kcnZfcGNtY2lhX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcywgc3RydWN0IHNrdF9kZXZfaW5mbyAqc2luZm8pOwogZXh0ZXJuIGludCBzb2NfY29tbW9uX2Rydl9wY21jaWFfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvdGNpYy5jIGIvZHJpdmVycy9wY21jaWEvdGNpYy5jCmluZGV4IDJhNjEzZTkuLjlhZDk3ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3RjaWMuYworKysgYi9kcml2ZXJzL3BjbWNpYS90Y2ljLmMKQEAgLTM2MywxMyArMzYzLDI1IEBACiAgICAgcmV0dXJuIGlkOwogfQogCitzdGF0aWMgaW50IHRjaWNfZHJ2X3BjbWNpYV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB0Y2ljX2Rydl9wY21jaWFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHRjaWNfZHJpdmVyID0gewotCS5uYW1lID0gInRjaWMtcGNtY2lhIiwKLQkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5zdXNwZW5kID0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKLQkucmVzdW1lID0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGNpY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidGNpYy1wY21jaWEiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkuc3VzcGVuZCAJPSB0Y2ljX2Rydl9wY21jaWFfc3VzcGVuZCwKKwkucmVzdW1lIAk9IHRjaWNfZHJ2X3BjbWNpYV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB0Y2ljX2RldmljZSA9IHsKQEAgLTM4Myw3ICszOTUsNyBAQAogICAgIGludCBpLCBzb2NrLCByZXQgPSAwOwogICAgIHVfaW50IG1hc2ssIHNjYW47CiAKLSAgICBpZiAoZHJpdmVyX3JlZ2lzdGVyKCZ0Y2ljX2RyaXZlcikpCisgICAgaWYgKHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGNpY19kcml2ZXIpKQogCXJldHVybiAtMTsKICAgICAKICAgICBwcmludGsoS0VSTl9JTkZPICJEYXRhYm9vayBUQ0lDLTIgUENNQ0lBIHByb2JlOiAiKTsKQEAgLTM5MSw3ICs0MDMsNyBAQAogCiAgICAgaWYgKCFyZXF1ZXN0X3JlZ2lvbih0Y2ljX2Jhc2UsIDE2LCAidGNpYy0yIikpIHsKIAlwcmludGsoImNvdWxkIG5vdCBhbGxvY2F0ZSBwb3J0cyxcbiAiKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CiAJcmV0dXJuIC1FTk9ERVY7CiAgICAgfQogICAgIGVsc2UgewpAQCAtNDE0LDcgKzQyNiw3IEBACiAgICAgaWYgKHNvY2sgPT0gMCkgewogCXByaW50aygibm90IGZvdW5kLlxuIik7CiAJcmVsZWFzZV9yZWdpb24odGNpY19iYXNlLCAxNik7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJnRjaWNfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOwogCXJldHVybiAtRU5PREVWOwogICAgIH0KIApAQCAtNTQyLDcgKzU1NCw3IEBACiAgICAgfQogCiAgICAgcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnRjaWNfZGV2aWNlKTsKLSAgICBkcml2ZXJfdW5yZWdpc3RlcigmdGNpY19kcml2ZXIpOworICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0Y2ljX2RyaXZlcik7CiB9IC8qIGV4aXRfdGNpYyAqLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3ZyYzQxNzFfY2FyZC5jIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKaW5kZXggYjJjNDEyNC4uNjU5NDIxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKKysrIGIvZHJpdmVycy9wY21jaWEvdnJjNDE3MV9jYXJkLmMKQEAgLTcwNCwyNCArNzA0LDM3IEBACiAKIF9fc2V0dXAoInZyYzQxNzFfY2FyZD0iLCB2cmM0MTcxX2NhcmRfc2V0dXApOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgdnJjNDE3MV9jYXJkX2RyaXZlciA9IHsKLQkubmFtZQkJPSB2cmM0MTcxX2NhcmRfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkuc3VzcGVuZAk9IHBjbWNpYV9zb2NrZXRfZGV2X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBwY21jaWFfc29ja2V0X2Rldl9yZXN1bWUsCitzdGF0aWMgaW50IHZyYzQxNzFfY2FyZF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCgmZGV2LT5kZXYsIHN0YXRlKTsKK30KKworc3RhdGljIGludCB2cmM0MTcxX2NhcmRfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lKCZkZXYtPmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZyYzQxNzFfY2FyZF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gdnJjNDE3MV9jYXJkX25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAorCS5zdXNwZW5kCT0gdnJjNDE3MV9jYXJkX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB2cmM0MTcxX2NhcmRfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgdnJjNDE3MV9jYXJkX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwogCi0JcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwlyZXR2YWwgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwogCiAJcmV0dmFsID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZGV2aWNlKTsKIAlpZiAocmV0dmFsIDwgMCkgewotCQlkcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKQEAgLTczNSwxMSArNzQ4LDEyIEBACiAJaWYgKHJldHZhbCA8IDApIHsKIAkJdnJjNDE3MV9yZW1vdmVfc29ja2V0cygpOwogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RldmljZSk7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwkJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kcml2ZXIpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIiVzLCBjb25uZWN0ZWQgdG8gSVJRICVkXG4iLCB2cmM0MTcxX2NhcmRfZHJpdmVyLm5hbWUsIHZyYzQxNzFfaXJxKTsKKwlwcmludGsoS0VSTl9JTkZPICIlcywgY29ubmVjdGVkIHRvIElSUSAlZFxuIiwKKwkJdnJjNDE3MV9jYXJkX2RyaXZlci5kcml2ZXIubmFtZSwgdnJjNDE3MV9pcnEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NDksNyArNzYzLDcgQEAKIAlmcmVlX2lycSh2cmM0MTcxX2lycSwgdnJjNDE3MV9zb2NrZXRzKTsKIAl2cmM0MTcxX3JlbW92ZV9zb2NrZXRzKCk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJnZyYzQxNzFfY2FyZF9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZ2cmM0MTcxX2NhcmRfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnJjNDE3MV9jYXJkX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHZyYzQxNzFfY2FyZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCmluZGV4IDUzNzk1OWQuLmJjODk5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwpAQCAtMTkxNywxMiArMTkxNyw3IEBACiAKIHN0YXRpYyBpbnQgc29ueXBpX21pc2NfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbHAsIGludCBvbikKIHsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlscCwgb24sICZzb255cGlfY29tcGF0LmZpZm9fYXN5bmMpOwotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJnNvbnlwaV9jb21wYXQuZmlmb19hc3luYyk7CiB9CiAKIHN0YXRpYyBpbnQgc29ueXBpX21pc2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFwaWRpby9yaW8tZHJpdmVyLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLWRyaXZlci5jCmluZGV4IGFkZGI4N2MuLjMyMjJmYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9yaW8tZHJpdmVyLmMKKysrIGIvZHJpdmVycy9yYXBpZGlvL3Jpby1kcml2ZXIuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIHJpb19idXMgPSB7Ci0JLmJ1c19pZCA9ICJyYXBpZGlvIiwKKwkuaW5pdF9uYW1lID0gInJhcGlkaW8iLAogfTsKIAogc3RydWN0IGJ1c190eXBlIHJpb19idXNfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKaW5kZXggZDVlNGU2My4uODZjNjFmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKQEAgLTM1MSw3ICszNTEsNyBAQAogCS8qIHJlZ2lzdGVyIGlycSBoYW5kbGVyIGFmdGVyIHdlIGtub3cgd2hhdCBuYW1lIHdlJ2xsIHVzZSAqLwogCXJldCA9IHJlcXVlc3RfaXJxKEFUOTFfSURfU1lTLCBhdDkxX3J0Y19pbnRlcnJ1cHQsCiAJCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVELAotCQkJCXJ0Yy0+cnRjZGV2LT5kZXYuYnVzX2lkLCBydGMpOworCQkJCWRldl9uYW1lKCZydGMtPnJ0Y2Rldi0+ZGV2KSwgcnRjKTsKIAlpZiAocmV0KSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbid0IHNoYXJlIElSUSAlZD9cbiIsIEFUOTFfSURfU1lTKTsKIAkJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yy0+cnRjZGV2KTsKQEAgLTM2Niw3ICszNjYsNyBAQAogCiAJaWYgKGdwYnJfcmVhZGwocnRjKSA9PSAwKQogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiJXM6IFNFVCBUSU1FIVxuIiwKLQkJCQlydGMtPnJ0Y2Rldi0+ZGV2LmJ1c19pZCk7CisJCQkJZGV2X25hbWUoJnJ0Yy0+cnRjZGV2LT5kZXYpKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCmluZGV4IDQ1ZjEyZGMuLmUwMjYzZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tdi5jCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvYmNkLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAKICNkZWZpbmUgUlRDX1RJTUVfUkVHX09GRlMJMApAQCAtMTE5LDYgKzEyMCwxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBtYWtlIHN1cmUgaXQgaXMgYWN0dWFsbHkgZnVuY3Rpb25hbCAqLworCWlmIChydGNfdGltZSA9PSAweDAxMDAwMDAwKSB7CisJCXNzbGVlcCgxKTsKKwkJcnRjX3RpbWUgPSByZWFkbChwZGF0YS0+aW9hZGRyICsgUlRDX1RJTUVfUkVHX09GRlMpOworCQlpZiAocnRjX3RpbWUgPT0gMHgwMTAwMDAwMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW50ZXJuYWwgUlRDIG5vdCB0aWNraW5nXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGRhdGEpOwogCXBkYXRhLT5ydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsCiAJCQkJCSAmbXZfcnRjX29wcywgVEhJU19NT0RVTEUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKaW5kZXggMmNiZWIwNy4uYmQxY2U4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCkBAIC0zNzcsMTMgKzM3NywxMyBAQAogCiAJLyogaGFuZGxlIHBlcmlvZGljIGFuZCBhbGFybSBpcnFzICovCiAJaWYgKHJlcXVlc3RfaXJxKG9tYXBfcnRjX3RpbWVyLCBydGNfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJcnRjLT5kZXYuYnVzX2lkLCBydGMpKSB7CisJCQlkZXZfbmFtZSgmcnRjLT5kZXYpLCBydGMpKSB7CiAJCXByX2RlYnVnKCIlczogUlRDIHRpbWVyIGludGVycnVwdCBJUlElZCBhbHJlYWR5IGNsYWltZWRcbiIsCiAJCQlwZGV2LT5uYW1lLCBvbWFwX3J0Y190aW1lcik7CiAJCWdvdG8gZmFpbDA7CiAJfQogCWlmIChyZXF1ZXN0X2lycShvbWFwX3J0Y19hbGFybSwgcnRjX2lycSwgSVJRRl9ESVNBQkxFRCwKLQkJCXJ0Yy0+ZGV2LmJ1c19pZCwgcnRjKSkgeworCQkJZGV2X25hbWUoJnJ0Yy0+ZGV2KSwgcnRjKSkgewogCQlwcl9kZWJ1ZygiJXM6IFJUQyBhbGFybSBpbnRlcnJ1cHQgSVJRJWQgYWxyZWFkeSBjbGFpbWVkXG4iLAogCQkJcGRldi0+bmFtZSwgb21hcF9ydGNfYWxhcm0pOwogCQlnb3RvIGZhaWwxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCmluZGV4IGQyNmE1ZjguLjRmMjQ3ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKQEAgLTM1LDcgKzM1LDggQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNpZmRlZiBDT05GSUdfQVJDSF9QWEEKLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXJ0Yy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1vc3QuaD4KICNlbmRpZgogCiAjZGVmaW5lIFJUQ19ERUZfRElWSURFUgkJMzI3NjggLSAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc2guYyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCmluZGV4IDFjM2ZjNmIuLjQ4OThmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zaC5jCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8YXNtL3J0Yy5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJzaC1ydGMiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjIuMCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMi4xIgogCiAjZGVmaW5lIFJUQ19SRUcocikJKChyKSAqIHJ0Y19yZWdfc2l6ZSkKIApAQCAtOTksNTYgKzk5LDUxIEBACiAJdW5zaWduZWQgc2hvcnQgcGVyaW9kaWNfZnJlcTsKIH07CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgX19zaF9ydGNfaW50ZXJydXB0KHN0cnVjdCBzaF9ydGMgKnJ0YykKIHsKLQlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7Ci0JdW5zaWduZWQgaW50IHRtcDsKLQotCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwl1bnNpZ25lZCBpbnQgdG1wLCBwZW5kaW5nOwogCiAJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CisJcGVuZGluZyA9IHRtcCAmIFJDUjFfQ0Y7CiAJdG1wICY9IH5SQ1IxX0NGOwogCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOwogCiAJLyogVXNlcnMgaGF2ZSByZXF1ZXN0ZWQgT25lIHggU2Vjb25kIElSUSAqLwotCWlmIChydGMtPnBlcmlvZGljX2ZyZXEgJiBQRl9PWFMpCisJaWYgKHBlbmRpbmcgJiYgcnRjLT5wZXJpb2RpY19mcmVxICYgUEZfT1hTKQogCQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19VRiB8IFJUQ19JUlFGKTsKIAotCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBwZW5kaW5nOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2FsYXJtKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgX19zaF9ydGNfYWxhcm0oc3RydWN0IHNoX3J0YyAqcnRjKQogewotCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0Jc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXVuc2lnbmVkIGludCB0bXAsIHBlbmRpbmc7CiAKIAl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKwlwZW5kaW5nID0gdG1wICYgUkNSMV9BRjsKIAl0bXAgJj0gfihSQ1IxX0FGIHwgUkNSMV9BSUUpOwotCQl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKwl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKIAotCXJ0Y191cGRhdGVfaXJxKHJ0Yy0+cnRjX2RldiwgMSwgUlRDX0FGIHwgUlRDX0lSUUYpOworCWlmIChwZW5kaW5nKQorCQlydGNfdXBkYXRlX2lycShydGMtPnJ0Y19kZXYsIDEsIFJUQ19BRiB8IFJUQ19JUlFGKTsKIAotCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBwZW5kaW5nOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX3BlcmlvZGljKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgX19zaF9ydGNfcGVyaW9kaWMoc3RydWN0IHNoX3J0YyAqcnRjKQogewotCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9pZDsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjX2RldiA9IHJ0Yy0+cnRjX2RldjsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0Jc3Bpbl9sb2NrKCZydGMtPmxvY2spOworCXN0cnVjdCBydGNfdGFzayAqaXJxX3Rhc2s7CisJdW5zaWduZWQgaW50IHRtcCwgcGVuZGluZzsKIAogCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjIpOworCXBlbmRpbmcgPSB0bXAgJiBSQ1IyX1BFRjsKIAl0bXAgJj0gflJDUjJfUEVGOwogCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjIpOwogCisJaWYgKCFwZW5kaW5nKQorCQlyZXR1cm4gMDsKKwogCS8qIEhhbGYgcGVyaW9kIGVuYWJsZWQgdGhhbiBvbmUgc2tpcHBlZCBhbmQgdGhlIG5leHQgbm90aWZpZWQgKi8KIAlpZiAoKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX0hQKSAmJiAocnRjLT5wZXJpb2RpY19mcmVxICYgUEZfQ09VTlQpKQogCQlydGMtPnBlcmlvZGljX2ZyZXEgJj0gflBGX0NPVU5UOwpAQCAtMTU3LDE2ICsxNTIsNjUgQEAKIAkJCXJ0Yy0+cGVyaW9kaWNfZnJlcSB8PSBQRl9DT1VOVDsKIAkJaWYgKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX0tPVSkgewogCQkJc3Bpbl9sb2NrKCZydGNfZGV2LT5pcnFfdGFza19sb2NrKTsKLQkJCWlmIChydGNfZGV2LT5pcnFfdGFzaykKLQkJCQlydGNfZGV2LT5pcnFfdGFzay0+ZnVuYyhydGNfZGV2LT5pcnFfdGFzay0+cHJpdmF0ZV9kYXRhKTsKKwkJCWlycV90YXNrID0gcnRjX2Rldi0+aXJxX3Rhc2s7CisJCQlpZiAoaXJxX3Rhc2spCisJCQkJaXJxX3Rhc2stPmZ1bmMoaXJxX3Rhc2stPnByaXZhdGVfZGF0YSk7CiAJCQlzcGluX3VubG9jaygmcnRjX2Rldi0+aXJxX3Rhc2tfbG9jayk7CiAJCX0gZWxzZQogCQkJcnRjX3VwZGF0ZV9pcnEocnRjLT5ydGNfZGV2LCAxLCBSVENfUEYgfCBSVENfSVJRRik7CiAJfQogCisJcmV0dXJuIHBlbmRpbmc7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlyZXQgPSBfX3NoX3J0Y19pbnRlcnJ1cHQocnRjKTsKIAlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKIAotCXJldHVybiBJUlFfSEFORExFRDsKKwlyZXR1cm4gSVJRX1JFVFZBTChyZXQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfcnRjX2FsYXJtKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlyZXQgPSBfX3NoX3J0Y19hbGFybShydGMpOworCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOworCisJcmV0dXJuIElSUV9SRVRWQUwocmV0KTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNoX3J0Y19wZXJpb2RpYyhpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2lkOworCWludCByZXQ7CisKKwlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisJcmV0ID0gX19zaF9ydGNfcGVyaW9kaWMocnRjKTsKKwlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKKworCXJldHVybiBJUlFfUkVUVkFMKHJldCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfc2hhcmVkKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBkZXZfaWQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKwlyZXQgPSBfX3NoX3J0Y19pbnRlcnJ1cHQocnRjKTsKKwlyZXQgfD0gX19zaF9ydGNfYWxhcm0ocnRjKTsKKwlyZXQgfD0gX19zaF9ydGNfcGVyaW9kaWMocnRjKTsKKwlzcGluX3VubG9jaygmcnRjLT5sb2NrKTsKKworCXJldHVybiBJUlFfUkVUVkFMKHJldCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF9ydGNfc2V0cGllKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZSkKQEAgLTI3NSw2ICszMTksMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNoX3J0Y19zZXRjaWUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCB0bXA7CisKKwlzcGluX2xvY2tfaXJxKCZydGMtPmxvY2spOworCisJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CisKKwlpZiAoIWVuYWJsZSkKKwkJdG1wICY9IH5SQ1IxX0NJRTsKKwllbHNlCisJCXRtcCB8PSBSQ1IxX0NJRTsKKworCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCisJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmxvY2spOworfQorCiBzdGF0aWMgaW50IHNoX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMjkxLDkgKzM1NCwxMSBAQAogCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT0ZGOgogCQlydGMtPnBlcmlvZGljX2ZyZXEgJj0gflBGX09YUzsKKwkJc2hfcnRjX3NldGNpZShkZXYsIDApOwogCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT046CiAJCXJ0Yy0+cGVyaW9kaWNfZnJlcSB8PSBQRl9PWFM7CisJCXNoX3J0Y19zZXRjaWUoZGV2LCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBSVENfSVJRUF9SRUFEOgogCQlyZXQgPSBwdXRfdXNlcihydGMtPnJ0Y19kZXYtPmlycV9mcmVxLApAQCAtMzU2LDE4ICs0MjEsMTcgQEAKIAkJdG0tPnRtX3NlYy0tOwogI2VuZGlmCiAKKwkvKiBvbmx5IGtlZXAgdGhlIGNhcnJ5IGludGVycnVwdCBlbmFibGVkIGlmIFVJRSBpcyBvbiAqLworCWlmICghKHJ0Yy0+cGVyaW9kaWNfZnJlcSAmIFBGX09YUykpCisJCXNoX3J0Y19zZXRjaWUoZGV2LCAwKTsKKwogCWRldl9kYmcoZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCiAJCSJtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCiAJCV9fZnVuY19fLAogCQl0bS0+dG1fc2VjLCB0bS0+dG1fbWluLCB0bS0+dG1faG91ciwKIAkJdG0tPnRtX21kYXksIHRtLT50bV9tb24gKyAxLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOwogCi0JaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiaW52YWxpZCBkYXRlXG4iKTsKLQkJcnRjX3RpbWVfdG9fdG0oMCwgdG0pOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBydGNfdmFsaWRfdG0odG0pOwogfQogCiBzdGF0aWMgaW50IHNoX3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCkBAIC01NzIsNyArNjM2LDcgQEAKIHsKIAlzdHJ1Y3Qgc2hfcnRjICpydGM7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JdW5zaWduZWQgaW50IHRtcDsKKwlzdHJ1Y3QgcnRjX3RpbWUgcjsKIAlpbnQgcmV0OwogCiAJcnRjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNoX3J0YyksIEdGUF9LRVJORUwpOwpAQCAtNTg1LDI2ICs2NDksMTIgQEAKIAlyZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmICh1bmxpa2VseShyZXQgPD0gMCkpIHsKIAkJcmV0ID0gLUVOT0VOVDsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBwZXJpb2RcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgcmVzb3VyY2VcbiIpOwogCQlnb3RvIGVycl9iYWRyZXM7CiAJfQogCXJ0Yy0+cGVyaW9kaWNfaXJxID0gcmV0OwotCi0JcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKLQlpZiAodW5saWtlbHkocmV0IDw9IDApKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgY2FycnlcbiIpOwotCQlnb3RvIGVycl9iYWRyZXM7Ci0JfQotCXJ0Yy0+Y2FycnlfaXJxID0gcmV0OwotCi0JcmV0ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAyKTsKLQlpZiAodW5saWtlbHkocmV0IDw9IDApKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgYWxhcm1cbiIpOwotCQlnb3RvIGVycl9iYWRyZXM7Ci0JfQotCXJ0Yy0+YWxhcm1faXJxID0gcmV0OworCXJ0Yy0+Y2FycnlfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwlydGMtPmFsYXJtX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMik7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CiAJaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkgewpAQCAtNjQ2LDQ3ICs2OTYsNjYgQEAKIAl9CiAKIAlydGMtPnJ0Y19kZXYtPm1heF91c2VyX2ZyZXEgPSAyNTY7Ci0JcnRjLT5ydGNfZGV2LT5pcnFfZnJlcSA9IDE7Ci0JcnRjLT5wZXJpb2RpY19mcmVxID0gMHg2MDsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CiAKLQkvKiByZWdpc3RlciBwZXJpb2RpYy9jYXJyeS9hbGFybSBpcnFzICovCi0JcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHNoX3J0Y19wZXJpb2RpYywgSVJRRl9ESVNBQkxFRCwKLQkJCSAgInNoLXJ0YyBwZXJpb2QiLCBydGMpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJyZXF1ZXN0IHBlcmlvZCBJUlEgZmFpbGVkIHdpdGggJWQsIElSUSAlZFxuIiwgcmV0LAotCQkJcnRjLT5wZXJpb2RpY19pcnEpOwotCQlnb3RvIGVycl91bm1hcDsKKwlpZiAocnRjLT5jYXJyeV9pcnEgPD0gMCkgeworCQkvKiByZWdpc3RlciBzaGFyZWQgcGVyaW9kaWMvY2FycnkvYWxhcm0gaXJxICovCisJCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBzaF9ydGNfc2hhcmVkLAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNoLXJ0YyIsIHJ0Yyk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInJlcXVlc3QgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsIHJldCwKKwkJCQlydGMtPnBlcmlvZGljX2lycSk7CisJCQlnb3RvIGVycl91bm1hcDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHJlZ2lzdGVyIHBlcmlvZGljL2NhcnJ5L2FsYXJtIGlycXMgKi8KKwkJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHNoX3J0Y19wZXJpb2RpYywKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzaC1ydGMgcGVyaW9kIiwgcnRjKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkicmVxdWVzdCBwZXJpb2QgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsCisJCQkJcmV0LCBydGMtPnBlcmlvZGljX2lycSk7CisJCQlnb3RvIGVycl91bm1hcDsKKwkJfQorCisJCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBzaF9ydGNfaW50ZXJydXB0LAorCQkJCSAgSVJRRl9ESVNBQkxFRCwgInNoLXJ0YyBjYXJyeSIsIHJ0Yyk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJInJlcXVlc3QgY2FycnkgSVJRIGZhaWxlZCB3aXRoICVkLCBJUlEgJWRcbiIsCisJCQkJcmV0LCBydGMtPmNhcnJ5X2lycSk7CisJCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKKwkJCWdvdG8gZXJyX3VubWFwOworCQl9CisKKwkJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5hbGFybV9pcnEsIHNoX3J0Y19hbGFybSwKKwkJCQkgIElSUUZfRElTQUJMRUQsICJzaC1ydGMgYWxhcm0iLCBydGMpOworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJyZXF1ZXN0IGFsYXJtIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLAorCQkJCXJldCwgcnRjLT5hbGFybV9pcnEpOworCQkJZnJlZV9pcnEocnRjLT5jYXJyeV9pcnEsIHJ0Yyk7CisJCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKKwkJCWdvdG8gZXJyX3VubWFwOworCQl9CiAJfQogCi0JcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5jYXJyeV9pcnEsIHNoX3J0Y19pbnRlcnJ1cHQsIElSUUZfRElTQUJMRUQsCi0JCQkgICJzaC1ydGMgY2FycnkiLCBydGMpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJyZXF1ZXN0IGNhcnJ5IElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLCByZXQsCi0JCQlydGMtPmNhcnJ5X2lycSk7Ci0JCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBydGMpOwotCQlnb3RvIGVycl91bm1hcDsKKwkvKiBldmVyeXRoaW5nIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KKwlydGMtPnBlcmlvZGljX2ZyZXEgPSAwOworCXJ0Yy0+cnRjX2Rldi0+aXJxX2ZyZXEgPSAwOworCXNoX3J0Y19zZXRwaWUoJnBkZXYtPmRldiwgMCk7CisJc2hfcnRjX3NldGFpZSgmcGRldi0+ZGV2LCAwKTsKKwlzaF9ydGNfc2V0Y2llKCZwZGV2LT5kZXYsIDApOworCisJLyogcmVzZXQgcnRjIHRvIGVwb2NoIDAgaWYgdGltZSBpcyBpbnZhbGlkICovCisJaWYgKHJ0Y19yZWFkX3RpbWUocnRjLT5ydGNfZGV2LCAmcikgPCAwKSB7CisJCXJ0Y190aW1lX3RvX3RtKDAsICZyKTsKKwkJcnRjX3NldF90aW1lKHJ0Yy0+cnRjX2RldiwgJnIpOwogCX0KIAotCXJldCA9IHJlcXVlc3RfaXJxKHJ0Yy0+YWxhcm1faXJxLCBzaF9ydGNfYWxhcm0sIElSUUZfRElTQUJMRUQsCi0JCQkgICJzaC1ydGMgYWxhcm0iLCBydGMpOwotCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJyZXF1ZXN0IGFsYXJtIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLCByZXQsCi0JCQlydGMtPmFsYXJtX2lycSk7Ci0JCWZyZWVfaXJxKHJ0Yy0+Y2FycnlfaXJxLCBydGMpOwotCQlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgcnRjKTsKLQkJZ290byBlcnJfdW5tYXA7Ci0JfQotCi0JdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7Ci0JdG1wICY9IH5SQ1IxX0NGOwotCXRtcCB8PSBSQ1IxX0NJRTsKLQl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKLQorCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKIAlyZXR1cm4gMDsKIAogZXJyX3VubWFwOgpAQCAtNzA4LDEwICs3NzcsMTMgQEAKIAogCXNoX3J0Y19zZXRwaWUoJnBkZXYtPmRldiwgMCk7CiAJc2hfcnRjX3NldGFpZSgmcGRldi0+ZGV2LCAwKTsKKwlzaF9ydGNfc2V0Y2llKCZwZGV2LT5kZXYsIDApOwogCi0JZnJlZV9pcnEocnRjLT5jYXJyeV9pcnEsIHJ0Yyk7CiAJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIHJ0Yyk7Ci0JZnJlZV9pcnEocnRjLT5hbGFybV9pcnEsIHJ0Yyk7CisJaWYgKHJ0Yy0+Y2FycnlfaXJxID4gMCkgeworCQlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgcnRjKTsKKwkJZnJlZV9pcnEocnRjLT5hbGFybV9pcnEsIHJ0Yyk7CisJfQogCiAJcmVsZWFzZV9yZXNvdXJjZShydGMtPnJlcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtdHdsNDAzMC5jCmluZGV4IGFkMzVmNzYuLmE2MzQxZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy10d2w0MDMwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXR3bDQwMzAuYwpAQCAtNDI2LDcgKzQyNiw3IEBACiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHR3bDQwMzBfcnRjX2ludGVycnVwdCwKIAkJCQlJUlFGX1RSSUdHRVJfUklTSU5HLAotCQkJCXJ0Yy0+ZGV2LmJ1c19pZCwgcnRjKTsKKwkJCQlkZXZfbmFtZSgmcnRjLT5kZXYpLCBydGMpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIklSUSBpcyBub3QgZnJlZS5cbiIpOwogCQlnb3RvIG91dDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvTWFrZWZpbGUKaW5kZXggZDBlYWU1OS4uOTViY2NmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9NYWtlZmlsZQpAQCAtMiw5ICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBTLzM5MCBzcGVjaWZpYyBkZXZpY2UgZHJpdmVycwogIwogCi1DRkxBR1Nfc3lzaW5mby5vICs9IC1JaW5jbHVkZS9tYXRoLWVtdSAtSWFyY2gvczM5MC9tYXRoLWVtdSAtdwotCi1vYmoteSArPSBzMzkwbWFjaC5vIHN5c2luZm8ubwogb2JqLXkgKz0gY2lvLyBibG9jay8gY2hhci8gY3J5cHRvLyBuZXQvIHNjc2kvIGt2bS8KIAogZHJpdmVycy15ICs9IGRyaXZlcnMvczM5MC9idWlsdC1pbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCAwOGMyM2E5Li4yZmQ2NGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTksNiArOSw5IEBACiAgKgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgImRhc2QiCisjZGVmaW5lIHByX2ZtdChmbXQpIEtNU0dfQ09NUE9ORU5UICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMjIsNiArMjUsNyBAQAogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KICNpbmNsdWRlIDxhc20vaWRhbHMuaD4KICNpbmNsdWRlIDxhc20vdG9kY2xrLmg+CisjaW5jbHVkZSA8YXNtL2l0Y3cuaD4KIAogLyogVGhpcyBpcyB1Z2x5Li4uICovCiAjZGVmaW5lIFBSSU5US19IRUFERVIgImRhc2Q6IgpAQCAtMjIxLDcgKzIyNSw3IEBACiAJCQlyZXR1cm4gcmM7CiAJfQogCS8qIHJlZ2lzdGVyICdkZXZpY2UnIGRlYnVnIGFyZWEsIHVzZWQgZm9yIGFsbCBEQkZfREVWX1hYWCBjYWxscyAqLwotCWRldmljZS0+ZGVidWdfYXJlYSA9IGRlYnVnX3JlZ2lzdGVyKGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIDEsIDEsCisJZGV2aWNlLT5kZWJ1Z19hcmVhID0gZGVidWdfcmVnaXN0ZXIoZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgNCwgMSwKIAkJCQkJICAgIDggKiBzaXplb2YobG9uZykpOwogCWRlYnVnX3JlZ2lzdGVyX3ZpZXcoZGV2aWNlLT5kZWJ1Z19hcmVhLCAmZGVidWdfc3ByaW50Zl92aWV3KTsKIAlkZWJ1Z19zZXRfbGV2ZWwoZGV2aWNlLT5kZWJ1Z19hcmVhLCBEQkZfV0FSTklORyk7CkBAIC03NjIsNyArNzY2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2aWNlID0gY3FyLT5zdGFydGRldjsKIAlpZiAoc3RybmNtcCgoY2hhciAqKSAmY3FyLT5tYWdpYywgZGV2aWNlLT5kaXNjaXBsaW5lLT5lYmNuYW1lLCA0KSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwKKwkJREJGX0RFVl9FVkVOVChEQkZfV0FSTklORywgZGV2aWNlLAogCQkJICAgICIgZGFzZF9jY3dfcmVxIDB4JTA4eCBtYWdpYyBkb2Vzbid0IG1hdGNoIgogCQkJICAgICIgZGlzY2lwbGluZSAweCUwOHgiLAogCQkJICAgIGNxci0+bWFnaWMsCkBAIC03ODIsNiArNzg2LDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAlpbnQgcmV0cmllcywgcmM7CisJY2hhciBlcnJvcnN0cmluZ1tFUlJPUkxFTkdUSF07CiAKIAkvKiBDaGVjayB0aGUgY3FyICovCiAJcmMgPSBkYXNkX2NoZWNrX2NxcihjcXIpOwpAQCAtODE1LDEwICs4MjAsMTAgQEAKIAkJCQkgICAgICAiZGV2aWNlIGJ1c3ksIHJldHJ5IGxhdGVyIik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJsaW5lICVkIHVua25vd24gUkM9JWQsIHBsZWFzZSAiCi0JCQkJICAgICJyZXBvcnQgdG8gbGludXgzOTBAZGUuaWJtLmNvbSIsCi0JCQkJICAgIF9fTElORV9fLCByYyk7CisJCQkvKiBpbnRlcm5hbCBlcnJvciAxMCAtIHVua25vd24gcmMqLworCQkJc25wcmludGYoZXJyb3JzdHJpbmcsIEVSUk9STEVOR1RILCAiMTAgJWQiLCByYyk7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSAiCisJCQkJIkRBU0QgZGV2aWNlIGRyaXZlciwgcmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCQlCVUcoKTsKIAkJCWJyZWFrOwogCQl9CkBAIC04MzYsNiArODQxLDcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKIAlpbnQgcmM7CisJY2hhciBlcnJvcnN0cmluZ1tFUlJPUkxFTkdUSF07CiAKIAkvKiBDaGVjayB0aGUgY3FyICovCiAJcmMgPSBkYXNkX2NoZWNrX2NxcihjcXIpOwpAQCAtODQzLDE3ICs4NDksMjMgQEAKIAkJcmV0dXJuIHJjOwogCWRldmljZSA9IChzdHJ1Y3QgZGFzZF9kZXZpY2UgKikgY3FyLT5zdGFydGRldjsKIAlpZiAoY3FyLT5yZXRyaWVzIDwgMCkgewotCQlERVZfTUVTU0FHRShLRVJOX0RFQlVHLCBkZXZpY2UsCi0JCQkgICAgInN0YXJ0X0lPOiByZXF1ZXN0ICVwICglMDJ4LyVpKSAtIG5vIHJldHJ5IGxlZnQuIiwKLQkJCSAgICBjcXIsIGNxci0+c3RhdHVzLCBjcXItPnJldHJpZXMpOworCQkvKiBpbnRlcm5hbCBlcnJvciAxNCAtIHN0YXJ0X0lPIHJ1biBvdXQgb2YgcmV0cmllcyAqLworCQlzcHJpbnRmKGVycm9yc3RyaW5nLCAiMTQgJXAiLCBjcXIpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEICIKKwkJCSJkZXZpY2UgZHJpdmVyLCByZWFzb249JXNcbiIsIGVycm9yc3RyaW5nKTsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9FUlJPUjsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWNxci0+c3RhcnRjbGsgPSBnZXRfY2xvY2soKTsKIAljcXItPnN0YXJ0dGltZSA9IGppZmZpZXM7CiAJY3FyLT5yZXRyaWVzLS07Ci0JcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGRldmljZS0+Y2RldiwgY3FyLT5jcGFkZHIsIChsb25nKSBjcXIsCi0JCQkgICAgICBjcXItPmxwbSwgMCk7CisJaWYgKGNxci0+Y3Btb2RlID09IDEpIHsKKwkJcmMgPSBjY3dfZGV2aWNlX3RtX3N0YXJ0KGRldmljZS0+Y2RldiwgY3FyLT5jcGFkZHIsCisJCQkJCSAobG9uZykgY3FyLCBjcXItPmxwbSk7CisJfSBlbHNlIHsKKwkJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGRldmljZS0+Y2RldiwgY3FyLT5jcGFkZHIsCisJCQkJICAgICAgKGxvbmcpIGNxciwgY3FyLT5scG0sIDApOworCX0KIAlzd2l0Y2ggKHJjKSB7CiAJY2FzZSAwOgogCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0lOX0lPOwpAQCAtODYyLDExICs4NzQsMTEgQEAKIAkJCSAgICAgIGNxcik7CiAJCWJyZWFrOwogCWNhc2UgLUVCVVNZOgotCQlEQkZfREVWX0VWRU5UKERCRl9FUlIsIGRldmljZSwgIiVzIiwKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgIiVzIiwKIAkJCSAgICAgICJzdGFydF9JTzogZGV2aWNlIGJ1c3ksIHJldHJ5IGxhdGVyIik7CiAJCWJyZWFrOwogCWNhc2UgLUVUSU1FRE9VVDoKLQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgICAic3RhcnRfSU86IHJlcXVlc3QgdGltZW91dCwgcmV0cnkgbGF0ZXIiKTsKIAkJYnJlYWs7CiAJY2FzZSAtRUFDQ0VTOgpAQCAtODc2LDE5ICs4ODgsMjQgQEAKIAkJICogRG8gYSByZXRyeSB3aXRoIGFsbCBhdmFpbGFibGUgcGF0aGVzLgogCQkgKi8KIAkJY3FyLT5scG0gPSBMUE1fQU5ZUEFUSDsKLQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCiAJCQkgICAgICAic3RhcnRfSU86IHNlbGVjdGVkIHBhdGhlcyBnb25lLCIKIAkJCSAgICAgICIgcmV0cnkgb24gYWxsIHBhdGhlcyIpOwogCQlicmVhazsKIAljYXNlIC1FTk9ERVY6CisJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsICIlcyIsCisJCQkgICAgICAic3RhcnRfSU86IC1FTk9ERVYgZGV2aWNlIGdvbmUsIHJldHJ5Iik7CisJCWJyZWFrOwogCWNhc2UgLUVJTzoKLQkJREJGX0RFVl9FVkVOVChEQkZfRVJSLCBkZXZpY2UsICIlcyIsCi0JCQkgICAgICAic3RhcnRfSU86IGRldmljZSBnb25lLCByZXRyeSIpOworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiJXMiLAorCQkJICAgICAgInN0YXJ0X0lPOiAtRUlPIGRldmljZSBnb25lLCByZXRyeSIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJICAgICJsaW5lICVkIHVua25vd24gUkM9JWQsIHBsZWFzZSByZXBvcnQiCi0JCQkgICAgIiB0byBsaW51eDM5MEBkZS5pYm0uY29tIiwgX19MSU5FX18sIHJjKTsKKwkJLyogaW50ZXJuYWwgZXJyb3IgMTEgLSB1bmtub3duIHJjICovCisJCXNucHJpbnRmKGVycm9yc3RyaW5nLCBFUlJPUkxFTkdUSCwgIjExICVkIiwgcmMpOworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCSJBbiBlcnJvciBvY2N1cnJlZCBpbiB0aGUgREFTRCBkZXZpY2UgZHJpdmVyLCAiCisJCQkicmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCUJVRygpOwogCQlicmVhazsKIAl9CkBAIC05NDUsNyArOTYyLDcgQEAKIAkJcmV0dXJuOwogCWNxciA9IChzdHJ1Y3QgZGFzZF9jY3dfcmVxICopIGludHBhcm07CiAJaWYgKGNxci0+c3RhdHVzICE9IERBU0RfQ1FSX0lOX0lPKSB7Ci0JCU1FU1NBR0UoS0VSTl9ERUJVRywKKwkJREJGX0VWRU5UKERCRl9ERUJVRywKIAkJCSJpbnZhbGlkIHN0YXR1cyBpbiBoYW5kbGVfa2lsbGVkX3JlcXVlc3Q6ICIKIAkJCSJidXNfaWQgJXMsIHN0YXR1cyAlMDJ4IiwKIAkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLCBjcXItPnN0YXR1cyk7CkBAIC05NTYsOCArOTczLDggQEAKIAlpZiAoZGV2aWNlID09IE5VTEwgfHwKIAkgICAgZGV2aWNlICE9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldl9sb2NrZWQoY2RldikgfHwKIAkgICAgc3RybmNtcChkZXZpY2UtPmRpc2NpcGxpbmUtPmViY25hbWUsIChjaGFyICopICZjcXItPm1hZ2ljLCA0KSkgewotCQlNRVNTQUdFKEtFUk5fREVCVUcsICJpbnZhbGlkIGRldmljZSBpbiByZXF1ZXN0OiBidXNfaWQgJXMiLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdDogIgorCQkJICAgICAgImJ1c19pZCAlcyIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtOTk2LDExICsxMDEzLDExIEBACiAJCWNhc2UgLUVJTzoKIAkJCWJyZWFrOwogCQljYXNlIC1FVElNRURPVVQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzKCVzKTogcmVxdWVzdCB0aW1lZCBvdXRcbiIsCisJCQlEQkZfRVZFTlQoREJGX1dBUk5JTkcsICIlcyglcyk6IHJlcXVlc3QgdGltZWQgb3V0XG4iLAogCQkJICAgICAgIF9fZnVuY19fLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXMoJXMpOiB1bmtub3duIGVycm9yICVsZFxuIiwKKwkJCURCRl9FVkVOVChEQkZfV0FSTklORywgIiVzKCVzKTogdW5rbm93biBlcnJvciAlbGRcbiIsCiAJCQkgICAgICAgX19mdW5jX18sIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBQVFJfRVJSKGlyYikpOwogCQl9CiAJCWRhc2RfaGFuZGxlX2tpbGxlZF9yZXF1ZXN0KGNkZXYsIGludHBhcm0pOwpAQCAtMTAwOSwxNSArMTAyNiwxMSBAQAogCiAJbm93ID0gZ2V0X2Nsb2NrKCk7CiAKLQlEQkZfRVZFTlQoREJGX0VSUiwgIkludGVycnVwdDogYnVzX2lkICVzIENTL0RTICUwNHggaXAgJTA4eCIsCi0JCSAgZGV2X25hbWUoJmNkZXYtPmRldiksICgoaXJiLT5zY3N3LmNtZC5jc3RhdCA8PCA4KSB8Ci0JCSAgaXJiLT5zY3N3LmNtZC5kc3RhdCksICh1bnNpZ25lZCBpbnQpIGludHBhcm0pOwotCiAJLyogY2hlY2sgZm9yIHVuc29saWNpdGVkIGludGVycnVwdHMgKi8KIAljcXIgPSAoc3RydWN0IGRhc2RfY2N3X3JlcSAqKSBpbnRwYXJtOwotCWlmICghY3FyIHx8ICgoaXJiLT5zY3N3LmNtZC5jYyA9PSAxKSAmJgotCQkgICAgIChpcmItPnNjc3cuY21kLmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykgJiYKLQkJICAgICAoaXJiLT5zY3N3LmNtZC5zdGN0bCAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkgeworCWlmICghY3FyIHx8ICgoc2Nzd19jYygmaXJiLT5zY3N3KSA9PSAxKSAmJgorCQkgICAgIChzY3N3X2ZjdGwoJmlyYi0+c2NzdykgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykgJiYKKwkJICAgICAoc2Nzd19zdGN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpKSkgewogCQlpZiAoY3FyICYmIGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0lOX0lPKQogCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CiAJCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldl9sb2NrZWQoY2Rldik7CkBAIC0xMDMzLDE0ICsxMDQ2LDE0IEBACiAJZGV2aWNlID0gKHN0cnVjdCBkYXNkX2RldmljZSAqKSBjcXItPnN0YXJ0ZGV2OwogCWlmICghZGV2aWNlIHx8CiAJICAgIHN0cm5jbXAoZGV2aWNlLT5kaXNjaXBsaW5lLT5lYmNuYW1lLCAoY2hhciAqKSAmY3FyLT5tYWdpYywgNCkpIHsKLQkJTUVTU0FHRShLRVJOX0RFQlVHLCAiaW52YWxpZCBkZXZpY2UgaW4gcmVxdWVzdDogYnVzX2lkICVzIiwKLQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJREJGX0RFVl9FVkVOVChEQkZfREVCVUcsIGRldmljZSwgImludmFsaWQgZGV2aWNlIGluIHJlcXVlc3Q6ICIKKwkJCSAgICAgICJidXNfaWQgJXMiLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBDaGVjayBmb3IgY2xlYXIgcGVuZGluZyAqLwogCWlmIChjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9DTEVBUl9QRU5ESU5HICYmCi0JICAgIGlyYi0+c2Nzdy5jbWQuZmN0bCAmIFNDU1dfRkNUTF9DTEVBUl9GVU5DKSB7CisJICAgIHNjc3dfZmN0bCgmaXJiLT5zY3N3KSAmIFNDU1dfRkNUTF9DTEVBUl9GVU5DKSB7CiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfQ0xFQVJFRDsKIAkJZGFzZF9kZXZpY2VfY2xlYXJfdGltZXIoZGV2aWNlKTsKIAkJd2FrZV91cCgmZGFzZF9mbHVzaF93cSk7CkBAIC0xMDQ4LDE5ICsxMDYxLDE3IEBACiAJCXJldHVybjsKIAl9CiAKLSAJLyogY2hlY2sgc3RhdHVzIC0gdGhlIHJlcXVlc3QgbWlnaHQgaGF2ZSBiZWVuIGtpbGxlZCBieSBkeW4gZGV0YWNoICovCisJLyogY2hlY2sgc3RhdHVzIC0gdGhlIHJlcXVlc3QgbWlnaHQgaGF2ZSBiZWVuIGtpbGxlZCBieSBkeW4gZGV0YWNoICovCiAJaWYgKGNxci0+c3RhdHVzICE9IERBU0RfQ1FSX0lOX0lPKSB7Ci0JCU1FU1NBR0UoS0VSTl9ERUJVRywKLQkJCSJpbnZhbGlkIHN0YXR1czogYnVzX2lkICVzLCBzdGF0dXMgJTAyeCIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgY3FyLT5zdGF0dXMpOworCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiaW52YWxpZCBzdGF0dXM6IGJ1c19pZCAlcywgIgorCQkJICAgICAgInN0YXR1cyAlMDJ4IiwgZGV2X25hbWUoJmNkZXYtPmRldiksIGNxci0+c3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KLQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLCAiSW50OiBDUy9EUyAweCUwNHggZm9yIGNxciAlcCIsCi0JCSAgICAgICgoaXJiLT5zY3N3LmNtZC5jc3RhdCA8PCA4KSB8IGlyYi0+c2Nzdy5jbWQuZHN0YXQpLCBjcXIpOworCiAJbmV4dCA9IE5VTEw7CiAJZXhwaXJlcyA9IDA7Ci0JaWYgKGlyYi0+c2Nzdy5jbWQuZHN0YXQgPT0gKERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSAmJgotCSAgICBpcmItPnNjc3cuY21kLmNzdGF0ID09IDAgJiYgIWlyYi0+ZXN3LmVzdzAuZXJ3LmNvbnMpIHsKKwlpZiAoc2Nzd19kc3RhdCgmaXJiLT5zY3N3KSA9PSAoREVWX1NUQVRfQ0hOX0VORCB8IERFVl9TVEFUX0RFVl9FTkQpICYmCisJICAgIHNjc3dfY3N0YXQoJmlyYi0+c2NzdykgPT0gMCkgewogCQkvKiByZXF1ZXN0IHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICovCiAJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfU1VDQ0VTUzsKIAkJY3FyLT5zdG9wY2xrID0gbm93OwpAQCAtMTA3MSwxOCArMTA4MiwyMyBAQAogCQl9CiAJfSBlbHNlIHsgIC8qIGVycm9yICovCiAJCW1lbWNweSgmY3FyLT5pcmIsIGlyYiwgc2l6ZW9mKHN0cnVjdCBpcmIpKTsKKwkJLyogbG9nIHNlbnNlIGZvciBldmVyeSBmYWlsZWQgSS9PIHRvIHMzOTAgZGVidWdmZWF0dXJlICovCisJCWRhc2RfbG9nX3NlbnNlX2RiZihjcXIsIGlyYik7CiAJCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX0VSUExPRykgewogCQkJZGFzZF9sb2dfc2Vuc2UoY3FyLCBpcmIpOwogCQl9CisKIAkJLyoKIAkJICogSWYgd2UgZG9uJ3Qgd2FudCBjb21wbGV4IEVSUCBmb3IgdGhpcyByZXF1ZXN0LCB0aGVuIGp1c3QKIAkJICogcmVzZXQgdGhpcyBhbmQgcmV0cnkgaXQgaW4gdGhlIGZhc3RwYXRoCiAJCSAqLwogCQlpZiAoIXRlc3RfYml0KERBU0RfQ1FSX0ZMQUdTX1VTRV9FUlAsICZjcXItPmZsYWdzKSAmJgogCQkgICAgY3FyLT5yZXRyaWVzID4gMCkgewotCQkJREVWX01FU1NBR0UoS0VSTl9ERUJVRywgZGV2aWNlLAotCQkJCSAgICAiZGVmYXVsdCBFUlAgaW4gZmFzdHBhdGggKCVpIHJldHJpZXMgbGVmdCkiLAotCQkJCSAgICBjcXItPnJldHJpZXMpOworCQkJaWYgKGNxci0+bHBtID09IExQTV9BTllQQVRIKQorCQkJCURCRl9ERVZfRVZFTlQoREJGX0RFQlVHLCBkZXZpY2UsCisJCQkJCSAgICAgICJkZWZhdWx0IEVSUCBpbiBmYXN0cGF0aCAiCisJCQkJCSAgICAgICIoJWkgcmV0cmllcyBsZWZ0KSIsCisJCQkJCSAgICAgIGNxci0+cmV0cmllcyk7CiAJCQljcXItPmxwbSAgICA9IExQTV9BTllQQVRIOwogCQkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CiAJCQluZXh0ID0gY3FyOwpAQCAtMTA5MywxMCArMTEwOSw2IEBACiAJICAgICghZGV2aWNlLT5zdG9wcGVkKSkgewogCQlpZiAoZGV2aWNlLT5kaXNjaXBsaW5lLT5zdGFydF9JTyhuZXh0KSA9PSAwKQogCQkJZXhwaXJlcyA9IG5leHQtPmV4cGlyZXM7Ci0JCWVsc2UKLQkJCURFVl9NRVNTQUdFKEtFUk5fREVCVUcsIGRldmljZSwgIiVzIiwKLQkJCQkgICAgIkludGVycnVwdCBmYXN0cGF0aCAiCi0JCQkJICAgICJmYWlsZWQhIik7CiAJfQogCWlmIChleHBpcmVzICE9IDApCiAJCWRhc2RfZGV2aWNlX3NldF90aW1lcihkZXZpY2UsIGV4cGlyZXMpOwpAQCAtMTE2OSw2ICsxMTgxLDcgQEAKIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2s7CiAJdm9pZCAoKmNhbGxiYWNrKShzdHJ1Y3QgZGFzZF9jY3dfcmVxICosIHZvaWQgKmRhdGEpOwogCXZvaWQgKmNhbGxiYWNrX2RhdGE7CisJY2hhciBlcnJvcnN0cmluZ1tFUlJPUkxFTkdUSF07CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgZmluYWxfcXVldWUpIHsKIAkJY3FyID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxLCBkZXZsaXN0KTsKQEAgLTExODksMTAgKzEyMDIsMTEgQEAKIAkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfVEVSTUlOQVRFRDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKLQkJCQkgICAgIndyb25nIGNxciBzdGF0dXMgaW4gX19kYXNkX3Byb2Nlc3NfZmluYWxfcXVldWUgIgotCQkJCSAgICAiZm9yIGNxciAlcCwgc3RhdHVzICV4IiwKLQkJCQkgICAgY3FyLCBjcXItPnN0YXR1cyk7CisJCQkvKiBpbnRlcm5hbCBlcnJvciAxMiAtIHdyb25nIGNxciBzdGF0dXMqLworCQkJc25wcmludGYoZXJyb3JzdHJpbmcsIEVSUk9STEVOR1RILCAiMTIgJXAgJXgwMiIsIGNxciwgY3FyLT5zdGF0dXMpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCQkicmVhc29uPSVzXG4iLCBlcnJvcnN0cmluZyk7CiAJCQlCVUcoKTsKIAkJfQogCQlpZiAoY3FyLT5jYWxsYmFjayAhPSBOVUxMKQpAQCAtMTIxNywxOCArMTIzMSwxNyBAQAogCSAgICAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBjcXItPmV4cGlyZXMgKyBjcXItPnN0YXJ0dGltZSkpKSB7CiAJCWlmIChkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKSAhPSAwKSB7CiAJCQkvKiBIbXBmLCB0cnkgYWdhaW4gaW4gNSBzZWMgKi8KLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJpbnRlcm5hbCBlcnJvciAtIHRpbWVvdXQgKCVpcykgZXhwaXJlZCAiCi0JCQkJICAgICJmb3IgY3FyICVwLCB0ZXJtaW5hdGlvbiBmYWlsZWQsICIKLQkJCQkgICAgInJldHJ5aW5nIGluIDVzIiwKLQkJCQkgICAgKGNxci0+ZXhwaXJlcy9IWiksIGNxcik7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiY3FyICVwIHRpbWVkIG91dCAoJWlzKSBidXQgY2Fubm90IGJlICIKKwkJCQkiZW5kZWQsIHJldHJ5aW5nIGluIDUgc1xuIiwKKwkJCQljcXIsIChjcXItPmV4cGlyZXMvSFopKTsKIAkJCWNxci0+ZXhwaXJlcyArPSA1KkhaOwogCQkJZGFzZF9kZXZpY2Vfc2V0X3RpbWVyKGRldmljZSwgNSpIWik7CiAJCX0gZWxzZSB7Ci0JCQlERVZfTUVTU0FHRShLRVJOX0VSUiwgZGV2aWNlLAotCQkJCSAgICAiaW50ZXJuYWwgZXJyb3IgLSB0aW1lb3V0ICglaXMpIGV4cGlyZWQgIgotCQkJCSAgICAiZm9yIGNxciAlcCAoJWkgcmV0cmllcyBsZWZ0KSIsCi0JCQkJICAgIChjcXItPmV4cGlyZXMvSFopLCBjcXIsIGNxci0+cmV0cmllcyk7CisJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkiY3FyICVwIHRpbWVkIG91dCAoJWlzKSwgJWkgcmV0cmllcyAiCisJCQkJInJlbWFpbmluZ1xuIiwgY3FyLCAoY3FyLT5leHBpcmVzL0haKSwKKwkJCQljcXItPnJldHJpZXMpOwogCQl9CiAJfQogfQpAQCAtMTI5MCwxMCArMTMwMyw5IEBACiAJCQlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpOwogCQkJaWYgKHJjKSB7CiAJCQkJLyogdW5hYmxlIHRvIHRlcm1pbmF0ZSByZXF1ZXVzdCAqLwotCQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJCSAgICAiZGFzZCBmbHVzaCBjY3dfcXVldWUgaXMgdW5hYmxlICIKLQkJCQkJICAgICIgdG8gdGVybWluYXRlIHJlcXVlc3QgJXAiLAotCQkJCQkgICAgY3FyKTsKKwkJCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwKKwkJCQkJIkZsdXNoaW5nIHRoZSBEQVNEIHJlcXVlc3QgcXVldWUgIgorCQkJCQkiZmFpbGVkIGZvciByZXF1ZXN0ICVwXG4iLCBjcXIpOwogCQkJCS8qIHN0b3AgZmx1c2ggcHJvY2Vzc2luZyAqLwogCQkJCWdvdG8gZmluaXNoZWQ7CiAJCQl9CkBAIC0xNTM3LDEwICsxNTQ5LDkgQEAKIAkJLyogcmVxdWVzdCBpbiBJTyAtIHRlcm1pbmF0ZSBJTyBhbmQgcmVsZWFzZSBhZ2FpbiAqLwogCQlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpOwogCQlpZiAocmMpIHsKLQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCi0JCQkJICAgICJkYXNkX2NhbmNlbF9yZXEgaXMgdW5hYmxlICIKLQkJCQkgICAgIiB0byB0ZXJtaW5hdGUgcmVxdWVzdCAlcCwgcmMgPSAlZCIsCi0JCQkJICAgIGNxciwgcmMpOworCQkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkJIkNhbmNlbGxpbmcgcmVxdWVzdCAlcCBmYWlsZWQgd2l0aCByYz0lZFxuIiwKKwkJCQljcXIsIHJjKTsKIAkJfSBlbHNlIHsKIAkJCWNxci0+c3RvcGNsayA9IGdldF9jbG9jaygpOwogCQkJcmMgPSAxOwpAQCAtMTYxNyw3ICsxNjI4LDcgQEAKIAlpZiAoY3FyLT5zdGF0dXMgPT0gREFTRF9DUVJfRE9ORSkKIAkJREJGX0RFVl9FVkVOVChEQkZfTk9USUNFLCBkZXZpY2UsICIlcyIsICJFUlAgc3VjY2Vzc2Z1bCIpOwogCWVsc2UKLQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwgIiVzIiwgIkVSUCB1bnN1Y2Nlc3NmdWwiKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJFUlAgZmFpbGVkIGZvciB0aGUgREFTRFxuIik7CiAJZXJwX2ZuID0gZGV2aWNlLT5kaXNjaXBsaW5lLT5lcnBfcG9zdGFjdGlvbihjcXIpOwogCWVycF9mbihjcXIpOwogfQpAQCAtMTk5MSw4ICsyMDAyLDExIEBACiAJYmxrX3F1ZXVlX21heF9zZWN0b3JzKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBtYXgpOwogCWJsa19xdWV1ZV9tYXhfcGh5c19zZWdtZW50cyhibG9jay0+cmVxdWVzdF9xdWV1ZSwgLTFMKTsKIAlibGtfcXVldWVfbWF4X2h3X3NlZ21lbnRzKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwotCWJsa19xdWV1ZV9tYXhfc2VnbWVudF9zaXplKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOwotCWJsa19xdWV1ZV9zZWdtZW50X2JvdW5kYXJ5KGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCAtMUwpOworCS8qIHdpdGggcGFnZSBzaXplZCBzZWdtZW50cyB3ZSBjYW4gdHJhbnNsYXRlIGVhY2ggc2VnZW1lbnQgaW50bworCSAqIG9uZSBpZGF3L3RpZGF3CisJICovCisJYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUoYmxvY2stPnJlcXVlc3RfcXVldWUsIFBBR0VfU0laRSk7CisJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkoYmxvY2stPnJlcXVlc3RfcXVldWUsIFBBR0VfU0laRSAtIDEpOwogCWJsa19xdWV1ZV9vcmRlcmVkKGJsb2NrLT5yZXF1ZXN0X3F1ZXVlLCBRVUVVRV9PUkRFUkVEX0RSQUlOLCBOVUxMKTsKIH0KIApAQCAtMjA0Myw4ICsyMDU3LDkgQEAKIAl9CiAKIAlpZiAoZGFzZF9wcm9iZW9ubHkpIHsKLQkJREVWX01FU1NBR0UoS0VSTl9JTkZPLCBiYXNlLCAiJXMiLAotCQkJICAgICJObyBhY2Nlc3MgdG8gZGV2aWNlIGR1ZSB0byBwcm9iZW9ubHkgbW9kZSIpOworCQlkZXZfaW5mbygmYmFzZS0+Y2Rldi0+ZGV2LAorCQkJICJBY2Nlc3NpbmcgdGhlIERBU0QgZmFpbGVkIGJlY2F1c2UgaXQgaXMgaW4gIgorCQkJICJwcm9iZW9ubHkgbW9kZVxuIik7CiAJCXJjID0gLUVQRVJNOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTAxLDcgKzIxMTYsOCBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBkYXNkX29wZW4sCiAJLnJlbGVhc2UJPSBkYXNkX3JlbGVhc2UsCi0JLmxvY2tlZF9pb2N0bAk9IGRhc2RfaW9jdGwsCisJLmlvY3RsCQk9IGRhc2RfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IGRhc2RfaW9jdGwsCiAJLmdldGdlbwkJPSBkYXNkX2dldGdlbywKIH07CiAKQEAgLTIxNDMsMTQgKzIxNTksMTQgQEAKIAogCXJldCA9IGNjd19kZXZpY2Vfc2V0X29wdGlvbnMoY2RldiwgQ0NXREVWX0RPX1BBVEhHUk9VUCk7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCURCRl9FVkVOVChEQkZfV0FSTklORywKIAkJICAgICAgICJkYXNkX2dlbmVyaWNfcHJvYmU6IGNvdWxkIG5vdCBzZXQgY2N3LWRldmljZSBvcHRpb25zICIKIAkJICAgICAgICJmb3IgJXNcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJcmV0ID0gZGFzZF9hZGRfc3lzZnNfZmlsZXMoY2Rldik7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCURCRl9FVkVOVChEQkZfV0FSTklORywKIAkJICAgICAgICJkYXNkX2dlbmVyaWNfcHJvYmU6IGNvdWxkIG5vdCBhZGQgc3lzZnMgZW50cmllcyAiCiAJCSAgICAgICAiZm9yICVzXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybiByZXQ7CkBAIC0yMTY2LDkgKzIxODIsNyBAQAogCSAgICAoZGFzZF9hdXRvZGV0ZWN0ICYmIGRhc2RfYnVzaWRfa25vd24oZGV2X25hbWUoJmNkZXYtPmRldikpICE9IDApKQogCQlyZXQgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoY2Rldik7CiAJaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgImRhc2RfZ2VuZXJpY19wcm9iZTogY291bGQgbm90IGluaXRpYWxseSAiCi0JCSAgICAgICAib25saW5lIGNjdy1kZXZpY2UgJXM7IHJldHVybiBjb2RlOiAlZFxuIiwKKwkJcHJfd2FybmluZygiJXM6IFNldHRpbmcgdGhlIERBU0Qgb25saW5lIGZhaWxlZCB3aXRoIHJjPSVkXG4iLAogCQkgICAgICAgZGV2X25hbWUoJmNkZXYtPmRldiksIHJldCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjMyLDEwICsyMjQ2LDkgQEAKIAlkaXNjaXBsaW5lID0gYmFzZV9kaXNjaXBsaW5lOwogCWlmIChkZXZpY2UtPmZlYXR1cmVzICYgREFTRF9GRUFUVVJFX1VTRURJQUcpIHsKIAkgIAlpZiAoIWRhc2RfZGlhZ19kaXNjaXBsaW5lX3BvaW50ZXIpIHsKLQkJICAgICAgICBwcmludGsgKEtFUk5fV0FSTklORwotCQkJCSJkYXNkX2dlbmVyaWMgY291bGRuJ3Qgb25saW5lIGRldmljZSAlcyAiCi0JCQkJIi0gZGlzY2lwbGluZSBESUFHIG5vdCBhdmFpbGFibGVcbiIsCi0JCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQkJcHJfd2FybmluZygiJXMgU2V0dGluZyB0aGUgREFTRCBvbmxpbmUgZmFpbGVkIGJlY2F1c2UgIgorCQkJCSAgICJvZiBtaXNzaW5nIERJQUcgZGlzY2lwbGluZVxuIiwKKwkJCQkgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCQlkYXNkX2RlbGV0ZV9kZXZpY2UoZGV2aWNlKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CkBAIC0yMjU2LDEwICsyMjY5LDkgQEAKIAkvKiBjaGVja19kZXZpY2Ugd2lsbCBhbGxvY2F0ZSBibG9jayBkZXZpY2UgaWYgbmVjZXNzYXJ5ICovCiAJcmMgPSBkaXNjaXBsaW5lLT5jaGVja19kZXZpY2UoZGV2aWNlKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCSJkYXNkX2dlbmVyaWMgY291bGRuJ3Qgb25saW5lIGRldmljZSAlcyAiCi0JCQkid2l0aCBkaXNjaXBsaW5lICVzIHJjPSVpXG4iLAotCQkJZGV2X25hbWUoJmNkZXYtPmRldiksIGRpc2NpcGxpbmUtPm5hbWUsIHJjKTsKKwkJcHJfd2FybmluZygiJXMgU2V0dGluZyB0aGUgREFTRCBvbmxpbmUgd2l0aCBkaXNjaXBsaW5lICVzICIKKwkJCSAgICJmYWlsZWQgd2l0aCByYz0laVxuIiwKKwkJCSAgIGRldl9uYW1lKCZjZGV2LT5kZXYpLCBkaXNjaXBsaW5lLT5uYW1lLCByYyk7CiAJCW1vZHVsZV9wdXQoZGlzY2lwbGluZS0+b3duZXIpOwogCQltb2R1bGVfcHV0KGJhc2VfZGlzY2lwbGluZS0+b3duZXIpOwogCQlkYXNkX2RlbGV0ZV9kZXZpY2UoZGV2aWNlKTsKQEAgLTIyNjgsOSArMjI4MCw4IEBACiAKIAlkYXNkX3NldF90YXJnZXRfc3RhdGUoZGV2aWNlLCBEQVNEX1NUQVRFX09OTElORSk7CiAJaWYgKGRldmljZS0+c3RhdGUgPD0gREFTRF9TVEFURV9LTk9XTikgewotCQlwcmludGsgKEtFUk5fV0FSTklORwotCQkJImRhc2RfZ2VuZXJpYyBkaXNjaXBsaW5lIG5vdCBmb3VuZCBmb3IgJXNcbiIsCi0JCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CisJCXByX3dhcm5pbmcoIiVzIFNldHRpbmcgdGhlIERBU0Qgb25saW5lIGZhaWxlZCBiZWNhdXNlIG9mIGEgIgorCQkJICAgIm1pc3NpbmcgZGlzY2lwbGluZVxuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWRhc2Rfc2V0X3RhcmdldF9zdGF0ZShkZXZpY2UsIERBU0RfU1RBVEVfTkVXKTsKIAkJaWYgKGRldmljZS0+YmxvY2spCkBAIC0yMzE0LDEzICsyMzI1LDEzIEBACiAJCW9wZW5fY291bnQgPSBhdG9taWNfcmVhZCgmZGV2aWNlLT5ibG9jay0+b3Blbl9jb3VudCk7CiAJCWlmIChvcGVuX2NvdW50ID4gbWF4X2NvdW50KSB7CiAJCQlpZiAob3Blbl9jb3VudCA+IDApCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3Qgb2ZmbGluZSBkYXNkICIKLQkJCQkgICAgICAgImRldmljZSB3aXRoIG9wZW4gY291bnQgPSAlaS5cbiIsCi0JCQkJICAgICAgIG9wZW5fY291bnQpOworCQkJCXByX3dhcm5pbmcoIiVzOiBUaGUgREFTRCBjYW5ub3QgYmUgc2V0IG9mZmxpbmUgIgorCQkJCQkgICAid2l0aCBvcGVuIGNvdW50ICVpXG4iLAorCQkJCQkgICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwgb3Blbl9jb3VudCk7CiAJCQllbHNlCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMiLAotCQkJCSAgICAgICAiQ2FuJ3Qgb2ZmbGluZSBkYXNkIGRldmljZSBkdWUgIgotCQkJCSAgICAgICAidG8gaW50ZXJuYWwgdXNlXG4iKTsKKwkJCQlwcl93YXJuaW5nKCIlczogVGhlIERBU0QgY2Fubm90IGJlIHNldCBvZmZsaW5lICIKKwkJCQkJICAgIndoaWxlIGl0IGlzIGluIHVzZVxuIiwKKwkJCQkJICAgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQkJY2xlYXJfYml0KERBU0RfRkxBR19PRkZMSU5FLCAmZGV2aWNlLT5mbGFncyk7CiAJCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKIAkJCXJldHVybiAtRUJVU1k7CkBAIC0yMzkzLDggKzI0MDQsMTAgQEAKIAljcXIgPSBkYXNkX3NtYWxsb2NfcmVxdWVzdChtYWdpYywgMSAvKiBSREMgKi8sIHJkY19idWZmZXJfc2l6ZSwgZGV2aWNlKTsKIAogCWlmIChJU19FUlIoY3FyKSkgewotCQlERVZfTUVTU0FHRShLRVJOX1dBUk5JTkcsIGRldmljZSwgIiVzIiwKLQkJCSAgICAiQ291bGQgbm90IGFsbG9jYXRlIFJEQyByZXF1ZXN0Iik7CisJCS8qIGludGVybmFsIGVycm9yIDEzIC0gQWxsb2NhdGluZyB0aGUgUkRDIHJlcXVlc3QgZmFpbGVkKi8KKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsCisJCQkgIkFuIGVycm9yIG9jY3VycmVkIGluIHRoZSBEQVNEIGRldmljZSBkcml2ZXIsICIKKwkJCSAicmVhc29uPSVzXG4iLCAiMTMiKTsKIAkJcmV0dXJuIGNxcjsKIAl9CiAKQEAgLTI0MzEsNiArMjQ0NCw0MCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9nZW5lcmljX3JlYWRfZGV2X2NoYXJzKTsKIAorLyoKKyAqICAgSW4gY29tbWFuZCBtb2RlIGFuZCB0cmFuc3BvcnQgbW9kZSB3ZSBuZWVkIHRvIGxvb2sgZm9yIHNlbnNlCisgKiAgIGRhdGEgaW4gZGlmZmVyZW50IHBsYWNlcy4gVGhlIHNlbnNlIGRhdGEgaXRzZWxmIGlzIGFsbHdheXMKKyAqICAgYW4gYXJyYXkgb2YgMzIgYnl0ZXMsIHNvIHdlIGNhbiB1bmlmeSB0aGUgc2Vuc2UgZGF0YSBhY2Nlc3MKKyAqICAgZm9yIGJvdGggbW9kZXMuCisgKi8KK2NoYXIgKmRhc2RfZ2V0X3NlbnNlKHN0cnVjdCBpcmIgKmlyYikKK3sKKwlzdHJ1Y3QgdHNiICp0c2IgPSBOVUxMOworCWNoYXIgKnNlbnNlID0gTlVMTDsKKworCWlmIChzY3N3X2lzX3RtKCZpcmItPnNjc3cpICYmIChpcmItPnNjc3cudG0uZmN4cyA9PSAweDAxKSkgeworCQlpZiAoaXJiLT5zY3N3LnRtLnRjdykKKwkJCXRzYiA9IHRjd19nZXRfdHNiKChzdHJ1Y3QgdGN3ICopKHVuc2lnbmVkIGxvbmcpCisJCQkJCSAgaXJiLT5zY3N3LnRtLnRjdyk7CisJCWlmICh0c2IgJiYgdHNiLT5sZW5ndGggPT0gNjQgJiYgdHNiLT5mbGFncykKKwkJCXN3aXRjaCAodHNiLT5mbGFncyAmIDB4MDcpIHsKKwkJCWNhc2UgMToJLyogdHNhX2lvc3RhdCAqLworCQkJCXNlbnNlID0gdHNiLT50c2EuaW9zdGF0LnNlbnNlOworCQkJCWJyZWFrOworCQkJY2FzZSAyOiAvKiB0c2FfZGRwYyAqLworCQkJCXNlbnNlID0gdHNiLT50c2EuZGRwYy5zZW5zZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogY3VycmVudGx5IHdlIGRvbid0IHVzZSBpbnRlcnJvZ2F0ZSBkYXRhICovCisJCQkJYnJlYWs7CisJCQl9CisJfSBlbHNlIGlmIChpcmItPmVzdy5lc3cwLmVydy5jb25zKSB7CisJCXNlbnNlID0gaXJiLT5lY3c7CisJfQorCXJldHVybiBzZW5zZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRhc2RfZ2V0X3NlbnNlKTsKKwogc3RhdGljIGludCBfX2luaXQgZGFzZF9pbml0KHZvaWQpCiB7CiAJaW50IHJjOwpAQCAtMjQ3Miw3ICsyNTE5LDcgQEAKIAogCXJldHVybiAwOwogZmFpbGVkOgotCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiaW5pdGlhbGl6YXRpb24gbm90IHBlcmZvcm1lZCBkdWUgdG8gZXJyb3JzIik7CisJcHJfaW5mbygiVGhlIERBU0QgZGV2aWNlIGRyaXZlciBjb3VsZCBub3QgYmUgaW5pdGlhbGl6ZWRcbiIpOwogCWRhc2RfZXhpdCgpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCmluZGV4IGQ4MmFhZDUuLjI3OTkxYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwpAQCAtNyw2ICs3LDggQEAKICAqCiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAiZGFzZCIKKwogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+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+IDExKTsKQEAgLTI2Nyw3ICsyNjksNyBAQAogCWJ1ZmZlciA9IGRhc2RfZ2V0X3VzZXJfc3RyaW5nKHVzZXJfYnVmLCB1c2VyX2xlbik7CiAJaWYgKElTX0VSUihidWZmZXIpKQogCQlyZXR1cm4gUFRSX0VSUihidWZmZXIpOwotCU1FU1NBR0VfTE9HKEtFUk5fSU5GTywgIi9wcm9jL2Rhc2Qvc3RhdGljdGljczogJyVzJyIsIGJ1ZmZlcik7CisJREJGX0VWRU5UKERCRl9ERUJVRywgIi9wcm9jL2Rhc2Qvc3RhdGljdGljczogJyVzJ1xuIiwgYnVmZmVyKTsKIAogCS8qIGNoZWNrIGZvciB2YWxpZCB2ZXJicyAqLwogCWZvciAoc3RyID0gYnVmZmVyOyBpc3NwYWNlKCpzdHIpOyBzdHIrKyk7CkBAIC0yNzcsMzMgKzI3OSwzMyBAQAogCQlpZiAoc3RyY21wKHN0ciwgIm9uIikgPT0gMCkgewogCQkJLyogc3dpdGNoIG9uIHN0YXRpc3RpY3MgcHJvZmlsaW5nICovCiAJCQlkYXNkX3Byb2ZpbGVfbGV2ZWwgPSBEQVNEX1BST0ZJTEVfT047Ci0JCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgIlN0YXRpc3RpY3Mgc3dpdGNoZWQgb24iKTsKKwkJCXByX2luZm8oIlRoZSBzdGF0aXN0aWNzIGZlYXR1cmUgaGFzIGJlZW4gc3dpdGNoZWQgIgorCQkJCSJvblxuIik7CiAJCX0gZWxzZSBpZiAoc3RyY21wKHN0ciwgIm9mZiIpID09IDApIHsKIAkJCS8qIHN3aXRjaCBvZmYgYW5kIHJlc2V0IHN0YXRpc3RpY3MgcHJvZmlsaW5nICovCiAJCQltZW1zZXQoJmRhc2RfZ2xvYmFsX3Byb2ZpbGUsCiAJCQkgICAgICAgMCwgc2l6ZW9mIChzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm9fdCkpOwogCQkJZGFzZF9wcm9maWxlX2xldmVsID0gREFTRF9QUk9GSUxFX09GRjsKLQkJCU1FU1NBR0UoS0VSTl9JTkZPLCAiJXMiLCAiU3RhdGlzdGljcyBzd2l0Y2hlZCBvZmYiKTsKKwkJCXByX2luZm8oIlRoZSBzdGF0aXN0aWNzIGZlYXR1cmUgaGFzIGJlZW4gc3dpdGNoZWQgIgorCQkJCSJvZmZcbiIpOwogCQl9IGVsc2UKIAkJCWdvdG8gb3V0X2Vycm9yOwogCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJyZXNldCIsIDUpID09IDApIHsKIAkJLyogcmVzZXQgdGhlIHN0YXRpc3RpY3MgKi8KIAkJbWVtc2V0KCZkYXNkX2dsb2JhbF9wcm9maWxlLCAwLAogCQkgICAgICAgc2l6ZW9mIChzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm9fdCkpOwotCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgIlN0YXRpc3RpY3MgcmVzZXQiKTsKKwkJcHJfaW5mbygiVGhlIHN0YXRpc3RpY3MgaGF2ZSBiZWVuIHJlc2V0XG4iKTsKIAl9IGVsc2UKIAkJZ290byBvdXRfZXJyb3I7CiAJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gdXNlcl9sZW47CiBvdXRfZXJyb3I6Ci0JTUVTU0FHRShLRVJOX1dBUk5JTkcsICIlcyIsCi0JCSIvcHJvYy9kYXNkL3N0YXRpc3RpY3M6IG9ubHkgJ3NldCBvbicsICdzZXQgb2ZmJyAiCi0JCSJhbmQgJ3Jlc2V0JyBhcmUgc3VwcG9ydGVkIHZlcmJzIik7CisJcHJfd2FybmluZygiJXMgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciAvcHJvYy9kYXNkL3N0YXRpc3RpY3NcbiIsCisJCXN0cik7CiAJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gLUVJTlZBTDsKICNlbHNlCi0JTUVTU0FHRShLRVJOX1dBUk5JTkcsICIlcyIsCi0JCSIvcHJvYy9kYXNkL3N0YXRpc3RpY3M6IGlzIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBrZXJuZWwiKTsKKwlwcl93YXJuaW5nKCIvcHJvYy9kYXNkL3N0YXRpc3RpY3M6IGlzIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBrZXJuZWxcbiIpOwogCXJldHVybiB1c2VyX2xlbjsKICNlbmRpZgkJCQkvKiBDT05GSUdfREFTRF9QUk9GSUxFICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmggYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKaW5kZXggZDBkNTY1YS4uYzA3ODA5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaApAQCAtMzI0LDggKzMyNCw2IEBACiAjZW5kaWYKIAogLyogYSBmdW5jdGlvbiBmb3IgZHVtcGluZyBkZXZpY2Ugc2Vuc2UgaW5mbyAqLwotZXh0ZXJuIHZvaWQgdGFwZV9kdW1wX3NlbnNlKHN0cnVjdCB0YXBlX2RldmljZSAqLCBzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICosCi0JCQkgICAgc3RydWN0IGlyYiAqKTsKIGV4dGVybiB2b2lkIHRhcGVfZHVtcF9zZW5zZV9kYmYoc3RydWN0IHRhcGVfZGV2aWNlICosIHN0cnVjdCB0YXBlX3JlcXVlc3QgKiwKIAkJCQlzdHJ1Y3QgaXJiICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCmluZGV4IDIyY2EzNDMuLjgwN2RlZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCkBAIC04LDYgKzgsOCBAQAogICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CiAgKi8KIAorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaW8uaD4KQEAgLTE4LDggKzIwLDYgQEAKICNpbmNsdWRlICJ0YXBlLmgiCiAjaW5jbHVkZSAidGFwZV9zdGQuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFXzM0WFg6ICIKLQogLyoKICAqIFBvaW50ZXIgdG8gZGVidWcgYXJlYS4KICAqLwpAQCAtMjAzLDggKzIwMyw3IEBACiAJCXRhcGVfMzR4eF9zY2hlZHVsZV93b3JrKGRldmljZSwgVE9fTVNFTik7CiAJfSBlbHNlIHsKIAkJREJGX0VWRU5UKDMsICJ1bnNvbC5pcnEhIGRldiBlbmQ6ICUwOHhcbiIsIGRldmljZS0+Y2Rldl9pZCk7Ci0JCVBSSU5UX1dBUk4oIlVuc29saWNpdGVkIElSUSAoRGV2aWNlIEVuZCkgY2F1Z2h0LlxuIik7Ci0JCXRhcGVfZHVtcF9zZW5zZShkZXZpY2UsIE5VTEwsIGlyYik7CisJCXRhcGVfZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCBOVUxMLCBpcmIpOwogCX0KIAlyZXR1cm4gVEFQRV9JT19TVUNDRVNTOwogfQpAQCAtMjI2LDkgKzIyNSw3IEBACiAJCXRhcGVfc3RkX3JlYWRfYmFja3dhcmQoZGV2aWNlLCByZXF1ZXN0KTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7CiAJfQotCWlmIChyZXF1ZXN0LT5vcCAhPSBUT19SQkEpCi0JCVBSSU5UX0VSUigicmVhZF9vcHBvc2l0ZSBjYWxsZWQgd2l0aCBzdGF0ZTolc1xuIiwKLQkJCSAgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7CisKIAkvKgogCSAqIFdlIHRyaWVkIHRvIHJlYWQgZm9yd2FyZCBhbmQgYmFja3dhcmQsIGJ1dCBoYXQgbm8KIAkgKiBzdWNjZXNzIC0+IGZhaWxlZC4KQEAgLTI0MSwxMyArMjM4LDkgQEAKIAkJICBzdHJ1Y3QgaXJiICppcmIsIGludCBubykKIHsKIAlpZiAocmVxdWVzdC0+b3AgIT0gVE9fQVNTSUdOKSB7Ci0JCVBSSU5UX1dBUk4oIkFuIHVuZXhwZWN0ZWQgY29uZGl0aW9uICMlZCB3YXMgY2F1Z2h0IGluICIKLQkJCSAgICJ0YXBlIGVycm9yIHJlY292ZXJ5LlxuIiwgbm8pOwotCQlQUklOVF9XQVJOKCJQbGVhc2UgcmVwb3J0IHRoaXMgaW5jaWRlbnQuXG4iKTsKLQkJaWYgKHJlcXVlc3QpCi0JCQlQUklOVF9XQVJOKCJPcGVyYXRpb24gb2YgdGFwZTolc1xuIiwKLQkJCQkgICB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKLQkJdGFwZV9kdW1wX3NlbnNlKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKKwkJZGV2X2VycigmZGV2aWNlLT5jZGV2LT5kZXYsICJBbiB1bmV4cGVjdGVkIGNvbmRpdGlvbiAlZCAiCisJCQkib2NjdXJyZWQgaW4gdGFwZSBlcnJvciByZWNvdmVyeVxuIiwgbm8pOworCQl0YXBlX2R1bXBfc2Vuc2VfZGJmKGRldmljZSwgcmVxdWVzdCwgaXJiKTsKIAl9CiAJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogfQpAQCAtMjYxLDkgKzI1NCw4IEBACiAJCSAgICAgIHN0cnVjdCBpcmIgKmlyYikKIHsKIAlpZiAoaXJiLT5lY3dbM10gPT0gMHg0MCkgewotCQlQUklOVF9XQVJOICgiRGF0YSBvdmVycnVuIGVycm9yIGJldHdlZW4gY29udHJvbC11bml0ICIKLQkJCSAgICAiYW5kIGRyaXZlLiBVc2UgYSBmYXN0ZXIgY2hhbm5lbCBjb25uZWN0aW9uLCAiCi0JCQkgICAgImlmIHBvc3NpYmxlISBcbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSBkYXRhIG92ZXJydW4gb2NjdXJyZWQgYmV0d2VlbiIKKwkJCSIgdGhlIGNvbnRyb2wgdW5pdCBhbmQgdGFwZSB1bml0XG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCX0KIAlyZXR1cm4gdGFwZV8zNHh4X2VycF9idWcoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC0xKTsKQEAgLTI4MCw3ICsyNzIsOCBAQAogCQkvKgogCQkgKiBjdSBkZXRlY3RlZCBpbmNvcnJlY3QgYmxvY2staWQgc2VxdWVuY2Ugb24gdGFwZS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIklsbGVnYWwgYmxvY2staWQgc2VxdWVuY2UgZm91bmQhXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBibG9jayBJRCBzZXF1ZW5jZSBvbiB0aGUgIgorCQkJInRhcGUgaXMgaW5jb3JyZWN0XG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCX0KIAkvKgpAQCAtMzkzLDggKzM4Niw2IEBACiAJCQkvKiBXcml0aW5nIGF0IHBoeXNpY2FsIGVuZCBvZiB2b2x1bWUgKi8KIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU5PU1BDKTsKIAkJZGVmYXVsdDoKLQkJCVBSSU5UX0VSUigiSW52YWxpZCBvcCBpbiAlczolaVxuIiwKLQkJCQkgIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgMCk7CiAJCX0KIAl9CkBAIC00MjAsNyArNDExLDggQEAKIAkJCQkJCQkgaXJiLCAtNCk7CiAKIAkJCS8qIGRhdGEgY2hlY2sgaXMgcGVybWFuZW50LCBDVSByZWNvdmVyeSBoYXMgZmFpbGVkICovCi0JCQlQUklOVF9XQVJOKCJQZXJtYW5lbnQgcmVhZCBlcnJvclxuIik7CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSByZWFkIGVycm9yIG9jY3VycmVkICIKKwkJCQkidGhhdCBjYW5ub3QgYmUgcmVjb3ZlcmVkXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAkJY2FzZSAweDI1OgogCQkJLy8gYSB3cml0ZSBkYXRhIGNoZWNrIG9jY3VycmVkCkBAIC00MzMsMjIgKzQyNSwyNiBAQAogCQkJCQkJCSBpcmIsIC01KTsKIAogCQkJLy8gZGF0YSBjaGVjayBpcyBwZXJtYW5lbnQsIGN1LXJlY292ZXJ5IGhhcyBmYWlsZWQKLQkJCVBSSU5UX1dBUk4oIlBlcm1hbmVudCB3cml0ZSBlcnJvclxuIik7CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiQSB3cml0ZSBlcnJvciBvbiB0aGUgIgorCQkJCSJ0YXBlIGNhbm5vdCBiZSByZWNvdmVyZWRcbiIpOwogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQljYXNlIDB4MjY6CiAJCQkvKiBEYXRhIENoZWNrIChyZWFkIG9wcG9zaXRlKSBvY2N1cnJlZC4gKi8KIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JlYWRfb3Bwb3NpdGUoZGV2aWNlLCByZXF1ZXN0KTsKIAkJY2FzZSAweDI4OgogCQkJLyogSUQtTWFyayBhdCB0YXBlIHN0YXJ0IGNvdWxkbid0IGJlIHdyaXR0ZW4gKi8KLQkJCVBSSU5UX1dBUk4oIklELU1hcmsgY291bGQgbm90IGJlIHdyaXR0ZW4uXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJXcml0aW5nIHRoZSBJRC1tYXJrICIKKwkJCQkiZmFpbGVkXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAkJY2FzZSAweDMxOgogCQkJLyogVGFwZSB2b2lkLiBUcmllZCB0byByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlLiAqLwotCQkJUFJJTlRfV0FSTigiUmVhZCBiZXlvbmQgZW5kIG9mIHJlY29yZGVkIGFyZWEuXG4iKTsKKwkJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJSZWFkaW5nIHRoZSB0YXBlIGJleW9uZCIKKwkJCQkiIHRoZSBlbmQgb2YgdGhlIHJlY29yZGVkIGFyZWEgZmFpbGVkXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU5PU1BDKTsKIAkJY2FzZSAweDQxOgogCQkJLyogUmVjb3JkIHNlcXVlbmNlIGVycm9yLiAqLwotCQkJUFJJTlRfV0FSTigiSW52YWxpZCBibG9jay1pZCBzZXF1ZW5jZSBmb3VuZC5cbiIpOworCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIGNvbnRhaW5zIGFuICIKKwkJCQkiaW5jb3JyZWN0IGJsb2NrIElEIHNlcXVlbmNlXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAkJZGVmYXVsdDoKIAkJCS8qIGFsbCBkYXRhIGNoZWNrcyBmb3IgMzQ4MCBzaG91bGQgcmVzdWx0IGluIG9uZSBvZgpAQCAtNDcwLDE2ICs0NjYsMTIgQEAKIAlzd2l0Y2ggKHNlbnNlWzNdKSB7CiAJY2FzZSAweDAwOgogCQkvKiBVbml0IGNoZWNrIHdpdGggZXJwYSBjb2RlIDAuIFJlcG9ydCBhbmQgaWdub3JlLiAqLwotCQlQUklOVF9XQVJOKCJOb24tZXJyb3Igc2Vuc2Ugd2FzIGZvdW5kLiAiCi0JCQkgICAiVW5pdC1jaGVjayB3aWxsIGJlIGlnbm9yZWQuXG4iKTsKIAkJcmV0dXJuIFRBUEVfSU9fU1VDQ0VTUzsKIAljYXNlIDB4MjE6CiAJCS8qCiAJCSAqIERhdGEgc3RyZWFtaW5nIG5vdCBvcGVyYXRpb25hbC4gQ1Ugd2lsbCBzd2l0Y2ggdG8KIAkJICogaW50ZXJsb2NrIG1vZGUuIFJlaXNzdWUgdGhlIGNvbW1hbmQuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJEYXRhIHN0cmVhbWluZyBub3Qgb3BlcmF0aW9uYWwuICIKLQkJCSAgICJTd2l0Y2hpbmcgdG8gaW50ZXJsb2NrLW1vZGUuXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7CiAJY2FzZSAweDIyOgogCQkvKgpAQCAtNDg3LDExICs0NzksOCBAQAogCQkgKiBlcnJvciBvbiB0aGUgbG93ZXIgaW50ZXJmYWNlLCBpbnRlcm5hbCBwYXRoIG5vdCB1c2FibGUsCiAJCSAqIG9yIGVycm9yIGR1cmluZyBjYXJ0cmlkZ2UgbG9hZC4KIAkJICovCi0JCVBSSU5UX1dBUk4oIkEgcGF0aCBlcXVpcG1lbnQgY2hlY2sgb2NjdXJyZWQuIE9uZSBvZiB0aGUgIgotCQkJICAgImZvbGxvd2luZyBjb25kaXRpb25zIG9jY3VycmVkOlxuIik7Ci0JCVBSSU5UX1dBUk4oImRyaXZlIGFkYXB0ZXIgZXJyb3IsIGJ1ZmZlciBlcnJvciBvbiB0aGUgbG93ZXIgIgotCQkJICAgImludGVyZmFjZSwgaW50ZXJuYWwgcGF0aCBub3QgdXNhYmxlLCBlcnJvciAiCi0JCQkgICAiZHVyaW5nIGNhcnRyaWRnZSBsb2FkLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHBhdGggZXF1aXBtZW50IGNoZWNrIG9jY3VycmVkIgorCQkJIiBmb3IgdGhlIHRhcGUgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgyNDoKIAkJLyoKQEAgLTUxNCw3ICs1MDMsNiBAQAogCQkgKiBidXQgdGhlIGhhcmR3YXJlIGlzbid0IGNhcGFibGUgdG8gZG8gaWRyYywgb3IgYSBwZXJmb3JtCiAJCSAqIHN1YnN5c3RlbSBmdW5jIGlzIGlzc3VlZCBhbmQgdGhlIENVIGlzIG5vdCBvbi1saW5lLgogCQkgKi8KLQkJUFJJTlRfV0FSTiAoIkZ1bmN0aW9uIGluY29tcGF0aWJsZS4gVHJ5IHRvIHN3aXRjaCBvZmYgaWRyY1xuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4MmE6CiAJCS8qCkBAIC01NTIsMjMgKzU0MCwyNiBAQAogCQkgKiByZWFkaW5nIHRoZSBmb3JtYXQgaWQgbWFyayBvciB0aGF0IHRoYXQgZm9ybWF0IHNwZWNpZmllZAogCQkgKiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIkRyaXZlIG5vdCBjYXBhYmxlIHByb2Nlc3NpbmcgdGhlIHRhcGUgZm9ybWF0IVxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGNhbm5vdCBwcm9jZXNzICIKKwkJCSJ0aGUgdGFwZSBmb3JtYXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVNRURJVU1UWVBFKTsKIAljYXNlIDB4MzA6CiAJCS8qIFRoZSBtZWRpdW0gaXMgd3JpdGUgcHJvdGVjdGVkLiAqLwotCQlQUklOVF9XQVJOKCJNZWRpdW0gaXMgd3JpdGUgcHJvdGVjdGVkIVxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBtZWRpdW0gaXMgd3JpdGUtIgorCQkJInByb3RlY3RlZFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUFDQ0VTKTsKIAljYXNlIDB4MzI6CiAJCS8vIFRlbnNpb24gbG9zcy4gV2UgY2Fubm90IHJlY292ZXIgdGhpcywgaXQncyBhbiBJL08gZXJyb3IuCi0JCVBSSU5UX1dBUk4oIlRoZSBkcml2ZSBsb3N0IHRhcGUgdGVuc2lvbi5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgZG9lcyBub3QgaGF2ZSB0aGUgIgorCQkJInJlcXVpcmVkIHRhcGUgdGVuc2lvblxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4MzM6CiAJCS8qCiAJCSAqIExvYWQgRmFpbHVyZS4gVGhlIGNhcnRyaWRnZSB3YXMgbm90IGluc2VydGVkIGNvcnJlY3RseSBvcgogCQkgKiB0aGUgdGFwZSBpcyBub3QgdGhyZWFkZWQgY29ycmVjdGx5LgogCQkgKi8KLQkJUFJJTlRfV0FSTigiQ2FydHJpZGdlIGxvYWQgZmFpbHVyZS4gUmVsb2FkIHRoZSBjYXJ0cmlkZ2UgIgotCQkJICAgImFuZCB0cnkgYWdhaW4uXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgZmFpbGVkIHRvIGxvYWQiCisJCQkiIHRoZSBjYXJ0cmlkZ2VcbiIpOwogCQl0YXBlXzM0eHhfZGVsZXRlX3NiaWRfZnJvbShkZXZpY2UsIDApOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDM0OgpAQCAtNTc2LDggKzU2Nyw4IEBACiAJCSAqIFVubG9hZCBmYWlsdXJlLiBUaGUgZHJpdmUgY2Fubm90IG1haW50YWluIHRhcGUgdGVuc2lvbgogCQkgKiBhbmQgY29udHJvbCB0YXBlIG1vdmVtZW50IGR1cmluZyBhbiB1bmxvYWQgb3BlcmF0aW9uLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiRmFpbHVyZSBkdXJpbmcgY2FydHJpZGdlIHVubG9hZC4gIgotCQkJICAgIlBsZWFzZSB0cnkgbWFudWFsbHkuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkF1dG9tYXRpYyB1bmxvYWRpbmcgb2YgdGhlIHRhcGUiCisJCQkiIGNhcnRyaWRnZSBmYWlsZWRcbiIpOwogCQlpZiAocmVxdWVzdC0+b3AgPT0gVE9fUlVOKQogCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9idWcoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIHNlbnNlWzNdKTsKQEAgLTU4OSw4ICs1ODAsOCBAQAogCQkgKiAtIHRoZSBjYXJ0cmlkZ2UgbG9hZGVyIGRvZXMgbm90IHJlc3BvbmQgY29ycmVjdGx5CiAJCSAqIC0gYSBmYWlsdXJlIG9jY3VycyBkdXJpbmcgYW4gaW5kZXgsIGxvYWQsIG9yIHVubG9hZCBjeWNsZQogCQkgKi8KLQkJUFJJTlRfV0FSTigiRXF1aXBtZW50IGNoZWNrISBQbGVhc2UgY2hlY2sgdGhlIGRyaXZlIGFuZCAiCi0JCQkgICAidGhlIGNhcnRyaWRnZSBsb2FkZXIuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIGVxdWlwbWVudCBjaGVjayBoYXMgb2NjdXJyZWQiCisJCQkiIG9uIHRoZSB0YXBlIHVuaXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDM2OgogCQlpZiAoZGV2aWNlLT5jZGV2LT5pZC5kcml2ZXJfaW5mbyA9PSB0YXBlXzM0OTApCkBAIC02MDMsNyArNTk0LDggQEAKIAkJICogVGFwZSBsZW5ndGggZXJyb3IuIFRoZSB0YXBlIGlzIHNob3J0ZXIgdGhhbiByZXBvcnRlZCBpbgogCQkgKiB0aGUgYmVnaW5uaW5nLW9mLXRhcGUgZGF0YS4KIAkJICovCi0JCVBSSU5UX1dBUk4oIlRhcGUgbGVuZ3RoIGVycm9yLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBpbmZvcm1hdGlvbiBzdGF0ZXMgYW4iCisJCQkiIGluY29ycmVjdCBsZW5ndGhcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDM4OgogCQkvKgpAQCAtNjIwLDEyICs2MTIsMTIgQEAKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgzYToKIAkJLyogRHJpdmUgc3dpdGNoZWQgdG8gbm90IHJlYWR5LiAqLwotCQlQUklOVF9XQVJOKCJEcml2ZSBub3QgcmVhZHkuIFR1cm4gdGhlIHJlYWR5L25vdCByZWFkeSBzd2l0Y2ggIgotCQkJICAgInRvIHJlYWR5IHBvc2l0aW9uIGFuZCB0cnkgYWdhaW4uXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgaXMgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHgzYjoKIAkJLyogTWFudWFsIHJld2luZCBvciB1bmxvYWQuIFRoaXMgY2F1c2VzIGFuIEkvTyBlcnJvci4gKi8KLQkJUFJJTlRfV0FSTigiTWVkaXVtIHdhcyByZXdvdW5kIG9yIHVubG9hZGVkIG1hbnVhbGx5LlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBtZWRpdW0gaGFzIGJlZW4gIgorCQkJInJld291bmQgb3IgdW5sb2FkZWQgbWFudWFsbHlcbiIpOwogCQl0YXBlXzM0eHhfZGVsZXRlX3NiaWRfZnJvbShkZXZpY2UsIDApOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDQyOgpAQCAtNjMzLDcgKzYyNSw4IEBACiAJCSAqIERlZ3JhZGVkIG1vZGUuIEEgY29uZGl0aW9uIHRoYXQgY2FuIGNhdXNlIGRlZ3JhZGVkCiAJCSAqIHBlcmZvcm1hbmNlIGlzIGRldGVjdGVkLgogCQkgKi8KLQkJUFJJTlRfV0FSTigiU3Vic3lzdGVtIGlzIHJ1bm5pbmcgaW4gZGVncmFkZWQgbW9kZS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgc3Vic3lzdGVtIGlzIHJ1bm5pbmcgIgorCQkJImluIGRlZ3JhZGVkIG1vZGVcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAljYXNlIDB4NDM6CiAJCS8qIERyaXZlIG5vdCByZWFkeS4gKi8KQEAgLTY1Miw3ICs2NDUsNiBAQAogCQkJCQlicmVhazsKIAkJCX0KIAkJfQotCQlQUklOVF9XQVJOKCJUaGUgZHJpdmUgaXMgbm90IHJlYWR5LlxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU5PTUVESVVNKTsKIAljYXNlIDB4NDQ6CiAJCS8qIExvY2F0ZSBCbG9jayB1bnN1Y2Nlc3NmdWwuICovCkBAIC02NjMsNyArNjU1LDggQEAKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0NToKIAkJLyogVGhlIGRyaXZlIGlzIGFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IGNoYW5uZWwgcGF0aC4gKi8KLQkJUFJJTlRfV0FSTigiVGhlIGRyaXZlIGlzIGFzc2lnbmVkIGVsc2V3aGVyZS5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBpcyBhbHJlYWR5ICIKKwkJCSJhc3NpZ25lZFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NDY6CiAJCS8qCkBAIC02NzEsMTEgKzY2NCwxMiBAQAogCQkgKiB0aGUgcG93ZXIgc3VwcGx5IG1heSBiZSBzd2l0Y2hlZCBvZmYgb3IKIAkJICogdGhlIGRyaXZlIGFkZHJlc3MgbWF5IG5vdCBiZSBzZXQgY29ycmVjdGx5LgogCQkgKi8KLQkJUFJJTlRfV0FSTigiVGhlIGRyaXZlIGlzIG5vdCBvbi1saW5lLiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBpcyBub3Qgb25saW5lXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0NzoKIAkJLyogVm9sdW1lIGZlbmNlZC4gQ1UgcmVwb3J0cyB2b2x1bWUgaW50ZWdyaXR5IGlzIGxvc3QuICovCi0JCVBSSU5UX1dBUk4oIlZvbHVtZSBmZW5jZWQuIFRoZSB2b2x1bWUgaW50ZWdyaXR5IGlzIGxvc3QuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBjb250cm9sIHVuaXQgaGFzIGZlbmNlZCAiCisJCQkiYWNjZXNzIHRvIHRoZSB0YXBlIHZvbHVtZVxuIik7CiAJCXRhcGVfMzR4eF9kZWxldGVfc2JpZF9mcm9tKGRldmljZSwgMCk7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NDg6CkBAIC02ODMsMjAgKzY3NywyMSBAQAogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAljYXNlIDB4NDk6CiAJCS8qIEJ1cyBvdXQgY2hlY2suIEEgcGFyaXR5IGNoZWNrIGVycm9yIG9uIHRoZSBidXMgd2FzIGZvdW5kLiAqLwotCQlQUklOVF9XQVJOKCJCdXMgb3V0IGNoZWNrLiBBIGRhdGEgdHJhbnNmZXIgb3ZlciB0aGUgYnVzICIKLQkJCSAgICJoYXMgYmVlbiBjb3JydXB0ZWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgcGFyaXR5IGVycm9yIG9jY3VycmVkIG9uIHRoZSAiCisJCQkidGFwZSBidXNcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDRhOgogCQkvKiBDb250cm9sIHVuaXQgZXJwIGZhaWxlZC4gKi8KLQkJUFJJTlRfV0FSTigiVGhlIGNvbnRyb2wgdW5pdCBJL08gZXJyb3IgcmVjb3ZlcnkgZmFpbGVkLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJJL08gZXJyb3IgcmVjb3ZlcnkgZmFpbGVkIG9uICIKKwkJCSJ0aGUgdGFwZSBjb250cm9sIHVuaXRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDRiOgogCQkvKgogCQkgKiBDVSBhbmQgZHJpdmUgaW5jb21wYXRpYmxlLiBUaGUgZHJpdmUgcmVxdWVzdHMgbWljcm8tcHJvZ3JhbQogCQkgKiBwYXRjaGVzLCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSBvbiB0aGUgQ1UuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJUaGUgZHJpdmUgbmVlZHMgbWljcm9wcm9ncmFtIHBhdGNoZXMgZnJvbSB0aGUgIgotCQkJICAgImNvbnRyb2wgdW5pdCwgd2hpY2ggYXJlIG5vdCBhdmFpbGFibGUuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgcmVxdWlyZXMgYSAiCisJCQkiZmlybXdhcmUgdXBkYXRlXG4iKTsKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FSU8pOwogCWNhc2UgMHg0YzoKIAkJLyoKQEAgLTcyMSw4ICs3MTYsOCBAQAogCQkJICogdGhlIGJsb2NrIHRvIGJlIHdyaXR0ZW4gaXMgbGFyZ2VyIHRoYW4gYWxsb3dlZCBmb3IKIAkJCSAqIGJ1ZmZlcmVkIG1vZGUuCiAJCQkgKi8KLQkJCVBSSU5UX1dBUk4oIk1heGltdW0gYmxvY2sgc2l6ZSBmb3IgYnVmZmVyZWQgIgotCQkJCSAgICJtb2RlIGV4Y2VlZGVkLlxuIik7CisJCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIG1heGltdW0gYmxvY2sgc2l6ZSIKKwkJCQkiIGZvciBidWZmZXJlZCBtb2RlIGlzIGV4Y2VlZGVkXG4iKTsKIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU5PQlVGUyk7CiAJCX0KIAkJLyogVGhpcyBlcnBhIGlzIHJlc2VydmVkIGZvciAzNDgwLiAqLwpAQCAtNzU5LDIyICs3NTQsMjAgQEAKIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7CiAJY2FzZSAweDU1OgogCQkvKiBDaGFubmVsIGludGVyZmFjZSByZWNvdmVyeSAocGVybWFuZW50KS4gKi8KLQkJUFJJTlRfV0FSTigiQSBwZXJtYW5lbnQgY2hhbm5lbCBpbnRlcmZhY2UgZXJyb3Igb2NjdXJyZWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgY2hhbm5lbCBpbnRlcmZhY2UgZXJyb3IgY2Fubm90IGJlIgorCQkJIiByZWNvdmVyZWRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDU2OgogCQkvKiBDaGFubmVsIHByb3RvY29sIGVycm9yLiAqLwotCQlQUklOVF9XQVJOKCJBIGNoYW5uZWwgcHJvdG9jb2wgZXJyb3Igb2NjdXJyZWQuXG4iKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgY2hhbm5lbCBwcm90b2NvbCBlcnJvciAiCisJCQkib2NjdXJyZWRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDU3OgogCQlpZiAoZGV2aWNlLT5jZGV2LT5pZC5kcml2ZXJfaW5mbyA9PSB0YXBlXzM0ODApIHsKIAkJCS8qIEF0dGVudGlvbiBpbnRlcmNlcHQuICovCi0JCQlQUklOVF9XQVJOKCJBbiBhdHRlbnRpb24gaW50ZXJjZXB0IG9jY3VycmVkLCAiCi0JCQkJICAgIndoaWNoIHdpbGwgYmUgcmVjb3ZlcmVkLlxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAkJfSBlbHNlIHsKIAkJCS8qIEdsb2JhbCBzdGF0dXMgaW50ZXJjZXB0LiAqLwotCQkJUFJJTlRfV0FSTigiQW4gZ2xvYmFsIHN0YXR1cyBpbnRlcmNlcHQgd2FzIHJlY2VpdmVkLCAiCi0JCQkJICAgIndoaWNoIHdpbGwgYmUgcmVjb3ZlcmVkLlxuIik7CiAJCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAkJfQogCWNhc2UgMHg1YToKQEAgLTc4Miw0MiArNzc1LDMxIEBACiAJCSAqIFRhcGUgbGVuZ3RoIGluY29tcGF0aWJsZS4gVGhlIHRhcGUgaW5zZXJ0ZWQgaXMgdG9vIGxvbmcsCiAJCSAqIHdoaWNoIGNvdWxkIGNhdXNlIGRhbWFnZSB0byB0aGUgdGFwZSBvciB0aGUgZHJpdmUuCiAJCSAqLwotCQlQUklOVF9XQVJOKCJUYXBlIExlbmd0aCBJbmNvbXBhdGlibGVcbiIpOwotCQlQUklOVF9XQVJOKCJUYXBlIGxlbmd0aCBleGNlZWRzIElCTSBlbmhhbmNlZCBjYXBhY2l0eSAiCi0JCQkiY2FydGRyaWRnZSBsZW5ndGggb3IgYSBtZWRpdW1cbiIpOwotCQlQUklOVF9XQVJOKCJ3aXRoIEVDLUNTVCBpZGVudGlmaWNhdGlvbiBtYXJrIGhhcyBiZWVuIG1vdW50ZWQgIgotCQkJImluIGEgZGV2aWNlIHRoYXQgd3JpdGVzXG4iKTsKLQkJUFJJTlRfV0FSTigiMzQ4MCBvciAzNDgwIFhGIGZvcm1hdC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBkb2VzIG5vdCBzdXBwb3J0ICIKKwkJCSJ0aGUgdGFwZSBsZW5ndGhcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDViOgogCQkvKiBGb3JtYXQgMzQ4MCBYRiBpbmNvbXBhdGlibGUgKi8KIAkJaWYgKHNlbnNlWzFdICYgU0VOU0VfQkVHSU5OSU5HX09GX1RBUEUpCiAJCQkvKiBUaGUgdGFwZSB3aWxsIGdldCBvdmVyd3JpdHRlbi4gKi8KIAkJCXJldHVybiB0YXBlXzM0eHhfZXJwX3JldHJ5KHJlcXVlc3QpOwotCQlQUklOVF9XQVJOKCJGb3JtYXQgMzQ4MCBYRiBJbmNvbXBhdGlibGVcbiIpOwotCQlQUklOVF9XQVJOKCJNZWRpdW0gaGFzIGJlZW4gY3JlYXRlZCBpbiAzNDgwIGZvcm1hdC4gIgotCQkJIlRvIGNoYW5nZSB0aGUgZm9ybWF0IHdyaXRlc1xuIik7Ci0JCVBSSU5UX1dBUk4oIm11c3QgYmUgaXNzdWVkIGF0IEJPVC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBkb2VzIG5vdCBzdXBwb3J0IgorCQkJIiBmb3JtYXQgMzQ4MCBYRlxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRUlPKTsKIAljYXNlIDB4NWM6CiAJCS8qIEZvcm1hdCAzNDgwLTIgWEYgaW5jb21wYXRpYmxlICovCi0JCVBSSU5UX1dBUk4oIkZvcm1hdCAzNDgwLTIgWEYgSW5jb21wYXRpYmxlXG4iKTsKLQkJUFJJTlRfV0FSTigiRGV2aWNlIGNhbiBvbmx5IHJlYWQgMzQ4MCBvciAzNDgwIFhGIGZvcm1hdC5cbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBkb2VzIG5vdCBzdXBwb3J0IHRhcGUgIgorCQkJImZvcm1hdCAzNDgwLTIgWEZcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDVkOgogCQkvKiBUYXBlIGxlbmd0aCB2aW9sYXRpb24uICovCi0JCVBSSU5UX1dBUk4oIlRhcGUgTGVuZ3RoIFZpb2xhdGlvblxuIik7Ci0JCVBSSU5UX1dBUk4oIlRoZSBtb3VudGVkIHRhcGUgZXhjZWVkcyBJQk0gRW5oYW5jZWQgQ2FwYWNpdHkgIgotCQkJIkNhcnRkcmlkZ2UgU3lzdGVtIFRhcGUgbGVuZ3RoLlxuIik7Ci0JCVBSSU5UX1dBUk4oIlRoaXMgbWF5IGNhdXNlIGRhbWFnZSB0byB0aGUgZHJpdmUgb3IgdGFwZSB3aGVuICIKLQkJCSJwcm9jZXNzaW5nIHRvIHRoZSBFT1ZcbiIpOworCQlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgdW5pdCBkb2VzIG5vdCBzdXBwb3J0IgorCQkJIiB0aGUgY3VycmVudCB0YXBlIGxlbmd0aFxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU1FRElVTVRZUEUpOwogCWNhc2UgMHg1ZToKIAkJLyogQ29tcGFjdGlvbiBhbGdvcml0aG0gaW5jb21wYXRpYmxlLiAqLwotCQlQUklOVF9XQVJOKCJDb21wYWN0aW9uIEFsZ29yaXRobSBJbmNvbXBhdGlibGVcbiIpOwotCQlQUklOVF9XQVJOKCJUaGUgdm9sdW1lIGlzIHJlY29yZGVkIHVzaW5nIGFuIGluY29tcGF0aWJsZSAiCi0JCQkiY29tcGFjdGlvbiBhbGdvcml0aG0sXG4iKTsKLQkJUFJJTlRfV0FSTigid2hpY2ggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlLlxuIik7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGRvZXMgbm90IHN1cHBvcnQiCisJCQkiIHRoZSBjb21wYWN0aW9uIGFsZ29yaXRobVxuIik7CiAJCXJldHVybiB0YXBlXzM0eHhfZXJwX2ZhaWxlZChyZXF1ZXN0LCAtRU1FRElVTVRZUEUpOwogCiAJCS8qIFRoZSBmb2xsb3dpbmcgZXJwYXMgc2hvdWxkIGhhdmUgYmVlbiBjb3ZlcmVkIGVhcmxpZXIuICovCkBAIC04NDgsNyArODMwLDYgQEAKIAkgICAgKGlyYi0+c2Nzdy5jbWQuZHN0YXQgJiBERVZfU1RBVF9ERVZfRU5EKSAmJgogCSAgICAocmVxdWVzdC0+b3AgPT0gVE9fV1JJKSkgewogCQkvKiBXcml0ZSBhdCBlbmQgb2Ygdm9sdW1lICovCi0JCVBSSU5UX0lORk8oIkVuZCBvZiB2b2x1bWVcbiIpOyAvKiBYWFggKi8KIAkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfZmFpbGVkKHJlcXVlc3QsIC1FTk9TUEMpOwogCX0KIApAQCAtODY5LDkgKzg1MCw3IEBACiAJfQogCiAJREJGX0VWRU5UKDYsICJ4dW5rbm93bmlycVxuIik7Ci0JUFJJTlRfRVJSKCJVbmV4cGVjdGVkIGludGVycnVwdC5cbiIpOwotCVBSSU5UX0VSUigiQ3VycmVudCBvcCBpczogJXMiLCB0YXBlX29wX3ZlcmJvc2VbcmVxdWVzdC0+b3BdKTsKLQl0YXBlX2R1bXBfc2Vuc2UoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOworCXRhcGVfZHVtcF9zZW5zZV9kYmYoZGV2aWNlLCByZXF1ZXN0LCBpcmIpOwogCXJldHVybiBUQVBFX0lPX1NUT1A7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzU5MC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKaW5kZXggNzE2MDVhMS4uZmMxZDkxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMKQEAgLTgsMTIgKzgsMTUgQEAKICAqCQkgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgogCiAjZGVmaW5lIFRBUEVfREJGX0FSRUEJdGFwZV8zNTkwX2RiZgorI2RlZmluZSBCVUZTSVpFIDUxMgkvKiBzaXplIG9mIGJ1ZmZlcnMgZm9yIGR5bmFtaWMgZ2VuZXJhdGVkIG1lc3NhZ2VzICovCiAKICNpbmNsdWRlICJ0YXBlLmgiCiAjaW5jbHVkZSAidGFwZV9zdGQuaCIKQEAgLTM2LDcgKzM5LDcgQEAKICAqIC0gUmVhZCBBbHRlcm5hdGU6CQkgaW1wbGVtZW50ZWQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIFBSSU5US19IRUFERVIgIlRBUEVfMzU5MDogIgorI2RlZmluZSBLTVNHX0NPTVBPTkVOVCAidGFwZSIKIAogc3RhdGljIGNvbnN0IGNoYXIgKnRhcGVfMzU5MF9tc2dbVEFQRV8zNTkwX01BWF9NU0ddID0gewogCVsweDAwXSA9ICIiLApAQCAtNjYxLDggKzY2NCw3IEBACiAJCQljY3crKzsKIAkJCWRzdCArPSBUQVBFQkxPQ0tfSFNFQ19TSVpFOwogCQl9Ci0JCWlmIChvZmYgPiBidi0+YnZfbGVuKQotCQkJQlVHKCk7CisJCUJVR19PTihvZmYgPiBidi0+YnZfbGVuKTsKIAl9CiAJY2N3ID0gdGFwZV9jY3dfZW5kKGNjdywgTk9QLCAwLCBOVUxMKTsKIAlEQkZfRVZFTlQoNiwgInhCUkVEY2N3Z1xuIik7CkBAIC03MjYsNyArNzI4LDcgQEAKIAl9CiAJY19pbmZvLT5tZWRpdW1fc3RhdHVzIHw9IFRBUEUzOTBfTUVESVVNX0xPQURFRF9NQVNLOwogCWlmIChzZW5zZS0+ZmxhZ3MgJiBNU0VOU0VfQ1JZUFRfTUFTSykgewotCQlQUklOVF9JTkZPKCJNZWRpdW0gaXMgZW5jcnlwdGVkICglMDR4KVxuIiwgc2Vuc2UtPmZsYWdzKTsKKwkJREJGX0VWRU5UKDYsICJNZWRpdW0gaXMgZW5jcnlwdGVkICglMDR4KVxuIiwgc2Vuc2UtPmZsYWdzKTsKIAkJY19pbmZvLT5tZWRpdW1fc3RhdHVzIHw9IFRBUEUzOTBfTUVESVVNX0VOQ1JZUFRFRF9NQVNLOwogCX0gZWxzZQl7CiAJCURCRl9FVkVOVCg2LCAiTWVkaXVtIGlzIG5vdCBlbmNyeXB0ZWQgJTA0eFxuIiwgc2Vuc2UtPmZsYWdzKTsKQEAgLTg0Nyw4ICs4NDksNyBAQAogCQl0YXBlXzM1OTBfc2NoZWR1bGVfd29yayhkZXZpY2UsIFRPX1JFQURfQVRUTVNHKTsKIAl9IGVsc2UgewogCQlEQkZfRVZFTlQoMywgInVuc29sLmlycSEgZGV2IGVuZDogJTA4eFxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKLQkJUFJJTlRfV0FSTigiVW5zb2xpY2l0ZWQgSVJRIChEZXZpY2UgRW5kKSBjYXVnaHQuXG4iKTsKLQkJdGFwZV9kdW1wX3NlbnNlKGRldmljZSwgTlVMTCwgaXJiKTsKKwkJdGFwZV9kdW1wX3NlbnNlX2RiZihkZXZpY2UsIE5VTEwsIGlyYik7CiAJfQogCS8qIGNoZWNrIG1lZGl1bSBzdGF0ZSAqLwogCXRhcGVfMzU5MF9zY2hlZHVsZV93b3JrKGRldmljZSwgVE9fTVNFTik7CkBAIC04NzYsOCArODc3LDYgQEAKIAljYXNlIFNFTlNFX0JSQV9EUkU6CiAJCXJldHVybiB0YXBlXzM1OTBfZXJwX2ZhaWxlZChkZXZpY2UsIHJlcXVlc3QsIGlyYiwgcmMpOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX0VSUigiVW5rbm93biBCUkEgJXggLSBUaGlzIHNob3VsZCBub3QgaGFwcGVuIVxuIiwKLQkJCSAgc2Vuc2UtPmJyYSk7CiAJCUJVRygpOwogCQlyZXR1cm4gVEFQRV9JT19TVE9QOwogCX0KQEAgLTkxMCw3ICs5MDksOCBAQAogCSAqIHNob3VsZCBwcm9jZWVkIHdpdGggdGhlIG5ldyB0YXBlLi4uIHRoaXMKIAkgKiBzaG91bGQgcHJvYmFibHkgYmUgZG9uZSBpbiB1c2VyIHNwYWNlIQogCSAqLwotCVBSSU5UX1dBUk4oIiglcyk6IFN3YXAgVGFwZSBEZXZpY2UhXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGhlIHRhcGUgbWVkaXVtIG11c3QgYmUgbG9hZGVkIGludG8gYSAiCisJCSJkaWZmZXJlbnQgdGFwZSB1bml0XG4iKTsKIAlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVJTyk7CiB9CiAKQEAgLTk4NSw4ICs5ODUsNiBAQAogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9mYWlsZWQoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FSU8pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCJyZWFkX29wcG9zaXRlX3JlY292ZXJ5X2NhbGxlZF93aXRoX29wOiAlc1xuIiwKLQkJCSAgIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9mYWlsZWQoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FSU8pOwogCX0KIH0KQEAgLTk5OCw1MCArOTk2LDYxIEBACiB0YXBlXzM1OTBfcHJpbnRfbWltX21zZ19mMChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSwgc3RydWN0IGlyYiAqaXJiKQogewogCXN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKnNlbnNlOworCWNoYXIgKmV4Y2VwdGlvbiwgKnNlcnZpY2U7CisKKwlleGNlcHRpb24gPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCXNlcnZpY2UgPSBrbWFsbG9jKEJVRlNJWkUsIEdGUF9BVE9NSUMpOworCisJaWYgKCFleGNlcHRpb24gfHwgIXNlcnZpY2UpCisJCWdvdG8gb3V0X25vbWVtOwogCiAJc2Vuc2UgPSAoc3RydWN0IHRhcGVfMzU5MF9zZW5zZSAqKSBpcmItPmVjdzsKIAkvKiBFeGNlcHRpb24gTWVzc2FnZSAqLwogCXN3aXRjaCAoc2Vuc2UtPmZtdC5mNzAuZW1jKSB7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBEYXRhIGRlZ3JhZGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRhdGEgZGVncmFkZWQiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAzOgotCQlQUklOVF9XQVJOKCIoJXMpOiBEYXRhIGRlZ3JhZGVkIGluIHBhcnRpb24gJWlcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5tcCk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRhdGEgZGVncmFkZWQgaW4gcGFydGlvbiAlaSIsCisJCQlzZW5zZS0+Zm10LmY3MC5tcCk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNDoKLQkJUFJJTlRfV0FSTigiKCVzKTogTWVkaXVtIGRlZ3JhZGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIk1lZGl1bSBkZWdyYWRlZCIpOwogCQlicmVhazsKIAljYXNlIDB4MDU6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IE1lZGl1bSBkZWdyYWRlZCBpbiBwYXJ0aXRpb24gJWlcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MC5tcCk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIk1lZGl1bSBkZWdyYWRlZCBpbiBwYXJ0aXRpb24gJWkiLAorCQkJc2Vuc2UtPmZtdC5mNzAubXApOwogCQlicmVhazsKIAljYXNlIDB4MDY6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IEJsb2NrIDAgRXJyb3JcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQmxvY2sgMCBFcnJvciIpOwogCQlicmVhazsKIAljYXNlIDB4MDc6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IE1lZGl1bSBFeGNlcHRpb24gMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzAubWQpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJNZWRpdW0gRXhjZXB0aW9uIDB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MC5tZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IE1JTSBFeE1zZzogMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzAuZW1jKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcwLmVtYyk7CiAJCWJyZWFrOwogCX0KIAkvKiBTZXJ2aWNlIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcwLnNtYykgewogCWNhc2UgMHgwMjoKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVmZXJlbmNlIE1lZGlhIG1haW50ZW5hbmNlIHByb2NlZHVyZSAlaVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcwLm1kKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlZmVyZW5jZSBNZWRpYSBtYWludGVuYW5jZSAiCisJCQkicHJvY2VkdXJlICVpIiwgc2Vuc2UtPmZtdC5mNzAubWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBNSU0gU2VydmljZU1zZzogMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzAuc21jKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIjB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MC5zbWMpOwogCQlicmVhazsKIAl9CisKKwlkZXZfd2FybiAoJmRldmljZS0+Y2Rldi0+ZGV2LCAiVGFwZSBtZWRpYSBpbmZvcm1hdGlvbjogZXhjZXB0aW9uICVzLCAiCisJCSJzZXJ2aWNlICVzXG4iLCBleGNlcHRpb24sIHNlcnZpY2UpOworCitvdXRfbm9tZW06CisJa2ZyZWUoZXhjZXB0aW9uKTsKKwlrZnJlZShzZXJ2aWNlKTsKIH0KIAogLyoKQEAgLTEwNTEsMTA4ICsxMDYwLDEwOCBAQAogdGFwZV8zNTkwX3ByaW50X2lvX3NpbV9tc2dfZjEoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBpcmIgKmlyYikKIHsKIAlzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlICpzZW5zZTsKKwljaGFyICpleGNlcHRpb24sICpzZXJ2aWNlOworCisJZXhjZXB0aW9uID0ga21hbGxvYyhCVUZTSVpFLCBHRlBfQVRPTUlDKTsKKwlzZXJ2aWNlID0ga21hbGxvYyhCVUZTSVpFLCBHRlBfQVRPTUlDKTsKKworCWlmICghZXhjZXB0aW9uIHx8ICFzZXJ2aWNlKQorCQlnb3RvIG91dF9ub21lbTsKIAogCXNlbnNlID0gKHN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKikgaXJiLT5lY3c7CiAJLyogRXhjZXB0aW9uIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcxLmVtYykgewogCWNhc2UgMHgwMToKLQkJUFJJTlRfV0FSTigiKCVzKTogRWZmZWN0IG9mIGZhaWx1cmUgaXMgdW5rbm93blxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMjoKLQkJUFJJTlRfV0FSTigiKCVzKTogQ1UgRXhjZXB0aW9uIC0gbm8gcGVyZm9ybWFuY2UgaW1wYWN0XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkNVIEV4Y2VwdGlvbiAtIG5vIHBlcmZvcm1hbmNlICIKKwkJCSJpbXBhY3QiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAzOgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gY2hhbm5lbCBpbnRlcmZhY2UgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gY2hhbm5lbCAiCisJCQkiaW50ZXJmYWNlIDB4JTAyeCIsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gZGV2aWNlIHBhdGggMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJDVSBFeGNlcHRpb24gb24gZGV2aWNlIHBhdGggIgorCQkJIjB4JTAyeCIsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA1OgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gbGlicmFyeSBwYXRoIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQ1UgRXhjZXB0aW9uIG9uIGxpYnJhcnkgcGF0aCAiCisJCQkiMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDY6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IENVIEV4Y2VwdGlvbiBvbiBub2RlIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQ1UgRXhjZXB0aW9uIG9uIG5vZGUgMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgotCQlQUklOVF9XQVJOKCIoJXMpOiBDVSBFeGNlcHRpb24gb24gcGFydGl0aW9uIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiQ1UgRXhjZXB0aW9uIG9uIHBhcnRpdGlvbiAiCisJCQkiMHglMDJ4Iiwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBTSU0gRXhNc2c6IDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLmVtYyk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIjB4JTAyeCIsCisJCQlzZW5zZS0+Zm10LmY3MS5lbWMpOwogCX0KIAkvKiBTZXJ2aWNlIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcxLnNtYykgewogCWNhc2UgMHgwMToKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIGltcGFjdCBpcyB1bmtub3duXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgaW1wYWN0IGlzIHVua25vd24iKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAyOgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBub3QgaW1wYWN0IGN1IHBlcmZvcm1hbmNlXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBub3QgaW1wYWN0IGN1ICIKKwkJCSJwZXJmb3JtYW5jZSIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbm9kZSAiCi0JCQkJICAgIjB4JXggb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBub2RlICIKKwkJCQkiMHgleCBvbiBDVSIsIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBub2RlcyAiCi0JCQkJICAgIigweCV4LTB4JXgpIG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkibm9kZXMgKDB4JXgtMHgleCkgb24gQ1UiLCBzZW5zZS0+Zm10LmY3MS5tZFsxXSwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNDoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjYW5uZWwgcGF0aCAiCi0JCQkJICAgIjB4JXggb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImNoYW5uZWwgcGF0aCAweCV4IG9uIENVIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgY2FubmVsIHBhdGhzICIKLQkJCQkgICAiKDB4JXgtMHgleCkgb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgY2FubmVsIgorCQkJCSIgcGF0aHMgKDB4JXgtMHgleCkgb24gQ1UiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNToKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBkZXZpY2UgcGF0aCAiCi0JCQkJICAgIjB4JXggb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBkZXZpY2UiCisJCQkJIiBwYXRoIDB4JXggb24gQ1UiLCBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgZGV2aWNlIHBhdGhzICIKLQkJCQkgICAiKDB4JXgtMHgleCkgb24gQ1VcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSwgc2Vuc2UtPmZtdC5mNzEubWRbMl0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgZGV2aWNlIgorCQkJCSIgcGF0aHMgKDB4JXgtMHgleCkgb24gQ1UiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNjoKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBsaWJyYXJ5IHBhdGggIgotCQkJCSAgICIweCV4IG9uIENVXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgIgorCQkJCSJsaWJyYXJ5IHBhdGggMHgleCBvbiBDVSIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGxpYnJhcnkgcGF0aHMgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBDVVxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImxpYnJhcnkgcGF0aHMgKDB4JXgtMHgleCkgb24gQ1UiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNzoKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBhY2Nlc3MgdG8gQ1VcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgYWNjZXNzIHRvIENVIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFNJTSBTZXJ2aWNlTXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5zbWMpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcxLnNtYyk7CiAJfQorCisJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkkvTyBzdWJzeXN0ZW0gaW5mb3JtYXRpb246IGV4Y2VwdGlvbiIKKwkJIiAlcywgc2VydmljZSAlc1xuIiwgZXhjZXB0aW9uLCBzZXJ2aWNlKTsKK291dF9ub21lbToKKwlrZnJlZShleGNlcHRpb24pOworCWtmcmVlKHNlcnZpY2UpOwogfQogCiAvKgpAQCAtMTE2MiwxMTEgKzExNzEsMTA5IEBACiB0YXBlXzM1OTBfcHJpbnRfZGV2X3NpbV9tc2dfZjIoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBpcmIgKmlyYikKIHsKIAlzdHJ1Y3QgdGFwZV8zNTkwX3NlbnNlICpzZW5zZTsKKwljaGFyICpleGNlcHRpb24sICpzZXJ2aWNlOworCisJZXhjZXB0aW9uID0ga21hbGxvYyhCVUZTSVpFLCBHRlBfQVRPTUlDKTsKKwlzZXJ2aWNlID0ga21hbGxvYyhCVUZTSVpFLCBHRlBfQVRPTUlDKTsKKworCWlmICghZXhjZXB0aW9uIHx8ICFzZXJ2aWNlKQorCQlnb3RvIG91dF9ub21lbTsKIAogCXNlbnNlID0gKHN0cnVjdCB0YXBlXzM1OTBfc2Vuc2UgKikgaXJiLT5lY3c7CiAJLyogRXhjZXB0aW9uIE1lc3NhZ2UgKi8KIAlzd2l0Y2ggKHNlbnNlLT5mbXQuZjcxLmVtYykgewogCWNhc2UgMHgwMToKLQkJUFJJTlRfV0FSTigiKCVzKTogRWZmZWN0IG9mIGZhaWx1cmUgaXMgdW5rbm93blxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJFZmZlY3Qgb2YgZmFpbHVyZSBpcyB1bmtub3duIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMjoKLQkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIC0gbm8gcGVyZm9ybWFuY2UgaW1wYWN0XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiAtIG5vIHBlcmZvcm1hbmNlIgorCQkJIiBpbXBhY3QiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDAzOgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gb24gY2hhbm5lbCBpbnRlcmZhY2UgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEViBFeGNlcHRpb24gb24gY2hhbm5lbCAiCisJCQkiaW50ZXJmYWNlIDB4JTAyeCIsIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEViBFeGNlcHRpb24gb24gbG9hZGVyIDB4JTAyeFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLm1kWzBdKTsKKwkJc25wcmludGYoZXhjZXB0aW9uLCBCVUZTSVpFLCAiRFYgRXhjZXB0aW9uIG9uIGxvYWRlciAweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEubWRbMF0pOwogCQlicmVhazsKIAljYXNlIDB4MDU6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IERWIEV4Y2VwdGlvbiBvbiBtZXNzYWdlIGRpc3BsYXkgMHglMDJ4XG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPmZtdC5mNzEubWRbMF0pOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEViBFeGNlcHRpb24gb24gbWVzc2FnZSBkaXNwbGF5IgorCQkJIiAweCUwMngiLCBzZW5zZS0+Zm10LmY3MS5tZFswXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNjoKLQkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIGluIHRhcGUgcGF0aFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICJEViBFeGNlcHRpb24gaW4gdGFwZSBwYXRoIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwNzoKLQkJUFJJTlRfV0FSTigiKCVzKTogRFYgRXhjZXB0aW9uIGluIGRyaXZlXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCXNucHJpbnRmKGV4Y2VwdGlvbiwgQlVGU0laRSwgIkRWIEV4Y2VwdGlvbiBpbiBkcml2ZSIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlQUklOVF9XQVJOKCIoJXMpOiBEU0lNIEV4TXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5lbWMpOworCQlzbnByaW50ZihleGNlcHRpb24sIEJVRlNJWkUsICIweCUwMngiLAorCQkJc2Vuc2UtPmZtdC5mNzEuZW1jKTsKIAl9CiAJLyogU2VydmljZSBNZXNzYWdlICovCiAJc3dpdGNoIChzZW5zZS0+Zm10LmY3MS5zbWMpIHsKIAljYXNlIDB4MDE6Ci0JCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciBpbXBhY3QgaXMgdW5rbm93blxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIGltcGFjdCBpcyB1bmtub3duIik7CiAJCWJyZWFrOwogCWNhc2UgMHgwMjoKLQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgbm90IGltcGFjdCBkZXZpY2UgcGVyZm9ybWFuY2VcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIG5vdCBpbXBhY3QgZGV2aWNlICIKKwkJCSJwZXJmb3JtYW5jZSIpOwogCQlicmVhazsKIAljYXNlIDB4MDM6CiAJCWlmIChzZW5zZS0+Zm10LmY3MS5tZGYgPT0gMCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgY2hhbm5lbCBwYXRoICIKLQkJCQkgICAiMHgleCBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkiY2hhbm5lbCBwYXRoIDB4JXggb24gRFYiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBjaGFubmVsIHBhdGggIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImNoYW5uZWwgcGF0aCAoMHgleC0weCV4KSBvbiBEViIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA0OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGludGVyZmFjZSAweCV4ICIKLQkJCQkgICAib24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImludGVyZmFjZSAweCV4IG9uIERWIiwgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOwogCQllbHNlCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGludGVyZmFjZXMgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJImludGVyZmFjZXMgKDB4JXgtMHgleCkgb24gRFYiLAorCQkJCXNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwNToKIAkJaWYgKHNlbnNlLT5mbXQuZjcxLm1kZiA9PSAwKQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBsb2FkZXIgMHgleCAiCi0JCQkJICAgIm9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0pOworCQkJc25wcmludGYoc2VydmljZSwgQlVGU0laRSwgIlJlcGFpciB3aWxsIGRpc2FibGUgbG9hZGVyIgorCQkJCSIgMHgleCBvbiBEViIsIHNlbnNlLT5mbXQuZjcxLm1kWzFdKTsKIAkJZWxzZQotCQkJUFJJTlRfV0FSTigiKCVzKTogUmVwYWlyIHdpbGwgZGlzYWJsZSBsb2FkZXIgIgotCQkJCSAgICIoMHgleC0weCV4KSBvbiBEVlxuIiwKLQkJCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBsb2FkZXIiCisJCQkJIiAoMHgleC0weCV4KSBvbiBEViIsCisJCQkJc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA3OgotCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIGFjY2VzcyB0byBEVlxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSBhY2Nlc3MgdG8gRFYiKTsKIAkJYnJlYWs7CiAJY2FzZSAweDA4OgogCQlpZiAoc2Vuc2UtPmZtdC5mNzEubWRmID09IDApCi0JCQlQUklOVF9XQVJOKCIoJXMpOiBSZXBhaXIgd2lsbCBkaXNhYmxlIG1lc3NhZ2UgIgotCQkJCSAgICJkaXNwbGF5IDB4JXggb24gRFZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwKLQkJCQkgICBzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CisJCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiUmVwYWlyIHdpbGwgZGlzYWJsZSAiCisJCQkJIm1lc3NhZ2UgZGlzcGxheSAweCV4IG9uIERWIiwKKwkJCQlzZW5zZS0+Zm10LmY3MS5tZFsxXSk7CiAJCWVsc2UKLQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcGFpciB3aWxsIGRpc2FibGUgbWVzc2FnZSAiCi0JCQkJICAgImRpc3BsYXlzICgweCV4LTB4JXgpIG9uIERWXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksCi0JCQkJICAgc2Vuc2UtPmZtdC5mNzEubWRbMV0sIHNlbnNlLT5mbXQuZjcxLm1kWzJdKTsKKwkJCXNucHJpbnRmKHNlcnZpY2UsIEJVRlNJWkUsICJSZXBhaXIgd2lsbCBkaXNhYmxlICIKKwkJCQkibWVzc2FnZSBkaXNwbGF5cyAoMHgleC0weCV4KSBvbiBEViIsCisJCQkJIHNlbnNlLT5mbXQuZjcxLm1kWzFdLCBzZW5zZS0+Zm10LmY3MS5tZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgMHgwOToKLQkJUFJJTlRfV0FSTigiKCVzKTogQ2xlYW4gRFZcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiQ2xlYW4gRFYiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUFJJTlRfV0FSTigiKCVzKTogRFNJTSBTZXJ2aWNlTXNnOiAweCUwMnhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5zbWMpOworCQlzbnByaW50ZihzZXJ2aWNlLCBCVUZTSVpFLCAiMHglMDJ4IiwKKwkJCXNlbnNlLT5mbXQuZjcxLnNtYyk7CiAJfQorCisJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRldmljZSBzdWJzeXN0ZW0gaW5mb3JtYXRpb246IGV4Y2VwdGlvbiIKKwkJIiAlcywgc2VydmljZSAlc1xuIiwgZXhjZXB0aW9uLCBzZXJ2aWNlKTsKK291dF9ub21lbToKKwlrZnJlZShleGNlcHRpb24pOworCWtmcmVlKHNlcnZpY2UpOwogfQogCiAvKgpAQCAtMTI4Miw0NiArMTI4OSw0NCBAQAogCQlyZXR1cm47CiAJaWYgKChzZW5zZS0+bWMgPiAwKSAmJiAoc2Vuc2UtPm1jIDwgVEFQRV8zNTkwX01BWF9NU0cpKSB7CiAJCWlmICh0YXBlXzM1OTBfbXNnW3NlbnNlLT5tY10gIT0gTlVMTCkKLQkJCVBSSU5UX1dBUk4oIiglcyk6ICVzXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJCSAgIHRhcGVfMzU5MF9tc2dbc2Vuc2UtPm1jXSk7Ci0JCWVsc2UgewotCQkJUFJJTlRfV0FSTigiKCVzKTogTWVzc2FnZSBDb2RlIDB4JXhcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSwgc2Vuc2UtPm1jKTsKLQkJfQorCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgaGFzICIKKwkJCQkiaXNzdWVkIHNlbnNlIG1lc3NhZ2UgJXNcbiIsCisJCQkJdGFwZV8zNTkwX21zZ1tzZW5zZS0+bWNdKTsKKwkJZWxzZQorCQkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSB0YXBlIHVuaXQgaGFzICIKKwkJCQkiaXNzdWVkIGFuIHVua25vd24gc2Vuc2UgbWVzc2FnZSBjb2RlIDB4JXhcbiIsCisJCQkJc2Vuc2UtPm1jKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoc2Vuc2UtPm1jID09IDB4ZjApIHsKIAkJLyogU3RhbmRhcmQgTWVkaWEgSW5mb3JtYXRpb24gTWVzc2FnZSAqLwotCQlQUklOVF9XQVJOKCIoJXMpOiBNSU0gU0VWPSVpLCBNQz0lMDJ4LCBFUz0leC8leCwgIgotCQkJICAgIlJDPSUwMngtJTA0eC0lMDJ4XG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAotCQkJICAgc2Vuc2UtPmZtdC5mNzAuc2V2LCBzZW5zZS0+bWMsCi0JCQkgICBzZW5zZS0+Zm10LmY3MC5lbWMsIHNlbnNlLT5mbXQuZjcwLnNtYywKLQkJCSAgIHNlbnNlLT5mbXQuZjcwLnJlZmNvZGUsIHNlbnNlLT5mbXQuZjcwLm1pZCwKLQkJCSAgIHNlbnNlLT5mbXQuZjcwLmZpZCk7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJNSU0gU0VWPSVpLCBNQz0lMDJ4LCBFUz0leC8leCwgIgorCQkJIlJDPSUwMngtJTA0eC0lMDJ4XG4iLCBzZW5zZS0+Zm10LmY3MC5zZXYsIHNlbnNlLT5tYywKKwkJCXNlbnNlLT5mbXQuZjcwLmVtYywgc2Vuc2UtPmZtdC5mNzAuc21jLAorCQkJc2Vuc2UtPmZtdC5mNzAucmVmY29kZSwgc2Vuc2UtPmZtdC5mNzAubWlkLAorCQkJc2Vuc2UtPmZtdC5mNzAuZmlkKTsKIAkJdGFwZV8zNTkwX3ByaW50X21pbV9tc2dfZjAoZGV2aWNlLCBpcmIpOwogCQlyZXR1cm47CiAJfQogCWlmIChzZW5zZS0+bWMgPT0gMHhmMSkgewogCQkvKiBTdGFuZGFyZCBJL08gU3Vic3lzdGVtIFNlcnZpY2UgSW5mb3JtYXRpb24gTWVzc2FnZSAqLwotCQlQUklOVF9XQVJOKCIoJXMpOiBJT1NJTSBTRVY9JWksIERFVlRZUEU9MzU5MC8lMDJ4LCAiCi0JCQkgICAiTUM9JTAyeCwgRVM9JXgvJXgsIFJFRj0weCUwNHgtMHglMDR4LTB4JTA0eFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldiksIHNlbnNlLT5mbXQuZjcxLnNldiwKLQkJCSAgIGRldmljZS0+Y2Rldi0+aWQuZGV2X21vZGVsLAotCQkJICAgc2Vuc2UtPm1jLCBzZW5zZS0+Zm10LmY3MS5lbWMsCi0JCQkgICBzZW5zZS0+Zm10LmY3MS5zbWMsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUxLAotCQkJICAgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTIsIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUzKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIklPU0lNIFNFVj0laSwgREVWVFlQRT0zNTkwLyUwMngsIgorCQkJIiBNQz0lMDJ4LCBFUz0leC8leCwgUkVGPTB4JTA0eC0weCUwNHgtMHglMDR4XG4iLAorCQkJc2Vuc2UtPmZtdC5mNzEuc2V2LCBkZXZpY2UtPmNkZXYtPmlkLmRldl9tb2RlbCwKKwkJCXNlbnNlLT5tYywgc2Vuc2UtPmZtdC5mNzEuZW1jLCBzZW5zZS0+Zm10LmY3MS5zbWMsCisJCQlzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMSwgc2Vuc2UtPmZtdC5mNzEucmVmY29kZTIsCisJCQlzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMyk7CiAJCXRhcGVfMzU5MF9wcmludF9pb19zaW1fbXNnX2YxKGRldmljZSwgaXJiKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoc2Vuc2UtPm1jID09IDB4ZjIpIHsKIAkJLyogU3RhbmRhcmQgRGV2aWNlIFNlcnZpY2UgSW5mb3JtYXRpb24gTWVzc2FnZSAqLwotCQlQUklOVF9XQVJOKCIoJXMpOiBERVZTSU0gU0VWPSVpLCBERVZUWVBFPTM1OTAvJTAyeCwgIgotCQkJICAgIk1DPSUwMngsIEVTPSV4LyV4LCBSRUY9MHglMDR4LTB4JTA0eC0weCUwNHhcbiIsCi0JCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+Zm10LmY3MS5zZXYsCi0JCQkgICBkZXZpY2UtPmNkZXYtPmlkLmRldl9tb2RlbCwKLQkJCSAgIHNlbnNlLT5tYywgc2Vuc2UtPmZtdC5mNzEuZW1jLAotCQkJICAgc2Vuc2UtPmZtdC5mNzEuc21jLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMSwKLQkJCSAgIHNlbnNlLT5mbXQuZjcxLnJlZmNvZGUyLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMyk7CisJCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJERVZTSU0gU0VWPSVpLCBERVZUWVBFPTM1OTAvJTAyeCIKKwkJCSIsIE1DPSUwMngsIEVTPSV4LyV4LCBSRUY9MHglMDR4LTB4JTA0eC0weCUwNHhcbiIsCisJCQlzZW5zZS0+Zm10LmY3MS5zZXYsIGRldmljZS0+Y2Rldi0+aWQuZGV2X21vZGVsLAorCQkJc2Vuc2UtPm1jLCBzZW5zZS0+Zm10LmY3MS5lbWMsIHNlbnNlLT5mbXQuZjcxLnNtYywKKwkJCXNlbnNlLT5mbXQuZjcxLnJlZmNvZGUxLCBzZW5zZS0+Zm10LmY3MS5yZWZjb2RlMiwKKwkJCXNlbnNlLT5mbXQuZjcxLnJlZmNvZGUzKTsKIAkJdGFwZV8zNTkwX3ByaW50X2Rldl9zaW1fbXNnX2YyKGRldmljZSwgaXJiKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEzMjksOCArMTMzNCw4IEBACiAJCS8qIFN0YW5kYXJkIExpYnJhcnkgU2VydmljZSBJbmZvcm1hdGlvbiBNZXNzYWdlICovCiAJCXJldHVybjsKIAl9Ci0JUFJJTlRfV0FSTigiKCVzKTogRGV2aWNlIE1lc3NhZ2UoJXgpXG4iLAotCQkgICBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCBzZW5zZS0+bWMpOworCWRldl93YXJuICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGhhcyBpc3N1ZWQgYW4gdW5rbm93biAiCisJCSJzZW5zZSBtZXNzYWdlIGNvZGUgJXhcbiIsIHNlbnNlLT5tYyk7CiB9CiAKIHN0YXRpYyBpbnQgdGFwZV8zNTkwX2NyeXB0X2Vycm9yKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlLApAQCAtMTM1NSw5ICsxMzYwLDggQEAKIAkJLyogTm8gY29ubmVjdGlvbiB0byBFS00gKi8KIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTk9UQ09OTik7CiAKLQlQUklOVF9FUlIoIiglcyk6IFVuYWJsZSB0byBnZXQgZW5jcnlwdGlvbiBrZXkgZnJvbSBFS01cbiIsIGJ1c19pZCk7Ci0JUFJJTlRfRVJSKCIoJXMpOiBDVT0lMDJYIERSSVZFPSUwNlggRUtNPSUwMlg6JTA0WFxuIiwgYnVzX2lkLCBjdV9yYywKLQkJZHJ2X3JjLCBla21fcmMxLCBla21fcmMyKTsKKwlkZXZfZXJyICgmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSB1bml0IGZhaWxlZCB0byBvYnRhaW4gdGhlICIKKwkJImVuY3J5cHRpb24ga2V5IGZyb20gRUtNXG4iKTsKIAogCXJldHVybiB0YXBlXzM1OTBfZXJwX2Jhc2ljKGRldmljZSwgcmVxdWVzdCwgaXJiLCAtRU5PS0VZKTsKIH0KQEAgLTE0NDMsOCArMTQ0Nyw2IEBACiAJCSAqIHByaW50IGFkZGl0aW9uYWwgbXNnIHNpbmNlIGRlZmF1bHQgbXNnCiAJCSAqICJkZXZpY2UgaW50ZXJ2ZW50aW9uIiBpcyBub3QgdmVyeSBtZWFuaW5nZnVsbAogCQkgKi8KLQkJUFJJTlRfV0FSTigiKCVzKTogVGFwZSBvcGVyYXRpb24gd2hlbiBtZWRpdW0gbm90IGxvYWRlZFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQl0YXBlX21lZF9zdGF0ZV9zZXQoZGV2aWNlLCBNU19VTkxPQURFRCk7CiAJCXRhcGVfMzU5MF9zY2hlZHVsZV93b3JrKGRldmljZSwgVE9fQ1JZUFRfT0ZGKTsKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FTk9NRURJVU0pOwpAQCAtMTQ5MCwxOSArMTQ5MiwxMyBAQAogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVOT01FRElVTSk7CiAKIAljYXNlIDB4NjAyMDoKLQkJUFJJTlRfV0FSTigiKCVzKTogQ2FydHJpZGdlIG9mIHdyb25nIHR5cGUgP1xuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVNRURJVU1UWVBFKTsKIAogCWNhc2UgMHg4MDExOgotCQlQUklOVF9XQVJOKCIoJXMpOiBBbm90aGVyIGhvc3QgaGFzIHJlc2VydmVkIHRoZSB0YXBlIGRldmljZVxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlyZXR1cm4gdGFwZV8zNTkwX2VycF9iYXNpYyhkZXZpY2UsIHJlcXVlc3QsIGlyYiwgLUVQRVJNKTsKIAljYXNlIDB4ODAxMzoKLQkJUFJJTlRfV0FSTigiKCVzKTogQW5vdGhlciBob3N0IGhhcyBwcml2aWxlZ2VkIGFjY2VzcyB0byB0aGUgIgotCQkJICAgInRhcGUgZGV2aWNlXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKLQkJUFJJTlRfV0FSTigiKCVzKTogVG8gc29sdmUgdGhlIHByb2JsZW0gdW5sb2FkIHRoZSBjdXJyZW50ICIKLQkJCSAgICJjYXJ0cmlkZ2UhXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKKwkJZGV2X3dhcm4gKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgZGlmZmVyZW50IGhvc3QgaGFzIHByaXZpbGVnZWQiCisJCQkiIGFjY2VzcyB0byB0aGUgdGFwZSB1bml0XG4iKTsKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FUEVSTSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIHRhcGVfMzU5MF9lcnBfYmFzaWMoZGV2aWNlLCByZXF1ZXN0LCBpcmIsIC1FSU8pOwpAQCAtMTU1Miw5ICsxNTQ4LDcgQEAKIAl9CiAKIAlEQkZfRVZFTlQoNiwgInh1bmtub3duaXJxXG4iKTsKLQlQUklOVF9FUlIoIlVuZXhwZWN0ZWQgaW50ZXJydXB0LlxuIik7Ci0JUFJJTlRfRVJSKCJDdXJyZW50IG9wIGlzOiAlcyIsIHRhcGVfb3BfdmVyYm9zZVtyZXF1ZXN0LT5vcF0pOwotCXRhcGVfZHVtcF9zZW5zZShkZXZpY2UsIHJlcXVlc3QsIGlyYik7CisJdGFwZV9kdW1wX3NlbnNlX2RiZihkZXZpY2UsIHJlcXVlc3QsIGlyYik7CiAJcmV0dXJuIFRBUEVfSU9fU1RPUDsKIH0KIApAQCAtMTYwOSw3ICsxNjAzLDYgQEAKIAlpZiAocmMpCiAJCWdvdG8gZmFpbF9yZGNfZGF0YTsKIAlpZiAocmRjX2RhdGEtPmRhdGFbMzFdID09IDB4MTMpIHsKLQkJUFJJTlRfSU5GTygiRGV2aWNlIGhhcyBjcnlwdG8gc3VwcG9ydFxuIik7CiAJCWRhdGEtPmNyeXB0X2luZm8uY2FwYWJpbGl0eSB8PSBUQVBFMzkwX0NSWVBUX1NVUFBPUlRFRF9NQVNLOwogCQl0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdChkZXZpY2UpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKaW5kZXggYWUxOGJhZi4uZjMyZTg5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtMTAsNiArMTAsOCBAQAogICoJCSBTdGVmYW4gQmFkZXIgPHNoYmFkZXJAZGUuaWJtLmNvbT4KICAqLwogCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJ0YXBlIgorCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KQEAgLTIzLDggKzI1LDYgQEAKIAogI2luY2x1ZGUgInRhcGUuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX0JMT0NLOiAiCi0KICNkZWZpbmUgVEFQRUJMT0NLX01BWF9TRUMJMTAwCiAjZGVmaW5lIFRBUEVCTE9DS19NSU5fUkVRVUVVRQkzCiAKQEAgLTI3OSw4ICsyNzksNiBAQAogCXRhcGVfcHV0X2RldmljZShkZXZpY2UpOwogCiAJaWYgKCFkZXZpY2UtPmJsa19kYXRhLmRpc2spIHsKLQkJUFJJTlRfRVJSKCIoJXMpOiBObyBnZW5kaXNrIHRvIGNsZWFuIHVwIVxuIiwKLQkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlnb3RvIGNsZWFudXBfcXVldWU7CiAJfQogCkBAIC0zMTQsNyArMzEyLDggQEAKIAlpZiAoIWRldmljZS0+YmxrX2RhdGEubWVkaXVtX2NoYW5nZWQpCiAJCXJldHVybiAwOwogCi0JUFJJTlRfSU5GTygiRGV0ZWN0aW5nIG1lZGlhIHNpemUuLi5cbiIpOworCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwgIkRldGVybWluaW5nIHRoZSBzaXplIG9mIHRoZSByZWNvcmRlZCAiCisJCSJhcmVhLi4uXG4iKTsKIAlyYyA9IHRhcGVfbXRvcChkZXZpY2UsIE1URlNGTSwgMSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC0zNDEsNyArMzQwLDggQEAKIAlkZXZpY2UtPmJvZiA9IHJjOwogCW5yX29mX2Jsa3MgLT0gcmM7CiAKLQlQUklOVF9JTkZPKCJGb3VuZCAlaSBibG9ja3Mgb24gbWVkaWFcbiIsIG5yX29mX2Jsa3MpOworCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwgIlRoZSBzaXplIG9mIHRoZSByZWNvcmRlZCBhcmVhIGlzICVpICIKKwkJImJsb2Nrc1xuIiwgbnJfb2ZfYmxrcyk7CiAJc2V0X2NhcGFjaXR5KGRldmljZS0+YmxrX2RhdGEuZGlzaywKIAkJbnJfb2ZfYmxrcyooVEFQRUJMT0NLX0hTRUNfU0laRS81MTIpKTsKIApAQCAtMzc2LDggKzM3Niw4IEBACiAKIAlpZiAoZGV2aWNlLT5yZXF1aXJlZF90YXBlbWFya3MpIHsKIAkJREJGX0VWRU5UKDIsICJUQkxPQ0s6IG1pc3NpbmcgdGFwZW1hcmtzXG4iKTsKLQkJUFJJTlRfRVJSKCJUQkxPQ0s6IFJlZnVzaW5nIHRvIG9wZW4gdGFwZSB3aXRoIG1pc3NpbmciCi0JCQkiIGVuZCBvZiBmaWxlIG1hcmtzLlxuIik7CisJCWRldl93YXJuKCZkZXZpY2UtPmNkZXYtPmRldiwgIk9wZW5pbmcgdGhlIHRhcGUgZmFpbGVkIGJlY2F1c2UiCisJCQkiIG9mIG1pc3NpbmcgZW5kLW9mLWZpbGUgbWFya3NcbiIpOwogCQlyYyA9IC1FUEVSTTsKIAkJZ290byBwdXRfZGV2aWNlOwogCX0KQEAgLTQ1Miw3ICs0NTIsNiBAQAogCQkJcmMgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlQUklOVF9XQVJOKCJpbnZhbGlkIGlvY3RsIDB4JXhcbiIsIGNvbW1hbmQpOwogCQkJcmMgPSAtRUlOVkFMOwogCX0KIApAQCAtNDc0LDcgKzQ3Myw2IEBACiAKIAlpZiAodGFwZWJsb2NrX21ham9yID09IDApCiAJCXRhcGVibG9ja19tYWpvciA9IHJjOwotCVBSSU5UX0lORk8oInRhcGUgZ2V0cyBtYWpvciAlZCBmb3IgYmxvY2sgZGV2aWNlXG4iLCB0YXBlYmxvY2tfbWFqb3IpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NoYXIuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCmluZGV4IGJlMGNlMjIuLjMxNTY2YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2hhci5jCkBAIC0yNCw4ICsyNCw2IEBACiAjaW5jbHVkZSAidGFwZV9zdGQuaCIKICNpbmNsdWRlICJ0YXBlX2NsYXNzLmgiCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV9DSEFSOiAiCi0KICNkZWZpbmUgVEFQRUNIQVJfTUFKT1IJCTAJLyogZ2V0IGR5bmFtaWMgbWFqb3IgKi8KIAogLyoKQEAgLTEwMiw4ICsxMDAsNiBAQAogCWlmIChibG9ja19zaXplID4gTUFYX0JMT0NLU0laRSkgewogCQlEQkZfRVZFTlQoMywgIkludmFsaWQgYmxvY2tzaXplICglemQgPiAlZClcbiIsCiAJCQlibG9ja19zaXplLCBNQVhfQkxPQ0tTSVpFKTsKLQkJUFJJTlRfRVJSKCJJbnZhbGlkIGJsb2Nrc2l6ZSAoJXpkPiAlZClcbiIsCi0JCQlibG9ja19zaXplLCBNQVhfQkxPQ0tTSVpFKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00ODUsNyArNDgxLDYgQEAKIAkJcmV0dXJuIC0xOwogCiAJdGFwZWNoYXJfbWFqb3IgPSBNQUpPUihkZXYpOwotCVBSSU5UX0lORk8oInRhcGUgZ2V0cyBtYWpvciAlZCBmb3IgY2hhcmFjdGVyIGRldmljZXNcbiIsIE1BSk9SKGRldikpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00OTYsNyArNDkxLDUgQEAKIHZvaWQKIHRhcGVjaGFyX2V4aXQodm9pZCkKIHsKLQlQUklOVF9JTkZPKCJ0YXBlIHJlbGVhc2VzIG1ham9yICVkIGZvciBjaGFyYWN0ZXIgZGV2aWNlc1xuIiwKLQkJdGFwZWNoYXJfbWFqb3IpOwogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihNS0RFVih0YXBlY2hhcl9tYWpvciwgMCksIDI1Nik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NvcmUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCmluZGV4IGY5YmI1MWYuLjA4YzA5ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY29yZS5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKgkJIFN0ZWZhbiBCYWRlciA8c2hiYWRlckBkZS5pYm0uY29tPgogICovCiAKKyNkZWZpbmUgS01TR19DT01QT05FTlQgInRhcGUiCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkgICAgIC8vIGZvciBrZXJuZWwgcGFyYW1ldGVycwogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4JICAgICAvLyBmb3IgcmVxdWVzdGluZyBtb2R1bGVzCkBAIC0yNSw3ICsyNiw2IEBACiAjaW5jbHVkZSAidGFwZS5oIgogI2luY2x1ZGUgInRhcGVfc3RkLmgiCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV9DT1JFOiAiCiAjZGVmaW5lIExPTkdfQlVTWV9USU1FT1VUIDE4MCAvKiBzZWNvbmRzICovCiAKIHN0YXRpYyB2b2lkIF9fdGFwZV9kb19pcnEgKHN0cnVjdCBjY3dfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBpcmIgKik7CkBAIC0yMTQsMTMgKzIxNCwxMyBAQAogCXN3aXRjaChuZXdzdGF0ZSl7CiAJY2FzZSBNU19VTkxPQURFRDoKIAkJZGV2aWNlLT50YXBlX2dlbmVyaWNfc3RhdHVzIHw9IEdNVF9EUl9PUEVOKH4wKTsKLQkJUFJJTlRfSU5GTygiKCVzKTogVGFwZSBpcyB1bmxvYWRlZFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCQlkZXZfaW5mbygmZGV2aWNlLT5jZGV2LT5kZXYsICJUaGUgdGFwZSBjYXJ0cmlkZ2UgaGFzIGJlZW4gIgorCQkJInN1Y2Nlc3NmdWxseSB1bmxvYWRlZFxuIik7CiAJCWJyZWFrOwogCWNhc2UgTVNfTE9BREVEOgogCQlkZXZpY2UtPnRhcGVfZ2VuZXJpY19zdGF0dXMgJj0gfkdNVF9EUl9PUEVOKH4wKTsKLQkJUFJJTlRfSU5GTygiKCVzKTogVGFwZSBoYXMgYmVlbiBtb3VudGVkXG4iLAotCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7CisJCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwgIkEgdGFwZSBjYXJ0cmlkZ2UgaGFzIGJlZW4gIgorCQkJIm1vdW50ZWRcbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQkvLyBwcmludCBub3RoaW5nCkBAIC0zMzMsNyArMzMzLDYgQEAKIAkvKiBMZXQgdGhlIGRpc2NpcGxpbmUgaGF2ZSBhIGdvIGF0IHRoZSBkZXZpY2UuICovCiAJZGV2aWNlLT5kaXNjaXBsaW5lID0gZGlzY2lwbGluZTsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRpc2NpcGxpbmUtPm93bmVyKSkgewotCQlQUklOVF9FUlIoIkNhbm5vdCBnZXQgbW9kdWxlLiBNb2R1bGUgZ29uZS5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTM5MSw3ICszOTAsNiBAQAogdGFwZV9nZW5lcmljX29mZmxpbmUoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCiB7CiAJaWYgKCFkZXZpY2UpIHsKLQkJUFJJTlRfRVJSKCJ0YXBlX2dlbmVyaWNfb2ZmbGluZTogbm8gc3VjaCBkZXZpY2VcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTQxMyw5ICs0MTEsNiBAQAogCQkJREJGX0VWRU5UKDMsICIoJTA4eCk6IFNldCBvZmZsaW5lIGZhaWxlZCAiCiAJCQkJIi0gZHJpdmUgaW4gdXNlLlxuIiwKIAkJCQlkZXZpY2UtPmNkZXZfaWQpOwotCQkJUFJJTlRfV0FSTigiKCVzKTogU2V0IG9mZmxpbmUgZmFpbGVkICIKLQkJCQkiLSBkcml2ZSBpbiB1c2UuXG4iLAotCQkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQkJc3Bpbl91bmxvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtNDM1LDE0ICs0MzAsMTEgQEAKIAlkZXZpY2UgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGFwZV9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2aWNlID09IE5VTEwpIHsKIAkJREJGX0VYQ0VQVElPTigyLCAidGk6bm8gbWVtXG4iKTsKLQkJUFJJTlRfSU5GTyAoImNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgIgotCQkJICAgICJ0YXBlIGluZm8gc3RydWN0dXJlXG4iKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCWRldmljZS0+bW9kZXNldF9ieXRlID0ga21hbGxvYygxLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKGRldmljZS0+bW9kZXNldF9ieXRlID09IE5VTEwpIHsKIAkJREJGX0VYQ0VQVElPTigyLCAidGk6bm8gbWVtXG4iKTsKLQkJUFJJTlRfSU5GTygiY2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBtb2Rlc2V0IGJ5dGVcbiIpOwogCQlrZnJlZShkZXZpY2UpOwogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CkBAIC00OTAsNyArNDgyLDYgQEAKIAl9IGVsc2UgewogCQlpZiAocmVtYWluIDwgMCkgewogCQkJREJGX0VWRU5UKDQsICJwdXQgZGV2aWNlIHdpdGhvdXQgcmVmZXJlbmNlXG4iKTsKLQkJCVBSSU5UX0VSUigicHV0IGRldmljZSB3aXRob3V0IHJlZmVyZW5jZVxuIik7CiAJCX0gZWxzZSB7CiAJCQlEQkZfRVZFTlQoNCwgInRhcGVfZnJlZV9kZXZpY2UoJXApXG4iLCBkZXZpY2UpOwogCQkJa2ZyZWUoZGV2aWNlLT5tb2Rlc2V0X2J5dGUpOwpAQCAtNTM4LDggKzUyOSw2IEBACiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjZGV2LT5kZXYua29iaiwgJnRhcGVfYXR0cl9ncm91cCk7CiAJaWYgKHJldCkgewogCQl0YXBlX3B1dF9kZXZpY2UoZGV2aWNlKTsKLQkJUFJJTlRfRVJSKCJwcm9iZSBmYWlsZWQgZm9yIHRhcGUgZGV2aWNlICVzXG4iLAotCQkJICBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJCXJldHVybiByZXQ7CiAJfQogCWNkZXYtPmRldi5kcml2ZXJfZGF0YSA9IGRldmljZTsKQEAgLTU0Nyw3ICs1MzYsNiBAQAogCWRldmljZS0+Y2RldiA9IGNkZXY7CiAJY2N3X2RldmljZV9nZXRfaWQoY2RldiwgJmRldl9pZCk7CiAJZGV2aWNlLT5jZGV2X2lkID0gZGV2aWRfdG9faW50KCZkZXZfaWQpOwotCVBSSU5UX0lORk8oInRhcGUgZGV2aWNlICVzIGZvdW5kXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTg0LDcgKzU3Miw2IEBACiAKIAlkZXZpY2UgPSBjZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJaWYgKCFkZXZpY2UpIHsKLQkJUFJJTlRfRVJSKCJObyBkZXZpY2UgcG9pbnRlciBpbiB0YXBlX2dlbmVyaWNfcmVtb3ZlIVxuIik7CiAJCXJldHVybjsKIAl9CiAJREJGX0xIKDMsICIoJTA4eCk6IHRhcGVfZ2VuZXJpY19yZW1vdmUoJXApXG4iLCBkZXZpY2UtPmNkZXZfaWQsIGNkZXYpOwpAQCAtNjE1LDEwICs2MDIsOCBAQAogCQkJICovCiAJCQlEQkZfRVZFTlQoMywgIiglMDh4KTogRHJpdmUgaW4gdXNlIHZhbmlzaGVkIVxuIiwKIAkJCQlkZXZpY2UtPmNkZXZfaWQpOwotCQkJUFJJTlRfV0FSTigiKCVzKTogRHJpdmUgaW4gdXNlIHZhbmlzaGVkIC0gIgotCQkJCSJleHBlY3QgdHJvdWJsZSFcbiIsCi0JCQkJZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7Ci0JCQlQUklOVF9XQVJOKCJTdGF0ZSB3YXMgJWlcbiIsIGRldmljZS0+dGFwZV9zdGF0ZSk7CisJCQlkZXZfd2FybigmZGV2aWNlLT5jZGV2LT5kZXYsICJBIHRhcGUgdW5pdCB3YXMgZGV0YWNoZWQiCisJCQkJIiB3aGlsZSBpbiB1c2VcbiIpOwogCQkJdGFwZV9zdGF0ZV9zZXQoZGV2aWNlLCBUU19OT1RfT1BFUik7CiAJCQlfX3RhcGVfZGlzY2FyZF9yZXF1ZXN0cyhkZXZpY2UpOwogCQkJc3Bpbl91bmxvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKQEAgLTYzOSw4ICs2MjQsNyBAQAogewogCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CiAKLQlpZiAoZGF0YXNpemUgPiBQQUdFX1NJWkUgfHwgKGNwbGVuZ3RoKnNpemVvZihzdHJ1Y3QgY2N3MSkpID4gUEFHRV9TSVpFKQotCQlCVUcoKTsKKwlCVUdfT04oZGF0YXNpemUgPiBQQUdFX1NJWkUgfHwgKGNwbGVuZ3RoKnNpemVvZihzdHJ1Y3QgY2N3MSkpID4gUEFHRV9TSVpFKTsKIAogCURCRl9MSCg2LCAidGFwZV9hbGxvY19yZXF1ZXN0KCVkLCAlZClcbiIsIGNwbGVuZ3RoLCBkYXRhc2l6ZSk7CiAKQEAgLTc5Nyw4ICs3ODEsNyBAQAogCWRldmljZSA9IChzdHJ1Y3QgdGFwZV9kZXZpY2UgKikgZGF0YTsKIAlzcGluX2xvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKIAlyZXF1ZXN0ID0gbGlzdF9lbnRyeShkZXZpY2UtPnJlcV9xdWV1ZS5uZXh0LCBzdHJ1Y3QgdGFwZV9yZXF1ZXN0LCBsaXN0KTsKLQlpZiAocmVxdWVzdC0+c3RhdHVzICE9IFRBUEVfUkVRVUVTVF9MT05HX0JVU1kpCi0JCUJVRygpOworCUJVR19PTihyZXF1ZXN0LT5zdGF0dXMgIT0gVEFQRV9SRVFVRVNUX0xPTkdfQlVTWSk7CiAJREJGX0xIKDYsICIlMDh4OiBMb25nIGJ1c3kgdGltZW91dC5cbiIsIGRldmljZS0+Y2Rldl9pZCk7CiAJX190YXBlX3N0YXJ0X25leHRfcmVxdWVzdChkZXZpY2UpOwogCWRldmljZS0+bGJfdGltZW91dC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHRhcGVfcHV0X2RldmljZShkZXZpY2UpOwpAQCAtODMwLDMwICs4MTMsNiBAQAogfQogCiAvKgotICogV3JpdGUgc2Vuc2UgZGF0YSB0byBjb25zb2xlL2RiZgotICovCi12b2lkCi10YXBlX2R1bXBfc2Vuc2Uoc3RydWN0IHRhcGVfZGV2aWNlKiBkZXZpY2UsIHN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QsCi0JCXN0cnVjdCBpcmIgKmlyYikKLXsKLQl1bnNpZ25lZCBpbnQgKnNwdHI7Ci0KLQlQUklOVF9JTkZPKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQlQUklOVF9JTkZPKCJEU1RBVCA6ICUwMnggIENTVEFUOiAlMDJ4CUNQQTogJTA0eFxuIiwKLQkJICAgaXJiLT5zY3N3LmNtZC5kc3RhdCwgaXJiLT5zY3N3LmNtZC5jc3RhdCwgaXJiLT5zY3N3LmNtZC5jcGEpOwotCVBSSU5UX0lORk8oIkRFVklDRTogJXNcbiIsIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwotCWlmIChyZXF1ZXN0ICE9IE5VTEwpCi0JCVBSSU5UX0lORk8oIk9QCSAgOiAlc1xuIiwgdGFwZV9vcF92ZXJib3NlW3JlcXVlc3QtPm9wXSk7Ci0KLQlzcHRyID0gKHVuc2lnbmVkIGludCAqKSBpcmItPmVjdzsKLQlQUklOVF9JTkZPKCJTZW5zZSBkYXRhOiAlMDhYICUwOFggJTA4WCAlMDhYIFxuIiwKLQkJICAgc3B0clswXSwgc3B0clsxXSwgc3B0clsyXSwgc3B0clszXSk7Ci0JUFJJTlRfSU5GTygiU2Vuc2UgZGF0YTogJTA4WCAlMDhYICUwOFggJTA4WCBcbiIsCi0JCSAgIHNwdHJbNF0sIHNwdHJbNV0sIHNwdHJbNl0sIHNwdHJbN10pOwotCVBSSU5UX0lORk8oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLX0KLQotLyoKICAqIFdyaXRlIHNlbnNlIGRhdGEgdG8gZGJmCiAgKi8KIHZvaWQKQEAgLTEwNTEsOCArMTAxMCw2IEBACiAKIAlkZXZpY2UgPSAoc3RydWN0IHRhcGVfZGV2aWNlICopIGNkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAlpZiAoZGV2aWNlID09IE5VTEwpIHsKLQkJUFJJTlRfRVJSKCJjb3VsZCBub3QgZ2V0IGRldmljZSBzdHJ1Y3R1cmUgZm9yICVzICIKLQkJCSAgImluIGludGVycnVwdFxuIiwgZGV2X25hbWUoJmNkZXYtPmRldikpOwogCQlyZXR1cm47CiAJfQogCXJlcXVlc3QgPSAoc3RydWN0IHRhcGVfcmVxdWVzdCAqKSBpbnRwYXJtOwpAQCAtMTA2NCwxMyArMTAyMSwxMyBAQAogCQkvKiBGSVhNRTogV2hhdCB0byBkbyB3aXRoIHRoZSByZXF1ZXN0PyAqLwogCQlzd2l0Y2ggKFBUUl9FUlIoaXJiKSkgewogCQkJY2FzZSAtRVRJTUVET1VUOgotCQkJCVBSSU5UX1dBUk4oIiglcyk6IFJlcXVlc3QgdGltZWQgb3V0XG4iLAorCQkJCURCRl9MSCgxLCAiKCVzKTogUmVxdWVzdCB0aW1lZCBvdXRcbiIsCiAJCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpKTsKIAkJCWNhc2UgLUVJTzoKIAkJCQlfX3RhcGVfZW5kX3JlcXVlc3QoZGV2aWNlLCByZXF1ZXN0LCAtRUlPKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJUFJJTlRfRVJSKCIoJXMpOiBVbmV4cGVjdGVkIGkvbyBlcnJvciAlbGlcbiIsCisJCQkJREJGX0xIKDEsICIoJXMpOiBVbmV4cGVjdGVkIGkvbyBlcnJvciAlbGlcbiIsCiAJCQkJCWRldl9uYW1lKCZjZGV2LT5kZXYpLAogCQkJCQlQVFJfRVJSKGlyYikpOwogCQl9CkBAIC0xMTgyLDggKzExMzksNiBAQAogCQlkZWZhdWx0OgogCQkJaWYgKHJjID4gMCkgewogCQkJCURCRl9FVkVOVCg2LCAieHVua25vd25yY1xuIik7Ci0JCQkJUFJJTlRfRVJSKCJJbnZhbGlkIHJldHVybiBjb2RlIGZyb20gZGlzY2lwbGluZSAiCi0JCQkJICAJImludGVycnVwdCBmdW5jdGlvbi5cbiIpOwogCQkJCV9fdGFwZV9lbmRfcmVxdWVzdChkZXZpY2UsIHJlcXVlc3QsIC1FSU8pOwogCQkJfSBlbHNlIHsKIAkJCQlfX3RhcGVfZW5kX3JlcXVlc3QoZGV2aWNlLCByZXF1ZXN0LCByYyk7CkBAIC0xMzIzLDcgKzEyNzgsNiBAQAogRVhQT1JUX1NZTUJPTCh0YXBlX21lZF9zdGF0ZV9zZXQpOwogRVhQT1JUX1NZTUJPTCh0YXBlX2FsbG9jX3JlcXVlc3QpOwogRVhQT1JUX1NZTUJPTCh0YXBlX2ZyZWVfcmVxdWVzdCk7Ci1FWFBPUlRfU1lNQk9MKHRhcGVfZHVtcF9zZW5zZSk7CiBFWFBPUlRfU1lNQk9MKHRhcGVfZHVtcF9zZW5zZV9kYmYpOwogRVhQT1JUX1NZTUJPTCh0YXBlX2RvX2lvKTsKIEVYUE9SVF9TWU1CT0wodGFwZV9kb19pb19hc3luYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3Byb2MuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jCmluZGV4IDhhMzc2YWYuLjIwMmY0MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfcHJvYy5jCkBAIC0yMCw4ICsyMCw2IEBACiAKICNpbmNsdWRlICJ0YXBlLmgiCiAKLSNkZWZpbmUgUFJJTlRLX0hFQURFUiAiVEFQRV9QUk9DOiAiCi0KIHN0YXRpYyBjb25zdCBjaGFyICp0YXBlX21lZF9zdF92ZXJib3NlW01TX1NJWkVdID0KIHsKIAlbTVNfVU5LTk9XTl0gPSAiVU5LTk9XTiAiLApAQCAtMTI4LDcgKzEyNiw2IEBACiAJCXByb2NfY3JlYXRlKCJ0YXBlZGV2aWNlcyIsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwgTlVMTCwKIAkJCSAgICAmdGFwZV9wcm9jX29wcyk7CiAJaWYgKHRhcGVfcHJvY19kZXZpY2VzID09IE5VTEwpIHsKLQkJUFJJTlRfV0FSTigidGFwZTogQ2Fubm90IHJlZ2lzdGVyIHByb2NmcyBlbnRyeSB0YXBlZGV2aWNlc1xuIik7CiAJCXJldHVybjsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9zdGQuYwppbmRleCA1YmQ1NzNkLi4xYTk0MjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX3N0ZC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfc3RkLmMKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlICJ0YXBlLmgiCiAjaW5jbHVkZSAidGFwZV9zdGQuaCIKIAotI2RlZmluZSBQUklOVEtfSEVBREVSICJUQVBFX1NURDogIgotCiAvKgogICogdGFwZV9zdGRfYXNzaWduCiAgKi8KQEAgLTM5LDE2ICszNywxNSBAQAogCWludCByYzsKIAogCXJlcXVlc3QgPSAoc3RydWN0IHRhcGVfcmVxdWVzdCAqKSBkYXRhOwotCWlmICgoZGV2aWNlID0gcmVxdWVzdC0+ZGV2aWNlKSA9PSBOVUxMKQotCQlCVUcoKTsKKwlkZXZpY2UgPSByZXF1ZXN0LT5kZXZpY2U7CisJQlVHX09OKCFkZXZpY2UpOwogCiAJREJGX0VWRU5UKDMsICIlMDh4OiBBc3NpZ25tZW50IHRpbWVvdXQuIERldmljZSBidXN5LlxuIiwKIAkJCWRldmljZS0+Y2Rldl9pZCk7CiAJcmMgPSB0YXBlX2NhbmNlbF9pbyhkZXZpY2UsIHJlcXVlc3QpOwogCWlmKHJjKQotCQlQUklOVF9FUlIoIiglcyk6IEFzc2lnbiB0aW1lb3V0OiBDYW5jZWwgZmFpbGVkIHdpdGggcmMgPSAlaVxuIiwKKwkJREJGX0VWRU5UKDMsICIoJXMpOiBBc3NpZ24gdGltZW91dDogQ2FuY2VsIGZhaWxlZCB3aXRoIHJjID0gJWlcbiIsCiAJCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLCByYyk7Ci0KIH0KIAogaW50CkBAIC04Miw4ICs3OSw2IEBACiAJZGVsX3RpbWVyKCZ0aW1lb3V0KTsKIAogCWlmIChyYyAhPSAwKSB7Ci0JCVBSSU5UX1dBUk4oIiVzOiBhc3NpZ24gZmFpbGVkIC0gZGV2aWNlIG1pZ2h0IGJlIGJ1c3lcbiIsCi0JCQlkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpKTsKIAkJREJGX0VWRU5UKDMsICIlMDh4OiBhc3NpZ24gZmFpbGVkIC0gZGV2aWNlIG1pZ2h0IGJlIGJ1c3lcbiIsCiAJCQlkZXZpY2UtPmNkZXZfaWQpOwogCX0gZWxzZSB7CkBAIC0xMDUsOCArMTAwLDYgQEAKIAlpZiAoZGV2aWNlLT50YXBlX3N0YXRlID09IFRTX05PVF9PUEVSKSB7CiAJCURCRl9FVkVOVCgzLCAiKCUwOHgpOiBDYW4ndCB1bmFzc2lnbiBkZXZpY2VcbiIsCiAJCQlkZXZpY2UtPmNkZXZfaWQpOwotCQlQUklOVF9XQVJOKCIoJXMpOiBDYW4ndCB1bmFzc2lnbiBkZXZpY2UgLSBkZXZpY2UgZ29uZVxuIiwKLQkJCWRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTEyMCw4ICsxMTMsNiBAQAogCiAJaWYgKChyYyA9IHRhcGVfZG9faW8oZGV2aWNlLCByZXF1ZXN0KSkgIT0gMCkgewogCQlEQkZfRVZFTlQoMywgIiUwOHg6IFVuYXNzaWduIGZhaWxlZFxuIiwgZGV2aWNlLT5jZGV2X2lkKTsKLQkJUFJJTlRfV0FSTigiJXM6IFVuYXNzaWduIGZhaWxlZFxuIiwKLQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwogCX0gZWxzZSB7CiAJCURCRl9FVkVOVCgzLCAiJTA4eDogVGFwZSB1bmFzc2lnbmVkXG4iLCBkZXZpY2UtPmNkZXZfaWQpOwogCX0KQEAgLTI0Miw4ICsyMzMsNiBAQAogCWlmIChjb3VudCA+IE1BWF9CTE9DS1NJWkUpIHsKIAkJREJGX0VWRU5UKDMsICJJbnZhbGlkIGJsb2NrIHNpemUgKCVkID4gJWQpIGdpdmVuLlxuIiwKIAkJCWNvdW50LCBNQVhfQkxPQ0tTSVpFKTsKLQkJUFJJTlRfRVJSKCJJbnZhbGlkIGJsb2NrIHNpemUgKCVkID4gJWQpIGdpdmVuLlxuIiwKLQkJCWNvdW50LCBNQVhfQkxPQ0tTSVpFKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC02MzMsMTQgKzYyMiw2IEBACiAKIAlpZiAobXRfY291bnQgPCAwIHx8IG10X2NvdW50ID4gMSkgewogCQlEQkZfRVhDRVBUSU9OKDYsICJ4Y29tIHBhcm1cbiIpOwotCQlpZiAoKmRldmljZS0+bW9kZXNldF9ieXRlICYgMHgwOCkKLQkJCVBSSU5UX0lORk8oIiglcykgQ29tcHJlc3Npb24gaXMgY3VycmVudGx5IG9uXG4iLAotCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwotCQllbHNlCi0JCQlQUklOVF9JTkZPKCIoJXMpIENvbXByZXNzaW9uIGlzIGN1cnJlbnRseSBvZmZcbiIsCi0JCQkJICAgZGV2X25hbWUoJmRldmljZS0+Y2Rldi0+ZGV2KSk7Ci0JCVBSSU5UX0lORk8oIlVzZSAxIHRvIHN3aXRjaCBjb21wcmVzc2lvbiBvbiwgMCB0byAiCi0JCQkgICAic3dpdGNoIGl0IG9mZlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDIsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3pjb3JlLmMKaW5kZXggZWVmYzY2MS4uMWJiYWU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvemNvcmUuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci96Y29yZS5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIHBsZWFzZSByZWZlciB0byBEb2N1bWVudGF0aW9uL3MzOTAvemZjcGR1bXAudHh0CiAgKgotICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAzLDIwMDcKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMywyMDA4CiAgKiBBdXRob3Iocyk6IE1pY2hhZWwgSG9semhldQogICovCiAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlIDxhc20vZGVidWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2lycWZsYWdzLmg+CisjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CiAjaW5jbHVkZSAic2NscC5oIgogCiAjZGVmaW5lIFRSQUNFKHguLi4pIGRlYnVnX3NwcmludGZfZXZlbnQoemNvcmVfZGJmLCAxLCB4KQpAQCAtNDgsMTIgKzQ5LDE5IEBACiAJdW5pb24gc2F2ZV9hcmVhCWxjX21hc2s7CiB9OwogCitzdHJ1Y3QgaXBpYl9pbmZvIHsKKwl1bnNpZ25lZCBsb25nCWlwaWI7CisJdTMyCQljaGVja3N1bTsKK30gIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiBzdGF0aWMgc3RydWN0IHN5c19pbmZvIHN5c19pbmZvOwogc3RhdGljIHN0cnVjdCBkZWJ1Z19pbmZvICp6Y29yZV9kYmY7CiBzdGF0aWMgaW50IGhzYV9hdmFpbGFibGU7CiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqemNvcmVfZGlyOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKnpjb3JlX2ZpbGU7CiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqemNvcmVfbWVtbWFwX2ZpbGU7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqemNvcmVfcmVpcGxfZmlsZTsKK3N0YXRpYyBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBsX2Jsb2NrOwogCiAvKgogICogQ29weSBtZW1vcnkgZnJvbSBIU0EgdG8ga2VybmVsIG9yIHVzZXIgbWVtb3J5IChub3QgcmVlbnRyYW50KToKQEAgLTUyNyw2ICs1MzUsMzMgQEAKIAkucmVsZWFzZQk9IHpjb3JlX21lbW1hcF9yZWxlYXNlLAogfTsKIAorc3RhdGljIHNzaXplX3QgemNvcmVfcmVpcGxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCWlmIChpcGxfYmxvY2spIHsKKwkJZGlhZzMwOChESUFHMzA4X1NFVCwgaXBsX2Jsb2NrKTsKKwkJZGlhZzMwOChESUFHMzA4X0lQTCwgTlVMTCk7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCB6Y29yZV9yZWlwbF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpjb3JlX3JlaXBsX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpjb3JlX3JlaXBsX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS53cml0ZQkJPSB6Y29yZV9yZWlwbF93cml0ZSwKKwkub3BlbgkJPSB6Y29yZV9yZWlwbF9vcGVuLAorCS5yZWxlYXNlCT0gemNvcmVfcmVpcGxfcmVsZWFzZSwKK307CisKIAogc3RhdGljIHZvaWQgX19pbml0IHNldF9zMzkwX2xjX21hc2sodW5pb24gc2F2ZV9hcmVhICptYXApCiB7CkBAIC02NDUsNiArNjgwLDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBQcm92aWRlIElQTCBwYXJhbWV0ZXIgaW5mb3JtYXRpb24gYmxvY2sgZnJvbSBlaXRoZXIgSFNBIG9yIG1lbW9yeQorICogZm9yIGZ1dHVyZSByZWlwbAorICovCitzdGF0aWMgaW50IF9faW5pdCB6Y29yZV9yZWlwbF9pbml0KHZvaWQpCit7CisJc3RydWN0IGlwaWJfaW5mbyBpcGliX2luZm87CisJaW50IHJjOworCisJcmMgPSBtZW1jcHlfaHNhX2tlcm5lbCgmaXBpYl9pbmZvLCBfX0xDX0RVTVBfUkVJUEwsIHNpemVvZihpcGliX2luZm8pKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlpZiAoaXBpYl9pbmZvLmlwaWIgPT0gMCkKKwkJcmV0dXJuIDA7CisJaXBsX2Jsb2NrID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmICghaXBsX2Jsb2NrKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoaXBpYl9pbmZvLmlwaWIgPCBaRkNQRFVNUF9IU0FfU0laRSkKKwkJcmMgPSBtZW1jcHlfaHNhX2tlcm5lbChpcGxfYmxvY2ssIGlwaWJfaW5mby5pcGliLCBQQUdFX1NJWkUpOworCWVsc2UKKwkJcmMgPSBtZW1jcHlfcmVhbChpcGxfYmxvY2ssIGlwaWJfaW5mby5pcGliLCBQQUdFX1NJWkUpOworCWlmIChyYykgeworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGlwbF9ibG9jayk7CisJCXJldHVybiByYzsKKwl9CisJaWYgKGNzdW1fcGFydGlhbChpcGxfYmxvY2ssIGlwbF9ibG9jay0+aGRyLmxlbiwgMCkgIT0KKwkgICAgaXBpYl9pbmZvLmNoZWNrc3VtKSB7CisJCVRSQUNFKCJDaGVja3N1bSBkb2VzIG5vdCBtYXRjaFxuIik7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXBsX2Jsb2NrKTsKKwkJaXBsX2Jsb2NrID0gTlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHpjb3JlX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBjaGFyIGFyY2g7CkBAIC02OTAsNiArNzU5LDEwIEBACiAJaWYgKHJjKQogCQlnb3RvIGZhaWw7CiAKKwlyYyA9IHpjb3JlX3JlaXBsX2luaXQoKTsKKwlpZiAocmMpCisJCWdvdG8gZmFpbDsKKwogCXpjb3JlX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiemNvcmUiICwgTlVMTCk7CiAJaWYgKCF6Y29yZV9kaXIpIHsKIAkJcmMgPSAtRU5PTUVNOwpAQCAtNzA3LDkgKzc4MCwxNyBAQAogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbF9maWxlOwogCX0KKwl6Y29yZV9yZWlwbF9maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVpcGwiLCBTX0lSVVNSLCB6Y29yZV9kaXIsCisJCQkJCQlOVUxMLCAmemNvcmVfcmVpcGxfZm9wcyk7CisJaWYgKCF6Y29yZV9yZWlwbF9maWxlKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBmYWlsX21lbW1hcF9maWxlOworCX0KIAloc2FfYXZhaWxhYmxlID0gMTsKIAlyZXR1cm4gMDsKIAorZmFpbF9tZW1tYXBfZmlsZToKKwlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9tZW1tYXBfZmlsZSk7CiBmYWlsX2ZpbGU6CiAJZGVidWdmc19yZW1vdmUoemNvcmVfZmlsZSk7CiBmYWlsX2RpcjoKQEAgLTcyMywxMCArODA0LDE1IEBACiB7CiAJZGVidWdfdW5yZWdpc3Rlcih6Y29yZV9kYmYpOwogCXNjbHBfc2RpYXNfZXhpdCgpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaXBsX2Jsb2NrKTsKKwlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9yZWlwbF9maWxlKTsKKwlkZWJ1Z2ZzX3JlbW92ZSh6Y29yZV9tZW1tYXBfZmlsZSk7CisJZGVidWdmc19yZW1vdmUoemNvcmVfZmlsZSk7CisJZGVidWdmc19yZW1vdmUoemNvcmVfZGlyKTsKIAlkaWFnMzA4KERJQUczMDhfUkVMX0hTQSwgTlVMTCk7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIkNvcHlyaWdodCBJQk0gQ29ycC4gMjAwMywyMDA3Iik7CitNT0RVTEVfQVVUSE9SKCJDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDMsMjAwOCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJ6Y29yZSBtb2R1bGUgZm9yIHpmY3BkdW1wIHN1cHBvcnQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZSBiL2RyaXZlcnMvczM5MC9jaW8vTWFrZWZpbGUKaW5kZXggYmQ3OWJkMS4uYWRiM2RkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3MzOTAvY2lvL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiBvYmoteSArPSBhaXJxLm8gYmxhY2tsaXN0Lm8gY2hzYy5vIGNpby5vIGNzcy5vIGNocC5vIGlkc2V0Lm8gaXNjLm8gc2Nzdy5vIFwKLQlmY3gubyBpdGN3Lm8KKwlmY3gubyBpdGN3Lm8gY3J3Lm8KIGNjd19kZXZpY2Utb2JqcyArPSBkZXZpY2UubyBkZXZpY2VfZnNtLm8gZGV2aWNlX29wcy5vCiBjY3dfZGV2aWNlLW9ianMgKz0gZGV2aWNlX2lkLm8gZGV2aWNlX3BnaWQubyBkZXZpY2Vfc3RhdHVzLm8KIG9iai15ICs9IGNjd19kZXZpY2UubyBjbWYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9haXJxLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYwppbmRleCBmZTZjZWExLi42NWQyZTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2FpcnEuYwpAQCAtMzQsOCArMzQsOCBAQAogCXZvaWQgKmRydl9kYXRhOwogfTsKIAotc3RhdGljIHVuaW9uIGluZGljYXRvcl90IGluZGljYXRvcnNbTUFYX0lTQ107Ci1zdGF0aWMgc3RydWN0IGFpcnFfdCAqYWlycXNbTUFYX0lTQ11bTlJfQUlSUVNdOworc3RhdGljIHVuaW9uIGluZGljYXRvcl90IGluZGljYXRvcnNbTUFYX0lTQysxXTsKK3N0YXRpYyBzdHJ1Y3QgYWlycV90ICphaXJxc1tNQVhfSVNDKzFdW05SX0FJUlFTXTsKIAogc3RhdGljIGludCByZWdpc3Rlcl9haXJxKHN0cnVjdCBhaXJxX3QgKmFpcnEsIHU4IGlzYykKIHsKQEAgLTEzMyw2ICsxMzMsOCBAQAogCQl3aGlsZSAod29yZCkgewogCQkJaWYgKHdvcmQgJiBJTkRJQ0FUT1JfTUFTSykgewogCQkJCWFpcnEgPSBhaXJxc1tpc2NdW2ldOworCQkJCS8qIE1ha2Ugc3VyZSBnY2MgcmVhZHMgZnJvbSBhaXJxcyBvbmx5IG9uY2UuICovCisJCQkJYmFycmllcigpOwogCQkJCWlmIChsaWtlbHkoYWlycSkpCiAJCQkJCWFpcnEtPmhhbmRsZXIoJmluZGljYXRvcnNbaXNjXS5ieXRlW2ldLAogCQkJCQkJICAgICAgYWlycS0+ZHJ2X2RhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYyBiL2RyaXZlcnMvczM5MC9jaW8vYmxhY2tsaXN0LmMKaW5kZXggZmUwMGJlMy4uNjU2NWYwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9ibGFja2xpc3QuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2JsYWNrbGlzdC5jCkBAIC0zMzYsOCArMzM2LDcgQEAKIAkJIHNpemVfdCB1c2VyX2xlbiwgbG9mZl90ICpvZmZzZXQpCiB7CiAJY2hhciAqYnVmOwotCXNpemVfdCBpOwotCXNzaXplX3QgcmMsIHJldDsKKwlzc2l6ZV90IHJjLCByZXQsIGk7CiAKIAlpZiAoKm9mZnNldCkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKaW5kZXggOTE4ZTZmYy4uMjJjZTc2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYwpAQCAtMTA0LDggKzEwNCw5IEBACiAJcmMgPSBkZXZpY2Vfc2NoZWR1bGVfY2FsbGJhY2soZGV2LCBjY3dncm91cF91bmdyb3VwX2NhbGxiYWNrKTsKIG91dDoKIAlpZiAocmMpIHsKLQkJLyogUmVsZWFzZSBvbm9mZiAibG9jayIgd2hlbiB1bmdyb3VwaW5nIGZhaWxlZC4gKi8KLQkJYXRvbWljX3NldCgmZ2Rldi0+b25vZmYsIDApOworCQlpZiAocmMgIT0gLUVBR0FJTikKKwkJCS8qIFJlbGVhc2Ugb25vZmYgImxvY2siIHdoZW4gdW5ncm91cGluZyBmYWlsZWQuICovCisJCQlhdG9taWNfc2V0KCZnZGV2LT5vbm9mZiwgMCk7CiAJCXJldHVybiByYzsKIAl9CiAJcmV0dXJuIGNvdW50OwpAQCAtMzE0LDE2ICszMTUsMzIgQEAKIH0KIEVYUE9SVF9TWU1CT0woY2N3Z3JvdXBfY3JlYXRlX2Zyb21fc3RyaW5nKTsKIAotc3RhdGljIGludCBfX2luaXQKLWluaXRfY2N3Z3JvdXAgKHZvaWQpCitzdGF0aWMgaW50IGNjd2dyb3VwX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQkJICAgICB2b2lkICpkYXRhKTsKKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjY3dncm91cF9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGNjd2dyb3VwX25vdGlmaWVyCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2Njd2dyb3VwKHZvaWQpCiB7Ci0JcmV0dXJuIGJ1c19yZWdpc3RlciAoJmNjd2dyb3VwX2J1c190eXBlKTsKKwlpbnQgcmV0OworCisJcmV0ID0gYnVzX3JlZ2lzdGVyKCZjY3dncm91cF9idXNfdHlwZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGJ1c19yZWdpc3Rlcl9ub3RpZmllcigmY2N3Z3JvdXBfYnVzX3R5cGUsICZjY3dncm91cF9uYik7CisJaWYgKHJldCkKKwkJYnVzX3VucmVnaXN0ZXIoJmNjd2dyb3VwX2J1c190eXBlKTsKKworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdAotY2xlYW51cF9jY3dncm91cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2Njd2dyb3VwKHZvaWQpCiB7Ci0JYnVzX3VucmVnaXN0ZXIgKCZjY3dncm91cF9idXNfdHlwZSk7CisJYnVzX3VucmVnaXN0ZXJfbm90aWZpZXIoJmNjd2dyb3VwX2J1c190eXBlLCAmY2N3Z3JvdXBfbmIpOworCWJ1c191bnJlZ2lzdGVyKCZjY3dncm91cF9idXNfdHlwZSk7CiB9CiAKIG1vZHVsZV9pbml0KGluaXRfY2N3Z3JvdXApOwpAQCAtMzkxLDI3ICs0MDgsMjggQEAKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCByZXQ7CiAKLQlnZGV2ID0gdG9fY2N3Z3JvdXBkZXYoZGV2KTsKIAlpZiAoIWRldi0+ZHJpdmVyKQotCQlyZXR1cm4gY291bnQ7CisJCXJldHVybiAtRU5PREVWOwogCi0JZ2RydiA9IHRvX2Njd2dyb3VwZHJ2IChnZGV2LT5kZXYuZHJpdmVyKTsKKwlnZGV2ID0gdG9fY2N3Z3JvdXBkZXYoZGV2KTsKKwlnZHJ2ID0gdG9fY2N3Z3JvdXBkcnYoZGV2LT5kcml2ZXIpOworCiAJaWYgKCF0cnlfbW9kdWxlX2dldChnZHJ2LT5vd25lcikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCXJldCA9IGNvdW50OworCiAJaWYgKHZhbHVlID09IDEpCi0JCWNjd2dyb3VwX3NldF9vbmxpbmUoZ2Rldik7CisJCXJldCA9IGNjd2dyb3VwX3NldF9vbmxpbmUoZ2Rldik7CiAJZWxzZSBpZiAodmFsdWUgPT0gMCkKLQkJY2N3Z3JvdXBfc2V0X29mZmxpbmUoZ2Rldik7CisJCXJldCA9IGNjd2dyb3VwX3NldF9vZmZsaW5lKGdkZXYpOwogCWVsc2UKIAkJcmV0ID0gLUVJTlZBTDsKIG91dDoKIAltb2R1bGVfcHV0KGdkcnYtPm93bmVyKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAocmV0ID09IDApID8gY291bnQgOiByZXQ7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CkBAIC00NTMsMTMgKzQ3MSwxOCBAQAogCXN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXY7CiAJc3RydWN0IGNjd2dyb3VwX2RyaXZlciAqZ2RydjsKIAorCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9vbmxpbmUpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl91bmdyb3VwKTsKKworCWlmICghZGV2LT5kcml2ZXIpCisJCXJldHVybiAwOworCiAJZ2RldiA9IHRvX2Njd2dyb3VwZGV2KGRldik7CiAJZ2RydiA9IHRvX2Njd2dyb3VwZHJ2KGRldi0+ZHJpdmVyKTsKIAotCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9vbmxpbmUpOwotCi0JaWYgKGdkcnYgJiYgZ2Rydi0+cmVtb3ZlKQorCWlmIChnZHJ2LT5yZW1vdmUpCiAJCWdkcnYtPnJlbW92ZShnZGV2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC00NjgsOSArNDkxLDEzIEBACiAJc3RydWN0IGNjd2dyb3VwX2RldmljZSAqZ2RldjsKIAlzdHJ1Y3QgY2N3Z3JvdXBfZHJpdmVyICpnZHJ2OwogCisJaWYgKCFkZXYtPmRyaXZlcikKKwkJcmV0dXJuOworCiAJZ2RldiA9IHRvX2Njd2dyb3VwZGV2KGRldik7CiAJZ2RydiA9IHRvX2Njd2dyb3VwZHJ2KGRldi0+ZHJpdmVyKTsKLQlpZiAoZ2RydiAmJiBnZHJ2LT5zaHV0ZG93bikKKworCWlmIChnZHJ2LT5zaHV0ZG93bikKIAkJZ2Rydi0+c2h1dGRvd24oZ2Rldik7CiB9CiAKQEAgLTQ4Myw2ICs1MTAsMTkgQEAKIAkuc2h1dGRvd24gPSBjY3dncm91cF9zaHV0ZG93biwKIH07CiAKKworc3RhdGljIGludCBjY3dncm91cF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOworCisJaWYgKGFjdGlvbiA9PSBCVVNfTk9USUZZX1VOQklORF9EUklWRVIpCisJCWRldmljZV9zY2hlZHVsZV9jYWxsYmFjayhkZXYsIGNjd2dyb3VwX3VuZ3JvdXBfY2FsbGJhY2spOworCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworCiAvKioKICAqIGNjd2dyb3VwX2RyaXZlcl9yZWdpc3RlcigpIC0gcmVnaXN0ZXIgYSBjY3cgZ3JvdXAgZHJpdmVyCiAgKiBAY2RyaXZlcjogZHJpdmVyIHRvIGJlIHJlZ2lzdGVyZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2NocC5jCmluZGV4IDEyNDZmNjEuLjNlNWYzMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHAuYwpAQCAtMTcsOCArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2NocGlkLmg+CiAjaW5jbHVkZSA8YXNtL3NjbHAuaD4KKyNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKLSNpbmNsdWRlICIuLi9zMzkwbWFjaC5oIgogI2luY2x1ZGUgImNpby5oIgogI2luY2x1ZGUgImNzcy5oIgogI2luY2x1ZGUgImlvYXNtLmgiCkBAIC03MDYsMTIgKzcwNiwxMiBAQAogCXN0cnVjdCBjaHBfaWQgY2hwaWQ7CiAJaW50IHJldDsKIAotCXJldCA9IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19DUEFUSCwgY2hwX3Byb2Nlc3NfY3J3KTsKKwlyZXQgPSBjcndfcmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NQQVRILCBjaHBfcHJvY2Vzc19jcncpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJY2hwX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImNpb19jaHAiKTsKIAlpZiAoIWNocF93cSkgewotCQlzMzkwX3VucmVnaXN0ZXJfY3J3X2hhbmRsZXIoQ1JXX1JTQ19DUEFUSCk7CisJCWNyd191bnJlZ2lzdGVyX2hhbmRsZXIoQ1JXX1JTQ19DUEFUSCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlJTklUX1dPUksoJmNmZ193b3JrLCBjZmdfZnVuYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCmluZGV4IGViYWI2ZWEuLjg4M2YxNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCkBAIC0xOSw4ICsxOSw4IEBACiAjaW5jbHVkZSA8YXNtL2Npby5oPgogI2luY2x1ZGUgPGFzbS9jaHBpZC5oPgogI2luY2x1ZGUgPGFzbS9jaHNjLmg+CisjaW5jbHVkZSA8YXNtL2Nydy5oPgogCi0jaW5jbHVkZSAiLi4vczM5MG1hY2guaCIKICNpbmNsdWRlICJjc3MuaCIKICNpbmNsdWRlICJjaW8uaCIKICNpbmNsdWRlICJjaW9fZGVidWcuaCIKQEAgLTU4OSw2ICs1ODksNyBAQAogCWNhc2UgMHgwMTAyOgogCWNhc2UgMHgwMTAzOgogCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSBjaHNjX2Vycm9yX2Zyb21fcmVzcG9uc2Uoc2VjbV9hcmVhLT5yZXNwb25zZS5jb2RlKTsKIAl9CkBAIC04MjAsNyArODIxLDcgQEAKIAkJCSAgICAgICJjaHNjIG1hY2hpbmUgY2hlY2tzIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlyZXQgPSBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKENSV19SU0NfQ1NTLCBjaHNjX3Byb2Nlc3NfY3J3KTsKKwlyZXQgPSBjcndfcmVnaXN0ZXJfaGFuZGxlcihDUldfUlNDX0NTUywgY2hzY19wcm9jZXNzX2Nydyk7CiAJaWYgKHJldCkKIAkJa2ZyZWUoc2VpX3BhZ2UpOwogCXJldHVybiByZXQ7CkBAIC04MjgsNyArODI5LDcgQEAKIAogdm9pZCBfX2luaXQgY2hzY19mcmVlX3NlaV9hcmVhKHZvaWQpCiB7Ci0JczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKENSV19SU0NfQ1NTKTsKKwljcndfdW5yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1NTKTsKIAlrZnJlZShzZWlfcGFnZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzY19zY2guYwppbmRleCAwYTJmMmVkLi45M2VjYTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2Nfc2NoLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaHNjX3NjaC5jCkBAIC04NCw4ICs4NCw4IEBACiAJCWtmcmVlKHByaXZhdGUpOwogCX0gZWxzZSB7CiAJCXNjaC0+cHJpdmF0ZSA9IHByaXZhdGU7Ci0JCWlmIChzY2gtPmRldi51ZXZlbnRfc3VwcHJlc3MpIHsKLQkJCXNjaC0+ZGV2LnVldmVudF9zdXBwcmVzcyA9IDA7CisJCWlmIChkZXZfZ2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYpKSB7CisJCQlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCQkJa29iamVjdF91ZXZlbnQoJnNjaC0+ZGV2LmtvYmosIEtPQkpfQUREKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCmluZGV4IDY1OWY4YTcuLjJhZWJiOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgPGFzbS9pc2MuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2ZjeC5oPgorI2luY2x1ZGUgPGFzbS9ubWkuaD4KKyNpbmNsdWRlIDxhc20vY3J3Lmg+CiAjaW5jbHVkZSAiY2lvLmgiCiAjaW5jbHVkZSAiY3NzLmgiCiAjaW5jbHVkZSAiY2hzYy5oIgpAQCAtMzgsNyArNDAsNiBAQAogI2luY2x1ZGUgImJsYWNrbGlzdC5oIgogI2luY2x1ZGUgImNpb19kZWJ1Zy5oIgogI2luY2x1ZGUgImNocC5oIgotI2luY2x1ZGUgIi4uL3MzOTBtYWNoLmgiCiAKIGRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX21zZ19pZDsKIGRlYnVnX2luZm9fdCAqY2lvX2RlYnVnX3RyYWNlX2lkOwpAQCAtNDcxLDYgKzQ3Miw3IEBACiBpbnQgY2lvX2Rpc2FibGVfc3ViY2hhbm5lbChzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoKQogewogCWNoYXIgZGJmX3R4dFsxNV07CisJaW50IHJldHJ5OwogCWludCByZXQ7CiAKIAlDSU9fVFJBQ0VfRVZFTlQgKDIsICJkaXNzY2giKTsKQEAgLTQ4MSwxNiArNDgzLDE3IEBACiAJaWYgKGNpb191cGRhdGVfc2NoaWIoc2NoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoc2Nzd19hY3RsKCZzY2gtPnNjaGliLnNjc3cpICE9IDApCi0JCS8qCi0JCSAqIHRoZSBkaXNhYmxlIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCB3aGlsZSB0aGVyZSBhcmUKLQkJICogIHJlcXVlc3RzIHBlbmRpbmcgZm9yIGNvbXBsZXRpb24gIQotCQkgKi8KLQkJcmV0dXJuIC1FQlVTWTsKLQogCXNjaC0+Y29uZmlnLmVuYSA9IDA7Ci0JcmV0ID0gY2lvX2NvbW1pdF9jb25maWcoc2NoKTsKIAorCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDM7IHJldHJ5KyspIHsKKwkJcmV0ID0gY2lvX2NvbW1pdF9jb25maWcoc2NoKTsKKwkJaWYgKHJldCA9PSAtRUJVU1kpIHsKKwkJCXN0cnVjdCBpcmIgaXJiOworCQkJaWYgKHRzY2goc2NoLT5zY2hpZCwgJmlyYikgIT0gMCkKKwkJCQlicmVhazsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CiAJc3ByaW50ZiAoZGJmX3R4dCwgInJldDolZCIsIHJldCk7CiAJQ0lPX1RSQUNFX0VWRU5UICgyLCBkYmZfdHh0KTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jcncuYyBiL2RyaXZlcnMvczM5MC9jaW8vY3J3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1NzY2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY3J3LmMKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiAgIENoYW5uZWwgcmVwb3J0IGhhbmRsaW5nIGNvZGUKKyAqCisgKiAgICBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDAsMjAwOQorICogICAgQXV0aG9yKHMpOiBJbmdvIEFkbHVuZyA8YWRsdW5nQGRlLmlibS5jb20+LAorICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+LAorICoJCSBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+LAorICoJCSBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4sCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vY3J3Lmg+CisKK3N0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGNyd19zZW1hcGhvcmU7CitzdGF0aWMgREVGSU5FX01VVEVYKGNyd19oYW5kbGVyX211dGV4KTsKK3N0YXRpYyBjcndfaGFuZGxlcl90IGNyd19oYW5kbGVyc1tOUl9SU0NTXTsKKworLyoqCisgKiBjcndfcmVnaXN0ZXJfaGFuZGxlcigpIC0gcmVnaXN0ZXIgYSBjaGFubmVsIHJlcG9ydCB3b3JkIGhhbmRsZXIKKyAqIEByc2M6IHJlcG9ydGluZyBzb3VyY2UgY29kZSB0byBoYW5kbGUKKyAqIEBoYW5kbGVyOiBoYW5kbGVyIHRvIGJlIHJlZ2lzdGVyZWQKKyAqCisgKiBSZXR1cm5zICUwIG9uIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUgZXJyb3IgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgY3J3X3JlZ2lzdGVyX2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKQoreworCWludCByYyA9IDA7CisKKwlpZiAoKHJzYyA8IDApIHx8IChyc2MgPj0gTlJfUlNDUykpCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmNyd19oYW5kbGVyX211dGV4KTsKKwlpZiAoY3J3X2hhbmRsZXJzW3JzY10pCisJCXJjID0gLUVCVVNZOworCWVsc2UKKwkJY3J3X2hhbmRsZXJzW3JzY10gPSBoYW5kbGVyOworCW11dGV4X3VubG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBjcndfdW5yZWdpc3Rlcl9oYW5kbGVyKCkgLSB1bnJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCisgKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCisgKi8KK3ZvaWQgY3J3X3VucmVnaXN0ZXJfaGFuZGxlcihpbnQgcnNjKQoreworCWlmICgocnNjIDwgMCkgfHwgKHJzYyA+PSBOUl9SU0NTKSkKKwkJcmV0dXJuOworCW11dGV4X2xvY2soJmNyd19oYW5kbGVyX211dGV4KTsKKwljcndfaGFuZGxlcnNbcnNjXSA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZjcndfaGFuZGxlcl9tdXRleCk7Cit9CisKKy8qCisgKiBSZXRyaWV2ZSBDUldzIGFuZCBjYWxsIGZ1bmN0aW9uIHRvIGhhbmRsZSBldmVudC4KKyAqLworc3RhdGljIGludCBjcndfY29sbGVjdF9pbmZvKHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgY3J3IGNyd1syXTsKKwlpbnQgY2NvZGU7CisJdW5zaWduZWQgaW50IGNoYWluOworCWludCBpZ25vcmU7CisKK3JlcGVhdDoKKwlpZ25vcmUgPSBkb3duX2ludGVycnVwdGlibGUoJmNyd19zZW1hcGhvcmUpOworCWNoYWluID0gMDsKKwl3aGlsZSAoMSkgeworCQljcndfaGFuZGxlcl90IGhhbmRsZXI7CisKKwkJaWYgKHVubGlrZWx5KGNoYWluID4gMSkpIHsKKwkJCXN0cnVjdCBjcncgdG1wX2NydzsKKworCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogQ29kZSBkb2VzIG5vdCBzdXBwb3J0IG1vcmUgIgorCQkJICAgICAgICJ0aGFuIHR3byBjaGFpbmVkIGNyd3M7IHBsZWFzZSByZXBvcnQgdG8gIgorCQkJICAgICAgICJsaW51eDM5MEBkZS5pYm0uY29tIVxuIiwgX19mdW5jX18pOworCQkJY2NvZGUgPSBzdGNydygmdG1wX2Nydyk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBjcncgcmVwb3J0cyBzbGN0PSVkLCBvZmx3PSVkLCAiCisJCQkgICAgICAgImNobj0lZCwgcnNjPSVYLCBhbmM9JWQsIGVyYz0lWCwgcnNpZD0lWFxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgdG1wX2Nydy5zbGN0LCB0bXBfY3J3Lm9mbHcsCisJCQkgICAgICAgdG1wX2Nydy5jaG4sIHRtcF9jcncucnNjLCB0bXBfY3J3LmFuYywKKwkJCSAgICAgICB0bXBfY3J3LmVyYywgdG1wX2Nydy5yc2lkKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IFRoaXMgd2FzIGNydyBudW1iZXIgJXggaW4gdGhlICIKKwkJCSAgICAgICAiY2hhaW5cbiIsIF9fZnVuY19fLCBjaGFpbik7CisJCQlpZiAoY2NvZGUgIT0gMCkKKwkJCQlicmVhazsKKwkJCWNoYWluID0gdG1wX2Nydy5jaG4gPyBjaGFpbiArIDEgOiAwOworCQkJY29udGludWU7CisJCX0KKwkJY2NvZGUgPSBzdGNydygmY3J3W2NoYWluXSk7CisJCWlmIChjY29kZSAhPSAwKQorCQkJYnJlYWs7CisJCXByaW50ayhLRVJOX0RFQlVHICJjcndfaW5mbyA6IENSVyByZXBvcnRzIHNsY3Q9JWQsIG9mbHc9JWQsICIKKwkJICAgICAgICJjaG49JWQsIHJzYz0lWCwgYW5jPSVkLCBlcmM9JVgsIHJzaWQ9JVhcbiIsCisJCSAgICAgICBjcndbY2hhaW5dLnNsY3QsIGNyd1tjaGFpbl0ub2ZsdywgY3J3W2NoYWluXS5jaG4sCisJCSAgICAgICBjcndbY2hhaW5dLnJzYywgY3J3W2NoYWluXS5hbmMsIGNyd1tjaGFpbl0uZXJjLAorCQkgICAgICAgY3J3W2NoYWluXS5yc2lkKTsKKwkJLyogQ2hlY2sgZm9yIG92ZXJmbG93cy4gKi8KKwkJaWYgKGNyd1tjaGFpbl0ub2ZsdykgeworCQkJaW50IGk7CisKKwkJCXByX2RlYnVnKCIlczogY3J3IG92ZXJmbG93IGRldGVjdGVkIVxuIiwgX19mdW5jX18pOworCQkJbXV0ZXhfbG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCQkJZm9yIChpID0gMDsgaSA8IE5SX1JTQ1M7IGkrKykgeworCQkJCWlmIChjcndfaGFuZGxlcnNbaV0pCisJCQkJCWNyd19oYW5kbGVyc1tpXShOVUxMLCBOVUxMLCAxKTsKKwkJCX0KKwkJCW11dGV4X3VubG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCQkJY2hhaW4gPSAwOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNyd1swXS5jaG4gJiYgIWNoYWluKSB7CisJCQljaGFpbisrOworCQkJY29udGludWU7CisJCX0KKwkJbXV0ZXhfbG9jaygmY3J3X2hhbmRsZXJfbXV0ZXgpOworCQloYW5kbGVyID0gY3J3X2hhbmRsZXJzW2Nyd1tjaGFpbl0ucnNjXTsKKwkJaWYgKGhhbmRsZXIpCisJCQloYW5kbGVyKCZjcndbMF0sIGNoYWluID8gJmNyd1sxXSA6IE5VTEwsIDApOworCQltdXRleF91bmxvY2soJmNyd19oYW5kbGVyX211dGV4KTsKKwkJLyogY2hhaW4gaXMgYWx3YXlzIDAgb3IgMSBoZXJlLiAqLworCQljaGFpbiA9IGNyd1tjaGFpbl0uY2huID8gY2hhaW4gKyAxIDogMDsKKwl9CisJZ290byByZXBlYXQ7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgY3J3X2hhbmRsZV9jaGFubmVsX3JlcG9ydCh2b2lkKQoreworCXVwKCZjcndfc2VtYXBob3JlKTsKK30KKworLyoKKyAqIFNlcGFyYXRlIGluaXRjYWxsIG5lZWRlZCBmb3Igc2VtYXBob3JlIGluaXRpYWxpemF0aW9uIHNpbmNlCisgKiBjcndfaGFuZGxlX2NoYW5uZWxfcmVwb3J0IG1pZ2h0IGJlIGNhbGxlZCBiZWZvcmUgY3J3X21hY2hpbmVfY2hlY2tfaW5pdC4KKyAqLworc3RhdGljIGludCBfX2luaXQgY3J3X2luaXRfc2VtYXBob3JlKHZvaWQpCit7CisJaW5pdF9NVVRFWF9MT0NLRUQoJmNyd19zZW1hcGhvcmUpOworCXJldHVybiAwOworfQorcHVyZV9pbml0Y2FsbChjcndfaW5pdF9zZW1hcGhvcmUpOworCisvKgorICogTWFjaGluZSBjaGVja3MgZm9yIHRoZSBjaGFubmVsIHN1YnN5c3RlbSBtdXN0IGJlIGVuYWJsZWQKKyAqIGFmdGVyIHRoZSBjaGFubmVsIHN1YnN5c3RlbSBpcyBpbml0aWFsaXplZAorICovCitzdGF0aWMgaW50IF9faW5pdCBjcndfbWFjaGluZV9jaGVja19pbml0KHZvaWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCisJdGFzayA9IGt0aHJlYWRfcnVuKGNyd19jb2xsZWN0X2luZm8sIE5VTEwsICJrbWNoZWNrIik7CisJaWYgKElTX0VSUih0YXNrKSkKKwkJcmV0dXJuIFBUUl9FUlIodGFzayk7CisJY3RsX3NldF9iaXQoMTQsIDI4KTsJLyogZW5hYmxlIGNoYW5uZWwgcmVwb3J0IE1DSCAqLworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKGNyd19tYWNoaW5lX2NoZWNrX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jc3MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKaW5kZXggODAxOTI4OC4uMDA4NWQ4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jc3MuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCkBAIC0xOCw4ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGFzbS9pc2MuaD4KKyNpbmNsdWRlIDxhc20vY3J3Lmg+CiAKLSNpbmNsdWRlICIuLi9zMzkwbWFjaC5oIgogI2luY2x1ZGUgImNzcy5oIgogI2luY2x1ZGUgImNpby5oIgogI2luY2x1ZGUgImNpb19kZWJ1Zy5oIgpAQCAtODMsNiArODMsMjUgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgY2FsbF9mbl9hbGxfc2NoKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBjYl9kYXRhICpjYiA9IGRhdGE7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKKwlpbnQgcmMgPSAwOworCisJc2NoID0gZ2V0X3N1YmNoYW5uZWxfYnlfc2NoaWQoc2NoaWQpOworCWlmIChzY2gpIHsKKwkJaWYgKGNiLT5mbl9rbm93bl9zY2gpCisJCQlyYyA9IGNiLT5mbl9rbm93bl9zY2goc2NoLCBjYi0+ZGF0YSk7CisJCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKKwl9IGVsc2UgeworCQlpZiAoY2ItPmZuX3Vua25vd25fc2NoKQorCQkJcmMgPSBjYi0+Zm5fdW5rbm93bl9zY2goc2NoaWQsIGNiLT5kYXRhKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKIGludCBmb3JfZWFjaF9zdWJjaGFubmVsX3N0YWdlZChpbnQgKCpmbl9rbm93bikoc3RydWN0IHN1YmNoYW5uZWwgKiwgdm9pZCAqKSwKIAkJCSAgICAgICBpbnQgKCpmbl91bmtub3duKShzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCwKIAkJCSAgICAgICB2b2lkICopLCB2b2lkICpkYXRhKQpAQCAtOTAsMTMgKzEwOSwxNyBAQAogCXN0cnVjdCBjYl9kYXRhIGNiOwogCWludCByYzsKIAotCWNiLnNldCA9IGlkc2V0X3NjaF9uZXcoKTsKLQlpZiAoIWNiLnNldCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWRzZXRfZmlsbChjYi5zZXQpOwogCWNiLmRhdGEgPSBkYXRhOwogCWNiLmZuX2tub3duX3NjaCA9IGZuX2tub3duOwogCWNiLmZuX3Vua25vd25fc2NoID0gZm5fdW5rbm93bjsKKworCWNiLnNldCA9IGlkc2V0X3NjaF9uZXcoKTsKKwlpZiAoIWNiLnNldCkKKwkJLyogZmFsbCBiYWNrIHRvIGJydXRlIGZvcmNlIHNjYW5uaW5nIGluIGNhc2Ugb2Ygb29tICovCisJCXJldHVybiBmb3JfZWFjaF9zdWJjaGFubmVsKGNhbGxfZm5fYWxsX3NjaCwgJmNiKTsKKworCWlkc2V0X2ZpbGwoY2Iuc2V0KTsKKwogCS8qIFByb2Nlc3MgcmVnaXN0ZXJlZCBzdWJjaGFubmVscy4gKi8KIAlyYyA9IGJ1c19mb3JfZWFjaF9kZXYoJmNzc19idXNfdHlwZSwgTlVMTCwgJmNiLCBjYWxsX2ZuX2tub3duX3NjaCk7CiAJaWYgKHJjKQpAQCAtMjcyLDcgKzI5NSw3IEBACiAJICogdGhlIHN1YmNoYW5uZWwgZHJpdmVyIGNhbiBkZWNpZGUgaXRzZWxmIHdoZW4gaXQgd2FudHMgdG8gaW5mb3JtCiAJICogdXNlcnNwYWNlIG9mIGl0cyBleGlzdGVuY2UuCiAJICovCi0Jc2NoLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMTsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDEpOwogCWNzc191cGRhdGVfc3NkX2luZm8oc2NoKTsKIAkvKiBtYWtlIGl0IGtub3duIHRvIHRoZSBzeXN0ZW0gKi8KIAlyZXQgPSBjc3Nfc2NoX2RldmljZV9yZWdpc3RlcihzY2gpOwpAQCAtMjg3LDcgKzMxMCw3IEBACiAJCSAqIGEgZml0dGluZyBkcml2ZXIgbW9kdWxlIG1heSBiZSBsb2FkZWQgYmFzZWQgb24gdGhlCiAJCSAqIG1vZGFsaWFzLgogCQkgKi8KLQkJc2NoLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKKwkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2LCAwKTsKIAkJa29iamVjdF91ZXZlbnQoJnNjaC0+ZGV2LmtvYmosIEtPQkpfQUREKTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTUxMCw2ICs1MzMsMTcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCByZXByb2JlX2FmdGVyX2lkbGUoc3RydWN0IHdvcmtfc3RydWN0ICp1bnVzZWQpCit7CisJLyogTWFrZSBzdXJlIGluaXRpYWwgc3ViY2hhbm5lbCBzY2FuIGlzIGRvbmUuICovCisJd2FpdF9ldmVudChjY3dfZGV2aWNlX2luaXRfd3EsCisJCSAgIGF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpID09IDApOworCWlmIChuZWVkX3JlcHJvYmUpCisJCWNzc19zY2hlZHVsZV9yZXByb2JlKCk7Cit9CisKK3N0YXRpYyBERUNMQVJFX1dPUksocmVwcm9iZV9pZGxlX3dvcmssIHJlcHJvYmVfYWZ0ZXJfaWRsZSk7CisKIC8qIFdvcmsgZnVuY3Rpb24gdXNlZCB0byByZXByb2JlIGFsbCB1bnJlZ2lzdGVyZWQgc3ViY2hhbm5lbHMuICovCiBzdGF0aWMgdm9pZCByZXByb2JlX2FsbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVudXNlZCkKIHsKQEAgLTUxNywxMCArNTUxLDEyIEBACiAKIAlDSU9fTVNHX0VWRU5UKDQsICJyZXByb2JlIHN0YXJ0XG4iKTsKIAotCW5lZWRfcmVwcm9iZSA9IDA7CiAJLyogTWFrZSBzdXJlIGluaXRpYWwgc3ViY2hhbm5lbCBzY2FuIGlzIGRvbmUuICovCi0Jd2FpdF9ldmVudChjY3dfZGV2aWNlX2luaXRfd3EsCi0JCSAgIGF0b21pY19yZWFkKCZjY3dfZGV2aWNlX2luaXRfY291bnQpID09IDApOworCWlmIChhdG9taWNfcmVhZCgmY2N3X2RldmljZV9pbml0X2NvdW50KSAhPSAwKSB7CisJCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmcmVwcm9iZV9pZGxlX3dvcmspOworCQlyZXR1cm47CisJfQorCW5lZWRfcmVwcm9iZSA9IDA7CiAJcmV0ID0gZm9yX2VhY2hfc3ViY2hhbm5lbF9zdGFnZWQoTlVMTCwgcmVwcm9iZV9zdWJjaGFubmVsLCBOVUxMKTsKIAogCUNJT19NU0dfRVZFTlQoNCwgInJlcHJvYmUgZG9uZSAocmM9JWQsIG5lZWRfcmVwcm9iZT0lZClcbiIsIHJldCwKQEAgLTYxOSw3ICs2NTUsNyBAQAogCQljc3MtPmdsb2JhbF9wZ2lkLnBnaWRfaGlnaC5leHRfY3NzaWQuY3NzaWQgPSBjc3MtPmNzc2lkOwogCX0gZWxzZSB7CiAjaWZkZWYgQ09ORklHX1NNUAotCQljc3MtPmdsb2JhbF9wZ2lkLnBnaWRfaGlnaC5jcHVfYWRkciA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCQljc3MtPmdsb2JhbF9wZ2lkLnBnaWRfaGlnaC5jcHVfYWRkciA9IHN0YXAoKTsKICNlbHNlCiAJCWNzcy0+Z2xvYmFsX3BnaWQucGdpZF9oaWdoLmNwdV9hZGRyID0gMDsKICNlbmRpZgpAQCAtNzY1LDcgKzgwMSw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKENSV19SU0NfU0NILCBjc3NfcHJvY2Vzc19jcncpOworCXJldCA9IGNyd19yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfU0NILCBjc3NfcHJvY2Vzc19jcncpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCkBAIC04NDUsNyArODgxLDcgQEAKIG91dF9idXM6CiAJYnVzX3VucmVnaXN0ZXIoJmNzc19idXNfdHlwZSk7CiBvdXQ6Ci0JczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKENSV19SU0NfQ1NTKTsKKwljcndfdW5yZWdpc3Rlcl9oYW5kbGVyKENSV19SU0NfQ1NTKTsKIAljaHNjX2ZyZWVfc2VpX2FyZWEoKTsKIAlrZnJlZShzbG93X3N1YmNoYW5uZWxfc2V0KTsKIAlwcl9hbGVydCgiVGhlIENTUyBkZXZpY2UgZHJpdmVyIGluaXRpYWxpemF0aW9uIGZhaWxlZCB3aXRoICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCmluZGV4IDIzZDU3NTIuLmM0ZDJmNjY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKQEAgLTQ1NywxMiArNDU3LDEzIEBACiAJcmV0dXJuIChyZXQgPT0gMCkgPyAtRU5PREVWIDogcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvbmxpbmVfc3RvcmVfaGFuZGxlX29mZmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCitzdGF0aWMgaW50IG9ubGluZV9zdG9yZV9oYW5kbGVfb2ZmbGluZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlpZiAoY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPT0gREVWX1NUQVRFX0RJU0NPTk5FQ1RFRCkKIAkJY2N3X2RldmljZV9yZW1vdmVfZGlzY29ubmVjdGVkKGNkZXYpOwotCWVsc2UgaWYgKGNkZXYtPmRydiAmJiBjZGV2LT5kcnYtPnNldF9vZmZsaW5lKQotCQljY3dfZGV2aWNlX3NldF9vZmZsaW5lKGNkZXYpOworCWVsc2UgaWYgKGNkZXYtPm9ubGluZSAmJiBjZGV2LT5kcnYgJiYgY2Rldi0+ZHJ2LT5zZXRfb2ZmbGluZSkKKwkJcmV0dXJuIGNjd19kZXZpY2Vfc2V0X29mZmxpbmUoY2Rldik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgb25saW5lX3N0b3JlX3JlY29nX2FuZF9vbmxpbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCkBAIC01MzAsMTMgKzUzMSwxMCBAQAogCQlnb3RvIG91dDsKIAlzd2l0Y2ggKGkpIHsKIAljYXNlIDA6Ci0JCW9ubGluZV9zdG9yZV9oYW5kbGVfb2ZmbGluZShjZGV2KTsKLQkJcmV0ID0gY291bnQ7CisJCXJldCA9IG9ubGluZV9zdG9yZV9oYW5kbGVfb2ZmbGluZShjZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCQlyZXQgPSBvbmxpbmVfc3RvcmVfaGFuZGxlX29ubGluZShjZGV2LCBmb3JjZSk7Ci0JCWlmICghcmV0KQotCQkJcmV0ID0gY291bnQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CkBAIC01NDUsNyArNTQzLDcgQEAKIAlpZiAoY2Rldi0+ZHJ2KQogCQltb2R1bGVfcHV0KGNkZXYtPmRydi0+b3duZXIpOwogCWF0b21pY19zZXQoJmNkZXYtPnByaXZhdGUtPm9ub2ZmLCAwKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiBjb3VudDsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTY4MSwzNSArNjc5LDIyIEBACiAJcmV0dXJuIGRldiA/IHRvX2Njd2RldihkZXYpIDogTlVMTDsKIH0KIAotc3RhdGljIHZvaWQKLWNjd19kZXZpY2VfYWRkX2NoYW5nZWQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUgKnByaXY7Ci0Jc3RydWN0IGNjd19kZXZpY2UgKmNkZXY7Ci0KLQlwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUsIGtpY2tfd29yayk7Ci0JY2RldiA9IHByaXYtPmNkZXY7Ci0JaWYgKGRldmljZV9hZGQoJmNkZXYtPmRldikpIHsKLQkJcHV0X2RldmljZSgmY2Rldi0+ZGV2KTsKLQkJcmV0dXJuOwotCX0KLQlzZXRfYml0KDEsICZjZGV2LT5wcml2YXRlLT5yZWdpc3RlcmVkKTsKLX0KLQotdm9pZCBjY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3ZvaWQgY2N3X2RldmljZV9kb191bmJpbmRfYmluZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2RldjsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOworCWludCByZXQ7CiAKIAlwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjY3dfZGV2aWNlX3ByaXZhdGUsIGtpY2tfd29yayk7CiAJY2RldiA9IHByaXYtPmNkZXY7CiAJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAotCWNjd19kZXZpY2VfdW5yZWdpc3RlcihjZGV2KTsKLQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywKLQkJICAgICBjY3dfZGV2aWNlX2FkZF9jaGFuZ2VkKTsKLQlxdWV1ZV93b3JrKGNjd19kZXZpY2Vfd29yaywgJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yayk7CisJaWYgKHRlc3RfYml0KDEsICZjZGV2LT5wcml2YXRlLT5yZWdpc3RlcmVkKSkgeworCQlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoJmNkZXYtPmRldik7CisJCXJldCA9IGRldmljZV9hdHRhY2goJmNkZXYtPmRldik7CisJCVdBUk5fT04ocmV0ID09IC1FTk9ERVYpOworCX0KIH0KIAogc3RhdGljIHZvaWQKQEAgLTc5OSw3ICs3ODQsNyBAQAogCQlyZXR1cm47CiAJb3RoZXJfc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAkvKiBOb3RlOiBkZXZpY2VfbW92ZSgpIGNoYW5nZXMgY2Rldi0+ZGV2LnBhcmVudCAqLwotCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldik7CisJcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2LCBEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVYpOwogCWlmIChyZXQpIHsKIAkJQ0lPX01TR19FVkVOVCgwLCAiTW92aW5nIGRpc2Nvbm5lY3RlZCBkZXZpY2UgMC4leC4lMDR4IGZhaWxlZCAiCiAJCQkgICAgICAiKHJldD0lZCkhXG4iLCBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwKQEAgLTgzMCw3ICs4MTUsNyBAQAogCSAqIFRyeSB0byBtb3ZlIHRoZSBjY3cgZGV2aWNlIHRvIGl0cyBuZXcgc3ViY2hhbm5lbC4KIAkgKiBOb3RlOiBkZXZpY2VfbW92ZSgpIGNoYW5nZXMgY2Rldi0+ZGV2LnBhcmVudAogCSAqLwotCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZzY2gtPmRldik7CisJcmV0ID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2LCBEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVYpOwogCWlmIChyZXQpIHsKIAkJQ0lPX01TR19FVkVOVCgwLCAiTW92aW5nIGRldmljZSAwLiV4LiUwNHggZnJvbSBvcnBoYW5hZ2UgIgogCQkJICAgICAgImZhaWxlZCAocmV0PSVkKSFcbiIsCkBAIC04OTcsNyArODgyLDggQEAKIAkgKiBjY3cgZGV2aWNlIGNhbiB0YWtlIGl0cyBwbGFjZSBvbiB0aGUgc3ViY2hhbm5lbC4KIAkgKiBOb3RlOiBkZXZpY2VfbW92ZSgpIGNoYW5nZXMgY2Rldi0+ZGV2LnBhcmVudAogCSAqLwotCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZjc3MtPnBzZXVkb19zdWJjaGFubmVsLT5kZXYpOworCXJldCA9IGRldmljZV9tb3ZlKCZjZGV2LT5kZXYsICZjc3MtPnBzZXVkb19zdWJjaGFubmVsLT5kZXYsCisJCURQTV9PUkRFUl9OT05FKTsKIAlpZiAocmV0KSB7CiAJCUNJT19NU0dfRVZFTlQoMCwgIk1vdmluZyBkZXZpY2UgMC4leC4lMDR4IHRvIG9ycGhhbmFnZSBmYWlsZWQgIgogCQkJICAgICAgIihyZXQ9JWQpIVxuIiwgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLnNzaWQsCkBAIC05ODEsNyArOTY3LDcgQEAKIAkgKiBOb3cgd2Uga25vdyB0aGlzIHN1YmNoYW5uZWwgd2lsbCBzdGF5LCB3ZSBjYW4gdGhyb3cKIAkgKiBvdXIgZGVsYXllZCB1ZXZlbnQuCiAJICovCi0Jc2NoLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcygmc2NoLT5kZXYsIDApOwogCWtvYmplY3RfdWV2ZW50KCZzY2gtPmRldi5rb2JqLCBLT0JKX0FERCk7CiAJLyogbWFrZSBpdCBrbm93biB0byB0aGUgc3lzdGVtICovCiAJcmV0ID0gY2N3X2RldmljZV9yZWdpc3RlcihjZGV2KTsKQEAgLTEwMzQsOCArMTAyMCw2IEBACiB2b2lkCiBpb19zdWJjaGFubmVsX3JlY29nX2RvbmUoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7Ci0Jc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKLQogCWlmIChjc3NfaW5pdF9kb25lID09IDApIHsKIAkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVjb2dfZG9uZSA9IDE7CiAJCXJldHVybjsKQEAgLTEwNDYsNyArMTAzMCw2IEBACiAJCS8qIFJlbW92ZSBkZXZpY2UgZm91bmQgbm90IG9wZXJhdGlvbmFsLiAqLwogCQlpZiAoIWdldF9kZXZpY2UoJmNkZXYtPmRldikpCiAJCQlicmVhazsKLQkJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAkJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssCiAJCQkgICAgIGNjd19kZXZpY2VfY2FsbF9zY2hfdW5yZWdpc3Rlcik7CiAJCXF1ZXVlX3dvcmsoc2xvd19wYXRoX3dxLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKQEAgLTExMjksNyArMTExMiw3IEBACiAJICogVHJ5IHRvIG1vdmUgdGhlIGNjdyBkZXZpY2UgdG8gaXRzIG5ldyBzdWJjaGFubmVsLgogCSAqIE5vdGU6IGRldmljZV9tb3ZlKCkgY2hhbmdlcyBjZGV2LT5kZXYucGFyZW50CiAJICovCi0JcmMgPSBkZXZpY2VfbW92ZSgmY2Rldi0+ZGV2LCAmc2NoLT5kZXYpOworCXJjID0gZGV2aWNlX21vdmUoJmNkZXYtPmRldiwgJnNjaC0+ZGV2LCBEUE1fT1JERVJfUEFSRU5UX0JFRk9SRV9ERVYpOwogCW11dGV4X3VubG9jaygmc2NoLT5yZWdfbXV0ZXgpOwogCWlmIChyYykgewogCQlDSU9fTVNHX0VWRU5UKDAsICJNb3ZpbmcgZGV2aWNlIDAuJXguJTA0eCB0byBzdWJjaGFubmVsICIKQEAgLTEyNDMsNyArMTIyNiw3IEBACiAJCSAqIHRoZSBjY3dfZGV2aWNlIGFuZCBleGl0LiBUaGlzIGhhcHBlbnMgZm9yIGFsbCBlYXJseQogCQkgKiBkZXZpY2VzLCBlLmcuIHRoZSBjb25zb2xlLgogCQkgKi8KLQkJc2NoLT5kZXYudWV2ZW50X3N1cHByZXNzID0gMDsKKwkJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoJnNjaC0+ZGV2LCAwKTsKIAkJa29iamVjdF91ZXZlbnQoJnNjaC0+ZGV2LmtvYmosIEtPQkpfQUREKTsKIAkJY2Rldi0+ZGV2Lmdyb3VwcyA9IGNjd2Rldl9hdHRyX2dyb3VwczsKIAkJZGV2aWNlX2luaXRpYWxpemUoJmNkZXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuaAppbmRleCAwZjJlNjNlLi44NWUwMTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmgKQEAgLTgwLDcgKzgwLDcgQEAKIAogaW50IGNjd19kZXZpY2VfY2FuY2VsX2hhbHRfY2xlYXIoc3RydWN0IGNjd19kZXZpY2UgKik7CiAKLXZvaWQgY2N3X2RldmljZV9kb191bnJlZ19yZXJlZyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKik7Cit2b2lkIGNjd19kZXZpY2VfZG9fdW5iaW5kX2JpbmQoc3RydWN0IHdvcmtfc3RydWN0ICopOwogdm9pZCBjY3dfZGV2aWNlX21vdmVfdG9fb3JwaGFuYWdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKIGludCBjY3dfZGV2aWNlX2lzX29ycGhhbihzdHJ1Y3QgY2N3X2RldmljZSAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfZnNtLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwppbmRleCA4ZGY1ZWFhLi44N2I0YmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJICAgIGNkZXYtPmlkLmRldl90eXBlICE9IGNkZXYtPnByaXZhdGUtPnNlbnNlaWQuZGV2X3R5cGUgfHwKIAkgICAgY2Rldi0+aWQuZGV2X21vZGVsICE9IGNkZXYtPnByaXZhdGUtPnNlbnNlaWQuZGV2X21vZGVsKSB7CiAJCVBSRVBBUkVfV09SSygmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLAotCQkJICAgICBjY3dfZGV2aWNlX2RvX3VucmVnX3JlcmVnKTsKKwkJCSAgICAgY2N3X2RldmljZV9kb191bmJpbmRfYmluZCk7CiAJCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMzY2LDcgKzM2Niw3IEBACiAJfQogCS8qIERyaXZlciBkb2Vzbid0IHdhbnQgZGV2aWNlIGJhY2suICovCiAJY2N3X2RldmljZV9zZXRfbm90b3BlcihjZGV2KTsKLQlQUkVQQVJFX1dPUksoJmNkZXYtPnByaXZhdGUtPmtpY2tfd29yaywgY2N3X2RldmljZV9kb191bnJlZ19yZXJlZyk7CisJUFJFUEFSRV9XT1JLKCZjZGV2LT5wcml2YXRlLT5raWNrX3dvcmssIGNjd19kZXZpY2VfZG9fdW5iaW5kX2JpbmQpOwogCXF1ZXVlX3dvcmsoY2N3X2RldmljZV93b3JrLCAmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrKTsKIH0KIApAQCAtNzI4LDcgKzcyOCw3IEBACiB7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKIAotCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX05PVF9PUEVSOworCWNjd19kZXZpY2Vfc2V0X25vdG9wZXIoY2Rldik7CiAJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAljc3Nfc2NoZWR1bGVfZXZhbChzY2gtPnNjaGlkKTsKIH0KQEAgLTEwNTIsNyArMTA1Miw3IEBACiAJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKIAkvKgogCSAqIEFuIGludGVycnVwdCBpbiBzdGF0ZSBvZmZsaW5lIG1lYW5zIGEgcHJldmlvdXMgZGlzYWJsZSB3YXMgbm90Ci0JICogc3VjY2Vzc2Z1bC4gVHJ5IGFnYWluLgorCSAqIHN1Y2Nlc3NmdWwgLSBzaG91bGQgbm90IGhhcHBlbiwgYnV0IHdlIHRyeSB0byBkaXNhYmxlIGFnYWluLgogCSAqLwogCWNpb19kaXNhYmxlX3N1YmNoYW5uZWwoc2NoKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKaW5kZXggZWFiY2M0Mi4uMTUxNzU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2Vfb3BzLmMKQEAgLTY4MCw3ICs2ODAsNyBAQAogCWlmIChjZGV2LT5wcml2YXRlLT5zdGF0ZSAhPSBERVZfU1RBVEVfT05MSU5FKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAoIXNjc3dfaXNfdG0oJnNjaC0+c2NoaWIuc2NzdykgfHwKLQkgICAgIShzY3N3X2FjdGwoJnNjaC0+c2NoaWIuc2NzdykgfCBTQ1NXX0FDVExfU1RBUlRfUEVORCkpCisJICAgICEoc2Nzd19hY3RsKCZzY2gtPnNjaGliLnNjc3cpICYgU0NTV19BQ1RMX1NUQVJUX1BFTkQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gY2lvX3RtX2ludHJnKHNjaCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCmluZGV4IDQyZjJiMDkuLjEzYmNiODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCkBAIC0xODYsNiArMTg2LDkgQEAKIAkvKiBpbnB1dCBidWZmZXIgYWNrbm93bGVkZ2VtZW50IGZsYWcgKi8KIAlpbnQgcG9sbGluZzsKIAorCS8qIGZpcnN0IEFDSydlZCBidWZmZXIgKi8KKwlpbnQgYWNrX3N0YXJ0OworCiAJLyogaG93IG11Y2ggc2JhbHMgYXJlIGFja25vd2xlZGdlZCB3aXRoIHFlYnNtICovCiAJaW50IGFja19jb3VudDsKIApAQCAtMjM0LDcgKzIzNyw3IEBACiAJaW50IGZpcnN0X3RvX2NoZWNrOwogCiAJLyogZmlyc3RfdG9fY2hlY2sgb2YgdGhlIGxhc3QgdGltZSAqLwotCWludCBsYXN0X21vdmVfZnRjOworCWludCBsYXN0X21vdmU7CiAKIAkvKiBiZWdpbm5pbmcgcG9zaXRpb24gZm9yIGNhbGxpbmcgdGhlIHByb2dyYW0gKi8KIAlpbnQgZmlyc3RfdG9fa2ljazsKQEAgLTI0NCw3ICsyNDcsNiBAQAogCiAJc3RydWN0IHFkaW9faXJxICppcnFfcHRyOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OwotCXNwaW5sb2NrX3QgbG9jazsKIAogCS8qIGVycm9yIGNvbmRpdGlvbiBkdXJpbmcgYSBkYXRhIHRyYW5zZmVyICovCiAJdW5zaWduZWQgaW50IHFkaW9fZXJyb3I7CkBAIC0zNTQsNyArMzU2LDcgQEAKIAkJICBpbnQgYXV0b19hY2spOwogdm9pZCBxZGlvX2NoZWNrX291dGJvdW5kX2FmdGVyX3RoaW5pbnQoc3RydWN0IHFkaW9fcSAqcSk7CiBpbnQgcWRpb19pbmJvdW5kX3FfbW92ZWQoc3RydWN0IHFkaW9fcSAqcSk7Ci12b2lkIHFkaW9fa2lja19pbmJvdW5kX2hhbmRsZXIoc3RydWN0IHFkaW9fcSAqcSk7Cit2b2lkIHFkaW9fa2lja19oYW5kbGVyKHN0cnVjdCBxZGlvX3EgKnEpOwogdm9pZCBxZGlvX3N0b3BfcG9sbGluZyhzdHJ1Y3QgcWRpb19xICpxKTsKIGludCBxZGlvX3NpZ2Ffc3luY19xKHN0cnVjdCBxZGlvX3EgKnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fZGVidWcuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCmluZGV4IGRhN2FmYjAuLmUzNDM0YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jCkBAIC02Myw4ICs2Myw5IEBACiAJc2VxX3ByaW50ZihtLCAiZGV2aWNlIHN0YXRlIGluZGljYXRvcjogJWRcbiIsICoodTMyICopcS0+aXJxX3B0ci0+ZHNjaSk7CiAJc2VxX3ByaW50ZihtLCAibnJfdXNlZDogJWRcbiIsIGF0b21pY19yZWFkKCZxLT5ucl9idWZfdXNlZCkpOwogCXNlcV9wcmludGYobSwgImZ0YzogJWRcbiIsIHEtPmZpcnN0X3RvX2NoZWNrKTsKLQlzZXFfcHJpbnRmKG0sICJsYXN0X21vdmVfZnRjOiAlZFxuIiwgcS0+bGFzdF9tb3ZlX2Z0Yyk7CisJc2VxX3ByaW50ZihtLCAibGFzdF9tb3ZlOiAlZFxuIiwgcS0+bGFzdF9tb3ZlKTsKIAlzZXFfcHJpbnRmKG0sICJwb2xsaW5nOiAlZFxuIiwgcS0+dS5pbi5wb2xsaW5nKTsKKwlzZXFfcHJpbnRmKG0sICJhY2sgc3RhcnQ6ICVkXG4iLCBxLT51LmluLmFja19zdGFydCk7CiAJc2VxX3ByaW50ZihtLCAiYWNrIGNvdW50OiAlZFxuIiwgcS0+dS5pbi5hY2tfY291bnQpOwogCXNlcV9wcmludGYobSwgInNsc2IgYnVmZmVyIHN0YXRlczpcbiIpOwogCXNlcV9wcmludGYobSwgInwwICAgICAgfDggICAgICB8MTYgICAgIHwyNCAgICAgfDMyICAgICB8NDAgICAgIHw0OCAgICAgfDU2ICA2M3xcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKaW5kZXggMTBjYjBmOC4uOWU4YTI5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCkBAIC0zODAsMTEgKzM4MCwxMSBAQAogCiAJLyogc2hvdyB0aGUgY2FyZCB0aGF0IHdlIGFyZSBub3QgcG9sbGluZyBhbnltb3JlICovCiAJaWYgKGlzX3FlYnNtKHEpKSB7Ci0JCXNldF9idWZfc3RhdGVzKHEsIHEtPmxhc3RfbW92ZV9mdGMsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKKwkJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+dS5pbi5hY2tfc3RhcnQsIFNMU0JfUF9JTlBVVF9OT1RfSU5JVCwKIAkJCSAgICAgICBxLT51LmluLmFja19jb3VudCk7CiAJCXEtPnUuaW4uYWNrX2NvdW50ID0gMDsKIAl9IGVsc2UKLQkJc2V0X2J1Zl9zdGF0ZShxLCBxLT5sYXN0X21vdmVfZnRjLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQpOworCQlzZXRfYnVmX3N0YXRlKHEsIHEtPnUuaW4uYWNrX3N0YXJ0LCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQpOwogfQogCiBzdGF0aWMgdm9pZCBhbm5vdW5jZV9idWZmZXJfZXJyb3Ioc3RydWN0IHFkaW9fcSAqcSwgaW50IGNvdW50KQpAQCAtNDE5LDE1ICs0MTksMTUgQEAKIAkJaWYgKCFxLT51LmluLnBvbGxpbmcpIHsKIAkJCXEtPnUuaW4ucG9sbGluZyA9IDE7CiAJCQlxLT51LmluLmFja19jb3VudCA9IGNvdW50OwotCQkJcS0+bGFzdF9tb3ZlX2Z0YyA9IHEtPmZpcnN0X3RvX2NoZWNrOworCQkJcS0+dS5pbi5hY2tfc3RhcnQgPSBxLT5maXJzdF90b19jaGVjazsKIAkJCXJldHVybjsKIAkJfQogCiAJCS8qIGRlbGV0ZSB0aGUgcHJldmlvdXMgQUNLJ3MgKi8KLQkJc2V0X2J1Zl9zdGF0ZXMocSwgcS0+bGFzdF9tb3ZlX2Z0YywgU0xTQl9QX0lOUFVUX05PVF9JTklULAorCQlzZXRfYnVmX3N0YXRlcyhxLCBxLT51LmluLmFja19zdGFydCwgU0xTQl9QX0lOUFVUX05PVF9JTklULAogCQkJICAgICAgIHEtPnUuaW4uYWNrX2NvdW50KTsKIAkJcS0+dS5pbi5hY2tfY291bnQgPSBjb3VudDsKLQkJcS0+bGFzdF9tb3ZlX2Z0YyA9IHEtPmZpcnN0X3RvX2NoZWNrOworCQlxLT51LmluLmFja19zdGFydCA9IHEtPmZpcnN0X3RvX2NoZWNrOwogCQlyZXR1cm47CiAJfQogCkBAIC00MzksMTQgKzQzOSwxMyBAQAogCWlmIChxLT51LmluLnBvbGxpbmcpIHsKIAkJLyogcmVzZXQgdGhlIHByZXZpb3VzIEFDSyBidXQgZmlyc3Qgc2V0IHRoZSBuZXcgb25lICovCiAJCXNldF9idWZfc3RhdGUocSwgbmV3LCBTTFNCX1BfSU5QVVRfQUNLKTsKLQkJc2V0X2J1Zl9zdGF0ZShxLCBxLT5sYXN0X21vdmVfZnRjLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQpOwotCX0KLQllbHNlIHsKKwkJc2V0X2J1Zl9zdGF0ZShxLCBxLT51LmluLmFja19zdGFydCwgU0xTQl9QX0lOUFVUX05PVF9JTklUKTsKKwl9IGVsc2UgewogCQlxLT51LmluLnBvbGxpbmcgPSAxOwotCQlzZXRfYnVmX3N0YXRlKHEsIHEtPmZpcnN0X3RvX2NoZWNrLCBTTFNCX1BfSU5QVVRfQUNLKTsKKwkJc2V0X2J1Zl9zdGF0ZShxLCBuZXcsIFNMU0JfUF9JTlBVVF9BQ0spOwogCX0KIAotCXEtPmxhc3RfbW92ZV9mdGMgPSBuZXc7CisJcS0+dS5pbi5hY2tfc3RhcnQgPSBuZXc7CiAJY291bnQtLTsKIAlpZiAoIWNvdW50KQogCQlyZXR1cm47CkBAIC00NTUsNyArNDU0LDcgQEAKIAkgKiBOZWVkIHRvIGNoYW5nZSBhbGwgUFJJTUVEIGJ1ZmZlcnMgdG8gTk9UX0lOSVQsIG90aGVyd2lzZQogCSAqIHdlJ3JlIGxvb3NpbmcgaW5pdGlhdGl2ZSBpbiB0aGUgdGhpbmludCBjb2RlLgogCSAqLwotCXNldF9idWZfc3RhdGVzKHEsIG5leHRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrKSwgU0xTQl9QX0lOUFVUX05PVF9JTklULAorCXNldF9idWZfc3RhdGVzKHEsIHEtPmZpcnN0X3RvX2NoZWNrLCBTTFNCX1BfSU5QVVRfTk9UX0lOSVQsCiAJCSAgICAgICBjb3VudCk7CiB9CiAKQEAgLTUyMyw3ICs1MjIsOCBAQAogCiAJYnVmbnIgPSBnZXRfaW5ib3VuZF9idWZmZXJfZnJvbnRpZXIocSk7CiAKLQlpZiAoKGJ1Zm5yICE9IHEtPmxhc3RfbW92ZV9mdGMpIHx8IHEtPnFkaW9fZXJyb3IpIHsKKwlpZiAoKGJ1Zm5yICE9IHEtPmxhc3RfbW92ZSkgfHwgcS0+cWRpb19lcnJvcikgeworCQlxLT5sYXN0X21vdmUgPSBidWZucjsKIAkJaWYgKCFuZWVkX3NpZ2Ffc3luYyhxKSAmJiAhcGNpX291dF9zdXBwb3J0ZWQocSkpCiAJCQlxLT51LmluLnRpbWVzdGFtcCA9IGdldF91c2VjcygpOwogCkBAIC01NzAsMjkgKzU3MCwzMCBAQAogCX0KIH0KIAotdm9pZCBxZGlvX2tpY2tfaW5ib3VuZF9oYW5kbGVyKHN0cnVjdCBxZGlvX3EgKnEpCit2b2lkIHFkaW9fa2lja19oYW5kbGVyKHN0cnVjdCBxZGlvX3EgKnEpCiB7Ci0JaW50IGNvdW50LCBzdGFydCwgZW5kOwotCi0JcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmluYm91bmRfaGFuZGxlcik7Ci0KLQlzdGFydCA9IHEtPmZpcnN0X3RvX2tpY2s7Ci0JZW5kID0gcS0+Zmlyc3RfdG9fY2hlY2s7Ci0JaWYgKGVuZCA+PSBzdGFydCkKLQkJY291bnQgPSBlbmQgLSBzdGFydDsKLQllbHNlCi0JCWNvdW50ID0gZW5kICsgUURJT19NQVhfQlVGRkVSU19QRVJfUSAtIHN0YXJ0OwotCi0JREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtpaCBzOiUzZCBjOiUzZCIsIHN0YXJ0LCBjb3VudCk7CisJaW50IHN0YXJ0ID0gcS0+Zmlyc3RfdG9fa2ljazsKKwlpbnQgZW5kID0gcS0+Zmlyc3RfdG9fY2hlY2s7CisJaW50IGNvdW50OwogCiAJaWYgKHVubGlrZWx5KHEtPmlycV9wdHItPnN0YXRlICE9IFFESU9fSVJRX1NUQVRFX0FDVElWRSkpCiAJCXJldHVybjsKIAotCXEtPmhhbmRsZXIocS0+aXJxX3B0ci0+Y2RldiwgcS0+cWRpb19lcnJvciwgcS0+bnIsCi0JCSAgIHN0YXJ0LCBjb3VudCwgcS0+aXJxX3B0ci0+aW50X3Bhcm0pOworCWNvdW50ID0gc3ViX2J1ZihlbmQsIHN0YXJ0KTsKKworCWlmIChxLT5pc19pbnB1dF9xKSB7CisJCXFkaW9fcGVyZl9zdGF0X2luYygmcGVyZl9zdGF0cy5pbmJvdW5kX2hhbmRsZXIpOworCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia2loIHM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKKwl9IGVsc2UgeworCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia29oOiBucjolMWQiLCBxLT5ucik7CisJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzOiUzZCBjOiUzZCIsIHN0YXJ0LCBjb3VudCk7CisJfQorCisJcS0+aGFuZGxlcihxLT5pcnFfcHRyLT5jZGV2LCBxLT5xZGlvX2Vycm9yLCBxLT5uciwgc3RhcnQsIGNvdW50LAorCQkgICBxLT5pcnFfcHRyLT5pbnRfcGFybSk7CiAKIAkvKiBmb3IgdGhlIG5leHQgdGltZSAqLwotCXEtPmZpcnN0X3RvX2tpY2sgPSBxLT5maXJzdF90b19jaGVjazsKKwlxLT5maXJzdF90b19raWNrID0gZW5kOwogCXEtPnFkaW9fZXJyb3IgPSAwOwogfQogCkBAIC02MDMsNyArNjA0LDcgQEAKIAlpZiAoIXFkaW9faW5ib3VuZF9xX21vdmVkKHEpKQogCQlyZXR1cm47CiAKLQlxZGlvX2tpY2tfaW5ib3VuZF9oYW5kbGVyKHEpOworCXFkaW9fa2lja19oYW5kbGVyKHEpOwogCiAJaWYgKCFxZGlvX2luYm91bmRfcV9kb25lKHEpKQogCQkvKiBtZWFucyBwb2xsIHRpbWUgaXMgbm90IHlldCBvdmVyICovCkBAIC02OTgsMjEgKzY5OSwyMSBAQAogCiAJYnVmbnIgPSBnZXRfb3V0Ym91bmRfYnVmZmVyX2Zyb250aWVyKHEpOwogCi0JaWYgKChidWZuciAhPSBxLT5sYXN0X21vdmVfZnRjKSB8fCBxLT5xZGlvX2Vycm9yKSB7Ci0JCXEtPmxhc3RfbW92ZV9mdGMgPSBidWZucjsKKwlpZiAoKGJ1Zm5yICE9IHEtPmxhc3RfbW92ZSkgfHwgcS0+cWRpb19lcnJvcikgeworCQlxLT5sYXN0X21vdmUgPSBidWZucjsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgIm91dCBtb3ZlZDolMWQiLCBxLT5ucik7CiAJCXJldHVybiAxOwogCX0gZWxzZQogCQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcWRpb19raWNrX291dGJvdW5kX3Eoc3RydWN0IHFkaW9fcSAqcSkKK3N0YXRpYyBpbnQgcWRpb19raWNrX291dGJvdW5kX3Eoc3RydWN0IHFkaW9fcSAqcSkKIHsKIAl1bnNpZ25lZCBpbnQgYnVzeV9iaXQ7CiAJaW50IGNjOwogCiAJaWYgKCFuZWVkX3NpZ2Ffb3V0KHEpKQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInNpZ2EtdzolMWQiLCBxLT5ucik7CiAJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnNpZ2Ffb3V0KTsKQEAgLTcyNCw3NSArNzI1LDM3IEBACiAJY2FzZSAyOgogCQlpZiAoYnVzeV9iaXQpIHsKIAkJCURCRl9FUlJPUigiJTR4IGNjMiBSRVA6JTFkIiwgU0NIX05PKHEpLCBxLT5ucik7Ci0JCQlxLT5xZGlvX2Vycm9yID0gY2MgfCBRRElPX0VSUk9SX1NJR0FfQlVTWTsKLQkJfSBlbHNlIHsKLQkJCURCRl9ERVZfRVZFTlQoREJGX0lORk8sIHEtPmlycV9wdHIsICJzaWdhLXcgY2MyOiUxZCIsCi0JCQkJICAgICAgcS0+bnIpOwotCQkJcS0+cWRpb19lcnJvciA9IGNjOwotCQl9CisJCQljYyB8PSBRRElPX0VSUk9SX1NJR0FfQlVTWTsKKwkJfSBlbHNlCisJCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAic2lnYS13IGNjMjolMWQiLCBxLT5ucik7CiAJCWJyZWFrOwogCWNhc2UgMToKIAljYXNlIDM6CiAJCURCRl9FUlJPUigiJTR4IFNJR0EtVzolMWQiLCBTQ0hfTk8ocSksIGNjKTsKLQkJcS0+cWRpb19lcnJvciA9IGNjOwogCQlicmVhazsKIAl9Ci19Ci0KLXN0YXRpYyB2b2lkIHFkaW9fa2lja19vdXRib3VuZF9oYW5kbGVyKHN0cnVjdCBxZGlvX3EgKnEpCi17Ci0JaW50IHN0YXJ0LCBlbmQsIGNvdW50OwotCi0Jc3RhcnQgPSBxLT5maXJzdF90b19raWNrOwotCWVuZCA9IHEtPmxhc3RfbW92ZV9mdGM7Ci0JaWYgKGVuZCA+PSBzdGFydCkKLQkJY291bnQgPSBlbmQgLSBzdGFydDsKLQllbHNlCi0JCWNvdW50ID0gZW5kICsgUURJT19NQVhfQlVGRkVSU19QRVJfUSAtIHN0YXJ0OwotCi0JREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtpY2tvdXRoOiAlMWQiLCBxLT5ucik7Ci0JREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgInM6JTNkIGM6JTNkIiwgc3RhcnQsIGNvdW50KTsKLQotCWlmICh1bmxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSAhPSBRRElPX0lSUV9TVEFURV9BQ1RJVkUpKQotCQlyZXR1cm47Ci0KLQlxLT5oYW5kbGVyKHEtPmlycV9wdHItPmNkZXYsIHEtPnFkaW9fZXJyb3IsIHEtPm5yLCBzdGFydCwgY291bnQsCi0JCSAgIHEtPmlycV9wdHItPmludF9wYXJtKTsKLQotCS8qIGZvciB0aGUgbmV4dCB0aW1lOiAqLwotCXEtPmZpcnN0X3RvX2tpY2sgPSBxLT5sYXN0X21vdmVfZnRjOwotCXEtPnFkaW9fZXJyb3IgPSAwOworCXJldHVybiBjYzsKIH0KIAogc3RhdGljIHZvaWQgX19xZGlvX291dGJvdW5kX3Byb2Nlc3Npbmcoc3RydWN0IHFkaW9fcSAqcSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnRhc2tsZXRfb3V0Ym91bmQpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5sb2NrLCBmbGFncyk7Ci0KIAlCVUdfT04oYXRvbWljX3JlYWQoJnEtPm5yX2J1Zl91c2VkKSA8IDApOwogCiAJaWYgKHFkaW9fb3V0Ym91bmRfcV9tb3ZlZChxKSkKLQkJcWRpb19raWNrX291dGJvdW5kX2hhbmRsZXIocSk7CisJCXFkaW9fa2lja19oYW5kbGVyKHEpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHF1ZXVlX3R5cGUocSkgPT0gUURJT19aRkNQX1FGTVQpIHsKKwlpZiAocXVldWVfdHlwZShxKSA9PSBRRElPX1pGQ1BfUUZNVCkKIAkJaWYgKCFwY2lfb3V0X3N1cHBvcnRlZChxKSAmJiAhcWRpb19vdXRib3VuZF9xX2RvbmUocSkpCi0JCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKLQkJcmV0dXJuOwotCX0KKwkJCWdvdG8gc2NoZWQ7CiAKIAkvKiBiYWlsIG91dCBmb3IgSGlwZXJTb2NrZXRzIHVuaWNhc3QgcXVldWVzICovCiAJaWYgKHF1ZXVlX3R5cGUocSkgPT0gUURJT19JUURJT19RRk1UICYmICFtdWx0aWNhc3Rfb3V0Ym91bmQocSkpCiAJCXJldHVybjsKIAogCWlmICgocXVldWVfdHlwZShxKSA9PSBRRElPX0lRRElPX1FGTVQpICYmCi0JICAgIChhdG9taWNfcmVhZCgmcS0+bnJfYnVmX3VzZWQpKSA+IFFESU9fSVFESU9fUE9MTF9MVkwpIHsKLQkJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7Ci0JCXJldHVybjsKLQl9CisJICAgIChhdG9taWNfcmVhZCgmcS0+bnJfYnVmX3VzZWQpKSA+IFFESU9fSVFESU9fUE9MTF9MVkwpCisJCWdvdG8gc2NoZWQ7CiAKIAlpZiAocS0+dS5vdXQucGNpX291dF9lbmFibGVkKQogCQlyZXR1cm47CkBAIC04MTAsNiArNzczLDEyIEBACiAJCQlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMuZGVidWdfdGxfb3V0X3RpbWVyKTsKIAkJfQogCX0KKwlyZXR1cm47CisKK3NjaGVkOgorCWlmICh1bmxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSA9PSBRRElPX0lSUV9TVEFURV9TVE9QUEVEKSkKKwkJcmV0dXJuOworCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwogfQogCiAvKiBvdXRib3VuZCB0YXNrbGV0ICovCkBAIC04MjIsNiArNzkxLDkgQEAKIHZvaWQgcWRpb19vdXRib3VuZF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHFkaW9fcSAqcSA9IChzdHJ1Y3QgcWRpb19xICopZGF0YTsKKworCWlmICh1bmxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSA9PSBRRElPX0lSUV9TVEFURV9TVE9QUEVEKSkKKwkJcmV0dXJuOwogCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwogfQogCkBAIC04NjMsNiArODM1LDkgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgcWRpb19xICpxOwogCisJaWYgKHVubGlrZWx5KGlycV9wdHItPnN0YXRlID09IFFESU9fSVJRX1NUQVRFX1NUT1BQRUQpKQorCQlyZXR1cm47CisKIAlxZGlvX3BlcmZfc3RhdF9pbmMoJnBlcmZfc3RhdHMucGNpX2ludCk7CiAKIAlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQpAQCAtMTA2NSw4ICsxMDQwLDkgQEAKICAqIEBjZGV2OiBhc3NvY2lhdGVkIGNjdyBkZXZpY2UKICAqIEBob3c6IHVzZSBoYWx0IG9yIGNsZWFyIHRvIHNodXRkb3duCiAgKgotICogVGhpcyBmdW5jdGlvbiBjYWxscyBxZGlvX3NodXRkb3duKCkgZm9yIEBjZGV2IHdpdGggbWV0aG9kIEBob3cKLSAqIGFuZCBvbiBzdWNjZXNzIHFkaW9fZnJlZSgpIGZvciBAY2Rldi4KKyAqIFRoaXMgZnVuY3Rpb24gY2FsbHMgcWRpb19zaHV0ZG93bigpIGZvciBAY2RldiB3aXRoIG1ldGhvZCBAaG93LgorICogYW5kIHFkaW9fZnJlZSgpLiBUaGUgcWRpb19mcmVlKCkgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQgc2luY2UKKyAqICFpcnFfcHRyIGlzIGFscmVhZHkgY2hlY2tlZC4KICAqLwogaW50IHFkaW9fY2xlYW51cChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgaW50IGhvdykKIHsKQEAgLTEwNzcsOCArMTA1Myw4IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJcmMgPSBxZGlvX3NodXRkb3duKGNkZXYsIGhvdyk7Ci0JaWYgKHJjID09IDApCi0JCXJjID0gcWRpb19mcmVlKGNkZXYpOworCisJcWRpb19mcmVlKGNkZXYpOwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFkaW9fY2xlYW51cCk7CkBAIC0xMDkwLDExICsxMDY2LDExIEBACiAJaW50IGk7CiAKIAlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQotCQl0YXNrbGV0X2Rpc2FibGUoJnEtPnRhc2tsZXQpOworCQl0YXNrbGV0X2tpbGwoJnEtPnRhc2tsZXQpOwogCiAJZm9yX2VhY2hfb3V0cHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpIHsKLQkJdGFza2xldF9kaXNhYmxlKCZxLT50YXNrbGV0KTsKIAkJZGVsX3RpbWVyKCZxLT51Lm91dC50aW1lcik7CisJCXRhc2tsZXRfa2lsbCgmcS0+dGFza2xldCk7CiAJfQogfQogCkBAIC0xMTEyLDYgKzEwODgsNyBAQAogCWlmICghaXJxX3B0cikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlCVUdfT04oaXJxc19kaXNhYmxlZCgpKTsKIAlEQkZfRVZFTlQoInFzaHV0ZG93bjolNHgiLCBjZGV2LT5wcml2YXRlLT5zY2hpZC5zY2hfbm8pOwogCiAJbXV0ZXhfbG9jaygmaXJxX3B0ci0+c2V0dXBfbXV0ZXgpOwpAQCAtMTEyNCw2ICsxMTAxLDEyIEBACiAJCXJldHVybiAwOwogCX0KIAorCS8qCisJICogSW5kaWNhdGUgdGhhdCB0aGUgZGV2aWNlIGlzIGdvaW5nIGRvd24uIFNjaGVkdWxpbmcgdGhlIHF1ZXVlCisJICogdGFza2xldHMgaXMgZm9yYmlkZGVuIGZyb20gaGVyZSBvbi4KKwkgKi8KKwlxZGlvX3NldF9zdGF0ZShpcnFfcHRyLCBRRElPX0lSUV9TVEFURV9TVE9QUEVEKTsKKwogCXRpcWRpb19yZW1vdmVfaW5wdXRfcXVldWVzKGlycV9wdHIpOwogCXFkaW9fc2h1dGRvd25fcXVldWVzKGNkZXYpOwogCXFkaW9fc2h1dGRvd25fZGVidWdfZW50cmllcyhpcnFfcHRyLCBjZGV2KTsKQEAgLTE0MDMsOSArMTM4Niw4IEBACiAJc3dpdGNoIChpcnFfcHRyLT5zdGF0ZSkgewogCWNhc2UgUURJT19JUlFfU1RBVEVfU1RPUFBFRDoKIAljYXNlIFFESU9fSVJRX1NUQVRFX0VSUjoKLQkJbXV0ZXhfdW5sb2NrKCZpcnFfcHRyLT5zZXR1cF9tdXRleCk7Ci0JCXFkaW9fc2h1dGRvd24oY2RldiwgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfQ0xFQVIpOwotCQlyZXR1cm4gLUVJTzsKKwkJcmMgPSAtRUlPOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlxZGlvX3NldF9zdGF0ZShpcnFfcHRyLCBRRElPX0lSUV9TVEFURV9BQ1RJVkUpOwogCQlyYyA9IDA7CkBAIC0xNDQyLDEwICsxNDI0LDEwIEBACiAgKiBAYnVmbnI6IGZpcnN0IGJ1ZmZlciB0byBwcm9jZXNzCiAgKiBAY291bnQ6IGhvdyBtYW55IGJ1ZmZlcnMgYXJlIGVtcHRpZWQKICAqLwotc3RhdGljIHZvaWQgaGFuZGxlX2luYm91bmQoc3RydWN0IHFkaW9fcSAqcSwgdW5zaWduZWQgaW50IGNhbGxmbGFncywKLQkJCSAgIGludCBidWZuciwgaW50IGNvdW50KQorc3RhdGljIGludCBoYW5kbGVfaW5ib3VuZChzdHJ1Y3QgcWRpb19xICpxLCB1bnNpZ25lZCBpbnQgY2FsbGZsYWdzLAorCQkJICBpbnQgYnVmbnIsIGludCBjb3VudCkKIHsKLQlpbnQgdXNlZCwgY2MsIGRpZmY7CisJaW50IHVzZWQsIGRpZmY7CiAKIAlpZiAoIXEtPnUuaW4ucG9sbGluZykKIAkJZ290byBzZXQ7CkBAIC0xNDU2LDE5ICsxNDM4LDE4IEBACiAJCXEtPnUuaW4ucG9sbGluZyA9IDA7CiAJCXEtPnUuaW4uYWNrX2NvdW50ID0gMDsKIAkJZ290byBzZXQ7Ci0JfSBlbHNlIGlmIChidWZfaW5fYmV0d2VlbihxLT5sYXN0X21vdmVfZnRjLCBidWZuciwgY291bnQpKSB7CisJfSBlbHNlIGlmIChidWZfaW5fYmV0d2VlbihxLT51LmluLmFja19zdGFydCwgYnVmbnIsIGNvdW50KSkgewogCQlpZiAoaXNfcWVic20ocSkpIHsKLQkJCS8qIHBhcnRpYWwgb3ZlcndyaXRlLCBqdXN0IHVwZGF0ZSBsYXN0X21vdmVfZnRjICovCisJCQkvKiBwYXJ0aWFsIG92ZXJ3cml0ZSwganVzdCB1cGRhdGUgYWNrX3N0YXJ0ICovCiAJCQlkaWZmID0gYWRkX2J1ZihidWZuciwgY291bnQpOwotCQkJZGlmZiA9IHN1Yl9idWYoZGlmZiwgcS0+bGFzdF9tb3ZlX2Z0Yyk7CisJCQlkaWZmID0gc3ViX2J1ZihkaWZmLCBxLT51LmluLmFja19zdGFydCk7CiAJCQlxLT51LmluLmFja19jb3VudCAtPSBkaWZmOwogCQkJaWYgKHEtPnUuaW4uYWNrX2NvdW50IDw9IDApIHsKIAkJCQlxLT51LmluLnBvbGxpbmcgPSAwOwogCQkJCXEtPnUuaW4uYWNrX2NvdW50ID0gMDsKLQkJCQkvKiBUT0RPOiBtdXN0IHdlIHNldCBsYXN0X21vdmVfZnRjIHRvIHNvbWV0aGluZyBtZWFuaW5nZnVsPyAqLwogCQkJCWdvdG8gc2V0OwogCQkJfQotCQkJcS0+bGFzdF9tb3ZlX2Z0YyA9IGFkZF9idWYocS0+bGFzdF9tb3ZlX2Z0YywgZGlmZik7CisJCQlxLT51LmluLmFja19zdGFydCA9IGFkZF9idWYocS0+dS5pbi5hY2tfc3RhcnQsIGRpZmYpOwogCQl9CiAJCWVsc2UKIAkJCS8qIHRoZSBvbmx5IEFDSyB3aWxsIGJlIGRlbGV0ZWQsIHNvIHN0b3AgcG9sbGluZyAqLwpAQCAtMTQ4MywxMyArMTQ2NCwxMSBAQAogCiAJLyogbm8gbmVlZCB0byBzaWduYWwgYXMgbG9uZyBhcyB0aGUgYWRhcHRlciBoYWQgZnJlZSBidWZmZXJzICovCiAJaWYgKHVzZWQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKLQlpZiAobmVlZF9zaWdhX2luKHEpKSB7Ci0JCWNjID0gcWRpb19zaWdhX2lucHV0KHEpOwotCQlpZiAoY2MpCi0JCQlxLT5xZGlvX2Vycm9yID0gY2M7Ci0JfQorCWlmIChuZWVkX3NpZ2FfaW4ocSkpCisJCXJldHVybiBxZGlvX3NpZ2FfaW5wdXQocSk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTQ5OSwxMSArMTQ3OCwxMSBAQAogICogQGJ1Zm5yOiBmaXJzdCBidWZmZXIgdG8gcHJvY2VzcwogICogQGNvdW50OiBob3cgbWFueSBidWZmZXJzIGFyZSBmaWxsZWQKICAqLwotc3RhdGljIHZvaWQgaGFuZGxlX291dGJvdW5kKHN0cnVjdCBxZGlvX3EgKnEsIHVuc2lnbmVkIGludCBjYWxsZmxhZ3MsCi0JCQkgICAgaW50IGJ1Zm5yLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGhhbmRsZV9vdXRib3VuZChzdHJ1Y3QgcWRpb19xICpxLCB1bnNpZ25lZCBpbnQgY2FsbGZsYWdzLAorCQkJICAgaW50IGJ1Zm5yLCBpbnQgY291bnQpCiB7CiAJdW5zaWduZWQgY2hhciBzdGF0ZTsKLQlpbnQgdXNlZDsKKwlpbnQgdXNlZCwgcmMgPSAwOwogCiAJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLm91dGJvdW5kX2hhbmRsZXIpOwogCkBAIC0xNTE4LDI3ICsxNDk3LDI2IEBACiAKIAlpZiAocXVldWVfdHlwZShxKSA9PSBRRElPX0lRRElPX1FGTVQpIHsKIAkJaWYgKG11bHRpY2FzdF9vdXRib3VuZChxKSkKLQkJCXFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQkJcmMgPSBxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKIAkJZWxzZQogCQkJaWYgKChxLT5pcnFfcHRyLT5zc3FkX2Rlc2MubW13YyA+IDEpICYmCiAJCQkgICAgKGNvdW50ID4gMSkgJiYKIAkJCSAgICAoY291bnQgPD0gcS0+aXJxX3B0ci0+c3NxZF9kZXNjLm1td2MpKSB7CiAJCQkJLyogZXhwbG9pdCBlbmhhbmNlZCBTSUdBICovCiAJCQkJcS0+dS5vdXQudXNlX2VuaF9zaWdhID0gMTsKLQkJCQlxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKKwkJCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOwogCQkJfSBlbHNlIHsKIAkJCQkvKgogCQkJCSogT25lIHNpZ2EtdyBwZXIgYnVmZmVyIHJlcXVpcmVkIGZvciB1bmljYXN0CiAJCQkJKiBIaXBlclNvY2tldHMuCiAJCQkJKi8KIAkJCQlxLT51Lm91dC51c2VfZW5oX3NpZ2EgPSAwOwotCQkJCXdoaWxlIChjb3VudC0tKQotCQkJCQlxZGlvX2tpY2tfb3V0Ym91bmRfcShxKTsKKwkJCQl3aGlsZSAoY291bnQtLSkgeworCQkJCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQkJCQlpZiAocmMpCisJCQkJCQlnb3RvIG91dDsKKwkJCQl9CiAJCQl9Ci0KLQkJLyogcmVwb3J0IENDPTIgY29uZGl0aW9ucyBzeW5jaHJvbm91c2x5ICovCi0JCWlmIChxLT5xZGlvX2Vycm9yKQotCQkJX19xZGlvX291dGJvdW5kX3Byb2Nlc3NpbmcocSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTU1MCwxNCArMTUyOCwxNCBAQAogCS8qIHRyeSB0byBmYXN0IHJlcXVldWUgYnVmZmVycyAqLwogCWdldF9idWZfc3RhdGUocSwgcHJldl9idWYoYnVmbnIpLCAmc3RhdGUsIDApOwogCWlmIChzdGF0ZSAhPSBTTFNCX0NVX09VVFBVVF9QUklNRUQpCi0JCXFkaW9fa2lja19vdXRib3VuZF9xKHEpOworCQlyYyA9IHFkaW9fa2lja19vdXRib3VuZF9xKHEpOwogCWVsc2UgewogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAiZmFzdC1yZXEiKTsKIAkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLmZhc3RfcmVxdWV1ZSk7CiAJfQogb3V0OgotCS8qIEZpeG1lOiBjb3VsZCB3YWl0IGZvcmV2ZXIgaWYgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0ICovCiAJdGFza2xldF9zY2hlZHVsZSgmcS0+dGFza2xldCk7CisJcmV0dXJuIHJjOwogfQogCiAvKioKQEAgLTE1OTYsMTQgKzE1NzQsMTIgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmIChjYWxsZmxhZ3MgJiBRRElPX0ZMQUdfU1lOQ19JTlBVVCkKLQkJaGFuZGxlX2luYm91bmQoaXJxX3B0ci0+aW5wdXRfcXNbcV9ucl0sIGNhbGxmbGFncywgYnVmbnIsCi0JCQkgICAgICAgY291bnQpOworCQlyZXR1cm4gaGFuZGxlX2luYm91bmQoaXJxX3B0ci0+aW5wdXRfcXNbcV9ucl0sCisJCQkJICAgICAgY2FsbGZsYWdzLCBidWZuciwgY291bnQpOwogCWVsc2UgaWYgKGNhbGxmbGFncyAmIFFESU9fRkxBR19TWU5DX09VVFBVVCkKLQkJaGFuZGxlX291dGJvdW5kKGlycV9wdHItPm91dHB1dF9xc1txX25yXSwgY2FsbGZsYWdzLCBidWZuciwKLQkJCQljb3VudCk7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwkJcmV0dXJuIGhhbmRsZV9vdXRib3VuZChpcnFfcHRyLT5vdXRwdXRfcXNbcV9ucl0sCisJCQkJICAgICAgIGNhbGxmbGFncywgYnVmbnIsIGNvdW50KTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRvX1FESU8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fc2V0dXAuYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCmluZGV4IGMwODM1NmIuLjE4ZDU0ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19zZXR1cC5jCkBAIC0xMTcsNyArMTE3LDYgQEAKIAlxLT5tYXNrID0gMSA8PCAoMzEgLSBpKTsKIAlxLT5uciA9IGk7CiAJcS0+aGFuZGxlciA9IGhhbmRsZXI7Ci0Jc3Bpbl9sb2NrX2luaXQoJnEtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBzZXR1cF9zdG9yYWdlX2xpc3RzKHN0cnVjdCBxZGlvX3EgKnEsIHN0cnVjdCBxZGlvX2lycSAqaXJxX3B0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fdGhpbmludC5jCmluZGV4IDhlOTBlMTQuLmM2NTVkMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb190aGluaW50LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX3RoaW5pbnQuYwpAQCAtMzEsNiArMzEsNyBAQAogCiAvKiBsaXN0IG9mIHRoaW4gaW50ZXJydXB0IGlucHV0IHF1ZXVlcyAqLwogc3RhdGljIExJU1RfSEVBRCh0aXFfbGlzdCk7CitERUZJTkVfTVVURVgodGlxX2xpc3RfbG9jayk7CiAKIC8qIGFkYXB0ZXIgbG9jYWwgc3VtbWFyeSBpbmRpY2F0b3IgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyICp0aXFkaW9fYWxzaTsKQEAgLTk1LDEyICs5NiwxMSBAQAogCWlmICghY3NzX3FkaW9fb21pdF9zdnMgJiYgaXJxX3B0ci0+c2lnYV9mbGFnLnN5bmMpCiAJCWNzc19xZGlvX29taXRfc3ZzID0gMTsKIAotCWZvcl9lYWNoX2lucHV0X3F1ZXVlKGlycV9wdHIsIHEsIGkpIHsKKwltdXRleF9sb2NrKCZ0aXFfbGlzdF9sb2NrKTsKKwlmb3JfZWFjaF9pbnB1dF9xdWV1ZShpcnFfcHRyLCBxLCBpKQogCQlsaXN0X2FkZF9yY3UoJnEtPmVudHJ5LCAmdGlxX2xpc3QpOwotCQlzeW5jaHJvbml6ZV9yY3UoKTsKLQl9CisJbXV0ZXhfdW5sb2NrKCZ0aXFfbGlzdF9sb2NrKTsKIAl4Y2hnKGlycV9wdHItPmRzY2ksIDEpOwotCXRhc2tsZXRfc2NoZWR1bGUoJnRpcWRpb190YXNrbGV0KTsKIH0KIAogLyoKQEAgLTExOCw3ICsxMTgsMTAgQEAKIAkJLyogaWYgZXN0YWJsaXNoIHRyaWdnZXJlZCBhbiBlcnJvciAqLwogCQlpZiAoIXEgfHwgIXEtPmVudHJ5LnByZXYgfHwgIXEtPmVudHJ5Lm5leHQpCiAJCQljb250aW51ZTsKKworCQltdXRleF9sb2NrKCZ0aXFfbGlzdF9sb2NrKTsKIAkJbGlzdF9kZWxfcmN1KCZxLT5lbnRyeSk7CisJCW11dGV4X3VubG9jaygmdGlxX2xpc3RfbG9jayk7CiAJCXN5bmNocm9uaXplX3JjdSgpOwogCX0KIH0KQEAgLTE1NSwxNSArMTU4LDE1IEBACiAJICovCiAJcWRpb19jaGVja19vdXRib3VuZF9hZnRlcl90aGluaW50KHEpOwogCi1hZ2FpbjoKIAlpZiAoIXFkaW9faW5ib3VuZF9xX21vdmVkKHEpKQogCQlyZXR1cm47CiAKLQlxZGlvX2tpY2tfaW5ib3VuZF9oYW5kbGVyKHEpOworCXFkaW9fa2lja19oYW5kbGVyKHEpOwogCiAJaWYgKCF0aXFkaW9faW5ib3VuZF9xX2RvbmUocSkpIHsKIAkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnRoaW5pbnRfaW5ib3VuZF9sb29wKTsKLQkJZ290byBhZ2FpbjsKKwkJaWYgKGxpa2VseShxLT5pcnFfcHRyLT5zdGF0ZSAhPSBRRElPX0lSUV9TVEFURV9TVE9QUEVEKSkKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJnEtPnRhc2tsZXQpOwogCX0KIAogCXFkaW9fc3RvcF9wb2xsaW5nKHEpOwpAQCAtMTczLDcgKzE3Niw4IEBACiAJICovCiAJaWYgKCF0aXFkaW9faW5ib3VuZF9xX2RvbmUocSkpIHsKIAkJcWRpb19wZXJmX3N0YXRfaW5jKCZwZXJmX3N0YXRzLnRoaW5pbnRfaW5ib3VuZF9sb29wMik7Ci0JCWdvdG8gYWdhaW47CisJCWlmIChsaWtlbHkocS0+aXJxX3B0ci0+c3RhdGUgIT0gUURJT19JUlFfU1RBVEVfU1RPUFBFRCkpCisJCQl0YXNrbGV0X3NjaGVkdWxlKCZxLT50YXNrbGV0KTsKIAl9CiB9CiAKQEAgLTM2NiwxMCArMzcwLDExIEBACiAKIHZvaWQgX19leGl0IHRpcWRpb191bnJlZ2lzdGVyX3RoaW5pbnRzKHZvaWQpCiB7Ci0JdGFza2xldF9kaXNhYmxlKCZ0aXFkaW9fdGFza2xldCk7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmdGlxX2xpc3QpKTsKIAogCWlmICh0aXFkaW9fYWxzaSkgewogCQlzMzkwX3VucmVnaXN0ZXJfYWRhcHRlcl9pbnRlcnJ1cHQodGlxZGlvX2Fsc2ksIFFESU9fQUlSUV9JU0MpOwogCQlpc2NfdW5yZWdpc3RlcihRRElPX0FJUlFfSVNDKTsKIAl9CisJdGFza2xldF9raWxsKCZ0aXFkaW9fdGFza2xldCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCmluZGV4IGNiMjJiOTcuLjY1YjZhOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCkBAIC0xMjgsOCArMTI4LDcgQEAKIAlpZiAobCA9PSB6ZGV2LT5saXN0LnByZXYpCiAJCXJldHVybjsKIAkvKiBNb3ZlIHpkZXYgYmVoaW5kIGwgKi8KLQlsaXN0X2RlbCgmemRldi0+bGlzdCk7Ci0JbGlzdF9hZGQoJnpkZXYtPmxpc3QsIGwpOworCWxpc3RfbW92ZSgmemRldi0+bGlzdCwgbCk7CiB9CiAKIC8qKgpAQCAtMTU3LDggKzE1Niw3IEBACiAJaWYgKGwgPT0gemRldi0+bGlzdC5uZXh0KQogCQlyZXR1cm47CiAJLyogTW92ZSB6ZGV2IGJlZm9yZSBsICovCi0JbGlzdF9kZWwoJnpkZXYtPmxpc3QpOwotCWxpc3RfYWRkX3RhaWwoJnpkZXYtPmxpc3QsIGwpOworCWxpc3RfbW92ZV90YWlsKCZ6ZGV2LT5saXN0LCBsKTsKIH0KIAogc3RhdGljIHZvaWQgemNyeXB0X2RldmljZV9yZWxlYXNlKHN0cnVjdCBrcmVmICprcmVmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYwppbmRleCBlN2ExZTIyLi5jMjBkNDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYworKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYwpAQCAtNzgxLDggKzc4MSw3IEBACiAJCS8qIFNpZ25hbCBwZW5kaW5nLiAqLwogCQlhcF9jYW5jZWxfbWVzc2FnZSh6ZGV2LT5hcF9kZXYsICZhcF9tc2cpOwogb3V0X2ZyZWU6Ci0JbWVtc2V0KGFwX21zZy5tZXNzYWdlLCAweDAsIGFwX21zZy5sZW5ndGgpOwotCWtmcmVlKGFwX21zZy5tZXNzYWdlKTsKKwlremZyZWUoYXBfbXNnLm1lc3NhZ2UpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2ViY2RpYy5jIGIvZHJpdmVycy9zMzkwL2ViY2RpYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWM5OGRhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9lYmNkaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi0vKgotICogIGFyY2gvczM5MC9rZXJuZWwvZWJjZGljLmMKLSAqICAgIEVDQkRJQyAtPiBBU0NJSSwgQVNDSUkgLT4gRUNCRElDIGNvbnZlcnNpb24gdGFibGVzLgotICoKLSAqICBTMzkwIHZlcnNpb24KLSAqICAgIENvcHlyaWdodCAoQykgMTk5OCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgotICovCi0KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQotLyoKLSAqIEFTQ0lJIC0+IEVCQ0RJQwotICovCi1fX3U4IF9hc2NlYmNbMjU2XSA9Ci17Ci0gLyowMCAgTkwgICAgU0ggICAgU1ggICAgRVggICAgRVQgICAgTlEgICAgQUsgICAgQkwgKi8KLSAgICAgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgzNywgMHgyRCwgMHgyRSwgMHgyRiwKLSAvKjA4ICBCUyAgICBIVCAgICBMRiAgICBWVCAgICBGRiAgICBDUiAgICBTTyAgICBTSSAqLwotICAgICAweDE2LCAweDA1LCAweDE1LCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAotIC8qMTAgIERMICAgIEQxICAgIEQyICAgIEQzICAgIEQ0ICAgIE5LICAgIFNOICAgIEVCICovCi0gICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4M0MsIDB4MTUsIDB4MzIsIDB4MjYsCi0gLyoxOCAgQ04gICAgRU0gICAgU0IgICAgRUMgICAgRlMgICAgR1MgICAgUlMgICAgVVMgKi8KLSAgICAgMHgxOCwgMHgxOSwgMHgzRiwgMHgyNywgMHgxQywgMHgxRCwgMHgxRSwgMHgxRiwKLSAvKjIwICBTUCAgICAgISAgICAgIiAgICAgIyAgICAgJCAgICAgJSAgICAgJiAgICAgJyAqLwotICAgICAweDQwLCAweDVBLCAweDdGLCAweDdCLCAweDVCLCAweDZDLCAweDUwLCAweDdELAotIC8qMjggICAoICAgICApICAgICAqICAgICArICAgICAsICAgICAtICAgIC4gICAgICAvICovCi0gICAgIDB4NEQsIDB4NUQsIDB4NUMsIDB4NEUsIDB4NkIsIDB4NjAsIDB4NEIsIDB4NjEsCi0gLyozMCAgIDAgICAgIDEgICAgIDIgICAgIDMgICAgIDQgICAgIDUgICAgIDYgICAgIDcgKi8KLSAgICAgMHhGMCwgMHhGMSwgMHhGMiwgMHhGMywgMHhGNCwgMHhGNSwgMHhGNiwgMHhGNywKLSAvKjM4ICAgOCAgICAgOSAgICAgOiAgICAgOyAgICAgPCAgICAgPSAgICAgPiAgICAgPyAqLwotICAgICAweEY4LCAweEY5LCAweDdBLCAweDVFLCAweDRDLCAweDdFLCAweDZFLCAweDZGLAotIC8qNDAgICBAICAgICBBICAgICBCICAgICBDICAgICBEICAgICBFICAgICBGICAgICBHICovCi0gICAgIDB4N0MsIDB4QzEsIDB4QzIsIDB4QzMsIDB4QzQsIDB4QzUsIDB4QzYsIDB4QzcsCi0gLyo0OCAgIEggICAgIEkgICAgIEogICAgIEsgICAgIEwgICAgIE0gICAgIE4gICAgIE8gKi8KLSAgICAgMHhDOCwgMHhDOSwgMHhEMSwgMHhEMiwgMHhEMywgMHhENCwgMHhENSwgMHhENiwKLSAvKjUwICAgUCAgICAgUSAgICAgUiAgICAgUyAgICAgVCAgICAgVSAgICAgViAgICAgVyAqLwotICAgICAweEQ3LCAweEQ4LCAweEQ5LCAweEUyLCAweEUzLCAweEU0LCAweEU1LCAweEU2LAotIC8qNTggICBYICAgICBZICAgICBaICAgICBbICAgICBcICAgICBdICAgICBeICAgICBfICovCi0gICAgIDB4RTcsIDB4RTgsIDB4RTksIDB4QUQsIDB4RTAsIDB4QkQsIDB4NUYsIDB4NkQsCi0gLyo2MCAgIGAgICAgIGEgICAgIGIgICAgIGMgICAgIGQgICAgIGUgICAgIGYgICAgIGcgKi8KLSAgICAgMHg3OSwgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywKLSAvKjY4ICAgaCAgICAgaSAgICAgaiAgICAgayAgICAgbCAgICAgbSAgICAgbiAgICAgbyAqLwotICAgICAweDg4LCAweDg5LCAweDkxLCAweDkyLCAweDkzLCAweDk0LCAweDk1LCAweDk2LAotIC8qNzAgICBwICAgICBxICAgICByICAgICBzICAgICB0ICAgICB1ICAgICB2ICAgICB3ICovCi0gICAgIDB4OTcsIDB4OTgsIDB4OTksIDB4QTIsIDB4QTMsIDB4QTQsIDB4QTUsIDB4QTYsCi0gLyo3OCAgIHggICAgIHkgICAgIHogICAgIHsgICAgIHwgICAgIH0gICAgIH4gICAgREwgKi8KLSAgICAgMHhBNywgMHhBOCwgMHhBOSwgMHhDMCwgMHg0RiwgMHhEMCwgMHhBMSwgMHgwNywKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwKLSAgICAgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHgzRiwgMHhGRgotfTsKLQotLyoKLSAqIEVCQ0RJQyAtPiBBU0NJSQotICovCi1fX3U4IF9lYmNhc2NbMjU2XSA9Ci17Ci0gLyogMHgwMCAgIE5VTCAgIFNPSCAgIFNUWCAgIEVUWCAgKlNFTCAgICBIVCAgKlJOTCAgIERFTCAqLwotICAgICAgICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDcsIDB4MDksIDB4MDcsIDB4N0YsCi0gLyogMHgwOCAgIC1HRSAgLVNQUyAgLVJQVCAgICBWVCAgICBGRiAgICBDUiAgICBTTyAgICBTSSAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0gLyogMHgxMCAgIERMRSAgIERDMSAgIERDMiAgIERDMyAgLVJFUyAgIC1OTCAgICBCUyAgLVBPQwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1FTlAgIC0+TEYgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDA3LCAweDBBLCAweDA4LCAweDA3LAotIC8qIDB4MTggICBDQU4gICAgRU0gIC1VQlMgIC1DVTEgIC1JRlMgIC1JR1MgIC1JUlMgIC1JVEIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSVVTICovCi0gICAgICAgICAgMHgxOCwgMHgxOSwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLSAvKiAweDIwICAgLURTICAtU09TICAgIEZTICAtV1VTICAtQllQICAgIExGICAgRVRCICAgRVNDCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUlOUCAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MUMsIDB4MDcsIDB4MDcsIDB4MEEsIDB4MTcsIDB4MUIsCi0gLyogMHgyOCAgIC1TQSAgLVNGRSAgIC1TTSAgLUNTUCAgLU1GQSAgIEVOUSAgIEFDSyAgIEJFTAotICAgICAgICAgICAgICAgICAgICAgICAtU1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNSwgMHgwNiwgMHgwNywKLSAvKiAweDMwICAtLS0tICAtLS0tICAgU1lOICAgLUlSICAgLVBQICAtVFJOICAtTkJTICAgRU9UICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgxNiwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNCwKLSAvKiAweDM4ICAtU0JTICAgLUlUICAtUkZGICAtQ1UzICAgREM0ICAgTkFLICAtLS0tICAgU1VCICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgxNCwgMHgxNSwgMHgwNywgMHgxQSwKLSAvKiAweDQwICAgIFNQICAgUlNQICAgICAgICAgICCB5CAgICAgICAgICAgICAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4MjAsIDB4RkYsIDB4ODMsIDB4ODQsIDB4ODUsIDB4QTAsIDB4MDcsIDB4ODYsCi0gLyogMHg0OCAgICAgICAgICAgICAgICAgICAgICAgLiAgICAgPCAgICAgKCAgICAgKyAgICAgfCAqLwotICAgICAgICAgIDB4ODcsIDB4QTQsIDB4OUIsIDB4MkUsIDB4M0MsIDB4MjgsIDB4MkIsIDB4N0MsCi0gLyogMHg1MCAgICAgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4MjYsIDB4ODIsIDB4ODgsIDB4ODksIDB4OEEsIDB4QTEsIDB4OEMsIDB4MDcsCi0gLyogMHg1OCAgICAgICAgICAggd8gICAgICEgICAgICQgICAgICogICAgICkgICAgIDsgICAgICAgKi8KLSAgICAgICAgICAweDhELCAweEUxLCAweDIxLCAweDI0LCAweDJBLCAweDI5LCAweDNCLCAweEFBLAotIC8qIDB4NjAgICAgIC0gICAgIC8gIC0tLS0gICAgIIHEICAtLS0tICAtLS0tICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHgyRCwgMHgyRiwgMHgwNywgMHg4RSwgMHgwNywgMHgwNywgMHgwNywgMHg4RiwKLSAvKiAweDY4ICAgICAgICAgICAgICAtLS0tICAgICAsICAgICAlICAgICBfICAgICA+ICAgICA/ICovIAotICAgICAgICAgIDB4ODAsIDB4QTUsIDB4MDcsIDB4MkMsIDB4MjUsIDB4NUYsIDB4M0UsIDB4M0YsCi0gLyogMHg3MCAgLS0tLSAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4MDcsIDB4OTAsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0gLyogMHg3OCAgICAgKiAgICAgYCAgICAgOiAgICAgIyAgICAgQCAgICAgJyAgICAgPSAgICAgIiAqLwotICAgICAgICAgIDB4NzAsIDB4NjAsIDB4M0EsIDB4MjMsIDB4NDAsIDB4MjcsIDB4M0QsIDB4MjIsCi0gLyogMHg4MCAgICAgKiAgICAgYSAgICAgYiAgICAgYyAgICAgZCAgICAgZSAgICAgZiAgICAgZyAqLwotICAgICAgICAgIDB4MDcsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCi0gLyogMHg4OCAgICAgaCAgICAgaSAgICAgICAgICAgICAgLS0tLSAgLS0tLSAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4NjgsIDB4NjksIDB4QUUsIDB4QUYsIDB4MDcsIDB4MDcsIDB4MDcsIDB4RjEsCi0gLyogMHg5MCAgICAggbAgICAgIGogICAgIGsgICAgIGwgICAgIG0gICAgIG4gICAgIG8gICAgIHAgKi8KLSAgICAgICAgICAweEY4LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLCAweDZGLCAweDcwLAotIC8qIDB4OTggICAgIHEgICAgIHIgICAgICAgICAgICAgICAgICAgIC0tLS0gICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDcxLCAweDcyLCAweEE2LCAweEE3LCAweDkxLCAweDA3LCAweDkyLCAweDA3LAotIC8qIDB4QTAgICAgICAgICAgIH4gICAgIHMgICAgIHQgICAgIHUgICAgIHYgICAgIHcgICAgIHggKi8KLSAgICAgICAgICAweEU2LCAweDdFLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAotIC8qIDB4QTggICAgIHkgICAgIHogICAgICAgICAgICAgIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDc5LCAweDdBLCAweEFELCAweEFCLCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotIC8qIDB4QjAgICAgIF4gICAgICAgICAgICAgICAgICAgIC0tLS0gICAgIIGnICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHg1RSwgMHg5QywgMHg5RCwgMHhGQSwgMHgwNywgMHgwNywgMHgwNywgMHhBQywKLSAvKiAweEI4ICAgICAgICAtLS0tICAgICBbICAgICBdICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHhBQiwgMHgwNywgMHg1QiwgMHg1RCwgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLSAvKiAweEMwICAgICB7ICAgICBBICAgICBCICAgICBDICAgICBEICAgICBFICAgICBGICAgICBHICovCi0gICAgICAgICAgMHg3QiwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywKLSAvKiAweEM4ICAgICBIICAgICBJICAtLS0tICAgICAgICAgICCB9iAgICAgICAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4NDgsIDB4NDksIDB4MDcsIDB4OTMsIDB4OTQsIDB4OTUsIDB4QTIsIDB4MDcsCi0gLyogMHhEMCAgICAgfSAgICAgSiAgICAgSyAgICAgTCAgICAgTSAgICAgTiAgICAgTyAgICAgUCAqLwotICAgICAgICAgIDB4N0QsIDB4NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCi0gLyogMHhEOCAgICAgUSAgICAgUiAgLS0tLSAgICAgICAgICAggfwgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAweDUxLCAweDUyLCAweDA3LCAweDk2LCAweDgxLCAweDk3LCAweEEzLCAweDk4LAotIC8qIDB4RTAgICAgIFwgICAgICAgICAgIFMgICAgIFQgICAgIFUgICAgIFYgICAgIFcgICAgIFggKi8KLSAgICAgICAgICAweDVDLCAweEY2LCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LAotIC8qIDB4RTggICAgIFkgICAgIFogICAgICAgIC0tLS0gICAgIIHWICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHg1OSwgMHg1QSwgMHhGRCwgMHgwNywgMHg5OSwgMHgwNywgMHgwNywgMHgwNywKLSAvKiAweEYwICAgICAwICAgICAxICAgICAyICAgICAzICAgICA0ICAgICA1ICAgICA2ICAgICA3ICovCi0gICAgICAgICAgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKLSAvKiAweEY4ICAgICA4ICAgICA5ICAtLS0tICAtLS0tICAgICCB3CAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4MzgsIDB4MzksIDB4MDcsIDB4MDcsIDB4OUEsIDB4MDcsIDB4MDcsIDB4MDcKLX07Ci0KLS8qCi0gKiBFQkNESUMgKGNhcGl0YWxzKSAtPiBBU0NJSSAoc21hbGwgY2FzZSkKLSAqLwotX191OCBfZWJjYXNjX3JlZHVjZV9jYXNlWzI1Nl0gPQotewotIC8qIDB4MDAgICBOVUwgICBTT0ggICBTVFggICBFVFggICpTRUwgICAgSFQgICpSTkwgICBERUwgKi8KLSAgICAgICAgICAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA3LCAweDA5LCAweDA3LCAweDdGLAotCi0gLyogMHgwOCAgIC1HRSAgLVNQUyAgLVJQVCAgICBWVCAgICBGRiAgICBDUiAgICBTTyAgICBTSSAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MDcsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYsCi0KLSAvKiAweDEwICAgRExFICAgREMxICAgREMyICAgREMzICAtUkVTICAgLU5MICAgIEJTICAtUE9DCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUVOUCAgLT5MRiAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MDcsIDB4MEEsIDB4MDgsIDB4MDcsCi0KLSAvKiAweDE4ICAgQ0FOICAgIEVNICAtVUJTICAtQ1UxICAtSUZTICAtSUdTICAtSVJTICAtSVRCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUlVUyAqLwotICAgICAgICAgIDB4MTgsIDB4MTksIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsCi0KLSAvKiAweDIwICAgLURTICAtU09TICAgIEZTICAtV1VTICAtQllQICAgIExGICAgRVRCICAgRVNDCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUlOUCAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MUMsIDB4MDcsIDB4MDcsIDB4MEEsIDB4MTcsIDB4MUIsCi0KLSAvKiAweDI4ICAgLVNBICAtU0ZFICAgLVNNICAtQ1NQICAtTUZBICAgRU5RICAgQUNLICAgQkVMCi0gICAgICAgICAgICAgICAgICAgICAgIC1TVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAKLSAgICAgICAgICAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA3LCAweDA1LCAweDA2LCAweDA3LAotCi0gLyogMHgzMCAgLS0tLSAgLS0tLSAgIFNZTiAgIC1JUiAgIC1QUCAgLVRSTiAgLU5CUyAgIEVPVCAqLwotICAgICAgICAgIDB4MDcsIDB4MDcsIDB4MTYsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDcsIDB4MDQsCi0KLSAvKiAweDM4ICAtU0JTICAgLUlUICAtUkZGICAtQ1UzICAgREM0ICAgTkFLICAtLS0tICAgU1VCICovCi0gICAgICAgICAgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgxNCwgMHgxNSwgMHgwNywgMHgxQSwKLQotIC8qIDB4NDAgICAgU1AgICBSU1AgICAgICAgICAgIIHkICAgICAgICAgICAgICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHgyMCwgMHhGRiwgMHg4MywgMHg4NCwgMHg4NSwgMHhBMCwgMHgwNywgMHg4NiwKLQotIC8qIDB4NDggICAgICAgICAgICAgICAgICAgICAgIC4gICAgIDwgICAgICggICAgICsgICAgIHwgKi8KLSAgICAgICAgICAweDg3LCAweEE0LCAweDlCLCAweDJFLCAweDNDLCAweDI4LCAweDJCLCAweDdDLAotCi0gLyogMHg1MCAgICAgJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4MjYsIDB4ODIsIDB4ODgsIDB4ODksIDB4OEEsIDB4QTEsIDB4OEMsIDB4MDcsCi0KLSAvKiAweDU4ICAgICAgICAgICCB3yAgICAgISAgICAgJCAgICAgKiAgICAgKSAgICAgOyAgICAgICAqLwotICAgICAgICAgIDB4OEQsIDB4RTEsIDB4MjEsIDB4MjQsIDB4MkEsIDB4MjksIDB4M0IsIDB4QUEsCi0KLSAvKiAweDYwICAgICAtICAgICAvICAtLS0tICAgICCBxCAgLS0tLSAgLS0tLSAgLS0tLSAgICAgICAqLwotICAgICAgICAgIDB4MkQsIDB4MkYsIDB4MDcsIDB4ODQsIDB4MDcsIDB4MDcsIDB4MDcsIDB4OEYsCi0KLSAvKiAweDY4ICAgICAgICAgICAgICAtLS0tICAgICAsICAgICAlICAgICBfICAgICA+ICAgICA/ICovIAotICAgICAgICAgIDB4ODAsIDB4QTUsIDB4MDcsIDB4MkMsIDB4MjUsIDB4NUYsIDB4M0UsIDB4M0YsCi0KLSAvKiAweDcwICAtLS0tICAgICAgICAtLS0tICAtLS0tICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHgwNywgMHg5MCwgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLQotIC8qIDB4NzggICAgICogICAgIGAgICAgIDogICAgICMgICAgIEAgICAgICcgICAgID0gICAgICIgKi8KLSAgICAgICAgICAweDcwLCAweDYwLCAweDNBLCAweDIzLCAweDQwLCAweDI3LCAweDNELCAweDIyLAotCi0gLyogMHg4MCAgICAgKiAgICAgYSAgICAgYiAgICAgYyAgICAgZCAgICAgZSAgICAgZiAgICAgZyAqLwotICAgICAgICAgIDB4MDcsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCi0KLSAvKiAweDg4ICAgICBoICAgICBpICAgICAgICAgICAgICAtLS0tICAtLS0tICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHg2OCwgMHg2OSwgMHhBRSwgMHhBRiwgMHgwNywgMHgwNywgMHgwNywgMHhGMSwKLQotIC8qIDB4OTAgICAgIIGwICAgICBqICAgICBrICAgICBsICAgICBtICAgICBuICAgICBvICAgICBwICovCi0gICAgICAgICAgMHhGOCwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RiwgMHg3MCwKLQotIC8qIDB4OTggICAgIHEgICAgIHIgICAgICAgICAgICAgICAgICAgIC0tLS0gICAgICAgIC0tLS0gKi8KLSAgICAgICAgICAweDcxLCAweDcyLCAweEE2LCAweEE3LCAweDkxLCAweDA3LCAweDkyLCAweDA3LAotCi0gLyogMHhBMCAgICAgICAgICAgfiAgICAgcyAgICAgdCAgICAgdSAgICAgdiAgICAgdyAgICAgeCAqLwotICAgICAgICAgIDB4RTYsIDB4N0UsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzgsCi0KLSAvKiAweEE4ICAgICB5ICAgICB6ICAgICAgICAgICAgICAtLS0tICAtLS0tICAtLS0tICAtLS0tICovCi0gICAgICAgICAgMHg3OSwgMHg3QSwgMHhBRCwgMHhBQiwgMHgwNywgMHgwNywgMHgwNywgMHgwNywKLQotIC8qIDB4QjAgICAgIF4gICAgICAgICAgICAgICAgICAgIC0tLS0gICAgIIGnICAtLS0tICAgICAgICovCi0gICAgICAgICAgMHg1RSwgMHg5QywgMHg5RCwgMHhGQSwgMHgwNywgMHgwNywgMHgwNywgMHhBQywKLQotIC8qIDB4QjggICAgICAgIC0tLS0gICAgIFsgICAgIF0gIC0tLS0gIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweEFCLCAweDA3LCAweDVCLCAweDVELCAweDA3LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHhDMCAgICAgeyAgICAgQSAgICAgQiAgICAgQyAgICAgRCAgICAgRSAgICAgRiAgICAgRyAqLwotICAgICAgICAgIDB4N0IsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCi0KLSAvKiAweEM4ICAgICBIICAgICBJICAtLS0tICAgICAgICAgICCB9iAgICAgICAgICAgICAgLS0tLSAqLwotICAgICAgICAgIDB4NjgsIDB4NjksIDB4MDcsIDB4OTMsIDB4OTQsIDB4OTUsIDB4QTIsIDB4MDcsCi0KLSAvKiAweEQwICAgICB9ICAgICBKICAgICBLICAgICBMICAgICBNICAgICBOICAgICBPICAgICBQICovCi0gICAgICAgICAgMHg3RCwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwgMHg2RiwgMHg3MCwKLQotIC8qIDB4RDggICAgIFEgICAgIFIgIC0tLS0gICAgICAgICAgIIH8ICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgMHg3MSwgMHg3MiwgMHgwNywgMHg5NiwgMHg4MSwgMHg5NywgMHhBMywgMHg5OCwKLQotIC8qIDB4RTAgICAgIFwgICAgICAgICAgIFMgICAgIFQgICAgIFUgICAgIFYgICAgIFcgICAgIFggKi8KLSAgICAgICAgICAweDVDLCAweEY2LCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAotCi0gLyogMHhFOCAgICAgWSAgICAgWiAgICAgICAgLS0tLSAgICAggdYgIC0tLS0gIC0tLS0gIC0tLS0gKi8KLSAgICAgICAgICAweDc5LCAweDdBLCAweEZELCAweDA3LCAweDk0LCAweDA3LCAweDA3LCAweDA3LAotCi0gLyogMHhGMCAgICAgMCAgICAgMSAgICAgMiAgICAgMyAgICAgNCAgICAgNSAgICAgNiAgICAgNyAqLwotICAgICAgICAgIDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsCi0KLSAvKiAweEY4ICAgICA4ICAgICA5ICAtLS0tICAtLS0tICAgICCB3CAgLS0tLSAgLS0tLSAgLS0tLSAqLwotICAgICAgICAgIDB4MzgsIDB4MzksIDB4MDcsIDB4MDcsIDB4ODEsIDB4MDcsIDB4MDcsIDB4MDcKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQppbmRleCA2MzgyYzA0Li45NmVkZGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKQEAgLTgsNyArOCw3IEBACiBvYmotJChDT05GSUdfU01TR0lVQ1YpICs9IHNtc2dpdWN2Lm8KIG9iai0kKENPTkZJR19MQ1MpICs9IGxjcy5vIGN1MzA4OC5vCiBvYmotJChDT05GSUdfQ0xBVykgKz0gY2xhdy5vIGN1MzA4OC5vCi1xZXRoLXkgKz0gcWV0aF9jb3JlX3N5cy5vIHFldGhfY29yZV9tYWluLm8gcWV0aF9jb3JlX21wYy5vIHFldGhfY29yZV9vZmZsLm8KK3FldGgteSArPSBxZXRoX2NvcmVfc3lzLm8gcWV0aF9jb3JlX21haW4ubyBxZXRoX2NvcmVfbXBjLm8KIG9iai0kKENPTkZJR19RRVRIKSArPSBxZXRoLm8KIHFldGhfbDIteSArPSBxZXRoX2wyX21haW4ubwogb2JqLSQoQ09ORklHX1FFVEhfTDIpICs9IHFldGhfbDIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwppbmRleCBmNWU2MTg1Li4zMGE0M2NjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYwpAQCAtNjAsNiArNjAsOSBAQAogICogICAgMS4yNSAgQWRkZWQgUGFja2luZyBzdXBwb3J0CiAgKiAgICAxLjUKICAqLworCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UICJjbGF3IgorCiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jY3dncm91cC5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgpAQCAtOTQsNyArOTcsNyBAQAogICAgQ0xBVyB1c2VzIHRoZSBzMzkwZGJmIGZpbGUgc3lzdGVtICBzZWUgY2xhd190cmFjZSBhbmQgY2xhd19zZXR1cAogKi8KIAotCitzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9ICJDTEFXIGRyaXZlciI7CiBzdGF0aWMgY2hhciBkZWJ1Z19idWZmZXJbMjU1XTsKIC8qKgogICogRGVidWcgRmFjaWxpdHkgU3R1ZmYKQEAgLTIwNiwyMCArMjA5LDMwIEBACiBzdGF0aWMgaW50IHBhZ2VzX3RvX29yZGVyX29mX21hZyhpbnQgbnVtX29mX3BhZ2VzKTsKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2xhd19wYWNrX3NrYihzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXZwdHIpOwogLyogc3lzZnMgRnVuY3Rpb25zICovCi1zdGF0aWMgc3NpemVfdCBjbGF3X2huYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfaG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGNsYXdfaG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBjbGF3X2huYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X2FkbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7Ci1zdGF0aWMgc3NpemVfdCBjbGF3X2FkbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3QgY2xhd19hZG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CitzdGF0aWMgc3NpemVfdCBjbGF3X2FkbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotc3RhdGljIHNzaXplX3QgY2xhd19hcG5hbWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwotc3RhdGljIHNzaXplX3QgY2xhd19hcG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKK3N0YXRpYyBzc2l6ZV90IGNsYXdfYXBuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOworc3RhdGljIHNzaXplX3QgY2xhd19hcG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfd2J1ZmZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwotc3RhdGljIHNzaXplX3QgY2xhd193YnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3QgY2xhd193YnVmZl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGNsYXdfd2J1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLXN0YXRpYyBzc2l6ZV90IGNsYXdfcmJ1ZmZfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpOwotc3RhdGljIHNzaXplX3QgY2xhd19yYnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3QgY2xhd19yYnVmZl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKK3N0YXRpYyBzc2l6ZV90IGNsYXdfcmJ1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKIHN0YXRpYyBpbnQgY2xhd19hZGRfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGNsYXdfcmVtb3ZlX2ZpbGVzKHN0cnVjdCBkZXZpY2UgKmRldik7CkBAIC0yOTgsOCArMzExLDggQEAKIAlpZiAocmMpIHsKIAkJcHJvYmVfZXJyb3IoY2dkZXYpOwogCQlwdXRfZGV2aWNlKCZjZ2Rldi0+ZGV2KTsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiYWRkX2ZpbGVzIGZhaWxlZCAlcyAlcyBFeGl0IExpbmUgJWQgXG4iLAotCQkJZGV2X25hbWUoJmNnZGV2LT5jZGV2WzBdLT5kZXYpLCBfX2Z1bmNfXywgX19MSU5FX18pOworCQlkZXZfZXJyKCZjZ2Rldi0+ZGV2LCAiQ3JlYXRpbmcgdGhlIC9wcm9jIGZpbGVzIGZvciBhIG5ldyIKKwkJIiBDTEFXIGRldmljZSBmYWlsZWRcbiIpOwogCQlDTEFXX0RCRl9URVhUXygyLCBzZXR1cCwgInByb2JleCVkIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQpAQCAtMzM1LDYgKzM0OCw4IEBACiAgICAgICAgIHJjPWNsYXdfaHdfdHgoIHNrYiwgZGV2LCAxICk7CiAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKHBfY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwogCUNMQVdfREJGX1RFWFRfKDQsIHRyYWNlLCAiY2xhd3R4JWQiLCByYyk7CisJaWYgKHJjKQorCQlyYyA9IE5FVERFVl9UWF9CVVNZOwogICAgICAgICByZXR1cm4gcmM7CiB9ICAgLyogIGVuZCBvZiBjbGF3X3R4ICovCiAKQEAgLTQ5Niw3ICs1MTEsOCBAQAogICAgICAgICAgICB+KERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSkgIT0gMHgwMCkgfHwKICAgICAgICAgICAgKCgocHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5mbGFnIHwKIAkgICAJcHJpdnB0ci0+Y2hhbm5lbFtXUklURV0uZmxhZykgJiBDTEFXX1RJTUVSKSAhPSAweDAwKSkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiByZW1vdGUgc2lkZSBpcyBub3QgcmVhZHlcbiIsIGRldi0+bmFtZSk7CisJCWRldl9pbmZvKCZwcml2cHRyLT5jaGFubmVsW1JFQURdLmNkZXYtPmRldiwKKwkJCSIlczogcmVtb3RlIHNpZGUgaXMgbm90IHJlYWR5XG4iLCBkZXYtPm5hbWUpOwogCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAibm90cmR5Iik7CiAKICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IDI7ICBpKyspIHsKQEAgLTU4MiwxMCArNTk4LDkgQEAKIAlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAiY2xhd2lycSIpOwogICAgICAgICAvKiBCeXBhc3MgYWxsICd1bnNvbGljaXRlZCBpbnRlcnJ1cHRzJyAqLwogCWlmICghY2Rldi0+ZGV2LmRyaXZlcl9kYXRhKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiY2xhdzogdW5zb2xpY2l0ZWQgaW50ZXJydXB0IGZvciBkZXZpY2U6IgotCQkgCSIlcyByZWNlaXZlZCBjLSUwMnggZC0lMDJ4XG4iLAotCQkgICAgICAgZGV2X25hbWUoJmNkZXYtPmRldiksIGlyYi0+c2Nzdy5jbWQuY3N0YXQsCi0JCSAgICAgICBpcmItPnNjc3cuY21kLmRzdGF0KTsKKwkJZGV2X3dhcm4oJmNkZXYtPmRldiwgIkFuIHVuaW5pdGlhbGl6ZWQgQ0xBVyBkZXZpY2UgcmVjZWl2ZWQgYW4iCisJCQkiIElSUSwgYy0lMDJ4IGQtJTAyeFxuIiwKKwkJCWlyYi0+c2Nzdy5jbWQuY3N0YXQsIGlyYi0+c2Nzdy5jbWQuZHN0YXQpOwogCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAiYmFkaXJxIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01OTcsOCArNjEyLDcgQEAKIAllbHNlIGlmIChwcml2cHRyLT5jaGFubmVsW1dSSVRFXS5jZGV2ID09IGNkZXYpCiAJCXBfY2ggPSAmcHJpdnB0ci0+Y2hhbm5lbFtXUklURV07CiAJZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6IENhbid0IGRldGVybWluZSBjaGFubmVsIGZvciAiCi0JCQkiaW50ZXJydXB0LCBkZXZpY2UgJXNcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKKwkJZGV2X3dhcm4oJmNkZXYtPmRldiwgIlRoZSBkZXZpY2UgaXMgbm90IGEgQ0xBVyBkZXZpY2VcbiIpOwogCQlDTEFXX0RCRl9URVhUKDIsIHRyYWNlLCAiYmFkY2hhbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtNjEyLDcgKzYyNiw4IEBACiAKIAkvKiBDaGVjayBmb3IgZ29vZCBzdWJjaGFubmVsIHJldHVybiBjb2RlLCBvdGhlcndpc2UgaW5mbyBtZXNzYWdlICovCiAJaWYgKGlyYi0+c2Nzdy5jbWQuY3N0YXQgJiYgIShpcmItPnNjc3cuY21kLmNzdGF0ICYgU0NITl9TVEFUX1BDSSkpIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogc3ViY2hhbm5lbCBjaGVjayBmb3IgZGV2aWNlOiAlMDR4IC0iCisJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkiJXM6IHN1YmNoYW5uZWwgY2hlY2sgZm9yIGRldmljZTogJTA0eCAtIgogCQkJIiBTY2ggU3RhdCAlMDJ4ICBEZXYgU3RhdCAlMDJ4IENQQSAtICUwNHhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHBfY2gtPmRldm5vLAogCQkJaXJiLT5zY3N3LmNtZC5jc3RhdCwgaXJiLT5zY3N3LmNtZC5kc3RhdCwKQEAgLTY1MSw3ICs2NjYsNyBAQAogCQkJd2FrZV91cCgmcF9jaC0+d2FpdCk7IC8qIHdha2UgY2xhd19vcGVuIChSRUFEKSovCiAJCX0gZWxzZSBpZiAocF9jaC0+ZmxhZyA9PSBDTEFXX1dSSVRFKSB7CiAJCQlwX2NoLT5jbGF3X3N0YXRlID0gQ0xBV19TVEFSVF9XUklURTsKLQkJCS8qCXNlbmQgU1lTVEVNX1ZBTElEQVRFCQkJKi8KKwkJCS8qICAgICAgc2VuZCBTWVNURU1fVkFMSURBVEUgICAgICAgICAgICAgICAgICAgICovCiAJCQljbGF3X3N0cnRfcmVhZChkZXYsIExPQ0tfTk8pOwogCQkJY2xhd19zZW5kX2NvbnRyb2woZGV2LAogCQkJCVNZU1RFTV9WQUxJREFURV9SRVFVRVNULApAQCAtNjU5LDEwICs2NzQsOSBAQAogCQkJCXBfZW52LT5ob3N0X25hbWUsCiAJCQkJcF9lbnYtPmFkYXB0ZXJfbmFtZSk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGF3OiB1bnNvbGljaXRlZCAiCi0JCQkJImludGVycnVwdCBmb3IgZGV2aWNlOiIKLQkJCQkiJXMgcmVjZWl2ZWQgYy0lMDJ4IGQtJTAyeFxuIiwKLQkJCQlkZXZfbmFtZSgmY2Rldi0+ZGV2KSwKKwkJCWRldl93YXJuKCZjZGV2LT5kZXYsICJUaGUgQ0xBVyBkZXZpY2UgcmVjZWl2ZWQiCisJCQkJIiBhbiB1bmV4cGVjdGVkIElSUSwgIgorCQkJCSJjLSUwMnggZC0lMDJ4XG4iLAogCQkJCWlyYi0+c2Nzdy5jbWQuY3N0YXQsCiAJCQkJaXJiLT5zY3N3LmNtZC5kc3RhdCk7CiAJCQlyZXR1cm47CkBAIC02NzcsOCArNjkxLDggQEAKIAkJCSAgICAocF9jaC0+aXJiLT5lY3dbMF0gJiAweDQwKSA9PSAweDQwIHx8CiAJCQkgICAgKHBfY2gtPmlyYi0+ZWN3WzBdKSAgICAgICAgPT0gMCkgewogCQkJCXByaXZwdHItPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZXN0YXJ0IGlzICIKLQkJCQkJInJlcXVpcmVkIGFmdGVyIHJlbW90ZSAiCisJCQkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCQkJIiVzOiBSZXN0YXJ0IGlzIHJlcXVpcmVkIGFmdGVyIHJlbW90ZSAiCiAJCQkJCSJzaWRlIHJlY292ZXJzIFxuIiwKIAkJCQkJZGV2LT5uYW1lKTsKIAkJCX0KQEAgLTcxMywxMSArNzI3LDEzIEBACiAJCXJldHVybjsKIAljYXNlIENMQVdfU1RBUlRfV1JJVEU6CiAJCWlmIChwX2NoLT5pcmItPnNjc3cuY21kLmRzdGF0ICYgREVWX1NUQVRfVU5JVF9DSEVDSykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuaXQgQ2hlY2sgT2NjdXJlZCBpbiAiCisJCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJCSIlczogVW5pdCBDaGVjayBPY2N1cmVkIGluICIKIAkJCQkid3JpdGUgY2hhbm5lbFxuIiwgZGV2LT5uYW1lKTsKIAkJCWNsZWFyX2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpOwogCQkJaWYgKHBfY2gtPmlyYi0+ZWN3WzBdICYgMHg4MCkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZXNldHRpbmcgRXZlbnQgIgorCQkJCWRldl9pbmZvKCZjZGV2LT5kZXYsCisJCQkJCSIlczogUmVzZXR0aW5nIEV2ZW50ICIKIAkJCQkJIm9jY3VycmVkOlxuIiwgZGV2LT5uYW1lKTsKIAkJCQlpbml0X3RpbWVyKCZwX2NoLT50aW1lcik7CiAJCQkJcF9jaC0+dGltZXIuZnVuY3Rpb24gPQpAQCAtNzI1LDcgKzc0MSw4IEBACiAJCQkJcF9jaC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBfY2g7CiAJCQkJcF9jaC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAxMCpIWjsKIAkJCQlhZGRfdGltZXIoJnBfY2gtPnRpbWVyKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogd3JpdGUgY29ubmVjdGlvbiAiCisJCQkJZGV2X2luZm8oJmNkZXYtPmRldiwKKwkJCQkJIiVzOiB3cml0ZSBjb25uZWN0aW9uICIKIAkJCQkJInJlc3RhcnRpbmdcbiIsIGRldi0+bmFtZSk7CiAJCQl9CiAJCQlDTEFXX0RCRl9URVhUKDQsIHRyYWNlLCAicnN0cnR3cnQiKTsKQEAgLTczMyw5ICs3NTAsMTAgQEAKIAkJfQogCQlpZiAocF9jaC0+aXJiLT5zY3N3LmNtZC5kc3RhdCAmIERFVl9TVEFUX1VOSVRfRVhDRVApIHsKIAkJCWNsZWFyX2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVuaXQgRXhjZXB0aW9uICIKLQkJCSAgICAgICAiT2NjdXJlZCBpbiB3cml0ZSBjaGFubmVsXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlkZXZfaW5mbygmY2Rldi0+ZGV2LAorCQkJCSIlczogVW5pdCBFeGNlcHRpb24gIgorCQkJCSJvY2N1cnJlZCBpbiB3cml0ZSBjaGFubmVsXG4iLAorCQkJCWRldi0+bmFtZSk7CiAJCX0KIAkJaWYgKCEoKHBfY2gtPmlyYi0+c2Nzdy5jbWQuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NFQ19TVEFUVVMpIHx8CiAJCShwX2NoLT5pcmItPnNjc3cuY21kLnN0Y3RsID09IFNDU1dfU1RDVExfU1RBVFVTX1BFTkQpIHx8CkBAIC03NTcsOCArNzc1LDkgQEAKIAkJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgIlN0V3RFeGl0Iik7CiAJCXJldHVybjsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogd3Jvbmcgc2VsZWN0aW9uIGNvZGUgLSBpcnEgIgotCQkJInN0YXRlPSVkXG4iLCBkZXYtPm5hbWUsIHBfY2gtPmNsYXdfc3RhdGUpOworCQlkZXZfd2FybigmY2Rldi0+ZGV2LAorCQkJIlRoZSBDTEFXIGRldmljZSBmb3IgJXMgcmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBJUlFcbiIsCisJCQkgZGV2LT5uYW1lKTsKIAkJQ0xBV19EQkZfVEVYVCgyLCB0cmFjZSwgImJhZElSUSIpOwogCQlyZXR1cm47CiAgICAgICAgIH0KQEAgLTkxMCw4ICs5MjksMTAgQEAKICAgICAgICAgaWYgKCgocHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5sYXN0X2RzdGF0IHwKIAkJcHJpdnB0ci0+Y2hhbm5lbFtXUklURV0ubGFzdF9kc3RhdCkgJgogCQl+KERFVl9TVEFUX0NITl9FTkQgfCBERVZfU1RBVF9ERVZfRU5EKSkgIT0gMHgwMCkgewotICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjaGFubmVsIHByb2JsZW1zIGR1cmluZyBjbG9zZSAtICIKLQkJCSJyZWFkOiAlMDJ4IC0gIHdyaXRlOiAlMDJ4XG4iLAorCQlkZXZfd2FybigmcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5jZGV2LT5kZXYsCisJCQkiRGVhY3RpdmF0aW5nICVzIGNvbXBsZXRlZCB3aXRoIGluY29ycmVjdCIKKwkJCSIgc3ViY2hhbm5lbCBzdGF0dXMgIgorCQkJIihyZWFkICUwMngsIHdyaXRlICUwMngpXG4iLAogICAgICAgICAgICAgICAgIGRldi0+bmFtZSwKIAkJcHJpdnB0ci0+Y2hhbm5lbFtSRUFEXS5sYXN0X2RzdGF0LAogCQlwcml2cHRyLT5jaGFubmVsW1dSSVRFXS5sYXN0X2RzdGF0KTsKQEAgLTEwMTIsNyArMTAzMyw3IEBACiBwYWdlc190b19vcmRlcl9vZl9tYWcoaW50IG51bV9vZl9wYWdlcykKIHsKIAlpbnQJb3JkZXJfb2ZfbWFnPTE7CQkvKiBhc3N1bWUgMiBwYWdlcyAqLwotCWludAludW1wPTI7CisJaW50CW51bXA7CiAKIAlDTEFXX0RCRl9URVhUXyg1LCB0cmFjZSwgInBhZ2VzJWQiLCBudW1fb2ZfcGFnZXMpOwogCWlmIChudW1fb2ZfcGFnZXMgPT0gMSkgICB7cmV0dXJuIDA7IH0gIC8qIG1hZ25pdHVkZSBvZiAwID0gMSBwYWdlICovCkBAIC0xMDc2LDggKzEwOTcsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCBwcml2cHRyLT4gcF9yZWFkX2FjdGl2ZV9maXJzdCA9PU5VTEwgKSB7Ci0gICAgICAgICAgICAgICAgcHJpdnB0ci0+IHBfcmVhZF9hY3RpdmVfZmlyc3Q9IHBfZmlyc3Q7ICAvKiAgICBzZXQgbmV3IGZpcnN0ICovCi0gICAgICAgICAgICAgICAgcHJpdnB0ci0+IHBfcmVhZF9hY3RpdmVfbGFzdCA9IHBfbGFzdDsgICAvKiAgICBzZXQgbmV3IGxhc3QgICovCisJCXByaXZwdHItPnBfcmVhZF9hY3RpdmVfZmlyc3QgPSBwX2ZpcnN0OyAgLyogIHNldCBuZXcgZmlyc3QgKi8KKwkJcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9sYXN0ICA9IHBfbGFzdDsgICAvKiAgc2V0IG5ldyBsYXN0ICAqLwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogCkBAIC0xMTEzLDcgKzExMzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9sYXN0LT5yX1RJQ18yLmNkYT0KIAkJCQkoX191MzIpX19wYSgmcF9maXJzdC0+cmVhZCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8qICAgICAgY2hhaW4gaW4gbmV3IHNldCBvZiBibG9ja3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCQkvKiAgICAgIGNoYWluIGluIG5ldyBzZXQgb2YgYmxvY2tzICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgcHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9sYXN0LT5uZXh0ID0gcF9maXJzdDsKICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3JlYWRfYWN0aXZlX2xhc3Q9cF9sYXN0OwogICAgICAgICB9IC8qIGVuZCBvZiBpZiAoIHByaXZwdHItPiBwX3JlYWRfYWN0aXZlX2ZpcnN0ID09TlVMTCkgICovCkBAIC0xMTM1LDIxICsxMTU2LDE4IEBACiAJCWNhc2UgLUVCVVNZOiAvKiBCVVNZIGlzIGEgdHJhbnNpZW50IHN0YXRlIG5vIGFjdGlvbiBuZWVkZWQgKi8KIAkJCWJyZWFrOwogCQljYXNlIC1FTk9ERVY6Ci0JCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IE1pc3NpbmcgZGV2aWNlIGNhbGxlZCAiCi0JCQkJImZvciBJTyBFTk9ERVZcbiIsIGRldl9uYW1lKCZjZGV2LT5kZXYpKTsKLQkJCWJyZWFrOwotCQljYXNlIC1FSU86Ci0JCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IFN0YXR1cyBwZW5kaW5nLi4uIEVJTyBcbiIsCi0JCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQkJZGV2X2VycigmY2Rldi0+ZGV2LCAiVGhlIHJlbW90ZSBjaGFubmVsIGFkYXB0ZXIgaXMgbm90IgorCQkJCSIgYXZhaWxhYmxlXG4iKTsKIAkJCWJyZWFrOwogCQljYXNlIC1FSU5WQUw6Ci0JCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IEludmFsaWQgRGV2IFN0YXRlIEVJTlZBTCBcbiIsCi0JCQkJZGV2X25hbWUoJmNkZXYtPmRldikpOworCQkJZGV2X2VycigmY2Rldi0+ZGV2LAorCQkJCSJUaGUgc3RhdHVzIG9mIHRoZSByZW1vdGUgY2hhbm5lbCBhZGFwdGVyIgorCQkJCSIgaXMgbm90IHZhbGlkXG4iKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBVbmtub3duIGVycm9yIGluICIKLQkJCQkgIkRvX0lPICVkXG4iLCBkZXZfbmFtZSgmY2Rldi0+ZGV2KSwKLQkJCSAgICAgICByZXR1cm5fY29kZSk7CisJCQlkZXZfZXJyKCZjZGV2LT5kZXYsICJUaGUgY29tbW9uIGRldmljZSBsYXllciIKKwkJCQkiIHJldHVybmVkIGVycm9yIGNvZGUgJWRcbiIsCisJCQkJICByZXR1cm5fY29kZSk7CiAJCX0KIAl9CiAJQ0xBV19EQkZfVEVYVCg0LCB0cmFjZSwgImNjd3JldCIpOwpAQCAtMTE2Myw0MiArMTE4MSwzNyBAQAogY2N3X2NoZWNrX3VuaXRfY2hlY2soc3RydWN0IGNoYmsgKiBwX2NoLCB1bnNpZ25lZCBjaGFyIHNlbnNlICkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBfY2gtPm5kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBfY2gtPmNkZXYtPmRldjsKIAogCUNMQVdfREJGX1RFWFQoNCwgdHJhY2UsICJ1bml0Y2hlayIpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogVW5pdCBDaGVjayB3aXRoIHNlbnNlIGJ5dGU6MHglMDR4XG4iLAotCSAgICAgICBuZGV2LT5uYW1lLCBzZW5zZSk7CisJZGV2X3dhcm4oZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyBkaXNjb25uZWN0ZWRcbiIsCisJCW5kZXYtPm5hbWUpOwogCi0gICAgICAgIGlmIChzZW5zZSAmIDB4NDApIHsKLSAgICAgICAgICAgICAgICBpZiAoc2Vuc2UgJiAweDAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogSW50ZXJmYWNlIGRpc2Nvbm5lY3Qgb3IgIgotCQkJCSJTZWxlY3RpdmUgcmVzZXQgIgotCQkJCSJvY2N1cnJlZCAocmVtb3RlIHNpZGUpXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogU3lzdGVtIHJlc2V0IG9jY3VyZWQiCi0JCQkJIiAocmVtb3RlIHNpZGUpXG4iLCBuZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc2Vuc2UgJiAweDIwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbnNlICYgMHgwNCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERhdGEtc3RyZWFtaW5nICIKLQkJCQkidGltZW91dClcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogRGF0YS10cmFuc2ZlciBwYXJpdHkiCi0JCQkJIiBlcnJvclxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHNlbnNlICYgMHgxMCkgewotICAgICAgICAgICAgICAgIGlmIChzZW5zZSAmIDB4MjApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBIYXJkd2FyZSBtYWxmdW5jdGlvbiAiCi0JCQkJIihyZW1vdGUgc2lkZSlcbiIsIG5kZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiByZWFkLWRhdGEgcGFyaXR5IGVycm9yICIKLQkJCQkiKHJlbW90ZSBzaWRlKVxuIiwgbmRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKHNlbnNlICYgMHg0MCkgeworCQlpZiAoc2Vuc2UgJiAweDAxKSB7CisJCQlkZXZfd2FybihkZXYsICJUaGUgcmVtb3RlIGNoYW5uZWwgYWRhcHRlciBmb3IiCisJCQkJIiAlcyBoYXMgYmVlbiByZXNldFxuIiwKKwkJCQluZGV2LT5uYW1lKTsKKwkJfQorCX0gZWxzZSBpZiAoc2Vuc2UgJiAweDIwKSB7CisJCWlmIChzZW5zZSAmIDB4MDQpIHsKKwkJCWRldl93YXJuKGRldiwgIkEgZGF0YSBzdHJlYW1pbmcgdGltZW91dCBvY2N1cnJlZCIKKwkJCQkiIGZvciAlc1xuIiwKKwkJCQluZGV2LT5uYW1lKTsKKwkJfSBlbHNlIGlmIChzZW5zZSAmIDB4MTApIHsKKwkJCWRldl93YXJuKGRldiwgIlRoZSByZW1vdGUgY2hhbm5lbCBhZGFwdGVyIGZvciAlcyIKKwkJCQkiIGlzIGZhdWx0eVxuIiwKKwkJCQluZGV2LT5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCWRldl93YXJuKGRldiwgIkEgZGF0YSB0cmFuc2ZlciBwYXJpdHkgZXJyb3Igb2NjdXJyZWQiCisJCQkJIiBmb3IgJXNcbiIsCisJCQkJbmRldi0+bmFtZSk7CisJCX0KKwl9IGVsc2UgaWYgKHNlbnNlICYgMHgxMCkgeworCQlkZXZfd2FybihkZXYsICJBIHJlYWQgZGF0YSBwYXJpdHkgZXJyb3Igb2NjdXJyZWQiCisJCQkiIGZvciAlc1xuIiwKKwkJCW5kZXYtPm5hbWUpOworCX0KIAogfSAgIC8qICAgIGVuZCBvZiBjY3dfY2hlY2tfdW5pdF9jaGVjayAgICAqLwogCkBAIC0xMjM1LDcgKzEyNDgsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0gICAgICAgIHJldHVybiAwOworCXJldHVybiByYzsKIH0gICAgLyogICAgZW5kIG9mIGZpbmRfbGluayAgICAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCkBAIC0xMzQ3LDcgKzEzNjAsMTAgQEAKICAgICAgICAgICAgICAgICBwcml2cHRyLT5wX3dyaXRlX2ZyZWVfY2hhaW49cF90aGlzX2Njdy0+bmV4dDsKICAgICAgICAgICAgICAgICBwX3RoaXNfY2N3LT5uZXh0PU5VTEw7CiAgICAgICAgICAgICAgICAgLS1wcml2cHRyLT53cml0ZV9mcmVlX2NvdW50OyAvKiAtMSAqLwotICAgICAgICAgICAgICAgIGJ5dGVzSW5UaGlzQnVmZmVyPWxlbl9vZl9kYXRhOworCQlpZiAobGVuX29mX2RhdGEgPj0gcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUpCisJCQlieXRlc0luVGhpc0J1ZmZlciA9IHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplOworCQllbHNlCisJCQlieXRlc0luVGhpc0J1ZmZlciA9IGxlbl9vZl9kYXRhOwogICAgICAgICAgICAgICAgIG1lbWNweSggcF90aGlzX2Njdy0+cF9idWZmZXIscERhdGFBZGRyZXNzLCBieXRlc0luVGhpc0J1ZmZlcik7CiAgICAgICAgICAgICAgICAgbGVuX29mX2RhdGEtPWJ5dGVzSW5UaGlzQnVmZmVyOwogICAgICAgICAgICAgICAgIHBEYXRhQWRkcmVzcys9KHVuc2lnbmVkIGxvbmcpYnl0ZXNJblRoaXNCdWZmZXI7CkBAIC0xMzc1LDcgKzEzOTEsNyBAQAogICAgICAgICAqLwogCiAgICAgICAgIGlmIChwX2ZpcnN0X2NjdyE9TlVMTCkgewotICAgICAgICAgICAgICAgIC8qICAgICAgc2V0dXAgZW5kaW5nIGNjdyBzZXF1ZW5jZSBmb3IgdGhpcyBzZWdtZW50ICAgICAgICAgICAgICAqLworCQkvKiAgICAgIHNldHVwIGVuZGluZyBjY3cgc2VxdWVuY2UgZm9yIHRoaXMgc2VnbWVudCAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBwRW5kPXByaXZwdHItPnBfZW5kX2NjdzsKICAgICAgICAgICAgICAgICBpZiAocEVuZC0+d3JpdGUxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwRW5kLT53cml0ZTE9MHgwMDsgICAvKiBzZWNvbmQgZW5kIGNjdyBpcyBub3cgYWN0aXZlICovCkBAIC0xNjk3LDEwICsxNzEzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zi0+IHdfVElDXzEuZmxhZ3MgICAgICA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zi0+IHdfVElDXzEuY291bnQgICAgICA9IDA7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoKHVuc2lnbmVkIGxvbmcpcF9idWZmK3ByaXZwdHItPnBfZW52LT53cml0ZV9zaXplKSA+PQorCQkJaWYgKCgodW5zaWduZWQgbG9uZylwX2J1ZmYgKworCQkJCQkgICAgcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemUpID49CiAJCQkgICAoKHVuc2lnbmVkIGxvbmcpKHBfYnVmZisyKgotCQkJCShwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZSkgLTEpICYgUEFHRV9NQVNLKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcF9idWZmPSBwX2J1ZmYrcHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemU7CisJCQkgICAgKHByaXZwdHItPnBfZW52LT53cml0ZV9zaXplKSAtIDEpICYgUEFHRV9NQVNLKSkgeworCQkJCXBfYnVmZiA9IHBfYnVmZitwcml2cHRyLT5wX2Vudi0+d3JpdGVfc2l6ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KQEAgLTE4NDAsMTUgKzE4NTcsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmLT5oZWFkZXIub3Bjb2RlPTB4ZmY7CiAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zi0+aGVhZGVyLmZsYWc9Q0xBV19QRU5ESU5HOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKCh1bnNpZ25lZCBsb25nKXBfYnVmZitwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKSA+PQotCQkJCSgodW5zaWduZWQgbG9uZykocF9idWZmKzIqKHByaXZwdHItPnBfZW52LT5yZWFkX3NpemUpIC0xKQotCQkJCSAmIFBBR0VfTUFTSykgKSB7CisJCQlpZiAoKCh1bnNpZ25lZCBsb25nKXBfYnVmZitwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKSA+PQorCQkJICAoKHVuc2lnbmVkIGxvbmcpKHBfYnVmZisyKihwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKQorCQkJCSAtMSkKKwkJCSAgICYgUEFHRV9NQVNLKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2J1ZmY9IHBfYnVmZitwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmZj0KIAkJCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykKLQkJCQkJKHBfYnVmZisyKihwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKSAtMSkKKwkJCQkJKHBfYnVmZisyKihwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplKS0xKQogCQkJCQkgJiBQQUdFX01BU0spIDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9ICAgLyogZm9yIHJlYWRfYnVmZmVycyAgICovCkBAIC0xODU2LDI0ICsxODc0LDI4IEBACiAgICAgICAgICAgZWxzZSB7ICAvKiByZWFkIFNpemUgPj0gUEFHRV9TSVpFICAqLwogICAgICAgICAgICAgICAgIGZvciAoaT0wIDsgaTwgcHJpdnB0ci0+cF9lbnYtPnJlYWRfYnVmZmVycyA7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgcF9idWZmID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKF9fR0ZQX0RNQSwKLQkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZyhwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZCkgKTsKKwkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKKwkJCQkJcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcnJlYWQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwX2J1ZmY9PU5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwcml2cHRyLT5wX2J1ZmZfY2N3LAotCQkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZyhwcml2cHRyLT5wX2J1ZmZfY2N3X251bSkpOworCQkJCQkoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZyhwcml2cHRyLT4KKwkJCQkJcF9idWZmX2Njd19udW0pKTsKIAkJCQkvKiBmcmVlIHRoZSB3cml0ZSBwYWdlcyAgKi8KIAkgICAgICAgICAgICAgICAgICAgICAgICBwX2J1Zj1wcml2cHRyLT5wX2J1ZmZfd3JpdGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwX2J1ZiE9TlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcF9idWYtPnBfYnVmZmVyLAotCQkJCQkJKGludClwYWdlc190b19vcmRlcl9vZl9tYWcoCi0JCQkJCQlwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVyd3JpdGUgKSk7CisJCQkJCWZyZWVfcGFnZXMoCisJCQkJCSAgICAodW5zaWduZWQgbG9uZylwX2J1Zi0+cF9idWZmZXIsCisJCQkJCSAgICAoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKKwkJCQkJICAgIHByaXZwdHItPnBfYnVmZl9wYWdlc19wZXJ3cml0ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmPXBfYnVmLT5uZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAJCQkJLyogZnJlZSBhbnkgcmVhZCBwYWdlcyBhbHJlYWR5IGFsbG9jICAqLwogCSAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmPXByaXZwdHItPnBfYnVmZl9yZWFkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocF9idWYhPU5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXBfYnVmLT5wX2J1ZmZlciwKLQkJCQkJCShpbnQpcGFnZXNfdG9fb3JkZXJfb2ZfbWFnKAotCQkJCQkJcHJpdnB0ci0+cF9idWZmX3BhZ2VzX3BlcnJlYWQgKSk7CisJCQkJCWZyZWVfcGFnZXMoCisJCQkJCSAgICAodW5zaWduZWQgbG9uZylwX2J1Zi0+cF9idWZmZXIsCisJCQkJCSAgICAoaW50KXBhZ2VzX3RvX29yZGVyX29mX21hZygKKwkJCQkJICAgICBwcml2cHRyLT5wX2J1ZmZfcGFnZXNfcGVycmVhZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBfYnVmPXBfYnVmLT5uZXh0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPnBfYnVmZl9jY3c9TlVMTDsKQEAgLTIwMDMsNyArMjAyNSw3IEBACiAJdGRldiA9ICZwcml2cHRyLT5jaGFubmVsW1JFQURdLmNkZXYtPmRldjsKIAltZW1jcHkoICZ0ZW1wX2hvc3RfbmFtZSwgcF9lbnYtPmhvc3RfbmFtZSwgOCk7CiAgICAgICAgIG1lbWNweSggJnRlbXBfd3NfbmFtZSwgcF9lbnYtPmFkYXB0ZXJfbmFtZSAsIDgpOwotICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBkZXZpY2UgJS44czogIgorCWRldl9pbmZvKHRkZXYsICIlczogQ0xBVyBkZXZpY2UgJS44czogIgogCQkiUmVjZWl2ZWQgQ29udHJvbCBQYWNrZXRcbiIsCiAJCWRldi0+bmFtZSwgdGVtcF93c19uYW1lKTsKICAgICAgICAgaWYgKHByaXZwdHItPnJlbGVhc2VfcGVuZD09MSkgewpAQCAtMjAyMiwzMiArMjA0NCwzMCBAQAogCQlpZiAocF9jdGxiay0+dmVyc2lvbiAhPSBDTEFXX1ZFUlNJT05fSUQpIHsKIAkJCWNsYXdfc25kX3N5c192YWxpZGF0ZV9yc3AoZGV2LCBwX2N0bGJrLAogCQkJCUNMQVdfUkNfV1JPTkdfVkVSU0lPTik7Ci0JCQlwcmludGsoIiVzOiAlZCBpcyB3cm9uZyB2ZXJzaW9uIGlkLiAiCi0JCQkgICAgICAgIkV4cGVjdGVkICVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbiwKLQkJCSAgICAgICBDTEFXX1ZFUlNJT05fSUQpOworCQkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMiCisJCQkJIiB1c2VzIGFuIGluY29ycmVjdCBBUEkgdmVyc2lvbiAlZFxuIiwKKwkJCQlkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24pOwogCQl9CiAJCXBfc3lzdmFsID0gKHN0cnVjdCBzeXN2YWwgKikmKHBfY3RsYmstPmRhdGEpOwotCQlwcmludGsoIiVzOiBSZWN2IFN5cyBWYWxpZGF0ZSBSZXF1ZXN0OiAiCi0JCSAgICAgICAiVmVycz0lZCxsaW5rX2lkPSVkLENvcnI9JWQsV1MgbmFtZT0lLiIKLQkJICAgICAgICI4cyxIb3N0IG5hbWU9JS44c1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgcF9jdGxiay0+dmVyc2lvbiwKLQkJICAgICAgIHBfY3RsYmstPmxpbmtpZCwKLQkJICAgICAgIHBfY3RsYmstPmNvcnJlbGF0b3IsCi0JCSAgICAgICBwX3N5c3ZhbC0+V1NfbmFtZSwKLQkJICAgICAgIHBfc3lzdmFsLT5ob3N0X25hbWUpOworCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IFJlY3YgU3lzIFZhbGlkYXRlIFJlcXVlc3Q6ICIKKwkJCSJWZXJzPSVkLGxpbmtfaWQ9JWQsQ29ycj0lZCxXUyBuYW1lPSUuOHMsIgorCQkJIkhvc3QgbmFtZT0lLjhzXG4iLAorCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT52ZXJzaW9uLAorCQkJcF9jdGxiay0+bGlua2lkLAorCQkJcF9jdGxiay0+Y29ycmVsYXRvciwKKwkJCXBfc3lzdmFsLT5XU19uYW1lLAorCQkJcF9zeXN2YWwtPmhvc3RfbmFtZSk7CiAJCWlmIChtZW1jbXAodGVtcF9ob3N0X25hbWUsIHBfc3lzdmFsLT5ob3N0X25hbWUsIDgpKSB7CiAJCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywKIAkJCQlDTEFXX1JDX05BTUVfTUlTTUFUQ0gpOwogCQkJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIkhTVEJBRCIpOwogCQkJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIHBfc3lzdmFsLT5ob3N0X25hbWUpOwogCQkJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIHRlbXBfaG9zdF9uYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgSG9zdCBuYW1lIG1pc21hdGNoXG4iLAotCQkJCWRldi0+bmFtZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgOiVzOiAiCi0JCQkJImV4cGVjdGVkIDolczogXG4iLAotCQkJCWRldi0+bmFtZSwKKwkJCWRldl93YXJuKHRkZXYsCisJCQkJIkhvc3QgbmFtZSAlcyBmb3IgJXMgZG9lcyBub3QgbWF0Y2ggdGhlIgorCQkJCSIgcmVtb3RlIGFkYXB0ZXIgbmFtZSAlc1xuIiwKIAkJCQlwX3N5c3ZhbC0+aG9zdF9uYW1lLAorCQkJCWRldi0+bmFtZSwKIAkJCQl0ZW1wX2hvc3RfbmFtZSk7CiAJCX0KIAkJaWYgKG1lbWNtcCh0ZW1wX3dzX25hbWUsIHBfc3lzdmFsLT5XU19uYW1lLCA4KSkgewpAQCAtMjA1NiwzNSArMjA3NiwzOCBAQAogCQkJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIldTTkJBRCIpOwogCQkJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIHBfc3lzdmFsLT5XU19uYW1lKTsKIAkJCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCB0ZW1wX3dzX25hbWUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdTIG5hbWUgbWlzbWF0Y2hcbiIsCi0JCQkJZGV2LT5uYW1lKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCA6JXM6ICIKLQkJCSAgICAgICAiZXhwZWN0ZWQgOiVzOiBcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLAotCQkJICAgICAgIHBfc3lzdmFsLT5XU19uYW1lLAotCQkJICAgICAgIHRlbXBfd3NfbmFtZSk7CisJCQlkZXZfd2Fybih0ZGV2LCAiQWRhcHRlciBuYW1lICVzIGZvciAlcyBkb2VzIG5vdCBtYXRjaCIKKwkJCQkiIHRoZSByZW1vdGUgaG9zdCBuYW1lICVzXG4iLAorCQkJCXBfc3lzdmFsLT5XU19uYW1lLAorCQkJCWRldi0+bmFtZSwKKwkJCQl0ZW1wX3dzX25hbWUpOwogCQl9CiAJCWlmICgocF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUgPCBwX2Vudi0+d3JpdGVfc2l6ZSkgJiYKIAkJICAgIChwX2Vudi0+cGFja2luZyA9PSAwKSkgewogCQkJY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssCiAJCQkJQ0xBV19SQ19IT1NUX1JDVl9UT09fU01BTEwpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGhvc3Qgd3JpdGUgc2l6ZSBpcyB0b28gIgotCQkJCSJzbWFsbFxuIiwgZGV2LT5uYW1lKTsKKwkJCWRldl93YXJuKHRkZXYsCisJCQkJIlRoZSBsb2NhbCB3cml0ZSBidWZmZXIgaXMgc21hbGxlciB0aGFuIHRoZSIKKwkJCQkiIHJlbW90ZSByZWFkIGJ1ZmZlclxuIik7CiAJCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAid3J0c3piYWQiKTsKIAkJfQogCQlpZiAoKHBfc3lzdmFsLT5yZWFkX2ZyYW1lX3NpemUgPCBwX2Vudi0+cmVhZF9zaXplKSAmJgogCQkgICAgKHBfZW52LT5wYWNraW5nID09IDApKSB7CiAJCQljbGF3X3NuZF9zeXNfdmFsaWRhdGVfcnNwKGRldiwgcF9jdGxiaywKIAkJCQlDTEFXX1JDX0hPU1RfUkNWX1RPT19TTUFMTCk7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogaG9zdCByZWFkIHNpemUgaXMgdG9vICIKLQkJCQkic21hbGxcbiIsIGRldi0+bmFtZSk7CisJCQlkZXZfd2Fybih0ZGV2LAorCQkJCSJUaGUgbG9jYWwgcmVhZCBidWZmZXIgaXMgc21hbGxlciB0aGFuIHRoZSIKKwkJCQkiIHJlbW90ZSB3cml0ZSBidWZmZXJcbiIpOwogCQkJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgInJkc2l6YmFkIik7CiAJCX0KIAkJY2xhd19zbmRfc3lzX3ZhbGlkYXRlX3JzcChkZXYsIHBfY3RsYmssIDApOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBkZXZpY2UgJS44czogU3lzdGVtIHZhbGlkYXRlICIKLQkJCSJjb21wbGV0ZWQuXG4iLCBkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSk7Ci0JCXByaW50aygiJXM6IHN5cyBWYWxpZGF0ZSBSc2l6ZTolZCBXc2l6ZTolZFxuIiwgZGV2LT5uYW1lLAotCQkJcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZSwgcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUpOworCQlkZXZfaW5mbyh0ZGV2LAorCQkJIkNMQVcgZGV2aWNlICUuOHM6IFN5c3RlbSB2YWxpZGF0ZSIKKwkJCSIgY29tcGxldGVkLlxuIiwgdGVtcF93c19uYW1lKTsKKwkJZGV2X2luZm8odGRldiwKKwkJCSIlczogc3lzIFZhbGlkYXRlIFJzaXplOiVkIFdzaXplOiVkXG4iLAorCQkJZGV2LT5uYW1lLCBwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplLAorCQkJcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUpOwogCQlwcml2cHRyLT5zeXN0ZW1fdmFsaWRhdGVfY29tcCA9IDE7CiAJCWlmIChzdHJuY21wKHBfZW52LT5hcGlfdHlwZSwgV1NfQVBQTF9OQU1FX1BBQ0tFRCwgNikgPT0gMCkKIAkJCXBfZW52LT5wYWNraW5nID0gUEFDS0lOR19BU0s7CkBAIC0yMDkyLDggKzIxMTUsMTAgQEAKIAkJYnJlYWs7CiAJY2FzZSBTWVNURU1fVkFMSURBVEVfUkVTUE9OU0U6CiAJCXBfc3lzdmFsID0gKHN0cnVjdCBzeXN2YWwgKikmKHBfY3RsYmstPmRhdGEpOwotCQlwcmludGsoIiVzOiBSZWN2IFN5cyBWYWxpZGF0ZSBSZXNwOiBWZXJzPSVkLENvcnI9JWQsUkM9JWQsIgotCQkJIldTIG5hbWU9JS44cyxIb3N0IG5hbWU9JS44c1xuIiwKKwkJZGV2X2luZm8odGRldiwKKwkJCSJTZXR0aW5ncyBmb3IgJXMgdmFsaWRhdGVkICh2ZXJzaW9uPSVkLCAiCisJCQkicmVtb3RlIGRldmljZT0lZCwgcmM9JWQsIGFkYXB0ZXIgbmFtZT0lLjhzLCAiCisJCQkiaG9zdCBuYW1lPSUuOHMpXG4iLAogCQkJZGV2LT5uYW1lLAogCQkJcF9jdGxiay0+dmVyc2lvbiwKIAkJCXBfY3RsYmstPmNvcnJlbGF0b3IsCkBAIC0yMTAyLDQxICsyMTI3LDM5IEBACiAJCQlwX3N5c3ZhbC0+aG9zdF9uYW1lKTsKIAkJc3dpdGNoIChwX2N0bGJrLT5yYykgewogCQljYXNlIDA6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBkZXZpY2UgIgotCQkJCSIlLjhzOiBTeXN0ZW0gdmFsaWRhdGUgIgotCQkJCSJjb21wbGV0ZWQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgdGVtcF93c19uYW1lKTsKKwkJCWRldl9pbmZvKHRkZXYsICIlczogQ0xBVyBkZXZpY2UgIgorCQkJCSIlLjhzOiBTeXN0ZW0gdmFsaWRhdGUgY29tcGxldGVkLlxuIiwKKwkJCQlkZXYtPm5hbWUsIHRlbXBfd3NfbmFtZSk7CiAJCQlpZiAocHJpdnB0ci0+c3lzdGVtX3ZhbGlkYXRlX2NvbXAgPT0gMCkKIAkJCQljbGF3X3N0cnRfY29ubl9yZXEoZGV2KTsKIAkJCXByaXZwdHItPnN5c3RlbV92YWxpZGF0ZV9jb21wID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIENMQVdfUkNfTkFNRV9NSVNNQVRDSDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTeXMgVmFsaWRhdGUgIgotCQkJCSJSZXNwIDogSG9zdCwgV1MgbmFtZSBpcyAiCi0JCQkJIm1pc21hdGNoXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlkZXZfd2Fybih0ZGV2LCAiVmFsaWRhdGluZyAlcyBmYWlsZWQgYmVjYXVzZSBvZiIKKwkJCQkiIGEgaG9zdCBvciBhZGFwdGVyIG5hbWUgbWlzbWF0Y2hcbiIsCisJCQkJZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIENMQVdfUkNfV1JPTkdfVkVSU0lPTjoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTeXMgVmFsaWRhdGUgIgotCQkJCSJSZXNwIDogV3JvbmcgdmVyc2lvblxuIiwKKwkJCWRldl93YXJuKHRkZXYsICJWYWxpZGF0aW5nICVzIGZhaWxlZCBiZWNhdXNlIG9mIGEiCisJCQkJIiB2ZXJzaW9uIGNvbmZsaWN0XG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJY2FzZSBDTEFXX1JDX0hPU1RfUkNWX1RPT19TTUFMTDoKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTeXMgVmFsaWRhdGUgIgotCQkJCSJSZXNwIDogYmFkIGZyYW1lIHNpemVcbiIsCisJCQlkZXZfd2Fybih0ZGV2LCAiVmFsaWRhdGluZyAlcyBmYWlsZWQgYmVjYXVzZSBvZiBhIgorCQkJCSIgZnJhbWUgc2l6ZSBjb25mbGljdFxuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU3lzIFZhbGlkYXRlICIKLQkJCQkiZXJyb3IgY29kZT0lZCBcbiIsCi0JCQkJIGRldi0+bmFtZSwgcF9jdGxiay0+cmMpOworCQkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMgcmVqZWN0ZWQiCisJCQkJIiB0aGUgY29ubmVjdGlvblxuIiwKKwkJCQkgZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBDT05ORUNUSU9OX1JFUVVFU1Q6CiAJCXBfY29ubmVjdCA9IChzdHJ1Y3QgY29ubmNtZCAqKSYocF9jdGxiay0+ZGF0YSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWN2IENvbm4gUmVxOiBWZXJzPSVkLGxpbmtfaWQ9JWQsIgorCQlkZXZfaW5mbyh0ZGV2LCAiJXM6IFJlY3YgQ29ubiBSZXE6IFZlcnM9JWQsbGlua19pZD0lZCwiCiAJCQkiQ29ycj0lZCxIT1NUIGFwcGw9JS44cyxXUyBhcHBsPSUuOHNcbiIsCiAJCQlkZXYtPm5hbWUsCiAJCQlwX2N0bGJrLT52ZXJzaW9uLApAQCAtMjE0NiwyMSArMjE2OSwyMSBAQAogCQkJcF9jb25uZWN0LT5XU19uYW1lKTsKIAkJaWYgKHByaXZwdHItPmFjdGl2ZV9saW5rX0lEICE9IDApIHsKIAkJCWNsYXdfc25kX2Rpc2MoZGV2LCBwX2N0bGJrKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlcSBlcnJvciA6ICIKLQkJCQkiYWxyZWFkeSBsb2dpY2FsIGxpbmsgaXMgYWN0aXZlIFxuIiwKKwkJCWRldl9pbmZvKHRkZXYsICIlcyByZWplY3RlZCBhIGNvbm5lY3Rpb24gcmVxdWVzdCIKKwkJCQkiIGJlY2F1c2UgaXQgaXMgYWxyZWFkeSBhY3RpdmVcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJfQogCQlpZiAocF9jdGxiay0+bGlua2lkICE9IDEpIHsKIAkJCWNsYXdfc25kX2Rpc2MoZGV2LCBwX2N0bGJrKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlcSBlcnJvciA6ICIKLQkJCQkicmVxIGxvZ2ljYWwgbGluayBpZCBpcyBub3QgMVxuIiwKKwkJCWRldl9pbmZvKHRkZXYsICIlcyByZWplY3RlZCBhIHJlcXVlc3QgdG8gb3BlbiBtdWx0aXBsZSIKKwkJCQkiIGNvbm5lY3Rpb25zXG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCX0KIAkJcmMgPSBmaW5kX2xpbmsoZGV2LCBwX2Nvbm5lY3QtPmhvc3RfbmFtZSwgcF9jb25uZWN0LT5XU19uYW1lKTsKIAkJaWYgKHJjICE9IDApIHsKIAkJCWNsYXdfc25kX2Rpc2MoZGV2LCBwX2N0bGJrKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlc3AgZXJyb3I6ICIKLQkJCQkicmVxIGFwcGwgbmFtZSBkb2VzIG5vdCBtYXRjaFxuIiwKKwkJCWRldl9pbmZvKHRkZXYsICIlcyByZWplY3RlZCBhIGNvbm5lY3Rpb24gcmVxdWVzdCIKKwkJCQkiIGJlY2F1c2Ugb2YgYSB0eXBlIG1pc21hdGNoXG4iLAogCQkJCWRldi0+bmFtZSk7CiAJCX0KIAkJY2xhd19zZW5kX2NvbnRyb2woZGV2LApAQCAtMjE3Miw3ICsyMTk1LDcgQEAKIAkJCXBfZW52LT5wYWNraW5nID0gUEFDS19TRU5EOwogCQkJY2xhd19zbmRfY29ubl9yZXEoZGV2LCAwKTsKIAkJfQotCQlwcmludGsoS0VSTl9JTkZPICIlczogQ0xBVyBkZXZpY2UgJS44czogQ29ubmVjdGlvbiAiCisJCWRldl9pbmZvKHRkZXYsICIlczogQ0xBVyBkZXZpY2UgJS44czogQ29ubmVjdGlvbiAiCiAJCQkiY29tcGxldGVkIGxpbmtfaWQ9JWQuXG4iLAogCQkJZGV2LT5uYW1lLCB0ZW1wX3dzX25hbWUsCiAJCQlwX2N0bGJrLT5saW5raWQpOwpAQCAtMjE4Miw3ICsyMjA1LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDT05ORUNUSU9OX1JFU1BPTlNFOgogCQlwX2Nvbm5lY3QgPSAoc3RydWN0IGNvbm5jbWQgKikmKHBfY3RsYmstPmRhdGEpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmV2YyBDb25uIFJlc3A6IFZlcnM9JWQsbGlua19pZD0lZCwiCisJCWRldl9pbmZvKHRkZXYsICIlczogUmVjdiBDb25uIFJlc3A6IFZlcnM9JWQsbGlua19pZD0lZCwiCiAJCQkiQ29ycj0lZCxSQz0lZCxIb3N0IGFwcGw9JS44cywgV1MgYXBwbD0lLjhzXG4iLAogCQkJZGV2LT5uYW1lLAogCQkJcF9jdGxiay0+dmVyc2lvbiwKQEAgLTIxOTMsMTYgKzIyMTYsMTggQEAKIAkJCXBfY29ubmVjdC0+V1NfbmFtZSk7CiAKIAkJaWYgKHBfY3RsYmstPnJjICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBDb25uIFJlc3AgZXJyb3I6IHJjPSVkIFxuIiwKLQkJCQlkZXYtPm5hbWUsIHBfY3RsYmstPnJjKTsKKwkJCWRldl93YXJuKHRkZXYsICJUaGUgY29tbXVuaWNhdGlvbiBwZWVyIG9mICVzIHJlamVjdGVkIgorCQkJCSIgYSBjb25uZWN0aW9uIHJlcXVlc3RcbiIsCisJCQkJZGV2LT5uYW1lKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCXJjID0gZmluZF9saW5rKGRldiwKIAkJCXBfY29ubmVjdC0+aG9zdF9uYW1lLCBwX2Nvbm5lY3QtPldTX25hbWUpOwogCQlpZiAocmMgIT0gMCkgewogCQkJY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvbm4gUmVzcCBlcnJvcjogIgotCQkJCSJyZXEgYXBwbCBuYW1lIGRvZXMgbm90IG1hdGNoXG4iLAorCQkJZGV2X3dhcm4odGRldiwgIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMiCisJCQkJIiByZWplY3RlZCBhIGNvbm5lY3Rpb24gIgorCQkJCSJyZXF1ZXN0IGJlY2F1c2Ugb2YgYSB0eXBlIG1pc21hdGNoXG4iLAogCQkJCSBkZXYtPm5hbWUpOwogCQl9CiAJCS8qIHNob3VsZCBiZSB1bnRpbCBDT05ORUNUSU9OX0NPTkZJUk0gKi8KQEAgLTIyMTAsNyArMjIzNSw4IEBACiAJCWJyZWFrOwogCWNhc2UgQ09OTkVDVElPTl9DT05GSVJNOgogCQlwX2Nvbm5lY3QgPSAoc3RydWN0IGNvbm5jbWQgKikmKHBfY3RsYmstPmRhdGEpOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjdiBDb25uIENvbmZpcm06VmVycz0lZCxsaW5rX2lkPSVkLCIKKwkJZGV2X2luZm8odGRldiwKKwkJCSIlczogUmVjdiBDb25uIENvbmZpcm06VmVycz0lZCxsaW5rX2lkPSVkLCIKIAkJCSJDb3JyPSVkLEhvc3QgYXBwbD0lLjhzLFdTIGFwcGw9JS44c1xuIiwKIAkJCWRldi0+bmFtZSwKIAkJCXBfY3RsYmstPnZlcnNpb24sCkBAIC0yMjIxLDIxICsyMjQ3LDIxIEBACiAJCWlmIChwX2N0bGJrLT5saW5raWQgPT0gLShwcml2cHRyLT5hY3RpdmVfbGlua19JRCkpIHsKIAkJCXByaXZwdHItPmFjdGl2ZV9saW5rX0lEID0gcF9jdGxiay0+bGlua2lkOwogCQkJaWYgKHBfZW52LT5wYWNraW5nID4gUEFDS0lOR19BU0spIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQ29uZmlybWVkIE5vdyBwYWNraW5nXG4iLAotCQkJCQlkZXYtPm5hbWUpOworCQkJCWRldl9pbmZvKHRkZXYsCisJCQkJIiVzOiBDb25maXJtZWQgTm93IHBhY2tpbmdcbiIsIGRldi0+bmFtZSk7CiAJCQkJcF9lbnYtPnBhY2tpbmcgPSBET19QQUNLRUQ7CiAJCQl9CiAJCQlwX2NoID0gJnByaXZwdHItPmNoYW5uZWxbV1JJVEVdOwogCQkJd2FrZV91cCgmcF9jaC0+d2FpdCk7CiAJCX0gZWxzZSB7Ci0JCSAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogQ29ubiBjb25maXJtOiAiCi0JCQkJInVuZXhwZWN0ZWQgbGlua2lkPSVkIFxuIiwKKwkJCWRldl93YXJuKHRkZXYsICJBY3RpdmF0aW5nICVzIGZhaWxlZCBiZWNhdXNlIG9mIgorCQkJCSIgYW4gaW5jb3JyZWN0IGxpbmsgSUQ9JWRcbiIsCiAJCQkJZGV2LT5uYW1lLCBwX2N0bGJrLT5saW5raWQpOwogCQkJY2xhd19zbmRfZGlzYyhkZXYsIHBfY3RsYmspOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgRElTQ09OTkVDVDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERpc2Nvbm5lY3Q6ICIKKwkJZGV2X2luZm8odGRldiwgIiVzOiBEaXNjb25uZWN0OiAiCiAJCQkiVmVycz0lZCxsaW5rX2lkPSVkLENvcnI9JWRcbiIsCiAJCQlkZXYtPm5hbWUsIHBfY3RsYmstPnZlcnNpb24sCiAJCQlwX2N0bGJrLT5saW5raWQsIHBfY3RsYmstPmNvcnJlbGF0b3IpOwpAQCAtMjI0NywxMiArMjI3MywxMyBAQAogCQkJcHJpdnB0ci0+YWN0aXZlX2xpbmtfSUQgPSAwOwogCQlicmVhazsKIAljYXNlIENMQVdfRVJST1I6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBDTEFXIEVSUk9SIGRldGVjdGVkXG4iLAorCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyBmYWlsZWRcbiIsCiAJCQlkZXYtPm5hbWUpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPICIlczogIFVuZXhwZWN0ZWQgY29tbWFuZCBjb2RlPSVkIFxuIiwKLQkJCWRldi0+bmFtZSwgIHBfY3RsYmstPmNvbW1hbmQpOworCQlkZXZfd2Fybih0ZGV2LCAiVGhlIGNvbW11bmljYXRpb24gcGVlciBvZiAlcyBzZW50IgorCQkJIiBhbiB1bmtub3duIGNvbW1hbmQgY29kZVxuIiwKKwkJCWRldi0+bmFtZSk7CiAJCWJyZWFrOwogICAgICAgICB9CiAKQEAgLTIyOTQsMTIgKzIzMjEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmcF9zeXN2YWwtPmhvc3RfbmFtZSwgbG9jYWxfbmFtZSwgOCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnBfc3lzdmFsLT5XU19uYW1lLCByZW1vdGVfbmFtZSwgOCk7CiAJCQlpZiAocHJpdnB0ci0+cF9lbnYtPnBhY2tpbmcgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZT1ERUZfUEFDS19CVUZTSVpFOwotCSAgICAgICAgICAgICAgICAgICAgICAgIHBfc3lzdmFsLT53cml0ZV9mcmFtZV9zaXplPURFRl9QQUNLX0JVRlNJWkU7CisJCQkJcF9zeXN2YWwtPnJlYWRfZnJhbWVfc2l6ZSA9IERFRl9QQUNLX0JVRlNJWkU7CisJCQkJcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUgPSBERUZfUEFDS19CVUZTSVpFOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBob3cgYmlnIGlzIHRoZSBiaWdnZXN0IGdyb3VwIG9mIHBhY2tldHMgKi8KLQkJCQlwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplPXByaXZwdHItPnBfZW52LT5yZWFkX3NpemU7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemU9cHJpdnB0ci0+cF9lbnYtPndyaXRlX3NpemU7CisJCQkgICBwX3N5c3ZhbC0+cmVhZF9mcmFtZV9zaXplID0KKwkJCQlwcml2cHRyLT5wX2Vudi0+cmVhZF9zaXplOworCQkJICAgcF9zeXN2YWwtPndyaXRlX2ZyYW1lX3NpemUgPQorCQkJCXByaXZwdHItPnBfZW52LT53cml0ZV9zaXplOwogCQkJfQogICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZwX3N5c3ZhbC0+cmVzZXJ2ZWQsIDB4MDAsIDQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDg1LDcgKzI1MTQsNiBAQAogCXBfZGV2ID0gJnByaXZwdHItPmNoYW5uZWxbUkVBRF0uY2Rldi0+ZGV2OwogCXBfZW52ID0gcHJpdnB0ci0+cF9lbnY7CiAgICAgICAgIHBfdGhpc19jY3c9cHJpdnB0ci0+cF9yZWFkX2FjdGl2ZV9maXJzdDsKLSAgICAgICAgaT0wOwogCXdoaWxlIChwX3RoaXNfY2N3IT1OVUxMICYmIHBfdGhpc19jY3ctPmhlYWRlci5mbGFnIT1DTEFXX1BFTkRJTkcpIHsKIAkJcGFja19vZmYgPSAwOwogCQlwID0gMDsKQEAgLTI1MTEsOCArMjUzOSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbXRjX3RoaXNfZnJtPTE7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocF90aGlzX2Njdy0+aGVhZGVyLmxlbmd0aCE9CiAJCQkJcHJpdnB0ci0+cF9lbnYtPnJlYWRfc2l6ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiICVzOiBJbnZhbGlkIGZyYW1lIGRldGVjdGVkICIKLQkJCQkJImxlbmd0aCBpcyAlMDJ4XG4iICwKKwkJCQlkZXZfd2FybihwX2RldiwKKwkJCQkJIlRoZSBjb21tdW5pY2F0aW9uIHBlZXIgb2YgJXMiCisJCQkJCSIgc2VudCBhIGZhdWx0eSIKKwkJCQkJIiBmcmFtZSBvZiBsZW5ndGggJTAyeFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHBfdGhpc19jY3ctPmhlYWRlci5sZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTI1NDQsNyArMjU3NCw3IEBACiAJCQkJZ290byBOZXh0RnJhbWU7CiAJCQlwX3BhY2tkID0gcF90aGlzX2Njdy0+cF9idWZmZXIrcGFja19vZmY7CiAJCQlwX3BhY2toID0gKHN0cnVjdCBjbGF3cGggKikgcF9wYWNrZDsKLQkJCWlmICgocF9wYWNraC0+bGVuID09IDApIHx8IC8qIGFsbCBkb25lIHdpdGggdGhpcyBmcmFtZT8gKi8KKwkJCWlmICgocF9wYWNraC0+bGVuID09IDApIHx8IC8qIGRvbmUgd2l0aCB0aGlzIGZyYW1lPyAqLwogCQkJICAgIChwX3BhY2toLT5mbGFnICE9IDApKQogCQkJCWdvdG8gTmV4dEZyYW1lOwogCQkJYnl0ZXNfdG9fbW92ID0gcF9wYWNraC0+bGVuOwpAQCAtMjU5NCw5ICsyNjI0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWZfcngoc2tiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeworCQkJCWRldl9pbmZvKHBfZGV2LCAiQWxsb2NhdGluZyBhIGJ1ZmZlciBmb3IiCisJCQkJCSIgaW5jb21pbmcgZGF0YSBmYWlsZWRcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2cHRyLT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcygpIGxvdyBvbiBtZW1vcnlcbiIsCi0JCQkJZGV2LT5uYW1lLF9fZnVuY19fKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPm10Y19vZmZzZXQ9MDsKICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZwdHItPm10Y19sb2dpY2FsX2xpbms9LTE7CkBAIC0yNzIwLDggKzI3NTAsOCBAQAogICAgICAgICBpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAodm9pZCAqKSZwX2NoLT5JT19hY3RpdmUpID09IDApIHsKICAgICAgICAgICAgICAgICBwYXJtID0gKHVuc2lnbmVkIGxvbmcpIHBfY2g7CiAJCUNMQVdfREJGX1RFWFQoMiwgdHJhY2UsICJTdFdydElPIik7Ci0gICAgICAgICAgICAgICAgcmMgPSBjY3dfZGV2aWNlX3N0YXJ0IChwX2NoLT5jZGV2LCZwX2ZpcnN0X2Njdy0+d3JpdGUsIHBhcm0sCi0JCQkJICAgICAgIDB4ZmYsIDApOworCQlyYyA9IGNjd19kZXZpY2Vfc3RhcnQocF9jaC0+Y2RldiwgJnBfZmlyc3RfY2N3LT53cml0ZSwgcGFybSwKKwkJCQkgICAgICAweGZmLCAwKTsKICAgICAgICAgICAgICAgICBpZiAocmMgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2N3X2NoZWNrX3JldHVybl9jb2RlKHBfY2gtPmNkZXYsIHJjKTsKICAgICAgICAgICAgICAgICB9CkBAIC0yODE2LDIyICsyODQ2LDI2IEBACiAgKiBJbml0aWFsaXplIGV2ZXJ5dGhpbmcgb2YgdGhlIG5ldCBkZXZpY2UgZXhjZXB0IHRoZSBuYW1lIGFuZCB0aGUKICAqIGNoYW5uZWwgc3RydWN0cy4KICAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjbGF3X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGNsYXdfb3BlbiwKKwkubmRvX3N0b3AJCT0gY2xhd19yZWxlYXNlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGNsYXdfc3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGNsYXdfdHgsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGNsYXdfY2hhbmdlX210dSwKK307CisKIHN0YXRpYyB2b2lkCiBjbGF3X2luaXRfbmV0ZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQogewogCUNMQVdfREJGX1RFWFQoMiwgc2V0dXAsICJpbml0X2RldiIpOwogCUNMQVdfREJGX1RFWFRfKDIsIHNldHVwLCAiJXMiLCBkZXYtPm5hbWUpOwogCWRldi0+bXR1ID0gQ0xBV19ERUZBVUxUX01UVV9TSVpFOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gY2xhd190eDsKLQlkZXYtPm9wZW4gPSBjbGF3X29wZW47Ci0JZGV2LT5zdG9wID0gY2xhd19yZWxlYXNlOwotCWRldi0+Z2V0X3N0YXRzID0gY2xhd19zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUgPSBjbGF3X2NoYW5nZV9tdHU7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAwOwogCWRldi0+YWRkcl9sZW4gPSAwOwogCWRldi0+dHlwZSA9IEFSUEhSRF9TTElQOwogCWRldi0+dHhfcXVldWVfbGVuID0gMTMwMDsKIAlkZXYtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOworCWRldi0+bmV0ZGV2X29wcyA9ICZjbGF3X25ldGRldl9vcHM7CiAJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgImluaXRvayIpOwogCXJldHVybjsKIH0KQEAgLTI4ODAsOCArMjkxNCw4IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgY2N3X2Rldl9pZCBkZXZfaWQ7CiAKLQlwcmludGsoS0VSTl9JTkZPICJjbGF3OiBhZGQgZm9yICVzXG4iLAotCSAgICAgICBkZXZfbmFtZSgmY2dkZXYtPmNkZXZbUkVBRF0tPmRldikpOworCWRldl9pbmZvKCZjZ2Rldi0+ZGV2LCAiYWRkIGZvciAlc1xuIiwKKwkJIGRldl9uYW1lKCZjZ2Rldi0+Y2RldltSRUFEXS0+ZGV2KSk7CiAJQ0xBV19EQkZfVEVYVCgyLCBzZXR1cCwgIm5ld19kZXYiKTsKIAlwcml2cHRyID0gY2dkZXYtPmRldi5kcml2ZXJfZGF0YTsKIAljZ2Rldi0+Y2RldltSRUFEXS0+ZGV2LmRyaXZlcl9kYXRhID0gcHJpdnB0cjsKQEAgLTI4OTcsMjkgKzI5MzEsMjggQEAKIAlpZiAocmV0ID09IDApCiAJCXJldCA9IGFkZF9jaGFubmVsKGNnZGV2LT5jZGV2WzFdLDEscHJpdnB0cik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCSJhZGQgY2hhbm5lbCBmYWlsZWQgd2l0aCByZXQgPSAlZFxuIiwgcmV0KTsKKwkJZGV2X3dhcm4oJmNnZGV2LT5kZXYsICJDcmVhdGluZyBhIENMQVcgZ3JvdXAgZGV2aWNlIgorCQkJIiBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gY2N3X2RldmljZV9zZXRfb25saW5lKGNnZGV2LT5jZGV2W1JFQURdKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJImNsYXc6IGNjd19kZXZpY2Vfc2V0X29ubGluZSAlcyBSRUFEIGZhaWxlZCAiCi0JCSAgICAgICAid2l0aCByZXQgPSAlZFxuIiwgZGV2X25hbWUoJmNnZGV2LT5jZGV2W1JFQURdLT5kZXYpLAotCQkgICAgICAgcmV0KTsKKwkJZGV2X3dhcm4oJmNnZGV2LT5kZXYsCisJCQkiU2V0dGluZyB0aGUgcmVhZCBzdWJjaGFubmVsIG9ubGluZSIKKwkJCSIgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCXJldCA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShjZ2Rldi0+Y2RldltXUklURV0pOwogCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiY2xhdzogY2N3X2RldmljZV9zZXRfb25saW5lICVzIFdSSVRFIGZhaWxlZCAiCi0JCSAgICAgICAid2l0aCByZXQgPSAlZFxuIiwgZGV2X25hbWUoJmNnZGV2LT5jZGV2W1dSSVRFXS0+ZGV2KSwKLQkJICAgICAgIHJldCk7CisJCWRldl93YXJuKCZjZ2Rldi0+ZGV2LAorCQkJIlNldHRpbmcgdGhlIHdyaXRlIHN1YmNoYW5uZWwgb25saW5lICIKKwkJCSJmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAJZGV2ID0gYWxsb2NfbmV0ZGV2KDAsImNsYXclZCIsY2xhd19pbml0X25ldGRldmljZSk7CiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6YWxsb2NfbmV0ZGV2IGZhaWxlZFxuIixfX2Z1bmNfXyk7CisJCWRldl93YXJuKCZjZ2Rldi0+ZGV2LAorCQkJIkFjdGl2YXRpbmcgdGhlIENMQVcgZGV2aWNlIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIAlkZXYtPm1sX3ByaXYgPSBwcml2cHRyOwpAQCAtMjk0NywxMyArMjk4MCwxMyBAQAogCXByaXZwdHItPmNoYW5uZWxbV1JJVEVdLm5kZXYgPSBkZXY7CiAJcHJpdnB0ci0+cF9lbnYtPm5kZXYgPSBkZXY7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczpyZWFkc2l6ZT0lZCAgd3JpdGVzaXplPSVkICIKKwlkZXZfaW5mbygmY2dkZXYtPmRldiwgIiVzOnJlYWRzaXplPSVkICB3cml0ZXNpemU9JWQgIgogCQkicmVhZGJ1ZmZlcj0lZCB3cml0ZWJ1ZmZlcj0lZCByZWFkPTB4JTA0eCB3cml0ZT0weCUwNHhcbiIsCiAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBwX2Vudi0+cmVhZF9zaXplLAogCQlwX2Vudi0+d3JpdGVfc2l6ZSwgcF9lbnYtPnJlYWRfYnVmZmVycywKICAgICAgICAgICAgICAgICBwX2Vudi0+d3JpdGVfYnVmZmVycywgcF9lbnYtPmRldm5vW1JFQURdLAogCQlwX2Vudi0+ZGV2bm9bV1JJVEVdKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6aG9zdF9uYW1lOiUuOHMsIGFkYXB0ZXJfbmFtZSAiCisJZGV2X2luZm8oJmNnZGV2LT5kZXYsICIlczpob3N0X25hbWU6JS44cywgYWRhcHRlcl9uYW1lICIKIAkJIjolLjhzIGFwaV90eXBlOiAlLjhzXG4iLAogICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgcF9lbnYtPmhvc3RfbmFtZSwKIAkJcF9lbnYtPmFkYXB0ZXJfbmFtZSAsIHBfZW52LT5hcGlfdHlwZSk7CkBAIC0yOTk3LDggKzMwMzAsOCBAQAogCW5kZXYgPSBwcml2LT5jaGFubmVsW1JFQURdLm5kZXY7CiAJaWYgKG5kZXYpIHsKIAkJLyogQ2xvc2UgdGhlIGRldmljZSAqLwotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiJXM6IHNodXRpbmcgZG93biBcbiIsbmRldi0+bmFtZSk7CisJCWRldl9pbmZvKCZjZ2Rldi0+ZGV2LCAiJXM6IHNodXR0aW5nIGRvd24gXG4iLAorCQkJbmRldi0+bmFtZSk7CiAJCWlmIChuZGV2LT5mbGFncyAmIElGRl9SVU5OSU5HKQogCQkJcmV0ID0gY2xhd19yZWxlYXNlKG5kZXYpOwogCQluZGV2LT5mbGFncyAmPX5JRkZfUlVOTklORzsKQEAgLTMwMjMsOCArMzA1Niw3IEBACiAJQ0xBV19EQkZfVEVYVF8oMiwgc2V0dXAsICIlcyIsIGRldl9uYW1lKCZjZ2Rldi0+ZGV2KSk7CiAJcHJpdiA9IGNnZGV2LT5kZXYuZHJpdmVyX2RhdGE7CiAJQlVHX09OKCFwcml2KTsKLQlwcmludGsoS0VSTl9JTkZPICJjbGF3OiAlcygpIGNhbGxlZCAlcyB3aWxsIGJlIHJlbW92ZWQuXG4iLAotCQkJX19mdW5jX18sIGRldl9uYW1lKCZjZ2Rldi0+Y2RldlswXS0+ZGV2KSk7CisJZGV2X2luZm8oJmNnZGV2LT5kZXYsICIgd2lsbCBiZSByZW1vdmVkLlxuIik7CiAJaWYgKGNnZGV2LT5zdGF0ZSA9PSBDQ1dHUk9VUF9PTkxJTkUpCiAJCWNsYXdfc2h1dGRvd25fZGV2aWNlKGNnZGV2KTsKIAljbGF3X3JlbW92ZV9maWxlcygmY2dkZXYtPmRldik7CkBAIC0zMDYzLDcgKzMwOTUsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotY2xhd19obmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK2NsYXdfaG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCXN0cnVjdCBjbGF3X2VudiAqICBwX2VudjsKQEAgLTMxMDAsNyArMzEzMyw4IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1jbGF3X2FkbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK2NsYXdfYWRuYW1lX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdjsKIAlzdHJ1Y3QgY2xhd19lbnYgKiAgcF9lbnY7CkBAIC0zMTM4LDcgKzMxNzIsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotY2xhd19hcG5hbWVfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitjbGF3X2FwbmFtZV93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbGF3X3ByaXZiayAqcHJpdjsKIAlzdHJ1Y3QgY2xhd19lbnYgKiAgcF9lbnY7CkBAIC0zMTg1LDcgKzMyMjAsOCBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotY2xhd193YnVmZl93cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK2NsYXdfd2J1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgY2xhd19wcml2YmsgKnByaXY7CiAJc3RydWN0IGNsYXdfZW52ICogIHBfZW52OwpAQCAtMzIyNiw3ICszMjYyLDggQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWNsYXdfcmJ1ZmZfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitjbGF3X3JidWZmX3dyaXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGNsYXdfcHJpdmJrICpwcml2OwogCXN0cnVjdCBjbGF3X2VudiAqcF9lbnY7CkBAIC0zMjg5LDcgKzMzMjYsNyBAQAogewogCXVucmVnaXN0ZXJfY3UzMDg4X2Rpc2NpcGxpbmUoJmNsYXdfZ3JvdXBfZHJpdmVyKTsKIAljbGF3X3VucmVnaXN0ZXJfZGVidWdfZmFjaWxpdHkoKTsKLQlwcmludGsoS0VSTl9JTkZPICJjbGF3OiBEcml2ZXIgdW5sb2FkZWRcbiIpOworCXByX2luZm8oIkRyaXZlciB1bmxvYWRlZFxuIik7CiAKIH0KIApAQCAtMzMwMywxMiArMzM0MCwxMiBAQAogY2xhd19pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiY2xhdzogc3RhcnRpbmcgZHJpdmVyXG4iKTsKIAorCXByX2luZm8oIkxvYWRpbmcgJXNcbiIsIHZlcnNpb24pOwogCXJldCA9IGNsYXdfcmVnaXN0ZXJfZGVidWdfZmFjaWxpdHkoKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc6ICVzKCkgZGVidWdfcmVnaXN0ZXIgZmFpbGVkICVkXG4iLAotCQkJX19mdW5jX18scmV0KTsKKwkJcHJfZXJyKCJSZWdpc3RlcmluZyB3aXRoIHRoZSBTLzM5MCBkZWJ1ZyBmZWF0dXJlIgorCQkJIiBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiaW5pdF9tb2QiKTsKQEAgLTMzMTYsOCArMzM1Myw4IEBACiAJaWYgKHJldCkgewogCQlDTEFXX0RCRl9URVhUKDIsIHNldHVwLCAiaW5pdF9iYWQiKTsKIAkJY2xhd191bnJlZ2lzdGVyX2RlYnVnX2ZhY2lsaXR5KCk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImNsYXc7ICVzKCkgY3UzMDg4IHJlZ2lzdGVyIGZhaWxlZCAlZFxuIiwKLQkJCV9fZnVuY19fLHJldCk7CisJCXByX2VycigiUmVnaXN0ZXJpbmcgd2l0aCB0aGUgY3UzMDg4IGRldmljZSBkcml2ZXIgZmFpbGVkICIKKwkJCSAgICJ3aXRoIGVycm9yIGNvZGUgJWRcbiIsIHJldCk7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYwppbmRleCBmMjljNzA4Li40ZGVkOWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMKQEAgLTQxMCw5ICs0MTAsOCBAQAogCQlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQkJCQlnb3RvIGFnYWluOwogCX0KLQlibG9ja19sZW4gLT0gMjsKLQlpZiAoYmxvY2tfbGVuID4gMCkgewotCQkqKChfX3UxNiAqKXNrYi0+ZGF0YSkgPSBibG9ja19sZW47CisJaWYgKGJsb2NrX2xlbiA+IDIpIHsKKwkJKigoX191MTYgKilza2ItPmRhdGEpID0gYmxvY2tfbGVuIC0gMjsKIAkJY3RjbV91bnBhY2tfc2tiKGNoLCBza2IpOwogCX0KICBhZ2FpbjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCmluZGV4IDI2Nzg1NzMuLjc3ZjQwMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYwpAQCAtMTA1LDcgKzEwNSw4IEBACiAJCQlyZXR1cm47CiAJCX0KIAkJcHNrYi0+cHJvdG9jb2wgPSBudG9ocyhoZWFkZXItPnR5cGUpOwotCQlpZiAoaGVhZGVyLT5sZW5ndGggPD0gTExfSEVBREVSX0xFTkdUSCkgeworCQlpZiAoKGhlYWRlci0+bGVuZ3RoIDw9IExMX0hFQURFUl9MRU5HVEgpIHx8CisJCSAgICAobGVuIDw9IExMX0hFQURFUl9MRU5HVEgpKSB7CiAJCQlpZiAoIShjaC0+bG9nZmxhZ3MgJiBMT0dfRkxBR19JTExFR0FMU0laRSkpIHsKIAkJCQlDVENNX0RCRl9URVhUXyhFUlJPUiwgQ1RDX0RCRl9FUlJPUiwKIAkJCQkJIiVzKCVzKTogSWxsZWdhbCBwYWNrZXQgc2l6ZSAlZCglZCwlZCkiCkBAIC0xNjcsMTEgKzE2OCw5IEBACiAJCWlmIChsZW4gPiAwKSB7CiAJCQlza2JfcHVsbChwc2tiLCBoZWFkZXItPmxlbmd0aCk7CiAJCQlpZiAoc2tiX3RhaWxyb29tKHBza2IpIDwgTExfSEVBREVSX0xFTkdUSCkgewotCQkJCWlmICghKGNoLT5sb2dmbGFncyAmIExPR19GTEFHX09WRVJSVU4pKSB7Ci0JCQkJCUNUQ01fREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsCi0JCQkJCQkiT3ZlcnJ1biBpbiBjdGNtX3VucGFja19za2IiKTsKLQkJCQkJY2gtPmxvZ2ZsYWdzIHw9IExPR19GTEFHX09WRVJSVU47Ci0JCQkJfQorCQkJCUNUQ01fREJGX0RFVl9OQU1FKFRSQUNFLCBkZXYsCisJCQkJCSJPdmVycnVuIGluIGN0Y21fdW5wYWNrX3NrYiIpOworCQkJCWNoLT5sb2dmbGFncyB8PSBMT0dfRkxBR19PVkVSUlVOOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCXNrYl9wdXQocHNrYiwgTExfSEVBREVSX0xFTkdUSCk7CkBAIC05MDYsMTEgKzkwNSwxMSBAQAogCX0KIAogCWlmIChjdGNtX3Rlc3RfYW5kX3NldF9idXN5KGRldikpCi0JCXJldHVybiAtRUJVU1k7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWlmIChjdGNtX3RyYW5zbWl0X3NrYihwcml2LT5jaGFubmVsW1dSSVRFXSwgc2tiKSAhPSAwKQotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCXJldHVybiAwOwogfQogCkBAIC0xMDk5LDEyICsxMDk4LDI0IEBACiAKIHN0cnVjdCBtcGNfZ3JvdXAgKmN0Y21wY19pbml0X21wY19ncm91cChzdHJ1Y3QgY3RjbV9wcml2ICpwcml2KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjdGNtX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGN0Y21fb3BlbiwKKwkubmRvX3N0b3AJCT0gY3RjbV9jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBjdGNtX3N0YXRzLAorCS5uZG9fY2hhbmdlX210dQkgICAJPSBjdGNtX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CQk9IGN0Y21fdHgsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGN0Y21fbXBjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGN0Y21fb3BlbiwKKwkubmRvX3N0b3AJCT0gY3RjbV9jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBjdGNtX3N0YXRzLAorCS5uZG9fY2hhbmdlX210dQkgICAJPSBjdGNtX2NoYW5nZV9tdHUsCisJLm5kb19zdGFydF94bWl0CQk9IGN0Y21wY190eCwKK307CisKIHZvaWQgc3RhdGljIGN0Y21fZGV2X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JZGV2LT5vcGVuID0gY3RjbV9vcGVuOwotCWRldi0+c3RvcCA9IGN0Y21fY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSBjdGNtX3N0YXRzOwotCWRldi0+Y2hhbmdlX210dSA9IGN0Y21fY2hhbmdlX210dTsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfU0xJUDsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDEwMDsKIAlkZXYtPmZsYWdzID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOwpAQCAtMTE1NywxMiArMTE2OCwxMiBAQAogCQlkZXYtPm10dSA9IE1QQ19CVUZTSVpFX0RFRkFVTFQgLQogCQkJCVRIX0hFQURFUl9MRU5HVEggLSBQRFVfSEVBREVSX0xFTkdUSDsKIAotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGN0Y21wY190eDsKKwkJZGV2LT5uZXRkZXZfb3BzID0gJmN0Y21fbXBjX25ldGRldl9vcHM7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gVEhfSEVBREVSX0xFTkdUSCArIFBEVV9IRUFERVJfTEVOR1RIOwogCQlwcml2LT5idWZmZXJfc2l6ZSA9IE1QQ19CVUZTSVpFX0RFRkFVTFQ7CiAJfSBlbHNlIHsKIAkJZGV2LT5tdHUgPSBDVENNX0JVRlNJWkVfREVGQVVMVCAtIExMX0hFQURFUl9MRU5HVEggLSAyOwotCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGN0Y21fdHg7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZjdGNtX25ldGRldl9vcHM7CiAJCWRldi0+aGFyZF9oZWFkZXJfbGVuID0gTExfSEVBREVSX0xFTkdUSCArIDI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbXBjLmMKaW5kZXggM2RiNWY4NC4uNzgxZTE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21wYy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tcGMuYwpAQCAtMzkzLDcgKzM5Myw2IEBACiAJCX0gZWxzZSB7CiAJCQkvKiB0aGVyZSBhcmUgcHJvYmxlbXMuLi5iYWlsIG91dAkgICAgKi8KIAkJCS8qIHRoZXJlIG1heSBiZSBhIHN0YXRlIG1pc21hdGNoIHNvIHJlc3RhcnQgKi8KLQkJCWdycC0+cG9ydF9wZXJzaXN0ID0gMTsKIAkJCWZzbV9ldmVudChncnAtPmZzbSwgTVBDR19FVkVOVF9JTk9QLCBkZXYpOwogCQkJZ3JwLT5hbGxvY2NoYW5fY2FsbGJhY2tfcmV0cmllcyA9IDA7CiAJCX0KQEAgLTY5OSwxMSArNjk4LDkgQEAKIAlyZXR1cm47CiAKIGRvbmU6Ci0JaWYgKHJjICE9IDApIHsKLQkJZ3JwLT5pbl9zd2VlcCA9IDA7Ci0JCWN0Y21fY2xlYXJfYnVzeV9kbyhkZXYpOwotCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKLQl9CisJZ3JwLT5pbl9zd2VlcCA9IDA7CisJY3RjbV9jbGVhcl9idXN5X2RvKGRldik7CisJZnNtX2V2ZW50KGdycC0+ZnNtLCBNUENHX0VWRU5UX0lOT1AsIGRldik7CiAKIAlyZXR1cm47CiB9CkBAIC0xMTE4LDcgKzExMTUsNiBAQAogCiAJCWlmICh1bmxpa2VseShmc21fZ2V0c3RhdGUoZ3JwLT5mc20pICE9IE1QQ0dfU1RBVEVfUkVBRFkpKQogCQkJCQlnb3RvIGRvbmU7Ci0JCXBkdV9sYXN0X3NlZW4gPSAwOwogCQl3aGlsZSAoKHBza2ItPmxlbiA+IDApICYmICFwZHVfbGFzdF9zZWVuKSB7CiAJCQljdXJyX3BkdSA9IChzdHJ1Y3QgcGR1ICopcHNrYi0+ZGF0YTsKIApAQCAtMTM5Niw4ICsxMzkyLDcgQEAKIAkJCQlDVENNX0ZVTlRBSUwsIGRldi0+bmFtZSk7CiAJaWYgKChncnAtPnNhdmVkX3N0YXRlICE9IE1QQ0dfU1RBVEVfUkVTRVQpIHx8CiAJCS8qIGRlYWxsb2NfY2hhbm5lbCBoYXMgYmVlbiBjYWxsZWQgKi8KLQkJCSgoZ3JwLT5zYXZlZF9zdGF0ZSA9PSBNUENHX1NUQVRFX1JFU0VUKSAmJgotCQkJCQkJKGdycC0+cG9ydF9wZXJzaXN0ID09IDApKSkKKwkJKGdycC0+cG9ydF9wZXJzaXN0ID09IDApKQogCQlmc21fZGVsdGltZXIoJnByaXYtPnJlc3RhcnRfdGltZXIpOwogCiAJd2NoID0gcHJpdi0+Y2hhbm5lbFtXUklURV07CkBAIC0xOTE3LDEwICsxOTEyLDggQEAKIAogCWlmIChwcml2KQogCQlncnAgPSBwcml2LT5tcGNnOwotCWlmIChncnAgPT0gTlVMTCkgewotCQlmc21fZXZlbnQoZ3JwLT5mc20sIE1QQ0dfRVZFTlRfSU5PUCwgZGV2KTsKKwlpZiAoZ3JwID09IE5VTEwpCiAJCXJldHVybjsKLQl9CiAKIAlmb3IgKGRpcmVjdGlvbiA9IFJFQUQ7IGRpcmVjdGlvbiA8PSBXUklURTsgZGlyZWN0aW9uKyspCXsKIAkJc3RydWN0IGNoYW5uZWwgKmNoID0gcHJpdi0+Y2hhbm5lbFtkaXJlY3Rpb25dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKaW5kZXggNDljM2JmYS4uYTQ1YmMyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pZ21wLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogCkBAIC0xMjU5LDcgKzEyNjAsNiBAQAogCXN0cnVjdCBpbl9kZXZpY2UgKmluNF9kZXY7CiAKIAljYXJkID0gKHN0cnVjdCBsY3NfY2FyZCAqKSBkYXRhOwotCWRhZW1vbml6ZSgicmVnaXBtIik7CiAKIAlpZiAoIWxjc19kb19ydW5fdGhyZWFkKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKIAkJcmV0dXJuIDA7CkBAIC0xNTYyLDcgKzE1NjIsNyBAQAogCWlmIChza2IgPT0gTlVMTCkgewogCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIDA7CiAJfQogCWlmIChjYXJkLT5zdGF0ZSAhPSBERVZfU1RBVEVfVVApIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTU4Nyw3ICsxNTg3LDcgQEAKIAkJY2FyZC0+dHhfYnVmZmVyID0gbGNzX2dldF9idWZmZXIoJmNhcmQtPndyaXRlKTsKIAkJaWYgKGNhcmQtPnR4X2J1ZmZlciA9PSBOVUxMKSB7CiAJCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQlyYyA9IC1FQlVTWTsKKwkJCXJjID0gTkVUREVWX1RYX0JVU1k7CiAJCQlnb3RvIG91dDsKIAkJfQogCQljYXJkLT50eF9idWZmZXItPmNhbGxiYWNrID0gbGNzX3R4YnVmZmVyX2NiOwpAQCAtMTc1MywxMSArMTc1MywxMCBAQAogCXN0cnVjdCBsY3NfY2FyZCAqY2FyZCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGNzX2NhcmQsIGtlcm5lbF90aHJlYWRfc3RhcnRlcik7CiAJTENTX0RCRl9URVhUKDUsIHRyYWNlLCAia3JudGhyZCIpOwogCWlmIChsY3NfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIExDU19SRUNPVkVSWV9USFJFQUQpKQotCQlrZXJuZWxfdGhyZWFkKGxjc19yZWNvdmVyeSwgKHZvaWQgKikgY2FyZCwgU0lHQ0hMRCk7CisJCWt0aHJlYWRfcnVuKGxjc19yZWNvdmVyeSwgY2FyZCwgImxjc19yZWNvdmVyIik7CiAjaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVAogCWlmIChsY3NfZG9fc3RhcnRfdGhyZWFkKGNhcmQsIExDU19TRVRfTUNfVEhSRUFEKSkKLQkJa2VybmVsX3RocmVhZChsY3NfcmVnaXN0ZXJfbWNfYWRkcmVzc2VzLAotCQkJCSh2b2lkICopIGNhcmQsIFNJR0NITEQpOworCQlrdGhyZWFkX3J1bihsY3NfcmVnaXN0ZXJfbWNfYWRkcmVzc2VzLCBjYXJkLCAicmVnaXBtIik7CiAjZW5kaWYKIH0KIApAQCAtMjEwMSw2ICsyMTAwLDIwIEBACiAvKioKICAqIGxjc19uZXdfZGV2aWNlIHdpbGwgYmUgY2FsbGVkIGJ5IHNldHRpbmcgdGhlIGdyb3VwIGRldmljZSBvbmxpbmUuCiAgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbGNzX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxjc19vcGVuX2RldmljZSwKKwkubmRvX3N0b3AJCT0gbGNzX3N0b3BfZGV2aWNlLAorCS5uZG9fZ2V0X3N0YXRzCQk9IGxjc19nZXRzdGF0cywKKwkubmRvX3N0YXJ0X3htaXQJCT0gbGNzX3N0YXJ0X3htaXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxjc19tY19uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSBsY3Nfb3Blbl9kZXZpY2UsCisJLm5kb19zdG9wCQk9IGxjc19zdG9wX2RldmljZSwKKwkubmRvX2dldF9zdGF0cwkJPSBsY3NfZ2V0c3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGxjc19zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gbGNzX3NldF9tdWx0aWNhc3RfbGlzdCwKK307CiAKIHN0YXRpYyBpbnQKIGxjc19uZXdfZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmNjd2dkZXYpCkBAIC0yMTY4LDE0ICsyMTgxLDExIEBACiAJCWdvdG8gb3V0OwogCWNhcmQtPmRldiA9IGRldjsKIAljYXJkLT5kZXYtPm1sX3ByaXYgPSBjYXJkOwotCWNhcmQtPmRldi0+b3BlbiA9IGxjc19vcGVuX2RldmljZTsKLQljYXJkLT5kZXYtPnN0b3AgPSBsY3Nfc3RvcF9kZXZpY2U7Ci0JY2FyZC0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsY3Nfc3RhcnRfeG1pdDsKLQljYXJkLT5kZXYtPmdldF9zdGF0cyA9IGxjc19nZXRzdGF0czsKKwljYXJkLT5kZXYtPm5ldGRldl9vcHMgPSAmbGNzX25ldGRldl9vcHM7CiAJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsIGNhcmQtPm1hYywgTENTX01BQ19MRU5HVEgpOwogI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAlpZiAoIWxjc19jaGVja19tdWx0aWNhc3Rfc3VwcG9ydChjYXJkKSkKLQkJY2FyZC0+ZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBsY3Nfc2V0X211bHRpY2FzdF9saXN0OworCQljYXJkLT5kZXYtPm5ldGRldl9vcHMgPSAmbGNzX21jX25ldGRldl9vcHM7CiAjZW5kaWYKIG5ldGRldl9vdXQ6CiAJbGNzX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwweGZmZmZmZmZmKTsKQEAgLTIyNTgsNyArMjI2OCw2IEBACiAgICAgICAgIGludCByYzsKIAogCWNhcmQgPSAoc3RydWN0IGxjc19jYXJkICopIHB0cjsKLQlkYWVtb25pemUoImxjc19yZWNvdmVyIik7CiAKIAlMQ1NfREJGX1RFWFQoNCwgdHJhY2UsICJyZWNvdmVyMSIpOwogCWlmICghbGNzX2RvX3J1bl90aHJlYWQoY2FyZCwgTENTX1JFQ09WRVJZX1RIUkVBRCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCmluZGV4IDkzMGUyZmMuLmJlNzE2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCkBAIC0xMzEyLDcgKzEzMTIsNyBAQAogCiAJaWYgKG5ldGl1Y3ZfdGVzdF9hbmRfc2V0X2J1c3koZGV2KSkgewogCQlJVUNWX0RCRl9URVhUKGRhdGEsIDIsICJFQlVTWSBmcm9tIG5ldGl1Y3ZfdHhcbiIpOwotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCXJjID0gbmV0aXVjdl90cmFuc21pdF9za2IocHJpdnB0ci0+Y29ubiwgc2tiKSAhPSAwOwpAQCAtMTg3NiwyMCArMTg3NiwyNCBAQAogLyoqCiAgKiBJbml0aWFsaXplIGEgbmV0IGRldmljZS4gKENhbGxlZCBmcm9tIGtlcm5lbCBpbiBhbGxvY19uZXRkZXYoKSkKICAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBuZXRpdWN2X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG5ldGl1Y3Zfb3BlbiwKKwkubmRvX3N0b3AJCT0gbmV0aXVjdl9jbG9zZSwKKwkubmRvX2dldF9zdGF0cwkJPSBuZXRpdWN2X3N0YXRzLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBuZXRpdWN2X3R4LAorCS5uZG9fY2hhbmdlX210dQkgICAJPSBuZXRpdWN2X2NoYW5nZV9tdHUsCit9OworCiBzdGF0aWMgdm9pZCBuZXRpdWN2X3NldHVwX25ldGRldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+bXR1CSAgICAgICAgID0gTkVUSVVDVl9NVFVfREVGQVVMVDsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCAgICAgPSBuZXRpdWN2X3R4OwotCWRldi0+b3BlbgkgICAgICAgICA9IG5ldGl1Y3Zfb3BlbjsKLQlkZXYtPnN0b3AJICAgICAgICAgPSBuZXRpdWN2X2Nsb3NlOwotCWRldi0+Z2V0X3N0YXRzCSAgICAgICAgID0gbmV0aXVjdl9zdGF0czsKLQlkZXYtPmNoYW5nZV9tdHUgICAgICAgICAgPSBuZXRpdWN2X2NoYW5nZV9tdHU7CiAJZGV2LT5kZXN0cnVjdG9yICAgICAgICAgID0gbmV0aXVjdl9mcmVlX25ldGRldmljZTsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbiAgICAgPSBORVRJVUNWX0hEUkxFTjsKIAlkZXYtPmFkZHJfbGVuICAgICAgICAgICAgPSAwOwogCWRldi0+dHlwZSAgICAgICAgICAgICAgICA9IEFSUEhSRF9TTElQOwogCWRldi0+dHhfcXVldWVfbGVuICAgICAgICA9IE5FVElVQ1ZfUVVFVUVMRU5fREVGQVVMVDsKIAlkZXYtPmZsYWdzCSAgICAgICAgID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQOworCWRldi0+bmV0ZGV2X29wcwkJID0gJm5ldGl1Y3ZfbmV0ZGV2X29wczsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAppbmRleCBlMGM0NTU3Li40NDdlMWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKQEAgLTEzNCw2ICsxMzQsNyBAQAogCXVuc2lnbmVkIGludCBzZ19za2JzX3J4OwogCXVuc2lnbmVkIGludCBzZ19mcmFnc19yeDsKIAl1bnNpZ25lZCBpbnQgc2dfYWxsb2NfcGFnZV9yeDsKKwl1bnNpZ25lZCBpbnQgdHhfY3N1bTsKIH07CiAKIC8qIFJvdXRpbmcgc3R1ZmYgKi8KQEAgLTQwMyw3ICs0MDQsNiBAQAogLyogcG9zc2libGUgdHlwZXMgb2YgcWV0aCBsYXJnZV9zZW5kIHN1cHBvcnQgKi8KIGVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIHsKIAlRRVRIX0xBUkdFX1NFTkRfTk8sCi0JUUVUSF9MQVJHRV9TRU5EX0VERFAsCiAJUUVUSF9MQVJHRV9TRU5EX1RTTywKIH07CiAKQEAgLTgzOCwxMSArODM4LDkgQEAKIGludCBxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBza19idWZmICosIGludCwgaW50KTsKIGludCBxZXRoX2dldF9lbGVtZW50c19ubyhzdHJ1Y3QgcWV0aF9jYXJkICosIHZvaWQgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50KTsKIGludCBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3Qoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICosCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgcWV0aF9oZHIgKiwgaW50LAotCQkJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICosIGludCwgaW50KTsKKwkJCXN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLCBpbnQsIGludCwgaW50KTsKIGludCBxZXRoX2RvX3NlbmRfcGFja2V0KHN0cnVjdCBxZXRoX2NhcmQgKiwgc3RydWN0IHFldGhfcWRpb19vdXRfcSAqLAotCQkgICAgc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IHFldGhfaGRyICosCi0JCSAgICBpbnQsIHN0cnVjdCBxZXRoX2VkZHBfY29udGV4dCAqKTsKKwkJICAgIHN0cnVjdCBza19idWZmICosIHN0cnVjdCBxZXRoX2hkciAqLCBpbnQpOwogaW50IHFldGhfY29yZV9nZXRfc3RhdHNfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKik7CiB2b2lkIHFldGhfY29yZV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqLAogCQkJCXN0cnVjdCBldGh0b29sX3N0YXRzICosIHU2NCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCBkMWI1YmViLi5jODI3ZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+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+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guYyBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmIwNDE3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTM4ICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMKLSAqICAgUy8zOTAgbWFjaGluZSBjaGVjayBoYW5kbGVyCi0gKgotICogICAgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDAwLDIwMDgKLSAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgKGFkbHVuZ0BkZS5pYm0uY29tKQotICoJCSBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCi0gKgkJIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgotI2luY2x1ZGUgPGFzbS9ldHIuaD4KLSNpbmNsdWRlIDxhc20vbG93Y29yZS5oPgotI2luY2x1ZGUgPGFzbS9jaW8uaD4KLSNpbmNsdWRlIDxhc20vY3B1Lmg+Ci0jaW5jbHVkZSAiczM5MG1hY2guaCIKLQotc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgbV9zZW07Ci0KLXN0YXRpYyBOT1JFVF9UWVBFIHZvaWQKLXMzOTBfaGFuZGxlX2RhbWFnZShjaGFyICptc2cpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXNtcF9zZW5kX3N0b3AoKTsKLSNlbmRpZgotCWRpc2FibGVkX3dhaXQoKHVuc2lnbmVkIGxvbmcpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Ci0JZm9yKDs7KTsKLX0KLQotc3RhdGljIGNyd19oYW5kbGVyX3QgY3J3X2hhbmRsZXJzW05SX1JTQ1NdOwotCi0vKioKLSAqIHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoKSAtIHJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCi0gKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCi0gKiBAaGFuZGxlcjogaGFuZGxlciB0byBiZSByZWdpc3RlcmVkCi0gKgotICogUmV0dXJucyAlMCBvbiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG90aGVyd2lzZS4KLSAqLwotaW50IHMzOTBfcmVnaXN0ZXJfY3J3X2hhbmRsZXIoaW50IHJzYywgY3J3X2hhbmRsZXJfdCBoYW5kbGVyKQotewotCWlmICgocnNjIDwgMCkgfHwgKHJzYyA+PSBOUl9SU0NTKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFjbXB4Y2hnKCZjcndfaGFuZGxlcnNbcnNjXSwgTlVMTCwgaGFuZGxlcikpCi0JCXJldHVybiAwOwotCXJldHVybiAtRUJVU1k7Ci19Ci0KLS8qKgotICogczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKCkgLSB1bnJlZ2lzdGVyIGEgY2hhbm5lbCByZXBvcnQgd29yZCBoYW5kbGVyCi0gKiBAcnNjOiByZXBvcnRpbmcgc291cmNlIGNvZGUgdG8gaGFuZGxlCi0gKi8KLXZvaWQgczM5MF91bnJlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MpCi17Ci0JaWYgKChyc2MgPCAwKSB8fCAocnNjID49IE5SX1JTQ1MpKQotCQlyZXR1cm47Ci0JeGNoZygmY3J3X2hhbmRsZXJzW3JzY10sIE5VTEwpOwotCXN5bmNocm9uaXplX3NjaGVkKCk7Ci19Ci0KLS8qCi0gKiBSZXRyaWV2ZSBDUldzIGFuZCBjYWxsIGZ1bmN0aW9uIHRvIGhhbmRsZSBldmVudC4KLSAqLwotc3RhdGljIGludCBzMzkwX2NvbGxlY3RfY3J3X2luZm8odm9pZCAqcGFyYW0pCi17Ci0Jc3RydWN0IGNydyBjcndbMl07Ci0JaW50IGNjb2RlOwotCXN0cnVjdCBzZW1hcGhvcmUgKnNlbTsKLQl1bnNpZ25lZCBpbnQgY2hhaW47Ci0JaW50IGlnbm9yZTsKLQotCXNlbSA9IChzdHJ1Y3Qgc2VtYXBob3JlICopcGFyYW07Ci1yZXBlYXQ6Ci0JaWdub3JlID0gZG93bl9pbnRlcnJ1cHRpYmxlKHNlbSk7Ci0JY2hhaW4gPSAwOwotCXdoaWxlICgxKSB7Ci0JCWlmICh1bmxpa2VseShjaGFpbiA+IDEpKSB7Ci0JCQlzdHJ1Y3QgY3J3IHRtcF9jcnc7Ci0KLQkJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IENvZGUgZG9lcyBub3Qgc3VwcG9ydCBtb3JlICIKLQkJCSAgICAgICAidGhhbiB0d28gY2hhaW5lZCBjcndzOyBwbGVhc2UgcmVwb3J0IHRvICIKLQkJCSAgICAgICAibGludXgzOTBAZGUuaWJtLmNvbSFcbiIsIF9fZnVuY19fKTsKLQkJCWNjb2RlID0gc3RjcncoJnRtcF9jcncpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyIlczogY3J3IHJlcG9ydHMgc2xjdD0lZCwgb2Zsdz0lZCwgIgotCQkJICAgICAgICJjaG49JWQsIHJzYz0lWCwgYW5jPSVkLCBlcmM9JVgsIHJzaWQ9JVhcbiIsCi0JCQkgICAgICAgX19mdW5jX18sIHRtcF9jcncuc2xjdCwgdG1wX2Nydy5vZmx3LAotCQkJICAgICAgIHRtcF9jcncuY2huLCB0bXBfY3J3LnJzYywgdG1wX2Nydy5hbmMsCi0JCQkgICAgICAgdG1wX2Nydy5lcmMsIHRtcF9jcncucnNpZCk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIiVzOiBUaGlzIHdhcyBjcncgbnVtYmVyICV4IGluIHRoZSAiCi0JCQkgICAgICAgImNoYWluXG4iLCBfX2Z1bmNfXywgY2hhaW4pOwotCQkJaWYgKGNjb2RlICE9IDApCi0JCQkJYnJlYWs7Ci0JCQljaGFpbiA9IHRtcF9jcncuY2huID8gY2hhaW4gKyAxIDogMDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWNjb2RlID0gc3RjcncoJmNyd1tjaGFpbl0pOwotCQlpZiAoY2NvZGUgIT0gMCkKLQkJCWJyZWFrOwotCQlwcmludGsoS0VSTl9ERUJVRyAiY3J3X2luZm8gOiBDUlcgcmVwb3J0cyBzbGN0PSVkLCBvZmx3PSVkLCAiCi0JCSAgICAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAotCQkgICAgICAgY3J3W2NoYWluXS5zbGN0LCBjcndbY2hhaW5dLm9mbHcsIGNyd1tjaGFpbl0uY2huLAotCQkgICAgICAgY3J3W2NoYWluXS5yc2MsIGNyd1tjaGFpbl0uYW5jLCBjcndbY2hhaW5dLmVyYywKLQkJICAgICAgIGNyd1tjaGFpbl0ucnNpZCk7Ci0JCS8qIENoZWNrIGZvciBvdmVyZmxvd3MuICovCi0JCWlmIChjcndbY2hhaW5dLm9mbHcpIHsKLQkJCWludCBpOwotCi0JCQlwcl9kZWJ1ZygiJXM6IGNydyBvdmVyZmxvdyBkZXRlY3RlZCFcbiIsIF9fZnVuY19fKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBOUl9SU0NTOyBpKyspIHsKLQkJCQlpZiAoY3J3X2hhbmRsZXJzW2ldKQotCQkJCQljcndfaGFuZGxlcnNbaV0oTlVMTCwgTlVMTCwgMSk7Ci0JCQl9Ci0JCQljaGFpbiA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY3J3WzBdLmNobiAmJiAhY2hhaW4pIHsKLQkJCWNoYWluKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY3J3X2hhbmRsZXJzW2Nyd1tjaGFpbl0ucnNjXSkKLQkJCWNyd19oYW5kbGVyc1tjcndbY2hhaW5dLnJzY10oJmNyd1swXSwKLQkJCQkJCSAgICAgY2hhaW4gPyAmY3J3WzFdIDogTlVMTCwKLQkJCQkJCSAgICAgMCk7Ci0JCS8qIGNoYWluIGlzIGFsd2F5cyAwIG9yIDEgaGVyZS4gKi8KLQkJY2hhaW4gPSBjcndbY2hhaW5dLmNobiA/IGNoYWluICsgMSA6IDA7Ci0JfQotCWdvdG8gcmVwZWF0OwotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgbWNja19zdHJ1Y3QgewotCWludCBraWxsX3Rhc2s7Ci0JaW50IGNoYW5uZWxfcmVwb3J0OwotCWludCB3YXJuaW5nOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBtY2NrX2NvZGU7Ci19OwotCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IG1jY2tfc3RydWN0LCBjcHVfbWNjayk7Ci0KLS8qCi0gKiBNYWluIG1hY2hpbmUgY2hlY2sgaGFuZGxlciBmdW5jdGlvbi4gV2lsbCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQKLSAqIG9yIGRpc2FibGVkIGFuZCBtYWNoaW5lIGNoZWNrcyBlbmFibGVkIG9yIGRpc2FibGVkLgotICovCi12b2lkCi1zMzkwX2hhbmRsZV9tY2NrKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbWNja19zdHJ1Y3QgbWNjazsKLQotCS8qCi0JICogRGlzYWJsZSBtYWNoaW5lIGNoZWNrcyBhbmQgZ2V0IHRoZSBjdXJyZW50IHN0YXRlIG9mIGFjY3VtdWxhdGVkCi0JICogbWFjaGluZSBjaGVja3MuIEFmdGVyd2FyZHMgZGVsZXRlIHRoZSBvbGQgc3RhdGUgYW5kIGVuYWJsZSBtYWNoaW5lCi0JICogY2hlY2tzIGFnYWluLgotCSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlsb2NhbF9tY2NrX2Rpc2FibGUoKTsKLQltY2NrID0gX19nZXRfY3B1X3ZhcihjcHVfbWNjayk7Ci0JbWVtc2V0KCZfX2dldF9jcHVfdmFyKGNwdV9tY2NrKSwgMCwgc2l6ZW9mKHN0cnVjdCBtY2NrX3N0cnVjdCkpOwotCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9NQ0NLX1BFTkRJTkcpOwotCWxvY2FsX21jY2tfZW5hYmxlKCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JaWYgKG1jY2suY2hhbm5lbF9yZXBvcnQpCi0JCXVwKCZtX3NlbSk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDSENIS19XQVJOSU5HCi0vKgotICogVGhlIHdhcm5pbmcgbWF5IHJlbWFpbiBmb3IgYSBwcm9sb25nZWQgcGVyaW9kIG9uIHRoZSBiYXJlIGlyb24uCi0gKiAoYWN0dWFsbHkgdGlsbCB0aGUgbWFjaGluZSBpcyBwb3dlcmVkIG9mZiwgb3IgdW50aWwgdGhlIHByb2JsZW0gaXMgZ29uZSkKLSAqIFNvIHdlIGp1c3Qgc3RvcCBsaXN0ZW5pbmcgZm9yIHRoZSBXQVJOSU5HIE1DSCBhbmQgcHJldmVudCBjb250aW51b3VzbHkKLSAqIGJlaW5nIGludGVycnVwdGVkLiAgT25lIGNhdmVhdCBpcyBob3dldmVyLCB0aGF0IHdlIG11c3QgZG8gdGhpcyBwZXIKLSAqIHByb2Nlc3NvciBhbmQgY2Fubm90IHVzZSB0aGUgc21wIHZlcnNpb24gb2YgY3RsX2NsZWFyX2JpdCgpLgotICogT24gVk0gd2Ugb25seSBnZXQgb25lIGludGVycnVwdCBwZXIgdmlydGFsbHkgcHJlc2VudGVkIG1hY2hpbmVjaGVjay4KLSAqIFRob3VnaCBvbmUgc3VmZmljZXMsIHdlIG1heSBnZXQgb25lIGludGVycnVwdCBwZXIgKHZpcnR1YWwpIHByb2Nlc3Nvci4KLSAqLwotCWlmIChtY2NrLndhcm5pbmcpIHsJLyogV0FSTklORyBwZW5kaW5nID8gKi8KLQkJc3RhdGljIGludCBtY2hjaGtfd25nX3Bvc3RlZCA9IDA7Ci0JCS8qCi0JCSAqIFVzZSBzaW5nbGUgbWFjaGluZSBjbGVhciwgYXMgd2UgY2Fubm90IGhhbmRsZSBzbXAgcmlnaHQgbm93Ci0JCSAqLwotCQlfX2N0bF9jbGVhcl9iaXQoMTQsIDI0KTsJLyogRGlzYWJsZSBXQVJOSU5HIE1DSCAqLwotCQlpZiAoeGNoZygmbWNoY2hrX3duZ19wb3N0ZWQsIDEpID09IDApCi0JCQlraWxsX2NhZF9waWQoU0lHUFdSLCAxKTsKLQl9Ci0jZW5kaWYKLQotCWlmIChtY2NrLmtpbGxfdGFzaykgewotCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJtY2NrOiBUZXJtaW5hdGluZyB0YXNrIGJlY2F1c2Ugb2YgbWFjaGluZSAiCi0JCSAgICAgICAibWFsZnVuY3Rpb24gKGNvZGUgMHglMDE2bGx4KS5cbiIsIG1jY2subWNja19jb2RlKTsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIm1jY2s6IHRhc2s6ICVzLCBwaWQ6ICVkLlxuIiwKLQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7Ci0JCWRvX2V4aXQoU0lHU0VHVik7Ci0JfQotfQotRVhQT1JUX1NZTUJPTF9HUEwoczM5MF9oYW5kbGVfbWNjayk7Ci0KLS8qCi0gKiByZXR1cm5zIDAgaWYgYWxsIHJlZ2lzdGVycyBjb3VsZCBiZSB2YWxpZGF0ZWQKLSAqIHJldHVybnMgMSBvdGhlcndpc2UKLSAqLwotc3RhdGljIGludAotczM5MF9yZXZhbGlkYXRlX3JlZ2lzdGVycyhzdHJ1Y3QgbWNpICptY2kpCi17Ci0JaW50IGtpbGxfdGFzazsKLQl1NjQgdG1wY2xvY2s7Ci0JdTY0IHplcm87Ci0Jdm9pZCAqZnB0X3NhdmVfYXJlYSwgKmZwdF9jcmVnX3NhdmVfYXJlYTsKLQotCWtpbGxfdGFzayA9IDA7Ci0JemVybyA9IDA7Ci0JLyogR2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyAqLwotCWlmICghbWNpLT5ncikKLQkJLyoKLQkJICogR2VuZXJhbCBwdXJwb3NlIHJlZ2lzdGVycyBjb3VsZG4ndCBiZSByZXN0b3JlZCBhbmQgaGF2ZQotCQkgKiB1bmtub3duIGNvbnRlbnRzLiBQcm9jZXNzIG5lZWRzIHRvIGJlIHRlcm1pbmF0ZWQuCi0JCSAqLwotCQlraWxsX3Rhc2sgPSAxOwotCi0JLyogUmV2YWxpZGF0ZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KLQlpZiAoIW1jaS0+ZnApCi0JCS8qCi0JCSAqIEZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyBjYW4ndCBiZSByZXN0b3JlZCBhbmQKLQkJICogdGhlcmVmb3JlIHRoZSBwcm9jZXNzIG5lZWRzIHRvIGJlIHRlcm1pbmF0ZWQuCi0JCSAqLwotCQlraWxsX3Rhc2sgPSAxOwotCi0jaWZuZGVmIENPTkZJR182NEJJVAotCWFzbSB2b2xhdGlsZSgKLQkJIglsZAkwLDAoJTApXG4iCi0JCSIJbGQJMiw4KCUwKVxuIgotCQkiCWxkCTQsMTYoJTApXG4iCi0JCSIJbGQJNiwyNCglMCkiCi0JCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUuZmxvYXRpbmdfcHRfc2F2ZV9hcmVhKSk7Ci0jZW5kaWYKLQotCWlmIChNQUNISU5FX0hBU19JRUVFKSB7Ci0jaWZkZWYgQ09ORklHXzY0QklUCi0JCWZwdF9zYXZlX2FyZWEgPSAmUzM5MF9sb3djb3JlLmZsb2F0aW5nX3B0X3NhdmVfYXJlYTsKLQkJZnB0X2NyZWdfc2F2ZV9hcmVhID0gJlMzOTBfbG93Y29yZS5mcHRfY3JlZ19zYXZlX2FyZWE7Ci0jZWxzZQotCQlmcHRfc2F2ZV9hcmVhID0gKHZvaWQgKikgUzM5MF9sb3djb3JlLmV4dGVuZGVkX3NhdmVfYXJlYV9hZGRyOwotCQlmcHRfY3JlZ19zYXZlX2FyZWEgPSBmcHRfc2F2ZV9hcmVhKzEyODsKLSNlbmRpZgotCQkvKiBGbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyICovCi0JCWlmICghbWNpLT5mYykgewotCQkJLyoKLQkJCSAqIEZsb2F0aW5nIHBvaW50IGNvbnRyb2wgcmVnaXN0ZXIgY2FuJ3QgYmUgcmVzdG9yZWQuCi0JCQkgKiBUYXNrIHdpbGwgYmUgdGVybWluYXRlZC4KLQkJCSAqLwotCQkJYXNtIHZvbGF0aWxlKCJsZnBjIDAoJTApIiA6IDogImEiICgmemVybyksICJtIiAoemVybykpOwotCQkJa2lsbF90YXNrID0gMTsKLQotCQl9IGVsc2UKLQkJCWFzbSB2b2xhdGlsZSgibGZwYyAwKCUwKSIgOiA6ICJhIiAoZnB0X2NyZWdfc2F2ZV9hcmVhKSk7Ci0KLQkJYXNtIHZvbGF0aWxlKAotCQkJIglsZAkwLDAoJTApXG4iCi0JCQkiCWxkCTEsOCglMClcbiIKLQkJCSIJbGQJMiwxNiglMClcbiIKLQkJCSIJbGQJMywyNCglMClcbiIKLQkJCSIJbGQJNCwzMiglMClcbiIKLQkJCSIJbGQJNSw0MCglMClcbiIKLQkJCSIJbGQJNiw0OCglMClcbiIKLQkJCSIJbGQJNyw1NiglMClcbiIKLQkJCSIJbGQJOCw2NCglMClcbiIKLQkJCSIJbGQJOSw3MiglMClcbiIKLQkJCSIJbGQJMTAsODAoJTApXG4iCi0JCQkiCWxkCTExLDg4KCUwKVxuIgotCQkJIglsZAkxMiw5NiglMClcbiIKLQkJCSIJbGQJMTMsMTA0KCUwKVxuIgotCQkJIglsZAkxNCwxMTIoJTApXG4iCi0JCQkiCWxkCTE1LDEyMCglMClcbiIKLQkJCTogOiAiYSIgKGZwdF9zYXZlX2FyZWEpKTsKLQl9Ci0KLQkvKiBSZXZhbGlkYXRlIGFjY2VzcyByZWdpc3RlcnMgKi8KLQlhc20gdm9sYXRpbGUoCi0JCSIJbGFtCTAsMTUsMCglMCkiCi0JCTogOiAiYSIgKCZTMzkwX2xvd2NvcmUuYWNjZXNzX3JlZ3Nfc2F2ZV9hcmVhKSk7Ci0JaWYgKCFtY2ktPmFyKQotCQkvKgotCQkgKiBBY2Nlc3MgcmVnaXN0ZXJzIGhhdmUgdW5rbm93biBjb250ZW50cy4KLQkJICogVGVybWluYXRpbmcgdGFzay4KLQkJICovCi0JCWtpbGxfdGFzayA9IDE7Ci0KLQkvKiBSZXZhbGlkYXRlIGNvbnRyb2wgcmVnaXN0ZXJzICovCi0JaWYgKCFtY2ktPmNyKQotCQkvKgotCQkgKiBDb250cm9sIHJlZ2lzdGVycyBoYXZlIHVua25vd24gY29udGVudHMuCi0JCSAqIENhbid0IHJlY292ZXIgYW5kIHRoZXJlZm9yZSBzdG9wcGluZyBtYWNoaW5lLgotCQkgKi8KLQkJczM5MF9oYW5kbGVfZGFtYWdlKCJpbnZhbGlkIGNvbnRyb2wgcmVnaXN0ZXJzLiIpOwotCWVsc2UKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkJYXNtIHZvbGF0aWxlKAotCQkJIglsY3RsZwkwLDE1LDAoJTApIgotCQkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5jcmVnc19zYXZlX2FyZWEpKTsKLSNlbHNlCi0JCWFzbSB2b2xhdGlsZSgKLQkJCSIJbGN0bAkwLDE1LDAoJTApIgotCQkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5jcmVnc19zYXZlX2FyZWEpKTsKLSNlbmRpZgotCi0JLyoKLQkgKiBXZSBkb24ndCBldmVuIHRyeSB0byByZXZhbGlkYXRlIHRoZSBUT0QgcmVnaXN0ZXIsIHNpbmNlIHdlIHNpbXBseQotCSAqIGNhbid0IHdyaXRlIHNvbWV0aGluZyBzZW5zaWJsZSBpbnRvIHRoYXQgcmVnaXN0ZXIuCi0JICovCi0KLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkvKgotCSAqIFNlZSBpZiB3ZSBjYW4gcmV2YWxpZGF0ZSB0aGUgVE9EIHByb2dyYW1tYWJsZSByZWdpc3RlciB3aXRoIGl0cwotCSAqIG9sZCBjb250ZW50cyAoc2hvdWxkIGJlIHplcm8pIG90aGVyd2lzZSBzZXQgaXQgdG8gemVyby4KLQkgKi8KLQlpZiAoIW1jaS0+cHIpCi0JCWFzbSB2b2xhdGlsZSgKLQkJCSIJc3IJMCwwXG4iCi0JCQkiCXNja3BmIgotCQkJOiA6IDogIjAiLCAiY2MiKTsKLQllbHNlCi0JCWFzbSB2b2xhdGlsZSgKLQkJCSIJbAkwLDAoJTApXG4iCi0JCQkiCXNja3BmIgotCQkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS50b2RfcHJvZ3JlZ19zYXZlX2FyZWEpCi0JCQk6ICIwIiwgImNjIik7Ci0jZW5kaWYKLQotCS8qIFJldmFsaWRhdGUgY2xvY2sgY29tcGFyYXRvciByZWdpc3RlciAqLwotCWFzbSB2b2xhdGlsZSgKLQkJIglzdGNrCTAoJTEpXG4iCi0JCSIJc2NrYwkwKCUxKSIKLQkJOiAiPW0iICh0bXBjbG9jaykgOiAiYSIgKCYodG1wY2xvY2spKSA6ICJjYyIsICJtZW1vcnkiKTsKLQotCS8qIENoZWNrIGlmIG9sZCBQU1cgaXMgdmFsaWQgKi8KLQlpZiAoIW1jaS0+d3ApCi0JCS8qCi0JCSAqIENhbid0IHRlbGwgaWYgd2UgY29tZSBmcm9tIHVzZXIgb3Iga2VybmVsIG1vZGUKLQkJICogLT4gc3RvcHBpbmcgbWFjaGluZS4KLQkJICovCi0JCXMzOTBfaGFuZGxlX2RhbWFnZSgib2xkIHBzdyBpbnZhbGlkLiIpOwotCi0JaWYgKCFtY2ktPm1zIHx8ICFtY2ktPnBtIHx8ICFtY2ktPmlhKQotCQlraWxsX3Rhc2sgPSAxOwotCi0JcmV0dXJuIGtpbGxfdGFzazsKLX0KLQotI2RlZmluZSBNQVhfSVBEX0NPVU5UCTI5Ci0jZGVmaW5lIE1BWF9JUERfVElNRQkoNSAqIDYwICogVVNFQ19QRVJfU0VDKSAvKiA1IG1pbnV0ZXMgKi8KLQotLyoKLSAqIG1hY2hpbmUgY2hlY2sgaGFuZGxlci4KLSAqLwotdm9pZAotczM5MF9kb19tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBkX2xvY2spOwotCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbGFzdF9pcGQ7Ci0Jc3RhdGljIGludCBpcGRfY291bnQ7Ci0JdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKLQlzdHJ1Y3QgbWNpICptY2k7Ci0Jc3RydWN0IG1jY2tfc3RydWN0ICptY2NrOwotCWludCB1bW9kZTsKLQotCWxvY2tkZXBfb2ZmKCk7Ci0KLQlzMzkwX2lkbGVfY2hlY2soKTsKLQotCW1jaSA9IChzdHJ1Y3QgbWNpICopICZTMzkwX2xvd2NvcmUubWNja19pbnRlcnJ1cHRpb25fY29kZTsKLQltY2NrID0gJl9fZ2V0X2NwdV92YXIoY3B1X21jY2spOwotCXVtb2RlID0gdXNlcl9tb2RlKHJlZ3MpOwotCi0JaWYgKG1jaS0+c2QpCi0JCS8qIFN5c3RlbSBkYW1hZ2UgLT4gc3RvcHBpbmcgbWFjaGluZSAqLwotCQlzMzkwX2hhbmRsZV9kYW1hZ2UoInJlY2VpdmVkIHN5c3RlbSBkYW1hZ2UgbWFjaGluZSBjaGVjay4iKTsKLQotCWlmIChtY2ktPnBkKSB7Ci0JCWlmIChtY2ktPmIpIHsKLQkJCS8qIFByb2Nlc3NpbmcgYmFja3VwIC0+IHZlcmlmeSBpZiB3ZSBjYW4gc3Vydml2ZSB0aGlzICovCi0JCQl1NjQgel9tY2ljLCBvX21jaWMsIHRfbWNpYzsKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkJCXpfbWNpYyA9ICgxVUxMPDw2MyB8IDFVTEw8PDU5IHwgMVVMTDw8MjkpOwotCQkJb19tY2ljID0gKDFVTEw8PDQzIHwgMVVMTDw8NDIgfCAxVUxMPDw0MSB8IDFVTEw8PDQwIHwKLQkJCQkgIDFVTEw8PDM2IHwgMVVMTDw8MzUgfCAxVUxMPDwzNCB8IDFVTEw8PDMyIHwKLQkJCQkgIDFVTEw8PDMwIHwgMVVMTDw8MjEgfCAxVUxMPDwyMCB8IDFVTEw8PDE3IHwKLQkJCQkgIDFVTEw8PDE2KTsKLSNlbHNlCi0JCQl6X21jaWMgPSAoMVVMTDw8NjMgfCAxVUxMPDw1OSB8IDFVTEw8PDU3IHwgMVVMTDw8NTAgfAotCQkJCSAgMVVMTDw8MjkpOwotCQkJb19tY2ljID0gKDFVTEw8PDQzIHwgMVVMTDw8NDIgfCAxVUxMPDw0MSB8IDFVTEw8PDQwIHwKLQkJCQkgIDFVTEw8PDM2IHwgMVVMTDw8MzUgfCAxVUxMPDwzNCB8IDFVTEw8PDMyIHwKLQkJCQkgIDFVTEw8PDMwIHwgMVVMTDw8MjAgfCAxVUxMPDwxNyB8IDFVTEw8PDE2KTsKLSNlbmRpZgotCQkJdF9tY2ljID0gKih1NjQgKiltY2k7Ci0KLQkJCWlmICgoKHRfbWNpYyAmIHpfbWNpYykgIT0gMCkgfHwKLQkJCSAgICAoKHRfbWNpYyAmIG9fbWNpYykgIT0gb19tY2ljKSkgewotCQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgicHJvY2Vzc2luZyBiYWNrdXAgbWFjaGluZSAiCi0JCQkJCQkgICAiY2hlY2sgd2l0aCBkYW1hZ2UuIik7Ci0JCQl9Ci0KLQkJCS8qCi0JCQkgKiBOdWxsaWZ5aW5nIGV4aWdlbnQgY29uZGl0aW9uLCB0aGVyZWZvcmUgd2UgbWlnaHQKLQkJCSAqIHJldHJ5IHRoaXMgaW5zdHJ1Y3Rpb24uCi0JCQkgKi8KLQotCQkJc3Bpbl9sb2NrKCZpcGRfbG9jayk7Ci0KLQkJCXRtcCA9IGdldF9jbG9jaygpOwotCi0JCQlpZiAoKCh0bXAgLSBsYXN0X2lwZCkgPj4gMTIpIDwgTUFYX0lQRF9USU1FKQotCQkJCWlwZF9jb3VudCsrOwotCQkJZWxzZQotCQkJCWlwZF9jb3VudCA9IDE7Ci0KLQkJCWxhc3RfaXBkID0gdG1wOwotCi0JCQlpZiAoaXBkX2NvdW50ID09IE1BWF9JUERfQ09VTlQpCi0JCQkJczM5MF9oYW5kbGVfZGFtYWdlKCJ0b28gbWFueSBpcGQgcmV0cmllcy4iKTsKLQotCQkJc3Bpbl91bmxvY2soJmlwZF9sb2NrKTsKLQkJfQotCQllbHNlIHsKLQkJCS8qIFByb2Nlc3NpbmcgZGFtYWdlIC0+IHN0b3BwaW5nIG1hY2hpbmUgKi8KLQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgaW5zdHJ1Y3Rpb24gcHJvY2Vzc2luZyAiCi0JCQkJCSAgICJkYW1hZ2UgbWFjaGluZSBjaGVjay4iKTsKLQkJfQotCX0KLQlpZiAoczM5MF9yZXZhbGlkYXRlX3JlZ2lzdGVycyhtY2kpKSB7Ci0JCWlmICh1bW9kZSkgewotCQkJLyoKLQkJCSAqIENvdWxkbid0IHJlc3RvcmUgYWxsIHJlZ2lzdGVyIGNvbnRlbnRzIHdoaWxlIGluCi0JCQkgKiB1c2VyIG1vZGUgLT4gbWFyayB0YXNrIGZvciB0ZXJtaW5hdGlvbi4KLQkJCSAqLwotCQkJbWNjay0+a2lsbF90YXNrID0gMTsKLQkJCW1jY2stPm1jY2tfY29kZSA9ICoodW5zaWduZWQgbG9uZyBsb25nICopIG1jaTsKLQkJCXNldF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKLQkJfQotCQllbHNlCi0JCQkvKgotCQkJICogQ291bGRuJ3QgcmVzdG9yZSBhbGwgcmVnaXN0ZXIgY29udGVudHMgd2hpbGUgaW4KLQkJCSAqIGtlcm5lbCBtb2RlIC0+IHN0b3BwaW5nIG1hY2hpbmUuCi0JCQkgKi8KLQkJCXMzOTBfaGFuZGxlX2RhbWFnZSgidW5hYmxlIHRvIHJldmFsaWRhdGUgcmVnaXN0ZXJzLiIpOwotCX0KLQotCWlmIChtY2ktPmNkKSB7Ci0JCS8qIFRpbWluZyBmYWNpbGl0eSBkYW1hZ2UgKi8KLQkJczM5MF9oYW5kbGVfZGFtYWdlKCJUT0QgY2xvY2sgZGFtYWdlZCIpOwotCX0KLQotCWlmIChtY2ktPmVkICYmIG1jaS0+ZWMpIHsKLQkJLyogRXh0ZXJuYWwgZGFtYWdlICovCi0JCWlmIChTMzkwX2xvd2NvcmUuZXh0ZXJuYWxfZGFtYWdlX2NvZGUgJiAoMVUgPDwgRURfRVRSX1NZTkMpKQotCQkJZXRyX3N5bmNfY2hlY2soKTsKLQkJaWYgKFMzOTBfbG93Y29yZS5leHRlcm5hbF9kYW1hZ2VfY29kZSAmICgxVSA8PCBFRF9FVFJfU1dJVENIKSkKLQkJCWV0cl9zd2l0Y2hfdG9fbG9jYWwoKTsKLQkJaWYgKFMzOTBfbG93Y29yZS5leHRlcm5hbF9kYW1hZ2VfY29kZSAmICgxVSA8PCBFRF9TVFBfU1lOQykpCi0JCQlzdHBfc3luY19jaGVjaygpOwotCQlpZiAoUzM5MF9sb3djb3JlLmV4dGVybmFsX2RhbWFnZV9jb2RlICYgKDFVIDw8IEVEX1NUUF9JU0xBTkQpKQotCQkJc3RwX2lzbGFuZF9jaGVjaygpOwotCX0KLQotCWlmIChtY2ktPnNlKQotCQkvKiBTdG9yYWdlIGVycm9yIHVuY29ycmVjdGVkICovCi0JCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBlcnJvciB1bmNvcnJlY3RlZCAiCi0JCQkJICAgIm1hY2hpbmUgY2hlY2suIik7Ci0KLQlpZiAobWNpLT5rZSkKLQkJLyogU3RvcmFnZSBrZXktZXJyb3IgdW5jb3JyZWN0ZWQgKi8KLQkJczM5MF9oYW5kbGVfZGFtYWdlKCJyZWNlaXZlZCBzdG9yYWdlIGtleS1lcnJvciB1bmNvcnJlY3RlZCAiCi0JCQkJICAgIm1hY2hpbmUgY2hlY2suIik7Ci0KLQlpZiAobWNpLT5kcyAmJiBtY2ktPmZhKQotCQkvKiBTdG9yYWdlIGRlZ3JhZGF0aW9uICovCi0JCXMzOTBfaGFuZGxlX2RhbWFnZSgicmVjZWl2ZWQgc3RvcmFnZSBkZWdyYWRhdGlvbiBtYWNoaW5lICIKLQkJCQkgICAiY2hlY2suIik7Ci0KLQlpZiAobWNpLT5jcCkgewotCQkvKiBDaGFubmVsIHJlcG9ydCB3b3JkIHBlbmRpbmcgKi8KLQkJbWNjay0+Y2hhbm5lbF9yZXBvcnQgPSAxOwotCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DQ0tfUEVORElORyk7Ci0JfQotCi0JaWYgKG1jaS0+dykgewotCQkvKiBXYXJuaW5nIHBlbmRpbmcgKi8KLQkJbWNjay0+d2FybmluZyA9IDE7Ci0JCXNldF90aHJlYWRfZmxhZyhUSUZfTUNDS19QRU5ESU5HKTsKLQl9Ci0JbG9ja2RlcF9vbigpOwotfQotCi0vKgotICogczM5MF9pbml0X21hY2hpbmVfY2hlY2sKLSAqCi0gKiBpbml0aWFsaXplIG1hY2hpbmUgY2hlY2sgaGFuZGxpbmcKLSAqLwotc3RhdGljIGludAotbWFjaGluZV9jaGVja19pbml0KHZvaWQpCi17Ci0JaW5pdF9NVVRFWF9MT0NLRUQoJm1fc2VtKTsKLQljdGxfc2V0X2JpdCgxNCwgMjUpOwkvKiBlbmFibGUgZXh0ZXJuYWwgZGFtYWdlIE1DSCAqLwotCWN0bF9zZXRfYml0KDE0LCAyNyk7ICAgIC8qIGVuYWJsZSBzeXN0ZW0gcmVjb3ZlcnkgTUNIICovCi0jaWZkZWYgQ09ORklHX01BQ0hDSEtfV0FSTklORwotCWN0bF9zZXRfYml0KDE0LCAyNCk7CS8qIGVuYWJsZSB3YXJuaW5nIE1DSCAqLwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBtYWNoaW5lIGNoZWNrIGhhbmRsZXIgcmVhbGx5IGVhcmx5IHRvIGJlIGFibGUgdG8KLSAqIGNhdGNoIGFsbCBtYWNoaW5lIGNoZWNrcyB0aGF0IGhhcHBlbiBkdXJpbmcgYm9vdAotICovCi1hcmNoX2luaXRjYWxsKG1hY2hpbmVfY2hlY2tfaW5pdCk7Ci0KLS8qCi0gKiBNYWNoaW5lIGNoZWNrcyBmb3IgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIG11c3QgYmUgZW5hYmxlZAotICogYWZ0ZXIgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIGlzIGluaXRpYWxpemVkCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0Ci1tYWNoaW5lX2NoZWNrX2Nyd19pbml0ICh2b2lkKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQotCXRhc2sgPSBrdGhyZWFkX3J1bihzMzkwX2NvbGxlY3RfY3J3X2luZm8sICZtX3NlbSwgImttY2hlY2siKTsKLQlpZiAoSVNfRVJSKHRhc2spKQotCQlyZXR1cm4gUFRSX0VSUih0YXNrKTsKLQljdGxfc2V0X2JpdCgxNCwgMjgpOwkvKiBlbmFibGUgY2hhbm5lbCByZXBvcnQgTUNIICovCi0JcmV0dXJuIDA7Ci19Ci0KLWRldmljZV9pbml0Y2FsbCAobWFjaGluZV9jaGVja19jcndfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guaCBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzlmOGI2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiAgZHJpdmVycy9zMzkwL3MzOTBtYWNoLmgKLSAqICAgUy8zOTAgZGF0YSBkZWZpbml0aW9ucyBmb3IgbWFjaGluZSBjaGVjayBwcm9jZXNzaW5nCi0gKgotICogIFMzOTAgdmVyc2lvbgotICogICAgQ29weXJpZ2h0IChDKSAyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KLSAqICAgIEF1dGhvcihzKTogSW5nbyBBZGx1bmcgKGFkbHVuZ0BkZS5pYm0uY29tKQotICovCi0KLSNpZm5kZWYgX19zMzkwbWFjaF9oCi0jZGVmaW5lIF9fczM5MG1hY2hfaAotCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLXN0cnVjdCBtY2kgewotCV9fdTMyICAgc2QgICAgICAgICAgICAgIDogIDE7IC8qIDAwIHN5c3RlbSBkYW1hZ2UgKi8KLQlfX3UzMiAgIHBkICAgICAgICAgICAgICA6ICAxOyAvKiAwMSBpbnN0cnVjdGlvbi1wcm9jZXNzaW5nIGRhbWFnZSAqLwotCV9fdTMyICAgc3IgICAgICAgICAgICAgIDogIDE7IC8qIDAyIHN5c3RlbSByZWNvdmVyeSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF8xIDogIDE7IC8qIDAzICovCi0JX191MzIgICBjZCAgICAgICAgICAgICAgOiAgMTsgLyogMDQgdGltaW5nLWZhY2lsaXR5IGRhbWFnZSAqLwotCV9fdTMyICAgZWQgICAgICAgICAgICAgIDogIDE7IC8qIDA1IGV4dGVybmFsIGRhbWFnZSAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF8yIDogIDE7IC8qIDA2ICovCi0JX191MzIgICBkZyAgICAgICAgICAgICAgOiAgMTsgLyogMDcgZGVncmFkYXRpb24gKi8KLQlfX3UzMiAgIHcgICAgICAgICAgICAgICA6ICAxOyAvKiAwOCB3YXJuaW5nIHBlbmRpbmcgKi8KLQlfX3UzMiAgIGNwICAgICAgICAgICAgICA6ICAxOyAvKiAwOSBjaGFubmVsLXJlcG9ydCBwZW5kaW5nICovCi0JX191MzIgICBzcCAgICAgICAgICAgICAgOiAgMTsgLyogMTAgc2VydmljZS1wcm9jZXNzb3IgZGFtYWdlICovCi0JX191MzIgICBjayAgICAgICAgICAgICAgOiAgMTsgLyogMTEgY2hhbm5lbC1zdWJzeXN0ZW0gZGFtYWdlICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzMgOiAgMjsgLyogMTItMTMgKi8KLQlfX3UzMiAgIGIgICAgICAgICAgICAgICA6ICAxOyAvKiAxNCBiYWNrZWQgdXAgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNCA6ICAxOyAvKiAxNSAqLwotCV9fdTMyICAgc2UgICAgICAgICAgICAgIDogIDE7IC8qIDE2IHN0b3JhZ2UgZXJyb3IgdW5jb3JyZWN0ZWQgKi8KLQlfX3UzMiAgIHNjICAgICAgICAgICAgICA6ICAxOyAvKiAxNyBzdG9yYWdlIGVycm9yIGNvcnJlY3RlZCAqLwotCV9fdTMyICAga2UgICAgICAgICAgICAgIDogIDE7IC8qIDE4IHN0b3JhZ2Uta2V5IGVycm9yIHVuY29ycmVjdGVkICovCi0JX191MzIgICBkcyAgICAgICAgICAgICAgOiAgMTsgLyogMTkgc3RvcmFnZSBkZWdyYWRhdGlvbiAqLwotCV9fdTMyICAgd3AgICAgICAgICAgICAgIDogIDE7IC8qIDIwIHBzdyBtd3AgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIG1zICAgICAgICAgICAgICA6ICAxOyAvKiAyMSBwc3cgbWFzayBhbmQga2V5IHZhbGlkaXR5ICovCi0JX191MzIgICBwbSAgICAgICAgICAgICAgOiAgMTsgLyogMjIgcHN3IHByb2dyYW0gbWFzayBhbmQgY2MgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGlhICAgICAgICAgICAgICA6ICAxOyAvKiAyMyBwc3cgaW5zdHJ1Y3Rpb24gYWRkcmVzcyB2YWxpZGl0eSAqLwotCV9fdTMyICAgZmEgICAgICAgICAgICAgIDogIDE7IC8qIDI0IGZhaWxpbmcgc3RvcmFnZSBhZGRyZXNzIHZhbGlkaXR5ICovCi0JX191MzIgICB0b19iZV9kZWZpbmVkXzUgOiAgMTsgLyogMjUgKi8KLQlfX3UzMiAgIGVjICAgICAgICAgICAgICA6ICAxOyAvKiAyNiBleHRlcm5hbCBkYW1hZ2UgY29kZSB2YWxpZGl0eSAqLwotCV9fdTMyICAgZnAgICAgICAgICAgICAgIDogIDE7IC8qIDI3IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBnciAgICAgICAgICAgICAgOiAgMTsgLyogMjggZ2VuZXJhbCByZWdpc3RlciB2YWxpZGl0eSAqLwotCV9fdTMyICAgY3IgICAgICAgICAgICAgIDogIDE7IC8qIDI5IGNvbnRyb2wgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNiA6ICAxOyAvKiAzMCAqLwotCV9fdTMyICAgc3QgICAgICAgICAgICAgIDogIDE7IC8qIDMxIHN0b3JhZ2UgbG9naWNhbCB2YWxpZGl0eSAqLwotCV9fdTMyICAgaWUgICAgICAgICAgICAgIDogIDE7IC8qIDMyIGluZGlyZWN0IHN0b3JhZ2UgZXJyb3IgKi8KLQlfX3UzMiAgIGFyICAgICAgICAgICAgICA6ICAxOyAvKiAzMyBhY2Nlc3MgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGRhICAgICAgICAgICAgICA6ICAxOyAvKiAzNCBkZWxheWVkIGFjY2VzcyBleGNlcHRpb24gKi8KLQlfX3UzMiAgIHRvX2JlX2RlZmluZWRfNyA6ICA3OyAvKiAzNS00MSAqLwotCV9fdTMyICAgcHIgICAgICAgICAgICAgIDogIDE7IC8qIDQyIHRvZCBwcm9ncmFtbWFibGUgcmVnaXN0ZXIgdmFsaWRpdHkgKi8KLQlfX3UzMiAgIGZjICAgICAgICAgICAgICA6ICAxOyAvKiA0MyBmcCBjb250cm9sIHJlZ2lzdGVyIHZhbGlkaXR5ICovCi0JX191MzIgICBhcCAgICAgICAgICAgICAgOiAgMTsgLyogNDQgYW5jaWxsYXJ5IHJlcG9ydCAqLwotCV9fdTMyICAgdG9fYmVfZGVmaW5lZF84IDogIDE7IC8qIDQ1ICovCi0JX191MzIgICBjdCAgICAgICAgICAgICAgOiAgMTsgLyogNDYgY3B1IHRpbWVyIHZhbGlkaXR5ICovCi0JX191MzIgICBjYyAgICAgICAgICAgICAgOiAgMTsgLyogNDcgY2xvY2sgY29tcGFyYXRvciB2YWxpZGl0eSAqLwotCV9fdTMyCXRvX2JlX2RlZmluZWRfOSA6IDE2OyAvKiA0Ny02MyAqLwotfTsKLQotLyoKLSAqIENoYW5uZWwgUmVwb3J0IFdvcmQKLSAqLwotc3RydWN0IGNydyB7Ci0JX191MzIgcmVzMSAgICA6ICAxOyAgIC8qIHJlc2VydmVkIHplcm8gKi8KLQlfX3UzMiBzbGN0ICAgIDogIDE7ICAgLyogc29saWNpdGVkICovCi0JX191MzIgb2ZsdyAgICA6ICAxOyAgIC8qIG92ZXJmbG93ICovCi0JX191MzIgY2huICAgICA6ICAxOyAgIC8qIGNoYWluZWQgKi8KLQlfX3UzMiByc2MgICAgIDogIDQ7ICAgLyogcmVwb3J0aW5nIHNvdXJjZSBjb2RlICovCi0JX191MzIgYW5jICAgICA6ICAxOyAgIC8qIGFuY2lsbGFyeSByZXBvcnQgKi8KLQlfX3UzMiByZXMyICAgIDogIDE7ICAgLyogcmVzZXJ2ZWQgemVybyAqLwotCV9fdTMyIGVyYyAgICAgOiAgNjsgICAvKiBlcnJvci1yZWNvdmVyeSBjb2RlICovCi0JX191MzIgcnNpZCAgICA6IDE2OyAgIC8qIHJlcG9ydGluZy1zb3VyY2UgSUQgKi8KLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi10eXBlZGVmIHZvaWQgKCpjcndfaGFuZGxlcl90KShzdHJ1Y3QgY3J3ICosIHN0cnVjdCBjcncgKiwgaW50KTsKLQotZXh0ZXJuIGludCBzMzkwX3JlZ2lzdGVyX2Nyd19oYW5kbGVyKGludCByc2MsIGNyd19oYW5kbGVyX3QgaGFuZGxlcik7Ci1leHRlcm4gdm9pZCBzMzkwX3VucmVnaXN0ZXJfY3J3X2hhbmRsZXIoaW50IHJzYyk7Ci0KLSNkZWZpbmUgTlJfUlNDUyAxNgotCi0jZGVmaW5lIENSV19SU0NfTU9OSVRPUiAgMHgyICAvKiBtb25pdG9yaW5nIGZhY2lsaXR5ICovCi0jZGVmaW5lIENSV19SU0NfU0NIICAgICAgMHgzICAvKiBzdWJjaGFubmVsICovCi0jZGVmaW5lIENSV19SU0NfQ1BBVEggICAgMHg0ICAvKiBjaGFubmVsIHBhdGggKi8KLSNkZWZpbmUgQ1JXX1JTQ19DT05GSUcgICAweDkgIC8qIGNvbmZpZ3VyYXRpb24tYWxlcnQgZmFjaWxpdHkgKi8KLSNkZWZpbmUgQ1JXX1JTQ19DU1MgICAgICAweEIgIC8qIGNoYW5uZWwgc3Vic3lzdGVtICovCi0KLSNkZWZpbmUgQ1JXX0VSQ19FVkVOVCAgICAweDAwIC8qIGV2ZW50IGluZm9ybWF0aW9uIHBlbmRpbmcgKi8KLSNkZWZpbmUgQ1JXX0VSQ19BVkFJTCAgICAweDAxIC8qIGF2YWlsYWJsZSAqLwotI2RlZmluZSBDUldfRVJDX0lOSVQgICAgIDB4MDIgLyogaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19URVJST1IgICAweDAzIC8qIHRlbXBvcmFyeSBlcnJvciAqLwotI2RlZmluZSBDUldfRVJDX0lQQVJNICAgIDB4MDQgLyogaW5zdGFsbGVkIHBhcm0gaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19URVJNICAgICAweDA1IC8qIHRlcm1pbmFsICovCi0jZGVmaW5lIENSV19FUkNfUEVSUk4gICAgMHgwNiAvKiBwZXJtLiBlcnJvciwgZmFjLiBub3QgaW5pdCAqLwotI2RlZmluZSBDUldfRVJDX1BFUlJJICAgIDB4MDcgLyogcGVybS4gZXJyb3IsIGZhY2lsaXR5IGluaXQgKi8KLSNkZWZpbmUgQ1JXX0VSQ19QTU9EICAgICAweDA4IC8qIGluc3RhbGxlZCBwYXJhbWV0ZXJzIG1vZGlmaWVkICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IHN0Y3J3KHN0cnVjdCBjcncgKnBjcncgKQotewotCWludCBjY29kZTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkic3RjcncgMCglMilcblx0IgotCQkiaXBtICUwXG5cdCIKLQkJInNybCAlMCwyOFxuXHQiCi0JCTogIj1kIiAoY2NvZGUpLCAiPW0iICgqcGNydykKLQkJOiAiYSIgKHBjcncpCi0JCTogImNjIiApOwotCXJldHVybiBjY29kZTsKLX0KLQotI2RlZmluZSBFRF9FVFJfU1lOQwkxMgkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN5bmMgY2hlY2sgKi8KLSNkZWZpbmUgRURfRVRSX1NXSVRDSAkxMwkvKiBFeHRlcm5hbCBkYW1hZ2UgRVRSIHN3aXRjaCB0byBsb2NhbCAqLwotCi0jZGVmaW5lIEVEX1NUUF9TWU5DCTcJLyogRXh0ZXJuYWwgZGFtYWdlIFNUUCBzeW5jIGNoZWNrICovCi0jZGVmaW5lIEVEX1NUUF9JU0xBTkQJNgkvKiBFeHRlcm5hbCBkYW1hZ2UgU1RQIGlzbGFuZCBjaGVjayAqLwotCi1zdHJ1Y3QgcHRfcmVnczsKLQotdm9pZCBzMzkwX2hhbmRsZV9tY2NrKHZvaWQpOwotdm9pZCBzMzkwX2RvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotI2VuZGlmIC8qIF9fczM5MG1hY2ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zeXNpbmZvLmMgYi9kcml2ZXJzL3MzOTAvc3lzaW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWVhOTA3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9zeXNpbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjkgKzAsMCBAQAotLyoKLSAqICBkcml2ZXJzL3MzOTAvc3lzaW5mby5jCi0gKgotICogIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwMSwgMjAwOAotICogIEF1dGhvcihzKTogVWxyaWNoIFdlaWdhbmQgKFVscmljaC5XZWlnYW5kQGRlLmlibS5jb20pCi0gKgkgICAgICAgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KLSNpbmNsdWRlIDxhc20vc3lzaW5mby5oPgotI2luY2x1ZGUgPGFzbS9jcGNtZC5oPgotCi0vKiBTaWdoLCBtYXRoLWVtdS4gRG9uJ3QgYXNrLiAqLwotI2luY2x1ZGUgPGFzbS9zZnAtdXRpbC5oPgotI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KLSNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KLQotc3RhdGljIGlubGluZSBpbnQgc3RzaV8wKHZvaWQpCi17Ci0JaW50IHJjID0gc3RzaSAoTlVMTCwgMCwgMCwgMCk7Ci0JcmV0dXJuIHJjID09IC1FTk9TWVMgPyByYyA6ICgoKHVuc2lnbmVkIGludCkgcmMpID4+IDI4KTsKLX0KLQotc3RhdGljIGludCBzdHNpXzFfMV8xKHN0cnVjdCBzeXNpbmZvXzFfMV8xICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQotewotCWlmIChzdHNpKGluZm8sIDEsIDEsIDEpID09IC1FTk9TWVMpCi0JCXJldHVybiBsZW47Ci0KLQlFQkNBU0MoaW5mby0+bWFudWZhY3R1cmVyLCBzaXplb2YoaW5mby0+bWFudWZhY3R1cmVyKSk7Ci0JRUJDQVNDKGluZm8tPnR5cGUsIHNpemVvZihpbmZvLT50eXBlKSk7Ci0JRUJDQVNDKGluZm8tPm1vZGVsLCBzaXplb2YoaW5mby0+bW9kZWwpKTsKLQlFQkNBU0MoaW5mby0+c2VxdWVuY2UsIHNpemVvZihpbmZvLT5zZXF1ZW5jZSkpOwotCUVCQ0FTQyhpbmZvLT5wbGFudCwgc2l6ZW9mKGluZm8tPnBsYW50KSk7Ci0JRUJDQVNDKGluZm8tPm1vZGVsX2NhcGFjaXR5LCBzaXplb2YoaW5mby0+bW9kZWxfY2FwYWNpdHkpKTsKLQlFQkNBU0MoaW5mby0+bW9kZWxfcGVybV9jYXAsIHNpemVvZihpbmZvLT5tb2RlbF9wZXJtX2NhcCkpOwotCUVCQ0FTQyhpbmZvLT5tb2RlbF90ZW1wX2NhcCwgc2l6ZW9mKGluZm8tPm1vZGVsX3RlbXBfY2FwKSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk1hbnVmYWN0dXJlcjogICAgICAgICAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPm1hbnVmYWN0dXJlcik7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlR5cGU6ICAgICAgICAgICAgICAgICAlLTQuNHNcbiIsCi0JCSAgICAgICBpbmZvLT50eXBlKTsKLQlpZiAoaW5mby0+bW9kZWxbMF0gIT0gJ1wwJykKLQkJLyoKLQkJICogU2lnaDogdGhlIG1vZGVsIGZpZWxkIGhhcyBiZWVuIHJlbmFtZWQgd2l0aCBTeXN0ZW0gejkKLQkJICogdG8gbW9kZWxfY2FwYWNpdHkgYW5kIGEgbmV3IG1vZGVsIGZpZWxkIGhhcyBiZWVuIGFkZGVkCi0JCSAqIGFmdGVyIHRoZSBwbGFudCBmaWVsZC4gVG8gYXZvaWQgY29uZnVzaW5nIG9sZGVyIHByb2dyYW1zCi0JCSAqIHRoZSAiTW9kZWw6IiBwcmludHMgIm1vZGVsX2NhcGFjaXR5IG1vZGVsIiBvciBqdXN0Ci0JCSAqICJtb2RlbF9jYXBhY2l0eSIgaWYgdGhlIG1vZGVsIHN0cmluZyBpcyBlbXB0eSAuCi0JCSAqLwotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLAotCQkJICAgICAgICJNb2RlbDogICAgICAgICAgICAgICAgJS0xNi4xNnMgJS0xNi4xNnNcbiIsCi0JCQkgICAgICAgaW5mby0+bW9kZWxfY2FwYWNpdHksIGluZm8tPm1vZGVsKTsKLQllbHNlCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJNb2RlbDogICAgICAgICAgICAgICAgJS0xNi4xNnNcbiIsCi0JCQkgICAgICAgaW5mby0+bW9kZWxfY2FwYWNpdHkpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZXF1ZW5jZSBDb2RlOiAgICAgICAgJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50OiAgICAgICAgICAgICAgICAlLTQuNHNcbiIsCi0JCSAgICAgICBpbmZvLT5wbGFudCk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk1vZGVsIENhcGFjaXR5OiAgICAgICAlLTE2LjE2cyAlMDh1XG4iLAotCQkgICAgICAgaW5mby0+bW9kZWxfY2FwYWNpdHksICoodTMyICopIGluZm8tPm1vZGVsX2NhcF9yYXRpbmcpOwotCWlmIChpbmZvLT5tb2RlbF9wZXJtX2NhcFswXSAhPSAnXDAnKQotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLAotCQkJICAgICAgICJNb2RlbCBQZXJtLiBDYXBhY2l0eTogJS0xNi4xNnMgJTA4dVxuIiwKLQkJCSAgICAgICBpbmZvLT5tb2RlbF9wZXJtX2NhcCwKLQkJCSAgICAgICAqKHUzMiAqKSBpbmZvLT5tb2RlbF9wZXJtX2NhcF9yYXRpbmcpOwotCWlmIChpbmZvLT5tb2RlbF90ZW1wX2NhcFswXSAhPSAnXDAnKQotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLAotCQkJICAgICAgICJNb2RlbCBUZW1wLiBDYXBhY2l0eTogJS0xNi4xNnMgJTA4dVxuIiwKLQkJCSAgICAgICBpbmZvLT5tb2RlbF90ZW1wX2NhcCwKLQkJCSAgICAgICAqKHUzMiAqKSBpbmZvLT5tb2RlbF90ZW1wX2NhcF9yYXRpbmcpOwotCXJldHVybiBsZW47Ci19Ci0KLSNpZiAwIC8qIEN1cnJlbnRseSB1bnVzZWQgKi8KLXN0YXRpYyBpbnQgc3RzaV8xXzJfMShzdHJ1Y3Qgc3lzaW5mb18xXzJfMSAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKLXsKLQlpZiAoc3RzaShpbmZvLCAxLCAyLCAxKSA9PSAtRU5PU1lTKQotCQlyZXR1cm4gbGVuOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7Ci0JRUJDQVNDKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKLQlFQkNBU0MoaW5mby0+cGxhbnQsIHNpemVvZihpbmZvLT5wbGFudCkpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZXF1ZW5jZSBDb2RlIG9mIENQVTogJS0xNi4xNnNcbiIsCi0JCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50IG9mIENQVTogICAgICAgICAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnBsYW50KTsKLQlyZXR1cm4gbGVuOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgc3RzaV8xXzJfMihzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc3lzaW5mb18xXzJfMl9leHRlbnNpb24gKmV4dDsKLQlpbnQgaTsKLQotCWlmIChzdHNpKGluZm8sIDEsIDIsIDIpID09IC1FTk9TWVMpCi0JCXJldHVybiBsZW47Ci0JZXh0ID0gKHN0cnVjdCBzeXNpbmZvXzFfMl8yX2V4dGVuc2lvbiAqKQotCQkoKHVuc2lnbmVkIGxvbmcpIGluZm8gKyBpbmZvLT5hY2Nfb2Zmc2V0KTsKLQotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDUFVzIFRvdGFsOiAgICAgICAgICAgJWRcbiIsCi0JCSAgICAgICBpbmZvLT5jcHVzX3RvdGFsKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ1BVcyBDb25maWd1cmVkOiAgICAgICVkXG4iLAotCQkgICAgICAgaW5mby0+Y3B1c19jb25maWd1cmVkKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ1BVcyBTdGFuZGJ5OiAgICAgICAgICVkXG4iLAotCQkgICAgICAgaW5mby0+Y3B1c19zdGFuZGJ5KTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ1BVcyBSZXNlcnZlZDogICAgICAgICVkXG4iLAotCQkgICAgICAgaW5mby0+Y3B1c19yZXNlcnZlZCk7Ci0KLQlpZiAoaW5mby0+Zm9ybWF0ID09IDEpIHsKLQkJLyoKLQkJICogU2lnaCAyLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gdGhlIGFsdGVybmF0ZQotCQkgKiBjYXBhYmlsaXR5IGZpZWxkIGlzIGEgMzIgYml0IGZsb2F0aW5nIHBvaW50IG51bWJlcgotCQkgKiBpZiB0aGUgaGlnaGVyIG9yZGVyIDggYml0cyBhcmUgbm90IHplcm8uIFByaW50aW5nCi0JCSAqIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGluIHRoZSBrZXJuZWwgaXMgYSBuby1ubywKLQkJICogYWx3YXlzIHByaW50IHRoZSBudW1iZXIgYXMgMzIgYml0IHVuc2lnbmVkIGludGVnZXIuCi0JCSAqIFRoZSB1c2VyLXNwYWNlIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIHN0cmFuZ2UKLQkJICogZW5jb2Rpbmcgb2YgdGhlIGFsdGVybmF0ZSBjcHUgY2FwYWJpbGl0eS4KLQkJICovCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDYXBhYmlsaXR5OiAgICAgICAgICAgJXUgJXVcbiIsCi0JCQkgICAgICAgaW5mby0+Y2FwYWJpbGl0eSwgZXh0LT5hbHRfY2FwYWJpbGl0eSk7Ci0JCWZvciAoaSA9IDI7IGkgPD0gaW5mby0+Y3B1c190b3RhbDsgaSsrKQotCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKLQkJCQkgICAgICAgIkFkanVzdG1lbnQgJTAyZC13YXk6ICAgICV1ICV1XG4iLAotCQkJCSAgICAgICBpLCBpbmZvLT5hZGp1c3RtZW50W2ktMl0sCi0JCQkJICAgICAgIGV4dC0+YWx0X2FkanVzdG1lbnRbaS0yXSk7Ci0KLQl9IGVsc2UgewotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ2FwYWJpbGl0eTogICAgICAgICAgICV1XG4iLAotCQkJICAgICAgIGluZm8tPmNhcGFiaWxpdHkpOwotCQlmb3IgKGkgPSAyOyBpIDw9IGluZm8tPmNwdXNfdG90YWw7IGkrKykKLQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sCi0JCQkJICAgICAgICJBZGp1c3RtZW50ICUwMmQtd2F5OiAgICAldVxuIiwKLQkJCQkgICAgICAgaSwgaW5mby0+YWRqdXN0bWVudFtpLTJdKTsKLQl9Ci0KLQlpZiAoaW5mby0+c2Vjb25kYXJ5X2NhcGFiaWxpdHkgIT0gMCkKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNlY29uZGFyeSBDYXBhYmlsaXR5OiAlZFxuIiwKLQkJCSAgICAgICBpbmZvLT5zZWNvbmRhcnlfY2FwYWJpbGl0eSk7Ci0KLQlyZXR1cm4gbGVuOwotfQotCi0jaWYgMCAvKiBDdXJyZW50bHkgdW51c2VkICovCi1zdGF0aWMgaW50IHN0c2lfMl8yXzEoc3RydWN0IHN5c2luZm9fMl8yXzEgKmluZm8sIGNoYXIgKnBhZ2UsIGludCBsZW4pCi17Ci0JaWYgKHN0c2koaW5mbywgMiwgMiwgMSkgPT0gLUVOT1NZUykKLQkJcmV0dXJuIGxlbjsKLQotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOwotCUVCQ0FTQyAoaW5mby0+c2VxdWVuY2UsIHNpemVvZihpbmZvLT5zZXF1ZW5jZSkpOwotCUVCQ0FTQyAoaW5mby0+cGxhbnQsIHNpemVvZihpbmZvLT5wbGFudCkpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZXF1ZW5jZSBDb2RlIG9mIGxvZ2ljYWwgQ1BVOiAlLTE2LjE2c1xuIiwKLQkJICAgICAgIGluZm8tPnNlcXVlbmNlKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiUGxhbnQgb2YgbG9naWNhbCBDUFU6ICUtMTYuMTZzXG4iLAotCQkgICAgICAgaW5mby0+cGxhbnQpOwotCXJldHVybiBsZW47Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBzdHNpXzJfMl8yKHN0cnVjdCBzeXNpbmZvXzJfMl8yICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQotewotCWlmIChzdHNpKGluZm8sIDIsIDIsIDIpID09IC1FTk9TWVMpCi0JCXJldHVybiBsZW47Ci0KLQlFQkNBU0MgKGluZm8tPm5hbWUsIHNpemVvZihpbmZvLT5uYW1lKSk7Ci0KLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBOdW1iZXI6ICAgICAgICAgICVkXG4iLAotCQkgICAgICAgaW5mby0+bHBhcl9udW1iZXIpOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ2hhcmFjdGVyaXN0aWNzOiAiKTsKLQlpZiAoaW5mby0+Y2hhcmFjdGVyaXN0aWNzICYgTFBBUl9DSEFSX0RFRElDQVRFRCkKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRlZGljYXRlZCAiKTsKLQlpZiAoaW5mby0+Y2hhcmFjdGVyaXN0aWNzICYgTFBBUl9DSEFSX1NIQVJFRCkKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNoYXJlZCAiKTsKLQlpZiAoaW5mby0+Y2hhcmFjdGVyaXN0aWNzICYgTFBBUl9DSEFSX0xJTUlURUQpCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMaW1pdGVkICIpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgTmFtZTogICAgICAgICAgICAlLTguOHNcbiIsCi0JCSAgICAgICBpbmZvLT5uYW1lKTsKLQotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIEFkanVzdG1lbnQ6ICAgICAgJWRcbiIsCi0JCSAgICAgICBpbmZvLT5jYWYpOwotCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ1BVcyBUb3RhbDogICAgICAlZFxuIiwKLQkJICAgICAgIGluZm8tPmNwdXNfdG90YWwpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgQ29uZmlndXJlZDogJWRcbiIsCi0JCSAgICAgICBpbmZvLT5jcHVzX2NvbmZpZ3VyZWQpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgU3RhbmRieTogICAgJWRcbiIsCi0JCSAgICAgICBpbmZvLT5jcHVzX3N0YW5kYnkpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgUmVzZXJ2ZWQ6ICAgJWRcbiIsCi0JCSAgICAgICBpbmZvLT5jcHVzX3Jlc2VydmVkKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBDUFVzIERlZGljYXRlZDogICVkXG4iLAotCQkgICAgICAgaW5mby0+Y3B1c19kZWRpY2F0ZWQpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgU2hhcmVkOiAgICAgJWRcbiIsCi0JCSAgICAgICBpbmZvLT5jcHVzX3NoYXJlZCk7Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludCBzdHNpXzNfMl8yKHN0cnVjdCBzeXNpbmZvXzNfMl8yICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQotewotCWludCBpOwotCi0JaWYgKHN0c2koaW5mbywgMywgMiwgMikgPT0gLUVOT1NZUykKLQkJcmV0dXJuIGxlbjsKLQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+Y291bnQ7IGkrKykgewotCQlFQkNBU0MgKGluZm8tPnZtW2ldLm5hbWUsIHNpemVvZihpbmZvLT52bVtpXS5uYW1lKSk7Ci0JCUVCQ0FTQyAoaW5mby0+dm1baV0uY3BpLCBzaXplb2YoaW5mby0+dm1baV0uY3BpKSk7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOwotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIE5hbWU6ICAgICAgICAgICAgJS04LjhzXG4iLAotCQkJICAgICAgIGksIGluZm8tPnZtW2ldLm5hbWUpOwotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIENvbnRyb2wgUHJvZ3JhbTogJS0xNi4xNnNcbiIsCi0JCQkgICAgICAgaSwgaW5mby0+dm1baV0uY3BpKTsKLQotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIEFkanVzdG1lbnQ6ICAgICAgJWRcbiIsCi0JCQkgICAgICAgaSwgaW5mby0+dm1baV0uY2FmKTsKLQotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIENQVXMgVG90YWw6ICAgICAgJWRcbiIsCi0JCQkgICAgICAgaSwgaW5mby0+dm1baV0uY3B1c190b3RhbCk7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJWTSUwMmQgQ1BVcyBDb25maWd1cmVkOiAlZFxuIiwKLQkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5jcHVzX2NvbmZpZ3VyZWQpOwotCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIENQVXMgU3RhbmRieTogICAgJWRcbiIsCi0JCQkgICAgICAgaSwgaW5mby0+dm1baV0uY3B1c19zdGFuZGJ5KTsKLQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBDUFVzIFJlc2VydmVkOiAgICVkXG4iLAotCQkJICAgICAgIGksIGluZm8tPnZtW2ldLmNwdXNfcmVzZXJ2ZWQpOwotCX0KLQlyZXR1cm4gbGVuOwotfQotCi0KLXN0YXRpYyBpbnQgcHJvY19yZWFkX3N5c2luZm8oY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBvZmYsIGludCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0JdW5zaWduZWQgbG9uZyBpbmZvID0gZ2V0X3plcm9lZF9wYWdlIChHRlBfS0VSTkVMKTsKLQlpbnQgbGV2ZWwsIGxlbjsKLQkKLQlpZiAoIWluZm8pCi0JCXJldHVybiAwOwotCi0JbGVuID0gMDsKLQlsZXZlbCA9IHN0c2lfMCgpOwotCWlmIChsZXZlbCA+PSAxKQotCQlsZW4gPSBzdHNpXzFfMV8xKChzdHJ1Y3Qgc3lzaW5mb18xXzFfMSAqKSBpbmZvLCBwYWdlLCBsZW4pOwotCi0JaWYgKGxldmVsID49IDEpCi0JCWxlbiA9IHN0c2lfMV8yXzIoKHN0cnVjdCBzeXNpbmZvXzFfMl8yICopIGluZm8sIHBhZ2UsIGxlbik7Ci0KLQlpZiAobGV2ZWwgPj0gMikKLQkJbGVuID0gc3RzaV8yXzJfMigoc3RydWN0IHN5c2luZm9fMl8yXzIgKikgaW5mbywgcGFnZSwgbGVuKTsKLQotCWlmIChsZXZlbCA+PSAzKQotCQlsZW4gPSBzdHNpXzNfMl8yKChzdHJ1Y3Qgc3lzaW5mb18zXzJfMiAqKSBpbmZvLCBwYWdlLCBsZW4pOwotCi0JZnJlZV9wYWdlIChpbmZvKTsKLSAgICAgICAgcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIF9faW5pdCBpbnQgY3JlYXRlX3Byb2Nfc3lzaW5mbyh2b2lkKQotewotCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoInN5c2luZm8iLCAwNDQ0LCBOVUxMLAotCQkJICAgICAgIHByb2NfcmVhZF9zeXNpbmZvLCBOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLQotX19pbml0Y2FsbChjcmVhdGVfcHJvY19zeXNpbmZvKTsKLQotLyoKLSAqIFNlcnZpY2UgbGV2ZWxzIGludGVyZmFjZS4KLSAqLwotCi1zdGF0aWMgREVDTEFSRV9SV1NFTShzZXJ2aWNlX2xldmVsX3NlbSk7Ci1zdGF0aWMgTElTVF9IRUFEKHNlcnZpY2VfbGV2ZWxfbGlzdCk7Ci0KLWludCByZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKHN0cnVjdCBzZXJ2aWNlX2xldmVsICpzbHIpCi17Ci0Jc3RydWN0IHNlcnZpY2VfbGV2ZWwgKnB0cjsKLQotCWRvd25fd3JpdGUoJnNlcnZpY2VfbGV2ZWxfc2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnNlcnZpY2VfbGV2ZWxfbGlzdCwgbGlzdCkKLQkJaWYgKHB0ciA9PSBzbHIpIHsKLQkJCXVwX3dyaXRlKCZzZXJ2aWNlX2xldmVsX3NlbSk7Ci0JCQlyZXR1cm4gLUVFWElTVDsKLQkJfQotCWxpc3RfYWRkX3RhaWwoJnNsci0+bGlzdCwgJnNlcnZpY2VfbGV2ZWxfbGlzdCk7Ci0JdXBfd3JpdGUoJnNlcnZpY2VfbGV2ZWxfc2VtKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfc2VydmljZV9sZXZlbCk7Ci0KLWludCB1bnJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoc3RydWN0IHNlcnZpY2VfbGV2ZWwgKnNscikKLXsKLQlzdHJ1Y3Qgc2VydmljZV9sZXZlbCAqcHRyLCAqbmV4dDsKLQlpbnQgcmMgPSAtRU5PRU5UOwotCi0JZG93bl93cml0ZSgmc2VydmljZV9sZXZlbF9zZW0pOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdHIsIG5leHQsICZzZXJ2aWNlX2xldmVsX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHB0ciAhPSBzbHIpCi0JCQljb250aW51ZTsKLQkJbGlzdF9kZWwoJnB0ci0+bGlzdCk7Ci0JCXJjID0gMDsKLQkJYnJlYWs7Ci0JfQotCXVwX3dyaXRlKCZzZXJ2aWNlX2xldmVsX3NlbSk7Ci0JcmV0dXJuIHJjOwotfQotRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwpOwotCi1zdGF0aWMgdm9pZCAqc2VydmljZV9sZXZlbF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQotewotCWRvd25fcmVhZCgmc2VydmljZV9sZXZlbF9zZW0pOwotCXJldHVybiBzZXFfbGlzdF9zdGFydCgmc2VydmljZV9sZXZlbF9saXN0LCAqcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNlcnZpY2VfbGV2ZWxfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnAsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBzZXFfbGlzdF9uZXh0KHAsICZzZXJ2aWNlX2xldmVsX2xpc3QsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcnZpY2VfbGV2ZWxfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCi17Ci0JdXBfcmVhZCgmc2VydmljZV9sZXZlbF9zZW0pOwotfQotCi1zdGF0aWMgaW50IHNlcnZpY2VfbGV2ZWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCi17Ci0Jc3RydWN0IHNlcnZpY2VfbGV2ZWwgKnNscjsKLQotCXNsciA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNlcnZpY2VfbGV2ZWwsIGxpc3QpOwotCXNsci0+c2VxX3ByaW50KG0sIHNscik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VydmljZV9sZXZlbF9zZXFfb3BzID0gewotCS5zdGFydAkJPSBzZXJ2aWNlX2xldmVsX3N0YXJ0LAotCS5uZXh0CQk9IHNlcnZpY2VfbGV2ZWxfbmV4dCwKLQkuc3RvcAkJPSBzZXJ2aWNlX2xldmVsX3N0b3AsCi0JLnNob3cJCT0gc2VydmljZV9sZXZlbF9zaG93Ci19OwotCi1zdGF0aWMgaW50IHNlcnZpY2VfbGV2ZWxfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNlcnZpY2VfbGV2ZWxfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNlcnZpY2VfbGV2ZWxfb3BzID0gewotCS5vcGVuCQk9IHNlcnZpY2VfbGV2ZWxfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrIAk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlCi19OwotCi1zdGF0aWMgdm9pZCBzZXJ2aWNlX2xldmVsX3ZtX3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwKLQkJCQkgICBzdHJ1Y3Qgc2VydmljZV9sZXZlbCAqc2xyKQotewotCWNoYXIgKnF1ZXJ5X2J1ZmZlciwgKnN0cjsKLQotCXF1ZXJ5X2J1ZmZlciA9IGttYWxsb2MoMTAyNCwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwotCWlmICghcXVlcnlfYnVmZmVyKQotCQlyZXR1cm47Ci0JY3BjbWQoIlFVRVJZIENQTEVWRUwiLCBxdWVyeV9idWZmZXIsIDEwMjQsIE5VTEwpOwotCXN0ciA9IHN0cmNocihxdWVyeV9idWZmZXIsICdcbicpOwotCWlmIChzdHIpCi0JCSpzdHIgPSAwOwotCXNlcV9wcmludGYobSwgIlZNOiAlc1xuIiwgcXVlcnlfYnVmZmVyKTsKLQlrZnJlZShxdWVyeV9idWZmZXIpOwotfQotCi1zdGF0aWMgc3RydWN0IHNlcnZpY2VfbGV2ZWwgc2VydmljZV9sZXZlbF92bSA9IHsKLQkuc2VxX3ByaW50ID0gc2VydmljZV9sZXZlbF92bV9wcmludAotfTsKLQotc3RhdGljIF9faW5pdCBpbnQgY3JlYXRlX3Byb2Nfc2VydmljZV9sZXZlbCh2b2lkKQotewotCXByb2NfY3JlYXRlKCJzZXJ2aWNlX2xldmVscyIsIDAsIE5VTEwsICZzZXJ2aWNlX2xldmVsX29wcyk7Ci0JaWYgKE1BQ0hJTkVfSVNfVk0pCi0JCXJlZ2lzdGVyX3NlcnZpY2VfbGV2ZWwoJnNlcnZpY2VfbGV2ZWxfdm0pOwotCXJldHVybiAwOwotfQotCi1zdWJzeXNfaW5pdGNhbGwoY3JlYXRlX3Byb2Nfc2VydmljZV9sZXZlbCk7Ci0KLS8qCi0gKiBCb2dvbWlwcyBjYWxjdWxhdGlvbiBiYXNlZCBvbiBjcHUgY2FwYWJpbGl0eS4KLSAqLwotCi1pbnQgZ2V0X2NwdV9jYXBhYmlsaXR5KHVuc2lnbmVkIGludCAqY2FwYWJpbGl0eSkKLXsKLQlzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbzsKLQlpbnQgcmM7Ci0KLQlpbmZvID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCWlmICghaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmMgPSBzdHNpKGluZm8sIDEsIDIsIDIpOwotCWlmIChyYyA9PSAtRU5PU1lTKQotCQlnb3RvIG91dDsKLQlyYyA9IDA7Ci0JKmNhcGFiaWxpdHkgPSBpbmZvLT5jYXBhYmlsaXR5Owotb3V0OgotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaW5mbyk7Ci0JcmV0dXJuIHJjOwotfQotCi0vKgotICogQ1BVIGNhcGFiaWxpdHkgbWlnaHQgaGF2ZSBjaGFuZ2VkLiBUaGVyZWZvcmUgcmVjYWxjdWxhdGUgbG9vcHNfcGVyX2ppZmZ5LgotICovCi12b2lkIHMzOTBfYWRqdXN0X2ppZmZpZXModm9pZCkKLXsKLQlzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbzsKLQljb25zdCB1bnNpZ25lZCBpbnQgZm1pbCA9IDB4NGIxODk2ODA7CS8qIDFlNyBhcyAzMi1iaXQgZmxvYXQuICovCi0JRlBfREVDTF9TKFNBKTsgRlBfREVDTF9TKFNCKTsgRlBfREVDTF9TKFNSKTsKLQlGUF9ERUNMX0VYOwotCXVuc2lnbmVkIGludCBjYXBhYmlsaXR5OwotCi0JaW5mbyA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIWluZm8pCi0JCXJldHVybjsKLQotCWlmIChzdHNpKGluZm8sIDEsIDIsIDIpICE9IC1FTk9TWVMpIHsKLQkJLyoKLQkJICogTWFqb3Igc2lnaC4gVGhlIGNwdSBjYXBhYmlsaXR5IGVuY29kaW5nIGlzICJzcGVjaWFsIi4KLQkJICogSWYgdGhlIGZpcnN0IDkgYml0cyBvZiBpbmZvLT5jYXBhYmlsaXR5IGFyZSAwIHRoZW4gaXQKLQkJICogaXMgYSAzMiBiaXQgdW5zaWduZWQgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCAuLiAyXjIzLgotCQkgKiBJZiB0aGUgZmlyc3QgOSBiaXRzIGFyZSAhPSAwIHRoZW4gaXQgaXMgYSAzMiBiaXQgZmxvYXQuCi0JCSAqIEluIGFkZGl0aW9uIGEgbG93ZXIgdmFsdWUgaW5kaWNhdGVzIGEgcHJvcG9ydGlvbmFsbHkKLQkJICogaGlnaGVyIGNwdSBjYXBhY2l0eS4gQm9nb21pcHMgYXJlIHRoZSBvdGhlciB3YXkgcm91bmQuCi0JCSAqIFRvIGdldCB0byBhIGhhbGZ3YXkgc3VpdGFibGUgbnVtYmVyIHdlIGRpdmlkZSAxZTcKLQkJICogYnkgdGhlIGNwdSBjYXBhYmlsaXR5IG51bWJlci4gWWVzLCB0aGF0IG1lYW5zIGEgZmxvYXRpbmcKLQkJICogcG9pbnQgZGl2aXNpb24gLi4gbWF0aC1lbXUgaGVyZSB3ZSBjb21lIDotKQotCQkgKi8KLQkJRlBfVU5QQUNLX1NQKFNBLCAmZm1pbCk7Ci0JCWlmICgoaW5mby0+Y2FwYWJpbGl0eSA+PiAyMykgPT0gMCkKLQkJCUZQX0ZST01fSU5UX1MoU0IsIGluZm8tPmNhcGFiaWxpdHksIDMyLCBpbnQpOwotCQllbHNlCi0JCQlGUF9VTlBBQ0tfU1AoU0IsICZpbmZvLT5jYXBhYmlsaXR5KTsKLQkJRlBfRElWX1MoU1IsIFNBLCBTQik7Ci0JCUZQX1RPX0lOVF9TKGNhcGFiaWxpdHksIFNSLCAzMiwgMCk7Ci0JfSBlbHNlCi0JCS8qCi0JCSAqIFJlYWxseSBvbGQgbWFjaGluZSB3aXRob3V0IHN0c2kgYmxvY2sgZm9yIGJhc2ljCi0JCSAqIGNwdSBpbmZvcm1hdGlvbi4gUmVwb3J0IDQyLjAgYm9nb21pcHMuCi0JCSAqLwotCQljYXBhYmlsaXR5ID0gNDI7Ci0JbG9vcHNfcGVyX2ppZmZ5ID0gY2FwYWJpbGl0eSAqICg1MDAwMDAvSFopOwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgaW5mbyk7Ci19Ci0KLS8qCi0gKiBjYWxpYnJhdGUgdGhlIGRlbGF5IGxvb3AKLSAqLwotdm9pZCBfX2NwdWluaXQgY2FsaWJyYXRlX2RlbGF5KHZvaWQpCi17Ci0JczM5MF9hZGp1c3RfamlmZmllcygpOwotCS8qIFByaW50IHRoZSBnb29kIG9sZCBCb2dvbWlwcyBsaW5lIC4uICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIkNhbGlicmF0aW5nIGRlbGF5IGxvb3AgKHNraXBwZWQpLi4uICIKLQkgICAgICAgIiVsdS4lMDJsdSBCb2dvTUlQUyBwcmVzZXRcbiIsIGxvb3BzX3Blcl9qaWZmeS8oNTAwMDAwL0haKSwKLQkgICAgICAgKGxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpICUgMTAwKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMgYi9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCmluZGV4IDI5ZGM3MzUuLjEyNGY2NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYwpAQCAtNTEsNiArNTEsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJPUEVOUFJPTSBDb25maWd1cmF0aW9uIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oIjEuMCIpOworTU9EVUxFX0FMSUFTX01JU0NERVYoU1VOX09QRU5QUk9NX01JTk9SKTsKIAogLyogUHJpdmF0ZSBkYXRhIGtlcHQgYnkgdGhlIGRyaXZlciBmb3IgZWFjaCBkZXNjcmlwdG9yLiAqLwogdHlwZWRlZiBzdHJ1Y3Qgb3BlbnByb21fcHJpdmF0ZV9kYXRhCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYTQwMDB0LmMgYi9kcml2ZXJzL3Njc2kvYTQwMDB0LmMKaW5kZXggZDRiZGEyMC4uNjFhZjNkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2E0MDAwdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hNDAwMHQuYwpAQCAtMzUsNyArMzUsNyBAQAogCiAjZGVmaW5lIEE0MDAwVF9TQ1NJX0FERFIgMHhkZDAwNDAKIAotc3RhdGljIGludCBfX2RldmluaXQgYTQwMDB0X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGE0MDAwdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdDsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhOwpAQCAtNjEsNyArNjEsOCBAQAogCWhvc3RkYXRhLT5kY250bF9leHRyYSA9IEVBXzcxMDsKIAogCS8qIGFuZCByZWdpc3RlciB0aGUgY2hpcCAqLwotCWhvc3QgPSBOQ1JfNzAwX2RldGVjdCgmYTQwMDB0X3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwgZGV2KTsKKwlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJmE0MDAwdF9zY3NpX2RyaXZlcl90ZW1wbGF0ZSwgaG9zdGRhdGEsCisJCQkgICAgICAmZGV2LT5kZXYpOwogCWlmICghaG9zdCkgewogCQlwcmludGsoS0VSTl9FUlIgImE0MDAwdC1zY3NpOiBObyBob3N0IGRldGVjdGVkOyAiCiAJCQkJImJvYXJkIGNvbmZpZ3VyYXRpb24gcHJvYmxlbT9cbiIpOwpAQCAtNzgsNyArNzksNyBAQAogCQlnb3RvIG91dF9wdXRfaG9zdDsKIAl9CiAKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOwogCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOwogCiAJcmV0dXJuIDA7CkBAIC05Myw5ICs5NCw5IEBACiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBfX2RldmV4aXQgaW50IGE0MDAwdF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBfX2RldmV4aXQgaW50IGE0MDAwdF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaG9zdCk7CiAKIAlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOwpAQCAtMTA4LDI1ICsxMDksMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGE0MDAwdF9zY3NpX2RyaXZlciA9IHsKLQkubmFtZQk9ICJhNDAwMHQtc2NzaSIsCi0JLmJ1cwk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkucHJvYmUJPSBhNDAwMHRfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGE0MDAwdF9kZXZpY2VfcmVtb3ZlKSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGE0MDAwdF9zY3NpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSAgICAgICAgICAgPSAiYTQwMDB0LXNjc2kiLAorCQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSAgICAgICAgICA9IGE0MDAwdF9wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChhNDAwMHRfZGV2aWNlX3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhNDAwMHRfc2NzaV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWE0MDAwdF9zY3NpX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImE0MDAwdC1zY3NpIiwKIAkJCS0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKGE0MDAwdF9zY3NpX2RldmljZSkpIHsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJmE0MDAwdF9zY3NpX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYTQwMDB0X3Njc2lfZHJpdmVyKTsKIAkJcmV0dXJuIFBUUl9FUlIoYTQwMDB0X3Njc2lfZGV2aWNlKTsKIAl9CiAKQEAgLTEzNiw3ICsxMzksNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGE0MDAwdF9zY3NpX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihhNDAwMHRfc2NzaV9kZXZpY2UpOwotCWRyaXZlcl91bnJlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhNDAwMHRfc2NzaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChhNDAwMHRfc2NzaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYyBiL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYwppbmRleCBlZDUwMmI3NDEuLmM5OTAyYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vY3VtYW5hXzIuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2N1bWFuYV8yLmMKQEAgLTM5MCw3ICszOTAsOCBAQAogCS5laF9hYm9ydF9oYW5kbGVyCQk9IGZhczIxNl9laF9hYm9ydCwKIAkuY2FuX3F1ZXVlCQkJPSAxLAogCS50aGlzX2lkCQkJPSA3LAotCS5zZ190YWJsZXNpemUJCQk9IFNHX0FMTCwKKwkuc2dfdGFibGVzaXplCQkJPSBTQ1NJX01BWF9TR19DSEFJTl9TRUdNRU5UUywKKwkuZG1hX2JvdW5kYXJ5CQkJPSBJT01EX0RNQV9CT1VOREFSWSwKIAkuY21kX3Blcl9sdW4JCQk9IDEsCiAJLnVzZV9jbHVzdGVyaW5nCQkJPSBESVNBQkxFX0NMVVNURVJJTkcsCiAJLnByb2NfbmFtZQkJCT0gImN1bWFuYXNjc2kyIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYyBiL2RyaXZlcnMvc2NzaS9hcm0vZWVzb3guYwppbmRleCBiYjI0NzdiLi5kODQzNTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXJtL2Vlc294LmMKKysrIGIvZHJpdmVycy9zY3NpL2FybS9lZXNveC5jCkBAIC01MDgsNyArNTA4LDggQEAKIAkuZWhfYWJvcnRfaGFuZGxlcgkJPSBmYXMyMTZfZWhfYWJvcnQsCiAJLmNhbl9xdWV1ZQkJCT0gMSwKIAkudGhpc19pZAkJCT0gNywKLQkuc2dfdGFibGVzaXplCQkJPSBTR19BTEwsCisJLnNnX3RhYmxlc2l6ZQkJCT0gU0NTSV9NQVhfU0dfQ0hBSU5fU0VHTUVOVFMsCisJLmRtYV9ib3VuZGFyeQkJCT0gSU9NRF9ETUFfQk9VTkRBUlksCiAJLmNtZF9wZXJfbHVuCQkJPSAxLAogCS51c2VfY2x1c3RlcmluZwkJCT0gRElTQUJMRV9DTFVTVEVSSU5HLAogCS5wcm9jX25hbWUJCQk9ICJlZXNveCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMgYi9kcml2ZXJzL3Njc2kvYXJtL3Bvd2VydGVjLmMKaW5kZXggZDlhNTQ2ZC4uZTIyOTdiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9wb3dlcnRlYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vcG93ZXJ0ZWMuYwpAQCAtMzAyLDcgKzMwMiw4IEBACiAKIAkuY2FuX3F1ZXVlCQkJPSA4LAogCS50aGlzX2lkCQkJPSA3LAotCS5zZ190YWJsZXNpemUJCQk9IFNHX0FMTCwKKwkuc2dfdGFibGVzaXplCQkJPSBTQ1NJX01BWF9TR19DSEFJTl9TRUdNRU5UUywKKwkuZG1hX2JvdW5kYXJ5CQkJPSBJT01EX0RNQV9CT1VOREFSWSwKIAkuY21kX3Blcl9sdW4JCQk9IDIsCiAJLnVzZV9jbHVzdGVyaW5nCQkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkucHJvY19uYW1lCQkJPSAicG93ZXJ0ZWMiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYyBiL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKaW5kZXggOTNiNjFmMS4uMDQ3MWY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCkBAIC04NDQsNyArODQ0LDcgQEAKICAqCiAgKi8KIAotc3RhdGljIGludCBOQ1I1MzgwX2luaXQoc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2UsIGludCBmbGFncykKK3N0YXRpYyBpbnQgX19pbml0IE5DUjUzODBfaW5pdChzdHJ1Y3QgU2NzaV9Ib3N0ICppbnN0YW5jZSwgaW50IGZsYWdzKQogewogCWludCBpOwogCVNFVFVQX0hPU1REQVRBKGluc3RhbmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfc2NzaS5jCmluZGV4IDIxZmUwN2YuLmFkN2EyM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX3Njc2kuYwpAQCAtNTg5LDcgKzU4OSw3IEBACiAjZW5kaWYKIAogCi1pbnQgYXRhcmlfc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdCkKK2ludCBfX2luaXQgYXRhcmlfc2NzaV9kZXRlY3Qoc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSAqaG9zdCkKIHsKIAlzdGF0aWMgaW50IGNhbGxlZCA9IDA7CiAJc3RydWN0IFNjc2lfSG9zdCAqaW5zdGFuY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYnZtZTYwMDBfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2J2bWU2MDAwX3Njc2kuYwppbmRleCBkODU4ZjNkLi41Nzk5Y2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYnZtZTYwMDBfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9idm1lNjAwMF9zY3NpLmMKQEAgLTM0LDcgKzM0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpidm1lNjAwMF9zY3NpX2RldmljZTsKIAogc3RhdGljIF9fZGV2aW5pdCBpbnQKLWJ2bWU2MDAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK2J2bWU2MDAwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGE7CkBAIC01OCw3ICs1OCw4IEBACiAJaG9zdGRhdGEtPmN0ZXN0N19leHRyYSA9IENURVNUN19UVDE7CiAKIAkvKiBhbmQgcmVnaXN0ZXIgdGhlIGNoaXAgKi8KLQlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwgZGV2KTsKKwlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwKKwkJCSAgICAgICZkZXYtPmRldik7CiAJaWYgKCFob3N0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnZtZTYwMDAtc2NzaTogTm8gaG9zdCBkZXRlY3RlZDsgIgogCQkJCSJib2FyZCBjb25maWd1cmF0aW9uIHByb2JsZW0/XG4iKTsKQEAgLTczLDcgKzc0LDcgQEAKIAkJZ290byBvdXRfcHV0X2hvc3Q7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBob3N0KTsKIAlzY3NpX3NjYW5faG9zdChob3N0KTsKIAogCXJldHVybiAwOwpAQCAtODcsOSArODgsOSBAQAogfQogCiBzdGF0aWMgX19kZXZleGl0IGludAotYnZtZTYwMDBfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitidm1lNjAwMF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IE5DUl83MDBfSG9zdF9QYXJhbWV0ZXJzICpob3N0ZGF0YSA9IHNob3N0X3ByaXYoaG9zdCk7CiAKIAlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOwpAQCAtMTAwLDI1ICsxMDEsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGJ2bWU2MDAwX3Njc2lfZHJpdmVyID0gewotCS5uYW1lCT0gImJ2bWU2MDAwLXNjc2kiLAotCS5idXMJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCi0JLnByb2JlCT0gYnZtZTYwMDBfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGJ2bWU2MDAwX2RldmljZV9yZW1vdmUpLAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYnZtZTYwMDBfc2NzaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gImJ2bWU2MDAwLXNjc2kiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gYnZtZTYwMDBfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChidm1lNjAwMF9kZXZpY2VfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJ2bWU2MDAwX3Njc2lfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQllcnIgPSBkcml2ZXJfcmVnaXN0ZXIoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyKTsKKwllcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmJ2bWU2MDAwX3Njc2lfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJYnZtZTYwMDBfc2NzaV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJidm1lNjAwMC1zY3NpIiwKIAkJCQkJCQkgICAgICAgLTEsIE5VTEwsIDApOwogCWlmIChJU19FUlIoYnZtZTYwMDBfc2NzaV9kZXZpY2UpKSB7Ci0JCWRyaXZlcl91bnJlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CisJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CiAJCXJldHVybiBQVFJfRVJSKGJ2bWU2MDAwX3Njc2lfZGV2aWNlKTsKIAl9CiAKQEAgLTEyOCw3ICsxMzEsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGJ2bWU2MDAwX3Njc2lfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGJ2bWU2MDAwX3Njc2lfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmYnZtZTYwMDBfc2NzaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZidm1lNjAwMF9zY3NpX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGJ2bWU2MDAwX3Njc2lfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXZtZTE2eF9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbXZtZTE2eF9zY3NpLmMKaW5kZXggYjI2NGI0OS4uYjVmYmZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL212bWUxNnhfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tdm1lMTZ4X3Njc2kuYwpAQCAtMzQsNyArMzQsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm12bWUxNnhfc2NzaV9kZXZpY2U7CiAKIHN0YXRpYyBfX2RldmluaXQgaW50Ci1tdm1lMTZ4X3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK212bWUxNnhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBTY3NpX0hvc3QgKiBob3N0ID0gTlVMTDsKIAlzdHJ1Y3QgTkNSXzcwMF9Ib3N0X1BhcmFtZXRlcnMgKmhvc3RkYXRhOwpAQCAtNjQsNyArNjQsOCBAQAogCWhvc3RkYXRhLT5jdGVzdDdfZXh0cmEgPSBDVEVTVDdfVFQxOwogCiAJLyogYW5kIHJlZ2lzdGVyIHRoZSBjaGlwICovCi0JaG9zdCA9IE5DUl83MDBfZGV0ZWN0KCZtdm1lMTZ4X3Njc2lfZHJpdmVyX3RlbXBsYXRlLCBob3N0ZGF0YSwgZGV2KTsKKwlob3N0ID0gTkNSXzcwMF9kZXRlY3QoJm12bWUxNnhfc2NzaV9kcml2ZXJfdGVtcGxhdGUsIGhvc3RkYXRhLAorCQkJICAgICAgJmRldi0+ZGV2KTsKIAlpZiAoIWhvc3QpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtdm1lMTZ4LXNjc2k6IE5vIGhvc3QgZGV0ZWN0ZWQ7ICIKIAkJCQkiYm9hcmQgY29uZmlndXJhdGlvbiBwcm9ibGVtP1xuIik7CkBAIC04OCw3ICs4OSw3IEBACiAJCW91dF9iZTMyKDB4ZmZmNDIwMmMsIHYpOwogCX0KIAotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGhvc3QpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAJc2NzaV9zY2FuX2hvc3QoaG9zdCk7CiAKIAlyZXR1cm4gMDsKQEAgLTEwMiw5ICsxMDMsOSBAQAogfQogCiBzdGF0aWMgX19kZXZleGl0IGludAotbXZtZTE2eF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK212bWUxNnhfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGEgPSBzaG9zdF9wcml2KGhvc3QpOwogCiAJLyogRGlzYWJsZSBzY3NpIGNoaXAgaW50cyAqLwpAQCAtMTIzLDI1ICsxMjQsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIG12bWUxNnhfc2NzaV9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAibXZtZTE2eC1zY3NpIiwKLQkuYnVzCT0gJnBsYXRmb3JtX2J1c190eXBlLAotCS5wcm9iZQk9IG12bWUxNnhfcHJvYmUsCi0JLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKG12bWUxNnhfZGV2aWNlX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdm1lMTZ4X3Njc2lfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJtdm1lMTZ4LXNjc2kiLAorCQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSAgICAgICAgICA9IG12bWUxNnhfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AobXZtZTE2eF9kZXZpY2VfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG12bWUxNnhfc2NzaV9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IGRyaXZlcl9yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtdm1lMTZ4X3Njc2lfZHJpdmVyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJbXZtZTE2eF9zY3NpX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoIm12bWUxNngtc2NzaSIsCiAJCQkJCQkJICAgICAgLTEsIE5VTEwsIDApOwogCWlmIChJU19FUlIobXZtZTE2eF9zY3NpX2RldmljZSkpIHsKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOworCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CiAJCXJldHVybiBQVFJfRVJSKG12bWUxNnhfc2NzaV9kZXZpY2UpOwogCX0KIApAQCAtMTUxLDcgKzE1NCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbXZtZTE2eF9zY3NpX2V4aXQodm9pZCkKIHsKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihtdm1lMTZ4X3Njc2lfZGV2aWNlKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmbXZtZTE2eF9zY3NpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm12bWUxNnhfc2NzaV9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChtdm1lMTZ4X3Njc2lfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IDVmNzc0MTcuLjNlZTRlYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC01MzMsMTIgKzUzMyw4IEBACiAJZXZlbnQtPmV2ZW50X2NvZGUgPSBldmVudF9jb2RlOwogCWV2ZW50LT5ldmVudF9kYXRhID0gZXZlbnRfZGF0YTsKIAotCWVyciA9IG5sbXNnX211bHRpY2FzdChzY3NpX25sX3NvY2ssIHNrYiwgMCwgU0NTSV9OTF9HUlBfRkNfRVZFTlRTLAotCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVyciAmJiAoZXJyICE9IC1FU1JDSCkpCS8qIGZpbHRlciBubyByZWNpcGllbnQgZXJyb3JzICovCi0JCS8qIG5sbXNnX211bHRpY2FzdCBhbHJlYWR5IGtmcmVlX3NrYidkICovCi0JCWdvdG8gc2VuZF9mYWlsOwotCisJbmxtc2dfbXVsdGljYXN0KHNjc2lfbmxfc29jaywgc2tiLCAwLCBTQ1NJX05MX0dSUF9GQ19FVkVOVFMsCisJCQlHRlBfS0VSTkVMKTsKIAlyZXR1cm47CiAKIHNlbmRfZmFpbF9za2I6CkBAIC02MDcsMTIgKzYwMyw4IEBACiAJZXZlbnQtPmV2ZW50X2NvZGUgPSBGQ0hfRVZUX1ZFTkRPUl9VTklRVUU7CiAJbWVtY3B5KCZldmVudC0+ZXZlbnRfZGF0YSwgZGF0YV9idWYsIGRhdGFfbGVuKTsKIAotCWVyciA9IG5sbXNnX211bHRpY2FzdChzY3NpX25sX3NvY2ssIHNrYiwgMCwgU0NTSV9OTF9HUlBfRkNfRVZFTlRTLAotCQkJICAgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKGVyciAmJiAoZXJyICE9IC1FU1JDSCkpCS8qIGZpbHRlciBubyByZWNpcGllbnQgZXJyb3JzICovCi0JCS8qIG5sbXNnX211bHRpY2FzdCBhbHJlYWR5IGtmcmVlX3NrYidkICovCi0JCWdvdG8gc2VuZF92ZW5kb3JfZmFpbDsKLQorCW5sbXNnX211bHRpY2FzdChzY3NpX25sX3NvY2ssIHNrYiwgMCwgU0NTSV9OTF9HUlBfRkNfRVZFTlRTLAorCQkJR0ZQX0tFUk5FTCk7CiAJcmV0dXJuOwogCiBzZW5kX3ZlbmRvcl9mYWlsX3NrYjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9pc2NzaS5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKaW5kZXggNzVjOTI5Ny4uMmFkZmFiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMKQEAgLTk2NiwxNSArOTY2LDcgQEAKIHN0YXRpYyBpbnQKIGlzY3NpX2Jyb2FkY2FzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZ2ZwKQogewotCWludCByYzsKLQotCXJjID0gbmV0bGlua19icm9hZGNhc3QobmxzLCBza2IsIDAsIDEsIGdmcCk7Ci0JaWYgKHJjIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImlzY3NpOiBjYW4gbm90IGJyb2FkY2FzdCBza2IgKCVkKVxuIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIG5ldGxpbmtfYnJvYWRjYXN0KG5scywgc2tiLCAwLCAxLCBnZnApOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjA3LDcgKzExOTksNyBAQAogCSAqIHRoZSB1c2VyIGFuZCB3aGVuIHRoZSBkYWVtb24gaXMgcmVzdGFydGVkIGl0IHdpbGwgaGFuZGxlIGl0CiAJICovCiAJcmMgPSBpc2NzaV9icm9hZGNhc3Rfc2tiKHNrYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJjIDwgMCkKKwlpZiAocmMgPT0gLUVTUkNIKQogCQlpc2NzaV9jbHNfc2Vzc2lvbl9wcmludGsoS0VSTl9FUlIsIHNlc3Npb24sCiAJCQkJCSAiQ2Fubm90IG5vdGlmeSB1c2Vyc3BhY2Ugb2Ygc2Vzc2lvbiAiCiAJCQkJCSAiZXZlbnQgJXUuIENoZWNrIGlzY3NpIGRhZW1vblxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggNTE2OTI1ZC4uYjRlZjJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnLmMKKysrIGIvZHJpdmVycy9zY3NpL3NnLmMKQEAgLTExNTQsNyArMTE1NCw2IEBACiBzdGF0aWMgaW50CiBzZ19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG1vZGUpCiB7Ci0JaW50IHJldHZhbDsKIAlTZ19kZXZpY2UgKnNkcDsKIAlTZ19mZCAqc2ZwOwogCkBAIC0xMTYzLDggKzExNjIsNyBAQAogCVNDU0lfTE9HX1RJTUVPVVQoMywgcHJpbnRrKCJzZ19mYXN5bmM6ICVzLCBtb2RlPSVkXG4iLAogCQkJCSAgIHNkcC0+ZGlzay0+ZGlza19uYW1lLCBtb2RlKSk7CiAKLQlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBtb2RlLCAmc2ZwLT5hc3luY19xcCk7Ci0JcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IDA7CisJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG1vZGUsICZzZnAtPmFzeW5jX3FwKTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYyBiL2RyaXZlcnMvc2VyaWFsLzIxMjg1LmMKaW5kZXggZjMxYzY2OS4uY2I2ZDg1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvMjEyODUuYworKysgYi9kcml2ZXJzL3NlcmlhbC8yMTI4NS5jCkBAIC0xNCw4ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVjMjEyODUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCmluZGV4IDdkN2Y1NzYuLjliZTExYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwpAQCAtNjI4LDcgKzYyOCw3IEBACiAKIGNvbmZpZyBTRVJJQUxfUFhBCiAJYm9vbCAiUFhBIHNlcmlhbCBwb3J0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUk0gJiYgQVJDSF9QWEEKKwlkZXBlbmRzIG9uIEFSQ0hfUFhBIHx8IEFSQ0hfTU1QCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAJaGVscAogCSAgSWYgeW91IGhhdmUgYSBtYWNoaW5lIGJhc2VkIG9uIGFuIEludGVsIFhTY2FsZSBQWEEyeHggQ1BVIHlvdQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYyBiL2RyaXZlcnMvc2VyaWFsL2NscHM3MTF4LmMKaW5kZXggNDU5ZjM0Mi4uODBlNzY0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvY2xwczcxMXguYworKysgYi9kcml2ZXJzL3NlcmlhbC9jbHBzNzExeC5jCkBAIC0zOCw5ICszOCw5IEBACiAjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbHBzNzExMS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pbXguYyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCmluZGV4IGE1MDk1NDYuLjlmNDYwYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2lteC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lteC5jCkBAIC0xMTI5LDcgKzExMjksNyBAQAogCXNwb3J0LT50aW1lci5mdW5jdGlvbiA9IGlteF90aW1lb3V0OwogCXNwb3J0LT50aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKXNwb3J0OwogCi0Jc3BvcnQtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVhcnRfY2xrIik7CisJc3BvcnQtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVhcnQiKTsKIAlpZiAoSVNfRVJSKHNwb3J0LT5jbGspKSB7CiAJCXJldCA9IFBUUl9FUlIoc3BvcnQtPmNsayk7CiAJCWdvdG8gdW5tYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9weGEuYyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCmluZGV4IGY2ZTNiODYuLmE0OGE4YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3B4YS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3B4YS5jCkBAIC00MywxMyArNDMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy11YXJ0Lmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiBzdHJ1Y3QgdWFydF9weGFfcG9ydCB7CiAJc3RydWN0IHVhcnRfcG9ydCAgICAgICAgcG9ydDsKQEAgLTQ5MSw3ICs0ODUsNyBAQAogCSAqIEVuc3VyZSB0aGUgcG9ydCB3aWxsIGJlIGVuYWJsZWQuCiAJICogVGhpcyBpcyByZXF1aXJlZCBlc3BlY2lhbGx5IGZvciBzZXJpYWwgY29uc29sZS4KIAkgKi8KLQl1cC0+aWVyIHw9IElFUl9VVUU7CisJdXAtPmllciB8PSBVQVJUX0lFUl9VVUU7CiAKIAkvKgogCSAqIFVwZGF0ZSB0aGUgcGVyLXBvcnQgdGltZW91dC4KQEAgLTc4NCwxOSArNzc4LDE1IEBACiAJc3BvcnQtPnBvcnQuZmxhZ3MgPSBVUEZfSU9SRU1BUCB8IFVQRl9CT09UX0FVVE9DT05GOwogCXNwb3J0LT5wb3J0LnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoc3BvcnQtPmNsayk7CiAKLQkvKgotCSAqIElzIGl0IHdvcnRoIGtlZXBpbmcgdGhpcz8KLQkgKi8KLQlpZiAobW1yZXMtPnN0YXJ0ID09IF9fUFJFRyhGRlVBUlQpKQotCQlzcG9ydC0+bmFtZSA9ICJGRlVBUlQiOwotCWVsc2UgaWYgKG1tcmVzLT5zdGFydCA9PSBfX1BSRUcoQlRVQVJUKSkKLQkJc3BvcnQtPm5hbWUgPSAiQlRVQVJUIjsKLQllbHNlIGlmIChtbXJlcy0+c3RhcnQgPT0gX19QUkVHKFNUVUFSVCkpCi0JCXNwb3J0LT5uYW1lID0gIlNUVUFSVCI7Ci0JZWxzZSBpZiAobW1yZXMtPnN0YXJ0ID09IF9fUFJFRyhIV1VBUlQpKQotCQlzcG9ydC0+bmFtZSA9ICJIV1VBUlQiOwotCWVsc2UKKwlzd2l0Y2ggKGRldi0+aWQpIHsKKwljYXNlIDA6IHNwb3J0LT5uYW1lID0gIkZGVUFSVCI7IGJyZWFrOworCWNhc2UgMTogc3BvcnQtPm5hbWUgPSAiQlRVQVJUIjsgYnJlYWs7CisJY2FzZSAyOiBzcG9ydC0+bmFtZSA9ICJTVFVBUlQiOyBicmVhazsKKwljYXNlIDM6IHNwb3J0LT5uYW1lID0gIkhXVUFSVCI7IGJyZWFrOworCWRlZmF1bHQ6CiAJCXNwb3J0LT5uYW1lID0gIj8/PyI7CisJCWJyZWFrOworCX0KIAogCXNwb3J0LT5wb3J0Lm1lbWJhc2UgPSBpb3JlbWFwKG1tcmVzLT5zdGFydCwgbW1yZXMtPmVuZCAtIG1tcmVzLT5zdGFydCArIDEpOwogCWlmICghc3BvcnQtPnBvcnQubWVtYmFzZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2ExMTAwLmMgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwppbmRleCBiMjRhMjVlLi45NDUzMGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYTExMDAuYwpAQCAtMzYsOCArMzYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9zZXJpYWxfc2ExMTAwLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDU1N2I1NGEuLmRiZjUzNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0xMzksNyArMTM5LDcgQEAKIAl9IHdoaWxlICghKHN0YXR1cyAmIFNDeFNSX1REeEUocG9ydCkpKTsKIAogCXNjaV9pbihwb3J0LCBTQ3hTUik7ICAgICAgICAgICAgLyogRHVtbXkgcmVhZCAqLwotCXNjaV9vdXQocG9ydCwgU0N4U1IsIFNDeFNSX1REeEVfQ0xFQVIocG9ydCkpOworCXNjaV9vdXQocG9ydCwgU0N4U1IsIFNDeFNSX1REeEVfQ0xFQVIocG9ydCkgJiB+U0N4U1JfVEVORChwb3J0KSk7CiAJc2NpX291dChwb3J0LCBTQ3hURFIsIGMpOwogfQogI2VuZGlmIC8qIENPTkZJR19DT05TT0xFX1BPTEwgfHwgQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSAqLwpAQCAtMjYzLDYgKzI2Myw3IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NIWDMpCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NpX2luaXRfcGlucyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCiB7CkBAIC0yODQsNyArMjg1LDggQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiBzdGF0aWMgaW5saW5lIGludCBzY2lmX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXJldHVybiBTQ0lGX1RYUk9PTV9NQVggLSAoc2NpX2luKHBvcnQsIFNDVEZEUikgJiAweGZmKTsKQEAgLTEwOTUsNiArMTA5Nyw3IEBACiAJCQkJIHVuc2lnbmVkIGNvdW50KQogewogCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmc2VyaWFsX2NvbnNvbGVfcG9ydC0+cG9ydDsKKwl1bnNpZ25lZCBzaG9ydCBiaXRzOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKQEAgLTExMDMsNiArMTEwNiwxMSBAQAogCiAJCXNjaV9wb2xsX3B1dF9jaGFyKHBvcnQsICpzKyspOwogCX0KKworCS8qIHdhaXQgdW50aWwgZmlmbyBpcyBlbXB0eSBhbmQgbGFzdCBiaXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQgKi8KKwliaXRzID0gU0N4U1JfVER4RShwb3J0KSB8IFNDeFNSX1RFTkQocG9ydCk7CisJd2hpbGUgKChzY2lfaW4ocG9ydCwgU0N4U1IpICYgYml0cykgIT0gYml0cykKKwkJY3B1X3JlbGF4KCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNlcmlhbF9jb25zb2xlX3NldHVwKHN0cnVjdCBjb25zb2xlICpjbywgY2hhciAqb3B0aW9ucykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKaW5kZXggMDIyZTg5Zi4uZDBhYTgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwNykgfHwgZGVmaW5lZChDT05GSUdfSDgzMDY4KQogI2luY2x1ZGUgPGFzbS9yZWdzMzA2eC5oPgpAQCAtMTI2LDcgKzEyNiw4IEBACiAjIGRlZmluZSBTQ1NQVFIxCTB4ZmZlMTAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDSUZfT1JFUgkweDAwMDEJCS8qIE92ZXJydW4gZXJyb3IgYml0ICovCiAjIGRlZmluZSBTQ1NDUl9JTklUKHBvcnQpCTB4M2EJLyogVElFPTAsUklFPTAsVEU9MSxSRT0xLFJFSUU9MSAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiAjIGRlZmluZSBTQ1NQVFIwCTB4ZmZlYTAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDU1BUUjEJMHhmZmViMDAyNAkvKiAxNiBiaXQgU0NJRiAqLwogIyBkZWZpbmUgU0NTUFRSMgkweGZmZWMwMDI0CS8qIDE2IGJpdCBTQ0lGICovCkBAIC0xODIsNiArMTgzLDcgQEAKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpICB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKSAgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpICB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0hYMykKICNkZWZpbmUgU0NJX0NUUkxfRkxBR1NfUkVJRSAweDA4IC8qIDc3NTAgU0NJRiAqLwogI2Vsc2UKQEAgLTQxMyw3ICs0MTUsOCBAQAogU0NJRl9GTlMoU0NGQ1IsICAgICAgICAgICAgICAgICAgICAgIDB4MGMsICA4LCAweDE4LCAxNikKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg1KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogU0NJRl9GTlMoU0NGRFIsCQkJICAgICAweDBlLCAxNiwgMHgxQywgMTYpCiBTQ0lGX0ZOUyhTQ1RGRFIsCQkgICAgIDB4MGUsIDE2LCAweDFDLCAxNikKIFNDSUZfRk5TKFNDUkZEUiwJCSAgICAgMHgwZSwgMTYsIDB4MjAsIDE2KQpAQCAtNjQ0LDcgKzY0Nyw4IEBACiAJCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCiAJcmV0dXJuIDE7CiB9Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZWEwMDAwKQpAQCAtNzQ2LDcgKzc1MCw4IEBACiAgKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODYpCiAjZGVmaW5lIFNDQlJSX1ZBTFVFKGJwcywgY2xrKSAoKGNsaysxNipicHMpLygxNipicHMpLTEpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKaW5kZXggNDVhMjk5Zi4uZTA5ZDNjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCkBAIC0xNDM4LDEyICsxNDM4LDEyIEBACiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEtleWJvYXJkIGF0IE1NSU8gMHglbGx4IChpcnEgPSAlZCkgIgogCQkgICAgICAgImlzIGEgJXNcbiIsCi0JCSAgICAgICBvcC0+ZGV2LmJ1c19pZCwKKwkJICAgICAgIGRldl9uYW1lKCZvcC0+ZGV2KSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHVwWzBdLnBvcnQubWFwYmFzZSwKIAkJICAgICAgIG9wLT5pcnFzWzBdLCBzdW56aWxvZ190eXBlKCZ1cFswXS5wb3J0KSk7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNb3VzZSBhdCBNTUlPIDB4JWxseCAoaXJxID0gJWQpICIKIAkJICAgICAgICJpcyBhICVzXG4iLAotCQkgICAgICAgb3AtPmRldi5idXNfaWQsCisJCSAgICAgICBkZXZfbmFtZSgmb3AtPmRldiksCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB1cFsxXS5wb3J0Lm1hcGJhc2UsCiAJCSAgICAgICBvcC0+aXJxc1swXSwgc3Vuemlsb2dfdHlwZSgmdXBbMV0ucG9ydCkpOwogCQlrYm1faW5zdCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9pbnRjLmMgYi9kcml2ZXJzL3NoL2ludGMuYwppbmRleCA1OGQyNGM1Li4yMjY5ZmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NoL2ludGMuYworKysgYi9kcml2ZXJzL3NoL2ludGMuYwpAQCAtNTY4LDYgKzU2OCwxMCBAQAogCWlmICghZGF0YVswXSAmJiBkYXRhWzFdKQogCQlwcmltYXJ5ID0gMTsKIAorCWlmICghZGF0YVswXSAmJiAhZGF0YVsxXSkKKwkJcHJfd2FybmluZygiaW50YzogbWlzc2luZyB1bmlxdWUgaXJxIG1hc2sgZm9yICIKKwkJCSAgICJpcnEgJWQgKHZlY3QgMHglMDR4KVxuIiwgaXJxLCBpcnEyZXZ0KGlycSkpOworCiAJZGF0YVswXSA9IGRhdGFbMF0gPyBkYXRhWzBdIDogaW50Y19tYXNrX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CiAJZGF0YVsxXSA9IGRhdGFbMV0gPyBkYXRhWzFdIDogaW50Y19wcmlvX2RhdGEoZGVzYywgZCwgZW51bV9pZCwgMSk7CiAKQEAgLTY0MSw2ICs2NDUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgKmludGNfZXZ0MmlycV90YWJsZTsKKwordW5zaWduZWQgaW50IGludGNfZXZ0MmlycSh1bnNpZ25lZCBpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGludCBpcnEgPSBldnQyaXJxKHZlY3Rvcik7CisKKwlpZiAoaW50Y19ldnQyaXJxX3RhYmxlICYmIGludGNfZXZ0MmlycV90YWJsZVtpcnFdKQorCQlpcnEgPSBpbnRjX2V2dDJpcnFfdGFibGVbaXJxXTsKKworCXJldHVybiBpcnE7Cit9CiAKIHZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKQogewpAQCAtNzA1LDggKzcyMCw0MCBAQAogCiAJQlVHX09OKGsgPiAyNTYpOyAvKiBfSU5UQ19BRERSX0UoKSBhbmQgX0lOVENfQUREUl9EKCkgYXJlIDggYml0cyAqLwogCisJLyoga2VlcCB0aGUgZmlyc3QgdmVjdG9yIG9ubHkgaWYgc2FtZSBlbnVtIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfdmVjdG9yczsgaSsrKSB7CiAJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QgPSBkZXNjLT52ZWN0b3JzICsgaTsKKwkJaW50IGZpcnN0X2lycSA9IGV2dDJpcnEodmVjdC0+dmVjdCk7CisKKwkJaWYgKCF2ZWN0LT5lbnVtX2lkKQorCQkJY29udGludWU7CisKKwkJZm9yIChrID0gaSArIDE7IGsgPCBkZXNjLT5ucl92ZWN0b3JzOyBrKyspIHsKKwkJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QyID0gZGVzYy0+dmVjdG9ycyArIGs7CisKKwkJCWlmICh2ZWN0LT5lbnVtX2lkICE9IHZlY3QyLT5lbnVtX2lkKQorCQkJCWNvbnRpbnVlOworCisJCQl2ZWN0Mi0+ZW51bV9pZCA9IDA7CisKKwkJCWlmICghaW50Y19ldnQyaXJxX3RhYmxlKQorCQkJCWludGNfZXZ0MmlycV90YWJsZSA9IGFsbG9jX2Jvb3RtZW0oTlJfSVJRUyk7CisKKwkJCWlmICghaW50Y19ldnQyaXJxX3RhYmxlKSB7CisJCQkJcHJfd2FybmluZygiaW50YzogY2Fubm90IGFsbG9jYXRlIGV2dDJpcnEhXG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaW50Y19ldnQyaXJxX3RhYmxlW2V2dDJpcnEodmVjdDItPnZlY3QpXSA9IGZpcnN0X2lycTsKKwkJfQorCX0KKworCS8qIHJlZ2lzdGVyIHRoZSB2ZWN0b3JzIG9uZSBieSBvbmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGVzYy0+bnJfdmVjdG9yczsgaSsrKSB7CisJCXN0cnVjdCBpbnRjX3ZlY3QgKnZlY3QgPSBkZXNjLT52ZWN0b3JzICsgaTsKKworCQlpZiAoIXZlY3QtPmVudW1faWQpCisJCQljb250aW51ZTsKIAogCQlpbnRjX3JlZ2lzdGVyX2lycShkZXNjLCBkLCB2ZWN0LT5lbnVtX2lkLCBldnQyaXJxKHZlY3QtPnZlY3QpKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMgYi9kcml2ZXJzL3NoL21hcGxlL21hcGxlLmMKaW5kZXggNjNmMGRlMi4uY2FiMWFiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9tYXBsZS9tYXBsZS5jCisrKyBiL2RyaXZlcnMvc2gvbWFwbGUvbWFwbGUuYwpAQCAtMSwxNiArMSwxMCBAQAogLyoKICAqIENvcmUgbWFwbGUgYnVzIGZ1bmN0aW9uYWxpdHkKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFkcmlhbiBNY01lbmFtaW4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA5IEFkcmlhbiBNY01lbmFtaW4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDA4IFBhdWwgTXVuZHQKLSAqCi0gKiBCYXNlZCBvbiAyLjQgY29kZSBieToKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgWUFFR0FTSEkgVGFrZXNoaQorICogIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMDEgWUFFR0FTSEkgVGFrZXNoaQogICogIENvcHlyaWdodCAoQykgMjAwMSBNLiBSLiBCcm93bgotICogIENvcHlyaWdodCAoQykgMjAwMSBQYXVsIE11bmR0Ci0gKgotICogYW5kIG90aGVycy4KICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMzIsNyArMjYsNyBAQAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9zeXNhc2ljLmg+CiAKLU1PRFVMRV9BVVRIT1IoIllhZWdhc2hpIFRha2VzaGksIFBhdWwgTXVuZHQsIE0uIFIuIEJyb3duLCBBZHJpYW4gTWNNZW5hbWluIik7CitNT0RVTEVfQVVUSE9SKCJBZHJpYW4gTWNNZW5hbWluIDxhZHJpYW5AbWNtZW4uZGVtb24uY28udWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1hcGxlIGJ1cyBkcml2ZXIgZm9yIERyZWFtY2FzdCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7U0VHQSwgRHJlYW1jYXN0L01hcGxlfX0iKTsKQEAgLTQ5LDcgKzQzLDcgQEAKIC8qIG11dGV4IHRvIHByb3RlY3QgcXVldWUgb2Ygd2FpdGluZyBwYWNrZXRzICovCiBzdGF0aWMgREVGSU5FX01VVEVYKG1hcGxlX3dsaXN0X2xvY2spOwogCi1zdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV9kdW1teV9kcml2ZXI7CitzdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CiBzdGF0aWMgc3RydWN0IGRldmljZSBtYXBsZV9idXM7CiBzdGF0aWMgaW50IHN1YmRldmljZV9tYXBbTUFQTEVfUE9SVFNdOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgKm1hcGxlX3NlbmRidWYsICptYXBsZV9zZW5kcHRyLCAqbWFwbGVfbGFzdHB0cjsKQEAgLTYyLDggKzU2LDkgQEAKIAlpbnQgdW5pdDsKIH07CiAKLXN0YXRpYyBib29sIGNoZWNrZWRbNF07Ci1zdGF0aWMgc3RydWN0IG1hcGxlX2RldmljZSAqYmFzZXVuaXRzWzRdOworc3RhdGljIGJvb2wgY2hlY2tlZFtNQVBMRV9QT1JUU107CitzdGF0aWMgYm9vbCBlbXB0eVtNQVBMRV9QT1JUU107CitzdGF0aWMgc3RydWN0IG1hcGxlX2RldmljZSAqYmFzZXVuaXRzW01BUExFX1BPUlRTXTsKIAogLyoqCiAgKiBtYXBsZV9kcml2ZXJfcmVnaXN0ZXIgLSByZWdpc3RlciBhIG1hcGxlIGRyaXZlcgpAQCAtOTcsMTIgKzkyLDIwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9kcml2ZXJfdW5yZWdpc3Rlcik7CiAKIC8qIHNldCBoYXJkd2FyZSByZWdpc3RlcnMgdG8gZW5hYmxlIG5leHQgcm91bmQgb2YgZG1hICovCi1zdGF0aWMgdm9pZCBtYXBsZWJ1c19kbWFfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIG1hcGxlX2RtYV9yZXNldCh2b2lkKQogewogCWN0cmxfb3V0bChNQVBMRV9NQUdJQywgTUFQTEVfUkVTRVQpOwogCS8qIHNldCB0cmlnIHR5cGUgdG8gMCBmb3Igc29mdHdhcmUgdHJpZ2dlciwgMSBmb3IgaGFyZHdhcmUgKFZCTEFOSykgKi8KIAljdHJsX291dGwoMSwgTUFQTEVfVFJJR1RZUEUpOwotCWN0cmxfb3V0bChNQVBMRV8yTUJQUyB8IE1BUExFX1RJTUVPVVQoNTAwMDApLCBNQVBMRV9TUEVFRCk7CisJLyoKKwkqIE1hcGxlIHN5c3RlbSByZWdpc3RlcgorCSogYml0cyAzMSAtIDE2CXRpbWVvdXQgaW4gdW5pdHMgb2YgMjBuc2VjCisJKiBiaXQgMTIJaGFyZCB0cmlnZ2VyIC0gc2V0IDAgdG8ga2VlcCByZXNwb25kaW5nIHRvIFZCTEFOSworCSogYml0cyA5IC0gOAlzZXQgMDAgZm9yIDIgTWJwcywgMDEgZm9yIDEgTWJwcworCSogYml0cyAzIC0gMAlkZWxheSAoaW4gMS4zbXMpIGJldHdlZW4gVkJMQU5LIGFuZCBzdGFydCBvZiBETUEKKwkqIG1heCBkZWxheSBpcyAxMQorCSovCisJY3RybF9vdXRsKE1BUExFXzJNQlBTIHwgTUFQTEVfVElNRU9VVCgweEZGRkYpLCBNQVBMRV9TUEVFRCk7CiAJY3RybF9vdXRsKFBIWVNBRERSKG1hcGxlX3NlbmRidWYpLCBNQVBMRV9ETUFBRERSKTsKIAljdHJsX291dGwoMSwgTUFQTEVfRU5BQkxFKTsKIH0KQEAgLTEzNCwyMSArMTM3LDE2IEBACiB7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKIAlzdHJ1Y3QgbWFwbGVxICptcTsKLQlpZiAoIWRldikKLQkJcmV0dXJuOworCiAJbWRldiA9IHRvX21hcGxlX2RldihkZXYpOwogCW1xID0gbWRldi0+bXE7Ci0JaWYgKG1xKSB7Ci0JCWlmIChtcS0+cmVjdmJ1ZmRjc3ApCi0JCQlrbWVtX2NhY2hlX2ZyZWUobWFwbGVfcXVldWVfY2FjaGUsIG1xLT5yZWN2YnVmZGNzcCk7Ci0JCWtmcmVlKG1xKTsKLQkJbXEgPSBOVUxMOwotCX0KKwlrbWVtX2NhY2hlX2ZyZWUobWFwbGVfcXVldWVfY2FjaGUsIG1xLT5yZWN2YnVmKTsKKwlrZnJlZShtcSk7CiAJa2ZyZWUobWRldik7CiB9CiAKIC8qKgotICogbWFwbGVfYWRkX3BhY2tldCAtIGFkZCBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0byB0aGUgcXVldWUKKyAqIG1hcGxlX2FkZF9wYWNrZXQgLSBhZGQgYSBzaW5nbGUgaW5zdHJ1Y3Rpb24gdG8gdGhlIG1hcGxlIGJ1cyBxdWV1ZQogICogQG1kZXY6IG1hcGxlIGRldmljZQogICogQGZ1bmN0aW9uOiBmdW5jdGlvbiBvbiBkZXZpY2UgYmVpbmcgcXVlcmllZAogICogQGNvbW1hbmQ6IG1hcGxlIGNvbW1hbmQgdG8gYWRkCkBAIC0xNTgsMjMgKzE1NiwxMiBAQAogaW50IG1hcGxlX2FkZF9wYWNrZXQoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdTMyIGZ1bmN0aW9uLCB1MzIgY29tbWFuZCwKIAlzaXplX3QgbGVuZ3RoLCB2b2lkICpkYXRhKQogewotCWludCBsb2NraW5nLCByZXQgPSAwOworCWludCByZXQgPSAwOwogCXZvaWQgKnNlbmRidWYgPSBOVUxMOwogCi0JbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JLyogYm91bmNlIGlmIGRldmljZSBhbHJlYWR5IGxvY2tlZCAqLwotCWxvY2tpbmcgPSBtdXRleF9pc19sb2NrZWQoJm1kZXYtPm1xLT5tdXRleCk7Ci0JaWYgKGxvY2tpbmcpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltdXRleF9sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwotCiAJaWYgKGxlbmd0aCkgewotCQlzZW5kYnVmID0ga21hbGxvYyhsZW5ndGggKiA0LCBHRlBfS0VSTkVMKTsKKwkJc2VuZGJ1ZiA9IGt6YWxsb2MobGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7CiAJCWlmICghc2VuZGJ1ZikgewotCQkJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xODcsODQgKzE3NCwzNiBAQAogCQltZW1jcHkoc2VuZGJ1ZiArIDQsIGRhdGEsIChsZW5ndGggLSAxKSAqIDQpOwogCW1kZXYtPm1xLT5zZW5kYnVmID0gc2VuZGJ1ZjsKIAotCWxpc3RfYWRkKCZtZGV2LT5tcS0+bGlzdCwgJm1hcGxlX3dhaXRxKTsKLW91dDoKKwltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZtZGV2LT5tcS0+bGlzdCwgJm1hcGxlX3dhaXRxKTsKIAltdXRleF91bmxvY2soJm1hcGxlX3dsaXN0X2xvY2spOworb3V0OgogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9hZGRfcGFja2V0KTsKIAotLyoqCi0gKiBtYXBsZV9hZGRfcGFja2V0X3NsZWVwcyAtIGFkZCBhIHNpbmdsZSBpbnN0cnVjdGlvbiB0byB0aGUgcXVldWUKLSAqIEBtZGV2OiBtYXBsZSBkZXZpY2UKLSAqIEBmdW5jdGlvbjogZnVuY3Rpb24gb24gZGV2aWNlIGJlaW5nIHF1ZXJpZWQKLSAqIEBjb21tYW5kOiBtYXBsZSBjb21tYW5kIHRvIGFkZAotICogQGxlbmd0aDogbGVuZ3RoIG9mIGNvbW1hbmQgc3RyaW5nIChpbiAzMiBiaXQgd29yZHMpCi0gKiBAZGF0YTogcmVtYWluZGVyIG9mIGNvbW1hbmQgc3RyaW5nCi0gKgotICogU2FtZSBhcyBtYXBsZV9hZGRfcGFja2V0KCksIGJ1dCB3YWl0cyBmb3IgdGhlIGxvY2sgdG8gYmVjb21lIGZyZWUuCi0gKi8KLWludCBtYXBsZV9hZGRfcGFja2V0X3NsZWVwcyhzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LCB1MzIgZnVuY3Rpb24sCi0JdTMyIGNvbW1hbmQsIHNpemVfdCBsZW5ndGgsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGxvY2tpbmcsIHJldCA9IDA7Ci0Jdm9pZCAqc2VuZGJ1ZiA9IE5VTEw7Ci0KLQlsb2NraW5nID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZtZGV2LT5tcS0+bXV0ZXgpOwotCWlmIChsb2NraW5nKSB7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChsZW5ndGgpIHsKLQkJc2VuZGJ1ZiA9IGttYWxsb2MobGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghc2VuZGJ1ZikgewotCQkJbXV0ZXhfdW5sb2NrKCZtZGV2LT5tcS0+bXV0ZXgpOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCSgoX19iZTMyICopc2VuZGJ1ZilbMF0gPSBjcHVfdG9fYmUzMihmdW5jdGlvbik7Ci0JfQotCi0JbWRldi0+bXEtPmNvbW1hbmQgPSBjb21tYW5kOwotCW1kZXYtPm1xLT5sZW5ndGggPSBsZW5ndGg7Ci0JaWYgKGxlbmd0aCA+IDEpCi0JCW1lbWNweShzZW5kYnVmICsgNCwgZGF0YSwgKGxlbmd0aCAtIDEpICogNCk7Ci0JbWRldi0+bXEtPnNlbmRidWYgPSBzZW5kYnVmOwotCi0JbXV0ZXhfbG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JbGlzdF9hZGQoJm1kZXYtPm1xLT5saXN0LCAmbWFwbGVfd2FpdHEpOwotCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG1hcGxlX2FkZF9wYWNrZXRfc2xlZXBzKTsKLQogc3RhdGljIHN0cnVjdCBtYXBsZXEgKm1hcGxlX2FsbG9jcShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewogCXN0cnVjdCBtYXBsZXEgKm1xOwogCi0JbXEgPSBrbWFsbG9jKHNpemVvZigqbXEpLCBHRlBfS0VSTkVMKTsKKwltcSA9IGt6YWxsb2Moc2l6ZW9mKCptcSksIEdGUF9LRVJORUwpOwogCWlmICghbXEpCiAJCWdvdG8gZmFpbGVkX25vbWVtOwogCisJSU5JVF9MSVNUX0hFQUQoJm1xLT5saXN0KTsKIAltcS0+ZGV2ID0gbWRldjsKLQltcS0+cmVjdmJ1ZmRjc3AgPSBrbWVtX2NhY2hlX3phbGxvYyhtYXBsZV9xdWV1ZV9jYWNoZSwgR0ZQX0tFUk5FTCk7Ci0JbXEtPnJlY3ZidWYgPSAodm9pZCAqKSBQMlNFR0FERFIobXEtPnJlY3ZidWZkY3NwKTsKKwltcS0+cmVjdmJ1ZiA9IGttZW1fY2FjaGVfemFsbG9jKG1hcGxlX3F1ZXVlX2NhY2hlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1xLT5yZWN2YnVmKQogCQlnb3RvIGZhaWxlZF9wMjsKLQkvKgotCSAqIG1vc3QgZGV2aWNlcyBkbyBub3QgbmVlZCB0aGUgbXV0ZXggLSBidXQKLQkgKiBhbnl0aGluZyB0aGF0IGluamVjdHMgYmxvY2sgcmVhZHMgb3Igd3JpdGVzCi0JICogd2lsbCByZWx5IG9uIGl0Ci0JICovCi0JbXV0ZXhfaW5pdCgmbXEtPm11dGV4KTsKKwltcS0+cmVjdmJ1Zi0+YnVmID0gJigobXEtPnJlY3ZidWYtPmJ1ZngpWzBdKTsKIAogCXJldHVybiBtcTsKIAogZmFpbGVkX3AyOgogCWtmcmVlKG1xKTsKIGZhaWxlZF9ub21lbToKKwlkZXZfZXJyKCZtZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBkZXZpY2UgKCVkLCAlZClcbiIsCisJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yNzIsMTIgKzIxMSwxNiBAQAogewogCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXY7CiAKKwkvKiB6ZXJvIHRoaXMgb3V0IHRvIGF2b2lkIGtvYmogc3Vic3lzdGVtCisJKiB0aGlua2luZyBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQgKi8KKwogCW1kZXYgPSBremFsbG9jKHNpemVvZigqbWRldiksIEdGUF9LRVJORUwpOwogCWlmICghbWRldikKIAkJcmV0dXJuIE5VTEw7CiAKIAltZGV2LT5wb3J0ID0gcG9ydDsKIAltZGV2LT51bml0ID0gdW5pdDsKKwogCW1kZXYtPm1xID0gbWFwbGVfYWxsb2NxKG1kZXYpOwogCiAJaWYgKCFtZGV2LT5tcSkgewpAQCAtMjg2LDE5ICsyMjksMTQgQEAKIAl9CiAJbWRldi0+ZGV2LmJ1cyA9ICZtYXBsZV9idXNfdHlwZTsKIAltZGV2LT5kZXYucGFyZW50ID0gJm1hcGxlX2J1czsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZGV2LT5tYXBsZV93YWl0KTsKIAlyZXR1cm4gbWRldjsKIH0KIAogc3RhdGljIHZvaWQgbWFwbGVfZnJlZV9kZXYoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldikKIHsKLQlpZiAoIW1kZXYpCi0JCXJldHVybjsKLQlpZiAobWRldi0+bXEpIHsKLQkJaWYgKG1kZXYtPm1xLT5yZWN2YnVmZGNzcCkKLQkJCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwKLQkJCQltZGV2LT5tcS0+cmVjdmJ1ZmRjc3ApOwotCQlrZnJlZShtZGV2LT5tcSk7Ci0JfQorCWttZW1fY2FjaGVfZnJlZShtYXBsZV9xdWV1ZV9jYWNoZSwgbWRldi0+bXEtPnJlY3ZidWYpOworCWtmcmVlKG1kZXYtPm1xKTsKIAlrZnJlZShtZGV2KTsKIH0KIApAQCAtMzIwLDcgKzI1OCw3IEBACiAJbWFwbGVfbGFzdHB0ciA9IG1hcGxlX3NlbmRwdHI7CiAKIAkqbWFwbGVfc2VuZHB0cisrID0gKHBvcnQgPDwgMTYpIHwgbGVuIHwgMHg4MDAwMDAwMDsKLQkqbWFwbGVfc2VuZHB0cisrID0gUEhZU0FERFIobXEtPnJlY3ZidWYpOworCSptYXBsZV9zZW5kcHRyKysgPSBQSFlTQUREUihtcS0+cmVjdmJ1Zi0+YnVmKTsKIAkqbWFwbGVfc2VuZHB0cisrID0KIAkgICAgbXEtPmNvbW1hbmQgfCAodG8gPDwgOCkgfCAoZnJvbSA8PCAxNikgfCAobGVuIDw8IDI0KTsKIAl3aGlsZSAobGVuLS0gPiAwKQpAQCAtMzMzLDIwICsyNzEsMjggQEAKIAlpbnQgaSwgbWFwbGVfcGFja2V0cyA9IDA7CiAJc3RydWN0IG1hcGxlcSAqbXEsICpubXE7CiAKKwlpZiAoIW1hcGxlX2RtYV9kb25lKCkpCisJCXJldHVybjsKKworCS8qIGRpc2FibGUgRE1BICovCisJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CisKIAlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSkKLQkJcmV0dXJuOworCQlnb3RvIGZpbmlzaDsKKwogCW11dGV4X2xvY2soJm1hcGxlX3dsaXN0X2xvY2spOwotCWlmIChsaXN0X2VtcHR5KCZtYXBsZV93YWl0cSkgfHwgIW1hcGxlX2RtYV9kb25lKCkpIHsKKwlpZiAobGlzdF9lbXB0eSgmbWFwbGVfd2FpdHEpKSB7CiAJCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7Ci0JCXJldHVybjsKKwkJZ290byBmaW5pc2g7CiAJfQotCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CisKIAltYXBsZV9sYXN0cHRyID0gbWFwbGVfc2VuZGJ1ZjsKIAltYXBsZV9zZW5kcHRyID0gbWFwbGVfc2VuZGJ1ZjsKLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcSwgbm1xLCAmbWFwbGVfd2FpdHEsIGxpc3QpIHsKIAkJbWFwbGVfYnVpbGRfYmxvY2sobXEpOwotCQlsaXN0X21vdmUoJm1xLT5saXN0LCAmbWFwbGVfc2VudHEpOworCQlsaXN0X2RlbF9pbml0KCZtcS0+bGlzdCk7CisJCWxpc3RfYWRkX3RhaWwoJm1xLT5saXN0LCAmbWFwbGVfc2VudHEpOwogCQlpZiAobWFwbGVfcGFja2V0cysrID4gTUFQTEVfTUFYUEFDS0VUUykKIAkJCWJyZWFrOwogCX0KQEAgLTM1NiwxMCArMzAyLDEzIEBACiAJCQlkbWFfY2FjaGVfc3luYygwLCBtYXBsZV9zZW5kYnVmICsgaSAqIFBBR0VfU0laRSwKIAkJCQkgICAgICAgUEFHRV9TSVpFLCBETUFfQklESVJFQ1RJT05BTCk7CiAJfQorCitmaW5pc2g6CisJbWFwbGVfZG1hX3Jlc2V0KCk7CiB9CiAKIC8qIGNoZWNrIGlmIHRoZXJlIGlzIGEgZHJpdmVyIHJlZ2lzdGVyZWQgbGlrZWx5IHRvIG1hdGNoIHRoaXMgZGV2aWNlICovCi1zdGF0aWMgaW50IGNoZWNrX21hdGNoaW5nX21hcGxlX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCBtYXBsZV9jaGVja19tYXRjaGluZ19kcml2ZXIoc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlciwKIAkJCQkJdm9pZCAqZGV2cHRyKQogewogCXN0cnVjdCBtYXBsZV9kcml2ZXIgKm1hcGxlX2RydjsKQEAgLTM3NCwxMCArMzIzLDcgQEAKIAogc3RhdGljIHZvaWQgbWFwbGVfZGV0YWNoX2RyaXZlcihzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewotCWlmICghbWRldikKLQkJcmV0dXJuOwogCWRldmljZV91bnJlZ2lzdGVyKCZtZGV2LT5kZXYpOwotCW1kZXYgPSBOVUxMOwogfQogCiAvKiBwcm9jZXNzIGluaXRpYWwgTUFQTEVfQ09NTUFORF9ERVZJTkZPIGZvciBlYWNoIGRldmljZSBvciBwb3J0ICovCkBAIC0zODUsOSArMzMxLDkgQEAKIHsKIAljaGFyICpwLCAqcmVjdmJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZ1bmN0aW9uOwotCWludCBtYXRjaGVkLCByZXR2YWw7CisJaW50IG1hdGNoZWQsIGVycm9yOwogCi0JcmVjdmJ1ZiA9IG1kZXYtPm1xLT5yZWN2YnVmOworCXJlY3ZidWYgPSBtZGV2LT5tcS0+cmVjdmJ1Zi0+YnVmOwogCS8qIGNvcHkgdGhlIGRhdGEgYXMgaW5kaXZpZHVhbCBlbGVtZW50cyBpbgogCSogY2FzZSBvZiBtZW1vcnkgb3B0aW1pc2F0aW9uICovCiAJbWVtY3B5KCZtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uLCByZWN2YnVmICsgNCwgNCk7CkBAIC0zOTUsNyArMzQxLDYgQEAKIAltZW1jcHkoJm1kZXYtPmRldmluZm8uYXJlYV9jb2RlLCByZWN2YnVmICsgMjAsIDEpOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5jb25uZWN0b3JfZGlyZWN0aW9uLCByZWN2YnVmICsgMjEsIDEpOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5wcm9kdWN0X25hbWVbMF0sIHJlY3ZidWYgKyAyMiwgMzApOwotCW1lbWNweSgmbWRldi0+ZGV2aW5mby5wcm9kdWN0X2xpY2VuY2VbMF0sIHJlY3ZidWYgKyA1MiwgNjApOwogCW1lbWNweSgmbWRldi0+ZGV2aW5mby5zdGFuZGJ5X3Bvd2VyLCByZWN2YnVmICsgMTEyLCAyKTsKIAltZW1jcHkoJm1kZXYtPmRldmluZm8ubWF4X3Bvd2VyLCByZWN2YnVmICsgMTE0LCAyKTsKIAltZW1jcHkobWRldi0+cHJvZHVjdF9uYW1lLCBtZGV2LT5kZXZpbmZvLnByb2R1Y3RfbmFtZSwgMzApOwpAQCAtNDE0LDQzICszNTksMzkgQEAKIAkJZWxzZQogCQkJYnJlYWs7CiAKLQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBkZXZpY2UgZGV0ZWN0ZWQ6ICVzXG4iLAotCQltZGV2LT5wcm9kdWN0X25hbWUpOwotCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGRldmljZTogJXNcbiIsIG1kZXYtPnByb2R1Y3RfbGljZW5jZSk7Ci0KIAlmdW5jdGlvbiA9IGJlMzJfdG9fY3B1KG1kZXYtPmRldmluZm8uZnVuY3Rpb24pOwogCisJZGV2X2luZm8oJm1kZXYtPmRldiwgImRldGVjdGVkICVzOiBmdW5jdGlvbiAweCVsWDogYXQgKCVkLCAlZClcbiIsCisJCW1kZXYtPnByb2R1Y3RfbmFtZSwgZnVuY3Rpb24sIG1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOworCiAJaWYgKGZ1bmN0aW9uID4gMHgyMDApIHsKIAkJLyogRG8gdGhpcyBzaWxlbnRseSAtIGFzIG5vdCBhIHJlYWwgZGV2aWNlICovCiAJCWZ1bmN0aW9uID0gMDsKLQkJbWRldi0+ZHJpdmVyID0gJm1hcGxlX2R1bW15X2RyaXZlcjsKLQkJc3ByaW50ZihtZGV2LT5kZXYuYnVzX2lkLCAiJWQ6MC5wb3J0IiwgbWRldi0+cG9ydCk7CisJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CisJCWRldl9zZXRfbmFtZSgmbWRldi0+ZGV2LCAiJWQ6MC5wb3J0IiwgbWRldi0+cG9ydCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJIk1hcGxlIGJ1cyBhdCAoJWQsICVkKTogRnVuY3Rpb24gMHglbFhcbiIsCi0JCQltZGV2LT5wb3J0LCBtZGV2LT51bml0LCBmdW5jdGlvbik7Ci0KIAkJbWF0Y2hlZCA9CiAJCQlidXNfZm9yX2VhY2hfZHJ2KCZtYXBsZV9idXNfdHlwZSwgTlVMTCwgbWRldiwKLQkJCQljaGVja19tYXRjaGluZ19tYXBsZV9kcml2ZXIpOworCQkJCW1hcGxlX2NoZWNrX21hdGNoaW5nX2RyaXZlcik7CiAKIAkJaWYgKG1hdGNoZWQgPT0gMCkgewogCQkJLyogRHJpdmVyIGRvZXMgbm90IGV4aXN0IHlldCAqLwotCQkJcHJpbnRrKEtFUk5fSU5GTwotCQkJCSJObyBtYXBsZSBkcml2ZXIgZm91bmQuXG4iKTsKLQkJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV9kdW1teV9kcml2ZXI7CisJCQlkZXZfaW5mbygmbWRldi0+ZGV2LCAibm8gZHJpdmVyIGZvdW5kXG4iKTsKKwkJCW1kZXYtPmRyaXZlciA9ICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2U7CiAJCX0KLQkJc3ByaW50ZihtZGV2LT5kZXYuYnVzX2lkLCAiJWQ6MCVkLiVsWCIsIG1kZXYtPnBvcnQsCi0JCQltZGV2LT51bml0LCBmdW5jdGlvbik7CisJCWRldl9zZXRfbmFtZSgmbWRldi0+ZGV2LCAiJWQ6MCVkLiVsWCIsIG1kZXYtPnBvcnQsCisJCQkgICAgIG1kZXYtPnVuaXQsIGZ1bmN0aW9uKTsKIAl9CisKIAltZGV2LT5mdW5jdGlvbiA9IGZ1bmN0aW9uOwogCW1kZXYtPmRldi5yZWxlYXNlID0gJm1hcGxlX3JlbGVhc2VfZGV2aWNlOwotCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmbWRldi0+ZGV2KTsKLQlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJIk1hcGxlIGJ1czogQXR0ZW1wdCB0byByZWdpc3RlciBkZXZpY2UiCi0JCSIgKCV4LCAleCkgZmFpbGVkLlxuIiwKLQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisKKwlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwllcnJvciA9IGRldmljZV9yZWdpc3RlcigmbWRldi0+ZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X3dhcm4oJm1kZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBkZXZpY2UgYXQiCisJCQkiICglZCwgJWQpLCB3aXRoIGVycm9yIDB4JVhcbiIsIG1kZXYtPnVuaXQsCisJCQltZGV2LT5wb3J0LCBlcnJvcik7CiAJCW1hcGxlX2ZyZWVfZGV2KG1kZXYpOwogCQltZGV2ID0gTlVMTDsKIAkJcmV0dXJuOwpAQCAtNDYyLDcgKzQwMyw3IEBACiAgKiBwb3J0IGFuZCB1bml0IHRoZW4gcmV0dXJuIDEgLSBhbGxvd3MgaWRlbnRpZmljYXRpb24KICAqIG9mIHdoaWNoIGRldmljZXMgbmVlZCB0byBiZSBhdHRhY2hlZCBvciBkZXRhY2hlZAogICovCi1zdGF0aWMgaW50IGRldGFjaF9tYXBsZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpwb3J0cHRyKQorc3RhdGljIGludCBjaGVja19tYXBsZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpwb3J0cHRyKQogewogCXN0cnVjdCBtYXBsZV9kZXZpY2Vfc3BlY2lmeSAqZHM7CiAJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKQEAgLTQ3NywyMSArNDE4LDI1IEBACiBzdGF0aWMgaW50IHNldHVwX21hcGxlX2NvbW1hbmRzKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqaWdub3JlZCkKIHsKIAlpbnQgYWRkOwotCXN0cnVjdCBtYXBsZV9kZXZpY2UgKm1hcGxlX2RldiA9IHRvX21hcGxlX2RldihkZXZpY2UpOwotCi0JaWYgKChtYXBsZV9kZXYtPmludGVydmFsID4gMCkKLQkgICAgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBtYXBsZV9kZXYtPndoZW4pKSB7Ci0JCS8qIGJvdW5jZSBpZiB3ZSBjYW5ub3QgbG9jayAqLwotCQlhZGQgPSBtYXBsZV9hZGRfcGFja2V0KG1hcGxlX2RldiwKLQkJCWJlMzJfdG9fY3B1KG1hcGxlX2Rldi0+ZGV2aW5mby5mdW5jdGlvbiksCisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiA9IHRvX21hcGxlX2RldihkZXZpY2UpOworCWlmIChtZGV2LT5pbnRlcnZhbCA+IDAgJiYgYXRvbWljX3JlYWQoJm1kZXYtPmJ1c3kpID09IDAgJiYKKwkJdGltZV9hZnRlcihqaWZmaWVzLCBtZGV2LT53aGVuKSkgeworCQkvKiBib3VuY2UgaWYgd2UgY2Fubm90IGFkZCAqLworCQlhZGQgPSBtYXBsZV9hZGRfcGFja2V0KG1kZXYsCisJCQliZTMyX3RvX2NwdShtZGV2LT5kZXZpbmZvLmZ1bmN0aW9uKSwKIAkJCU1BUExFX0NPTU1BTkRfR0VUQ09ORCwgMSwgTlVMTCk7CiAJCWlmICghYWRkKQotCQkJbWFwbGVfZGV2LT53aGVuID0gamlmZmllcyArIG1hcGxlX2Rldi0+aW50ZXJ2YWw7CisJCQltZGV2LT53aGVuID0gamlmZmllcyArIG1kZXYtPmludGVydmFsOwogCX0gZWxzZSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX3BucF90aW1lKSkKLQkJCS8qIFRoaXMgd2lsbCBhbHNvIGJvdW5jZSAqLwotCQkJbWFwbGVfYWRkX3BhY2tldChtYXBsZV9kZXYsIDAsCi0JCQkJTUFQTEVfQ09NTUFORF9ERVZJTkZPLCAwLCBOVUxMKTsKKwkJCS8qIEVuc3VyZSB3ZSBkb24ndCBoYXZlIGJsb2NrIHJlYWRzIGFuZCBkZXZpbmZvCisJCQkqIGNhbGxzIGludGVyZmVyaW5nIHdpdGggb25lIGFub3RoZXIgLSBzbyBmbGFnIHRoZQorCQkJKiBkZXZpY2UgYXMgYnVzeSAqLworCQkJaWYgKGF0b21pY19yZWFkKCZtZGV2LT5idXN5KSA9PSAwKSB7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisJCQkJbWFwbGVfYWRkX3BhY2tldChtZGV2LCAwLAorCQkJCQlNQVBMRV9DT01NQU5EX0RFVklORk8sIDAsIE5VTEwpOworCQkJfQogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQ5OSwyOSArNDQ0LDUwIEBACiAvKiBWQkxBTksgYm90dG9tIGhhbGYgLSBpbXBsZW1lbnRlZCB2aWEgd29ya3F1ZXVlICovCiBzdGF0aWMgdm9pZCBtYXBsZV92YmxhbmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaWYgKCFsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkgfHwgIW1hcGxlX2RtYV9kb25lKCkpCisJaW50IHgsIGxvY2tpbmc7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKKworCWlmICghbWFwbGVfZG1hX2RvbmUoKSkKIAkJcmV0dXJuOwogCiAJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CiAKKwlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3NlbnRxKSkKKwkJZ290byBmaW5pc2g7CisKKwkvKgorCSogU2V0IHVwIGVzc2VudGlhbCBjb21tYW5kcyAtIHRvIGZldGNoIGRhdGEgYW5kCisJKiBjaGVjayBkZXZpY2VzIGFyZSBzdGlsbCBwcmVzZW50CisJKi8KIAlidXNfZm9yX2VhY2hfZGV2KCZtYXBsZV9idXNfdHlwZSwgTlVMTCwgTlVMTCwKLQkJCSBzZXR1cF9tYXBsZV9jb21tYW5kcyk7CisJCXNldHVwX21hcGxlX2NvbW1hbmRzKTsKIAotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG1hcGxlX3BucF90aW1lKSkKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBtYXBsZV9wbnBfdGltZSkpIHsKKwkJLyoKKwkJKiBTY2FuIHRoZSBlbXB0eSBwb3J0cyAtIGJ1cyBpcyBmbGFrZXkgYW5kIG1heSBoYXZlCisJCSogbWlzLXJlcG9ydGVkIGVtcHR5bmVzcworCQkqLworCQlmb3IgKHggPSAwOyB4IDwgTUFQTEVfUE9SVFM7IHgrKykgeworCQkJaWYgKGNoZWNrZWRbeF0gJiYgZW1wdHlbeF0pIHsKKwkJCQltZGV2ID0gYmFzZXVuaXRzW3hdOworCQkJCWlmICghbWRldikKKwkJCQkJYnJlYWs7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMSk7CisJCQkJbG9ja2luZyA9IG1hcGxlX2FkZF9wYWNrZXQobWRldiwgMCwKKwkJCQkJTUFQTEVfQ09NTUFORF9ERVZJTkZPLCAwLCBOVUxMKTsKKwkJCQlpZiAoIWxvY2tpbmcpCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwogCQltYXBsZV9wbnBfdGltZSA9IGppZmZpZXMgKyBNQVBMRV9QTlBfSU5URVJWQUw7Ci0KLQltdXRleF9sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQlpZiAoIWxpc3RfZW1wdHkoJm1hcGxlX3dhaXRxKSAmJiBsaXN0X2VtcHR5KCZtYXBsZV9zZW50cSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZtYXBsZV93bGlzdF9sb2NrKTsKLQkJbWFwbGVfc2VuZCgpOwotCX0gZWxzZSB7Ci0JCW11dGV4X3VubG9jaygmbWFwbGVfd2xpc3RfbG9jayk7CiAJfQogCi0JbWFwbGVidXNfZG1hX3Jlc2V0KCk7CitmaW5pc2g6CisJbWFwbGVfc2VuZCgpOwogfQogCi0vKiBoYW5kbGUgZGV2aWNlcyBhZGRlZCB2aWEgaG90cGx1Z3MgLSBwbGFjaW5nIHRoZW0gb24gcXVldWUgZm9yIERFVklORk8qLworLyogaGFuZGxlIGRldmljZXMgYWRkZWQgdmlhIGhvdHBsdWdzIC0gcGxhY2luZyB0aGVtIG9uIHF1ZXVlIGZvciBERVZJTkZPICovCiBzdGF0aWMgdm9pZCBtYXBsZV9tYXBfc3VidW5pdHMoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgaW50IHN1Ym1hc2spCiB7CiAJaW50IHJldHZhbCwgaywgZGV2Y2hlY2s7CkBAIC01MzMsNyArNDk5LDcgQEAKIAkJZHMudW5pdCA9IGsgKyAxOwogCQlyZXR2YWwgPQogCQkgICAgYnVzX2Zvcl9lYWNoX2RldigmbWFwbGVfYnVzX3R5cGUsIE5VTEwsICZkcywKLQkJCQkgICAgIGRldGFjaF9tYXBsZV9kZXZpY2UpOworCQkJCSAgICAgY2hlY2tfbWFwbGVfZGV2aWNlKTsKIAkJaWYgKHJldHZhbCkgewogCQkJc3VibWFzayA9IHN1Ym1hc2sgPj4gMTsKIAkJCWNvbnRpbnVlOwpAQCAtNTQzLDYgKzUwOSw3IEBACiAJCQltZGV2X2FkZCA9IG1hcGxlX2FsbG9jX2RldihtZGV2LT5wb3J0LCBrICsgMSk7CiAJCQlpZiAoIW1kZXZfYWRkKQogCQkJCXJldHVybjsKKwkJCWF0b21pY19zZXQoJm1kZXZfYWRkLT5idXN5LCAxKTsKIAkJCW1hcGxlX2FkZF9wYWNrZXQobWRldl9hZGQsIDAsIE1BUExFX0NPTU1BTkRfREVWSU5GTywKIAkJCQkwLCBOVUxMKTsKIAkJCS8qIG1hcmsgdGhhdCB3ZSBhcmUgY2hlY2tpbmcgc3ViIGRldmljZXMgKi8KQEAgLTU2NCwyNyArNTMxLDQ1IEBACiB9CiAKIC8qIGhhbmRsZSBlbXB0eSBwb3J0IG9yIGhvdHBsdWcgcmVtb3ZhbCAqLwotc3RhdGljIHZvaWQgbWFwbGVfcmVzcG9uc2Vfbm9uZShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2LAotCQkJCXN0cnVjdCBtYXBsZXEgKm1xKQorc3RhdGljIHZvaWQgbWFwbGVfcmVzcG9uc2Vfbm9uZShzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2KQogewotCWlmIChtZGV2LT51bml0ICE9IDApIHsKLQkJbGlzdF9kZWwoJm1xLT5saXN0KTsKLQkJbWFwbGVfY2xlYW5fc3VibWFwKG1kZXYpOwotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiTWFwbGUgYnVzIGRldmljZSBkZXRhY2hpbmcgYXQgKCVkLCAlZClcbiIsCi0JCSAgICAgICBtZGV2LT5wb3J0LCBtZGV2LT51bml0KTsKKwltYXBsZV9jbGVhbl9zdWJtYXAobWRldik7CisKKwlpZiAobGlrZWx5KG1kZXYtPnVuaXQgIT0gMCkpIHsKKwkJLyoKKwkJKiBCbG9jayBkZXZpY2VzIHBsYXkgdXAKKwkJKiBhbmQgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGV5IGhhdmUKKwkJKiBiZWVuIHJlbW92ZWQgZXZlbiB3aGVuIHN0aWxsIGluIHBsYWNlIG9yCisJCSogdHJpcCB0aGUgbXRkIGxheWVyIHdoZW4gdGhleSBoYXZlCisJCSogcmVhbGx5IGdvbmUgLSB0aGlzIGNvZGUgdHJhcHMgdGhhdCBldmVudHVhbGl0eQorCQkqIGFuZCBlbnN1cmVzIHdlIGFyZW4ndCBvdmVybG9hZGVkIHdpdGggdXNlbGVzcworCQkqIGVycm9yIG1lc3NhZ2VzCisJCSovCisJCWlmIChtZGV2LT5jYW5fdW5sb2FkKSB7CisJCQlpZiAoIW1kZXYtPmNhbl91bmxvYWQobWRldikpIHsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAyKTsKKwkJCQl3YWtlX3VwKCZtZGV2LT5tYXBsZV93YWl0KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKworCQlkZXZfaW5mbygmbWRldi0+ZGV2LCAiZGV0YWNoaW5nIGRldmljZSBhdCAoJWQsICVkKVxuIiwKKwkJCW1kZXYtPnBvcnQsIG1kZXYtPnVuaXQpOwogCQltYXBsZV9kZXRhY2hfZHJpdmVyKG1kZXYpOwogCQlyZXR1cm47Ci0JfQotCWlmICghc3RhcnRlZCB8fCAhZnVsbHNjYW4pIHsKLQkJaWYgKGNoZWNrZWRbbWRldi0+cG9ydF0gPT0gZmFsc2UpIHsKLQkJCWNoZWNrZWRbbWRldi0+cG9ydF0gPSB0cnVlOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gbWFwbGUgZGV2aWNlcyBhdHRhY2hlZCIKLQkJCQkiIHRvIHBvcnQgJWRcbiIsIG1kZXYtPnBvcnQpOworCX0gZWxzZSB7CisJCWlmICghc3RhcnRlZCB8fCAhZnVsbHNjYW4pIHsKKwkJCWlmIChjaGVja2VkW21kZXYtPnBvcnRdID09IGZhbHNlKSB7CisJCQkJY2hlY2tlZFttZGV2LT5wb3J0XSA9IHRydWU7CisJCQkJZW1wdHlbbWRldi0+cG9ydF0gPSB0cnVlOworCQkJCWRldl9pbmZvKCZtZGV2LT5kZXYsICJubyBkZXZpY2VzIgorCQkJCQkiIHRvIHBvcnQgJWRcbiIsIG1kZXYtPnBvcnQpOworCQkJfQorCQkJcmV0dXJuOwogCQl9Ci0JCXJldHVybjsKIAl9Ci0JbWFwbGVfY2xlYW5fc3VibWFwKG1kZXYpOworCS8qIFNvbWUgaGFyZHdhcmUgZGV2aWNlcyBnZW5lcmF0ZSBmYWxzZSBkZXRhY2ggbWVzc2FnZXMgb24gdW5pdCAwICovCisJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CiB9CiAKIC8qIHByZXByb2Nlc3MgaG90cGx1Z3Mgb3Igc2NhbnMgKi8KQEAgLTU5OSw4ICs1ODQsMTEgQEAKIAkJfSBlbHNlIHsKIAkJCWlmIChtZGV2LT51bml0ICE9IDApCiAJCQkJbWFwbGVfYXR0YWNoX2RyaXZlcihtZGV2KTsKKwkJCWlmIChtZGV2LT51bml0ID09IDApIHsKKwkJCQllbXB0eVttZGV2LT5wb3J0XSA9IGZhbHNlOworCQkJCW1hcGxlX2F0dGFjaF9kcml2ZXIobWRldik7CisJCQl9CiAJCX0KLQkJcmV0dXJuOwogCX0KIAlpZiAobWRldi0+dW5pdCA9PSAwKSB7CiAJCXN1Ym1hc2sgPSByZWN2YnVmWzJdICYgMHgxRjsKQEAgLTYxMSw2ICs1OTksMTcgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG1hcGxlX3Jlc3BvbnNlX2ZpbGVlcnIoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdm9pZCAqcmVjdmJ1ZikKK3sKKwlpZiAobWRldi0+ZmlsZWVycl9oYW5kbGVyKSB7CisJCW1kZXYtPmZpbGVlcnJfaGFuZGxlcihtZGV2LCByZWN2YnVmKTsKKwkJcmV0dXJuOworCX0gZWxzZQorCQlkZXZfd2FybigmbWRldi0+ZGV2LCAiZGV2aWNlIGF0ICglZCwgJWQpIHJlcG9ydHMiCisJCQkiZmlsZSBlcnJvciAweCVYXG4iLCBtZGV2LT5wb3J0LCBtZGV2LT51bml0LAorCQkJKChpbnQgKilyZWN2YnVmKVsxXSk7Cit9CisKIHN0YXRpYyB2b2lkIG1hcGxlX3BvcnRfcmVzY2FuKHZvaWQpCiB7CiAJaW50IGk7CkBAIC02MjEsMTIgKzYyMCw2IEBACiAJCWlmIChjaGVja2VkW2ldID09IGZhbHNlKSB7CiAJCQlmdWxsc2NhbiA9IDA7CiAJCQltZGV2ID0gYmFzZXVuaXRzW2ldOwotCQkJLyoKLQkJCSAqICB0ZXN0IGxvY2sgaW4gY2FzZSBzY2FuIGhhcyBmYWlsZWQKLQkJCSAqICBidXQgZGV2aWNlIGlzIHN0aWxsIGxvY2tlZAotCQkJICovCi0JCQlpZiAobXV0ZXhfaXNfbG9ja2VkKCZtZGV2LT5tcS0+bXV0ZXgpKQotCQkJCW11dGV4X3VubG9jaygmbWRldi0+bXEtPm11dGV4KTsKIAkJCW1hcGxlX2FkZF9wYWNrZXQobWRldiwgMCwgTUFQTEVfQ09NTUFORF9ERVZJTkZPLAogCQkJCTAsIE5VTEwpOwogCQl9CkBAIC02MzcsNyArNjMwLDcgQEAKIHN0YXRpYyB2b2lkIG1hcGxlX2RtYV9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgbWFwbGVxICptcSwgKm5tcTsKLQlzdHJ1Y3QgbWFwbGVfZGV2aWNlICpkZXY7CisJc3RydWN0IG1hcGxlX2RldmljZSAqbWRldjsKIAljaGFyICpyZWN2YnVmOwogCWVudW0gbWFwbGVfY29kZSBjb2RlOwogCkBAIC02NDYsNDMgKzYzOSw1NiBAQAogCWN0cmxfb3V0bCgwLCBNQVBMRV9FTkFCTEUpOwogCWlmICghbGlzdF9lbXB0eSgmbWFwbGVfc2VudHEpKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcSwgbm1xLCAmbWFwbGVfc2VudHEsIGxpc3QpIHsKLQkJCXJlY3ZidWYgPSBtcS0+cmVjdmJ1ZjsKKwkJCW1kZXYgPSBtcS0+ZGV2OworCQkJcmVjdmJ1ZiA9IG1xLT5yZWN2YnVmLT5idWY7CisJCQlkbWFfY2FjaGVfc3luYygmbWRldi0+ZGV2LCByZWN2YnVmLCAweDQwMCwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOwogCQkJY29kZSA9IHJlY3ZidWZbMF07Ci0JCQlkZXYgPSBtcS0+ZGV2OwogCQkJa2ZyZWUobXEtPnNlbmRidWYpOwotCQkJbXV0ZXhfdW5sb2NrKCZtcS0+bXV0ZXgpOwogCQkJbGlzdF9kZWxfaW5pdCgmbXEtPmxpc3QpOwotCiAJCQlzd2l0Y2ggKGNvZGUpIHsKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfTk9ORToKLQkJCQltYXBsZV9yZXNwb25zZV9ub25lKGRldiwgbXEpOworCQkJCW1hcGxlX3Jlc3BvbnNlX25vbmUobWRldik7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfREVWSU5GTzoKLQkJCQltYXBsZV9yZXNwb25zZV9kZXZpbmZvKGRldiwgcmVjdmJ1Zik7CisJCQkJbWFwbGVfcmVzcG9uc2VfZGV2aW5mbyhtZGV2LCByZWN2YnVmKTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9EQVRBVFJGOgotCQkJCWlmIChkZXYtPmNhbGxiYWNrKQotCQkJCQlkZXYtPmNhbGxiYWNrKG1xKTsKKwkJCQlpZiAobWRldi0+Y2FsbGJhY2spCisJCQkJCW1kZXYtPmNhbGxiYWNrKG1xKTsKKwkJCQlhdG9taWNfc2V0KCZtZGV2LT5idXN5LCAwKTsKKwkJCQl3YWtlX3VwKCZtZGV2LT5tYXBsZV93YWl0KTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBNQVBMRV9SRVNQT05TRV9GSUxFRVJSOgorCQkJCW1hcGxlX3Jlc3BvbnNlX2ZpbGVlcnIobWRldiwgcmVjdmJ1Zik7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CisJCQkJd2FrZV91cCgmbWRldi0+bWFwbGVfd2FpdCk7CisJCQkJYnJlYWs7CisKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQUdBSU46CiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX0JBRENNRDoKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQkFERlVOQzoKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSAgICAgICAiTWFwbGUgbm9uLWZhdGFsIGVycm9yIDB4JVhcbiIsCi0JCQkJICAgICAgIGNvZGUpOworCQkJCWRldl93YXJuKCZtZGV2LT5kZXYsICJub24tZmF0YWwgZXJyb3IiCisJCQkJCSIgMHglWCBhdCAoJWQsICVkKVxuIiwgY29kZSwKKwkJCQkJbWRldi0+cG9ydCwgbWRldi0+dW5pdCk7CisJCQkJYXRvbWljX3NldCgmbWRldi0+YnVzeSwgMCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgTUFQTEVfUkVTUE9OU0VfQUxMSU5GTzoKLQkJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSAgICAgICAiTWFwbGUgLSBleHRlbmRlZCBkZXZpY2UgaW5mb3JtYXRpb24iCi0JCQkJCSIgbm90IHN1cHBvcnRlZFxuIik7CisJCQkJZGV2X25vdGljZSgmbWRldi0+ZGV2LCAiZXh0ZW5kZWQiCisJCQkJIiBkZXZpY2UgaW5mb3JtYXRpb24gcmVxdWVzdCBmb3IgKCVkLCAlZCkiCisJCQkJIiBidXQgY2FsbCBpcyBub3Qgc3VwcG9ydGVkXG4iLCBtZGV2LT5wb3J0LAorCQkJCW1kZXYtPnVuaXQpOworCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIE1BUExFX1JFU1BPTlNFX09LOgorCQkJCWF0b21pY19zZXQoJm1kZXYtPmJ1c3ksIDApOworCQkJCXdha2VfdXAoJm1kZXYtPm1hcGxlX3dhaXQpOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgpAQCAtNjk5LDIwICs3MDUsMTkgQEAKIAkJaWYgKCFmdWxsc2NhbikKIAkJCW1hcGxlX3BvcnRfcmVzY2FuKCk7CiAJCS8qIG1hcmsgdGhhdCB3ZSBoYXZlIGJlZW4gdGhyb3VnaCB0aGUgZmlyc3Qgc2NhbiAqLwotCQlpZiAoc3RhcnRlZCA9PSAwKQotCQkJc3RhcnRlZCA9IDE7CisJCXN0YXJ0ZWQgPSAxOwogCX0KLQltYXBsZWJ1c19kbWFfcmVzZXQoKTsKKwltYXBsZV9zZW5kKCk7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZWJ1c19kbWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXBsZV9kbWFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAkvKiBMb2FkIGV2ZXJ5dGhpbmcgaW50byB0aGUgYm90dG9tIGhhbGYgKi8KIAlzY2hlZHVsZV93b3JrKCZtYXBsZV9kbWFfcHJvY2Vzcyk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWFwbGVidXNfdmJsYW5rX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgbWFwbGVfdmJsYW5rX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc2NoZWR1bGVfd29yaygmbWFwbGVfdmJsYW5rX3Byb2Nlc3MpOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTcyMCwxNCArNzI1LDE0IEBACiAKIHN0YXRpYyBpbnQgbWFwbGVfc2V0X2RtYV9pbnRlcnJ1cHRfaGFuZGxlcih2b2lkKQogewotCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9NQVBMRV9ETUEsIG1hcGxlYnVzX2RtYV9pbnRlcnJ1cHQsCi0JCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIERNQSIsICZtYXBsZV9kdW1teV9kcml2ZXIpOworCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9NQVBMRV9ETUEsIG1hcGxlX2RtYV9pbnRlcnJ1cHQsCisJCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIERNQSIsICZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UpOwogfQogCiBzdGF0aWMgaW50IG1hcGxlX3NldF92YmxhbmtfaW50ZXJydXB0X2hhbmRsZXIodm9pZCkKIHsKLQlyZXR1cm4gcmVxdWVzdF9pcnEoSFdfRVZFTlRfVlNZTkMsIG1hcGxlYnVzX3ZibGFua19pbnRlcnJ1cHQsCi0JCUlSUUZfU0hBUkVELCAibWFwbGUgYnVzIFZCTEFOSyIsICZtYXBsZV9kdW1teV9kcml2ZXIpOworCXJldHVybiByZXF1ZXN0X2lycShIV19FVkVOVF9WU1lOQywgbWFwbGVfdmJsYW5rX2ludGVycnVwdCwKKwkJSVJRRl9TSEFSRUQsICJtYXBsZSBidXMgVkJMQU5LIiwgJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZSk7CiB9CiAKIHN0YXRpYyBpbnQgbWFwbGVfZ2V0X2RtYV9idWZmZXIodm9pZCkKQEAgLTc0MCw3ICs3NDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1hdGNoX21hcGxlX2J1c19kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2cHRyLAorc3RhdGljIGludCBtYXBsZV9tYXRjaF9idXNfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldnB0ciwKIAkJCQkgIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnZwdHIpCiB7CiAJc3RydWN0IG1hcGxlX2RyaXZlciAqbWFwbGVfZHJ2ID0gdG9fbWFwbGVfZHJpdmVyKGRydnB0cik7CkBAIC03NjUsMjIgKzc3MCwyNCBAQAogewogfQogCi1zdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV9kdW1teV9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IG1hcGxlX2RyaXZlciBtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UgPSB7CiAJLmRydiA9IHsKLQkJLm5hbWUgPSAibWFwbGVfZHVtbXlfZHJpdmVyIiwKKwkJLm5hbWUgPSAibWFwbGVfdW5zdXBwb3J0ZWRfZGV2aWNlIiwKIAkJLmJ1cyA9ICZtYXBsZV9idXNfdHlwZSwKIAl9LAogfTsKLQorLyoqCisgKiBtYXBsZV9idXNfdHlwZSAtIGNvcmUgbWFwbGUgYnVzIHN0cnVjdHVyZQorICovCiBzdHJ1Y3QgYnVzX3R5cGUgbWFwbGVfYnVzX3R5cGUgPSB7CiAJLm5hbWUgPSAibWFwbGUiLAotCS5tYXRjaCA9IG1hdGNoX21hcGxlX2J1c19kcml2ZXIsCisJLm1hdGNoID0gbWFwbGVfbWF0Y2hfYnVzX2RyaXZlciwKIAkudWV2ZW50ID0gbWFwbGVfYnVzX3VldmVudCwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChtYXBsZV9idXNfdHlwZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIG1hcGxlX2J1cyA9IHsKLQkuYnVzX2lkID0gIm1hcGxlIiwKKwkuaW5pdF9uYW1lID0gIm1hcGxlIiwKIAkucmVsZWFzZSA9IG1hcGxlX2J1c19yZWxlYXNlLAogfTsKIApAQCAtNzg4LDcgKzc5NSw4IEBACiB7CiAJaW50IHJldHZhbCwgaTsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICptZGV2W01BUExFX1BPUlRTXTsKLQljdHJsX291dGwoMCwgTUFQTEVfU1RBVEUpOworCisJY3RybF9vdXRsKDAsIE1BUExFX0VOQUJMRSk7CiAKIAlyZXR2YWwgPSBkZXZpY2VfcmVnaXN0ZXIoJm1hcGxlX2J1cyk7CiAJaWYgKHJldHZhbCkKQEAgLTc5OCwzNiArODA2LDMzIEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBjbGVhbnVwX2RldmljZTsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmbWFwbGVfZHVtbXlfZHJpdmVyLmRydik7CisJcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZtYXBsZV91bnN1cHBvcnRlZF9kZXZpY2UuZHJ2KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGNsZWFudXBfYnVzOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBtYXBsZSBidXMgZG1hICovCiAJcmV0dmFsID0gbWFwbGVfZ2V0X2RtYV9idWZmZXIoKTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICJNYXBsZSBidXM6IEZhaWxlZCB0byBhbGxvY2F0ZSBNYXBsZSBETUEgYnVmZmVyc1xuIik7CisJCWRldl9lcnIoJm1hcGxlX2J1cywgImZhaWxlZCB0byBhbGxvY2F0ZSBETUEgYnVmZmVyc1xuIik7CiAJCWdvdG8gY2xlYW51cF9iYXNpYzsKIAl9CiAKIAkvKiBzZXQgdXAgRE1BIGludGVycnVwdCBoYW5kbGVyICovCiAJcmV0dmFsID0gbWFwbGVfc2V0X2RtYV9pbnRlcnJ1cHRfaGFuZGxlcigpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIk1hcGxlIGJ1czogRmFpbGVkIHRvIGdyYWIgbWFwbGUgRE1BIElSUVxuIik7CisJCWRldl9lcnIoJm1hcGxlX2J1cywgImJ1cyBmYWlsZWQgdG8gZ3JhYiBtYXBsZSAiCisJCQkiRE1BIElSUVxuIik7CiAJCWdvdG8gY2xlYW51cF9kbWE7CiAJfQogCiAJLyogc2V0IHVwIFZCTEFOSyBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCXJldHZhbCA9IG1hcGxlX3NldF92YmxhbmtfaW50ZXJydXB0X2hhbmRsZXIoKTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIk1hcGxlIGJ1czogRmFpbGVkIHRvIGdyYWIgVkJMQU5LIElSUVxuIik7CisJCWRldl9lcnIoJm1hcGxlX2J1cywgImJ1cyBmYWlsZWQgdG8gZ3JhYiBWQkxBTksgSVJRXG4iKTsKIAkJZ290byBjbGVhbnVwX2lycTsKIAl9CiAKLQltYXBsZV9xdWV1ZV9jYWNoZSA9Ci0JICAgIGttZW1fY2FjaGVfY3JlYXRlKCJtYXBsZV9xdWV1ZV9jYWNoZSIsIDB4NDAwLCAwLAotCQkJICAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKwltYXBsZV9xdWV1ZV9jYWNoZSA9IEtNRU1fQ0FDSEUobWFwbGVfYnVmZmVyLCBTTEFCX0hXQ0FDSEVfQUxJR04pOwogCiAJaWYgKCFtYXBsZV9xdWV1ZV9jYWNoZSkKIAkJZ290byBjbGVhbnVwX2JvdGhpcnFzOwpAQCAtODM4LDIzICs4NDMsMjMgQEAKIAkvKiBzZXR1cCBtYXBsZSBwb3J0cyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVBMRV9QT1JUUzsgaSsrKSB7CiAJCWNoZWNrZWRbaV0gPSBmYWxzZTsKKwkJZW1wdHlbaV0gPSBmYWxzZTsKIAkJbWRldltpXSA9IG1hcGxlX2FsbG9jX2RldihpLCAwKTsKLQkJYmFzZXVuaXRzW2ldID0gbWRldltpXTsKIAkJaWYgKCFtZGV2W2ldKSB7CiAJCQl3aGlsZSAoaS0tID4gMCkKIAkJCQltYXBsZV9mcmVlX2RldihtZGV2W2ldKTsKIAkJCWdvdG8gY2xlYW51cF9jYWNoZTsKIAkJfQorCQliYXNldW5pdHNbaV0gPSBtZGV2W2ldOworCQlhdG9taWNfc2V0KCZtZGV2W2ldLT5idXN5LCAxKTsKIAkJbWFwbGVfYWRkX3BhY2tldChtZGV2W2ldLCAwLCBNQVBMRV9DT01NQU5EX0RFVklORk8sIDAsIE5VTEwpOwogCQlzdWJkZXZpY2VfbWFwW2ldID0gMDsKIAl9CiAKLQkvKiBzZXR1cCBtYXBsZWJ1cyBoYXJkd2FyZSAqLwotCW1hcGxlYnVzX2RtYV9yZXNldCgpOwotCS8qIGluaXRpYWwgZGV0ZWN0aW9uICovCisJbWFwbGVfcG5wX3RpbWUgPSBqaWZmaWVzICsgSFo7CisJLyogcHJlcGFyZSBpbml0aWFsIHF1ZXVlICovCiAJbWFwbGVfc2VuZCgpOwotCW1hcGxlX3BucF90aW1lID0gamlmZmllczsKLQlwcmludGsoS0VSTl9JTkZPICJNYXBsZSBidXMgY29yZSBub3cgcmVnaXN0ZXJlZC5cbiIpOworCWRldl9pbmZvKCZtYXBsZV9idXMsICJidXMgY29yZSBub3cgcmVnaXN0ZXJlZFxuIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtODcxLDcgKzg3Niw3IEBACiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgbWFwbGVfc2VuZGJ1ZiwgTUFQTEVfRE1BX1BBR0VTKTsKIAogY2xlYW51cF9iYXNpYzoKLQlkcml2ZXJfdW5yZWdpc3RlcigmbWFwbGVfZHVtbXlfZHJpdmVyLmRydik7CisJZHJpdmVyX3VucmVnaXN0ZXIoJm1hcGxlX3Vuc3VwcG9ydGVkX2RldmljZS5kcnYpOwogCiBjbGVhbnVwX2J1czoKIAlidXNfdW5yZWdpc3RlcigmbWFwbGVfYnVzX3R5cGUpOwpAQCAtODgwLDcgKzg4NSw3IEBACiAJZGV2aWNlX3VucmVnaXN0ZXIoJm1hcGxlX2J1cyk7CiAKIGNsZWFudXA6Ci0JcHJpbnRrKEtFUk5fSU5GTyAiTWFwbGUgYnVzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCXByaW50ayhLRVJOX0VSUiAiTWFwbGUgYnVzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCXJldHVybiByZXR2YWw7CiB9CiAvKiBQdXNoIGluaXQgdG8gbGF0ZXIgdG8gZW5zdXJlIGhhcmR3YXJlIGdldHMgZGV0ZWN0ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvc3VwZXJoeXdheS9zdXBlcmh5d2F5LmMgYi9kcml2ZXJzL3NoL3N1cGVyaHl3YXkvc3VwZXJoeXdheS5jCmluZGV4IDRkMDI4MmIuLjJkOWU3ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2gvc3VwZXJoeXdheS9zdXBlcmh5d2F5LmMKKysrIGIvZHJpdmVycy9zaC9zdXBlcmh5d2F5L3N1cGVyaHl3YXkuYwpAQCAtMjIsNyArMjIsNyBAQAogc3RhdGljIGludCBzdXBlcmh5d2F5X2RldmljZXM7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlIHN1cGVyaHl3YXlfYnVzX2RldmljZSA9IHsKLQkuYnVzX2lkID0gInN1cGVyaHl3YXkiLAorCS5pbml0X25hbWUgPSAic3VwZXJoeXdheSIsCiB9OwogCiBzdGF0aWMgdm9pZCBzdXBlcmh5d2F5X2RldmljZV9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTgzLDcgKzgzLDcgQEAKIAlkZXYtPmlkLmlkCQk9IGRldi0+dmNyLm1vZF9pZDsKIAogCXNwcmludGYoZGV2LT5uYW1lLCAiU3VwZXJIeXdheSBkZXZpY2UgJTA0eCIsIGRldi0+aWQuaWQpOwotCXNwcmludGYoZGV2LT5kZXYuYnVzX2lkLCAiJTAyeCIsIHN1cGVyaHl3YXlfZGV2aWNlcyk7CisJZGV2X3NldF9uYW1lKCZkZXYtPmRldiwgIiUwMngiLCBzdXBlcmh5d2F5X2RldmljZXMpOwogCiAJc3VwZXJoeXdheV9kZXZpY2VzKys7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F0bWVsX3NwaS5jIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKaW5kZXggNTZmZjNlNi4uMTJlNDQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvYXRtZWxfc3BpLmMKQEAgLTMyMiw3ICszMjIsNyBAQAogCXNwaSA9IG1zZy0+c3BpOwogCiAJZGV2X2RiZyhtYXN0ZXItPmRldi5wYXJlbnQsICJzdGFydCBtZXNzYWdlICVwIGZvciAlc1xuIiwKLQkJCW1zZywgc3BpLT5kZXYuYnVzX2lkKTsKKwkJCW1zZywgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAKIAkvKiBzZWxlY3QgY2hpcCBpZiBpdCdzIG5vdCBzdGlsbCBhY3RpdmUgKi8KIAlpZiAoYXMtPnN0YXkpIHsKQEAgLTYyNyw3ICs2MjcsNyBAQAogCQlpZiAoIWFzZCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCXJldCA9IGdwaW9fcmVxdWVzdChucGNzX3Bpbiwgc3BpLT5kZXYuYnVzX2lkKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG5wY3NfcGluLCBkZXZfbmFtZSgmc3BpLT5kZXYpKTsKIAkJaWYgKHJldCkgewogCQkJa2ZyZWUoYXNkKTsKIAkJCXJldHVybiByZXQ7CkBAIC02NjgsNyArNjY4LDcgQEAKIAlhcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwogCiAJZGV2X2RiZyhjb250cm9sbGVyLCAibmV3IG1lc3NhZ2UgJXAgc3VibWl0dGVkIGZvciAlc1xuIiwKLQkJCW1zZywgc3BpLT5kZXYuYnVzX2lkKTsKKwkJCW1zZywgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAKIAlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmbXNnLT50cmFuc2ZlcnMpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC04MDMsNyArODAzLDcgQEAKIAlhcy0+Y2xrID0gY2xrOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdG1lbF9zcGlfaW50ZXJydXB0LCAwLAotCQkJcGRldi0+ZGV2LmJ1c19pZCwgbWFzdGVyKTsKKwkJCWRldl9uYW1lKCZwZGV2LT5kZXYpLCBtYXN0ZXIpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VubWFwX3JlZ3M7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKaW5kZXggM2I5NzgwMy4uNjhjNzdhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKQEAgLTQyOSw3ICs0MjksNyBAQAogCUlOSVRfTElTVF9IRUFEKCZtcHMtPnF1ZXVlKTsKIAogCW1wcy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCi0JCW1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJZGV2X25hbWUobWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKG1wcy0+d29ya3F1ZXVlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGZyZWVfaXJxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYyBiL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKaW5kZXggNDU0YTI3MS4uZDZkMGM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYworKysgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCkBAIC0xMDAzLDcgKzEwMDMsNyBAQAogCQlnb3RvIGVycjE7CiAJfQogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHItPnN0YXJ0LCAoci0+ZW5kIC0gci0+c3RhcnQpICsgMSwKLQkJCXBkZXYtPmRldi5idXNfaWQpKSB7CisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSkpIHsKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIGVycjE7CiAJfQpAQCAtMTAyMSwxMyArMTAyMSwxMyBAQAogCXNwaW5fbG9ja19pbml0KCZtY3NwaS0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJm1jc3BpLT5tc2dfcXVldWUpOwogCi0JbWNzcGktPmljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1jc3BpX2ljayIpOworCW1jc3BpLT5pY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJpY2siKTsKIAlpZiAoSVNfRVJSKG1jc3BpLT5pY2spKSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgImNhbid0IGdldCBtY3NwaV9pY2tcbiIpOwogCQlzdGF0dXMgPSBQVFJfRVJSKG1jc3BpLT5pY2spOwogCQlnb3RvIGVycjFhOwogCX0KLQltY3NwaS0+ZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibWNzcGlfZmNrIik7CisJbWNzcGktPmZjayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImZjayIpOwogCWlmIChJU19FUlIobWNzcGktPmZjaykpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IG1jc3BpX2Zja1xuIik7CiAJCXN0YXR1cyA9IFBUUl9FUlIobWNzcGktPmZjayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMgYi9kcml2ZXJzL3NwaS9vbWFwX3V3aXJlLmMKaW5kZXggYmFiNmZmMC4uZmU4YjlhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvb21hcF91d2lyZS5jCisrKyBiL2RyaXZlcnMvc3BpL29tYXBfdXdpcmUuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAKICNpZmRlZglWRVJCT1NFCiAJCQlwcl9kZWJ1ZygiJXM6IHdyaXRlLSVkID0lMDR4XG4iLAotCQkJCQlzcGktPmRldi5idXNfaWQsIGJpdHMsIHZhbCk7CisJCQkJCWRldl9uYW1lKCZzcGktPmRldiksIGJpdHMsIHZhbCk7CiAjZW5kaWYKIAkJCWlmICh3YWl0X3V3aXJlX2Nzcl9mbGFnKENTUkIsIDAsIDApKQogCQkJCWdvdG8gZWlvOwpAQCAtMzA1LDcgKzMwNSw3IEBACiAJCQlzdGF0dXMgKz0gYnl0ZXM7CiAjaWZkZWYJVkVSQk9TRQogCQkJcHJfZGVidWcoIiVzOiByZWFkLSVkID0lMDR4XG4iLAotCQkJCQlzcGktPmRldi5idXNfaWQsIGJpdHMsIHZhbCk7CisJCQkJCWRldl9uYW1lKCZzcGktPmRldiksIGJpdHMsIHZhbCk7CiAjZW5kaWYKIAogCQl9CkBAIC0zMzEsNyArMzMxLDcgQEAKIAl1d2lyZSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwogCiAJaWYgKHNwaS0+Y2hpcF9zZWxlY3QgPiAzKSB7Ci0JCXByX2RlYnVnKCIlczogY3MlZD9cbiIsIHNwaS0+ZGV2LmJ1c19pZCwgc3BpLT5jaGlwX3NlbGVjdCk7CisJCXByX2RlYnVnKCIlczogY3MlZD9cbiIsIGRldl9uYW1lKCZzcGktPmRldiksIHNwaS0+Y2hpcF9zZWxlY3QpOwogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMzQzLDcgKzM0Myw3IEBACiAJCWJpdHMgPSA4OwogCiAJaWYgKGJpdHMgPiAxNikgewotCQlwcl9kZWJ1ZygiJXM6IHdvcmRzaXplICVkP1xuIiwgc3BpLT5kZXYuYnVzX2lkLCBiaXRzKTsKKwkJcHJfZGVidWcoIiVzOiB3b3Jkc2l6ZSAlZD9cbiIsIGRldl9uYW1lKCZzcGktPmRldiksIGJpdHMpOwogCQlzdGF0dXMgPSAtRU5PREVWOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtMzc4LDcgKzM3OCw3IEBACiAJCWh6ID0gdC0+c3BlZWRfaHo7CiAKIAlpZiAoIWh6KSB7Ci0JCXByX2RlYnVnKCIlczogemVybyBzcGVlZD9cbiIsIHNwaS0+ZGV2LmJ1c19pZCk7CisJCXByX2RlYnVnKCIlczogemVybyBzcGVlZD9cbiIsIGRldl9uYW1lKCZzcGktPmRldikpOwogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtNDA2LDcgKzQwNiw3IEBACiAJfQogCWlmIChkaXYxX2lkeCA9PSA0KSB7CiAJCXByX2RlYnVnKCIlczogbG93ZXN0IGNsb2NrICVsZCwgbmVlZCAlZFxuIiwKLQkJCXNwaS0+ZGV2LmJ1c19pZCwgcmF0ZSAvIDEwIC8gOCwgaHopOworCQkJZGV2X25hbWUoJnNwaS0+ZGV2KSwgcmF0ZSAvIDEwIC8gOCwgaHopOwogCQlzdGF0dXMgPSAtRURPTTsKIAkJZ290byBkb25lOwogCX0KQEAgLTUwNiwxMSArNTA2LDEyIEBACiAKIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgdXdpcmUpOwogCi0JdXdpcmUtPmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiYXJteG9yX2NrIik7Ci0JaWYgKCF1d2lyZS0+Y2sgfHwgSVNfRVJSKHV3aXJlLT5jaykpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gbXB1X3hvcl9jbGsgP1xuIik7CisJdXdpcmUtPmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUih1d2lyZS0+Y2spKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIodXdpcmUtPmNrKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gZnVuY3Rpb25hbCBjbG9jaz9cbiIpOwogCQlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIHN0YXR1czsKIAl9CiAJY2xrX2VuYWJsZSh1d2lyZS0+Y2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9vcmlvbl9zcGkuYyBiL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCmluZGV4IDAxNGJlY2IuLmM4YjBiYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL29yaW9uX3NwaS5jCkBAIC00OTYsNyArNDk2LDcgQEAKIAl9CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyLT5zdGFydCwgKHItPmVuZCAtIHItPnN0YXJ0KSArIDEsCi0JCQkJcGRldi0+ZGV2LmJ1c19pZCkpIHsKKwkJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSkpIHsKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMgYi9kcml2ZXJzL3NwaS9weGEyeHhfc3BpLmMKaW5kZXggZDBmYzRjYS4uMzNmY2VmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGkuYwpAQCAtMzQsOCArMzQsNiBAQAogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogCiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zc3AuaD4KICNpbmNsdWRlIDxtYWNoL3NzcC5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4X3NwaS5oPgpAQCAtMTMzMyw3ICsxMzMxLDcgQEAKIAogCUlOSVRfV09SSygmZHJ2X2RhdGEtPnB1bXBfbWVzc2FnZXMsIHB1bXBfbWVzc2FnZXMpOwogCWRydl9kYXRhLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJCQkJZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJCQlkZXZfbmFtZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKGRydl9kYXRhLT53b3JrcXVldWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMTQ2Miw3ICsxNDYwLDcgQEAKIAkJZHJ2X2RhdGEtPm1hc2tfc3IgPSBTU1NSX1RJTlQgfCBTU1NSX1JGUyB8IFNTU1JfVEZTIHwgU1NTUl9ST1I7CiAJfQogCi0Jc3RhdHVzID0gcmVxdWVzdF9pcnEoc3NwLT5pcnEsIHNzcF9pbnQsIDAsIGRldi0+YnVzX2lkLCBkcnZfZGF0YSk7CisJc3RhdHVzID0gcmVxdWVzdF9pcnEoc3NwLT5pcnEsIHNzcF9pbnQsIDAsIGRldl9uYW1lKGRldiksIGRydl9kYXRhKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IElSUSAlZFxuIiwgc3NwLT5pcnEpOwogCQlnb3RvIG91dF9lcnJvcl9tYXN0ZXJfYWxsb2M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jIGIvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYwppbmRleCA3ZmVhM2NmLi4zNDEwYjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKQEAgLTExNjAsOCArMTE2MCw4IEBACiAKIAkvKiBpbml0IG1lc3NhZ2VzIHdvcmtxdWV1ZSAqLwogCUlOSVRfV09SSygmZHJ2X2RhdGEtPnB1bXBfbWVzc2FnZXMsIHB1bXBfbWVzc2FnZXMpOwotCWRydl9kYXRhLT53b3JrcXVldWUgPQotCSAgICBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50LT5idXNfaWQpOworCWRydl9kYXRhLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKKwkJCQlkZXZfbmFtZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKGRydl9kYXRhLT53b3JrcXVldWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2dwaW8uYyBiL2RyaXZlcnMvc3BpL3NwaV9ncGlvLmMKaW5kZXggZjVlZDk3Mi4uZDI4NjZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2dwaW8uYworKysgYi9kcml2ZXJzL3NwaS9zcGlfZ3Bpby5jCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoIXNwaS0+Y29udHJvbGxlcl9zdGF0ZSkgewotCQlzdGF0dXMgPSBncGlvX3JlcXVlc3QoY3MsIHNwaS0+ZGV2LmJ1c19pZCk7CisJCXN0YXR1cyA9IGdwaW9fcmVxdWVzdChjcywgZGV2X25hbWUoJnNwaS0+ZGV2KSk7CiAJCWlmIChzdGF0dXMpCiAJCQlyZXR1cm4gc3RhdHVzOwogCQlzdGF0dXMgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoY3MsIHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwppbmRleCAyNjlhNTVlLi4wNDgwZDhiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2lteC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9pbXguYwpAQCAtMTM4MSw3ICsxMzgxLDcgQEAKIAogCUlOSVRfV09SSygmZHJ2X2RhdGEtPndvcmssIHB1bXBfbWVzc2FnZXMpOwogCWRydl9kYXRhLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgKLQkJCQkJZHJ2X2RhdGEtPm1hc3Rlci0+ZGV2LnBhcmVudC0+YnVzX2lkKTsKKwkJCQlkZXZfbmFtZShkcnZfZGF0YS0+bWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKGRydl9kYXRhLT53b3JrcXVldWUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIApAQCAtMTUyNSw3ICsxNTI1LDggQEAKIAkJc3RhdHVzID0gLUVOT0RFVjsKIAkJZ290byBlcnJfbm9faXJxcmVzOwogCX0KLQlzdGF0dXMgPSByZXF1ZXN0X2lycShpcnEsIHNwaV9pbnQsIElSUUZfRElTQUJMRUQsIGRldi0+YnVzX2lkLCBkcnZfZGF0YSk7CisJc3RhdHVzID0gcmVxdWVzdF9pcnEoaXJxLCBzcGlfaW50LCBJUlFGX0RJU0FCTEVELAorCQkJICAgICBkZXZfbmFtZShkZXYpLCBkcnZfZGF0YSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicHJvYmUgLSBjYW5ub3QgZ2V0IElSUSAoJWQpXG4iLCBzdGF0dXMpOwogCQlnb3RvIGVycl9ub19pcnFyZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jIGIvZHJpdmVycy9zcGkvc3BpX21wYzgzeHguYwppbmRleCBhYzBlM2U0Li40NGEyYjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfbXBjODN4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaV9tcGM4M3h4LmMKQEAgLTYzNyw3ICs2MzcsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZtcGM4M3h4X3NwaS0+cXVldWUpOwogCiAJbXBjODN4eF9zcGktPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKAotCQltYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJCWRldl9uYW1lKG1hc3Rlci0+ZGV2LnBhcmVudCkpOwogCWlmIChtcGM4M3h4X3NwaS0+d29ya3F1ZXVlID09IE5VTEwpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGZyZWVfaXJxOwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICIlczogTVBDODN4eCBTUEkgQ29udHJvbGxlciBkcml2ZXIgYXQgMHglcCAoaXJxID0gJWQpXG4iLAotCSAgICAgICBkZXYtPmRldi5idXNfaWQsIG1wYzgzeHhfc3BpLT5iYXNlLCBtcGM4M3h4X3NwaS0+aXJxKTsKKwkgICAgICAgZGV2X25hbWUoJmRldi0+ZGV2KSwgbXBjODN4eF9zcGktPmJhc2UsIG1wYzgzeHhfc3BpLT5pcnEpOwogCiAJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX3R4eDkuYyBiL2RyaXZlcnMvc3BpL3NwaV90eHg5LmMKaW5kZXggMjI5NmYzNy4uMjljYmIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX3R4eDkuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfdHh4OS5jCkBAIC00MDQsNyArNDA0LDggQEAKIAlpZiAocmV0KQogCQlnb3RvIGV4aXQ7CiAKLQljLT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShtYXN0ZXItPmRldi5wYXJlbnQtPmJ1c19pZCk7CisJYy0+d29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoCisJCQkJZGV2X25hbWUobWFzdGVyLT5kZXYucGFyZW50KSk7CiAJaWYgKCFjLT53b3JrcXVldWUpCiAJCWdvdG8gZXhpdF9idXN5OwogCWMtPmxhc3RfY2hpcHNlbGVjdCA9IC0xOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvS2NvbmZpZyBiL2RyaXZlcnMvc3NiL0tjb25maWcKaW5kZXggYjFiOTQ3ZS4uNTQwYTI5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3NzYi9LY29uZmlnCkBAIC01MywxMSArNTMsMTEgQEAKIAogY29uZmlnIFNTQl9QQ01DSUFIT1NUX1BPU1NJQkxFCiAJYm9vbAotCWRlcGVuZHMgb24gU1NCICYmIChQQ01DSUEgPSB5IHx8IFBDTUNJQSA9IFNTQikgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBTU0IgJiYgKFBDTUNJQSA9IHkgfHwgUENNQ0lBID0gU1NCKQogCWRlZmF1bHQgeQogCiBjb25maWcgU1NCX1BDTUNJQUhPU1QKLQlib29sICJTdXBwb3J0IGZvciBTU0Igb24gUENNQ0lBLWJ1cyBob3N0IChFWFBFUklNRU5UQUwpIgorCWJvb2wgIlN1cHBvcnQgZm9yIFNTQiBvbiBQQ01DSUEtYnVzIGhvc3QiCiAJZGVwZW5kcyBvbiBTU0JfUENNQ0lBSE9TVF9QT1NTSUJMRQogCXNlbGVjdCBTU0JfU1BST00KIAloZWxwCkBAIC0xMDcsMTQgKzEwNywxNCBAQAogCSAgSWYgdW5zdXJlLCBzYXkgWQogCiBjb25maWcgU1NCX1BDSUNPUkVfSE9TVE1PREUKLQlib29sICJIb3N0bW9kZSBzdXBwb3J0IGZvciBTU0IgUENJIGNvcmUgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBTU0JfRFJJVkVSX1BDSUNPUkUgJiYgU1NCX0RSSVZFUl9NSVBTICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIkhvc3Rtb2RlIHN1cHBvcnQgZm9yIFNTQiBQQ0kgY29yZSIKKwlkZXBlbmRzIG9uIFNTQl9EUklWRVJfUENJQ09SRSAmJiBTU0JfRFJJVkVSX01JUFMKIAloZWxwCiAJICBQQ0ljb3JlIGhvc3Rtb2RlIG9wZXJhdGlvbiAoZXh0ZXJuYWwgUENJIGJ1cykuCiAKIGNvbmZpZyBTU0JfRFJJVkVSX01JUFMKLQlib29sICJTU0IgQnJvYWRjb20gTUlQUyBjb3JlIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFNTQiAmJiBNSVBTICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIlNTQiBCcm9hZGNvbSBNSVBTIGNvcmUgZHJpdmVyIgorCWRlcGVuZHMgb24gU1NCICYmIE1JUFMKIAlzZWxlY3QgU1NCX1NFUklBTAogCWhlbHAKIAkgIERyaXZlciBmb3IgdGhlIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZSBhdHRhY2hlZApAQCAtMTI5LDggKzEyOSw4IEBACiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBTU0JfRFJJVkVSX0VYVElGCi0JYm9vbCAiU1NCIEJyb2FkY29tIEVYVElGIGNvcmUgZHJpdmVyIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gU1NCX0RSSVZFUl9NSVBTICYmIEVYUEVSSU1FTlRBTAorCWJvb2wgIlNTQiBCcm9hZGNvbSBFWFRJRiBjb3JlIGRyaXZlciIKKwlkZXBlbmRzIG9uIFNTQl9EUklWRVJfTUlQUwogCWhlbHAKIAkgIERyaXZlciBmb3IgdGhlIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZSBhdHRhY2hlZAogCSAgQnJvYWRjb20gRVhUSUYgY29yZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL01ha2VmaWxlIGIvZHJpdmVycy9zc2IvTWFrZWZpbGUKaW5kZXggNmYyNTVlOS4uY2ZiYjc0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zc2IvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiAKICMgYnVpbHQtaW4gZHJpdmVycwogc3NiLXkJCQkJCSs9IGRyaXZlcl9jaGlwY29tbW9uLm8KK3NzYi15CQkJCQkrPSBkcml2ZXJfY2hpcGNvbW1vbl9wbXUubwogc3NiLSQoQ09ORklHX1NTQl9EUklWRVJfTUlQUykJCSs9IGRyaXZlcl9taXBzY29yZS5vCiBzc2ItJChDT05GSUdfU1NCX0RSSVZFUl9FWFRJRikJCSs9IGRyaXZlcl9leHRpZi5vCiBzc2ItJChDT05GSUdfU1NCX0RSSVZFUl9QQ0lDT1JFKQkrPSBkcml2ZXJfcGNpY29yZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9iNDNfcGNpX2JyaWRnZS5jIGIvZHJpdmVycy9zc2IvYjQzX3BjaV9icmlkZ2UuYwppbmRleCAyZDI3ZDZkLi5lZjljNmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9iNDNfcGNpX2JyaWRnZS5jCisrKyBiL2RyaXZlcnMvc3NiL2I0M19wY2lfYnJpZGdlLmMKQEAgLTE4LDkgKzE4LDExIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiNDNfcGNpX2JyaWRnZV90YmxbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzAxKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMDYpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMwNykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzExKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTIpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMxNSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzE4KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMTkpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyMCkgfSwKQEAgLTI5LDYgKzMxLDcgQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzI1KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDQzMjgpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4NDMyOSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg0MzJiKSB9LAogCXsgMCwgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYjQzX3BjaV9icmlkZ2VfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMgYi9kcml2ZXJzL3NzYi9kcml2ZXJfY2hpcGNvbW1vbi5jCmluZGV4IDU3MWY0ZmQuLjk2ODE1MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uLmMKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb24uYwpAQCAtMjYsMTkgKzI2LDYgQEAKIH07CiAKIAotc3RhdGljIGlubGluZSB1MzIgY2hpcGNvX3JlYWQzMihzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAotCQkJCXUxNiBvZmZzZXQpCi17Ci0JcmV0dXJuIHNzYl9yZWFkMzIoY2MtPmRldiwgb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNoaXBjb193cml0ZTMyKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsCi0JCQkJICB1MTYgb2Zmc2V0LAotCQkJCSAgdTMyIHZhbHVlKQotewotCXNzYl93cml0ZTMyKGNjLT5kZXYsIG9mZnNldCwgdmFsdWUpOwotfQotCiBzdGF0aWMgaW5saW5lIHUzMiBjaGlwY29fd3JpdGUzMl9tYXNrZWQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYywgdTE2IG9mZnNldCwKIAkJCQkJdTMyIG1hc2ssIHUzMiB2YWx1ZSkKIHsKQEAgLTI0Niw2ICsyMzMsNyBAQAogewogCWlmICghY2MtPmRldikKIAkJcmV0dXJuOyAvKiBXZSBkb24ndCBoYXZlIGEgQ2hpcENvbW1vbiAqLworCXNzYl9wbXVfaW5pdChjYyk7CiAJY2hpcGNvX3Bvd2VyY29udHJvbF9pbml0KGNjKTsKIAlzc2JfY2hpcGNvX3NldF9jbG9ja21vZGUoY2MsIFNTQl9DTEtNT0RFX0ZBU1QpOwogCWNhbGNfZmFzdF9wb3dlcnVwX2RlbGF5KGNjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFhZGRlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jCkBAIC0wLDAgKzEsNTA4IEBACisvKgorICogU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisgKiBCcm9hZGNvbSBDaGlwQ29tbW9uIFBvd2VyIE1hbmFnZW1lbnQgVW5pdCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSwgTWljaGFlbCBCdWVzY2ggPG1iQGJ1M3NjaC5kZT4KKyAqIENvcHlyaWdodCAyMDA3LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHTlUvR1BMLiBTZWUgQ09QWUlORyBmb3IgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc3NiL3NzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2JfcmVncy5oPgorI2luY2x1ZGUgPGxpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAic3NiX3ByaXZhdGUuaCIKKworc3RhdGljIHUzMiBzc2JfY2hpcGNvX3BsbF9yZWFkKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsIHUzMiBvZmZzZXQpCit7CisJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUExMQ1RMX0FERFIsIG9mZnNldCk7CisJcmV0dXJuIGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUExMQ1RMX0RBVEEpOworfQorCitzdGF0aWMgdm9pZCBzc2JfY2hpcGNvX3BsbF93cml0ZShzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAorCQkJCSB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpCit7CisJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUExMQ1RMX0FERFIsIG9mZnNldCk7CisJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUExMQ1RMX0RBVEEsIHZhbHVlKTsKK30KKworc3RydWN0IHBtdTBfcGxsdGFiX2VudHJ5IHsKKwl1MTYgZnJlcTsJLyogQ3J5c3RhbCBmcmVxdWVuY3kgaW4ga0h6LiovCisJdTggeGY7CQkvKiBDcnlzdGFsIGZyZXF1ZW5jeSB2YWx1ZSBmb3IgUE1VIGNvbnRyb2wgKi8KKwl1OCB3Yl9pbnQ7CisJdTMyIHdiX2ZyYWM7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdTBfcGxsdGFiX2VudHJ5IHBtdTBfcGxsdGFiW10gPSB7CisJeyAuZnJlcSA9IDEyMDAwLCAueGYgPSAgMSwgLndiX2ludCA9IDczLCAud2JfZnJhYyA9IDM0OTUyNSwgfSwKKwl7IC5mcmVxID0gMTMwMDAsIC54ZiA9ICAyLCAud2JfaW50ID0gNjcsIC53Yl9mcmFjID0gNzI1OTM3LCB9LAorCXsgLmZyZXEgPSAxNDQwMCwgLnhmID0gIDMsIC53Yl9pbnQgPSA2MSwgLndiX2ZyYWMgPSAxMTY1MDgsIH0sCisJeyAuZnJlcSA9IDE1MzYwLCAueGYgPSAgNCwgLndiX2ludCA9IDU3LCAud2JfZnJhYyA9IDMwNTgzNCwgfSwKKwl7IC5mcmVxID0gMTYyMDAsIC54ZiA9ICA1LCAud2JfaW50ID0gNTQsIC53Yl9mcmFjID0gMzM2NTc5LCB9LAorCXsgLmZyZXEgPSAxNjgwMCwgLnhmID0gIDYsIC53Yl9pbnQgPSA1MiwgLndiX2ZyYWMgPSAzOTk0NTcsIH0sCisJeyAuZnJlcSA9IDE5MjAwLCAueGYgPSAgNywgLndiX2ludCA9IDQ1LCAud2JfZnJhYyA9IDg3MzgxMywgfSwKKwl7IC5mcmVxID0gMTk4MDAsIC54ZiA9ICA4LCAud2JfaW50ID0gNDQsIC53Yl9mcmFjID0gNDY2MDMzLCB9LAorCXsgLmZyZXEgPSAyMDAwMCwgLnhmID0gIDksIC53Yl9pbnQgPSA0NCwgLndiX2ZyYWMgPSAwLCAgICAgIH0sCisJeyAuZnJlcSA9IDI1MDAwLCAueGYgPSAxMCwgLndiX2ludCA9IDcwLCAud2JfZnJhYyA9IDQxOTQzMCwgfSwKKwl7IC5mcmVxID0gMjYwMDAsIC54ZiA9IDExLCAud2JfaW50ID0gNjcsIC53Yl9mcmFjID0gNzI1OTM3LCB9LAorCXsgLmZyZXEgPSAzMDAwMCwgLnhmID0gMTIsIC53Yl9pbnQgPSA1OCwgLndiX2ZyYWMgPSA2OTkwNTAsIH0sCisJeyAuZnJlcSA9IDM4NDAwLCAueGYgPSAxMywgLndiX2ludCA9IDQ1LCAud2JfZnJhYyA9IDg3MzgxMywgfSwKKwl7IC5mcmVxID0gNDAwMDAsIC54ZiA9IDE0LCAud2JfaW50ID0gNDUsIC53Yl9mcmFjID0gMCwgICAgICB9LAorfTsKKyNkZWZpbmUgU1NCX1BNVTBfREVGQVVMVF9YVEFMRlJFUQkyMDAwMAorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdTBfcGxsdGFiX2VudHJ5ICogcG11MF9wbGx0YWJfZmluZF9lbnRyeSh1MzIgY3J5c3RhbGZyZXEpCit7CisJY29uc3Qgc3RydWN0IHBtdTBfcGxsdGFiX2VudHJ5ICplOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG11MF9wbGx0YWIpOyBpKyspIHsKKwkJZSA9ICZwbXUwX3BsbHRhYltpXTsKKwkJaWYgKGUtPmZyZXEgPT0gY3J5c3RhbGZyZXEpCisJCQlyZXR1cm4gZTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogVHVuZSB0aGUgUExMIHRvIHRoZSBjcnlzdGFsIHNwZWVkLiBjcnlzdGFsZnJlcSBpcyBpbiBrSHouICovCitzdGF0aWMgdm9pZCBzc2JfcG11MF9wbGxpbml0X3IwKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MsCisJCQkJdTMyIGNyeXN0YWxmcmVxKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBjYy0+ZGV2LT5idXM7CisJY29uc3Qgc3RydWN0IHBtdTBfcGxsdGFiX2VudHJ5ICplID0gTlVMTDsKKwl1MzIgcG11Y3RsLCB0bXAsIHBsbGN0bDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICgoYnVzLT5jaGlwX2lkID09IDB4NTM1NCkgJiYgIWNyeXN0YWxmcmVxKSB7CisJCS8qIFRoZSA1MzU0IGNyeXN0YWwgZnJlcSBpcyAyNU1IeiAqLworCQljcnlzdGFsZnJlcSA9IDI1MDAwOworCX0KKwlpZiAoY3J5c3RhbGZyZXEpCisJCWUgPSBwbXUwX3BsbHRhYl9maW5kX2VudHJ5KGNyeXN0YWxmcmVxKTsKKwlpZiAoIWUpCisJCWUgPSBwbXUwX3BsbHRhYl9maW5kX2VudHJ5KFNTQl9QTVUwX0RFRkFVTFRfWFRBTEZSRVEpOworCUJVR19PTighZSk7CisJY3J5c3RhbGZyZXEgPSBlLT5mcmVxOworCWNjLT5wbXUuY3J5c3RhbGZyZXEgPSBlLT5mcmVxOworCisJLyogQ2hlY2sgaWYgdGhlIFBMTCBhbHJlYWR5IGlzIHByb2dyYW1tZWQgdG8gdGhpcyBmcmVxdWVuY3kuICovCisJcG11Y3RsID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMKTsKKwlpZiAoKChwbXVjdGwgJiBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVEpID4+IFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUV9TSElGVCkgPT0gZS0+eGYpIHsKKwkJLyogV2UncmUgYWxyZWFkeSB0aGVyZS4uLiAqLworCQlyZXR1cm47CisJfQorCisJc3NiX3ByaW50ayhLRVJOX0lORk8gUEZYICJQcm9ncmFtbWluZyBQTEwgdG8gJXUuJTAzdSBNSHpcbiIsCisJCSAgIChjcnlzdGFsZnJlcSAvIDEwMDApLCAoY3J5c3RhbGZyZXEgJSAxMDAwKSk7CisKKwkvKiBGaXJzdCB0dXJuIHRoZSBQTEwgb2ZmLiAqLworCXN3aXRjaCAoYnVzLT5jaGlwX2lkKSB7CisJY2FzZSAweDQzMjg6CisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX01JTlJFU19NU0ssCisJCQkgICAgICB+KDEgPDwgU1NCX1BNVVJFU180MzI4X0JCX1BMTF9QVSkpOworCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NQVhSRVNfTVNLLAorCQkJICAgICAgfigxIDw8IFNTQl9QTVVSRVNfNDMyOF9CQl9QTExfUFUpKTsKKwkJYnJlYWs7CisJY2FzZSAweDUzNTQ6CisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX01JTlJFU19NU0ssCisJCQkgICAgICB+KDEgPDwgU1NCX1BNVVJFU181MzU0X0JCX1BMTF9QVSkpOworCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9NQVhSRVNfTVNLLAorCQkJICAgICAgfigxIDw8IFNTQl9QTVVSRVNfNTM1NF9CQl9QTExfUFUpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU1NCX1dBUk5fT04oMSk7CisJfQorCWZvciAoaSA9IDE1MDA7IGk7IGktLSkgeworCQl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NMS0NUTFNUKTsKKwkJaWYgKCEodG1wICYgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQpKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCXRtcCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fQ0xLQ1RMU1QpOworCWlmICh0bXAgJiBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVIVCkKKwkJc3NiX3ByaW50ayhLRVJOX0VNRVJHIFBGWCAiRmFpbGVkIHRvIHR1cm4gdGhlIFBMTCBvZmYhXG4iKTsKKworCS8qIFNldCBQRElWIGluIFBMTCBjb250cm9sIDAuICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTBfUExMQ1RMMCk7CisJaWYgKGNyeXN0YWxmcmVxID49IFNTQl9QTVUwX1BMTENUTDBfUERJVl9GUkVRKQorCQlwbGxjdGwgfD0gU1NCX1BNVTBfUExMQ1RMMF9QRElWX01TSzsKKwllbHNlCisJCXBsbGN0bCAmPSB+U1NCX1BNVTBfUExMQ1RMMF9QRElWX01TSzsKKwlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTBfUExMQ1RMMCwgcGxsY3RsKTsKKworCS8qIFNldCBXSUxEIGluIFBMTCBjb250cm9sIDEuICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTBfUExMQ1RMMSk7CisJcGxsY3RsICY9IH5TU0JfUE1VMF9QTExDVEwxX1NUT1BNT0Q7CisJcGxsY3RsICY9IH4oU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0lNU0sgfCBTU0JfUE1VMF9QTExDVEwxX1dJTERfRk1TSyk7CisJcGxsY3RsIHw9ICgodTMyKWUtPndiX2ludCA8PCBTU0JfUE1VMF9QTExDVEwxX1dJTERfSU1TS19TSElGVCkgJiBTU0JfUE1VMF9QTExDVEwxX1dJTERfSU1TSzsKKwlwbGxjdGwgfD0gKCh1MzIpZS0+d2JfZnJhYyA8PCBTU0JfUE1VMF9QTExDVEwxX1dJTERfRk1TS19TSElGVCkgJiBTU0JfUE1VMF9QTExDVEwxX1dJTERfRk1TSzsKKwlpZiAoZS0+d2JfZnJhYyA9PSAwKQorCQlwbGxjdGwgfD0gU1NCX1BNVTBfUExMQ1RMMV9TVE9QTU9EOworCXNzYl9jaGlwY29fcGxsX3dyaXRlKGNjLCBTU0JfUE1VMF9QTExDVEwxLCBwbGxjdGwpOworCisJLyogU2V0IFdJTEQgaW4gUExMIGNvbnRyb2wgMi4gKi8KKwlwbGxjdGwgPSBzc2JfY2hpcGNvX3BsbF9yZWFkKGNjLCBTU0JfUE1VMF9QTExDVEwyKTsKKwlwbGxjdGwgJj0gflNTQl9QTVUwX1BMTENUTDJfV0lMRF9JTVNLSEk7CisJcGxsY3RsIHw9ICgoKHUzMillLT53Yl9pbnQgPj4gNCkgPDwgU1NCX1BNVTBfUExMQ1RMMl9XSUxEX0lNU0tISV9TSElGVCkgJiBTU0JfUE1VMF9QTExDVEwyX1dJTERfSU1TS0hJOworCXNzYl9jaGlwY29fcGxsX3dyaXRlKGNjLCBTU0JfUE1VMF9QTExDVEwyLCBwbGxjdGwpOworCisJLyogU2V0IHRoZSBjcnlzdGFsZnJlcXVlbmN5IGFuZCB0aGUgZGl2aXNvci4gKi8KKwlwbXVjdGwgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwpOworCXBtdWN0bCAmPSB+U1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVY7CisJcG11Y3RsIHw9ICgoKGNyeXN0YWxmcmVxICsgMTI3KSAvIDEyOCAtIDEpIDw8IFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWX1NISUZUKQorCQkJJiBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVjsKKwlwbXVjdGwgJj0gflNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUTsKKwlwbXVjdGwgfD0gKCh1MzIpZS0+eGYgPDwgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRX1NISUZUKSAmIFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUTsKKwljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMLCBwbXVjdGwpOworfQorCitzdHJ1Y3QgcG11MV9wbGx0YWJfZW50cnkgeworCXUxNiBmcmVxOwkvKiBDcnlzdGFsIGZyZXF1ZW5jeSBpbiBrSHouKi8KKwl1OCB4ZjsJCS8qIENyeXN0YWwgZnJlcXVlbmN5IHZhbHVlIGZvciBQTVUgY29udHJvbCAqLworCXU4IG5kaXZfaW50OworCXUzMiBuZGl2X2ZyYWM7CisJdTggcDFkaXY7CisJdTggcDJkaXY7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtdTFfcGxsdGFiX2VudHJ5IHBtdTFfcGxsdGFiW10gPSB7CisJeyAuZnJlcSA9IDEyMDAwLCAueGYgPSAgMSwgLnAxZGl2ID0gMywgLnAyZGl2ID0gMjIsIC5uZGl2X2ludCA9ICAweDksIC5uZGl2X2ZyYWMgPSAweEZGRkZFRiwgfSwKKwl7IC5mcmVxID0gMTMwMDAsIC54ZiA9ICAyLCAucDFkaXYgPSAxLCAucDJkaXYgPSAgNiwgLm5kaXZfaW50ID0gIDB4YiwgLm5kaXZfZnJhYyA9IDB4NDgzNDgzLCB9LAorCXsgLmZyZXEgPSAxNDQwMCwgLnhmID0gIDMsIC5wMWRpdiA9IDEsIC5wMmRpdiA9IDEwLCAubmRpdl9pbnQgPSAgMHhhLCAubmRpdl9mcmFjID0gMHgxQzcxQzcsIH0sCisJeyAuZnJlcSA9IDE1MzYwLCAueGYgPSAgNCwgLnAxZGl2ID0gMSwgLnAyZGl2ID0gIDUsIC5uZGl2X2ludCA9ICAweGIsIC5uZGl2X2ZyYWMgPSAweDc1NTU1NSwgfSwKKwl7IC5mcmVxID0gMTYyMDAsIC54ZiA9ICA1LCAucDFkaXYgPSAxLCAucDJkaXYgPSAxMCwgLm5kaXZfaW50ID0gIDB4NSwgLm5kaXZfZnJhYyA9IDB4NkU5RTA2LCB9LAorCXsgLmZyZXEgPSAxNjgwMCwgLnhmID0gIDYsIC5wMWRpdiA9IDEsIC5wMmRpdiA9IDEwLCAubmRpdl9pbnQgPSAgMHg1LCAubmRpdl9mcmFjID0gMHgzQ0YzQ0YsIH0sCisJeyAuZnJlcSA9IDE5MjAwLCAueGYgPSAgNywgLnAxZGl2ID0gMSwgLnAyZGl2ID0gIDksIC5uZGl2X2ludCA9ICAweDUsIC5uZGl2X2ZyYWMgPSAweDE3QjQyNSwgfSwKKwl7IC5mcmVxID0gMTk4MDAsIC54ZiA9ICA4LCAucDFkaXYgPSAxLCAucDJkaXYgPSAxMSwgLm5kaXZfaW50ID0gIDB4NCwgLm5kaXZfZnJhYyA9IDB4QTU3RUIsICB9LAorCXsgLmZyZXEgPSAyMDAwMCwgLnhmID0gIDksIC5wMWRpdiA9IDEsIC5wMmRpdiA9IDExLCAubmRpdl9pbnQgPSAgMHg0LCAubmRpdl9mcmFjID0gMCwgICAgICAgIH0sCisJeyAuZnJlcSA9IDI0MDAwLCAueGYgPSAxMCwgLnAxZGl2ID0gMywgLnAyZGl2ID0gMTEsIC5uZGl2X2ludCA9ICAweGEsIC5uZGl2X2ZyYWMgPSAwLCAgICAgICAgfSwKKwl7IC5mcmVxID0gMjUwMDAsIC54ZiA9IDExLCAucDFkaXYgPSA1LCAucDJkaXYgPSAxNiwgLm5kaXZfaW50ID0gIDB4YiwgLm5kaXZfZnJhYyA9IDAsICAgICAgICB9LAorCXsgLmZyZXEgPSAyNjAwMCwgLnhmID0gMTIsIC5wMWRpdiA9IDEsIC5wMmRpdiA9ICAyLCAubmRpdl9pbnQgPSAweDEwLCAubmRpdl9mcmFjID0gMHhFQzRFQzQsIH0sCisJeyAuZnJlcSA9IDMwMDAwLCAueGYgPSAxMywgLnAxZGl2ID0gMywgLnAyZGl2ID0gIDgsIC5uZGl2X2ludCA9ICAweGIsIC5uZGl2X2ZyYWMgPSAwLCAgICAgICAgfSwKKwl7IC5mcmVxID0gMzg0MDAsIC54ZiA9IDE0LCAucDFkaXYgPSAxLCAucDJkaXYgPSAgNSwgLm5kaXZfaW50ID0gIDB4NCwgLm5kaXZfZnJhYyA9IDB4OTU1NTU1LCB9LAorCXsgLmZyZXEgPSA0MDAwMCwgLnhmID0gMTUsIC5wMWRpdiA9IDEsIC5wMmRpdiA9ICAyLCAubmRpdl9pbnQgPSAgMHhiLCAubmRpdl9mcmFjID0gMCwgICAgICAgIH0sCit9OworCisjZGVmaW5lIFNTQl9QTVUxX0RFRkFVTFRfWFRBTEZSRVEJMTUzNjAKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXUxX3BsbHRhYl9lbnRyeSAqIHBtdTFfcGxsdGFiX2ZpbmRfZW50cnkodTMyIGNyeXN0YWxmcmVxKQoreworCWNvbnN0IHN0cnVjdCBwbXUxX3BsbHRhYl9lbnRyeSAqZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtdTFfcGxsdGFiKTsgaSsrKSB7CisJCWUgPSAmcG11MV9wbGx0YWJbaV07CisJCWlmIChlLT5mcmVxID09IGNyeXN0YWxmcmVxKQorCQkJcmV0dXJuIGU7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFR1bmUgdGhlIFBMTCB0byB0aGUgY3J5c3RhbCBzcGVlZC4gY3J5c3RhbGZyZXEgaXMgaW4ga0h6LiAqLworc3RhdGljIHZvaWQgc3NiX3BtdTFfcGxsaW5pdF9yMChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjLAorCQkJCXUzMiBjcnlzdGFsZnJlcSkKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOworCWNvbnN0IHN0cnVjdCBwbXUxX3BsbHRhYl9lbnRyeSAqZSA9IE5VTEw7CisJdTMyIGJ1ZmZlcl9zdHJlbmd0aCA9IDA7CisJdTMyIHRtcCwgcGxsY3RsLCBwbXVjdGw7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoYnVzLT5jaGlwX2lkID09IDB4NDMxMikgeworCQkvKiBXZSBkbyBub3QgdG91Y2ggdGhlIEJDTTQzMTIgUExMIGFuZCBhc3N1bWUKKwkJICogdGhlIGRlZmF1bHQgY3J5c3RhbCBzZXR0aW5ncyB3b3JrIG91dC1vZi10aGUtYm94LiAqLworCQljYy0+cG11LmNyeXN0YWxmcmVxID0gMjAwMDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY3J5c3RhbGZyZXEpCisJCWUgPSBwbXUxX3BsbHRhYl9maW5kX2VudHJ5KGNyeXN0YWxmcmVxKTsKKwlpZiAoIWUpCisJCWUgPSBwbXUxX3BsbHRhYl9maW5kX2VudHJ5KFNTQl9QTVUxX0RFRkFVTFRfWFRBTEZSRVEpOworCUJVR19PTighZSk7CisJY3J5c3RhbGZyZXEgPSBlLT5mcmVxOworCWNjLT5wbXUuY3J5c3RhbGZyZXEgPSBlLT5mcmVxOworCisJLyogQ2hlY2sgaWYgdGhlIFBMTCBhbHJlYWR5IGlzIHByb2dyYW1tZWQgdG8gdGhpcyBmcmVxdWVuY3kuICovCisJcG11Y3RsID0gY2hpcGNvX3JlYWQzMihjYywgU1NCX0NISVBDT19QTVVfQ1RMKTsKKwlpZiAoKChwbXVjdGwgJiBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVEpID4+IFNTQl9DSElQQ09fUE1VX0NUTF9YVEFMRlJFUV9TSElGVCkgPT0gZS0+eGYpIHsKKwkJLyogV2UncmUgYWxyZWFkeSB0aGVyZS4uLiAqLworCQlyZXR1cm47CisJfQorCisJc3NiX3ByaW50ayhLRVJOX0lORk8gUEZYICJQcm9ncmFtbWluZyBQTEwgdG8gJXUuJTAzdSBNSHpcbiIsCisJCSAgIChjcnlzdGFsZnJlcSAvIDEwMDApLCAoY3J5c3RhbGZyZXEgJSAxMDAwKSk7CisKKwkvKiBGaXJzdCB0dXJuIHRoZSBQTEwgb2ZmLiAqLworCXN3aXRjaCAoYnVzLT5jaGlwX2lkKSB7CisJY2FzZSAweDQzMjU6CisJCWNoaXBjb19tYXNrMzIoY2MsIFNTQl9DSElQQ09fUE1VX01JTlJFU19NU0ssCisJCQkgICAgICB+KCgxIDw8IFNTQl9QTVVSRVNfNDMyNV9CQlBMTF9QV1JTV19QVSkgfAorCQkJCSgxIDw8IFNTQl9QTVVSRVNfNDMyNV9IVF9BVkFJTCkpKTsKKwkJY2hpcGNvX21hc2szMihjYywgU1NCX0NISVBDT19QTVVfTUFYUkVTX01TSywKKwkJCSAgICAgIH4oKDEgPDwgU1NCX1BNVVJFU180MzI1X0JCUExMX1BXUlNXX1BVKSB8CisJCQkJKDEgPDwgU1NCX1BNVVJFU180MzI1X0hUX0FWQUlMKSkpOworCQkvKiBBZGp1c3QgdGhlIEJCUExMIHRvIDIgb24gYWxsIGNoYW5uZWxzIGxhdGVyLiAqLworCQlidWZmZXJfc3RyZW5ndGggPSAweDIyMjIyMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU1NCX1dBUk5fT04oMSk7CisJfQorCWZvciAoaSA9IDE1MDA7IGk7IGktLSkgeworCQl0bXAgPSBjaGlwY29fcmVhZDMyKGNjLCBTU0JfQ0hJUENPX0NMS0NUTFNUKTsKKwkJaWYgKCEodG1wICYgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQpKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMCk7CisJfQorCXRtcCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fQ0xLQ1RMU1QpOworCWlmICh0bXAgJiBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVIVCkKKwkJc3NiX3ByaW50ayhLRVJOX0VNRVJHIFBGWCAiRmFpbGVkIHRvIHR1cm4gdGhlIFBMTCBvZmYhXG4iKTsKKworCS8qIFNldCBwMWRpdiBhbmQgcDJkaXYuICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTFfUExMQ1RMMCk7CisJcGxsY3RsICY9IH4oU1NCX1BNVTFfUExMQ1RMMF9QMURJViB8IFNTQl9QTVUxX1BMTENUTDBfUDJESVYpOworCXBsbGN0bCB8PSAoKHUzMillLT5wMWRpdiA8PCBTU0JfUE1VMV9QTExDVEwwX1AxRElWX1NISUZUKSAmIFNTQl9QTVUxX1BMTENUTDBfUDFESVY7CisJcGxsY3RsIHw9ICgodTMyKWUtPnAyZGl2IDw8IFNTQl9QTVUxX1BMTENUTDBfUDJESVZfU0hJRlQpICYgU1NCX1BNVTFfUExMQ1RMMF9QMkRJVjsKKwlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTFfUExMQ1RMMCwgcGxsY3RsKTsKKworCS8qIFNldCBuZGl2IGludCBhbmQgbmRpdiBtb2RlICovCisJcGxsY3RsID0gc3NiX2NoaXBjb19wbGxfcmVhZChjYywgU1NCX1BNVTFfUExMQ1RMMik7CisJcGxsY3RsICY9IH4oU1NCX1BNVTFfUExMQ1RMMl9ORElWSU5UIHwgU1NCX1BNVTFfUExMQ1RMMl9ORElWTU9ERSk7CisJcGxsY3RsIHw9ICgodTMyKWUtPm5kaXZfaW50IDw8IFNTQl9QTVUxX1BMTENUTDJfTkRJVklOVF9TSElGVCkgJiBTU0JfUE1VMV9QTExDVEwyX05ESVZJTlQ7CisJcGxsY3RsIHw9ICgxIDw8IFNTQl9QTVUxX1BMTENUTDJfTkRJVk1PREVfU0hJRlQpICYgU1NCX1BNVTFfUExMQ1RMMl9ORElWTU9ERTsKKwlzc2JfY2hpcGNvX3BsbF93cml0ZShjYywgU1NCX1BNVTFfUExMQ1RMMiwgcGxsY3RsKTsKKworCS8qIFNldCBuZGl2IGZyYWMgKi8KKwlwbGxjdGwgPSBzc2JfY2hpcGNvX3BsbF9yZWFkKGNjLCBTU0JfUE1VMV9QTExDVEwzKTsKKwlwbGxjdGwgJj0gflNTQl9QTVUxX1BMTENUTDNfTkRJVkZSQUM7CisJcGxsY3RsIHw9ICgodTMyKWUtPm5kaXZfZnJhYyA8PCBTU0JfUE1VMV9QTExDVEwzX05ESVZGUkFDX1NISUZUKSAmIFNTQl9QTVUxX1BMTENUTDNfTkRJVkZSQUM7CisJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUxX1BMTENUTDMsIHBsbGN0bCk7CisKKwkvKiBDaGFuZ2UgdGhlIGRyaXZlIHN0cmVuZ3RoLCBpZiByZXF1aXJlZC4gKi8KKwlpZiAoYnVmZmVyX3N0cmVuZ3RoKSB7CisJCXBsbGN0bCA9IHNzYl9jaGlwY29fcGxsX3JlYWQoY2MsIFNTQl9QTVUxX1BMTENUTDUpOworCQlwbGxjdGwgJj0gflNTQl9QTVUxX1BMTENUTDVfQ0xLRFJWOworCQlwbGxjdGwgfD0gKGJ1ZmZlcl9zdHJlbmd0aCA8PCBTU0JfUE1VMV9QTExDVEw1X0NMS0RSVl9TSElGVCkgJiBTU0JfUE1VMV9QTExDVEw1X0NMS0RSVjsKKwkJc3NiX2NoaXBjb19wbGxfd3JpdGUoY2MsIFNTQl9QTVUxX1BMTENUTDUsIHBsbGN0bCk7CisJfQorCisJLyogVHVuZSB0aGUgY3J5c3RhbGZyZXEgYW5kIHRoZSBkaXZpc29yLiAqLworCXBtdWN0bCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCk7CisJcG11Y3RsICY9IH4oU1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVYgfCBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVEpOworCXBtdWN0bCB8PSAoKCgodTMyKWUtPmZyZXEgKyAxMjcpIC8gMTI4IC0gMSkgPDwgU1NCX0NISVBDT19QTVVfQ1RMX0lMUF9ESVZfU0hJRlQpCisJCQkmIFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWOworCXBtdWN0bCB8PSAoKHUzMillLT54ZiA8PCBTU0JfQ0hJUENPX1BNVV9DVExfWFRBTEZSRVFfU0hJRlQpICYgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVROworCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwsIHBtdWN0bCk7Cit9CisKK3N0YXRpYyB2b2lkIHNzYl9wbXVfcGxsX2luaXQoc3RydWN0IHNzYl9jaGlwY29tbW9uICpjYykKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gY2MtPmRldi0+YnVzOworCXUzMiBjcnlzdGFsZnJlcSA9IDA7IC8qIGluIGtIei4gMCA9IGtlZXAgZGVmYXVsdCBmcmVxLiAqLworCisJaWYgKGJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9TU0IpIHsKKwkJLyogVE9ETzogVGhlIHVzZXIgbWF5IG92ZXJyaWRlIHRoZSBjcnlzdGFsIGZyZXF1ZW5jeS4gKi8KKwl9CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcF9pZCkgeworCWNhc2UgMHg0MzEyOgorCWNhc2UgMHg0MzI1OgorCQlzc2JfcG11MV9wbGxpbml0X3IwKGNjLCBjcnlzdGFsZnJlcSk7CisJCWJyZWFrOworCWNhc2UgMHg0MzI4OgorCWNhc2UgMHg1MzU0OgorCQlzc2JfcG11MF9wbGxpbml0X3IwKGNjLCBjcnlzdGFsZnJlcSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNzYl9wcmludGsoS0VSTl9FUlIgUEZYCisJCQkgICAiRVJST1I6IFBMTCBpbml0IHVua25vd24gZm9yIGRldmljZSAlMDRYXG4iLAorCQkJICAgYnVzLT5jaGlwX2lkKTsKKwl9Cit9CisKK3N0cnVjdCBwbXVfcmVzX3VwZG93bl90YWJfZW50cnkgeworCXU4IHJlc291cmNlOwkvKiBUaGUgcmVzb3VyY2UgbnVtYmVyICovCisJdTE2IHVwZG93bjsJLyogVGhlIHVwZG93biB2YWx1ZSAqLworfTsKKworZW51bSBwbXVfcmVzX2RlcGVuZF90YWJfdGFzayB7CisJUE1VX1JFU19ERVBfU0VUID0gMSwKKwlQTVVfUkVTX0RFUF9BREQsCisJUE1VX1JFU19ERVBfUkVNT1ZFLAorfTsKKworc3RydWN0IHBtdV9yZXNfZGVwZW5kX3RhYl9lbnRyeSB7CisJdTggcmVzb3VyY2U7CS8qIFRoZSByZXNvdXJjZSBudW1iZXIgKi8KKwl1OCB0YXNrOwkvKiBTRVQgfCBBREQgfCBSRU1PVkUgKi8KKwl1MzIgZGVwZW5kOwkvKiBUaGUgZGVwZW5kIG1hc2sgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X3Jlc191cGRvd25fdGFiX2VudHJ5IHBtdV9yZXNfdXBkb3duX3RhYl80MzI4YTBbXSA9IHsKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9FWFRfU1dJVENIRVJfUFdNLAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9QV00sCQkudXBkb3duID0gMHgxRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0JCX1NXSVRDSEVSX0JVUlNULAkudXBkb3duID0gMHgwMTBGLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0JCX0VYVF9TV0lUQ0hFUl9CVVJTVCwJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9JTFBfUkVRVUVTVCwJCS51cGRvd24gPSAweDAyMDIsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfUkFESU9fU1dJVENIRVJfUFdNLAkudXBkb3duID0gMHgwRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1JBRElPX1NXSVRDSEVSX0JVUlNULAkudXBkb3duID0gMHgwRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1JPTV9TV0lUQ0gsCQkudXBkb3duID0gMHgwMTAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1BBX1JFRl9MRE8sCQkudXBkb3duID0gMHgwRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1JBRElPX0xETywJCS51cGRvd24gPSAweDBGMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfQUZFX0xETywJCQkudXBkb3duID0gMHgwRjAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X1BMTF9MRE8sCQkJLnVwZG93biA9IDB4MEYwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9CR19GSUxUQllQLAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9UWF9GSUxUQllQLAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9SWF9GSUxUQllQLAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9YVEFMX1BVLAkJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfWFRBTF9FTiwJCQkudXBkb3duID0gMHhBMDAxLCB9LAorCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI4X0JCX1BMTF9GSUxUQllQLAkJLnVwZG93biA9IDB4MDEwMSwgfSwKKwl7IC5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9SRl9QTExfRklMVEJZUCwJCS51cGRvd24gPSAweDAxMDEsIH0sCisJeyAucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjhfQkJfUExMX1BVLAkJLnVwZG93biA9IDB4MDcwMSwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X3Jlc19kZXBlbmRfdGFiX2VudHJ5IHBtdV9yZXNfZGVwZW5kX3RhYl80MzI4YTBbXSA9IHsKKwl7CisJCS8qIEFkanVzdCBJTFAgUmVxdWVzdCB0byBhdm9pZCBmb3JjaW5nIEVYVC9CQiBpbnRvIGJ1cnN0IG1vZGUuICovCisJCS5yZXNvdXJjZSA9IFNTQl9QTVVSRVNfNDMyOF9JTFBfUkVRVUVTVCwKKwkJLnRhc2sgPSBQTVVfUkVTX0RFUF9TRVQsCisJCS5kZXBlbmQgPSAoKDEgPDwgU1NCX1BNVVJFU180MzI4X0VYVF9TV0lUQ0hFUl9QV00pIHwKKwkJCSAgICgxIDw8IFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9QV00pKSwKKwl9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbXVfcmVzX3VwZG93bl90YWJfZW50cnkgcG11X3Jlc191cGRvd25fdGFiXzQzMjVhMFtdID0geworCXsgLnJlc291cmNlID0gU1NCX1BNVVJFU180MzI1X1hUQUxfUFUsCQkJLnVwZG93biA9IDB4MTUwMSwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG11X3Jlc19kZXBlbmRfdGFiX2VudHJ5IHBtdV9yZXNfZGVwZW5kX3RhYl80MzI1YTBbXSA9IHsKKwl7CisJCS8qIEFkanVzdCBIVC1BdmFpbGFibGUgZGVwZW5kZW5jaWVzLiAqLworCQkucmVzb3VyY2UgPSBTU0JfUE1VUkVTXzQzMjVfSFRfQVZBSUwsCisJCS50YXNrID0gUE1VX1JFU19ERVBfQURELAorCQkuZGVwZW5kID0gKCgxIDw8IFNTQl9QTVVSRVNfNDMyNV9SWF9QV1JTV19QVSkgfAorCQkJICAgKDEgPDwgU1NCX1BNVVJFU180MzI1X1RYX1BXUlNXX1BVKSB8CisJCQkgICAoMSA8PCBTU0JfUE1VUkVTXzQzMjVfTE9HRU5fUFdSU1dfUFUpIHwKKwkJCSAgICgxIDw8IFNTQl9QTVVSRVNfNDMyNV9BRkVfUFdSU1dfUFUpKSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgc3NiX3BtdV9yZXNvdXJjZXNfaW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKQoreworCXN0cnVjdCBzc2JfYnVzICpidXMgPSBjYy0+ZGV2LT5idXM7CisJdTMyIG1pbl9tc2sgPSAwLCBtYXhfbXNrID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwljb25zdCBzdHJ1Y3QgcG11X3Jlc191cGRvd25fdGFiX2VudHJ5ICp1cGRvd25fdGFiID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgdXBkb3duX3RhYl9zaXplOworCWNvbnN0IHN0cnVjdCBwbXVfcmVzX2RlcGVuZF90YWJfZW50cnkgKmRlcGVuZF90YWIgPSBOVUxMOworCXVuc2lnbmVkIGludCBkZXBlbmRfdGFiX3NpemU7CisKKwlzd2l0Y2ggKGJ1cy0+Y2hpcF9pZCkgeworCWNhc2UgMHg0MzEyOgorCQkvKiBXZSBrZWVwIHRoZSBkZWZhdWx0IHNldHRpbmdzOgorCQkgKiBtaW5fbXNrID0gMHhDQkIKKwkJICogbWF4X21zayA9IDB4N0ZGRkYKKwkJICovCisJCWJyZWFrOworCWNhc2UgMHg0MzI1OgorCQkvKiBQb3dlciBPVFAgZG93biBsYXRlci4gKi8KKwkJbWluX21zayA9ICgxIDw8IFNTQl9QTVVSRVNfNDMyNV9DQlVDS19CVVJTVCkgfAorCQkJICAoMSA8PCBTU0JfUE1VUkVTXzQzMjVfTE5MRE8yX1BVKTsKKwkJaWYgKGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fQ0hJUFNUQVQpICYKKwkJICAgIFNTQl9DSElQQ09fQ0hTVF80MzI1X1BNVVRPUF8yQikKKwkJCW1pbl9tc2sgfD0gKDEgPDwgU1NCX1BNVVJFU180MzI1X0NMRE9fQ0JVQ0tfQlVSU1QpOworCQkvKiBUaGUgUExMIG1heSB0dXJuIG9uLCBpZiBpdCBkZWNpZGVzIHNvLiAqLworCQltYXhfbXNrID0gMHhGRkZGRjsKKwkJdXBkb3duX3RhYiA9IHBtdV9yZXNfdXBkb3duX3RhYl80MzI1YTA7CisJCXVwZG93bl90YWJfc2l6ZSA9IEFSUkFZX1NJWkUocG11X3Jlc191cGRvd25fdGFiXzQzMjVhMCk7CisJCWRlcGVuZF90YWIgPSBwbXVfcmVzX2RlcGVuZF90YWJfNDMyNWEwOworCQlkZXBlbmRfdGFiX3NpemUgPSBBUlJBWV9TSVpFKHBtdV9yZXNfZGVwZW5kX3RhYl80MzI1YTApOworCQlicmVhazsKKwljYXNlIDB4NDMyODoKKwkJbWluX21zayA9ICgxIDw8IFNTQl9QTVVSRVNfNDMyOF9FWFRfU1dJVENIRVJfUFdNKSB8CisJCQkgICgxIDw8IFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9QV00pIHwKKwkJCSAgKDEgPDwgU1NCX1BNVVJFU180MzI4X1hUQUxfRU4pOworCQkvKiBUaGUgUExMIG1heSB0dXJuIG9uLCBpZiBpdCBkZWNpZGVzIHNvLiAqLworCQltYXhfbXNrID0gMHhGRkZGRjsKKwkJdXBkb3duX3RhYiA9IHBtdV9yZXNfdXBkb3duX3RhYl80MzI4YTA7CisJCXVwZG93bl90YWJfc2l6ZSA9IEFSUkFZX1NJWkUocG11X3Jlc191cGRvd25fdGFiXzQzMjhhMCk7CisJCWRlcGVuZF90YWIgPSBwbXVfcmVzX2RlcGVuZF90YWJfNDMyOGEwOworCQlkZXBlbmRfdGFiX3NpemUgPSBBUlJBWV9TSVpFKHBtdV9yZXNfZGVwZW5kX3RhYl80MzI4YTApOworCQlicmVhazsKKwljYXNlIDB4NTM1NDoKKwkJLyogVGhlIFBMTCBtYXkgdHVybiBvbiwgaWYgaXQgZGVjaWRlcyBzby4gKi8KKwkJbWF4X21zayA9IDB4RkZGRkY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNzYl9wcmludGsoS0VSTl9FUlIgUEZYCisJCQkgICAiRVJST1I6IFBNVSByZXNvdXJjZSBjb25maWcgdW5rbm93biBmb3IgZGV2aWNlICUwNFhcbiIsCisJCQkgICBidXMtPmNoaXBfaWQpOworCX0KKworCWlmICh1cGRvd25fdGFiKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1cGRvd25fdGFiX3NpemU7IGkrKykgeworCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX1JFU19UQUJTRUwsCisJCQkJICAgICAgIHVwZG93bl90YWJbaV0ucmVzb3VyY2UpOworCQkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX1JFU19VUEROVE0sCisJCQkJICAgICAgIHVwZG93bl90YWJbaV0udXBkb3duKTsKKwkJfQorCX0KKwlpZiAoZGVwZW5kX3RhYikgeworCQlmb3IgKGkgPSAwOyBpIDwgZGVwZW5kX3RhYl9zaXplOyBpKyspIHsKKwkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BNVV9SRVNfVEFCU0VMLAorCQkJCSAgICAgICBkZXBlbmRfdGFiW2ldLnJlc291cmNlKTsKKwkJCXN3aXRjaCAoZGVwZW5kX3RhYltpXS50YXNrKSB7CisJCQljYXNlIFBNVV9SRVNfREVQX1NFVDoKKwkJCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfUkVTX0RFUE1TSywKKwkJCQkJICAgICAgIGRlcGVuZF90YWJbaV0uZGVwZW5kKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUE1VX1JFU19ERVBfQUREOgorCQkJCWNoaXBjb19zZXQzMihjYywgU1NCX0NISVBDT19QTVVfUkVTX0RFUE1TSywKKwkJCQkJICAgICBkZXBlbmRfdGFiW2ldLmRlcGVuZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBNVV9SRVNfREVQX1JFTU9WRToKKwkJCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9SRVNfREVQTVNLLAorCQkJCQkgICAgICB+KGRlcGVuZF90YWJbaV0uZGVwZW5kKSk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCVNTQl9XQVJOX09OKDEpOworCQkJfQorCQl9CisJfQorCisJLyogU2V0IHRoZSByZXNvdXJjZSBtYXNrcy4gKi8KKwlpZiAobWluX21zaykKKwkJY2hpcGNvX3dyaXRlMzIoY2MsIFNTQl9DSElQQ09fUE1VX01JTlJFU19NU0ssIG1pbl9tc2spOworCWlmIChtYXhfbXNrKQorCQljaGlwY29fd3JpdGUzMihjYywgU1NCX0NISVBDT19QTVVfTUFYUkVTX01TSywgbWF4X21zayk7Cit9CisKK3ZvaWQgc3NiX3BtdV9pbml0KHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGNjLT5kZXYtPmJ1czsKKwl1MzIgcG11Y2FwOworCisJaWYgKCEoY2MtPmNhcGFiaWxpdGllcyAmIFNTQl9DSElQQ09fQ0FQX1BNVSkpCisJCXJldHVybjsKKworCXBtdWNhcCA9IGNoaXBjb19yZWFkMzIoY2MsIFNTQl9DSElQQ09fUE1VX0NBUCk7CisJY2MtPnBtdS5yZXYgPSAocG11Y2FwICYgU1NCX0NISVBDT19QTVVfQ0FQX1JFVklTSU9OKTsKKworCXNzYl9kcHJpbnRrKEtFUk5fREVCVUcgUEZYICJGb3VuZCByZXYgJXUgUE1VIChjYXBhYmlsaXRpZXMgMHglMDhYKVxuIiwKKwkJICAgIGNjLT5wbXUucmV2LCBwbXVjYXApOworCisJaWYgKGNjLT5wbXUucmV2ID49IDEpIHsKKwkJaWYgKChidXMtPmNoaXBfaWQgPT0gMHg0MzI1KSAmJiAoYnVzLT5jaGlwX3JldiA8IDIpKSB7CisJCQljaGlwY29fbWFzazMyKGNjLCBTU0JfQ0hJUENPX1BNVV9DVEwsCisJCQkJICAgICAgflNTQl9DSElQQ09fUE1VX0NUTF9OT0lMUE9OVyk7CisJCX0gZWxzZSB7CisJCQljaGlwY29fc2V0MzIoY2MsIFNTQl9DSElQQ09fUE1VX0NUTCwKKwkJCQkgICAgIFNTQl9DSElQQ09fUE1VX0NUTF9OT0lMUE9OVyk7CisJCX0KKwl9CisJc3NiX3BtdV9wbGxfaW5pdChjYyk7CisJc3NiX3BtdV9yZXNvdXJjZXNfaW5pdChjYyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9wY2kuYyBiL2RyaXZlcnMvc3NiL3BjaS5jCmluZGV4IGQ1Y2RlMDUuLjQwZWE0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3BjaS5jCisrKyBiL2RyaXZlcnMvc3NiL3BjaS5jCkBAIC00NjcsNiArNDY3LDUxIEBACiAJLyogVE9ETyAtIGdldCByZW1haW5pbmcgcmV2IDQgc3R1ZmYgbmVlZGVkICovCiB9CiAKK3N0YXRpYyB2b2lkIHNwcm9tX2V4dHJhY3Rfcjgoc3RydWN0IHNzYl9zcHJvbSAqb3V0LCBjb25zdCB1MTYgKmluKQoreworCWludCBpOworCXUxNiB2OworCisJLyogZXh0cmFjdCB0aGUgTUFDIGFkZHJlc3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXYgPSBpbltTUE9GRihTU0JfU1BST00xX0lMME1BQykgKyBpXTsKKwkJKigoKF9fYmUxNiAqKW91dC0+aWwwbWFjKSArIGkpID0gY3B1X3RvX2JlMTYodik7CisJfQorCVNQRVgoY291bnRyeV9jb2RlLCBTU0JfU1BST004X0NDT0RFLCAweEZGRkYsIDApOworCVNQRVgoYm9hcmRmbGFnc19sbywgU1NCX1NQUk9NOF9CRkxMTywgMHhGRkZGLCAwKTsKKwlTUEVYKGJvYXJkZmxhZ3NfaGksIFNTQl9TUFJPTThfQkZMSEksIDB4RkZGRiwgMCk7CisJU1BFWChhbnRfYXZhaWxhYmxlX2EsIFNTQl9TUFJPTThfQU5UQVZBSUwsIFNTQl9TUFJPTThfQU5UQVZBSUxfQSwKKwkgICAgIFNTQl9TUFJPTThfQU5UQVZBSUxfQV9TSElGVCk7CisJU1BFWChhbnRfYXZhaWxhYmxlX2JnLCBTU0JfU1BST004X0FOVEFWQUlMLCBTU0JfU1BST004X0FOVEFWQUlMX0JHLAorCSAgICAgU1NCX1NQUk9NOF9BTlRBVkFJTF9CR19TSElGVCk7CisJU1BFWChtYXhwd3JfYmcsIFNTQl9TUFJPTThfTUFYUF9CRywgU1NCX1NQUk9NOF9NQVhQX0JHX01BU0ssIDApOworCVNQRVgoaXRzc2lfYmcsIFNTQl9TUFJPTThfTUFYUF9CRywgU1NCX1NQUk9NOF9JVFNTSV9CRywKKwkgICAgIFNTQl9TUFJPTThfSVRTU0lfQkdfU0hJRlQpOworCVNQRVgobWF4cHdyX2EsIFNTQl9TUFJPTThfTUFYUF9BLCBTU0JfU1BST004X01BWFBfQV9NQVNLLCAwKTsKKwlTUEVYKGl0c3NpX2EsIFNTQl9TUFJPTThfTUFYUF9BLCBTU0JfU1BST004X0lUU1NJX0EsCisJICAgICBTU0JfU1BST004X0lUU1NJX0FfU0hJRlQpOworCVNQRVgoZ3BpbzAsIFNTQl9TUFJPTThfR1BJT0EsIFNTQl9TUFJPTThfR1BJT0FfUDAsIDApOworCVNQRVgoZ3BpbzEsIFNTQl9TUFJPTThfR1BJT0EsIFNTQl9TUFJPTThfR1BJT0FfUDEsCisJICAgICBTU0JfU1BST004X0dQSU9BX1AxX1NISUZUKTsKKwlTUEVYKGdwaW8yLCBTU0JfU1BST004X0dQSU9CLCBTU0JfU1BST004X0dQSU9CX1AyLCAwKTsKKwlTUEVYKGdwaW8zLCBTU0JfU1BST004X0dQSU9CLCBTU0JfU1BST004X0dQSU9CX1AzLAorCSAgICAgU1NCX1NQUk9NOF9HUElPQl9QM19TSElGVCk7CisKKwkvKiBFeHRyYWN0IHRoZSBhbnRlbm5hIGdhaW4gdmFsdWVzLiAqLworCVNQRVgoYW50ZW5uYV9nYWluLmdoejI0LmEwLCBTU0JfU1BST004X0FHQUlOMDEsCisJICAgICBTU0JfU1BST004X0FHQUlOMCwgU1NCX1NQUk9NOF9BR0FJTjBfU0hJRlQpOworCVNQRVgoYW50ZW5uYV9nYWluLmdoejI0LmExLCBTU0JfU1BST004X0FHQUlOMDEsCisJICAgICBTU0JfU1BST004X0FHQUlOMSwgU1NCX1NQUk9NOF9BR0FJTjFfU0hJRlQpOworCVNQRVgoYW50ZW5uYV9nYWluLmdoejI0LmEyLCBTU0JfU1BST004X0FHQUlOMjMsCisJICAgICBTU0JfU1BST004X0FHQUlOMiwgU1NCX1NQUk9NOF9BR0FJTjJfU0hJRlQpOworCVNQRVgoYW50ZW5uYV9nYWluLmdoejI0LmEzLCBTU0JfU1BST004X0FHQUlOMjMsCisJICAgICBTU0JfU1BST004X0FHQUlOMywgU1NCX1NQUk9NOF9BR0FJTjNfU0hJRlQpOworCW1lbWNweSgmb3V0LT5hbnRlbm5hX2dhaW4uZ2h6NSwgJm91dC0+YW50ZW5uYV9nYWluLmdoejI0LAorCSAgICAgICBzaXplb2Yob3V0LT5hbnRlbm5hX2dhaW4uZ2h6NSkpOworCisJLyogVE9ETyAtIGdldCByZW1haW5pbmcgcmV2IDggc3R1ZmYgbmVlZGVkICovCit9CisKIHN0YXRpYyBpbnQgc3Byb21fZXh0cmFjdChzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCBzdHJ1Y3Qgc3NiX3Nwcm9tICpvdXQsCiAJCQkgY29uc3QgdTE2ICppbiwgdTE2IHNpemUpCiB7CkBAIC00ODcsMTUgKzUzMiwyNSBAQAogCQlvdXQtPnJldmlzaW9uID0gNDsKIAkJc3Byb21fZXh0cmFjdF9yNDUob3V0LCBpbik7CiAJfSBlbHNlIHsKLQkJaWYgKG91dC0+cmV2aXNpb24gPT0gMCkKLQkJCWdvdG8gdW5zdXBwb3J0ZWQ7Ci0JCWlmIChvdXQtPnJldmlzaW9uID49IDEgJiYgb3V0LT5yZXZpc2lvbiA8PSAzKSB7CisJCXN3aXRjaCAob3V0LT5yZXZpc2lvbikgeworCQljYXNlIDE6CisJCWNhc2UgMjoKKwkJY2FzZSAzOgorCQkJc3Byb21fZXh0cmFjdF9yMTIzKG91dCwgaW4pOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJY2FzZSA1OgorCQkJc3Byb21fZXh0cmFjdF9yNDUob3V0LCBpbik7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJc3Byb21fZXh0cmFjdF9yOChvdXQsIGluKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJc3NiX3ByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJVbnN1cHBvcnRlZCBTUFJPTSIKKwkJCQkgICAiICByZXZpc2lvbiAlZCBkZXRlY3RlZC4gV2lsbCBleHRyYWN0IgorCQkJCSAgICIgdjFcbiIsIG91dC0+cmV2aXNpb24pOwogCQkJc3Byb21fZXh0cmFjdF9yMTIzKG91dCwgaW4pOwogCQl9Ci0JCWlmIChvdXQtPnJldmlzaW9uID09IDQgfHwgb3V0LT5yZXZpc2lvbiA9PSA1KQotCQkJc3Byb21fZXh0cmFjdF9yNDUob3V0LCBpbik7Ci0JCWlmIChvdXQtPnJldmlzaW9uID4gNSkKLQkJCWdvdG8gdW5zdXBwb3J0ZWQ7CiAJfQogCiAJaWYgKG91dC0+Ym9hcmRmbGFnc19sbyA9PSAweEZGRkYpCkBAIC01MDQsMTYgKzU1OSwxMiBAQAogCQlvdXQtPmJvYXJkZmxhZ3NfaGkgPSAwOyAgLyogcGVyIHNwZWNzICovCiAKIAlyZXR1cm4gMDsKLXVuc3VwcG9ydGVkOgotCXNzYl9wcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiVW5zdXBwb3J0ZWQgU1BST00gcmV2aXNpb24gJWQgIgotCQkgICAiZGV0ZWN0ZWQuIFdpbGwgZXh0cmFjdCB2MVxuIiwgb3V0LT5yZXZpc2lvbik7Ci0Jc3Byb21fZXh0cmFjdF9yMTIzKG91dCwgaW4pOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNzYl9wY2lfc3Byb21fZ2V0KHN0cnVjdCBzc2JfYnVzICpidXMsCiAJCQkgICAgIHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKQogeworCWNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKmZhbGxiYWNrOwogCWludCBlcnIgPSAtRU5PTUVNOwogCXUxNiAqYnVmOwogCkBAIC01MzMsMTIgKzU4NCwyMyBAQAogCQlidXMtPnNwcm9tX3NpemUgPSBTU0JfU1BST01TSVpFX1dPUkRTX1I0OwogCQlzcHJvbV9kb19yZWFkKGJ1cywgYnVmKTsKIAkJZXJyID0gc3Byb21fY2hlY2tfY3JjKGJ1ZiwgYnVzLT5zcHJvbV9zaXplKTsKLQkJaWYgKGVycikKKwkJaWYgKGVycikgeworCQkJLyogQWxsIENSQyBhdHRlbXB0cyBmYWlsZWQuCisJCQkgKiBNYXliZSB0aGVyZSBpcyBubyBTUFJPTSBvbiB0aGUgZGV2aWNlPworCQkJICogSWYgd2UgaGF2ZSBhIGZhbGxiYWNrLCB1c2UgdGhhdC4gKi8KKwkJCWZhbGxiYWNrID0gc3NiX2dldF9mYWxsYmFja19zcHJvbSgpOworCQkJaWYgKGZhbGxiYWNrKSB7CisJCQkJbWVtY3B5KHNwcm9tLCBmYWxsYmFjaywgc2l6ZW9mKCpzcHJvbSkpOworCQkJCWVyciA9IDA7CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KIAkJCXNzYl9wcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiV0FSTklORzogSW52YWxpZCIKIAkJCQkgICAiIFNQUk9NIENSQyAoY29ycnVwdCBTUFJPTSlcbiIpOworCQl9CiAJfQogCWVyciA9IHNwcm9tX2V4dHJhY3QoYnVzLCBzcHJvbSwgYnVmLCBidXMtPnNwcm9tX3NpemUpOwogCitvdXRfZnJlZToKIAlrZnJlZShidWYpOwogb3V0OgogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9zcHJvbS5jIGIvZHJpdmVycy9zc2Ivc3Byb20uYwppbmRleCAzNjY4ZWRiLi44OTQzMDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9zcHJvbS5jCisrKyBiL2RyaXZlcnMvc3NiL3Nwcm9tLmMKQEAgLTE0LDYgKzE0LDkgQEAKICNpbmNsdWRlICJzc2JfcHJpdmF0ZS5oIgogCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3NiX3Nwcm9tICpmYWxsYmFja19zcHJvbTsKKworCiBzdGF0aWMgaW50IHNwcm9tMmhleChjb25zdCB1MTYgKnNwcm9tLCBjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAogCQkgICAgIHNpemVfdCBzcHJvbV9zaXplX3dvcmRzKQogewpAQCAtMTMxLDMgKzEzNCwzNiBAQAogCQlyZXR1cm4gcmVzOwogCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKIH0KKworLyoqCisgKiBzc2JfYXJjaF9zZXRfZmFsbGJhY2tfc3Byb20gLSBTZXQgYSBmYWxsYmFjayBTUFJPTSBmb3IgdXNlIGlmIG5vIFNQUk9NIGlzIGZvdW5kLgorICoKKyAqIEBzcHJvbTogVGhlIFNQUk9NIGRhdGEgc3RydWN0dXJlIHRvIHJlZ2lzdGVyLgorICoKKyAqIFdpdGggdGhpcyBmdW5jdGlvbiB0aGUgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uIG1heSByZWdpc3RlciBhIGZhbGxiYWNrCisgKiBTUFJPTSBkYXRhIHN0cnVjdHVyZS4gVGhlIGZhbGxiYWNrIGlzIG9ubHkgdXNlZCBmb3IgUENJIGJhc2VkIFNTQiBkZXZpY2VzLAorICogd2hlcmUgbm8gdmFsaWQgU1BST00gY2FuIGJlIGZvdW5kIGluIHRoZSBzaGFkb3cgcmVnaXN0ZXJzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciB3ZWlyZCBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBhIGhhbGYtYXNzZWQgU1NCIGRldmljZQorICogaGFyZHdpcmVkIHRvIHRoZWlyIFBDSSBidXMuCisgKgorICogTm90ZSB0aGF0IGl0IGRvZXMgb25seSB3b3JrIHdpdGggUENJIGF0dGFjaGVkIFNTQiBkZXZpY2VzLiBQQ01DSUEgZGV2aWNlcyBjdXJyZW50bHkKKyAqIGRvbid0IHVzZSB0aGlzIGZhbGxiYWNrLgorICogQXJjaGl0ZWN0dXJlcyBtdXN0IHByb3ZpZGUgdGhlIFNQUk9NIGZvciBuYXRpdmUgU1NCIGRldmljZXMgYW55d2F5LAorICogc28gdGhlIGZhbGxiYWNrIGFsc28gaXNuJ3QgdXNlZCBmb3IgbmF0aXZlIGRldmljZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgZm9yIGFyY2hpdGVjdHVyZSBjb2RlLCBvbmx5LiBTbyBpdCBpcyBub3QgZXhwb3J0ZWQuCisgKi8KK2ludCBzc2JfYXJjaF9zZXRfZmFsbGJhY2tfc3Byb20oY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqc3Byb20pCit7CisJaWYgKGZhbGxiYWNrX3Nwcm9tKQorCQlyZXR1cm4gLUVFWElTVDsKKwlmYWxsYmFja19zcHJvbSA9IHNwcm9tOworCisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNzYl9nZXRfZmFsbGJhY2tfc3Byb20odm9pZCkKK3sKKwlyZXR1cm4gZmFsbGJhY2tfc3Byb207Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oIGIvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaAppbmRleCBlYmMzMmQ4Li41N2ZhNDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCisrKyBiL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKQEAgLTEzMSw2ICsxMzEsNyBAQAogCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKIAkJCSAgICAgaW50ICgqc3Byb21fY2hlY2tfY3JjKShjb25zdCB1MTYgKnNwcm9tLCBzaXplX3Qgc2l6ZSksCiAJCQkgICAgIGludCAoKnNwcm9tX3dyaXRlKShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLCBjb25zdCB1MTYgKnNwcm9tKSk7CitleHRlcm4gY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqc3NiX2dldF9mYWxsYmFja19zcHJvbSh2b2lkKTsKIAogCiAvKiBjb3JlLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc25kLWdvNzAwNy5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKaW5kZXggYTdkZTQwMS4uY2QxOWJlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zbmQtZ283MDA3LmMKQEAgLTI0OCwxMCArMjQ4LDExIEBACiAJc3Bpbl9sb2NrX2luaXQoJmdvc25kLT5sb2NrKTsKIAlnb3NuZC0+aHdfcHRyID0gZ29zbmQtPndfaWR4ID0gZ29zbmQtPmF2YWlsID0gMDsKIAlnb3NuZC0+Y2FwdHVyaW5nID0gMDsKLQlnb3NuZC0+Y2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGdvc25kLT5jYXJkID09IE5VTEwpIHsKKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsCisJCQkgICAgICAmZ29zbmQtPmNhcmQpOworCWlmIChyZXQgPCAwKSB7CiAJCWtmcmVlKGdvc25kKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiByZXQ7CiAJfQogCXJldCA9IHNuZF9kZXZpY2VfbmV3KGdvc25kLT5jYXJkLCBTTkRSVl9ERVZfTE9XTEVWRUwsIGdvLAogCQkJJmdvNzAwN19zbmRfZGV2aWNlX29wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RjL3RjLmMgYi9kcml2ZXJzL3RjL3RjLmMKaW5kZXggZjc3ZjYyYS4uZTViZDQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy90Yy90Yy5jCisrKyBiL2RyaXZlcnMvdGMvdGMuYwpAQCAtODYsNyArODYsNyBAQAogCQkJICAgICAgIHNsb3QpOwogCQkJZ290byBvdXRfZXJyOwogCQl9Ci0JCXNwcmludGYodGRldi0+ZGV2LmJ1c19pZCwgInRjJXgiLCBzbG90KTsKKwkJZGV2X3NldF9uYW1lKCZ0ZGV2LT5kZXYsICJ0YyV4Iiwgc2xvdCk7CiAJCXRkZXYtPmJ1cyA9IHRidXM7CiAJCXRkZXYtPmRldi5wYXJlbnQgPSAmdGJ1cy0+ZGV2OwogCQl0ZGV2LT5kZXYuYnVzID0gJnRjX2J1c190eXBlOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJCXRkZXYtPnZlbmRvcls4XSA9IDA7CiAJCXRkZXYtPm5hbWVbOF0gPSAwOwogCi0JCXByX2luZm8oIiVzOiAlcyAlcyAlc1xuIiwgdGRldi0+ZGV2LmJ1c19pZCwgdGRldi0+dmVuZG9yLAorCQlwcl9pbmZvKCIlczogJXMgJXMgJXNcbiIsIGRldl9uYW1lKCZ0ZGV2LT5kZXYpLCB0ZGV2LT52ZW5kb3IsCiAJCQl0ZGV2LT5uYW1lLCB0ZGV2LT5maXJtd2FyZSk7CiAKIAkJZGV2c2l6ZSA9IHJlYWRiKG1vZHVsZSArIG9mZnNldCArIFRDX1NMT1RfU0laRSk7CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJfSBlbHNlIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBwcm92aWRlIHNsb3Qgc3BhY2UgIgogCQkJICAgICAgICIoJWRNaUIgcmVxdWlyZWQsIHVwIHRvICVkTWlCIHN1cHBvcnRlZClcbiIsCi0JCQkgICAgICAgdGRldi0+ZGV2LmJ1c19pZCwgZGV2c2l6ZSA+PiAyMCwKKwkJCSAgICAgICBkZXZfbmFtZSgmdGRldi0+ZGV2KSwgZGV2c2l6ZSA+PiAyMCwKIAkJCSAgICAgICBtYXgoc2xvdHNpemUsIGV4dHNsb3RzaXplKSA+PiAyMCk7CiAJCQlrZnJlZSh0ZGV2KTsKIAkJCWdvdG8gb3V0X2VycjsKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQlyZXR1cm4gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZ0Y19idXMuZGV2aWNlcyk7Ci0Jc3RyY3B5KHRjX2J1cy5kZXYuYnVzX2lkLCAidGMiKTsKKwlkZXZfc2V0X25hbWUoJnRjX2J1cy5kZXYsICJ0YyIpOwogCWRldmljZV9yZWdpc3RlcigmdGNfYnVzLmRldik7CiAKIAlpZiAodGNfYnVzLmluZm8uc2xvdF9zaXplKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby9LY29uZmlnIGIvZHJpdmVycy91aW8vS2NvbmZpZwppbmRleCAwNGI5NTRjLi43Zjg2NTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdWlvL0tjb25maWcKQEAgLTU4LDYgKzU4LDI0IEBACiAKIAkgIElmIHlvdSBjb21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIHVpb19zbXguCiAKK2NvbmZpZyBVSU9fQUVDCisJdHJpc3RhdGUgIkFFQyB2aWRlbyB0aW1lc3RhbXAgZGV2aWNlIgorCWRlcGVuZHMgb24gUENJCisJZGVmYXVsdCBuCisJaGVscAorCisJICBVSU8gZHJpdmVyIGZvciB0aGUgQWRyaWVubmUgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24gUENJIHRpbWUKKwkgIGNvZGUgZGV2aWNlLgorCisJICBUaGlzIGRldmljZSBkaWZmZXJzIGZyb20gb3RoZXIgVUlPIGRldmljZXMgc2luY2UgaXQgdXNlcyBJL08KKwkgIHBvcnRzIGluc3RlYWQgb2YgbWVtb3J5IG1hcHBlZCBJL08uIEluIG9yZGVyIHRvIG1ha2UgaXQKKwkgIHBvc3NpYmxlIGZvciBVSU8gdG8gd29yayB3aXRoIHRoaXMgZGV2aWNlIGEgdXRpbGl0eSwgdWlvcG9ydCwKKwkgIGNhbiBiZSB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIHRoZSBwb3J0czoKKworCSAgICBnaXQgY2xvbmUgZ2l0Oi8vaWZ1cC5vcmcvcGhpbGlwcy91aW9wb3J0LmdpdAorCisJICBJZiB5b3UgY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCB1aW9fYWVjLgorCiBjb25maWcgVUlPX1NFUkNPUzMKIAl0cmlzdGF0ZSAiQXV0b21hdGEgU2VyY29zIElJSSBQQ0kgY2FyZCBkcml2ZXIiCiAJZGVmYXVsdCBuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby9NYWtlZmlsZSBiL2RyaXZlcnMvdWlvL01ha2VmaWxlCmluZGV4IGU2OTU1ODEuLjVjMjU4NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdWlvL01ha2VmaWxlCkBAIC0zLDQgKzMsNSBAQAogb2JqLSQoQ09ORklHX1VJT19QRFJWKQkrPSB1aW9fcGRydi5vCiBvYmotJChDT05GSUdfVUlPX1BEUlZfR0VOSVJRKQkrPSB1aW9fcGRydl9nZW5pcnEubwogb2JqLSQoQ09ORklHX1VJT19TTVgpCSs9IHVpb19zbXgubworb2JqLSQoQ09ORklHX1VJT19BRUMpCSs9IHVpb19hZWMubwogb2JqLSQoQ09ORklHX1VJT19TRVJDT1MzKQkrPSB1aW9fc2VyY29zMy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW8uYyBiL2RyaXZlcnMvdWlvL3Vpby5jCmluZGV4IDRjYTg1YTEuLjAzZWZiMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdWlvL3Vpby5jCisrKyBiL2RyaXZlcnMvdWlvL3Vpby5jCkBAIC02MSw2ICs2MSwxNCBAQAogfTsKICNkZWZpbmUgdG9fbWFwKG1hcCkgY29udGFpbmVyX29mKG1hcCwgc3RydWN0IHVpb19tYXAsIGtvYmopCiAKK3N0YXRpYyBzc2l6ZV90IG1hcF9uYW1lX3Nob3coc3RydWN0IHVpb19tZW0gKm1lbSwgY2hhciAqYnVmKQoreworCWlmICh1bmxpa2VseSghbWVtLT5uYW1lKSkKKwkJbWVtLT5uYW1lID0gIiI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgbWVtLT5uYW1lKTsKK30KKwogc3RhdGljIHNzaXplX3QgbWFwX2FkZHJfc2hvdyhzdHJ1Y3QgdWlvX21lbSAqbWVtLCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglbHhcbiIsIG1lbS0+YWRkcik7CkBAIC04Miw2ICs5MCw4IEBACiAJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgdWlvX21lbSAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiB9OwogCitzdGF0aWMgc3RydWN0IG1hcF9zeXNmc19lbnRyeSBuYW1lX2F0dHJpYnV0ZSA9CisJX19BVFRSKG5hbWUsIFNfSVJVR08sIG1hcF9uYW1lX3Nob3csIE5VTEwpOwogc3RhdGljIHN0cnVjdCBtYXBfc3lzZnNfZW50cnkgYWRkcl9hdHRyaWJ1dGUgPQogCV9fQVRUUihhZGRyLCBTX0lSVUdPLCBtYXBfYWRkcl9zaG93LCBOVUxMKTsKIHN0YXRpYyBzdHJ1Y3QgbWFwX3N5c2ZzX2VudHJ5IHNpemVfYXR0cmlidXRlID0KQEAgLTkwLDYgKzEwMCw3IEBACiAJX19BVFRSKG9mZnNldCwgU19JUlVHTywgbWFwX29mZnNldF9zaG93LCBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHJzW10gPSB7CisJJm5hbWVfYXR0cmlidXRlLmF0dHIsCiAJJmFkZHJfYXR0cmlidXRlLmF0dHIsCiAJJnNpemVfYXR0cmlidXRlLmF0dHIsCiAJJm9mZnNldF9hdHRyaWJ1dGUuYXR0ciwKQEAgLTEzMyw2ICsxNDQsMTQgQEAKIH07CiAjZGVmaW5lIHRvX3BvcnRpbyhwb3J0aW8pIGNvbnRhaW5lcl9vZihwb3J0aW8sIHN0cnVjdCB1aW9fcG9ydGlvLCBrb2JqKQogCitzdGF0aWMgc3NpemVfdCBwb3J0aW9fbmFtZV9zaG93KHN0cnVjdCB1aW9fcG9ydCAqcG9ydCwgY2hhciAqYnVmKQoreworCWlmICh1bmxpa2VseSghcG9ydC0+bmFtZSkpCisJCXBvcnQtPm5hbWUgPSAiIjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBwb3J0LT5uYW1lKTsKK30KKwogc3RhdGljIHNzaXplX3QgcG9ydGlvX3N0YXJ0X3Nob3coc3RydWN0IHVpb19wb3J0ICpwb3J0LCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglbHhcbiIsIHBvcnQtPnN0YXJ0KTsKQEAgLTE1OSw2ICsxNzgsOCBAQAogCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IHVpb19wb3J0ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcG9ydGlvX3N5c2ZzX2VudHJ5IHBvcnRpb19uYW1lX2F0dHJpYnV0ZSA9CisJX19BVFRSKG5hbWUsIFNfSVJVR08sIHBvcnRpb19uYW1lX3Nob3csIE5VTEwpOwogc3RhdGljIHN0cnVjdCBwb3J0aW9fc3lzZnNfZW50cnkgcG9ydGlvX3N0YXJ0X2F0dHJpYnV0ZSA9CiAJX19BVFRSKHN0YXJ0LCBTX0lSVUdPLCBwb3J0aW9fc3RhcnRfc2hvdywgTlVMTCk7CiBzdGF0aWMgc3RydWN0IHBvcnRpb19zeXNmc19lbnRyeSBwb3J0aW9fc2l6ZV9hdHRyaWJ1dGUgPQpAQCAtMTY3LDYgKzE4OCw3IEBACiAJX19BVFRSKHBvcnR0eXBlLCBTX0lSVUdPLCBwb3J0aW9fcG9ydHR5cGVfc2hvdywgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwb3J0aW9fYXR0cnNbXSA9IHsKKwkmcG9ydGlvX25hbWVfYXR0cmlidXRlLmF0dHIsCiAJJnBvcnRpb19zdGFydF9hdHRyaWJ1dGUuYXR0ciwKIAkmcG9ydGlvX3NpemVfYXR0cmlidXRlLmF0dHIsCiAJJnBvcnRpb19wb3J0dHlwZV9hdHRyaWJ1dGUuYXR0ciwKQEAgLTY4Niw3ICs3MDgsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJlcXVlc3RlZF9wYWdlcyA9ICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7Ci0JYWN0dWFsX3BhZ2VzID0gKGlkZXYtPmluZm8tPm1lbVttaV0uc2l6ZSArIFBBR0VfU0laRSAtMSkgPj4gUEFHRV9TSElGVDsKKwlhY3R1YWxfcGFnZXMgPSAoKGlkZXYtPmluZm8tPm1lbVttaV0uYWRkciAmIH5QQUdFX01BU0spCisJCQkrIGlkZXYtPmluZm8tPm1lbVttaV0uc2l6ZSArIFBBR0VfU0laRSAtMSkgPj4gUEFHRV9TSElGVDsKIAlpZiAocmVxdWVzdGVkX3BhZ2VzID4gYWN0dWFsX3BhZ2VzKQogCQlyZXR1cm4gLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvX2FlYy5jIGIvZHJpdmVycy91aW8vdWlvX2FlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ODMwZTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Vpby91aW9fYWVjLmMKQEAgLTAsMCArMSwxNzUgQEAKKy8qCisgKiB1aW9fYWVjLmMgLS0gc2ltcGxlIGRyaXZlciBmb3IgQWRyaWVubmUgRWxlY3Ryb25pY3MgQ29ycCB0aW1lIGNvZGUgUENJIGRldmljZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBCcmFuZG9uIFBoaWxpcHMgPGJyYW5kb25AaWZ1cC5vcmc+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogICBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BRUMgMHhhZWNiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUVDX1ZJVENMVEMgMHg2MjUwCisKKyNkZWZpbmUgSU5UX0VOQUJMRV9BRERSCQkweEZDCisjZGVmaW5lIElOVF9FTkFCTEUJCTB4MTAKKyNkZWZpbmUgSU5UX0RJU0FCTEUJCTB4MAorCisjZGVmaW5lIElOVF9NQVNLX0FERFIJCTB4MkUKKyNkZWZpbmUgSU5UX01BU0tfQUxMCQkweDNGCisKKyNkZWZpbmUgSU5UQV9EUlZSX0FERFIJCTB4RkUKKyNkZWZpbmUgSU5UQV9FTkFCTEVEX0ZMQUcJMHgwOAorI2RlZmluZSBJTlRBX0ZMQUcJCTB4MDEKKworI2RlZmluZSBNQUlMQk9YCQkJMHgwRgorCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWRzW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUVDLCBQQ0lfREVWSUNFX0lEX0FFQ19WSVRDTFRDKSwgfSwKKwl7IDAsIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaWRzKTsKKworc3RhdGljIGlycXJldHVybl90IGFlY3RjX2lycShpbnQgaXJxLCBzdHJ1Y3QgdWlvX2luZm8gKmRldl9pbmZvKQoreworCXZvaWQgX19pb21lbSAqaW50X2ZsYWcgPSBkZXZfaW5mby0+cHJpdiArIElOVEFfRFJWUl9BRERSOworCXVuc2lnbmVkIGNoYXIgc3RhdHVzID0gaW9yZWFkOChpbnRfZmxhZyk7CisKKworCWlmICgoc3RhdHVzICYgSU5UQV9FTkFCTEVEX0ZMQUcpICYmIChzdGF0dXMgJiBJTlRBX0ZMQUcpKSB7CisJCS8qIGFwcGxpY2F0aW9uIHdyaXRlcyAweDAwIHRvIDB4MkYgdG8gZ2V0IG5leHQgaW50ZXJydXB0ICovCisJCXN0YXR1cyA9IGlvcmVhZDgoZGV2X2luZm8tPnByaXYgKyBNQUlMQk9YKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXJldHVybiBJUlFfTk9ORTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfYm9hcmRfZGF0YShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHVpb19pbmZvICppKQoreworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJQQ0ktVEMgYm9hcmQgdmVuZG9yOiAleCV4IG51bWJlcjogJXgleCIKKwkJIiByZXZpc2lvbjogJWMlY1xuIiwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwMSksCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDApLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDAzKSwKKwkJaW9yZWFkOChpLT5wcml2ICsgMHgwMiksCisJCWlvcmVhZDgoaS0+cHJpdiArIDB4MDYpLAorCQlpb3JlYWQ4KGktPnByaXYgKyAweDA3KSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHByb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVpb19pbmZvICppbmZvOworCWludCByZXQ7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVpb19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKKwkJZ290byBvdXRfZnJlZTsKKworCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsICJhZWN0YyIpKQorCQlnb3RvIG91dF9kaXNhYmxlOworCisJaW5mby0+bmFtZSA9ICJhZWN0YyI7CisJaW5mby0+cG9ydFswXS5zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwlpZiAoIWluZm8tPnBvcnRbMF0uc3RhcnQpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisJaW5mby0+cHJpdiA9IHBjaV9pb21hcChwZGV2LCAwLCAwKTsKKwlpZiAoIWluZm8tPnByaXYpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisJaW5mby0+cG9ydFswXS5zaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlpbmZvLT5wb3J0WzBdLnBvcnR0eXBlID0gVUlPX1BPUlRfR1BJTzsKKworCWluZm8tPnZlcnNpb24gPSAiMC4wLjEiOworCWluZm8tPmlycSA9IHBkZXYtPmlycTsKKwlpbmZvLT5pcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKKwlpbmZvLT5oYW5kbGVyID0gYWVjdGNfaXJxOworCisJcHJpbnRfYm9hcmRfZGF0YShwZGV2LCBpbmZvKTsKKwlyZXQgPSB1aW9fcmVnaXN0ZXJfZGV2aWNlKCZwZGV2LT5kZXYsIGluZm8pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubWFwOworCisJaW93cml0ZTMyKElOVF9FTkFCTEUsIGluZm8tPnByaXYgKyBJTlRfRU5BQkxFX0FERFIpOworCWlvd3JpdGU4KElOVF9NQVNLX0FMTCwgaW5mby0+cHJpdiArIElOVF9NQVNLX0FERFIpOworCWlmICghKGlvcmVhZDgoaW5mby0+cHJpdiArIElOVEFfRFJWUl9BRERSKQorCQkJJiBJTlRBX0VOQUJMRURfRkxBRykpCisJCWRldl9lcnIoJnBkZXYtPmRldiwgImFlY3RjOiBpbnRlcnJ1cHRzIG5vdCBlbmFibGVkXG4iKTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKworCXJldHVybiAwOworCitvdXRfdW5tYXA6CisJcGNpX2lvdW5tYXAocGRldiwgaW5mby0+cHJpdik7CitvdXRfcmVsZWFzZToKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworb3V0X2Rpc2FibGU6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworb3V0X2ZyZWU6CisJa2ZyZWUoaW5mbyk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgdWlvX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKwlpb3dyaXRlOChJTlRfRElTQUJMRSwgaW5mby0+cHJpdiArIElOVF9NQVNLX0FERFIpOworCWlvd3JpdGUzMihJTlRfRElTQUJMRSwgaW5mby0+cHJpdiArIElOVF9FTkFCTEVfQUREUik7CisJLyogcmVhZCBtYWlsYm94IHRvIGVuc3VyZSBib2FyZCBkcm9wcyBpcnEgKi8KKwlpb3JlYWQ4KGluZm8tPnByaXYgKyBNQUlMQk9YKTsKKworCXVpb191bnJlZ2lzdGVyX2RldmljZShpbmZvKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJaW91bm1hcChpbmZvLT5wcml2KTsKKworCWtmcmVlKGluZm8pOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9ICJhZWN0YyIsCisJLmlkX3RhYmxlID0gaWRzLAorCS5wcm9iZSA9IHByb2JlLAorCS5yZW1vdmUgPSByZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZWN0Y19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnBjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYWVjdGNfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmcGNpX2RyaXZlcik7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoYWVjdGNfaW5pdCk7Cittb2R1bGVfZXhpdChhZWN0Y19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9LY29uZmlnCmluZGV4IDgzYmFiYjAuLmM2YzgxNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvS2NvbmZpZwpAQCAtNDcsNiArNDcsNyBAQAogCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3MjAKIAlkZWZhdWx0IHkgaWYgQ1BVX1NVQlRZUEVfU0g3NzIxCiAJZGVmYXVsdCB5IGlmIENQVV9TVUJUWVBFX1NINzc2MworCWRlZmF1bHQgeSBpZiBDUFVfU1VCVFlQRV9TSDc3ODYKIAkjIG1vcmU6CiAJZGVmYXVsdCBQQ0kKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQppbmRleCBiMmNlYjRhLi44OTI5OWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQAogb2JqLSQoQ09ORklHX1VTQl9VMTMyX0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfUjhBNjY1OTdfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9IV0FfSENEKQkrPSBob3N0Lworb2JqLSQoQ09ORklHX1VTQl9JU1AxNzYwX0hDRCkJKz0gaG9zdC8KIAogb2JqLSQoQ09ORklHX1VTQl9DNjdYMDBfSENEKQkrPSBjNjd4MDAvCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCmluZGV4IDNmM2VlMTMuLmQyNzQ3YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpAQCAtODgwLDE2ICs4ODAsMTkgQEAKIAkJaWYgKHJjIDw9IDApCiAJCQlicmVhazsKIAotCQlpZiAodXNibHAtPmZsYWdzICYgTFBfQUJPUlQpIHsKLQkJCWlmIChzY2hlZHVsZV90aW1lb3V0KG1zZWNzX3RvX2ppZmZpZXMoNTAwMCkpID09IDApIHsKKwkJaWYgKHNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygxNTAwKSkgPT0gMCkgeworCQkJaWYgKHVzYmxwLT5mbGFncyAmIExQX0FCT1JUKSB7CiAJCQkJZXJyID0gdXNibHBfY2hlY2tfc3RhdHVzKHVzYmxwLCBlcnIpOwogCQkJCWlmIChlcnIgPT0gMSkgewkvKiBQYXBlciBvdXQgKi8KIAkJCQkJcmMgPSAtRU5PU1BDOwogCQkJCQlicmVhazsKIAkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIFByb2QgdGhlIHByaW50ZXIsIEdlbnRvbyMyNTEyMzcuICovCisJCQkJbXV0ZXhfbG9jaygmdXNibHAtPm11dCk7CisJCQkJdXNibHBfcmVhZF9zdGF0dXModXNibHAsIHVzYmxwLT5zdGF0dXNidWYpOworCQkJCW11dGV4X3VubG9jaygmdXNibHAtPm11dCk7CiAJCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzY2hlZHVsZSgpOwogCQl9CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCmluZGV4IDZlYzM4MTcuLjczYzEwOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aWNlcy5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAl9CiAKIAkvKiB0aGlzIGlzbid0IGNoZWNraW5nIGZvciBpbGxlZ2FsIHZhbHVlcyAqLwotCXN3aXRjaCAoZGVzYy0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwlzd2l0Y2ggKHVzYl9lbmRwb2ludF90eXBlKGRlc2MpKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQl0eXBlID0gIkN0cmwiOwogCQlpZiAoc3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpIAkvKiB1ZnJhbWVzIHBlciBOQUsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCA2NTg1ZjUyLi5kZjNjNTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogI2RlZmluZQlNQVhfVVNCRlNfQlVGRkVSX1NJWkUJMTYzODQKIAotc3RhdGljIGlubGluZSBpbnQgY29ubmVjdGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQorc3RhdGljIGludCBjb25uZWN0ZWQoc3RydWN0IGRldl9zdGF0ZSAqcHMpCiB7CiAJcmV0dXJuICghbGlzdF9lbXB0eSgmcHMtPmxpc3QpICYmCiAJCQlwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAJa2ZyZWUoYXMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfbmV3cGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQorc3RhdGljIHZvaWQgYXN5bmNfbmV3cGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQogewogCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gYXMtPnBzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNTgsNyArMjU4LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXN5bmNfcmVtb3ZlcGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQorc3RhdGljIHZvaWQgYXN5bmNfcmVtb3ZlcGVuZGluZyhzdHJ1Y3QgYXN5bmMgKmFzKQogewogCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gYXMtPnBzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNjgsNyArMjY4LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcy0+bG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0Y29tcGxldGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQorc3RhdGljIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0Y29tcGxldGVkKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGFzeW5jICphcyA9IE5VTEw7CkBAIC0yODMsNyArMjgzLDcgQEAKIAlyZXR1cm4gYXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGFzeW5jICphc3luY19nZXRwZW5kaW5nKHN0cnVjdCBkZXZfc3RhdGUgKnBzLAorc3RhdGljIHN0cnVjdCBhc3luYyAqYXN5bmNfZ2V0cGVuZGluZyhzdHJ1Y3QgZGV2X3N0YXRlICpwcywKIAkJCQkJICAgICB2b2lkIF9fdXNlciAqdXNlcnVyYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMzAyLDcgKzMwMiw3IEBACiAKIHN0YXRpYyB2b2lkIHNub29wX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHZvaWQgX191c2VyICp1c2VydXJiKQogewotCWludCBqOworCXVuc2lnbmVkIGo7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCiAJaWYgKCF1c2Jmc19zbm9vcCkKQEAgLTMxMSw5ICszMTEsOSBAQAogCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZGlyZWN0aW9uPSVzXG4iLAogCQkJdXNiX3VyYl9kaXJfaW4odXJiKSA/ICJJTiIgOiAiT1VUIik7CiAJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJ1c2VydXJiPSVwXG4iLCB1c2VydXJiKTsKLQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgInRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg9JWRcbiIsCisJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJ0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoPSV1XG4iLAogCQkgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLQlkZXZfaW5mbygmdXJiLT5kZXYtPmRldiwgImFjdHVhbF9sZW5ndGg9JWRcbiIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJZGV2X2luZm8oJnVyYi0+ZGV2LT5kZXYsICJhY3R1YWxfbGVuZ3RoPSV1XG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCWRldl9pbmZvKCZ1cmItPmRldi0+ZGV2LCAiZGF0YTogIik7CiAJZm9yIChqID0gMDsgaiA8IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsgKytqKQogCQlwcmludGsoIiUwMnggIiwgZGF0YVtqXSk7CkBAIC0zNzYsNyArMzc2LDcgQEAKIAlkZXN0cm95X2FzeW5jKHBzLCAmaGl0bGlzdCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkZXN0cm95X2FsbF9hc3luYyhzdHJ1Y3QgZGV2X3N0YXRlICpwcykKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfYWxsX2FzeW5jKHN0cnVjdCBkZXZfc3RhdGUgKnBzKQogewogCWRlc3Ryb3lfYXN5bmMocHMsICZwcy0+YXN5bmNfcGVuZGluZyk7CiB9CkBAIC01MjUsNyArNTI1LDggQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfQUREUkVTUworCWlmIChwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfVU5BVVRIRU5USUNBVEVECisJICYmIHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9BRERSRVNTCiAJICYmIHBzLT5kZXYtPnN0YXRlICE9IFVTQl9TVEFURV9DT05GSUdVUkVEKQogCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKIAlpZiAoVVNCX1RZUEVfVkVORE9SID09IChVU0JfVFlQRV9NQVNLICYgcmVxdWVzdHR5cGUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCmluZGV4IGUxNzEwZjIuLjQwZGVlMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKQEAgLTY2LDcgKzY2LDcgQEAKIAlzdHJ1Y3QgZXBfZGV2aWNlICplcCA9IHRvX2VwX2RldmljZShkZXYpOwogCWNoYXIgKnR5cGUgPSAidW5rbm93biI7CiAKLQlzd2l0Y2ggKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCXN3aXRjaCAodXNiX2VuZHBvaW50X3R5cGUoZXAtPmRlc2MpKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQl0eXBlID0gIkNvbnRyb2wiOwogCQlicmVhazsKQEAgLTk0LDcgKzk0LDcgQEAKIAogCWluID0gKGVwLT5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTik7CiAKLQlzd2l0Y2ggKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgeworCXN3aXRjaCAodXNiX2VuZHBvaW50X3R5cGUoZXAtPmRlc2MpKSB7CiAJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQlpZiAoZXAtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSAJLyogdWZyYW1lcyBwZXIgTkFLICovCiAJCQlpbnRlcnZhbCA9IGVwLT5kZXNjLT5iSW50ZXJ2YWw7CkBAIC0xMzEsMTAgKzEzMSw5IEBACiAJc3RydWN0IGVwX2RldmljZSAqZXAgPSB0b19lcF9kZXZpY2UoZGV2KTsKIAljaGFyICpkaXJlY3Rpb247CiAKLQlpZiAoKGVwLT5kZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJCVVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCisJaWYgKHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woZXAtPmRlc2MpKQogCQlkaXJlY3Rpb24gPSAiYm90aCI7Ci0JZWxzZSBpZiAoZXAtPmRlc2MtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQorCWVsc2UgaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXAtPmRlc2MpKQogCQlkaXJlY3Rpb24gPSAiaW4iOwogCWVsc2UKIAkJZGlyZWN0aW9uID0gIm91dCI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCAzYzcxMWRiNS4uODFmYTg1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC0yNzksOSArMjc5LDkgQEAKICAqIGhlbHBlciByb3V0aW5lIGZvciByZXR1cm5pbmcgc3RyaW5nIGRlc2NyaXB0b3JzIGluIFVURi0xNkxFCiAgKiBpbnB1dCBjYW4gYWN0dWFsbHkgYmUgSVNPLTg4NTktMTsgQVNDSUkgaXMgaXRzIDctYml0IHN1YnNldAogICovCi1zdGF0aWMgaW50IGFzY2lpMnV0ZiAoY2hhciAqcywgdTggKnV0ZiwgaW50IHV0Zm1heCkKK3N0YXRpYyB1bnNpZ25lZCBhc2NpaTJ1dGYoY2hhciAqcywgdTggKnV0ZiwgaW50IHV0Zm1heCkKIHsKLQlpbnQgcmV0dmFsOworCXVuc2lnbmVkIHJldHZhbDsKIAogCWZvciAocmV0dmFsID0gMDsgKnMgJiYgdXRmbWF4ID4gMTsgdXRmbWF4IC09IDIsIHJldHZhbCArPSAyKSB7CiAJCSp1dGYrKyA9ICpzKys7CkBAIC0zMDQsMTkgKzMwNCwxNSBAQAogICogUHJvZHVjZXMgZWl0aGVyIGEgbWFudWZhY3R1cmVyLCBwcm9kdWN0IG9yIHNlcmlhbCBudW1iZXIgc3RyaW5nIGZvciB0aGUKICAqIHZpcnR1YWwgcm9vdCBodWIgZGV2aWNlLgogICovCi1zdGF0aWMgaW50IHJoX3N0cmluZyAoCi0JaW50CQlpZCwKLQlzdHJ1Y3QgdXNiX2hjZAkqaGNkLAotCXU4CQkqZGF0YSwKLQlpbnQJCWxlbgotKSB7CitzdGF0aWMgdW5zaWduZWQgcmhfc3RyaW5nKGludCBpZCwgc3RydWN0IHVzYl9oY2QgKmhjZCwgdTggKmRhdGEsIHVuc2lnbmVkIGxlbikKK3sKIAljaGFyIGJ1ZiBbMTAwXTsKIAogCS8vIGxhbmd1YWdlIGlkcwogCWlmIChpZCA9PSAwKSB7CiAJCWJ1ZlswXSA9IDQ7ICAgIGJ1ZlsxXSA9IDM7CS8qIDQgYnl0ZXMgc3RyaW5nIGRhdGEgKi8KIAkJYnVmWzJdID0gMHgwOTsgYnVmWzNdID0gMHgwNDsJLyogTVNGVC1zcGVhayBmb3IgImVuLXVzIiAqLwotCQlsZW4gPSBtaW4gKGxlbiwgNCk7CisJCWxlbiA9IG1pbl90KHVuc2lnbmVkLCBsZW4sIDQpOwogCQltZW1jcHkgKGRhdGEsIGJ1ZiwgbGVuKTsKIAkJcmV0dXJuIGxlbjsKIApAQCAtMzMyLDEwICszMjgsNyBAQAogCX0gZWxzZSBpZiAoaWQgPT0gMykgewogCQlzbnByaW50ZiAoYnVmLCBzaXplb2YgYnVmLCAiJXMgJXMgJXMiLCBpbml0X3V0c25hbWUoKS0+c3lzbmFtZSwKIAkJCWluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLCBoY2QtPmRyaXZlci0+ZGVzY3JpcHRpb24pOwotCi0JLy8gdW5zdXBwb3J0ZWQgSURzIC0tPiAicHJvdG9jb2wgc3RhbGwiCi0JfSBlbHNlCi0JCXJldHVybiAtRVBJUEU7CisJfQogCiAJc3dpdGNoIChsZW4pIHsJCS8qIEFsbCBjYXNlcyBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgpAQCAtMzYwLDkgKzM1Myw4IEBACiAJdTgJCXRidWYgW3NpemVvZiAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvcildCiAJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKIAljb25zdCB1OAkqYnVmcCA9IHRidWY7Ci0JaW50CQlsZW4gPSAwOworCXVuc2lnbmVkCWxlbiA9IDA7CiAJaW50CQlzdGF0dXM7Ci0JaW50CQluOwogCXU4CQlwYXRjaF93YWtldXAgPSAwOwogCXU4CQlwYXRjaF9wcm90b2NvbCA9IDA7CiAKQEAgLTQ1NiwxMCArNDQ4LDExIEBACiAJCQkJcGF0Y2hfd2FrZXVwID0gMTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9EVF9TVFJJTkcgPDwgODoKLQkJCW4gPSByaF9zdHJpbmcgKHdWYWx1ZSAmIDB4ZmYsIGhjZCwgdWJ1Ziwgd0xlbmd0aCk7Ci0JCQlpZiAobiA8IDApCisJCQlpZiAoKHdWYWx1ZSAmIDB4ZmYpIDwgNCkKKwkJCQl1cmItPmFjdHVhbF9sZW5ndGggPSByaF9zdHJpbmcod1ZhbHVlICYgMHhmZiwKKwkJCQkJCWhjZCwgdWJ1Ziwgd0xlbmd0aCk7CisJCQllbHNlIC8qIHVuc3VwcG9ydGVkIElEcyAtLT4gInByb3RvY29sIHN0YWxsIiAqLwogCQkJCWdvdG8gZXJyb3I7Ci0JCQl1cmItPmFjdHVhbF9sZW5ndGggPSBuOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGVycm9yOwpAQCAtNjI5LDcgKzYyMiw3IEBACiB7CiAJaW50CQlyZXR2YWw7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKLQlpbnQJCWxlbiA9IDEgKyAodXJiLT5kZXYtPm1heGNoaWxkIC8gOCk7CisJdW5zaWduZWQJbGVuID0gMSArICh1cmItPmRldi0+bWF4Y2hpbGQgLyA4KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlICgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKIAlpZiAoaGNkLT5zdGF0dXNfdXJiIHx8IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA8IGxlbikgewpAQCAtOTAxLDcgKzg5NCw3IEBACiAKIAltdXRleF9sb2NrKCZ1c2JfYnVzX2xpc3RfbG9jayk7CiAKLQl1c2JfZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpOworCXVzYl9kZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpOwogCXJldHZhbCA9IHVzYl9nZXRfZGV2aWNlX2Rlc2NyaXB0b3IodXNiX2RldiwgVVNCX0RUX0RFVklDRV9TSVpFKTsKIAlpZiAocmV0dmFsICE9IHNpemVvZiB1c2JfZGV2LT5kZXNjcmlwdG9yKSB7CiAJCW11dGV4X3VubG9jaygmdXNiX2J1c19saXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggY2Q1MGQ4Ni4uYmU4NmFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC0zOTIsNyArMzkyLDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX2h1YiAqaHViID0gdXJiLT5jb250ZXh0OwogCWludCBzdGF0dXMgPSB1cmItPnN0YXR1czsKLQlpbnQgaTsKKwl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIGxvbmcgYml0czsKIAogCXN3aXRjaCAoc3RhdHVzKSB7CkBAIC0xMzA1LDYgKzEzMDUsNyBAQAogCQlyZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKHVkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9zdGF0ZV9sb2NrLCBmbGFncyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2V0X2RldmljZV9zdGF0ZSk7CiAKIC8qCiAgKiBXVVNCIGRldmljZXMgYXJlIHNpbXBsZTogdGhleSBoYXZlIG5vIGh1YnMgYmVoaW5kLCBzbyB0aGUgbWFwcGluZwpAQCAtMjQ3MSwyMCArMjQ3MiwyMCBAQAogCSAqLwogCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKIAljYXNlIFVTQl9TUEVFRF9WQVJJQUJMRToJLyogZml4ZWQgYXQgNTEyICovCi0JCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpOworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDUxMik7CiAJCWJyZWFrOwogCWNhc2UgVVNCX1NQRUVEX0hJR0g6CQkvKiBmaXhlZCBhdCA2NCAqLwotCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpOworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDY0KTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfU1BFRURfRlVMTDoJCS8qIDgsIDE2LCAzMiwgb3IgNjQgKi8KIAkJLyogdG8gZGV0ZXJtaW5lIHRoZSBlcDAgbWF4cGFja2V0IHNpemUsIHRyeSB0byByZWFkCiAJCSAqIHRoZSBkZXZpY2UgZGVzY3JpcHRvciB0byBnZXQgYk1heFBhY2tldFNpemUwIGFuZAogCQkgKiB0aGVuIGNvcnJlY3Qgb3VyIGluaXRpYWwgZ3Vlc3MuCiAJCSAqLwotCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpOworCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IGNwdV90b19sZTE2KDY0KTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfU1BFRURfTE9XOgkJLyogZml4ZWQgYXQgOCAqLwotCQl1ZGV2LT5lcDAuZGVzYy53TWF4UGFja2V0U2l6ZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoOCk7CisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoOCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWdvdG8gZmFpbDsKQEAgLTMzOTIsMTAgKzMzOTMsMTAgQEAKIAkJdWRldi0+ZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7CS8qIGZvciBkaXNjb25uZWN0KCkgY2FsbHMgKi8KIAkJZ290byByZV9lbnVtZXJhdGU7CiAgIAl9Ci0gIAorCisJLyogUmVzdG9yZSB0aGUgZGV2aWNlJ3MgcHJldmlvdXMgY29uZmlndXJhdGlvbiAqLwogCWlmICghdWRldi0+YWN0Y29uZmlnKQogCQlnb3RvIGRvbmU7Ci0KIAlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAogCQkJVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwgMCwKIAkJCXVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlLCAwLApAQCAtMzQwOCwxNiArMzQwOSwyNSBAQAogICAJfQogCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9DT05GSUdVUkVEKTsKIAorCS8qIFB1dCBpbnRlcmZhY2VzIGJhY2sgaW50byB0aGUgc2FtZSBhbHRzZXR0aW5ncyBhcyBiZWZvcmUuCisJICogRG9uJ3QgYm90aGVyIHRvIHNlbmQgdGhlIFNldC1JbnRlcmZhY2UgcmVxdWVzdCBmb3IgaW50ZXJmYWNlcworCSAqIHRoYXQgd2VyZSBhbHJlYWR5IGluIGFsdHNldHRpbmcgMDsgYmVzaWRlcyBiZWluZyB1bm5lY2Vzc2FyeSwKKwkgKiBtYW55IGRldmljZXMgY2FuJ3QgaGFuZGxlIGl0LiAgSW5zdGVhZCBqdXN0IHJlc2V0IHRoZSBob3N0LXNpZGUKKwkgKiBlbmRwb2ludCBzdGF0ZS4KKwkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJOdW1JbnRlcmZhY2VzOyBpKyspIHsKIAkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXTsKIAkJc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciAqZGVzYzsKIAotCQkvKiBzZXRfaW50ZXJmYWNlIHJlc2V0cyBob3N0IHNpZGUgdG9nZ2xlIGV2ZW4KLQkJICogZm9yIGFsdHNldHRpbmcgemVyby4gIHRoZSBpbnRlcmZhY2UgbWF5IGhhdmUgbm8gZHJpdmVyLgotCQkgKi8KIAkJZGVzYyA9ICZpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKLQkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgZGVzYy0+YkludGVyZmFjZU51bWJlciwKLQkJCWRlc2MtPmJBbHRlcm5hdGVTZXR0aW5nKTsKKwkJaWYgKGRlc2MtPmJBbHRlcm5hdGVTZXR0aW5nID09IDApIHsKKwkJCXVzYl9kaXNhYmxlX2ludGVyZmFjZSh1ZGV2LCBpbnRmLCB0cnVlKTsKKwkJCXVzYl9lbmFibGVfaW50ZXJmYWNlKHVkZXYsIGludGYsIHRydWUpOworCQkJcmV0ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGRlc2MtPmJJbnRlcmZhY2VOdW1iZXIsCisJCQkJCWRlc2MtPmJBbHRlcm5hdGVTZXR0aW5nKTsKKwkJfQogCQlpZiAocmV0IDwgMCkgewogCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlc3RvcmUgaW50ZXJmYWNlICVkICIKIAkJCQkiYWx0c2V0dGluZyAlZCAoZXJyb3I9JWQpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9tZXNzYWdlLmMgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwppbmRleCA0OWU3ZjU2Li4zMGEwNjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYwpAQCAtNTksNyArNTksNyBAQAogCQlyZXR2YWwgPSAoY3R4LnN0YXR1cyA9PSAtRU5PRU5UID8gLUVUSU1FRE9VVCA6IGN0eC5zdGF0dXMpOwogCiAJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsCi0JCQkiJXMgdGltZWQgb3V0IG9uIGVwJWQlcyBsZW49JWQvJWRcbiIsCisJCQkiJXMgdGltZWQgb3V0IG9uIGVwJWQlcyBsZW49JXUvJXVcbiIsCiAJCQljdXJyZW50LT5jb21tLAogCQkJdXNiX2VuZHBvaW50X251bSgmdXJiLT5lcC0+ZGVzYyksCiAJCQl1c2JfdXJiX2Rpcl9pbih1cmIpID8gImluIiA6ICJvdXQiLApAQCAtODA0LDE4ICs4MDQsMTYgQEAKIAkJCWRldl9lcnIoJmRldi0+ZGV2LAogCQkJCSJzdHJpbmcgZGVzY3JpcHRvciAwIHJlYWQgZXJyb3I6ICVkXG4iLAogCQkJCWVycik7Ci0JCQlnb3RvIGVycm91dDsKIAkJfSBlbHNlIGlmIChlcnIgPCA0KSB7CiAJCQlkZXZfZXJyKCZkZXYtPmRldiwgInN0cmluZyBkZXNjcmlwdG9yIDAgdG9vIHNob3J0XG4iKTsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycm91dDsKIAkJfSBlbHNlIHsKLQkJCWRldi0+aGF2ZV9sYW5naWQgPSAxOwogCQkJZGV2LT5zdHJpbmdfbGFuZ2lkID0gdGJ1ZlsyXSB8ICh0YnVmWzNdIDw8IDgpOwogCQkJLyogYWx3YXlzIHVzZSB0aGUgZmlyc3QgbGFuZ2lkIGxpc3RlZCAqLwogCQkJZGV2X2RiZygmZGV2LT5kZXYsICJkZWZhdWx0IGxhbmd1YWdlIDB4JTA0eFxuIiwKIAkJCQlkZXYtPnN0cmluZ19sYW5naWQpOwogCQl9CisKKwkJZGV2LT5oYXZlX2xhbmdpZCA9IDE7CiAJfQogCiAJZXJyID0gdXNiX3N0cmluZ19zdWIoZGV2LCBkZXYtPnN0cmluZ19sYW5naWQsIGluZGV4LCB0YnVmKTsKQEAgLTE3MTksNyArMTcxNyw4IEBACiAJfQogCWtmcmVlKG5ld19pbnRlcmZhY2VzKTsKIAotCWlmIChjcC0+c3RyaW5nID09IE5VTEwpCisJaWYgKGNwLT5zdHJpbmcgPT0gTlVMTCAmJgorCQkJIShkZXYtPnF1aXJrcyAmIFVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTKSkKIAkJY3AtPnN0cmluZyA9IHVzYl9jYWNoZV9zdHJpbmcoZGV2LCBjcC0+ZGVzYy5pQ29uZmlndXJhdGlvbik7CiAKIAkvKiBOb3cgdGhhdCBhbGwgdGhlIGludGVyZmFjZXMgYXJlIHNldCB1cCwgcmVnaXN0ZXIgdGhlbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKaW5kZXggYzA3MGIzNC4uYWI5MzkxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCkBAIC01NCw2ICs1NCwxMCBAQAogCXsgVVNCX0RFVklDRSgweDA2MzgsIDB4MGExMyksIC5kcml2ZXJfaW5mbyA9CiAJICBVU0JfUVVJUktfU1RSSU5HX0ZFVENIXzI1NSB9LAogCisJLyogU2FpdGVrIEN5Ym9yZyBHb2xkIEpveXN0aWNrICovCisJeyBVU0JfREVWSUNFKDB4MDZhMywgMHgwMDA2KSwgLmRyaXZlcl9pbmZvID0KKwkJCVVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTIH0sCisKIAkvKiBNLVN5c3RlbXMgRmxhc2ggRGlzayBQaW9uZWVycyAqLwogCXsgVVNCX0RFVklDRSgweDA4ZWMsIDB4MTAwMCksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19SRVNFVF9SRVNVTUUgfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IDRjYzI0NTYuLmM2Njc4OTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvcXVpcmtzLmg+CiAjaW5jbHVkZSAidXNiLmgiCiAKIC8qIEFjdGl2ZSBjb25maWd1cmF0aW9uIGZpZWxkcyAqLwpAQCAtODEzLDcgKzgxNCw4IEBACiAJaWYgKGludGYtPnN5c2ZzX2ZpbGVzX2NyZWF0ZWQgfHwgaW50Zi0+dW5yZWdpc3RlcmluZykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoYWx0LT5zdHJpbmcgPT0gTlVMTCkKKwlpZiAoYWx0LT5zdHJpbmcgPT0gTlVMTCAmJgorCQkJISh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUykpCiAJCWFsdC0+c3RyaW5nID0gdXNiX2NhY2hlX3N0cmluZyh1ZGV2LCBhbHQtPmRlc2MuaUludGVyZmFjZSk7CiAJaWYgKGFsdC0+c3RyaW5nKQogCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2ludGVyZmFjZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwppbmRleCA1OGJjNWUzLi4zMzc2MDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogCWlmICghdXJiIHx8IHVyYi0+aGNwcml2IHx8ICF1cmItPmNvbXBsZXRlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlkZXYgPSB1cmItPmRldjsKLQlpZiAoKCFkZXYpIHx8IChkZXYtPnN0YXRlIDwgVVNCX1NUQVRFX0RFRkFVTFQpKQorCWlmICgoIWRldikgfHwgKGRldi0+c3RhdGUgPCBVU0JfU1RBVEVfVU5BVVRIRU5USUNBVEVEKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBGb3Igbm93LCBnZXQgdGhlIGVuZHBvaW50IGZyb20gdGhlIHBpcGUuICBFdmVudHVhbGx5IGRyaXZlcnMKQEAgLTM3MCw3ICszNzAsNyBAQAogCX0KIAogCS8qIHRoZSBJL08gYnVmZmVyIG11c3QgYmUgbWFwcGVkL3VubWFwcGVkLCBleGNlcHQgd2hlbiBsZW5ndGg9MCAqLwotCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPCAwKQorCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiBJTlRfTUFYKQogCQlyZXR1cm4gLUVNU0dTSVpFOwogCiAjaWZkZWYgREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5kZXggZTU1ZmVmNS4uNzcwYjNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKQEAgLTI1NCw2ICsyNTQsNyBAQAogY29uZmlnIFVTQl9HQURHRVRfUFhBMjdYCiAJYm9vbGVhbiAiUFhBIDI3eCIKIAlkZXBlbmRzIG9uIEFSQ0hfUFhBICYmIFBYQTI3eAorCXNlbGVjdCBVU0JfT1RHX1VUSUxTCiAJaGVscAogCSAgIEludGVsJ3MgUFhBIDI3eCBzZXJpZXMgWFNjYWxlIEFSTSB2NVRFIHByb2Nlc3NvcnMgaW5jbHVkZQogCSAgIGFuIGludGVncmF0ZWQgZnVsbCBzcGVlZCBVU0IgMS4xIGRldmljZSBjb250cm9sbGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hbWQ1NTM2dWRjLmMKaW5kZXggYWJmODE5Mi4uODI2ZjNhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2FtZDU1MzZ1ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYW1kNTUzNnVkYy5jCkBAIC01NTEsNyArNTUxLDcgQEAKIAkJZG1hX2Rlc2MtPnN0YXR1cyA9IEFNRF9BRERCSVRTKGRtYV9kZXNjLT5zdGF0dXMsCiAJCQkJCQlVRENfRE1BX1NUUF9TVFNfQlNfSE9TVF9CVVNZLAogCQkJCQkJVURDX0RNQV9TVFBfU1RTX0JTKTsKLQkJZG1hX2Rlc2MtPmJ1ZnB0ciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRE1BX0RPTlRfVVNFKTsKKwkJZG1hX2Rlc2MtPmJ1ZnB0ciA9IGNwdV90b19sZTMyKERNQV9ET05UX1VTRSk7CiAJCXJlcS0+dGRfZGF0YSA9IGRtYV9kZXNjOwogCQlyZXEtPnRkX2RhdGFfbGFzdCA9IE5VTEw7CiAJCXJlcS0+Y2hhaW5fbGVuID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKaW5kZXggNjViMDNlMy4uYzIyZmFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmMKQEAgLTEwMTcsNyArMTAxNyw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVCwKIAkuYkVuZHBvaW50QWRkcmVzcyA9IDAsCiAJLmJtQXR0cmlidXRlcyA9IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCi0JLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCksCisJLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNjQpLAogCS8qIEZJWE1FOiBJIGhhdmUgbm8gaWRlYSB3aGF0IHRvIHB1dCBoZXJlICovCiAJLmJJbnRlcnZhbCA9IDEsCiB9OwpAQCAtMTIwNywyMSArMTIwNywyMSBAQAogLyogQXZvaWQgb3Zlcmx5IGxvbmcgZXhwcmVzc2lvbnMgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlX2lzX2Rldl9yZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNycSkKIHsKLQlpZiAoY3JxLT53VmFsdWUgPT0gX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApKQorCWlmIChjcnEtPndWYWx1ZSA9PSBjcHVfdG9fbGUxNihVU0JfREVWSUNFX1JFTU9URV9XQUtFVVApKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlX2lzX2Rldl90ZXN0X21vZGUoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3JxKQogewotCWlmIChjcnEtPndWYWx1ZSA9PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9ERVZJQ0VfVEVTVF9NT0RFKSkKKwlpZiAoY3JxLT53VmFsdWUgPT0gY3B1X3RvX2xlMTYoVVNCX0RFVklDRV9URVNUX01PREUpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlX2lzX2VwX2hhbHQoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3JxKQogewotCWlmIChjcnEtPndWYWx1ZSA9PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KFVTQl9FTkRQT0lOVF9IQUxUKSkKKwlpZiAoY3JxLT53VmFsdWUgPT0gY3B1X3RvX2xlMTYoVVNCX0VORFBPSU5UX0hBTFQpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0xMjM5LDcgKzEyMzksNyBAQAogCQkJc3RhdHVzID0gY3B1X3RvX2xlMTYodWRjLT5kZXZzdGF0dXMpOwogCQl9IGVsc2UgaWYgKGNycS0+YlJlcXVlc3RUeXBlCiAJCQkJPT0gKFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFKSkgewotCQkJc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKTsKKwkJCXN0YXR1cyA9IGNwdV90b19sZTE2KDApOwogCQl9IGVsc2UgaWYgKGNycS0+YlJlcXVlc3RUeXBlCiAJCQkJPT0gKFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfRU5EUE9JTlQpKSB7CiAJCQlzdHJ1Y3QgdXNiYV9lcCAqdGFyZ2V0OwpAQCAtMTI1MCwxMiArMTI1MCwxMiBAQAogCiAJCQlzdGF0dXMgPSAwOwogCQkJaWYgKGlzX3N0YWxsZWQodWRjLCB0YXJnZXQpKQotCQkJCXN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDEpOworCQkJCXN0YXR1cyB8PSBjcHVfdG9fbGUxNigxKTsKIAkJfSBlbHNlCiAJCQlnb3RvIGRlbGVnYXRlOwogCiAJCS8qIFdyaXRlIGRpcmVjdGx5IHRvIHRoZSBGSUZPLiBObyBxdWV1ZWluZyBpcyBkb25lLiAqLwotCQlpZiAoY3JxLT53TGVuZ3RoICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoc2l6ZW9mKHN0YXR1cykpKQorCQlpZiAoY3JxLT53TGVuZ3RoICE9IGNwdV90b19sZTE2KHNpemVvZihzdGF0dXMpKSkKIAkJCWdvdG8gc3RhbGw7CiAJCWVwLT5zdGF0ZSA9IERBVEFfU1RBR0VfSU47CiAJCV9fcmF3X3dyaXRldyhzdGF0dXMsIGVwLT5maWZvKTsKQEAgLTEyNzQsNyArMTI3NCw3IEBACiAJCX0gZWxzZSBpZiAoY3JxLT5iUmVxdWVzdFR5cGUgPT0gVVNCX1JFQ0lQX0VORFBPSU5UKSB7CiAJCQlzdHJ1Y3QgdXNiYV9lcCAqdGFyZ2V0OwogCi0JCQlpZiAoY3JxLT53TGVuZ3RoICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCkKKwkJCWlmIChjcnEtPndMZW5ndGggIT0gY3B1X3RvX2xlMTYoMCkKIAkJCQkJfHwgIWZlYXR1cmVfaXNfZXBfaGFsdChjcnEpKQogCQkJCWdvdG8gc3RhbGw7CiAJCQl0YXJnZXQgPSBnZXRfZXBfYnlfYWRkcih1ZGMsIGxlMTZfdG9fY3B1KGNycS0+d0luZGV4KSk7CkBAIC0xMzA4LDcgKzEzMDgsNyBAQAogCQl9IGVsc2UgaWYgKGNycS0+YlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9FTkRQT0lOVCkgewogCQkJc3RydWN0IHVzYmFfZXAgKnRhcmdldDsKIAotCQkJaWYgKGNycS0+d0xlbmd0aCAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApCisJCQlpZiAoY3JxLT53TGVuZ3RoICE9IGNwdV90b19sZTE2KDApCiAJCQkJCXx8ICFmZWF0dXJlX2lzX2VwX2hhbHQoY3JxKSkKIAkJCQlnb3RvIHN0YWxsOwogCkBAIC0xNTE0LDcgKzE1MTQsNyBAQAogCQkJICovCiAJCQllcC0+c3RhdGUgPSBEQVRBX1NUQUdFX0lOOwogCQl9IGVsc2UgewotCQkJaWYgKGNycS5jcnEud0xlbmd0aCAhPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDApKQorCQkJaWYgKGNycS5jcnEud0xlbmd0aCAhPSBjcHVfdG9fbGUxNigwKSkKIAkJCQllcC0+c3RhdGUgPSBEQVRBX1NUQUdFX09VVDsKIAkJCWVsc2UKIAkJCQllcC0+c3RhdGUgPSBTVEFUVVNfU1RBR0VfSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NkYzIuYwppbmRleCA1NDk1YjE3Li45MjgxMzdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2RjMi5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jZGMyLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19DT01NLAogCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLApAQCAtNzQsOCArNzQsOCBAQAogCS8qIC5iTWF4UGFja2V0U2l6ZTAgPSBmKGhhcmR3YXJlKSAqLwogCiAJLyogVmVuZG9yIGFuZCBwcm9kdWN0IGlkIGNhbiBiZSBvdmVycmlkZGVuIGJ5IG1vZHVsZSBwYXJhbWV0ZXJzLiAgKi8KLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihDRENfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KENEQ19QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KENEQ19WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KENEQ19QUk9EVUNUX05VTSksCiAJLyogLmJjZERldmljZSA9IGYoaGFyZHdhcmUpICovCiAJLyogLmlNYW51ZmFjdHVyZXIgPSBEWU5BTUlDICovCiAJLyogLmlQcm9kdWN0ID0gRFlOQU1JQyAqLwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJCQkJZ2FkZ2V0LT5uYW1lLAogCQkJCWNkY19jb25maWdfZHJpdmVyLmxhYmVsKTsKIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMzAwIHwgMHgwMDk5KTsKKwkJCWNwdV90b19sZTE2KDB4MDMwMCB8IDB4MDA5OSk7CiAJfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKaW5kZXggYmViZjkxMS4uMjJjNjU5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmMKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjYyNiw3ICsyNjI1LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmdWRjLT5nYWRnZXQuZXBfbGlzdCk7CiAJdWRjLT5nYWRnZXQuZXAwID0gTlVMTDsKIAotCXN0cmNweSh1ZGMtPmdhZGdldC5kZXYuYnVzX2lkLCAiZ2FkZ2V0Iik7CisJZGV2X3NldF9uYW1lKCZ1ZGMtPmdhZGdldC5kZXYsICJnYWRnZXQiKTsKIAl1ZGMtPmdhZGdldC5kZXYuZG1hX21hc2sgPSBkZXYtPmRtYV9tYXNrOwogCXVkYy0+Z2FkZ2V0LmRldi5wYXJlbnQgICA9IGRldjsKIAl1ZGMtPmdhZGdldC5kZXYucmVsZWFzZSAgPSB1ZGNfcmVsZWFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYwppbmRleCA1ZDExYzI5Li41OWU4NTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCkBAIC0xNDksMTYgKzE0OSwxNyBAQAogaW50IHVzYl9mdW5jdGlvbl9kZWFjdGl2YXRlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmZ1bmN0aW9uKQogewogCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IGZ1bmN0aW9uLT5jb25maWctPmNkZXY7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOwogCWludAkJCQlzdGF0dXMgPSAwOwogCi0Jc3Bpbl9sb2NrKCZjZGV2LT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2Rldi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGNkZXYtPmRlYWN0aXZhdGlvbnMgPT0gMCkKIAkJc3RhdHVzID0gdXNiX2dhZGdldF9kaXNjb25uZWN0KGNkZXYtPmdhZGdldCk7CiAJaWYgKHN0YXR1cyA9PSAwKQogCQljZGV2LT5kZWFjdGl2YXRpb25zKys7CiAKLQlzcGluX3VubG9jaygmY2Rldi0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2Rldi0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEwMTMsNyArMTAxNCw3IEBACiAJc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2CSpjZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CiAJc3RydWN0IHVzYl9mdW5jdGlvbgkJKmY7CiAKLQkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGFuZCBkZXZpY2UgbGV2ZWwKKwkvKiBSRVZJU0lUOiAgc2hvdWxkIHdlIGhhdmUgY29uZmlnIGxldmVsCiAJICogc3VzcGVuZC9yZXN1bWUgY2FsbGJhY2tzPwogCSAqLwogCURCRyhjZGV2LCAic3VzcGVuZFxuIik7CkBAIC0xMDIzLDYgKzEwMjQsOCBAQAogCQkJCWYtPnN1c3BlbmQoZik7CiAJCX0KIAl9CisJaWYgKGNvbXBvc2l0ZS0+c3VzcGVuZCkKKwkJY29tcG9zaXRlLT5zdXNwZW5kKGNkZXYpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTAzMSwxMCArMTAzNCwxMiBAQAogCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldgkqY2RldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOwogCXN0cnVjdCB1c2JfZnVuY3Rpb24JCSpmOwogCi0JLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBhbmQgZGV2aWNlIGxldmVsCisJLyogUkVWSVNJVDogIHNob3VsZCB3ZSBoYXZlIGNvbmZpZyBsZXZlbAogCSAqIHN1c3BlbmQvcmVzdW1lIGNhbGxiYWNrcz8KIAkgKi8KIAlEQkcoY2RldiwgInJlc3VtZVxuIik7CisJaWYgKGNvbXBvc2l0ZS0+cmVzdW1lKQorCQljb21wb3NpdGUtPnJlc3VtZShjZGV2KTsKIAlpZiAoY2Rldi0+Y29uZmlnKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmNkZXYtPmNvbmZpZy0+ZnVuY3Rpb25zLCBsaXN0KSB7CiAJCQlpZiAoZi0+cmVzdW1lKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDkwNjQ2OTYuLmE1NmIyNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTE0MzcsNyArMTQzNyw3IEBACiAJCQkJCX0KIAkJCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDEpCiAJCQkJCQlidWYgWzFdID0gMDsKLQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gbWluICgyLAorCQkJCQl1cmItPmFjdHVhbF9sZW5ndGggPSBtaW5fdCh1MzIsIDIsCiAJCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCQkJCQl2YWx1ZSA9IDA7CiAJCQkJCXN0YXR1cyA9IDA7CkBAIC0xNjI2LDcgKzE2MjYsNyBAQAogCQlodWJfZGVzY3JpcHRvciAoKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKikgYnVmKTsKIAkJYnJlYWs7CiAJY2FzZSBHZXRIdWJTdGF0dXM6Ci0JCSooX19sZTMyICopIGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQkqKF9fbGUzMiAqKSBidWYgPSBjcHVfdG9fbGUzMiAoMCk7CiAJCWJyZWFrOwogCWNhc2UgR2V0UG9ydFN0YXR1czoKIAkJaWYgKHdJbmRleCAhPSAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKaW5kZXggYTM2YjExNy4uY2QwOTE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAkJCXJldHVybiAwOwogCiAJCS8qIEJPVEg6ICAiaGlnaCBiYW5kd2lkdGgiIHdvcmtzIG9ubHkgYXQgaGlnaCBzcGVlZCAqLwotCQlpZiAoKGRlc2MtPndNYXhQYWNrZXRTaXplICYgX19jb25zdGFudF9jcHVfdG9fbGUxNigzPDwxMSkpKSB7CisJCWlmICgoZGVzYy0+d01heFBhY2tldFNpemUgJiBjcHVfdG9fbGUxNigzPDwxMSkpKSB7CiAJCQlpZiAoIWdhZGdldC0+aXNfZHVhbHNwZWVkKQogCQkJCXJldHVybiAwOwogCQkJLyogY29uZmlndXJlIHlvdXIgaGFyZHdhcmUgd2l0aCBlbm91Z2ggYnVmZmVyaW5nISEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggMzcyNTJkMC4uZDAwNmRjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBkZXZpY2VfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRSwKIAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2ICgweDAyMDApLAogCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfQ09NTSwKIAkuYkRldmljZVN1YkNsYXNzID0JMCwKQEAgLTE2Nyw4ICsxNjcsOCBAQAogCSAqIHdlIHN1cHBvcnQuICAoQXMgZG9lcyBiTnVtQ29uZmlndXJhdGlvbnMuKSAgVGhlc2UgdmFsdWVzIGNhbgogCSAqIGFsc28gYmUgb3ZlcnJpZGRlbiBieSBtb2R1bGUgcGFyYW1ldGVycy4KIAkgKi8KLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoQ0RDX1ZFTkRPUl9OVU0pLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNiAoQ0RDX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYgKENEQ19WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2IChDRENfUFJPRFVDVF9OVU0pLAogCS8qIC5iY2REZXZpY2UgPSBmKGhhcmR3YXJlKSAqLwogCS8qIC5pTWFudWZhY3R1cmVyID0gRFlOQU1JQyAqLwogCS8qIC5pUHJvZHVjdCA9IERZTkFNSUMgKi8KQEAgLTMxOCw3ICszMTgsNyBAQAogCQkJCWdhZGdldC0+bmFtZSwKIAkJCQlldGhfY29uZmlnX2RyaXZlci5sYWJlbCk7CiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDMwMCB8IDB4MDA5OSk7CisJCQljcHVfdG9fbGUxNigweDAzMDAgfCAweDAwOTkpOwogCX0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9hY20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCmluZGV4IGMxZDM0ZGYuLjc5NTM5NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YoYWNtX2hlYWRlcl9kZXNjKSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19IRUFERVJfVFlQRSwKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfY2FsbF9tZ210X2Rlc2NyaXB0b3IKQEAgLTE1OSw3ICsxNTksNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoR1NfTk9USUZZX01BWFBBQ0tFVCksCiAJLmJJbnRlcnZhbCA9CQkxIDw8IEdTX0xPRzJfTk9USUZZX0lOVEVSVkFMLAogfTsKIApAQCAtMTk3LDcgKzE5Nyw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihHU19OT1RJRllfTUFYUEFDS0VUKSwKIAkuYkludGVydmFsID0JCUdTX0xPRzJfTk9USUZZX0lOVEVSVkFMKzQsCiB9OwogCkBAIC0yMDUsMTQgKzIwNSwxNCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBhY21faHNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICphY21faHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYwppbmRleCA0YWU1Nzk5Li5lY2Y1YmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9lY20uYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZSA9CVVTQl9DRENfSEVBREVSX1RZUEUsCiAKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTEwKSwKKwkuYmNkQ0RDID0JCWNwdV90b19sZTE2KDB4MDExMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBlY21fdW5pb25fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMTQ4LDkgKzE0OCw5IEBACiAKIAkvKiB0aGlzIGRlc2NyaXB0b3IgYWN0dWFsbHkgYWRkcyB2YWx1ZSwgc3VycHJpc2UhICovCiAJLyogLmlNQUNBZGRyZXNzID0gRFlOQU1JQyAqLwotCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KLQkud01heFNlZ21lbnRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihFVEhfRlJBTUVfTEVOKSwKLQkud051bWJlck1DRmlsdGVycyA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMCksCisJLmJtRXRoZXJuZXRTdGF0aXN0aWNzID0JY3B1X3RvX2xlMzIoMCksIC8qIG5vIHN0YXRpc3RpY3MgKi8KKwkud01heFNlZ21lbnRTaXplID0JY3B1X3RvX2xlMTYoRVRIX0ZSQU1FX0xFTiksCisJLndOdW1iZXJNQ0ZpbHRlcnMgPQljcHVfdG9fbGUxNigwKSwKIAkuYk51bWJlclBvd2VyRmlsdGVycyA9CTAsCiB9OwogCkBAIC0xOTIsNyArMTkyLDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihFQ01fU1RBVFVTX0JZVEVDT1VOVCksCiAJLmJJbnRlcnZhbCA9CQkxIDw8IExPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMsCiB9OwogCkBAIC0yMzYsNyArMjM2LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEVDTV9TVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihFQ01fU1RBVFVTX0JZVEVDT1VOVCksCiAJLmJJbnRlcnZhbCA9CQlMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDICsgNCwKIH07CiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VjbV9pbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0yNDUsNyArMjQ1LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGhzX2VjbV9vdXRfZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMjU0LDcgKzI1NCw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICplY21faHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX2xvb3BiYWNrLmMKaW5kZXggOGFmZmUxZC4uZWI2ZGRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbG9vcGJhY2suYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9sb29wYmFjay5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19sb29wX3NpbmtfZGVzYyA9IHsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqaHNfbG9vcGJhY2tfZGVzY3NbXSA9IHsKQEAgLTM1OSw3ICszNTksNyBAQAogICogbG9vcGJhY2tfYWRkIC0gYWRkIGEgbG9vcGJhY2sgdGVzdGluZyBjb25maWd1cmF0aW9uIHRvIGEgZGV2aWNlCiAgKiBAY2RldjogdGhlIGRldmljZSB0byBzdXBwb3J0IHRoZSBsb29wYmFjayBjb25maWd1cmF0aW9uCiAgKi8KLWludCBfX2luaXQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK2ludCBfX2luaXQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiwgYm9vbCBhdXRvcmVzdW1lKQogewogCWludCBpZDsKIApAQCAtMzcyLDYgKzM3MiwxMCBAQAogCWxvb3BiYWNrX2ludGYuaUludGVyZmFjZSA9IGlkOwogCWxvb3BiYWNrX2RyaXZlci5pQ29uZmlndXJhdGlvbiA9IGlkOwogCisJLyogc3VwcG9ydCBhdXRvcmVzdW1lIGZvciByZW1vdGUgd2FrZXVwIHRlc3RpbmcgKi8KKwlpZiAoYXV0b3Jlc3VtZSkKKwkJc291cmNlc2lua19kcml2ZXIuYm1BdHRyaWJ1dGVzIHw9IFVTQl9DT05GSUdfQVRUX1dBS0VVUDsKKwogCS8qIHN1cHBvcnQgT1RHIHN5c3RlbXMgKi8KIAlpZiAoZ2FkZ2V0X2lzX290ZyhjZGV2LT5nYWRnZXQpKSB7CiAJCWxvb3BiYWNrX2RyaXZlci5kZXNjcmlwdG9ycyA9IG90Z19kZXNjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfb2JleC5jCmluZGV4IDM4YWE4OTYuLjQ2ZDYyNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX29iZXguYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9vYmV4LmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCS5iTGVuZ3RoCQk9IHNpemVvZihvYmV4X2NkY19oZWFkZXJfZGVzYyksCiAJLmJEZXNjcmlwdG9yVHlwZQk9IFVTQl9EVF9DU19JTlRFUkZBQ0UsCiAJLmJEZXNjcmlwdG9yU3ViVHlwZQk9IFVTQl9DRENfSEVBREVSX1RZUEUsCi0JLmJjZENEQwkJCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMjApLAorCS5iY2RDREMJCQk9IGNwdV90b19sZTE2KDB4MDEyMCksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9jZGNfdW5pb25fZGVzYyBvYmV4X2NkY191bmlvbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xMzgsNyArMTM4LDcgQEAKIAkuYkxlbmd0aAkJPSBzaXplb2Yob2JleF9kZXNjKSwKIAkuYkRlc2NyaXB0b3JUeXBlCT0gVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlCT0gVVNCX0NEQ19PQkVYX1RZUEUsCi0JLmJjZFZlcnNpb24JCT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAorCS5iY2RWZXJzaW9uCQk9IGNwdV90b19sZTE2KDB4MDEwMCksCiB9OwogCiAvKiBIaWdoLVNwZWVkIFN1cHBvcnQgKi8KQEAgLTE0OSw3ICsxNDksNyBAQAogCiAJLmJFbmRwb2ludEFkZHJlc3MJPSBVU0JfRElSX09VVCwKIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUJCT0gY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3Igb2JleF9oc19lcF9pbl9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xNTgsNyArMTU4LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzCT0gVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzCQk9IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUJCT0gY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpoc19mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9waG9uZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCmluZGV4IGMwOTE2YzcuLmMxYWJlYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCkBAIC03OSw3ICs3OSw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIHBuX2hlYWRlcl9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAotCS5iY2RDREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMTApLAorCS5iY2RDREMgPQkJY3B1X3RvX2xlMTYoMHgwMTEwKSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2NkY19oZWFkZXJfZGVzYwpAQCAtODcsNyArODcsNyBAQAogCS5iTGVuZ3RoID0JCXNpemVvZiBwbl9waG9uZXRfZGVzYywKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKIAkuYkRlc2NyaXB0b3JTdWJUeXBlID0JVVNCX0NEQ19QSE9ORVRfVFlQRSwKLQkuYmNkQ0RDID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgxNTA1KSwgLyogPz8/ICovCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDE1MDUpLCAvKiA/Pz8gKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NkY191bmlvbl9kZXNjCkBAIC0xMzgsNyArMTM4LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9PVVQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgpAQCAtMTU3LDcgKzE1Nyw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmZzX3BuX2Z1bmN0aW9uW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYwppbmRleCAzYThiYjUzLi4zMjc5YTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKQEAgLTEzNyw3ICsxMzcsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAogCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDAxMTApLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX2NhbGxfbWdtdF9kZXNjcmlwdG9yIGNhbGxfbWdtdF9kZXNjcmlwdG9yIF9faW5pdGRhdGEgPSB7CkBAIC0xODcsNyArMTg3LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KFNUQVRVU19CWVRFQ09VTlQpLAogCS5iSW50ZXJ2YWwgPQkJMSA8PCBMT0cyX1NUQVRVU19JTlRFUlZBTF9NU0VDLAogfTsKIApAQCAtMjMwLDcgKzIzMCw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9JTlQsCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNihTVEFUVVNfQllURUNPVU5UKSwKIAkuYkludGVydmFsID0JCUxPRzJfU1RBVFVTX0lOVEVSVkFMX01TRUMgKyA0LAogfTsKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfaW5fZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMjM5LDcgKzIzOSw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19vdXRfZGVzYyBfX2luaXRkYXRhID0gewpAQCAtMjQ4LDcgKzI0OCw3IEBACiAKIAkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfT1VULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpldGhfaHNfZnVuY3Rpb25bXSBfX2luaXRkYXRhID0gewpAQCAtNDM3LDcgKzQzNyw3IEBACiAJCURCRyhjZGV2LCAicm5kaXMgcmVxJTAyeC4lMDJ4IHYlMDR4IGklMDR4IGwlZFxuIiwKIAkJCWN0cmwtPmJSZXF1ZXN0VHlwZSwgY3RybC0+YlJlcXVlc3QsCiAJCQl3X3ZhbHVlLCB3X2luZGV4LCB3X2xlbmd0aCk7Ci0JCXJlcS0+emVybyA9IDA7CisJCXJlcS0+emVybyA9ICh2YWx1ZSA8IHdfbGVuZ3RoKTsKIAkJcmVxLT5sZW5ndGggPSB2YWx1ZTsKIAkJdmFsdWUgPSB1c2JfZXBfcXVldWUoY2Rldi0+Z2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CiAJCWlmICh2YWx1ZSA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NlcmlhbC5jCmluZGV4IGZlNTY3NGRiLi5kYjBhYTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zZXJpYWwuYwpAQCAtODksMTQgKzg5LDE0IEBACiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGdzZXJfaHNfb3V0X2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICpnc2VyX2hzX2Z1bmN0aW9uW10gX19pbml0ZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3NvdXJjZXNpbmsuYwppbmRleCBkYzg0ZDI2Li5iZmZlOTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9zb3VyY2VzaW5rLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc291cmNlc2luay5jCkBAIC01OSw3ICs1OSw2IEBACiAKIAlzdHJ1Y3QgdXNiX2VwCQkqaW5fZXA7CiAJc3RydWN0IHVzYl9lcAkJKm91dF9lcDsKLQlzdHJ1Y3QgdGltZXJfbGlzdAlyZXN1bWU7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmX3NvdXJjZXNpbmsgKmZ1bmNfdG9fc3Moc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKQEAgLTY3LDEwICs2Niw2IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihmLCBzdHJ1Y3QgZl9zb3VyY2VzaW5rLCBmdW5jdGlvbik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBhdXRvcmVzdW1lOwotbW9kdWxlX3BhcmFtKGF1dG9yZXN1bWUsIHVpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhhdXRvcmVzdW1lLCAiemVybywgb3Igc2Vjb25kcyBiZWZvcmUgcmVtb3RlIHdha2V1cCIpOwotCiBzdGF0aWMgdW5zaWduZWQgcGF0dGVybjsKIG1vZHVsZV9wYXJhbShwYXR0ZXJuLCB1aW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocGF0dGVybiwgIjAgPSBhbGwgemVyb2VzLCAxID0gbW9kNjMgIik7CkBAIC0xMTgsNyArMTEzLDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBoc19zaW5rX2Rlc2MgPSB7CkBAIC0xMjYsNyArMTIxLDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX3NvdXJjZV9zaW5rX2Rlc2NzW10gPSB7CkBAIC0xNTUsMjEgKzE1MCw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyB2b2lkIHNvdXJjZXNpbmtfYXV0b3Jlc3VtZSh1bnNpZ25lZCBsb25nIF9jKQotewotCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9ICh2b2lkICopX2M7Ci0Jc3RydWN0IHVzYl9nYWRnZXQJKmcgPSBjZGV2LT5nYWRnZXQ7Ci0KLQkvKiBOb3JtYWxseSB0aGUgaG9zdCB3b3VsZCBiZSB3b2tlbiB1cCBmb3Igc29tZXRoaW5nCi0JICogbW9yZSBzaWduaWZpY2FudCB0aGFuIGp1c3QgYSB0aW1lciBmaXJpbmc7IGxpa2VseQotCSAqIGJlY2F1c2Ugb2Ygc29tZSBkaXJlY3QgdXNlciByZXF1ZXN0LgotCSAqLwotCWlmIChnLT5zcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTikgewotCQlpbnQgc3RhdHVzID0gdXNiX2dhZGdldF93YWtldXAoZyk7Ci0JCURCRyhjZGV2LCAiJXMgLS0+ICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0CiBzb3VyY2VzaW5rX2JpbmQoc3RydWN0IHVzYl9jb25maWd1cmF0aW9uICpjLCBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQogewpAQCAtMTk4LDkgKzE3OCw2IEBACiAJCWdvdG8gYXV0b2NvbmZfZmFpbDsKIAlzcy0+b3V0X2VwLT5kcml2ZXJfZGF0YSA9IGNkZXY7CS8qIGNsYWltICovCiAKLQlzZXR1cF90aW1lcigmc3MtPnJlc3VtZSwgc291cmNlc2lua19hdXRvcmVzdW1lLAotCQkJKHVuc2lnbmVkIGxvbmcpIGMtPmNkZXYpOwotCiAJLyogc3VwcG9ydCBoaWdoIHNwZWVkIGhhcmR3YXJlICovCiAJaWYgKGdhZGdldF9pc19kdWFsc3BlZWQoYy0+Y2Rldi0+Z2FkZ2V0KSkgewogCQloc19zb3VyY2VfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KQEAgLTM1OSw3ICszMzYsNiBAQAogCiAJY2RldiA9IHNzLT5mdW5jdGlvbi5jb25maWctPmNkZXY7CiAJZGlzYWJsZV9lbmRwb2ludHMoY2Rldiwgc3MtPmluX2VwLCBzcy0+b3V0X2VwKTsKLQlkZWxfdGltZXIoJnNzLT5yZXN1bWUpOwogCVZEQkcoY2RldiwgIiVzIGRpc2FibGVkXG4iLCBzcy0+ZnVuY3Rpb24ubmFtZSk7CiB9CiAKQEAgLTQyNiwzMCArNDAyLDYgQEAKIAlkaXNhYmxlX3NvdXJjZV9zaW5rKHNzKTsKIH0KIAotc3RhdGljIHZvaWQgc291cmNlc2lua19zdXNwZW5kKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCi17Ci0Jc3RydWN0IGZfc291cmNlc2luawkqc3MgPSBmdW5jX3RvX3NzKGYpOwotCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGYtPmNvbmZpZy0+Y2RldjsKLQotCWlmIChjZGV2LT5nYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKQotCQlyZXR1cm47Ci0KLQlpZiAoYXV0b3Jlc3VtZSkgewotCQltb2RfdGltZXIoJnNzLT5yZXN1bWUsIGppZmZpZXMgKyAoSFogKiBhdXRvcmVzdW1lKSk7Ci0JCURCRyhjZGV2LCAic3VzcGVuZCwgd2FrZXVwIGluICVkIHNlY29uZHNcbiIsIGF1dG9yZXN1bWUpOwotCX0gZWxzZQotCQlEQkcoY2RldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNvdXJjZXNpbmtfcmVzdW1lKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCi17Ci0Jc3RydWN0IGZfc291cmNlc2luawkqc3MgPSBmdW5jX3RvX3NzKGYpOwotCXN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldiA9IGYtPmNvbmZpZy0+Y2RldjsKLQotCURCRyhjZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKLQlkZWxfdGltZXIoJnNzLT5yZXN1bWUpOwotfQotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IF9faW5pdCBzb3VyY2VzaW5rX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKQEAgLTQ2Nyw4ICs0MTksNiBAQAogCXNzLT5mdW5jdGlvbi51bmJpbmQgPSBzb3VyY2VzaW5rX3VuYmluZDsKIAlzcy0+ZnVuY3Rpb24uc2V0X2FsdCA9IHNvdXJjZXNpbmtfc2V0X2FsdDsKIAlzcy0+ZnVuY3Rpb24uZGlzYWJsZSA9IHNvdXJjZXNpbmtfZGlzYWJsZTsKLQlzcy0+ZnVuY3Rpb24uc3VzcGVuZCA9IHNvdXJjZXNpbmtfc3VzcGVuZDsKLQlzcy0+ZnVuY3Rpb24ucmVzdW1lID0gc291cmNlc2lua19yZXN1bWU7CiAKIAlzdGF0dXMgPSB1c2JfYWRkX2Z1bmN0aW9uKGMsICZzcy0+ZnVuY3Rpb24pOwogCWlmIChzdGF0dXMpCkBAIC01NTksNyArNTA5LDcgQEAKICAqIHNvdXJjZXNpbmtfYWRkIC0gYWRkIGEgc291cmNlL3NpbmsgdGVzdGluZyBjb25maWd1cmF0aW9uIHRvIGEgZGV2aWNlCiAgKiBAY2RldjogdGhlIGRldmljZSB0byBzdXBwb3J0IHRoZSBjb25maWd1cmF0aW9uCiAgKi8KLWludCBfX2luaXQgc291cmNlc2lua19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoraW50IF9faW5pdCBzb3VyY2VzaW5rX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsIGJvb2wgYXV0b3Jlc3VtZSkKIHsKIAlpbnQgaWQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3N1YnNldC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMKaW5kZXggZmUxODMyOC4uYTljOThmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfc3Vic2V0LmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX0hFQURFUl9UWVBFLAogCi0JLmJjZENEQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDExMCksCisJLmJjZENEQyA9CQljcHVfdG9fbGUxNigweDAxMTApLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfY2RjX21kbG1fZGVzYyBtZGxtX2Rlc2MgX19pbml0ZGF0YSA9IHsKQEAgLTExNiw3ICsxMTYsNyBAQAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YlR5cGUgPQlVU0JfQ0RDX01ETE1fVFlQRSwKIAotCS5iY2RWZXJzaW9uID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMTAwKSwKKwkuYmNkVmVyc2lvbiA9CQljcHVfdG9fbGUxNigweDAxMDApLAogCS5iR1VJRCA9IHsKIAkJMHg1ZCwgMHgzNCwgMHhjZiwgMHg2NiwgMHgxMSwgMHgxOCwgMHgxMSwgMHhkNiwKIAkJMHhhMiwgMHgxYSwgMHgwMCwgMHgwMSwgMHgwMiwgMHhjYSwgMHg5YSwgMHg3ZiwKQEAgLTE0NCw5ICsxNDQsOSBAQAogCiAJLyogdGhpcyBkZXNjcmlwdG9yIGFjdHVhbGx5IGFkZHMgdmFsdWUsIHN1cnByaXNlISAqLwogCS8qIC5pTUFDQWRkcmVzcyA9IERZTkFNSUMgKi8KLQkuYm1FdGhlcm5ldFN0YXRpc3RpY3MgPQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDApLCAvKiBubyBzdGF0aXN0aWNzICovCi0JLndNYXhTZWdtZW50U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRVRIX0ZSQU1FX0xFTiksCi0JLndOdW1iZXJNQ0ZpbHRlcnMgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDApLAorCS5ibUV0aGVybmV0U3RhdGlzdGljcyA9CWNwdV90b19sZTMyKDApLCAvKiBubyBzdGF0aXN0aWNzICovCisJLndNYXhTZWdtZW50U2l6ZSA9CWNwdV90b19sZTE2KEVUSF9GUkFNRV9MRU4pLAorCS53TnVtYmVyTUNGaWx0ZXJzID0JY3B1X3RvX2xlMTYoMCksCiAJLmJOdW1iZXJQb3dlckZpbHRlcnMgPQkwLAogfTsKIApAQCAtMTg2LDcgKzE4Niw3IEBACiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfc3Vic2V0X291dF9kZXNjIF9faW5pdGRhdGEgPSB7CkBAIC0xOTQsNyArMTk0LDcgQEAKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAogCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKSwKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmhzX2V0aF9mdW5jdGlvbltdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggMWFiOWRhYy4uNWMwMzBiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtODQ3LDEzICs4NDcsMTMgQEAKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfUEVSX0lOVEVSRkFDRSwKIAogCS8qIFRoZSBuZXh0IHRocmVlIHZhbHVlcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBtb2R1bGUgcGFyYW1ldGVycyAqLwotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfSUQpLAotCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9JRCksCi0JLmJjZERldmljZSA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4ZmZmZiksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfSUQpLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfSUQpLAorCS5iY2REZXZpY2UgPQkJY3B1X3RvX2xlMTYoMHhmZmZmKSwKIAogCS5pTWFudWZhY3R1cmVyID0JU1RSSU5HX01BTlVGQUNUVVJFUiwKIAkuaVByb2R1Y3QgPQkJU1RSSU5HX1BST0RVQ1QsCkBAIC05MjYsNyArOTI2LDcgQEAKIAogCS5iRW5kcG9pbnRBZGRyZXNzID0JVVNCX0RJUl9JTiwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCwKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDIpLAogCS5iSW50ZXJ2YWwgPQkJMzIsCS8vIGZyYW1lcyAtPiAzMiBtcwogfTsKIApAQCAtOTU0LDcgKzk1NCw3IEBACiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldl9xdWFsaWZpZXIsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSLAogCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCiAKIAkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKQEAgLTk2Nyw3ICs5NjcsNyBAQAogCiAJLyogYkVuZHBvaW50QWRkcmVzcyBjb3BpZWQgZnJvbSBmc19idWxrX2luX2Rlc2MgZHVyaW5nIGZzZ19iaW5kKCkgKi8KIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpLAorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMiksCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCkBAIC05NzcsNyArOTc3LDcgQEAKIAogCS8qIGJFbmRwb2ludEFkZHJlc3MgY29waWVkIGZyb20gZnNfYnVsa19vdXRfZGVzYyBkdXJpbmcgZnNnX2JpbmQoKSAqLwogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKLQkud01heFBhY2tldFNpemUgPQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDUxMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKIAkuYkludGVydmFsID0JCTEsCS8vIE5BSyBldmVyeSAxIHVmcmFtZQogfTsKIApAQCAtOTg4LDcgKzk4OCw3IEBACiAKIAkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2ludHJfaW5fZGVzYyBkdXJpbmcgZnNnX2JpbmQoKSAqLwogCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfSU5ULAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMiksCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoMiksCiAJLmJJbnRlcnZhbCA9CQk5LAkvLyAyKiooOS0xKSA9IDI1NiB1ZnJhbWVzIC0+IDMyIG1zCiB9OwogCkBAIC0xNzExLDcgKzE3MTEsOSBAQAogCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19XUklURV9QUk9URUNURUQ7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlzcGluX2xvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKIAljdXJsdW4tPmZpbHAtPmZfZmxhZ3MgJj0gfk9fU1lOQzsJLy8gRGVmYXVsdCBpcyBub3QgdG8gd2FpdAorCXNwaW5fdW5sb2NrKCZjdXJsdW4tPmZpbHAtPmZfbG9jayk7CiAKIAkvKiBHZXQgdGhlIHN0YXJ0aW5nIExvZ2ljYWwgQmxvY2sgQWRkcmVzcyBhbmQgY2hlY2sgdGhhdCBpdCdzCiAJICogbm90IHRvbyBiaWcgKi8KQEAgLTE3MjgsOCArMTczMCwxMSBAQAogCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoZnNnLT5jbW5kWzFdICYgMHgwOCkJLy8gRlVBCisJCWlmIChmc2ctPmNtbmRbMV0gJiAweDA4KSB7CS8vIEZVQQorCQkJc3Bpbl9sb2NrKCZjdXJsdW4tPmZpbHAtPmZfbG9jayk7CiAJCQljdXJsdW4tPmZpbHAtPmZfZmxhZ3MgfD0gT19TWU5DOworCQkJc3Bpbl91bmxvY2soJmN1cmx1bi0+ZmlscC0+Zl9sb2NrKTsKKwkJfQogCX0KIAlpZiAobGJhID49IGN1cmx1bi0+bnVtX3NlY3RvcnMpIHsKIAkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRTsKQEAgLTI2NDYsNyArMjY1MSw3IEBACiAJCXN0cnVjdCBidWxrX2NzX3dyYXAJKmNzdyA9IGJoLT5idWY7CiAKIAkJLyogU3RvcmUgYW5kIHNlbmQgdGhlIEJ1bGstb25seSBDU1cgKi8KLQkJY3N3LT5TaWduYXR1cmUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFVTQl9CVUxLX0NTX1NJRyk7CisJCWNzdy0+U2lnbmF0dXJlID0gY3B1X3RvX2xlMzIoVVNCX0JVTEtfQ1NfU0lHKTsKIAkJY3N3LT5UYWcgPSBmc2ctPnRhZzsKIAkJY3N3LT5SZXNpZHVlID0gY3B1X3RvX2xlMzIoZnNnLT5yZXNpZHVlKTsKIAkJY3N3LT5TdGF0dXMgPSBzdGF0dXM7CkBAIC0zMDg5LDcgKzMwOTQsNyBAQAogCiAJLyogSXMgdGhlIENCVyB2YWxpZD8gKi8KIAlpZiAocmVxLT5hY3R1YWwgIT0gVVNCX0JVTEtfQ0JfV1JBUF9MRU4gfHwKLQkJCWNidy0+U2lnbmF0dXJlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoCisJCQljYnctPlNpZ25hdHVyZSAhPSBjcHVfdG9fbGUzMigKIAkJCQlVU0JfQlVMS19DQl9TSUcpKSB7CiAJCURCRyhmc2csICJpbnZhbGlkIENCVzogbGVuICV1IHNpZyAweCV4XG4iLAogCQkJCXJlcS0+YWN0dWFsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF91c2IyX3VkYy5jCmluZGV4IGQ4ZDlhNTIuLjlkN2I5NWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfdXNiMl91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3VzYjJfdWRjLmMKQEAgLTE4MDIsNyArMTgwMiw4IEBACiAKIG91dDoKIAlpZiAocmV0dmFsKQotCQlwcmludGsoImdhZGdldCBkcml2ZXIgcmVnaXN0ZXIgZmFpbGVkICVkXG4iLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJnYWRnZXQgZHJpdmVyIHJlZ2lzdGVyIGZhaWxlZCAlZFxuIiwKKwkJICAgICAgIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIpOwpAQCAtMTg0Nyw3ICsxODQ4LDggQEAKIAl1ZGNfY29udHJvbGxlci0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCXVkY19jb250cm9sbGVyLT5kcml2ZXIgPSBOVUxMOwogCi0JcHJpbnRrKCJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJ1bnJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAorCSAgICAgICBkcml2ZXItPmRyaXZlci5uYW1lKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7CkBAIC0yNDU1LDcgKzI0NTcsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHVkY19leGl0KHZvaWQpCiB7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnVkY19kcml2ZXIpOwotCXByaW50aygiJXMgdW5yZWdpc3RlcmVkXG4iLCBkcml2ZXJfZGVzYyk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgdW5yZWdpc3RlcmVkXG4iLCBkcml2ZXJfZGVzYyk7CiB9CiAKIG1vZHVsZV9leGl0KHVkY19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nX3plcm8uaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9nX3plcm8uaAppbmRleCBkZDJmMTZhLi5lODRiM2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ196ZXJvLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dfemVyby5oCkBAIC0xOSw3ICsxOSw3IEBACiAJCXN0cnVjdCB1c2JfZXAgKmluLCBzdHJ1Y3QgdXNiX2VwICpvdXQpOwogCiAvKiBjb25maWd1cmF0aW9uLXNwZWNpZmljIGxpbmt1cCAqLwotaW50IHNvdXJjZXNpbmtfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldik7Ci1pbnQgbG9vcGJhY2tfYWRkKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2Rldik7CitpbnQgc291cmNlc2lua19hZGQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2LCBib29sIGF1dG9yZXN1bWUpOworaW50IGxvb3BiYWNrX2FkZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYsIGJvb2wgYXV0b3Jlc3VtZSk7CiAKICNlbmRpZiAvKiBfX0dfWkVST19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCmluZGV4IDYwZDNmOWUuLmI5MzEyZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCkBAIC0xOTksMTAgKzE5OSwxMCBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0RFVklDRV9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QRVJfSU5URVJGQUNFLAotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfTlVNKSwKLQkuaWRQcm9kdWN0ID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfTlVNKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYoRFJJVkVSX1BST0RVQ1RfTlVNKSwKIAkuaU1hbnVmYWN0dXJlciA9CVNUUklOR19NQU5VRkFDVFVSRVIsCiAJLmlQcm9kdWN0ID0JCVNUUklOR19QUk9EVUNULAogCS5iTnVtQ29uZmlndXJhdGlvbnMgPQkxLApAQCAtMjQxLDggKzI0MSw4IEBACiAJLmJMZW5ndGggPQkJVVNCX0RUX0FDX0hFQURFUl9TSVpFKDEpLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVU0JfTVNfSEVBREVSLAotCS5iY2RBREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAotCS53VG90YWxMZW5ndGggPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfRFRfQUNfSEVBREVSX1NJWkUoMSkpLAorCS5iY2RBREMgPQkJY3B1X3RvX2xlMTYoMHgwMTAwKSwKKwkud1RvdGFsTGVuZ3RoID0JCWNwdV90b19sZTE2KFVTQl9EVF9BQ19IRUFERVJfU0laRSgxKSksCiAJLmJJbkNvbGxlY3Rpb24gPQkxLAogCS5iYUludGVyZmFjZU5yID0gewogCQlbMF0gPQkJR01JRElfTVNfSU5URVJGQUNFLApAQCAtMjY1LDggKzI2NSw4IEBACiAJLmJMZW5ndGggPQkJVVNCX0RUX01TX0hFQURFUl9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAogCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVU0JfTVNfSEVBREVSLAotCS5iY2RNU0MgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAotCS53VG90YWxMZW5ndGggPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihVU0JfRFRfTVNfSEVBREVSX1NJWkUKKwkuYmNkTVNDID0JCWNwdV90b19sZTE2KDB4MDEwMCksCisJLndUb3RhbExlbmd0aCA9CQljcHVfdG9fbGUxNihVU0JfRFRfTVNfSEVBREVSX1NJWkUKIAkJCQkrIDIqVVNCX0RUX01JRElfSU5fU0laRQogCQkJCSsgMipVU0JfRFRfTUlESV9PVVRfU0laRSgxKSksCiB9OwpAQCAtMTA5OSwxMCArMTA5OSw5IEBACiAJCS5kZXZfZnJlZSA9IGdtaWRpX3NuZF9mcmVlLAogCX07CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkgewotCQlFUlJPUihkZXYsICJzbmRfY2FyZF9uZXcgZmFpbGVkXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCUVSUk9SKGRldiwgInNuZF9jYXJkX2NyZWF0ZSBmYWlsZWRcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCWRldi0+Y2FyZCA9IGNhcmQ7CkBAIC0xMjI3LDcgKzEyMjYsNyBAQAogCQkgKi8KIAkJcHJfd2FybmluZygiJXM6IGNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKIAkJCXNob3J0bmFtZSwgZ2FkZ2V0LT5uYW1lKTsKLQkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDk5OTkpOworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNigweDk5OTkpOwogCX0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ29rdV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCmluZGV4IDYzNDE5YzQuLmRlMDEwYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jCkBAIC0xNDcyLDcgKzE0NzIsNyBAQAogCQkJCS8qIGFjdGl2ZSBlbmRwb2ludCAqLwogCQkJCWlmICh0bXAgPiAzIHx8ICghZGV2LT5lcFt0bXBdLmRlc2MgJiYgdG1wICE9IDApKQogCQkJCQlnb3RvIHN0YWxsOwotCQkJCWlmIChjdHJsLndJbmRleCAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJCQkJaWYgKGN0cmwud0luZGV4ICYgY3B1X3RvX2xlMTYoCiAJCQkJCQlVU0JfRElSX0lOKSkgewogCQkJCQlpZiAoIWRldi0+ZXBbdG1wXS5pc19pbikKIAkJCQkJCWdvdG8gc3RhbGw7CkBAIC0xNDgwLDcgKzE0ODAsNyBAQAogCQkJCQlpZiAoZGV2LT5lcFt0bXBdLmlzX2luKQogCQkJCQkJZ290byBzdGFsbDsKIAkJCQl9Ci0JCQkJaWYgKGN0cmwud1ZhbHVlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoCisJCQkJaWYgKGN0cmwud1ZhbHVlICE9IGNwdV90b19sZTE2KAogCQkJCQkJVVNCX0VORFBPSU5UX0hBTFQpKQogCQkJCQlnb3RvIHN0YWxsOwogCQkJCWlmICh0bXApCkBAIC0xNDkzLDcgKzE0OTMsNyBAQAogCQkJCXJldHVybjsKIAkJCWNhc2UgVVNCX1JFQ0lQX0RFVklDRToKIAkJCQkvKiBkZXZpY2UgcmVtb3RlIHdha2V1cDogYWx3YXlzIGNsZWFyICovCi0JCQkJaWYgKGN0cmwud1ZhbHVlICE9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMSkpCisJCQkJaWYgKGN0cmwud1ZhbHVlICE9IGNwdV90b19sZTE2KDEpKQogCQkJCQlnb3RvIHN0YWxsOwogCQkJCVZEQkcoZGV2LCAiY2xlYXIgZGV2IHJlbW90ZSB3YWtldXBcbiIpOwogCQkJCWdvdG8gc3VjY2VlZDsKQEAgLTE1MTksNyArMTUxOSw3IEBACiAJZGV2LT5yZXFfY29uZmlnID0gKGN0cmwuYlJlcXVlc3QgPT0gVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTgogCQkJCSYmIGN0cmwuYlJlcXVlc3RUeXBlID09IFVTQl9SRUNJUF9ERVZJQ0UpOwogCWlmICh1bmxpa2VseShkZXYtPnJlcV9jb25maWcpKQotCQlkZXYtPmNvbmZpZ3VyZWQgPSAoY3RybC53VmFsdWUgIT0gX19jb25zdGFudF9jcHVfdG9fbGUxNigwKSk7CisJCWRldi0+Y29uZmlndXJlZCA9IChjdHJsLndWYWx1ZSAhPSBjcHVfdG9fbGUxNigwKSk7CiAKIAkvKiBkZWxlZ2F0ZSBldmVyeXRoaW5nIHRvIHRoZSBnYWRnZXQgZHJpdmVyLgogCSAqIGl0IG1heSByZXNwb25kIGFmdGVyIHRoaXMgaXJxIGhhbmRsZXIgcmV0dXJucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5jCmluZGV4IDc3YzVkMGEuLjE2ODY1OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKglkcml2ZXIvdXNiL2dhZGdldC9pbXhfdWRjLmMKICAqCi0gKglDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBMZWUoZWVtaWtlQGdtYWlsLmNvbSkKKyAqCUNvcHlyaWdodCAoQykgMjAwNSBNaWtlIExlZSA8ZWVtaWtlQGdtYWlsLmNvbT4KICAqCUNvcHlyaWdodCAoQykgMjAwOCBEYXJpdXMgQXVndWxpcyA8YXVndWxpcy5kYXJpdXNAZ21haWwuY29tPgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL2dhZGdldC5oPgpAQCAtNTEsNyArNTIsOCBAQAogdm9pZCBpbXhfdWRjX2VuYWJsZShzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IpCiB7CiAJaW50IHRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwotCV9fcmF3X3dyaXRlbCh0ZW1wIHwgQ1RSTF9GRV9FTkEgfCBDVFJMX0FGRV9FTkEsIGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CisJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0ZFX0VOQSB8IENUUkxfQUZFX0VOQSwKKwkJCQkJCWlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CiAJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CiB9CiAKQEAgLTEyNiw3ICsxMjgsOCBAQAogCQkJZm9yIChqID0gMDsgaiA8IDU7IGorKykgewogCQkJCV9fcmF3X3dyaXRlYihlcF9jb25mW2pdLAogCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0REQVQpOwotCQkJCWRvIHt9IHdoaWxlIChfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0RBRFIpCisJCQkJZG8ge30gd2hpbGUgKF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UKKwkJCQkJCQkJKyBVU0JfREFEUikKIAkJCQkJJiBEQURSX0JTWSk7CiAJCQl9CiAJCX0KQEAgLTE4Myw3ICsxODYsOCBAQAogCQl0ZW1wID0gKEVQX0RJUihpbXhfZXApIDw8IDcpIHwgKG1heCA8PCA1KQogCQkJfCAoaW14X2VwLT5ibUF0dHJpYnV0ZXMgPDwgMyk7CiAJCV9fcmF3X3dyaXRlbCh0ZW1wLCBpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoaSkpOwotCQlfX3Jhd193cml0ZWwodGVtcCB8IEVQU1RBVF9GTFVTSCwgaW14X3VzYi0+YmFzZSArIFVTQl9FUF9TVEFUKGkpKTsKKwkJX19yYXdfd3JpdGVsKHRlbXAgfCBFUFNUQVRfRkxVU0gsCisJCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoaSkpOwogCQlEX0lOSShpbXhfdXNiLT5kZXYsICI8JXM+IGVwJWRfc3RhdCAlMDh4XG4iLCBfX2Z1bmNfXywgaSwKIAkJCV9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChpKSkpOwogCX0KQEAgLTI3OCwxNSArMjgyLDE4IEBACiAJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gaW14X2VwLT5pbXhfdXNiOwogCWludCB0ZW1wLCBpOwogCi0JRF9FUlIoaW14X3VzYi0+ZGV2LCAiPCVzPiBGb3JjZWQgc3RhbGwgb24gJXNcbiIsIF9fZnVuY19fLCBpbXhfZXAtPmVwLm5hbWUpOworCURfRVJSKGlteF91c2ItPmRldiwKKwkJIjwlcz4gRm9yY2VkIHN0YWxsIG9uICVzXG4iLCBfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lKTsKIAogCWlteF9mbHVzaChpbXhfZXApOwogCiAJLyogU3BlY2lhbCBjYXJlIGZvciBlcDAgKi8KLQlpZiAoRVBfTk8oaW14X2VwKSkgeworCWlmICghRVBfTk8oaW14X2VwKSkgewogCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9DVFJMKTsKLQkJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0NNRE9WRVIgfCBDVFJMX0NNREVSUk9SLCBpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwotCQlkbyB7IH0gd2hpbGUgKF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCkgJiBDVFJMX0NNRE9WRVIpOworCQlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfQ01ET1ZFUiB8IENUUkxfQ01ERVJST1IsCisJCQkJCQlpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOworCQlkbyB7IH0gd2hpbGUgKF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCkKKwkJCQkJCSYgQ1RSTF9DTURPVkVSKTsKIAkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CiAJCV9fcmF3X3dyaXRlbCh0ZW1wICYgfkNUUkxfQ01ERVJST1IsIGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CiAJfQpAQCAtMjk2LDEyICszMDMsMTMgQEAKIAkJCWlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChFUF9OTyhpbXhfZXApKSk7CiAKIAkJZm9yIChpID0gMDsgaSA8IDEwMDsgaSArKykgewotCQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfRVBfU1RBVChFUF9OTyhpbXhfZXApKSk7CisJCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZQorCQkJCQkJKyBVU0JfRVBfU1RBVChFUF9OTyhpbXhfZXApKSk7CiAJCQlpZiAoISh0ZW1wICYgRVBTVEFUX1NUQUxMKSkKIAkgCQkJYnJlYWs7CiAJIAkJdWRlbGF5KDIwKTsKIAkgCX0KLQkJaWYgKGkgPT0gNTApCisJCWlmIChpID09IDEwMCkKIAkJCURfRVJSKGlteF91c2ItPmRldiwgIjwlcz4gTm9uIGZpbmlzaGVkIHN0YWxsIG9uICVzXG4iLAogCQkJCV9fZnVuY19fLCBpbXhfZXAtPmVwLm5hbWUpOwogCX0KQEAgLTMyNSw3ICszMzMsOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwogCi1zdGF0aWMgdm9pZCBlcF9hZGRfcmVxdWVzdChzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLCBzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIGVwX2FkZF9yZXF1ZXN0KHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsCisJCQkJCQkJc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEpCiB7CiAJaWYgKHVubGlrZWx5KCFyZXEpKQogCQlyZXR1cm47CkBAIC0zMzQsNyArMzQzLDggQEAKIAlsaXN0X2FkZF90YWlsKCZyZXEtPnF1ZXVlLCAmaW14X2VwLT5xdWV1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGVwX2RlbF9yZXF1ZXN0KHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXAsIHN0cnVjdCBpbXhfcmVxdWVzdCAqcmVxKQorc3RhdGljIHZvaWQgZXBfZGVsX3JlcXVlc3Qoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwKKwkJCQkJCQlzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSkKIHsKIAlpZiAodW5saWtlbHkoIXJlcSkpCiAJCXJldHVybjsKQEAgLTM0Myw3ICszNTMsOCBAQAogCXJlcS0+aW5fdXNlID0gMDsKIH0KIAotc3RhdGljIHZvaWQgZG9uZShzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLCBzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSwgaW50IHN0YXR1cykKK3N0YXRpYyB2b2lkIGRvbmUoc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwKKwkJCQkJc3RydWN0IGlteF9yZXF1ZXN0ICpyZXEsIGludCBzdGF0dXMpCiB7CiAJZXBfZGVsX3JlcXVlc3QoaW14X2VwLCByZXEpOwogCkBAIC00OTQsNyArNTA1LDggQEAKIAkJCQlfX2Z1bmNfXywgaW14X2VwLT5lcC5uYW1lLCByZXEsCiAJCQkJY29tcGxldGVkID8gImNvbXBsZXRlZCIgOiAibm90IGNvbXBsZXRlZCIpOwogCQkJaWYgKCFFUF9OTyhpbXhfZXApKQotCQkJCWVwMF9jaGdfc3RhdChfX2Z1bmNfXywgaW14X2VwLT5pbXhfdXNiLCBFUDBfSURMRSk7CisJCQkJZXAwX2NoZ19zdGF0KF9fZnVuY19fLAorCQkJCQkJaW14X2VwLT5pbXhfdXNiLCBFUDBfSURMRSk7CiAJCX0KIAl9CiAKQEAgLTUzOSwxMCArNTUxLDkgQEAKIAlzdHJ1Y3QgaW14X3JlcXVlc3QgKnJlcSA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJmlteF9lcC0+cXVldWUpKQorCWlmICghbGlzdF9lbXB0eSgmaW14X2VwLT5xdWV1ZSkpIHsKIAkJcmVxID0gbGlzdF9lbnRyeShpbXhfZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBpbXhfcmVxdWVzdCwgcXVldWUpOwogCi0JaWYgKHJlcSkgewogCQlzd2l0Y2ggKGlteF9lcC0+aW14X3VzYi0+ZXAwc3RhdGUpIHsKIAogCQljYXNlIEVQMF9JTl9EQVRBX1BIQVNFOgkJCS8qIEdFVF9ERVNDUklQVE9SICovCkBAIC01NjEsNiArNTcyLDEwIEBACiAJCX0KIAl9CiAKKwllbHNlCisJCURfRVJSKGlteF9lcC0+aW14X3VzYi0+ZGV2LCAiPCVzPiBubyByZXF1ZXN0IG9uICVzXG4iLAorCQkJCQkJX19mdW5jX18sIGlteF9lcC0+ZXAubmFtZSk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01ODMsNyArNTk4LDggQEAKIAkJCQkiPCVzPiBubyBzZXR1cCBwYWNrZXQgcmVjZWl2ZWRcbiIsIF9fZnVuY19fKTsKIAkJCWdvdG8gc3RhbGw7CiAJCX0KLQkJdS53b3JkW2ldID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArCVVTQl9FUF9GREFUKEVQX05PKGlteF9lcCkpKTsKKwkJdS53b3JkW2ldID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZQorCQkJCQkJKyBVU0JfRVBfRkRBVChFUF9OTyhpbXhfZXApKSk7CiAJfQogCiAJdGVtcCA9IGlteF9lcF9lbXB0eShpbXhfZXApOwpAQCAtNzU5LDcgKzc3NSw3IEBACiAJKi8KIAlpZiAoaW14X3VzYi0+c2V0X2NvbmZpZyAmJiAhRVBfTk8oaW14X2VwKSkgewogCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJRF9FUFgoaW14X3VzYi0+ZGV2LAorCQlEX0VSUihpbXhfdXNiLT5kZXYsCiAJCQkiPCVzPiBnYWRnZXQgcmVwbHkgc2V0IGNvbmZpZ1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gMDsKIAl9CkBAIC03NzksMjggKzc5NSwyOSBAQAogCQlyZXR1cm4gLUVTSFVURE9XTjsKIAl9CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KIAkvKiBEZWJ1ZyAqLwogCURfUkVRKGlteF91c2ItPmRldiwgIjwlcz4gZXAlZCAlcyByZXF1ZXN0IGZvciBbJWRdIGJ5dGVzXG4iLAogCQlfX2Z1bmNfXywgRVBfTk8oaW14X2VwKSwKLQkJKCghRVBfTk8oaW14X2VwKSAmJiBpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlID09IEVQMF9JTl9EQVRBX1BIQVNFKQotCQl8fCAoRVBfTk8oaW14X2VwKSAmJiBFUF9ESVIoaW14X2VwKSkpID8gIklOIiA6ICJPVVQiLCB1c2JfcmVxLT5sZW5ndGgpOworCQkoKCFFUF9OTyhpbXhfZXApICYmIGlteF9lcC0+aW14X3VzYi0+ZXAwc3RhdGUKKwkJCQkJCQk9PSBFUDBfSU5fREFUQV9QSEFTRSkKKwkJfHwgKEVQX05PKGlteF9lcCkgJiYgRVBfRElSKGlteF9lcCkpKQorCQkJCQk/ICJJTiIgOiAiT1VUIiwgdXNiX3JlcS0+bGVuZ3RoKTsKIAlkdW1wX3JlcShfX2Z1bmNfXywgaW14X2VwLCB1c2JfcmVxKTsKIAogCWlmIChpbXhfZXAtPnN0b3BwZWQpIHsKIAkJdXNiX3JlcS0+c3RhdHVzID0gLUVTSFVURE9XTjsKLQkJcmV0ID0gLUVTSFVURE9XTjsKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRVNIVVRET1dOOwogCX0KIAogCWlmIChyZXEtPmluX3VzZSkgewogCQlEX0VSUihpbXhfdXNiLT5kZXYsCiAJCQkiPCVzPiByZWZ1c2luZyB0byBxdWV1ZSByZXEgJXAgKGFscmVhZHkgcXVldWVkKVxuIiwKIAkJCV9fZnVuY19fLCByZXEpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIDA7CiAJfQogCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCiAJdXNiX3JlcS0+c3RhdHVzID0gLUVJTlBST0dSRVNTOwogCXVzYl9yZXEtPmFjdHVhbCA9IDA7CiAKQEAgLTgxMCw3ICs4MjcsNyBAQAogCQlyZXQgPSBoYW5kbGVfZXAwKGlteF9lcCk7CiAJZWxzZQogCQlyZXQgPSBoYW5kbGVfZXAoaW14X2VwKTsKLW91dDoKKwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtOTk3LDcxICsxMDE0LDMyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBpbXhfdWRjX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCisvKgorICogQ2FsbGVkIHdoZW4gdGltZXIgZXhwaXJlcy4KKyAqIFRpbWVyIGlzIHN0YXJ0ZWQgd2hlbiBDRkdfQ0hHIGlzIHJlY2VpdmVkLgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfY29uZmlnKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSBkZXY7CisJc3RydWN0IGlteF91ZGNfc3RydWN0ICppbXhfdXNiID0gKHZvaWQgKilkYXRhOwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgdTsKIAlpbnQgdGVtcCwgY2ZnLCBpbnRmLCBhbHQ7Ci0JaW50IGludHIgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOwogCi0JaWYgKGludHIgJiAoSU5UUl9XQUtFVVAgfCBJTlRSX1NVU1BFTkQgfCBJTlRSX1JFU1VNRSB8IElOVFJfUkVTRVRfU1RBUlQKLQkJCXwgSU5UUl9SRVNFVF9TVE9QIHwgSU5UUl9DRkdfQ0hHKSkgewotCQkJCWR1bXBfaW50cihfX2Z1bmNfXywgaW50ciwgaW14X3VzYi0+ZGV2KTsKLQkJCQlkdW1wX3VzYl9zdGF0KF9fZnVuY19fLCBpbXhfdXNiKTsKLQl9CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCWlmICghaW14X3VzYi0+ZHJpdmVyKSB7Ci0JCS8qaW14X3VkY19kaXNhYmxlKGlteF91c2IpOyovCi0JCWdvdG8gZW5kX2lycTsKLQl9CisJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfU1RBVCk7CisJY2ZnICA9ICh0ZW1wICYgU1RBVF9DRkcpID4+IDU7CisJaW50ZiA9ICh0ZW1wICYgU1RBVF9JTlRGKSA+PiAzOworCWFsdCAgPSAgdGVtcCAmIFNUQVRfQUxUU0VUOwogCi0JaWYgKGludHIgJiBJTlRSX1dBS0VVUCkgewotCQlpZiAoaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOCi0JCQkmJiBpbXhfdXNiLT5kcml2ZXIgJiYgaW14X3VzYi0+ZHJpdmVyLT5yZXN1bWUpCi0JCQkJaW14X3VzYi0+ZHJpdmVyLT5yZXN1bWUoJmlteF91c2ItPmdhZGdldCk7Ci0JCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfRlVMTDsKLQl9CisJRF9SRVEoaW14X3VzYi0+ZGV2LAorCQkiPCVzPiBvcmlnIGNvbmZpZyBDPSVkLCBJPSVkLCBBPSVkIC8gIgorCQkicmVxIGNvbmZpZyBDPSVkLCBJPSVkLCBBPSVkXG4iLAorCQlfX2Z1bmNfXywgaW14X3VzYi0+Y2ZnLCBpbXhfdXNiLT5pbnRmLCBpbXhfdXNiLT5hbHQsCisJCWNmZywgaW50ZiwgYWx0KTsKIAotCWlmIChpbnRyICYgSU5UUl9TVVNQRU5EKSB7Ci0JCWlmIChpbXhfdXNiLT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KLQkJCSYmIGlteF91c2ItPmRyaXZlciAmJiBpbXhfdXNiLT5kcml2ZXItPnN1c3BlbmQpCi0JCQkJaW14X3VzYi0+ZHJpdmVyLT5zdXNwZW5kKCZpbXhfdXNiLT5nYWRnZXQpOwotCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047Ci0JfQorCWlmIChjZmcgPT0gMSB8fCBjZmcgPT0gMikgewogCi0JaWYgKGludHIgJiBJTlRSX1JFU0VUX1NUQVJUKSB7Ci0JCV9fcmF3X3dyaXRlbChpbnRyLCBpbXhfdXNiLT5iYXNlICsgVVNCX0lOVFIpOwotCQl1ZGNfc3RvcF9hY3Rpdml0eShpbXhfdXNiLCBpbXhfdXNiLT5kcml2ZXIpOwotCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047Ci0JfQotCi0JaWYgKGludHIgJiBJTlRSX1JFU0VUX1NUT1ApCi0JCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOwotCi0JaWYgKGludHIgJiBJTlRSX0NGR19DSEcpIHsKLQkJX19yYXdfd3JpdGVsKElOVFJfQ0ZHX0NIRywgaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKLQkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfU1RBVCk7Ci0JCWNmZyAgPSAodGVtcCAmIFNUQVRfQ0ZHKSA+PiA1OwotCQlpbnRmID0gKHRlbXAgJiBTVEFUX0lOVEYpID4+IDM7Ci0JCWFsdCAgPSAgdGVtcCAmIFNUQVRfQUxUU0VUOwotCi0JCURfUkVRKGlteF91c2ItPmRldiwKLQkJCSI8JXM+IG9yaWcgY29uZmlnIEM9JWQsIEk9JWQsIEE9JWQgLyAiCi0JCQkicmVxIGNvbmZpZyBDPSVkLCBJPSVkLCBBPSVkXG4iLAotCQkJX19mdW5jX18sIGlteF91c2ItPmNmZywgaW14X3VzYi0+aW50ZiwgaW14X3VzYi0+YWx0LAotCQkJY2ZnLCBpbnRmLCBhbHQpOwotCi0JCWlmIChjZmcgIT0gMSAmJiBjZmcgIT0gMikKLQkJCWdvdG8gZW5kX2lycTsKLQotCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQotCQkvKiBDb25maWcgc2V0dXAgKi8KIAkJaWYgKGlteF91c2ItPmNmZyAhPSBjZmcpIHsKLQkJCURfUkVRKGlteF91c2ItPmRldiwgIjwlcz4gQ2hhbmdlIGNvbmZpZyBzdGFydFxuIixfX2Z1bmNfXyk7CiAJCQl1LmJSZXF1ZXN0ID0gVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTjsKIAkJCXUuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9PVVQgfAogCQkJCQlVU0JfVFlQRV9TVEFOREFSRCB8CkBAIC0xMDcwLDE0ICsxMDQ4LDEwIEBACiAJCQl1LndJbmRleCA9IDA7CiAJCQl1LndMZW5ndGggPSAwOwogCQkJaW14X3VzYi0+Y2ZnID0gY2ZnOwotCQkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDE7CiAJCQlpbXhfdXNiLT5kcml2ZXItPnNldHVwKCZpbXhfdXNiLT5nYWRnZXQsICZ1KTsKLQkJCWlteF91c2ItPnNldF9jb25maWcgPSAwOwotCQkJRF9SRVEoaW14X3VzYi0+ZGV2LCAiPCVzPiBDaGFuZ2UgY29uZmlnIGRvbmVcbiIsX19mdW5jX18pOwogCiAJCX0KIAkJaWYgKGlteF91c2ItPmludGYgIT0gaW50ZiB8fCBpbXhfdXNiLT5hbHQgIT0gYWx0KSB7Ci0JCQlEX1JFUShpbXhfdXNiLT5kZXYsICI8JXM+IENoYW5nZSBpbnRlcmZhY2Ugc3RhcnRcbiIsX19mdW5jX18pOwogCQkJdS5iUmVxdWVzdCA9IFVTQl9SRVFfU0VUX0lOVEVSRkFDRTsKIAkJCXUuYlJlcXVlc3RUeXBlID0gVVNCX0RJUl9PVVQgfAogCQkJCQkgIFVTQl9UWVBFX1NUQU5EQVJEIHwKQEAgLTEwODcsMjAgKzEwNjEsOTIgQEAKIAkJCXUud0xlbmd0aCA9IDA7CiAJCQlpbXhfdXNiLT5pbnRmID0gaW50ZjsKIAkJCWlteF91c2ItPmFsdCA9IGFsdDsKLQkJCWlteF91c2ItPnNldF9jb25maWcgPSAxOwogCQkJaW14X3VzYi0+ZHJpdmVyLT5zZXR1cCgmaW14X3VzYi0+Z2FkZ2V0LCAmdSk7Ci0JCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKLQkJCURfUkVRKGlteF91c2ItPmRldiwgIjwlcz4gQ2hhbmdlIGludGVyZmFjZSBkb25lXG4iLF9fZnVuY19fKTsKIAkJfQogCX0KIAorCWlteF91c2ItPnNldF9jb25maWcgPSAwOworCisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaW14X3VkY19pcnEoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYiA9IGRldjsKKwlpbnQgaW50ciA9IF9fcmF3X3JlYWRsKGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CisJaW50IHRlbXA7CisKKwlpZiAoaW50ciAmIChJTlRSX1dBS0VVUCB8IElOVFJfU1VTUEVORCB8IElOVFJfUkVTVU1FIHwgSU5UUl9SRVNFVF9TVEFSVAorCQkJfCBJTlRSX1JFU0VUX1NUT1AgfCBJTlRSX0NGR19DSEcpKSB7CisJCQkJZHVtcF9pbnRyKF9fZnVuY19fLCBpbnRyLCBpbXhfdXNiLT5kZXYpOworCQkJCWR1bXBfdXNiX3N0YXQoX19mdW5jX18sIGlteF91c2IpOworCX0KKworCWlmICghaW14X3VzYi0+ZHJpdmVyKQorCQlnb3RvIGVuZF9pcnE7CisKIAlpZiAoaW50ciAmIElOVFJfU09GKSB7CisJCS8qIENvcHkgZnJvbSBGcmVlc2NhbGUgQlNQLgorCQkgICBXZSBtdXN0IGVuYWJsZSBTT0YgaW50ciBhbmQgc2V0IENNRE9WRVIuCisJCSAgIERhdGFzaGVldCBkb24ndCBzcGVjaWZpeSB0aGlzIGFjdGlvbiwgYnV0IGl0CisJCSAgIGlzIGRvbmUgaW4gRnJlZXNjYWxlIEJTUCwgc28ganVzdCBjb3B5IGl0LgorCQkqLwogCQlpZiAoaW14X3VzYi0+ZXAwc3RhdGUgPT0gRVAwX0lETEUpIHsKIAkJCXRlbXAgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0NUUkwpOwotCQkJX19yYXdfd3JpdGVsKHRlbXAgfCBDVFJMX0NNRE9WRVIsIGlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CisJCQlfX3Jhd193cml0ZWwodGVtcCB8IENUUkxfQ01ET1ZFUiwKKwkJCQkJCWlteF91c2ItPmJhc2UgKyBVU0JfQ1RSTCk7CiAJCX0KIAl9CiAKKwlpZiAoaW50ciAmIElOVFJfQ0ZHX0NIRykgeworCQkvKiBBIHdvcmthcm91bmQgb2Ygc2VyaW91cyBJTVggVURDIGJ1Zy4KKwkJICAgSGFuZGxpbmcgb2YgQ0ZHX0NIRyBzaG91bGQgYmUgZGVsYXllZCBmb3Igc29tZSB0aW1lLCBiZWNhdXNlCisJCSAgIElNWCBkb2VzIG5vdCBOQUNLIHRoZSBob3N0IHdoZW4gQ0ZHX0NIRyBpbnRlcnJ1cHQgaXMgcGVuZGluZy4KKwkJICAgVGhlcmUgaXMgbm8gdGltZSB0byBoYW5kbGUgY3VycmVudCBDRkdfQ0hHCisJCSAgIGlmIG5leHQgQ0ZHX0NIRyBvciBTRVRVUCBwYWNrZWQgaXMgc2VuZCBpbW1lZGlhdGVseS4KKwkJICAgV2UgaGF2ZSB0byBjbGVhciBDRkdfQ0hHLCBzdGFydCB0aGUgdGltZXIgYW5kCisJCSAgIE5BQ0sgdGhlIGhvc3QgYnkgc2V0dGluZyBDVFJMX0NNRE9WRVIKKwkJICAgaWYgaXQgc2VuZHMgYW55IFNFVFVQIHBhY2tldC4KKwkJICAgV2hlbiB0aW1lciBleHBpcmVzLCBoYW5kbGVyIGlzIGNhbGxlZCB0byBoYW5kbGUgY29uZmlndXJhdGlvbgorCQkgICBjaGFuZ2VzLiBXaGlsZSBDRkdfQ0hHIGlzIG5vdCBoYW5kbGVkIChzZXRfY29uZmlnPTEpLAorCQkgICB3ZSBtdXN0IE5BQ0sgdGhlIGhvc3QgdG8gZXZlcnkgU0VUVVAgcGFja2VkLgorCQkgICBUaGlzIGRlbGF5IHByZXZlbnRzIGZyb20gZ29pbmcgb3V0IG9mIHN5bmMgd2l0aCBob3N0LgorCQkgKi8KKwkJX19yYXdfd3JpdGVsKElOVFJfQ0ZHX0NIRywgaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKKwkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDE7CisJCW1vZF90aW1lcigmaW14X3VzYi0+dGltZXIsIGppZmZpZXMgKyA1KTsKKwkJZ290byBlbmRfaXJxOworCX0KKworCWlmIChpbnRyICYgSU5UUl9XQUtFVVApIHsKKwkJaWYgKGlteF91c2ItPmdhZGdldC5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTgorCQkJJiYgaW14X3VzYi0+ZHJpdmVyICYmIGlteF91c2ItPmRyaXZlci0+cmVzdW1lKQorCQkJCWlteF91c2ItPmRyaXZlci0+cmVzdW1lKCZpbXhfdXNiLT5nYWRnZXQpOworCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKKwkJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CisJCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOworCX0KKworCWlmIChpbnRyICYgSU5UUl9TVVNQRU5EKSB7CisJCWlmIChpbXhfdXNiLT5nYWRnZXQuc3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04KKwkJCSYmIGlteF91c2ItPmRyaXZlciAmJiBpbXhfdXNiLT5kcml2ZXItPnN1c3BlbmQpCisJCQkJaW14X3VzYi0+ZHJpdmVyLT5zdXNwZW5kKCZpbXhfdXNiLT5nYWRnZXQpOworCQlpbXhfdXNiLT5zZXRfY29uZmlnID0gMDsKKwkJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CisJCWlteF91c2ItPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOworCX0KKworCWlmIChpbnRyICYgSU5UUl9SRVNFVF9TVEFSVCkgeworCQlfX3Jhd193cml0ZWwoaW50ciwgaW14X3VzYi0+YmFzZSArIFVTQl9JTlRSKTsKKwkJdWRjX3N0b3BfYWN0aXZpdHkoaW14X3VzYiwgaW14X3VzYi0+ZHJpdmVyKTsKKwkJaW14X3VzYi0+c2V0X2NvbmZpZyA9IDA7CisJCWRlbF90aW1lcigmaW14X3VzYi0+dGltZXIpOworCQlpbXhfdXNiLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwl9CisKKwlpZiAoaW50ciAmIElOVFJfUkVTRVRfU1RPUCkKKwkJaW14X3VzYi0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX0ZVTEw7CisKIGVuZF9pcnE6CiAJX19yYXdfd3JpdGVsKGludHIsIGlteF91c2ItPmJhc2UgKyBVU0JfSU5UUik7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTEwOSw2ICsxMTU1LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBpbXhfdWRjX2N0cmxfaXJxKGludCBpcnEsIHZvaWQgKmRldikKIHsKIAlzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IgPSBkZXY7CisJc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCA9ICZpbXhfdXNiLT5pbXhfZXBbMF07CiAJaW50IGludHIgPSBfX3Jhd19yZWFkbChpbXhfdXNiLT5iYXNlICsgVVNCX0VQX0lOVFIoMCkpOwogCiAJZHVtcF9lcF9pbnRyKF9fZnVuY19fLCAwLCBpbnRyLCBpbXhfdXNiLT5kZXYpOwpAQCAtMTExOCwxNiArMTE2NSwxNSBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JLyogREVWUkVRIElSUSBoYXMgaGlnaGVzdCBwcmlvcml0eSAqLworCS8qIERFVlJFUSBoYXMgaGlnaGVzdCBwcmlvcml0eSAqLwogCWlmIChpbnRyICYgKEVQSU5UUl9ERVZSRVEgfCBFUElOVFJfTURFVlJFUSkpCiAJCWhhbmRsZV9lcDBfZGV2cmVxKGlteF91c2IpOwogCS8qIFNlZW0gaS5NWCBpcyBtaXNzaW5nIEVPRiBpbnRlcnJ1cHQgc29tZXRpbWVzLgotCSAqIFRoZXJlZm9yZSB3ZSBtb25pdG9yIGJvdGggRU9GIGFuZCBGSUZPX0VNUFRZIGludGVycnVwcwotCSAqIHdoZW4gdHJhbnNtaXRpbmcsIGFuZCBib3RoIEVPRiBhbmQgRklGT19GVUxMIHdoZW4KLQkgKiByZWNlaXZpbmcgZGF0YS4KKwkgKiBUaGVyZWZvcmUgd2UgZG9uJ3QgbW9uaXRvciBFT0YuCisJICogV2UgY2FsbCBoYW5kbGVfZXAwKCkgb25seSBpZiBhIHJlcXVlc3QgaXMgcXVldWVkIGZvciBlcDAuCiAJICovCi0JZWxzZSBpZiAoaW50ciAmIChFUElOVFJfRU9GIHwgRVBJTlRSX0ZJRk9fRU1QVFkgfCBFUElOVFJfRklGT19GVUxMKSkKLQkJaGFuZGxlX2VwMCgmaW14X3VzYi0+aW14X2VwWzBdKTsKKwllbHNlIGlmICghbGlzdF9lbXB0eSgmaW14X2VwLT5xdWV1ZSkpCisJCWhhbmRsZV9lcDAoaW14X2VwKTsKIAogCV9fcmF3X3dyaXRlbChpbnRyLCBpbXhfdXNiLT5iYXNlICsgVVNCX0VQX0lOVFIoMCkpOwogCkBAIC0xMTg2LDggKzEyMzIsOCBAQAogCQkuZXAwCQk9ICZjb250cm9sbGVyLmlteF9lcFswXS5lcCwKIAkJLm5hbWUJCT0gZHJpdmVyX25hbWUsCiAJCS5kZXYgPSB7Ci0JCQkgLmJ1c19pZAk9ICJnYWRnZXQiLAotCQkgfSwKKwkJCS5pbml0X25hbWUJPSAiZ2FkZ2V0IiwKKwkJfSwKIAl9LAogCiAJLmlteF9lcFswXSA9IHsKQEAgLTEzMTgsNiArMTM2NCw3IEBACiAKIAl1ZGNfc3RvcF9hY3Rpdml0eShpbXhfdXNiLCBkcml2ZXIpOwogCWlteF91ZGNfZGlzYWJsZShpbXhfdXNiKTsKKwlkZWxfdGltZXIoJmlteF91c2ItPnRpbWVyKTsKIAogCWRyaXZlci0+dW5iaW5kKCZpbXhfdXNiLT5nYWRnZXQpOwogCWlteF91c2ItPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKQEAgLTE0MzUsNiArMTQ4MiwxMCBAQAogCXVzYl9pbml0X2RhdGEoaW14X3VzYik7CiAJaW14X3VkY19pbml0KGlteF91c2IpOwogCisJaW5pdF90aW1lcigmaW14X3VzYi0+dGltZXIpOworCWlteF91c2ItPnRpbWVyLmZ1bmN0aW9uID0gaGFuZGxlX2NvbmZpZzsKKwlpbXhfdXNiLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaW14X3VzYjsKKwogCXJldHVybiAwOwogCiBmYWlsMzoKQEAgLTE0NTcsNiArMTUwOCw3IEBACiAJaW50IGk7CiAKIAlpbXhfdWRjX2Rpc2FibGUoaW14X3VzYik7CisJZGVsX3RpbWVyKCZpbXhfdXNiLT50aW1lcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgSU1YX1VTQl9OQl9FUCArIDE7IGkrKykKIAkJZnJlZV9pcnEoaW14X3VzYi0+dXNiZF9pbnRbaV0sIGlteF91c2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuaCBiL2RyaXZlcnMvdXNiL2dhZGdldC9pbXhfdWRjLmgKaW5kZXggODUwMDc2OS4uYjQ4YWQ1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lteF91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy5oCkBAIC0yMyw3ICsyMyw4IEBACiAvKiBIZWxwZXIgbWFjcm9zICovCiAjZGVmaW5lIEVQX05PKGVwKQkoKGVwLT5iRW5kcG9pbnRBZGRyZXNzKSAmIH5VU0JfRElSX0lOKSAvKiBJTjoxLCBPVVQ6MCAqLwogI2RlZmluZSBFUF9ESVIoZXApCSgoZXAtPmJFbmRwb2ludEFkZHJlc3MpICYgVVNCX0RJUl9JTiA/IDEgOiAwKQotI2RlZmluZSBpcnFfdG9fZXAoaXJxKQkoKChpcnEpID49IFVTQkRfSU5UMCkgfHwgKChpcnEpIDw9IFVTQkRfSU5UNikgPyAoKGlycSkgLSBVU0JEX0lOVDApIDogKFVTQkRfSU5UNikpIC8qc2hvdWxkIG5vdCBoYXBwZW4qLworI2RlZmluZSBpcnFfdG9fZXAoaXJxKQkoKChpcnEpID49IFVTQkRfSU5UMCkgfHwgKChpcnEpIDw9IFVTQkRfSU5UNikgXAorCQk/ICgoaXJxKSAtIFVTQkRfSU5UMCkgOiAoVVNCRF9JTlQ2KSkgLypzaG91bGQgbm90IGhhcHBlbiovCiAjZGVmaW5lIGVwX3RvX2lycShlcCkJKEVQX05PKChlcCkpICsgVVNCRF9JTlQwKQogI2RlZmluZSBJTVhfVVNCX05CX0VQCTYKIApAQCAtNTgsNiArNTksNyBAQAogCXN0cnVjdCBkZXZpY2UJCQkJKmRldjsKIAlzdHJ1Y3QgaW14X2VwX3N0cnVjdAkJCWlteF9lcFtJTVhfVVNCX05CX0VQXTsKIAlzdHJ1Y3QgY2xrCQkJCSpjbGs7CisJc3RydWN0IHRpbWVyX2xpc3QJCQl0aW1lcjsKIAllbnVtIGVwMF9zdGF0ZQkJCQllcDBzdGF0ZTsKIAlzdHJ1Y3QgcmVzb3VyY2UJCQkJKnJlczsKIAl2b2lkIF9faW9tZW0JCQkJKmJhc2U7CkBAIC04OCw4ICs5MCw4IEBACiAjZGVmaW5lICBVU0JfRVBfRkRBVDMoeCkJKDB4M0YgKyAoeCoweDMwKSkgLyogVVNCIEZJRk8gZGF0YSAqLwogI2RlZmluZSAgVVNCX0VQX0ZTVEFUKHgpCSgweDQwICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIHN0YXR1cyAqLwogI2RlZmluZSAgVVNCX0VQX0ZDVFJMKHgpCSgweDQ0ICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIGNvbnRyb2wgKi8KLSNkZWZpbmUgIFVTQl9FUF9MUkZQKHgpCQkoMHg0OCArICh4KjB4MzApKSAvKiBVU0IgbGFzdCByZWFkIGZyYW1lIHBvaW50ZXIgKi8KLSNkZWZpbmUgIFVTQl9FUF9MV0ZQKHgpCQkoMHg0QyArICh4KjB4MzApKSAvKiBVU0IgbGFzdCB3cml0ZSBmcmFtZSBwb2ludGVyICovCisjZGVmaW5lICBVU0JfRVBfTFJGUCh4KQkJKDB4NDggKyAoeCoweDMwKSkgLyogVVNCIGxhc3QgcmQgZi4gcG9pbnRlciAqLworI2RlZmluZSAgVVNCX0VQX0xXRlAoeCkJCSgweDRDICsgKHgqMHgzMCkpIC8qIFVTQiBsYXN0IHdyIGYuIHBvaW50ZXIgKi8KICNkZWZpbmUgIFVTQl9FUF9GQUxSTSh4KQkoMHg1MCArICh4KjB4MzApKSAvKiBVU0IgRklGTyBhbGFybSAqLwogI2RlZmluZSAgVVNCX0VQX0ZSRFAoeCkJCSgweDU0ICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIHJlYWQgcG9pbnRlciAqLwogI2RlZmluZSAgVVNCX0VQX0ZXUlAoeCkJCSgweDU4ICsgKHgqMHgzMCkpIC8qIFVTQiBGSUZPIHdyaXRlIHBvaW50ZXIgKi8KQEAgLTE3MCw3ICsxNzIsNyBAQAogLyogI2RlZmluZSBERUJVR19JUlEgKi8KIC8qICNkZWZpbmUgREVCVUdfRVBJUlEgKi8KIC8qICNkZWZpbmUgREVCVUdfRFVNUCAqLwotI2RlZmluZSBERUJVR19FUlIKKy8qICNkZWZpbmUgREVCVUdfRVJSICovCiAKICNpZmRlZiBERUJVR19SRVEKIAkjZGVmaW5lIERfUkVRKGRldiwgYXJncy4uLikJZGV2X2RiZyhkZXYsICMjIGFyZ3MpCkBAIC0yMjgsNyArMjMwLDggQEAKICNlbmRpZiAvKiBERUJVR19JUlEgKi8KIAogI2lmZGVmIERFQlVHX0VQSVJRCi0Jc3RhdGljIHZvaWQgZHVtcF9lcF9pbnRyKGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgbnIsIGludCBpcnFyZWcsIHN0cnVjdCBkZXZpY2UgKmRldikKKwlzdGF0aWMgdm9pZCBkdW1wX2VwX2ludHIoY29uc3QgY2hhciAqbGFiZWwsIGludCBuciwgaW50IGlycXJlZywKKwkJCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJewogCQlkZXZfZGJnKGRldiwgIjwlcz4gRVAlZF9JTlRSPVslcyVzJXMlcyVzJXMlcyVzJXNdXG4iLCBsYWJlbCwgbnIsCiAJCQkoaXJxcmVnICYgRVBJTlRSX0ZJRk9fRlVMTCkgPyAiIGZ1bGwiIDogIiIsCkBAIC0yNDYsNyArMjQ5LDggQEAKICNlbmRpZiAvKiBERUJVR19JUlEgKi8KIAogI2lmZGVmIERFQlVHX0RVTVAKLQlzdGF0aWMgdm9pZCBkdW1wX3VzYl9zdGF0KGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgaW14X3VkY19zdHJ1Y3QgKmlteF91c2IpCisJc3RhdGljIHZvaWQgZHVtcF91c2Jfc3RhdChjb25zdCBjaGFyICpsYWJlbCwKKwkJCQkJCXN0cnVjdCBpbXhfdWRjX3N0cnVjdCAqaW14X3VzYikKIAl7CiAJCWludCB0ZW1wID0gX19yYXdfcmVhZGwoaW14X3VzYi0+YmFzZSArIFVTQl9TVEFUKTsKIApAQCAtMjU5LDEyICsyNjMsMTUgQEAKIAkJCSh0ZW1wICYgU1RBVF9BTFRTRVQpKTsKIAl9CiAKLQlzdGF0aWMgdm9pZCBkdW1wX2VwX3N0YXQoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBpbXhfZXBfc3RydWN0ICppbXhfZXApCisJc3RhdGljIHZvaWQgZHVtcF9lcF9zdGF0KGNvbnN0IGNoYXIgKmxhYmVsLAorCQkJCQkJc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCkKIAl7Ci0JCWludCB0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlICsgVVNCX0VQX0lOVFIoRVBfTk8oaW14X2VwKSkpOworCQlpbnQgdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZQorCQkJCQkJKyBVU0JfRVBfSU5UUihFUF9OTyhpbXhfZXApKSk7CiAKIAkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwKLQkJCSI8JXM+IEVQJWRfSU5UUj1bJXMlcyVzJXMlcyVzJXMlcyVzXVxuIiwgbGFiZWwsIEVQX05PKGlteF9lcCksCisJCQkiPCVzPiBFUCVkX0lOVFI9WyVzJXMlcyVzJXMlcyVzJXMlc11cbiIsCisJCQlsYWJlbCwgRVBfTk8oaW14X2VwKSwKIAkJCSh0ZW1wICYgRVBJTlRSX0ZJRk9fRlVMTCkgPyAiIGZ1bGwiIDogIiIsCiAJCQkodGVtcCAmIEVQSU5UUl9GSUZPX0VNUFRZKSA/ICIgZmVtcHR5IiA6ICIiLAogCQkJKHRlbXAgJiBFUElOVFJfRklGT19FUlJPUikgPyAiIGZlcnIiIDogIiIsCkBAIC0yNzUsMTggKzI4MiwyMiBAQAogCQkJKHRlbXAgJiBFUElOVFJfREVWUkVRKSA/ICIgZGV2cmVxIiA6ICIiLAogCQkJKHRlbXAgJiBFUElOVFJfRU9UKSA/ICIgZW90IiA6ICIiKTsKIAotCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlICsgVVNCX0VQX1NUQVQoRVBfTk8oaW14X2VwKSkpOworCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlCisJCQkJCQkrIFVTQl9FUF9TVEFUKEVQX05PKGlteF9lcCkpKTsKIAogCQlkZXZfZGJnKGlteF9lcC0+aW14X3VzYi0+ZGV2LAotCQkJIjwlcz4gRVAlZF9TVEFUPVslcyVzIGJjb3VudD0lZF1cbiIsIGxhYmVsLCBFUF9OTyhpbXhfZXApLAorCQkJIjwlcz4gRVAlZF9TVEFUPVslcyVzIGJjb3VudD0lZF1cbiIsCisJCQlsYWJlbCwgRVBfTk8oaW14X2VwKSwKIAkJCSh0ZW1wICYgRVBTVEFUX1NJUCkgPyAiIHNpcCIgOiAiIiwKIAkJCSh0ZW1wICYgRVBTVEFUX1NUQUxMKSA/ICIgc3RhbGwiIDogIiIsCiAJCQkodGVtcCAmIEVQU1RBVF9CQ09VTlQpID4+IDE2KTsKIAotCQl0ZW1wID0gX19yYXdfcmVhZGwoaW14X2VwLT5pbXhfdXNiLT5iYXNlICsgVVNCX0VQX0ZTVEFUKEVQX05PKGlteF9lcCkpKTsKKwkJdGVtcCA9IF9fcmF3X3JlYWRsKGlteF9lcC0+aW14X3VzYi0+YmFzZQorCQkJCQkJKyBVU0JfRVBfRlNUQVQoRVBfTk8oaW14X2VwKSkpOwogCiAJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsCi0JCQkiPCVzPiBFUCVkX0ZTVEFUPVslcyVzJXMlcyVzJXMlc11cbiIsIGxhYmVsLCBFUF9OTyhpbXhfZXApLAorCQkJIjwlcz4gRVAlZF9GU1RBVD1bJXMlcyVzJXMlcyVzJXNdXG4iLAorCQkJbGFiZWwsIEVQX05PKGlteF9lcCksCiAJCQkodGVtcCAmIEZTVEFUX0VSUikgPyAiIGZlcnIiIDogIiIsCiAJCQkodGVtcCAmIEZTVEFUX1VGKSA/ICIgZnVuZGVyIiA6ICIiLAogCQkJKHRlbXAgJiBGU1RBVF9PRikgPyAiIGZvdmVyIiA6ICIiLApAQCAtMjk2LDE5ICszMDcsMjMgQEAKIAkJCSh0ZW1wICYgRlNUQVRfRU1QVFkpID8gIiBmZW1wdHkiIDogIiIpOwogCX0KIAotCXN0YXRpYyB2b2lkIGR1bXBfcmVxKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgaW14X2VwX3N0cnVjdCAqaW14X2VwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKKwlzdGF0aWMgdm9pZCBkdW1wX3JlcShjb25zdCBjaGFyICpsYWJlbCwgc3RydWN0IGlteF9lcF9zdHJ1Y3QgKmlteF9lcCwKKwkJCQkJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKIAl7CiAJCWludCBpOwogCiAJCWlmICghcmVxIHx8ICFyZXEtPmJ1ZikgewotCQkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwgIjwlcz4gcmVxIG9yIHJlcSBidWYgaXMgZnJlZVxuIiwgbGFiZWwpOworCQkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwKKwkJCQkJIjwlcz4gcmVxIG9yIHJlcSBidWYgaXMgZnJlZVxuIiwgbGFiZWwpOwogCQkJcmV0dXJuOwogCQl9CiAKLQkJaWYgKCghRVBfTk8oaW14X2VwKSAmJiBpbXhfZXAtPmlteF91c2ItPmVwMHN0YXRlID09IEVQMF9JTl9EQVRBX1BIQVNFKQorCQlpZiAoKCFFUF9OTyhpbXhfZXApICYmIGlteF9lcC0+aW14X3VzYi0+ZXAwc3RhdGUKKwkJCT09IEVQMF9JTl9EQVRBX1BIQVNFKQogCQkJfHwgKEVQX05PKGlteF9lcCkgJiYgRVBfRElSKGlteF9lcCkpKSB7CiAKLQkJCWRldl9kYmcoaW14X2VwLT5pbXhfdXNiLT5kZXYsICI8JXM+IHJlcXVlc3QgZHVtcCA8IiwgbGFiZWwpOworCQkJZGV2X2RiZyhpbXhfZXAtPmlteF91c2ItPmRldiwKKwkJCQkJCSI8JXM+IHJlcXVlc3QgZHVtcCA8IiwgbGFiZWwpOwogCQkJZm9yIChpID0gMDsgaSA8IHJlcS0+bGVuZ3RoOyBpKyspCiAJCQkJcHJpbnRrKCIlMDJ4LSIsICooKHU4ICopcmVxLT5idWYgKyBpKSk7CiAJCQlwcmludGsoIj5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwppbmRleCAzMTdiNDhmLi5kMjA5MzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvaW5vZGUuYwpAQCAtMTMzNCw3ICsxMzM0LDcgQEAKIAogCXF1YWwuYkxlbmd0aCA9IHNpemVvZiBxdWFsOwogCXF1YWwuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0RFVklDRV9RVUFMSUZJRVI7Ci0JcXVhbC5iY2RVU0IgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2ICgweDAyMDApOworCXF1YWwuYmNkVVNCID0gY3B1X3RvX2xlMTYgKDB4MDIwMCk7CiAKIAlkZXNjID0gZGV2LT5kZXY7CiAJcXVhbC5iRGV2aWNlQ2xhc3MgPSBkZXNjLT5iRGV2aWNlQ2xhc3M7CkBAIC0xOTA4LDcgKzE5MDgsNyBAQAogCQkJfHwgZGV2LT5kZXYtPmJOdW1Db25maWd1cmF0aW9ucyAhPSAxKQogCQlnb3RvIGZhaWw7CiAJZGV2LT5kZXYtPmJOdW1Db25maWd1cmF0aW9ucyA9IDE7Ci0JZGV2LT5kZXYtPmJjZFVTQiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYgKDB4MDIwMCk7CisJZGV2LT5kZXYtPmJjZFVTQiA9IGNwdV90b19sZTE2ICgweDAyMDApOwogCiAJLyogdHJpZ2dlcnMgZ2FkZ2V0ZnNfYmluZCgpOyB0aGVuIHdlIGNhbiBlbnVtZXJhdGUuICovCiAJc3Bpbl91bmxvY2tfaXJxICgmZGV2LT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKaW5kZXggZDU1NGIwOC4uNmNkM2Q1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKQEAgLTQzMiw4ICs0MzIsOCBAQAogCWRldmljZV9hZGQoJmRldi0+Z2FkZ2V0LmRldik7CiAJcmV0dmFsID0gZHJpdmVyLT5iaW5kKCZkZXYtPmdhZGdldCk7CiAJaWYgKHJldHZhbCkgewotCQlwcmludGsoIiVzOiBiaW5kIHRvIGRyaXZlciAlcyAtLT4gZXJyb3IgJWRcbiIsIGRldi0+Z2FkZ2V0Lm5hbWUsCi0JCSAgICAgICBkcml2ZXItPmRyaXZlci5uYW1lLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYmluZCB0byBkcml2ZXIgJXMgLS0+IGVycm9yICVkXG4iLAorCQkgICAgICAgZGV2LT5nYWRnZXQubmFtZSwgZHJpdmVyLT5kcml2ZXIubmFtZSwgcmV0dmFsKTsKIAkJZGV2aWNlX2RlbCgmZGV2LT5nYWRnZXQuZGV2KTsKIAogCQlkZXYtPmRyaXZlciA9IDA7CkBAIC00NDUsOCArNDQ1LDggQEAKIAkgKiBmb3Igc2V0X2NvbmZpZ3VyYXRpb24gYXMgd2VsbCBhcyBldmVudHVhbCBkaXNjb25uZWN0LgogCSAqIE5PVEU6ICB0aGlzIHNob3VsZG4ndCBwb3dlciB1cCB1bnRpbCBsYXRlci4KIAkgKi8KLQlwcmludGsoIiVzOiByZWdpc3RlcmVkIGdhZGdldCBkcml2ZXIgJyVzJ1xuIiwgZGV2LT5nYWRnZXQubmFtZSwKLQkgICAgICAgZHJpdmVyLT5kcml2ZXIubmFtZSk7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJlZ2lzdGVyZWQgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAorCSAgICAgICBkZXYtPmdhZGdldC5uYW1lLCBkcml2ZXItPmRyaXZlci5uYW1lKTsKIAogCXVkY19lbmFibGUoZGV2KTsKIApAQCAtNTgxLDcgKzU4MSw4IEBACiAJCQkgKiBkaXNjYXJkIHRoZSBleHRyYSBkYXRhLgogCQkJICovCiAJCQlpZiAocmVxLT5yZXEuc3RhdHVzICE9IC1FT1ZFUkZMT1cpCi0JCQkJcHJpbnRrKCIlcyBvdmVyZmxvdyAlZFxuIiwgZXAtPmVwLm5hbWUsIGNvdW50KTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBvdmVyZmxvdyAlZFxuIiwKKwkJCQkgICAgICAgZXAtPmVwLm5hbWUsIGNvdW50KTsKIAkJCXJlcS0+cmVxLnN0YXR1cyA9IC1FT1ZFUkZMT1c7CiAJCX0gZWxzZSB7CiAJCQkqYnVmKysgPSBieXRlOwpAQCAtODMxLDcgKzgzMiw4IEBACiAJCQkJCQkgICAgICAgcXVldWUpOwogCiAJCQkJaWYgKCFyZXEpIHsKLQkJCQkJcHJpbnRrKCIlczogTlVMTCBSRVEgJWRcbiIsCisJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJICAgICAgICIlczogTlVMTCBSRVEgJWRcbiIsCiAJCQkJCSAgICAgICBfX2Z1bmNfXywgZXBfaWR4KTsKIAkJCQkJZmx1c2goZXApOwogCQkJCQlicmVhazsKQEAgLTg0NCw3ICs4NDYsNyBAQAogCiAJfSBlbHNlIHsKIAkJLyogVGhyb3cgcGFja2V0IGF3YXkuLiAqLwotCQlwcmludGsoIiVzOiBObyBkZXNjcmlwdG9yPyE/XG4iLCBfX2Z1bmNfXyk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBObyBkZXNjcmlwdG9yPyE/XG4iLCBfX2Z1bmNfXyk7CiAJCWZsdXNoKGVwKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwppbmRleCAxMmM2ZDgzLi45NDk4YmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKQEAgLTE0Miw4ICsxNDIsOCBAQAogCiAjaW5jbHVkZSAibmV0MjI4MC5oIgogCi0jZGVmaW5lIHZhbGlkX2JpdAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IFZBTElEX0JJVCkKLSNkZWZpbmUgZG1hX2RvbmVfaWUJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCBETUFfRE9ORV9JTlRFUlJVUFRfRU5BQkxFKQorI2RlZmluZSB2YWxpZF9iaXQJY3B1X3RvX2xlMzIgKDEgPDwgVkFMSURfQklUKQorI2RlZmluZSBkbWFfZG9uZV9pZQljcHVfdG9fbGUzMiAoMSA8PCBETUFfRE9ORV9JTlRFUlJVUFRfRU5BQkxFKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC00MjUsNyArNDI1LDcgQEAKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJCXRkLT5kbWFjb3VudCA9IDA7CS8qIG5vdCBWQUxJRCAqLwotCQl0ZC0+ZG1hYWRkciA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKERNQV9BRERSX0lOVkFMSUQpOworCQl0ZC0+ZG1hYWRkciA9IGNwdV90b19sZTMyIChETUFfQUREUl9JTlZBTElEKTsKIAkJdGQtPmRtYWRlc2MgPSB0ZC0+ZG1hYWRkcjsKIAkJcmVxLT50ZCA9IHRkOwogCX0KQEAgLTc3NSw3ICs3NzUsNyBAQAogCWZpbGxfZG1hX2Rlc2MgKGVwLCByZXEsIDEpOwogCiAJaWYgKCF1c2VfZG1hX2NoYWluaW5nKQotCQlyZXEtPnRkLT5kbWFjb3VudCB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IEVORF9PRl9DSEFJTik7CisJCXJlcS0+dGQtPmRtYWNvdW50IHw9IGNwdV90b19sZTMyICgxIDw8IEVORF9PRl9DSEFJTik7CiAKIAlzdGFydF9xdWV1ZSAoZXAsIHRtcCwgcmVxLT50ZF9kbWEpOwogfQpAQCAtMjQwNyw5ICsyNDA3LDkgQEAKIAogCQkJaWYgKHJlYWRsICgmZS0+cmVncy0+ZXBfcnNwKQogCQkJCQkmICgxIDw8IFNFVF9FTkRQT0lOVF9IQUxUKSkKLQkJCQlzdGF0dXMgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxKTsKKwkJCQlzdGF0dXMgPSBjcHVfdG9fbGUzMiAoMSk7CiAJCQllbHNlCi0JCQkJc3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCQkJc3RhdHVzID0gY3B1X3RvX2xlMzIgKDApOwogCiAJCQkvKiBkb24ndCBib3RoZXIgd2l0aCBhIHJlcXVlc3Qgb2JqZWN0ISAqLwogCQkJd3JpdGVsICgwLCAmZGV2LT5lcHJlZ3MgWzBdLmVwX2lycWVuYik7CkBAIC0yNjY3LDcgKzI2NjcsNyBAQAogCQkJCXJlcSA9IGxpc3RfZW50cnkgKGVwLT5xdWV1ZS5uZXh0LAogCQkJCQkJc3RydWN0IG5ldDIyODBfcmVxdWVzdCwgcXVldWUpOwogCQkJCWRtYWNvdW50ID0gcmVxLT50ZC0+ZG1hY291bnQ7Ci0JCQkJZG1hY291bnQgJj0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJCQkJZG1hY291bnQgJj0gY3B1X3RvX2xlMzIgKAogCQkJCQkJKDEgPDwgVkFMSURfQklUKQogCQkJCQkJfCBETUFfQllURV9DT1VOVF9NQVNLKTsKIAkJCQlpZiAoZG1hY291bnQgJiYgKGRtYWNvdW50ICYgdmFsaWRfYml0KSA9PSAwKQpAQCAtMjg4MSw3ICsyODgxLDcgQEAKIAkJCWdvdG8gZG9uZTsKIAkJfQogCQl0ZC0+ZG1hY291bnQgPSAwOwkvKiBub3QgVkFMSUQgKi8KLQkJdGQtPmRtYWFkZHIgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChETUFfQUREUl9JTlZBTElEKTsKKwkJdGQtPmRtYWFkZHIgPSBjcHVfdG9fbGUzMiAoRE1BX0FERFJfSU5WQUxJRCk7CiAJCXRkLT5kbWFkZXNjID0gdGQtPmRtYWFkZHI7CiAJCWRldi0+ZXAgW2ldLmR1bW15ID0gdGQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKaW5kZXggNWEzMDM0Zi4uMjk1MDAxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCkBAIC0yMjUsMTIgKzIyNSwxMiBAQAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJc2l6ZW9mIGRldmljZV9kZXNjLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAotCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iY2RVU0IgPQkJY3B1X3RvX2xlMTYoMHgwMjAwKSwKIAkuYkRldmljZUNsYXNzID0JCVVTQl9DTEFTU19QRVJfSU5URVJGQUNFLAogCS5iRGV2aWNlU3ViQ2xhc3MgPQkwLAogCS5iRGV2aWNlUHJvdG9jb2wgPQkwLAotCS5pZFZlbmRvciA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFBSSU5URVJfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFBSSU5URVJfUFJPRFVDVF9OVU0pLAorCS5pZFZlbmRvciA9CQljcHVfdG9fbGUxNihQUklOVEVSX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJY3B1X3RvX2xlMTYoUFJJTlRFUl9QUk9EVUNUX05VTSksCiAJLmlNYW51ZmFjdHVyZXIgPQlTVFJJTkdfTUFOVUZBQ1RVUkVSLAogCS5pUHJvZHVjdCA9CQlTVFJJTkdfUFJPRFVDVCwKIAkuaVNlcmlhbE51bWJlciA9CVNUUklOR19TRVJJQUxOVU0sCkBAIC0yOTksMjAgKzI5OSwyMCBAQAogCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAogCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCiAJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAotCS53TWF4UGFja2V0U2l6ZSA9CV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNTEyKQorCS53TWF4UGFja2V0U2l6ZSA9CWNwdV90b19sZTE2KDUxMikKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgaHNfZXBfb3V0X2Rlc2MgPSB7CiAJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKIAkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCi0JLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKQogfTsKIAogc3RhdGljIHN0cnVjdCB1c2JfcXVhbGlmaWVyX2Rlc2NyaXB0b3IgZGV2X3F1YWxpZmllciA9IHsKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2X3F1YWxpZmllciwKIAkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIsCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BSSU5URVIsCiAJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEKIH07CkBAIC0xNDA2LDE2ICsxNDA2LDE2IEBACiAJCQlnYWRnZXQtPm5hbWUpOwogCQkvKiB1bnJlY29nbml6ZWQsIGJ1dCBzYWZlIHVubGVzcyBidWxrIGlzIFJFQUxMWSBxdWlya3kgKi8KIAkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0KLQkJCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHhGRkZGKTsKKwkJCWNwdV90b19sZTE2KDB4RkZGRik7CiAJfQogCXNucHJpbnRmKG1hbnVmYWN0dXJlciwgc2l6ZW9mKG1hbnVmYWN0dXJlciksICIlcyAlcyB3aXRoICVzIiwKIAkJaW5pdF91dHNuYW1lKCktPnN5c25hbWUsIGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAogCQlnYWRnZXQtPm5hbWUpOwogCiAJZGV2aWNlX2Rlc2MuaWRWZW5kb3IgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KFBSSU5URVJfVkVORE9SX05VTSk7CisJCWNwdV90b19sZTE2KFBSSU5URVJfVkVORE9SX05VTSk7CiAJZGV2aWNlX2Rlc2MuaWRQcm9kdWN0ID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihQUklOVEVSX1BST0RVQ1RfTlVNKTsKKwkJY3B1X3RvX2xlMTYoUFJJTlRFUl9QUk9EVUNUX05VTSk7CiAKIAkvKiBzdXBwb3J0IG9wdGlvbmFsIHZlbmRvci9kaXN0cm8gY3VzdG9taXphdGlvbiAqLwogCWlmIChpZFZlbmRvcikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKaW5kZXggOTkwZjQwZi4uOGNjNjc2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+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+CiAKIC8qCiAgKiBSZWdpc3RlciBkZWZpbml0aW9ucwpAQCAtNDIxLDEwICs0MjIsMTQgQEAKICAqIEBkcml2ZXI6IGJvdW5kIGdhZGdldCAoemVybywgZ19ldGhlciwgZ19maWxlX3N0b3JhZ2UsIC4uLikKICAqIEBkZXY6IGRldmljZQogICogQG1hY2g6IG1hY2hpbmUgaW5mbywgdXNlZCB0byBhY3RpdmF0ZSBzcGVjaWZpYyBHUElPCisgKiBAdHJhbnNjZWl2ZXI6IGV4dGVybmFsIHRyYW5zY2VpdmVyIHRvIGhhbmRsZSB2YnVzIHNlbnNlIGFuZCBEKyBwdWxsdXAKICAqIEBlcDBzdGF0ZTogY29udHJvbCBlbmRwb2ludCBzdGF0ZSBtYWNoaW5lIHN0YXRlCiAgKiBAc3RhdHM6IHN0YXRpc3RpY3Mgb24gdWRjIHVzYWdlCiAgKiBAdWRjX3VzYl9lcDogYXJyYXkgb2YgdXNiIGVuZHBvaW50cyBvZmZlcmVkIGJ5IHRoZSBnYWRnZXQKICAqIEBweGFfZXA6IGFycmF5IG9mIHB4YSBhdmFpbGFibGUgZW5kcG9pbnRzCisgKiBAZW5hYmxlZDogVURDIHdhcyBlbmFibGVkIGJ5IGEgcHJldmlvdXMgdWRjX2VuYWJsZSgpCisgKiBAcHVsbHVwX29uOiBpZiBwdWxsdXAgcmVzaXN0b3IgY29ubmVjdGVkIHRvIEQrIHBpbgorICogQHB1bGx1cF9yZXN1bWU6IGlmIHB1bGx1cCByZXNpc3RvciBzaG91bGQgYmUgY29ubmVjdGVkIHRvIEQrIHBpbiBvbiByZXN1bWUKICAqIEBjb25maWc6IFVEQyBhY3RpdmUgY29uZmlndXJhdGlvbgogICogQGxhc3RfaW50ZXJmYWNlOiBVREMgaW50ZXJmYWNlIG9mIHRoZSBsYXN0IFNFVF9JTlRFUkZBQ0UgaG9zdCByZXF1ZXN0CiAgKiBAbGFzdF9hbHRlcm5hdGU6IFVEQyBhbHRzZXR0aW5nIG9mIHRoZSBsYXN0IFNFVF9JTlRFUkZBQ0UgaG9zdCByZXF1ZXN0CkBAIC00NDMsNiArNDQ4LDcgQEAKIAlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIJCSpkcml2ZXI7CiAJc3RydWN0IGRldmljZQkJCQkqZGV2OwogCXN0cnVjdCBweGEyeHhfdWRjX21hY2hfaW5mbwkJKm1hY2g7CisJc3RydWN0IG90Z190cmFuc2NlaXZlcgkJCSp0cmFuc2NlaXZlcjsKIAogCWVudW0gZXAwX3N0YXRlCQkJCWVwMHN0YXRlOwogCXN0cnVjdCB1ZGNfc3RhdHMJCQlzdGF0czsKQEAgLTQ1MCw2ICs0NTYsMTAgQEAKIAlzdHJ1Y3QgdWRjX3VzYl9lcAkJCXVkY191c2JfZXBbTlJfVVNCX0VORFBPSU5UU107CiAJc3RydWN0IHB4YV9lcAkJCQlweGFfZXBbTlJfUFhBX0VORFBPSU5UU107CiAKKwl1bnNpZ25lZAkJCQllbmFibGVkOjE7CisJdW5zaWduZWQJCQkJcHVsbHVwX29uOjE7CisJdW5zaWduZWQJCQkJcHVsbHVwX3Jlc3VtZToxOworCXVuc2lnbmVkCQkJCXZidXNfc2Vuc2VkOjE7CiAJdW5zaWduZWQJCQkJY29uZmlnOjI7CiAJdW5zaWduZWQJCQkJbGFzdF9pbnRlcmZhY2U6MzsKIAl1bnNpZ25lZAkJCQlsYXN0X2FsdGVybmF0ZTozOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3JuZGlzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwppbmRleCA4YzI2ZjVlLi4yYjQ2NjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcm5kaXMuYwpAQCAtNjMsNyArNjMsNyBAQAogc3RhdGljIHJuZGlzX3BhcmFtcyBybmRpc19wZXJfZGV2X3BhcmFtcyBbUk5ESVNfTUFYX0NPTkZJR1NdOwogCiAvKiBEcml2ZXIgVmVyc2lvbiAqLwotc3RhdGljIGNvbnN0IF9fbGUzMiBybmRpc19kcml2ZXJfdmVyc2lvbiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworc3RhdGljIGNvbnN0IF9fbGUzMiBybmRpc19kcml2ZXJfdmVyc2lvbiA9IGNwdV90b19sZTMyICgxKTsKIAogLyogRnVuY3Rpb24gUHJvdG90eXBlcyAqLwogc3RhdGljIHJuZGlzX3Jlc3BfdCAqcm5kaXNfYWRkX3Jlc3BvbnNlIChpbnQgY29uZmlnTnIsIHUzMiBsZW5ndGgpOwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJaW50CQkJaSwgY291bnQ7CiAJcm5kaXNfcXVlcnlfY21wbHRfdHlwZQkqcmVzcDsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqbmV0OwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCSpzdGF0czsKKwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwkqc3RhdHM7CiAKIAlpZiAoIXIpIHJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfcXVlcnlfY21wbHRfdHlwZSAqKSByLT5idWY7CkBAIC0xOTAsMTMgKzE5MCwxMCBAQAogCiAJLyogcmVzcG9uc2UgZ29lcyBoZXJlLCByaWdodCBhZnRlciB0aGUgaGVhZGVyICovCiAJb3V0YnVmID0gKF9fbGUzMiAqKSAmcmVzcFsxXTsKLQlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE2KTsKKwlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCA9IGNwdV90b19sZTMyICgxNik7CiAKIAluZXQgPSBybmRpc19wZXJfZGV2X3BhcmFtc1tjb25maWdOcl0uZGV2OwotCWlmIChuZXQtPmdldF9zdGF0cykKLQkJc3RhdHMgPSBuZXQtPmdldF9zdGF0cyhuZXQpOwotCWVsc2UKLQkJc3RhdHMgPSBOVUxMOworCXN0YXRzID0gZGV2X2dldF9zdGF0cyhuZXQpOwogCiAJc3dpdGNoIChPSUQpIHsKIApAQCAtMjIxLDcgKzIxOCw3IEBACiAJCSAqIHJlZGRpdGUgZXJnbyBxdWFlIHN1bnQgQ2Flc2FyaXMgQ2Flc2FyaQogCQkgKiBldCBxdWFlIHN1bnQgRGVpIERlbyEKIAkJICovCi0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTI1Niw3ICsyNTMsNyBAQAogCQkJcHJfZGVidWcoIiVzOiBPSURfR0VOX0xJTktfU1BFRURcbiIsIF9fZnVuY19fKTsKIAkJaWYgKHJuZGlzX3Blcl9kZXZfcGFyYW1zIFtjb25maWdOcl0ubWVkaWFfc3RhdGUKIAkJCQk9PSBORElTX01FRElBX1NUQVRFX0RJU0NPTk5FQ1RFRCkKLQkJCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoMCk7CiAJCWVsc2UKIAkJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoCiAJCQkJcm5kaXNfcGVyX2Rldl9wYXJhbXMgW2NvbmZpZ05yXS5zcGVlZCk7CkBAIC0zMTcsNyArMzE0LDcgQEAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF9HRU5fTUFYSU1VTV9UT1RBTF9TSVpFOgogCQlwcl9kZWJ1ZygiJXM6IE9JRF9HRU5fTUFYSU1VTV9UT1RBTF9TSVpFXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFJORElTX01BWF9UT1RBTF9TSVpFKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKFJORElTX01BWF9UT1RBTF9TSVpFKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTMzMiw3ICszMjksNyBAQAogCiAJY2FzZSBPSURfR0VOX1BIWVNJQ0FMX01FRElVTToKIAkJcHJfZGVidWcoIiVzOiBPSURfR0VOX1BIWVNJQ0FMX01FRElVTVxuIiwgX19mdW5jX18pOwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoMCk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCkBAIC0zNDIsNyArMzM5LDcgQEAKIAkgKi8KIAljYXNlIE9JRF9HRU5fTUFDX09QVElPTlM6CQkvKiBmcm9tIFdpbk1FICovCiAJCXByX2RlYnVnKCIlczogT0lEX0dFTl9NQUNfT1BUSU9OU1xuIiwgX19mdW5jX18pOwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyKAogCQkJICBORElTX01BQ19PUFRJT05fUkVDRUlWRV9TRVJJQUxJWkVECiAJCQl8IE5ESVNfTUFDX09QVElPTl9GVUxMX0RVUExFWCk7CiAJCXJldHZhbCA9IDA7CkBAIC00MzEsNyArNDI4LDcgQEAKIAljYXNlIE9JRF84MDJfM19NVUxUSUNBU1RfTElTVDoKIAkJcHJfZGVidWcoIiVzOiBPSURfODAyXzNfTVVMVElDQVNUX0xJU1RcbiIsIF9fZnVuY19fKTsKIAkJLyogTXVsdGljYXN0IGJhc2UgYWRkcmVzcyBvbmx5ICovCi0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgweEUwMDAwMDAwKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgweEUwMDAwMDAwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTQzOSw3ICs0MzYsNyBAQAogCWNhc2UgT0lEXzgwMl8zX01BWElNVU1fTElTVF9TSVpFOgogCQlwcl9kZWJ1ZygiJXM6IE9JRF84MDJfM19NQVhJTVVNX0xJU1RfU0laRVxuIiwgX19mdW5jX18pOwogCQkvKiBNdWx0aWNhc3QgYmFzZSBhZGRyZXNzIG9ubHkgKi8KLQkJKm91dGJ1ZiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCQkqb3V0YnVmID0gY3B1X3RvX2xlMzIgKDEpOwogCQlyZXR2YWwgPSAwOwogCQlicmVhazsKIApAQCAtNDYxLDE0ICs0NTgsMTQgQEAKIAkvKiBtYW5kYXRvcnkgKi8KIAljYXNlIE9JRF84MDJfM19YTUlUX09ORV9DT0xMSVNJT046CiAJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX1hNSVRfT05FX0NPTExJU0lPTlxuIiwgX19mdW5jX18pOwotCQkqb3V0YnVmID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJCSpvdXRidWYgPSBjcHVfdG9fbGUzMiAoMCk7CiAJCXJldHZhbCA9IDA7CiAJCWJyZWFrOwogCiAJLyogbWFuZGF0b3J5ICovCiAJY2FzZSBPSURfODAyXzNfWE1JVF9NT1JFX0NPTExJU0lPTlM6CiAJCXByX2RlYnVnKCIlczogT0lEXzgwMl8zX1hNSVRfTU9SRV9DT0xMSVNJT05TXG4iLCBfX2Z1bmNfXyk7Ci0JCSpvdXRidWYgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKKwkJKm91dGJ1ZiA9IGNwdV90b19sZTMyICgwKTsKIAkJcmV0dmFsID0gMDsKIAkJYnJlYWs7CiAKQEAgLTU3MiwyNCArNTY5LDI0IEBACiAJCXJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfaW5pdF9jbXBsdF90eXBlICopIHItPmJ1ZjsKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJcmVzcC0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMiAoCiAJCQlSRU1PVEVfTkRJU19JTklUSUFMSVpFX0NNUExUKTsKLQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoNTIpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoNTIpOwogCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCi0JcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOwotCXJlc3AtPk1ham9yVmVyc2lvbiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX01BSk9SX1ZFUlNJT04pOwotCXJlc3AtPk1pbm9yVmVyc2lvbiA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX01JTk9SX1ZFUlNJT04pOwotCXJlc3AtPkRldmljZUZsYWdzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfREZfQ09OTkVDVElPTkxFU1MpOwotCXJlc3AtPk1lZGl1bSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX01FRElVTV84MDJfMyk7Ci0JcmVzcC0+TWF4UGFja2V0c1BlclRyYW5zZmVyID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSk7CisJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKKwlyZXNwLT5NYWpvclZlcnNpb24gPSBjcHVfdG9fbGUzMiAoUk5ESVNfTUFKT1JfVkVSU0lPTik7CisJcmVzcC0+TWlub3JWZXJzaW9uID0gY3B1X3RvX2xlMzIgKFJORElTX01JTk9SX1ZFUlNJT04pOworCXJlc3AtPkRldmljZUZsYWdzID0gY3B1X3RvX2xlMzIgKFJORElTX0RGX0NPTk5FQ1RJT05MRVNTKTsKKwlyZXNwLT5NZWRpdW0gPSBjcHVfdG9fbGUzMiAoUk5ESVNfTUVESVVNXzgwMl8zKTsKKwlyZXNwLT5NYXhQYWNrZXRzUGVyVHJhbnNmZXIgPSBjcHVfdG9fbGUzMiAoMSk7CiAJcmVzcC0+TWF4VHJhbnNmZXJTaXplID0gY3B1X3RvX2xlMzIgKAogCQkgIHBhcmFtcy0+ZGV2LT5tdHUKIAkJKyBzaXplb2YgKHN0cnVjdCBldGhoZHIpCiAJCSsgc2l6ZW9mIChzdHJ1Y3Qgcm5kaXNfcGFja2V0X21zZ190eXBlKQogCQkrIDIyKTsKLQlyZXNwLT5QYWNrZXRBbGlnbm1lbnRGYWN0b3IgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKLQlyZXNwLT5BRkxpc3RPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgwKTsKLQlyZXNwLT5BRkxpc3RTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMCk7CisJcmVzcC0+UGFja2V0QWxpZ25tZW50RmFjdG9yID0gY3B1X3RvX2xlMzIgKDApOworCXJlc3AtPkFGTGlzdE9mZnNldCA9IGNwdV90b19sZTMyICgwKTsKKwlyZXNwLT5BRkxpc3RTaXplID0gY3B1X3RvX2xlMzIgKDApOwogCiAJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CkBAIC02MTcsNyArNjE0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19xdWVyeV9jbXBsdF90eXBlICopIHItPmJ1ZjsKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUVVFUllfQ01QTFQpOworCXJlc3AtPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1FVRVJZX0NNUExUKTsKIAlyZXNwLT5SZXF1ZXN0SUQgPSBidWYtPlJlcXVlc3RJRDsgLyogU3RpbGwgTEUgaW4gbXNnIGJ1ZmZlciAqLwogCiAJaWYgKGdlbl9uZGlzX3F1ZXJ5X3Jlc3AgKGNvbmZpZ05yLCBsZTMyX3RvX2NwdSAoYnVmLT5PSUQpLApAQCAtNjI2LDEzICs2MjMsMTMgQEAKIAkJCWxlMzJfdG9fY3B1KGJ1Zi0+SW5mb3JtYXRpb25CdWZmZXJMZW5ndGgpLAogCQkJcikpIHsKIAkJLyogT0lEIG5vdCBzdXBwb3J0ZWQgKi8KLQkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyICgKIAkJCQlSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRCk7Ci0JCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyIChzaXplb2YgKnJlc3ApOwotCQlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlckxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwotCQlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIgKHNpemVvZiAqcmVzcCk7CisJCXJlc3AtPkluZm9ybWF0aW9uQnVmZmVyTGVuZ3RoID0gY3B1X3RvX2xlMzIgKDApOworCQlyZXNwLT5JbmZvcm1hdGlvbkJ1ZmZlck9mZnNldCA9IGNwdV90b19sZTMyICgwKTsKIAl9IGVsc2UKLQkJcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCQlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOwogCiAJcGFyYW1zLT5yZXNwX2F2YWlsKHBhcmFtcy0+dik7CiAJcmV0dXJuIDA7CkBAIC02NjUsMTQgKzY2MiwxNCBAQAogCXByX2RlYnVnKCJcbiIpOwogI2VuZGlmCiAKLQlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1NFVF9DTVBMVCk7Ci0JcmVzcC0+TWVzc2FnZUxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDE2KTsKKwlyZXNwLT5NZXNzYWdlVHlwZSA9IGNwdV90b19sZTMyIChSRU1PVEVfTkRJU19TRVRfQ01QTFQpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoMTYpOwogCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCiAJaWYgKGdlbl9uZGlzX3NldF9yZXNwIChjb25maWdOciwgbGUzMl90b19jcHUgKGJ1Zi0+T0lEKSwKIAkJCSgodTggKikgYnVmKSArIDggKyBCdWZPZmZzZXQsIEJ1Zkxlbmd0aCwgcikpCi0JCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEKTsKKwkJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19OT1RfU1VQUE9SVEVEKTsKIAllbHNlCi0JCXJlc3AtPlN0YXR1cyA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKKwkJcmVzcC0+U3RhdHVzID0gY3B1X3RvX2xlMzIgKFJORElTX1NUQVRVU19TVUNDRVNTKTsKIAogCXBhcmFtcy0+cmVzcF9hdmFpbChwYXJhbXMtPnYpOwogCXJldHVybiAwOwpAQCAtNjg5LDExICs2ODYsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19yZXNldF9jbXBsdF90eXBlICopIHItPmJ1ZjsKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUkVNT1RFX05ESVNfUkVTRVRfQ01QTFQpOwotCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgxNik7Ci0JcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCXJlc3AtPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIgKFJFTU9URV9ORElTX1JFU0VUX0NNUExUKTsKKwlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gY3B1X3RvX2xlMzIgKDE2KTsKKwlyZXNwLT5TdGF0dXMgPSBjcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOwogCS8qIHJlc2VudCBpbmZvcm1hdGlvbiAqLwotCXJlc3AtPkFkZHJlc3NpbmdSZXNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDEpOworCXJlc3AtPkFkZHJlc3NpbmdSZXNldCA9IGNwdV90b19sZTMyICgxKTsKIAogCXBhcmFtcy0+cmVzcF9hdmFpbChwYXJhbXMtPnYpOwogCXJldHVybiAwOwpAQCAtNzEzLDExICs3MTAsMTEgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmVzcCA9IChybmRpc19rZWVwYWxpdmVfY21wbHRfdHlwZSAqKSByLT5idWY7CiAKLQlyZXNwLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKAorCXJlc3AtPk1lc3NhZ2VUeXBlID0gY3B1X3RvX2xlMzIgKAogCQkJUkVNT1RFX05ESVNfS0VFUEFMSVZFX0NNUExUKTsKLQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMTYpOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoMTYpOwogCXJlc3AtPlJlcXVlc3RJRCA9IGJ1Zi0+UmVxdWVzdElEOyAvKiBTdGlsbCBMRSBpbiBtc2cgYnVmZmVyICovCi0JcmVzcC0+U3RhdHVzID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoUk5ESVNfU1RBVFVTX1NVQ0NFU1MpOworCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyIChSTkRJU19TVEFUVVNfU1VDQ0VTUyk7CiAKIAlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKQEAgLTc0MiwxMiArNzM5LDEyIEBACiAJCXJldHVybiAtRU5PTUVNOwogCXJlc3AgPSAocm5kaXNfaW5kaWNhdGVfc3RhdHVzX21zZ190eXBlICopIHItPmJ1ZjsKIAotCXJlc3AtPk1lc3NhZ2VUeXBlID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoCisJcmVzcC0+TWVzc2FnZVR5cGUgPSBjcHVfdG9fbGUzMiAoCiAJCQlSRU1PVEVfTkRJU19JTkRJQ0FURV9TVEFUVVNfTVNHKTsKLQlyZXNwLT5NZXNzYWdlTGVuZ3RoID0gX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMjApOworCXJlc3AtPk1lc3NhZ2VMZW5ndGggPSBjcHVfdG9fbGUzMiAoMjApOwogCXJlc3AtPlN0YXR1cyA9IGNwdV90b19sZTMyIChzdGF0dXMpOwotCXJlc3AtPlN0YXR1c0J1ZmZlckxlbmd0aCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOwotCXJlc3AtPlN0YXR1c0J1ZmZlck9mZnNldCA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDApOworCXJlc3AtPlN0YXR1c0J1ZmZlckxlbmd0aCA9IGNwdV90b19sZTMyICgwKTsKKwlyZXNwLT5TdGF0dXNCdWZmZXJPZmZzZXQgPSBjcHVfdG9fbGUzMiAoMCk7CiAKIAlwYXJhbXMtPnJlc3BfYXZhaWwocGFyYW1zLT52KTsKIAlyZXR1cm4gMDsKQEAgLTk2Myw5ICs5NjAsOSBAQAogCQlyZXR1cm47CiAJaGVhZGVyID0gKHZvaWQgKikgc2tiX3B1c2ggKHNrYiwgc2l6ZW9mICpoZWFkZXIpOwogCW1lbXNldCAoaGVhZGVyLCAwLCBzaXplb2YgKmhlYWRlcik7Ci0JaGVhZGVyLT5NZXNzYWdlVHlwZSA9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUkVNT1RFX05ESVNfUEFDS0VUX01TRyk7CisJaGVhZGVyLT5NZXNzYWdlVHlwZSA9IGNwdV90b19sZTMyKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpOwogCWhlYWRlci0+TWVzc2FnZUxlbmd0aCA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKLQloZWFkZXItPkRhdGFPZmZzZXQgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyICgzNik7CisJaGVhZGVyLT5EYXRhT2Zmc2V0ID0gY3B1X3RvX2xlMzIgKDM2KTsKIAloZWFkZXItPkRhdGFMZW5ndGggPSBjcHVfdG9fbGUzMihza2ItPmxlbiAtIHNpemVvZiAqaGVhZGVyKTsKIH0KIApAQCAtMTAyOSw3ICsxMDI2LDcgQEAKIAlfX2xlMzIJCSp0bXAgPSAodm9pZCAqKSBza2ItPmRhdGE7CiAKIAkvKiBNZXNzYWdlVHlwZSwgTWVzc2FnZUxlbmd0aCAqLwotCWlmIChfX2NvbnN0YW50X2NwdV90b19sZTMyKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpCisJaWYgKGNwdV90b19sZTMyKFJFTU9URV9ORElTX1BBQ0tFVF9NU0cpCiAJCQkhPSBnZXRfdW5hbGlnbmVkKHRtcCsrKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJdG1wKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKaW5kZXggMzc4NzlhZi4uZjQ2YTYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYwpAQCAtODcsMTIgKzg3LDEyIEBACiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciBkZXZpY2VfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlVU0JfRFRfREVWSUNFX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCi0JLmJjZFVTQiA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDIwMCksCisJLmJjZFVTQiA9CQljcHVfdG9fbGUxNigweDAyMDApLAogCS8qIC5iRGV2aWNlQ2xhc3MgPSBmKHVzZV9hY20pICovCiAJLmJEZXZpY2VTdWJDbGFzcyA9CTAsCiAJLmJEZXZpY2VQcm90b2NvbCA9CTAsCiAJLyogLmJNYXhQYWNrZXRTaXplMCA9IGYoaGFyZHdhcmUpICovCi0JLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoR1NfVkVORE9SX0lEKSwKKwkuaWRWZW5kb3IgPQkJY3B1X3RvX2xlMTYoR1NfVkVORE9SX0lEKSwKIAkvKiAuaWRQcm9kdWN0ID0JZih1c2VfYWNtKSAqLwogCS8qIC5iY2REZXZpY2UgPSBmKGhhcmR3YXJlKSAqLwogCS8qIC5pTWFudWZhY3R1cmVyID0gRFlOQU1JQyAqLwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCXByX3dhcm5pbmcoImdzX2JpbmQ6IGNvbnRyb2xsZXIgJyVzJyBub3QgcmVjb2duaXplZFxuIiwKIAkJCWdhZGdldC0+bmFtZSk7CiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTE2KEdTX1ZFUlNJT05fTlVNIHwgMHgwMDk5KTsKKwkJCWNwdV90b19sZTE2KEdTX1ZFUlNJT05fTlVNIHwgMHgwMDk5KTsKIAl9CiAKIAlpZiAoZ2FkZ2V0X2lzX290ZyhjZGV2LT5nYWRnZXQpKSB7CkBAIC0yNTUsMTkgKzI1NSwxOSBAQAogCQlzZXJpYWxfY29uZmlnX2RyaXZlci5iQ29uZmlndXJhdGlvblZhbHVlID0gMjsKIAkJZGV2aWNlX2Rlc2MuYkRldmljZUNsYXNzID0gVVNCX0NMQVNTX0NPTU07CiAJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9Ci0JCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19DRENfUFJPRFVDVF9JRCk7CisJCQkJY3B1X3RvX2xlMTYoR1NfQ0RDX1BST0RVQ1RfSUQpOwogCX0gZWxzZSBpZiAodXNlX29iZXgpIHsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIubGFiZWwgPSAiQ0RDIE9CRVggY29uZmlnIjsKIAkJc2VyaWFsX2NvbmZpZ19kcml2ZXIuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9IDM7CiAJCWRldmljZV9kZXNjLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19DT01NOwogCQlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19DRENfT0JFWF9QUk9EVUNUX0lEKTsKKwkJCWNwdV90b19sZTE2KEdTX0NEQ19PQkVYX1BST0RVQ1RfSUQpOwogCX0gZWxzZSB7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmxhYmVsID0gIkdlbmVyaWMgU2VyaWFsIGNvbmZpZyI7CiAJCXNlcmlhbF9jb25maWdfZHJpdmVyLmJDb25maWd1cmF0aW9uVmFsdWUgPSAxOwogCQlkZXZpY2VfZGVzYy5iRGV2aWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUM7CiAJCWRldmljZV9kZXNjLmlkUHJvZHVjdCA9Ci0JCQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihHU19QUk9EVUNUX0lEKTsKKwkJCQljcHVfdG9fbGUxNihHU19QUk9EVUNUX0lEKTsKIAl9CiAJc3RyaW5nc19kZXZbU1RSSU5HX0RFU0NSSVBUSU9OX0lEWF0ucyA9IHNlcmlhbF9jb25maWdfZHJpdmVyLmxhYmVsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdV9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jCmluZGV4IDUzZDU5MjguLjBhNGQ5OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91X3NlcmlhbC5jCkBAIC0xMDkyLDcgKzEwOTIsNyBAQAogCWdzX3R0eV9kcml2ZXItPmluaXRfdGVybWlvcy5jX2lzcGVlZCA9IDk2MDA7CiAJZ3NfdHR5X2RyaXZlci0+aW5pdF90ZXJtaW9zLmNfb3NwZWVkID0gOTYwMDsKIAotCWNvZGluZy5kd0RURVJhdGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDk2MDApOworCWNvZGluZy5kd0RURVJhdGUgPSBjcHVfdG9fbGUzMig5NjAwKTsKIAljb2RpbmcuYkNoYXJGb3JtYXQgPSA4OwogCWNvZGluZy5iUGFyaXR5VHlwZSA9IFVTQl9DRENfTk9fUEFSSVRZOwogCWNvZGluZy5iRGF0YUJpdHMgPSBVU0JfQ0RDXzFfU1RPUF9CSVRTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKaW5kZXggMzYxZDk2NS4uMmQ3NzI0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCkBAIC0xMDIsMjIgKzEwMiwzMiBAQAogI2lmbmRlZglDT05GSUdfVVNCX1pFUk9fSE5QVEVTVAogI2RlZmluZSBEUklWRVJfVkVORE9SX05VTQkweDA1MjUJCS8qIE5ldENoaXAgKi8KICNkZWZpbmUgRFJJVkVSX1BST0RVQ1RfTlVNCTB4YTRhMAkJLyogTGludXgtVVNCICJHYWRnZXQgWmVybyIgKi8KKyNkZWZpbmUgREVGQVVMVF9BVVRPUkVTVU1FCTAKICNlbHNlCiAjZGVmaW5lIERSSVZFUl9WRU5ET1JfTlVNCTB4MWEwYQkJLyogT1RHIHRlc3QgZGV2aWNlIElEcyAqLwogI2RlZmluZSBEUklWRVJfUFJPRFVDVF9OVU0JMHhiYWRkCisjZGVmaW5lIERFRkFVTFRfQVVUT1JFU1VNRQk1CiAjZW5kaWYKIAorLyogSWYgdGhlIG9wdGlvbmFsICJhdXRvcmVzdW1lIiBtb2RlIGlzIGVuYWJsZWQsIGl0IHByb3ZpZGVzIGdvb2QKKyAqIGZ1bmN0aW9uYWwgY292ZXJhZ2UgZm9yIHRoZSAiVVNCQ1YiIHRlc3QgaGFybmVzcyBmcm9tIFVTQi1JRi4KKyAqIEl0J3MgYWx3YXlzIHNldCBpZiBPVEcgbW9kZSBpcyBlbmFibGVkLgorICovCit1bnNpZ25lZCBhdXRvcmVzdW1lID0gREVGQVVMVF9BVVRPUkVTVU1FOworbW9kdWxlX3BhcmFtKGF1dG9yZXN1bWUsIHVpbnQsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhhdXRvcmVzdW1lLCAiemVybywgb3Igc2Vjb25kcyBiZWZvcmUgcmVtb3RlIHdha2V1cCIpOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciBkZXZpY2VfZGVzYyA9IHsKIAkuYkxlbmd0aCA9CQlzaXplb2YgZGV2aWNlX2Rlc2MsCiAJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9ERVZJQ0UsCiAKLQkuYmNkVVNCID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYmNkVVNCID0JCWNwdV90b19sZTE2KDB4MDIwMCksCiAJLmJEZXZpY2VDbGFzcyA9CQlVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCiAKLQkuaWRWZW5kb3IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfVkVORE9SX05VTSksCi0JLmlkUHJvZHVjdCA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX05VTSksCisJLmlkVmVuZG9yID0JCWNwdV90b19sZTE2KERSSVZFUl9WRU5ET1JfTlVNKSwKKwkuaWRQcm9kdWN0ID0JCWNwdV90b19sZTE2KERSSVZFUl9QUk9EVUNUX05VTSksCiAJLmJOdW1Db25maWd1cmF0aW9ucyA9CTIsCiB9OwogCkBAIC0yMTIsNiArMjIyLDQ3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdAlhdXRvcmVzdW1lX3RpbWVyOworCitzdGF0aWMgdm9pZCB6ZXJvX2F1dG9yZXN1bWUodW5zaWduZWQgbG9uZyBfYykKK3sKKwlzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYJKmNkZXYgPSAodm9pZCAqKV9jOworCXN0cnVjdCB1c2JfZ2FkZ2V0CQkqZyA9IGNkZXYtPmdhZGdldDsKKworCS8qIHVuY29uZmlndXJlZCBkZXZpY2VzIGNhbid0IGlzc3VlIHdha2V1cHMgKi8KKwlpZiAoIWNkZXYtPmNvbmZpZykKKwkJcmV0dXJuOworCisJLyogTm9ybWFsbHkgdGhlIGhvc3Qgd291bGQgYmUgd29rZW4gdXAgZm9yIHNvbWV0aGluZworCSAqIG1vcmUgc2lnbmlmaWNhbnQgdGhhbiBqdXN0IGEgdGltZXIgZmlyaW5nOyBsaWtlbHkKKwkgKiBiZWNhdXNlIG9mIHNvbWUgZGlyZWN0IHVzZXIgcmVxdWVzdC4KKwkgKi8KKwlpZiAoZy0+c3BlZWQgIT0gVVNCX1NQRUVEX1VOS05PV04pIHsKKwkJaW50IHN0YXR1cyA9IHVzYl9nYWRnZXRfd2FrZXVwKGcpOworCQlJTkZPKGNkZXYsICIlcyAtLT4gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCX0KK30KKworc3RhdGljIHZvaWQgemVyb19zdXNwZW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3sKKwlpZiAoY2Rldi0+Z2FkZ2V0LT5zcGVlZCA9PSBVU0JfU1BFRURfVU5LTk9XTikKKwkJcmV0dXJuOworCisJaWYgKGF1dG9yZXN1bWUpIHsKKwkJbW9kX3RpbWVyKCZhdXRvcmVzdW1lX3RpbWVyLCBqaWZmaWVzICsgKEhaICogYXV0b3Jlc3VtZSkpOworCQlEQkcoY2RldiwgInN1c3BlbmQsIHdha2V1cCBpbiAlZCBzZWNvbmRzXG4iLCBhdXRvcmVzdW1lKTsKKwl9IGVsc2UKKwkJREJHKGNkZXYsICIlc1xuIiwgX19mdW5jX18pOworfQorCitzdGF0aWMgdm9pZCB6ZXJvX3Jlc3VtZShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJREJHKGNkZXYsICIlc1xuIiwgX19mdW5jX18pOworCWRlbF90aW1lcigmYXV0b3Jlc3VtZV90aW1lcik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIHN0YXRpYyBpbnQgX19pbml0IHplcm9fYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCiB7CiAJaW50CQkJZ2NudW07CkBAIC0yMzksMTcgKzI5MCwxOSBAQAogCXN0cmluZ3NfZGV2W1NUUklOR19TRVJJQUxfSURYXS5pZCA9IGlkOwogCWRldmljZV9kZXNjLmlTZXJpYWxOdW1iZXIgPSBpZDsKIAorCXNldHVwX3RpbWVyKCZhdXRvcmVzdW1lX3RpbWVyLCB6ZXJvX2F1dG9yZXN1bWUsICh1bnNpZ25lZCBsb25nKSBjZGV2KTsKKwogCS8qIFJlZ2lzdGVyIHByaW1hcnksIHRoZW4gc2Vjb25kYXJ5IGNvbmZpZ3VyYXRpb24uICBOb3RlIHRoYXQKIAkgKiBTSDMgb25seSBhbGxvd3Mgb25lIGNvbmZpZy4uLgogCSAqLwogCWlmIChsb29wZGVmYXVsdCkgewotCQlsb29wYmFja19hZGQoY2Rldik7CisJCWxvb3BiYWNrX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwogCQlpZiAoIWdhZGdldF9pc19zaChnYWRnZXQpKQotCQkJc291cmNlc2lua19hZGQoY2Rldik7CisJCQlzb3VyY2VzaW5rX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwogCX0gZWxzZSB7Ci0JCXNvdXJjZXNpbmtfYWRkKGNkZXYpOworCQlzb3VyY2VzaW5rX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwogCQlpZiAoIWdhZGdldF9pc19zaChnYWRnZXQpKQotCQkJbG9vcGJhY2tfYWRkKGNkZXYpOworCQkJbG9vcGJhY2tfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CiAJfQogCiAJZ2NudW0gPSB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyKGdhZGdldCk7CkBAIC0yNjUsNyArMzE4LDcgQEAKIAkJICovCiAJCXByX3dhcm5pbmcoIiVzOiBjb250cm9sbGVyICclcycgbm90IHJlY29nbml6ZWRcbiIsCiAJCQlsb25nbmFtZSwgZ2FkZ2V0LT5uYW1lKTsKLQkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gX19jb25zdGFudF9jcHVfdG9fbGUxNigweDk5OTkpOworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNigweDk5OTkpOwogCX0KIAogCkBAIC0yNzgsMTEgKzMzMSwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHplcm9fdW5iaW5kKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKK3sKKwlkZWxfdGltZXJfc3luYygmYXV0b3Jlc3VtZV90aW1lcik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kcml2ZXIgemVyb19kcml2ZXIgPSB7CiAJLm5hbWUJCT0gInplcm8iLAogCS5kZXYJCT0gJmRldmljZV9kZXNjLAogCS5zdHJpbmdzCT0gZGV2X3N0cmluZ3MsCiAJLmJpbmQJCT0gemVyb19iaW5kLAorCS51bmJpbmQJCT0gemVyb191bmJpbmQsCisJLnN1c3BlbmQJPSB6ZXJvX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB6ZXJvX3Jlc3VtZSwKIH07CiAKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIEJyb3duZWxsIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKaW5kZXggMmM2M2JmYi4uODQ1NDc5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwpAQCAtMjQsMTAgKzI0LDcgQEAKIAkgIFRoZSBFbmhhbmNlZCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIChFSENJKSBpcyBzdGFuZGFyZCBmb3IgVVNCIDIuMAogCSAgImhpZ2ggc3BlZWQiICg0ODAgTWJpdC9zZWMsIDYwIE1ieXRlL3NlYykgaG9zdCBjb250cm9sbGVyIGhhcmR3YXJlLgogCSAgSWYgeW91ciBVU0IgaG9zdCBjb250cm9sbGVyIHN1cHBvcnRzIFVTQiAyLjAsIHlvdSB3aWxsIGxpa2VseSB3YW50IHRvCi0JICBjb25maWd1cmUgdGhpcyBIb3N0IENvbnRyb2xsZXIgRHJpdmVyLiAgQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCAKLQkgIHRoZSBwcmltYXJ5IGltcGxlbWVudGF0aW9uIG9mIEVIQ0kgaXMgYSBjaGlwIGZyb20gTkVDLCB3aWRlbHkgYXZhaWxhYmxlCi0JICBpbiBhZGQtb24gUENJIGNhcmRzLCBidXQgaW1wbGVtZW50YXRpb25zIGFyZSBpbiB0aGUgd29ya3MgZnJvbSBvdGhlciAKLQkgIHZlbmRvcnMgaW5jbHVkaW5nIEludGVsIGFuZCBQaGlsaXBzLiAgTW90aGVyYm9hcmQgc3VwcG9ydCBpcyBhcHBlYXJpbmcuCisJICBjb25maWd1cmUgdGhpcyBIb3N0IENvbnRyb2xsZXIgRHJpdmVyLgogCiAJICBFSENJIGNvbnRyb2xsZXJzIGFyZSBwYWNrYWdlZCB3aXRoICJjb21wYW5pb24iIGhvc3QgY29udHJvbGxlcnMgKE9IQ0kKIAkgIG9yIFVIQ0kpIHRvIGhhbmRsZSBVU0IgMS4xIGRldmljZXMgY29ubmVjdGVkIHRvIHJvb3QgaHViIHBvcnRzLiAgUG9ydHMKQEAgLTEyMyw3ICsxMjAsNyBAQAogCiBjb25maWcgVVNCX0lTUDE3NjBfSENECiAJdHJpc3RhdGUgIklTUCAxNzYwIEhDRCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIEVYUEVSSU1FTlRBTCAmJiAoUENJIHx8IFBQQ19PRikKKwlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKIAktLS1oZWxwLS0tCiAJICBUaGUgSVNQMTc2MCBjaGlwIGlzIGEgVVNCIDIuMCBob3N0IGNvbnRyb2xsZXIuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCBlNTUxYmIzLi5mMjYxOGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC0xMTAsNiArMTEwLDQyIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyB2b2lkCit0aW1lcl9hY3Rpb24oc3RydWN0IGVoY2lfaGNkICplaGNpLCBlbnVtIGVoY2lfdGltZXJfYWN0aW9uIGFjdGlvbikKK3sKKwkvKiBEb24ndCBvdmVycmlkZSB0aW1lb3V0cyB3aGljaCBzaHJpbmsgb3IgKGxhdGVyKSBkaXNhYmxlCisJICogdGhlIGFzeW5jIHJpbmc7IGp1c3QgdGhlIEkvTyB3YXRjaGRvZy4gIE5vdGUgdGhhdCBpZiBhCisJICogU0hSSU5LIHdlcmUgcGVuZGluZywgT0ZGIHdvdWxkIG5ldmVyIGJlIHJlcXVlc3RlZC4KKwkgKi8KKwlpZiAodGltZXJfcGVuZGluZygmZWhjaS0+d2F0Y2hkb2cpCisJCQkmJiAoKEJJVChUSU1FUl9BU1lOQ19TSFJJTkspIHwgQklUKFRJTUVSX0FTWU5DX09GRikpCisJCQkJJiBlaGNpLT5hY3Rpb25zKSkKKwkJcmV0dXJuOworCisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGFjdGlvbiwgJmVoY2ktPmFjdGlvbnMpKSB7CisJCXVuc2lnbmVkIGxvbmcgdDsKKworCQlzd2l0Y2ggKGFjdGlvbikgeworCQljYXNlIFRJTUVSX0lPX1dBVENIRE9HOgorCQkJdCA9IEVIQ0lfSU9fSklGRklFUzsKKwkJCWJyZWFrOworCQljYXNlIFRJTUVSX0FTWU5DX09GRjoKKwkJCXQgPSBFSENJX0FTWU5DX0pJRkZJRVM7CisJCQlicmVhazsKKwkJLyogY2FzZSBUSU1FUl9BU1lOQ19TSFJJTks6ICovCisJCWRlZmF1bHQ6CisJCQkvKiBhZGQgYSBqaWZmaWUgc2luY2Ugd2Ugc3luY2ggYWdhaW5zdCB0aGUKKwkJCSAqIDggS0h6IHVmcmFtZSBjb3VudGVyLgorCQkJICovCisJCQl0ID0gRElWX1JPVU5EX1VQKEVIQ0lfU0hSSU5LX0ZSQU1FUyAqIEhaLCAxMDAwKSArIDE7CisJCQlicmVhazsKKwkJfQorCQltb2RfdGltZXIoJmVoY2ktPndhdGNoZG9nLCB0ICsgamlmZmllcyk7CisJfQorfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKgogICogaGFuZHNoYWtlIC0gc3BpbiByZWFkaW5nIGhjIHVudGlsIGhhbmRzaGFrZSBjb21wbGV0ZXMgb3IgZmFpbHMKICAqIEBwdHI6IGFkZHJlc3Mgb2YgaGMgcmVnaXN0ZXIgdG8gYmUgcmVhZApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKaW5kZXggZWNjOWI2Ni4uMTk3NmIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCkBAIC0zMzMsMTIgKzMzMyw0MCBAQAogCQl0b2tlbiA9IGhjMzJfdG9fY3B1KGVoY2ksIHF0ZC0+aHdfdG9rZW4pOwogCiAJCS8qIGFsd2F5cyBjbGVhbiB1cCBxdGRzIHRoZSBoYyBkZS1hY3RpdmF0ZWQgKi8KKyByZXRyeV94YWN0ZXJyOgogCQlpZiAoKHRva2VuICYgUVREX1NUU19BQ1RJVkUpID09IDApIHsKIAogCQkJLyogb24gU1RBTEwsIGVycm9yLCBhbmQgc2hvcnQgcmVhZHMgdGhpcyB1cmIgbXVzdAogCQkJICogY29tcGxldGUgYW5kIGFsbCBpdHMgcXRkcyBtdXN0IGJlIHJlY3ljbGVkLgogCQkJICovCiAJCQlpZiAoKHRva2VuICYgUVREX1NUU19IQUxUKSAhPSAwKSB7CisKKwkJCQkvKiByZXRyeSB0cmFuc2FjdGlvbiBlcnJvcnMgdW50aWwgd2UKKwkJCQkgKiByZWFjaCB0aGUgc29mdHdhcmUgeGFjdGVyciBsaW1pdAorCQkJCSAqLworCQkJCWlmICgodG9rZW4gJiBRVERfU1RTX1hBQ1QpICYmCisJCQkJCQlRVERfQ0VSUih0b2tlbikgPT0gMCAmJgorCQkJCQkJLS1xaC0+eGFjdGVycnMgPiAwICYmCisJCQkJCQkhdXJiLT51bmxpbmtlZCkgeworCQkJCQllaGNpX2RiZyhlaGNpLAorCSJkZXRlY3RlZCBYYWN0RXJyIGxlbiAlenUvJXp1IHJldHJ5ICVkXG4iLAorCXF0ZC0+bGVuZ3RoIC0gUVREX0xFTkdUSCh0b2tlbiksIHF0ZC0+bGVuZ3RoLAorCVFIX1hBQ1RFUlJfTUFYIC0gcWgtPnhhY3RlcnJzKTsKKworCQkJCQkvKiByZXNldCB0aGUgdG9rZW4gaW4gdGhlIHF0ZCBhbmQgdGhlCisJCQkJCSAqIHFoIG92ZXJsYXkgKHdoaWNoIHN0aWxsIGNvbnRhaW5zCisJCQkJCSAqIHRoZSBxdGQpIHNvIHRoYXQgd2UgcGljayB1cCBmcm9tCisJCQkJCSAqIHdoZXJlIHdlIGxlZnQgb2ZmCisJCQkJCSAqLworCQkJCQl0b2tlbiAmPSB+UVREX1NUU19IQUxUOworCQkJCQl0b2tlbiB8PSBRVERfU1RTX0FDVElWRSB8CisJCQkJCQkJKEVIQ0lfVFVORV9DRVJSIDw8IDEwKTsKKwkJCQkJcXRkLT5od190b2tlbiA9IGNwdV90b19oYzMyKGVoY2ksCisJCQkJCQkJdG9rZW4pOworCQkJCQl3bWIoKTsKKwkJCQkJcWgtPmh3X3Rva2VuID0gY3B1X3RvX2hjMzIoZWhjaSwgdG9rZW4pOworCQkJCQlnb3RvIHJldHJ5X3hhY3RlcnI7CisJCQkJfQogCQkJCXN0b3BwZWQgPSAxOwogCiAJCQkvKiBtYWdpYyBkdW1teSBmb3Igc29tZSBzaG9ydCByZWFkczsgcWggd29uJ3QgYWR2YW5jZS4KQEAgLTQyMSw2ICs0NDksOSBAQAogCQkvKiByZW1vdmUgcXRkOyBpdCdzIHJlY3ljbGVkIGFmdGVyIHBvc3NpYmxlIHVyYiBjb21wbGV0aW9uICovCiAJCWxpc3RfZGVsICgmcXRkLT5xdGRfbGlzdCk7CiAJCWxhc3QgPSBxdGQ7CisKKwkJLyogcmVpbml0IHRoZSB4YWN0ZXJyIGNvdW50ZXIgZm9yIHRoZSBuZXh0IHF0ZCAqLworCQlxaC0+eGFjdGVycnMgPSBRSF9YQUNURVJSX01BWDsKIAl9CiAKIAkvKiBsYXN0IHVyYidzIGNvbXBsZXRpb24gbWlnaHQgc3RpbGwgbmVlZCBjYWxsaW5nICovCkBAIC04NjIsNiArODkzLDcgQEAKIAloZWFkLT5xaF9uZXh0LnFoID0gcWg7CiAJaGVhZC0+aHdfbmV4dCA9IGRtYTsKIAorCXFoLT54YWN0ZXJycyA9IFFIX1hBQ1RFUlJfTUFYOwogCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX0xJTktFRDsKIAkvKiBxdGQgY29tcGxldGlvbnMgcmVwb3J0ZWQgbGF0ZXIgYnkgaW50ZXJydXB0ICovCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCmluZGV4IDFkMGI0OWUuLmFkYTVkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jCkBAIC01NjMsNyArNTYzLDcgQEAKIAkvLyAgIGFuZCB0aGlzIHFoIGlzIGFjdGl2ZSBpbiB0aGUgY3VycmVudCB1ZnJhbWUKIAkvLyAgIChhbmQgb3ZlcmxheSB0b2tlbiBTcGxpdFhzdGF0ZSBpcyBmYWxzZT8pCiAJLy8gVEhFTgotCS8vICAgcWgtPmh3X2luZm8xIHw9IF9fY29uc3RhbnRfY3B1X3RvX2hjMzIoMSA8PCA3IC8qICJpZ25vcmUiICovKTsKKwkvLyAgIHFoLT5od19pbmZvMSB8PSBjcHVfdG9faGMzMigxIDw8IDcgLyogImlnbm9yZSIgKi8pOwogCiAJLyogaGlnaCBiYW5kd2lkdGgsIG9yIG90aGVyd2lzZSBwYXJ0IG9mIGV2ZXJ5IG1pY3JvZnJhbWUgKi8KIAlpZiAoKHBlcmlvZCA9IHFoLT5wZXJpb2QpID09IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IDI2MmIwMGMuLjZjZmYxOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC0xOTAsNDAgKzE5MCw2IEBACiAJY2xlYXJfYml0IChhY3Rpb24sICZlaGNpLT5hY3Rpb25zKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi10aW1lcl9hY3Rpb24gKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgZW51bSBlaGNpX3RpbWVyX2FjdGlvbiBhY3Rpb24pCi17Ci0JLyogRG9uJ3Qgb3ZlcnJpZGUgdGltZW91dHMgd2hpY2ggc2hyaW5rIG9yIChsYXRlcikgZGlzYWJsZQotCSAqIHRoZSBhc3luYyByaW5nOyBqdXN0IHRoZSBJL08gd2F0Y2hkb2cuICBOb3RlIHRoYXQgaWYgYQotCSAqIFNIUklOSyB3ZXJlIHBlbmRpbmcsIE9GRiB3b3VsZCBuZXZlciBiZSByZXF1ZXN0ZWQuCi0JICovCi0JaWYgKHRpbWVyX3BlbmRpbmcoJmVoY2ktPndhdGNoZG9nKQotCQkJJiYgKChCSVQoVElNRVJfQVNZTkNfU0hSSU5LKSB8IEJJVChUSU1FUl9BU1lOQ19PRkYpKQotCQkJCSYgZWhjaS0+YWN0aW9ucykpCi0JCXJldHVybjsKLQotCWlmICghdGVzdF9hbmRfc2V0X2JpdCAoYWN0aW9uLCAmZWhjaS0+YWN0aW9ucykpIHsKLQkJdW5zaWduZWQgbG9uZyB0OwotCi0JCXN3aXRjaCAoYWN0aW9uKSB7Ci0JCWNhc2UgVElNRVJfSU9fV0FUQ0hET0c6Ci0JCQl0ID0gRUhDSV9JT19KSUZGSUVTOwotCQkJYnJlYWs7Ci0JCWNhc2UgVElNRVJfQVNZTkNfT0ZGOgotCQkJdCA9IEVIQ0lfQVNZTkNfSklGRklFUzsKLQkJCWJyZWFrOwotCQkvLyBjYXNlIFRJTUVSX0FTWU5DX1NIUklOSzoKLQkJZGVmYXVsdDoKLQkJCS8qIGFkZCBhIGppZmZpZSBzaW5jZSB3ZSBzeW5jaCBhZ2FpbnN0IHRoZQotCQkJICogOCBLSHogdWZyYW1lIGNvdW50ZXIuCi0JCQkgKi8KLQkJCXQgPSBESVZfUk9VTkRfVVAoRUhDSV9TSFJJTktfRlJBTUVTICogSFosIDEwMDApICsgMTsKLQkJCWJyZWFrOwotCQl9Ci0JCW1vZF90aW1lcigmZWhjaS0+d2F0Y2hkb2csIHQgKyBqaWZmaWVzKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGZyZWVfY2FjaGVkX2l0ZF9saXN0KHN0cnVjdCBlaGNpX2hjZCAqZWhjaSk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0yODcsNyArMjUzLDcgQEAKIAogLyoKICAqIE5vdyB0aGUgZm9sbG93aW5nIGRlZmluZXMgYXJlIG5vdCBjb252ZXJ0ZWQgdXNpbmcgdGhlCi0gKiBfX2NvbnN0YW50X2NwdV90b19sZTMyKCkgbWFjcm8gYW55bW9yZSwgc2luY2Ugd2UgaGF2ZSB0byBzdXBwb3J0CisgKiBjcHVfdG9fbGUzMigpIG1hY3JvIGFueW1vcmUsIHNpbmNlIHdlIGhhdmUgdG8gc3VwcG9ydAogICogImR5bmFtaWMiIHN3aXRjaGluZyBiZXR3ZWVuIGJlIGFuZCBsZSBzdXBwb3J0LCBzbyB0aGF0IHRoZSBkcml2ZXIKICAqIGNhbiBiZSB1c2VkIG9uIG9uZSBzeXN0ZW0gd2l0aCBTb0MgRUhDSSBjb250cm9sbGVyIHVzaW5nIGJpZy1lbmRpYW4KICAqIGRlc2NyaXB0b3JzIGFzIHdlbGwgYXMgYSBub3JtYWwgbGl0dGxlLWVuZGlhbiBQQ0kgRUhDSSBjb250cm9sbGVyLgpAQCAtMzc2LDYgKzM0Miw5IEBACiAjZGVmaW5lCVFIX1NUQVRFX1VOTElOS19XQUlUCTQJCS8qIExJTktFRCBhbmQgb24gcmVjbGFpbSBxICovCiAjZGVmaW5lCVFIX1NUQVRFX0NPTVBMRVRJTkcJNQkJLyogZG9uJ3QgdG91Y2ggdG9rZW4uSEFMVCAqLwogCisJdTgJCQl4YWN0ZXJyczsJLyogWGFjdEVyciByZXRyeSBjb3VudGVyICovCisjZGVmaW5lCVFIX1hBQ1RFUlJfTUFYCQkzMgkJLyogWGFjdEVyciByZXRyeSBsaW1pdCAqLworCiAJLyogcGVyaW9kaWMgc2NoZWR1bGUgaW5mbyAqLwogCXU4CQkJdXNlY3M7CQkvKiBpbnRyIGJhbmR3aWR0aCAqLwogCXU4CQkJZ2FwX3VmOwkJLyogdWZyYW1lcyBzcGxpdC9jc3BsaXQgZ2FwICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktZGJnLmMKaW5kZXggMzRlMTRlZC4uZWE4YTQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9maGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1kYmcuYwpAQCAtMTA4LDcgKzEwOCw3IEBACiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gZmhjaV90b19oY2QoZmhjaSktPnNlbGYuY29udHJvbGxlcjsKIAotCWZoY2ktPmRmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGRldi0+YnVzX2lkLCBOVUxMKTsKKwlmaGNpLT5kZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZShkZXYpLCBOVUxMKTsKIAlpZiAoIWZoY2ktPmRmc19yb290KSB7CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYwppbmRleCBiYTYyMmNjLi4wOTUxODE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jCkBAIC01ODMsNyArNTgzLDcgQEAKIAlpZiAoc3Byb3AgJiYgc3RyY21wKHNwcm9wLCAiaG9zdCIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZmaGNpX2RyaXZlciwgZGV2LCBkZXYtPmJ1c19pZCk7CisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmZoY2lfZHJpdmVyLCBkZXYsIGRldl9uYW1lKGRldikpOwogCWlmICghaGNkKSB7CiAJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IGNyZWF0ZSBoY2RcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTY1MCw3ICs2NTAsNyBAQAogCQkJfQogCQl9CiAKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIGRldi0+YnVzX2lkKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sIGRldl9uYW1lKGRldikpOwogCQlpZiAocmV0KSB7CiAJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IGdwaW8gJWQiLCBpKTsKIAkJCWdvdG8gZXJyX2dwaW9zOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaHdhLWhjLmMKaW5kZXggODU4MjIzNi4uY2JmMzBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9od2EtaGMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2h3YS1oYy5jCkBAIC00NjQsOCArNDY0LDcgQEAKIAkJCXBvcnRfaWR4IDw8IDggfCBpZmFjZV9ubywKIAkJCWtleWQsIGtleWRfbGVuLCAxMDAwIC8qIEZJWE1FOiBhcmJpdHJhcnkgKi8pOwogCi0JbWVtc2V0KGtleWQsIDAsIHNpemVvZigqa2V5ZCkpOwkvKiBjbGVhciBrZXlzIGV0Yy4gKi8KLQlrZnJlZShrZXlkKTsKKwlremZyZWUoa2V5ZCk7IC8qIGNsZWFyIGtleXMgZXRjLiAqLwogCXJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwppbmRleCA0ZGRhMzFiLi5hMmIzMDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCkBAIC03NzIsNyArNzcyLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBQSVBFX0lOVEVSUlVQVDoKIAkJdXJiLT5pbnRlcnZhbCA9IGVwLT5wZXJpb2Q7Ci0JCWVwLT5sZW5ndGggPSBtaW4oKGludCllcC0+bWF4cGFja2V0LAorCQllcC0+bGVuZ3RoID0gbWluX3QodTMyLCBlcC0+bWF4cGFja2V0LAogCQkJCSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCiAJCS8qIHVyYiBzdWJtaXR0ZWQgZm9yIGFscmVhZHkgZXhpc3RpbmcgZW5kcG9pbnQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKaW5kZXggYWEyMTFiYS4uMTJkYjk2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKQEAgLTU2Myw3ICs1NjMsNyBAQAogKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3B0ZChzdHJ1Y3QgcHRkICpwdGQpCiB7Ci0JcHJpbnRrKCJ0ZDogJXggJWQlYyVkICVkLCVkLCVkICAleCAleCV4JXhcbiIsCisJcHJpbnRrKEtFUk5fV0FSTklORyAidGQ6ICV4ICVkJWMlZCAlZCwlZCwlZCAgJXggJXgleCV4XG4iLAogCSAgICAgICBQVERfR0VUX0NDKHB0ZCksIFBURF9HRVRfRkEocHRkKSwKIAkgICAgICAgUFREX0RJUl9TVFIocHRkKSwgUFREX0dFVF9FUChwdGQpLAogCSAgICAgICBQVERfR0VUX0NPVU5UKHB0ZCksIFBURF9HRVRfTEVOKHB0ZCksIFBURF9HRVRfTVBTKHB0ZCksCkBAIC01NzYsNyArNTc2LDcgQEAKIAlpbnQgazsKIAogCWlmIChQVERfR0VUX0RJUihwdGQpICE9IFBURF9ESVJfSU4gJiYgUFREX0dFVF9MRU4ocHRkKSkgewotCQlwcmludGsoIi0+ICIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICItPiAiKTsKIAkJZm9yIChrID0gMDsgayA8IFBURF9HRVRfTEVOKHB0ZCk7ICsraykKIAkJCXByaW50aygiJTAyeCAiLCAoKHU4ICopIGJ1Zilba10pOwogCQlwcmludGsoIlxuIik7CkBAIC01ODgsMTMgKzU4OCwxMyBAQAogCWludCBrOwogCiAJaWYgKFBURF9HRVRfRElSKHB0ZCkgPT0gUFREX0RJUl9JTiAmJiBQVERfR0VUX0NPVU5UKHB0ZCkpIHsKLQkJcHJpbnRrKCI8LSAiKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiPC0gIik7CiAJCWZvciAoayA9IDA7IGsgPCBQVERfR0VUX0NPVU5UKHB0ZCk7ICsraykKIAkJCXByaW50aygiJTAyeCAiLCAoKHU4ICopIGJ1Zilba10pOwogCQlwcmludGsoIlxuIik7CiAJfQogCWlmIChQVERfR0VUX0xBU1QocHRkKSkKLQkJcHJpbnRrKCItXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiLVxuIik7CiB9CiAKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKaW5kZXggYjg5OWYxYS4uY2QwN2VhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAKIAlpZiAodXJiLT5kZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKSB7CiAJCS8qIHNwbGl0ICovCi0JCXB0ZC0+ZHc1ID0gX19jb25zdGFudF9jcHVfdG9fbGUzMigweDFjKTsKKwkJcHRkLT5kdzUgPSBjcHVfdG9fbGUzMigweDFjKTsKIAogCQlpZiAocWgtPnBlcmlvZCA+PSAzMikKIAkJCXBlcmlvZCA9IHFoLT5wZXJpb2QgLyAyOwpAQCAtODE5LDYgKzgxOSwxMyBAQAogCXUzMiBhdGxfcmVncywgcGF5bG9hZDsKIAl1MzIgYnVmZnN0YXR1czsKIAorCS8qCisJICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBlbnF1ZXVlCisJICogYSBmb2xsb3ctdXAgcGFja2V0LCB0aGUgU0tJUCByZWdpc3RlciBnZXRzIHdyaXR0ZW4gYW5kIHJlYWQgYmFjaworCSAqIGFsbW9zdCBpbW1lZGlhdGVseS4gV2l0aCBJU1AxNzYxLCB0aGlzIHJlZ2lzdGVyIHJlcXVpcmVzIGEgZGVsYXkgb2YKKwkgKiAxOTVucyBiZXR3ZWVuIGEgd3JpdGUgYW5kIHN1YnNlcXVlbnQgcmVhZCAoc2VlIHNlY3Rpb24gMTUuMS4xLjMpLgorCSAqLworCW5kZWxheSgxOTUpOwogCXNraXBfbWFwID0gaXNwMTc2MF9yZWFkbChoY2QtPnJlZ3MgKyBIQ19BVExfUFREX1NLSVBNQVBfUkVHKTsKIAogCUJVR19PTighc2tpcF9tYXApOwpAQCAtODUzLDYgKzg2MCwxMyBAQAogCXUzMiBpbnRfcmVncywgcGF5bG9hZDsKIAl1MzIgYnVmZnN0YXR1czsKIAorCS8qCisJICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBlbnF1ZXVlCisJICogYSBmb2xsb3ctdXAgcGFja2V0LCB0aGUgU0tJUCByZWdpc3RlciBnZXRzIHdyaXR0ZW4gYW5kIHJlYWQgYmFjaworCSAqIGFsbW9zdCBpbW1lZGlhdGVseS4gV2l0aCBJU1AxNzYxLCB0aGlzIHJlZ2lzdGVyIHJlcXVpcmVzIGEgZGVsYXkgb2YKKwkgKiAxOTVucyBiZXR3ZWVuIGEgd3JpdGUgYW5kIHN1YnNlcXVlbnQgcmVhZCAoc2VlIHNlY3Rpb24gMTUuMS4xLjMpLgorCSAqLworCW5kZWxheSgxOTUpOwogCXNraXBfbWFwID0gaXNwMTc2MF9yZWFkbChoY2QtPnJlZ3MgKyBIQ19JTlRfUFREX1NLSVBNQVBfUkVHKTsKIAogCUJVR19PTighc2tpcF9tYXApOwpAQCAtMTA1NCw3ICsxMDY4LDcgQEAKIAkJCXByaXZfd3JpdGVfY29weShwcml2LCAodTMyICopJnB0ZCwgdXNiX2hjZC0+cmVncyArCiAJCQkJCWF0bF9yZWdzLCBzaXplb2YocHRkKSk7CiAKLQkJCXB0ZC5kdzAgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihQVERfVkFMSUQpOworCQkJcHRkLmR3MCB8PSBjcHVfdG9fbGUzMihQVERfVkFMSUQpOwogCQkJcHJpdl93cml0ZV9jb3B5KHByaXYsICh1MzIgKikmcHRkLCB1c2JfaGNkLT5yZWdzICsKIAkJCQkJYXRsX3JlZ3MsIHNpemVvZihwdGQpKTsKIApAQCAtMjIzNSw5ICsyMjQ5LDEwIEBACiAJa21lbV9jYWNoZV9kZXN0cm95KHFoX2NhY2hlcCk7CiB9CiAKLXN0cnVjdCB1c2JfaGNkICppc3AxNzYwX3JlZ2lzdGVyKHU2NCByZXNfc3RhcnQsIHU2NCByZXNfbGVuLCBpbnQgaXJxLAotCQl1NjQgaXJxZmxhZ3MsIHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVzbmFtZSwKLQkJdW5zaWduZWQgaW50IGRldmZsYWdzKQorc3RydWN0IHVzYl9oY2QgKmlzcDE3NjBfcmVnaXN0ZXIocGh5c19hZGRyX3QgcmVzX3N0YXJ0LCByZXNvdXJjZV9zaXplX3QgcmVzX2xlbiwKKwkJCQkgaW50IGlycSwgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKKwkJCQkgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNuYW1lLAorCQkJCSB1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MpCiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAlzdHJ1Y3QgaXNwMTc2MF9oY2QgKnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmggYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmgKaW5kZXggYTlkYWVhNS4uNDYyZjQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuaApAQCAtMiw5ICsyLDEwIEBACiAjZGVmaW5lIF9JU1AxNzYwX0hDRF9IXwogCiAvKiBleHBvcnRzIGZvciBpZiAqLwotc3RydWN0IHVzYl9oY2QgKmlzcDE3NjBfcmVnaXN0ZXIodTY0IHJlc19zdGFydCwgdTY0IHJlc19sZW4sIGludCBpcnEsCi0JCXU2NCBpcnFmbGFncywgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNuYW1lLAotCQl1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MpOworc3RydWN0IHVzYl9oY2QgKmlzcDE3NjBfcmVnaXN0ZXIocGh5c19hZGRyX3QgcmVzX3N0YXJ0LCByZXNvdXJjZV9zaXplX3QgcmVzX2xlbiwKKwkJCQkgaW50IGlycSwgdW5zaWduZWQgbG9uZyBpcnFmbGFncywKKwkJCQkgc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpidXNuYW1lLAorCQkJCSB1bnNpZ25lZCBpbnQgZGV2ZmxhZ3MpOwogaW50IGluaXRfa21lbV9vbmNlKHZvaWQpOwogdm9pZCBkZWluaXRfa21lbV9jYWNoZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWlmLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYwppbmRleCA0Y2Y3Y2E0Li4zZmEzYTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYwpAQCAtMTAsNiArMTAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgIi4uL2NvcmUvaGNkLmgiCiAjaW5jbHVkZSAiaXNwMTc2MC1oY2QuaCIKQEAgLTMwMCwzOSArMzAxLDEwMSBAQAogfTsKICNlbmRpZgogCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpc3AxNzYwX3BsYXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCXN0cnVjdCByZXNvdXJjZSAqbWVtX3JlczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmlycV9yZXM7CisJcmVzb3VyY2Vfc2l6ZV90IG1lbV9zaXplOworCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MgPSBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQ7CisKKwltZW1fcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbV9yZXMpIHsKKwkJcHJfd2FybmluZygiaXNwMTc2MDogTWVtb3J5IHJlc291cmNlIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisJbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKG1lbV9yZXMpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKG1lbV9yZXMtPnN0YXJ0LCBtZW1fc2l6ZSwgImlzcDE3NjAiKSkgeworCQlwcl93YXJuaW5nKCJpc3AxNzYwOiBDYW5ub3QgcmVzZXJ2ZSB0aGUgbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpcnFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAoIWlycV9yZXMpIHsKKwkJcHJfd2FybmluZygiaXNwMTc2MDogSVJRIHJlc291cmNlIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaXJxZmxhZ3MgfD0gaXJxX3Jlcy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSzsKKworCWhjZCA9IGlzcDE3NjBfcmVnaXN0ZXIobWVtX3Jlcy0+c3RhcnQsIG1lbV9zaXplLCBpcnFfcmVzLT5zdGFydCwKKwkJCSAgICAgICBpcnFmbGFncywgJnBkZXYtPmRldiwgZGV2X25hbWUoJnBkZXYtPmRldiksIDApOworCWlmIChJU19FUlIoaGNkKSkgeworCQlwcl93YXJuaW5nKCJpc3AxNzYwOiBGYWlsZWQgdG8gcmVnaXN0ZXIgdGhlIEhDRCBkZXZpY2VcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcHJfaW5mbygiSVNQMTc2MCBVU0IgZGV2aWNlIGluaXRpYWxpc2VkXG4iKTsKKwlyZXR1cm4gcmV0OworCitjbGVhbnVwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgbWVtX3NpemUpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGlzcDE3NjBfcGxhdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbV9yZXM7CisJcmVzb3VyY2Vfc2l6ZV90IG1lbV9zaXplOworCisJbWVtX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJbWVtX3NpemUgPSByZXNvdXJjZV9zaXplKG1lbV9yZXMpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW1fcmVzLT5zdGFydCwgbWVtX3NpemUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlzcDE3NjBfcGxhdF9kcml2ZXIgPSB7CisJLnByb2JlCT0gaXNwMTc2MF9wbGF0X3Byb2JlLAorCS5yZW1vdmUJPSBpc3AxNzYwX3BsYXRfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gImlzcDE3NjAiLAorCX0sCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBpc3AxNzYwX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0OworCWludCByZXQsIGFueV9yZXQgPSAtRU5PREVWOwogCiAJaW5pdF9rbWVtX29uY2UoKTsKIAorCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaXNwMTc2MF9wbGF0X2RyaXZlcik7CisJaWYgKCFyZXQpCisJCWFueV9yZXQgPSAwOwogI2lmZGVmIENPTkZJR19QUENfT0YKIAlyZXQgPSBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmlzcDE3NjBfb2ZfZHJpdmVyKTsKLQlpZiAocmV0KSB7Ci0JCWRlaW5pdF9rbWVtX2NhY2hlKCk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWlmICghcmV0KQorCQlhbnlfcmV0ID0gMDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19QQ0kKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpc3AxNzYxX3BjaV9kcml2ZXIpOwotCWlmIChyZXQpCi0JCWdvdG8gdW5yZWdfb2Y7CisJaWYgKCFyZXQpCisJCWFueV9yZXQgPSAwOwogI2VuZGlmCi0JcmV0dXJuIHJldDsKIAotI2lmZGVmIENPTkZJR19QQ0kKLXVucmVnX29mOgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BQQ19PRgotCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZpc3AxNzYwX29mX2RyaXZlcik7Ci0jZW5kaWYKLQlkZWluaXRfa21lbV9jYWNoZSgpOwotCXJldHVybiByZXQ7CisJaWYgKGFueV9yZXQpCisJCWRlaW5pdF9rbWVtX2NhY2hlKCk7CisJcmV0dXJuIGFueV9yZXQ7CiB9CiBtb2R1bGVfaW5pdChpc3AxNzYwX2luaXQpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXNwMTc2MF9leGl0KHZvaWQpCiB7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmlzcDE3NjBfcGxhdF9kcml2ZXIpOwogI2lmZGVmIENPTkZJR19QUENfT0YKIAlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmaXNwMTc2MF9vZl9kcml2ZXIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMKaW5kZXggZmIzMDU1Zi4uN2NmNzRmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWVwOTN4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1lcDkzeHguYwpAQCAtMjgsOCArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotCiBzdGF0aWMgc3RydWN0IGNsayAqdXNiX2hvc3RfY2xvY2s7CiAKIHN0YXRpYyB2b2lkIGVwOTN4eF9zdGFydF9oYyhzdHJ1Y3QgZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggNWNmNWYxZS4uMjVkYjcwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtOTk3LDcgKzk5Nyw3IEBACiAjZGVmaW5lIFNBMTExMV9EUklWRVIJCW9oY2lfaGNkX3NhMTExMV9kcml2ZXIKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfUzNDMjQxMAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfUzNDMjQxMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9TM0M2NFhYKQogI2luY2x1ZGUgIm9oY2ktczNjMjQxMC5jIgogI2RlZmluZSBQTEFURk9STV9EUklWRVIJCW9oY2lfaGNkX3MzYzI0MTBfZHJpdmVyCiAjZW5kaWYKQEAgLTEwNDksNyArMTA0OSw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3Nzg2KQogI2luY2x1ZGUgIm9oY2ktc2guYyIKICNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQlvaGNpX2hjZF9zaF9kcml2ZXIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKaW5kZXggZjQ2YWY3YS4uYTY4YWYyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCkBAIC0yMSw5ICsyMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3VzYi1jb250cm9sLmg+CisjaW5jbHVkZSA8cGxhdC91c2ItY29udHJvbC5oPgogCiAjZGVmaW5lIHZhbGlkX3BvcnQoaWR4KSAoKGlkeCkgPT0gMSB8fCAoaWR4KSA9PSAyKQogCkBAIC0zNzIsNyArMzcwLDcgQEAKIAogCXVzYl9jbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgInVzYi1idXMtaG9zdCIpOwogCWlmIChJU19FUlIodXNiX2NsaykpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgZ2V0IHVzYi1ob3N0IGNsb2NrXG4iKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgZ2V0IHVzYi1idXMtaG9zdCBjbG9ja1xuIik7CiAJCXJldHZhbCA9IC1FTk9FTlQ7CiAJCWdvdG8gZXJyX2NsazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC1oY2QuYwppbmRleCA3NTU0OGY3Li41YWM0ODllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAtaGNkLmMKQEAgLTg0NSwxNCArODQ1LDE0IEBACiAJCWlzX291dCA9ICEocXRkLT5od190b2tlbiAmIGNwdV90b19sZTMyKDEgPDwgOCkpOwogCQllcG51bSA9IChsZTMyX3RvX2NwdXAoJnFoLT5od19pbmZvMSkgPj4gOCkgJiAweDBmOwogCQlpZiAodW5saWtlbHkoIXVzYl9nZXR0b2dnbGUocWgtPmRldiwgZXBudW0sIGlzX291dCkpKSB7Ci0JCQlxaC0+aHdfdG9rZW4gJj0gfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUVREX1RPR0dMRSk7CisJCQlxaC0+aHdfdG9rZW4gJj0gfmNwdV90b19sZTMyKFFURF9UT0dHTEUpOwogCQkJdXNiX3NldHRvZ2dsZShxaC0+ZGV2LCBlcG51bSwgaXNfb3V0LCAxKTsKIAkJfQogCX0KIAogCS8qIEhDIG11c3Qgc2VlIGxhdGVzdCBxdGQgYW5kIHFoIGRhdGEgYmVmb3JlIHdlIGNsZWFyIEFDVElWRStIQUxUICovCiAJd21iKCk7Ci0JcWgtPmh3X3Rva2VuICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUVREX1RPR0dMRSB8IFFURF9TVFNfUElORyk7CisJcWgtPmh3X3Rva2VuICY9IGNwdV90b19sZTMyKFFURF9UT0dHTEUgfCBRVERfU1RTX1BJTkcpOwogfQogCiAvKiBJZiBpdCB3ZXJlbid0IGZvciBhIGNvbW1vbiBzaWxpY29uIHF1aXJrICh3cml0aW5nIHRoZSBkdW1teSBpbnRvIHRoZSBxaApAQCAtOTM3LDcgKzkzNyw3IEBACiAJCXN0cnVjdCBlaGNpX3FoCSpxaCA9IChzdHJ1Y3QgZWhjaV9xaCAqKSB1cmItPmhjcHJpdjsKIAogCQkvKiBTLW1hc2sgaW4gYSBRSCBtZWFucyBpdCdzIGFuIGludGVycnVwdCB1cmIgKi8KLQkJaWYgKChxaC0+aHdfaW5mbzIgJiBfX2NvbnN0YW50X2NwdV90b19sZTMyKFFIX1NNQVNLKSkgIT0gMCkgeworCQlpZiAoKHFoLT5od19pbmZvMiAmIGNwdV90b19sZTMyKFFIX1NNQVNLKSkgIT0gMCkgewogCiAJCQkvKiAuLi4gdXBkYXRlIGhjLXdpZGUgcGVyaW9kaWMgc3RhdHMgKGZvciB1c2JmcykgKi8KIAkJCW94dV90b19oY2Qob3h1KS0+c2VsZi5iYW5kd2lkdGhfaW50X3JlcXMtLTsKQEAgLTk4MSw3ICs5ODEsNyBAQAogc3RhdGljIHZvaWQgaW50cl9kZXNjaGVkdWxlKHN0cnVjdCBveHVfaGNkICpveHUsIHN0cnVjdCBlaGNpX3FoICpxaCk7CiBzdGF0aWMgaW50IHFoX3NjaGVkdWxlKHN0cnVjdCBveHVfaGNkICpveHUsIHN0cnVjdCBlaGNpX3FoICpxaCk7CiAKLSNkZWZpbmUgSEFMVF9CSVQgX19jb25zdGFudF9jcHVfdG9fbGUzMihRVERfU1RTX0hBTFQpCisjZGVmaW5lIEhBTFRfQklUIGNwdV90b19sZTMyKFFURF9TVFNfSEFMVCkKIAogLyogUHJvY2VzcyBhbmQgZnJlZSBjb21wbGV0ZWQgcXRkcyBmb3IgYSBxaCwgcmV0dXJuaW5nIFVSQnMgdG8gZHJpdmVycy4KICAqIENoYXNlcyB1cCB0byBxaC0+aHdfY3VycmVudC4gIFJldHVybnMgbnVtYmVyIG9mIGNvbXBsZXRpb25zIGNhbGxlZCwKQEAgLTExNjAsNyArMTE2MCw3IEBACiAJCQkvKiBzaG91bGQgYmUgcmFyZSBmb3IgcGVyaW9kaWMgdHJhbnNmZXJzLAogCQkJICogZXhjZXB0IG1heWJlIGhpZ2ggYmFuZHdpZHRoIC4uLgogCQkJICovCi0JCQlpZiAoKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUUhfU01BU0spCisJCQlpZiAoKGNwdV90b19sZTMyKFFIX1NNQVNLKQogCQkJCQkmIHFoLT5od19pbmZvMikgIT0gMCkgewogCQkJCWludHJfZGVzY2hlZHVsZShveHUsIHFoKTsKIAkJCQkodm9pZCkgcWhfc2NoZWR1bGUob3h1LCBxaCk7CkBAIC0xMzUwLDcgKzEzNTAsNyBAQAogCX0KIAogCS8qIGJ5IGRlZmF1bHQsIGVuYWJsZSBpbnRlcnJ1cHQgb24gdXJiIGNvbXBsZXRpb24gKi8KLQkJcXRkLT5od190b2tlbiB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFFURF9JT0MpOworCQlxdGQtPmh3X3Rva2VuIHw9IGNwdV90b19sZTMyKFFURF9JT0MpOwogCXJldHVybiBoZWFkOwogCiBjbGVhbnVwOgpAQCAtMTUzOSw3ICsxNTM5LDcgQEAKIAkvKiBxdGQgY29tcGxldGlvbnMgcmVwb3J0ZWQgbGF0ZXIgYnkgaW50ZXJydXB0ICovCiB9CiAKLSNkZWZpbmUJUUhfQUREUl9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHg3ZikKKyNkZWZpbmUJUUhfQUREUl9NQVNLCWNwdV90b19sZTMyKDB4N2YpCiAKIC8qCiAgKiBGb3IgY29udHJvbC9idWxrL2ludGVycnVwdCwgcmV0dXJuIFFIIHdpdGggdGhlc2UgVERzIGFwcGVuZGVkLgpAQCAtMjAxMiw3ICsyMDEyLDcgQEAKIAkgKiAgIGFuZCB0aGlzIHFoIGlzIGFjdGl2ZSBpbiB0aGUgY3VycmVudCB1ZnJhbWUKIAkgKiAgIChhbmQgb3ZlcmxheSB0b2tlbiBTcGxpdFhzdGF0ZSBpcyBmYWxzZT8pCiAJICogVEhFTgotCSAqICAgcWgtPmh3X2luZm8xIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMSA8PCA3ICJpZ25vcmUiKTsKKwkgKiAgIHFoLT5od19pbmZvMSB8PSBjcHVfdG9fbGUzMigxIDw8IDcgImlnbm9yZSIpOwogCSAqLwogCiAJLyogaGlnaCBiYW5kd2lkdGgsIG9yIG90aGVyd2lzZSBwYXJ0IG9mIGV2ZXJ5IG1pY3JvZnJhbWUgKi8KQEAgLTIwNTcsNyArMjA1Nyw3IEBACiAJICogYWN0aXZlIGhpZ2ggc3BlZWQgcXVldWVzIG1heSBuZWVkIGJpZ2dlciBkZWxheXMuLi4KIAkgKi8KIAlpZiAobGlzdF9lbXB0eSgmcWgtPnF0ZF9saXN0KQotCQl8fCAoX19jb25zdGFudF9jcHVfdG9fbGUzMihRSF9DTUFTSykgJiBxaC0+aHdfaW5mbzIpICE9IDApCisJCXx8IChjcHVfdG9fbGUzMihRSF9DTUFTSykgJiBxaC0+aHdfaW5mbzIpICE9IDApCiAJCXdhaXQgPSAyOwogCWVsc2UKIAkJd2FpdCA9IDU1OwkvKiB3b3JzdCBjYXNlOiAzICogMTAyNCAqLwpAQCAtMjE4MywxMCArMjE4MywxMCBAQAogCQlxaC0+c3RhcnQgPSBmcmFtZTsKIAogCQkvKiByZXNldCBTLWZyYW1lIGFuZCAobWF5YmUpIEMtZnJhbWUgbWFza3MgKi8KLQkJcWgtPmh3X2luZm8yICY9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIofihRSF9DTUFTSyB8IFFIX1NNQVNLKSk7CisJCXFoLT5od19pbmZvMiAmPSBjcHVfdG9fbGUzMih+KFFIX0NNQVNLIHwgUUhfU01BU0spKTsKIAkJcWgtPmh3X2luZm8yIHw9IHFoLT5wZXJpb2QKIAkJCT8gY3B1X3RvX2xlMzIoMSA8PCB1ZnJhbWUpCi0JCQk6IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoUUhfU01BU0spOworCQkJOiBjcHVfdG9fbGUzMihRSF9TTUFTSyk7CiAJCXFoLT5od19pbmZvMiB8PSBjX21hc2s7CiAJfSBlbHNlCiAJCW94dV9kYmcob3h1LCAicmV1c2VkIHFoICVwIHNjaGVkdWxlXG4iLCBxaCk7CkBAIC0yNjg0LDcgKzI2ODQsNyBAQAogCW94dS0+dXJiX2xlbiA9IDA7CiAKIAkvKiBGSU1YRSAqLwotCWhjZC0+c2VsZi5jb250cm9sbGVyLT5kbWFfbWFzayA9IDBVTDsKKwloY2QtPnNlbGYuY29udHJvbGxlci0+ZG1hX21hc2sgPSBOVUxMOwogCiAJaWYgKG94dS0+aXNfb3RnKSB7CiAJCW94dS0+Y2FwcyA9IGhjZC0+cmVncyArIE9YVV9PVEdfQ0FQX09GRlNFVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAuaCBiL2RyaXZlcnMvdXNiL2hvc3Qvb3h1MjEwaHAuaAppbmRleCA4OTEwZTI3Li4xYzIxNmFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L294dTIxMGhwLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9veHUyMTBocC5oCkBAIC0yMzUsMjEgKzIzNSwyMSBAQAogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgzMikpKTsKIAogLyogbWFzayBOYWtDbnQrVCBpbiBxaC0+aHdfYWx0X25leHQgKi8KLSNkZWZpbmUgUVREX01BU0sgX19jb25zdGFudF9jcHVfdG9fbGUzMiAofjB4MWYpCisjZGVmaW5lIFFURF9NQVNLIGNwdV90b19sZTMyICh+MHgxZikKIAogI2RlZmluZSBJU19TSE9SVF9SRUFEKHRva2VuKSAoUVREX0xFTkdUSCh0b2tlbikgIT0gMCAmJiBRVERfUElEKHRva2VuKSA9PSAxKQogCiAvKiBUeXBlIHRhZyBmcm9tIHtxaCwgaXRkLCBzaXRkLCBmc3RufS0+aHdfbmV4dCAqLwotI2RlZmluZSBRX05FWFRfVFlQRShkbWEpICgoZG1hKSAmIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDMgPDwgMSkpCisjZGVmaW5lIFFfTkVYVF9UWVBFKGRtYSkgKChkbWEpICYgY3B1X3RvX2xlMzIgKDMgPDwgMSkpCiAKIC8qIHZhbHVlcyBmb3IgdGhhdCB0eXBlIHRhZyAqLwotI2RlZmluZSBRX1RZUEVfUUgJX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMSA8PCAxKQorI2RlZmluZSBRX1RZUEVfUUgJY3B1X3RvX2xlMzIgKDEgPDwgMSkKIAogLyogbmV4dCBhc3luYyBxdWV1ZSBlbnRyeSwgb3IgcG9pbnRlciB0byBpbnRlcnJ1cHQvcGVyaW9kaWMgUUggKi8KICNkZWZpbmUJUUhfTkVYVChkbWEpCShjcHVfdG9fbGUzMigoKHUzMilkbWEpJn4weDAxZil8UV9UWVBFX1FIKQogCiAvKiBmb3IgcGVyaW9kaWMvYXN5bmMgc2NoZWR1bGVzIGFuZCBxdGQgbGlzdHMsIG1hcmsgZW5kIG9mIGxpc3QgKi8KLSNkZWZpbmUJRUhDSV9MSVNUX0VORAlfX2NvbnN0YW50X2NwdV90b19sZTMyKDEpIC8qICJudWxsIHBvaW50ZXIiIHRvIGh3ICovCisjZGVmaW5lCUVIQ0lfTElTVF9FTkQJY3B1X3RvX2xlMzIoMSkgLyogIm51bGwgcG9pbnRlciIgdG8gaHcgKi8KIAogLyoKICAqIEVudHJpZXMgaW4gcGVyaW9kaWMgc2hhZG93IHRhYmxlIGFyZSBwb2ludGVycyB0byBvbmUgb2YgZm91ciBraW5kcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9wY2ktcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwppbmRleCA3NWI2OTg0Li4wMzNjMjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3BjaS1xdWlya3MuYwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJICovCiAJaGNjX3BhcmFtcyA9IHJlYWRsKGJhc2UgKyBFSENJX0hDQ19QQVJBTVMpOwogCW9mZnNldCA9IChoY2NfcGFyYW1zID4+IDgpICYgMHhmZjsKLQl3aGlsZSAob2Zmc2V0ICYmIGNvdW50LS0pIHsKKwl3aGlsZSAob2Zmc2V0ICYmIC0tY291bnQpIHsKIAkJdTMyCQljYXA7CiAJCWludAkJbXNlYzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTctaGNkLmMKaW5kZXggMzE5MDQxMi4uZjE2MjZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LWhjZC5jCkBAIC02NjAsOSArNjYwLDkgQEAKIAl1MTYgYXJyYXlbUjhBNjY1OTdfTUFYX05VTV9QSVBFXSwgaSA9IDAsIG1pbjsKIAogCW1lbXNldChhcnJheSwgMCwgc2l6ZW9mKGFycmF5KSk7Ci0Jc3dpdGNoIChlcC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spIHsKKwlzd2l0Y2ggKHVzYl9lbmRwb2ludF90eXBlKGVwKSkgewogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfQlVMSzoKLQkJaWYgKGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpCiAJCQlhcnJheVtpKytdID0gNDsKIAkJZWxzZSB7CiAJCQlhcnJheVtpKytdID0gMzsKQEAgLTY3MCw3ICs2NzAsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgVVNCX0VORFBPSU5UX1hGRVJfSU5UOgotCQlpZiAoZXAtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spIHsKKwkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXApKSB7CiAJCQlhcnJheVtpKytdID0gNjsKIAkJCWFycmF5W2krK10gPSA3OwogCQkJYXJyYXlbaSsrXSA9IDg7CkBAIC02NzgsNyArNjc4LDcgQEAKIAkJCWFycmF5W2krK10gPSA5OwogCQlicmVhazsKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6Ci0JCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKKwkJaWYgKHVzYl9lbmRwb2ludF9kaXJfaW4oZXApKQogCQkJYXJyYXlbaSsrXSA9IDI7CiAJCWVsc2UKIAkJCWFycmF5W2krK10gPSAxOwpAQCAtOTI4LDEwICs5MjgsOSBAQAogCiAJaW5mby5waXBlbnVtID0gZ2V0X2VtcHR5X3BpcGVudW0ocjhhNjY1OTcsIGVwKTsKIAlpbmZvLmFkZHJlc3MgPSBnZXRfdXJiX3RvX3I4YTY2NTk3X2FkZHIocjhhNjY1OTcsIHVyYik7Ci0JaW5mby5lcG51bSA9IGVwLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOworCWluZm8uZXBudW0gPSB1c2JfZW5kcG9pbnRfbnVtKGVwKTsKIAlpbmZvLm1heHBhY2tldCA9IGxlMTZfdG9fY3B1KGVwLT53TWF4UGFja2V0U2l6ZSk7Ci0JaW5mby50eXBlID0gZ2V0X3I4YTY2NTk3X3R5cGUoZXAtPmJtQXR0cmlidXRlcwotCQkJCSAgICAgICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spOworCWluZm8udHlwZSA9IGdldF9yOGE2NjU5N190eXBlKHVzYl9lbmRwb2ludF90eXBlKGVwKSk7CiAJaW5mby5idWZudW0gPSBnZXRfYnVmbnVtKGluZm8ucGlwZW51bSk7CiAJaW5mby5idWZfYnNpemUgPSBnZXRfYnVmX2JzaXplKGluZm8ucGlwZW51bSk7CiAJaWYgKGluZm8udHlwZSA9PSBSOEE2NjU5N19CVUxLKSB7CkBAIC05NDEsNyArOTQwLDcgQEAKIAkJaW5mby5pbnRlcnZhbCA9IGdldF9pbnRlcnZhbCh1cmIsIGVwLT5iSW50ZXJ2YWwpOwogCQlpbmZvLnRpbWVyX2ludGVydmFsID0gZ2V0X3RpbWVyX2ludGVydmFsKHVyYiwgZXAtPmJJbnRlcnZhbCk7CiAJfQotCWlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKKwlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbihlcCkpCiAJCWluZm8uZGlyX2luID0gMTsKIAllbHNlCiAJCWluZm8uZGlyX2luID0gMDsKQEAgLTEwMTQsNiArMTAxMyw5IEBACiAKIAlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkRUQ0gsIGdldF9pbnRzdHNfcmVnKHBvcnQpKTsKIAlyOGE2NjU5N19ic2V0KHI4YTY2NTk3LCBEVENIRSwgZ2V0X2ludGVuYl9yZWcocG9ydCkpOworCisJaWYgKHI4YTY2NTk3LT5idXNfc3VzcGVuZGVkKQorCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihyOGE2NjU5N190b19oY2QocjhhNjY1OTcpKTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdCBkaXNhYmxlZCAqLwpAQCAtMTM5NSw3ICsxMzk3LDcgQEAKIAkJCSAgIChpbnQpdXJiLT5pc29fZnJhbWVfZGVzY1t0ZC0+aXNvX2NudF0ubGVuZ3RoKTsKIAl9IGVsc2UgewogCQlidWYgPSAodTE2ICopKHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJc2l6ZSA9IG1pbigoaW50KWJ1ZnNpemUsCisJCXNpemUgPSBtaW5fdCh1MzIsIGJ1ZnNpemUsCiAJCQkgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGgpOwogCX0KIApAQCAtMTYxNSw2ICsxNjE3LDExIEBACiAJCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBEVENIRSwgSU5URU5CMik7CiAJCQlyOGE2NjU5N191c2JfZGlzY29ubmVjdChyOGE2NjU5NywgMSk7CiAJCX0KKwkJaWYgKG1hc2syICYgQkNIRykgeworCQkJcjhhNjY1OTdfd3JpdGUocjhhNjY1OTcsIH5CQ0hHLCBJTlRTVFMyKTsKKwkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIEJDSEdFLCBJTlRFTkIyKTsKKwkJCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5NykpOworCQl9CiAJfQogCiAJaWYgKG1hc2sxKSB7CkBAIC0xNjMwLDYgKzE2MzcsMTIgQEAKIAkJCXI4YTY2NTk3X2JjbHIocjhhNjY1OTcsIERUQ0hFLCBJTlRFTkIxKTsKIAkJCXI4YTY2NTk3X3VzYl9kaXNjb25uZWN0KHI4YTY2NTk3LCAwKTsKIAkJfQorCQlpZiAobWFzazEgJiBCQ0hHKSB7CisJCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgfkJDSEcsIElOVFNUUzEpOworCQkJcjhhNjY1OTdfYmNscihyOGE2NjU5NywgQkNIR0UsIElOVEVOQjEpOworCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocjhhNjY1OTdfdG9faGNkKHI4YTY2NTk3KSk7CisJCX0KKwogCQlpZiAobWFzazEgJiBTSUdOKSB7CiAJCQlyOGE2NjU5N193cml0ZShyOGE2NjU5NywgflNJR04sIElOVFNUUzEpOwogCQkJc3RhdHVzID0gZ2V0X3VyYl9lcnJvcihyOGE2NjU5NywgMCk7CkBAIC0yMTQxLDcgKzIxNTQsNyBAQAogCiAJCXN3aXRjaCAod1ZhbHVlKSB7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9FTkFCTEU6Ci0JCQlyaC0+cG9ydCAmPSAoMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKKwkJCXJoLT5wb3J0ICY9IH4oMSA8PCBVU0JfUE9SVF9GRUFUX1BPV0VSKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKIAkJCWJyZWFrOwpAQCAtMjIxMyw2ICsyMjI2LDY4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX1BNKQorc3RhdGljIGludCByOGE2NjU5N19idXNfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCByOGE2NjU5NyAqcjhhNjY1OTcgPSBoY2RfdG9fcjhhNjY1OTcoaGNkKTsKKwlpbnQgcG9ydDsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUjhBNjY1OTdfTUFYX1JPT1RfSFVCOyBwb3J0KyspIHsKKwkJc3RydWN0IHI4YTY2NTk3X3Jvb3RfaHViICpyaCA9ICZyOGE2NjU5Ny0+cm9vdF9odWJbcG9ydF07CisJCXVuc2lnbmVkIGxvbmcgZHZzdGN0cl9yZWcgPSBnZXRfZHZzdGN0cl9yZWcocG9ydCk7CisKKwkJaWYgKCEocmgtPnBvcnQgJiAoMSA8PCBVU0JfUE9SVF9GRUFUX0VOQUJMRSkpKQorCQkJY29udGludWU7CisKKwkJZGJnKCJzdXNwZW5kIHBvcnQgPSAlZCIsIHBvcnQpOworCQlyOGE2NjU5N19iY2xyKHI4YTY2NTk3LCBVQUNULCBkdnN0Y3RyX3JlZyk7CS8qIHN1c3BlbmQgKi8KKwkJcmgtPnBvcnQgfD0gMSA8PCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ7CisKKwkJaWYgKHJoLT5kZXYtPnVkZXYtPmRvX3JlbW90ZV93YWtldXApIHsKKwkJCW1zbGVlcCgzKTsJLyogd2FpdGluZyBsYXN0IFNPRiAqLworCQkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgUldVUEUsIGR2c3RjdHJfcmVnKTsKKwkJCXI4YTY2NTk3X3dyaXRlKHI4YTY2NTk3LCB+QkNIRywgZ2V0X2ludHN0c19yZWcocG9ydCkpOworCQkJcjhhNjY1OTdfYnNldChyOGE2NjU5NywgQkNIR0UsIGdldF9pbnRlbmJfcmVnKHBvcnQpKTsKKwkJfQorCX0KKworCXI4YTY2NTk3LT5idXNfc3VzcGVuZGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHI4YTY2NTk3X2J1c19yZXN1bWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgcjhhNjY1OTcgKnI4YTY2NTk3ID0gaGNkX3RvX3I4YTY2NTk3KGhjZCk7CisJaW50IHBvcnQ7CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFI4QTY2NTk3X01BWF9ST09UX0hVQjsgcG9ydCsrKSB7CisJCXN0cnVjdCByOGE2NjU5N19yb290X2h1YiAqcmggPSAmcjhhNjY1OTctPnJvb3RfaHViW3BvcnRdOworCQl1bnNpZ25lZCBsb25nIGR2c3RjdHJfcmVnID0gZ2V0X2R2c3RjdHJfcmVnKHBvcnQpOworCisJCWlmICghKHJoLT5wb3J0ICYgKDEgPDwgVVNCX1BPUlRfRkVBVF9TVVNQRU5EKSkpCisJCQljb250aW51ZTsKKworCQlkYmcoInJlc3VtZSBwb3J0ID0gJWQiLCBwb3J0KTsKKwkJcmgtPnBvcnQgJj0gfigxIDw8IFVTQl9QT1JUX0ZFQVRfU1VTUEVORCk7CisJCXJoLT5wb3J0IHw9IDEgPDwgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ7CisJCXI4YTY2NTk3X21kZnkocjhhNjY1OTcsIFJFU1VNRSwgUkVTVU1FIHwgVUFDVCwgZHZzdGN0cl9yZWcpOworCQltc2xlZXAoNTApOworCQlyOGE2NjU5N19tZGZ5KHI4YTY2NTk3LCBVQUNULCBSRVNVTUUgfCBVQUNULCBkdnN0Y3RyX3JlZyk7CisJfQorCisJcmV0dXJuIDA7CisKK30KKyNlbHNlCisjZGVmaW5lCXI4YTY2NTk3X2J1c19zdXNwZW5kCU5VTEwKKyNkZWZpbmUJcjhhNjY1OTdfYnVzX3Jlc3VtZQlOVUxMCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBoY19kcml2ZXIgcjhhNjY1OTdfaGNfZHJpdmVyID0gewogCS5kZXNjcmlwdGlvbiA9CQloY2RfbmFtZSwKIAkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3QgcjhhNjY1OTcpLApAQCAtMjI0MywxNiArMjMxOCwzOSBAQAogCSAqLwogCS5odWJfc3RhdHVzX2RhdGEgPQlyOGE2NjU5N19odWJfc3RhdHVzX2RhdGEsCiAJLmh1Yl9jb250cm9sID0JCXI4YTY2NTk3X2h1Yl9jb250cm9sLAorCS5idXNfc3VzcGVuZCA9CQlyOGE2NjU5N19idXNfc3VzcGVuZCwKKwkuYnVzX3Jlc3VtZSA9CQlyOGE2NjU5N19idXNfcmVzdW1lLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BNKQogc3RhdGljIGludCByOGE2NjU5N19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKKwlzdHJ1Y3QgcjhhNjY1OTcJCSpyOGE2NjU5NyA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlpbnQgcG9ydDsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlkaXNhYmxlX2NvbnRyb2xsZXIocjhhNjY1OTcpOworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFI4QTY2NTk3X01BWF9ST09UX0hVQjsgcG9ydCsrKSB7CisJCXN0cnVjdCByOGE2NjU5N19yb290X2h1YiAqcmggPSAmcjhhNjY1OTctPnJvb3RfaHViW3BvcnRdOworCisJCXJoLT5wb3J0ID0gMHgwMDAwMDAwMDsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByOGE2NjU5N19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgcjhhNjY1OTcJCSpyOGE2NjU5NyA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IHI4YTY2NTk3X3RvX2hjZChyOGE2NjU5Nyk7CisKKwlkYmcoIiVzIiwgX19mdW5jX18pOworCisJZW5hYmxlX2NvbnRyb2xsZXIocjhhNjY1OTcpOworCXVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKGhjZC0+c2VsZi5yb290X2h1Yik7CisKIAlyZXR1cm4gMDsKIH0KICNlbHNlCS8qIGlmIGRlZmluZWQoQ09ORklHX1BNKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny5oIGIvZHJpdmVycy91c2IvaG9zdC9yOGE2NjU5Ny5oCmluZGV4IGVjYWNkZTQuLmY0OTIwOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvcjhhNjY1OTcuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3I4YTY2NTk3LmgKQEAgLTUwNCw2ICs1MDQsOCBAQAogCiAJc3RydWN0IGxpc3RfaGVhZCBjaGlsZF9kZXZpY2U7CiAJdW5zaWduZWQgbG9uZyBjaGlsZF9jb25uZWN0X21hcFs0XTsKKworCXVuc2lnbmVkIGJ1c19zdXNwZW5kZWQ6MTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHI4YTY2NTk3ICpoY2RfdG9fcjhhNjY1OTcoc3RydWN0IHVzYl9oY2QgKmhjZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCmluZGV4IGUxMDZlOWQuLmE5NDkyNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAJd3JpdGViKHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSksIGRhdGFfcmVnKTsKIAogCXNsODExX3dyaXRlKHNsODExLCBiYW5rICsgU0wxMUhfSE9TVENUTFJFRywgY29udHJvbCk7Ci0JZXAtPmxlbmd0aCA9IG1pbigoaW50KWxlbiwKKwllcC0+bGVuZ3RoID0gbWluX3QodTMyLCBsZW4sCiAJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGgpOwogCVBBQ0tFVCgiSU4lcy8lZCBxaCVwIGxlbiVkXG4iLCBlcC0+bmFrX2NvdW50ID8gIi9yZXRyeSIgOiAiIiwKIAkJCSEhdXNiX2dldHRvZ2dsZSh1cmItPmRldiwgZXAtPmVwbnVtLCAwKSwgZXAsIGxlbik7CkBAIC0yNTUsNyArMjU1LDcgQEAKIAlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aDsKIAlwcmVmZXRjaChidWYpOwogCi0JbGVuID0gbWluKChpbnQpZXAtPm1heHBhY2tldCwKKwlsZW4gPSBtaW5fdCh1MzIsIGVwLT5tYXhwYWNrZXQsCiAJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGgpOwogCiAJaWYgKCEoY29udHJvbCAmIFNMMTFIX0hDVExNQVNLX0lTT0NIKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYwppbmRleCAyMGNjNThiLi5lNTJiOTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktZGVidWcuYwpAQCAtMTE4LDcgKzExOCw5IEBACiAJfQogCiAJb3V0ICs9IHNwcmludGYob3V0LCAiJXMlcyIsIHB0eXBlLCAodXJicC0+ZnNiciA/ICIgRlNCUiIgOiAiIikpOwotCW91dCArPSBzcHJpbnRmKG91dCwgIiBBY3RsZW49JWQiLCB1cmJwLT51cmItPmFjdHVhbF9sZW5ndGgpOworCW91dCArPSBzcHJpbnRmKG91dCwgIiBBY3RsZW49JWQlcyIsIHVyYnAtPnVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCSh1cmJwLT5xaC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MID8KKwkJCQkiLTgiIDogIiIpKTsKIAogCWlmICh1cmJwLT51cmItPnVubGlua2VkKQogCQlvdXQgKz0gc3ByaW50ZihvdXQsICIgVW5saW5rZWQ9JWQiLCB1cmJwLT51cmItPnVubGlua2VkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaCBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuaAppbmRleCA3ZDAxYzU2Li4yNmJkMWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5oCkBAIC03MywxMSArNzMsMTEgQEAKICNkZWZpbmUgICBVU0JMRUdTVVBfUldDCQkweDhmMDAJLyogdGhlIFIvV0MgYml0cyAqLwogI2RlZmluZSAgIFVTQkxFR1NVUF9STwkJMHg1MDQwCS8qIFIvTyBhbmQgcmVzZXJ2ZWQgYml0cyAqLwogCi0jZGVmaW5lIFVIQ0lfUFRSX0JJVFMJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDBGKQotI2RlZmluZSBVSENJX1BUUl9URVJNCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MDAwMSkKLSNkZWZpbmUgVUhDSV9QVFJfUUgJCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgwMDAyKQotI2RlZmluZSBVSENJX1BUUl9ERVBUSAkJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDQpCi0jZGVmaW5lIFVIQ0lfUFRSX0JSRUFEVEgJX19jb25zdGFudF9jcHVfdG9fbGUzMigweDAwMDApCisjZGVmaW5lIFVIQ0lfUFRSX0JJVFMJCWNwdV90b19sZTMyKDB4MDAwRikKKyNkZWZpbmUgVUhDSV9QVFJfVEVSTQkJY3B1X3RvX2xlMzIoMHgwMDAxKQorI2RlZmluZSBVSENJX1BUUl9RSAkJY3B1X3RvX2xlMzIoMHgwMDAyKQorI2RlZmluZSBVSENJX1BUUl9ERVBUSAkJY3B1X3RvX2xlMzIoMHgwMDA0KQorI2RlZmluZSBVSENJX1BUUl9CUkVBRFRICWNwdV90b19sZTMyKDB4MDAwMCkKIAogI2RlZmluZSBVSENJX05VTUZSQU1FUwkJMTAyNAkvKiBpbiB0aGUgZnJhbWUgbGlzdCBbYXJyYXldICovCiAjZGVmaW5lIFVIQ0lfTUFYX1NPRl9OVU1CRVIJMjA0NwkvKiBpbiBhbiBTT0YgcGFja2V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwppbmRleCA1NjMxZDg5Li4zZTU4MDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKQEAgLTQwMiw3ICs0MDIsNyBAQAogCQkvKiBPdGhlcndpc2UgYWxsIHRoZSB0b2dnbGVzIGluIHRoZSBVUkIgaGF2ZSB0byBiZSBzd2l0Y2hlZCAqLwogCQl9IGVsc2UgewogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0ZCwgJnVyYnAtPnRkX2xpc3QsIGxpc3QpIHsKLQkJCQl0ZC0+dG9rZW4gXj0gX19jb25zdGFudF9jcHVfdG9fbGUzMigKKwkJCQl0ZC0+dG9rZW4gXj0gY3B1X3RvX2xlMzIoCiAJCQkJCQkJVERfVE9LRU5fVE9HR0xFKTsKIAkJCQl0b2dnbGUgXj0gMTsKIAkJCX0KQEAgLTg4Myw3ICs4ODMsNyBAQAogCiAJdWhjaV9maWxsX3RkKHRkLCAwLCBVU0JfUElEX09VVCB8IHVoY2lfZXhwbGVuKDApLCAwKTsKIAl3bWIoKTsKLQlxaC0+ZHVtbXlfdGQtPnN0YXR1cyB8PSBfX2NvbnN0YW50X2NwdV90b19sZTMyKFREX0NUUkxfQUNUSVZFKTsKKwlxaC0+ZHVtbXlfdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CiAJcWgtPmR1bW15X3RkID0gdGQ7CiAKIAkvKiBMb3ctc3BlZWQgdHJhbnNmZXJzIGdldCBhIGRpZmZlcmVudCBxdWV1ZSwgYW5kIHdvbid0IGhvZyB0aGUgYnVzLgpAQCAtODk5LDggKzg5OSw2IEBACiAJfQogCWlmIChxaC0+c3RhdGUgIT0gUUhfU1RBVEVfQUNUSVZFKQogCQlxaC0+c2tlbCA9IHNrZWw7Ci0KLQl1cmItPmFjdHVhbF9sZW5ndGggPSAtODsJLyogQWNjb3VudCBmb3IgdGhlIFNFVFVQIHBhY2tldCAqLwogCXJldHVybiAwOwogCiBub21lbToKQEAgLTEwMDMsNyArMTAwMSw3IEBACiAJICogZmFzdCBzaWRlIGJ1dCBub3QgZW5vdWdoIHRvIGp1c3RpZnkgZGVsYXlpbmcgYW4gaW50ZXJydXB0CiAJICogbW9yZSB0aGFuIDIgb3IgMyBVUkJzLCBzbyB3ZSB3aWxsIGlnbm9yZSB0aGUgVVJCX05PX0lOVEVSUlVQVAogCSAqIGZsYWcgc2V0dGluZy4gKi8KLQl0ZC0+c3RhdHVzIHw9IF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOworCXRkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9JT0MpOwogCiAJLyoKIAkgKiBCdWlsZCB0aGUgbmV3IGR1bW15IFREIGFuZCBhY3RpdmF0ZSB0aGUgb2xkIG9uZQpAQCAtMTAxNSw3ICsxMDEzLDcgQEAKIAogCXVoY2lfZmlsbF90ZCh0ZCwgMCwgVVNCX1BJRF9PVVQgfCB1aGNpX2V4cGxlbigwKSwgMCk7CiAJd21iKCk7Ci0JcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0FDVElWRSk7CisJcWgtPmR1bW15X3RkLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoVERfQ1RSTF9BQ1RJVkUpOwogCXFoLT5kdW1teV90ZCA9IHRkOwogCiAJdXNiX3NldHRvZ2dsZSh1cmItPmRldiwgdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpLApAQCAtMTMxNyw3ICsxMzE1LDcgQEAKIAl9CiAKIAkvKiBTZXQgdGhlIGludGVycnVwdC1vbi1jb21wbGV0aW9uIGZsYWcgb24gdGhlIGxhc3QgcGFja2V0LiAqLwotCXRkLT5zdGF0dXMgfD0gX19jb25zdGFudF9jcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CisJdGQtPnN0YXR1cyB8PSBjcHVfdG9fbGUzMihURF9DVFJMX0lPQyk7CiAKIAkvKiBBZGQgdGhlIFREcyB0byB0aGUgZnJhbWUgbGlzdCAqLwogCWZyYW1lID0gdXJiLT5zdGFydF9mcmFtZTsKQEAgLTE0OTQsMTEgKzE0OTIsMTAgQEAKIAogCWlmIChxaC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKSB7CiAKLQkJLyogdXJiLT5hY3R1YWxfbGVuZ3RoIDwgMCBtZWFucyB0aGUgc2V0dXAgdHJhbnNhY3Rpb24gZGlkbid0Ci0JCSAqIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS4gIEVpdGhlciBpdCBmYWlsZWQgb3IgdGhlIFVSQiB3YXMKLQkJICogdW5saW5rZWQgZmlyc3QuICBSZWdhcmRsZXNzLCBkb24ndCBjb25mdXNlIHBlb3BsZSB3aXRoIGEKLQkJICogbmVnYXRpdmUgbGVuZ3RoLiAqLwotCQl1cmItPmFjdHVhbF9sZW5ndGggPSBtYXgodXJiLT5hY3R1YWxfbGVuZ3RoLCAwKTsKKwkJLyogU3VidHJhY3Qgb2ZmIHRoZSBsZW5ndGggb2YgdGhlIFNFVFVQIHBhY2tldCBmcm9tCisJCSAqIHVyYi0+YWN0dWFsX2xlbmd0aC4KKwkJICovCisJCXVyYi0+YWN0dWFsX2xlbmd0aCAtPSBtaW5fdCh1MzIsIDgsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJfQogCiAJLyogV2hlbiBnaXZpbmcgYmFjayB0aGUgZmlyc3QgVVJCIGluIGFuIElzb2Nocm9ub3VzIHF1ZXVlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYwppbmRleCA5NzJmMjBiLi5lY2EzNTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYworKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJCS5iRGVzY3JpcHRvclR5cGUgPQkwLAogCQkuYkVuZHBvaW50QWRkcmVzcyA9CTB4MDEsCiAJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMiwKLQkJLndNYXhQYWNrZXRTaXplID0JX19jb25zdGFudF9jcHVfdG9fbGUxNig4KSwKKwkJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoOCksCiAJCS5iSW50ZXJ2YWwgPSAJCTAsCiAJCS5iUmVmcmVzaCA9IAkJMCwKIAkJLmJTeW5jaEFkZHJlc3MgPSAJMCwKQEAgLTE5OCw3ICsxOTgsNyBAQAogCQkuYkRlc2NyaXB0b3JUeXBlID0gCTAsCiAJCS5iRW5kcG9pbnRBZGRyZXNzID0gCTB4ODIsCiAJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMywKLQkJLndNYXhQYWNrZXRTaXplID0gCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoOCksCisJCS53TWF4UGFja2V0U2l6ZSA9IAljcHVfdG9fbGUxNig4KSwKIAkJLmJJbnRlcnZhbCA9IAkJMCwKIAkJLmJSZWZyZXNoID0gCQkwLAogCQkuYlN5bmNoQWRkcmVzcyA9IAkwLApAQCAtMjA4LDcgKzIwOCw3IEBACiAJCS5iRGVzY3JpcHRvclR5cGUgPSAJMCwKIAkJLmJFbmRwb2ludEFkZHJlc3MgPSAJMHgwMywKIAkJLmJtQXR0cmlidXRlcyA9IAkweDAyLAotCQkud01heFBhY2tldFNpemUgPSAJX19jb25zdGFudF9jcHVfdG9fbGUxNig2NCksCisJCS53TWF4UGFja2V0U2l6ZSA9IAljcHVfdG9fbGUxNig2NCksCiAJCS5iSW50ZXJ2YWwgPSAJCTAsCiAJCS5iUmVmcmVzaCA9IAkJMCwKIAkJLmJTeW5jaEFkZHJlc3MgPSAJMCwKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQkuYkRlc2NyaXB0b3JUeXBlID0gCTAsCiAJCS5iRW5kcG9pbnRBZGRyZXNzID0gCTB4ODQsCiAJCS5ibUF0dHJpYnV0ZXMgPSAJMHgwMiwKLQkJLndNYXhQYWNrZXRTaXplID0gCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoNjQpLAorCQkud01heFBhY2tldFNpemUgPSAJY3B1X3RvX2xlMTYoNjQpLAogCQkuYkludGVydmFsID0gCQkwLAogCQkuYlJlZnJlc2ggPSAJCTAsCiAJCS5iU3luY2hBZGRyZXNzID0gCTAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKaW5kZXggZTQ2M2RiNS4uYTY4ZDkxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwpAQCAtMTM1LDQ1ICsxMzUsNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3l0aGVybS4KIAotY29uZmlnIFVTQl9QSElER0VUCi0JdHJpc3RhdGUgIlVTQiBQaGlkZ2V0cyBkcml2ZXJzIgotCWRlcGVuZHMgb24gVVNCCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIHZhcmlvdXMgZHJpdmVycyBmb3IgZGV2aWNlcyBmcm9tCi0JICBQaGlkZ2V0cyBpbmMuCi0KLWNvbmZpZyBVU0JfUEhJREdFVEtJVAotCXRyaXN0YXRlICJVU0IgUGhpZGdldEludGVyZmFjZUtpdCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX1BISURHRVQKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBQaGlkZ2V0SW50ZXJmYWNlS2l0IFVTQiBkZXZpY2UKLQkgIGZyb20gUGhpZGdldHMgSW5jLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0a2l0LgotCi1jb25maWcgVVNCX1BISURHRVRNT1RPUkNPTlRST0wKLQl0cmlzdGF0ZSAiVVNCIFBoaWRnZXRNb3RvckNvbnRyb2wgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQl9QSElER0VUCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGEgUGhpZGdldE1vdG9yQ29udHJvbCBVU0IgZGV2aWNlCi0JICBmcm9tIFBoaWRnZXRzIEluYy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcGhpZGdldG1vdG9yY29udHJvbC4KLQotY29uZmlnIFVTQl9QSElER0VUU0VSVk8KLQl0cmlzdGF0ZSAiVVNCIFBoaWRnZXRTZXJ2byBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCX1BISURHRVQKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYW4gMSBvciA0IE1vdG9yIFBoaWRnZXRTZXJ2byAKLQkgIHNlcnZvIGNvbnRyb2xsZXIgdmVyc2lvbiAyLjAgb3IgMy4wLgotCi0JICBQaGlkZ2V0cyBJbmMuIGhhcyBhIHdlYiBwYWdlIGF0IDxodHRwOi8vd3d3LnBoaWRnZXRzLmNvbS8+LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0c2Vydm8uCi0KIGNvbmZpZyBVU0JfSURNT1VTRQogCXRyaXN0YXRlICJTaWVtZW5zIElEIFVTQiBNb3VzZSBGaW5nZXJwcmludCBzZW5zb3Igc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKaW5kZXggMTMzNGY3Yi4uMDgyNmFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCkBAIC0xOCwxMCArMTgsNiBAQAogb2JqLSQoQ09ORklHX1VTQl9MRCkJCSs9IGxkdXNiLm8KIG9iai0kKENPTkZJR19VU0JfTEVEKQkJKz0gdXNibGVkLm8KIG9iai0kKENPTkZJR19VU0JfTEVHT1RPV0VSKQkrPSBsZWdvdXNidG93ZXIubwotb2JqLSQoQ09ORklHX1VTQl9QSElER0VUKQkrPSBwaGlkZ2V0Lm8KLW9iai0kKENPTkZJR19VU0JfUEhJREdFVEtJVCkJKz0gcGhpZGdldGtpdC5vCi1vYmotJChDT05GSUdfVVNCX1BISURHRVRNT1RPUkNPTlRST0wpCSs9IHBoaWRnZXRtb3RvcmNvbnRyb2wubwotb2JqLSQoQ09ORklHX1VTQl9QSElER0VUU0VSVk8pCSs9IHBoaWRnZXRzZXJ2by5vCiBvYmotJChDT05GSUdfVVNCX1JJTzUwMCkJKz0gcmlvNTAwLm8KIG9iai0kKENPTkZJR19VU0JfVEVTVCkJCSs9IHVzYnRlc3Qubwogb2JqLSQoQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUikJKz0gdHJhbmNldmlicmF0b3IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKaW5kZXggNzlhNzY2OC4uOWQwNjc1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCkBAIC0xNTY4LDcgKzE1NjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+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+ZGV2X25vLCAmZGV2aWNlX25vKTsKLQlrZnJlZShkZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2Vydm9fZHJpdmVyID0gewotCS5uYW1lID0gInBoaWRnZXRzZXJ2byIsCi0JLnByb2JlID0gc2Vydm9fcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBzZXJ2b19kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IGlkX3RhYmxlCi19OwotCi1zdGF0aWMgaW50IF9faW5pdAotcGhpZGdldF9zZXJ2b19pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IHVzYl9yZWdpc3Rlcigmc2Vydm9fZHJpdmVyKTsKLQlpZiAocmV0dmFsKQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQKLXBoaWRnZXRfc2Vydm9fZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZzZXJ2b19kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChwaGlkZ2V0X3NlcnZvX2luaXQpOwotbW9kdWxlX2V4aXQocGhpZGdldF9zZXJ2b19leGl0KTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwppbmRleCA0Y2YyN2M3Li5mOGQ5MDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKQEAgLTM3LDEwICszNywxMyBAQAogI2RlZmluZSBNT05fSU9DWF9HRVQgICBfSU9XKE1PTl9JT0NfTUFHSUMsIDYsIHN0cnVjdCBtb25fYmluX2dldCkKICNkZWZpbmUgTU9OX0lPQ1hfTUZFVENIIF9JT1dSKE1PTl9JT0NfTUFHSUMsIDcsIHN0cnVjdCBtb25fYmluX21mZXRjaCkKICNkZWZpbmUgTU9OX0lPQ0hfTUZMVVNIIF9JTyhNT05fSU9DX01BR0lDLCA4KQorLyogIzkgd2FzIE1PTl9JT0NUX1NFVEFQSSAqLworI2RlZmluZSBNT05fSU9DWF9HRVRYICAgX0lPVyhNT05fSU9DX01BR0lDLCAxMCwgc3RydWN0IG1vbl9iaW5fZ2V0KQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogI2RlZmluZSBNT05fSU9DWF9HRVQzMiBfSU9XKE1PTl9JT0NfTUFHSUMsIDYsIHN0cnVjdCBtb25fYmluX2dldDMyKQogI2RlZmluZSBNT05fSU9DWF9NRkVUQ0gzMiBfSU9XUihNT05fSU9DX01BR0lDLCA3LCBzdHJ1Y3QgbW9uX2Jpbl9tZmV0Y2gzMikKKyNkZWZpbmUgTU9OX0lPQ1hfR0VUWDMyICAgX0lPVyhNT05fSU9DX01BR0lDLCAxMCwgc3RydWN0IG1vbl9iaW5fZ2V0MzIpCiAjZW5kaWYKIAogLyoKQEAgLTkyLDcgKzk1LDI5IEBACiAJaW50IHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgbGVuX3VyYjsJLyogTGVuZ3RoIG9mIGRhdGEgKHN1Ym1pdHRlZCBvciBhY3R1YWwpICovCiAJdW5zaWduZWQgaW50IGxlbl9jYXA7CS8qIERlbGl2ZXJlZCBsZW5ndGggKi8KLQl1bnNpZ25lZCBjaGFyIHNldHVwW1NFVFVQX0xFTl07CS8qIE9ubHkgZm9yIENvbnRyb2wgUy10eXBlICovCisJdW5pb24geworCQl1bnNpZ25lZCBjaGFyIHNldHVwW1NFVFVQX0xFTl07CS8qIE9ubHkgZm9yIENvbnRyb2wgUy10eXBlICovCisJCXN0cnVjdCBpc29fcmVjIHsKKwkJCWludCBlcnJvcl9jb3VudDsKKwkJCWludCBudW1kZXNjOworCQl9IGlzbzsKKwl9IHM7CisJaW50IGludGVydmFsOworCWludCBzdGFydF9mcmFtZTsKKwl1bnNpZ25lZCBpbnQgeGZlcl9mbGFnczsKKwl1bnNpZ25lZCBpbnQgbmRlc2M7CS8qIEFjdHVhbCBudW1iZXIgb2YgSVNPIGRlc2NyaXB0b3JzICovCit9OworCisvKgorICogSVNPIHZlY3RvciwgcGFja2VkIGludG8gdGhlIGhlYWQgb2YgZGF0YSBzdHJlYW0uCisgKiBUaGlzIGhhcyB0byB0YWtlIDE2IGJ5dGVzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBlbmQgb2YgYnVmZmVyCisgKiB3cmFwIGlzIG5vdCBoYXBwZW5pbmcgaW4gdGhlIG1pZGRsZSBvZiBhIGRlc2NyaXB0b3IuCisgKi8KK3N0cnVjdCBtb25fYmluX2lzb2Rlc2MgeworCWludCAgICAgICAgICBpc29fc3RhdHVzOworCXVuc2lnbmVkIGludCBpc29fb2ZmOworCXVuc2lnbmVkIGludCBpc29fbGVuOworCXUzMiBfcGFkOwogfTsKIAogLyogcGVyIGZpbGUgc3RhdGlzdGljICovCkBAIC0xMDIsNyArMTI3LDcgQEAKIH07CiAKIHN0cnVjdCBtb25fYmluX2dldCB7Ci0Jc3RydWN0IG1vbl9iaW5faGRyIF9fdXNlciAqaGRyOwkvKiBPbmx5IDQ4IGJ5dGVzLCBub3QgNjQuICovCisJc3RydWN0IG1vbl9iaW5faGRyIF9fdXNlciAqaGRyOwkvKiBDYW4gYmUgNDggYnl0ZXMgb3IgNjQuICovCiAJdm9pZCBfX3VzZXIgKmRhdGE7CiAJc2l6ZV90IGFsbG9jOwkJLyogTGVuZ3RoIG9mIGRhdGEgKGNhbiBiZSB6ZXJvKSAqLwogfTsKQEAgLTEzMSw2ICsxNTYsMTEgQEAKICNkZWZpbmUgUEtUX0FMSUdOICAgNjQKICNkZWZpbmUgUEtUX1NJWkUgICAgNjQKIAorI2RlZmluZSBQS1RfU1pfQVBJMCA0OAkvKiBBUEkgMCAoMi42LjIwKSBzaXplICovCisjZGVmaW5lIFBLVF9TWl9BUEkxIDY0CS8qIEFQSSAxIHNpemU6IGV4dHJhIGZpZWxkcyAqLworCisjZGVmaW5lIElTT0RFU0NfTUFYICAgMTI4CS8qIFNhbWUgbnVtYmVyIGFzIHVzYmZzIGFsbG93cywgMjA0OCBieXRlcy4gKi8KKwogLyogbWF4IG51bWJlciBvZiBVU0IgYnVzIHN1cHBvcnRlZCAqLwogI2RlZmluZSBNT05fQklOX01BWF9NSU5PUiAxMjgKIApAQCAtMzYwLDEyICszOTAsOCBAQAogICAgIGNvbnN0IHN0cnVjdCB1cmIgKnVyYiwgY2hhciBldl90eXBlKQogewogCi0JaWYgKCF1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sKCZ1cmItPmVwLT5kZXNjKSB8fCBldl90eXBlICE9ICdTJykKLQkJcmV0dXJuICctJzsKLQogCWlmICh1cmItPnNldHVwX3BhY2tldCA9PSBOVUxMKQogCQlyZXR1cm4gJ1onOwotCiAJbWVtY3B5KHNldHVwYiwgdXJiLT5zZXR1cF9wYWNrZXQsIFNFVFVQX0xFTik7CiAJcmV0dXJuIDA7CiB9CkBAIC0zODcsNiArNDEzLDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG1vbl9iaW5fZ2V0X2lzb2Rlc2MoY29uc3Qgc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCwKKyAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBzdHJ1Y3QgdXJiICp1cmIsIGNoYXIgZXZfdHlwZSwgdW5zaWduZWQgaW50IG5kZXNjKQoreworCXN0cnVjdCBtb25fYmluX2lzb2Rlc2MgKmRwOworCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmcDsKKworCWZwID0gdXJiLT5pc29fZnJhbWVfZGVzYzsKKwl3aGlsZSAobmRlc2MtLSAhPSAwKSB7CisJCWRwID0gKHN0cnVjdCBtb25fYmluX2lzb2Rlc2MgKikKKwkJICAgIChycC0+Yl92ZWNbb2Zmc2V0IC8gQ0hVTktfU0laRV0ucHRyICsgb2Zmc2V0ICUgQ0hVTktfU0laRSk7CisJCWRwLT5pc29fc3RhdHVzID0gZnAtPnN0YXR1czsKKwkJZHAtPmlzb19vZmYgPSBmcC0+b2Zmc2V0OworCQlkcC0+aXNvX2xlbiA9IChldl90eXBlID09ICdTJykgPyBmcC0+bGVuZ3RoIDogZnAtPmFjdHVhbF9sZW5ndGg7CisJCWRwLT5fcGFkID0gMDsKKwkJaWYgKChvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2lzb2Rlc2MpKSA+PSBycC0+Yl9zaXplKQorCQkJb2Zmc2V0ID0gMDsKKwkJZnArKzsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG1vbl9iaW5fZXZlbnQoc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCwgc3RydWN0IHVyYiAqdXJiLAogICAgIGNoYXIgZXZfdHlwZSwgaW50IHN0YXR1cykKIHsKQEAgLTM5Niw2ICs0NDIsNyBAQAogCXVuc2lnbmVkIGludCB1cmJfbGVuZ3RoOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJdW5zaWduZWQgaW50IGxlbmd0aDsKKwl1bnNpZ25lZCBpbnQgbmRlc2MsIGxlbmRlc2M7CiAJdW5zaWduZWQgY2hhciBkaXI7CiAJc3RydWN0IG1vbl9iaW5faGRyICplcDsKIAljaGFyIGRhdGFfdGFnID0gMDsKQEAgLTQwNyw2ICs0NTQsMTkgQEAKIAkvKgogCSAqIEZpbmQgdGhlIG1heGltdW0gYWxsb3dhYmxlIGxlbmd0aCwgdGhlbiBhbGxvY2F0ZSBzcGFjZS4KIAkgKi8KKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpKSB7CisJCWlmICh1cmItPm51bWJlcl9vZl9wYWNrZXRzIDwgMCkgeworCQkJbmRlc2MgPSAwOworCQl9IGVsc2UgaWYgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPj0gSVNPREVTQ19NQVgpIHsKKwkJCW5kZXNjID0gSVNPREVTQ19NQVg7CisJCX0gZWxzZSB7CisJCQluZGVzYyA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJCX0KKwl9IGVsc2UgeworCQluZGVzYyA9IDA7CisJfQorCWxlbmRlc2MgPSBuZGVzYypzaXplb2Yoc3RydWN0IG1vbl9iaW5faXNvZGVzYyk7CisKIAl1cmJfbGVuZ3RoID0gKGV2X3R5cGUgPT0gJ1MnKSA/CiAJICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA6IHVyYi0+YWN0dWFsX2xlbmd0aDsKIAlsZW5ndGggPSB1cmJfbGVuZ3RoOwpAQCAtNDI5LDEwICs0ODksMTIgQEAKIAkJZGlyID0gMDsKIAl9CiAKLQlpZiAocnAtPm1tYXBfYWN0aXZlKQotCQlvZmZzZXQgPSBtb25fYnVmZl9hcmVhX2FsbG9jX2NvbnRpZ3VvdXMocnAsIGxlbmd0aCArIFBLVF9TSVpFKTsKLQllbHNlCi0JCW9mZnNldCA9IG1vbl9idWZmX2FyZWFfYWxsb2MocnAsIGxlbmd0aCArIFBLVF9TSVpFKTsKKwlpZiAocnAtPm1tYXBfYWN0aXZlKSB7CisJCW9mZnNldCA9IG1vbl9idWZmX2FyZWFfYWxsb2NfY29udGlndW91cyhycCwKKwkJCQkJCSBsZW5ndGggKyBQS1RfU0laRSArIGxlbmRlc2MpOworCX0gZWxzZSB7CisJCW9mZnNldCA9IG1vbl9idWZmX2FyZWFfYWxsb2MocnAsIGxlbmd0aCArIFBLVF9TSVpFICsgbGVuZGVzYyk7CisJfQogCWlmIChvZmZzZXQgPT0gfjApIHsKIAkJcnAtPmNudF9sb3N0Kys7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwLT5iX2xvY2ssIGZsYWdzKTsKQEAgLTQ1Niw5ICs1MTgsMzEgQEAKIAllcC0+dHNfdXNlYyA9IHRzLnR2X3VzZWM7CiAJZXAtPnN0YXR1cyA9IHN0YXR1czsKIAllcC0+bGVuX3VyYiA9IHVyYl9sZW5ndGg7Ci0JZXAtPmxlbl9jYXAgPSBsZW5ndGg7CisJZXAtPmxlbl9jYXAgPSBsZW5ndGggKyBsZW5kZXNjOworCWVwLT54ZmVyX2ZsYWdzID0gdXJiLT50cmFuc2Zlcl9mbGFnczsKIAotCWVwLT5mbGFnX3NldHVwID0gbW9uX2Jpbl9nZXRfc2V0dXAoZXAtPnNldHVwLCB1cmIsIGV2X3R5cGUpOworCWlmICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSkgeworCQllcC0+aW50ZXJ2YWwgPSB1cmItPmludGVydmFsOworCX0gZWxzZSBpZiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpKSB7CisJCWVwLT5pbnRlcnZhbCA9IHVyYi0+aW50ZXJ2YWw7CisJCWVwLT5zdGFydF9mcmFtZSA9IHVyYi0+c3RhcnRfZnJhbWU7CisJCWVwLT5zLmlzby5lcnJvcl9jb3VudCA9IHVyYi0+ZXJyb3JfY291bnQ7CisJCWVwLT5zLmlzby5udW1kZXNjID0gdXJiLT5udW1iZXJfb2ZfcGFja2V0czsKKwl9CisKKwlpZiAodXNiX2VuZHBvaW50X3hmZXJfY29udHJvbChlcGQpICYmIGV2X3R5cGUgPT0gJ1MnKSB7CisJCWVwLT5mbGFnX3NldHVwID0gbW9uX2Jpbl9nZXRfc2V0dXAoZXAtPnMuc2V0dXAsIHVyYiwgZXZfdHlwZSk7CisJfSBlbHNlIHsKKwkJZXAtPmZsYWdfc2V0dXAgPSAnLSc7CisJfQorCisJaWYgKG5kZXNjICE9IDApIHsKKwkJZXAtPm5kZXNjID0gbmRlc2M7CisJCW1vbl9iaW5fZ2V0X2lzb2Rlc2MocnAsIG9mZnNldCwgdXJiLCBldl90eXBlLCBuZGVzYyk7CisJCWlmICgob2Zmc2V0ICs9IGxlbmRlc2MpID49IHJwLT5iX3NpemUpCisJCQlvZmZzZXQgLT0gcnAtPmJfc2l6ZTsKKwl9CisKIAlpZiAobGVuZ3RoICE9IDApIHsKIAkJZXAtPmZsYWdfZGF0YSA9IG1vbl9iaW5fZ2V0X2RhdGEocnAsIG9mZnNldCwgdXJiLCBsZW5ndGgpOwogCQlpZiAoZXAtPmZsYWdfZGF0YSAhPSAwKSB7CS8qIFllcywgaXQncyAweDAwLCBub3QgJzAnICovCkBAIC01OTIsNyArNjc2LDggQEAKICAqIFJldHVybnMgemVybyBvciBlcnJvci4KICAqLwogc3RhdGljIGludCBtb25fYmluX2dldF9ldmVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IG1vbl9yZWFkZXJfYmluICpycCwKLSAgICBzdHJ1Y3QgbW9uX2Jpbl9oZHIgX191c2VyICpoZHIsIHZvaWQgX191c2VyICpkYXRhLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQorICAgIHN0cnVjdCBtb25fYmluX2hkciBfX3VzZXIgKmhkciwgdW5zaWduZWQgaW50IGhkcmJ5dGVzLAorICAgIHZvaWQgX191c2VyICpkYXRhLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG1vbl9iaW5faGRyICplcDsKQEAgLTYwOSw3ICs2OTQsNyBAQAogCiAJZXAgPSBNT05fT0ZGMkhEUihycCwgcnAtPmJfb3V0KTsKIAotCWlmIChjb3B5X3RvX3VzZXIoaGRyLCBlcCwgc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcikpKSB7CisJaWYgKGNvcHlfdG9fdXNlcihoZHIsIGVwLCBoZHJieXRlcykpIHsKIAkJbXV0ZXhfdW5sb2NrKCZycC0+ZmV0Y2hfbG9jayk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KQEAgLTY1Nyw2ICs3NDIsNyBAQAogICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBoZHJieXRlcyA9IFBLVF9TWl9BUEkwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IG1vbl9iaW5faGRyICplcDsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwpAQCAtNjc0LDggKzc2MCw4IEBACiAKIAllcCA9IE1PTl9PRkYySERSKHJwLCBycC0+Yl9vdXQpOwogCi0JaWYgKHJwLT5iX3JlYWQgPCBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKSkgewotCQlzdGVwX2xlbiA9IG1pbihuYnl0ZXMsIHNpemVvZihzdHJ1Y3QgbW9uX2Jpbl9oZHIpIC0gcnAtPmJfcmVhZCk7CisJaWYgKHJwLT5iX3JlYWQgPCBoZHJieXRlcykgeworCQlzdGVwX2xlbiA9IG1pbihuYnl0ZXMsIChzaXplX3QpKGhkcmJ5dGVzIC0gcnAtPmJfcmVhZCkpOwogCQlwdHIgPSAoKGNoYXIgKillcCkgKyBycC0+Yl9yZWFkOwogCQlpZiAoc3RlcF9sZW4gJiYgY29weV90b191c2VyKGJ1ZiwgcHRyLCBzdGVwX2xlbikpIHsKIAkJCW11dGV4X3VubG9jaygmcnAtPmZldGNoX2xvY2spOwpAQCAtNjg3LDEzICs3NzMsMTMgQEAKIAkJZG9uZSArPSBzdGVwX2xlbjsKIAl9CiAKLQlpZiAocnAtPmJfcmVhZCA+PSBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKSkgeworCWlmIChycC0+Yl9yZWFkID49IGhkcmJ5dGVzKSB7CiAJCXN0ZXBfbGVuID0gZXAtPmxlbl9jYXA7Ci0JCXN0ZXBfbGVuIC09IHJwLT5iX3JlYWQgLSBzaXplb2Yoc3RydWN0IG1vbl9iaW5faGRyKTsKKwkJc3RlcF9sZW4gLT0gcnAtPmJfcmVhZCAtIGhkcmJ5dGVzOwogCQlpZiAoc3RlcF9sZW4gPiBuYnl0ZXMpCiAJCQlzdGVwX2xlbiA9IG5ieXRlczsKIAkJb2Zmc2V0ID0gcnAtPmJfb3V0ICsgUEtUX1NJWkU7Ci0JCW9mZnNldCArPSBycC0+Yl9yZWFkIC0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcik7CisJCW9mZnNldCArPSBycC0+Yl9yZWFkIC0gaGRyYnl0ZXM7CiAJCWlmIChvZmZzZXQgPj0gcnAtPmJfc2l6ZSkKIAkJCW9mZnNldCAtPSBycC0+Yl9zaXplOwogCQlpZiAoY29weV9mcm9tX2J1ZihycCwgb2Zmc2V0LCBidWYsIHN0ZXBfbGVuKSkgewpAQCAtNzA5LDcgKzc5NSw3IEBACiAJLyoKIAkgKiBDaGVjayBpZiB3aG9sZSBwYWNrZXQgd2FzIHJlYWQsIGFuZCBpZiBzbywganVtcCB0byB0aGUgbmV4dCBvbmUuCiAJICovCi0JaWYgKHJwLT5iX3JlYWQgPj0gc2l6ZW9mKHN0cnVjdCBtb25fYmluX2hkcikgKyBlcC0+bGVuX2NhcCkgeworCWlmIChycC0+Yl9yZWFkID49IGhkcmJ5dGVzICsgZXAtPmxlbl9jYXApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJwLT5iX2xvY2ssIGZsYWdzKTsKIAkJbW9uX2J1ZmZfYXJlYV9mcmVlKHJwLCBQS1RfU0laRSArIGVwLT5sZW5fY2FwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnAtPmJfbG9jaywgZmxhZ3MpOwpAQCAtOTA4LDYgKzk5NCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNT05fSU9DWF9HRVQ6CisJY2FzZSBNT05fSU9DWF9HRVRYOgogCQl7CiAJCXN0cnVjdCBtb25fYmluX2dldCBnZXRiOwogCkBAIC05MTcsOCArMTAwNCw5IEBACiAKIAkJaWYgKGdldGIuYWxsb2MgPiAweDEwMDAwMDAwKQkvKiBXYW50IHRvIGNhc3QgdG8gdTMyICovCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0ID0gbW9uX2Jpbl9nZXRfZXZlbnQoZmlsZSwgcnAsCi0JCQkgIGdldGIuaGRyLCBnZXRiLmRhdGEsICh1bnNpZ25lZCBpbnQpZ2V0Yi5hbGxvYyk7CisJCXJldCA9IG1vbl9iaW5fZ2V0X2V2ZW50KGZpbGUsIHJwLCBnZXRiLmhkciwKKwkJICAgIChjbWQgPT0gTU9OX0lPQ1hfR0VUKT8gUEtUX1NaX0FQSTA6IFBLVF9TWl9BUEkxLAorCQkgICAgZ2V0Yi5kYXRhLCAodW5zaWduZWQgaW50KWdldGIuYWxsb2MpOwogCQl9CiAJCWJyZWFrOwogCkBAIC05ODQsMTYgKzEwNzIsMTggQEAKIAogCXN3aXRjaCAoY21kKSB7CiAKLQljYXNlIE1PTl9JT0NYX0dFVDMyOiB7CisJY2FzZSBNT05fSU9DWF9HRVQzMjoKKwljYXNlIE1PTl9JT0NYX0dFVFgzMjoKKwkJewogCQlzdHJ1Y3QgbW9uX2Jpbl9nZXQzMiBnZXRiOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmZ2V0YiwgKHZvaWQgX191c2VyICopYXJnLAogCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBtb25fYmluX2dldDMyKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlyZXQgPSBtb25fYmluX2dldF9ldmVudChmaWxlLCBycCwKLQkJICAgIGNvbXBhdF9wdHIoZ2V0Yi5oZHIzMiksIGNvbXBhdF9wdHIoZ2V0Yi5kYXRhMzIpLAotCQkgICAgZ2V0Yi5hbGxvYzMyKTsKKwkJcmV0ID0gbW9uX2Jpbl9nZXRfZXZlbnQoZmlsZSwgcnAsIGNvbXBhdF9wdHIoZ2V0Yi5oZHIzMiksCisJCSAgICAoY21kID09IE1PTl9JT0NYX0dFVDMyKT8gUEtUX1NaX0FQSTA6IFBLVF9TWl9BUEkxLAorCQkgICAgY29tcGF0X3B0cihnZXRiLmRhdGEzMiksIGdldGIuYWxsb2MzMik7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCmluZGV4IDk5ODVkYjAuLmI2NmU4NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKQEAgLTIwLDggKzIwLDggQEAKIAkgIGl0J3MgYmVpbmcgdXNlZCB3aXRoLCBpbmNsdWRpbmcgdGhlIFVTQiBwZXJpcGhlcmFsIHJvbGUsCiAJICBvciB0aGUgVVNCIGhvc3Qgcm9sZSwgb3IgYm90aC4KIAotCSAgVGV4YXMgSW5zdHJ1bWVudHMgcGFydHMgdXNpbmcgdGhpcyBJUCBpbmNsdWRlIERhVmluY2kgNjQ0eCwKLQkgIE9NQVAgMjQzeCwgT01BUCAzNDN4LCBhbmQgVFVTQiA2MDEwLgorCSAgVGV4YXMgSW5zdHJ1bWVudHMgZmFtaWxpaWVzIHVzaW5nIHRoaXMgSVAgaW5jbHVkZSBEYVZpbmNpCisJICAoMzV4LCA2NDR4IC4uLiksIE9NQVAgMjQzeCwgT01BUCAzLCBhbmQgVFVTQiA2MDEwLgogCiAJICBBbmFsb2cgRGV2aWNlcyBwYXJ0cyB1c2luZyB0aGlzIElQIGluY2x1ZGUgQmxhY2tmaW4gQkY1NHgsCiAJICBCRjUyNSBhbmQgQkY1MjcuCkBAIC00MCw3ICs0MCw3IEBACiAJZGVmYXVsdCB5IGlmIChCRjU0eCAmJiAhQkY1NDQpCiAJZGVmYXVsdCB5IGlmIChCRjUyeCAmJiAhQkY1MjIgJiYgIUJGNTIzKQogCi1jb21tZW50ICJEYVZpbmNpIDY0NHggVVNCIHN1cHBvcnQiCitjb21tZW50ICJEYVZpbmNpIDM1eCBhbmQgNjQ0eCBVU0Igc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgQVJDSF9EQVZJTkNJCiAKIGNvbW1lbnQgIk9NQVAgMjQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmMgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwppbmRleCAyZGM3NjA2Li4xMGQxMWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYwpAQCAtNDgsNiArNDgsOSBAQAogI2luY2x1ZGUgImNwcGlfZG1hLmgiCiAKIAorI2RlZmluZSBVU0JfUEhZX0NUUkwJSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKQorI2RlZmluZSBETTM1NV9ERUVQU0xFRVAJSU9fQUREUkVTUyhETTM1NV9ERUVQU0xFRVBfUEFERFIpCisKIC8qIFJFVklTSVQgKFBNKSB3ZSBzaG91bGQgYmUgYWJsZSB0byBrZWVwIHRoZSBQSFkgaW4gbG93IHBvd2VyIG1vZGUgbW9zdAogICogb2YgdGhlIHRpbWUgKDI0IE1IWiBvc2NpbGxhdG9yIGFuZCBQTEwgb2ZmLCBldGMpIGJ5IHNldHRpbmcgUE9XRVIuRDAKICAqIGFuZCwgd2hlbiBpbiBob3N0IG1vZGUsIGF1dG9zdXNwZW5kaW5nIGlkbGUgcm9vdCBwb3J0cy4uLiBQSFlQTExPTgpAQCAtNTYsMjAgKzU5LDI2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfb24odm9pZCkKIHsKLQkvKiBzdGFydCB0aGUgb24tY2hpcCBQSFkgYW5kIGl0cyBQTEwgKi8KLQlfX3Jhd193cml0ZWwoVVNCUEhZX1NFU05ERU4gfCBVU0JQSFlfVkJEVENURU4gfCBVU0JQSFlfUEhZUExMT04sCi0JCQkodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikgSU9fQUREUkVTUyhVU0JQSFlfQ1RMX1BBRERSKSk7Ci0Jd2hpbGUgKChfX3Jhd19yZWFkbCgodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikKLQkJCQlJT19BRERSRVNTKFVTQlBIWV9DVExfUEFERFIpKQotCQkJJiBVU0JQSFlfUEhZQ0xLR0QpID09IDApCisJdTMyCXBoeV9jdHJsID0gX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKTsKKworCS8qIHBvd2VyIGV2ZXJ5dGhpbmcgdXA7IHN0YXJ0IHRoZSBvbi1jaGlwIFBIWSBhbmQgaXRzIFBMTCAqLworCXBoeV9jdHJsICY9IH4oVVNCUEhZX09TQ1BEV04gfCBVU0JQSFlfT1RHUERXTiB8IFVTQlBIWV9QSFlQRFdOKTsKKwlwaHlfY3RybCB8PSBVU0JQSFlfU0VTTkRFTiB8IFVTQlBIWV9WQkRUQ1RFTiB8IFVTQlBIWV9QSFlQTExPTjsKKwlfX3Jhd193cml0ZWwocGh5X2N0cmwsIFVTQl9QSFlfQ1RSTCk7CisKKwkvKiB3YWl0IGZvciBQTEwgdG8gbG9jayBiZWZvcmUgcHJvY2VlZGluZyAqLworCXdoaWxlICgoX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKSAmIFVTQlBIWV9QSFlDTEtHRCkgPT0gMCkKIAkJY3B1X3JlbGF4KCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwaHlfb2ZmKHZvaWQpCiB7Ci0JLyogcG93ZXJkb3duIHRoZSBvbi1jaGlwIFBIWSBhbmQgaXRzIG9zY2lsbGF0b3IgKi8KLQlfX3Jhd193cml0ZWwoVVNCUEhZX09TQ1BEV04gfCBVU0JQSFlfUEhZUERXTiwgKHZvaWQgX19mb3JjZSBfX2lvbWVtICopCi0JCQlJT19BRERSRVNTKFVTQlBIWV9DVExfUEFERFIpKTsKKwl1MzIJcGh5X2N0cmwgPSBfX3Jhd19yZWFkbChVU0JfUEhZX0NUUkwpOworCisJLyogcG93ZXJkb3duIHRoZSBvbi1jaGlwIFBIWSwgaXRzIFBMTCwgYW5kIHRoZSBPVEcgYmxvY2sgKi8KKwlwaHlfY3RybCAmPSB+KFVTQlBIWV9TRVNOREVOIHwgVVNCUEhZX1ZCRFRDVEVOIHwgVVNCUEhZX1BIWVBMTE9OKTsKKwlwaHlfY3RybCB8PSBVU0JQSFlfT1NDUERXTiB8IFVTQlBIWV9PVEdQRFdOIHwgVVNCUEhZX1BIWVBEV047CisJX19yYXdfd3JpdGVsKHBoeV9jdHJsLCBVU0JfUEhZX0NUUkwpOwogfQogCiBzdGF0aWMgaW50IGRtYV9vZmYgPSAxOwpAQCAtMTI2LDEwICsxMzUsNiBAQAogfQogCiAKLS8qIFJFVklTSVQgaXQncyBub3QgY2xlYXIgd2hldGhlciBEYVZpbmNpIGNhbiBzdXBwb3J0IGZ1bGwgT1RHLiAgKi8KLQotc3RhdGljIGludCB2YnVzX3N0YXRlID0gLTE7Ci0KICNpZmRlZiBDT05GSUdfVVNCX01VU0JfSERSQ19IQ0QKICNkZWZpbmUJcG9ydHN0YXRlKHN0bXQpCQlzdG10CiAjZWxzZQpAQCAtMTM3LDEwICsxNDIsMTkgQEAKICNlbmRpZgogCiAKLS8qIFZCVVMgU1dJVENISU5HIElTIEJPQVJELVNQRUNJRklDICovCisvKgorICogVkJVUyBTV0lUQ0hJTkcgSVMgQk9BUkQtU1BFQ0lGSUMgLi4uIGF0IGxlYXN0IGZvciB0aGUgRE02NDQ2IEVWTSwKKyAqIHdoaWNoIGRvZXNuJ3Qgd2lyZSBEUlZWQlVTIHRvIHRoZSBGRVQgdGhhdCBzd2l0Y2hlcyBpdC4gIFVuY2xlYXIKKyAqIGlmIHRoYXQncyBhIHByb2JsZW0gd2l0aCB0aGUgRE02NDQ2IGNoaXAgb3IganVzdCB3aXRoIHRoYXQgYm9hcmQuCisgKgorICogSW4gZWl0aGVyIGNhc2UsIHRoZSBETTM1NSBFVk0gYXV0b21hdGVzIERSVlZCVVMgdGhlIG5vcm1hbCB3YXksCisgKiB3aGVuIEoxMCBpcyBvdXQsIGFuZCBUSSBkb2N1bWVudHMgaXQgYXMgaGFuZGxpbmcgT1RHLgorICovCiAKICNpZmRlZiBDT05GSUdfTUFDSF9EQVZJTkNJX0VWTQogCitzdGF0aWMgaW50IHZidXNfc3RhdGUgPSAtMTsKKwogLyogSTJDIG9wZXJhdGlvbnMgYXJlIGFsd2F5cyBzeW5jaHJvbm91cywgYW5kIHJlcXVpcmUgYSB0YXNrIGNvbnRleHQuCiAgKiBXaXRoIHVubG9hZGVkIHN5c3RlbXMsIHVzaW5nIHRoZSBzaGFyZWQgd29ya3F1ZXVlIHNlZW1zIHRvIHN1ZmZpY2UKICAqIHRvIHNhdGlzZnkgdGhlIDEwMG1zZWMgQV9XQUlUX1ZSSVNFIHRpbWVvdXQuLi4KQEAgLTE1MCwxMiArMTY0LDEyIEBACiAJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoR1BJT19uVkJVU19EUlYsIHZidXNfc3RhdGUpOwogCXZidXNfc3RhdGUgPSAhdmJ1c19zdGF0ZTsKIH0KLXN0YXRpYyBERUNMQVJFX1dPUksoZXZtX3ZidXNfd29yaywgZXZtX2RlZmVycmVkX2RydnZidXMpOwogCiAjZW5kaWYJLyogRVZNICovCiAKIHN0YXRpYyB2b2lkIGRhdmluY2lfc291cmNlX3Bvd2VyKHN0cnVjdCBtdXNiICptdXNiLCBpbnQgaXNfb24sIGludCBpbW1lZGlhdGUpCiB7CisjaWZkZWYgQ09ORklHX01BQ0hfREFWSU5DSV9FVk0KIAlpZiAoaXNfb24pCiAJCWlzX29uID0gMTsKIApAQCAtMTYzLDE2ICsxNzcsMTcgQEAKIAkJcmV0dXJuOwogCXZidXNfc3RhdGUgPSAhaXNfb247CQkvKiAwLzEgdnMgIi0xID09IHVua25vd24vaW5pdCIgKi8KIAotI2lmZGVmIENPTkZJR19NQUNIX0RBVklOQ0lfRVZNCiAJaWYgKG1hY2hpbmVfaXNfZGF2aW5jaV9ldm0oKSkgeworCQlzdGF0aWMgREVDTEFSRV9XT1JLKGV2bV92YnVzX3dvcmssIGV2bV9kZWZlcnJlZF9kcnZ2YnVzKTsKKwogCQlpZiAoaW1tZWRpYXRlKQogCQkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoR1BJT19uVkJVU19EUlYsIHZidXNfc3RhdGUpOwogCQllbHNlCiAJCQlzY2hlZHVsZV93b3JrKCZldm1fdmJ1c193b3JrKTsKIAl9Ci0jZW5kaWYKIAlpZiAoaW1tZWRpYXRlKQogCQl2YnVzX3N0YXRlID0gaXNfb247CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgZGF2aW5jaV9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQpAQCAtMzkxLDYgKzQwNiwxNyBAQAogCW11c2ItPmJvYXJkX3NldF92YnVzID0gZGF2aW5jaV9zZXRfdmJ1czsKIAlkYXZpbmNpX3NvdXJjZV9wb3dlcihtdXNiLCAwLCAxKTsKIAorCS8qIGRtMzU1IEVWTSBzd2FwcyBEKy9ELSBmb3Igc2lnbmFsIGludGVncml0eSwgYW5kCisJICogaXMgY2xvY2tlZCBmcm9tIHRoZSBtYWluIDI0IE1IeiBjcnlzdGFsLgorCSAqLworCWlmIChtYWNoaW5lX2lzX2RhdmluY2lfZG0zNTVfZXZtKCkpIHsKKwkJdTMyCXBoeV9jdHJsID0gX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKTsKKworCQlwaHlfY3RybCAmPSB+KDMgPDwgOSk7CisJCXBoeV9jdHJsIHw9IFVTQlBIWV9EQVRBUE9MOworCQlfX3Jhd193cml0ZWwocGh5X2N0cmwsIFVTQl9QSFlfQ1RSTCk7CisJfQorCiAJLyogcmVzZXQgdGhlIGNvbnRyb2xsZXIgKi8KIAltdXNiX3dyaXRlbCh0aWJhc2UsIERBVklOQ0lfVVNCX0NUUkxfUkVHLCAweDEpOwogCkBAIC00MDEsOCArNDI3LDcgQEAKIAogCS8qIE5PVEU6ICBpcnFzIGFyZSBpbiBtaXhlZCBtb2RlLCBub3QgYnlwYXNzIHRvIHB1cmUtbXVzYiAqLwogCXByX2RlYnVnKCJEYVZpbmNpIE9URyByZXZpc2lvbiAlMDh4IHBoeSAlMDN4IGNvbnRyb2wgJTAyeFxuIiwKLQkJcmV2aXNpb24sIF9fcmF3X3JlYWRsKCh2b2lkIF9fZm9yY2UgX19pb21lbSAqKQotCQkJCUlPX0FERFJFU1MoVVNCUEhZX0NUTF9QQUREUikpLAorCQlyZXZpc2lvbiwgX19yYXdfcmVhZGwoVVNCX1BIWV9DVFJMKSwKIAkJbXVzYl9yZWFkYih0aWJhc2UsIERBVklOQ0lfVVNCX0NUUkxfUkVHKSk7CiAKIAltdXNiLT5pc3IgPSBkYXZpbmNpX2ludGVycnVwdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5oIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmgKaW5kZXggN2ZiNjIzOC4uMDQ2Yzg0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9kYXZpbmNpLmgKQEAgLTE1LDE0ICsxNSwyMSBAQAogICovCiAKIC8qIEludGVncmF0ZWQgaGlnaHNwZWVkL290ZyBQSFkgKi8KLSNkZWZpbmUJVVNCUEhZX0NUTF9QQUREUgkoREFWSU5DSV9TWVNURU1fTU9EVUxFX0JBU0UgKyAweDM0KQotI2RlZmluZQlVU0JQSFlfUEhZQ0xLR0QJCSgxIDw8IDgpCi0jZGVmaW5lCVVTQlBIWV9TRVNOREVOCQkoMSA8PCA3KQkvKiB2KHNlc3NfZW5kKSBjb21wYXJhdG9yICovCi0jZGVmaW5lCVVTQlBIWV9WQkRUQ1RFTgkJKDEgPDwgNikJLyogdihidXMpIGNvbXBhcmF0b3IgKi8KLSNkZWZpbmUJVVNCUEhZX1BIWVBMTE9OCQkoMSA8PCA0KQkvKiBvdmVycmlkZSBwbGwgc3VzcGVuZCAqLwotI2RlZmluZQlVU0JQSFlfQ0xLTzFTRUwJCSgxIDw8IDMpCi0jZGVmaW5lCVVTQlBIWV9PU0NQRFdOCQkoMSA8PCAyKQotI2RlZmluZQlVU0JQSFlfUEhZUERXTgkJKDEgPDwgMCkKKyNkZWZpbmUgVVNCUEhZX0NUTF9QQUREUgkoREFWSU5DSV9TWVNURU1fTU9EVUxFX0JBU0UgKyAweDM0KQorI2RlZmluZSBVU0JQSFlfREFUQVBPTAkJQklUKDExKQkvKiAoZG0zNTUpIHN3aXRjaCBEKy9ELSAqLworI2RlZmluZSBVU0JQSFlfUEhZQ0xLR0QJCUJJVCg4KQorI2RlZmluZSBVU0JQSFlfU0VTTkRFTgkJQklUKDcpCS8qIHYoc2Vzc19lbmQpIGNvbXBhcmF0b3IgKi8KKyNkZWZpbmUgVVNCUEhZX1ZCRFRDVEVOCQlCSVQoNikJLyogdihidXMpIGNvbXBhcmF0b3IgKi8KKyNkZWZpbmUgVVNCUEhZX1ZCVVNTRU5TCQlCSVQoNSkJLyogKGRtMzU1LHJvKSBpcyB2YnVzID4gMC41ViAqLworI2RlZmluZSBVU0JQSFlfUEhZUExMT04JCUJJVCg0KQkvKiBvdmVycmlkZSBwbGwgc3VzcGVuZCAqLworI2RlZmluZSBVU0JQSFlfQ0xLTzFTRUwJCUJJVCgzKQorI2RlZmluZSBVU0JQSFlfT1NDUERXTgkJQklUKDIpCisjZGVmaW5lIFVTQlBIWV9PVEdQRFdOCQlCSVQoMSkKKyNkZWZpbmUgVVNCUEhZX1BIWVBEV04JCUJJVCgwKQorCisjZGVmaW5lIERNMzU1X0RFRVBTTEVFUF9QQUREUgkoREFWSU5DSV9TWVNURU1fTU9EVUxFX0JBU0UgKyAweDQ4KQorI2RlZmluZSBEUlZWQlVTX0ZPUkNFCQlCSVQoMikKKyNkZWZpbmUgRFJWVkJVU19PVkVSUklERQlCSVQoMSkKIAogLyogRm9yIG5vdyBpbmNsdWRlIHVzYiBPVEcgbW9kdWxlIHJlZ2lzdGVycyBoZXJlICovCiAjZGVmaW5lIERBVklOQ0lfVVNCX1ZFUlNJT05fUkVHCQkweDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCBhZjc3ZTQ2Li4zMzhjZDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTc2OSw3ICs3NjksNyBAQAogCQljYXNlIE9UR19TVEFURV9BX1NVU1BFTkQ6CiAJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihtdXNiX3RvX2hjZChtdXNiKSk7CiAJCQltdXNiX3Jvb3RfZGlzY29ubmVjdChtdXNiKTsKLQkJCWlmIChtdXNiLT5hX3dhaXRfYmNvbiAhPSAwKQorCQkJaWYgKG11c2ItPmFfd2FpdF9iY29uICE9IDAgJiYgaXNfb3RnX2VuYWJsZWQobXVzYikpCiAJCQkJbXVzYl9wbGF0Zm9ybV90cnlfaWRsZShtdXNiLCBqaWZmaWVzCiAJCQkJCSsgbXNlY3NfdG9famlmZmllcyhtdXNiLT5hX3dhaXRfYmNvbikpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAppbmRleCA2MzA5NDZhLi5lZmIzOWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKQEAgLTMzMSw3ICszMzEsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJY29udHJvbDsJLyogb2YgbXVzYl9xaCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJaW5fYnVsazsJLyogb2YgbXVzYl9xaCAqLwogCXN0cnVjdCBsaXN0X2hlYWQJb3V0X2J1bGs7CS8qIG9mIG11c2JfcWggKi8KLQlzdHJ1Y3QgbXVzYl9xaAkJKnBlcmlvZGljWzMyXTsJLyogdHJlZSBvZiBpbnRlcnJ1cHQraXNvICovCiAjZW5kaWYKIAogCS8qIGNhbGxlZCB3aXRoIElSUXMgYmxvY2tlZDsgT04vbm9uemVybyBpbXBsaWVzIHN0YXJ0aW5nIGEgc2Vzc2lvbiwKQEAgLTQ3OSwxMCArNDc4LDExIEBACiBzdGF0aWMgaW5saW5lIGludCBtdXNiX3JlYWRfZmlmb3NpemUoc3RydWN0IG11c2IgKm11c2IsCiAJCXN0cnVjdCBtdXNiX2h3X2VwICpod19lcCwgdTggZXBudW0pCiB7CisJdm9pZCAqbWJhc2UgPSBtdXNiLT5tcmVnczsKIAl1OCByZWcgPSAwOwogCiAJLyogcmVhZCBmcm9tIGNvcmUgdXNpbmcgaW5kZXhlZCBtb2RlbCAqLwotCXJlZyA9IG11c2JfcmVhZGIoaHdfZXAtPnJlZ3MsIDB4MTAgKyBNVVNCX0ZJRk9TSVpFKTsKKwlyZWcgPSBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0VQX09GRlNFVChlcG51bSwgTVVTQl9GSUZPU0laRSkpOwogCS8qIDAncyByZXR1cm5lZCB3aGVuIG5vIG1vcmUgZW5kcG9pbnRzICovCiAJaWYgKCFyZWcpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTA5LDYgKzUwOSw3IEBACiB7CiAJbXVzYi0+ZW5kcG9pbnRzWzBdLm1heF9wYWNrZXRfc3pfdHggPSBNVVNCX0VQMF9GSUZPU0laRTsKIAltdXNiLT5lbmRwb2ludHNbMF0ubWF4X3BhY2tldF9zel9yeCA9IE1VU0JfRVAwX0ZJRk9TSVpFOworCW11c2ItPmVuZHBvaW50c1swXS5pc19zaGFyZWRfZmlmbyA9IHRydWU7CiB9CiAjZW5kaWYgLyogQ09ORklHX0JMQUNLRklOICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCmluZGV4IDZkYmJkMDcuLjQ5OWM0MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwpAQCAtNjQsMTEgKzY0LDggQEAKICAqCiAgKiAtIERNQSAoTWVudG9yL09NQVApIC4uLmhhcyBhdCBsZWFzdCB0b2dnbGUgdXBkYXRlIHByb2JsZW1zCiAgKgotICogLSBTdGlsbCBubyB0cmFmZmljIHNjaGVkdWxpbmcgY29kZSB0byBtYWtlIE5BS2luZyBmb3IgYnVsayBvciBjb250cm9sCi0gKiAgIHRyYW5zZmVycyB1bmFibGUgdG8gc3RhcnZlIG90aGVyIHJlcXVlc3RzOyBvciB0byBtYWtlIGVmZmljaWVudCB1c2UKLSAqICAgb2YgaGFyZHdhcmUgd2l0aCBwZXJpb2RpYyB0cmFuc2ZlcnMuICAoTm90ZSB0aGF0IG5ldHdvcmsgZHJpdmVycwotICogICBjb21tb25seSBwb3N0IGJ1bGsgcmVhZHMgdGhhdCBzdGF5IHBlbmRpbmcgZm9yIGEgbG9uZyB0aW1lOyB0aGVzZQotICogICB3b3VsZCBtYWtlIHZlcnkgdmlzaWJsZSB0cm91YmxlLikKKyAqIC0gWzIzLWZlYi0yMDA5XSBtaW5pbWFsIHRyYWZmaWMgc2NoZWR1bGluZyB0byBhdm9pZCBidWxrIFJYIHBhY2tldAorICogICBzdGFydmF0aW9uIC4uLiBub3RoaW5nIHlldCBmb3IgVFgsIGludGVycnVwdCwgb3IgYnVsay4KICAqCiAgKiAtIE5vdCB0ZXN0ZWQgd2l0aCBITlAsIGJ1dCBzb21lIFNSUCBwYXRocyBzZWVtIHRvIGJlaGF2ZS4KICAqCkBAIC04OCwxMSArODUsOCBAQAogICoKICAqIENPTlRST0wgdHJhbnNmZXJzIGFsbCBnbyB0aHJvdWdoIGVwMC4gIEJVTEsgb25lcyBnbyB0aHJvdWdoIGRlZGljYXRlZCBJTgogICogYW5kIE9VVCBlbmRwb2ludHMgLi4uIGhhcmR3YXJlIGlzIGRlZGljYXRlZCBmb3IgdGhvc2UgImFzeW5jIiBxdWV1ZShzKS4KLSAqCiAgKiAoWWVzLCBidWxrIF9jb3VsZF8gdXNlIG1vcmUgb2YgdGhlIGVuZHBvaW50cyB0aGFuIHRoYXQsIGFuZCB3b3VsZCBldmVuCi0gKiBiZW5lZml0IGZyb20gaXQgLi4uIG9uZSByZW1vdGUgZGV2aWNlIG1heSBlYXNpbHkgYmUgTkFLaW5nIHdoaWxlIG90aGVycwotICogbmVlZCB0byBwZXJmb3JtIHRyYW5zZmVycyBpbiB0aGF0IHNhbWUgZGlyZWN0aW9uLiAgVGhlIHNhbWUgdGhpbmcgY291bGQKLSAqIGJlIGRvbmUgaW4gc29mdHdhcmUgdGhvdWdoLCBhc3N1bWluZyBkbWEgY29vcGVyYXRlcy4pCisgKiBiZW5lZml0IGZyb20gaXQuKQogICoKICAqIElOVEVSVVBQVCBhbmQgSVNPQ0hST05PVVMgdHJhbnNmZXJzIGFyZSBzY2hlZHVsZWQgdG8gdGhlIG90aGVyIGVuZHBvaW50cy4KICAqIFNvIGZhciB0aGF0IHNjaGVkdWxpbmcgaXMgYm90aCBkdW1iIGFuZCBvcHRpbWlzdGljOiAgdGhlIGVuZHBvaW50IHdpbGwgYmUKQEAgLTIwMSw4ICsxOTUsOSBAQAogCQlsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjWzBdLmxlbmd0aDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoJCS8qIGJ1bGssIGludGVycnVwdCAqLwotCQlidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQkJbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOworCQkvKiBhY3R1YWxfbGVuZ3RoIG1heSBiZSBub256ZXJvIG9uIHJldHJ5IHBhdGhzICovCisJCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoOworCQlsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLSB1cmItPmFjdHVhbF9sZW5ndGg7CiAJfQogCiAJREJHKDQsICJxaCAlcCB1cmIgJXAgZGV2JWQgZXAlZCVzJXMsIGh3X2VwICVkLCAlcC8lZFxuIiwKQEAgLTM5NSw3ICszOTAsNiBAQAogCQkJICogZGUtYWxsb2NhdGVkIGlmIGl0J3MgdHJhY2tlZCBhbmQgYWxsb2NhdGVkOwogCQkJICogYW5kIHdoZXJlIHdlJ2QgdXBkYXRlIHRoZSBzY2hlZHVsZSB0cmVlLi4uCiAJCQkgKi8KLQkJCW11c2ItPnBlcmlvZGljW2VwLT5lcG51bV0gPSBOVUxMOwogCQkJa2ZyZWUocWgpOwogCQkJcWggPSBOVUxMOwogCQkJYnJlYWs7CkBAIC0xMDQ1LDcgKzEwMzksOCBAQAogCiAJCS8qIE5PVEU6ICB0aGlzIGNvZGUgcGF0aCB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gUEFVU0UgYQogCQkgKiBjb250cm9sIHRyYW5zZmVyLCBpZiBhbm90aGVyIG9uZSBpcyBxdWV1ZWQsIHNvIHRoYXQKLQkJICogZXAwIGlzIG1vcmUgbGlrZWx5IHRvIHN0YXkgYnVzeS4KKwkJICogZXAwIGlzIG1vcmUgbGlrZWx5IHRvIHN0YXkgYnVzeS4gIFRoYXQncyBhbHJlYWR5IGRvbmUKKwkJICogZm9yIGJ1bGsgUlggdHJhbnNmZXJzLgogCQkgKgogCQkgKiBpZiAocWgtPnJpbmcubmV4dCAhPSAmbXVzYi0+Y29udHJvbCksIHRoZW4KIAkJICogd2UgaGF2ZSBhIGNhbmRpZGF0ZS4uLiBOQUtpbmcgaXMgKk5PVCogYW4gZXJyb3IKQEAgLTExOTcsNiArMTE5Miw3IEBACiAJCS8qIE5PVEU6ICB0aGlzIGNvZGUgcGF0aCB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8gUEFVU0UgYQogCQkgKiB0cmFuc2ZlciwgaWYgdGhlcmUncyBzb21lIG90aGVyIChub25wZXJpb2RpYykgdHggdXJiCiAJCSAqIHRoYXQgY291bGQgdXNlIHRoaXMgZmlmby4gIChkbWEgY29tcGxpY2F0ZXMgaXQuLi4pCisJCSAqIFRoYXQncyBhbHJlYWR5IGRvbmUgZm9yIGJ1bGsgUlggdHJhbnNmZXJzLgogCQkgKgogCQkgKiBpZiAoYnVsayAmJiBxaC0+cmluZy5uZXh0ICE9ICZtdXNiLT5vdXRfYnVsayksIHRoZW4KIAkJICogd2UgaGF2ZSBhIGNhbmRpZGF0ZS4uLiBOQUtpbmcgaXMgKk5PVCogYW4gZXJyb3IKQEAgLTEzNTgsNiArMTM1NCw1MCBAQAogCiAjZW5kaWYKIAorLyogU2NoZWR1bGUgbmV4dCBRSCBmcm9tIG11c2ItPmluX2J1bGsgYW5kIG1vdmUgdGhlIGN1cnJlbnQgcWggdG8KKyAqIHRoZSBlbmQ7IGF2b2lkcyBzdGFydmF0aW9uIGZvciBvdGhlciBlbmRwb2ludHMuCisgKi8KK3N0YXRpYyB2b2lkIG11c2JfYnVsa19yeF9uYWtfdGltZW91dChzdHJ1Y3QgbXVzYiAqbXVzYiwgc3RydWN0IG11c2JfaHdfZXAgKmVwKQoreworCXN0cnVjdCBkbWFfY2hhbm5lbAkqZG1hOworCXN0cnVjdCB1cmIJCSp1cmI7CisJdm9pZCBfX2lvbWVtCQkqbWJhc2UgPSBtdXNiLT5tcmVnczsKKwl2b2lkIF9faW9tZW0JCSplcGlvID0gZXAtPnJlZ3M7CisJc3RydWN0IG11c2JfcWgJCSpjdXJfcWgsICpuZXh0X3FoOworCXUxNgkJCXJ4X2NzcjsKKworCW11c2JfZXBfc2VsZWN0KG1iYXNlLCBlcC0+ZXBudW0pOworCWRtYSA9IGlzX2RtYV9jYXBhYmxlKCkgPyBlcC0+cnhfY2hhbm5lbCA6IE5VTEw7CisKKwkvKiBjbGVhciBuYWsgdGltZW91dCBiaXQgKi8KKwlyeF9jc3IgPSBtdXNiX3JlYWR3KGVwaW8sIE1VU0JfUlhDU1IpOworCXJ4X2NzciB8PSBNVVNCX1JYQ1NSX0hfV1pDX0JJVFM7CisJcnhfY3NyICY9IH5NVVNCX1JYQ1NSX0RBVEFFUlJPUjsKKwltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1JYQ1NSLCByeF9jc3IpOworCisJY3VyX3FoID0gZmlyc3RfcWgoJm11c2ItPmluX2J1bGspOworCWlmIChjdXJfcWgpIHsKKwkJdXJiID0gbmV4dF91cmIoY3VyX3FoKTsKKwkJaWYgKGRtYV9jaGFubmVsX3N0YXR1cyhkbWEpID09IE1VU0JfRE1BX1NUQVRVU19CVVNZKSB7CisJCQlkbWEtPnN0YXR1cyA9IE1VU0JfRE1BX1NUQVRVU19DT1JFX0FCT1JUOworCQkJbXVzYi0+ZG1hX2NvbnRyb2xsZXItPmNoYW5uZWxfYWJvcnQoZG1hKTsKKwkJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBkbWEtPmFjdHVhbF9sZW47CisJCQlkbWEtPmFjdHVhbF9sZW4gPSAwTDsKKwkJfQorCQltdXNiX3NhdmVfdG9nZ2xlKGVwLCAxLCB1cmIpOworCisJCS8qIG1vdmUgY3VyX3FoIHRvIGVuZCBvZiBxdWV1ZSAqLworCQlsaXN0X21vdmVfdGFpbCgmY3VyX3FoLT5yaW5nLCAmbXVzYi0+aW5fYnVsayk7CisKKwkJLyogZ2V0IHRoZSBuZXh0IHFoIGZyb20gbXVzYi0+aW5fYnVsayAqLworCQluZXh0X3FoID0gZmlyc3RfcWgoJm11c2ItPmluX2J1bGspOworCisJCS8qIHNldCByeF9yZWluaXQgYW5kIHNjaGVkdWxlIHRoZSBuZXh0IHFoICovCisJCWVwLT5yeF9yZWluaXQgPSAxOworCQltdXNiX3N0YXJ0X3VyYihtdXNiLCAxLCBuZXh0X3FoKTsKKwl9Cit9CisKIC8qCiAgKiBTZXJ2aWNlIGFuIFJYIGludGVycnVwdCBmb3IgdGhlIGdpdmVuIElOIGVuZHBvaW50OyBkb2NzIGNvdmVyIGJ1bGssIGlzbywKICAqIGFuZCBoaWdoLWJhbmR3aWR0aCBJTiB0cmFuc2ZlciBjYXNlcy4KQEAgLTE0MjEsMTggKzE0NjEsMjYgQEAKIAl9IGVsc2UgaWYgKHJ4X2NzciAmIE1VU0JfUlhDU1JfREFUQUVSUk9SKSB7CiAKIAkJaWYgKFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MgIT0gcWgtPnR5cGUpIHsKLQkJCS8qIE5PVEUgdGhpcyBjb2RlIHBhdGggd291bGQgYmUgYSBnb29kIHBsYWNlIHRvIFBBVVNFIGEKLQkJCSAqIHRyYW5zZmVyLCBpZiB0aGVyZSdzIHNvbWUgb3RoZXIgKG5vbnBlcmlvZGljKSByeCB1cmIKLQkJCSAqIHRoYXQgY291bGQgdXNlIHRoaXMgZmlmby4gIChkbWEgY29tcGxpY2F0ZXMgaXQuLi4pCi0JCQkgKgotCQkJICogaWYgKGJ1bGsgJiYgcWgtPnJpbmcubmV4dCAhPSAmbXVzYi0+aW5fYnVsayksIHRoZW4KLQkJCSAqIHdlIGhhdmUgYSBjYW5kaWRhdGUuLi4gTkFLaW5nIGlzICpOT1QqIGFuIGVycm9yCi0JCQkgKi8KIAkJCURCRyg2LCAiUlggZW5kICVkIE5BSyB0aW1lb3V0XG4iLCBlcG51bSk7CisKKwkJCS8qIE5PVEU6IE5BS2luZyBpcyAqTk9UKiBhbiBlcnJvciwgc28gd2Ugd2FudCB0bworCQkJICogY29udGludWUuICBFeGNlcHQgLi4uIGlmIHRoZXJlJ3MgYSByZXF1ZXN0IGZvcgorCQkJICogYW5vdGhlciBRSCwgdXNlIHRoYXQgaW5zdGVhZCBvZiBzdGFydmluZyBpdC4KKwkJCSAqCisJCQkgKiBEZXZpY2VzIGxpa2UgRXRoZXJuZXQgYW5kIHNlcmlhbCBhZGFwdGVycyBrZWVwCisJCQkgKiByZWFkcyBwb3N0ZWQgYXQgYWxsIHRpbWVzLCB3aGljaCB3aWxsIHN0YXJ2ZQorCQkJICogb3RoZXIgZGV2aWNlcyB3aXRob3V0IHRoaXMgbG9naWMuCisJCQkgKi8KKwkJCWlmICh1c2JfcGlwZWJ1bGsodXJiLT5waXBlKQorCQkJCQkmJiBxaC0+bXV4ID09IDEKKwkJCQkJJiYgIWxpc3RfaXNfc2luZ3VsYXIoJm11c2ItPmluX2J1bGspKSB7CisJCQkJbXVzYl9idWxrX3J4X25ha190aW1lb3V0KG11c2IsIGh3X2VwKTsKKwkJCQlyZXR1cm47CisJCQl9CiAJCQltdXNiX2VwX3NlbGVjdChtYmFzZSwgZXBudW0pOwotCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9SWENTUiwKLQkJCQkJTVVTQl9SWENTUl9IX1daQ19CSVRTCi0JCQkJCXwgTVVTQl9SWENTUl9IX1JFUVBLVCk7CisJCQlyeF9jc3IgfD0gTVVTQl9SWENTUl9IX1daQ19CSVRTOworCQkJcnhfY3NyICY9IH5NVVNCX1JYQ1NSX0RBVEFFUlJPUjsKKwkJCW11c2Jfd3JpdGV3KGVwaW8sIE1VU0JfUlhDU1IsIHJ4X2Nzcik7CiAKIAkJCWdvdG8gZmluaXNoOwogCQl9IGVsc2UgewpAQCAtMTcxMSwzMSArMTc1OSwyNyBAQAogCiAJLyogZWxzZSwgcGVyaW9kaWMgdHJhbnNmZXJzIGdldCBtdXhlZCB0byBvdGhlciBlbmRwb2ludHMgKi8KIAotCS8qIEZJWE1FIHRoaXMgZG9lc24ndCBjb25zaWRlciBkaXJlY3Rpb24sIHNvIGl0IGNhbiBvbmx5Ci0JICogd29yayBmb3Igb25lIGhhbGYgb2YgdGhlIGVuZHBvaW50IGhhcmR3YXJlLCBhbmQgYXNzdW1lcwotCSAqIHRoZSBwcmV2aW91cyBjYXNlcyBoYW5kbGVkIGFsbCBub24tc2hhcmVkIGVuZHBvaW50cy4uLgotCSAqLwotCi0JLyogd2Uga25vdyB0aGlzIHFoIGhhc24ndCBiZWVuIHNjaGVkdWxlZCwgc28gYWxsIHdlIG5lZWQgdG8gZG8KKwkvKgorCSAqIFdlIGtub3cgdGhpcyBxaCBoYXNuJ3QgYmVlbiBzY2hlZHVsZWQsIHNvIGFsbCB3ZSBuZWVkIHRvIGRvCiAJICogaXMgY2hvb3NlIHdoaWNoIGhhcmR3YXJlIGVuZHBvaW50IHRvIHB1dCBpdCBvbiAuLi4KIAkgKgogCSAqIFJFVklTSVQgd2hhdCB3ZSByZWFsbHkgd2FudCBoZXJlIGlzIGEgcmVndWxhciBzY2hlZHVsZSB0cmVlCi0JICogbGlrZSBlLmcuIE9IQ0kgdXNlcywgYnV0IGZvciBub3cgbXVzYi0+cGVyaW9kaWMgaXMganVzdCBhbgotCSAqIGFycmF5IG9mIHRoZSBfc2luZ2xlXyBsb2dpY2FsIGVuZHBvaW50IGFzc29jaWF0ZWQgd2l0aCBhCi0JICogZ2l2ZW4gcGh5c2ljYWwgb25lIChpZGVudGl0eSBtYXBwaW5nIGxvZ2ljYWwtPnBoeXNpY2FsKS4KLQkgKgotCSAqIHRoYXQgc2ltcGxpc3RpYyBhcHByb2FjaCBtYWtlcyBUVCBzY2hlZHVsaW5nIGEgbG90IHNpbXBsZXI7Ci0JICogdGhlcmUgaXMgbm9uZSwgYW5kIHRodXMgbm9uZSBvZiBpdHMgY29tcGxleGl0eS4uLgorCSAqIGxpa2UgZS5nLiBPSENJIHVzZXMuCiAJICovCiAJYmVzdF9kaWZmID0gNDA5NjsKIAliZXN0X2VuZCA9IC0xOwogCi0JZm9yIChlcG51bSA9IDE7IGVwbnVtIDwgbXVzYi0+bnJfZW5kcG9pbnRzOyBlcG51bSsrKSB7CisJZm9yIChlcG51bSA9IDEsIGh3X2VwID0gbXVzYi0+ZW5kcG9pbnRzICsgMTsKKwkJCWVwbnVtIDwgbXVzYi0+bnJfZW5kcG9pbnRzOworCQkJZXBudW0rKywgaHdfZXArKykgewogCQlpbnQJZGlmZjsKIAotCQlpZiAobXVzYi0+cGVyaW9kaWNbZXBudW1dKQorCQlpZiAoaXNfaW4gfHwgaHdfZXAtPmlzX3NoYXJlZF9maWZvKSB7CisJCQlpZiAoaHdfZXAtPmluX3FoICAhPSBOVUxMKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UJaWYgKGh3X2VwLT5vdXRfcWggIT0gTlVMTCkKIAkJCWNvbnRpbnVlOwotCQlod19lcCA9ICZtdXNiLT5lbmRwb2ludHNbZXBudW1dOworCiAJCWlmIChod19lcCA9PSBtdXNiLT5idWxrX2VwKQogCQkJY29udGludWU7CiAKQEAgLTE3NTYsNiArMTgwMCwxNyBAQAogCQkJaGVhZCA9ICZtdXNiLT5pbl9idWxrOwogCQllbHNlCiAJCQloZWFkID0gJm11c2ItPm91dF9idWxrOworCisJCS8qIEVuYWJsZSBidWxrIFJYIE5BSyB0aW1lb3V0IHNjaGVtZSB3aGVuIGJ1bGsgcmVxdWVzdHMgYXJlCisJCSAqIG11bHRpcGxleGVkLiAgVGhpcyBzY2hlbWUgZG9lbid0IHdvcmsgaW4gaGlnaCBzcGVlZCB0byBmdWxsCisJCSAqIHNwZWVkIHNjZW5hcmlvIGFzIE5BSyBpbnRlcnJ1cHRzIGFyZSBub3QgY29taW5nIGZyb20gYQorCQkgKiBmdWxsIHNwZWVkIGRldmljZSBjb25uZWN0ZWQgdG8gYSBoaWdoIHNwZWVkIGRldmljZS4KKwkJICogTkFLIHRpbWVvdXQgaW50ZXJ2YWwgaXMgOCAoMTI4IHVmcmFtZSBvciAxNm1zKSBmb3IgSFMgYW5kCisJCSAqIDQgKDggZnJhbWUgb3IgOG1zKSBmb3IgRlMgZGV2aWNlLgorCQkgKi8KKwkJaWYgKGlzX2luICYmIHFoLT5kZXYpCisJCQlxaC0+aW50dl9yZWcgPQorCQkJCShVU0JfU1BFRURfSElHSCA9PSBxaC0+ZGV2LT5zcGVlZCkgPyA4IDogNDsKIAkJZ290byBzdWNjZXNzOwogCX0gZWxzZSBpZiAoYmVzdF9lbmQgPCAwKSB7CiAJCXJldHVybiAtRU5PU1BDOwpAQCAtMTc2NCw3ICsxODE5LDYgQEAKIAlpZGxlID0gMTsKIAlxaC0+bXV4ID0gMDsKIAlod19lcCA9IG11c2ItPmVuZHBvaW50cyArIGJlc3RfZW5kOwotCW11c2ItPnBlcmlvZGljW2Jlc3RfZW5kXSA9IHFoOwogCURCRyg0LCAicWggJXAgcGVyaW9kaWMgc2xvdCAlZFxuIiwgcWgsIGJlc3RfZW5kKTsKIHN1Y2Nlc3M6CiAJaWYgKGhlYWQpIHsKQEAgLTE4ODgsMTMgKzE5NDIsMTEgQEAKIAkJICoKIAkJICogVGhlIGRvd25zaWRlIG9mIGRpc2FibGluZyB0aGlzIGlzIHRoYXQgdHJhbnNmZXIgc2NoZWR1bGluZwogCQkgKiBnZXRzIFZFUlkgdW5mYWlyIGZvciBub25wZXJpb2RpYyB0cmFuc2ZlcnM7IGEgbWlzYmVoYXZpbmcKLQkJICogcGVyaXBoZXJhbCBjb3VsZCBtYWtlIHRoYXQgaHVydC4gIE9yIGZvciByZWFkcywgb25lIHRoYXQncwotCQkgKiBwZXJmZWN0bHkgbm9ybWFsOiAgbmV0d29yayBhbmQgb3RoZXIgZHJpdmVycyBrZWVwIHJlYWRzCi0JCSAqIHBvc3RlZCBhdCBhbGwgdGltZXMsIGhhdmluZyBvbmUgcGVuZGluZyBmb3IgYSB3ZWVrIHNob3VsZAotCQkgKiBiZSBwZXJmZWN0bHkgc2FmZS4KKwkJICogcGVyaXBoZXJhbCBjb3VsZCBtYWtlIHRoYXQgaHVydC4gIFRoYXQncyBwZXJmZWN0bHkgbm9ybWFsCisJCSAqIGZvciByZWFkcyBmcm9tIG5ldHdvcmsgb3Igc2VyaWFsIGFkYXB0ZXJzIC4uLiBzbyB3ZSBoYXZlCisJCSAqIHBhcnRpYWwgTkFLbGltaXQgc3VwcG9ydCBmb3IgYnVsayBSWC4KIAkJICoKLQkJICogVGhlIHVwc2lkZSBvZiBkaXNhYmxpbmcgaXQgaXMgYXZvaWRuZyB0cmFuc2ZlciBzY2hlZHVsaW5nCi0JCSAqIGNvZGUgdG8gcHV0IHRoaXMgYXNpZGUgZm9yIHdoaWxlLgorCQkgKiBUaGUgdXBzaWRlIG9mIGRpc2FibGluZyBpdCBpcyBzaW1wbGVyIHRyYW5zZmVyIHNjaGVkdWxpbmcuCiAJCSAqLwogCQlpbnRlcnZhbCA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl92aXJ0aHViLmMKaW5kZXggZTBlOWNlNS4uYmY2NzdhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX3ZpcnRodWIuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfdmlydGh1Yi5jCkBAIC0yODUsNyArMjg1LDcgQEAKIAkJZGVzYy0+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+cG9ydFswXSk7CisKKwkvKnJlY29uZmlndXJlIGNoMzQxIHNlcmlhbCBwb3J0IGFmdGVyIGJ1cy1yZXNldCovCisJY2gzNDFfY29uZmlndXJlKGRldiwgcHJpdik7CisKKwl1c2Jfc2VyaWFsX3Jlc3VtZShpbnRmKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2gzNDFfZHJpdmVyID0gewogCS5uYW1lCQk9ICJjaDM0MSIsCiAJLnByb2JlCQk9IHVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QJPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQJPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB1c2Jfc2VyaWFsX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lCT0gY2gzNDFfcmVzZXRfcmVzdW1lLAogCS5pZF90YWJsZQk9IGlkX3RhYmxlLAogCS5ub19keW5hbWljX2lkCT0gMSwKKwkuc3VwcG9ydHNfYXV0b3N1c3BlbmQgPQkxLAogfTsKIAogc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBjaDM0MV9kZXZpY2UgPSB7CkBAIC0zMTcsMTIgKzU2NCwxNyBAQAogCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAiY2gzNDEtdWFydCIsCiAJfSwKLQkuaWRfdGFibGUgICAgICAgICA9IGlkX3RhYmxlLAotCS51c2JfZHJpdmVyICAgICAgID0gJmNoMzQxX2RyaXZlciwKLQkubnVtX3BvcnRzICAgICAgICA9IDEsCi0JLm9wZW4gICAgICAgICAgICAgPSBjaDM0MV9vcGVuLAotCS5zZXRfdGVybWlvcyAgICAgID0gY2gzNDFfc2V0X3Rlcm1pb3MsCi0JLmF0dGFjaCAgICAgICAgICAgPSBjaDM0MV9hdHRhY2gsCisJLmlkX3RhYmxlICAgICAgICAgID0gaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgICAgICAgID0gJmNoMzQxX2RyaXZlciwKKwkubnVtX3BvcnRzICAgICAgICAgPSAxLAorCS5vcGVuICAgICAgICAgICAgICA9IGNoMzQxX29wZW4sCisJLmNsb3NlICAgICAgICAgICAgID0gY2gzNDFfY2xvc2UsCisJLmlvY3RsICAgICAgICAgICAgID0gY2gzNDFfaW9jdGwsCisJLnNldF90ZXJtaW9zICAgICAgID0gY2gzNDFfc2V0X3Rlcm1pb3MsCisJLnRpb2NtZ2V0ICAgICAgICAgID0gY2gzNDFfdGlvY21nZXQsCisJLnRpb2Ntc2V0ICAgICAgICAgID0gY2gzNDFfdGlvY21zZXQsCisJLnJlYWRfaW50X2NhbGxiYWNrID0gY2gzNDFfcmVhZF9pbnRfY2FsbGJhY2ssCisJLmF0dGFjaCAgICAgICAgICAgID0gY2gzNDFfYXR0YWNoLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgY2gzNDFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEwMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjQwODJiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMDEuYworKysgL2Rldi9udWxsCkBAIC0xLDc4MSArMCwwIEBACi0vKgotICogU2lsaWNvbiBMYWJvcmF0b3JpZXMgQ1AyMTAxL0NQMjEwMiBVU0IgdG8gUlMyMzIgc2VyaWFsIGFkYXB0b3IgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IENyYWlnIFNoZWxsZXkgKGNyYWlnQG1pY3JvdHJvbi5vcmcudWspCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgotICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBTdXBwb3J0IHRvIHNldCBmbG93IGNvbnRyb2wgbGluZSBsZXZlbHMgdXNpbmcgVElPQ01HRVQgYW5kIFRJT0NNU0VUCi0gKiB0aGFua3MgdG8gS2FybCBIaXJhbW90byBrYXJsQGhpcmFtb3RvLm9yZy4gUlRTQ1RTIGhhcmR3YXJlIGZsb3cKLSAqIGNvbnRyb2wgdGhhbmtzIHRvIE11bmlyIE5hc3NhciBuYXNzYXJtdUByZWFsLXRpbWUuY29tCi0gKgotICogT3V0c3RhbmRpbmcgSXNzdWVzOgotICogIEJ1ZmZlcnMgYXJlIG5vdCBmbHVzaGVkIHdoZW4gdGhlIHBvcnQgaXMgb3BlbmVkLgotICogIE11bHRpcGxlIGNhbGxzIHRvIHdyaXRlKCkgbWF5IGZhaWwgd2l0aCAiUmVzb3VyY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUiCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KLQotLyoKLSAqIFZlcnNpb24gSW5mb3JtYXRpb24KLSAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMDciCi0jZGVmaW5lIERSSVZFUl9ERVNDICJTaWxpY29uIExhYnMgQ1AyMTAxL0NQMjEwMiBSUzIzMiBzZXJpYWwgYWRhcHRvciBkcml2ZXIiCi0KLS8qCi0gKiBGdW5jdGlvbiBQcm90b3R5cGVzCi0gKi8KLXN0YXRpYyBpbnQgY3AyMTAxX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqLAotCQkJCQkJCXN0cnVjdCBmaWxlICopOwotc3RhdGljIHZvaWQgY3AyMTAxX2NsZWFudXAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKTsKLXN0YXRpYyB2b2lkIGNwMjEwMV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICosCi0JCQkJCQkJc3RydWN0IGZpbGUqKTsKLXN0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKLXN0YXRpYyB2b2lkIGNwMjEwMV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICosCi0JCQkJCQkJc3RydWN0IGt0ZXJtaW9zKik7Ci1zdGF0aWMgaW50IGNwMjEwMV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgZmlsZSAqKTsKLXN0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICosCi0JCXVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKLXN0YXRpYyB2b2lkIGNwMjEwMV9icmVha19jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgaW50KTsKLXN0YXRpYyBpbnQgY3AyMTAxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKik7Ci1zdGF0aWMgdm9pZCBjcDIxMDFfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKik7Ci0KLQotc3RhdGljIGludCBkZWJ1ZzsKLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0gewotCXsgVVNCX0RFVklDRSgweDA0NzEsIDB4MDY2QSkgfSwgLyogQUtUQUtPTSBBQ0UtMTAwMSBjYWJsZSAqLwotCXsgVVNCX0RFVklDRSgweDA0ODksIDB4RTAwMCkgfSwgLyogUGlyZWxsaSBCcm9hZGJhbmQgUy5wLkEsIERQLUwxMCBTSVAvR1NNIE1vYmlsZSAqLwotCXsgVVNCX0RFVklDRSgweDA4ZTYsIDB4NTUwMSkgfSwgLyogR2VtYWx0byBQcm94LVBVL0NVIGNvbnRhY3RsZXNzIHNtYXJ0Y2FyZCByZWFkZXIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwRkNGLCAweDEwMDMpIH0sIC8qIER5bmFzdHJlYW0gQU5UIGRldmVsb3BtZW50IGJvYXJkICovCi0JeyBVU0JfREVWSUNFKDB4MEZDRiwgMHgxMDA0KSB9LCAvKiBEeW5hc3RyZWFtIEFOVDJVU0IgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwRkNGLCAweDEwMDYpIH0sIC8qIER5bmFzdHJlYW0gQU5UIGRldmVsb3BtZW50IGJvYXJkICovCi0JeyBVU0JfREVWSUNFKDB4MTBBNiwgMHhBQTI2KSB9LCAvKiBLbm9jay1vZmYgRENVLTExIGNhYmxlICovCi0JeyBVU0JfREVWSUNFKDB4MTBBQiwgMHgxMEM1KSB9LCAvKiBTaWVtZW5zIE1DNjAgQ2FibGUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEI1LCAweEFDNzApIH0sIC8qIE5va2lhIENBLTQyIFVTQiAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODAwQSkgfSwgLyogU1BPUlRpZGVudCBCU003LUQtVVNCIG1haW4gc3RhdGlvbiAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODAzQikgfSwgLyogUG9sb2x1IFVTQi1zZXJpYWwgY29udmVydGVyICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MDUzKSB9LCAvKiBFbmZvcmEgRURHMTIyOCAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODA1NCkgfSwgLyogRW5mb3JhIEdTTTIyMjggKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgwNjYpIH0sIC8qIEFyZ3Vzc29mdCBJbi1TeXN0ZW0gUHJvZ3JhbW1lciAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODA3QSkgfSwgLyogQ3J1bWIxMjggYm9hcmQgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgwQ0EpIH0sIC8qIERlZ3JlZSBDb250cm9scyBJbmMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgwREQpIH0sIC8qIFRyYWNpZW50IFJGSUQgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgwRjYpIH0sIC8qIFN1dW50byBzcG9ydHMgaW5zdHJ1bWVudCAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODExNSkgfSwgLyogQXJ5Z29uIE5GQy9NaWZhcmUgUmVhZGVyICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTNEKSB9LCAvKiBCdXJuc2lkZSBUZWxlY29tIERlc2ttb2JpbGUgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxNEEpIH0sIC8qIFdlc3QgTW91bnRhaW4gUmFkaW8gUklHYmxhc3RlciBQJlAgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxNEIpIH0sIC8qIFdlc3QgTW91bnRhaW4gUmFkaW8gUklHdGFsayAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE1RSkgfSwgLyogSGVsaWNvbW0gSVAtTGluayAxMjIwLURWTSAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE5RikgfSwgLyogTUpTIFVTQiBUb3NsaW5rIFN3aXRjaGVyICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUE2KSB9LCAvKiBUaGlua09wdGljcyBXYXZJdCAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFBQykgfSwgLyogTVNEIERhc2ggSGF3ayAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFDOCkgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgQmFieS1KVEFHICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUUyKSB9LCAvKiBMaXBvd3NreSBJbmR1c3RyaWUgRWxla3Ryb25payBHbWJILCBCYWJ5LUxJTiAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFFNykgfSwgLyogQWVyb2NvbW0gUmFkaW8gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyMTgpIH0sIC8qIExpcG93c2t5IEluZHVzdHJpZSBFbGVrdHJvbmlrIEdtYkgsIEhBUlAtMSAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODIyQikgfSwgLyogTW9kZW0gRURHRShHU00pIENvbWFuZGVyIDIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyNkIpIH0sIC8qIEN5Z25hbCBJbnRlZ3JhdGVkIFByb2R1Y3RzLCBJbmMuLCBGYXN0dHJheCBHUFMgZGVtb3N0cmF0aW9uIG1vZHVsZSAqLwotCXsgVVNCX0RFVklDRSgweDEwYzQsIDB4ODI5MykgfSwgLyogVGVsZWdlc3lzIEVUUlgyVVNCICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzQxKSB9LCAvKiBTaWVtZW5zIE1DMzVQVSBHUFJTIE1vZGVtICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4M0E4KSB9LCAvKiBBbWJlciBXaXJlbGVzcyBBTUIyNTYwICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYwKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhFQTYxKSB9LCAvKiBTaWxpY29uIExhYnMgZmFjdG9yeSBkZWZhdWx0ICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhGMDAxKSB9LCAvKiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBVU0JzY29wZTUwICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhGMDAyKSB9LCAvKiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBVU0J3YXZlMTIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweEYwMDMpIH0sIC8qIEVsYW4gRGlnaXRhbCBTeXN0ZW1zIFVTQnB1bHNlMTAwICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhGMDA0KSB9LCAvKiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBVU0Jjb3VudDUwICovCi0JeyBVU0JfREVWSUNFKDB4MTBDNSwgMHhFQTYxKSB9LCAvKiBTaWxpY29uIExhYnMgTW9iaURhdGEgR1BSUyBVU0IgTW9kZW0gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxM0FELCAweDk5OTkpIH0sIC8qIEJhbHRlY2ggY2FyZCByZWFkZXIgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNjZBLCAweDAzMDMpIH0sIC8qIENsaXBzYWwgNTUwMFBDVSBDLUJ1cyBVU0IgaW50ZXJmYWNlICovCi0JeyBVU0JfREVWSUNFKDB4MTZENiwgMHgwMDAxKSB9LCAvKiBKYWJsb3Ryb24gc2VyaWFsIGludGVyZmFjZSAqLwotCXsgVVNCX0RFVklDRSgweDE4RUYsIDB4RTAwRikgfSwgLyogRUxWIFVTQi1JMkMtSW50ZXJmYWNlICovCi0JeyB9IC8qIFRlcm1pbmF0aW5nIEVudHJ5ICovCi19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3AyMTAxX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiY3AyMTAxIiwKLQkucHJvYmUJCT0gdXNiX3NlcmlhbF9wcm9iZSwKLQkuZGlzY29ubmVjdAk9IHVzYl9zZXJpYWxfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUJPSBpZF90YWJsZSwKLQkubm9fZHluYW1pY19pZAk9IAkxLAotfTsKLQotc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBjcDIxMDFfZGV2aWNlID0gewotCS5kcml2ZXIgPSB7Ci0JCS5vd25lciA9CVRISVNfTU9EVUxFLAotCQkubmFtZSA9IAkiY3AyMTAxIiwKLQl9LAotCS51c2JfZHJpdmVyCQk9ICZjcDIxMDFfZHJpdmVyLAotCS5pZF90YWJsZQkJPSBpZF90YWJsZSwKLQkubnVtX3BvcnRzCQk9IDEsCi0JLm9wZW4JCQk9IGNwMjEwMV9vcGVuLAotCS5jbG9zZQkJCT0gY3AyMTAxX2Nsb3NlLAotCS5icmVha19jdGwJCT0gY3AyMTAxX2JyZWFrX2N0bCwKLQkuc2V0X3Rlcm1pb3MJCT0gY3AyMTAxX3NldF90ZXJtaW9zLAotCS50aW9jbWdldCAJCT0gY3AyMTAxX3Rpb2NtZ2V0LAotCS50aW9jbXNldAkJPSBjcDIxMDFfdGlvY21zZXQsCi0JLmF0dGFjaAkJCT0gY3AyMTAxX3N0YXJ0dXAsCi0JLnNodXRkb3duCQk9IGNwMjEwMV9zaHV0ZG93biwKLX07Ci0KLS8qIENvbmZpZyByZXF1ZXN0IHR5cGVzICovCi0jZGVmaW5lIFJFUVRZUEVfSE9TVF9UT19ERVZJQ0UJMHg0MQotI2RlZmluZSBSRVFUWVBFX0RFVklDRV9UT19IT1NUCTB4YzEKLQotLyogQ29uZmlnIFNFVCByZXF1ZXN0cy4gVG8gR0VULCBhZGQgMSB0byB0aGUgcmVxdWVzdCBudW1iZXIgKi8KLSNkZWZpbmUgQ1AyMTAxX1VBUlQgCQkweDAwCS8qIEVuYWJsZSAvIERpc2FibGUgKi8KLSNkZWZpbmUgQ1AyMTAxX0JBVURSQVRFCQkweDAxCS8qIChCQVVEX1JBVEVfR0VOX0ZSRVEgLyBiYXVkcmF0ZSkgKi8KLSNkZWZpbmUgQ1AyMTAxX0JJVFMJCTB4MDMJLyogMHgoMCkoZGF0YWJpdHMpKHBhcml0eSkoc3RvcGJpdHMpICovCi0jZGVmaW5lIENQMjEwMV9CUkVBSwkJMHgwNQkvKiBPbiAvIE9mZiAqLwotI2RlZmluZSBDUDIxMDFfQ09OVFJPTAkJMHgwNwkvKiBGbG93IGNvbnRyb2wgbGluZSBzdGF0ZXMgKi8KLSNkZWZpbmUgQ1AyMTAxX01PREVNQ1RMCQkweDEzCS8qIE1vZGVtIGNvbnRyb2xzICovCi0jZGVmaW5lIENQMjEwMV9DT05GSUdfNgkJMHgxOQkvKiA2IGJ5dGVzIG9mIGNvbmZpZyBkYXRhID8/PyAqLwotCi0vKiBDUDIxMDFfVUFSVCAqLwotI2RlZmluZSBVQVJUX0VOQUJMRQkJMHgwMDAxCi0jZGVmaW5lIFVBUlRfRElTQUJMRQkJMHgwMDAwCi0KLS8qIENQMjEwMV9CQVVEUkFURSAqLwotI2RlZmluZSBCQVVEX1JBVEVfR0VOX0ZSRVEJMHgzODQwMDAKLQotLyogQ1AyMTAxX0JJVFMgKi8KLSNkZWZpbmUgQklUU19EQVRBX01BU0sJCTBYMGYwMAotI2RlZmluZSBCSVRTX0RBVEFfNQkJMFgwNTAwCi0jZGVmaW5lIEJJVFNfREFUQV82CQkwWDA2MDAKLSNkZWZpbmUgQklUU19EQVRBXzcJCTBYMDcwMAotI2RlZmluZSBCSVRTX0RBVEFfOAkJMFgwODAwCi0jZGVmaW5lIEJJVFNfREFUQV85CQkwWDA5MDAKLQotI2RlZmluZSBCSVRTX1BBUklUWV9NQVNLCTB4MDBmMAotI2RlZmluZSBCSVRTX1BBUklUWV9OT05FCTB4MDAwMAotI2RlZmluZSBCSVRTX1BBUklUWV9PREQJCTB4MDAxMAotI2RlZmluZSBCSVRTX1BBUklUWV9FVkVOCTB4MDAyMAotI2RlZmluZSBCSVRTX1BBUklUWV9NQVJLCTB4MDAzMAotI2RlZmluZSBCSVRTX1BBUklUWV9TUEFDRQkweDAwNDAKLQotI2RlZmluZSBCSVRTX1NUT1BfTUFTSwkJMHgwMDBmCi0jZGVmaW5lIEJJVFNfU1RPUF8xCQkweDAwMDAKLSNkZWZpbmUgQklUU19TVE9QXzFfNQkJMHgwMDAxCi0jZGVmaW5lIEJJVFNfU1RPUF8yCQkweDAwMDIKLQotLyogQ1AyMTAxX0JSRUFLICovCi0jZGVmaW5lIEJSRUFLX09OCQkweDAwMDAKLSNkZWZpbmUgQlJFQUtfT0ZGCQkweDAwMDEKLQotLyogQ1AyMTAxX0NPTlRST0wgKi8KLSNkZWZpbmUgQ09OVFJPTF9EVFIJCTB4MDAwMQotI2RlZmluZSBDT05UUk9MX1JUUwkJMHgwMDAyCi0jZGVmaW5lIENPTlRST0xfQ1RTCQkweDAwMTAKLSNkZWZpbmUgQ09OVFJPTF9EU1IJCTB4MDAyMAotI2RlZmluZSBDT05UUk9MX1JJTkcJCTB4MDA0MAotI2RlZmluZSBDT05UUk9MX0RDRAkJMHgwMDgwCi0jZGVmaW5lIENPTlRST0xfV1JJVEVfRFRSCTB4MDEwMAotI2RlZmluZSBDT05UUk9MX1dSSVRFX1JUUwkweDAyMDAKLQotLyoKLSAqIGNwMjEwMV9nZXRfY29uZmlnCi0gKiBSZWFkcyBmcm9tIHRoZSBDUDIxMDEgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqICdzaXplJyBpcyBzcGVjaWZpZWQgaW4gYnl0ZXMuCi0gKiAnZGF0YScgaXMgYSBwb2ludGVyIHRvIGEgcHJlLWFsbG9jYXRlZCBhcnJheSBvZiBpbnRlZ2VycyBsYXJnZQotICogZW5vdWdoIHRvIGhvbGQgJ3NpemUnIGJ5dGVzICh3aXRoIDQgYnl0ZXMgdG8gZWFjaCBpbnRlZ2VyKQotICovCi1zdGF0aWMgaW50IGNwMjEwMV9nZXRfY29uZmlnKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHU4IHJlcXVlc3QsCi0JCXVuc2lnbmVkIGludCAqZGF0YSwgaW50IHNpemUpCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQlfX2xlMzIgKmJ1ZjsKLQlpbnQgcmVzdWx0LCBpLCBsZW5ndGg7Ci0KLQkvKiBOdW1iZXIgb2YgaW50ZWdlcnMgcmVxdWlyZWQgdG8gY29udGFpbiB0aGUgYXJyYXkgKi8KLQlsZW5ndGggPSAoKChzaXplIC0gMSkgfCAzKSArIDEpLzQ7Ci0KLQlidWYgPSBrY2FsbG9jKGxlbmd0aCwgc2l6ZW9mKF9fbGUzMiksIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeS5cbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogRm9yIGdldCByZXF1ZXN0cywgdGhlIHJlcXVlc3QgbnVtYmVyIG11c3QgYmUgaW5jcmVtZW50ZWQgKi8KLQlyZXF1ZXN0Kys7Ci0KLQkvKiBJc3N1ZSB0aGUgcmVxdWVzdCwgYXR0ZW1wdGluZyB0byByZWFkICdzaXplJyBieXRlcyAqLwotCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCQlyZXF1ZXN0LCBSRVFUWVBFX0RFVklDRV9UT19IT1NULCAweDAwMDAsCi0JCQkJMCwgYnVmLCBzaXplLCAzMDApOwotCi0JLyogQ29udmVydCBkYXRhIGludG8gYW4gYXJyYXkgb2YgaW50ZWdlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0JCWRhdGFbaV0gPSBsZTMyX3RvX2NwdShidWZbaV0pOwotCi0Ja2ZyZWUoYnVmKTsKLQotCWlmIChyZXN1bHQgIT0gc2l6ZSkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVuYWJsZSB0byBzZW5kIGNvbmZpZyByZXF1ZXN0LCAiCi0JCQkJInJlcXVlc3Q9MHgleCBzaXplPSVkIHJlc3VsdD0lZFxuIiwKLQkJCQlfX2Z1bmNfXywgcmVxdWVzdCwgc2l6ZSwgcmVzdWx0KTsKLQkJcmV0dXJuIC1FUFJPVE87Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBjcDIxMDFfc2V0X2NvbmZpZwotICogV3JpdGVzIHRvIHRoZSBDUDIxMDEgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLSAqIFZhbHVlcyBsZXNzIHRoYW4gMTYgYml0cyB3aWRlIGFyZSBzZW50IGRpcmVjdGx5Ci0gKiAnc2l6ZScgaXMgc3BlY2lmaWVkIGluIGJ5dGVzLgotICovCi1zdGF0aWMgaW50IGNwMjEwMV9zZXRfY29uZmlnKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHU4IHJlcXVlc3QsCi0JCXVuc2lnbmVkIGludCAqZGF0YSwgaW50IHNpemUpCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQlfX2xlMzIgKmJ1ZjsKLQlpbnQgcmVzdWx0LCBpLCBsZW5ndGg7Ci0KLQkvKiBOdW1iZXIgb2YgaW50ZWdlcnMgcmVxdWlyZWQgdG8gY29udGFpbiB0aGUgYXJyYXkgKi8KLQlsZW5ndGggPSAoKChzaXplIC0gMSkgfCAzKSArIDEpLzQ7Ci0KLQlidWYgPSBrbWFsbG9jKGxlbmd0aCAqIHNpemVvZihfX2xlMzIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogQXJyYXkgb2YgaW50ZWdlcnMgaW50byBieXRlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKLQkJYnVmW2ldID0gY3B1X3RvX2xlMzIoZGF0YVtpXSk7Ci0KLQlpZiAoc2l6ZSA+IDIpIHsKLQkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAotCQkJCXVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCi0JCQkJcmVxdWVzdCwgUkVRVFlQRV9IT1NUX1RPX0RFVklDRSwgMHgwMDAwLAotCQkJCTAsIGJ1Ziwgc2l6ZSwgMzAwKTsKLQl9IGVsc2UgewotCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCi0JCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCQlyZXF1ZXN0LCBSRVFUWVBFX0hPU1RfVE9fREVWSUNFLCBkYXRhWzBdLAotCQkJCTAsIE5VTEwsIDAsIDMwMCk7Ci0JfQotCi0Ja2ZyZWUoYnVmKTsKLQotCWlmICgoc2l6ZSA+IDIgJiYgcmVzdWx0ICE9IHNpemUpIHx8IHJlc3VsdCA8IDApIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBVbmFibGUgdG8gc2VuZCByZXF1ZXN0LCAiCi0JCQkJInJlcXVlc3Q9MHgleCBzaXplPSVkIHJlc3VsdD0lZFxuIiwKLQkJCQlfX2Z1bmNfXywgcmVxdWVzdCwgc2l6ZSwgcmVzdWx0KTsKLQkJcmV0dXJuIC1FUFJPVE87Ci0JfQotCi0JLyogU2luZ2xlIGRhdGEgdmFsdWUgKi8KLQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCi0JCQl1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAotCQkJcmVxdWVzdCwgUkVRVFlQRV9IT1NUX1RPX0RFVklDRSwgZGF0YVswXSwKLQkJCTAsIE5VTEwsIDAsIDMwMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBjcDIxMDFfc2V0X2NvbmZpZ19zaW5nbGUKLSAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBjYWxsaW5nIGNwMjEwMV9zZXRfY29uZmlnIG9uIHNpbmdsZSBkYXRhIHZhbHVlcwotICogd2l0aG91dCByZXF1aXJpbmcgYW4gaW50ZWdlciBwb2ludGVyCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQl1OCByZXF1ZXN0LCB1bnNpZ25lZCBpbnQgZGF0YSkKLXsKLQlyZXR1cm4gY3AyMTAxX3NldF9jb25maWcocG9ydCwgcmVxdWVzdCwgJmRhdGEsIDIpOwotfQotCi1zdGF0aWMgaW50IGNwMjEwMV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQlpbnQgcmVzdWx0OwotCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQotCWlmIChjcDIxMDFfc2V0X2NvbmZpZ19zaW5nbGUocG9ydCwgQ1AyMTAxX1VBUlQsIFVBUlRfRU5BQkxFKSkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVuYWJsZSB0byBlbmFibGUgVUFSVFxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRVBST1RPOwotCX0KLQotCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCi0JdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAotCQkJdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAotCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2ssCi0JCQlwb3J0KTsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHJlc3VsdCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsICIKLQkJCQkiZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qIENvbmZpZ3VyZSB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUgKi8KLQljcDIxMDFfZ2V0X3Rlcm1pb3ModHR5KTsKLQotCS8qIFNldCB0aGUgRFRSIGFuZCBSVFMgcGlucyBsb3cgKi8KLQljcDIxMDFfdGlvY21zZXQodHR5LCBOVUxMLCBUSU9DTV9EVFIgfCBUSU9DTV9SVFMsIDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNwMjEwMV9jbGVhbnVwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0KLQlpZiAoc2VyaWFsLT5kZXYpIHsKLQkJLyogc2h1dGRvd24gYW55IGJ1bGsgcmVhZHMgdGhhdCBtaWdodCBiZSBnb2luZyBvbiAqLwotCQlpZiAoc2VyaWFsLT5udW1fYnVsa19vdXQpCi0JCQl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKLQkJaWYgKHNlcmlhbC0+bnVtX2J1bGtfaW4pCi0JCQl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgY3AyMTAxX2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0JCQkJCXN0cnVjdCBmaWxlICpmaWxwKQotewotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0KLQkvKiBzaHV0ZG93biBvdXIgdXJicyAqLwotCWRiZygiJXMgLSBzaHV0dGluZyBkb3duIHVyYnMiLCBfX2Z1bmNfXyk7Ci0JdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7Ci0JdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKLQotCW11dGV4X2xvY2soJnBvcnQtPnNlcmlhbC0+ZGlzY19tdXRleCk7Ci0JaWYgKCFwb3J0LT5zZXJpYWwtPmRpc2Nvbm5lY3RlZCkKLQkJY3AyMTAxX3NldF9jb25maWdfc2luZ2xlKHBvcnQsIENQMjEwMV9VQVJULCBVQVJUX0RJU0FCTEUpOwotCW11dGV4X3VubG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKLX0KLQotLyoKLSAqIGNwMjEwMV9nZXRfdGVybWlvcwotICogUmVhZHMgdGhlIGJhdWQgcmF0ZSwgZGF0YSBiaXRzLCBwYXJpdHksIHN0b3AgYml0cyBhbmQgZmxvdyBjb250cm9sIG1vZGUKLSAqIGZyb20gdGhlIGRldmljZSwgY29ycmVjdHMgYW55IHVuc3VwcG9ydGVkIHZhbHVlcywgYW5kIGNvbmZpZ3VyZXMgdGhlCi0gKiB0ZXJtaW9zIHN0cnVjdHVyZSB0byByZWZsZWN0IHRoZSBzdGF0ZSBvZiB0aGUgZGV2aWNlCi0gKi8KLXN0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvcyAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKLXsKLQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBpbnQgY2ZsYWcsIG1vZGVtX2N0bFs0XTsKLQl1bnNpZ25lZCBpbnQgYmF1ZDsKLQl1bnNpZ25lZCBpbnQgYml0czsKLQotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0KLQljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQkFVRFJBVEUsICZiYXVkLCAyKTsKLQkvKiBDb252ZXJ0IHRvIGJhdWRyYXRlICovCi0JaWYgKGJhdWQpCi0JCWJhdWQgPSBCQVVEX1JBVEVfR0VOX0ZSRVEgLyBiYXVkOwotCi0JZGJnKCIlcyAtIGJhdWQgcmF0ZSA9ICVkIiwgX19mdW5jX18sIGJhdWQpOwotCi0JdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKLQljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKLQotCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7Ci0JY2ZsYWcgJj0gfkNTSVpFOwotCXN3aXRjaCAoYml0cyAmIEJJVFNfREFUQV9NQVNLKSB7Ci0JY2FzZSBCSVRTX0RBVEFfNToKLQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDUiLCBfX2Z1bmNfXyk7Ci0JCWNmbGFnIHw9IENTNTsKLQkJYnJlYWs7Ci0JY2FzZSBCSVRTX0RBVEFfNjoKLQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDYiLCBfX2Z1bmNfXyk7Ci0JCWNmbGFnIHw9IENTNjsKLQkJYnJlYWs7Ci0JY2FzZSBCSVRTX0RBVEFfNzoKLQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDciLCBfX2Z1bmNfXyk7Ci0JCWNmbGFnIHw9IENTNzsKLQkJYnJlYWs7Ci0JY2FzZSBCSVRTX0RBVEFfODoKLQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDgiLCBfX2Z1bmNfXyk7Ci0JCWNmbGFnIHw9IENTODsKLQkJYnJlYWs7Ci0JY2FzZSBCSVRTX0RBVEFfOToKLQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDkgKG5vdCBzdXBwb3J0ZWQsIHVzaW5nIDggZGF0YSBiaXRzKSIsCi0JCQkJCQkJCV9fZnVuY19fKTsKLQkJY2ZsYWcgfD0gQ1M4OwotCQliaXRzICY9IH5CSVRTX0RBVEFfTUFTSzsKLQkJYml0cyB8PSBCSVRTX0RBVEFfODsKLQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGJnKCIlcyAtIFVua25vd24gbnVtYmVyIG9mIGRhdGEgYml0cywgdXNpbmcgOCIsIF9fZnVuY19fKTsKLQkJY2ZsYWcgfD0gQ1M4OwotCQliaXRzICY9IH5CSVRTX0RBVEFfTUFTSzsKLQkJYml0cyB8PSBCSVRTX0RBVEFfODsKLQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKLQkJYnJlYWs7Ci0JfQotCi0Jc3dpdGNoIChiaXRzICYgQklUU19QQVJJVFlfTUFTSykgewotCWNhc2UgQklUU19QQVJJVFlfTk9ORToKLQkJZGJnKCIlcyAtIHBhcml0eSA9IE5PTkUiLCBfX2Z1bmNfXyk7Ci0JCWNmbGFnICY9IH5QQVJFTkI7Ci0JCWJyZWFrOwotCWNhc2UgQklUU19QQVJJVFlfT0REOgotCQlkYmcoIiVzIC0gcGFyaXR5ID0gT0REIiwgX19mdW5jX18pOwotCQljZmxhZyB8PSAoUEFSRU5CfFBBUk9ERCk7Ci0JCWJyZWFrOwotCWNhc2UgQklUU19QQVJJVFlfRVZFTjoKLQkJZGJnKCIlcyAtIHBhcml0eSA9IEVWRU4iLCBfX2Z1bmNfXyk7Ci0JCWNmbGFnICY9IH5QQVJPREQ7Ci0JCWNmbGFnIHw9IFBBUkVOQjsKLQkJYnJlYWs7Ci0JY2FzZSBCSVRTX1BBUklUWV9NQVJLOgotCQlkYmcoIiVzIC0gcGFyaXR5ID0gTUFSSyAobm90IHN1cHBvcnRlZCwgZGlzYWJsaW5nIHBhcml0eSkiLAotCQkJCV9fZnVuY19fKTsKLQkJY2ZsYWcgJj0gflBBUkVOQjsKLQkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKLQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKLQkJYnJlYWs7Ci0JY2FzZSBCSVRTX1BBUklUWV9TUEFDRToKLQkJZGJnKCIlcyAtIHBhcml0eSA9IFNQQUNFIChub3Qgc3VwcG9ydGVkLCBkaXNhYmxpbmcgcGFyaXR5KSIsCi0JCQkJX19mdW5jX18pOwotCQljZmxhZyAmPSB+UEFSRU5COwotCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOwotCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkYmcoIiVzIC0gVW5rbm93biBwYXJpdHkgbW9kZSwgZGlzYWJsaW5nIHBhcml0eSIsIF9fZnVuY19fKTsKLQkJY2ZsYWcgJj0gflBBUkVOQjsKLQkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKLQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2ZsYWcgJj0gfkNTVE9QQjsKLQlzd2l0Y2ggKGJpdHMgJiBCSVRTX1NUT1BfTUFTSykgewotCWNhc2UgQklUU19TVE9QXzE6Ci0JCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19mdW5jX18pOwotCQlicmVhazsKLQljYXNlIEJJVFNfU1RPUF8xXzU6Ci0JCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxLjUgKG5vdCBzdXBwb3J0ZWQsIHVzaW5nIDEgc3RvcCBiaXQpIiwKLQkJCQkJCQkJX19mdW5jX18pOwotCQliaXRzICY9IH5CSVRTX1NUT1BfTUFTSzsKLQkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKLQkJYnJlYWs7Ci0JY2FzZSBCSVRTX1NUT1BfMjoKLQkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX2Z1bmNfXyk7Ci0JCWNmbGFnIHw9IENTVE9QQjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZGJnKCIlcyAtIFVua25vd24gbnVtYmVyIG9mIHN0b3AgYml0cywgdXNpbmcgMSBzdG9wIGJpdCIsCi0JCQkJCQkJCV9fZnVuY19fKTsKLQkJYml0cyAmPSB+QklUU19TVE9QX01BU0s7Ci0JCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7Ci0JCWJyZWFrOwotCX0KLQotCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9NT0RFTUNUTCwgbW9kZW1fY3RsLCAxNik7Ci0JaWYgKG1vZGVtX2N0bFswXSAmIDB4MDAwOCkgewotCQlkYmcoIiVzIC0gZmxvdyBjb250cm9sID0gQ1JUU0NUUyIsIF9fZnVuY19fKTsKLQkJY2ZsYWcgfD0gQ1JUU0NUUzsKLQl9IGVsc2UgewotCQlkYmcoIiVzIC0gZmxvdyBjb250cm9sID0gTk9ORSIsIF9fZnVuY19fKTsKLQkJY2ZsYWcgJj0gfkNSVFNDVFM7Ci0JfQotCi0JdHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gY2ZsYWc7Ci19Ci0KLXN0YXRpYyB2b2lkIGNwMjEwMV9zZXRfdGVybWlvcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAotCQlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3Qga3Rlcm1pb3MgKm9sZF90ZXJtaW9zKQotewotCXVuc2lnbmVkIGludCBjZmxhZywgb2xkX2NmbGFnOwotCXVuc2lnbmVkIGludCBiYXVkID0gMCwgYml0czsKLQl1bnNpZ25lZCBpbnQgbW9kZW1fY3RsWzRdOwotCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKLQotCWlmICghdHR5KQotCQlyZXR1cm47Ci0KLQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNNU1BBUjsKLQljZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKLQlvbGRfY2ZsYWcgPSBvbGRfdGVybWlvcy0+Y19jZmxhZzsKLQliYXVkID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKLQotCS8qIElmIHRoZSBiYXVkIHJhdGUgaXMgdG8gYmUgdXBkYXRlZCovCi0JaWYgKGJhdWQgIT0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKG9sZF90ZXJtaW9zKSkgewotCQlzd2l0Y2ggKGJhdWQpIHsKLQkJY2FzZSAwOgotCQljYXNlIDYwMDoKLQkJY2FzZSAxMjAwOgotCQljYXNlIDE4MDA6Ci0JCWNhc2UgMjQwMDoKLQkJY2FzZSA0ODAwOgotCQljYXNlIDcyMDA6Ci0JCWNhc2UgOTYwMDoKLQkJY2FzZSAxNDQwMDoKLQkJY2FzZSAxOTIwMDoKLQkJY2FzZSAyODgwMDoKLQkJY2FzZSAzODQwMDoKLQkJY2FzZSA1NTg1NDoKLQkJY2FzZSA1NzYwMDoKLQkJY2FzZSAxMTUyMDA6Ci0JCWNhc2UgMTI3MTE3OgotCQljYXNlIDIzMDQwMDoKLQkJY2FzZSA0NjA4MDA6Ci0JCWNhc2UgOTIxNjAwOgotCQljYXNlIDM2ODY0MDA6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJhdWQgPSA5NjAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoYmF1ZCkgewotCQkJZGJnKCIlcyAtIFNldHRpbmcgYmF1ZCByYXRlIHRvICVkIGJhdWQiLCBfX2Z1bmNfXywKLQkJCQkJYmF1ZCk7Ci0JCQlpZiAoY3AyMTAxX3NldF9jb25maWdfc2luZ2xlKHBvcnQsIENQMjEwMV9CQVVEUkFURSwKLQkJCQkJCShCQVVEX1JBVEVfR0VOX0ZSRVEgLyBiYXVkKSkpIHsKLQkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJCYXVkIHJhdGUgcmVxdWVzdGVkIG5vdCAiCi0JCQkJCQkic3VwcG9ydGVkIGJ5IGRldmljZVxuIik7Ci0JCQkJYmF1ZCA9IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShvbGRfdGVybWlvcyk7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogUmVwb3J0IGJhY2sgdGhlIHJlc3VsdGluZyBiYXVkIHJhdGUgKi8KLQl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIGJhdWQsIGJhdWQpOwotCi0JLyogSWYgdGhlIG51bWJlciBvZiBkYXRhIGJpdHMgaXMgdG8gYmUgdXBkYXRlZCAqLwotCWlmICgoY2ZsYWcgJiBDU0laRSkgIT0gKG9sZF9jZmxhZyAmIENTSVpFKSkgewotCQljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOwotCQliaXRzICY9IH5CSVRTX0RBVEFfTUFTSzsKLQkJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7Ci0JCWNhc2UgQ1M1OgotCQkJYml0cyB8PSBCSVRTX0RBVEFfNTsKLQkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA1IiwgX19mdW5jX18pOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1M2OgotCQkJYml0cyB8PSBCSVRTX0RBVEFfNjsKLQkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA2IiwgX19mdW5jX18pOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1M3OgotCQkJYml0cyB8PSBCSVRTX0RBVEFfNzsKLQkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA3IiwgX19mdW5jX18pOwotCQkJYnJlYWs7Ci0JCWNhc2UgQ1M4OgotCQkJYml0cyB8PSBCSVRTX0RBVEFfODsKLQkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA4IiwgX19mdW5jX18pOwotCQkJYnJlYWs7Ci0JCS8qY2FzZSBDUzk6Ci0JCQliaXRzIHw9IEJJVFNfREFUQV85OwotCQkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDkiLCBfX2Z1bmNfXyk7Ci0JCQlicmVhazsqLwotCQlkZWZhdWx0OgotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiY3AyMTAxIGRyaXZlciBkb2VzIG5vdCAiCi0JCQkJCSJzdXBwb3J0IHRoZSBudW1iZXIgb2YgYml0cyByZXF1ZXN0ZWQsIgotCQkJCQkiIHVzaW5nIDggYml0IG1vZGVcbiIpOwotCQkJCWJpdHMgfD0gQklUU19EQVRBXzg7Ci0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMikpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJOdW1iZXIgb2YgZGF0YSBiaXRzIHJlcXVlc3RlZCAiCi0JCQkJCSJub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7Ci0JfQotCi0JaWYgKChjZmxhZyAmIChQQVJFTkJ8UEFST0REKSkgIT0gKG9sZF9jZmxhZyAmIChQQVJFTkJ8UEFST0REKSkpIHsKLQkJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKLQkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKLQkJaWYgKGNmbGFnICYgUEFSRU5CKSB7Ci0JCQlpZiAoY2ZsYWcgJiBQQVJPREQpIHsKLQkJCQliaXRzIHw9IEJJVFNfUEFSSVRZX09ERDsKLQkJCQlkYmcoIiVzIC0gcGFyaXR5ID0gT0REIiwgX19mdW5jX18pOwotCQkJfSBlbHNlIHsKLQkJCQliaXRzIHw9IEJJVFNfUEFSSVRZX0VWRU47Ci0JCQkJZGJnKCIlcyAtIHBhcml0eSA9IEVWRU4iLCBfX2Z1bmNfXyk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMikpCi0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJQYXJpdHkgbW9kZSBub3Qgc3VwcG9ydGVkICIKLQkJCQkJImJ5IGRldmljZVxuIik7Ci0JfQotCi0JaWYgKChjZmxhZyAmIENTVE9QQikgIT0gKG9sZF9jZmxhZyAmIENTVE9QQikpIHsKLQkJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKLQkJYml0cyAmPSB+QklUU19TVE9QX01BU0s7Ci0JCWlmIChjZmxhZyAmIENTVE9QQikgewotCQkJYml0cyB8PSBCSVRTX1NUT1BfMjsKLQkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAyIiwgX19mdW5jX18pOwotCQl9IGVsc2UgewotCQkJYml0cyB8PSBCSVRTX1NUT1BfMTsKLQkJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19mdW5jX18pOwotCQl9Ci0JCWlmIChjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpKQotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiTnVtYmVyIG9mIHN0b3AgYml0cyByZXF1ZXN0ZWQgIgotCQkJCQkibm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOwotCX0KLQotCWlmICgoY2ZsYWcgJiBDUlRTQ1RTKSAhPSAob2xkX2NmbGFnICYgQ1JUU0NUUykpIHsKLQkJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX01PREVNQ1RMLCBtb2RlbV9jdGwsIDE2KTsKLQkJZGJnKCIlcyAtIHJlYWQgbW9kZW0gY29udHJvbHMgPSAweCUuNHggMHglLjR4IDB4JS40eCAweCUuNHgiLAotCQkJCV9fZnVuY19fLCBtb2RlbV9jdGxbMF0sIG1vZGVtX2N0bFsxXSwKLQkJCQltb2RlbV9jdGxbMl0sIG1vZGVtX2N0bFszXSk7Ci0KLQkJaWYgKGNmbGFnICYgQ1JUU0NUUykgewotCQkJbW9kZW1fY3RsWzBdICY9IH4weDdCOwotCQkJbW9kZW1fY3RsWzBdIHw9IDB4MDk7Ci0JCQltb2RlbV9jdGxbMV0gPSAweDgwOwotCQkJZGJnKCIlcyAtIGZsb3cgY29udHJvbCA9IENSVFNDVFMiLCBfX2Z1bmNfXyk7Ci0JCX0gZWxzZSB7Ci0JCQltb2RlbV9jdGxbMF0gJj0gfjB4N0I7Ci0JCQltb2RlbV9jdGxbMF0gfD0gMHgwMTsKLQkJCW1vZGVtX2N0bFsxXSB8PSAweDQwOwotCQkJZGJnKCIlcyAtIGZsb3cgY29udHJvbCA9IE5PTkUiLCBfX2Z1bmNfXyk7Ci0JCX0KLQotCQlkYmcoIiVzIC0gd3JpdGUgbW9kZW0gY29udHJvbHMgPSAweCUuNHggMHglLjR4IDB4JS40eCAweCUuNHgiLAotCQkJCV9fZnVuY19fLCBtb2RlbV9jdGxbMF0sIG1vZGVtX2N0bFsxXSwKLQkJCQltb2RlbV9jdGxbMl0sIG1vZGVtX2N0bFszXSk7Ci0JCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9NT0RFTUNUTCwgbW9kZW1fY3RsLCAxNik7Ci0JfQotCi19Ci0KLXN0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0IChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQotewotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGludCBjb250cm9sID0gMDsKLQotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0KLQlpZiAoc2V0ICYgVElPQ01fUlRTKSB7Ci0JCWNvbnRyb2wgfD0gQ09OVFJPTF9SVFM7Ci0JCWNvbnRyb2wgfD0gQ09OVFJPTF9XUklURV9SVFM7Ci0JfQotCWlmIChzZXQgJiBUSU9DTV9EVFIpIHsKLQkJY29udHJvbCB8PSBDT05UUk9MX0RUUjsKLQkJY29udHJvbCB8PSBDT05UUk9MX1dSSVRFX0RUUjsKLQl9Ci0JaWYgKGNsZWFyICYgVElPQ01fUlRTKSB7Ci0JCWNvbnRyb2wgJj0gfkNPTlRST0xfUlRTOwotCQljb250cm9sIHw9IENPTlRST0xfV1JJVEVfUlRTOwotCX0KLQlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpIHsKLQkJY29udHJvbCAmPSB+Q09OVFJPTF9EVFI7Ci0JCWNvbnRyb2wgfD0gQ09OVFJPTF9XUklURV9EVFI7Ci0JfQotCi0JZGJnKCIlcyAtIGNvbnRyb2wgPSAweCUuNHgiLCBfX2Z1bmNfXywgY29udHJvbCk7Ci0KLQlyZXR1cm4gY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0NPTlRST0wsICZjb250cm9sLCAyKTsKLQotfQotCi1zdGF0aWMgaW50IGNwMjEwMV90aW9jbWdldCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgaW50IGNvbnRyb2w7Ci0JaW50IHJlc3VsdDsKLQotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0KLQljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQ09OVFJPTCwgJmNvbnRyb2wsIDEpOwotCi0JcmVzdWx0ID0gKChjb250cm9sICYgQ09OVFJPTF9EVFIpID8gVElPQ01fRFRSIDogMCkKLQkJfCgoY29udHJvbCAmIENPTlRST0xfUlRTKSA/IFRJT0NNX1JUUyA6IDApCi0JCXwoKGNvbnRyb2wgJiBDT05UUk9MX0NUUykgPyBUSU9DTV9DVFMgOiAwKQotCQl8KChjb250cm9sICYgQ09OVFJPTF9EU1IpID8gVElPQ01fRFNSIDogMCkKLQkJfCgoY29udHJvbCAmIENPTlRST0xfUklORyk/IFRJT0NNX1JJICA6IDApCi0JCXwoKGNvbnRyb2wgJiBDT05UUk9MX0RDRCkgPyBUSU9DTV9DRCAgOiAwKTsKLQotCWRiZygiJXMgLSBjb250cm9sID0gMHglLjJ4IiwgX19mdW5jX18sIGNvbnRyb2wpOwotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQgY3AyMTAxX2JyZWFrX2N0bCAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGJyZWFrX3N0YXRlKQotewotCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGludCBzdGF0ZTsKLQotCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7Ci0JaWYgKGJyZWFrX3N0YXRlID09IDApCi0JCXN0YXRlID0gQlJFQUtfT0ZGOwotCWVsc2UKLQkJc3RhdGUgPSBCUkVBS19PTjsKLQlkYmcoIiVzIC0gdHVybmluZyBicmVhayAlcyIsIF9fZnVuY19fLAotCQkJc3RhdGUgPT0gQlJFQUtfT0ZGID8gIm9mZiIgOiAib24iKTsKLQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQlJFQUssICZzdGF0ZSwgMik7Ci19Ci0KLXN0YXRpYyBpbnQgY3AyMTAxX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKLXsKLQkvKiBDUDIxMDEgYnVmZmVycyBiZWhhdmUgc3RyYW5nZWx5IHVubGVzcyBkZXZpY2UgaXMgcmVzZXQgKi8KLQl1c2JfcmVzZXRfZGV2aWNlKHNlcmlhbC0+ZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY3AyMTAxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCi17Ci0JaW50IGk7Ci0KLQlkYmcoIiVzIiwgX19mdW5jX18pOwotCi0JLyogU3RvcCByZWFkcyBhbmQgd3JpdGVzIG9uIGFsbCBwb3J0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKQotCQljcDIxMDFfY2xlYW51cChzZXJpYWwtPnBvcnRbaV0pOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjcDIxMDFfaW5pdCh2b2lkKQotewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZjcDIxMDFfZGV2aWNlKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOyAvKiBGYWlsZWQgdG8gcmVnaXN0ZXIgKi8KLQotCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmY3AyMTAxX2RyaXZlcik7Ci0JaWYgKHJldHZhbCkgewotCQkvKiBGYWlsZWQgdG8gcmVnaXN0ZXIgKi8KLQkJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZjcDIxMDFfZGV2aWNlKTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQkvKiBTdWNjZXNzICovCi0JcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgotCSAgICAgICBEUklWRVJfREVTQyAiXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNwMjEwMV9leGl0KHZvaWQpCi17Ci0JdXNiX2RlcmVnaXN0ZXIoJmNwMjEwMV9kcml2ZXIpOwotCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY3AyMTAxX2RldmljZSk7Ci19Ci0KLW1vZHVsZV9pbml0KGNwMjEwMV9pbml0KTsKLW1vZHVsZV9leGl0KGNwMjEwMV9leGl0KTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKLU1PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRW5hYmxlIHZlcmJvc2UgZGVidWdnaW5nIG1lc3NhZ2VzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkNTEzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtMCwwICsxLDgyMiBAQAorLyoKKyAqIFNpbGljb24gTGFib3JhdG9yaWVzIENQMjEwMS9DUDIxMDIgVVNCIHRvIFJTMjMyIHNlcmlhbCBhZGFwdG9yIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBDcmFpZyBTaGVsbGV5IChjcmFpZ0BtaWNyb3Ryb24ub3JnLnVrKQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogU3VwcG9ydCB0byBzZXQgZmxvdyBjb250cm9sIGxpbmUgbGV2ZWxzIHVzaW5nIFRJT0NNR0VUIGFuZCBUSU9DTVNFVAorICogdGhhbmtzIHRvIEthcmwgSGlyYW1vdG8ga2FybEBoaXJhbW90by5vcmcuIFJUU0NUUyBoYXJkd2FyZSBmbG93CisgKiBjb250cm9sIHRoYW5rcyB0byBNdW5pciBOYXNzYXIgbmFzc2FybXVAcmVhbC10aW1lLmNvbQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjA4IgorI2RlZmluZSBEUklWRVJfREVTQyAiU2lsaWNvbiBMYWJzIENQMjEwMS9DUDIxMDIgUlMyMzIgc2VyaWFsIGFkYXB0b3IgZHJpdmVyIgorCisvKgorICogRnVuY3Rpb24gUHJvdG90eXBlcworICovCitzdGF0aWMgaW50IGNwMjEwMV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwKKwkJCQkJCQlzdHJ1Y3QgZmlsZSAqKTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9jbGVhbnVwKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKik7CitzdGF0aWMgdm9pZCBjcDIxMDFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqLAorCQkJCQkJCXN0cnVjdCBmaWxlKik7CitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKiwKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGNwMjEwMV9nZXRfdGVybWlvc19wb3J0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJdW5zaWduZWQgaW50ICpjZmxhZ3AsIHVuc2lnbmVkIGludCAqYmF1ZHApOworc3RhdGljIHZvaWQgY3AyMTAxX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiwKKwkJCQkJCQlzdHJ1Y3Qga3Rlcm1pb3MqKTsKK3N0YXRpYyBpbnQgY3AyMTAxX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICopOworc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwKKwkJdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXRfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqLAorCQl1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CitzdGF0aWMgdm9pZCBjcDIxMDFfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICosIGludCk7CitzdGF0aWMgaW50IGNwMjEwMV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICopOworc3RhdGljIHZvaWQgY3AyMTAxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICopOworCitzdGF0aWMgaW50IGRlYnVnOworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgwNjZBKSB9LCAvKiBBS1RBS09NIEFDRS0xMDAxIGNhYmxlICovCisJeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhFMDAwKSB9LCAvKiBQaXJlbGxpIEJyb2FkYmFuZCBTLnAuQSwgRFAtTDEwIFNJUC9HU00gTW9iaWxlICovCisJeyBVU0JfREVWSUNFKDB4MDhlNiwgMHg1NTAxKSB9LCAvKiBHZW1hbHRvIFByb3gtUFUvQ1UgY29udGFjdGxlc3Mgc21hcnRjYXJkIHJlYWRlciAqLworCXsgVVNCX0RFVklDRSgweDBGQ0YsIDB4MTAwMykgfSwgLyogRHluYXN0cmVhbSBBTlQgZGV2ZWxvcG1lbnQgYm9hcmQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwRkNGLCAweDEwMDQpIH0sIC8qIER5bmFzdHJlYW0gQU5UMlVTQiAqLworCXsgVVNCX0RFVklDRSgweDBGQ0YsIDB4MTAwNikgfSwgLyogRHluYXN0cmVhbSBBTlQgZGV2ZWxvcG1lbnQgYm9hcmQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEE2LCAweEFBMjYpIH0sIC8qIEtub2NrLW9mZiBEQ1UtMTEgY2FibGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEFCLCAweDEwQzUpIH0sIC8qIFNpZW1lbnMgTUM2MCBDYWJsZSAqLworCXsgVVNCX0RFVklDRSgweDEwQjUsIDB4QUM3MCkgfSwgLyogTm9raWEgQ0EtNDIgVVNCICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MDBBKSB9LCAvKiBTUE9SVGlkZW50IEJTTTctRC1VU0IgbWFpbiBzdGF0aW9uICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MDNCKSB9LCAvKiBQb2xvbHUgVVNCLXNlcmlhbCBjb252ZXJ0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgwNTMpIH0sIC8qIEVuZm9yYSBFREcxMjI4ICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MDU0KSB9LCAvKiBFbmZvcmEgR1NNMjIyOCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODA2NikgfSwgLyogQXJndXNzb2Z0IEluLVN5c3RlbSBQcm9ncmFtbWVyICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MDdBKSB9LCAvKiBDcnVtYjEyOCBib2FyZCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODBDQSkgfSwgLyogRGVncmVlIENvbnRyb2xzIEluYyAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODBERCkgfSwgLyogVHJhY2llbnQgUkZJRCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODBGNikgfSwgLyogU3V1bnRvIHNwb3J0cyBpbnN0cnVtZW50ICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTE1KSB9LCAvKiBBcnlnb24gTkZDL01pZmFyZSBSZWFkZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxM0QpIH0sIC8qIEJ1cm5zaWRlIFRlbGVjb20gRGVza21vYmlsZSAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QSkgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUdibGFzdGVyIFAmUCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QikgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUd0YWxrICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTVFKSB9LCAvKiBIZWxpY29tbSBJUC1MaW5rIDEyMjAtRFZNICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTlGKSB9LCAvKiBNSlMgVVNCIFRvc2xpbmsgU3dpdGNoZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxQTYpIH0sIC8qIFRoaW5rT3B0aWNzIFdhdkl0ICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUFDKSB9LCAvKiBNU0QgRGFzaCBIYXdrICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUM4KSB9LCAvKiBMaXBvd3NreSBJbmR1c3RyaWUgRWxla3Ryb25payBHbWJILCBCYWJ5LUpUQUcgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxRTIpIH0sIC8qIExpcG93c2t5IEluZHVzdHJpZSBFbGVrdHJvbmlrIEdtYkgsIEJhYnktTElOICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUU3KSB9LCAvKiBBZXJvY29tbSBSYWRpbyAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODIxOCkgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgSEFSUC0xICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjJCKSB9LCAvKiBNb2RlbSBFREdFKEdTTSkgQ29tYW5kZXIgMiAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODI2QikgfSwgLyogQ3lnbmFsIEludGVncmF0ZWQgUHJvZHVjdHMsIEluYy4sIEZhc3R0cmF4IEdQUyBkZW1vc3RyYXRpb24gbW9kdWxlICovCisJeyBVU0JfREVWSUNFKDB4MTBjNCwgMHg4MjkzKSB9LCAvKiBUZWxlZ2VzeXMgRVRSWDJVU0IgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzNDEpIH0sIC8qIFNpZW1lbnMgTUMzNVBVIEdQUlMgTW9kZW0gKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgzQTgpIH0sIC8qIEFtYmVyIFdpcmVsZXNzIEFNQjI1NjAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0NkUpIH0sIC8qIEJFSSBVU0IgU2Vuc29yIEludGVyZmFjZSAoVkNQKSAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MCkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MSkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RjAwMSkgfSwgLyogRWxhbiBEaWdpdGFsIFN5c3RlbXMgVVNCc2NvcGU1MCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RjAwMikgfSwgLyogRWxhbiBEaWdpdGFsIFN5c3RlbXMgVVNCd2F2ZTEyICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHhGMDAzKSB9LCAvKiBFbGFuIERpZ2l0YWwgU3lzdGVtcyBVU0JwdWxzZTEwMCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RjAwNCkgfSwgLyogRWxhbiBEaWdpdGFsIFN5c3RlbXMgVVNCY291bnQ1MCAqLworCXsgVVNCX0RFVklDRSgweDEwQzUsIDB4RUE2MSkgfSwgLyogU2lsaWNvbiBMYWJzIE1vYmlEYXRhIEdQUlMgVVNCIE1vZGVtICovCisJeyBVU0JfREVWSUNFKDB4MTNBRCwgMHg5OTk5KSB9LCAvKiBCYWx0ZWNoIGNhcmQgcmVhZGVyICovCisJeyBVU0JfREVWSUNFKDB4MTY2QSwgMHgwMzAzKSB9LCAvKiBDbGlwc2FsIDU1MDBQQ1UgQy1CdXMgVVNCIGludGVyZmFjZSAqLworCXsgVVNCX0RFVklDRSgweDE2RDYsIDB4MDAwMSkgfSwgLyogSmFibG90cm9uIHNlcmlhbCBpbnRlcmZhY2UgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxOEVGLCAweEUwMEYpIH0sIC8qIEVMViBVU0ItSTJDLUludGVyZmFjZSAqLworCXsgfSAvKiBUZXJtaW5hdGluZyBFbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGNwMjEwMV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImNwMjEwMSIsCisJLnByb2JlCQk9IHVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QJPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlCT0gaWRfdGFibGUsCisJLm5vX2R5bmFtaWNfaWQJPSAJMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgY3AyMTAxX2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPSAJImNwMjEwMSIsCisJfSwKKwkudXNiX2RyaXZlcgkJPSAmY3AyMTAxX2RyaXZlciwKKwkuaWRfdGFibGUJCT0gaWRfdGFibGUsCisJLm51bV9wb3J0cwkJPSAxLAorCS5vcGVuCQkJPSBjcDIxMDFfb3BlbiwKKwkuY2xvc2UJCQk9IGNwMjEwMV9jbG9zZSwKKwkuYnJlYWtfY3RsCQk9IGNwMjEwMV9icmVha19jdGwsCisJLnNldF90ZXJtaW9zCQk9IGNwMjEwMV9zZXRfdGVybWlvcywKKwkudGlvY21nZXQgCQk9IGNwMjEwMV90aW9jbWdldCwKKwkudGlvY21zZXQJCT0gY3AyMTAxX3Rpb2Ntc2V0LAorCS5hdHRhY2gJCQk9IGNwMjEwMV9zdGFydHVwLAorCS5zaHV0ZG93bgkJPSBjcDIxMDFfc2h1dGRvd24sCit9OworCisvKiBDb25maWcgcmVxdWVzdCB0eXBlcyAqLworI2RlZmluZSBSRVFUWVBFX0hPU1RfVE9fREVWSUNFCTB4NDEKKyNkZWZpbmUgUkVRVFlQRV9ERVZJQ0VfVE9fSE9TVAkweGMxCisKKy8qIENvbmZpZyBTRVQgcmVxdWVzdHMuIFRvIEdFVCwgYWRkIDEgdG8gdGhlIHJlcXVlc3QgbnVtYmVyICovCisjZGVmaW5lIENQMjEwMV9VQVJUIAkJMHgwMAkvKiBFbmFibGUgLyBEaXNhYmxlICovCisjZGVmaW5lIENQMjEwMV9CQVVEUkFURQkJMHgwMQkvKiAoQkFVRF9SQVRFX0dFTl9GUkVRIC8gYmF1ZHJhdGUpICovCisjZGVmaW5lIENQMjEwMV9CSVRTCQkweDAzCS8qIDB4KDApKGRhdGFiaXRzKShwYXJpdHkpKHN0b3BiaXRzKSAqLworI2RlZmluZSBDUDIxMDFfQlJFQUsJCTB4MDUJLyogT24gLyBPZmYgKi8KKyNkZWZpbmUgQ1AyMTAxX0NPTlRST0wJCTB4MDcJLyogRmxvdyBjb250cm9sIGxpbmUgc3RhdGVzICovCisjZGVmaW5lIENQMjEwMV9NT0RFTUNUTAkJMHgxMwkvKiBNb2RlbSBjb250cm9scyAqLworI2RlZmluZSBDUDIxMDFfQ09ORklHXzYJCTB4MTkJLyogNiBieXRlcyBvZiBjb25maWcgZGF0YSA/Pz8gKi8KKworLyogQ1AyMTAxX1VBUlQgKi8KKyNkZWZpbmUgVUFSVF9FTkFCTEUJCTB4MDAwMQorI2RlZmluZSBVQVJUX0RJU0FCTEUJCTB4MDAwMAorCisvKiBDUDIxMDFfQkFVRFJBVEUgKi8KKyNkZWZpbmUgQkFVRF9SQVRFX0dFTl9GUkVRCTB4Mzg0MDAwCisKKy8qIENQMjEwMV9CSVRTICovCisjZGVmaW5lIEJJVFNfREFUQV9NQVNLCQkwWDBmMDAKKyNkZWZpbmUgQklUU19EQVRBXzUJCTBYMDUwMAorI2RlZmluZSBCSVRTX0RBVEFfNgkJMFgwNjAwCisjZGVmaW5lIEJJVFNfREFUQV83CQkwWDA3MDAKKyNkZWZpbmUgQklUU19EQVRBXzgJCTBYMDgwMAorI2RlZmluZSBCSVRTX0RBVEFfOQkJMFgwOTAwCisKKyNkZWZpbmUgQklUU19QQVJJVFlfTUFTSwkweDAwZjAKKyNkZWZpbmUgQklUU19QQVJJVFlfTk9ORQkweDAwMDAKKyNkZWZpbmUgQklUU19QQVJJVFlfT0RECQkweDAwMTAKKyNkZWZpbmUgQklUU19QQVJJVFlfRVZFTgkweDAwMjAKKyNkZWZpbmUgQklUU19QQVJJVFlfTUFSSwkweDAwMzAKKyNkZWZpbmUgQklUU19QQVJJVFlfU1BBQ0UJMHgwMDQwCisKKyNkZWZpbmUgQklUU19TVE9QX01BU0sJCTB4MDAwZgorI2RlZmluZSBCSVRTX1NUT1BfMQkJMHgwMDAwCisjZGVmaW5lIEJJVFNfU1RPUF8xXzUJCTB4MDAwMQorI2RlZmluZSBCSVRTX1NUT1BfMgkJMHgwMDAyCisKKy8qIENQMjEwMV9CUkVBSyAqLworI2RlZmluZSBCUkVBS19PTgkJMHgwMDAwCisjZGVmaW5lIEJSRUFLX09GRgkJMHgwMDAxCisKKy8qIENQMjEwMV9DT05UUk9MICovCisjZGVmaW5lIENPTlRST0xfRFRSCQkweDAwMDEKKyNkZWZpbmUgQ09OVFJPTF9SVFMJCTB4MDAwMgorI2RlZmluZSBDT05UUk9MX0NUUwkJMHgwMDEwCisjZGVmaW5lIENPTlRST0xfRFNSCQkweDAwMjAKKyNkZWZpbmUgQ09OVFJPTF9SSU5HCQkweDAwNDAKKyNkZWZpbmUgQ09OVFJPTF9EQ0QJCTB4MDA4MAorI2RlZmluZSBDT05UUk9MX1dSSVRFX0RUUgkweDAxMDAKKyNkZWZpbmUgQ09OVFJPTF9XUklURV9SVFMJMHgwMjAwCisKKy8qCisgKiBjcDIxMDFfZ2V0X2NvbmZpZworICogUmVhZHMgZnJvbSB0aGUgQ1AyMTAxIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzCisgKiAnc2l6ZScgaXMgc3BlY2lmaWVkIGluIGJ5dGVzLgorICogJ2RhdGEnIGlzIGEgcG9pbnRlciB0byBhIHByZS1hbGxvY2F0ZWQgYXJyYXkgb2YgaW50ZWdlcnMgbGFyZ2UKKyAqIGVub3VnaCB0byBob2xkICdzaXplJyBieXRlcyAod2l0aCA0IGJ5dGVzIHRvIGVhY2ggaW50ZWdlcikKKyAqLworc3RhdGljIGludCBjcDIxMDFfZ2V0X2NvbmZpZyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1OCByZXF1ZXN0LAorCQl1bnNpZ25lZCBpbnQgKmRhdGEsIGludCBzaXplKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJX19sZTMyICpidWY7CisJaW50IHJlc3VsdCwgaSwgbGVuZ3RoOworCisJLyogTnVtYmVyIG9mIGludGVnZXJzIHJlcXVpcmVkIHRvIGNvbnRhaW4gdGhlIGFycmF5ICovCisJbGVuZ3RoID0gKCgoc2l6ZSAtIDEpIHwgMykgKyAxKS80OworCisJYnVmID0ga2NhbGxvYyhsZW5ndGgsIHNpemVvZihfX2xlMzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEZvciBnZXQgcmVxdWVzdHMsIHRoZSByZXF1ZXN0IG51bWJlciBtdXN0IGJlIGluY3JlbWVudGVkICovCisJcmVxdWVzdCsrOworCisJLyogSXNzdWUgdGhlIHJlcXVlc3QsIGF0dGVtcHRpbmcgdG8gcmVhZCAnc2l6ZScgYnl0ZXMgKi8KKwlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJcmVxdWVzdCwgUkVRVFlQRV9ERVZJQ0VfVE9fSE9TVCwgMHgwMDAwLAorCQkJCTAsIGJ1Ziwgc2l6ZSwgMzAwKTsKKworCS8qIENvbnZlcnQgZGF0YSBpbnRvIGFuIGFycmF5IG9mIGludGVnZXJzICovCisJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQorCQlkYXRhW2ldID0gbGUzMl90b19jcHUoYnVmW2ldKTsKKworCWtmcmVlKGJ1Zik7CisKKwlpZiAocmVzdWx0ICE9IHNpemUpIHsKKwkJZGJnKCIlcyAtIFVuYWJsZSB0byBzZW5kIGNvbmZpZyByZXF1ZXN0LCAiCisJCQkJInJlcXVlc3Q9MHgleCBzaXplPSVkIHJlc3VsdD0lZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmVxdWVzdCwgc2l6ZSwgcmVzdWx0KTsKKwkJcmV0dXJuIC1FUFJPVE87CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjcDIxMDFfc2V0X2NvbmZpZworICogV3JpdGVzIHRvIHRoZSBDUDIxMDEgY29uZmlndXJhdGlvbiByZWdpc3RlcnMKKyAqIFZhbHVlcyBsZXNzIHRoYW4gMTYgYml0cyB3aWRlIGFyZSBzZW50IGRpcmVjdGx5CisgKiAnc2l6ZScgaXMgc3BlY2lmaWVkIGluIGJ5dGVzLgorICovCitzdGF0aWMgaW50IGNwMjEwMV9zZXRfY29uZmlnKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHU4IHJlcXVlc3QsCisJCXVuc2lnbmVkIGludCAqZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlfX2xlMzIgKmJ1ZjsKKwlpbnQgcmVzdWx0LCBpLCBsZW5ndGg7CisKKwkvKiBOdW1iZXIgb2YgaW50ZWdlcnMgcmVxdWlyZWQgdG8gY29udGFpbiB0aGUgYXJyYXkgKi8KKwlsZW5ndGggPSAoKChzaXplIC0gMSkgfCAzKSArIDEpLzQ7CisKKwlidWYgPSBrbWFsbG9jKGxlbmd0aCAqIHNpemVvZihfX2xlMzIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQXJyYXkgb2YgaW50ZWdlcnMgaW50byBieXRlcyAqLworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKKwkJYnVmW2ldID0gY3B1X3RvX2xlMzIoZGF0YVtpXSk7CisKKwlpZiAoc2l6ZSA+IDIpIHsKKwkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAorCQkJCXVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJcmVxdWVzdCwgUkVRVFlQRV9IT1NUX1RPX0RFVklDRSwgMHgwMDAwLAorCQkJCTAsIGJ1Ziwgc2l6ZSwgMzAwKTsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCisJCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCQlyZXF1ZXN0LCBSRVFUWVBFX0hPU1RfVE9fREVWSUNFLCBkYXRhWzBdLAorCQkJCTAsIE5VTEwsIDAsIDMwMCk7CisJfQorCisJa2ZyZWUoYnVmKTsKKworCWlmICgoc2l6ZSA+IDIgJiYgcmVzdWx0ICE9IHNpemUpIHx8IHJlc3VsdCA8IDApIHsKKwkJZGJnKCIlcyAtIFVuYWJsZSB0byBzZW5kIHJlcXVlc3QsICIKKwkJCQkicmVxdWVzdD0weCV4IHNpemU9JWQgcmVzdWx0PSVkXG4iLAorCQkJCV9fZnVuY19fLCByZXF1ZXN0LCBzaXplLCByZXN1bHQpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwkvKiBTaW5nbGUgZGF0YSB2YWx1ZSAqLworCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKKwkJCXVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQlyZXF1ZXN0LCBSRVFUWVBFX0hPU1RfVE9fREVWSUNFLCBkYXRhWzBdLAorCQkJMCwgTlVMTCwgMCwgMzAwKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZQorICogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhbGxpbmcgY3AyMTAxX3NldF9jb25maWcgb24gc2luZ2xlIGRhdGEgdmFsdWVzCisgKiB3aXRob3V0IHJlcXVpcmluZyBhbiBpbnRlZ2VyIHBvaW50ZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgY3AyMTAxX3NldF9jb25maWdfc2luZ2xlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCXU4IHJlcXVlc3QsIHVuc2lnbmVkIGludCBkYXRhKQoreworCXJldHVybiBjcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCByZXF1ZXN0LCAmZGF0YSwgMik7Cit9CisKKy8qCisgKiBjcDIxMDFfcXVhbnRpc2VfYmF1ZHJhdGUKKyAqIFF1YW50aXNlcyB0aGUgYmF1ZCByYXRlIGFzIHBlciBBTjIwNSBUYWJsZSAxCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3AyMTAxX3F1YW50aXNlX2JhdWRyYXRlKHVuc2lnbmVkIGludCBiYXVkKSB7CisJaWYgICAgICAoYmF1ZCA8PSA1NikgICAgICAgYmF1ZCA9IDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAzMDApICAgICAgYmF1ZCA9IDMwMDsKKwllbHNlIGlmIChiYXVkIDw9IDYwMCkgICAgICBiYXVkID0gNjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTIwMCkgICAgIGJhdWQgPSAxMjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTgwMCkgICAgIGJhdWQgPSAxODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjQwMCkgICAgIGJhdWQgPSAyNDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNDAwMCkgICAgIGJhdWQgPSA0MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNDgwMykgICAgIGJhdWQgPSA0ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gNzIwNykgICAgIGJhdWQgPSA3MjAwOworCWVsc2UgaWYgKGJhdWQgPD0gOTYxMikgICAgIGJhdWQgPSA5NjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTQ0MjgpICAgIGJhdWQgPSAxNDQwMDsKKwllbHNlIGlmIChiYXVkIDw9IDE2MDYyKSAgICBiYXVkID0gMTYwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxOTI1MCkgICAgYmF1ZCA9IDE5MjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjg5MTIpICAgIGJhdWQgPSAyODgwMDsKKwllbHNlIGlmIChiYXVkIDw9IDM4NjAxKSAgICBiYXVkID0gMzg0MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA1MTU1OCkgICAgYmF1ZCA9IDUxMjAwOworCWVsc2UgaWYgKGJhdWQgPD0gNTYyODApICAgIGJhdWQgPSA1NjAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDU4MDUzKSAgICBiYXVkID0gNTc2MDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA2NDExMSkgICAgYmF1ZCA9IDY0MDAwOworCWVsc2UgaWYgKGJhdWQgPD0gNzc2MDgpICAgIGJhdWQgPSA3NjgwMDsKKwllbHNlIGlmIChiYXVkIDw9IDExNzAyOCkgICBiYXVkID0gMTE1MjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTI5MzQ3KSAgIGJhdWQgPSAxMjgwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAxNTY4NjgpICAgYmF1ZCA9IDE1MzYwMDsKKwllbHNlIGlmIChiYXVkIDw9IDIzNzgzMikgICBiYXVkID0gMjMwNDAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjU0MjM0KSAgIGJhdWQgPSAyNTAwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSAyNzMwNjYpICAgYmF1ZCA9IDI1NjAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDQ5MTUyMCkgICBiYXVkID0gNDYwODAwOworCWVsc2UgaWYgKGJhdWQgPD0gNTY3MTM4KSAgIGJhdWQgPSA1MDAwMDA7CisJZWxzZSBpZiAoYmF1ZCA8PSA2NzAyNTQpICAgYmF1ZCA9IDU3NjAwMDsKKwllbHNlIGlmIChiYXVkIDw9IDEwNTMyNTcpICBiYXVkID0gOTIxNjAwOworCWVsc2UgaWYgKGJhdWQgPD0gMTQ3NDU2MCkgIGJhdWQgPSAxMjI4ODAwOworCWVsc2UgaWYgKGJhdWQgPD0gMjQ1NzYwMCkgIGJhdWQgPSAxODQzMjAwOworCWVsc2UgICAgICAgICAgICAgICAgICAgICAgIGJhdWQgPSAzNjg2NDAwOworCXJldHVybiBiYXVkOworfQorCitzdGF0aWMgaW50IGNwMjEwMV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChjcDIxMDFfc2V0X2NvbmZpZ19zaW5nbGUocG9ydCwgQ1AyMTAxX1VBUlQsIFVBUlRfRU5BQkxFKSkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVuYWJsZSB0byBlbmFibGUgVUFSVFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCXJldHVybiAtRVBST1RPOworCX0KKworCS8qIFN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlICovCisJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJc2VyaWFsLT50eXBlLT5yZWFkX2J1bGtfY2FsbGJhY2ssCisJCQlwb3J0KTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsICIKKwkJCQkiZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qIENvbmZpZ3VyZSB0aGUgdGVybWlvcyBzdHJ1Y3R1cmUgKi8KKwljcDIxMDFfZ2V0X3Rlcm1pb3ModHR5LCBwb3J0KTsKKworCS8qIFNldCB0aGUgRFRSIGFuZCBSVFMgcGlucyBsb3cgKi8KKwljcDIxMDFfdGlvY21zZXRfcG9ydCh0dHkgPyAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB0dHktPmRyaXZlcl9kYXRhCisJCQk6IHBvcnQsCisJCU5VTEwsIFRJT0NNX0RUUiB8IFRJT0NNX1JUUywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3AyMTAxX2NsZWFudXAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWlmIChzZXJpYWwtPmRldikgeworCQkvKiBzaHV0ZG93biBhbnkgYnVsayByZWFkcyB0aGF0IG1pZ2h0IGJlIGdvaW5nIG9uICovCisJCWlmIChzZXJpYWwtPm51bV9idWxrX291dCkKKwkJCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCQlpZiAoc2VyaWFsLT5udW1fYnVsa19pbikKKwkJCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcDIxMDFfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCQkJc3RydWN0IGZpbGUgKmZpbHApCit7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHNodXRkb3duIG91ciB1cmJzICovCisJZGJnKCIlcyAtIHNodXR0aW5nIGRvd24gdXJicyIsIF9fZnVuY19fKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKKwl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOworCisJbXV0ZXhfbG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKKwlpZiAoIXBvcnQtPnNlcmlhbC0+ZGlzY29ubmVjdGVkKQorCQljcDIxMDFfc2V0X2NvbmZpZ19zaW5nbGUocG9ydCwgQ1AyMTAxX1VBUlQsIFVBUlRfRElTQUJMRSk7CisJbXV0ZXhfdW5sb2NrKCZwb3J0LT5zZXJpYWwtPmRpc2NfbXV0ZXgpOworfQorCisvKgorICogY3AyMTAxX2dldF90ZXJtaW9zCisgKiBSZWFkcyB0aGUgYmF1ZCByYXRlLCBkYXRhIGJpdHMsIHBhcml0eSwgc3RvcCBiaXRzIGFuZCBmbG93IGNvbnRyb2wgbW9kZQorICogZnJvbSB0aGUgZGV2aWNlLCBjb3JyZWN0cyBhbnkgdW5zdXBwb3J0ZWQgdmFsdWVzLCBhbmQgY29uZmlndXJlcyB0aGUKKyAqIHRlcm1pb3Mgc3RydWN0dXJlIHRvIHJlZmxlY3QgdGhlIHN0YXRlIG9mIHRoZSBkZXZpY2UKKyAqLworc3RhdGljIHZvaWQgY3AyMTAxX2dldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwl1bnNpZ25lZCBpbnQgYmF1ZDsKKworCWlmICh0dHkpIHsKKwkJY3AyMTAxX2dldF90ZXJtaW9zX3BvcnQodHR5LT5kcml2ZXJfZGF0YSwKKwkJCSZ0dHktPnRlcm1pb3MtPmNfY2ZsYWcsICZiYXVkKTsKKwkJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKKwl9CisKKwllbHNlIHsKKwkJdW5zaWduZWQgaW50IGNmbGFnOworCQljZmxhZyA9IDA7CisJCWNwMjEwMV9nZXRfdGVybWlvc19wb3J0KHBvcnQsICZjZmxhZywgJmJhdWQpOworCX0KK30KKworLyoKKyAqIGNwMjEwMV9nZXRfdGVybWlvc19wb3J0CisgKiBUaGlzIGlzIHRoZSBoZWFydCBvZiBjcDIxMDFfZ2V0X3Rlcm1pb3Mgd2hpY2ggYWx3YXlzIHVzZXMgYSAmdXNiX3NlcmlhbF9wb3J0LgorICovCitzdGF0aWMgdm9pZCBjcDIxMDFfZ2V0X3Rlcm1pb3NfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCXVuc2lnbmVkIGludCAqY2ZsYWdwLCB1bnNpZ25lZCBpbnQgKmJhdWRwKQoreworCXVuc2lnbmVkIGludCBjZmxhZywgbW9kZW1fY3RsWzRdOworCXVuc2lnbmVkIGludCBiYXVkOworCXVuc2lnbmVkIGludCBiaXRzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CQVVEUkFURSwgJmJhdWQsIDIpOworCS8qIENvbnZlcnQgdG8gYmF1ZHJhdGUgKi8KKwlpZiAoYmF1ZCkKKwkJYmF1ZCA9IGNwMjEwMV9xdWFudGlzZV9iYXVkcmF0ZSgoQkFVRF9SQVRFX0dFTl9GUkVRICsgYmF1ZC8yKS8gYmF1ZCk7CisKKwlkYmcoIiVzIC0gYmF1ZCByYXRlID0gJWQiLCBfX2Z1bmNfXywgYmF1ZCk7CisJKmJhdWRwID0gYmF1ZDsKKworCWNmbGFnID0gKmNmbGFncDsKKworCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CisJY2ZsYWcgJj0gfkNTSVpFOworCXN3aXRjaCAoYml0cyAmIEJJVFNfREFUQV9NQVNLKSB7CisJY2FzZSBCSVRTX0RBVEFfNToKKwkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDUiLCBfX2Z1bmNfXyk7CisJCWNmbGFnIHw9IENTNTsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX0RBVEFfNjoKKwkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDYiLCBfX2Z1bmNfXyk7CisJCWNmbGFnIHw9IENTNjsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX0RBVEFfNzoKKwkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDciLCBfX2Z1bmNfXyk7CisJCWNmbGFnIHw9IENTNzsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX0RBVEFfODoKKwkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDgiLCBfX2Z1bmNfXyk7CisJCWNmbGFnIHw9IENTODsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX0RBVEFfOToKKwkJZGJnKCIlcyAtIGRhdGEgYml0cyA9IDkgKG5vdCBzdXBwb3J0ZWQsIHVzaW5nIDggZGF0YSBiaXRzKSIsCisJCQkJCQkJCV9fZnVuY19fKTsKKwkJY2ZsYWcgfD0gQ1M4OworCQliaXRzICY9IH5CSVRTX0RBVEFfTUFTSzsKKwkJYml0cyB8PSBCSVRTX0RBVEFfODsKKwkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIFVua25vd24gbnVtYmVyIG9mIGRhdGEgYml0cywgdXNpbmcgOCIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgfD0gQ1M4OworCQliaXRzICY9IH5CSVRTX0RBVEFfTUFTSzsKKwkJYml0cyB8PSBCSVRTX0RBVEFfODsKKwkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChiaXRzICYgQklUU19QQVJJVFlfTUFTSykgeworCWNhc2UgQklUU19QQVJJVFlfTk9ORToKKwkJZGJnKCIlcyAtIHBhcml0eSA9IE5PTkUiLCBfX2Z1bmNfXyk7CisJCWNmbGFnICY9IH5QQVJFTkI7CisJCWJyZWFrOworCWNhc2UgQklUU19QQVJJVFlfT0REOgorCQlkYmcoIiVzIC0gcGFyaXR5ID0gT0REIiwgX19mdW5jX18pOworCQljZmxhZyB8PSAoUEFSRU5CfFBBUk9ERCk7CisJCWJyZWFrOworCWNhc2UgQklUU19QQVJJVFlfRVZFTjoKKwkJZGJnKCIlcyAtIHBhcml0eSA9IEVWRU4iLCBfX2Z1bmNfXyk7CisJCWNmbGFnICY9IH5QQVJPREQ7CisJCWNmbGFnIHw9IFBBUkVOQjsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX1BBUklUWV9NQVJLOgorCQlkYmcoIiVzIC0gcGFyaXR5ID0gTUFSSyAobm90IHN1cHBvcnRlZCwgZGlzYWJsaW5nIHBhcml0eSkiLAorCQkJCV9fZnVuY19fKTsKKwkJY2ZsYWcgJj0gflBBUkVOQjsKKwkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKKwkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX1BBUklUWV9TUEFDRToKKwkJZGJnKCIlcyAtIHBhcml0eSA9IFNQQUNFIChub3Qgc3VwcG9ydGVkLCBkaXNhYmxpbmcgcGFyaXR5KSIsCisJCQkJX19mdW5jX18pOworCQljZmxhZyAmPSB+UEFSRU5COworCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOworCQljcDIxMDFfc2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gVW5rbm93biBwYXJpdHkgbW9kZSwgZGlzYWJsaW5nIHBhcml0eSIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgJj0gflBBUkVOQjsKKwkJYml0cyAmPSB+QklUU19QQVJJVFlfTUFTSzsKKwkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwkJYnJlYWs7CisJfQorCisJY2ZsYWcgJj0gfkNTVE9QQjsKKwlzd2l0Y2ggKGJpdHMgJiBCSVRTX1NUT1BfTUFTSykgeworCWNhc2UgQklUU19TVE9QXzE6CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxIiwgX19mdW5jX18pOworCQlicmVhazsKKwljYXNlIEJJVFNfU1RPUF8xXzU6CisJCWRiZygiJXMgLSBzdG9wIGJpdHMgPSAxLjUgKG5vdCBzdXBwb3J0ZWQsIHVzaW5nIDEgc3RvcCBiaXQpIiwKKwkJCQkJCQkJX19mdW5jX18pOworCQliaXRzICY9IH5CSVRTX1NUT1BfTUFTSzsKKwkJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwkJYnJlYWs7CisJY2FzZSBCSVRTX1NUT1BfMjoKKwkJZGJnKCIlcyAtIHN0b3AgYml0cyA9IDIiLCBfX2Z1bmNfXyk7CisJCWNmbGFnIHw9IENTVE9QQjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIFVua25vd24gbnVtYmVyIG9mIHN0b3AgYml0cywgdXNpbmcgMSBzdG9wIGJpdCIsCisJCQkJCQkJCV9fZnVuY19fKTsKKwkJYml0cyAmPSB+QklUU19TVE9QX01BU0s7CisJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CisJCWJyZWFrOworCX0KKworCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9NT0RFTUNUTCwgbW9kZW1fY3RsLCAxNik7CisJaWYgKG1vZGVtX2N0bFswXSAmIDB4MDAwOCkgeworCQlkYmcoIiVzIC0gZmxvdyBjb250cm9sID0gQ1JUU0NUUyIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgfD0gQ1JUU0NUUzsKKwl9IGVsc2UgeworCQlkYmcoIiVzIC0gZmxvdyBjb250cm9sID0gTk9ORSIsIF9fZnVuY19fKTsKKwkJY2ZsYWcgJj0gfkNSVFNDVFM7CisJfQorCisJKmNmbGFncCA9IGNmbGFnOworfQorCitzdGF0aWMgdm9pZCBjcDIxMDFfc2V0X3Rlcm1pb3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwl1bnNpZ25lZCBpbnQgY2ZsYWcsIG9sZF9jZmxhZzsKKwl1bnNpZ25lZCBpbnQgYmF1ZCA9IDAsIGJpdHM7CisJdW5zaWduZWQgaW50IG1vZGVtX2N0bFs0XTsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoIXR0eSkKKwkJcmV0dXJuOworCisJdHR5LT50ZXJtaW9zLT5jX2NmbGFnICY9IH5DTVNQQVI7CisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJb2xkX2NmbGFnID0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWc7CisJYmF1ZCA9IGNwMjEwMV9xdWFudGlzZV9iYXVkcmF0ZSh0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpKTsKKworCS8qIElmIHRoZSBiYXVkIHJhdGUgaXMgdG8gYmUgdXBkYXRlZCovCisJaWYgKGJhdWQgIT0gdHR5X3Rlcm1pb3NfYmF1ZF9yYXRlKG9sZF90ZXJtaW9zKSAmJiBiYXVkICE9IDApIHsKKwkJZGJnKCIlcyAtIFNldHRpbmcgYmF1ZCByYXRlIHRvICVkIGJhdWQiLCBfX2Z1bmNfXywKKwkJCQliYXVkKTsKKwkJaWYgKGNwMjEwMV9zZXRfY29uZmlnX3NpbmdsZShwb3J0LCBDUDIxMDFfQkFVRFJBVEUsCisJCQkJCSgoQkFVRF9SQVRFX0dFTl9GUkVRICsgYmF1ZC8yKSAvIGJhdWQpKSkgeworCQkJZGJnKCJCYXVkIHJhdGUgcmVxdWVzdGVkIG5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKKwkJCWJhdWQgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpOworCQl9CisJfQorCS8qIFJlcG9ydCBiYWNrIHRoZSByZXN1bHRpbmcgYmF1ZCByYXRlICovCisJdHR5X2VuY29kZV9iYXVkX3JhdGUodHR5LCBiYXVkLCBiYXVkKTsKKworCS8qIElmIHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzIGlzIHRvIGJlIHVwZGF0ZWQgKi8KKwlpZiAoKGNmbGFnICYgQ1NJWkUpICE9IChvbGRfY2ZsYWcgJiBDU0laRSkpIHsKKwkJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKTsKKwkJYml0cyAmPSB+QklUU19EQVRBX01BU0s7CisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNToKKwkJCWJpdHMgfD0gQklUU19EQVRBXzU7CisJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNSIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQljYXNlIENTNjoKKwkJCWJpdHMgfD0gQklUU19EQVRBXzY7CisJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNiIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQljYXNlIENTNzoKKwkJCWJpdHMgfD0gQklUU19EQVRBXzc7CisJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gNyIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQljYXNlIENTODoKKwkJCWJpdHMgfD0gQklUU19EQVRBXzg7CisJCQlkYmcoIiVzIC0gZGF0YSBiaXRzID0gOCIsIF9fZnVuY19fKTsKKwkJCWJyZWFrOworCQkvKmNhc2UgQ1M5OgorCQkJYml0cyB8PSBCSVRTX0RBVEFfOTsKKwkJCWRiZygiJXMgLSBkYXRhIGJpdHMgPSA5IiwgX19mdW5jX18pOworCQkJYnJlYWs7Ki8KKwkJZGVmYXVsdDoKKwkJCWRiZygiY3AyMTAxIGRyaXZlciBkb2VzIG5vdCAiCisJCQkJCSJzdXBwb3J0IHRoZSBudW1iZXIgb2YgYml0cyByZXF1ZXN0ZWQsIgorCQkJCQkiIHVzaW5nIDggYml0IG1vZGVcbiIpOworCQkJCWJpdHMgfD0gQklUU19EQVRBXzg7CisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMikpCisJCQlkYmcoIk51bWJlciBvZiBkYXRhIGJpdHMgcmVxdWVzdGVkICIKKwkJCQkJIm5vdCBzdXBwb3J0ZWQgYnkgZGV2aWNlXG4iKTsKKwl9CisKKwlpZiAoKGNmbGFnICYgKFBBUkVOQnxQQVJPREQpKSAhPSAob2xkX2NmbGFnICYgKFBBUkVOQnxQQVJPREQpKSkgeworCQljcDIxMDFfZ2V0X2NvbmZpZyhwb3J0LCBDUDIxMDFfQklUUywgJmJpdHMsIDIpOworCQliaXRzICY9IH5CSVRTX1BBUklUWV9NQVNLOworCQlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJCWlmIChjZmxhZyAmIFBBUk9ERCkgeworCQkJCWJpdHMgfD0gQklUU19QQVJJVFlfT0REOworCQkJCWRiZygiJXMgLSBwYXJpdHkgPSBPREQiLCBfX2Z1bmNfXyk7CisJCQl9IGVsc2UgeworCQkJCWJpdHMgfD0gQklUU19QQVJJVFlfRVZFTjsKKwkJCQlkYmcoIiVzIC0gcGFyaXR5ID0gRVZFTiIsIF9fZnVuY19fKTsKKwkJCX0KKwkJfQorCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKKwkJCWRiZygiUGFyaXR5IG1vZGUgbm90IHN1cHBvcnRlZCAiCisJCQkJCSJieSBkZXZpY2VcbiIpOworCX0KKworCWlmICgoY2ZsYWcgJiBDU1RPUEIpICE9IChvbGRfY2ZsYWcgJiBDU1RPUEIpKSB7CisJCWNwMjEwMV9nZXRfY29uZmlnKHBvcnQsIENQMjEwMV9CSVRTLCAmYml0cywgMik7CisJCWJpdHMgJj0gfkJJVFNfU1RPUF9NQVNLOworCQlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKKwkJCWJpdHMgfD0gQklUU19TVE9QXzI7CisJCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fZnVuY19fKTsKKwkJfSBlbHNlIHsKKwkJCWJpdHMgfD0gQklUU19TVE9QXzE7CisJCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fZnVuY19fKTsKKwkJfQorCQlpZiAoY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JJVFMsICZiaXRzLCAyKSkKKwkJCWRiZygiTnVtYmVyIG9mIHN0b3AgYml0cyByZXF1ZXN0ZWQgIgorCQkJCQkibm90IHN1cHBvcnRlZCBieSBkZXZpY2VcbiIpOworCX0KKworCWlmICgoY2ZsYWcgJiBDUlRTQ1RTKSAhPSAob2xkX2NmbGFnICYgQ1JUU0NUUykpIHsKKwkJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX01PREVNQ1RMLCBtb2RlbV9jdGwsIDE2KTsKKwkJZGJnKCIlcyAtIHJlYWQgbW9kZW0gY29udHJvbHMgPSAweCUuNHggMHglLjR4IDB4JS40eCAweCUuNHgiLAorCQkJCV9fZnVuY19fLCBtb2RlbV9jdGxbMF0sIG1vZGVtX2N0bFsxXSwKKwkJCQltb2RlbV9jdGxbMl0sIG1vZGVtX2N0bFszXSk7CisKKwkJaWYgKGNmbGFnICYgQ1JUU0NUUykgeworCQkJbW9kZW1fY3RsWzBdICY9IH4weDdCOworCQkJbW9kZW1fY3RsWzBdIHw9IDB4MDk7CisJCQltb2RlbV9jdGxbMV0gPSAweDgwOworCQkJZGJnKCIlcyAtIGZsb3cgY29udHJvbCA9IENSVFNDVFMiLCBfX2Z1bmNfXyk7CisJCX0gZWxzZSB7CisJCQltb2RlbV9jdGxbMF0gJj0gfjB4N0I7CisJCQltb2RlbV9jdGxbMF0gfD0gMHgwMTsKKwkJCW1vZGVtX2N0bFsxXSB8PSAweDQwOworCQkJZGJnKCIlcyAtIGZsb3cgY29udHJvbCA9IE5PTkUiLCBfX2Z1bmNfXyk7CisJCX0KKworCQlkYmcoIiVzIC0gd3JpdGUgbW9kZW0gY29udHJvbHMgPSAweCUuNHggMHglLjR4IDB4JS40eCAweCUuNHgiLAorCQkJCV9fZnVuY19fLCBtb2RlbV9jdGxbMF0sIG1vZGVtX2N0bFsxXSwKKwkJCQltb2RlbV9jdGxbMl0sIG1vZGVtX2N0bFszXSk7CisJCWNwMjEwMV9zZXRfY29uZmlnKHBvcnQsIENQMjEwMV9NT0RFTUNUTCwgbW9kZW1fY3RsLCAxNik7CisJfQorCit9CisKK3N0YXRpYyBpbnQgY3AyMTAxX3Rpb2Ntc2V0IChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXJldHVybiBjcDIxMDFfdGlvY21zZXRfcG9ydChwb3J0LCBmaWxlLCBzZXQsIGNsZWFyKTsKK30KKworc3RhdGljIGludCBjcDIxMDFfdGlvY21zZXRfcG9ydChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXVuc2lnbmVkIGludCBjb250cm9sID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAoc2V0ICYgVElPQ01fUlRTKSB7CisJCWNvbnRyb2wgfD0gQ09OVFJPTF9SVFM7CisJCWNvbnRyb2wgfD0gQ09OVFJPTF9XUklURV9SVFM7CisJfQorCWlmIChzZXQgJiBUSU9DTV9EVFIpIHsKKwkJY29udHJvbCB8PSBDT05UUk9MX0RUUjsKKwkJY29udHJvbCB8PSBDT05UUk9MX1dSSVRFX0RUUjsKKwl9CisJaWYgKGNsZWFyICYgVElPQ01fUlRTKSB7CisJCWNvbnRyb2wgJj0gfkNPTlRST0xfUlRTOworCQljb250cm9sIHw9IENPTlRST0xfV1JJVEVfUlRTOworCX0KKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpIHsKKwkJY29udHJvbCAmPSB+Q09OVFJPTF9EVFI7CisJCWNvbnRyb2wgfD0gQ09OVFJPTF9XUklURV9EVFI7CisJfQorCisJZGJnKCIlcyAtIGNvbnRyb2wgPSAweCUuNHgiLCBfX2Z1bmNfXywgY29udHJvbCk7CisKKwlyZXR1cm4gY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0NPTlRST0wsICZjb250cm9sLCAyKTsKK30KKworc3RhdGljIGludCBjcDIxMDFfdGlvY21nZXQgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXVuc2lnbmVkIGludCBjb250cm9sOworCWludCByZXN1bHQ7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCisJY3AyMTAxX2dldF9jb25maWcocG9ydCwgQ1AyMTAxX0NPTlRST0wsICZjb250cm9sLCAxKTsKKworCXJlc3VsdCA9ICgoY29udHJvbCAmIENPTlRST0xfRFRSKSA/IFRJT0NNX0RUUiA6IDApCisJCXwoKGNvbnRyb2wgJiBDT05UUk9MX1JUUykgPyBUSU9DTV9SVFMgOiAwKQorCQl8KChjb250cm9sICYgQ09OVFJPTF9DVFMpID8gVElPQ01fQ1RTIDogMCkKKwkJfCgoY29udHJvbCAmIENPTlRST0xfRFNSKSA/IFRJT0NNX0RTUiA6IDApCisJCXwoKGNvbnRyb2wgJiBDT05UUk9MX1JJTkcpPyBUSU9DTV9SSSAgOiAwKQorCQl8KChjb250cm9sICYgQ09OVFJPTF9EQ0QpID8gVElPQ01fQ0QgIDogMCk7CisKKwlkYmcoIiVzIC0gY29udHJvbCA9IDB4JS4yeCIsIF9fZnVuY19fLCBjb250cm9sKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNwMjEwMV9icmVha19jdGwgKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBicmVha19zdGF0ZSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOworCWlmIChicmVha19zdGF0ZSA9PSAwKQorCQlzdGF0ZSA9IEJSRUFLX09GRjsKKwllbHNlCisJCXN0YXRlID0gQlJFQUtfT047CisJZGJnKCIlcyAtIHR1cm5pbmcgYnJlYWsgJXMiLCBfX2Z1bmNfXywKKwkJCXN0YXRlID09IEJSRUFLX09GRiA/ICJvZmYiIDogIm9uIik7CisJY3AyMTAxX3NldF9jb25maWcocG9ydCwgQ1AyMTAxX0JSRUFLLCAmc3RhdGUsIDIpOworfQorCitzdGF0aWMgaW50IGNwMjEwMV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJLyogQ1AyMTAxIGJ1ZmZlcnMgYmVoYXZlIHN0cmFuZ2VseSB1bmxlc3MgZGV2aWNlIGlzIHJlc2V0ICovCisJdXNiX3Jlc2V0X2RldmljZShzZXJpYWwtPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNwMjEwMV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCS8qIFN0b3AgcmVhZHMgYW5kIHdyaXRlcyBvbiBhbGwgcG9ydHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkKKwkJY3AyMTAxX2NsZWFudXAoc2VyaWFsLT5wb3J0W2ldKTsKK30KKworc3RhdGljIGludCBfX2luaXQgY3AyMTAxX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmY3AyMTAxX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsgLyogRmFpbGVkIHRvIHJlZ2lzdGVyICovCisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmNwMjEwMV9kcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJLyogRmFpbGVkIHRvIHJlZ2lzdGVyICovCisJCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmY3AyMTAxX2RldmljZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJLyogU3VjY2VzcyAqLworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcDIxMDFfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZjcDIxMDFfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmNwMjEwMV9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChjcDIxMDFfaW5pdCk7Cittb2R1bGVfZXhpdChjcDIxMDFfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkVuYWJsZSB2ZXJib3NlIGRlYnVnZ2luZyBtZXNzYWdlcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBhZTg0YzMyLi5kY2M4N2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMTkzOCwxOCArMTkzOCwxNiBAQAogCQkvKiBDb21wYXJlIG5ldyBsaW5lIHN0YXR1cyB0byB0aGUgb2xkIG9uZSwgc2lnbmFsIGlmIGRpZmZlcmVudC8KIAkJICAgTi5CLiBwYWNrZXQgbWF5IGJlIHByb2Nlc3NlZCBtb3JlIHRoYW4gb25jZSwgYnV0IGRpZmZlcmVuY2VzCiAJCSAgIGFyZSBvbmx5IHByb2Nlc3NlZCBvbmNlLiAgKi8KLQkJaWYgKHByaXYgIT0gTlVMTCkgewotCQkJY2hhciBuZXdfc3RhdHVzID0gZGF0YVtwYWNrZXRfb2Zmc2V0ICsgMF0gJgotCQkJCQkJCUZURElfU1RBVFVTX0IwX01BU0s7Ci0JCQlpZiAobmV3X3N0YXR1cyAhPSBwcml2LT5wcmV2X3N0YXR1cykgewotCQkJCXByaXYtPmRpZmZfc3RhdHVzIHw9Ci0JCQkJCW5ld19zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKLQkJCQlwcml2LT5wcmV2X3N0YXR1cyA9IG5ld19zdGF0dXM7Ci0JCQl9CisJCWNoYXIgbmV3X3N0YXR1cyA9IGRhdGFbcGFja2V0X29mZnNldCArIDBdICYKKwkJCQkJCUZURElfU1RBVFVTX0IwX01BU0s7CisJCWlmIChuZXdfc3RhdHVzICE9IHByaXYtPnByZXZfc3RhdHVzKSB7CisJCQlwcml2LT5kaWZmX3N0YXR1cyB8PQorCQkJCW5ld19zdGF0dXMgXiBwcml2LT5wcmV2X3N0YXR1czsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCQkJcHJpdi0+cHJldl9zdGF0dXMgPSBuZXdfc3RhdHVzOwogCQl9CiAKLQkJbGVuZ3RoID0gbWluKFBLVFNaLCB1cmItPmFjdHVhbF9sZW5ndGgtcGFja2V0X29mZnNldCktMjsKKwkJbGVuZ3RoID0gbWluX3QodTMyLCBQS1RTWiwgdXJiLT5hY3R1YWxfbGVuZ3RoLXBhY2tldF9vZmZzZXQpLTI7CiAJCWlmIChsZW5ndGggPCAwKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGJhZCBwYWNrZXQgbGVuZ3RoOiAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgbGVuZ3RoKzIpOwpAQCAtMjI5NCwxMSArMjI5Miw4IEBACiAJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1RfVFlQRSwKIAkJCSAgIDAsIDAsCiAJCQkgICBidWYsIDEsIFdEUl9USU1FT1VUKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRiZygiJXMgQ291bGQgbm90IGdldCBtb2RlbSBzdGF0dXMgb2YgZGV2aWNlIC0gZXJyOiAlZCIsIF9fZnVuY19fLAotCQkJICAgIHJldCk7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJfQogCQlicmVhazsKIAljYXNlIEZUOFUyMzJBTToKIAljYXNlIEZUMjMyQk06CkBAIC0yMzEzLDE1ICsyMzA4LDExIEBACiAJCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUX1RZUEUsCiAJCQkJICAgMCwgcHJpdi0+aW50ZXJmYWNlLAogCQkJCSAgIGJ1ZiwgMiwgV0RSX1RJTUVPVVQpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGJnKCIlcyBDb3VsZCBub3QgZ2V0IG1vZGVtIHN0YXR1cyBvZiBkZXZpY2UgLSBlcnI6ICVkIiwgX19mdW5jX18sCi0JCQkgICAgcmV0KTsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gIChidWZbMF0gJiBGVERJX1NJT19EU1JfTUFTSyA/IFRJT0NNX0RTUiA6IDApIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCmluZGV4IDgxNDkwOWYuLjlkNTdjYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwpAQCAtMTc3LDE0ICsxNzcsNiBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CiAJaW50IGksIGMgPSAwLCByOwogCi0jaWZkZWYgQ09ORklHX1BNCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGFuIGF1dG9yZXN1bWUsIGRvbid0IHN1Ym1pdCBVUkJzLgotCSAqIFRoZXkgd2lsbCBiZSBzdWJtaXR0ZWQgaW4gdGhlIG9wZW4gZnVuY3Rpb24gaW5zdGVhZC4KLQkgKi8KLQlpZiAoc2VyaWFsLT5kZXYtPmF1dG9fcG0pCi0JCXJldHVybiAwOwotI2VuZGlmCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+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+YnVsa19yZWFkX3VyYiwgR0ZQX05PSU8pOworCWVsc2UKKwkJcmVzdWx0ID0gMDsKKwltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgb3B0aWNvbl9kcml2ZXIgPSB7CiAJLm5hbWUgPQkJIm9wdGljb24iLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQlvcHRpY29uX3N1c3BlbmQsCisJLnJlc3VtZSA9CW9wdGljb25fcmVzdW1lLAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwpAQCAtMzI2LDkgKzUzMSwxMyBAQAogCS5hdHRhY2ggPQkJb3B0aWNvbl9zdGFydHVwLAogCS5vcGVuID0JCQlvcHRpY29uX29wZW4sCiAJLmNsb3NlID0JCW9wdGljb25fY2xvc2UsCisJLndyaXRlID0JCW9wdGljb25fd3JpdGUsCisJLndyaXRlX3Jvb20gPSAJCW9wdGljb25fd3JpdGVfcm9vbSwKIAkuc2h1dGRvd24gPQkJb3B0aWNvbl9zaHV0ZG93biwKIAkudGhyb3R0bGUgPSAJCW9wdGljb25fdGhyb3R0bGUsCiAJLnVudGhyb3R0bGUgPQkJb3B0aWNvbl91bnRocm90dGxlLAorCS5pb2N0bCA9CQlvcHRpY29uX2lvY3RsLAorCS50aW9jbWdldCA9CQlvcHRpY29uX3Rpb2NtZ2V0LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgb3B0aWNvbl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggNjFlYmRkYzQuLmQ1NjBjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKQEAgLTYyLDYgKzYyLDggQEAKIHN0YXRpYyBpbnQgIG9wdGlvbl90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQl1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwogc3RhdGljIGludCAgb3B0aW9uX3NlbmRfc2V0dXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CitzdGF0aWMgaW50ICBvcHRpb25fc3VzcGVuZChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CitzdGF0aWMgaW50ICBvcHRpb25fcmVzdW1lKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogCiAvKiBWZW5kb3IgYW5kIHByb2R1Y3QgSURzICovCiAjZGVmaW5lIE9QVElPTl9WRU5ET1JfSUQJCQkweDBBRjAKQEAgLTUyMyw2ICs1MjUsOCBAQAogCS5uYW1lICAgICAgID0gIm9wdGlvbiIsCiAJLnByb2JlICAgICAgPSB1c2Jfc2VyaWFsX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5zdXNwZW5kICAgID0gdXNiX3NlcmlhbF9zdXNwZW5kLAorCS5yZXN1bWUgICAgID0gdXNiX3NlcmlhbF9yZXN1bWUsCiAJLmlkX3RhYmxlICAgPSBvcHRpb25faWRzLAogCS5ub19keW5hbWljX2lkID0gCTEsCiB9OwpAQCAtNTUxLDYgKzU1NSw4IEBACiAJLmF0dGFjaCAgICAgICAgICAgID0gb3B0aW9uX3N0YXJ0dXAsCiAJLnNodXRkb3duICAgICAgICAgID0gb3B0aW9uX3NodXRkb3duLAogCS5yZWFkX2ludF9jYWxsYmFjayA9IG9wdGlvbl9pbnN0YXRfY2FsbGJhY2ssCisJLnN1c3BlbmQgICAgICAgICAgID0gb3B0aW9uX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgICAgICAgID0gb3B0aW9uX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgZGVidWc7CkBAIC04MjEsMTAgKzgyNywxMCBAQAogCQkJCXJlcV9wa3QtPmJSZXF1ZXN0VHlwZSwgcmVxX3BrdC0+YlJlcXVlc3QpOwogCQl9CiAJfSBlbHNlCi0JCWRiZygiJXM6IGVycm9yICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CisJCWVycigiJXM6IGVycm9yICVkIiwgX19mdW5jX18sIHN0YXR1cyk7CiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nIElSUSBkYXRhICovCi0JaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CisJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOICYmIHN0YXR1cyAhPSAtRU5PRU5UKSB7CiAJCXVyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChlcnIpCkBAIC04NDMsNyArODQ5LDYgQEAKIAogCXBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0KIAlmb3IgKGkgPSAwOyBpIDwgTl9PVVRfVVJCOyBpKyspIHsKIAkJdGhpc191cmIgPSBwb3J0ZGF0YS0+b3V0X3VyYnNbaV07CiAJCWlmICh0aGlzX3VyYiAmJiAhdGVzdF9iaXQoaSwgJnBvcnRkYXRhLT5vdXRfYnVzeSkpCkBAIC0xMTA1LDE0ICsxMTEwLDEyIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIG9wdGlvbl9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQgc3RvcF9yZWFkX3dyaXRlX3VyYnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlpbnQgaSwgajsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAotCWRiZygiJXMiLCBfX2Z1bmNfXyk7Ci0KIAkvKiBTdG9wIHJlYWRpbmcvd3JpdGluZyB1cmJzICovCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKQEAgLTExMjIsNiArMTEyNSwxNyBAQAogCQlmb3IgKGogPSAwOyBqIDwgTl9PVVRfVVJCOyBqKyspCiAJCQl1c2Jfa2lsbF91cmIocG9ydGRhdGEtPm91dF91cmJzW2pdKTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIG9wdGlvbl9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCWludCBpLCBqOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IG9wdGlvbl9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCXN0b3BfcmVhZF93cml0ZV91cmJzKHNlcmlhbCk7CiAKIAkvKiBOb3cgZnJlZSB0aGVtICovCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyArK2kpIHsKQEAgLTExNTIsNiArMTE2Niw2NiBAQAogCX0KIH0KIAorc3RhdGljIGludCBvcHRpb25fc3VzcGVuZChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKwlkYmcoIiVzIGVudGVyZWQiLCBfX2Z1bmNfXyk7CisJc3RvcF9yZWFkX3dyaXRlX3VyYnMoc2VyaWFsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9wdGlvbl9yZXN1bWUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlpbnQgZXJyLCBpLCBqOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCBvcHRpb25fcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKKworCWRiZygiJXMgZW50ZXJlZCIsIF9fZnVuY19fKTsKKwkvKiBnZXQgdGhlIGludGVycnVwdCBVUkJzIHJlc3VibWl0dGVkIHVuY29uZGl0aW9uYWxseSAqLworCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CisJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07CisJCWlmICghcG9ydC0+aW50ZXJydXB0X2luX3VyYikgeworCQkJZGJnKCIlczogTm8gaW50ZXJydXB0IFVSQiBmb3IgcG9ydCAlZFxuIiwgX19mdW5jX18sIGkpOworCQkJY29udGludWU7CisJCX0KKwkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9OT0lPKTsKKwkJZGJnKCJTdWJtaXR0ZWQgaW50ZXJydXB0IFVSQiBmb3IgcG9ydCAlZCAocmVzdWx0ICVkKSIsIGksIGVycik7CisJCWlmIChlcnIgPCAwKSB7CisJCQllcnIoIiVzOiBFcnJvciAlZCBmb3IgaW50ZXJydXB0IFVSQiBvZiBwb3J0JWQiLAorCQkJCSBfX2Z1bmNfXywgZXJyLCBpKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7IGkrKykgeworCQkvKiB3YWxrIGFsbCBwb3J0cyAqLworCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQlwb3J0ZGF0YSA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwkJbXV0ZXhfbG9jaygmcG9ydC0+bXV0ZXgpOworCisJCS8qIHNraXAgY2xvc2VkIHBvcnRzICovCisJCWlmICghcG9ydC0+cG9ydC5jb3VudCkgeworCQkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5tdXRleCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCBOX0lOX1VSQjsgaisrKSB7CisJCQl1cmIgPSBwb3J0ZGF0YS0+aW5fdXJic1tqXTsKKwkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX05PSU8pOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwkJCQllcnIoIiVzOiBFcnJvciAlZCBmb3IgYnVsayBVUkIgJWQiLAorCQkJCQkgX19mdW5jX18sIGVyciwgaSk7CisJCQkJcmV0dXJuIGVycjsKKwkJCX0KKwkJfQorCQltdXRleF91bmxvY2soJnBvcnQtPm11dGV4KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIE1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX1ZFUlNJT04oRFJJVkVSX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmQ2YjBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Fjc2VyaWFsLmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiBRdWFsY29tbSBTZXJpYWwgVVNCIGRyaXZlcgorICoKKyAqCUNvcHlyaWdodCAoYykgMjAwOCBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQuCisgKglDb3B5cmlnaHQgKGMpIDIwMDkgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqCUNvcHlyaWdodCAoYykgMjAwOSBOb3ZlbGwgSW5jLgorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24KKyAqCTIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKworI2RlZmluZSBEUklWRVJfQVVUSE9SICJRdWFsY29tbSBJbmMiCisjZGVmaW5lIERSSVZFUl9ERVNDICJRdWFsY29tbSBVU0IgU2VyaWFsIGRyaXZlciIKKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwNWM2LCAweDkyMTEpfSwJLyogQWNlciBHb2JpIFFETCBkZXZpY2UgKi8KKwl7VVNCX0RFVklDRSgweDA1YzYsIDB4OTIxMil9LAkvKiBBY2VyIEdvYmkgTW9kZW0gRGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2YwLCAweDFmMWQpfSwJLyogSFAgdW4yNDAwIEdvYmkgTW9kZW0gRGV2aWNlICovCisJe1VTQl9ERVZJQ0UoMHgwM2YwLCAweDIwMWQpfSwJLyogSFAgdW4yNDAwIEdvYmkgUURMIERldmljZSAqLworCXsgfQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBxY2RyaXZlciA9IHsKKwkubmFtZQkJCT0gInFjc2VyaWFsIiwKKwkucHJvYmUJCQk9IHVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QJCT0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZQkJPSBpZF90YWJsZSwKKwkuc3VzcGVuZAkJPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCisJLnJlc3VtZQkJCT0gdXNiX3NlcmlhbF9yZXN1bWUsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kCT0gdHJ1ZSwKK307CisKK3N0YXRpYyBpbnQgcWNwcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJX191OCBuaW50ZjsKKwlfX3U4IGlmbnVtOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCW5pbnRmID0gc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsKKwlkYmcoIk51bSBJbnRlcmZhY2VzID0gJWQiLCBuaW50Zik7CisJaWZudW0gPSBzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKwlkYmcoIlRoaXMgSW50ZXJmYWNlID0gJWQiLCBpZm51bSk7CisKKwlzd2l0Y2ggKG5pbnRmKSB7CisJY2FzZSAxOgorCQkvKiBRREwgbW9kZSAqLworCQlpZiAoc2VyaWFsLT5pbnRlcmZhY2UtPm51bV9hbHRzZXR0aW5nID09IDIpIHsKKwkJCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGY7CisKKwkJCWludGYgPSAmc2VyaWFsLT5pbnRlcmZhY2UtPmFsdHNldHRpbmdbMV07CisJCQlpZiAoaW50Zi0+ZGVzYy5iTnVtRW5kcG9pbnRzID09IDIpIHsKKwkJCQlpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oJmludGYtPmVuZHBvaW50WzBdLmRlc2MpICYmCisJCQkJICAgIHVzYl9lbmRwb2ludF9pc19idWxrX291dCgmaW50Zi0+ZW5kcG9pbnRbMV0uZGVzYykpIHsKKwkJCQkJZGJnKCJRREwgcG9ydCBmb3VuZCIpOworCQkJCQlyZXR2YWwgPSB1c2Jfc2V0X2ludGVyZmFjZShzZXJpYWwtPmRldiwgaWZudW0sIDEpOworCQkJCQlpZiAocmV0dmFsIDwgMCkgeworCQkJCQkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCQkJCQkiQ291bGQgbm90IHNldCBpbnRlcmZhY2UsIGVycm9yICVkXG4iLAorCQkJCQkJCXJldHZhbCk7CisJCQkJCQlyZXR2YWwgPSAtRU5PREVWOworCQkJCQl9CisJCQkJCXJldHVybiByZXR2YWw7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSA0OgorCQkvKiBDb21wb3NpdGUgbW9kZSAqLworCQlpZiAoaWZudW0gPT0gMikgeworCQkJZGJnKCJNb2RlbSBwb3J0IGZvdW5kIik7CisJCQlyZXR2YWwgPSB1c2Jfc2V0X2ludGVyZmFjZShzZXJpYWwtPmRldiwgaWZudW0sIDApOworCQkJaWYgKHJldHZhbCA8IDApIHsKKwkJCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkiQ291bGQgbm90IHNldCBpbnRlcmZhY2UsIGVycm9yICVkXG4iLAorCQkJCQlyZXR2YWwpOworCQkJCXJldHZhbCA9IC1FTk9ERVY7CisJCQl9CisJCQlyZXR1cm4gcmV0dmFsOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwKKwkJCSJ1bmtub3duIG51bWJlciBvZiBpbnRlcmZhY2VzOiAlZFxuIiwgbmludGYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHFjZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciAgICAgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgICAgICA9ICJxY3NlcmlhbCIsCisJfSwKKwkuZGVzY3JpcHRpb24gICAgICAgICA9ICJRdWFsY29tbSBVU0IgbW9kZW0iLAorCS5pZF90YWJsZSAgICAgICAgICAgID0gaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgICAgICAgICAgPSAmcWNkcml2ZXIsCisJLm51bV9wb3J0cyAgICAgICAgICAgPSAxLAorCS5wcm9iZSAgICAgICAgICAgICAgID0gcWNwcm9iZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHFjaW5pdCh2b2lkKQoreworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZxY2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmcWNkcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZxY2RldmljZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBxY2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmcWNkcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcWNkZXZpY2UpOworfQorCittb2R1bGVfaW5pdChxY2luaXQpOworbW9kdWxlX2V4aXQocWNleGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzY2JjOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYwpAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIFN5bWJvbCBVU0IgYmFyY29kZSB0byBzZXJpYWwgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm92ZWxsIEluYy4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCisgKgkyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworc3RhdGljIGludCBkZWJ1ZzsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKDB4MDVlMCwgMHgwNjAwKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCisvKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhbGwgb2YgdGhlIGluZGl2aWR1YWwgZGV2aWNlIGluZm9ybWF0aW9uICovCitzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKwl1bnNpZ25lZCBjaGFyICppbnRfYnVmZmVyOworCXN0cnVjdCB1cmIgKmludF91cmI7CisJaW50IGJ1ZmZlcl9zaXplOworCXU4IGJJbnRlcnZhbDsKKwl1OCBpbnRfYWRkcmVzczsKKwlzcGlubG9ja190IGxvY2s7CS8qIHByb3RlY3RzIHRoZSBmb2xsb3dpbmcgZmxhZ3MgKi8KKwlib29sIHRocm90dGxlZDsKKwlib29sIGFjdHVhbGx5X3Rocm90dGxlZDsKKwlib29sIHJ0czsKK307CisKK3N0YXRpYyB2b2lkIHN5bWJvbF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHByaXYtPnBvcnQ7CisJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHJlc3VsdDsKKwlpbnQgYXZhaWxhYmxlX3Jvb20gPSAwOworCWludCBkYXRhX2xlbmd0aDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLAorCQkgICAgX19mdW5jX18sIHN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCisJCSAgICBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCSAgICAgIGRhdGEpOworCisJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDEpIHsKKwkJZGF0YV9sZW5ndGggPSB1cmItPmFjdHVhbF9sZW5ndGggLSAxOworCisJCS8qCisJCSAqIERhdGEgZnJvbSB0aGUgZGV2aWNlIGNvbWVzIHdpdGggYSAxIGJ5dGUgaGVhZGVyOgorCQkgKgorCQkgKiA8c2l6ZSBvZiBkYXRhPmRhdGEuLi4KKwkJICogCVRoaXMgaXMgcmVhbCBkYXRhIHRvIGJlIHNlbnQgdG8gdGhlIHR0eSBsYXllcgorCQkgKiB3ZSBwcmV0dHkgbXVjaCBqdXN0IGlnbm9yZSB0aGUgc2l6ZSBhbmQgc2VuZCBldmVyeXRoaW5nCisJCSAqIGVsc2UgdG8gdGhlIHR0eSBsYXllci4KKwkJICovCisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCQlpZiAodHR5KSB7CisJCQlhdmFpbGFibGVfcm9vbSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwKKwkJCQkJCQlkYXRhX2xlbmd0aCk7CisJCQlpZiAoYXZhaWxhYmxlX3Jvb20pIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgJmRhdGFbMV0sCisJCQkJCQkgICAgICAgYXZhaWxhYmxlX3Jvb20pOworCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisJCQl9CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJfQorCX0gZWxzZSB7CisJCWRldl9kYmcoJnByaXYtPnVkZXYtPmRldiwKKwkJCSJJbXByb3BlciBhbW1vdW50IG9mIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLCAiCisJCQkiJWQgYnl0ZXMiLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCX0KKworZXhpdDoKKwlzcGluX2xvY2soJnByaXYtPmxvY2spOworCisJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkIGlmIHdlIHNob3VsZCAqLworCWlmICghcHJpdi0+dGhyb3R0bGVkKSB7CisJCXVzYl9maWxsX2ludF91cmIocHJpdi0+aW50X3VyYiwgcHJpdi0+dWRldiwKKwkJCQkgdXNiX3JjdmludHBpcGUocHJpdi0+dWRldiwKKwkJCQkgCQlwcml2LT5pbnRfYWRkcmVzcyksCisJCQkJIHByaXYtPmludF9idWZmZXIsIHByaXYtPmJ1ZmZlcl9zaXplLAorCQkJCSBzeW1ib2xfaW50X2NhbGxiYWNrLCBwcml2LCBwcml2LT5iSW50ZXJ2YWwpOworCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwcml2LT5pbnRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwKKwkJCSAgICAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwl9IGVsc2UKKwkJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gdHJ1ZTsKKwlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc3ltYm9sX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCXN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBzeW1ib2xfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX2RhdGEocG9ydC0+c2VyaWFsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXN1bHQgPSAwOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGhyb3R0bGVkID0gZmFsc2U7CisJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gZmFsc2U7CisJcHJpdi0+cG9ydCA9IHBvcnQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBGb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgdGhlIGRhdGEKKwkgKiB0aHJvdWdoLCBvdGhlcndpc2UgaXQgaXMgc2NoZWR1bGVkLCBhbmQgd2l0aCBoaWdoIGRhdGEgcmF0ZXMgKGxpa2UKKwkgKiB3aXRoIE9IQ0kpIGRhdGEgY2FuIGdldCBsb3N0LgorCSAqLworCWlmICh0dHkpCisJCXR0eS0+bG93X2xhdGVuY3kgPSAxOworCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9pbnRfdXJiKHByaXYtPmludF91cmIsIHByaXYtPnVkZXYsCisJCQkgdXNiX3JjdmludHBpcGUocHJpdi0+dWRldiwgcHJpdi0+aW50X2FkZHJlc3MpLAorCQkJIHByaXYtPmludF9idWZmZXIsIHByaXYtPmJ1ZmZlcl9zaXplLAorCQkJIHN5bWJvbF9pbnRfY2FsbGJhY2ssIHByaXYsIHByaXYtPmJJbnRlcnZhbCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+aW50X3VyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShwb3J0LT5zZXJpYWwpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIHNodXRkb3duIG91ciB1cmJzICovCisJdXNiX2tpbGxfdXJiKHByaXYtPmludF91cmIpOworfQorCitzdGF0aWMgdm9pZCBzeW1ib2xfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcml2LT50aHJvdHRsZWQgPSB0cnVlOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc3ltYm9sX3VudGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3Qgc3ltYm9sX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHBvcnQtPnNlcmlhbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJcHJpdi0+dGhyb3R0bGVkID0gZmFsc2U7CisJcHJpdi0+YWN0dWFsbHlfdGhyb3R0bGVkID0gZmFsc2U7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcHJpdi0+aW50X3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocHJpdi0+aW50X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOworfQorCitzdGF0aWMgaW50IHN5bWJvbF9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwb3J0LT5kZXY7CisKKwkvKgorCSAqIFJpZ2h0IG5vdyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjb21tYW5kcworCSAqIG1vc3QgdXNlcnNwYWNlIHRvb2xzIHdhbnQgdG8gc2VlIGZvciB0aGlzIGRyaXZlciwKKwkgKiBzbyBqdXN0IGxvZyB0aGUgdGhpbmdzLgorCSAqLworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUSU9DU0VSR0VUTFNSOgorCQlkZXZfaW5mbyhkZXYsICIlczogVElPQ1NFUkdFVExTUlxuIiwgX19mdW5jX18pOworCQlicmVhazsKKworCWNhc2UgVElPQ0dTRVJJQUw6CisJCWRldl9pbmZvKGRldiwgIiVzOiBUSU9DR1NFUklBTFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKworCWNhc2UgVElPQ01JV0FJVDoKKwkJZGV2X2luZm8oZGV2LCAiJXM6IFRJT0NNSVdBSVRcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NHSUNPVU5UOgorCQlkZXZfaW5mbyhkZXYsICIlczogVElPQ0dJQ09VTlRcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2luZm8oZGV2LCAiJXM6IHVua25vd24gKCVkKVxuIiwgX19mdW5jX18sIGNtZCk7CisJfQorCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgc3ltYm9sX3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwb3J0LT5kZXY7CisKKwkvKiBUT0RPICovCisJLyogcHJvYmFibHkganVzdCBuZWVkIHRvIHNoYWRvdyB3aGF0ZXZlciB3YXMgc2VudCB0byB1cyBoZXJlICovCisJZGV2X2luZm8oZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzeW1ib2xfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBvcnQtPmRldjsKKworCS8qIFRPRE8gKi8KKwkvKiBwcm9iYWJseSBqdXN0IG5lZWQgdG8gc2hhZG93IHdoYXRldmVyIHdhcyBzZW50IHRvIHVzIGhlcmUgKi8KKwlkZXZfaW5mbyhkZXYsICIlc1xuIiwgX19mdW5jX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN5bWJvbF9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGY7CisJaW50IGk7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJYm9vbCBpbnRfaW5fZm91bmQgPSBmYWxzZTsKKworCS8qIGNyZWF0ZSBvdXIgcHJpdmF0ZSBzZXJpYWwgc3RydWN0dXJlICovCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJcHJpdi0+c2VyaWFsID0gc2VyaWFsOworCXByaXYtPnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJcHJpdi0+dWRldiA9IHNlcmlhbC0+ZGV2OworCisJLyogZmluZCBvdXIgaW50ZXJydXB0IGVuZHBvaW50ICovCisJaW50ZiA9IHNlcmlhbC0+aW50ZXJmYWNlLT5hbHRzZXR0aW5nOworCWZvciAoaSA9IDA7IGkgPCBpbnRmLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCisJCWVuZHBvaW50ID0gJmludGYtPmVuZHBvaW50W2ldLmRlc2M7CisJCWlmICghdXNiX2VuZHBvaW50X2lzX2ludF9pbihlbmRwb2ludCkpCisJCQljb250aW51ZTsKKworCQlwcml2LT5pbnRfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwcml2LT5pbnRfdXJiKSB7CisJCQlkZXZfZXJyKCZwcml2LT51ZGV2LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlwcml2LT5idWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgKiAyOworCQlwcml2LT5pbnRfYnVmZmVyID0ga21hbGxvYyhwcml2LT5idWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdi0+aW50X2J1ZmZlcikgeworCQkJZGV2X2VycigmcHJpdi0+dWRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJcHJpdi0+aW50X2FkZHJlc3MgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJcHJpdi0+YkludGVydmFsID0gZW5kcG9pbnQtPmJJbnRlcnZhbDsKKworCQkvKiBzZXQgdXAgb3VyIGludCB1cmIgKi8KKwkJdXNiX2ZpbGxfaW50X3VyYihwcml2LT5pbnRfdXJiLCBwcml2LT51ZGV2LAorCQkJCSB1c2JfcmN2aW50cGlwZShwcml2LT51ZGV2LAorCQkJCSAJCWVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgcHJpdi0+aW50X2J1ZmZlciwgcHJpdi0+YnVmZmVyX3NpemUsCisJCQkJIHN5bWJvbF9pbnRfY2FsbGJhY2ssIHByaXYsIHByaXYtPmJJbnRlcnZhbCk7CisKKwkJaW50X2luX2ZvdW5kID0gdHJ1ZTsKKwkJYnJlYWs7CisJCX0KKworCWlmICghaW50X2luX2ZvdW5kKSB7CisJCWRldl9lcnIoJnByaXYtPnVkZXYtPmRldiwKKwkJCSJFcnJvciAtIHRoZSBwcm9wZXIgZW5kcG9pbnRzIHdlcmUgbm90IGZvdW5kIVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIHByaXYpOworCXJldHVybiAwOworCitlcnJvcjoKKwl1c2JfZnJlZV91cmIocHJpdi0+aW50X3VyYik7CisJa2ZyZWUocHJpdi0+aW50X2J1ZmZlcik7CisJa2ZyZWUocHJpdik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc3ltYm9sX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHN5bWJvbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCisJZGJnKCIlcyIsIF9fZnVuY19fKTsKKworCXVzYl9raWxsX3VyYihwcml2LT5pbnRfdXJiKTsKKwl1c2JfZnJlZV91cmIocHJpdi0+aW50X3VyYik7CisJa2ZyZWUocHJpdi0+aW50X2J1ZmZlcik7CisJa2ZyZWUocHJpdik7CisJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIE5VTEwpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc3ltYm9sX2RyaXZlciA9IHsKKwkubmFtZSA9CQkJInN5bWJvbCIsCisJLnByb2JlID0JCXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQkJdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZCA9IAkxLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBzeW1ib2xfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkic3ltYm9sIiwKKwl9LAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9IAkJJnN5bWJvbF9kcml2ZXIsCisJLm51bV9wb3J0cyA9CQkxLAorCS5hdHRhY2ggPQkJc3ltYm9sX3N0YXJ0dXAsCisJLm9wZW4gPQkJCXN5bWJvbF9vcGVuLAorCS5jbG9zZSA9CQlzeW1ib2xfY2xvc2UsCisJLnNodXRkb3duID0JCXN5bWJvbF9zaHV0ZG93biwKKwkudGhyb3R0bGUgPSAJCXN5bWJvbF90aHJvdHRsZSwKKwkudW50aHJvdHRsZSA9CQlzeW1ib2xfdW50aHJvdHRsZSwKKwkuaW9jdGwgPSAJCXN5bWJvbF9pb2N0bCwKKwkudGlvY21nZXQgPSAJCXN5bWJvbF90aW9jbWdldCwKKwkudGlvY21zZXQgPSAJCXN5bWJvbF90aW9jbXNldCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHN5bWJvbF9pbml0KHZvaWQpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnN5bWJvbF9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZzeW1ib2xfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnN5bWJvbF9kZXZpY2UpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzeW1ib2xfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzeW1ib2xfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnN5bWJvbF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdChzeW1ib2xfaW5pdCk7Cittb2R1bGVfZXhpdChzeW1ib2xfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgYm9vbCwgU19JUlVHTyB8IFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCBjZmNmZDVhLi43NDJhNWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTIwNCw2ICsyMDQsMTEgQEAKIAkJZ290byBiYWlsb3V0X2tyZWZfcHV0OwogCX0KIAorCWlmIChwb3J0LT5zZXJpYWwtPmRpc2Nvbm5lY3RlZCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGJhaWxvdXRfa3JlZl9wdXQ7CisJfQorCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcG9ydC0+bXV0ZXgpKSB7CiAJCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKIAkJZ290byBiYWlsb3V0X2tyZWZfcHV0OwpAQCAtMTA2Nyw2ICsxMDcyLDggQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OwogCWludCBpLCByID0gMDsKIAorCXNlcmlhbC0+c3VzcGVuZGluZyA9IDE7CisKIAlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgewogCQlwb3J0ID0gc2VyaWFsLT5wb3J0W2ldOwogCQlpZiAocG9ydCkKQEAgLTEwODMsMTAgKzEwOTAsMTUgQEAKIGludCB1c2Jfc2VyaWFsX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlpbnQgcnY7CiAKKwlzZXJpYWwtPnN1c3BlbmRpbmcgPSAwOwogCWlmIChzZXJpYWwtPnR5cGUtPnJlc3VtZSkKLQkJcmV0dXJuIHNlcmlhbC0+dHlwZS0+cmVzdW1lKHNlcmlhbCk7Ci0JcmV0dXJuIDA7CisJCXJ2ID0gc2VyaWFsLT50eXBlLT5yZXN1bWUoc2VyaWFsKTsKKwllbHNlCisJCXJ2ID0gdXNiX3NlcmlhbF9nZW5lcmljX3Jlc3VtZShzZXJpYWwpOworCisJcmV0dXJuIHJ2OwogfQogRVhQT1JUX1NZTUJPTCh1c2Jfc2VyaWFsX3Jlc3VtZSk7CiAKQEAgLTEyMjIsNyArMTIzNCw2IEBACiAJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHJlYWRfYnVsa19jYWxsYmFjayk7CiAJc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHdyaXRlX2J1bGtfY2FsbGJhY2spOwogCXNldF90b19nZW5lcmljX2lmX251bGwoZGV2aWNlLCBzaHV0ZG93bik7Ci0Jc2V0X3RvX2dlbmVyaWNfaWZfbnVsbChkZXZpY2UsIHJlc3VtZSk7CiB9CiAKIGludCB1c2Jfc2VyaWFsX3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZHJpdmVyKQpAQCAtMTIzMCw2ICsxMjQxLDkgQEAKIAkvKiBtdXN0IGJlIGNhbGxlZCB3aXRoIEJLTCBoZWxkICovCiAJaW50IHJldHZhbDsKIAorCWlmICh1c2JfZGlzYWJsZWQoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlmaXh1cF9nZW5lcmljKGRyaXZlcik7CiAKIAlpZiAoIWRyaXZlci0+ZGVzY3JpcHRpb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKaW5kZXggOWRmNjg4Ny4uOGEzNzJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZwpAQCAtMiw4ICsyLDggQEAKICMgVVNCIFN0b3JhZ2UgZHJpdmVyIGNvbmZpZ3VyYXRpb24KICMKIAotY29tbWVudCAiTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsiCi1jb21tZW50ICJzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKK2NvbW1lbnQgIk5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkiCitjb21tZW50ICJhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbyIKIAlkZXBlbmRzIG9uIFVTQgogCiBjb25maWcgVVNCX1NUT1JBR0UKQEAgLTMyLDIxICszMiwyNSBAQAogCSAgdmVyYm9zZSBkZWJ1Z2dpbmcgbWVzc2FnZXMuCiAKIGNvbmZpZyBVU0JfU1RPUkFHRV9EQVRBRkFCCi0JYm9vbCAiRGF0YWZhYiBDb21wYWN0IEZsYXNoIFJlYWRlciBzdXBwb3J0IgorCXRyaXN0YXRlICJEYXRhZmFiIENvbXBhY3QgRmxhc2ggUmVhZGVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGNlcnRhaW4gRGF0YWZhYiBDb21wYWN0Rmxhc2ggcmVhZGVycy4KIAkgIERhdGFmYWIgaGFzIGEgd2ViIHBhZ2UgYXQgPGh0dHA6Ly93d3cuZGF0YWZhYnVzYS5jb20vPi4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWRhdGFmYWIuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9GUkVFQ09NCi0JYm9vbCAiRnJlZWNvbSBVU0IvQVRBUEkgQnJpZGdlIHN1cHBvcnQiCisJdHJpc3RhdGUgIkZyZWVjb20gVVNCL0FUQVBJIEJyaWRnZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgRnJlZWNvbSBVU0IgdG8gSURFL0FUQVBJIGFkYXB0b3IuCiAJICBGcmVlY29tIGhhcyBhIHdlYiBwYWdlIGF0IDxodHRwOi8vd3d3LmZyZWVjb20uZGUvPi4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWZyZWVjb20uCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9JU0QyMDAKLQlib29sICJJU0QtMjAwIFVTQi9BVEEgQnJpZGdlIHN1cHBvcnQiCisJdHJpc3RhdGUgIklTRC0yMDAgVVNCL0FUQSBCcmlkZ2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgVVNCIE1hc3MgU3RvcmUgZGV2aWNlcyBiYXNlZApAQCAtNjEsOCArNjUsMTAgQEAKIAkgIC0gQ3lRJ3ZlIENRODA2MEEgQ0RSVyBkcml2ZQogCSAgLSBQbGFuZXggZVh0cmVtZSBEcml2ZSBSWC0yNUhVIFVTQi1JREUgY2FibGUgKG5vdCBtb2RlbCBSWC0yNVUpCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1pc2QyMDAuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9VU0JBVAotCWJvb2wgIlVTQkFUL1VTQkFUMDItYmFzZWQgc3RvcmFnZSBzdXBwb3J0IgorCXRyaXN0YXRlICJVU0JBVC9VU0JBVDAyLWJhc2VkIHN0b3JhZ2Ugc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHN0b3JhZ2UgZGV2aWNlcwpAQCAtODIsMzAgKzg4LDM4IEBACiAJICAtIFJDQSBMWVJBIE1QMyBwb3J0YWJsZQogCSAgLSBTYW5kaXNrIEltYWdlTWF0ZSBTRERSLTA1YgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtdXNiYXQuCisKIGNvbmZpZyBVU0JfU1RPUkFHRV9TRERSMDkKLQlib29sICJTYW5EaXNrIFNERFItMDkgKGFuZCBvdGhlciBTbWFydE1lZGlhLCBpbmNsdWRpbmcgRFBDTSkgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiU2FuRGlzayBTRERSLTA5IChhbmQgb3RoZXIgU21hcnRNZWRpYSwgaW5jbHVkaW5nIERQQ00pIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgU2FuZGlzayBTRERSLTA5CiAJICBTbWFydE1lZGlhIHJlYWRlciBpbiB0aGUgVVNCIE1hc3MgU3RvcmFnZSBkcml2ZXIuCiAJICBBbHNvIHdvcmtzIGZvciB0aGUgTWljcm90ZWNoIFppbyEgQ29tcGFjdEZsYXNoL1NtYXJ0TWVkaWEgcmVhZGVyLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtc2RkcjA5LgorCiBjb25maWcgVVNCX1NUT1JBR0VfU0REUjU1Ci0JYm9vbCAiU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiU2FuRGlzayBTRERSLTU1IFNtYXJ0TWVkaWEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBTYW5kaXNrIFNERFItNTUKIAkgIFNtYXJ0TWVkaWEgcmVhZGVyIGluIHRoZSBVU0IgTWFzcyBTdG9yYWdlIGRyaXZlci4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLXNkZHI1NS4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0pVTVBTSE9UCi0JYm9vbCAiTGV4YXIgSnVtcHNob3QgQ29tcGFjdCBGbGFzaCBSZWFkZXIiCisJdHJpc3RhdGUgIkxleGFyIEp1bXBzaG90IENvbXBhY3QgRmxhc2ggUmVhZGVyIgogCWRlcGVuZHMgb24gVVNCX1NUT1JBR0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIExleGFyIEp1bXBzaG90CiAJICBVU0IgQ29tcGFjdEZsYXNoIHJlYWRlci4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWp1bXBzaG90LgorCiBjb25maWcgVVNCX1NUT1JBR0VfQUxBVURBCi0JYm9vbCAiT2x5bXB1cyBNQVVTQi0xMC9GdWppIERQQy1SMSBzdXBwb3J0IgorCXRyaXN0YXRlICJPbHltcHVzIE1BVVNCLTEwL0Z1amkgRFBDLVIxIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMApAQCAtMTE0LDggKzEyOCwxMCBAQAogCSAgVGhlc2UgZGV2aWNlcyBhcmUgYmFzZWQgb24gdGhlIEFsYXVkYSBjaGlwIGFuZCBzdXBwb3J0IGJvdGgKIAkgIFhEIGFuZCBTbWFydE1lZGlhIGNhcmRzLgogCisJICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtYWxhdWRhLgorCiBjb25maWcgVVNCX1NUT1JBR0VfT05FVE9VQ0gKLQlib29sICJTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXMiCisJdHJpc3RhdGUgIlN1cHBvcnQgT25lVG91Y2ggQnV0dG9uIG9uIE1heHRvciBIYXJkIERyaXZlcyIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJZGVwZW5kcyBvbiBJTlBVVD15IHx8IElOUFVUPVVTQl9TVE9SQUdFCiAJaGVscApAQCAtMTI3LDggKzE0MywxMCBAQAogCSAgdGhpcyBpbnB1dCBpbiBhbnkga2V5YmluZGluZyBzb2Z0d2FyZS4gKGUuZy4gZ25vbWUncyBrZXlib2FyZCBzaG9ydC0KIAkgIGN1dHMpCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1vbmV0b3VjaC4KKwogY29uZmlnIFVTQl9TVE9SQUdFX0tBUk1BCi0JYm9vbCAiU3VwcG9ydCBmb3IgUmlvIEthcm1hIG11c2ljIHBsYXllciIKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgUmlvIEthcm1hIG11c2ljIHBsYXllciIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBSaW8gS2FybWEKQEAgLTEzOSw4ICsxNTcsMTAgQEAKIAkgIG9uIHRoZSByZXN1bHRpbmcgc2NzaSBkZXZpY2Ugbm9kZSByZXR1cm5zIHRoZSBLYXJtYSB0byBub3JtYWwKIAkgIG9wZXJhdGlvbi4KIAorCSAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWthcm1hLgorCiBjb25maWcgVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotCWJvb2wgIlNBVCBlbXVsYXRpb24gb24gQ3lwcmVzcyBVU0IvQVRBIEJyaWRnZSB3aXRoIEFUQUNCIgorCXRyaXN0YXRlICJTQVQgZW11bGF0aW9uIG9uIEN5cHJlc3MgVVNCL0FUQSBCcmlkZ2Ugd2l0aCBBVEFDQiIKIAlkZXBlbmRzIG9uIFVTQl9TVE9SQUdFCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgU0FUIChhdGEgcGFzcyB0aHJvdWdoKSBvbiBkZXZpY2VzIGJhc2VkCkBAIC0xNTAsNiArMTcwLDggQEAKIAkgIElmIHlvdSBzYXkgbm8gaGVyZSB5b3VyIGRldmljZSB3aWxsIHN0aWxsIHdvcmsgd2l0aCB0aGUgc3RhbmRhcmQgdXNiCiAJICBtYXNzIHN0b3JhZ2UgY2xhc3MuCiAKKwkgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1jeXByZXNzLgorCiBjb25maWcgVVNCX0xJQlVTVUFMCiAJYm9vbCAiVGhlIHNoYXJlZCB0YWJsZSBvZiBjb21tb24gKG9yIHVzdWFsKSBzdG9yYWdlIGRldmljZXMiCiAJZGVwZW5kcyBvbiBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCmluZGV4IGIzMjA2OTMuLjViZTU0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZQpAQCAtMTAsMjEgKzEwLDM2IEBACiBvYmotJChDT05GSUdfVVNCX1NUT1JBR0UpCSs9IHVzYi1zdG9yYWdlLm8KIAogdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHKQkrPSBkZWJ1Zy5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQpCSs9IHNodXR0bGVfdXNiYXQubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSkJKz0gc2RkcjA5Lm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUpCSs9IHNkZHI1NS5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSkJKz0gZnJlZWNvbS5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwKQkrPSBpc2QyMDAubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIpCSs9IGRhdGFmYWIubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKQkrPSBqdW1wc2hvdC5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKQkrPSBhbGF1ZGEubwotdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIKQkrPSBvbmV0b3VjaC5vCi11c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpCSs9IGthcm1hLm8KLXVzYi1zdG9yYWdlLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSArPSBjeXByZXNzX2F0YWNiLm8KIAogdXNiLXN0b3JhZ2Utb2JqcyA6PQlzY3NpZ2x1ZS5vIHByb3RvY29sLm8gdHJhbnNwb3J0Lm8gdXNiLm8gXAogCQkJaW5pdGlhbGl6ZXJzLm8gc2llcnJhX21zLm8gb3B0aW9uX21zLm8gJCh1c2Itc3RvcmFnZS1vYmoteSkKIAotaWZuZXEgKCQoQ09ORklHX1VTQl9MSUJVU1VBTCksKQotCW9iai0kKENPTkZJR19VU0IpCSs9IGxpYnVzdWFsLm8KK2lmZXEgKCQoQ09ORklHX1VTQl9MSUJVU1VBTCksKQorCXVzYi1zdG9yYWdlLW9ianMJKz0gdXN1YWwtdGFibGVzLm8KK2Vsc2UKKwlvYmotJChDT05GSUdfVVNCKQkrPSBsaWJ1c3VhbC5vIHVzdWFsLXRhYmxlcy5vCiBlbmRpZgorCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKQkrPSB1bXMtYWxhdWRhLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSArPSB1bXMtY3lwcmVzcy5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikJKz0gdW1zLWRhdGFmYWIubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00pCSs9IHVtcy1mcmVlY29tLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDApCSs9IHVtcy1pc2QyMDAubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKQkrPSB1bXMtanVtcHNob3Qubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BKQkJKz0gdW1zLWthcm1hLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCkJKz0gdW1zLW9uZXRvdWNoLm8KK29iai0kKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkpCSs9IHVtcy1zZGRyMDkubworb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSkJKz0gdW1zLXNkZHI1NS5vCitvYmotJChDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQpCQkrPSB1bXMtdXNiYXQubworCit1bXMtYWxhdWRhLW9ianMJCTo9IGFsYXVkYS5vCit1bXMtY3lwcmVzcy1vYmpzCTo9IGN5cHJlc3NfYXRhY2IubwordW1zLWRhdGFmYWItb2Jqcwk6PSBkYXRhZmFiLm8KK3Vtcy1mcmVlY29tLW9ianMJOj0gZnJlZWNvbS5vCit1bXMtaXNkMjAwLW9ianMJCTo9IGlzZDIwMC5vCit1bXMtanVtcHNob3Qtb2Jqcwk6PSBqdW1wc2hvdC5vCit1bXMta2FybWEtb2JqcwkJOj0ga2FybWEubwordW1zLW9uZXRvdWNoLW9ianMJOj0gb25ldG91Y2gubwordW1zLXNkZHIwOS1vYmpzCQk6PSBzZGRyMDkubwordW1zLXNkZHI1NS1vYmpzCQk6PSBzZGRyNTUubwordW1zLXVzYmF0LW9ianMJCTo9IHNodXR0bGVfdXNiYXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKaW5kZXggOGQzNzExYS4uNjdlZGM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCkBAIC0zMSw2ICszMSw4IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KQEAgLTM5LDcgKzQxLDc5IEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImFsYXVkYS5oIgorCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgQWxhdWRhLWJhc2VkIGNhcmQgcmVhZGVycyIpOworTU9EVUxFX0FVVEhPUigiRGFuaWVsIERyYWtlIDxkc2RAZ2VudG9vLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoKKyAqIFN0YXR1cyBieXRlcworICovCisjZGVmaW5lIEFMQVVEQV9TVEFUVVNfRVJST1IJCTB4MDEKKyNkZWZpbmUgQUxBVURBX1NUQVRVU19SRUFEWQkJMHg0MAorCisvKgorICogQ29udHJvbCBvcGNvZGVzIChmb3IgcmVxdWVzdCBmaWVsZCkKKyAqLworI2RlZmluZSBBTEFVREFfR0VUX1hEX01FRElBX1NUQVRVUwkweDA4CisjZGVmaW5lIEFMQVVEQV9HRVRfU01fTUVESUFfU1RBVFVTCTB4OTgKKyNkZWZpbmUgQUxBVURBX0FDS19YRF9NRURJQV9DSEFOR0UJMHgwYQorI2RlZmluZSBBTEFVREFfQUNLX1NNX01FRElBX0NIQU5HRQkweDlhCisjZGVmaW5lIEFMQVVEQV9HRVRfWERfTUVESUFfU0lHCQkweDg2CisjZGVmaW5lIEFMQVVEQV9HRVRfU01fTUVESUFfU0lHCQkweDk2CisKKy8qCisgKiBCdWxrIGNvbW1hbmQgaWRlbnRpdHkgKGJ5dGUgMCkKKyAqLworI2RlZmluZSBBTEFVREFfQlVMS19DTUQJCQkweDQwCisKKy8qCisgKiBCdWxrIG9wY29kZXMgKGJ5dGUgMSkKKyAqLworI2RlZmluZSBBTEFVREFfQlVMS19HRVRfUkVEVV9EQVRBCTB4ODUKKyNkZWZpbmUgQUxBVURBX0JVTEtfUkVBRF9CTE9DSwkJMHg5NAorI2RlZmluZSBBTEFVREFfQlVMS19FUkFTRV9CTE9DSwkJMHhhMworI2RlZmluZSBBTEFVREFfQlVMS19XUklURV9CTE9DSwkJMHhiNAorI2RlZmluZSBBTEFVREFfQlVMS19HRVRfU1RBVFVTMgkJMHhiNworI2RlZmluZSBBTEFVREFfQlVMS19SRVNFVF9NRURJQQkJMHhlMAorCisvKgorICogUG9ydCB0byBvcGVyYXRlIG9uIChieXRlIDgpCisgKi8KKyNkZWZpbmUgQUxBVURBX1BPUlRfWEQJCQkweDAwCisjZGVmaW5lIEFMQVVEQV9QT1JUX1NNCQkJMHgwMQorCisvKgorICogTEJBIGFuZCBQQkEgYXJlIHVuc2lnbmVkIGludHMuIFNwZWNpYWwgdmFsdWVzLgorICovCisjZGVmaW5lIFVOREVGICAgIDB4ZmZmZgorI2RlZmluZSBTUEFSRSAgICAweGZmZmUKKyNkZWZpbmUgVU5VU0FCTEUgMHhmZmZkCisKK3N0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7CisJdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsJCS8qIHRvdGFsIG1lZGlhIHNpemUgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgcGFnZXNpemU7CQkvKiBwYWdlIHNpemUgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBpbnQgYmxvY2tzaXplOwkJLyogbnVtYmVyIG9mIHBhZ2VzIHBlciBibG9jayAqLworCXVuc2lnbmVkIGludCB1em9uZXNpemU7CQkvKiBudW1iZXIgb2YgdXNhYmxlIGJsb2NrcyBwZXIgem9uZSAqLworCXVuc2lnbmVkIGludCB6b25lc2l6ZTsJCS8qIG51bWJlciBvZiBibG9ja3MgcGVyIHpvbmUgKi8KKwl1bnNpZ25lZCBpbnQgYmxvY2ttYXNrOwkJLyogbWFzayB0byBnZXQgcGFnZSBmcm9tIGFkZHJlc3MgKi8KKworCXVuc2lnbmVkIGNoYXIgcGFnZXNoaWZ0OworCXVuc2lnbmVkIGNoYXIgYmxvY2tzaGlmdDsKKwl1bnNpZ25lZCBjaGFyIHpvbmVzaGlmdDsKKworCXUxNiAqKmxiYV90b19wYmE7CQkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqLworCXUxNiAqKnBiYV90b19sYmE7CQkvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqLworfTsKKworc3RydWN0IGFsYXVkYV9pbmZvIHsKKwlzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gcG9ydFsyXTsKKwlpbnQgd3JfZXA7CQkJLyogZW5kcG9pbnQgdG8gd3JpdGUgZGF0YSBvdXQgb2YgKi8KKworCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OworCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKwl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KK307CiAKICNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpPDw4ICkgKQogI2RlZmluZSBMU0Jfb2YocykgKChzKSYweEZGKQpAQCAtNTIsNiArMTI2LDQ4IEBACiAjZGVmaW5lIFBCQV9ISShwYmEpIChwYmEgPj4gMykKICNkZWZpbmUgUEJBX1pPTkUocGJhKSAocGJhID4+IDExKQogCitzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cyk7CisKKworLyoKKyAqIFRoZSB0YWJsZSBvZiBkZXZpY2VzCisgKi8KKyNkZWZpbmUgVU5VU1VBTF9ERVYoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yTmFtZSwgcHJvZHVjdE5hbWUsIHVzZVByb3RvY29sLCB1c2VUcmFuc3BvcnQsIFwKKwkJICAgIGluaXRGdW5jdGlvbiwgZmxhZ3MpIFwKK3sgVVNCX0RFVklDRV9WRVIoaWRfdmVuZG9yLCBpZF9wcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCksIFwKKyAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KKworc3RydWN0IHVzYl9kZXZpY2VfaWQgYWxhdWRhX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9hbGF1ZGEuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFsYXVkYV91c2JfaWRzKTsKKworI3VuZGVmIFVOVVNVQUxfREVWCisKKy8qCisgKiBUaGUgZmxhZ3MgdGFibGUKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZFZlbmRvciwgaWRQcm9kdWN0LCBiY2REZXZpY2VNaW4sIGJjZERldmljZU1heCwgXAorCQkgICAgdmVuZG9yX25hbWUsIHByb2R1Y3RfbmFtZSwgdXNlX3Byb3RvY29sLCB1c2VfdHJhbnNwb3J0LCBcCisJCSAgICBpbml0X2Z1bmN0aW9uLCBGbGFncykgXAoreyBcCisJLnZlbmRvck5hbWUgPSB2ZW5kb3JfbmFtZSwJXAorCS5wcm9kdWN0TmFtZSA9IHByb2R1Y3RfbmFtZSwJXAorCS51c2VQcm90b2NvbCA9IHVzZV9wcm90b2NvbCwJXAorCS51c2VUcmFuc3BvcnQgPSB1c2VfdHJhbnNwb3J0LAlcCisJLmluaXRGdW5jdGlvbiA9IGluaXRfZnVuY3Rpb24sCVwKK30KKworc3RhdGljIHN0cnVjdCB1c191bnVzdWFsX2RldiBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2FsYXVkYS5oIgorCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorCisKIC8qCiAgKiBNZWRpYSBoYW5kbGluZwogICovCkBAIC0zMDcsNyArNDIzLDggQEAKIAkJZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSk7CiAJbWVkaWFfaW5mbyA9IGFsYXVkYV9jYXJkX2ZpbmRfaWQoZGF0YVsxXSk7CiAJaWYgKG1lZGlhX2luZm8gPT0gTlVMTCkgewotCQlwcmludGsoImFsYXVkYV9pbml0X21lZGlhOiBVbnJlY29nbmlzZWQgbWVkaWEgc2lnbmF0dXJlOiAiCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJhbGF1ZGFfaW5pdF9tZWRpYTogVW5yZWNvZ25pc2VkIG1lZGlhIHNpZ25hdHVyZTogIgogCQkJIiUwMlggJTAyWCAlMDJYICUwMlhcbiIsCiAJCQlkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKQEAgLTUxOCw3ICs2MzUsOCBAQAogCiAJCS8qIGNoZWNrIGV2ZW4gcGFyaXR5ICovCiAJCWlmIChwYXJpdHlbZGF0YVs2XSBeIGRhdGFbN11dKSB7Ci0JCQlwcmludGsoImFsYXVkYV9yZWFkX21hcDogQmFkIHBhcml0eSBpbiBMQkEgZm9yIGJsb2NrICVkIgorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBwYXJpdHkgaW4gTEJBIGZvciBibG9jayAlZCIKIAkJCSAgICAgICAiICglMDJYICUwMlgpXG4iLCBpLCBkYXRhWzZdLCBkYXRhWzddKTsKIAkJCXBiYV90b19sYmFbaV0gPSBVTlVTQUJMRTsKIAkJCWNvbnRpbnVlOwpAQCAtNTM4LDEzICs2NTYsMTYgQEAKIAkJICovCiAKIAkJaWYgKGxiYV9vZmZzZXQgPj0gdXpvbmVzaXplKSB7Ci0JCQlwcmludGsoImFsYXVkYV9yZWFkX21hcDogQmFkIGxvdyBMQkEgJWQgZm9yIGJsb2NrICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxuIiwKIAkJCSAgICAgICBsYmFfcmVhbCwgYmxvY2tudW0pOwogCQkJY29udGludWU7CiAJCX0KIAogCQlpZiAobGJhX3RvX3BiYVtsYmFfb2Zmc2V0XSAhPSBVTkRFRikgewotCQkJcHJpbnRrKCJhbGF1ZGFfcmVhZF9tYXA6IExCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXG4iLAorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJhbGF1ZGFfcmVhZF9tYXA6ICIKKwkJCSAgICAgICAiTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcbiIsCiAJCQkgICAgICAgbGJhX3JlYWwsIGxiYV90b19wYmFbbGJhX29mZnNldF0sIGJsb2NrbnVtKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC03MTIsMTMgKzgzMywxNSBAQAogCWlmIChwYmEgPT0gMSkgewogCQkvKiBNYXliZSBpdCBpcyBpbXBvc3NpYmxlIHRvIHdyaXRlIHRvIFBCQSAxLgogCQkgICBGYWtlIHN1Y2Nlc3MsIGJ1dCBkb24ndCBkbyBhbnl0aGluZy4gKi8KLQkJcHJpbnRrKCJhbGF1ZGFfd3JpdGVfbGJhOiBhdm9pZCB3cml0aW5nIHRvIHBiYSAxXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImFsYXVkYV93cml0ZV9sYmE6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcbiIpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiAJfQogCiAJbmV3X3BiYSA9IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoJk1FRElBX0lORk8odXMpLCB6b25lKTsKIAlpZiAoIW5ld19wYmEpIHsKLQkJcHJpbnRrKCJhbGF1ZGFfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJhbGF1ZGFfd3JpdGVfbGJhOiBPdXQgb2YgdW51c2VkIGJsb2Nrc1xuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQogCkBAIC04MTgsNyArOTQxLDcgQEAKIAlsZW4gPSBtaW4oc2VjdG9ycywgYmxvY2tzaXplKSAqIChwYWdlc2l6ZSArIDY0KTsKIAlidWZmZXIgPSBrbWFsbG9jKGxlbiwgR0ZQX05PSU8pOwogCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQlwcmludGsoImFsYXVkYV9yZWFkX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGF1ZGFfcmVhZF9kYXRhOiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKIAl9CiAKQEAgLTkxMSw3ICsxMDM0LDcgQEAKIAlsZW4gPSBtaW4oc2VjdG9ycywgYmxvY2tzaXplKSAqIHBhZ2VzaXplOwogCWJ1ZmZlciA9IGttYWxsb2MobGVuLCBHRlBfTk9JTyk7CiAJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygiYWxhdWRhX3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGF1ZGFfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQogCkBAIC05MjEsNyArMTA0NCw3IEBACiAJICovCiAJYmxvY2tidWZmZXIgPSBrbWFsbG9jKChwYWdlc2l6ZSArIDY0KSAqIGJsb2Nrc2l6ZSwgR0ZQX05PSU8pOwogCWlmIChibG9ja2J1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50aygiYWxhdWRhX3dyaXRlX2RhdGE6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGF1ZGFfd3JpdGVfZGF0YTogT3V0IG9mIG1lbW9yeVxuIik7CiAJCWtmcmVlKGJ1ZmZlcik7CiAJCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7CiAJfQpAQCAtOTkxLDcgKzExMTQsNyBAQAogLyoKICAqIEluaXRpYWxpemUgYWxhdWRhX2luZm8gc3RydWN0IGFuZCBmaW5kIHRoZSBkYXRhLXdyaXRlIGVuZHBvaW50CiAgKi8KLWludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm87CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0c2V0dGluZyA9IHVzLT5wdXNiX2ludGYtPmN1cl9hbHRzZXR0aW5nOwpAQCAtMTAxMyw3ICsxMTM2LDcgQEAKIAlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7CiB9CiAKLWludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQorc3RhdGljIGludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCWludCByYzsKIAlzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLT5leHRyYTsKQEAgLTExMjEsMyArMTI0NCw0OCBAQAogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQogCitzdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGFsYXVkYV91c2JfaWRzKSArIGFsYXVkYV91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJBbGF1ZGEgQ29udHJvbC9CdWxrIjsKKwl1cy0+dHJhbnNwb3J0ID0gYWxhdWRhX3RyYW5zcG9ydDsKKwl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKKwl1cy0+bWF4X2x1biA9IDE7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhbGF1ZGFfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtYWxhdWRhIiwKKwkucHJvYmUgPQlhbGF1ZGFfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc3Rvcl9kaXNjb25uZWN0LAorCS5zdXNwZW5kID0JdXNiX3N0b3Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3N0b3JfcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQl1c2Jfc3Rvcl9yZXNldF9yZXN1bWUsCisJLnByZV9yZXNldCA9CXVzYl9zdG9yX3ByZV9yZXNldCwKKwkucG9zdF9yZXNldCA9CXVzYl9zdG9yX3Bvc3RfcmVzZXQsCisJLmlkX3RhYmxlID0JYWxhdWRhX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFsYXVkYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmYWxhdWRhX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhbGF1ZGFfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZhbGF1ZGFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYWxhdWRhX2luaXQpOworbW9kdWxlX2V4aXQoYWxhdWRhX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MDBmODcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogRHJpdmVyIGZvciBBbGF1ZGEtYmFzZWQgY2FyZCByZWFkZXJzCi0gKgotICogQ3VycmVudCBkZXZlbG9wbWVudCBhbmQgbWFpbnRlbmFuY2UgYnk6Ci0gKiAgICAoYykgMjAwNSBEYW5pZWwgRHJha2UgPGRzZEBnZW50b28ub3JnPgotICoKLSAqIFNlZSBhbGF1ZGEuYyBmb3IgbW9yZSBleHBsYW5hdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9VU0JfQUxBVURBX0gKLSNkZWZpbmUgX1VTQl9BTEFVREFfSAotCi0vKgotICogU3RhdHVzIGJ5dGVzCi0gKi8KLSNkZWZpbmUgQUxBVURBX1NUQVRVU19FUlJPUgkJMHgwMQotI2RlZmluZSBBTEFVREFfU1RBVFVTX1JFQURZCQkweDQwCi0KLS8qCi0gKiBDb250cm9sIG9wY29kZXMgKGZvciByZXF1ZXN0IGZpZWxkKQotICovCi0jZGVmaW5lIEFMQVVEQV9HRVRfWERfTUVESUFfU1RBVFVTCTB4MDgKLSNkZWZpbmUgQUxBVURBX0dFVF9TTV9NRURJQV9TVEFUVVMJMHg5OAotI2RlZmluZSBBTEFVREFfQUNLX1hEX01FRElBX0NIQU5HRQkweDBhCi0jZGVmaW5lIEFMQVVEQV9BQ0tfU01fTUVESUFfQ0hBTkdFCTB4OWEKLSNkZWZpbmUgQUxBVURBX0dFVF9YRF9NRURJQV9TSUcJCTB4ODYKLSNkZWZpbmUgQUxBVURBX0dFVF9TTV9NRURJQV9TSUcJCTB4OTYKLQotLyoKLSAqIEJ1bGsgY29tbWFuZCBpZGVudGl0eSAoYnl0ZSAwKQotICovCi0jZGVmaW5lIEFMQVVEQV9CVUxLX0NNRAkJCTB4NDAKLQotLyoKLSAqIEJ1bGsgb3Bjb2RlcyAoYnl0ZSAxKQotICovCi0jZGVmaW5lIEFMQVVEQV9CVUxLX0dFVF9SRURVX0RBVEEJMHg4NQotI2RlZmluZSBBTEFVREFfQlVMS19SRUFEX0JMT0NLCQkweDk0Ci0jZGVmaW5lIEFMQVVEQV9CVUxLX0VSQVNFX0JMT0NLCQkweGEzCi0jZGVmaW5lIEFMQVVEQV9CVUxLX1dSSVRFX0JMT0NLCQkweGI0Ci0jZGVmaW5lIEFMQVVEQV9CVUxLX0dFVF9TVEFUVVMyCQkweGI3Ci0jZGVmaW5lIEFMQVVEQV9CVUxLX1JFU0VUX01FRElBCQkweGUwCi0KLS8qCi0gKiBQb3J0IHRvIG9wZXJhdGUgb24gKGJ5dGUgOCkKLSAqLwotI2RlZmluZSBBTEFVREFfUE9SVF9YRAkJCTB4MDAKLSNkZWZpbmUgQUxBVURBX1BPUlRfU00JCQkweDAxCi0KLS8qCi0gKiBMQkEgYW5kIFBCQSBhcmUgdW5zaWduZWQgaW50cy4gU3BlY2lhbCB2YWx1ZXMuCi0gKi8KLSNkZWZpbmUgVU5ERUYgICAgMHhmZmZmCi0jZGVmaW5lIFNQQVJFICAgIDB4ZmZmZQotI2RlZmluZSBVTlVTQUJMRSAweGZmZmQKLQotaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cyk7Ci1pbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7Ci0KLXN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7Ci0JdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsJCS8qIHRvdGFsIG1lZGlhIHNpemUgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBpbnQgcGFnZXNpemU7CQkvKiBwYWdlIHNpemUgaW4gYnl0ZXMgKi8KLQl1bnNpZ25lZCBpbnQgYmxvY2tzaXplOwkJLyogbnVtYmVyIG9mIHBhZ2VzIHBlciBibG9jayAqLwotCXVuc2lnbmVkIGludCB1em9uZXNpemU7CQkvKiBudW1iZXIgb2YgdXNhYmxlIGJsb2NrcyBwZXIgem9uZSAqLwotCXVuc2lnbmVkIGludCB6b25lc2l6ZTsJCS8qIG51bWJlciBvZiBibG9ja3MgcGVyIHpvbmUgKi8KLQl1bnNpZ25lZCBpbnQgYmxvY2ttYXNrOwkJLyogbWFzayB0byBnZXQgcGFnZSBmcm9tIGFkZHJlc3MgKi8KLQotCXVuc2lnbmVkIGNoYXIgcGFnZXNoaWZ0OwotCXVuc2lnbmVkIGNoYXIgYmxvY2tzaGlmdDsKLQl1bnNpZ25lZCBjaGFyIHpvbmVzaGlmdDsKLQotCXUxNiAqKmxiYV90b19wYmE7CQkvKiBsb2dpY2FsIHRvIHBoeXNpY2FsIGJsb2NrIG1hcCAqLwotCXUxNiAqKnBiYV90b19sYmE7CQkvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqLwotfTsKLQotc3RydWN0IGFsYXVkYV9pbmZvIHsKLQlzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gcG9ydFsyXTsKLQlpbnQgd3JfZXA7CQkJLyogZW5kcG9pbnQgdG8gd3JpdGUgZGF0YSBvdXQgb2YgKi8KLQotCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwotCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KLQl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KLX07Ci0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5jCmluZGV4IDg5OGU2N2QuLmM4NDQ3MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KQEAgLTI5LDYgKzMwLDQ5IEBACiAjaW5jbHVkZSAic2NzaWdsdWUuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogCitNT0RVTEVfREVTQ1JJUFRJT04oIlNBVCBzdXBwb3J0IGZvciBDeXByZXNzIFVTQi9BVEEgYnJpZGdlcyB3aXRoIEFUQUNCIik7CitNT0RVTEVfQVVUSE9SKCJNYXR0aGlldSBDYXN0ZXQgPGNhc3RldC5tYXR0aGlldUBmcmVlLmZyPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBjeXByZXNzX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9jeXByZXNzLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBjeXByZXNzX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGN5cHJlc3NfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2N5cHJlc3MuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCiAvKgogICogQVRBQ0IgaXMgYSBwcm90b2NvbCB1c2VkIG9uIGN5cHJlc3MgdXNiPC0+YXRhIGJyaWRnZSB0bwogICogc2VuZCByYXcgQVRBIGNvbW1hbmQgb3ZlciBtYXNzIHN0b3JhZ2UKQEAgLTM2LDcgKzgwLDcgQEAKICAqIE1vcmUgaW5mbyB0aGF0IGJlIGZvdW5kIG9uIGN5N2M2ODMxMF84LnBkZiBhbmQgY3k3YzY4MzAwY184LnBkZgogICogZGF0YXNoZWV0IGZyb20gY3lwcmVzcy5jb20uCiAgKi8KLXZvaWQgY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyB2b2lkIGN5cHJlc3NfYXRhY2JfcGFzc3Rocm91Z2goc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJdW5zaWduZWQgY2hhciBzYXZlX2NtbmRbTUFYX0NPTU1BTkRfU0laRV07CiAKQEAgLTEzMywxOSArMTc3LDE4IEBACiAKIAkJLyogYnVpbGQgdGhlIGNvbW1hbmQgZm9yCiAJCSAqIHJlYWRpbmcgdGhlIEFUQSByZWdpc3RlcnMgKi8KLQkJc2NzaV9laF9wcmVwX2NtbmQoc3JiLCAmc2VzLCBOVUxMLCAwLCAwKTsKLQkJc3JiLT5zZGIubGVuZ3RoID0gc2l6ZW9mKHJlZ3MpOwotCQlzZ19pbml0X29uZSgmc2VzLnNlbnNlX3NnbCwgcmVncywgc3JiLT5zZGIubGVuZ3RoKTsKLQkJc3JiLT5zZGIudGFibGUuc2dsID0gJnNlcy5zZW5zZV9zZ2w7Ci0JCXNyYi0+c2NfZGF0YV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7Ci0JCXNyYi0+c2RiLnRhYmxlLm5lbnRzID0gMTsKKwkJc2NzaV9laF9wcmVwX2NtbmQoc3JiLCAmc2VzLCBOVUxMLCAwLCBzaXplb2YocmVncykpOworCiAJCS8qIHdlIHVzZSB0aGUgc2FtZSBjb21tYW5kIGFzIGJlZm9yZSwgYnV0IHdlIHNldAogCQkgKiB0aGUgcmVhZCB0YXNrZmlsZSBiaXQsIGZvciBub3QgZXhlY3V0aW5nIGF0YWNiIGNvbW1hbmQsCiAJCSAqIGJ1dCByZWFkaW5nIHJlZ2lzdGVyIHNlbGVjdGVkIGluIHNyYi0+Y21uZFs0XQogCQkgKi8KKwkJc3JiLT5jbWRfbGVuID0gMTY7CisJCXNyYi0+Y21uZCA9IHNlcy5jbW5kOwogCQlzcmItPmNtbmRbMl0gPSAxOwogCiAJCXVzYl9zdG9yX3RyYW5zcGFyZW50X3Njc2lfY29tbWFuZChzcmIsIHVzKTsKKwkJbWVtY3B5KHJlZ3MsIHNyYi0+c2Vuc2VfYnVmZmVyLCBzaXplb2YocmVncykpOwogCQl0bXBfcmVzdWx0ID0gc3JiLT5yZXN1bHQ7CiAJCXNjc2lfZWhfcmVzdG9yZV9jbW5kKHNyYiwgJnNlcyk7CiAJCS8qIHdlIGZhaWwgdG8gZ2V0IHJlZ2lzdGVycywgcmVwb3J0IGludmFsaWQgY29tbWFuZCAqLwpAQCAtMTYyLDggKzIwNSw4IEBACiAKIAkJLyogWFhYIHdlIHNob3VsZCBnZW5lcmF0ZSBzaywgYXNjLCBhc2NxIGZyb20gc3RhdHVzIGFuZCBlcnJvcgogCQkgKiByZWdzCi0JCSAqIChzZWUgMTEuMSBFcnJvciB0cmFuc2xhdGlvbiCtIEFUQSBkZXZpY2UgZXJyb3IgdG8gU0NTSSBlcnJvciBtYXApCi0JCSAqIGFuZCBhdGFfdG9fc2Vuc2VfZXJyb3IgZnJvbSBsaWJhdGEuCisJCSAqIChzZWUgMTEuMSBFcnJvciB0cmFuc2xhdGlvbiBBVEEgZGV2aWNlIGVycm9yIHRvIFNDU0kgZXJyb3IKKwkJICogIG1hcCwgYW5kIGF0YV90b19zZW5zZV9lcnJvciBmcm9tIGxpYmF0YS4pCiAJCSAqLwogCiAJCS8qIFNlbnNlIGRhdGEgaXMgY3VycmVudCBhbmQgZm9ybWF0IGlzIGRlc2NyaXB0b3IuICovCkBAIC0xOTgsMyArMjQxLDQ4IEBACiAJaWYgKHNyYi0+Y21uZFswXSA9PSBBVEFfMTIpCiAJCXNyYi0+Y21kX2xlbiA9IDEyOwogfQorCisKK3N0YXRpYyBpbnQgY3lwcmVzc19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzX2RhdGEgKnVzOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoJnVzLCBpbnRmLCBpZCwKKwkJCShpZCAtIGN5cHJlc3NfdXNiX2lkcykgKyBjeXByZXNzX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwl1cy0+cHJvdG9jb2xfbmFtZSA9ICJUcmFuc3BhcmVudCBTQ1NJIHdpdGggQ3lwcmVzcyBBVEFDQiI7CisJdXMtPnByb3RvX2hhbmRsZXIgPSBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoOworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUyKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY3lwcmVzc19kcml2ZXIgPSB7CisJLm5hbWUgPQkJInVtcy1jeXByZXNzIiwKKwkucHJvYmUgPQljeXByZXNzX3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdXNiX3N0b3JfZGlzY29ubmVjdCwKKwkuc3VzcGVuZCA9CXVzYl9zdG9yX3N1c3BlbmQsCisJLnJlc3VtZSA9CXVzYl9zdG9yX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0JdXNiX3N0b3JfcmVzZXRfcmVzdW1lLAorCS5wcmVfcmVzZXQgPQl1c2Jfc3Rvcl9wcmVfcmVzZXQsCisJLnBvc3RfcmVzZXQgPQl1c2Jfc3Rvcl9wb3N0X3Jlc2V0LAorCS5pZF90YWJsZSA9CWN5cHJlc3NfdXNiX2lkcywKKwkuc29mdF91bmJpbmQgPQkxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3lwcmVzc19pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9yZWdpc3RlcigmY3lwcmVzc19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3lwcmVzc19leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmN5cHJlc3NfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoY3lwcmVzc19pbml0KTsKK21vZHVsZV9leGl0KGN5cHJlc3NfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2N5cHJlc3NfYXRhY2IuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmFkYTg5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvY3lwcmVzc19hdGFjYi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIFN1cHBvcnQgZm9yIGVtdWxhdGluZyBTQVQgKGF0YSBwYXNzIHRocm91Z2gpIG9uIGRldmljZXMgYmFzZWQKLSAqICAgICAgIG9uIHRoZSBDeXByZXNzIFVTQi9BVEEgYnJpZGdlIHN1cHBvcnRpbmcgQVRBQ0IuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hdHRoaWV1IENhc3RldCAoY2FzdGV0Lm1hdHRoaWV1QGZyZWUuZnIpCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQotICogbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfQ1lQUkVTU19BVEFDQl9IXwotI2RlZmluZSBfQ1lQUkVTU19BVEFDQl9IXwotZXh0ZXJuIHZvaWQgY3lwcmVzc19hdGFjYl9wYXNzdGhyb3VnaChzdHJ1Y3Qgc2NzaV9jbW5kKiwgc3RydWN0IHVzX2RhdGEqKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYwppbmRleCAxN2YxYWUyLi4yYjZlNTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuYwpAQCAtNDksNiArNDksNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgpAQCAtNTgsMTIgKzU5LDY1IEBACiAjaW5jbHVkZSAidHJhbnNwb3J0LmgiCiAjaW5jbHVkZSAicHJvdG9jb2wuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgotI2luY2x1ZGUgImRhdGFmYWIuaCIKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIERhdGFmYWIgVVNCIENvbXBhY3QgRmxhc2ggcmVhZGVyIik7CitNT0RVTEVfQVVUSE9SKCJKaW1taWUgTWF5ZmllbGQgPG1heWZpZWxkK2RhdGFmYWJAc2Fja2hlYWRzLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RydWN0IGRhdGFmYWJfaW5mbyB7CisJdW5zaWduZWQgbG9uZyAgIHNlY3RvcnM7CS8qIHRvdGFsIHNlY3RvciBjb3VudCAqLworCXVuc2lnbmVkIGxvbmcgICBzc2l6ZTsJCS8qIHNlY3RvciBzaXplIGluIGJ5dGVzICovCisJc2lnbmVkIGNoYXIJbHVuOwkJLyogdXNlZCBmb3IgZHVhbC1zbG90IHJlYWRlcnMgKi8KKworCS8qIHRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgeWV0ICovCisJdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKKwl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KKwl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsJLyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqLworfTsKIAogc3RhdGljIGludCBkYXRhZmFiX2RldGVybWluZV9sdW4oc3RydWN0IHVzX2RhdGEgKnVzLAogCQkJCSBzdHJ1Y3QgZGF0YWZhYl9pbmZvICppbmZvKTsKIAogCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMKKyAqLworI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpfChVU0JfVVNfVFlQRV9TVE9SPDwyNCkgfQorCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBkYXRhZmFiX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9kYXRhZmFiLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkYXRhZmFiX3VzYl9pZHMpOworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworLyoKKyAqIFRoZSBmbGFncyB0YWJsZQorICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkVmVuZG9yLCBpZFByb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JfbmFtZSwgcHJvZHVjdF9uYW1lLCB1c2VfcHJvdG9jb2wsIHVzZV90cmFuc3BvcnQsIFwKKwkJICAgIGluaXRfZnVuY3Rpb24sIEZsYWdzKSBcCit7IFwKKwkudmVuZG9yTmFtZSA9IHZlbmRvcl9uYW1lLAlcCisJLnByb2R1Y3ROYW1lID0gcHJvZHVjdF9uYW1lLAlcCisJLnVzZVByb3RvY29sID0gdXNlX3Byb3RvY29sLAlcCisJLnVzZVRyYW5zcG9ydCA9IHVzZV90cmFuc3BvcnQsCVwKKwkuaW5pdEZ1bmN0aW9uID0gaW5pdF9mdW5jdGlvbiwJXAorfQorCitzdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2IGRhdGFmYWJfdW51c3VhbF9kZXZfbGlzdFtdID0geworIwlpbmNsdWRlICJ1bnVzdWFsX2RhdGFmYWIuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCiBzdGF0aWMgaW5saW5lIGludAogZGF0YWZhYl9idWxrX3JlYWQoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKSB7CiAJaWYgKGxlbiA9PSAwKQpAQCAtNTAwLDcgKzU1NCw3IEBACiAKIC8vIFRyYW5zcG9ydCBmb3IgdGhlIERhdGFmYWIgTURDRkUtQgogLy8KLWludCBkYXRhZmFiX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICogc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgaW50IGRhdGFmYWJfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKQogewogCXN0cnVjdCBkYXRhZmFiX2luZm8gKmluZm87CiAJaW50IHJjOwpAQCAtNjY1LDMgKzcxOSw0OSBAQAogCWluZm8tPnNlbnNlX2FzY3EgPSAweDAwOwogCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwogfQorCitzdGF0aWMgaW50IGRhdGFmYWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c19kYXRhICp1czsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSBkYXRhZmFiX3VzYl9pZHMpICsgZGF0YWZhYl91bnVzdWFsX2Rldl9saXN0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OworCisJdXMtPnRyYW5zcG9ydF9uYW1lICA9ICJEYXRhZmFiIEJ1bGstT25seSI7CisJdXMtPnRyYW5zcG9ydCA9IGRhdGFmYWJfdHJhbnNwb3J0OworCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OworCXVzLT5tYXhfbHVuID0gMTsKKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGRhdGFmYWJfZHJpdmVyID0geworCS5uYW1lID0JCSJ1bXMtZGF0YWZhYiIsCisJLnByb2JlID0JZGF0YWZhYl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQlkYXRhZmFiX3VzYl9pZHMsCisJLnNvZnRfdW5iaW5kID0JMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRhdGFmYWJfaW5pdCh2b2lkKQoreworCXJldHVybiB1c2JfcmVnaXN0ZXIoJmRhdGFmYWJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGRhdGFmYWJfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZkYXRhZmFiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGRhdGFmYWJfaW5pdCk7Cittb2R1bGVfZXhpdChkYXRhZmFiX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9kYXRhZmFiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJlM2YyNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2RhdGFmYWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qIERyaXZlciBmb3IgRGF0YWZhYiBNRENGRS1CIFVTQiBDb21wYWN0IEZsYXNoIHJlYWRlcgotICogSGVhZGVyIEZpbGUKLSAqCi0gKiBDdXJyZW50IGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBieToKLSAqICAgKGMpIDIwMDAgSmltbWllIE1heWZpZWxkIChtYXlmaWVsZCtkYXRhZmFiQHNhY2toZWFkcy5vcmcpCi0gKgotICogU2VlIGRhdGFmYWIuYyBmb3IgbW9yZSBleHBsYW5hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKLSAqIGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1VTQl9EQVRBRkFCX01EQ0ZFX0JfSAotI2RlZmluZSBfVVNCX0RBVEFGQUJfTURDRkVfQl9ICi0KLWV4dGVybiBpbnQgZGF0YWZhYl90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotCi1zdHJ1Y3QgZGF0YWZhYl9pbmZvIHsKLQl1bnNpZ25lZCBsb25nICAgc2VjdG9yczsJLy8gdG90YWwgc2VjdG9yIGNvdW50Ci0JdW5zaWduZWQgbG9uZyAgIHNzaXplOwkJLy8gc2VjdG9yIHNpemUgaW4gYnl0ZXMKLQlzaWduZWQgY2hhcglsdW47CQkvLyB1c2VkIGZvciBkdWFsLXNsb3QgcmVhZGVycwotCQotCS8vIHRoZSBmb2xsb3dpbmcgYXJlbid0IHVzZWQgeWV0Ci0JdW5zaWduZWQgY2hhciAgIHNlbnNlX2tleTsKLQl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjOwkvLyBhZGRpdGlvbmFsIHNlbnNlIGNvZGUKLQl1bnNpZ25lZCBsb25nICAgc2Vuc2VfYXNjcTsJLy8gYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllcgotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2ZyZWVjb20uYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCmluZGV4IDczYWM3MjYuLjU0Y2M5NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvZnJlZWNvbS5jCkBAIC0yNiw2ICsyNiw3IEBACiAgKiAoaHR0cDovL3d3dy5mcmVlY29tLmRlLykKICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+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+ZGV2X211dGV4LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNDEyZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgKQEAgLTAsMCArMSwzMSBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBBbGF1ZGEtYmFzZWQgY2FyZCByZWFkZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREFfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDU4NCwgMHgwMDA4LCAweDAxMDIsIDB4MDEwMiwKKwkJIkZ1amlmaWxtIiwKKwkJIkRQQy1SMSAoQWxhdWRhKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDApLAorCitVTlVTVUFMX0RFViggIDB4MDdiNCwgMHgwMTBhLCAweDAxMDIsIDB4MDEwMiwKKwkJIk9seW1wdXMiLAorCQkiTUFVU0ItMTAgKEFsYXVkYSkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGJlNmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaApAQCAtMCwwICsxLDM0IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgZGV2aWNlcyBiYXNlZCBvbiB0aGUgQ3lwcmVzcyBVU0IvQVRBIGJyaWRnZQorICoJd2l0aCBzdXBwb3J0IGZvciBBVEFDQgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0JfTU9EVUxFKQorCisvKiBDWTdDNjgzMDAgOiBzdXBwb3J0IGF0YWNiICovCitVTlVTVUFMX0RFViggIDB4MDRiNCwgMHg2ODMwLCAweDAwMDAsIDB4OTk5OSwKKwkJIkN5cHJlc3MiLAorCQkiQ3lwcmVzcyBBVDJMUCIsCisJCVVTX1NDX0NZUF9BVEFDQiwgVVNfUFJfREVWSUNFLCBOVUxMLCAwKSwKKworLyogQ1k3QzY4MzEwIDogc3VwcG9ydCBhdGFjYiBhbmQgYXRhY2IyICovCitVTlVTVUFMX0RFViggIDB4MDRiNCwgMHg2ODMxLCAweDAwMDAsIDB4OTk5OSwKKwkJIkN5cHJlc3MiLAorCQkiQ3lwcmVzcyBJU0QtMzAwTFAiLAorCQlVU19TQ19DWVBfQVRBQ0IsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kYXRhZmFiLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGF0YWZhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Mjk4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGF0YWZhYi5oCkBAIC0wLDAgKzEsOTggQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciB0aGUgRGF0YWZhYiBVU0IgQ29tcGFjdCBGbGFzaCByZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQikgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCX01PRFVMRSkKKworVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTAwMCwgMHgwMDAwLCAweDAwMTUsCisJCSJEYXRhZmFiIiwKKwkJIk1EQ0ZFLUIgVVNCIENGIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCisvKgorICogVGhlIGZvbGxvd2luZyBEYXRhZmFiLWJhc2VkIGRldmljZXMgbWF5IG9yIG1heSBub3Qgd29yaworICogdXNpbmcgdGhlIGN1cnJlbnQgZHJpdmVyLi4udGhlIDB4ZmZmZiBpcyBhcmJpdHJhcnkgc2luY2UgSQorICogZG9uJ3Qga25vdyB3aGF0IGRldmljZSB2ZXJzaW9ucyBleGlzdCBmb3IgdGhlc2UgZ3V5cy4KKyAqCisgKiBUaGUgMHhhMDAzIGFuZCAweGEwMDQgZGV2aWNlcyBpbiBwYXJ0aWN1bGFyIEknbSBjdXJpb3VzIGFib3V0LgorICogSSdtIHRvbGQgdGhleSBleGlzdCBidXQgc28gZmFyIG5vYm9keSBoYXMgY29tZSBmb3J3YXJkIHRvIHNheSB0aGF0CisgKiB0aGV5IHdvcmsgd2l0aCB0aGlzIGRyaXZlci4gIEdpdmVuIHRoZSBzdWNjZXNzIHdlJ3ZlIGhhZCBnZXR0aW5nCisgKiBvdGhlciBEYXRhZmFiLWJhc2VkIGNhcmRzIG9wZXJhdGlvbmFsIHdpdGggdGhpcyBkcml2ZXIsIEkndmUgZGVjaWRlZAorICogdG8gbGVhdmUgdGhlc2UgdHdvIGRldmljZXMgaW4gdGhlIGxpc3QuCisgKi8KK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMSwgMHgwMDAwLCAweGZmZmYsCisJCSJTSUlHL0RhdGFmYWIiLAorCQkiU0lJRy9EYXRhZmFiIE1lbW9yeSBTdGljaytDRiBSZWFkZXIvV3JpdGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKKy8qIFJlcG9ydGVkIGJ5IEpvc2VmIFJlaXNpbmdlciA8am9zZWYucmVpc2luZ2VyQG5ldGNvbG9nbmUuZGU+ICovCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDIsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIk1EMi9NRDMgRGlzayBlbmNsb3N1cmUiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAzLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFmYWIvVW5rbm93biIsCisJCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCitVTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDQsIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYi9Vbmtub3duIiwKKwkJIkRhdGFmYWItYmFzZWQgUmVhZGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwNSwgMHgwMDAwLCAweGZmZmYsCisJCSJQTlkvRGF0YWZhYiIsCisJCSJQTlkvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA2LCAweDAwMDAsIDB4ZmZmZiwKKwkJIlNpbXBsZSBUZWNoL0RhdGFmYWIiLAorCQkiU2ltcGxlIFRlY2gvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQkwKSwKKworLyogU3VibWl0dGVkIGJ5IE9sYWYgSGVyaW5nIDxvbGhAc3VzZS5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKKwkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKKwkJMCksCisKKy8qIFJlcG9ydGVkIGJ5IEZlbGl4IE1vZWxsZXIgPGZlbGl4QGRlcmtsZWNrcy5kZT4KKyAqIGluIEdlcm1hbnkgdGhpcyBpcyBzb2xkIGJ5IEhhbWEgd2l0aCB0aGUgcHJvZHVjdG51bWJlciA0Njk1MgorICogYXMgIkR1YWxTbG90IENvbXBhY3RGbGFzaChUTSkgJiBNU3RpY2sgRHJpdmUgVVNCIgorICovCitVTlVTVUFMX0RFViggIDB4MDdjNCwgMHhhMTBiLCAweDAwMDAsIDB4ZmZmZiwKKwkJIkRhdGFGYWIgU3lzdGVtcyBJbmMuIiwKKwkJIlVTQiBDRitNUyIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCisJCTApLAorCitVTlVTVUFMX0RFViggMHgwYzBiLCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiQWNvbWRhdGEiLAorCQkiQ0YiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggY2ZkZTc0YS4uMWMxZjY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC01Myw2ICs1MywxMSBAQAogICogYXMgb3Bwb3NlZCB0byBkZXZpY2VzIHRoYXQgZG8gc29tZXRoaW5nIHN0cmFuZ2VseSBvciB3cm9uZ2x5LgogICovCiAKKyNpZiAhZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KSAmJiBcCisJCSFkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDlfTU9EVUxFKQorI2RlZmluZSBOT19TRERSMDkKKyNlbmRpZgorCiAvKiBwYXRjaCBzdWJtaXR0ZWQgYnkgVml2aWFuIEJyZWdpZXIgPFZpdmlhbi5CcmVnaWVyQGltYWcuZnI+CiAgKi8KIFVOVVNVQUxfREVWKCAgMHgwM2ViLCAweDIwMDIsIDB4MDEwMCwgMHgwMTAwLApAQCAtODAsMTggKzg1LDYgQEAKIAkJIkNELVdyaXRlcisiLAogCQlVU19TQ184MDcwLCBVU19QUl9DQiwgTlVMTCwgMCksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLVVOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAyMDcsIDB4MDAwMSwgMHgwMDAxLAotCQkiSFAiLAotCQkiQ0QtV3JpdGVyKyA4MjAwZSIsCi0JCVVTX1NDXzgwNzAsIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2NkLCAwKSwKLQotVU5VU1VBTF9ERVYoICAweDAzZjAsIDB4MDMwNywgMHgwMDAxLCAweDAwMDEsCi0JCSJIUCIsCi0JCSJDRC1Xcml0ZXIrIENELTRlIiwKLQkJVVNfU0NfODA3MCwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfY2QsIDApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEJlbiBFZnJvcyA8YmVuQHBjLWRvY3Rvci5jb20+ICovCiBVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwNzBjLCAweDAwMDAsIDB4MDAwMCwKIAkJIkhQIiwKQEAgLTI0NiwxMiArMjM5LDcgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NJTkdMRV9MVU4gKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAotCQkiTWljcm90ZWNoIiwKLQkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgTlVMTCwgMCApLAotI2Vsc2UKKyNpZmRlZiBOT19TRERSMDkKIFVOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAogCQkiTWljcm90ZWNoIiwKIAkJIkNhbWVyYU1hdGUiLApAQCAtMjg4LDEzICsyNzYsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9UX0xPQ0tBQkxFICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEKLVVOVVNVQUxfREVWKCAgMHgwNDVhLCAweDUyMTAsIDB4MDEwMSwgMHgwMTAxLAotCQkiUmlvIiwKLQkJIlJpbyBLYXJtYSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0tBUk1BLCByaW9fa2FybWFfaW5pdCwgMCksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgVGFtYXMgS2VyZWNzZW4gPGtlcmVjc2VuQGJpZ2Zvb3QuY29tPgogICogT2J2aW91c2x5IHRoZSBQUk9NIGhhcyBub3QgYmVlbiBjdXN0b21pemVkIGJ5IHRoZSBWQVI7CiAgKiB0aGUgVmVuZG9yIGFuZCBQcm9kdWN0IHN0cmluZyBkZXNjcmlwdG9ycyBhcmU6CkBAIC0zNzUsMjIgKzM1Niw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfQ0IsIE5VTEwsCiAJCVVTX0ZMX01BWF9TRUNUT1JTX01JTiksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQgotLyogQ1k3QzY4MzAwIDogc3VwcG9ydCBhdGFjYiAqLwotVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMCwgMHgwMDAwLCAweDk5OTksCi0JCSJDeXByZXNzIiwKLQkJIkN5cHJlc3MgQVQyTFAiLAotCQlVU19TQ19DWVBfQVRBQ0IsIFVTX1BSX0RFVklDRSwgTlVMTCwKLQkJMCksCi0KLS8qIENZN0M2ODMxMCA6IHN1cHBvcnQgYXRhY2IgYW5kIGF0YWNiMiAqLwotVU5VU1VBTF9ERVYoICAweDA0YjQsIDB4NjgzMSwgMHgwMDAwLCAweDk5OTksCi0JCSJDeXByZXNzIiwKLQkJIkN5cHJlc3MgSVNELTMwMExQIiwKLQkJVVNfU0NfQ1lQX0FUQUNCLCBVU19QUl9ERVZJQ0UsIE5VTEwsCi0JCTApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IFNpbW9uIExldml0dCA8c2ltb25Ad2hhdHRmLmNvbT4KICAqIFRoaXMgZW50cnkgbmVlZHMgU3ViIGFuZCBQcm90byBmaWVsZHMgKi8KIFVOVVNVQUxfREVWKCAgMHgwNGI4LCAweDA2MDEsIDB4MDEwMCwgMHgwMTAwLApAQCAtNDY3LDIwICs0MzIsNyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgdXNiX3N0b3JfZXVzY3NpX2luaXQsIAogCQlVU19GTF9TQ01fTVVMVF9UQVJHICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDAzLCAweDAwMDAsIDB4OTk5OSwKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFIwOSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0VVU0JfU0REUjA5LCB1c2Jfc3Rvcl9zZGRyMDlfaW5pdCwKLQkJMCksCi0KLS8qIFRoaXMgZW50cnkgaXMgZnJvbSBBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sICovCi1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMDA1LCAweDAxMDAsIDB4MDIwOCwKLQkJIlNDTSBNaWNyb3N5c3RlbXMiLAotCQkiZVVTQiBTbWFydE1lZGlhIC8gQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EUENNX1VTQiwgdXNiX3N0b3Jfc2RkcjA5X2RwY21faW5pdCwKLQkJMCksCi0jZWxzZQorI2lmZGVmIE5PX1NERFIwOQogVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNSwgMHgwMTAwLCAweDAyMDgsCiAJCSJTQ00gTWljcm9zeXN0ZW1zIiwKIAkJImVVU0IgQ29tcGFjdEZsYXNoIEFkYXB0ZXIiLApAQCAtNTM1LDE0ICs0ODcsNiBAQAogCQkiQ0QtUlcgRGV2aWNlIiwKIAkJVVNfU0NfODAyMCwgVVNfUFJfQ0IsIE5VTEwsIDApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUCi1VTlVTVUFMX0RFViggIDB4MDRlNiwgMHgxMDEwLCAweDAwMDAsIDB4OTk5OSwKLQkJIlNodXR0bGUvU0NNIiwKLQkJIlVTQkFULTAyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfVVNCQVQsIGluaXRfdXNiYXRfZmxhc2gsCi0JCVVTX0ZMX1NJTkdMRV9MVU4pLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IERtaXRyeSBLaGx5c3RvdiA8YWRtaW5pbXVzQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNGU4LCAweDUwN2MsIDB4MDIyMCwgMHgwMjIwLAogCQkiU2Ftc3VuZyIsCkBAIC02NDUsMTQgKzU4OSw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi1VTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJiLCAweDAxMDAsIDB4MDExMCwKLQkJIlNvbnkiLAotCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0jZW5kaWYKLQogLyogU3VibWl0dGVkIGJ5IE9sYWYgSGVyaW5nLCA8b2xoQHN1c2UuZGU+IFN1U0UgQnVnemlsbGEgIzQ5MDQ5ICovCiBVTlVTVUFMX0RFViggIDB4MDU0YywgMHgwMDJjLCAweDA1MDEsIDB4MjAwMCwKIAkJIlNvbnkiLApAQCAtNzQ5LDEzICs2ODUsNiBAQAogCQkiU2lsaWNvbiBNZWRpYSBSL1ciLAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCi1VTlVTVUFMX0RFViggIDB4MDU4NCwgMHgwMDA4LCAweDAxMDIsIDB4MDEwMiwKLQkJIkZ1amlmaWxtIiwKLQkJIkRQQy1SMSAoQWxhdWRhKSIsCi0gCQlVU19TQ19TQ1NJLCBVU19QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwICksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgUlRFIDxyYXN6aWxraUB5YW5kZXgucnU+ICovCiBVTlVTVUFMX0RFViggIDB4MDU4ZiwgMHg2Mzg3LCAweDAxNDEsIDB4MDE0MSwKIAkJIkpldEZsYXNoIiwKQEAgLTc5OCwzMiArNzI3LDYgQEAKIAkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgTlVMTCwKIAkJVVNfRkxfTkVFRF9PVkVSUklERSApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMAotVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDAzMSwgMHgwMTAwLCAweDAxMTAsCi0JCSJJbi1TeXN0ZW0iLAotCQkiVVNCL0lERSBCcmlkZ2UgKEFUQS9BVEFQSSkiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotCi1VTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMzAxLCAweDAxMDAsIDB4MDExMCwKLQkJIkluLVN5c3RlbSIsCi0JCSJQb3J0YWJsZSBVU0IgSGFyZGRyaXZlIFYyIiwKLQkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDM1MSwgMHgwMTAwLCAweDAxMTAsCi0JCSJJbi1TeXN0ZW0iLAotCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCi0JCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAotCQkwICksCi0KLVVOVVNVQUxfREVWKCAgMHgwNWFiLCAweDU3MDEsIDB4MDEwMCwgMHgwMTEwLAotCQkiSW4tU3lzdGVtIiwKLQkJIlVTQiBTdG9yYWdlIEFkYXB0ZXIgVjIiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotI2VuZGlmCi0KIC8qIFN1Ym1pdHRlZCBieSBTdmVuIEFuZGVyc29uIDxzdmVuLWxpbnV4QGFuZGVyc29uLmRlPgogICogVGhlcmUgYXJlIGF0IGxlYXN0IGZvdXIgUHJvZHVjdElEcyB1c2VkIGZvciBpUG9kcywgc28gSSBhZGRlZCAweDEyMDIgYW5kCiAgKiAweDEyMDQuIFRoZXkganVzdCBuZWVkIHRoZSBVU19GTF9GSVhfQ0FQQUNJVFkuIEFzIHRoZSBiY2REZXZpY2UgYXBwZWFycwpAQCAtODc3LDE0ICs3ODAsNiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb3B0aW9uX21zX2luaXQsCiAJCTApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCi1VTlVTVUFMX0RFViggIDB4MDVkYywgMHgwMDAxLCAweDAwMDAsIDB4MDAwMSwKLQkJIkxleGFyIiwKLQkJIkp1bXBzaG90IFVTQiBDRiBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9KVU1QU0hPVCwgTlVMTCwKLQkJVVNfRkxfTkVFRF9PVkVSUklERSApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IEJsYWtlIE1hdGhlbnkgPGJtYXRoZW55QHB1cmR1ZS5lZHU+ICovCiBVTlVTVUFMX0RFViggIDB4MDVkYywgMHhiMDAyLCAweDAwMDAsIDB4MDExMywKIAkJIkxleGFyIiwKQEAgLTkzNSwxNCArODMwLDYgQEAKIAkJIkZsb3BweSBEcml2ZSIsCiAJCVVTX1NDX1VGSSwgVVNfUFJfQ0IsIE5VTEwsIDAgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKLVVOVVNVQUxfREVWKCAgMHgwNjZiLCAweDAxMDUsIDB4MDEwMCwgMHgwMTAwLAotCQkiT2x5bXB1cyIsCi0JCSJDYW1lZGlhIE1BVVNCLTIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCi0JCTApLAotI2VuZGlmCi0KIC8qIFJlcG9ydGVkIGJ5IERhcnNlbiBMdSA8ZGFyc2VuQG1pY3JvLmVlLm50aHUuZWR1LnR3PiAqLwogVU5VU1VBTF9ERVYoIDB4MDY2ZiwgMHg4MDAwLCAweDAwMDEsIDB4MDAwMSwKIAkJIlNpZ21hVGVsIiwKQEAgLTEwNDMsMzUgKzkzMCwxMiBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfRklYX0NBUEFDSVRZICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLVVOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAwMDUsIDB4MDAwNSwgMHgwMDA1LAotCQkiU2FuZGlzayIsCi0JCSJJbWFnZU1hdGUgU0REUi0wNWIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9mbGFzaCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0KIFVOVVNVQUxfREVWKCAgMHgwNzgxLCAweDAxMDAsIDB4MDEwMCwgMHgwMTAwLAogCQkiU2FuZGlzayIsCiAJCSJJbWFnZU1hdGUgU0REUi0xMiIsCiAJCVVTX1NDX1NDU0ksIFVTX1BSX0NCLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci1VTlVTVUFMX0RFViggIDB4MDc4MSwgMHgwMjAwLCAweDAwMDAsIDB4OTk5OSwKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFItMDkiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCi0JCTApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQotVU5VU1VBTF9ERVYoICAweDA3YWIsIDB4ZmMwMSwgMHgwMDAwLCAweDk5OTksCi0JCSJGcmVlY29tIiwKLQkJIlVTQi1JREUiLAotCQlVU19TQ19RSUMsIFVTX1BSX0ZSRUVDT00sIGZyZWVjb21faW5pdCwgMCksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgRWVybyBWb2xvdGluZW4gPGVlcm9AcGluZy12aWluaS5vcmc+ICovCiBVTlVTVUFMX0RFViggIDB4MDdhYiwgMHhmY2NkLCAweDAwMDAsIDB4OTk5OSwKIAkJIkZyZWVjb20gVGVjaG5vbG9naWVzIiwKQEAgLTEwOTEsMTIgKzk1NSw3IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwKIAkJVVNfRkxfU0NNX01VTFRfVEFSRyApLAogCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNiwgMHgwMTAwLCAweDAxMDAsCi0JCSJNaWNyb3RlY2giLAotCQkiQ2FtZXJhTWF0ZSAoRFBDTV9VU0IpIiwKLSAJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwICksCi0jZWxzZQorI2lmZGVmIE5PX1NERFIwOQogVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNiwgMHgwMTAwLCAweDAxMDAsCiAJCSJNaWNyb3RlY2giLAogCQkiQ2FtZXJhTWF0ZSIsCkBAIC0xMTA0LDEwOCArOTYzLDYgQEAKIAkJVVNfRkxfU0lOR0xFX0xVTiApLAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCi1VTlVTVUFMX0RFViggIDB4MDdiNCwgMHgwMTBhLCAweDAxMDIsIDB4MDEwMiwKLQkJIk9seW1wdXMiLAotCQkiTUFVU0ItMTAgKEFsYXVkYSkiLAotIAkJVVNfU0NfU0NTSSwgVVNfUFJfQUxBVURBLCBpbml0X2FsYXVkYSwgMCApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTAwMCwgMHgwMDAwLCAweDAwMTUsCi0JCSJEYXRhZmFiIiwKLQkJIk1EQ0ZFLUIgVVNCIENGIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgRGF0YWZhYi1iYXNlZCBkZXZpY2VzIG1heSBvciBtYXkgbm90IHdvcmsKLSAqIHVzaW5nIHRoZSBjdXJyZW50IGRyaXZlci4uLnRoZSAweGZmZmYgaXMgYXJiaXRyYXJ5IHNpbmNlIEkKLSAqIGRvbid0IGtub3cgd2hhdCBkZXZpY2UgdmVyc2lvbnMgZXhpc3QgZm9yIHRoZXNlIGd1eXMuCi0gKgotICogVGhlIDB4YTAwMyBhbmQgMHhhMDA0IGRldmljZXMgaW4gcGFydGljdWxhciBJJ20gY3VyaW91cyBhYm91dC4KLSAqIEknbSB0b2xkIHRoZXkgZXhpc3QgYnV0IHNvIGZhciBub2JvZHkgaGFzIGNvbWUgZm9yd2FyZCB0byBzYXkgdGhhdAotICogdGhleSB3b3JrIHdpdGggdGhpcyBkcml2ZXIuICBHaXZlbiB0aGUgc3VjY2VzcyB3ZSd2ZSBoYWQgZ2V0dGluZwotICogb3RoZXIgRGF0YWZhYi1iYXNlZCBjYXJkcyBvcGVyYXRpb25hbCB3aXRoIHRoaXMgZHJpdmVyLCBJJ3ZlIGRlY2lkZWQKLSAqIHRvIGxlYXZlIHRoZXNlIHR3byBkZXZpY2VzIGluIHRoZSBsaXN0LgotICovCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGEwMDEsIDB4MDAwMCwgMHhmZmZmLAotCQkiU0lJRy9EYXRhZmFiIiwKLQkJIlNJSUcvRGF0YWZhYiBNZW1vcnkgU3RpY2srQ0YgUmVhZGVyL1dyaXRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotLyogUmVwb3J0ZWQgYnkgSm9zZWYgUmVpc2luZ2VyIDxqb3NlZi5yZWlzaW5nZXJAbmV0Y29sb2duZS5kZT4gKi8KLVVOVVNVQUxfREVWKCAweDA3YzQsIDB4YTAwMiwgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhZmFiL1Vua25vd24iLAotCQkiTUQyL01EMyBEaXNrIGVuY2xvc3VyZSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCVVTX0ZMX1NJTkdMRV9MVU4gKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDAzLCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIvVW5rbm93biIsCi0JCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA0LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkRhdGFmYWIvVW5rbm93biIsCi0JCSJEYXRhZmFiLWJhc2VkIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA1LCAweDAwMDAsIDB4ZmZmZiwKLQkJIlBOWS9EYXRhZmFiIiwKLQkJIlBOWS9EYXRhZmFiIENGK1NNIFJlYWRlciIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX0RBVEFGQUIsIE5VTEwsCi0JCTAgKSwKLQotVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMDA2LCAweDAwMDAsIDB4ZmZmZiwKLQkJIlNpbXBsZSBUZWNoL0RhdGFmYWIiLAotCQkiU2ltcGxlIFRlY2gvRGF0YWZhYiBDRitTTSBSZWFkZXIiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0jZW5kaWYKLQkJCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotLyogQ29udHJpYnV0ZWQgYnkgUGV0ZXIgV2FlY2h0bGVyICovCi1VTlVTVUFMX0RFViggMHgwN2M0LCAweGExMDMsIDB4MDAwMCwgMHg5OTk5LAotCQkiRGF0YWZhYiIsCi0JCSJNRFNNLUIgcmVhZGVyIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9GSVhfSU5RVUlSWSApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotLyogU3VibWl0dGVkIGJ5IE9sYWYgSGVyaW5nIDxvbGhAc3VzZS5kZT4gKi8KLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKLQkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJMCApLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotLyogU00gcGFydCAtIGFlYiA8QW5kcmllcy5Ccm91d2VyQGN3aS5ubD4gKi8KLVVOVVNVQUxfREVWKCAgMHgwN2M0LCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAotCQkiRGF0YWZhYiBTeXN0ZW1zLCBJbmMuIiwKLQkJIlVTQiB0byBDRiArIFNNIENvbWJvIChMQzEpIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi0vKiBSZXBvcnRlZCBieSBGZWxpeCBNb2VsbGVyIDxmZWxpeEBkZXJrbGVja3MuZGU+Ci0gKiBpbiBHZXJtYW55IHRoaXMgaXMgc29sZCBieSBIYW1hIHdpdGggdGhlIHByb2R1Y3RudW1iZXIgNDY5NTIKLSAqIGFzICJEdWFsU2xvdCBDb21wYWN0Rmxhc2goVE0pICYgTVN0aWNrIERyaXZlIFVTQiIKLSAqLwotVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwYiwgMHgwMDAwLCAweGZmZmYsCi0JCSJEYXRhRmFiIFN5c3RlbXMgSW5jLiIsCi0JCSJVU0IgQ0YrTVMiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9EQVRBRkFCLCBOVUxMLAotCQkwICksCi0KLSNlbmRpZgotCiAvKiBEYXRhZmFiIEtFQ0YtVVNCIC8gU2FnYXRlayBEQ1MtQ0YgLyBTaW1wbGV0ZWNoIEZsYXNobGluayBVQ0YtMTAwCiAgKiBPbmx5IHJldmlzaW9uIDEuMTMgdGVzdGVkIChzYW1lIGZvciBhbGwgb2YgdGhlIGFib3ZlIGRldmljZXMsCiAgKiBiYXNlZCBvbiB0aGUgRGF0YWZhYiBERi1VRy0wNyBjaGlwKS4gIE5lZWRlZCBmb3IgVVNfRkxfRklYX0lOUVVJUlkuCkBAIC0xNDA5LDI5ICsxMTY2LDYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX1NBTkVfU0VOU0UgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKLVVOVVNVQUxfREVWKCAgMHgwYmY2LCAweGEwMDEsIDB4MDEwMCwgMHgwMTEwLAotCQkiQVRJIiwKLQkJIlVTQiBDYWJsZSAyMDUiLAotCQlVU19TQ19JU0QyMDAsIFVTX1BSX0JVTEssIGlzZDIwMF9Jbml0aWFsaXphdGlvbiwKLQkJMCApLAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgotVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkFjb21kYXRhIiwKLQkJIkNGIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfREFUQUZBQiwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiApLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NQotVU5VU1VBTF9ERVYoIDB4MGMwYiwgMHhhMTA5LCAweDAwMDAsIDB4ZmZmZiwKLQkJIkFjb21kYXRhIiwKLQkJIlNNIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfU0REUjU1LCBOVUxMLAotCQlVU19GTF9TSU5HTEVfTFVOICksCi0jZW5kaWYKLQogVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzMxMCwgMHgwMDAwLCAweDk5OTksCiAJCSJNYXh0b3IiLAogCQkiVVNCIHRvIFNBVEEiLApAQCAtMTQ0OCwyMyArMTE4Miw2IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9TSU5HTEVfTFVOICksCiAKLS8qIFN1Ym1pdHRlZCBieTogTmljayBTaWxsaWsgPG4uc2lsbGlrQHRlbXBsZS5lZHU+Ci0gKiBOZWVkZWQgZm9yIE9uZVRvdWNoIGV4dGVuc2lvbiB0byB1c2Itc3RvcmFnZQotICoKLSAqLwotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSAotCVVOVVNVQUxfREVWKCAgMHgwZDQ5LCAweDcwMDAsIDB4MDAwMCwgMHg5OTk5LAotCQkJIk1heHRvciIsCi0JCQkiT25lVG91Y2ggRXh0ZXJuYWwgSGFyZGRyaXZlIiwKLQkJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBvbmV0b3VjaF9jb25uZWN0X2lucHV0LAotCQkJMCksCi0JVU5VU1VBTF9ERVYoICAweDBkNDksIDB4NzAxMCwgMHgwMDAwLCAweDk5OTksCi0JCQkiTWF4dG9yIiwKLQkJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAotCQkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIG9uZXRvdWNoX2Nvbm5lY3RfaW5wdXQsCi0JCQkwKSwKLSNlbmRpZgotCiAvKiBTdWJtaXR0ZWQgYnkgSm9yaXMgU3RydXl2ZSA8am9yaXNAc3RydXl2ZS5iZT4gKi8KIFVOVVNVQUxfREVWKCAweDBkOTYsIDB4NDEwYSwgMHgwMDAxLCAweGZmZmYsCiAJCSJNZWRpb24iLApAQCAtMjExNywxNCArMTgzNCw2IEBACiAJCSJNaWNybyBNaW5pIDFHQiIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLCBVU19GTF9OT1RfTE9DS0FCTEUgKSwKIAotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLVVOVVNVQUxfREVWKCAgMHg1NWFhLCAweGExMDMsIDB4MDAwMCwgMHg5OTk5LCAKLQkJIlNhbmRpc2siLAotCQkiSW1hZ2VNYXRlIFNERFI1NSIsCi0JCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKLQkJVVNfRkxfU0lOR0xFX0xVTiksCi0jZW5kaWYKLQogLyogUmVwb3J0ZWQgYnkgQW5kcmV3IFNpbW1vbnMgPGFuZHJldy5zaW1tb25zQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHhlZDA2LCAweDQ1MDAsIDB4MDAwMSwgMHgwMDAxLAogCQkiRGF0YVN0b3IiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2ZyZWVjb20uaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9mcmVlY29tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc1ODY3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9mcmVlY29tLmgKQEAgLTAsMCArMSwyNiBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIHRoZSBGcmVlY29tIFVTQi9JREUgYWRhcHRvcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT01fTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDdhYiwgMHhmYzAxLCAweDAwMDAsIDB4OTk5OSwKKwkJIkZyZWVjb20iLAorCQkiVVNCLUlERSIsCisJCVVTX1NDX1FJQywgVVNfUFJfRlJFRUNPTSwgaW5pdF9mcmVlY29tLCAwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00pIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2lzZDIwMC5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2lzZDIwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkOTlkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfaXNkMjAwLmgKQEAgLTAsMCArMSw1NyBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIEluLVN5c3RlbSBEZXNpZ24sIEluYy4gSVNEMjAwIEFTSUMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMF9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwNTRjLCAweDAwMmIsIDB4MDEwMCwgMHgwMTEwLAorCQkiU29ueSIsCisJCSJQb3J0YWJsZSBVU0IgSGFyZGRyaXZlIFYyIiwKKwkJVVNfU0NfSVNEMjAwLCBVU19QUl9CVUxLLCBpc2QyMDBfSW5pdGlhbGl6YXRpb24sCisJCTApLAorCitVTlVTVUFMX0RFViggIDB4MDVhYiwgMHgwMDMxLCAweDAxMDAsIDB4MDExMCwKKwkJIkluLVN5c3RlbSIsCisJCSJVU0IvSURFIEJyaWRnZSAoQVRBL0FUQVBJKSIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDMwMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4MDM1MSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiUG9ydGFibGUgVVNCIEhhcmRkcml2ZSBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA1YWIsIDB4NTcwMSwgMHgwMTAwLCAweDAxMTAsCisJCSJJbi1TeXN0ZW0iLAorCQkiVVNCIFN0b3JhZ2UgQWRhcHRlciBWMiIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDBiZjYsIDB4YTAwMSwgMHgwMTAwLCAweDAxMTAsCisJCSJBVEkiLAorCQkiVVNCIENhYmxlIDIwNSIsCisJCVVTX1NDX0lTRDIwMCwgVVNfUFJfQlVMSywgaXNkMjAwX0luaXRpYWxpemF0aW9uLAorCQkwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9qdW1wc2hvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTQ5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfanVtcHNob3QuaApAQCAtMCwwICsxLDI3IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIExleGFyICJKdW1wc2hvdCIgQ29tcGFjdCBGbGFzaCByZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1RfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDVkYywgMHgwMDAxLCAweDAwMDAsIDB4MDAwMSwKKwkJIkxleGFyIiwKKwkJIkp1bXBzaG90IFVTQiBDRiBSZWFkZXIiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9KVU1QU0hPVCwgTlVMTCwKKwkJVVNfRkxfTkVFRF9PVkVSUklERSksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfa2FybWEuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9rYXJtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYWUzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfa2FybWEuaApAQCAtMCwwICsxLDI2IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIFJpbyBLYXJtYQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQV9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwNDVhLCAweDUyMTAsIDB4MDEwMSwgMHgwMTAxLAorCQkiUmlvIiwKKwkJIlJpbyBLYXJtYSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0tBUk1BLCByaW9fa2FybWFfaW5pdCwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSkgfHwgLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfb25ldG91Y2guaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9vbmV0b3VjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkOTMwNmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfb25ldG91Y2guaApAQCAtMCwwICsxLDM2IEBACisvKiBVbnVzdWFsIERldmljZXMgRmlsZSBmb3IgdGhlIE1heHRvciBPbmVUb3VjaCBVU0IgaGFyZCBkcml2ZSdzIGJ1dHRvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCkgfHwgXAorCQlkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSF9NT0RVTEUpCisKKy8qIFN1Ym1pdHRlZCBieTogTmljayBTaWxsaWsgPG4uc2lsbGlrQHRlbXBsZS5lZHU+CisgKiBOZWVkZWQgZm9yIE9uZVRvdWNoIGV4dGVuc2lvbiB0byB1c2Itc3RvcmFnZQorICovCitVTlVTVUFMX0RFViggIDB4MGQ0OSwgMHg3MDAwLCAweDAwMDAsIDB4OTk5OSwKKwkJIk1heHRvciIsCisJCSJPbmVUb3VjaCBFeHRlcm5hbCBIYXJkZHJpdmUiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgb25ldG91Y2hfY29ubmVjdF9pbnB1dCwKKwkJMCksCisKK1VOVVNVQUxfREVWKCAgMHgwZDQ5LCAweDcwMTAsIDB4MDAwMCwgMHg5OTk5LAorCQkiTWF4dG9yIiwKKwkJIk9uZVRvdWNoIEV4dGVybmFsIEhhcmRkcml2ZSIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBvbmV0b3VjaF9jb25uZWN0X2lucHV0LAorCQkwKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyMDkuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyMDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGNhYjUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3NkZHIwOS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBTYW5EaXNrIFNERFItMDkgU21hcnRNZWRpYSByZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOV9NT0RVTEUpCisKK1VOVVNVQUxfREVWKCAgMHgwNDM2LCAweDAwMDUsIDB4MDEwMCwgMHgwMTAwLAorCQkiTWljcm90ZWNoIiwKKwkJIkNhbWVyYU1hdGUgKERQQ01fVVNCKSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX0RQQ01fVVNCLCBOVUxMLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwMywgMHgwMDAwLCAweDk5OTksCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSMDkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9FVVNCX1NERFIwOSwgdXNiX3N0b3Jfc2RkcjA5X2luaXQsCisJCTApLAorCisvKiBUaGlzIGVudHJ5IGlzIGZyb20gQW5kcmllcy5Ccm91d2VyQGN3aS5ubCAqLworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwNSwgMHgwMTAwLCAweDAyMDgsCisJCSJTQ00gTWljcm9zeXN0ZW1zIiwKKwkJImVVU0IgU21hcnRNZWRpYSAvIENvbXBhY3RGbGFzaCBBZGFwdGVyIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIHVzYl9zdG9yX3NkZHIwOV9kcGNtX2luaXQsCisJCTApLAorCitVTlVTVUFMX0RFViggIDB4MDY2YiwgMHgwMTA1LCAweDAxMDAsIDB4MDEwMCwKKwkJIk9seW1wdXMiLAorCQkiQ2FtZWRpYSBNQVVTQi0yIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDIwMCwgMHgwMDAwLCAweDk5OTksCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSLTA5IiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRVVTQl9TRERSMDksIHVzYl9zdG9yX3NkZHIwOV9pbml0LAorCQkwKSwKKworVU5VU1VBTF9ERVYoICAweDA3YWYsIDB4MDAwNiwgMHgwMTAwLCAweDAxMDAsCisJCSJNaWNyb3RlY2giLAorCQkiQ2FtZXJhTWF0ZSAoRFBDTV9VU0IpIiwKKwkJVVNfU0NfU0NTSSwgVVNfUFJfRFBDTV9VU0IsIE5VTEwsIDApLAorCisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5KSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyNTUuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9zZGRyNTUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTgxZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3NkZHI1NS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qIFVudXN1YWwgRGV2aWNlcyBGaWxlIGZvciBTYW5EaXNrIFNERFItNTUgU21hcnRNZWRpYSByZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1KSB8fCBcCisJCWRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NV9NT0RVTEUpCisKKy8qIENvbnRyaWJ1dGVkIGJ5IFBldGVyIFdhZWNodGxlciAqLworVU5VU1VBTF9ERVYoIDB4MDdjNCwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwKKwkJIkRhdGFmYWIiLAorCQkiTURTTS1CIHJlYWRlciIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwKKwkJVVNfRkxfRklYX0lOUVVJUlkpLAorCisvKiBTTSBwYXJ0IC0gYWViIDxBbmRyaWVzLkJyb3V3ZXJAY3dpLm5sPiAqLworVU5VU1VBTF9ERVYoICAweDA3YzQsIDB4YTEwOSwgMHgwMDAwLCAweGZmZmYsCisJCSJEYXRhZmFiIFN5c3RlbXMsIEluYy4iLAorCQkiVVNCIHRvIENGICsgU00gQ29tYm8gKExDMSkiLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsIDApLAorCitVTlVTVUFMX0RFViggMHgwYzBiLCAweGExMDksIDB4MDAwMCwgMHhmZmZmLAorCQkiQWNvbWRhdGEiLAorCQkiU00iLAorCQlVU19TQ19TQ1NJLCBVU19QUl9TRERSNTUsIE5VTEwsIDApLAorCitVTlVTVUFMX0RFViggIDB4NTVhYSwgMHhhMTAzLCAweDAwMDAsIDB4OTk5OSwKKwkJIlNhbmRpc2siLAorCQkiSW1hZ2VNYXRlIFNERFI1NSIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1NERFI1NSwgTlVMTCwgMCksCisKKyNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3VzYmF0LmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfdXNiYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGU4NjlmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3VzYmF0LmgKQEAgLTAsMCArMSw0MyBAQAorLyogVW51c3VhbCBEZXZpY2VzIEZpbGUgZm9yIFNDTSBNaWNyb3N5c3RlbXMgKGEuay5hLiBTaHV0dGxlKSBVU0ItQVRBUEkgY2FibGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CisgKiBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQpIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVRfTU9EVUxFKQorCitVTlVTVUFMX0RFViggIDB4MDNmMCwgMHgwMjA3LCAweDAwMDEsIDB4MDAwMSwKKwkJIkhQIiwKKwkJIkNELVdyaXRlcisgODIwMGUiLAorCQlVU19TQ184MDcwLCBVU19QUl9VU0JBVCwgaW5pdF91c2JhdF9jZCwgMCksCisKK1VOVVNVQUxfREVWKCAgMHgwM2YwLCAweDAzMDcsIDB4MDAwMSwgMHgwMDAxLAorCQkiSFAiLAorCQkiQ0QtV3JpdGVyKyBDRC00ZSIsCisJCVVTX1NDXzgwNzAsIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2NkLCAwKSwKKworVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MTAxMCwgMHgwMDAwLCAweDk5OTksCisJCSJTaHV0dGxlL1NDTSIsCisJCSJVU0JBVC0wMiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2ZsYXNoLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworVU5VU1VBTF9ERVYoICAweDA3ODEsIDB4MDAwNSwgMHgwMDA1LCAweDAwMDUsCisJCSJTYW5kaXNrIiwKKwkJIkltYWdlTWF0ZSBTRERSLTA1YiIsCisJCVVTX1NDX1NDU0ksIFVTX1BSX1VTQkFULCBpbml0X3VzYmF0X2ZsYXNoLAorCQlVU19GTF9TSU5HTEVfTFVOKSwKKworI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKSB8fCAuLi4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IDRiZWNmNDkuLjgwNjBiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKICAqICAgKGMpIDIwMDAgRGF2aWQgTC4gQnJvd24sIEpyLiAodXNiLXN0b3JhZ2VAZGF2aWRiLm9yZykKLSAqICAgKGMpIDIwMDMgQWxhbiBTdGVybiAoc3Rlcm5Acm93bGFuZC5oYXJ2YXJkLmVkdSkKKyAqICAgKGMpIDIwMDMtMjAwOSBBbGFuIFN0ZXJuIChzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1KQogICoKICAqIEluaXRpYWwgd29yayBieToKICAqICAgKGMpIDE5OTkgTWljaGFlbCBHZWUgKG1pY2hhZWxAbGludXhzcGVjaWZpYy5jb20pCkBAIC02NiwzOSArNjYsNiBAQAogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiaW5pdGlhbGl6ZXJzLmgiCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLSNpbmNsdWRlICJzaHV0dGxlX3VzYmF0LmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5Ci0jaW5jbHVkZSAic2RkcjA5LmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1Ci0jaW5jbHVkZSAic2RkcjU1LmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTQotI2luY2x1ZGUgImZyZWVjb20uaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAKLSNpbmNsdWRlICJpc2QyMDAuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCCi0jaW5jbHVkZSAiZGF0YWZhYi5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCi0jaW5jbHVkZSAianVtcHNob3QuaCIKLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSAotI2luY2x1ZGUgIm9uZXRvdWNoLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCi0jaW5jbHVkZSAiYWxhdWRhLmgiCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEKLSNpbmNsdWRlICJrYXJtYS5oIgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IKLSNpbmNsdWRlICJjeXByZXNzX2F0YWNiLmgiCi0jZW5kaWYKICNpbmNsdWRlICJzaWVycmFfbXMuaCIKICNpbmNsdWRlICJvcHRpb25fbXMuaCIKIApAQCAtMTE4LDM2ICs4NSw4IEBACiAKIC8qCiAgKiBUaGUgZW50cmllcyBpbiB0aGlzIHRhYmxlIGNvcnJlc3BvbmQsIGxpbmUgZm9yIGxpbmUsCi0gKiB3aXRoIHRoZSBlbnRyaWVzIG9mIHVzX3VudXN1YWxfZGV2X2xpc3RbXS4KKyAqIHdpdGggdGhlIGVudHJpZXMgaW4gdXNiX3N0b3JhZ2VfdXNiX2lkc1tdLCBkZWZpbmVkIGluIHVzdWFsLXRhYmxlcy5jLgogICovCi0jaWZuZGVmIENPTkZJR19VU0JfTElCVVNVQUwKLQotI2RlZmluZSBVTlVTVUFMX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCi0JCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSx1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCi0JCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCi17IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLGJjZERldmljZU1heCksIFwKLSAgLmRyaXZlcl9pbmZvID0gKGZsYWdzKXwoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KLQotI2RlZmluZSBDT01QTElBTlRfREVWCVVOVVNVQUxfREVWCi0KLSNkZWZpbmUgVVNVQUxfREVWKHVzZVByb3RvLCB1c2VUcmFucywgdXNlVHlwZSkgXAoteyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX01BU1NfU1RPUkFHRSwgdXNlUHJvdG8sIHVzZVRyYW5zKSwgXAotICAuZHJpdmVyX2luZm8gPSAoVVNCX1VTX1RZUEVfU1RPUjw8MjQpIH0KLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHN0b3JhZ2VfdXNiX2lkcyBbXSA9IHsKLQotIwlpbmNsdWRlICJ1bnVzdWFsX2RldnMuaCIKLSN1bmRlZiBVTlVTVUFMX0RFVgotI3VuZGVmIENPTVBMSUFOVF9ERVYKLSN1bmRlZiBVU1VBTF9ERVYKLQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotCXsgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBzdG9yYWdlX3VzYl9pZHMpOwotI2VuZGlmIC8qIENPTkZJR19VU0JfTElCVVNVQUwgKi8KLQotLyogVGhpcyBpcyB0aGUgbGlzdCBvZiBkZXZpY2VzIHdlIHJlY29nbml6ZSwgYWxvbmcgd2l0aCB0aGVpciBmbGFnIGRhdGEgKi8KIAogLyogVGhlIHZlbmRvciBuYW1lIHNob3VsZCBiZSBrZXB0IGF0IGVpZ2h0IGNoYXJhY3RlcnMgb3IgbGVzcywgYW5kCiAgKiB0aGUgcHJvZHVjdCBuYW1lIHNob3VsZCBiZSBrZXB0IGF0IDE2IGNoYXJhY3RlcnMgb3IgbGVzcy4gSWYgYSBkZXZpY2UKQEAgLTE3OSwxOCArMTE4LDE3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgdXNfdW51c3VhbF9kZXZfbGlzdFtdID0gewogIwlpbmNsdWRlICJ1bnVzdWFsX2RldnMuaCIgCi0jCXVuZGVmIFVOVVNVQUxfREVWCi0jCXVuZGVmIENPTVBMSUFOVF9ERVYKLSMJdW5kZWYgVVNVQUxfREVWCi0KLQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotCXsgTlVMTCB9CisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAorI3VuZGVmIFVOVVNVQUxfREVWCisjdW5kZWYgQ09NUExJQU5UX0RFVgorI3VuZGVmIFVTVUFMX0RFVgorCiAKICNpZmRlZiBDT05GSUdfUE0JLyogTWluaW1hbCBzdXBwb3J0IGZvciBzdXNwZW5kIGFuZCByZXN1bWUgKi8KIAotc3RhdGljIGludCBzdG9yYWdlX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK2ludCB1c2Jfc3Rvcl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKQEAgLTIwNyw4ICsxNDUsOSBAQAogCW11dGV4X3VubG9jaygmdXMtPmRldl9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9zdXNwZW5kKTsKIAotc3RhdGljIGludCBzdG9yYWdlX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCitpbnQgdXNiX3N0b3JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKIHsKIAlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSB1c2JfZ2V0X2ludGZkYXRhKGlmYWNlKTsKIApAQCAtMjIxLDggKzE2MCw5IEBACiAJbXV0ZXhfdW5sb2NrKCZ1cy0+ZGV2X211dGV4KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Jlc3VtZSk7CiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKQEAgLTIzNSw2ICsxNzUsNyBAQAogCSAqIHRoZSBkZXZpY2UgKi8KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSk7CiAKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIApAQCAtMjQzLDcgKzE4NCw3IEBACiAgKiBhIFVTQiBwb3J0IHJlc2V0LCB3aGV0aGVyIGZyb20gdGhpcyBkcml2ZXIgb3IgYSBkaWZmZXJlbnQgb25lLgogICovCiAKLXN0YXRpYyBpbnQgc3RvcmFnZV9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9zdG9yX3ByZV9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCiB7CiAJc3RydWN0IHVzX2RhdGEgKnVzID0gdXNiX2dldF9pbnRmZGF0YShpZmFjZSk7CiAKQEAgLTI1Myw4ICsxOTQsOSBAQAogCW11dGV4X2xvY2soJnVzLT5kZXZfbXV0ZXgpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfcHJlX3Jlc2V0KTsKIAotc3RhdGljIGludCBzdG9yYWdlX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQoraW50IHVzYl9zdG9yX3Bvc3RfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZhY2UpOwogCkBAIC0yNjksNiArMjExLDcgQEAKIAltdXRleF91bmxvY2soJnVzLT5kZXZfbXV0ZXgpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfcG9zdF9yZXNldCk7CiAKIC8qCiAgKiBmaWxsX2lucXVpcnlfcmVzcG9uc2UgdGFrZXMgYW4gdW5zaWduZWQgY2hhciBhcnJheSAod2hpY2ggbXVzdApAQCAtMzExLDYgKzI1NCw3IEBACiAKIAl1c2Jfc3Rvcl9zZXRfeGZlcl9idWYoZGF0YSwgZGF0YV9sZW4sIHVzLT5zcmIpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZmlsbF9pbnF1aXJ5X3Jlc3BvbnNlKTsKIAogc3RhdGljIGludCB1c2Jfc3Rvcl9jb250cm9sX3RocmVhZCh2b2lkICogX191cykKIHsKQEAgLTU1MSwyMCArNDk1LDEzIEBACiAJCQl2aWQsIHBpZCwgZik7CiB9CiAKLS8qIEZpbmQgYW4gdW51c3VhbF9kZXYgZGVzY3JpcHRvciAoYWx3YXlzIHN1Y2NlZWRzIGluIHRoZSBjdXJyZW50IGNvZGUpICovCi1zdGF0aWMgc3RydWN0IHVzX3VudXN1YWxfZGV2ICpmaW5kX3VudXN1YWwoY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCWNvbnN0IGludCBpZF9pbmRleCA9IGlkIC0gc3RvcmFnZV91c2JfaWRzOwotCXJldHVybiAmdXNfdW51c3VhbF9kZXZfbGlzdFtpZF9pbmRleF07Ci19Ci0KIC8qIEdldCB0aGUgdW51c3VhbF9kZXZzIGVudHJpZXMgYW5kIHRoZSBzdHJpbmcgZGVzY3JpcHRvcnMgKi8KLXN0YXRpYyBpbnQgZ2V0X2RldmljZV9pbmZvKHN0cnVjdCB1c19kYXRhICp1cywgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBnZXRfZGV2aWNlX2luZm8oc3RydWN0IHVzX2RhdGEgKnVzLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCisJCXN0cnVjdCB1c191bnVzdWFsX2RldiAqdW51c3VhbF9kZXYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHVzLT5wdXNiX2RldjsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppZGVzYyA9CiAJCSZ1cy0+cHVzYl9pbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYzsKLQlzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgKnVudXN1YWxfZGV2ID0gZmluZF91bnVzdWFsKGlkKTsKIAogCS8qIFN0b3JlIHRoZSBlbnRyaWVzICovCiAJdXMtPnVudXN1YWxfZGV2ID0gdW51c3VhbF9kZXY7CkBAIC02MjksNyArNTY2LDcgQEAKIH0KIAogLyogR2V0IHRoZSB0cmFuc3BvcnQgc2V0dGluZ3MgKi8KLXN0YXRpYyBpbnQgZ2V0X3RyYW5zcG9ydChzdHJ1Y3QgdXNfZGF0YSAqdXMpCitzdGF0aWMgdm9pZCBnZXRfdHJhbnNwb3J0KHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzd2l0Y2ggKHVzLT5wcm90b2NvbCkgewogCWNhc2UgVVNfUFJfQ0I6CkBAIC02NTEsMTAwICs1ODgsMTEgQEAKIAkJdXMtPnRyYW5zcG9ydCA9IHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0OwogCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKIAkJYnJlYWs7Ci0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQKLQljYXNlIFVTX1BSX1VTQkFUOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgPSAiU2h1dHRsZSBVU0JBVCI7Ci0JCXVzLT50cmFuc3BvcnQgPSB1c2JhdF90cmFuc3BvcnQ7Ci0JCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOQotCWNhc2UgVVNfUFJfRVVTQl9TRERSMDk6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJFVVNCL1NERFIwOSI7Ci0JCXVzLT50cmFuc3BvcnQgPSBzZGRyMDlfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQ0JfcmVzZXQ7Ci0JCXVzLT5tYXhfbHVuID0gMDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKLQljYXNlIFVTX1BSX1NERFI1NToKLQkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlNERFI1NSI7Ci0JCXVzLT50cmFuc3BvcnQgPSBzZGRyNTVfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gc2RkcjU1X3Jlc2V0OwotCQl1cy0+bWF4X2x1biA9IDA7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfRFBDTQotCWNhc2UgVVNfUFJfRFBDTV9VU0I6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJDb250cm9sL0J1bGstRVVTQi9TRERSMDkiOwotCQl1cy0+dHJhbnNwb3J0ID0gZHBjbV90cmFuc3BvcnQ7Ci0JCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9DQl9yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00KLQljYXNlIFVTX1BSX0ZSRUVDT006Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSA9ICJGcmVlY29tIjsKLQkJdXMtPnRyYW5zcG9ydCA9IGZyZWVjb21fdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfZnJlZWNvbV9yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAwOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIKLQljYXNlIFVTX1BSX0RBVEFGQUI6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSAgPSAiRGF0YWZhYiBCdWxrLU9ubHkiOwotCQl1cy0+dHJhbnNwb3J0ID0gZGF0YWZhYl90cmFuc3BvcnQ7Ci0JCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OwotCQl1cy0+bWF4X2x1biA9IDE7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QKLQljYXNlIFVTX1BSX0pVTVBTSE9UOgotCQl1cy0+dHJhbnNwb3J0X25hbWUgID0gIkxleGFyIEp1bXBzaG90IENvbnRyb2wvQnVsayI7Ci0JCXVzLT50cmFuc3BvcnQgPSBqdW1wc2hvdF90cmFuc3BvcnQ7Ci0JCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OwotCQl1cy0+bWF4X2x1biA9IDE7Ci0JCWJyZWFrOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCi0JY2FzZSBVU19QUl9BTEFVREE6Ci0JCXVzLT50cmFuc3BvcnRfbmFtZSAgPSAiQWxhdWRhIENvbnRyb2wvQnVsayI7Ci0JCXVzLT50cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0OwotCQl1cy0+dHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDsKLQkJdXMtPm1heF9sdW4gPSAxOwotCQlicmVhazsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCi0JY2FzZSBVU19QUl9LQVJNQToKLQkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlJpbyBLYXJtYS9CdWxrIjsKLQkJdXMtPnRyYW5zcG9ydCA9IHJpb19rYXJtYV90cmFuc3BvcnQ7Ci0JCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OwotCQlicmVhazsKLSNlbmRpZgotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU87CiAJfQotCVVTX0RFQlVHUCgiVHJhbnNwb3J0OiAlc1xuIiwgdXMtPnRyYW5zcG9ydF9uYW1lKTsKLQotCS8qIGZpeCBmb3Igc2luZ2xlLWx1biBkZXZpY2VzICovCi0JaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9TSU5HTEVfTFVOKQotCQl1cy0+bWF4X2x1biA9IDA7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIEdldCB0aGUgcHJvdG9jb2wgc2V0dGluZ3MgKi8KLXN0YXRpYyBpbnQgZ2V0X3Byb3RvY29sKHN0cnVjdCB1c19kYXRhICp1cykKK3N0YXRpYyB2b2lkIGdldF9wcm90b2NvbChzdHJ1Y3QgdXNfZGF0YSAqdXMpCiB7CiAJc3dpdGNoICh1cy0+c3ViY2xhc3MpIHsKIAljYXNlIFVTX1NDX1JCQzoKQEAgLTc3OSwyNiArNjI3LDcgQEAKIAkJdXMtPnByb3RvY29sX25hbWUgPSAiVW5pZm9ybSBGbG9wcHkgSW50ZXJmYWNlIChVRkkpIjsKIAkJdXMtPnByb3RvX2hhbmRsZXIgPSB1c2Jfc3Rvcl91ZmlfY29tbWFuZDsKIAkJYnJlYWs7Ci0KLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCi0JY2FzZSBVU19TQ19JU0QyMDA6Ci0JCXVzLT5wcm90b2NvbF9uYW1lID0gIklTRDIwMCBBVEEvQVRBUEkiOwotCQl1cy0+cHJvdG9faGFuZGxlciA9IGlzZDIwMF9hdGFfY29tbWFuZDsKLQkJYnJlYWs7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCCi0JY2FzZSBVU19TQ19DWVBfQVRBQ0I6Ci0JCXVzLT5wcm90b2NvbF9uYW1lID0gIlRyYW5zcGFyZW50IFNDU0kgd2l0aCBDeXByZXNzIEFUQUNCIjsKLQkJdXMtPnByb3RvX2hhbmRsZXIgPSBjeXByZXNzX2F0YWNiX3Bhc3N0aHJvdWdoOwotCQlicmVhazsKLSNlbmRpZgotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU87CiAJfQotCVVTX0RFQlVHUCgiUHJvdG9jb2w6ICVzXG4iLCB1cy0+cHJvdG9jb2xfbmFtZSk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIEdldCB0aGUgcGlwZSBzZXR0aW5ncyAqLwpAQCAtODQ2LDEyICs2NzUsMTIgQEAKIAl1cy0+c2VuZF9jdHJsX3BpcGUgPSB1c2Jfc25kY3RybHBpcGUodXMtPnB1c2JfZGV2LCAwKTsKIAl1cy0+cmVjdl9jdHJsX3BpcGUgPSB1c2JfcmN2Y3RybHBpcGUodXMtPnB1c2JfZGV2LCAwKTsKIAl1cy0+c2VuZF9idWxrX3BpcGUgPSB1c2Jfc25kYnVsa3BpcGUodXMtPnB1c2JfZGV2LAotCQllcF9vdXQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0spOworCQl1c2JfZW5kcG9pbnRfbnVtKGVwX291dCkpOwogCXVzLT5yZWN2X2J1bGtfcGlwZSA9IHVzYl9yY3ZidWxrcGlwZSh1cy0+cHVzYl9kZXYsIAotCQllcF9pbi0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCXVzYl9lbmRwb2ludF9udW0oZXBfaW4pKTsKIAlpZiAoZXBfaW50KSB7CiAJCXVzLT5yZWN2X2ludHJfcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKHVzLT5wdXNiX2RldiwKLQkJCWVwX2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCQl1c2JfZW5kcG9pbnRfbnVtKGVwX2ludCkpOwogCQl1cy0+ZXBfYkludGVydmFsID0gZXBfaW50LT5iSW50ZXJ2YWw7CiAJfQogCXJldHVybiAwOwpAQCAtMTAxMiwxNyArODQxLDE1IEBACiB9CiAKIAotLyogUHJvYmUgdG8gc2VlIGlmIHdlIGNhbiBkcml2ZSBhIG5ld2x5LWNvbm5lY3RlZCBVU0IgZGV2aWNlICovCi1zdGF0aWMgaW50IHN0b3JhZ2VfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorLyogRmlyc3QgcGFydCBvZiBnZW5lcmFsIFVTQiBtYXNzLXN0b3JhZ2UgcHJvYmluZyAqLworaW50IHVzYl9zdG9yX3Byb2JlMShzdHJ1Y3QgdXNfZGF0YSAqKnB1cywKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwKKwkJc3RydWN0IHVzX3VudXN1YWxfZGV2ICp1bnVzdWFsX2RldikKIHsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCXN0cnVjdCB1c19kYXRhICp1czsKIAlpbnQgcmVzdWx0OwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGg7Ci0KLQlpZiAodXNiX3VzdWFsX2NoZWNrX3R5cGUoaWQsIFVTQl9VU19UWVBFX1NUT1IpKQotCQlyZXR1cm4gLUVOWElPOwogCiAJVVNfREVCVUdQKCJVU0IgTWFzcyBTdG9yYWdlIGRldmljZSBkZXRlY3RlZFxuIik7CiAKQEAgLTEwNDEsNyArODY4LDcgQEAKIAkgKiBBbGxvdyAxNi1ieXRlIENEQnMgYW5kIHRodXMgPiAyVEIKIAkgKi8KIAlob3N0LT5tYXhfY21kX2xlbiA9IDE2OwotCXVzID0gaG9zdF90b191cyhob3N0KTsKKwkqcHVzID0gdXMgPSBob3N0X3RvX3VzKGhvc3QpOwogCW1lbXNldCh1cywgMCwgc2l6ZW9mKHN0cnVjdCB1c19kYXRhKSk7CiAJbXV0ZXhfaW5pdCgmKHVzLT5kZXZfbXV0ZXgpKTsKIAlpbml0X2NvbXBsZXRpb24oJnVzLT5jbW5kX3JlYWR5KTsKQEAgLTEwNTQsMjQgKzg4MSw0NiBAQAogCWlmIChyZXN1bHQpCiAJCWdvdG8gQmFkRGV2aWNlOwogCi0JLyoKLQkgKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgZGVzY3JpcHRvcnMKLQkgKgotCSAqIGlkX2luZGV4IGlzIGNhbGN1bGF0ZWQgaW4gdGhlIGRlY2xhcmF0aW9uIHRvIGJlIHRoZSBpbmRleCBudW1iZXIKLQkgKiBvZiB0aGUgbWF0Y2ggZnJvbSB0aGUgdXNiX2RldmljZV9pZCB0YWJsZSwgc28gd2UgY2FuIGZpbmQgdGhlCi0JICogY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgcHJpdmF0ZSB0YWJsZS4KLQkgKi8KLQlyZXN1bHQgPSBnZXRfZGV2aWNlX2luZm8odXMsIGlkKTsKKwkvKiBHZXQgdGhlIHVudXN1YWxfZGV2cyBlbnRyaWVzIGFuZCB0aGUgZGVzY3JpcHRvcnMgKi8KKwlyZXN1bHQgPSBnZXRfZGV2aWNlX2luZm8odXMsIGlkLCB1bnVzdWFsX2Rldik7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBCYWREZXZpY2U7CiAKLQkvKiBHZXQgdGhlIHRyYW5zcG9ydCwgcHJvdG9jb2wsIGFuZCBwaXBlIHNldHRpbmdzICovCi0JcmVzdWx0ID0gZ2V0X3RyYW5zcG9ydCh1cyk7Ci0JaWYgKHJlc3VsdCkKKwkvKiBHZXQgc3RhbmRhcmQgdHJhbnNwb3J0IGFuZCBwcm90b2NvbCBzZXR0aW5ncyAqLworCWdldF90cmFuc3BvcnQodXMpOworCWdldF9wcm90b2NvbCh1cyk7CisKKwkvKiBHaXZlIHRoZSBjYWxsZXIgYSBjaGFuY2UgdG8gZmlsbCBpbiBzcGVjaWFsaXplZCB0cmFuc3BvcnQKKwkgKiBvciBwcm90b2NvbCBzZXR0aW5ncy4KKwkgKi8KKwlyZXR1cm4gMDsKKworQmFkRGV2aWNlOgorCVVTX0RFQlVHUCgic3RvcmFnZV9wcm9iZSgpIGZhaWxlZFxuIik7CisJcmVsZWFzZV9ldmVyeXRoaW5nKHVzKTsKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3N0b3JfcHJvYmUxKTsKKworLyogU2Vjb25kIHBhcnQgb2YgZ2VuZXJhbCBVU0IgbWFzcy1zdG9yYWdlIHByb2JpbmcgKi8KK2ludCB1c2Jfc3Rvcl9wcm9iZTIoc3RydWN0IHVzX2RhdGEgKnVzKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGg7CisJaW50IHJlc3VsdDsKKworCS8qIE1ha2Ugc3VyZSB0aGUgdHJhbnNwb3J0IGFuZCBwcm90b2NvbCBoYXZlIGJvdGggYmVlbiBzZXQgKi8KKwlpZiAoIXVzLT50cmFuc3BvcnQgfHwgIXVzLT5wcm90b19oYW5kbGVyKSB7CisJCXJlc3VsdCA9IC1FTlhJTzsKIAkJZ290byBCYWREZXZpY2U7Ci0JcmVzdWx0ID0gZ2V0X3Byb3RvY29sKHVzKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIEJhZERldmljZTsKKwl9CisJVVNfREVCVUdQKCJUcmFuc3BvcnQ6ICVzXG4iLCB1cy0+dHJhbnNwb3J0X25hbWUpOworCVVTX0RFQlVHUCgiUHJvdG9jb2w6ICVzXG4iLCB1cy0+cHJvdG9jb2xfbmFtZSk7CisKKwkvKiBmaXggZm9yIHNpbmdsZS1sdW4gZGV2aWNlcyAqLworCWlmICh1cy0+ZmZsYWdzICYgVVNfRkxfU0lOR0xFX0xVTikKKwkJdXMtPm1heF9sdW4gPSAwOworCisJLyogRmluZCB0aGUgZW5kcG9pbnRzIGFuZCBjYWxjdWxhdGUgcGlwZSB2YWx1ZXMgKi8KIAlyZXN1bHQgPSBnZXRfcGlwZXModXMpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gQmFkRGV2aWNlOwpAQCAtMTA4MCw3ICs5MjksNyBAQAogCXJlc3VsdCA9IHVzYl9zdG9yX2FjcXVpcmVfcmVzb3VyY2VzKHVzKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIEJhZERldmljZTsKLQlyZXN1bHQgPSBzY3NpX2FkZF9ob3N0KGhvc3QsICZpbnRmLT5kZXYpOworCXJlc3VsdCA9IHNjc2lfYWRkX2hvc3QodXNfdG9faG9zdCh1cyksICZ1cy0+cHVzYl9pbnRmLT5kZXYpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBVU0JfU1RPUkFHRQogCQkJIlVuYWJsZSB0byBhZGQgdGhlIHNjc2kgaG9zdFxuIik7CkBAIC0xMTA4LDkgKzk1NywxMCBAQAogCXJlbGVhc2VfZXZlcnl0aGluZyh1cyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yX3Byb2JlMik7CiAKLS8qIEhhbmRsZSBhIGRpc2Nvbm5lY3QgZXZlbnQgZnJvbSB0aGUgVVNCIGNvcmUgKi8KLXN0YXRpYyB2b2lkIHN0b3JhZ2VfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKKy8qIEhhbmRsZSBhIFVTQiBtYXNzLXN0b3JhZ2UgZGlzY29ubmVjdCAqLwordm9pZCB1c2Jfc3Rvcl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCB1c19kYXRhICp1cyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAKQEAgLTExMTgsNiArOTY4LDQyIEBACiAJcXVpZXNjZV9hbmRfcmVtb3ZlX2hvc3QodXMpOwogCXJlbGVhc2VfZXZlcnl0aGluZyh1cyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc3Rvcl9kaXNjb25uZWN0KTsKKworLyogVGhlIG1haW4gcHJvYmUgcm91dGluZSBmb3Igc3RhbmRhcmQgZGV2aWNlcyAqLworc3RhdGljIGludCBzdG9yYWdlX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNfZGF0YSAqdXM7CisJaW50IHJlc3VsdDsKKworCS8qCisJICogSWYgbGlidXN1YWwgaXMgY29uZmlndXJlZCwgbGV0IGl0IGRlY2lkZSB3aGV0aGVyIGEgc3RhbmRhcmQKKwkgKiBkZXZpY2Ugc2hvdWxkIGJlIGhhbmRsZWQgYnkgdXNiLXN0b3JhZ2Ugb3IgYnkgdWIuCisJICogSWYgdGhlIGRldmljZSBpc24ndCBzdGFuZGFyZCAoaXMgaGFuZGxlZCBieSBhIHN1YmRyaXZlcgorCSAqIG1vZHVsZSkgdGhlbiBkb24ndCBhY2NlcHQgaXQuCisJICovCisJaWYgKHVzYl91c3VhbF9jaGVja190eXBlKGlkLCBVU0JfVVNfVFlQRV9TVE9SKSB8fAorCQkJdXNiX3VzdWFsX2lnbm9yZV9kZXZpY2UoaW50ZikpCisJCXJldHVybiAtRU5YSU87CisKKwkvKgorCSAqIENhbGwgdGhlIGdlbmVyYWwgcHJvYmUgcHJvY2VkdXJlcy4KKwkgKgorCSAqIFRoZSB1bnVzdWFsX2Rldl9saXN0IGFycmF5IGlzIHBhcmFsbGVsIHRvIHRoZSB1c2Jfc3RvcmFnZV91c2JfaWRzCisJICogdGFibGUsIHNvIHdlIHVzZSB0aGUgaW5kZXggb2YgdGhlIGlkIGVudHJ5IHRvIGZpbmQgdGhlCisJICogY29ycmVzcG9uZGluZyB1bnVzdWFsX2RldnMgZW50cnkuCisJICovCisJcmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKCZ1cywgaW50ZiwgaWQsCisJCQkoaWQgLSB1c2Jfc3RvcmFnZV91c2JfaWRzKSArIHVzX3VudXN1YWxfZGV2X2xpc3QpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisKKwkvKiBObyBzcGVjaWFsIHRyYW5zcG9ydCBvciBwcm90b2NvbCBzZXR0aW5ncyBpbiB0aGUgbWFpbiBtb2R1bGUgKi8KKworCXJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7CisJcmV0dXJuIHJlc3VsdDsKK30KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBJbml0aWFsaXphdGlvbiBhbmQgcmVnaXN0cmF0aW9uCkBAIC0xMTI2LDE1ICsxMDEyLDEzIEBACiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdXNiX3N0b3JhZ2VfZHJpdmVyID0gewogCS5uYW1lID0JCSJ1c2Itc3RvcmFnZSIsCiAJLnByb2JlID0Jc3RvcmFnZV9wcm9iZSwKLQkuZGlzY29ubmVjdCA9CXN0b3JhZ2VfZGlzY29ubmVjdCwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZCA9CXN0b3JhZ2Vfc3VzcGVuZCwKLQkucmVzdW1lID0Jc3RvcmFnZV9yZXN1bWUsCi0JLnJlc2V0X3Jlc3VtZSA9CXN0b3JhZ2VfcmVzZXRfcmVzdW1lLAotI2VuZGlmCi0JLnByZV9yZXNldCA9CXN0b3JhZ2VfcHJlX3Jlc2V0LAotCS5wb3N0X3Jlc2V0ID0Jc3RvcmFnZV9wb3N0X3Jlc2V0LAotCS5pZF90YWJsZSA9CXN0b3JhZ2VfdXNiX2lkcywKKwkuZGlzY29ubmVjdCA9CXVzYl9zdG9yX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgPQl1c2Jfc3Rvcl9zdXNwZW5kLAorCS5yZXN1bWUgPQl1c2Jfc3Rvcl9yZXN1bWUsCisJLnJlc2V0X3Jlc3VtZSA9CXVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSwKKwkucHJlX3Jlc2V0ID0JdXNiX3N0b3JfcHJlX3Jlc2V0LAorCS5wb3N0X3Jlc2V0ID0JdXNiX3N0b3JfcG9zdF9yZXNldCwKKwkuaWRfdGFibGUgPQl1c2Jfc3RvcmFnZV91c2JfaWRzLAogCS5zb2Z0X3VuYmluZCA9CTEsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaAppbmRleCA2NWU2NzRlLi4yNjA5ZWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmgKQEAgLTE3Nyw0ICsxNzcsMjUgQEAKICNkZWZpbmUgc2NzaV91bmxvY2soaG9zdCkJc3Bpbl91bmxvY2tfaXJxKGhvc3QtPmhvc3RfbG9jaykKICNkZWZpbmUgc2NzaV9sb2NrKGhvc3QpCQlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jaykKIAorLyogR2VuZXJhbCByb3V0aW5lcyBwcm92aWRlZCBieSB0aGUgdXNiLXN0b3JhZ2Ugc3RhbmRhcmQgY29yZSAqLworI2lmZGVmIENPTkZJR19QTQorZXh0ZXJuIGludCB1c2Jfc3Rvcl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpOworZXh0ZXJuIGludCB1c2Jfc3Rvcl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfcmVzZXRfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSk7CisjZWxzZQorI2RlZmluZSB1c2Jfc3Rvcl9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgdXNiX3N0b3JfcmVzdW1lCQlOVUxMCisjZGVmaW5lIHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZQlOVUxMCisjZW5kaWYKKworZXh0ZXJuIGludCB1c2Jfc3Rvcl9wcmVfcmVzZXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKK2V4dGVybiBpbnQgdXNiX3N0b3JfcG9zdF9yZXNldChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworCitleHRlcm4gaW50IHVzYl9zdG9yX3Byb2JlMShzdHJ1Y3QgdXNfZGF0YSAqKnB1cywKKwkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwKKwkJc3RydWN0IHVzX3VudXN1YWxfZGV2ICp1bnVzdWFsX2Rldik7CitleHRlcm4gaW50IHVzYl9zdG9yX3Byb2JlMihzdHJ1Y3QgdXNfZGF0YSAqdXMpOworZXh0ZXJuIHZvaWQgdXNiX3N0b3JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c3VhbC10YWJsZXMuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY4YmRlNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qIERyaXZlciBmb3IgVVNCIE1hc3MgU3RvcmFnZSBkZXZpY2VzCisgKiBVc3VhbCBUYWJsZXMgRmlsZSBmb3IgdXNiLXN0b3JhZ2UgYW5kIGxpYnVzdWFsCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFsYW4gU3Rlcm4gKHN0ZXJuQHJvd2xhbmQuaGFydmFyZC5lZHUpCisgKgorICogUGxlYXNlIHNlZSBodHRwOi8vd3d3Lm9uZS1leWVkLWFsaWVuLm5ldC9+bWRoYXJtL2xpbnV4LXVzYiBmb3IgbW9yZQorICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYl91c3VhbC5oPgorCisKKy8qCisgKiBUaGUgdGFibGUgb2YgZGV2aWNlcworICovCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7IFVTQl9ERVZJQ0VfVkVSKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgpLCBcCisgIC5kcml2ZXJfaW5mbyA9IChmbGFncyl8KFVTQl9VU19UWVBFX1NUT1I8PDI0KSB9CisKKyNkZWZpbmUgQ09NUExJQU5UX0RFVihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4LCBcCisJCSAgICB2ZW5kb3JOYW1lLCBwcm9kdWN0TmFtZSwgdXNlUHJvdG9jb2wsIHVzZVRyYW5zcG9ydCwgXAorCQkgICAgaW5pdEZ1bmN0aW9uLCBmbGFncykgXAoreyBVU0JfREVWSUNFX1ZFUihpZF92ZW5kb3IsIGlkX3Byb2R1Y3QsIGJjZERldmljZU1pbiwgYmNkRGV2aWNlTWF4KSwgXAorICAuZHJpdmVyX2luZm8gPSAoZmxhZ3MpIH0KKworI2RlZmluZSBVU1VBTF9ERVYodXNlUHJvdG8sIHVzZVRyYW5zLCB1c2VUeXBlKSBcCit7IFVTQl9JTlRFUkZBQ0VfSU5GTyhVU0JfQ0xBU1NfTUFTU19TVE9SQUdFLCB1c2VQcm90bywgdXNlVHJhbnMpLCBcCisgIC5kcml2ZXJfaW5mbyA9ICgodXNlVHlwZSk8PDI0KSB9CisKK3N0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9zdG9yYWdlX3VzYl9pZHNbXSA9IHsKKyMJaW5jbHVkZSAidW51c3VhbF9kZXZzLmgiCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9zdG9yYWdlX3VzYl9pZHMpOworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdXNiX3N0b3JhZ2VfdXNiX2lkcyk7CisKKyN1bmRlZiBVTlVTVUFMX0RFVgorI3VuZGVmIENPTVBMSUFOVF9ERVYKKyN1bmRlZiBVU1VBTF9ERVYKKworCisvKgorICogVGhlIHRhYmxlIG9mIGRldmljZXMgdG8gaWdub3JlCisgKi8KK3N0cnVjdCBpZ25vcmVfZW50cnkgeworCXUxNgl2aWQsIHBpZCwgYmNkbWluLCBiY2RtYXg7Cit9OworCisjZGVmaW5lIFVOVVNVQUxfREVWKGlkX3ZlbmRvciwgaWRfcHJvZHVjdCwgYmNkRGV2aWNlTWluLCBiY2REZXZpY2VNYXgsIFwKKwkJICAgIHZlbmRvck5hbWUsIHByb2R1Y3ROYW1lLCB1c2VQcm90b2NvbCwgdXNlVHJhbnNwb3J0LCBcCisJCSAgICBpbml0RnVuY3Rpb24sIGZsYWdzKSBcCit7CQkJCQlcCisJLnZpZAk9IGlkX3ZlbmRvciwJCVwKKwkucGlkIAk9IGlkX3Byb2R1Y3QsCQlcCisJLmJjZG1pbgk9IGJjZERldmljZU1pbiwJCVwKKwkuYmNkbWF4ID0gYmNkRGV2aWNlTWF4LAkJXAorfQorCitzdGF0aWMgc3RydWN0IGlnbm9yZV9lbnRyeSBpZ25vcmVfaWRzW10gPSB7CisjCWluY2x1ZGUgInVudXN1YWxfYWxhdWRhLmgiCisjCWluY2x1ZGUgInVudXN1YWxfY3lwcmVzcy5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX2RhdGFmYWIuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9mcmVlY29tLmgiCisjCWluY2x1ZGUgInVudXN1YWxfaXNkMjAwLmgiCisjCWluY2x1ZGUgInVudXN1YWxfanVtcHNob3QuaCIKKyMJaW5jbHVkZSAidW51c3VhbF9rYXJtYS5oIgorIwlpbmNsdWRlICJ1bnVzdWFsX29uZXRvdWNoLmgiCisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjA5LmgiCisjCWluY2x1ZGUgInVudXN1YWxfc2RkcjU1LmgiCisjCWluY2x1ZGUgInVudXN1YWxfdXNiYXQuaCIKKwl7IH0JCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCisjdW5kZWYgVU5VU1VBTF9ERVYKKworCisvKiBSZXR1cm4gYW4gZXJyb3IgaWYgYSBkZXZpY2UgaXMgaW4gdGhlIGlnbm9yZV9pZHMgbGlzdCAqLworaW50IHVzYl91c3VhbF9pZ25vcmVfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXVuc2lnbmVkIHZpZCwgcGlkLCBiY2Q7CisJc3RydWN0IGlnbm9yZV9lbnRyeSAqcDsKKworCXVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXZpZCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpOworCXBpZCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwliY2QgPSBsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSk7CisKKwlmb3IgKHAgPSBpZ25vcmVfaWRzOyBwLT52aWQ7ICsrcCkgeworCQlpZiAocC0+dmlkID09IHZpZCAmJiBwLT5waWQgPT0gcGlkICYmCisJCQkJcC0+YmNkbWluIDw9IGJjZCAmJiBwLT5iY2RtYXggPj0gYmNkKQorCQkJcmV0dXJuIC1FTlhJTzsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfdXN1YWxfaWdub3JlX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCmluZGV4IGJlNzYwODQuLjYwYmE2MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCkBAIC00MTAsNyArNDEwLDkgQEAKIAl9CiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCi0JaW5mbygiVVNCIFNrZWxldG9uIGRldmljZSBub3cgYXR0YWNoZWQgdG8gVVNCU2tlbC0lZCIsIGludGVyZmFjZS0+bWlub3IpOworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwKKwkJICJVU0IgU2tlbGV0b24gZGV2aWNlIG5vdyBhdHRhY2hlZCB0byBVU0JTa2VsLSVkIiwKKwkJIGludGVyZmFjZS0+bWlub3IpOwogCXJldHVybiAwOwogCiBlcnJvcjoKQEAgLTQ0MSw3ICs0NDMsNyBAQAogCS8qIGRlY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgKi8KIAlrcmVmX3B1dCgmZGV2LT5rcmVmLCBza2VsX2RlbGV0ZSk7CiAKLQlpbmZvKCJVU0IgU2tlbGV0b24gIyVkIG5vdyBkaXNjb25uZWN0ZWQiLCBtaW5vcik7CisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIFNrZWxldG9uICMlZCBub3cgZGlzY29ubmVjdGVkIiwgbWlub3IpOwogfQogCiBzdGF0aWMgdm9pZCBza2VsX2RyYXdfZG93bihzdHJ1Y3QgdXNiX3NrZWwgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYwppbmRleCAxMzM1Y2JlLi4yNWVhZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvY2JhZi5jCkBAIC02MzgsOCArNjM4LDcgQEAKIAl1c2JfcHV0X2ludGYoaWZhY2UpOwogCWtmcmVlKGNiYWYtPmJ1ZmZlcik7CiAJLyogcGFyYW5vaWE6IGNsZWFuIHVwIGNyeXB0byBrZXlzICovCi0JbWVtc2V0KGNiYWYsIDAsIHNpemVvZigqY2JhZikpOwotCWtmcmVlKGNiYWYpOworCWt6ZnJlZShjYmFmKTsKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNiYWZfaWRfdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYwppbmRleCA4ZTE4MTQxLi5mMGFhYzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCkBAIC04ODksNiArODg5LDggQEAKIAlpZiAodXNiX2Rldi0+d3VzYiA9PSAwIHx8IHVzYl9kZXYtPmRldm51bSA9PSAxKQogCQlyZXR1cm47CQkvKiBza2lwIG5vbiB3dXNiIGFuZCB3dXNiIFJIcyAqLwogCisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodXNiX2RldiwgVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRCk7CisKIAl3dXNiaGMgPSB3dXNiaGNfZ2V0X2J5X3VzYl9kZXYodXNiX2Rldik7CiAJaWYgKHd1c2JoYyA9PSBOVUxMKQogCQlnb3RvIGVycm9yX25vZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3NlY3VyaXR5LmMKaW5kZXggZjRhYTI4ZS4uODExOGRiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvc2VjdXJpdHkuYworKysgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9zZWN1cml0eS5jCkBAIC0zMTIsNiArMzEyLDcgQEAKIAlyZXN1bHQgPSB3dXNiX3NldF9kZXZfYWRkcih3dXNiaGMsIHd1c2JfZGV2LCAwKTsKIAlpZiAocmVzdWx0IDwgMCkKIAkJZ290byBlcnJvcl9hZGRyMDsKKwl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1c2JfZGV2LCBVU0JfU1RBVEVfREVGQVVMVCk7CiAJdXNiX2VwMF9yZWluaXQodXNiX2Rldik7CiAKIAkvKiBTZXQgbmV3IChhdXRoZW50aWNhdGVkKSBhZGRyZXNzLiAqLwpAQCAtMzI3LDYgKzMyOCw3IEBACiAJcmVzdWx0ID0gd3VzYl9zZXRfZGV2X2FkZHIod3VzYmhjLCB3dXNiX2RldiwgbmV3X2FkZHJlc3MpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGVycm9yX2FkZHI7CisJdXNiX3NldF9kZXZpY2Vfc3RhdGUodXNiX2RldiwgVVNCX1NUQVRFX0FERFJFU1MpOwogCXVzYl9lcDBfcmVpbml0KHVzYl9kZXYpOwogCXVzYl9kZXYtPmF1dGhlbnRpY2F0ZWQgPSAxOwogZXJyb3JfYWRkcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCBmYjE5ODAzLi40MWMyN2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC0zOTcsNyArMzk3LDcgQEAKIAogY29uZmlnIEZCX0lNWAogCXRyaXN0YXRlICJNb3Rvcm9sYSBpLk1YIExDRCBzdXBwb3J0IgotCWRlcGVuZHMgb24gRkIgJiYgQVJNICYmIEFSQ0hfSU1YCisJZGVwZW5kcyBvbiBGQiAmJiAoQVJDSF9JTVggfHwgQVJDSF9NWDIpCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVApAQCAtMjEyMCwxNiArMjEyMCwzMCBAQAogCSAgdGhlIGJvb3Rsb2FkZXIuCiAKIGNvbmZpZyBGQl9NWDMKLSAgICAgICB0cmlzdGF0ZSAiTVgzIEZyYW1lYnVmZmVyIHN1cHBvcnQiCi0gICAgICAgZGVwZW5kcyBvbiBGQiAmJiBNWDNfSVBVCi0gICAgICAgc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAotICAgICAgIHNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKLSAgICAgICBzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAotICAgICAgIGRlZmF1bHQgeQotICAgICAgIGhlbHAKLSAgICAgICAgIFRoaXMgaXMgYSBmcmFtZWJ1ZmZlciBkZXZpY2UgZm9yIHRoZSBpLk1YMzEgTENEIENvbnRyb2xsZXIuIFNvCi0gICAgICAgICBmYXIgb25seSBzeW5jaHJvbm91cyBkaXNwbGF5cyBhcmUgc3VwcG9ydGVkLiBJZiB5b3UgcGxhbiB0byB1c2UKLSAgICAgICAgIGFuIExDRCBkaXNwbGF5IHdpdGggeW91ciBpLk1YMzEgc3lzdGVtLCBzYXkgWSBoZXJlLgorCXRyaXN0YXRlICJNWDMgRnJhbWVidWZmZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEZCICYmIE1YM19JUFUKKwlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQorCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBpcyBhIGZyYW1lYnVmZmVyIGRldmljZSBmb3IgdGhlIGkuTVgzMSBMQ0QgQ29udHJvbGxlci4gU28KKwkgIGZhciBvbmx5IHN5bmNocm9ub3VzIGRpc3BsYXlzIGFyZSBzdXBwb3J0ZWQuIElmIHlvdSBwbGFuIHRvIHVzZQorCSAgYW4gTENEIGRpc3BsYXkgd2l0aCB5b3VyIGkuTVgzMSBzeXN0ZW0sIHNheSBZIGhlcmUuCisKK2NvbmZpZyBGQl9CUk9BRFNIRUVUCisJdHJpc3RhdGUgIkUtSW5rIEJyb2Fkc2hlZXQvRXBzb24gUzFEMTM1MjEgY29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkIKKwlzZWxlY3QgRkJfU1lTX0ZJTExSRUNUCisJc2VsZWN0IEZCX1NZU19DT1BZQVJFQQorCXNlbGVjdCBGQl9TWVNfSU1BR0VCTElUCisJc2VsZWN0IEZCX1NZU19GT1BTCisJc2VsZWN0IEZCX0RFRkVSUkVEX0lPCisJaGVscAorCSAgVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciB0aGUgRS1JbmsgQnJvYWRzaGVldAorCSAgY29udHJvbGxlci4gVGhlIHJlbGVhc2UgbmFtZSBmb3IgdGhpcyBkZXZpY2Ugd2FzIEVwc29uIFMxRDEzNTIxCisJICBhbmQgY291bGQgYWxzbyBoYXZlIGJlZW4gY2FsbGVkIGJ5IG90aGVyIG5hbWVzIHdoZW4gY291cGxlZCB3aXRoCisJICBhIGJyaWRnZSBhZGFwdGVyLgogCiBzb3VyY2UgImRyaXZlcnMvdmlkZW8vb21hcC9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQppbmRleCAyYTk5OGNhLi5iYjI2NWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKQEAgLTEwNiw2ICsxMDYsNyBAQAogb2JqLSQoQ09ORklHX0ZCX1BNQUdCX0IpCSAgKz0gcG1hZ2ItYi1mYi5vCiBvYmotJChDT05GSUdfRkJfTUFYSU5FKQkJICArPSBtYXhpbmVmYi5vCiBvYmotJChDT05GSUdfRkJfTUVUUk9OT01FKSAgICAgICAgKz0gbWV0cm9ub21lZmIubworb2JqLSQoQ09ORklHX0ZCX0JST0FEU0hFRVQpICAgICAgICs9IGJyb2Fkc2hlZXRmYi5vCiBvYmotJChDT05GSUdfRkJfUzFEMTNYWFgpCSAgKz0gczFkMTN4eHhmYi5vCiBvYmotJChDT05GSUdfRkJfU0g3NzYwKQkJICArPSBzaDc3NjBmYi5vCiBvYmotJChDT05GSUdfRkJfSU1YKSAgICAgICAgICAgICAgKz0gaW14ZmIubwpAQCAtMTMyLDcgKzEzMyw3IEBACiBvYmotJChDT05GSUdfRkJfT0YpICAgICAgICAgICAgICAgKz0gb2ZmYi5vCiBvYmotJChDT05GSUdfRkJfQkY1NFhfTFEwNDMpCSAgKz0gYmY1NHgtbHEwNDNmYi5vCiBvYmotJChDT05GSUdfRkJfQkZJTl9UMzUwTUNRQikJICArPSBiZmluLXQzNTBtY3FiLWZiLm8KLW9iai0kKENPTkZJR19GQl9NWDMpICAgICAgICAgICAgICArPSBteDNmYi5vCitvYmotJChDT05GSUdfRkJfTVgzKQkJICArPSBteDNmYi5vCiAKICMgdGhlIHRlc3QgZnJhbWVidWZmZXIgaXMgbGFzdAogb2JqLSQoQ09ORklHX0ZCX1ZJUlRVQUwpICAgICAgICAgICs9IHZmYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCmluZGV4IDYxYzNkM2YuLjY5OTVmZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKaW5kZXggODE2MDNmOC4uYzZkN2NjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKQEAgLTI1MDcsNiArMjUwNywyNSBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BQQ19PRiAqLwogCitzdGF0aWMgdm9pZCByYWRlb25mYl93aGFja19wb3dlcl9zdGF0ZShzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIHBjaV9wb3dlcl90IHN0YXRlKQoreworCXUxNiBwd3JfY21kOworCisJZm9yICg7OykgeworCQlwY2lfcmVhZF9jb25maWdfd29yZChyaW5mby0+cGRldiwKKwkJCQkgICAgIHJpbmZvLT5wbV9yZWcrUENJX1BNX0NUUkwsCisJCQkJICAgICAmcHdyX2NtZCk7CisJCWlmIChwd3JfY21kICYgMikKKwkJCWJyZWFrOworCQlwd3JfY21kID0gKHB3cl9jbWQgJiB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSykgfCAyOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocmluZm8tPnBkZXYsCisJCQkJICAgICAgcmluZm8tPnBtX3JlZytQQ0lfUE1fQ1RSTCwKKwkJCQkgICAgICBwd3JfY21kKTsKKwkJbXNsZWVwKDUwMCk7CisJfQorCXJpbmZvLT5wZGV2LT5jdXJyZW50X3N0YXRlID0gc3RhdGU7Cit9CisKIHN0YXRpYyB2b2lkIHJhZGVvbl9zZXRfc3VzcGVuZChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBzdXNwZW5kKQogewogCXUzMiB0bXA7CkBAIC0yNTU4LDYgKzI1NzcsMTEgQEAKIAkJLyogU3dpdGNoIFBDSSBwb3dlciBtYW5hZ2VtZW50IHRvIEQyLiAqLwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocmluZm8tPnBkZXYpOwogCQlwY2lfc2F2ZV9zdGF0ZShyaW5mby0+cGRldik7CisJCS8qIFRoZSBjaGlwIHNlZW1zIHRvIG5lZWQgdXMgdG8gd2hhY2sgdGhlIFBNIHJlZ2lzdGVyCisJCSAqIHJlcGVhdGVkbHkgdW50aWwgaXQgc3RpY2tzLiBXZSBkbyB0aGF0IC1wcmlvci0gdG8KKwkJICogY2FsbGluZyBwY2lfc2V0X3Bvd2VyX3N0YXRlKCkKKwkJICovCisJCXJhZGVvbmZiX3doYWNrX3Bvd2VyX3N0YXRlKHJpbmZvLCBQQ0lfRDIpOwogCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHJpbmZvLT5wZGV2LCBQQ0lfRDIpOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJyYWRlb25mYiAoJXMpOiBzd2l0Y2hpbmcgdG8gRDAgc3RhdGUuLi5cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKaW5kZXggNjJiZDQ0NC4uMzc4ZjI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAKIC8qIEFVMTEwMCBMQ0QgY29udHJvbGxlciBkZXZpY2UgZHJpdmVyICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGF1MTEwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBhdTExMDBmYl9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3NfcmVzOwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAKIAlmYmRldi0+cGFuZWwgPSAma25vd25fbGNkX3BhbmVsc1tkcnZfaW5mby5wYW5lbF9pZHhdOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgKHZvaWQqKWZiZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICh2b2lkICopZmJkZXYpOwogCiAJLyogQWxsb2NhdGUgcmVnaW9uIGZvciBvdXIgcmVnaXN0ZXJzIGFuZCBtYXAgdGhlbSAqLwogCWlmICghKHJlZ3NfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHRvX3BsYXRmb3JtX2RldmljZShkZXYpLApAQCAtNTgzLDE5ICs1ODMsMTkgQEAKIAkJZmJfZGVhbGxvY19jbWFwKCZmYmRldi0+aW5mby5jbWFwKTsKIAl9CiAJa2ZyZWUoZmJkZXYpOwotCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MTEwMGZiX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGF1MTEwMGZiX2Rydl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gTlVMTDsKIAogCWlmICghZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWZiZGV2ID0gKHN0cnVjdCBhdTExMDBmYl9kZXZpY2UqKSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlmYmRldiA9IChzdHJ1Y3QgYXUxMTAwZmJfZGV2aWNlICopIHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAKICNpZiAhZGVmaW5lZChDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSkgJiYgZGVmaW5lZChDT05GSUdfTE9HTykKIAlhdTExMDBmYl9mYl9ibGFuayhWRVNBX1BPV0VSRE9XTiwgJmZiZGV2LT5pbmZvKTsKQEAgLTYyMCw5ICs2MjAsOSBAQAogc3RhdGljIHUzMiBzeXNfY2xrc3JjOwogc3RhdGljIHN0cnVjdCBhdTExMDBmYl9yZWdzIGZicmVnczsKIAotaW50IGF1MTEwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoraW50IGF1MTEwMGZiX2Rydl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFmYmRldikKIAkJcmV0dXJuIDA7CkBAIC02NDEsOSArNjQxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MTEwMGZiX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGF1MTEwMGZiX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF1MTEwMGZiX2RldmljZSAqZmJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJaWYgKCFmYmRldikKIAkJcmV0dXJuIDA7CkBAIC02NjMsMTAgKzY2MywxMSBAQAogI2RlZmluZSBhdTExMDBmYl9kcnZfcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXUxMTAwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTExMDAtbGNkIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXUxMTAwZmJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCQk9ICJhdTExMDAtbGNkIiwKKwkJLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCisJfSwKIAkucHJvYmUJCT0gYXUxMTAwZmJfZHJ2X3Byb2JlLAogICAgICAgICAucmVtb3ZlCQk9IGF1MTEwMGZiX2Rydl9yZW1vdmUsCiAJLnN1c3BlbmQJPSBhdTExMDBmYl9kcnZfc3VzcGVuZCwKQEAgLTc1MywxMiArNzU0LDEyIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmYXUxMTAwZmJfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZhdTExMDBmYl9kcml2ZXIpOwogfQogCiB2b2lkIF9fZXhpdCBhdTExMDBmYl9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTEwMGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTEwMGZiX2RyaXZlcik7CiAKIAlrZnJlZShkcnZfaW5mby5vcHRfbW9kZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F1MTIwMGZiLmMKaW5kZXggMDNlNTdlZi4uMGQ5NmYxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdTEyMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXUxMjAwZmIuYwpAQCAtMTYyMiw3ICsxNjIyLDcgQEAKIAogLyogQVUxMjAwIExDRCBjb250cm9sbGVyIGRldmljZSBkcml2ZXIgKi8KIAotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTEyMDBmYl9kZXZpY2UgKmZiZGV2OwogCXVuc2lnbmVkIGxvbmcgcGFnZTsKQEAgLTE2NDUsNyArMTY0NSw3IEBACiAJCS8qIEFsbG9jYXRlIHRoZSBmcmFtZWJ1ZmZlciB0byB0aGUgbWF4aW11bSBzY3JlZW4gc2l6ZSAqLwogCQlmYmRldi0+ZmJfbGVuID0gKHdpbi0+d1twbGFuZV0ueHJlcyAqIHdpbi0+d1twbGFuZV0ueXJlcyAqIGJwcCkgLyA4OwogCi0JCWZiZGV2LT5mYl9tZW0gPSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZGV2LAorCQlmYmRldi0+ZmJfbWVtID0gZG1hX2FsbG9jX25vbmNvaGVyZW50KCZkZXYtPmRldiwKIAkJCQlQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAogCQkJCSZmYmRldi0+ZmJfcGh5cywgR0ZQX0tFUk5FTCk7CiAJCWlmICghZmJkZXYtPmZiX21lbSkgewpAQCAtMTcxNSw3ICsxNzE1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGF1MTIwMGZiX2Rydl9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgYXUxMjAwZmJfZGV2aWNlICpmYmRldjsKIAlpbnQgcGxhbmU7CkBAIC0xNzMzLDcgKzE3MzMsOCBAQAogCQkvKiBDbGVhbiB1cCBhbGwgcHJvYmUgZGF0YSAqLwogCQl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYmRldi0+ZmJfaW5mbyk7CiAJCWlmIChmYmRldi0+ZmJfbWVtKQotCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoZGV2LCBQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAorCQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQoJmRldi0+ZGV2LAorCQkJCQlQQUdFX0FMSUdOKGZiZGV2LT5mYl9sZW4pLAogCQkJCQlmYmRldi0+ZmJfbWVtLCBmYmRldi0+ZmJfcGh5cyk7CiAJCWlmIChmYmRldi0+ZmJfaW5mby5jbWFwLmxlbiAhPSAwKQogCQkJZmJfZGVhbGxvY19jbWFwKCZmYmRldi0+ZmJfaW5mby5jbWFwKTsKQEAgLTE3NDcsMjIgKzE3NDgsMjQgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBhdTEyMDBmYl9kcnZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSwgdTMyIGxldmVsKQorc3RhdGljIGludCBhdTEyMDBmYl9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHUzMiBzdGF0ZSkKIHsKIAkvKiBUT0RPICovCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBsZXZlbCkKK3N0YXRpYyBpbnQgYXUxMjAwZmJfZHJ2X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJLyogVE9ETyAqLwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgYXUxMjAwZmJfZHJpdmVyID0gewotCS5uYW1lCQk9ICJhdTEyMDAtbGNkIiwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF1MTIwMGZiX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAiYXUxMjAwLWxjZCIsCisJCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IGF1MTIwMGZiX2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IGF1MTIwMGZiX2Rydl9yZW1vdmUsCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xOTA2LDEyICsxOTA5LDEyIEBACiAJCXByaW50ayhLRVJOX0lORk8gIlBvd2VyIG1hbmFnZW1lbnQgZGV2aWNlIGVudHJ5IGZvciB0aGUgYXUxMjAwZmIgbG9hZGVkLlxuIik7CiAJI2VuZGlmCiAKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZhdTEyMDBmYl9kcml2ZXIpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhdTEyMDBmYl9jbGVhbnVwKHZvaWQpCiB7Ci0JZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF1MTIwMGZiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGF1MTIwMGZiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA5Y2I5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMKQEAgLTAsMCArMSw1NjggQEAKKy8qCisgKiBicm9hZHNoZWV0ZmIuYyAtLSBGQiBkcml2ZXIgZm9yIEUtSW5rIEJyb2Fkc2hlZXQgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgSmF5YSBLdW1hcgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIExheW91dCBpcyBiYXNlZCBvbiBza2VsZXRvbmZiLmMgYnkgSmFtZXMgU2ltbW9ucyBhbmQgR2VlcnQgVXl0dGVyaG9ldmVuLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIHdyaXR0ZW4gdG8gYmUgdXNlZCB3aXRoIHRoZSBCcm9hZHNoZWV0IGRpc3BsYXkgY29udHJvbGxlci4KKyAqCisgKiBJdCBpcyBpbnRlbmRlZCB0byBiZSBhcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQuIEEgYm9hcmQgc3BlY2lmaWMgZHJpdmVyCisgKiBtdXN0IGJlIHVzZWQgdG8gcGVyZm9ybSBhbGwgdGhlIHBoeXNpY2FsIElPIGludGVyYWN0aW9ucy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgPHZpZGVvL2Jyb2Fkc2hlZXRmYi5oPgorCisvKiBEaXNwbGF5IHNwZWNpZmljIGluZm9ybWF0aW9uICovCisjZGVmaW5lIERQWV9XIDgwMAorI2RlZmluZSBEUFlfSCA2MDAKKworc3RhdGljIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyBicm9hZHNoZWV0ZmJfZml4IF9fZGV2aW5pdGRhdGEgPSB7CisJLmlkID0JCSJicm9hZHNoZWV0ZmIiLAorCS50eXBlID0JCUZCX1RZUEVfUEFDS0VEX1BJWEVMUywKKwkudmlzdWFsID0JRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUiwKKwkueHBhbnN0ZXAgPQkwLAorCS55cGFuc3RlcCA9CTAsCisJLnl3cmFwc3RlcCA9CTAsCisJLmxpbmVfbGVuZ3RoID0JRFBZX1csCisJLmFjY2VsID0JRkJfQUNDRUxfTk9ORSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gYnJvYWRzaGVldGZiX3ZhciBfX2RldmluaXRkYXRhID0geworCS54cmVzCQk9IERQWV9XLAorCS55cmVzCQk9IERQWV9ILAorCS54cmVzX3ZpcnR1YWwJPSBEUFlfVywKKwkueXJlc192aXJ0dWFsCT0gRFBZX0gsCisJLmJpdHNfcGVyX3BpeGVsCT0gOCwKKwkuZ3JheXNjYWxlCT0gMSwKKwkucmVkID0JCXsgMCwgNCwgMCB9LAorCS5ncmVlbiA9CXsgMCwgNCwgMCB9LAorCS5ibHVlID0JCXsgMCwgNCwgMCB9LAorCS50cmFuc3AgPQl7IDAsIDAsIDAgfSwKK307CisKKy8qIG1haW4gYnJvYWRzaGVldGZiIGZ1bmN0aW9ucyAqLworc3RhdGljIHZvaWQgYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBkYXRhKQoreworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19XUiwgMCk7CisJcGFyLT5ib2FyZC0+c2V0X2hkYihwYXIsIGRhdGEpOworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19XUiwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRfaXNzdWVfY21kKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBkYXRhKQoreworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19EQywgMCk7CisJYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHBhciwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBkYXRhKQoreworCXBhci0+Ym9hcmQtPndhaXRfZm9yX3JkeShwYXIpOworCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAwKTsKKwlicm9hZHNoZWV0X2lzc3VlX2NtZChwYXIsIGRhdGEpOworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19EQywgMSk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAxKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3Moc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IGNtZCwKKwkJCQkJaW50IGFyZ2MsIHUxNiAqYXJndikKK3sKKwlpbnQgaTsKKworCXBhci0+Ym9hcmQtPndhaXRfZm9yX3JkeShwYXIpOworCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAwKTsKKwlicm9hZHNoZWV0X2lzc3VlX2NtZChwYXIsIGNtZCk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0RDLCAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCWJyb2Fkc2hlZXRfaXNzdWVfZGF0YShwYXIsIGFyZ3ZbaV0pOworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19DUywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRfYnVyc3Rfd3JpdGUoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgaW50IHNpemUsCisJCQkJCXUxNiAqZGF0YSkKK3sKKwlpbnQgaTsKKwl1MTYgdG1wOworCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAwKTsKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfREMsIDEpOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfV1IsIDApOworCQl0bXAgPSAoZGF0YVtpXSAmIDB4MEYpIDw8IDQ7CisJCXRtcCB8PSAoZGF0YVtpXSAmIDB4MEYwMCkgPDwgNDsKKwkJcGFyLT5ib2FyZC0+c2V0X2hkYihwYXIsIHRtcCk7CisJCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19XUiwgMSk7CisJfQorCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAxKTsKK30KKworc3RhdGljIHUxNiBicm9hZHNoZWV0X2dldF9kYXRhKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJdTE2IHJlczsKKwkvKiB3YWl0IGZvciByZWFkeSB0byBnbyBoaS4gKGxvIGlzIGJ1c3kpICovCisJcGFyLT5ib2FyZC0+d2FpdF9mb3JfcmR5KHBhcik7CisKKwkvKiBjcyBsbywgZGMgbG8gZm9yIGNtZCwgd2UgbG8gZm9yIGVhY2ggZGF0YSwgZGIgYXMgdXN1YWwgKi8KKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfREMsIDEpOworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19DUywgMCk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX1dSLCAwKTsKKworCXJlcyA9IHBhci0+Ym9hcmQtPmdldF9oZGIocGFyKTsKKworCS8qIHN0cm9iZSB3ciAqLworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19XUiwgMSk7CisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAxKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRfd3JpdGVfcmVnKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiByZWcsCisJCQkJCXUxNiBkYXRhKQoreworCS8qIHdhaXQgZm9yIHJlYWR5IHRvIGdvIGhpLiAobG8gaXMgYnVzeSkgKi8KKwlwYXItPmJvYXJkLT53YWl0X2Zvcl9yZHkocGFyKTsKKworCS8qIGNzIGxvLCBkYyBsbyBmb3IgY21kLCB3ZSBsbyBmb3IgZWFjaCBkYXRhLCBkYiBhcyB1c3VhbCAqLworCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19DUywgMCk7CisKKwlicm9hZHNoZWV0X2lzc3VlX2NtZChwYXIsIEJTX0NNRF9XUl9SRUcpOworCisJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0RDLCAxKTsKKworCWJyb2Fkc2hlZXRfaXNzdWVfZGF0YShwYXIsIHJlZyk7CisJYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHBhciwgZGF0YSk7CisKKwlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfQ1MsIDEpOworfQorCitzdGF0aWMgdTE2IGJyb2Fkc2hlZXRfcmVhZF9yZWcoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IHJlZykKK3sKKwlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIHJlZyk7CisJbXNsZWVwKDEwMCk7CisJcmV0dXJuIGJyb2Fkc2hlZXRfZ2V0X2RhdGEocGFyKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGJyb2Fkc2hlZXRfaW5pdF9kaXNwbGF5KHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJdTE2IGFyZ3NbNV07CisKKwlhcmdzWzBdID0gRFBZX1c7CisJYXJnc1sxXSA9IERQWV9IOworCWFyZ3NbMl0gPSAoMTAwIHwgKDEgPDwgOCkgfCAoMSA8PCA5KSk7IC8qIHNkY2ZnICovCisJYXJnc1szXSA9IDI7IC8qIGdkcnYgY2ZnICovCisJYXJnc1s0XSA9ICg0IHwgKDEgPDwgNykpOyAvKiBsdXQgaW5kZXggZm9ybWF0ICovCisJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfSU5JVF9EU1BFX0NGRywgNSwgYXJncyk7CisKKwkvKiBkaWQgdGhlIGNvbnRyb2xsZXIgcmVhbGx5IHNldCBpdD8gKi8KKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9JTklUX0RTUEVfQ0ZHLCA1LCBhcmdzKTsKKworCWFyZ3NbMF0gPSA0OyAvKiBmc3luYyBsZW4gKi8KKwlhcmdzWzFdID0gKDEwIDw8IDgpIHwgNDsgLyogZmVuZC9mYmVnaW4gbGVuICovCisJYXJnc1syXSA9IDEwOyAvKiBsaW5lIHN5bmMgbGVuICovCisJYXJnc1szXSA9ICgxMDAgPDwgOCkgfCA0OyAvKiBsaW5lIGVuZC9iZWdpbiBsZW4gKi8KKwlhcmdzWzRdID0gNjsgLyogcGl4ZWwgY2xvY2sgY2ZnICovCisJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfSU5JVF9EU1BFX1RNRywgNSwgYXJncyk7CisKKwkvKiBzZXR1cCB3YXZlZm9ybSAqLworCWFyZ3NbMF0gPSAweDg4NjsKKwlhcmdzWzFdID0gMDsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9SRF9XRk1fSU5GTywgMiwgYXJncyk7CisKKwlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9VUERfR0RSVl9DTFIpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfV0FJVF9EU1BFX1RSRyk7CisKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MzMwLCAweDg0KTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX1dBSVRfRFNQRV9UUkcpOworCisJYXJnc1swXSA9ICgweDMgPDwgNCk7CisJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfTERfSU1HLCAxLCBhcmdzKTsKKworCWFyZ3NbMF0gPSAweDE1NDsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9XUl9SRUcsIDEsIGFyZ3MpOworCisJYnJvYWRzaGVldF9idXJzdF93cml0ZShwYXIsIERQWV9XKkRQWV9ILzIsCisJCQkJKHUxNiAqKSBwYXItPmluZm8tPnNjcmVlbl9iYXNlKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX0xEX0lNR19FTkQpOworCisJYXJnc1swXSA9IDB4NDMwMDsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9VUERfRlVMTCwgMSwgYXJncyk7CisKKwlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9XQUlUX0RTUEVfVFJHKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX1dBSVRfRFNQRV9GUkVORCk7CisKKwlwYXItPmJvYXJkLT53YWl0X2Zvcl9yZHkocGFyKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGJyb2Fkc2hlZXRfaW5pdChzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyKQoreworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX0lOSVRfU1lTX1JVTik7CisJLyogdGhlIGNvbnRyb2xsZXIgbmVlZHMgYSBzZWNvbmQgKi8KKwltc2xlZXAoMTAwMCk7CisJYnJvYWRzaGVldF9pbml0X2Rpc3BsYXkocGFyKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldGZiX2RweV91cGRhdGVfcGFnZXMoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwKKwkJCQkJCXUxNiB5MSwgdTE2IHkyKQoreworCXUxNiBhcmdzWzVdOworCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopcGFyLT5pbmZvLT5zY3JlZW5fYmFzZTsKKworCS8qIHkxIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IHNvIGRyb3AgdGhlIGxvd2VyIGJpdHMgKi8KKwl5MSAmPSAweEZGRkM7CisJLyogeTIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgLCBidXQgLSAxIHNvIHVwIHRoZSBsb3dlciBiaXRzICovCisJeTIgfD0gMHgwMDAzOworCisJYXJnc1swXSA9IDB4MyA8PCA0OworCWFyZ3NbMV0gPSAwOworCWFyZ3NbMl0gPSB5MTsKKwlhcmdzWzNdID0gY3B1X3RvX2xlMTYocGFyLT5pbmZvLT52YXIueHJlcyk7CisJYXJnc1s0XSA9IHkyOworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX0xEX0lNR19BUkVBLCA1LCBhcmdzKTsKKworCWFyZ3NbMF0gPSAweDE1NDsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9XUl9SRUcsIDEsIGFyZ3MpOworCisJYnVmICs9IHkxICogcGFyLT5pbmZvLT52YXIueHJlczsKKwlicm9hZHNoZWV0X2J1cnN0X3dyaXRlKHBhciwgKCgxICsgeTIgLSB5MSkgKiBwYXItPmluZm8tPnZhci54cmVzKS8yLAorCQkJCSh1MTYgKikgYnVmKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX0xEX0lNR19FTkQpOworCisJYXJnc1swXSA9IDB4NDMwMDsKKwlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9VUERfRlVMTCwgMSwgYXJncyk7CisKKwlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9XQUlUX0RTUEVfVFJHKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX1dBSVRfRFNQRV9GUkVORCk7CisKKwlwYXItPmJvYXJkLT53YWl0X2Zvcl9yZHkocGFyKTsKKworfQorCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0ZmJfZHB5X3VwZGF0ZShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyKQoreworCXUxNiBhcmdzWzVdOworCisJYXJnc1swXSA9IDB4MyA8PCA0OworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX0xEX0lNRywgMSwgYXJncyk7CisKKwlhcmdzWzBdID0gMHgxNTQ7CisJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfV1JfUkVHLCAxLCBhcmdzKTsKKwlicm9hZHNoZWV0X2J1cnN0X3dyaXRlKHBhciwgRFBZX1cqRFBZX0gvMiwKKwkJCQkodTE2ICopIHBhci0+aW5mby0+c2NyZWVuX2Jhc2UpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfTERfSU1HX0VORCk7CisKKwlhcmdzWzBdID0gMHg0MzAwOworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX1VQRF9GVUxMLCAxLCBhcmdzKTsKKworCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX1dBSVRfRFNQRV9UUkcpOworCisJYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCBCU19DTURfV0FJVF9EU1BFX0ZSRU5EKTsKKworCXBhci0+Ym9hcmQtPndhaXRfZm9yX3JkeShwYXIpOworCit9CisKKy8qIHRoaXMgaXMgY2FsbGVkIGJhY2sgZnJvbSB0aGUgZGVmZXJyZWQgaW8gd29ya3F1ZXVlICovCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0ZmJfZHB5X2RlZmVycmVkX2lvKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQoreworCXUxNiB5MSA9IDAsIGggPSAwOworCWludCBwcmV2X2luZGV4ID0gLTE7CisJc3RydWN0IHBhZ2UgKmN1cjsKKwlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gKmZiZGVmaW8gPSBpbmZvLT5mYmRlZmlvOworCWludCBoX2luYzsKKwl1MTYgeXJlcyA9IGluZm8tPnZhci55cmVzOworCXUxNiB4cmVzID0gaW5mby0+dmFyLnhyZXM7CisKKwkvKiBoZWlnaHQgaW5jcmVtZW50IGlzIGZpeGVkIHBlciBwYWdlICovCisJaF9pbmMgPSBESVZfUk9VTkRfVVAoUEFHRV9TSVpFICwgeHJlcyk7CisKKwkvKiB3YWxrIHRoZSB3cml0dGVuIHBhZ2UgbGlzdCBhbmQgc3dpenpsZSB0aGUgZGF0YSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmZmJkZWZpby0+cGFnZWxpc3QsIGxydSkgeworCQlpZiAocHJldl9pbmRleCA8IDApIHsKKwkJCS8qIGp1c3Qgc3RhcnRpbmcgc28gYXNzaWduIGZpcnN0IHBhZ2UgKi8KKwkJCXkxID0gKGN1ci0+aW5kZXggPDwgUEFHRV9TSElGVCkgLyB4cmVzOworCQkJaCA9IGhfaW5jOworCQl9IGVsc2UgaWYgKChwcmV2X2luZGV4ICsgMSkgPT0gY3VyLT5pbmRleCkgeworCQkJLyogdGhpcyBwYWdlIGlzIGNvbnNlY3V0aXZlIHNvIGluY3JlYXNlIG91ciBoZWlnaHQgKi8KKwkJCWggKz0gaF9pbmM7CisJCX0gZWxzZSB7CisJCQkvKiBwYWdlIG5vdCBjb25zZWN1dGl2ZSwgaXNzdWUgcHJldmlvdXMgdXBkYXRlIGZpcnN0ICovCisJCQlicm9hZHNoZWV0ZmJfZHB5X3VwZGF0ZV9wYWdlcyhpbmZvLT5wYXIsIHkxLCB5MSArIGgpOworCQkJLyogc3RhcnQgb3ZlciB3aXRoIG91ciBub24gY29uc2VjdXRpdmUgcGFnZSAqLworCQkJeTEgPSAoY3VyLT5pbmRleCA8PCBQQUdFX1NISUZUKSAvIHhyZXM7CisJCQloID0gaF9pbmM7CisJCX0KKwkJcHJldl9pbmRleCA9IGN1ci0+aW5kZXg7CisJfQorCisJLyogaWYgd2Ugc3RpbGwgaGF2ZSBhbnkgcGFnZXMgdG8gdXBkYXRlIHdlIGRvIHNvIG5vdyAqLworCWlmIChoID49IHlyZXMpIHsKKwkJLyogaXRzIGEgZnVsbCBzY3JlZW4gdXBkYXRlLCBqdXN0IGRvIGl0ICovCisJCWJyb2Fkc2hlZXRmYl9kcHlfdXBkYXRlKGluZm8tPnBhcik7CisJfSBlbHNlIHsKKwkJYnJvYWRzaGVldGZiX2RweV91cGRhdGVfcGFnZXMoaW5mby0+cGFyLCB5MSwKKwkJCQkJCW1pbigodTE2KSAoeTEgKyBoKSwgeXJlcykpOworCX0KK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldGZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJc3lzX2ZpbGxyZWN0KGluZm8sIHJlY3QpOworCisJYnJvYWRzaGVldGZiX2RweV91cGRhdGUocGFyKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldGZiX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSkKK3sKKwlzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyID0gaW5mby0+cGFyOworCisJc3lzX2NvcHlhcmVhKGluZm8sIGFyZWEpOworCisJYnJvYWRzaGVldGZiX2RweV91cGRhdGUocGFyKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldGZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQljb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQoreworCXN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisKKwlzeXNfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKKworCWJyb2Fkc2hlZXRmYl9kcHlfdXBkYXRlKHBhcik7Cit9CisKKy8qCisgKiB0aGlzIGlzIHRoZSBzbG93IHBhdGggZnJvbSB1c2Vyc3BhY2UuIHRoZXkgY2FuIHNlZWsgYW5kIHdyaXRlIHRvCisgKiB0aGUgZmIuIGl0J3MgaW5lZmZpY2llbnQgdG8gZG8gYW55dGhpbmcgbGVzcyB0aGFuIGEgZnVsbCBzY3JlZW4gZHJhdworICovCitzdGF0aWMgc3NpemVfdCBicm9hZHNoZWV0ZmJfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKKwl2b2lkICpkc3Q7CisJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisJaWYgKGluZm8tPnN0YXRlICE9IEZCSU5GT19TVEFURV9SVU5OSU5HKQorCQlyZXR1cm4gLUVQRVJNOworCisJdG90YWxfc2l6ZSA9IGluZm8tPmZpeC5zbWVtX2xlbjsKKworCWlmIChwID4gdG90YWxfc2l6ZSkKKwkJcmV0dXJuIC1FRkJJRzsKKworCWlmIChjb3VudCA+IHRvdGFsX3NpemUpIHsKKwkJZXJyID0gLUVGQklHOworCQljb3VudCA9IHRvdGFsX3NpemU7CisJfQorCisJaWYgKGNvdW50ICsgcCA+IHRvdGFsX3NpemUpIHsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSAtRU5PU1BDOworCisJCWNvdW50ID0gdG90YWxfc2l6ZSAtIHA7CisJfQorCisJZHN0ID0gKHZvaWQgKikoaW5mby0+c2NyZWVuX2Jhc2UgKyBwKTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihkc3QsIGJ1ZiwgY291bnQpKQorCQllcnIgPSAtRUZBVUxUOworCisJaWYgICghZXJyKQorCQkqcHBvcyArPSBjb3VudDsKKworCWJyb2Fkc2hlZXRmYl9kcHlfdXBkYXRlKHBhcik7CisKKwlyZXR1cm4gKGVycikgPyBlcnIgOiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBmYl9vcHMgYnJvYWRzaGVldGZiX29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmZiX3JlYWQgICAgICAgID0gZmJfc3lzX3JlYWQsCisJLmZiX3dyaXRlCT0gYnJvYWRzaGVldGZiX3dyaXRlLAorCS5mYl9maWxscmVjdAk9IGJyb2Fkc2hlZXRmYl9maWxscmVjdCwKKwkuZmJfY29weWFyZWEJPSBicm9hZHNoZWV0ZmJfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdAk9IGJyb2Fkc2hlZXRmYl9pbWFnZWJsaXQsCit9OworCitzdGF0aWMgc3RydWN0IGZiX2RlZmVycmVkX2lvIGJyb2Fkc2hlZXRmYl9kZWZpbyA9IHsKKwkuZGVsYXkJCT0gSFovNCwKKwkuZGVmZXJyZWRfaW8JPSBicm9hZHNoZWV0ZmJfZHB5X2RlZmVycmVkX2lvLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYnJvYWRzaGVldGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKKwlzdHJ1Y3QgYnJvYWRzaGVldF9ib2FyZCAqYm9hcmQ7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJaW50IHZpZGVvbWVtb3J5c2l6ZTsKKwl1bnNpZ25lZCBjaGFyICp2aWRlb21lbW9yeTsKKwlzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyOworCWludCBpOworCisJLyogcGljayB1cCBib2FyZCBzcGVjaWZpYyByb3V0aW5lcyAqLworCWJvYXJkID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIWJvYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHRyeSB0byBjb3VudCBkZXZpY2Ugc3BlY2lmaWMgZHJpdmVyLCBpZiBjYW4ndCwgcGxhdGZvcm0gcmVjYWxscyAqLworCWlmICghdHJ5X21vZHVsZV9nZXQoYm9hcmQtPm93bmVyKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpbmZvID0gZnJhbWVidWZmZXJfYWxsb2Moc2l6ZW9mKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyKSwgJmRldi0+ZGV2KTsKKwlpZiAoIWluZm8pCisJCWdvdG8gZXJyOworCisJdmlkZW9tZW1vcnlzaXplID0gKERQWV9XKkRQWV9IKTsKKwl2aWRlb21lbW9yeSA9IHZtYWxsb2ModmlkZW9tZW1vcnlzaXplKTsKKwlpZiAoIXZpZGVvbWVtb3J5KQorCQlnb3RvIGVycl9mYl9yZWw7CisKKwltZW1zZXQodmlkZW9tZW1vcnksIDAsIHZpZGVvbWVtb3J5c2l6ZSk7CisKKwlpbmZvLT5zY3JlZW5fYmFzZSA9IChjaGFyICopdmlkZW9tZW1vcnk7CisJaW5mby0+ZmJvcHMgPSAmYnJvYWRzaGVldGZiX29wczsKKworCWluZm8tPnZhciA9IGJyb2Fkc2hlZXRmYl92YXI7CisJaW5mby0+Zml4ID0gYnJvYWRzaGVldGZiX2ZpeDsKKwlpbmZvLT5maXguc21lbV9sZW4gPSB2aWRlb21lbW9yeXNpemU7CisJcGFyID0gaW5mby0+cGFyOworCXBhci0+aW5mbyA9IGluZm87CisJcGFyLT5ib2FyZCA9IGJvYXJkOworCXBhci0+d3JpdGVfcmVnID0gYnJvYWRzaGVldF93cml0ZV9yZWc7CisJcGFyLT5yZWFkX3JlZyA9IGJyb2Fkc2hlZXRfcmVhZF9yZWc7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmcGFyLT53YWl0cSk7CisKKwlpbmZvLT5mbGFncyA9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisKKwlpbmZvLT5mYmRlZmlvID0gJmJyb2Fkc2hlZXRmYl9kZWZpbzsKKwlmYl9kZWZlcnJlZF9pb19pbml0KGluZm8pOworCisJcmV0dmFsID0gZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMTYsIDApOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGNvbG9ybWFwXG4iKTsKKwkJZ290byBlcnJfdmZyZWU7CisJfQorCisJLyogc2V0IGNtYXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJaW5mby0+Y21hcC5yZWRbaV0gPSAoKCgyKmkpKzEpKigweEZGRkYpKS8zMjsKKwltZW1jcHkoaW5mby0+Y21hcC5ncmVlbiwgaW5mby0+Y21hcC5yZWQsIHNpemVvZih1MTYpKjE2KTsKKwltZW1jcHkoaW5mby0+Y21hcC5ibHVlLCBpbmZvLT5jbWFwLnJlZCwgc2l6ZW9mKHUxNikqMTYpOworCisJcmV0dmFsID0gcGFyLT5ib2FyZC0+c2V0dXBfaXJxKGluZm8pOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGVycl9jbWFwOworCisJLyogdGhpcyBpbml0cyB0aGUgZHB5ICovCisJcmV0dmFsID0gYm9hcmQtPmluaXQocGFyKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwlicm9hZHNoZWV0X2luaXQocGFyKTsKKworCXJldHZhbCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIGVycl9mcmVlX2lycTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCisJcHJpbnRrKEtFUk5fSU5GTworCSAgICAgICAiZmIlZDogQnJvYWRzaGVldCBmcmFtZSBidWZmZXIsIHVzaW5nICVkSyBvZiB2aWRlbyBtZW1vcnlcbiIsCisJICAgICAgIGluZm8tPm5vZGUsIHZpZGVvbWVtb3J5c2l6ZSA+PiAxMCk7CisKKworCXJldHVybiAwOworCitlcnJfZnJlZV9pcnE6CisJYm9hcmQtPmNsZWFudXAocGFyKTsKK2Vycl9jbWFwOgorCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CitlcnJfdmZyZWU6CisJdmZyZWUodmlkZW9tZW1vcnkpOworZXJyX2ZiX3JlbDoKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworZXJyOgorCW1vZHVsZV9wdXQoYm9hcmQtPm93bmVyKTsKKwlyZXR1cm4gcmV0dmFsOworCit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGJyb2Fkc2hlZXRmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpbmZvKSB7CisJCXN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIgPSBpbmZvLT5wYXI7CisJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoaW5mbyk7CisJCXBhci0+Ym9hcmQtPmNsZWFudXAocGFyKTsKKwkJZmJfZGVhbGxvY19jbWFwKCZpbmZvLT5jbWFwKTsKKwkJdmZyZWUoKHZvaWQgKilpbmZvLT5zY3JlZW5fYmFzZSk7CisJCW1vZHVsZV9wdXQocGFyLT5ib2FyZC0+b3duZXIpOworCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYnJvYWRzaGVldGZiX2RyaXZlciA9IHsKKwkucHJvYmUJPSBicm9hZHNoZWV0ZmJfcHJvYmUsCisJLnJlbW92ZSA9IGJyb2Fkc2hlZXRmYl9yZW1vdmUsCisJLmRyaXZlcgk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gImJyb2Fkc2hlZXRmYiIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGJyb2Fkc2hlZXRmYl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmYnJvYWRzaGVldGZiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBicm9hZHNoZWV0ZmJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZicm9hZHNoZWV0ZmJfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoYnJvYWRzaGVldGZiX2luaXQpOworbW9kdWxlX2V4aXQoYnJvYWRzaGVldGZiX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oImZiZGV2IGRyaXZlciBmb3IgQnJvYWRzaGVldCBjb250cm9sbGVyIik7CitNT0RVTEVfQVVUSE9SKCJKYXlhIEt1bWFyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKaW5kZXggN2E5ZTQyZS4uODNjNWNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYwpAQCAtNDYsOCArNDYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtMTQyNSw3ICsxNDI1LDcgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX1NIQVJLCiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9mcmFtZWJ1ZmZlci5oPgogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjeWJlcnByb192bF9wcm9iZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbXhmYi5jIGIvZHJpdmVycy92aWRlby9pbXhmYi5jCmluZGV4IGQ1OGM2OGMuLjE1YTBlZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW14ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2lteGZiLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqCWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuYXJtLmxpbnV4Lm9yZy51awogICovCiAKLQogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0yNyw5ICsyNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogCiAjaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgogCkBAIC00NCw3ICs0NSwxMiBAQAogCiAjZGVmaW5lIExDRENfU0laRQkweDA0CiAjZGVmaW5lIFNJWkVfWE1BWCh4KQkoKCgoeCkgPj4gNCkgJiAweDNmKSA8PCAyMCkKKworI2lmZGVmIENPTkZJR19BUkNIX01YMQogI2RlZmluZSBTSVpFX1lNQVgoeSkJKCh5KSAmIDB4MWZmKQorI2Vsc2UKKyNkZWZpbmUgU0laRV9ZTUFYKHkpCSgoeSkgJiAweDNmZikKKyNlbmRpZgogCiAjZGVmaW5lIExDRENfVlBXCTB4MDgKICNkZWZpbmUgVlBXX1ZQVyh4KQkoKHgpICYgMHgzZmYpCkBAIC01NCw3ICs2MCwxMiBAQAogI2RlZmluZSBDUE9TX0NDMAkoMTw8MzApCiAjZGVmaW5lIENQT1NfT1AJCSgxPDwyOCkKICNkZWZpbmUgQ1BPU19DWFAoeCkJKCgoeCkgJiAzZmYpIDw8IDE2KQorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCiAjZGVmaW5lIENQT1NfQ1lQKHkpCSgoeSkgJiAweDFmZikKKyNlbHNlCisjZGVmaW5lIENQT1NfQ1lQKHkpCSgoeSkgJiAweDNmZikKKyNlbmRpZgogCiAjZGVmaW5lIExDRENfTENXSEIJMHgxMAogI2RlZmluZSBMQ1dIQl9CS19FTgkoMTw8MzEpCkBAIC02Myw5ICs3NCwxNiBAQAogI2RlZmluZSBMQ1dIQl9CRCh4KQkoKHgpICYgMHhmZikKIAogI2RlZmluZSBMQ0RDX0xDSENDCTB4MTQKKworI2lmZGVmIENPTkZJR19BUkNIX01YMQogI2RlZmluZSBMQ0hDQ19DVVJfQ09MX1IocikgKCgocikgJiAweDFmKSA8PCAxMSkKICNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9HKGcpICgoKGcpICYgMHgzZikgPDwgNSkKICNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9CKGIpICgoYikgJiAweDFmKQorI2Vsc2UKKyNkZWZpbmUgTENIQ0NfQ1VSX0NPTF9SKHIpICgoKHIpICYgMHgzZikgPDwgMTIpCisjZGVmaW5lIExDSENDX0NVUl9DT0xfRyhnKSAoKChnKSAmIDB4M2YpIDw8IDYpCisjZGVmaW5lIExDSENDX0NVUl9DT0xfQihiKSAoKGIpICYgMHgzZikKKyNlbmRpZgogCiAjZGVmaW5lIExDRENfUENSCTB4MTgKIApAQCAtOTIsNyArMTEwLDEzIEBACiAvKiBiaXQgZmllbGRzIGluIGlteGZiLmggKi8KIAogI2RlZmluZSBMQ0RDX1JNQ1IJMHgzNAorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCiAjZGVmaW5lIFJNQ1JfTENEQ19FTgkoMTw8MSkKKyNlbHNlCisjZGVmaW5lIFJNQ1JfTENEQ19FTgkwCisjZW5kaWYKKwogI2RlZmluZSBSTUNSX1NFTEZfUkVGCSgxPDwwKQogCiAjZGVmaW5lIExDRENfTENESUNSCTB4MzgKQEAgLTExOSw2ICsxNDMsNyBAQAogc3RydWN0IGlteGZiX2luZm8gewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgICpwZGV2OwogCXZvaWQgX19pb21lbQkJKnJlZ3M7CisJc3RydWN0IGNsawkJKmNsazsKIAogCXVfaW50CQkJbWF4X2JwcDsKIAl1X2ludAkJCW1heF94cmVzOwpAQCAtMTU5LDYgKzE4NCwxNyBAQAogI2RlZmluZSBNSU5fWFJFUwk2NAogI2RlZmluZSBNSU5fWVJFUwk2NAogCisvKiBBY3R1YWxseSB0aGlzIHJlYWxseSBpcyAxOGJpdCBzdXBwb3J0LCB0aGUgbG93ZXN0IDIgYml0cyBvZiBlYWNoIGNvbG91cgorICogYXJlIHVudXNlZCBpbiBoYXJkd2FyZS4gV2UgY2xhaW0gdG8gaGF2ZSAyNGJpdCBzdXBwb3J0IHRvIG1ha2Ugc29mdHdhcmUKKyAqIGxpa2UgWCB3b3JrLCB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IDE4Yml0LgorICovCitzdGF0aWMgc3RydWN0IGlteGZiX3JnYiBkZWZfcmdiXzE4ID0geworCS5yZWQJPSB7Lm9mZnNldCA9IDE2LCAubGVuZ3RoID0gOCx9LAorCS5ncmVlbgk9IHsub2Zmc2V0ID0gOCwgLmxlbmd0aCA9IDgsfSwKKwkuYmx1ZQk9IHsub2Zmc2V0ID0gMCwgLmxlbmd0aCA9IDgsfSwKKwkudHJhbnNwID0gey5vZmZzZXQgPSAwLCAubGVuZ3RoID0gMCx9LAorfTsKKwogc3RhdGljIHN0cnVjdCBpbXhmYl9yZ2IgZGVmX3JnYl8xNl90ZnQgPSB7CiAJLnJlZAk9IHsub2Zmc2V0ID0gMTEsIC5sZW5ndGggPSA1LH0sCiAJLmdyZWVuCT0gey5vZmZzZXQgPSA1LCAubGVuZ3RoID0gNix9LApAQCAtMjg2LDkgKzMyMiwxMiBAQAogCiAJcHJfZGVidWcoInZhci0+Yml0c19wZXJfcGl4ZWw9JWRcbiIsIHZhci0+Yml0c19wZXJfcGl4ZWwpOwogCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMzI6CisJCXJnYiA9ICZkZWZfcmdiXzE4OworCQlicmVhazsKIAljYXNlIDE2OgogCWRlZmF1bHQ6Ci0JCWlmIChyZWFkbChmYmktPnJlZ3MgKyBMQ0RDX1BDUikgJiBQQ1JfVEZUKQorCQlpZiAoZmJpLT5wY3IgJiBQQ1JfVEZUKQogCQkJcmdiID0gJmRlZl9yZ2JfMTZfdGZ0OwogCQllbHNlCiAJCQlyZ2IgPSAmZGVmX3JnYl8xNl9zdG47CkBAIC0zMjcsOSArMzY2LDcgQEAKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOwogCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKIAotCXByX2RlYnVnKCJzZXRfcGFyXG4iKTsKLQotCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDE2KQorCWlmICh2YXItPmJpdHNfcGVyX3BpeGVsID09IDE2IHx8IHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMzIpCiAJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwogCWVsc2UgaWYgKCFmYmktPmNtYXBfc3RhdGljKQogCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1BTRVVET0NPTE9SOwpAQCAtMzU0LDEwICszOTEsNiBAQAogewogCXByX2RlYnVnKCJFbmFibGluZyBMQ0QgY29udHJvbGxlclxuIik7CiAKLQkvKiBpbml0aWFsaXplIExDREMgKi8KLQl3cml0ZWwocmVhZGwoZmJpLT5yZWdzICsgTENEQ19STUNSKSAmIH5STUNSX0xDRENfRU4sCi0JCWZiaS0+cmVncyArIExDRENfUk1DUik7CS8qIGp1c3QgdG8gYmUgc2FmZS4uLiAqLwotCiAJd3JpdGVsKGZiaS0+c2NyZWVuX2RtYSwgZmJpLT5yZWdzICsgTENEQ19TU0EpOwogCiAJLyogcGh5c2ljYWwgc2NyZWVuIHN0YXJ0IGFkZHJlc3MJICAgICovCkBAIC0zNzMsNiArNDA2LDggQEAKIAogCXdyaXRlbChSTUNSX0xDRENfRU4sIGZiaS0+cmVncyArIExDRENfUk1DUik7CiAKKwljbGtfZW5hYmxlKGZiaS0+Y2xrKTsKKwogCWlmIChmYmktPmJhY2tsaWdodF9wb3dlcikKIAkJZmJpLT5iYWNrbGlnaHRfcG93ZXIoMSk7CiAJaWYgKGZiaS0+bGNkX3Bvd2VyKQpAQCAtMzg4LDYgKzQyMyw4IEBACiAJaWYgKGZiaS0+bGNkX3Bvd2VyKQogCQlmYmktPmxjZF9wb3dlcigwKTsKIAorCWNsa19kaXNhYmxlKGZiaS0+Y2xrKTsKKwogCXdyaXRlbCgwLCBmYmktPnJlZ3MgKyBMQ0RDX1JNQ1IpOwogfQogCkBAIC00MzEsNiArNDY4LDkgQEAKIHN0YXRpYyBpbnQgaW14ZmJfYWN0aXZhdGVfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaW14ZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCXVuc2lnbmVkIGludCBwY3IsIGxjZF9jbGs7CisJdW5zaWduZWQgbG9uZyBsb25nIHRtcDsKKwogCXByX2RlYnVnKCJ2YXI6IHhyZXM9JWQgaHNsZW49JWQgbG09JWQgcm09JWRcbiIsCiAJCXZhci0+eHJlcywgdmFyLT5oc3luY19sZW4sCiAJCXZhci0+bGVmdF9tYXJnaW4sIHZhci0+cmlnaHRfbWFyZ2luKTsKQEAgLTQ2NSw5ICs1MDUsOSBAQAogCQkJaW5mby0+Zml4LmlkLCB2YXItPmxvd2VyX21hcmdpbik7CiAjZW5kaWYKIAotCXdyaXRlbChIQ1JfSF9XSURUSCh2YXItPmhzeW5jX2xlbikgfAotCQlIQ1JfSF9XQUlUXzEodmFyLT5yaWdodF9tYXJnaW4pIHwKLQkJSENSX0hfV0FJVF8yKHZhci0+bGVmdF9tYXJnaW4pLAorCXdyaXRlbChIQ1JfSF9XSURUSCh2YXItPmhzeW5jX2xlbiAtIDEpIHwKKwkJSENSX0hfV0FJVF8xKHZhci0+cmlnaHRfbWFyZ2luIC0gMSkgfAorCQlIQ1JfSF9XQUlUXzIodmFyLT5sZWZ0X21hcmdpbiAtIDMpLAogCQlmYmktPnJlZ3MgKyBMQ0RDX0hDUik7CiAKIAl3cml0ZWwoVkNSX1ZfV0lEVEgodmFyLT52c3luY19sZW4pIHwKQEAgLTQ3Nyw3ICs1MTcsMjMgQEAKIAogCXdyaXRlbChTSVpFX1hNQVgodmFyLT54cmVzKSB8IFNJWkVfWU1BWCh2YXItPnlyZXMpLAogCQkJZmJpLT5yZWdzICsgTENEQ19TSVpFKTsKLQl3cml0ZWwoZmJpLT5wY3IsIGZiaS0+cmVncyArIExDRENfUENSKTsKKworCWxjZF9jbGsgPSBjbGtfZ2V0X3JhdGUoZmJpLT5jbGspOworCXRtcCA9IHZhci0+cGl4Y2xvY2sgKiAodW5zaWduZWQgbG9uZyBsb25nKWxjZF9jbGs7CisJZG9fZGl2KHRtcCwgMTAwMDAwMCk7CisJaWYgKGRvX2Rpdih0bXAsIDEwMDAwMDApID4gNTAwMDAwKQorCQl0bXArKzsKKwlwY3IgPSAodW5zaWduZWQgaW50KXRtcDsKKwlpZiAoLS1wY3IgPiAweDNGKSB7CisJCXBjciA9IDB4M0Y7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk11c3QgbGltaXQgcGl4ZWwgY2xvY2sgdG8gJXVIelxuIiwKKwkJCQlsY2RfY2xrIC8gcGNyKTsKKwl9CisKKwkvKiBhZGQgc3luYyBwb2xhcml0aWVzICovCisJcGNyIHw9IGZiaS0+cGNyICYgfjB4M0Y7CisKKwl3cml0ZWwocGNyLCBmYmktPnJlZ3MgKyBMQ0RDX1BDUik7CiAJd3JpdGVsKGZiaS0+cHdtciwgZmJpLT5yZWdzICsgTENEQ19QV01SKTsKIAl3cml0ZWwoZmJpLT5sc2NyMSwgZmJpLT5yZWdzICsgTENEQ19MU0NSMSk7CiAJd3JpdGVsKGZiaS0+ZG1hY3IsIGZiaS0+cmVncyArIExDRENfRE1BQ1IpOwpAQCAtNjE5LDYgKzY3NSwxMyBAQAogCQlnb3RvIGZhaWxlZF9yZXE7CiAJfQogCisJZmJpLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOworCWlmIChJU19FUlIoZmJpLT5jbGspKSB7CisJCXJldCA9IFBUUl9FUlIoZmJpLT5jbGspOzsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBjbG9jazogJWRcbiIsIHJldCk7CisJCWdvdG8gZmFpbGVkX2dldGNsb2NrOworCX0KKwogCWZiaS0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoZmJpLT5yZWdzID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIkNhbm5vdCBtYXAgZnJhbWUgYnVmZmVyIHJlZ2lzdGVyc1xuIik7CkBAIC02NTAsNiArNzEzLDEyIEBACiAJCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gZmJpLT5zY3JlZW5fZG1hOwogCX0KIAorCWlmIChwZGF0YS0+aW5pdCkgeworCQlyZXQgPSBwZGF0YS0+aW5pdChmYmktPnBkZXYpOworCQlpZiAocmV0KQorCQkJZ290byBmYWlsZWRfcGxhdGZvcm1faW5pdDsKKwl9CisKIAkvKgogCSAqIFRoaXMgbWFrZXMgc3VyZSB0aGF0IG91ciBjb2xvdXIgYml0ZmllbGQKIAkgKiBkZXNjcmlwdG9ycyBhcmUgY29ycmVjdGx5IGluaXRpYWxpc2VkLgpAQCAtNjc0LDEwICs3NDMsMTUgQEAKIGZhaWxlZF9yZWdpc3RlcjoKIAlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogZmFpbGVkX2NtYXA6CisJaWYgKHBkYXRhLT5leGl0KQorCQlwZGF0YS0+ZXhpdChmYmktPnBkZXYpOworZmFpbGVkX3BsYXRmb3JtX2luaXQ6CiAJaWYgKCFwZGF0YS0+Zml4ZWRfc2NyZWVuX2NwdSkKIAkJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKCZwZGV2LT5kZXYsZmJpLT5tYXBfc2l6ZSxmYmktPm1hcF9jcHUsCiAJCQlmYmktPm1hcF9kbWEpOwogZmFpbGVkX21hcDoKKwljbGtfcHV0KGZiaS0+Y2xrKTsKK2ZhaWxlZF9nZXRjbG9jazoKIAlpb3VubWFwKGZiaS0+cmVncyk7CiBmYWlsZWRfaW9yZW1hcDoKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0KTsKQEAgLTY5MSw2ICs3NjUsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBpbXhmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGlteGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTcwMSwxMiArNzc2LDE5IEBACiAKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGRhdGEtPmV4aXQpCisJCXBkYXRhLT5leGl0KGZiaS0+cGRldik7CisKIAlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwogCWtmcmVlKGluZm8tPnBzZXVkb19wYWxldHRlKTsKIAlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwogCiAJaW91bm1hcChmYmktPnJlZ3MpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwljbGtfZGlzYWJsZShmYmktPmNsayk7CisJY2xrX3B1dChmYmktPmNsayk7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9teDNmYi5jIGIvZHJpdmVycy92aWRlby9teDNmYi5jCmluZGV4IDhhNzVkMDUuLmZhMWE1MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbXgzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKQEAgLTM0LDI0MCArMzQsMjQwIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2RlZmluZSBNWDNGQl9OQU1FICAgICAgICAgICAgICJteDNfc2RjX2ZiIgorI2RlZmluZSBNWDNGQl9OQU1FCQkibXgzX3NkY19mYiIKIAotI2RlZmluZSBNWDNGQl9SRUdfT0ZGU0VUICAgICAgIDB4QjQKKyNkZWZpbmUgTVgzRkJfUkVHX09GRlNFVAkweEI0CiAKIC8qIFNEQyBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgU0RDX0NPTV9DT05GICAgICAgICAgICAoMHhCNCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIFNEQ19HV19DVFJMICAgICAgICAgICAgKDB4QjggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBTRENfRkdfUE9TICAgICAgICAgICAgICgweEJDIC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgU0RDX0JHX1BPUyAgICAgICAgICAgICAoMHhDMCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIFNEQ19DVVJfUE9TICAgICAgICAgICAgKDB4QzQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBTRENfUFdNX0NUUkwgICAgICAgICAgICgweEM4IC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgU0RDX0NVUl9NQVAgICAgICAgICAgICAoMHhDQyAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIFNEQ19IT1JfQ09ORiAgICAgICAgICAgKDB4RDAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBTRENfVkVSX0NPTkYgICAgICAgICAgICgweEQ0IC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgU0RDX1NIQVJQX0NPTkZfMSAgICAgICAoMHhEOCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIFNEQ19TSEFSUF9DT05GXzIgICAgICAgKDB4REMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfQ09NX0NPTkYJCSgweEI0IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgU0RDX0dXX0NUUkwJCSgweEI4IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgU0RDX0ZHX1BPUwkJKDB4QkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfQkdfUE9TCQkoMHhDMCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIFNEQ19DVVJfUE9TCQkoMHhDNCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIFNEQ19QV01fQ1RSTAkJKDB4QzggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfQ1VSX01BUAkJKDB4Q0MgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfSE9SX0NPTkYJCSgweEQwIC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgU0RDX1ZFUl9DT05GCQkoMHhENCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIFNEQ19TSEFSUF9DT05GXzEJKDB4RDggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBTRENfU0hBUlBfQ09ORl8yCSgweERDIC0gTVgzRkJfUkVHX09GRlNFVCkKIAogLyogUmVnaXN0ZXIgYml0cyAqLwotI2RlZmluZSBTRENfQ09NX1RGVF9DT0xPUiAgICAgIDB4MDAwMDAwMDFVTAotI2RlZmluZSBTRENfQ09NX0ZHX0VOICAgICAgICAgIDB4MDAwMDAwMTBVTAotI2RlZmluZSBTRENfQ09NX0dXU0VMICAgICAgICAgIDB4MDAwMDAwMjBVTAotI2RlZmluZSBTRENfQ09NX0dMQl9BICAgICAgICAgIDB4MDAwMDAwNDBVTAotI2RlZmluZSBTRENfQ09NX0tFWV9DT0xPUl9HICAgIDB4MDAwMDAwODBVTAotI2RlZmluZSBTRENfQ09NX0JHX0VOICAgICAgICAgIDB4MDAwMDAyMDBVTAotI2RlZmluZSBTRENfQ09NX1NIQVJQICAgICAgICAgIDB4MDAwMDEwMDBVTAorI2RlZmluZSBTRENfQ09NX1RGVF9DT0xPUgkweDAwMDAwMDAxVUwKKyNkZWZpbmUgU0RDX0NPTV9GR19FTgkJMHgwMDAwMDAxMFVMCisjZGVmaW5lIFNEQ19DT01fR1dTRUwJCTB4MDAwMDAwMjBVTAorI2RlZmluZSBTRENfQ09NX0dMQl9BCQkweDAwMDAwMDQwVUwKKyNkZWZpbmUgU0RDX0NPTV9LRVlfQ09MT1JfRwkweDAwMDAwMDgwVUwKKyNkZWZpbmUgU0RDX0NPTV9CR19FTgkJMHgwMDAwMDIwMFVMCisjZGVmaW5lIFNEQ19DT01fU0hBUlAJCTB4MDAwMDEwMDBVTAogCi0jZGVmaW5lIFNEQ19WX1NZTkNfV0lEVEhfTCAgICAgMHgwMDAwMDAwMVVMCisjZGVmaW5lIFNEQ19WX1NZTkNfV0lEVEhfTAkweDAwMDAwMDAxVUwKIAogLyogRGlzcGxheSBJbnRlcmZhY2UgcmVnaXN0ZXJzICovCi0jZGVmaW5lIERJX0RJU1BfSUZfQ09ORiAgICAgICAgICAgICAgICAoMHgwMTI0IC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgRElfRElTUF9TSUdfUE9MICAgICAgICAgICAgICAgICgweDAxMjggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9TRVJfRElTUDFfQ09ORiAgICAgICgweDAxMkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9TRVJfRElTUDJfQ09ORiAgICAgICgweDAxMzAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9IU1BfQ0xLX1BFUiAgICAgICAgICgweDAxMzQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9USU1FX0NPTkZfMSAgICgweDAxMzggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9USU1FX0NPTkZfMiAgICgweDAxM0MgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9USU1FX0NPTkZfMyAgICgweDAxNDAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9USU1FX0NPTkZfMSAgICgweDAxNDQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9USU1FX0NPTkZfMiAgICgweDAxNDggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9USU1FX0NPTkZfMyAgICgweDAxNEMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9USU1FX0NPTkZfMSAgICgweDAxNTAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9USU1FX0NPTkZfMiAgICgweDAxNTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9USU1FX0NPTkZfMyAgICgweDAxNTggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQM19USU1FX0NPTkYgICAgICgweDAxNUMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9EQjBfTUFQICAgICAgICgweDAxNjAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9EQjFfTUFQICAgICAgICgweDAxNjQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9EQjJfTUFQICAgICAgICgweDAxNjggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9DQjBfTUFQICAgICAgICgweDAxNkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9DQjFfTUFQICAgICAgICgweDAxNzAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMF9DQjJfTUFQICAgICAgICgweDAxNzQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9EQjBfTUFQICAgICAgICgweDAxNzggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9EQjFfTUFQICAgICAgICgweDAxN0MgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9EQjJfTUFQICAgICAgICgweDAxODAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9DQjBfTUFQICAgICAgICgweDAxODQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9DQjFfTUFQICAgICAgICgweDAxODggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMV9DQjJfTUFQICAgICAgICgweDAxOEMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9EQjBfTUFQICAgICAgICgweDAxOTAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9EQjFfTUFQICAgICAgICgweDAxOTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9EQjJfTUFQICAgICAgICgweDAxOTggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9DQjBfTUFQICAgICAgICgweDAxOUMgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9DQjFfTUFQICAgICAgICgweDAxQTAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQMl9DQjJfTUFQICAgICAgICgweDAxQTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQM19CMF9NQVAgICAgICAgICAgICAgICAgKDB4MDFBOCAtIE1YM0ZCX1JFR19PRkZTRVQpCi0jZGVmaW5lIERJX0RJU1AzX0IxX01BUCAgICAgICAgICAgICAgICAoMHgwMUFDIC0gTVgzRkJfUkVHX09GRlNFVCkKLSNkZWZpbmUgRElfRElTUDNfQjJfTUFQICAgICAgICAgICAgICAgICgweDAxQjAgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQX0FDQ19DQyAgICAgICAgICgweDAxQjQgLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQX0xMQV9DT05GICAgICAgICgweDAxQjggLSBNWDNGQl9SRUdfT0ZGU0VUKQotI2RlZmluZSBESV9ESVNQX0xMQV9EQVRBICAgICAgICgweDAxQkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQX0lGX0NPTkYJCSgweDAxMjQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQX1NJR19QT0wJCSgweDAxMjggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9TRVJfRElTUDFfQ09ORgkoMHgwMTJDIC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfU0VSX0RJU1AyX0NPTkYJKDB4MDEzMCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0hTUF9DTEtfUEVSCQkoMHgwMTM0IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUDBfVElNRV9DT05GXzEJKDB4MDEzOCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AwX1RJTUVfQ09ORl8yCSgweDAxM0MgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9USU1FX0NPTkZfMwkoMHgwMTQwIC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUDFfVElNRV9DT05GXzEJKDB4MDE0NCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AxX1RJTUVfQ09ORl8yCSgweDAxNDggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9USU1FX0NPTkZfMwkoMHgwMTRDIC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUDJfVElNRV9DT05GXzEJKDB4MDE1MCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1AyX1RJTUVfQ09ORl8yCSgweDAxNTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9USU1FX0NPTkZfMwkoMHgwMTU4IC0gTVgzRkJfUkVHX09GRlNFVCkKKyNkZWZpbmUgRElfRElTUDNfVElNRV9DT05GCSgweDAxNUMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9EQjBfTUFQCSgweDAxNjAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9EQjFfTUFQCSgweDAxNjQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9EQjJfTUFQCSgweDAxNjggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9DQjBfTUFQCSgweDAxNkMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9DQjFfTUFQCSgweDAxNzAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMF9DQjJfTUFQCSgweDAxNzQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9EQjBfTUFQCSgweDAxNzggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9EQjFfTUFQCSgweDAxN0MgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9EQjJfTUFQCSgweDAxODAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9DQjBfTUFQCSgweDAxODQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9DQjFfTUFQCSgweDAxODggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMV9DQjJfTUFQCSgweDAxOEMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9EQjBfTUFQCSgweDAxOTAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9EQjFfTUFQCSgweDAxOTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9EQjJfTUFQCSgweDAxOTggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9DQjBfTUFQCSgweDAxOUMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9DQjFfTUFQCSgweDAxQTAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQMl9DQjJfTUFQCSgweDAxQTQgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQM19CMF9NQVAJCSgweDAxQTggLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQM19CMV9NQVAJCSgweDAxQUMgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQM19CMl9NQVAJCSgweDAxQjAgLSBNWDNGQl9SRUdfT0ZGU0VUKQorI2RlZmluZSBESV9ESVNQX0FDQ19DQwkJKDB4MDFCNCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1BfTExBX0NPTkYJKDB4MDFCOCAtIE1YM0ZCX1JFR19PRkZTRVQpCisjZGVmaW5lIERJX0RJU1BfTExBX0RBVEEJKDB4MDFCQyAtIE1YM0ZCX1JFR19PRkZTRVQpCiAKIC8qIERJX0RJU1BfU0lHX1BPTCBiaXRzICovCi0jZGVmaW5lIERJX0QzX1ZTWU5DX1BPTF9TSElGVCAgICAgICAgICAyOAotI2RlZmluZSBESV9EM19IU1lOQ19QT0xfU0hJRlQgICAgICAgICAgMjcKLSNkZWZpbmUgRElfRDNfRFJEWV9TSEFSUF9QT0xfU0hJRlQgICAgIDI2Ci0jZGVmaW5lIERJX0QzX0NMS19QT0xfU0hJRlQgICAgICAgICAgICAyNQotI2RlZmluZSBESV9EM19EQVRBX1BPTF9TSElGVCAgICAgICAgICAgMjQKKyNkZWZpbmUgRElfRDNfVlNZTkNfUE9MX1NISUZUCQkyOAorI2RlZmluZSBESV9EM19IU1lOQ19QT0xfU0hJRlQJCTI3CisjZGVmaW5lIERJX0QzX0RSRFlfU0hBUlBfUE9MX1NISUZUCTI2CisjZGVmaW5lIERJX0QzX0NMS19QT0xfU0hJRlQJCTI1CisjZGVmaW5lIERJX0QzX0RBVEFfUE9MX1NISUZUCQkyNAogCiAvKiBESV9ESVNQX0lGX0NPTkYgYml0cyAqLwotI2RlZmluZSBESV9EM19DTEtfSURMRV9TSElGVCAgICAgICAgICAgMjYKLSNkZWZpbmUgRElfRDNfQ0xLX1NFTF9TSElGVCAgICAgICAgICAgIDI1Ci0jZGVmaW5lIERJX0QzX0RBVEFNU0tfU0hJRlQgICAgICAgICAgICAyNAorI2RlZmluZSBESV9EM19DTEtfSURMRV9TSElGVAkJMjYKKyNkZWZpbmUgRElfRDNfQ0xLX1NFTF9TSElGVAkJMjUKKyNkZWZpbmUgRElfRDNfREFUQU1TS19TSElGVAkJMjQKIAogZW51bSBpcHVfcGFuZWwgewotICAgICAgIElQVV9QQU5FTF9TSEFSUF9URlQsCi0gICAgICAgSVBVX1BBTkVMX1RGVCwKKwlJUFVfUEFORUxfU0hBUlBfVEZULAorCUlQVV9QQU5FTF9URlQsCiB9OwogCiBzdHJ1Y3QgaXB1X2RpX3NpZ25hbF9jZmcgewotICAgICAgIHVuc2lnbmVkIGRhdGFtYXNrX2VuOjE7Ci0gICAgICAgdW5zaWduZWQgY2xrc2VsX2VuOjE7Ci0gICAgICAgdW5zaWduZWQgY2xraWRsZV9lbjoxOwotICAgICAgIHVuc2lnbmVkIGRhdGFfcG9sOjE7ICAgIC8qIHRydWUgPSBpbnZlcnRlZCAqLwotICAgICAgIHVuc2lnbmVkIGNsa19wb2w6MTsgICAgIC8qIHRydWUgPSByaXNpbmcgZWRnZSAqLwotICAgICAgIHVuc2lnbmVkIGVuYWJsZV9wb2w6MTsKLSAgICAgICB1bnNpZ25lZCBIc3luY19wb2w6MTsgICAvKiB0cnVlID0gYWN0aXZlIGhpZ2ggKi8KLSAgICAgICB1bnNpZ25lZCBWc3luY19wb2w6MTsKKwl1bnNpZ25lZCBkYXRhbWFza19lbjoxOworCXVuc2lnbmVkIGNsa3NlbF9lbjoxOworCXVuc2lnbmVkIGNsa2lkbGVfZW46MTsKKwl1bnNpZ25lZCBkYXRhX3BvbDoxOwkvKiB0cnVlID0gaW52ZXJ0ZWQgKi8KKwl1bnNpZ25lZCBjbGtfcG9sOjE7CS8qIHRydWUgPSByaXNpbmcgZWRnZSAqLworCXVuc2lnbmVkIGVuYWJsZV9wb2w6MTsKKwl1bnNpZ25lZCBIc3luY19wb2w6MTsJLyogdHJ1ZSA9IGFjdGl2ZSBoaWdoICovCisJdW5zaWduZWQgVnN5bmNfcG9sOjE7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBteDNmYl9tb2RlZGJbXSA9IHsKLSAgICAgICB7Ci0gICAgICAgICAgICAgICAvKiAyNDB4MzIwIEAgNjAgSHogKi8KLSAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJTaGFycC1RVkdBIiwKLSAgICAgICAgICAgICAgIC5yZWZyZXNoICAgICAgICA9IDYwLAotICAgICAgICAgICAgICAgLnhyZXMgICAgICAgICAgID0gMjQwLAotICAgICAgICAgICAgICAgLnlyZXMgICAgICAgICAgID0gMzIwLAotICAgICAgICAgICAgICAgLnBpeGNsb2NrICAgICAgID0gMTg1OTI1LAotICAgICAgICAgICAgICAgLmxlZnRfbWFyZ2luICAgID0gOSwKLSAgICAgICAgICAgICAgIC5yaWdodF9tYXJnaW4gICA9IDE2LAotICAgICAgICAgICAgICAgLnVwcGVyX21hcmdpbiAgID0gNywKLSAgICAgICAgICAgICAgIC5sb3dlcl9tYXJnaW4gICA9IDksCi0gICAgICAgICAgICAgICAuaHN5bmNfbGVuICAgICAgPSAxLAotICAgICAgICAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMSwKLSAgICAgICAgICAgICAgIC5zeW5jICAgICAgICAgICA9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19TSEFSUF9NT0RFIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZCX1NZTkNfQ0xLX0lOVkVSVCB8IEZCX1NZTkNfREFUQV9JTlZFUlQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkJfU1lOQ19DTEtfSURMRV9FTiwKLSAgICAgICAgICAgICAgIC52bW9kZSAgICAgICAgICA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0gICAgICAgICAgICAgICAuZmxhZyAgICAgICAgICAgPSAwLAotICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgIC8qIDI0MHgzMyBAIDYwIEh6ICovCi0gICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiU2hhcnAtQ0xJIiwKLSAgICAgICAgICAgICAgIC5yZWZyZXNoICAgICAgICA9IDYwLAotICAgICAgICAgICAgICAgLnhyZXMgICAgICAgICAgID0gMjQwLAotICAgICAgICAgICAgICAgLnlyZXMgICAgICAgICAgID0gMzMsCi0gICAgICAgICAgICAgICAucGl4Y2xvY2sgICAgICAgPSAxODU5MjUsCi0gICAgICAgICAgICAgICAubGVmdF9tYXJnaW4gICAgPSA5LAotICAgICAgICAgICAgICAgLnJpZ2h0X21hcmdpbiAgID0gMTYsCi0gICAgICAgICAgICAgICAudXBwZXJfbWFyZ2luICAgPSA3LAotICAgICAgICAgICAgICAgLmxvd2VyX21hcmdpbiAgID0gOSArIDI4NywKLSAgICAgICAgICAgICAgIC5oc3luY19sZW4gICAgICA9IDEsCi0gICAgICAgICAgICAgICAudnN5bmNfbGVuICAgICAgPSAxLAotICAgICAgICAgICAgICAgLnN5bmMgICAgICAgICAgID0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1NIQVJQX01PREUgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkJfU1lOQ19DTEtfSU5WRVJUIHwgRkJfU1lOQ19EQVRBX0lOVkVSVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQl9TWU5DX0NMS19JRExFX0VOLAotICAgICAgICAgICAgICAgLnZtb2RlICAgICAgICAgID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLSAgICAgICAgICAgICAgIC5mbGFnICAgICAgICAgICA9IDAsCi0gICAgICAgfSwgewotICAgICAgICAgICAgICAgLyogNjQweDQ4MCBAIDYwIEh6ICovCi0gICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiTkVDLVZHQSIsCi0gICAgICAgICAgICAgICAucmVmcmVzaCAgICAgICAgPSA2MCwKLSAgICAgICAgICAgICAgIC54cmVzICAgICAgICAgICA9IDY0MCwKLSAgICAgICAgICAgICAgIC55cmVzICAgICAgICAgICA9IDQ4MCwKLSAgICAgICAgICAgICAgIC5waXhjbG9jayAgICAgICA9IDM4MjU1LAotICAgICAgICAgICAgICAgLmxlZnRfbWFyZ2luICAgID0gMTQ0LAotICAgICAgICAgICAgICAgLnJpZ2h0X21hcmdpbiAgID0gMCwKLSAgICAgICAgICAgICAgIC51cHBlcl9tYXJnaW4gICA9IDM0LAotICAgICAgICAgICAgICAgLmxvd2VyX21hcmdpbiAgID0gNDAsCi0gICAgICAgICAgICAgICAuaHN5bmNfbGVuICAgICAgPSAxLAotICAgICAgICAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMSwKLSAgICAgICAgICAgICAgIC5zeW5jICAgICAgICAgICA9IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCB8IEZCX1NZTkNfT0VfQUNUX0hJR0gsCi0gICAgICAgICAgICAgICAudm1vZGUgICAgICAgICAgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotICAgICAgICAgICAgICAgLmZsYWcgICAgICAgICAgID0gMCwKLSAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAvKiBOVFNDIFRWIG91dHB1dCAqLwotICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIlRWLU5UU0MiLAotICAgICAgICAgICAgICAgLnJlZnJlc2ggICAgICAgID0gNjAsCi0gICAgICAgICAgICAgICAueHJlcyAgICAgICAgICAgPSA2NDAsCi0gICAgICAgICAgICAgICAueXJlcyAgICAgICAgICAgPSA0ODAsCi0gICAgICAgICAgICAgICAucGl4Y2xvY2sgICAgICAgPSAzNzUzOCwKLSAgICAgICAgICAgICAgIC5sZWZ0X21hcmdpbiAgICA9IDM4LAotICAgICAgICAgICAgICAgLnJpZ2h0X21hcmdpbiAgID0gODU4IC0gNjQwIC0gMzggLSAzLAotICAgICAgICAgICAgICAgLnVwcGVyX21hcmdpbiAgID0gMzYsCi0gICAgICAgICAgICAgICAubG93ZXJfbWFyZ2luICAgPSA1MTggLSA0ODAgLSAzNiAtIDEsCi0gICAgICAgICAgICAgICAuaHN5bmNfbGVuICAgICAgPSAzLAotICAgICAgICAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMSwKLSAgICAgICAgICAgICAgIC5zeW5jICAgICAgICAgICA9IDAsCi0gICAgICAgICAgICAgICAudm1vZGUgICAgICAgICAgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotICAgICAgICAgICAgICAgLmZsYWcgICAgICAgICAgID0gMCwKLSAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAvKiBQQUwgVFYgb3V0cHV0ICovCi0gICAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiVFYtUEFMIiwKLSAgICAgICAgICAgICAgIC5yZWZyZXNoICAgICAgICA9IDUwLAotICAgICAgICAgICAgICAgLnhyZXMgICAgICAgICAgID0gNjQwLAotICAgICAgICAgICAgICAgLnlyZXMgICAgICAgICAgID0gNDgwLAotICAgICAgICAgICAgICAgLnBpeGNsb2NrICAgICAgID0gMzc1MzgsCi0gICAgICAgICAgICAgICAubGVmdF9tYXJnaW4gICAgPSAzOCwKLSAgICAgICAgICAgICAgIC5yaWdodF9tYXJnaW4gICA9IDk2MCAtIDY0MCAtIDM4IC0gMzIsCi0gICAgICAgICAgICAgICAudXBwZXJfbWFyZ2luICAgPSAzMiwKLSAgICAgICAgICAgICAgIC5sb3dlcl9tYXJnaW4gICA9IDU1NSAtIDQ4MCAtIDMyIC0gMywKLSAgICAgICAgICAgICAgIC5oc3luY19sZW4gICAgICA9IDMyLAotICAgICAgICAgICAgICAgLnZzeW5jX2xlbiAgICAgID0gMywKLSAgICAgICAgICAgICAgIC5zeW5jICAgICAgICAgICA9IDAsCi0gICAgICAgICAgICAgICAudm1vZGUgICAgICAgICAgPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotICAgICAgICAgICAgICAgLmZsYWcgICAgICAgICAgID0gMCwKLSAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAvKiBUViBvdXRwdXQgVkdBIG1vZGUsIDY0MHg0ODAgQCA2NSBIeiAqLwotICAgICAgICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIlRWLVZHQSIsCi0gICAgICAgICAgICAgICAucmVmcmVzaCAgICAgICAgPSA2MCwKLSAgICAgICAgICAgICAgIC54cmVzICAgICAgICAgICA9IDY0MCwKLSAgICAgICAgICAgICAgIC55cmVzICAgICAgICAgICA9IDQ4MCwKLSAgICAgICAgICAgICAgIC5waXhjbG9jayAgICAgICA9IDQwNTc0LAotICAgICAgICAgICAgICAgLmxlZnRfbWFyZ2luICAgID0gMzUsCi0gICAgICAgICAgICAgICAucmlnaHRfbWFyZ2luICAgPSA0NSwKLSAgICAgICAgICAgICAgIC51cHBlcl9tYXJnaW4gICA9IDksCi0gICAgICAgICAgICAgICAubG93ZXJfbWFyZ2luICAgPSAxLAotICAgICAgICAgICAgICAgLmhzeW5jX2xlbiAgICAgID0gNDYsCi0gICAgICAgICAgICAgICAudnN5bmNfbGVuICAgICAgPSA1LAotICAgICAgICAgICAgICAgLnN5bmMgICAgICAgICAgID0gMCwKLSAgICAgICAgICAgICAgIC52bW9kZSAgICAgICAgICA9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0gICAgICAgICAgICAgICAuZmxhZyAgICAgICAgICAgPSAwLAotICAgICAgIH0sCisJeworCQkvKiAyNDB4MzIwIEAgNjAgSHogKi8KKwkJLm5hbWUJCT0gIlNoYXJwLVFWR0EiLAorCQkucmVmcmVzaAk9IDYwLAorCQkueHJlcwkJPSAyNDAsCisJCS55cmVzCQk9IDMyMCwKKwkJLnBpeGNsb2NrCT0gMTg1OTI1LAorCQkubGVmdF9tYXJnaW4JPSA5LAorCQkucmlnaHRfbWFyZ2luCT0gMTYsCisJCS51cHBlcl9tYXJnaW4JPSA3LAorCQkubG93ZXJfbWFyZ2luCT0gOSwKKwkJLmhzeW5jX2xlbgk9IDEsCisJCS52c3luY19sZW4JPSAxLAorCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfU0hBUlBfTU9ERSB8CisJCQkJICBGQl9TWU5DX0NMS19JTlZFUlQgfCBGQl9TWU5DX0RBVEFfSU5WRVJUIHwKKwkJCQkgIEZCX1NZTkNfQ0xLX0lETEVfRU4sCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0sIHsKKwkJLyogMjQweDMzIEAgNjAgSHogKi8KKwkJLm5hbWUJCT0gIlNoYXJwLUNMSSIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDI0MCwKKwkJLnlyZXMJCT0gMzMsCisJCS5waXhjbG9jawk9IDE4NTkyNSwKKwkJLmxlZnRfbWFyZ2luCT0gOSwKKwkJLnJpZ2h0X21hcmdpbgk9IDE2LAorCQkudXBwZXJfbWFyZ2luCT0gNywKKwkJLmxvd2VyX21hcmdpbgk9IDkgKyAyODcsCisJCS5oc3luY19sZW4JPSAxLAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnN5bmMJCT0gRkJfU1lOQ19IT1JfSElHSF9BQ1QgfCBGQl9TWU5DX1NIQVJQX01PREUgfAorCQkJCSAgRkJfU1lOQ19DTEtfSU5WRVJUIHwgRkJfU1lOQ19EQVRBX0lOVkVSVCB8CisJCQkJICBGQl9TWU5DX0NMS19JRExFX0VOLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwkJLmZsYWcJCT0gMCwKKwl9LCB7CisJCS8qIDY0MHg0ODAgQCA2MCBIeiAqLworCQkubmFtZQkJPSAiTkVDLVZHQSIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSAzODI1NSwKKwkJLmxlZnRfbWFyZ2luCT0gMTQ0LAorCQkucmlnaHRfbWFyZ2luCT0gMCwKKwkJLnVwcGVyX21hcmdpbgk9IDM0LAorCQkubG93ZXJfbWFyZ2luCT0gNDAsCisJCS5oc3luY19sZW4JPSAxLAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnN5bmMJCT0gRkJfU1lOQ19WRVJUX0hJR0hfQUNUIHwgRkJfU1lOQ19PRV9BQ1RfSElHSCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJCS5mbGFnCQk9IDAsCisJfSwgeworCQkvKiBOVFNDIFRWIG91dHB1dCAqLworCQkubmFtZQkJPSAiVFYtTlRTQyIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSAzNzUzOCwKKwkJLmxlZnRfbWFyZ2luCT0gMzgsCisJCS5yaWdodF9tYXJnaW4JPSA4NTggLSA2NDAgLSAzOCAtIDMsCisJCS51cHBlcl9tYXJnaW4JPSAzNiwKKwkJLmxvd2VyX21hcmdpbgk9IDUxOCAtIDQ4MCAtIDM2IC0gMSwKKwkJLmhzeW5jX2xlbgk9IDMsCisJCS52c3luY19sZW4JPSAxLAorCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwkJLmZsYWcJCT0gMCwKKwl9LCB7CisJCS8qIFBBTCBUViBvdXRwdXQgKi8KKwkJLm5hbWUJCT0gIlRWLVBBTCIsCisJCS5yZWZyZXNoCT0gNTAsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSAzNzUzOCwKKwkJLmxlZnRfbWFyZ2luCT0gMzgsCisJCS5yaWdodF9tYXJnaW4JPSA5NjAgLSA2NDAgLSAzOCAtIDMyLAorCQkudXBwZXJfbWFyZ2luCT0gMzIsCisJCS5sb3dlcl9tYXJnaW4JPSA1NTUgLSA0ODAgLSAzMiAtIDMsCisJCS5oc3luY19sZW4JPSAzMiwKKwkJLnZzeW5jX2xlbgk9IDMsCisJCS5zeW5jCQk9IDAsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0sIHsKKwkJLyogVFYgb3V0cHV0IFZHQSBtb2RlLCA2NDB4NDgwIEAgNjUgSHogKi8KKwkJLm5hbWUJCT0gIlRWLVZHQSIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSA0MDU3NCwKKwkJLmxlZnRfbWFyZ2luCT0gMzUsCisJCS5yaWdodF9tYXJnaW4JPSA0NSwKKwkJLnVwcGVyX21hcmdpbgk9IDksCisJCS5sb3dlcl9tYXJnaW4JPSAxLAorCQkuaHN5bmNfbGVuCT0gNDYsCisJCS52c3luY19sZW4JPSA1LAorCQkuc3luYwkJPSAwLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwkJLmZsYWcJCT0gMCwKKwl9LAogfTsKIAogc3RydWN0IG14M2ZiX2RhdGEgewotICAgICAgIHN0cnVjdCBmYl9pbmZvICAgICAgICAgICpmYmk7Ci0gICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgYmFja2xpZ2h0X2xldmVsOwotICAgICAgIHZvaWQgX19pb21lbSAgICAgICAgICAgICpyZWdfYmFzZTsKLSAgICAgICBzcGlubG9ja190ICAgICAgICAgICAgICBsb2NrOwotICAgICAgIHN0cnVjdCBkZXZpY2UgICAgICAgICAgICpkZXY7CisJc3RydWN0IGZiX2luZm8JCSpmYmk7CisJaW50CQkJYmFja2xpZ2h0X2xldmVsOworCXZvaWQgX19pb21lbQkJKnJlZ19iYXNlOworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGRldmljZQkJKmRldjsKIAotICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgIGhfc3RhcnRfd2lkdGg7Ci0gICAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgdl9zdGFydF93aWR0aDsKKwl1aW50MzJfdAkJaF9zdGFydF93aWR0aDsKKwl1aW50MzJfdAkJdl9zdGFydF93aWR0aDsKIH07CiAKIHN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0IHsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAgICAgICAqbXgzZmI7Ci0gICAgICAgZW51bSBpcHVfY2hhbm5lbCAgICAgICAgaWQ7CisJc3RydWN0IG14M2ZiX2RhdGEJKm14M2ZiOworCWVudW0gaXB1X2NoYW5uZWwJaWQ7CiB9OwogCiAvKiBNWDMgc3BlY2lmaWMgZnJhbWVidWZmZXIgaW5mb3JtYXRpb24uICovCiBzdHJ1Y3QgbXgzZmJfaW5mbyB7Ci0gICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFuazsKLSAgICAgICBlbnVtIGlwdV9jaGFubmVsICAgICAgICAgICAgICAgIGlwdV9jaDsKLSAgICAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9pcHVfYnVmOworCWludAkJCQlibGFuazsKKwllbnVtIGlwdV9jaGFubmVsCQlpcHVfY2g7CisJdWludDMyX3QJCQljdXJfaXB1X2J1ZjsKIAotICAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNldWRvX3BhbGV0dGVbMTZdOworCXUzMgkJCQlwc2V1ZG9fcGFsZXR0ZVsxNl07CiAKLSAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiAgICAgICAgICAgICAgIGZsaXBfY21wbDsKLSAgICAgICBzdHJ1Y3QgbXV0ZXggICAgICAgICAgICAgICAgICAgIG11dGV4OyAgLyogUHJvdGVjdHMgZmItb3BzICovCi0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgICAgICAgICAgICAgICAqbXgzZmI7Ci0gICAgICAgc3RydWN0IGlkbWFjX2NoYW5uZWwgICAgICAgICAgICAqaWRtYWNfY2hhbm5lbDsKLSAgICAgICBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgICp0eGQ7Ci0gICAgICAgZG1hX2Nvb2tpZV90ICAgICAgICAgICAgICAgICAgICBjb29raWU7Ci0gICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgICAgICAgICBzZ1syXTsKKwlzdHJ1Y3QgY29tcGxldGlvbgkJZmxpcF9jbXBsOworCXN0cnVjdCBtdXRleAkJCW11dGV4OwkvKiBQcm90ZWN0cyBmYi1vcHMgKi8KKwlzdHJ1Y3QgbXgzZmJfZGF0YQkJKm14M2ZiOworCXN0cnVjdCBpZG1hY19jaGFubmVsCQkqaWRtYWNfY2hhbm5lbDsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IJKnR4ZDsKKwlkbWFfY29va2llX3QJCQljb29raWU7CisJc3RydWN0IHNjYXR0ZXJsaXN0CQlzZ1syXTsKIAotICAgICAgIHUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luYzsgICAvKiBwcmVzZXJ2ZSB2YXItPnN5bmMgZmxhZ3MgKi8KKwl1MzIJCQkJc3luYzsJLyogcHJlc2VydmUgdmFyLT5zeW5jIGZsYWdzICovCiB9OwogCiBzdGF0aWMgdm9pZCBteDNmYl9kbWFfZG9uZSh2b2lkICopOwpAQCAtMjc4LDM4OSArMjc4LDM4OSBAQAogCiBzdGF0aWMgdTMyIG14M2ZiX3JlYWRfcmVnKHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiwgdW5zaWduZWQgbG9uZyByZWcpCiB7Ci0gICAgICAgcmV0dXJuIF9fcmF3X3JlYWRsKG14M2ZiLT5yZWdfYmFzZSArIHJlZyk7CisJcmV0dXJuIF9fcmF3X3JlYWRsKG14M2ZiLT5yZWdfYmFzZSArIHJlZyk7CiB9CiAKIHN0YXRpYyB2b2lkIG14M2ZiX3dyaXRlX3JlZyhzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIsIHUzMiB2YWx1ZSwgdW5zaWduZWQgbG9uZyByZWcpCiB7Ci0gICAgICAgX19yYXdfd3JpdGVsKHZhbHVlLCBteDNmYi0+cmVnX2Jhc2UgKyByZWcpOworCV9fcmF3X3dyaXRlbCh2YWx1ZSwgbXgzZmItPnJlZ19iYXNlICsgcmVnKTsKIH0KIAogc3RhdGljIGNvbnN0IHVpbnQzMl90IGRpX21hcHBpbmdzW10gPSB7Ci0gICAgICAgMHgxNjAwQUFBQSwgMHgwMEUwNTU1NSwgMHgwMDA3MDAwMCwgMywgIC8qIFJHQjg4OCAqLwotICAgICAgIDB4MDAwNTAwMEYsIDB4MDAwQjAwMEYsIDB4MDAxMTAwMEYsIDEsICAvKiBSR0I2NjYgKi8KLSAgICAgICAweDAwMTEwMDBGLCAweDAwMEIwMDBGLCAweDAwMDUwMDBGLCAxLCAgLyogQkdSNjY2ICovCi0gICAgICAgMHgwMDA0MDAzRiwgMHgwMDBBMDAwRiwgMHgwMDBGMDAzRiwgMSAgIC8qIFJHQjU2NSAqLworCTB4MTYwMEFBQUEsIDB4MDBFMDU1NTUsIDB4MDAwNzAwMDAsIDMsCS8qIFJHQjg4OCAqLworCTB4MDAwNTAwMEYsIDB4MDAwQjAwMEYsIDB4MDAxMTAwMEYsIDEsCS8qIFJHQjY2NiAqLworCTB4MDAxMTAwMEYsIDB4MDAwQjAwMEYsIDB4MDAwNTAwMEYsIDEsCS8qIEJHUjY2NiAqLworCTB4MDAwNDAwM0YsIDB4MDAwQTAwMEYsIDB4MDAwRjAwM0YsIDEJLyogUkdCNTY1ICovCiB9OwogCiBzdGF0aWMgdm9pZCBzZGNfZmJfaW5pdChzdHJ1Y3QgbXgzZmJfaW5mbyAqZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IGZiaS0+bXgzZmI7Ci0gICAgICAgdWludDMyX3QgcmVnOworCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IGZiaS0+bXgzZmI7CisJdWludDMyX3QgcmVnOwogCi0gICAgICAgcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CisJcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CiAKLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8IFNEQ19DT01fQkdfRU4sIFNEQ19DT01fQ09ORik7CisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcgfCBTRENfQ09NX0JHX0VOLCBTRENfQ09NX0NPTkYpOwogfQogCiAvKiBSZXR1cm5zIGVuYWJsZWQgZmxhZyBiZWZvcmUgdW5pbml0ICovCiBzdGF0aWMgdWludDMyX3Qgc2RjX2ZiX3VuaW5pdChzdHJ1Y3QgbXgzZmJfaW5mbyAqZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IGZiaS0+bXgzZmI7Ci0gICAgICAgdWludDMyX3QgcmVnOworCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IGZiaS0+bXgzZmI7CisJdWludDMyX3QgcmVnOwogCi0gICAgICAgcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CisJcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CiAKLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyAmIH5TRENfQ09NX0JHX0VOLCBTRENfQ09NX0NPTkYpOworCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnICYgflNEQ19DT01fQkdfRU4sIFNEQ19DT01fQ09ORik7CiAKLSAgICAgICByZXR1cm4gcmVnICYgU0RDX0NPTV9CR19FTjsKKwlyZXR1cm4gcmVnICYgU0RDX0NPTV9CR19FTjsKIH0KIAogc3RhdGljIHZvaWQgc2RjX2VuYWJsZV9jaGFubmVsKHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IG14M19mYmktPm14M2ZiOwotICAgICAgIHN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IG14M19mYmktPmlkbWFjX2NoYW5uZWw7Ci0gICAgICAgc3RydWN0IGRtYV9jaGFuICpkbWFfY2hhbiA9ICZpY2hhbi0+ZG1hX2NoYW47Ci0gICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICBkbWFfY29va2llX3QgY29va2llOworCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IG14M19mYmktPm14M2ZiOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IG14M19mYmktPmlkbWFjX2NoYW5uZWw7CisJc3RydWN0IGRtYV9jaGFuICpkbWFfY2hhbiA9ICZpY2hhbi0+ZG1hX2NoYW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlkbWFfY29va2llX3QgY29va2llOwogCi0gICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LCAibXgzZmJpICVwLCBkZXNjICVwLCBzZyAlcFxuIiwgbXgzX2ZiaSwKLSAgICAgICAgICAgICAgIHRvX3R4X2Rlc2MobXgzX2ZiaS0+dHhkKSwgdG9fdHhfZGVzYyhteDNfZmJpLT50eGQpLT5zZyk7CisJZGV2X2RiZyhteDNmYi0+ZGV2LCAibXgzZmJpICVwLCBkZXNjICVwLCBzZyAlcFxuIiwgbXgzX2ZiaSwKKwkJdG9fdHhfZGVzYyhteDNfZmJpLT50eGQpLCB0b190eF9kZXNjKG14M19mYmktPnR4ZCktPnNnKTsKIAotICAgICAgIC8qIFRoaXMgZW5hYmxlcyB0aGUgY2hhbm5lbCAqLwotICAgICAgIGlmIChteDNfZmJpLT5jb29raWUgPCAwKSB7Ci0gICAgICAgICAgICAgICBteDNfZmJpLT50eGQgPSBkbWFfY2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhkbWFfY2hhbiwKLSAgICAgICAgICAgICAgICAgICAgICZteDNfZmJpLT5zZ1swXSwgMSwgRE1BX1RPX0RFVklDRSwgRE1BX1BSRVBfSU5URVJSVVBUKTsKLSAgICAgICAgICAgICAgIGlmICghbXgzX2ZiaS0+dHhkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIobXgzZmItPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBkZXNjcmlwdG9yIG9uICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtYV9jaGFuLT5jaGFuX2lkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgfQorCS8qIFRoaXMgZW5hYmxlcyB0aGUgY2hhbm5lbCAqLworCWlmIChteDNfZmJpLT5jb29raWUgPCAwKSB7CisJCW14M19mYmktPnR4ZCA9IGRtYV9jaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKGRtYV9jaGFuLAorCQkgICAgICAmbXgzX2ZiaS0+c2dbMF0sIDEsIERNQV9UT19ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCk7CisJCWlmICghbXgzX2ZiaS0+dHhkKSB7CisJCQlkZXZfZXJyKG14M2ZiLT5kZXYsICJDYW5ub3QgYWxsb2NhdGUgZGVzY3JpcHRvciBvbiAlZFxuIiwKKwkJCQlkbWFfY2hhbi0+Y2hhbl9pZCk7CisJCQlyZXR1cm47CisJCX0KIAotICAgICAgICAgICAgICAgbXgzX2ZiaS0+dHhkLT5jYWxsYmFja19wYXJhbSAgICA9IG14M19mYmktPnR4ZDsKLSAgICAgICAgICAgICAgIG14M19mYmktPnR4ZC0+Y2FsbGJhY2sgICAgICAgICAgPSBteDNmYl9kbWFfZG9uZTsKKwkJbXgzX2ZiaS0+dHhkLT5jYWxsYmFja19wYXJhbQk9IG14M19mYmktPnR4ZDsKKwkJbXgzX2ZiaS0+dHhkLT5jYWxsYmFjawkJPSBteDNmYl9kbWFfZG9uZTsKIAotICAgICAgICAgICAgICAgY29va2llID0gbXgzX2ZiaS0+dHhkLT50eF9zdWJtaXQobXgzX2ZiaS0+dHhkKTsKLSAgICAgICAgICAgICAgIGRldl9kYmcobXgzZmItPmRldiwgIiVkOiBTdWJtaXQgJXAgIyVkIFslY11cbiIsIF9fTElORV9fLAotICAgICAgICAgICAgICAgICAgICAgIG14M19mYmktPnR4ZCwgY29va2llLCBsaXN0X2VtcHR5KCZpY2hhbi0+cXVldWUpID8gJy0nIDogJysnKTsKLSAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgaWYgKCFteDNfZmJpLT50eGQgfHwgIW14M19mYmktPnR4ZC0+dHhfc3VibWl0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIobXgzZmItPmRldiwgIkNhbm5vdCBlbmFibGUgY2hhbm5lbCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWFfY2hhbi0+Y2hhbl9pZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgIH0KKwkJY29va2llID0gbXgzX2ZiaS0+dHhkLT50eF9zdWJtaXQobXgzX2ZiaS0+dHhkKTsKKwkJZGV2X2RiZyhteDNmYi0+ZGV2LCAiJWQ6IFN1Ym1pdCAlcCAjJWQgWyVjXVxuIiwgX19MSU5FX18sCisJCSAgICAgICBteDNfZmJpLT50eGQsIGNvb2tpZSwgbGlzdF9lbXB0eSgmaWNoYW4tPnF1ZXVlKSA/ICctJyA6ICcrJyk7CisJfSBlbHNlIHsKKwkJaWYgKCFteDNfZmJpLT50eGQgfHwgIW14M19mYmktPnR4ZC0+dHhfc3VibWl0KSB7CisJCQlkZXZfZXJyKG14M2ZiLT5kZXYsICJDYW5ub3QgZW5hYmxlIGNoYW5uZWwgJWRcbiIsCisJCQkJZG1hX2NoYW4tPmNoYW5faWQpOworCQkJcmV0dXJuOworCQl9CiAKLSAgICAgICAgICAgICAgIC8qIEp1c3QgcmUtYWN0aXZhdGUgdGhlIHNhbWUgYnVmZmVyICovCi0gICAgICAgICAgICAgICBkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7Ci0gICAgICAgICAgICAgICBjb29raWUgPSBteDNfZmJpLT5jb29raWU7Ci0gICAgICAgICAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICIlZDogUmUtc3VibWl0ICVwICMlZCBbJWNdXG4iLCBfX0xJTkVfXywKLSAgICAgICAgICAgICAgICAgICAgICBteDNfZmJpLT50eGQsIGNvb2tpZSwgbGlzdF9lbXB0eSgmaWNoYW4tPnF1ZXVlKSA/ICctJyA6ICcrJyk7Ci0gICAgICAgfQorCQkvKiBKdXN0IHJlLWFjdGl2YXRlIHRoZSBzYW1lIGJ1ZmZlciAqLworCQlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhkbWFfY2hhbik7CisJCWNvb2tpZSA9IG14M19mYmktPmNvb2tpZTsKKwkJZGV2X2RiZyhteDNmYi0+ZGV2LCAiJWQ6IFJlLXN1Ym1pdCAlcCAjJWQgWyVjXVxuIiwgX19MSU5FX18sCisJCSAgICAgICBteDNfZmJpLT50eGQsIGNvb2tpZSwgbGlzdF9lbXB0eSgmaWNoYW4tPnF1ZXVlKSA/ICctJyA6ICcrJyk7CisJfQogCi0gICAgICAgaWYgKGNvb2tpZSA+PSAwKSB7Ci0gICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbXgzZmItPmxvY2ssIGZsYWdzKTsKLSAgICAgICAgICAgICAgIHNkY19mYl9pbml0KG14M19mYmkpOwotICAgICAgICAgICAgICAgbXgzX2ZiaS0+Y29va2llID0gY29va2llOwotICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGZsYWdzKTsKLSAgICAgICB9CisJaWYgKGNvb2tpZSA+PSAwKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZteDNmYi0+bG9jaywgZmxhZ3MpOworCQlzZGNfZmJfaW5pdChteDNfZmJpKTsKKwkJbXgzX2ZiaS0+Y29va2llID0gY29va2llOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNmYi0+bG9jaywgZmxhZ3MpOworCX0KIAotICAgICAgIC8qCi0gICAgICAgICogQXR0ZW50aW9uISBXaXRob3V0IHRoaXMgbXNsZWVwIHRoZSBjaGFubmVsIGtlZXBzIGdlbmVyYXRpbmcKLSAgICAgICAgKiBpbnRlcnJ1cHRzLiBOZXh0IHNkY19zZXRfYnJpZ2h0bmVzcygpIGlzIGdvaW5nIHRvIGJlIGNhbGxlZAotICAgICAgICAqIGZyb20gbXgzZmJfYmxhbmsoKS4KLSAgICAgICAgKi8KLSAgICAgICBtc2xlZXAoMik7CisJLyoKKwkgKiBBdHRlbnRpb24hIFdpdGhvdXQgdGhpcyBtc2xlZXAgdGhlIGNoYW5uZWwga2VlcHMgZ2VuZXJhdGluZworCSAqIGludGVycnVwdHMuIE5leHQgc2RjX3NldF9icmlnaHRuZXNzKCkgaXMgZ29pbmcgdG8gYmUgY2FsbGVkCisJICogZnJvbSBteDNmYl9ibGFuaygpLgorCSAqLworCW1zbGVlcCgyKTsKIH0KIAogc3RhdGljIHZvaWQgc2RjX2Rpc2FibGVfY2hhbm5lbChzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSkKIHsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBteDNfZmJpLT5teDNmYjsKLSAgICAgICB1aW50MzJfdCBlbmFibGVkOwotICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gbXgzX2ZiaS0+bXgzZmI7CisJdWludDMyX3QgZW5hYmxlZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0gICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm14M2ZiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M2ZiLT5sb2NrLCBmbGFncyk7CiAKLSAgICAgICBlbmFibGVkID0gc2RjX2ZiX3VuaW5pdChteDNfZmJpKTsKKwllbmFibGVkID0gc2RjX2ZiX3VuaW5pdChteDNfZmJpKTsKIAotICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M2ZiLT5sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGZsYWdzKTsKIAotICAgICAgIG14M19mYmktPnR4ZC0+Y2hhbi0+ZGV2aWNlLT5kZXZpY2VfdGVybWluYXRlX2FsbChteDNfZmJpLT50eGQtPmNoYW4pOwotICAgICAgIG14M19mYmktPnR4ZCA9IE5VTEw7Ci0gICAgICAgbXgzX2ZiaS0+Y29va2llID0gLUVJTlZBTDsKKwlteDNfZmJpLT50eGQtPmNoYW4tPmRldmljZS0+ZGV2aWNlX3Rlcm1pbmF0ZV9hbGwobXgzX2ZiaS0+dHhkLT5jaGFuKTsKKwlteDNfZmJpLT50eGQgPSBOVUxMOworCW14M19mYmktPmNvb2tpZSA9IC1FSU5WQUw7CiB9CiAKIC8qKgogICogc2RjX3NldF93aW5kb3dfcG9zKCkgLSBzZXQgd2luZG93IHBvc2l0aW9uIG9mIHRoZSByZXNwZWN0aXZlIHBsYW5lLgotICogQG14M2ZiOiAgICAgbXgzZmIgY29udGV4dC4KLSAqIEBjaGFubmVsOiAgIElQVSBETUFDIGNoYW5uZWwgSUQuCi0gKiBAeF9wb3M6ICAgICBYIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZWZ0IGNvcm5lciB0byBwbGFjZSB3aW5kb3cgYXQuCi0gKiBAeV9wb3M6ICAgICBZIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIHRvcCBsZWZ0IGNvcm5lciB0byBwbGFjZSB3aW5kb3cgYXQuCi0gKiBAcmV0dXJuOiAgICAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogQG14M2ZiOglteDNmYiBjb250ZXh0LgorICogQGNoYW5uZWw6CUlQVSBETUFDIGNoYW5uZWwgSUQuCisgKiBAeF9wb3M6CVggY29vcmRpbmF0ZSByZWxhdGl2ZSB0byB0aGUgdG9wIGxlZnQgY29ybmVyIHRvIHBsYWNlIHdpbmRvdyBhdC4KKyAqIEB5X3BvczoJWSBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSB0b3AgbGVmdCBjb3JuZXIgdG8gcGxhY2Ugd2luZG93IGF0LgorICogQHJldHVybjoJMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIGludCBzZGNfc2V0X3dpbmRvd19wb3Moc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiLCBlbnVtIGlwdV9jaGFubmVsIGNoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDE2X3QgeF9wb3MsIGludDE2X3QgeV9wb3MpCisJCQkgICAgICBpbnQxNl90IHhfcG9zLCBpbnQxNl90IHlfcG9zKQogewotICAgICAgIHhfcG9zICs9IG14M2ZiLT5oX3N0YXJ0X3dpZHRoOwotICAgICAgIHlfcG9zICs9IG14M2ZiLT52X3N0YXJ0X3dpZHRoOworCXhfcG9zICs9IG14M2ZiLT5oX3N0YXJ0X3dpZHRoOworCXlfcG9zICs9IG14M2ZiLT52X3N0YXJ0X3dpZHRoOwogCi0gICAgICAgaWYgKGNoYW5uZWwgIT0gSURNQUNfU0RDXzApCi0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoY2hhbm5lbCAhPSBJRE1BQ19TRENfMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsICh4X3BvcyA8PCAxNikgfCB5X3BvcywgU0RDX0JHX1BPUyk7Ci0gICAgICAgcmV0dXJuIDA7CisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCAoeF9wb3MgPDwgMTYpIHwgeV9wb3MsIFNEQ19CR19QT1MpOworCXJldHVybiAwOwogfQogCiAvKioKICAqIHNkY19pbml0X3BhbmVsKCkgLSBpbml0aWFsaXplIGEgc3luY2hyb25vdXMgTENEIHBhbmVsLgotICogQG14M2ZiOiAgICAgICAgICAgICBteDNmYiBjb250ZXh0LgotICogQHBhbmVsOiAgICAgICAgICAgICBwYW5lbCB0eXBlLgotICogQHBpeGVsX2NsazogICAgICAgICBkZXNpcmVkIHBpeGVsIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4KLSAqIEB3aWR0aDogICAgICAgICAgICAgd2lkdGggb2YgcGFuZWwgaW4gcGl4ZWxzLgotICogQGhlaWdodDogICAgICAgICAgICBoZWlnaHQgb2YgcGFuZWwgaW4gcGl4ZWxzLgotICogQHBpeGVsX2ZtdDogICAgICAgICBwaXhlbCBmb3JtYXQgb2YgYnVmZmVyIGFzIEZPVVJDQyBBU0NJSSBjb2RlLgotICogQGhfc3RhcnRfd2lkdGg6ICAgICBudW1iZXIgb2YgcGl4ZWwgY2xvY2tzIGJldHdlZW4gdGhlIEhTWU5DIHNpZ25hbCBwdWxzZQotICogICAgICAgICAgICAgICAgICAgICBhbmQgdGhlIHN0YXJ0IG9mIHZhbGlkIGRhdGEuCi0gKiBAaF9zeW5jX3dpZHRoOiAgICAgIHdpZHRoIG9mIHRoZSBIU1lOQyBzaWduYWwgaW4gdW5pdHMgb2YgcGl4ZWwgY2xvY2tzLgotICogQGhfZW5kX3dpZHRoOiAgICAgICBudW1iZXIgb2YgcGl4ZWwgY2xvY2tzIGJldHdlZW4gdGhlIGVuZCBvZiB2YWxpZCBkYXRhCi0gKiAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgSFNZTkMgc2lnbmFsIGZvciBuZXh0IGxpbmUuCi0gKiBAdl9zdGFydF93aWR0aDogICAgIG51bWJlciBvZiBsaW5lcyBiZXR3ZWVuIHRoZSBWU1lOQyBzaWduYWwgcHVsc2UgYW5kIHRoZQotICogICAgICAgICAgICAgICAgICAgICBzdGFydCBvZiB2YWxpZCBkYXRhLgotICogQHZfc3luY193aWR0aDogICAgICB3aWR0aCBvZiB0aGUgVlNZTkMgc2lnbmFsIGluIHVuaXRzIG9mIGxpbmVzCi0gKiBAdl9lbmRfd2lkdGg6ICAgICAgIG51bWJlciBvZiBsaW5lcyBiZXR3ZWVuIHRoZSBlbmQgb2YgdmFsaWQgZGF0YSBhbmQgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgIFZTWU5DIHNpZ25hbCBmb3IgbmV4dCBmcmFtZS4KLSAqIEBzaWc6ICAgICAgICAgICAgICAgYml0ZmllbGQgb2Ygc2lnbmFsIHBvbGFyaXRpZXMgZm9yIExDRCBpbnRlcmZhY2UuCi0gKiBAcmV0dXJuOiAgICAgICAgICAgIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiBAbXgzZmI6CQlteDNmYiBjb250ZXh0LgorICogQHBhbmVsOgkJcGFuZWwgdHlwZS4KKyAqIEBwaXhlbF9jbGs6CQlkZXNpcmVkIHBpeGVsIGNsb2NrIGZyZXF1ZW5jeSBpbiBIei4KKyAqIEB3aWR0aDoJCXdpZHRoIG9mIHBhbmVsIGluIHBpeGVscy4KKyAqIEBoZWlnaHQ6CQloZWlnaHQgb2YgcGFuZWwgaW4gcGl4ZWxzLgorICogQHBpeGVsX2ZtdDoJCXBpeGVsIGZvcm1hdCBvZiBidWZmZXIgYXMgRk9VUkNDIEFTQ0lJIGNvZGUuCisgKiBAaF9zdGFydF93aWR0aDoJbnVtYmVyIG9mIHBpeGVsIGNsb2NrcyBiZXR3ZWVuIHRoZSBIU1lOQyBzaWduYWwgcHVsc2UKKyAqCQkJYW5kIHRoZSBzdGFydCBvZiB2YWxpZCBkYXRhLgorICogQGhfc3luY193aWR0aDoJd2lkdGggb2YgdGhlIEhTWU5DIHNpZ25hbCBpbiB1bml0cyBvZiBwaXhlbCBjbG9ja3MuCisgKiBAaF9lbmRfd2lkdGg6CW51bWJlciBvZiBwaXhlbCBjbG9ja3MgYmV0d2VlbiB0aGUgZW5kIG9mIHZhbGlkIGRhdGEKKyAqCQkJYW5kIHRoZSBIU1lOQyBzaWduYWwgZm9yIG5leHQgbGluZS4KKyAqIEB2X3N0YXJ0X3dpZHRoOgludW1iZXIgb2YgbGluZXMgYmV0d2VlbiB0aGUgVlNZTkMgc2lnbmFsIHB1bHNlIGFuZCB0aGUKKyAqCQkJc3RhcnQgb2YgdmFsaWQgZGF0YS4KKyAqIEB2X3N5bmNfd2lkdGg6CXdpZHRoIG9mIHRoZSBWU1lOQyBzaWduYWwgaW4gdW5pdHMgb2YgbGluZXMKKyAqIEB2X2VuZF93aWR0aDoJbnVtYmVyIG9mIGxpbmVzIGJldHdlZW4gdGhlIGVuZCBvZiB2YWxpZCBkYXRhIGFuZCB0aGUKKyAqCQkJVlNZTkMgc2lnbmFsIGZvciBuZXh0IGZyYW1lLgorICogQHNpZzoJCWJpdGZpZWxkIG9mIHNpZ25hbCBwb2xhcml0aWVzIGZvciBMQ0QgaW50ZXJmYWNlLgorICogQHJldHVybjoJCTAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgc2RjX2luaXRfcGFuZWwoc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiLCBlbnVtIGlwdV9wYW5lbCBwYW5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwaXhlbF9jbGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgd2lkdGgsIHVpbnQxNl90IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHBpeGVsX2ZtdCBwaXhlbF9mbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgaF9zdGFydF93aWR0aCwgdWludDE2X3QgaF9zeW5jX3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGhfZW5kX3dpZHRoLCB1aW50MTZfdCB2X3N0YXJ0X3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHZfc3luY193aWR0aCwgdWludDE2X3Qgdl9lbmRfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlwdV9kaV9zaWduYWxfY2ZnIHNpZykKKwkJCSAgdWludDMyX3QgcGl4ZWxfY2xrLAorCQkJICB1aW50MTZfdCB3aWR0aCwgdWludDE2X3QgaGVpZ2h0LAorCQkJICBlbnVtIHBpeGVsX2ZtdCBwaXhlbF9mbXQsCisJCQkgIHVpbnQxNl90IGhfc3RhcnRfd2lkdGgsIHVpbnQxNl90IGhfc3luY193aWR0aCwKKwkJCSAgdWludDE2X3QgaF9lbmRfd2lkdGgsIHVpbnQxNl90IHZfc3RhcnRfd2lkdGgsCisJCQkgIHVpbnQxNl90IHZfc3luY193aWR0aCwgdWludDE2X3Qgdl9lbmRfd2lkdGgsCisJCQkgIHN0cnVjdCBpcHVfZGlfc2lnbmFsX2NmZyBzaWcpCiB7Ci0gICAgICAgdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwotICAgICAgIHVpbnQzMl90IHJlZzsKLSAgICAgICB1aW50MzJfdCBvbGRfY29uZjsKLSAgICAgICB1aW50MzJfdCBkaXY7Ci0gICAgICAgc3RydWN0IGNsayAqaXB1X2NsazsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdWludDMyX3QgcmVnOworCXVpbnQzMl90IG9sZF9jb25mOworCXVpbnQzMl90IGRpdjsKKwlzdHJ1Y3QgY2xrICppcHVfY2xrOwogCi0gICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LCAicGFuZWwgc2l6ZSA9ICVkIHggJWQiLCB3aWR0aCwgaGVpZ2h0KTsKKwlkZXZfZGJnKG14M2ZiLT5kZXYsICJwYW5lbCBzaXplID0gJWQgeCAlZCIsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgICAgaWYgKHZfc3luY193aWR0aCA9PSAwIHx8IGhfc3luY193aWR0aCA9PSAwKQotICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKHZfc3luY193aWR0aCA9PSAwIHx8IGhfc3luY193aWR0aCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgICAgIC8qIEluaXQgcGFuZWwgc2l6ZSBhbmQgYmxhbmtpbmcgcGVyaW9kcyAqLwotICAgICAgIHJlZyA9ICgodWludDMyX3QpIChoX3N5bmNfd2lkdGggLSAxKSA8PCAyNikgfAotICAgICAgICAgICAgICAgKCh1aW50MzJfdCkgKHdpZHRoICsgaF9zdGFydF93aWR0aCArIGhfZW5kX3dpZHRoIC0gMSkgPDwgMTYpOwotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnLCBTRENfSE9SX0NPTkYpOworCS8qIEluaXQgcGFuZWwgc2l6ZSBhbmQgYmxhbmtpbmcgcGVyaW9kcyAqLworCXJlZyA9ICgodWludDMyX3QpIChoX3N5bmNfd2lkdGggLSAxKSA8PCAyNikgfAorCQkoKHVpbnQzMl90KSAod2lkdGggKyBoX3N0YXJ0X3dpZHRoICsgaF9lbmRfd2lkdGggLSAxKSA8PCAxNik7CisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcsIFNEQ19IT1JfQ09ORik7CiAKICNpZmRlZiBERUJVRwotICAgICAgIHByaW50ayhLRVJOX0NPTlQgIiBob3JfY29uZiAleCwiLCByZWcpOworCXByaW50ayhLRVJOX0NPTlQgIiBob3JfY29uZiAleCwiLCByZWcpOwogI2VuZGlmCiAKLSAgICAgICByZWcgPSAoKHVpbnQzMl90KSAodl9zeW5jX3dpZHRoIC0gMSkgPDwgMjYpIHwgU0RDX1ZfU1lOQ19XSURUSF9MIHwKLSAgICAgICAgICAgKCh1aW50MzJfdCkgKGhlaWdodCArIHZfc3RhcnRfd2lkdGggKyB2X2VuZF93aWR0aCAtIDEpIDw8IDE2KTsKLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZywgU0RDX1ZFUl9DT05GKTsKKwlyZWcgPSAoKHVpbnQzMl90KSAodl9zeW5jX3dpZHRoIC0gMSkgPDwgMjYpIHwgU0RDX1ZfU1lOQ19XSURUSF9MIHwKKwkgICAgKCh1aW50MzJfdCkgKGhlaWdodCArIHZfc3RhcnRfd2lkdGggKyB2X2VuZF93aWR0aCAtIDEpIDw8IDE2KTsKKwlteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZywgU0RDX1ZFUl9DT05GKTsKIAogI2lmZGVmIERFQlVHCi0gICAgICAgcHJpbnRrKEtFUk5fQ09OVCAiIHZlcl9jb25mICV4XG4iLCByZWcpOworCXByaW50ayhLRVJOX0NPTlQgIiB2ZXJfY29uZiAleFxuIiwgcmVnKTsKICNlbmRpZgogCi0gICAgICAgbXgzZmItPmhfc3RhcnRfd2lkdGggPSBoX3N0YXJ0X3dpZHRoOwotICAgICAgIG14M2ZiLT52X3N0YXJ0X3dpZHRoID0gdl9zdGFydF93aWR0aDsKKwlteDNmYi0+aF9zdGFydF93aWR0aCA9IGhfc3RhcnRfd2lkdGg7CisJbXgzZmItPnZfc3RhcnRfd2lkdGggPSB2X3N0YXJ0X3dpZHRoOwogCi0gICAgICAgc3dpdGNoIChwYW5lbCkgewotICAgICAgIGNhc2UgSVBVX1BBTkVMX1NIQVJQX1RGVDoKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgMHgwMEZEMDEwMkwsIFNEQ19TSEFSUF9DT05GXzEpOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCAweDAwRjUwMEY0TCwgU0RDX1NIQVJQX0NPTkZfMik7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIFNEQ19DT01fU0hBUlAgfCBTRENfQ09NX1RGVF9DT0xPUiwgU0RDX0NPTV9DT05GKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgSVBVX1BBTkVMX1RGVDoKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgU0RDX0NPTV9URlRfQ09MT1IsIFNEQ19DT01fQ09ORik7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgfQorCXN3aXRjaCAocGFuZWwpIHsKKwljYXNlIElQVV9QQU5FTF9TSEFSUF9URlQ6CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgMHgwMEZEMDEwMkwsIFNEQ19TSEFSUF9DT05GXzEpOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIDB4MDBGNTAwRjRMLCBTRENfU0hBUlBfQ09ORl8yKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBTRENfQ09NX1NIQVJQIHwgU0RDX0NPTV9URlRfQ09MT1IsIFNEQ19DT01fQ09ORik7CisJCWJyZWFrOworCWNhc2UgSVBVX1BBTkVMX1RGVDoKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBTRENfQ09NX1RGVF9DT0xPUiwgU0RDX0NPTV9DT05GKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0gICAgICAgLyogSW5pdCBjbG9ja2luZyAqLworCS8qIEluaXQgY2xvY2tpbmcgKi8KIAotICAgICAgIC8qCi0gICAgICAgICogQ2FsY3VsYXRlIGRpdmlkZXI6IGZyYWN0aW9uYWwgcGFydCBpcyA0IGJpdHMgc28gc2ltcGx5IG11bHRpcGxlIGJ5Ci0gICAgICAgICogMjQgdG8gZ2V0IGZyYWN0aW9uYWwgcGFydCwgYXMgbG9uZyBhcyB3ZSBzdGF5IHVuZGVyIH4yNTBNSHogYW5kIG9uCi0gICAgICAgICogaS5NWDMxIGl0IChIU1BfQ0xLKSBpcyA8PSAxNzhNSHouIEN1cnJlbnRseSAxMjguMjY3TUh6Ci0gICAgICAgICovCi0gICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LCAicGl4ZWwgY2xrID0gJWRcbiIsIHBpeGVsX2Nsayk7CisJLyoKKwkgKiBDYWxjdWxhdGUgZGl2aWRlcjogZnJhY3Rpb25hbCBwYXJ0IGlzIDQgYml0cyBzbyBzaW1wbHkgbXVsdGlwbGUgYnkKKwkgKiAyXjQgdG8gZ2V0IGZyYWN0aW9uYWwgcGFydCwgYXMgbG9uZyBhcyB3ZSBzdGF5IHVuZGVyIH4yNTBNSHogYW5kIG9uCisJICogaS5NWDMxIGl0IChIU1BfQ0xLKSBpcyA8PSAxNzhNSHouIEN1cnJlbnRseSAxMjguMjY3TUh6CisJICovCisJZGV2X2RiZyhteDNmYi0+ZGV2LCAicGl4ZWwgY2xrID0gJWRcbiIsIHBpeGVsX2Nsayk7CiAKLSAgICAgICBpcHVfY2xrID0gY2xrX2dldChteDNmYi0+ZGV2LCAiaXB1X2NsayIpOwotICAgICAgIGRpdiA9IGNsa19nZXRfcmF0ZShpcHVfY2xrKSAqIDE2IC8gcGl4ZWxfY2xrOwotICAgICAgIGNsa19wdXQoaXB1X2Nsayk7CisJaXB1X2NsayA9IGNsa19nZXQobXgzZmItPmRldiwgTlVMTCk7CisJZGl2ID0gY2xrX2dldF9yYXRlKGlwdV9jbGspICogMTYgLyBwaXhlbF9jbGs7CisJY2xrX3B1dChpcHVfY2xrKTsKIAotICAgICAgIGlmIChkaXYgPCAweDQwKSB7ICAgICAgIC8qIERpdmlkZXIgbGVzcyB0aGFuIDQgKi8KLSAgICAgICAgICAgICAgIGRldl9kYmcobXgzZmItPmRldiwKLSAgICAgICAgICAgICAgICAgICAgICAgIkluaXRQYW5lbCgpIC0gUGl4ZWwgY2xvY2sgZGl2aWRlciBsZXNzIHRoYW4gNFxuIik7Ci0gICAgICAgICAgICAgICBkaXYgPSAweDQwOwotICAgICAgIH0KKwlpZiAoZGl2IDwgMHg0MCkgewkvKiBEaXZpZGVyIGxlc3MgdGhhbiA0ICovCisJCWRldl9kYmcobXgzZmItPmRldiwKKwkJCSJJbml0UGFuZWwoKSAtIFBpeGVsIGNsb2NrIGRpdmlkZXIgbGVzcyB0aGFuIDRcbiIpOworCQlkaXYgPSAweDQwOworCX0KIAotICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm14M2ZiLT5sb2NrLCBsb2NrX2ZsYWdzKTsKIAotICAgICAgIC8qCi0gICAgICAgICogRElTUDNfSUZfQ0xLX0RPV05fV1IgaXMgaGFsZiB0aGUgZGl2aWRlciB2YWx1ZSBhbmQgMiBmcmFjdGlvbiBiaXRzCi0gICAgICAgICogZmV3ZXIuIFN1YnRyYWN0IDEgZXh0cmEgZnJvbSBESVNQM19JRl9DTEtfRE9XTl9XUiBiYXNlZCBvbiB0aW1pbmcKLSAgICAgICAgKiBkZWJ1Zy4gRElTUDNfSUZfQ0xLX1VQX1dSIGlzIDAKLSAgICAgICAgKi8KLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsICgoKGRpdiAvIDgpIC0gMSkgPDwgMjIpIHwgZGl2LCBESV9ESVNQM19USU1FX0NPTkYpOworCS8qCisJICogRElTUDNfSUZfQ0xLX0RPV05fV1IgaXMgaGFsZiB0aGUgZGl2aWRlciB2YWx1ZSBhbmQgMiBmcmFjdGlvbiBiaXRzCisJICogZmV3ZXIuIFN1YnRyYWN0IDEgZXh0cmEgZnJvbSBESVNQM19JRl9DTEtfRE9XTl9XUiBiYXNlZCBvbiB0aW1pbmcKKwkgKiBkZWJ1Zy4gRElTUDNfSUZfQ0xLX1VQX1dSIGlzIDAKKwkgKi8KKwlteDNmYl93cml0ZV9yZWcobXgzZmIsICgoKGRpdiAvIDgpIC0gMSkgPDwgMjIpIHwgZGl2LCBESV9ESVNQM19USU1FX0NPTkYpOwogCi0gICAgICAgLyogREkgc2V0dGluZ3MgKi8KLSAgICAgICBvbGRfY29uZiA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX0lGX0NPTkYpICYgMHg3OEZGRkZGRjsKLSAgICAgICBvbGRfY29uZiB8PSBzaWcuZGF0YW1hc2tfZW4gPDwgRElfRDNfREFUQU1TS19TSElGVCB8Ci0gICAgICAgICAgIHNpZy5jbGtzZWxfZW4gPDwgRElfRDNfQ0xLX1NFTF9TSElGVCB8Ci0gICAgICAgICAgIHNpZy5jbGtpZGxlX2VuIDw8IERJX0QzX0NMS19JRExFX1NISUZUOwotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgb2xkX2NvbmYsIERJX0RJU1BfSUZfQ09ORik7CisJLyogREkgc2V0dGluZ3MgKi8KKwlvbGRfY29uZiA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX0lGX0NPTkYpICYgMHg3OEZGRkZGRjsKKwlvbGRfY29uZiB8PSBzaWcuZGF0YW1hc2tfZW4gPDwgRElfRDNfREFUQU1TS19TSElGVCB8CisJICAgIHNpZy5jbGtzZWxfZW4gPDwgRElfRDNfQ0xLX1NFTF9TSElGVCB8CisJICAgIHNpZy5jbGtpZGxlX2VuIDw8IERJX0QzX0NMS19JRExFX1NISUZUOworCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgb2xkX2NvbmYsIERJX0RJU1BfSUZfQ09ORik7CiAKLSAgICAgICBvbGRfY29uZiA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX1NJR19QT0wpICYgMHhFMEZGRkZGRjsKLSAgICAgICBvbGRfY29uZiB8PSBzaWcuZGF0YV9wb2wgPDwgRElfRDNfREFUQV9QT0xfU0hJRlQgfAotICAgICAgICAgICBzaWcuY2xrX3BvbCA8PCBESV9EM19DTEtfUE9MX1NISUZUIHwKLSAgICAgICAgICAgc2lnLmVuYWJsZV9wb2wgPDwgRElfRDNfRFJEWV9TSEFSUF9QT0xfU0hJRlQgfAotICAgICAgICAgICBzaWcuSHN5bmNfcG9sIDw8IERJX0QzX0hTWU5DX1BPTF9TSElGVCB8Ci0gICAgICAgICAgIHNpZy5Wc3luY19wb2wgPDwgRElfRDNfVlNZTkNfUE9MX1NISUZUOwotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgb2xkX2NvbmYsIERJX0RJU1BfU0lHX1BPTCk7CisJb2xkX2NvbmYgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9TSUdfUE9MKSAmIDB4RTBGRkZGRkY7CisJb2xkX2NvbmYgfD0gc2lnLmRhdGFfcG9sIDw8IERJX0QzX0RBVEFfUE9MX1NISUZUIHwKKwkgICAgc2lnLmNsa19wb2wgPDwgRElfRDNfQ0xLX1BPTF9TSElGVCB8CisJICAgIHNpZy5lbmFibGVfcG9sIDw8IERJX0QzX0RSRFlfU0hBUlBfUE9MX1NISUZUIHwKKwkgICAgc2lnLkhzeW5jX3BvbCA8PCBESV9EM19IU1lOQ19QT0xfU0hJRlQgfAorCSAgICBzaWcuVnN5bmNfcG9sIDw8IERJX0QzX1ZTWU5DX1BPTF9TSElGVDsKKwlteDNmYl93cml0ZV9yZWcobXgzZmIsIG9sZF9jb25mLCBESV9ESVNQX1NJR19QT0wpOwogCi0gICAgICAgc3dpdGNoIChwaXhlbF9mbXQpIHsKLSAgICAgICBjYXNlIElQVV9QSVhfRk1UX1JHQjI0OgotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1swXSwgRElfRElTUDNfQjBfTUFQKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMV0sIERJX0RJU1AzX0IxX01BUCk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzJdLCBESV9ESVNQM19CMl9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9BQ0NfQ0MpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRpX21hcHBpbmdzWzNdIC0gMSkgPDwgMTIpLCBESV9ESVNQX0FDQ19DQyk7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIElQVV9QSVhfRk1UX1JHQjY2NjoKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbNF0sIERJX0RJU1AzX0IwX01BUCk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzVdLCBESV9ESVNQM19CMV9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1s2XSwgRElfRElTUDNfQjJfTUFQKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfQUNDX0NDKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChkaV9tYXBwaW5nc1s3XSAtIDEpIDw8IDEyKSwgRElfRElTUF9BQ0NfQ0MpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgY2FzZSBJUFVfUElYX0ZNVF9CR1I2NjY6Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzhdLCBESV9ESVNQM19CMF9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1s5XSwgRElfRElTUDNfQjFfTUFQKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMTBdLCBESV9ESVNQM19CMl9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9BQ0NfQ0MpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGRpX21hcHBpbmdzWzExXSAtIDEpIDw8IDEyKSwgRElfRElTUF9BQ0NfQ0MpOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMTJdLCBESV9ESVNQM19CMF9NQVApOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1sxM10sIERJX0RJU1AzX0IxX01BUCk7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzE0XSwgRElfRElTUDNfQjJfTUFQKTsKLSAgICAgICAgICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfQUNDX0NDKSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChkaV9tYXBwaW5nc1sxNV0gLSAxKSA8PCAxMiksIERJX0RJU1BfQUNDX0NDKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIH0KKwlzd2l0Y2ggKHBpeGVsX2ZtdCkgeworCWNhc2UgSVBVX1BJWF9GTVRfUkdCMjQ6CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMF0sIERJX0RJU1AzX0IwX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMV0sIERJX0RJU1AzX0IxX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMl0sIERJX0RJU1AzX0IyX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfQUNDX0NDKSB8CisJCQkgICAgICgoZGlfbWFwcGluZ3NbM10gLSAxKSA8PCAxMiksIERJX0RJU1BfQUNDX0NDKTsKKwkJYnJlYWs7CisJY2FzZSBJUFVfUElYX0ZNVF9SR0I2NjY6CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbNF0sIERJX0RJU1AzX0IwX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbNV0sIERJX0RJU1AzX0IxX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbNl0sIERJX0RJU1AzX0IyX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfQUNDX0NDKSB8CisJCQkgICAgICgoZGlfbWFwcGluZ3NbN10gLSAxKSA8PCAxMiksIERJX0RJU1BfQUNDX0NDKTsKKwkJYnJlYWs7CisJY2FzZSBJUFVfUElYX0ZNVF9CR1I2NjY6CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbOF0sIERJX0RJU1AzX0IwX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbOV0sIERJX0RJU1AzX0IxX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMTBdLCBESV9ESVNQM19CMl9NQVApOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX0FDQ19DQykgfAorCQkJICAgICAoKGRpX21hcHBpbmdzWzExXSAtIDEpIDw8IDEyKSwgRElfRElTUF9BQ0NfQ0MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIGRpX21hcHBpbmdzWzEyXSwgRElfRElTUDNfQjBfTUFQKTsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCBkaV9tYXBwaW5nc1sxM10sIERJX0RJU1AzX0IxX01BUCk7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgZGlfbWFwcGluZ3NbMTRdLCBESV9ESVNQM19CMl9NQVApOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX0FDQ19DQykgfAorCQkJICAgICAoKGRpX21hcHBpbmdzWzE1XSAtIDEpIDw8IDEyKSwgRElfRElTUF9BQ0NfQ0MpOworCQlicmVhazsKKwl9CiAKLSAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOwogCi0gICAgICAgZGV2X2RiZyhteDNmYi0+ZGV2LCAiRElfRElTUF9JRl9DT05GID0gMHglMDhYXG4iLAotICAgICAgICAgICAgICAgbXgzZmJfcmVhZF9yZWcobXgzZmIsIERJX0RJU1BfSUZfQ09ORikpOwotICAgICAgIGRldl9kYmcobXgzZmItPmRldiwgIkRJX0RJU1BfU0lHX1BPTCA9IDB4JTA4WFxuIiwKLSAgICAgICAgICAgICAgIG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBESV9ESVNQX1NJR19QT0wpKTsKLSAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICJESV9ESVNQM19USU1FX0NPTkYgPSAweCUwOFhcbiIsCi0gICAgICAgICAgICAgICBteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUDNfVElNRV9DT05GKSk7CisJZGV2X2RiZyhteDNmYi0+ZGV2LCAiRElfRElTUF9JRl9DT05GID0gMHglMDhYXG4iLAorCQlteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9JRl9DT05GKSk7CisJZGV2X2RiZyhteDNmYi0+ZGV2LCAiRElfRElTUF9TSUdfUE9MID0gMHglMDhYXG4iLAorCQlteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUF9TSUdfUE9MKSk7CisJZGV2X2RiZyhteDNmYi0+ZGV2LCAiRElfRElTUDNfVElNRV9DT05GID0gMHglMDhYXG4iLAorCQlteDNmYl9yZWFkX3JlZyhteDNmYiwgRElfRElTUDNfVElNRV9DT05GKSk7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCiAgKiBzZGNfc2V0X2NvbG9yX2tleSgpIC0gc2V0IHRoZSB0cmFuc3BhcmVudCBjb2xvciBrZXkgZm9yIFNEQyBncmFwaGljIHBsYW5lLgotICogQG14M2ZiOiAgICAgbXgzZmIgY29udGV4dC4KLSAqIEBjaGFubmVsOiAgIElQVSBETUFDIGNoYW5uZWwgSUQuCi0gKiBAZW5hYmxlOiAgICBib29sZWFuIHRvIGVuYWJsZSBvciBkaXNhYmxlIGNvbG9yIGtleWwuCi0gKiBAY29sb3Jfa2V5OiAyNC1iaXQgUkdCIGNvbG9yIHRvIHVzZSBhcyB0cmFuc3BhcmVudCBjb2xvciBrZXkuCi0gKiBAcmV0dXJuOiAgICAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogQG14M2ZiOglteDNmYiBjb250ZXh0LgorICogQGNoYW5uZWw6CUlQVSBETUFDIGNoYW5uZWwgSUQuCisgKiBAZW5hYmxlOglib29sZWFuIHRvIGVuYWJsZSBvciBkaXNhYmxlIGNvbG9yIGtleWwuCisgKiBAY29sb3Jfa2V5OgkyNC1iaXQgUkdCIGNvbG9yIHRvIHVzZSBhcyB0cmFuc3BhcmVudCBjb2xvciBrZXkuCisgKiBAcmV0dXJuOgkwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50IHNkY19zZXRfY29sb3Jfa2V5KHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiwgZW51bSBpcHVfY2hhbm5lbCBjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZW5hYmxlLCB1aW50MzJfdCBjb2xvcl9rZXkpCisJCQkgICAgIGJvb2wgZW5hYmxlLCB1aW50MzJfdCBjb2xvcl9rZXkpCiB7Ci0gICAgICAgdWludDMyX3QgcmVnLCBzZGNfY29uZjsKLSAgICAgICB1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CisJdWludDMyX3QgcmVnLCBzZGNfY29uZjsKKwl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKLSAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CiAKLSAgICAgICBzZGNfY29uZiA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBTRENfQ09NX0NPTkYpOwotICAgICAgIGlmIChjaGFubmVsID09IElETUFDX1NEQ18wKQotICAgICAgICAgICAgICAgc2RjX2NvbmYgJj0gflNEQ19DT01fR1dTRUw7Ci0gICAgICAgZWxzZQotICAgICAgICAgICAgICAgc2RjX2NvbmYgfD0gU0RDX0NPTV9HV1NFTDsKKwlzZGNfY29uZiA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBTRENfQ09NX0NPTkYpOworCWlmIChjaGFubmVsID09IElETUFDX1NEQ18wKQorCQlzZGNfY29uZiAmPSB+U0RDX0NPTV9HV1NFTDsKKwllbHNlCisJCXNkY19jb25mIHw9IFNEQ19DT01fR1dTRUw7CiAKLSAgICAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICAgICAgICAgICByZWcgPSBteDNmYl9yZWFkX3JlZyhteDNmYiwgU0RDX0dXX0NUUkwpICYgMHhGRjAwMDAwMEw7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8IChjb2xvcl9rZXkgJiAweDAwRkZGRkZGTCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU0RDX0dXX0NUUkwpOworCWlmIChlbmFibGUpIHsKKwkJcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19HV19DVFJMKSAmIDB4RkYwMDAwMDBMOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8IChjb2xvcl9rZXkgJiAweDAwRkZGRkZGTCksCisJCQkgICAgIFNEQ19HV19DVFJMKTsKIAotICAgICAgICAgICAgICAgc2RjX2NvbmYgfD0gU0RDX0NPTV9LRVlfQ09MT1JfRzsKLSAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgc2RjX2NvbmYgJj0gflNEQ19DT01fS0VZX0NPTE9SX0c7Ci0gICAgICAgfQotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgc2RjX2NvbmYsIFNEQ19DT01fQ09ORik7CisJCXNkY19jb25mIHw9IFNEQ19DT01fS0VZX0NPTE9SX0c7CisJfSBlbHNlIHsKKwkJc2RjX2NvbmYgJj0gflNEQ19DT01fS0VZX0NPTE9SX0c7CisJfQorCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgc2RjX2NvbmYsIFNEQ19DT01fQ09ORik7CiAKLSAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNmYi0+bG9jaywgbG9ja19mbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOwogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgogICogc2RjX3NldF9nbG9iYWxfYWxwaGEoKSAtIHNldCBnbG9iYWwgYWxwaGEgYmxlbmRpbmcgbW9kZXMuCi0gKiBAbXgzZmI6ICAgICBteDNmYiBjb250ZXh0LgotICogQGVuYWJsZTogICAgYm9vbGVhbiB0byBlbmFibGUgb3IgZGlzYWJsZSBnbG9iYWwgYWxwaGEgYmxlbmRpbmcuIElmIGRpc2FibGVkLAotICogICAgICAgICAgICAgcGVyIHBpeGVsIGJsZW5kaW5nIGlzIHVzZWQuCi0gKiBAYWxwaGE6ICAgICBnbG9iYWwgYWxwaGEgdmFsdWUuCi0gKiBAcmV0dXJuOiAgICAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogQG14M2ZiOglteDNmYiBjb250ZXh0LgorICogQGVuYWJsZToJYm9vbGVhbiB0byBlbmFibGUgb3IgZGlzYWJsZSBnbG9iYWwgYWxwaGEgYmxlbmRpbmcuIElmIGRpc2FibGVkLAorICoJCXBlciBwaXhlbCBibGVuZGluZyBpcyB1c2VkLgorICogQGFscGhhOglnbG9iYWwgYWxwaGEgdmFsdWUuCisgKiBAcmV0dXJuOgkwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgaW50IHNkY19zZXRfZ2xvYmFsX2FscGhhKHN0cnVjdCBteDNmYl9kYXRhICpteDNmYiwgYm9vbCBlbmFibGUsIHVpbnQ4X3QgYWxwaGEpCiB7Ci0gICAgICAgdWludDMyX3QgcmVnOwotICAgICAgIHVuc2lnbmVkIGxvbmcgbG9ja19mbGFnczsKKwl1aW50MzJfdCByZWc7CisJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCi0gICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJm14M2ZiLT5sb2NrLCBsb2NrX2ZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOwogCi0gICAgICAgaWYgKGVuYWJsZSkgewotICAgICAgICAgICAgICAgcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19HV19DVFJMKSAmIDB4MDBGRkZGRkZMOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcgfCAoKHVpbnQzMl90KSBhbHBoYSA8PCAyNCksIFNEQ19HV19DVFJMKTsKKwlpZiAoZW5hYmxlKSB7CisJCXJlZyA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBTRENfR1dfQ1RSTCkgJiAweDAwRkZGRkZGTDsKKwkJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcgfCAoKHVpbnQzMl90KSBhbHBoYSA8PCAyNCksIFNEQ19HV19DVFJMKTsKIAotICAgICAgICAgICAgICAgcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7Ci0gICAgICAgICAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8IFNEQ19DT01fR0xCX0EsIFNEQ19DT01fQ09ORik7Ci0gICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgIHJlZyA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBTRENfQ09NX0NPTkYpOwotICAgICAgICAgICAgICAgbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCByZWcgJiB+U0RDX0NPTV9HTEJfQSwgU0RDX0NPTV9DT05GKTsKLSAgICAgICB9CisJCXJlZyA9IG14M2ZiX3JlYWRfcmVnKG14M2ZiLCBTRENfQ09NX0NPTkYpOworCQlteDNmYl93cml0ZV9yZWcobXgzZmIsIHJlZyB8IFNEQ19DT01fR0xCX0EsIFNEQ19DT01fQ09ORik7CisJfSBlbHNlIHsKKwkJcmVnID0gbXgzZmJfcmVhZF9yZWcobXgzZmIsIFNEQ19DT01fQ09ORik7CisJCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgcmVnICYgflNEQ19DT01fR0xCX0EsIFNEQ19DT01fQ09ORik7CisJfQogCi0gICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzZmItPmxvY2ssIGxvY2tfZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm14M2ZiLT5sb2NrLCBsb2NrX2ZsYWdzKTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZGNfc2V0X2JyaWdodG5lc3Moc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiLCB1aW50OF90IHZhbHVlKQogewotICAgICAgIC8qIFRoaXMgbWlnaHQgYmUgYm9hcmQtc3BlY2lmaWMgKi8KLSAgICAgICBteDNmYl93cml0ZV9yZWcobXgzZmIsIDB4MDMwMDAwMDBVTCB8IHZhbHVlIDw8IDE2LCBTRENfUFdNX0NUUkwpOwotICAgICAgIHJldHVybjsKKwkvKiBUaGlzIG1pZ2h0IGJlIGJvYXJkLXNwZWNpZmljICovCisJbXgzZmJfd3JpdGVfcmVnKG14M2ZiLCAweDAzMDAwMDAwVUwgfCB2YWx1ZSA8PCAxNiwgU0RDX1BXTV9DVFJMKTsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyB1aW50MzJfdCBicHBfdG9fcGl4Zm10KGludCBicHApCiB7Ci0gICAgICAgdWludDMyX3QgcGl4Zm10ID0gMDsKLSAgICAgICBzd2l0Y2ggKGJwcCkgewotICAgICAgIGNhc2UgMjQ6Ci0gICAgICAgICAgICAgICBwaXhmbXQgPSBJUFVfUElYX0ZNVF9CR1IyNDsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgMzI6Ci0gICAgICAgICAgICAgICBwaXhmbXQgPSBJUFVfUElYX0ZNVF9CR1IzMjsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgMTY6Ci0gICAgICAgICAgICAgICBwaXhmbXQgPSBJUFVfUElYX0ZNVF9SR0I1NjU7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICB9Ci0gICAgICAgcmV0dXJuIHBpeGZtdDsKKwl1aW50MzJfdCBwaXhmbXQgPSAwOworCXN3aXRjaCAoYnBwKSB7CisJY2FzZSAyNDoKKwkJcGl4Zm10ID0gSVBVX1BJWF9GTVRfQkdSMjQ7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCXBpeGZtdCA9IElQVV9QSVhfRk1UX0JHUjMyOworCQlicmVhazsKKwljYXNlIDE2OgorCQlwaXhmbXQgPSBJUFVfUElYX0ZNVF9SR0I1NjU7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcGl4Zm10OwogfQogCiBzdGF0aWMgaW50IG14M2ZiX2JsYW5rKGludCBibGFuaywgc3RydWN0IGZiX2luZm8gKmZiaSk7CkBAIC02NjksMzAwICs2NjksMzAwIEBACiAKIC8qKgogICogbXgzZmJfc2V0X2ZpeCgpIC0gc2V0IGZpeGVkIGZyYW1lYnVmZmVyIHBhcmFtZXRlcnMgZnJvbSB2YXJpYWJsZSBzZXR0aW5ncy4KLSAqIEBpbmZvOiAgICAgIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHBvaW50ZXIKLSAqIEByZXR1cm46ICAgIDAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKiBAaW5mbzoJZnJhbWVidWZmZXIgaW5mb3JtYXRpb24gcG9pbnRlcgorICogQHJldHVybjoJMCBvbiBzdWNjZXNzIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwogc3RhdGljIGludCBteDNmYl9zZXRfZml4KHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmZmJpLT5maXg7Ci0gICAgICAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmZmJpLT52YXI7CisJc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXggPSAmZmJpLT5maXg7CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIgPSAmZmJpLT52YXI7CiAKLSAgICAgICBzdHJuY3B5KGZpeC0+aWQsICJESVNQMyBCRyIsIDgpOworCXN0cm5jcHkoZml4LT5pZCwgIkRJU1AzIEJHIiwgOCk7CiAKLSAgICAgICBmaXgtPmxpbmVfbGVuZ3RoID0gdmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPmJpdHNfcGVyX3BpeGVsIC8gODsKKwlmaXgtPmxpbmVfbGVuZ3RoID0gdmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPmJpdHNfcGVyX3BpeGVsIC8gODsKIAotICAgICAgIGZpeC0+dHlwZSA9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKLSAgICAgICBmaXgtPmFjY2VsID0gRkJfQUNDRUxfTk9ORTsKLSAgICAgICBmaXgtPnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7Ci0gICAgICAgZml4LT54cGFuc3RlcCA9IDE7Ci0gICAgICAgZml4LT55cGFuc3RlcCA9IDE7CisJZml4LT50eXBlID0gRkJfVFlQRV9QQUNLRURfUElYRUxTOworCWZpeC0+YWNjZWwgPSBGQl9BQ0NFTF9OT05FOworCWZpeC0+dmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwlmaXgtPnhwYW5zdGVwID0gMTsKKwlmaXgtPnlwYW5zdGVwID0gMTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBteDNmYl9kbWFfZG9uZSh2b2lkICphcmcpCiB7Ci0gICAgICAgc3RydWN0IGlkbWFjX3R4X2Rlc2MgKnR4X2Rlc2MgPSB0b190eF9kZXNjKGFyZyk7Ci0gICAgICAgc3RydWN0IGRtYV9jaGFuICpjaGFuID0gdHhfZGVzYy0+dHhkLmNoYW47Ci0gICAgICAgc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFubmVsID0gdG9faWRtYWNfY2hhbihjaGFuKTsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBpY2hhbm5lbC0+Y2xpZW50OwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gbXgzZmItPmZiaS0+cGFyOworCXN0cnVjdCBpZG1hY190eF9kZXNjICp0eF9kZXNjID0gdG9fdHhfZGVzYyhhcmcpOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IHR4X2Rlc2MtPnR4ZC5jaGFuOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbm5lbCA9IHRvX2lkbWFjX2NoYW4oY2hhbik7CisJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gaWNoYW5uZWwtPmNsaWVudDsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IG14M2ZiLT5mYmktPnBhcjsKIAotICAgICAgIGRldl9kYmcobXgzZmItPmRldiwgImlycSAlZCBjYWxsYmFja1xuIiwgaWNoYW5uZWwtPmVvZl9pcnEpOworCWRldl9kYmcobXgzZmItPmRldiwgImlycSAlZCBjYWxsYmFja1xuIiwgaWNoYW5uZWwtPmVvZl9pcnEpOwogCi0gICAgICAgLyogV2Ugb25seSBuZWVkIG9uZSBpbnRlcnJ1cHQsIGl0IHdpbGwgYmUgcmUtZW5hYmxlZCBhcyBuZWVkZWQgKi8KLSAgICAgICBkaXNhYmxlX2lycShpY2hhbm5lbC0+ZW9mX2lycSk7CisJLyogV2Ugb25seSBuZWVkIG9uZSBpbnRlcnJ1cHQsIGl0IHdpbGwgYmUgcmUtZW5hYmxlZCBhcyBuZWVkZWQgKi8KKwlkaXNhYmxlX2lycShpY2hhbm5lbC0+ZW9mX2lycSk7CiAKLSAgICAgICBjb21wbGV0ZSgmbXgzX2ZiaS0+ZmxpcF9jbXBsKTsKKwljb21wbGV0ZSgmbXgzX2ZiaS0+ZmxpcF9jbXBsKTsKIH0KIAogLyoqCiAgKiBteDNmYl9zZXRfcGFyKCkgLSBzZXQgZnJhbWVidWZmZXIgcGFyYW1ldGVycyBhbmQgY2hhbmdlIHRoZSBvcGVyYXRpbmcgbW9kZS4KLSAqIEBmYmk6ICAgICAgIGZyYW1lYnVmZmVyIGluZm9ybWF0aW9uIHBvaW50ZXIuCi0gKiBAcmV0dXJuOiAgICAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICogQGZiaToJZnJhbWVidWZmZXIgaW5mb3JtYXRpb24gcG9pbnRlci4KKyAqIEByZXR1cm46CTAgb24gc3VjY2VzcyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgbXgzZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewotICAgICAgIHUzMiBtZW1fbGVuOwotICAgICAgIHN0cnVjdCBpcHVfZGlfc2lnbmFsX2NmZyBzaWdfY2ZnOwotICAgICAgIGVudW0gaXB1X3BhbmVsIG1vZGUgPSBJUFVfUEFORUxfVEZUOwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7Ci0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gbXgzX2ZiaS0+bXgzZmI7Ci0gICAgICAgc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2ZiaS0+aWRtYWNfY2hhbm5lbDsKLSAgICAgICBzdHJ1Y3QgaWRtYWNfdmlkZW9fcGFyYW0gKnZpZGVvID0gJmljaGFuLT5wYXJhbXMudmlkZW87Ci0gICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IG14M19mYmktPnNnOwotICAgICAgIHNpemVfdCBzY3JlZW5fc2l6ZTsKKwl1MzIgbWVtX2xlbjsKKwlzdHJ1Y3QgaXB1X2RpX3NpZ25hbF9jZmcgc2lnX2NmZzsKKwllbnVtIGlwdV9wYW5lbCBtb2RlID0gSVBVX1BBTkVMX1RGVDsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOworCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IG14M19mYmktPm14M2ZiOworCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IG14M19mYmktPmlkbWFjX2NoYW5uZWw7CisJc3RydWN0IGlkbWFjX3ZpZGVvX3BhcmFtICp2aWRlbyA9ICZpY2hhbi0+cGFyYW1zLnZpZGVvOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBteDNfZmJpLT5zZzsKKwlzaXplX3Qgc2NyZWVuX3NpemU7CiAKLSAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICIlcyBbJWNdXG4iLCBfX2Z1bmNfXywgbGlzdF9lbXB0eSgmaWNoYW4tPnF1ZXVlKSA/ICctJyA6ICcrJyk7CisJZGV2X2RiZyhteDNmYi0+ZGV2LCAiJXMgWyVjXVxuIiwgX19mdW5jX18sIGxpc3RfZW1wdHkoJmljaGFuLT5xdWV1ZSkgPyAnLScgOiAnKycpOwogCi0gICAgICAgbXV0ZXhfbG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCW11dGV4X2xvY2soJm14M19mYmktPm11dGV4KTsKIAotICAgICAgIC8qIFRvdGFsIGNsZWFudXAgKi8KLSAgICAgICBpZiAobXgzX2ZiaS0+dHhkKQotICAgICAgICAgICAgICAgc2RjX2Rpc2FibGVfY2hhbm5lbChteDNfZmJpKTsKKwkvKiBUb3RhbCBjbGVhbnVwICovCisJaWYgKG14M19mYmktPnR4ZCkKKwkJc2RjX2Rpc2FibGVfY2hhbm5lbChteDNfZmJpKTsKIAotICAgICAgIG14M2ZiX3NldF9maXgoZmJpKTsKKwlteDNmYl9zZXRfZml4KGZiaSk7CiAKLSAgICAgICBtZW1fbGVuID0gZmJpLT52YXIueXJlc192aXJ0dWFsICogZmJpLT5maXgubGluZV9sZW5ndGg7Ci0gICAgICAgaWYgKG1lbV9sZW4gPiBmYmktPmZpeC5zbWVtX2xlbikgewotICAgICAgICAgICAgICAgaWYgKGZiaS0+Zml4LnNtZW1fc3RhcnQpCi0gICAgICAgICAgICAgICAgICAgICAgIG14M2ZiX3VubWFwX3ZpZGVvX21lbW9yeShmYmkpOworCW1lbV9sZW4gPSBmYmktPnZhci55cmVzX3ZpcnR1YWwgKiBmYmktPmZpeC5saW5lX2xlbmd0aDsKKwlpZiAobWVtX2xlbiA+IGZiaS0+Zml4LnNtZW1fbGVuKSB7CisJCWlmIChmYmktPmZpeC5zbWVtX3N0YXJ0KQorCQkJbXgzZmJfdW5tYXBfdmlkZW9fbWVtb3J5KGZiaSk7CiAKLSAgICAgICAgICAgICAgIGZiaS0+Zml4LnNtZW1fbGVuID0gbWVtX2xlbjsKLSAgICAgICAgICAgICAgIGlmIChteDNmYl9tYXBfdmlkZW9fbWVtb3J5KGZiaSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwotICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICB9CisJCWZiaS0+Zml4LnNtZW1fbGVuID0gbWVtX2xlbjsKKwkJaWYgKG14M2ZiX21hcF92aWRlb19tZW1vcnkoZmJpKSA8IDApIHsKKwkJCW11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CiAKLSAgICAgICBzY3JlZW5fc2l6ZSA9IGZiaS0+Zml4LmxpbmVfbGVuZ3RoICogZmJpLT52YXIueXJlczsKKwlzY3JlZW5fc2l6ZSA9IGZiaS0+Zml4LmxpbmVfbGVuZ3RoICogZmJpLT52YXIueXJlczsKIAotICAgICAgIHNnX2luaXRfdGFibGUoJnNnWzBdLCAxKTsKLSAgICAgICBzZ19pbml0X3RhYmxlKCZzZ1sxXSwgMSk7CisJc2dfaW5pdF90YWJsZSgmc2dbMF0sIDEpOworCXNnX2luaXRfdGFibGUoJnNnWzFdLCAxKTsKIAotICAgICAgIHNnX2RtYV9hZGRyZXNzKCZzZ1swXSkgID0gZmJpLT5maXguc21lbV9zdGFydDsKLSAgICAgICBzZ19zZXRfcGFnZSgmc2dbMF0sIHZpcnRfdG9fcGFnZShmYmktPnNjcmVlbl9iYXNlKSwKLSAgICAgICAgICAgICAgICAgICBmYmktPmZpeC5zbWVtX2xlbiwKLSAgICAgICAgICAgICAgICAgICBvZmZzZXRfaW5fcGFnZShmYmktPnNjcmVlbl9iYXNlKSk7CisJc2dfZG1hX2FkZHJlc3MoJnNnWzBdKQk9IGZiaS0+Zml4LnNtZW1fc3RhcnQ7CisJc2dfc2V0X3BhZ2UoJnNnWzBdLCB2aXJ0X3RvX3BhZ2UoZmJpLT5zY3JlZW5fYmFzZSksCisJCSAgICBmYmktPmZpeC5zbWVtX2xlbiwKKwkJICAgIG9mZnNldF9pbl9wYWdlKGZiaS0+c2NyZWVuX2Jhc2UpKTsKIAotICAgICAgIGlmIChteDNfZmJpLT5pcHVfY2ggPT0gSURNQUNfU0RDXzApIHsKLSAgICAgICAgICAgICAgIG1lbXNldCgmc2lnX2NmZywgMCwgc2l6ZW9mKHNpZ19jZmcpKTsKLSAgICAgICAgICAgICAgIGlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19IT1JfSElHSF9BQ1QpCi0gICAgICAgICAgICAgICAgICAgICAgIHNpZ19jZmcuSHN5bmNfcG9sID0gdHJ1ZTsKLSAgICAgICAgICAgICAgIGlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19WRVJUX0hJR0hfQUNUKQotICAgICAgICAgICAgICAgICAgICAgICBzaWdfY2ZnLlZzeW5jX3BvbCA9IHRydWU7Ci0gICAgICAgICAgICAgICBpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfQ0xLX0lOVkVSVCkKLSAgICAgICAgICAgICAgICAgICAgICAgc2lnX2NmZy5jbGtfcG9sID0gdHJ1ZTsKLSAgICAgICAgICAgICAgIGlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19EQVRBX0lOVkVSVCkKLSAgICAgICAgICAgICAgICAgICAgICAgc2lnX2NmZy5kYXRhX3BvbCA9IHRydWU7Ci0gICAgICAgICAgICAgICBpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfT0VfQUNUX0hJR0gpCi0gICAgICAgICAgICAgICAgICAgICAgIHNpZ19jZmcuZW5hYmxlX3BvbCA9IHRydWU7Ci0gICAgICAgICAgICAgICBpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfQ0xLX0lETEVfRU4pCi0gICAgICAgICAgICAgICAgICAgICAgIHNpZ19jZmcuY2xraWRsZV9lbiA9IHRydWU7Ci0gICAgICAgICAgICAgICBpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfQ0xLX1NFTF9FTikKLSAgICAgICAgICAgICAgICAgICAgICAgc2lnX2NmZy5jbGtzZWxfZW4gPSB0cnVlOwotICAgICAgICAgICAgICAgaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX1NIQVJQX01PREUpCi0gICAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBJUFVfUEFORUxfU0hBUlBfVEZUOworCWlmIChteDNfZmJpLT5pcHVfY2ggPT0gSURNQUNfU0RDXzApIHsKKwkJbWVtc2V0KCZzaWdfY2ZnLCAwLCBzaXplb2Yoc2lnX2NmZykpOworCQlpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfSE9SX0hJR0hfQUNUKQorCQkJc2lnX2NmZy5Ic3luY19wb2wgPSB0cnVlOworCQlpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCkKKwkJCXNpZ19jZmcuVnN5bmNfcG9sID0gdHJ1ZTsKKwkJaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX0NMS19JTlZFUlQpCisJCQlzaWdfY2ZnLmNsa19wb2wgPSB0cnVlOworCQlpZiAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfREFUQV9JTlZFUlQpCisJCQlzaWdfY2ZnLmRhdGFfcG9sID0gdHJ1ZTsKKwkJaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX09FX0FDVF9ISUdIKQorCQkJc2lnX2NmZy5lbmFibGVfcG9sID0gdHJ1ZTsKKwkJaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX0NMS19JRExFX0VOKQorCQkJc2lnX2NmZy5jbGtpZGxlX2VuID0gdHJ1ZTsKKwkJaWYgKGZiaS0+dmFyLnN5bmMgJiBGQl9TWU5DX0NMS19TRUxfRU4pCisJCQlzaWdfY2ZnLmNsa3NlbF9lbiA9IHRydWU7CisJCWlmIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19TSEFSUF9NT0RFKQorCQkJbW9kZSA9IElQVV9QQU5FTF9TSEFSUF9URlQ7CiAKLSAgICAgICAgICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICJwaXhjbG9jayA9ICV1bCBIelxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgKHUzMikgKFBJQ09TMktIWihmYmktPnZhci5waXhjbG9jaykgKiAxMDAwVUwpKTsKKwkJZGV2X2RiZyhmYmktPmRldmljZSwgInBpeGNsb2NrID0gJXVsIEh6XG4iLAorCQkJKHUzMikgKFBJQ09TMktIWihmYmktPnZhci5waXhjbG9jaykgKiAxMDAwVUwpKTsKIAotICAgICAgICAgICAgICAgaWYgKHNkY19pbml0X3BhbmVsKG14M2ZiLCBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQSUNPUzJLSFooZmJpLT52YXIucGl4Y2xvY2spKSAqIDEwMDBVTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci54cmVzLCBmYmktPnZhci55cmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmYmktPnZhci5zeW5jICYgRkJfU1lOQ19TV0FQX1JHQikgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVV9QSVhfRk1UX0JHUjY2NiA6IElQVV9QSVhfRk1UX1JHQjY2NiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci5sZWZ0X21hcmdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci5oc3luY19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJpLT52YXIucmlnaHRfbWFyZ2luICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci5oc3luY19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJpLT52YXIudXBwZXJfbWFyZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiaS0+dmFyLnZzeW5jX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYmktPnZhci5sb3dlcl9tYXJnaW4gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZiaS0+dmFyLnZzeW5jX2xlbiwgc2lnX2NmZykgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICBtdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycihmYmktPmRldmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXgzZmI6IEVycm9yIGluaXRpYWxpemluZyBwYW5lbC5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICB9CisJCWlmIChzZGNfaW5pdF9wYW5lbChteDNmYiwgbW9kZSwKKwkJCQkgICAoUElDT1MyS0haKGZiaS0+dmFyLnBpeGNsb2NrKSkgKiAxMDAwVUwsCisJCQkJICAgZmJpLT52YXIueHJlcywgZmJpLT52YXIueXJlcywKKwkJCQkgICAoZmJpLT52YXIuc3luYyAmIEZCX1NZTkNfU1dBUF9SR0IpID8KKwkJCQkgICBJUFVfUElYX0ZNVF9CR1I2NjYgOiBJUFVfUElYX0ZNVF9SR0I2NjYsCisJCQkJICAgZmJpLT52YXIubGVmdF9tYXJnaW4sCisJCQkJICAgZmJpLT52YXIuaHN5bmNfbGVuLAorCQkJCSAgIGZiaS0+dmFyLnJpZ2h0X21hcmdpbiArCisJCQkJICAgZmJpLT52YXIuaHN5bmNfbGVuLAorCQkJCSAgIGZiaS0+dmFyLnVwcGVyX21hcmdpbiwKKwkJCQkgICBmYmktPnZhci52c3luY19sZW4sCisJCQkJICAgZmJpLT52YXIubG93ZXJfbWFyZ2luICsKKwkJCQkgICBmYmktPnZhci52c3luY19sZW4sIHNpZ19jZmcpICE9IDApIHsKKwkJCW11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCQkJZGV2X2VycihmYmktPmRldmljZSwKKwkJCQkibXgzZmI6IEVycm9yIGluaXRpYWxpemluZyBwYW5lbC5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CiAKLSAgICAgICBzZGNfc2V0X3dpbmRvd19wb3MobXgzZmIsIG14M19mYmktPmlwdV9jaCwgMCwgMCk7CisJc2RjX3NldF93aW5kb3dfcG9zKG14M2ZiLCBteDNfZmJpLT5pcHVfY2gsIDAsIDApOwogCi0gICAgICAgbXgzX2ZiaS0+Y3VyX2lwdV9idWYgICAgPSAwOworCW14M19mYmktPmN1cl9pcHVfYnVmCT0gMDsKIAotICAgICAgIHZpZGVvLT5vdXRfcGl4ZWxfZm10ICAgID0gYnBwX3RvX3BpeGZtdChmYmktPnZhci5iaXRzX3Blcl9waXhlbCk7Ci0gICAgICAgdmlkZW8tPm91dF93aWR0aCAgICAgICAgPSBmYmktPnZhci54cmVzOwotICAgICAgIHZpZGVvLT5vdXRfaGVpZ2h0ICAgICAgID0gZmJpLT52YXIueXJlczsKLSAgICAgICB2aWRlby0+b3V0X3N0cmlkZSAgICAgICA9IGZiaS0+dmFyLnhyZXNfdmlydHVhbDsKKwl2aWRlby0+b3V0X3BpeGVsX2ZtdAk9IGJwcF90b19waXhmbXQoZmJpLT52YXIuYml0c19wZXJfcGl4ZWwpOworCXZpZGVvLT5vdXRfd2lkdGgJPSBmYmktPnZhci54cmVzOworCXZpZGVvLT5vdXRfaGVpZ2h0CT0gZmJpLT52YXIueXJlczsKKwl2aWRlby0+b3V0X3N0cmlkZQk9IGZiaS0+dmFyLnhyZXNfdmlydHVhbDsKIAotICAgICAgIGlmIChteDNfZmJpLT5ibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LKQotICAgICAgICAgICAgICAgc2RjX2VuYWJsZV9jaGFubmVsKG14M19mYmkpOworCWlmIChteDNfZmJpLT5ibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LKQorCQlzZGNfZW5hYmxlX2NoYW5uZWwobXgzX2ZiaSk7CiAKLSAgICAgICBtdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKKwltdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCiAvKioKICAqIG14M2ZiX2NoZWNrX3ZhcigpIC0gY2hlY2sgYW5kIGFkanVzdCBmcmFtZWJ1ZmZlciB2YXJpYWJsZSBwYXJhbWV0ZXJzLgotICogQHZhcjogICAgICAgZnJhbWVidWZmZXIgdmFyaWFibGUgcGFyYW1ldGVycwotICogQGZiaTogICAgICAgZnJhbWVidWZmZXIgaW5mb3JtYXRpb24gcG9pbnRlcgorICogQHZhcjoJZnJhbWVidWZmZXIgdmFyaWFibGUgcGFyYW1ldGVycworICogQGZiaToJZnJhbWVidWZmZXIgaW5mb3JtYXRpb24gcG9pbnRlcgogICovCiBzdGF0aWMgaW50IG14M2ZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOwotICAgICAgIHUzMiB2dG90YWw7Ci0gICAgICAgdTMyIGh0b3RhbDsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOworCXUzMiB2dG90YWw7CisJdTMyIGh0b3RhbDsKIAotICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICIlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICIlc1xuIiwgX19mdW5jX18pOwogCi0gICAgICAgaWYgKHZhci0+eHJlc192aXJ0dWFsIDwgdmFyLT54cmVzKQotICAgICAgICAgICAgICAgdmFyLT54cmVzX3ZpcnR1YWwgPSB2YXItPnhyZXM7Ci0gICAgICAgaWYgKHZhci0+eXJlc192aXJ0dWFsIDwgdmFyLT55cmVzKQotICAgICAgICAgICAgICAgdmFyLT55cmVzX3ZpcnR1YWwgPSB2YXItPnlyZXM7CisJaWYgKHZhci0+eHJlc192aXJ0dWFsIDwgdmFyLT54cmVzKQorCQl2YXItPnhyZXNfdmlydHVhbCA9IHZhci0+eHJlczsKKwlpZiAodmFyLT55cmVzX3ZpcnR1YWwgPCB2YXItPnlyZXMpCisJCXZhci0+eXJlc192aXJ0dWFsID0gdmFyLT55cmVzOwogCi0gICAgICAgaWYgKCh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDMyKSAmJiAodmFyLT5iaXRzX3Blcl9waXhlbCAhPSAyNCkgJiYKLSAgICAgICAgICAgKHZhci0+Yml0c19wZXJfcGl4ZWwgIT0gMTYpKQotICAgICAgICAgICAgICAgdmFyLT5iaXRzX3Blcl9waXhlbCA9IGRlZmF1bHRfYnBwOworCWlmICgodmFyLT5iaXRzX3Blcl9waXhlbCAhPSAzMikgJiYgKHZhci0+Yml0c19wZXJfcGl4ZWwgIT0gMjQpICYmCisJICAgICh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDE2KSkKKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IGRlZmF1bHRfYnBwOwogCi0gICAgICAgc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7Ci0gICAgICAgY2FzZSAxNjoKLSAgICAgICAgICAgICAgIHZhci0+cmVkLmxlbmd0aCA9IDU7Ci0gICAgICAgICAgICAgICB2YXItPnJlZC5vZmZzZXQgPSAxMTsKLSAgICAgICAgICAgICAgIHZhci0+cmVkLm1zYl9yaWdodCA9IDA7CisJc3dpdGNoICh2YXItPmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSAxNjoKKwkJdmFyLT5yZWQubGVuZ3RoID0gNTsKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTE7CisJCXZhci0+cmVkLm1zYl9yaWdodCA9IDA7CiAKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubGVuZ3RoID0gNjsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDU7CisJCXZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKIAotICAgICAgICAgICAgICAgdmFyLT5ibHVlLmxlbmd0aCA9IDU7Ci0gICAgICAgICAgICAgICB2YXItPmJsdWUub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgIHZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOwogCi0gICAgICAgICAgICAgICB2YXItPnRyYW5zcC5sZW5ndGggPSAwOwotICAgICAgICAgICAgICAgdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgIHZhci0+dHJhbnNwLm1zYl9yaWdodCA9IDA7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIDI0OgotICAgICAgICAgICAgICAgdmFyLT5yZWQubGVuZ3RoID0gODsKLSAgICAgICAgICAgICAgIHZhci0+cmVkLm9mZnNldCA9IDE2OwotICAgICAgICAgICAgICAgdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJdmFyLT50cmFuc3AubXNiX3JpZ2h0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7CisJCXZhci0+cmVkLm1zYl9yaWdodCA9IDA7CiAKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7CisJCXZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKIAotICAgICAgICAgICAgICAgdmFyLT5ibHVlLmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICB2YXItPmJsdWUub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgIHZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOwogCi0gICAgICAgICAgICAgICB2YXItPnRyYW5zcC5sZW5ndGggPSAwOwotICAgICAgICAgICAgICAgdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgIHZhci0+dHJhbnNwLm1zYl9yaWdodCA9IDA7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICBjYXNlIDMyOgotICAgICAgICAgICAgICAgdmFyLT5yZWQubGVuZ3RoID0gODsKLSAgICAgICAgICAgICAgIHZhci0+cmVkLm9mZnNldCA9IDE2OwotICAgICAgICAgICAgICAgdmFyLT5yZWQubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJdmFyLT50cmFuc3AubXNiX3JpZ2h0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTY7CisJCXZhci0+cmVkLm1zYl9yaWdodCA9IDA7CiAKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubGVuZ3RoID0gODsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ub2Zmc2V0ID0gODsKLSAgICAgICAgICAgICAgIHZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7CisJCXZhci0+Z3JlZW4ubXNiX3JpZ2h0ID0gMDsKIAotICAgICAgICAgICAgICAgdmFyLT5ibHVlLmxlbmd0aCA9IDg7Ci0gICAgICAgICAgICAgICB2YXItPmJsdWUub2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgIHZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOwogCi0gICAgICAgICAgICAgICB2YXItPnRyYW5zcC5sZW5ndGggPSA4OwotICAgICAgICAgICAgICAgdmFyLT50cmFuc3Aub2Zmc2V0ID0gMjQ7Ci0gICAgICAgICAgICAgICB2YXItPnRyYW5zcC5tc2JfcmlnaHQgPSAwOwotICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgfQorCQl2YXItPnRyYW5zcC5sZW5ndGggPSA4OworCQl2YXItPnRyYW5zcC5vZmZzZXQgPSAyNDsKKwkJdmFyLT50cmFuc3AubXNiX3JpZ2h0ID0gMDsKKwkJYnJlYWs7CisJfQogCi0gICAgICAgaWYgKHZhci0+cGl4Y2xvY2sgPCAxMDAwKSB7Ci0gICAgICAgICAgICAgICBodG90YWwgPSB2YXItPnhyZXMgKyB2YXItPnJpZ2h0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuICsKLSAgICAgICAgICAgICAgICAgICB2YXItPmxlZnRfbWFyZ2luOwotICAgICAgICAgICAgICAgdnRvdGFsID0gdmFyLT55cmVzICsgdmFyLT5sb3dlcl9tYXJnaW4gKyB2YXItPnZzeW5jX2xlbiArCi0gICAgICAgICAgICAgICAgICAgdmFyLT51cHBlcl9tYXJnaW47Ci0gICAgICAgICAgICAgICB2YXItPnBpeGNsb2NrID0gKHZ0b3RhbCAqIGh0b3RhbCAqIDZVTCkgLyAxMDBVTDsKLSAgICAgICAgICAgICAgIHZhci0+cGl4Y2xvY2sgPSBLSFoyUElDT1ModmFyLT5waXhjbG9jayk7Ci0gICAgICAgICAgICAgICBkZXZfZGJnKGZiaS0+ZGV2aWNlLCAicGl4Y2xvY2sgc2V0IGZvciA2MEh6IHJlZnJlc2ggPSAldSBwc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdmFyLT5waXhjbG9jayk7Ci0gICAgICAgfQorCWlmICh2YXItPnBpeGNsb2NrIDwgMTAwMCkgeworCQlodG90YWwgPSB2YXItPnhyZXMgKyB2YXItPnJpZ2h0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuICsKKwkJICAgIHZhci0+bGVmdF9tYXJnaW47CisJCXZ0b3RhbCA9IHZhci0+eXJlcyArIHZhci0+bG93ZXJfbWFyZ2luICsgdmFyLT52c3luY19sZW4gKworCQkgICAgdmFyLT51cHBlcl9tYXJnaW47CisJCXZhci0+cGl4Y2xvY2sgPSAodnRvdGFsICogaHRvdGFsICogNlVMKSAvIDEwMFVMOworCQl2YXItPnBpeGNsb2NrID0gS0haMlBJQ09TKHZhci0+cGl4Y2xvY2spOworCQlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAicGl4Y2xvY2sgc2V0IGZvciA2MEh6IHJlZnJlc2ggPSAldSBwc1xuIiwKKwkJCXZhci0+cGl4Y2xvY2spOworCX0KIAotICAgICAgIHZhci0+aGVpZ2h0ID0gLTE7Ci0gICAgICAgdmFyLT53aWR0aCA9IC0xOwotICAgICAgIHZhci0+Z3JheXNjYWxlID0gMDsKKwl2YXItPmhlaWdodCA9IC0xOworCXZhci0+d2lkdGggPSAtMTsKKwl2YXItPmdyYXlzY2FsZSA9IDA7CiAKLSAgICAgICAvKiBQcmVzZXJ2ZSBzeW5jIGZsYWdzICovCi0gICAgICAgdmFyLT5zeW5jIHw9IG14M19mYmktPnN5bmM7Ci0gICAgICAgbXgzX2ZiaS0+c3luYyB8PSB2YXItPnN5bmM7CisJLyogUHJlc2VydmUgc3luYyBmbGFncyAqLworCXZhci0+c3luYyB8PSBteDNfZmJpLT5zeW5jOworCW14M19mYmktPnN5bmMgfD0gdmFyLT5zeW5jOwogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1MzIgY2hhbl90b19maWVsZCh1bnNpZ25lZCBpbnQgY2hhbiwgc3RydWN0IGZiX2JpdGZpZWxkICpiZikKIHsKLSAgICAgICBjaGFuICY9IDB4ZmZmZjsKLSAgICAgICBjaGFuID4+PSAxNiAtIGJmLT5sZW5ndGg7Ci0gICAgICAgcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKKwljaGFuICY9IDB4ZmZmZjsKKwljaGFuID4+PSAxNiAtIGJmLT5sZW5ndGg7CisJcmV0dXJuIGNoYW4gPDwgYmYtPm9mZnNldDsKIH0KIAogc3RhdGljIGludCBteDNmYl9zZXRjb2xyZWcodW5zaWduZWQgaW50IHJlZ25vLCB1bnNpZ25lZCBpbnQgcmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdHJhbnMsIHN0cnVjdCBmYl9pbmZvICpmYmkpCisJCQkgICB1bnNpZ25lZCBpbnQgZ3JlZW4sIHVuc2lnbmVkIGludCBibHVlLAorCQkJICAgdW5zaWduZWQgaW50IHRyYW5zLCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7Ci0gICAgICAgdTMyIHZhbDsKLSAgICAgICBpbnQgcmV0ID0gMTsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzX2ZiaSA9IGZiaS0+cGFyOworCXUzMiB2YWw7CisJaW50IHJldCA9IDE7CiAKLSAgICAgICBkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiJXNcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiJXNcbiIsIF9fZnVuY19fKTsKIAotICAgICAgIG11dGV4X2xvY2soJm14M19mYmktPm11dGV4KTsKLSAgICAgICAvKgotICAgICAgICAqIElmIGdyZXlzY2FsZSBpcyB0cnVlLCB0aGVuIHdlIGNvbnZlcnQgdGhlIFJHQiB2YWx1ZQotICAgICAgICAqIHRvIGdyZXlzY2FsZSBubyBtYXR0ZXIgd2hhdCB2aXN1YWwgd2UgYXJlIHVzaW5nLgotICAgICAgICAqLwotICAgICAgIGlmIChmYmktPnZhci5ncmF5c2NhbGUpCi0gICAgICAgICAgICAgICByZWQgPSBncmVlbiA9IGJsdWUgPSAoMTk1OTUgKiByZWQgKyAzODQ3MCAqIGdyZWVuICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3NDcxICogYmx1ZSkgPj4gMTY7Ci0gICAgICAgc3dpdGNoIChmYmktPmZpeC52aXN1YWwpIHsKLSAgICAgICBjYXNlIEZCX1ZJU1VBTF9UUlVFQ09MT1I6Ci0gICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICogMTYtYml0IFRydWUgQ29sb3VyLiAgV2UgZW5jb2RlIHRoZSBSR0IgdmFsdWUKLSAgICAgICAgICAgICAgICAqIGFjY29yZGluZyB0byB0aGUgUkdCIGJpdGZpZWxkIGluZm9ybWF0aW9uLgotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICBpZiAocmVnbm8gPCAxNikgewotICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnBhbCA9IGZiaS0+cHNldWRvX3BhbGV0dGU7CisJbXV0ZXhfbG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCS8qCisJICogSWYgZ3JleXNjYWxlIGlzIHRydWUsIHRoZW4gd2UgY29udmVydCB0aGUgUkdCIHZhbHVlCisJICogdG8gZ3JleXNjYWxlIG5vIG1hdHRlciB3aGF0IHZpc3VhbCB3ZSBhcmUgdXNpbmcuCisJICovCisJaWYgKGZiaS0+dmFyLmdyYXlzY2FsZSkKKwkJcmVkID0gZ3JlZW4gPSBibHVlID0gKDE5NTk1ICogcmVkICsgMzg0NzAgKiBncmVlbiArCisJCQkJICAgICAgNzQ3MSAqIGJsdWUpID4+IDE2OworCXN3aXRjaCAoZmJpLT5maXgudmlzdWFsKSB7CisJY2FzZSBGQl9WSVNVQUxfVFJVRUNPTE9SOgorCQkvKgorCQkgKiAxNi1iaXQgVHJ1ZSBDb2xvdXIuICBXZSBlbmNvZGUgdGhlIFJHQiB2YWx1ZQorCQkgKiBhY2NvcmRpbmcgdG8gdGhlIFJHQiBiaXRmaWVsZCBpbmZvcm1hdGlvbi4KKwkJICovCisJCWlmIChyZWdubyA8IDE2KSB7CisJCQl1MzIgKnBhbCA9IGZiaS0+cHNldWRvX3BhbGV0dGU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gY2hhbl90b19maWVsZChyZWQsICZmYmktPnZhci5yZWQpOwotICAgICAgICAgICAgICAgICAgICAgICB2YWwgfD0gY2hhbl90b19maWVsZChncmVlbiwgJmZiaS0+dmFyLmdyZWVuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgdmFsIHw9IGNoYW5fdG9fZmllbGQoYmx1ZSwgJmZiaS0+dmFyLmJsdWUpOworCQkJdmFsID0gY2hhbl90b19maWVsZChyZWQsICZmYmktPnZhci5yZWQpOworCQkJdmFsIHw9IGNoYW5fdG9fZmllbGQoZ3JlZW4sICZmYmktPnZhci5ncmVlbik7CisJCQl2YWwgfD0gY2hhbl90b19maWVsZChibHVlLCAmZmJpLT52YXIuYmx1ZSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgcGFsW3JlZ25vXSA9IHZhbDsKKwkJCXBhbFtyZWdub10gPSB2YWw7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gMDsKLSAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgIGJyZWFrOworCQkJcmV0ID0gMDsKKwkJfQorCQlicmVhazsKIAotICAgICAgIGNhc2UgRkJfVklTVUFMX1NUQVRJQ19QU0VVRE9DT0xPUjoKLSAgICAgICBjYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIH0KLSAgICAgICBtdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKKwljYXNlIEZCX1ZJU1VBTF9TVEFUSUNfUFNFVURPQ09MT1I6CisJY2FzZSBGQl9WSVNVQUxfUFNFVURPQ09MT1I6CisJCWJyZWFrOworCX0KKwltdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKIAotICAgICAgIHJldHVybiByZXQ7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC05NzAsMTUyICs5NzAsMTUyIEBACiAgKi8KIHN0YXRpYyBpbnQgbXgzZmJfYmxhbmsoaW50IGJsYW5rLCBzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7Ci0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiID0gbXgzX2ZiaS0+bXgzZmI7CisJc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKKwlzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBteDNfZmJpLT5teDNmYjsKIAotICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICIlc1xuIiwgX19mdW5jX18pOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICIlc1xuIiwgX19mdW5jX18pOwogCi0gICAgICAgZGV2X2RiZyhmYmktPmRldmljZSwgImJsYW5rID0gJWRcbiIsIGJsYW5rKTsKKwlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiYmxhbmsgPSAlZFxuIiwgYmxhbmspOwogCi0gICAgICAgaWYgKG14M19mYmktPmJsYW5rID09IGJsYW5rKQotICAgICAgICAgICAgICAgcmV0dXJuIDA7CisJaWYgKG14M19mYmktPmJsYW5rID09IGJsYW5rKQorCQlyZXR1cm4gMDsKIAotICAgICAgIG11dGV4X2xvY2soJm14M19mYmktPm11dGV4KTsKLSAgICAgICBteDNfZmJpLT5ibGFuayA9IGJsYW5rOworCW11dGV4X2xvY2soJm14M19mYmktPm11dGV4KTsKKwlteDNfZmJpLT5ibGFuayA9IGJsYW5rOwogCi0gICAgICAgc3dpdGNoIChibGFuaykgewotICAgICAgIGNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgotICAgICAgIGNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKLSAgICAgICBjYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6Ci0gICAgICAgY2FzZSBGQl9CTEFOS19OT1JNQUw6Ci0gICAgICAgICAgICAgICBzZGNfZGlzYWJsZV9jaGFubmVsKG14M19mYmkpOwotICAgICAgICAgICAgICAgc2RjX3NldF9icmlnaHRuZXNzKG14M2ZiLCAwKTsKLSAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgIGNhc2UgRkJfQkxBTktfVU5CTEFOSzoKLSAgICAgICAgICAgICAgIHNkY19lbmFibGVfY2hhbm5lbChteDNfZmJpKTsKLSAgICAgICAgICAgICAgIHNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgbXgzZmItPmJhY2tsaWdodF9sZXZlbCk7Ci0gICAgICAgICAgICAgICBicmVhazsKLSAgICAgICB9Ci0gICAgICAgbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7CisJc3dpdGNoIChibGFuaykgeworCWNhc2UgRkJfQkxBTktfUE9XRVJET1dOOgorCWNhc2UgRkJfQkxBTktfVlNZTkNfU1VTUEVORDoKKwljYXNlIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQ6CisJY2FzZSBGQl9CTEFOS19OT1JNQUw6CisJCXNkY19kaXNhYmxlX2NoYW5uZWwobXgzX2ZiaSk7CisJCXNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgMCk7CisJCWJyZWFrOworCWNhc2UgRkJfQkxBTktfVU5CTEFOSzoKKwkJc2RjX2VuYWJsZV9jaGFubmVsKG14M19mYmkpOworCQlzZGNfc2V0X2JyaWdodG5lc3MobXgzZmIsIG14M2ZiLT5iYWNrbGlnaHRfbGV2ZWwpOworCQlicmVhazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCiAgKiBteDNmYl9wYW5fZGlzcGxheSgpIC0gcGFuIG9yIHdyYXAgdGhlIGRpc3BsYXkKLSAqIEB2YXI6ICAgICAgIHZhcmlhYmxlIHNjcmVlbiBidWZmZXIgaW5mb3JtYXRpb24uCi0gKiBAaW5mbzogICAgICBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyLgorICogQHZhcjoJdmFyaWFibGUgc2NyZWVuIGJ1ZmZlciBpbmZvcm1hdGlvbi4KKyAqIEBpbmZvOglmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyLgogICoKICAqIFdlIGxvb2sgb25seSBhdCB4b2Zmc2V0LCB5b2Zmc2V0IGFuZCB0aGUgRkJfVk1PREVfWVdSQVAgZmxhZwogICovCiBzdGF0aWMgaW50IG14M2ZiX3Bhbl9kaXNwbGF5KHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmYl9pbmZvICpmYmkpCisJCQkgICAgIHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKLSAgICAgICB1MzIgeV9ib3R0b207Ci0gICAgICAgdW5zaWduZWQgbG9uZyBiYXNlOwotICAgICAgIG9mZl90IG9mZnNldDsKLSAgICAgICBkbWFfY29va2llX3QgY29va2llOwotICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBteDNfZmJpLT5zZzsKLSAgICAgICBzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuID0gJm14M19mYmktPmlkbWFjX2NoYW5uZWwtPmRtYV9jaGFuOwotICAgICAgIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHhkOwotICAgICAgIGludCByZXQ7CisJc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKKwl1MzIgeV9ib3R0b207CisJdW5zaWduZWQgbG9uZyBiYXNlOworCW9mZl90IG9mZnNldDsKKwlkbWFfY29va2llX3QgY29va2llOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSBteDNfZmJpLT5zZzsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuID0gJm14M19mYmktPmlkbWFjX2NoYW5uZWwtPmRtYV9jaGFuOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHhkOworCWludCByZXQ7CiAKLSAgICAgICBkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiJXMgWyVjXVxuIiwgX19mdW5jX18sCi0gICAgICAgICAgICAgICBsaXN0X2VtcHR5KCZteDNfZmJpLT5pZG1hY19jaGFubmVsLT5xdWV1ZSkgPyAnLScgOiAnKycpOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICIlcyBbJWNdXG4iLCBfX2Z1bmNfXywKKwkJbGlzdF9lbXB0eSgmbXgzX2ZiaS0+aWRtYWNfY2hhbm5lbC0+cXVldWUpID8gJy0nIDogJysnKTsKIAotICAgICAgIGlmICh2YXItPnhvZmZzZXQgPiAwKSB7Ci0gICAgICAgICAgICAgICBkZXZfZGJnKGZiaS0+ZGV2aWNlLCAieCBwYW5uaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwotICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgfQorCWlmICh2YXItPnhvZmZzZXQgPiAwKSB7CisJCWRldl9kYmcoZmJpLT5kZXZpY2UsICJ4IHBhbm5pbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotICAgICAgIGlmIChmYmktPnZhci54b2Zmc2V0ID09IHZhci0+eG9mZnNldCAmJgotICAgICAgICAgICBmYmktPnZhci55b2Zmc2V0ID09IHZhci0+eW9mZnNldCkKLSAgICAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAvKiBObyBjaGFuZ2UsIGRvIG5vdGhpbmcgKi8KKwlpZiAoZmJpLT52YXIueG9mZnNldCA9PSB2YXItPnhvZmZzZXQgJiYKKwkgICAgZmJpLT52YXIueW9mZnNldCA9PSB2YXItPnlvZmZzZXQpCisJCXJldHVybiAwOwkvKiBObyBjaGFuZ2UsIGRvIG5vdGhpbmcgKi8KIAotICAgICAgIHlfYm90dG9tID0gdmFyLT55b2Zmc2V0OworCXlfYm90dG9tID0gdmFyLT55b2Zmc2V0OwogCi0gICAgICAgaWYgKCEodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQKSkKLSAgICAgICAgICAgICAgIHlfYm90dG9tICs9IHZhci0+eXJlczsKKwlpZiAoISh2YXItPnZtb2RlICYgRkJfVk1PREVfWVdSQVApKQorCQl5X2JvdHRvbSArPSB2YXItPnlyZXM7CiAKLSAgICAgICBpZiAoeV9ib3R0b20gPiBmYmktPnZhci55cmVzX3ZpcnR1YWwpCi0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAoeV9ib3R0b20gPiBmYmktPnZhci55cmVzX3ZpcnR1YWwpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgICAgbXV0ZXhfbG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCW11dGV4X2xvY2soJm14M19mYmktPm11dGV4KTsKIAotICAgICAgIG9mZnNldCA9ICh2YXItPnlvZmZzZXQgKiB2YXItPnhyZXNfdmlydHVhbCArIHZhci0+eG9mZnNldCkgKgotICAgICAgICAgICAgICAgKHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4KTsKLSAgICAgICBiYXNlID0gZmJpLT5maXguc21lbV9zdGFydCArIG9mZnNldDsKKwlvZmZzZXQgPSAodmFyLT55b2Zmc2V0ICogdmFyLT54cmVzX3ZpcnR1YWwgKyB2YXItPnhvZmZzZXQpICoKKwkJKHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4KTsKKwliYXNlID0gZmJpLT5maXguc21lbV9zdGFydCArIG9mZnNldDsKIAotICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICJVcGRhdGluZyBTREMgQkcgYnVmICVkIGFkZHJlc3M9MHglMDhsWFxuIiwKLSAgICAgICAgICAgICAgIG14M19mYmktPmN1cl9pcHVfYnVmLCBiYXNlKTsKKwlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiVXBkYXRpbmcgU0RDIEJHIGJ1ZiAlZCBhZGRyZXNzPTB4JTA4bFhcbiIsCisJCW14M19mYmktPmN1cl9pcHVfYnVmLCBiYXNlKTsKIAotICAgICAgIC8qCi0gICAgICAgICogV2UgZW5hYmxlIHRoZSBFbmQgb2YgRnJhbWUgaW50ZXJydXB0LCB3aGljaCB3aWxsIGZyZWUgYSB0eC1kZXNjcmlwdG9yLAotICAgICAgICAqIHdoaWNoIHdlIHdpbGwgbmVlZCBmb3IgdGhlIG5leHQgZGV2aWNlX3ByZXBfc2xhdmVfc2coKS4gVGhlCi0gICAgICAgICogSVJRLWhhbmRsZXIgd2lsbCBkaXNhYmxlIHRoZSBJUlEgYWdhaW4uCi0gICAgICAgICovCi0gICAgICAgaW5pdF9jb21wbGV0aW9uKCZteDNfZmJpLT5mbGlwX2NtcGwpOwotICAgICAgIGVuYWJsZV9pcnEobXgzX2ZiaS0+aWRtYWNfY2hhbm5lbC0+ZW9mX2lycSk7CisJLyoKKwkgKiBXZSBlbmFibGUgdGhlIEVuZCBvZiBGcmFtZSBpbnRlcnJ1cHQsIHdoaWNoIHdpbGwgZnJlZSBhIHR4LWRlc2NyaXB0b3IsCisJICogd2hpY2ggd2Ugd2lsbCBuZWVkIGZvciB0aGUgbmV4dCBkZXZpY2VfcHJlcF9zbGF2ZV9zZygpLiBUaGUKKwkgKiBJUlEtaGFuZGxlciB3aWxsIGRpc2FibGUgdGhlIElSUSBhZ2Fpbi4KKwkgKi8KKwlpbml0X2NvbXBsZXRpb24oJm14M19mYmktPmZsaXBfY21wbCk7CisJZW5hYmxlX2lycShteDNfZmJpLT5pZG1hY19jaGFubmVsLT5lb2ZfaXJxKTsKIAotICAgICAgIHJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbXgzX2ZiaS0+ZmxpcF9jbXBsLCBIWiAvIDEwKTsKLSAgICAgICBpZiAocmV0IDw9IDApIHsKLSAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwotICAgICAgICAgICAgICAgZGV2X2luZm8oZmJpLT5kZXZpY2UsICJQYW5uaW5nIGZhaWxlZCBkdWUgdG8gJXNcbiIsIHJldCA8IDAgPwotICAgICAgICAgICAgICAgICAgICAgICAgInVzZXIgaW50ZXJydXB0IiA6ICJ0aW1lb3V0Iik7Ci0gICAgICAgICAgICAgICByZXR1cm4gcmV0ID8gOiAtRVRJTUVET1VUOwotICAgICAgIH0KKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm14M19mYmktPmZsaXBfY21wbCwgSFogLyAxMCk7CisJaWYgKHJldCA8PSAwKSB7CisJCW11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOworCQlkZXZfaW5mbyhmYmktPmRldmljZSwgIlBhbm5pbmcgZmFpbGVkIGR1ZSB0byAlc1xuIiwgcmV0IDwgMCA/CisJCQkgInVzZXIgaW50ZXJydXB0IiA6ICJ0aW1lb3V0Iik7CisJCXJldHVybiByZXQgPyA6IC1FVElNRURPVVQ7CisJfQogCi0gICAgICAgbXgzX2ZiaS0+Y3VyX2lwdV9idWYgPSAhbXgzX2ZiaS0+Y3VyX2lwdV9idWY7CisJbXgzX2ZiaS0+Y3VyX2lwdV9idWYgPSAhbXgzX2ZiaS0+Y3VyX2lwdV9idWY7CiAKLSAgICAgICBzZ19kbWFfYWRkcmVzcygmc2dbbXgzX2ZiaS0+Y3VyX2lwdV9idWZdKSA9IGJhc2U7Ci0gICAgICAgc2dfc2V0X3BhZ2UoJnNnW214M19mYmktPmN1cl9pcHVfYnVmXSwKLSAgICAgICAgICAgICAgICAgICB2aXJ0X3RvX3BhZ2UoZmJpLT5zY3JlZW5fYmFzZSArIG9mZnNldCksIGZiaS0+Zml4LnNtZW1fbGVuLAotICAgICAgICAgICAgICAgICAgIG9mZnNldF9pbl9wYWdlKGZiaS0+c2NyZWVuX2Jhc2UgKyBvZmZzZXQpKTsKKwlzZ19kbWFfYWRkcmVzcygmc2dbbXgzX2ZiaS0+Y3VyX2lwdV9idWZdKSA9IGJhc2U7CisJc2dfc2V0X3BhZ2UoJnNnW214M19mYmktPmN1cl9pcHVfYnVmXSwKKwkJICAgIHZpcnRfdG9fcGFnZShmYmktPnNjcmVlbl9iYXNlICsgb2Zmc2V0KSwgZmJpLT5maXguc21lbV9sZW4sCisJCSAgICBvZmZzZXRfaW5fcGFnZShmYmktPnNjcmVlbl9iYXNlICsgb2Zmc2V0KSk7CiAKLSAgICAgICB0eGQgPSBkbWFfY2hhbi0+ZGV2aWNlLT5kZXZpY2VfcHJlcF9zbGF2ZV9zZyhkbWFfY2hhbiwgc2cgKwotICAgICAgICAgICAgICAgbXgzX2ZiaS0+Y3VyX2lwdV9idWYsIDEsIERNQV9UT19ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCk7Ci0gICAgICAgaWYgKCF0eGQpIHsKLSAgICAgICAgICAgICAgIGRldl9lcnIoZmJpLT5kZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBwcmVwYXJpbmcgYSBETUEgdHJhbnNhY3Rpb24gZGVzY3JpcHRvci5cbiIpOwotICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7Ci0gICAgICAgICAgICAgICByZXR1cm4gLUVJTzsKLSAgICAgICB9CisJdHhkID0gZG1hX2NoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coZG1hX2NoYW4sIHNnICsKKwkJbXgzX2ZiaS0+Y3VyX2lwdV9idWYsIDEsIERNQV9UT19ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCk7CisJaWYgKCF0eGQpIHsKKwkJZGV2X2VycihmYmktPmRldmljZSwKKwkJCSJFcnJvciBwcmVwYXJpbmcgYSBETUEgdHJhbnNhY3Rpb24gZGVzY3JpcHRvci5cbiIpOworCQltdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKKwkJcmV0dXJuIC1FSU87CisJfQogCi0gICAgICAgdHhkLT5jYWxsYmFja19wYXJhbSAgICAgPSB0eGQ7Ci0gICAgICAgdHhkLT5jYWxsYmFjayAgICAgICAgICAgPSBteDNmYl9kbWFfZG9uZTsKKwl0eGQtPmNhbGxiYWNrX3BhcmFtCT0gdHhkOworCXR4ZC0+Y2FsbGJhY2sJCT0gbXgzZmJfZG1hX2RvbmU7CiAKLSAgICAgICAvKgotICAgICAgICAqIEVtdWxhdGUgb3JpZ2luYWwgbXgzZmIgYmVoYXZpb3VyOiBlYWNoIG5ldyBjYWxsIHRvIGlkbWFjX3R4X3N1Ym1pdCgpCi0gICAgICAgICogc2hvdWxkIHN3aXRjaCB0byBhbm90aGVyIGJ1ZmZlcgotICAgICAgICAqLwotICAgICAgIGNvb2tpZSA9IHR4ZC0+dHhfc3VibWl0KHR4ZCk7Ci0gICAgICAgZGV2X2RiZyhmYmktPmRldmljZSwgIiVkOiBTdWJtaXQgJXAgIyVkXG4iLCBfX0xJTkVfXywgdHhkLCBjb29raWUpOwotICAgICAgIGlmIChjb29raWUgPCAwKSB7Ci0gICAgICAgICAgICAgICBkZXZfZXJyKGZiaS0+ZGV2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgdXBkYXRpbmcgU0RDIGJ1ZiAlZCB0byBhZGRyZXNzPTB4JTA4bFhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIG14M19mYmktPmN1cl9pcHVfYnVmLCBiYXNlKTsKLSAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmbXgzX2ZiaS0+bXV0ZXgpOwotICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87Ci0gICAgICAgfQorCS8qCisJICogRW11bGF0ZSBvcmlnaW5hbCBteDNmYiBiZWhhdmlvdXI6IGVhY2ggbmV3IGNhbGwgdG8gaWRtYWNfdHhfc3VibWl0KCkKKwkgKiBzaG91bGQgc3dpdGNoIHRvIGFub3RoZXIgYnVmZmVyCisJICovCisJY29va2llID0gdHhkLT50eF9zdWJtaXQodHhkKTsKKwlkZXZfZGJnKGZiaS0+ZGV2aWNlLCAiJWQ6IFN1Ym1pdCAlcCAjJWRcbiIsIF9fTElORV9fLCB0eGQsIGNvb2tpZSk7CisJaWYgKGNvb2tpZSA8IDApIHsKKwkJZGV2X2VycihmYmktPmRldmljZSwKKwkJCSJFcnJvciB1cGRhdGluZyBTREMgYnVmICVkIHRvIGFkZHJlc3M9MHglMDhsWFxuIiwKKwkJCW14M19mYmktPmN1cl9pcHVfYnVmLCBiYXNlKTsKKwkJbXV0ZXhfdW5sb2NrKCZteDNfZmJpLT5tdXRleCk7CisJCXJldHVybiAtRUlPOworCX0KIAotICAgICAgIGlmIChteDNfZmJpLT50eGQpCi0gICAgICAgICAgICAgICBhc3luY190eF9hY2sobXgzX2ZiaS0+dHhkKTsKLSAgICAgICBteDNfZmJpLT50eGQgPSB0eGQ7CisJaWYgKG14M19mYmktPnR4ZCkKKwkJYXN5bmNfdHhfYWNrKG14M19mYmktPnR4ZCk7CisJbXgzX2ZiaS0+dHhkID0gdHhkOwogCi0gICAgICAgZmJpLT52YXIueG9mZnNldCA9IHZhci0+eG9mZnNldDsKLSAgICAgICBmYmktPnZhci55b2Zmc2V0ID0gdmFyLT55b2Zmc2V0OworCWZiaS0+dmFyLnhvZmZzZXQgPSB2YXItPnhvZmZzZXQ7CisJZmJpLT52YXIueW9mZnNldCA9IHZhci0+eW9mZnNldDsKIAotICAgICAgIGlmICh2YXItPnZtb2RlICYgRkJfVk1PREVfWVdSQVApCi0gICAgICAgICAgICAgICBmYmktPnZhci52bW9kZSB8PSBGQl9WTU9ERV9ZV1JBUDsKLSAgICAgICBlbHNlCi0gICAgICAgICAgICAgICBmYmktPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7CisJaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ZV1JBUCkKKwkJZmJpLT52YXIudm1vZGUgfD0gRkJfVk1PREVfWVdSQVA7CisJZWxzZQorCQlmYmktPnZhci52bW9kZSAmPSB+RkJfVk1PREVfWVdSQVA7CiAKLSAgICAgICBtdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKKwltdXRleF91bmxvY2soJm14M19mYmktPm11dGV4KTsKIAotICAgICAgIGRldl9kYmcoZmJpLT5kZXZpY2UsICJVcGRhdGUgY29tcGxldGVcbiIpOworCWRldl9kYmcoZmJpLT5kZXZpY2UsICJVcGRhdGUgY29tcGxldGVcbiIpOwogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xMTI0LDE1ICsxMTI0LDE1IEBACiAgKiBibGl0dGluZywgcmVjdGFuZ2xlIGZpbGxpbmcsIGNvcHkgcmVnaW9ucyBhbmQgY3Vyc29yIGRlZmluaXRpb24uCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIG14M2ZiX29wcyA9IHsKLSAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKLSAgICAgICAuZmJfc2V0X3BhciA9IG14M2ZiX3NldF9wYXIsCi0gICAgICAgLmZiX2NoZWNrX3ZhciA9IG14M2ZiX2NoZWNrX3ZhciwKLSAgICAgICAuZmJfc2V0Y29scmVnID0gbXgzZmJfc2V0Y29scmVnLAotICAgICAgIC5mYl9wYW5fZGlzcGxheSA9IG14M2ZiX3Bhbl9kaXNwbGF5LAotICAgICAgIC5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKLSAgICAgICAuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCi0gICAgICAgLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCi0gICAgICAgLmZiX2JsYW5rID0gbXgzZmJfYmxhbmssCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmZiX3NldF9wYXIgPSBteDNmYl9zZXRfcGFyLAorCS5mYl9jaGVja192YXIgPSBteDNmYl9jaGVja192YXIsCisJLmZiX3NldGNvbHJlZyA9IG14M2ZiX3NldGNvbHJlZywKKwkuZmJfcGFuX2Rpc3BsYXkgPSBteDNmYl9wYW5fZGlzcGxheSwKKwkuZmJfZmlsbHJlY3QgPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gY2ZiX2NvcHlhcmVhLAorCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9ibGFuayA9IG14M2ZiX2JsYW5rLAogfTsKIAogI2lmZGVmIENPTkZJR19QTQpAQCAtMTE0NiwxOSArMTE0NiwxOSBAQAogICovCiBzdGF0aWMgaW50IG14M2ZiX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZHJ2X2RhdGEtPmZiaS0+cGFyOworCXN0cnVjdCBteDNmYl9kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZHJ2X2RhdGEtPmZiaS0+cGFyOwogCi0gICAgICAgYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotICAgICAgIGZiX3NldF9zdXNwZW5kKGRydl9kYXRhLT5mYmksIDEpOwotICAgICAgIHJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJZmJfc2V0X3N1c3BlbmQoZHJ2X2RhdGEtPmZiaSwgMSk7CisJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogCi0gICAgICAgaWYgKG14M19mYmktPmJsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspIHsKLSAgICAgICAgICAgICAgIHNkY19kaXNhYmxlX2NoYW5uZWwobXgzX2ZiaSk7Ci0gICAgICAgICAgICAgICBzZGNfc2V0X2JyaWdodG5lc3MobXgzZmIsIDApOworCWlmIChteDNfZmJpLT5ibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LKSB7CisJCXNkY19kaXNhYmxlX2NoYW5uZWwobXgzX2ZiaSk7CisJCXNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgMCk7CiAKLSAgICAgICB9Ci0gICAgICAgcmV0dXJuIDA7CisJfQorCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTE2NiwxOSArMTE2NiwxOSBAQAogICovCiBzdGF0aWMgaW50IG14M2ZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotICAgICAgIHN0cnVjdCBteDNmYl9kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZHJ2X2RhdGEtPmZiaS0+cGFyOworCXN0cnVjdCBteDNmYl9kYXRhICpkcnZfZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZHJ2X2RhdGEtPmZiaS0+cGFyOwogCi0gICAgICAgaWYgKG14M19mYmktPmJsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspIHsKLSAgICAgICAgICAgICAgIHNkY19lbmFibGVfY2hhbm5lbChteDNfZmJpKTsKLSAgICAgICAgICAgICAgIHNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgZHJ2X2RhdGEtPmJhY2tsaWdodF9sZXZlbCk7Ci0gICAgICAgfQorCWlmIChteDNfZmJpLT5ibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LKSB7CisJCXNkY19lbmFibGVfY2hhbm5lbChteDNfZmJpKTsKKwkJc2RjX3NldF9icmlnaHRuZXNzKG14M2ZiLCBkcnZfZGF0YS0+YmFja2xpZ2h0X2xldmVsKTsKKwl9CiAKLSAgICAgICBhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0gICAgICAgZmJfc2V0X3N1c3BlbmQoZHJ2X2RhdGEtPmZiaSwgMCk7Ci0gICAgICAgcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwlmYl9zZXRfc3VzcGVuZChkcnZfZGF0YS0+ZmJpLCAwKTsKKwlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KICNlbHNlCiAjZGVmaW5lIG14M2ZiX3N1c3BlbmQgICBOVUxMCkBAIC0xMTkxLDggKzExOTEsOCBAQAogCiAvKioKICAqIG14M2ZiX21hcF92aWRlb19tZW1vcnkoKSAtIGFsbG9jYXRlcyB0aGUgRFJBTSBtZW1vcnkgZm9yIHRoZSBmcmFtZSBidWZmZXIuCi0gKiBAZmJpOiAgICAgICBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyCi0gKiBAcmV0dXJuOiAgICBFcnJvciBjb2RlIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlCisgKiBAZmJpOglmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyCisgKiBAcmV0dXJuOglFcnJvciBjb2RlIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlCiAgKgogICogVGhpcyBidWZmZXIgaXMgcmVtYXBwZWQgaW50byBhIG5vbi1jYWNoZWQsIG5vbi1idWZmZXJlZCwgbWVtb3J5IHJlZ2lvbiB0bwogICogYWxsb3cgcGFsZXR0ZSBhbmQgcGl4ZWwgd3JpdGVzIHRvIG9jY3VyIHdpdGhvdXQgZmx1c2hpbmcgdGhlIGNhY2hlLiBPbmNlIHRoaXMKQEAgLTEyMDEsMzQ5ICsxMjAxLDM0OSBAQAogICovCiBzdGF0aWMgaW50IG14M2ZiX21hcF92aWRlb19tZW1vcnkoc3RydWN0IGZiX2luZm8gKmZiaSkKIHsKLSAgICAgICBpbnQgcmV0dmFsID0gMDsKLSAgICAgICBkbWFfYWRkcl90IGFkZHI7CisJaW50IHJldHZhbCA9IDA7CisJZG1hX2FkZHJfdCBhZGRyOwogCi0gICAgICAgZmJpLT5zY3JlZW5fYmFzZSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoZmJpLT5kZXZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJpLT5maXguc21lbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFkZHIsIEdGUF9ETUEpOworCWZiaS0+c2NyZWVuX2Jhc2UgPSBkbWFfYWxsb2Nfd3JpdGVjb21iaW5lKGZiaS0+ZGV2aWNlLAorCQkJCQkJICBmYmktPmZpeC5zbWVtX2xlbiwKKwkJCQkJCSAgJmFkZHIsIEdGUF9ETUEpOwogCi0gICAgICAgaWYgKCFmYmktPnNjcmVlbl9iYXNlKSB7Ci0gICAgICAgICAgICAgICBkZXZfZXJyKGZiaS0+ZGV2aWNlLCAiQ2Fubm90IGFsbG9jYXRlICV1IGJ5dGVzIGZyYW1lYnVmZmVyIG1lbW9yeVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgZmJpLT5maXguc21lbV9sZW4pOwotICAgICAgICAgICAgICAgcmV0dmFsID0gLUVCVVNZOwotICAgICAgICAgICAgICAgZ290byBlcnIwOwotICAgICAgIH0KKwlpZiAoIWZiaS0+c2NyZWVuX2Jhc2UpIHsKKwkJZGV2X2VycihmYmktPmRldmljZSwgIkNhbm5vdCBhbGxvY2F0ZSAldSBieXRlcyBmcmFtZWJ1ZmZlciBtZW1vcnlcbiIsCisJCQlmYmktPmZpeC5zbWVtX2xlbik7CisJCXJldHZhbCA9IC1FQlVTWTsKKwkJZ290byBlcnIwOworCX0KIAotICAgICAgIGZiaS0+Zml4LnNtZW1fc3RhcnQgPSBhZGRyOworCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSBhZGRyOwogCi0gICAgICAgZGV2X2RiZyhmYmktPmRldmljZSwgImFsbG9jYXRlZCBmYiBAIHA9MHglMDh4LCB2PTB4JXAsIHNpemU9JWQuXG4iLAotICAgICAgICAgICAgICAgKHVpbnQzMl90KSBmYmktPmZpeC5zbWVtX3N0YXJ0LCBmYmktPnNjcmVlbl9iYXNlLCBmYmktPmZpeC5zbWVtX2xlbik7CisJZGV2X2RiZyhmYmktPmRldmljZSwgImFsbG9jYXRlZCBmYiBAIHA9MHglMDh4LCB2PTB4JXAsIHNpemU9JWQuXG4iLAorCQkodWludDMyX3QpIGZiaS0+Zml4LnNtZW1fc3RhcnQsIGZiaS0+c2NyZWVuX2Jhc2UsIGZiaS0+Zml4LnNtZW1fbGVuKTsKIAotICAgICAgIGZiaS0+c2NyZWVuX3NpemUgPSBmYmktPmZpeC5zbWVtX2xlbjsKKwlmYmktPnNjcmVlbl9zaXplID0gZmJpLT5maXguc21lbV9sZW47CiAKLSAgICAgICAvKiBDbGVhciB0aGUgc2NyZWVuICovCi0gICAgICAgbWVtc2V0KChjaGFyICopZmJpLT5zY3JlZW5fYmFzZSwgMCwgZmJpLT5maXguc21lbV9sZW4pOworCS8qIENsZWFyIHRoZSBzY3JlZW4gKi8KKwltZW1zZXQoKGNoYXIgKilmYmktPnNjcmVlbl9iYXNlLCAwLCBmYmktPmZpeC5zbWVtX2xlbik7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIAogZXJyMDoKLSAgICAgICBmYmktPmZpeC5zbWVtX2xlbiA9IDA7Ci0gICAgICAgZmJpLT5maXguc21lbV9zdGFydCA9IDA7Ci0gICAgICAgZmJpLT5zY3JlZW5fYmFzZSA9IE5VTEw7Ci0gICAgICAgcmV0dXJuIHJldHZhbDsKKwlmYmktPmZpeC5zbWVtX2xlbiA9IDA7CisJZmJpLT5maXguc21lbV9zdGFydCA9IDA7CisJZmJpLT5zY3JlZW5fYmFzZSA9IE5VTEw7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogLyoqCiAgKiBteDNmYl91bm1hcF92aWRlb19tZW1vcnkoKSAtIGRlLWFsbG9jYXRlIGZyYW1lIGJ1ZmZlciBtZW1vcnkuCi0gKiBAZmJpOiAgICAgICBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyCi0gKiBAcmV0dXJuOiAgICBlcnJvciBjb2RlIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlCisgKiBAZmJpOglmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBwb2ludGVyCisgKiBAcmV0dXJuOgllcnJvciBjb2RlIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlCiAgKi8KIHN0YXRpYyBpbnQgbXgzZmJfdW5tYXBfdmlkZW9fbWVtb3J5KHN0cnVjdCBmYl9pbmZvICpmYmkpCiB7Ci0gICAgICAgZG1hX2ZyZWVfd3JpdGVjb21iaW5lKGZiaS0+ZGV2aWNlLCBmYmktPmZpeC5zbWVtX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmJpLT5zY3JlZW5fYmFzZSwgZmJpLT5maXguc21lbV9zdGFydCk7CisJZG1hX2ZyZWVfd3JpdGVjb21iaW5lKGZiaS0+ZGV2aWNlLCBmYmktPmZpeC5zbWVtX2xlbiwKKwkJCSAgICAgIGZiaS0+c2NyZWVuX2Jhc2UsIGZiaS0+Zml4LnNtZW1fc3RhcnQpOwogCi0gICAgICAgZmJpLT5zY3JlZW5fYmFzZSA9IDA7Ci0gICAgICAgZmJpLT5maXguc21lbV9zdGFydCA9IDA7Ci0gICAgICAgZmJpLT5maXguc21lbV9sZW4gPSAwOwotICAgICAgIHJldHVybiAwOworCWZiaS0+c2NyZWVuX2Jhc2UgPSAwOworCWZiaS0+Zml4LnNtZW1fc3RhcnQgPSAwOworCWZiaS0+Zml4LnNtZW1fbGVuID0gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCiAgKiBteDNmYl9pbml0X2ZiaW5mbygpIC0gaW5pdGlhbGl6ZSBmcmFtZWJ1ZmZlciBpbmZvcm1hdGlvbiBvYmplY3QuCi0gKiBAcmV0dXJuOiAgICBpbml0aWFsaXplZCBmcmFtZWJ1ZmZlciBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuOglpbml0aWFsaXplZCBmcmFtZWJ1ZmZlciBzdHJ1Y3R1cmUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZmJfaW5mbyAqbXgzZmJfaW5pdF9mYmluZm8oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZmJfb3BzICpvcHMpCiB7Ci0gICAgICAgc3RydWN0IGZiX2luZm8gKmZiaTsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzZmJpOwotICAgICAgIGludCByZXQ7CisJc3RydWN0IGZiX2luZm8gKmZiaTsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzZmJpOworCWludCByZXQ7CiAKLSAgICAgICAvKiBBbGxvY2F0ZSBzdWZmaWNpZW50IG1lbW9yeSBmb3IgdGhlIGZiIHN0cnVjdHVyZSAqLwotICAgICAgIGZiaSA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgbXgzZmJfaW5mbyksIGRldik7Ci0gICAgICAgaWYgKCFmYmkpCi0gICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwkvKiBBbGxvY2F0ZSBzdWZmaWNpZW50IG1lbW9yeSBmb3IgdGhlIGZiIHN0cnVjdHVyZSAqLworCWZiaSA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgbXgzZmJfaW5mbyksIGRldik7CisJaWYgKCFmYmkpCisJCXJldHVybiBOVUxMOwogCi0gICAgICAgbXgzZmJpICAgICAgICAgICAgICAgICAgPSBmYmktPnBhcjsKLSAgICAgICBteDNmYmktPmNvb2tpZSAgICAgICAgICA9IC1FSU5WQUw7Ci0gICAgICAgbXgzZmJpLT5jdXJfaXB1X2J1ZiAgICAgPSAwOworCW14M2ZiaQkJCT0gZmJpLT5wYXI7CisJbXgzZmJpLT5jb29raWUJCT0gLUVJTlZBTDsKKwlteDNmYmktPmN1cl9pcHVfYnVmCT0gMDsKIAotICAgICAgIGZiaS0+dmFyLmFjdGl2YXRlICAgICAgID0gRkJfQUNUSVZBVEVfTk9XOworCWZiaS0+dmFyLmFjdGl2YXRlCT0gRkJfQUNUSVZBVEVfTk9XOwogCi0gICAgICAgZmJpLT5mYm9wcyAgICAgICAgICAgICAgPSBvcHM7Ci0gICAgICAgZmJpLT5mbGFncyAgICAgICAgICAgICAgPSBGQklORk9fRkxBR19ERUZBVUxUOwotICAgICAgIGZiaS0+cHNldWRvX3BhbGV0dGUgICAgID0gbXgzZmJpLT5wc2V1ZG9fcGFsZXR0ZTsKKwlmYmktPmZib3BzCQk9IG9wczsKKwlmYmktPmZsYWdzCQk9IEZCSU5GT19GTEFHX0RFRkFVTFQ7CisJZmJpLT5wc2V1ZG9fcGFsZXR0ZQk9IG14M2ZiaS0+cHNldWRvX3BhbGV0dGU7CiAKLSAgICAgICBtdXRleF9pbml0KCZteDNmYmktPm11dGV4KTsKKwltdXRleF9pbml0KCZteDNmYmktPm11dGV4KTsKIAotICAgICAgIC8qIEFsbG9jYXRlIGNvbG9ybWFwICovCi0gICAgICAgcmV0ID0gZmJfYWxsb2NfY21hcCgmZmJpLT5jbWFwLCAxNiwgMCk7Ci0gICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgICAgIGZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpKTsKLSAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgIH0KKwkvKiBBbGxvY2F0ZSBjb2xvcm1hcCAqLworCXJldCA9IGZiX2FsbG9jX2NtYXAoJmZiaS0+Y21hcCwgMTYsIDApOworCWlmIChyZXQgPCAwKSB7CisJCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0gICAgICAgcmV0dXJuIGZiaTsKKwlyZXR1cm4gZmJpOwogfQogCiBzdGF0aWMgaW50IGluaXRfZmJfY2hhbihzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIsIHN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbikKIHsKLSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBteDNmYi0+ZGV2OwotICAgICAgIHN0cnVjdCBteDNmYl9wbGF0Zm9ybV9kYXRhICpteDNmYl9wZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLSAgICAgICBjb25zdCBjaGFyICpuYW1lID0gbXgzZmJfcGRhdGEtPm5hbWU7Ci0gICAgICAgdW5zaWduZWQgaW50IGlycTsKLSAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqZmJpOwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNmYmk7Ci0gICAgICAgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsKLSAgICAgICBpbnQgcmV0LCBudW1fbW9kZXM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbXgzZmItPmRldjsKKwlzdHJ1Y3QgbXgzZmJfcGxhdGZvcm1fZGF0YSAqbXgzZmJfcGRhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJY29uc3QgY2hhciAqbmFtZSA9IG14M2ZiX3BkYXRhLT5uYW1lOworCXVuc2lnbmVkIGludCBpcnE7CisJc3RydWN0IGZiX2luZm8gKmZiaTsKKwlzdHJ1Y3QgbXgzZmJfaW5mbyAqbXgzZmJpOworCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGU7CisJaW50IHJldCwgbnVtX21vZGVzOwogCi0gICAgICAgaWNoYW4tPmNsaWVudCA9IG14M2ZiOwotICAgICAgIGlycSA9IGljaGFuLT5lb2ZfaXJxOworCWljaGFuLT5jbGllbnQgPSBteDNmYjsKKwlpcnEgPSBpY2hhbi0+ZW9mX2lycTsKIAotICAgICAgIGlmIChpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZCAhPSBJRE1BQ19TRENfMCkKLSAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworCWlmIChpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZCAhPSBJRE1BQ19TRENfMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICAgICBmYmkgPSBteDNmYl9pbml0X2ZiaW5mbyhkZXYsICZteDNmYl9vcHMpOwotICAgICAgIGlmICghZmJpKQotICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisJZmJpID0gbXgzZmJfaW5pdF9mYmluZm8oZGV2LCAmbXgzZmJfb3BzKTsKKwlpZiAoIWZiaSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLSAgICAgICBpZiAoIWZiX21vZGUpCi0gICAgICAgICAgICAgICBmYl9tb2RlID0gbmFtZTsKKwlpZiAoIWZiX21vZGUpCisJCWZiX21vZGUgPSBuYW1lOwogCi0gICAgICAgaWYgKCFmYl9tb2RlKSB7Ci0gICAgICAgICAgICAgICByZXQgPSAtRUlOVkFMOwotICAgICAgICAgICAgICAgZ290byBlbW9kZTsKLSAgICAgICB9CisJaWYgKCFmYl9tb2RlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZW1vZGU7CisJfQogCi0gICAgICAgaWYgKG14M2ZiX3BkYXRhLT5tb2RlICYmIG14M2ZiX3BkYXRhLT5udW1fbW9kZXMpIHsKLSAgICAgICAgICAgICAgIG1vZGUgPSBteDNmYl9wZGF0YS0+bW9kZTsKLSAgICAgICAgICAgICAgIG51bV9tb2RlcyA9IG14M2ZiX3BkYXRhLT5udW1fbW9kZXM7Ci0gICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgIG1vZGUgPSBteDNmYl9tb2RlZGI7Ci0gICAgICAgICAgICAgICBudW1fbW9kZXMgPSBBUlJBWV9TSVpFKG14M2ZiX21vZGVkYik7Ci0gICAgICAgfQorCWlmIChteDNmYl9wZGF0YS0+bW9kZSAmJiBteDNmYl9wZGF0YS0+bnVtX21vZGVzKSB7CisJCW1vZGUgPSBteDNmYl9wZGF0YS0+bW9kZTsKKwkJbnVtX21vZGVzID0gbXgzZmJfcGRhdGEtPm51bV9tb2RlczsKKwl9IGVsc2UgeworCQltb2RlID0gbXgzZmJfbW9kZWRiOworCQludW1fbW9kZXMgPSBBUlJBWV9TSVpFKG14M2ZiX21vZGVkYik7CisJfQogCi0gICAgICAgaWYgKCFmYl9maW5kX21vZGUoJmZiaS0+dmFyLCBmYmksIGZiX21vZGUsIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbnVtX21vZGVzLCBOVUxMLCBkZWZhdWx0X2JwcCkpIHsKLSAgICAgICAgICAgICAgIHJldCA9IC1FQlVTWTsKLSAgICAgICAgICAgICAgIGdvdG8gZW1vZGU7Ci0gICAgICAgfQorCWlmICghZmJfZmluZF9tb2RlKCZmYmktPnZhciwgZmJpLCBmYl9tb2RlLCBtb2RlLAorCQkJICBudW1fbW9kZXMsIE5VTEwsIGRlZmF1bHRfYnBwKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZW1vZGU7CisJfQogCi0gICAgICAgZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KG1vZGUsIG51bV9tb2RlcywgJmZiaS0+bW9kZWxpc3QpOworCWZiX3ZpZGVvbW9kZV90b19tb2RlbGlzdChtb2RlLCBudW1fbW9kZXMsICZmYmktPm1vZGVsaXN0KTsKIAotICAgICAgIC8qIERlZmF1bHQgWSB2aXJ0dWFsIHNpemUgaXMgMnggcGFuZWwgc2l6ZSAqLwotICAgICAgIGZiaS0+dmFyLnlyZXNfdmlydHVhbCA9IGZiaS0+dmFyLnlyZXMgKiAyOworCS8qIERlZmF1bHQgWSB2aXJ0dWFsIHNpemUgaXMgMnggcGFuZWwgc2l6ZSAqLworCWZiaS0+dmFyLnlyZXNfdmlydHVhbCA9IGZiaS0+dmFyLnlyZXMgKiAyOwogCi0gICAgICAgbXgzZmItPmZiaSA9IGZiaTsKKwlteDNmYi0+ZmJpID0gZmJpOwogCi0gICAgICAgLyogc2V0IERpc3BsYXkgSW50ZXJmYWNlIGNsb2NrIHBlcmlvZCAqLwotICAgICAgIG14M2ZiX3dyaXRlX3JlZyhteDNmYiwgMHgwMDEwMDAxMEwsIERJX0hTUF9DTEtfUEVSKTsKLSAgICAgICAvKiBNaWdodCBuZWVkIHRvIHRyaWdnZXIgSFNQIGNsb2NrIGNoYW5nZSAtIHNlZSA0NC4zLjMuOC41ICovCisJLyogc2V0IERpc3BsYXkgSW50ZXJmYWNlIGNsb2NrIHBlcmlvZCAqLworCW14M2ZiX3dyaXRlX3JlZyhteDNmYiwgMHgwMDEwMDAxMEwsIERJX0hTUF9DTEtfUEVSKTsKKwkvKiBNaWdodCBuZWVkIHRvIHRyaWdnZXIgSFNQIGNsb2NrIGNoYW5nZSAtIHNlZSA0NC4zLjMuOC41ICovCiAKLSAgICAgICBzZGNfc2V0X2JyaWdodG5lc3MobXgzZmIsIDI1NSk7Ci0gICAgICAgc2RjX3NldF9nbG9iYWxfYWxwaGEobXgzZmIsIHRydWUsIDB4RkYpOwotICAgICAgIHNkY19zZXRfY29sb3Jfa2V5KG14M2ZiLCBJRE1BQ19TRENfMCwgZmFsc2UsIDApOworCXNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgMjU1KTsKKwlzZGNfc2V0X2dsb2JhbF9hbHBoYShteDNmYiwgdHJ1ZSwgMHhGRik7CisJc2RjX3NldF9jb2xvcl9rZXkobXgzZmIsIElETUFDX1NEQ18wLCBmYWxzZSwgMCk7CiAKLSAgICAgICBteDNmYmkgICAgICAgICAgICAgICAgICA9IGZiaS0+cGFyOwotICAgICAgIG14M2ZiaS0+aWRtYWNfY2hhbm5lbCAgID0gaWNoYW47Ci0gICAgICAgbXgzZmJpLT5pcHVfY2ggICAgICAgICAgPSBpY2hhbi0+ZG1hX2NoYW4uY2hhbl9pZDsKLSAgICAgICBteDNmYmktPm14M2ZiICAgICAgICAgICA9IG14M2ZiOwotICAgICAgIG14M2ZiaS0+YmxhbmsgICAgICAgICAgID0gRkJfQkxBTktfTk9STUFMOworCW14M2ZiaQkJCT0gZmJpLT5wYXI7CisJbXgzZmJpLT5pZG1hY19jaGFubmVsCT0gaWNoYW47CisJbXgzZmJpLT5pcHVfY2gJCT0gaWNoYW4tPmRtYV9jaGFuLmNoYW5faWQ7CisJbXgzZmJpLT5teDNmYgkJPSBteDNmYjsKKwlteDNmYmktPmJsYW5rCQk9IEZCX0JMQU5LX05PUk1BTDsKIAotICAgICAgIGluaXRfY29tcGxldGlvbigmbXgzZmJpLT5mbGlwX2NtcGwpOwotICAgICAgIGRpc2FibGVfaXJxKGljaGFuLT5lb2ZfaXJxKTsKLSAgICAgICBkZXZfZGJnKG14M2ZiLT5kZXYsICJkaXNhYmxpbmcgaXJxICVkXG4iLCBpY2hhbi0+ZW9mX2lycSk7Ci0gICAgICAgcmV0ID0gbXgzZmJfc2V0X3BhcihmYmkpOwotICAgICAgIGlmIChyZXQgPCAwKQotICAgICAgICAgICAgICAgZ290byBlc2V0cGFyOworCWluaXRfY29tcGxldGlvbigmbXgzZmJpLT5mbGlwX2NtcGwpOworCWRpc2FibGVfaXJxKGljaGFuLT5lb2ZfaXJxKTsKKwlkZXZfZGJnKG14M2ZiLT5kZXYsICJkaXNhYmxpbmcgaXJxICVkXG4iLCBpY2hhbi0+ZW9mX2lycSk7CisJcmV0ID0gbXgzZmJfc2V0X3BhcihmYmkpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVzZXRwYXI7CiAKLSAgICAgICBteDNmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBmYmkpOworCW14M2ZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGZiaSk7CiAKLSAgICAgICBkZXZfaW5mbyhkZXYsICJteDNmYjogZmIgcmVnaXN0ZXJlZCwgdXNpbmcgbW9kZSAlc1xuIiwgZmJfbW9kZSk7CisJZGV2X2luZm8oZGV2LCAibXgzZmI6IGZiIHJlZ2lzdGVyZWQsIHVzaW5nIG1vZGUgJXNcbiIsIGZiX21vZGUpOwogCi0gICAgICAgcmV0ID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJpKTsKLSAgICAgICBpZiAocmV0IDwgMCkKLSAgICAgICAgICAgICAgIGdvdG8gZXJmYjsKKwlyZXQgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmkpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVyZmI7CiAKLSAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIAogZXJmYjoKIGVzZXRwYXI6CiBlbW9kZToKLSAgICAgICBmYl9kZWFsbG9jX2NtYXAoJmZiaS0+Y21hcCk7Ci0gICAgICAgZnJhbWVidWZmZXJfcmVsZWFzZShmYmkpOworCWZiX2RlYWxsb2NfY21hcCgmZmJpLT5jbWFwKTsKKwlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGZiaSk7CiAKLSAgICAgICByZXR1cm4gcmV0OworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBib29sIGNoYW5fZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqYXJnKQogewotICAgICAgIHN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0ICpycSA9IGFyZzsKLSAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0gICAgICAgc3RydWN0IG14M2ZiX3BsYXRmb3JtX2RhdGEgKm14M2ZiX3BkYXRhOworCXN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0ICpycSA9IGFyZzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG14M2ZiX3BsYXRmb3JtX2RhdGEgKm14M2ZiX3BkYXRhOwogCi0gICAgICAgaWYgKCFycSkKLSAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwlpZiAoIXJxKQorCQlyZXR1cm4gZmFsc2U7CiAKLSAgICAgICBkZXYgPSBycS0+bXgzZmItPmRldjsKLSAgICAgICBteDNmYl9wZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlkZXYgPSBycS0+bXgzZmItPmRldjsKKwlteDNmYl9wZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAotICAgICAgIHJldHVybiBycS0+aWQgPT0gY2hhbi0+Y2hhbl9pZCAmJgotICAgICAgICAgICAgICAgbXgzZmJfcGRhdGEtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXY7CisJcmV0dXJuIHJxLT5pZCA9PSBjaGFuLT5jaGFuX2lkICYmCisJCW14M2ZiX3BkYXRhLT5kbWFfZGV2ID09IGNoYW4tPmRldmljZS0+ZGV2OwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX2ZiaShzdHJ1Y3QgZmJfaW5mbyAqZmJpKQogewotICAgICAgIG14M2ZiX3VubWFwX3ZpZGVvX21lbW9yeShmYmkpOworCW14M2ZiX3VubWFwX3ZpZGVvX21lbW9yeShmYmkpOwogCi0gICAgICAgZmJfZGVhbGxvY19jbWFwKCZmYmktPmNtYXApOworCWZiX2RlYWxsb2NfY21hcCgmZmJpLT5jbWFwKTsKIAotICAgICAgIHVucmVnaXN0ZXJfZnJhbWVidWZmZXIoZmJpKTsKLSAgICAgICBmcmFtZWJ1ZmZlcl9yZWxlYXNlKGZiaSk7CisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihmYmkpOworCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpKTsKIH0KIAogc3RhdGljIGludCBteDNmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotICAgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Ci0gICAgICAgaW50IHJldDsKLSAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnNkY19yZWc7Ci0gICAgICAgc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiOwotICAgICAgIGRtYV9jYXBfbWFza190IG1hc2s7Ci0gICAgICAgc3RydWN0IGRtYV9jaGFuICpjaGFuOwotICAgICAgIHN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0IHJxOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnNkY19yZWc7CisJc3RydWN0IG14M2ZiX2RhdGEgKm14M2ZiOworCWRtYV9jYXBfbWFza190IG1hc2s7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuOworCXN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0IHJxOwogCi0gICAgICAgLyoKLSAgICAgICAgKiBEaXNwbGF5IEludGVyZmFjZSAoREkpIGFuZCBTeW5jaHJvbm91cyBEaXNwbGF5IENvbnRyb2xsZXIgKFNEQykKLSAgICAgICAgKiByZWdpc3RlcnMKLSAgICAgICAgKi8KLSAgICAgICBzZGNfcmVnID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLSAgICAgICBpZiAoIXNkY19yZWcpCi0gICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkvKgorCSAqIERpc3BsYXkgSW50ZXJmYWNlIChESSkgYW5kIFN5bmNocm9ub3VzIERpc3BsYXkgQ29udHJvbGxlciAoU0RDKQorCSAqIHJlZ2lzdGVycworCSAqLworCXNkY19yZWcgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghc2RjX3JlZykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICAgICBteDNmYiA9IGt6YWxsb2Moc2l6ZW9mKCpteDNmYiksIEdGUF9LRVJORUwpOwotICAgICAgIGlmICghbXgzZmIpCi0gICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKwlteDNmYiA9IGt6YWxsb2Moc2l6ZW9mKCpteDNmYiksIEdGUF9LRVJORUwpOworCWlmICghbXgzZmIpCisJCXJldHVybiAtRU5PTUVNOwogCi0gICAgICAgc3Bpbl9sb2NrX2luaXQoJm14M2ZiLT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbXgzZmItPmxvY2spOwogCi0gICAgICAgbXgzZmItPnJlZ19iYXNlID0gaW9yZW1hcChzZGNfcmVnLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShzZGNfcmVnKSk7Ci0gICAgICAgaWYgKCFteDNmYi0+cmVnX2Jhc2UpIHsKLSAgICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07Ci0gICAgICAgICAgICAgICBnb3RvIGVyZW1hcDsKLSAgICAgICB9CisJbXgzZmItPnJlZ19iYXNlID0gaW9yZW1hcChzZGNfcmVnLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShzZGNfcmVnKSk7CisJaWYgKCFteDNmYi0+cmVnX2Jhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcmVtYXA7CisJfQogCi0gICAgICAgcHJfZGVidWcoIlJlbWFwcGVkICV4IHRvICV4IGF0ICVwXG4iLCBzZGNfcmVnLT5zdGFydCwgc2RjX3JlZy0+ZW5kLAotICAgICAgICAgICAgICAgIG14M2ZiLT5yZWdfYmFzZSk7CisJcHJfZGVidWcoIlJlbWFwcGVkICV4IHRvICV4IGF0ICVwXG4iLCBzZGNfcmVnLT5zdGFydCwgc2RjX3JlZy0+ZW5kLAorCQkgbXgzZmItPnJlZ19iYXNlKTsKIAotICAgICAgIC8qIElETUFDIGludGVyZmFjZSAqLwotICAgICAgIGRtYWVuZ2luZV9nZXQoKTsKKwkvKiBJRE1BQyBpbnRlcmZhY2UgKi8KKwlkbWFlbmdpbmVfZ2V0KCk7CiAKLSAgICAgICBteDNmYi0+ZGV2ID0gZGV2OwotICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG14M2ZiKTsKKwlteDNmYi0+ZGV2ID0gZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG14M2ZiKTsKIAotICAgICAgIHJxLm14M2ZiID0gbXgzZmI7CisJcnEubXgzZmIgPSBteDNmYjsKIAotICAgICAgIGRtYV9jYXBfemVybyhtYXNrKTsKLSAgICAgICBkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOwotICAgICAgIGRtYV9jYXBfc2V0KERNQV9QUklWQVRFLCBtYXNrKTsKLSAgICAgICBycS5pZCA9IElETUFDX1NEQ18wOwotICAgICAgIGNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGNoYW5fZmlsdGVyLCAmcnEpOwotICAgICAgIGlmICghY2hhbikgewotICAgICAgICAgICAgICAgcmV0ID0gLUVCVVNZOwotICAgICAgICAgICAgICAgZ290byBlcnNkYzA7Ci0gICAgICAgfQorCWRtYV9jYXBfemVybyhtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9QUklWQVRFLCBtYXNrKTsKKwlycS5pZCA9IElETUFDX1NEQ18wOworCWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGNoYW5fZmlsdGVyLCAmcnEpOworCWlmICghY2hhbikgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJzZGMwOworCX0KIAotICAgICAgIHJldCA9IGluaXRfZmJfY2hhbihteDNmYiwgdG9faWRtYWNfY2hhbihjaGFuKSk7Ci0gICAgICAgaWYgKHJldCA8IDApCi0gICAgICAgICAgICAgICBnb3RvIGVpc2RjMDsKKwlyZXQgPSBpbml0X2ZiX2NoYW4obXgzZmIsIHRvX2lkbWFjX2NoYW4oY2hhbikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVpc2RjMDsKIAotICAgICAgIG14M2ZiLT5iYWNrbGlnaHRfbGV2ZWwgPSAyNTU7CisJbXgzZmItPmJhY2tsaWdodF9sZXZlbCA9IDI1NTsKIAotICAgICAgIHJldHVybiAwOworCXJldHVybiAwOwogCiBlaXNkYzA6Ci0gICAgICAgZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKKwlkbWFfcmVsZWFzZV9jaGFubmVsKGNoYW4pOwogZXJzZGMwOgotICAgICAgIGRtYWVuZ2luZV9wdXQoKTsKLSAgICAgICBpb3VubWFwKG14M2ZiLT5yZWdfYmFzZSk7CisJZG1hZW5naW5lX3B1dCgpOworCWlvdW5tYXAobXgzZmItPnJlZ19iYXNlKTsKIGVyZW1hcDoKLSAgICAgICBrZnJlZShteDNmYik7Ci0gICAgICAgZGV2X2VycihkZXYsICJteDNmYjogZmFpbGVkIHRvIHJlZ2lzdGVyIGZiXG4iKTsKLSAgICAgICByZXR1cm4gcmV0OworCWtmcmVlKG14M2ZiKTsKKwlkZXZfZXJyKGRldiwgIm14M2ZiOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZmJcbiIpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbXgzZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLSAgICAgICBzdHJ1Y3QgbXgzZmJfZGF0YSAqbXgzZmIgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotICAgICAgIHN0cnVjdCBmYl9pbmZvICpmYmkgPSBteDNmYi0+ZmJpOwotICAgICAgIHN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gZmJpLT5wYXI7Ci0gICAgICAgc3RydWN0IGRtYV9jaGFuICpjaGFuOworCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGZiX2luZm8gKmZiaSA9IG14M2ZiLT5mYmk7CisJc3RydWN0IG14M2ZiX2luZm8gKm14M19mYmkgPSBmYmktPnBhcjsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CiAKLSAgICAgICBjaGFuID0gJm14M19mYmktPmlkbWFjX2NoYW5uZWwtPmRtYV9jaGFuOwotICAgICAgIHJlbGVhc2VfZmJpKGZiaSk7CisJY2hhbiA9ICZteDNfZmJpLT5pZG1hY19jaGFubmVsLT5kbWFfY2hhbjsKKwlyZWxlYXNlX2ZiaShmYmkpOwogCi0gICAgICAgZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKLSAgICAgICBkbWFlbmdpbmVfcHV0KCk7CisJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKKwlkbWFlbmdpbmVfcHV0KCk7CiAKLSAgICAgICBpb3VubWFwKG14M2ZiLT5yZWdfYmFzZSk7Ci0gICAgICAga2ZyZWUobXgzZmIpOwotICAgICAgIHJldHVybiAwOworCWlvdW5tYXAobXgzZmItPnJlZ19iYXNlKTsKKwlrZnJlZShteDNmYik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG14M2ZiX2RyaXZlciA9IHsKLSAgICAgICAuZHJpdmVyID0gewotICAgICAgICAgICAgICAgICAgLm5hbWUgPSBNWDNGQl9OQU1FLAotICAgICAgIH0sCi0gICAgICAgLnByb2JlID0gbXgzZmJfcHJvYmUsCi0gICAgICAgLnJlbW92ZSA9IG14M2ZiX3JlbW92ZSwKLSAgICAgICAuc3VzcGVuZCA9IG14M2ZiX3N1c3BlbmQsCi0gICAgICAgLnJlc3VtZSA9IG14M2ZiX3Jlc3VtZSwKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9IE1YM0ZCX05BTUUsCisJfSwKKwkucHJvYmUgPSBteDNmYl9wcm9iZSwKKwkucmVtb3ZlID0gbXgzZmJfcmVtb3ZlLAorCS5zdXNwZW5kID0gbXgzZmJfc3VzcGVuZCwKKwkucmVzdW1lID0gbXgzZmJfcmVzdW1lLAogfTsKIAogLyoKICAqIFBhcnNlIHVzZXIgc3BlY2lmaWVkIG9wdGlvbnMgKGB2aWRlbz1teDNmYjonKQogICogZXhhbXBsZToKLSAqICAgICB2aWRlbz1teDNmYjpicHA9MTYKKyAqIAl2aWRlbz1teDNmYjpicHA9MTYKICAqLwogc3RhdGljIGludCBteDNmYl9zZXR1cCh2b2lkKQogewogI2lmbmRlZiBNT0RVTEUKLSAgICAgICBjaGFyICpvcHQsICpvcHRpb25zID0gTlVMTDsKKwljaGFyICpvcHQsICpvcHRpb25zID0gTlVMTDsKIAotICAgICAgIGlmIChmYl9nZXRfb3B0aW9ucygibXgzZmIiLCAmb3B0aW9ucykpCi0gICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKwlpZiAoZmJfZ2V0X29wdGlvbnMoIm14M2ZiIiwgJm9wdGlvbnMpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotICAgICAgIGlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCi0gICAgICAgICAgICAgICByZXR1cm4gMDsKKwlpZiAoIW9wdGlvbnMgfHwgISpvcHRpb25zKQorCQlyZXR1cm4gMDsKIAotICAgICAgIHdoaWxlICgob3B0ID0gc3Ryc2VwKCZvcHRpb25zLCAiLCIpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICBpZiAoISpvcHQpCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgaWYgKCFzdHJuY21wKG9wdCwgImJwcD0iLCA0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9icHAgPSBzaW1wbGVfc3RydG91bChvcHQgKyA0LCBOVUxMLCAwKTsKLSAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgZmJfbW9kZSA9IG9wdDsKLSAgICAgICB9CisJd2hpbGUgKChvcHQgPSBzdHJzZXAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKKwkJaWYgKCEqb3B0KQorCQkJY29udGludWU7CisJCWlmICghc3RybmNtcChvcHQsICJicHA9IiwgNCkpCisJCQlkZWZhdWx0X2JwcCA9IHNpbXBsZV9zdHJ0b3VsKG9wdCArIDQsIE5VTEwsIDApOworCQllbHNlCisJCQlmYl9tb2RlID0gb3B0OworCX0KICNlbmRpZgogCi0gICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG14M2ZiX2luaXQodm9pZCkKIHsKLSAgICAgICBpbnQgcmV0ID0gbXgzZmJfc2V0dXAoKTsKKwlpbnQgcmV0ID0gbXgzZmJfc2V0dXAoKTsKIAotICAgICAgIGlmIChyZXQgPCAwKQotICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAotICAgICAgIHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXgzZmJfZHJpdmVyKTsKLSAgICAgICByZXR1cm4gcmV0OworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbXgzZmJfZHJpdmVyKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbXgzZmJfZXhpdCh2b2lkKQogewotICAgICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZteDNmYl9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZteDNmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChteDNmYl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcG1hZy1iYS1mYi5jIGIvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMKaW5kZXggM2EzZjgwZi4uMDU3M2VjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9wbWFnLWJhLWZiLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgcG1hZ2JhZmJfcGFyKSwgZGV2KTsKIAlpZiAoIWluZm8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgbWVtb3J5XG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNjAsNyArMTYwLDcgQEAKIAogCWlmIChmYl9hbGxvY19jbWFwKCZpbmZvLT5jbWFwLCAyNTYsIDApIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgYWxsb2NhdGUgY29sb3IgbWFwXG4iLAotCQkgICAgICAgZGV2LT5idXNfaWQpOworCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2FsbG9jOwogCX0KQEAgLTE3Myw4ICsxNzMsOSBAQAogCS8qIFJlcXVlc3QgdGhlIEkvTyBNRU0gcmVzb3VyY2UuICAqLwogCXN0YXJ0ID0gdGRldi0+cmVzb3VyY2Uuc3RhcnQ7CiAJbGVuID0gdGRldi0+cmVzb3VyY2UuZW5kIC0gc3RhcnQgKyAxOwotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHN0YXJ0LCBsZW4sIGRldi0+YnVzX2lkKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVzZXJ2ZSBGQiByZWdpb25cbiIsIGRldi0+YnVzX2lkKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCwgbGVuLCBkZXZfbmFtZShkZXYpKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgcmVzZXJ2ZSBGQiByZWdpb25cbiIsCisJCSAgICAgICBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGVycl9jbWFwOwogCX0KQEAgLTE4Myw3ICsxODQsNyBAQAogCWluZm8tPmZpeC5tbWlvX3N0YXJ0ID0gc3RhcnQ7CiAJcGFyLT5tbWlvID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5tbWlvX3N0YXJ0LCBpbmZvLT5maXgubW1pb19sZW4pOwogCWlmICghcGFyLT5tbWlvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgTU1JT1xuIiwgZGV2LT5idXNfaWQpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIE1NSU9cbiIsIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9yZXNvdXJjZTsKIAl9CkBAIC0xOTQsNyArMTk1LDcgQEAKIAlpbmZvLT5zY3JlZW5fYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5maXguc21lbV9zdGFydCwKIAkJCQkJICAgIGluZm8tPmZpeC5zbWVtX2xlbik7CiAJaWYgKCFpbmZvLT5zY3JlZW5fYmFzZSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIEZCXG4iLCBkZXYtPmJ1c19pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgRkJcbiIsIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9tbWlvX21hcDsKIAl9CkBAIC0yMDUsMTQgKzIwNiwxNCBAQAogCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIiwKLQkJICAgICAgIGRldi0+YnVzX2lkKTsKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQlnb3RvIGVycl9zbWVtX21hcDsKIAl9CiAKIAlnZXRfZGV2aWNlKGRldik7CiAKIAlwcl9pbmZvKCJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlIGF0ICVzXG4iLAotCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGRldi0+YnVzX2lkKTsKKwkJaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCBkZXZfbmFtZShkZXYpKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BtYWdiLWItZmIuYyBiL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jCmluZGV4IDliODA1OTcuLjk4NzQ4NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcG1hZ2ItYi1mYi5jCkBAIC0yNTgsNyArMjU4LDcgQEAKIAogCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYyhzaXplb2Yoc3RydWN0IHBtYWdiYmZiX3BhciksIGRldik7CiAJaWYgKCFpbmZvKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeVxuIiwgZGV2X25hbWUoZGV2KSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjY3LDcgKzI2Nyw3IEBACiAKIAlpZiAoZmJfYWxsb2NfY21hcCgmaW5mby0+Y21hcCwgMjU2LCAwKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGFsbG9jYXRlIGNvbG9yIG1hcFxuIiwKLQkJICAgICAgIGRldi0+YnVzX2lkKTsKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9hbGxvYzsKIAl9CkBAIC0yODAsOCArMjgwLDkgQEAKIAkvKiBSZXF1ZXN0IHRoZSBJL08gTUVNIHJlc291cmNlLiAgKi8KIAlzdGFydCA9IHRkZXYtPnJlc291cmNlLnN0YXJ0OwogCWxlbiA9IHRkZXYtPnJlc291cmNlLmVuZCAtIHN0YXJ0ICsgMTsKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCwgbGVuLCBkZXYtPmJ1c19pZCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlc2VydmUgRkIgcmVnaW9uXG4iLCBkZXYtPmJ1c19pZCk7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsIGxlbiwgZGV2X25hbWUoZGV2KSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IHJlc2VydmUgRkIgcmVnaW9uXG4iLAorCQkgICAgICAgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FQlVTWTsKIAkJZ290byBlcnJfY21hcDsKIAl9CkBAIC0yOTAsNyArMjkxLDcgQEAKIAlpbmZvLT5maXgubW1pb19zdGFydCA9IHN0YXJ0OwogCXBhci0+bW1pbyA9IGlvcmVtYXBfbm9jYWNoZShpbmZvLT5maXgubW1pb19zdGFydCwgaW5mby0+Zml4Lm1taW9fbGVuKTsKIAlpZiAoIXBhci0+bW1pbykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgbWFwIE1NSU9cbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBNTUlPXG4iLCBkZXZfbmFtZShkZXYpKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfcmVzb3VyY2U7CiAJfQpAQCAtMzAxLDcgKzMwMiw3IEBACiAJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBzdGFydCArIFBNQUdCX0JfRkJNRU07CiAJcGFyLT5zbWVtID0gaW9yZW1hcF9ub2NhY2hlKGluZm8tPmZpeC5zbWVtX3N0YXJ0LCBpbmZvLT5maXguc21lbV9sZW4pOwogCWlmICghcGFyLT5zbWVtKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBtYXAgRkJcbiIsIGRldi0+YnVzX2lkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IG1hcCBGQlxuIiwgZGV2X25hbWUoZGV2KSk7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX21taW9fbWFwOwogCX0KQEAgLTMxNiw3ICszMTcsNyBAQAogCWVyciA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOwogCWlmIChlcnIgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBmcmFtZWJ1ZmZlclxuIiwKLQkJICAgICAgIGRldi0+YnVzX2lkKTsKKwkJICAgICAgIGRldl9uYW1lKGRldikpOwogCQlnb3RvIGVycl9zbWVtX21hcDsKIAl9CiAKQEAgLTMyOCw3ICszMjksNyBAQAogCQkgcGFyLT5vc2MxIC8gMTAwMCwgcGFyLT5vc2MxICUgMTAwMCk7CiAKIAlwcl9pbmZvKCJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlIGF0ICVzXG4iLAotCQlpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIGRldi0+YnVzX2lkKTsKKwkJaW5mby0+bm9kZSwgaW5mby0+Zml4LmlkLCBkZXZfbmFtZShkZXYpKTsKIAlwcl9pbmZvKCJmYiVkOiBPc2MwOiAlcywgT3NjMTogJXMsIE9zYyV1IHNlbGVjdGVkXG4iLAogCQlpbmZvLT5ub2RlLCBmcmVxMCwgcGFyLT5vc2MxID8gZnJlcTEgOiAiZGlzYWJsZWQiLAogCQlwYXItPm9zYzEgIT0gMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKaW5kZXggODdmODI2ZS4uZTAwYzFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wczNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHMzZmIuYwpAQCAtMTIxMyw3ICsxMjEzLDcgQEAKIAlkZXYtPmNvcmUuZHJpdmVyX2RhdGEgPSBpbmZvOwogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAiJXMgJXMsIHVzaW5nICV1IEtpQiBvZiB2aWRlbyBtZW1vcnlcbiIsCi0JCSBkZXZfZHJpdmVyX3N0cmluZyhpbmZvLT5kZXYpLCBpbmZvLT5kZXYtPmJ1c19pZCwKKwkJIGRldl9kcml2ZXJfc3RyaW5nKGluZm8tPmRldiksIGRldl9uYW1lKGluZm8tPmRldiksCiAJCSBpbmZvLT5maXguc21lbV9sZW4gPj4gMTApOwogCiAJdGFzayA9IGt0aHJlYWRfcnVuKHBzM2ZiZCwgaW5mbywgREVWSUNFX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wdnIyZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKaW5kZXggMGEwZmQ0OC4uNTNmOGYxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wdnIyZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCkBAIC02MSw3ICs2MSw3IEBACiAjaW5jbHVkZSA8bWFjaC1kcmVhbWNhc3QvbWFjaC9zeXNhc2ljLmg+CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CkBAIC0xODgsNyArMTg4LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHB2cjJmYl9tYXA7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19TSF9ETUEKKyNpZmRlZiBDT05GSUdfUFZSMl9ETUEKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hkbWEgPSBQVlIyX0NBU0NBREVfQ0hBTjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcHZyMmRtYSA9IE9OQ0hJUF9OUl9ETUFfQ0hBTk5FTFM7CiAjZW5kaWYKQEAgLTIwNyw3ICsyMDcsNyBAQAogc3RhdGljIGludCBwdnIyX2luaXRfY2FibGUodm9pZCk7CiBzdGF0aWMgaW50IHB2cjJfZ2V0X3BhcmFtKGNvbnN0IHN0cnVjdCBwdnIyX3BhcmFtcyAqcCwgY29uc3QgY2hhciAqcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsLCBpbnQgc2l6ZSk7Ci0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogc3RhdGljIHNzaXplX3QgcHZyMmZiX3dyaXRlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOwogI2VuZGlmCkBAIC0yMTgsNyArMjE4LDcgQEAKIAkuZmJfYmxhbmsJPSBwdnIyZmJfYmxhbmssCiAJLmZiX2NoZWNrX3Zhcgk9IHB2cjJmYl9jaGVja192YXIsCiAJLmZiX3NldF9wYXIJPSBwdnIyZmJfc2V0X3BhciwKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiAJLmZiX3dyaXRlCT0gcHZyMmZiX3dyaXRlLAogI2VuZGlmCiAJLmZiX2ZpbGxyZWN0CT0gY2ZiX2ZpbGxyZWN0LApAQCAtNjcxLDcgKzY3MSw3IEBACiAJcmV0dXJuIGNhYmxlX3R5cGU7CiB9CiAKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiBzdGF0aWMgc3NpemVfdCBwdnIyZmJfd3JpdGUoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKQEAgLTc0Myw3ICs3NDMsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KLSNlbmRpZiAvKiBDT05GSUdfU0hfRE1BICovCisjZW5kaWYgLyogQ09ORklHX1BWUjJfRE1BICovCiAKIC8qKgogICogcHZyMmZiX2NvbW1vbl9pbml0CkBAIC04OTMsNyArODkzLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfU0hfRE1BCisjaWZkZWYgQ09ORklHX1BWUjJfRE1BCiAJaWYgKHJlcXVlc3RfZG1hKHB2cjJkbWEsICJwdnIyIikgIT0gMCkgewogCQlmcmVlX2lycShIV19FVkVOVF9WU1lOQywgMCk7CiAJCXJldHVybiAtRUJVU1k7CkBAIC05MTUsNyArOTE1LDcgQEAKIAl9CiAKIAlmcmVlX2lycShIV19FVkVOVF9WU1lOQywgMCk7Ci0jaWZkZWYgQ09ORklHX1NIX0RNQQorI2lmZGVmIENPTkZJR19QVlIyX0RNQQogCWZyZWVfZG1hKHB2cjJkbWEpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKaW5kZXggNjQyYzFkNC4uODRmNjMyMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B4YWZiLmMKQEAgLTU5LDcgKzU5LDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvYml0ZmllbGQuaD4KICNpbmNsdWRlIDxtYWNoL3B4YWZiLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCmluZGV4IDc5Y2YwYjE5Li5iMGI0NTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKQEAgLTEwMTcsNiArMTAxNywxMCBAQAogCiAJczNjMjQxMGZiX2luaXRfcmVnaXN0ZXJzKGZiaW5mbyk7CiAKKwkvKiByZS1hY3RpdmF0ZSBvdXIgZGlzcGxheSBhZnRlciByZXN1bWUgKi8KKwlzM2MyNDEwZmJfYWN0aXZhdGVfdmFyKGZiaW5mbyk7CisJczNjMjQxMGZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGZiaW5mbyk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCmluZGV4IDA3NmY5NDYuLmZhZDU4Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKQEAgLTE3Niw5ICsxNzYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9hc3NhYmV0Lmg+CiAjaW5jbHVkZSA8bWFjaC9zaGFubm9uLmg+CkBAIC0yNTEsMjIgKzI1MSw2IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NBMTEwMF9IMzgwMAotc3RhdGljIHN0cnVjdCBzYTExMDBmYl9tYWNoX2luZm8gaDM4MDBfaW5mbyBfX2luaXRkYXRhID0gewotCS5waXhjbG9jawk9IDE3NDc1NywgCS5icHAJCT0gMTYsCi0JLnhyZXMJCT0gMzIwLAkJLnlyZXMJCT0gMjQwLAotCi0JLmhzeW5jX2xlbgk9IDMsCQkudnN5bmNfbGVuCT0gMywKLQkubGVmdF9tYXJnaW4JPSAxMiwJCS51cHBlcl9tYXJnaW4JPSAxMCwKLQkucmlnaHRfbWFyZ2luCT0gMTcsCQkubG93ZXJfbWFyZ2luCT0gMSwKLQotCS5jbWFwX3N0YXRpYwk9IDEsCi0KLQkubGNjcjAJCT0gTENDUjBfQ29sb3IgfCBMQ0NSMF9TbmdsIHwgTENDUjBfQWN0LAotCS5sY2NyMwkJPSBMQ0NSM19PdXRFbkggfCBMQ0NSM19QaXhSc0VkZyB8IExDQ1IzX0FDQnNEaXYoMiksCi19OwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfU0ExMTAwX0gzNjAwCiBzdGF0aWMgc3RydWN0IHNhMTEwMGZiX21hY2hfaW5mbyBoMzYwMF9pbmZvIF9faW5pdGRhdGEgPSB7CiAJLnBpeGNsb2NrCT0gMTc0NzU3LCAJLmJwcAkJPSAxNiwKQEAgLTQzMiwxMSArNDE2LDYgQEAKIAkJZmJpLT5yZ2JbUkdCXzE2XSA9ICZoMzYwMF9yZ2JfMTY7CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NBMTEwMF9IMzgwMAotCWlmIChtYWNoaW5lX2lzX2gzODAwKCkpIHsKLQkJaW5mID0gJmgzODAwX2luZm87Ci0JfQotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NBMTEwMF9DT0xMSUUKIAlpZiAobWFjaGluZV9pc19jb2xsaWUoKSkgewogCQlpbmYgPSAmY29sbGllX2luZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCmluZGV4IDJjNWQwNjkuLjkyZWEwYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCkBAIC0zMyw2ICszMyw4IEBACiAJc3RydWN0IGZiX2luZm8gaW5mbzsKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CiAJc3RydWN0IGZiX2RlZmVycmVkX2lvIGRlZmlvOworCXVuc2lnbmVkIGxvbmcgZnJhbWVfZW5kOworCXdhaXRfcXVldWVfaGVhZF90IGZyYW1lX2VuZF93YWl0OwogfTsKIAogc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXYgewpAQCAtMjI2LDcgKzIyOCwxMCBAQAogc3RhdGljIGlycXJldHVybl90IHNoX21vYmlsZV9sY2RjX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBzaF9tb2JpbGVfbGNkY19wcml2ICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfY2hhbiAqY2g7CiAJdW5zaWduZWQgbG9uZyB0bXA7CisJaW50IGlzX3N1YjsKKwlpbnQgazsKIAogCS8qIGFja25vd2xlZGdlIGludGVycnVwdCAqLwogCXRtcCA9IGxjZGNfcmVhZChwcml2LCBfTERJTlRSKTsKQEAgLTIzNCw4ICsyMzksMjQgQEAKIAl0bXAgfD0gMHgwMDAwMDBmZiBeIExESU5UUl9GUzsgLyogc3RhdHVzIGluIGxvdyA4ICovCiAJbGNkY193cml0ZShwcml2LCBfTERJTlRSLCB0bXApOwogCi0JLyogZGlzYWJsZSBjbG9ja3MgKi8KLQlzaF9tb2JpbGVfbGNkY19jbGtfb2ZmKHByaXYpOworCS8qIGZpZ3VyZSBvdXQgaWYgdGhpcyBpbnRlcnJ1cHQgaXMgZm9yIG1haW4gb3Igc3ViIGxjZCAqLworCWlzX3N1YiA9IChsY2RjX3JlYWQocHJpdiwgX0xEU1IpICYgKDEgPDwgMTApKSA/IDEgOiAwOworCisJLyogd2FrZSB1cCBjaGFubmVsIGFuZCBkaXNhYmxlIGNsb2NrcyovCisJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUocHJpdi0+Y2gpOyBrKyspIHsKKwkJY2ggPSAmcHJpdi0+Y2hba107CisKKwkJaWYgKCFjaC0+ZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpc19zdWIgPT0gbGNkY19jaGFuX2lzX3N1YmxjZChjaCkpIHsKKwkJCWNoLT5mcmFtZV9lbmQgPSAxOworCQkJd2FrZV91cCgmY2gtPmZyYW1lX2VuZF93YWl0KTsKKworCQkJc2hfbW9iaWxlX2xjZGNfY2xrX29mZihwcml2KTsKKwkJfQorCX0KKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNDQ4LDE4ICs0NjksMjcgQEAKIAlzdHJ1Y3Qgc2hfbW9iaWxlX2xjZGNfYm9hcmRfY2ZnCSpib2FyZF9jZmc7CiAJaW50IGs7CiAKLQkvKiB0ZWxsIHRoZSBib2FyZCBjb2RlIHRvIGRpc2FibGUgdGhlIHBhbmVsICovCisJLyogY2xlYW4gdXAgZGVmZXJyZWQgaW8gYW5kIGFzayBib2FyZCBjb2RlIHRvIGRpc2FibGUgcGFuZWwgKi8KIAlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShwcml2LT5jaCk7IGsrKykgewogCQljaCA9ICZwcml2LT5jaFtrXTsKKworCQkvKiBkZWZlcnJlZCBpbyBtb2RlOgorCQkgKiBmbHVzaCBmcmFtZSwgYW5kIHdhaXQgZm9yIGZyYW1lIGVuZCBpbnRlcnJ1cHQKKwkJICogY2xlYW4gdXAgZGVmZXJyZWQgaW8gYW5kIGVuYWJsZSBjbG9jaworCQkgKi8KKwkJaWYgKGNoLT5pbmZvLmZiZGVmaW8pIHsKKwkJCWNoLT5mcmFtZV9lbmQgPSAwOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaC0+aW5mby5kZWZlcnJlZF93b3JrLCAwKTsKKwkJCXdhaXRfZXZlbnQoY2gtPmZyYW1lX2VuZF93YWl0LCBjaC0+ZnJhbWVfZW5kKTsKKwkJCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoJmNoLT5pbmZvKTsKKwkJCWNoLT5pbmZvLmZiZGVmaW8gPSBOVUxMOworCQkJc2hfbW9iaWxlX2xjZGNfY2xrX29uKHByaXYpOworCQl9CisKIAkJYm9hcmRfY2ZnID0gJmNoLT5jZmcuYm9hcmRfY2ZnOwogCQlpZiAoYm9hcmRfY2ZnLT5kaXNwbGF5X29mZikKIAkJCWJvYXJkX2NmZy0+ZGlzcGxheV9vZmYoYm9hcmRfY2ZnLT5ib2FyZF9kYXRhKTsKIAotCQkvKiBjbGVhbnVwIGRlZmVycmVkIGlvIGlmIGVuYWJsZWQgKi8KLQkJaWYgKGNoLT5pbmZvLmZiZGVmaW8pIHsKLQkJCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoJmNoLT5pbmZvKTsKLQkJCWNoLT5pbmZvLmZiZGVmaW8gPSBOVUxMOwotCQl9CiAJfQogCiAJLyogc3RvcCB0aGUgbGNkYyAqLwpAQCAtNjUyLDYgKzY4MiwyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNoX21vYmlsZV9sY2RjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKworCXNoX21vYmlsZV9sY2RjX3N0b3AocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoX21vYmlsZV9sY2RjX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCisJcmV0dXJuIHNoX21vYmlsZV9sY2RjX3N0YXJ0KHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZfcG1fb3BzIHNoX21vYmlsZV9sY2RjX2Rldl9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBzaF9tb2JpbGVfbGNkY19zdXNwZW5kLAorCS5yZXN1bWUgPSBzaF9tb2JpbGVfbGNkY19yZXN1bWUsCit9OworCiBzdGF0aWMgaW50IHNoX21vYmlsZV9sY2RjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIAogc3RhdGljIGludCBfX2luaXQgc2hfbW9iaWxlX2xjZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTY4Nyw3ICs3MzcsNyBAQAogCX0KIAogCWVycm9yID0gcmVxdWVzdF9pcnEoaSwgc2hfbW9iaWxlX2xjZGNfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJICAgIHBkZXYtPmRldi5idXNfaWQsIHByaXYpOworCQkJICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBwcml2KTsKIAlpZiAoZXJyb3IpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgaXJxXG4iKTsKIAkJZ290byBlcnIxOwpAQCAtNzA3LDYgKzc1Nyw3IEBACiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBpbnRlcmZhY2UgdHlwZVxuIik7CiAJCQlnb3RvIGVycjE7CiAJCX0KKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+Y2hbaV0uZnJhbWVfZW5kX3dhaXQpOwogCiAJCXN3aXRjaCAocGRhdGEtPmNoW2ldLmNoYW4pIHsKIAkJY2FzZSBMQ0RDX0NIQU5fTUFJTkxDRDoKQEAgLTg2MCw2ICs5MTEsNyBAQAogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAic2hfbW9iaWxlX2xjZGNfZmIiLAogCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5wbQkJPSAmc2hfbW9iaWxlX2xjZGNfZGV2X3BtX29wcywKIAl9LAogCS5wcm9iZQkJPSBzaF9tb2JpbGVfbGNkY19wcm9iZSwKIAkucmVtb3ZlCQk9IHNoX21vYmlsZV9sY2RjX3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCmluZGV4IDdiYWYyZGQuLmExZWIwODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby90bWlvZmIuYwpAQCAtNzUxLDcgKzc1MSw3IEBACiAJfQogCiAJcmV0dmFsID0gcmVxdWVzdF9pcnEoaXJxLCAmdG1pb2ZiX2lycSwgSVJRRl9ESVNBQkxFRCwKLQkJCQkJZGV2LT5kZXYuYnVzX2lkLCBpbmZvKTsKKwkJCQkJZGV2X25hbWUoJmRldi0+ZGV2KSwgaW5mbyk7CiAKIAlpZiAocmV0dmFsKQogCQlnb3RvIGVycl9yZXF1ZXN0X2lycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdXZlc2FmYi5jIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKaW5kZXggNmMyZDM3Zi4uNzRhZTc1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby91dmVzYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby91dmVzYWZiLmMKQEAgLTIwNCw4ICsyMDQsMTEgQEAKIAkJfSBlbHNlIHsKIAkJCXY4NmRfc3RhcnRlZCA9IDE7CiAJCQllcnIgPSBjbl9uZXRsaW5rX3NlbmQobSwgMCwgZ2ZwX2FueSgpKTsKKwkJCWlmIChlcnIgPT0gLUVOT0JVRlMpCisJCQkJZXJyID0gMDsKIAkJfQotCX0KKwl9IGVsc2UgaWYgKGVyciA9PSAtRU5PQlVGUykKKwkJZXJyID0gMDsKIAogCWlmICghZXJyICYmICEodGFzay0+dC5mbGFncyAmIFRGX0VYSVQpKQogCQllcnIgPSAhd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KHRhc2stPmRvbmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3cxL21hc3RlcnMvbXhjX3cxLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvbXhjX3cxLmMKaW5kZXggYjlkNzRkMC4uNjUyNDRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy93MS9tYXN0ZXJzL214Y193MS5jCisrKyBiL2RyaXZlcnMvdzEvbWFzdGVycy9teGNfdzEuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJaWYgKCFtZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1kZXYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm93aXJlX2NsayIpOworCW1kZXYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm93aXJlIik7CiAJaWYgKCFtZGV2LT5jbGspIHsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBmYWlsZWRfY2xrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwppbmRleCBjOTczODg5Li5hN2UzYjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwpAQCAtNTkwLDggKzU5MCw4IEBACiAJfQogCiAJLyogZ2V0IGludGVyZmFjZSAmIGZ1bmN0aW9uYWwgY2xvY2sgb2JqZWN0cyAqLwotCWhkcV9kYXRhLT5oZHFfaWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaGRxX2ljayIpOwotCWhkcV9kYXRhLT5oZHFfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaGRxX2ZjayIpOworCWhkcV9kYXRhLT5oZHFfaWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaWNrIik7CisJaGRxX2RhdGEtPmhkcV9mY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJmY2siKTsKIAogCWlmIChJU19FUlIoaGRxX2RhdGEtPmhkcV9pY2spIHx8IElTX0VSUihoZHFfZGF0YS0+aGRxX2ZjaykpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IEhEUSBjbG9jayBvYmplY3RzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCAzMjVjMTBmLi41NWY2NGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC05NDAsMjEgKzk0MCw2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB3ZHQuCiAKLWNvbmZpZyBXRFRfNTAxCi0JYm9vbCAiV0RUNTAxIGZlYXR1cmVzIgotCWRlcGVuZHMgb24gV0RUCi0JaGVscAotCSAgU2F5aW5nIFkgaGVyZSBhbmQgY3JlYXRpbmcgYSBjaGFyYWN0ZXIgc3BlY2lhbCBmaWxlIC9kZXYvdGVtcGVyYXR1cmUKLQkgIHdpdGggbWFqb3IgbnVtYmVyIDEwIGFuZCBtaW5vciBudW1iZXIgMTMxICgibWFuIG1rbm9kIikgd2lsbCBnaXZlCi0JICB5b3UgYSB0aGVybW9tZXRlciBpbnNpZGUgeW91ciBjb21wdXRlcjogcmVhZGluZyBmcm9tCi0JICAvZGV2L3RlbXBlcmF0dXJlIHlpZWxkcyBvbmUgYnl0ZSwgdGhlIHRlbXBlcmF0dXJlIGluIGRlZ3JlZXMKLQkgIEZhaHJlbmhlaXQuIFRoaXMgd29ya3Mgb25seSBpZiB5b3UgaGF2ZSBhIFdEVDUwMVAgd2F0Y2hkb2cgYm9hcmQKLQkgIGluc3RhbGxlZC4KLQotCSAgSWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBGYW4gVGFjaG9tZXRlciBvbiB0aGUgV0RUNTAxUCwgdGhlbiB5b3UKLQkgIGNhbiBkbyB0aGlzIHZpYSB0aGUgdGFjaG9tZXRlciBwYXJhbWV0ZXIuIE9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhCi0JICBmYW4gdGFjaG9tZXRlciBhY3R1YWxseSBzZXQgdXAuCi0KICMKICMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCmluZGV4IDNlNTdhYTQuLjRkMThjODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCUFjcXVpcmUgU2luZ2xlIEJvYXJkIENvbXB1dGVyIFdhdGNoZG9nIFRpbWVyIGRyaXZlcgogICoKLSAqICAgICAgQmFzZWQgb24gd2R0LmMuIE9yaWdpbmFsIGNvcHlyaWdodCBtZXNzYWdlczoKKyAqCUJhc2VkIG9uIHdkdC5jLiBPcmlnaW5hbCBjb3B5cmlnaHQgbWVzc2FnZXM6CiAgKgogICoJKGMpIENvcHlyaWdodCAxOTk2IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAogICoJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgpAQCAtMTcsOSArMTcsOSBAQAogICoKICAqCShjKSBDb3B5cmlnaHQgMTk5NSAgICBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKLSAqICAgICAgMTQtRGVjLTIwMDEgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgotICogICAgICAgICAgQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKLSAqICAgICAgICAgIENhbid0IGFkZCB0aW1lb3V0IC0gZHJpdmVyIGRvZXNuJ3QgYWxsb3cgY2hhbmdpbmcgdmFsdWUKKyAqCTE0LURlYy0yMDAxIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAqCSAgICBBZGRlZCBub3dheW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorICoJICAgIENhbid0IGFkZCB0aW1lb3V0IC0gZHJpdmVyIGRvZXNuJ3QgYWxsb3cgY2hhbmdpbmcgdmFsdWUKICAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hZHZhbnRlY2h3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMKaW5kZXggYTFkNzg1Ni4uODI0ZDA3NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hZHZhbnRlY2h3ZHQuYwpAQCAtMTM4LDcgKzEzOCw5IEBACiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewotCQkub3B0aW9ucyA9IFdESU9GX0tFRVBBTElWRVBJTkcgfCBXRElPRl9TRVRUSU1FT1VUIHwgV0RJT0ZfTUFHSUNDTE9TRSwKKwkJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HIHwKKwkJCSAgIFdESU9GX1NFVFRJTUVPVVQgfAorCQkJICAgV0RJT0ZfTUFHSUNDTE9TRSwKIAkJLmZpcm13YXJlX3ZlcnNpb24gPSAxLAogCQkuaWRlbnRpdHkgPSBXQVRDSERPR19OQU1FLAogCX07CkBAIC0yNTksNyArMjYxLDggQEAKIAkJZ290byB1bnJlZ19zdG9wOwogCX0KIAotCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7CisJICogaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKGFkdndkdF9zZXRfaGVhcnRiZWF0KHRpbWVvdXQpKSB7CiAJCWFkdndkdF9zZXRfaGVhcnRiZWF0KFdBVENIRE9HX1RJTUVPVVQpOwogCQlwcmludGsoS0VSTl9JTkZPIFBGWApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMKaW5kZXggMmE3NjkwZS4uOTM3YTgwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jCkBAIC02MCw3ICs2MCw3IEBACiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWxpX3BjaSwgMHhDQywgJnZhbCk7CiAJdmFsICY9IH4weDNGOwkvKiBNYXNrIGNvdW50ICovCi0JdmFsIHw9ICgxPDwyNSkgfCBhbGlfdGltZW91dF9iaXRzOworCXZhbCB8PSAoMSA8PCAyNSkgfCBhbGlfdGltZW91dF9iaXRzOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYWxpX3BjaSwgMHhDQywgdmFsKTsKIAogCXNwaW5fdW5sb2NrKCZhbGlfbG9jayk7CkBAIC03OSw4ICs3OSw4IEBACiAJc3Bpbl9sb2NrKCZhbGlfbG9jayk7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoYWxpX3BjaSwgMHhDQywgJnZhbCk7Ci0JdmFsICY9IH4weDNGOwkvKiBNYXNrIGNvdW50IHRvIHplcm8gKGRpc2FibGVkKSAqLwotCXZhbCAmPSB+KDE8PDI1KTsvKiBhbmQgZm9yIHNhZmV0eSBtYXNrIHRoZSByZXNldCBlbmFibGUgKi8KKwl2YWwgJj0gfjB4M0Y7CQkvKiBNYXNrIGNvdW50IHRvIHplcm8gKGRpc2FibGVkKSAqLworCXZhbCAmPSB+KDEgPDwgMjUpOwkvKiBhbmQgZm9yIHNhZmV0eSBtYXNrIHRoZSByZXNldCBlbmFibGUgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGFsaV9wY2ksIDB4Q0MsIHZhbCk7CiAKIAlzcGluX3VubG9jaygmYWxpX2xvY2spOwpAQCAtODksNyArODksNyBAQAogLyoKICAqCWFsaV9rZWVwYWxpdmUJLQlzZW5kIGEga2VlcGFsaXZlIHRvIHRoZSB3YXRjaGRvZwogICoKLSAqICAgICAgU2VuZCBhIGtlZXBhbGl2ZSB0byB0aGUgdGltZXIgKGFjdHVhbGx5IHdlIHJlc3RhcnQgdGhlIHRpbWVyKS4KKyAqCVNlbmQgYSBrZWVwYWxpdmUgdG8gdGhlIHRpbWVyIChhY3R1YWxseSB3ZSByZXN0YXJ0IHRoZSB0aW1lcikuCiAgKi8KIAogc3RhdGljIHZvaWQgYWxpX2tlZXBhbGl2ZSh2b2lkKQpAQCAtMTA5LDExICsxMDksMTEgQEAKIAlpZiAodCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWVsc2UgaWYgKHQgPCA2MCkKLQkJYWxpX3RpbWVvdXRfYml0cyA9IHR8KDE8PDYpOworCQlhbGlfdGltZW91dF9iaXRzID0gdHwoMSA8PCA2KTsKIAllbHNlIGlmICh0IDwgMzYwMCkKLQkJYWxpX3RpbWVvdXRfYml0cyA9ICh0LzYwKXwoMTw8Nyk7CisJCWFsaV90aW1lb3V0X2JpdHMgPSAodCAvIDYwKXwoMSA8PCA3KTsKIAllbHNlIGlmICh0IDwgMTgwMDApCi0JCWFsaV90aW1lb3V0X2JpdHMgPSAodC8zMDApfCgxPDw2KXwoMTw8Nyk7CisJCWFsaV90aW1lb3V0X2JpdHMgPSAodCAvIDMwMCl8KDEgPDwgNil8KDEgPDwgNyk7CiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAgKi8KIAogc3RhdGljIHNzaXplX3QgYWxpX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKLQkJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKKwkJCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKIAkvKiBTZWUgaWYgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgJ1YnIGFuZCByZWxvYWQgdGhlIHRpbWVyICovCiAJaWYgKGxlbikgewpAQCAtMzQ4LDkgKzM0OCw5IEBACiAJLyogVGltZXIgYml0cyAqLwogCXdkb2cgJj0gfjB4M0Y7CiAJLyogSXNzdWVkIGV2ZW50cyAqLwotCXdkb2cgJj0gfigoMTw8MjcpfCgxPDwyNil8KDE8PDI1KXwoMTw8MjQpKTsKKwl3ZG9nICY9IH4oKDEgPDwgMjcpfCgxIDw8IDI2KXwoMSA8PCAyNSl8KDEgPDwgMjQpKTsKIAkvKiBObyBtb25pdG9yIGJpdHMgKi8KLQl3ZG9nICY9IH4oKDE8PDE2KXwoMTw8MTMpfCgxPDwxMil8KDE8PDExKXwoMTw8MTApfCgxPDw5KSk7CisJd2RvZyAmPSB+KCgxIDw8IDE2KXwoMSA8PCAxMyl8KDEgPDwgMTIpfCgxIDw8IDExKXwoMSA8PCAxMCl8KDEgPDwgOSkpOwogCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweENDLCB3ZG9nKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMKaW5kZXggYTA0NWVmOC4uOTBmOThkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jCkBAIC0zNTUsNyArMzU1LDggQEAKIAlhbGltNzEwMV9wbXUgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX003MTAxLAogCQlOVUxMKTsKIAlpZiAoIWFsaW03MTAxX3BtdSkgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiQUxpIE03MTAxIFBNVSBub3QgcHJlc2VudCAtIFdEVCBub3Qgc2V0XG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJBTGkgTTcxMDEgUE1VIG5vdCBwcmVzZW50IC0gV0RUIG5vdCBzZXRcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMzk5LDcgKzQwMCw4IEBACiAKIAlyYyA9IG1pc2NfcmVnaXN0ZXIoJndkdF9taXNjZGV2KTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCXdkdF9taXNjZGV2Lm1pbm9yLCByYyk7CiAJCWdvdG8gZXJyX291dF9yZWJvb3Q7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hdDkxc2FtOV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXNhbTlfd2R0LmMKaW5kZXggYTU2YWM4NC4uNDM1YjA1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hdDkxc2FtOV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2F0OTFzYW05X3dkdC5jCkBAIC0yMDEsNyArMjAxLDcgQEAKICAqIFBhdCB0aGUgd2F0Y2hkb2cgd2hlbmV2ZXIgZGV2aWNlIGlzIHdyaXR0ZW4gdG8uCiAgKi8KIHN0YXRpYyBzc2l6ZV90IGF0OTFfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLAotICAgICAgbG9mZl90ICpwcG9zKQorCQkJCQkJCQlsb2ZmX3QgKnBwb3MpCiB7CiAJaWYgKCFsZW4pCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9jcHdkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYwppbmRleCAwODRkZmU5Li40MTA3MGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYwpAQCAtMSwxMyArMSwxMyBAQAogLyogY3B3ZC5jIC0gZHJpdmVyIGltcGxlbWVudGF0aW9uIGZvciBoYXJkd2FyZSB3YXRjaGRvZwogICogdGltZXJzIGZvdW5kIG9uIFN1biBNaWNyb3N5c3RlbXMgQ1AxNDAwIGFuZCBDUDE1MDAgYm9hcmRzLgogICoKLSAqIFRoaXMgZGV2aWNlIHN1cHBvcnRzIGJvdGggdGhlIGdlbmVyaWMgTGludXggd2F0Y2hkb2cgCisgKiBUaGlzIGRldmljZSBzdXBwb3J0cyBib3RoIHRoZSBnZW5lcmljIExpbnV4IHdhdGNoZG9nCiAgKiBpbnRlcmZhY2UgYW5kIFNvbGFyaXMtY29tcGF0aWJsZSBpb2N0bHMgYXMgYmVzdCBpdCBpcwogICogYWJsZS4KICAqCiAgKiBOT1RFOiAJQ1AxNDAwIHN5c3RlbXMgYXBwZWFyIHRvIGhhdmUgYSBkZWZlY3RpdmUgaW50cl9tYXNrCiAgKiAJCQlyZWdpc3RlciBvbiB0aGUgUExELCBwcmV2ZW50aW5nIHRoZSBkaXNhYmxpbmcgb2YKLSAqIAkJCXRpbWVyIGludGVycnVwdHMuICBXZSB1c2UgYSB0aW1lciB0byBwZXJpb2RpY2FsbHkgCisgKiAJCQl0aW1lciBpbnRlcnJ1cHRzLiAgV2UgdXNlIGEgdGltZXIgdG8gcGVyaW9kaWNhbGx5CiAgKiAJCQlyZXNldCAnc3RvcHBlZCcgd2F0Y2hkb2dzIG9uIGFmZmVjdGVkIHBsYXRmb3Jtcy4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAgRXJpYyBCcm93ZXIgKGVicm93ZXJAdXNhLm5ldCkKQEAgLTI4LDEwICsyOCw5IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCiAjaW5jbHVkZSA8YXNtL3dhdGNoZG9nLmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUJImNwd2QiCkBAIC00Myw4ICs0Miw4IEBACiAjZGVmaW5lIFdEX0JMSU1JVAkweEZGRkYKIAogI2RlZmluZSBXRDBfTUlOT1IJMjEyCi0jZGVmaW5lIFdEMV9NSU5PUgkyMTMJCi0jZGVmaW5lIFdEMl9NSU5PUgkyMTQJCisjZGVmaW5lIFdEMV9NSU5PUgkyMTMKKyNkZWZpbmUgV0QyX01JTk9SCTIxNAogCiAvKiBJbnRlcm5hbCBkcml2ZXIgZGVmaW5pdGlvbnMuICAqLwogI2RlZmluZSBXRDBfSUQJCQkwCkBAIC05MSwxNiArOTAsMTYgQEAKIAogc3RhdGljIHN0cnVjdCBjcHdkICpjcHdkX2RldmljZTsKIAotLyogU3VuIHVzZXMgQWx0ZXJhIFBMRCBFUEY4ODIwQVRDMTQ0LTQgCisvKiBTdW4gdXNlcyBBbHRlcmEgUExEIEVQRjg4MjBBVEMxNDQtNAogICogcHJvdmlkaW5nIHRocmVlIGhhcmR3YXJlIHdhdGNoZG9nczoKICAqCi0gKiAJMSkgUklDIC0gc2VuZHMgYW4gaW50ZXJydXB0IHdoZW4gdHJpZ2dlcmVkCi0gKiAJMikgWElSIC0gYXNzZXJ0cyBYSVJfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVQotICogCTMpIFBPUiAtIGFzc2VydHMgUE9SX0JfUkVTRVQgd2hlbiB0cmlnZ2VyZWQsIHJlc2V0cyBDUFUsIGJhY2twbGFuZSwgYm9hcmQKKyAqIDEpIFJJQyAtIHNlbmRzIGFuIGludGVycnVwdCB3aGVuIHRyaWdnZXJlZAorICogMikgWElSIC0gYXNzZXJ0cyBYSVJfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVQorICogMykgUE9SIC0gYXNzZXJ0cyBQT1JfQl9SRVNFVCB3aGVuIHRyaWdnZXJlZCwgcmVzZXRzIENQVSwgYmFja3BsYW5lLCBib2FyZAogICoKICAqKiogVGltZXIgcmVnaXN0ZXIgYmxvY2sgZGVmaW5pdGlvbiAoc3RydWN0IHdkX3RpbWVyX3JlZ2JsaykKICAqCi0gKiBkY250ciBhbmQgbGltaXQgcmVnaXN0ZXJzIChoYWxmd29yZCBhY2Nlc3MpOiAgICAgIAorICogZGNudHIgYW5kIGxpbWl0IHJlZ2lzdGVycyAoaGFsZndvcmQgYWNjZXNzKToKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHwgMTUgfCAuLi58IDEgfCAwIHwKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwOCw3ICsxMDcsOCBAQAogICogLS0tLS0tLS0tLS0tLS0tLS0tLQogICogZGNudHIgLSAJQ3VycmVudCAxNi1iaXQgZG93bmNvdW50ZXIgdmFsdWUuCiAgKiAJCQlXaGVuIGRvd25jb3VudGVyIHJlYWNoZXMgJzAnIHdhdGNoZG9nIGV4cGlyZXMuCi0gKiAJCQlSZWFkaW5nIHRoaXMgcmVnaXN0ZXIgcmVzZXRzIGRvd25jb3VudGVyIHdpdGggJ2xpbWl0JyB2YWx1ZS4KKyAqIAkJCVJlYWRpbmcgdGhpcyByZWdpc3RlciByZXNldHMgZG93bmNvdW50ZXIgd2l0aAorICogCQkJJ2xpbWl0JyB2YWx1ZS4KICAqIGxpbWl0IC0gCTE2LWJpdCBjb3VudGRvd24gdmFsdWUgaW4gMS8xMHRoIHNlY29uZCBpbmNyZW1lbnRzLgogICogCQkJV3JpdGluZyB0aGlzIHJlZ2lzdGVyIGJlZ2lucyBjb3VudGRvd24gd2l0aCBpbnB1dCB2YWx1ZS4KICAqIAkJCVJlYWRpbmcgZnJvbSB0aGlzIHJlZ2lzdGVyIGRvZXMgbm90IGFmZmVjdCBjb3VudGVyLgpAQCAtMTU4LDExICsxNTgsMTEgQEAKIHN0YXRpYyBpbnQgd2QxX3RpbWVvdXQgPSAwOwogc3RhdGljIGludCB3ZDJfdGltZW91dCA9IDA7CiAKLW1vZHVsZV9wYXJhbQkod2QwX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QwX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMF90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzAgdGltZW91dCBpbiAxLzEwc2VjcyIpOwotbW9kdWxlX3BhcmFtIAkod2QxX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QxX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMV90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzEgdGltZW91dCBpbiAxLzEwc2VjcyIpOwotbW9kdWxlX3BhcmFtIAkod2QyX3RpbWVvdXQsIGludCwgMCk7Cittb2R1bGVfcGFyYW0od2QyX3RpbWVvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHdkMl90aW1lb3V0LCAiRGVmYXVsdCB3YXRjaGRvZzIgdGltZW91dCBpbiAxLzEwc2VjcyIpOwogCiBNT0RVTEVfQVVUSE9SKCJFcmljIEJyb3dlciA8ZWJyb3dlckB1c2EubmV0PiIpOwpAQCAtMjAxLDkgKzIwMSw5IEBACiBzdGF0aWMgdm9pZCBjcHdkX3RvZ2dsZWludHIoc3RydWN0IGNwd2QgKnAsIGludCBpbmRleCwgaW50IGVuYWJsZSkKIHsKIAl1bnNpZ25lZCBjaGFyIGN1cnJlZ3MgPSBjcHdkX3JlYWRiKHAtPnJlZ3MgKyBQTERfSU1BU0spOwotCXVuc2lnbmVkIGNoYXIgc2V0cmVncyA9IAotCQkoaW5kZXggPT0gLTEpID8gCi0JCShXRDBfSU5UUl9NQVNLIHwgV0QxX0lOVFJfTUFTSyB8IFdEMl9JTlRSX01BU0spIDogCisJdW5zaWduZWQgY2hhciBzZXRyZWdzID0KKwkJKGluZGV4ID09IC0xKSA/CisJCShXRDBfSU5UUl9NQVNLIHwgV0QxX0lOVFJfTUFTSyB8IFdEMl9JTlRSX01BU0spIDoKIAkJKHAtPmRldnNbaW5kZXhdLmludHJfbWFzayk7CiAKIAlpZiAoZW5hYmxlID09IFdEX0lOVFJfT04pCkBAIC0zMDMsMjQgKzMwMywyNCBAQAogCXVuc2lnbmVkIGNoYXIgcmV0ICA9IFdEX1NUT1BQRUQ7CiAKIAkvKiBkZXRlcm1pbmUgU1RPUFBFRCAqLwotCWlmICghc3RhdCkgCisJaWYgKCFzdGF0KQogCQlyZXR1cm4gcmV0OwogCiAJLyogZGV0ZXJtaW5lIEVYUElSRUQgdnMgRlJFRVJVTiB2cyBSVU5OSU5HICovCiAJZWxzZSBpZiAoV0RfU19FWFBJUkVEICYgc3RhdCkgewogCQlyZXQgPSBXRF9FWFBJUkVEOwotCX0gZWxzZSBpZihXRF9TX1JVTk5JTkcgJiBzdGF0KSB7CisJfSBlbHNlIGlmIChXRF9TX1JVTk5JTkcgJiBzdGF0KSB7CiAJCWlmIChpbnRyICYgcC0+ZGV2c1tpbmRleF0uaW50cl9tYXNrKSB7CiAJCQlyZXQgPSBXRF9GUkVFUlVOOwogCQl9IGVsc2UgewogCQkJLyogRnVkZ2UgV0RfRVhQSVJFRCBzdGF0dXMgZm9yIGRlZmVjdGl2ZSBDUDE0MDAtLQotCQkJICogSUYgdGltZXIgaXMgcnVubmluZyAKLQkJCSAqIAlBTkQgYnJva2Vuc3RvcCBpcyBzZXQgCisJCQkgKiBJRiB0aW1lciBpcyBydW5uaW5nCisJCQkgKiAJQU5EIGJyb2tlbnN0b3AgaXMgc2V0CiAJCQkgKiAJQU5EIGFuIGludGVycnVwdCBoYXMgYmVlbiBzZXJ2aWNlZAogCQkJICogd2UgYXJlIFdEX0VYUElSRUQuCiAJCQkgKgotCQkJICogSUYgdGltZXIgaXMgcnVubmluZyAKLQkJCSAqIAlBTkQgYnJva2Vuc3RvcCBpcyBzZXQgCisJCQkgKiBJRiB0aW1lciBpcyBydW5uaW5nCisJCQkgKiAJQU5EIGJyb2tlbnN0b3AgaXMgc2V0CiAJCQkgKiAJQU5EIG5vIGludGVycnVwdCBoYXMgYmVlbiBzZXJ2aWNlZAogCQkJICogd2UgYXJlIFdEX0ZSRUVSVU4uCiAJCQkgKi8KQEAgLTMyOSw3ICszMjksOCBAQAogCQkJCWlmIChwLT5kZXZzW2luZGV4XS5ydW5zdGF0dXMgJiBXRF9TVEFUX1NWQ0QpIHsKIAkJCQkJcmV0ID0gV0RfRVhQSVJFRDsKIAkJCQl9IGVsc2UgewotCQkJCQkvKiB3ZSBjb3VsZCBhcyB3ZWxsIHByZXRlbmQgd2UgYXJlIGV4cGlyZWQgKi8KKwkJCQkJLyogd2UgY291bGQgYXMgd2VsbCBwcmV0ZW5kCisJCQkJCSAqIHdlIGFyZSBleHBpcmVkICovCiAJCQkJCXJldCA9IFdEX0ZSRUVSVU47CiAJCQkJfQogCQkJfSBlbHNlIHsKQEAgLTM0Miw3ICszNDMsNyBAQAogCWlmIChwLT5kZXZzW2luZGV4XS5ydW5zdGF0dXMgJiBXRF9TVEFUX1NWQ0QpCiAJCXJldCB8PSBXRF9TRVJWSUNFRDsKIAotCXJldHVybihyZXQpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBjcHdkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC0zNjcsMjIgKzM2OCwyMiBAQAogCXN0cnVjdCBjcHdkICpwID0gY3B3ZF9kZXZpY2U7CiAKIAlsb2NrX2tlcm5lbCgpOwotCXN3aXRjaChpbWlub3IoaW5vZGUpKSB7Ci0JCWNhc2UgV0QwX01JTk9SOgotCQljYXNlIFdEMV9NSU5PUjoKLQkJY2FzZSBXRDJfTUlOT1I6Ci0JCQlicmVhazsKKwlzd2l0Y2ggKGltaW5vcihpbm9kZSkpIHsKKwljYXNlIFdEMF9NSU5PUjoKKwljYXNlIFdEMV9NSU5PUjoKKwljYXNlIFdEMl9NSU5PUjoKKwkJYnJlYWs7CiAKLQkJZGVmYXVsdDoKLQkJCXVubG9ja19rZXJuZWwoKTsKLQkJCXJldHVybiAtRU5PREVWOworCWRlZmF1bHQ6CisJCXVubG9ja19rZXJuZWwoKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogUmVnaXN0ZXIgSVJRIG9uIGZpcnN0IG9wZW4gb2YgZGV2aWNlICovCiAJaWYgKCFwLT5pbml0aWFsaXplZCkgewotCQlpZiAocmVxdWVzdF9pcnEocC0+aXJxLCAmY3B3ZF9pbnRlcnJ1cHQsIAorCQlpZiAocmVxdWVzdF9pcnEocC0+aXJxLCAmY3B3ZF9pbnRlcnJ1cHQsCiAJCQkJSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBwKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIElSUSAlZFxuIiwgCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgSVJRICVkXG4iLAogCQkJCXAtPmlycSk7CiAJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQlyZXR1cm4gLUVCVVNZOwpAQCAtNDAwLDggKzQwMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3B3ZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgCi0JCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgY3B3ZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGluZm8gPSB7CiAJCS5vcHRpb25zCQk9IFdESU9GX1NFVFRJTUVPVVQsCkBAIC00MDksNiArNDA5LDcgQEAKIAkJLmlkZW50aXR5CQk9IERSSVZFUl9OQU1FLAogCX07CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJaW50IGluZGV4ID0gaW1pbm9yKGlub2RlKSAtIFdEMF9NSU5PUjsKIAlzdHJ1Y3QgY3B3ZCAqcCA9IGNwd2RfZGV2aWNlOwogCWludCBzZXRvcHQgPSAwOwpAQCAtNDQyLDcgKzQ0Myw3IEBACiAJCQljcHdkX3N0YXJ0dGltZXIocCwgaW5kZXgpOwogCQl9IGVsc2UgewogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0JCisJCX0KIAkJYnJlYWs7CiAKIAkvKiBTb2xhcmlzLWNvbXBhdGlibGUgSU9DVExzICovCkBAIC00NTgsNyArNDU5LDcgQEAKIAogCWNhc2UgV0lPQ1NUT1A6CiAJCWlmIChwLT5lbmFibGVkKQotCQkJcmV0dXJuKC1FSU5WQUwpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJY3B3ZF9zdG9wdGltZXIocCwgaW5kZXgpOwogCQlicmVhazsKQEAgLTQ4MSw3ICs0ODIsNyBAQAogCWNhc2UgV0lPQ1NUT1A6CiAJY2FzZSBXSU9DR1NUQVQ6CiAJCWxvY2tfa2VybmVsKCk7Ci0JCXJ2YWwgPSBjcHdkX2lvY3RsKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJcnZhbCA9IGNwd2RfaW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCWJyZWFrOwogCkBAIC00OTMsNyArNDk0LDcgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAotc3RhdGljIHNzaXplX3QgY3B3ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwgCitzdGF0aWMgc3NpemVfdCBjcHdkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKQEAgLTUwOCwyMCArNTA5LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGNwd2RfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCitzdGF0aWMgc3NpemVfdCBjcHdkX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNwd2RfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkuaW9jdGwgPQljcHdkX2lvY3RsLAotCS5jb21wYXRfaW9jdGwgPQljcHdkX2NvbXBhdF9pb2N0bCwKLQkub3BlbiA9CQljcHdkX29wZW4sCi0JLndyaXRlID0JY3B3ZF93cml0ZSwKLQkucmVhZCA9CQljcHdkX3JlYWQsCi0JLnJlbGVhc2UgPQljcHdkX3JlbGVhc2UsCisJLm93bmVyID0JCVRISVNfTU9EVUxFLAorCS51bmxvY2tlZF9pb2N0bCA9CWNwd2RfaW9jdGwsCisJLmNvbXBhdF9pb2N0bCA9CQljcHdkX2NvbXBhdF9pb2N0bCwKKwkub3BlbiA9CQkJY3B3ZF9vcGVuLAorCS53cml0ZSA9CQljcHdkX3dyaXRlLAorCS5yZWFkID0JCQljcHdkX3JlYWQsCisJLnJlbGVhc2UgPQkJY3B3ZF9yZWxlYXNlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgY3B3ZF9wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpvcCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYwppbmRleCAyZTEzNjAyLi5jNTFkMGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKICNkZWZpbmUgTU9EVUxFX05BTUUgIkRBVklOQ0ktV0RUOiAiCiAKQEAgLTc1LDkgKzc1LDkgQEAKIAlzcGluX2xvY2soJmlvX2xvY2spOwogCiAJLyogcHV0IHdhdGNoZG9nIGluIHNlcnZpY2Ugc3RhdGUgKi8KLQlkYXZpbmNpX3dyaXRlbChXREtFWV9TRVEwLCB3ZHRfYmFzZSArIFdEVENSKTsKKwlpb3dyaXRlMzIoV0RLRVlfU0VRMCwgd2R0X2Jhc2UgKyBXRFRDUik7CiAJLyogcHV0IHdhdGNoZG9nIGluIGFjdGl2ZSBzdGF0ZSAqLwotCWRhdmluY2lfd3JpdGVsKFdES0VZX1NFUTEsIHdkdF9iYXNlICsgV0RUQ1IpOworCWlvd3JpdGUzMihXREtFWV9TRVExLCB3ZHRfYmFzZSArIFdEVENSKTsKIAogCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKIH0KQEAgLTkwLDI5ICs5MCwyOSBAQAogCXNwaW5fbG9jaygmaW9fbG9jayk7CiAKIAkvKiBkaXNhYmxlLCBpbnRlcm5hbCBjbG9jayBzb3VyY2UgKi8KLQlkYXZpbmNpX3dyaXRlbCgwLCB3ZHRfYmFzZSArIFRDUik7CisJaW93cml0ZTMyKDAsIHdkdF9iYXNlICsgVENSKTsKIAkvKiByZXNldCB0aW1lciwgc2V0IG1vZGUgdG8gNjQtYml0IHdhdGNoZG9nLCBhbmQgdW5yZXNldCAqLwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVEdDUik7CisJaW93cml0ZTMyKDAsIHdkdF9iYXNlICsgVEdDUik7CiAJdGdjciA9IFRJTU1PREVfNjRCSVRfV0RPRyB8IFRJTTEyUlNfVU5SRVNFVCB8IFRJTTM0UlNfVU5SRVNFVDsKLQlkYXZpbmNpX3dyaXRlbCh0Z2NyLCB3ZHRfYmFzZSArIFRHQ1IpOworCWlvd3JpdGUzMih0Z2NyLCB3ZHRfYmFzZSArIFRHQ1IpOwogCS8qIGNsZWFyIGNvdW50ZXIgcmVncyAqLwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVElNMTIpOwotCWRhdmluY2lfd3JpdGVsKDAsIHdkdF9iYXNlICsgVElNMzQpOworCWlvd3JpdGUzMigwLCB3ZHRfYmFzZSArIFRJTTEyKTsKKwlpb3dyaXRlMzIoMCwgd2R0X2Jhc2UgKyBUSU0zNCk7CiAJLyogc2V0IHRpbWVvdXQgcGVyaW9kICovCiAJdGltZXJfbWFyZ2luID0gKCgodTY0KWhlYXJ0YmVhdCAqIENMT0NLX1RJQ0tfUkFURSkgJiAweGZmZmZmZmZmKTsKLQlkYXZpbmNpX3dyaXRlbCh0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMTIpOworCWlvd3JpdGUzMih0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMTIpOwogCXRpbWVyX21hcmdpbiA9ICgoKHU2NCloZWFydGJlYXQgKiBDTE9DS19USUNLX1JBVEUpID4+IDMyKTsKLQlkYXZpbmNpX3dyaXRlbCh0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMzQpOworCWlvd3JpdGUzMih0aW1lcl9tYXJnaW4sIHdkdF9iYXNlICsgUFJEMzQpOwogCS8qIGVuYWJsZSBydW4gY29udGludW91c2x5ICovCi0JZGF2aW5jaV93cml0ZWwoRU5BTU9ERTEyX1BFUklPRElDLCB3ZHRfYmFzZSArIFRDUik7CisJaW93cml0ZTMyKEVOQU1PREUxMl9QRVJJT0RJQywgd2R0X2Jhc2UgKyBUQ1IpOwogCS8qIE9uY2UgdGhlIFdEVCBpcyBpbiBwcmUtYWN0aXZlIHN0YXRlIHdyaXRlIHRvCiAJICogVElNMTIsIFRJTTM0LCBQUkQxMiwgUFJEMzQsIFRDUiwgVEdDUiwgV0RUQ1IgYXJlCiAJICogd3JpdGUgcHJvdGVjdGVkIChleGNlcHQgZm9yIHRoZSBXREtFWSBmaWVsZCkKIAkgKi8KIAkvKiBwdXQgd2F0Y2hkb2cgaW4gcHJlLWFjdGl2ZSBzdGF0ZSAqLwotCWRhdmluY2lfd3JpdGVsKFdES0VZX1NFUTAgfCBXREVOLCB3ZHRfYmFzZSArIFdEVENSKTsKKwlpb3dyaXRlMzIoV0RLRVlfU0VRMCB8IFdERU4sIHdkdF9iYXNlICsgV0RUQ1IpOwogCS8qIHB1dCB3YXRjaGRvZyBpbiBhY3RpdmUgc3RhdGUgKi8KLQlkYXZpbmNpX3dyaXRlbChXREtFWV9TRVExIHwgV0RFTiwgd2R0X2Jhc2UgKyBXRFRDUik7CisJaW93cml0ZTMyKFdES0VZX1NFUTEgfCBXREVOLCB3ZHRfYmFzZSArIFdEVENSKTsKIAogCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKIH0KQEAgLTE5NywxNyArMTk3LDE2IEBACiB7CiAJaW50IHJldCA9IDAsIHNpemU7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAogCWlmIChoZWFydGJlYXQgPCAxIHx8IGhlYXJ0YmVhdCA+IE1BWF9IRUFSVEJFQVQpCiAJCWhlYXJ0YmVhdCA9IERFRkFVTFRfSEVBUlRCRUFUOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBNT0RVTEVfTkFNRQotCQkiRGFWaW5jaSBXYXRjaGRvZyBUaW1lcjogaGVhcnRiZWF0ICVkIHNlY1xuIiwgaGVhcnRiZWF0KTsKKwlkZXZfaW5mbyhkZXYsICJoZWFydGJlYXQgJWQgc2VjXG4iLCBoZWFydGJlYXQpOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAocmVzID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBNT0RVTEVfTkFNRQotCQkJImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCkBAIC0yMTUsMjAgKzIxNCwyNiBAQAogCXdkdF9tZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgc2l6ZSwgcGRldi0+bmFtZSk7CiAKIAlpZiAod2R0X21lbSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gTU9EVUxFX05BTUUgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvblxuIik7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCXdkdF9iYXNlID0gKHZvaWQgX19pb21lbSAqKShyZXMtPnN0YXJ0KTsKKworCXdkdF9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzaXplKTsKKwlpZiAoIXdkdF9iYXNlKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG1hcCBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmZGF2aW5jaV93ZHRfbWlzY2Rldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIE1PRFVMRV9OQU1FICJjYW5ub3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2VcbiIpOworCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZWdpc3RlciBtaXNjIGRldmljZVxuIik7CiAJCXJlbGVhc2VfcmVzb3VyY2Uod2R0X21lbSk7CiAJCWtmcmVlKHdkdF9tZW0pOwogCX0gZWxzZSB7CiAJCXNldF9iaXQoV0RUX0RFVklDRV9JTklURUQsICZ3ZHRfc3RhdHVzKTsKIAl9CiAKKwlpb3VubWFwKHdkdF9iYXNlKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMKaW5kZXggYTE3MWZjNi4uOWFkZDM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ldXJvdGVjaHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYwpAQCAtOCwxOSArOCwxOSBAQAogICoJQmFzZWQgb24gd2R0LmMuCiAgKglPcmlnaW5hbCBjb3B5cmlnaHQgbWVzc2FnZXM6CiAgKgotICogICAgICAoYykgQ29weXJpZ2h0IDE5OTYtMTk5NyBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKKyAqCShjKSBDb3B5cmlnaHQgMTk5Ni0xOTk3IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+LAogICoJCQkJCQlBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgICBOZWl0aGVyIEFsYW4gQ294IG5vciBDeW1ydU5ldCBMdGQuIGFkbWl0IGxpYWJpbGl0eSBub3IgcHJvdmlkZQotICogICAgICB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQKLSAqICAgICAgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgorICoJTmVpdGhlciBBbGFuIENveCBub3IgQ3ltcnVOZXQgTHRkLiBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUKKyAqCXdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZAorICoJIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKLSAqICAgICAgKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+KgorICoJKGMpIENvcHlyaWdodCAxOTk1ICAgIEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+KgogICovCiAKIC8qIENoYW5nZWxvZzoKQEAgLTM3LDcgKzM3LDcgQEAKICAqCWFkZCBleHBlY3RfY2xvc2Ugc3VwcG9ydAogICoKICAqIDIwMDIuMDUuMzAgLSBKb2VsIEJlY2tlciA8am9lbC5iZWNrZXJAb3JhY2xlLmNvbT4KLSAqIAlBZGRlZCBNYXR0IERvbXNjaCdzIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24uCisgKglBZGRlZCBNYXR0IERvbXNjaCdzIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24uCiAgKi8KIAogLyoKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWlmIChpcnEgPT0gMCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiOiBpbnRlcnJ1cHQgZGlzYWJsZWRcbiIpOwogCi0JZXVyd2R0X3dyaXRlX3JlZyhXRFRfVElNRVJfQ0ZHLCBpcnE8PDQpOworCWV1cndkdF93cml0ZV9yZWcoV0RUX1RJTUVSX0NGRywgaXJxIDw8IDQpOwogCiAJZXVyd2R0X3dyaXRlX3JlZyhXRFRfVU5JVF9TRUwsIFdEVF9VTklUX1NFQ1MpOwkvKiB3ZSB1c2Ugc2Vjb25kcyAqLwogCWV1cndkdF9zZXRfdGltZW91dCgwKTsJLyogdGhlIGRlZmF1bHQgdGltZW91dCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jCmluZGV4IDY3OTlhNmQuLjlhY2YwMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMKQEAgLTM0LDExICszNCwxNSBAQAogCiBzdGF0aWMgaW50IHRpbWVvdXQgPSBXQVRDSERPR19USU1FT1VUOwogbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJXYXRjaGRvZyB0aW1lb3V0IGluIHNlY29uZHMuIDE8PSB0aW1lb3V0IDw9MTMxLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX1RJTUVPVVQpICIuIik7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsCisJIldhdGNoZG9nIHRpbWVvdXQgaW4gc2Vjb25kcy4gMTw9IHRpbWVvdXQgPD0xMzEsIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19USU1FT1VUKSAiLiIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwKKwkiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2U7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyB3ZHRfZmxhZ3M7CkBAIC0yNjksNyArMjczLDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JZ2VvZGV3ZHRfcGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZShEUlZfTkFNRSwgLTEsIE5VTEwsIDApOworCWdlb2Rld2R0X3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRFJWX05BTUUsCisJCQkJCQkJCS0xLCBOVUxMLCAwKTsKIAlpZiAoSVNfRVJSKGdlb2Rld2R0X3BsYXRmb3JtX2RldmljZSkpIHsKIAkJcmV0ID0gUFRSX0VSUihnZW9kZXdkdF9wbGF0Zm9ybV9kZXZpY2UpOwogCQlnb3RvIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYwppbmRleCA3NjNjMWVhLi42Y2YxNTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjZGVmaW5lIFBDSV9CSU9TMzJfUEFSQUdSQVBIX0xFTgkxNgogI2RlZmluZSBQQ0lfUk9NX0JBU0UxCQkJMHgwMDBGMDAwMAogI2RlZmluZSBST01fU0laRQkJCTB4MTAwMDAKKyNkZWZpbmUgSFBXRFRfVkVSU0lPTgkJCSIxLjAxIgogCiBzdHJ1Y3QgYmlvczMyX3NlcnZpY2VfZGlyIHsKIAl1MzIgc2lnbmF0dXJlOwpAQCAtMTMwLDE3ICsxMzEsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgY21uX3JlZ2lzdGVycyBjbW5fcmVnczsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhwd2R0X2RldmljZXNbXSA9IHsKLQl7Ci0JIC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX0NPTVBBUSwKLQkgLmRldmljZSA9IDB4QjIwMywKLQkgLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCi0JIC5zdWJkZXZpY2UgPSBQQ0lfQU5ZX0lELAotCX0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ09NUEFRLCAweEIyMDMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSFAsIDB4MzMwNikgfSwKIAl7MH0sCQkJLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgaHB3ZHRfZGV2aWNlcyk7CiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgYXNtaW5saW5lX2NhbGwoc3RydWN0IGNtbl9yZWdpc3RlcnMgKnBpODZSZWdzLCB1bnNpZ25lZCBsb25nICpwUm9tRW50cnkpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBhc21pbmxpbmVfY2FsbChzdHJ1Y3QgY21uX3JlZ2lzdGVycyAqcGk4NlJlZ3MsCisJCQkJCQl1bnNpZ25lZCBsb25nICpwUm9tRW50cnkpOwogCiAjaWZuZGVmIENPTkZJR19YODZfNjQKIC8qIC0tMzIgQml0IEJpb3MtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTYwNSw3ICs2MDMsNyBAQAogLyoKICAqCUtlcm5lbCBpbnRlcmZhY2VzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhwd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBocHdkdF9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub19sbHNlZWssCiAJLndyaXRlID0gaHB3ZHRfd3JpdGUsCkBAIC03MDQsMTAgKzcwMiwxMSBAQAogCX0KIAogCXByaW50ayhLRVJOX0lORk8KLQkJImhwIFdhdGNoZG9nIFRpbWVyIERyaXZlcjogMS4wMCIKKwkJImhwIFdhdGNoZG9nIFRpbWVyIERyaXZlcjogJXMiCiAJCSIsIHRpbWVyIG1hcmdpbjogJWQgc2Vjb25kcyAobm93YXlvdXQ9JWQpIgogCQkiLCBhbGxvdyBrZXJuZWwgZHVtcDogJXMgKGRlZmF1bHQgPSAwL09GRikuXG4iLAotCQlzb2Z0X21hcmdpbiwgbm93YXlvdXQsIChhbGxvd19rZHVtcCA9PSAwKSA/ICJPRkYiIDogIk9OIik7CisJCUhQV0RUX1ZFUlNJT04sIHNvZnRfbWFyZ2luLCBub3dheW91dCwKKwkJKGFsbG93X2tkdW1wID09IDApID8gIk9GRiIgOiAiT04iKTsKIAogCXJldHVybiAwOwogCkBAIC03NTcsNiArNzU2LDcgQEAKIE1PRFVMRV9BVVRIT1IoIlRvbSBNaW5nYXJlbGxpIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImhwIHdhdGNoZG9nIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX1ZFUlNJT04oSFBXRFRfVkVSU0lPTik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CiAKIG1vZHVsZV9wYXJhbShzb2Z0X21hcmdpbiwgaW50LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaTYzMDBlc2IuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaTYzMDBlc2IuYwppbmRleCA3NGY5NTFjLi4yZGJlODM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pNjMwMGVzYi5jCkBAIC0xMyw3ICsxMyw3IEBACiAgKgogICoJVGhlIHRpbWVyIGlzIGltcGxlbWVudGVkIGluIHRoZSBmb2xsb3dpbmcgSS9PIGNvbnRyb2xsZXIgaHViczoKICAqCShTZWUgdGhlIGludGVsIGRvY3VtZW50YXRpb24gb24gaHR0cDovL2RldmVsb3Blci5pbnRlbC5jb20uKQotICoJNjMwMEVTQiBjaGlwIDogZG9jdW1lbnQgbnVtYmVyIDMwMDY0MS0wMDMKKyAqCTYzMDBFU0IgY2hpcCA6IGRvY3VtZW50IG51bWJlciAzMDA2NDEtMDA0CiAgKgogICogIDIwMDRZWVpaIFJvc3MgQmlybwogICoJSW5pdGlhbCB2ZXJzaW9uIDAuMDEKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgotI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAvKiBNb2R1bGUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgRVNCX1ZFUlNJT04gIjAuMDMiCisjZGVmaW5lIEVTQl9WRVJTSU9OICIwLjA0IgogI2RlZmluZSBFU0JfTU9EVUxFX05BTUUgImk2MzAwRVNCIHRpbWVyIgogI2RlZmluZSBFU0JfRFJJVkVSX05BTUUgRVNCX01PRFVMRV9OQU1FICIsIHYiIEVTQl9WRVJTSU9OCiAjZGVmaW5lIFBGWCBFU0JfTU9EVUxFX05BTUUgIjogIgpAQCAtODEsNiArODEsNyBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICplc2JfcGNpOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHRyaWdnZXJlZDsgLyogVGhlIHN0YXR1cyBvZiB0aGUgd2F0Y2hkb2cgdXBvbiBib290ICovCiBzdGF0aWMgY2hhciBlc2JfZXhwZWN0X2Nsb3NlOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVzYl9wbGF0Zm9ybV9kZXZpY2U7CiAKIC8qIG1vZHVsZSBwYXJhbWV0ZXJzICovCiAvKiAzMCBzZWMgZGVmYXVsdCBoZWFydGJlYXQgKDEgPCBoZWFydGJlYXQgPCAyKjEwMjMpICovCkBAIC0xMTQsMTMgKzExNSwxOCBAQAogCXdyaXRlYihFU0JfVU5MT0NLMiwgRVNCX1JFTE9BRF9SRUcpOwogfQogCi1zdGF0aWMgdm9pZCBlc2JfdGltZXJfc3RhcnQodm9pZCkKK3N0YXRpYyBpbnQgZXNiX3RpbWVyX3N0YXJ0KHZvaWQpCiB7CiAJdTggdmFsOwogCisJc3Bpbl9sb2NrKCZlc2JfbG9jayk7CisJZXNiX3VubG9ja19yZWdpc3RlcnMoKTsKKwl3cml0ZXcoRVNCX1dEVF9SRUxPQUQsIEVTQl9SRUxPQURfUkVHKTsKIAkvKiBFbmFibGUgb3IgRW5hYmxlICsgTG9jaz8gKi8KIAl2YWwgPSAweDAyIHwgKG5vd2F5b3V0ID8gMHgwMSA6IDB4MDApOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShlc2JfcGNpLCBFU0JfTE9DS19SRUcsIHZhbCk7CisJc3Bpbl91bmxvY2soJmVzYl9sb2NrKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBlc2JfdGltZXJfc3RvcCh2b2lkKQpAQCAtMjA3LDcgKzIxMyw2IEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKiBSZWxvYWQgYW5kIGFjdGl2YXRlIHRpbWVyICovCi0JZXNiX3RpbWVyX2tlZXBhbGl2ZSgpOwogCWVzYl90aW1lcl9zdGFydCgpOwogCiAJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwpAQCAtMjQwLDcgKzI0NSw4IEBACiAJCQkgKiBmaXZlIG1vbnRocyBhZ28uLi4gKi8KIAkJCWVzYl9leHBlY3RfY2xvc2UgPSAwOwogCi0JCQkvKiBzY2FuIHRvIHNlZSB3aGV0aGVyIG9yIG5vdCB3ZSBnb3QgdGhlIG1hZ2ljIGNoYXJhY3RlciAqLworCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZQorCQkJICogbWFnaWMgY2hhcmFjdGVyICovCiAJCQlmb3IgKGkgPSAwOyBpICE9IGxlbjsgaSsrKSB7CiAJCQkJY2hhciBjOwogCQkJCWlmIChnZXRfdXNlcihjLCBkYXRhICsgaSkpCkBAIC0yOTIsNyArMjk4LDYgQEAKIAkJfQogCiAJCWlmIChuZXdfb3B0aW9ucyAmIFdESU9TX0VOQUJMRUNBUkQpIHsKLQkJCWVzYl90aW1lcl9rZWVwYWxpdmUoKTsKIAkJCWVzYl90aW1lcl9zdGFydCgpOwogCQkJcmV0dmFsID0gMDsKIAkJfQpAQCAtMzE5LDE5ICszMjQsNiBAQAogfQogCiAvKgotICogICAgICBOb3RpZnkgc3lzdGVtCi0gKi8KLQotc3RhdGljIGludCBlc2Jfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCi0JCQkJCXVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQotewotCWlmIChjb2RlID09IFNZU19ET1dOIHx8IGNvZGUgPT0gU1lTX0hBTFQpCi0JCWVzYl90aW1lcl9zdG9wKCk7CS8qIFR1cm4gdGhlIFdEVCBvZmYgKi8KLQotCXJldHVybiBOT1RJRllfRE9ORTsKLX0KLQotLyoKICAqICAgICAgS2VybmVsIEludGVyZmFjZXMKICAqLwogCkBAIC0zNTAsMTAgKzM0Miw2IEBACiAJLmZvcHMgPSAmZXNiX2ZvcHMsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGVzYl9ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGVzYl9ub3RpZnlfc3lzLAotfTsKLQogLyoKICAqIERhdGEgZm9yIFBDSSBkcml2ZXIgaW50ZXJmYWNlCiAgKgpAQCAtMzcyLDcgKzM2MCw3IEBACiAgKiAgICAgIEluaXQgJiBleGl0IHJvdXRpbmVzCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgX19pbml0IGVzYl9nZXRkZXZpY2Uodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIF9fZGV2aW5pdCBlc2JfZ2V0ZGV2aWNlKHZvaWQpCiB7CiAJdTggdmFsMTsKIAl1bnNpZ25lZCBzaG9ydCB2YWwyOwpAQCAtNDQzLDcgKzQzMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHdhdGNoZG9nX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVzYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJaW50IHJldDsKIApAQCAtNDU5LDE5ICs0NDcsMTMgQEAKIAkJCSJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAxPGhlYXJ0YmVhdDwyMDQ2LCB1c2luZyAlZFxuIiwKIAkJCQkJCQkJaGVhcnRiZWF0KTsKIAl9Ci0JcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOwotCWlmIChyZXQgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwgcmV0KTsKLQkJZ290byBlcnJfdW5tYXA7Ci0JfQogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmZXNiX21pc2NkZXYpOwogCWlmIChyZXQgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCiAJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQkJCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7Ci0JCWdvdG8gZXJyX25vdGlmaWVyOworCQlnb3RvIGVycl91bm1hcDsKIAl9CiAJZXNiX3RpbWVyX3N0b3AoKTsKIAlwcmludGsoS0VSTl9JTkZPIFBGWApAQCAtNDc5LDggKzQ2MSw2IEBACiAJCQkJCQlCQVNFQUREUiwgaGVhcnRiZWF0LCBub3dheW91dCk7CiAJcmV0dXJuIDA7CiAKLWVycl9ub3RpZmllcjoKLQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmZXNiX25vdGlmaWVyKTsKIGVycl91bm1hcDoKIAlpb3VubWFwKEJBU0VBRERSKTsKIC8qIGVycl9yZWxlYXNlOiAqLwpAQCAtNDkyLDcgKzQ3Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHdhdGNoZG9nX2NsZWFudXAodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IGVzYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCS8qIFN0b3AgdGhlIHRpbWVyIGJlZm9yZSB3ZSBsZWF2ZSAqLwogCWlmICghbm93YXlvdXQpCkBAIC01MDAsMTEgKzQ4MCw1OCBAQAogCiAJLyogRGVyZWdpc3RlciAqLwogCW1pc2NfZGVyZWdpc3RlcigmZXNiX21pc2NkZXYpOwotCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZlc2Jfbm90aWZpZXIpOwogCWlvdW5tYXAoQkFTRUFERFIpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbihlc2JfcGNpLCAwKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoZXNiX3BjaSk7CiAJcGNpX2Rldl9wdXQoZXNiX3BjaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGVzYl9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJZXNiX3RpbWVyX3N0b3AoKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXNiX3BsYXRmb3JtX2RyaXZlciA9IHsKKwkucHJvYmUgICAgICAgICAgPSBlc2JfcHJvYmUsCisJLnJlbW92ZSAgICAgICAgID0gX19kZXZleGl0X3AoZXNiX3JlbW92ZSksCisJLnNodXRkb3duICAgICAgID0gZXNiX3NodXRkb3duLAorCS5kcml2ZXIgICAgICAgICA9IHsKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCQkubmFtZSAgID0gRVNCX01PRFVMRV9OQU1FLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3YXRjaGRvZ19pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCXByaW50ayhLRVJOX0lORk8gUEZYICJJbnRlbCA2MzAwRVNCIFdhdGNoRG9nIFRpbWVyIERyaXZlciB2JXNcbiIsCisJCUVTQl9WRVJTSU9OKTsKKworCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXNiX3BsYXRmb3JtX2RyaXZlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVzYl9wbGF0Zm9ybV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKEVTQl9NT0RVTEVfTkFNRSwKKwkJCQkJCQkJLTEsIE5VTEwsIDApOworCWlmIChJU19FUlIoZXNiX3BsYXRmb3JtX2RldmljZSkpIHsKKwkJZXJyID0gUFRSX0VSUihlc2JfcGxhdGZvcm1fZGV2aWNlKTsKKwkJZ290byB1bnJlZ19wbGF0Zm9ybV9kcml2ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK3VucmVnX3BsYXRmb3JtX2RyaXZlcjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNiX3BsYXRmb3JtX2RyaXZlcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHdhdGNoZG9nX2NsZWFudXAodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihlc2JfcGxhdGZvcm1fZGV2aWNlKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNiX3BsYXRmb3JtX2RyaXZlcik7CisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIldhdGNoZG9nIE1vZHVsZSBVbmxvYWRlZC5cbiIpOwogfQogCiBtb2R1bGVfaW5pdCh3YXRjaGRvZ19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT192ZW5kb3Jfc3VwcG9ydC5jIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMKaW5kZXggZDgyNjRhZC4uZDNjMGY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMKQEAgLTQ3LDcgKzQ3LDggQEAKIAogc3RhdGljIGludCB2ZW5kb3JzdXBwb3J0OwogbW9kdWxlX3BhcmFtKHZlbmRvcnN1cHBvcnQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHZlbmRvcnN1cHBvcnQsICJpVENPIHZlbmRvciBzcGVjaWZpYyBzdXBwb3J0IG1vZGUsIGRlZmF1bHQ9MCAobm9uZSksIDE9U3VwZXJNaWNybyBQZW50MywgMj1TdXBlck1pY3JvIFBlbnQ0KyIpOworTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3JzdXBwb3J0LCAiaVRDTyB2ZW5kb3Igc3BlY2lmaWMgc3VwcG9ydCBtb2RlLCBkZWZhdWx0PSIKKwkJCSIwIChub25lKSwgMT1TdXBlck1pY3JvIFBlbnQzLCAyPVN1cGVyTWljcm8gUGVudDQrIik7CiAKIC8qCiAgKglWZW5kb3IgU3BlY2lmaWMgU3VwcG9ydApAQCAtMzA1LDcgKzMwNiw4IEBACiBtb2R1bGVfaW5pdChpVENPX3ZlbmRvcl9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChpVENPX3ZlbmRvcl9leGl0X21vZHVsZSk7CiAKLU1PRFVMRV9BVVRIT1IoIldpbSBWYW4gU2Vicm9lY2sgPHdpbUBpZ3VhbmEuYmU+LCBSLiBTZXJldG55IDxsa3BhdGNoZXNAcGF5cGMuY29tPiIpOworTU9EVUxFX0FVVEhPUigiV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4sICIKKwkJIlIuIFNlcmV0bnkgPGxrcGF0Y2hlc0BwYXlwYy5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsIFRDTyBWZW5kb3IgU3BlY2lmaWMgV2F0Y2hEb2cgVGltZXIgRHJpdmVyIFN1cHBvcnQiKTsKIE1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYwppbmRleCAzNTIzMzQ5Li42NDgyNTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCkBAIC0yNzMsNyArMjczLDkgQEAKICNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDMwCS8qIDMwIHNlYyBkZWZhdWx0IGhlYXJ0YmVhdCAqLwogc3RhdGljIGludCBoZWFydGJlYXQgPSBXQVRDSERPR19IRUFSVEJFQVQ7ICAvKiBpbiBzZWNvbmRzICovCiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDI8aGVhcnRiZWF0PDM5IChUQ08gdjEpIG9yIDYxMyAoVENPIHYyKSwgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAiCisJIigyPGhlYXJ0YmVhdDwzOSAoVENPIHYxKSBvciA2MTMgKFRDTyB2MiksIGRlZmF1bHQ9IgorCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKQEAgLTM0Niw3ICszNDgsOCBAQAogCS8qIGRpc2FibGUgY2hpcHNldCdzIE5PX1JFQk9PVCBiaXQgKi8KIAlpZiAoaVRDT193ZHRfdW5zZXRfTk9fUkVCT09UX2JpdCgpKSB7CiAJCXNwaW5fdW5sb2NrKCZpVENPX3dkdF9wcml2YXRlLmlvX2xvY2spOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVzZXQgTk9fUkVCT09UIGZsYWcsIHJlYm9vdCBkaXNhYmxlZCBieSBoYXJkd2FyZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXNldCBOT19SRUJPT1QgZmxhZywgIgorCQkJCQkicmVib290IGRpc2FibGVkIGJ5IGhhcmR3YXJlXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC02NjksNyArNjcyLDggQEAKIAogCS8qIENoZWNrIGNoaXBzZXQncyBOT19SRUJPT1QgYml0ICovCiAJaWYgKGlUQ09fd2R0X3Vuc2V0X05PX1JFQk9PVF9iaXQoKSAmJiBpVENPX3ZlbmRvcl9jaGVja19ub3JlYm9vdF9vbigpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byByZXNldCBOT19SRUJPT1QgZmxhZywgcmVib290IGRpc2FibGVkIGJ5IGhhcmR3YXJlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlc2V0IE5PX1JFQk9PVCBmbGFnLCAiCisJCQkJCSJyZWJvb3QgZGlzYWJsZWQgYnkgaGFyZHdhcmVcbiIpOwogCQlyZXQgPSAtRU5PREVWOwkvKiBDYW5ub3QgcmVzZXQgTk9fUkVCT09UIGJpdCAqLwogCQlnb3RvIG91dDsKIAl9CkBAIC03MTYsOCArNzIwLDkgQEAKIAkgICBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KIAlpZiAoaVRDT193ZHRfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpKSB7CiAJCWlUQ09fd2R0X3NldF9oZWFydGJlYXQoV0FUQ0hET0dfSEVBUlRCRUFUKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDIgPCBoZWFydGJlYXQgPCAzOSAoVENPIHYxKSBvciA2MTMgKFRDTyB2MiksIHVzaW5nICVkXG4iLAotCQkJCQkJCWhlYXJ0YmVhdCk7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMiA8IGhlYXJ0YmVhdCA8IDM5IChUQ08gdjEpICIKKwkJCQkib3IgNjEzIChUQ08gdjIpLCB1c2luZyAlZFxuIiwgaGVhcnRiZWF0KTsKIAl9CiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZpVENPX3dkdF9taXNjZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4N193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4N193ZHQuYwppbmRleCBhZmI4YWYzLi5jYzEzM2M1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2l0ODdfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pdDg3X3dkdC5jCkBAIC0xODgsOCArMTg4LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fb3V0YihpbnQgdmFsLCBpbnQgcmVnKQogewotICAgICAgIG91dGIocmVnLCBSRUcpOwotICAgICAgIG91dGIodmFsLCBWQUwpOworCW91dGIocmVnLCBSRUcpOworCW91dGIodmFsLCBWQUwpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzdXBlcmlvX2ludyhpbnQgcmVnKQpAQCAtMjA0LDEwICsyMDQsMTAgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHN1cGVyaW9fb3V0dyhpbnQgdmFsLCBpbnQgcmVnKQogewotICAgICAgIG91dGIocmVnKyssIFJFRyk7Ci0gICAgICAgb3V0Yih2YWwgPj4gOCwgVkFMKTsKLSAgICAgICBvdXRiKHJlZywgUkVHKTsKLSAgICAgICBvdXRiKHZhbCwgVkFMKTsKKwlvdXRiKHJlZysrLCBSRUcpOworCW91dGIodmFsID4+IDgsIFZBTCk7CisJb3V0YihyZWcsIFJFRyk7CisJb3V0Yih2YWwsIFZBTCk7CiB9CiAKIC8qIHdhdGNoZG9nIHRpbWVyIGhhbmRsaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMKaW5kZXggZGI5MTg5Mi4uNDY1ZmUzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGM1MjAwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjNTIwMF93ZHQuYwpAQCAtOSw4ICs5LDggQEAKICNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgogCiAKLSNkZWZpbmUgR1BUX01PREVfV0RUCQkoMTw8MTUpCi0jZGVmaW5lIEdQVF9NT0RFX0NFCQkoMTw8MTIpCisjZGVmaW5lIEdQVF9NT0RFX1dEVAkJKDEgPDwgMTUpCisjZGVmaW5lIEdQVF9NT0RFX0NFCQkoMSA8PCAxMikKICNkZWZpbmUgR1BUX01PREVfTVNfVElNRVIJKDB4NCkKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21wY29yZV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCmluZGV4IDExMzBhZDYuLjE1MTJhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqCUJhc2VkIG9uIHRoZSBTb2Z0RG9nIGRyaXZlcjoKICAqCShjKSBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKLSAqIAkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jCmluZGV4IDNhY2NlNjIuLjUzOWI2ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tdHgtMV93ZHQuYwpAQCAtNSw3ICs1LDcgQEAKICAqCQkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuNGctc3lzdGVtcy5iaXoKICAqCi0gKiAJKEMpIENvcHlyaWdodCAyMDA3IE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgorICoJKEMpIENvcHlyaWdodCAyMDA3IE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgogICoKICAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jCmluZGV4IDJmMmNlNzQuLmFhNWFkNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL29tYXBfd2R0LmMKQEAgLTYwLDkgKzYwLDggQEAKIAl2b2lkIF9faW9tZW0gICAgKmJhc2U7ICAgICAgICAgIC8qIHBoeXNpY2FsICovCiAJc3RydWN0IGRldmljZSAgICpkZXY7CiAJaW50ICAgICAgICAgICAgIG9tYXBfd2R0X3VzZXJzOwotCXN0cnVjdCBjbGsgICAgICAqYXJtd2R0X2NrOwotCXN0cnVjdCBjbGsgICAgICAqbXB1X3dkdF9pY2s7Ci0Jc3RydWN0IGNsayAgICAgICptcHVfd2R0X2ZjazsKKwlzdHJ1Y3QgY2xrICAgICAgKmljazsKKwlzdHJ1Y3QgY2xrICAgICAgKmZjazsKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKIAlzdHJ1Y3QgbWlzY2RldmljZSBvbWFwX3dkdF9taXNjZGV2OwogfTsKQEAgLTE0NiwxMyArMTQ1LDggQEAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdCgxLCAodW5zaWduZWQgbG9uZyAqKSYod2Rldi0+b21hcF93ZHRfdXNlcnMpKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKLQkJY2xrX2VuYWJsZSh3ZGV2LT5hcm13ZHRfY2spOwkvKiBFbmFibGUgdGhlIGNsb2NrICovCi0KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJY2xrX2VuYWJsZSh3ZGV2LT5tcHVfd2R0X2ljayk7ICAgIC8qIEVuYWJsZSB0aGUgaW50ZXJmYWNlIGNsb2NrICovCi0JCWNsa19lbmFibGUod2Rldi0+bXB1X3dkdF9mY2spOyAgICAvKiBFbmFibGUgdGhlIGZ1bmN0aW9uYWwgY2xvY2sgKi8KLQl9CisJY2xrX2VuYWJsZSh3ZGV2LT5pY2spOyAgICAvKiBFbmFibGUgdGhlIGludGVyZmFjZSBjbG9jayAqLworCWNsa19lbmFibGUod2Rldi0+ZmNrKTsgICAgLyogRW5hYmxlIHRoZSBmdW5jdGlvbmFsIGNsb2NrICovCiAKIAkvKiBpbml0aWFsaXplIHByZXNjYWxlciAqLwogCXdoaWxlIChfX3Jhd19yZWFkbChiYXNlICsgT01BUF9XQVRDSERPR19XUFMpICYgMHgwMSkKQEAgLTE4MSwxMyArMTc1LDggQEAKIAogCW9tYXBfd2R0X2Rpc2FibGUod2Rldik7CiAKLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCi0JCWNsa19kaXNhYmxlKHdkZXYtPmFybXdkdF9jayk7CS8qIERpc2FibGUgdGhlIGNsb2NrICovCi0KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJY2xrX2Rpc2FibGUod2Rldi0+bXB1X3dkdF9pY2spOwkvKiBEaXNhYmxlIHRoZSBjbG9jayAqLwotCQljbGtfZGlzYWJsZSh3ZGV2LT5tcHVfd2R0X2Zjayk7CS8qIERpc2FibGUgdGhlIGNsb2NrICovCi0JfQorCWNsa19kaXNhYmxlKHdkZXYtPmljayk7CisJY2xrX2Rpc2FibGUod2Rldi0+ZmNrKTsKICNlbHNlCiAJcHJpbnRrKEtFUk5fQ1JJVCAib21hcF93ZHQ6IFVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyFcbiIpOwogI2VuZGlmCkBAIC0zMDMsNDQgKzI5MiwxOSBAQAogCXdkZXYtPm9tYXBfd2R0X3VzZXJzID0gMDsKIAl3ZGV2LT5tZW0gPSBtZW07CiAKLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKLQkJd2Rldi0+YXJtd2R0X2NrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiYXJtd2R0X2NrIik7Ci0JCWlmIChJU19FUlIod2Rldi0+YXJtd2R0X2NrKSkgewotCQkJcmV0ID0gUFRSX0VSUih3ZGV2LT5hcm13ZHRfY2spOwotCQkJd2Rldi0+YXJtd2R0X2NrID0gTlVMTDsKLQkJCWdvdG8gZXJyX2NsazsKLQkJfQorCXdkZXYtPmljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOworCWlmIChJU19FUlIod2Rldi0+aWNrKSkgeworCQlyZXQgPSBQVFJfRVJSKHdkZXYtPmljayk7CisJCXdkZXYtPmljayA9IE5VTEw7CisJCWdvdG8gZXJyX2NsazsKKwl9CisJd2Rldi0+ZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUih3ZGV2LT5mY2spKSB7CisJCXJldCA9IFBUUl9FUlIod2Rldi0+ZmNrKTsKKwkJd2Rldi0+ZmNrID0gTlVMTDsKKwkJZ290byBlcnJfY2xrOwogCX0KIAotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQl3ZGV2LT5tcHVfd2R0X2ljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1wdV93ZHRfaWNrIik7Ci0JCWlmIChJU19FUlIod2Rldi0+bXB1X3dkdF9pY2spKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKHdkZXYtPm1wdV93ZHRfaWNrKTsKLQkJCXdkZXYtPm1wdV93ZHRfaWNrID0gTlVMTDsKLQkJCWdvdG8gZXJyX2NsazsKLQkJfQotCQl3ZGV2LT5tcHVfd2R0X2ZjayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIm1wdV93ZHRfZmNrIik7Ci0JCWlmIChJU19FUlIod2Rldi0+bXB1X3dkdF9mY2spKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKHdkZXYtPm1wdV93ZHRfZmNrKTsKLQkJCXdkZXYtPm1wdV93ZHRfZmNrID0gTlVMTDsKLQkJCWdvdG8gZXJyX2NsazsKLQkJfQotCX0KLQotCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQl3ZGV2LT5tcHVfd2R0X2ljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIndkdDJfaWNrIik7Ci0JCWlmIChJU19FUlIod2Rldi0+bXB1X3dkdF9pY2spKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKHdkZXYtPm1wdV93ZHRfaWNrKTsKLQkJCXdkZXYtPm1wdV93ZHRfaWNrID0gTlVMTDsKLQkJCWdvdG8gZXJyX2NsazsKLQkJfQotCQl3ZGV2LT5tcHVfd2R0X2ZjayA9IGNsa19nZXQoJnBkZXYtPmRldiwgIndkdDJfZmNrIik7Ci0JCWlmIChJU19FUlIod2Rldi0+bXB1X3dkdF9mY2spKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKHdkZXYtPm1wdV93ZHRfZmNrKTsKLQkJCXdkZXYtPm1wdV93ZHRfZmNrID0gTlVMTDsKLQkJCWdvdG8gZXJyX2NsazsKLQkJfQotCX0KIAl3ZGV2LT5iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKIAlpZiAoIXdkZXYtPmJhc2UpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTM4MCwxMiArMzQ0LDEwIEBACiAJd2Rldi0+YmFzZSA9IE5VTEw7CiAKIGVycl9jbGs6Ci0JaWYgKHdkZXYtPmFybXdkdF9jaykKLQkJY2xrX3B1dCh3ZGV2LT5hcm13ZHRfY2spOwotCWlmICh3ZGV2LT5tcHVfd2R0X2ljaykKLQkJY2xrX3B1dCh3ZGV2LT5tcHVfd2R0X2ljayk7Ci0JaWYgKHdkZXYtPm1wdV93ZHRfZmNrKQotCQljbGtfcHV0KHdkZXYtPm1wdV93ZHRfZmNrKTsKKwlpZiAod2Rldi0+aWNrKQorCQljbGtfcHV0KHdkZXYtPmljayk7CisJaWYgKHdkZXYtPmZjaykKKwkJY2xrX3B1dCh3ZGV2LT5mY2spOwogCWtmcmVlKHdkZXYpOwogCiBlcnJfa3phbGxvYzoKQEAgLTQxNywyMCArMzc5LDggQEAKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKLQlpZiAod2Rldi0+YXJtd2R0X2NrKSB7Ci0JCWNsa19wdXQod2Rldi0+YXJtd2R0X2NrKTsKLQkJd2Rldi0+YXJtd2R0X2NrID0gTlVMTDsKLQl9Ci0KLQlpZiAod2Rldi0+bXB1X3dkdF9pY2spIHsKLQkJY2xrX3B1dCh3ZGV2LT5tcHVfd2R0X2ljayk7Ci0JCXdkZXYtPm1wdV93ZHRfaWNrID0gTlVMTDsKLQl9Ci0KLQlpZiAod2Rldi0+bXB1X3dkdF9mY2spIHsKLQkJY2xrX3B1dCh3ZGV2LT5tcHVfd2R0X2Zjayk7Ci0JCXdkZXYtPm1wdV93ZHRfZmNrID0gTlVMTDsKLQl9CisJY2xrX3B1dCh3ZGV2LT5pY2spOworCWNsa19wdXQod2Rldi0+ZmNrKTsKIAlpb3VubWFwKHdkZXYtPmJhc2UpOwogCiAJa2ZyZWUod2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL29yaW9uNXhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL29yaW9uNXhfd2R0LmMKaW5kZXggYjY0YWUxYS4uZTgxNDQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9vcmlvbjV4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvb3Jpb241eF93ZHQuYwpAQCAtMTYsMTEgKzE2LDEzIEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxwbGF0L29yaW9uNXhfd2R0Lmg+CiAKIC8qCiAgKiBXYXRjaGRvZyB0aW1lciBibG9jayByZWdpc3RlcnMuCkBAIC0yOSwxMyArMzEsMTQgQEAKICNkZWZpbmUgIFdEVF9FTgkJCTB4MDAxMAogI2RlZmluZSBXRFRfVkFMCQkJKFRJTUVSX1ZJUlRfQkFTRSArIDB4MDAyNCkKIAotI2RlZmluZSBPUklPTjVYX1RDTEsJCTE2NjY2NjY2NwotI2RlZmluZSBXRFRfTUFYX0RVUkFUSU9OCSgweGZmZmZmZmZmIC8gT1JJT041WF9UQ0xLKQorI2RlZmluZSBXRFRfTUFYX0NZQ0xFX0NPVU5UCTB4ZmZmZmZmZmYKICNkZWZpbmUgV0RUX0lOX1VTRQkJMAogI2RlZmluZSBXRFRfT0tfVE9fQ0xPU0UJCTEKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwotc3RhdGljIGludCBoZWFydGJlYXQgPSAgV0RUX01BWF9EVVJBVElPTjsJLyogKHNlY29uZHMpICovCitzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IC0xOwkJLyogbW9kdWxlIHBhcmFtZXRlciAoc2Vjb25kcykgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2R0X21heF9kdXJhdGlvbjsJLyogKHNlY29uZHMpICovCitzdGF0aWMgdW5zaWduZWQgaW50IHdkdF90Y2xrOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X3N0YXR1czsKIHN0YXRpYyBzcGlubG9ja190IHdkdF9sb2NrOwogCkBAIC00Niw3ICs0OSw3IEBACiAJc3Bpbl9sb2NrKCZ3ZHRfbG9jayk7CiAKIAkvKiBTZXQgd2F0Y2hkb2cgZHVyYXRpb24gKi8KLQl3cml0ZWwoT1JJT041WF9UQ0xLICogaGVhcnRiZWF0LCBXRFRfVkFMKTsKKwl3cml0ZWwod2R0X3RjbGsgKiBoZWFydGJlYXQsIFdEVF9WQUwpOwogCiAJLyogQ2xlYXIgd2F0Y2hkb2cgdGltZXIgaW50ZXJydXB0ICovCiAJcmVnID0gcmVhZGwoQlJJREdFX0NBVVNFKTsKQEAgLTg4LDcgKzkxLDcgQEAKIHN0YXRpYyBpbnQgb3Jpb241eF93ZHRfZ2V0X3RpbWVsZWZ0KGludCAqdGltZV9sZWZ0KQogewogCXNwaW5fbG9jaygmd2R0X2xvY2spOwotCSp0aW1lX2xlZnQgPSByZWFkbChXRFRfVkFMKSAvIE9SSU9ONVhfVENMSzsKKwkqdGltZV9sZWZ0ID0gcmVhZGwoV0RUX1ZBTCkgLyB3ZHRfdGNsazsKIAlzcGluX3VubG9jaygmd2R0X2xvY2spOwogCXJldHVybiAwOwogfQpAQCAtMTU4LDcgKzE2MSw3IEBACiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAotCQlpZiAodGltZSA8PSAwIHx8IHRpbWUgPiBXRFRfTUFYX0RVUkFUSU9OKSB7CisJCWlmICh0aW1lIDw9IDAgfHwgdGltZSA+IHdkdF9tYXhfZHVyYXRpb24pIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlicmVhazsKIAkJfQpAQCAtMjEwLDIzICsyMTMsNjkgQEAKIAkuZm9wcwkJPSAmb3Jpb241eF93ZHRfZm9wcywKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG9yaW9uNXhfd2R0X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9yaW9uNXhfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9yaW9uNXhfd2R0X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaW50IHJldDsKKworCWlmIChwZGF0YSkgeworCQl3ZHRfdGNsayA9IHBkYXRhLT50Y2xrOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiT3Jpb241eCBXYXRjaGRvZyBtaXNzZXMgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChvcmlvbjV4X3dkdF9taXNjZGV2LnBhcmVudCkKKwkJcmV0dXJuIC1FQlVTWTsKKwlvcmlvbjV4X3dkdF9taXNjZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwl3ZHRfbWF4X2R1cmF0aW9uID0gV0RUX01BWF9DWUNMRV9DT1VOVCAvIHdkdF90Y2xrOworCWlmIChoZWFydGJlYXQgPD0gMCB8fCBoZWFydGJlYXQgPiB3ZHRfbWF4X2R1cmF0aW9uKQorCQloZWFydGJlYXQgPSB3ZHRfbWF4X2R1cmF0aW9uOworCisJcmV0ID0gbWlzY19yZWdpc3Rlcigmb3Jpb241eF93ZHRfbWlzY2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50ayhLRVJOX0lORk8gIk9yaW9uNXggV2F0Y2hkb2cgVGltZXI6IEluaXRpYWwgdGltZW91dCAlZCBzZWMlc1xuIiwKKwkJCQloZWFydGJlYXQsIG5vd2F5b3V0ID8gIiwgbm93YXlvdXQiIDogIiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBvcmlvbjV4X3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrX2luaXQoJndkdF9sb2NrKTsKKwlpZiAodGVzdF9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpKSB7CisJCXdkdF9kaXNhYmxlKCk7CisJCWNsZWFyX2JpdChXRFRfSU5fVVNFLCAmd2R0X3N0YXR1cyk7CisJfQogCi0JcmV0ID0gbWlzY19yZWdpc3Rlcigmb3Jpb241eF93ZHRfbWlzY2Rldik7Ci0JaWYgKHJldCA9PSAwKQotCQlwcmludGsoIk9yaW9uNXggV2F0Y2hkb2cgVGltZXI6IGhlYXJ0YmVhdCAlZCBzZWNcbiIsCi0JCQkJCQkJCWhlYXJ0YmVhdCk7CisJcmV0ID0gbWlzY19kZXJlZ2lzdGVyKCZvcmlvbjV4X3dkdF9taXNjZGV2KTsKKwlpZiAoIXJldCkKKwkJb3Jpb241eF93ZHRfbWlzY2Rldi5wYXJlbnQgPSBOVUxMOwogCiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb3Jpb241eF93ZHRfZHJpdmVyID0geworCS5wcm9iZQkJPSBvcmlvbjV4X3dkdF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9yaW9uNXhfd2R0X3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJvcmlvbjV4X3dkdCIsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9yaW9uNXhfd2R0X2luaXQodm9pZCkKK3sKKwlzcGluX2xvY2tfaW5pdCgmd2R0X2xvY2spOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm9yaW9uNXhfd2R0X2RyaXZlcik7Cit9CisKIHN0YXRpYyB2b2lkIF9fZXhpdCBvcmlvbjV4X3dkdF9leGl0KHZvaWQpCiB7Ci0JbWlzY19kZXJlZ2lzdGVyKCZvcmlvbjV4X3dkdF9taXNjZGV2KTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb3Jpb241eF93ZHRfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQob3Jpb241eF93ZHRfaW5pdCk7CkBAIC0yMzYsOCArMjg1LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiT3Jpb241eCBQcm9jZXNzb3IgV2F0Y2hkb2ciKTsKIAogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMgKGRlZmF1bHQgaXMgIgotCQkJCQlfX01PRFVMRV9TVFJJTkcoV0RUX01BWF9EVVJBVElPTikgIikiKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMiKTsKIAogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jCmluZGV4IDQ4NGMyMTUuLjFhMmI5MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKQEAgLTUzNiw3ICs1MzYsOCBAQAogCiAJcmV0ID0gbWlzY19yZWdpc3RlcigmcGM4NzQxM19taXNjZGV2KTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKIAkJCVdBVENIRE9HX01JTk9SLCByZXQpOwogCQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmcGM4NzQxM19ub3RpZmllcik7CiAJCXJldHVybiByZXQ7CkBAIC01NzQsNyArNTc1LDggQEAKIG1vZHVsZV9pbml0KHBjODc0MTNfaW5pdCk7CiBtb2R1bGVfZXhpdChwYzg3NDEzX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJTdmVuIEFuZGVycyA8YW5kZXJzQGFuZHVyYXMuZGU+LCBNYXJjdXMgSnVua2VyIDxqdW5rZXJAYW5kdXJhcy5kZT4sIik7CitNT0RVTEVfQVVUSE9SKCJTdmVuIEFuZGVycyA8YW5kZXJzQGFuZHVyYXMuZGU+LCAiCisJCSJNYXJjdXMgSnVua2VyIDxqdW5rZXJAYW5kdXJhcy5kZT4sIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBDODc0MTMgV0RUIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZC5jCmluZGV4IDllMTMzMWEuLmFhOTUxMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZC5jCkBAIC0yNCwyNSArMjQsMjUgQEAKICAqCQl2ZXJzaW9uIHJlcG9ydGluZy4gIEFkZGVkIHJlYWQgcm91dGluZSBmb3IgdGVtcGVyYXR1cmUuCiAgKgkJUmVtb3ZlZCBzb21lIGV4dHJhIGRlZmluZXMsIGFkZGVkIGFuIGF1dG9kZXRlY3QgUmV2aXNpb24KICAqCQlyb3V0aW5lLgotICogOTYxMDA2ICAgICAgIFJldmlzZWQgc29tZSBkb2N1bWVudGF0aW9uLCBmaXhlZCBzb21lIGNvc21ldGljIGJ1Z3MuICBNYWRlCi0gKiAgICAgICAgICAgICAgZHJpdmVycyB0byBwYW5pYyB0aGUgc3lzdGVtIGlmIGl0J3Mgb3ZlcmhlYXRpbmcgYXQgYm9vdHVwLgorICogOTYxMDA2CVJldmlzZWQgc29tZSBkb2N1bWVudGF0aW9uLCBmaXhlZCBzb21lIGNvc21ldGljIGJ1Z3MuICBNYWRlCisgKgkJZHJpdmVycyB0byBwYW5pYyB0aGUgc3lzdGVtIGlmIGl0J3Mgb3ZlcmhlYXRpbmcgYXQgYm9vdHVwLgogICogOTYxMTE4CUNoYW5nZWQgc29tZSB2ZXJiaWFnZSBvbiBzb21lIG9mIHRoZSBvdXRwdXQsIHRpZGllZCB1cAogICoJCWNvZGUgYml0cywgYW5kIGFkZGVkIGNvbXBhdGliaWxpdHkgdG8gMi4xLnguCi0gKiA5NzA5MTIgICAgICAgRW5hYmxlZCBib2FyZCBvbiBvcGVuIGFuZCBkaXNhYmxlIG9uIGNsb3NlLgorICogOTcwOTEyCUVuYWJsZWQgYm9hcmQgb24gb3BlbiBhbmQgZGlzYWJsZSBvbiBjbG9zZS4KICAqIDk3MTEwNwlUb29rIGFjY291bnQgb2YgcmVjZW50IFZGUyBjaGFuZ2VzIChicm9rZSByZWFkKS4KLSAqIDk3MTIxMCAgICAgICBEaXNhYmxlIGJvYXJkIG9uIGluaXRpYWxpc2F0aW9uIGluIGNhc2UgYm9hcmQgYWxyZWFkeSB0aWNraW5nLgotICogOTcxMjIyICAgICAgIENoYW5nZWQgb3Blbi9jbG9zZSBmb3IgdGVtcGVyYXR1cmUgaGFuZGxpbmcKLSAqICAgICAgICAgICAgICBNaWNoYWVsIE1lc2tlcyA8bWVza2VzQGRlYmlhbi5vcmc+LgotICogOTgwMTEyICAgICAgIFVzZWQgbWlub3IgbnVtYmVycyBmcm9tIGluY2x1ZGUvbGludXgvbWlzY2RldmljZS5oCi0gKiA5OTA0MDMgICAgICAgQ2xlYXIgcmVzZXQgc3RhdHVzIGFmdGVyIHJlYWRpbmcgY29udHJvbCBzdGF0dXMgcmVnaXN0ZXIgaW4KLSAqICAgICAgICAgICAgICBwY3dkX3Nob3dwcmV2c3RhdGUoKS4gW01hcmMgQm91Y2hlciA8bWFyY0BtYnNpLmNhPl0KKyAqIDk3MTIxMAlEaXNhYmxlIGJvYXJkIG9uIGluaXRpYWxpc2F0aW9uIGluIGNhc2UgYm9hcmQgYWxyZWFkeSB0aWNraW5nLgorICogOTcxMjIyCUNoYW5nZWQgb3Blbi9jbG9zZSBmb3IgdGVtcGVyYXR1cmUgaGFuZGxpbmcKKyAqCQlNaWNoYWVsIE1lc2tlcyA8bWVza2VzQGRlYmlhbi5vcmc+LgorICogOTgwMTEyCVVzZWQgbWlub3IgbnVtYmVycyBmcm9tIGluY2x1ZGUvbGludXgvbWlzY2RldmljZS5oCisgKiA5OTA0MDMJQ2xlYXIgcmVzZXQgc3RhdHVzIGFmdGVyIHJlYWRpbmcgY29udHJvbCBzdGF0dXMgcmVnaXN0ZXIgaW4KKyAqCQlwY3dkX3Nob3dwcmV2c3RhdGUoKS4gW01hcmMgQm91Y2hlciA8bWFyY0BtYnNpLmNhPl0KICAqIDk5MDYwNQlNYWRlIGNoYW5nZXMgdG8gY29kZSB0byBzdXBwb3J0IEZpcm13YXJlIDEuMjJhLCBhZGRlZAogICoJCWZhaXJseSB1c2VsZXNzIHByb2MgZW50cnkuCiAgKiA5OTA2MTAJcmVtb3ZlZCBzYWlkIHVzZWxlc3MgcHJvYyBjb2RlIGZvciB0aGUgbWVyZ2UgPGFsYW4+CiAgKiAwMDA0MDMJUmVtb3ZlZCBsYXN0IHRyYWNlcyBvZiBwcm9jIGNvZGUuIDxkYXZlaj4KICAqIDAxMTIxNAlBZGRlZCBub3dheW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlCiAgKgkJQ09ORklHX1dBVENIRE9HX05PV0FZT1VUIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KLSAqICAgICAgICAgICAgICBBZGRlZCB0aW1lb3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdAorICoJCUFkZGVkIHRpbWVvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBkZWZhdWx0CiAgKi8KIAogLyoKQEAgLTc2LDggKzc2LDcgQEAKICNkZWZpbmUgV0FUQ0hET0dfRFJJVkVSX05BTUUgIklTQS1QQyBXYXRjaGRvZyIKICNkZWZpbmUgV0FUQ0hET0dfTkFNRSAicGN3ZCIKICNkZWZpbmUgUEZYIFdBVENIRE9HX05BTUUgIjogIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiBXQVRDSERPR19EUklWRVJfTkFNRSAiIGRyaXZlciwgdiIgV0FUQ0hET0dfVkVSU0lPTiAiICgiIFdBVENIRE9HX0RBVEUgIilcbiIKLSNkZWZpbmUgV0RfVkVSIFdBVENIRE9HX1ZFUlNJT04gIiAoIiBXQVRDSERPR19EQVRFICIpIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiBXQVRDSERPR19EUklWRVJfTkFNRSAiIGRyaXZlciwgdiIgV0FUQ0hET0dfVkVSU0lPTiAiXG4iCiAKIC8qCiAgKiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBQQ1dEX1JFVklTSU9OX0Igd2FzIHJlbW92ZWQgYmVjYXVzZSBBIGFuZCBCCkBAIC0yMDAsNyArMTk5LDkgQEAKICNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDAKIHN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOwogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICgyIDw9IGhlYXJ0YmVhdCA8PSA3MjAwIG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAiCisJIigyIDw9IGhlYXJ0YmVhdCA8PSA3MjAwIG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwpAQCAtMjM5LDcgKzI0MCw4IEBACiAJfQogCiAJaWYgKGRlYnVnID49IERFQlVHKQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInJlY2VpdmVkIGZvbGxvd2luZyBkYXRhIGZvciBjbWQ9MHglMDJ4OiBwb3J0MD0weCUwMnggbGFzdF9wb3J0MD0weCUwMnhcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicmVjZWl2ZWQgZm9sbG93aW5nIGRhdGEgZm9yICIKKwkJCSJjbWQ9MHglMDJ4OiBwb3J0MD0weCUwMnggbGFzdF9wb3J0MD0weCUwMnhcbiIsCiAJCQljbWQsIHBvcnQwLCBsYXN0X3BvcnQwKTsKIAogCXJldHVybiBwb3J0MDsKQEAgLTMzOSwxMCArMzQxLDEyIEBACiAJCQkJCQkJcGN3ZF9wcml2YXRlLmlvX2FkZHIpOwogCWVsc2UgaWYgKHBjd2RfcHJpdmF0ZS5yZXZpc2lvbiA9PSBQQ1dEX1JFVklTSU9OX0MpIHsKIAkJcGN3ZF9nZXRfZmlybXdhcmUoKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIklTQS1QQyBXYXRjaGRvZyAoUkVWLkMpIGRldGVjdGVkIGF0IHBvcnQgMHglMDR4IChGaXJtd2FyZSB2ZXJzaW9uOiAlcylcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYICJJU0EtUEMgV2F0Y2hkb2cgKFJFVi5DKSBkZXRlY3RlZCBhdCBwb3J0ICIKKwkJCSIweCUwNHggKEZpcm13YXJlIHZlcnNpb246ICVzKVxuIiwKIAkJCXBjd2RfcHJpdmF0ZS5pb19hZGRyLCBwY3dkX3ByaXZhdGUuZndfdmVyX3N0cik7CiAJCW9wdGlvbl9zd2l0Y2hlcyA9IHBjd2RfZ2V0X29wdGlvbl9zd2l0Y2hlcygpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiBUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiAiCisJCQkiVGVtcGVyYXR1cmUgUmVzZXQgRW5hYmxlPSVzLCBQb3dlciBPbiBEZWxheT0lc1xuIiwKIAkJCW9wdGlvbl9zd2l0Y2hlcywKIAkJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgxMCkgPyAiT04iIDogIk9GRiIpLAogCQkJKChvcHRpb25fc3dpdGNoZXMgJiAweDA4KSA/ICJPTiIgOiAiT0ZGIikpOwpAQCAtMzU4LDcgKzM2Miw4IEBACiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJUZW1wZXJhdHVyZSBPcHRpb24gRGV0ZWN0ZWRcbiIpOwogCiAJaWYgKHBjd2RfcHJpdmF0ZS5ib290X3N0YXR1cyAmIFdESU9GX0NBUkRSRVNFVCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlByZXZpb3VzIHJlYm9vdCB3YXMgY2F1c2VkIGJ5IHRoZSBjYXJkXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJQcmV2aW91cyByZWJvb3Qgd2FzIGNhdXNlZCBieSB0aGUgY2FyZFxuIik7CiAKIAlpZiAocGN3ZF9wcml2YXRlLmJvb3Rfc3RhdHVzICYgV0RJT0ZfT1ZFUkhFQVQpIHsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgUEZYCkBAIC04NzEsNyArODc2LDcgQEAKIAljYXJkc19mb3VuZCsrOwogCWlmIChjYXJkc19mb3VuZCA9PSAxKQogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAidiVzIEtlbiBIb2xsaXMgKGtlbmppQGJpdGdhdGUuY29tKVxuIiwKLQkJCQkJCQkJV0RfVkVSKTsKKwkJCQkJCQlXQVRDSERPR19WRVJTSU9OKTsKIAogCWlmIChjYXJkc19mb3VuZCA+IDEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVGhpcyBkcml2ZXIgb25seSBzdXBwb3J0cyAxIGRldmljZVxuIik7CkBAIC0xMDI2LDcgKzEwMzEsOCBAQAogbW9kdWxlX2luaXQocGN3ZF9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChwY3dkX2NsZWFudXBfbW9kdWxlKTsKIAotTU9EVUxFX0FVVEhPUigiS2VuIEhvbGxpcyA8a2VuamlAYml0Z2F0ZS5jb20+LCBXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPiIpOworTU9EVUxFX0FVVEhPUigiS2VuIEhvbGxpcyA8a2VuamlAYml0Z2F0ZS5jb20+LCAiCisJCSJXaW0gVmFuIFNlYnJvZWNrIDx3aW1AaWd1YW5hLmJlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJCZXJrc2hpcmUgSVNBLVBDIFdhdGNoZG9nIGRyaXZlciIpOwogTU9EVUxFX1ZFUlNJT04oV0FUQ0hET0dfVkVSU0lPTik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfcGNpLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfcGNpLmMKaW5kZXggNWQ3NjQyMi4uNjk4ZjUxYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF9wY2kuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfcGNpLmMKQEAgLTI0LDcgKzI0LDggQEAKICAqCUEgYmVsbHMgYW5kIHdoaXN0bGVzIGRyaXZlciBpcyBhdmFpbGFibGUgZnJvbToKICAqCWh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS93aW0vcGN3ZC9wY3dkX3BjaS8KICAqCi0gKglNb3JlIGluZm8gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYmVya3Byb2QuY29tLyBvciBodHRwOi8vd3d3LnBjd2F0Y2hkb2cuY29tLworICoJTW9yZSBpbmZvIGF2YWlsYWJsZSBhdAorICoJaHR0cDovL3d3dy5iZXJrcHJvZC5jb20vIG9yIGh0dHA6Ly93d3cucGN3YXRjaGRvZy5jb20vCiAgKi8KIAogLyoKQEAgLTUxLDExICs1MiwxMCBAQAogCiAvKiBNb2R1bGUgYW5kIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KICNkZWZpbmUgV0FUQ0hET0dfVkVSU0lPTiAiMS4wMyIKLSNkZWZpbmUgV0FUQ0hET0dfREFURSAiMjEgSmFuIDIwMDciCiAjZGVmaW5lIFdBVENIRE9HX0RSSVZFUl9OQU1FICJQQ0ktUEMgV2F0Y2hkb2ciCiAjZGVmaW5lIFdBVENIRE9HX05BTUUgInBjd2RfcGNpIgogI2RlZmluZSBQRlggV0FUQ0hET0dfTkFNRSAiOiAiCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OIFdBVENIRE9HX0RSSVZFUl9OQU1FICIgZHJpdmVyLCB2IiBXQVRDSERPR19WRVJTSU9OICIgKCIgV0FUQ0hET0dfREFURSAiKVxuIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiBXQVRDSERPR19EUklWRVJfTkFNRSAiIGRyaXZlciwgdiIgV0FUQ0hET0dfVkVSU0lPTiAiXG4iCiAKIC8qIFN0dWZmIGZvciB0aGUgUENJIElEJ3MgICovCiAjaWZuZGVmIFBDSV9WRU5ET1JfSURfUVVJQ0tMT0dJQwpAQCAtNzYsNyArNzYsOCBAQAogI2RlZmluZSBXRF9QQ0lfVFRSUAkJMHgwNAkvKiBUZW1wZXJhdHVyZSBUcmlwIHN0YXR1cyAqLwogI2RlZmluZSBXRF9QQ0lfUkwyQQkJMHgwOAkvKiBSZWxheSAyIEFjdGl2ZSAqLwogI2RlZmluZSBXRF9QQ0lfUkwxQQkJMHgxMAkvKiBSZWxheSAxIEFjdGl2ZSAqLwotI2RlZmluZSBXRF9QQ0lfUjJEUwkJMHg0MAkvKiBSZWxheSAyIERpc2FibGUgVGVtcGVyYXR1cmUtdHJpcC9yZXNldCAqLworI2RlZmluZSBXRF9QQ0lfUjJEUwkJMHg0MAkvKiBSZWxheSAyIERpc2FibGUgVGVtcGVyYXR1cmUtdHJpcCAvCisJCQkJCQkJCQlyZXNldCAqLwogI2RlZmluZSBXRF9QQ0lfUkxZMgkJMHg4MAkvKiBBY3RpdmF0ZSBSZWxheSAyIG9uIHRoZSBib2FyZCAqLwogLyogUG9ydCAyIDogQ29udHJvbCBTdGF0dXMgIzIgKi8KICNkZWZpbmUgV0RfUENJX1dESVMJCTB4MTAJLyogV2F0Y2hkb2cgRGlzYWJsZSAqLwpAQCAtMTE0LDEyICsxMTUsMTggQEAKIHN0YXRpYyBpbnQgdGVtcF9wYW5pYzsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGlzX2FjdGl2ZTsKIHN0YXRpYyBjaGFyIGV4cGVjdF9yZWxlYXNlOwotc3RhdGljIHN0cnVjdCB7CQkJCS8qIHRoaXMgaXMgcHJpdmF0ZSBkYXRhIGZvciBlYWNoIFBDSS1QQyB3YXRjaGRvZyBjYXJkICovCi0JaW50IHN1cHBvcnRzX3RlbXA7CQkvKiBXZXRoZXIgb3Igbm90IHRoZSBjYXJkIGhhcyBhIHRlbXBlcmF0dXJlIGRldmljZSAqLwotCWludCBib290X3N0YXR1czsJCS8qIFRoZSBjYXJkJ3MgYm9vdCBzdGF0dXMgKi8KLQl1bnNpZ25lZCBsb25nIGlvX2FkZHI7CQkvKiBUaGUgY2FyZHMgSS9PIGFkZHJlc3MgKi8KLQlzcGlubG9ja190IGlvX2xvY2s7CQkvKiB0aGUgbG9jayBmb3IgaW8gb3BlcmF0aW9ucyAqLwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwkJLyogdGhlIFBDSS1kZXZpY2UgKi8KKy8qIHRoaXMgaXMgcHJpdmF0ZSBkYXRhIGZvciBlYWNoIFBDSS1QQyB3YXRjaGRvZyBjYXJkICovCitzdGF0aWMgc3RydWN0IHsKKwkvKiBXZXRoZXIgb3Igbm90IHRoZSBjYXJkIGhhcyBhIHRlbXBlcmF0dXJlIGRldmljZSAqLworCWludCBzdXBwb3J0c190ZW1wOworCS8qIFRoZSBjYXJkJ3MgYm9vdCBzdGF0dXMgKi8KKwlpbnQgYm9vdF9zdGF0dXM7CisJLyogVGhlIGNhcmRzIEkvTyBhZGRyZXNzICovCisJdW5zaWduZWQgbG9uZyBpb19hZGRyOworCS8qIHRoZSBsb2NrIGZvciBpbyBvcGVyYXRpb25zICovCisJc3BpbmxvY2tfdCBpb19sb2NrOworCS8qIHRoZSBQQ0ktZGV2aWNlICovCisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiB9IHBjaXBjd2RfcHJpdmF0ZTsKIAogLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8KQEAgLTEzMCwxNCArMTM3LDE4IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWw6IDA9UXVpZXQsIDE9VmVyYm9zZSwgMj1EZWJ1ZyAoZGVmYXVsdD0wKSIpOwogCi0jZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCS8qIGRlZmF1bHQgaGVhcnRiZWF0ID0gZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcyAqLworI2RlZmluZSBXQVRDSERPR19IRUFSVEJFQVQgMAkvKiBkZWZhdWx0IGhlYXJ0YmVhdCA9CisJCQkJCQlkZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzICovCiBzdGF0aWMgaW50IGhlYXJ0YmVhdCA9IFdBVENIRE9HX0hFQVJUQkVBVDsKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzLiAoMDxoZWFydGJlYXQ8NjU1MzYgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICIKKwkiKDA8aGVhcnRiZWF0PDY1NTM2IG9yIDA9ZGVsYXktdGltZSBmcm9tIGRpcC1zd2l0Y2hlcywgZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX0hFQVJUQkVBVCkgIikiKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IgorCQkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CiAKIC8qCiAgKglJbnRlcm5hbCBmdW5jdGlvbnMKQEAgLTE0OCw4ICsxNTksOCBAQAogCWludCBnb3RfcmVzcG9uc2UsIGNvdW50OwogCiAJaWYgKGRlYnVnID49IERFQlVHKQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInNlbmRpbmcgZm9sbG93aW5nIGRhdGEgY21kPTB4JTAyeCBtc2I9MHglMDJ4IGxzYj0weCUwMnhcbiIsCi0JCWNtZCwgKm1zYiwgKmxzYik7CisJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAic2VuZGluZyBmb2xsb3dpbmcgZGF0YSAiCisJCSJjbWQ9MHglMDJ4IG1zYj0weCUwMnggbHNiPTB4JTAyeFxuIiwgY21kLCAqbXNiLCAqbHNiKTsKIAogCXNwaW5fbG9jaygmcGNpcGN3ZF9wcml2YXRlLmlvX2xvY2spOwogCS8qIElmIGEgY29tbWFuZCByZXF1aXJlcyBkYXRhIGl0IHNob3VsZCBiZSB3cml0dGVuIGZpcnN0LgpAQCAtMTY2LDE3ICsxNzcsMjAgQEAKIAkgKiB0aGUgV1JTUCBiaXQgaW4gcG9ydCAyIGFuZCBnaXZlIGl0IGEgbWF4LiB0aW1lb3V0IG9mCiAJICogUENJX0NPTU1BTkRfVElNRU9VVCB0byBwcm9jZXNzICovCiAJZ290X3Jlc3BvbnNlID0gaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAyKSAmIFdEX1BDSV9XUlNQOwotCWZvciAoY291bnQgPSAwOyAoY291bnQgPCBQQ0lfQ09NTUFORF9USU1FT1VUKSAmJiAoIWdvdF9yZXNwb25zZSk7IGNvdW50KyspIHsKKwlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgUENJX0NPTU1BTkRfVElNRU9VVCkgJiYgKCFnb3RfcmVzcG9uc2UpOworCQkJCQkJCQljb3VudCsrKSB7CiAJCW1kZWxheSgxKTsKIAkJZ290X3Jlc3BvbnNlID0gaW5iX3AocGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAyKSAmIFdEX1BDSV9XUlNQOwogCX0KIAogCWlmIChkZWJ1ZyA+PSBERUJVRykgewogCQlpZiAoZ290X3Jlc3BvbnNlKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlggInRpbWUgdG8gcHJvY2VzcyBjb21tYW5kIHdhczogJWQgbXNcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkidGltZSB0byBwcm9jZXNzIGNvbW1hbmQgd2FzOiAlZCBtc1xuIiwKIAkJCQljb3VudCk7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyBQRlggImNhcmQgZGlkIG5vdCByZXNwb25kIG9uIGNvbW1hbmQhXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAorCQkJCSJjYXJkIGRpZCBub3QgcmVzcG9uZCBvbiBjb21tYW5kIVxuIik7CiAJCX0KIAl9CiAKQEAgLTE4OSw3ICsyMDMsOCBAQAogCQlpbmJfcChwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciArIDYpOwogCiAJCWlmIChkZWJ1ZyA+PSBERUJVRykKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicmVjZWl2ZWQgZm9sbG93aW5nIGRhdGEgZm9yIGNtZD0weCUwMng6IG1zYj0weCUwMnggbHNiPTB4JTAyeFxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAicmVjZWl2ZWQgZm9sbG93aW5nIGRhdGEgZm9yICIKKwkJCQkiY21kPTB4JTAyeDogbXNiPTB4JTAyeCBsc2I9MHglMDJ4XG4iLAogCQkJCWNtZCwgKm1zYiwgKmxzYik7CiAJfQogCkBAIC0yMTgsNyArMjMzLDggQEAKIAljaGFyIGZ3X3Zlcl9zdHJbMjBdOwkJLyogVGhlIGNhcmRzIGZpcm13YXJlIHZlcnNpb24gKi8KIAlpbnQgb3B0aW9uX3N3aXRjaGVzOwogCi0JZ290X2Z3X3JldiA9IHNlbmRfY29tbWFuZChDTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04sICZmd19yZXZfbWFqb3IsICZmd19yZXZfbWlub3IpOworCWdvdF9md19yZXYgPSBzZW5kX2NvbW1hbmQoQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLCAmZndfcmV2X21ham9yLAorCQkJCQkJCQkmZndfcmV2X21pbm9yKTsKIAlpZiAoZ290X2Z3X3JldikKIAkJc3ByaW50Zihmd192ZXJfc3RyLCAiJXUuJTAydSIsIGZ3X3Jldl9tYWpvciwgZndfcmV2X21pbm9yKTsKIAllbHNlCkBAIC0yMjcsMjMgKzI0MywyNyBAQAogCS8qIEdldCBzd2l0Y2ggc2V0dGluZ3MgKi8KIAlvcHRpb25fc3dpdGNoZXMgPSBwY2lwY3dkX2dldF9vcHRpb25fc3dpdGNoZXMoKTsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJGb3VuZCBjYXJkIGF0IHBvcnQgMHglMDR4IChGaXJtd2FyZTogJXMpICVzIHRlbXAgb3B0aW9uXG4iLAorCXByaW50ayhLRVJOX0lORk8gUEZYICJGb3VuZCBjYXJkIGF0IHBvcnQgIgorCQkiMHglMDR4IChGaXJtd2FyZTogJXMpICVzIHRlbXAgb3B0aW9uXG4iLAogCQkoaW50KSBwY2lwY3dkX3ByaXZhdGUuaW9fYWRkciwgZndfdmVyX3N0ciwKIAkJKHBjaXBjd2RfcHJpdmF0ZS5zdXBwb3J0c190ZW1wID8gIndpdGgiIDogIndpdGhvdXQiKSk7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiBUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAorCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6ICIKKwkJIlRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCiAJCW9wdGlvbl9zd2l0Y2hlcywKIAkJKChvcHRpb25fc3dpdGNoZXMgJiAweDEwKSA/ICJPTiIgOiAiT0ZGIiksCiAJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgwOCkgPyAiT04iIDogIk9GRiIpKTsKIAogCWlmIChwY2lwY3dkX3ByaXZhdGUuYm9vdF9zdGF0dXMgJiBXRElPRl9DQVJEUkVTRVQpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJQcmV2aW91cyByZXNldCB3YXMgY2F1c2VkIGJ5IHRoZSBXYXRjaGRvZyBjYXJkXG4iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJCSJQcmV2aW91cyByZXNldCB3YXMgY2F1c2VkIGJ5IHRoZSBXYXRjaGRvZyBjYXJkXG4iKTsKIAogCWlmIChwY2lwY3dkX3ByaXZhdGUuYm9vdF9zdGF0dXMgJiBXRElPRl9PVkVSSEVBVCkKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkNhcmQgc2Vuc2VkIGEgQ1BVIE92ZXJoZWF0XG4iKTsKIAogCWlmIChwY2lwY3dkX3ByaXZhdGUuYm9vdF9zdGF0dXMgPT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIk5vIHByZXZpb3VzIHRyaXAgZGV0ZWN0ZWQgLSBDb2xkIGJvb3Qgb3IgcmVzZXRcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJIk5vIHByZXZpb3VzIHRyaXAgZGV0ZWN0ZWQgLSBDb2xkIGJvb3Qgb3IgcmVzZXRcbiIpOwogfQogCiBzdGF0aWMgaW50IHBjaXBjd2Rfc3RhcnQodm9pZCkKQEAgLTI4Myw3ICszMDMsOCBAQAogCXNwaW5fdW5sb2NrKCZwY2lwY3dkX3ByaXZhdGUuaW9fbG9jayk7CiAKIAlpZiAoIShzdGF0X3JlZyAmIFdEX1BDSV9XRElTKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZGlzYWJsZSBhdHRlbXB0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBkaXNhYmxlIGF0dGVtcHRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zNjQsNyArMzg1LDggQEAKIAl9CiAKIAkvKiBjbGVhciB0cmlwIHN0YXR1cyAmIExFRCBhbmQga2VlcCBtb2RlIG9mIHJlbGF5IDIgKi8KLQlvdXRiX3AoKGNvbnRyb2xfc3RhdHVzICYgV0RfUENJX1IyRFMpIHwgV0RfUENJX1dUUlAsIHBjaXBjd2RfcHJpdmF0ZS5pb19hZGRyICsgMSk7CisJb3V0Yl9wKChjb250cm9sX3N0YXR1cyAmIFdEX1BDSV9SMkRTKSB8IFdEX1BDSV9XVFJQLAorCQkJCQkJcGNpcGN3ZF9wcml2YXRlLmlvX2FkZHIgKyAxKTsKIAogCS8qIGNsZWFyIHJlc2V0IGNvdW50ZXIgKi8KIAltc2IgPSAwOwpAQCAtNDM3LDcgKzQ1OSw4IEBACiAJCQkgKiBmaXZlIG1vbnRocyBhZ28uLi4gKi8KIAkJCWV4cGVjdF9yZWxlYXNlID0gMDsKIAotCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgKi8KKwkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUKKwkJCSAqIG1hZ2ljIGNoYXJhY3RlciAqLwogCQkJZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgewogCQkJCWNoYXIgYzsKIAkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQpAQCAtNTMxLDcgKzU1NCw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlpZiAocGNpcGN3ZF9zZXRfaGVhcnRiZWF0KG5ld19oZWFydGJlYXQpKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlwY2lwY3dkX2tlZXBhbGl2ZSgpOwogCQkvKiBGYWxsICovCkBAIC01NjAsNyArNTgzLDggQEAKIAkvKiAvZGV2L3dhdGNoZG9nIGNhbiBvbmx5IGJlIG9wZW5lZCBvbmNlICovCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJmlzX2FjdGl2ZSkpIHsKIAkJaWYgKGRlYnVnID49IFZFUkJPU0UpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJBdHRlbXB0IHRvIG9wZW4gYWxyZWFkeSBvcGVuZWQgZGV2aWNlLlxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJIkF0dGVtcHQgdG8gb3BlbiBhbHJlYWR5IG9wZW5lZCBkZXZpY2UuXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTU3OCw3ICs2MDIsOCBAQAogCWlmIChleHBlY3RfcmVsZWFzZSA9PSA0MikgewogCQlwY2lwY3dkX3N0b3AoKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9DUklUIFBGWCAiVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CisJCXByaW50ayhLRVJOX0NSSVQgUEZYCisJCQkiVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CiAJCXBjaXBjd2Rfa2VlcGFsaXZlKCk7CiAJfQogCWV4cGVjdF9yZWxlYXNlID0gMDsKQEAgLTYyMSw3ICs2NDYsOCBAQAogICoJTm90aWZ5IHN5c3RlbQogICovCiAKLXN0YXRpYyBpbnQgcGNpcGN3ZF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCitzdGF0aWMgaW50IHBjaXBjd2Rfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwKKwkJCQkJCQkJdm9pZCAqdW51c2VkKQogewogCWlmIChjb2RlID09IFNZU19ET1dOIHx8IGNvZGUgPT0gU1lTX0hBTFQpCiAJCXBjaXBjd2Rfc3RvcCgpOwkvKiBUdXJuIHRoZSBXRFQgb2ZmICovCkBAIC03MjIsMzQgKzc0OCwzOCBAQAogCiAJLyogSWYgaGVhcnRiZWF0ID0gMCB0aGVuIHdlIHVzZSB0aGUgaGVhcnRiZWF0IGZyb20gdGhlIGRpcC1zd2l0Y2hlcyAqLwogCWlmIChoZWFydGJlYXQgPT0gMCkKLQkJaGVhcnRiZWF0ID0gaGVhcnRiZWF0X3RibFsocGNpcGN3ZF9nZXRfb3B0aW9uX3N3aXRjaGVzKCkgJiAweDA3KV07CisJCWhlYXJ0YmVhdCA9CisJCQloZWFydGJlYXRfdGJsWyhwY2lwY3dkX2dldF9vcHRpb25fc3dpdGNoZXMoKSAmIDB4MDcpXTsKIAotCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7IGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLworCS8qIENoZWNrIHRoYXQgdGhlIGhlYXJ0YmVhdCB2YWx1ZSBpcyB3aXRoaW4gaXQncyByYW5nZSA7CisJICogaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKHBjaXBjd2Rfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpKSB7CiAJCXBjaXBjd2Rfc2V0X2hlYXJ0YmVhdChXQVRDSERPR19IRUFSVEJFQVQpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMDxoZWFydGJlYXQ8NjU1MzYsIHVzaW5nICVkXG4iLAorCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJImhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlIDA8aGVhcnRiZWF0PDY1NTM2LCB1c2luZyAlZFxuIiwKIAkJCVdBVENIRE9HX0hFQVJUQkVBVCk7CiAJfQogCiAJcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZwY2lwY3dkX25vdGlmaWVyKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwKLQkJCXJldCk7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJjYW5ub3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLCByZXQpOwogCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9yZWdpb247CiAJfQogCiAJaWYgKHBjaXBjd2RfcHJpdmF0ZS5zdXBwb3J0c190ZW1wKSB7CiAJCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnBjaXBjd2RfdGVtcF9taXNjZGV2KTsKIAkJaWYgKHJldCAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKLQkJCQlURU1QX01JTk9SLCByZXQpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gIgorCQkJCSJtaW5vcj0lZCAoZXJyPSVkKVxuIiwgVEVNUF9NSU5PUiwgcmV0KTsKIAkJCWdvdG8gZXJyX291dF91bnJlZ2lzdGVyX3JlYm9vdDsKIAkJfQogCX0KIAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnBjaXBjd2RfbWlzY2Rldik7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAorCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQlXQVRDSERPR19NSU5PUiwgcmV0KTsKIAkJZ290byBlcnJfb3V0X21pc2NfZGVyZWdpc3RlcjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMKaW5kZXggYWZiMDg5Ni4uMDUyZmU0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYwpAQCAtNTEsMTIgKzUxLDExIEBACiAKIC8qIFVzZSBvdXIgb3duIGRiZyBtYWNybyAqLwogI3VuZGVmIGRiZwotI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pIGRvIHsgaWYgKGRlYnVnKSBwcmludGsoS0VSTl9ERUJVRyBQRlggZm9ybWF0ICJcbiIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotCisjZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgaWYgKGRlYnVnKSBwcmludGsoS0VSTl9ERUJVRyBQRlggZm9ybWF0ICJcbiIgLCAjIyBhcmcpOyB9IHdoaWxlICgwKQogCiAvKiBNb2R1bGUgYW5kIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMDIiCi0jZGVmaW5lIERSSVZFUl9EQVRFICIyMSBKYW4gMjAwNyIKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiV2ltIFZhbiBTZWJyb2VjayA8d2ltQGlndWFuYS5iZT4iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJCZXJrc2hpcmUgVVNCLVBDIFdhdGNoZG9nIGRyaXZlciIKICNkZWZpbmUgRFJJVkVSX0xJQ0VOU0UgIkdQTCIKQEAgLTczLDE0ICs3MiwxOCBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7CiAKLSNkZWZpbmUgV0FUQ0hET0dfSEVBUlRCRUFUIDAJLyogZGVmYXVsdCBoZWFydGJlYXQgPSBkZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzICovCisjZGVmaW5lIFdBVENIRE9HX0hFQVJUQkVBVCAwCS8qIGRlZmF1bHQgaGVhcnRiZWF0ID0KKwkJCQkJCWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMgKi8KIHN0YXRpYyBpbnQgaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOwogbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LCAiV2F0Y2hkb2cgaGVhcnRiZWF0IGluIHNlY29uZHMuICgwPGhlYXJ0YmVhdDw2NTUzNiBvciAwPWRlbGF5LXRpbWUgZnJvbSBkaXAtc3dpdGNoZXMsIGRlZmF1bHQ9IiBfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gIgorCSIoMDxoZWFydGJlYXQ8NjU1MzYgb3IgMD1kZWxheS10aW1lIGZyb20gZGlwLXN3aXRjaGVzLCBkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfSEVBUlRCRUFUKSAiKSIpOwogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iCisJCQkJX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOwogCiAvKiBUaGUgdmVuZG9yIGFuZCBwcm9kdWN0IGlkJ3MgZm9yIHRoZSBVU0ItUEMgV2F0Y2hkb2cgY2FyZCAqLwogI2RlZmluZSBVU0JfUENXRF9WRU5ET1JfSUQJMHgwYzk4CkBAIC05MSwyMCArOTQsMjEgQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1BDV0RfVkVORE9SX0lELCBVU0JfUENXRF9QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHVzYl9wY3dkX3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1c2JfcGN3ZF90YWJsZSk7CiAKIC8qIGFjY29yZGluZyB0byBkb2N1bWVudGF0aW9uIG1heC4gdGltZSB0byBwcm9jZXNzIGEgY29tbWFuZCBmb3IgdGhlIFVTQgogICogd2F0Y2hkb2cgY2FyZCBpcyAxMDAgb3IgMjAwIG1zLCBzbyB3ZSBnaXZlIGl0IDI1MCBtcyB0byBkbyBpdCdzIGpvYiAqLwogI2RlZmluZSBVU0JfQ09NTUFORF9USU1FT1VUCTI1MAogCiAvKiBXYXRjaGRvZydzIGludGVybmFsIGNvbW1hbmRzICovCi0jZGVmaW5lIENNRF9SRUFEX1RFTVAJCQkweDAyCS8qIFJlYWQgVGVtcGVyYXR1cmU7IFJlLXRyaWdnZXIgV2F0Y2hkb2cgKi8KKyNkZWZpbmUgQ01EX1JFQURfVEVNUAkJCTB4MDIJLyogUmVhZCBUZW1wZXJhdHVyZTsKKwkJCQkJCQlSZS10cmlnZ2VyIFdhdGNoZG9nICovCiAjZGVmaW5lIENNRF9UUklHR0VSCQkJQ01EX1JFQURfVEVNUAogI2RlZmluZSBDTURfR0VUX1NUQVRVUwkJCTB4MDQJLyogR2V0IFN0YXR1cyBJbmZvcm1hdGlvbiAqLwogI2RlZmluZSBDTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04JMHgwOAkvKiBHZXQgRmlybXdhcmUgVmVyc2lvbiAqLwogI2RlZmluZSBDTURfR0VUX0RJUF9TV0lUQ0hfU0VUVElOR1MJMHgwYwkvKiBHZXQgRGlwIFN3aXRjaCBTZXR0aW5ncyAqLwogI2RlZmluZSBDTURfUkVBRF9XQVRDSERPR19USU1FT1VUCTB4MTgJLyogUmVhZCBDdXJyZW50IFdhdGNoZG9nIFRpbWUgKi8KLSNkZWZpbmUgQ01EX1dSSVRFX1dBVENIRE9HX1RJTUVPVVQJMHgxOQkvKiBXcml0ZSBDdXJyZW50IFdhdGNoZG9nIFRpbWUgKi8KKyNkZWZpbmUgQ01EX1dSSVRFX1dBVENIRE9HX1RJTUVPVVQJMHgxOQkvKiBXcml0ZSBDdXJyZW50IFdhdGNoZG9nVGltZSAqLwogI2RlZmluZSBDTURfRU5BQkxFX1dBVENIRE9HCQkweDMwCS8qIEVuYWJsZSAvIERpc2FibGUgV2F0Y2hkb2cgKi8KICNkZWZpbmUgQ01EX0RJU0FCTEVfV0FUQ0hET0cJCUNNRF9FTkFCTEVfV0FUQ0hET0cKIApAQCAtMTI5LDIzICsxMzMsMzYgQEAKIAogLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KIHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlIHsKLQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsJCQkvKiBzYXZlIG9mZiB0aGUgdXNiIGRldmljZSBwb2ludGVyICovCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsJCS8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJLyogc2F2ZSBvZmYgdGhlIHVzYiBkZXZpY2UgcG9pbnRlciAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCS8qIHRoZSBpbnRlcmZhY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGVyZmFjZTsKIAotCXVuc2lnbmVkIGludAkJaW50ZXJmYWNlX251bWJlcjsJLyogdGhlIGludGVyZmFjZSBudW1iZXIgdXNlZCBmb3IgY21kJ3MgKi8KKwkvKiB0aGUgaW50ZXJmYWNlIG51bWJlciB1c2VkIGZvciBjbWQncyAqLworCXVuc2lnbmVkIGludAkJaW50ZXJmYWNlX251bWJlcjsKIAotCXVuc2lnbmVkIGNoYXIJCSppbnRyX2J1ZmZlcjsJCS8qIHRoZSBidWZmZXIgdG8gaW50ciBkYXRhICovCi0JZG1hX2FkZHJfdAkJaW50cl9kbWE7CQkvKiB0aGUgZG1hIGFkZHJlc3MgZm9yIHRoZSBpbnRyIGJ1ZmZlciAqLwotCXNpemVfdAkJCWludHJfc2l6ZTsJCS8qIHRoZSBzaXplIG9mIHRoZSBpbnRyIGJ1ZmZlciAqLwotCXN0cnVjdCB1cmIJCSppbnRyX3VyYjsJCS8qIHRoZSB1cmIgdXNlZCBmb3IgdGhlIGludHIgcGlwZSAqLworCS8qIHRoZSBidWZmZXIgdG8gaW50ciBkYXRhICovCisJdW5zaWduZWQgY2hhcgkJKmludHJfYnVmZmVyOworCS8qIHRoZSBkbWEgYWRkcmVzcyBmb3IgdGhlIGludHIgYnVmZmVyICovCisJZG1hX2FkZHJfdAkJaW50cl9kbWE7CisJLyogdGhlIHNpemUgb2YgdGhlIGludHIgYnVmZmVyICovCisJc2l6ZV90CQkJaW50cl9zaXplOworCS8qIHRoZSB1cmIgdXNlZCBmb3IgdGhlIGludHIgcGlwZSAqLworCXN0cnVjdCB1cmIJCSppbnRyX3VyYjsKIAotCXVuc2lnbmVkIGNoYXIJCWNtZF9jb21tYW5kOwkJLyogVGhlIGNvbW1hbmQgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCi0JdW5zaWduZWQgY2hhcgkJY21kX2RhdGFfbXNiOwkJLyogVGhlIGRhdGEgTVNCIHRoYXQgaXMgcmVwb3J0ZWQgYmFjayAqLwotCXVuc2lnbmVkIGNoYXIJCWNtZF9kYXRhX2xzYjsJCS8qIFRoZSBkYXRhIExTQiB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KLQlhdG9taWNfdAkJY21kX3JlY2VpdmVkOwkJLyogdHJ1ZSBpZiB3ZSByZWNlaXZlZCBhIHJlcG9ydCBhZnRlciBhIGNvbW1hbmQgKi8KKwkvKiBUaGUgY29tbWFuZCB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KKwl1bnNpZ25lZCBjaGFyCQljbWRfY29tbWFuZDsKKwkvKiBUaGUgZGF0YSBNU0IgdGhhdCBpcyByZXBvcnRlZCBiYWNrICovCisJdW5zaWduZWQgY2hhcgkJY21kX2RhdGFfbXNiOworCS8qIFRoZSBkYXRhIExTQiB0aGF0IGlzIHJlcG9ydGVkIGJhY2sgKi8KKwl1bnNpZ25lZCBjaGFyCQljbWRfZGF0YV9sc2I7CisJLyogdHJ1ZSBpZiB3ZSByZWNlaXZlZCBhIHJlcG9ydCBhZnRlciBhIGNvbW1hbmQgKi8KKwlhdG9taWNfdAkJY21kX3JlY2VpdmVkOwogCi0JaW50CQkJZXhpc3RzOwkJCS8qIFdldGhlciBvciBub3QgdGhlIGRldmljZSBleGlzdHMgKi8KLQlzdHJ1Y3QgbXV0ZXgJCW10eDsJCQkvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLworCS8qIFdldGhlciBvciBub3QgdGhlIGRldmljZSBleGlzdHMgKi8KKwlpbnQJCQlleGlzdHM7CisJLyogbG9ja3MgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgbXV0ZXgJCW10eDsKIH07CiBzdGF0aWMgc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkX2RldmljZTsKIApAQCAtMTUzLDcgKzE3MCw4IEBACiBzdGF0aWMgREVGSU5FX01VVEVYKGRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCi1zdGF0aWMgaW50IHVzYl9wY3dkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IHVzYl9wY3dkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgdXNiX3Bjd2RfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKIAogLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLwpAQCAtMTY3LDcgKzE4NSw4IEBACiAKIHN0YXRpYyB2b2lkIHVzYl9wY3dkX2ludHJfZG9uZShzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkID0gKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICopdXJiLT5jb250ZXh0OworCXN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCA9CisJCQkJKHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICopdXJiLT5jb250ZXh0OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1c2JfcGN3ZC0+aW50cl9idWZmZXI7CiAJaW50IHJldHZhbDsKIApAQCAtMTc4LDExICsxOTcsMTMgQEAKIAljYXNlIC1FTk9FTlQ6CiAJY2FzZSAtRVNIVVRET1dOOgogCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwotCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fZnVuY19fLAorCQkJCQkJCQl1cmItPnN0YXR1cyk7CiAJCXJldHVybjsKIAkvKiAtRVBJUEU6ICBzaG91bGQgY2xlYXIgdGhlIGhhbHQgKi8KIAlkZWZhdWx0OgkJLyogZXJyb3IgKi8KLQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX2Z1bmNfXywgdXJiLT5zdGF0dXMpOworCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLAorCQkJCQkJCQl1cmItPnN0YXR1cyk7CiAJCWdvdG8gcmVzdWJtaXQ7CiAJfQogCkBAIC0xOTksMjIgKzIyMCwyMyBAQAogcmVzdWJtaXQ6CiAJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0dmFsKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW4ndCByZXN1Ym1pdCBpbnRyLCB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCi0JCQlyZXR2YWwpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW4ndCByZXN1Ym1pdCBpbnRyLCAiCisJCQkidXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkXG4iLCByZXR2YWwpOwogfQogCi1zdGF0aWMgaW50IHVzYl9wY3dkX3NlbmRfY29tbWFuZChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsIHVuc2lnbmVkIGNoYXIgY21kLAotCXVuc2lnbmVkIGNoYXIgKm1zYiwgdW5zaWduZWQgY2hhciAqbHNiKQorc3RhdGljIGludCB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLAorCQl1bnNpZ25lZCBjaGFyIGNtZCwgdW5zaWduZWQgY2hhciAqbXNiLCB1bnNpZ25lZCBjaGFyICpsc2IpCiB7CiAJaW50IGdvdF9yZXNwb25zZSwgY291bnQ7CiAJdW5zaWduZWQgY2hhciBidWZbNl07CiAKLQkvKiBXZSB3aWxsIG5vdCBzZW5kIGFueSBjb21tYW5kcyBpZiB0aGUgVVNCIFBDV0QgZGV2aWNlIGRvZXMgbm90IGV4aXN0ICovCisJLyogV2Ugd2lsbCBub3Qgc2VuZCBhbnkgY29tbWFuZHMgaWYgdGhlIFVTQiBQQ1dEIGRldmljZSBkb2VzCisJICogbm90IGV4aXN0ICovCiAJaWYgKCghdXNiX3Bjd2QpIHx8ICghdXNiX3Bjd2QtPmV4aXN0cykpCiAJCXJldHVybiAtMTsKIAotCS8qIFRoZSBVU0IgUEMgV2F0Y2hkb2cgdXNlcyBhIDYgYnl0ZSByZXBvcnQgZm9ybWF0LiBUaGUgYm9hcmQgY3VycmVudGx5IHVzZXMKLQkgKiBvbmx5IDMgb2YgdGhlIHNpeCBieXRlcyBvZiB0aGUgcmVwb3J0LiAqLworCS8qIFRoZSBVU0IgUEMgV2F0Y2hkb2cgdXNlcyBhIDYgYnl0ZSByZXBvcnQgZm9ybWF0LgorCSAqIFRoZSBib2FyZCBjdXJyZW50bHkgdXNlcyBvbmx5IDMgb2YgdGhlIHNpeCBieXRlcyBvZiB0aGUgcmVwb3J0LiAqLwogCWJ1ZlswXSA9IGNtZDsJCQkvKiBCeXRlIDAgPSBDTUQgKi8KIAlidWZbMV0gPSAqbXNiOwkJCS8qIEJ5dGUgMSA9IERhdGEgTVNCICovCiAJYnVmWzJdID0gKmxzYjsJCQkvKiBCeXRlIDIgPSBEYXRhIExTQiAqLwpAQCAtMjI5LDEyICsyNTEsMTQgQEAKIAkJCUhJRF9SRVFfU0VUX1JFUE9SVCwgSElEX0RUX1JFUE9SVCwKIAkJCTB4MDIwMCwgdXNiX3Bjd2QtPmludGVyZmFjZV9udW1iZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksCiAJCQlVU0JfQ09NTUFORF9USU1FT1VUKSAhPSBzaXplb2YoYnVmKSkgewotCQlkYmcoInVzYl9wY3dkX3NlbmRfY29tbWFuZDogZXJyb3IgaW4gdXNiX2NvbnRyb2xfbXNnIGZvciBjbWQgMHgleCAweCV4IDB4JXhcbiIsIGNtZCwgKm1zYiwgKmxzYik7CisJCWRiZygidXNiX3Bjd2Rfc2VuZF9jb21tYW5kOiBlcnJvciBpbiB1c2JfY29udHJvbF9tc2cgZm9yICIKKwkJCQkiY21kIDB4JXggMHgleCAweCV4XG4iLCBjbWQsICptc2IsICpsc2IpOwogCX0KIAkvKiB3YWl0IHRpbGwgdGhlIHVzYiBjYXJkIHByb2Nlc3NlZCB0aGUgY29tbWFuZCwKIAkgKiB3aXRoIGEgbWF4LiB0aW1lb3V0IG9mIFVTQl9DT01NQU5EX1RJTUVPVVQgKi8KIAlnb3RfcmVzcG9uc2UgPSAwOwotCWZvciAoY291bnQgPSAwOyAoY291bnQgPCBVU0JfQ09NTUFORF9USU1FT1VUKSAmJiAoIWdvdF9yZXNwb25zZSk7IGNvdW50KyspIHsKKwlmb3IgKGNvdW50ID0gMDsgKGNvdW50IDwgVVNCX0NPTU1BTkRfVElNRU9VVCkgJiYgKCFnb3RfcmVzcG9uc2UpOworCQkJCQkJCQljb3VudCsrKSB7CiAJCW1kZWxheSgxKTsKIAkJaWYgKGF0b21pY19yZWFkKCZ1c2JfcGN3ZC0+Y21kX3JlY2VpdmVkKSkKIAkJCWdvdF9yZXNwb25zZSA9IDE7CkBAIC0yNTYsMTAgKzI4MCwxMiBAQAogCWludCByZXR2YWw7CiAKIAkvKiBFbmFibGUgV2F0Y2hkb2cgKi8KLQlyZXR2YWwgPSB1c2JfcGN3ZF9zZW5kX2NvbW1hbmQodXNiX3Bjd2QsIENNRF9FTkFCTEVfV0FUQ0hET0csICZtc2IsICZsc2IpOworCXJldHZhbCA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0VOQUJMRV9XQVRDSERPRywKKwkJCQkJCQkJJm1zYiwgJmxzYik7CiAKIAlpZiAoKHJldHZhbCA9PSAwKSB8fCAobHNiID09IDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBlbmFibGUgYXR0ZW1wdFxuIik7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkiQ2FyZCBkaWQgbm90IGFja25vd2xlZGdlIGVuYWJsZSBhdHRlbXB0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMjczLDEwICsyOTksMTIgQEAKIAlpbnQgcmV0dmFsOwogCiAJLyogRGlzYWJsZSBXYXRjaGRvZyAqLwotCXJldHZhbCA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0RJU0FCTEVfV0FUQ0hET0csICZtc2IsICZsc2IpOworCXJldHZhbCA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0RJU0FCTEVfV0FUQ0hET0csCisJCQkJCQkJCSZtc2IsICZsc2IpOwogCiAJaWYgKChyZXR2YWwgPT0gMCkgfHwgKGxzYiAhPSAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYXJkIGRpZCBub3QgYWNrbm93bGVkZ2UgZGlzYWJsZSBhdHRlbXB0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJIkNhcmQgZGlkIG5vdCBhY2tub3dsZWRnZSBkaXNhYmxlIGF0dGVtcHRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zMDgsNyArMzM2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB1c2JfcGN3ZF9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLCBpbnQgKnRlbXBlcmF0dXJlKQorc3RhdGljIGludCB1c2JfcGN3ZF9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IHVzYl9wY3dkX3ByaXZhdGUgKnVzYl9wY3dkLAorCQkJCQkJCWludCAqdGVtcGVyYXR1cmUpCiB7CiAJdW5zaWduZWQgY2hhciBtc2IsIGxzYjsKIApAQCAtMzIzLDcgKzM1Miw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNiX3Bjd2RfZ2V0X3RpbWVsZWZ0KHN0cnVjdCB1c2JfcGN3ZF9wcml2YXRlICp1c2JfcGN3ZCwgaW50ICp0aW1lX2xlZnQpCitzdGF0aWMgaW50IHVzYl9wY3dkX2dldF90aW1lbGVmdChzdHJ1Y3QgdXNiX3Bjd2RfcHJpdmF0ZSAqdXNiX3Bjd2QsCisJCQkJCQkJCWludCAqdGltZV9sZWZ0KQogewogCXVuc2lnbmVkIGNoYXIgbXNiLCBsc2I7CiAKQEAgLTM0MSw3ICszNzEsNyBAQAogICovCiAKIHN0YXRpYyBzc2l6ZV90IHVzYl9wY3dkX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqZGF0YSwKLQkJCSAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKKwkJCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKIAkvKiBTZWUgaWYgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgJ1YnIGFuZCByZWxvYWQgdGhlIHRpbWVyICovCiAJaWYgKGxlbikgewpAQCAtMzUyLDcgKzM4Miw4IEBACiAJCQkgKiBmaXZlIG1vbnRocyBhZ28uLi4gKi8KIAkJCWV4cGVjdF9yZWxlYXNlID0gMDsKIAotCQkJLyogc2NhbiB0byBzZWUgd2hldGhlciBvciBub3Qgd2UgZ290IHRoZSBtYWdpYyBjaGFyYWN0ZXIgKi8KKwkJCS8qIHNjYW4gdG8gc2VlIHdoZXRoZXIgb3Igbm90IHdlIGdvdCB0aGUKKwkJCSAqIG1hZ2ljIGNoYXJhY3RlciAqLwogCQkJZm9yIChpID0gMDsgaSAhPSBsZW47IGkrKykgewogCQkJCWNoYXIgYzsKIAkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQpAQCAtNDMxLDcgKzQ2Miw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlpZiAodXNiX3Bjd2Rfc2V0X2hlYXJ0YmVhdCh1c2JfcGN3ZF9kZXZpY2UsIG5ld19oZWFydGJlYXQpKQotCQkgICAgcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl1c2JfcGN3ZF9rZWVwYWxpdmUodXNiX3Bjd2RfZGV2aWNlKTsKIAkJLyogRmFsbCAqLwpAQCAtNDc1LDcgKzUwNiw4IEBACiAJaWYgKGV4cGVjdF9yZWxlYXNlID09IDQyKSB7CiAJCXVzYl9wY3dkX3N0b3AodXNiX3Bjd2RfZGV2aWNlKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9DUklUIFBGWCAiVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CisJCXByaW50ayhLRVJOX0NSSVQgUEZYCisJCQkiVW5leHBlY3RlZCBjbG9zZSwgbm90IHN0b3BwaW5nIHdhdGNoZG9nIVxuIik7CiAJCXVzYl9wY3dkX2tlZXBhbGl2ZSh1c2JfcGN3ZF9kZXZpY2UpOwogCX0KIAlleHBlY3RfcmVsZWFzZSA9IDA7CkBAIC01MTUsNyArNTQ3LDggQEAKICAqCU5vdGlmeSBzeXN0ZW0KICAqLwogCi1zdGF0aWMgaW50IHVzYl9wY3dkX25vdGlmeV9zeXMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGNvZGUsIHZvaWQgKnVudXNlZCkKK3N0YXRpYyBpbnQgdXNiX3Bjd2Rfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgY29kZSwKKwkJCQkJCQkJdm9pZCAqdW51c2VkKQogewogCWlmIChjb2RlID09IFNZU19ET1dOIHx8IGNvZGUgPT0gU1lTX0hBTFQpCiAJCXVzYl9wY3dkX3N0b3AodXNiX3Bjd2RfZGV2aWNlKTsJLyogVHVybiB0aGUgV0RUIG9mZiAqLwpAQCAtNTc4LDcgKzYxMSw4IEBACiAgKglDYWxsZWQgYnkgdGhlIHVzYiBjb3JlIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGNvbm5lY3RlZCB0aGF0IGl0IHRoaW5rcwogICoJdGhpcyBkcml2ZXIgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbi4KICAqLwotc3RhdGljIGludCB1c2JfcGN3ZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IHVzYl9wY3dkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCQkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKQEAgLTYwMiwxNiArNjM2LDE1IEBACiAKIAkvKiBjaGVjayBvdXQgdGhhdCB3ZSBoYXZlIGEgSElEIGRldmljZSAqLwogCWlmICghKGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZUNsYXNzID09IFVTQl9DTEFTU19ISUQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIlRoZSBkZXZpY2UgaXNuJ3QgYSBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJIlRoZSBkZXZpY2UgaXNuJ3QgYSBIdW1hbiBJbnRlcmZhY2UgRGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJLyogY2hlY2sgb3V0IHRoZSBlbmRwb2ludDogaXQgaGFzIHRvIGJlIEludGVycnVwdCAmIElOICovCiAJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbMF0uZGVzYzsKIAotCWlmICghKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmCi0JICAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKLQkJCQk9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpKSkgeworCWlmICghdXNiX2VuZHBvaW50X2lzX2ludF9pbihlbmRwb2ludCkpIHsKIAkJLyogd2UgZGlkbid0IGZpbmQgYSBJbnRlcnJ1cHQgZW5kcG9pbnQgd2l0aCBkaXJlY3Rpb24gSU4gKi8KIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGRuJ3QgZmluZCBhbiBJTlRSICYgSU4gZW5kcG9pbnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTYzNCwxMCArNjY3LDEyIEBACiAJdXNiX3Bjd2QtPnVkZXYgPSB1ZGV2OwogCXVzYl9wY3dkLT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CiAJdXNiX3Bjd2QtPmludGVyZmFjZV9udW1iZXIgPSBpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7Ci0JdXNiX3Bjd2QtPmludHJfc2l6ZSA9IChsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpID4gOCA/IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgOiA4KTsKKwl1c2JfcGN3ZC0+aW50cl9zaXplID0gKGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSkgPiA4ID8KKwkJCQlsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpIDogOCk7CiAKIAkvKiBzZXQgdXAgdGhlIG1lbW9yeSBidWZmZXIncyAqLwotCXVzYl9wY3dkLT5pbnRyX2J1ZmZlciA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgdXNiX3Bjd2QtPmludHJfc2l6ZSwgR0ZQX0FUT01JQywgJnVzYl9wY3dkLT5pbnRyX2RtYSk7CisJdXNiX3Bjd2QtPmludHJfYnVmZmVyID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCB1c2JfcGN3ZC0+aW50cl9zaXplLAorCQkJCQlHRlBfQVRPTUlDLCAmdXNiX3Bjd2QtPmludHJfZG1hKTsKIAlpZiAoIXVzYl9wY3dkLT5pbnRyX2J1ZmZlcikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJZ290byBlcnJvcjsKQEAgLTY3MSw3ICs3MDYsOCBAQAogCXVzYl9wY3dkX3N0b3AodXNiX3Bjd2QpOwogCiAJLyogR2V0IHRoZSBGaXJtd2FyZSBWZXJzaW9uICovCi0JZ290X2Z3X3JldiA9IHVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0dFVF9GSVJNV0FSRV9WRVJTSU9OLCAmZndfcmV2X21ham9yLCAmZndfcmV2X21pbm9yKTsKKwlnb3RfZndfcmV2ID0gdXNiX3Bjd2Rfc2VuZF9jb21tYW5kKHVzYl9wY3dkLCBDTURfR0VUX0ZJUk1XQVJFX1ZFUlNJT04sCisJCQkJCQkmZndfcmV2X21ham9yLCAmZndfcmV2X21pbm9yKTsKIAlpZiAoZ290X2Z3X3JldikKIAkJc3ByaW50Zihmd192ZXJfc3RyLCAiJXUuJTAydSIsIGZ3X3Jldl9tYWpvciwgZndfcmV2X21pbm9yKTsKIAllbHNlCkBAIC02ODEsOSArNzE3LDExIEBACiAJCWZ3X3Zlcl9zdHIpOwogCiAJLyogR2V0IHN3aXRjaCBzZXR0aW5ncyAqLwotCXVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0dFVF9ESVBfU1dJVENIX1NFVFRJTkdTLCAmZHVtbXksICZvcHRpb25fc3dpdGNoZXMpOworCXVzYl9wY3dkX3NlbmRfY29tbWFuZCh1c2JfcGN3ZCwgQ01EX0dFVF9ESVBfU1dJVENIX1NFVFRJTkdTLCAmZHVtbXksCisJCQkJCQkJJm9wdGlvbl9zd2l0Y2hlcyk7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiT3B0aW9uIHN3aXRjaGVzICgweCUwMngpOiBUZW1wZXJhdHVyZSBSZXNldCBFbmFibGU9JXMsIFBvd2VyIE9uIERlbGF5PSVzXG4iLAorCXByaW50ayhLRVJOX0lORk8gUEZYICJPcHRpb24gc3dpdGNoZXMgKDB4JTAyeCk6ICIKKwkJIlRlbXBlcmF0dXJlIFJlc2V0IEVuYWJsZT0lcywgUG93ZXIgT24gRGVsYXk9JXNcbiIsCiAJCW9wdGlvbl9zd2l0Y2hlcywKIAkJKChvcHRpb25fc3dpdGNoZXMgJiAweDEwKSA/ICJPTiIgOiAiT0ZGIiksCiAJCSgob3B0aW9uX3N3aXRjaGVzICYgMHgwOCkgPyAiT04iIDogIk9GRiIpKTsKQEAgLTY5MiwzMCArNzMwLDM1IEBACiAJaWYgKGhlYXJ0YmVhdCA9PSAwKQogCQloZWFydGJlYXQgPSBoZWFydGJlYXRfdGJsWyhvcHRpb25fc3dpdGNoZXMgJiAweDA3KV07CiAKLQkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOyBpZiBub3QgcmVzZXQgdG8gdGhlIGRlZmF1bHQgKi8KKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2UgOworCSAqIGlmIG5vdCByZXNldCB0byB0aGUgZGVmYXVsdCAqLwogCWlmICh1c2JfcGN3ZF9zZXRfaGVhcnRiZWF0KHVzYl9wY3dkLCBoZWFydGJlYXQpKSB7CiAJCXVzYl9wY3dkX3NldF9oZWFydGJlYXQodXNiX3Bjd2QsIFdBVENIRE9HX0hFQVJUQkVBVCk7Ci0JCXByaW50ayhLRVJOX0lORk8gUEZYICJoZWFydGJlYXQgdmFsdWUgbXVzdCBiZSAwPGhlYXJ0YmVhdDw2NTUzNiwgdXNpbmcgJWRcbiIsCisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMDxoZWFydGJlYXQ8NjU1MzYsIHVzaW5nICVkXG4iLAogCQkJV0FUQ0hET0dfSEVBUlRCRUFUKTsKIAl9CiAKIAlyZXR2YWwgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnVzYl9wY3dkX25vdGlmaWVyKTsKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCiAJCQlyZXR2YWwpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCXJldHZhbCA9IG1pc2NfcmVnaXN0ZXIoJnVzYl9wY3dkX3RlbXBlcmF0dXJlX21pc2NkZXYpOwogCWlmIChyZXR2YWwgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJVEVNUF9NSU5PUiwgcmV0dmFsKTsKIAkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXJfcmVib290OwogCX0KIAogCXJldHZhbCA9IG1pc2NfcmVnaXN0ZXIoJnVzYl9wY3dkX21pc2NkZXYpOwogCWlmIChyZXR2YWwgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjYW5ub3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJImNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAogCQkJV0FUQ0hET0dfTUlOT1IsIHJldHZhbCk7CiAJCWdvdG8gZXJyX291dF9taXNjX2RlcmVnaXN0ZXI7CiAJfQpAQCAtODAxLDcgKzg0NCw3IEBACiAJCXJldHVybiByZXN1bHQ7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggRFJJVkVSX0RFU0MgIiB2IiBEUklWRVJfVkVSU0lPTiAiICgiIERSSVZFUl9EQVRFICIpXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCBEUklWRVJfREVTQyAiIHYiIERSSVZFUl9WRVJTSU9OICJcbiIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKaW5kZXggNmQ5ZjNkNC4uNjQxMzUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9wbng0MDA4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcG54NDAwOF93ZHQuYwpAQCAtNTQsMjIgKzU0LDIyIEBACiAKIC8qIFdEVElNX0NUUkwgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIENPVU5UX0VOQUIgICAgIDEKLSNkZWZpbmUgUkVTRVRfQ09VTlQgICAgKDE8PDEpCi0jZGVmaW5lIERFQlVHX0VOICAgICAgICgxPDwyKQorI2RlZmluZSBSRVNFVF9DT1VOVCAgICAoMSA8PCAxKQorI2RlZmluZSBERUJVR19FTiAgICAgICAoMSA8PCAyKQogCiAvKiBXRFRJTV9NQ1RSTCBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgTVIwX0lOVCAgICAgICAgMQogI3VuZGVmICBSRVNFVF9DT1VOVDAKLSNkZWZpbmUgUkVTRVRfQ09VTlQwICAgKDE8PDIpCi0jZGVmaW5lIFNUT1BfQ09VTlQwICAgICgxPDwyKQotI2RlZmluZSBNX1JFUzEgICAgICAgICAoMTw8MykKLSNkZWZpbmUgTV9SRVMyICAgICAgICAgKDE8PDQpCi0jZGVmaW5lIFJFU0ZSQzEgICAgICAgICgxPDw1KQotI2RlZmluZSBSRVNGUkMyICAgICAgICAoMTw8NikKKyNkZWZpbmUgUkVTRVRfQ09VTlQwICAgKDEgPDwgMikKKyNkZWZpbmUgU1RPUF9DT1VOVDAgICAgKDEgPDwgMikKKyNkZWZpbmUgTV9SRVMxICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgTV9SRVMyICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgUkVTRlJDMSAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgUkVTRlJDMiAgICAgICAgKDEgPDwgNikKIAogLyogV0RUSU1fRU1SIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBFWFRfTUFUQ0gwICAgICAgMQotI2RlZmluZSBNQVRDSF9PVVRQVVRfSElHSCAoMjw8NCkJLyphIE1BVENIX0NUUkwgc2V0dGluZyAqLworI2RlZmluZSBNQVRDSF9PVVRQVVRfSElHSCAoMiA8PCA0KQkvKmEgTUFUQ0hfQ1RSTCBzZXR0aW5nICovCiAKIC8qIFdEVElNX1JFUyBiaXQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgV0RPR19SRVNFVCAgICAgIDEJLyogcmVhZCBvbmx5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMKaW5kZXggZjM1NTNmYS4uZjZjY2NjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYwpAQCAtMTcsMjcgKzE3LDI5IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CQkvKiBGb3IgbW9kdWxlIHNwZWNpZmljIGl0ZW1zICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4JCS8qIEZvciBuZXcgbW9kdWxlcGFyYW0ncyAqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CQkvKiBGb3Igc3RhbmRhcmQgdHlwZXMgKGxpa2Ugc2l6ZV90KSAqLworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CQkvKiBGb3IgdGhlIC1FTk9ERVYvLi4uIHZhbHVlcyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgkJLyogRm9yIHByaW50ay9wYW5pYy8uLi4gKi8KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgkJCS8qIEZvciBmaWxlIG9wZXJhdGlvbnMgKi8KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CQkvKiBGb3IgTU9EVUxFX0FMSUFTX01JU0NERVYKKwkJCQkJCQkoV0FUQ0hET0dfTUlOT1IpICovCisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4JCS8qIEZvciB0aGUgd2F0Y2hkb2cgc3BlY2lmaWMgaXRlbXMgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkJLyogRm9yIF9faW5pdC9fX2V4aXQvLi4uICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CS8qIEZvciBwbGF0Zm9ybV9kcml2ZXIgZnJhbWV3b3JrICovCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JCS8qIEZvciBzcGluX2xvY2svc3Bpbl91bmxvY2svLi4uICovCisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgkJLyogRm9yIGNvcHlfdG9fdXNlci9wdXRfdXNlci8uLi4gKi8KIAotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtcmMzMjQzNC9pbnRlZy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXJjMzI0MzQvaW50ZWcuaD4JLyogRm9yIHRoZSBXYXRjaGRvZyByZWdpc3RlcnMgKi8KIAotI2RlZmluZSBWRVJTSU9OICIwLjQiCisjZGVmaW5lIFBGWCBLQlVJTERfTU9ETkFNRSAiOiAiCisKKyNkZWZpbmUgVkVSU0lPTiAiMS4wIgogCiBzdGF0aWMgc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIGludXNlOworCXNwaW5sb2NrX3QgaW9fbG9jazsKIH0gcmMzMjQzNF93ZHRfZGV2aWNlOwogCiBzdGF0aWMgc3RydWN0IGludGVnIF9faW9tZW0gKndkdF9yZWc7CkBAIC01OCw2ICs2MCw5IEBACiAjZGVmaW5lIFdBVENIRE9HX1RJTUVPVVQgMjAKIAogc3RhdGljIGludCB0aW1lb3V0ID0gV0FUQ0hET0dfVElNRU9VVDsKK21vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LCAiV2F0Y2hkb2cgdGltZW91dCB2YWx1ZSwgaW4gc2Vjb25kcyAoZGVmYXVsdD0iCisJCVdBVENIRE9HX1RJTUVPVVQgIikiKTsKIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOwpAQCAtNjgsMTAgKzczLDI5IEBACiAjZGVmaW5lIFNFVF9CSVRTKGFkZHIsIG9yLCBuYW5kKSBcCiAJd3JpdGVsKChyZWFkbCgmYWRkcikgfCBvcikgJiB+bmFuZCwgJmFkZHIpCiAKK3N0YXRpYyBpbnQgcmMzMjQzNF93ZHRfc2V0KGludCBuZXdfdGltZW91dCkKK3sKKwlpbnQgbWF4X3RvID0gV1RDT01QMlNFQygodTMyKS0xKTsKKworCWlmIChuZXdfdGltZW91dCA8IDAgfHwgbmV3X3RpbWVvdXQgPiBtYXhfdG8pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidGltZW91dCB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWQiLAorCQkJbWF4X3RvKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXRpbWVvdXQgPSBuZXdfdGltZW91dDsKKwlzcGluX2xvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKwl3cml0ZWwoU0VDMldUQ09NUCh0aW1lb3V0KSwgJndkdF9yZWctPnd0Y29tcGFyZSk7CisJc3Bpbl91bmxvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCByYzMyNDM0X3dkdF9zdGFydCh2b2lkKQogewogCXUzMiBvciwgbmFuZDsKIAorCXNwaW5fbG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCiAJLyogemVybyB0aGUgY291bnRlciBiZWZvcmUgZW5hYmxpbmcgKi8KIAl3cml0ZWwoMCwgJndkdF9yZWctPnd0Y291bnQpOwogCkBAIC04NSwzOCArMTA5LDM1IEBACiAKIAlTRVRfQklUUyh3ZHRfcmVnLT5lcnJjcywgb3IsIG5hbmQpOwogCisJLyogc2V0IHRoZSB0aW1lb3V0IChlaXRoZXIgZGVmYXVsdCBvciBiYXNlZCBvbiBtb2R1bGUgcGFyYW0pICovCisJcmMzMjQzNF93ZHRfc2V0KHRpbWVvdXQpOworCiAJLyogcmVzZXQgV1RDIHRpbWVvdXQgYml0IGFuZCBlbmFibGUgV0RUICovCiAJbmFuZCA9IDEgPDwgUkMzMjQzNF9XVENfVE87CiAJb3IgPSAxIDw8IFJDMzI0MzRfV1RDX0VOOwogCiAJU0VUX0JJVFMod2R0X3JlZy0+d3RjLCBvciwgbmFuZCk7CisKKwlzcGluX3VubG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOworCXByaW50ayhLRVJOX0lORk8gUEZYICJTdGFydGVkIHdhdGNoZG9nIHRpbWVyLlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIHJjMzI0MzRfd2R0X3N0b3Aodm9pZCkKIHsKKwlzcGluX2xvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKwogCS8qIERpc2FibGUgV0RUICovCiAJU0VUX0JJVFMod2R0X3JlZy0+d3RjLCAwLCAxIDw8IFJDMzI0MzRfV1RDX0VOKTsKLX0KIAotc3RhdGljIGludCByYzMyNDM0X3dkdF9zZXQoaW50IG5ld190aW1lb3V0KQotewotCWludCBtYXhfdG8gPSBXVENPTVAyU0VDKCh1MzIpLTEpOwotCi0JaWYgKG5ld190aW1lb3V0IDwgMCB8fCBuZXdfdGltZW91dCA+IG1heF90bykgewotCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKLQkJCSI6IHRpbWVvdXQgdmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkIiwKLQkJCW1heF90byk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQl0aW1lb3V0ID0gbmV3X3RpbWVvdXQ7Ci0Jd3JpdGVsKFNFQzJXVENPTVAodGltZW91dCksICZ3ZHRfcmVnLT53dGNvbXBhcmUpOwotCi0JcmV0dXJuIDA7CisJc3Bpbl91bmxvY2soJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiU3RvcHBlZCB3YXRjaGRvZyB0aW1lci5cbiIpOwogfQogCiBzdGF0aWMgdm9pZCByYzMyNDM0X3dkdF9waW5nKHZvaWQpCiB7CisJc3Bpbl9sb2NrKCZyYzMyNDM0X3dkdF9kZXZpY2UuaW9fbG9jayk7CiAJd3JpdGVsKDAsICZ3ZHRfcmVnLT53dGNvdW50KTsKKwlzcGluX3VubG9jaygmcmMzMjQzNF93ZHRfZGV2aWNlLmlvX2xvY2spOwogfQogCiBzdGF0aWMgaW50IHJjMzI0MzRfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC0xMzcsMTEgKzE1OCwxMCBAQAogewogCWlmIChleHBlY3RfY2xvc2UgPT0gNDIpIHsKIAkJcmMzMjQzNF93ZHRfc3RvcCgpOwotCQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IGRpc2FibGluZyB3YXRjaGRvZyB0aW1lclxuIik7CiAJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgS0JVSUxEX01PRE5BTUUKLQkJCSI6IGRldmljZSBjbG9zZWQgdW5leHBlY3RlZGx5LiBXRFQgd2lsbCBub3Qgc3RvcCAhXG4iKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCBQRlgKKwkJCSJkZXZpY2UgY2xvc2VkIHVuZXhwZWN0ZWRseS4gV0RUIHdpbGwgbm90IHN0b3AhXG4iKTsKIAkJcmMzMjQzNF93ZHRfcGluZygpOwogCX0KIAljbGVhcl9iaXQoMCwgJnJjMzI0MzRfd2R0X2RldmljZS5pbnVzZSk7CkBAIC0xODUsOCArMjA1LDkgQEAKIAkJLmlkZW50aXR5ID0JCSJSQzMyNDM0X1dEVCBXYXRjaGRvZyIsCiAJfTsKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgotCQlyYzMyNDM0X3dkdF9waW5nKCk7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CiAJY2FzZSBXRElPQ19HRVRTVEFUVVM6CiAJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgpAQCAtMTk0LDEwICsyMTUsNiBAQAogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZ2YWx1ZSwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOwotCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmaWRlbnQsIHNpemVvZihpZGVudCkpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWJyZWFrOwogCWNhc2UgV0RJT0NfU0VUT1BUSU9OUzoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YWx1ZSwgYXJncCwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yMTIsNiArMjI5LDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQlyYzMyNDM0X3dkdF9waW5nKCk7CisJCWJyZWFrOwogCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZuZXdfdGltZW91dCwgYXJncCwgc2l6ZW9mKGludCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0yMjcsNyArMjQ3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmMzMjQzNF93ZHRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJjMzI0MzRfd2R0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS53cml0ZQkJPSByYzMyNDM0X3dkdF93cml0ZSwKQEAgLTI0Miw4ICsyNjIsOCBAQAogCS5mb3BzCT0gJnJjMzI0MzRfd2R0X2ZvcHMsCiB9OwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2RldmluaXRkYXRhID0gS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FCi0JCSI6IFdhdGNoZG9nIFRpbWVyIHZlcnNpb24gIiBWRVJTSU9OICIsIHRpbWVyIG1hcmdpbjogJWQgc2VjXG4iOworc3RhdGljIGNoYXIgYmFubmVyW10gX19kZXZpbml0ZGF0YSA9IEtFUk5fSU5GTyBQRlgKKwkJIldhdGNoZG9nIFRpbWVyIHZlcnNpb24gIiBWRVJTSU9OICIsIHRpbWVyIG1hcmdpbjogJWQgc2VjXG4iOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCByYzMyNDM0X3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtMjUyLDIyICsyNzIsMzMgQEAKIAogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicmI1MzJfd2R0X3JlcyIpOwogCWlmICghcikgewotCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKLQkJCSJmYWlsZWQgdG8gcmV0cmlldmUgcmVzb3VyY2VzXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJldHJpZXZlIHJlc291cmNlc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXdkdF9yZWcgPSBpb3JlbWFwX25vY2FjaGUoci0+c3RhcnQsIHItPmVuZCAtIHItPnN0YXJ0KTsKIAlpZiAoIXdkdF9yZWcpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCQkiZmFpbGVkIHRvIHJlbWFwIEkvTyByZXNvdXJjZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gcmVtYXAgSS9PIHJlc291cmNlc1xuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCisJc3Bpbl9sb2NrX2luaXQoJnJjMzI0MzRfd2R0X2RldmljZS5pb19sb2NrKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgd2F0Y2hkb2cgaXMgbm90IHJ1bm5pbmcgKi8KKwlyYzMyNDM0X3dkdF9zdG9wKCk7CisKKwkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2U7CisJICogaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCisJaWYgKHJjMzI0MzRfd2R0X3NldCh0aW1lb3V0KSkgeworCQlyYzMyNDM0X3dkdF9zZXQoV0FUQ0hET0dfVElNRU9VVCk7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkidGltZW91dCB2YWx1ZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWRcbiIsCisJCQlXVENPTVAyU0VDKCh1MzIpLTEpKTsKKwl9CisKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZyYzMyNDM0X3dkdF9taXNjZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUKLQkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgd2F0Y2hkb2cgZGV2aWNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHdhdGNoZG9nIGRldmljZVxuIik7CiAJCWdvdG8gdW5tYXA7CiAJfQogCkBAIC0yODcsMjIgKzMxOCwyOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciByYzMyNDM0X3dkdCA9IHsKLQkucHJvYmUJPSByYzMyNDM0X3dkdF9wcm9iZSwKLQkucmVtb3ZlCT0gX19kZXZleGl0X3AocmMzMjQzNF93ZHRfcmVtb3ZlKSwKLQkuZHJpdmVyCT0gewotCQkubmFtZSA9ICJyYzMyNDM0X3dkdCIsCitzdGF0aWMgdm9pZCByYzMyNDM0X3dkdF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJjMzI0MzRfd2R0X3N0b3AoKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmMzMjQzNF93ZHRfZHJpdmVyID0geworCS5wcm9iZQkJPSByYzMyNDM0X3dkdF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJjMzI0MzRfd2R0X3JlbW92ZSksCisJLnNodXRkb3duCT0gcmMzMjQzNF93ZHRfc2h1dGRvd24sCisJLmRyaXZlcgkJPSB7CisJCQkubmFtZSA9ICJyYzMyNDM0X3dkdCIsCiAJfQogfTsKIAogc3RhdGljIGludCBfX2luaXQgcmMzMjQzNF93ZHRfaW5pdCh2b2lkKQogewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJjMzI0MzRfd2R0KTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZyYzMyNDM0X3dkdF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcmMzMjQzNF93ZHRfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZyYzMyNDM0X3dkdCk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJjMzI0MzRfd2R0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHJjMzI0MzRfd2R0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCmluZGV4IDA5Y2IxODMuLjFlOGYwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKQEAgLTE0LDkgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAKIC8qIFJJTyB1c2VzIHRoZSBOYXRTZW1pIFN1cGVyIEkvTyBwb3dlciBtYW5hZ2VtZW50IGxvZ2ljYWwgZGV2aWNlCkBAIC04Niw4ICs4NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcmlvd2RfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIHJpb3dkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaW5mbyA9IHsKIAkJLm9wdGlvbnMJCT0gV0RJT0ZfU0VUVElNRU9VVCwKQEAgLTE0Nyw3ICsxNDUsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCByaW93ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCByaW93ZF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCByaW93ZCAqcCA9IHJpb3dkX2RldmljZTsKIApAQCAtMTYwLDEyICsxNTksMTIgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmlvd2RfZm9wcyA9IHsKLQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkubGxzZWVrID0Jbm9fbGxzZWVrLAotCS5pb2N0bCA9CXJpb3dkX2lvY3RsLAotCS5vcGVuID0JCXJpb3dkX29wZW4sCi0JLndyaXRlID0Jcmlvd2Rfd3JpdGUsCi0JLnJlbGVhc2UgPQlyaW93ZF9yZWxlYXNlLAorCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkubGxzZWVrID0JCW5vX2xsc2VlaywKKwkudW5sb2NrZWRfaW9jdGwgPQlyaW93ZF9pb2N0bCwKKwkub3BlbiA9CQkJcmlvd2Rfb3BlbiwKKwkud3JpdGUgPQkJcmlvd2Rfd3JpdGUsCisJLnJlbGVhc2UgPQkJcmlvd2RfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSByaW93ZF9taXNjZGV2ID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCmluZGV4IGYxYWUzNzI5Li5jY2UxOTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3JtOWtfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCkBAIC01OSw4ICs1OSw4IEBACiBzdGF0aWMgaW50IHdkdF9ncGlfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqLCB1bnNpZ25lZCBsb25nLCB2b2lkICopOwogc3RhdGljIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqd2R0X2dwaV9nZXRfcmVzb3VyY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLAogCQkJCQkJY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwotc3RhdGljIGludCBfX2luaXQgd2R0X2dwaV9wcm9iZShzdHJ1Y3QgZGV2aWNlICopOwotc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IGRldmljZSAqKTsKK3N0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKK3N0YXRpYyBpbnQgX19leGl0IHdkdF9ncGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAKIAogc3RhdGljIGNvbnN0IGNoYXIgd2R0X2dwaV9uYW1lW10gPSAid2R0X2dwaSI7CkBAIC0zNDYsMTAgKzM0Niw5IEBACiB9CiAKIC8qIE5vIGhvdHBsdWdnaW5nIG9uIHRoZSBwbGF0Zm9ybSBidXMgLSB1c2UgX19pbml0ICovCi1zdGF0aWMgaW50IF9faW5pdCB3ZHRfZ3BpX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGR2KQogewogCWludCByZXM7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqIGNvbnN0IHBkdiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCWNvbnN0IHN0cnVjdCByZXNvdXJjZQogCQkqIGNvbnN0IHJyID0gd2R0X2dwaV9nZXRfcmVzb3VyY2UocGR2LCBXRFRfUkVTT1VSQ0VfUkVHUywKIAkJCQkJCSAgSU9SRVNPVVJDRV9NRU0pLApAQCAtMzc0LDcgKzM3Myw3IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2V4aXQgd2R0X2dwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXM7CiAKQEAgLTM4NywxNSArMzg2LDEzIEBACiAKIAogLyogRGV2aWNlIGRyaXZlciBpbml0ICYgZXhpdCAqLwotc3RhdGljIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHdkdF9ncGlfZHJpdmVyID0gewotCS5uYW1lCQk9IChjaGFyICopIHdkdF9ncGlfbmFtZSwKLQkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB3Z3RfZ3BpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSB3ZHRfZ3BpX25hbWUsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwl9LAogCS5wcm9iZQkJPSB3ZHRfZ3BpX3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3Aod2R0X2dwaV9yZW1vdmUpLAotCS5zaHV0ZG93bgk9IE5VTEwsCi0JLnN1c3BlbmQJPSBOVUxMLAotCS5yZXN1bWUJCT0gTlVMTCwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdkdF9ncGlfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHdkdF9ncGlfaW5pdF9tb2R1bGUodm9pZCkKQEAgLTQwMywxMiArNDAwLDEyIEBACiAJYXRvbWljX3NldCgmb3BlbmNudCwgMSk7CiAJaWYgKHRpbWVvdXQgPiBNQVhfVElNRU9VVF9TRUNPTkRTKQogCQl0aW1lb3V0ID0gTUFYX1RJTUVPVVRfU0VDT05EUzsKLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd2R0X2dwaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd2R0X2dwaV9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCWRyaXZlcl91bnJlZ2lzdGVyKCZ3ZHRfZ3BpX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJndkdF9ncGlfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQod2R0X2dwaV9pbml0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NhMTEwMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCmluZGV4IGUxOWI0NTcuLmVlMWNhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqCVdhdGNoZG9nIGRyaXZlciBmb3IgdGhlIFNBMTF4MC9QWEEyeHgKICAqCi0gKiAgICAgIChjKSBDb3B5cmlnaHQgMjAwMCBPbGVnIERyb2tpbiA8Z3JlZW5AY3JpbWVhLmVkdT4KLSAqICAgICAgICAgIEJhc2VkIG9uIFNvZnREb2cgZHJpdmVyIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+CisgKgkoYykgQ29weXJpZ2h0IDIwMDAgT2xlZyBEcm9raW4gPGdyZWVuQGNyaW1lYS5lZHU+CisgKgkgICAgQmFzZWQgb24gU29mdERvZyBkcml2ZXIgYnkgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTUsNyArMTUsNyBAQAogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwMCAgICAgICAgICAgT2xlZyBEcm9raW4gPGdyZWVuQGNyaW1lYS5lZHU+CiAgKgotICogICAgICAyNy8xMS8yMDAwIEluaXRpYWwgcmVsZWFzZQorICoJMjcvMTEvMjAwMCBJbml0aWFsIHJlbGVhc2UKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAogI2lmZGVmIENPTkZJR19BUkNIX1BYQQotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtb3N0Lmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPG1hY2gvcmVzZXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmM2MHh4d2R0LmMKaW5kZXggMzI2NmRhYWFlLi5kMWMzOTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NiYzYweHh3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiYzYweHh3ZHQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKgk2MHh4IFNpbmdsZSBCb2FyZCBDb21wdXRlciBXYXRjaGRvZyBUaW1lciBkcml2ZXIgZm9yIExpbnV4IDIuMi54CiAgKgotICogICAgICBCYXNlZCBvbiBhY3F1aXJld2R0LmMgYnkgQWxhbiBDb3guCisgKglCYXNlZCBvbiBhY3F1aXJld2R0LmMgYnkgQWxhbiBDb3guCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2JjODM2MC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmM4MzYwLmMKaW5kZXggYWU3NGY2Yi4uYjZlNjc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYmM4MzYwLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYmM4MzYwLmMKQEAgLTQsMTIgKzQsMTIgQEAKICAqCShjKSBDb3B5cmlnaHQgMjAwNSBXZWJjb24sIEluYy4KICAqCiAgKglCYXNlZCBvbiBpYjcwMHdkdC5jLCB3aGljaCBpcyBiYXNlZCBvbiBhZHZhbnRlY2h3ZHQuYyB3aGljaCBpcyBiYXNlZAotICogICAgICBvbiBhY3F1aXJld2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gd2R0LmMuCisgKglvbiBhY3F1aXJld2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gd2R0LmMuCiAgKgogICoJKGMpIENvcHlyaWdodCAyMDAxIENoYXJsZXMgSG93ZXMgPGNob3dlc0B2c29sLm5ldD4KICAqCi0gKiAgICAgIEJhc2VkIG9uIGFkdmFudGVjaHdkdC5jIHdoaWNoIGlzIGJhc2VkIG9uIGFjcXVpcmV3ZHQuYyB3aGljaAotICogICAgICAgaXMgYmFzZWQgb24gd2R0LmMuCisgKglCYXNlZCBvbiBhZHZhbnRlY2h3ZHQuYyB3aGljaCBpcyBiYXNlZCBvbiBhY3F1aXJld2R0LmMgd2hpY2gKKyAqCWlzIGJhc2VkIG9uIHdkdC5jLgogICoKICAqCShjKSBDb3B5cmlnaHQgMjAwMC0yMDAxIE1hcmVrIE1pY2hhbGtpZXdpY3ogPG1hcmVrbUBsaW51eC5vcmcucGw+CiAgKgpAQCAtMzAsOSArMzAsOSBAQAogICoKICAqCShjKSBDb3B5cmlnaHQgMTk5NSAgICBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPgogICoKLSAqICAgICAgMTQtRGVjLTIwMDEgTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgotICogICAgICAgICAgIEFkZGVkIG5vd2F5b3V0IG1vZHVsZSBvcHRpb24gdG8gb3ZlcnJpZGUgQ09ORklHX1dBVENIRE9HX05PV0FZT1VUCi0gKiAgICAgICAgICAgQWRkZWQgdGltZW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHQKKyAqCTE0LURlYy0yMDAxIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KKyAqCSAgICAgQWRkZWQgbm93YXlvdXQgbW9kdWxlIG9wdGlvbiB0byBvdmVycmlkZSBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQKKyAqCSAgICAgQWRkZWQgdGltZW91dCBtb2R1bGUgb3B0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHQKICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9zYmNfZXB4X2MzLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiY19lcHhfYzMuYwppbmRleCAwNjU1M2RlLi5lNDY3ZGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NiY19lcHhfYzMuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3NiY19lcHhfYzMuYwpAQCAtMzUsNyArMzUsOCBAQAogCiBzdGF0aWMgaW50IG5vd2F5b3V0ID0gV0FUQ0hET0dfTk9XQVlPVVQ7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iCisJCQkJCV9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKIAogI2RlZmluZSBFUFhDM19XQVRDSERPR19DVExfUkVHIDB4MWVlIC8qIHdyaXRlIDEgdG8gZW5hYmxlLCAwIHRvIGRpc2FibGUgKi8KICNkZWZpbmUgRVBYQzNfV0FUQ0hET0dfUEVUX1JFRyAweDFlZiAvKiB3cml0ZSBhbnl0aGluZyB0byBwZXQgb25jZSBlbmFibGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NjMTIwMHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYzEyMDB3ZHQuYwppbmRleCAyM2RhM2NjLi5iNWUxOWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NjMTIwMHdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKQEAgLTcxLDcgKzcxLDcgQEAKICNkZWZpbmUgVUFSVDJfSVJRCTB4MDQJLyogU2VyaWFsMSAqLwogLyogNSAtNyBhcmUgcmVzZXJ2ZWQgKi8KIAotc3RhdGljIGNoYXIgYmFubmVyW10gX19pbml0ZGF0YSA9IEtFUk5fSU5GTyBQRlggU0MxMjAwX01PRFVMRV9WRVI7CitzdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0gUEZYIFNDMTIwMF9NT0RVTEVfVkVSOwogc3RhdGljIGludCB0aW1lb3V0ID0gMTsKIHN0YXRpYyBpbnQgaW8gPSAtMTsKIHN0YXRpYyBpbnQgaW9fbGVuID0gMjsJCS8qIGZvciBub24gcGx1ZyBhbmQgcGxheSAqLwpAQCAtMzkyLDcgKzM5Miw3IEBACiB7CiAJaW50IHJldDsKIAotCXByaW50aygiJXNcbiIsIGJhbm5lcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIGJhbm5lcik7CiAKICNpZiBkZWZpbmVkIENPTkZJR19QTlAKIAlpZiAoaXNhcG5wKSB7CkBAIC00NzcsNiArNDc3LDcgQEAKIG1vZHVsZV9leGl0KHNjMTIwMHdkdF9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiWndhbmUgTXdhaWthbWJvIDx6d2FuZUBjb21tZmlyZXNlcnZpY2VzLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODczMDcvUEM5NzMwNyB3YXRjaGRvZyBjb21wb25lbnQiKTsKK01PRFVMRV9ERVNDUklQVElPTigKKwkiRHJpdmVyIGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBDODczMDcvUEM5NzMwNyB3YXRjaGRvZyBjb21wb25lbnQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2M1MjBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NjNTIwX3dkdC5jCmluZGV4IGEyYjZjMTAuLjUyYjYzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc2M1MjBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYzUyMF93ZHQuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKglBTUQgRWxhbiBTQzUyMCBwcm9jZXNzb3IgV2F0Y2hkb2cgVGltZXIgZHJpdmVyCiAgKgotICogICAgICBCYXNlZCBvbiBhY3F1aXJld2R0LmMgYnkgQWxhbiBDb3gsCi0gKiAgICAgICAgICAgYW5kIHNiYzYweHh3ZHQuYyBieSBKYWtvYiBPZXN0ZXJnYWFyZCA8amFrb2JAdW50aG91Z2h0Lm5ldD4KKyAqCUJhc2VkIG9uIGFjcXVpcmV3ZHQuYyBieSBBbGFuIENveCwKKyAqCSAgICAgYW5kIHNiYzYweHh3ZHQuYyBieSBKYWtvYiBPZXN0ZXJnYWFyZCA8amFrb2JAdW50aG91Z2h0Lm5ldD4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTEsNyArMTEsNyBAQAogICoKICAqCVRoZSBhdXRob3JzIGRvIE5PVCBhZG1pdCBsaWFiaWxpdHkgbm9yIHByb3ZpZGUgd2FycmFudHkgZm9yCiAgKglhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyBwcm92aWRlZCAiQVMtSVMiIGluCi0gKiAgICAgIHRoZSBob3BlIHRoYXQgaXQgbWF5IGJlIHVzZWZ1bCBmb3Igb3RoZXJzLgorICoJdGhlIGhvcGUgdGhhdCBpdCBtYXkgYmUgdXNlZnVsIGZvciBvdGhlcnMuCiAgKgogICoJKGMpIENvcHlyaWdodCAyMDAxICAgIFNjb3R0IEplbm5pbmdzIDxsaW51eGRyaXZlcnNAb3JvLm5ldD4KICAqICAgICAgICAgICA5LzI3IC0gMjAwMSAgICAgIFtJbml0aWFsIHJlbGVhc2VdCkBAIC00MzgsNiArNDM4LDcgQEAKIG1vZHVsZV9leGl0KHNjNTIwX3dkdF91bmxvYWQpOwogCiBNT0RVTEVfQVVUSE9SKCJTY290dCBhbmQgQmlsbCBKZW5uaW5ncyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHdhdGNoZG9nIHRpbWVyIGluIEFNRCBcIkVsYW5cIiBTQzUyMCB1UHJvY2Vzc29yIik7CitNT0RVTEVfREVTQ1JJUFRJT04oCisJIkRyaXZlciBmb3Igd2F0Y2hkb2cgdGltZXIgaW4gQU1EIFwiRWxhblwiIFNDNTIwIHVQcm9jZXNzb3IiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYwppbmRleCAyZTU2Y2FkLi44YTFmMGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Ntc2MzN2I3ODdfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jCkBAIC0yLDcgKzIsNyBAQAogICoJU01zQyAzN0I3ODcgV2F0Y2hkb2cgVGltZXIgZHJpdmVyIGZvciBMaW51eCAyLjYueC54CiAgKgogICoJQmFzZWQgb24gYWNxdWlyZXdkdC5jIGJ5IEFsYW4gQ294IDxhbGFuQGx4b3JndWsudWt1dS5vcmcudWs+Ci0gKiAgICAgICBhbmQgc29tZSBvdGhlciBleGlzdGluZyBkcml2ZXJzCisgKglhbmQgc29tZSBvdGhlciBleGlzdGluZyBkcml2ZXJzCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTExLDcgKzExLDcgQEAKICAqCiAgKglUaGUgYXV0aG9ycyBkbyBOT1QgYWRtaXQgbGlhYmlsaXR5IG5vciBwcm92aWRlIHdhcnJhbnR5IGZvcgogICoJYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQgIkFTLUlTIiBpbgotICogICAgICB0aGUgaG9wZSB0aGF0IGl0IG1heSBiZSB1c2VmdWwgZm9yIG90aGVycy4KKyAqCXRoZSBob3BlIHRoYXQgaXQgbWF5IGJlIHVzZWZ1bCBmb3Igb3RoZXJzLgogICoKICAqCShDKSBDb3B5cmlnaHQgMjAwMy0yMDA2ICBTdmVuIEFuZGVycyA8YW5kZXJzQGFuZHVyYXMuZGU+CiAgKgpAQCAtMjIsMTkgKzIyLDE5IEBACiAgKgogICogIFRoZW9yeSBvZiBvcGVyYXRpb246CiAgKgotICogICAgICBBIFdhdGNoZG9nIFRpbWVyIChXRFQpIGlzIGEgaGFyZHdhcmUgY2lyY3VpdCB0aGF0IGNhbgotICogICAgICByZXNldCB0aGUgY29tcHV0ZXIgc3lzdGVtIGluIGNhc2Ugb2YgYSBzb2Z0d2FyZSBmYXVsdC4KLSAqICAgICAgWW91IHByb2JhYmx5IGtuZXcgdGhhdCBhbHJlYWR5LgorICoJQSBXYXRjaGRvZyBUaW1lciAoV0RUKSBpcyBhIGhhcmR3YXJlIGNpcmN1aXQgdGhhdCBjYW4KKyAqCXJlc2V0IHRoZSBjb21wdXRlciBzeXN0ZW0gaW4gY2FzZSBvZiBhIHNvZnR3YXJlIGZhdWx0LgorICoJWW91IHByb2JhYmx5IGtuZXcgdGhhdCBhbHJlYWR5LgogICoKLSAqICAgICAgVXN1YWxseSBhIHVzZXJzcGFjZSBkYWVtb24gd2lsbCBub3RpZnkgdGhlIGtlcm5lbCBXRFQgZHJpdmVyCi0gKiAgICAgIHZpYSB0aGUgL2Rldi93YXRjaGRvZyBzcGVjaWFsIGRldmljZSBmaWxlIHRoYXQgdXNlcnNwYWNlIGlzCi0gKiAgICAgIHN0aWxsIGFsaXZlLCBhdCByZWd1bGFyIGludGVydmFscy4gIFdoZW4gc3VjaCBhIG5vdGlmaWNhdGlvbgotICogICAgICBvY2N1cnMsIHRoZSBkcml2ZXIgd2lsbCB1c3VhbGx5IHRlbGwgdGhlIGhhcmR3YXJlIHdhdGNoZG9nCi0gKiAgICAgIHRoYXQgZXZlcnl0aGluZyBpcyBpbiBvcmRlciwgYW5kIHRoYXQgdGhlIHdhdGNoZG9nIHNob3VsZCB3YWl0Ci0gKiAgICAgIGZvciB5ZXQgYW5vdGhlciBsaXR0bGUgd2hpbGUgdG8gcmVzZXQgdGhlIHN5c3RlbS4KLSAqICAgICAgSWYgdXNlcnNwYWNlIGZhaWxzIChSQU0gZXJyb3IsIGtlcm5lbCBidWcsIHdoYXRldmVyKSwgdGhlCi0gKiAgICAgIG5vdGlmaWNhdGlvbnMgY2Vhc2UgdG8gb2NjdXIsIGFuZCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgd2lsbAotICogICAgICByZXNldCB0aGUgc3lzdGVtIChjYXVzaW5nIGEgcmVib290KSBhZnRlciB0aGUgdGltZW91dCBvY2N1cnMuCisgKglVc3VhbGx5IGEgdXNlcnNwYWNlIGRhZW1vbiB3aWxsIG5vdGlmeSB0aGUga2VybmVsIFdEVCBkcml2ZXIKKyAqCXZpYSB0aGUgL2Rldi93YXRjaGRvZyBzcGVjaWFsIGRldmljZSBmaWxlIHRoYXQgdXNlcnNwYWNlIGlzCisgKglzdGlsbCBhbGl2ZSwgYXQgcmVndWxhciBpbnRlcnZhbHMuICBXaGVuIHN1Y2ggYSBub3RpZmljYXRpb24KKyAqCW9jY3VycywgdGhlIGRyaXZlciB3aWxsIHVzdWFsbHkgdGVsbCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cKKyAqCXRoYXQgZXZlcnl0aGluZyBpcyBpbiBvcmRlciwgYW5kIHRoYXQgdGhlIHdhdGNoZG9nIHNob3VsZCB3YWl0CisgKglmb3IgeWV0IGFub3RoZXIgbGl0dGxlIHdoaWxlIHRvIHJlc2V0IHRoZSBzeXN0ZW0uCisgKglJZiB1c2Vyc3BhY2UgZmFpbHMgKFJBTSBlcnJvciwga2VybmVsIGJ1Zywgd2hhdGV2ZXIpLCB0aGUKKyAqCW5vdGlmaWNhdGlvbnMgY2Vhc2UgdG8gb2NjdXIsIGFuZCB0aGUgaGFyZHdhcmUgd2F0Y2hkb2cgd2lsbAorICoJcmVzZXQgdGhlIHN5c3RlbSAoY2F1c2luZyBhIHJlYm9vdCkgYWZ0ZXIgdGhlIHRpbWVvdXQgb2NjdXJzLgogICoKICAqIENyZWF0ZSBkZXZpY2Ugd2l0aDoKICAqICBta25vZCAvZGV2L3dhdGNoZG9nIGMgMTAgMTMwCkBAIC00ODUsNyArNDg1LDcgQEAKIAljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CiAJCW5ld190aW1lb3V0ID0gdGltZW91dDsKIAkJaWYgKHVuaXQgPT0gVU5JVF9NSU5VVEUpCi0JCQkgIG5ld190aW1lb3V0ICo9IDYwOworCQkJbmV3X3RpbWVvdXQgKj0gNjA7CiAJCXJldHVybiBwdXRfdXNlcihuZXdfdGltZW91dCwgdWFyZy5pKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc29mdGRvZy5jIGIvZHJpdmVycy93YXRjaGRvZy9zb2Z0ZG9nLmMKaW5kZXggNzIwNGY5Ni4uZWJjYzljZSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zb2Z0ZG9nLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zb2Z0ZG9nLmMKQEAgLTEsNyArMSw4IEBACiAvKgogICoJU29mdERvZwkwLjA3OglBIFNvZnR3YXJlIFdhdGNoZG9nIERldmljZQogICoKLSAqCShjKSBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCShjKSBDb3B5cmlnaHQgMTk5NiBBbGFuIENveCA8YWxhbkBseG9yZ3VrLnVrdXUub3JnLnVrPiwKKyAqCQkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTMyLDcgKzMzLDcgQEAKICAqCUFkZGVkIFdESU9DX0dFVFRJTUVPVVQgYW5kIFdESU9DX1NFVFRJTU9VVC4KICAqCiAgKiAgMjAwMjA1MzAgSm9lbCBCZWNrZXIgPGpvZWwuYmVja2VyQG9yYWNsZS5jb20+Ci0gKiAgCUFkZGVkIE1hdHQgRG9tc2NoJ3Mgbm93YXlvdXQgbW9kdWxlIG9wdGlvbi4KKyAqCUFkZGVkIE1hdHQgRG9tc2NoJ3Mgbm93YXlvdXQgbW9kdWxlIG9wdGlvbi4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N2hmX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy93ODM2OTdoZl93ZHQuYwppbmRleCAzYzdhYTQxLi5hOWM3ZjM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N2hmX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMKQEAgLTQ2Miw2ICs0NjIsNyBAQAogbW9kdWxlX2V4aXQod2R0X2V4aXQpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXJjdXMgSnVua2VyIDxqdW5rZXJAYW5kdXJhcy5kZT4sIFNhbXVlbCBUYXJkaWV1IDxzYW1AcmZjMTE0OS5uZXQ+Iik7CitNT0RVTEVfQVVUSE9SKCJNYXJjdXMgSnVua2VyIDxqdW5rZXJAYW5kdXJhcy5kZT4sICIKKwkJIlNhbXVlbCBUYXJkaWV1IDxzYW1AcmZjMTE0OS5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oInc4MzY5N2hmL2hnIFdEVCBkcml2ZXIiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3dWdfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N3VnX3dkdC5jCmluZGV4IGFkYThhZDguLjg4M2I1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3dWdfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ODM2OTd1Z193ZHQuYwpAQCAtMiw3ICsyLDcgQEAKICAqCXc4MzY5N3VnL3VmIFdEVCBkcml2ZXIKICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDggRmxlbW1pbmcgRnJhbnNlbiA8ZmZAbnJ2aXNzaW5nLm5ldD4KLSAqICAgICAgICAgICAgICByZXVzZWQgb3JpZ2luYWwgY29kZSB0byBzdXBvcHJ0IHc4MzY5N3VnL3VmLgorICoJCXJldXNlZCBvcmlnaW5hbCBjb2RlIHRvIHN1cHBvcnQgdzgzNjk3dWcvdWYuCiAgKgogICoJQmFzZWQgb24gdzgzNjI3aGZfd2R0LmMgd2hpY2ggaXMgYmFzZWQgb24gYWR2YW50ZWNod2R0LmMKICAqCXdoaWNoIGlzIGJhc2VkIG9uIHdkdC5jLgpAQCAtNzksNyArNzksNyBAQAogCQkJCQkJCShzYW1lIGFzIEVGRVIpICovCiAjZGVmaW5lIFdEVF9FRkRSIChXRFRfRUZJUisxKSAvKiBFeHRlbmRlZCBGdW5jdGlvbiBEYXRhIFJlZ2lzdGVyICovCiAKLXN0YXRpYyB2b2lkIHc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3Rlcih2b2lkKQorc3RhdGljIGludCB3ODM2OTd1Z19zZWxlY3Rfd2RfcmVnaXN0ZXIodm9pZCkKIHsKIAl1bnNpZ25lZCBjaGFyIGM7CiAJdW5zaWduZWQgY2hhciB2ZXJzaW9uOwpAQCAtMTAyLDcgKzEwMiw3IEBACiAKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyBXODM2OTdVRy9VRiBjb3VsZCBiZSBmb3VuZFxuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJb3V0Yl9wKDB4MDcsIFdEVF9FRkVSKTsgLyogcG9pbnQgdG8gbG9naWNhbCBkZXZpY2UgbnVtYmVyIHJlZyAqLwpAQCAtMTEwLDYgKzExMCw4IEBACiAJb3V0Yl9wKDB4MzAsIFdEVF9FRkVSKTsgLyogc2VsZWN0IENSMzAgKi8KIAljID0gaW5iX3AoV0RUX0VGRFIpOwogCW91dGJfcChjIHx8IDB4MDEsIFdEVF9FRkRSKTsgLyogc2V0IGJpdCAwIHRvIGFjdGl2YXRlIEdQSU8yICovCisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdzgzNjk3dWdfdW5zZWxlY3Rfd2RfcmVnaXN0ZXIodm9pZCkKQEAgLTExNywxMSArMTE5LDE0IEBACiAJb3V0Yl9wKDB4QUEsIFdEVF9FRkVSKTsgLyogTGVhdmUgZXh0ZW5kZWQgZnVuY3Rpb24gbW9kZSAqLwogfQogCi1zdGF0aWMgdm9pZCB3ODM2OTd1Z19pbml0KHZvaWQpCitzdGF0aWMgaW50IHc4MzY5N3VnX2luaXQodm9pZCkKIHsKKwlpbnQgcmV0OwogCXVuc2lnbmVkIGNoYXIgdDsKIAotCXc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3RlcigpOworCXJldCA9IHc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3RlcigpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKIAogCW91dGJfcCgweEY2LCBXRFRfRUZFUik7IC8qIFNlbGVjdCBDUkY2ICovCiAJdCA9IGluYl9wKFdEVF9FRkRSKTsgICAgLyogcmVhZCBDUkY2ICovCkBAIC0xMzcsMTMgKzE0MiwxNSBAQAogCW91dGJfcCh0LCBXRFRfRUZEUik7ICAgIC8qIFdyaXRlIGJhY2sgdG8gQ1JGNSAqLwogCiAJdzgzNjk3dWdfdW5zZWxlY3Rfd2RfcmVnaXN0ZXIoKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgd2R0X2N0cmwoaW50IHRpbWVvdXQpCiB7CiAJc3Bpbl9sb2NrKCZpb19sb2NrKTsKIAotCXc4MzY5N3VnX3NlbGVjdF93ZF9yZWdpc3RlcigpOworCWlmICh3ODM2OTd1Z19zZWxlY3Rfd2RfcmVnaXN0ZXIoKSA8IDApCisJCXJldHVybjsKIAogCW91dGJfcCgweEY0LCBXRFRfRUZFUik7ICAgIC8qIFNlbGVjdCBDUkY0ICovCiAJb3V0Yl9wKHRpbWVvdXQsIFdEVF9FRkRSKTsgLyogV3JpdGUgVGltZW91dCBjb3VudGVyIHRvIENSRjQgKi8KQEAgLTM0Nyw3ICszNTQsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl3ODM2OTd1Z19pbml0KCk7CisJcmV0ID0gdzgzNjk3dWdfaW5pdCgpOworCWlmIChyZXQgIT0gMCkKKwkJZ290byB1bnJlZ19yZWdpb25zOwogCiAJcmV0ID0gcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3ZHRfbm90aWZpZXIpOwogCWlmIChyZXQgIT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ODM5NzdmX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy93ODM5NzdmX3dkdC5jCmluZGV4IDI1MjVkYTUuLjA1NjAxODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJaWYgKHdkdF9zZXRfdGltZW91dChuZXdfdGltZW91dCkpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCXdkdF9rZWVwYWxpdmUoKTsKIAkJLyogRmFsbCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ZDUwMXAuaCBiL2RyaXZlcnMvd2F0Y2hkb2cvd2Q1MDFwLmgKaW5kZXggZGIzNDg1My4uMGUzYTQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ZDUwMXAuaAorKysgYi9kcml2ZXJzL3dhdGNoZG9nL3dkNTAxcC5oCkBAIC0xMSw5ICsxMSw5IEBACiAgKgogICoJaHR0cDovL3d3dy5jeW1ydS5uZXQKICAqCi0gKglUaGlzIGRyaXZlciBpcyBwcm92aWRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZAotICoJaGVyZWluIGJ5IHJlZmVyZW5jZS4gVGhlIGRyaXZlciBpcyBwcm92aWRlZCB3aXRob3V0IHdhcnJhbnR5IG9yCi0gKglzdXBwb3J0LgorICoJVGhpcyBkcml2ZXIgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICoJaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuIFRoZSBkcml2ZXIgaXMgcHJvdmlkZWQgd2l0aG91dAorICoJd2FycmFudHkgb3Igc3VwcG9ydC4KICAqCiAgKglSZWxlYXNlIDAuMDQuCiAgKgpAQCAtMzksMTMgKzM5LDEzIEBACiAvKiBwcm9ncmFtbWFibGUgb3V0cHV0czogKi8KICNkZWZpbmUgV0RUX1BST0dPVVQJCShpbysxNSkJLyogd3I9ZW5hYmxlLCByZD1kaXNhYmxlICovCiAKLQkJCQkJCQkJLyogRkFOIDUwMSA1MDAgKi8KLSNkZWZpbmUgV0RDX1NSX1dDQ1IJCTEJLyogQWN0aXZlIGxvdyAqLwkvKiAgWCAgIFggICBYICAqLwotI2RlZmluZSBXRENfU1JfVEdPT0QJCTIJCQkJLyogIFggICBYICAgLSAgKi8KLSNkZWZpbmUgV0RDX1NSX0lTT0kwCQk0CQkJCS8qICBYICAgWCAgIFggICovCi0jZGVmaW5lIFdEQ19TUl9JU0lJMQkJOAkJCQkvKiAgWCAgIFggICBYICAqLwotI2RlZmluZSBXRENfU1JfRkFOR09PRAkJMTYJCQkJLyogIFggICAtICAgLSAgKi8KLSNkZWZpbmUgV0RDX1NSX1BTVU9WRVIJCTMyCS8qIEFjdGl2ZSBsb3cgKi8JLyogIFggICBYICAgLSAgKi8KLSNkZWZpbmUgV0RDX1NSX1BTVVVORFIJCTY0CS8qIEFjdGl2ZSBsb3cgKi8JLyogIFggICBYICAgLSAgKi8KLSNkZWZpbmUgV0RDX1NSX0lSUQkJMTI4CS8qIEFjdGl2ZSBsb3cgKi8JLyogIFggICBYICAgWCAgKi8KKwkJCQkJCQkgLyogRkFOIDUwMSA1MDAgKi8KKyNkZWZpbmUgV0RDX1NSX1dDQ1IJCTEJLyogQWN0aXZlIGxvdyAqLyAvKiAgWCAgIFggICBYICAqLworI2RlZmluZSBXRENfU1JfVEdPT0QJCTIJCQkgLyogIFggICBYICAgLSAgKi8KKyNkZWZpbmUgV0RDX1NSX0lTT0kwCQk0CQkJIC8qICBYICAgWCAgIFggICovCisjZGVmaW5lIFdEQ19TUl9JU0lJMQkJOAkJCSAvKiAgWCAgIFggICBYICAqLworI2RlZmluZSBXRENfU1JfRkFOR09PRAkJMTYJCQkgLyogIFggICAtICAgLSAgKi8KKyNkZWZpbmUgV0RDX1NSX1BTVU9WRVIJCTMyCS8qIEFjdGl2ZSBsb3cgKi8gLyogIFggICBYICAgLSAgKi8KKyNkZWZpbmUgV0RDX1NSX1BTVVVORFIJCTY0CS8qIEFjdGl2ZSBsb3cgKi8gLyogIFggICBYICAgLSAgKi8KKyNkZWZpbmUgV0RDX1NSX0lSUQkJMTI4CS8qIEFjdGl2ZSBsb3cgKi8gLyogIFggICBYICAgWCAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0LmMKaW5kZXggZWRkYjkxOC4uM2JiZWZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3dkdC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqCUluZHVzdHJpYWwgQ29tcHV0ZXIgU291cmNlIFdEVDUwMC81MDEgZHJpdmVyCisgKglJbmR1c3RyaWFsIENvbXB1dGVyIFNvdXJjZSBXRFQ1MDEgZHJpdmVyCiAgKgogICoJKGMpIENvcHlyaWdodCAxOTk2LTE5OTcgQWxhbiBDb3ggPGFsYW5AbHhvcmd1ay51a3V1Lm9yZy51az4sCiAgKgkJCQkJCUFsbCBSaWdodHMgUmVzZXJ2ZWQuCkBAIC04MiwxNCArODIsMTYgQEAKIG1vZHVsZV9wYXJhbShpcnEsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIldEVCBpcnEgKGRlZmF1bHQ9MTEpIik7CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQogLyogU3VwcG9ydCBmb3IgdGhlIEZhbiBUYWNob21ldGVyIG9uIHRoZSBXRFQ1MDEtUCAqLwogc3RhdGljIGludCB0YWNob21ldGVyOwotCiBtb2R1bGVfcGFyYW0odGFjaG9tZXRlciwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModGFjaG9tZXRlciwKIAkJIldEVDUwMS1QIEZhbiBUYWNob21ldGVyIHN1cHBvcnQgKDA9ZGlzYWJsZSwgZGVmYXVsdD0wKSIpOwotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCisKK3N0YXRpYyBpbnQgdHlwZSA9IDUwMDsKK21vZHVsZV9wYXJhbSh0eXBlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0eXBlLAorCQkiV0RUNTAxLVAgQ2FyZCB0eXBlICg1MDAgb3IgNTAxICwgZGVmYXVsdD01MDApIik7CiAKIC8qCiAgKglQcm9ncmFtbWluZyBzdXBwb3J0CkBAIC0xNTgsNyArMTYwLDcgQEAKICAqCXJlbG9hZGluZyB0aGUgY2FzY2FkZSBjb3VudGVyLgogICovCiAKLXN0YXRpYyBpbnQgd2R0X3Bpbmcodm9pZCkKK3N0YXRpYyB2b2lkIHdkdF9waW5nKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0X2xvY2ssIGZsYWdzKTsKQEAgLTE2OSw3ICsxNzEsNiBAQAogCXdkdF9jdHJfbG9hZCgxLCB3ZF9oZWFydGJlYXQpOwkvKiBIZWFydGJlYXQgKi8KIAlvdXRiX3AoMCwgV0RUX0RDKTsJCS8qIEVuYWJsZSB3YXRjaGRvZyAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTkzLDcgKzE5NCw2IEBACiAKIC8qKgogICoJd2R0X2dldF9zdGF0dXM6Ci0gKglAc3RhdHVzOgkJdGhlIG5ldyBzdGF0dXMuCiAgKgogICoJRXh0cmFjdCB0aGUgc3RhdHVzIGluZm9ybWF0aW9uIGZyb20gYSBXRFQgd2F0Y2hkb2cgZGV2aWNlLiBUaGVyZSBhcmUKICAqCXNldmVyYWwgYm9hcmQgdmFyaWFudHMgc28gd2UgaGF2ZSB0byBrbm93IHdoaWNoIGJpdHMgYXJlIHZhbGlkLiBTb21lCkBAIC0yMDIsMzYgKzIwMiwzNSBAQAogICoJd2UgdGhlbiBtYXAgdGhlIGJpdHMgb250byB0aGUgc3RhdHVzIGlvY3RsIGZsYWdzLgogICovCiAKLXN0YXRpYyBpbnQgd2R0X2dldF9zdGF0dXMoaW50ICpzdGF0dXMpCitzdGF0aWMgaW50IHdkdF9nZXRfc3RhdHVzKHZvaWQpCiB7CiAJdW5zaWduZWQgY2hhciBuZXdfc3RhdHVzOworCWludCBzdGF0dXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmd2R0X2xvY2ssIGZsYWdzKTsKIAluZXdfc3RhdHVzID0gaW5iX3AoV0RUX1NSKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3ZHRfbG9jaywgZmxhZ3MpOwogCi0JKnN0YXR1cyA9IDA7CiAJaWYgKG5ld19zdGF0dXMgJiBXRENfU1JfSVNPSTApCi0JCSpzdGF0dXMgfD0gV0RJT0ZfRVhURVJOMTsKKwkJc3RhdHVzIHw9IFdESU9GX0VYVEVSTjE7CiAJaWYgKG5ld19zdGF0dXMgJiBXRENfU1JfSVNJSTEpCi0JCSpzdGF0dXMgfD0gV0RJT0ZfRVhURVJOMjsKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfVEdPT0QpKQotCQkqc3RhdHVzIHw9IFdESU9GX09WRVJIRUFUOwotCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfUFNVT1ZFUikpCi0JCSpzdGF0dXMgfD0gV0RJT0ZfUE9XRVJPVkVSOwotCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfUFNVVU5EUikpCi0JCSpzdGF0dXMgfD0gV0RJT0ZfUE9XRVJVTkRFUjsKLQlpZiAodGFjaG9tZXRlcikgewotCQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX0ZBTkdPT0QpKQotCQkJKnN0YXR1cyB8PSBXRElPRl9GQU5GQVVMVDsKKwkJc3RhdHVzIHw9IFdESU9GX0VYVEVSTjI7CisJaWYgKHR5cGUgPT0gNTAxKSB7CisJCWlmICghKG5ld19zdGF0dXMgJiBXRENfU1JfVEdPT0QpKQorCQkJc3RhdHVzIHw9IFdESU9GX09WRVJIRUFUOworCQlpZiAoIShuZXdfc3RhdHVzICYgV0RDX1NSX1BTVU9WRVIpKQorCQkJc3RhdHVzIHw9IFdESU9GX1BPV0VST1ZFUjsKKwkJaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9QU1VVTkRSKSkKKwkJCXN0YXR1cyB8PSBXRElPRl9QT1dFUlVOREVSOworCQlpZiAodGFjaG9tZXRlcikgeworCQkJaWYgKCEobmV3X3N0YXR1cyAmIFdEQ19TUl9GQU5HT09EKSkKKwkJCQlzdGF0dXMgfD0gV0RJT0ZfRkFORkFVTFQ7CisJCX0KIAl9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KLQlyZXR1cm4gMDsKKwlyZXR1cm4gc3RhdHVzOwogfQogCi0jaWZkZWYgQ09ORklHX1dEVF81MDEKIC8qKgogICoJd2R0X2dldF90ZW1wZXJhdHVyZToKICAqCkBAIC0yMzksNyArMjM4LDcgQEAKICAqCWZhcmVuaGVpdC4gSXQgd2FzIGRlc2lnbmVkIGJ5IGFuIGltcGVyaWFsIG1lYXN1cmVtZW50IGx1ZGRpdGUuCiAgKi8KIAotc3RhdGljIGludCB3ZHRfZ2V0X3RlbXBlcmF0dXJlKGludCAqdGVtcGVyYXR1cmUpCitzdGF0aWMgaW50IHdkdF9nZXRfdGVtcGVyYXR1cmUodm9pZCkKIHsKIAl1bnNpZ25lZCBzaG9ydCBjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNDcsMTAgKzI0NiwxOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ3ZHRfbG9jaywgZmxhZ3MpOwogCWMgPSBpbmJfcChXRFRfUlQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndkdF9sb2NrLCBmbGFncyk7Ci0JKnRlbXBlcmF0dXJlID0gKGMgKiAxMSAvIDE1KSArIDc7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIChjICogMTEgLyAxNSkgKyA3OwogfQotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCisKK3N0YXRpYyB2b2lkIHdkdF9kZWNvZGVfNTAxKGludCBzdGF0dXMpCit7CisJaWYgKCEoc3RhdHVzICYgV0RDX1NSX1RHT09EKSkKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiT3ZlcmhlYXQgYWxhcm0uKCVkKVxuIiwgaW5iX3AoV0RUX1JUKSk7CisJaWYgKCEoc3RhdHVzICYgV0RDX1NSX1BTVU9WRVIpKQorCQlwcmludGsoS0VSTl9DUklUICJQU1Ugb3ZlciB2b2x0YWdlLlxuIik7CisJaWYgKCEoc3RhdHVzICYgV0RDX1NSX1BTVVVORFIpKQorCQlwcmludGsoS0VSTl9DUklUICJQU1UgdW5kZXIgdm9sdGFnZS5cbiIpOworfQogCiAvKioKICAqCXdkdF9pbnRlcnJ1cHQ6CkBAIC0yNzUsMTggKzI4MiwxMyBAQAogCiAJcHJpbnRrKEtFUk5fQ1JJVCAiV0RUIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKIAotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JaWYgKCEoc3RhdHVzICYgV0RDX1NSX1RHT09EKSkKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiT3ZlcmhlYXQgYWxhcm0uKCVkKVxuIiwgaW5iX3AoV0RUX1JUKSk7Ci0JaWYgKCEoc3RhdHVzICYgV0RDX1NSX1BTVU9WRVIpKQotCQlwcmludGsoS0VSTl9DUklUICJQU1Ugb3ZlciB2b2x0YWdlLlxuIik7Ci0JaWYgKCEoc3RhdHVzICYgV0RDX1NSX1BTVVVORFIpKQotCQlwcmludGsoS0VSTl9DUklUICJQU1UgdW5kZXIgdm9sdGFnZS5cbiIpOwotCWlmICh0YWNob21ldGVyKSB7Ci0JCWlmICghKHN0YXR1cyAmIFdEQ19TUl9GQU5HT09EKSkKLQkJCXByaW50ayhLRVJOX0NSSVQgIlBvc3NpYmxlIGZhbiBmYXVsdC5cbiIpOworCWlmICh0eXBlID09IDUwMSkgeworCQl3ZHRfZGVjb2RlXzUwMShzdGF0dXMpOworCQlpZiAodGFjaG9tZXRlcikgeworCQkJaWYgKCEoc3RhdHVzICYgV0RDX1NSX0ZBTkdPT0QpKQorCQkJCXByaW50ayhLRVJOX0NSSVQgIlBvc3NpYmxlIGZhbiBmYXVsdC5cbiIpOworCQl9CiAJfQotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCiAJaWYgKCEoc3RhdHVzICYgV0RDX1NSX1dDQ1IpKSB7CiAjaWZkZWYgU09GVFdBUkVfUkVCT09UCiAjaWZkZWYgT05MWV9URVNUSU5HCkBAIC0zNjYsMTcgKzM2OCwxOCBAQAogCiAJLyogQWRkIG9wdGlvbnMgYWNjb3JkaW5nIHRvIHRoZSBjYXJkIHdlIGhhdmUgKi8KIAlpZGVudC5vcHRpb25zIHw9IChXRElPRl9FWFRFUk4xfFdESU9GX0VYVEVSTjIpOwotI2lmZGVmIENPTkZJR19XRFRfNTAxCi0JaWRlbnQub3B0aW9ucyB8PSAoV0RJT0ZfT1ZFUkhFQVR8V0RJT0ZfUE9XRVJVTkRFUnxXRElPRl9QT1dFUk9WRVIpOwotCWlmICh0YWNob21ldGVyKQotCQlpZGVudC5vcHRpb25zIHw9IFdESU9GX0ZBTkZBVUxUOwotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCisJaWYgKHR5cGUgPT0gNTAxKSB7CisJCWlkZW50Lm9wdGlvbnMgfD0gKFdESU9GX09WRVJIRUFUfFdESU9GX1BPV0VSVU5ERVJ8CisJCQkJCQkJV0RJT0ZfUE9XRVJPVkVSKTsKKwkJaWYgKHRhY2hvbWV0ZXIpCisJCQlpZGVudC5vcHRpb25zIHw9IFdESU9GX0ZBTkZBVUxUOworCX0KIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgogCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZpZGVudCwgc2l6ZW9mKGlkZW50KSkgPyAtRUZBVUxUIDogMDsKIAljYXNlIFdESU9DX0dFVFNUQVRVUzoKLQkJd2R0X2dldF9zdGF0dXMoJnN0YXR1cyk7CisJCXN0YXR1cyA9IHdkdF9nZXRfc3RhdHVzKCk7CiAJCXJldHVybiBwdXRfdXNlcihzdGF0dXMsIHApOwogCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKIAkJcmV0dXJuIHB1dF91c2VyKDAsIHApOwpAQCAtNDQ2LDcgKzQ0OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQogLyoqCiAgKgl3ZHRfdGVtcF9yZWFkOgogICoJQGZpbGU6IGZpbGUgaGFuZGxlIHRvIHRoZSB3YXRjaGRvZyBib2FyZApAQCAtNDYxLDEwICs0NjMsNyBAQAogc3RhdGljIHNzaXplX3Qgd2R0X3RlbXBfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwdHIpCiB7Ci0JaW50IHRlbXBlcmF0dXJlOwotCi0JaWYgKHdkdF9nZXRfdGVtcGVyYXR1cmUoJnRlbXBlcmF0dXJlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJaW50IHRlbXBlcmF0dXJlID0gd2R0X2dldF90ZW1wZXJhdHVyZSgpOwogCiAJaWYgKGNvcHlfdG9fdXNlcihidWYsICZ0ZW1wZXJhdHVyZSwgMSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtNDk3LDcgKzQ5Niw2IEBACiB7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KIAogLyoqCiAgKglub3RpZnlfc3lzOgpAQCAtNTM5LDcgKzUzNyw2IEBACiAJLmZvcHMJPSAmd2R0X2ZvcHMsCiB9OwogCi0jaWZkZWYgQ09ORklHX1dEVF81MDEKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdkdF90ZW1wX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLApAQCAtNTUzLDcgKzU1MCw2IEBACiAJLm5hbWUJPSAidGVtcGVyYXR1cmUiLAogCS5mb3BzCT0gJndkdF90ZW1wX2ZvcHMsCiB9OwotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCiAKIC8qCiAgKglUaGUgV0RUIGNhcmQgbmVlZHMgdG8gbGVhcm4gYWJvdXQgc29mdCBzaHV0ZG93bnMgaW4gb3JkZXIgdG8KQEAgLTU3Nyw5ICs1NzMsOCBAQAogc3RhdGljIHZvaWQgX19leGl0IHdkdF9leGl0KHZvaWQpCiB7CiAJbWlzY19kZXJlZ2lzdGVyKCZ3ZHRfbWlzY2Rldik7Ci0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQltaXNjX2RlcmVnaXN0ZXIoJnRlbXBfbWlzY2Rldik7Ci0jZW5kaWYgLyogQ09ORklHX1dEVF81MDEgKi8KKwlpZiAodHlwZSA9PSA1MDEpCisJCW1pc2NfZGVyZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKIAl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmd2R0X25vdGlmaWVyKTsKIAlmcmVlX2lycShpcnEsIE5VTEwpOwogCXJlbGVhc2VfcmVnaW9uKGlvLCA4KTsKQEAgLTU5NywxMiArNTkyLDE3IEBACiB7CiAJaW50IHJldDsKIAorCWlmICh0eXBlICE9IDUwMCAmJiB0eXBlICE9IDUwMSkgeworCQlwcmludGsoS0VSTl9FUlIgIndkdDogdW5rbm93biBjYXJkIHR5cGUgJyVkJy5cbiIsIHR5cGUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAkvKiBDaGVjayB0aGF0IHRoZSBoZWFydGJlYXQgdmFsdWUgaXMgd2l0aGluIGl0J3MgcmFuZ2U7CiAJICAgaWYgbm90IHJlc2V0IHRvIHRoZSBkZWZhdWx0ICovCiAJaWYgKHdkdF9zZXRfaGVhcnRiZWF0KGhlYXJ0YmVhdCkpIHsKIAkJd2R0X3NldF9oZWFydGJlYXQoV0RfVElNTyk7Ci0JCXByaW50ayhLRVJOX0lORk8gIndkdDogaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMCA8IGhlYXJ0YmVhdCA8IDY1NTM2LCB1c2luZyAlZFxuIiwKLQkJCVdEX1RJTU8pOworCQlwcmludGsoS0VSTl9JTkZPICJ3ZHQ6IGhlYXJ0YmVhdCB2YWx1ZSBtdXN0IGJlICIKKwkJCSIwIDwgaGVhcnRiZWF0IDwgNjU1MzYsIHVzaW5nICVkXG4iLCBXRF9USU1PKTsKIAl9CiAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCA4LCAid2R0NTAxcCIpKSB7CkBAIC02MjUsMTUgKzYyNSwxNCBAQAogCQlnb3RvIG91dGlycTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnRlbXBfbWlzY2Rldik7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJ3ZHQ6IGNhbm5vdCByZWdpc3RlciBtaXNjZGV2IG9uIG1pbm9yPSVkIChlcnI9JWQpXG4iLAotCQkJCQkJCVRFTVBfTUlOT1IsIHJldCk7Ci0JCWdvdG8gb3V0cmJ0OworCWlmICh0eXBlID09IDUwMSkgeworCQlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ0ZW1wX21pc2NkZXYpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIndkdDogY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgIgorCQkJCSJvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwgVEVNUF9NSU5PUiwgcmV0KTsKKwkJCWdvdG8gb3V0cmJ0OworCQl9CiAJfQotI2VuZGlmIC8qIENPTkZJR19XRFRfNTAxICovCiAKIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZ3ZHRfbWlzY2Rldik7CiAJaWYgKHJldCkgewpAQCAtNjQzLDI4ICs2NDIsMjUgQEAKIAkJZ290byBvdXRtaXNjOwogCX0KIAotCXJldCA9IDA7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiV0RUNTAwLzUwMS1QIGRyaXZlciAwLjEwIGF0IDB4JTA0eCAoSW50ZXJydXB0ICVkKS4gaGVhcnRiZWF0PSVkIHNlYyAobm93YXlvdXQ9JWQpXG4iLAorCXByaW50ayhLRVJOX0lORk8gIldEVDUwMC81MDEtUCBkcml2ZXIgMC4xMCAiCisJCSJhdCAweCUwNHggKEludGVycnVwdCAlZCkuIGhlYXJ0YmVhdD0lZCBzZWMgKG5vd2F5b3V0PSVkKVxuIiwKIAkJaW8sIGlycSwgaGVhcnRiZWF0LCBub3dheW91dCk7Ci0jaWZkZWYgQ09ORklHX1dEVF81MDEKLQlwcmludGsoS0VSTl9JTkZPICJ3ZHQ6IEZhbiBUYWNob21ldGVyIGlzICVzXG4iLAorCWlmICh0eXBlID09IDUwMSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAid2R0OiBGYW4gVGFjaG9tZXRlciBpcyAlc1xuIiwKIAkJCQkodGFjaG9tZXRlciA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIpKTsKLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogb3V0bWlzYzoKLSNpZmRlZiBDT05GSUdfV0RUXzUwMQotCW1pc2NfZGVyZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKKwlpZiAodHlwZSA9PSA1MDEpCisJCW1pc2NfZGVyZWdpc3RlcigmdGVtcF9taXNjZGV2KTsKIG91dHJidDoKLSNlbmRpZiAvKiBDT05GSUdfV0RUXzUwMSAqLwogCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3ZHRfbm90aWZpZXIpOwogb3V0aXJxOgogCWZyZWVfaXJxKGlycSwgTlVMTCk7CiBvdXRyZWc6CiAJcmVsZWFzZV9yZWdpb24oaW8sIDgpOwotCWdvdG8gb3V0Oworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIG1vZHVsZV9pbml0KHdkdF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvd2R0OTc3LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3dkdDk3Ny5jCmluZGV4IDYwZTI4ZDQuLjkwZWY3MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvd2R0OTc3LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ZHQ5NzcuYwpAQCAtNDAxLDcgKzQwMSw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlpZiAod2R0OTc3X3NldF90aW1lb3V0KG5ld190aW1lb3V0KSkKLQkJICAgIHJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJd2R0OTc3X2tlZXBhbGl2ZSgpOwogCQkvKiBGYWxsICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3pvcnJvL3pvcnJvLmMgYi9kcml2ZXJzL3pvcnJvL3pvcnJvLmMKaW5kZXggYTE1ODVkNi4uZDQ1ZmIzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy96b3Jyby96b3Jyby5jCisrKyBiL2RyaXZlcnMvem9ycm8vem9ycm8uYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAKICAgICAvKiBJbml0aWFsaXplIHRoZSBab3JybyBidXMgKi8KICAgICBJTklUX0xJU1RfSEVBRCgmem9ycm9fYnVzLmRldmljZXMpOwotICAgIHN0cmNweSh6b3Jyb19idXMuZGV2LmJ1c19pZCwgInpvcnJvIik7CisgICAgZGV2X3NldF9uYW1lKCZ6b3Jyb19idXMuZGV2LCAiem9ycm8iKTsKICAgICBlcnJvciA9IGRldmljZV9yZWdpc3Rlcigmem9ycm9fYnVzLmRldik7CiAgICAgaWYgKGVycm9yKSB7CiAJcHJfZXJyKCJab3JybzogRXJyb3IgcmVnaXN0ZXJpbmcgem9ycm9fYnVzXG4iKTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCWlmIChyZXF1ZXN0X3Jlc291cmNlKHpvcnJvX2ZpbmRfcGFyZW50X3Jlc291cmNlKHopLCAmei0+cmVzb3VyY2UpKQogCSAgICBwcl9lcnIoIlpvcnJvOiBBZGRyZXNzIHNwYWNlIGNvbGxpc2lvbiBvbiBkZXZpY2UgJXMgJXBSXG4iLAogCQkgICB6LT5uYW1lLCAmei0+cmVzb3VyY2UpOwotCXNwcmludGYoei0+ZGV2LmJ1c19pZCwgIiUwMngiLCBpKTsKKwlkZXZfc2V0X25hbWUoJnotPmRldiwgIiUwMngiLCBpKTsKIAl6LT5kZXYucGFyZW50ID0gJnpvcnJvX2J1cy5kZXY7CiAJei0+ZGV2LmJ1cyA9ICZ6b3Jyb19idXNfdHlwZTsKIAllcnJvciA9IGRldmljZV9yZWdpc3Rlcigmei0+ZGV2KTsKZGlmZiAtLWdpdCBhL2Zpcm13YXJlLzNjb20vdHlwaG9vbi5iaW4uaWhleCBiL2Zpcm13YXJlLzNjb20vdHlwaG9vbi5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2E4M2JlCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvM2NvbS90eXBob29uLmJpbi5paGV4CkBAIC0wLDAgKzEsMjgxOSBAQAorOjEwMDAwMDAwNTQ1OTUwNDg0RjRGNEUwMDAyMDAwMDAwMDkwMDAwMDBCNAorOjEwMDAxMDAwMDAwMEZGRkZDQjk5QjFENDRDQjhEMDRCMzIwMkQ0RUVFNAorOjEwMDAyMDAwNzM3RTBCMTM5QkMwQUVGNDQwMDEwMDAwRThGQzAwMDA5RgorOjEwMDAzMDAwMDAwMEZGRkYzOTAwMDBFQTA1MDAwMEVBMDQwMDAwRUFDMgorOjEwMDA0MDAwMDMwMDAwRUEwMjAwMDBFQTAxMDAwMEVBMzIwMjAwRUFDRQorOjEwMDA1MDAwQzUxNDAwRUEwNzAwMkRFOTBFMDBBMEUxMDAxMDBGRTEzMQorOjEwMDA2MDAwRDAyMDlGRTUxMkZGMkZFMUZFRkZGRkVBMDEwMDgwRTBCNAorOjEwMDA3MDAwMDQyMDgxRTQwMTAwNTBFMUZDRkZGRjFBMEVGMEEwRTEzMgorOjEwMDA4MDAwMDBBMEEwRTEwRUIwQTBFMTAwMDBBMEUzQTgxMDlGRTU1MQorOjEwMDA5MDAwMDAwMDgxRTVBNDEwOUZFNTAwMDA4MUU1MDExNkEwRTNDMgorOjEwMDBBMDAwMDAwMDkxRTUwMTAwODBFMzAwMDA4MUU1RDcwMEEwRTNCNgorOjEwMDBCMDAwMDBGMDIxRTE4OEQwOUZFNURCMDBBMEUzMDBGMDIxRTEyMgorOjEwMDBDMDAwN0NEMDlGRTVEMjAwQTBFMzAwRjAyMUUxNzREMDlGRTU1MQorOjEwMDBEMDAwRDEwMEEwRTMwMEYwMjFFMTZDRDA5RkU1OUIxNDAwRUI4MAorOjEwMDBFMDAwRDMwMEEwRTMwMEYwMjFFMTYwRDA5RkU1NjAwMDlGRTUzMAorOjEwMDBGMDAwNjAxMDlGRTU2MDIwOUZFNURCRkZGRkVCNUMwMDlGRTU2NAorOjEwMDEwMDAwNUMxMDlGRTUwMDIwQTBFM0Q3RkZGRkVCNTQwMDlGRTVDNAorOjEwMDExMDAwNTQxMDlGRTVENEZGRkZFQjBBMDBBMEUxMEJGMEEwRTEzMworOjEwMDEyMDAwRDMxMEEwRTMwMUYwMjFFMUQ0RkZGRkVCM0NBMDlGRTU1OQorOjEwMDEzMDAwMUFGRjJGRTFDNkZGRkZFQTE1MjFGRkZGMEMwMDEwMDA5OAorOjEwMDE0MDAwMUMwMDEwMDAzQzM4MDA4MEZDMzcwMDgwRkMzRjAwODAyMQorOjEwMDE1MDAwN0MzNDAwODA4MDBGMDAwMDgwMzAwMDgwQURERUFEREU5QQorOjEwMDE2MDAwQjBCQjAwMDAyNEFCMjA0MDQ4MjkwMDAwMjgwNTAwODBENworOjEwMDE3MDAwQkRCQTIxNDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBBOQorOjEwMDE4MDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDAwNTg1NzAwMDBDMgorOjEwMDE5MDAwODY0QjAwMDA2MDAxRkZGRkIwQjUwNzFDMTI0RDAwMjQyNAorOjEwMDFBMDAwMjg2ODAwMjgxRUQwMzgxQzEwNDkwNEYwN0JGRDI5NjhGRgorOjEwMDFCMDAwQzA0NjA4NjAwMDI4MTVEMDM4MDEwRDQ5NDAxODE5MjNBMQorOjEwMDFDMDAwREIwMUMwMTg0MTZCODAyOTBDRDIwMTMxNDE2MzI4NjhFMgorOjEwMDFEMDAwQzE2OUMwNDYyOTYwMzkwNzQxNjAwNDYyQzc2MkIwQkM4QQorOjEwMDFFMDAwMDhCQzE4NDcyMDFDRkFFN0U4MTcwMDgwRUUwNTAwMDA1RAorOjEwMDFGMDAwQTAxQzAwODAwMjQ5MEE2OEMwNDZDMjYxMDg2MDcwNDdCRQorOjEwMDIwMDAwRTgxNzAwODA3MDQ3MDAwMDcwNDcwMDAwNzA0NzAwMDA0QQorOjEwMDIxMDAwMDAwMDBGRTEwMDEwQTBFMUMwMTA4MUUzMDFGMDIxRTEzNgorOjEwMDIyMDAwMUVGRjJGRTEwMEYwMjFFMTFFRkYyRkUxMDAwMDBGRTE5MgorOjEwMDIzMDAwQzAwMDgwRTMwMEYwMjFFMTFFRkYyRkUxMDAwMDBGRTE4QworOjEwMDI0MDAwQzAwMEMwRTMwMEYwMjFFMTFFRkYyRkUxMDAwMDBGRTEzQworOjEwMDI1MDAwNDAwMDgwRTMwMEYwMjFFMTFFRkYyRkUxMDAwMDBGRTFFQworOjEwMDI2MDAwODAwMDEwRTM4MDAwODBFMzAwRjAyMUUxMDAwMDAwMTIzNAorOjEwMDI3MDAwMUVGRjJGRTEwMDAwNTBFMzAwMDAwRkUxODAwMEMwMTNEQgorOjEwMDI4MDAwMDBGMDIxRTExRUZGMkZFMTAwMDAwRkUxODAwMEMwRTMzQworOjEwMDI5MDAwMDBGMDIxRTExRUZGMkZFMTkxMDAwMEUwMUVGRjJGRTFBMQorOjEwMDJBMDAwMDEyMDgwRTAwMTAwODBFMDFFRkYyRkUxODBCNTA4NEZCMworOjEwMDJCMDAwNjQyODA0RDM2NDIwMzg2MzAwMjBDMDQzMDNFMDM4NjMxQgorOjEwMDJDMDAwMDQ0OTA1RjAwMUZCNzg2M0I4NjM4MEJDMDhCQzE4NDc5QgorOjEwMDJEMDAwNjgwRTAwODA4ODEzMDAwMDgwQjQxMDRCMDAyMjFGNkI1MgorOjEwMDJFMDAwNjQyRjAzRDIwOTY4MDk2ODQ5MDgwMkQyMTAxQzgwQkMzNworOjEwMDJGMDAwNzA0NzE5MUNEQjZCNEY2QkJCNDIwNUQyNDA2ODAwMDQ5MgorOjEwMDMwMDAwMDAwQzE4MThDODYzRjFFNzQxNjgwNTRCMTk0MzQxNjBCOAorOjEwMDMxMDAwMDQ0OEMxNkIwMTMxQzE2MzAyMjBFOEU3NjgwRTAwODAyOAorOjEwMDMyMDAwMDAwMDAwODAwQzJCMDA4MDkwQjUwNzFDMTU0QzAwMjBBRAorOjEwMDMzMDAwMjE2QjY0MjkwQkQyQjk2RTQ5MDgwOEQzMjE2Q0EyNkJEQQorOjEwMDM0MDAwOTE0MjA3RDJGQTFEMzkzMjUyOEI4OTE4MjE2NDkwQkMzMAorOjEwMDM1MDAwMDhCQzE4NDc3ODZBMzk2QkMwNDY0ODYyMzg2QjAyRjBBRgorOjEwMDM2MDAwMkRGRTM4MUMwMkYwRThGQTAxMjBCQjIzMUIwMUUxMTgyNgorOjEwMDM3MDAwQzg3MzA1NDkwQTZDMTIxODBBNjQwNDQ5OEE2RDEyMTg3OAorOjEwMDM4MDAwOEE2NUU0RTc2ODBFMDA4MDBDMkIwMDgwQTQyQTAwODBCOAorOjEwMDM5MDAwODBCNDBBNDhDMDZEMDIyMzE4NDAwOTRBMDAyMTAwMjg5MQorOjEwMDNBMDAwMDNEMEQxNjMxMTY0ODBCQzcwNDcwNjQ4MDc2ODdCMUM4QQorOjEwMDNCMDAwMDM2MDBBMkZGN0QzMDE2MEYzRTcwMDAwQTQyQTAwODA0RQorOjEwMDNDMDAwNjgwRTAwODBFMDAxMDA4MDcwNDcwMjA0MTIwQzAwMENFRgorOjEwMDNEMDAwMTAxODBBMDQxMjBDMDkwQzUxMTgwODE4MDEwQzA1RDA0OQorOjEwMDNFMDAwMDEwNDA5MEMwMDBDMDgxODAxMENGOUQxMDAwNDAwMENFMAorOjEwMDNGMDAwNzA0NzgwQjQwMDIyMDAyOTE4RDA0RjA4N0IxRTAwMkZDMAorOjEwMDQwMDAwMDZEMDA3ODhCQTE4MDIzMDFGMUMwMTNCMDAyRkY4RDExNAorOjEwMDQxMDAwNDkwODAzRDMwMDg4MDAwNjAwMEU4MjE4MTAwQzA1RDA4RQorOjEwMDQyMDAwMTAwNDAwMEMxMTBDNDIxODEwMENGOUQxMTAwNDAwMEMyRgorOjEwMDQzMDAwODBCQzcwNDc4MEI1ODM4OUM3ODlGQjE4MDc4QUZCMTg4MQorOjEwMDQ0MDAwNDc4QUZCMTg0MDdBMDAwMkM3MTgzODBDMDVEMDM4MDREOAorOjEwMDQ1MDAwMDAwQzNCMENDNzE4MzgwQ0Y5RDEwODFDMTExQ0ZGRjcxNQorOjEwMDQ2MDAwQzhGRjAxMUMzODFDRkZGN0IwRkY4MEJDMDhCQzE4NDc1MAorOjEwMDQ3MDAwOTBCNTAyMjM4MjY4MUE0MDAwMjcwMDJBMEZEMDBBNEE0QQorOjEwMDQ4MDAwOTM2OTAxMzM5MzYxMEE2ODhCNjg5QTE4MDA2ODFDMTg5NQorOjEwMDQ5MDAwNTc4MTA5NjkxMDFDRkZGN0FDRkZDMDQzNjA4MTM4MUMwRAorOjEwMDRBMDAwOTBCQzA4QkMxODQ3MDAwMDBDMkIwMDgwOTBCNTA0MjNCQQorOjEwMDRCMDAwODI2ODFBNDAwMDI3MDAyQTExRDA0QTY4NTIwOTBFRDNEOAorOjEwMDRDMDAwMDk0QTEzNkEwMTMzMTM2MkNCNjgwMjY4OUMxODAxMjMzRQorOjEwMDREMDAwOUIwNzA4M0ExQTQzMTI2ODAwRjAyRUY4MjA4MjM4MUM1NQorOjEwMDRFMDAwOTBCQzA4QkMxODQ3MDAwMDBDMkIwMDgwOTBCNTgwMjNGRQorOjEwMDRGMDAwODI2ODFBNDAwMDI0MDAyQTE1RDA0QTY4OTIwOTEyRDM1MworOjEwMDUwMDAwMEI0QUQzNjkwMTMzRDM2MUNCNjgwMjY4OUYxODAxMjM3QQorOjEwMDUxMDAwOUIwNzA4M0ExQTQzMTI2ODAwRjAwRUY4MDAyODAwRDEzMQorOjEwMDUyMDAwMDQ0OEMwNDZGODgwMjAxQzkwQkMwOEJDMTg0NzAwMDA1NgorOjEwMDUzMDAwMEMyQjAwODBGRkZGMDAwMEIwQjUxNDFDMDUxQzBGMUMyNQorOjEwMDU0MDAwMzg2OUI5Njg0MTE4Mzg2OEZGRjc1M0ZGQzA0MzAxMDRBMAorOjEwMDU1MDAwMDkwQzIwMUNGRkY3MzlGRjA0MUNCODY4Nzk2OTQwMThBMgorOjEwMDU2MDAwNjk2ODg4NDIwQ0QyMkE2ODEyMTgwOTFBMTAxQzAwRjAxNworOjEwMDU3MDAwMDVGOUMwNDMwMTA0MDkwQzIwMUNGRkY3MjZGRjA0MUNFOQorOjEwMDU4MDAwRTA0MzAwMDQwMDBDQjBCQzA4QkMxODQ3ODBCNTA3MUM1MQorOjEwMDU5MDAwQjg2QkMwMDgxQUQzQjg2QUY5NkI0MDE4Nzk2QzAwRjBEMAorOjEwMDVBMDAwRURGOEMwNDMwMTA0MDkwQzBBNDgwN0QwMjAyM0I5NjlCQgorOjEwMDVCMDAwMTk0M0I5NjEwMTZCMDEzMTAxNjMwN0UwRkYyMzAxMzM4NgorOjEwMDVDMDAwQjk2OTE5NDNCOTYxNDE2QTAxMzE0MTYyMDAyMDgwQkNCNworOjEwMDVEMDAwMDhCQzE4NDcwQzJCMDA4MDgwQjUwNzFDQjg2QjQxMDk3QworOjEwMDVFMDAwMUNEM0MwMDgxQUQzRjgxRDM5MzAwMDdCMDYyODE1RDE1QQorOjEwMDVGMDAwMzgxQzAwRjA1M0Y4MDExQzBBNDgwN0QwNDAyM0I5NjlBMQorOjEwMDYwMDAwMTk0M0I5NjE4MTZCMDEzMTgxNjMwN0UwMDEyMzlCMDJDQQorOjEwMDYxMDAwQjk2OTE5NDNCOTYxQzE2QTAxMzFDMTYyMDAyMDgwQkM2NgorOjEwMDYyMDAwMDhCQzE4NDcwQzJCMDA4MEIwQjUwNzFDQjg2QjgxMDlCQgorOjEwMDYzMDAwMkNEM0MwMDgyQUQzRjgxRDM5MzAwMDdCMTEyODI1RDFDRQorOjEwMDY0MDAwQjg2QTM5NkM0MDE4MDEyMzlCMDcwNjMwMTg0MzAwNjhDQworOjEwMDY1MDAwMDUwNDJEMEMwRjRDMTFEMDM4MUMwMEYwMUZGODAwMjg5OQorOjEwMDY2MDAwMENEMEE4NDIwMkQxMEM0Qjk4NDIwN0QwODAyM0I4NjkyNQorOjEwMDY3MDAwMTg0M0I4NjE2MDZCMDEzMDYwNjMwN0UwMDEyMzVCMDJERgorOjEwMDY4MDAwQjg2OTE4NDNCODYxQTA2QTAxMzBBMDYyMDAyMEIwQkMwQworOjEwMDY5MDAwMDhCQzE4NDcwQzJCMDA4MEZGRkYwMDAwRjBCNUZGQjAyRQorOjEwMDZBMDAwOTlCMDA0MUNFMDZCNjE2QzA5MTgwM0FBODUxOEEzNkE1MQorOjEwMDZCMDAwMDAyMDhBMDgwMTMyOTc5MjA3RDA4MjAwOUY1ODAzQUUyQgorOjEwMDZDMDAwQjc1MDk3OUEwMTMwODI0MkY3RDg2MDZBMDEyMzlCMDc5RQorOjEwMDZEMDAwMDQzMDE4NDMwMDY4QzA0NjAyOTAwMkFGM0Y4ODAzQTg2OAorOjEwMDZFMDAwRkZGNzg3RkVDMDQzMDEwNDA5MEMzODFDRkZGNzZERkVCRAorOjEwMDZGMDAwMDcxQ0UwNkJBMTZDNDAxODYxNkEwMTIzOUIwNzA4MzE1RAorOjEwMDcwMDAwMTk0MzA5NjhDMDQ2MDE5MTAxQTkwOTg4MDEzMTg4NDI0RAorOjEwMDcxMDAwMENEMkEyNkExMjE4MDkxQTEwMUMwMEYwMkZGOEMwNDM1QworOjEwMDcyMDAwMDEwNDA5MEMzODFDRkZGNzUwRkUwNzFDQTg4OUU5ODk1MQorOjEwMDczMDAwMDgxODI5OEEwODE4Njk4QTA4MTg2OTdBMDkwMjA4MThBNQorOjEwMDc0MDAwQTE2QzYyNkM4OTFBMEEwNDEyMEMxMTAyMTIwQTExNDM3QworOjEwMDc1MDAwMDkwNDA5MEMwOTE4MDgwQzA1RDAwODA0MDAwQzA5MEM0MAorOjEwMDc2MDAwNDExODA4MENGOUQxMzgxQ0ZGRjcyRkZFQzA0MzAwMDRENAorOjEwMDc3MDAwMDAwQzdGQjAxOUIwRjBCQzA4QkMxODQ3QjBCNDAwMjIyMAorOjEwMDc4MDAwMDAyOTJFRDA4MzA3OUIwRkRDMDA0NzE4MDQyNUVGMUJBMAorOjEwMDc5MDAwQkYwN0JGMEZGRjAwODAwODgwMDA1OTE4MDMzMTg5MDg4OAorOjEwMDdBMDAwNEQxRTAyQzhFMTQwQTE0MDZCMUUwMDJEMDlEMDBDMDQ3MworOjEwMDdCMDAwMjQwQ0EyMTgwOTBDOEExODAyQzgxQzFDMDEzQjAwMkMyRQorOjEwMDdDMDAwRjVEMUI5NDAwODFDRjg0MDAxMDQwOTBDODkxODAwMEM0NworOjEwMDdEMDAwNDIxODEwMEMwNUQwMTAwNDAwMEMxMTBDNDIxODEwMEMxQgorOjEwMDdFMDAwRjlEMTEwMDQwMDBDQjBCQzcwNDcwMDAwOTBCNDAwMjA5OAorOjEwMDdGMDAwMDEyNzExNDk0MjAwMTIxOEQyMDA1MzE4OUM2ODAxMjNBNgorOjEwMDgwMDAwOUIwNzIzNDMxQjY4MUIwMzFCMEI4QTU4MTIwMzEyMEIwNQorOjEwMDgxMDAwOTM0MjBDRDEwMTMwMDQyOEVDRDMwODQ4QzA2QTAxMDM4QworOjEwMDgyMDAwMDkwQjA3NDgwMDZGMDAwMzAwMEI4MTQyMDJEMDM4MUNGRgorOjEwMDgzMDAwOTBCQzcwNDcwMDIwRkJFN0E4MDMwMDgwMDA0MDE0NDBGNAorOjEwMDg0MDAwNjgwRTAwODA5OEI0MTQ0QUMwNDYwMDkyODMwMDEzNDg5MgorOjEwMDg1MDAwQzA1ODA3MDMzRjBCMTI0OEMwNTgwMjAzMTIwQjExNDgzRgorOjEwMDg2MDAwQzA1ODAwMDMwMDBCMTA0Q0U0NTgwMTIzOUIwNzIzNDM5RQorOjEwMDg3MDAwMUI2ODlCMDBDQzAwMDEyMTk4NDIwMUQxMDgxQzA5RTBCMworOjEwMDg4MDAwOTg0MjAzRDkxMDFBREExQjgwMTgwMEUwMTgxQTg0NDIyMworOjEwMDg5MDAwRjREMzAwMjA5OEJDNzA0NzU1NTU1NTU1MjAwNDAwODA2RQorOjEwMDhBMDAwMjgwNDAwODAwODA0MDA4MDE4MDQwMDgwODBCNDEzMDQyOQorOjEwMDhCMDAwMDBEMDAxM0E4MDAwMEIxQzEzNDkwRjU4QzA0NjNCNjAyMgorOjEwMDhDMDAwMEI1OEMwNDY1QTYwMEE1ODA4MzIxMDRCMUI1ODlBNDJCRgorOjEwMDhEMDAwMDFEMzBGNEExMjU4MEY0QjFGNTgwMTIzOUIwNzNCNDM2QworOjEwMDhFMDAwMUI2ODlCMDAxNzAzM0YwQjlGNDIwNkQxMEE0OEMxNjg1MworOjEwMDhGMDAwMDEzMUMxNjAwMTIwODBCQzcwNDcwODRCMUI1OEMwNDZDNQorOjEwMDkwMDAwMUE2MDBBNTAwMDIwRjZFNzA4MDQwMDgwMjgwNDAwODBERQorOjEwMDkxMDAwMjAwNDAwODAxODA0MDA4MEEwODIyMDQwMTAwNDAwODA4MQorOjEwMDkyMDAwRkY1RjJERTk0OEZFRkZFQjAxQjZBMEUzMDFCMThCRTJDQQorOjEwMDkzMDAwMDI4QUEwRTMwMTdBQTBFMzAxQTlBMEUzMDE1NkEwRTNBMworOjEwMDk0MDAwQzg2MDlGRTVDODkwOUZFNTE0NDA5QkU1MDAwMDU0RTMxNAorOjEwMDk1MDAwMkMwMDAwMEEwMzBBMTRFMzExMDAwMDBBMEMwMDk2RTVCQgorOjEwMDk2MDAwMDAwMDUwRTMyMTAwMDAwQTAxMEExNEUzMDUwMDAwMEExOAorOjEwMDk3MDAwMUMwMDk2RTUwMTBBQzBFMzFDMDA4NkU1MUMwMDg1RTUyNQorOjEwMDk4MDAwMTQ3MDg1RTUwNjAwMDBFQTAyMEExNEUzMDQwMDAwMEE3OAorOjEwMDk5MDAwMUMwMDk2RTUwMjBBQzBFMzFDMDA4NkU1MUMwMDg1RTUwNAorOjEwMDlBMDAwMTQ4MDg1RTUwMTA5MTRFMzA0MDAwMDBBMUMwMDk2RTVBMworOjEwMDlCMDAwMDEwOUMwRTMxQzAwODZFNTFDMDA4NUU1MTRBMDg1RTU1RgorOjEwMDlDMDAwMDIwMDE0RTM0MDAwMDAxQjAxMDAxNEUzNTQwMDAwMUI2QworOjEwMDlEMDAwMDIwQjE0RTM2NzAwMDAxQjAxMEIxNEUzMjAwMDAwMUI1MworOjEwMDlFMDAwMTgwMDk5RTUwMTAwODBFMjE4MDA4OUU1RDVGRkZGRUFDQgorOjEwMDlGMDAwMUMwMDk2RTUwMTBBQzBFMzFDMDA4NkU1MUMwMDg1RTVBNQorOjEwMEEwMDAwMTQ3MDg1RTVFMUZGRkZFQUZGNUZCREU4MDRGMDVFRTJGOAorOjEwMEExMDAwNjgwRTAwODAwODgzMjA0MDEwMTAxRkU1MTQzMDkxRTUxNworOjEwMEEyMDAwMDAyMEMzRTExNDIwODFFNTAxMTZBMEUzMEMyMDgxRTUzQworOjEwMEEzMDAwMEIxMkEwRTMwMDAwODFFNTE4MTA5RkU1QjAyNEQxRTE3RQorOjEwMEE0MDAwMDEyMDgyRTJCMDI0QzFFMTNDMjA5MUU1MDAwMDgyRTE3NgorOjEwMEE1MDAwM0MwMDgxRTUxRUZGMkZFMUEwODIyMDQwRkZGRkZGRUE1RQorOjEwMEE2MDAwRkVGRkZGRUEwMTBCQTBFMzAxMTZBMEUzMTQwMDgxRTVGRAorOjEwMEE3MDAwMDAxQTgxRTEyNDIwOTFFNTcwMDAxRkU1MDAwMDAwMDBDQworOjEwMEE4MDAwMjQyMDgwRTUyODEwOTFFNTAwMDAwMDAwMjgxMDgwRTU3MgorOjEwMEE5MDAwMkMyMDkwRTUwMTIwODJFMjJDMjA4MEU1M0YwMDAxRTIzRAorOjEwMEFBMDAwM0YwMDUwRTMxRUZGMkYxMTE4MDA5RkU1MDAxMDkwRTU1NgorOjEwMEFCMDAwMDExMDgxRTIwMDEwODBFNTAyMThBMEUzMEIwMkEwRTMyMAorOjEwMEFDMDAwMDAxMDgwRTUxRUZGMkZFMTMwMDQwMDgwMDEwNkEwRTM0NgorOjEwMEFEMDAwMDEwMTgwRTIwMDEwOTBFNTAxMDgxMUUzMEIxMEEwRTM5MgorOjEwMEFFMDAwMDIxOTgxRTIwNTAwMDAxQTAwMjA5MEU1NDIyOEIwRTFEOQorOjEwMEFGMDAwMDUwMDAwMUEwMDAwOTBFNTAyMEMxMEUzMDIwMDAwMEE1NQorOjEwMEIwMDAwMDYwN0EwRTM0QzExODBFNTAzMDAwMEVBMEMwMDlGRTUxNgorOjEwMEIxMDAwMDAwMDAwMDA0MDEwODBFNUZGRkZGRkVBRkVGRkZGRUE1MworOjEwMEIyMDAwMDAwMDAwODAwMTA2QTBFMzAxMDE4MEUyMDAxMDkwRTVEMgorOjEwMEIzMDAwMDEwODExRTMwQzEwQTBFMzAyMTk4MUUyMDUwMDAwMUE3QworOjEwMEI0MDAwMDAyMDkwRTU0MjI4QjBFMTA1MDAwMDFBMDAwMDkwRTU4MQorOjEwMEI1MDAwMDIwQzEwRTMwMjAwMDAwQTA2MDdBMEUzNEMxMTgwRTUzNgorOjEwMEI2MDAwMDMwMDAwRUE0QzAwMUZFNTAwMDAwMDAwNDAxMDgwRTU5MworOjEwMEI3MDAwRkZGRkZGRUFGRUZGRkZFQTAyMUJBMEUzMDEwNkEwRTM3RQorOjEwMEI4MDAwMTQxMDgwRTUxRUZGMkZFMTgwMjExRkU1MTQzMDkyRTU0RgorOjEwMEI5MDAwMDAwMDAwMDAwMDMwODBFNTFDMDA5MkU1MDAwMDAwMDAyRAorOjEwMEJBMDAwMDAwMDgxRTUwMDEwQTBFMzE0MTA4MkU1MDEwNkEwRTMzNworOjEwMEJCMDAwMUMxMDgyRTUwQzEwODBFNTFDMTA5MkU1MDAwMDAwMDA3RQorOjEwMEJDMDAwMUMxMDgwRTUxRUZGMkZFMUMwMjExRkU1MDAwMDAwMDA4MgorOjEwMEJEMDAwMUMxMDgyRTUwMTE2QTBFMzE0MDA4MkU1MEMwMDgxRTVGQgorOjEwMEJFMDAwMUMwMDkyRTUwMDAwMDAwMDFDMDA4MUU1MUVGRjJGRTFDMworOjEwMEJGMDAwODBCNTBGMUMzODFDMDBGMDE3RjgwMDI4MDJEMDM4MUNGNAorOjEwMEMwMDAwMDBGMDkyRjgwMDIwODBCQzA4QkMxODQ3ODBCNTBGMUM4QgorOjEwMEMxMDAwMzgxQzAwRjAwOUY4MDAyODAyRDAzODFDMDBGMDg0RjhENQorOjEwMEMyMDAwMDAyMDgwQkMwOEJDMTg0N0YwQjQwNzY4M0E3OEQyMDdBNworOjEwMEMzMDAwRDIwRjAwMjQwMDJBMDNEMEZGMjIwMTMyNDI2MDAwRTBEQworOjEwMEM0MDAwNDQ2MDNBN0I3QjdCMUIwMjFBNDM4MTJBMDhEMTAxMjMzMworOjEwMEM1MDAwNUIwMjQyNjgxQTQzNDI2MDA0MjJCRjE4ODI2MDAwRTBDRgorOjEwMEM2MDAwODQ2MDNBN0I3QjdCMUIwMjFBNDMwODJBMDZEMTA2MjM0OQorOjEwMEM3MDAwNDE2ODE5NDM0MTYwODE2ODBFMzEzQ0UwQzEyM0RCMDBDQgorOjEwMEM4MDAwOUE0MjAzRDE0MTY4MjQ0QjE5NDMzRUUwMjM0QjlBNDJEOAorOjEwMEM5MDAwMDREMTAxMjMxQjAzNDE2ODE5NDMzNkUwMTMwMjEyMEFGMQorOjEwMENBMDAwMTIwNjEyMEUxQTQzMTIwNDEyMEMyRTNBMUM0QjlBNDJEMAorOjEwMENCMDAwMkREODAxMjU0MjY4MTU0MzQ1NjBCQTdCRkI3QjFCMDI5QQorOjEwMENDMDAwMUE0MzE4NEI5QTQyMjJEMUZCMUQwOTMzNDRDQjlCMDc5MAorOjEwMENEMDAwREIwRURBNDA1QjQyMjAzMzlFNDAxNjQzMDMyRTE4RDFEMAorOjEwMENFMDAwMzk3RDdCN0QxQjAyMTk0MzA4MjkwN0QxMDQyMTI5NDM0MworOjEwMENGMDAwNDE2MDgxNjgxNjMxODE2MDAxMjEwQUUwQzEyM0RCMDA3NworOjEwMEQwMDAwOTk0MjA0RDEwMTIxODkwMzI5NDM0MTYwMDBFMDg0NjBCNAorOjEwMEQxMDAwMDAyMTA4MUNGMEJDNzA0NzAyNDAwMDAwODE4MDAwMDBFOAorOjEwMEQyMDAwQUUwNTAwMDBBQUFBMDAwMDgwQjQ0MjY4RDEwODNGRDNGMworOjEwMEQzMDAwMDE2ODgzNjg1OTE4MDIzOThGNzgzRjA3M0YwRjA1MkZFNAorOjEwMEQ0MDAwMDNEMURBMUQwRDMyQzI2MDA1RTBCRjAwREIxOUMzNjBCQworOjEwMEQ1MDAwMDgyMzFBNDM0MjYwOEE3ODEyMDcxMjBGOTIwMDAyNjEzOAorOjEwMEQ2MDAwMEE3OTRCNzkxQjAyMUE0MzEzMDIxMjBBMTIwNjEyMEU1OQorOjEwMEQ3MDAwMUE0MzEyMDQxMjBDNDI2MUNBN0EwNjJBMDNEMTEwMjNDNAorOjEwMEQ4MDAwNDI2ODFBNDMxMEUwMTEyQTAzRDEyMDIzNDI2ODFBNDMxMworOjEwMEQ5MDAwMEFFMDMzMkEwM0QxNDAyMzQyNjgxQTQzMDRFMDMyMkE4RQorOjEwMERBMDAwMDNEMTgwMjM0MjY4MUE0MzQyNjBDOTdBQzA0NjAxNzY2MworOjEwMERCMDAwODBCQzcwNDcwQTc4QzA0NjAyNjA0Qjc4MUIwMjFBNDMxOQorOjEwMERDMDAwMDI2MDhCNzgxQjA0MUE0MzAyNjBDOTc4MDkwNjExNDMzQworOjEwMEREMDAwMDE2MDcwNDc4MEI1MDcxQzQ4Njg4MDA5MjZEM0I4NkE0RgorOjEwMERFMDAwQzk2ODQwMTgwMTIzOUIwNzAyMzAxODQzMDA2ODAwMDRCQgorOjEwMERGMDAwMDAwQzExMjM5QjAyOTg0MjE4RDE3ODZBMzk2QkMwNDZDNworOjEwMEUwMDAwNDg2MjM4NkIwMkYwREFGODM4MUMwMUYwOTVGRDAxMjBEOQorOjEwMEUxMDAwMDc0OUMwNDZDODczMDc0OTRBNkMxMjE4NEE2NDA2NDkxNAorOjEwMEUyMDAwOEE2RDEyMTg4QTY1ODBCQzA4QkMxODQ3MDAyMEZBRTc1MgorOjEwMEUzMDAwMTgxQTAwODAwQzJCMDA4MEE0MkEwMDgwODEwNzE5RDA4QQorOjEwMEU0MDAwODAwODgwMDAwMTIzOUIwNzAxMUQxODQzMDA2ODE5NDM5NworOjEwMEU1MDAwMDk2ODAyMDIxMjBFMTIwNjAwMEFGRjIzMUIwNDE4NDA0MgorOjEwMEU2MDAwMTA0MzBBMEExMjA2MTIwRTEwNDMwOTAyMUIwQTE5NDAwNworOjEwMEU3MDAwMDg0MzcwNDcwMTIzOUIwNzE4NDMwMDY4MDEwNjAyMDJEQworOjEwMEU4MDAwRkYyMzFCMDQxQTQwMTE0MzAyMEExQjBBMUE0MDExNDM5NAorOjEwMEU5MDAwMDAwRTA4NDNFREU3MDAwMEYwQjUwNDIzODE2QjE5NDAxNAorOjEwMEVBMDAwMDAyMjAwMjk0NkQwQzcxRDM5MzczOTdCMzMyOTAxRDBBQworOjEwMEVCMDAwMzIyOTNGRDEwMTZCQzA0NjRBNjVDNDFEMkQzNENEMUQ3QQorOjEwMEVDMDAwMkQzNTAwMjI5MzAwRTY1OEMwNDZFRTUwMDEzMjA3MkEyNQorOjEwMEVEMDAwRjhEMzgyNkFDMDQ2NEE2MzgyNkFDMDQ2OEE2MjdBOEJDNQorOjEwMEVFMDAwQ0IxRDM5MzM1QTgzNDA2QUMwNDY0ODYyMTI0ODAxMjdGNQorOjEwMEVGMDAwNDI2ODAwMkExMEQxQzI2ODAwMkExM0QxNDI2OTAwMkEzMAorOjEwMEYwMDAwMEREMTAxNjFDMTYwMDE2QTAyMjkwMkQzMjAzMDA3NzE0RAorOjEwMEYxMDAwMENFMDAwRjAxM0Y4MDlFMEMyNjgwMDJBMDJEMTAxNjE3OAorOjEwMEYyMDAwQzE2MDAzRTAwMjY5QzA0NjUxNjUwMTYxMzgxQ0YwQkMzNAorOjEwMEYzMDAwMDhCQzE4NDcxMDFDRkFFNzZDMDYwMDgwODBCNTFFNDlGMworOjEwMEY0MDAwMDAyMkNCNjgwMDJCMzREMEM4MURGOTMwODM2MkNCNjhGNworOjEwMEY1MDAwOUI2QUMwNDZDMzYyQ0Y2OTdCMDBERjE5N0YwMjE3NEJEMworOjEwMEY2MDAwRkYxOEZGMzc2NTM3ODM2MzA3NjNDQjFERkYzMzVBMzNBMQorOjEwMEY3MDAwMUE3MkNCNjkwMDJCMDFEMENBNjEwMUUwMDEyM0NCNjE1OQorOjEwMEY4MDAwMEYxQ0M5Njg0OTZBMDk4OTAxMzE0MTYzRjgxREZGMzBBNgorOjEwMEY5MDAwM0EzMDQyNjAwMjgyODI2MEMyNjAzODFDMDBGMENFRkFCMQorOjEwMEZBMDAwMzg2QTAxMzAzODYyMzgxQzAwRjAwQUY4ODBCQzA4QkM4RQorOjEwMEZCMDAwMTg0NzEwMUNGQUU3MDAwMDZDMDYwMDgwQUNBQjIwNDAxQworOjEwMEZDMDAwRjBCNTA3MUNGOTFERjkzMTg4NkFDMjFEMkQzMjAxMjNDNQorOjEwMEZEMDAwOUIwNzA4MzIxQTQzQzg2QTEyNjgxMjA0MTIwQzgwMTg2MAorOjEwMEZFMDAwODI3OUMzNzkxQjAyMUE0MzEzMDIxMjBBMTIwNjEyMEVFNworOjEwMEZGMDAwMUE0MzEyMDQxMjBDMDIzODkyMDQ5MjBDMDAyNjI1NEQ1QQorOjEwMTAwMDAwRUMxREZGMzQzQTM0MDAyQTA0RDAyMDhBMDEyMzlCMDJDRAorOjEwMTAxMDAwMTg0MzJCRTAwMTIzOUIwN0MyMUQwRDMyMUE0MzEyNjhBRgorOjEwMTAyMDAwMTIwNDEyMzAxODQzMDA2ODAwMDQwMDBDMTA0MzAzMUMyMworOjEwMTAzMDAwRjgxREZGMzA0QTMwODI3OEM4NkIxOTFDMDJGMDAyRjhBNAorOjEwMTA0MDAwMDAyODA0REEyMDhBRkYyMzAxMzMxODQzMEVFMEY5MUQzQgorOjEwMTA1MDAwRkYzMTNBMzEwODYwMDEwNDA5MEMzODFDMDBGMDFDRjgxQgorOjEwMTA2MDAwMDAyODE0RDEyMDhBMDEyMzVCMDIxODQzMjA4MjIxOEFBMAorOjEwMTA3MDAwMzgxQzAwRjBBMkZCRTg2ODAxMjM5QjA3NTQzMDE4NDM5QQorOjEwMTA4MDAwMDA2OEMwNDZFODYwMzAxQ0YwQkMwOEJDMTg0NzAxMjA2RQorOjEwMTA5MDAwRkFFNzAwMDA2QzA2MDA4MEY4QjUwNzFDRkMxREY5MzQ2NworOjEwMTBBMDAwQTA2QkE2NkFDNTFEMEQzNTM4NDhDMDZBNEIwMDU5MTg5QgorOjEwMTBCMDAwNDkwMTQyMTgwMTIwODAwNzEwNDMwMDY4MDAwNDAwMEMxOQorOjEwMTBDMDAwMDA5MDAxMjM5QjA3RDAxRDA1MzAxODQzMDA2ODM4MUM5MQorOjEwMTBEMDAwMjkxQzAwRjBDMkZBQTg4ODQxMDcwMUQwMDAyMDUxRTA4NQorOjEwMTBFMDAwMjk4OTA5MTg2MDZCODE0MkY4RDg2OTg5RUE4ODg5MThDQQorOjEwMTBGMDAwODE0MkYzRDgwMDk4MDEyODI1RDFFMDZBRjE2QjQwMThBRAorOjEwMTEwMDAwNzE2Q0ZBMURDRDMyMDFGMDMzRjlGQTFERkYzMjNBMzIxQgorOjEwMTExMDAwRTA2QTUxNjk0MDE4QzMxRDAzMzMwMDIwODEwMDVFNTgwNgorOjEwMTEyMDAwQzkxOUZGMzEwMTMxNEU2MTAxMzAwNDI4RjZEM0UwNkE1QworOjEwMTEzMDAwNTE2OTQwMThDMTFEMDUzMTAwMjAwMDIyNDMwMENBNTJFOAorOjEwMTE0MDAwMDEzMDA2MjhGQUQzMjkxQzExNEEwMDIwRkZGN0FFRkIxNAorOjEwMTE1MDAwMDEyMjUyMDQ2MDZCMDI0MzAxMjAyMTZCRkZGN0E2RkJDMgorOjEwMTE2MDAwMDEyMjUyMDQ2MDZCMDI0MzAwMjBFMTZBRkZGNzlFRkJGQworOjEwMTE3MDAwQTE2QjA4NEEwMTIwRkZGNzk5RkIwMzIwMDY0OUMwNDZFRQorOjEwMTE4MDAwNDg2MjAxMjBGOEJDMDhCQzE4NDcwMDAwNEMyQTAwODBDNworOjEwMTE5MDAwNTQwMDAzMDAxNDAwMEYwMDZDMDcwMDgwRjBCNThEQjAwMAorOjEwMTFBMDAwMDAyMEI1NEFENTFERjkzNTY4NjIwMTIwMDAwNUIzNDkxNAorOjEwMTFCMDAwQzA0NjA4NjBBODZBQzQxRDJEMzRCMTQ4QzA2QUQ3MUQ1NgorOjEwMTFDMDAwRkYzNzNBMzczOTY4NEIwMDU5MTg0OTAxNDAxODAxMjM1NQorOjEwMTFEMDAwOUIwN0MxMUQwNTMxMTk0MzA5NjgwODMwMTg0MzAwNjg5MQorOjEwMTFFMDAwQzA0NjA5OTBGRjIzMUIwMjE4NDAwMDBBMEE5MDBBOTg4MworOjEwMTFGMDAwQTQ0RTAxMjg1OUQxMjg2QkEyNjg4MDE4QTI0QTIxNjlGRgorOjEwMTIwMDAwMDkwNDA5MEMwMUYwMjZGOTI4NkI3OTY5NDAxOEMxMUQwMQorOjEwMTIxMDAwMDUzMTAwMjA4MjAwOTg0QkQzMThGRjMzMDEzMzVCNjlGRQorOjEwMTIyMDAwQzA0NjhCNTAwMTMwMDQyOEY0RDMwMDIwMzExQzgyMDBDQQorOjEwMTIzMDAwNTYxODAxMjM5QjA3MzM0MzFCNjgwNEFFQjM1MDAxMzA5QgorOjEwMTI0MDAwMDMyOEY0RDMwMDIwMDg5MDkwNDk0MjAwOEI1QUIyNUFFOAorOjEwMTI1MDAwOTM0MjEzRDA4RTQ4QzE4OTAxMzFDMTgxQjg2ODAwMjhGQQorOjEwMTI2MDAwMDNEMTM4OEExMDIzMTg0MzcxRTAzODhBNDAyMzE4NDM4OQorOjEwMTI3MDAwNkRFMDAwRjAxMUY5MDFGMDY3RkZGNUUwMDEzMDA2Mjg5QworOjEwMTI4MDAwRTNEMzA4OTgwMDI4MENEMUI4Njg0MTFDQjk2MDAwMjg0NQorOjEwMTI5MDAwMDNEMTM4OEEwMTIzMTg0MzAyRTAzODhBMDQyMzE4NDMxMworOjEwMTJBMDAwMzg4Mjc4NjgwMTMwNzg2MDYyRTAwQTk4MDIyODVGRDE1RAorOjEwMTJCMDAwMDk5ODQwMEM3M0QzMDEyMzlCMDdFMDFEMDEzMDE4NDNBQworOjEwMTJDMDAwMDA2OEUxMUQwRDMxMTk0MzA5Njg0MDE4MEMzODAwMDQwRAorOjEwMTJEMDAwMDAwQzAwMjE4QTAwNkI0QkQ2MTgwMTIzOUIwNzMzNDM3NworOjEwMTJFMDAwMUI2ODA0QUVCMzUwMDEzMTAzMjlGM0QzMDAyMTgzMUVFMAorOjEwMTJGMDAwMEM5MzY4NEExNjZCQzA0NjBCOTY4QTAwMEM5QjlCMTg5MQorOjEwMTMwMDAwMEI5RTlFMTkwMTIzOUIwNzMzNDMxQjY4NkU0NkIzNTAwNworOjEwMTMxMDAwMDEzMTA0MjlGMUQzNjk0NjhCMUMwNzkzMDAyMTA4OTEwMAorOjEwMTMyMDAwMDRBRTRBMDAwNzlCOUI1QUIyNUE5MzQyMTFEMDU4NDhDOAorOjEwMTMzMDAwQzE4OTAxMzFDMTgxRjg2ODQxMUNGOTYwMDAyODAzRDFERAorOjEwMTM0MDAwMzg4QTIwMjMxODQzMDJFMDM4OEE4MDIzMTg0MzM4ODJFMQorOjEwMTM1MDAwOEZFNzAxMzEwNjI5RTREMzA4OTkwMDI5MEREMUY5NjhGNgorOjEwMTM2MDAwNEExQ0ZBNjAwMDI5MDREMTM5OEEwMjIzMTk0MzAzRTA5OAorOjEwMTM3MDAwMENFMDM5OEEwODIzMTk0MzM5ODIyOTZCMDgxODAxMjNBNAorOjEwMTM4MDAwOUIwNzAxMzgxODQzMDA2OEMwNDYyMDc2MDEyMzlCMDc1RAorOjEwMTM5MDAwRTAxRDExMzAxODQzMDA2ODAxMDYwOTBFMDBFMDE5RTA1NQorOjEwMTNBMDAwMzU0ODJBNkJDMDQ2RUE2MjA0Mjk0RkQxMDEyMUM2MUQ4NworOjEwMTNCMDAwRkYzNjVBMzYzMTcyMEE5OTAyMjkxRUQxMDk5OTA5MEU0RgorOjEwMTNDMDAwNDkwNjFBRDFFMTFEMDUzMTE5NDMwOTY4MDkwNjA5MEVCQworOjEwMTNEMDAwMDgzOTFBRTAwMTIzOUIwN0UwMUQwMTMwMTg0MzAwNjgxQgorOjEwMTNFMDAwRTExRDBEMzExOTQzMDk2ODQwMTgwMDA0MDAwQ0Y5NjgyQgorOjEwMTNGMDAwNEExQ0ZBNjAwMDI5QkNEMUI2RTcwMTIzOUIwN0UxMUQxNgorOjEwMTQwMDAwMDUzMTE5NDMwOTY4MDkwNjA5MEVBMTYwRTg2QUMwNDY1QQorOjEwMTQxMDAwMjA2MDIwMUNGRkY3ODhGQzIwN0UzMzI4MDFEMDMyMjg3MgorOjEwMTQyMDAwMTFEMTAxMjExNDRDQzA0NkY5NjBCOTYwMjAxQzAwRjBCNAorOjEwMTQzMDAwODVGODI4NkJBOTZBQzA0Njg4NjIyMDFDRkZGN0MwRkRBQQorOjEwMTQ0MDAwMDAyODExRDEwRUUwMDAyMDMwNzIxMUUwMzMyOTAxRDBDNAorOjEwMTQ1MDAwMzIyOTBERDEwNzFDMDBGMDcxRjgzODFDRkZGN0IwRkRFMAorOjEwMTQ2MDAwMDAyODAxRDEwMUYwNzBGRTBEQjBGMEJDMDhCQzE4NDc5NworOjEwMTQ3MDAwMDBGMDEyRjhGNkU3MDAwMDZDMDYwMDgwMDAwMDAwQjBGMworOjEwMTQ4MDAwNEMyQTAwODBBQ0FCMjA0MDQwMDcwMDgwODIwNzAwODBERgorOjEwMTQ5MDAwMEMyQjAwODA2QzA3MDA4MEYwQjUyNTQ4NDE2ODAxMzFCNQorOjEwMTRBMDAwNDE2MDI0NEZGOTFERjkzMTAwMjQ4ODZBRkE2OEMwNDY2QQorOjEwMTRCMDAwOTQ2MTA0MjJGQjY4QzA0NkRBNjAxMDIyRkI2OEMwNDZEMworOjEwMTRDMDAwOUE2MUZBMURGRjMyNUEzMjEzN0ExQjRBMDAyQjBCRDA1NQorOjEwMTREMDAwMTU4QTJFMEEzNjAyMzMyMzJCNDA5QjAwMUU0M0NDMjM1MQorOjEwMTRFMDAwMkI0MDlCMDgzMzQzMTM4MjEyOEFGQjY4QzA0NkRBODM4MQorOjEwMTRGMDAwNEE2QkZCNjhDMDQ2REE4MTBBNkJDMDQ2ODI2MkM0NjJFRQorOjEwMTUwMDAwQzMxRDM5MzM0QTZCQzA0NjVBODMwNDIzMDI2ODFBNDMwOQorOjEwMTUxMDAwMDI2MDg4NkEwMUYwMzJGQUY4NjgwMTIzOUIwNzU0MzBCMAorOjEwMTUyMDAwMTg0MzAwNjhDMDQ2Rjg2MEYwQkMwOEJDMTg0NzAwMDBDQgorOjEwMTUzMDAwMEMyQjAwODA2QzA2MDA4MEFDMDcwMDgwODBCNUMxMURCQworOjEwMTU0MDAwRjkzMThBNkEwMTIzOUIwN0QxMUQ0NTMxMTk0MzA5Njg4NgorOjEwMTU1MDAwMEIwNjFCMEUwMTI3QzExREZGMzE0QTMxMzMyQjA1RDE2QworOjEwMTU2MDAwOEI3MDAxMUMxMDFDMDBGMDBGRjgwNkUwMzIyQjA4RDEyNAorOjEwMTU3MDAwOEI3MDAxMUMxMDFDMDBGMDNDRjgzODFDODBCQzA4QkNBRgorOjEwMTU4MDAwMTg0NzAwMjA4ODcwRjlFNzkwQjRDQTFERjkzMjMzMjc1NAorOjEwMTU5MDAwQ0MxREZGMzQ0QTM0RDM2QUMwNDZBNzcwRkYzMTQxMzFCNQorOjEwMTVBMDAwMDc2Q0MwNDY0RjYxRkIxODM5MUM5RjFFMDEyMzlCMDcyNworOjEwMTVCMDAwRkMxQzIzNDMxQjY4MUIwNjFCMEU5QjAwMUIwNDFCMENGRgorOjEwMTVDMDAwQzkxODA4MzEwMTY0MDEyMzlCMDdCOTFDMTk0MzA5NjgzNAorOjEwMTVEMDAwMzQzMDAxNzZGODFEMDEzMDE4NDMwMDY4MDAwNEI5MUQ0RAorOjEwMTVFMDAwMTk0M0QwNjMwOTY4MDkwNDA5MEMwODQzRDA2MzkwQkMwRgorOjEwMTVGMDAwNzA0N0IwQjVDQTFERjkzMkM1MUQyRDM1MzIyMENGMUQzQgorOjEwMTYwMDAwRkYzNzRBMzdEMzZBQzA0NkI4NzBDQzFERkYzNDNBMzQyRQorOjEwMTYxMDAwRTg2OEMwNDY2MDYxMTAzMEU4NjA2MDY5QzAxODg3MUVFNQorOjEwMTYyMDAwMDEyMzlCMDczODFEMTg0MzAwNjgwMDA0QjkxQzE5NDNBNworOjEwMTYzMDAwRDA2MzA5NjgwOTA0MDkwQzA4NDNEMDYzRjgxRDAzMzAxRQorOjEwMTY0MDAwRkZGN0ZDRkIyMDYyRjgxRDA3MzBGRkY3RjdGQjYwNjIzNQorOjEwMTY1MDAwMDAyMDI4NzZCMEJDMDhCQzE4NDdGN0I1ODFCMDAxOThDNworOjEwMTY2MDAwQzcxREY5MzdCODZBMDEyMzlCMDdENDFEMDUzNDIzNDNFRQorOjEwMTY3MDAwMUM2OEZGMjNGRTMzMjM0MDdGNkIzRjA0M0I0MzBCNjAxQQorOjEwMTY4MDAwMzQzMDFDMUM4MDIzMjM0MDAxOUZGRjM3NDEzNzAwMkIzRgorOjEwMTY5MDAwM0NEMDBDMjMwMDkzMDAyMzlEMDBBRTE4MzY2OTZEMThEMgorOjEwMTZBMDAwNkU2MTAxMzMwNTJCRjdEMzAwMjM5RDAwQUUxODc2NkFENworOjEwMTZCMDAwNkQxOEFFNjIwMTMzMDUyQkY3RDMwMTlCRkYzMzUxMzMxNQorOjEwMTZDMDAwOUI3ODMzMkIwRUQxMDEyMzlCMDdDNTFEMDEzNTJCNDM3RQorOjEwMTZEMDAwMUI2OEMwNDY0QjgxMDEyMzlCMDdDNTFEMEQzNTJCNDM1RAorOjEwMTZFMDAwMUI2ODE2RTA3QjY5QzA0NjRCODEwMTIzOUIwN0M1MUQyMworOjEwMTZGMDAwMEQzNTJCNDMxQjY4N0Q2OTVEMUIwMTIzOUIwN0M2MURCMAorOjEwMTcwMDAwMDEzNjMzNDMxQjY4RUIxODBDM0IwMkUwMDAyMzAwOTNDNworOjEwMTcxMDAwNEI4MUNCODA2MzA5NDlEMzAxMjM5QjA3QzQxRDA1MzQ0QQorOjEwMTcyMDAwMjM0MzFCNjhDMDQ2MEI4MTAxMjM5QjA3QzQxRDBEMzQ1NgorOjEwMTczMDAwMjM0MzFCNjgwQzg5MUIxQjAwOUMxQzFCMDEyMzlCMDc1QworOjEwMTc0MDAwMDgzMDE4NDMwMDY4MjAxODg4ODAzODZBMDQwRUZGMjM4OAorOjEwMTc1MDAwMUIwNDAzNDAxQjBBMUM0M0ZGMjMxQjAyMDM0MDFCMDIwNAorOjEwMTc2MDAwMjM0MzAwMDYxODQzQzg2MDc4NkEwNzBFRkYyMzFCMDQ1MgorOjEwMTc3MDAwMDM0MDFCMEExRjQzRkYyMzFCMDIwMzQwMUIwMjNCNDM4MgorOjEwMTc4MDAwMDAwNjE4NDMwODYxRDA2QkMwNDZDODYzOTA2QkMwNDYyMgorOjEwMTc5MDAwMDg2NDUwNkNDMDQ2NDg2NDEwNkNDMDQ2ODg2NEQwNkNDNQorOjEwMTdBMDAwQzA0NkM4NjQ5MDZDQzA0NjA4NjUwMkUwMDAyMzBCODEwNworOjEwMTdCMDAwOEI4MDA0QjBGMEJDMDhCQzE4NDcwMEI1MEY0QTkzODk3MQorOjEwMTdDMDAwMDEzMzkzODFDMjFERjkzMjA0MjM5MDZBQzA0NkMzNjA3RAorOjEwMTdEMDAwMTAyMzgzNjFDQjBBMDFEMzE4MjM4MzYxQzE4MzUxNkIyQQorOjEwMTdFMDAwQzA0NkMxODE1MTZCQzIxRDM5MzI1MTgzMDQyMzAxNjg0NworOjEwMTdGMDAwMTk0MzAxNjAwMUYwQzJGODA4QkMxODQ3MEMyQjAwODBBNworOjEwMTgwMDAwQjBCNTFCNEMyMDZBMDIyODFCRDIwMDIwRTcxRDE5MzdGNworOjEwMTgxMDAwMzg3MUUxNjhFMDFERjkzMDAwMjkxNUQwNDI2QTAwMkFDQworOjEwMTgyMDAwMTJEMTAxMjUwQUUwRkZGNzg5RkIwMDI4MDlEMTIwNkFCRgorOjEwMTgzMDAwMDIyODAwRDMzRDcxRTA2ODAwMjgwMkQwMzg3OTAwMjhFMgorOjEwMTg0MDAwRjFEMEIwQkMwOEJDMTg0NzQwNkEwMDI4RjlEMTAwMjk4MworOjEwMTg1MDAwRjdEMTYwNjkwMDI4MDREMDA2NDgwMDY4MDNGMEE4RkNBRQorOjEwMTg2MDAwRUZFNzYwNjgwMDI4RUNEMDAwRjA1QUY4RTlFNzAwMDBFNAorOjEwMTg3MDAwNkMwNjAwODAzNDA0MDA4MEIwQjUwNzFDMjAyM0I4NjhEMworOjEwMTg4MDAwMTg0MDAxMjQwMDI1MDAyODBCRDEzODZBMDAyODAzRDExNAorOjEwMTg5MDAwMjgxQ0IwQkMwOEJDMTg0NzFGNDgwMTZFMDEzMTAxNjYwNgorOjEwMThBMDAwMDNFMDQ4NjhDNDIzMTg0MDAzRDEzODZBMDBGMDBDRkNGOAorOjEwMThCMDAwMkZFMDM4MUMwMEYwMUNGQzM4MUMwMEYwN0JGQUI4NjhFNAorOjEwMThDMDAwQzAwODAyRDMzODZBMDBGMEQxRkJCODY4Mzk2QUMwNDY1NAorOjEwMThEMDAwODg2MDM4NkFDMDQ2QzU2MDEwNDg0MTY4MDAyOTExRDE0NworOjEwMThFMDAwQzE2ODAwMjkwOUQxNDE2OTAwMjkwNkQxMzk2QUMwNDY3OQorOjEwMThGMDAwODE2MDQxNjAwMEYwMTRGODBCRTAzOTZBQzA0NjgxNjBGNQorOjEwMTkwMDAwNDE2MDA2RTAzOTZBODI2OEMwNDZEMTYwMzk2QUMwNDZFMworOjEwMTkxMDAwODE2MDIwMUNCREU3MDAwMEE0MkEwMDgwNkMwNjAwODBDNgorOjEwMTkyMDAwOTBCNTBCNEM2NzY4MDAyRjBGRDAzODFDMDBGMDEyRjhGMAorOjEwMTkzMDAwMDAyODBBRDE2MDY4QzA2OEMwNDY2MDYwMzgxQzAwRjBBQQorOjEwMTk0MDAwQzNGQjAwMjA5MEJDMDhCQzE4NDcwMTIwRkFFNzAwMDA0OAorOjEwMTk1MDAwNkMwNjAwODBGMEI1MDcxQ0ZFMUQ0OTM2MzA3ODQwMDA0QgorOjEwMTk2MDAwQzAxOTg1OEIzMzRDMzQ0QjlENDIzQ0QwMzgxQzIxMUMxNAorOjEwMTk3MDAwMkExQzAwRjAxREY5MzE0ODgwNkE1ODIxNjk0MzQwMTgzQgorOjEwMTk4MDAwMDEyMzlCMDcxODQzMDA2ODAwMDQwMDBDMkM0RDAxMjgxQworOjEwMTk5MDAwMUFEMTMwNzhDMDE5QzExRDE5MzEwODdBM0E2ODgwMThGNworOjEwMTlBMDAwMDk3QkVBMUQyMTMyMDBGMEUzRkMzMDc4QzAxOTIwMzBCOQorOjEwMTlCMDAwMDA3OTM5Njg0MDE4QzExRDA1MzEwMDIwMDAyMzQyMDAxQworOjEwMTlDMDAwOEI1MjAxMzAwNjI4RkFEM0EwODg0MTA3MEJEMTIxODkxOAorOjEwMTlEMDAwMDkxODc4NjgwMDA0MDAwQzgxNDIwNEQ4NjE4OUUyODgwMworOjEwMTlFMDAwODkxODgxNDIwM0Q5MDAyMEYwQkMwOEJDMTg0NzIxMUM4QgorOjEwMTlGMDAwMTQ0QTAwMjBGRUY3NUFGRjAxMjI1MjA0Nzg2ODAyNDM3RAorOjEwMUEwMDAwMDEyMDM5NjhGRUY3NTJGRjAxMjI1MjA0Nzg2ODAyNDMzMAorOjEwMUExMDAwMDAyMDM5NjhGRUY3NEFGRjBCNDkwQzRBMDEyMEZFRjcwNworOjEwMUEyMDAwNDVGRjAxMjBFOTFEMTkzMTQ4NzEwMjIxRUExREY5MzJGMworOjEwMUEzMDAwNTE2MkQ5RTcyOEFDMjA0MEZGRkYwMDAwNEMyQTAwODAwQgorOjEwMUE0MDAwNkMwNjAwODA1NDAwMDMwMDE0QUMyMDQwMTQwMDA3MDAxMgorOjEwMUE1MDAwRjBCNTgzQjAwMDIxNEY0OEMyMURGOTMyNTE2MjAxMjExNworOjEwMUE2MDAwQzkwNDRENEFDMDQ2MTE2MEMxMUQxOTMxNDk3OTAwMjk4OAorOjEwMUE3MDAwMDREMTRBNDgwMDY4MDNGMDlCRkI4N0UwNDU0ODQ3Njg2QgorOjEwMUE4MDAwRkMxRDQ5MzQyMTc4NDgwMEMwMTk4MDhCNDQ0QTkyNkE3MQorOjEwMUE5MDAwNTgyMzU4NDMxNTE4MDEyMzlCMDdFQTFEMDUzMjFBNDNBMgorOjEwMUFBMDAwMTI2ODA4MzUyQjQzMUQ2OEZGMjMxQjAyMkI0MDFCMEFCRAorOjEwMUFCMDAwM0M0RDAxMkIyNEQxQzgxOUMxMUQxOTMxMDg3QTNBNjg0RgorOjEwMUFDMDAwODAxODM5NEEwOTdCMDBGMEM1RkMyMDc4QzAxOTIwMzAwNQorOjEwMUFEMDAwMDA3OTM5Njg0MTE4MDAyMDgyMDA1MzE5OUI2RTZFNDZDOAorOjEwMUFFMDAwQjM1MDAxMzAwMzI4RjdEM0NBMUQwNTMyNjk0NjAwMjBFMAorOjEwMUFGMDAwNDMwMENENUFDMDQ2RDU1MjAxMzAwNjI4RjhEMzJERTAxOAorOjEwMUIwMDAwMDIyQjJCRDExMTBBMjlEMzAwMjE4QTAwNTMxOTlCNkU3NQorOjEwMUIxMDAwNkU0NkIzNTAwMTMxMDMyOUY3RDMyMTc4NDkwMEM5MTkyMgorOjEwMUIyMDAwMDk4RjNBNjg4QjE4NkE0NjAwMjE0RDAwNTY1QkMwNDYwMworOjEwMUIzMDAwNUU1MzAxMzEwNjI5RjhEMzE5NDk4QTZBMTMxODFBNkRDMAorOjEwMUI0MDAwMDA5RDU1NDAxOTRBRDY2ODc1NDAxRDY1ODk2QTA4MTg3OAorOjEwMUI1MDAwNDE2RDAyOUI1OTQwOTI2OTUxNDA0MTY1MjA3ODQxMUU3OAorOjEwMUI2MDAwMjE3MDAwMjgwREQwMzgxQ0ZGRjdGNEZFMDAyODBERDE5RAorOjEwMUI3MDAwMDg0QTUwNjhDMDY4QzA0NjUwNjAzODFDMDBGMEE0RkE5QgorOjEwMUI4MDAwMDJFMDM4MUMwMEYwNzNGQTAxRjBERUZBMDNCMEYwQkM5QQorOjEwMUI5MDAwMDhCQzE4NDc2QzA2MDA4MDAwMDAwMEIwMzgwNDAwODBDNAorOjEwMUJBMDAwNEMyQTAwODBBQ0FCMjA0MDk0MDYwMDgwMDg4MzIwNDA4MworOjEwMUJCMDAwRjBCNTgyQjA2OTRCOUY2QTU4MjM1QTQzQkExOEMzMURDNworOjEwMUJDMDAwNDkzMzFGNzgwMTIzOUIwN0Q0MUQwMTM0MjM0MzFENjgyQgorOjEwMUJEMDAwNDM2ODFDMDQwMTIzOUIwN0Q2MUQwNTM2MzM0MzFCNjg0RAorOjEwMUJFMDAwMUM0MzQyMjMxQzQzMEM2MEZGMjYzNjAyMkU0MDAxMjM3NworOjEwMUJGMDAwNUIwMjlFNDI3NEQxNkIwQzJCRDNDMzE5MjAzMzFCNzkyQgorOjEwMUMwMDAwQzA0NjRCODE3QjAwMUIxODFCOEY0Qzg5MUIxQkNCODA1NAorOjEwMUMxMDAwMDAyNEE2MDAwMTk2QjMxOERFMUQwOTM2MDEyMzlCMDc5OAorOjEwMUMyMDAwMzM0MzFCNjgwMTlFNzYxODczNjEwMTM0MDUyQ0YwRDM5MQorOjEwMUMzMDAwMDAyNEE2MDAwMDk2QjMxOERFMUQxRDM2MDEyMzlCMDc2NQorOjEwMUM0MDAwMzM0MzFCNjgwMDlFNzYxOEIzNjIwMTM0MDUyQ0YwRDMzMQorOjEwMUM1MDAwMDZFMDAwMjM0QjgxQ0I4MDQwMjM5QzQzMEM2MDIzMUM3NworOjEwMUM2MDAwNkIwRTRBRDNDMzE5MjAzMzFCNzkxMDMzMEI4MTdCMDBEMQorOjEwMUM3MDAwMUIxODFCOEYwRjg5REIxQjhCODAwMTIzOUIwN0Q0MUQzNworOjEwMUM4MDAwMzUzNDIzNDMxQjY4QzA0NkNCNjMwMTIzOUIwN0Q0MUQxNworOjEwMUM5MDAwMzEzNDIzNDMxQjY4QzA0NjBCNjRBQjBFMjFEMjAxMjNCMQorOjEwMUNBMDAwOUIwN0Q0MUQzRDM0MjM0MzFCNjhDMDQ2NEI2NDAxMjM2RQorOjEwMUNCMDAwOUIwN0Q0MUQzOTM0MjM0MzFCNjhDMDQ2OEI2NDAxMjMyMgorOjEwMUNDMDAwOUIwN0Q0MUQ0NTM0MjM0MzFCNjhDMDQ2Q0I2NDAxMjNDNgorOjEwMUNEMDAwOUIwN0Q0MUQ0MTM0MjM0MzFCNjhDMDQ2MEI2NTAwRTBCRAorOjEwMUNFMDAwMEZFMEZCMUYwMTNCMUIwNDFCMEMwNzY4RkYxODAzNjk3NworOjEwMUNGMDAwMDgxQzM5MUMwMEYwMzRGODJDRTAwMDIzMEI4MThCODA4OQorOjEwMUQwMDAwMjhFMDAwMjM4QjgwMEI4MUMzMTkyMDMzMUI3QUMwNDY0NworOjEwMUQxMDAwNEI4MTdCMDAxODE4MDA4RUMwNDZDODgwMDAyMDg3MDBDOQorOjEwMUQyMDAwQkIxOERDMUQwOTM0MDEyMzlCMDcyMzQzMUI2ODdGMTg2NAorOjEwMUQzMDAwN0I2MTAxMzAwNTI4RjJEMzAwMjA4NzAwQkIxOERDMUQzMQorOjEwMUQ0MDAwMUQzNDAxMjM5QjA3MjM0MzFCNjg3RjE4QkI2MjAxMzBBRQorOjEwMUQ1MDAwMDUyOEYyRDMwMkIwRjBCQzA4QkMxODQ3NEMyQTAwODAxQQorOjEwMUQ2MDAwODBCNDFGMUMzQjBDMThEMjE3NkQxMTRCQzA0NkRGNjBBRQorOjEwMUQ3MDAwNTI2REMwNDYxQTYxQzc2MDFBNjlDMDQ2MDI2MUQ4NjhEMAorOjEwMUQ4MDAwQzA0NjA4ODBEODY4MDAwQzQ4ODAxODY5QzA0Njg4ODAyMgorOjEwMUQ5MDAwMTg2OTAwMENDODgwODBCQzcwNDc0QTg4MTIwNDBCODgwMAorOjEwMURBMDAwMUE0M0MyNjA4QTg4Qzk4ODA5MDQxMTQzMDE2MUYyRTdCNQorOjEwMURCMDAwMkMwNzAwODBGMUI1ODhCMDAwMjIwODk4MDA2QTA4OUJDMworOjEwMURDMDAwOTk2ODQ5MEEwMkQzMDEyN0ZGMDMwMEUwMDAyNzAzOEIyQgorOjEwMUREMDAwMDAyQjE5RDBBMzQ5ODk2QTFDMUM1ODIzNjM0M0M5MThENgorOjEwMURFMDAwMDEyMzlCMDc1ODM5MTk0MzA5NjgwOTA0MDkwQzAyMjk4MgorOjEwMURGMDAwMDJEMTA4MjMxRjQzMDdFMDQxOEIwMDI5MDJEMDBDMjNBNgorOjEwMUUwMDAwMUY0MzAxRTAwNDIzMUY0MzgzOEEwMDJCMThEMDk1NDkwOAorOjEwMUUxMDAwODk2QTFDMUM1ODIzNjM0M0M5MTgwMTIzOUIwNzU4MzkzRQorOjEwMUUyMDAwMTk0MzA5NjgwOTA0MDkwQzAyMjkwMUQxMEY0MzA3RTA4RAorOjEwMUUzMDAwQzE4QTAwMjkwMkQwMDMyMzFGNDMwMUUwMDEyMzFGNDM2RAorOjEwMUU0MDAwQzExRDM5MzEwNzkxNEI4OTBDODkxQzE5MjQwNDI0MENCQworOjEwMUU1MDAwMDg5RDJENjhDMDQ2MDE5NUM5ODg3RDA4MUFEMzFBMUNCMworOjEwMUU2MDAwQzMxRDE5MzMxQTcyMDc5QTkyODlDMDQ2MUE3MzA3OUFDQQorOjEwMUU3MDAwMTI4OUMwNDYwMjg2MDQ4NzgyOEEwMTNBODI4MzAxMjIzRgorOjEwMUU4MDAwMTk3MTA4OUIxQjY4NUIxODVCNzg5QjAwMUIwNDFCMEM3QgorOjEwMUU5MDAwMDgzMzU5MThCQjA4NDdEMzA3OUI1Qjg5ODUxODA2OTVGQgorOjEwMUVBMDAwMjAzNTJCNzIwNzlCOUI4OUMwNDYyQjczMDc5QjFCODk5MAorOjEwMUVCMDAwMkUxQzU1MDAyRDE4MDU5NTJCODYwMDJBMDFEMEMzOEFBQgorOjEwMUVDMDAwMDBFMDgzOEEwMTNCMDU5REMwNDZBQjgzMzE3MTY1NEJDMQorOjEwMUVEMDAwOUQ2QTA1OUI5RThCNTgyMzczNDNFQjE4REQxRDAxMzVDRQorOjEwMUVFMDAwMDEyMzlCMDcyQjQzMUQ2ODJCMEU1QjA2MDFEMTA4MzE5NAorOjEwMUVGMDAwMDBFMDEwMzE4MTIzNUIwMjFENDA5RDQyMDNEMUUzMUZBRQorOjEwMUYwMDAwMDUzQjFDMDQyNDBDMDU5QkMwNDYxQzg3MDg5QjFCNjhEMgorOjEwMUYxMDAwMUIxOTEwM0I5QjdCMDY5RDQwMzUyQjcwMkI3ODAyMzNBMQorOjEwMUYyMDAwRTMxQTFDMDQyNDBDMDEzMkJCMDg5QjA3NkREMDgzMThGNAorOjEwMUYzMDAwMjAzMzA0OTMxOTcyMDE5QjVEMTgwMTIzOUIwNzJCNDNFNworOjEwMUY0MDAwMUI2ODFCMDcxQjBGOUIwMDA0OUVDMDQ2MzM3MzAwOTU0NAorOjEwMUY1MDAwMkI3ODFCMDcxQjBGOUIwMDA0OURDMDQ2MkI3MzAwOUQxNQorOjEwMUY2MDAwRUI3OEFENzgxQjAyMUQ0MzJCMDIyRDBBMkQwNjJEMEU5QQorOjEwMUY3MDAwMkI0MzU1MDAyRDE4MkI4NjA0OUJDMDQ2NTk3MjA0OUI5OQorOjEwMUY4MDAwMUI3QjJFMUMwNDlEQzA0NjZCNzMzMzhFQzA0NjczODYyQworOjEwMUY5MDAwMDA5RDJCNzgxQjA3MUIwRjlCMDAxQjA0MUIwQzU5MTg2MworOjEwMUZBMDAwMDQyNTNENDAwRUQwMzQ4NzAzOEIwMTNCQjM4MzEzMUNDMworOjEwMUZCMDAwMUIxODIwMzMxOTcxMDE5QjVCMTg1Qjc4OUIwMDU5MTgyMworOjEwMUZDMDAwMDgzMTAxMzIzQjA5MzdEMzAwMkQwMUQwNDM4QjAwRTBBQgorOjEwMUZEMDAwMDM4QjU1MDAyRDE4MDEzQkFCODM4MzE4MDM5MzIwMzNFQgorOjEwMUZFMDAwMTk3MTIwNEI5RDZBNTMwMDFCMTgwMjkzOUU4QjU4MjMzNgorOjEwMUZGMDAwNzM0M0VCMThERDFEMDEzNTAxMjM5QjA3MkI0MzFENjgzRgorOjEwMjAwMDAwMkIwRTVCMDYwMkQxMDgzMTAxRTAxNUUwMTAzMTgxMjM2RgorOjEwMjAxMDAwNUIwMjFENDA5RDQyMDNEMUUzMUYwNTNCMUMwNDI0MENDMQorOjEwMjAyMDAwMDI5QkMwNDYxQzg3MDg5QjFCNjgxQjE5MTAzQjlCN0JBRgorOjEwMjAzMDAwMDM5QzQwMzQyMzcwMDEzMjA3OUJDMDQ2RDk4MDUxMUU1NworOjEwMjA0MDAwQzMxRDQ5MzMxOTcwMDc2MTA0MkEwNkQyMDY0OTUzMDA5QgorOjEwMjA1MDAwMUIxODk5ODMwMTMyMDQyQUY5RDMwOUIwRjBCQzA4QkNEQgorOjEwMjA2MDAwMTg0NzAwMDA0QzJBMDA4MEZGRkYwMDAwNzA0NzgwQjUzMQorOjEwMjA3MDAwOENCMDA3MUMxMjQ4MDE2ODAxMzEwMTYwMzg2OEMwNDYwNQorOjEwMjA4MDAwMDA5MDc4NjhDMDQ2MDE5MEI4NjhDMDQ2MDI5MDBENDgzQworOjEwMjA5MDAwNDE2OEM5NjhDMDQ2NDE2MDM4MUMwMEYwNEZGOEI4NjgxNAorOjEwMjBBMDAwNDAwOTA2RDMxMDIzMDI5ODE4NDMwMjkwNjg0NjAyRjBCNAorOjEwMjBCMDAwRTFGRjY4NDYwMkYwOUFGRTBDQjA4MEJDMDhCQzE4NDdFRAorOjEwMjBDMDAwMEMyQjAwODA2QzA2MDA4MDAwQjU4Q0IwMDE2OEMwNDYwNworOjEwMjBEMDAwMDA5MTQxNjgwNTRCMTk0MzAxOTEwMEYwMkZGODY4NDZDMworOjEwMjBFMDAwMDJGMDg0RkUwQ0IwMDhCQzE4NDcwMDAwMDAwMDAwQTBGRAorOjEwMjBGMDAwMDI2QTAzNjhDMDQ2MTM2MDQwNjhDMDQ2NTA2MDQwMzJDMAorOjEwMjEwMDAwNDg2OEMwNDY5MDgwQzg2OEMwNDZEMDgwNDg2OUMwNDZDQworOjEwMjExMDAwMTA4MTg4NjhDMDQ2NTA4MTA4N0VDMDQ2OTA3MzA4Njk2NworOjEwMjEyMDAwQzA0NjkwODE3MDQ3MDQ0OTA4NjgwMDI4MDBEMTcwNDc3NAorOjEwMjEzMDAwQzI2OEMwNDYwQTYwRkFFNzZDMDYwMDgwMDI0OTBBNjg3NQorOjEwMjE0MDAwQzA0NkMyNjAwODYwNzA0NzZDMDYwMDgwQjBCNDAwMjJEMAorOjEwMjE1MDAwMTI0RjdDN0YwMTM0N0M3NzAzMjNGQzFEMTkzNDM4NjJENQorOjEwMjE2MDAwNzk2MjIzNzIwRTRDMjU2ODZCMEMwNUQyMjM2ODFCMEMxOAorOjEwMjE3MDAwMTBEMTI0NjhBMzBBMEREMzAxMjMwQTRGQzA0NkZCNjI4NQorOjEwMjE4MDAwMDk0RjBBNEJDMDQ2REY2MDk5NjA1ODYwMTAxQzE4NjAwOAorOjEwMjE5MDAwMDEzMkZCRTcxMDFDMzg2NDAxMzJGQkU3MDAwMDAwODBDRAorOjEwMjFBMDAwMDAwMDEwNDBDMDAwMTgwMDAyODEwMDAwNDAwMTE4MDAyQgorOjEwMjFCMDAwRjBCNTQ3NEYzODY4NDc0RTQ3NEQwNzIzNUIwMkVDMTg5MAorOjEwMjFDMDAwMDAyODFERDEyMDZCMDEzMDIwNjM0NDQ5QzA0NjA4NjBCRgorOjEwMjFEMDAwNDM0ODQxNjkwMDI5MTNEMEMxMUQ2OTMxMDk3QjAwMjk5OQorOjEwMjFFMDAwMEVEMDAxMjM5QjA3MDE2RDE5NDMwOTY4QzA0NjgxNjEyOAorOjEwMjFGMDAwQzI2OTkxNDIwNEQwRjE2QzAxMzFGMTY0MDFGMDUwRkVFQQorOjEwMjIwMDAwMzg2ODAxMjgxN0QxMzc0ODQxNjkwMDI5MTNEMEMxMUQwQQorOjEwMjIxMDAwNjkzMTA5N0IwMDI5MEVEMDAxMjM5QjA3MDE2RDE5NDMwOQorOjEwMjIyMDAwMDk2OEMwNDY4MTYxQzI2OTkxNDIwNEQwRjE2QzAxMzFGNAorOjEwMjIzMDAwRjE2NDAxRjAzNUZFMzg2ODAyMjgyRkQxQkIyMzFCMDE2MQorOjEwMjI0MDAwRUUxODcwN0IwMDI4MDNEMDAwMjA3MDczMDBGMDRBRkQ2OAorOjEwMjI1MDAwMzA3QjAwMjgwMkQwNzg2ODAyRjBBQUZGMUIyM0RCMDE0NAorOjEwMjI2MDAwRTgxOEMwOEIwNDI2MDY0MEUwNkFCMDQyMTREMEY4NjgzMworOjEwMjI3MDAwMDEzMEY4NjAxOTI4MTFEMzFCNDgwMTdCMDAyOTBERDFDQQorOjEwMjI4MDAwRkYzMDQxMzA0MDc4MDAyODA4RDFCODY4MDJGMDkwRkY1NAorOjEwMjI5MDAwMDAyMEY4NjBFNjYyMDFFMDAwMjBGODYwMzg2ODAzMjg1QQorOjEwMjJBMDAwMEJEMUVDMUQ3OTM0RTA2QjgwMDgwMkQzMDIyMDAyRjBFMAorOjEwMjJCMDAwMDdGQzAyMjNFMDZCOTg0M0UwNjMzODY4MDEzMDM4NjAyNAorOjEwMjJDMDAwMDMyODAxRDkwMDIwMzg2MEYwQkMwOEJDMTg0NzAwMDA4MgorOjEwMjJEMDAwM0MwNDAwODBBMDgyMjA0MDY4MEUwMDgwNDAwMTE4MDA2RAorOjEwMjJFMDAwNjQyRDAwODBFNDJDMDA4MDI4MDUwMDgwQjBCNDFENDhENworOjEwMjJGMDAwODQ4QTFENEExMzhBQzExRDA5MzEwMTI3OUM0MjAzRDFEQQorOjEwMjMwMDAwNDM4QTU0OEFBMzQyMTBEMDBCNzgwMDJCMEREMDRCNzgwRgorOjEwMjMxMDAwMDAyQjBBRDA0NDhCOTM4QTlDNDIwNERDMTM0QkMwNDZBQQorOjEwMjMyMDAwNUY2MDk3ODIwMUUwMDEzMzkzODJDMzhCNUMxQ0M0ODM5RQorOjEwMjMzMDAwODQ4QkEzNDIwRURCODQ4QTA1OEIwMDIzQUM0MjA1REEzMgorOjEwMjM0MDAwNDQ4QUM1OEFBQzQyMDFEQTRCNzAwMEUwNEY3MDQzODI4OAorOjEwMjM1MDAwODM4MkMzODM0MThBQzA0NjUxODI4MDhBQzA0NjEwODJFQworOjEwMjM2MDAwQjBCQzcwNDdFODBFMDA4MDNDMDQwMDgwNDAwMTE4MDBCQgorOjEwMjM3MDAwRjdCNTkxQjA2QjQ2ODQxRTEyOTkxNDI5MUFEOTAwMjAyMgorOjEwMjM4MDAwODEwMDY3NThDMDQ2NTc1MDAxMzAwMDA2MDAwRTEwMjhFMworOjEwMjM5MDAwRjZEMzAwMjEwNTIwODcwMEQ2NTk0RjFDM0QwNjJEMEU4RgorOjEwMjNBMDAwMEYxQ0JGMDBERTUxMjkxQzAxMzAwMDA2MDAwRTEwMjg1MgorOjEwMjNCMDAwRjFEMzA5RTAwMDIwODEwMDYzNThDMDQ2NTM1MDAxMzAzQQorOjEwMjNDMDAwMDAwNjAwMEUwNjI4RjZEMzAwMjBFMDcwMjA3MjYwNzIyRQorOjEwMjNEMDAwQTA3MjIwNzM2MDczMTI5OTE0MjkzN0Q5Njk0NjhFMUMzNAorOjEwMjNFMDAwOTE3ODA5MDcwOTBGODkwMDE0MzkwRDA2MkQxNjAwMjc2OQorOjEwMjNGMDAwMDAyRDFCRERGMDE5MTBBOTAwRjAzREY4MDAyODBFRDBDQgorOjEwMjQwMDAwMDAyMDEwQTkwOTc4MDAyOTA5REQwMDIyMzkxODcyNTQyQQorOjEwMjQxMDAwMDEzMDAwMDYwMDBFMTBBOTA5Nzg4ODQyRjZEQjEwQThFQQorOjEwMjQyMDAwMDA3ODM4MTgwNzA2M0YwRUFGNDJFM0RCNjg0NkUyMUQyRQorOjEwMjQzMDAwMEQzMjAwMjFBQjA4NUYxQzA4RDA4QjAwQzQ1OEMwNDY4OQorOjEwMjQ0MDAwRDQ1MDAxMzEwOTA2MDkwRThGNDJGNkQ4MTRCMEYwQkMwMQorOjEwMjQ1MDAwMDhCQzE4NDc5MEI0ODcxRTAwMjA4OTA4NEIxQzA4RDA4MAorOjEwMjQ2MDAwODEwMDU0NThDMDQ2N0M1MDAxMzAwMDA2MDAwRTgzNDI2MworOjEwMjQ3MDAwRjZEODkwQkM3MDQ3ODBCNDAyNzhEMjA2RDIwRTAwMjMwMgorOjEwMjQ4MDAwMDEyNzAxMkEwMURDMEY3MDExRTA0MDc4QzA0NjA4NzA3NgorOjEwMjQ5MDAwMTQyQTA0RDEwODQ4MDE3QTAxMzEwMTcyMDdFMDAyMkFBNgorOjEwMjRBMDAwMDVEMDA1MkEwM0QwMDYyQTAxRDAxNTJBMDJEMTE4MUMwRQorOjEwMjRCMDAwODBCQzcwNDczODFDRkJFN0UwODIyMDQwMDBCNTBGNDgyNQorOjEwMjRDMDAwMDEyMzFCMDY0MTY5OTk0MzFBMDk0MTYxRDE2MDAwMjEyQQorOjEwMjREMDAwQTEyMjUyMDM5MTYxMTkxQzA5NEFDMDQ2MTE2MDFCMjNCNQorOjEwMjRFMDAwREIwMUMwMTg4MDY5MDAyODAzRDAwMkYwNjFGRTA4QkMzRgorOjEwMjRGMDAwMTg0NzA0NDg0MTg4MDEzMTQxODBGOEU3NjgwRTAwODBBMAorOjEwMjUwMDAwMDAwMDAwQjBFMDgyMjA0MDcwNDcwMDAwRjBCNTg2QjBDNworOjEwMjUxMDAwOTU0QUQwNjhENzFENzkzNzAxMjgwOUQxMzg4OTAwMjgxNAorOjEwMjUyMDAwMDZEMUQwNkYwMjIzMDE2ODk5NDMwMTYwMTQyMDM4ODFERAorOjEwMjUzMDAwOEU0QzYxNkE4RTQ4QzM2QjU5MThDMTYzQTA2QTE5MjMxNworOjEwMjU0MDAwREIwMUQ0MThBMDYyMjE2QTA5MDMwOTBCODE0MjA1RDE3RAorOjEwMjU1MDAwMDEyMDQwMDQ4NzQ5QzA0NjA4NjBGM0UwQkI4QTU4MUM0QworOjEwMjU2MDAwQjg4MjNEOEIwMTIwMDAyMUFCNDIwNERCRDMxRDg5MzNBRgorOjEwMjU3MDAwNTg3MEI5ODJGOTgzMzMyMzlCMDFEMzE4MDU5MzVCNjlBMworOjEwMjU4MDAwMEYyQjczRDIwMDIxN0M0RkMwNDYzOTYxMjE2QThBNjhDMworOjEwMjU5MDAwMTIwNDEyMEM0QjY4MUUwQzM2MDRGRDFGMDkzRDAwMkU2MAorOjEwMjVBMDAwMDVEMTNCMkEwM0QzMDEyM0RCMDI5QTQyMDFEOUE4NzM0OAorOjEwMjVCMDAwQzhFMDAxMjM5QjA3MDgzMTE5NDMwOTY4QzA0NjAzOTEwRAorOjEwMjVDMDAwMDNBOTA5ODgwMTMxMDkwNDA5MEM3OTgyNDkwOTA1MzFGNworOjEwMjVEMDAwMDkwNjA5MEU2OTRFQzA0NjAyOTY2OTQ4NDM2QUMwNDYxQworOjEwMjVFMDAwMDE5MzgzNkFDMDQ2MDA5M0MyMUQxMTMyODA2OTAwMDNDMworOjEwMjVGMDAwMDAwQjkyNjhCMzA3MUE0MzEyNjg5MDQyMDFEMTAxMjA4MAorOjEwMjYwMDAwMERFMDkwNDIwNUQ5MDA5QjE4MUEwMTlCRDIxQTgyMTgzRQorOjEwMjYxMDAwMDBFMDEyMUEwMTIwMDkwMTkxNDIwMEQzMDAyMDAxMjg5NAorOjEwMjYyMDAwNjVEMTUxNDkyMDY5MDAyODYyRDAwNTk5NDg2OTAxMzA3NworOjEwMjYzMDAwNDg2MTAyMjAyMTZBQzA0NjA4NjAwMEYwQTdGQzc4NjM2OAorOjEwMjY0MDAwQkU2MDQ5NDkyMjZBQTM2QkQzMTg2NjZCQjM0MjAwRDlCNgorOjEwMjY1MDAwMjI2QkMwNDZCQTYyQkE2QTBDMzJGQTYyMDAyMkZBNjE5MAorOjEwMjY2MDAwMDNBQTUyODhEMjA5MDNEMzAxMjIwMEUwN0JFMDAwRTBGNAorOjEwMjY3MDAwMDAyMjdBNjA3QTY4QzA0NjAyNjA3ODhBNDE0RTYwMjhGQgorOjEwMjY4MDAwMDREQ0IwODM3ODhBQzA0NkYwODMwOEUwNjAyMEIwODMyMQorOjEwMjY5MDAwNzk4QUY4NkE0MjE4NjM2QjlBNDIwM0Q4RjE4MzAwMjI2MAorOjEwMjZBMDAwM0E2MzA1RTAyMTZCQzA0NjM5NjM2MTZCMDgxQUYwODMxOQorOjEwMjZCMDAwMkQ0OTc4NkI0MjY4QzA0NkJBNjA4MjY4QzA0NkZBNjBBRAorOjEwMjZDMDAwMDI2OUMwNDY3QTYxNDA2OUMwNDZCODYxMkU0QkM4MTg5RAorOjEwMjZEMDAwMDQ5MDAwRjAzN0Y5MDQ5ODAwRjA4OEY4MDBGMEY2RkE1QQorOjEwMjZFMDAwNzg4QUYxOEI4ODQyMDREMUY5NkEwODE4MDRFMDM4RTA0RQorOjEwMjZGMDAwMzJFMDNBNkIxMDE4NDAxQTgxMDcwMkQwODAwODgwMDAzRgorOjEwMjcwMDAwMDQzMDYxNkIwOTFBQTI2QjkxNDIwMEQyMjA2QkMwNDY2MworOjEwMjcxMDAwMjA2MkU4N0IwMDI4MDhEMDAwMjJFQTczMDU5OTQ4NjkwNgorOjEwMjcyMDAwMDEzODQ4NjE3ODZCMDBGMDczRkExODQ4ODA2QTgwMDZCNworOjEwMjczMDAwODAwRTAxMjgwQUQxMjA2QTAwMDMwMDBCMEI0Q0ExNkEwRAorOjEwMjc0MDAwODg0MjAzRDAwNkIwRjBCQzA4QkMxODQ3MDEyMDQwMDQwMgorOjEwMjc1MDAwMDg0OUMwNDYwODYwMDZFMEUwNjgwMDI4MDFEMDAwRjBBMworOjEwMjc2MDAwQjVGQTAxMjBBODczRURFNzY4MEUwMDgwMDA0MDE0NDAyMAorOjEwMjc3MDAwQTQyQTAwODAwMDAwMDBCMDI4MUEwMDgwNTU1NTU1NTU0NQorOjEwMjc4MDAwQTgwMzAwODA2ODFBMDA4MEM0MEIwMDAwMDAwMDEwNDBGRAorOjEwMjc5MDAwODBCNTA3MUM3ODZBNDA4OUZGMjEwMTMxMDE0MDEwNDg0QgorOjEwMjdBMDAwMDJEMTgxNkMwMTMxODE2NDc5NkE0OTg5NDkwQjAyRDI3NQorOjEwMjdCMDAwNDE2QzAxMzE0MTY0MEI0ODQxNkEwMTMxNDE2Mjc4NkFFMAorOjEwMjdDMDAwMzk2QkMwNDY0ODYyMzg2QjAwRjBGOEZCMzgxQzAwRjBFQgorOjEwMjdEMDAwQjNGODAxMjAwNDQ5QzA0NkM4NzM4MEJDMDhCQzE4NDc0MAorOjEwMjdFMDAwQTQyQTAwODBBMDgyMjA0MDE4MUEwMDgwRjhCNTA3MUM5NworOjEwMjdGMDAwMDAyMkY5MUQ2MTMxMEQxQzc4NkFDMDQ2MDA5MDQwODlBNQorOjEwMjgwMDAwMDMwQzAxRDI0MDBBMDNEMjM4MUNGRkY3QzFGRjY3RTA3NgorOjEwMjgxMDAwMzU0OEMwNkIwMDA5MUZEMzA4Nzg0MDA4MUNEMjAwMjAzRgorOjEwMjgyMDAwNDMwMENDNUEzMTRFOUUxOTMzMjM5QjAxRjMxODFCODg2OQorOjEwMjgzMDAwOUM0MjBFRDBCODY5Mzk2QkMwNDY4ODYxRjg2ODM5NkIyNAorOjEwMjg0MDAwQzA0NkM4NjAzODFDMDBGMDI3RjkzODFDMDBGMDc0Rjg0NgorOjEwMjg1MDAwNDZFMDAxMzAwMzI4RTNEQjAyMjA0MzAwNUMxOEU0ODhGMworOjEwMjg2MDAwMjI0RTlFMTkzMzIzOUIwMUYzMTgxQjg4OUM0MjAzRDFFRgorOjEwMjg3MDAwMDEyMzAxMzhEODQyRjBEQzAxMjNEODQyQzREMDFCNEVEQQorOjEwMjg4MDAwMEIyMzFCMDJGMDE4NDA2OTAwMjgyNEQwN0Q2MzAwOThCOAorOjEwMjg5MDAwNDA4OTAwMEMxRkQyMDAyNDJEMjM5QjAxRjAxOEMwNkIyRgorOjEwMjhBMDAwMzUxQzAwMjgxN0QwRkUxRDJEMzZBMjAwNTIxOTJEMjNFRAorOjEwMjhCMDAwOUIwMUQyMThEMjZCMzgxQzMxMUMwMkYwN0JGQzAxMjgyMgorOjEwMjhDMDAwMEVEMDAxMzRBMDAwNDAxOTJEMjM5QjAxQzAxOEMwNkIwRAorOjEwMjhEMDAwMDAyOEVBRDEwMUUwMDEyQTAyRDAzODFDMDBGMDA4RjhGMworOjEwMjhFMDAwRjhCQzA4QkMxODQ3MDAwMEU4MUEwMDgwNjgwRTAwODA5OQorOjEwMjhGMDAwODBCNTA3MUNCODY5Mzk2QkMwNDY4ODYxRjg2ODM5NkJDOAorOjEwMjkwMDAwQzA0NkM4NjA3ODZBNDA4OTAxMEMwRUQyNDAwQTBDRDNEOAorOjEwMjkxMDAwMzg2ODQwMDgwMkQzMzgxQzAyRjAwQ0ZDMzgxQzAwRjA2OAorOjEwMjkyMDAwQkJGODM4MUMwMEYwMDhGODAyRTAzODFDRkZGNzMwRkY1NQorOjEwMjkzMDAwMDEyMDgwQkMwOEJDMTg0NzAxMjEwMDZCNDA2QUMwNDZEQQorOjEwMjk0MDAwMDE2MDcwNDdCMEI0QzExRDM5MzEwOThCODkwODA5MDQ5MQorOjEwMjk1MDAwMDkwQzg0NkFDMjFENjEzMjAwMjAwMDI5MENERDg3MDA0OQorOjEwMjk2MDAwM0QxOTAxMjM5QjA3MkI0MzFCNjhDMDQ2RDM1MTAxMzBGRgorOjEwMjk3MDAwMDAwNDAwMEM4ODQyRjJEQkIwQkM3MDQ3RjBCNUEwQjA5OAorOjEwMjk4MDAwMDEyMzlCMDdDMTFEMjEzMTE5NDMwOTY4QzA0NjBCOTFFMgorOjEwMjk5MDAwQzExRDUzMzExOTQzMUY5MTA5NjgwMUFGRkExRDM5MzIyNgorOjEwMjlBMDAwMUU5MjE3QUI1OTgwM0E0OTAxMjM5QjA3MEE2QTEzNDNDOQorOjEwMjlCMDAwQ0MxRDExMzQ4OTY5MDkwMzA5MEIyMjY5RTU2OEMwNDZGOQorOjEwMjlDMDAwMUQ5NUZDMUQzOTM0NjQ4QjY0MDkwNTM0MjQwNjI0MEVERQorOjEwMjlEMDAwMUM5NDU2MUExQjk2MUM5QzJFNEFDMDQ2MDA5MjAxMjYzNworOjEwMjlFMDAwMUQ5RDFBNjg5MTQyMDFEMTMyMUMwQkUwOTE0MjAzRDkxRQorOjEwMjlGMDAwNTIxQjFCOUVCNTE4MDBFMDU1MUEwMTIyMjQwMUFDNDI1RgorOjEwMkEwMDAwMDBEMzAwMjIwMTJBRTZEMTkxMDcwMTQzMDk2OEMwNDY5QworOjEwMkExMDAwMzk2MDkzMDcwMTFEMTk0MzA5NjhDMDQ2Nzk2MEMxMUREQgorOjEwMkEyMDAwMDEzMTE5NDMwOTY4QzA0NkI5NjAxRjk5MDk2ODFFOUFBNworOjEwMkEzMDAwQzA0NjUxODNDMTFEMUQzMTE5NDMwOTY4QzA0NjM4NjMyMgorOjEwMkE0MDAwNzk2MkMxMUQxMTMxMTk0MzA5NjhDMDQ2Qjk2MUMxMURDMAorOjEwMkE1MDAwMDUzMTE5NDMwOTY4QzA0NkY5NjBDMTFEMTczMTE5NDM5MgorOjEwMkE2MDAwMDk2OEMwNDZGOTgzMEUzMDE4NDMwMDY4QzA0NkY4ODFGMworOjEwMkE3MDAwMzg2ODQwMDgwMkQzMzgxQzAyRjA1Q0ZCMzgxQzAwRjBCOAorOjEwMkE4MDAwMEJGODM4MUNGRkY3NThGRjIwQjBGMEJDMDhCQzE4NDcwMworOjEwMkE5MDAwQTgwMzAwODA1NTU1NTU1NUY4QjUwNzFDRjgxRDM5MzA2OQorOjEwMkFBMDAwNDE4QjM5NEE5MTQyMDBERDQyODM0MjhCQzA0NjAwOTJGRAorOjEwMkFCMDAwMDEyMDNBMUQwNkNBQkI2QTAyRjAwRUZGMzM0QUMwNDYyNworOjEwMkFDMDAwMDA5MjMzNEUzMDZBMzM0Q0UxNkQ0MTE4Mzg2QkMzMURCMAorOjEwMkFEMDAwMDUzMzAxMjA3MjZBMDJGMEZCRkVFMDZEMTgzMDAwMjUxQworOjEwMkFFMDAwQjE2QTgxNDIwMUQ4RTU2NTAwRTBFMDY1MkYyMzlCMDFEMgorOjEwMkFGMDAwMjAxQ0UxNkRFNDE4MjI2ODkyMDAyNzRCQzA0Njk5NTBEMworOjEwMkIwMDAwMjY0OEMxNkI0QTA4MDVEMzQ5MDg0OTAwQzE2MzAxMjAyMgorOjEwMkIxMDAwMDFGMEQ2RkYyMjRBMUY0OEMxMUQ4OTMxMEI3ODAwMkJENgorOjEwMkIyMDAwMDJEMDQ5NzgwMDI5MDBEMTFFNEFDMDQ2MDA5MjIwNjg5MAorOjEwMkIzMDAwODAwMDE5NEJDMzE4MDVDRUMxMUQxMTMxMDEyMDAyRjBEMAorOjEwMkI0MDAwQzdGRTE0NDgyMTY4MDEzMTIxNjAxNzI5MDBEMzI1NjA5MAorOjEwMkI1MDAwMzk2QkMwNDYwRDY1Nzk2QTNBNkJDMDQ2NTE2MjMzMjNDMgorOjEwMkI2MDAwOUIwMUMwMTg4MTY4MDAyOTAzRDEzOTZCQzA0NjgxNjA4MAorOjEwMkI3MDAwMDRFMDM5NkJDMjY4QzA0NjExNjUzOTZCQzA0NkMxNjA1QworOjEwMkI4MDAwRjhCQzA4QkMxODQ3MDAwMEVBMDUwMDAwMTgwMDE0MDI1MQorOjEwMkI5MDAwN0MyOTAwODA2ODBFMDA4MDQ0ODIyMDQwRTgwRTAwODA3RQorOjEwMkJBMDAwMDQwMDAwMDIwNDAwMDAwM0YwQjUxMTRFRkYyNTAxMzVCQQorOjEwMkJCMDAwMTA0RkMwNDYzNTYwNzg2OTAxMzg3ODYxQkM2ODAwMkNEOAorOjEwMkJDMDAwMTBEMDIwNkRDMDQ2Qjg2MDIwMUMwMEYwMjFGODIwMUNGOQorOjEwMkJEMDAwMDBGMDA0RkEwODQ4ODA2QTAwMEMwMDA3RTlEMUYwQkM1NAorOjEwMkJFMDAwMDhCQzE4NDcwNTQ4QzE3OTAxMzFDMTcxRjdFNzAwMDBGOQorOjEwMkJGMDAwMDAwMDAwQjAyODFCMDA4MDAwMDAxMDQwQTA4MjIwNDA5MAorOjEwMkMwMDAwMDEyMDgwMDMwMTQ5QzA0NjA4NjA3MDQ3MDAwMDAwQjAwMQorOjEwMkMxMDAwOTBCNTA3MUMzODY4QzAwODA5RDMxRDQ4MDE2QTAxMzlGRQorOjEwMkMyMDAwMDE2MjIwMzAwMDc5MDAyODAxRDBGRUY3RTlGRDAxMjM4MAorOjEwMkMzMDAwOUIwN0Y4MUQxRDMwMTg0MzAwNjgxNjRDNjE2QTgxNDJERAorOjEwMkM0MDAwMjFEMTAxMUMxOTQzMDk2ODA5MDQwOTBDMDEyOTFBRDE3MQorOjEwMkM1MDAwMDBGMDIyRjg2MDYyNjA2QTIxNkE4ODQyMDVEMDAxMjE5MgorOjEwMkM2MDAwODkwNzAxNDMwOTY4MDkwNEYyRDA1MTIxODkwMzYyNkE4NgorOjEwMkM3MDAwMjM2QjlBNDIwMkQxNjA2QkEyNkI4MDFBMDQzOEM4NjA0MQorOjEwMkM4MDAwOTBCQzA4QkMxODQ3MDAyMDc5NkFDMDQ2MDg2MEY3RTc4NgorOjEwMkM5MDAwNkMwNjAwODBFODFBMDA4MDAxMjM5QjA3QzExRDAxMzFFQQorOjEwMkNBMDAwMTk0MzA5NjgwOTA0MDkwQzA4MTgwRDMwODEwNzAyRDA3RQorOjEwMkNCMDAwODAwODgwMDAwNDMwMDQ0OThBNkIxMjE4NEI2QjlBNDJEQQorOjEwMkNDMDAwMDBEOTA4NkI3MDQ3MDAwMEU4MUEwMDgwMDBCNTA0NDg3RQorOjEwMkNEMDAwQzA2ODEwMjgwMUQzMDBGMDA1RjgwOEJDMTg0NzAwMDBCMAorOjEwMkNFMDAwRTgxQTAwODA4OEI1MEM0RjM4NzkwMDI4MTFEMTBCNDlCQgorOjEwMkNGMDAwMTAyMDAyRjBGNUZEMDAyODBCRDAwMTIwMzg3MTA4NEFBMQorOjEwMkQwMDAwQzA0NjAwOTIwNzQ4NDI2ODA3NEIwMTY4MDAyMDAyRjA2NQorOjEwMkQxMDAwREZGRDg4QkMwOEJDMTg0N0Y4MUEwMDgwRjUyQ0ZGRkZCRgorOjEwMkQyMDAwMTAwMDM1MDI3QzI5MDA4MDQ0ODAyMDQwOTBCNTAxMjBBRAorOjEwMkQzMDAwNDAwMjEwNDlDMDQ2MDg2MDBGNEYxMDIxRjgxRDNEMzA3OQorOjEwMkQ0MDAwMDJGMDRDRkMxOTIzREIwMUZDMThFMDY4MDAyODAxRDBEQworOjEwMkQ1MDAwMDBGMDE0RjgwMDIwQzkyMzFCMDFGOTE4MDg3MUUwNjg3RAorOjEwMkQ2MDAwMTAyODA0RDMwMTIwQkIyMzFCMDFGOTE4NDg3MzkwQkMyMQorOjEwMkQ3MDAwMDhCQzE4NDcwMDAwMDBCMDY4MEUwMDgwRjhCNTM3NDg1RQorOjEwMkQ4MDAwMTkyM0RCMDFDMTE4Qzk2ODM1NEQxMDI5MDBEOTEwMjE1QworOjEwMkQ5MDAwNjk2MjMyNDhDMTZDMDA2RTgxNDIwN0Q5MDgxQTA3MDk3RQorOjEwMkRBMDAwMDAyNDY4NkFCODQyMTJEMjA3MUMxMEUwODE0MjJBRDI3RAorOjEwMkRCMDAwMkM0QTUyNkIxMDFBMDcwOTY4NkFCODQyMDVEOTBDMDlFNworOjEwMkRDMDAwMzkxOTg4NDIwM0QyQzQxQjAxRTAwMDI0MDcxQzNFMTlCNAorOjEwMkREMDAwMzAwMTI1NDkwMkYwODRGRDAwMjgzREQwMjM0ODAwMkMxNQorOjEwMkRFMDAwMUFEMTFFNDkzQTAxNkY2MjA5NkU4QzE4MUQ0RDZCNkIyQQorOjEwMkRGMDAwQTM0MjAwRDhFNDFBMUU0QjFBNDMwMDkyRUE2QTUxMTgwMworOjEwMkUwMDAwMkE2QjAzMUMyMEUwMUI0ODAxNkIwMTMxMDE2MzAwMjA4OQorOjEwMkUxMDAwNjg2MkY4QkMwOEJDMTg0NzEwNDkyNDAxM0YwMTExMjIyMAorOjEwMkUyMDAwNTIwNTNBNDM2RTYyMDA5MjBFNERFQTZBMDk2RTUxMThERAorOjEwMkUzMDAwMDMxQzA2MUMwMDIwMkE2QjAyRjA0QUZEMEM0QTIyNDNBOAorOjEwMkU0MDAwMDA5MkJCMTlFOTZBMkE2QjAwMjAwMkYwNDFGRDAzNDg5OQorOjEwMkU1MDAwQzA0NjA0NjYwMEYwMTBGODAxMjBEQUU3NjgwRTAwODAzMgorOjEwMkU2MDAwMjgxQjAwODA3QzI5MDA4MDVEMkVGRkZGNDQ4MDIwNDBDRAorOjEwMkU3MDAwMDAwMDM2MDJBMDgyMjA0MDA0NDgwMTZFMDQ0QTgwMzBERgorOjEwMkU4MDAwRDE2MDAyMjNDMTZCMTk0M0MxNjM3MDQ3NjgwRTAwODA5MworOjEwMkU5MDAwOTBFRTIwNDBGMEI1ODRCMDAxMjA4MDAyMUM0OUMwNDY2RAorOjEwMkVBMDAwMDg2MDAwMjcxQjRFMzMyMzlCMDFGNTE4Njg2QTAwMjgzMQorOjEwMkVCMDAwMUREOTE5NEM2ODQ2MTAyMTAyRjA5MEZCNjg0NjAwRjBCRAorOjEwMkVDMDAwMzNGODAwMjgwNEQwMTU0OTQ4NjkwMTMwNDg2MTBBRTAwOAorOjEwMkVEMDAwMTM0OTYwN0IwMTMwNjA3Mzg4NzkwMTMwODg3MTExNDgzMworOjEwMkVFMDAwMDA2ODAyRjA2NUY5Njg2QTAxMzdCODQyRTJEOEJCMjM4RQorOjEwMkVGMDAwMUIwMUYwMTg4MTdCMDAyOTAzRDAwMDIxODE3M0ZGRjdBQgorOjEwMkYwMDAwMDVGQkZGRjdFM0ZFMDRCMEYwQkMwOEJDMTg0NzAwMDA2NworOjEwMkYxMDAwMDAwMDAwQjA2ODBFMDA4MEIwODIyMDQwMDg4MzIwNDA4RQorOjEwMkYyMDAwQTA4MjIwNDA1ODA0MDA4MDkwQjQxNzRGMTkyM0RCMDE4MQorOjEwMkYzMDAwRjkxODAwMjJDQjY4MDAyQjIzRDAwMTNCQ0I2MDMzMjM1MAorOjEwMkY0MDAwOUIwMUZGMThCQjY5MUM2REMwNDZCQzYxMDQ2OEMwNDY4QworOjEwMkY1MDAwNUM2MDQ0NjhDMDQ2OUM2MDg0NjhDMDQ2MUM2MUMwNjg3MAorOjEwMkY2MDAwQzA0NjU4NjExQTY1MDg2OTQyMUMwQTYxMDAyODAzRDBFRQorOjEwMkY3MDAwMzg2QUMwNDYwMzY1MDBFMEZCNjEzQjYyMTgxQzkwQkNFOAorOjEwMkY4MDAwNzA0NzEwMUNGQkU3MDAwMDY4MEUwMDgwMEE0QTMzMjNEQworOjEwMkY5MDAwOUIwMUQxMThDODY5MTkyM0RCMDFEMjE4MTM2OTAwMkJEMgorOjEwMkZBMDAwMDZEMDAxM0IxMzYxQ0E2OTEyNkRDMDQ2Q0E2MTcwNDcwMQorOjEwMkZCMDAwMDAyMTExNjFGQkU3MDAwMDY4MEUwMDgwMDY0QTExNjlEQworOjEwMkZDMDAwNEIxQzEzNjE0MDMyMDAyOTAxRDBEMTY5MDBFMDAwMjE3RgorOjEwMkZEMDAwMDE2NUQwNjE3MDQ3MDAwMEU4MUEwMDgwMDY0QUQxNjg5OAorOjEwMkZFMDAwNEIxQ0QzNjA0MDMyMDAyOTAxRDA5MTY5MDBFMDAwMjFFMAorOjEwMkZGMDAwMDE2NTkwNjE3MDQ3MDAwMEU4MUEwMDgwOTBCNDAwMjFEQworOjEwMzAwMDAwMEY0QTk3ODk5MjZBNEIwMDFCMTg5QjhBMDAyQjEyRDA5QgorOjEwMzAxMDAwQkI0MjEwREMxQzFDNTgyMzYzNDNEMzE4REMxRjQ5M0MwMworOjEwMzAyMDAwMDEyMzlCMDcyMzQzMUI2ODFCMDYxQjBFMDMyQjAyRDBBNworOjEwMzAzMDAwMDAyMDkwQkM3MDQ3MDEzMTA0MjlFNEQzMDEyMEY4RTc1NworOjEwMzA0MDAwNEMyQTAwODBGN0I1ODZCMDNENEEwNzFDRDE2OThGNDBGNQorOjEwMzA1MDAwMDMxQzE0NkFFMzQwNUY0MDA3OUU4RTQwNzc0MENGNDBEOAorOjEwMzA2MDAwOTQ2OUMwNDYwNTk0MDMxQ0EzNDAwMDI1MTQ2OUMwNDYxQQorOjEwMzA3MDAwMDQ5NDAwMkM1REQ5MUMxQzMyNEUyNjQzOTQ2OUU2NDAxMgorOjEwMzA4MDAwMzMxQzAzOTY1MzZBQzA0NjAyOTNEMjZBQzA0NjAxOTIyQgorOjEwMzA5MDAwQkIwMDAyOUFEMjU4MTMxQzA1OUNFMzQwMDM5Q0EzNDIzOAorOjEwMzBBMDAwM0VEMThBNDBDQTQwMTQxQzYzMDAxQjE5NUIwMTAxOUE3RgorOjEwMzBCMDAwRDIxODAxMjM5QjA3RDYxRDAxMzYzMzQzMUI2ODFCMDYxQworOjEwMzBDMDAwMUIwRTAzMkIyQ0QxMDEyMzlCMDdENjFENTEzNjMzNDNGNgorOjEwMzBEMDAwMUI2ODA3OUUxRTQwMDA5NjAxMjM5QjA3RDYxRDQ5MzY5QworOjEwMzBFMDAwMzM0MzFCNjg4MzQyMUJEMTAxMjM5QjA3RDYxRDREMzZGQQorOjEwMzBGMDAwMzM0MzFCNjgwMDlFQjM0MjEyRDEwMTIzOUIwNzFBNDMzRQorOjEwMzEwMDAwMTI2ODEyMDQxMjBDMDg5QjMyMkIwNEQxMDIyQTA3RDEzOAorOjEwMzExMDAwMjAwNDAwMTQwRkUwMDg5QjMzMkIwMUQxMDEyQUY3RDBDMworOjEwMzEyMDAwMDQ5QTAxMzc5NzQyMDBEMzAwMjcwNDlBMDEzNUFBNDIzNgorOjEwMzEzMDAwQUVEODAwMjBDMDQzMDlCMEYwQkMwOEJDMTg0NzAwMDA1RQorOjEwMzE0MDAwNEMyQTAwODAwMDAwMDA4MEYwQjUyNzRENjg2OTAwMjhGNworOjEwMzE1MDAwMDZEMDI2NDgwMDY4MDJGMDJCRjhGMEJDMDhCQzE4NDdERgorOjEwMzE2MDAwMjM0QzAwMjZBMDY4MjM0RjAwMjgxNkQwMEZFMDI4NkFDMQorOjEwMzE3MDAwMDIyODAyRDMwMTIwMzg3MTBGRTBBNjYwRkRGN0RFRkVDMQorOjEwMzE4MDAwMDAyOEVBRDEyODZBMDIyODAxRDMwMTIwMzg3MUU4NjhCMgorOjEwMzE5MDAwMDAyODAyRDAzODc5MDAyOEU5RDA2ODY4MDAyODFCRDBDMAorOjEwMzFBMDAwMDEyMEEwNjBGRUY3QkNGQjAwMjhENkQxNjg2ODAwMjg4QgorOjEwMzFCMDAwRjZEMTExRTAwMDI4RDBEMTI4NkEwMjI4MDJEMzAxMjBEQworOjEwMzFDMDAwMzg3MUNBRTdBNjYwRkRGN0I5RkUwMDI4QzVEMTI4NkFBNAorOjEwMzFEMDAwMDIyODAxRDMwMTIwMzg3MUU4NjgwMDI4QkREMDM4Nzk3MQorOjEwMzFFMDAwMDAyOEU3RDBCOUU3MDAwMDZDMDYwMDgwNUMwNDAwODA4RQorOjEwMzFGMDAwNEMyQTAwODA4QzA2MDA4MDcwNDcwMDAwNzA0NzAwMDA1OQorOjEwMzIwMDAwNzA0NzAwMDA5MEI1NDAyMDFENDlDMDQ2MDg2MDAxRjA5RAorOjEwMzIxMDAwOURGQzAzMjMxQjA3NDE2ODE5NDAwQzBGNjEwMTA5MUIyQQorOjEwMzIyMDAwODkwMDE4NEE4RjE4MDEyMTM5ODA4MTZBQzA0Njc5NjU2MgorOjEwMzIzMDAwNDE2QUMwNDY3OTY3Qjk2Q0ZBNkM4OTE4Qjk2NDAwMjE5MworOjEwMzI0MDAwRjk2NEJBNkIzQjZERDIxOEJBNjMzOTY1NDI2QTIwMzJCMQorOjEwMzI1MDAwNTE3MTc5NkQ3QTZGRDI2REMwNDYxMTYwRkNGN0NBRkY2QgorOjEwMzI2MDAwMjAwMTA5NDk0MDE4MTkyM0RCMDFDMDE4NDE2QjAxMzlCRAorOjEwMzI3MDAwNDE2Mzc4NkYwMUYwQzZGQjkwQkMwOEJDMTg0NzAwMDBBMgorOjEwMzI4MDAwMDAwMDAwQjA1QzJCMDA4MEEwMUMwMDgwRjBCNTQwMjA0NgorOjEwMzI5MDAwMTI0OUMwNDYwODYwMDFGMDU5RkMwNzFDNDA2ODAzMjMyRQorOjEwMzJBMDAwMUIwNzE4NDAwNjBGNzAwMTgwMUI4MDAwMEM0OTQ0MTg1MgorOjEwMzJCMDAwQjg2QUMwNDY2MDY1Nzg2QUMwNDY2MDY3ODA2RjA1MUQ2MQorOjEwMzJDMDAwRTU2M0I5NjkyODFDMDJGMDg5RjkzODFDMjExQzMyMUNGRAorOjEwMzJEMDAwMkIxQzAwRjAyMEY4RjBCQzA4QkMxODQ3MDAwMDAwQjAyMAorOjEwMzJFMDAwNUMyQjAwODBGMEI1NEI2RjlCNkYxRjFEQ0Y2MzA1Njg5MworOjEwMzJGMDAwMDAyMzg0NjlBNDA4MDhEMDlDMDAyRTU5QzA0NjNFNTE4MgorOjEwMzMwMDAwODQ2OUE0MDgwMTMzOUM0MkY2RDgzQjFDMDBGMDAzRjgwMgorOjEwMzMxMDAwRjBCQzA4QkMxODQ3RkZCNTgxQjAwNDFDMUQxQzBGMUM3NQorOjEwMzMyMDAwNDY0ODAxNjkwMTMxMDE2MUY5MUQ1MTMxQkQ2NTAwOTFDNgorOjEwMzMzMDAwMjAxQ0ZERjc1REZDRjg2RDQwMDkzNkQyQjg2RDA2N0JBOAorOjEwMzM0MDAwNDM3QjFCMDIxRTQzMTcyMTQ5MDIwMTczMEIwQTQzNzM3RgorOjEwMzM1MDAwMDA5OTIwMUNGREY3NENGQ0I4NkRDMDQ2MDY3MzMzMEE3QgorOjEwMzM2MDAwNDM3M0Y4NkQ0MDA5MjBEMjYwNjgwMTA0MDkwQzAzOTg4QQorOjEwMzM3MDAwMDFGMENDRkM2MDY4MzI0QjE4NDM2MDYwMjAxQzAxRjAwNworOjEwMzM4MDAwMzVGRDAwMjU3RDYwQkQ2MDNENjQ3RDY0MjAxQ0ZDRjczQgorOjEwMzM5MDAwMzFGRjM4ODg0MDIzMTg0MzM4ODA3RDYyMjk0OEMwNDY3MQorOjEwMzNBMDAwQjg2MjM4MUMwMEYwQTBGQjQ0RTAyMDY4MDEyMzlCMDdCMgorOjEwMzNCMDAwMDgzODE4NDMwMDY4QzA0Njc4NjQ2MDY4MDIwNDEyMEMzQworOjEwMzNDMDAwNzg2RTAxMjZDMTFEMEQzMThBNDIwMkQyM0E2NDA4MUM3MgorOjEwMzNEMDAwMEVFMDQxMTk4OTg5RjAyMzE5NDAwOTA5ODkwMDQwMTgzNAorOjEwMzNFMDAwRjg2MEY5NjE2MTY4MDkwNDA5MEM4MTQyMTZEMjM5NjRGOAorOjEwMzNGMDAwNjM2ODE5MDQwOTBDNDAxQTAzMzA4MDA4ODIwMEEwNjEzOAorOjEwMzQwMDAwMjA2ODA5MTg5QjE4NjM2MEMzMUYwNTNCMzgxQzAwRjAzNworOjEwMzQxMDAwQjZGQTdFODAyMDFDMDBGMEJGRkIwQkUwQjk2ODA4MUFFQQorOjEwMzQyMDAwMDAyNTc4NjJCRDYyMzgxQzAwRjAzQ0ZDMjAxQzM5MUM3MQorOjEwMzQzMDAwMDBGMDY0RjgwNUIwRjBCQzA4QkMxODQ3MEMyQjAwODAwNQorOjEwMzQ0MDAwMDAwMDAwODAwMTAwMDBDMEYwQjUwNDFDMEYxQzM4NkNBNworOjEwMzQ1MDAwRjk2QjBEMTgyMTY4NDExODAwMjBBMjY5MDAyQTBCRDlDOAorOjEwMzQ2MDAwODIwMDU2MTgwMTIzOUIwNzMzNDMxQjY4QzA0NkFCNTBBQworOjEwMzQ3MDAwQTI2OTAxMzA4MjQyRjNEODc4NkVGOTZCMDkxODg5ODkwNAorOjEwMzQ4MDAwRjAyMzE5NDAwOTA5ODkwMDQwMThGODYwRjk2MTIwNjhBMworOjEwMzQ5MDAwMDEyMzlCMDcwODM4MTg0MzAxNjg3ODZDRkNGNzk1RkZGNworOjEwMzRBMDAwNzg2NDYwNjgwMTA0MDkwQ0Y4Njg4MTQyMTlEMjM5NjRCMworOjEwMzRCMDAwNjM2ODE5MDQwOTBDNDAxQTAzMzA4MDA4ODIwMEEwNjE3NworOjEwMzRDMDAwMjA2ODA5MTg5QjE4NjM2MEMzMUYwNTNCMzgxQzAwRjA3NworOjEwMzREMDAwNTZGQTAxMjA3ODgwMjAxQzAwRjA1RUZCRjBCQzA4QkM4RQorOjEwMzRFMDAwMTg0N0I5NjgwODFBNzg2MjAwMjBCODYyMzgxQzAwRjBFMgorOjEwMzRGMDAwRDlGQjIwMUMzOTFDMDBGMDAxRjhFRkU3RjBCNTg0QjBDRgorOjEwMzUwMDAwMDQxQzBGMUM4RTQ4NDE2OTAxMzE0MTYxMDMyMDAwMDdGMgorOjEwMzUxMDAwNjE2ODA4NDAwNjBGMEEwNDEyMEMyMDY4MTExOEZCNjg0NQorOjEwMzUyMDAwRDIxQTdCNjg5RDFBQzMxRjA1M0IzODFDMkExQzAwRjA2OQorOjEwMzUzMDAwMjZGQTAwMjA3ODgwMjAxQzAwRjAyRUZCNjA2ODQwMTlERAorOjEwMzU0MDAwMDEwNDA5MEM2MDYwMzAxQzAxRjBFMEZCN0Q0RTBCMjM5MAorOjEwMzU1MDAwMUIwMkYwMTgwMDY5MDAyODE5RDAwMDI1MkQyMzlCMDFCQgorOjEwMzU2MDAwRjAxOEMwNjgwMDI4MTJEMEFBMDA5MjE5MkQyMzlCMDFFMAorOjEwMzU3MDAwRDIxOEQyNjgyMDFDMzkxQzAxRjAxQ0ZFMDEzNUE4MDBBRAorOjEwMzU4MDAwODAxOTJEMjM5QjAxQzAxOEMwNjgwMDI4RUNEMUY4NkI2RQorOjEwMzU5MDAwMDExRjhBMUNGQTYzRkE2ODdENkMwMEYwQkJGOUMwNDMxNgorOjEwMzVBMDAwMDEwNDA5MEMyODFDRkNGNzEwRkYwMzkwRjk2QjNBNkUxQworOjEwMzVCMDAwOEUxODIwNjgxMjE4MDE5MjdBNkU4RDE4MTExODAyOTFENworOjEwMzVDMDAwQzgxRDA5MzBFMDYwQjE4ODA4MDIwOTBBMDkwNjA5MEUyMQorOjEwMzVEMDAwMDg0MzAwMDQwMDBDNzg2MTY4NjgwMTBFRkYyMjEyMDRBMQorOjEwMzVFMDAwMDI0MDEyMEExMTQzRkYyMjEyMDIwMjQwMTIwMjExNDM0QQorOjEwMzVGMDAwMDAwNjA4NDMzODYxQTg4OTA5MjMxQjAyMTg0MEI4NjFGNgorOjEwMzYwMDAwQTg4OTk4NDNBODgxQTg4OTAyOTlDMDQ2ODg4MTAwMjA4QQorOjEwMzYxMDAwNzA4MEIwODA3MDgxNjg2MDI4ODJCOTZFMzAxQ0ZDRjdDMQorOjEwMzYyMDAwRThGRTM4ODZGQTY5MzAxQzI5MUNGQ0Y3MDNGRjc4ODYwRgorOjEwMzYzMDAwM0Q4RTc4OEUwMzk5RkNGN0M4RkUwMDkwNjA2ODAwMDQwOAorOjEwMzY0MDAwMDAwQzM5NkU0MTFBMDkwNDA5MEM3QTZFODIxQTEzMDRBRgorOjEwMzY1MDAwMUIwQzFBMDIxQjBBMUE0MzE2MDQzNjBDQkE2ODgyNDI2MworOjEwMzY2MDAwMDFEMjAwMjAwMEUwMTAxQUI4NjAwODAyMDkxMjA5MDYxMQorOjEwMzY3MDAwMDkwRTA4NDMwMTA0MDkwQzAxOThDMDQ2NDE4MDI4MUMyQQorOjEwMzY4MDAwRkNGN0EzRkUwNTFDMDA5ODMxMUNGQ0Y3OUVGRTA2MUNFRgorOjEwMzY5MDAwNzg2OTAwMDQwMDBDMDEwMjAwMEEwODQzMDEwNDA5MENDNworOjEwMzZBMDAwMDE5OEMwNDY4MTgwMjgxQ0ZDRjc4RkZFNzk2OTAxMzFBMgorOjEwMzZCMDAwQzA0Mzc5NjEwMTlBQzA0NjUwODEzODY5MDEwRUZGMjJFQQorOjEwMzZDMDAwMTIwNDAyNDAxMjBBMTE0M0ZGMjIxMjAyMDI0MDEyMDJBNworOjEwMzZEMDAwMTE0MzAwMDYwMTQzMzAxQ0ZDRjc3N0ZFMzk2OTdBNjgxNAorOjEwMzZFMDAwODkxODM5NjFCOTY4MDAyOTA5RDEwMjk5ODk4OUJBNjlBQgorOjEwMzZGMDAwMTE0MzAyOUFDMDQ2OTE4MUI5NjlGQ0Y3NjZGRTIwODJBNworOjEwMzcwMDAwMDAyMDYwODJGODZENDEwODE2RDM4MDBBMEFEMzYwNjhGMQorOjEwMzcxMDAwMTAzODAxMDQwOTBDMDgwMjA5MEEwODQzMjE2OEMwNDY1MAorOjEwMzcyMDAwMDg4MjA5RTA2MDY4MEMzODAxMDQwOTBDMDgwMjA5MEFFMworOjEwMzczMDAwMDg0MzIxNjhDMDQ2ODg4MTA0QjBGMEJDMDhCQzE4NDcyMworOjEwMzc0MDAwMEMyQjAwODA2ODBFMDA4MEYxQjU4NEIwNkU0RDI4NjlBNgorOjEwMzc1MDAwMDEyMjA0OTk4QTQwOTA0MzI4NjEwNDk4NDMwMTE4MUE3MQorOjEwMzc2MDAwODAwMDE2MUM2OTQ5NDQxOEUwNkJDMDQ2MDA5MEEwNjhCMAorOjEwMzc3MDAwMDAyODAxRDEwMDI2MjZFMDY1NDg0MTY5MDEzMTQxNjFGOAorOjEwMzc4MDAwMDQ5OEZDRjcwOUZEMDcxQzAzRDEyODY5MzA0MzI4NjEyMAorOjEwMzc5MDAwQjVFMEEwNjg2NTY4QTg0MjAwRDIwNTFDQTE2Q0E5NDJFQQorOjEwMzdBMDAwMTZEMjQwMUE2MjZBMTAxQTAwMjY2MDYyQTY2MEE2NjJFQgorOjEwMzdCMDAwMjA4ODQ4MjMxODQzMjA4MDBEMUMwOUQxMzgxQ0ZDRjdCMQorOjEwMzdDMDAwMTlGRDAzMjA2MDgwNjY2MDIwMUMwMEYwOERGOTk2RTBGMgorOjEwMzdEMDAwRTE2ODM4NjgwOTE4QzMxRjA1M0IyMDFDMDIzOTJBMUMwMAorOjEwMzdFMDAwMDBGMENERjgzODFDMDBGMEQ3RjlFMDY4NDYxOTc4Njg4OQorOjEwMzdGMDAwMzA0Mzc4NjAwNDk4MzExQzAxRjA4OEZBMjE2RTAwOThGQgorOjEwMzgwMDAwMDgxODAxOTA3MDFBMDAwNDAwMEM2MTZFNzExQTBBMDQwNQorOjEwMzgxMDAwMTIwQzExMDIxMjBBMTE0MzA5MDQwOTBDMDI5MTAxMDI0RgorOjEwMzgyMDAwMDAwQTA4NDMwMTA0MDkwQzAxOThDMDQ2NDE4MDIwOEUxQgorOjEwMzgzMDAwRkNGN0NCRkQwNjFDNjA4RTAyOTlGQ0Y3QzZGRDAzOTBEOQorOjEwMzg0MDAwNjA2OTAxMDQwOTBDMDgwMjA5MEEwODQzMDEwNDA5MEMxMworOjEwMzg1MDAwMDE5OEMwNDY4MTgwMzAxQ0ZDRjdCN0ZENjE2OTAxMzFEOQorOjEwMzg2MDAwQzA0MzYxNjEwMTk5QzA0NjQ4ODE2MDZFMDA5OTQ2MTg2NQorOjEwMzg3MDAwMjA2OTAxMEVGRjIyMTIwNDAyNDAxMjBBMTE0M0ZGMjJBNgorOjEwMzg4MDAwMTIwMjAyNDAxMjAyMTE0MzAwMDYwMTQzNzE2MDAzOThDNAorOjEwMzg5MDAwRkNGNzlCRkQyMTY5NDkxOTIxNjFBMTY4NDkxQkExNjBDMQorOjEwMzhBMDAwMDZEMUIxODlBMjY5MTE0M0IxODFBMTY5RkNGNzhERkRFRgorOjEwMzhCMDAwMzg4MjYxNkUzODY4MDkxODBFMzFGOTYwRTI2ODAwOTk0MworOjEwMzhDMDAwMDQzODAwRjA0Q0Y4MDIyMDc4ODJFMDZENDEwODE2RDNFRAorOjEwMzhEMDAwODAwQTBBRDM3ODY4MTAzODAxMDQwOTBDMDgwMjA5MEEyMgorOjEwMzhFMDAwMDg0MzM5NjhDMDQ2Qzg4MTA5RTA3ODY4MEMzODAxMDQ4QgorOjEwMzhGMDAwMDkwQzA4MDIwOTBBMDg0MzM5NjhDMDQ2NDg4MTA1QjAyNgorOjEwMzkwMDAwRjBCQzA4QkMxODQ3MDAwMEQwMkMwMDgwNUMyQjAwODA2NQorOjEwMzkxMDAwMEMyQjAwODBGN0I1MDMxQzBGMUMwMDIwMUM2ODI2MDQyQworOjEwMzkyMDAwMzExQzFEMURGQ0Y3NTFGRDQwQzcwMjlBRDExQzg5MDhBRQorOjEwMzkzMDAwMDEzOTRBMUUwMjkyMDAyOTBERDAyMTBDMTBDRDIyMDQxQgorOjEwMzk0MDAwMEE0MzExMUMxNjFDRkNGNzQwRkQ0MEM3MDI5OTRBMUU5MQorOjEwMzk1MDAwMDI5MjAwMjlGMUQxMDNCMEYwQkMwOEJDMTg0NzgwMDhERQorOjEwMzk2MDAwODAwMDg5MDg4OTAwMDMzMjkzMDg1QTFFMDAyQjA1RDA3NQorOjEwMzk3MDAwMDhDOTA4QzAxMzFDMDEzQTAwMkJGOUQxNzA0N0ZGQjVFNAorOjEwMzk4MDAwODZCMDE3MUMwMDI2MDY5ODgwNkNDMDFCMDY5OUMwNDY5RQorOjEwMzk5MDAwODg2NDAxMjBDMDA1MDY5OTg5NkJDMDQ2MDE5MTA2OTk4QgorOjEwMzlBMDAwNEM2QjY3RTAyMTY4QzA0NjAyOTE2MTY4QzA0NjAzOTE5NAorOjEwMzlCMDAwQTE2OEMwNDYwNDkxMDJBOTQ5ODhCOTQyMDhEMjAyQUQ2MworOjEwMzlDMDAwNkQ4ODAyQTk0OTg4N0YxQTAwMjEwMkFCNTk4MDE5RTA0RAorOjEwMzlEMDAwMDJBOTQ5ODhDOTFCMDJBQjU5ODAzRDFDMDAyNzAxMjE1RgorOjEwMzlFMDAwNDkwNjA3OUI5QTA3OTIwRjBERDBFQjA2REIwRTA4RDAxNQorOjEwMzlGMDAwMUUyQjA4RDMxRTJCMDJEMTAzMkEwNEQxMDFFMDAyMkE3OAorOjEwM0EwMDAwMDFEMzAxMjYwMDIxMjk0MzAxNDMwQTFDMDA5MTAwMjAxMworOjEwM0ExMDAwMDM5OTA0OUEwNzlCMDFGMDVCRkYwNzk5NDkxOTA3OTFFNQorOjEwM0EyMDAwMDAyRTBBRDAxRDRBQzA0NjAwOTIxRDQ4MDE2RDQyNkQwRAorOjEwM0EzMDAwMDAyMDA3OUIwMUYwNENGRjAwMjYwMkE4NDA4ODAwMjhDOAorOjEwM0E0MDAwMENEMDAzOTg0MDE5MDM5MDAyOThDMDQ2MjA2MDAzOTg1OAorOjEwM0E1MDAwQzA0NjYwNjAwNDk4QzA0NkEwNjAwM0UwMDE5ODAxMzg0OQorOjEwM0E2MDAwMDE5MDEwMzQwNjk4QzA0NjQ0NjMwMTk4MDY5OUMwNDZGOAorOjEwM0E3MDAwODg2MzAwMjAwMDJGMDJEMDAxOTkwMDI5OTJEMTA5NEFDMQorOjEwM0E4MDAwQzA0NjAwOTIwNjQ4MDE2RDQyNkQwMDIwMDk5QjAxRjA3RQorOjEwM0E5MDAwMUZGRjBBQjBGMEJDMDhCQzE4NDcwMDAwMDEwMDAwMDI3QworOjEwM0FBMDAwN0MyOTAwODAwNDAwNTMwMjkwQjUwQzFDMDcxQzM4Njg2OAorOjEwM0FCMDAwMDEyMzlCMDcwODM4MTg0MzAxNjgzODhBRkNGNzg1RkMwNgorOjEwM0FDMDAwQzA0M0Y5NjhDMDQ2MDg4MDc4OEEzOTY4MDgxQTM4NjBBNworOjEwM0FEMDAwMzgxQzAxRjA4QkY5MzgxQ0ZDRjc4Q0ZCMjAxQ0ZGRjcxRAorOjEwM0FFMDAwMzNGRTkwQkMwOEJDMTg0NzgwQjUwMTg4OEEwOTIxRDNGMQorOjEwM0FGMDAwQ0EwOTFGRDI4QTA4MUREMzAwMjEwMTgwNDE4MDQ3NkY2NworOjEwM0IwMDAwNDA2REZBMUQxOTMyNTE3MUZBNkRDMDQ2MTA2MDNBNkU1RgorOjEwM0IxMDAwQzA0NjEwNjAwQzQ4QzA0NjgxNjNDMTZCNDkwODQ5MDAyQgorOjEwM0IyMDAwQzE2MzAxMjAwMEYwQ0NGRjM4MUMwMEYwNkJGRjgwQkNBQgorOjEwM0IzMDAwMDhCQzE4NDc4MDIzMTk0MzAxODAwMTg4NDkwOUY2RDIzRgorOjEwM0I0MDAwMDBGMEIwRjhGM0U3MDAwMEU4MEUwMDgwRjBCNTA3MUNDNQorOjEwM0I1MDAwMTAxQzBEMUMwMDI0NUUxRTAwMkIxOUQwMDE2OEMwNDZFRAorOjEwM0I2MDAwMzk2MDQxODgwQzE5NDE2OEMwNDY3OTYwODE2OEMwNDY1NworOjEwM0I3MDAwQjk2MEMxNjhDMDQ2Rjk2MDEwMzAxMDM3RTk2QTgxNDIwNworOjEwM0I4MDAwMDJEODI4MUMwMEYwRUNGRjMxMUMwMTNFMDAyOUU1RDFEMQorOjEwM0I5MDAwMjAxQ0YwQkMwOEJDMTg0NzAwMjFDMTYxMDU0OTBBNjgxNworOjEwM0JBMDAwMDAyQTAxRDEwODYwMDJFMDRBNjhDMDQ2RDA2MTQ4NjAzRQorOjEwM0JCMDAwNzA0NzAwMDBEMDJDMDA4MDAzNDkwODY4MDAyODAyRDAxQworOjEwM0JDMDAwQzI2OUMwNDYwQTYwNzA0N0QwMkMwMDgwMDAyMTgxNjcxRQorOjEwM0JEMDAwMDU0OThBNjgwMDJBMDFEMTg4NjAwMkUwQ0E2OEMwNDZBNworOjEwM0JFMDAwOTA2N0M4NjA3MDQ3MDAwMEQwMkMwMDgwMDM0OTg4Njg0NworOjEwM0JGMDAwMDAyODAyRDA4MjZGQzA0NjhBNjA3MDQ3RDAyQzAwODBCNworOjEwM0MwMDAwMDBCNTgwMjAxMzQ5QzA0NjA4NjBGRkY3RDVGRjAwMjhBMworOjEwM0MxMDAwMUJEMDAzMjMxQjA3NDE2ODE5NDAwQTBGNTEwMTg5MUE2MQorOjEwM0MyMDAwODkwMDBENEJDOTE4NEI4ODAwMkIwNEQxMTExQ0ZGRjdEQworOjEwM0MzMDAwM0JGRjA4QkMxODQ3MDEyQjAyRDFGRkY3MDVGQ0Y4RTc1MgorOjEwM0M0MDAwMDIyQkY2RDFGRkY3NEVGQkYzRTcwNDQ4MDE2RDAxMzE3QgorOjEwM0M1MDAwMDE2NUVFRTcwMDAwMDBCMDVDMkIwMDgwQTA4MjIwNDBGMAorOjEwM0M2MDAwMDBCNTIwMjAwRDQ5QzA0NjA4NjBGRkY3QkZGRjAwMjhCRgorOjEwM0M3MDAwMEVEMDAxODgyMDIzMTk0MzAxODAwMTg4MTAyMzk5NDMyNQorOjEwM0M4MDAwMDE4MDAxODgwOTBBMDFEM0ZGRjcyRUZGMDhCQzE4NDdGRAorOjEwM0M5MDAwMDM0ODAxNkQwMTMxMDE2NUY4RTcwMDAwMDAwMDAwQjA0NAorOjEwM0NBMDAwQTA4MjIwNDA5OEI1MDcxQzIyNDhDMDQ2MDA5MDIyNDhCOAorOjEwM0NCMDAwQzMxRDQxMzM0MTZEODI2RDgwNkMwMDAzMDAwQjlDNjgxNQorOjEwM0NDMDAwMDEyMzlCMDcyMzQzMUI2ODk4NDIwMEQxMENFMDk4NDJENAorOjEwM0NEMDAwMDNEOTEwMUE1OTFBNDExODAwRTAxOTFBMDEyMDEwMjlBNQorOjEwM0NFMDAwMDBEODAwMjAwMDI4MUZEMDc4NkFGOTZBQzA0NjA4NjAxMgorOjEwM0NGMDAwQjg2QUY5NkFDMDQ2NDg2MDEwNEFDMDQ2MDA5MkZCNkEzQQorOjEwM0QwMDAwMEY0ODQyNkQwMzIwMzk2QTAxRjBFMkZEMzg4ODEwMjMyNAorOjEwM0QxMDAwMTg0MzM4ODAzODg4NDAyMzk4NDMzODgwMzgxQ0ZGRjc5MAorOjEwM0QyMDAwNTVGRjk4QkMwOEJDMTg0NzM4ODg0MDIzMTg0MzM4ODA5MgorOjEwM0QzMDAwRjdFNzAwMDA1NTU1NTU1NUE4MDMwMDgwMDgwMDExMDIwQgorOjEwM0Q0MDAwN0MyOTAwODBCMEI1NDAyMDJDNDlDMDQ2MDg2MDAwRjBCNgorOjEwM0Q1MDAwRkRGRTA3MUM0MDY4MDMyMzFCMDcxODQwMDUwRjY4MDE4MAorOjEwM0Q2MDAwNDAxQjgwMDAyNjQ5NDQxODIwODgwMjIzMTg0MzIwODBFNQorOjEwM0Q3MDAwMjA4ODQxMDgzNEQzNDAwODQwMDAyMDgwQTA2Q0UxNkNDQQorOjEwM0Q4MDAwNDAxOEEwNjQwMDIwRTA2NEExNkIyMjZEODkxOEExNjMzMworOjEwM0Q5MDAwMjA2NUI4NkFDMDQ2NjA2NTAzMjMxQjA3Nzg2ODE4NDAzMQorOjEwM0RBMDAwNzg2MDYxNjgzNjMxOTQyOTA0RDgzODIzMTg0Mzc4NjBFNAorOjEwM0RCMDAwMzgyMDAzRTA5NDIzMTg0Mzc4NjA5NDIwQjg2MTM5Njg3MAorOjEwM0RDMDAwNzg2ODAyMDQxMjBDMjAxQ0NCMUYwNTNCRkZGN0Q3RkRCRgorOjEwM0REMDAwMDIyMDYwODAzODFDRkZGN0RGRkVCMEJDMDhCQzE4NDcyQgorOjEwM0RFMDAwMzgxQ0ZDRjcwN0ZBMjgwMTA2NDk0MDE4MTkyM0RCMDFBMworOjEwM0RGMDAwQzAxODQxNkIwMTM5NDE2M0VGRTcwMDAwMDAwMDAwQjBEQgorOjEwM0UwMDAwNUMyQjAwODBBMDFDMDA4MDkwQjUwMDI3MEY0QzBERTBCQgorOjEwM0UxMDAwNDI2QjAxM0E0MjYzMDAyQTA1REMwMjZCQzA0NjQyNjNGMgorOjEwM0UyMDAwQzA2QTAxRjBDNkY5MDEzNzBCMkYwN0QyMzgwMTAwMTkxQgorOjEwM0UzMDAwMzMyMzlCMDFDMDE4ODE2QTAwMjlFOUQxMDEyMDQwMDY4MworOjEwM0U0MDAwMDM0OUMwNDYwODYwOTBCQzA4QkMxODQ3NjgwRTAwODA1MworOjEwM0U1MDAwMDAwMDAwQjAxMDQ4QzE2ODAxMzFDMTYwMEY0OUM4Njg1NgorOjEwM0U2MDAwMDEyODE3RDFDODFENzkzMDAyODkwMDJBMTJEMDAxM0FFMQorOjEwM0U3MDAwMDI4MTAyODkwMDJBMEREMTQyODkwMDJBMDhEMUM5NkYyNgorOjEwM0U4MDAwMDIyMzBBNjgxQTQzMEE2MDA0MjEwMTgxMDEyMTAwRTAyQgorOjEwM0U5MDAwMDAyMTQxODE3MDQ3MDAwMDA4ODMyMDQwNjgwRTAwODBBNworOjEwM0VBMDAwQjBCNTA3MUMwMTIzRjgxRDY5MzAwMzczMUU0OEMyMURGRAorOjEwM0VCMDAwNzkzMjU0OEE2MTFDNTE4MkQ1OEEwMDIxQUM0MjA0REJEQworOjEwM0VDMDAwQzQxRDg5MzQ2MzcwNTE4MkQxODMwMTIzOUIwNzNBNkRFRAorOjEwM0VEMDAwMUE0MzEyNjhDMDQ2QkE2MUZCNjk5QTQyMDZEMUY4NkM2RgorOjEwM0VFMDAwMTI0OUMwNDYwODYwQjBCQzA4QkMxODQ3Nzk2MTQxNjlGNgorOjEwM0VGMDAwRkE2QzkxNDM0MTYxMDEyMDAwMDVDMTYwMzg2OTAyMjhENAorOjEwM0YwMDAwRjFEMEI4NjlGOTY5NDExQTAxRDU3ODZENDExODM4MUNBQQorOjEwM0YxMDAwMDBGMDBFRjhGOTY5MDkxOEY5NjE3ODZEODE0MkUyRDM3MQorOjEwM0YyMDAwMDgxQUY4NjFERkU3MDAwMDY4MEUwMDgwMDAwMDAwQjBBQQorOjEwM0YzMDAwRjhCNTA0MUMwRjFDRkYyMzIxMzM5RjQyMDFEOUZGMjczMgorOjEwM0Y0MDAwMjEzN0UxNkUzODFDMDFGMENCRkMyRDREMDAyODEzRDEzOAorOjEwM0Y1MDAwRTAxRDQ5MzAwMTdBMDEyMzE5NDMwMTcyMjk0QUMwNDYwNAorOjEwM0Y2MDAwMDA5MjI5NDgwMTZENDI2RDAwMjAyQjFDMDFGMEIwRkMyRAorOjEwM0Y3MDAwMDAyMEY4QkMwOEJDMTg0NzIwNjkwMTMwMjA2MTIzNDlBMworOjEwM0Y4MDAwQzgxREI5MzAwMjZCOTIwMDUxMThDMDMxMEY2MTAxNkIyRQorOjEwM0Y5MDAwMDEzMTg5MDc4OTBGMDE2MzIwNkJDMjE5NjE2RDhBNDI2MworOjEwM0ZBMDAwMDNEODIzMjIxMjA1M0E0MzA1RTAwOTFBN0UxQTA3RDFFNQorOjEwM0ZCMDAwMjMyMjEyMDUwQTQzMDA5MjYxNkUwOTE4QTI2RTEwRTBENgorOjEwM0ZDMDAwMTEyMjUyMDUwQTQzMDA5MjYxNkUwOTE4MDAyMEEyNkU2OAorOjEwM0ZEMDAwMkIxQzAxRjA3REZDMjMyMjEyMDUzMjQzMDA5MjYxNkVGRQorOjEwM0ZFMDAwQTI2RTAwMjAyQjFDMDFGMDczRkMyMDZCQzAxOTAwMDk4RAorOjEwM0ZGMDAwMDAwMTYxNkQ4MTQyMDBEODQwMUEyMDYzMzgxQ0I4RTc4NworOjEwNDAwMDAwNDQ4MDIwNDAwNDAwMUIwMjdDMjkwMDgwNjgwRTAwODA1MAorOjEwNDAxMDAwODBCNTAxMjBDMDAzMEQ0OUMwNDYwODYwMEM0OUM4MUQ4OQorOjEwNDAyMDAwNDkzMDAyN0EwMDI3MDAyQTAzRDAwNzcyMDgxQ0ZGRjdFNAorOjEwNDAzMDAwMzdGRjA4NDlDODFENDkzMDAyN0EwMDJBMDNEMDA3NzJBOQorOjEwNDA0MDAwMDgxQ0ZGRjcyREZGODBCQzA4QkMxODQ3MDAwMDAwQjAxQgorOjEwNDA1MDAwNjQyRDAwODBFNDJDMDA4MDkwQjUwNzFDMTAyMDE4NDlDNgorOjEwNDA2MDAwQzA0NjA4NjBGODY4MDEzMEY4NjAxNjQ4QzQxREI5MzRDRAorOjEwNDA3MDAwNjE2Qjg5MDAwOTE4QzAzMTA5Njk3QTY4OTIwMEQyMTkwOAorOjEwNDA4MDAwNTE2NDYxNkI4OTAwMDgxOEMwMzAwMTY5Nzg2ODgwMDA0QworOjEwNDA5MDAwQzAxOUMwNkIwMUYwQTJGQTAxMjM3ODY4NTg0MDc4NjAxQgorOjEwNDBBMDAwNjA2QjAxMzA4MDA3ODAwRjYwNjNGODFEMTkzMDQwNzkyNAorOjEwNDBCMDAwMDAyODAyRDEzODFDMDBGMDA3Rjg5MEJDMDhCQzE4NDc1MworOjEwNDBDMDAwMDAwMDAwQjA2ODBFMDA4MDkwQjUwNzFDMzk0OEMwNjgzOQorOjEwNDBEMDAwMDAyODA1RDBCODZBQzA2ODgwMDkwMUQzMDIyMDAwRTAzQQorOjEwNDBFMDAwNzg2RkZDRjc1OUY4MDQxQzA2RDEwMTIwRjkxRDE5MzEyRAorOjEwNDBGMDAwMDg3MTkwQkMwOEJDMTg0N0Y4NkMyRjQ5QzA0NjA4NjA4RQorOjEwNDEwMDAwQkE2QTM4MUMyMTFDMDBGMDU5Rjg2NzYyMDAyODAzRDFGNAorOjEwNDExMDAwMjAxQzAwRjAwQkZERUNFN0Y5NkQwOTY4MDkxODA5MDk4RQorOjEwNDEyMDAwMDkwMTdBNkQ4QTQyMDBEODg5MUFBMTYyQjk2ODg5MDBBQQorOjEwNDEzMDAwQzkxOTRBNkMwMDJBMDdEMDRBNkMxMjFBNEE2NDgwMDhDRQorOjEwNDE0MDAwODAwMEI5NkEwODE4Qjg2MjM4NjhCOTZBODAwMEMwMTk3NgorOjEwNDE1MDAwNDI2QjkxNDIwRUQzMDAyMTQxNjRCODZBMzk2ODg5MDBFQworOjEwNDE2MDAwQzkxOTQ5NkI0MDFBQjg2MkI5Njg4OTAwQzkxOUM5NkI4NQorOjEwNDE3MDAwNDAxOEI4NjJCODY4ODEwMEM5MTk0OTZDMDAyOUI4RDFFMworOjEwNDE4MDAwQjk2QUZBNkI5MTQyQjREMDNBNkM5MTQyQjFEMDAxMjMzMgorOjEwNDE5MDAwNTg0MEI4NjA4MDAwQzAxOUMwNkJDMDQ2Qjg2MkY4Njg2QgorOjEwNDFBMDAwMDAyODAxRDAwMTM4Rjg2MDM4NjkwMDI4QTFEMDAxMzgxMgorOjEwNDFCMDAwMzg2MTlFRTc2ODE5MDA4MDAwMDAwMEIwRjdCNTkwQjA0NAorOjEwNDFDMDAwMDQxQzBEMUMwMDIwMDU5MDAyOTAwMDIyMDE5MkY5NDg2OQorOjEwNDFEMDAwQzA2QUMwNDZBODYxQTA2ODgxMDAwOTE5NDk2QkMwNDY0MQorOjEwNDFFMDAwMjA2MEUxNjIxMjlBRDA2OEMwNDZBODYwMTI5QTUxNzhBNQorOjEwNDFGMDAwQzA0NjBDOTFGMDQ4QzA0NjAzOTBENzFEMDkzN0UwNkFDRAorOjEwNDIwMDAwQzExQjA5MDlFMzFEMTkzMzBDOUFDMDQ2MEY5M0VCNEJGMAorOjEwNDIxMDAwQzA0NjBFOTM5MTQyMDFEM0I4NDIyMUQ4RTE2ODAyMjlFOQorOjEwNDIyMDAwMUVEMjAxMjAwRjk5QzA0NjQ4NzEwMDIwMDM5OTAxRjA2OQorOjEwNDIzMDAwNTdGQjAwMjgwM0QxMEU5QkQ4NkIwMTMwRDg2MzAxMjBCNworOjEwNDI0MDAwODAwNjAwMjc2ODYwQUY2MURENEFDMDQ2MDA5MkRENDgwNQorOjEwNDI1MDAwMDE2RDQyNkREQzRCMDAyMDAxRjAzQUZCMzgxQzVDRTM0MQorOjEwNDI2MDAwQjg0MjAzRDgyMDFDMDBGMDdCRkMwNzFDRDc0OEMwNjg2QworOjEwNDI3MDAwMDAyODY0RDAzODc4NDAwNzQwMEYwMzI4NjBEMTA1OThBMworOjEwNDI4MDAwMDEzMDAwMDYwMDBFMDU5MDM4NzhGMDIzMTg0MDU4RDExMAorOjEwNDI5MDAwRTA2QUMwMUIwMDA5MEM5OTg4NDIwMkQyRTA2ODAyMjgzQgorOjEwNDJBMDAwMDVEM0NCNDk4ODY4MDBGMDgzRkYwNjFDMDZEMTAzOUIyOQorOjEwNDJCMDAwMjgxQzM5MUMyMjFDMDBGMDhCRkMxNkUxMkU2MkY4NjhDOQorOjEwNDJDMDAwMDAyODBERDBCODg5MDAyODAzRDBDMTQ5Qzk2ODAwRjA4MgorOjEwNDJEMDAwNzBGRkY4ODkwMDI4MDNEMEJENDlDOTY4MDBGMDY5RkY2NAorOjEwNDJFMDAwN0E2OEMwNDY3MjYxQjk2OEMwNDZCMTYxMzAxQ0I4NDk4RAorOjEwNDJGMDAwMDk2ODAwRjA1RUZGMDAyODE3RDEzMDFDQjQ0OTQ5NjhGNgorOjEwNDMwMDAwMDBGMDU3RkYxMDM3RTA2QUI4NDIwM0Q4MjAxQzAwRjBENQorOjEwNDMxMDAwMjdGQzA3MUM2ODY4QUY0QjE4NDM2ODYwMDAyMEE4NjE0MQorOjEwNDMyMDAwQUMyM0E4Njg5ODQzQTg2MEIwRTBBODY5QTgyODAxRDI4NworOjEwNDMzMDAwQTgyMEE4NjExMDM3RTA2QUI4NDI2Q0Q4OUNFMEE1RTBEQworOjEwNDM0MDAwQTRFMDEwMjg2OEQxMDMyMzFCMDc2ODY4MTg0MDAxMEZGOAorOjEwNDM1MDAwNDgwMTQwMUE4MDAwQTA0QTgyMTgwMTkyNzg4ODQyMEJENgorOjEwNDM2MDAwMzFEMzgyMEIyRkQzOUQ0OEMwNDYwMzkwMDIyMDAxOUE3RgorOjEwNDM3MDAwQzA0NjEwODA3ODg4MDAwNTAwMEQwMTlBQzA0NjUwNjA0NAorOjEwNDM4MDAwQjg2ODAxOUFDMDQ2OTA2MDc4NjgwMTlBQzA0NjEwNjI4OQorOjEwNDM5MDAwMDAyMDAxOUFDMDQ2OTA2NDAxOUFDMDQ2OTA2Mzg4MDI0QQorOjEwNDNBMDAwOEY0OTQwMTgwMTlBQzA0NjUwNjMwMTlBNTA2ODM2MzBEMAorOjEwNDNCMDAwOTQyODAxRDgzODIwMDBFMDk0MjBBODYxMTAzN0UwNkFFMgorOjEwNDNDMDAwQjg0MjI4RDg1OEUwN0E4ODkyMEIwM0QzODU0OEMwNDY3MworOjEwNDNEMDAwMDM5MDIzRTAwMTIyMTIwMzAyNDA4MzRCMUREMDAzOTM3QworOjEwNDNFMDAwMDAwNTAwMEQwMTlBQzA0NjUwNjBCODY4MDE5QUMwNDZBOQorOjEwNDNGMDAwOTA2MDc4NjgwMTlBQzA0NjEwNjIwMDIwMDE5QUMwNDYxOQorOjEwNDQwMDAwOTA2NDAxOUFDMDQ2OTA2Mzg4MDI3NTQ5NDAxODAxOUFFOQorOjEwNDQxMDAwQzA0NjUwNjMwMkUwMzNFMDJBRTAwMzkzMDEyMDBGOTk4NQorOjEwNDQyMDAwQzA0NjQ4NzExMjlBNTA3ODA1OTk0MzFBMEI5MzEwMzc3OQorOjEwNDQzMDAwRTA2QUI4NDIwM0Q4MjAxQzAwRjA5MkZCMDcxQzAxOUFFNgorOjEwNDQ0MDAwNTA2QjkxNkIwOTAxNDAxODBCOUIyMTFDM0ExQ0ZGRjcyNAorOjEwNDQ1MDAwN0RGQjAxOUFDMDQ2RDA2NDAxOUEwQjlCQzA0NjEzNjU1MAorOjEwNDQ2MDAwMDEyMzVCMDY2ODY4MTg0MzY4NjAwMDIwQTg2MTBERTBCRQorOjEwNDQ3MDAwMTAzN0UwNkFCODQyMDNEODIwMUMwMEYwNzFGQjA3MUMxQgorOjEwNDQ4MDAwMzg3ODQwMDc0MDBGMDMyODAwRDFGOEU2QTg2OTAzOTk1RgorOjEwNDQ5MDAwMDFGMDI2RkEwMDI4MkFEMTM4MUMyMTFDMDBGMDc5RkJGMworOjEwNDRBMDAwQTg2ODgwMDkwNEQzMzAxQzQ5NDk0OTY4MDBGMDgxRkU5RQorOjEwNDRCMDAwNDE0OTAwMjAwMUYwMTRGQTAwMjgwNEQxMEU5QkQ4NkI2QQorOjEwNDRDMDAwMDEzMEQ4NjMxMUUwMDEyMDBGOTlDMDQ2NDg3MTgwMDY4MQorOjEwNDREMDAwMDAyNzY4NjBBRjYxM0E0QUMwNDYwMDkyMzk0ODAxNkREMgorOjEwNDRFMDAwNDI2RDM5NEIwMDIwMDFGMEYzRjkwMDIwMTVFMjA1OThFOAorOjEwNDRGMDAwMEM5OTA4MUEwMDA0MDAwQzBDOTAwQjkwMEM5ODAwMjhFMgorOjEwNDUwMDAwMDNEMDAxMjAwRjk5QzA0NjQ4NzEyODY4QzA0NjA0OTAyNgorOjEwNDUxMDAwMDAyNjAwMjAwODkwMDAyMjBBOTIwQzk4MDEzODBEOTA4NQorOjEwNDUyMDAwQTNFMDc4ODg4QTFCMTIwNDEyMEM5MDQyMDVERDA3OTJFMgorOjEwNDUzMDAwODAxQTAwMDQwMDBDMDg5MDAwRTAwNzkwMDg5ODAwMjhGQQorOjEwNDU0MDAwMDdEMTBEOTgwQTlBOTA0MjA3REQwNzk4MzAxODg4NDJFMworOjEwNDU1MDAwMDNEODAxMjA0MDA1MDY5MDFDRTAxMTIwNDAwNTA2OTA3QworOjEwNDU2MDAwQTg2ODhDMjMxODQwMDJEMTIwNDhDMDQ2MDY5MEIxMDdBNQorOjEwNDU3MDAwODkwRjBGRDAwNzk4QzAwNkMwMEUwOEQwMUUyODA5REI4RgorOjEwNDU4MDAwMUUyODAyRDEwMzI5MDVEMTAxRTAwMjI5MDJEMzAxMjAwRQorOjEwNDU5MDAwMDI5MERFRTcwQTlBMDAyQTA0RDEwMTIzREIwNTA2OTg3RgorOjEwNDVBMDAwMTg0MzA2OTAwNzk4MDY5OTA4NDMwMjFDMDA5MDA0OTg0NworOjEwNDVCMDAwODMxOTFERTBFODBFMDA4MDAxNDlGRkZGMjgwRjAwODBFRAorOjEwNDVDMDAwMDQwMDEyMDI3QzI5MDA4MDQ0ODAyMDQwNjgxOTAwODA4OQorOjEwNDVEMDAwNjAwNDAwODAwMDAwMDA4MDVDMkIwMDgwNTUzMkZGRkZFQgorOjEwNDVFMDAwQUM1RTIxNDAwRDNERkZGRkNEMzFGRkZGMDAwMDMyMDJFOAorOjEwNDVGMDAwMDAyMDNBMUQwNkNBMDFGMDZCRjkwNzk4MzYxODAyOTg5OAorOjEwNDYwMDAwMDAyODE2RDBBODY4OEMyMzE4NDAwNEQxMDkyMzVCMDQyNQorOjEwNDYxMDAwMDY5ODE4NDMwNjkwMDY5OEMyNEEwMjQzMDA5MjA0OThFRQorOjEwNDYyMDAwODMxOUMxNDgwMTZENDI2RDAwMjAwMUYwNTFGOTAwMjA0RAorOjEwNDYzMDAwMDI5MDA4OTgwMDI4MEJEMTBCOUIwMTNCMEI5MzEwMzc3RAorOjEwNDY0MDAwRTA2QUI4NDIwQ0Q4MjAxQzAwRjA4QUZBMDcxQzA3RTA4OAorOjEwNDY1MDAwNzg2ODA3OUE4MDE4Nzg2MDc4ODgwNzlBODAxQTc4ODAzNgorOjEwNDY2MDAwMEE5QTUwMUMwMjA0MTIwQzBBOTIwQzk4MEE5QTgyNDI2RQorOjEwNDY3MDAwMDNEQUE5NjlCMTQyMDBEOTUzRTdBODY5QjA0MjZCRDEwNgorOjEwNDY4MDAwQTg2ODAxMDk2OUQyMDg5QTAwMkE1NkQwMEM5OTBBOUE5QQorOjEwNDY5MDAwOEE0MjNFREJCMTA3ODkwRjBDRDAwODlBRDIwNkQyMEVBRgorOjEwNDZBMDAwMEJEMDFFMkEwNkRCMUUyQTAyRDEwMzI5MDVEMDAxRTAwOQorOjEwNDZCMDAwMDIyOTAyRDIwMjk5MDAyOTIxRDAwODlBQzA0NjAwOTIwQworOjEwNDZDMDAwMDQ5ODgzMTkwMDIwM0ExRDA2Q0EwMUYwMDFGOTA4OThFMAorOjEwNDZEMDAwMzYxOEE4Njg4QzIzMTg0MDAyRDAwMTIwNDAwNjAwRTA1QworOjEwNDZFMDAwOTI0ODAxMjIwMjQzMDA5MjA0OTg4MzE5OEU0ODAxNkQ3QQorOjEwNDZGMDAwNDI2RDAwMjAwMUYwRUNGODAwMjAwMjkwMTVFMDhDMjNDMAorOjEwNDcwMDAwMTg0MDAyRDAwMTIwNDAwNjAwRTA4ODQ4MDg5QTAyNDM4MQorOjEwNDcxMDAwMDBFMDA4OUFDMDQ2MDA5MjA0OTg4MzE5MDAyMDNBMUREMAorOjEwNDcyMDAwMDZDQTAxRjBENUY4MDg5ODM2MTgxMDM3RTA2QUI4NDI4MgorOjEwNDczMDAwMDNEODIwMUMwMEYwMTRGQTA3MUM2ODY4ODAwRTZCRDJBNgorOjEwNDc0MDAwMEE5OEMwNDYwOTkwMEM5OTg4NDI1Q0RBMEQ5ODA5OTkzQworOjEwNDc1MDAwODg0MjAzRDA3QTg4MUVFMDVGRTA1RUUwNzg4ODAxMjIxQworOjEwNDc2MDAwNTIwNjAyNDNBOTY4OEMyMzE5NDAwMkQxMDkyMzVCMDQzNQorOjEwNDc3MDAwMUE0M0IxMDc4OTBGMEVEMEMzMDZEQjBFMDhEMDFFMkJEQgorOjEwNDc4MDAwMDlEQjFFMkIwMkQxMDMyOTA1RDEwMUUwMDIyOTAyRDM0NgorOjEwNDc5MDAwMDEyMTAyOTEwMjFDMDk5ODAwMjgwMkQxMDEyM0RCMDVBNgorOjEwNDdBMDAwMUE0MzAwOTIwNDk4ODMxOTAwMjAzQTFEMDZDQTAxRjBBQQorOjEwNDdCMDAwOEZGODc4ODg4NjE5MTAzNzAyOTgwMDI4MTREMEE4NjhENgorOjEwNDdDMDAwOEMyMzE4NDAwMkQwMDEyMDQwMDYwMEUwNTc0ODAxMjIwNworOjEwNDdEMDAwMDI0MzAwOTIwNDk4ODMxOTUzNDgwMTZENDI2RDAwMjBGMgorOjEwNDdFMDAwMDFGMDc2RjgwMDIwMDI5MEUwNkFCODQyMDNEODIwMUM1RAorOjEwNDdGMDAwMDBGMEI2RjkwNzFDMDk5ODAxMzAwMDA0MDAwQzA5OTA3QworOjEwNDgwMDAwMEM5OTg4NDJBMkRCNjg2ODMwNDMwMTA0MDkwQzY4NjA5NworOjEwNDgxMDAwRTg2QTAwRjA3QkZBMjhFMDI3RTBBODY4MDAwOTE0RDNEMgorOjEwNDgyMDAwNjg2ODgwMEUxNUQyMDE5QTAwMkExMkQwMDE5QTUwNkI0NgorOjEwNDgzMDAwMEI5QjIxMUMzQTFDRkZGNzg5RjkwMTlBQzA0NjkwNjQzMgorOjEwNDg0MDAwMDE5QTBCOUJDMDQ2OTM2MzAzRTBFODZBMzExQzAwRjBCOQorOjEwNDg1MDAwNURGQTY4NjgzMDQzNjg2MEE4NjlCMDQyMDVEOTAwMDQxMQorOjEwNDg2MDAwMDAwQzgwMUIwMEYwRUVGOUFFNjFBODY4OEMyMzE4NDBBNAorOjEwNDg3MDAwMEJEMDJGNEFDMDQ2MDA5MjA0OThDMzFGMDUzQjJBNDgxQworOjEwNDg4MDAwMDE2RDQyNkQwMDIwMDFGMDIzRjgwMTIzOUIwNzIwNkQ4QworOjEwNDg5MDAwMTg0MzAwNjhDMDQ2QTA2MUUxNjk4MTQyMTJEMDIyNjlENAorOjEwNDhBMDAwMDIyQTBGRDI0MTFBMDFENTYwNkQ0MTE4MjAxQ0ZGRjc3MgorOjEwNDhCMDAwM0ZGQkUxNjk0MDE4RTA2MTYxNkQ4ODQyMjREMzQwMUFGMgorOjEwNDhDMDAwRTA2MTIxRTA4MTQyMUZEMTIwNjkwMjI4MUNEMjAxMjAzMQorOjEwNDhEMDAwNjA2MTE4NDg0MTY5RTI2QzBBNDM0MjYxODE2OUUzNkM5NgorOjEwNDhFMDAwOTk0MzgxNjEwMTIxMDkwNUNBNjA4MDY5QzA0NjA4NjE1OAorOjEwNDhGMDAwOEIwMjIwNkQxODQzMDA2OEMwNDZBMDYxRTE2OTgxNDJDNworOjEwNDkwMDAwMDJEMDIwMUNGRkY3Q0NGQTI4MUMwMEYwMEZGOTBDOThGRAorOjEwNDkxMDAwMDU5OTQwMTgwMDAxMTAzMDY4NjExM0IwRjBCQzA4QkM2NAorOjEwNDkyMDAwMTg0NzAwMDAwMTAwMDAwMjdDMjkwMDgwMDAwMDEyMDJFQworOjEwNDkzMDAwMDQwMDUyMDI2ODBFMDA4MEYwQjU0MDIwMkQ0OUMwNDZBOAorOjEwNDk0MDAwMDg2MDAwRjAwM0Y5MDcxQzgxNjk0NDZBQTA2RjAwRjA1OQorOjEwNDk1MDAwNDVGRTAwMjBFMTFEMTkzMTQ4NzE3OTY4QzkwRTA5RDM1RgorOjEwNDk2MDAwRjg2QTAwMDEyNDQ5NDAxODI0NEJDMDE4MDE2ODAxMzkzNQorOjEwNDk3MDAwMDE2MDM2RTBFMTZEMDk2ODIyNkVDMDQ2MTE2MDIwNEU4QworOjEwNDk4MDAwRjUxRDc5MzUwMTIzRTk2QjE5NDNFOTYzQjk2QUUyNkRENQorOjEwNDk5MDAwQzA0NjExNjBCOTZBMjI2RUMwNDYxMTYwNjE2OTAwMjk4MworOjEwNDlBMDAwMDREMUE5NkIwMTMxQTk2MzA4MjkwN0QzQTg2MzAxMjBBOQorOjEwNDlCMDAwMDBGMDg2RjhFODZCNDAwODQwMDBFODYzNzg2ODgxMEVGNAorOjEwNDlDMDAwMEZEMjBCMjMxQjAyRjExOEM5NjgwMDI5MDZEMDAwMDg3QQorOjEwNDlEMDAwMDREMjIwMUMzOTFDMDBGMDQzRjgwMkUwMzgxQzAwRjAxRgorOjEwNDlFMDAwMDVGQTM4MUNGQkY3MDZGQzIwMUMwMEYwMEJGOEYwQkNBNQorOjEwNDlGMDAwMDhCQzE4NDcwMDAwMDBCMEEwMUMwMDgwQjQwQzAwMDBFOAorOjEwNEEwMDAwNjgwRTAwODA4MEI1MDcxQ0Y4MUQxOTMwMDE3OTAwMjk1NworOjEwNEExMDAwMDREMDAwMjEwMTcxMzgxQ0ZGRjc1NkZCRjg2ODAyMjgwQQorOjEwNEEyMDAwMEREMEI4Njg4MDAwQzIxOTUwNkMwMDI4MTFEMEI4NkE0NworOjEwNEEzMDAwNDE3ODA5MDExMDMxNTI2QjEwMUE4ODQyMDVEMzM4MUM5NQorOjEwNEE0MDAwRkZGNzQyRkI4MEJDMDhCQzE4NDczODFDRkZGNzI4RkE2OAorOjEwNEE1MDAwRjhFNzc4Njg4MDAwQzAxOUMwNkJDMDQ2Qjg2MkYxRTcxQgorOjEwNEE2MDAwQjBCNTg3QjAwRjFDODA2RkMwNDYwMDkwMDAyNDEzNEQ3NgorOjEwNEE3MDAwMEIyMzFCMDJFODE4ODA2OTAwMjgxN0QwNjk0NkEyMDBBMgorOjEwNEE4MDAwNTIxOTBCMjMxQjAyRDIxODkyNjkzODFDMDBGMDkyRkJCQQorOjEwNEE5MDAwMDAyODA5RDEwMTM0QTAwMDQwMTkwQjIzMUIwMkMwMThDMworOjEwNEFBMDAwODA2OTAwMjhFQUQxMDFFMDAxMjgwMkQwMzgxQzAwRjAxQQorOjEwNEFCMDAwOURGOTA3QjBCMEJDMDhCQzE4NDcwMDAwNjgwRTAwODAyNAorOjEwNEFDMDAwQjhCNUMyMDdEMjBGMTY0QzE2NDkwMUQwMDgyMjA4RTAyQgorOjEwNEFEMDAwODIwODA1RDMwQzIyQTQxODBCNjhERjFEMTUzNzAzRTBFQworOjEwNEFFMDAwMUMyMjBCNjhERjFEMDkzNzBGNEIxRDc4MDAyRDEzRDBEQQorOjEwNEFGMDAwNUI3ODAwMkIxMEQwMDEyMzVCMDYxQTQzMDAyODAxRDFGQworOjEwNEIwMDAwNUIwODFBNDMwMDkyNEE2ODAxMjAzOTFDMjMxQzAwRjBGQworOjEwNEIxMDAwREZGRUI4QkMwOEJDMTg0NzAzMjMxQjA2MUE0M0YxRTdBNQorOjEwNEIyMDAwOTBFRTIwNDA3QzI5MDA4MEY4MEUwMDgwMDAyMUMxNjFCOQorOjEwNEIzMDAwMDU0OThBNjgwMDJBMDFEMTg4NjAwMkUwQ0E2OEMwNDYzNworOjEwNEI0MDAwRDA2MUM4NjA3MDQ3MDAwMDI4MEYwMDgwMDM0OTg4Njg2MgorOjEwNEI1MDAwMDAyODAyRDBDMjY5QzA0NjhBNjA3MDQ3MjgwRjAwODBEMgorOjEwNEI2MDAwMDExQzAxMjM4ODY4NTg0MDg4NjBDQTY4MDEzQUNBNjBGRAorOjEwNEI3MDAwMEE2OTAxM0E4MDAwMEE2MTQyMThEMDZCNTM2QkMwNDY0MworOjEwNEI4MDAwQ0I2MjBCNjg5QjAwNTkxODQ5NkM1MzZDQzkxODUxNjQ2RgorOjEwNEI5MDAwNzA0NzhBNjg5MjAwNTIxOEQzNkI4MzQyMTdEMUQwMUQ5OAorOjEwNEJBMDAwM0QzMDBBNjg5MjAwNTIxODUyNkMwMzY4OUExQTAyNjBFQgorOjEwNEJCMDAwMDEyMzg4Njg1ODQwODg2MENBNjgwMTMyQ0E2MDBBNjk1RgorOjEwNEJDMDAwMDEzMjgwMDA0MDE4MEE2MTQwNkJDMDQ2Qzg2MjcwNDdERAorOjEwNEJEMDAwQjhCNTA0MUMxRDFDMTcxQzA4MUMzOTFDRkZGN0Q5RkY5NQorOjEwNEJFMDAwMDAyMDI5MUMwMEYwN0NGRTAxMjBGOTFEMTkzMTQ4NzFCQworOjEwNEJGMDAwODAwNjYwNjAwMDIwQTA2MTA2NEFDMDQ2MDA5MjA2NDgxOAorOjEwNEMwMDAwMDE2RDQyNkQwNTRCMDAyMDAwRjA2MkZFQjhCQzA4QkM4RgorOjEwNEMxMDAwMTg0NzAwMDAwNDAwMTIwMjdDMjkwMDgwNDQ4MDIwNDBENAorOjEwNEMyMDAwMDY0OTBBNjgxMDE4MDg2MDAxMjM1QjAyOTg0MjAzRDlGQworOjEwNEMzMDAwMDM0OTBBNzkwMTMyMEE3MTcwNDcwMDAwRTQyRDAwODBBRgorOjEwNEM0MDAwQTA4MjIwNDA4MDA4ODAwMDA2NDkwQTY4MTAxODA4NjA4OQorOjEwNEM1MDAwMDEyMzVCMDI5ODQyMDNEOTAzNDkwQTc5MDEzMjBBNzFBMAorOjEwNEM2MDAwNzA0NzAwMDBFNDJEMDA4MEEwODIyMDQwMDMzMDgwMDhCRgorOjEwNEM3MDAwODAwMDA2NDkwQTY4MTAxODA4NjAwMTIzNUIwMjk4NDIwOAorOjEwNEM4MDAwMDNEOTAzNDkwQTc5MDEzMjBBNzE3MDQ3RTQyRDAwODA4MworOjEwNEM5MDAwQTA4MjIwNDAwMjQ4NDE3OTAxMzE0MTcxNzA0NzAwMDBGMworOjEwNENBMDAwQTA4MjIwNDA5MEI0ODIwMDE3NEI5QTU4OEIwNzAyRDAwNAorOjEwNENCMDAwODkwODBCMUQwMUUwODkwOENCMUMxMTY5RDc2ODEyNENDQgorOjEwNENDMDAwODAwMDIwNTg0MDY4Qjk0MjAzRDE4MTQyMTlEOTExNjg0NworOjEwNENEMDAwMTdFMDAwMjRCOTQyMDlEOTgxNDIxMkQ5MTE2ODc4MUEyMworOjEwNENFMDAwMDBENTAzMzA4MDEwOTg0MjBCRDgwN0UwODE0MjA1RDhFOAorOjEwNENGMDAwNzgxQTAwRDUwMzMwODAxMDk4NDIwMkQ4MjAxQzkwQkM0RQorOjEwNEQwMDAwNzA0N0M4MUQwNTMwRkFFNzcwMDQwMDgwODBCNTgwMDA0OAorOjEwNEQxMDAwMEY0QTE3NTg4ODA3MDJEMDg4MDgwNDMwMDFFMDg4MDgzNQorOjEwNEQyMDAwMDMzMDM5Njk3QTY4OTE0MjA5RDkzOTY4QzA0NjM5NjFENgorOjEwNEQzMDAwRjk2ODdBNjg5MTQyMDJEOTM5NjhDMDQ2Rjk2MDgxMDAwMQorOjEwNEQ0MDAwMzg2OTAwRjBEMUZEMzg2MTgwQkMwOEJDMTg0NzAwMDAwQworOjEwNEQ1MDAwNzAwNDAwODA5MEI1MDMyMTA5MDcwMTQwMEMwRjAxMDQ4NQorOjEwNEQ2MDAwMDkwQzAxMjI5MjA3MDI0MEEzMDAxQzRGRkY1ODg5MDczQgorOjEwNEQ3MDAwODkwRjAwMDQwMDBDODAwODAwMjkwMEQwMDEzMDAwMkFBRgorOjEwNEQ4MDAwMDFEMDAyMzAwMEUwMDMzMEY5Njg3QTY4OTE0MjAyRDkxQworOjEwNEQ5MDAwMzk2OEMwNDZGOTYwODEwMEY4NjgwMEYwQTVGREY4NjA0OAorOjEwNERBMDAwMEY0ODAwNjkwMDI4MDVEMDAxMjBBMDQwMDJEMDIwMUMzNworOjEwNERCMDAwRkVGN0NBRkMwQjQ5QzgxRDE5MzAwMzc5MDAyMjAwMkJFRAorOjEwNERDMDAwMDVEMTA5NDlDODFEMTkzMDAzNzkwMDJCMDNEMDAyNzFBMAorOjEwNEREMDAwMDgxQ0ZGRjc3OUY5OTBCQzA4QkMxODQ3NzAwNDAwODBFNAorOjEwNERFMDAwRDAyQzAwODA2NDJEMDA4MEU0MkMwMDgwQjBCNTJCNDlDRAorOjEwNERGMDAwMDk3OTAwMjkwM0QxNDE2ODI5NEIxOTQzNDE2MDgxNjgzMQorOjEwNEUwMDAwNDkwODAyRDMwOTIxMDkwNDAxRTAwRDIxMDkwNDBDQzg1NQorOjEwNEUxMDAwMDgzODE5NDM4NzY4QkIwQTAzRDM0MzY4NUIwODAwRDM4QgorOjEwNEUyMDAwMDEzMTQwNjgwMzIzMUIwNzE4NDAwNzBGRjgwMDFENEM5MQorOjEwNEUzMDAwMDAxOTIzNjhDMDE4NTAzMDAwNzkwMTI4MTBEMTYwNjgyQgorOjEwNEU0MDAwMDEyODBERDAxMDFDMDBGMDcxRjgzODAxMDAxOTE5MjM0OQorOjEwNEU1MDAwREIwMUMwMTg0MTZCMDEzOTQxNjNCMEJDMDhCQzE4NDc4NQorOjEwNEU2MDAwMzgwMTAwMTkxOTIzREIwMUMwMTgwMzZCNUQxQzA1NjNCMQorOjEwNEU3MDAwQkQwMjJEMTlEQjAwRUIxODgwMzMxOTYzREE2MjgxNkJGOAorOjEwNEU4MDAwMDEzMTgxNjMwMTIxQjk0MDIyNjgxMTQzMjE2MDAxNkIyNgorOjEwNEU5MDAwODAyOUUyRDMwMDIxMDE2M0RGRTcwMDAwMjgwRjAwODBCMgorOjEwNEVBMDAwMDAwMDAwODBBMDFDMDA4MEYwQjUxRjRFNzA2ODAwMjgzNAorOjEwNEVCMDAwMzZEMTAwMjRCMTY4NDgxQ0M5MDA4OTE5QjA2MDMyNjgzNQorOjEwNEVDMDAwODkxODYwMzEwRDdCMDgyODAwRDNCNDYwMjgwMTgwMTk0RgorOjEwNEVEMDAwMTkyM0RCMDFDMDE4ODc2QjAwMkYyMUQwQzE2QTRCMUMzRQorOjEwNEVFMDAwQUEwMjkyMTlDOTAwNTExODgwMzFDMzYyQ0E2QTA5NkJCQgorOjEwNEVGMDAwMDEzRjg3NjM4MDJCMDBEM0M0NjIwMDJGMDZEMTAxMjdCNgorOjEwNEYwMDAwQUY0MDNCMUNEQjQzMzc2ODNCNDAzMzYwNDM2QjAxM0JBNgorOjEwNEYxMDAwNDM2MzEwMUMzNzFDMDBGMDA5Rjg3ODY4MDAyOEM5RDBEQQorOjEwNEYyMDAwRjBCQzA4QkMxODQ3MDAwMEEwMUMwMDgwRjBCNUNEMEZGNQorOjEwNEYzMDAwRUQwNzAxMjQwMDI3MkU0QjJFNEEwMDJEMUREMEQ4NkFFNAorOjEwNEY0MDAwMDEzMEQ4NjIxMDFDNTI2OTAwMkExMkQwMDI2OTUzMUMyOQorOjEwNEY1MDAwOTIwMDEyMTgwMzYxOTE2MTQxNjkwMTMxNDE2MTAyNjk1NgorOjEwNEY2MDAwMEYyQTAwRDMwNzYxMEYyOTAwRDM0NDYwRjBCQzA4QkNBRQorOjEwNEY3MDAwMTg0NzA4MUNGRkY3RUVGRUY4RTcxNTY5NkUxQ0FEMDAzOAorOjEwNEY4MDAwQUQxODE2NjFBOTYxNTU2OTAxMzU1NTYxMTY2OTBGMkU3NQorOjEwNEY5MDAwMDBEMzE3NjEwRjJEMDBEMzU0NjA4QzAyQTQwQTE2NEY2MgorOjEwNEZBMDAwM0E2RkZENjhGOTFENzkzMTAxMkQwQ0QxREI2RDVCMDg3RAorOjEwNEZCMDAwMDlEMzBCODkwMDJCMDZEMUZENkYwMzNCMkU2ODMzNDBDQworOjEwNEZDMDAwMkI2MDE0MjMwQjgxMTA2MDgwMDc4MDBBMjA0MzAzMDRBOAorOjEwNEZEMDAwMDBEMDAxMzg1MDYwMDk2QTA4MzI5MTQyMDBEODA3NEE2RgorOjEwNEZFMDAwMDAwRDAyRDM1MTIwODAwMzgyNjEzQTY3QkVFNzAwMDBDMgorOjEwNEZGMDAwQTQyQTAwODBBMDFDMDA4MDY4MEUwMDgwMjRBNzIwNDAwNgorOjEwNTAwMDAwQjBCNTAwMjgwNEQxMDEyMEMwMDUxNjQ5QzA0NjA4NjA4QgorOjEwNTAxMDAwMTU0QzAwMjU2NzY5MDAyRjE2RDBFMDY4NDExQzgwMDAwMAorOjEwNTAyMDAwMDAxOUUxNjA4MDY5MDEzRkZGRjc5NEZFRTA2ODBGMjhGNgorOjEwNTAzMDAwMDBEM0U1NjBFMDY4ODAwMDAwMTk4MDY5MDAwODAxRDNCMgorOjEwNTA0MDAwMDAyRkVBRDE2NzYxMDNFMDA4NDgwMTZEMDEzMTAxNjU3NQorOjEwNTA1MDAwNjU2MDIwNjgwMDI4MDFEMEZGRjcyNkZGQjBCQzA4QkNCRgorOjEwNTA2MDAwMTg0NzAwMDAwMDAwMDBCMEEwMUMwMDgwQTA4MjIwNDA3MworOjEwNTA3MDAwMDAyMDcwNDdCMEI0MTAyMzgyNjgxMzQwMDAyMTAwMkIzOQorOjEwNTA4MDAwMTVEMDBDNEIxQTQwMTIwMTgxMjQxNDQzMDI2ODE1Njg5NAorOjEwNTA5MDAwMTMxRDgwQ0IxQjY4MDQzQTAyNjAyMEMyODBDMjA4QzI4NAorOjEwNTBBMDAwMTQ2MDQyNjgwMTIzOUIwNzA0MzIxQTQzNDI2MDA4MUNDMworOjEwNTBCMDAwQjBCQzcwNDcwMEYwRkYwRkYwQjQ4MjY4NTMwOTM0RDNERQorOjEwNTBDMDAwMUI0QjFBNDAxMjAxODEyNjE2NDMwMzY4MUQ2ODFGMURFMQorOjEwNTBEMDAwMTBDRjNGNjgwNDNCMDM2MDIwQzMxMEMzODBDMzFFNjAzMQorOjEwNTBFMDAwNDM2ODFGMUQwMTIzOUIwNzNCNDM0MzYwQ0I2QjE4MUY4NQorOjEwNTBGMDAwQzg2MzgwQ0I4MEMwMUM2ODFGMUQwMzFEMDQ2MDM4MUM2MgorOjEwNTEwMDAwM0Y2OEMwNDYxRjYwMUYxRDQzNjgxQzA0MjQwQzgxMjM5OAorOjEwNTExMDAwMjM0MzNCNjA0MDY4MDAwQzAwMDQxMDQzNzg2MDA4NkUzNQorOjEwNTEyMDAwMDQzMDA4NjY0ODZFMDQzMDQ4NjYwMDIwRjBCQzcwNDdDMgorOjEwNTEzMDAwMDBGMEZGMEY4MEI0ODE2QTAxMjM5QjA3Q0ExRDA1MzI2RQorOjEwNTE0MDAwMUE0MzEyNjhDRjFEMDEzNzNCNDMxQjY4QzA0NkNCNjAzMgorOjEwNTE1MDAwMDEyMzlCMDcwRjFEM0I0MzFCNjhDMDQ2OEI2MDAxMjM0NworOjEwNTE2MDAwOUIwNzBCNDMxQjY4MENDMTAyNjIwMTZCQzA0NjBBNjJCRAorOjEwNTE3MDAwMDQyMzgxNjkxOTQzODE2MTAyNkJDMDQ2OTE2MTgxNkE5MAorOjEwNTE4MDAwMDQzMTgxNjIwMjZCQzA0NjkxNjJDMTFEMzkzMTRBOEI4NAorOjEwNTE5MDAwMDQzQTRBODM0OThCMDI2QjQwMzI1MTgzQzE4OTA0MzlGNgorOjEwNTFBMDAwQzE4MUMxNjgwMDZCQzA0NkMxNjAwMDIwODBCQzcwNDdFRgorOjEwNTFCMDAwMDA0NzA4NDcxMDQ3MTg0NzIwNDcyODQ3MzA0NzM4NDdENworOjEwNTFDMDAwMzA0MDJERTkwQ0MwOURFNTBDNDhBMEUxMjQ0OEIwRTEzOQorOjEwNTFEMDAwMUUwMDAwMEEwMUMwNENFMjE4NDBBMEUzNjQ1MTlGRTVBNAorOjEwNTFFMDAwOTQ1MDIwRTAwMDUwOTBFNTE0NDA5MEU1MDAzMDg1RTVCMworOjEwNTFGMDAwMDRDMDg1RTUwODEwODVFNTBDMjA4NUU1MTAxMDkwRTVENAorOjEwNTIwMDAwMTA1MDg1RTIwMTAwNTVFMTBDNTA5MDU1MDQwMDU1RTEyNQorOjEwNTIxMDAwMDUwMDAwMEEwNDEwOTBFNTAwNTA4MEU1MDA1MDgxRTU4QgorOjEwNTIyMDAwMDAwMEEwRTMzMDQwQkRFODFFRkYyRkUxMDAzMDkzRTUxMQorOjEwNTIzMDAwMDgyMDkwRTUwMTMxODNFMzAyMzY4M0UzMDMwMDU1RTE2MgorOjEwNTI0MDAwMTQzMDgwRTVGMkZGRkYxQTAxMDBBMEUzRjRGRkZGRUE0QgorOjEwNTI1MDAwMDEwNjFDRTNGMUZGRkYwQUVDMTA5RkU1MDJDNkNDRTM1OAorOjEwNTI2MDAwNTQyMDkxRTVFNDMwOUZFNTUwMTA5MUU1RDlGRkZGRUEyNQorOjEwNTI3MDAwRjA0NzJERTkyMEMwOURFNTBDNjhBMEUxMjY2OEIwRTE2QgorOjEwNTI4MDAwMjUwMDAwMEExODQwQTBFM0I4NTA5RkU1OTQwMDAwRTAxNAorOjEwNTI5MDAwMDUwMDgwRTAwODQwOTBFNTA0ODA5MEU1MDA3MEEwRTMwMAorOjEwNTJBMDAwMUZDMEEwRTMwMkM0OENFMzAwNTA5MEU1MTA5MDkwRTU4RAorOjEwNTJCMDAwMTRBMDkwRTUwMDMwODVFNTA0QzA4NUU1MDgxMDg1RTU3QgorOjEwNTJDMDAwMEMyMDg1RTUxMDUwODVFMjA5MDA1NUUxMEM1MDkwNTUwMQorOjEwNTJEMDAwMEEwMDU1RTExNTAwMDAwQTAzNzAxN0UyMjAxMDgxRTI3MAorOjEwNTJFMDAwMjAzMDgzRTIwQTAwMDAwQTAwNjA5NkUyMDE3MDg3RTI0MworOjEwNTJGMDAwMDkwMDAwMEEyMDYwNDZFMjIwMDA1NkUzRUNGRkZGQ0FFNgorOjEwNTMwMDAwMDA3MEEwRTMwMUMwNDZFMjAyQzQ4Q0UzMDA2MEEwRTNBOQorOjEwNTMxMDAwRTdGRkZGRUEwMDUwODhFNUYyRkZGRkVBMDAxMEEwRTM5NAorOjEwNTMyMDAwMDA1MDgwRTUwMTAwQTBFMUYwNDdCREU4MUVGRjJGRTEzRAorOjEwNTMzMDAwMDBBMDk0RTUwQTAwNTVFMTE0QTA4MEU1RTVGRkZGMUFGRQorOjEwNTM0MDAwMDExMEEwRTNGNUZGRkZFQUE4MDMwMDgwN0MyOTAwODA5QworOjEwNTM1MDAwMDA4MDIwNDA2ODgyOUZFNTBCOTJBMEUzNjRBMjlGRTU1NQorOjEwNTM2MDAwNThCMDlBRTUwRUYwQTBFMTU0QjA5QUU1MUVGRjJGRTE4NworOjEwNTM3MDAwM0Y0MDJERTkwMDAwNEZFMTFGMDAwMEUyMTIwMDUwRTMyMgorOjEwNTM4MDAwNTQwMDAwMEEwMDAwMEZFMTgwMDBDMEUzMDBGMDIxRTFCQQorOjEwNTM5MDAwMDQ1MEEwRTMwMDQwOTlFNTA5MDAwMEVBMDIwMDE0RTM4QworOjEwNTNBMDAwNTMwMDAwMUI4MDAwMTRFMzU5MDAwMDFCMjAwMDE0RTM4RAorOjEwNTNCMDAwNTkwMDAwMUIwMjA3MTRFMzU5MDAwMDFCMDEwNjE0RTMwNworOjEwNTNDMDAwNTkwMDAwMUIwODAwMTRFMzQ1MDAwMDFCMDIwNTE0RTMwQworOjEwNTNEMDAwNEEwMDAwMUIwMjA4MTRFMzRCMDAwMDFCRTUwRTE0RTMxNworOjEwNTNFMDAwMDcwMDAwMEEwNDIwOThFNTBDMTA5OEU1MDQzMDUyRTIwQQorOjEwNTNGMDAwM0MzMEEwQjMwNDMwODhFNTAyMDA5MUU3MEZFMEEwRTE2MworOjEwNTQwMDAwMTBGRjJGRTEwMTUwNTVFMjAzMDAwMDBBMDA0MDk5RTUyQQorOjEwNTQxMDAwMEMwMDlBRTUwMDAwMTRFMTFCRkYyRjExMDgwMDlBRTUyQgorOjEwNTQyMDAwMDAwMDE0RTEwQjAwMDAwQTAxMEMxNEUzOTgwMTlGMTUyMQorOjEwNTQzMDAwMEZFMEEwMTExMEZGMkYxMTAyMDQxNEUzOEMwMTlGMTUzRgorOjEwNTQ0MDAwMEZFMEEwMTExMEZGMkYxMTAxMDkxNEUzODAwMTlGMTUzNworOjEwNTQ1MDAwMEZFMEEwMTExMEZGMkYxMTA0MDA5QUU1MDAwMDE0RTFFNQorOjEwNTQ2MDAwMTYwMDAwMEE1NEUwOEZFMjA0MDAxNEUzNDAwMDlBMTU4RAorOjEwNTQ3MDAwMTBGRjJGMTEwMjBBMTRFMzQ0MDA5QTE1MTBGRjJGMTE5OAorOjEwNTQ4MDAwMDIwOTE0RTM0ODAwOUExNTEwRkYyRjExMDEwMjE0RTNEQQorOjEwNTQ5MDAwNEMwMDlBMTUxMEZGMkYxMTAxMDQxNEUzNTAwMDlBMTVDNworOjEwNTRBMDAwMTBGRjJGMTEwMTBBMTRFMzIxMDAwMDFCMDIwMDE0RTM3NgorOjEwNTRCMDAwMEUwMDAwMUIxMDAwOUFFNTAwMDAxNEUxMUMwMDAwMUIwOAorOjEwNTRDMDAwMDA0MDk5RTUwNDUwQTBFMzAwNDA5NEUyMUJGRjJGMTEzNworOjEwNTREMDAwM0Y0MEJERTgwNEYwNUVFMkMwMDA4MEUzMDBGMDYxRTExRgorOjEwNTRFMDAwRkFGRkZGRUExODAwOUFFNTFDMTA5QUU1MTFGRjJGRTE3OAorOjEwNTRGMDAwNTRCMDlBRTUxQzEwOUFFNTE0MDA5QUU1MTFGRjJGRTFDQgorOjEwNTUwMDAwMjAxMDlBRTUwMDAwQTBFMzExRkYyRkUxMjQxMDlBRTU5NgorOjEwNTUxMDAwMTFGRjJGRTEyODEwOUFFNTExRkYyRkUxMkMxMDlBRTVEOQorOjEwNTUyMDAwMTFGRjJGRTEzMDEwOUFFNTExRkYyRkUxMzQxMDlBRTVCOQorOjEwNTUzMDAwMTFGRjJGRTFGRUZGRkZFQTM4RTA5QUU1M0MxMDlBRTUwMworOjEwNTU0MDAwMTgwMDlBRTUxMUZGMkZFMTM4RTA5QUU1M0MxMDlBRTU0MgorOjEwNTU1MDAwMTQwMDlBRTUxMUZGMkZFMTY0MjA5RkU1MDAzMDkyRTVFOQorOjEwNTU2MDAwMDAzMDUzRTAwQTAwMDBCQTAwMzA4MkU1MEMwMDkyRTVGQQorOjEwNTU3MDAwMDgzMDkyRTUwMDEwOTFFMjAzMDAwMDBBMDMxMDgwRTc3MgorOjEwNTU4MDAwMDQzMDUzRTIzQzMwQTBCMzA4MzA4MkU1MDEwMEEwRTNEMAorOjEwNTU5MDAwMUVGRjJGRTEzQzEwOUZFNTAwMDA5MUU1MDEwMDgwRTIzNQorOjEwNTVBMDAwMDAwMDgxRTUwMDAwQTBFM0Y4RkZGRkVBMTAwMDlGRTU5RQorOjEwNTVCMDAwMDgxMDkwRTUwNDEwNTFFMjNDMTBBMEIzMDgxMDgwRTVGQgorOjEwNTVDMDAwMUVGRjJGRTFFNDJEMDA4MENDMDQwMDgwNzEyQkZGRkYzMworOjEwNTVEMDAwRDEzREZGRkZDOTJCRkZGRkEwODIyMDQwQzkxQzg5MDhENQorOjEwNTVFMDAwODkwMDAxMjM4NTRBNUIwNzE4NDMxMzY4NUIxODEzNjAyMQorOjEwNTVGMDAwMDAxRjgxQTM1QjFBMTg0NzA0MjBBMEU1MDQyMEEwRTU0MgorOjEwNTYwMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVGNgorOjEwNTYxMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVFNgorOjEwNTYyMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVENgorOjEwNTYzMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVDNgorOjEwNTY0MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVCNgorOjEwNTY1MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVBNgorOjEwNTY2MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU5NgorOjEwNTY3MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU4NgorOjEwNTY4MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU3NgorOjEwNTY5MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU2NgorOjEwNTZBMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU1NgorOjEwNTZCMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU0NgorOjEwNTZDMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUzNgorOjEwNTZEMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUyNgorOjEwNTZFMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUxNgorOjEwNTZGMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUwNgorOjEwNTcwMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVGNQorOjEwNTcxMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVFNQorOjEwNTcyMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVENQorOjEwNTczMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVDNQorOjEwNTc0MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVCNQorOjEwNTc1MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTVBNQorOjEwNTc2MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU5NQorOjEwNTc3MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU4NQorOjEwNTc4MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU3NQorOjEwNTc5MDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU2NQorOjEwNTdBMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU1NQorOjEwNTdCMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTU0NQorOjEwNTdDMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUzNQorOjEwNTdEMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUyNQorOjEwNTdFMDAwMDQyMEEwRTUwNDIwQTBFNTA0MjBBMEU1MDQyMEEwRTUxNQorOjEwNTdGMDAwMDQyMEEwRTUwNDIwQTBFNTFFRkYyRkUxRTQyRDAwODA5OQorOjEwNTgwMDAwOTgwMDlGRTU5ODEwOUZFNTAxMjA0MEUwOTQzMDlGRTVDNworOjEwNTgxMDAwMDAwMDkxRTUwMzAwNTBFMTAzMDAwMDFBMDQxMDgxRTI0QQorOjEwNTgyMDAwMDQyMDUyRTIwMDAwMDAwQUY4RkZGRkVBNzgwMDlGRTUzQQorOjEwNTgzMDAwMDAyMDgwRTU3NDAwOUZFNTc0MTA5RkU1MDEyMDQwRTBBMgorOjEwNTg0MDAwNjAzMDlGRTUwMDAwOTFFNTAzMDA1MEUxMDMwMDAwMUE3RAorOjEwNTg1MDAwMDQxMDgxRTIwNDIwNTJFMjAwMDAwMDBBRjhGRkZGRUE4RgorOjEwNTg2MDAwNTAwMDlGRTUwMDIwODBFNTRDMDA5RkU1NEMxMDlGRTUyRgorOjEwNTg3MDAwMDEyMDQwRTAyQzMwOUZFNTAwMDA5MUU1MDMwMDUwRTE1RAorOjEwNTg4MDAwMDMwMDAwMUEwNDEwODFFMjA0MjA1MkUyMDAwMDAwMEEyMgorOjEwNTg5MDAwRjhGRkZGRUEyODAwOUZFNTAwMjA4MEU1MUVGRjJGRTFDQQorOjEwNThBMDAwN0MzNDAwODA4MDMwMDA4MEFEREVBRERFQzAwNDAwODAzRQorOjEwNThCMDAwRkMzNzAwODA4MDM0MDA4MEM0MDQwMDgwRkMzRjAwODBGRQorOjEwNThDMDAwNDAzODAwODBDODA0MDA4MDc4NDcwMDAwNzFFQUZGRUE5MQorOjEwNThEMDAwNzg0NzAwMDAzOUZFRkZFQTc4NDcwMDAwNjNGRUZGRUFFMAorOjEwNThFMDAwNzg0NzAwMDAxQkZGRkZFQTc4NDcwMDAwNkJFQUZGRUFGOQorOjEwNThGMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwMDgwMjgwNDAwMDBGRQorOjEwNTkwMDAwRjgzRDAwMDAwMDAxMDA4MDAwRkYwMDAwMDAwMDAwMDBFMgorOjEwNTkxMDAwQjkwQkZGRkYwMDAwMDAwMEQ1MEJGRkZGMDNGRjA2NTQ4QgorOjEwNTkyMDAwMDMwMDAwMDA3NTA0RkZGRjAwMDAwMDAwQTEwNUZGRkY1OQorOjEwNTkzMDAwMDRGRjA3NTQwMzAwMDAwMEI1MDRGRkZGMDAwMDAwMDA0RgorOjEwNTk0MDAwRjEwNUZGRkYwNUZGMDU1NDAzMDAwMDAwMzkwNEZGRkZDOAorOjEwNTk1MDAwMDAwMDAwMDA1NTA1RkZGRjAxRkYwNDAwMDMwMDAwMDBFOAorOjEwNTk2MDAwNDExOEZGRkYwMDAwMDAwMDYxMEVGRkZGMDJGRjAyMDg2OAorOjEwNTk3MDAwMDAwMDAwMDBBMTAyRkZGRjAwMDAwMDAwRjEwMkZGRkY5NQorOjEwNTk4MDAwRkZGRjAxNDQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwNTk5MDAwOUQwREZGRkYwNjAwRkYwMDAwMDAwMDAwM0Q1MEZGRkZDRgorOjEwNTlBMDAwODE1MEZGRkYwMDAwMDAwMEZGRkZGRjAwMDAwMDAwMDAyQgorOjEwNTlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkZGRkZGMDBFQQorOjEwNTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwNTlEMDAwRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwNTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgwNTAwODBFQQorOjEwNTlGMDAwMTE3NTIxNDAxQjc1MjE0MDMxNzUyMTQwNDk3NTIxNDBBOQorOjEwNUEwMDAwNTU3NTIxNDA2Mzc1MjE0MDdENzUyMTQwQTk3NTIxNDA2MAorOjEwNUExMDAwNkQ3NjIxNDBDNTc2MjE0MEQzNzYyMTQwREQ3NjIxNDA0OAorOjEwNUEyMDAwRTc3NjIxNDA5OTc3MjE0MEE3NzcyMTQwQjU3NzIxNDAzQgorOjEwNUEzMDAwNjE3ODIxNDA1RjdDMjE0MEU5N0MyMTQwODk3RDIxNDBDMworOjEwNUE0MDAwQkQ3RTIxNDBDOTdFMjE0MDI5N0YyMTQwOEQ3RjIxNDA5QworOjEwNUE1MDAwQjk3RjIxNDBERDdGMjE0MDFEODAyMTQwNDU4MDIxNDBDQworOjEwNUE2MDAwOEQ4MDIxNDA5RDgwMjE0MEM1ODAyMTQwRDU4MDIxNDBFRQorOjEwNUE3MDAwMUQ4MTIxNDA1QjgxMjE0MEIxODEyMTQwMTE4MjIxNDA2MworOjEwNUE4MDAwMUI4MjIxNDAxRjgyMjE0MDhEODIyMTQwRDk4MjIxNDBFQQorOjEwNUE5MDAwMzE4MzIxNDA2RDgzMjE0MEQxODMyMTQwMDk4NDIxNDBGRAorOjEwNUFBMDAwMTk4NDIxNDA1MTg0MjE0MDYxODQyMTQwNzU4NDIxNDAyMgorOjEwNUFCMDAwOUQ4NDIxNDBBNzg0MjE0MEIxODQyMTQwMTU4NTIxNDA0NworOjEwNUFDMDAwNDU4NTIxNDA1MTg1MjE0MEM1ODUyMTQwQ0Y4NTIxNDAxNAorOjEwNUFEMDAwRDk4NTIxNDBFMzg1MjE0MEVEODUyMTQwRjc4NTIxNDA4RQorOjEwNUFFMDAwMDE4NjIxNDAwQjg2MjE0MDE1ODYyMTQwMDE4OTIxNDBGNQorOjEwNUFGMDAwMUY4NjIxNDAyOTg2MjE0MDMzODYyMTQwM0Q4NjIxNDA1MgorOjEwNUIwMDAwNjU4NjIxNDA2Rjg2MjE0MEQxODYyMTQwREI4NjIxNDA3OQorOjEwNUIxMDAwRTU4NjIxNDBFRjg2MjE0MEY5ODYyMTQwOUQ3NDIxNDA5MQorOjEwNUIyMDAwMDM4NzIxNDA2OTg3MjE0MEI1ODcyMTQwRjk4NzIxNDBCQgorOjEwNUIzMDAwMDk4ODIxNDA5RDc0MjE0MDU1ODgyMTQwNTk4ODIxNDA4MQorOjEwNUI0MDAwNUQ4ODIxNDBCNTg4MjE0MEREODgyMTQwRTk4ODIxNDBEOQorOjEwNUI1MDAwRUQ4ODIxNDBGMTg4MjE0MEY1ODgyMTQwRjk4ODIxNDBENQorOjEwNUI2MDAwRkQ4ODIxNDAyRDg1MjE0MDg5ODUyMTQwOUQ3NDIxNDA1QgorOjEwNUI3MDAwOUQ3NDIxNDAwRDg5MjE0MDlENzQyMTQwRTE3NDIxNDA5NAorOjEwNUI4MDAwOUQ3NDIxNDA5RDc0MjE0MDlENzQyMTQwOUQ3NDIxNDA0RAorOjEwNUI5MDAwOUQ3NDIxNDA5RDc0MjE0MDZCNzgyMTQwRjU3QjIxNDAwQworOjEwNUJBMDAwMzE3QzIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwNUJCMDAwMDAwMDAwMDA1QzAxMTg0MDU4MDExODQwMjRBMzIwNDA1OAorOjEwNUJDMDAwMjRBNzIwNDAwMDAwMDAwMDAwMDAwMDAwNkMwMTE4NDBFNQorOjEwNUJEMDAwNjgwMTE4NDAyNDgzMjA0MDI0QTMyMDQwMDAwMDAwMDBENgorOjEwNUJFMDAwMDAwMDAwMDA3QzAxMTg0MDc4MDExODQwMDAwMDAwMDAwRgorOjEwNUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMwMTE4NDBDMAorOjEwNUMwMDAwODgwMTE4NDAyNEE5MjA0MDI0QUIyMDQwMDAwMDAwMDA1NworOjEwNUMxMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAxMjAwMTgwMDEyMDA0MAorOjEwNUMyMDAwMEMwMDEyMDAxQzAwMTIwMDI0QTgyMDQwQTRBODIwNDA1MAorOjEwNUMzMDAwQTRBODIwNDAyNEE5MjA0MDAwMDAwMDAwRDFBODIxNDBCMQorOjEwNUM0MDAwMkRBQTIxNDAwMDAwMDAwMDg5NzAyMTQwQzlBMTIxNDBGNworOjEwNUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDA0MworOjEwNUM2MDAwNTc4OTIxNDBEMUE4MjE0MEM1MkZGRkZGMDUyMUZGRkYwMworOjEwNUM3MDAwRUYyMEZGRkY1OUE3MjE0MDM0MkUwMDgwNDgyRTAwODBERQorOjEwNUM4MDAwNUMyRTAwODAzMDMzM0EzMTMxM0EzMTMxMDAzMDM3MkZEOQorOjEwNUM5MDAwMzIzMzJGMzAzMTAwMzAzMDMwMzAzMTM1MzYzOTAwNDMzNworOjEwNUNBMDAwNkY3MDc5NzI2OTY3Njg3NDIwMjg2MzI5MjAzMjMwMzBGOAorOjEwNUNCMDAwMzEyMDMzNDM2RjZEMjA0MzZGNzI3MDZGNzI2MTc0Njk2RQorOjEwNUNDMDAwNkY2RTBBMDAwODEwMDAwMzAwMDAwMDAwMDAwMDAwMDBEMgorOjEwNUNEMDAwMDAwMDAwMDA4QzUzRkZGRjI3RjA3REZEMDAwMTAwMDI1MworOjEwNUNFMDAwREEwRTgyMDAwMTQwNjQwNDY0MkQwMDgwRTQyQzAwODAwMAorOjEwNUNGMDAwNjkzRUZGRkZDOTRGRkZGRkQ1MjRGRkZGQzkzQkZGRkZGMAorOjEwNUQwMDAwMjkzQ0ZGRkYxOTFBRkZGRjY1MTFGRkZGQ0M1M0ZGRkY2RQorOjEwNUQxMDAwMjE0MEZGRkY4OTcwMjE0MDQ5NzIyMTQwRDkzRkZGRkY5OAorOjEwNUQyMDAwMjE5QTIxNDA4NTI0RkZGRjY0NTNGRkZGOEM1M0ZGRkYxRQorOjEwNUQzMDAwMDAwMDAwMDBGRkZGMDAwMDgwMzAwMDgwMDAwMDAwMDAzNQorOjEwNUQ0MDAwRkZGRjAwMDAwMDAwMjA0MEIwNTAwMDAwN0IwRTAwMDA2QworOjEwNUQ1MDAwMDA2RTIxNDAwMDAwMDAwMDAwMDAwMDAwRUQ4OTIxNDA5RAorOjEwNUQ2MDAwOEI4OTIxNDBBNThDMjE0MDA1OEQyMTQwQ0Q4RDIxNDA3RQorOjEwNUQ3MDAwOEI4QjIxNDBBOThFMjE0MDE1OEYyMTQwNjk4QjIxNDBCQQorOjEwNUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwNUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwNURBMDAwMDAwMDAwMDA1OUJEMjE0MEMxQkQyMTQwMkRCRTIxNDA1MQorOjEwNURCMDAwMDAyMDBBNEEwQjIzMUIwMkQxMTgyRDIzOUIwMUQzMTg2NAorOjEwNURDMDAwODg2MUQ4NjBEODYzODAzMkM4NjAwODYxNDg2MUQwNjI1OQorOjEwNUREMDAwMDM0OEMwNDY0ODYwODg2MDcwNDcwMDAwNjgwRTAwODAzNQorOjEwNURFMDAwRkUwMzAwMDBGMEI1ODRCMDBDMUMwNTFDMDAyMzAwOTNEQQorOjEwNURGMDAwRkZGN0RFRkY2ODQ5MEIyMzFCMDJDRjE4Nzg2ODI4NDBBNQorOjEwNUUwMDAwMDAyMkY4NjAzQTYxQkE2ODIyNDA3QTYxMEMxQzQxMDlBQworOjEwNUUxMDAwMDNEMjUxMDkwMUQyODAwQTAyRDM2MDQ4MDBGMEMyRjhDRgorOjEwNUUyMDAwMDEyMEY5Njg0OTA5MDNEMjc5Njk0OTA5MDBEMjAwMjBBMworOjEwNUUzMDAwMDAwNjAwMEUwM0YwRDRGQUY4NjgwMDI4NzBEMDAwMjNBMgorOjEwNUU0MDAwMDI5MzAxOTM1NDRBMDEyMzE4NDNGODYwMDAyMEQ1MURBMgorOjEwNUU1MDAwNzkzNTAzOTUwMTI0MDAyMTRGNERGQTY4MjI0MDM5RDA0RAorOjEwNUU2MDAwOEEwMDUyMTg5MjAwNEU0QjlCNUMxRTFDODM0MjA0RDA0OQorOjEwNUU3MDAwNEI0QkQzMTg1Qjc4ODM0MjJDRDE0OTRCRDIxOEQzNzg0MworOjEwNUU4MDAwMDM5REVENkFBQjQyMDJEOTAzOURDMDQ2RUI2MjUzNjhBNQorOjEwNUU5MDAwNUIwODAxRDMwMTIzMDA5Mzg2NDIwQUQxOTU2ODAyOUJENworOjEwNUVBMDAwNUUxQzAyOTY5QjAwM0M0RTlFMTkwQjIzMUIwMkYzMThBRQorOjEwNUVCMDAwOUQ2MTUzNzg4MzQyMEREMUQyNjgwMTlCNUQxQzAxOTU5MQorOjEwNUVDMDAwOUIwMDM1NEQ1RDE5MkQyMzlCMDFFQjE4REE2MDNBNjk3MworOjEwNUVEMDAwMDEzMjNBNjE2NDAwMDEzMTBCMjlCREQzMDEzMDA5MjgzOAorOjEwNUVFMDAwQjhEMzAwMjAwMjlCOTkwMDJCNEE4OTE4MEIyMzFCMDI3MAorOjEwNUVGMDAwQzkxODg4NjEwMTlCOTkwMDg5MTgyRDIzOUIwMUM5MTgzNQorOjEwNUYwMDAwQzg2MDAwOUIwMDJCMENEMTgxMDA4OTE4MEIyMzFCMDI1OQorOjEwNUYxMDAwQzkxOENCNjlDMDQ2OEI2MTAxMzAwQjI4RjREMzA4RTA2NworOjEwNUYyMDAwMDdFMDAzOURFODZBMzAyODAzRDIzMDIwMDM5REMwNDY3NQorOjEwNUYzMDAwRTg2MjE5NEE3ODY5MDAyODJBRDAwMDIxMDEyMzE4NDMxMQorOjEwNUY0MDAwNzg2MTAwMjAwMTI0MDAyMjEzNEU3QjY5MjM0MDEwRDA4OQorOjEwNUY1MDAwOTMwMDlCMTg5QjAwMTI0RDVCMTk5RDc4ODU0MjA4RDFEOAorOjEwNUY2MDAwMUQ2OTBCMUM5QjAwOUUxOTJEMjM5QjAxRjMxOERENjNGQgorOjEwNUY3MDAwMDEzMTY0MDAwMTMyMEIyQUU2RDMwMTMwMDkyOEUxRDM1NAorOjEwNUY4MDAwMDAyMDg5MDAwNDRBODkxODJEMjM5QjAxQzkxOEM4NjM4MQorOjEwNUY5MDAwMDRCMEYwQkMwOEJDMTg0NzY4MEUwMDgwMzA1M0ZGRkYwNworOjEwNUZBMDAwMDAwMTAwODAwMDQ3MDg0NzEwNDcxODQ3Nzg0N0MwNDY1RgorOjEwNUZCMDAwMThDMDlGRTUxQ0ZGMkZFMTc4NDdDMDQ2MTBDMDlGRTU0MQorOjEwNUZDMDAwMUNGRjJGRTE3ODQ3QzA0NjA4QzA5RkU1MUNGRjJGRTE2QQorOjEwNUZEMDAwMzg1MkZGRkY4ODUxRkZGRkQ1QjAyMTQwRjBCNTA0MjBCMworOjEwNUZFMDAwMUE0OTAxMjUwODYwMUE0RkJCMjMxQjAxRjgxODA1NzNENQorOjEwNUZGMDAwMTg0ODQxNkIyQzA1MDAyMDdBNkUxNzRCOEE0MjFERDA0MQorOjEwNjAwMDAwMTk3QjAwMjkxN0QxRDkxREZGMzEzQTMxNDk3ODFFMUM1RgorOjEwNjAxMDAwMDAyOTEwRDFCMDYwMTAyMDcwNjAxMDRBMTA0OUZGRjdCRAorOjEwNjAyMDAwQzNGRjAwMjgwN0QwMzU3MzA0MjNCODY5MTg0M0I4NjE0QgorOjEwNjAzMDAwMjA2MTAwRjAxN0Y4RjBCQzA4QkMxODQ3MTg3MzA0MjM1RgorOjEwNjA0MDAwQjg2OTk4NDNCODYxMjA2MUY1RTcwMDAwMDAwMDAwQjAyRQorOjEwNjA1MDAwNjgwRTAwODAwMDAxMTg0MDI4MDUwMDgwMjA1NUZGRkZEMQorOjEwNjA2MDAwN0Q3MTIxNDBGOEI1MTU0RjM5NkMxNTQ4NDA2RTBDMUFGQQorOjEwNjA3MDAwMTQ0RTcxNjgxNDREQTE0MjA2RDgxNDRBMEE0MzAwOTI4NgorOjEwNjA4MDAwQjk2QjA5MThGQTZCMTFFMDExMjI1MjA1MjI0MzAwOTJGNAorOjEwNjA5MDAwQjk2QjA5MTgwMDIwRkE2QjJCMUNGRkY3OERGRjcwNjg5NQorOjEwNjBBMDAwMDAxQjBBNEEwMjQzMDA5MkI5NkJGQTZCMDAyMDJCMUNCQQorOjEwNjBCMDAwRkZGNzgyRkZGOEJDMDhCQzE4NDcwMDAwN0MyOTAwODA2RAorOjEwNjBDMDAwNjgwRTAwODAyODA1MDA4MDQ0ODAyMDQwMDAwMDM3MDJEMAorOjEwNjBEMDAwRjBCNTJCNEZCODY4Nzk2OEMwMTkyMDMwMjk0QUZGRjcwRQorOjEwNjBFMDAwNjNGRjAxMjBDMDAyMjg0OUMwNDYwODYwQjk2ODM4MUMxNworOjEwNjBGMDAwMjY0RDAwMjQyNjRFRUYxRDc5MzcwMDI5MzFEMTMxNjgxNQorOjEwNjEwMDAwMEE3ODEyMEEwM0QyMDQ3M0YwQkMwOEJDMTg0NzQ5NzgxNQorOjEwNjExMDAwMDAyOTBDRDEwNTFDNDA2ODAwRjAzRUY5MzA2ODAwRjAwMQorOjEwNjEyMDAwNjdGODAwMjgyNkQxMkM3M0ZGRjc1OEZGMjJFMDA5MDFGOQorOjEwNjEzMDAwMDcxQzQxNjAwODFDMTc0QTE3NDlGRkY3MzVGRjAwMjg2NAorOjEwNjE0MDAwMDdEMTNDNzMwNDIzQTg2OTk4NDM5OTA0QTg2MTA4NjFBNgorOjEwNjE1MDAwREFFNzEwMjAwMEYwMjBGOTEwMjBCODYwRkZGNzgyRkY4NgorOjEwNjE2MDAwRDJFNzA1MUM0MDY4MDBGMDE3RjkzMDY4MDBGMDQwRjhFRAorOjEwNjE3MDAwMDAyOEQ4RDAwMjIzRjg2QjE4NDNGODYzQzRFNzAwMDA2NgorOjEwNjE4MDAwMjgwNTAwODBBNTU1RkZGRjAwMDAwMEIwNjgwRTAwODBDNAorOjEwNjE5MDAwRTQwMTAwODAyMDU1RkZGRjdENzEyMTQwOTBCNTAxMjA3MgorOjEwNjFBMDAwNDAwMzEwNDkwMDI3MDg2MDBGNENFMDFERkYzMDNBMzBEMworOjEwNjFCMDAwNDc3MEUwNjk4MDAwMDAxOTAwNjkwMEYwRDdGOEUwNjlENQorOjEwNjFDMDAwMDAyODAxRDBFNzYxMDFFMDAxMjBFMDYxMDc0ODAyMjNENworOjEwNjFEMDAwQzE2QjE5NDNDMTYzMjc3M0ZGRjcwMEZGOTBCQzA4QkM3NAorOjEwNjFFMDAwMTg0NzAwMDAwMDAwMDBCMDI4MDUwMDgwRTgwRTAwODA3RAorOjEwNjFGMDAwODBCNTg0QjAwNzFDNzg4ODZEMjgwM0RCMzgxQzAwRjA1QworOjEwNjIwMDAwRjdGODE3RTA4MDAwMEQ0OTA5NTgzODFDRkZGN0NCRkU1RQorOjEwNjIxMDAwMDAyODBGRDEzOTc4QzkwOTBDRDM2OTQ2MzgxQzAwRjAyMQorOjEwNjIyMDAwQ0ZGODY4NDYwMDIxMDBGMDBCRjgwMDI4MDFEMTAxMjBDQQorOjEwNjIzMDAwMDBFMDAwMjAwNEIwODBCQzA4QkMxODQ3RTgwMTAwODBFMgorOjEwNjI0MDAwRjBCNTgyQjAwMjFDNDE0QkREMURGRjM1M0EzNTJGNzg4OQorOjEwNjI1MDAwMDAyRjAxRDAwMDI3MDBFMDAxMjcyRjcwMkY3OEZCMDBDRQorOjEwNjI2MDAwREIxOTVCMDEzQTRGREMxOTQwNzgwMDAxQzcxRDA5Mzc4MworOjEwNjI3MDAwMDAyMDgzMDBENjU4QzA0NkU2NTAwMTMwMDQyOEY4RDNFOQorOjEwNjI4MDAwMDAyOTBGRDAwMDIyQkIwODAxOTM4MzQyMEJEOTEzMUNCNQorOjEwNjI5MDAwOUIwMENCNTg4NjAwQTM1MTAxOUIwMTMwMDEzMjgzNDIwMQorOjEwNjJBMDAwRjVEODAwRTAxMDI3MkI0ODAyNkQ4MDZFMkE0OTgyNDIwMworOjEwNjJCMDAwMDNEODgyMUFDQjZDOUExQTAwRTAxMjFBQkE0MjA1RDg5NworOjEwNjJDMDAwMjY0ODgxNkIwMTMxODE2MzAxMjAzN0UwQzMxOUNBNkMxNAorOjEwNjJEMDAwOTM0MjA4RDgyMjRBM0E0MzAwOTIwQTFDNDk2QzA5MTg5MgorOjEwNjJFMDAwOTI2QzIzMUMxMkUwMTYxQTAwOTYxQjQ5NDk2QzA5MTg3RgorOjEwNjJGMDAwMTk0ODgyNkMwMzIwMjMxQ0ZGRjc1RUZFQjgxQjE4NEE2NgorOjEwNjMwMDAwMDI0MzAwOTJBMzE5MTQ0ODgyNkM0MTZDMDMyMEZGRjdFQQorOjEwNjMxMDAwNTNGRTAxMjAwRDQ5QzA0NjY4NzA4QTY5OTIwMDUyMThFOAorOjEwNjMyMDAwMTc2MThBNjkwMDJBMDJEMDAwMjc4RjYxMDBFMDg4NjEyNgorOjEwNjMzMDAwMEM0ODAyMjNDMTZCMTk0M0MxNjMwMDIwMDEyNzBBNDk5RAorOjEwNjM0MDAwQzA0NjRGNzMwMkIwRjBCQzA4QkMxODQ3MjgwNTAwODA1NworOjEwNjM1MDAwNTBCQTIwNDA2ODBFMDA4MDdDMjkwMDgwQTA4MjIwNDAzNgorOjEwNjM2MDAwMDAwMDE5MDJFODBFMDA4MDE4MUEwMDgwMDc0OThBNkVBMgorOjEwNjM3MDAwMTAxODA3NEFEMjZDMTMwNDFCMEM4MzQyMDBEODgwMUFGMQorOjEwNjM4MDAwODg2Njg4NkUwMzQ5QzA0NjQ4NjE3MDQ3NjgwRTAwODA4MQorOjEwNjM5MDAwN0MyOTAwODA5MEVFMjA0MDA2NDk0QTZFMTAxODA2NEE3QgorOjEwNjNBMDAwMTI2QzgyNDIwMEQ4ODAxQTQ4NjY0ODZFMDM0OUMwNDY4MworOjEwNjNCMDAwMDg2MTcwNDc2ODBFMDA4MDdDMjkwMDgwOTBFRTIwNDBDNAorOjEwNjNDMDAwMDUyMjBBNjA4Mjg4QzA0NjhBODAwMDIyNEE3MDQwODg3RQorOjEwNjNEMDAwQzA0NjQ4ODBDQTgwOEE2MENBNjA3MDQ3MDUyMjAyNjA1MQorOjEwNjNFMDAwMDAyMjgyODA0MjcwNDE4MEMyODA4MjYwQzI2MDcwNDcxOQorOjEwNjNGMDAwODBCNTg0QjAwNzFDMEU0ODQxNkIwMTMxNDE2MzY5NDY4QQorOjEwNjQwMDAwMzgxQ0ZGRjdEREZGMzg2OEMwNDYwMDkwNDUyMDAwQUIyMAorOjEwNjQxMDAwMTg3MDAxMjdERjgwNjg0NjAwMjFGRkY3MTFGRjAwMjg3MAorOjEwNjQyMDAwMDFEMTM4MUMwMEUwMDAyMDA0QjA4MEJDMDhCQzE4NDczMworOjEwNjQzMDAwQTA4MjIwNDAwMEI1ODRCMEMxODgwOTRBQzA0NjkxODEzRAorOjEwNjQ0MDAwNjk0NkZGRjdCREZGMDEyMDQwMDIwMUFCNTg4MDY4NDY1NgorOjEwNjQ1MDAwMDAyMUZGRjdGNUZFMDEyMDA0QjAwOEJDMTg0NzAwMDAzQQorOjEwNjQ2MDAwRTgwRTAwODAwMEI1RkZGN0MzRkYwOEJDMTg0NzAxMjAwNQorOjEwNjQ3MDAwMDM0OUMwNDYwODcxQTEyMTQ5MDM4ODYwMDAyMDcwNDc4NAorOjEwNjQ4MDAwMjgwRjAwODAwMDIwMDQ0OUMwNDYwODcxRkYyMUExMjI4NgorOjEwNjQ5MDAwNTIwMzAxMzE5MTYwNzA0NzI4MEYwMDgwMDIyMEExMjEzMgorOjEwNjRBMDAwNDkwMzg4NjAwMDIwNzA0NzAxMjA0MDAyQTEyMTQ5MDM3MAorOjEwNjRCMDAwODg2MDAwMjA3MDQ3QzA4OEMwMDZDMDBFQTEyMTQ5MDMzMworOjEwNjRDMDAwNDg2MTAyNDlDMDQ2Qzg2MzAwMjA3MDQ3RTgxQTAwODA0RQorOjEwNjREMDAwODBCNTg0QjAwODQ5MEY2QjY5NDZGRkY3NzFGRkY4MDY3NQorOjEwNjRFMDAwQzAwRTAxQUI1ODgwNjg0NjAwMjFGRkY3QTlGRTAxMjBDRAorOjEwNjRGMDAwMDRCMDgwQkMwOEJDMTg0NzgwMDAxNDQwODBCNTg1QjA0QgorOjEwNjUwMDAwMDcxQzY5NDYzODFDRkZGNzVCRkZGODg4MDRBOTAzRjBGNQorOjEwNjUxMDAwQzlGRjAxQUI1ODgwMDFBODQwODgwMDI4MEZEMDAxQTgwRQorOjEwNjUyMDAwNDA4ODgwMDgwMzM4ODAwODAxMzAwNDNCNTg3MDA0OTg4NAorOjEwNjUzMDAwMDE2OEMwNDYwMjkxNDA2OEMwNDYwMzkwMDVFMDAwQTg4QgorOjEwNjU0MDAwMDA3ODQwMjMxODQzMDBBQjE4NzAwNDk4QzExRDAxMzEzNgorOjEwNjU1MDAwNjg0NkZGRjc3NUZFMDEyMDA1QjA4MEJDMDhCQzE4NDdFRgorOjEwNjU2MDAwOTBCNTg0QjAxNDRGMzk3QjAwMjkyMEQxRjkxREZGMzEzQgorOjEwNjU3MDAwM0EzMTQ5NzgwMDI5MUFEMTEwNDkwNTIyMDA5MjA4MjI5RgorOjEwNjU4MDAwMDBBQjVBODA5ODgwMDYyMDAwQUI1ODcwMDAyNERDODA1NQorOjEwNjU5MDAwMDg2OEMwNDYwMjkwNDg2OEMwNDYwMzkwMDEyMDM4NzNERQorOjEwNjVBMDAwNjg0NjA4MzFGRkY3NENGRTAwMjgwMEQwM0M3MzA0QjA2OQorOjEwNjVCMDAwOTBCQzA4QkMxODQ3MDAwMDI4MDUwMDgwQTQyQTAwODA3MQorOjEwNjVDMDAwOTBCNTg0QjAwNzFDNjk0NjM4MUNGRkY3RjlGRUJBNjgxRAorOjEwNjVEMDAwMEQ0QzBFNDgwMDJBMDVEMTBENDlGRkY3RTRGQzAwMjhCOAorOjEwNjVFMDAwMENEQTA1RTBCOTg4MEI0QkZGRjdERkZDMDAyODA1REE3MQorOjEwNjVGMDAwMDFBQjVDODA2ODQ2MDAyMUZGRjcyMkZFMDAyMDA0QjA1QQorOjEwNjYwMDAwOTBCQzA4QkMxODQ3MDAwMEZGRkYwMDAwMEQ3NjIxNDAzOQorOjEwNjYxMDAwQzFCRDIxNDA1OUJEMjE0MDAwQjVDMDg4MDNGMDJFRkYwNworOjEwNjYyMDAwMDAyMDA4QkMxODQ3MDBCNUZGRjdFMkZFMDhCQzE4NDc3OQorOjEwNjYzMDAwMDBCNUZGRjdEREZFMDhCQzE4NDcwMEI1MDExQzAyMjBCRAorOjEwNjY0MDAwMDBGMDAyRjgwOEJDMTg0N0IwQjVDNkIwMDcxQzA4MUMxQgorOjEwNjY1MDAwNjk0NkZGRjdCNUZFMjE0OEZGRjdBNEZDMDQxQzIwNEE1OQorOjEwNjY2MDAwMDAyMTM4MUNGRkY3QTBGQzAwMjgyN0QwMDRBOTFENEFGMAorOjEwNjY3MDAwMzgxQ0ZGRjc5OUZDMDRBODAwMjMwMTJGMDZEMTBDQUFBRgorOjEwNjY4MDAwMDIzMjAwMjExMzYwMDEzMTEwMjlGQkQzMDE2ODA0Mjk3MworOjEwNjY5MDAwMDREOTg5MDgwMzM5ODkwODAxMzEwMEUwMTkxQzAwQUJDRAorOjEwNjZBMDAwNTk3MDA2QTkwOTc4QzA0NkQ5ODAwMDY4QzA0NjAyOTA5MgorOjEwNjZCMDAwMDc5OEMwNDYwMzkwMDQzMzA4QUQwMkUwNDUyMDAwQUJDNAorOjEwNjZDMDAwMTg3MDA5NDkyMDFDRkZGNzZFRkM2ODQ2MjkxQ0ZGRjc2QgorOjEwNjZEMDAwQjdGRDAxMjA0NkIwQjBCQzA4QkMxODQ3MjQwMkZGRkYzQworOjEwNjZFMDAwNTlCMTIxNDA5REFGMjE0MDNDMDJGRkZGMDBCNTAxMUM4NAorOjEwNjZGMDAwMDIyMDAwRjAxMEY4MDhCQzE4NDcwMEI1MDExQzAxMjA2QQorOjEwNjcwMDAwRkZGN0EyRkYwOEJDMTg0NzAwQjUwMTFDMDEyMDAwRjBFQworOjEwNjcxMDAwMDJGODA4QkMxODQ3RjBCNUM3QjAwNDFDMEYxQzM4MUNBMQorOjEwNjcyMDAwMDFBOUZGRjc0REZFMjE0OEZGRjczQ0ZDMDA5MDc4Nzg2NworOjEwNjczMDAwMDAwMUJBNjgwNDMwRkMyQTI1RDhGRjIzMDkzMzk4NDJBNworOjEwNjc0MDAwMjFEODE5MkMxRkQ4RkQ4OEY4NjhDMDQ2MDU5MEY5MUQ3RQorOjEwNjc1MDAwMDkzMTA2QUIwMDIwN0U3ODAwMkUwRERENDBDOTQwQzMxNAorOjEwNjc2MDAwNDBDOTQwQzM0MEM5NDBDMzQwQzk0MEMzMDEzMDAwMDREMAorOjEwNjc3MDAwMDAwQzdFNzg4NjQyRjFEQzIwMUMwNUE5MkIxQ0ZGRjc1QgorOjEwNjc4MDAwMjFGQzAwMjgwNUQwMDFBODAwNzg0MDIzMTg0MzAxQUI2NAorOjEwNjc5MDAwMTg3MDA3NDkwMDk4RkZGNzA2RkMwMDIxMDFBOEZGRjdEMQorOjEwNjdBMDAwNEZGRDAxMjA0N0IwRjBCQzA4QkMxODQ3MjQwMkZGRkY5MgorOjEwNjdCMDAwM0MwMkZGRkYwMEI1RkZGNzFCRkUwOEJDMTg0N0YwQjUxMQorOjEwNjdDMDAwQzZCMDA3MUNGQzg4MjU0RDY4NjgwMTMwNjk0NjY4NjBDMgorOjEwNjdEMDAwMzgxQ0ZGRjdGNUZEMTAyQzA4RDMwMEE4MDA3ODQwMjNFMworOjEwNjdFMDAwMTg0MzAwQUIxODcwMDIyMEQ4ODAxN0UwNzg3ODgyMDAzOAorOjEwNjdGMDAwRkIxRDA5MzMwMDIwQjk2ODAwMkExNUQ5NDBDQjBGMUNCNgorOjEwNjgwMDAwMDEzMUJFNDIwREQwMDBBQTEyNzg0MDIzMUE0MzAwQUJEQQorOjEwNjgxMDAwMUE3MDA0MjJEQTgwMDI5MDAzOTEwNDMzNjg0NjAwMjE0MgorOjEwNjgyMDAwMTVFMDAxMzA5MDQyRTlEMzAwQUI1QzcwMDI5NDY5NjhENgorOjEwNjgzMDAwQzA0NjAzOTFBMjAwMDAyMDEwMzMwMDJBMDVEOTBGMUM4NgorOjEwNjg0MDAwODBDMzAxMzAwMTMxOTA0MkY5RDM2ODQ2MDRBOUZGRjdCMworOjEwNjg1MDAwRjdGQzAxMjA0NkIwRjBCQzA4QkMxODQ3OUMwMzAwODA0MAorOjEwNjg2MDAwOTBCNDIzNDgwMDY4MDEyMTQyMDkwMEQzMDAyMTAwMjc4OQorOjEwNjg3MDAwM0ExQzQzMEIwMEQyMDIyMjExNDMxRTRBMjAyNEQzNjg0MworOjEwNjg4MDAwMDEyQjJFRDE4MDBBMDBEMjAwMjQwQzQzMjAxQzFCMjM5NAorOjEwNjg5MDAwREIwMUQxMTg4OThCMDkwQjAwRDIwNDI3Mzg0M0QxNkY1MworOjEwNjhBMDAwMDk2ODA5MEEwN0QyRDExRDc5MzEwOTY4MDk2ODA5MEFGRQorOjEwNjhCMDAwMDFEMzA4MjMxODQzRTMyMzFCMDFEMTE4ODk3OTAzMjk0NQorOjEwNjhDMDAwMDJEMUZGMjMwMTMzMTg0MzBCNDkwOTZBMTAyMjRCMEFGNgorOjEwNjhEMDAwMDBEMjAwMjIxMDQzODkwNzg5MEY4OTAxMDg0MzkwQkMyOAorOjEwNjhFMDAwNzA0NzQwMEMwMEQyMDAyNDBDNDMyMDFDRUNFNzAwMDA1MQorOjEwNjhGMDAwMDAwMDEwNDA2ODBFMDA4MEMwMDAxODQwRjBCNTNBNEMwRgorOjEwNjkwMDAwMjAxQzA0RjAwN0ZBMzk0OEUzMjMxQjAxQzcxOEI5NzlBMgorOjEwNjkxMDAwMzc0RUM1MUQ3OTM1MDYyOTYyRDIwMkEzNUI1QzVCMDA0OAorOjEwNjkyMDAwOUY0NDAwMUMwMzBFMUUzNzRFNTUwMTIwQjg3MTAwMjBGNQorOjEwNjkzMDAwQjA2MEZGRjc5NUZGMDUyMzk4NDMwMEYwNkZGODBDRTA3NworOjEwNjk0MDAwRkZGNzhFRkZDMDA4MDZEM0IwNjg0MTFDQjE2MDBBMjg2QgorOjEwNjk1MDAwMDNEOTA0MjAwMEUwMDIyMEI4NzE2NDIyMjAxQzJCRTAzRgorOjEwNjk2MDAwMDYxQ0MwNkY4MDIzMDE2ODE5NDMwMTYwMDMyMEI4NzFDMQorOjEwNjk3MDAwMjAxQzIwNEEwMDIxMDRGMDk5RjlGMDZGMDQyMzAxNjhEQgorOjEwNjk4MDAwOTk0MzAxNjAyODY4MDE2ODE5NDMwMTYwRjBCQzA4QkNBNAorOjEwNjk5MDAwMTg0NzA1MjFCOTcxMjk2ODA0MjMwQTY4OUE0MzBBNjBENworOjEwNjlBMDAwQzA2RjAxNjgxOTQzMDE2MEZGRjc1QUZGMDgyMzE4NDNCRAorOjEwNjlCMDAwMDBGMDM0RjgyMDFDMTA0QTAwMjEwNEYwNzdGOUU1RTdENAorOjEwNjlDMDAwRkZGNzRFRkYwNDIzMTg0MzAwRjAyOEY4REVFNzAwMjAwRAorOjEwNjlEMDAwMjk2ODYwMjMwQTY4OUE0MzBBNjBGRkY3RTNGQUQ1RTc1QgorOjEwNjlFMDAwMDYyMEI4NzFEMkU3MDAwMEE5NzkyMTQwNjgwRTAwODAyNgorOjEwNjlGMDAwOUMwMzAwODAzMDc1MDAwMDEwMjcwMDAwMDBCNTAwMjBDNworOjEwNkEwMDAwMDQ0OUMwNDY4ODcxMDQ0ODAxMjIwMDIxMDRGMDRFRjk2RgorOjEwNkExMDAwMDhCQzE4NDc5ODFDMDA4MEE5NzkyMTQwOTBCNTA3MUMzNAorOjEwNkEyMDAwMzE0ODAwNjg3OTA4MDNEMzEwMjMwMTFDOTk0MzAxRTAyMQorOjEwNkEzMDAwMTAyMTAxNDMyRDRDRTI2ODAxMkEwNUQxMjI3OTAwMkE1OAorOjEwNkE0MDAwMDJEMDAxMjM5QjAyMTk0MzgxNDIwMkQwMDEyMDAwMDU5QworOjEwNkE1MDAwMDE2MEUwNjgwMTI4MjBEMTFCMjNEQjAxRTAxODgwOEI1NgorOjEwNkE2MDAwRjkwODA0RDMwMTIzREIwMjAxMUM5OTQzMDFFMDAxMjE1MQorOjEwNkE3MDAwQzkwMjgxNDIwMkQwMDAyMDAyRjAxQUZCMzgwOTA3RDM3NAorOjEwNkE4MDAwRTA2RjgwMjMwMTY4OTk0MzAxNjBFMDE4MDA2ODAwRTAyRQorOjEwNkE5MDAwRTA2RjgwMjMwMTY4MTk0MzAxNjAxNTQ4MDE2QTc4MDk5NQorOjEwNkFBMDAwMDNEM0ZGMjAwMTMwMDg0MzAzRTBGRjIzMDgxQzAxMzMxOAorOjEwNkFCMDAwOTg0MzgwMDg4MDAwQkEwOTkyMDc5MjBGMTA0Mzg4NDJEOQorOjEwNkFDMDAwMDJEMDBDNDlDMDQ2MDg2MkUxNjgwMTI5MDhEMTc5MEE2MAorOjEwNkFEMDAwMDZEM0ZGMjMwNDMzMTg0MDAzMjgwMUQxRkZGNzhFRkZBQworOjEwNkFFMDAwOTBCQzA4QkMxODQ3MDAwMDAwMDAxMDQwNjgwRTAwODBGMQorOjEwNkFGMDAwQzAwMDE4NDBDMDAwMTgwMDgwQjVGRkY3QjFGRTgwMDk0MworOjEwNkIwMDAwMUJEMjBGNDhFMzIzMUIwMUMxMTg0QTc5MDAyQTE0RDE3NAorOjEwNkIxMDAwMDEyMjRBNzEwMDI3ODAzMDAwNjg2MDIzMDE2ODk5NDM5MAorOjEwNkIyMDAwMDE2MDA4NDgwNkUwMDIyMDAyRjA4Q0ZDMDcyMDAyRjAxOQorOjEwNkIzMDAwNUJGQzM4MUNGRkY3MzZGQUY1RTc4MEJDMDhCQzE4NDc0OQorOjEwNkI0MDAwNjgwRTAwODBGNDAxRkZGRjAwQjU4NEIwNjk0NkZGRjdDRQorOjEwNkI1MDAwMzdGQ0ZGRjc4NUZFMDFBQjU4ODAwODQ4MDA2OEMwNDY0NworOjEwNkI2MDAwMDI5MDA3NDgwMDZBQzA0NjAzOTA2ODQ2MDAyMUZGRjc3QworOjEwNkI3MDAwNjdGQjAxMjAwNEIwMDhCQzE4NDcwMDAwMDAwMDEwNDA2QgorOjEwNkI4MDAwQzAwMDE4NDA4MEI1ODRCMDA3MUM2OTQ2MzgxQ0ZGRjc2OAorOjEwNkI5MDAwMTdGQ0Y4ODhGRkY3NDJGRkZGRjc2MkZFMDFBQjU4ODA1MQorOjEwNkJBMDAwNjg0NjAwMjFGRkY3NENGQjAxMjAwNEIwODBCQzA4QkMwNAorOjEwNkJCMDAwMTg0N0IwQjVDNkIwQzc4ODY5NDZGRkY3MDFGQzAxMjQ4NQorOjEwNkJDMDAwMUE0QjlGNDIwQUQ5MDBBODAwNzg0MDIzMTg0MzAwQUIxMworOjEwNkJEMDAwMTg3MDAyMjBEODgwNjg0NjAwMjEyMEUwMTQ0OEZGRjc5MgorOjEwNkJFMDAwRTFGOTA1MUMxMzRBMzgxQzA0QTlGRkY3RERGOTEyNDkyNQorOjEwNkJGMDAwMjgxQ0ZGRjdEOEY5MDEyRjA2RDEwQ0E5MDAyMDAwMjI4QworOjEwNkMwMDAwMEE2MDAxMzAxMDI4RkJEMzEwMjAwMEFCNTg3MDA0OThBNAorOjEwNkMxMDAwQzA0NjAyOTAwNTk4QzA0NjAzOTA2ODQ2MDZBOUZGRjc1MworOjEwNkMyMDAwMEZGQjIwMUM0NkIwQjBCQzA4QkMxODQ3RkYwMTAwMDA5OQorOjEwNkMzMDAwMjQwMkZGRkY5REFGMjE0MDNDMDJGRkZGRjBCNUM2QjAyQworOjEwNkM0MDAwMDcxQzY5NDYzODFDRkZGN0JCRkJGQzg4Nzg3ODAxMjVEOAorOjEwNkM1MDAwMTAyODAxRDExOTJDMDlEOTAwQTgwMDc4NDAyMzE4NDMyNQorOjEwNkM2MDAwMDBBQjE4NzAwMjIwRDg4MDA0MzMyN0UwQjg2OEMwNDYxMworOjEwNkM3MDAwMDQ5MEY4NjhDMDQ2MDU5MDA2QUFGQjFEMDkzMzAwMjE2MAorOjEwNkM4MDAwNzg3ODAwMjgwREREMDAyMDQwQ0I0MEMyMDEzMDAwMDRBMAorOjEwNkM5MDAwMDAwQzA0MjhGOERCNDgxQzAxMDQwOTBDNzg3ODg4NDJCMQorOjEwNkNBMDAwRjFEQzBCNDhGRkY3N0VGOTA3MUMwQTRBMjAxQzA0QTlGNworOjEwNkNCMDAwRkZGNzdBRjkwODQ5MzgxQ0ZGRjc3NUY5Njg0NjAwMjE5MworOjEwNkNDMDAwRkZGN0JFRkEyODFDNDZCMEYwQkMwOEJDMTg0NzAwMDAwRAorOjEwNkNEMDAwMjQwMkZGRkZDNUFGMjE0MDNDMDJGRkZGRjBCNTg0QjBBNgorOjEwNkNFMDAwMDQxQzAwMjdFNjg4QTI2ODQ3NDkwODc5MDAyODA4RDBENAorOjEwNkNGMDAwMDAyRTAxRDAwMTJFMDFEMTAxMjcwMUUwMDQyRTAwRDE4OAorOjEwNkQwMDAwMDMyNjAxMjU0MTQ4MDUyRTY2RDIwMkEzOUI1RDVCMDA0OAorOjEwNkQxMDAwOUY0NDAwMUMwMzA2MDgwQzEwMDAwNTgwMDAyMzAzRTBCQworOjEwNkQyMDAwMDU4MDA1RTAwMDIzMDM4MDQzODAwNkUwMDAyMzAzODAwNAorOjEwNkQzMDAwNDU4MDAyRTBGRjIzMDEzMzAzODBDQjFENzkzMzlFODkxOAorOjEwNkQ0MDAwMDEyMzVCMDI5RTQyMDJEQkQyMDdEMjBGMDBFMDAxMjI0OAorOjEwNkQ1MDAwNkQyMzVCMDFDOTE4ODk4OEZGMjNFMTMzOTk0MzAxMjMxRgorOjEwNkQ2MDAwMTk0MzA2ODhGRjMzOUU0MjBERDFGRjIwRTEzMDA4NDNDRQorOjEwNkQ3MDAwMDAyQTA0RDEwMTIzOUIwMjk4NDMwMTFDMjBFMDAxMjEzOQorOjEwNkQ4MDAwODkwMjAxNDMxQ0UwMDEyRTBBRDE0MDg4MDEyODA0RDE2OAorOjEwNkQ5MDAwNjAyMzE5NDMwMDJBMTNEMDBDRTAyMDIzMTk0MzBGRTA4RAorOjEwNkRBMDAwMDAyRTBERDE0MDg4MDEyODA4RDFGRjIzODEzMzE5NDNEQgorOjEwNkRCMDAwMDAyQTA1RDAwMTIzOUIwMjE5NDMwMUUwODAyMzE5NDNENworOjEwNkRDMDAwMDQyMDAyRjA3NUY5MDkyMTQ5MDIwMDIwMDJGMDcwRjk0RgorOjEwNkREMDAwMDAyRjAyRDEwMDIwMTJFMEZGRTc2OTQ2MjAxQ0ZGRjdEOAorOjEwNkRFMDAwRUZGQTAwQTgwMDc4NDAyMzE4NDMwMEFCMTg3MDAyMjA4NworOjEwNkRGMDAwRDg4MDY4NDYwMDIxMDQzM0ZGRjcyMkZBMjgxQzA0QjAyQgorOjEwNkUwMDAwRjBCQzA4QkMxODQ3MDAwMDY4MEUwMDgwODgxQzAwODA5OQorOjEwNkUxMDAwQzA4ODUxMjE4OTAzMDg2MjAwMjA3MDQ3ODBCNTE2NEY1MQorOjEwNkUyMDAwRjg2ODAxMjgwN0QxMzcyMzlCMDFGODE4NDA4QTgwMjE5MAorOjEwNkUzMDAwMDE0MzFCMjAwN0UwNkQyMzVCMDFGODE4ODA4QjAxMjFDMworOjEwNkU0MDAwNDkwMzAxNDMxMDIwMDJGMDMzRjkwMTIwNzEyMzVCMDE1MworOjEwNkU1MDAwRjkxODA4ODA0ODgwMUIyM0RCMDFGODE4ODA4QjAxMjM3OAorOjEwNkU2MDAwMUIwMzk4NDM0MTIxMDkwMjAxNDMwMDIwMDJGMDIwRjk0RAorOjEwNkU3MDAwMDAyMDgwQkMwOEJDMTg0NzY4MEUwMDgwODBCNTE3NEYwMgorOjEwNkU4MDAwRjg2ODAxMjgwOEQxMzcyMzlCMDFGODE4NDA4QTgwMjMyRAorOjEwNkU5MDAwOTg0MzAxMUMxQjIwMDhFMDZEMjM1QjAxRjgxODgwOEJEMAorOjEwNkVBMDAwMDEyMzVCMDM5ODQzMDExQzEwMjAwMkYwMDFGOUZGMjAyRAorOjEwNkVCMDAwNzEyMzVCMDFGOTE4MDEzMDA4ODAxQjIzREIwMUY4MThFRQorOjEwNkVDMDAwODA4QjQxMjMxQjAyOTg0MzA5MjE0OTAyMDE0MzAwMjA4MgorOjEwNkVEMDAwMDJGMEVFRjgwMDIwODBCQzA4QkMxODQ3NjgwRTAwODA2NQorOjEwNkVFMDAwODBCNTg0QjAwODQ5Q0Y2QTY5NDZGRkY3NjlGQUI4MDVFQQorOjEwNkVGMDAwODAwRDAxQUI1ODgwNjg0NjAwMjFGRkY3QTFGOTAxMjAwMQorOjEwNkYwMDAwMDRCMDgwQkMwOEJDMTg0NzQwMDAxNDQwQzA4ODlGMjNEMAorOjEwNkYxMDAwMTg0MDA1NDlDOTZBMUIyMzVCMDExOTQwMDg0MzAzNDkwRQorOjEwNkYyMDAwQzA0NkM4NjIwMDIwNzA0NzQwMDAxNDQwNDAwMDE0MDA3MgorOjEwNkYzMDAwODBCNTg0QjAwRDQ5MEY2QTAxMkYwMUQxRkYwMzA3RTAyRQorOjEwNkY0MDAwMDIyRjAxRDEzRjAzMDNFMDAwMkYwMUQxMDEyN0ZGMDJFRgorOjEwNkY1MDAwNjk0NkZGRjczNUZBMDFBQjVGODA2ODQ2MDAyMUZGRjcwRAorOjEwNkY2MDAwNkZGOTAxMjAwNEIwODBCQzA4QkMxODQ3MDAyMDE0NDAxMQorOjEwNkY3MDAwQzI4OEExMjA0MDAzMDAyMTAxMjM1QjAzOUE0MjAxRDE3MgorOjEwNkY4MDAwMDIyMjA0RTAwMTIzREIwMzlBNDIwMkQxMDEyMjAyNjJDMQorOjEwNkY5MDAwMDBFMDAxNjIwODFDNzA0NzkwQjU4NEIwMDcxQzAyRjA0NQorOjEwNkZBMDAwOUZGODY5NDYwNDFDMzgxQ0ZGRjcwQUZBMDFBQjVDODBBNQorOjEwNkZCMDAwMDk0RkY4NkRDMDQ2MDI5MDY4NDYwMDIxRkZGNzQwRjk3RQorOjEwNkZDMDAwRjg2REMwMDdDMDBGMDU0OUMwNDZDODYyMDEyMDA0QjA3MworOjEwNkZEMDAwOTBCQzA4QkMxODQ3MDAwMEE0MkEwMDgwNjgxQzAwODBGMAorOjEwNkZFMDAwQzA4ODAyNDlDMDQ2NDg2MTAwMjA3MDQ3ODAwMDE0MDBGNAorOjEwNkZGMDAwMDBCNTg0QjA2OTQ2RkZGN0UzRjkwNjQ4QzA2ODAxQUIwNQorOjEwNzAwMDAwNTg4MDY4NDYwMDIxRkZGNzFCRjkwMTIwMDRCMDA4QkMzNgorOjEwNzAxMDAwMTg0NzAwMDA4MDAwMTQ0MEMwODgwMjQ5QzA0NkM4NjA3QworOjEwNzAyMDAwMDAyMDcwNDc4MDAwMTQwMDgwQjU4NEIwNjk0Njg3NjhFRQorOjEwNzAzMDAwRkZGN0M2RjkyMDJGMDdEMjc4MDAwQzQ5NDAxODFCMjMxMAorOjEwNzA0MDAwREIwMUMwMTg4MDhCMDZFMDAwQTgwMDc4NDAyMzE4NDNCRAorOjEwNzA1MDAwMDBBQjE4NzAwMjIwMDFBQjU4ODA2ODQ2MDAyMUZGRjc5MgorOjEwNzA2MDAwRUZGODAxMjAwNEIwODBCQzA4QkMxODQ3NjgwRTAwODAwRgorOjEwNzA3MDAwMDBCNTg0QjBDMTg4ODI2ODIwMkEwNEQyMTAxQzAyRjBCNgorOjEwNzA4MDAwMTdGODAwMjAxMEUwNjk0NkZGRjc5QUY5MDBBODAwNzg4OQorOjEwNzA5MDAwNDAyMzE4NDMwMEFCMTg3MDAyMjBEODgwNjg0NjAwMjFCNgorOjEwNzBBMDAwMDQzM0ZGRjdDREY4MDEyMDA0QjAwOEJDMTg0NzkwQjVCMQorOjEwNzBCMDAwODRCMEM3ODg2OTQ2RkZGNzgzRjkxMDQ4RkVGNzcyRkY2RQorOjEwNzBDMDAwMDIyMDM5MUMwMkYwRjJGRjAwMjgwNkQwMDIyMDM5MUNGMQorOjEwNzBEMDAwMDJGMDM2RkYwMUFCNTg4MDAyRTA0NTIwMDBBQjE4NzA4QgorOjEwNzBFMDAwMDc0OTIwMUNGRUY3NUZGRjY4NDYwMDIxRkZGN0E4Rjg1QworOjEwNzBGMDAwMDEyMDA0QjA5MEJDMDhCQzE4NDcwMDAwMjQwMkZGRkYyOAorOjEwNzEwMDAwM0MwMkZGRkZCMEI1ODRCMEM3ODg2OTQ2ODQ2OEZGRjdDQQorOjEwNzExMDAwNTdGOTEwNDhGRUY3NDZGRjBGNEEwMjIwMzkxQ0ZFRjdDOAorOjEwNzEyMDAwNDNGRjAwMjgwNkQwMEQ0QjAyMjAzOTFDMjIxQ0ZFRjcxRAorOjEwNzEzMDAwM0NGRjAyRTA0NTIwMDBBQjE4NzAwOTQ5MjgxQ0ZFRjcwRgorOjEwNzE0MDAwMzJGRjY4NDYwMDIxRkZGNzdCRjgwMTIwMDRCMEIwQkM5NQorOjEwNzE1MDAwMDhCQzE4NDcyNDAyRkZGRjU5QjEyMTQwNTlCMDIxNDAxMworOjEwNzE2MDAwM0MwMkZGRkYwMEI1RkZGNzQzRjkwOEJDMTg0NzAwMjBCOQorOjEwNzE3MDAwNzA0NzgwQjRDMjg4MTk0QkExMjE0OTAzMDAyQTAzRDE2QQorOjEwNzE4MDAwMTg2QjEwMjM5ODQzMDRFMDAxMkEwNEQxMTg2QjEwMjNENAorOjEwNzE5MDAwMTg0MzQ4NjExRkUwMDIyQTFERDFDMjY4ODc2ODAwMjA5OQorOjEwNzFBMDAwM0IxQ0MzNDBEQjA3REIwRjlCMDIwMzQzMEI2MTAxMzAzOQorOjEwNzFCMDAwMDAwNDAwMEMyMDI4RjNEQjAwMjAxMzFDQzM0MERCMDc3NQorOjEwNzFDMDAwREIwRjlCMDJDNzFEMTkzNzNCNDMwQjYxMDEzMDAwMDRFNQorOjEwNzFEMDAwMDAwQzIwMjhGMURCMDAyMDgwQkM3MDQ3ODAwMDE0NDBBOAorOjEwNzFFMDAwODBCNEMyODg4MTY4MTAwMjEyMEExMDQzMDIwNDEyMEM5MworOjEwNzFGMDAwMEM0OEMwNDYwMjYwMEM0QkMwNDYxQTgwMEEwQzE3MDJBRAorOjEwNzIwMDAwMTIxMjNBNDMxMjA0MTIwQzQyNjA1QTgwMDkwNDA5MEMwQgorOjEwNzIxMDAwMEEwMjA5MEExMTQzMDkwNDA5MEM4MTYwOTk4MDAwMjBCRgorOjEwNzIyMDAwODBCQzcwNDc0MDAwMTQwMDI4MUIwMDgwQjBCNTg0QjBCQgorOjEwNzIzMDAwMTM0OTBBNjgxMjA0MTIwQzEzMDIxMjEyMTM0MzRBNjgwQgorOjEwNzI0MDAwMTIwNDEyMEMxRjFDMTMwMjEyMTIxMzQzODk2ODA5MDQ0MgorOjEwNzI1MDAwMDkwQzBBMDIwOTEyMTE0MzBDMDQyNDBDNjk0NjFEMUM3NgorOjEwNzI2MDAwRkZGN0FFRjgwMUFCNUY4MDI4MDQyMDQzMDI5MDY4NDYyOAorOjEwNzI3MDAwMDAyMUZFRjdFNUZGMDEyMDA0QjBCMEJDMDhCQzE4NDdCMAorOjEwNzI4MDAwNDAwMDE0NDBDMTg4ODI2ODA4MDIwOTBBMDg0MzAwMDRDQgorOjEwNzI5MDAwMDAwQzBBNDlDMDQ2Qzg2MDEwMEMwMzAyMDAxMjE4NDNEMworOjEwNzJBMDAwMDAwNDAwMEMwODYxMTAwNDAwMEMwMjAyMDAwQTEwNDNFNAorOjEwNzJCMDAwMDAwNDAwMEM0ODYxMDAyMDcwNDcwMDAwNDAwMDE0MDBFQQorOjEwNzJDMDAwOTBCNTg0QjAxNjRCRDk2ODA5MDQwOTBDMEEwMjA5MTI1QQorOjEwNzJEMDAwMTE0MzFBNjkxMjA0MTIwQzE3MDIxMjEyM0E0MzVCNjkyNQorOjEwNzJFMDAwMUIwNDFCMEMxRjAyMUIxMjNCNDMxRjA0M0YwQzA1MjNGNgorOjEwNzJGMDAwMDA5Mzg0ODgwMUFCMUM4MDAwMjQwNDNCNUM3MDQwODhCMAorOjEwNzMwMDAwMDBBQjU4ODBEOTgwMTAwNDM4NDMwMjkwMDM5NDY4NDYzQgorOjEwNzMxMDAwMDAyMUZFRjc5NUZGMDEyMDA0QjA5MEJDMDhCQzE4NDc3RgorOjEwNzMyMDAwNDAwMDE0NDAwMEI1ODRCMDBCNDk4QTZBMDUyMTAwOTFFMQorOjEwNzMzMDAwODE4ODAxQUIxOTgwMDAyMTA0M0I1OTcwNDA4ODAwQUI2MworOjEwNzM0MDAwNTg4MERBODAwMjkxMDM5MTY4NDZGRUY3NzlGRjAxMjBBOAorOjEwNzM1MDAwMDRCMDA4QkMxODQ3MDAwMEMwMDAxNDQwQzA4ODAyNDlBRgorOjEwNzM2MDAwQzA0Njg4NjIwMDIwNzA0N0MwMDAxNDAwMDBCNTg0QjA5OQorOjEwNzM3MDAwMEI0OTBBNkEwNTIxMDA5MTgxODgwMUFCMTk4MDAwMjExRgorOjEwNzM4MDAwMDQzQjU5NzA0MDg4MDBBQjU4ODBEQTgwMDI5MTAzOTEyOQorOjEwNzM5MDAwNjg0NkZFRjc1NUZGMDEyMDA0QjAwOEJDMTg0NzAwMDBGRQorOjEwNzNBMDAwQzAwMDE0NDBDMDg4MDI0OUMwNDYwODYyMDAyMDcwNDdFRgorOjEwNzNCMDAwQzAwMDE0MDAwMEI1QzA4ODAyNDlGRUY3RjRGRDAwMjBBQgorOjEwNzNDMDAwMDhCQzE4NDc3NTAyRkZGRjAwQjU4NEIwNjk0NkZFRjc5OAorOjEwNzNEMDAwRjdGRjA2NDgwMDZCMDFBQjU4ODA2ODQ2MDAyMUZFRjdCNgorOjEwNzNFMDAwMkZGRjAxMjAwNEIwMDhCQzE4NDcwMDAwNjgwRTAwODA4MQorOjEwNzNGMDAwMDBCNUZFRjdGREZGMDhCQzE4NDcwMEI1RkVGN0Y4RkYyMworOjEwNzQwMDAwMDhCQzE4NDcwMEI1RkVGN0YzRkYwOEJDMTg0NzgwQjU2NQorOjEwNzQxMDAwMDcxQzEwNDhGRUY3QzZGRDAxMjA0MDAyQTEyMTQ5MDNDOAorOjEwNzQyMDAwODg2MDAwMjEwQzQ4QzA0NjAxNzEwQzQ4MDI2ODUyMEM2QgorOjEwNzQzMDAwMDVEMjAyNjgxMjBDMDZEMTAwNjg4MDBBMDNEMzA4NDhGRQorOjEwNzQ0MDAwQzA0NkM3NjAwMkUwMDc0OEMwNDYwNzY0MDgxQzgwQkMwRAorOjEwNzQ1MDAwMDhCQzE4NDdENTk0MjE0MDI4MEYwMDgwMDAwMDEwNDAzOAorOjEwNzQ2MDAwNDAwMTE4MDAwMDAwMDA4MDAwQjUwMTIwMDM0OUMwNDYxQgorOjEwNzQ3MDAwMDg3MjEyMjBGRkY3Q0JGRjA4QkMxODQ3ODgxQzAwODA1OQorOjEwNzQ4MDAwMDBCNTAxMjAwMzQ5QzA0NjQ4NzIxNTIwRkZGN0JGRkYzMQorOjEwNzQ5MDAwMDhCQzE4NDc4ODFDMDA4MDAwQjUwMUYwRjlGRjAxMjBFNgorOjEwNzRBMDAwMDhCQzE4NDc4MEI1ODRCMDA3MUNGODg4MDJGMEZFRjhDNQorOjEwNzRCMDAwMDAyODBDRDE2OTQ2MzgxQ0ZFRjc4MkZGMDY0ODAxQUI1NAorOjEwNzRDMDAwNTg4MDY4NDYwMDIxRkVGN0JCRkUwMTIwMDBFMDAwMjA0NgorOjEwNzREMDAwMDRCMDgwQkMwOEJDMTg0N0ZGRkYwMDAwODBCNTg0QjAzMgorOjEwNzRFMDAwNjk0NkZFRjc2REZGMDEyNzAxQUI1RjgwMDk0ODgxODk3RQorOjEwNzRGMDAwMDkwNEMyODkxMTQzMDI5MTgxODgwOTA0QzA4ODA4NDNBNAorOjEwNzUwMDAwMDM5MDY4NDYwMDIxRkVGNzlCRkUzODFDMDRCMDgwQkM0NworOjEwNzUxMDAwMDhCQzE4NDc0QzJBMDA4MDAwQjVGRUY3NjlGRjA4QkM3QworOjEwNzUyMDAwMTg0NzAwQjVGRUY3NjRGRjA4QkMxODQ3MDBCNUZFRjcyMgorOjEwNzUzMDAwNUZGRjA4QkMxODQ3MDBCNUZFRjc1QUZGMDhCQzE4NDdBNAorOjEwNzU0MDAwMDBCNUZFRjc1NUZGMDhCQzE4NDcwMEI1RkVGNzUwRkYyMQorOjEwNzU1MDAwMDhCQzE4NDcwMEI1RkVGNzRCRkYwOEJDMTg0NzAwQjUzQworOjEwNzU2MDAwRkVGNzQ2RkYwOEJDMTg0NzAwQjVGRUY3NDFGRjA4QkMxMAorOjEwNzU3MDAwMTg0NzAwQjVGRUY3M0NGRjA4QkMxODQ3MDBCNUZFRjdGQQorOjEwNzU4MDAwMzdGRjA4QkMxODQ3MDBCNUZFRjczMkZGMDhCQzE4NDdBNAorOjEwNzU5MDAwMDBCNThDQjAwOEE5RkVGNzEzRkY2OTQ2MDhBODAyRjBGMQorOjEwNzVBMDAwQTlGRjAyMjAwOEFCNTg3MDY5NDYwOEE4RkVGNzQ4RkVGQworOjEwNzVCMDAwMDEyMDBDQjAwOEJDMTg0NzAwQjVGRUY3MTlGRjA4QkM0NQorOjEwNzVDMDAwMTg0NzkwQjU4NEIwMDcxQzY5NDYzODFDRkVGN0Y4RkVEMgorOjEwNzVEMDAwRkE4ODEyNDkwMTI0QzgxRDg5MzAwMDJBMEZEMDA0NzA4RQorOjEwNzVFMDAwNDQ3MEI4NjgwMDBDODAzMUM4ODJCODY4QzA0NjA4ODMwRgorOjEwNzVGMDAwRjg2ODAwMEM0ODgzRjg2OEMwNDY4ODgzMDJFMDAwMjFFMAorOjEwNzYwMDAwMDE3MDQxNzAwNjQ4MDFBQjU4ODA2ODQ2MDAyMUZFRjdDMgorOjEwNzYxMDAwMTdGRTIwMUMwNEIwOTBCQzA4QkMxODQ3NjgwRTAwODAwMAorOjEwNzYyMDAwRkZGRjAwMDAwMEI1RkVGN0UzRkUwOEJDMTg0NzAwQjVGOQorOjEwNzYzMDAwRkVGN0RFRkUwOEJDMTg0NzAwQjVGRUY3RDlGRTA4QkMxMQorOjEwNzY0MDAwMTg0NzAwQjVGRUY3RDRGRTA4QkMxODQ3MDBCNUZFRjc5MgorOjEwNzY1MDAwQ0ZGRTA4QkMxODQ3OTBCNTg0QjAwNzFDNjk0NjM4MUM5QgorOjEwNzY2MDAwRkVGN0FFRkVGODg4MDMyNEU0MDQwNDQzMDMyM0RCMDQ5RQorOjEwNzY3MDAwOUM0MjAyRDMwRjRCOUM0MjA2RDkwRjQ4MDFBQjU4ODA2NQorOjEwNzY4MDAwNjg0NjAwMjFGRUY3RENGRDAxMjA4MDA3MjA0MzAwNjhFQQorOjEwNzY5MDAwMDAyMTAwQUI1OTcwRkE4OEMwNDZEQTgwMDI5MDAzOTE0RAorOjEwNzZBMDAwNjg0NjA0MzNGRUY3Q0NGRDAxMjAwNEIwOTBCQzA4QkM1MgorOjEwNzZCMDAwMTg0NzAwMDBFMDAwMTgwMEZGRkYwMDAwODBCNTg0QjAwQworOjEwNzZDMDAwMDcxQzY5NDYzODFDRkVGNzdCRkVGODg4MDMyM0RCMDRBMQorOjEwNzZEMDAwMTg0Mzk4NDIwMkQzMEE0Qjk4NDIwOEQ5MDk0ODAxQUI5MworOjEwNzZFMDAwNTg4MDY4NDYwMDIxRkVGN0FCRkQwMTIwMDNFMEI5NjgzMQorOjEwNzZGMDAwQzA0NjAxNjAwMDIwMDRCMDgwQkMwOEJDMTg0NzAwMDBGMAorOjEwNzcwMDAwRTAwMDE4MDBGRkZGMDAwMDgwQjU4NkIwMDJBOUZFRjc3OAorOjEwNzcxMDAwNTdGRTAxMjcwMkFCNUY3MDAwMjBEODgwMEE0ODQxNjhGRAorOjEwNzcyMDAwQzA0NjA0OTE4MTY4QzA0NjA1OTFDMTY4QzA0NjAwOTE3OQorOjEwNzczMDAwNDA2OUMwNDYwMTkwNjk0NjAyQThGRUY3ODFGRDM4MUNFOQorOjEwNzc0MDAwMDZCMDgwQkMwOEJDMTg0NzY4MTkwMDgwMDBCNUMxNjg0NQorOjEwNzc1MDAwODA2OEZFRjc0N0ZCMDAyMDA4QkMxODQ3MDAyMDcwNDdGMAorOjEwNzc2MDAwOTBCNTg0QjAwNDFDMEYxQzY4NDY1MDIxRkVGNzM2RkUwRAorOjEwNzc3MDAwMDFBQjVDODAwMjk3Njg0NjAwMjFGRUY3NjFGRDA0QjAxMgorOjEwNzc4MDAwOTBCQzA4QkMxODQ3ODBCNTg0QjAwNzFDNjg0NjUxMjFERQorOjEwNzc5MDAwRkVGNzI0RkUwMUFCNUY4MDY4NDYwMDIxRkVGNzUwRkQzNgorOjEwNzdBMDAwMDRCMDgwQkMwOEJDMTg0NzAwMjA3MDQ3MDAyMDcwNDcxOAorOjEwNzdCMDAwOTBCNTg0QjAwMDI3MTI0OTA5NjgxMjRBMTI2QjEwMjM1MQorOjEwNzdDMDAwMUE0MDAxMjQwMDJBMDBEMDAxMjc4QTBDMDNEMzNBMDQ2RQorOjEwNzdEMDAwMTIwQzAyMjcxNzQzQzkwQzAzRDMzOTA0MDkwQzA0MjdFMAorOjEwNzdFMDAwMEY0MzY5NDZGRUY3RUNGRDAxQUI1RjgwNjg0NjAwMjE2MAorOjEwNzdGMDAwRkVGNzI2RkQyMDFDMDRCMDkwQkMwOEJDMTg0NzAwMDAxMgorOjEwNzgwMDAwMDAwMDEwNDBDMDAwMTg0MDAwQjU4NEIwNjk0NkZFRjc4MworOjEwNzgxMDAwRDdGRDA2NDhDMDZEMDFBQjU4ODA2ODQ2MDAyMUZFRjdEMQorOjEwNzgyMDAwMEZGRDAxMjAwNEIwMDhCQzE4NDcwMDAwQTQyQTAwODAwNgorOjEwNzgzMDAwMDBCNUZFRjdEREZEMDhCQzE4NDc3MDQ3MDAyMDcwNDcxMworOjEwNzg0MDAwMDAyMDcwNDcwMDIwNzA0NzAwMjA3MDQ3MDAyMDcwNDdEQworOjEwNzg1MDAwMDAyMDcwNDcwMEI1RkVGN0NCRkQwOEJDMTg0NzAwMDBCQworOjEwNzg2MDAwODBCNTg1QjAwMUE5RkVGN0FCRkQwMDIwMDFBQjU4NzBEMworOjEwNzg3MDAwMEM0OUM5NjgwMTI3MDEyOTAyRDEwMzk3MDQ5NzAxRTA0NworOjEwNzg4MDAwMDM5NzA0OTA2ODQ2MDFGMDMzRkQwMkFCMDA5OEMwNDZCMAorOjEwNzg5MDAwNTg4MDAwMjEwMUE4RkVGN0QzRkMzODFDMDVCMDgwQkMzRAorOjEwNzhBMDAwMDhCQzE4NDc2ODBFMDA4MDcwNDcwNDQ5MDAyMDAwMjI3OQorOjEwNzhCMDAwMEE3MDAxMzAwMTMxNjgyOEZBRDM3MDQ3QTA4MjIwNDA1NQorOjEwNzhDMDAwMDAyMjg4NDIwM0QzNDAxQTAxMzI4ODQyRkJEMjEwMUNBNgorOjEwNzhEMDAwNzA0Nzg4NDIwMkQzNDAxQTg4NDJGQ0QyNzA0NzkwQjQ2NQorOjEwNzhFMDAwMDExQ0ZGMjcwNDI5MjdEQTAwMjAxNDRBNDMwMDFCMTgzMworOjEwNzhGMDAwREIwMEQ0NTg2MzBDMUFEMjRCMDA1OTE4QzkwMDU3NThGMgorOjEwNzkwMDAwNDMwMDFCMThEQjAwRDc1MDg5MTg5QTE4NEY2OEMwNDZFRgorOjEwNzkxMDAwNTc2MDhCNjhDMDQ2OTM2MDBCNjlDMDQ2MTM2MTRCNjkyMgorOjEwNzkyMDAwQzA0NjUzNjFDOTY4QzA0NkQxNjA5MEJDNzA0NzAxMzAwMQorOjEwNzkzMDAwMDAwNjAwMEUwNDI4RDlEQjM4MUNGNkU3NDBBQjIwNDBENworOjEwNzk0MDAwRjdCNUM0QjAwNDFDMDAyMDQ2OUExMTIxMTE0MDZFRDAzNgorOjEwNzk1MDAwMDAyNzc5MDBDOTE5QzkwMDU3NEE1MTU4NDkwQzAzRDI2OAorOjEwNzk2MDAwMDEzMDAwMDYwMDBFMDRFMDc5MUMwRjA2M0YwRTA0MkZDNAorOjEwNzk3MDAwRUZEQjAwMjg1QkQwMDAyNjAwMjIwMDkyNDAyMzAwMjE4QworOjEwNzk4MDAwMDAyMDAyQUEwMEYwODhGQTA0QTkwMDIwODIwMDhBNTg4OAorOjEwNzk5MDAwMTIwNjEyMEVBMjQyMDNEMTcyMUMxNjA2MzYwRTA0RTAyNQorOjEwNzlBMDAwMDEzMDAwMDYwMDBFMTAyOEYwREIwMDJFM0REMDA0MkMyNAorOjEwNzlCMDAwM0VEMTgwMDAwODU4NDAwMTgwMEQwMDIyMDA5MjEwMjMyMworOjEwNzlDMDAwMDAyMTAyQUEwMEYwNjhGQTAwMjEwMTkxMDJBODA1OTk5RAorOjEwNzlEMDAwNDkwQzg5MDUyOUQwQzE2ODBBMDYxMjBFNDU5QjlBNDJCNgorOjEwNzlFMDAwMTFEMUMwNjg0MDAxODYwRDAwMjIwMDkyMEMyMzAwMjFCNQorOjEwNzlGMDAwMzAxQzAyQUEwMEYwNTBGQTAxOTkwMjlENDgxQzAxMDZCMQorOjEwN0EwMDAwMDkwRTAxOTEwRUUwNDgwMTg2MEQwMDIyMDA5MjEwMjMxQworOjEwN0ExMDAwMDAyMTMwMUMwMkFBMDBGMDNGRkEwMkE4MDU5OTQ5MEM4NworOjEwN0EyMDAwODkwNUQ4RDEwMTk5MDAyOTBGRDFGRjIwM0RFMDQwRTAyMAorOjEwN0EzMDAwODAwMDA4NTg0MDAxODYwRDAwMjIwMDkyMEMyMzAwMjE4RQorOjEwN0E0MDAwMzAxQzAyQUEwMEYwMjhGQTAyOUQwMTIwMDAwNDQ2OUE4OAorOjEwN0E1MDAwMTA0Mzc5MDBDOTE5QzkwMDE3NEFDMDQ2NTA1MDMwMUM1QworOjEwN0E2MDAwOEUxODcwNjAxMDIwMDQyQzAwRDAwQzIwMDQxQ0IwNjAxNAorOjEwN0E3MDAwMDAyMDIwMjE0NjlBMTE0MDIwMjkwMEQwMjgxQzMwNjE4NgorOjEwN0E4MDAwMjgxOUZGMjFGRjMwMDgzMDA5MzFGRkY3MTlGRjQzMDFBMgorOjEwN0E5MDAwMTgxOEMwMDAwMDFCNzA2MTAwMjA1MDIxNDY5QTExNDA0OAorOjEwN0FBMDAwNTAyOTAwRDEyODFDRjA2MDM4MUM0N0IwRjBCQzA4QkMzRAorOjEwN0FCMDAwMTg0N0ZGMjBGOUU3MDAwMDQwQUIyMDQwODBCNDAwMjNDNgorOjEwN0FDMDAwMDAyMjAwMjkwNkQ5ODc1QzdCNDAxQjA2MUIwRTAxMzI3MQorOjEwN0FEMDAwOEE0MkY4RDNEODQzMDAwNjAwMEU4MEJDNzA0N0YwQjU0OAorOjEwN0FFMDAwQzZCMDA0MjgwN0RBNDEwMDA5MThDOTAwNDU5MTQxNEE4NworOjEwN0FGMDAwNTE1ODRCMEMwMkQyMDAyMEMwNDM3NkUwMDEyMzVCMDRCNgorOjEwN0IwMDAwMTk0MDQzMDAxODE4QzAwMDNBNEExNDE4MDAyOTYxRDBERgorOjEwN0IxMDAwMDAyMTAyOTEyMDY5QTE2ODQ1MTgzMEQwRkYyMTY4MUUxQworOjEwN0IyMDAwMDkzMUZGRjdDREZFNjE2ODQwMTgwMTkwMDE5ODgxNDI0QworOjEwN0IzMDAwMDJEMUE2NjhBRjFCMDlFMDAwMjZGRjIxMjgxQzA5MzFFRAorOjEwN0I0MDAwRkZGN0M3RkUwNzFDMDFEMUZGMjcwOTM3MDAyMjAwOTI2QgorOjEwN0I1MDAwMDE5ODMxMUMwM0FBM0IxQzAwRjA5RUY5MDNBODM5MUNCNAorOjEwN0I2MDAwRkZGN0FDRkZDMDQzMDI5OTQ4NDAwMTA2MDkwRTAyOTE5RAorOjEwN0I3MDAwRUQxQkEwNjhBODQyMDBEMTAwMjUwMDJEQ0VEODAyOTlBNworOjEwN0I4MDAwQ0Y0MzAwMjIwMDkyMEMyMzAwMjE2MDY4MDNBQTAwRjA3QQorOjEwN0I5MDAwODNGOTIwNjlDMDQ2MDM5MDA1OTgwMDBBMDAwMjM5MDY1RgorOjEwN0JBMDAwMDkwRTA4NDMwNTkwRkYyMzFCMDI5ODQzMDU5MDBDMjEwMgorOjEwN0JCMDAwMDNBOEZGRjc4M0ZGRkYyMzFCMDIwNTk5OTk0MzAwMDZFMworOjEwN0JDMDAwMDAwRTAwMDIwODQzMDU5MDBDMjMwMDIxNjA2ODAzQUEwMAorOjEwN0JEMDAwMDBGMENBRjkwMDIwNDU5OTA2NEFDMDQ2NTA1MEMxNDNGQQorOjEwN0JFMDAwNjE2MEExNjBFMTYwMjE2MTYxNjE0NkIwRjBCQzA4QkNFOAorOjEwN0JGMDAwMTg0NzAwMDA0MEFCMjA0MEIwQjQ0QzQyMDAyOTAwREJFNQorOjEwN0MwMDAwMEMxQzAwMjdGRjQzMDQyODIxREExMjRENDMwMDE4MThFQQorOjEwN0MxMDAwQzAwMDQwMTkwMTJBMDVEMDAyMkEwOUQwMDMyQTE2RDEzMgorOjEwN0MyMDAwMDE2OTBCRTAwMDI5MTJEQjAyNjk4QTQyMEZEMzA1RTBFQgorOjEwN0MzMDAwMDAyOTA3REFDMTY4QTE0MjA5RDMwOTFCQzE2MEMwNjhFNQorOjEwN0M0MDAwQjBCQzcwNDdDMTY4MDkxOTAyNjk5MTQyRjZEOTM4MUM2NQorOjEwN0M1MDAwRjZFNzAwMDA0MEFCMjA0MEYwQjU4NEIwMTcxQzBEMUNDNworOjEwN0M2MDAwMDAyMTAyOTE0MjAwMTIxOEQyMDAyQzQ5OEI1ODFCMDZBOQorOjEwN0M3MDAwMUIwRTAxOTMwMDIzREI0MzA0MjgwMkRBMDE5ODQwMDgxRAorOjEwN0M4MDAwMDFEMjE4MUM0NkUwNTQxOEUwNjhDMjE5MjE2OThBNDJFMgorOjEwN0M5MDAwMDBEOTBGMUEwMDJGM0NEOUEwNjhFMTY4NDAxOEZGMjFENQorOjEwN0NBMDAwMDkzMUZGRjcwREZFNjE2ODQ2MThBMDY4RTE2ODQwMThDOQorOjEwN0NCMDAwRkYyMTA5MzFGRkY3MERGRUMyMTlGRjIxMDkzMThBNDI2OAorOjEwN0NDMDAwMTREOTAxOUFDMDQ2MDA5MjBCMUEwMzkzMDExQzMwMUM3MAorOjEwN0NEMDAwMkExQzAwRjBFMUY4RTA2ODAzOUJDMDE4RTA2MDAzOUJGOQorOjEwN0NFMDAwNUQxOUZGMUEwMjk4MTgxODAyOTAxMEUwMDE5QUMwNDYxOAorOjEwN0NGMDAwMDA5MjAxMUMzMDFDMkExQzNCMUMwMEYwQ0RGOEUwNjhFRgorOjEwN0QwMDAwQzAxOUVEMTlFMDYwMDI5OEMwMTkwMjkwMDAyNzAwMkZGOQorOjEwN0QxMDAwQzJEODAyOTgwNEIwRjBCQzA4QkMxODQ3NDBBQjIwNDA2MQorOjEwN0QyMDAwRjBCNTgzQjAxNzFDMEQxQzAwMjEwMTkxNDIwMDEyMTgwMAorOjEwN0QzMDAwRDIwMDAyOTIzMDQ5OEE1ODEyMDYxMjBFMDAyNEU0NDNGRgorOjEwN0Q0MDAwMDQyODAxREE1MDA5MDFEMjIwMUM1MUUwMDI5QTU0MTg4QgorOjEwN0Q1MDAwRTA2OEMyMTk2MDY5ODI0MjAxRDkyMjY5ODcxQTAwMkYzRQorOjEwN0Q2MDAwNDVEOTI1NEVBMDY4RTE2ODQwMThGRjIxMDkzMUZGRjc4OQorOjEwN0Q3MDAwQTdGRDYxNjg0MDE4MDA5MEEwNjhFMTY4NDAxOEZGMjFFNQorOjEwN0Q4MDAwMDkzMUZGRjdBNkZEMDI5QUIxNTgwMTIzNUIwNDE5NDM5QworOjEwN0Q5MDAwQjE1MEMxMTlGRjIyMDkzMjkxNDIxM0Q5MTMxQTAxMUNBMworOjEwN0RBMDAwMDA5ODJBMUMxRTFDMDBGMERGRjhFMDY4ODAxOTc1MTk4NQorOjEwN0RCMDAwRTA2MDIxNjk4ODQyMDBEOTIwNjFCRjFCMDE5ODMwMTgxQQorOjEwN0RDMDAwMDE5MDEyRTAwMTFDMDA5RTMwMUMyQTFDM0IxQzAwRjA5QworOjEwN0REMDAwQ0JGOEUwNjhDMDE5RUQxOUUwNjAyMTY5ODg0MjAwRDk0QworOjEwN0RFMDAwMjA2MTAxOThDMDE5MDE5MDAwMjcwMDJGQjlEODAxOTg4RgorOjEwN0RGMDAwMDNCMEYwQkMwOEJDMTg0NzQwQUIyMDQwQjBCNUMzQjBERQorOjEwN0UwMDAwMEMxQzAwMjdGQTQzMDQyODA2REE0MTAwMDkxOEM5MDBBRgorOjEwN0UxMDAwMTQ0ODQ1NTg2QjBDMDREMjEwMUM0M0IwQjBCQzA4QkNDRAorOjEwN0UyMDAwMTg0NzYyMDkxQkQzMDAyMjAwOTIwODE4NDA2ODBDMjNFRgorOjEwN0UzMDAwMDAyMTAxQUEwMEYwMzBGODExMkMwREQwMTIyQzBERDAyOQorOjEwN0U0MDAwMTMyQzA1RDAxNDJDMEFEMTAzOTgwMDA0MDcwRTA2RTA2OQorOjEwN0U1MDAwMDM5ODA3MDYzRjBFMDJFMDAxOUYwMEUwMDI5RjM4MUNENgorOjEwN0U2MDAwREJFNzAwMDA0MEFCMjA0MDAzNDkwMDIwMDAyMjBBNTQxOQorOjEwN0U3MDAwMDEzMDYwMjhGQkQzNzA0NzQwQUIyMDQwMDBCNTAyRjBEMgorOjEwN0U4MDAwNkZGQTU3MjAwMkYwQ0NGOTAyRjA0MEY5MDAwQUZCRDM1OAorOjEwN0U5MDAwMDJGMDRFRkEwOEJDMTg0N0YwQjU4MkIwMDc5RDE0MUNEQQorOjEwN0VBMDAwMUYxQzMwNEFEMjZGMjAyMzE2Njg5RTQzMTY2MDMzMUM3NQorOjEwN0VCMDAwRkYyMjAxMzIyQTQwNDAwMjA4NDMwNTBBMDYxQzAwMEMzQQorOjEwN0VDMDAwMDE5MDAwMkEyMEQwMDJGMDRCRkE1MzIwMDJGMEE4RjlDQQorOjEwN0VEMDAwMDE5OEMwNDYwMDkwMDJGMEEzRjkyODFDMDJGMEEwRjkxNgorOjEwN0VFMDAwMzAxQzAyRjA5REY5MDJGMDIzRkFGRkY3QzdGRjAyRjAwMQorOjEwN0VGMDAwMzdGQTU0MjAwMkYwOTRGOTAwOTgwMkYwOTFGOTI4MUMwNgorOjEwN0YwMDAwMDJGMDhFRjkzMDFDMTRFMDAyRjAyQUZBNTIyMDAyRjAzRQorOjEwN0YxMDAwODdGOTAxOTgwMkYwODRGOTI4MUMwMkYwODFGOTMwMUNERAorOjEwN0YyMDAwMDJGMDdFRjkwMDIwMDJGMDdCRjkwMDIwMDJGMDc4RjlERgorOjEwN0YzMDAwMDAyMDAyRjA3NUY5MDAyMDAyRjA3MkY5MDAyRjA1RDkzNworOjEwN0Y0MDAwMDJGMEU0RjgyMDcwMDEzNDAxM0ZGOUQxMDJGMEYwRjlCOQorOjEwN0Y1MDAwMDQ0QUQwNkYyMDIzMDE2ODE5NDMwMTYwMDJCMEYwQkNDRAorOjEwN0Y2MDAwMDhCQzE4NDc2ODBFMDA4MEYwQjU4MkIwMTQxQzFGMUNCNgorOjEwN0Y3MDAwNDIwMjBBNDMxNTFDMDEyODU0RDAyQzQ5Qzg2RjIwMjMwMworOjEwN0Y4MDAwMDI2ODlBNDMwMjYwQzg2RjQwMjMwMTY4MTk0MzAxNjA4OAorOjEwN0Y5MDAwMDJGMEU2Rjk1MzIwMDJGMDQzRjkyODBDMDYxQzAyRjAyNworOjEwN0ZBMDAwM0ZGOTI4MEEwMTkwMDA5MDAyRjAzQUY5MjgxQzAyRjBFQgorOjEwN0ZCMDAwMzdGOTAyRjBCREY5RkZGNzYxRkYwMkYwRDFGOTg0MjAzMworOjEwN0ZDMDAwMDJGMDJFRjkzMDFDMDJGMDJCRjkwMDk4MDJGMDI4Rjk4QgorOjEwN0ZEMDAwMjgxQzAyRjAyNUY5MDAyRjA1RDkyMDc4MDEzNDAyRjA4MQorOjEwN0ZFMDAwMUZGOTAxM0ZGOUQxMDJGMEEzRjkwMkYwQjlGOTgzMjA5QQorOjEwN0ZGMDAwMDJGMDE2RjkzMDFDMDJGMDEzRjkwMTk4MDJGMDEwRjlBMgorOjEwODAwMDAwMjgxQzAyRjAwREY5MDJGMDkzRjlGRkY3MzdGRjA3NDkzQQorOjEwODAxMDAwQzg2RjQwMjMwMjY4OUE0MzAyNjBDODZGMjAyMzAxNjgzQQorOjEwODAyMDAwMTk0MzAxNjAwMkIwRjBCQzA4QkMxODQ3NjgwRTAwODAxQworOjEwODAzMDAwNzA0NzAwMDA4MEI1MDFGMDhGRjgwNjRGQzA0NkY4NjAyOQorOjEwODA0MDAwMDFGMEYyRjg3ODgwMDFGMEIxRjgzODcxODBCQzA4QkMxQQorOjEwODA1MDAwMTg0NzAwMDA2ODBFMDA4MDAwQjUwMUYwMDVGOTAyNDlEQworOjEwODA2MDAwQzA0NjA4ODAwOEJDMTg0NzY4MEUwMDgwMEI0OEMxNjhFRAorOjEwODA3MDAwMDEyOTExRDFDMTZGMDIyMzBBNjgxQTQzMEE2MEMxNkYzNgorOjEwODA4MDAwODAyMzBBNjgxQTQzMEE2MEMxMTgwODY4ODIyMzAyNjhCQworOjEwODA5MDAwMUE0MzAyNjAwMDIwMDg4MTcwNDcwMDAwNjgwRTAwODBDQgorOjEwODBBMDAwRjBCNDRBNDlDQTFEOUQzMjAwMjAwMDI3ODMwMEQ3NTBGMgorOjEwODBCMDAwMDEzMDE3MjhGQUQzNDY0QzAwMjA4MjAwQTc1MDAxMzAyNworOjEwODBDMDAwMjAyOEZBRDM0MzRBMDAyMDgzMDBENzUwMDEzMDIwMjhDQgorOjEwODBEMDAwRkFEM0E3NjE5NzYxNEY2NThGNjUzRjREQzA0NjJGNjAwQQorOjEwODBFMDAwNkY2MEFGNjBBRjYxRUY2MDJGNjE2RjYxMDAyMEMxMDAxMgorOjEwODBGMDAwMDkxODQ5MDEzNTRCQzkxODg2MDBDQjFERjkzMzM0NEM5QQorOjEwODEwMDAwMzQxOUUzNjMxMTIzNUIwMUNCMTg2MzYzMEQyMzlCMDFENworOjEwODExMDAwQ0IxOEI0MThFMzYzMjMyMzVCMDFDOTE4NjE2MzAxMzBGMgorOjEwODEyMDAwMDIyOEU0REIyOTQ4QzExREY5MzEyOTRDQzA0NkExNjI2RgorOjEwODEzMDAwNjE2QjBEMjM5QjAxRTE2MkMxMTg5MTYyNTE2QkMwNDZENgorOjEwODE0MDAwRDE2MjA4MjFFMTY0MjU0OUMwNDYyMTY1MjQ0OTBCNjlCMworOjEwODE1MDAwQzA0NjYzNjVDMzFENEQzM0UzNjUyNTY2OEI2OEMwNDYyNQorOjEwODE2MDAwNjM2NkNCNjhDMDQ2QTM2NjFFNEJDMDQ2RTM2NjI3NjdCRQorOjEwODE3MDAwMEIyM0RCMDFDMzE4QTM2NzY3NjcwMTI2RTMxRDY5MzM3RgorOjEwODE4MDAwNjY2MUU3NjExRjczMDIyM0QzNjQxNzRCQzA0NjEzNjUxMgorOjEwODE5MDAwQ0I2OUMwNDY1MzY1QzMxRDUxMzNEMzY1MkIxRDEzNjY5MAorOjEwODFBMDAwNEI2OUMwNDY1MzY2ODk2OUMwNDY5MTY2MEY0OUMwNDYwRgorOjEwODFCMDAwRDE2NjE2NjcwRjIzREIwMUMwMTg5MDY3NTY2N0Q3NjEzOQorOjEwODFDMDAwRDAxRDY5MzA1NjYxMDc3M0YwQkM3MDQ3NjgwRTAwODA5RgorOjEwODFEMDAwRTQyQzAwODA2NDJEMDA4MDkwRUUyMDQwMzAwMTE4MDBENworOjEwODFFMDAwN0MyOTAwODAwMDU1RkZGRjM4MDExODAwMTA1NUZGRkY2MworOjEwODFGMDAwOTBCNDAwMjExRTRBQkIyMzFCMDFENzE4Rjk3MzE5MjMyMQorOjEwODIwMDAwREIwMUQwMTgwMTI0Q0QyMzFCMDFEMzE4QzE2MTFDNzBFMAorOjEwODIxMDAwMzMyMzlCMDFEMzE4OTk2MEI5NzM1OTYxMkYyMzlCMDFCNAorOjEwODIyMDAwRDMxODE5NjAxMzRCNTEyN0JGMDMwMzYzM0I2MDg0Njk2NAorOjEwODIzMDAwRTQxODQ0NjMwNDNDN0M2MDAxMjRFNDAyODQ2MzBFNEMzMworOjEwODI0MDAwQzA0NkJDNjAwNDZCQzA0NjQ0NjI4NDY5RTQxODBCNEJCMgorOjEwODI1MDAwRTMxOEZCNjAwMzZCQzA0NjgzNjI0MzZBQzA0NjAzNjI1NworOjEwODI2MDAwQzE2MzUxNjQ5MTY0RDE2NUQxNjY5MEJDNzA0NzAwMDBEMAorOjEwODI3MDAwNjgwRTAwODAwMDAwMjA0MEZDMDcwMDAwRkNGN0ZGRkZCNAorOjEwODI4MDAwOTBCNDAwMjIxQjQ5QzkyMzFCMDFDODE4MDI3MTAxMjBBOAorOjEwODI5MDAwQkIyMzFCMDFDQjE4NTg3MzE3NDgwMzFDMDAyN0RDMUQ5OAorOjEwODJBMDAwQzEzNDFDNjUyMzFDMDEzNzNGMkZGOEQzMUE2NTE5MjNFRAorOjEwODJCMDAwREIwMUNGMTgzMzIzOUIwMUNCMTgzQTYxOTg2MTQwMjAzMgorOjEwODJDMDAwRjg2MERBNjExQTYyQ0E2NDBBNjYwQzQ4QzA0NkMyNjA4NQorOjEwODJEMDAwMEI0ODAwNkJDMDA2QzAwRUY4NjMwQTQ4MDE2OEMwNDYzMAorOjEwODJFMDAwMTk4MDQxNjhDMDQ2NTk4MDgwNjhDMDQ2OTg4MDkwQkMxQgorOjEwODJGMDAwNzA0NzAwMDA2ODBFMDA4MDkwQkMyMDQwOTBFRTIwNDA0NworOjEwODMwMDAwODAwMDE0NDA0MDAwMTQ0MDAwMjAwQTQ5QzA0NjA4NzMxMQorOjEwODMxMDAwQ0IxREZGMzMzQTMzODg2MUM4NjExODcwMDY0QUMwNDZFNgorOjEwODMyMDAwMTA2NTUwNjY5MDY2MDg3MDU4NzBCQjIzMUIwMUQxMTgwOQorOjEwODMzMDAwMDg3MzcwNDcyODA1MDA4MDY4MEUwMDgwRjBCNDJGNDk0QworOjEwODM0MDAwMkY0QUMwNDYxMTYxMDEyMzlCMDJDODE4NTA2MTJENDg3NQorOjEwODM1MDAwQzA0NjEwNjJEQjAwQzMxODUzNjIwMDIzMTM2MzUzNjNFQgorOjEwODM2MDAwMjk0QTJBNEZENDFERkYzNEZBMzQxNEM3MDgzRjNCNjExMQorOjEwODM3MDAwMUMxRjdDNjEyNjRGQzA0NjM5NjBCODYxNzk2MUY4NjI4NAorOjEwODM4MDAwM0I2MzdCNjRCQTY0RkE2NTIyNEZGRTFERjkzNjIyNERDOQorOjEwODM5MDAwRUMxRDc5MzQyNjYyNTEyNkI2MDMzNzYxMjQ2QUMwNDY0MworOjEwODNBMDAwNzQ2MTJGNjcxRDREMDkyNzdGMDRFQzFENzUzNDdDNjBCNworOjEwODNCMDAwM0Q2MDFCNENDMDQ2M0M2MUU2MUQ3NTM2N0U2MTE5NEYyMQorOjEwODNDMDAwQzA0NjdDNjAzRDYwMEYxQzAwMjFGRjI0MDEzNDFEMUM1MQorOjEwODNEMDAwOEIwMEZENTAwMTMxQTE0MkZBRDMwMTFDMDAyMDAxMjc3RQorOjEwODNFMDAwRkYwMjgzMDBDRDUwMDEzMEI4NDJGQUQzMDAyMDgxMDA1MworOjEwODNGMDAwNTU1MDAxMzA4MDI4RkFEM0YwQkM3MDQ3MjRBMzIwNDBBOAorOjEwODQwMDAwNDAwMTE4MDAyNDgzMjA0MDI0QTkyMDQwODAwMTE4MDA0NgorOjEwODQxMDAwQTgwMzAwODAyNEE3MjA0MDY4MEUwMDgwMjRBODIwNDBFNAorOjEwODQyMDAwQTRBODIwNDAwODA0MDA4MEI4QjUyQzQ4RkRGN0JBRkQ4OAorOjEwODQzMDAwMDEyMDJCNDkwQTY4NTIwQzA2RDIwQTY4MTIwQzAyRDE5QworOjEwODQ0MDAwMEE2ODkyMEEwMEQyMDAyMDA0MDYyNDBFMjU0QUQ3MUQ4RAorOjEwODQ1MDAwMEQzNzAwMjMwMDIwOUQwMDc4NTEwMTMzMDQyQkZBRDNGRgorOjEwODQ2MDAwMDEyNzNGMDU1MDYxRjg2MEQwNjFGODYxMDAyM0RCNDNDQworOjEwODQ3MDAwOTM2MTNCNjExMzYyM0I2MjAwMjcxQjRCOEQ2OEMwNDZEMgorOjEwODQ4MDAwMDA5NThENjlDMDQ2MDA5NTAwMkMwQkQwREQ2QkMwNDY3MQorOjEwODQ5MDAwMDA5NTlENkJDMDQ2MDA5NTVENkJDMDQ2MDA5NTFENkJCOQorOjEwODRBMDAwQzA0NjAwOTUwMTM3NDAyRkU4RDMwMDI3NkM0NjAxMjNEMgorOjEwODRCMDAwNUIwNzFDNDMwMUUwMjA2MDAxMzcwRDY4MkIwOTAyRDJFNQorOjEwODRDMDAwODAyRkY4RDMwMUUwODAyRjAzRDMwODQ5NEI2RTAxMzM4RQorOjEwODREMDAwNEI2NkQwNjJCOEJDMDhCQzE4NDcwMDAwRjQwMUZGRkYyRgorOjEwODRFMDAwMDAwMDEwNDA2ODBFMDA4MDAwMDExODQwQTA4MjIwNDA2QgorOjEwODRGMDAwOTBCNDAwMjEwRTRGMEY0QTAwMjA0QzAxNjQxQUE0MDBEMgorOjEwODUwMDAwQTMxODU4NjA5ODYwMTg2NDU4NjQxMDUzNTg4MENDMDBDMQorOjEwODUxMDAwRTQxOTk4NjdEQzYyMDEzMTAzMjlFRUQzMDY0OUMwNDZBRAorOjEwODUyMDAwMDg2MDQ4NjA4ODYwQzg2MDA4NjE5MEJDNzA0NzAwMDBCRgorOjEwODUzMDAwQUM2NjIxNDA1QzJCMDA4MEQwMkMwMDgwNjQyMTA1NDg3MworOjEwODU0MDAwQzA0NjAxNjMwMDIxQzk0MzQxNjM4MTYzMDAyMUMxNjNDNworOjEwODU1MDAwMDE2NDcwNDc2ODBFMDA4MDgwQjQwMTIwNDAwMjBBNDkxRgorOjEwODU2MDAwQzA0NjA4NjAzQzIwNDg2MDg4NjAwODQ4QzA0NkM4NjAzMworOjEwODU3MDAwMDAyMDA3NEE4NzAwQ0I2OEMwNDZEQTUxMDEzMDEwMjgzNgorOjEwODU4MDAwRjhEMzgwQkM3MDQ3MDAwMEU0MkQwMDgwRjQyRDAwODBGQgorOjEwODU5MDAwNUQ0Q0ZGRkYxMjQ5MTM0ODY3MjM5QjAxQ0ExODA2QzBCMAorOjEwODVBMDAwMDgzODExNEJDQTE4QzE2MDgyNjAwMTYxMEY0OTEwNDgzOAorOjEwODVCMDAwQTcyMzlCMDFDQTE4MDZDMDA4MzgwRTRCQ0ExOEMxNjAxMQorOjEwODVDMDAwODI2MDAxNjEwQzQ4MEQ0OTY3MjM5QjAxQzIxODA1QzFGNworOjEwODVEMDAwMDgzOTA1NEJDMjE4Qzg2MDhBNjAwODYxNzA0NzAwMDBGRQorOjEwODVFMDAwQUMxRTIxNDA0ODJFMDA4MEZDMUYwMDAwQUNFRTIwNDA1NQorOjEwODVGMDAwMzQyRTAwODBGQzJGMDAwMEFDM0UyMTQwNUMyRTAwODAxOQorOjEwODYwMDAwOTBCNDAwMjE0MDRDMDAyMDBBMDExMjE5MTkyM0RCMDEwQgorOjEwODYxMDAwRDIxOEQwNjIxMDYzNTA2MzkwNjMwMTMxMDMyOUYzRDMwMQorOjEwODYyMDAwM0E0OUMwNDYwODYzNDg2Mzg4NjMyMDYwMDEyMUUzMUQxRQorOjEwODYzMDAwNTkzMzYwNjAxOTcxMTg3Mjk4NzE5ODcyNTk3MTU4NzIzMworOjEwODY0MDAwRDg3MUQ4NzJFMjFENDkzMjExNzMxOTcwOTA3Mzk4NzAwNQorOjEwODY1MDAwNTE3MzU5NzBEMDczRDg3MDExNzExMTcyOTA3MTkwNzJGQQorOjEwODY2MDAwNTA3MTUwNzJEMDcxRDA3MjE4NzMwMjIyRTcxRDY5MzdCMQorOjEwODY3MDAwM0E3MDk5NzNCQTcwNTg3Mzc4NzBEODczRjg3MDM5NzEwQQorOjEwODY4MDAwM0E3MkI5NzFCOTcyNzg3MTdBNzJGOTcxRjk3MjM5NzM5MworOjEwODY5MDAwRTMxRDc5MzMxQTcwQjk3Mzk5NzA3ODczNUE3MEY5NzM0RQorOjEwODZBMDAwRDk3MDFBNzExQTcyOTk3MTlBNzI1ODcxNUE3MkQ5NzE3NQorOjEwODZCMDAwREE3MjE5NzNFNzFEODkzNzNBNzA5OTczQjk3MDU4NzM3NAorOjEwODZDMDAwN0E3MEQ5NzNGOTcwMzk3MTNBNzJCOTcxQjk3Mjc4NzE3NworOjEwODZEMDAwN0E3MkY5NzFGOTcyM0E3M0UzMUQ5OTMzMUE3MEI5NzNBQQorOjEwODZFMDAwOUE3MDc4NzM1QTcwRjk3M0RBNzAxOTcxMUE3Mjk5NzFGNQorOjEwODZGMDAwOTk3MjU4NzE1QTcyRDk3MUQ5NzIyMDYxRTA2MDYwNjFDMworOjEwODcwMDAwQTA2MDkwQkM3MDQ3MDAwMEEwMUMwMDgwRTgxOTAwODBBOQorOjEwODcxMDAwODEyMDAwMDIwMTQ5QzA0Njg4NjI3MDQ3QzAwMDE0MDBGMQorOjEwODcyMDAwMDk0OTBBNEJDODE4MDQzQkM5MTgwODYwMDAyMUMyMUQzQQorOjEwODczMDAwMjkzMkMyNjExMDFDMDEzMTA4MjlGOEQzQzExRjI5MzkxRgorOjEwODc0MDAwMDAyMEM4NjE3MDQ3MDAwMDY4MEUwMDgwODQwOTAwMDBBNgorOjEwODc1MDAwMDY0ODA3NDlDMDQ2MDg4MDQ4ODAwMDIwODg4MEM4ODBCNQorOjEwODc2MDAwODg2MDA0NDlDMDQ2NDg2MTg4NjE3MDQ3RkZGRjAwMDA4NworOjEwODc3MDAwNEMyQTAwODA2QzA2MDA4MDAwMjEwNjQ4QzIxRDE5MzI3OAorOjEwODc4MDAwQzE2MDAxNjFDMTYxMDE2MjExNzFGRjMwMDEzMDQxNjI1QworOjEwODc5MDAwNzA0NzAwMDA2QzA2MDA4MDA5NDgwQTRCQzA0NjE4NjAwQworOjEwODdBMDAwMDAyMUMyMUQ0RDMyQzI2MDEwMUMwMTMxMTQyOUY4RDNDMgorOjEwODdCMDAwQzExRjREMzkwMDIwQzg2MDU4NjA5ODYwNzA0NzAwMDBBNAorOjEwODdDMDAwRDgwNzAwODA2QzA2MDA4MDAwQjUwQjQ5MEI0OEZERjcwOAorOjEwODdEMDAwRUFGQjBCNDgwMDZBMDEyM0RCMDM5ODQzMDk0OUMwNDZDMgorOjEwODdFMDAwMDg2MjA5NDhDMTY4MDEyOTA0RDFDMDZGODAyMzAxNjg2QgorOjEwODdGMDAwMTk0MzAxNjAwOEJDMTg0N0MxQkQyMTQwNzU5ODIxNDA0QworOjEwODgwMDAwQzAwMDE4NDBDMDAwMTgwMDY4MEUwMDgwMDBCNTBGNDg3NgorOjEwODgxMDAwQzE2ODAxMjkwNEQxQzA2RjgwMjMwMTY4OTk0MzAxNjBCOAorOjEwODgyMDAwMEI0QjBDNDgwQzRBMDAyMUZERjdCRkZCMEI0ODQxOEQ1OAorOjEwODgzMDAwMDEzMTQxODUwMDIxQzE4NTA5NDgwMDZBMDEyM0RCMDMxQworOjEwODg0MDAwMTg0MzA4NDlDMDQ2MDg2MjA4QkMxODQ3NjgwRTAwODBGMworOjEwODg1MDAwNTlCRDIxNDA3NTk4MjE0MEI4MEIwMDAwMDAwMDAwODBGMAorOjEwODg2MDAwQzAwMDE4NDBDMDAwMTgwMEYwQjUxQjRDMTAyNkUwNjg4RQorOjEwODg3MDAwMDEyODA4RDE2MDg4MDAyODA1RDEyMDc5MDAyODAyRDE3QworOjEwODg4MDAwMTkyMEEwNjcwMEUwQTY2NzAwMjAwNzIzNUIwMkU1MTgxNworOjEwODg5MDAwQzE0M0U4NjE2OTYyNTkwOEExMjc3RjAzNzk2MDBGMjEwQworOjEwODhBMDAwNzk2MEUxMURCOTMxMDg3MTAxMjBCODYwNDAwMkI4NjBGQgorOjEwODhCMDAwMDBGMDRDRkEwMEYwRjBGQTA0MjBCODYwMDcyMDc4NjE2QworOjEwODhDMDAwN0U2MDFCMjNEQjAxRTAxOEMwOEIwNDIzMTg0MEU4NjJBNAorOjEwODhEMDAwRjBCQzA4QkMxODQ3MDAwMDY4MEUwMDgwOTBCNDAyMUM3MQorOjEwODhFMDAwMDAyMEZGMjMwMTMzOUE0MjA4RDAwMTI5MDBEMTAxMjA0MgorOjEwODhGMDAwMDAyQTAxRDEwMjIzMTg0MzkwQkM3MDQ3MUI0QUQ3Njg1NQorOjEwODkwMDAwMUE0QjE5NzkxQzFDMzcyMzlCMDFFMzE4MDEyRjBERDEzOQorOjEwODkxMDAwNTc4ODAwMkYwQUQxMDAyOTBBRDE1OThCMEEwOTAwRDNBMAorOjEwODkyMDAwMDIyMDQ5MDlFOEQzMDEyMzE4NDNFNUU3MDAyOTAzRDBEMQorOjEwODkzMDAwOTg4QTgwMDc4MDBGREZFNzZEMjM1QjAxRDExODhBODg1MgorOjEwODk0MDAwRkYyNzAxMzcxNzQwMEE0OUM5ODgwM0QwNEIwQTAxRDNEMgorOjEwODk1MDAwMDMyMEQxRTcxMzBBMDNEMzBCMEEwMUQzMDIyMENCRTc4QworOjEwODk2MDAwRDIwOUM5RDNDOTA5QzdEMzAxMjBDNUU3NjgwRTAwODA2MQorOjEwODk3MDAwMDgxQzAwODBGMEI1QzFCMDAxMjAwMDA3NTI0OUMwNDY3NAorOjEwODk4MDAwMDg2MDUyNDg0MjY5NDAwREExMjE0OTAzNDg2MDUwNDg5RgorOjEwODk5MDAwQzA2QTUwNEIxODQzMDAyMTAzMDMxQjBCNEU0QzI3NkYzQQorOjEwODlBMDAwM0QwMzJEMEJFNzFENzkzN0FCNDIxQ0QwRTMxRDc5MzMxNgorOjEwODlCMDAwMUI2QUMwNDY0MDkzMDEyMzlCMDcwMzQzMUI2OENDMDBGRQorOjEwODlDMDAwNkU0NjMzNTEwMTIzOUIwNzA2MUQzMzQzMUI2ODZDNDRERAorOjEwODlEMDAwNjM2MDA4MzAwMTMxNDA5QjgzNDIwMEQ4M0Y0ODAzMDM2NQorOjEwODlFMDAwMUIwQkFCNDJFN0QxMDAyMDAxMjMxQjAzMTM0MDNDNEM3RgorOjEwODlGMDAwMDNEMDYzNkEwMTMzNjM2MjA5RTAxMzBCMDNEMzIzNkE3NAorOjEwOEEwMDAwMDEzMzIzNjIwM0UwMzc0QjVDNkQwMTM0NUM2NTAwMjk2MAorOjEwOEExMDAwMDlEMDAzMUNEQzAwMjMxQzZCNDQ1QzY4MDEzMDIzMEQ2RgorOjEwOEEyMDAwMDFEMjg4NDJGNUQxMzA0QzI1Njg2QjBDMDVEMjIzNjgwMQorOjEwOEEzMDAwMUIwQzA4RDEyNDY4QTMwQTA1RDMyMDI0MkI0QkMwNDY2NQorOjEwOEE0MDAwNUM2MjAwMjQ1QzYyMjU0QjIzNEM1MTI2QjYwMzIzNjdFRAorOjEwOEE1MDAwMzM2MTNENkFDMDQ2NzU2MTAyMjVBMTI2NzYwMzc1NjBDMworOjEwOEE2MDAwMDEyNUI1NjBFNjFEQjkzNjM1NzE4ODQyMjFEMDI1MUMzNworOjEwOEE3MDAwQzMwMDZDNDZFNDU4MkU2RjZCNDQzNDYwNUI2ODJDNkYwNworOjEwOEE4MDAwQzA0NjYzNjAyQjZGMDgzMzJCNjczQzZBQTM0MjAyRDM1NgorOjEwOEE5MDAwMTI0QkMwNDYyQjY3MDMxQ0RCMDA2QjQ0NUM2ODAxMzA0MworOjEwOEFBMDAwMjMwRDA0RDM1MTI0QTQwMzJCNkZDMDQ2QTM2MTg4NDIzNQorOjEwOEFCMDAwREVEMTEwMEIwM0QzMEU0OTAxMjBGREY3NzRGQTQxQjA0QgorOjEwOEFDMDAwRjBCQzA4QkMxODQ3MDAwMDAwMDAwMEIwMDAwMTE0NDBEMgorOjEwOEFEMDAwMDA0MDE0NDAwMDAwMjA0MDY4MEUwMDgwMjRBNzIwNDA4MQorOjEwOEFFMDAwQTQyQTAwODBBMDgyMjA0MDAwMDAxMDQwQzAwMDE4MDA4RQorOjEwOEFGMDAwQzk0RkZGRkZGMEI0MDAyMTAwMjMwNzIyMDYyNDQ3NEY4RgorOjEwOEIwMDAwQzA0NjNDNjEzQTYxMDEzMzIwMkJGOUQzMDQyNTNENjExNQorOjEwOEIxMDAwMDUyMzNCNjEzQzYxM0E2MTNDNjEzQTYxM0Q2MTNCNjFFNworOjEwOEIyMDAwM0Y0REFCNkZERTA4MDIyMzFFNDAwNDIzMzM0MzNCNjFGRAorOjEwOEIzMDAwMDUyMzMzNDMzQjYxQUI2RjlFMDgwMjIzMUU0MDA0MjM5MQorOjEwOEI0MDAwMzM0MzNCNjEwNTIzMzM0MzNCNjFBQjZGNUUwODAyMjMzNAorOjEwOEI1MDAwMUU0MDA0MjMzMzQzM0I2MTA1MjMzMzQzM0I2MTAyMjMxRgorOjEwOEI2MDAwQUU2RjFFNDAwNDIzMzM0MzNCNjEwNTIzMzM0MzNCNjExNworOjEwOEI3MDAwQUI2RjVEMDAwMjIzMUQ0MDA0MjMyQjQzM0I2MTA1MjNBMworOjEwOEI4MDAwMkI0MzNCNjFDNTA4MDIyMzFENDAwNDIzMkI0MzNCNjE1QgorOjEwOEI5MDAwMDUyMzJCNDMzQjYxODUwODAyMjMxRDQwMDQyMzJCNDNGRgorOjEwOEJBMDAwM0I2MTA1MjMyQjQzM0I2MTQ1MDgwMjIzMUQ0MDA0MjMwMQorOjEwOEJCMDAwMkI0MzNCNjEwNTIzMkI0MzNCNjEwMjI1MDU0MDA0MjNFNgorOjEwOEJDMDAwMkI0MzNCNjEwNTIzMkI0MzNCNjE0MDAwMDIyMzE4NDBBQworOjEwOEJEMDAwMDQyMzAzNDMzQjYxMDUyMzE4NDMzODYxMDAyNTNENjFBRAorOjEwOEJFMDAwMDEyMzNCNjEzRDYxM0I2MTAwMjAzRDYxMEQ0QjFCNjlGMQorOjEwOEJGMDAwNDkwMDFFMUMwMjIzMzM0MDE5NDMwMTIzM0I2MTAxMzAwRAorOjEwOEMwMDAwMTAyOEYyRDMwMjIwMzg2MTAzMjAzODYxM0M2MTNBNjFCOAorOjEwOEMxMDAwM0M2MTNBNjEzODYxNDgwOEYwQkM3MDQ3ODAwMDE0MDAzQworOjEwOEMyMDAwNjgwRTAwODA4MDAwMTQ0MEYwQjQwMDI0MDcyMzA2Mjc1QgorOjEwOEMzMDAwNDQ0QUMwNDYxNzYxMTM2MTAxMzQyMDJDRjlEMzA0MjYzRAorOjEwOEM0MDAwMTY2MTA1MjQxNDYxMTc2MTA3MjMxMzYxMTY2MTE0NjEwRAorOjEwOEM1MDAwMTc2MTEzNjEzQzRCOUI2RkREMDgwMjIzMUQ0MDJCMUNFOQorOjEwOEM2MDAwMzM0MzEzNjEyNTQzMTU2MTM3NEI5QjZGOUQwODAyMjNFNgorOjEwOEM3MDAwMUQ0MDJCMUMzMzQzMTM2MTI1NDMxNTYxMzI0QjlCNkYwMQorOjEwOEM4MDAwNUQwODAyMjMxRDQwMkIxQzMzNDMxMzYxMjU0MzE1NjFFRQorOjEwOEM5MDAwMkQ0QjlENkYwMjIzMUQ0MDJCMUMzMzQzMTM2MTI1NDMzNQorOjEwOENBMDAwMTU2MTI5NEI5QjZGNUQwMDAyMjMxRDQwMkIxQzMzNDMzNAorOjEwOENCMDAwMTM2MTI1NDMxNTYxQzUwODAyMjMxRDQwMkIxQzMzNDM1NgorOjEwOENDMDAwMTM2MTI1NDMxNTYxODUwODAyMjMxRDQwMkIxQzMzNDM4NgorOjEwOENEMDAwMTM2MTI1NDMxNTYxNDUwODAyMjMxRDQwMkIxQzMzNDNCNgorOjEwOENFMDAwMTM2MTI1NDMxNTYxMDIyNTA1NDAyQjFDMzM0MzEzNjE5NQorOjEwOENGMDAwMjU0MzE1NjE0MDAwMDIyMzE4NDAwMzFDMzM0MzEzNjFEMAorOjEwOEQwMDAwMjA0MzEwNjExNzYxMDcyMzEzNjExNjYxMTQ2MTRDMDA0MQorOjEwOEQxMDAwMDAyMDBGMjEyNTFDQ0Q0MDAyMjMxRDQwMDQyMzJCNDM5RQorOjEwOEQyMDAwMTM2MTA1MjMyQjQzMTM2MTAxMzAwMTM5MTAyOEYxRDM1RQorOjEwOEQzMDAwMTc2MTA3MjMxMzYxMTc2MTEzNjEwMzIwMTA2MUYwQkNGMQorOjEwOEQ0MDAwNzA0NzAwMDA4MDAwMTQwMDY4MEUwMDgwRjBCNTRGNERBMQorOjEwOEQ1MDAwMDgyMTAyMjAyQTFDRkRGNzI3Rjk0RDRDNzEyMzVCMDFFNQorOjEwOEQ2MDAwRTcxODM4ODAxQTIxMDIyMDJBMUNGREY3MURGOTc4ODBBNworOjEwOEQ3MDAwMjA3OTAwMjgwQkQwMDAyMDM4ODBFMDY4MDEyODEwRDEyRAorOjEwOEQ4MDAwNDQ0ODAwNjgwMTIzOUIwMjE4NDM5OTAyMDg2MEUwNjg4OAorOjEwOEQ5MDAwMDEyODA2RDE2MDg4MDAyODAzRDFGOTIxMTIyMEZGRjdBRAorOjEwOERBMDAwNDNGRjAxMjFDOTAzMDAyMEZGRjczRUZGMDAyNTdEMjY3OAorOjEwOERCMDAwRjYwMDAwRTAwMTM1MDAyMEZGRjc5Q0ZFMDAwQzAxRDMxNworOjEwOERDMDAwQjU0MkY3RDMwMDI1MDVFMDAzMjEwOTAzMDAyMEZGRjc5MgorOjEwOEREMDAwMkJGRjAxMzUwMDIwRkZGNzhERkU0MDBCMDFEMkI1NDI3RAorOjEwOERFMDAwRjJEMzA0MjBGRkY3ODZGRUZGMjNFMTMzOTg0MzAxMjFFRAorOjEwOERGMDAwMDE0MzM4ODhGRjIzMDEzMzk4NDIwM0QxMkYyMzVCMDFCRAorOjEwOEUwMDAwMTk0MzE2RTAwMTI4MDlEMTc4ODgwMTI4MDNEMTIzMjNDQQorOjEwOEUxMDAwNUIwMTE5NDMwREUwMjAyMzE5NDMwQUUwMDAyODA4RDEyMworOjEwOEUyMDAwNzg4ODAxMjgwM0QxMEIyM0RCMDExOTQzMDFFMDgwMjM1QgorOjEwOEUzMDAwMTk0MzA0MjBGRkY3RjhGRTA5MjE0OTAyMDAyMEZGRjczQgorOjEwOEU0MDAwRjNGRUUwNjgwMDI4MENEMTAwMjExQjIwRkZGN0VDRkVBOAorOjEwOEU1MDAwMUEyMEZGRjc0RkZFMDEyMUM5MDMwMTQzMUEyMEZGRjczMworOjEwOEU2MDAwRTNGRTAwMjcwM0UwMDgyRjAxRDMwRjJGMDhEOTM4MUM5OQorOjEwOEU3MDAwRkZGNzQwRkU3OTAwMDkxOTFCMjNEQjAxQzkxODg4ODMxRAorOjEwOEU4MDAwMDEzNzIwMkZFRkQzRjBCQzA4QkMxODQ3RURBRjIxNDBDRAorOjEwOEU5MDAwNjgwRTAwODAwMDAwMTA0MDgxQjAxMzQ4MDE2OEMwNDY5MQorOjEwOEVBMDAwMDA5MTQxNjhDMDQ2MDA5MTgxNjhDMDQ2MDA5MUMxNjg0OAorOjEwOEVCMDAwQzA0NjAwOTEwMTY5QzA0NjAwOTE0MTY5QzA0NjAwOTFEOQorOjEwOEVDMDAwODE2OUMwNDYwMDkxQzE2OUMwNDYwMDkxMDE2QUMwNDZFRgorOjEwOEVEMDAwMDA5MTQxNkFDMDQ2MDA5MTgxNkFDMDQ2MDA5MUMwNkExMworOjEwOEVFMDAwQzA0NjAwOTAwMUIwNzA0NzAwMDgxNDQwRjBCNTgzQjA1MAorOjEwOEVGMDAwNjg0RDFCMjNEQjAxRUYxOEY4OEIwNDIyMDI0MDAyOTIxRAorOjEwOEYwMDAwNzEyMzVCMDFFODE4MDE4OEMwNDYwMTkxNDA4OEMwNDY4MgorOjEwOEYxMDAwMDA5MDAwMjQwM0UwMDgyQzAxRDMwRjJDMDhEOTIwMUM1QQorOjEwOEYyMDAwRkZGN0U4RkQ2MTAwNDkxOTFCMjNEQjAxQzkxODg4ODM5RAorOjEwOEYzMDAwMDEzNDIwMkNFRkQzNTg0Q0UwNjkwMDI4MTVEMDU3NEU0RgorOjEwOEY0MDAwMjAyNTAxM0Q1MzQ5RTA2OTMwNDAwQkQwNjgwMDQwMThBRQorOjEwOEY1MDAwMzcyMzlCMDFDMDE4ODE4QjI4MUNGRkY3NjVGRUUwNjk1MQorOjEwOEY2MDAwQjA0M0UwNjE3NjA4MDAyREVCRDEwMTIwRkZGN0MyRkQ5MAorOjEwOEY3MDAwNDg0OUMwNDZGODgzRjg4QkMyMDgyNUQzQ0E2ODAxMkEzRAorOjEwOEY4MDAwMTNEMTBBNzkwMDJBMUZEMTQ5ODgwMDI5MUNEMTAxOTlERgorOjEwOEY5MDAwNDM0QTAwMjkwNUQwMDEyOTE2RDE1MThCQzkwODEzRDJBMworOjEwOEZBMDAwMEZFMDUxOEIwOTA5MEZEMjBCRTAwQTc5MDAyQTBCRDE4RgorOjEwOEZCMDAwNkQyMzVCMDFDOTE4OEE4OEM5ODgxMTQwNDkwOTA5MDdDRQorOjEwOEZDMDAwMDJEMTA0MjM5ODQzRjg4M0Y4OEIwNDIxMDE0MDAyOUFDQworOjEwOEZEMDAwMUZEMEI5OEI0QTBCMjdEMzgwMDkyNUQzRkYyMzAxOThEMworOjEwOEZFMDAwMDEzMzk4NDIyMEQwMDAyNTAwOTgwMTI4MDBEMTA1MDJDNQorOjEwOEZGMDAwMDE5ODAwMjgwMkQxMDEyMzVCMDMxRDQzQTk0MjEzRDAyRAorOjEwOTAwMDAwMDAyMDI5MUNGRkY3MTBGRUJEODMwMDIwQzA0MzYwNjJEMgorOjEwOTAxMDAwMEFFMEI4OEI0MDBCMDdEMjA5MjE0OTAyMDAyMEZGRjc3NAorOjEwOTAyMDAwMDNGRTA5MjA0MDAyQjg4M0Y4OEJDMDA4MkREMzFENDhFOQorOjEwOTAzMDAwQzc2QTAxOTgwMDk5RkZGNzUxRkNDMjA3RDIwRjFBNDk3RAorOjEwOTA0MDAwMDNEMDA0MjNDRDZEMkI0MzAzRTAwNDIzQ0Q2RDlENDM1QQorOjEwOTA1MDAwMkIxQ0NCNjU4MzA4MDNEMzAyMjNDRDZEMkI0MzAzRTA4OAorOjEwOTA2MDAwMDIyM0NENkQ5RDQzMkIxQ0NCNjU2MTZBODE0MjBDRDBFMAorOjEwOTA3MDAwNjA2MjBFNDgwMDJBMDNEMEZGMjEyMTMxMzk0MzAzRTAwQQorOjEwOTA4MDAwRkYyMzIxMzM5RjQzMzkxQ0MxNjIwM0IwRjBCQzA4QkNFRAorOjEwOTA5MDAwMTg0NzAwMDA2ODBFMDA4MDY4MUMwMDgwMDAwMDAwODBGNworOjEwOTBBMDAwMjgxQzAwODA0MDAwMTQ0MEE0MkEwMDgwNDAwMDE0MDBDNgorOjEwOTBCMDAwOTBCNDAxMjIyMDI4MEZEMjQzMDAwRjFDMDc0OTVDMThFRQorOjEwOTBDMDAwMzcyMzlCMDFFMzE4OUY4MzgyNDAwNzIzNUIwMkM5MTg2MworOjEwOTBEMDAwMTAxQ0NBNjkxMDQzQzg2MTkwQkM3MDQ3NjgwRTAwODBCQworOjEwOTBFMDAwMEI0ODQwNjkwQjQ5Qzk4QjA0MjIwQTQwMEE0OTA2RDA0MworOjEwOTBGMDAwMDEyM0RCMDI5ODQzMDEyM0NBNkQxQTQzMDVFMDAxMjNEMworOjEwOTEwMDAwREIwMjE4NDNDQTZENTIwODUyMDBDQTY1NzA0NzAwMDA1RQorOjEwOTExMDAwODAwMDE0NDBFODFCMDA4MEE0MkEwMDgwMDBCNTg0QjBDMQorOjEwOTEyMDAwRkZGN0RFRkYwMTFDMDUyMDAwOTAwMDIwMDFBQjE4ODAzNgorOjEwOTEzMDAwMDQzQjU4NzAxQjIyMDBBQjVBODBEOTgwMDU0OUM5NkQ4OQorOjEwOTE0MDAwQzA0NjAyOTEwMzkwNjg0NjAwMjFGREY3NzlGODA0QjAwQgorOjEwOTE1MDAwMDhCQzE4NDdBNDJBMDA4MDBGNDgwMTY4NDkwQzA1RDJCMgorOjEwOTE2MDAwMDE2ODA5MEMwNkQxMDA2ODgwMEEwM0QzMEI0ODAwNjgyNworOjEwOTE3MDAwMDAwQzAxRTAwQTQ4ODA2QzAwMDQwMDBDMDk0Qjk4NDI4NgorOjEwOTE4MDAwMDVEMDAyMzM5ODQyMDJEMDA3NEI5ODQyMDFEMTAxMjAwQQorOjEwOTE5MDAwNzA0NzAwMjBGQ0U3MDAwMDAwMDAxMDQwMDAwMDE4NDA2RAorOjEwOTFBMDAwMDAwMDAwODAwNDk5MDAwMDA3OTkwMDAwOTBCNDAxMjQ5OQorOjEwOTFCMDAwMjExQzE4NDgwMjY4NTIwQzA2RDIwMjY4MTIwQzAyRDExNworOjEwOTFDMDAwMDA2ODgwMEEwMEQyMDAyMTA5MDYwOTBFMTI0RjEzNEFENgorOjEwOTFEMDAwMDJEMDM4NjgwMDBDMDBFMDkwNkMwMDA0MDAwQzEwNEJDQQorOjEwOTFFMDAwOTg0MjA4RDAwMjMzOTg0MjA1RDAwRTRCOTg0MjAyRDBFNAorOjEwOTFGMDAwMDIzQjk4NDIwQ0QxMDAyOTAyRDBGODZBMDAwQzAwRTAzMgorOjEwOTIwMDAwRDA2QzQwMEEwMEQyMDAyNDIwMDYwMDBFOTBCQzcwNDdBQgorOjEwOTIxMDAwMDAyMEZCRTcwMDAwMTA0MDAwMDAxODQwMDAwMDAwODAyNAorOjEwOTIyMDAwMDQ5OTAwMDAwNzk5MDAwMDBDNDgwMTY4NDkwQzA1RDIxOAorOjEwOTIzMDAwMDE2ODA5MEMwNUQxMDA2ODgwMEEwMkQzMDg0ODgwNjhEQgorOjEwOTI0MDAwMDFFMDA4NDg0MDZDMDAwNDAwMEMwMDIxMDMyODAzRDAxMgorOjEwOTI1MDAwNDAwODAxRDMwMTIwNzA0NzA4MUNGQ0U3MDAwMDEwNDBDMworOjEwOTI2MDAwMDAwMDE4NDAwMDAwMDA4MEYwQjUwMTI3MUE0QzI1Njg2NgorOjEwOTI3MDAwRkZGNzcyRkYwMzFDMTk0QTAyMjEwMTI2MTg0ODAxMkIyRgorOjEwOTI4MDAwMUJEMUNCMDQxRTYwNTUyMzAzNjAwMDIzNDM2MDA2Njg5NgorOjEwOTI5MDAwNTUyRTFCRDFBQTI2MDY2MDQzNjAwMzY4QUEyQjE1RDE2MAorOjEwOTJBMDAwMDkyMzAzNjAwNTIzMEY0RkMwNDYzQjYwMDMyMzBFNEY4NQorOjEwOTJCMDAwQzA0NjNCNjAxMTYwMDc2ODA4RTAwODIzMjM2MDA0MjM3MAorOjEwOTJDMDAwMEE0RkMwNDYzQjYwMTE2MDA2NjAyNzY4QzA0NjI1NjBCMworOjEwOTJEMDAwMzgxQ0YwQkMwOEJDMTg0NzAwMDAyMDQwMDAwMDI0NDBBNworOjEwOTJFMDAwMDAwMDIyNDAwMDAwMkE0MDAwMDAyNjQwMDAwMDI4NDBFNAorOjEwOTJGMDAwODBCNTA3MUNGRkY3MzBGRjAxMjgwNUQxMTk0ODAwNjgyOQorOjEwOTMwMDAwMTk0OTQ5NkIwODQwMjJFMDE4NDgwMTY4NDkwQzA1RDIwOAorOjEwOTMxMDAwMDE2ODA5MEMwNkQxMDA2ODgwMEEwM0QzMTQ0ODAwNjg2QworOjEwOTMyMDAwMDAwQzAxRTAxMzQ4ODA2QzAwMDQwMDBDMTI0QkMwMThDNAorOjEwOTMzMDAwMDgyODBCRDIwMUEzMUI1QzVCMDA5RjQ0MDUwMzA3MDNCNQorOjEwOTM0MDAwMDcwNzA1MDMwMzIwMDJFMDAxMjAwMEUwMDAyMDAxMjFCRgorOjEwOTM1MDAwMzg2MDgwMDcwMEQxMDAyMTA4MDYwMDBFODBCQzA4QkNFMAorOjEwOTM2MDAwMTg0NzAwMDAzNDZFMjE0MDAwMDAxMTQwMDAwMDEwNDBGQQorOjEwOTM3MDAwMDAwMDE4NDAwMDAwMDA4MEZFNjZGRkZGRjBCNTgyQjBEQworOjEwOTM4MDAwMDcxQzAxMjAwMTkwRkZGN0U3RkUwMTI4MTNEMTM4MkZCOQorOjEwOTM5MDAwMDFEMEE4MkYwN0QxMDAyNkY2NDMzNDFDQTgyRjAyRDFGNAorOjEwOTNBMDAwMzAxQzAwOTYzNTFDMTEyMDAwMDQwNjYyNDQ2Mjg1NjI2MAorOjEwOTNCMDAwMDA5OUMwNDZDMTYyMDAyMTA4NDhDMDQ2MDE2MDM4MkZBQworOjEwOTNDMDAwMDFEMEE4MkYwNUQxMDEyMTAxNjBBODJGMDFEMTAzMjFDRgorOjEwOTNEMDAwMDE2MDAxOTgwMkIwRjBCQzA4QkMxODQ3MzQ2RTIxNDAwRgorOjEwOTNFMDAwNzA0NzAwMDA3MDQ3MDAwMDkwQjUwNzFDMTI0QzIxNjhDMAorOjEwOTNGMDAwMTI0ODgxNDIwQkQwMDAyMzIxMUNFMjFEQzEzMjAwRTA0MworOjEwOTQwMDAwMDhDMTkxNDJGQ0QzMjA2MEM4MjBBMDgwNjc3MjM4MDE1NworOjEwOTQxMDAwMDBGMDE4RjgyNzcyMEE0OEMwNDZFMDYwMDkyRjAwREIwOAorOjEwOTQyMDAwMDAyN0UwMTkwMTdEMDEzMTAxNzVFMDg4MDEzMEUwODBGRAorOjEwOTQzMDAwMDEyMDkwQkMwOEJDMTg0NzAwMDAwMDgwRUVGRkMwRDA5RgorOjEwOTQ0MDAwMDgxMDAwMDM4MEI0MDg0QUQxMUQ4OTMxMEI3QTIwMkIwMworOjEwOTQ1MDAwMDFEMzAwMjMwQjcyMDcxQzA4N0E0MzFDMEI3MjgwMTg3RgorOjEwOTQ2MDAwOTAzMDQ3NzI4MEJDNzA0NzAwMDAwMDgwMDc0OTAxMjI5RAorOjEwOTQ3MDAwMTIwNDA4NjgwMjQwMDEyMDAwMkEwNkQxMEE2ODEyMEM3MgorOjEwOTQ4MDAwMDJEMTA5Njg4OTBBMDBEMjAwMjA3MDQ3MDAwMDEwNDAwQworOjEwOTQ5MDAwOTBCNTA3MUMwOTRDMzgxQzIxMUNGQ0Y3OTFGRjM4MUNBNworOjEwOTRBMDAwMDBGMDBFRjgwMTIzRDg0MjAxRDEwMDBDRTA4MDAwMjEyOQorOjEwOTRCMDAwMjAxQ0ZDRjdDNUZFOTBCQzA4QkMxODQ3QzQ2NjIxNDBDMAorOjEwOTRDMDAwRjhCNTA3MUM3OTdBNzY0ODAwMjM3NjRDMDEyOTVERDFERQorOjEwOTREMDAwQTI4OEMwNDYwMDkyQTE4OThBNDI3NERBRkE3QTAwMkFFOAorOjEwOTRFMDAwMTVEMDdBNkMwMDJBMTJEMDhBNDIxMEQ4MDA5QTUxMUNFQQorOjEwOTRGMDAwQTE4MEExODhDMDQ2NDE4MTc4NkM2QjRFQzA0NkYwODA0NworOjEwOTUwMDAwQTA2QTU4MjM3OTZDNTk0MzQwMThDMTFBMjhFMDIyODg3MAorOjEwOTUxMDAwMDEzMjEyMDQxMjBDMjI4MDhBNDIwMERCMjM4MDAwMjJENgorOjEwOTUyMDAwMDAyOTY5REQ1RjRDQTQ2QTVFNEIxRDg4NTgyMzZCNDM5QworOjEwOTUzMDAwRTMxOERFMUQwMTM2MDEyMzlCMDczMzQzMUI2ODFCMDYxRQorOjEwOTU0MDAwMTVEMTU4NDkwMDlBMDEzMjhBODA4QTg4QzA0NjQyODFFMgorOjEwOTU1MDAwMDg4ODAxMzA1NDRFQzA0NkYwODA1ODIwNjg0MzIxMThENgorOjEwOTU2MDAwMzgxQzAwRjAzOUZCRjA4ODAwMDQwMDE0OTVFMDRENEJFNgorOjEwOTU3MDAwMDEzNTJEMDQyRDBDMUQ4MDhENDIwMURCMDAyNTFEODA0MQorOjEwOTU4MDAwMDEzMjEyMDQxMjE0OTE0MkNFREM4MUUwRTE4OEUyODlCQQorOjEwOTU5MDAwOTE0MjE4REFGOTdBMDAyOTJGRDA3OTZDNDkwNDQ5MENFNAorOjEwOTVBMDAwNzk2NDJBRDBFMjg5OTE0MjI3RDhFMTg4MDEzMUUxODBBQgorOjEwOTVCMDAwRTE4OEMwNDY4MTgxMDEyM0RCMDM3ODZDMTg0MzNBNEU3MQorOjEwOTVDMDAwQzA0NkYwODAwMEUwNjNFMEUwNkE3OTZDNEIwMDU5MTgxNworOjEwOTVEMDAwNDkwMTQwMThDMTFGNTkzOTM4MUMwMEYwMEZGQkUwNkFERgorOjEwOTVFMDAwNzk2QzRBMDA1MjE4NTIwMTgwMTgwMTM5MDkwNDA5MEM5QgorOjEwOTVGMDAwNjAzODAwRjA4OUZCQjZFNzRBRTA2MTg4MDEzMTA5MDQ3MAorOjEwOTYwMDAwMDkwQzYxODBFMjg5OTE0MjAwREI2MzgwMDAyMTAwMkExRAorOjEwOTYxMDAwM0VERDI0NENFNDZBMjM0QjVEODg2QjAwNUIxOTVCMDFFMworOjEwOTYyMDAwRTMxOERFMUQwMTM2MDEyMzlCMDczMzQzMUI2ODFCMDYyRAorOjEwOTYzMDAwMjBEMTFDNEVGMTg4MDEzMUYxODBGMTg4QzA0NjgxODEzMgorOjEwOTY0MDAwNzA4ODAxMjNEQjAzMDEzMDE4NDMxNzQ5QzA0NkM4ODBFNgorOjEwOTY1MDAwNjgwMDQwMTk0MDAxMjExODM4MUMwMEYwQ0ZGQTcxODhDOQorOjEwOTY2MDAwNEEwMDUyMTg1MjAxRjA2QTgwMTgwMEYwNERGQjBFNDk3MgorOjEwOTY3MDAwQzg4ODc5RTcwQjRCMDEzNTJEMDQyRDBDNUQ4MDk1NDI5MAorOjEwOTY4MDAwMDFEQjAwMjU1RDgwMDEzMTA5MDQwOTE0OEE0MkMyREMzNgorOjEwOTY5MDAwMDE4OTAxMzEwMTgxMDAyMEMwNDNGOEJDMDhCQzE4NDc5MgorOjEwOTZBMDAwNEMyQjAwODA0QzJBMDA4MEM0NjYyMTQwRjBCNDA2MUM3QworOjEwOTZCMDAwMDEyM0RCMDMzMzQwMDEyNDQ0NEYwMDIwNDQ0QTQ1NEQzRAorOjEwOTZDMDAwRDExRDM5MzEwMDJCNDFEMEUzMDNGMzFBNzNEMEVFODk1OQorOjEwOTZEMDAwOUU0MjcxRDNFRTg4MDAyRTZERDBFRDZBNUUxRTczMDAzRgorOjEwOTZFMDAwOUIxOTVCMDFFRDE4QUU2ODM2MDYzNjBFMDMyRTAyRDBDQworOjEwOTZGMDAwQ0U4OTAxMzZDRTgxNDAzNUFEOEJBRDAwMzU0RTc2NkFEMAorOjEwOTcwMDAwQzA0NjcwNTE1NTg5MDEzNTU1ODEzMjRFRjI2QUQyMThFMgorOjEwOTcxMDAwOTA2MEYyNkFEMjE4OTA2M0YyNkFEMjE4RDA2M0YyNkE0QgorOjEwOTcyMDAwRDIxODEwNjRGMjZBRDIxODUwNjRGMjZBRDIxODkwNjRBNworOjEwOTczMDAwRjI2QUQyMThEMDY0RjA4ODAxMzhGMDgwRjA4OEMwNDYxMAorOjEwOTc0MDAwODg4MTI0NDkwMDI4MzlEMTRGODAzN0UwMDAyRTM4RDk0QworOjEwOTc1MDAwQUI4OUIzNDIzMEQzQUI4ODAwMkIyQ0QwNTM4OTAxMzM3MworOjEwOTc2MDAwNTM4MTJBMUNBRDZBNTgyMzAxM0U3MzQzRUQxOEFFNjgzRAorOjEwOTc3MDAwMzYwNjM2MEUwMzJFMDJEMENFODkwMTM2Q0U4MUE4NjA4MQorOjEwOTc4MDAwOTU2QUVEMThBODYzOTU2QUVEMThFODYzOTU2QUVEMTg3NworOjEwOTc5MDAwMjg2NDk1NkFFRDE4Njg2NDk1NkFFRDE4QTg2NDk1NkE1RQorOjEwOTdBMDAwRUIxOEQ4NjQ5MDg4MDEzODkwODA5MDg4QzA0NjQ4ODEzMgorOjEwOTdCMDAwMDAyODAzRDEwMUUwMDRFMDAzRTAxNzgwMjAxQ0YwQkM4NgorOjEwOTdDMDAwNzA0N0NBODkwMTMyQ0E4MUY5RTcwMDAwRkZGRjAwMDAzMworOjEwOTdEMDAwMEMyQjAwODA0QzJBMDA4MDAwQjUwMDIxNDE2MDEwNDkwQworOjEwOTdFMDAwNEE2ODAwMkExMEQxQ0E2ODAwMkEwNEQwQ0ExRDE5MzI1QQorOjEwOTdGMDAwMTI3OTAwMkEwOEQwNEE2OTAwMkEwQkQxODg2MTQ4NjE5MQorOjEwOTgwMDAwMDBGMDEwRjgwOEJDMTg0NzRBNjkwMDJBMDJEMTg4NjFBNAorOjEwOTgxMDAwNDg2MUY3RTc4QTY5QzA0NjUwNjA4ODYxRjJFNzAwMDA1NgorOjEwOTgyMDAwNkMwNjAwODBCMEI1MkE0ODQwNjkwMDI4NENEMDA4MjI1OAorOjEwOTgzMDAwQzE2ODBBNDAwMDI3Mjc0QkQ5MURCOTMxMDAyQTExRDAzMQorOjEwOTg0MDAwMDQyMjI1NENDMDQ2MEM2MTI0NENDMDQ2NEM2MjI0NEM3QQorOjEwOTg1MDAwQzA0NjhDNjIyMzRDQzA0NkNDNjIyMzRDQzA0NjBDNjM4RAorOjEwOTg2MDAwNEY2MzEyRTAwNTIyMjE0Q0MwNDYwQzYxMjA0Q0MwNDZEQgorOjEwOTg3MDAwNEM2MjIwNENDMDQ2OEM2MjFGNENDMDQ2Q0M2MjFGNENEMAorOjEwOTg4MDAwQzA0NjBDNjMxRTRDQzA0NjRDNjM0MDI0Q0M4MjRGODNDMAorOjEwOTg5MDAwMUM0RjAwMjEwMDJBMENEOThDMDAwNTE5NkQ2QTdENDBFRgorOjEwOThBMDAwRTQxOEZGMzQwMTM0NjU2MjAxMzE5MTQyRjREMzEwMjk4OAorOjEwOThCMDAwMDdEMjhBMDBEMjE4RkYzMjAxMzI1NzYyMDEzMTEwMjlEMworOjEwOThDMDAwRjdEMzExNDkwMEYwMjJGOEIwQkMwOEJDMTg0NzAwMDBEQgorOjEwOThEMDAwNkMwNjAwODBBQ0FCMjA0MDI4MDE0MDAwMDEyMzQ1NjdBNgorOjEwOThFMDAwODlBQkNERUZGRURDQkE5ODc2NTQzMjEwMjAwMTQwMDBFRgorOjEwOThGMDAwNjc0NTIzMDFFRkNEQUI4OTk4QkFEQ0ZFMTAzMjU0NzY3MAorOjEwOTkwMDAwQzNEMkUxRjAzNjM2MzYzNjMwODAyMDQwQjBCNTBGMUM3OQorOjEwOTkxMDAwMTU0REU5MURDOTMxMTU0QzIzMUMxNTRBMDAyMEZDRjdEMworOjEwOTkyMDAwNDRGQkU5MURGRjMxMUUzMTIzMUMwRDFDMTE0QTAxMjA4RgorOjEwOTkzMDAwRkNGNzNCRkIyOTFDMjMxQzBFNEEwMDIwRkNGNzM1RkJERgorOjEwOTk0MDAwMzkxQzIzMUMwQzRBMDEyMEZDRjcyRkZCMDAyMTBCNDg3QgorOjEwOTk1MDAwQzIxRDE5MzI1MTcxMDEyMUZGMzAwMTMwNDE2MjA4MUNEMgorOjEwOTk2MDAwQjBCQzA4QkMxODQ3MDAwMEFDQUIyMDQwNzUwOEZGRkYzNgorOjEwOTk3MDAwMjgwMDAzMDA0MDAwMDIwMDE0MDAwNzAwNkMwNjAwODA2RAorOjEwOTk4MDAwRjBCNTM3NEE1MDY5MDEyMzlCMDcwODMwMTg0MzAwNjgzNworOjEwOTk5MDAwMDEwNjA5MEUzMzRCMDEyOTQ5RDExRjY4MTkxQzMyNEJBRQorOjEwOTlBMDAwOUY0MjA0RDFGRkY3M0VGRkYwQkMwOEJDMTg0NzAwMjNEQworOjEwOTlCMDAwOUYwMENDNTk1NTY5RUYxOTNDNjEwMTMzMDUyQkY3RDM1MgorOjEwOTlDMDAwMDAwQTAwMDIwMjIzMTg0MzUzNjlDMDQ2OTg2MDUwNjk5OAorOjEwOTlEMDAwMDgyM0MyNjgxMzQwMjU0RkZBMURCOTMyMDAyQjAyRDA2QworOjEwOTlFMDAwMDQyMzIzNEMwMUUwMDUyMzIyNENDMDQ2MTQ2MTQwMjQ4QgorOjEwOTlGMDAwRDQ4MjAwMjQ1NDgzMjA0QzAwMjIwMDJCMENEOTk1MDBFMworOjEwOUEwMDAwNDYxOTc2NkE2NjQwRUQxOUZGMzUwMTM1NkU2MjAxMzJGRQorOjEwOUExMDAwOUE0MkY0RDMxMDJBMDdEMjkzMDBEQjE5RkYzMzAxMzNBMworOjEwOUEyMDAwNUM2MjAxMzIxMDJBRjdEM0ZGRjc3MEZGQkNFNzAwMjExOAorOjEwOUEzMDAwOEYwMERDNTk1NTY5RUYxOTdDNjIwMTMxMDUyOUY3RDM5NAorOjEwOUE0MDAwMDAwQTAwMDIwMzIzMTg0MzUxNjlDMDQ2ODg2MDUwNjkyOAorOjEwOUE1MDAwNDA2OEMwNDY1MDYxMDk0OEZDRjdBNEZBQTRFNzAwMDAzQQorOjEwOUE2MDAwNkMwNjAwODAzMDgwMjA0MDY3NDUyMzAxQUNBQjIwNDA2RAorOjEwOUE3MDAwMjgwMTQwMDAyMDAxNDAwMDVDNUM1QzVDMTEzMUZGRkY2QworOjEwOUE4MDAwRjBCNTA3MUMzQjQ4M0M0QzA4MjEyMDYwQTE4MDAwMjAxOQorOjEwOUE5MDAwMjA4MUUxODA2MDgxMzk0OEMwNDZFMDYwMzg0OEMwNDY5NgorOjEwOUFBMDAwMjA2MTM4NDhDMDQ2NjA2MTM3NDhDMDQ2QTA2MTM3NDhFOQorOjEwOUFCMDAwQzA0NkUwNjEzNjQ4QzA0NjIwNjIzNjQ4QzA0NjYwNjIxMworOjEwOUFDMDAwMzU0OEMwNDZBMDYyMzU0OEMwNDZFMDYyMzQ0OEMwNDZDQQorOjEwOUFEMDAwMjA2MzM0NDhDMDQ2NjA2MzMzNDhDMDQ2QTA2MzMzNDhCRgorOjEwOUFFMDAwQzA0NkUwNjMzMjQ4QzA0NjIwNjQzMjQ4QzA0NjYwNjRFNQorOjEwOUFGMDAwMzE0OEMwNDZBMDY0MzE0OEMwNDZFMDY0MzA0OEMwNDZBMgorOjEwOUIwMDAwMjA2NTMwNDlDODY4MDIwNDg5Njk0QTQwRTMxRDc5MzNGOQorOjEwOUIxMDAwMDkwNEM5NDNDMDQzNDg0MEUxMURCOTMxREE2MzA4NjAxNAorOjEwOUIyMDAwMjk0RDIxMUMyQjFDMjk0QTAwMjBGQ0Y3M0VGQTI4NEEwQgorOjEwOUIzMDAwRTExREI1MzEwMTIwMkIxQzBFMUNGQ0Y3MzZGQTI0NEExRQorOjEwOUI0MDAwMDAyMDMxMUMyQjFDRkNGNzMwRkFFMTFENEQzMTJCMUM4MQorOjEwOUI1MDAwMjA0QTAxMjBGQ0Y3MjlGQUUwMUQ1RDMwMDE2ODAwMjk0OAorOjEwOUI2MDAwRkNEMDYwNkRDMDQ2Mzg2NTIwNkVDMDQ2Nzg2NUYwQkM5QworOjEwOUI3MDAwMDhCQzE4NDc4MDAwMDgwMDhDQjkyMDQwODE4MTQ4QkQ4RQorOjEwOUI4MDAwNzk1NjIzOEM5MzBDODI5NTFEMEUxMkNGOUIzQkMwRTkxNgorOjEwOUI5MDAwRTY1NTdDODI5OUY2NzgwMkQxRDcyNTczNzI4QzMzMTAwMgorOjEwOUJBMDAwRjcwM0YxNDI2QzlCNEFBNzgyOEUyM0E5OTBCMTgyOEU2MworOjEwOUJCMDAwREMzRkZCMjkwMDYyMjI0NTg4MkJGMTg1MTI2MUQxNzNCRAorOjEwOUJDMDAwNkVCMTExMTYwODgzMjA0MDc1MDhGRkZGNTQwMDAzMDA5MgorOjEwOUJEMDAwMDgwMDAyMDAxNDAwMDMwMDgwQjUwRjFDMzkxQzAwRjBCRgorOjEwOUJFMDAwMzNGODM4MUNGRkY3NENGRjAzNDgwMTg5MDEzMTAxODEyQworOjEwOUJGMDAwODBCQzA4QkMxODQ3MDAwMDBDMkIwMDgwOTBCNTA0MUNFQQorOjEwOUMwMDAwMEYxQzIwMUMzOTFDMDBGMDFGRjhFMDY4MDEwRUZGMjIxOQorOjEwOUMxMDAwMTIwNDAyNDAxMjBBMTE0M0ZGMjIxMjAyMDI0MDEyMDJGMQorOjEwOUMyMDAwMTE0MzAwMDYwODQzMzg2NTIwNjlDMDQ2Nzg2NTYwNjlCRAorOjEwOUMzMDAwQzA0NkI4NjUwMzQ4MDE4OTAxMzEwMTgxOTBCQzA4QkM2OAorOjEwOUM0MDAwMTg0NzAwMDAwQzJCMDA4MDkwQjUwMDIyOTMwMDFGMThDRAorOjEwOUM1MDAwQkY2OTVCMTg1RjYyMDEzMjA1MkFGN0QzMDc3QUZCMDhGOAorOjEwOUM2MDAwMDNEMzAwMjM5MjAwNTIxODEzNjIwNzZCQzA0NjhGNjMyMAorOjEwOUM3MDAwQzc2QUMwNDZDRjYzODc2QkMwNDYwRjY0NDc2QkMwNDY1OAorOjEwOUM4MDAwNEY2NDA3NkNDMDQ2OEY2NEMyNkJDMDQ2Q0E2NEMyODgwQQorOjEwOUM5MDAwQzA0NjBBODA4MjdBMTIwNjAzN0ExQjA0MUE0M0MzODhEQworOjEwOUNBMDAwMUIwMjFBNDM0MzdBREIwNzFBNDM4QTYwMTcxQzgzN0EyNAorOjEwOUNCMDAwNUEwODA1RDMxNDIyMUMxQ0EzMDgwMkQyMTUyMjAwRTA2NgorOjEwOUNDMDAwMDAyMjAwN0E0MzA4MTBEM0MwMDgwMkQzODgyMDEwNDMzMgorOjEwOUNEMDAwMDFFMDgwMjAxMDQzM0EwQTEyMDIwMTIzMUE0M0M4NjBBRgorOjEwOUNFMDAwOEE2MDA4MUNGRkY3NzhGRDA1RTAzODBBMDAwMjAzMjNBQworOjEwOUNGMDAwMTg0Mzg4NjBDQTYwMDM0ODAxODkwMTMxMDE4MTkwQkMyMgorOjEwOUQwMDAwMDhCQzE4NDcwQzJCMDA4MEYwQjQwMjZEMTQ0QzE1MUNENQorOjEwOUQxMDAwRTc2OUJENDAxMzFDMjY2QUYzNDA1RDQwMkUxQzQ1NkQ2QgorOjEwOUQyMDAwQkQ0MDZFNDAyQjFDMzUxQ0ZENDAyRjFDQkIwMDY1NkFERQorOjEwOUQzMDAwRUI1ODAwMkIwOEQwMjM2OTAxMzc5RjQyMDBEMzAwMjczRQorOjEwOUQ0MDAwQkUwMEFFNTkwMDJFRjdEMUE0NjlBMjQwMTE0MzA1NEJDNQorOjEwOUQ1MDAwMTk0M0JBMDBBOTUwNDAzMDg3ODNGMEJDNzA0NzAwMDAxNworOjEwOUQ2MDAwNEMyQTAwODAwMDAwMDA4MDgwQjQwMDIyMDAyMzAwMjlEQgorOjEwOUQ3MDAwMDVEOTA3Nzg3QTQwMDEzMDAxMzM4QjQyRjlEM0QwNDNCQgorOjEwOUQ4MDAwMDAwNjAwMEU4MEJDNzA0N0YwQjUwNzFDMDAyNEZGMjZCQgorOjEwOUQ5MDAwMDkzNjIwMUMwMEYwOUFGODAwRjBCOEY5MDUxQzAwRjAxNAorOjEwOURBMDAwQzdGQTNENzAyODFDMDEzNzAxMzRCNDQyRjFEM0YwQkMyRQorOjEwOURCMDAwMDhCQzE4NDc4MEI1MDBGMDkzRjgwMEYwQTdGOTA3MUMxRAorOjEwOURDMDAwMDBGMEI2RkEzODBBRjZEMzgwQkMwOEJDMTg0N0YzQjVFMQorOjEwOUREMDAwODJCMDAyOTg0MTAyNTMyMDAwRjA2NEY4MDBGMEE4RkEyMworOjEwOURFMDAwRkZGN0U4RkYwMDI0MDAyMDAxOTAyRTIwMDA5MDAwMjVCRQorOjEwOURGMDAwMDAyNzAyOTgwMTI4MDREMTAwOTg4NDQyMDFEMzAwMjY0QworOjEwOUUwMDAwMDlFMDAxOTg0MTFDMDE5MTAwRjA2MEY4MDBGMDdFRjkzMgorOjEwOUUxMDAwMDYxQzAwRjA4REZBRjgwMDg2NDAzNTQzMDEzNDAxMzcwNgorOjEwOUUyMDAwMDQyRkU2RDMwMzk5MjBDMTAzOTFGRjIzMDkzMzlDNDJGOQorOjEwOUUzMDAwREREMzA0QjBGMEJDMDhCQzE4NDdGMEI1MDQxQzBGMUNGRgorOjEwOUU0MDAwMDEyQzJBRDAxNjQ4QzA2RjQwMjMwMTY4MTk0MzAxNjBENQorOjEwOUU1MDAwMDAyNjIwQ0ZCMTAwODQyMDAwRjAyNEY4MjgxQzAwRjA1OAorOjEwOUU2MDAwREZGOTI4MEEwMEYwRENGOTI4MEMwMEYwRDlGOTI4MEVGNworOjEwOUU3MDAwMDBGMEQ2RjkwMEYwNUNGQTAxMzY0MjJFRTlEMzYxMDIxNworOjEwOUU4MDAwODMyMDAwRjAwRkY4MDBGMDUzRkFGRkY3OTNGRjA0NDgyNworOjEwOUU5MDAwQzA2RjQwMjMwMTY4OTk0MzAxNjBGMEJDMDhCQzE4NDdCQgorOjEwOUVBMDAwNjgwRTAwODA5MEI1MDQxQzBGMUMwMEYwNTlGQTIwMUNBRAorOjEwOUVCMDAwMDBGMEI2RjkzODBDMDBGMEIzRjkzODBBMDBGMEIwRjk0OAorOjEwOUVDMDAwMzgxQzAwRjBBREY5OTBCQzA4QkMxODQ3MDBCNTAxMUM2NworOjEwOUVEMDAwNTQyMEZGRjdFN0ZGMDAyMDAwRjBBMkY5MDhCQzE4NDc2NAorOjEwOUVFMDAwMDBCNTAwRjAzREZBNTcyMDAwRjA5QUY5MDhCQzE4NDc3OQorOjEwOUVGMDAwOTBCNTA4NEZGQTZGMjAyMzE0Njg5QzQzMTQ2MDIzMUMwQworOjEwOUYwMDAwRkZGNzY1RkZGODZGMjAyMzAxNjgxOTQzMDE2MDkwQkNEQgorOjEwOUYxMDAwMDhCQzE4NDc2ODBFMDA4MDkwQjUwODRGRkE2RjIwMjNFMAorOjEwOUYyMDAwMTQ2ODlDNDMxNDYwMjMxQ0ZGRjc4N0ZGRjg2RjIwMjNGRAorOjEwOUYzMDAwMDE2ODE5NDMwMTYwOTBCQzA4QkMxODQ3NjgwRTAwODA5NgorOjEwOUY0MDAwRjBCNTA0MUMwRjFDMTg0RUYwNkYyMDIzMDE2ODk5NDNENAorOjEwOUY1MDAwMDE2MDYxMDI1MzIwRkZGN0E1RkYwMEYwRTlGOUZGRjc2OAorOjEwOUY2MDAwMjlGRkY4MUQwNTMwMDEyQzAzRDEyMjJGMDFEMzAwMjczMgorOjEwOUY3MDAwMEZFMDQ0MUNGRkY3QUFGRjAwRjBDOEY4MDcxQzAwRjAzMAorOjEwOUY4MDAwRDdGOTIwMUNGRkY3QTJGRjAwRjBDMEY4MDUxQzAwRjA3NQorOjEwOUY5MDAwQ0ZGOUYwNkYyMDIzMDE2ODE5NDMwMTYwMjgwMjM4NDM4QworOjEwOUZBMDAwRjBCQzA4QkMxODQ3MDAwMDY4MEUwMDgwRjBCNUMyQjBENQorOjEwOUZCMDAwMTQxQzBEMUMwNzFDMDEyRjJGRDA3OTAyMTk0RUYwNkZCNQorOjEwOUZDMDAwMjAyMzAyNjg5QTQzMDI2MDUzMjBGRkY3NkJGRjAwRjBFMgorOjEwOUZEMDAwQUZGOUZGRjdFRkZFNjg0NkZGRjdENkZFNkE0NkU4MURDOQorOjEwOUZFMDAwMDUzMDE0NTQyMTBBNjg0NDQxNzA2ODQ2MDA5OTBDMzBDOQorOjEwOUZGMDAwRkZGN0JBRkUwMkFCMTg3MDAwMjA1ODcwNjg0NjBDMjFCQgorOjEwQTAwMDAwRkZGN0IyRkUwMkFCNTg3MDY5NDYzODFDRkZGNzE1RkYyOAorOjEwQTAxMDAwRjA2RjIwMjMwMTY4MTk0MzAxNjA0MkIwRjBCQzA4QkMxNgorOjEwQTAyMDAwMTg0NzAwMDA2ODBFMDA4MEZGQjVDMkIwMDcxQzAxMkY2MgorOjEwQTAzMDAwMDFEMTAxMjAzNkUwNkI0NjAwMjBDNDQzMTBDMzAxMzAzQgorOjEwQTA0MDAwNDIyOEZCRDM2ODQ2MEMzMDAzMUMwMDI0MDAyQTBBRDk5RQorOjEwQTA1MDAwMEU4OEMwNDYwNjcwMEU4ODM2MTI0NjcwMDIzMDAyMzFGNQorOjEwQTA2MDAwMDIzNDk0NDJGNEQzMDA5MjE4MUMxMTFDRkZGNzdDRkVCQQorOjEwQTA3MDAwMDQxQzAwMjAwMTkwMDJBQjFDNzA1ODcwOUQ3MDY4NDY1MworOjEwQTA4MDAwMEMyMUZGRjc3MUZFMDJBQjU4NzA0NTlCMUQwNjJEMEU4QgorOjEwQTA5MDAwQUM0MjAzRDE2OTQ2MzgxQ0ZGRjczRUZGMDEyMEFDNDJCOQorOjEwQTBBMDAwMDBEMTAwMjA0NkIwRjBCQzA4QkMxODQ3QjBCNUMyQjAyMworOjEwQTBCMDAwMEYxQzQxMDIxNDRDRTA2RjIwMjMwMjY4OUE0MzAyNjA5NworOjEwQTBDMDAwNTMyMEZGRjdFRkZFMDBGMDMzRjlGRkY3NzNGRTY4NDYwOQorOjEwQTBEMDAwRkZGNzVBRkVFMDZGMjAyMzAxNjgxOTQzMDJBRDAxNjBDQgorOjEwQTBFMDAwNkQ3ODAwMjQwMkFCNUM3MDY4NDYwQzIxRkZGNzNDRkVFMworOjEwQTBGMDAwQTg0MjAyRDEwMDk4ODc0MjAxRDMyMDFDMDBFMDAxMjAzMQorOjEwQTEwMDAwNDJCMEIwQkMwOEJDMTg0NzY4MEUwMDgwRkM0NjYwNDdFRgorOjEwQTExMDAwMDAwMEEwRTNCNDIyOUZFNUI0MzI5RkU1MDExMEEwRTM2NAorOjEwQTEyMDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTUzNworOjEwQTEzMDAwMDAxMDgyRTUwMDEwOTNFNTgxMDM4MEUxMDExMEEwRTNBNworOjEwQTE0MDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTUxNworOjEwQTE1MDAwMDAxMDgyRTUwMDEwOTNFNTAxMDM4MEUxMDExMEEwRTMwNworOjEwQTE2MDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTVGNworOjEwQTE3MDAwMDAxMDgyRTUwMDEwOTNFNTgxMDI4MEUxMDExMEEwRTM2OAorOjEwQTE4MDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTVENworOjEwQTE5MDAwMDAxMDgyRTUwMDEwOTNFNTAxMDI4MEUxMDExMEEwRTNDOAorOjEwQTFBMDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTVCNworOjEwQTFCMDAwMDAxMDgyRTUwMDEwOTNFNTgxMDE4MEUxMDExMEEwRTMyOQorOjEwQTFDMDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTU5NworOjEwQTFEMDAwMDAxMDgyRTUwMDEwOTNFNTAxMDE4MEUxMDExMEEwRTM4OQorOjEwQTFFMDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTU3NworOjEwQTFGMDAwMDAxMDgyRTUwMDEwOTNFNTgxMDA4MEUxMDExMEEwRTNFQQorOjEwQTIwMDAwMDAxMDgyRTUwMDEwODJFNTAwMTBBMEUzMDAxMDgyRTU1NgorOjEwQTIxMDAwMDAxMDgyRTUwMDEwOTNFNTAxMDA4MEUxMUVGRjJGRTFCMAorOjEwQTIyMDAwRkM0NjYwNDdBNDIxOUZFNUE4MzE5RkU1QTAxM0EwRTE2QgorOjEwQTIzMDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTUyNAorOjEwQTI0MDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1MjAxM0EwRTFEOQorOjEwQTI1MDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTUwNAorOjEwQTI2MDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1QTAxMkEwRTEzQQorOjEwQTI3MDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTVFNAorOjEwQTI4MDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1MjAxMkEwRTE5QQorOjEwQTI5MDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTVDNAorOjEwQTJBMDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1QTAxMUEwRTFGQgorOjEwQTJCMDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTVBNAorOjEwQTJDMDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1MjAxMUEwRTE1QgorOjEwQTJEMDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTU4NAorOjEwQTJFMDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1QTAxMEEwRTFCQworOjEwQTJGMDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTU2NAorOjEwQTMwMDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1MDAxMEEwRTEzQgorOjEwQTMxMDAwMDAxMDgzRTUwMTEwQTBFMzAwMTA4MkU1MDAxMDgyRTU0MworOjEwQTMyMDAwMDAxMEEwRTMwMDEwODJFNTAwMTA4MkU1MUVGRjJGRTE3RgorOjEwQTMzMDAwRkM0NjYwNDdBMDMwOUZFNTAxMTBBMEUzMDAxMDgzRTVENAorOjEwQTM0MDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTUyRAorOjEwQTM1MDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MUVGRjJGRTE2OAorOjEwQTM2MDAwRkM0NjYwNDc3MDMwOUZFNTAwMTBBMEUzMDAxMDgzRTVENQorOjEwQTM3MDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTVGRAorOjEwQTM4MDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MUVGRjJGRTEzOAorOjEwQTM5MDAwRkM0NjYwNDczNDIwOUZFNTNDMzA5RkU1MDAxMEEwRTM3OQorOjEwQTNBMDAwMDAxMDgyRTUwMDEwODJFNTAxMTBBMEUzMDAxMDgzRTVCMworOjEwQTNCMDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MDAxMDgzRTVCRAorOjEwQTNDMDAwMDAxMDgzRTUwMDEwODNFNTAwMTA4M0U1MUVGRjJGRTFGOAorOjEwQTNEMDAwRjgwMDE4NDAwNDAxMTg0MDAwMDExODQwRkMwMDE4NDAyMworOjEwQTNFMDAwODBCNTAwRjAwQ0Y4MDAyNzM4MUMwMEYwNDdGODc4MUMwNgorOjEwQTNGMDAwMDcwNDNGMEMwQzJGRjdERDgwQkMwOEJDMTg0NzFENDgzNAorOjEwQTQwMDAwMDI2ODFENDk4QjY5RDIxODAyNjAwMjY2OEE2QTQzNjgzNQorOjEwQTQxMDAwOUIxODQzNjA5MzQyMDJEMjgyNjgwMTMyODI2MEMyNjgxNAorOjEwQTQyMDAwMEI2QUQyMThDMjYwNDI2OUNCNjhEMjE4NDI2MUMyNjkxNQorOjEwQTQzMDAwOEI2OEQyMThDMjYxMDI2OTBCNjlEMjE4MDI2MTgyNjkwNQorOjEwQTQ0MDAwMEI2OEQyMTg4MjYxMDI2QkNCNjlEMjE4MDI2MzRBNkEyOAorOjEwQTQ1MDAwNDM2QjlCMTg0MzYzOTM0MjAyRDI4MjZCMDEzMjgyNjM0NworOjEwQTQ2MDAwQzI2QjRCNjlEMjE4QzI2MzAyNkNDOTZBNTExODAxNjQ4RAorOjEwQTQ3MDAwNzA0NzAwMDBBNDJBMDA4MDAwMDgxNDQwODhCNTY5NDY4RgorOjEwQTQ4MDAwMDBGMDE3Rjg4MTA4MEFEMDAwMjAwMDI5MDdEOTAwMjIxRgorOjEwQTQ5MDAwODMwMDAwOUZDMDQ2RkE1MDAxMzA4ODQyRjhEMzg4QkM0MAorOjEwQTRBMDAwMDhCQzE4NDcwMEI1MDBGMDA0RjgwMDA0MDAwQzA4QkMxNAorOjEwQTRCMDAwMTg0NzAwMjIwMDI4MEFEMDAxMjgwQUQwMDIyODBDRDAxMAorOjEwQTRDMDAwMDMyODAyRDEwNzQ4MUMyMjA4NjAxMDFDNzA0NzA2NDg2OAorOjEwQTREMDAwMDRFMDA2NDg1MDIyMDg2MEY3RTcwNTQ4NjgyMjA4NjA1MworOjEwQTRFMDAwRjNFNzAwMDAwODgzMjA0MEE0MkEwMDgwMEMyQjAwODBBMgorOjEwQTRGMDAwQTA4MjIwNDA4MEI0MDMyMkMyODAxNTRBQzA0NjgyNjBGOAorOjEwQTUwMDAwMTQ0QTEyODgwMTMyQzI2MDAwMjAxMzRBMTM1Q0MwNDYwQworOjEwQTUxMDAwMEI3MDAxMzAwMTMxMDgyOEY4RDMyMDIyMEE3MDAxMzE3NAorOjEwQTUyMDAwMDAyMDBFNEIxRjVDQzA0NjBGNzAwMTMwMDEzMTA4MjgxRgorOjEwQTUzMDAwRjhEMzBBNzAwMTMxMDAyMDA5NEExMzVDQzA0NjBCNzA0MQorOjEwQTU0MDAwMDEzMDAxMzEwODI4RjhEMzAwMjAwODcwODBCQzcwNDcyMgorOjEwQTU1MDAwMDgxMDAwMDM2ODBFMDA4MDdDMDQwMDgwODUwNDAwODBFMQorOjEwQTU2MDAwOEUwNDAwODAwMEI1MDEyMzBBNDhDMTFEODkzMTRCNzA1QgorOjEwQTU3MDAwMDAyMjBBNzA2NDIxODAzMEMxODIwMTgzNDM4MzdEMjFERgorOjEwQTU4MDAwQzkwMDgxODNDMjgzMDQ0ODAxMjIwMDIxMDBGMDhFRkJCMAorOjEwQTU5MDAwMDhCQzE4NDc2ODBFMDA4MEI1MjJGRkZGMDBCNUZGRjcyMgorOjEwQTVBMDAwRTFGRjEzNDgwMjIyMDAyMTAwRjA4MEZCMDEyM0Q4NDI4MgorOjEwQTVCMDAwMEFEMTEwNDhDMTFEMzkzMUNBODgwMTMyQ0E4MDgxNzk1NworOjEwQTVDMDAwMDEzMTgxNzFGREY3NzBGOTBCNDhDMDY4MDEyODA1RDE5MAorOjEwQTVEMDAwMEE0ODdEMjJEMjAwMDAyMTAwRjA2OEZCMDg0OEZCRjcwMgorOjEwQTVFMDAwRTFGQzA4NDgyODIyMDAyMTAwRjA2MEZCMDhCQzE4NDc2NQorOjEwQTVGMDAwNzkyMUZGRkZBMDgyMjA0MDY4MEUwMDgwQTU3QjIxNDBDQQorOjEwQTYwMDAwOTUyQ0ZGRkY1OTAzRkZGRjAwQjUxMDIwMEY0OUMwNDZFRQorOjEwQTYxMDAwMDg2MDBGNEEwRjQ4NjQyMUZCRjdDNkZDMEU0ODAxMjI3MAorOjEwQTYyMDAwMTIwNDAxNjgwQTQwMDgyMTAwMkEwNUQxMDI2ODEyMENCMAorOjEwQTYzMDAwMDdEMTAwNjg4MDBBMDREMzA4NDhDMDQ2QzE2MDA4QkMzRQorOjEwQTY0MDAwMTg0NzA3NDhDMDQ2MDE2NEY5RTcwMDAwMDAwMDAwQjA2MQorOjEwQTY1MDAwQTU1NUZGRkY3QzI5MDA4MDAwMDAxMDQwNDAwMTE4MDAzNAorOjEwQTY2MDAwMDAwMDAwODBGOEI1Mjc0ODAxMjIxMjA0MDE2ODBBNDA2MgorOjEwQTY3MDAwMDcyMTAwMkEwNUQxMDI2ODEyMEMwNkQxMDA2ODgwMEE2MQorOjEwQTY4MDAwMDNEMzIxNDhDMDQ2QzE2MDAyRTAyMDQ4QzA0NjAxNjRBRgorOjEwQTY5MDAwMUY0OEZCRjc4N0ZDMUY0OEMxNkJGRjI5RkNEMTgxNkI2QQorOjEwQTZBMDAwNDI2QjE2MUMwRjFDMUM0QzEwMjM2MDY5MTg0MzYwNjEyMAorOjEwQTZCMDAwQTE2OTk5NDMxRDA0QTE2MUU4NjBBMDY5QzA0NjI4NjFCMQorOjEwQTZDMDAwMTY0QTE3NDk2NDIwRkJGNzZGRkMxNjRBQzA0NjAwOTJGMQorOjEwQTZEMDAwMTU0QjAwMjAzOTFDMzIxQ0ZCRjc2RUZDMTM0OEMxNjg3NworOjEwQTZFMDAwMDgyOUZDRDExMjQ4RkJGNzVERkMxMDIzNjA2OTk4NDNGMAorOjEwQTZGMDAwNjA2MUU4NjAwMTIwRTMyMzFCMDFFMTE4Qzg3MUY4QkMyOAorOjEwQTcwMDAwMDhCQzE4NDcwMDAwMTA0MDQwMDExODAwMDAwMDAwODBGRAorOjEwQTcxMDAwMDQwMkZGRkYwMDAxMTg0MDY4MEUwMDgwMjA1NUZGRkY3MworOjEwQTcyMDAwQjVCNjIxNDA2NDAwMzAwMjQ0ODAyMDQwNDAwMTE4NDAwQQorOjEwQTczMDAwRjQwMUZGRkYwMEI1RkRGNzAxRkYwNjQ4RkJGNzMyRkMwRgorOjEwQTc0MDAwRkRGN0Q2RkVGRUY3MDRGOEZFRjcxNkY4RkVGNzI0RjgzQworOjEwQTc1MDAwMDhCQzE4NDc5MTAzRkZGRjkwQjVGREY3NkJGQzM0NEYyMQorOjEwQTc2MDAwMDAyNEY5NjhGODFENzkzMDAxMjkwRkQxMzE0OUMwNDYxQworOjEwQTc3MDAwRjk2NzMxNDlDMDQ2MDE2MDMwNDlDMDQ2MEM2MDRDNjAwMQorOjEwQTc4MDAwOEM2MENDNjAwQzYxNEM2MThDNjEwNEUwRjkxRDdEMzEwMgorOjEwQTc5MDAwRjk2NzEyQzAwODM4MDA2ODYwMjMwMTY4MTk0MzAxNjAzNgorOjEwQTdBMDAwRjg2RjIwMjMwMTY4MTk0MzAxNjBGODZGNDAyMzAxNjhBNgorOjEwQTdCMDAwOTk0MzAxNjAwMEYwNTRGOEZERjc0RUZDMDBGMDVFRjk5QgorOjEwQTdDMDAwRkRGNzczRjhGRkY3MENGRUZERjcyRUZFRkRGN0I2RkQ2MworOjEwQTdEMDAwRkRGN0MyRkVGREY3NTRGREZERjcwQUZERkRGNzk0RkQwMAorOjEwQTdFMDAwMDBGMDFBRkFGREY3OUNGRkZERjcwQUZGRkRGN0QyRkUxNQorOjEwQTdGMDAwRkRGNzNDRkNGQkY3RENGQUZGRjc5Q0ZGNzEyMzVCMDFFNAorOjEwQTgwMDAwRjgxODA0NzI0NDcyMDcyMzVCMDJGODE4MDQ2M0Y4NjhBRQorOjEwQTgxMDAwMDEyODAyRDFBODIwRkVGN0IxRkQwOTQ4QzA0NjQ0NjJENAorOjEwQTgyMDAwMDBGMDE4RkEwNzQ4RkJGN0JERkI5MEJDMDhCQzE4NDdCRQorOjEwQTgzMDAwNjgwRTAwODAwMDAxMTE0MDA0MDExMTQwMDAwMTExMDA2OAorOjEwQTg0MDAwQzAwMDE4MDAxNThGMjE0MDAwQjUwNDQ4RkJGN0FBRkI5MworOjEwQTg1MDAwRkRGNzVFRkZGREY3MjRGQzA4QkMxODQ3MTU5OTIxNDA2MQorOjEwQTg2MDAwRkEyMTAzNDhDMDQ2NDE2MjQwMjE0MTYyNzA0NzAwMDAxRQorOjEwQTg3MDAwQzAwMDE4MDAwNzQ4NDE2OTA3NEIxOTQzNDE2MTgyNjlDQworOjEwQTg4MDAwOUE0MzgyNjEwMTIyMTIwNUQxNjA4MDY5QzA0NjEwNjEzRAorOjEwQTg5MDAwNzA0NzAwMDA2ODBFMDA4MEZFQUY5QTEwMDBCNTAyNDhCNQorOjEwQThBMDAwRkJGNzgwRkIwOEJDMTg0N0M4NTdGRkZGRjBCNTI0NENFNgorOjEwQThCMDAwMDEyMTA5MDQyMDY4MDE0MDA5MjAyMjRFMjI0RDAwMjk2RgorOjEwQThDMDAwMDVEMTIxNjgwOTBDMDREMTIxNjg4OTBBMDFEM0YwNjBGRgorOjEwQThEMDAwMDBFMDI4NjQxRDQ4RkJGNzY1RkIxRDRGMUQ0OTg4Njk5MgorOjEwQThFMDAwMDEzMDg4NjEzODdBMDAyODAyRDE3ODdBMDAyODFGRDA5OAorOjEwQThGMDAwMTk0OEZCRjc1N0ZCMTk0OEZCRjc1NEZCMDAyOEZBRDExRQorOjEwQTkwMDAwMzg3QTAwMjgwMkQwMTY0OEZCRjc0Q0ZCMDEyMTA5MDRENQorOjEwQTkxMDAwMjA2ODAxNDAxNDIwMDAyOTA1RDEyMTY4MDkwQzA0RDFDOAorOjEwQTkyMDAwMjE2ODg5MEEwMUQzRjA2MDAxRTAyODY0RkZFN0ZFRTdBRgorOjEwQTkzMDAwRkZGNzY1RkQwQjQ4RkJGNzM1RkJGRkY3QUZGRkNERTdGMgorOjEwQTk0MDAwMDAwMDEwNDA0MDAxMTgwMDAwMDAwMDgwMDQwMkZGRkZEQQorOjEwQTk1MDAwODgxQzAwODAwODgzMjA0MEY0MDFGRkZGQjUwN0ZGRkYzQgorOjEwQTk2MDAwMDAwMEZGRkY5OTlGMjE0MDAwMjAwNzRBMDEyMTA5MDVBRgorOjEwQTk3MDAwNTA2MUM4NjBEMDYxQzg2MTAzMjNEQjA0MDM0QTAxMjEzMAorOjEwQTk4MDAwRDE2MzU4NjBGQ0U3MDAwMDY4MEUwMDgwQzAwMDE4MDAyQQorOjEwQTk5MDAwODBCNUMwQjAwMTIyMDAyMTBBMjBGQ0Y3RDFGRjA3MUNCRQorOjEwQTlBMDAwRkYyRjI4RDA2OTQ2RkYyMjM4MUMwMTMyRkRGNzU0RjlFOQorOjEwQTlCMDAwRkYyMzAxMzM5ODQyMUJEMTBEOTgwMDA5MThEMzM4MUM4RQorOjEwQTlDMDAwRkRGNzhERjgwRTQ5MDEyMjEyMDQwODY4MDI0MDBENDg3NworOjEwQTlEMDAwMDVEMTBBNjgxMjBDMDZEMTA5Njg4OTBBMDNEMzBBNDkwRAorOjEwQTlFMDAwQzA0NkM4NjAwMkUwMDk0OUMwNDYwODY0RkZGN0JDRkZFMgorOjEwQTlGMDAwMzgxQ0ZERjc3NEY4NDBCMDgwQkMwOEJDMTg0NzAwMDA1NAorOjEwQUEwMDAwMDAwMDEwNDAwNzgwMDAwMDQwMDExODAwMDAwMDAwODA5NgorOjEwQUExMDAwMDBCNTE3NDkwMTIyMTIwNDA4NjgwMjQwMDYyMDAwMkFFNgorOjEwQUEyMDAwMDVEMTBBNjgxMjBDMDZEMTA5Njg4OTBBMDNEMzExNDlCNQorOjEwQUEzMDAwQzA0NkM4NjAwMkUwMTA0OUMwNDYwODY0MDMyMEZFRjcyMworOjEwQUE0MDAwRDNGQ0ZCRjcwREZGMDEyMzE4NDNGQkY3RTdGRkZGRjdFQworOjEwQUE1MDAwODNGRUZGRjc5REZGRkZGNzA1RkVGRkY3RjVGRUZGRjcwQgorOjEwQUE2MDAwMDlGRkZGRjc5QkZERkZGNzIxRkYwOEJDMTg0NzAwMDAxNworOjEwQUE3MDAwMDAwMDEwNDA0MDAxMTgwMDAwMDAwMDgwRjBCNDQ2NEE3OQorOjEwQUE4MDAwMDEyMUM5MDM0NTREMTkyM0RCMDFFQzE4QTE2MTI4ODg3OAorOjEwQUE5MDAwNDAwNDQzNEJDMDE4ODcxQTA0MjBBRjYwNDE0RUMwNDZBMworOjEwQUFBMDAwQjA2MTA4MjBDODIzNDM0M0JCNDIyMUQ5NDEwMDNENEUzOQorOjEwQUFCMDAwQzA0NjMxNjFCNjY5MjAyMzlCMUIzQTRFQzA0NkYzNjEwNAorOjEwQUFDMDAwMTAzQjMzNjI4QjAwRkYxQTQwMDg4MTQyMTdEM0I4MjMzMgorOjEwQUFEMDAwNDM0M0JCNDIwOEQ5NDExRTMyNEJDMDQ2OTk4MUQ5ODFCQworOjEwQUFFMDAwNDAwMDAyMzg1ODYxMEFFMDAxMzA4MTQyRUZEMjA2RTBBRQorOjEwQUFGMDAwMkM0RUIzNjkwMTMzQjM2MTQwMDA4ODQyRDJEOTJBNDk1MAorOjEwQUIwMDAwMDAyMEEzNjk5QjA4MDdEMDI4NEI4NzAwQ0I1MUE3Njk3OQorOjEwQUIxMDAwQkYwODAxMzA4NzQyRjhEODIyNDlDMDQ2OEE2MjhDODkzMgorOjEwQUIyMDAwNTgyMDYwNDM4NzE4MDAyMDAwMjIwMDJDMEFERDU4MjM5QgorOjEwQUIzMDAwNDM0MzhDNkFFMzE4MDEzMDAwMDQwMDBDOUE2MDhCODk0RgorOjEwQUI0MDAwODM0MkY0RENDRjYyQ0M4OTYwMDAwMDE5NDAwMUM3MTk1MAorOjEwQUI1MDAwMDAyMDAwMkMwQkRENDMwMDFCMTg1QjAxQ0M2QUUzMThCRQorOjEwQUI2MDAwMDEzMDAwMDQwMDBDOUE2MENCODk4MzQyRjNEQzRGNjIxMQorOjEwQUI3MDAwMDAyMDBCNjkwMDJCMDdEOTg3MDA0QjZBQzA0NkRBNTFDOQorOjEwQUI4MDAwMEI2OTAxMzA4MzQyRjdEODQ5NkE4MDAwMDgxODA0MzhGRAorOjEwQUI5MDAwMjg2MUYwQkM3MDQ3MDAwMEIwQkUyMTQwNjgwRTAwODAwNAorOjEwQUJBMDAwMDAwMDIwNDA0QzJBMDA4MDAwMDAyMDQwMDBBRERFMDA2NAorOjEwQUJCMDAwMEE0ODAxMjMxQjA2NDE2OTk5NDMxQTA5NDE2MUQxNjA4MgorOjEwQUJDMDAwMDAyMUExMjI1MjAzOTE2MTFCMjNEQjAxQzAxODgxNjE4NgorOjEwQUJEMDAwMDEyMDAwMDY1OTA1MDg2MDcwNDcwMDAwNjgwRTAwODBEQgorOjEwQUJFMDAwODBCNDAyMUMwQjQ4MUIyM0RCMDFDMzE4OUE2MTAxMjNBQworOjEwQUJGMDAwMUIwNjQyNjkxQTQzNDI2MTg3Njk5RjQzMDEyMzFCMDU3MworOjEwQUMwMDAwODc2MURBNjA4MDY5QzA0NjE4NjFBMTIwNDAwMzgxNjFENAorOjEwQUMxMDAwODBCQzcwNDc2ODBFMDA4MDgwQjVGRkY3QzlGRjAwMjAzOAorOjEwQUMyMDAwMDBGMDIwRjgwMDIwMDk0OTAwMjIwMzAxNUYxODMzMjNCNworOjEwQUMzMDAwOUIwMUZCMTg5QTYyMDEzMDBCMjhGNkQzMDQ0ODAxMjJDRAorOjEwQUM0MDAwMDAyMTAwRjAzM0Y4ODBCQzA4QkMxODQ3NjgwRTAwODA3MworOjEwQUM1MDAwMUQzRUZGRkYwMEI1MDI0ODAwRjAwNEY4MDhCQzE4NDc4RAorOjEwQUM2MDAwQTg2MTAwMDA4MEI0MDEyMjEyMDUwRjRCQTEyMTQ5MDMwNQorOjEwQUM3MDAwMDAyODBFRDBDODYxMTgxQzU5Njk1MzAxMTk0MzQxNjE1RAorOjEwQUM4MDAwODc2OTlGNDM4NzYxRDE2MDgwNjlDMDQ2MTA2MTgwQkMzRAorOjEwQUM5MDAwNzA0NzE4MUM1RjY5MDEyMzVCMDY5RjQzNDc2MUQ3NjBCQgorOjEwQUNBMDAwMDAyMEM4NjFGM0U3MDAwMDY4MEUwMDgwQjBCNDA3MUMwNAorOjEwQUNCMDAwMDAyMDE3NEMwMzAxMUQxOTMzMjM5QjAxRUIxODlENkFEQgorOjEwQUNDMDAwQkQ0MjA1RDExRDZCOTU0MjAyRDFEQjZBOEI0MjFDRDA3RgorOjEwQUNEMDAwMDEzMDBCMjhFRUQzMDAyMDAzMDExRDE5MzMyMzlCMDEwMworOjEwQUNFMDAwRUIxODlCNkEwMDJCMDlEMTAzMDExQzE5MzMyMzlCMDEyQworOjEwQUNGMDAwRTMxODFBNjNEOTYyNUE2MzlGNjIwMkUwMDEzMDBCMjg5RAorOjEwQUQwMDAwRUFEMzBCMjgwMUQxMDAyMEMwNDNCMEJDNzA0NzAwMDAzQgorOjEwQUQxMDAwNjgwRTAwODA5MEI0MDExQzAwMjIwMTIwMTY0RjAxRTA1MworOjEwQUQyMDAwMDAyQTA3RDEwMzAxREMxOTMzMjM5QjAxRTMxODlCNjkzNworOjEwQUQzMDAwOEI0MjExRDEwMjAxRDIxOTMzMjM5QjAxRDIxODkzNkE5RAorOjEwQUQ0MDAwQzA0NjkzNjFEMzZBQzA0NkQzNjExMzZCQzA0NjEzNjI5OQorOjEwQUQ1MDAwNTM2QkMwNDY1MzYyMDEyMjAxMzAwQjI4RTBEMzA3NEJFRQorOjEwQUQ2MDAwMDAyQTAyRDE5QTY4OEE0MjAzRDEwMDIxOTk2MDkwQkNERQorOjEwQUQ3MDAwNzA0NzAwMjBDMDQzRkFFNzY4MEUwMDgwRTgxQjAwODA5RgorOjEwQUQ4MDAwMEIyODE3REEwQzQ5MDEyMzVCMDY4QTY5MTM0MzAxMjI1OQorOjEwQUQ5MDAwMTIwNThCNjExMzYxMDAwMTQwMTgzMzIzOUIwMUMwMTgxOQorOjEwQURBMDAwMDM2QkMwNDY0MzYzNTMwMTg4Njk5ODQzODg2MTEwNjEwRgorOjEwQURCMDAwMDEyMDcwNDcwMDIwRkNFNzY4MEUwMDgwOTBCNDA4NEEyQworOjEwQURDMDAwRDA2OTAwMjEwNzRGRDM2OTgzNDIwMkQ5RkMxQTIwMThBOQorOjEwQUREMDAwMDBFMEMwMUEwOTE4MTgxQ0I5NDJGNEQ5OTBCQzcwNDc5OQorOjEwQURFMDAwMDAyMDE0NDBBODYxMDAwMDkwQjUwNzFDMDAyNDAwMkYyQgorOjEwQURGMDAwMDREM0ZGRjdFM0ZGMDEzNEJDNDJGQUQ5OTBCQzA4QkM4RQorOjA0QUUwMDAwMTg0NzAwMDBFRgorOjAwMDAwMDAxRkYKKy8qIHZlciAwMy4wMDEuMDA4ICovCisvKgorICogQ29weXJpZ2h0IDE5OTktMjAwNCAzQ29tIENvcnBvcmF0aW9uLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIG9mIHRoZSAzYzk5MGltZy5oCisgKiBtaWNyb2NvZGUgc29mdHdhcmUgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiAzQ29tIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSAzQ09NIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFVTRVIgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMgVEhBVCBQVVJDSEFTRSBPUiBVU0UgT0YgVEhFIDNjOTkwaW1nLmgKKyAqIE1JQ1JPQ09ERSBTT0ZUV0FSRSBXSUxMIE5PVCBDUkVBVEUgT1IgR0lWRSBHUk9VTkRTIEZPUiBBIExJQ0VOU0UgQlkKKyAqIElNUExJQ0FUSU9OLCBFU1RPUFBFTCwgT1IgT1RIRVJXSVNFIElOIEFOWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTCisgKiAoUEFURU5ULCBDT1BZUklHSFQsIFRSQURFIFNFQ1JFVCwgTUFTSyBXT1JLLCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVCkKKyAqIEVNQk9ESUVEIElOIEFOWSBPVEhFUiAzQ09NIEhBUkRXQVJFIE9SIFNPRlRXQVJFIEVJVEhFUiBTT0xFTFkgT1IgSU4KKyAqIENPTUJJTkFUSU9OIFdJVEggVEhFIDNjOTkwaW1nLmggTUlDUk9DT0RFIFNPRlRXQVJFCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL01ha2VmaWxlIGIvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggNDY2MTA2Zi4uYzZhZjYxYiAxMDA2NDQKLS0tIGEvZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvZmlybXdhcmUvTWFrZWZpbGUKQEAgLTM1LDcgKzM1LDcgQEAKIGZ3LXNoaXBwZWQtJChDT05GSUdfQ09NUFVUT05FKSArPSBpbnRlbGxpcG9ydDIuYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0NIRUxTSU9fVDMpICs9IGN4Z2IzL3QzYl9wc3JhbS0xLjEuMC5iaW4gXAogCQkJCSAgIGN4Z2IzL3QzY19wc3JhbS0xLjEuMC5iaW4gXAotCQkJCSAgIGN4Z2IzL3QzZnctNy4wLjAuYmluCisJCQkJICAgY3hnYjMvdDNmdy03LjEuMC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfRFZCX1RUVVNCX0JVREdFVCkgKz0gdHR1c2ItYnVkZ2V0L2RzcGJvb3Rjb2RlLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19FMTAwKSArPSBlMTAwL2QxMDFtX3Vjb2RlLmJpbiBlMTAwL2QxMDFzX3Vjb2RlLmJpbiBcCiAJCQkgICAgIGUxMDAvZDEwMmVfdWNvZGUuYmluCkBAIC00OSw4ICs0OSwxMCBAQAogCQkJCSAgICAgc2IxNi9pbWFfYWRwY21fY2FwdHVyZS5jc3AKIGZ3LXNoaXBwZWQtJChDT05GSUdfU05EX1lNRlBDSSkgKz0geWFtYWhhL2RzMV9jdHJsLmZ3IHlhbWFoYS9kczFfZHNwLmZ3IFwKIAkJCQkgICB5YW1haGEvZHMxZV9jdHJsLmZ3Citmdy1zaGlwcGVkLSQoQ09ORklHX1RFSFVUSSkgKz0gdGVodXRpL2JkeC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfVElHT04zKSArPSB0aWdvbi90ZzMuYmluIHRpZ29uL3RnM190c28uYmluIFwKIAkJCSAgICAgICB0aWdvbi90ZzNfdHNvNS5iaW4KK2Z3LXNoaXBwZWQtJChDT05GSUdfVFlQSE9PTikgKz0gM2NvbS90eXBob29uLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19VU0JfREFCVVNCKSArPSBkYWJ1c2IvZmlybXdhcmUuZncgZGFidXNiL2JpdHN0cmVhbS5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfVVNCX0VNSTI2KSArPSBlbWkyNi9sb2FkZXIuZncgZW1pMjYvZmlybXdhcmUuZncgXAogCQkJCSAgZW1pMjYvYml0c3RyZWFtLmZ3CmRpZmYgLS1naXQgYS9maXJtd2FyZS9XSEVOQ0UgYi9maXJtd2FyZS9XSEVOQ0UKaW5kZXggNTI0MTEzZi4uMDBiNmUzYyAxMDA2NDQKLS0tIGEvZmlybXdhcmUvV0hFTkNFCisrKyBiL2Zpcm13YXJlL1dIRU5DRQpAQCAtMzY4LDcgKzM2OCw3IEBACiAKIEZpbGU6IGN4Z2IzL3QzYl9wc3JhbS0xLjEuMC5iaW4uaWhleAogRmlsZTogY3hnYjMvdDNjX3BzcmFtLTEuMS4wLmJpbi5paGV4Ci1maWxlOiBjeGdiMy90M2Z3LTcuMC4wLmJpbi5paGV4CitmaWxlOiBjeGdiMy90M2Z3LTcuMS4wLmJpbi5paGV4CiAKIExpY2Vuc2U6IEdQTHYyIG9yIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UsIG5vIHNvdXJjZSB2aXNpYmxlCiAKQEAgLTQzNSwzICs0MzUsNjEgQEAKICBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0uCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogVEVIVVRJIC0gVGVodXRpIE5ldHdvcmtzIDEwRyBFdGhlcm5ldAorCitGaWxlOiB0ZWh1dGkvYmR4LmJpbgorCitMaWNlbmNlOgorCisgQ29weXJpZ2h0IChDKSAyMDA3IFRlaHV0aSBOZXR3b3JrcyBMdGQuCisKKyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQorIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyBhY2NvbXBhbnlpbmcgaXQuCisKK0ZvdW5kIGluIGhleCBmb3JtIGluIGtlcm5lbCBzb3VyY2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0RyaXZlcjogVFlQSE9PTiAtIDNjcjk5MCBzZXJpZXMgVHlwaG9vbgorCitGaWxlOiAzY29tL3R5cGhvb24uYmluCisKK0xpY2VuY2U6CisvKgorICogQ29weXJpZ2h0IDE5OTktMjAwNCAzQ29tIENvcnBvcmF0aW9uLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIG9mIHRoZSAzYzk5MGltZy5oCisgKiBtaWNyb2NvZGUgc29mdHdhcmUgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiAzQ29tIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSAzQ09NIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFVTRVIgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMgVEhBVCBQVVJDSEFTRSBPUiBVU0UgT0YgVEhFIDNjOTkwaW1nLmgKKyAqIE1JQ1JPQ09ERSBTT0ZUV0FSRSBXSUxMIE5PVCBDUkVBVEUgT1IgR0lWRSBHUk9VTkRTIEZPUiBBIExJQ0VOU0UgQlkKKyAqIElNUExJQ0FUSU9OLCBFU1RPUFBFTCwgT1IgT1RIRVJXSVNFIElOIEFOWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTCisgKiAoUEFURU5ULCBDT1BZUklHSFQsIFRSQURFIFNFQ1JFVCwgTUFTSyBXT1JLLCBPUiBPVEhFUiBQUk9QUklFVEFSWSBSSUdIVCkKKyAqIEVNQk9ESUVEIElOIEFOWSBPVEhFUiAzQ09NIEhBUkRXQVJFIE9SIFNPRlRXQVJFIEVJVEhFUiBTT0xFTFkgT1IgSU4KKyAqIENPTUJJTkFUSU9OIFdJVEggVEhFIDNjOTkwaW1nLmggTUlDUk9DT0RFIFNPRlRXQVJFCisgKi8KKworRm91bmQgaW4gaGV4IGZvcm0gaW4ga2VybmVsIHNvdXJjZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4wLjAuYmluLmloZXggYi9maXJtd2FyZS9jeGdiMy90M2Z3LTcuMC4wLmJpbi5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjYxMTc5Li4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4wLjAuYmluLmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSwxODgxICswLDAgQEAKLToxMDAwMDAwMDYwMDA3NDAwMjAwMzgwMDAyMDAzNzAwMDAwMDAxMDAwRDYKLToxMDAwMTAwMDAwMDAyMDAwRTEwMDAyODQwMDA3MDAwMEUxMDAwMjg4RTcKLToxMDAwMjAwMDAwMDEwMDAwRTAwMDAwMDBFMDAwMDBBMDAxMDAwMDAwNkUKLToxMDAwMzAwMDQ0NDQ0NDQwRTMwMDAxODMyMDAyMDAwMDIwMDFFMDAwMkEKLToxMDAwNDAwMDIwMDFGRjEwMUZGRkQwMDAxRkZGQzAwMEUzMDAwNDNDOTEKLToxMDAwNTAwMDAyMDAwMDAwMjAwMDY5NTQxRkZGQzU4MDIwMDA2OTlDMzkKLToxMDAwNjAwMDFGRkZDNTg0MjAwMDY5REMxRkZGQzU4ODIwMDA2QTUwN0YKLToxMDAwNzAwMDFGRkZDNThDMjAwMDAzQzBDMDAwMDBFNDMxMDBFQTMxM0UKLToxMDAwODAwMDAwQTEzMTAwQTAzMTAzMDIwMDAyRUQzMDZFMkEwNTAwMEMKLToxMDAwOTAwMEVEMzEwMDAyMDAwMjE2MDAxMkZGREJDMDMwMTRGRkRBNUYKLToxMDAwQTAwMEQzMEZEMzBGRDMwRjAzNDMxRjI0NEMxMDcyNDlGMEQzNDcKLToxMDAwQjAwMDBGRDMwRkQzMEYxMkZGRDUyMzBBMDAyNDBBMDBEMzBGNEEKLToxMDAwQzAwMEQzMEZEMzBGMDM0MzFGMjQ0QzEwNzI0OUYwRDMwRkQzMjcKLToxMDAwRDAwMDBGRDMwRjE0RkZDRTAzNDIxRjE0RkZDQjAzNDIxRjEyOTYKLToxMDAwRTAwMEZGQ0NDMDMwMkQzNzMwMkQzNzM0MkQzNzM4MkQzNzNDRUQKLToxMDAwRjAwMDIzM0QwMTcyMzNFRDAwMDIwMDEyRkZDNEMwMzAyRjM3RTAKLToxMDAxMDAwMDAwMkYzNzEwMkYzNzIwMkYzNzMwMjMzRDAxNzIzM0VENkEKLToxMDAxMTAwMDAwMDIwMDEyRkZCRUMwMzAyNzM3MDAyNzM3MTAyNzM3RjQKLToxMDAxMjAwMDIwMjczNzMwMjMzRDAxNzIzM0VEMDMwMjAwMTJGRkI5NUYKLToxMDAxMzAwMDEzRkZCQTBDMDIwMDkzMjAxMkZGQjkxM0ZGQjkwQzAyOEYKLToxMDAxNDAwMDAwOTMyMDEyRkZCOEMwMzE5MzIwODIyMDEyRkZCNzEzMTIKLToxMDAxNTAwMEZGQjc5MzIwMTJGRkI3MTVGRkIzMTZGRkI2QzAzMEQ3MTUKLToxMDAxNjAwMDIwMDU2NjAxNjAwMDFCMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMDAxNzAwMDA0MzYwNTAwMDIwMEQzMEZEMzBGNzUzMTE0MDc0NzE0NUUKLToxMDAxODAwMDA1MzMwQzA3MDQ0Mzc2MzFFNjA0MzYwNTc1MzlFRDAwNzYKLToxMDAxOTAwMDAyMDAxMkZGQTcxNUZGQTNDMDMwRDcyMDYwMDAwNjAwQTEKLToxMDAxQTAwMDA3NDcxNDA1MzMwQzA3MDQ0MzA0M0UwNTc1MzlGMDAzNzMKLToxMDAxQjAwMDAyMDAxMkZGQTFDMDMwMTRGRkExRDMwRkQzMEZEMzBGNDEKLToxMDAxQzAwMDkzNDBCNDQ0NzI0OUYyRDMwRkQzMEZEMzBGMTRGRjlCNjMKLToxMDAxRDAwMDgzNDAxNEZGOUI4MzQwMTJGRjlCMjMwQTAwMTRGRjlBNjUKLToxMDAxRTAwMEQzMEZEMzBGRDMwRjkzNDBCNDQ0NzI0OUYyRDMwRkQzM0MKLToxMDAxRjAwMDBGRDMwRjE0RkY5NTgzNDAxMkZGOTVDQTIwODMyMDg0RUMKLToxMDAyMDAwMDIxODUyMkJDMjI3NDNCMTA4NjUwQjQ1NTk2MzBCNDMzRkQKLToxMDAyMTAwMDc0MzNGNDYzRkZFNjAwMDAwMDY1M0ZFMDY1NUZERDEyQzQKLToxMDAyMjAwMEZGN0NDMDMwMjgzNzQwMjgzNzQ0MjgzNzQ4MjgzNzRDQ0YKLToxMDAyMzAwMDIzM0QwMTcyMzNFRDAzMDIwMDAwMDIwMDEyRkY3QUMwNzkKLToxMDAyNDAwMDMyMDMyRTA1MDMwMjAwMTJGRjc4MTNGRjgxOTMyMEMwQjIKLToxMDAyNTAwMDExMDE0OTMxMDA0ODMxMDEwMjAwQzAwMDE0RkY3RTA0NDEKLToxMDAyNjAwMEQyMzExNUZGN0Q5NDUwMTRGRjdEMDREMzMxMTVGRjdDRUUKLToxMDAyNzAwMDk0NTAxNEZGN0MwNEQ0MzExNUZGN0MyNDU2MDAxNEZGRTUKLToxMDAyODAwMDdCMDRENTMxMTVGRjdCMjQ1NjAwMTBGRjdBMDMwMDAwNTQKLToxMDAyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMDAyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMDAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMDAyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMDAyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMDAyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMDAyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMDAzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMDAzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMDAzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMDAzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMDAzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMDAzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMDAzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMDAzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMDAzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMDAzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMDAzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMDAzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMDAzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMDAzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMDAzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMDA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMDA0MjAwMDYzRkZGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMDA0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGRkMwMDAwQTEKLToxMDA0NDAwMDFGRkMwMDAwRTMwMDA1QzgxRkZDMDAwMDFGRkMwMDAwQUIKLToxMDA0NTAwMEUzMDAwNUM4MUZGQzAwMDAxRkZDMDAwMEUzMDAwNUM4MDYKLToxMDA0NjAwMDFGRkZDMDAwMUZGRkMwMDBFMzAwMDVDODFGRkZDMDAwNDIKLToxMDA0NzAwMDFGRkZDMDE4RTMwMDA1QzgxRkZGQzAxODFGRkZDMDE4RUEKLToxMDA0ODAwMEUzMDAwNUUwMUZGRkMwMTgxRkZGQzI4OEUzMDAwNUUwN0UKLToxMDA0OTAwMDFGRkZDMjg4MUZGRkMyODhFMzAwMDg1MDFGRkZDMjkwRTEKLToxMDA0QTAwMDFGRkZDNTdDRTMwMDA4NTAyMDAwMDAwMDIwMDAwMTZBMDcKLToxMDA0QjAwMEUzMDAwQjNDMjAwMDAxODAyMDAwMDE4MEUzMDAwQ0E4MzkKLToxMDA0QzAwMDIwMDAwMjAwMjAwMDAyMDNFMzAwMENBODIwMDAwMjFDMTAKLToxMDA0RDAwMDIwMDAwMjIwRTMwMDBDQUMyMDAwMDIyMDIwMDAwMjI2QjUKLToxMDA0RTAwMEUzMDAwQ0IwMjAwMDAyM0MyMDAwMDI0MEUzMDAwQ0I4MDYKLToxMDA0RjAwMDIwMDAwMjQwMjAwMDAyNDlFMzAwMENCQzIwMDAwMjRDMTYKLToxMDA1MDAwMDIwMDAwMjUwRTMwMDBDQzgyMDAwMDI1MDIwMDAwMjU5RDUKLToxMDA1MTAwMEUzMDAwQ0NDMjAwMDAyNUMyMDAwMDI2MEUzMDAwQ0Q4NTkKLToxMDA1MjAwMDIwMDAwMjYwMjAwMDAyNjlFMzAwMENEQzIwMDAwMjZDNjUKLToxMDA1MzAwMDIwMDAwMjcwRTMwMDBDRTgyMDAwMDI3MDIwMDAwMjc5MjUKLToxMDA1NDAwMEUzMDAwQ0VDMjAwMDAyOEMyMDAwMDI4Q0UzMDAwQ0Y4OEQKLToxMDA1NTAwMDIwMDAwMjkwMjAwMDAyOTNFMzAwMENGODIwMDAwMkFDN0YKLToxMDA1NjAwMDIwMDAwMkIwRTMwMDBDRkMyMDAwMDJEMDIwMDAwMkYyQzgKLToxMDA1NzAwMEUzMDAwRDAwMjAwMDAzQjAyMDAwMDNCMEUzMDAwRDI0RDEKLToxMDA1ODAwMDIwMDAwM0IwMjAwMDAzQjBFMzAwMEQyNDIwMDAwM0IwREUKLToxMDA1OTAwMDIwMDAwM0IwRTMwMDBEMjQyMDAwMDNCMDIwMDAwM0IwQ0UKLToxMDA1QTAwMEUzMDAwRDI0MjAwMDAzQjAyMDAwNkI3NEUzMDAwRDI0NTEKLToxMDA1QjAwMDIwMDA2Qjc0MjAwMDZCNzRFMzAwNzRFODAwMDAwMDAwRkUKLToxMDA1QzAwMDAwMDAwMDAwMDAwMDAwMDAxRkZDMDAwMDFGRkMwMDAwRjUKLToxMDA1RDAwMDFGRkZDNTgwMUZGRkM2NzAyMDAwNkI3ODIwMDA2Qjc4NUUKLToxMDA1RTAwMERFRkZGRTAwMDAwMDA4MENERUFEQkVFRjFGRkZDMjkwNzQKLToxMDA1RjAwMDFGRkNGRTAwMUZGRkMwODQxRkZGQzVDMDMwMDAwMDAwQUQKLToxMDA2MDAwMDAwM0ZGRkZGODA0MDAwMDAxMDAwMDAwMDA4MEZGRkZGQzgKLToxMDA2MTAwMDFGRkZDMjVEMDAwRkZGRkY4MDRGRkZGRjgwMDAwMDAwNDMKLToxMDA2MjAwMDAwMDAwODgwQjAwMDAwMDU2MDUwMDAwMDYwMDAwMDAwN0QKLToxMDA2MzAwMDQwMDAwMDExMzUwMDAwMDA0MTAwMDAwMDEwMDAwMDAxRTIKLToxMDA2NDAwMDIwMDAwMDAwMDAwMDEwMDA3RkZGRkZGRjQwMDAwMDAwQkUKLToxMDA2NTAwMDA1MDAwMDAwODAwMDAwMTkwNDAwMDAwMDAwMDAwODAwRjAKLToxMDA2NjAwMDEwMDAwMDA1ODA2MDAwMDA3MDAwMDAwMDIwMDAwMDA5RkMKLToxMDA2NzAwMDAwMUZGODAwODAwMDAwMUVBMDAwMDAwMEY4MDAwMDAwMkQKLToxMDA2ODAwMDA4MDAwMDAwMDdGRkZGRkYxODAwMDAwMDAxMDA4MDAxQzQKLToxMDA2OTAwMDQyMDAwMDAwMUZGRkMyMEQxRkZGQzBDQzAwMDEwMDgwMDAKLToxMDA2QTAwMDYwNDAwMDAwMUEwMDAwMDAwQzAwMDAwMDAwMDAzMDAwNTQKLToxMDA2QjAwMDYwMDAwODAwODAwMDAwMUMwMDAxMDAwMDgwMDAwMDFBOUIKLToxMDA2QzAwMDgwMDAwMDE4RkMwMDAwMDA4MDAwMDAwMTAwMDA0MDAwRDUKLToxMDA2RDAwMDgwMDAwNDAwMDMwMDAwMDA1MDAwMDAwM0ZGRkZCRkZGODQKLToxMDA2RTAwMDAwMDAwRkZGMUZGRkMzOTBGRkZGRjAwMDAwMDAxNkQwQjcKLToxMDA2RjAwMDAwMDBGRkY3QTUwMDAwMDAxRkZGQzRBMDFGRkZDNDUxQUEKLToxMDA3MDAwMDAwMDEwMDA4MDAwMDBCMjAyMDJGRkY4MDFGRkZDNDQ1QzAKLToxMDA3MTAwMDAwMDAyQzAwRkZGRUZGRjgwMEZGRkZGRjFGRkZDNTY4NzEKLToxMDA3MjAwMDAwMDAyMDAwRkZGRkRGRkYwMDAwRkZFRjAxMDAxMTAwQ0QKLToxMDA3MzAwMDFGRkZDNDYxMUZGRkMzQzIxRkZGQzQxMDFGRkZDNTkwNkUKLToxMDA3NDAwMEZGRkZFRkZGMDAwMEZGRkIxRkZGQkU5MEZGRkZGN0ZGNjMKLToxMDA3NTAwMDFGRkZDMDU0MDAwMEZGRkQwMDAxRkJEMDFGRkZDNUIwMEMKLToxMDA3NjAwMDFGRkZDNjYwMUZGRkM1OTFFMEZGRkUwMDAwMDA4MDAwNzQKLToxMDA3NzAwMDFGRkZDNTJDMUZGRkM1QjQxRkZGQzA1ODFGRkZDNEQwRUIKLToxMDA3ODAwMDFGRkNGRkQ4MDAwMTAwODFFMTAwMDYwMDAwMDAyNzEwRDcKLToxMDA3OTAwMDFGRkNGRTMwMUZGQ0ZFNzBFMTAwMDIwMDFGRkZDNTI4OTkKLToxMDA3QTAwMDFGRkZDNTQwMDAwM0QwOTAxRkZGQzU1NDJCNTA2MzgwMkUKLToxMDA3QjAwMDJCNTA3OTgwMkI1MDkwODAyQjUwQTY4MDFGRkZDNDU5NUUKLToxMDA3QzAwMDAxMDAxMTBGMjAyRkZFMDAyMDMwMDA4MDIwMkZGRjAwOUQKLToxMDA3RDAwMDAwMDBGRkZGMDAwMUZGRjgyQjUwQjIwMDJCNTBCMjA4QzEKLToxMDA3RTAwMDAwMDEwMDEwMkI1MEIxODAyQjUwQjI4MDJCNTBCQTAwNkEKLToxMDA3RjAwMDAwMDEwMDExMkI1MEJEMjgyQjUwQkM4MDJCNTBCREEwRjgKLToxMDA4MDAwMDIwMzAwMDAwREZGRkZFMDA1MDAwMDAwMjAwQzAwMDAwQUEKLToxMDA4MTAwMDAyMDAwMDAwRkZGRkY3RjQxRkZGQzA1QzAwMEZGODAwQUMKLToxMDA4MjAwMDA0NDAwMDAwMDAxMDAwMDAwQzQwMDAwMDFDNDAwMDAwQ0MKLToxMDA4MzAwMEUwMDAwMEEwMUZGRkM1MzAxRkZEMDAwODFGRkZDNTQ0REEKLToxMDA4NDAwMDFGRkZDNTU4MUZGRkM1NkNFMTAwMDY5MEUxMDAwNkVDRDQKLToxMDA4NTAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMDA4NjAwMDIwMTAwMDQwMjAxMDAwNDAyMDEwMDA0MDIwMTQwMDgwODQKLToxMDA4NzAwMDIwMEMwMDAwMjAwQzAwMDAyMDBDMDAwMDIwMTAwMDQwODQKLToxMDA4ODAwMDIwMTQwMDgwMjAxNDAwODAyMDE0MDA4MDIwMTgwMEMwNTQKLToxMDA4OTAwMDIwMUMwMTAwMjAxQzAxMDAyMDFDMDEwMDIwMjAwMTQwMjAKLToxMDA4QTAwMDIwMTgwMEMwMjAxODAwQzAyMDE4MDBDMDIwMUMwMTAwMjMKLToxMDA4QjAwMDIwMTgwMEMwMjAxODAwQzAyMDE4MDBDMDIwMUMwMTAwMTMKLToxMDA4QzAwMDIwMjAwMTQwMjAyMDAxNDAyMDIwMDE0MDIwMjAwOTQwMUMKLToxMDA4RDAwMDIwMjAwOTQwMjAyMDA5NDAyMDIwMDk0MDIwMjQwOTgwQjAKLToxMDA4RTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMTQKLToxMDA4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMDA5MDAwMDIwMDA1MjU0MjAwMDUxMjQyMDAwNTI1NDIwMDA1MjU0MDAKLToxMDA5MTAwMDIwMDA1MDYwMjAwMDUwNjAyMDAwNTA2MDIwMDA0RTk0NjUKLToxMDA5MjAwMDIwMDA0RTk0MjAwMDRFOEMyMDAwNERGQzIwMDA0Q0EwNTYKLToxMDA5MzAwMDIwMDA0QTg4MjAwMDQ4ODgwMDAwMDAwMDAwMDAwMDAwRDUKLToxMDA5NDAwMDIwMDA1MjI0MjAwMDUwRjAyMDAwNTE5NDIwMDA1MTk0QTcKLToxMDA5NTAwMDIwMDA0RjM4MjAwMDRGMzgyMDAwNEYzODIwMDA0RjM4RkIKLToxMDA5NjAwMDIwMDA0RjM4MjAwMDRFODQyMDAwNEYzODIwMDA0QkM0MTgKLToxMDA5NzAwMDIwMDA0QTNDMjAwMDQ4MzgwMDAwMDAwMDAwMDAwMDAwMzEKLToxMDA5ODAwMDIwMDAwQjcwMjAwMDM4NEMyMDAwMDRDMDIwMDA0NDJDQjQKLToxMDA5OTAwMDIwMDAwQjY4MjAwMDNGNDAyMDAwMDNGMDIwMDA0M0VDQzMKLToxMDA5QTAwMDIwMDA0ODE0MjAwMDNDNTAyMDAwM0I2QzIwMDAzN0M4MzkKLToxMDA5QjAwMDIwMDAzNjU0MjAwMDMzQ0MyMDAwMkVGODIwMDAzOUNDMDMKLToxMDA5QzAwMDIwMDAyQjVDMjAwMDI3OTQyMDAwNjQ4QzIwMDAyMzIwMzIKLToxMDA5RDAwMDIwMDAyMDA0MjAwMDFGQjgyMDAwMUNBNDIwMDAxN0IwMTUKLToxMDA5RTAwMDIwMDAxNEYwMjAwMDBEOEMyMDAwMEJCNDIwMDAxMEJDNUYKLToxMDA5RjAwMDIwMDAxMkEwMjAwMDQxMzAyMDAwM0MwNDIwMDAwQjc4OTEKLToxMDBBMDAwMDIwMDAwNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMDBBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMDBBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMDBBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMDBBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMDBBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMDBBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMDBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMDBBODAwMDAwMDAwMDAwMzI2NDAwMDAwMDAwMDAwMDMyNjQwMDAwM0EKLToxMDBBOTAwMDY0MDA2NDAwNjQwMDY0MDA2NDAwNjQwMDY0MDA2NDAwMzYKLToxMDBBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMDBBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMDBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMDBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMDBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwRjYKLToxMDBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMDBCMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMDBCMTAwMDAwMDAwMDAwMDA0MzIzODAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMDBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMDBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUM5NDAxQzQKLToxMDBCNDAwMDVEOTQwMjVFOTQwMzVGOTQwMDQzMDAwMDAwMDAwMDAwODcKLToxMDBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMDBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMDBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUM5MDAxODgKLToxMDBCODAwMDVEOTAwMjVFOTAwMzVGOTAwMDUzMDAwMDAwMDAwMDAwNDMKLToxMDBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMDBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMDBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUM5NDAwMDUKLToxMDBCQzAwMDFEOTAwMTlEOTQwMjlFOTQwMzlGOTQwNDA4OTQwNTA5MkUKLToxMDBCRDAwMDk0MDYwQTk0MDcwQjk0MDA0MzAwMDAwMDAwMDAwMDAwRjQKLToxMDBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMDBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUM5MDAxQzgKLToxMDBDMDAwMDlEOTAwMjlFOTAwNzFEOTAwMzlGOTAwNDc4OTAwNTc5MTcKLToxMDBDMTAwMDkwMDY3QTkwMDc3QjkwMDA1MzAwMDAwMDAwMDAwMDAwQ0YKLToxMDBDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMDBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREM5NDAwNDQKLToxMDBDNDAwMDFEOTAwMUREOTQwMkRFOTQwM0RGOTQwNDA0OTQwNTA1RjUKLToxMDBDNTAwMDk0MDYwNjk0MDcwNzk0MDgwODk0MDkwOTk0MEEwQTk0Q0MKLToxMDBDNjAwMDBCMEI5NDAwNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMDBDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREM5MDAxMDcKLToxMDBDODAwMEREOTAwMkRFOTAwQjFEOTAwM0RGOTAwNEI0OTAwNUI1NUIKLToxMDBDOTAwMDkwMDZCNjkwMDdCNzkwMDhCODkwMDlCOTkwMEFCQTkwMzQKLToxMDBDQTAwMDBCQkI5MDAwNTMwMDAwMDA2M0ZGRkMwMDIwMDA2OTMwODQKLToxMDBDQjAwMDEwRkZGRjBBMDAwMDAwMDAyMDAwNjk1NDAwRDIzMTEwMkMKLToxMDBDQzAwMEZGRkUwQTAwMDAwMDAwMDAyMDAwNjk5QzAwRDMzMTEwRTQKLToxMDBDRDAwMEZGRkUwQTAwMDAwMDAwMDAyMDAwNjlEQzAwRDQzMTEwOTMKLToxMDBDRTAwMEZGRkUwQTAwMDAwMDAwMDAyMDAwNkE1MDAwRDUzMTEwMEQKLToxMDBDRjAwMEZGRkUwQTAwMDAwMDAwMDA2M0ZGRkMwMEUwMDAwMEEwMEYKLToxMDBEMDAwMDEyRkZGNzgyMjAwMjgyNTdDODIxNjNGRkZDMTJGRkYzMTMKLToxMDBEMTAwMDAzRTgzMDA0RUUzMDA1QzAzMDkzMjA5NDIxOTUyMjYzMUYKLToxMDBEMjAwMEZGRkMwMDAwMUZGRkQwMDAwMDA0MDAyMDFGRkZDNTgwNTMKLToxMDBEMzAwMDFGRkZDNjcwMjAwQTAwMTFGRkZCMTNGRkZCMDNFNjMxMDMKLToxMDBENDAwMDAxMDIwMDE2RkZGQTE3RkZGQUQzMEY3NzZCMDY5MDYwQzcKLToxMDBENTAwMEI0NjY3NzYzRjg1NDE1MjY1NDE5RDkwRjE0MDA2M0ZGNEQKLToxMDBENjAwMEY5MDAwMDAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNkMwMDgKLToxMDBENzAwMEM3MUFFRjA2MEQ0OTExRDgzMEQ3MjAxQkVGMDVCQzIyNEEKLToxMDBEODAwMDg1NzJBQjc2ODM3MTA1NDUwQjk1NzIwOTMzMEMyMzc2MUEKLToxMDBEOTAwMDAxNzIzQjA1MjMzRDA4MjM3NjAxQTM5RDE5RUVGRTdEREMKLToxMDBEQTAwMDYzMjZDMDIxQzBFMDAzMkUzODBFMEU0MkM4RUUyOUE2RUQKLToxMDBEQjAwMDdFNkQ0QTA1MDA4MDg4MDAzMDhDODI3MUQxMEZDMEYwQjIKLToxMDBEQzAwMDA4MkYzODdGQzBFQTYzRkZFNDkyMTAwMzdGMENBQkZGNkIKLToxMDBERDAwMDBGM0QxMkRCODAyRURDMTAwRTRFMzZDMDIxQzA1MDAzQkEKLToxMDBERTAwMDI1MzgyMjEyMDAwNTA1NDJDQjUwMjlBNjdFNkRFQTA1NjIKLToxMDBERjAwMDAwQjA4ODAwMzA4Q0JDNzZDMDUwQThGM0MwODEwNjg1NTYKLToxMDBFMDAwMDM4MDUwNTQyQ0E1MTI5QTY3RTBENDgwQ0QzMEY2RDhBQkMKLToxMDBFMTAwMDA1MDAzMDg4MDAyMDhDODI3MUQxMEYwMEMwNjFDMDUwNjUKLToxMDBFMjAwMDA4NjUzODc1QzBDNjYzRkZDMEMwQjAwMzhCMzg3QkMwOEYKLToxMDBFMzAwMEQ3NjNGRkQxNkMxMDEyMTZFRUQ4MkEyMjFFMkUyMjFENjcKLToxMDBFNDAwMEMwRDA3QUUxMUIyQ0EwMDBEN0EwMjhDQ0U5NjQ4MTQ4NEYKLToxMDBFNTAwMDI5Q0NFODY0OTM0MUMxQjk3QkMxMjU2OUNDMUI2MDAwRjIKLToxMDBFNjAwMDIyMkNEMDAwRDdEMDI4Q0NFOTY0ODE1NDI5Q0NFODY0NjYKLToxMDBFNzAwMDkzQkFDMUI5N0JDMTA5NjhDQzA5QzAyMEQxMEYwMDAwNjkKLToxMDBFODAwMDAwMkQyNTAyOEMzMkMwOTAwQzZGNTA2NUY1ODYyOTI0MDgKLToxMDBFOTAwMDY3MDkwODQ3NjU4NTgyQjQ0OTI3MjAwQzE4RUVDMDBDMDUKLToxMDBFQTAwMDdGMTFBOEZGMjhGMjg2REI3MDc4OTMwMjYwMDU1NDE5NDEKLToxMDBFQjAwMEVFQkMwOTc5MEEyOTkyQTM2ODkwMDgyODIyMDAwOTg4QzMKLToxMDBFQzAwMDBDNjU4NTNGMjlGMjg1NjQ5NTM5MjkxNjFBNjU1NTYzQTUKLToxMDBFRDAwMDdBRTEwNERCQTA2MDAwMDFDMEIwMjIxNjFCOERCNDEyQzEKLToxMDBFRTAwMEVFQjEwRDg4MTQ4MjI0MEQwRDQ3QTgyMjE4RUVBRjA5MkIKLToxMDBFRjAwMEREMTAwODIyMDI5MjkwMThFRUFEMTJFRUFFMDhDODAxODUKLToxMDBGMDAwMDBEODgwMjAyNDIwMjFERUVBQTkyOTEwRDg4MDI5ODkyNkIKLToxMDBGMTAwMDIyQjAyMzJEQjAyMjA0MjgxMDA2REQxMDAyNDIxMjA4NTAKLToxMDBGMjAwMEREMDIyOEIwMjEwNzIyMTAwQzg4MTAwMjg4MDIwRDg4RUIKLToxMDBGMzAwMDAyMTJFRUExOEQzMzAyREQwMTgyMzQwRDg4MDI5ODkzRjYKLToxMDBGNDAwMDkyQjk5Mjk0OERCNTgyMzk5RDk1ODhCNjhEMzg5ODk2RDAKLToxMDBGNTAwMDg4Qjc5Mjk5OUQ5ODk4OTdDMEQwMjhGMjg1MTJFRTk3RkQKLToxMDBGNjAwMDA4NDgwQkEyNzIyRDI0Q0YyOEY2ODUyMjEyMUI2NTU0NDcKLToxMDBGNzAwMERFN0FFMTA0REJBMDYwMDAwMUMwQjA2NEJFRkIyQ0IwRUYKLToxMDBGODAwMDA3MjhCMDAwREEyMDA2ODgwQTI4ODI0Q0MwRDEwQjgwREUKLToxMDBGOTAwMDAwREJBMDY1QUZFNzYzRkVFMDJFQTAwMzJCMjA2N0Q5M0UKLToxMDBGQTAwMEUwRDRFMDY1QjFBQjhCMzIwQkZDNTA2NEM0QjIxOEVFRjgKLToxMDBGQjAwMDg0OEYyQTA4QjgwMTA4RkYwQzY0RjJDREMwOTI2MDAxNEEKLToxMDBGQzAwMDhBMkFEMDAzMjkyMDY3RDRBMDY1OTRDOThCMzIwQkZDRjAKLToxMDBGRDAwMDUwNjRDNDhDMUZFRTdCOEUyQTBGQkYwMTdGRTlEQzhDMkUKLToxMDBGRTAwMDMzMENFODUwNjQ4NEI0QzBCMDBDQTUxMThGNTkyQjE2OTMKLToxMDBGRjAwMDEyOEE1NzhFNTgyQTE2MTFEQkUwQUFGQTdGQUIwMUIxOEMKLToxMDEwMDAwMEVCNzVDRTU5OUUxRjg5Mzc5NTFDQUY5ODk4MUQ3OThCMkIKLToxMDEwMTAwMDA4MjUxNjBDMjlFQzAxMjkxNjBGOUExNjhBMUQ4NTFGMjIKLToxMDEwMjAwMDJBMTYxOTJBMEEwMDdCRTMwQTdCRTkwNTJCMTIwNjdGQTAKLToxMDEwMzAwMEJCMDFDMEExNjVBNDY5OEIzNUMwQTBDMDgwNzhFMzA0NjIKLToxMDEwNDAwMDY0RTNCNUMwQTE2NUE0NTg4OTFDMjkxNjE3MEM0QTU0M0QKLToxMDEwNTAwMDJBMTYxNkJDQUEyQTE2MTg2MDAwQUYwMDAwMDA4ODM3QUUKLToxMDEwNjAwMDg5MzYyODE2MTQyOTE2MTUwOEY4MEMwOUU5MEMyOTE2RDIKLToxMDEwNzAwMDEzOTgxRTc4RkIwNzI4MTIxM0IwODgyODE2MTM4OTFFQjAKLToxMDEwODAwMDlBMTg5RjE3MkExMjEzQzBGMDI5MTYxOTdCRTMwQzdCQkMKLToxMDEwOTAwMEU5MDc4RTE3MkIxMjA4N0VCQjAxQzBGMTY1RjQwNkMwNkMKLToxMDEwQTAwMEIwMkYxMjE5ODgzNTJFMTIxMjk4MTkyODEyMTFBQUVFOTMKLToxMDEwQjAwMEFGOEY3OEZCMDIyRUVDMDE5RjEzOEYxOTlGMTJDMEYwQTcKLToxMDEwQzAwMDdCRTMwQzdFQjkwNzg5MTMyODEyMDI3OThCMDFDMEYxRUEKLToxMDEwRDAwMDY1RjNEMjI1MTYxNzI5MTIxNTBDNEY1NEMwRTEyRjE2QUYKLToxMDEwRTAwMDE2QkNGRjJGMTYxODAwRjEwNDAwRUUxQTJGMTIxNEIwRDAKLToxMDEwRjAwMEVFMEVGODEzMDk4ODAxMEZFRTAxMkYxMjE5QThBQUFFRkYKLToxMDExMDAwMEZFN0ZFQjAxQjFBQUQ1QTAyRTE2MTkyQjEyMTlEQTUwQzkKLToxMDExMTAwMDJDMTIxODU4MThEM0MwRDBDMDkwMkUxMjE5MDc0ODBBQTQKLToxMDExMjAwMDJDMTIxOERBQjA4RjM0QzBCMUFBRkYwMEMxMDQyQTEyMDEKLToxMDExMzAwMDE2MkY4NjE2MkMxMjE3MDBCQjFBQjBCQjBFQkUwMTlFQ0UKLToxMDExNDAwMEM5MEJGQjEzMDVCQjAxOUJDODJBNzQxMDI5MjQ2NzI5MEUKLToxMDExNTAwMDcwMDM4RTc1QjE5RjJGNzQwM0IwRUUwRTRFMEM2NUVEQ0IKLToxMDExNjAwMDE4MjgyMDY3MkQyNTAyNjU4MzEzMkEyMjFFMjkyMjFEOTcKLToxMDExNzAwMDdBOTEwNERCQTA2MDAwMDFDMEIwNjRCQ0ZDMkNCMDA3MTUKLToxMDExODAwMDI4QjAwMERBMjAwNjg4MEEyODgyNENDMEQxMEI4MDAwRTMKLToxMDExOTAwMERCQTA2NUFGRTc2M0ZDRTE4OUFBQjE5OTY1OTA5NDg5MEEKLToxMDExQTAwMDM0MUJFRTA4OTlBQTg4MzMxRkVFMDIwODQ4NTQyOEE0N0QKLToxMDExQjAwMDJDOEUyQThDMzIwRkVFMDIwQkNCMDE3RUI5NjQwQzRCQzUKLToxMDExQzAwMDUxNkZCMjVFOEIzMzc1QjY1OTJDQTAxMzBCRUU1MTBFRDYKLToxMDExRDAwMENFMDEwRTBFNDEwQzBDNDE3RUM5NDcyRkEwMTJCMEZGNkMKLToxMDExRTAwMDY1RjJERDhFMzc4Q0E4OEIzNjhGQTk3Q0IzMDc3QkM5NUYKLToxMDExRjAwMDAyN0VGQjAxQzBEMUNFRDk4ODM1RERCMDBFOEUwODc4RDUKLToxMDEyMDAwMEVCMDFCMUJEODlBN0RBQzAwRjlCMDg3OUJCMDIyQUNDREMKLToxMDEyMTAwMDAxRENCMEMwQjA3REEzMDc3QUQ5MDI3Q0VCMDFDMEIxN0MKLToxMDEyMjAwMDY0QjE2M0MwOTEyOTI0NjdDMDIwRDEwRjAwOEJEQUIxNkIKLToxMDEyMzAwMEJCNjRCMEMwMkMyMDY3MkQyNTAyNjVDMjI4MURFRERDRTMKLToxMDEyNDAwMDhDMzIxRkVERTEwRENEMDEwRkREMEM2NUQxQzEwQzRGQ0UKLToxMDEyNTAwMDUxNkZGMjAyNjAwMUI4QzA5MDI5MjQ2NzA5MDg0NzY1MDAKLToxMDEyNjAwMDgyMEY3QUUxMDREQkEwNjAwMDAxQzBCMDY0QkMwQTJDRUMKLToxMDEyNzAwMEIwMDcyOEIwMDBEQTIwMDY4ODBBMjg4MjRDQzBEMTBCQkIKLToxMDEyODAwMDgwMDBEQkEwNjVBRkU3NjNGQkVGOEMzMzBDRTk1MDY0QjMKLToxMDEyOTAwMDkyMDkwQ0VGMTFBRkFGMkYxNjE3OEVGODg1RjdEQkUwMzAKLToxMDEyQTAwMDhGRjkyNTE2MTBBNUY1N0Y1QjAyMkJFQzAxMENBODUwRDkKLToxMDEyQjAwMDY1ODBERDg4MzdEQUUwQUY4OTI5MTYwQTc4OUIwMjJBMzMKLToxMDEyQzAwMEVDMDE5NTE0ODkxQUQ1QTAyOTE2MTkyQTBBMDA3QkUzODYKLToxMDEyRDAwMDBBN0JFOTA1MkIxMjA0N0ZCQjAxQzBBMTY1QTFDMThCNkMKLToxMDEyRTAwMDM1QzBBMEMwODA3OEUzMDQ2NEUxMDRDMEExNjRBRDVDQjMKLToxMDEyRjAwMDYwMDFBRDAwMDA4RTM0MTlFREIzOUVEQThDMzMxQkVEMjYKLToxMDEzMDAwMEFDMEM0QzU0MkNENDJDOEEyQThDMzIwQkFBMDIwOUM5NUUKLToxMDEzMTAwMDAxMEE5OTBDNjU5RjBCMEM0RjUxNkVGMjAyNjNGRjAyOUMKLToxMDEzMjAwMDhCMzMwQkE4NTA2NDhFRkEyOUQwMTMwQkVBNTEwQTlBMUEKLToxMDEzMzAwMDAxMEEwQTQxMDkwOTQxMEE5OTBDNjU5RUU1MkJEMDEyNjAKLToxMDEzNDAwMEIwQkI2NUIxODhDMEEwOEUzNzhDRDgyQjMyMDYyRkQyQTcKLToxMDEzNTAwMDA5N0NCMzA3N0JDOTAyN0VGQjAxQzBBMTY1QUVDMzg4Q0YKLToxMDEzNjAwMDM1RDNCMEFFOEU3OEVCMDFCMUIzODlEN0RBQzBBRjlCN0QKLToxMDEzNzAwMDc5QkIwMUIxQ0FEQ0IwQzBCMDczQTMwNzdBMzkwMjdDNzMKLToxMDEzODAwMEVCMDFDMEIxNjVCRTlCQzA5MDI5MjQ2N0MwMjBEMTBGN0UKLToxMDEzOTAwMDAwOEEzNjg4MzcyQTE2MTUyODE2MTQwQUVBMEMwOEY4MjcKLToxMDEzQTAwMDBDOTgxQjc4RkIwMUIwQUE5RjE1OEYxQjJGMTYxOTJGQzUKLToxMDEzQjAwMDBBMDA3QkUzMEE3QkU5MDUyODEyMDU3ODVCMDFDMEYxOEUKLToxMDEzQzAwMDY1RjBFMkFBREU4QjM1MkYxMjE5MjkxMjEwQzA1MEFGM0EKLToxMDEzRDAwMDlGNzlGQjAxQjFFRTlGMTFDMEYwNzVFMzBBN0U1OTA1QkMKLToxMDEzRTAwMDI4MTIwMTc4QkIwMUMwRjE2NEZDRUE2MDAwQjcwMDAwN0MKLToxMDEzRjAwMDdGQjMwMjYzRkVGNjYzRkVGMTdGQjMwMjYzRkM0NTYzRDUKLToxMDE0MDAwMEZDNDAwMDAwNjQ1MEE0REEyMDU4MTVDOEMwMjBEMTBGNTkKLToxMDE0MTAwMEMwOTE2M0ZFNDNDMDkxNjNGQTczREEyMERCNzBDMEQxRTAKLToxMDE0MjAwMDJFMEE4MEMwOUEyOTI0NjgyQzcwMDc1ODE0QjhEMkEwQkMKLToxMDE0MzAwMEQxMEYwMDAwMTlFRDY2MDM0ODBCOTgxMDA4OEIwMjA5QzQKLToxMDE0NDAwMDI5MDg3OTgzMDIyQjhERjgyOTEyMUE2M0ZBOEIwMDAwODAKLToxMDE0NTAwMDJBMkM3NERCNDA1ODBFNDQyRTIyMUQyQTIyMUU2M0ZCQzgKLToxMDE0NjAwMDBGQzA5MTYzRkNFNTAyMkEwMjU4MDI0QzBBQTIwMjA2NTAKLToxMDE0NzAwMDAwMDAwMjJBMDI1ODAyNDkwQUEyMDIwNjAwMDBEQjcwOUMKLToxMDE0ODAwMERBMjBDMEQxMkUwQTgwQzBDRTJDMjQ2ODJDNzAwNzU4RDgKLToxMDE0OTAwMDE0OUZDMDIwRDEwRkQ5QTA2M0ZDQjYwMEMwOTQ2M0ZDOTgKLToxMDE0QTAwMEFBQzA5NjYzRkNBNUMwOTY2M0ZDQTAwMDJBMkM3NERCM0UKLToxMDE0QjAwMDMwREM0MDVCRkUyRUMyRDAyREE0MDAyQjIwMEM2M0ZGM0QKLToxMDE0QzAwMDQ1OEYzNThFQTc3RkVCMDI2M0ZFQkI2M0ZENTQ4OTM1RTQKLToxMDE0RDAwMDg4RDc3OThCMDI2M0ZFQUU2M0ZENDcwMDZDMTAwNEMwQjEKLToxMDE0RTAwMDIwRDEwRjAwNkMxMDA0QzAyMEQxMEYwMDZDMTAwNDJCMTEKLToxMDE0RjAwMDIyMUUyODIyMURDMEEwQzA5NDI5MjQwNjJBMjUwMjdCNzIKLToxMDE1MDAwMDg5MDFEQkEwQzlCOTEzRUQyNERBMjAyOEIwMDAyQ0IwODIKLToxMDE1MTAwMDA3MDM4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGOEUKLToxMDE1MjAwMEU3QzAyMEQxMEYwMDAwMDA2QzEwMDYwMjI2MDIyOTIwMUYKLToxMDE1MzAwMDA2QzBFMDY4OTgwNTI4OUNGOTY1ODEyMDJBNjEwMjE3OTkKLToxMDE1NDAwMEVEMTcwQTBBNEM2NUEwRjAyQjcyOUUxQUVEMTM2RkI4QzYKLToxMDE1NTAwMDAyNjAwMEY0MkFBMjI2NjhBMDA5OEI2MEQzMEYwQUJCQTAKLToxMDE1NjAwMDBDNjVCMEU0MkE3MjlENjRBMERFMkI2MDBDMENCQzExRUIKLToxMDE1NzAwMDA3Q0MwODJEQzI4NjZGRDkwMjYwMDBENzFERUQwOTBEN0EKLToxMDE1ODAwMEJEMEEyREQyQTM2OEQwMDc4RjYwMERGRjBDNjVGMEMzOTQKLToxMDE1OTAwMDIyQzI4NUMwRjA2NDIwQkIxREVEMEU2ODQzNEQxOEVEREUKLToxMDE1QTAwMDBEOEM2QjA4Q0MwMjlDMjA4QTYwMDhBQTExMERBQTAyM0YKLToxMDE1QjAwMDlBMjE4OTZBOTkyNDg4MzI5ODI1MkM2MTA0MDhDQzExRDMKLToxMDE1QzAwMDlDMjcxQ0VDRkUwQ0JBMTFBN0FBMjlBMjg1QUNCQzJGNDMKLToxMDE1RDAwMEM0Q0YyOTlDMjgyOUE2ODVDODVBMkE2Qzc0REI0MDU4OTgKLToxMDE1RTAwMDBERTJEMkEwRDEwRkQyRTBEMTBGMDAwMDI4OUNGOTY0MDcKLToxMDE1RjAwMDgwOTEyQzYwNjY4OTMxQjFDQzBDMEM0NzJDNjQ2NjZGRUQKLToxMDE2MDAwMEM2Njk3MDlFNjYxQUVDRjQ4QzMwODk2QjBDOEM0MDBCQUEKLToxMDE2MTAwMENDMTAwQzk5MDIwQTk5MDI5OTIwODg2MDA4ODgxMTBENTMKLToxMDE2MjAwMDg4MDI5ODIxOEMzMzlDMjM4QTMyOUEyMjg5NkE5OTI0RDEKLToxMDE2MzAwMDg4MzQ5ODI1NjNGRjgyMDAwMENDNTdEQTYwREIzMERDMDkKLToxMDE2NDAwMDQwNTgxNEE3QzAyMEQxMEYwMERBNjBDMEI2NTgxNTM3MzMKLToxMDE2NTAwMDYzRkZFNTAwREE2MDU4MTUzNTYzRkZEQzAwREEyMERCNTQKLToxMDE2NjAwMDMwREM0MERENTA1ODE1QjdEMkEwRDEwRjlFMTAyQjYxNTEKLToxMDE2NzAwMDA0NTgxM0M4MURFQ0Q3OEUxMDJCNjAwQ0MwRjAyRjY0REIKLToxMDE2ODAwMDY2NjNGRjgwMjk2MTIzQzA4ODc5ODMwMjYzRkY3NTJFMUEKLToxMDE2OTAwMDE2MDAyQzYwNjYyQjYxMDQyQ0NDMDEwQzBDNDcyQzY0Q0EKLToxMDE2QTAwMDY2NTgxM0JDMURFQ0NCOEUxMDJCNjAwQ0MwRjAyRjY0NjEKLToxMDE2QjAwMDY2NjNGRjUwNkMxMDA0QzBCN0MwQTExNkVDQzgxNUVDRUYKLToxMDE2QzAwMEJBRDcyMEQ4NDBCODIyQzA0MDA1MzUwMjk2NzE5NTcwMkYKLToxMDE2RDAwMDAyQTQzODA0MDQ0MkM5NEIxQUVDQUQxOUVDQUUyOUE2OTkKLToxMDE2RTAwMDdFQzE0MEQzMEY2RDRBMDUwMDgwODgwMDIwOEMyMjBBRkQKLToxMDE2RjAwMDg4QTI3MkQxMEZDMDUwMDhBNTM4NzVCMEUzNjNGRkQ3MzgKLToxMDE3MDAwMDZDMTAwODkzMTQ5NDEyMjkyMDA2NjU1MjcwQzA3MTY4RjkKLToxMDE3MTAwMDk4MDUyQTlDRjk2NUEyODAxNkVDQTEyOTIxMDI4QTE0NTkKLToxMDE3MjAwMDA5MDk0QzY1OTBDNzhBQTAwQTZBNTEyQUFDRkQ2NUEwRDgKLToxMDE3MzAwMEJDQ0M1RkRCMzBEQTIwOEMxMjU4MTQ2OUMwNTE5QTE0OEIKLToxMDE3NDAwMEM3QkY5QkE5OEUxNDJFRTIwOTY4RTA2MDJGNjI5RTFEMjAKLToxMDE3NTAwMEVDOTI2RkY4MDI2MDAwODEyREQyMjY2OEQwMDUyRjIyMEUKLToxMDE3NjAwMDAwN0RGOTc1MkM2MjlEQzc5MDY0QzA2RDlDMTE4QTE0MzAKLToxMDE3NzAwMDJCMjAwQzJBQTAyMDBDQkQxMUE2REQwQTRGMTRCRkE4RjcKLToxMDE3ODAwMDA5ODgwMTI5RDI4NkFGODgyODhDMDk3OThCNTUxRkVDRUUKLToxMDE3OTAwMDg0MEZCRjBBMkZGMkEzNjhGMDA1MjgyMjAwN0Y4OTQzMzcKLToxMDE3QTAwMDI5RDI4NUQ0OTA2NTkwNzc2MDAwM0QwMDAwMkIyMDBDRjUKLToxMDE3QjAwMDFGRUM3QzBDQkQxMUE2REQyOUQyODYwRkJGMEE2RTk2RTgKLToxMDE3QzAwMDEwMkZGMkEzNjhGMDA0ODgyMDdGODkwNTI5RDI4NTY1NEYKLToxMDE3RDAwMDkxNTVEQTIwNTgxNEQ1NjAwMDEzREEyMEMwQjY1ODE0OTkKLToxMDE3RTAwMEQzNjAwMDA5QzA5MDYzRkZCOURBMjA1ODE0RDA4OTE0N0YKLToxMDE3RjAwMDg5OTEwOUZFNTA2NTUxQ0M4QzEyOEQxNERBMjBEQkQwMTIKLToxMDE4MDAwMDhERDA5RTEwMEQ2RDUxNTgxMzQxOUExNDY0QTFGMEM3RUMKLToxMDE4MTAwMDVGOEZBMTk1QTlDMDUxMEYwRjQ3OUYxMjYzRkVGQjAwNzgKLToxMDE4MjAwMEMwOTFDMEYxMjgyMDA2MkMyMDY2Mjg4Q0Y5QTdDQzBDOEEKLToxMDE4MzAwMDBDNDcyQzI0NjY2RkM2MDg4RDE0OEREMTcwREUwMUMwNTQKLToxMDE4NDAwMDkwREQ5MDY0ODE0MUM5RDI4QTExMkIyMTA0NTgxMzUxMzMKLToxMDE4NTAwMDhBMTRDMEIwMkIyNDY2OEVBOTJBQTAyMEMxNzAxQ0VDNkIKLToxMDE4NjAwMDVCMEUyODE0MTVFQzUwOEUxNDg1NTZBQzJDOUMxMzJFNTAKLToxMDE4NzAwMEVDMjhBODU1RERFMDdDRTMwMjJERURGOEQzRDAwQTc3MDMKLToxMDE4ODAwMDM2REE0MERCNTBEQzMwNUJGRjhCRDRBMDJFMjAwQ0I0NkEKLToxMDE4OTAwMDU1MjkwQTg4QzBDMDFCRUM0OTBDRUYxMUE2RkYyOEYyOUQKLToxMDE4QTAwMDg1QUJFRTJDRTRDRkE5ODgyOEY2ODUyOTBBODA4ODEzMTkKLToxMDE4QjAwMEE5MzNERDMwODkxNDc4MzMwMjJEM0RGODI4OTAyMEQzRTgKLToxMDE4QzAwMEQwMDc4ODBDQzE3MDA4MDg0NzI4OTQyMDA4NzczNjY1MkYKLToxMDE4RDAwMDdGQUU4OTE0MTNFQzQzODk5MEMwRDQ3Nzk3M0QxOEVDMDAKLToxMDE4RTAwMDQxQzFCQTI3MjEwNDg1MTQwOTlDNDAwNkNDMTE4NjUzQjYKLToxMDE4RjAwMDA0NzcxMTg1NTIwQzc3MDIwQjc3MDJDMEMwOThBMDlEMjcKLToxMDE5MDAwMEExOEQyQjlDQTU5N0E0OTZBNzk1QTYwM0REMDI5REEyNjkKLToxMDE5MTAwMDJCRjI4NTJDRTRDRjJCQkMyMDJCRjY4NTJBMkM3NDhCNDQKLToxMDE5MjAwMDEyNTgwRDExRDJBMEQxMEYyODIwM0RDMEUwN0M4Nzc3M0UKLToxMDE5MzAwMDJFMjQ2NzBFMEE0NzY1QTA3MzE4RUMyQjhGMjAxQ0VDMzEKLToxMDE5NDAwMDE5OEUxNDhDQzQ4RUU0MDhGRjExMDhGRjAyMEU4RTE0NDkKLToxMDE5NTAwMEFFQ0MxRUVDMjY5RjkxMEVDQzAyOUM5MEMwODAxRUVDNUIKLToxMDE5NjAwMDI0MkMyMTAyMUFFQzE2MkZEMjg1QUFCQUI4RkYyRkQ2NDIKLToxMDE5NzAwMDg1MEVDQzAyMjhBNENGMkMyNTAyQzAyMEQxMEY4NzE0QkQKLToxMDE5ODAwMDg3NzAwNzA3NDc2M0ZEODYyODIxMjNDMDk5Nzk4QjAyNUEKLToxMDE5OTAwMDYzRkVCMkRERjA2M0ZFQUQwMERBMjBEQjMwOEMxMkRERDkKLToxMDE5QTAwMDUwNTgxNEU4RDJBMEQxMEZDMEUxNjNGRjgyOEIxNDhDOTEKLToxMDE5QjAwMDEyREQ1MEMwQUEyRTBBODAyQTI0NjhEQTIwNTgxMzUzNTgKLToxMDE5QzAwMEQyQTBEMTBGMDA3MDk2NTUyQjYyOUU2RUI4NTMxREVCQkUKLToxMDE5RDAwMEYyMkREMjI2NjhEMDA0OEUyMDdERTk0NTJBNjI5RENCNjcKLToxMDE5RTAwMEFGMkIyMTA0MkMyMDY2NTgxMkVCQzA5MDI5MjQ2NjgyNkMKLToxMDE5RjAwMDE0MThFQzAwOEYyMTA4RkYwMTlGMjFDMDIwRDEwRjAwOTcKLToxMDFBMDAwMDhCMTBDOUI4OENBMDBDNkM1MUNDQ0M4RTI0MUZFQkVFODMKLToxMDFBMTAwMDhERTE5RTE0MEZERDAyOURFMTg4MTA2NThGQTlDMDIwMjUKLToxMDFBMjAwMEQxMEZEQTIwQzBCNjU4MTQ0MUMwMjBEMTBGMDAwMDAwRjkKLToxMDFBMzAwMDZDMTAwNkMwRDAyQTIxMDI5NDExNzVBNzBFODkzNDdGM0MKLToxMDFBNDAwMDk3MDk4QjM1N0ZCRjA0MkQyNTAyREFEMDBBMEM0QzY1MkYKLToxMDFBNTAwMEMxN0IxNkVCRDIxRkVCRDAyODYyOUVDMEVBNzhFMzAyNkUKLToxMDFBNjAwMDYwMDE4MTI5RjIyNjY4OTAwNzhBMjAwOUFBMEM2NUExRTUKLToxMDFBNzAwMDczMkE2MjlEREVBMDY0QTE3MDJCMjAwQ0MwNzAwQ0JDODgKLToxMDFBODAwMDExMDZDQzA4MjlDMjg2MjgwQTBDNzk4MzAyNjAwMTRDMTEKLToxMDFBOTAwMDE5RUJDNDA5QjkwQTI5OTJBMzY4OTAwNzg4MjAwOTg4MUMKLToxMDFBQTAwMDBDNjU4MTM4MjRDMjg1MUNFQkM2NjQ0MTJGODkzMTA5M0QKLToxMDFBQjAwMDhCMTQwQ0JCMDE2RkIxMUQyQzIwNjY5RTEwQjFDQzBDOTkKLToxMDFBQzAwMDBDNDcyQzI0NjY2RUM2MDI2MDAxMzQwOUZFNTA2NUUxQTUKLToxMDFBRDAwMDJFOEExMDJBQUMxODg5MzRDMEU0N0Y5NzM2MTdFQkM3REEKLToxMDFBRTAwMEMwODIxQkVCQzU4QzM1OUU0MTlCNDA4QjIwOTg0NTlENDkKLToxMDFBRjAwMDQ0MThFQkMzMDdCQjAyOUI0MjBDMDc0MDBGNzcxMTk4QjkKLToxMDFCMDAwMDQzOTc0N0Q3RTA3RkM3MEIyQzIxMDIyODRBMDAwOENDMTcKLToxMDFCMTAwMDAyMkMyNTAyN0U5NzA0OEIzNjJCMjUyMjdEOTcwNDhDODAKLToxMDFCMjAwMDM3MkMyNTIxN0M5NzNBMEFBQjAyMkMwQTAxQzA4MDBBODcKLToxMDFCMzAwMEM4MzgyQTNDMjAwODA4NDI2NDgwODIxQ0VCOTQxOUVCQzgKLToxMDFCNDAwMDk1MjlDNjdFMDBBMDg4MDBCMDhDMDBBMDg4MDBCMDhDQ0IKLToxMDFCNTAwMDAwQTA4ODAwQjA4QzI4NjI5RDJERjRBMjI4OEMxODI4NDMKLToxMDFCNjAwMDY2OUQ4OTMwNzc5NzM1MUZFQjlGOEMzMzg4MzIwNDdCRDUKLToxMDFCNzAwMDBCMkEyMTA0QjQ3NzA0QUExMTlFQjE5RkIwOEYyQjlEMkMKLToxMDFCODAwMEI1OThCNjlDQjcxOEVCOTYwOTlDNDAwNkNDMTEwQ0FBRTgKLToxMDFCOTAwMDAyMDhGRjAyOUZCMkMxQ0MwQ0FBMDI5QUI0Qzk3NzJBRUMKLToxMDFCQTAwMDIwMEMxQkVCODYwQ0E5MTFBNjk5Mjg5Mjg1QUJBQTJEQjcKLToxMDFCQjAwMEE0Q0YwODc4MEIyODk2ODVDRjU4QzAyMEQxMEZDMDg3QjYKLToxMDFCQzAwMEMwOTAwQUM5Mzg3OTg4MDI2M0ZGNzg2M0ZGNkNDQzU3RUMKLToxMDFCRDAwMERBMjBEQjMwOEMxMTU4MTM0MkMwMjBEMTBGREEyMDU4QTQKLToxMDFCRTAwMDEzRDM2M0ZGRThDMEEwNjNGRTg5REEyMEMwQjY1ODEzQTAKLToxMDFCRjAwMENGNjNGRkQ5MkEyQzc0OEIxMTU4MEM1QkQyQTBEMTBGNjQKLToxMDFDMDAwMDhBMTAyQjIxMDQ1ODEyNjMxRkVCNjRDMEQwMkQyNDY2NjgKLToxMDFDMTAwMDYzRkVCRDAwNkMxMDA2RDYyMDE5RUI1RjFFRUI2MTI4MzkKLToxMDFDMjAwMDYxMDIxN0VCNUUwODA4NEM2NTgwNUY4QTMwMEE2QTUxRDIKLToxMDFDMzAwMDY5QTM1NzJCNzI5RTZFQjgzRjJBOTIyNjY4QTAwNDhDMjcKLToxMDFDNDAwMDYwN0FDOTM0MkE3MjlEMkM0Q0ZFQ0FBQjJCNjAwQ0I2NEMKLToxMDFDNTAwMDRGMENCRDExQTdERDI4RDI4NjBFQkUwQTc4RkIyNjlDNEMKLToxMDFDNjAwMDExMkVFMkEzMkMxNjAwNjhFMDA1MkY2MjAwN0VGOTE1MDQKLToxMDFDNzAwMDIyRDI4NUNGMjU2MDAwMEQwMERBNjBDMEI2NTgxM0FCQzQKLToxMDFDODAwMEM4NUE2MDAxMEYwMERBNjA1ODEzQTg2NTUxMDZEQzQwOUQKLToxMDFDOTAwMERCMzA4RDMwREE2MDBENkQ1MTU4MTIxQ0QzQTA2NEEwN0EKLToxMDFDQTAwMEYzODRBMUMwNTEwNDA0NDc2M0ZGNkQwMEMwQjAyQzYwRjEKLToxMDFDQjAwMDY2ODkzMUIxQ0MwQzBDNDcyQzY0NjY2RkM2MDI3MDk2RjUKLToxMDFDQzAwMDBBMkI2MTA0NTgxMjMzQzBCMDJCNjQ2NjY1NTBCNDJBRTUKLToxMDFDRDAwMDNDMTBDMEU3REMyMEMwRDFDMEYwMDJERjM4MEYwRjQyNUIKLToxMDFDRTAwMDY0RjA5MDE5RUIyQTE4RUIyQjI4OTY3RThEMTA2RERBOTQKLToxMDFDRjAwMDA1MDBBMDg4MDBDMDhDQzBBMDg5MzAxREVCM0E3Nzk3MDIKLToxMDFEMDAwMDUzODgzMjhDMTA4RjMzMDJDRTBCQzAyNDkyRTEyMjYxQjMKLToxMDFEMTAwMDA0OURFMDA0MjIxMThENkI5QkU1OUZFNzk4RTYxRkVCODUKLToxMDFEMjAwMDMwMDk5ODQwMDY4ODExMDgyMjAyMEZERDAyQzE4RDlERkUKLToxMDFEMzAwMEUyMDgyMjAyOTJFNEI0QzIyRTYwMEMxRkVCMjAwQ0U4RjEKLToxMDFENDAwMDExQTc4ODJDODI4NUFGRUUwQzIyMEIyQkU0Q0YyMjg2QzQKLToxMDFENTAwMDg1RDJBMEQxMEYyODYwMENEMkEwOEMxMTE5RUIxODBDRTEKLToxMDFENjAwMDhEMTFBN0REMkVEMjg1QTk4ODJCODRDRjBFQ0MwQjJDMEMKLToxMDFENzAwMEQ2ODVEMTBGQzBGMDBBREYzODdGRTgwMjYzRkY2QzYzQkQKLToxMDFEODAwMEZGNjAwMDAwMkE2Qzc0QzBCMkRDMjBERDQwNTgxMjExRTQKLToxMDFEOTAwMEMwQjA2M0ZGNjNDMDIwRDEwRjAwMDAwMDZDMTAwNDJDQTIKLToxMDFEQTAwMDIyMUQyQTIyMUVDMDQ5RDMyMDI5MzAwNjI0MzQ2OEMwQUYKLToxMDFEQjAwMDQwN0FDMTA1RERBMDYwMDAwMjAwQzBEMDZFOTczOEMwMzcKLToxMDFEQzAwMDhGMkUwQTgwMkIzMDE0QzA5NjI5MzQwNjBFQkIwMjJFQUIKLToxMDFERDAwMDMxMDIyQjM0MTQ3RTgwMDQyNDM1MDJERTQwN0FDMTBFOTkKLToxMDFERTAwMEM4QUJEQkQwREEzMDJDMEEwMDU4MEE3OTJFMzEwMjBFNEIKLToxMDFERjAwMDBGNENDOEZFQzAyMEQxMEY2ODk1RjgyODMxMDIwODA4QTIKLToxMDFFMDAwMDRDNjU4RkVGMUFFQUU2MUNFQUU0MkJBMjlFQzA5QTdCOEYKLToxMDFFMTAwMDlCNDYyQkMyMjY2OEIwMDQ4RDMwN0JEOTNCMjlBMjlERkUKLToxMDFFMjAwMEMwRTNDQjkzOTQ5MDFCRUFGNzJEMzEwNDlCOTYwOEREMTkKLToxMDFFMzAwMDExMEVERDAyOUQ5NzlEOTEyNEM0QTIxMkVBRjMyRjMxNjkKLToxMDFFNDAwMDAyMjhBMjlEQzBFNTJFMzQwNjI4OEMzMDI4QTY5RDAyQ0IKLToxMDFFNTAwMEZGMDIyRjM1MDJDMDIwRDEwRkRBMzBDMEI2NTgxMzMzM0QKLToxMDFFNjAwMEMwMjBEMTBGNkMxMDA2MkEyMDA2OTQxMTY4QTgwNTI4RkUKLToxMDFFNzAwMEFDRjk2NTgyNEYyOTIxMDIwOTA5NEM2NTkyMDZDQzVGQjUKLToxMDFFODAwMERCMzBEQTIwOEMxMTU4MTI5NkMwNTFEM0EwQzdBRjlBMUMKLToxMDFFOTAwMDNBQzBFMDE5RUFDMzFERUFDOTFBRUFDMjhGM0ExNkVBNDMKLToxMDFFQTAwMEJGQjFGQjY0QjEzNTJDNjI5RTZGQzgwMjYwMDFFOTI3QTcKLToxMDFFQjAwMERDMzMyNzcyMjY2ODcwMDc4ODIwMDc4ODBDNjU4MUQ4NzQKLToxMDFFQzAwMDI0NjI5REMwNzY2NDQxRDAyQjIwMEMwQ0JDMTFBNkNDQTIKLToxMDFFRDAwMDI4QzI4NkMwOUU3ODkzMDI2MDAxQzgxOUVBQjEwOUI5ODgKLToxMDFFRTAwMDBBMjk5MkEzOTQxMDY4OTAwNzg4MjAwOTg4MEM2NTgxQkMKLToxMDFFRjAwMEIyMjRDMjg1NjQ0MUFDMjkyMDA2Mjk5Q0Y5NjQ5MURGOTMKLToxMDFGMDAwMDJDMjA2Njg5MzFCMUNDMEMwQzQ3MkMyNDY2NkVDNjAyOUQKLToxMDFGMTAwMDYwMDE5ODA5Rjg1MDY1ODE5MjFBRUFBMzhDMzYxOUVBOTMKLToxMDFGMjAwMEExMEM4ODE0ODk5NDBDMEM0NzA5Q0MxMEE4OTkwQTk5MjMKLToxMDFGMzAwMDAyMThFQUI2MkEyMTA0OTk0MDk4NDE4ODJBMTlFQUI0N0QKLToxMDFGNDAwMDBDODgwMjA5ODgwMjk4NDIyODMwMkMyQzMwMTMyOTMwNDIKLToxMDFGNTAwMDEyMDRDQzEwMDY5OTEwMEM4ODEwOUY0NDA4QTgwMjBDOUIKLToxMDFGNjAwMDk5MDIwOTg4MDI5ODQzOEYzNzlGNDU4QzM4OUM0Njg5OEYKLToxMDFGNzAwMDM5QzBGMTk5NDcxOUVBQTc4ODM1OUY0Qjk4NDgwODg4RDYKLToxMDFGODAwMDE0MDk4ODAyOTg0QThGMzAxOEVBOTc3N0Y3MzJDMDc0OUMKLToxMDFGOTAwMDg5MzI4QzMzOTg0Qzk3NEQwRjk3NDA4ODJCMkU0NjExRTEKLToxMDFGQTAwMDA2NzcxMTJDNDYxMzI5NDYxMjA0QUMxMTE5RUE4RDA3NDUKLToxMDFGQjAwMENDMDJDMTc5MDk4ODAyOTg0RTA3Q0MwMjJDNDYxMEMwODkKLToxMDFGQzAwMDdBQURCQzBDQkExMUE2QUEyOUEyODUyRUM0Q0YwOTc5NzQKLToxMDFGRDAwMDBCMjlBNjg1NjU1MEZDQzAyMEQxMEYwMDJCMjAwQzBDQ0UKLToxMDFGRTAwMEJDMTEwNkNDMDgyRkMyODYwOUI5MEE2RkY5MDI2MDAxM0MKLToxMDFGRjAwMDFFMjk5MkEzNjg5MDA4MkYyMjAwMDlGRjBDNjVGMTBGOUIKLToxMDIwMDAwMDJGQzI4NTY0RjEwOTI4MjAzRDA4Mjg0MDY0ODA4NDg0MUIKLToxMDIwMTAwMDM1MDQ4NDE0NjQ0MDdDODVBNTc0NTM3Nzg0MzYwNDg0MjUKLToxMDIwMjAwMDE0NjQ0MDZGNzQ1MzZDMjkzMDEzQzA4Qzc5ODg2NEMwNzkKLToxMDIwMzAwMDkwMjkyNDY3MDkwODQ3NjU4MEREODgyMDg5QTQ4NDM1QjQKLToxMDIwNDAwMDFBRUE2QjA0ODQxNEE0OTQwQTQ0MDI5NEYwMTRFQTY2MTUKLToxMDIwNTAwMDA4ODgxMTA0ODgwMjk4RjE4NDM2OThGMzA0ODQxNEE0NDMKLToxMDIwNjAwMDk5MEE5OTAyOTlGMjFBRUE2MjI5MjEwMjI0QzI4NUFEREQKLToxMDIwNzAwMEI4MkU4NENGMjQ0QzEwMjRDNjg1MEE5OTAyMjkyNTAyNDMKLToxMDIwODAwMEMwMjBEMTBGMDBDQzU3REEyMERCMzA4QzExNTgxMjE0NEQKLToxMDIwOTAwMEMwMjBEMTBGQzA5MTYzRkY5N0RBMjBDMEI2NTgxMkEzQjkKLToxMDIwQTAwMDYzRkZFMTAwREEyMDU4MTJBMTYzRkZEODhBMTAyQjIxQzgKLToxMDIwQjAwMDA0NTgxMTM4MURFQTQyMkIyMDBDQzBFMDJFMjQ2NjhGRjQKLToxMDIwQzAwMDNBNjNGRTU0MDBEQTIwREIzMERDNDBERDUwNTgxMzFENEIKLToxMDIwRDAwMEQyQTBEMTBGMkEyQzc0OEIxMTU4MEIyM0QyQTBEMTBGNzAKLToxMDIwRTAwMDI5MjEyM0MwODg3OTgzMDI2M0ZFMkQyQTEyMDAyQzIwMjcKLToxMDIwRjAwMDY2MkIyMTA0MkNDQzAxMEMwQzQ3MkMyNDY2NTgxMTI1OEUKLToxMDIxMDAwMDFERUEyRjJCMjAwQ0MwRTAyRTI0NjY4RjNBNjNGRTA4QjgKLToxMDIxMTAwMERBMjA1ODEyODY2M0ZGNkNEQTIwNUJGRjIwRDJBMEQxNTAKLToxMDIxMjAwMDBGMDAwMDAwNkMxMDBBOTUxNkMwNjFDMUIwRDk0MDJBOUEKLToxMDIxMzAwMDIwM0RDMDQwMEJBQTAxMEE2NDM4MkEyMDA2MjkxNjA3NTAKLToxMDIxNDAwMDY4QTgwNTJDQUNGOTY1QzMzQjFERUExNkM4NDQyRjEyREMKLToxMDIxNTAwMDA2NjRGMjlCMjYyMTAyMUVFQTEyOTYxNDA2MDY0QzY1QkUKLToxMDIxNjAwMDYyREUxNUVBMEU2NDQwQ0Y4QTM1MjkzMDAzOUExNTBBREIKLToxMDIxNzAwMDk5MEM2NDkwQzIyQzIwMEM4QjE1OUMxMjBDQ0MxMUE1RDAKLToxMDIxODAwMENDOUMxMzJDQzI4NkI0QkI3Q0IzMDI2MDAyQ0U4RjEyRUYKLToxMDIxOTAwMDBFRkUwQTJFRTJBMzY4RTAwODI2MjIwMDBFNjYwQzY1RjkKLToxMDIxQTAwMDYyQkE4ODEzMjg4Mjg1NjQ4MkIyODkxNTY0OTA1RURBRTcKLToxMDIxQjAwMDgwRDkzMDhDMjAxRUVBMEMxRkVBMEQxREU5RkE4QjE1MjAKLToxMDIxQzAwMDhERDRENEIwN0ZCNzE4Qjg4QTI5M0MxMDg1MzYwOEM2OUMKLToxMDIxRDAwMDExMEU2NjAyOTY4MTA1ODUxNEE1RDUwRjU1MDI5NTgwQ0UKLToxMDIxRTAwMDA0MTgxNDZEODkyNzg4OTYwOENCMTEwODg4MTQwRUJCMzMKLToxMDIxRjAwMDAyQThEODI5OUMyMDBGODgwMjlCQTE5OEEwODg5MjlCQjYKLToxMDIyMDAwMEEzMDg4ODE0QThEODBGODgwMjk4QTIyQUFDMTBDMEQwQkUKLToxMDIyMTAwMDhBMTUxRkU5RUE4RTEyMTlFOUY2OEIxMzg4MTQyQ0IyN0QKLToxMDIyMjAwMDg1MDk4ODAyQUZFRTBDQUEwQjJERTRDRjJBQjY4NTI4Q0IKLToxMDIyMzAwMDI1MDJDMDIwRDEwRjAwMDAyNjUyOUUxOEU5RDc2RjY4RjIKLToxMDIyNDAwMDAyNjAwMjBEMjg4MjI2Njg4MDA5ODkyMEQzMEYwODk5MzAKLToxMDIyNTAwMDBDNjU5MUZEMkE1MjlEQzBGRDlBMTE2NEExRjMyQjIwQkIKLToxMDIyNjAwMDBDQzFDQTBDQjgxMTA1ODgwODJEODI4NjBFQkUwQTdERTUKLToxMDIyNzAwMEMzMDI2MDAyMEEyRUUyQTM2OEUwMDgyNjIyMDAwRTY2NkUKLToxMDIyODAwMDBDNjU2MUZCMjg4Mjg1REU4MDY0ODIwNzI5MjAwNjk4MjAKLToxMDIyOTAwMDEwMjk5Q0Y5NjQ5MjA0MkMyMDY2ODgzMUIxQ0MwQzBDNzYKLToxMDIyQTAwMDQ3MkMyNDY2NkVDNjAyNjAwMUJEMDhGRDUwNjVEMUI3OUIKLToxMDIyQjAwMDE3RTlEQTFDRTlCRDE5RTlDNDJBMjEwNDhCMkQyODMwNUQKLToxMDIyQzAwMDEwMkQyMTFEMEM4ODEwMEJEQjA5MEE4ODAyMDk4ODAyRDkKLToxMDIyRDAwMDBDQkIwMjY0NDE1NTg5MTA5QjkwOTc5MTk4OTI4NDM1NkMKLToxMDIyRTAwMEQ5RTA2NDQwNkZENzMwREI0MEQ4MzA3RjQ3MTUyNzNDQkEKLToxMDIyRjAwMDEwQkNFOTI2MzIxNjhDMzk5NkU2OUNFNzhBMzcyODNDRDIKLToxMDIzMDAwMDA0MkFFNjA4MEIxMzE0NjQzMDRBMkE4MjE2ODY3OTlBNDYKLToxMDIzMTAwMDk2OTY5NzhDNzc4QTdEOUM5ODJCODIxNzJDN0MyMDlBOTYKLToxMDIzMjAwMDlBMkE5QzE4OUI5OTg2N0JCMDNCMjk4QzA4NkRCOTIxMTEKLToxMDIzMzAwMDhCQzk5NkE1MjY5MjE2MkFBQzE4Qjg5OTlCQTE5NkEwOEYKLToxMDIzNDAwMDhCQzc4NkNEOUJBMjJCOTIxNTk2QTQ5QkEzODZDQjJDRTQKLToxMDIzNTAwMENDMjAyNkE2MDVDMDM0NkI0NDIwMDQzQjBDMDQ0ODA5NUQKLToxMDIzNjAwMDBFODgwQTdGQjcwNUMwOTA5OTg4QkM4OEMwOTAwQjFBNjgKLToxMDIzNzAwMDEyNkRBQTA2OTk4ODk5OEIyODhDMTgxQ0U5QTgxQkU5NkMKLToxMDIzODAwMEE4MTZFOTlEQjFERDJBMjExQzIzRTYxMzBEMEQ0RjI2NjkKLToxMDIzOTAwMEU2MTIyRDI1MURDMDYwODcyMDdEQTkwN0MwRDAyODBBMjAKLToxMDIzQTAwMDAwMjgyNTFEMjZFNjE3MkNFNjE2MkJFNjE1MDVEODExNjQKLToxMDIzQjAwMDFBRTk5MzI4RTYxODBBN0EwMjJBRTYxNDI5MjAwNjI5M0YKLToxMDIzQzAwMDlDRjk2NDkxMDYyQTIwMENDMDkwMUJFOTdDMENBRDExOEQKLToxMDIzRDAwMEE1REQyQ0QyODVBQkFBQzBCMDI5QTRDRjBDRkMwQjJDNTgKLToxMDIzRTAwMEQ2ODVEQTIwOEMxNzJEMTIwNjU4MTEwREQyQTBEMTBGRTgKLToxMDIzRjAwMDhBMzU2RkE1NDZEODMwOEJENTZEQTkwQzhBODYwQThBOTYKLToxMDI0MDAwMDE0Q0JBNzdBQjMzNTI4OEMxMEMwODAyODI0NjcwODBCMUEKLToxMDI0MTAwMDQ3NjVCMTFDREEyMERCMzA4QzE3NTgxMTMxRDNBMEMwQ0UKLToxMDI0MjAwMEMxQzBEMDJEQTQwMzlDMTY2M0ZEMjgwMDg2MzY2NDYxQ0MKLToxMDI0MzAwMDE2ODkxMDlCOTA5NzkxOTg5MjYzRkVBMUMwODE2M0ZGQ0IKLToxMDI0NDAwMEM5OEExNkNDQTdEQTIwREIzMDhDMTc1ODExMjVDMDIwOUEKLToxMDI0NTAwMEQxMEZEQTIwQzBCNjU4MTFCNTYzRkZFNDAwREEyMDhCNDMKLToxMDI0NjAwMDEyNTgxMUIyNjNGRkQ5MDA5RjE4OUUxOThBMTEyQjIxQUYKLToxMDI0NzAwMDA0NTgxMDQ4OEUxOThGMThDMEIwMkIyNDY2NjNGRTJGQTUKLToxMDI0ODAwMEMwODA2M0ZFMDFEQTIwREIzMDhDMTdERDUwNTgxMjJEM0UKLToxMDI0OTAwMEQyQTBEMTBGREEyMDU4MTFBNTYzRkZBNDJEMjEyM0MwQUIKLToxMDI0QTAwMEM4N0RDMzAyNjNGRTA4OUYxODhBMTEyQjIxMDQyQzIwQ0IKLToxMDI0QjAwMDY2OTgxOUIxQ0MwQzBDNDcyQzI0NjY1ODEwMzY4RTE5MkUKLToxMDI0QzAwMDhGMThDMEQwMkQyNDY2NjNGREU1MDAwMDI2MjEyM0IwQkYKLToxMDI0RDAwMDY2MDYwNjRGMjYyNTIzNjU2RUVBMjgyMDZBN0Y4NzA1NTMKLToxMDI0RTAwMDA4Mjk0MTY0OTBGREMwRDAxQkU5M0YxOUU5NEUyNjIwMjAKLToxMDI0RjAwMDA3MjNFNjFCQjE2NjA5N0EwMjJCRTYxQTI4MjAwQTJENkIKLToxMDI1MDAwMEU2MUQyQUU2MUUwOTg4MDIyOEU2MUM4ODI2MDYwNjQ3REMKLToxMDI1MTAwMDI4RTYyMDhCMjgyNkU1M0UyQkU2MjEyRDI0MDcyQzIwQkIKLToxMDI1MjAwMDA2MkEyMDY0MkNDQ0ZENjRDMDlEQjRGRjYzRkU5NTAwOTgKLToxMDI1MzAwMDAwREIzMERBMjA4RDE2QzBDRTJFMEE4MDJDMjQ2ODhDNjkKLToxMDI1NDAwMDE3NTgxMDcyRDJBMEQxMEY4RTEwMjYzMjE2MUZFOTE1MUYKLToxMDI1NTAwMDA2MjYxNDhGRjYyQkU2MTI5N0UxMjdFNjEzMjhFNjE0RDkKLToxMDI1NjAwMEE2RkYwQ0ZGMDI5RkUwQzFGNjJFRUM0ODI2RUNDMDY0RUIKLToxMDI1NzAwMDZENkI4NDM1QzA4MDY0NEREQkQ5RTBEQzMwREJFMEREQTEKLToxMDI1ODAwMDMwQjE4ODE0RTkyOTg2Qzk4QUM4Mjc5REZGMkNDQzEwNTAKLToxMDI1OTAwMDI5OUMxMDJBNzYzMjJBNzYzMDA0NjQwMTFBRTkyNDI0MTAKLToxMDI1QTAwMDc2MzFBQTQ0MjQ3NjMzMkFEMjE2MTdFOTIxOUFCNjA3M0YKLToxMDI1QjAwMDY2MDE5NkI3ODRDM0JDQkI5NEI1ODQzNUI0REQ3NDgzMUYKLToxMDI1QzAwMEJGMkQyMTFENjNGRDhEMDA2NEFGNUUxREU4RjYyQzIwM0MKLToxMDI1RDAwMDE2OEREMjBBQ0MwQzAwRDEwNDAwQ0MxQUFDQkM5QzI5QkMKLToxMDI1RTAwMDYzRkY0NjAwMkIyMTA0NkVCODIyMkMyMDY2QjhDQzBDNjkKLToxMDI1RjAwMDBDNDcyQzI0NjZDOUM0OUYxODlFMTk4QTExNTgwRkU1RjAKLToxMDI2MDAwMDhFMTk4RjE4QzAzNDg3MjBDMEQwMkQyNDY2QzA2ODI2NEMKLToxMDI2MTAwMDI0MDY2M0ZFRDAwMDAwMDA2QzEwMDgyOTIwMDYyODlDQzgKLToxMDI2MjAwMEY4NjU4MkMzMjkyMTAyQzBBQTA5MDk0QzY1OTBFNjJCRUUKLToxMDI2MzAwMDIwMEMxNkU4REEwQ0JDMTFBNkNDMkVDMjg2QzFEMjdFQzQKLToxMDI2NDAwMEQzMDI2MDAyOEUxOUU4RDYwOUI5MEEyOTkyQTMyQTE2ODQKLToxMDI2NTAwMDAyNjg5MDA3OEEyMDA5QUEwQzY1QTI3NzI5QzI4NTY0QkUKLToxMDI2NjAwMDkyNzEyQjYyOUUxQUU4Q0M2RkI4MDI2MDAyNkUyQUEyQTkKLToxMDI2NzAwMDI2MjkxNjAxNjhBMDA4MkIyMjAwMEFCQjBDNjVCMjVDNTMKLToxMDI2ODAwMDI5NjI5REMxOEM2NDkyNTQyQTIxMjAwQTgwNjA5OTEwOEQKLToxMDI2OTAwMDJDMjAzQ0M3RUYwMDBGM0UwMTBCM0VCMUJEMEZEQjM5RDQKLToxMDI2QTAwMDBCQkIwOThGMjYwREJEMTEyRERDMUMwRDBENDEwRURENjAKLToxMDI2QjAwMDAzOEUyN0IxREQwRDBENDEwRkVFMEMwREJCMEIyQkJDQjYKLToxMDI2QzAwMDFDMEJCNzAyN0VDNzFDMkMyMTI1N0JDQjE2MkQxQUZDQjgKLToxMDI2RDAwMDBDQkEwQzBEQTE2MDAwMDkzRTAxMDczRUIxNzgwOTg3RDQKLToxMDI2RTAwMDM5MEI3NzBBNzdFQjAyNjAwMjA2MkIyMTIzMjgyMTIxODAKLToxMDI2RjAwMEIxQkIwQjBCNEYyQjI1MjM3QjhCMjlCMEJEMkQyNTIzODUKLToxMDI3MDAwMEM4NTVEQTIwREIzMDU4MEZGMDI5MjEwMkNDOTZDMEU4RkEKLToxMDI3MTAwMDBFOUUwMjJFMjUwMkNDNTdEQTIwREIzMERDNDA1ODEwMEEKLToxMDI3MjAwMDcwQzAyMEQxMEYyQzIwNjY4OTMxQjFDQzBDMEM0NzJDMDUKLToxMDI3MzAwMDI0NjY2RUM2MDI2MDAxQ0YwOUZENTA2NUQxQzkyRjBBMUIKLToxMDI3NDAwMDAxMjgzMDExMjkyMjE0NjQ4MDExMkEyMjFCMDkwQzQ0MEIKLToxMDI3NTAwMDAwQzEwNDAwRkIxQTBCQUEwMjJBMjYxQjJEMzAxMEMwNTAKLToxMDI3NjAwMEEwQzBFMDg4MzAxQkU4OEY5NDEzOTUxNDI0MEEwMTI1M0IKLToxMDI3NzAwMDIwM0MyQkIwMjIwODhDMTQ3Nzg3MDRDMEYxMEJGQTM4NjgKLToxMDI3ODAwMEMwRjJDMDg0MDg1ODAxMEY1RjAxMEY0RTM4MDUzNTQwNzQKLToxMDI3OTAwMDA3RUUxMEMwRjAwODRGMzgwOEZGMTAwRkVFMDIyOERDREIKLToxMDI3QTAwMEZFQzBGMDA4NEYzODg0MkIwQkE4MTAwQUZGMTAyQTIxMTYKLToxMDI3QjAwMDIwMEY4ODAyMEU4ODAyMDg0NDAyMThFODlFOEYxMTA4MzQKLToxMDI3QzAwMDQ0MDIyODIxMjUwQTJBMTQwODI4MTQwNDg4MTEwQTg4OUEKLToxMDI3RDAwMDAyMkEyMTA0OTRGMDhFMjAwNEQ0MTAwOEVFMTEwNEVFOTUKLToxMDI3RTAwMDAyQzA0QTA0RUUwMjlFRjE4NDJBMDhBRTExMEVERTAyRjcKLToxMDI3RjAwMDk0RjQwQTU0MTEwRTQ0MDIwNTU1MTAwQzFFNDA5NEY3MkYKLToxMDI4MDAwMDA3RUUxMDBFNTUwMjA4NTUwMkMwODE5NUY2ODQzM0MwQkMKLToxMDI4MTAwMDUwOTRGM0IxOTQ4RTMyOTVGODk4Rjk5RUYyQzA4MEMxMkQKLToxMDI4MjAwMEVDMjQyNjE0OThGQjlFRjU5OUZBODUzODk1RkM4NDNBOTkKLToxMDI4MzAwMDk0RkQ4RTNCOUVGRTg4Mzk5OEZGODUzNTI1RjYxMDg0RTEKLToxMDI4NDAwMDM2ODUxNDI0RjYxMThFMzc4NDEzMkVGNjEyQzBFMDY0RjgKLToxMDI4NTAwMEIwNDk4OTMwNzc5NzQ0MkIzMDEwODgzMzhDMTExRkU4QUEKLToxMDI4NjAwMDYxOEQzMjJGQzYxNEMwRjQyRkM2MTU4RjJCMkVDNjE5QkEKLToxMDI4NzAwMDJEQzYxQTI4QzYxQjA0QUQxMTA5OTg0MDA2ODgxMTA4RjgKLToxMDI4ODAwMEREMDIwREJCMDIxOEU4NTZDMUQwMERCQjAyMDhGRjAyRTUKLToxMDI4OTAwMDJGQzYxNjJCQzYxODI4MEEwRTI4MTYwMjJCMjAwQzg4QzUKLToxMDI4QTAwMDEyMUNFODQ2MENCOTExQTY5OTJBOTI4NUFDQkIyRUI0MkQKLToxMDI4QjAwMENGMEE4ODBCMjg5Njg1Qzk3MThCMjY4QTI5MDdCQjA4MDEKLToxMDI4QzAwMDJCMjYwNjBCQUEwQzBBMEE0ODJBMjUyNTY1NTA0OEMwNjMKLToxMDI4RDAwMDIwRDEwRjAwREEyMDU4MTA5NTYzRkUzOTAwREEyMEMwQUQKLToxMDI4RTAwMEI2NTgxMDkyNjNGRTJFMDA2ODk3MzhDMDIwRDEwRjAwQjIKLToxMDI4RjAwMDAwREEyMERCNzA1ODEwNEZDMEMwQzBEMTBBREEzOTBBQTQKLToxMDI5MDAwMERDMzg2NUNERTQ2M0ZFMEQ4QTEwMkIyMTA0NTgwRjIxQkQKLToxMDI5MTAwMEMwRTAyRTI0NjY2M0ZFMjVEQjQwMkEyQzc0NTgwOTEyODEKLToxMDI5MjAwMEQyQTBEMTBGREEyMDU4MEYyNjYzRkNGNzZDMTAwNEMwMzgKLToxMDI5MzAwMDIwRDEwRjAwNkMxMDA0MjcwQTgwMUNFODNGMURFODNGREYKLToxMDI5NDAwMDFBRTgxNzBDMjkxMUFBOTkyQTJDRkMyQjkyODUwREFBOUEKLToxMDI5NTAwMDAyOUNCMTlBQjBDMDUxMTNFODNDMjg5Mjg1MTZFODM4MjEKLToxMDI5NjAwMDE0RTgzOUE2MjYwNDI0MEFCODg4Mjg5Njg1MjM0NjkxQjcKLToxMDI5NzAwMEE3NjYyNTY0OUZEMTBGMDA2QzEwMEFENjMwMjgzMDEwNEUKLToxMDI5ODAwMDI5MjAwNjI4OENGOTY0ODI5NzY4OTgwQjJBOUNGOTY1OUYKLToxMDI5OTAwMEExQjIwMjJBMDI1ODBGMEE4OTM3MUJFODAyQzg5MTY0QzMKLToxMDI5QTAwMDUyMEUyQTIxMDIwQTBDNEM2NUMyNTU4RDMwMTlFN0ZCRTQKLToxMDI5QjAwMDc0RDcwNTJFMjEyMzY1RTI5QTJGOTI5RTFBRTdGNzZGQUUKLToxMDI5QzAwMEY4MDI2MDAyNTAyQUEyMjY2OEEwMDgyQzIyMDAwQUNDMzUKLToxMDI5RDAwMDBDNjVDMjQxMkE5MjlENjRBMjNCOUExNTFGRTdGMThEQjYKLToxMDI5RTAwMDY3QzFFNkM4REQyQjYyMDYxOEU3RUY2NEIwMDUyODgwRjIKLToxMDI5RjAwMDIxN0I4QjQzMkIyMDBDMThFN0U5MENCQzExQThDQzI5QjgKLToxMDJBMDAwMEMyODY3OUVCNDYwRkJFMEEyRUUyQTM2OEUwMDUyRjIyQUMKLToxMDJBMTAwMDAwN0VGOTM3MkNDMjg1OUMxODY0QzIyRjJCMjEyRjg3OEEKLToxMDJBMjAwMDY2MEI3QjM2MEI3OTBDNkY5RDI2NkVEMjQ2MkMyMDNEQjMKLToxMDJBMzAwMDdCQzc0MENFNTU2MDAwMUUyQTIwMENDMUIyOEMyMDU4QTYKLToxMDJBNDAwMDEwNkY5QTE4NjRBMjQxOEQ2NzYzRkZDRkMwQzA2M0ZGMDcKLToxMDJBNTAwMEM1RDdCMDYzRkZEMzAwQzBFMDYwMDAwMjJFNjAwMzBFNTQKLToxMDJBNjAwMERCMEM2RUIyMEVEQzcwMENFQTExQUE2QTJBQUMyMDU4OUMKLToxMDJBNzAwMDAxOThEN0EwREEyMERCNzBDMUM4MkQyMTIwNTgxMDE1OEQKLToxMDJBODAwMDhDMjY4QjI3OUExNjBDQkIwQzdBQjMzNDhGMTg4OTYzNkIKLToxMDJBOTAwMDk5RjM4ODYyOThGMjhFNjU5RUY4MkQ2MDEwOEExODlERDEKLToxMDJBQTAwMDE3NjhENzI5QzBEMDlEQTkyQzIyMTgyQjIyMTM5Q0FCQzQKLToxMDJBQjAwMDlCQUE5N0E1OEU2NjdFNzMwMjYwMDA5N0NGNTg2MDAwMzAKLToxMDJBQzAwMDFGREEyMDhCMTY1ODBGREI2NUExMzU2M0ZGQkRDMDgxNkYKLToxMDJBRDAwMEMwOTA4RjE4QzBBMjlBRjk5OUZCOThGQTk3RjU2M0ZGRjYKLToxMDJBRTAwMEQyREIzMERBMjBEQzQwNTgwRjdFQzA1MUQ2QTBDMEMwMDcKLToxMDJBRjAwMDJCQTAxMDJDQTQwMzlCMTcyQzEyMDgwMjJBMDIwNjZCOTEKLToxMDJCMDAwMDAyREY3MDJENjAwMzhFMTc5RDE0OUUxMDBDREQxMUMwMjYKLToxMDJCMTAwMEUwQUQ2RDJEREMyMDU4MDExNzhDMTQ4QjE2QUNBQzJDNUQKLToxMDJCMjAwMDY0MDM4QTI2ODkyOUFCQUEwQTk5MEM5QTI2ODg2NjA5MjEKLToxMDJCMzAwMDA5NDgyOTI1MjUwNzg4MEM5ODY2MkYyMjE4QTdGRjJGRkEKLToxMDJCNDAwMDI2MTg2M0ZFOTZEQTIwREIzMERDNDBERDUwNTgxMDdEMUQKLToxMDJCNTAwMEQyQTBEMTBGQzAzMDJDMjA2Njg5NjFCMUNDMEMwQzQ3QkIKLToxMDJCNjAwMDJDMjQ2NjZFQzYwMjYwMDBDRUMwMzAwOUZENTA2NUQwRDAKLToxMDJCNzAwMEM2OEU2NzY0RTA2OTY0NzA2NkRCNjA4QzE4REY3MERBQUIKLToxMDJCODAwMDIwMkQ2MDAzOEUxNzBDREQxMTlFMTBBRDZEMkREQzIwMDUKLToxMDJCOTAwMDFFRTdBNzU4MDBGODIzMjYxOERBMjA4QjE2REM0MDJGRjIKLToxMDJCQTAwMDIyMTNERDUwQjFGRjJGMjYxMzU4MEYxREQyQTBEMTBGRDUKLToxMDJCQjAwMDAwMjgyMDNEMDg0ODQwNjU4REU3NkY5NTNFREEzMDhENEUKLToxMDJCQzAwMEI1NkQ5OTBDOENBODBDOEMxNENBQ0Y3Q0QzMkQyQUFDNzMKLToxMDJCRDAwMDEwQzA5MDI5MjQ2NzA5MEQ0NzY0RERDNTYwMDA4RTAwOTAKLToxMDJCRTAwMDJDMTIwODA2NkIwMjJENkMyMDA3N0YwMjhFMTdEQTIwNEMKLToxMDJCRjAwMDlFMTAxRUU3OEU1ODAwN0M2M0ZGOUEwMEMwOTE2M0ZGMTEKLToxMDJDMDAwMEQxNjU1MDgwREEyMERCNjBEQzQwNTgwRjM1QzAyMEMwMzEKLToxMDJDMTAwMEYwMkZBNDAzRDEwRkRBMjBDMEI2NTgwRkM0NjNGRkUwMzEKLToxMDJDMjAwMDAwNkY5NTAyNjNGRDcwREEyMERCMzBEQzQwREQ1MEM0QkMKLToxMDJDMzAwMEUwNTgwRUI2RDJBMEQxMEY4QTE1MkIyMTA0NTgwRTU1OUMKLToxMDJDNDAwMDIzMjQ2NjI4NjAxMDk4MTc2M0ZGMjUwMERBMjA1ODBGQTgKLToxMDJDNTAwMEI3NjNGRkFDQzg1OERCMzBEQTIwNTgwRTlCMkEyMTAyM0MKLToxMDJDNjAwMDY1QUY5REMwOTQwOUE5MDIyOTI1MDI2M0ZGOTJEQjMwNUMKLToxMDJDNzAwMERDNDBERDUwQzBBMzJFMEE4MDJBMjQ2OERBMjA1ODBFREEKLToxMDJDODAwMEEzRDJBMEQxMEZDMDIwRDEwRkRBMjAyQjIwMEM1ODBGRDcKLToxMDJDOTAwMEMwNjNGRjZDNkMxMDA0MjgyMDA2QzA2MjI4OENGODY1QTUKLToxMDJDQTAwMDgxMjVDMDUwQzdERjJCMjIxQkMwRTEyQTIwNkIyOTIxQzAKLToxMDJDQjAwMDIzMDBBMTA0QjA5OTI5MjUyM0IxQUEwMEVDMUEwQkM0NjIKLToxMDJDQzAwMDAxMEEwQTQ0MkEyNDZCMDRFNDM5MERDQzAzMENCQjAxMkQKLToxMDJDRDAwMDJCMjYxQjY0NDA2OTI5MjAwQzFCRTczMDBDOUExMTBCMzIKLToxMDJDRTAwMEFBMDgyRkEyODYxQkU3MkU2RkY5MDI2MDAwQjYwQjlCODUKLToxMDJDRjAwMDBBMkJCMkEzNjhCMDA4MkMyMjAwMEJDQzBDNjVDMEE0MzAKLToxMDJEMDAwMDJCQTI4NTFDRTc1MjY0QjA5Qjg4MkIyRjIxMDQwQzg4RDIKLToxMDJEMTAwMDAyOThCMDg0MjBDMDg1MDg0NDExMDg0NDAyOTRCMTg0MEMKLToxMDJEMjAwMDJBMDhGRjExOTRCNDhFMzQ5RkI3OUVCNUMwNDAxREU3QUEKLToxMDJEMzAwMDIzMkVBMjg1MEQ5RDA4MkVFQzI4MkVBNjg1MjVENENGMDYKLToxMDJENDAwMDI5MjEwMjA5MDk0QzY4OTQxQTY4OTgyMEM5NDAyQTIxNEYKLToxMDJENTAwMDAyNjVBMDBCMkEyMjFFMkIyMjFEN0FCMTAyNjVBMDc5RTIKLToxMDJENjAwMEMwMjBEMTBGMkMyMTIzNjVDRkRFNjAwMDA4MkUyMTIxNDkKLToxMDJENzAwMDJEMjEyMzdFREJENTJCMjIxRTJGMjIxRDI1MjUwMjdCMTQKLToxMDJEODAwMEY5MDFDMEIwNjRCRkM0MTNFNzA0MkNCMDA3MjhCMDAwMzkKLToxMDJEOTAwMERBMjAwMzg4MEEyODgyNENDMEQxMEI4MDAwREJBMDY1QjIKLToxMDJEQTAwMEFGRTc2M0ZGQTYyQTJDNzRDMEIwMkMwQTAyNTgwRDhEMjEKLToxMDJEQjAwMDFDRTcyODlDQTA4QjIwMDhCQjExMDZCQjAyOUJBMTg5QTUKLToxMDJEQzAwMDM0OTlBMjYzRkY3OTAwMDAyNjI0NjhEQTIwREIzMERDMjYKLToxMDJERDAwMDQwREQ1MDU4MEZEQ0QyQTBEMTBGREEyMDJCMjAwQzU4NDgKLToxMDJERTAwMDBGNTNDMDIwRDEwRjAwMDA2QzEwMDYwNzNEMTRDMDgwQTcKLToxMDJERjAwMERDMzBEQjQwREEyMEMwNDdDMDIxMjNCQzMwMDMyODM4NTgKLToxMDJFMDAwMDA4MDg0Mjc3NDAwMjJEREMwMTY0ODE1NzFFRTZFMDE5NzQKLToxMDJFMTAwMEU2RTEyOUU2N0U2RERBMDUwMDUwODgwMDMwOENDMEUwREUKLToxMDJFMjAwMEMwMjAyNUEwM0MxNEU2REZCNkQzOEZDMEMwRDAwRjg3RUEKLToxMDJFMzAwMDE0MjQ0MDIyMEY4OTQwOTQxMDc3RjcwNEMwODEwNDgyNDMKLToxMDJFNDAwMDM4QzBGMTBCMjgxMEMwNDRDMDIyMDQ1NDAxMDRGRDM4REUKLToxMDJFNTAwMDAyNTIwMTAyRkUzODA4REQxMDgyMUMwN0VFMTAwRTZFRDEKLToxMDJFNjAwMDAyMEVERDAyMjQyQ0ZFQzBFMDA0RkUzODBBRUUxMDBFMzUKLToxMDJFNzAwMDg4MDIwRDg4MDI4REFCMUVFNkNGMDhEODAyMEU4ODAyQUMKLToxMDJFODAwMDk4QjBDMEU4MDQyODEwMEU1RTAxODRBMDI1QTEyNTA4OTIKLToxMDJFOTAwMDQ0MTEwODQ0MDIwNTI1MTQwNDU1MTEwNDM0MDJDMDgxNkMKLToxMDJFQTAwMDBFOEUzOTk0QjE4RkFBODQxMDlGQjQ3NTY2MEEyNkExM0MKLToxMDJFQjAwMDFGQzBGMjA2MjYxNDYwMDAwNzI2QTEyMEMwRjIwNjI2RDUKLToxMDJFQzAwMDE0MDU2NTAyMEY3NzAxMDc4NzM5MDVFNjEwMDc3ODEwQUEKLToxMDJFRDAwMDA4NjYwMjA2NTUwMjk1QjYyNUExMDQwQUU2MTEwODU4QUYKLToxMDJFRTAwMDExMDgyODAyMDg2NjAyOTZCN0MwNjA2NDQwNTY2NDkwRDQKLToxMDJFRjAwMDUzMDY3RTExQzBGNDg5QzI4OEMzMEIzNDBCOTY0NTk4RTMKLToxMDJGMDAwMDQ3OTk0NjE4RTZCNzlGNDEwNDU5MTEwRTk5MDIxRkU2RUEKLToxMDJGMTAwMEI1MDIwRTQ3MDhEODAyOUY0MDk4NDIwRTk5MDJCNDM4NzUKLToxMDJGMjAwMEMxRTAwRTk5MDI5OTQ0MkZBMDBDMENGOTExMTRFNkEzRUMKLToxMDJGMzAwMDFFRTY5QkE0RkZBRTk5MkU5Mjg1MjZGNENGMEU4ODBCMzkKLToxMDJGNDAwMDI4OTY4NUQxMEYyQkEwMEMwQ0JFMTExQ0U2OUMxRkU2MDkKLToxMDJGNTAwMDkzQUNCQkFGRUUyREUyODUyNkI0Q0YwRDNEMEIyREU2MzUKLToxMDJGNjAwMDg1RDEwRjAwQzA4MDA1MjgzODc4NDgwMjYzRkVBNTYzMkMKLToxMDJGNzAwMEZFOTkwMDAwNkMxMDA2QzBCMEMwQTZDMEMwNjU3MEYwMUQKLToxMDJGODAwMDg4MzBDMDMwMDg4NzE0MDg4ODQwNjU4MEQzQzBFMEMwMEUKLToxMDJGOTAwMDkxQzBENEMwODIyNTIwM0MwQjNGMTA5NzEyODMxQ0MwRTcKLToxMDJGQTAwMDcwMDg1ODAxMEQ1RDAxMDg5NzM4QzA4MDBCOTgzODA3RUMKLToxMDJGQjAwMDc3MTAwNDg4MTAwODY4MDIwODc3MDJDMDgwMEQ5ODM4REUKLToxMDJGQzAwMDJEM0NGRTA4ODgxMDBEOUUzODhEMkIwQUVFMTAwOEVFNjEKLToxMDJGRDAwMDAyMDdFRTAyMENCODEwMEZERDAyMDUzQjQwMEVERDAyQzkKLToxMDJGRTAwMDlENDA4OTIwMDQzRDEwMDg5OTExMEQ5OTAyMkQyMTA0NUUKLToxMDJGRjAwMDA5QTkwMjA4REQxMTk5NDE4NzJBMDVCOTEwMEQzRDAyODIKLToxMDMwMDAwMDBBQkIxMTBEQkIwMjA4NzcwMjk3NDQyODIxMjU4NzEyQkQKLToxMDMwMTAwMDA4MjgxNDA0ODgxMTA3MUU0MDA3RUUxMDBFOTkwMjc1NDcKLToxMDMwMjAwMDY2MDkyNjIxMUYwNjI2MTQ2MDAwMDYwMDI2MjEyMDA2QjgKLToxMDMwMzAwMDI2MTQwODY4MDI5QjQ3MDk4ODAyOTg0NjI5MjAwQ0QyNkEKLToxMDMwNDAwMEMwQzA4MDBDOUUxMTFCRTY1RDFGRTY1NEFCOTlBRkVFMkQKLToxMDMwNTAwMDJERTI4NTI4OTRDRjBEQUQwQjJERTY4NUQxMEYwMDAwMTQKLToxMDMwNjAwMDAwMUZFNjUwMkZGMDIyQzAzMDY1RkYyMEMwMzE2M0ZGMDMKLToxMDMwNzAwMDFCREQ0MDhFNTFDQUUwMEU3ODM2OTgxMDA4NzcwQ0IyRUUKLToxMDMwODAwMEFBQjFCQjhGNTAyRERDMTA5OEQ5OUZEODg5NTM4RjUyOEQKLToxMDMwOTAwMDk5MTE5OURCOUZEQTdFODMwQUIxQ0MyNTVDMTBDOTc4M0YKLToxMDMwQTAwMDYzRkZDRjAwODgxMDhEMTEwOEU3MEM5NzUxQUQ4REQ3QzUKLToxMDMwQjAwMEYwNzhEQjAxQjFGNzlENTM5NzUyODgzMEMwMzAwODg3MTQKLToxMDMwQzAwMDE0MDg4ODQwNjQ4RUM1NjVCRkExNjNGRjkzMDAwMDAwQUIKLToxMDMwRDAwMDZDMTAwNEQ3MjBCMDNBODgyMEMwMzA4MjIxQ0FBMTc0NzUKLToxMDMwRTAwMDJCMUYyOTcyMDQ2RDA4MEZDOTgxQzk5Mjg1NzVCMTMzRjAKLToxMDMwRjAwMEEyNTI3QTNCMEM3NDJCMDk2M0ZGRTkwMDAwNjQ5RkVCM0EKLToxMDMxMDAwMEQxMEZEMjQwRDEwRjAwMDA2QzEwMDhENjMwQzA3MDk1OUUKLToxMDMxMTAwMDE1REE0MDhFMzkxNEU2MjM5QTE0NjRFMDAyNjQ1MUY4RkIKLToxMDMxMjAwMDI5MjAwNjJBOUNGODY1QTI1QjJBMjEwMjBBMEI0QzY1MUQKLToxMDMxMzAwMEIyMUIyQzMyMDAxNUU2MTk3NEM3MDUyRDIxMjM2NUQzNjcKLToxMDMxNDAwMDIwMkU1MjlFMUFFNjE1NkZFODAyNjAwMjE3MkFBMjI2NjgKLToxMDMxNTAwMDY4QTAwODJCMjIwMDBBQkIwQzY1QjIwODJFNTI5RDFERTgKLToxMDMxNjAwMEU2MTA2NEUxRkY4QjM4NjRCMjI5OUUxNkM4QkM4RDY5RjUKLToxMDMxNzAwMDFFRTYwRDY0RDAwNTJFRTAyMTdCRUI0OTJFMjAwQzE4QjUKLToxMDMxODAwMEU2MDcwQ0VGMTFBOEZGMjlGMjg2QzE4Njc5OEI0QTE3NTIKLToxMDMxOTAwMEU2MDQwN0U3MEEyNzcyQTM2ODcwMDQ4ODIwNzc4OTM5NTQKLToxMDMxQTAwMDI1RjI4NTY0NTI5RTI3MjEyRTA3QjczNjA3QjkwQzZGOEEKLToxMDMxQjAwMDlEMDFEN0IwODk2OTZFOTI0MjI4MjAzRDdCODczQzhBNjkKLToxMDMxQzAwMDE1Q0RBRjYwMDAxOEMxQjI4QzIwMkEyMDBDNTgwRThCOTAKLToxMDMxRDAwMEQ1QTA2NEEyQTg4QjY4NjNGRkNCQzA1MDYzRkZDM0MwQjcKLToxMDMxRTAwMEUwNjAwMDAyMkU2MDAzMEU5QjBDNkVCMjBFREM3MDBDRDEKLToxMDMxRjAwMEVBMTFBQTZBMkFBQzI4NUJGRkI2RDdBMERBMjBEQjcwRjYKLToxMDMyMDAwMEMxQzQyRDIxMUY1ODBFMzM4QzI2OEIyN0Q0QTAwQ0JCOTQKLToxMDMyMTAwMDBDN0FCMzI1OEE2M0MwOTA5QTUzODg2Mjk5NTg5ODUyNjEKLToxMDMyMjAwMDhGNjU5RjU5OEU2NzlFNUI4RDY2OTc1NTlENUE4QjY4RkIKLToxMDMyMzAwMDdCN0I3NDhCMTVDRUIzNjAwMDBEREEyMERCNDA1ODBEMUMKLToxMDMyNDAwMEZENjVBMTA5NjNGRkNDMDBEQTIwREIzMDhDMTQ1ODBEM0EKLToxMDMyNTAwMEE0RDZBMEMwQzBDMEQxOUQxNTJDQTQwM0RBMjBEQjYwODkKLToxMDMyNjAwMERGNzBEQzUwQzBFMDI1NjAwMzlFMTAxRUU1RTYwQzVEQkIKLToxMDMyNzAwMDExQUQ2RDJEREMyODVCRkYzRjhFNjZBNUE4OEY2NzI4RkEKLToxMDMyODAwMDY0MDNBRjdGNzdGQjAxQjFFRTlFNjY5RjY3OEQyNjhDNEUKLToxMDMyOTAwMDI5QTRERDBEQ0MwQzlEMjY4QjY4MEMwQzQ4MkMyNTI1MTMKLToxMDMyQTAwMDA3QkIwQzlCNjg2M0ZFQzMyQzIwNjY4OTYxQjFDQzBDMDQKLToxMDMyQjAwMDBDNDcyQzI0NjY2RUM2MDI2MDAwQjQwOUZENTA2NUQwMzAKLToxMDMyQzAwMEFFQ0JCQjhFNjlDQkU3REI2MERDNTBERjcwREEyMDFFNTMKLToxMDMyRDAwMEU1RTEyRDYwMDNDMDgwOTgxMDBDREQxMUFENkQyRERDOTMKLToxMDMyRTAwMDI4NUJGRjI0OEIxNUM4NEY4QTI2ODkyOUE0QUE5QTI2MTEKLToxMDMyRjAwMDBBOTkwQzA5MDk0ODI5MjUyNTY1QjEzQkMwMjBEMTBGNDEKLToxMDMzMDAwMERCNjAyRDZDMjhERjcwREEyMEMwQzAxRUU1RDI5QzEwNzcKLToxMDMzMTAwMERDNTA1QkZFQjU2M0ZGQ0IwMDJEMjAzRDBENEQ0MDY1QkQKLToxMDMzMjAwMERERkQ2RkU1MjJEQTMwOEY0NTZERTkwQzhFQUEwRThFMzkKLToxMDMzMzAwMDE0QzlFMzdFRjMxMTJBQUMxMEMwOTAyOTI0NjcwOTBGNDkKLToxMDMzNDAwMDQ3NjRGRERCNjAwMTQxMDBDMDkxNjNGRkVEMDA4ODE1MUIKLToxMDMzNTAwMDY1ODE0Q0RBMjBEQjYwOEMxNDU4MEQ2MUMwMjBDMDkwNzAKLToxMDMzNjAwMDI5QTQwM0QxMEZEQTIwQzBCNjU4MERGMDYzRkZERTAwQTgKLToxMDMzNzAwMDhBMTYyQjIxMDQ1ODBDODdDMEEwMkEyNDY2OEI2ODYzMDgKLToxMDMzODAwMEZGM0UwMDAwMDAyQjlDRjk2NUIwQzVEQTIwNTgwQzhDN0MKLToxMDMzOTAwMDYzRkQ5NTAwMkIyMDBDMENCQTExQTVBQTJGQTI4NkMxQTMKLToxMDMzQTAwMEMyN0ZDMzAyNjAwMEZDMERCOTBBMjk5MkEzNjg5MDA3OEUKLToxMDMzQjAwMDhDMjAwOUNDMEM2NUMwRUIyNkEyODU2NDYwRTUyQzIwMkUKLToxMDMzQzAwMDY2ODkzMUIxQ0MwQzBDNDcyQzI0NjY2RkM2MDI3MDk2MEUKLToxMDMzRDAwMDBBREFFMDJCMjEwNDU4MEM2RjI3MjQ2Njg5MzA3Nzk3OEUKLToxMDMzRTAwMDRCMThFNTdGMURFNTgwOEEzMjhCMzNDMEY0MkMyMTA0MTUKLToxMDMzRjAwMDA5OUU0MDA2RUUxMTA0Q0MxMTBFQ0MwMjlGNjFDMUUwODMKLToxMDM0MDAwMDBFQ0MwMjlENjA4RjJCOUE2NjlCNjc5QzY0OTc2NTA4MjMKLToxMDM0MTAwMEZGMDI5RjYyMkYyMDBDMThFNTY5MENGRTExQTVFRTJEMEUKLToxMDM0MjAwMEUyODVBOEZGMjdGNENGMkREQzIwMkRFNjg1OEYxNTY1REEKLToxMDM0MzAwMEYwOTFDMDIwRDEwRjAwMDAyQTJDNzQ4QjE0NTgwNjRBM0EKLToxMDM0NDAwMEQyQTBEMTBGMDBEQTIwREJFMDU4MERCODYzRkVGRTAwRjkKLToxMDM0NTAwMDAwREEyMERCMzA4QzE0OEQxNTU4MEUzQUQyQTBEMTBGMzMKLToxMDM0NjAwMDAwMDA4ODE1Qzg4OERBMjBEQjMwNTgwQzk3MkEyMTAyMjIKLToxMDM0NzAwMDY1QUVEQUMwOTQwOUE5MDIyOTI1MDI2M0ZFQ0ZEQTIwREQKLToxMDM0ODAwMDJCMjAwQzU4MERDMzYzRkVDNDI3MjQ2OERBMjBEQjMwRTAKLToxMDM0OTAwMDJDMTIwNDJEMTIwNTJFMEE4MDU4MEM5QzYzRkM4MDAwMEYKLToxMDM0QTAwMEMwMjBEMTBGREEyMDU4MERBMThBMTVDREExREEyMDAzNTIKLToxMDM0QjAwMDNCMDIyQzEyMDQ1ODBEMEEyN0E0MDNDMDIwRDEwRjAwOTAKLToxMDM0QzAwMEMwMjBEMTBGMkEyQzc0OEIxNDU4MDYyN0QyQTBEMTBGRkMKLToxMDM0RDAwMDZDMTAwRTI4MjEwMjk0MTAwODA4NEM2NTgzNUUxRkU1Q0QKLToxMDM0RTAwMDJGMjlGMjlFNkY5ODAyNjAwMzYyMURFNTJCMjlEMjI2RDgKLToxMDM0RjAwMDY4OTAwODJBMjIwMDA5QUEwQzY1QTM1MDJDRjI5RDY0NEEKLToxMDM1MDAwMEMzNEEyQjIwMEMwQ0I2MTFBRjY2Mjg2Mjg2QzFFQzc4M0EKLToxMDM1MTAwMEUzMDI2MDAzNDIxOUU1MjIwOUI5MEEyOTkyQTM2ODkwREYKLToxMDM1MjAwMDA3OEEyMDA5QUEwQzY1QTMyRTI0NjI4NTY0NDMyOEMwNUIKLToxMDM1MzAwMEUxMkEzMTA5QzA3MDI3MjQ2Njg5MzU5QTEyOTkyQTg4QjAKLToxMDM1NDAwMDM2OTkxMzk4MkI4OTM3OTgxNDk5MkM4ODM4OTkxNTA4MkYKLToxMDM1NTAwMDU4MTQ5ODE2OTgyRDg5MzkyQTI1MDQyRTI1MUQyOTI1QjkKLToxMDM1NjAwMDFDMjgzMDI4QzA5MjI4MjQzQzJBMzAyOTA4MDg0Nzk4NzMKLToxMDM1NzAwMDE3MDk4OTAxMkEyNDNEMkEzMTE1OTkxODBBMDk0MTA5OTgKLToxMDM1ODAwMEE5MEMyOTlDRUMyOTI1MUY3RTg3MTkyRDJBMDAwREEwNDYKLToxMDM1OTAwMDYwMDAwODNFMDEwQTNFQjFBRDA4REEzOTBFQUExMTBBRjAKLToxMDM1QTAwMDk5MEMyOTI1MUYyNzIxMUYxOEU1MkMwNzgxNjAwMTA4ODgKLToxMDM1QjAwMDNFMDAwRDNFQjE4QTBEQTgzOTJEOUNGQzJEMjUyMEMxNjEKLToxMDM1QzAwMDkwMDk4ODM2MDhERDFDMDg3NzFDODkzRDhBM0MyRTI2MjgKLToxMDM1RDAwMDEzMkUyNjE0MkUyNjE1MkUyNDZCMjkyNTIyMkEyNTIxNkEKLToxMDM1RTAwMDI4MjAxNEMwQTAyNzI1MkUyRDI1MkYwODA4NDMyRDIxODMKLToxMDM1RjAwMDFDMjgyNDE0QzA3MDI3MjUyNDI3MjUyNTI3MjUyQzI3OUYKLToxMDM2MDAwMDI2MTgyNzI2MUIyNzI0NjcyNzI0NjgyOTMyMTEyNzI1RjcKLToxMDM2MTAwMDIzOTkxOTZFRDIxNTZEMDgwQUIxQUEwMEExMDQwMEU5MTgKLToxMDM2MjAwMDFBN0Q5QjA1NjNGRkVFMDAwMDAwODkxOTFERTRGREMwQjMKLToxMDM2MzAwMEUwQzA3MjlCMUQ4ODEzOTUxQjlGMUY5QzFFOTYxQzFDMkYKLToxMDM2NDAwMEU1MDgyNjIwM0RDMEYwMDYwNTQwMDhEQjE0MDc2NjAxQUEKLToxMDM2NTAwMDBEODgxMEMwNzEwNTdFMzgwNjdGMzg4NTEyMEJGRjEwNkIKLToxMDM2NjAwMDE2RTRFNjBBRUUxMDk2NDAwRkVFMDIwRDU1MTFCMEFGQ0IKLToxMDM2NzAwMDA5RkYxMTBGRUUwMjFGRTRGOTA4NTUwMjBGRUUwMkMwMTgKLToxMDM2ODAwMEY0OUY0MThBMjA5RjQ5OTY0ODlDNEI5QjRFOUQ0MzlFQTgKLToxMDM2OTAwMDQ2OEQxNjFFRTREQThCMTVDN0NGOUM0RDlDNEM5QzQ1N0QKLToxMDM2QTAwMDlDNDQwQkQ4MTQwRUFFMDIwREJCMTA5RTRBOUU0MjA4REQKLToxMDM2QjAwMDU1MDI5NTRGMEQxODE0MTVFNENEMEQ4ODExMDU4ODAyOUIKLToxMDM2QzAwMDk4NDcxOEU0RTg4NTI2MkU0NjEyMkU0NjFBMkU0NjIyRTIKLToxMDM2RDAwMDI2NDYxMDI2NDYxODI2NDYyMDJGNDYxMTJGNDYxOTJGMUIKLToxMDM2RTAwMDQ2MjEyODQ2MjQyODQ2MjYyQzQ2MTQyQzQ2MTU5NTExOUEKLToxMDM2RjAwMDhDMTcxOEU0REQwNTA1NDg4RjE4MDU1NTExMDkwNjQ4OTMKLToxMDM3MDAwMDI4NDYxMzg5MTQwRTY2MTEwNjU1MDIwRjdGMzkwQzNFQTgKLToxMDM3MTAwMDQwMDJFRTEwMTdFNEQ2MEQ5OTExMEMyNjQwMEY2NjExRTkKLToxMDM3MjAwMDBCOTkwMjBDMEM0MDhCMUQwMUNDMTAwNkZGMDIyNzQ2QTIKLToxMDM3MzAwMDFCMjk0NjE2QzA3MDI5MzExNjE2RTRDRDBFQ0MwMjA1QTEKLToxMDM3NDAwMEZGMDIxRUU0OUMxNUU0Q0IyRjQ2MTcyNjQ2MUNDMEYwNTIKLToxMDM3NTAwMDg2MUMyRjQ2MUQyRjQ2MUYyRjQ2MjcyNTQ2MjMwRUNDOUQKLToxMDM3NjAwMDAyODUxQjJDNDYxRTFFRTRDNDFDRTQ4RThGMUY4Q0M3RDIKLToxMDM3NzAwMDJFNDYyNUFEQ0MyODIwMDYyOTI0NkEyNDMxMTc5QzJERkQKLToxMDM3ODAwMDI0MjUyMzhDMUVDQzgxMjcyNDA3QzBENzdGOTcxODhFMzEKLToxMDM3OTAwMDExMDkyODQxOUUyOTY0ODA4RTY0NDA5OEMwOTgwOTQ5ODcKLToxMDM3QTAwMDM2MkQyNDA2NjAwMDBCMDA2NDQwNzVDMDk4MDk0OTM2MjgKLToxMDM3QjAwMDJEMjQwNjAxQzQwNDJEMEFBMDJFMjEwNDI4NjI4NTA4QTgKLToxMDM3QzAwMEVFMTFBRDg4Mjg2Njg1ODYzRjg0M0UyRDMyMTAwNjQ4NkUKLToxMDM3RDAwMDE4OThDMzAwQzQwNDA2NDYxODE4RTQ3ODA0QzQ1MzAwQkIKLToxMDM3RTAwMDY2MTEwNkREMDJBOEI4Mjc4NENGOURDNDA5MDY0RTk2NEYKLToxMDM3RjAwMEM1MURFNEEzMDVBNjExMDY0NDAyMTZFNEEwOURDMDA2NUIKLToxMDM4MDAwMDQ0MDI5NEMyQzA0MzA0RUUwMjlFQzExNEU0NjMyNkYyNTMKLToxMDM4MTAwMDlEMjc0NEEyMjY2QzE4MjZGNjlENjU1MDQyQzAyMEQxRjMKLToxMDM4MjAwMDBGQzA5MDYzRkY4OTAwMDA2NTRGNzBDMDk4QzBFODJFRkMKLToxMDM4MzAwMDI0MDY2M0ZGN0QyRDI0MDZDMDkwNjNGRjc1Q0M1N0RBMDQKLToxMDM4NDAwMDIwREIzMDhDMTA1ODBDMjZDMDIwRDEwRjAwREEyMEMwQUQKLToxMDM4NTAwMEI2NTgwQ0I2NjNGRkU1MDBEQTIwNTgwQ0I0NjNGRkRDMDEKLToxMDM4NjAwMDJBMkM3NDhCMTA1ODA1NDBEMkEwRDEwRjZDMTAwNjI4NUEKLToxMDM4NzAwMDIwMDY4QTMzNkY4MjAyNjAwMTYxQzA1MDEzRTQ0NzI5MzkKLToxMDM4ODAwMDIxMDIxNkU0NDY2OTkyMDQyNTI1MDJEOTUwMkMyMDE1MDAKLToxMDM4OTAwMDlBMjgxNEU0NDQ4RjI2MjcyMDBCMEFGRTBDMDQ3NzA5OEIKLToxMDM4QTAwMDJCNzExQzY0RTEzOThFNDI4RDQzNkZCQzAyNjAwMTZGNDUKLToxMDM4QjAwMDAwRTEwNEIwQzgwMDg4MUEwOEE4MDgwOEQ4MDI5ODI3QjAKLToxMDM4QzAwMDJCMjAwNjY4QjMyRUNFOTcyQjIyMUUyQzIyMUQwMTExMTEKLToxMDM4RDAwMDAyN0JDOTAxQzBCMDY0QjAxNzJDQjAwNzI4QjAwMERBNzEKLToxMDM4RTAwMDIwMDM4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGODIKLToxMDM4RjAwMEU3QzAyMEQxMEYyRDIwNjQ2NERGQ0E4QjI5QzBGMTBCRjMKLToxMDM5MDAwMEFCMEM2NkJGQzAyQjIwMEMwQ0JDMTFBNkNDMjhDMjg2MDkKLToxMDM5MTAwMDJFMEEwODc4RUI2MTFFRTQyMjBFQkUwQTJFRTJBMzY4OEUKLToxMDM5MjAwMEUwMDUyODIyMDA3RTg5NEYyOUMyODUxRUU0MkU2NDkwN0UKLToxMDM5MzAwMDQ2MUZFNDNDOUU5MEMwODQ5ODkxMjgyMDBBOTU5MzBGREUKLToxMDM5NDAwMDg4MDI5ODkyOEUyMDBGRUUwMjlFOTQyRjIwMDc4ODI2RTAKLToxMDM5NTAwMDJGOTUwQTk4OTY5QTk3MkUyMDA2MjUyNDA3NjhFMzQzMDgKLToxMDM5NjAwMDI5MjEwMjFBRTQxNjJEQzI4NUFBQkEyRERDMjAyREM2MDMKLToxMDM5NzAwMDg1MjVBNENGNjNGRjRFMDAyQjIwNjVDQkJEQzBDMjJDOTQKLToxMDM5ODAwMDI0NjVDOUY2MDVFNDMxMDAwMjAwMkU2MjgyMUZFNDFFQTAKLToxMDM5OTAwMDJENDEwMjBGRUUwMjJFNjY4MjBERTQzMTI5MjEwMjYzRDEKLToxMDM5QTAwMEZGMjMwMDAwNjRERkI4ODk0MjI4MjAxNjAwOTEwNDBEMkYKLToxMDM5QjAwMDg4MEMwMDg4MUFBOEE4OTgyOTYzRkZBMzhDMjAyRDMyQjAKLToxMDM5QzAwMDIxQjFDQzlDRDAyQjMyMjEyQTMyMjNCNEJCMkIzNjIxRkYKLToxMDM5RDAwMDdCQTlBOTJEMzIyMjJEMzYyMTYzRkZBMEMwMjBEMTBGNTMKLToxMDM5RTAwMDlGMjcyNTI0MTVBQ0I4Mjg3NTFDMkIyMDA2QzBDMTJFOTYKLToxMDM5RjAwMEJDRkU2NEUwQUI2OEI3NzcyREJDRkQ2NURFQzcyRDIwNEIKLToxMDNBMDAwMDY0QzBGMDY0RDA4NjhFMjkwRUFFMEM2NkUwODlDMEYxRTkKLToxMDNBMTAwMDI4MjA1QTI4OENGRTA4Q0YzODY1RkVFODYzRkY1ODAwM0UKLToxMDNBMjAwMDAwRTAwNDkzMTBDMDgxMEFGMzBDMDM4MzM5Qzc4RjA4QTgKLToxMDNBMzAwMEQ4MDMwOEE4MDEwOEY4MEMwODA4MTlBODMzMDNDODBDMTMKLToxMDNBNDAwMEE4QjgyODc1MUMwMzBCNDcyQjI0MTU4MzEwQ0JCNzAwOEYKLToxMDNBNTAwMEUxMDRCMEJDMDBDQzFBQUNBQzBDREMwMjlDMjc2NTlFMjcKLToxMDNBNjAwMDVFQzBCMjBCOTkwMjA5MDk0RjI5MjUwMjYzRkU1MDAwN0UKLToxMDNBNzAwMDJEMjA2QTBEMkQ0MTY1REY3RURBMjBDMEIwNTgwQzcyMTIKLToxMDNBODAwMDY0QUYxOEMwRjE2M0ZFRUY5RjI3NjNGRkQwMkUyMjFGQTMKLToxMDNBOTAwMDY1RUUzMjYzRkY3OTAwMDAyODIyMUY2NThFMjc2M0ZGRTEKLToxMDNBQTAwMDZFMjUyNDA2MjUyNTAyQzA5MDYzRkUxOTZDMTAwNjY1NUMKLToxMDNBQjAwMDcxMzMyQjRDMThDMEM3MjkzQzE4QzBBMUMwODAwOUE4N0QKLToxMDNBQzAwMDM4MDgwODQyNjQ4MTEwMUNFM0IxMUFFM0IyMkFDNjdFQUEKLToxMDNBRDAwMDJBNUNGREQzMEY2REFBMDUwMEIwODgwMDkwOEM4ODQwNDkKLToxMDNBRTAwMEMwQTAwODg5NDcxRkUzREIwOTBCNDcwODRDNTAwODBEQUQKLToxMDNBRjAwMDUzMDRERDEwQjRDQzA0Q0MxMDBENUQwMjlEMzEwQ0JCMjEKLToxMDNCMDAwMDAyOUIzMDg4NDM4RTIwOTgzNTBGRUUwMjlFMzI4RDI2MjAKLToxMDNCMTAwMEQ4NTBBNkREOUQyNjhFNDBDMDkwMEU1RTUwNjRFMDk3ODIKLToxMDNCMjAwMDFDRTNDMTFFRTNCMDAzOEIwQkMwRjQ5RkIxOUVCMDJEMEMKLToxMDNCMzAwMDIwMEE5OUIzMENERDAyOURCMjhGMjAwQ0ZGMDI5RkI0QzYKLToxMDNCNDAwMDhFMjYyRDIwMDc5RUI2OEMyODJEQjUwQTlDQjcyOTI0RDkKLToxMDNCNTAwMDA3MkYyMDA2MkIyMDY0NjlGMzM5Q0JCNjFERTM5MjIzOEYKLToxMDNCNjAwMDIwMTY4REQyMEIzMzBDMDBEMTA0MDAzMzFBQTNDM0I0M0EKLToxMDNCNzAwMDhEOTMyOTIyMjAwQzEzRTM5MTFGRTM4ODBDMkUxMUFGQTMKLToxMDNCODAwMEVFQTMyMjI5MjRDRjJGRTI4NUQyQTAwRkREMEIyREU2NTQKLToxMDNCOTAwMDg1RDEwRjAwQjQ4QzJFMjAwQzBDRUIxMTFGRTM4ODFENzcKLToxMDNCQTAwMEUzN0ZBRkVFQURCQjIyQjI4NTI5RTRDRjAyQzIwQjIyODgKLToxMDNCQjAwMEI2ODVEMkEwRDEwRjAwMDAyRTIwMEMwQ0VCMTExRkUzMTQKLToxMDNCQzAwMDdGMUNFMzc2QUZFRUFDQkIyMkIyODUyOUU0Q0YwMjgyNDQKLToxMDNCRDAwMDBCMjJCNjg1RDJBMEQxMEZDMEQwMEJBRDM4N0RDODAyNjQKLToxMDNCRTAwMDYzRkVFQzYzRkVFMDhFNDAyNzJDNzQ3QkVFMTJEQTcwRUQKLToxMDNCRjAwMEMwQjMyQzNDMThERDUwNTgwQTc3QzA5MDg4NDA2M0ZFNTMKLToxMDNDMDAwMEUzMDY2RTAyMDIyQTAyMDMzQjAyREM0MERENTA1ODAwNEMKLToxMDNDMTAwMDA0OUExMERCNTBEQTcwNTgwNDU0ODgxMDYzRkVGNjAwRTIKLToxMDNDMjAwMDZDMTAwODJFM0MxOEMwQTA5MjE2MUZFMzY4OEM0MEFGQTEKLToxMDNDMzAwMDJGMEM4QzQ3QzAyMzA0Q0IwQkREQjA3RkIzMDIyREJEMEUKLToxMDNDNDAwMEY4RDlEMEMwQjA3NUMzMDI2MDAwOEQ5RjE0NkQwODRGQzUKLToxMDNDNTAwMDhEOTAwRDZEMzZBREFBMEQ2NjBDMEVCNzBCMEVCRjBBMUEKLToxMDNDNjAwMDlERjBCODc3Qjg5RkQ4RjAwMDgwODgwMDcwOEM5NzExQ0QKLToxMDNDNzAwMDg3OTA5ODEwOTcxNTY4QjEyQUIyMjI3N0QzMkQ4ODkxMzIKLToxMDNDODAwMEMwRDBDQjhGOTg5MDI3OUMxMDAwNzA4ODk3MTIwMEYwQkUKLToxMDNDOTAwMDhDOUYxMzlEOTE2NDYwQTBDMDgxMDhCQjAzNzVDQjM4RDUKLToxMDNDQTAwMDYzRkZBOTAwQjEyMjJFRUMxODYzRkZDRTg1OTIwRDc3MzkKLToxMDNDQjAwMDBDODY5Mzk3OTBBNkQ2N0Q2QjAxQjE1NTk1OTI5NjkzRkQKLToxMDNDQzAwMDg5NDI2MDAwMTdCM0NDMjk5QzE4ODgxNEREOTA3ODkzNDIKLToxMDNDRDAwMDAyMkQ5REY4RDlEMDYzRkZCQjg5NDJEQTkwODUxNjBDN0UKLToxMDNDRTAwMDBENDcyRDQ0MDIxQkUzNjc5MjMxOUIzMDg2NDM3QTkxNDYKLToxMDNDRjAwMDI2MUJFMzU4MUVFMzY1ODk1MDBFNjYwMTk2MzUwQjk5MjUKLToxMDNEMDAwMDAyOTkzMjg4NDIwQTg4MEM5ODQyODc1NkE3QTc5NzU2OEMKLToxMDNEMTAwMDhGNDRBRkFGOUY0NEQxMEYxQkUzNEY4OTUwOTYzNTBCQjMKLToxMDNEMjAwMDk5MDI5OTMyODg0MjBBODgwQzk4NDI4NzU2QTdBNzk3MjkKLToxMDNEMzAwMDU2OEY0NEFGQUY5RjQ0RDEwRjg5NDI2M0ZGOUUwMDAwNkUKLToxMDNENDAwMDZDMTAwNjFGRTM1MjkzMTBENjMwODgzMEMwOTEwODYzODAKLToxMDNENTAwMDUxMDgwODQ3MDU5ODM4OTgxMTI4MjEwMjI5M0NGRDA4ODgKLToxMDNENjAwMDA4NEM2NTgxNTc2NTkxNTQyQTYyMDMwQTJCNTA2NUIxNEUKLToxMDNENzAwMDdFMEE2ODE0MkUwQUZGN0NBNjBBMkMyMDVBQ0NDNDJENzkKLToxMDNEODAwMDBBMDIyRDI0NUE3OEUwMDI2MDAyMDg4QTI4ODkyNjE4M0YKLToxMDNEOTAwMEUzNDAwQTk5MEM2NTkyMDMyRTIwMEIxQ0UzM0YwOEVFQ0EKLToxMDNEQTAwMDBCMkVFRDAxMkRFMDMyMkVFMDMzMDhERDExMEVERDAyODkKLToxMDNEQjAwMDFFRTMzOUFGREQwRUREMDEwRENDMzcyRDIwMEM4OTYwRkYKLToxMDNEQzAwMEMxRTA3Qjk2MjMxQUUyRjc4QjYyMkFBMDIxOUMxMjdCMkEKLToxMDNERDAwMEEzMTZEQUQwQzFCMDBCNEIzN0I0QkI4QzIwNTgwQjg3N0QKLToxMDNERTAwMDhDMTJEQkEwQ0VBQjYwMDFCRjBFNEUzNzFCRTJFQzBDOTkKLToxMDNERjAwMERBMTFBQkFBMjhBMjg2QjhFRTc4RUIzNTFFRTJFOTBFRkUKLToxMDNFMDAwMERFMEEyRUUyQTM2OEUwMDQ4ODIwN0U4OTI0MkJBMjg1QTYKLToxMDNFMTAwMDY0QjBBMjg3NjJERTcwMEM3OTM2OUIxMzg4MjY4RDI3RUEKLToxMDNFMjAwMDA5N0EwQzA4REQwQzZGQUQwRTc3RDMxMDdFN0I2OTYwQ0MKLToxMDNFMzAwMDAwMUZDMEIwNjNGRkQ4MDBENzkwNjNGRkVCOUMxMkRBN0QKLToxMDNFNDAwMDIwREI3MDU4MEFGQzhCMTM4QzEyNjVBMDZGOEU2MjdFOEIKLToxMDNFNTAwMDdCNDY5QzEyOUIxM0NDNUZEQTIwOEIxMDA0NEMwMjU4REIKLToxMDNFNjAwMDBBQTBENkEwOEIxMzI1MEEwMURFNzBEQTIwREM2MEREMDMKLToxMDNFNzAwMDQwNUJGRjZCOEMxMkQ5QTAyRDIwMENDMEUwMUJFMkM3NjkKLToxMDNFODAwMDE3RTJDRjBDREExMUE3RDdBQkFBMkJBMjg1MkU3NENGREQKLToxMDNFOTAwMDBCOTkwQjI5QTY4NTYzRkYyNERBMjBEQzYwREQ0MERFNjgKLToxMDNFQTAwMDcwODkxMTI4MjAwN0RGNTBBOTg4MjgyNDA3NUJGRUZGQUUKLToxMDNFQjAwMEQyQTBEMTBGMDAwMERCRDBEQTIwNTgwQjFDNjU1MEYzRTQKLToxMDNFQzAwMDJBMjAxNDBBM0E0MDY1QTBFRURCNjBEQzQwREQzMERBREYKLToxMDNFRDAwMDIwNTgwOThFMUZFMkVFRDZBMDY0QTBENzg0QTE4M0EwNEIKLToxMDNFRTAwMDA0MDQ0NzAzMDU0Nzk1MTEwMzYzNTFDMDUxNjNGRTY4RkQKLToxMDNFRjAwMDJDMjAwNjI4Q0NGRDY0ODBBODY4QzcwNEMwOTMyOTI0MjAKLToxMDNGMDAwMDA2QzBDMThFNjQxOUUyQTc5RTI2OUUyOTlFMjg4OTkyMkEKLToxMDNGMTAwMDlFMjcwMDkxMDQwMENDMUEwMDkwMDRCMEM4OEQ2NTA4NUIKLToxMDNGMjAwMEVFMDFBRUNDMEQwRTVFMDFFRTExQUVDQ0IwQ0MyRTBBODEKLToxMDNGMzAwMEZFMEMwQzE5MEVDQzM2QzBFMjBDMEM0NzBFQ0MzNzJDMDQKLToxMDNGNDAwMDI0MTZDMEIwMkIyNDA3MkMyMDA2MUJFMjlGMEEwRTQ1MjYKLToxMDNGNTAwMDBEMDg0MjI4MjQwQjJFMjQwQUI0ODkyOTI0MEM3REI4OEMKLToxMDNGNjAwMDVBMjkyMDE2MEE1RDUyQjA5RTBFREQzNjJEMjQ2NDJCOTAKLToxMDNGNzAwMENDRkQ2NUJERkIwRDBDNDc2NENERjUxREUyOEE4ODI4OUMKLToxMDNGODAwMDhERDIwQzlCMEMwMEQxMDQwMEJCMUFBQjg4OTgyOTYzMUUKLToxMDNGOTAwMEZEREUwMDAwMUNFMkI5NjNGRTIwMDAwMDFDRTJBRjYzRkUKLToxMDNGQTAwMEZFMTg4RDY1NjNGRkEyMDAwMERBMjAyQjIwMEM1ODBBNTIKLToxMDNGQjAwMEY4NjQ1RjBCQzAyMEQxMEZDMDIwRDEwRkMwOTNDMEUzQzUKLToxMDNGQzAwMDJFMjQxNjYzRkY5RDAwMDA2QzEwMDRDMDYwMTdFMjcyN0YKLToxMDNGRDAwMDFERTI3NUMzODEyOTMxMDEyQTMwMDgyOTI0MEE3OEExRkMKLToxMDNGRTAwMDA4QzNCMjdCQTE3MkQyNjBEMTBGQzBDMTY1NTA1MTI2MDcKLToxMDNGRjAwMDI1MDIyQUQwMjAyRjIwMEIyOTBBRkIyQjIwMTQyRTIwNEIKLToxMDQwMDAwMDE1MjYyNDE1MDlCQjAxMERGRjA5MjhGMTFDMkIyNDE0Q0EKLToxMDQwMTAwMEE4RUUyRUY1MUM2NEEwQjUyQjIyMUUyODIyMUQwMTExMkUKLToxMDQwMjAwMDAyN0I4OTAxREI2MDY0QjAxNzJDQjAwNzI4QjAwMERBOEUKLToxMDQwMzAwMDIwMDc4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGMjYKLToxMDQwNDAwMEU3REIzMERDNDBERDUwREEyMDU4MDBEODI5MjEwMjA5QjYKLToxMDQwNTAwMDBCNENDQUIyRDJBMEQxMEYwMENDNUEyQzMwMDg3QkMxNzUKLToxMDQwNjAwMDM3MkVEMDIwNjRFMDJEMDIyQTAyMDMzQjAyREM0MEREMjMKLToxMDQwNzAwMDUwNTgwMENFRDJBMEQxMEYyQjIwMTRCMEJCMkIyNDE0NEIKLToxMDQwODAwMDBCMEY0MTY0RjA4MjdDQjdDQUMwQzEwQzlDMDIyQzI1ODYKLToxMDQwOTAwMDAyRDJBMEQxMEZDMDIwRDEwRjJFMjAwNjY5RTJDMTJGN0QKLToxMDQwQTAwMDIxMDIwRjBGNEM2OUYxQjgyNjI0MDYyNjI1MDIyQjIyODcKLToxMDQwQjAwMDFFMjgyMjFEMkEyMDBCMjkyMDE1MERBQTA5MkNBMTFDMUYKLToxMDQwQzAwMDI2MjQxNUFDOTkyOUE1MUM3QjgxNEE2MDAwNDlCMEJCMDgKLToxMDQwRDAwMDJCMjQxNDBCMEQ0MUNCRDY3Q0I3MDIyQzI1MDIyQjIyQUUKLToxMDQwRTAwMDFFMkUyMjFEN0JFOTAyMkIwQTAwNjRCMDE3MkNCMDA3OUMKLToxMDQwRjAwMDI4QjAwMERBMjAwNzg4MEEyODgyNENDMEQxMEI4MDAwNDMKLToxMDQxMDAwMERCQTA2NUFGRTdDMDIwRDEwRjI2MjQwNkQyQTBEMTBGRDcKLToxMDQxMTAwMDI2MjQwNjYzRkZDN0RCNjAxREUyMjM2NEJGNDIyQ0IwODgKLToxMDQxMjAwMDA3MjhCMDAwREEyMDA3ODgwQTI4ODI0Q0MwRDEwQjgwMEIKLToxMDQxMzAwMDAwREJBMDY1QUZFNzFERTIxQjYzRkYyNDZDMTAwNDI4QzEKLToxMDQxNDAwMDIwMDZDMDY0NkY4NTY0Q0E1QjI5MjAxNDdEOTcyNkRBMzcKLToxMDQxNTAwMDIwREIzMERDNDAwNTVEMDI1ODAwMTkyOTIxMDIwOTBBRTQKLToxMDQxNjAwMDRDQzhBM0MwMjBEMTBGMDBDMEIxMEI5QjAyMkIyNTAyNkQKLToxMDQxNzAwMEMwMjBEMTBGMDAwMDAyMkEwMjAzM0IwMjJDMEEwMTU4ODIKLToxMDQxODAwMDAwQzlDOUFBREEyMERCMzBEQzQwNTgwOUQ1MjlBMDExQzIKLToxMDQxOTAwMEQzQTA3RTk3MDgyQzBBRkQwQzlDMDEyQ0E0MTFDMDUxQzEKLToxMDQxQTAwMDJEMjAxNDA2REQwMjJEMjQxNDYzRkZBMkRBMjBEQjMwNUIKLToxMDQxQjAwMERDNDBERDUwQzBFMDU4MDk1NUQyQTBEMTBGMDAwMDAwMEUKLToxMDQxQzAwMDZDMTAwNjE2RTFGNjFDRTFGNjY1NTEzQkMwRTExN0UxMDMKLToxMDQxRDAwMEYyMjgyMTAyOEIyMDA4MDg0QzY1ODA3QzI5MzIwMDA5RDYKLToxMDQxRTAwMDY5NTE2OTkzNzMyQTYyOUU2RUE4NDgyQTcyMjY2OEEwNTQKLToxMDQxRjAwMDAyN0FCOTNGMkE2MjlEQjQ0RkNCQTcyQjIwMEMwQ0JEOEQKLToxMDQyMDAwMDExMDZERDA4MjhEMjg2NzhGQjE1MENCRjBBMkZGMkEzMTEKLToxMDQyMTAwMDY4RjAwNDg4MjA3Rjg5MDcyREQyODVEMzBGNjVEMDYwOTAKLToxMDQyMjAwMDJBMjEwNDE5RTIxRUQzMEY3QTlCMUREQTIwNTgwODUzNjUKLToxMDQyMzAwMDYwMDAyNTAwMkMyMTA0MUJFMjE5N0NCQjE0REEyMEMwOEQKLToxMDQyNDAwMEI2NTgwODRFQzk1NDYwMDBFRkRBMjA1ODBBMzg2MDAwQUEKLToxMDQyNTAwMDA3MDBEQTIwQzBCNjU4MEEzNTY1NTBEQ0RDNDBEQjMwOTgKLToxMDQyNjAwMDhEMzBEQTIwMEQ2RDUxNTgwOEE5RDNBMDY0QTBDOTFDNjcKLToxMDQyNzAwMEUxQ0NDMDUxODRBMThFQTAwNDA0NDcwRTBFNDc2M0ZGMTkKLToxMDQyODAwMDRGMkIyMTA0QzA4Qzg5MzFDMDcwREY3MDA5Rjk1MDA5QUYKLToxMDQyOTAwMDhGMzg2RUI4MTcyQzIwNjZBRUNDMEMwQzQ3MkMyNDY2RDkKLToxMDQyQTAwMDdDRkIwOTlEMTA1ODA4QkI4RDEwMjcyNDY2OTREMTFFRjUKLToxMDQyQjAwMEUxRDJCOERDOUVEMDY1NTA1NkMwRDdCODNBQzBCMUMwODQKLToxMDQyQzAwMEYwMENCRjM4MEYwRjQyQ0JGMTE5RTFCMDE4RTFCMjI4NjIKLToxMDQyRDAwMDk2N0VCMDRCRDMwRjZEQkEwNTAwQTA4ODAwQzA4QzJDMjEKLToxMDQyRTAwMDIwMENDMDIwMURFMUI2MENDRjExQTZGRjJFRjI4NUFEMkIKLToxMDQyRjAwMENDMjdDNENGMEU0RTBCMkVGNjg1RDEwRkMwODAwQUI4NDYKLToxMDQzMDAwMDM4NzhEMENENjNGRkMxMDA4RTMwMEUwRTQ3NjNGRUJERkUKLToxMDQzMTAwMDJBMkM3NDJCMEEwMTA0NEQwMjU4MDhBRTJGMjAwQzEyQ0YKLToxMDQzMjAwMEUxQTcwQ0Y5MTFBNjk5Mjg5Mjg1QTJGRjI3RjRDRkQyMTQKLToxMDQzMzAwMEEwMDg0ODBCMjg5Njg1RDEwRkMwMjBEMTBGMDAwMDAwOUYKLToxMDQzNDAwMDZDMTAwNEMwNjBDQjU1REIzMERDNDAwNTVEMDIwMjJBRjYKLToxMDQzNTAwMDAyNUJGRjlCMjkyMTAyMDkwODRDQzg4MkQyQTBEMTBGMjEKLToxMDQzNjAwMDJCMjAxNEIwQkIyQjI0MTQwQjBDNDFDQkM1N0RCN0VCMTkKLToxMDQzNzAwMEMwQzEwQzlDMDIyQzI1MDJEMkEwRDEwRjAwMDAwMjJBNDEKLToxMDQzODAwMDAyMDMzQjAyMDY2QzAyQzBEMEM3RjcyRTIwMTQyODMxNkUKLToxMDQzOTAwMDAxMjYyNTAyMjgyNDBBMEZFRTAxMkUyNDE0NTgwMTBDQjAKLToxMDQzQTAwMDYzRkZBMzAwMjYyNDA2RDJBMEQxMEYwMDZDMTAwNjI4QkMKLToxMDQzQjAwMDIxMDJENjIwMDgwODRDNjU4MDk5MkIyMDBDMTJFMTc3NDkKLToxMDQzQzAwMDBDQjgxMUEyODgyQTgyODZCNTQ5N0E5MzAyNjAwMDkzQkMKLToxMDQzRDAwMDE5RTE3NDA5QjkwQTI5OTJBMzY4OTAwODJBNjIwMDA5QjAKLToxMDQzRTAwMEFBMEM2NUEwN0UyODgyODUxQ0UxN0Y2NDgwNzU5QzgwNzQKLToxMDQzRjAwMEI4ODdCMTRCOUI4MTlCMTA2NTUwNzJDMEE3RDk3MDI4QkMKLToxMDQ0MDAwMDBBMDFDMEQwMDc4RDM4MEQwRDQyQ0JEQjFGRTE2MDFFQzUKLToxMDQ0MTAwMEUxNjEyRUY2N0VEODMwRDMwRjZENEEwNTAwODA4ODAwMEEKLToxMDQ0MjAwMDkwOENDMDgwMkYzMDA4MkY3NDAwMjk2MDBDMUFFMTYzMzMKLToxMDQ0MzAwMDBDOUQxMUEyREQyQ0QyODVDMDIwQUE5OTIyOTRDRjBDMEMKLToxMDQ0NDAwMEJDMEIyQ0Q2ODVEMjgwRDEwRkMwRTAwMzhFMzg3RUEwNjUKLToxMDQ0NTAwMEMzNjNGRkI3Q0M1ODJBNkM3NERCMzBEQzQwNTgwN0UxRUIKLToxMDQ0NjAwMEMwMjBEMTBGREE2MDU4MDlCMTYzRkZFNzAwMDBERDQwREEKLToxMDQ0NzAwMDg1MTAyQTZDNzRDMEIwREM3MDU4MDg1NjJGMzAwODJGOTUKLToxMDQ0ODAwMDc0MDAyODYwMENDMEYwMEM4QjExQTJCQjI5QjI4NTEyRkQKLToxMDQ0OTAwMEUxNEIwOTU5MEJBMjgyMkYyNENGMjlCNjg1RDJBMEQxOTYKLToxMDQ0QTAwMDBGMDAwMDAwNkMxMDA0MjkyMDE0MjgyMDA2QjE5OTI5NUYKLToxMDQ0QjAwMDI0MTQ2ODgxMjRDMEFGMkMwQTAxMkIyMTAyMkMyNDA2NkQKLToxMDQ0QzAwMDdCQTAwNEMwRDAyRDI1MDIwMjJBMDIwMzNCMDIwNDRDMkIKLToxMDQ0RDAwMDAyQzBEMDU4MDBCRkQyQTBEMTBGQzAyMEQxMEYwMDAwMjEKLToxMDQ0RTAwMDZDMTAwNDI5MzEwMUMyQjQyOTI0MEEyQTMwMTFDMjgzNzQKLToxMDQ0RjAwMDc4QTE2QzdCQTE2OTY0NTA0NzJDMjAwNkMwNjg2RkM1MDkKLToxMDQ1MDAwMDYyQ0E1NzJEMjAxNDdDRDcyMkRBMjBEQjMwREM0MERENTQKLToxMDQ1MTAwMDUwNUJGRkE2MjkyMTAyMDkwRTRDQzhFMkMwMjBEMTBGMzIKLToxMDQ1MjAwMEMwRjEwRjlGMDIyRjI1MDJDMDIwRDEwRkRBMjBEQjMwMEYKLToxMDQ1MzAwMEMwQzA1QkZGREMyODIwMTQwNjg4MDIyODI0MTQ2M0ZGMTcKLToxMDQ1NDAwMEM3MjkyMDE1MUJFMTE4MkEyMDBCQzBDMDlDMjQwQkFBRTgKLToxMDQ1NTAwMDA5MkJBMTFDMkMyNDE1QUI5OTI5QTUxQzYzRkY5OTAwREMKLToxMDQ1NjAwMEMwMjBEMTBGREEyMERCMzBEQzQwREQ1MEMwRTA1ODA4M0QKLToxMDQ1NzAwMDY3RDJBMEQxMEYwMDAwMDA2QzEwMDRDQjU1MTNFMTEzREIKLToxMDQ1ODAwMDI1MjIxRjBENDYxMTA2NTUwQ0EzMjMyNjIyMUUyNTI2ODMKLToxMDQ1OTAwMDFGMDY0NDBCMjQyNjFFNzM0QjFEQzg1MkQyNDBEMTBGNTgKLToxMDQ1QTAwMDI4MEE4MEMwNDAyNDI2MUZBODI4MjgyNjFFMjgyNjFENDkKLToxMDQ1QjAwMEQyNDBEMTBGQzAyMEQxMEYyNDRERjgyNDI2MUU2M0ZGMTYKLToxMDQ1QzAwMEQ4MDAwMDAwNkMxMDA0MjgyMDA2RDYyMDZFODUwMjYwRkEKLToxMDQ1RDAwMDAwREUxN0UwRjIxREUwRjkxOUUwRjJDMEMxQzAyMDJBQTgKLToxMDQ1RTAwMDhDRkM2NEExMzIyQjYxMDJCNDRFMEIwQjRDNjVCMEE4NUQKLToxMDQ1RjAwMDJCNjAwQzJBNjIwMDBDQjgxMTA3ODgwODJGODI4NjA5RUMKLToxMDQ2MDAwMEI5MEE3RkUzMDI2MDAwOUYyOTkyQTM2ODkwMDUwOUFBNzYKLToxMDQ2MTAwMDBDNjVBMDkzMjg4Mjg1NjQ4MDhEQjg4OTFCRTBGNzk0OEYKLToxMDQ2MjAwMDgxOUI4MDY1NTE0REMwQjdCODM4QzBBMUMwRTAwOUFFQ0MKLToxMDQ2MzAwMDM4MEUwRTQyNjRFMDQ4MUFFMEQ1MUZFMEQ2MkZBNjdFNjEKLToxMDQ2NDAwMEIwNEE2REFBMDUwMDgwODgwMDkwOENDMEEwMkU2MDBDMzYKLToxMDQ2NTAwMDBDRTgxMUE3ODgyRjgyODVBREVFMEY0RjBCMkY4Njg1QjIKLToxMDQ2NjAwMDJCNjAwNjIyRTRDRjY4QjEyQTI5NjAxNUMwQjJDOTlBMkUKLToxMDQ2NzAwMEQyQTAyRDYxMDIyQjY0MDYwQ0REMDIyRDY1MDJEMTBGNDQKLToxMDQ2ODAwMEMwRTAwOEFFMzg3RUIwQjc2M0ZGQUIwMDIyNjQwNkQyNEMKLToxMDQ2OTAwMEEwRDEwRjAwRDJBMEQxMEYwMENDNTdEQTYwREIzMERDMDQKLToxMDQ2QTAwMDQwNTgwODhGQzAyMEQxMEZEQTYwNTgwOTIwNjNGRkU4MTYKLToxMDQ2QjAwMDAwMjgyMjFFMjkyMjFENzg5OTAyMjgwQTAwQzE3NkMxRUQKLToxMDQ2QzAwMEMxQzFEMjFCRTBDMkMxMjRBQjZCNjQ4MDQzNzg5MTQwNkUKLToxMDQ2RDAwMDJBODAwMDBDQUYwQzY0RjBBRTBEQUUwQzY0RTBBODAyQjIKLToxMDQ2RTAwMEFGMEM2NEYwQTIwN0FFMEM2NEUwOUMyRkFDRTg2NEYwNjEKLToxMDQ2RjAwMDk2MkVBQ0U3NjRFMDkwMkZBQ0U2NjRGMDhBMkE4MDA3M0YKLToxMDQ3MDAwMDA4QTgwQjA4OEEwMjdCODMwMjJBOERGOEQ4QTA2NUFGMUYKLToxMDQ3MTAwMEJCQzA5MDYwMDA3MzAwMDAyQjYwMEMwQ0I4MTFBNzg4MjAKLToxMDQ3MjAwMDJFODI4NjZFRTg3OTA5QkEwQTJBQTJBMzY4QTAwNDhFQUUKLToxMDQ3MzAwMDYwN0FFOTZCMkE4Mjg1NjRBMDY1MUZFMEFBQzBFMzJFMzcKLToxMDQ3NDAwMDY0MDY5RUExOUZBMDFGRTBENjJFNjAwQTkyQTMwRkVFRTIKLToxMDQ3NTAwMDAyOUVBMjhFNjAwRkVFMDI5RUE0MkY2MDE0N0FGRjQ3ODUKLToxMDQ3NjAwMDIyQTQxNzJGODI4NUFEQkUyMkU0Q0YyRkZDMTgyRjg2RkUKLToxMDQ3NzAwMDg1NjNGRTcwMkE2Qzc0QzBCMURDOTBERDQwNTgwNzk1RUIKLToxMDQ3ODAwMDFERTA4RkMwQzE2M0ZFQzREOUEwREE2MERCMzBEQzQwMUQKLToxMDQ3OTAwMERENTBDMkYwQzFFMDA5RkUzOTU4MDdEQ0QyQTBEMTBGQ0MKLToxMDQ3QTAwMERBNjA1ODA4RTI2M0ZFRjAyQ0E0MTcyOTgyODUwREJFNUEKLToxMDQ3QjAwMDA4MjJFNENGMjk5QzE4Mjk4Njg1NjQ1MDBDMkE2Qzc0NDEKLToxMDQ3QzAwMDA0NEIwMjU4MDE2OUQyQTBEMTBGQzAyMEQxMEYwMDAwQzQKLToxMDQ3RDAwMDZDMTAwNjJCMjIxRTI4MjIxRDkzMTA3Qjg5MDFDMEIwNkQKLToxMDQ3RTAwMEMwQzlDMDNCQzFGMjA0MDY0MDFERTA3OEMwRTJDMDc0RkQKLToxMDQ3RjAwMDA3NDcwMTBFNEUwMUFEMkQ5RTExQzA0MDJFMEExNDY0RDQKLToxMDQ4MDAwMEIwNkU2RDA4NDQyODIyMUQ3QjgxNjUyQUIwMDA3RUExMTAKLToxMDQ4MTAwMDNCN0ZBMTQ3N0I1MTIwN0NBMTQ5NjhBOTE3NjhBQTE0NTYKLToxMDQ4MjAwMDczQTExMUMwOUY3OUExMENDMThCNzhBMTA3QzFBRTI5REEKLToxMDQ4MzAwMDBBMUUyOUI0MDA3Q0ExMkIyQUIwMDcwQkFCMEJEQUIwRkYKLToxMDQ4NDAwMDdEQjMwMjJBQkRGOERCQTBDQUE1NjNGRkI0MjhCMDEwNkYKLToxMDQ4NTAwMDg5MTE2OTg3QkI2NDlGQjg2M0ZGREMwMDY0N0ZCNDYzMjAKLToxMDQ4NjAwMEZGRDUwMDAwNjQ2RkQwQzA0MUMxQUUyQUI0MDA2M0ZGMjEKLToxMDQ4NzAwMEM2MkIyMTAyQ0VCRTJBMjIxRDJCMjIxRTdBQjEyQThDRTMKLToxMDQ4ODAwMDEwN0NCMTIxN0FCOTAxQzBCMEM5QjkxM0UwNDNEQTIwNzQKLToxMDQ4OTAwMDI4QjAwMDJDQjAwNzAzODgwQTI4ODI0Q0MwRDEwQjgwQjYKLToxMDQ4QTAwMDAwREJBMDY1QUZFN0QyNDBEMTBGODkxMDY1OUZENDYzQ0MKLToxMDQ4QjAwMEZGRjMwMDAwNkMxMDA4QzA3MDY0NTE3MThGMzAyOTIxMjMKLToxMDQ4QzAwMDAyMEYwRjQ3MTZFMDM2MDkwQzRDNjVDMDhGOEQzMDBENzYKLToxMDQ4RDAwMDZFNTE2OEUzMDI2MDAwODQyODYyOUUxQUUwMkY2RTg4QTEKLToxMDQ4RTAwMDUyMkFBMjI2NjhBMDA0OEIyMDdBQjk0NzJBNjI5REIwN0EKLToxMDQ4RjAwMDRFQ0JBRjlBMTAyQjIwMEM5RTExMENCQzExQTZDQzI5Q0MKLToxMDQ5MDAwMEMyODZCNzQ4Nzk4QjQxMTdFMDI2MDdCNzBBMjc3MkEzRkEKLToxMDQ5MTAwMDY4NzAwNDg4MjA3Nzg5MzAyQ0MyODU5QzEyRDdDMDY1QzYKLToxMDQ5MjAwMEMwNjIyQzIxMDQxQUUwNUQ3Q0FCMjJEQTIwNTgwNjkzODkKLToxMDQ5MzAwMDYwMDAyOTAwMkUyMTA0MURFMDU5N0VEQjE4REEyMEMwMUEKLToxMDQ5NDAwMEI2NTgwNjhFQzk1ODYwMDE1NkMwQzA2M0ZGQ0NEQTIwNDUKLToxMDQ5NTAwMDU4MDg3NjYwMDAwNkRBMjBDMEI2NTgwODc0NjU1MTNGRTIKLToxMDQ5NjAwMERDNDBEQjMwOEQzMERBMjAwRDZENTE1ODA2RThEM0EwRTUKLToxMDQ5NzAwMDY0QTEyQ0MwNTEyOTIxMDI4NEExOEZBMDA0MDQ0NzBGRjcKLToxMDQ5ODAwMDBGNDc2M0ZGNDEyQjIxMDRDMDhDODkzMUMwQTAwOUY5NzYKLToxMDQ5OTAwMDUwMDk4QTM4NkVCODFFMkMyMDY2QUZDQzBDMEM0NzJDMDAKLToxMDQ5QTAwMDI0NjY3Q0FCMTA5RTE0MkExMjAwNTgwNkZBOEUxNEMwOUUKLToxMDQ5QjAwMEQwMkQyNDY2OEQzMEMwOTIxQkUwMTBDMUY4N0ZENjBDM0MKLToxMDQ5QzAwMDg3MTI5QjcwMjk3NjAxMkY3NDA4Mjc3QzEwNjU1MEI3RDkKLToxMDQ5RDAwMEI4M0FDMEQ3REM3MEMwNTFDMDgwMDc1ODM4MDgwODQyQzgKLToxMDQ5RTAwMDY0ODA3OTFEREZFQTE5REZFQjI5RDY3RTZBNDIwQUQzOUIKLToxMDQ5RjAwMDBGNkRFOTA1MDBBMDg4MDBDMDhDQzBBMDg4MzBDMDkyNkYKLToxMDRBMDAwMDdGODYzODA3RTgwQjJGODQwODlCODA5OTgxQjRFODJDQjcKLToxMDRBMTAwMDIwMENDMDkwMURERkVBMENDMzExQTYzMzIyMzI4NUFERjUKLToxMDRBMjAwMENDMDI4MjBCMjlDNENGMjIzNjg1RDJBMEQxMEY4QTMwODYKLToxMDRBMzAwMEMwRjE3RUFFMzIyOTIxMDI2M0ZFODgwMDJDMjAwQzhFNEMKLToxMDRBNDAwMDExQzBCMDFEREZERTBDQ0YxMUE2RkYyMkYyODVBRENDNjgKLToxMDRBNTAwMDJCQzRDRjAyRUUwQjJFRjY4NUQyQTBEMTBGQzA4MDBBNTgKLToxMDRBNjAwMDU4Mzg3OEQwODY2M0ZGN0E5RjEzREIzMERBMjBDMEMxRDQKLToxMDRBNzAwMERENzA1QkZGNTcyOTIxMDI4RjEzMkE5Q0ZFNjVBRTQzMzAKLToxMDRBODAwMDI3MjUwMkMwOTA2M0ZFM0I5RTE0MkEyQzc0QzBCMURDMjMKLToxMDRBOTAwMDcwREQ0MDU4MDZEMDhFMTQxQkRGRDhDMUY4NjNGRjVCNzEKLToxMDRBQTAwMEMwMjBEMTBGNkMxMDA2MjgyMTAyMTZERkJDMDgwODRDNkMKLToxMDRBQjAwMDY1ODIxNTI5NjI5RTZGOTgwMjYwMDIxQzE5REZCNzI5NzIKLToxMDRBQzAwMDkyMjY2ODkwMDc4QTIwMDlBQTBDNjVBMjBCMjc2MjlEOEUKLToxMDRBRDAwMEMwQ0M2NDcyMDMyQjIxMDQ4RTMxQzBBMEREQTAwRUZFNzkKLToxMDRBRTAwMDUwMEVDRDM4NkVCODExMkMyMDY2MkNDQzAxMEMwQzQ3MjIKLToxMDRBRjAwMDJDMjQ2NjdDREIwMjYwMDFFQUMwQzEyOTMwMDgxQkRGODAKLToxMDRCMDAwMEE5NjQ5MDk3MkYwQUZGQzBEM0IwOUU2NEUwRkQ2ODkyMUQKLToxMDRCMTAwMDBFNjQ1MDgzMkEyQzc0REI0MDU4MDA5M0QyQTBEMTBGMkUKLToxMDRCMjAwMDJCMjAwQzI3MjEwNDBDQkMxMUE2Q0MyOUMyODYyODBBRjQKLToxMDRCMzAwMDA4Nzk4MzAyNjAwMUI5MTlERjlBMDlCOTBBMjk5MkEzOTkKLToxMDRCNDAwMDY4OTAwODJFMjIwMDA5RUUwQzY1RTFBNDJFQzI4NTY0NEYKLToxMDRCNTAwMEUxOUUyNjIwMDcxM0RGQTM2RTdCMDI2MDAxOUExN0RGMTgKLToxMDRCNjAwMDlBMUZERkEzMTlERkQwQzBEMjI4MjAwQTkzRTA5REUxNkQKLToxMDRCNzAwMEE5NjkwRjg4MDI5OEUyMkY5MDgwMkE5NDgwQjFGRjA3REMKLToxMDRCODAwMEZGMDI5RkUzMUVERjhFMkZDMjg1QUVCRTBGREYwQjJGMEQKLToxMDRCOTAwMEM2ODUyQUU0Q0Y2NTVGN0JDMDIwRDEwRjJGMzAxMDI5NTYKLToxMDRCQTAwMDMwMTEyRTMwMTMwMDk5MzIwMEVEMzI2NEYwRUUyQTMwQ0QKLToxMDRCQjAwMDE0MUZERkJEMDBBQTMyNzhFRjA1MEY5RTA5MkRFNDdGOTgKLToxMDRCQzAwMDFFREZCQjY2QTAwNTBGOTgwOTJBODQ4MEI0QTcxOERGRjIKLToxMDRCRDAwMEI4Qzc2RjAwOTEwNEFFOUVEREUwMDBBRjFBMDBDMzFBQTMKLToxMDRCRTAwMDZFRTEwNTJEQjIwMDBERUQwQzFFREZCMjA4RDgxQzA2REIKLToxMDRCRjAwMDMzMDNBRTg4MkE4NDhCMkVCMDJFMjc4NDhDMDNFRTAxREIKLToxMDRDMDAwMDBGRUUwMjJFQjQyRTU4MDE4RjYzRkYwNDI5MzEwODI5QkMKLToxMDRDMTAwMDI1MDQyODMwMTQyRTMxMDlCMDg4NjQ4MEEzMkUyNDBBN0MKLToxMDRDMjAwMEMwODEyRTMwMTYyQ0I0MjMyRTI0MEJCNEVGMkYyNDBDNkQKLToxMDRDMzAwMDhDMzc4QjM2MjkyNTA0REVCMERGQzAwRjhGMzkwRThFRkUKLToxMDRDNDAwMDM5MEZFRTAyNjRFRUM5MDg5RjExMDFDNDA0OEQzODBDQkYKLToxMDRDNTAwMEI4MTgwMEM0MDQwQ0JFMTgwMEVFMTEwRUREMDJDMEUzNEIKLToxMDRDNjAwMDBFRkYwMjFFREY4NzlGNzE5RTcwMUVERjg0OEYyMDk4Q0IKLToxMDRDNzAwMDczOUQ3NDA1RkYxMTBCQ0Q1M0MxODA5ODc1MEZERDAyMzQKLToxMDRDODAwMDBFREQwMjlENzIyQTI0NjYxRURGNDQyRjYyOUQyQUU0RjcKLToxMDRDOTAwMEEyMkZGQzE4MkY2NjlENjNGRTc2MDAwMDAwMkYzMDEyQjUKLToxMDRDQTAwMDFCREY4NjAwRkEzMjc4RkYwNTBCOTgwQjJBODQ3RjY2OUIKLToxMDRDQjAwMEQwMDUwQjlBMEIyREE0ODAyQTMwMTEwMEFBMzI2M0ZGNzUKLToxMDRDQzAwMDQ0MkYyNDBBOUUyQjYzRkY1NkNDNTdEQTIwREIzMERDQkUKLToxMDRDRDAwMDQwNTgwNzAzQzAyMEQxMEYwMERBMjBDMEI2NTgwNzkzMTAKLToxMDRDRTAwMDYzRkZFNTAwREE3MDU4MDYyQkMwQTAyQTI0NjY2M0ZFMzUKLToxMDRDRjAwMDA3REEyMDU4MDc4RTYzRkZDRkIxNjkyODIwMEE4NjIwODMKLToxMDREMDAwMDA5MDk0Nzk5MTEyOTI0MDc5ODEwN0Y4MTI2OTNFMDI3RTQKLToxMDREMTAwMEU1MEE5QUUzODgxMDlERTExOURGNjI4RDExMDk2RjAyOUYKLToxMDREMjAwMDlGRTQyREU0MTYwOTg4MDJDMEQzOThFMjJBMjQwNzYzODEKLToxMDREMzAwMEZFNTEwMDAwMUZERjJCMDg2OTExODgxMThEMkI5M0UwQjUKLToxMDRENDAwMDA5ODgwMkMwOUY5OEU1MEZERDAyMDQ3ODExOURFMkMwM0EKLToxMDRENTAwMEY0OUZFMUMwRDQwOTg4MDI5OEU0NjNGRkNFMDAwMDAwMEMKLToxMDRENjAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDQ4NTIxMEQzODExODcKLToxMDRENzAwMDE0REYwODg2MjJBNDI0MDg2NjBDOTYyMjA1MzMwQjkzQzAKLToxMDREODAwMDIxNzQzQjEzQzg2MkQyMzBEMTBGQzAzMEJDMjk5OTIxQTUKLToxMDREOTAwMDk5MjA5MzIyRDIzMEQxMEYyMzNERjg5MzIxNjNGRkUzNzIKLToxMDREQTAwMDZDMTAwQUQ2MjA5NDE4MTdERUZERDkzMEI4Mzg5ODE5M0YKLToxMDREQjAwMDk5MTQ2NTUyNTJDMEUxRDJFMDJFNjEwMjFEREVGQTBFNTYKLToxMDREQzAwMDBFNEM2NUUxNjM4RjMwOEUxOTBGNkY1MTJGRkNGRDY1MUUKLToxMDRERDAwMEYxNTY4RUUxMjlEMDIzMEU4RjUwNzdFNjZCOEYxODFFODcKLToxMDRERTAwMERGMzdCMEZGMEZGNDExMEYxRjE0NjU5MENFMThERjM0QkEKLToxMDRERjAwMDhDNjBBOENDQzBCMTE5REVFODI4NjAwQjA5Q0MwQjBEODMKLToxMDRFMDAwMDg4MDkyOTgxMUMyODgxMUEyQTBBMDAwOTg4MEMwOEJBRjUKLToxMDRFMTAwMDM4MUJERjJBMENBOTBBMjk5Mjk0N0I5QjAyNjAwMDhDMjQKLToxMDRFMjAwMDJCNjAwQzk0MTYwQ0JEMTFBN0REMjlEMjg2Qjg0ODc5RTkKLToxMDRFMzAwMDgzMDI2MDAwRDIxOURFREEwOUI4MEEyODgyQTM5ODE3MjMKLToxMDRFNDAwMDY4ODAwMjYwMDBBMzYwMDBBNTFBREYxRTg0MTgwQUVFQzUKLToxMDRFNTAwMDAxQ0E5ODFCREVEMThDMTkyQkIwMDA4Q0MwNkVCMzEzMjUKLToxMDRFNjAwMDFEREVDRTBDMUM1MjBEQ0MwQjJEQzI5NUMwQTE3RURCREQKLToxMDRFNzAwMEFFNjAwMDM4MEMwQzUzNjAwMDA5MDAwMDAwMThERjEwMTEKLToxMDRFODAwMDhDNjBBOENDQzBCMTE5REVDNDI4NjAwQjA5Q0MwQjBEMTYKLToxMDRFOTAwMDg4MDkyOTgxMUMyODgxMUEyQTBBMDAwOTg4MEMwOEJBNjUKLToxMDRFQTAwMDM4MENBOTBBMjk5Mjk0N0U5MzAyNjNGRjcyREE2MEMwREIKLToxMDRFQjAwMEJBNTgwNzFFNjQ1MDc0NjAwMjY2MDAwMDFBREVCNzhDOTAKLToxMDRFQzAwMDE5MkFBMDAwOENDMDZFQTMxQTE4REVCMzBDMUM1MjA4NUQKLToxMDRFRDAwMENDMEIxOERFRkEyQkMyOTVDMEExNzhCMzAyNjNGRjNGNUEKLToxMDRFRTAwMDYzRkZDOTAwMEMwQzUzNjNGRjA5ODk2MDc4OTkxODI5ODYKLToxMDRFRjAwMEQyODVDOTkyMkI3MjlFMURERUE4NkVCODI0MkREMjI2QjMKLToxMDRGMDAwMDk5MTM2OUQwMEM2MDAwMEVEQTYwNTgwNzA4NjAwMDE4MjkKLToxMDRGMTAwMDAwMDA4ODYwN0Q4OTBBOUExQTI5NzI5RDlDMTI5OTE1NTEKLToxMDRGMjAwMENGOTREQTYwQzBCNjU4MDcwMTY1NTFGNDhEMTQ4QzE4MUYKLToxMDRGMzAwMERCRDA4REQwREE2MDBENkQ1MTU4MDU3NEQzQTA5QTE0NzIKLToxMDRGNDAwMDY0QTFERDgyQTA4NUExQjhBRjlGMTkwNTA1NDcwMjAyQzMKLToxMDRGNTAwMDQ3OTUxOEMwNTE2M0ZFNjAyQjYxMDRDMDhDODkzMUMwMzUKLToxMDRGNjAwMEEwMDlGOTUwMDk4QTM4NkVCODFGMkM2MDY2QTJDQzBDRDMKLToxMDRGNzAwMDBDNDcyQzY0NjY3Q0FCMTE5RjExOUUxQjhBMTU1ODA1NEIKLToxMDRGODAwMDg1OEUxQjhGMTFDMEEwMkE2NDY2OUYxMTY0RjBFMTg5OTEKLToxMDRGOTAwMDEzODgxOURFRjA2REU5MTcyRjgxMDMwMDkwOERBRUZFQTYKLToxMDRGQTAwMDAwODA4ODlGOTIwMDkwOEMwMDgwODhCODk5MDA5MDhDMzcKLToxMDRGQjAwMDY1NTE0RThBMTA4NTFBOEIzMDFGREU4QTg4MTIyOTYwNEYKLToxMDRGQzAwMDA3MDg1ODBBMkM4Mjk0MkQ2MTA0MEVDQzBDMkM4Njk0NzAKLToxMDRGRDAwMDZGREIzQzFDREVCNEFDOUMyOUMwODAwQjVENTBBMjk5RjkKLToxMDRGRTAwMDA5MDk0NzI5QzQ4MDY1RDBEQTJFNjAwQ0MwRDAxRkRFQzUKLToxMDRGRjAwMDczMENFODExQTc4ODIyODI4NUFGRUUwMjQyMEIyREU0RTQKLToxMDUwMDAwMENGMjI4Njg1RDJBMEQxMEY4RTMwMEUwRTQ3NjNGREE2MkIKLToxMDUwMTAwMEEyOUMwQzBDNDcyQzY0MDc3QUI2Q0Q4QjYwMkU2MDBBREMKLToxMDUwMjAwMDI4MEFGRjA4RTgwQzY0ODEwRTE4REU5RDgzMTY4MjEzOUYKLToxMDUwMzAwMEIzMzkwMjMzMEIyQzM0MTYyRDM1MEFDMDIzOTIzMTlGMUQKLToxMDUwNDAwMDMwQzAyMDkyMzMwOEIyMDIwOEU4MDI5MjM0OTgzMkMwOEQKLToxMDUwNTAwMDgwMkI2MDBDMjg2NDA3RDJBMDFDREU1ODBDQkUxMUE3NjAKLToxMDUwNjAwMEVFMkRFMjg1QUNCQjI4QjRDRjBEOUQwQjJERTY4NUQxOEUKLToxMDUwNzAwMDBGOEIxODg4MTM4RDMwQjg4QzBEOEY0NzBENDk1MEI0QTUKLToxMDUwODAwMDk5MDQ5OTEwMEQwRDVGMDRERDEwMDlGRjAyOUY4MDBEM0EKLToxMDUwOTAwMEJCMDI5QjgxNjU1MDhEODUxQUI4M0FDMEYxQzA4MDBDNjcKLToxMDUwQTAwMEY4MzgwODA4NDI2NDgwNkIxQkRFMzkxOURFM0EyOUI2RUQKLToxMDUwQjAwMDdFOEQxOEIwREQ2RERBMDUwMEEwODgwMEMwOENDMEEwMjAKLToxMDUwQzAwMDYzRkVGMzAwMURERTRCMjg2MDBBODIxMzhCMTZDMEUwREUKLToxMDUwRDAwMDJFQzQ4MDAyQjIwQjBEODgwMkIyQkI5OTIzOUYyMEMwNjAKLToxMDUwRTAwMEQyOTgyMjlEMjEyMjYwMEMwQzJEMTFBN0REMjhEMjg1OUIKLToxMDUwRjAwMDA4QkIwQjE4REUzMjJCRDY4NUE4MjIyRTI0Q0ZEMkEwRDcKLToxMDUxMDAwMEQxMEY5RTFCODUxQTJBNkM3NDhCMTg1QkZGMTc4RTFCQTAKLToxMDUxMTAwMDYzRkVBMzAwQzA4N0MwOTAwQUY5Mzg3OTgwOTI2M0ZGQ0MKLToxMDUxMjAwMDg2QzAyMEQxMEY5RTFCMkE2Qzc0QzBCMThEMTg1ODA1MDMKLToxMDUxMzAwMDI5OEUxQjg1MUE2M0ZFN0U4ODZCODIxMzg5MTYwOEJFMzIKLToxMDUxNDAwMDExMEVDRTAyMDI5MjBCOUUyNUI0OTkxRURFMjU5RjIwRTEKLToxMDUxNTAwMDBFODgwMjk4MjJDMEVGMDREODExMEU4ODAyOTgyNEMwNEQKLToxMDUxNjAwMEU0OUUyMUMwODBEMkEwMkI2MDBDMjg2NDA3MUNERTEzQjMKLToxMDUxNzAwMDBDQkUxMUE3RUUyREUyODVBQ0JCMjhCNENGMEQ5RDBCNjQKLToxMDUxODAwMDJERTY4NUQxMEYwMDAwMDA2QzEwMDRDMDIwRDEwRjAwNjcKLToxMDUxOTAwMDZDMTAwNDg2MzNDMDcxQzAzMDYwMDAwMUIxMzMwMDMxM0YKLToxMDUxQTAwMDA0MDA3NDFBMDQ2MjAxNzQ2MEYxRDEwRjZDMTAwNDAyREYKLToxMDUxQjAwMDJBMDIwMzNCMDI1QkZGRjYxRERERkIxQkRFNDNDNzlGOUMKLToxMDUxQzAwMDg4QjAwOUE5MDMwOThBMDE5QUIwMkJEMTAyNzk4MDFCMDIKLToxMDUxRDAwMDFDRERGM0MwRTAwRUU0MzEwMDAyMDAyQUMyODIxRERFQjUKLToxMDUxRTAwMDNCMERBQTAyMkFDNjgyMEJFNDMxRDEwRkMxRjAwRkJGREEKLToxMDUxRjAwMDAyMEYwRjRGMkZENTAyMEZFNDMxRDEwRjZDMTAwNDEyQTQKLToxMDUyMDAwMERERTkxQURERTZDMEMwMENFNDMxMDAwMjAwMjlBMjgyMEIKLToxMDUyMTAwMDE4REUzMTFCREUyRjI2MjEwMjBCOTkwMTA4NjYwMTI5QjkKLToxMDUyMjAwMEE2ODIyNjI1MDIwNkU0MzExNERFMkMxNURFMjcyMzZBMjkKLToxMDUyMzAwMDkwMjMyNjEyODU1MDI0MjYxMTI1MjYxMzIyMkM0MEQxOTYKLToxMDUyNDAwMDBGMDAwMDAwNkMxMDA4MTZERTI1MkIwQTY0MkMxQUI0MUYKLToxMDUyNTAwMDE3RERENTFEREREMTE4REUyMjBGMkUxMTBEMkExMUIyNUEKLToxMDUyNjAwMEU5MEVFRTExQThBODBFOTkxMUFEQUFBNzk5QTdFRTlFNzYKLToxMDUyNzAwMDE2OTkxMUFDQUE5QTE1MkM4MEZGMkE4MEZFMjg4RDAxNjAKLToxMDUyODAwMDI5ODAwMTA4QUExMTI4ODAwMDBDQUEwMjA4ODgxMTA5QTcKLToxMDUyOTAwMDg4MDIwOEFBMUNCODg4MjgxNjAwNTgwODVEMjk3MTE2Q0IKLToxMDUyQTAwMDlBMTIyOTE2MDM4QTE1OEIxMjJBQTA4MDBCQUEyODhCMjIKLToxMDUyQjAwMDEwNTgwODU3RDQ3MDhDMTY4QjEzMTVERTBBMEJBQjI4QzgKLToxMDUyQzAwMDIzNUM0MTlCMTQyQkM2MjgyQzMwODA3MkM5MTU4QzE0OEEKLToxMDUyRDAwMDJBNTBDMDJCM0EyMDBDQUEyODU4MDg0REMwRDEwQUREMEMKLToxMDUyRTAwMDM3MkQ0NTQwQjQ0NEIyNTVCMjMzNzYzOURBQjI3NzhGQjAKLToxMDUyRjAwMDExOEUxNjg4MTVCNEVFQjE4ODk4MTU5RTE2N0ZFOUE0MTQKLToxMDUzMDAwMEQxMEYwMDAwNkMxMDA0QzAyMUQxMEYwMDZDMTAwNkMwM0EKLToxMDUzMTAwMDcwMUFEREEyMUVEREFEMUREREIzMUNEREI1MUJERDlFRUIKLToxMDUzMjAwMDEzRERFMTIyMEEwODE4REQ5RjE0RERFRjI4ODAyRTI0MEEKLToxMDUzMzAwMDQwMDAyODE2MDA2RDJBNzBBMzQ5Mjg5MDgwQzBGMTY0QUYKLToxMDUzNDAwMDgwNTk4NTEwMDA0MTA0QzA2MTAwNjYxQTA2NTUwMTA1QTgKLToxMDUzNTAwMEY1MzkwQzU2MTEwQTY2MDgyRjYyOTY2RUY3NEQwQjVGRjEKLToxMDUzNjAwMDBBMkZGMjI0NjhGMDA4MTJEREQxMDI0MjA4NzJGOTNCREMKLToxMDUzNzAwMDIzNjI5NTBDNDIwMkNCMzQ5MjMyQzBGMjlEMzA5RjMxQjEKLToxMDUzODAwMDBFOEYwMjlGMzMyMzYyOTVBQjUyMkYwQTAwMkY5NDgwMTkKLToxMDUzOTAwMDJGMjRBMDIzM0MxMDIzNjY5NTEzRERDMkIxNzcxMkREQzQKLToxMDUzQTAwMEQyQjE0NDA0MDQ0MjI0MjQwMEQxMEYwMEQxMEZEMTBGMDQKLToxMDUzQjAwMDZDMTAwNDFBREQ3OTJBQTAwMDU4MDIxQjVCRkZEMzAyOEYKLToxMDUzQzAwMDJBMDIwMzNCMDI1QkZGQ0YxQkRENzdDMEM0MjlCMTAyNzkKLToxMDUzRDAwMEM4QUMwQzlDMDIwQzBDNEYyQ0I1MDIwQ0U0MzFEMTBGNjQKLToxMDUzRTAwMDFFREQ2RkMwODAwOEU0MzEwMDAyMDAyREUyODIxRkRENjcKLToxMDUzRjAwMDgwMEZERDAyMkRFNjgyMDlFNDMxRDEwRjZDMTAwNDE1MTcKLToxMDU0MDAwMERENjcxNkRENjhDMDIwMDJFNDMxMDAwMjAwMjQ1MjgyMEMKLToxMDU0MTAwMDIyNjEwMjczNEYwNjAyRTQzMUMwMjBEMTBGMThEREI0QkYKLToxMDU0MjAwMDE5RERCMzA4MjgwMTA5NDkwMTI5NTY4MjI4NjUwMjA4QjcKLToxMDU0MzAwMEU0MzExM0REQTkyMjZDNzAyMzY2MUREMTBGMDAwMDAwM0EKLToxMDU0NDAwMDZDMTAwNDI5MjAwNjI4OUNGOTY0ODBBMDJBOUNGRDY1MjQKLToxMDU0NTAwMEEwOTY4QTI4OEQyNjJGMEEwODdBRDkwNDJCMjIxRkM4RTUKLToxMDU0NjAwMEJEMkMyMDY0NjRDMDgxMkUyMjA5MEVBRTBDNjZFMDc4NEIKLToxMDU0NzAwMDJCMjAwQzFFREQ0QTBDQkMxMUFFQ0MyOEMyODYxOURERDcKLToxMDU0ODAwMDQ4NzhGMzAyNjAwMEE5MDlCOTBBMjk5MkEzNjg5MDA4MzQKLToxMDU0OTAwMDJFMjIwMDA5RUUwQzY1RTA5NzI5QzI4NTFGREQ1MjY0QkIKLToxMDU0QTAwMDkwOEU5RjkwQzBFNDFGREQ1RjlFOTEyODIwMEFDMEUwOEYKLToxMDU0QjAwMDlFOTMwRjg4MDI5ODkyODgyMDBGODgwMjk4OTQyRjIwM0MKLToxMDU0QzAwMDA3OUE5NzlEOTYyRjk1MEEyRTI0MDcyODIwMDYyOTIwQjMKLToxMDU0RDAwMDY0Njg4MzJGMjhDMjg1MTJERDM5Mjg4QzIwQTJCMjJFNjEKLToxMDU0RTAwMDI0Q0YyOEM2ODVDMDIwRDEwRkMwMjBEMTBGMkEyMDZBMjIKLToxMDU0RjAwMDBBMkE0MTY1QUY1NURBMjBDMEIwNTgwNUQzNjRBRkU4MzkKLToxMDU1MDAwMEMwMjFEMTBGNjQ5RkNDMUZERDI3MkQyMDE2OEZGMjA5RkIKLToxMDU1MTAwMEREMEMwMEYxMDQwMEREMUFBREFEOUQyOTI4QzI4NTEyMTUKLToxMDU1MjAwMEREMjcyODhDMjBBMkIyMkUyNENGMjhDNjg1QzAyMEQxMEEKLToxMDU1MzAwMDBGQzAyMUQxMEYwMDAwMDA2QzEwMDQyNjBBMDAxQkRERjMKLToxMDU1NDAwMDZEMTVERDE4MjgyMDY1MTdERDE1Mjg4Q0ZFNjQ4MDk0MDQKLToxMDU1NTAwMDBDNEQxMUFEQkQyQ0QyRjUyQkQyRjQyQTUxMDI3Q0IxRTkKLToxMDU1NjAwMDQyMkE1MTAyQjRCQjJFRDJGNzJCRDZGNDdCRTkwNTJCOEQKLToxMDU1NzAwMEQyRjYyQkQ2RjQ3Q0I5MkIyOUQyRjYyOUQ2RjUyOUQ2MkEKLToxMDU1ODAwMEY0MDZFNDMxMDAwMjAwMkY3MjgyQzc5RjAwNDEwNEMwN0MKLToxMDU1OTAwMDgxMDA4ODFBMDk4ODAzMDhGRjAxMkY3NjgyMEFFNDMxMDYKLToxMDU1QTAwMDYwMDAwMDAwMjYyNDY1MkJEMkY0OEU1QTJDRDJGNUIwNzAKLToxMDU1QjAwMEVFOUU1QTdCQ0IxNjI5RDJGNjJGRDJGNzBDQjgwQzA5RTcKLToxMDU1QzAwMEZGMEMwOEZGMEMwRjJGMTRDOEY5NjAwMDJGMEJDRDBDMzcKLToxMDU1RDAwMDBEMkQxNENFRDZDMEUyMEVBRTAyMEUwRTRGMkU1NTAyODkKLToxMDU1RTAwMDBFRTQzMUQxMEZEQjMwREEyMDVCRkY5NTFCREQ0MjY0MjYKLToxMDU1RjAwMEFGNUQyQTUxMDIwQzREMTFBREJENjNGRkE5MDZFNDMxMjgKLToxMDU2MDAwMDAwMDIwMDJFNzI4MjFGREQwMDBGRUUwMjJFNzY4MjBBNEIKLToxMDU2MTAwMEU0MzFEMTBGNkMxMDA0MTZEQ0UxMTVEQ0UyQzAzMDAzN0MKLToxMDU2MjAwMEU0MzEwMDAyMDAyNDYyODI3NDQ3MjExOEREMzM4NzVBNzYKLToxMDU2MzAwMDA4NDgwMTI4NjY4MkNENzMxOUREMzEwQzJBMTFBQTk5MTgKLToxMDU2NDAwMDIyOTI4MzI5OTI4NDcyOTEwMzgyMjBDQzI5MkI1MTAyQzkKLToxMDU2NTAwMDBCRTQzMUMwMjBEMTBGMDAxRkREMkEyRTUxMDIwRkVFQzYKLToxMDU2NjAwMDAxMkU1NTAyMEVFNDMxQjAyREIxN0M5QzVBMjI1QzYwQjMKLToxMDU2NzAwMDA4REQxMTJENTYxOUQxMEY2QzEwMEExQURDQzcxRERDN0MKLToxMDU2ODAwMEM5MjNBMDAwMTlERDIwNkYzMzc5MUNERDA3QzAyODE1NjAKLToxMDU2OTAwMEREMUYxRUREMUQyQjFDMTBENEIwODNFMDAwNTA4Njk1NEQKLToxMDU2QTAwMDEwMDA0MDhBOTQxODZEMkE0RjBGMzUxMTBDMzQwOTI0Q0MKLToxMDU2QjAwMDQwODAwQTU2MEEyODYyOTQwRDU1MDkyRjUxNDAwRjQ0MjQKLToxMDU2QzAwMDExMEI0NDBBMDg5NzBDMEY3NzM2OEY0MDBGNzczNjIyNUMKLToxMDU2RDAwMDUxNDEwN0ZGMEM5RjQwQTg3NzJGNjI5NTI3NjY5NDBGRDIKLToxMDU2RTAwMDk4MEMwMjg4MzY4NzQxMDc4ODM2QjEzMzA4NzcwQ0FGQUIKLToxMDU2RjAwMDhGMkY2Njk1OTc0MTAzMDM0MkIxMzgwODA4NDI5OEUwMUUKLToxMDU3MDAwMEQxMEYwMDAwMUNERDAzMTRERDAzQkZDNTI0NDJCNTY0QzYKLToxMDU3MTAwMDMwNTVDMDkxQzBEMDE2REQwMDA0ODg0MzJCQzAwMEMwQjYKLToxMDU3MjAwMDQwNkQzOTNFMDA0MTA0MDA5NzFBNzc4MDE2MkZBMjk1RUMKLToxMDU3MzAwMDhFNTBBRkVFMkVFRDIwMDZFRTM2OUU1MDJEQTY5NTYwRDMKLToxMDU3NDAwMDAwMUEwMDAwNzdCMDA5ODM1MDlENTAyM0E2OTU2MDAwOTEKLToxMDU3NTAwMDAyMjNBMjk1MjIzRDIwMDYyMjM2MjJBNjk1QjE0NEI0MEEKLToxMDU3NjAwMDU1QjhBQTI4QzQwMEQxMEYwNDg4NDMyOEM0MDBEMTBGMUIKLToxMDU3NzAwMDZDMTAwNDE1RENFQTEzRENFQUMwNDAwNEU0MzEwMDAyREEKLToxMDU3ODAwMDAwODg1MENCODE1QkZGQkMxQ0RDRTcwQzJEMTFBRENDM0QKLToxMDU3OTAwMDJCQzI4MjJBQzI4Mzk0NTA3QkFCMTQyRUMyODQyOUMyQUUKLToxMDU3QTAwMDg1MEFCRDBDMEU5OTBDMEQ5OTBDMDkyOTE0NjAwMDA1OTEKLToxMDU3QjAwMDBCQTkwQzA5MjkxNDk5MzAxNURDN0IyQTUxMDIwQUU0NDMKLToxMDU3QzAwMDMxMkEyQ0ZDNTgwMDQ5MkIzMjAwMUVEQzc0MkJCQ0ZGMDQKLToxMDU3RDAwMDJCMzYwMENDQjVDOEEzRDJBMEQxMEYwMEQyQTAwNEU0RDAKLToxMDU3RTAwMDMxMDAwMjAwMkRFMjgyMkM1MTAyMkZCQUZGMEZERDAxQTEKLToxMDU3RjAwMDJERTY4MjBDRTQzMUQxMEY2QzEwMDREMTBGMDAwMDAwQjMKLToxMDU4MDAwMDZDMTAwNEMwMjBEMTBGMDA2QzEwMDQxM0RDQzdDMEQxOTEKLToxMDU4MTAwMDAzMjMwOTIzMzE4REMwQTA2RjM0MDI2MDAwODkxQkRDOTMKLToxMDU4MjAwMDYxQzdDRjE4RENDMDBDMjkxMUE5ODgyNjgyODMyNTgyODQKLToxMDU4MzAwMDgyMTlEQzVBNzY1MTQ0Mjc1MjAwMkU4Mjg1MjU1QzA0NTkKLToxMDU4NDAwMDI1ODY4Mjc1RTkwNTI1ODI4NDI1ODY4Mjc2NTk1NDI2MjcKLToxMDU4NTAwMDgyODRENTYwMjY4NjgyMjY4NjgzMEFFNDMxMDAwMjAwOEYKLToxMDU4NjAwMDIzOTI4MjJGQjEwMjAwMjEwNDAwRDQxQTBDNDQwMzA0QjUKLToxMDU4NzAwMDMzMDEyMzk2ODIwRkU0MzE2MDAwMDIwMEQ3QTA3NjU5RUQKLToxMDU4ODAwMDIyMEFFNDMxMDAwMjAwMkU5MjgyMDAyMTA0MjhCMTAyOTMKLToxMDU4OTAwMDAwREYxQTBDRkYwMzBGRUUwMTJFOTY4MjA4RTQzMUQyQ0UKLToxMDU4QTAwMDcwRDEwRjAwRDI3MEQxMEZDMDIwRDEwRjZDMTAwNERCNkIKLToxMDU4QjAwMDMwODYyMDE1REMzOTI4MEEwMDI4MjUwMkRBMjAyOEIwOTUKLToxMDU4QzAwMDAwMkNCMDA3MDU4ODBBMjg4MjRDMkQwQTAxMEI4MDAwQTUKLToxMDU4RDAwMERCQTA2NUFGRTYxQURDMzIwQTRBMEEyOUEyQTNDN0JGRDkKLToxMDU4RTAwMDc2OTEwMUQxMEYyQkE2QTNEMTBGMDAwMDZDMTAwNEMwM0MKLToxMDU4RjAwMEQxQzdDRjFCREMyQ0MwQTAxOERDMjgwQzI5MTFBOTg4MkIKLToxMDU5MDAwMDg3ODU4NTg0MTlEQzI2Nzc1MTc5ODY1MDhFODdCNDU1MzIKLToxMDU5MTAwMDk1ODQ3NUU5MDM4NTg2OTU4NDc3NTk2QzhGODY5Rjg1NzQKLToxMDU5MjAwMDlGODQwQUU0MzEwMDAyMDAyMzkyODJCNDJFMDBFMTA0MzUKLToxMDU5MzAwMDJGQjEwMjAwRDQxQTBDNDQwMzA0MzMwMTIzOTY4MjBGQzIKLToxMDU5NDAwMEU0MzEwQUU0MzEwMDAyMDAyMzkyODIwMEQ0MUEwQzQ0QUMKLToxMDU5NTAwMDAzMDQzMzAxMjM5NjgyMEZFNDMxRDI2MEQxMEYwMDAwOUIKLToxMDU5NjAwMDBBRTQzMTAwMDIwMDIzOTI4MkI0MjgwMDgxMDQyMkIxQUIKLToxMDU5NzAwMDAyMDBENDFBMEM0NDAzMDQzMzAxMjM5NjgyMDJFNDMxNUEKLToxMDU5ODAwMEQyQTBEMTBGRDZBMDc3NTFENkQyNjBEMTBGMDAwMDAwOUYKLToxMDU5OTAwMDZDMTAwNDI3MEE4MDFDREMyODFEREMyODFBREMwMDBDOTMKLToxMDU5QTAwMDI5MTFBQTk5MkEyQ0ZDMkI5Mjg1MERBQTAyOUNCMTlBNDYKLToxMDU5QjAwMEIwQzA1MTEzREMyNTI4OTI4NTE2REMyMTE0REMyMkE2MDgKLToxMDU5QzAwMDI2MDQyNDBBQjg4ODI4OTY4NTIzNDY5MUE3NjYyNTY0NkMKLToxMDU5RDAwMDlGRDEwRjAwNkMxMDA0MTlEQzU1MEMyQTExQTlBOTg5NUMKLToxMDU5RTAwMDkwQzQ4NDc5OEI3NjFCREM0NUFCQUMyQUMyODMyQ0MyNzUKLToxMDU5RjAwMDg0N0FDMTY4OEFBMDJCQkMzMEQzQTA2NEEwNUUwQjJCMzQKLToxMDVBMDAwMDBBMkNCMkEzMTlEQzBGNjhDMDA3MUREQzQ5RDMwRjdEMzcKLToxMDVBMTAwMEM5NEFBOTI5Mjk5RDAxMjk5MDFGNjg5MTMyNzBBNjAzQkUKLToxMDVBMjAwMEQzQTBDQTlFNjg5MjEwQzdBRjJBQjZBMzJBMkNGQzVCRUIKLToxMDVBMzAwMEZGQUZEMjMwRDEwRjAwMDAxM0RCRUYwM0EzMDE4QzMxOTUKLToxMDVBNDAwMDFEREJFMDBDOEMxNDBEQ0MwMTJDQjZBMzYzRkZEQzAwMzUKLToxMDVBNTAwMEMwMjBEMTBGREEyMDVCRkZDRUMwMjBEMTBGQzAyMEQxRjMKLToxMDVBNjAwMDBGMDAwMDAwNkMxMDA0REIzMEMwRDAxOURCQ0JEQTIwNTMKLToxMDVBNzAwMDI4MzAwMDIyMzAwNzA4NDgxMjA5ODgwQTI4ODI0Q0RDQTYKLToxMDVBODAwMDIwMEI4MDAwMUJEQkM2MEM0QTExQUJBQTI5QTI4NDA5OUIKLToxMDVBOTAwMDI5MEIyOUE2ODREMTBGMDA2QzEwMDRDMDQxMThEQkJGNkMKLToxMDVBQTAwMDE3REJDMTBDMjYxMUE3MjcyNzcwMzBBODY2MjU2Mjg2NTAKLToxMDVBQjAwMDAwNzEwNEEzNTUwMDQ0MUE3NTQxNDgyMjYyODQxNURCMjUKLToxMDVBQzAwMEUyMDIzMjBCQzkyMjg4MjExN0RCQkUwODg0MTQwNzQ0ODYKLToxMDVBRDAwMDAxNzU0OTA1QzgzNEMwMjBEMTBGRDEwRjFEREMxNUMwOTgKLToxMDVBRTAwMEIyOEUyMDFGREJBRDBFMEU0M0FGRUMwRkVFMEEyQkM0QkYKLToxMDVBRjAwMEEwMkRFNjI0QzAyMDJBNjI4NDA4MDk0NzBBOTkwQjI5QjAKLToxMDVCMDAwMDY2ODREMTBGQzAyMEQxMEY2QzEwMDREQjMwQzBEMDE4RDgKLToxMDVCMTAwMERCQTJEQTIwMjUzMDAwMjIzMDA3MDg1ODBBMjg4MjRDMDAKLToxMDVCMjAwMERDMjAwQjgwMDA4OTMxNzA5RTEyMUJEQjlDMEM0QTExMUIKLToxMDVCMzAwMEFCQUEyOUEyODQwOTI5MEIyOUE2ODREMTBGMDlDOTUyMkQKLToxMDVCNDAwMDY4NTMyNjAwOTEwNDE4REI5N0MwQTEyRjgxMTIwMEFBODgKLToxMDVCNTAwMDFBMEFGRjAyMkY4NTEyMUVEQjkxMEM0RDExQUVERDJDQUYKLToxMDVCNjAwMEQyODQwQzJDMEIyQ0Q2ODREMTBGQzA4MTFGREI4RUI4QjUKLToxMDVCNzAwMDlBMEEwQTQ3MDBBMTA0MkVGMTEyMDA4ODFBMDhFRTAyQzAKLToxMDVCODAwMDJFRjUxMjFEREI4NjBDNEMxMUFEQ0MyQkMyODQwQjJCRDkKLToxMDVCOTAwMDBCMkJDNjg0RDEwRjAwMDA2QzEwMDREQjMwQzBEMDE5NzEKLToxMDVCQTAwMERCN0VEQTIwMjgzMDAwMjIzMDA3MDk4ODBBMjg4MjRDNjAKLToxMDVCQjAwMERDMjAwQjgwMDAxQ0RCNzkwQzRCMTFBQ0JCMkFCMjg0QkYKLToxMDVCQzAwMDBBMkEwQjJBQjY4NEQxMEY2QzEwMDRDMDQxMThEQjczNkIKLToxMDVCRDAwMDE2REI3NTBDMjcxMUE2MjYyNjYwMzBBODcyMjUyMjg2QjIKLToxMDVCRTAwMDAwNjEwNEEzNTUwMDQ0MUE3NTQxMDgyMjIyODQwMjMyNDAKLToxMDVCRjAwMDBCRDEwRjAwQzAyMEQxMEY2QzEwMDQxNURCQ0UwMjQ5NzEKLToxMDVDMDAwMDE0Mjk1NjExMjQ1MjEyQzA3MzAyMDg0MzBGODgxMTAwNDAKLToxMDVDMTAwMDgxMDQwMDM2MUFDNzhGMDA3NzFBMDg3NzAzMDc0NDAxRkEKLToxMDVDMjAwMDA2NDQwMjI0NTYxMkQxMEY2QzEwMDZDMEIwNkUyMzAyMzcKLToxMDVDMzAwMDYwMDBBMjY0MjA5RDg1MTAxM0RCQUExNkRCQkVDMDQwNjUKLToxMDVDNDAwMEE2QkEyQkEyQUUwQjE5NDE2NDkwNUU2ODkxNTU2ODkyN0EKLToxMDVDNTAwMDRBNjg5MzM3MjkzMEZGMjgzMEZFMkFBMkFBMDg4ODExMDMKLToxMDVDNjAwMDBBMEE0RDJBQUNGMjA5ODgwMjc1ODk0NDJCM0QwMTI5QTQKLToxMDVDNzAwMEIwMDAyQkIwMDEwODk5MTEwQjk5MDI3QTk5MzJCODMzMTAKLToxMDVDODAwMDJCMkEwMEIxNDQ3MjQ5Qjc2MDAwNDgwMDdGQkYwNTE1NTgKLToxMDVDOTAwMERCQUE2M0ZGQkUyNTNBRTg2M0ZGQjgwMDI1M0FFODYzNTQKLToxMDVDQTAwMEZGQjEwMDAwMjUwQTY0NjNGRkE5QzA1QTYzRkZBNDAwODYKLToxMDVDQjAwMDAwNzA1RjA4MjUzNEZGMDU4QzE0MkMzNEZFNzBBRjBCODgKLToxMDVDQzAwMDBBOEQxNDJFM0QwMTJBRTQwMTJERTQwMERBNDA1QkZEMkIKLToxMDVDRDAwMDVENjNGRkE5RDEwRkQxMEY2QzEwMDQxQURCMzIxOURCMDEKLToxMDVDRTAwMDJGMUNEQjk2MUJEQjk3QzA4MEMwNzE2MDAwMEQwMDAwOEQKLToxMDVDRjAwMDAwMjJBNDMwQjFBQTI5OUMxMDdCOTE1RjI2OTI4Njc5NUMKLToxMDVEMDAwMEMyMTVDMDIwNkU2MkU5NkQwODBBQjEyMjAwMjEwNDAwQUMKLToxMDVEMTAwMDc0MUE3NjRCREI2M0ZGRUUyMjkyODUwRDYzMTEwMzI1MjcKLToxMDVEMjAwMDE0NjQ1RkNGRDY1MDAzMkQ0MzZERDkwMzk4MjBCNDIyNUQKLToxMDVEMzAwMDA2NDQxNDZENDkyMjk4MjA5ODIxOTgyMjk4MjM5ODI0OEIKLToxMDVENDAwMDk4MjU5ODI2OTgyNzk4Mjg5ODI5OTgyQTk4MkI5ODJDNEYKLToxMDVENTAwMDk4MkQ5ODJFOTgyRjIyMkM0MDYzRkY5NzFFREIxMDI3M0EKLToxMDVENjAwMEU2ODAyN0U2ODFEMTBGMDA2QzEwMDRDMDYyQzA0MTEyQUEKLToxMDVENzAwMERCMEQxM0RCNzQyMzMyMkQxQURCMDgxOURCNkUyQUEwMkUKLToxMDVEODAwMDAwMjk5MkFFNkVBMzAyNjAwMDkxMjhBQ0ZFMDkwRDQwN0UKLToxMDVEOTAwMDJDMUFDMkMyQkQwRENCMzkyQjI1MTY2NDgwODk1QkZGM0UKLToxMDVEQTAwMEEyMTVEQjY5MUFEQjE0MkIzQUU4MEEzQTAxNTgwNTk4NjgKLToxMDVEQjAwMDJCMjExNjBBQkIyOEQzQTAyQjU2MDA1ODA1QUY4QjUwQjkKLToxMDVEQzAwMDBBQkIwODJBMEEwMDU4MDVBRTE1REI2MDJEMjEwMjJDRkIKLToxMDVERDAwMDNBRTgwQzNDMjgwNEREMDIyRDI1MDI5QzUwNTgwNUE2MEIKLToxMDVERTAwMDhCNTBBQUJCQzBBMTU4MDVBNjFDREI1OTJEMjEwMjBDNjMKLToxMDVERjAwMDNDMjgwNkREMDIxM0RCNTcyRDI1MDI5QzMwNTgwNTlFRkEKLToxMDVFMDAwMDhCMzBBQUJCQzBBMjU4MDU5RTJBMjEwMkMwQjQwQkFBOUYKLToxMDVFMTAwMDAyMEEwQTRGMkEyNTAyNTgwNUIyRDEwRjI0MjQyM0MzQUYKLToxMDVFMjAwMENDMkMyNTE2NjNGRjc2MDAxOERCNEYxQ0RCNEIxOURCRUYKLToxMDVFMzAwMDRDMUJEQjRBMTdEQjFGODUyMDJFMEFGRDFGREI0QjJENzkKLToxMDVFNDAwMDIwMkUyNEY0N0EyNEY0N0UyNEY0ODIwRUREMDEyNEY0M0UKLToxMDVFNTAwMDg2MkUwQUY3MDc1NTI4MDZERDAyQzA3NTBFREQwMTA1RkUKLToxMDVFNjAwMDA1MDZBQjVCQTk1OUMwRThBQzVDMjRDNEFCMEVERDAyRUYKLToxMDVFNzAwMDI3QzRBQzJFMEFERkE4NTUyN0I0RUMwRUREMDEyNEI0RUMKLToxMDVFODAwMEVCQzJFMDI3OTQyQzBFREQwMjI0OTQyQjJFMEE4MDBEMDkKLToxMDVFOTAwMDBENDYyNzU0NkMyNDU0NkIwRUREMDIyRDI0MkU2M0ZFMTgKLToxMDVFQTAwMEZDMDAwMDAwNkMxMDA0QzNBMEMwQjM1QkZGNTNDMDRBRTkKLToxMDVFQjAwMDEyREIyMUMzODAyODI2MTYyNDI2MTdDM0ExQzBCMzVCOUEKLToxMDVFQzAwMEZGNEVDMDNDQzNBMTJBMjYxNjE5REFCNjI5OTAyMDIzMUEKLToxMDVFRDAwMDI2MTc2NDkwOEYyQTBBMzIyQjBBMDE1QkZGNDdDM0EyNjAKLToxMDVFRTAwMDJCMEEwMTVCRkY0NUMzQjIyQjI2MTYyMzI2MTdDMkFGMzAKLToxMDVFRjAwMEMwQjE1QkZGNDFDMkZGMkYyNjE2QzBFRTJFMjYxN0MyOEYKLToxMDVGMDAwMEQyMkQyNjE2QzBDODJDMjYxNzI0MjYxMTJBMjIxMkM3RTUKLToxMDVGMTAwMEIzMEJBQTAxQzBCNDBCQUEwMjJBMjYxMjI5MEFBMTI5OEUKLToxMDVGMjAwMDI2MTZDMTgyMjgyNjE3QzBCMzJCMjYxMTJFMjIxMjFGMzcKLToxMDVGMzAwMERBQ0EwRkVFMDIyRTI2MTJDM0Q2MkQyNjE2MkEwQUEyODAKLToxMDVGNDAwMEMxQzMyQzI2MTc1QkZGMkMyQzBBQTIyQzI2MTZDMUI1MjgKLToxMDVGNTAwMDJCMjYxN0MyQUIyQTI2MTZDMDk3MjkyNjE3MThEQjAzNTMKLToxMDVGNjAwMDI4MjYxMEQxMEZDM0EyQzBCMzVCRkYyMzYzRkY2RTAwQ0UKLToxMDVGNzAwMDZDMTAwNDFDREFDRTFCREFCQjE4REFGRDE3REFGRTE2MzkKLToxMDVGODAwMERBRkUxNURBRkVDMEUwQzBENDE0REFDQTFGREE4NjIyQkYKLToxMDVGOTAwMDBBMDgyRkYyMDA2RDJBMzZEQUMwRDlDMDdDNUIwMjBGRTYKLToxMDVGQTAwMEM5MEMxQ0RBQzMwQzlDMjhBOEMzQTZDMjJBMzY4MDJBQjYKLToxMDVGQjAwMDI1ODRBNEMyQTdDQzJEMjQ4QzJCMjQ4QTJCMjQ4NzJFQTUKLToxMDVGQzAwMDI0OEJCMUJCMkUzNjlGMkMzNjlFMkMzNjlEQjFBQzFDM0IKLToxMDVGRDAwMERBQTUxQkRBRUJDMDI4NkQyQTMzREFDMEQ5QzA3QzVCQTYKLToxMDVGRTAwMDAyMEZDOTBDMUNEQUIzMEM5QzI4QThDM0E2QzIyQTM2MUYKLToxMDVGRjAwMDgwMkIyNTg0QTRDMkIxQkJBN0NDMkQyNDhDMkUyNDhCNEUKLToxMDYwMDAwMDJBMjQ4QTJFMzY5RjJDMzY5RTJDMzY5REIxQUNDMDc5MjAKLToxMDYwMTAwMDE5REFBMzFCREFERTEzREFEQjFBREFEQjE4REFERDE0OUQKLToxMDYwMjAwMERBQTQxNkRBREMwNEY0MjgxMkRBREMwNDY2MEMwNDA1QkYKLToxMDYwMzAwMDA2QTI1MkE4NThBQTVBQTM1MzlCMzAyOUE1MDAyNzg0MjgKLToxMDYwNDAwMDhBQzA5MUMwQTUyQTg0OEMyOTg0OEIxN0RBRDUxOERBRTYKLToxMDYwNTAwMEQzQTc1NzI2MzYxRDI2MzYxRTJFMzYxRjE2REFEMjEzMjQKLToxMDYwNjAwMERBRDJBNjU1MDQzMzBDMjgyNkM4MkU3NTAwMkQ1NEFDNjAKLToxMDYwNzAwMDJFNTRBQjJFNTRBQTIzMjZFNjIzMjZFNTJFMjZFN0QxNUUKLToxMDYwODAwMDBGMDAwMDAwNkMxMDA2MTNEQUFGMTdEQUFBMjQ3MjNENzUKLToxMDYwOTAwMDIyMzI5MzdGMkYwQjZEMDgwNTI4MzI5MzdGOEYwMjYzODYKLToxMDYwQTAwMEZGRjNDMEM0QzBCMDFFREEzRkMwNjFEOTQwMDk2OTM5RUUKLToxMDYwQjAwMDI5RTQyMDZFNDQwMUQ2QjBDMzI4REZCMDI2RTQyMjA2Q0UKLToxMDYwQzAwMDJGMzkyRkU0MjFDMDUwMUZEQUI5MTlEQUFBMTZEQUFCM0EKLToxMDYwRDAwMDE4REE3OTk0MTAyQTcyNDU4REUwMTdEQUE1OUQxMTFEMDIKLToxMDYwRTAwMERBQjQ2REE5NEJENDUwMjU1QzAzN0E1QjE4REU1MDc1ODkKLToxMDYwRjAwMDZCMDUyRTEyMDEwRTVFMEMxMkRBNkUwMkUyMjgwMTExRkYKLToxMDYxMDAwMDAyQUYyMjIyRDY4MUQ1NDAxM0RBNkE3NDZCMDUyNTEyQkMKLToxMDYxMTAwMDAxMDU0NTBDMDM1MzI4QjE0NUE4M0VBOTMyQTczMzIyRjcKLToxMDYxMjAwMDM2OUQyMjM2OUUyNDM2ODAyQjM2OUYyQkU0OEIyQ0U0MjIKLToxMDYxMzAwMDhDMTREQTg0MjQ0MjREQzAzMDA0MTQxNEM4NEM2RDA4MDkKLToxMDYxNDAwMDA2QjEzMzA0MTQxNEM4NDI2M0ZGRjIwMDE2REExM0M0MTQKLToxMDYxNTAwMDQwQzE1ODAwMzEwNDFBREExM0MwQjE5M0EyMDBCQjFBMkYKLToxMDYxNjAwMEIwQkI5QkEzMThEQTc4Mjk4MjREMjM4MjRFMjg4MjUzMzQKLToxMDYxNzAwMDdBODcxQzJDNjQwMDhDMTA2RkM0NDgxRURBMEEwNDNEMTgKLToxMDYxODAwMDBDMkRFNTFDMkZFMTFEMkRFNTFBMkZFNTFCRDEwRjAwNkQKLToxMDYxOTAwMEMwNzIxMkRBNjg4MjIwN0UyN0RCMDMwMzRGMjc2NDAwNzcKLToxMDYxQTAwMDg4MTBDMDYxNkY4NDMwQzBBMDAzMTkxNDBBNTQzOTFBRDIKLToxMDYxQjAwMEQ5RkQwNDk5MEMyOUE1MUMyOUE1MUQyOUE1MUEyOUE1RDUKLToxMDYxQzAwMDFCRDEwRjAwMUNEOUY4MDUzQjBDMkJDNTFDMkRDMTFEODQKLToxMDYxRDAwMDJCQzUxQTJEQzUxQkQxMEYwNjU0MzkwMzFFMTQwNEVFMEUKLToxMDYxRTAwMDBDMkVBNTFDMkVBNTFEMkVBNTFBMkVBNTFCRDEwRjAwMDkKLToxMDYxRjAwMDZDMTAwODFBRDlFQzE0REE0RjEzREE1MkM3MkZDMDUwQkEKLToxMDYyMDAwMDE2REE2QzI1NjZBODI1NjZBOTI1NjZBQTI1NjZBQjIyM0UKLToxMDYyMTAwMDM2MjkyQjQyNDUxOURBMTNEODEwMUNEQTY2QzBENDlERjIKLToxMDYyMjAwMDExOUMxMDAwODA4OTBCOTkwQzk5QTAyODE2MDI1QkZGMjUKLToxMDYyMzAwMDk1MkEzMkUzMUZEOURDMEE1QTE0OUFGNDI5MzJFNEIxQzAKLToxMDYyNDAwMDk5MDk1OTE0MEE5OTBDOTlGNTI4MzJFNTA4NTgxNDk4QjcKLToxMDYyNTAwMEY2MkUzMkNEMEU1RTE0MkVGNjA3NUJGRjQ1NUJGRjExNjYKLToxMDYyNjAwMDIyNDYzQjFDRDlEMDJBQzEwMkMxQjAwQkFBMDIxQkRBQkMKLToxMDYyNzAwMDJBMEEwQTRGMkFDNTAyMkI0NjNBNTgwNDk5NUJGRUJBRUQKLToxMDYyODAwMDVCRkU5NUMwQjA4NjEzMTdEOUM1MjUzNjJEQzc0RUMwMDUKLToxMDYyOTAwMDMwOTQxNEMwNTAxNEQ5Q0E2MDAwNDMwMDAwN0Y5RjBGOEYKLToxMDYyQTAwMEIxNTUwOTE5MTQ2NTlGRjRDMDUwMEFBOTAyN0ZBN0VGRTAKLToxMDYyQjAwMDE4RDlCQURBNTAwODU4MEEyODgyMkMyQjBBMDAwQjgwMDkKLToxMDYyQzAwMDAwMDA1MTA0RDJBMEMwOTFDN0FGMDA5OTFBMEE5OTAzRTcKLToxMDYyRDAwMDI5MTYwNENFMzM2NDIwNjNEMzIwMkIyMDA3RDY1MDhDOUMKLToxMDYyRTAwMDE0MkE3MjgyN0NBODVDMThEOUFDMDg1ODBBMjg4MjJDMUYKLToxMDYyRjAwMERBNTAwQjgwMDBEMkEwNjQzRkRBOEEzMTBBOEExNDA0OTMKLToxMDYzMDAwMEFBMDFDODJBMkIyMjAxMEI4QjE0MDRCQjAxN0FCOTQwQzUKLToxMDYzMTAwMEREQTA2RUExMDgxREQ5QTMyREQyMDAwREFEMENEQjMwODAKLToxMDYzMjAwMERDNjAxQUQ5RTMxOEQ5OUMwQURBMjgwODY4MEExRERBNTEKLToxMDYzMzAwMDFGMjg4MjNDQURBQTBCODAwMDY1MkY5QkQzMjBDMEIwRTQKLToxMDYzNDAwMDYzRkY5QjAwQ0E1Q0IxNTUwMDUwMDQwQTA5MTk2M0ZGNDIKLToxMDYzNTAwMDRCRENCMDZFQjEwOTFDRDk5MzhDQzBEMzBGMENCQzBDQjQKLToxMDYzNjAwMDFERDlENDFFREExMjBEQ0QyOEFFREQxRURBMTEyREU2QjAKLToxMDYzNzAwMDgxNjNGRjlCN0ZBN0NFNjNGRjZDMDAwMDZDMTAwNDFCNDIKLToxMDYzODAwMEQ5ODcyNzIyMUVDMDgwMDhFNDMxMDAwMjAwMkFCMjgyODkKLToxMDYzOTAwMDE5RDk4NTAwMzEwNEMwNjEwMDY2MUEyOTkxMDIwQTZBODAKLToxMDYzQTAwMDAyMkFCNjgyMDlFNDMxMTVEOURGMEMzODExQTg1MzI4MjYKLToxMDYzQjAwMDMyODIyNDMyODQyQThDRkM3ODQxMTAyOTIxMDIyQTM2MjgKLToxMDYzQzAwMDgyOTdBMDA5NjkwMjI5MjUwMkQxMEYwMDJCMjEwMjJDRjYKLToxMDYzRDAwMDMyODUwQjZCMDIyQ0NDRkMyQzM2ODI5N0MwMkIyNTAyMEQKLToxMDYzRTAwMEQxMEYwMDAwNkMxMDA2QzBDNzFCRDk2ODFBRDk2QTBERkUKLToxMDYzRjAwMDRFMTFENzIwODgyMDg1MjJEOTgwMDU0NTBCMDI4MjBDQkEKLToxMDY0MDAwMDk1NzIyMjJDRjRDODM0NkYyRTAyNjAwMEFCMUZEOTYwNDUKLToxMDY0MTAwMEE5RTJBRjdENzJEMzM0QzkzREMwMjEyRjBBMDAwOTJGRjQKLToxMDY0MjAwMDM4MEYwRjQyQzlGOTJBQjY3RTZENEEwNTAwMzA4ODAwNDAKLToxMDY0MzAwMDkwOEMyMjcyMDAwMkUyMDg3MkQxNzQ5MjcwRDI4MEQxRTQKLToxMDY0NDAwMDBGQzA1MDAzMjUzODc1QzBERjYzRkZEOTA5N0QwQ0FGM0QKLToxMDY0NTAwMEREMERFRTBDNjQzMDRFRDIzMDBEM0YxMjk2MTEyRjE2MkEKLToxMDY0NjAwMDAwMkZGQzEwMEY0RjM2MjYwQTAxMjUwQTAwMDk2NTM4NTcKLToxMDY0NzAwMDA1MDU0MjY0NTA3MTJBQjY3RTZERkEwNTAwMjA4ODAwMzkKLToxMDY0ODAwMDkwOENDMDUwQTNEMjg5MTAyMzdDMEMwOTQ0MEMyOTBBOUIKLToxMDY0OTAwMDAxMDM5NTM4MDUwNTQyNjQ1MDVBMkFCNjdFNkQ0QTA1QjcKLToxMDY0QTAwMDAwMjA4ODAwMzA4Q0QyODBBN0VBQkNBQTlBNzBEMTBGNTUKLToxMDY0QjAwMEQyODBCQzdCOUI3MEQxMEYwMDAyM0YxNEMxRDBEMjMwODAKLToxMDY0QzAwMDBGREQwQzBENEQzNjI5OEQwOEMwRjEyNTBBMDAwOUY1QTgKLToxMDY0RDAwMDM4MDUwNTQyQ0E1ODJBQjY3RTZEREEwNTAwMjA4ODAwQzQKLToxMDY0RTAwMDkwOEM4OTcwNjNGRjI1MDBDMDYxQzA1MDAzNjUzODc1Q0EKLToxMDY0RjAwMEMwODY2M0ZGODBDMEQwMDI5RDM4N0RDMDlGNjNGRjk5MzYKLToxMDY1MDAwMEMwNTAwM0Y1Mzg3NUMwRDA2M0ZGQ0EwMDZDMTAwNEQ2QzQKLToxMDY1MTAwMDIwNjg1MjBGNjk1MzI0REEyMERCMzBEQzQwNTgwMEYwNDkKLToxMDY1MjAwMEQyQTBEMTBGREEyMERCMzBEQzQwNTgwMEVEOUEyNDI0RDEKLToxMDY1MzAwMDI0MEVDMDIxMjI2NDBGQzAyMEQxMEYwMEI4M0JCMDRDMDQKLToxMDY1NDAwMDJBMkM3NDg5MjQyRDIwMEUyRTIwMEZBNEREQjFFRTJFQ0UKLToxMDY1NTAwMDI0MEZCMEREMkQyNDBFMjg5MDA3MkQ5MDAzQTQ4OEIwQzEKLToxMDY1NjAwMDg4QjFERDJEOTQwMzI4OTQwNzVCRkY5RTY5NTExREMwRkYKLToxMDY1NzAwMEUwODIyNDJBNjAwRjE4RDk5MDJBMjQwMzI5NjAwRThGMDQKLToxMDY1ODAwMDIwMjkyNDA3MDhGRjAyOUYyMDlFNjREMTBGQzAyMEQxM0MKLToxMDY1OTAwMDBGMDAwMDAwNkMxMDA0OTQyMzE5RDk4OEMwQjMwODNBODYKLToxMDY1QTAwMDExMEJBQTAyOTkyMDE5RDhGRDlBMjEyODkyOUQxNkQ4N0MKLToxMDY1QjAwMEZBQzA1MDI1NjRBMjI4OEMxODI4OTY5REQxMEYwMDAwOUYKLToxMDY1QzAwMDZDMTAwNDI4MjA2NkMwMzgyMzI0MDZCNzg4MjgyNDY2NjcKLToxMDY1RDAwMEQxMEYwMDAwNkMxMDA2MDM1QTBDMEQzNjExMEQ1QzExMjIKLToxMDY1RTAwMEQ4MjA4QjIyODIyMTBDQkIwQzA2NTUwRjlCODIwMjMyRDUKLToxMDY1RjAwMDBCOTI4MTEzRDhFN0Q5MjBBMzhGNjQ1MDUzMUNEOEUzQTIKLToxMDY2MDAwMEMwRDcxQkQ4RTRBMjU2QzBFMTI5MEEwMDA0RTkzODA5MjIKLToxMDY2MTAwMDA5NDI3NkYzNEEwNDQzMDJDOTlFMkJDNjdFNkRBQTA1NDEKLToxMDY2MjAwMDAwMjA4ODAwMzA4Qzg5ODFBOTU5MDlGQTBDNjRBMDc5NkUKLToxMDY2MzAwMDk5ODE4QTgyQzhBREQyOTBEMTBGQzA2MDAyRTYzODc2QzcKLToxMDY2NDAwMEQwREE2M0ZGRDRDMDIwQkM4OTk5ODE5OTgwOTI4MkQxMkQKLToxMDY2NTAwMDBGN0YyMzA0MjkyREY4OTk4MTY1QkZEOTYzRkZFNTAwRDkKLToxMDY2NjAwMDAyOEYwQ0EzRkYwRjMzMTI5MzEwMDNBQTBDRDM0MENCNUQKLToxMDY2NzAwMDlFMkJDNjdFODYxMDZENkEwNTAwMjA4ODAwMzA4Q0JDN0IKLToxMDY2ODAwMDgyMjkwQTAwMDRGMzA4MjQwQTAxMDM0OTM4MDkwOTQyNEYKLToxMDY2OTAwMENBOTgyQkM2N0U2REFBMDUwMDIwODgwMDMwOEMwRjU5NDEKLToxMDY2QTAwMDBDQTk4OUJDOTk5OTgxNjNGRjg3QkM4OTk5ODE2M0ZGOTMKLToxMDY2QjAwMDgwQzA2MDAyRTYzODc2RDBCQTYzRkZCNEMwNzAwMjQ3OEIKLToxMDY2QzAwMDM4NzdEMEQwNjNGRkNBMDA2QzEwMDQxNEQ4QzBDMTUyMTAKLToxMDY2RDAwMEE0MjRDOTNFMjgyMjFENzM4MTE5MjkyMTAyQ0Q5MzJBQTEKLToxMDY2RTAwMDMwMDA3NUE5MTJEQTIwREIzMDJDMzAwN0MwRDI1ODAxRjcKLToxMDY2RjAwMEM0NjUzRkRGRDEwRjAwMDAyQjMwMDcwM0JCMEJEQUIwQkUKLToxMDY3MDAwMDc0QjMwMjJBQkRGOEQzQTA2M0ZGQzYwMDZDMTAwNDI5M0QKLToxMDY3MTAwMDIwMDZDMDcwNkU5NzQxMjkyMTAyQzA4RjJBMjAxNEMwMjQKLToxMDY3MjAwMEI2MkIyNDA2MDZBQTAyMkEyNDE0Nzk4MDAyMjcyNTAyMDEKLToxMDY3MzAwMDJBMjIxRTJDMjIxRDdBQzEwRUM4QUJEQTIwREIzMDJDOTcKLToxMDY3NDAwMDBBMDAwMzNEMDI1QkY4MjI2NDUwNzUyRDIxMDIwRDBERjUKLToxMDY3NTAwMDRDQzlEM0MwMjBEMTBGMDAwMDJFOUNGQjY0RTA4MjJGRDcKLToxMDY3NjAwMDIxMDIwRjBGNEM2NUYwOTExQUQ4OEQxQ0Q4OEIyOUEyRUQKLToxMDY3NzAwMDlFQzA4QTc5OEI1RDJCQzIyNjY4QjAwNDhEMjA3QkQ5QTAKLToxMDY3ODAwMDUyMjlBMjlEQzBGMzY0OTA0QTk3OTAxREQ4OUUyRTIxNTUKLToxMDY3OTAwMDA0OUQ5NjA4RUUxMTBGRUUwMjlFOTc5RTkxMjdDNEEyQ0IKLToxMDY3QTAwMDE4RDg5QTJGMjEwMjJCQTI5REMwRTUyRTI0MDYyQkJDQkYKLToxMDY3QjAwMDMwMDhGRjAyMkJBNjlEMkYyNTAyQzAyMEQxMEYwMDAwMUMKLToxMDY3QzAwMDAwMkYzMDAwNjhGOTM4REEyMERCMzBEQzQwNTgwMDQ0MTQKLToxMDY3RDAwMDYzRkY3NzAwMDIyQTAyMkIwQTA2NTgwMEQ0MjIwQTAwMUYKLToxMDY3RTAwMEQxMEY2NTUwMTAyODMwMDA2ODg5MjQwMjJBMDIwMzNCMkIKLToxMDY3RjAwMDAyREM0MDU4MDAzQkMwMjBEMTBGRDI3MEQxMEYwMDAwMDYKLToxMDY4MDAwMDJBMkM3NDAzM0IwMjA0NEMwMjVCRkVGNjYzRkYzQjAwNDAKLToxMDY4MTAwMERCMzBEQzQwMkEyQzc0NUJGRUYzQzAyMEQxMEYwMDAwN0IKLToxMDY4MjAwMDZDMTAwNEM4M0Y4OTI2ODgyOUEzOTk5OTI2MDk4ODBDRTkKLToxMDY4MzAwMDA4MDg0ODI4MjUyNUNDNTJDMDIwRDEwRkRCNDAyQTJDM0YKLToxMDY4NDAwMDc0NUJGOTQ5RDJBMEQxMEY2QzEwMDREODIwRDczMDgyRTQKLToxMDY4NTAwMDIyMEQ0NTExMDUyMjBDOTI4MjY0MjA3NDA3NDIwQjEzMEQKLToxMDY4NjAwMEQ4NENENDIwQTM4MzczMjMwMjI0MkRGODg1ODA3NDUxM0YKLToxMDY4NzAwMDRDQkM4MkMwOTA2RDA4MTYwMDQwODgwMDcwOEM3NzM5M0YKLToxMDY4ODAwMDAzRDcyMEMwOTE4NjgwNzQzOTAxRDQyMDc0NjEwMjYzREIKLToxMDY4OTAwMEZGRTJDQTk4QzA5N0MwNDExQkQ4Q0FDMEEwMEI4QjBDOUUKLToxMDY4QTAwMDBCNEEzODBBMEE0MkM5QUExREQ4MzkxQ0Q4M0EyQ0Q2MzQKLToxMDY4QjAwMDdFQzE0MEQzMEY2RDRBMDUwMDIwODgwMDMwOEM5NzgwNDAKLToxMDY4QzAwMEQyNzBEMTBGQkM4RkMwRTAwRjRFMzg3RTkwRTI2M0ZGRDQKLToxMDY4RDAwMEQ2QkM4MjkyODE5MjgwQzAyMDkyODJEMTBGMDAwMDAwQUIKLToxMDY4RTAwMDZDMTAwNkMwRDcxQ0Q4MjkxQkQ4MkIwRDQ5MTFENzIwRjYKLToxMDY4RjAwMDJBMjIxRjI4MjIxRDBBNEEwQkQyODAwNzg2MEMyQTc2REMKLToxMDY5MDAwMDFGMjY2QzgwQzgzNDZGNkUwMjYwMDBEMDJGMEE4MDFBNzgKLToxMDY5MTAwMEQ4MkZBMjlFQUE3QTdFQTMzRkM5M0ZDMEUxQzA1MDAyRjEKLToxMDY5MjAwMEU1MzgwNTA1NDJDQTU1MkJDNjdFREIyMEQzMEY2RDRBREMKLToxMDY5MzAwMDA1MDAzMDg4MDBCMDhDMkU3MjFEQUU5RTBFQTUwQzY0MzIKLToxMDY5NDAwMDUwOEFEMjgwMkU3NjFEQzA5MTI5ODQwM0QxMEZDMDUwNjkKLToxMDY5NTAwMDAzRTUzODc1RDBEMzYzRkZDRDE1RDgxQzAyN0UwQ0E1OTYKLToxMDY5NjAwMEVFNjQzMDU1REEzMDBFMzUxMjk2MTI5NTExMjU1QzEwMTIKLToxMDY5NzAwMDA1NDUzNkMwNjE5NTEwQzA1MDAyNjUzODA1MDU0MjY0NzIKLToxMDY5ODAwMDUwODkyQkM2N0U4NTEwRDMwRjZENUEwNTAwQTA4ODAwNTQKLToxMDY5OTAwMDIwOENDMEExQTNFMkMwNTAyM0ZBODAwMzczMEMwM0E1OEUKLToxMDY5QTAwMDM4QUY3MzA1MDU0MjY0NTA3MjJCQzY3RTg1MTEwNTQ1Q0MKLToxMDY5QjAwMDBDNkQ1QTA1MDAyMDg4MDAzMDhDRDI4MEMwQTEwRTlCM0YKLToxMDY5QzAwMDBDQUI3QkFGQkIyQjc2MUQyQTg0MDNEMTBGRDI4MEMwQ0EKLToxMDY5RDAwMEMxQUY3RDJENzYxRDJDODQwM0QxMEYwMDAwMDYzRjE0MUUKLToxMDY5RTAwMEMxRTBEMjMwMEZFRTBDMEU0RTM2MkE4RDA4QzBGMTI1RDQKLToxMDY5RjAwMDBBMDAwQUY1MzgwNTA1NDJDQTVDMkJDNjdFNkRFQTA1MTkKLToxMDZBMDAwMDAwMjA4ODAwQTA4QzIyNzIxRDYzRkVGRkMwNjFDMDUwNzAKLToxMDZBMTAwMDAzNjUzODc1RDgwMjYzRkY2QjYzRkY2NUMwNTAwMkE1M0MKLToxMDZBMjAwMDM4NzVEMDg3NjNGRjgxMDBDMDYwMDNGNjM4NzZEMENDMUMKLToxMDZBMzAwMDYzRkZDNjAwNkMxMDA0MkEyMDE1MjkyMDE2MTREN0Q5MkMKLToxMDZBNDAwMDBBOTkwQ0NCOUQyRTIwMEIwNEVEMDkyQkQxMUMwOUJDRkYKLToxMDZBNTAwMDM2QUNBQTBDQkIwQzJCRDUxQzBBMEE0NzJBMjQxNUNCMzIKLToxMDZBNjAwMEExOEI0MzhGMjg4OTQyQjBBODAwOTEwNDAwODgxQUE4RkUKLToxMDZBNzAwMEZGMEZCQjAyOUIyNzhGMjYwRkI4MEM3ODNCMUFDMDIwNTQKLToxMDZBODAwMEQxMEYwMDAwMjkyMTAyQzBBMjBBOTkwMjI5MjUwMkMwQzMKLToxMDZBOTAwMDIxRDEwRjAwOEIyNzYzRkZEQzJCRDExQzBDQUEwQzBBMjEKLToxMDZBQTAwMDBBNDcyQTI0MTVBQ0JCMkJENTFDQzlBRThCNDM4QzI4QjYKLToxMDZBQjAwMDhGNDJCMEFEMDBGMTA0MDBERDFBQURDQzBDQkIwMjlCREYKLToxMDZBQzAwMDI3REEyMEI3RUI1ODAwMTlDMDIxRDEwRjlGMjc2M0ZGQTkKLToxMDZBRDAwMEVGMDAwMDAwNkMxMDA0MjgyMDNDNjQzMDQ3MDUzMDYwNTMKLToxMDZBRTAwMDAwMDczRTAxMDUzRUIxNTYwNzY1MzkwNTQ5MjhDNzdGQjUKLToxMDZBRjAwMEE5MzMwMzA2NDEwNzY2MDNCMTY2MDYwNjQxQTYzMzdFNDUKLToxMDZCMDAwMDg3MUUyMjIxMjUyOTFBRkM3MzJCMTUwMjM4MEMwOTgxQjYKLToxMDZCMTAwMDYwMDAwNjNFMDEwMjNFQjEyNDA2NDIzOTAzMjIwQUQxM0EKLToxMDZCMjAwMDBGRDIzMEQxMEZDMDUxNjNGRkMwMDAwMDZDMTAwNDFEQTQKLToxMDZCMzAwMEQ3OUIyNzIyMUVDMDgwMDhFNDMxMDAwMjAwMkNEMjgyOUQKLToxMDZCNDAwMDFCRDc5OTAwMzEwNEMwNjEwMDY2MUEyQkIxMDIwQzZDOEUKLToxMDZCNTAwMDAyMkNENjgyMEJFNDMxMTlEODFCMEMzQTExQUE5MzI4QzcKLToxMDZCNjAwMDMyODI5NzgwMjUzMjgyMjQzMjg0QjQ1NTI1MzY4Mjc1NEMKLToxMDZCNzAwMDQxMEEyOTIxMDIwOTY5MDIyOTI1MDJEMTBGMkEyMTAyOEQKLToxMDZCODAwMDJCMzI4MzBBNkEwMjJCMzY4MjJBMjUwMkQxMEYwMDAwOUIKLToxMDZCOTAwMDZDMTAwNDFERDc4MjE5RDc4QzI3MjIxRUMwODAwOTc3NUMKLToxMDZCQTAwMDAyMDhFNDMxMDAwMjAwMkNEMjgyMUJENzdFMDAzMTA0OUYKLToxMDZCQjAwMEMwNjEwMDY2MUEyQkIxMDIwQzZDMDIyQ0Q2ODIwQkU0NjkKLToxMDZCQzAwMDMxMTlEODAwMEMzQTExQUE5MzI4MzI4Mjk3ODAyNTMyQzUKLToxMDZCRDAwMDgyMjQzMjg0QjQ1NTI1MzY4Mjc1NDEwQjJBMjEwMjBBNUIKLToxMDZCRTAwMDZBMDIyQTI1MDJEMTBGMDAyQjIxMDIyQzMyODMwQjZCNjMKLToxMDZCRjAwMDAyMkMzNjgyMkIyNTAyRDEwRjAwMDAwMDZDMTAwNDFCRTIKLToxMDZDMDAwMEQ3NjcwQzJBMTFBQkFBMjlBMjg2QjQzODc5OEIyMjFCMkMKLToxMDZDMTAwMEQ3NjQxOUQ3OEIwQjJCMEEyQkIyQTMwOTI5MDg2OEIwQUMKLToxMDZDMjAwMDAyNzRCOTBEMjk5RDAxMjk5MDFGNkU5MjA4MjJBMjg1MzgKLToxMDZDMzAwMEQxMEZDMDIwRDEwRkM4OTJDMDIwRDEwRkRBMjA1QkVGNTYKLToxMDZDNDAwMDNEQzAyMEQxMEYwMDAwMDA2QzEwMDQxNEQ3NTQyODQyMUUKLToxMDZDNTAwMDlFMTlENzUxNkY4ODAyNjAwMEI5Mjk5MjI2Njg5MDA3NjMKLToxMDZDNjAwMDhBMjAwOUFBMEM2NUEwQUIyQTQyOURDMERDNjRBMEEzQkYKLToxMDZDNzAwMDJCMjAwQzE5RDc0QjBDQkMxMUE0Q0MyRUMyODYwOUI5MDEKLToxMDZDODAwMDBBN0VEMzAyNjAwMDk5Mjk5MkEzNjg5MDA3OEQyMDA5OUIKLToxMDZDOTAwMEREMEM2NUQwOEIyNUMyODU2NDUwODUyRDIxMDRDMDMwNjQKLToxMDZDQTAwMDZFRDgwRDJDMjA2NkI4Q0MwQzBDNDcyQzI0NjY2NUMwMjEKLToxMDZDQjAwMDdBMUFENzUyMUNENzVCMURENzQ4MUVENzRGQzA4NDk4NkQKLToxMDZDQzAwMDUxOUU1MDg5MjA5RDU2OUQ1NDkzNTc5MzU1OUM1MzBBMkQKLToxMDZDRDAwMDk5MDIxQ0Q3QkQxQUQ3NjQ5OTUyOEYyNjk5NUE5ODU5OTAKLToxMDZDRTAwMDlFNTg5MzVFOUM1RDkzNUM5QTVCMEYwRDQ4MDVERDExODkKLToxMDZDRjAwMDlENUZDMEQ4MUVENzMyMENCOTExQTQ5OTI4OTI4NUFFRDkKLToxMDZEMDAwMEJFMjNFNENGMjg4QzQwMjg5Njg1OUYyOTJEMjQwNkMwRDkKLToxMDZEMTAwMDIwRDEwRjAwQ0EzMkRBMjBDMEI2NUJGRjg0QzcyRkQxNjIKLToxMDZEMjAwMDBGQzkzOURBMjA1QkZGODFDNzJGRDEwRkRCRDA1QkZFQTMKLToxMDZEMzAwMDE5MjMyNDY2MkIyMDBDNjNGRjc2QzcyRkQxMEZDNzJGOTIKLToxMDZENDAwMEQxMEYwMDAwNkMxMDA0Qzg1QjI5MjAwNjY4OTQxQzY4RjEKLToxMDZENTAwMDk2MDdDMDIwRDEwRkMwMjBEMTBGREEyMERCMzBEQzQwRjUKLToxMDZENjAwMERENTAyRTBBMDA1QkZFNjlEMkEwRDEwRjJFMjAwQzE4MzgKLToxMDZENzAwMEQ3MEIwQ0VGMTFBOEZGMjlGMjg2QzA4ODc5OEI3NTFBMDIKLToxMDZEODAwMEQ3MDgwQUVBMEEyQUEyQTM2OEEwMDQ4QjIwN0FCOTY0NjkKLToxMDZEOTAwMDIzRjI4NTY0MzA1RTFDRDcxMjJBMEE4MDJEMjA2ODI5RDAKLToxMDZEQTAwMDIwNjcyODIxMDQwQjk5MTEwNDg4MTEwOTg4MDIwOERENDUKLToxMDZEQjAwMDAyQzA5NDI4NEExMDA4REQwMjE4RDcwQTk5MzE5ODMwODkKLToxMDZEQzAwMDhCMkI5QTM3OUQzNDBDQkIwMjlCMzJDMEMwOUMzNTlDRTgKLToxMDZERDAwMDM2MkEyQzc0REI0MEMwRDMxOEQ2RjkyOUYyODVBOEVFRTgKLToxMDZERTAwMDI5OUMyMDI5RjY4NTJDRTRDRjJEMjQwNkRENDA1QkZENkYKLToxMDZERjAwMEY5RDJBMEQxMEZEQTIwREJFMDVCRkY0Q0MwMjBEMTBGMkQKLToxMDZFMDAwMDZDMTAwQUQ2MzAyQTIwMDY5NDEwMjhBQ0Y4NjU4M0ZGNEYKLToxMDZFMTAwMDJCMjEyMjI3MEEwMjJBMjEyNENDNTcyQUFDMDEwQTBBNTQKLToxMDZFMjAwMDRGMkEyNTI0N0FCQjAyNjAwM0Y3MkMyMTAyMkEyMDBDNkEKLToxMDZFMzAwMDBDMEM0QzY1QzM4RTJFMjIxNThEMzJDMEYxMEVERDBDNkMKLToxMDZFNDAwMDY1RDQwNDg4MzgxRUQ2RDU2NDgzRTE4RjM3QzBDOEMwQTYKLToxMDZFNTAwMDk2MEZDOTM5OTkxNEI0OUI5QjExMEQ5OTExOTkxM0M5QjcKLToxMDZFNjAwMEZCMTlENkQwMjk5MDIxN0Y5MzEzOEIxNDhDMjA1QkZGQzQKLToxMDZFNzAwMDYzMUVENkNBRERBMDY0QTQxQzhGNjc2MDAwMjk4QzExMzQKLToxMDZFODAwMDBDQUQxMUFFREQyOEQyODYwQUFCMDI3OENCNjIxQUQ2RTEKLToxMDZFOTAwMEM0MEFCQTBBMkFBMkEzNjhBMDA1MkMyMjAwN0FDOTUwMDMKLToxMDZFQTAwMDJBRDI4NUREQTA2NEEzRDcyOTIxMkUwOUY5MzYyQTIwMEMKLToxMDZFQjAwMDNDMDlGODBDNkY4RDNFRDdGMENCN0YyODIxMUYwODcwNUUKLToxMDZFQzAwMDYwMDEwQjNFMDAwNDNFQjFCQzA0Q0IzOUM3NEYwQkJCODUKLToxMDZFRDAwMDBBMDdCQjBBMEIwQzQxMDRDQzAzQjFDQzBDMEM0MUFDMkYKLToxMDZFRTAwMEJCRDRCMEMwQzI3Q0EwNEMyQTIxMjU3QkFCNDY2MDAwM0QKLToxMDZFRjAwMDJDQzBBMDYzRkZBQ0Q3OTA2M0ZGQkQwMEMwOTJDNzRGMEEKLToxMDZGMDAwMDJDN0MxNDBDMEI0MTA0QkIwM0IxQkIwQjBCNDFBQjc0QzkKLToxMDZGMTAwMDI0NEMxNDc5QTAxRTJBMjEyNTc0QUIxOEFDQkIyNDFBNkEKLToxMDZGMjAwMEZDMEFCQzBDMDRDMTYwMDAwOTNFMDEwNDNFQjE0ODA5RTIKLToxMDZGMzAwMDg0MzkwQjQ0MEE4OTI2ODgyNzA5ODgwQzc0ODMxREMwNkMKLToxMDZGNDAwMDgwOThEODhDNjQ5Q0Q5OEI2NjhBNjU5QkRCOUFEQTk3OEIKLToxMDZGNTAwMEQ1N0Y3MzAyNjAwMTNBQ0U1RTYwMDAxNjAwOUQxNURBOUYKLToxMDZGNjAwMDIwREI0MDVCRkVCNDhEMTUxRUQ2OEQ2NUEyNTY4RjY3NjMKLToxMDZGNzAwMDYzRkZDQjlEMTVEQTIwREIzMDhDMTA1QkZFNTk4RDE1M0QKLToxMDZGODAwMDFFRDY4N0MwNTFENkEwOEZBN0MwQzA4QTY4OTdERDlBNDkKLToxMDZGOTAwMERDODg2OTg5NkE5OERFOTlERjhCNkE4QTY5QUI3Qjc3QkUKLToxMDZGQTAwMEJCMDIyQUFDMDE5QjZBOUE2OTg4NjBDMEEwMDg4QjE0NTYKLToxMDZGQjAwMDc3ODcwMUMwQTFDMDkwMjgyMDNDOTQxNzk1MTg5MzE2OUMKLToxMDZGQzAwMEMwNTBDMDMxQzA0NDA0ODQwMTA0MzkzODA4OTkxMEMwNEQKLToxMDZGRDAwMDQyMDQ4NDAxMDQzNTM4MDgzODQwODMyQjBCQTQxMDA3ODEKLToxMDZGRTAwMDU1MTAyQTIxMUYwOTU1MDIwNTQ0MDIwQjE5NDAwQTJBOEYKLToxMDZGRjAwMDE0MDc5OTEwMDU4NTEwMDQzMzAyMEE4ODExMTRENkYzN0EKLToxMDcwMDAwMDA5NTUwMjI5MjEwNDA0MzMwMjA4OTkxMTA5ODgwMkMwOTQKLToxMDcwMTAwMDkyMDk4ODAyMjkyMTI1OTNEMDA5MjkxNDA0OTkxMTBBN0IKLToxMDcwMjAwMDk5MDIwOTU1MDI4QTIwODkxNDA4QUExMTBBOTkwMjFBOUMKLToxMDcwMzAwMEQ2NkYxNEQ2RTcwQTk5MDI5OUQxODMyQTk1RDY5OEQ3QTQKLToxMDcwNDAwMDg1MTgwNDMzMDI5M0Q0ODQxNzgzMTY4QTY1OEQ2NkFBNDMKLToxMDcwNTAwMENBQUQ3RDc3REIwMUIxQUEwN0ZGMEM5QTY1OUQ2Njg4RjIKLToxMDcwNjAwMDI2OEMyOUE0ODgwOENDMEM5ODI2MEMwQzQ4MkMyNTI1QTUKLToxMDcwNzAwMDlGNjcyQTIwMENDMEMwMUJENjUxMENBOTExQUU5OUFCM0EKLToxMDcwODAwMEFCMjg5Mjg1MkNCNENGOEIxM0FCODgyODk2ODU2M0ZERjMKLToxMDcwOTAwMENEMDBDMDkxQzBGMEMwQjJDMEM0ODg2MDIzMjAzQzk4MkQKLToxMDcwQTAwMDEyMEMzQzAxMEIzQTAxMDg4ODE0MEI4ODAxMEE5RjM4MjYKLToxMDcwQjAwMDA3RkYxMDA4OTgzOUMwQTAwQzlBMzgwNzg4MTAwOEFBNTIKLToxMDcwQzAwMDEwMEFGRjAyQzBBODBBMzMwMTAzOTMzOTJBMjEwNDI5QjgKLToxMDcwRDAwMDIxMjUwNTNDMTAwOENDMDIwQTMzMTEwOEFBMTEwOTI5MDAKLToxMDcwRTAwMDE0MDNBQTAyMDQ5OTExMEJBQTAyMkIyMTFGODMxNDBCNkIKLToxMDcwRjAwMDJCMTQwQjk5MDIwQzk5MDI4QjIwMUNENjNDMDhCQjExNTcKLToxMDcxMDAwMDAzQkIwMjBDQkIwMjgzMkE4QzJCNjQ3MDg0ODg2ODk3QjMKLToxMDcxMTAwMEREOThEQzg3Njk4ODZBOTdERTk4REY4ODEyQzA3MDc3MEYKLToxMDcxMjAwMDg3MDFDMDcxOUJEMTk5RDYwQjc4MTA5QUQ3MTdENkE5MzEKLToxMDcxMzAwMDA4RjgwMjA4QzgwMjA3ODgwMjE3RDZBNTk4RDAwNzM3QjIKLToxMDcxNDAwMDAyOTdENDI4MjAwQzI5NUNGRTJCMjEyNEMwRjAxQUQ2RUIKLToxMDcxNTAwMDFCMEM4RDExQUVERDJDRDI4NUFBODgyRjg0Q0Y4RjEzMDYKLToxMDcxNjAwMEIwQkJBRkNDMkNENjg1MkEyMjE1MkIyNTI0QjFBQTJBNTgKLToxMDcxNzAwMDI2MTU2NDkwRENDODRGOEMyNjhCMjlBNENDOUMyNjBDNDkKLToxMDcxODAwMEJCMEMwQjBCNDgyQjI1MjU2NTUwRThDMDIwRDEwRjAwMDgKLToxMDcxOTAwMDAwMDBDMDcwOUJEMTk5RDY5QUQ3ODgxMjkzRDQ3Nzg3NzQKLToxMDcxQTAwMDBFMThENjAwOTIxQTI4ODAyMkMwMjEwODI3Mzg4MjFBODkKLToxMDcxQjAwMDE4RDY4QTBCNzMxMDAzRjMwMjAzQzMwMjA4MzMwMjkzMzkKLToxMDcxQzAwMEQwNjNGRjdFMDBDQzU3REEyMERCNjA4QzEwNUJGREM0RkYKLToxMDcxRDAwMDI5MjEwMjY4OTgwNjY4OTQwM0MwMjBEMTBGMkIyMjFFMzMKLToxMDcxRTAwMEMwOTAyODIyMUQyOTI1MDI3Qjg5MDFDMEIwNjRCRkU4MTgKLToxMDcxRjAwMDEzRDVFQTJDQjAwNzI4QjAwMERBMjAwMzg4MEEyODgyQzkKLToxMDcyMDAwMDRDQzBEMTBCODAwMERCQTA2NUFGRTc2M0ZGQ0EwMDAwNzQKLToxMDcyMTAwMDY4QTc3NURBMjBEQjMwREM0MERENTA1QkZFQ0FEMkEwMDcKLToxMDcyMjAwMEQxMEZDMUZEQzE5RDI5MjUyQzYwMDAwMzAwMkYyNTJDMDUKLToxMDcyMzAwMDJGMjQ2NzI3MjQ2OERBMjBEQjMwOEMxMERENTAyRTBBREIKLToxMDcyNDAwMDgwNUJGRDMyRDJBMEQxMEZDMUY4QzFBODJBMjUyQzYzRTIKLToxMDcyNTAwMEZGRERDODRGOEMyNjhCMjlBNENDOUMyNjBDQkIwQzBCQzUKLToxMDcyNjAwMDBCNDgyQjI1MjUyQTJDNzREQjYwMkMxMjAwNUJGRDc2NDUKLToxMDcyNzAwMEQyQTBEMTBGMkEyQzc0OEIxMDVCRjZCQkQyQTBEMTBGRjkKLToxMDcyODAwMERBMjA1QkZFMkE2M0ZGM0MwMERBMjBDMEIxNUJGRTZFQjEKLToxMDcyOTAwMDY1QUYzMTYzRkI3OURBMjAyQjIwMEM1QkZFM0Q2M0ZGODkKLToxMDcyQTAwMDIzMDAwMDAwMTJENjRFODIyMDAyODI1N0M4MjE2M0ZGQkQKLToxMDcyQjAwMEZDMTJENjRBMDNFODMwMDRFRTMwMDVCMTMwOTMyMDk0MzYKLToxMDcyQzAwMDIxOTUyMjYzRkZGQzAwMDAxMEQ2NDY5MTAwOTIwMTkzQTUKLToxMDcyRDAwMDAyOTQwMzExRDYxRDgyMTAwMUVBMzBBMjExMDFGMDMxOEYKLToxMDcyRTAwMEMwNDAwNEU0MTYwMDAyMDAxMUQ2M0Y4MjEwMjM0QTAwNzkKLToxMDcyRjAwMDAzMjIwMjkyMTAxMUQ2MDlDMDIxOTIxMDA0RTQzMTg0QjUKLToxMDczMDAwMDAzODMwMjgyMDE4MTAwMDBEMjMwMDEyMzAwMDAwMDAwQ0IKLToxMDczMTAwMDEwRDYzNjkxMDA5MjAxOTMwMjk0MDMxMUQ2MEM4MjEwN0MKLToxMDczMjAwMDAxRUEzMEEyMTEwMUYxMzFDMDQwMDRFNDE2MDAwMjAwNkMKLToxMDczMzAwMDExRDYyRDgyMTAxM0Q1QjQwMzIyMDI5MjEwMDRFNDMxMjkKLToxMDczNDAwMDg0MDM4MzAyODIwMTgxMDAwMEQzMzAwMTMzMDAwMDAwRjYKLToxMDczNTAwMDEwRDYyNzkxMDA4MTAxNjUxMDQ5ODEwMjY1MTA0NDgxOTIKLToxMDczNjAwMDAzQ0YxRjkyMDE5MzAyOTQwMzExRDVGQTgyMTAwMUVBMTAKLToxMDczNzAwMDMwQTIxMTAxRjIzMUMwNDAwNEU0MTYwMDAyMDAxMUQ2MUYKLToxMDczODAwMDE5ODIxMDEzRDU5QjAzMjIwMjkyMTAwNEU0MzE4NDAzNjYKLToxMDczOTAwMDgzMDI4MjAxQzAxMDkxMDM5MTAyOTEwMTgxMDAwMEQ0MDcKLToxMDczQTAwMDMwMDE0MzAwMTJENUNBQzAzMDI4Mzc0MDI4Mzc0NDI4NUUKLToxMDczQjAwMDM3NDgyODM3NEMyMzNEMDE3MjMzRUQwMzAyMDA2M0ZGNDkKLToxMDczQzAwMEZDMDAwMDAwMTBENjBCOTEwMDkyMDE5MzAyOTQwMzExNkYKLToxMDczRDAwMEQ2MDk4MjEwOTIxMDExRDVCQzgzMTAwMzIyMDI5MjEwOUMKLToxMDczRTAwMDExRDYwNjEyRDVDRDkyMTBDMDQwMDRFNDE2MDAwMjAwNUEKLToxMDczRjAwMDExRDVGRDgyMTAxM0Q1QjUwMzIyMDI5MjEwMDRFNDMxOTkKLToxMDc0MDAwMDg0MDM4MzAyODIwMTgxMDAwMEQ1MzAwMTUzMDAwMDAwMTMKLToxMDc0MTAwMDZDMTAwMjZFMzIyRkQ2MjAwNTZGMDQwNDNGMDQ3NDVCOUIKLToxMDc0MjAwMDJBMDU0NDBDMDA0MTA0MDAzMzFBMjIwQTAwNkQ0OTBENUMKLToxMDc0MzAwMDczNjMwNDAzNjYwQ0IxMjIwRjIyMTEwMzEzMTQ3MzYzRTgKLToxMDc0NDAwMDAyMjIyQzAxRDEwRkM4M0JEMTBGMDAwMDczNjMwQ0MwODYKLToxMDc0NTAwMDIxRDEwRjAwMDAwMDAwMDA0NDQ5NTYzMEMwMjBEMTBGNTgKLToxMDc0NjAwMDZDMTAwMjAwNDAwNDZCNEMwNzAzMjMxODAyMDIxOUQxNzAKLToxMDc0NzAwMDBGMDIwMzE5QzAyMEQxMEY2QzEwMDIwMkVBMzBEMTBGQTUKLToxMDc0ODAwMDZDMTAwMkNDMjUwM0YwMzE2MDAwMEYwMDZGMjIwNTAzNjEKLToxMDc0OTAwMEYxMzE2MDAwMDU2RjIzMDUwM0YyMzEwMDAyMDBEMTBGQzYKLToxMDc0QTAwMDZDMTAwMkNDMjUwMkYwMzBEMTBGMDAwMDZGMjIwNDAyRDQKLToxMDc0QjAwMEYxMzBEMTBGNkYyMzA0MDJGMjMwRDEwRkMwMjBEMTBGNzEKLToxMDc0QzAwMDZDMTAwMjIyMEEyMDIzMEEwMDZEMjgwRTI4Mzc0MDI4NUIKLToxMDc0RDAwMDM3NDQyODM3NDgyODM3NEMyMzNEMDEwMzAyMDBEMTBGOTkKLToxMDc0RTAwMDZDMTAwMjAyRTQzMUQxMEYwQTAwNDM2ODY1NkM3MzY5QzUKLToxMDc0RjAwMDZGMjA0NjU3MjA0NDQ1NDI1NTQ3M0QzMDIwMjg0Mjc1NkQKLToxMDc1MDAwMDY5NkM3NDIwNTQ3NTY1MjA0MTc1NjcyMDMxMzIyMDMwRDQKLToxMDc1MTAwMDM5M0EzNDMzM0EzMDM0MjA1MDQ0NTQyMDMyMzAzMDM4MDEKLToxMDc1MjAwMDIwNkY2RTIwNjY2NTZDNjk3ODJFNjE3MzY5NjM2NDY1OEYKLToxMDc1MzAwMDczNjk2NzZFNjU3MjczMkU2MzZGNkQzQTJGNjg2RjZEMzYKLToxMDc1NDAwMDY1MkY2NjY1NkM2OTc4MkY3NzJGNjY3NzVGMzYyRTMwRUEKLToxMDc1NTAwMDI5MkMyMDU2NjU3MjczNjk2RjZFMjA1NDMzNzg3ODIwMTkKLToxMDc1NjAwMDMwMzAzNzJFMzAzMDJFMzAzMDIwMkQyMDMxMzAzMDM3MzMKLTowQzc1NzAwMDMwMzAzMDMwMTAwNzAwMDBDQzQ0QTBENkIyCi06MDAwMDAwMDFGRgpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvY3hnYjMvdDNmdy03LjEuMC5iaW4uaWhleCBiL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4xLjAuYmluLmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA0MmY3NQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2N4Z2IzL3QzZnctNy4xLjAuYmluLmloZXgKQEAgLTAsMCArMSwxODg1IEBACis6MTAwMDAwMDA2MDAwNzQwMDIwMDM4MDAwMjAwMzcwMDAwMDAwMTAwMEQ2Cis6MTAwMDEwMDAwMDAwMjAwMEUxMDAwMjg0MDAwNzAwMDBFMTAwMDI4OEU3Cis6MTAwMDIwMDAwMDAxMDAwMEUwMDAwMDAwRTAwMDAwQTAwMTAwMDAwMDZFCis6MTAwMDMwMDA0NDQ0NDQ0MEUzMDAwMTgzMjAwMjAwMDAyMDAxRTAwMDJBCis6MTAwMDQwMDAyMDAxRkYxMDFGRkZEMDAwMUZGRkMwMDBFMzAwMDQzQzkxCis6MTAwMDUwMDAwMjAwMDAwMDIwMDA2OTg4MUZGRkMyOTAyMDAwNjlEMEM0Cis6MTAwMDYwMDAxRkZGQzI5NDIwMDA2QTEwMUZGRkMyOTgyMDAwNkE4NEZDCis6MTAwMDcwMDAxRkZGQzI5QzIwMDAwM0MwQzAwMDAwRTQzMTAwRUEzMTMxCis6MTAwMDgwMDAwMEExMzEwMEEwMzEwMzAyMDAwMkVEMzA2RTJBMDUwMDBDCis6MTAwMDkwMDBFRDMxMDAwMjAwMDIxNjAwMTJGRkRCQzAzMDE0RkZEQTVGCis6MTAwMEEwMDBEMzBGRDMwRkQzMEYwMzQzMUYyNDRDMTA3MjQ5RjBEMzQ3Cis6MTAwMEIwMDAwRkQzMEZEMzBGMTJGRkQ1MjMwQTAwMjQwQTAwRDMwRjRBCis6MTAwMEMwMDBEMzBGRDMwRjAzNDMxRjI0NEMxMDcyNDlGMEQzMEZEMzI3Cis6MTAwMEQwMDAwRkQzMEYxNEZGQ0UwMzQyMUYxNEZGQ0IwMzQyMUYxMjk2Cis6MTAwMEUwMDBGRkNDQzAzMDJEMzczMDJEMzczNDJEMzczODJEMzczQ0VECis6MTAwMEYwMDAyMzNEMDE3MjMzRUQwMDAyMDAxMkZGQzRDMDMwMkYzN0UwCis6MTAwMTAwMDAwMDJGMzcxMDJGMzcyMDJGMzczMDIzM0QwMTcyMzNFRDZBCis6MTAwMTEwMDAwMDAyMDAxMkZGQkVDMDMwMjczNzAwMjczNzEwMjczN0Y0Cis6MTAwMTIwMDAyMDI3MzczMDIzM0QwMTcyMzNFRDAzMDIwMDEyRkZCOTVGCis6MTAwMTMwMDAxM0ZGQkEwQzAyMDA5MzIwMTJGRkI5MTNGRkI5MEMwMjhGCis6MTAwMTQwMDAwMDkzMjAxMkZGQjhDMDMxOTMyMDgyMjAxMkZGQjcxMzEyCis6MTAwMTUwMDBGRkI3OTMyMDEyRkZCNzE1RkZCMzE2RkZCNkMwMzBENzE1Cis6MTAwMTYwMDAyMDA1NjYwMTYwMDAxQjAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTAwMTcwMDAwNDM2MDUwMDAyMDBEMzBGRDMwRjA1MzMwQzZFM0IxNDc5Cis6MTAwMTgwMDAwNzQ3MTQwNzA0NDM3NjMxRTYwNDM2MDUwNTMzMEM2RjQwCis6MTAwMTkwMDAzQkVEMDAwMjAwMTJGRkE2MTVGRkEzMjMwQTAwRDcyMEEzCis6MTAwMUEwMDAwNzA0NDMwNDNFMDUwNTMzMEMwNzQ3MTQ2RjNCRjAwMzc3Cis6MTAwMUIwMDAwMjAwMTJGRkExQzAzMDE0RkZBMUQzMEZEMzBGRDMwRjQxCis6MTAwMUMwMDA5MzQwQjQ0NDcyNDlGMkQzMEZEMzBGRDMwRjE0RkY5QjYzCis6MTAwMUQwMDA4MzQwMTRGRjlCODM0MDEyRkY5QjIzMEEwMDE0RkY5QTY1Cis6MTAwMUUwMDBEMzBGRDMwRkQzMEY5MzQwQjQ0NDcyNDlGMkQzMEZEMzNDCis6MTAwMUYwMDAwRkQzMEYxNEZGOTU4MzQwMTJGRjk1QzkyRjgzMjA4NERFCis6MTAwMjAwMDAyMTg1MjJCQzIyNzQzQjBGODY1MEI0NTU5NjMwQjQzM0ZFCis6MTAwMjEwMDA3NDMzRjQ2M0ZGRTYwMDAwNjUzRkUxNjU1RkRFMTJGRkMzCis6MTAwMjIwMDA3QzIzMEEwMDI4Mzc0MDI4Mzc0NDI4Mzc0ODI4Mzc0QzkxCis6MTAwMjMwMDAyMzNEMDE3MjMzRUQwMzAyMDAwMDAyMDAxMkZGN0FDMDc5Cis6MTAwMjQwMDAzMjAzMkUwNTAzMDIwMDEyRkY3ODEzRkY4MTkzMjBDMEIyCis6MTAwMjUwMDAxMTAxNDkzMTAwNDgzMTAxMDIwMEMwMDAxNEZGN0UwNDQxCis6MTAwMjYwMDBEMjMxMTVGRjdEOTQ1MDE0RkY3RDA0RDMzMTE1RkY3Q0VFCis6MTAwMjcwMDA5NDUwMTRGRjdDMDRENDMxMTVGRjdDMjQ1NjAwMTRGRkU1Cis6MTAwMjgwMDA3QjA0RDUzMTE1RkY3QjI0NTYwMDEwRkY3QTAzMDAwMDU0Cis6MTAwMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTAwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTAwMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAwMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTAwMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTAwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTAwMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTAwMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTAwMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTAwMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTAwMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTAwMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTAwMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTAwMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTAwMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTAwM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTAwM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTAwM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTAwM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTAwM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTAwM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTAwNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTAwNDIwMDA2M0ZGRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAwNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRkZDMDAwMEExCis6MTAwNDQwMDAxRkZDMDAwMEUzMDAwNUM4MUZGQzAwMDAxRkZDMDAwMEFCCis6MTAwNDUwMDBFMzAwMDVDODFGRkMwMDAwMUZGQzAwMDBFMzAwMDVDODA2Cis6MTAwNDYwMDAxRkZGQzAwMDFGRkZDMDAwRTMwMDA1QzgxRkZGQzAwMDQyCis6MTAwNDcwMDAxRkZGQzAxOEUzMDAwNUM4MUZGRkMwMTgxRkZGQzAxOEVBCis6MTAwNDgwMDBFMzAwMDVFMDFGRkZDMDE4MUZGRkMyOENFMzAwMDVFMDdBCis6MTAwNDkwMDAxRkZGQzI4QzFGRkZDMjhDRTMwMDA4NTQxRkZGQzI5MEQ1Cis6MTAwNEEwMDAxRkZGQzU4Q0UzMDAwODU0MjAwMDAwMDAyMDAwMDE2QUYzCis6MTAwNEIwMDBFMzAwMEI1MDIwMDAwMTgwMjAwMDAxODBFMzAwMENCQzExCis6MTAwNEMwMDAyMDAwMDIwMDIwMDAwMjAzRTMwMDBDQkMyMDAwMDIxQ0ZDCis6MTAwNEQwMDAyMDAwMDIyMEUzMDAwQ0MwMjAwMDAyMjAyMDAwMDIyNkExCis6MTAwNEUwMDBFMzAwMENDNDIwMDAwMjNDMjAwMDAyNDBFMzAwMENDQ0RFCis6MTAwNEYwMDAyMDAwMDI0MDIwMDAwMjQ5RTMwMDBDRDAyMDAwMDI0QzAyCis6MTAwNTAwMDAyMDAwMDI1MEUzMDAwQ0RDMjAwMDAyNTAyMDAwMDI1OUMxCis6MTAwNTEwMDBFMzAwMENFMDIwMDAwMjVDMjAwMDAyNjBFMzAwMENFQzMxCis6MTAwNTIwMDAyMDAwMDI2MDIwMDAwMjY5RTMwMDBDRjAyMDAwMDI2QzUxCis6MTAwNTMwMDAyMDAwMDI3MEUzMDAwQ0ZDMjAwMDAyNzAyMDAwMDI3OTExCis6MTAwNTQwMDBFMzAwMEQwMDIwMDAwMjhDMjAwMDAyOENFMzAwMEQwQzYzCis6MTAwNTUwMDAyMDAwMDI5MDIwMDAwMjkzRTMwMDBEMEMyMDAwMDJBQzZBCis6MTAwNTYwMDAyMDAwMDJCMEUzMDAwRDEwMjAwMDAyRDAyMDAwMDJGMkIzCis6MTAwNTcwMDBFMzAwMEQxNDIwMDAwM0IwMjAwMDAzQjBFMzAwMEQzOEE5Cis6MTAwNTgwMDAyMDAwMDNCMDIwMDAwM0IwRTMwMDBEMzgyMDAwMDNCMENBCis6MTAwNTkwMDAyMDAwMDNCMEUzMDAwRDM4MjAwMDAzQjAyMDAwMDNCMEJBCis6MTAwNUEwMDBFMzAwMEQzODIwMDAwM0IwMjAwMDZCQThFMzAwMEQzOEY1Cis6MTAwNUIwMDAyMDAwNkJBODIwMDA2QkE4RTMwMDc1MzAwMDAwMDAwMDRECis6MTAwNUMwMDAwMDAwMDAwMDAwMDAwMDAwMUZGQzAwMDAxRkZDMDAwMEY1Cis6MTAwNUQwMDAxRkZGQzU5MDFGRkZDNjcwMjAwMDZCQTgyMDAwNkJBOEVFCis6MTAwNUUwMDBERUZGRkUwMDAwMDAwODBDREVBREJFRUYxRkZGQzJBMDY0Cis6MTAwNUYwMDAxRkZDRkUwMDFGRkZDMDk0MUZGRkM1QzAzMDAwMDAwMDlECis6MTAwNjAwMDAwMDNGRkZGRjgwNDAwMDAwMTAwMDAwMDAwODBGRkZGRkM4Cis6MTAwNjEwMDAxRkZGQzI2RDAwMEZGRkZGODA0RkZGRkY4MDAwMDAwMDMzCis6MTAwNjIwMDAwMDAwMDg4MEIwMDAwMDA1NjA1MDAwMDA2MDAwMDAwMDdECis6MTAwNjMwMDA0MDAwMDAxMTM1MDAwMDAwNDEwMDAwMDAxMDAwMDAwMUUyCis6MTAwNjQwMDAyMDAwMDAwMDAwMDAxMDAwN0ZGRkZGRkY0MDAwMDAwMEJFCis6MTAwNjUwMDAwNTAwMDAwMDgwMDAwMDE5MDQwMDAwMDAwMDAwMDgwMEYwCis6MTAwNjYwMDAxMDAwMDAwNTgwNjAwMDAwNzAwMDAwMDAyMDAwMDAwOUZDCis6MTAwNjcwMDAwMDFGRjgwMDgwMDAwMDFFQTAwMDAwMDBGODAwMDAwMDJECis6MTAwNjgwMDAwN0ZGRkZGRjA4MDAwMDAwMTgwMDAwMDAwMTAwODAwMUM0Cis6MTAwNjkwMDA0MjAwMDAwMDFGRkZDMjFEMUZGRkMwREMwMDAxMDA4MEUwCis6MTAwNkEwMDA2MDQwMDAwMDFBMDAwMDAwMEMwMDAwMDAwMDAwMzAwMDU0Cis6MTAwNkIwMDA2MDAwMDgwMDgwMDAwMDFDMDAwMTAwMDA4MDAwMDAxQTlCCis6MTAwNkMwMDA4MDAwMDAxOEZDMDAwMDAwODAwMDAwMDEwMDAwNDAwMEQ1Cis6MTAwNkQwMDAwMzAwMDAwMDgwMDAwNDAwNTAwMDAwMDNGRkZGQkZGRjg0Cis6MTAwNkUwMDAxRkZGQzNENDAwMDAwRkZGRkZGRkYwMDAwMDAwMTZEMDczCis6MTAwNkYwMDAwMDAwRkZGN0E1MDAwMDAwMUZGRkM0QjAxRkZGQzQ2MThBCis6MTAwNzAwMDAwMDAxMDAwODAwMDAwQjIwMjAyRkZGODAxRkZGQzQ1NUIwCis6MTAwNzEwMDAwMDAwMkMwMEZGRkVGRkY4MDBGRkZGRkYxRkZGQzU3ODYxCis6MTAwNzIwMDAwMDAwMjAwMEZGRkZERkZGMDAwMEZGRUYwMTAwMTEwMENECis6MTAwNzMwMDAxRkZGQzNEMjFGRkZDNTkwRkZGRkVGRkYwMDAwRkZGQkFECis6MTAwNzQwMDAxRkZGQzYzMDFGRkZCRUEwRkZGRkY3RkYxRkZGQzA2NEUzCis6MTAwNzUwMDAwMDAwRkZGRDFGRkZDNjIwMDAwMUZCRDAxRkZGQzVCMDNBCis6MTAwNzYwMDAxRkZGQzY2MDFGRkZDNTkxRTBGRkZFMDAxRkZGQzVBMDcxCis6MTAwNzcwMDAwMDAwODAwMDFGRkZDNTNDMUZGRkM1QjQxRkZGQzA2OEZECis6MTAwNzgwMDAxRkZGQzREMDFGRkNGRkQ4MDAwMTAwODFFMTAwMDYwMDVDCis6MTAwNzkwMDAwMDAwMjcxMDFGRkNGRTMwMUZGQ0ZFNzBFMTAwMDIwMDZECis6MTAwN0EwMDAxRkZGQzUzODFGRkZDNTUwMDAwM0QwOTAxRkZGQzU2NDUxCis6MTAwN0IwMDAyQjUwNjM4MDJCNTA3OTgwMkI1MDkwODAyQjUwQTY4MDNCCis6MTAwN0MwMDAxRkZGQzQ2OTAxMDAxMTBGMjAyRkZFMDAyMDMwMDA4MEEwCis6MTAwN0QwMDAyMDJGRkYwMDAwMDBGRkZGMDAwMUZGRjgyQjUwQjIwMEE4Cis6MTAwN0UwMDAyQjUwQjIwODAwMDEwMDEwMkI1MEIxODAyQjUwQjI4MDZBCis6MTAwN0YwMDAyQjUwQkEwMDAwMDEwMDExMkI1MEJEMjgyQjUwQkM4MDlCCis6MTAwODAwMDAyQjUwQkRBMDIwMzAwMDAwREZGRkZFMDA1MDAwMDAwMjkyCis6MTAwODEwMDAwMEMwMDAwMDAyMDAwMDAwRkZGRkY3RjQxRkZGQzA2Q0UzCis6MTAwODIwMDAwMDBGRjgwMDA0NDAwMDAwMDAxMDAwMDAwQzQwMDAwMDIxCis6MTAwODMwMDAxQzQwMDAwMEUwMDAwMEEwMUZGRkM1NDAxRkZEMDAwODk1Cis6MTAwODQwMDAxRkZGQzU1NDFGRkZDNTY4MUZGRkM1N0NFMTAwMDY5MDUwCis6MTAwODUwMDBFMTAwMDZFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAwODYwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTAwODcwMDAwMDAwMDAwMDIwMTAwMDQwMjAxMDAwNDAyMDEwMDA0MDI4Cis6MTAwODgwMDAyMDE0MDA4MDIwMEMwMDAwMjAwQzAwMDAyMDBDMDAwMDMwCis6MTAwODkwMDAyMDEwMDA0MDIwMTQwMDgwMjAxNDAwODAyMDE0MDA4MENDCis6MTAwOEEwMDAyMDE4MDBDMDIwMUMwMTAwMjAxQzAxMDAyMDFDMDEwMDk5Cis6MTAwOEIwMDAyMDIwMDE0MDIwMTgwMEMwMjAxODAwQzAyMDE4MDBDMENGCis6MTAwOEMwMDAyMDFDMDEwMDIwMTgwMEMwMjAxODAwQzAyMDE4MDBDMDAzCis6MTAwOEQwMDAyMDFDMDEwMDIwMjAwMTQwMjAyMDAxNDAyMDIwMDE0MDU4Cis6MTAwOEUwMDAyMDIwMDk0MDIwMjAwOTQwMjAyMDA5NDAyMDIwMDk0MEU0Cis6MTAwOEYwMDAyMDI0MDk4MEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjM3Cis6MTAwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTAwOTEwMDAwMDAwMDAwMDIwMDA1MkZDMjAwMDUxQ0MyMDAwNTJGQ0JFCis6MTAwOTIwMDAyMDAwNTJGQzIwMDA1MTA4MjAwMDUxMDgyMDAwNTEwOEVFCis6MTAwOTMwMDAyMDAwNEY0ODIwMDA0RjQ4MjAwMDRGNDAyMDAwNEVBQzgwCis6MTAwOTQwMDAyMDAwNEQ1NDIwMDA0QjM0MjAwMDQ5MDgwMDAwMDAwMEQ2Cis6MTAwOTUwMDAwMDAwMDAwMDIwMDA1MkNDMjAwMDUxOTgyMDAwNTIzQ0EyCis6MTAwOTYwMDAyMDAwNTIzQzIwMDA0RkYwMjAwMDRGRjAyMDAwNEZGMEJDCis6MTAwOTcwMDAyMDAwNEZGMDIwMDA0RkYwMjAwMDRGMzgyMDAwNEZGMEIzCis6MTAwOTgwMDAyMDAwNEM3NDIwMDA0QUU0MjAwMDQ4QjQwMDAwMDAwMDFECis6MTAwOTkwMDAwMDAwMDAwMDIwMDAwQkUwMjAwMDM4QkMyMDAwMDRDMDU0Cis6MTAwOUEwMDAyMDAwNDRBODIwMDAwQkQ4MjAwMDNGQjQyMDAwMDNGMDEyCis6MTAwOUIwMDAyMDAwNDQ2ODIwMDA0ODkwMjAwMDNDQzQyMDAwM0JFMDE4Cis6MTAwOUMwMDAyMDAwMzgzODIwMDAzNkM0MjAwMDM0MzQyMDAwMkY5NDEyCis6MTAwOUQwMDAyMDAwM0EzQzIwMDAyQkY0MjAwMDI4MjgyMDAwNjUzNDE5Cis6MTAwOUUwMDAyMDAwMjNCNDIwMDAyMDk0MjAwMDIwNDAyMDAwMUQyQzUzCis6MTAwOUYwMDAyMDAwMTg0MDIwMDAxNTcwMjAwMDBERUMyMDAwMEMyNDcxCis6MTAwQTAwMDAyMDAwMTEzNDIwMDAxMzIwMjAwMDQxQUMyMDAwM0M3ODRECis6MTAwQTEwMDAyMDAwMEJFODIwMDAwNEMwMDAwMDAwMDAwMDAwMDAwMERGCis6MTAwQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTAwQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTAwQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTAwQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTAwQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTAwQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTAwQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTAwQTkwMDAwMDAwMDAwMDAwMDAwMDAwMzI2NDAwMDAwMDAwMDAwMEMwCis6MTAwQUEwMDAzMjY0MDAwMDY0MDA2NDAwNjQwMDY0MDA2NDAwNjQwMDU4Cis6MTAwQUIwMDA2NDAwNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTAwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTAwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTAwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTAwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMEU2Cis6MTAwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTAwQjEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTAwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MzIzODAwMDAwMDAwMERGCis6MTAwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTAwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTAwQjUwMDAwMDVDOTQwMTVEOTQwMjVFOTQwMzVGOTQwMDQzMDAwMDg2Cis6MTAwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTAwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTAwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTAwQjkwMDAwMDVDOTAwMTVEOTAwMjVFOTAwMzVGOTAwMDUzMDAwMDQ2Cis6MTAwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTAwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTAwQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTAwQkQwMDAwMDlDOTQwMDFEOTAwMTlEOTQwMjlFOTQwMzlGOTQwNDk4Cis6MTAwQkUwMDAwODk0MDUwOTk0MDYwQTk0MDcwQjk0MDA0MzAwMDAwMDNBCis6MTAwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTAwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTAwQzEwMDAwMDlDOTAwMTlEOTAwMjlFOTAwNzFEOTAwMzlGOTAwNDYwCis6MTAwQzIwMDA3ODkwMDU3OTkwMDY3QTkwMDc3QjkwMDA1MzAwMDAwMDM5Cis6MTAwQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTAwQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTAwQzUwMDAwMERDOTQwMDFEOTAwMUREOTQwMkRFOTQwM0RGOTQwNDE3Cis6MTAwQzYwMDAwNDk0MDUwNTk0MDYwNjk0MDcwNzk0MDgwODk0MDkwOTU2Cis6MTAwQzcwMDA5NDBBMEE5NDBCMEI5NDAwNDMwMDAwMDAwMDAwMDAwMDRCCis6MTAwQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTAwQzkwMDAwMERDOTAwMUREOTAwMkRFOTAwQjFEOTAwM0RGOTAwNERDCis6MTAwQ0EwMDBCNDkwMDVCNTkwMDZCNjkwMDdCNzkwMDhCODkwMDlCOTBBCis6MTAwQ0IwMDA5MDBBQkE5MDBCQkI5MDAwNTMwMDAwMDA2M0ZGRkMwMDQ5Cis6MTAwQ0MwMDAyMDAwNjk2NDEwRkZGRjBBMDAwMDAwMDAyMDAwNjk4ODBFCis6MTAwQ0QwMDAwMEQyMzExMEZGRkUwQTAwMDAwMDAwMDAyMDAwNjlEMEExCis6MTAwQ0UwMDAwMEQzMzExMEZGRkUwQTAwMDAwMDAwMDAyMDAwNkExMDRGCis6MTAwQ0YwMDAwMEQ0MzExMEZGRkUwQTAwMDAwMDAwMDAyMDAwNkE4NENBCis6MTAwRDAwMDAwMEQ1MzExMEZGRkUwQTAwMDAwMDAwMDA2M0ZGRkMwMDY4Cis6MTAwRDEwMDBFMDAwMDBBMDEyRkZGNzgyMjAwMjgyNTdDODIxNjNGRjgzCis6MTAwRDIwMDBGQzEyRkZGMzAzRTgzMDA0RUUzMDA1QzAzMDkzMjA5NDRBCis6MTAwRDMwMDAyMTk1MjI2M0ZGRkMwMDAwMUZGRkQwMDAwMDA0MDAyMDZCCis6MTAwRDQwMDAxRkZGQzU5MDFGRkZDNjcwMjAwQTAwMTFGRkZCMTNGRjk1Cis6MTAwRDUwMDBGQjAzRTYzMTAxMDIwMDE2RkZGQTE3RkZGQUQzMEY3NzAzCis6MTAwRDYwMDA2QjA2OTA2MEI0NjY3NzYzRjg1NDE1NTA1NDE5RTYwRjFCCis6MTAwRDcwMDAxNDAwNjNGRkY5MDAwMDAwNkMxMDA0QzAyMEQxMEYwMEM0Cis6MTAwRDgwMDA2QzEwMDRDMEM3MUFFRjA2RDgzMEJDMkJENzIwODU3MjcwCis6MTAwRDkwMDAwRDQyMTE4MzcxMDU0NTBCOTU3MjAyMzMwQzIzNzYwMUM4Cis6MTAwREEwMDA3QjNCMDQyMzNEMDg5MzcxQTMyRDEyRUVGRTE5RUVGRTRBCis6MTAwREIwMDBBMjc2N0Q2MzJDMkUwQTAwMDg4MjAyMjgwQTAxMDM4RTg3Cis6MTAwREMwMDAzODBFMEU0MkM4RUUyOUE2N0U2RDRBMDUwMDIwODgwMDI2Cis6MTAwREQwMDAzMDhDODI3MUQxMEZDMEYwMDI4RjM4N0ZDMEVBNjNGRjgwCis6MTAwREUwMDBFNDAwQzBGMUMwNTAwMzdFMENBMkVFMEUzRDEyMDg4MjVBCis6MTAwREYwMDAwMjAzRjUzODA1MDU0MkNCNTcyOUE2N0UyRkRDMTAwRkRDCis6MTAwRTAwMDA0RjM2NkRGQTA1MDAyMDg4MDAzMDhDQkM3NUMwMzAwODY0Cis6MTAwRTEwMDBFMjA4MjgwQTAxMDU4MzM4MDMwMzQyQzkzRTI5QTY3RTU5Cis6MTAwRTIwMDAwRDQ4MENEMzBGNkQ4QTA1MDAyMDg4MDBCMDhDODI3MUFDCis6MTAwRTMwMDBEMTBGQzA1MDA4RjUzODc1QzBDMTYzRkZCQkMwNjAwMjU4Cis6MTAwRTQwMDA4NjM4NzZDMERBNjNGRkQ0NkMxMDEyMTZFRUQ4QzFGODdCCis6MTAwRTUwMDBDMUU3MkIyMjFFMkMyMjFEQzBEMDdCQzEyRjI5MjAwNkNBCis6MTAwRTYwMDBEN0IwMjk5Q0ZBQ0M1NzI4MjA3MDI4OENGRjI4MjQ3MEYyCis6MTAwRTcwMDA2NDkxNUMyQUIwMDAwRUE4MEM2NDgxNjcwRkE5MEM2NDExCis6MTAwRTgwMDA5MkIzQzFFOTdFQTEzOTY5QUMyRjYwMDAzNjI5MjAwNkYyCis6MTAwRTkwMDBEN0QwMjk5Q0ZBQ0M1NzI4MjA3MDI4OENGRjI4MjQ3MEEyCis6MTAwRUEwMDA2NDkxMzUyQUQwMDAwRUE4MEM2NDgxNjQwRkE5MEM2NEVCCis6MTAwRUIwMDA5MzFCQzFFOTdFQTEwOTY4QUMwOUMwMjBEMTBGMDAwMEQ1Cis6MTAwRUMwMDAwMDJEMjUwMjhBMzJDMDkwMEE2RjUwNjVGNUFEMjkyNEE1Cis6MTAwRUQwMDA2NzA5MDg0NzY1ODVBOTJGMjAwQzE4RUVCNTBDRkUxMThGCis6MTAwRUUwMDBBOEVFMjhFMjg2QjQ0OTc4OTMwMjYwMDU3QTE5RUVCMTNCCis6MTAwRUYwMDAwOUY5MEEyOTkyQTM2ODkwMDc4ODIwMDk4ODBDNjU4NTVBCis6MTAwRjAwMDA2NjI3RTI4NTY0NzU2MDY1NTU4RTdCQzEwNEQ5QjA2MDQzCis6MTAwRjEwMDAwMDAxQzA5MDhCOTQxQ0VFQTgwQjg4MTQ4Q0M0MEIwQkEyCis6MTAwRjIwMDA0N0E4Q0MxOEVFQTYwOUJCMTAwOENDMDI5QzcwMThFRTlFCis6MTAwRjMwMDBBNDFDRUVBNTA4QTgwMTBCODgwMjBDNEMwMjFCRUVBMTE0Cis6MTAwRjQwMDA5QzcxMEI4ODAyOTg3MjJDOTAyMzJCOTAyMjA0QzgxMDVECis6MTAwRjUwMDAwNkJCMTAwQzRDMTIwOEJCMDIyODkwMjEwN0NDMTAwQ0M5Cis6MTAwRjYwMDA4ODEwMEM4ODAyMEI4ODAyMUNFRTk5OEIzMzBDQkIwMTk1Cis6MTAwRjcwMDA4QzM0MEI4ODAyOTg3MzlDOTk5Qzc0OEI5NThDMzk5QjRDCis6MTAwRjgwMDA3NTg4OTY4QjM4OTg3Njg4OTc5Qzc5OUI3ODk4NzcxQzhCCis6MTAwRjkwMDBFRTkwMjhFMjg1MENGQzA4MkRDNENGMDg0ODBCMjhFNjBCCis6MTAwRkEwMDA4NTY1NTUwQjJCMjIxRTJEMjIxRDdCRDkwMjJCMEEwMDk1Cis6MTAwRkIwMDA2NEJGMDYyQ0IwMDcyOEIwMDBEQTIwMDY4ODBBMjg4MjExCis6MTAwRkMwMDA0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3NjNGRUVCMDAwMEY3Cis6MTAwRkQwMDAyOTIwNzA2NTlFOUM2MDA0RTQyQTIwNzA2NUFFQzM2MDgxCis6MTAwRkUwMDAwNERCMDAwMDJFQjAwMzJDMjA2N0Q0RTA2NUMxMDU4QTI1Cis6MTAwRkYwMDAzMjhDMzMwQUZGNTAwQzQ1NTRCQzU1NjRGNEU2MTlFRUFDCis6MTAxMDAwMDA3NTg4MkEwOUE5MDEwOTg4MEM2NDgyMUJDMDkyNjAwMEI2Cis6MTAxMDEwMDBERDJFRDAwMzJBMjA2N0Q0RTA2NUEwRDg4QTMyOEIzMzM2Cis6MTAxMDIwMDAwQUZDNTAwQjQ1NTRCQzU1NjRDNEI5MTlFRTZBODgyQUIxCis6MTAxMDMwMDAwOUE5MDE3OTg5RDUwQkVBNTA2NEE0REQwQ0VFMTFDMDMxCis6MTAxMDQwMDBGMDJGMTYxMzJFMTYxNjhBRTc4Q0U4MkExNjEyOEVFOTUwCis6MTAxMDUwMDBERkMwQUFFQTdFQUIwMUIxQ0YwQkE4NTA2NTgzNDI4OEZFCis6MTAxMDYwMDAzN0RCQzBBRTg5OTkxRTc4OUIwMjJCQ0MwMTJCMTYxQjU3Cis6MTAxMDcwMDAyOTEyMEUyQjBBMDAyOTE2MUE3RkMzMDc3RkM5MDI3RTg4Cis6MTAxMDgwMDBBQjAxQzBCMTY1QjQ5ODhCMzUyRjBBMDAyQTBBMDA3QUVCCis6MTAxMDkwMDBDMzA1NjRDM0M3MkYwQTAxNjVGNDg0MkIxMjE2MkIxNkVGCis6MTAxMEEwMDAxOTAwNTEwNEMwQzEwMENDMUEyQ0NDRkYyQzE2MTcwQzBGCis6MTAxMEIwMDBGQzEzMkMxNjE4MkIxMjFBMkExMjFCREM1MDU4MThGQTgzCis6MTAxMEMwMDBDMEQwQzA5MDJFNUNGNDJDMTIxNzI4MTIxODJGMTIxQkJGCis6MTAxMEQwMDAyQTEyMUEwOEZGMDEwQ0FBMDE4ODM0MDc0QzBBQUI4QkFDCis6MTAxMEUwMDAyODEyMTkyQkM2MTYyRjg2MDgyQTg2MDkyRTc0MTAyOTU1Cis6MTAxMEYwMDAyNDY3MkU3MDAzODk3NUIxRUEyQTc0MDNCMDk5MDk0OUVGCis6MTAxMTAwMDAwQzY1OURCNTJCMjA2NzJEMjUwMjY1QjNGNDJCMjIxRTlGCis6MTAxMTEwMDAyQzIyMUQ3QkM5MDFDMEIwNjRCRDlFMkNCMDA3MjhCMDM1Cis6MTAxMTIwMDAwMERBMjAwNjg4MEEyODgyNENDMEQxMEI4MDAwREJBMEEwCis6MTAxMTMwMDA2NUFGRTc2M0ZEODM4OUJBQjE5OTY1OTA5Nzg4MzQxQ0UwCis6MTAxMTQwMDBFRTI2OThCQThGMzMxRUVFMUYwRjRGNTQyRkI0MkM4REZFCis6MTAxMTUwMDAyQThBMzIwRUREMDIwQ0FDMDE3REM5NjYwQTQ5NTE2RjQ0Cis6MTAxMTYwMDA5MjYwOEEzMzc1QTY1QjJDQjAxMzBBRUQ1MTBEQ0QwMTQ4Cis6MTAxMTcwMDAwRDBENDEwQzBDNDE3REM5NDkyRUIwMTJCMEVFNjVFMzU2Cis6MTAxMTgwMDBDMkMwRDA4RTM3OENCODhBMzY4RkI5N0NBMzA3N0FDOTkzCis6MTAxMTkwMDAwMjdFRkIwMUMwRDFDRUQ5ODgzNTBBQUQwMjBFOEUwODgxCis6MTAxMUEwMDA3OEVCMDIyREFDMDE4OUI3REFDMEFGOUI3OUJCMDFCMUY2Cis6MTAxMUIwMDBDQURDQjBDMEIwN0RBMzA3N0FEOTAyN0NFQjAxQzBCMTE0Cis6MTAxMUMwMDA2NEIxNURDMDkxMjkyNDY3QzAyMEQxMEYwMDAwOEFEQTg0Cis6MTAxMUQwMDBCMUFBNjRBMEJDMkUyMDY3MkQyNTAyNjVFMzBCMUZFRDhDCis6MTAxMUUwMDBGOThBMzIxOEVERkUwRkFGMDEwOEZGMEM2NUYyODYwQThFCis6MTAxMUYwMDA0ODUxNkY4MjAyNjAwMjdEQzA5MDI5MjQ2NzA5MEE0NzI2Cis6MTAxMjAwMDA2NUEyRjI3QkM5MDFDMEIwNjRCQ0FFMkNCMDA3MjhCMEE3Cis6MTAxMjEwMDAwMERBMjAwNjg4MEEyODgyNENDMEQxMEI4MDAwREJBMEFGCis6MTAxMjIwMDA2NUFGRTc2M0ZDOTMwMDAwMENFOTUwNjQ5MkVCMENFRkIwCis6MTAxMjMwMDAxMUMwODAyODE2MTFBRkJGMkYxNjE5OEVGODhCRjdEQTYwCis6MTAxMjQwMDBFMDhGRjkyQjE2MTBBQkZCN0ZCQjAxQjFFQTBDQTg1MDY1Cis6MTAxMjUwMDA2NTgwRDY4ODM3RENFMEFGODk5OTFDNzg5QjAyMkNFQzNFCis6MTAxMjYwMDAwMTJDMTYxQjI5MTIwQzJDMEEwMDI5MTYxQTdBRTMwN0U2Cis6MTAxMjcwMDA3QUU5MDI3RkJCMDFDMEMxNjVDMkE0OEIzNTJDMEEwMDhDCis6MTAxMjgwMDAyQTBBMDA3QUUzMDU2NEUxQ0EyQzBBMDE2NENFMTE2MERGCis6MTAxMjkwMDAwMjhEODgzNDFCRUREMTk4REE4RjMzMUVFRENBMEY0RkMzCis6MTAxMkEwMDA1NDJGRDQyQzhDMkE4QTMyMEVDQzAyMEJBQjAxMENCQkVGCis6MTAxMkIwMDAwQzY1QkYwRTBBNDk1MTZFOTIwMjYzRkYwNThBMzMwQTFDCis6MTAxMkMwMDBBQjUwNjRCRUZEMkNEMDEzMEFFRTUxMEVDRTAxMEUwRUIzCis6MTAxMkQwMDA0MTBDMEM0MTBFQ0MwQzY1Q0VFODJGRDAxMkIwRkY2NTRFCis6MTAxMkUwMDBGMjZFQzBCMDhFMzc4Q0Q4OEEzNjJGRDIwOTdDQTMwNzE1Cis6MTAxMkYwMDA3QUM5MDI3RUZCMDFDMEIxNjVCRUM3ODgzNURCQTBBRUVFCis6MTAxMzAwMDA4RTc4RUIwMUIxQUI4OUQ3REFDMEFGOUQ3OURCMDFCMTQzCis6MTAxMzEwMDBDQUMwQzA3QkEzMDc3QUI5MDI3REVCMDFDMEMxNjVDRTBDCis6MTAxMzIwMDBBMUMwOTAyOTI0NjdDMDIwRDEwRjg4Mzc4QzM2OTgxNDJCCis6MTAxMzMwMDAwQ0U5MEMyOTE2MTQwOEY4MEM5ODFENzhGQjA3MjgxMkU0Cis6MTAxMzQwMDAxNEIwODgyODE2MTQ4OTFEOUYxNTlCMTZDMEYwMkIxMjA3Cis6MTAxMzUwMDAxNDI5MTYxQTJCMTYxQjhCMTQ3QUUzMEI3QUU5MDY4OENDCis6MTAxMzYwMDAxNThFMTY3OEVCMDFDMEYxNjVGMUI5MjkxMjFBMkYxMjBBCis6MTAxMzcwMDAxMThBMzUyRTEyMUI5QTFBQUZFRTJGMTIxMEMwQTBBRjkxCis6MTAxMzgwMDA5Rjc5RkIwMUIxRUU5RjExODgxQUMwRjA5ODEwN0FFM0EzCis6MTAxMzkwMDAwQTdFQTkwNTJBMTIwMTdBOEIwMUMwRjE2NEYwODE2MEVFCis6MTAxM0EwMDAwMTgyODkzNjhCMzc5OTE3MEJFODBDOTgxRjA5QzkwQ0Y1Cis6MTAxM0IwMDAyOTE2MTU3OEVCMDcyODEyMTVCMDg4MjgxNjE1RDlDMEZDCis6MTAxM0MwMDA5QTE5OUUxODhBMUYyRTEyMTUyQTE2MUEyRTE2MUJEQTIzCis6MTAxM0QwMDBDMEMwRTA4QzE3N0Y5MzBCN0ZBOTA2ODgxODhGMTk3OEZGCis6MTAxM0UwMDBGQjAxQzBFMTY1RTEzRDI5MTIxQTJGMTIxMzhBMzUyRTQ3Cis6MTAxM0YwMDAxMjFCOUExQkFGRUUyRjEyMTJDMEEwQUY5Rjc5RkIwMUY4Cis6MTAxNDAwMDBCMUVFOUYxMzg4MUJDMEYwOTgxMjdBRTMwQTdFQTkwNUZCCis6MTAxNDEwMDAyQTEyMDM3QThCMDFDMEYxNjVGMTA5MkUxMjE2MkUxNkRECis6MTAxNDIwMDAxOTJBMTIxQjAwNTEwNEMwRTEwMEVFMUFCMEVFMkUxNjZDCis6MTAxNDMwMDAxNzBFRkYxMzJGMTYxODBGQ0MwMUFDQUEyRjEyMUEwRTdECis6MTAxNDQwMDBCQzAxQUNGQzdGQ0IwMUIxQUEyQTE2MUIyQzE2MUE2Mzc3Cis6MTAxNDUwMDBGQzYyMDAwMDdGQjMwMjYzRkUzMTYzRkUyQjdFQjMwMkE5Cis6MTAxNDYwMDA2M0ZDMzQ2M0ZDMkUwMDAwNjQ1MEMwREEyMERCRjA1OENCCis6MTAxNDcwMDAxNURFQzAyMEQxMEZDMDkxNjNGRDdFMDBDMDkxNjNGQURDCis6MTAxNDgwMDA0Q0RBMjBEQjcwQzBEMTJFMEE4MEMwOUEyOTI0NjgyQzQ3Cis6MTAxNDkwMDA3MDA3NTgxNENFRDJBMEQxMEYwMzRDMEIxOEVENTFEQkJFCis6MTAxNEEwMDBDMEE4Mjg3OEMzMDIyQkNERjhEOUIwNjNGQTY1MDAwMDM0Cis6MTAxNEIwMDAyQTJDNzREQjQwNTgwRTUwNjNGQUU4MDAwMDAwMkQyNUZBCis6MTAxNEMwMDAwMjdCQzkwMUMwQjA2NEIwMTcyQ0IwMDcyOEIwMDBEQUE1Cis6MTAxNEQwMDAyMDA2ODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkIzCis6MTAxNEUwMDBFN0MwMjBEMTBGQzA5MTYzRkMwNDAyMkEwMjU4MDI1MEM5Cis6MTAxNEYwMDAwQUEyMDIwNjAwMDAwMjJBMDI1ODAyNEQwQUEyMDIwNkFGCis6MTAxNTAwMDAwMDAwREI3MERBMjBDMEQxMkUwQTgwQzA5RTI5MjQ2ODNBCis6MTAxNTEwMDAyQzcwMDc1ODE0QUVDMDIwRDEwRkMwOTQ2M0ZCQ0YwMENECis6MTAxNTIwMDBDMDk2NjNGQkM5QzA5NjYzRkJDNDAwMDAyQTJDNzREQjIxCis6MTAxNTMwMDAzMERDNDA1QkZFMTNEQkEwQzJBMDJBQjQwMDJGMjAwQ0RECis6MTAxNTQwMDA2M0ZGMjcwMDhEMzU4Q0I3N0RDQjAyNjNGREQyNjNGQzMyCis6MTAxNTUwMDA3MThGMzU4RUQ3N0ZFQjAyNjNGREM1NjNGQzY0MDAwMDlECis6MTAxNTYwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0QzAyMEQxMEYwMEZCCis6MTAxNTcwMDA2QzEwMDQyQjIyMUUyODIyMURDMEEwQzA5NDI5MjQwNjEyCis6MTAxNTgwMDAyQTI1MDI3Qjg5MDFEQkEwQzlCOTEzRUQwOERBMjAyOERFCis6MTAxNTkwMDBCMDAwMkNCMDA3MDM4ODBBMjg4MjRDQzBEMTBCODAwMDExCis6MTAxNUEwMDBEQkEwNjVBRkU3QzAyMEQxMEYwMDAwMDA2QzEwMDQyOTVDCis6MTAxNUIwMDAyMDA2MkEyMTAyNjg5ODA1Mjg5Q0Y5NjU4MTFBMEEwQUUyCis6MTAxNUMwMDA0QzY1QTBGMDE2RUNGQjJCNjI5RTFBRUNGODZGQjgwMjhCCis6MTAxNUQwMDA2MDAwRjEyQUEyMjY2OEEwMDc4QjIwMEFCQjBDNjVCMDI4Cis6MTAxNUUwMDBFMzJBNjI5RDY0QTBERDJCMjAwQzBDQkMxMUE2Q0MyRDNGCis6MTAxNUYwMDBDMjg2NkZEOTAyNjAwMEQ3MURFQ0VGMERCRDBBMkREMjU3Cis6MTAxNjAwMDBBMzY4RDAwNzhFMjAwREVFMEM2NUUwQzMyN0MyODVDMDBECis6MTAxNjEwMDBFMDY0NzBCQjFERUNGNDY4NDM0RDFDRUNGMzhBMkIwQ0FBCis6MTAxNjIwMDBBQTAyOUE3MDg5MjAwODk5MTEwRDk5MDI5OTcxODgyQTQ1Cis6MTAxNjMwMDA5ODc0OEYzMjlGNzUyODIxMDQwODg4MTE5ODc3MThFQ0M4Cis6MTAxNjQwMDBFNDBDQkYxMUE2RkYyREYyODVBOEI4MkU4NENGMkREQ0E3Cis6MTAxNjUwMDAyODJERjY4NUM4NUEyQTJDNzREQjQwNTgwREU3RDJBMEY1Cis6MTAxNjYwMDBEMTBGQzAyMEQxMEYwMDAwMkM5Q0Y5NjRDMDhEMkMyMDFDCis6MTAxNjcwMDA2Njg5MzFCMUNDMEMwQzQ3MkMyNDY2NkZDNjY5NzA5RTBDCis6MTAxNjgwMDA2NjE4RUNEQTg5MzA4RjJCMDk4OTQwMEI5OTEwMDlGRjE1Cis6MTAxNjkwMDAwMjA4RkYwMjlGNzA4QzIwMDhDQzExMERDQzAyOUM3MUI3Cis6MTAxNkEwMDA4QTMzOUE3Mzg5MzI5OTcyODgyQTk4NzQ4RjM0OUY3NTE1Cis6MTAxNkIwMDA2M0ZGODIwMDAwQ0M1N0RBMjBEQjMwREM0MDU4MTRCOERFCis6MTAxNkMwMDBDMDIwRDEwRjAwREEyMEMwQjY1ODE1NDc2M0ZGRTUwMEVGCis6MTAxNkQwMDBEQTIwNTgxNTQ1NjNGRkRDMDBEQTIwREIzMERDNDBERDIyCis6MTAxNkUwMDA1MDU4MTVDN0QyQTBEMTBGMkIyMTA0NTgxM0RBMURFQzg2Cis6MTAxNkYwMDBCRDJCMjAwQ0MwRTAyRTI0NjY2M0ZGODQyRjIxMjNDMDY1Cis6MTAxNzAwMDBDODdGQzMwMjYzRkY3OTJDMjA2NjJCMjEwNEIxQ0MwQzY3Cis6MTAxNzEwMDAwQzQ3MkMyNDY2NTgxM0NGMURFQ0IzMkIyMDBDQzBFMEQzCis6MTAxNzIwMDAyRTI0NjY2M0ZGNUEwMDAwNkMxMDA0QzBCN0MwQTExNkQ3Cis6MTAxNzMwMDBFQ0IwMTVFQ0EyRDcyMEQ4NDBCODIyQzA0MDA1MzUwMjQ1Cis6MTAxNzQwMDA5NjcxOTU3MDAyQTQzODA0MDQ0MkM5NEIxQUVDOTUxOTlECis6MTAxNzUwMDBFQzk2MjlBNjdFQzE0MEQzMEY2RDRBMDUwMDgwODgwMDEzCis6MTAxNzYwMDAyMDhDMjIwQTg4QTI3MkQxMEZDMDUwMDhBNTM4NzVCMDBCCis6MTAxNzcwMDBFMzYzRkZENzZDMTAwODkzMTQ5NDEyMjkyMDA2NjU1Mjc2Cis6MTAxNzgwMDA4OEMwNzE2ODk4MDUyQTlDRjk2NUEyOTgxNkVDODkyOTg5Cis6MTAxNzkwMDAyMTAyOEExNDA5MDk0QzY1OTBDNzhBQTAwQTZBNTEyQTU1Cis6MTAxN0EwMDBBQ0ZENjVBMEJDQ0M1RkRCMzBEQTIwOEMxMjU4MTQ3QzE5Cis6MTAxN0IwMDBDMDUxOUExNEM3QkY5QkE5OEUxNDJFRTIwOTY4RTA2MDNECis6MTAxN0MwMDAyRjYyOUUxREVDN0E2RkY4MDI2MDAwODEyREQyMjY2ODkwCis6MTAxN0QwMDBEMDA1MkYyMjAwN0RGOTc1MkM2MjlEQzc5MDY0QzA2REU1Cis6MTAxN0UwMDA5QzExOEExNDJCMjAwQzJBQTAyMDBDQkQxMUE2REQwQTA2Cis6MTAxN0YwMDA0RjE0QkZBODA5ODgwMTI5RDI4NkFGODgyODhDMDk3OTlGCis6MTAxODAwMDA4QjU1MUZFQzZDMEZCRjBBMkZGMkEzNjhGMDA1MjgyMjNFCis6MTAxODEwMDAwMDdGODk0MzI5RDI4NUQ0OTA2NTkwNzc2MDAwM0QwMDkwCis6MTAxODIwMDAwMDJCMjAwQzFGRUM2NDBDQkQxMUE2REQyOUQyODYwRjA1Cis6MTAxODMwMDBCRjBBNkU5NjEwMkZGMkEzNjhGMDA0ODgyMDdGODkwNUY2Cis6MTAxODQwMDAyOUQyODU2NTkxNjVEQTIwNTgxNEU3NjAwMDEzREEyMDAzCis6MTAxODUwMDBDMEI2NTgxNEU1NjAwMDA5QzA5MDYzRkZCOURBMjA1ODlCCis6MTAxODYwMDAxNEUyODkxNDg5OTEwOUZFNTA2NTUxRTQ4QzEyOEQxNDlCCis6MTAxODcwMDBEQTIwREJEMDhERDA5RTEwMEQ2RDUxNTgxMzU0OUExNDgwCis6MTAxODgwMDA2NEEyMDhDNzVGOEZBMTk1QTlDMDUxMEYwRjQ3OUYxMjhGCis6MTAxODkwMDA2M0ZFRkIwMEMwOTFDMEYxMjgyMDA2MkMyMDY2Mjg4QzM2Cis6MTAxOEEwMDBGOUE3Q0MwQzBDNDcyQzI0NjY2RkM2MDg4RDE0OEREMTdCCis6MTAxOEIwMDA3MERFMDFDMDkwREQ5MDY0ODE1OUM5RDMyQTEyMDEyQkRBCis6MTAxOEMwMDAyMTA0NTgxMzY0OEExNEMwQjAyQjI0NjY4RUE5MkFBMDYwCis6MTAxOEQwMDAyMDBFMjgxNDFDRUM0MzhEMTQxNUVDMzdDMTcwMEE3N0M4Cis6MTAxOEUwMDAzNjg1NTYyRERDMjhBQzJDOUMxM0RFRDBBODU1N0NEMzM1Cis6MTAxOEYwMDAwMjJFRERGOEQzRTBEQTQwMDU1QjAyREMzMDVCRkY4QUM0Cis6MTAxOTAwMDBENEEwMjgyMDBDQjQ1NUMwRDAyQjBBODgyRjBBODAwQ0Y0Cis6MTAxOTEwMDA4QzExQTZDQzI5QzI4NUFGM0ZBQjk5MjlDNjg1MUNFQzlBCis6MTAxOTIwMDAyQ0RFRjBBQzg4MkQ4NENGMjgxMjAzMjkxMjA0NzhGMzIyCis6MTAxOTMwMDAwMjJFRkRGODI4OTAyMEQzRTAwNzg4MENDMTcwMDgwODFCCis6MTAxOTQwMDA0NzI4OTQyMDA4NzczNjY1N0ZBQjg5MTQxM0VDMkE4OUUxCis6MTAxOTUwMDA5MEMwRjQ3Nzk3NDkxQkVDMjhDMUNBMjgyMTA0ODUxNDRDCis6MTAxOTYwMDAwOTlFNDAwNkVFMTE4NzUzMDQ4ODExODU1MjBFODgwMkE1Cis6MTAxOTcwMDAwQzg4MDI5QkEwOUZBMThGMkI5REE1OThBNDk3QTc5NTRCCis6MTAxOTgwMDBBNjAzRkYwMjlGQTIyQzIwMEMxRUVDMTFBRUNFMENDQ0E1Cis6MTAxOTkwMDAxMTA2Q0MwODJCQzI4NTJERTRDRjJCQkMyMDJCQzY4NThECis6MTAxOUEwMDAyQTJDNzQ4QjEyNTgwRDE0RDJBMEQxMEYyODIwM0RDMEMwCis6MTAxOUIwMDBFMDdDODc3RjJFMjQ2NzBFMEE0NzY1QTA3QjFBRUMwRjE4Cis6MTAxOUMwMDA4ODIwMUVFQkZEOEYxNDhFRTQ4RkY0MDg4ODExMEE4ODlFCis6MTAxOUQwMDAwMjBGOEYxNEFGRUUxRkVDMEE5ODkxMEZFRTAyOUU5MDRCCis6MTAxOUUwMDAxRUVDMDlDMDgwMUFFQkZBMkNEMjg1QUFCQUI4Q0MyODEyCis6MTAxOUYwMDBBNENGMkNENjg1MkMyMTAyMkYyMDcwMEVDQzAyQjFGRjUzCis6MTAxQTAwMDAyRjI0NzAyQzI1MDJDMDIwRDEwRjg3MTQ4NzcwMDcwNzYwCis6MTAxQTEwMDA0NzYzRkQ2RTI4MjEyM0MwOTk3OThCMDI2M0ZFOUFERDBFCis6MTAxQTIwMDBGMDYzRkU5NTAwREEyMERCMzA4QzEyREQ1MDU4MTRGNEEwCis6MTAxQTMwMDBEMkEwRDEwRkMwRTE2M0ZGN0E4QjE0OEMxMkRENTBDMEFECis6MTAxQTQwMDBBQTJFMEE4MDJBMjQ2OERBMjA1ODEzNjBEMkEwRDEwRjY3Cis6MTAxQTUwMDAwMDcwOTY1NTJCNjI5RTZFQjg1MzFERUJENDJERDIyNjg2Cis6MTAxQTYwMDA2OEQwMDQ4RTIwN0RFOTQ1MkE2MjlEQ0JBRjJCMjEwNEVFCis6MTAxQTcwMDAyQzIwNjY1ODEyRjhDMDkwMjkyNDY2ODIxNDE4RUJFMkQ0Cis6MTAxQTgwMDA4RjIxMDhGRjAxOUYyMUMwMjBEMTBGMDA4QjEwQzlCODAyCis6MTAxQTkwMDA4Q0EwMEM2QzUxQ0NDQzhFMjQxRkVCRDA4REUxOUUxNDBECis6MTAxQUEwMDAwRkREMDI5REUxODgxMDY1OEZBOUMwMjBEMTBGREEyMERCCis6MTAxQUIwMDBDMEI2NTgxNDREQzAyMEQxMEYwMDAwMDA2QzEwMDYyOThDCis6MTAxQUMwMDAyMTAyQzBEMDc1OTcxMDJBMzIwNDdGQTcwQThCMzU3Rjc4Cis6MTAxQUQwMDBCRjA1MkQyNTAyMEREOTAyMDkwQzRDNjVDMTgyMTZFQkZDCis6MTAxQUUwMDBCNDFFRUJCMjI4NjI5RUMwRkE3OEYzMDI2MDAxODgyOTI2Cis6MTAxQUYwMDBFMjI2Njg5MDA3OEEyMDA5QUEwQzY1QTE3QTJBNjI5RENECis6MTAxQjAwMDBERkEwNjRBMTc3MkIyMDBDMENCQzExQTZDQzI5QzI4NkM3Cis6MTAxQjEwMDBDMDhDNzk4MzAyNjAwMTU3MTlFQkE3MDlCOTBBMjk5MjkxCis6MTAxQjIwMDBBMzY4OTAwNzg4MjAwOTg4MEM2NTgxNDMyN0MyODUxQzFCCis6MTAxQjMwMDBFQkE5NjQ3MTNBODkzMTA5OEIxNDBDQkIwMTZGQjExRDlCCis6MTAxQjQwMDAyQzIwNjY5RjEwQjFDQzBDMEM0NzJDMjQ2NjZFQzYwMjZDCis6MTAxQjUwMDA2MDAxNDAwOUZGNTA2NUYxM0E4QTEwMkFBQzE4ODkzNEI3Cis6MTAxQjYwMDBDMEM0N0Y5NzNDMThFQkFBMUJFQkE5OEYzNTlDNzE5QkQ3Cis6MTAxQjcwMDA3MDhCMjA5RDc0MDhCQjAyOUI3MkMwODI5ODc1MUJFQjEyCis6MTAxQjgwMDBBNTBGMDg0MDlCNzMwRjg4MTE5ODc3N0ZGNzBCMkYyMUMzCis6MTAxQjkwMDAwMjI4NEEwMDA4RkYwMjJGMjUwMkMwQjQ2MDAwMDQwMDlBCis6MTAxQkEwMDAwMDAwQzBCMDdFOTcwNDhGMzYyRjI1MjI3RDk3MDQ4OEQxCis6MTAxQkIwMDAzNzI4MjUyMTdDOTczNkMwRjFDMDkwMEFGOTM4MkYzQzkwCis6MTAxQkMwMDAyMDA5MDk0MjY0OTA4NjE5RUI3NjE4RUI3NzI4OTY3RUY3Cis6MTAxQkQwMDAwMEYwODgwMEEwOEMwMEYwODgwMEEwOEMwMEYwODgwMDQ1Cis6MTAxQkUwMDBBMDhDMkE2MjlEMkRFNEEyMkFBQzE4MkE2NjlEODkzMDE5Cis6MTAxQkYwMDA3Nzk3Mzg4RjMzOEEzMjE4RUI4MDA3QkUwQjJDMjEwNDdECis6MTAxQzAwMDBCNEJCMDRDQzExOThFMEMwODQ5OEUxODgyQjlERTU5QTgwCis6MTAxQzEwMDBFNjlGRTcxQUVCNzgwOTlGNDAwNkZGMTEwRkNDMDIwQUY2Cis6MTAxQzIwMDA4ODAyOThFMkMxRkMwRkNDMDIyQ0U2MDRDOUI4MkMyMDMzCis6MTAxQzMwMDAwQzFFRUI2NzBDQ0ExMUFFQ0MwNkFBMDgyOUEyODUyRDkyCis6MTAxQzQwMDBDNENGMDlCOTBCMjlBNjg1Q0Y1Q0MwMjBEMTBGQzA4MUI0Cis6MTAxQzUwMDBDMDkwMEY4OTM4QzA4Nzc5ODgwMjYzRkY3MjYzRkY2NjdFCis6MTAxQzYwMDAwMENDNTdEQTIwREIzMERDNDA1ODEzNERDMDIwRDEwRkI4Cis6MTAxQzcwMDBEQTIwNTgxM0RENjNGRkU4QzBBMDYzRkU4MkRBMjBDMERCCis6MTAxQzgwMDBCNjU4MTNEOTYzRkZEOTAwREI0MDJBMkM3NDU4MEM1QTdDCis6MTAxQzkwMDBEMkEwRDEwRjhBMTAyQjIxMDQ1ODEyNkUxRUVCNDRDMDIzCis6MTAxQ0EwMDBEMDJEMjQ2NjYzRkVCMTAwNkMxMDA2RDYyMDE5RUIzRkUwCis6MTAxQ0IwMDAxRUVCNDEyODYxMDIxN0VCM0UwODA4NEM2NTgwNUY4QUU1Cis6MTAxQ0MwMDAzMDBBNkE1MTY5QTM1NzJCNzI5RTZFQjgzRjJBOTIyNjNBCis6MTAxQ0QwMDA2OEEwMDQ4QzYwN0FDOTM0MkE3MjlEMkM0Q0ZFQ0FBQjcxCis6MTAxQ0UwMDAyQjYwMENCNjRGMENCRDExQTdERDI4RDI4NjBFQkUwQUE0Cis6MTAxQ0YwMDA3OEZCMjY5QzExMkVFMkEzMkMxNjAwNjhFMDA1MkY2MkNCCis6MTAxRDAwMDAwMDdFRjkxNTIyRDI4NUNGMjU2MDAwMEQwMERBNjBDMDczCis6MTAxRDEwMDBCNjU4MTNCNUM4NUE2MDAxMEYwMERBNjA1ODEzQjI2NTlGCis6MTAxRDIwMDA1MTA2REM0MERCMzA4RDMwREE2MDBENkQ1MTU4MTIyN0UyCis6MTAxRDMwMDBEM0EwNjRBMEYzODRBMUMwNTEwNDA0NDc2M0ZGNkQwMEU1Cis6MTAxRDQwMDBDMEIwMkM2MDY2ODkzMUIxQ0MwQzBDNDcyQzY0NjY2RjM2Cis6MTAxRDUwMDBDNjAyNzA5NjBBMkI2MTA0NTgxMjNFQzBCMDJCNjQ2NjBFCis6MTAxRDYwMDA2NTUwQjQyQTNDMTBDMEU3REMyMEMwRDFDMEYwMDJERkNGCis6MTAxRDcwMDAzODBGMEY0MjY0RjA5MDE5RUIwQTE4RUIwQjI4OTY3RThGCis6MTAxRDgwMDA4RDEwNkREQTA1MDBBMDg4MDBDMDhDQzBBMDg5MzAxREMwCis6MTAxRDkwMDBFQjFBNzc5NzUzODgzMjhDMTA4RjMzMDJDRTBCQzAyNDA2Cis6MTAxREEwMDA5MkUxMjI2MTA0OURFMDA0MjIxMThENkI5QkU1OUZFNzg3Cis6MTAxREIwMDA5OEU2MUZFQjEwMDk5ODQwMDY4ODExMDgyMjAyMEZEREYzCis6MTAxREMwMDAwMkMxOEQ5REUyMDgyMjAyOTJFNEI0QzIyRTYwMEMxRjczCis6MTAxREQwMDBFQjAwMENFODExQTc4ODJDODI4NUFGRUUwQzIyMEIyQkIwCis6MTAxREUwMDBFNENGMjI4Njg1RDJBMEQxMEYyODYwMENEMkEwOEMxMTFFCis6MTAxREYwMDAxOUVBRjgwQzhEMTFBOTg4QTdERDJFRDI4NTJCODRDRjg2Cis6MTAxRTAwMDAwRUNDMEIyQ0Q2ODVEMTBGQzBGMDBBREYzODdGRTgwMjRDCis6MTAxRTEwMDA2M0ZGNkM2M0ZGNjAwMDAwMkE2Qzc0QzBCMkRDMjBERERECis6MTAxRTIwMDA0MDU4MTIxQ0MwQjA2M0ZGNjNDMDIwRDEwRjAwMDAwMEY3Cis6MTAxRTMwMDA2QzEwMDQyQzIyMUQyQTIyMUVDMDQ5RDMyMDI5MzAwNkYyCis6MTAxRTQwMDAyNDM0NjhDMDQwN0FDMTA1RERBMDYwMDAwMjAwQzBEMDIzCis6MTAxRTUwMDA2RTk3MzhDMDhGMkUwQTgwMkIzMDE0QzA5NjI5MzQwNjE2Cis6MTAxRTYwMDAwRUJCMDIyRTMxMDIyQjM0MTQ3RTgwMDQyNDM1MDJERTk4Cis6MTAxRTcwMDA0MDdBQzEwRUM4QUJEQkQwREEzMDJDMEEwMDU4MEE3NkEzCis6MTAxRTgwMDAyRTMxMDIwRTBGNENDOEZFQzAyMEQxMEY2ODk1RjgyOEU1Cis6MTAxRTkwMDAzMTAyMDgwODRDNjU4RkVGMUFFQUM2MUNFQUM0MkJBMjZGCis6MTAxRUEwMDA5RUMwOUE3QjlCNDYyQkMyMjY2OEIwMDQ4RDMwN0JEOTlFCis6MTAxRUIwMDAzQjI5QTI5REMwRTNDQjkzOTQ5MDFCRUFENzJEMzEwNDFDCis6MTAxRUMwMDA5Qjk2MDhERDExMEVERDAyOUQ5NzlEOTExMkVBRDRDMDBDCis6MTAxRUQwMDBFNTI0QzRBMjJFMzQwNjJGMzEwMjI4QTI5RDAyRkYwMjVGCis6MTAxRUUwMDAyODhDMzAyOEE2OUQyRjM1MDJDMDIwRDEwRkRBMzBDMEIzCis6MTAxRUYwMDBCNjU4MTMzREMwMjBEMTBGNkMxMDA2MjkyMDA2Njg5OEYzCis6MTAxRjAwMDAwNTI4OUNGOTY1ODI1RDI5MjEwMjA5MDk0QzY1OTIxMDFBCis6MTAxRjEwMDBDRDUxREIzMERBMjAwNDRDMDI1ODEyQTFDMDUxRDNBMEJECis6MTAxRjIwMDBDN0FGMkEzNjBBQzBFMDE5RUFBMzFERUFBOTFGRUFBMjMwCis6MTAxRjMwMDA4QTNBMTZFQTlGQjFBQzY0QzEzNTI4NjI5RTZGODgwMjY2Cis6MTAxRjQwMDA2MDAxRjEyOURDMzMyOTkyMjY2ODkwMDc4QjIwMDlCQkI4Cis6MTAxRjUwMDAwQzY1QjFFMDI3NjI5REMwOEU2NDcxRDgyQjIwMEMwQ0ZCCis6MTAxRjYwMDBCQzExQTZDQzI5QzI4Njc5ODMwMjYwMDFEMjE5RUE5MUZDCis6MTAxRjcwMDAwOUI5MEEyOTkyQTM5NzEwNjg5MDA4MjgyMjAwMDk4OEI1Cis6MTAxRjgwMDAwQzY1ODFCQjI3QzI4NTY0NzFCNTI5MjAwNjI5OUNGOTlGCis6MTAxRjkwMDA2NDkxRUMyQzIwNjY4OTMxQjFDQzBDMEM0NzJDMjQ2NjYyCis6MTAxRkEwMDA2RUM2MDI2MDAxQTEwOUY4NTA2NTgxOUI4ODM2ODlGNEVDCis6MTAxRkIwMDAwODhDMTRBQzk5MUNFQTgxMEM5OTAyMkMyMTA0OTk3MEFDCis6MTAxRkMwMDAxOUVBOTgwODA4NDc5OTcxODkyQTA5ODgxMDA4OTkwMjFFCis6MTAxRkQwMDAxOEVBOTUwODk5MDI5OTcyMjgzMDEzMjkzMDEyMDQ4ODVBCis6MTAxRkUwMDAxMDA2OTkxMDA4OTkwMjI4MzAyQzlBNzQwQzg4MTAwODUxCis6MTAxRkYwMDBDODAyMDk4ODAyOTg3Mzg5Mzc5OTc1ODgzODk4NzY4QTUzCis6MTAyMDAwMDAzOUMwODE5QTc3MUFFQTg4ODkzNTk4N0I5OTc4MDk4OTQ1Cis6MTAyMDEwMDAxNDBBOTkwMjk5N0E4QTMwODkzMjc3QTczNjE4RUE3NkIzCis6MTAyMDIwMDA4RjMzOTg3Q0MwODQ5ODdEODgyQjJFNzYxMTI5NzYxMjY4Cis6MTAyMDMwMDAyRjc2MTMxOUVBNzAwQTlGNDAwNkZGMTEwNENBMTEwOThFCis6MTAyMDQwMDA4ODAyMEZBQTAyOTg3RUMxRjkwRkFBMDIyQTc2MTBDMDUwCis6MTAyMDUwMDBBQTYwMDAwMUMwQTZBREJGMENCQzExQTZDQzI5QzI4NUU4Cis6MTAyMDYwMDAyRUY0Q0YwOUE5MEIyOUM2ODU2NTUxMDdDMDIwRDEwRkQxCis6MTAyMDcwMDAyQjIwMEMwQ0JDMTEwNkNDMDgyOEMyODYwOUI5MEE2RkFCCis6MTAyMDgwMDA4OTAyNjAwMTJFMjk5MkEzNjg5MDA4MkEyMjAwMDlBQUQ5Cis6MTAyMDkwMDAwQzY1QTExRjJBQzI4NTY0QTExOTI4MjAzRDA4Mjg0MDhCCis6MTAyMEEwMDA2NDgwOEM4NDM1MDQ4NDE0NjQ0MDg0ODVGNTc0NTM3RjgzCis6MTAyMEIwMDA4NDM2MDQ4NDE0NjQ0MDc3NzQ1Mzc0MjkzMDEzQzA4Q0JDCis6MTAyMEMwMDA3OTg4NkNDMDkwMjkyNDY3MDkwODQ3NjU4MEVEODgyMENECis6MTAyMEQwMDA4OUY0ODQzNTFGRUE0QjA0ODQxNEE0OTQwRjQ0MDI5NEI5Cis6MTAyMEUwMDBBMDE0RUE0NjA4ODgxMTA0ODgwMjk4QTE4NDM2OThBM0FGCis6MTAyMEYwMDAwNDg0MTRBNDk5MEY5OTAyOTlBMjE5RUE0MkFEQjQyODU0Cis6MTAyMTAwMDBDMjg1MkU0NENGMjg4QzEwMjhDNjg1MjgyMTAyMkYyMDc2Cis6MTAyMTEwMDA3MDA5ODgwMkIyRkYyRjI0NzAyODI1MDJDMDIwRDEwRjM5Cis6MTAyMTIwMDAwMENDNTdEQTIwREIzMERDNDA1ODEyMURDMDIwRDEwRjI0Cis6MTAyMTMwMDBDMDkxNjNGRjhGREEyMEMwQjY1ODEyQUI2M0ZGRTEwMDk1Cis6MTAyMTQwMDBEQTIwNTgxMkE5NjNGRkQ4OEExMDJCMjEwNDU4MTE0MUI0Cis6MTAyMTUwMDAxREVBMjAxRkVBMTkyQjIwMENDMEUwMkUyNDY2OEEzQUMzCis6MTAyMTYwMDA2M0ZFNDgwMDAwREEyMERCMzBEQzQwREQ1MDU4MTMyNEU5Cis6MTAyMTcwMDBEMkEwRDEwRjJBMkM3NERCNDA1ODBCMUZEMkEwRDEwRjU0Cis6MTAyMTgwMDAyOTIxMjNDMDg4Nzk4MzAyNjNGRTIwMkExMjAwMkMyMDkzCis6MTAyMTkwMDA2NjJCMjEwNDJDQ0MwMTBDMEM0NzJDMjQ2NjU4MTEyREU1Cis6MTAyMUEwMDAxREVBMEMxRkVBMDUyQjIwMENDMEUwMkUyNDY2OEEzQTlCCis6MTAyMUIwMDA2M0ZERjgwMERBMjA1ODEyOEM2M0ZGNjREQTIwNUJGRkJECis6MTAyMUMwMDAxQ0QyQTBEMTBGMDAwMDAwNkMxMDA4OTUxNUMwNjFDMTkxCis6MTAyMUQwMDBCMEQ5NDAyQTIwM0RDMDQwMEJBQTAxMEE2NDM4MkEyMDA5Cis6MTAyMUUwMDAwNjI5MTYwNjY4QTgwNTJDQUNGOTY1QzMzQjFERTlGMjYzCis6MTAyMUYwMDA2NDQwMDUyRjEyMDU2NEYyOUMyNjIxMDIxRUU5RUUwNkJBCis6MTAyMjAwMDAwNjRDNjU2MkUzMTVFOUVBNjQ0MEQ5OEEzNTI5MzAwMzUyCis6MTAyMjEwMDA5QTE0MEE5OTBDNjQ5MENDMkMyMDBDOEIxNDlDMTEwQ0YxCis6MTAyMjIwMDBDQzExQTVDQzlDMTIyQ0MyODZCNEJCN0NCMzAyNjAwMjNDCis6MTAyMjMwMDBEMzhGMTEwRUZFMEEyRUUyQTM2OEUwMDk4NjIwRDMwRjg5Cis6MTAyMjQwMDAwRTY2MEM2NTYyQkU4ODEyMjg4Mjg1NjQ4MkI2ODkxNDg3Cis6MTAyMjUwMDA2NDkwNUVEQTgwRDkzMDhDMjAxRUU5RTgxRkU5RTkxRDIwCis6MTAyMjYwMDBFOUQ2OEIxNDhERDRENEIwN0ZCNzE4Qjg4QTI5M0MxMDI2Cis6MTAyMjcwMDA4NTM2MDhDNjExMEU2NjAyOTY4MTA1ODUxNEE1RDUwRjEwCis6MTAyMjgwMDA1NTAyOTU4MDA0MTgxNDZEODkyNzg4OTYwOENCMTEwODhCCis6MTAyMjkwMDA4ODE0MEVCQjAyQThEODI5OUMyMDBGODgwMjlCQTE5ODA1Cis6MTAyMkEwMDBBMDg4OTI5QkEzMDg4ODE0QThEODBGODgwMjk4QTIyQTE1Cis6MTAyMkIwMDBBQzEwMTlFOUQ0QzBDMDhGMTQxRUU5QzU4NjEyOEQxMTY3Cis6MTAyMkMwMDAyODYyODVBRUREMDhGRjBCMkNENENGMjgyMTAyMkY2NkIzCis6MTAyMkQwMDA4NThCMzUyQTIwNzAwOTg4MDJBQkFBMjgyNTAyMkEyNDdBCis6MTAyMkUwMDA3MEMwMjBEMTBGMjk1MjlFMThFOUIxNkY5ODAyNjAwMjg4Cis6MTAyMkYwMDAwODI4ODIyNjY4ODAwODI5MjIwMDA4OTkwQzY1OTFGOTJGCis6MTAyMzAwMDAyQTUyOURDMUNBOUExMzY0QTFFRjJCMjAwQzI2MjAwNkU1Cis6MTAyMzEwMDAwQ0I4MTFBNTg4MkQ4Mjg2MEVCRTBBN0RDMzAyNjAwMjBDCis6MTAyMzIwMDAwMjJFRTJBMzY4RTAwODJGMjIwMDBFRkYwQzY1RjFGM0Y1Cis6MTAyMzMwMDAyODgyODVERTgwNjQ4MUZGOTgxMDI2NkNGOTY0NjFGRjM1Cis6MTAyMzQwMDAyQzIwNjY4ODMxQjFDQzBDMEM0NzJDMjQ2NjZFQzYwMjVBCis6MTAyMzUwMDA2MDAxQkMwOEZENTA2NUQxQjYxN0U5QjQxOUU5OTgxQUI3Cis6MTAyMzYwMDBFOTlGMkMyMTA0OEIyRDI4MzAxMDJGMjExRDBDODgxMDYzCis6MTAyMzcwMDAwQkZCMDkwQzg4MDIwQTg4MDIwOUJCMDI2NDQxNTI4OURFCis6MTAyMzgwMDAxMEMwNEQ5QjkwOTc5MTk4OTI4RDM1RDlFMDY0RDA2Qzk4Cis6MTAyMzkwMDBENzMwREJEMEQ4MzA3RkQ3MTMyNzNDMTBCQ0U5MjYzMkFBCis6MTAyM0EwMDAxNjhDMzk5NkU2OUNFNzhBMzdCNDM4OUFFODBCMTMxNEYyCis6MTAyM0IwMDA2NDMwNDkyQTgyMTY4Njc5OUE5Njk2OTc4Qzc3OEE3RDE4Cis6MTAyM0MwMDA5Qzk4MkI4MjE3MkM3QzIwOUE5QTJBOUMxODlCOTk4NjgxCis6MTAyM0QwMDA3QkIwM0JCODg5NkRCOTIxOEJDOTk2QTUyNjkyMTYyQTg4Cis6MTAyM0UwMDBBQzE4Qjg5OTlCQTE5NkEwOEJDNzg2Q0Q5QkEyMkI5MkM3Cis6MTAyM0YwMDAxNTk2QTQ5QkEzODZDQjJDQ0MyMDI2QTYwNUMwMzQ2QkI3Cis6MTAyNDAwMDBENDIwMEQzQjBDMEREODA5MEU4ODBBN0ZCNzA1QzA5MDZCCis6MTAyNDEwMDA5OTg4QkM4OEMwOTAwQjFBMTI2REFBMDY5OTg4OTk4QjZFCis6MTAyNDIwMDAyODhDMThDMEQwMUJFOTgzMUNFOTgyMTZFOTc4QjFGRjFCCis6MTAyNDMwMDAyQTIxMUMyM0U2MTMwRjBGNEYyNkU2MTIyRjI1MUQ3RjlFCis6MTAyNDQwMDBBOTA2QzBGMEMwODAyODI1MUQwNUY2MTExQUU5NzE4Rjc0Cis6MTAyNDUwMDAyMDJCRTYxNTJDRTYxNjJERTYxNzI2RTYxODBBRkEwMkJBCis6MTAyNDYwMDAyQUU2MTQyOTIwMDYyOTlDRjk2NDkwRkYyOTIwMEM4RDY2Cis6MTAyNDcwMDAxNUMwODAxQUU5NTcwQzlDMTFBQTk5QTVDQ0RBMjAyQjFCCis6MTAyNDgwMDBDMjg1Mjg5NENGMEI0QjBCMkJDNjg1QzBCMDhDMTY1ODM5Cis6MTAyNDkwMDAxMTE0RDJBMEQxMEY4QTM1NkZBNTQ4RDgzMDhCRDU2REQ1Cis6MTAyNEEwMDBBOTBDOEE4NjBBOEExNENCQTk3QUIzMzcyODhDMTBDMDYzCis6MTAyNEIwMDA4MDI4MjQ2NzA4MEI0NzY1QjExMkRBMjBEQjMwMkMxMjI0Cis6MTAyNEMwMDAwNjU4MTEzN0QzQTBDMEMxQzBEMDJEQTQwMzlDMTU2M0ZBCis6MTAyNEQwMDBGRDI2ODYzNjY0NjEwQzg5MTBDMDREOUI5MDk3OTE5OEJCCis6MTAyNEUwMDA5MjYzRkVBNEMwODE2M0ZGQzc4QTE1Q0NBN0RBMjBEQjA0Cis6MTAyNEYwMDAzMDhDMTY1ODExMkJDMDIwRDEwRkRBMjBDMEI2NTgxMURECis6MTAyNTAwMDBCQTYzRkZFNDAwREEyMDhCMTE1ODExQjc2M0ZGRDkwMERBCis6MTAyNTEwMDA5RTE3OEExMzJCMjEwNDU4MTA0RjhFMTdDMEIwMkIyNEZFCis6MTAyNTIwMDA2NjYzRkUzNEMwODA2M0ZFMDlEQTIwREIzMDhDMTZERDgyCis6MTAyNTMwMDA1MDU4MTIzM0QyQTBEMTBGREEyMDU4MTFBQjYzRkZBODQ0Cis6MTAyNTQwMDAyRDIxMjNDMEM4N0RDMzAyNjNGRTBEOEExMzJCMjEwNEY1Cis6MTAyNTUwMDAyQzIwNjY5ODE3QjFDQzBDMEM0NzJDMjQ2NjU4MTAzREUzCis6MTAyNTYwMDA4RTE3QzBEMDJEMjQ2NjYzRkRFRTAwMDAyNjIxMjNCMDE3Cis6MTAyNTcwMDA2NjA2MDY0RjI2MjUyMzY1NkVGMTI4MjA2QTdGODcwNUFCCis6MTAyNTgwMDAwODI5NDE2NDkwQTVDMEQwMUJFOTFDMTlFOTJCMjYyMDFECis6MTAyNTkwMDAwNzIzRTYxQkIxNjYwOUZBMDIyQkU2MUEyODIwMEEyRDRBCis6MTAyNUEwMDBFNjFEMkFFNjFFMDk4ODAyMjhFNjFDODgyNjA2MDY0NzNDCis6MTAyNUIwMDAyOEU2MjAyQjIyMDgyNkU1M0UyQkU2MjEyRDI0MDcyQzk5Cis6MTAyNUMwMDAyMDA2MkEyMDY0NjhDMzQ3QjQ0NDYzRkU5RURCMzBEQUU5Cis6MTAyNUQwMDAyMDhEMTVDMENFMkUwQTgwMkMyNDY4OEMxNjU4MTA3QkI2Cis6MTAyNUUwMDBEMkEwRDEwRjhFMTAyQTMyMTYxNkU4RjMwQTJBMTQ4NkNBCis6MTAyNUYwMDA2NjJCRTYxMjk3RTEyN0U2MTMyOEU2MTRBQTY2MDk2NjE5Cis6MTAyNjAwMDAwMjk2RTAyRUVDNDg2OUVENTBDMTQ2NjNGRDdBMDAwMDY5Cis6MTAyNjEwMDA2NEFGQjQxOUU4RTkyODIwMTY4OTkyMEE4ODBDMDA5MTYxCis6MTAyNjIwMDAwNDAwODgxQUE4Qjg5ODI5NjNGRjlDMDAyQjIxMDQ2RTI3Cis6MTAyNjMwMDBCODFFMkMyMDY2QjhDQzBDMEM0NzJDMjQ2NkM5QzA5RTUyCis6MTAyNjQwMDAxNzhBMTM1ODEwMDQ4RTE3QzAzNDhGMjBDMEQwMkQyNDQxCis6MTAyNjUwMDA2NkMwNjgyNjI0MDY2M0ZGMkMwMDhEMzVDMDgwNjREMEQ4Cis6MTAyNjYwMDA0QUQ5RTBEQzMwREJFMERGMzAxQUU4RjRCMTg4QjRGRkFGCis6MTAyNjcwMDAxN0U4RjQ4NkM5MjQ5REZGOERDODJDQ0MxMDJENDYzMDU4Cis6MTAyNjgwMDAwNzY3MDEyRDQ2MzIwQTY2MDExREU4RUUyNjQ2MzFBRDg4Cis6MTAyNjkwMDA2RDJENDYzMzI2RjIxNTk3Qjc5NkI2ODRDM0JDQkI5NDBFCis6MTAyNkEwMDBCNThEMzUyOTlDMTA3RDgzQzIyRjIxMURDMTQ2NjNGRDQ4Cis6MTAyNkIwMDA0QjAwMDAwMDZDMTAwNjI5MjAwNjI4OUNGODY1ODJDMzk4Cis6MTAyNkMwMDAyOTIxMDIyQjIwMEMwOTA5NEM2NTkwRTExNkU4QjkwQzcwCis6MTAyNkQwMDBCQTExQTZBQTJEQTI4NjJDMEExMjdEQzMwMjYwMDI5MDBFCis6MTAyNkUwMDAxOUU4QjUwOUI5MEEyOTkyQTM2ODkwMDc4QzIwMDlDQzhBCis6MTAyNkYwMDAwQzY1QzI3QzI5QTI4NTY0OTI3NjJENjI5RTFBRThBQjk1Cis6MTAyNzAwMDA2RkQ4MDI2MDAyNzIyQUEyMjYyOTE2MDE2OEEwMDgyQjNGCis6MTAyNzEwMDAyMjAwMEFCQjBDNjVCMjYwMjk2MjlEQzE4QzY0OTI1ODhDCis6MTAyNzIwMDAyQTIxMjAwQTgwNjA5OTEwMkMyMDNDQzdFRjAwMEYzRTIwCis6MTAyNzMwMDAwMTBCM0VCMUJEMEZEQjM5MEJCQjA5OEYyNjBEQkQxMTVGCis6MTAyNzQwMDAyRERDMUMwRDBENDEwRUREMDM4RTI3QjFERDBEMEQ0MTdECis6MTAyNzUwMDAwRkVFMEMwREJCMEIyQkJDMUMwQkI3MDI3RUM3MUMyQzQ5Cis6MTAyNzYwMDAyMTI1N0JDQjE2MkQxQUZDMENCQTBDMERBMTYwMDAwOTlCCis6MTAyNzcwMDAzRTAxMDczRUIxNzgwOTg3MzkwQjc3MEE3N0VCMDI2MDkzCis6MTAyNzgwMDAwMjBBMkMyMTIzMjgyMTIxQjFDQzBDMEM0RjJDMjUyMzBCCis6MTAyNzkwMDA3QzhCMjlCMENEMkQyNTIzQzg1NURBMjBEQjMwNTgwRjhFCis6MTAyN0EwMDBGQTI5MjEwMkNDOTZDMEU4MEU5RTAyMkUyNTAyQ0M1N0IzCis6MTAyN0IwMDBEQTIwREIzMERDNDA1ODEwN0FDMDIwRDEwRjJDMjA2NkE0Cis6MTAyN0MwMDA4OTMxQjFDQzBDMEM0NzJDMjQ2NjZFQzYwMjYwMDFEMzUzCis6MTAyN0QwMDAwOUZENTA2NUQxQ0QyRjBBMDEyRTMwMTEyOTIyMTQ2NDM0Cis6MTAyN0UwMDBFMDExMjgyMjFCMDkwQzQ0MDBDMTA0MDBGQTFBMEE4OENGCis6MTAyN0YwMDAwMjI4MjYxQjJFMzAxMEMwQTBDMEIwODgzMDFDRTg2RTA2Cis6MTAyODAwMDA5NDEyOTUxM0MwNDEyNTIwM0MyQ0MwMjIwODhEMTQ3N0NBCis6MTAyODEwMDA4NzA1MkYwQTAxMENGQTM4QzBGMkMwODQwODU4MDEwRjRFCis6MTAyODIwMDA1RjAxMEY0QjM4MDUzNTQwMDdCQjEwQzBGMDA4NEYzODJCCis6MTAyODMwMDAwOEZGMTAwRkJCMDIyOEVDRkVDMEYwMDg0RjM4ODQyQkI1Cis6MTAyODQwMDAwQkE4MTAwQUZGMTAyQTIxMjAwRjg4MDIwQjg4MDIwODBCCis6MTAyODUwMDA0NDAyMThFODdEOEYxMTA4NDQwMjI4MjEyNTBBMkExNDExCis6MTAyODYwMDAwODI4MTQwNDg4MTEwQTg4MDIyQTIxMDQ5NEYwOEIyMDc1Cis6MTAyODcwMDAwNEU0MTAwOEJCMTEwNEJCMDJDMDRBMDRCQjAyOUJGMTc0Cis6MTAyODgwMDA4NDJBMDhBQjExMEJFQjAyOTRGNDBBNTQxMTBCNDQwMjk2Cis6MTAyODkwMDAwNTU1MTAwRDFCNDA5NEY3MDdCQjEwMEI1NTAyMDg1NTRBCis6MTAyOEEwMDAwMkMwODE5NUY2ODQzM0MwNTA5NEYzQjE5NDhCMzI5NTc1Cis6MTAyOEIwMDBGODk4Rjk5QkYyQzA4MEMxQkMyNDI2MTQ5OEZCOUJGNUM0Cis6MTAyOEMwMDA5OUZBODUzODk1RkM4NDNBOTRGRDhCM0I5QkZFODgzOUI4Cis6MTAyOEQwMDA5OEZGODUzNTI1RjYxMDg0MzY4NTEzMjRGNjExOEIzNzNECis6MTAyOEUwMDA4NDEyMkJGNjEyQzBCMDY0QzA4MTg5MzA3Nzk3NDY4RDcwCis6MTAyOEYwMDAzMjg4MzMyRTMwMTA4RjExMUNFODQwMDk5OTQwMDY5OTE4Cis6MTAyOTAwMDAxMTJDRjYxNEMwQzQyQ0Y2MTU4QzJCMkRGNjFBMjhGNkIzCis6MTAyOTEwMDAxQjJCRjYxOTA0QTgxMTA5ODgwMjA4RUUwMjE5RTgzNUU0Cis6MTAyOTIwMDBDMTgwMDhFRTAyMDlDOTAyMjlGNjE2MkVGNjE4QzA5RUNCCis6MTAyOTMwMDA2MDAwMDQwMDAwMDBDMDlBMkYyMDBDMThFODI1MENGRTRGCis6MTAyOTQwMDAxMUE4RkZBNkVFMkRFMjg1MkJGNENGMEQ5RDBCMkRFNkYxCis6MTAyOTUwMDA4NUM4N0Y4QTI2ODkyOUE3QUE5QTI2MEE5OTBDMDkwOTc3Cis6MTAyOTYwMDA0ODI5MjUyNTY1NTA0Q0MwMjBEMTBGMDBDMDlBNjNGRjJGCis6MTAyOTcwMDBDNkRBMjA1ODEwOUQ2M0ZFMzREQTIwQzBCNjU4MTA5QThCCis6MTAyOTgwMDA2M0ZFMkEwMDY4OTczOEMwMjBEMTBGMDAwMERBMjBEQkYwCis6MTAyOTkwMDA3MDU4MTA1N0MwQjBDMEMxMEFDQTM5MEFDQjM4NjVCRERCCis6MTAyOUEwMDBFMDYzRkUwOThBMTAyQjIxMDQ1ODBGMkFDMEIwMkIyNEEzCis6MTAyOUIwMDA2NjYzRkUyMURCNDAyQTJDNzQ1ODA5MEZEMkEwRDEwRjg4Cis6MTAyOUMwMDBEQTIwNTgwRjJGNjNGQ0Y3NkMxMDA0QzAyMEQxMEYwMEUxCis6MTAyOUQwMDA2QzEwMDQyOTBBODAxRUU4MUQxRkU4MUQxQ0U3RjUwQzc5Cis6MTAyOUUwMDAyQjExQUNCQjJDMkNGQzJEQjI4NTBGQ0MwMjlFRDE5Q0E0Cis6MTAyOUYwMDBEMEMwNTFDMDcwMTNFODE5MTRFODE4MThFODE2MkFCMkFDCis6MTAyQTAwMDA4NUE4MjgwNDI0MEEyMzQ2OTFBOTg2QjhBQTJBQjY4NTRGCis6MTAyQTEwMDBBOTg4Mjc4NDlGMjU2NDlGRDEwRjAwMDA2QzEwMEFENkQ3Cis6MTAyQTIwMDAzMDI4MzAxMDI5MjAwNjI4OENGOTY0ODI5QjY4OTgwQjg2Cis6MTAyQTMwMDAyQTlDRjk2NUExQjIwMjJBMDI1ODBGMTE4OTM3MUJFN0I3Cis6MTAyQTQwMDBERUM4OTE2NDUyMEUyQTIxMDIwQTBDNEM2NUMyNTg4REQwCis6MTAyQTUwMDAzMDE5RTdENzc0RDcwNTJFMjEyMzY1RTI5RTJGOTI5RTY5Cis6MTAyQTYwMDAxQUU3RDM2RkY4MDI2MDAyNTMyQUEyMjY2OEEwMDgyQzQ2Cis6MTAyQTcwMDAyMjAwMEFDQzBDNjVDMjQ0MkE5MjlENjRBMjNFOUExNTlCCis6MTAyQTgwMDAxRkU3Q0Q4RDY3QzFFNjY0RDAwRTJCNjIwNjE4RTdDQTNBCis6MTAyQTkwMDA2NEIwMDUyODgwMjE3QjhCNDIyQjIwMEMxOEU3QzUwQ0U1Cis6MTAyQUEwMDBCQzExQThDQzI5QzI4Njc5RUI0NTBGQkUwQTJFRTJBMzQxCis6MTAyQUIwMDA2OEUwMDQ4RjIwN0VGOTM3MkNDMjg1OUMxODY0QzIzM0VECis6MTAyQUMwMDAyQjIxMkY4NzY2MEI3QjM2MEI3OTBDNkY5RDI2NkVEMkUwCis6MTAyQUQwMDA0NjJDMjAzRDdCQzc0MENFNTU2MDAwMUUyQTIwMENDMUVECis6MTAyQUUwMDBCMjhDMjA1ODEwNzU5QTE4NjRBMjQ1OEQ2NzYzRkZDRjg5Cis6MTAyQUYwMDBDMEMwNjNGRkM1RDdCMDYzRkZEMzAwQzBFMDYwMDAwMjcxCis6MTAyQjAwMDAyRTYwMDMwRURCMEM2RUIyMEVEQzcwMENFQTExQUE2QUFBCis6MTAyQjEwMDAyQUFDMjA1ODAxOTlEN0EwREEyMERCNzBDMUM4MkQyMTNBCis6MTAyQjIwMDAyMDU4MTAxQjhDMjY4QjI3OUExNjBDQkIwQzdBQjMzNEJBCis6MTAyQjMwMDA4RjE4ODk2Mzk5RjM4ODYyOThGMjhFNjU5RUY4MkQ2MEVDCis6MTAyQjQwMDAxMDhBMTg5RDE3NjhENzI5QzBEMDlEQTkyQzIyMTgyQjUwCis6MTAyQjUwMDAyMjEzOUNBQjlCQUE5N0E1OEU2NjdFNzMwMjYwMDA5NzlBCis6MTAyQjYwMDBDRjU4NjAwMDFGREEyMDhCMTY1ODBGRTE2NUExMzg2MzNCCis6MTAyQjcwMDBGRkJEQzA4MUMwOTA4RjE4QzBBMjlBRjk5OUZCOThGQTQ2Cis6MTAyQjgwMDA5N0Y1NjNGRkQyREIzMERBMjBEQzQwNTgwRjg1QzA1MTY3Cis6MTAyQjkwMDBENkEwQzBDMDJCQTAxMDJDQTQwMzlCMTcyQzEyMDgwMjk3Cis6MTAyQkEwMDAyQTAyMDY2QjAyREY3MDJENjAwMzhFMTc5RDE0OUUxMEEzCis6MTAyQkIwMDAwQ0REMTFDMEUwQUQ2RDJEREMyMDU4MDExODhDMTQ4QjlDCis6MTAyQkMwMDAxNkFDQUMyQzY0MDM4QTI2ODkyOUFCQUEwQTk5MEM5QTA0Cis6MTAyQkQwMDAyNjg4NjYwOTA5NDgyOTI1MjUwNzg4MEM5ODY2MkYyMjJBCis6MTAyQkUwMDAxOEE3RkYyRjI2MTg2M0ZFOTZEQTIwREIzMERDNDBEREM1Cis6MTAyQkYwMDA1MDU4MTA4M0QyQTBEMTBGQzAzMDJDMjA2Njg5NjFCMTBCCis6MTAyQzAwMDBDQzBDMEM0NzJDMjQ2NjZFQzYwMjYwMDBEMkMwMzAwOTgyCis6MTAyQzEwMDBGRDUwNjVEMENBOEU2NzY0RTA2OTY0NzA2NkRCNjA4Q0M1Cis6MTAyQzIwMDAxOERGNzBEQTIwMkQ2MDAzOEUxNzBDREQxMTlFMTBBREI5Cis6MTAyQzMwMDA2RDJEREMyMDFFRTc4NDU4MDBGOTIzMjYxOERBMjA4QjNFCis6MTAyQzQwMDAxNkRDNDAyRjIyMTNERDUwQjFGRjJGMjYxMzU4MEYyNDFFCis6MTAyQzUwMDBEMkEwRDEwRjAwMjgyMDNEMDg0ODQwNjU4REU3NkY5NTMwCis6MTAyQzYwMDAzRURBMzA4REI1NkQ5OTBDOENBODBDOEMxNENBQ0Y3Q0QzCis6MTAyQzcwMDBEMzJEMkFBQzEwQzA5MDI5MjQ2NzA5MEQ0NzY0RERDNTA3Cis6MTAyQzgwMDA2MDAwOTIwMDJDMTIwODA2NkIwMjJENkMyMDA3N0YwMjU4Cis6MTAyQzkwMDA4RTE3REEyMDlFMTAxRUU3NkI1ODAwN0Q2M0ZGOUEwMEE2Cis6MTAyQ0EwMDBDMDkxNjNGRkQxMDAwMDAwNjU1MDgxREEyMERCNjBEQzU5Cis6MTAyQ0IwMDA0MDU4MEYzQkMwMjBDMEYwMkZBNDAzRDEwRkRBMjBDMDMyCis6MTAyQ0MwMDBCNjU4MEZDOTYzRkZFMDAwMDA2Rjk1MDI2M0ZENkNEQTMwCis6MTAyQ0QwMDAyMERCMzBEQzQwREQ1MEM0RTA1ODBFQkNEMkEwRDEwRjY4Cis6MTAyQ0UwMDA4QTE1MkIyMTA0NTgwRTVCMjMyNDY2Mjg2MDEwOTgxNzQwCis6MTAyQ0YwMDA2M0ZGMjEwMERBMjA1ODBGQkM2M0ZGQUJDODU4REIzMEZDCis6MTAyRDAwMDBEQTIwNTgwRUExMkEyMTAyNjVBRjlDQzA5NDA5QTkwMkJECis6MTAyRDEwMDAyOTI1MDI2M0ZGOTFEQjMwREM0MERENTBDMEEzMkUwQTgxCis6MTAyRDIwMDA4MDJBMjQ2OERBMjA1ODBFQTlEMkEwRDEwRkMwMjBEMTYxCis6MTAyRDMwMDAwRkRBMjAyQjIwMEM1ODBGQzU2M0ZGNkI2QzEwMDQyODkyCis6MTAyRDQwMDAyMDA2QzA2MjI4OENGODY1ODEyNUMwNTBDN0RGMkIyMjgxCis6MTAyRDUwMDAxQkMwRTEyQTIwNkIyOTIxMjMwMEExMDRCMDk5MjkyNTU5Cis6MTAyRDYwMDAyM0IxQUEwMEVDMUEwQkM0MDEwQTBBNDQyQTI0NkIwNEZBCis6MTAyRDcwMDBFNDM5MERDQzAzMENCQjAxMkIyNjFCNjQ0MDY5MjkyMEQwCis6MTAyRDgwMDAwQzFCRTcwQjBDOUExMTBCQUEwODJGQTI4NjFCRTcwOTU0Cis6MTAyRDkwMDA2RkY5MDI2MDAwQjYwQjlCMEEyQkIyQTM2OEIwMDgyQzM3Cis6MTAyREEwMDAyMjAwMEJDQzBDNjVDMEE0MkJBMjg1MURFNzJENjRCMEJFCis6MTAyREIwMDA5QjhDMkIyNDIxMDQwRENDMDI5Q0IwODgyMEMwQzUwODFDCis6MTAyREMwMDA4ODExMEM4ODAyOThCMTg4MkEwODQ0MTE5OEI0OEYzNDZECis6MTAyREQwMDA5NEI3OUZCNUMwNDAxRUU2RkUyREEyODUwRTlFMDgyNTI1Cis6MTAyREUwMDBFNENGMkREQzI4MkRBNjg1MjkyMTAyMDkwOTRDNjg5NDAxCis6MTAyREYwMDAxQTY4OTgyMEM5NDAyQTIxMDI2NUEwMEIyQTIyMUUyQjlFCis6MTAyRTAwMDAyMjFEN0FCMTAyNjVBMDc5QzAyMEQxMEYyQzIxMjM2NTQzCis6MTAyRTEwMDBDRkRFNjAwMDA4MkUyMTIxMkQyMTIzN0VEQkQ1MkIyMjQxCis6MTAyRTIwMDAxRTJGMjIxRDI1MjUwMjdCRjkwMUMwQjA2NEJGQzQxM0VCCis6MTAyRTMwMDBFNkRGMkNCMDA3MjhCMDAwREEyMDAzODgwQTI4ODI0QzhECis6MTAyRTQwMDBDMEQxMEI4MDAwREJBMDY1QUZFNzYzRkZBNjJBMkM3NDFFCis6MTAyRTUwMDBDMEIwMkMwQTAyNTgwRDk1MUNFNzAzOUNBMDhCMjAwOERCCis6MTAyRTYwMDBCQjExMDZCQjAyOUJBMTg5MzQ5OUEyNjNGRjc5MDAwMEM0Cis6MTAyRTcwMDAyNjI0NjhEQTIwREIzMERDNDBERDUwNTgwRkUxRDJBMDk4Cis6MTAyRTgwMDBEMTBGREEyMDJCMjAwQzU4MEY1OEMwMjBEMTBGMDAwMDkyCis6MTAyRTkwMDA2QzEwMDYwNzNEMTRDMDgwREMzMERCNDBEQTIwQzA0N0YwCis6MTAyRUEwMDBDMDIxMjNCQzMwMDMyODM4MDgwODQyNzc0MDAxQjFERDM3Cis6MTAyRUIwMDA2NDgxNUExRUU2QkIxOUU2QkMyOUU2N0VEMzBGNkREQUEzCis6MTAyRUMwMDAwNTAwNTA4ODAwMzA4Q0MwRTBDMDIwMjVBMDNDMTRFNkVFCis6MTAyRUQwMDBCQUI2RDM4RkMwQzBEMDBGODcxNDI0NDAyMjBGODk0MEM4Cis6MTAyRUUwMDA5NDEwNzdGNzA0QzA4MTA0ODIzOEMwRjEwQjI4MTBDMDE5Cis6MTAyRUYwMDA0NEMwMjIwNDU0MDEwNEZEMzgwMjUyMDEwMkZFMzgwODg1Cis6MTAyRjAwMDBERDEwODIxQzA3RUUxMDBFNkUwMjBFREQwMjI0MkNGRTc4Cis6MTAyRjEwMDBDMEUwMDRGRTM4MEFFRTEwMEU4ODAyMEQ4ODAyOERBQjY4Cis6MTAyRjIwMDAxRUU2QUEwOEQ4MDIwRTg4MDI5OEIwQzBFODA0MjgxMDRECis6MTAyRjMwMDAwRTVFMDE4NEEwMjVBMTI1MDg0NDExMDg0NDAyMDUyNTQwCis6MTAyRjQwMDAxNDA0NTUxMTA0MzQwMkMwODEwRThFMzk5NEIxOEZBQTM1Cis6MTAyRjUwMDA4NDEwOUZCNDc1NjYwQzI2QTExRkMwRjIwNjI2MTQ2MDZCCis6MTAyRjYwMDAwMDA5MDAwMDI2QTEyMEMwRjIwNjI2MTQwNTY1MDIwRjA0Cis6MTAyRjcwMDA3NzAxMDc4NzM5MDVFNjEwMDc3ODEwMDg2NjAyMDY1NUJECis6MTAyRjgwMDAwMjk1QjYyNUExMDQwQUU2MTEwODU4MTEwODI4MDIwODdFCis6MTAyRjkwMDA2NjAyOTZCN0MwNjA2NDQwNTY2NDkwNTMwNjdFMTFDMEM2Cis6MTAyRkEwMDBGNDg5QzI4OEMzMEIzNDBCOTY0NTk4NDc5OTQ2MThFNkI2Cis6MTAyRkIwMDA5MTlGNDEwNDU5MTEwRTk5MDIxRkU2OEYwMjBFNDcwODk2Cis6MTAyRkMwMDBEODAyOTg0MjBFOTkwMjlGNDBDMUUwMEU5OTAyOTk0NDlFCis6MTAyRkQwMDAyRkEwMENCNDM4MENGOTExMTRFNjdFMUVFNjc1QTRGRjgwCis6MTAyRkUwMDBBRTk5MkU5Mjg1MjZGNENGMEU4ODBCMjg5Njg1RDEwRkE4Cis6MTAyRkYwMDAyQkEwMEMxRkU2NkYxQ0U2NzYwQ0JFMTFBQ0JCQUZFRTJGCis6MTAzMDAwMDAyREUyODUyNkI0Q0YwRDNEMEIyREU2ODVEMTBGQzA4MDc2Cis6MTAzMDEwMDAwNTI4Mzg3ODQ4MDI2M0ZFQTI2M0ZFOTY2QzEwMDZDMDRECis6MTAzMDIwMDBDMDY1NzBGMTg4MzBDMDMwMDg4NzE0Nzc4NzEyQzBCMDRGCis6MTAzMDMwMDBDMEE2MTlFNjYxMjk5MDIyQzAzMENDOTdDMDMxNjAwMDRCCis6MTAzMDQwMDAwM0MwQjBDMEE2QzBFMEMwOTFDMEQ0QzA4MjI1MjAzQzVGCis6MTAzMDUwMDAwQjNGMTA5NzEyODMxQ0MwNzAwODU4MDEwRDVEMDEwOENBCis6MTAzMDYwMDA5NzM4QzA4MDBCOTgzODA3NzcxMDA0ODgxMDA4NjgwMkRBCis6MTAzMDcwMDAwODc3MDJDMDgwMEQ5ODM4MkQzQ0ZFMDg4ODEwMEQ5RTAwCis6MTAzMDgwMDAzODhEMkIwQUVFMTAwOEVFMDIwN0VFMDIwQ0I4MTAwRjc2Cis6MTAzMDkwMDBERDAyMDUzQjQwMEVERDAyOUQ0MDg5MjAwNDNEMTAwODA1Cis6MTAzMEEwMDA5OTExMEQ5OTAyMkQyMTA0MDlBOTAyMDhERDExOTk0MUY4Cis6MTAzMEIwMDA4NzJBMDVCOTEwMEQzRDAyMEFCQjExMERCQjAyMDg3NzI2Cis6MTAzMEMwMDAwMjk3NDQyODIxMjU4NzEyMDgyODE0MDQ4ODExMDcxRTE2Cis6MTAzMEQwMDA0MDA3RUUxMDBFOTkwMjc1NjYwOTI2MjExRjA2MjYxNDc4Cis6MTAzMEUwMDA2MDAwMDYwMDI2MjEyMDA2MjYxNDA4NjgwMjlCNDcwOTc2Cis6MTAzMEYwMDA4ODAyOTg0NjI5MjAwQ0QyQzBDMDgwMEM5RTExMUJFNjg1Cis6MTAzMTAwMDAzNDFGRTYyQkFCOTlBRkVFMkRFMjg1Mjg5NENGMERBREExCis6MTAzMTEwMDAwQjJERTY4NUQxMEZERDQwQzBBNkMwQjA4RTUxQ0FFMEIwCis6MTAzMTIwMDBCMkFBQjFCQjJEREMxMDhGNTAwRTc4MzY5ODEwMDg3N0ZDCis6MTAzMTMwMDAwQzlGRDg5OEQ5ODk1MzhGNTI5OTExOTlEQjlGREE3RUM5Cis6MTAzMTQwMDA4MzA5QjFDQzI1NUMxMEM5Nzc2M0ZGQ0Y4ODEwOEQxMTNFCis6MTAzMTUwMDAwOEU3MEM5NzUxQUQ4REQ3RjA3OERCMDFCMUY3OUQ1MzlGCis6MTAzMTYwMDA5NzUyODgzMEMwMzAwODg3MTQwODg4NDA2NDhFRDU2NTJGCis6MTAzMTcwMDBCRUM5NjNGRUJDMDAwMDAwNkMxMDA0RDcyMEIwM0E4OEMyCis6MTAzMTgwMDAyMEMwMzA4MjIxQ0FBMDc0MkIxRTI5NzIwNDZEMDgwRjQyCis6MTAzMTkwMDBDOTgwQzk5MTg1NzVCMTMzQTI1MjdBM0IwQjc0MkIwODUzCis6MTAzMUEwMDA2M0ZGRTkwMDY0OUZFQ0QxMEZEMjQwRDEwRjAwMDAwMDEzCis6MTAzMUIwMDA2QzEwMDhENjMwQzA3MDk1MTVEQTQwOEUzOTE0RTVGRUQzCis6MTAzMUMwMDA5QTE0NjRFMDAyNjQ1MUZDMjkyMDA2MkE5Q0Y4NjVBMjQ2Cis6MTAzMUQwMDA1RjJBMjEwMjBBMEI0QzY1QjIxRjJDMzIwMDE1RTVGNDYwCis6MTAzMUUwMDA3NEM3MDUyRDIxMjM2NUQzMjQyRTUyOUUxQUU1RjA2RjU2Cis6MTAzMUYwMDBFODAyNjAwMjFCMkFBMjI2NjhBMDA4MkIyMjAwMEFCQjU0Cis6MTAzMjAwMDAwQzY1QjIwQzJFNTI5RDFERTVFQjY0RTIwMzhCMzg2NDE1Cis6MTAzMjEwMDBCMjJEOUUxNkM4QkM4RDY5MUVFNUU4NjREMDA1MkVFMDZGCis6MTAzMjIwMDAyMTdCRUI0OTJFMjAwQzE4RTVFMjBDRUYxMUE4RkYyOUI5Cis6MTAzMjMwMDBGMjg2QzE4Njc5OEI0QTE3RTVERjA3RTcwQTI3NzJBMzcyCis6MTAzMjQwMDA2ODcwMDQ4ODIwNzc4OTM5MjVGMjg1NjQ1MkEyMjcyMTg1Cis6MTAzMjUwMDAyRTA3QjczNjA3QjkwQzZGOUQwMUQ3QjA4OTY5NkU5MkZBCis6MTAzMjYwMDA0MjI4MjAzRDdCODczQzhBMTVDREFGNjAwMDE4QzFCMjUzCis6MTAzMjcwMDA4QzIwMkEyMDBDNTgwRTkwRDVBMDY0QTJBQzhCNjg2M0Q5Cis6MTAzMjgwMDBGRkNCQzA1MDYzRkZDM0MwRTA2MDAwMDIyRTYwMDMwRTlFCis6MTAzMjkwMDA5QjBDNkVCMjBFREM3MDBDRUExMUFBNkEyQUFDMjg1Qjk5Cis6MTAzMkEwMDBGRkI2RDdBMERBMjBEQjcwQzFDNDJEMjExRjU4MEUzODFECis6MTAzMkIwMDA4QzI2OEIyN0Q0QTAwQ0JCMEM3QUIzMjU4QTYzQzA5MEQ0Cis6MTAzMkMwMDA5QTUzODg2Mjk5NTg5ODUyOEY2NTlGNTk4RTY3OUU1QjcyCis6MTAzMkQwMDA4RDY2OTc1NTlENUE4QjY4N0I3Qjc0OEIxNUNFQjM2MDNBCis6MTAzMkUwMDAwMDBEREEyMERCNDA1ODBFMDI2NUExMEQ2M0ZGQ0MwMDEzCis6MTAzMkYwMDBEQTIwREIzMDhDMTQ1ODBEQUFENkEwQzBDMEMwRDE5REY2Cis6MTAzMzAwMDAxNTJDQTQwM0RBMjBEQjYwREY3MERDNTBDMEUwMjU2MDAwCis6MTAzMzEwMDAwMzlFMTAxRUU1QzEwQzVEMTFBRDZEMkREQzI4NUJGRjE5Cis6MTAzMzIwMDAzRjhFNjZBNUE4OEY2NzI4NjQwM0FGN0Y3N0ZCMDFCMTQ2Cis6MTAzMzMwMDBFRTlFNjY5RjY3OEQyNjhDMjlBNEREMERDQzBDOUQyNjA0Cis6MTAzMzQwMDA4QjY4MEMwQzQ4MkMyNTI1MDdCQjBDOUI2ODYzRkVDM0JGCis6MTAzMzUwMDAyQzIwNjY4OTYxQjFDQzBDMEM0NzJDMjQ2NjZFQzYwMjA5Cis6MTAzMzYwMDA2MDAwQjgwOUZENTA2NUQwQjJDQkJGOEU2OUNCRUJEQkY2Cis6MTAzMzcwMDA2MERDNTBERjcwREEyMDFFRTVCQzJENjAwM0MwODA5ODUxCis6MTAzMzgwMDAxMDBDREQxMUFENkQyRERDMjg1QkZGMjQ4QjE1Qzk0MkJGCis6MTAzMzkwMDA4QTI2MjkyMjA5MDRBQTA4MkEyNjA2MEE5OTBDMDkwOTVDCis6MTAzM0EwMDA0ODI5MjUyNTY1QjEzQ0MwMjBEMTBGMDBEQjYwMkQ2QzdDCis6MTAzM0IwMDAyOERGNzBEQTIwQzBDMDFFRTVBQzlDMTBEQzUwNUJGRTNDCis6MTAzM0MwMDBCNDYzRkZDNzAwMkQyMDNEMEQ0RDQwNjVEREY5NkZFNTZECis6MTAzM0QwMDAyMkRBMzA4RjQ1NkRFOTBDOEVBQTBFOEUxNEM5RTM3RTc5Cis6MTAzM0UwMDBGMzExMkFBQzEwQzA5MDI5MjQ2NzA5MEY0NzY0RkRENzU4Cis6MTAzM0YwMDA2MDAxNDEwMEMwOTE2M0ZGRUQwMDg4MTU2NTgxNENEQUUyCis6MTAzNDAwMDAyMERCNjA4QzE0NTgwRDY2QzAyMEMwOTAyOUE0MDNEMTI1Cis6MTAzNDEwMDAwRkRBMjBDMEI2NTgwREY0NjNGRkRFMDA4QTE2MkIyMUE4Cis6MTAzNDIwMDAwNDU4MEM4Q0MwQTAyQTI0NjY4QjY4NjNGRjNBMDAwMDA1Cis6MTAzNDMwMDAwMDJCOUNGOTY1QjBDNURBMjA1ODBDOTE2M0ZEOTEwMDEyCis6MTAzNDQwMDAyQjIwMEMwQ0JBMTFBNUFBMkZBMjg2QzFDMjdGQzMwMkUxCis6MTAzNDUwMDA2MDAwRkMwREI5MEEyOTkyQTM2ODkwMDc4QzIwMDlDQzYyCis6MTAzNDYwMDAwQzY1QzBFQjI2QTI4NTY0NjBFNTJDMjA2Njg5MzFCMTJECis6MTAzNDcwMDBDQzBDMEM0NzJDMjQ2NjZGQzYwMjcwOTYwQURBRTAyQjNGCis6MTAzNDgwMDAyMTA0NTgwQzc0MjcyNDY2ODkzMDc3OTc0QjE4RTU1OTI2Cis6MTAzNDkwMDAxREU1NUE4QTMyOEIzM0MwRjQyQzIxMDQwOTlFNDAwNjY0Cis6MTAzNEEwMDBFRTExMDRDQzExMEVDQzAyOUY2MUMxRTAwRUNDMDI5RDQ2Cis6MTAzNEIwMDA2MDhGMkI5QTY2OUI2NzlDNjQ5NzY1MDhGRjAyOUY2MkVBCis6MTAzNEMwMDAyRjIwMEMxOEU1NDMwQ0ZFMTFBNUVFMkRFMjg1QThGRjc4Cis6MTAzNEQwMDAyN0Y0Q0YyRERDMjAyREU2ODU4RjE1NjVGMDkxQzAyMEQ3Cis6MTAzNEUwMDBEMTBGMDAwMDJBMkM3NDhCMTQ1ODA2NDNEMkEwRDEwRkEwCis6MTAzNEYwMDAwMERBMjBEQkUwNTgwREJDNjNGRUZFMDAwMERBMjBEQkMyCis6MTAzNTAwMDAzMDhDMTQ4RDE1NTgwRTNFRDJBMEQxMEYwMDAwODgxNUI2Cis6MTAzNTEwMDBDODg4REEyMERCMzA1ODBDOUMyQTIxMDI2NUFFREFDMDVDCis6MTAzNTIwMDA5NDA5QTkwMjI5MjUwMjYzRkVDRkRBMjAyQjIwMEM1ODJBCis6MTAzNTMwMDAwREM3NjNGRUM0MjcyNDY4REEyMERCMzAyQzEyMDQyRDZCCis6MTAzNTQwMDAxMjA1MkUwQTgwNTgwQ0ExNjNGQzdDMDBDMDIwRDEwRjBDCis6MTAzNTUwMDBEQTIwNTgwREE1OEExNUNEQTFEQTIwMDMzQjAyMkMxMkUyCis6MTAzNTYwMDAwNDU4MEQwRjI3QTQwM0MwMjBEMTBGMDBDMDIwRDEwRjk1Cis6MTAzNTcwMDAyQTJDNzQ4QjE0NTgwNjIwRDJBMEQxMEY2QzEwMEMyODYyCis6MTAzNTgwMDAyMTAyOTQxMDA4MDg0QzY1ODM2MjFGRTUwOTI5RjI5RTA4Cis6MTAzNTkwMDA2Rjk4MDI2MDAzNjYxREU1MDUyOUQyMjY2ODkwMDgyQTA3Cis6MTAzNUEwMDAyMjAwMDlBQTBDNjVBMzU0MkNGMjlENjRDMzRFMkIyMDYzCis6MTAzNUIwMDAwQzBDQjYxMUFGNjYyODYyODZDMUVDNzhFMzAyNjAwMzlBCis6MTAzNUMwMDA0NjE5RTRGQzA5QjkwQTI5OTJBMzY4OTAwNzhBMjAwOUUwCis6MTAzNUQwMDBBQTBDNjVBMzMyMjQ2Mjg1NjQ0MzJDQzBFMTJBMzEwOTE4Cis6MTAzNUUwMDBDMDcwMjcyNDY2ODkzNTlBMTE5OTJBODgzNjk5MTI5OENECis6MTAzNUYwMDAyQjg5Mzc5ODEzOTkyQzg4Mzg5OTE0MDg1ODE0OTgxNUUyCis6MTAzNjAwMDA5ODJEODkzOTJBMjUwNDJFMjUxRDI5MjUxQzI4MzAyODg2Cis6MTAzNjEwMDBDMDkyMjgyNDNDMkEzMDI5MDgwODQ3OTgxNjA5ODkwMUI1Cis6MTAzNjIwMDAyQTI0M0QyQTMxMTU5OTE3MEEwOTQxMDlBOTBDMjk5QzE4Cis6MTAzNjMwMDBFQzI5MjUxRjdFODcxOTJEMkEwMDBEQTA2MDAwMDgzRTY5Cis6MTAzNjQwMDAwMTBBM0VCMUFEMDhEQTM5MEVBQTExMEE5OTBDMjkyNUYyCis6MTAzNjUwMDAxRjJBMjExRjE4RTUwNjBBODE2MEMxRDA5NDFBOTUxQjA0Cis6MTAzNjYwMDAwMTA4M0UwMDA1M0VCMTg0MDU0ODM5ODQzQzI1OUNGQzk4Cis6MTAzNjcwMDAwRDg4MzYyOTIwMTQwOEFBMUM4RDNEMjcyNjE4MkUyNkQxCis6MTAzNjgwMDAxMzJFMjYxNDJFMjYxNTI3MjYxQjJFMjQ2QjI3MjQ2NzdGCis6MTAzNjkwMDAyNzI0NjgwODU4MUMwOTA5NDMyOTI0MTQyOTMyMTEyQUFGCis6MTAzNkEwMDAyNTJFMjgyNTJGMjcyNTI0MjcyNTI1MjcyNTJDMjcyNUE2Cis6MTAzNkIwMDAyMzI1MjUyMDI0MjUyMTJEMjUyMjg0MUEyRDIxMUM4NTEyCis6MTAzNkMwMDAxQjZGRDIwMjYwMDIwOUMwQTA5OTE4NkQwODBBQjFBQTQ2Cis6MTAzNkQwMDAwMEExMDQwMEU5MUE3RDlCMDI2M0ZGRUU4OTE4QzA4MEY3Cis6MTAzNkUwMDBDMEUxQzA3MEMwRDI5QjFEOTUxQjk2MUM5QzFFMTZFNEE5Cis6MTAzNkYwMDBEMTJDMjAzRDE1RTRFMDBDMEI0MDBEQ0MwMTBCRTczODNDCis6MTAzNzAwMDAxREU0QzMwQTc3MTAwQ0U4MzgwQjg4MTBDMEM0OUM0MTM0Cis6MTAzNzEwMDAwODc3MDI5RDQwQjBBODA5ODgxMThCMjA5QzQ5OUQ0OERDCis6MTAzNzIwMDA5NTRCOTY0MzA4NzcwMjg2MTQxOEU0RDExNUU0QjkwODNFCis6MTAzNzMwMDA3NzAyMDVCQjAyOUI0QTlCNDI5NzQ2ODgxMjg3MTEwODc1Cis6MTAzNzQwMDBEQTE0OUE0RTBEODgxMDBENzcxMTA4NzcwMjFBRTRBQzNFCis6MTAzNzUwMDAwNkQ4MTQwRDY2MTAwODc3MDI5NzRGQzc4Rjk4NEQ5OEJBCis6MTAzNzYwMDA0Qzk4NDU4NzE1OTg0NDA3MTUxNDBENTUxMTBBNTUwMkI0Cis6MTAzNzcwMDA5NTQ3MTVFNEMxOEEyNjJENDYxMDJENDYxODJENDYyMDYyCis6MTAzNzgwMDAyQzQ2MTEyQzQ2MTkyQzQ2MjEyQjQ2MTIyQjQ2MUEyODYyCis6MTAzNzkwMDA0NjE0Mjg0NjE1MkI0NjIyODgxNjI1NDYyNDI1NDYyNkZCCis6MTAzN0EwMDA4QjE3MEEwQzQ4MDkwRDQ4ODUxMzBFREQxMTA1Q0MxMTQ1Cis6MTAzN0IwMDAwODM5NDAwQkVCMzkwMjk5MTAxRUU0QjAwRENDMDIwRDE0Cis6MTAzN0MwMDA1NTExMDgyRDQwMDY1NTAyMkU0NjEzMTZFNDdCMEZEREQ5Cis6MTAzN0QwMDAxMTI1NDYxNjA4MDg0MDg1MUIwMTg4MTAwREJCMDI4NjdFCis6MTAzN0UwMDA2NzFERTRBNzA5ODgwMjBDQkIwMjE5RTQ3NzFDRTRBNTU1Cis6MTAzN0YwMDAyQjQ2MTcyRDQ2MUJBNzY2MUJFNEE0QzA3MDJDNDYxQzQ1Cis6MTAzODAwMDAwOTg4MDI4QzFFMjg0NjFFMkI0NjIzQzA5MDhCMUQyOTNBCis6MTAzODEwMDA0NjFEMjk0NjFGMThFNDlEMjk0NjI3Mjg0NjI1MjkzMTlCCis6MTAzODIwMDAxNjJFMjAwNjI5MjQ2QTI0MzExNzk2MkQyNDI1MjM4NjU2Cis6MTAzODMwMDAxQ0NDRTEyNzI0MDdDMEQ3MDkwRTQwNjRFMDgyOUEyOUY2Cis6MTAzODQwMDAwOTI4NDE2NDgwOTE2NDQwOUIyRDI0MDZDMDk4MDk0OTUxCis6MTAzODUwMDAzNjI4MEFBMDI0NjI4NTAxQzQwNEE4NDQyODIxMDQyNDJGCis6MTAzODYwMDA2Njg1MDg4ODExOEUzRjhBM0UyRDMyMTAwRUE0MTgwMEZFCis6MTAzODcwMDBDNDA0MEVBRTE4MDBFRTExMEFDQTUzMEVERDAyQzBFM0Y2Cis6MTAzODgwMDAwRTg4MDI5OEMxMUVFNDgyMDkwODRFOUVDMDhFMjA5NEM0Cis6MTAzODkwMDBDMzk4QzU5REM0MThFNDRFMURFNDdGMDVFRTExMEVBQTIxCis6MTAzOEEwMDAwMjBEQUEwMkE4QjgyNzg0Q0Y5QUMyMUVFNDQwMjRGMkNGCis6MTAzOEIwMDA5RDI3RTRBMjI0NEMxODI0RjY5RDY1NTA1MkMwMjBEMUM3Cis6MTAzOEMwMDAwRjJEMjQwNkMwQTBDMDk4MDk0OTM2MDRBOTM4NjNGRjBCCis6MTAzOEQwMDA3RkMwQTA2M0ZFMDcwMDAwNjU0RjZEQzA5OEMwQTgyQTk2Cis6MTAzOEUwMDAyNDA2NjNGRjZCMkQyNDA2QzA5MDYzRkY2M0NDNTdEQTc4Cis6MTAzOEYwMDAyMERCMzA4QzEwNTgwQzJBQzAyMEQxMEYwMERBMjBDMEY5Cis6MTAzOTAwMDBCNjU4MENCOTYzRkZFNTAwREEyMDU4MENCNzYzRkZEQzRBCis6MTAzOTEwMDAyQTJDNzQ4QjEwNTgwNTM4RDJBMEQxMEY2QzEwMDYyOEIxCis6MTAzOTIwMDAyMDA2OEEzMzZGODIwMjYwMDE2MUMwNTAxM0U0MjAyOUFGCis6MTAzOTMwMDAyMTAyMTZFNDFGNjk5MjA0MjUyNTAyRDk1MDJDMjAxNTc2Cis6MTAzOTQwMDA5QTI4MTRFNDFEOEYyNjI3MjAwQjBBRkUwQzA0NzcwOTAxCis6MTAzOTUwMDAyQjcxMUM2NEUxMzk4RTQyOEQ0MzZGQkMwMjYwMDE2Rjk0Cis6MTAzOTYwMDAwMEUxMDRCMEM4MDA4ODFBMDhBODA4MDhEODAyOTgyN0ZGCis6MTAzOTcwMDAyQjIwMDY2OEIzMkVDRTk3MkIyMjFFMkMyMjFEMDExMTYwCis6MTAzOTgwMDAwMjdCQzkwMUMwQjA2NEIwMTcyQ0IwMDcyOEIwMDBEQUMwCis6MTAzOTkwMDAyMDAzODgwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkQxCis6MTAzOUEwMDBFN0MwMjBEMTBGMkQyMDY0NjRERkNBOEIyOUMwRjEwQjQyCis6MTAzOUIwMDBBQjBDNjZCRkMwMkIyMDBDMENCQzExQTZDQzI4QzI4NjU5Cis6MTAzOUMwMDAyRTBBMDg3OEVCNjExRUUzRkIwRUJFMEEyRUUyQTM2ODA2Cis6MTAzOUQwMDBFMDA1MjgyMjAwN0U4OTRGMjlDMjg1MUVFNDA3NjQ5MEY1Cis6MTAzOUUwMDA0NjFGRTQxNTlFOTBDMDg0OTg5MTI4MjAwQTk1OTMwRjU1Cis6MTAzOUYwMDA4ODAyOTg5MjhFMjAwRkVFMDI5RTk0MkYyMDA3ODgyNjMwCis6MTAzQTAwMDAyRjk1MEE5ODk2OUE5NzJFMjAwNjI1MjQwNzY4RTM0MzU3Cis6MTAzQTEwMDAyOTIxMDIyQUMyODUxREUzRUUyQUFDMjBBREJEMjVENEEyCis6MTAzQTIwMDBDRjJBQzY4NTYzRkY0RTAwMkUyMDY1Q0JFREMwODIyOENECis6MTAzQTMwMDAyNDY1QzlGNjA1RTQzMTAwMDIwMDJBNjI4MjFCRTNGNzFGCis6MTAzQTQwMDAyOTQxMDIwQkFBMDIyQTY2ODIwOUU0MzEyOTIxMDI2Mzc0Cis6MTAzQTUwMDBGRjIzMDAwMDY0REZCODhGNDIyRTIwMTYwMEYxMDQwRDEyCis6MTAzQTYwMDBFRTBDMDBFRTFBQUVBRTlFMjk2M0ZGQTM4QTIwMkIzMjI1Cis6MTAzQTcwMDAyMUIxQUE5QUIwMjkzMjIxMjgzMjIzQjQ5OTI5MzYyMUJBCis6MTAzQTgwMDA3OTg5QTkyQjMyMjIyQjM2MjE2M0ZGQTBDMDIwRDEwRkM4Cis6MTAzQTkwMDA5RjI3MjUyNDE1QUNCODI4NzUxQzJCMjAwNkMwQzEyRUU1Cis6MTAzQUEwMDBCQ0ZFNjRFMEFCNjhCNzc3MkRCQ0ZENjVERUM3MkQyMDlBCis6MTAzQUIwMDA2NEMwRjA2NEQwODY4RTI5MEVBRTBDNjZFMDg5QzBGMTM5Cis6MTAzQUMwMDAyODIwNUEyODhDRkUwOENGMzg2NUZFRTg2M0ZGNTgwMDhFCis6MTAzQUQwMDAwMEUwMDQ5MzEwQzA4MTBBRjMwQzAzODMzOUM3OEYwOEY4Cis6MTAzQUUwMDBEODAzMDhBODAxMDhGODBDMDgwODE5QTgzMzAzQzgwQzYzCis6MTAzQUYwMDBBOEI4Mjg3NTFDMDMwQjQ3MkIyNDE1ODMxMENCQjcwMERGCis6MTAzQjAwMDBFMTA0QjBCQzAwQ0MxQUFDQUMwQ0RDMDI5QzI3NjU5RTc2Cis6MTAzQjEwMDA1RUMwQjIwQjk5MDIwOTA5NEYyOTI1MDI2M0ZFNTAwMENECis6MTAzQjIwMDAyRDIwNkEwRDJENDE2NURGN0VEQTIwQzBCMDU4MEM3NTVFCis6MTAzQjMwMDA2NEFGMThDMEYxNjNGRUVGOUYyNzYzRkZEMDJFMjIxRkYyCis6MTAzQjQwMDA2NUVFMzI2M0ZGNzkwMDAwMjgyMjFGNjU4RTI3NjNGRjMwCis6MTAzQjUwMDA2RTI1MjQwNjI1MjUwMkMwOTA2M0ZFMTk2QzEwMDY2NUFCCis6MTAzQjYwMDA3MTMzMkI0QzE4QzBDNzI5M0MxOEMwQTFDMDgwMDlBOENDCis6MTAzQjcwMDAzODA4MDg0MjY0ODExMDFDRTM4QTFBRTM4QjJBQzY3RTQ3Cis6MTAzQjgwMDAyQTVDRkREMzBGNkRBQTA1MDBCMDg4MDA5MDhDODk0MDk3Cis6MTAzQjkwMDBDMEEwMDk4ODQ3MUZFM0I0MDgwQjQ3MDk0QzUwMDkwRDIyCis6MTAzQkEwMDA1MzA0REQxMEI0Q0MwNENDMTAwRDVEMDI5RDMxMENCQjcwCis6MTAzQkIwMDAwMjlCMzA4ODQzOEUyMDk4MzUwRkVFMDI5RTMyOEQyNjcwCis6MTAzQkMwMDBEODUwQTZERDlEMjY4RTQwQzA5MDBFNUU1MDY0RTA5N0QyCis6MTAzQkQwMDAxQ0UzOUExRUUzODkwMzhCMEJDMEY0OUZCMTlFQjAyREFBCis6MTAzQkUwMDAyMDBBOTlCMzBDREQwMjlEQjI4RjIwMENGRjAyOUZCNDE2Cis6MTAzQkYwMDA4RTI2MkQyMDA3OUVCNjhDMjgyREI1MEE5Q0I3MjkyNDI5Cis6MTAzQzAwMDAwNzJGMjAwNjJCMjA2NDY5RjMzOUNCQjYxREUzNkIyMzA1Cis6MTAzQzEwMDAyMDE2OEREMjBCMzMwQzAwRDEwNDAwMzMxQUI0OERBM0JGCis6MTAzQzIwMDBDMzkzMjkyMjIwMEMxM0UzNkExRkUzNjEwQzJFMTFBRjBBCis6MTAzQzMwMDBFRUEzMjIyOTI0Q0YyRkUyODVEMkEwMEZERDBCMkRFNkEzCis6MTAzQzQwMDA4NUQxMEYwMDJFMjAwQ0I0OEMwQ0VCMTExRkUzNjExREVECis6MTAzQzUwMDBFMzU4QUZFRUFEQkIyMkIyODUyOUU0Q0YwMkMyMEIyMkZFCis6MTAzQzYwMDBCNjg1RDJBMEQxMEYwMDAwMkUyMDBDMUNFMzUxMUZFMzFCCis6MTAzQzcwMDA1ODBDRUIxMUFGRUVBQ0JCMjJCMjg1MjlFNENGMDI4MjI3Cis6MTAzQzgwMDAwQjIyQjY4NUQyQTBEMTBGQzBEMDBCQUQzODdEQzgwMkIzCis6MTAzQzkwMDA2M0ZFRUM2M0ZFRTA4RTQwMjcyQzc0N0JFRTEyREE3MDNDCis6MTAzQ0EwMDBDMEIzMkMzQzE4REQ1MDU4MEE3Qjg5NDBDMDgwNjNGRUFECis6MTAzQ0IwMDBFM0RFNjBEQTIwREIzMERDNDBERDUwNTgwMDA1OUExMDhFCis6MTAzQ0MwMDBEQjUwMDc3QTAyNTgwNDRDODgxMDYzRkVGODAwMDAwMEFECis6MTAzQ0QwMDA2QzEwMDY5MjEyMUVFMzQyOEM0MEFFMkQwQzhDNDcyRUM3Cis6MTAzQ0UwMDAzQzE4MDRDQTBCRDlBMDdEQTMwMjI5QURGODc1QzMwMjA0Cis6MTAzQ0YwMDA2MDAwODRDMEIwQzAyM0MwQTA5RDEwNkQwODQ0Qjg5RjcwCis6MTAzRDAwMDAwRUI4MEE4RDkwMEVCNzBCQjg3NzBENkQzNkFEQUE5RDIzCis6MTAzRDEwMDA4MDBENjYwQ0Q4RjAwMDgwODgwMDcwOEM4NzkwNjhCMUE4Cis6MTAzRDIwMDAyNEIyMjI3N0QzMjc4ODkxQzBEMENCODc5ODkwMjc5QzQ0Cis6MTAzRDMwMDAxMDAwNzA4ODAwRjA4QzlEOTFDQjZGQzA4MTA4QkIwMzkwCis6MTAzRDQwMDA3NUNCMzY2M0ZGQjRCMTIyMkVFQzE4NjNGRkQ0ODU5Mjk1Cis6MTAzRDUwMDAwRDc3MEM4NjkzOTc5MEE2RDY3RDZCMDFCMTU1OTY5M0ZGCis6MTAzRDYwMDA5NTkyNjAwMDE2QjNDQzJEOUMxODg4MTBEOUQwNzhEM0NBCis6MTAzRDcwMDBDNzI5RERGODYzRkZDMTAwQzAyMzhBNDIxQkUzNDcwMDY3Cis6MTAzRDgwMDBDRDMyMkQ0NDAyOUIzMDkyMzE4OTQyODU0Mzc5QTEwNTgxCis6MTAzRDkwMDAxRUUzNDMwRTU1MDE4NzEyMUJFMzM0ODk3MDk1MzUwQkUyCis6MTAzREEwMDA5OTAyOTkzMjg4NDIwQTg4MEM5ODQyODY3NkE2QTY5NjhECis6MTAzREIwMDA3NjhGNDRBRkFGOUY0NEQxMEYwMDAwMDA2QzEwMDg5MzgyCis6MTAzREMwMDAxMUQ2MzA4ODMwQzA5MTA4NjM1MTA4MDg0NzA1OTgzOEVCCis6MTAzREQwMDA5ODEyMjgyMTAyMjkzQ0ZEMDgwODRDNjU4MTY1NjU5MUVGCis6MTAzREUwMDA2MjhBNjMwQTJCNTA2NUIxOEIwQTZGMTQyRTBBRkY3QzFFCis6MTAzREYwMDBBNjBBMkMyMDVBQ0NDNDJEMEEwMjJEMjQ1QTdGRTAwMjk4Cis6MTAzRTAwMDA2MDAyMTU4OTI4ODgyNjFGRTMyNjA5ODgwQzY1ODIwRjIxCis6MTAzRTEwMDAyRTIwMEIwRkVFMEIyREUwRkUyRUUwRkYwOEREMTEwRTI1Cis6MTAzRTIwMDBERDAyMUVFMzIwQUVERDFFRTMyMDFDRTMyMDBFREQwMURCCis6MTAzRTMwMDAwRENDMzdDMTgwMDg0ODM3Qjg4REI0ODg5ODEwODk2MDk4Cis6MTAzRTQwMDAxQUUyREU3Qjk2MjE4QjYyMkFBMDIxOUMxNDdCQTMxN0E5Cis6MTAzRTUwMDA5RDEzMkEyMDBDOEIxMDhDMjA1ODBCOTc4QzE0OEQxM0RCCis6MTAzRTYwMDBEQkEwQ0VBQzYwMDFDNDAwMkUyMDBDMUJFMkQxMENFQTFBCis6MTAzRTcwMDAxMTBCQUEwODJCQTI4NjFGRTJDRjdCREIzQjBGRUYwQUI4Cis6MTAzRTgwMDAyRkYyQTM2OEYwMDUyODIyMDA3Rjg5MkMyQkEyODU2NERECis6MTAzRTkwMDBCMEFBODc2Mjg4MjZERTcwMEM3OTM2MDk3QTBDNkZBRDdECis6MTAzRUEwMDAxQzhGMjc5QjE1MDhGRjBDNzdGMzE5N0U3QjcyOUQxM0RGCis6MTAzRUIwMDA5QzE0OUIxNUNGNTY2MDAwMjVDMEIwNjNGRkQwRDc5MEVGCis6MTAzRUMwMDA2M0ZGREQwMDAwOUQxMzlDMTREQTIwREI3MDU4MEIwOEEzCis6MTAzRUQwMDA4QjE1OEMxNDhEMTM2NUEwNkE4RTYyNjNGRkNDMDBEQTlCCis6MTAzRUUwMDAyMDhCMTFEQzQwNTgwQUFFRDZBMDhCMTVDMDUxREU3MDc1Cis6MTAzRUYwMDBEQTIwREM2MERENDA1QkZGNzY4RDEzOEMxNEQ5QTAyRUI4Cis6MTAzRjAwMDAyMDBDMUJFMkFCMUZFMkIyMENFQTExQUZFRkMwRTBBQjNBCis6MTAzRjEwMDBBQTJCQTI4NTJFRjRDRjBCOTkwQjI5QTY4NTYzRkYxRDMyCis6MTAzRjIwMDAwMERBMjBEQzYwREQ0MERFNzA4OTEyMjgyMDA3REY1MEQ3Cis6MTAzRjMwMDBBOTg4MjgyNDA3NUJGRjA5RDJBMEQxMEYwMERCRTBEQUIzCis6MTAzRjQwMDAyMDU4MEIyOTY1NTBFRjJBMjAxNDBBM0E0MDY1QTBFQjRGCis6MTAzRjUwMDBEQjYwREM0MEREMzAwMjJBMDI1ODA5OUNENkEwNjRBMDU4Cis6MTAzRjYwMDBENTg0QTE4M0EwMDQwNDQ3MDMwNTQ3OTUxMjAzNjM1MTM4Cis6MTAzRjcwMDBDMDUxNjNGRTVDMkMyMDA2RDMwRjI4Q0NGRDY0ODBBNUM1Cis6MTAzRjgwMDA2OEM3MDRDMDkzMjkyNDA2MkMyMDA2QzBCMThENjQxRjg1Cis6MTAzRjkwMDBFMjhBOUQyNzlEMjg5RDI5OEZGMjlEMjYwMEYxMDQwMDJECis6MTAzRkEwMDBCQjFBMDBGMDA0QjBCRTBFREQwMUMwRjBBREJCOEQ2NUU0Cis6MTAzRkIwMDAyRjI0MDcwRDBFNUUwMUVFMTFBRUJCMkUwQUZFQjBCQjI0Cis6MTAzRkMwMDAwQjBCMTkwRUJCMzZDMEUyMEIwQjQ3MEVCQjM3MkIyNDc1Cis6MTAzRkQwMDAxNjE4RTI4MjBBMDk0NTBEMEI0MjJCMjQwQjI5MjQwQUVDCis6MTAzRkUwMDBCNEJFMkUyNDBDN0Q4ODU3MjkyMDE2MkZDQ0ZEQjA5RDAxCis6MTAzRkYwMDAwQTVDNTIwRENDMzYyQzI0NjQ2NUZERUMwQzBDNDc2NDM1Cis6MTA0MDAwMDBDREU2MThFMjZEOEUyODg4ODIwQzlGMEMwMDgxMDQwMDlBCis6MTA0MDEwMDBGRjFBQUZFRTlFMjk2M0ZEQ0YxQ0UyOUM2M0ZFMTMwMEU2Cis6MTA0MDIwMDAxQ0UyOTM2M0ZFMEM4RDY1NjNGRkE1MDBEQTIwMkIyMDU0Cis6MTA0MDMwMDAwQzU4MEIwNjY0NUYwRkMwMjBEMTBGMDBDMDIwRDEwRkI5Cis6MTA0MDQwMDBDMDkzMjkyNDE2QzA5MzYzRkZBMDAwMDA2QzEwMDRDMDI1Cis6MTA0MDUwMDA2MDE3RTI1NjFERTI1OUMzODEyOTMxMDEyQTMwMDgyOTJGCis6MTA0MDYwMDAyNDBBNzhBMTA4QzNCMjdCQTE3MkQyNjBEMTBGQzBDMTZCCis6MTA0MDcwMDA2NTUwNTEyNjI1MDIyQUQwMjAyRjIwMEIyOTBBRkIyQjIwCis6MTA0MDgwMDAyMDE0MkUyMDE1MjYyNDE1MDlCQjAxMERGRjA5MjhGMTQ3Cis6MTA0MDkwMDAxQzJCMjQxNEE4RUUyRUY1MUM2NEEwQjUyQjIyMUUyODgwCis6MTA0MEEwMDAyMjFEMDExMTAyN0I4OTAxREI2MDY0QjAxNzJDQjAwNzZGCis6MTA0MEIwMDAyOEIwMDBEQTIwMDc4ODBBMjg4MjRDQzBEMTBCODAwMDgzCis6MTA0MEMwMDBEQkEwNjVBRkU3REIzMERDNDBERDUwREEyMDU4MDBEOEZDCis6MTA0MEQwMDAyOTIxMDIwOTBCNENDQUIyRDJBMEQxMEYwMENDNUEyQzE0Cis6MTA0MEUwMDAzMDA4N0JDMTM3MkVEMDIwNjRFMDJEMDIyQTAyMDMzQjJBCis6MTA0MEYwMDAwMkRDNDBERDUwNTgwMENFRDJBMEQxMEYyQjIwMTRCMEVFCis6MTA0MTAwMDBCQjJCMjQxNDBCMEY0MTY0RjA4MjdDQjdDQUMwQzEwQ0Q2Cis6MTA0MTEwMDA5QzAyMkMyNTAyRDJBMEQxMEZDMDIwRDEwRjJFMjAwNjQ4Cis6MTA0MTIwMDA2OUUyQzEyRjIxMDIwRjBGNEM2OUYxQjgyNjI0MDYyNjNGCis6MTA0MTMwMDAyNTAyMkIyMjFFMjgyMjFEMkEyMDBCMjkyMDE1MERBQTFDCis6MTA0MTQwMDAwOTJDQTExQzI2MjQxNUFDOTkyOUE1MUM3QjgxNEE2MDQ5Cis6MTA0MTUwMDAwMDQ5QjBCQjJCMjQxNDBCMEQ0MUNCRDY3Q0I3MDIyQ0VECis6MTA0MTYwMDAyNTAyMkIyMjFFMkUyMjFEN0JFOTAyMkIwQTAwNjRCMEExCis6MTA0MTcwMDAxNzJDQjAwNzI4QjAwMERBMjAwNzg4MEEyODgyNENDMDI0Cis6MTA0MTgwMDBEMTBCODAwMERCQTA2NUFGRTdDMDIwRDEwRjI2MjQwNjRECis6MTA0MTkwMDBEMkEwRDEwRjI2MjQwNjYzRkZDN0RCNjAxREUyMDc2NEFGCis6MTA0MUEwMDBCRjQyMkNCMDA3MjhCMDAwREEyMDA3ODgwQTI4ODI0Q0NBCis6MTA0MUIwMDBDMEQxMEI4MDAwREJBMDY1QUZFNzFERTFGRjYzRkYyNEVBCis6MTA0MUMwMDA2QzEwMDQyODIwMDZDMDY0NkY4NTY0Q0E1QjI5MjAxNDIzCis6MTA0MUQwMDA3RDk3MjZEQTIwREIzMERDNDAwNTVEMDI1ODAwMTkyOTg2Cis6MTA0MUUwMDAyMTAyMDkwQTRDQzhBM0MwMjBEMTBGMDBDMEIxMEI5QjBCCis6MTA0MUYwMDAwMjJCMjUwMkMwMjBEMTBGMDAwMDAyMkEwMjAzM0IwMjNECis6MTA0MjAwMDAyQzBBMDE1ODAwQ0FDOUFBREEyMERCMzBEQzQwNTgwOTYwCis6MTA0MjEwMDBFNDI5QTAxMUQzQTA3RTk3MDgyQzBBRkQwQzlDMDEyQzQ4Cis6MTA0MjIwMDBBNDExQzA1MTJEMjAxNDA2REQwMjJEMjQxNDYzRkZBMjE5Cis6MTA0MjMwMDBEQTIwREIzMERDNDBERDUwQzBFMDU4MDk2NEQyQTBEMTg4Cis6MTA0MjQwMDAwRjAwMDAwMDZDMTAwNjE2RTFEQTFDRTFEQTY1NTEzQjQ0Cis6MTA0MjUwMDBDMEUxMTdFMUQ2MjgyMTAyOEIyMDA4MDg0QzY1ODA3QjNECis6MTA0MjYwMDAyOTMyMDAwOTY5NTE2OTkzNzIyQTYyOUU2RUE4NDgyQTEwCis6MTA0MjcwMDA3MjI2NjhBMDAyN0FCOTNGMkE2MjlEQjQ0RkNCQTcyQjYxCis6MTA0MjgwMDAyMDBDMENCRDExMDZERDA4MjhEMjg2NzhGQjE1MENCRjZBCis6MTA0MjkwMDAwQTJGRjJBMzY4RjAwNDg4MjA3Rjg5MDcyREQyODVEM0U2Cis6MTA0MkEwMDAwRjY1RDA2MDJBMjEwNDE5RTIwMkQzMEY3QTlCMUREQTMwCis6MTA0MkIwMDAyMDU4MDg2NDYwMDAyNDAwMkMyMTA0MUJFMUZEN0NCQjE1Cis6MTA0MkMwMDAxM0RBMjBDMEI2NTgwODVGQzk1MzYwMDBFRkRBMjA1OEVGCis6MTA0MkQwMDAwQTQ2NjAwMDA2REEyMEMwQjY1ODBBNDM2NTUwREREQ0E1Cis6MTA0MkUwMDA0MERCMzA4RDMwREEyMDBENkQ1MTU4MDhCOEQzQTA2NDEyCis6MTA0MkYwMDBBMENBMUNFMUIwQzA1MTg0QTE4RUEwMDQwNDQ3MEUwRUQ4Cis6MTA0MzAwMDA0NzYzRkY1MDAwMkIyMTA0QzA4Qzg5MzFDMDcwREY3MERGCis6MTA0MzEwMDAwOUY5NTAwOThGMzg2RUI4MTcyQzIwNjZBRUNDMEMwQ0ZBCis6MTA0MzIwMDA0NzJDMjQ2NjdDRkIwOTlEMTA1ODA4Q0E4RDEwMjcyNDUxCis6MTA0MzMwMDA2Njk0RDExRUUxQjZCOERDOUVEMDY1NTA1NkMwRDdCOEExCis6MTA0MzQwMDAzQUMwQjFDMEYwMENCRjM4MEYwRjQyQ0JGMTE5RTE5NDY1Cis6MTA0MzUwMDAxOEUxOTYyODk2N0VCMDRCRDMwRjZEQkEwNTAwQTA4ODYxCis6MTA0MzYwMDAwMEMwOEMyQzIwMENDMDIwMURFMTlBMENDRjExQTZGRkEwCis6MTA0MzcwMDAyRUYyODVBRENDMjdDNENGMEU0RTBCMkVGNjg1RDEwRjc1Cis6MTA0MzgwMDBDMDgwMEFCODM4NzhEMENENjNGRkMxMDA4RTMwMEUwRUUxCis6MTA0MzkwMDA0NzYzRkVCRDJBMkM3NDJCMEEwMTA0NEQwMjU4MDhCRDQ4Cis6MTA0M0EwMDAyRjIwMEMxMkUxOEIwQ0Y5MTFBNjk5QTJGRjI3RjRDRjU0Cis6MTA0M0IwMDAyODkyODVEMkEwMDg0ODBCMjg5Njg1RDEwRkMwMjBEMTFECis6MTA0M0MwMDAwRjAwMDAwMDZDMTAwNEMwNjBDQjU1REIzMERDNDAwNUYyCis6MTA0M0QwMDA1RDAyMDIyQTAyNUJGRjlCMjkyMTAyMDkwODRDQzg4MjY4Cis6MTA0M0UwMDBEMkEwRDEwRjJCMjAxNEIwQkIyQjI0MTQwQjBDNDFDQjJCCis6MTA0M0YwMDBDNTdEQjdFQkMwQzEwQzlDMDIyQzI1MDJEMkEwRDEwRjA5Cis6MTA0NDAwMDAwMDAwMDIyQTAyMDMzQjAyMDY2QzAyQzBEMEM3RjcyRTRFCis6MTA0NDEwMDAyMDE0MjgzMTAxMjYyNTAyMjgyNDBBMEZFRTAxMkUyNDFCCis6MTA0NDIwMDAxNDU4MDEwRDYzRkZBMzAwMjYyNDA2RDJBMEQxMEYwMDZCCis6MTA0NDMwMDA2QzEwMDYyODIxMDJENjIwMDgwODRDNjU4MDlEMkIyMDkwCis6MTA0NDQwMDAwQzEyRTE1QjBDQjgxMUEyODgyQTgyODZCNTQ5N0E5M0Q2Cis6MTA0NDUwMDAwMjYwMDA5NzE5RTE1ODA5QjkwQTI5OTJBMzY4OTAwOEU3Cis6MTA0NDYwMDAyQTYyMDAwOUFBMEM2NUEwODIyODgyODUxQ0UxNjM2NDg3Cis6MTA0NDcwMDA4MDc5OUM4MEI4ODdCMTRCOUI4MTlCMTA2NTUwNzRDMDNDCis6MTA0NDgwMDBBN0Q5NzAyODBBMDFDMEQwMDc4RDM4MEQwRDQyQ0JERUE4Cis6MTA0NDkwMDAxRkUxNDQxRUUxNDUyRUY2N0VEODMwRDMwRjZENEEwNTRDCis6MTA0NEEwMDAwMDgwODgwMDkwOEMyRTMwMDhDMEEwMDBFRTMyMkU3NDYwCis6MTA0NEIwMDAwMDI4NjAwQzE5RTE0NzBDOEQxMUEyRERBOTg4QzAyMEVECis6MTA0NEMwMDAyQ0QyODUyMjg0Q0ZEMkEwMENCQzBCMkNENjg1RDEwRjQ4Cis6MTA0NEQwMDBDMEYwMDM4RjM4N0ZBMEMwNjNGRkI0MDBDQzU4MkE2Q0IzCis6MTA0NEUwMDA3NERCMzBEQzQwNTgwN0YxQzAyMEQxMEZEQTYwNTgwOTg2Cis6MTA0NEYwMDBCRTYzRkZFN0RENDAyQTZDNzRDMEIwREM3MDU4MDg2NTBECis6MTA0NTAwMDAyRTMwMDg4QjEwMDBFRTMyMkU3NDAwMjg2MDBDMTlFMTVBCis6MTA0NTEwMDAzMDBDOEQxMUEyRERBOTg4QzAyMDJDRDI4NTIyODRDRjM5Cis6MTA0NTIwMDBEMkEwMENCQzBCMkNENjg1RDEwRjAwMDA2QzEwMDQyOTM2Cis6MTA0NTMwMDAyMDE0MjgyMDA2QjE5OTI5MjQxNDY4ODEyNEMwQUYyQ0E2Cis6MTA0NTQwMDAwQTAxMkIyMTAyMkMyNDA2N0JBMDA0QzBEMDJEMjUwMkI5Cis6MTA0NTUwMDAwMjJBMDIwMzNCMDIwNDRDMDJDMEQwNTgwMEJGRDJBMDgyCis6MTA0NTYwMDBEMTBGQzAyMEQxMEYwMDAwNkMxMDA0MjkzMTAxQzJCNDVBCis6MTA0NTcwMDAyOTI0MEEyQTMwMTFDMjgzNzhBMTZDN0JBMTY5NjQ1MDc2Cis6MTA0NTgwMDA0NzJDMjAwNkMwNjg2RkM1NjJDQTU3MkQyMDE0N0NEN0ZGCis6MTA0NTkwMDAyMkRBMjBEQjMwREM0MERENTA1QkZGQTUyOTIxMDIwOTU3Cis6MTA0NUEwMDAwRTRDQzhFMkMwMjBEMTBGQzBGMTBGOUYwMjJGMjUwMjkwCis6MTA0NUIwMDBDMDIwRDEwRkRBMjBEQjMwQzBDMDVCRkZEQzI4MjAxNDI0Cis6MTA0NUMwMDAwNjg4MDIyODI0MTQ2M0ZGQzcyOTIwMTUxQkUwRkIyQTU0Cis6MTA0NUQwMDAyMDBCQzBDMDlDMjQwQkFBMDkyQkExMUMyQzI0MTVBQkJBCis6MTA0NUUwMDA5OTI5QTUxQzYzRkY5OTAwQzAyMEQxMEZEQTIwREIzMDg4Cis6MTA0NUYwMDBEQzQwREQ1MEMwRTA1ODA4NzVEMkEwRDEwRjAwMDAwMEFCCis6MTA0NjAwMDA2QzEwMDRDQjU1MTNFMEY2MjUyMjFGMEQ0NjExMDY1NUZDCis6MTA0NjEwMDAwQ0EzMjMyNjIyMUUyNTI2MUYwNjQ0MEIyNDI2MUU3M0M4Cis6MTA0NjIwMDA0QjFEQzg1MkQyNDBEMTBGMjgwQTgwQzA0MDI0MjYxRkZCCis6MTA0NjMwMDBBODI4MjgyNjFFMjgyNjFERDI0MEQxMEZDMDIwRDEwRjIxCis6MTA0NjQwMDAyNDRERjgyNDI2MUU2M0ZGRDgwMDAwMDA2QzEwMDQyOEI3Cis6MTA0NjUwMDAyMDA2RDYyMDZFODUwMjYwMDBERTE3RTBENTFERTBEQzY2Cis6MTA0NjYwMDAxOUUwRDVDMEMxQzAyMDJBOENGQzY0QTEzMjJCNjEwMkE0Cis6MTA0NjcwMDBCNDRFMEIwQjRDNjVCMEE4MkI2MDBDMkE2MjAwMENCODMyCis6MTA0NjgwMDAxMTA3ODgwODJGODI4NjA5QjkwQTdGRTMwMjYwMDA5RjFDCis6MTA0NjkwMDAyOTkyQTM2ODkwMDUwOUFBMEM2NUEwOTMyODgyODU2NEQ1Cis6MTA0NkEwMDA4MDhEQjg4OTFCRTBEQTk0ODE5QjgwNjU1MTREQzBCNzNECis6MTA0NkIwMDBCODM4QzBBMUMwRTAwOUFFMzgwRTBFNDI2NEUwNDgxQTE2Cis6MTA0NkMwMDBFMEI4MUZFMEI5MkZBNjdFQjA0QTZEQUEwNTAwODA4ODI5Cis6MTA0NkQwMDAwMDkwOENDMEEwMkU2MDBDMENFODExQTc4ODJGODI4NTVBCis6MTA0NkUwMDBBREVFMEY0RjBCMkY4Njg1MkI2MDA2MjJFNENGNjhCMTBECis6MTA0NkYwMDAyQTI5NjAxNUMwQjJDOTlBRDJBMDJENjEwMjJCNjQwNjg2Cis6MTA0NzAwMDAwQ0REMDIyRDY1MDJEMTBGQzBFMDA4QUUzODdFQjBCN0Q3Cis6MTA0NzEwMDA2M0ZGQUIwMDIyNjQwNkQyQTBEMTBGMDBEMkEwRDEwRjVDCis6MTA0NzIwMDAwMENDNTdEQTYwREIzMERDNDA1ODA4OURDMDIwRDEwRjQ4Cis6MTA0NzMwMDBEQTYwNTgwOTJENjNGRkU4MDAyODIyMUUyOTIyMUQ3ODFGCis6MTA0NzQwMDA5OTAyMjgwQTAwQzE3NkMxQzFDMUQyMUJFMEE1QzEyNENCCis6MTA0NzUwMDBBQjZCNjQ4MDQzNzg5MTQwMkE4MDAwMENBRjBDNjRGMDBFCis6MTA0NzYwMDBBRTBEQUUwQzY0RTBBODAyQUYwQzY0RjBBMjA3QUUwQzc0Cis6MTA0NzcwMDA2NEUwOUMyRkFDRTg2NEYwOTYyRUFDRTc2NEUwOTAyRkU4Cis6MTA0NzgwMDBBQ0U2NjRGMDhBMkE4MDA3MDhBODBCMDg4QTAyN0I4M0JCCis6MTA0NzkwMDAwMjJBOERGOEQ4QTA2NUFGQkJDMDkwNjAwMDczMDAwMEZFCis6MTA0N0EwMDAyQjYwMEMwQ0I4MTFBNzg4MkU4Mjg2NkVFODc5MDlCQUE2Cis6MTA0N0IwMDAwQTJBQTJBMzY4QTAwNDhFNjA3QUU5NkIyQTgyODU2NDIzCis6MTA0N0MwMDBBMDY1MUZFMDhEQzBFMzJFNjQwNjlFQTE5RkEwMUZFMEEwCis6MTA0N0QwMDBCOTJFNjAwQTkyQTMwRkVFMDI5RUEyOEU2MDBGRUUwMjI3Cis6MTA0N0UwMDA5RUE0MkY2MDE0N0FGRjQ3MjJBNDE3QURCRTJGODI4NUE2Cis6MTA0N0YwMDAyMkU0Q0YyRkZDMTgyRjg2ODU2M0ZFNzAyQTZDNzRDMENDCis6MTA0ODAwMDBCMURDOTBERDQwNTgwN0EzMURFMDcyQzBDMTYzRkVDNDU3Cis6MTA0ODEwMDBEOUEwREE2MERCMzBEQzQwREQ1MEMyRjBDMUUwMDlGRTM3Cis6MTA0ODIwMDAzOTU4MDdFQUQyQTBEMTBGREE2MDU4MDhFRjYzRkVGMERBCis6MTA0ODMwMDAyQ0E0MTcwREJFMDgyOTgyODUyMkU0Q0YyOTlDMTgyOUIzCis6MTA0ODQwMDA4Njg1NjQ1MDBDMkE2Qzc0MDQ0QjAyNTgwMTZCRDJBMDBDCis6MTA0ODUwMDBEMTBGQzAyMEQxMEYwMDAwNkMxMDA2MkIyMjFFMjgyMjgxCis6MTA0ODYwMDAxRDkzMTA3Qjg5MDFDMEIwQzBDOUMwM0JDMUYyMDQwNkQyCis6MTA0ODcwMDA0MDFERTA1QkMwRTJDMDc0MDc0NzAxMEU0RTAxQUQyRDQ0Cis6MTA0ODgwMDA5RTExQzA0MDJFMEExNDY0QjA2RTZEMDg0NDI4MjIxRDhCCis6MTA0ODkwMDA3QjgxNjUyQUIwMDA3RUExM0I3RkExNDc3QjUxMjA3Q0I0Cis6MTA0OEEwMDBBMTQ5NjhBOTE3NjhBQTE0NzNBMTExQzA5Rjc5QTEwQzI2Cis6MTA0OEIwMDBDMThCNzhBMTA3QzFBRTI5MEExRTI5QjQwMDdDQTEyQkE3Cis6MTA0OEMwMDAyQUIwMDcwQkFCMEJEQUIwN0RCMzAyMkFCREY4REJBMDMwCis6MTA0OEQwMDBDQUE1NjNGRkI0MjhCMDEwODkxMTY5ODdCQjY0OUZCODZCCis6MTA0OEUwMDA2M0ZGREMwMDY0N0ZCNDYzRkZENTAwMDA2NDZGRDBDMDU5Cis6MTA0OEYwMDA0MUMxQUUyQUI0MDA2M0ZGQzYyQjIxMDJDRUJFMkEyMkRDCis6MTA0OTAwMDAxRDJCMjIxRTdBQjEyQThDMTA3Q0IxMjE3QUI5MDFDMEVDCis6MTA0OTEwMDBCMEM5QjkxM0UwMjZEQTIwMjhCMDAwMkNCMDA3MDM4ODBDCis6MTA0OTIwMDAwQTI4ODI0Q0MwRDEwQjgwMDBEQkEwNjVBRkU3RDI0MEUzCis6MTA0OTMwMDBEMTBGODkxMDY1OUZENDYzRkZGMzAwMDA2QzEwMDhDMDhECis6MTA0OTQwMDBEMEM4NTk4QzMwMjkyMTAyMEMwQzQ3NjAwMDBDOEUzMEU1Cis6MTA0OTUwMDAwRTFFNTA2NUUxOUUyOTIxMDJDMEMxMTZFMDE1MDkwQjBCCis6MTA0OTYwMDA0QzY1QjA5MDhBMzAwQTZFNTE2OEUzMDI2MDAwODUyRjcyCis6MTA0OTcwMDA2MjlFMUJFMDBFNkVGODUzMkJCMjI2NjhCMDA1MkUyMjA1Cis6MTA0OTgwMDAwMDdCRTk0NzI3NjI5REI3NDhDQjdGOTcxMDJCMjAwQzBGCis6MTA0OTkwMDBCMDRFMENCRjExQTZGRjI5RjI4NjlFMTI3OThCNDExN0VCCis6MTA0OUEwMDBFMDA1MDdCNzBBMjc3MkEzNjg3MDA0ODgyMDc3ODkzMDZBCis6MTA0OUIwMDAyOUYyODVERjkwRDc5MDY1OTA2NTJBMjEwNDE5RTAzQ0EzCis6MTA0OUMwMDA3QTlCMjJEQTIwNTgwNjlGNjAwMDI5MDAyQzIxMDQxQkM0Cis6MTA0OUQwMDBFMDM4N0NCQjE4REEyMEMwQjY1ODA2OUFDOTU4NjAwMTg2Cis6MTA0OUUwMDA0Q0MwOTA2M0ZGQ0NEQTIwNTgwODdGNjAwMDA2REEyMEM0Cis6MTA0OUYwMDBDMEI2NTgwODdENjU1MTM1REM0MERCMzA4RDMwREEyMDlCCis6MTA0QTAwMDAwRDZENTE1ODA2RjJDMEQwRDNBMDY0QTEyMDI5MjEwMjE3Cis6MTA0QTEwMDBDMDUxODRBMThDQTAwNDA0NDcwQzBDNDc2M0ZGM0UwMEU2Cis6MTA0QTIwMDBDMDlDODgzMURCRDAwOEY4NTAwODlCMzgyODIxMDQ5OEI2Cis6MTA0QTMwMDAxMTZFODgyMzI4MjA2NkFDOEMwQzBDNDcyQzI0NjY3Q0Q1Cis6MTA0QTQwMDBCQjE1OUYxMzlFMTQ4QTEwOEIxMTU4MDcwMjhFMTQ4RjZBCis6MTA0QTUwMDAxM0MwRDAyRDI0NjY4QTMwQzA5MkMxQzgxQkRGRUM3RjAyCis6MTA0QTYwMDBBNjA5OUJGMDk5RjEyQ0Y0MDgyN0ZDMTA2NTUwQTRCODE2Cis6MTA0QTcwMDAzQURGNzBDMDUxQzA4MDA3NTgzODA4MDg0MjY0ODA2NzI4Cis6MTA0QTgwMDAxOERGQzgxOURGQzkyOTg2N0U2QTQyMEFEMzBGNkRFOThCCis6MTA0QTkwMDAwNTAwQTA4ODAwRjA4Q0MwQTA4OTMwQjRFMzdGOTYyODgwCis6MTA0QUEwMDBDMEYyMDdFOTBCMkM5NDA4OUI5MDlGOTEyRjIwMEMxMkM5Cis6MTA0QUIwMDBERkM4MENGODExQTY4ODI5ODI4NUEyRkYyREY0Q0ZEMjc5Cis6MTA0QUMwMDBBMDA5MzMwQjIzODY4NUQxMEYyMjIwMEM4OTEyMThERjExCis6MTA0QUQwMDBDMDBDMkIxMUE2QkJBODIyMkQyNENGMkNCMjg1RDJBMEFFCis6MTA0QUUwMDAwQzk5MEIyOUI2ODVEMTBGQzA4N0MwOTAwQTU5Mzg3OTI3Cis6MTA0QUYwMDA4MDk2NjNGRjhBREIzMERBMjBDMEMxQzBEMDVCRkY1NkVFCis6MTA0QjAwMDAyOTIxMDJDMEQwMkE5Q0ZFNjVBRTREMkQyNTAyQzA5MDAxCis6MTA0QjEwMDA2M0ZFNDUwMDlFMTQyQTJDNzRDMEIxREM3MERENDA1ODQxCis6MTA0QjIwMDAwNkREOEUxNEMwRDAxQkRGQjlDMUM4NjNGRjZBQzAyMDg4Cis6MTA0QjMwMDBEMTBGMDAwMDZDMTAwNjI4MjEwMjE2REY5RDA4MDg0Q0RBCis6MTA0QjQwMDA2NTgyMTkyOTYyOUU2Rjk4MDI2MDAyMjAxOURGOTgyOUY4Cis6MTA0QjUwMDA5MjI2Njg5MDA3OEEyMDA5QUEwQzY1QTIwRjI3NjI5REY5Cis6MTA0QjYwMDBDMENDNjQ3MjA3MkIyMTA0OEUzMUMwQTBEREEwMEVGRUU0Cis6MTA0QjcwMDA1MDBFQ0QzODZFQjgxMDJDMjA2NkIxQ0MwQzBDNDcyQ0UyCis6MTA0QjgwMDAyNDY2N0NEQjAyNjAwMUVGQzBDMTI5MzAwODFCREY4QThDCis6MTA0QjkwMDA2NDkwOUMyRjBBRkZDMEQzQjA5RTY0RTEwMjY4OTIxMzE4Cis6MTA0QkEwMDA2NDUwODgyQTJDNzQwNDRCMDI1ODAwOTMwQUEyMDIwNjBGCis6MTA0QkIwMDAwMDAwMDAwMDJCMjAwQzI3MjEwNDBDQkMxMUE2Q0MyOURFCis6MTA0QkMwMDBDMjg2MjgwQTA4Nzk4MzAyNjAwMUI5MTlERjdBMDlCOTE3Cis6MTA0QkQwMDAwQTI5OTJBMzY4OTAwODJFMjIwMDA5RUUwQzY1RTFBNDMwCis6MTA0QkUwMDAyRUMyODU2NEUxOUUyNjIwMDcxM0RGODM2RTdCMDI2MDYwCis6MTA0QkYwMDAwMTlBMTdERjdBMUZERjgzMTlERkIwQzBEMjI4MjAwQTlECis6MTA0QzAwMDA5M0UwOURFMUE5NjkwRjg4MDI5OEUyMkY5MDgwMkE5NDkxCis6MTA0QzEwMDA4MEIxRkYwN0ZGMDI5RkUzMkVDMjg1MUZERjZEMEVERTBFCis6MTA0QzIwMDAwQkFGQkYyQUY0Q0YyRUM2ODU2NTVGNzZDMDIwRDEwRkFCCis6MTA0QzMwMDAyODMwMTAyOTMwMTEyRTMwMTMwMDk5MzIwMEVEMzI2NEUzCis6MTA0QzQwMDA4MEVFMkEzMDE0MUZERjlEMDBBQTMyNzhFRjA1MEY5RUY4Cis6MTA0QzUwMDAwOTJERTQ3RjFFREY5QjY2QTAwNTBGOTgwOTJBODQ4MDNBCis6MTA0QzYwMDBCNEE3MThERjk4Qzc2RjAwOTEwNEFFOUVEREUwMDBBRkQ3Cis6MTA0QzcwMDAxQTAwQzMxQTZFRTEwNTJEQjIwMDBERUQwQzFFREY5Mjc1Cis6MTA0QzgwMDAwOEQ4MUMwNjMzMDNBRTg4MkE4NDhCMkVCMDJFMjc4NEM2Cis6MTA0QzkwMDA4QzAzRUUwMTBGRUUwMjJFQjQyRTU4MDE4RjYzRkVGRjNGCis6MTA0Q0EwMDAyOTMxMDgyOTI1MDQyODMwMTQyRTMxMDlCMDg4NjQ4MDYwCis6MTA0Q0IwMDBBMzJFMjQwQUMwODEyRTMwMTYyQ0I0MjMyRTI0MEJCNDJDCis6MTA0Q0MwMDBFRjJGMjQwQzhDMzc4QjM2MjkyNTA0REVCMERGQzAwQzg3Cis6MTA0Q0QwMDA4RjM5MEI4RTM5MEZFRTAyNjRFRUM0MDg5RjExMDFDNEE4Cis6MTA0Q0UwMDAwNDhEMzgwQ0I4MTgwMEM0MDQwQ0JFMTgwMEVFMTEwRTY4Cis6MTA0Q0YwMDBERDAyQzBFMzBFRkYwMjFFREY2NjlGNzE5RTcwMUVERkE1Cis6MTA0RDAwMDA2NThGMjA5ODczOUQ3NDA1RkYxMTBCQ0Q1M0MxODA5ODVBCis6MTA0RDEwMDA3NTBGREQwMjBFREQwMjlENzIxRURGMjQyQTI0NjYyRjMwCis6MTA0RDIwMDA2MjlEMkFFNEEyMkZGQzE4MkY2NjlENjNGRTcxMDAwMDhECis6MTA0RDMwMDAwMDJGMzAxMjFCREY2NjAwRkEzMjc4RkYwNTBCOTgwQjRDCis6MTA0RDQwMDAyQTg0N0Y2NkQwMDUwQjlBMEIyREE0ODAyQTMwMTEwMDhGCis6MTA0RDUwMDBBQTMyNjNGRjQ0MkYyNDBBOUUyQjYzRkY1NkNDNTdEQUY2Cis6MTA0RDYwMDAyMERCMzBEQzQwNTgwNzBFQzAyMEQxMEYwMERBMjBDMDE1Cis6MTA0RDcwMDBCNjU4MDc5RDYzRkZFNTAwREE3MDU4MDYzNkMwQTAyQUQyCis6MTA0RDgwMDAyNDY2NjNGRTAyREEyMDU4MDc5ODYzRkZDRkIxNjkyOEQyCis6MTA0RDkwMDAyMDBBODYyMDA5MDk0Nzk5MTEyOTI0MDc5ODEwN0Y4MTQ0Cis6MTA0REEwMDAyNjkzRTAyN0U1MEE5QUUzODgxMDlERTExOURGNDI4REZBCis6MTA0REIwMDAxMTA5NkYwMjlGRTQyREU0MTYwOTg4MDJDMEQzOThFMjFFCis6MTA0REMwMDAyQTI0MDc2M0ZFNTEwMDAwMURERjBCMDg2ODExOEYxMUI0Cis6MTA0REQwMDA4OTJCOTNFMDA4RkYwMkMwOEY5RkU1MEQ5OTAyOTlFMkFECis6MTA0REUwMDAwNDdGMTFDMEQ0OURFMTA4RkYwMjlGRTQ2M0ZGRDAwMDVGCis6MTA0REYwMDA2QzEwMDRDMDIwRDEwRjAwNkMxMDA0ODUyMTBEMzgxMUY3Cis6MTA0RTAwMDAxNERFRTk4NjIyQTQyNDA4NjYwQzk2MjIwNTMzMEI5MzRGCis6MTA0RTEwMDAyMTc0M0IxM0M4NjJEMjMwRDEwRkMwMzBCQzI5OTkyMTE0Cis6MTA0RTIwMDA5OTIwOTMyMkQyMzBEMTBGMjMzREY4OTMyMTYzRkZFM0UxCis6MTA0RTMwMDA2QzEwMEFENjIwOTQxODE3REVERUQ5MzBCODM4OTgxOUNECis6MTA0RTQwMDA5OTE0NjU1MjUyQzBFMUQyRTAyRTYxMDIxRERFREIwRUU0Cis6MTA0RTUwMDAwRTRDNjVFMTYyOEYzMDhFMTkwRjZGNTEyRkZDRkQ2NThFCis6MTA0RTYwMDBGMTU1OEVFMTI5RDAyMzBFOEY1MDc3RTY2QjhGMTgxRUY3Cis6MTA0RTcwMDBERjE4QjBGRjBGRjQxMTBGMUYxNDY1OTBDRTE4REYxNTY3Cis6MTA0RTgwMDA4QzYwQThDQ0MwQjExOURFQzkyODYwMEIwOUNDMEIwRDExCis6MTA0RTkwMDA4ODA5Mjk4MTFDMjg4MTFBMkEwQTAwMDk4ODBDMDhCQTY1Cis6MTA0RUEwMDAzODFCREYwQjBDQTkwQTI5OTI5NDdCOUIwMjYwMDA4Q0IzCis6MTA0RUIwMDAyQjYwMEM5NDE2MENCRDExQTdERDI5RDI4NkI4NDg3OTU5Cis6MTA0RUMwMDA4MzAyNjAwMEQyMTlERUJCMDlCODBBMjg4MkEzOTgxN0IyCis6MTA0RUQwMDA2ODgwMDI2MDAwQTM2MDAwQTUxQURFRkY4NDE4MEFFRTU1Cis6MTA0RUUwMDAwMUNBOTgxQkRFQjI4QzE5MkJCMDAwOENDMDZFQjMxM0I0Cis6MTA0RUYwMDAxRERFQUYwQzFDNTIwRENDMEIyREMyOTVDMEExN0VEQjZDCis6MTA0RjAwMDBBRTYwMDAzODBDMEM1MzYwMDAwOTAwMDAwMDE4REVGMUEwCis6MTA0RjEwMDA4QzYwQThDQ0MwQjExOURFQTUyODYwMEIwOUNDMEIwREE0Cis6MTA0RjIwMDA4ODA5Mjk4MTFDMjg4MTFBMkEwQTAwMDk4ODBDMDhCQUQ0Cis6MTA0RjMwMDAzODBDQTkwQTI5OTI5NDdFOTMwMjYzRkY3MkRBNjBDMDRBCis6MTA0RjQwMDBCQTU4MDcyOTY0NTA3MzYwMDI2NjAwMDAxQURFOTg4QzE0Cis6MTA0RjUwMDAxOTJBQTAwMDhDQzA2RUEzMUExOERFOTQwQzFDNTIwOEVCCis6MTA0RjYwMDBDQzBCMThERURCMkJDMjk1QzBBMTc4QjMwMjYzRkYzRkU4Cis6MTA0RjcwMDA2M0ZGQzkwMDBDMEM1MzYzRkYwOTg5NjA3ODk5MTgyOUY1Cis6MTA0RjgwMDBEMjg1Qzk5MjJCNzI5RTFEREU4OTZFQjgyMzJERDIyNjQyCis6MTA0RjkwMDA5OTEzNjlEMDBCNjAwMDBEREE2MDU4MDcxMzYwMDAxNzkxCis6MTA0RkEwMDAwMDg4NjA3RDg5MEE5QTFBMjk3MjlEOUMxMjk5MTVDRkYyCis6MTA0RkIwMDA5NURBNjBDMEI2NTgwNzBDNjU1MUY1OEQxNDhDMThEQjc2Cis6MTA0RkMwMDBEMDhERDAwNjZBMDIwRDZENTE1ODA1ODBEM0EwOUExNDc5Cis6MTA0RkQwMDA2NEExREQ4MkEwODVBMUI4QUY5RjE5MDUwNTQ3MDIwMjMzCis6MTA0RkUwMDA0Nzk1MThDMDUxNjNGRTYwMkI2MTA0QzA4Qzg5MzFDMEE1Cis6MTA0RkYwMDBBMDA5Rjk1MDA5OEEzODZFQjgxRjJDNjA2NkEyQ0MwQzQzCis6MTA1MDAwMDAwQzQ3MkM2NDY2N0NBQjExOUYxMTlFMUI4QTE1NTgwNUJBCis6MTA1MDEwMDA5MThFMUI4RjExQzBBMDJBNjQ2NjlGMTE2NEYwRTEyOTU0Cis6MTA1MDIwMDAxMjAzMjgxMjA5NkRGOTE3MkY4MTAzMDA5MDhEQUVGRTJGCis6MTA1MDMwMDAwMDgwODg5RjkyMDA5MDhDMDA4MDg4Qjg5OTAwOTA4Q0E2Cis6MTA1MDQwMDA2NTUxNEU4QTEwODUxQThCMzAxRkRFNkI4ODEyMjk2MERECis6MTA1MDUwMDAwNzA4NTgwQTJDODI5NDJENjEwNDBFQ0MwQzJDODY5NERGCis6MTA1MDYwMDA2RkRCM0MxQ0RFOTVBQzlDMjlDMDgwMEI1RDUwQTI5OTg3Cis6MTA1MDcwMDAwOTA5NDcyOUM0ODA2NUQwREEyRTYwMENDMEQwMUZERTM0Cis6MTA1MDgwMDA1NDBDRTgxMUFGRUVBNzg4MjI4Mjg1MkRFNENGMDI0MkFFCis6MTA1MDkwMDAwQjIyODY4NUQyQTBEMTBGOEUzMDBFMEU0NzYzRkRBNjVGCis6MTA1MEEwMDBBMjlDMEMwQzQ3MkM2NDA3N0FCNkNEOEI2MDJFNjAwQTRDCis6MTA1MEIwMDAyODBBRkYwOEU4MEM2NDgxMEUxOERFN0U4MzE2ODIxMzJFCis6MTA1MEMwMDBCMzM5MDIzMzBCMkMzNDE2MkQzNTBBQzAyMzkyMzE5RjhECis6MTA1MEQwMDAzMEMwMjA5MjMzMDhCMjAyMDhFODAyOTIzNDk4MzJDMEZECis6MTA1MEUwMDA4MDI4NjQwNzJCNjAwQ0QyQTAxQ0RFMzkwQ0JFMTFBN0VGCis6MTA1MEYwMDBFRTJERTI4NUFDQkIyOEI0Q0YwRDlEMEIyREU2ODVEMUZFCis6MTA1MTAwMDAwRjhCMTg4ODEzOEQzMEI4OEMwRDhGNDcwRDQ5NTBCNDE0Cis6MTA1MTEwMDA5OTA0OTkxMDBEMEQ1RjA0REQxMDA5RkYwMjlGODAwREE5Cis6MTA1MTIwMDBCQjAyOUI4MTY1NTA4RDg1MUFCODNBQzBGMUMwODAwQ0Q2Cis6MTA1MTMwMDBGODM4MDgwODQyNjQ4MDZCMUJERTFBMTlERTFCMjlCNjlBCis6MTA1MTQwMDA3RThEMThCMERENkREQTA1MDBBMDg4MDBDMDhDQzBBMDhGCis6MTA1MTUwMDA2M0ZFRjMwMDgyMTM4QjE2MURERTJCMjg2MDBBQzBFMDZECis6MTA1MTYwMDAyRUM0ODAwRDg4MDIwMkIyMEI5OTIzOUYyMEMwRDI5OEQyCis6MTA1MTcwMDAyMjlEMjEyMjYwMENCMkJCMEMyRDExQTdERDI4RDI4NTA3Cis6MTA1MTgwMDAwOEJCMEIxOERFMTMyQkQ2ODVBODIyMkUyNENGRDJBMDY1Cis6MTA1MTkwMDBEMTBGOUUxQjg1MUEyQTZDNzQ4QjE4NUJGRjE3OEUxQjEwCis6MTA1MUEwMDA2M0ZFQTMwMEMwODdDMDkwMEFGOTM4Nzk4MDkyNjNGRjNDCis6MTA1MUIwMDA4NkMwMjBEMTBGOUUxQjJBNkM3NEMwQjE4RDE4NTgwNTczCis6MTA1MUMwMDAzNThFMUI4NTFBNjNGRTdFODg2QjgyMTM4OTE2MDhCRTk2Cis6MTA1MUQwMDAxMTBFQ0UwMjAyOTIwQjlFMjVCNDk5MUVERTA2OUYyMDcwCis6MTA1MUUwMDAwRTg4MDI5ODIyQzBFRjA0RDgxMTBFODgwMjk4MjRDMEJECis6MTA1MUYwMDBFNDlFMjFDMDgwRDJBMDJCNjAwQzI4NjQwNzFDRERGNDQzCis6MTA1MjAwMDAwQ0JFMTFBN0VFMkRFMjg1QUNCQjI4QjRDRjBEOUQwQkQzCis6MTA1MjEwMDAyREU2ODVEMTBGMDAwMDAwNkMxMDA0QzAyMEQxMEYwMEQ2Cis6MTA1MjIwMDA2QzEwMDQ4NjMzQzA3MUMwMzA2MDAwMDFCMTMzMDAzMUFFCis6MTA1MjMwMDAwNDAwNzQxQTA0NjIwMTc0NjBGMUQxMEY2QzEwMDQwMjRFCis6MTA1MjQwMDAyQTAyMDMzQjAyNUJGRkY2MUNERERDMUJERTI0Qzc5RjRBCis6MTA1MjUwMDA4OEIwMDlBOTAzMDk4QTAxOUFCMDc5ODAxRUMwRjAwRkFECis6MTA1MjYwMDBFNDMxMUREREQzMDAwMjAwMkJEMjgyMUVERTFEMkFDMUQ3Cis6MTA1MjcwMDAwMjBFQkIwMjJCRDY4MjBBRTQzMUQxMEYyOEMxMDJDMTMzCis6MTA1MjgwMDA5MDA5ODgwMjA4MDg0RjI4QzUwMjA4RTQzMUQxMEYwMEIwCis6MTA1MjkwMDA2QzEwMDRDMEMwMENFNDMxMTJEREM4MUFEREM1MDAwMjc4Cis6MTA1MkEwMDAwMDI5QTI4MjE4REUxMTFCREUwRjI2MjEwMjBCOTkwMUI0Cis6MTA1MkIwMDAwODY2MDEyOUE2ODIyNjI1MDIwNkU0MzExNERFMEMxNUIzCis6MTA1MkMwMDBERTA3MjM2QTkwMjMyNjEyODU1MDI0MjYxMTI1MjYxM0YzCis6MTA1MkQwMDAyMjJDNDBEMTBGMDAwMDAwNkMxMDA4RDYxMDJCMEE2NDVECis6MTA1MkUwMDAyOTFBQjQxQUREQjIwRDIzMTExQ0REQjMwRjI1MTFCODM0Cis6MTA1MkYwMDAxODk4MTMwRTU1MTExOERERkVBQzU1QTgzOEFBMzMyQzlBCis6MTA1MzAwMDA4MEZGMkE4MEZFQTkzMzI4OEQwMTI5ODAwMTA4QUExMTc3Cis6MTA1MzEwMDAyODgwMDAwQ0FBMDIwODg4MTEwOTg4MDIwOEFBMUMyODAzCis6MTA1MzIwMDA4QzA4MjgxNjA0NTgwODRDMTREREE0MEFBNzAyMjQ0MTRFCis6MTA1MzMwMDAxNjJBMzA4MDJCMTIwNDA3QUEyODU4MDg0N0IxMzM4QjRECis6MTA1MzQwMDAxM0I0NTU5QTYwMDRBQzI4QjQ2NjJDNTYyNzdCNjlFMEU4Cis6MTA1MzUwMDAxNkREREI5NDEyQzA1MEMwRDAxN0REOTc5RDE1RDM3MEI5Cis6MTA1MzYwMDBENDEwMkY2MDgwMkU2MDgyOUYxNjlFMTc4ODE2NzI4OTM3Cis6MTA1MzcwMDAxQThEMTI4QzQwMkE2MDdGMERDQzI4MkIzQTIwMENBQTYzCis6MTA1MzgwMDAyODU4MDgzNUMwQjEwQUJFMzcyRTM1NDA4RjE3NzJGOTNDCis6MTA1MzkwMDAxQThEMTI4QzQwMkE2MDgxMERDQzI4MkIzQTIwMENBQTQxCis6MTA1M0EwMDAyODU4MDgyREMwQjEwQUJFMzcyRTM1NDJCMjMzQjQ0NDU2Cis6MTA1M0IwMDBCMTU1Njk1MkI2QjQ2NkMwNTA4RjE1Qjg3N0QzNzBCMjg0Cis6MTA1M0MwMDBGRjlGMTU2RUY4OTlEMTBGNkMxMDA0QzAyMUQxMEYwMDBBCis6MTA1M0QwMDA2QzEwMDQyNzBBMDAxQ0RENzYxRkREODcxRUREOEExRDg4Cis6MTA1M0UwMDBERDczMUFEREI1MUJEREMzQzAyODI0QjAwMDZEMkE3NTNFCis6MTA1M0YwMDBBQTQ4Mjg4MDgwQzA5MTY0ODA2MTAwNDEwNDE1REQ2RTU4Cis6MTA1NDAwMDBDMDMxMjU1MDJFMDAzNjFBMDY1NTAxMDU5NTM5MEM1NjI3Cis6MTA1NDEwMDAxMTBDNjYwODI5NjI5NjZFOTc0RDBENTkwQTI5OTIyNDNGCis6MTA1NDIwMDA2ODkwMDgxMkREQTcwMjQyMDg3Mjk5M0IyMzYyOTUxMjI4Cis6MTA1NDMwMDBERDZCQ0IzNDlGMzAwMjgyMDIwRTQ0MDJDMDkyOTkzMTYwCis6MTA1NDQwMDA5NDMyOTIzM0FENTIyNDYyOTVDMDkwMjQ0QzEwMjQ2NjVECis6MTA1NDUwMDA5NTI0QjAwMDI5MjRBMEFBNDIyOTI0ODBCMTc3QjE0NDIwCis6MTA1NDYwMDAwNDA0NDIyNEI0MDBEMTBGRDEwRkQxMEY2QzEwMDQxQUUwCis6MTA1NDcwMDBERDRGMkFBMDAwNTgwMjFDNUJGRkQ1MDIyQTAyMDMzQjI1Cis6MTA1NDgwMDAwMjVCRkZEMTFCREQ0REM5QTEyQ0IxMDJDMEQ0MERDQ0Y0Cis6MTA1NDkwMDAwMjBDMEM0RjJDQjUwMjBDRTQzMUQxMEZDMEEwMEFFNDcxCis6MTA1NEEwMDAzMTE4REQ0MzAwMDIwMDJGODI4MjE5REQ1NjJFQjEwMjMxCis6MTA1NEIwMDAwOUZGMDIyRjg2ODIwRUU0MzFEMTBGMDA2QzEwMDRDMDY4Cis6MTA1NEMwMDAyMDAyRTQzMTE0REQzRDE2REQzQTAwMDIwMDIyNjI4MjQyCis6MTA1NEQwMDAyMzQxMDI3MzJGMDYwM0U0MzFDMDIwRDEwRjE5REQ4NzY5Cis6MTA1NEUwMDAxQUREODYyODQxMDIwQTJBMDEwOTg4MDEyQTY2ODIyOEQzCis6MTA1NEYwMDA0NTAyMDhFNDMxMTVERDdEMTJERDgyMjU0NjFERDEwRjAwCis6MTA1NTAwMDA2QzEwMDQyOTIwMDYyODlDRjk2NDgwQTAyQTlDRkQ2NTYzCis6MTA1NTEwMDBBMDk2OEEyODhEMjYyRjBBMDg3QUQ5MDQyQjIyMUZDODI0Cis6MTA1NTIwMDBCRDJDMjA2NDY0QzA4MTJFMjIwOTBFQUUwQzY2RTA3ODhBCis6MTA1NTMwMDAyQjIwMEMxRUREMUYwQ0JDMTFBRUNDMjhDMjg2MTlERDQxCis6MTA1NTQwMDAxRDc4RjMwMjYwMDBBRDA5QjkwQTI5OTJBMzY4OTAwODlBCis6MTA1NTUwMDAyRTIyMDAwOUVFMEM2NUUwOUIyOUMyODUxRkREMjc2NDIxCis6MTA1NTYwMDA5MDkyOUY5MEMwRTQxRkREMzQ5RTkxMjgyMDBBQzBFMEY1Cis6MTA1NTcwMDA5RTkzMEY4ODAyOTg5Mjg4MjAwRjg4MDI5ODk0MkYyMDdCCis6MTA1NTgwMDAwNzlBOTc5RDk2MkY5NTBBMkUyNDA3MjgyMDA2MjkyMEYyCis6MTA1NTkwMDA2NDY4ODMzMzI4QzI4NTEyREQwRTI4OEMyMEEyQjIyRUM3Cis6MTA1NUEwMDAyNENGMjhDNjg1QzAyMEQxMEZDMDIwRDEwRjJBMjA2QTYxCis6MTA1NUIwMDAwMTExMDIwQTJBNDE2NUFGNTJEQTIwQzBCMDU4MDVEMTY0Cis6MTA1NUMwMDA2NEFGRTVDMDIxRDEwRjAwNjQ5RkM4MUZEQ0ZCMkQyMDE0Cis6MTA1NUQwMDAxNjhGRjIwOUREMEMwMEYxMDQwMEREMUFBREFEOUQyOTM2Cis6MTA1NUUwMDAxMkRDRkMyOEMyODVBMkIyMkUyNENGMjg4QzIwMjhDNjJCCis6MTA1NUYwMDA4NUMwMjBEMTBGQzAyMUQxMEYwMDAwMDA2QzEwMDQyNkZGCis6MTA1NjAwMDAwQTAwMUJERDQwMTVEQ0VDMjgyMDY1MTdEQ0U5Mjg4QzNFCis6MTA1NjEwMDBGRTY0ODA5NDBDNEQxMTBEQkQwODJDRDJGNTJCRDJGNEY0Cis6MTA1NjIwMDAyRUQyRjc3Q0IxM0RCNEJCMkJENkY0N0JFOTA1MkJEMjRGCis6MTA1NjMwMDBGNjJCRDZGNDdDQjkyQzJBRDJGNjJBRDZGNTJBRDZGNDQzCis6MTA1NjQwMDAwNkU0MzEwMDAyMDAyODcyODIyQUZBRkYwMDQxMDQyOTkwCis6MTA1NjUwMDAwQTAxMkY1MTAyMDA5OTFBMEE5OTAzMDk4ODAxMjg3NjM0Cis6MTA1NjYwMDA4MjBGRTQzMTI2MjQ2NTJCRDJGNDhFNUEyQ0QyRjVCMDY5Cis6MTA1NjcwMDBFRTlFNUE3QkNCMTYyOUQyRjYyRkQyRjcwQ0I4MEMwOTI2Cis6MTA1NjgwMDBGRjBDMDhGRjBDMEYyRjE0QzhGOTYwMDAzMjBCQ0EwQzc2Cis6MTA1NjkwMDAwQTJBMTRDRUE5MkI1MTAyQzBDMjBDQkIwMjBCMEI0RjFECis6MTA1NkEwMDAyQjU1MDIwQkU0MzFEMTBGMDBEQjMwREEyMDVCRkY5NDg1Cis6MTA1NkIwMDAxQkREMTU2NEFGNUQwQzREMTFBREJENjNGRkE4MDAwMDhGCis6MTA1NkMwMDAwNkU0MzEwMDAyMDAyRjcyODIxOERDRDQyRTUxMDIwODQ5Cis6MTA1NkQwMDBGRjAyMkY3NjgyMEVFNDMxRDEwRjAwMDA2QzEwMDRDMDVGCis6MTA1NkUwMDAzMDAzRTQzMTE2RENCMzE1RENCNDAwMDIwMDI0NjI4MjFFCis6MTA1NkYwMDA3NDQ3MjExOEREMDU4NzVBMDg0ODAxMjg2NjgyQ0Q3MzUyCis6MTA1NzAwMDAxOUREMDMwQzJBMTFBQTk5MjI5MjgzMjk5Mjg0NzI5MTlECis6MTA1NzEwMDAwMzgyMjBDQzI5MkI1MTAyMEJFNDMxQzAyMEQxMEYwMDkxCis6MTA1NzIwMDAxRkRDRkMyRTUxMDIwRkVFMDEyRTU1MDIwRUU0MzFCMEFCCis6MTA1NzMwMDAyREIxN0M5QzVBMTJEQ0Y3MDhERDExMkQ1NjE5RDEwRkMyCis6MTA1NzQwMDA2QzEwMDYxQkRDOUExRURDOUMyMkIwMDAxQURDRjM2Rjg2Cis6MTA1NzUwMDAyMzcyMUREQ0RBQzA0ODE4RENGMjFGRENGMERDMTBENTQ3Cis6MTA1NzYwMDBDMDgzRjAwMDgwODYwMDUwOEE2RDRBNEYwRjM1MTEwREJFCis6MTA1NzcwMDAzNDA5MjQ0MDgwMEI1NjBBMjk2Mjk0QjEzMzBFNTUwOTJFCis6MTA1NzgwMDAyMjUxNDAwRjQ0MTEwQzQ0MEE4NzQwMDlBODBDMDI4ODlBCis6MTA1NzkwMDAzNjIyNTE0MTA3ODgzNjA4NzcwQ0E4OTkyOTY2OTQ5N0Q0Cis6MTA1N0EwMDA0MDI5NjI5NTg3NDEwOUE4MEMwMjg4MzYwNzg4MzYwODg3Cis6MTA1N0IwMDA3NzBDQTg5OTI5NjY5NTk3NDEwMzAzNDJCMTM4MDgwOEU4Cis6MTA1N0MwMDA0Mjk4RjBEMTBGMUNEQ0Q3MTNEQ0Q4MjdCMDAwMjMzMjZECis6MTA1N0QwMDBCNTY0NzA1N0MwOTFDMEQwMTZEQ0Q2MTVEQ0Q0QzA0MDdCCis6MTA1N0UwMDAyQUMwMDAwMzg4NDMyOEM0MDA2RDc5M0MwMDQxMDRCMUZECis6MTA1N0YwMDA0NDAwOTcxQTc3ODAxNDhFNTAyRkIyOTUyREI2OTVBRjJFCis6MTA1ODAwMDBFRTJFRUQyMDA2RUUzNjlFNTA2MDAwMTg3N0EwMDk4MzNDCis6MTA1ODEwMDA1MDlENTAyM0I2OTU2MDAwMDIyM0IyOTUyMjNEMjAwNjhDCis6MTA1ODIwMDAyMjM2MjJCNjk1QjQ1NUI4QkJEMTBGMDAwMzg4NDMyODYxCis6MTA1ODMwMDBDNDAwRDEwRjZDMTAwNEMwNDAwNEU0MzExNURDQkUwMDdDCis6MTA1ODQwMDAwMjAwODg1MDEzRENCRENCODE1QkZGQkQxQ0RDQkMwQ0FGCis6MTA1ODUwMDAyRDExQURDQzJCQzI4MjJBQzI4Mzk0NTA3QkFCMTQyRTY3Cis6MTA1ODYwMDBDMjg0MjlDMjg1MEFCRDBDMEU5OTBDMEQ5OTBDMDkyOTE4Cis6MTA1ODcwMDAxNDYwMDAwNTBCQTkwQzA5MjkxNDk5MzAxNURDNEYyQTc2Cis6MTA1ODgwMDA1MTAyMEFFNDMxMkEyQ0ZDNTgwMDRCMkIzMjAwMEFBMkE4Cis6MTA1ODkwMDAwMjJCQkNGRjlCMzBDQ0I2QzhBNEQyQTBEMTBGMDAwMDE1Cis6MTA1OEEwMDAwNEU0MzExRURDNDMwMDAyMDAyREUyODIyRkJBRkYyQ0ZCCis6MTA1OEIwMDA1MTAyMEZERDAxMkRFNjgyMENFNDMxRDEwRjAwMDAwMDEyCis6MTA1OEMwMDA2QzEwMDREMTBGMDAwMDAwNkMxMDA0QzAyMEQxMEYwMDM4Cis6MTA1OEQwMDA2QzEwMDQxM0RDOUJDMEQxMDMyMzA5MjMzMThEQzBBMEJECis6MTA1OEUwMDA2RjM0MDI2MDAwOEQxOURDMzIxQkRDMzMxN0RDOTQwQzQyCis6MTA1OEYwMDAyODExQTg3NzI2NzI4MzI1NzI4MjJDRkFGRjc2NTE0N0U5Cis6MTA1OTAwMDA4ODUwMkU3Mjg1MjU1QzA0MjU3NjgyNzVFOTA1MjU3MkZFCis6MTA1OTEwMDA4NDI1NzY4Mjc2NTkyOTJFNzI4NDJFNzY4MjJFNzY4MzdECis6MTA1OTIwMDAwQUU0MzEwMDAyMDAyMzkyODIwMDIxMDQyRkIxMDIwMDE4Cis6MTA1OTMwMDBENjFBMEM2NjAzMDYzMzAxMjM5NjgyMEZFNDMxMjY3MkQxCis6MTA1OTQwMDA4MzI1NzI4MjYwMDAwMjAwRDhBMDc2NTkyMjBBRTQzMUQxCis6MTA1OTUwMDAwMDAyMDAyMzkyODIwMDIxMDQwMEQyMUEyRkIxMDIwQzBGCis6MTA1OTYwMDAyMjAzMDIzMjAxMjI5NjgyMEZFNDMxRDI4MEQxMEYwMDRECis6MTA1OTcwMDBEMjgwRDEwRkMwMjBEMTBGNkMxMDA0REIzMDg2MjAxNUVGCis6MTA1OTgwMDBEQzBCMjgwQTAwMjgyNTAyREEyMDI4QjAwMDJDQjAwN0ZBCis6MTA1OTkwMDAwNTg4MEEyODgyNEMyRDBBMDEwQjgwMDBEQkEwNjVBRjI4Cis6MTA1OUEwMDBFNjFBREMwNDBBNEEwQTI5QTJBM0M3QkY3NjkxMDFEMUVDCis6MTA1OUIwMDAwRjJCQTZBM0QxMEYwMDAwNkMxMDA0QzBEMUM3Q0YxQkMyCis6MTA1OUMwMDBEQkZFMTlEQkZCMTdEQkY5MEMyODExQTg3Nzg2NzU4NTQwCis6MTA1OUQwMDA3NEMwQTA3NjUxNjI4ODUwOEU3N0I0NTU5NTc0NzVFOTdECis6MTA1OUUwMDAwMzg1NzY5NTc0NzY1OTI3OEY3NjlGNzU5Rjc0MEFFNEEwCis6MTA1OUYwMDAzMTAwMDIwMDIzOTI4MkI0MkUyRkIxMDIwMEUxMDQwMDk0Cis6MTA1QTAwMDBENjFBMEM2NjAzMDYzMzAxMjM5NjgyMEZFNDMxODY3NTlECis6MTA1QTEwMDA4Mzc0NzYzOTI4MEFFNDMxMDAwMjAwMkU5MjgyQjQyMjdGCis6MTA1QTIwMDAwMDIxMDQyNEIxMDIwMERGMUEwQ0ZGMDMwRkVFMDEyRTQ3Cis6MTA1QTMwMDA5NjgyMDRFNDMxRDI4MEQxMEZEOEEwNzY1MUQ2RDI4MDlDCis6MTA1QTQwMDBEMTBGMDAwMDZDMTAwNDI5MEE4MDFFREMwMDFGREMwMDRFCis6MTA1QTUwMDAxQ0RCRDgwQzJCMTFBQ0JCMkMyQ0ZDMkRCMjg1MEZDQzM1Cis6MTA1QTYwMDAwMjlFRDE5Q0QwQzA1MUMwNzAxM0RCRkMxNERCRkIxODJDCis6MTA1QTcwMDBEQkY5MkFCMjg1QTgyODA0MjQwQTIzNDY5MUE5ODZCODBFCis6MTA1QTgwMDBBQTJBQjY4NUE5ODgyNzg0OUYyNTY0OUZEMTBGMDAwMDg0Cis6MTA1QTkwMDA2QzEwMDQxOURDMkMwQzJBMTFBOUE5ODk5MEM0ODQ3OUYyCis6MTA1QUEwMDA4Qjc2MUJEQzFBQUJBQzJBQzI4MzJDQzI4NDdBQzE2ODA5Cis6MTA1QUIwMDA4QUEwMkJCQzMwRDNBMDY0QTA1RTBCMkIwQTJDQjJBMzBGCis6MTA1QUMwMDAxOURCRTU2OEMwMDcxRERDMjBEMzBGN0RDOTRBQTkyOTcxCis6MTA1QUQwMDAyOTlEMDEyOTkwMUY2ODkxMzI3MEE2MDNEM0EwQ0E5RTA4Cis6MTA1QUUwMDA2ODkyMTBDN0FGMkFCNkEzMkEyQ0ZDNUJGRkIzRDIzMDUyCis6MTA1QUYwMDBEMTBGMDAwMDEzREJDNTAzQTMwMThDMzExRERCQjYwQ0Y1Cis6MTA1QjAwMDA4QzE0MERDQzAxMkNCNkEzNjNGRkRDMDBDMDIwRDEwRjk4Cis6MTA1QjEwMDBEQTIwNUJGRkNDQzAyMEQxMEZDMDIwRDEwRjAwMDAwMEU1Cis6MTA1QjIwMDA2QzEwMDREQjMwQzBEMDE5REJBMURBMjAyODMwMDAyMjUxCis6MTA1QjMwMDAzMDA3MDg0ODEyMDk4ODBBMjg4MjRDREMyMDBCODAwMEI0Cis6MTA1QjQwMDAxQkRCOUMwQzRBMTFBQkFBMjlBMjg0MDkyOTBCMjlBNkFDCis6MTA1QjUwMDA4NEQxMEYwMDZDMTAwNEMwNDExOERCOTUxN0RCOTcwQzQzCis6MTA1QjYwMDAyNjExQTcyNzI3NzAzMEE4NjYyNTYyODYwMDcxMDRBMzM2Cis6MTA1QjcwMDA1NTAwNDQxQTc1NDE0ODIyNjI4NDE1REJCODAyMzIwQjg1Cis6MTA1QjgwMDBDOTIyODgyMTE3REI5NDA4ODQxNDA3NDQwMTc1NDkwNTRDCis6MTA1QjkwMDBDODM0QzAyMEQxMEZEMTBGMDgwOTQ3MUREQkVCQzBCMkJDCis6MTA1QkEwMDA4RTIwMUZEQjgyMEUwRTQzQUZFQzJCQzRBMDBGRUUwQTNCCis6MTA1QkIwMDAyREU2MjQyQTYyODRDMDIwMEE5OTBCMjk2Njg0RDEwRjFECis6MTA1QkMwMDBDMDIwRDEwRjZDMTAwNERCMzBDMEQwMThEQjc4REEyMDk1Cis6MTA1QkQwMDAyNTMwMDAyMjMwMDcwODU4MEEyODgyNENEQzIwMEI4MDMwCis6MTA1QkUwMDAwMDg5MzE3MDlFMTIxQkRCNzIwQzRBMTFBQkFBMjlBMkVDCis6MTA1QkYwMDA4NDA5MjkwQjI5QTY4NEQxMEYwOUM5NTI2ODUzMjYwMEFDCis6MTA1QzAwMDA5MTA0MThEQjZEQzBBMTJGODExMjAwQUExQTBBRkYwMkFECis6MTA1QzEwMDAyRjg1MTIxRURCNjcwQzREMTFBRUREMkNEMjg0MEMyQ0FGCis6MTA1QzIwMDAwQjJDRDY4NEQxMEZDMDgxMUZEQjY0Qjg5QTBBMEE0N0I3Cis6MTA1QzMwMDAyRUYxMTIwMEExMDQwMDg4MUEwOEVFMDIyRUY1MTIxREEyCis6MTA1QzQwMDBEQjVDMEM0QzExQURDQzJCQzI4NDBCMkIwQjJCQzY4NDE0Cis6MTA1QzUwMDBEMTBGMDAwMDZDMTAwNERCMzBDMEQwMTlEQjU0REEyMDA3Cis6MTA1QzYwMDAyODMwMDAyMjMwMDcwOTg4MEEyODgyNENEQzIwMEI4MDZCCis6MTA1QzcwMDAwMDFDREI0RjBDNEIxMUFDQkIyQUIyODQwQTJBMEIyQTQ2Cis6MTA1QzgwMDBCNjg0RDEwRjZDMTAwNEMwNDExOERCNDkxNkRCNEIwQ0Y1Cis6MTA1QzkwMDAyNzExQTYyNjI2NjAzMEE4NzIyNTIyODYwMDYxMDRBMzVCCis6MTA1Q0EwMDA1NTAwNDQxQTc1NDEwODIyMjI4NDAyMzIwQkQxMEYwMDlDCis6MTA1Q0IwMDBDMDIwRDEwRjZDMTAwNDE1REJBNTAyNDkxNDI5NTYxMTIwCis6MTA1Q0MwMDAyNDUyMTIwMjA4NDMwRjg4MTFDMDczMDA4MTA0MDAzNjY5Cis6MTA1Q0QwMDAxQTAwODEwNEM3OEYwMDc3MUEwODc3MDMwNzQ0MDEwNjZBCis6MTA1Q0UwMDA0NDAyMjQ1NjEyRDEwRjAwNkMxMDA2NkUyMzAyNjAwMDhECis6MTA1Q0YwMDBBQzY0MjBBN0MwQTA4NTEwMTNEQjdFMTZEQjk0QzA0MEU3Cis6MTA1RDAwMDBBNkFBMkJBMkFFMEIxOTQxNjQ5MDY2Njg5MTVENjg5MkI5Cis6MTA1RDEwMDA1MjY4OTMzQzJBQTJBQTI4M0M3RjI4OEM3RjBBMEE0RDBECis6MTA1RDIwMDAyOTgwMDEyODgwMDAyQUFDRjIwODg4MTEwOTg4MDI3NUIwCis6MTA1RDMwMDA4OTQ2MkIzRDAxMjlCMDAwMkJCMDAxMDg5OTExMEI5OTIwCis6MTA1RDQwMDAwMjdBOTkzNEI4MzMyQTJBMDBCMTQ0NzI0OUIxNjAwMDBBCis6MTA1RDUwMDA0QTdGQkYwNzE1REI3RjYzRkZCOTAwMDAyNTNBRTg2MzgwCis6MTA1RDYwMDBGRkIxMDAwMDI1M0FFODYzRkZBOTAwMDAyNTBBNjQ2MzNCCis6MTA1RDcwMDBGRkExQzA1QTYzRkY5QzAwMDA3MDVGMDgyNTM0RkYwNTM3Cis6MTA1RDgwMDA4QzE0MkMzNEZFNzBBRjBCMEE4RDE0MkUzRDAxMkFFNEM2Cis6MTA1RDkwMDAwMTJERTQwMERBNDA1QkZENTA2M0ZGQTdEMTBGRDEwRjY2Cis6MTA1REEwMDA2QzEwMDQxQURCMDUxOURCMDIxQ0RCNkExQkRCNkJDMDAxCis6MTA1REIwMDA4MEMwNzE2MDAwMEQwMDAwMDAyMkE0MzBCMUFBMjk5Q0FGCis6MTA1REMwMDAxMDdCOTE1RjI2OTI4Njc5QzIxNTZFNjI2MkMwMjA2RDRCCis6MTA1REQwMDAwODBBQjEyMjAwMjEwNDAwNzQxQTc2NEJEQjYzRkZFRTNGCis6MTA1REUwMDAyMjkyODUwRDYzMTEwMzI1MTQ2NDVGQ0ZENjUwMDMyREQ1Cis6MTA1REYwMDA0MzZERDkwMzk4MjBCNDIyMDY0NDE0NkQ0OTIyOTgyMDlCCis6MTA1RTAwMDA5ODIxOTgyMjk4MjM5ODI0OTgyNTk4MjY5ODI3OTgyOEFFCis6MTA1RTEwMDA5ODI5OTgyQTk4MkI5ODJDOTgyRDk4MkU5ODJGMjIyQ0Q4Cis6MTA1RTIwMDA0MDYzRkY5NzFFREFFMzI3RTY4MDI3RTY4MUQxMEYwMDYzCis6MTA1RTMwMDBDMDIwNjNGRjgzMDAwMDAwNkMxMDA0QzA2MkMwNDExMkU4Cis6MTA1RTQwMDBEQURFMUFEQURBMTNEQjQ1MkFBMDAwMjMzMjJEMTlEQjU5Cis6MTA1RTUwMDAzRjJCQUNGRTI5OTJBRTZFQTMwMjYwMDA4RTA5MEU0MDZECis6MTA1RTYwMDAyRDFBQzJDMkNEMEVEQzM5MkMyNTE2NjRCMDg5NUJGRjE5Cis6MTA1RTcwMDA5RTE1REIzQjFBREFFNTJCM0FFODBBM0EwMTU4MDU3NjFCCis6MTA1RTgwMDAyQjIxMTYwQUJCMjhEM0EwMkI1NjAwNTgwNThEOEI1MDBBCis6MTA1RTkwMDAwQUJCMDgyQTBBMDA1ODA1OEMxNURCMzIyRDIxMDIyQzdBCis6MTA1RUEwMDAzQUU4MEMzQzI4MDRERDAyMkQyNTAyOUM1MDU4MDU4NDVDCis6MTA1RUIwMDA4QjUwQUFCQkMwQTE1ODA1ODQxQ0RCMkIyRDIxMDIwQ0UyCis6MTA1RUMwMDAzQzI4MDZERDAyMTNEQjI5MkQyNTAyOUMzMDU4MDU3Qzc5Cis6MTA1RUQwMDA4QjMwQUFCQkMwQTI1ODA1N0MyQTIxMDJDMEI0MEJBQUYxCis6MTA1RUUwMDAwMjBBMEE0RjJBMjUwMjU4MDU5MEQxMEYyNDI0MjNDMzAxCis6MTA1RUYwMDBDQzJDMjUxNjYzRkY3NjAwMThEQjIxMUNEQjFEMTlEQjdCCis6MTA1RjAwMDAxRTFCREIxQzE3REFGMDg1MjAyRTBBRkQxRkRCMUQyRDYyCis6MTA1RjEwMDAyMDJFMjRGNDdBMjRGNDdFMjRGNDgyMEVERDAxMjRGNDZECis6MTA1RjIwMDA4NjJFMEFGNzA3NTUyODA2REQwMkMwNzUwRUREMDEwNTJECis6MTA1RjMwMDAwNTA2QUI1QkE5NTlDMEU4QUM1QzI0QzRBQjBFREQwMjFFCis6MTA1RjQwMDAyN0M0QUMyRTBBREZBODU1MjdCNEVDMEVERDAxMjRCNDFCCis6MTA1RjUwMDBFQkMyRTAyNzk0MkMwRUREMDIyNDk0MkIyRTBBODAwRDM4Cis6MTA1RjYwMDAwRDQ2Mjc1NDZDMjQ1NDZCMEVERDAyMkQyNDJFNjNGRTQ3Cis6MTA1RjcwMDBGQzAwMDAwMDZDMTAwNDJBMEEzMDJCMEEwMzVCRkY0RDYyCis6MTA1RjgwMDAxMkRBRjNDMzkwMjkyNjE2QzNBMUMwQjNDMDhBMjgyNjBCCis6MTA1RjkwMDAxNzVCRkY0OEMwM0NDM0IxMkIyNjE2MUFEQTg3MkFBMDJDCis6MTA1RkEwMDAyMDIzMjYxNzY0QTA3OUMzQTJDMEIxNUJGRjQyQzNBMjFECis6MTA1RkIwMDBDMEIxNUJGRjQwQzNDMjJDMjYxNkMyQUZDMEIxMjMyNkJFCis6MTA1RkMwMDAxNzVCRkYzQ0MyOEYyODI2MTZDMEZFMkYyNjE3QzJFMkExCis6MTA1RkQwMDAyRTI2MTYyQTBBQTFDMEIxQzBEODJEMjYxNzVCRkYzNTgwCis6MTA1RkUwMDAyQTBBQTEyQTI2MTZDM0E2QzBCM0MxOTIyOTI2MTc1Qjg2Cis6MTA1RkYwMDBGRjMxQzNDNjJDMjYxNkMxQjMyQTBBQTIyQjI2MTdDMDBFCis6MTA2MDAwMDBCMzVCRkYyQzI5MEFBMjI5MjYxNkMxODUyODI2MTdDMkIwCis6MTA2MDEwMDBGQjJGMjYxNkMwRTcyRTI2MTcxRERBREEyRDI2MTBEMTAzCis6MTA2MDIwMDAwRkMzQTJDMEIzNUJGRjIzNjNGRjgyMDA2QzEwMDQxQzhDCis6MTA2MDMwMDBEQUE0MUJEQTkxMThEQUQ0MTdEQUQ1MTZEQUQ1MTVEQTFDCis6MTA2MDQwMDBENUMwRTBDMEQ0MTREQUEwMUZEQTVDQzAyODhGRjA2RDkwCis6MTA2MDUwMDAyQTM2REFDMEQ5QzA3QzVCMDIwRkM5MEMxQ0RBOUEwQzU0Cis6MTA2MDYwMDA5QzI4QThDM0E2QzIyQTM2ODAyQTI1ODRBNEMyQTdDQzBECis6MTA2MDcwMDAyRDI0OEMyQjI0OEEyQjI0ODcyRTI0OEJCMUJCMkUzNkU3Cis6MTA2MDgwMDA5RjJDMzY5RTJDMzY5REIxQUMxQ0RBN0IxQkRBQzNDMDJDCis6MTA2MDkwMDAyODZEMkEzM0RBQzBEOUMwN0M1QjAyMEZDOTBDMUNEQTI4Cis6MTA2MEEwMDA4OTBDOUMyOEE4QzNBNkMyMkEzNjgwMkIyNTg0QTRDMkFBCis6MTA2MEIwMDBCMUJCQTdDQzJEMjQ4QzJFMjQ4QjJBMjQ4QTJFMzY5RjZDCis6MTA2MEMwMDAyQzM2OUUyQzM2OURCMUFDQzA3OTE5REE3OTFCREFCNTI1Cis6MTA2MEQwMDAxM0RBQjMxQURBQjMxOERBQjQxNERBN0ExNkRBQjQwNEMzCis6MTA2MEUwMDBGNDI4MTJEQUIzMDQ2NjBDMDQwNTA2QTI1MkE4NThBQUQyCis6MTA2MEYwMDA1QUEzNTM5QjMwMjlBNTAwMjc4NDhBQzA5MUMwQTUyQUEyCis6MTA2MTAwMDA4NDhDMjk4NDhCMTdEQUFDMThEQUFCQTc1NzI2MzYxRDk2Cis6MTA2MTEwMDAyNjM2MUUyRTM2MUYxNkRBQTkxM0RBQTlBNjU1MDQzMzIxCis6MTA2MTIwMDAwQzI4MjZDODJFNzUwMDJENTRBQzJFNTRBQjJFNTRBQTI0Cis6MTA2MTMwMDAyMzI2RTYyMzI2RTUyRTI2RTdEMTBGMDA2QzEwMDYxMzUyCis6MTA2MTQwMDBEQTg3MTdEQTgyMjQ3MjNEMjIzMjkzN0YyRjBCNkQwODkzCis6MTA2MTUwMDAwNTI4MzI5MzdGOEYwMjYzRkZGM0MwQzRDMEIwMUFEQTAwCis6MTA2MTYwMDAxNkMwNTFEOTQwMDQ1OTM5MjlBNDIwNkU0NDAyMEJCNUY4Cis6MTA2MTcwMDAwMkMzMjgxRURBMTFEREIwMjVFNDIyMDUyRDM5MkRFNEY1Cis6MTA2MTgwMDAyMUMwNTAxRURBOTAxOURBODAxOERBODAxNkRBODIxREUyCis6MTA2MTkwMDBEQThFOTQxMDJBNzI0NTE3REE0QzZEQTk0QkQ0NTBCMzlECis6MTA2MUEwMDA1NTdBNUIxN0RGNTA3NTZCMDcxRkRBMDM4RkYwMEY1RkFGCis6MTA2MUIwMDAwQzEyREE0NDAyRjIyOEFFMjIyMkQ2ODFENTQwMTNEQTNDCis6MTA2MUMwMDA0MTc0NkIwNzE1RDlGRDg1NTAwNTQ1MEMwMzUzMjhCMTYzCis6MTA2MUQwMDA0NUE3M0ZBODMyQTkzMzIyMzY5RDIyMzY5RTI0MzY4MDE5Cis6MTA2MUUwMDAyQjM2OUYyQkY0OEIyQ0Y0OEMxNERBNUMyNDQyNERDMDlDCis6MTA2MUYwMDAzMDA0MTQxNEM4NEM2RDA4MDZCMTMzMDQxNDE0Qzg0MjlBCis6MTA2MjAwMDA2M0ZGRjIwMDE1RDlFQUM0NDAwMDMxMDQxQUQ5RUJDMDhCCis6MTA2MjEwMDBEMTkzQTIwMEREMUFDMTM4QjBERDlEQTMxOERBNTAyQjRFCis6MTA2MjIwMDA4MjREMjk4MjRFMjlBNTFDMjg4MjUzN0E4NzFFMkM1NDIwCis6MTA2MjMwMDAwMDhFMTA2RkU0NUQxMkQ5RTAyRjIxMUQyMzIxMUMyRjQ5Cis6MTA2MjQwMDAyNTFCMDQzMzBDMjMyNTFDMjMyNTFBRDEwRkMwNjIxOEVCCis6MTA2MjUwMDBEQTNGODg4MDdFODdEOTg5MTAyNjU0MDA2Rjk0MTkxQkY1Cis6MTA2MjYwMDBEOUQ2MkFCMTFDMEExQTE0MDRBQTBDMkFCNTFDMkFCNUJDCis6MTA2MjcwMDAxRDJBQjUxQTJBQjUxQkQxMEYxQkQ5Q0YyQUIxMUMwQTZBCis6MTA2MjgwMDAxQTE0MDNBQTBDMkFCNTFDMkFCNTFEMkFCNTFBMkFCNTU4Cis6MTA2MjkwMDAxQkQxMEYwMDFDRDlDOTJCQzExRDJEQzExQzJCQzUxQjI3Cis6MTA2MkEwMDAwM0REMEMyREM1MUMyREM1MUFEMTBGMDA2QzEwMDYxOTZECis6MTA2MkIwMDBEOUMyMTREQTI2MTJEQTI5MTVEQTQ0QzczRkMwRTAyRTEzCis6MTA2MkMwMDA1NkE4MkU1NkE5MkU1NkFBMkU1NkFCMjMyNjI5MThEOUUzCis6MTA2MkQwMDBFQURCMTAxQ0RBM0VDMEQ0MkE0MjQ1MkQxNjAxOUMxMDgwCis6MTA2MkUwMDAwMEIwODkwQTg4MEMyODk2MDA1QkZGOTQyQjIyRTMxOEUzCis6MTA2MkYwMDBEOUIyMEI1QjE0OUI4NDJBMjJFNDhCODRCMUFBMEE1QTdDCis6MTA2MzAwMDAxNDBCQUEwQzlBODUyOTIyRTUwOTU5MTQ5OTg2MkYyMjgzCis6MTA2MzEwMDBDRDBGNUYxNDlGODc1QkZGNDU1QkZGMTYyMzQ2M0JDMTk0Cis6MTA2MzIwMDBCMDFERDlBNTFDREEwMzJBRDEwMjJDNDYzQTBCQUEwMkM5Cis6MTA2MzMwMDAwQTBBNEYyQUQ1MDI1ODA0N0M1QkZFQkY1QkZFOThDMDU4Cis6MTA2MzQwMDA1MEMwQjAxNkQ5OUIxNEQ5QTMxN0RBMTJDMEMwQzczRUVCCis6MTA2MzUwMDA5MzEyMkMyNjJEQzAzMDYwMDA0MzAwMDAwMDdGOUYwRjU5Cis6MTA2MzYwMDBCMTU1MDkxOTE0NjU5RkY0QzA1MDBBQTkwMjdGQTdFRjFGCis6MTA2MzcwMDAxOEQ5OEZEQTUwMDg1ODBBMjg4MjJDMkIwQTAwMEI4MDczCis6MTA2MzgwMDAwMDAwNTEwNEQyQTBDMDkxQzdBRjAwOTkxQTBBOTkwMzI2Cis6MTA2MzkwMDA5OTEyQ0UzMzY0MjA2N0QzMjAyQjIwMDc5NTEzOEMxMkRCCis6MTA2M0EwMDAyQTYyODI3Q0E4NUYxOEQ5ODEwODU4MEEyODgyMkNEQUQwCis6MTA2M0IwMDA1MDBCODAwMEQyQTA2NDNGREE4QTMxMEE4QTE0MDRBQTAyCis6MTA2M0MwMDAwMUM4Mjk4QjIxMEI4QjE0MDRCQjAxN0JBOTQ1RERBMERGCis6MTA2M0QwMDA3QTdCMDgxREQ5NzkyREQyMDAwREFEMENEQjMwMTlEOThGCis6MTA2M0UwMDA3MzFBRDlCODI4MTIwMzBBREEyODA4OEMwMjFERDlGNUM1Cis6MTA2M0YwMDAwOTg4MEEyODgyM0MwREFBMDgwQjgwMDA2NTJGOTdEM0Q0Cis6MTA2NDAwMDAyMEMwQjA2M0ZGOTdDQjUzQjE1NTAwNTAwNDBBMDkxOTVGCis6MTA2NDEwMDA2M0ZGNDkwMERBQjA3QjdCMDcxQUQ5Njc4QUEwMEFCQTAyCis6MTA2NDIwMDAwQzFCRDlBODhDMzEwQkFCMjgwQzhBMTQxQ0Q5RTZBQ0Y4Cis6MTA2NDMwMDBCQjFDRDlFNTA0QUEwMTJCQzY4MTYzRkY5MDdGQTdDN0M3Cis6MTA2NDQwMDA2M0ZGNjIwMDZDMTAwNDI3MjIxRUMwODAwOEU0MzExQjI5Cis6MTA2NDUwMDBEOTU4MDAwMjAwMkFCMjgyMTlEOTU4MDAzMTA0QzA2MTBCCis6MTA2NDYwMDAwMDY2MUEyOTkxMDIwQTZBMDIyQUI2ODIwOUU0MzExNUU1Cis6MTA2NDcwMDBEOUIzMEMzODExQTg1MzI4MzI4MjI0MzI4NDJBOENGQ0Q4Cis6MTA2NDgwMDA3ODQxMTAyOTIxMDIyQTM2ODI5N0EwMDk2OTAyMjkyNTFDCis6MTA2NDkwMDAwMkQxMEYwMDJCMjEwMjJDMzI4NTBCNkIwMjJDQ0NGQzdECis6MTA2NEEwMDAyQzM2ODI5N0MwMkIyNTAyRDEwRjAwMDA2QzEwMDRDMDNGCis6MTA2NEIwMDBFNzFERDkzQjFDRDkzRDBENDkxMUQ3MjA4QjIyOEEyMERECis6MTA2NEMwMDAwQjRCMEJEMkEwMDdBODBDOUI3MjI4OENGNEM4MzQ2RjFFCis6MTA2NEQwMDA4RTAyNjAwMEEyMUZEOTMzQTI5OEFGN0I3OEIzMzRDOTczCis6MTA2NEUwMDAzREMwODFDMEYwMDI4RjM4MEYwRjQyQzlGQTJDRDY3RTEyCis6MTA2NEYwMDBENTIwNkQ0QTA1MDAzMDg4MDA1MDhDODg3MDA4OTgwOEI3Cis6MTA2NTAwMDA3OEIxNkNEMkEwOTg3MEQxMEZDMEYwMDM4RjM4N0ZFMEMzCis6MTA2NTEwMDBERTYzRkZEODAyN0IwQ0FGQkIwQjk5MEM2NDMwNDZEODBFCis6MTA2NTIwMDAzMEMwRjFDMDUwMDJGNTM4MDUwNTQyNjQ1MDc5MkNENkQwCis6MTA2NTMwMDA3RTBCMzYxMjJGNkMxMDBGNEYzNjZERkEwNTAwODA4OEQ3Cis6MTA2NTQwMDAwMDIwOEMwNjQ0MENDMDgxMjUwQTAwMDNCMjA4MjM3QzdECis6MTA2NTUwMDAwQzAzODUzODA1MDU0MjY0NTA1OTJDRDY3RTZENEEwNURBCis6MTA2NTYwMDAwMDIwODgwMDMwOENEMkEwQTc5OEJDODg5ODcwRDEwRkVBCis6MTA2NTcwMDBEMkEwQkM3OTk5NzBEMTBGRDIzMDJCQUQwOEMwRjFDMDM4Cis6MTA2NTgwMDA1MDBCRjUzODA1MDU0MkNCNTUyQ0Q2N0UwODNGMTRDMTdCCis6MTA2NTkwMDA2MDBGNjYwQzA2NDYzNkQzMEY2RDZBMDUwMDIwODgwMDMyCis6MTA2NUEwMDBCMDhDODI3MDYzRkYyRDAwQzA1MDAzRjUzODc1RTA4MDE5Cis6MTA2NUIwMDA2M0ZGN0EwMEMwNjAwMjg2Mzg3NkUwQTA2M0ZGOUEwMDJECis6MTA2NUMwMDBDMDUwMDNGNTM4NzVFMEMzNjNGRkJEMDA2QzEwMDRENkZFCis6MTA2NUQwMDAyMDY4NTIwRjY5NTMyNERBMjBEQjMwREM0MDU4MDBGMDg5Cis6MTA2NUUwMDBEMkEwRDEwRkRBMjBEQjMwREM0MDU4MDBFRDlBMjQyNDExCis6MTA2NUYwMDAyNDBFQzAyMTIyNjQwRkMwMjBEMTBGMDBCODNCQjA0QzQ0Cis6MTA2NjAwMDAyQTJDNzQ4OTI0MkQyMDBFMkUyMDBGQTREREIxRUUyRTBECis6MTA2NjEwMDAyNDBGQjBERDJEMjQwRTI4OTAwNzJEOTAwM0E0ODhCMDAwCis6MTA2NjIwMDA4OEIxREQyRDk0MDMyODk0MDc1QkZGQTA2OTUxMURDMDNDCis6MTA2NjMwMDBFMDgyMjQyQTYwMEYxOEQ5NjYyQTI0MDMyOTYwMEU4RjZECis6MTA2NjQwMDAyMDI5MjQwNzA4RkYwMjlGMjA5RTY0RDEwRkMwMjBEMTdCCis6MTA2NjUwMDAwRjAwMDAwMDZDMTAwNDk0MjMxOUQ5NUVDMEIzMDgzQUVGCis6MTA2NjYwMDAxMTBCQUEwMjk5MjAxOUQ4RDI5QTIxMTZEOEQwQzA1MDVECis6MTA2NjcwMDAyODkyOUQyNTY0QTIyODhDMTgyODk2OUREMTBGMDAwMDkxCis6MTA2NjgwMDA2QzEwMDQyODIwNjZDMDM4MjMyNDA2Qjc4ODI4MjQ2NkE2Cis6MTA2NjkwMDBEMTBGMDAwMDZDMTAwNjAzNUEwQzBEMzYxMTBENUMxMTYxCis6MTA2NkEwMDBEODIwOEIyMjgyMjEwQ0JCMEMwNjU1MEY5QjgyMDIzMjE0Cis6MTA2NkIwMDAwQjkyODExM0Q4QkNEOTIwQTM4RjY0NTA1MzFDRDhCODM3Cis6MTA2NkMwMDBDMEQ3MUJEOEI5QTI1NkMwRTEyOTBBMDAwNEU5MzgwOThECis6MTA2NkQwMDAwOTQyNzZGMzRBMDQ0MzAyQzk5RTJCQzY3RTZEQUEwNTgxCis6MTA2NkUwMDAwMDIwODgwMDMwOEM4OTgxQTk1OTA5RkEwQzY0QTA3OUFFCis6MTA2NkYwMDA5OTgxOEE4MkM4QUREMjkwRDEwRkMwNjAwMkU2Mzg3NjA3Cis6MTA2NzAwMDBEMERBNjNGRkQ0QzAyMEJDODk5OTgxOTk4MDkyODJEMTZDCis6MTA2NzEwMDAwRjdGMjMwNDI5MkRGODk5ODE2NUJGRDk2M0ZGRTUwMDE4Cis6MTA2NzIwMDAwMjhGMENBM0ZGMEYzMzEyOTMxMDAzQUEwQ0QzNDBDQjlDCis6MTA2NzMwMDA5RTJCQzY3RTg2MTA2RDZBMDUwMDIwODgwMDMwOENCQ0JBCis6MTA2NzQwMDA4MjI5MEEwMDA0RjMwODI0MEEwMTAzNDkzODA5MDk0MjhFCis6MTA2NzUwMDBDQTk4MkJDNjdFNkRBQTA1MDAyMDg4MDAzMDhDMEY1OTgwCis6MTA2NzYwMDAwQ0E5ODlCQzk5OTk4MTYzRkY4N0JDODk5OTgxNjNGRkQyCis6MTA2NzcwMDA4MEMwNjAwMkU2Mzg3NkQwQkE2M0ZGQjRDMDcwMDI0N0NBCis6MTA2NzgwMDAzODc3RDBEMDYzRkZDQTAwNkMxMDA0MTREODk1QzE1MjdBCis6MTA2NzkwMDBBNDI0Q0EzMDI4MjIxRDczODExQjI5MjEwMkNEOTUyQUU5Cis6MTA2N0EwMDAzMDAwNzVBOTEyREEyMDAzM0IwMjJDMzAwNzJEMEEwMkIzCis6MTA2N0IwMDA1ODAxQzI2NTNGREREMTBGMkIzMDA3MDNCQjBCREFCMEE4Cis6MTA2N0MwMDA3NEIzMDIyQUJERjhEM0EwNjNGRkM2MDA2QzEwMDQyOTdECis6MTA2N0QwMDAyMDA2QzA3MDZFOTc0MTI5MjEwMkMwOEYyQTIwMTRDMDY0Cis6MTA2N0UwMDBCNjJCMjQwNjA2QUEwMjJBMjQxNDc5ODAwMjI3MjUwMjQxCis6MTA2N0YwMDAyQTIyMUUyQzIyMUQ3QUMxMEVDOEFCREEyMERCMzAyQ0Q3Cis6MTA2ODAwMDAwQTAwMDMzRDAyNUJGODE0NjQ1MDc1MkQyMTAyMEQwRDQyCis6MTA2ODEwMDA0Q0M5RDNDMDIwRDEwRjAwMDAyRTlDRkI2NEUwODIyRjE2Cis6MTA2ODIwMDAyMTAyMEYwRjRDNjVGMDkxMUFEODYyMUNEODYwMjlBMjgyCis6MTA2ODMwMDA5RUMwOEE3OThCNUQyQkMyMjY2OEIwMDQ4RDIwN0JEOURGCis6MTA2ODQwMDA1MjI5QTI5REMwRjM2NDkwNEE5NzkwMUREODczMkUyMUJGCis6MTA2ODUwMDAwNDlEOTYwOEVFMTEwRkVFMDI5RTk3OUU5MTE4RDg2RjM4Cis6MTA2ODYwMDBDMEU1MjdDNEEyMkUyNDA2MkJBMjlEMkYyMTAyMkJCQ0ZCCis6MTA2ODcwMDAzMDA4RkYwMjJGMjUwMjJCQTY5REMwMjBEMTBGMDAwMDVCCis6MTA2ODgwMDAwMDJGMzAwMDY4RjkzOERBMjBEQjMwREM0MDU4MDA0NDUzCis6MTA2ODkwMDA2M0ZGNzcwMDAyMkEwMjJCMEEwNjU4MDBEMzIyMEEwMDVGCis6MTA2OEEwMDBEMTBGNjU1MDEwMjgzMDAwNjg4OTI0MDIyQTAyMDMzQjZBCis6MTA2OEIwMDAwMkRDNDA1ODAwM0JDMDIwRDEwRkQyNzBEMTBGMDAwMDQ1Cis6MTA2OEMwMDAyQTJDNzQwMzNCMDIwNDRDMDI1QkZFRjg2M0ZGM0IwMDdFCis6MTA2OEQwMDBEQjMwREM0MDJBMkM3NDVCRkVGNUMwMjBEMTBGMDAwMEI5Cis6MTA2OEUwMDA2QzEwMDRDODNGODkyNjg4MjlBMzk5OTkyNjA5ODgwQzI5Cis6MTA2OEYwMDAwODA4NDgyODI1MjVDQzUyQzAyMEQxMEZEQjQwMkEyQzdGCis6MTA2OTAwMDA3NDVCRjkzREQyQTBEMTBGNkMxMDA0RDgyMEQ3MzA4MjJGCis6MTA2OTEwMDAyMjBENDUxMTA1MjIwQzkyODI2NDIwNzQwNzQyMEIxMzRDCis6MTA2OTIwMDBEODIxRDQyMEEzODM3MzIzMDIyNDJERjg4NTgwNzQ1MUE5Cis6MTA2OTMwMDA0Q0JDODJDMDkwNkQwODE2MDA0MDg4MDA3MDhDNzczOTdFCis6MTA2OTQwMDAwM0Q3MjBDMDkxODY4MDc0MzkwMUQ0MjA3NDYxMDI2MzFBCis6MTA2OTUwMDBGRkUyQ0E5OEMwOTdDMDQxMUJEOEEwQzBBMDBCOEIwQzA3Cis6MTA2OTYwMDAwQjRBMzgwQTBBNDJDOUFBMUREODBFMUNEODBGMkNENkM5Cis6MTA2OTcwMDA3RUMxNDBEMzBGNkQ0QTA1MDAyMDg4MDAzMDhDOTc4MDdGCis6MTA2OTgwMDBEMjcwRDEwRkJDOEZDMEUwMEY0RTM4N0U5MEUyNjNGRjEzCis6MTA2OTkwMDBENkJDODI5MjgxOTI4MEMwMjA5MjgyRDEwRjAwMDAwMEVBCis6MTA2OUEwMDA2QzEwMDZDMEQ3MUNEN0ZFMUJEODAwMEQ0OTExRDcyMDhDCis6MTA2OUIwMDAyRTIyMUYyODIyMUQwRTRFMEJEMjgwMDc4QTBDMkU3NjA3Cis6MTA2OUMwMDAxRjJBQUM4MEM4MzQ2RkFFMDI2MDAwQ0IyRjBBODAxQTM5Cis6MTA2OUQwMDBEODA0QTI5RUFBN0E3RUEzM0ZDOTNGQzBFMUMwNTAwMjVDCis6MTA2OUUwMDBFNTM4MDUwNTQyQ0E1NTJCQzY3RURCMjBEMzBGNkQ0QTFDCis6MTA2OUYwMDAwNTAwMzA4ODAwQjA4QzJFNzIxREFFOUUwRUE1MEM2NDcyCis6MTA2QTAwMDA1MDg2RDI4MDJFNzYxREMwOTEyOTg0MDNEMTBGQzA1MEFDCis6MTA2QTEwMDAwM0U1Mzg3NUQwRDM2M0ZGQ0QxNUQ3RjEwMjdFMENBNTAxCis6MTA2QTIwMDBFRTY0MzA1MUMwQTEyNTBBMDAwMkE1MzgwMzNBMDIwNUUwCis6MTA2QTMwMDAwNTQyNjQ1MDkyMkJDNjdFMEUzNTEyOTUxMDI1NUMxMENGCis6MTA2QTQwMDAwNTQ1MzZEMzBGNkQ1QTA1MDBBMDg4MDAyMDhDQzBBMUUzCis6MTA2QTUwMDBBM0UyQzA1MDIzRkE4MDAzNzMwQzAzQTUzOEFGNzMwNTdCCis6MTA2QTYwMDAwNTQyNjQ1MDcyMkJDNjdFODUxMDA1NDUwQzZENUEwNTkzCis6MTA2QTcwMDAwMDIwODgwMDMwOENEMjgwQzBBMTBFOUIwQ0FCN0JBRjc1Cis6MTA2QTgwMDBCQjJCNzYxRDJBODQwM0QxMEZEMjgwQzBDMUFGN0QyREQwCis6MTA2QTkwMDA3NjFEMkM4NDAzRDEwRjAwRDIzMDJFOEQwOEMwRjFDMDlBCis6MTA2QUEwMDA1MDBFRjUzODA1MDU0MkNCNTkyQkM2N0UwQTNGMTRDMTVFCis6MTA2QUIwMDA2MDBGNjYwQzA2NDYzNkQzMEY2RDZBMDUwMDIwODgwMDBECis6MTA2QUMwMDBFMDhDMjI3MjFENjNGRjAzQzA2MUMwNTAwMzY1Mzg3NUZFCis6MTA2QUQwMDBEODAyNjNGRjYyNjNGRjVDQzA1MDAyQTUzODc1RDA4NzlGCis6MTA2QUUwMDA2M0ZGODEwMEMwNjAwM0Y2Mzg3NkQwQkY2M0ZGQjkwMDUyCis6MTA2QUYwMDA2QzEwMDQyQTIwMTUyOTIwMTYxNEQ3QUYwQTk5MENDQjQ0Cis6MTA2QjAwMDA5RDJFMjAwQjA0RUQwOTJCRDExQzhGMjgwOUJDMzZBQzFGCis6MTA2QjEwMDBBQTBDQkIwQzJCRDUxQzBBMEE0NzJBMjQxNUNBQUY4QjFBCis6MTA2QjIwMDA0Mzg5NDJCMEE4MDA5MTA0MDA4ODFBQThGRjBGQkIwMjU1Cis6MTA2QjMwMDA5QjI3OEYyNjBGQjgwQzc4M0IxQUMwMjBEMTBGMDAwMDdFCis6MTA2QjQwMDAyOTIxMDJDMEEyMEE5OTAyMjkyNTAyQzAyMUQxMEYwMEUxCis6MTA2QjUwMDA4QjI3NjNGRkRDMkJEMTFDMENBQTBDMEEwQTQ3MkEyNEMyCis6MTA2QjYwMDAxNUFDQkIyQkQ1MUNDOUFFOEI0MzhDMjg4RjQyQjBBRDY2Cis6MTA2QjcwMDAwMEYxMDQwMEREMUFBRENDMENCQjAyOUIyN0RBMjBCNzc0Cis6MTA2QjgwMDBFQjU4MDAxOUMwMjFEMTBGOUYyNzYzRkZFRjAwMDAwMEQxCis6MTA2QjkwMDA2QzEwMDQyODIwM0M2NDMwNDcwNTMwNjAwMDA3M0UwMTNCCis6MTA2QkEwMDAwNTNFQjE1NjA3NjUzOTA1NDkyOEM3N0ZBOTMzMDMwNjU1Cis6MTA2QkIwMDA0MTA3NjYwM0IxNjYwNjA2NDFBNjMzN0U4NzFFMjIyMTgxCis6MTA2QkMwMDAyNTI5MUFGQzczMkIxNTAyMzgwQzA5ODE2MDAwMDYzRTNBCis6MTA2QkQwMDAwMTAyM0VCMTI0MDY0MjM5MDMyMjBBRDEwRkQyMzBEMTNDCis6MTA2QkUwMDAwRkMwNTE2M0ZGQzAwMDAwNkMxMDA0MjcyMjFFQzA4MDNDCis6MTA2QkYwMDAwOEU0MzExREQ3NkYwMDAyMDAyQ0QyODIxQkQ3NkYwMDMyCis6MTA2QzAwMDAzMTA0QzA2MTAwNjYxQTJCQjEwMjBDNkMwMjJDRDY4MkQyCis6MTA2QzEwMDAwQkU0MzExOUQ3RjIwQzNBMTFBQTkzMjgzMjgyOTc4MEVCCis6MTA2QzIwMDAyNTMyODIyNDMyODRCNDU1MjUzNjgyNzU0MTBBMjkyMUMxCis6MTA2QzMwMDAwMjA5NjkwMjI5MjUwMkQxMEYyQTIxMDIyQjMyODMwQTc3Cis6MTA2QzQwMDA2QTAyMkIzNjgyMkEyNTAyRDEwRjAwMDA2QzEwMDQxOTJCCis6MTA2QzUwMDBENzYzMjcyMjFFQzA4MDA5NzcwMjA4RTQzMTFERDc1NDZDCis6MTA2QzYwMDAwMDAyMDAyQ0QyODIxQkQ3NTQwMDMxMDRDMDYxMDA2NkEwCis6MTA2QzcwMDAxQTJCQjEwMjBDNkMwMjJDRDY4MjBCRTQzMTE5RDdENzM3Cis6MTA2QzgwMDAwQzNBMTFBQTkzMjgzMjgyOTc4MDI1MzI4MjI0MzI4NENBCis6MTA2QzkwMDBCNDU1MjUzNjgyNzU0MTBCMkEyMTAyMEE2QTAyMkEyNTNCCis6MTA2Q0EwMDAwMkQxMEYwMDJCMjEwMjJDMzI4MzBCNkIwMjJDMzY4Mjc3Cis6MTA2Q0IwMDAyQjI1MDJEMTBGMDAwMDAwNkMxMDA0MUJENzNEMEMyQUJECis6MTA2Q0MwMDAxMUFCQUEyOUEyODZCNDM4Nzk4QjIyMUJENzNBMTlEN0RGCis6MTA2Q0QwMDA2MTBCMkIwQTJCQjJBMzA5MjkwODY4QjAwMjc0QjkwRDA1Cis6MTA2Q0UwMDAyOTlEMDEyOTkwMUY2RTkyMDgyMkEyODVEMTBGQzAyMEY0Cis6MTA2Q0YwMDBEMTBGQzg5MkMwMjBEMTBGREEyMDVCRUYzNUMwMjBEMTcwCis6MTA2RDAwMDAwRjAwMDAwMDZDMTAwNDE0RDcyQTI4NDI5RTE5RDcyN0MwCis6MTA2RDEwMDA2Rjg4MDI2MDAwQkEyOTkyMjY2ODkwMDc4QTIwMDlBQTIzCis6MTA2RDIwMDAwQzY1QTBBQzJBNDI5REMwREM2NEEwQTQyQjIwMEMxOUU5Cis6MTA2RDMwMDBENzIxMENCQzExQTRDQzJFQzI4NjA5QjkwQTdFRDMwMjdECis6MTA2RDQwMDA2MDAwOUEyOTkyQTM2ODkwMDc4RDIwMDlERDBDNjVEMDE4Cis6MTA2RDUwMDA4QzI1QzI4NTY0NTA4NjJEMjEwNEMwMzA2RUQ4MEQyQzQwCis6MTA2RDYwMDAyMDY2QjhDQzBDMEM0NzJDMjQ2NjY1QzA3QjFDRDc5Q0Q1Cis6MTA2RDcwMDAxOEQ3MjgxQUQ3MUUxOUQ3MkYxREQ3MjRDMEU0OUU1MTIzCis6MTA2RDgwMDA5RDUwOEYyMDkzNTc5MzU1OTk1MzlBNTY5QTU0MDhGRkM0Cis6MTA2RDkwMDAwMjFBRDczQTlGNTI4ODI2OUY1QTlFNTk5RDU4OTM1RTUxCis6MTA2REEwMDA5QzVEOTM1QzlBNUIwODA4NDgwNTg4MTE5ODVGQzBEODgxCis6MTA2REIwMDAxRkQ3MDgwQ0I5MTFBNDk5Mjg5Mjg1QUZCRjIzRjRDRjJGCis6MTA2REMwMDAyODhDNDAyODk2ODU4RTI2MkQyNDA2OUUyOUMwMjBEMTA5Cis6MTA2REQwMDAwRkNBMzNEQTIwQzBCNjVCRkY4NEM3MkZEMTBGQzkzQTgwCis6MTA2REUwMDBEQTIwNUJGRjgxQzcyRkQxMEZEQkQwNUJGRTFBMjMyNDkzCis6MTA2REYwMDA2NjJCMjAwQzYzRkY3NTAwQzcyRkQxMEZDNzJGRDEwRjUzCis6MTA2RTAwMDA2QzEwMDRDODVCMjkyMDA2Njg5NDFDNjg5NjA3QzAyMDkzCis6MTA2RTEwMDBEMTBGQzAyMEQxMEZEQTIwREIzMERDNDBERDUwMkUwQTRDCis6MTA2RTIwMDAwMDVCRkU2QUQyQTBEMTBGMkUyMDBDMThENkUxMENFRjI5Cis6MTA2RTMwMDAxMUE4RkYyOUYyODZDMDg4Nzk4Qjc1MUFENkRFMEFFQTc2Cis6MTA2RTQwMDAwQTJBQTJBMzY4QTAwNDhCMjA3QUI5NjQyM0YyODU2NDdECis6MTA2RTUwMDAzMDVFMUNENkU4MkEwQTgwMkQyMDY4MjkyMDY3MjgyMTY4Cis6MTA2RTYwMDAwNDBCOTkxMTA0ODgxMTA5ODgwMjA4REQwMkMwOTQyOEQ2Cis6MTA2RTcwMDA0QTEwMDhERDAyMThENkUwOTkzMTk4MzA4QjJCOUEzN0VBCis6MTA2RTgwMDA5RDM0MENCQjAyOUIzMkMwQzA5QzM1OUMzNjJBMkM3NEFFCis6MTA2RTkwMDBEQjQwQzBEMzE4RDZDRjI5RjI4NUE4RUUyOTlDMjAyQzQwCis6MTA2RUEwMDBFNENGMjlGNjg1MkQyNDA2REQ0MDVCRkRGQUQyQTBEMTgyCis6MTA2RUIwMDAwRkRBMjBEQkUwNUJGRjRDQzAyMEQxMEY2QzEwMEFENjRDCis6MTA2RUMwMDAzMDJBMjAwNjk0MTEyOEFDRjg2NTgzODcyQjIxMjJDMDM0Cis6MTA2RUQwMDBGMjJBMjEyNDY1NTAwODJBQUMwMTBBMEE0RjJBMjUyNEU3Cis6MTA2RUUwMDA3QUJCMDI2MDAzN0YyQzIxMDIwQzBDNEM2NUMzMTkyRTY3Cis6MTA2RUYwMDAyMjE1OEQzMkMwOTEwRUREMEM2NUQzOTA4ODM4MUVENkQ4Cis6MTA2RjAwMDBBQzY0ODM2QjhDMzdDMEI4QzA5NjBDQjkzOTk5MTRCNDkzCis6MTA2RjEwMDA5QTlBMTIwRDk5MTE5OTEzOEY2NzE4RDZBN0M5RkIyODUxCis6MTA2RjIwMDA4MDIxN0Y4MzE2OEIxNDJDMjIwMDJBMjAwQzVCRkY2MkE5Cis6MTA2RjMwMDBENEEwNjRBM0E4OEY2NzYwMDAyODAwMDAyQjIwMEM4OUQwCis6MTA2RjQwMDAxMjBDQkExMUFFQUEyQ0EyODYxREQ2OUE3QzlCM0UwREJECis6MTA2RjUwMDBCRDBBMkREMkEzNjhEMDA0ODgyMDdEODkzMDI0QTI4NTYzCis6MTA2RjYwMDA2NDQzNjQyNzIxMkUwN0Y3MzYwN0Y5MEM2RjlEMDFENzdDCis6MTA2RjcwMDBGMERBMjBEQjcwQzFDNDJEMjExRjVCRkYwNTg5MjY4ODU0Cis6MTA2RjgwMDAyN0REQTAwOTg4MEM3QThCMTc5QTEwNjAwMDA2QzA0MDk0Cis6MTA2RjkwMDA2M0ZGQ0MwMDAwREEyMDhCMTA1QkZFRDU4RDEwNjVBMjVDCis6MTA2RkEwMDA2N0MwRTA5RTQ4OEM2NDlDNDk4QjY1OEE2NjlCNEE5QUMwCis6MTA2RkIwMDA0Qjk3NDU4RjY3N0Y3MzAyNjAwMTIwQ0Q1MjlEMTBEQTk5Cis6MTA2RkMwMDAyMERCMzAyQzEyMDE1QkZFNzY4RDEwQzA1MUQ2QTA4RkQ1Cis6MTA2RkQwMDBBN0MwQzA4QTY4OTc0RDlBNEM4ODY5ODk2QTk4NEU5OTZCCis6MTA2RkUwMDA0RjhFNkE4QTY5QUU3RTc3RUIwMUIxQUE5RTZBOUE2OTcyCis6MTA2RkYwMDA4QjYwQzBBMDBCOEUxNDc3QjcwMUMwQTFDMDkxQzA4NDc0Cis6MTA3MDAwMDA5MzE1OUQxNzk1MTZDMEQwMjUyMDNDQzAzMDA4NTgwMTE3Cis6MTA3MDEwMDAwODkzMzhDMDgyMDgzMzEwMDg1QjAxMDUzNTQwMEI5RDhBCis6MTA3MDIwMDAzODA3REQxMDBCQUIxMDBFMTk0MDJBMjExRjA3OTkxMEVECis6MTA3MDMwMDAwM0REMDIwREJCMDIwNTUzMTAwOTMzMDIwQTU1MTEyOTY1Cis6MTA3MDQwMDAyMTI1MEEyQTE0MDkyOTE0MDQ5OTExMEE5OTAyMDkzM0RECis6MTA3MDUwMDAwMjhBMkIyOTIxMDQwQkFBMDIxQkQ2RTIwODk5MTEwOUU2Cis6MTA3MDYwMDA1NTAyMDg1NTAyMEJBQTAyOUE0MDg5MjA4ODE0MDg5OUYzCis6MTA3MDcwMDAxMTA5ODgwMjE5RDY2MzFERDZEQzA5ODgwMjk4NDE4QjU0Cis6MTA3MDgwMDAyQTkzNDY5NTQ3ODMxNTBEQkIwMjg1MTY4RDE3OUI0NEExCis6MTA3MDkwMDA4QTY1ODk2NkFBQ0FBOTdDNzdDQjAxQjFBQTA3RkIwQ0NECis6MTA3MEEwMDA5QzY2OUE2NTg4MjY4RTI5QUQ4Nzk3MjYwN0VFMEMwRTdBCis6MTA3MEIwMDAwRTQ4MkUyNTI1OUI2NzJCMjAwQzg3MTMxRUQ2M0QwQ0QyCis6MTA3MEMwMDBCOTExQUU5OTI4OTI4NUE3ODgyODk2ODUxN0Q2NDFDMDEwCis6MTA3MEQwMDA5MEE3QkIyOUI0Q0Y4NzE4NjNGRTNDMDA4QzYwQzBFMDRBCis6MTA3MEUwMDBDMDkxQzBGMEMwMzRDMEI4MkEyMTA0MjgyMDNDMDhBQUFFCis6MTA3MEYwMDAxMTBCOEIwMTAzODMwMTAzOUYzODBCOUIzOUMwMzIwOEFFCis6MTA3MTAwMDBGRjEwMDM4ODAxMDg5RTM4MEM4ODE0MDdFRTEwMEZFRTVDCis6MTA3MTEwMDAwMjAzODgwMTA4OTgzOTA1QkYxMDI5MjExRjBBQkIxMUY1Cis6MTA3MTIwMDAwNzg4MTAwOEZGMDIwQkFBMDIxOEQ2MzUwOTI5MTQwMzk0Cis6MTA3MTMwMDBBQTAyMkIyMTI1ODMyMDBCMkIxNDA0QkIxMTA4MzMxMTI5Cis6MTA3MTQwMDAwRkJCMDIwQjk5MDI4QjE0OEYyQTBCMzMwMjA4MzMwMkY4Cis6MTA3MTUwMDA4QjJCNjQ3MDg2ODg2ODk3NEQ5ODRDODc2OTg4NkE5M0YyCis6MTA3MTYwMDA0MTk5NDY5NzRFOTg0RkMwNzA3N0M3MDFDMDcxOUE0N0IyCis6MTA3MTcwMDAxOEQ2OUUwQjdDMTAwQ0VDMDIwOEY4MDI5ODQ0MThENjI2Cis6MTA3MTgwMDA5QjBDQkMwMjA4Q0MwMjlDNDAyQTIwMEMyOTVDRkVDMDRGCis6MTA3MTkwMDA4MDFGRDYwNzFDRDYwRjBDQUUxMTJCMjEyNEFDQUFBRjMyCis6MTA3MUEwMDBFRUIwQkI4RjEzMkNFMjg1MjhBNENGQUZDQzJDRTY4NUE0Cis6MTA3MUIwMDAyQTIyMTUyQjI1MjRCMUFBMkEyNjE1NjQ5MERCQzlEMkQwCis6MTA3MUMwMDA4RjI2MkUyMjA5MERGRjA4MkYyNjA2MEZFRTBDMEUwRTFECis6MTA3MUQwMDA0ODJFMjUyNTY1NTBFNEMwMjBEMTBGMDBDMDcwOTM0MTkyCis6MTA3MUUwMDA5RjQ0OTk0NjlBNDc3N0M3MEExQ0Q1RjMyQ0MwMjJDMDAyCis6MTA3MUYwMDA4MTBDODczODFDRDY3RjBCNzgxMDA4RTgwMjA4QjgwMjhCCis6MTA3MjAwMDAwQzg4MDI5ODQwNjNGRjgwMDBDQzU3REEyMERCNjA4QzRBCis6MTA3MjEwMDAxMTVCRkRFMzI5MjEwMjY4OTgwNjY4OTQwM0MwMjBEMTIwCis6MTA3MjIwMDAwRjJCMjIxRUMwQTAyOTIyMUQyQTI1MDI3Qjk5MDFDMEY2Cis6MTA3MjMwMDBCMDY0QkZFODEzRDVERTJDQjAwNzI4QjAwMERBMjAwMzE1Cis6MTA3MjQwMDA4ODBBMjg4MjRDQzBEMTBCODAwMERCQTA2NUFGRTc2M0MxCis6MTA3MjUwMDBGRkNBMDAwMDY4QTc3OURBMjBEQjMwREM0MERENTA1QjM0Cis6MTA3MjYwMDBGRUU4RDJBMEQxMEZDMTZEQzE5RDI5MjUyQzYwMDAwNDdDCis6MTA3MjcwMDAyOTI1MkNENjkwMjYyNDY3MkYyNDY4REEyMERCMzA4QzMxCis6MTA3MjgwMDAxMURENTAyRTBBODA1QkZENTFEMkEwRDEwRkMxNjhDMTIzCis6MTA3MjkwMDBBODJBMjUyQzYzRkZERDAwMDAwMEM4REY4QzI2OEIyOTdGCis6MTA3MkEwMDBBRENDOUMyNjBDQkIwQzBCMEI0ODJCMjUyNTJBMkM3NDMzCis6MTA3MkIwMDBEQjYwMkMxMjAxNUJGRDk0RDJBMEQxMEYyQTJDNzQ4QkMxCis6MTA3MkMwMDAxMTVCRjZDREQyQTBEMTBGREEyMDVCRkU0NzYzRkYzODA5Cis6MTA3MkQwMDAwMERBMjBDMEIxNUJGRThCNjVBRjJENjNGQkVEREEyMEQ5Cis6MTA3MkUwMDAyQjIwMEM1QkZFNUE2M0ZGMUYwMDAwMDAxMkQ2NDI4MjY3Cis6MTA3MkYwMDAyMDAyODI1N0M4MjE2M0ZGRkMxMkQ2M0UwM0U4MzAwNDA3Cis6MTA3MzAwMDBFRTMwMDVCMTMwOTMyMDk0MjE5NTIyNjNGRkZDMDAwMEZDCis6MTA3MzEwMDAxMEQ2M0E5MTAwOTIwMTkzMDI5NDAzMTFENjExODIxMDczCis6MTA3MzIwMDAwMUVBMzBBMjExMDFGMDMxQzA0MDA0RTQxNjAwMDIwMDZECis6MTA3MzMwMDAxMUQ2MzM4MjEwMjM0QTAwMDMyMjAyOTIxMDExRDVGRDg4Cis6MTA3MzQwMDBDMDIxOTIxMDA0RTQzMTg0MDM4MzAyODIwMTgxMDAwMDkxCis6MTA3MzUwMDBEMjMwMDEyMzAwMDAwMDAwMTBENjJBOTEwMDkyMDE5MzQwCis6MTA3MzYwMDAwMjk0MDMxMUQ2MDA4MjEwMDFFQTMwQTIxMTAxRjEzMTFBCis6MTA3MzcwMDBDMDQwMDRFNDE2MDAwMjAwMTFENjIxODIxMDEzRDVBN0U0Cis6MTA3MzgwMDAwMzIyMDI5MjEwMDRFNDMxODQwMzgzMDI4MjAxODEwMDBCCis6MTA3MzkwMDAwMEQzMzAwMTMzMDAwMDAwMTBENjFCOTEwMDgxMDE2NTNECis6MTA3M0EwMDAxMDQ5ODEwMjY1MTA0NDgxMDNDRjFGOTIwMTkzMDI5NDFBCis6MTA3M0IwMDAwMzExRDVFRTgyMTAwMUVBMzBBMjExMDFGMjMxQzA0MDcyCis6MTA3M0MwMDAwNEU0MTYwMDAyMDAxMUQ2MEQ4MjEwMTNENThFMDMyMjlDCis6MTA3M0QwMDAwMjkyMTAwNEU0MzE4NDAzODMwMjgyMDFDMDEwOTEwM0ZECis6MTA3M0UwMDA5MTAyOTEwMTgxMDAwMEQ0MzAwMTQzMDAxMkQ1QkRDMDRCCis6MTA3M0YwMDAzMDI4Mzc0MDI4Mzc0NDI4Mzc0ODI4Mzc0QzIzM0QwMTY4Cis6MTA3NDAwMDA3MjMzRUQwMzAyMDA2M0ZGRkMwMDAwMDAxMEQ1RkY5MTEyCis6MTA3NDEwMDAwMDkyMDE5MzAyOTQwMzExRDVGRDgyMTA5MjEwMTFENUIwCis6MTA3NDIwMDBBRjgzMTAwMzIyMDI5MjEwMTFENUZBMTJENUMxOTIxMDI3Cis6MTA3NDMwMDBDMDQwMDRFNDE2MDAwMjAwMTFENUYxODIxMDEzRDVBODUzCis6MTA3NDQwMDAwMzIyMDI5MjEwMDRFNDMxODQwMzgzMDI4MjAxODEwMDRBCis6MTA3NDUwMDAwMEQ1MzAwMTUzMDAwMDAwNkMxMDAyNkUzMjJGRDYyMDkwCis6MTA3NDYwMDAwNTZGMDQwNDNGMDQ3NDVCMkEwNTQ0MEMwMDQxMDQwMENBCis6MTA3NDcwMDAzMzFBMjIwQTAwNkQ0OTBENzM2MzA0MDM2NjBDQjEyMkFFCis6MTA3NDgwMDAwRjIyMTEwMzEzMTQ3MzYzMDIyMjJDMDFEMTBGQzgzQjg2Cis6MTA3NDkwMDBEMTBGMDAwMDczNjMwQ0MwMjFEMTBGMDAwMDAwMDAwMDY5Cis6MTA3NEEwMDA0NDQ5NTYzMEMwMjBEMTBGNkMxMDAyMDA0MDA0NkI0QzkwCis6MTA3NEIwMDAwNzAzMjMxODAyMDIxOUQxMEYwMjAzMTlDMDIwRDEwRkFDCis6MTA3NEMwMDA2QzEwMDIwMkVBMzBEMTBGNkMxMDAyQ0MyNTAzRjAzMUFGCis6MTA3NEQwMDA2MDAwMEYwMDZGMjIwNTAzRjEzMTYwMDAwNTZGMjMwNTg2Cis6MTA3NEUwMDAwM0YyMzEwMDAyMDBEMTBGNkMxMDAyQ0MyNTAyRjAzMDAzCis6MTA3NEYwMDBEMTBGMDAwMDZGMjIwNDAyRjEzMEQxMEY2RjIzMDQwMjdDCis6MTA3NTAwMDBGMjMwRDEwRkMwMjBEMTBGNkMxMDAyMjIwQTIwMjMwQUMyCis6MTA3NTEwMDAwMDZEMjgwRTI4Mzc0MDI4Mzc0NDI4Mzc0ODI4Mzc0QzM0Cis6MTA3NTIwMDAyMzNEMDEwMzAyMDBEMTBGNkMxMDAyMDJFNDMxRDEwRkEwCis6MTA3NTMwMDAwQTAwMDAwMDQzNjg2NTZDNzM2OTZGMjA0NjU3MjA0NDU5Cis6MTA3NTQwMDA0NTQyNTU0NzNEMzAyMDI4NDI3NTY5NkM3NDIwNTc2NTg3Cis6MTA3NTUwMDA2NDIwNEY2Mzc0MjAyMDM4MjAzMTM1M0EzNTMwM0EzNTc1Cis6MTA3NTYwMDAzMDIwNTA0NDU0MjAzMjMwMzAzODIwNkY2RTIwNjM2QzBECis6MTA3NTcwMDA2NTZGNzA2MTc0NzI2MTNBMkY2ODZGNkQ2NTJGNjY2NTEzCis6MTA3NTgwMDA2QzY5NzgyRjc3MkY2Njc3NUYzNzJFMzAyOTJDMjA1NjNECis6MTA3NTkwMDA2NTcyNzM2OTZGNkUyMDU0MzM3ODc4MjAzMDMwMzcyRURGCis6MTA3NUEwMDAzMDMxMkUzMDMwMjAyRDIwMzEzMDMwMzczMDMxMzAzMEY2Cis6MDg3NUIwMDAxMDA3MDEwMDZGNEVGOEJCNEIKKzowMDAwMDAwMUZGCmRpZmYgLS1naXQgYS9maXJtd2FyZS90ZWh1dGkvYmR4LmJpbi5paGV4IGIvZmlybXdhcmUvdGVodXRpL2JkeC5iaW4uaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDI5ZTRjCi0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvdGVodXRpL2JkeC5iaW4uaWhleApAQCAtMCwwICsxLDI2NzggQEAKKzoxMDAwMDAwMDAyMDAwRjAwMDA4MDcxNDAyRDAwMDAwMDAwMDAwMEMwQzEKKzoxMDAwMTAwMDAyMDAwRjAwMDE4MDcxMDAyRDAwMDAwMDAwMDA4MEMwNzAKKzoxMDAwMjAwMDAyMDAwRjAwMDI4MDcxMDAyRDAwMDAwMDAwMDAwMEMxREUKKzoxMDAwMzAwMDAyMDAwRjAwMDM4MDcxMDAyRDAwMDAwMDAwMDA4MEMxNEQKKzoxMDAwNDAwMDAyMDAwRjAwMDQ4MDcxMDAyRDAwMDAwMDAwMDAwMEMyQkIKKzoxMDAwNTAwMDAyMDAwRjAwMDU4MDcxMDAyRDAwMDAwMDAwMDA4MEMyMkEKKzoxMDAwNjAwMDAyMDAwRjAwMDY4MDcxMDAyRDAwMDAwMDAwMDAwMEMzOTgKKzoxMDAwNzAwMDAyMDAwRjAwMDc4MDcxMDAyRDAwMDAwMDAwMDA4MEMzMDcKKzoxMDAwODAwMDAyMDAwRjAwMDg4MDcxMDAyRDAwMDAwMDAwMDAwMEM0NzUKKzoxMDAwOTAwMDAyMDAwRjAwMDk4MDcxMDAyRDAwMDAwMDAwMDA4MEM0RTQKKzoxMDAwQTAwMDAyMDAwRjAwMEE4MDcxMDAyRDAwMDAwMDAwMDAwMEM1NTIKKzoxMDAwQjAwMDAyMDAwRjAwMEI4MDcxMDAyRDAwMDAwMDAwMDA4MEM1QzEKKzoxMDAwQzAwMDAyMDAwRjAwMEM4MDcxMDAyRDAwMDAwMDAwMDAwMEM2MkYKKzoxMDAwRDAwMDAyMDAwRjAwMEQ4MDcxMDAyRDAwMDAwMDAwMDA4MEM2OUUKKzoxMDAwRTAwMDAyMDAwRjAwMEU4MDcxMDAyRDAwMDAwMDAwMDAwMEM3MEMKKzoxMDAwRjAwMDAyMDAwRjAwMEY4MDcxMDAyRDAwMDAwMDAwMDA4MEM3N0IKKzoxMDAxMDAwMDAyMDAwRjAwMTA4MDcxMDAyRDAwMDAwMDAwMDAwMEM4RTgKKzoxMDAxMTAwMDAyMDAwRjAwMTE4MDcxMDAyRDAwMDAwMDAwMDA4MEM4NTcKKzoxMDAxMjAwMDAyMDAwRjAwMTI4MDcxMDAyRDAwMDAwMDAwMDAwMEM5QzUKKzoxMDAxMzAwMDAyMDAwRjAwMTM4MDcxMDAyRDAwMDAwMDAwMDA4MEM5MzQKKzoxMDAxNDAwMDAyMDAwRjAwMTQ4MDcxMDAyRDAwMDAwMDAwMDAwMENBQTIKKzoxMDAxNTAwMDAyMDAwRjAwMTU4MDcxMDAyRDAwMDAwMDAwMDA4MENBMTEKKzoxMDAxNjAwMDAyMDAwRjAwMTY4MDcxMDAyRDAwMDAwMDAwMDAwMENCN0YKKzoxMDAxNzAwMDAyMDAwRjAwMTc4MDcxMDAyRDAwMDAwMDAwMDA4MENCRUUKKzoxMDAxODAwMDAyMDAwRjAwMTg4MDcxMDAyRDAwMDAwMDAwMDAwMENDNUMKKzoxMDAxOTAwMDAyMDAwRjAwMTk4MDcxMDAyRDAwMDAwMDAwMDA4MENDQ0IKKzoxMDAxQTAwMDAyMDAwRjAwMUE4MDcxMDAyRDAwMDAwMDAwMDAwMENEMzkKKzoxMDAxQjAwMDAyMDAwRjAwMUI4MDcxMDAyRDAwMDAwMDAwMDA4MENEQTgKKzoxMDAxQzAwMDAyMDAwRjAwMUM4MDcxMDAyRDAwMDAwMDAwMDAwMENFMTYKKzoxMDAxRDAwMDAyMDAwRjAwMUQ4MDcxMDAyRDAwMDAwMDAwMDA4MENFODUKKzoxMDAxRTAwMDAyMDAwRjAwMUU4MDcxMDAyRDAwMDAwMDAwMDAwMENGRjMKKzoxMDAxRjAwMDAyMDAwRjAwMUY4MDcxMDAyRDAwMDAwMDAwMDA4MENGNjIKKzoxMDAyMDAwMDAyMDAwRjAwMjA4MDcxMDAyRDAwMDAwMDAwMDAwMEQwQ0YKKzoxMDAyMTAwMDAyMDAwRjAwMjE4MDcxMDAyRDAwMDAwMDAwMDA4MEQwM0UKKzoxMDAyMjAwMDAyMDAwRjAwMjI4MDcxMDAyRDAwMDAwMDAwMDAwMEQxQUMKKzoxMDAyMzAwMDAyMDAwRjAwMjM4MDcxMDAyRDAwMDAwMDAwMDA4MEQxMUIKKzoxMDAyNDAwMDAyMDAwRjAwMjQ4MDcxMDAyRDAwMDAwMDAwMDAwMEQyODkKKzoxMDAyNTAwMDAyMDAwRjAwMjU4MDcxMDAyRDAwMDAwMDAwMDA4MEQyRjgKKzoxMDAyNjAwMDAyMDAwRjAwMjY4MDcxMDAyRDAwMDAwMDAwMDAwMEQzNjYKKzoxMDAyNzAwMDAyMDAwRjAwMjc4MDcxMDAyRDAwMDAwMDAwMDA4MEQzRDUKKzoxMDAyODAwMDAyMDAwRjAwMjg4MDcxMDAyRDAwMDAwMDAwMDAwMEQ0NDMKKzoxMDAyOTAwMDAyMDAwRjAwMjk4MDcxMDAyRDAwMDAwMDAwMDA4MEQ0QjIKKzoxMDAyQTAwMDAyMDAwRjAwMkE4MDcxMDAyRDAwMDAwMDAwMDAwMEQ1MjAKKzoxMDAyQjAwMDAyMDAwRjAwMkI4MDcxMDAyRDAwMDAwMDAwMDA4MEQ1OEYKKzoxMDAyQzAwMDAyMDAwRjAwMkM4MDcxMDAyRDAwMDAwMDAwMDAwMEQ2RkQKKzoxMDAyRDAwMDAyMDAwRjAwMkQ4MDcxMDAyRDAwMDAwMDAwMDA4MEQ2NkMKKzoxMDAyRTAwMDAyMDAwRjAwMkU4MDcxMDAyRDAwMDAwMDAwMDAwMEQ3REEKKzoxMDAyRjAwMDAyMDAwRjAwMkY4MDcxMDAyRDAwMDAwMDAwMDA4MEQ3NDkKKzoxMDAzMDAwMDAyMDAwRjAwMzA4MDcxMDAyRDAwMDAwMDAwMDAwMEQ4QjYKKzoxMDAzMTAwMDAyMDAwRjAwMzE4MDcxMDAyRDAwMDAwMDAwMDA4MEQ4MjUKKzoxMDAzMjAwMDAyMDAwRjAwMzI4MDcxMDAyRDAwMDAwMDAwMDAwMEQ5OTMKKzoxMDAzMzAwMDAyMDAwRjAwMzM4MDcxMDAyRDAwMDAwMDAwMDA4MEQ5MDIKKzoxMDAzNDAwMDAyMDAwRjAwMzQ4MDcxMDAyRDAwMDAwMDAwMDAwMERBNzAKKzoxMDAzNTAwMDAyMDAwRjAwMzU4MDcxMDAyRDAwMDAwMDAwMDA4MERBREYKKzoxMDAzNjAwMDAyMDAwRjAwMzY4MDcxMDAyRDAwMDAwMDAwMDAwMERCNEQKKzoxMDAzNzAwMDAyMDAwRjAwMzc4MDcxMDAyRDAwMDAwMDAwMDA4MERCQkMKKzoxMDAzODAwMDAyMDAwRjAwMzg4MDcxMDA3QjAwMDAwMDAwODA2MERERkIKKzoxMDAzOTAwMDAyMDAwRjAwMzk4MDcxMDAyRDAwMDAwMDAwMDAwMEREMTgKKzoxMDAzQTAwMDAyMDAwRjAwM0E4MDcxMDAyRDAwMDAwMDAwMDA4MERCODkKKzoxMDAzQjAwMDAyMDAwRjAwM0I4MDcxMDAyRDAwMDAwMDAwMDAwMERERjYKKzoxMDAzQzAwMDAyMDAwRjAwM0M4MDcxMDAyRDAwMDAwMDAwMDAwMERERTUKKzoxMDAzRDAwMDAyMDAwRjAwM0Q4MDcxMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDAzRTAwMDAyMDAwRjAwM0U4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDAzRjAwMDAyMDAwRjAwM0Y4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDA0MDAwMDAyMDAwRjAwNDA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUEKKzoxMDA0MTAwMDAyMDAwRjAwNDE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDA0MjAwMDAyMDAwRjAwNDI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDA0MzAwMDAyMDAwRjAwNDM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDA0NDAwMDAyMDAwRjAwNDQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDA0NTAwMDAyMDAwRjAwNDU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDA0NjAwMDAyMDAwRjAwNDY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMDA0NzAwMDAyMDAwRjAwNDc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDA0ODAwMDAyMDAwRjAwNDg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDA0OTAwMDAyMDAwRjAwNDk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDA0QTAwMDAyMDAwRjAwNEE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDA0QjAwMDAyMDAwRjAwNEI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDA0QzAwMDAyMDAwRjAwNEM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDA0RDAwMDAyMDAwRjAwNEQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDA0RTAwMDAyMDAwRjAwNEU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDA0RjAwMDAyMDAwRjAwNEY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDA1MDAwMDAyMDAwRjAwNTA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOTkKKzoxMDA1MTAwMDAyMDAwRjAwNTE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDA1MjAwMDAyMDAwRjAwNTI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDA1MzAwMDAyMDAwRjAwNTM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDA1NDAwMDAyMDAwRjAwNTQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDA1NTAwMDAyMDAwRjAwNTU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDQKKzoxMDA1NjAwMDAyMDAwRjAwNTY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDA1NzAwMDAyMDAwRjAwNTc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDA1ODAwMDAyMDAwRjAwNTg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTEKKzoxMDA1OTAwMDAyMDAwRjAwNTk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDA1QTAwMDAyMDAwRjAwNUE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDA1QjAwMDAyMDAwRjAwNUI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDA1QzAwMDAyMDAwRjAwNUM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDA1RDAwMDAyMDAwRjAwNUQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDA1RTAwMDAyMDAwRjAwNUU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDA1RjAwMDAyMDAwRjAwNUY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUEKKzoxMDA2MDAwMDAyMDAwRjAwNjA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwODgKKzoxMDA2MTAwMDAyMDAwRjAwNjE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNzcKKzoxMDA2MjAwMDAyMDAwRjAwNjI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNjYKKzoxMDA2MzAwMDAyMDAwRjAwNjM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTUKKzoxMDA2NDAwMDAyMDAwRjAwNjQ4MDcxMDAyRDAwMDAwMDAwMDAwMERCM0MKKzoxMDA2NTAwMDAyMDAwRjAwNjU4MDcxMDAzRjAwMDAwMDA0MDEwMEREMTIKKzoxMDA2NjAwMDAyMDAwRjAwNjY4MDcxMDAzRjAwMDAwMDAxMDAxOERERUQKKzoxMDA2NzAwMDAyMDAwRjAwNjc4MDcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDA2ODAwMDAyMDAwRjAwNjg4MDcxMDAzRjAwMDAwMDA0MDgwMERERDgKKzoxMDA2OTAwMDAyMDAwRjAwNjk4MDcxMDA2OTAwMDAwMDdBM0QwMERERjIKKzoxMDA2QTAwMDAyMDAwRjAwNkE4MDcxMDAzRjAwMDAwMDA0MzAwMEREOEUKKzoxMDA2QjAwMDAyMDAwRjAwNkI4MDcxMDAzRjAwMDAwMDAxMDAxOEREOTgKKzoxMDA2QzAwMDAyMDAwRjAwNkM4MDcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDA2RDAwMDAyMDAwRjAwNkQ4MDcxMDAzRjAwMDAwMDA0MDAwMEREOEIKKzoxMDA2RTAwMDAyMDAwRjAwNkU4MDcxMDA2OTAwMDAwMDdBM0QwMEREOUQKKzoxMDA2RjAwMDAyMDAwRjAwNkY4MDcxMDAzRjAwMDAwMDA0M0QwMEREMkMKKzoxMDA3MDAwMDAyMDAwRjAwNzA4MDcxMDAzRjAwMDAwMDAxMDAxOERENDIKKzoxMDA3MTAwMDAyMDAwRjAwNzE4MDcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDA3MjAwMDAyMDAwRjAwNzI4MDcxMDAzRjAwMDAwMDA0MDcwMEREMkUKKzoxMDA3MzAwMDAyMDAwRjAwNzM4MDcxMDA2OTAwMDAwMDdBM0QwMERENDcKKzoxMDA3NDAwMDAyMDAwRjAwNzQ4MDcxMDAzRjAwMDAwMDg0MjgwMERENkIKKzoxMDA3NTAwMDAyMDAwRjAwNzU4MDcxMDAzRjAwMDAwMDAxMDAxOERERUQKKzoxMDA3NjAwMDAyMDAwRjAwNzY4MDcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDA3NzAwMDAyMDAwRjAwNzc4MDcxMDAzRjAwMDAwMDA0MzcwMEREQTkKKzoxMDA3ODAwMDAyMDAwRjAwNzg4MDcxMDA2OTAwMDAwMDdBM0QwMERERjIKKzoxMDA3OTAwMDAyMDAwRjAwNzk4MDcxMDAzRjAwMDAwMDA0MjkwMEREOTUKKzoxMDA3QTAwMDAyMDAwRjAwN0E4MDcxMDAzRjAwMDAwMDAxMDAxOEREOTgKKzoxMDA3QjAwMDAyMDAwRjAwN0I4MDcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDA3QzAwMDAyMDAwRjAwN0M4MDcxMDAzRjAwMDAwMDA0QUEwNEREREQKKzoxMDA3RDAwMDAyMDAwRjAwN0Q4MDcxMDA2OTAwMDAwMDdBM0QwMEREOUQKKzoxMDA3RTAwMDAyMDAwRjAwN0U4MDcxMDAzRjAwMDAwMDA0MjgwMERENDEKKzoxMDA3RjAwMDAyMDAwRjAwN0Y4MDcxMDAzRjAwMDAwMDAxMDAxOERENDMKKzoxMDA4MDAwMDAyMDAwRjAwODA4MDcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDA4MTAwMDAyMDAwRjAwODE4MDcxMDAzRjAwMDAwMDA0MzEwMEREMDQKKzoxMDA4MjAwMDAyMDAwRjAwODI4MDcxMDA2OTAwMDAwMDdBM0QwMERENDcKKzoxMDA4MzAwMDAyMDAwRjAwODM4MDcxMDAzRjAwMDAwMDg0MkIwMERENjgKKzoxMDA4NDAwMDAyMDAwRjAwODQ4MDcxMDAzRjAwMDAwMDAxMDAxOERERUQKKzoxMDA4NTAwMDAyMDAwRjAwODU4MDcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDA4NjAwMDAyMDAwRjAwODY4MDcxMDAzRjAwMDAwMDA0RTQwMURERkIKKzoxMDA4NzAwMDAyMDAwRjAwODc4MDcxMDA2OTAwMDAwMDdBM0QwMERERjIKKzoxMDA4ODAwMDAyMDAwRjAwODg4MDcxMDAzRjAwMDAwMDg0MDA4MEQ3QzQKKzoxMDA4OTAwMDAyMDAwRjAwODk4MDcxMDAzRjAwMDAwMDAxMDA5OEQ3MUUKKzoxMDA4QTAwMDAyMDAwRjAwOEE4MDcxMDA1OTAwMDAwMEVGMzc4MEQ3RTYKKzoxMDA4QjAwMDAyMDAwRjAwOEI4MDcxMDAzRDAwMDAwMDZGMDA4MEY3ODgKKzoxMDA4QzAwMDAyMDAwRjAwOEM4MDcxMDAzRDAwMDAwMDZGMDA4MEY3NzcKKzoxMDA4RDAwMDAyMDAwRjAwOEQ4MDcxMDAzRDAwMDAwMDZGMDA4MEY3NjYKKzoxMDA4RTAwMDAyMDAwRjAwOEU4MDcxMDAyRDAwMDAwMDdGMDJENkQ3MUQKKzoxMDA4RjAwMDAyMDAwRjAwOEY4MDcxMDAxODAwMDAwMDgxMDBGRjE3QjgKKzoxMDA5MDAwMDAyMDAwRjAwOTA4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MzIKKzoxMDA5MTAwMDAyMDAwRjAwOTE4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MjEKKzoxMDA5MjAwMDAyMDAwRjAwOTI4MDcxMDAyRDAwMDAwMEI4MDBEOEQ3OUYKKzoxMDA5MzAwMDAyMDAwRjAwOTM4MDcxMDAxODAwMDAwMDgxMDBFQjE3ODcKKzoxMDA5NDAwMDAyMDAwRjAwOTQ4MDcxMDAzRjAwMDAwMDA0MjkwMEREQzgKKzoxMDA5NTAwMDAyMDAwRjAwOTU4MDcxMDAzRjAwMDAwMDAxMDAxOEREQ0IKKzoxMDA5NjAwMDAyMDAwRjAwOTY4MDcxMDA2OTAwMDAwMDdBM0QwMERERjIKKzoxMDA5NzAwMDAyMDAwRjAwOTc4MDcxMDAzRjAwMDAwMDg0QUEwNEREOTAKKzoxMDA5ODAwMDAyMDAwRjAwOTg4MDcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDA5OTAwMDAyMDAwRjAwOTk4MDcxMDAzRjAwMDAwMDA0MkIwMERENzEKKzoxMDA5QTAwMDAyMDAwRjAwOUE4MDcxMDAzRjAwMDAwMDAxMDAxOERENzYKKzoxMDA5QjAwMDAyMDAwRjAwOUI4MDcxMDA2OTAwMDAwMDdBM0QwMEREOUQKKzoxMDA5QzAwMDAyMDAwRjAwOUM4MDcxMDAzRjAwMDAwMDA0MDAwMERENjkKKzoxMDA5RDAwMDAyMDAwRjAwOUQ4MDcxMDA2OTAwMDAwMDdBM0QwMEREN0IKKzoxMDA5RTAwMDAyMDAwRjAwOUU4MDcxMDAzRjAwMDAwMDg0MjkwMEREOUUKKzoxMDA5RjAwMDAyMDAwRjAwOUY4MDcxMDAzRjAwMDAwMDAxMDAxOEREMjEKKzoxMDBBMDAwMDAyMDAwRjAwQTA4MDcxMDA2OTAwMDAwMDdBM0QwMERENDcKKzoxMDBBMTAwMDAyMDAwRjAwQTE4MDcxMDAzRjAwMDAwMDA0MDAwMEREMTMKKzoxMDBBMjAwMDAyMDAwRjAwQTI4MDcxMDA2OTAwMDAwMDdBM0QwMEREMjUKKzoxMDBBMzAwMDAyMDAwRjAwQTM4MDcxMDAzRjAwMDAwMDA0MkEwMEREQzcKKzoxMDBBNDAwMDAyMDAwRjAwQTQ4MDcxMDAzRjAwMDAwMDAxMDAxOEREQ0IKKzoxMDBBNTAwMDAyMDAwRjAwQTU4MDcxMDA2OTAwMDAwMDdBM0QwMERERjIKKzoxMDBBNjAwMDAyMDAwRjAwQTY4MDcxMDAzRjAwMDAwMDg0OTEwMEREQUQKKzoxMDBBNzAwMDAyMDAwRjAwQTc4MDcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDBBODAwMDAyMDAwRjAwQTg4MDcxMDAzRjAwMDAwMDg0MTk4MEQ2OEEKKzoxMDBBOTAwMDAyMDAwRjAwQTk4MDcxMDAzRjAwMDAwMDAxMDA4MEQ2MTUKKzoxMDBBQTAwMDAyMDAwRjAwQUE4MDcxMDAzNTAwMDAwMEVEMDA4MEQ2MjIKKzoxMDBBQjAwMDAyMDAwRjAwQUI4MDcxMDAxODAwMDAwMDgxMDBGRjM3QkEKKzoxMDBBQzAwMDAyMDAwRjAwQUM4MDcxMDAzRjAwMDAwMDA0MkIwMEREMkQKKzoxMDBBRDAwMDAyMDAwRjAwQUQ4MDcxMDAzRjAwMDAwMDAxMDAxOEREMzIKKzoxMDBBRTAwMDAyMDAwRjAwQUU4MDcxMDA2OTAwMDAwMDdBM0QwMERENTkKKzoxMDBBRjAwMDAyMDAwRjAwQUY4MDcxMDAzRjAwMDAwMDA0MDAwMEREMjUKKzoxMDBCMDAwMDAyMDAwRjAwQjA4MDcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDBCMTAwMDAyMDAwRjAwQjE4MDcxMDAzRjAwMDAwMDg0MkEwMERENTgKKzoxMDBCMjAwMDAyMDAwRjAwQjI4MDcxMDAzRjAwMDAwMDAxMDAxOEREREMKKzoxMDBCMzAwMDAyMDAwRjAwQjM4MDcxMDA2OTAwMDAwMDdBM0QwMEREMDMKKzoxMDBCNDAwMDAyMDAwRjAwQjQ4MDcxMDAzRjAwMDAwMDA0MDAwMEREQ0YKKzoxMDBCNTAwMDAyMDAwRjAwQjU4MDcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDBCNjAwMDAyMDAwRjAwQjY4MDcxMDAzRjAwMDAwMDg0MEM4MEQ2QTgKKzoxMDBCNzAwMDAyMDAwRjAwQjc4MDcxMDAzRjAwMDAwMDAxMDA4MEQ2MjYKKzoxMDBCODAwMDAyMDAwRjAwQjg4MDcxMDAzNTAwMDAwMEVEMDA4MEQ2MzMKKzoxMDBCOTAwMDAyMDAwRjAwQjk4MDcxMDAxODAwMDAwMDgxMDBGRjM3Q0IKKzoxMDBCQTAwMDAyMDAwRjAwQkE4MDcxMDAzRjAwMDAwMDg0MkEwMEREQkYKKzoxMDBCQjAwMDAyMDAwRjAwQkI4MDcxMDAzRjAwMDAwMDAxMDAxOERENDMKKzoxMDBCQzAwMDAyMDAwRjAwQkM4MDcxMDA2OTAwMDAwMDdBM0QwMERENkEKKzoxMDBCRDAwMDAyMDAwRjAwQkQ4MDcxMDAzRjAwMDAwMDA0MDAwMEREMzYKKzoxMDBCRTAwMDAyMDAwRjAwQkU4MDcxMDA2OTAwMDAwMDdBM0QwMERENDgKKzoxMDBCRjAwMDAyMDAwRjAwQkY4MDcxMDAzRjAwMDAwMDg0MEY4MEQ2MEMKKzoxMDBDMDAwMDAyMDAwRjAwQzA4MDcxMDAzRjAwMDAwMDAxMDA4MEQ2OEMKKzoxMDBDMTAwMDAyMDAwRjAwQzE4MDcxMDAzNTAwMDAwMEVEMDA4MEQ2OTkKKzoxMDBDMjAwMDAyMDAwRjAwQzI4MDcxMDAxODAwMDAwMDgxMDBGRjM3MzEKKzoxMDBDMzAwMDAyMDAwRjAwQzM4MDcxMDAzRjAwMDAwMDA0MkEwMEREQTUKKzoxMDBDNDAwMDAyMDAwRjAwQzQ4MDcxMDAzRjAwMDAwMDAxMDAxOEREQTkKKzoxMDBDNTAwMDAyMDAwRjAwQzU4MDcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDBDNjAwMDAyMDAwRjAwQzY4MDcxMDAzRjAwMDAwMDg0MTEwMEREMEIKKzoxMDBDNzAwMDAyMDAwRjAwQzc4MDcxMDA2OTAwMDAwMDdBM0QwMEREQUUKKzoxMDBDODAwMDAyMDAwRjAwQzg4MDcxMDAzRjAwMDAwMDg0MjgwMERERDIKKzoxMDBDOTAwMDAyMDAwRjAwQzk4MDcxMDAzRjAwMDAwMDAxMDAxOERENTQKKzoxMDBDQTAwMDAyMDAwRjAwQ0E4MDcxMDA2OTAwMDAwMDdBM0QwMEREN0IKKzoxMDBDQjAwMDAyMDAwRjAwQ0I4MDcxMDAzRjAwMDAwMDg0MzcwMEREOTAKKzoxMDBDQzAwMDAyMDAwRjAwQ0M4MDcxMDA2OTAwMDAwMDdBM0QwMERENTkKKzoxMDBDRDAwMDAyMDAwRjAwQ0Q4MDcxMDAyRDAwMDAwMDAwMDA4MEQzQzUKKzoxMDBDRTAwMDAyMDAwRjAwQ0U4MDcxMDAzRjAwMDAwMDgwMzcwMEQyNkMKKzoxMDBDRjAwMDAyMDAwRjAwQ0Y4MDcxMDAzRjAwMDAwMDA0MDQ4MEQxOEIKKzoxMDBEMDAwMDAyMDAwRjAwRDA4MDcxMDAzRjAwMDAwMDAxMDA4NEQxN0MKKzoxMDBEMTAwMDAyMDAwRjAwRDE4MDcxMDA2OTAwMDAwMDc2M0IwMEREMDkKKzoxMDBEMjAwMDAyMDAwRjAwRDI4MDcxMDA2OTAwMDAwMDc2M0IwMERERjgKKzoxMDBEMzAwMDAyMDAwRjAwRDM4MDcxMDA2OTAwMDAwMDc2M0IwMERERTcKKzoxMDBENDAwMDAyMDAwRjAwRDQ4MDcxMDAzRjAwMDAwMDg0RkY3RkQxQkIKKzoxMDBENTAwMDAyMDAwRjAwRDU4MDcxMDAzRjAwMDAwMDgxRkY3RkQxQUQKKzoxMDBENjAwMDAyMDAwRjAwRDY4MDcxMDA2OTAwMDAwMDc2M0IwMEREQjQKKzoxMDBENzAwMDAyMDAwRjAwRDc4MDcxMDA2OTAwMDAwMDc2M0IwMEREQTMKKzoxMDBEODAwMDAyMDAwRjAwRDg4MDcxMDA2OTAwMDAwMDc2M0IwMEREOTIKKzoxMDBEOTAwMDAyMDAwRjAwRDk4MDcxMDA2OTAwMDAwMDc2M0IwMEREODEKKzoxMDBEQTAwMDAyMDAwRjAwREE4MDcxMDA2OTAwMDAwMDc2M0IwMERENzAKKzoxMDBEQjAwMDAyMDAwRjAwREI4MDcxMDA2OTAwMDAwMDc2M0IwMERENUYKKzoxMDBEQzAwMDAyMDAwRjAwREM4MDcxMDAzRjAwMDAwMDg0MDc4MEQ2MjUKKzoxMDBERDAwMDAyMDAwRjAwREQ4MDcxMDAzRjAwMDAwMDAxMDA4MEQ2OUUKKzoxMDBERTAwMDAyMDAwRjAwREU4MDcxMDAzNTAwMDAwMEVEMDA4MEQ2QUIKKzoxMDBERjAwMDAyMDAwRjAwREY4MDcxMDAxODAwMDAwMDgxMDBGRjM3NDMKKzoxMDBFMDAwMDAyMDAwRjAwRTA4MDcxMDA0OTAwMDAwMDYzM0IwMEREM0MKKzoxMDBFMTAwMDAyMDAwRjAwRTE4MDcxMDA1OTAwMDAwMDc2M0IwMEREMDgKKzoxMDBFMjAwMDAyMDAwRjAwRTI4MDcxMDAzRDAwMDAwMDZGMDA4MEY3QkIKKzoxMDBFMzAwMDAyMDAwRjAwRTM4MDcxMDAzRDAwMDAwMDZGMDA4MEY3QUEKKzoxMDBFNDAwMDAyMDAwRjAwRTQ4MDcxMDAzRDAwMDAwMDZGMDA4MEY3OTkKKzoxMDBFNTAwMDAyMDAwRjAwRTU4MDcxMDAyRDAwMDAwMDdGMDIwNkREMUEKKzoxMDBFNjAwMDAyMDAwRjAwRTY4MDcxMDAxODAwMDAwMDdBM0Q3RjFEMkYKKzoxMDBFNzAwMDAyMDAwRjAwRTc4MDcxMDA0NTAwMDAwMDM5MzEwMERERkQKKzoxMDBFODAwMDAyMDAwRjAwRTg4MDcxMDA5NDAwMDAwMDNCMzEwQjAwNkQKKzoxMDBFOTAwMDAyMDAwRjAwRTk4MDcxMDA5NDAwMDAwMDNEMzEwOTAwNUMKKzoxMDBFQTAwMDAyMDAwRjAwRUE4MDcxMDA5NDAwMDAwMDNGMzEwNzAwNEIKKzoxMDBFQjAwMDAyMDAwRjAwRUI4MDcxMDA5NDAwMDAwMDc2M0IwNTAwRkIKKzoxMDBFQzAwMDAyMDAwRjAwRUM4MDcxMDAwOTAwMDAwMDdBM0RFREMxQzYKKzoxMDBFRDAwMDAyMDAwRjAwRUQ4MDcxMDAzRjAwMDAwMDgwQjcwMEQyREIKKzoxMDBFRTAwMDAyMDAwRjAwRUU4MDcxMDAzRjAwMDAwMDg0MjgwMERENEEKKzoxMDBFRjAwMDAyMDAwRjAwRUY4MDcxMDAzRjAwMDAwMDAxMDAxOEREQ0MKKzoxMDBGMDAwMDAyMDAwRjAwRjA4MDcxMDA2OTAwMDAwMDY0MzIwMEREMTMKKzoxMDBGMTAwMDAyMDAwRjAwRjE4MDcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDBGMjAwMDAyMDAwRjAwRjI4MDcxMDAzRjAwMDAwMDg0MDc4MEQ2QUQKKzoxMDBGMzAwMDAyMDAwRjAwRjM4MDcxMDAzRjAwMDAwMDAxMDA4MEQ2MjYKKzoxMDBGNDAwMDAyMDAwRjAwRjQ4MDcxMDAzNTAwMDAwMEVEMDA4MEQ2MzMKKzoxMDBGNTAwMDAyMDAwRjAwRjU4MDcxMDAxODAwMDAwMDgxMDBGRjM3Q0IKKzoxMDBGNjAwMDAyMDAwRjAwRjY4MDcxMDA0OTAwMDAwMDYzM0IwMEREQzUKKzoxMDBGNzAwMDAyMDAwRjAwRjc4MDcxMDA1OTAwMDAwMDc2M0IwMEREOTEKKzoxMDBGODAwMDAyMDAwRjAwRjg4MDcxMDAzRDAwMDAwMDZGMDA4MEY3NDQKKzoxMDBGOTAwMDAyMDAwRjAwRjk4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MzMKKzoxMDBGQTAwMDAyMDAwRjAwRkE4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MjIKKzoxMDBGQjAwMDAyMDAwRjAwRkI4MDcxMDAyRDAwMDAwMDdGMDIwNkREQTMKKzoxMDBGQzAwMDAyMDAwRjAwRkM4MDcxMDAxODAwMDAwMDdBM0Q3RjFEQjgKKzoxMDBGRDAwMDAyMDAwRjAwRkQ4MDcxMDA0NTAwMDAwMDNBMzEwMEREODUKKzoxMDBGRTAwMDAyMDAwRjAwRkU4MDcxMDAxODAwMDAwMDc2M0IyRDFERUUKKzoxMDBGRjAwMDAyMDAwRjAwRkY4MDcxMDA0NTAwMDAwMDNDMzEwMERENjEKKzoxMDEwMDAwMDAyMDAwRjAwMDA4MTcxMDAxODAwMDAwMDc2M0IxMzFERTQKKzoxMDEwMTAwMDAyMDAwRjAwMDE4MTcxMDA0NTAwMDAwMDNFMzEwMEREM0IKKzoxMDEwMjAwMDAyMDAwRjAwMDI4MTcxMDAxODAwMDAwMDc2M0IxQjFEQkEKKzoxMDEwMzAwMDAyMDAwRjAwMDM4MTcxMDAzRjAwMDAwMDA0MzAwMERENUEKKzoxMDEwNDAwMDAyMDAwRjAwMDQ4MTcxMDAzRjAwMDAwMDAxMDAxOERENjQKKzoxMDEwNTAwMDAyMDAwRjAwMDU4MTcxMDA2OTAwMDAwMDdBM0QwMEREOEIKKzoxMDEwNjAwMDAyMDAwRjAwMDY4MTcxMDAzRjAwMDAwMDA0MDEwMERENTYKKzoxMDEwNzAwMDAyMDAwRjAwMDc4MTcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDEwODAwMDAyMDAwRjAwMDg4MTcxMDAwOTAwMDAwMDdBM0QyREM1QTMKKzoxMDEwOTAwMDAyMDAwRjAwMDk4MTcxMDAyOTAwMDAwMDY0MDAwMUQyRTQKKzoxMDEwQTAwMDAyMDAwRjAwMEE4MTcxMDAzRjAwMDAwMDg0MjgwMERENkIKKzoxMDEwQjAwMDAyMDAwRjAwMEI4MTcxMDAzRjAwMDAwMDAxMDAxOERERUQKKzoxMDEwQzAwMDAyMDAwRjAwMEM4MTcxMDA2OTAwMDAwMDY0MzIwMEREMzUKKzoxMDEwRDAwMDAyMDAwRjAwMEQ4MTcxMDA2OTAwMDAwMDdBM0QwMEREMDMKKzoxMDEwRTAwMDAyMDAwRjAwMEU4MTcxMDAwOTAwMDAwMDdBM0QyOUMyNDQKKzoxMDEwRjAwMDAyMDAwRjAwMEY4MTcxMDAyOTAwMDAwMDY0MDAwMEQyN0YKKzoxMDExMDAwMDAyMDAwRjAwMTA4MTcxMDAzRjAwMDAwMDg0MjgwMEREMDQKKzoxMDExMTAwMDAyMDAwRjAwMTE4MTcxMDAzRjAwMDAwMDAxMDAxOEREODYKKzoxMDExMjAwMDAyMDAwRjAwMTI4MTcxMDA2OTAwMDAwMDY0MzIwMEREQ0UKKzoxMDExMzAwMDAyMDAwRjAwMTM4MTcxMDA2OTAwMDAwMDdBM0QwMEREOUMKKzoxMDExNDAwMDAyMDAwRjAwMTQ4MTcxMDA0OTAwMDAwMDYzM0IwMEREQzQKKzoxMDExNTAwMDAyMDAwRjAwMTU4MTcxMDA1OTAwMDAwMDc2M0IwMEREOTAKKzoxMDExNjAwMDAyMDAwRjAwMTY4MTcxMDAzRDAwMDAwMDZGMDA4MEY3NDMKKzoxMDExNzAwMDAyMDAwRjAwMTc4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MzIKKzoxMDExODAwMDAyMDAwRjAwMTg4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MjEKKzoxMDExOTAwMDAyMDAwRjAwMTk4MTcxMDAyRDAwMDAwMDdGMDIwNkREQTIKKzoxMDExQTAwMDAyMDAwRjAwMUE4MTcxMDAxODAwMDAwMDdBM0Q3RjFEQjcKKzoxMDExQjAwMDAyMDAwRjAwMUI4MTcxMDA0NTAwMDAwMDNBMzEwMEREODQKKzoxMDExQzAwMDAyMDAwRjAwMUM4MTcxMDAxODAwMDAwMDc2M0IwRjFEMEIKKzoxMDExRDAwMDAyMDAwRjAwMUQ4MTcxMDAzRjAwMDAwMDA0MzAwMEREOUYKKzoxMDExRTAwMDAyMDAwRjAwMUU4MTcxMDAzRjAwMDAwMDAxMDAxOEREQTkKKzoxMDExRjAwMDAyMDAwRjAwMUY4MTcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDEyMDAwMDAyMDAwRjAwMjA4MTcxMDAzRjAwMDAwMDA0MDEwMEREOUEKKzoxMDEyMTAwMDAyMDAwRjAwMjE4MTcxMDA2OTAwMDAwMDdBM0QwMEREQUQKKzoxMDEyMjAwMDAyMDAwRjAwMjI4MTcxMDAwOTAwMDAwMDdBM0QyREM1RTcKKzoxMDEyMzAwMDAyMDAwRjAwMjM4MTcxMDAyRDAwMDAwMDgyMDAwOEQxMDAKKzoxMDEyNDAwMDAyMDAwRjAwMjQ4MTcxMDAwODAwMDAwMDdBM0RDMzIzRDIKKzoxMDEyNTAwMDAyMDAwRjAwMjU4MTcxMDA0OTAwMDAwMDBBM0IwMEQ2MDIKKzoxMDEyNjAwMDAyMDAwRjAwMjY4MTcxMDAzRjAwMDAwMDA0MDAwMEQzM0YKKzoxMDEyNzAwMDAyMDAwRjAwMjc4MTcxMDAzRjAwMDAwMDAxMDAwNEQzMkQKKzoxMDEyODAwMDAyMDAwRjAwMjg4MTcxMDAyRjAwMDAwMDg1NDA4MUQ2RTgKKzoxMDEyOTAwMDAyMDAwRjAwMjk4MTcxMDAzRjAwMDAwMDg0RkZGRkQ0OEQKKzoxMDEyQTAwMDAyMDAwRjAwMkE4MTcxMDAzRjAwMDAwMDgxMDc4MEQ0RjYKKzoxMDEyQjAwMDAyMDAwRjAwMkI4MTcxMDAzRjAwMDAwMDg0RkZGRkQxNkUKKzoxMDEyQzAwMDAyMDAwRjAwMkM4MTcxMDAzRjAwMDAwMDAxMDA4MEQxNUUKKzoxMDEyRDAwMDAyMDAwRjAwMkQ4MTcxMDA0OTAwMDAwMDY2MzYwMEREMUMKKzoxMDEyRTAwMDAyMDAwRjAwMkU4MTcxMDA2OTAwMDAwMDc2M0IwMERERDYKKzoxMDEyRjAwMDAyMDAwRjAwMkY4MTcxMDA2OTAwMDAwMDc2M0IwMEREQzUKKzoxMDEzMDAwMDAyMDAwRjAwMzA4MTcxMDA2OTAwMDAwMDc2M0IwMEREQjMKKzoxMDEzMTAwMDAyMDAwRjAwMzE4MTcxMDA2OTAwMDAwMDY5M0IwMEREQUYKKzoxMDEzMjAwMDAyMDAwRjAwMzI4MTcxMDA2OTAwMDAwMDc2M0IwMEREOTEKKzoxMDEzMzAwMDAyMDAwRjAwMzM4MTcxMDA2OTAwMDAwMDc2M0IwMEREODAKKzoxMDEzNDAwMDAyMDAwRjAwMzQ4MTcxMDA2OTAwMDAwMDc2M0IwMERENkYKKzoxMDEzNTAwMDAyMDAwRjAwMzU4MTcxMDA2OTAwMDAwMDY5M0IwMERENkIKKzoxMDEzNjAwMDAyMDAwRjAwMzY4MTcxMDA2MTAwMDAwMDZDMDQwMEY2N0QKKzoxMDEzNzAwMDAyMDAwRjAwMzc4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QkIKKzoxMDEzODAwMDAyMDAwRjAwMzg4MTcxMDAxODAwMDAwMDgxMDA2QjNERTEKKzoxMDEzOTAwMDAyMDAwRjAwMzk4MTcxMDA0OTAwMDAwMDhCMDUwMEQ2NjIKKzoxMDEzQTAwMDAyMDAwRjAwM0E4MTcxMDAyRjAwMDAwMDA2MDE4MUQ2NzMKKzoxMDEzQjAwMDAyMDAwRjAwM0I4MTcxMDAyRDAwMDAwMDAwMDAwMEQyRjAKKzoxMDEzQzAwMDAyMDAwRjAwM0M4MTcxMDAyMTAwMDAwMEU0MDAwMEQyMDcKKzoxMDEzRDAwMDAyMDAwRjAwM0Q4MTcxMDAzRDAwMDAwMDZGMDA4MEY3QUEKKzoxMDEzRTAwMDAyMDAwRjAwM0U4MTcxMDAyRDAwMDAwMDdGMDEwNkREMkMKKzoxMDEzRjAwMDAyMDAwRjAwM0Y4MTcxMDAxODAwMDAwMDdBM0Q3RjFENDAKKzoxMDE0MDAwMDAyMDAwRjAwNDA4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4RDYKKzoxMDE0MTAwMDAyMDAwRjAwNDE4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MkQKKzoxMDE0MjAwMDAyMDAwRjAwNDI4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MUMKKzoxMDE0MzAwMDAyMDAwRjAwNDM4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4RkYKKzoxMDE0NDAwMDAyMDAwRjAwNDQ4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2RTEKKzoxMDE0NTAwMDAyMDAwRjAwNDU4MTcxMDAyRDAwMDAwMDAwMDAwMEQxNDYKKzoxMDE0NjAwMDAyMDAwRjAwNDY4MTcxMDA0OTAwMDAwMEU0MzM3QUQxODgKKzoxMDE0NzAwMDAyMDAwRjAwNDc4MTcxMDAyRjAwMDAwMDYyMDE3MUQxNEUKKzoxMDE0ODAwMDAyMDAwRjAwNDg4MTcxMDAyRjAwMDAwMDYyMDE2MUQxNEQKKzoxMDE0OTAwMDAyMDAwRjAwNDk4MTcxMDA0OTAwMDAwMEUzMzM0MEQxOTAKKzoxMDE0QTAwMDAyMDAwRjAwNEE4MTcxMDAzRDAwMDAwMDZGMDA4MEY3Q0MKKzoxMDE0QjAwMDAyMDAwRjAwNEI4MTcxMDAyRDAwMDAwMDdGMDEwNkRENEUKKzoxMDE0QzAwMDAyMDAwRjAwNEM4MTcxMDAxODAwMDAwMDdBM0Q3RjFENjIKKzoxMDE0RDAwMDAyMDAwRjAwNEQ4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4RjkKKzoxMDE0RTAwMDAyMDAwRjAwNEU4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4NTAKKzoxMDE0RjAwMDAyMDAwRjAwNEY4MTcxMDA2OTAwMDAwMDYyMzEwMEQ4QzYKKzoxMDE1MDAwMDAyMDAwRjAwNTA4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4MjEKKzoxMDE1MTAwMDAyMDAwRjAwNTE4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2MDMKKzoxMDE1MjAwMDAyMDAwRjAwNTI4MTcxMDAzRDAwMDAwMDZGMDA4MEY3NDMKKzoxMDE1MzAwMDAyMDAwRjAwNTM4MTcxMDAyRDAwMDAwMDdGMDEwNkREQzUKKzoxMDE1NDAwMDAyMDAwRjAwNTQ4MTcxMDAxODAwMDAwMDdBM0Q3RjFERDkKKzoxMDE1NTAwMDAyMDAwRjAwNTU4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4NzAKKzoxMDE1NjAwMDAyMDAwRjAwNTY4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4QzcKKzoxMDE1NzAwMDAyMDAwRjAwNTc4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4QjYKKzoxMDE1ODAwMDAyMDAwRjAwNTg4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4OTkKKzoxMDE1OTAwMDAyMDAwRjAwNTk4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2N0IKKzoxMDE1QTAwMDAyMDAwRjAwNUE4MTcxMDAyRDAwMDAwMDAwMDAwMEQxRTAKKzoxMDE1QjAwMDAyMDAwRjAwNUI4MTcxMDAyRDAwMDAwMEU0MDc2Q0QxNzgKKzoxMDE1QzAwMDAyMDAwRjAwNUM4MTcxMDA0OTAwMDAwMEUzMzM0MEQxNEMKKzoxMDE1RDAwMDAyMDAwRjAwNUQ4MTcxMDAzRDAwMDAwMDZGMDA4MEY3ODgKKzoxMDE1RTAwMDAyMDAwRjAwNUU4MTcxMDAyRDAwMDAwMDdGMDEwNkREMEEKKzoxMDE1RjAwMDAyMDAwRjAwNUY4MTcxMDAxODAwMDAwMDdBM0Q3RjFEMUUKKzoxMDE2MDAwMDAyMDAwRjAwNjA4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4QjQKKzoxMDE2MTAwMDAyMDAwRjAwNjE4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MEIKKzoxMDE2MjAwMDAyMDAwRjAwNjI4MTcxMDA2OTAwMDAwMDYyMzEwMEQ4ODEKKzoxMDE2MzAwMDAyMDAwRjAwNjM4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4REQKKzoxMDE2NDAwMDAyMDAwRjAwNjQ4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2QkYKKzoxMDE2NTAwMDAyMDAwRjAwNjU4MTcxMDAzRDAwMDAwMDZGMDA4MEY3RkYKKzoxMDE2NjAwMDAyMDAwRjAwNjY4MTcxMDAyRDAwMDAwMDdGMDEwNkREODEKKzoxMDE2NzAwMDAyMDAwRjAwNjc4MTcxMDAxODAwMDAwMDdBM0Q3RjFEOTUKKzoxMDE2ODAwMDAyMDAwRjAwNjg4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4MkMKKzoxMDE2OTAwMDAyMDAwRjAwNjk4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4ODMKKzoxMDE2QTAwMDAyMDAwRjAwNkE4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4NzIKKzoxMDE2QjAwMDAyMDAwRjAwNkI4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4NTUKKzoxMDE2QzAwMDAyMDAwRjAwNkM4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2MzcKKzoxMDE2RDAwMDAyMDAwRjAwNkQ4MTcxMDAyRDAwMDAwMDAwMDAwMEQxOUMKKzoxMDE2RTAwMDAyMDAwRjAwNkU4MTcxMDA0OTAwMDAwMEU0MzM3OEQxRTAKKzoxMDE2RjAwMDAyMDAwRjAwNkY4MTcxMDAyRjAwMDAwMDYyMDE3MUQxQTQKKzoxMDE3MDAwMDAyMDAwRjAwNzA4MTcxMDAyRjAwMDAwMDYyMDE2MUQxQTIKKzoxMDE3MTAwMDAyMDAwRjAwNzE4MTcxMDA0OTAwMDAwMEUzMzM0MEQxRTUKKzoxMDE3MjAwMDAyMDAwRjAwNzI4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MjEKKzoxMDE3MzAwMDAyMDAwRjAwNzM4MTcxMDAyRDAwMDAwMDdGMDEwNkREQTMKKzoxMDE3NDAwMDAyMDAwRjAwNzQ4MTcxMDAxODAwMDAwMDdBM0Q3RjFEQjcKKzoxMDE3NTAwMDAyMDAwRjAwNzU4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4NEUKKzoxMDE3NjAwMDAyMDAwRjAwNzY4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4QTUKKzoxMDE3NzAwMDAyMDAwRjAwNzc4MTcxMDA2OTAwMDAwMDYyMzEwMEQ4MUIKKzoxMDE3ODAwMDAyMDAwRjAwNzg4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4NzcKKzoxMDE3OTAwMDAyMDAwRjAwNzk4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2NTkKKzoxMDE3QTAwMDAyMDAwRjAwN0E4MTcxMDAzRDAwMDAwMDZGMDA4MEY3OTkKKzoxMDE3QjAwMDAyMDAwRjAwN0I4MTcxMDAyRDAwMDAwMDdGMDEwNkREMUIKKzoxMDE3QzAwMDAyMDAwRjAwN0M4MTcxMDAxODAwMDAwMDdBM0Q3RjFEMkYKKzoxMDE3RDAwMDAyMDAwRjAwN0Q4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4QzYKKzoxMDE3RTAwMDAyMDAwRjAwN0U4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MUQKKzoxMDE3RjAwMDAyMDAwRjAwN0Y4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MEMKKzoxMDE4MDAwMDAyMDAwRjAwODA4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4RUUKKzoxMDE4MTAwMDAyMDAwRjAwODE4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2RDAKKzoxMDE4MjAwMDAyMDAwRjAwODI4MTcxMDAyRDAwMDAwMDAwMDAwMEQxMzUKKzoxMDE4MzAwMDAyMDAwRjAwODM4MTcxMDAyRDAwMDAwMEU0MDc2OEQxRDEKKzoxMDE4NDAwMDAyMDAwRjAwODQ4MTcxMDA0OTAwMDAwMEUzMzM0MEQxQTEKKzoxMDE4NTAwMDAyMDAwRjAwODU4MTcxMDAzRDAwMDAwMDZGMDA4MEY3REQKKzoxMDE4NjAwMDAyMDAwRjAwODY4MTcxMDAyRDAwMDAwMDdGMDEwNkRENUYKKzoxMDE4NzAwMDAyMDAwRjAwODc4MTcxMDAxODAwMDAwMDdBM0Q3RjFENzMKKzoxMDE4ODAwMDAyMDAwRjAwODg4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4MEEKKzoxMDE4OTAwMDAyMDAwRjAwODk4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4NjEKKzoxMDE4QTAwMDAyMDAwRjAwOEE4MTcxMDA2OTAwMDAwMDYyMzEwMEQ4RDcKKzoxMDE4QjAwMDAyMDAwRjAwOEI4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4MzMKKzoxMDE4QzAwMDAyMDAwRjAwOEM4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2MTUKKzoxMDE4RDAwMDAyMDAwRjAwOEQ4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2MDAKKzoxMDE4RTAwMDAyMDAwRjAwOEU4MTcxMDAwODAwMDAwMDgxMDA3OTIyNDMKKzoxMDE4RjAwMDAyMDAwRjAwOEY4MTcxMDA0OTAwMDAwMDBDMDYwMEQ2MjUKKzoxMDE5MDAwMDAyMDAwRjAwOTA4MTcxMDAyRjAwMDAwMDA2MDE4MUQ2QjcKKzoxMDE5MTAwMDAyMDAwRjAwOTE4MTcxMDAzRjAwMDAwMDAyMDA4MEQ0OUUKKzoxMDE5MjAwMDAyMDAwRjAwOTI4MTcxMDAzRjAwMDAwMDg0MDA4MEQ0MEIKKzoxMDE5MzAwMDAyMDAwRjAwOTM4MTcxMDAzRjAwMDAwMDAyMDEwMEQ1RkEKKzoxMDE5NDAwMDAyMDAwRjAwOTQ4MTcxMDAzRjAwMDAwMDg0MDEwMEQ1NjcKKzoxMDE5NTAwMDAyMDAwRjAwOTU4MTcxMDAzRjAwMDAwMDAyMDI4MEQ1NTcKKzoxMDE5NjAwMDAyMDAwRjAwOTY4MTcxMDAzRjAwMDAwMDA0MDI4MEQ1NDQKKzoxMDE5NzAwMDAyMDAwRjAwOTc4MTcxMDAzRDAwMDAwMDZGMDA4MEY3QUEKKzoxMDE5ODAwMDAyMDAwRjAwOTg4MTcxMDAyRDAwMDAwMDdGMDEwNkREMkMKKzoxMDE5OTAwMDAyMDAwRjAwOTk4MTcxMDAxODAwMDAwMDdBM0Q3RjFENDAKKzoxMDE5QTAwMDAyMDAwRjAwOUE4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4RDcKKzoxMDE5QjAwMDAyMDAwRjAwOUI4MTcxMDA2OTAwMDAwMEU5MzQwMEQ4MkIKKzoxMDE5QzAwMDAyMDAwRjAwOUM4MTcxMDA2OTAwMDAwMDZBMzUwMEQ4OTgKKzoxMDE5RDAwMDAyMDAwRjAwOUQ4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4MDAKKzoxMDE5RTAwMDAyMDAwRjAwOUU4MTcxMDAzMTAwMDAwMDZDMDEwMEQ2RTIKKzoxMDE5RjAwMDAyMDAwRjAwOUY4MTcxMDA0MTAwMDAwMEVCMzQ4MEQ0OTEKKzoxMDFBMDAwMDAyMDAwRjAwQTA4MTcxMDA0MTAwMDAwMDZCMzUwMEQ1N0QKKzoxMDFBMTAwMDAyMDAwRjAwQTE4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QUEKKzoxMDFBMjAwMDAyMDAwRjAwQTI4MTcxMDAxODAwMDAwMDgxMDBFQjM3NTYKKzoxMDFBMzAwMDAyMDAwRjAwQTM4MTcxMDA0OTAwMDAwMDBEM0IwMEQ2OTkKKzoxMDFBNDAwMDAyMDAwRjAwQTQ4MTcxMDA0OTAwMDAwMDA3M0I4MEQ2MEUKKzoxMDFBNTAwMDAyMDAwRjAwQTU4MTcxMDAyRDAwMDAwMDAwMDAwMEQxRTAKKzoxMDFBNjAwMDAyMDAwRjAwQTY4MTcxMDA0OTAwMDAwMDY2MzYwMEREMEIKKzoxMDFBNzAwMDAyMDAwRjAwQTc4MTcxMDA2OTAwMDAwMDc2M0IwMEREQzUKKzoxMDFBODAwMDAyMDAwRjAwQTg4MTcxMDA2OTAwMDAwMDc2M0IwMEREQjQKKzoxMDFBOTAwMDAyMDAwRjAwQTk4MTcxMDA2OTAwMDAwMDc2M0IwMEREQTMKKzoxMDFBQTAwMDAyMDAwRjAwQUE4MTcxMDA2OTAwMDAwMDc2M0IwMEREOTIKKzoxMDFBQjAwMDAyMDAwRjAwQUI4MTcxMDA2OTAwMDAwMDc2M0IwMEREODEKKzoxMDFBQzAwMDAyMDAwRjAwQUM4MTcxMDA2OTAwMDAwMDc2M0IwMERENzAKKzoxMDFBRDAwMDAyMDAwRjAwQUQ4MTcxMDA2OTAwMDAwMDc2M0IwMERENUYKKzoxMDFBRTAwMDAyMDAwRjAwQUU4MTcxMDA2OTAwMDAwMDc2M0IwMERENEUKKzoxMDFBRjAwMDAyMDAwRjAwQUY4MTcxMDA2MTAwMDAwMDZDMDQwMEY2NkQKKzoxMDFCMDAwMDAyMDAwRjAwQjA4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QUEKKzoxMDFCMTAwMDAyMDAwRjAwQjE4MTcxMDAxODAwMDAwMDgxMDBFQjM3NTYKKzoxMDFCMjAwMDAyMDAwRjAwQjI4MTcxMDA0OTAwMDAwMDBFM0IwMEQ2OTgKKzoxMDFCMzAwMDAyMDAwRjAwQjM4MTcxMDA0OTAwMDAwMDA4M0I4MEQ2MEQKKzoxMDFCNDAwMDAyMDAwRjAwQjQ4MTcxMDA0OTAwMDAwMDA5M0I4MEQ1RkMKKzoxMDFCNTAwMDAyMDAwRjAwQjU4MTcxMDAzRDAwMDAwMDZGMDA4MEY3QUEKKzoxMDFCNjAwMDAyMDAwRjAwQjY4MTcxMDAyRDAwMDAwMDdGMDEwNkREMkMKKzoxMDFCNzAwMDAyMDAwRjAwQjc4MTcxMDAxODAwMDAwMDdBM0Q3RjFENDAKKzoxMDFCODAwMDAyMDAwRjAwQjg4MTcxMDA0OTAwMDAwMDZDMzYwMEQ4RDcKKzoxMDFCOTAwMDAyMDAwRjAwQjk4MTcxMDA2OTAwMDAwMEVCMzUwMEQ4MjgKKzoxMDFCQTAwMDAyMDAwRjAwQkE4MTcxMDA2OTAwMDAwMEU3MzMwMEQ4MUQKKzoxMDFCQjAwMDAyMDAwRjAwQkI4MTcxMDA2OTAwMDAwMEVGMzcwMEQ4MDAKKzoxMDFCQzAwMDAyMDAwRjAwQkM4MTcxMDA0MTAwMDAwMEVDMDcwMEQ2NEMKKzoxMDFCRDAwMDAyMDAwRjAwQkQ4MTcxMDA0MTAwMDAwMDZCMDg4MEQ1M0MKKzoxMDFCRTAwMDAyMDAwRjAwQkU4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QkMKKzoxMDFCRjAwMDAyMDAwRjAwQkY4MTcxMDAxODAwMDAwMDgxMDBFRDM3NjYKKzoxMDFDMDAwMDAyMDAwRjAwQzA4MTcxMDAzRjAwMDAwMDgwRkZGRkQ0ODAKKzoxMDFDMTAwMDAyMDAwRjAwQzE4MTcxMDAzRjAwMDAwMDA0MDAwMkQ1RTYKKzoxMDFDMjAwMDAyMDAwRjAwQzI4MTcxMDAzRjAwMDAwMDAxMDAxOEQ1QzIKKzoxMDFDMzAwMDAyMDAwRjAwQzM4MTcxMDA0OTAwMDAwMDZBM0IwMEREMTMKKzoxMDFDNDAwMDAyMDAwRjAwQzQ4MTcxMDA2OTAwMDAwMDY5M0IwMERERTMKKzoxMDFDNTAwMDAyMDAwRjAwQzU4MTcxMDA2OTAwMDAwMDY5M0IwMERERDIKKzoxMDFDNjAwMDAyMDAwRjAwQzY4MTcxMDAyMTAwMDAwMEVBMDAwMEQ1Q0IKKzoxMDFDNzAwMDAyMDAwRjAwQzc4MTcxMDA0OTAwMDAwMDZBM0IwRUREQzEKKzoxMDFDODAwMDAyMDAwRjAwQzg4MTcxMDAzNTAwMDAwMDdBMDAwNEQxMDUKKzoxMDFDOTAwMDAyMDAwRjAwQzk4MTcxMDAxODAwMDAwMDgxMDBGNTM3QjMKKzoxMDFDQTAwMDAyMDAwRjAwQ0E4MTcxMDAzRjAwMDAwMDgwRkZGRkQ0RDYKKzoxMDFDQjAwMDAyMDAwRjAwQ0I4MTcxMDAzRjAwMDAwMDA0MDAwNEQ1M0EKKzoxMDFDQzAwMDAyMDAwRjAwQ0M4MTcxMDAzRjAwMDAwMDAxMDAxOEQ1MTgKKzoxMDFDRDAwMDAyMDAwRjAwQ0Q4MTcxMDA2OTAwMDAwMDY5M0IwMERENEEKKzoxMDFDRTAwMDAyMDAwRjAwQ0U4MTcxMDA2OTAwMDAwMDY5M0IwMEREMzkKKzoxMDFDRjAwMDAyMDAwRjAwQ0Y4MTcxMDA0OTAwMDAwMDZBM0IwMERENDcKKzoxMDFEMDAwMDAyMDAwRjAwRDA4MTcxMDA1MTAwMDAwMEVBMDAwMEY1RDAKKzoxMDFEMTAwMDAyMDAwRjAwRDE4MTcxMDAzRDAwMDAwMDZGMDA4MEY3Q0MKKzoxMDFEMjAwMDAyMDAwRjAwRDI4MTcxMDAzRDAwMDAwMDZGMDA4MEY3QkIKKzoxMDFEMzAwMDAyMDAwRjAwRDM4MTcxMDA0OTAwMDAwMDZBM0IwRURERjQKKzoxMDFENDAwMDAyMDAwRjAwRDQ4MTcxMDAzNTAwMDAwMDdBODAwNEQxQjgKKzoxMDFENTAwMDAyMDAwRjAwRDU4MTcxMDAxODAwMDAwMDgxMDBGNTM3RTYKKzoxMDFENjAwMDAyMDAwRjAwRDY4MTcxMDAzRjAwMDAwMDA0N0Y3RkM3OTIKKzoxMDFENzAwMDAyMDAwRjAwRDc4MTcxMDAzRjAwMDAwMDAxN0Y3RkM3ODQKKzoxMDFEODAwMDAyMDAwRjAwRDg4MTcxMDAzRjAwMDAwMDAwNDA4MEQ2QTMKKzoxMDFEOTAwMDAyMDAwRjAwRDk4MTcxMDAzRjAwMDAwMDAwQzAwM0QxOTQKKzoxMDFEQTAwMDAyMDAwRjAwREE4MTcxMDAyNTAwMDAwMEUyMDAyMERFNTEKKzoxMDFEQjAwMDAyMDAwRjAwREI4MTcxMDA0OTAwMDAwMDRFMjc4MERFMjkKKzoxMDFEQzAwMDAyMDAwRjAwREM4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MTEKKzoxMDFERDAwMDAyMDAwRjAwREQ4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MDAKKzoxMDFERTAwMDAyMDAwRjAwREU4MTcxMDAzNTAwMDAwMEUyMDAwMEQxMkEKKzoxMDFERjAwMDAyMDAwRjAwREY4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2ODkKKzoxMDFFMDAwMDAyMDAwRjAwRTA4MTcxMDAxODAwMDAwMDgxMDBGNTM3MkEKKzoxMDFFMTAwMDAyMDAwRjAwRTE4MTcxMDAzRjAwMDAwMDA0MzAwMEREOEUKKzoxMDFFMjAwMDAyMDAwRjAwRTI4MTcxMDAzRjAwMDAwMDAxMDAxOEREOTgKKzoxMDFFMzAwMDAyMDAwRjAwRTM4MTcxMDA2OTAwMDAwMDNBMUQwMEREMUYKKzoxMDFFNDAwMDAyMDAwRjAwRTQ4MTcxMDA2OTAwMDAwMDdBM0QwMEREQUUKKzoxMDFFNTAwMDAyMDAwRjAwRTU4MTcxMDA3RDAwMDAwMDEzQTc2MEM3M0MKKzoxMDFFNjAwMDAyMDAwRjAwRTY4MTcxMDAzMTAwMDAwMDQxMDA4MEMwRDcKKzoxMDFFNzAwMDAyMDAwRjAwRTc4MTcxMDAzMTAwMDAwMDQ4MDAwMEM0M0IKKzoxMDFFODAwMDAyMDAwRjAwRTg4MTcxMDAzMTAwMDAwMDQ1MDA4MEMyQUYKKzoxMDFFOTAwMDAyMDAwRjAwRTk4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNTYKKzoxMDFFQTAwMDAyMDAwRjAwRUE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDFFQjAwMDAyMDAwRjAwRUI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDFFQzAwMDAyMDAwRjAwRUM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDFFRDAwMDAyMDAwRjAwRUQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDFFRTAwMDAyMDAwRjAwRUU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMDEKKzoxMDFFRjAwMDAyMDAwRjAwRUY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRjAKKzoxMDFGMDAwMDAyMDAwRjAwRjA4MTcxMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDFGMTAwMDAyMDAwRjAwRjE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDFGMjAwMDAyMDAwRjAwRjI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQkMKKzoxMDFGMzAwMDAyMDAwRjAwRjM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQUIKKzoxMDFGNDAwMDAyMDAwRjAwRjQ4MTcxMDAyRDAwMDAwMDAwMDAwMERCOTIKKzoxMDFGNTAwMDAyMDAwRjAwRjU4MTcxMDAzRjAwMDAwMDA0MzAwMEREMzkKKzoxMDFGNjAwMDAyMDAwRjAwRjY4MTcxMDAzRjAwMDAwMDAxMDAxOERENDMKKzoxMDFGNzAwMDAyMDAwRjAwRjc4MTcxMDA2OTAwMDAwMDdBM0QwMERENkEKKzoxMDFGODAwMDAyMDAwRjAwRjg4MTcxMDAzRjAwMDAwMDA0MDAwMEREMzYKKzoxMDFGOTAwMDAyMDAwRjAwRjk4MTcxMDA2OTAwMDAwMDdBM0QwMERENDgKKzoxMDFGQTAwMDAyMDAwRjAwRkE4MTcxMDAyRDAwMDAwMDAwMDA4MEQzQjQKKzoxMDFGQjAwMDAyMDAwRjAwRkI4MTcxMDAzRjAwMDAwMDA0MDQwMERERkYKKzoxMDFGQzAwMDAyMDAwRjAwRkM4MTcxMDAzRjAwMDAwMDAxMDAxOEREREQKKzoxMDFGRDAwMDAyMDAwRjAwRkQ4MTcxMDA2OTAwMDAwMDE0MEEwMEREOUQKKzoxMDFGRTAwMDAyMDAwRjAwRkU4MTcxMDA2OTAwMDAwMDdBM0QwMERERjMKKzoxMDFGRjAwMDAyMDAwRjAwRkY4MTcxMDA0OTAwMDAwMDk0MzMwNEQxRkEKKzoxMDIwMDAwMDAyMDAwRjAwMDA4MjcxMDAzRjAwMDAwMDg0MDQwMEREMjgKKzoxMDIwMTAwMDAyMDAwRjAwMDE4MjcxMDAzRjAwMDAwMDAxMDAxOEREODYKKzoxMDIwMjAwMDAyMDAwRjAwMDI4MjcxMDA2OTAwMDAwMDYyMzEwMERERDEKKzoxMDIwMzAwMDAyMDAwRjAwMDM4MjcxMDA2OTAwMDAwMDdBM0QwMEREOUMKKzoxMDIwNDAwMDAyMDAwRjAwMDQ4MjcxMDAzRjAwMDAwMDA0MDUwMERENjMKKzoxMDIwNTAwMDAyMDAwRjAwMDU4MjcxMDAzRjAwMDAwMDAxMDAxOERENDIKKzoxMDIwNjAwMDAyMDAwRjAwMDY4MjcxMDA2OTAwMDAwMDk1MEEwMEREODEKKzoxMDIwNzAwMDAyMDAwRjAwMDc4MjcxMDA2OTAwMDAwMDdBM0QwMERENTgKKzoxMDIwODAwMDAyMDAwRjAwMDg4MjcxMDA0OTAwMDAwMDk1MzMwNEQxNUUKKzoxMDIwOTAwMDAyMDAwRjAwMDk4MjcxMDAzRjAwMDAwMDg0MDUwMEREOEUKKzoxMDIwQTAwMDAyMDAwRjAwMEE4MjcxMDAzRjAwMDAwMDAxMDAxOERERUQKKzoxMDIwQjAwMDAyMDAwRjAwMEI4MjcxMDA2OTAwMDAwMDYyMzEwMEREMzgKKzoxMDIwQzAwMDAyMDAwRjAwMEM4MjcxMDA2OTAwMDAwMDdBM0QwMEREMDMKKzoxMDIwRDAwMDAyMDAwRjAwMEQ4MjcxMDAzRjAwMDAwMDA0MDYwMEREQzkKKzoxMDIwRTAwMDAyMDAwRjAwMEU4MjcxMDAzRjAwMDAwMDAxMDAxOEREQTkKKzoxMDIwRjAwMDAyMDAwRjAwMEY4MjcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDIxMDAwMDAyMDAwRjAwMTA4MjcxMDAzRjAwMDAwMDg0MDAwMEREMUIKKzoxMDIxMTAwMDAyMDAwRjAwMTE4MjcxMDA2OTAwMDAwMDdBM0QwMEREQUQKKzoxMDIxMjAwMDAyMDAwRjAwMTI4MjcxMDAzRjAwMDAwMDA0MDAwMERENzkKKzoxMDIxMzAwMDAyMDAwRjAwMTM4MjcxMDAzRjAwMDAwMDAxMDAxOERENTMKKzoxMDIxNDAwMDAyMDAwRjAwMTQ4MjcxMDA2OTAwMDAwMDE2MEIwMEREMTAKKzoxMDIxNTAwMDAyMDAwRjAwMTU4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDIxNjAwMDAyMDAwRjAwMTY4MjcxMDAzRjAwMDAwMDA0MTAwMEREMjUKKzoxMDIxNzAwMDAyMDAwRjAwMTc4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDIxODAwMDAyMDAwRjAwMTg4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDIxOTAwMDAyMDAwRjAwMTk4MjcxMDAzRjAwMDAwMDA0MDAwMEREMDIKKzoxMDIxQTAwMDAyMDAwRjAwMUE4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDIxQjAwMDAyMDAwRjAwMUI4MjcxMDAzRjAwMDAwMDg0MTAwMERENTAKKzoxMDIxQzAwMDAyMDAwRjAwMUM4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDIxRDAwMDAyMDAwRjAwMUQ4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDIxRTAwMDAyMDAwRjAwMUU4MjcxMDAzRjAwMDAwMDA0ODAwMUREMkMKKzoxMDIxRjAwMDAyMDAwRjAwMUY4MjcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDIyMDAwMDAyMDAwRjAwMjA4MjcxMDAzRjAwMDAwMDA0MTEwMERENzkKKzoxMDIyMTAwMDAyMDAwRjAwMjE4MjcxMDAzRjAwMDAwMDAxMDAxOERENjQKKzoxMDIyMjAwMDAyMDAwRjAwMjI4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEIKKzoxMDIyMzAwMDAyMDAwRjAwMjM4MjcxMDAzRjAwMDAwMDA0MDAwMERENTcKKzoxMDIyNDAwMDAyMDAwRjAwMjQ4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDIyNTAwMDAyMDAwRjAwMjU4MjcxMDAzRjAwMDAwMDg0MTEwMEREQTQKKzoxMDIyNjAwMDAyMDAwRjAwMjY4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDIyNzAwMDAyMDAwRjAwMjc4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDIyODAwMDAyMDAwRjAwMjg4MjcxMDAzRjAwMDAwMDA0MDAxNkRERUMKKzoxMDIyOTAwMDAyMDAwRjAwMjk4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDIyQTAwMDAyMDAwRjAwMkE4MjcxMDAzRjAwMDAwMDA0MTIwMEREQ0UKKzoxMDIyQjAwMDAyMDAwRjAwMkI4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDIyQzAwMDAyMDAwRjAwMkM4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDIyRDAwMDAyMDAwRjAwMkQ4MjcxMDAzRjAwMDAwMDA0MDAwMEREQUQKKzoxMDIyRTAwMDAyMDAwRjAwMkU4MjcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDIyRjAwMDAyMDAwRjAwMkY4MjcxMDAzRjAwMDAwMDg0MTIwMERERjkKKzoxMDIzMDAwMDAyMDAwRjAwMzA4MjcxMDAzRjAwMDAwMDAxMDAxOERENjQKKzoxMDIzMTAwMDAyMDAwRjAwMzE4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEIKKzoxMDIzMjAwMDAyMDAwRjAwMzI4MjcxMDAzRjAwMDAwMDA0MDAwMERENTcKKzoxMDIzMzAwMDAyMDAwRjAwMzM4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDIzNDAwMDAyMDAwRjAwMzQ4MjcxMDAzRjAwMDAwMDA0MTMwMEREMjIKKzoxMDIzNTAwMDAyMDAwRjAwMzU4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDIzNjAwMDAyMDAwRjAwMzY4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDIzNzAwMDAyMDAwRjAwMzc4MjcxMDAzRjAwMDAwMDA0MDAwMEREMDIKKzoxMDIzODAwMDAyMDAwRjAwMzg4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDIzOTAwMDAyMDAwRjAwMzk4MjcxMDAzRjAwMDAwMDg0MTMwMERENEQKKzoxMDIzQTAwMDAyMDAwRjAwM0E4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDIzQjAwMDAyMDAwRjAwM0I4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDIzQzAwMDAyMDAwRjAwM0M4MjcxMDAzRjAwMDAwMDA0MDAwNUREQTgKKzoxMDIzRDAwMDAyMDAwRjAwM0Q4MjcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDIzRTAwMDAyMDAwRjAwM0U4MjcxMDAzRjAwMDAwMDA0MjAwMERENkIKKzoxMDIzRjAwMDAyMDAwRjAwM0Y4MjcxMDAzRjAwMDAwMDAxMDAxOERENjUKKzoxMDI0MDAwMDAyMDAwRjAwNDA4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEIKKzoxMDI0MTAwMDAyMDAwRjAwNDE4MjcxMDAzRjAwMDAwMDA0MDAwMERENTcKKzoxMDI0MjAwMDAyMDAwRjAwNDI4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDI0MzAwMDAyMDAwRjAwNDM4MjcxMDAzRjAwMDAwMDg0MjAwMEREOTUKKzoxMDI0NDAwMDAyMDAwRjAwNDQ4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDI0NTAwMDAyMDAwRjAwNDU4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDI0NjAwMDAyMDAwRjAwNDY4MjcxMDAzRjAwMDAwMDA0OTAwMURENzEKKzoxMDI0NzAwMDAyMDAwRjAwNDc4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDI0ODAwMDAyMDAwRjAwNDg4MjcxMDAzRjAwMDAwMDA0MjEwMEREQkYKKzoxMDI0OTAwMDAyMDAwRjAwNDk4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDI0QTAwMDAyMDAwRjAwNEE4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDI0QjAwMDAyMDAwRjAwNEI4MjcxMDAzRjAwMDAwMDg0MDAwMEREMkQKKzoxMDI0QzAwMDAyMDAwRjAwNEM4MjcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDI0RDAwMDAyMDAwRjAwNEQ4MjcxMDAzRjAwMDAwMDg0MjEwMERERUEKKzoxMDI0RTAwMDAyMDAwRjAwNEU4MjcxMDAzRjAwMDAwMDAxMDAxOERENjUKKzoxMDI0RjAwMDAyMDAwRjAwNEY4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEMKKzoxMDI1MDAwMDAyMDAwRjAwNTA4MjcxMDAzRjAwMDAwMDA0MDAwMERENTcKKzoxMDI1MTAwMDAyMDAwRjAwNTE4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDI1MjAwMDAyMDAwRjAwNTI4MjcxMDAzRjAwMDAwMDA0MjIwMEREMTMKKzoxMDI1MzAwMDAyMDAwRjAwNTM4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDI1NDAwMDAyMDAwRjAwNTQ4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDI1NTAwMDAyMDAwRjAwNTU4MjcxMDAzRjAwMDAwMDg0MDIwMEREODAKKzoxMDI1NjAwMDAyMDAwRjAwNTY4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDI1NzAwMDAyMDAwRjAwNTc4MjcxMDAzRjAwMDAwMDg0MjIwMEREM0UKKzoxMDI1ODAwMDAyMDAwRjAwNTg4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDI1OTAwMDAyMDAwRjAwNTk4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDI1QTAwMDAyMDAwRjAwNUE4MjcxMDAzRjAwMDAwMDA0MDAwMEREQUQKKzoxMDI1QjAwMDAyMDAwRjAwNUI4MjcxMDA2OTAwMDAwMDdBM0QwMEREQkYKKzoxMDI1QzAwMDAyMDAwRjAwNUM4MjcxMDAzRjAwMDAwMDA0MjMwMERENjgKKzoxMDI1RDAwMDAyMDAwRjAwNUQ4MjcxMDAzRjAwMDAwMDAxMDAxOERENjUKKzoxMDI1RTAwMDAyMDAwRjAwNUU4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEMKKzoxMDI1RjAwMDAyMDAwRjAwNUY4MjcxMDAzRjAwMDAwMDA0MDAwMERENTgKKzoxMDI2MDAwMDAyMDAwRjAwNjA4MjcxMDA2OTAwMDAwMDdBM0QwMERENjkKKzoxMDI2MTAwMDAyMDAwRjAwNjE4MjcxMDAzRjAwMDAwMDA0MTgwMEREMUQKKzoxMDI2MjAwMDAyMDAwRjAwNjI4MjcxMDAzRjAwMDAwMDAxMDAxOEREMEYKKzoxMDI2MzAwMDAyMDAwRjAwNjM4MjcxMDA2OTAwMDAwMDk3MEIwMERENEIKKzoxMDI2NDAwMDAyMDAwRjAwNjQ4MjcxMDA2OTAwMDAwMDdBM0QwMEREMjUKKzoxMDI2NTAwMDAyMDAwRjAwNjU4MjcxMDA0OTAwMDAwMDk3MzMwNEQxMjkKKzoxMDI2NjAwMDAyMDAwRjAwNjY4MjcxMDAzRjAwMDAwMDg0MTgwMERENDgKKzoxMDI2NzAwMDAyMDAwRjAwNjc4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDI2ODAwMDAyMDAwRjAwNjg4MjcxMDA2OTAwMDAwMDYyMzEwMEREMDUKKzoxMDI2OTAwMDAyMDAwRjAwNjk4MjcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDI2QTAwMDAyMDAwRjAwNkE4MjcxMDAzRjAwMDAwMDA0MTkwMEREODMKKzoxMDI2QjAwMDAyMDAwRjAwNkI4MjcxMDAzRjAwMDAwMDAxMDAxOERENzYKKzoxMDI2QzAwMDAyMDAwRjAwNkM4MjcxMDA2OTAwMDAwMDE4MEMwMEREMzAKKzoxMDI2RDAwMDAyMDAwRjAwNkQ4MjcxMDA2OTAwMDAwMDdBM0QwMEREOEMKKzoxMDI2RTAwMDAyMDAwRjAwNkU4MjcxMDA0OTAwMDAwMDk4MzMwNEQxOEYKKzoxMDI2RjAwMDAyMDAwRjAwNkY4MjcxMDAzRjAwMDAwMDg0MTkwMEREQUUKKzoxMDI3MDAwMDAyMDAwRjAwNzA4MjcxMDAzRjAwMDAwMDAxMDAxOEREMjAKKzoxMDI3MTAwMDAyMDAwRjAwNzE4MjcxMDA2OTAwMDAwMDYyMzEwMERENkIKKzoxMDI3MjAwMDAyMDAwRjAwNzI4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDI3MzAwMDAyMDAwRjAwNzM4MjcxMDAzRjAwMDAwMDA0MUEwMERERTgKKzoxMDI3NDAwMDAyMDAwRjAwNzQ4MjcxMDAzRjAwMDAwMDAxMDAxOEREREMKKzoxMDI3NTAwMDAyMDAwRjAwNzU4MjcxMDA2OTAwMDAwMDdBM0QwMEREMDMKKzoxMDI3NjAwMDAyMDAwRjAwNzY4MjcxMDAzRjAwMDAwMDA0MDAwMEREQ0YKKzoxMDI3NzAwMDAyMDAwRjAwNzc4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDI3ODAwMDAyMDAwRjAwNzg4MjcxMDAzRjAwMDAwMDg0MUEwMEREMTMKKzoxMDI3OTAwMDAyMDAwRjAwNzk4MjcxMDAzRjAwMDAwMDAxMDAxOEREODcKKzoxMDI3QTAwMDAyMDAwRjAwN0E4MjcxMDA2OTAwMDAwMDE2MEIwMERENDQKKzoxMDI3QjAwMDAyMDAwRjAwN0I4MjcxMDA2OTAwMDAwMDdBM0QwMEREOUQKKzoxMDI3QzAwMDAyMDAwRjAwN0M4MjcxMDAzRjAwMDAwMDA0MUMwMERENEQKKzoxMDI3RDAwMDAyMDAwRjAwN0Q4MjcxMDAzRjAwMDAwMDAxMDAxOERENDMKKzoxMDI3RTAwMDAyMDAwRjAwN0U4MjcxMDA2OTAwMDAwMDk5MEMwMEREN0MKKzoxMDI3RjAwMDAyMDAwRjAwN0Y4MjcxMDA2OTAwMDAwMDdBM0QwMERENTkKKzoxMDI4MDAwMDAyMDAwRjAwODA4MjcxMDAzRjAwMDAwMDg0MUMwMEREODgKKzoxMDI4MTAwMDAyMDAwRjAwODE4MjcxMDAzRjAwMDAwMDAxMDAxOERERkUKKzoxMDI4MjAwMDAyMDAwRjAwODI4MjcxMDA2OTAwMDAwMDFBMEQwMEREQjUKKzoxMDI4MzAwMDAyMDAwRjAwODM4MjcxMDA2OTAwMDAwMDdBM0QwMEREMTQKKzoxMDI4NDAwMDAyMDAwRjAwODQ4MjcxMDAzRjAwMDAwMDA0MUQwMEREQzMKKzoxMDI4NTAwMDAyMDAwRjAwODU4MjcxMDAzRjAwMDAwMDAxMDAxOEREQkEKKzoxMDI4NjAwMDAyMDAwRjAwODY4MjcxMDA2OTAwMDAwMDlCMEQwMERERjAKKzoxMDI4NzAwMDAyMDAwRjAwODc4MjcxMDA2OTAwMDAwMDdBM0QwMERERDAKKzoxMDI4ODAwMDAyMDAwRjAwODg4MjcxMDA0OTAwMDAwMDlCMzMwNEQxRDAKKzoxMDI4OTAwMDAyMDAwRjAwODk4MjcxMDAzRjAwMDAwMDg0MUQwMERERUUKKzoxMDI4QTAwMDAyMDAwRjAwOEE4MjcxMDAzRjAwMDAwMDAxMDAxOERENjUKKzoxMDI4QjAwMDAyMDAwRjAwOEI4MjcxMDA2OTAwMDAwMDYyMzEwMEREQjAKKzoxMDI4QzAwMDAyMDAwRjAwOEM4MjcxMDA2OTAwMDAwMDdBM0QwMEREN0IKKzoxMDI4RDAwMDAyMDAwRjAwOEQ4MjcxMDAzRjAwMDAwMDA0MUUwMEREMjkKKzoxMDI4RTAwMDAyMDAwRjAwOEU4MjcxMDAzRjAwMDAwMDAxMDAxOEREMjEKKzoxMDI4RjAwMDAyMDAwRjAwOEY4MjcxMDA2OTAwMDAwMDFDMEUwMERERDUKKzoxMDI5MDAwMDAyMDAwRjAwOTA4MjcxMDA2OTAwMDAwMDdBM0QwMEREMzYKKzoxMDI5MTAwMDAyMDAwRjAwOTE4MjcxMDAzRjAwMDAwMDA0MDEwMEREMDEKKzoxMDI5MjAwMDAyMDAwRjAwOTI4MjcxMDAzRjAwMDAwMDAxMDAxOEREREMKKzoxMDI5MzAwMDAyMDAwRjAwOTM4MjcxMDA2OTAwMDAwMDdBM0QwMEREMDMKKzoxMDI5NDAwMDAyMDAwRjAwOTQ4MjcxMDAzRjAwMDAwMDA0MEYwMEREQzAKKzoxMDI5NTAwMDAyMDAwRjAwOTU4MjcxMDA2OTAwMDAwMDdBM0QwMERERTEKKzoxMDI5NjAwMDAyMDAwRjAwOTY4MjcxMDA3RDAwMDAwMDEzQTc2MEM3NkYKKzoxMDI5NzAwMDAyMDAwRjAwOTc4MjcxMDAzMTAwMDAwMDQxMDA4MEMwMEEKKzoxMDI5ODAwMDAyMDAwRjAwOTg4MjcxMDAzMTAwMDAwMDQ4MDAwMEM0NkUKKzoxMDI5OTAwMDAyMDAwRjAwOTk4MjcxMDAzMTAwMDAwMDQ1MDA4MEMyRTIKKzoxMDI5QTAwMDAyMDAwRjAwOUE4MjcxMDAzMTAwMDAwMDZEMDA4MEQ2OTUKKzoxMDI5QjAwMDBGMDAwRjAwNjQwMDcwMDAwMDAwMDAwMDAwMDAwMDAwMjUKKzoxMDI5QzAwMDAwMDAwMDAwNDAwMDAwMDAwMDAxMDAwMDAwMDQwMDAwQzIKKzoxMDI5RDAwMDY0MDAwMDAwNTQwMDAwMDAwMDAwMDAwMDAwMjQwMDAwMUIKKzoxMDI5RTAwMDAwMjgwMDAwMDAwNDAwMDA4MDI4MDAwMDgwMDEwMDAwOTIKKzoxMDI5RjAwMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKKzoxMDJBMDAwMDUxMDAwMDAwN0QwMTAwMDAwODAwMDAwMDUxMDAwMDAwOUUKKzoxMDJBMTAwMDVEMDAwMDAwMDAwMDAwMDAwOTAwMDAwMDAwNTAwMDAwMDAKKzoxMDJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwRjAwMEYwMEY0MDE3MDAwMjMKKzoxMDJBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwNTYKKzoxMDJBNDAwMDAwMDEwMDAwMDAwNDAwMDA2NDAwMDAwMDU0MDAwMDAwQzkKKzoxMDJBNTAwMDAwMDAwMDAwMDAyNDAwMDAwMDI4MDAwMDAwMDQwMDAwMjYKKzoxMDJBNjAwMDgwMjgwMDAwODAwMTAwMDAwMzAwMDAwMDAwMDAwMDAwM0EKKzoxMDJBNzAwMDAwMDAwMDAwMDAwMDAwMDA1MTAwMDAwMDdEMDEwMDAwODcKKzoxMDJBODAwMDA4MDAwMDAwNTEwMDAwMDA1RDAwMDAwMDAwMDAwMDAwOTAKKzoxMDJBOTAwMDA5MDAwMDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKKzoxMDJBQTAwMDAyMDAwRjAwMDAwMDcwMDAwMTAwMDAwMDAwMDAwMDAwQTQKKzoxMDJBQjAwMDAyMDAwRjAwMDAwMDcwMDAwMTAwMDAwMDAwMDAwMDAwOTQKKzoxMDJBQzAwMDAyMDAwRjAwMDA4MDcxMDAyNTAwMDAwMDAyMDAwRURERjIKKzoxMDJBRDAwMDAyMDAwRjAwMDE4MDcxMDAwNDAwMDAwMDc2M0JEMTAxNkMKKzoxMDJBRTAwMDAyMDAwRjAwMDI4MDcxMDAyNTAwMDAwMDgyMDAwRURENTAKKzoxMDJBRjAwMDAyMDAwRjAwMDM4MDcxMDAwNDAwMDAwMDc2M0I4OTAyOTEKKzoxMDJCMDAwMDAyMDAwRjAwMDQ4MDcxMDAyNTAwMDAwMDAyMDEwRUREQUMKKzoxMDJCMTAwMDAyMDAwRjAwMDU4MDcxMDAwNDAwMDAwMDc2M0I4NTAyNzIKKzoxMDJCMjAwMDAyMDAwRjAwMDY4MDcxMDAyNTAwMDAwMDgyMDEwRUREMEEKKzoxMDJCMzAwMDAyMDAwRjAwMDc4MDcxMDAwNDAwMDAwMDc2M0JGRDAzRDcKKzoxMDJCNDAwMDAyMDAwRjAwMDg4MDcxMDAwOTAwMDAwMDc2M0I4MUNGNzEKKzoxMDJCNTAwMDAyMDAwRjAwMDk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDJCNjAwMDAyMDAwRjAwMEE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDJCNzAwMDAyMDAwRjAwMEI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDJCODAwMDAyMDAwRjAwMEM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDJCOTAwMDAyMDAwRjAwMEQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDJCQTAwMDAyMDAwRjAwMEU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDJCQjAwMDAyMDAwRjAwMEY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDJCQzAwMDAyMDAwRjAwMTA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDJCRDAwMDAyMDAwRjAwMTE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDJCRTAwMDAyMDAwRjAwMTI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDJCRjAwMDAyMDAwRjAwMTM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDJDMDAwMDAyMDAwRjAwMTQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUUKKzoxMDJDMTAwMDAyMDAwRjAwMTU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDJDMjAwMDAyMDAwRjAwMTY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDJDMzAwMDAyMDAwRjAwMTc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDJDNDAwMDAyMDAwRjAwMTg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDJDNTAwMDAyMDAwRjAwMTk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDJDNjAwMDAyMDAwRjAwMUE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDJDNzAwMDAyMDAwRjAwMUI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDJDODAwMDAyMDAwRjAwMUM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDJDOTAwMDAyMDAwRjAwMUQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDJDQTAwMDAyMDAwRjAwMUU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDJDQjAwMDAyMDAwRjAwMUY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDJDQzAwMDAyMDAwRjAwMjA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDJDRDAwMDAyMDAwRjAwMjE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDJDRTAwMDAyMDAwRjAwMjI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDJDRjAwMDAyMDAwRjAwMjM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDJEMDAwMDAyMDAwRjAwMjQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUQKKzoxMDJEMTAwMDAyMDAwRjAwMjU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDJEMjAwMDAyMDAwRjAwMjY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDJEMzAwMDAyMDAwRjAwMjc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDJENDAwMDAyMDAwRjAwMjg4MDcxMDA0OTAwMDAwMDAwM0IwMEMwMTUKKzoxMDJENTAwMDAyMDAwRjAwMjk4MDcxMDA0OTAwMDAwMDAyM0I4MEMwODIKKzoxMDJENjAwMDAyMDAwRjAwMkE4MDcxMDA0OTAwMDAwMDAzM0IwMEMxRUYKKzoxMDJENzAwMDAyMDAwRjAwMkI4MDcxMDA0OTAwMDAwMDA0M0I4MEMxNUQKKzoxMDJEODAwMDAyMDAwRjAwMkM4MDcxMDAyOTAwMDAwMDc2MDA2MERGMzcKKzoxMDJEOTAwMDAyMDAwRjAwMkQ4MDcxMDA0OTAwMDAwMDdEM0I0NERGRTAKKzoxMDJEQTAwMDAyMDAwRjAwMkU4MDcxMDA3OTAwMDAwMDc2OTA2MEZEMTcKKzoxMDJEQjAwMDAyMDAwRjAwMkY4MDcxMDAzRDAwMDAwMDZGMDA4MEY3QkYKKzoxMDJEQzAwMDAyMDAwRjAwMzA4MDcxMDAzRDAwMDAwMDZGMDA4MEY3QUUKKzoxMDJERDAwMDAyMDAwRjAwMzE4MDcxMDAzRDAwMDAwMDZGMDA4MEY3OUQKKzoxMDJERTAwMDAyMDAwRjAwMzI4MDcxMDAzRDAwMDAwMDZGMDA4MEY3OEMKKzoxMDJERjAwMDAyMDAwRjAwMzM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDJFMDAwMDAyMDAwRjAwMzQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDJFMTAwMDAyMDAwRjAwMzU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDJFMjAwMDAyMDAwRjAwMzY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDJFMzAwMDAyMDAwRjAwMzc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDJFNDAwMDAyMDAwRjAwMzg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDJFNTAwMDAyMDAwRjAwMzk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDJFNjAwMDAyMDAwRjAwM0E4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDJFNzAwMDAyMDAwRjAwM0I4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDJFODAwMDAyMDAwRjAwM0M4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDJFOTAwMDAyMDAwRjAwM0Q4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDJFQTAwMDAyMDAwRjAwM0U4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDJFQjAwMDAyMDAwRjAwM0Y4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDJFQzAwMDAyMDAwRjAwNDA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDJFRDAwMDAyMDAwRjAwNDE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDJFRTAwMDAyMDAwRjAwNDI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDJFRjAwMDAyMDAwRjAwNDM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDJGMDAwMDAyMDAwRjAwNDQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDJGMTAwMDAyMDAwRjAwNDU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDJGMjAwMDAyMDAwRjAwNDY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDJGMzAwMDAyMDAwRjAwNDc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDJGNDAwMDAyMDAwRjAwNDg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDJGNTAwMDAyMDAwRjAwNDk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDJGNjAwMDAyMDAwRjAwNEE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDJGNzAwMDAyMDAwRjAwNEI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDJGODAwMDAyMDAwRjAwNEM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDJGOTAwMDAyMDAwRjAwNEQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDJGQTAwMDAyMDAwRjAwNEU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDJGQjAwMDAyMDAwRjAwNEY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDJGQzAwMDAyMDAwRjAwNTA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDJGRDAwMDAyMDAwRjAwNTE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDJGRTAwMDAyMDAwRjAwNTI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDJGRjAwMDAyMDAwRjAwNTM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDMwMDAwMDAyMDAwRjAwNTQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDMwMTAwMDAyMDAwRjAwNTU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDMwMjAwMDAyMDAwRjAwNTY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDMwMzAwMDAyMDAwRjAwNTc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDMwNDAwMDAyMDAwRjAwNTg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDMwNTAwMDAyMDAwRjAwNTk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDMwNjAwMDAyMDAwRjAwNUE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDMwNzAwMDAyMDAwRjAwNUI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDMwODAwMDAyMDAwRjAwNUM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDMwOTAwMDAyMDAwRjAwNUQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDMwQTAwMDAyMDAwRjAwNUU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDMwQjAwMDAyMDAwRjAwNUY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDMwQzAwMDAyMDAwRjAwNjA4MDcxMDAzRjAwMDAwMDAzMDAwMERGN0QKKzoxMDMwRDAwMDAyMDAwRjAwNjE4MDcxMDAyRDAwMDAwMDgxMEZFMEREMTMKKzoxMDMwRTAwMDAyMDAwRjAwNjI4MDcxMDAzRjAwMDAwMDgzMDI4MERENUIKKzoxMDMwRjAwMDAyMDAwRjAwNjM4MDcxMDAyRDAwMDAwMDgwMDEwNEREREMKKzoxMDMxMDAwMDAyMDAwRjAwNjQ4MDcxMDA3RDAwMDAwMDgwMDAxNUZENEEKKzoxMDMxMTAwMDAyMDAwRjAwNjU4MDcxMDA3QTAwMDAwMDc2M0IyMDEwRUQKKzoxMDMxMjAwMDAyMDAwRjAwNjY4MDcxMDA3QTAwMDAwMDc2N0IyMDMwN0MKKzoxMDMxMzAwMDAyMDAwRjAwNjc4MDcxMDAyMTAwMDAwMDYwMDAyNEQwQjEKKzoxMDMxNDAwMDAyMDAwRjAwNjg4MDcxMDAzRjAwMDAwMDA0MDEwMERERjQKKzoxMDMxNTAwMDAyMDAwRjAwNjk4MDcxMDAzRjAwMDAwMDgxMDI0MEREMjUKKzoxMDMxNjAwMDAyMDAwRjAwNkE4MDcxMDA3OTAwMDAwMDAzQkIzMUREQUUKKzoxMDMxNzAwMDAyMDAwRjAwNkI4MDcxMDA3OTAwMDAwMDA0RkIzMURENUMKKzoxMDMxODAwMDAyMDAwRjAwNkM4MDcxMDA3OTAwMDAwMDc2QkIzMUREMTkKKzoxMDMxOTAwMDAyMDAwRjAwNkQ4MDcxMDA3OTAwMDAwMDc2RkIzMUREQzgKKzoxMDMxQTAwMDAyMDAwRjAwNkU4MDcxMDA3OTAwMDAwMDAxMDEyMUZEMTYKKzoxMDMxQjAwMDAyMDAwRjAwNkY4MDcxMDA3RDAwMDAwMDgxNDAyQkZEMzgKKzoxMDMxQzAwMDAyMDAwRjAwNzA4MDcxMDA0MDAwMDAwMDAyMzAwMDNEREUKKzoxMDMxRDAwMDAyMDAwRjAwNzE4MDcxMDA0ODAwMDAwMDAyM0IwMDFEREEKKzoxMDMxRTAwMDAyMDAwRjAwNzI4MDcxMDA3OTAwMDAwMDc2N0IyMUREMDMKKzoxMDMxRjAwMDAyMDAwRjAwNzM4MDcxMDAyRDAwMDAwMDdGMDUwNEREQzgKKzoxMDMyMDAwMDAyMDAwRjAwNzQ4MDcxMDAxODAwMDAwMDc2M0I3RjNEQzMKKzoxMDMyMTAwMDAyMDAwRjAwNzU4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MTQKKzoxMDMyMjAwMDAyMDAwRjAwNzY4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MDMKKzoxMDMyMzAwMDAyMDAwRjAwNzc4MDcxMDAzRDAwMDAwMDZGMDA4MEY3RjIKKzoxMDMyNDAwMDAyMDAwRjAwNzg4MDcxMDAyMTAwMDAwMDc2MUYzN0UzMzQKKzoxMDMyNTAwMDAyMDAwRjAwNzk4MDcxMDA0OTAwMDAwMDc5M0IwMEREMTkKKzoxMDMyNjAwMDAyMDAwRjAwN0E4MDcxMDA3OTAwMDAwMDc2QkIyMUREM0EKKzoxMDMyNzAwMDAyMDAwRjAwN0I4MDcxMDA0OTAwMDAwMDc5M0IwMERERjcKKzoxMDMyODAwMDAyMDAwRjAwN0M4MDcxMDA3OTAwMDAwMDc2QkIyMUREMTgKKzoxMDMyOTAwMDAyMDAwRjAwN0Q4MDcxMDA0OTAwMDAwMDc5M0IwMERERDUKKzoxMDMyQTAwMDAyMDAwRjAwN0U4MDcxMDA3OTAwMDAwMDc2QkIyMURERjYKKzoxMDMyQjAwMDAyMDAwRjAwN0Y4MDcxMDA3OTAwMDAwMDc2OTA2MEZEQjEKKzoxMDMyQzAwMDAyMDAwRjAwODA4MDcxMDA3OTAwMDAwMDc2RkIyMUREOTQKKzoxMDMyRDAwMDAyMDAwRjAwODE4MDcxMDAzRjAwMDAwMDgzMDAwMERGQ0EKKzoxMDMyRTAwMDAyMDAwRjAwODI4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MzcKKzoxMDMyRjAwMDAyMDAwRjAwODM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDMzMDAwMDAyMDAwRjAwODQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDMzMTAwMDAyMDAwRjAwODU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDMzMjAwMDAyMDAwRjAwODY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDMzMzAwMDAyMDAwRjAwODc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDMzNDAwMDAyMDAwRjAwODg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDMzNTAwMDAyMDAwRjAwODk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDMzNjAwMDAyMDAwRjAwOEE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDMzNzAwMDAyMDAwRjAwOEI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDMzODAwMDAyMDAwRjAwOEM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDMzOTAwMDAyMDAwRjAwOEQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDMzQTAwMDAyMDAwRjAwOEU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDMzQjAwMDAyMDAwRjAwOEY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDMzQzAwMDAyMDAwRjAwOTA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDMzRDAwMDAyMDAwRjAwOTE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDMzRTAwMDAyMDAwRjAwOTI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDMzRjAwMDAyMDAwRjAwOTM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDM0MDAwMDAyMDAwRjAwOTQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDM0MTAwMDAyMDAwRjAwOTU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDM0MjAwMDAyMDAwRjAwOTY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDM0MzAwMDAyMDAwRjAwOTc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDM0NDAwMDAyMDAwRjAwOTg4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDM0NTAwMDAyMDAwRjAwOTk4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDM0NjAwMDAyMDAwRjAwOUE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDM0NzAwMDAyMDAwRjAwOUI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDM0ODAwMDAyMDAwRjAwOUM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDM0OTAwMDAyMDAwRjAwOUQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDM0QTAwMDAyMDAwRjAwOUU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDM0QjAwMDAyMDAwRjAwOUY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDM0QzAwMDAyMDAwRjAwQTA4MDcxMDAyRDAwMDAwMDAzMDgwOEQwNEEKKzoxMDM0RDAwMDAyMDAwRjAwQTE4MDcxMDAwODAwMDAwMDc2RkJCNTIxRkEKKzoxMDM0RTAwMDAyMDAwRjAwQTI4MDcxMDA3OTAwMDAwMDgxMDAwMURENjAKKzoxMDM0RjAwMDAyMDAwRjAwQTM4MDcxMDA3OTAwMDAwMDAyODEwMURENEQKKzoxMDM1MDAwMDAyMDAwRjAwQTQ4MDcxMDA3RDAwMDAwMDgzODAwMUZEOTcKKzoxMDM1MTAwMDAyMDAwRjAwQTU4MDcxMDA3OTAwMDAwMDc2M0I5MEQwN0EKKzoxMDM1MjAwMDAyMDAwRjAwQTY4MDcxMDA0OTAwMDAwMDdBM0I1OEQwQ0QKKzoxMDM1MzAwMDAyMDAwRjAwQTc4MDcxMDA0OTAwMDAwMDAwM0IwNEQyODgKKzoxMDM1NDAwMDAyMDAwRjAwQTg4MDcxMDAzRDAwMDAwMDAzMDA0MERENzQKKzoxMDM1NTAwMDAyMDAwRjAwQTk4MDcxMDAyNDAwMDAwMDY0MDIwMDMyMDQKKzoxMDM1NjAwMDAyMDAwRjAwQUE4MDcxMDAzRDAwMDAwMDAzRjg3RkREMUIKKzoxMDM1NzAwMDAyMDAwRjAwQUI4MDcxMDAyOTAwMDAwMDdBMDEyMEQwMEEKKzoxMDM1ODAwMDAyMDAwRjAwQUM4MDcxMDA0OTAwMDAwMDBFM0JBNEQwODcKKzoxMDM1OTAwMDAyMDAwRjAwQUQ4MDcxMDAyRDAwMDAwMEZGNDIwNEREMkQKKzoxMDM1QTAwMDAyMDAwRjAwQUU4MDcxMDAxODAwMDAwMDc2M0I3RjNERTYKKzoxMDM1QjAwMDAyMDAwRjAwQUY4MDcxMDAyRDAwMDAwMDgyMDAwNkREQzgKKzoxMDM1QzAwMDAyMDAwRjAwQjA4MDcxMDAzODAwMDAwMEUwMDEwMDMwMDAKKzoxMDM1RDAwMDAyMDAwRjAwQjE4MDcxMDAzOTAwMDAwMDYwMDEwMEQwQ0UKKzoxMDM1RTAwMDAyMDAwRjAwQjI4MDcxMDA3OTAwMDAwMDdDM0JCMUQxNzUKKzoxMDM1RjAwMDAyMDAwRjAwQjM4MDcxMDAyRDAwMDAwMEUzMEZFMEREM0EKKzoxMDM2MDAwMDAyMDAwRjAwQjQ4MDcxMDA0OTAwMDAwMEU0MzA4MEQwNTcKKzoxMDM2MTAwMDAyMDAwRjAwQjU4MDcxMDA3OTAwMDAwMDdDN0IzMURENzUKKzoxMDM2MjAwMDAyMDAwRjAwQjY4MDcxMDA3OTAwMDAwMDdDM0IzMUREQTQKKzoxMDM2MzAwMDAyMDAwRjAwQjc4MDcxMDA3RDAwMDAwMDgyNDAzN0ZENUUKKzoxMDM2NDAwMDAyMDAwRjAwQjg4MDcxMDAwODAwMDAwMDc2M0I3RDAxODkKKzoxMDM2NTAwMDAyMDAwRjAwQjk4MDcxMDAzRDAwMDAwMDZGMDA4MEY3OEMKKzoxMDM2NjAwMDAyMDAwRjAwQkE4MDcxMDAzRDAwMDAwMDZGMDA4MEY3N0IKKzoxMDM2NzAwMDAyMDAwRjAwQkI4MDcxMDA0OTAwMDAwMDg3MDMwMEREREQKKzoxMDM2ODAwMDAyMDAwRjAwQkM4MDcxMDA3OTAwMDAwMDA4MDQzMURERTkKKzoxMDM2OTAwMDAyMDAwRjAwQkQ4MDcxMDA3OTAwMDAwMDdBN0QzMURERUQKKzoxMDM2QTAwMDAyMDAwRjAwQkU4MDcxMDA0OTAwMDAwMDdDM0IwMEQzODcKKzoxMDM2QjAwMDAyMDAwRjAwQkY4MDcxMDA3OTAwMDAwMDdDQkI4MUQzNDUKKzoxMDM2QzAwMDAyMDAwRjAwQzA4MDcxMDA3RjAwMDAwMDdDQjIwMUQxQjkKKzoxMDM2RDAwMDAyMDAwRjAwQzE4MDcxMDA0ODAwMDAwMDY0MzIwMDUxRjgKKzoxMDM2RTAwMDAyMDAwRjAwQzI4MDcxMDAzRDAwMDAwMDAzMDA0MEREQjkKKzoxMDM2RjAwMDAyMDAwRjAwQzM4MDcxMDAwODAwMDAwMDYyMzE5NTAxRDQKKzoxMDM3MDAwMDAyMDAwRjAwQzQ4MDcxMDAyMTAwMDAwMDY2MDYwMEQzOTMKKzoxMDM3MTAwMDAyMDAwRjAwQzU4MDcxMDAyMDAwMDAwMEU3MDA4MDUzMDgKKzoxMDM3MjAwMDAyMDAwRjAwQzY4MDcxMDAzRjAwMDAwMDAwMDgwMEREQUQKKzoxMDM3MzAwMDAyMDAwRjAwQzc4MDcxMDA3OTAwMDAwMDY2QjMwMURENTAKKzoxMDM3NDAwMDAyMDAwRjAwQzg4MDcxMDA3OTAwMDAwMEU3QjMwMUREQkUKKzoxMDM3NTAwMDAyMDAwRjAwQzk4MDcxMDA3NTAwMDAwMDYyODYwMUYxNEYKKzoxMDM3NjAwMDAyMDAwRjAwQ0E4MDcxMDA3NTAwMDAwMDY0QjEwMUQyMzAKKzoxMDM3NzAwMDAyMDAwRjAwQ0I4MDcxMDA3ODAwMDAwMDc2N0IwMDFERjYKKzoxMDM3ODAwMDAyMDAwRjAwQ0M4MDcxMDAyNTAwMDAwMEUzMDEwMEREODUKKzoxMDM3OTAwMDAyMDAwRjAwQ0Q4MDcxMDAwODAwMDAwMDYyMzFCMTAxMEQKKzoxMDM3QTAwMDAyMDAwRjAwQ0U4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MjYKKzoxMDM3QjAwMDAyMDAwRjAwQ0Y4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MTUKKzoxMDM3QzAwMDAyMDAwRjAwRDA4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MDQKKzoxMDM3RDAwMDAyMDAwRjAwRDE4MDcxMDAyMTAwMDAwMDYzOUYzN0UzRDkKKzoxMDM3RTAwMDAyMDAwRjAwRDI4MDcxMDA0OTAwMDAwMDdDM0IwMEQzMzIKKzoxMDM3RjAwMDAyMDAwRjAwRDM4MDcxMDA3OTAwMDAwMDdDQkI4MUQzRjAKKzoxMDM4MDAwMDAyMDAwRjAwRDQ4MDcxMDA3RjAwMDAwMDdDQjIwMUQxNjMKKzoxMDM4MTAwMDAyMDAwRjAwRDU4MDcxMDA0ODAwMDAwMDY0MzIwMDUxQTIKKzoxMDM4MjAwMDAyMDAwRjAwRDY4MDcxMDA3NTAwMDAwMDY0QjEwMUQyNjMKKzoxMDM4MzAwMDAyMDAwRjAwRDc4MDcxMDA3ODAwMDAwMDc2N0IwMDFEMjkKKzoxMDM4NDAwMDAyMDAwRjAwRDg4MDcxMDAzRjAwMDAwMDA0MDAwMEREN0UKKzoxMDM4NTAwMDAyMDAwRjAwRDk4MDcxMDA3OTAwMDAwMDgxQzAwMURERjUKKzoxMDM4NjAwMDAyMDAwRjAwREE4MDcxMDA3OTAwMDAwMDc2OTA2MEZEQTAKKzoxMDM4NzAwMDAyMDAwRjAwREI4MDcxMDAyRDAwMDAwMDAzMDgwOERENEUKKzoxMDM4ODAwMDAyMDAwRjAwREM4MDcxMDA3ODAwMDAwMDgxQzAwMTNENjMKKzoxMDM4OTAwMDAyMDAwRjAwREQ4MDcxMDAzRDAwMDAwMDZGMDA4MEY3MjYKKzoxMDM4QTAwMDAyMDAwRjAwREU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDM4QjAwMDAyMDAwRjAwREY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDM4QzAwMDAyMDAwRjAwRTA4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDM4RDAwMDAyMDAwRjAwRTE4MDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDM4RTAwMDAyMDAwRjAwRTI4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDM4RjAwMDAyMDAwRjAwRTM4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDM5MDAwMDAyMDAwRjAwRTQ4MDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDM5MTAwMDAyMDAwRjAwRTU4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDM5MjAwMDAyMDAwRjAwRTY4MDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDM5MzAwMDAyMDAwRjAwRTc4MDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDM5NDAwMDAyMDAwRjAwRTg4MDcxMDA0OTAwMDAwMDAzM0I4RUQxQTcKKzoxMDM5NTAwMDAyMDAwRjAwRTk4MDcxMDAyRjAwMDAwMEUzMDA4MUQxMTgKKzoxMDM5NjAwMDAyMDAwRjAwRUE4MDcxMDAzRjAwMDAwMDAzMTg4MEQxQzAKKzoxMDM5NzAwMDAyMDAwRjAwRUI4MDcxMDA0OTAwMDAwMDAzM0IwNEQxRkUKKzoxMDM5ODAwMDAyMDAwRjAwRUM4MDcxMDAzRjAwMDAwMDAzMDI4MEREQTgKKzoxMDM5OTAwMDAyMDAwRjAwRUQ4MDcxMDA0OTAwMDAwMDAyM0IwNEQyREMKKzoxMDM5QTAwMDAyMDAwRjAwRUU4MDcxMDA0OTAwMDAwMDAwM0I4NEQyNEQKKzoxMDM5QjAwMDAyMDAwRjAwRUY4MDcxMDAyNTAwMDAwMEUyMDAwMEREMzIKKzoxMDM5QzAwMDAyMDAwRjAwRjA4MDcxMDA5NDAwMDAwMDYyNDExMzAwQkIKKzoxMDM5RDAwMDAyMDAwRjAwRjE4MDcxMDA5NDAwMDAwMDYyNDMwQjAwQjAKKzoxMDM5RTAwMDAyMDAwRjAwRjI4MDcxMDA5NDAwMDAwMEUyNDgxNTAwMTAKKzoxMDM5RjAwMDAyMDAwRjAwRjM4MDcxMDA5NDAwMDAwMDYyNDkxQjAwNzgKKzoxMDNBMDAwMDAyMDAwRjAwRjQ4MDcxMDA5NDAwMDAwMDc2NDAyRjAwNDcKKzoxMDNBMTAwMDAyMDAwRjAwRjU4MDcxMDAwOTAwMDAwMDdBM0Q4MUNGOUYKKzoxMDNBMjAwMDAyMDAwRjAwRjY4MDcxMDAxRDAwMDAwMEU1ODAyQkZERjQKKzoxMDNBMzAwMDAyMDAwRjAwRjc4MDcxMDAzMDAwMDAwMDYzODA4MzMxQzYKKzoxMDNBNDAwMDAyMDAwRjAwRjg4MDcxMDAzMDAwMDAwMDYzODA4MjExRDYKKzoxMDNBNTAwMDAyMDAwRjAwRjk4MDcxMDAxRDAwMDAwMEU1ODAyNUZEQzcKKzoxMDNBNjAwMDAyMDAwRjAwRkE4MDcxMDAzMDAwMDAwMDYzMDA4MzMxMTMKKzoxMDNBNzAwMDAyMDAwRjAwRkI4MDcxMDAzMDAwMDAwMDYzMDA4MjExMjMKKzoxMDNBODAwMDAyMDAwRjAwRkM4MDcxMDAyRjAwMDAwMEUzMDA4MUQxRDQKKzoxMDNBOTAwMDAyMDAwRjAwRkQ4MDcxMDAxRDAwMDAwMEU1ODAwOUZEOUYKKzoxMDNBQTAwMDAyMDAwRjAwRkU4MDcxMDAzMDAwMDAwMDYzRDM4MzMxRkMKKzoxMDNBQjAwMDAyMDAwRjAwRkY4MDcxMDAzMDAwMDAwMDYzRDI4MzExMEMKKzoxMDNBQzAwMDAyMDAwRjAwMDA4MTcxMDAyRjAwMDAwMEUzMDA4MUQxOEYKKzoxMDNBRDAwMDAyMDAwRjAwMDE4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2QzgKKzoxMDNBRTAwMDAyMDAwRjAwMDI4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2M0IKKzoxMDNBRjAwMDAyMDAwRjAwMDM4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2NDgKKzoxMDNCMDAwMDAyMDAwRjAwMDQ4MTcxMDAxODAwMDAwMDgxMDBGRjM3REYKKzoxMDNCMTAwMDAyMDAwRjAwMDU4MTcxMDAyNTAwMDAwMDY0MDIwMEQyNDAKKzoxMDNCMjAwMDAyMDAwRjAwMDY4MTcxMDAxODAwMDAwMDdBRkQ3NzdEMDkKKzoxMDNCMzAwMDAyMDAwRjAwMDc4MTcxMDA0OTAwMDAwMDYzM0IyMERFOTYKKzoxMDNCNDAwMDAyMDAwRjAwMDg4MTcxMDA0OTAwMDAwMDc5M0I4MERFMEYKKzoxMDNCNTAwMDAyMDAwRjAwMDk4MTcxMDAyMTAwMDAwMEUzMDA4MEQxMDQKKzoxMDNCNjAwMDAyMDAwRjAwMEE4MTcxMDAwOTAwMDAwMDdBM0Q4MUNGMzgKKzoxMDNCNzAwMDAyMDAwRjAwMEI4MTcxMDA0OTAwMDAwMEUzMzEwMERERkQKKzoxMDNCODAwMDAyMDAwRjAwMEM4MTcxMDA2OTAwMDAwMDc4M0IwRUREMUYKKzoxMDNCOTAwMDAyMDAwRjAwMEQ4MTcxMDA2MTAwMDAwMDc2M0IwMEREMjYKKzoxMDNCQTAwMDAyMDAwRjAwMEU4MTcxMDAzRjAwMDAwMDg0MDEwMERENjMKKzoxMDNCQjAwMDAyMDAwRjAwMEY4MTcxMDAzRjAwMDAwMDAxMDAwMERERDYKKzoxMDNCQzAwMDAyMDAwRjAwMTA4MTcxMDAzNTAwMDAwMEZBMDAwMERERDYKKzoxMDNCRDAwMDAyMDAwRjAwMTE4MTcxMDAxODAwMDAwMDc2M0I3RjNCNEUKKzoxMDNCRTAwMDAyMDAwRjAwMTI4MTcxMDAzRDAwMDAwMDZGMDA4MEY3OUQKKzoxMDNCRjAwMDAyMDAwRjAwMTM4MTcxMDAzRDAwMDAwMDZGMDA4MEY3OEMKKzoxMDNDMDAwMDAyMDAwRjAwMTQ4MTcxMDAzRDAwMDAwMDZGMDA4MEY3N0EKKzoxMDNDMTAwMDAyMDAwRjAwMTU4MTcxMDAyMTAwMDAwMEUzMDA4MEQxMzcKKzoxMDNDMjAwMDAyMDAwRjAwMTY4MTcxMDA2OTAwMDAwMDc5M0IwNEREN0QKKzoxMDNDMzAwMDAyMDAwRjAwMTc4MTcxMDA2MTAwMDAwMEUzMDA4MEYxQjUKKzoxMDNDNDAwMDAyMDAwRjAwMTg4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2M0YKKzoxMDNDNTAwMDAyMDAwRjAwMTk4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2QjIKKzoxMDNDNjAwMDAyMDAwRjAwMUE4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QkYKKzoxMDNDNzAwMDAyMDAwRjAwMUI4MTcxMDAxODAwMDAwMDgxMDBGRjM3NTcKKzoxMDNDODAwMDAyMDAwRjAwMUM4MTcxMDAyNTAwMDAwMDY0MDIwMEQyQjgKKzoxMDNDOTAwMDAyMDAwRjAwMUQ4MTcxMDA5ODAwMDAwMDc2QkI1RDYwN0UKKzoxMDNDQTAwMDAyMDAwRjAwMUU4MTcxMDAwOTAwMDAwMDdBM0Q4MUNGRTMKKzoxMDNDQjAwMDAyMDAwRjAwMUY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDNDQzAwMDAyMDAwRjAwMjA4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDNDRDAwMDAyMDAwRjAwMjE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDNDRTAwMDAyMDAwRjAwMjI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDNDRjAwMDAyMDAwRjAwMjM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDNEMDAwMDAyMDAwRjAwMjQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDNEMTAwMDAyMDAwRjAwMjU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDNEMjAwMDAyMDAwRjAwMjY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDNEMzAwMDAyMDAwRjAwMjc4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDNENDAwMDAyMDAwRjAwMjg4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDNENTAwMDAyMDAwRjAwMjk4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDNENjAwMDAyMDAwRjAwMkE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDNENzAwMDAyMDAwRjAwMkI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDNEODAwMDAyMDAwRjAwMkM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDNEOTAwMDAyMDAwRjAwMkQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDNEQTAwMDAyMDAwRjAwMkU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDNEQjAwMDAyMDAwRjAwMkY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDNEQzAwMDAyMDAwRjAwMzA4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDNERDAwMDAyMDAwRjAwMzE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDNERTAwMDAyMDAwRjAwMzI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDNERjAwMDAyMDAwRjAwMzM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDNFMDAwMDAyMDAwRjAwMzQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDNFMTAwMDAyMDAwRjAwMzU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDNFMjAwMDAyMDAwRjAwMzY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDNFMzAwMDAyMDAwRjAwMzc4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDNFNDAwMDAyMDAwRjAwMzg4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDNFNTAwMDAyMDAwRjAwMzk4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDNFNjAwMDAyMDAwRjAwM0E4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDNFNzAwMDAyMDAwRjAwM0I4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDNFODAwMDAyMDAwRjAwM0M4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDNFOTAwMDAyMDAwRjAwM0Q4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDNFQTAwMDAyMDAwRjAwM0U4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDNFQjAwMDAyMDAwRjAwM0Y4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDNFQzAwMDAyMDAwRjAwNDA4MTcxMDA0OTAwMDAwMDAxM0IwOEQ0NEUKKzoxMDNFRDAwMDAyMDAwRjAwNDE4MTcxMDAwOTAwMDAwMDdBM0Q4QkMyOTEKKzoxMDNFRTAwMDAyMDAwRjAwNDI4MTcxMDAzRjAwMDAwMDgwMDMwMEQ0RjcKKzoxMDNFRjAwMDAyMDAwRjAwNDM4MTcxMDAwOTAwMDAwMDdBM0Q4QkMyNkYKKzoxMDNGMDAwMDAyMDAwRjAwNDQ4MTcxMDA0OTAwMDAwMDAzM0IwRUQ0MDEKKzoxMDNGMTAwMDAyMDAwRjAwNDU4MTcxMDAzRjAwMDAwMDAwMDA0MkQ2MDIKKzoxMDNGMjAwMDAyMDAwRjAwNDY4MTcxMDAyRjAwMDAwMDgwNDA4MUQyMDYKKzoxMDNGMzAwMDAyMDAwRjAwNDc4MTcxMDAyRDAwMDAwMDY1MDM4NEQyNEMKKzoxMDNGNDAwMDAyMDAwRjAwNDg4MTcxMDAzRjAwMDAwMDgwMDA4MEQ2MTEKKzoxMDNGNTAwMDAyMDAwRjAwNDk4MTcxMDAzRjAwMDAwMDA0MDAwNERERjEKKzoxMDNGNjAwMDAyMDAwRjAwNEE4MTcxMDAzRjAwMDAwMDAxMDAxOEREQ0YKKzoxMDNGNzAwMDAyMDAwRjAwNEI4MTcxMDA2OTAwMDAwMDZEM0IwMEREMDUKKzoxMDNGODAwMDAyMDAwRjAwNEM4MTcxMDA2OTAwMDAwMDZEM0IwMERERjQKKzoxMDNGOTAwMDAyMDAwRjAwNEQ4MTcxMDAzMTAwMDAwMDY1RDIwM0QzOTMKKzoxMDNGQTAwMDAyMDAwRjAwNEU4MTcxMDA0OTAwMDAwMDY2M0I0MERFQjgKKzoxMDNGQjAwMDAyMDAwRjAwNEY4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2OTUKKzoxMDNGQzAwMDAyMDAwRjAwNTA4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2MDgKKzoxMDNGRDAwMDAyMDAwRjAwNTE4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2MTUKKzoxMDNGRTAwMDAyMDAwRjAwNTI4MTcxMDAxODAwMDAwMDgxMDBGRjM3QUQKKzoxMDNGRjAwMDAyMDAwRjAwNTM4MTcxMDA0OTAwMDAwMDdFM0I4MEQ1MTQKKzoxMDQwMDAwMDAyMDAwRjAwNTQ4MTcxMDAyMTAwMDAwMEU2MDA0MERFMzQKKzoxMDQwMTAwMDAyMDAwRjAwNTU4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2MkUKKzoxMDQwMjAwMDAyMDAwRjAwNTY4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2QTEKKzoxMDQwMzAwMDAyMDAwRjAwNTc4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2QUUKKzoxMDQwNDAwMDAyMDAwRjAwNTg4MTcxMDAxODAwMDAwMDgxMDBGRjM3NDYKKzoxMDQwNTAwMDAyMDAwRjAwNTk4MTcxMDA0OTAwMDAwMDdFM0IwMEQ1MkQKKzoxMDQwNjAwMDAyMDAwRjAwNUE4MTcxMDA3OTAwMDAwMDc2M0IwMURERUIKKzoxMDQwNzAwMDAyMDAwRjAwNUI4MTcxMDAyRDAwMDAwMDdGNDAwNEREMTUKKzoxMDQwODAwMDAyMDAwRjAwNUM4MTcxMDAxODAwMDAwMDc2M0I3RjNENEMKKzoxMDQwOTAwMDAyMDAwRjAwNUQ4MTcxMDA3OTAwMDAwMDc2QkIwMUREMzgKKzoxMDQwQTAwMDAyMDAwRjAwNUU4MTcxMDA3NTAwMDAwMEU4ODAwMUZERDQKKzoxMDQwQjAwMDAyMDAwRjAwNUY4MTcxMDA5NDAwMDAwMDY4NDExNTAwNEMKKzoxMDQwQzAwMDAyMDAwRjAwNjA4MTcxMDA5NDAwMDAwMEU4NDQyNTAwQTgKKzoxMDQwRDAwMDAyMDAwRjAwNjE4MTcxMDA5NDAwMDAwMEU4NDEyMzAwOUMKKzoxMDQwRTAwMDAyMDAwRjAwNjI4MTcxMDA5NDAwMDAwMDY4NDUxNzAwMTMKKzoxMDQwRjAwMDAyMDAwRjAwNjM4MTcxMDA5NDAwMDAwMDY4NDIxNTAwMDcKKzoxMDQxMDAwMDAyMDAwRjAwNjQ4MTcxMDA5NDAwMDAwMEU4NDIyNzAwNjMKKzoxMDQxMTAwMDAyMDAwRjAwNjU4MTcxMDA5NDAwMDAwMDY4NDMyRDAwQ0IKKzoxMDQxMjAwMDAyMDAwRjAwNjY4MTcxMDA5NDAwMDAwMDY4NDQyRDAwQjkKKzoxMDQxMzAwMDAyMDAwRjAwNjc4MTcxMDA5NDAwMDAwMEU4NDMzMzAwMjMKKzoxMDQxNDAwMDAyMDAwRjAwNjg4MTcxMDAwNDAwMDAwMDc2M0I5NzAzQjUKKzoxMDQxNTAwMDAyMDAwRjAwNjk4MTcxMDAwRDAwMDAwMDY1QzEwREUzRDAKKzoxMDQxNjAwMDAyMDAwRjAwNkE4MTcxMDAzMDAwMDAwMDc2MDAwMzMyMDcKKzoxMDQxNzAwMDAyMDAwRjAwNkI4MTcxMDAzMDAwMDAwMDc2MDAwMjEyMTcKKzoxMDQxODAwMDAyMDAwRjAwNkM4MTcxMDAzRjAwMDAwMDAwMDA4MEQ0MkQKKzoxMDQxOTAwMDAyMDAwRjAwNkQ4MTcxMDAzRjAwMDAwMDAwODA4MEQxOUYKKzoxMDQxQTAwMDAyMDAwRjAwNkU4MTcxMDAwRDAwMDAwMDY1QzEzRkUzNDkKKzoxMDQxQjAwMDAyMDAwRjAwNkY4MTcxMDAzMDAwMDAwMDc2NjAwNDMyNTEKKzoxMDQxQzAwMDAyMDAwRjAwNzA4MTcxMDAzMDAwMDAwMDc2NDAwNDEyODAKKzoxMDQxRDAwMDAyMDAwRjAwNzE4MTcxMDAzRjAwMDAwMDAwODA4MkQ0NTYKKzoxMDQxRTAwMDAyMDAwRjAwNzI4MTcxMDAzRjAwMDAwMDAwODA4MEQxNEEKKzoxMDQxRjAwMDAyMDAwRjAwNzM4MTcxMDAwRDAwMDAwMDY1QzEzRkUzRjQKKzoxMDQyMDAwMDAyMDAwRjAwNzQ4MTcxMDAzMDAwMDAwMDc2MjAwNDMyM0IKKzoxMDQyMTAwMDAyMDAwRjAwNzU4MTcxMDAzMDAwMDAwMDc2MDAwNDEyNkEKKzoxMDQyMjAwMDAyMDAwRjAwNzY4MTcxMDAzRjAwMDAwMDAwMDA4MkQ0ODAKKzoxMDQyMzAwMDAyMDAwRjAwNzc4MTcxMDAwRDAwMDAwMDY1QzE2M0UzOEIKKzoxMDQyNDAwMDAyMDAwRjAwNzg4MTcxMDAzMDAwMDAwMDc2MjAwMzMyRjgKKzoxMDQyNTAwMDAyMDAwRjAwNzk4MTcxMDAzMDAwMDAwMDc2MDAwMzEyMjcKKzoxMDQyNjAwMDAyMDAwRjAwN0E4MTcxMDAzRjAwMDAwMDAwMDA4M0Q0M0IKKzoxMDQyNzAwMDAyMDAwRjAwN0I4MTcxMDA0OTAwMDAwMDc2M0I4MEQyNzQKKzoxMDQyODAwMDAyMDAwRjAwN0M4MTcxMDAwRDAwMDAwMDY1QzEwREUzOEMKKzoxMDQyOTAwMDAyMDAwRjAwN0Q4MTcxMDAzMDAwMDAwMDc2ODAwMzMyNDMKKzoxMDQyQTAwMDAyMDAwRjAwN0U4MTcxMDAzMDAwMDAwMDc2ODAwMjEyNTMKKzoxMDQyQjAwMDAyMDAwRjAwN0Y4MTcxMDAzRjAwMDAwMDAwMDA4MUQ0RTgKKzoxMDQyQzAwMDAyMDAwRjAwODA4MTcxMDAzRjAwMDAwMDAwMDAwMkQ2NTQKKzoxMDQyRDAwMDAyMDAwRjAwODE4MTcxMDAzRjAwMDAwMDAwMDA4MUQxQzkKKzoxMDQyRTAwMDAyMDAwRjAwODI4MTcxMDAwRDAwMDAwMDY1QzEzRkUzRjQKKzoxMDQyRjAwMDAyMDAwRjAwODM4MTcxMDAzMDAwMDAwMDc2MjAwNDMyM0MKKzoxMDQzMDAwMDAyMDAwRjAwODQ4MTcxMDAzMDAwMDAwMDc2MDAwNDEyNkEKKzoxMDQzMTAwMDAyMDAwRjAwODU4MTcxMDAzRjAwMDAwMDAwMDA4MkQ0ODAKKzoxMDQzMjAwMDAyMDAwRjAwODY4MTcxMDA0MTAwMDAwMEVCMzQ4MEQ0NTAKKzoxMDQzMzAwMDAyMDAwRjAwODc4MTcxMDA3OTAwMDAwMDZBQkIwMURENzcKKzoxMDQzNDAwMDAyMDAwRjAwODg4MTcxMDA3OTAwMDAwMDc2QkIwMURENUEKKzoxMDQzNTAwMDAyMDAwRjAwODk4MTcxMDAzRjAwMDAwMDAzMTgwMEQyQTUKKzoxMDQzNjAwMDAyMDAwRjAwOEE4MTcxMDAzRjAwMDAwMDAwMDA4MUQxMkYKKzoxMDQzNzAwMDAyMDAwRjAwOEI4MTcxMDA3NTAwMDAwMDYzODAwMUZENTkKKzoxMDQzODAwMDAyMDAwRjAwOEM4MTcxMDA5ODAwMDAwMDY0M0I2OTgwN0UKKzoxMDQzOTAwMDAyMDAwRjAwOEQ4MTcxMDA1MTAwMDAwMEU0MDAwMEYyNjYKKzoxMDQzQTAwMDAyMDAwRjAwOEU4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2NjIKKzoxMDQzQjAwMDAyMDAwRjAwOEY4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2RDUKKzoxMDQzQzAwMDAyMDAwRjAwOTA4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2RTIKKzoxMDQzRDAwMDAyMDAwRjAwOTE4MTcxMDAxODAwMDAwMDgxMDBGRjM3N0EKKzoxMDQzRTAwMDAyMDAwRjAwOTI4MTcxMDAyRDAwMDAwMDdGNDAwNERENkIKKzoxMDQzRjAwMDAyMDAwRjAwOTM4MTcxMDAxODAwMDAwMDc2M0I3RjNEQTIKKzoxMDQ0MDAwMDAyMDAwRjAwOTQ4MTcxMDA0OTAwMDAwMDM4M0JDMEQzQzYKKzoxMDQ0MTAwMDAyMDAwRjAwOTU4MTcxMDA0OTAwMDAwMDY0M0IwMEREM0YKKzoxMDQ0MjAwMDAyMDAwRjAwOTY4MTcxMDA1MTAwMDAwMEU0MDAwMEYyQ0MKKzoxMDQ0MzAwMDAyMDAwRjAwOTc4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2QzgKKzoxMDQ0NDAwMDAyMDAwRjAwOTg4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2M0IKKzoxMDQ0NTAwMDAyMDAwRjAwOTk4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2NDgKKzoxMDQ0NjAwMDAyMDAwRjAwOUE4MTcxMDAxODAwMDAwMDgxMDBGRjM3RTAKKzoxMDQ0NzAwMDAyMDAwRjAwOUI4MTcxMDA0OTAwMDAwMDM4M0JBMEQzNkYKKzoxMDQ0ODAwMDAyMDAwRjAwOUM4MTcxMDAxOTAwMDAwMDc2QkI2MUREMDUKKzoxMDQ0OTAwMDAyMDAwRjAwOUQ4MTcxMDA0OTAwMDAwMDY3M0IwMEREQjQKKzoxMDQ0QTAwMDAyMDAwRjAwOUU4MTcxMDA3NTAwMDAwMDYzODI4MUYxOUYKKzoxMDQ0QjAwMDAyMDAwRjAwOUY4MTcxMDA0MTAwMDAwMEVCMzQ4MEQ0QTYKKzoxMDQ0QzAwMDAyMDAwRjAwQTA4MTcxMDA3OTAwMDAwMDZBQkIwMUREQ0QKKzoxMDQ0RDAwMDAyMDAwRjAwQTE4MTcxMDA3OTAwMDAwMDc2QkIwMUREQjAKKzoxMDQ0RTAwMDAyMDAwRjAwQTI4MTcxMDAzRjAwMDAwMDAzMTgwMEQyRkIKKzoxMDQ0RjAwMDAyMDAwRjAwQTM4MTcxMDAzRjAwMDAwMDAwODA4MEQxMDYKKzoxMDQ1MDAwMDAyMDAwRjAwQTQ4MTcxMDA3NTAwMDAwMDYzODAwMUZEQUUKKzoxMDQ1MTAwMDAyMDAwRjAwQTU4MTcxMDA5ODAwMDAwMDY0M0IzNzgwMDUKKzoxMDQ1MjAwMDAyMDAwRjAwQTY4MTcxMDA1MTAwMDAwMEU0MDAwMEYyQkIKKzoxMDQ1MzAwMDAyMDAwRjAwQTc4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2QjcKKzoxMDQ1NDAwMDAyMDAwRjAwQTg4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2MkEKKzoxMDQ1NTAwMDAyMDAwRjAwQTk4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2MzcKKzoxMDQ1NjAwMDAyMDAwRjAwQUE4MTcxMDAxODAwMDAwMDgxMDBGRjM3Q0YKKzoxMDQ1NzAwMDAyMDAwRjAwQUI4MTcxMDAyRDAwMDAwMDdGNDAwNEREQzAKKzoxMDQ1ODAwMDAyMDAwRjAwQUM4MTcxMDAxODAwMDAwMDc2M0I3RjNERjcKKzoxMDQ1OTAwMDAyMDAwRjAwQUQ4MTcxMDA0OTAwMDAwMDM4M0I4MEQzNUMKKzoxMDQ1QTAwMDAyMDAwRjAwQUU4MTcxMDAxOTAwMDAwMDc2QkI2RkREQzQKKzoxMDQ1QjAwMDAyMDAwRjAwQUY4MTcxMDA0OTAwMDAwMDY3M0IwMEREODEKKzoxMDQ1QzAwMDAyMDAwRjAwQjA4MTcxMDA3NTAwMDAwMDYzODI4MUYxNkMKKzoxMDQ1RDAwMDAyMDAwRjAwQjE4MTcxMDA0MTAwMDAwMEVCMzQ4MEQ0NzMKKzoxMDQ1RTAwMDAyMDAwRjAwQjI4MTcxMDA3OTAwMDAwMDZBQkIwMUREOUEKKzoxMDQ1RjAwMDAyMDAwRjAwQjM4MTcxMDA3OTAwMDAwMDYzQkIwMUREOTAKKzoxMDQ2MDAwMDAyMDAwRjAwQjQ4MTcxMDA3NTAwMDAwMDYzODAwMUZEOUQKKzoxMDQ2MTAwMDAyMDAwRjAwQjU4MTcxMDA5ODAwMDAwMDY0M0IxNzgwMTQKKzoxMDQ2MjAwMDAyMDAwRjAwQjY4MTcxMDA0OTAwMDAwMDY0M0I0MERFQ0IKKzoxMDQ2MzAwMDAyMDAwRjAwQjc4MTcxMDAzRjAwMDAwMDg0MDE4MEQ2QTYKKzoxMDQ2NDAwMDAyMDAwRjAwQjg4MTcxMDAzRjAwMDAwMDAxMDA4MEQ2MTkKKzoxMDQ2NTAwMDAyMDAwRjAwQjk4MTcxMDAzNTAwMDAwMEVEMDA4MEQ2MjYKKzoxMDQ2NjAwMDAyMDAwRjAwQkE4MTcxMDAxODAwMDAwMDgxMDBGRjM3QkUKKzoxMDQ2NzAwMDAyMDAwRjAwQkI4MTcxMDAyRDAwMDAwMDdGNDAwNEREQUYKKzoxMDQ2ODAwMDAyMDAwRjAwQkM4MTcxMDAxODAwMDAwMDc2M0I3RjNERTYKKzoxMDQ2OTAwMDAyMDAwRjAwQkQ4MTcxMDAyMTAwMDAwMEU0MDAwMEQyODMKKzoxMDQ2QTAwMDAyMDAwRjAwQkU4MTcxMDAxOTAwMDAwMDdFN0JFRkQzNzUKKzoxMDQ2QjAwMDAyMDAwRjAwQkY4MTcxMDA3NTAwMDAwMDYzODI4MUYxNkMKKzoxMDQ2QzAwMDAyMDAwRjAwQzA4MTcxMDAzRjAwMDAwMDAwMDA4MEQ2OTIKKzoxMDQ2RDAwMDAyMDAwRjAwQzE4MTcxMDAzRjAwMDAwMDA0MDAwNERERjIKKzoxMDQ2RTAwMDAyMDAwRjAwQzI4MTcxMDAzRjAwMDAwMDAxMDAxOERERDAKKzoxMDQ2RjAwMDAyMDAwRjAwQzM4MTcxMDA2OTAwMDAwMDZEM0IwMEREMDYKKzoxMDQ3MDAwMDAyMDAwRjAwQzQ4MTcxMDA2OTAwMDAwMDZEM0IwMERERjQKKzoxMDQ3MTAwMDAyMDAwRjAwQzU4MTcxMDAzRjAwMDAwMDAwMDAwMEREQjUKKzoxMDQ3MjAwMDAyMDAwRjAwQzY4MTcxMDAyRDAwMDAwMDgwMDE1NERERTEKKzoxMDQ3MzAwMDAyMDAwRjAwQzc4MTcxMDA3OTAwMDAwMDc2ODBFMEYzNkQKKzoxMDQ3NDAwMDAyMDAwRjAwQzg4MTcxMDA0OTAwMDAwMDdBMzYwMEQ2Q0YKKzoxMDQ3NTAwMDAyMDAwRjAwQzk4MTcxMDA3OTAwMDAwMDc2RkIwMUREQzUKKzoxMDQ3NjAwMDAyMDAwRjAwQ0E4MTcxMDAzRDAwMDAwMDZGMDA4MEY3NTkKKzoxMDQ3NzAwMDAyMDAwRjAwQ0I4MTcxMDA0OTAwMDAwMDAzM0IwMEREMDcKKzoxMDQ3ODAwMDAyMDAwRjAwQ0M4MTcxMDA1OTAwMDAwMDc2M0IwMEZENTMKKzoxMDQ3OTAwMDAyMDAwRjAwQ0Q4MTcxMDAzRjAwMDAwMDAzMUM4MEREOEUKKzoxMDQ3QTAwMDAyMDAwRjAwQ0U4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MTUKKzoxMDQ3QjAwMDAyMDAwRjAwQ0Y4MTcxMDAzRDAwMDAwMDZGMDA4MEY3MDQKKzoxMDQ3QzAwMDAyMDAwRjAwRDA4MTcxMDAzRDAwMDAwMDZGMDA4MEY3RjMKKzoxMDQ3RDAwMDAyMDAwRjAwRDE4MTcxMDAyRDAwMDAwMDdGMDIwNkRENzQKKzoxMDQ3RTAwMDAyMDAwRjAwRDI4MTcxMDAxODAwMDAwMDdBM0Q3RjFEODkKKzoxMDQ3RjAwMDAyMDAwRjAwRDM4MTcxMDAzMTAwMDAwMDZCODg4M0Q0NjgKKzoxMDQ4MDAwMDAyMDAwRjAwRDQ4MTcxMDA3OTAwMDAwMDZBQkIwMURENTUKKzoxMDQ4MTAwMDAyMDAwRjAwRDU4MTcxMDA3OTAwMDAwMDc2OTA4MUYxQ0YKKzoxMDQ4MjAwMDAyMDAwRjAwRDY4MTcxMDA3NTAwMDAwMDYzODAwMUZENTkKKzoxMDQ4MzAwMDAyMDAwRjAwRDc4MTcxMDA5ODAwMDAwMDc2QkI1MzgwMDIKKzoxMDQ4NDAwMDAyMDAwRjAwRDg4MTcxMDAxOTAwMDAwMDc5N0I3RkREMjQKKzoxMDQ4NTAwMDAyMDAwRjAwRDk4MTcxMDA3NTAwMDAwMDYzODI4MUYxQjAKKzoxMDQ4NjAwMDAyMDAwRjAwREE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDQ4NzAwMDAyMDAwRjAwREI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDQ4ODAwMDAyMDAwRjAwREM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDQ4OTAwMDAyMDAwRjAwREQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDQ4QTAwMDAyMDAwRjAwREU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDQ4QjAwMDAyMDAwRjAwREY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDQ4QzAwMDAyMDAwRjAwRTA4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDQ4RDAwMDAyMDAwRjAwRTE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDQ4RTAwMDAyMDAwRjAwRTI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDQ4RjAwMDAyMDAwRjAwRTM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDQ5MDAwMDAyMDAwRjAwRTQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDQ5MTAwMDAyMDAwRjAwRTU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDQ5MjAwMDAyMDAwRjAwRTY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDQ5MzAwMDAyMDAwRjAwRTc4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDQ5NDAwMDAyMDAwRjAwRTg4MTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDQ5NTAwMDAyMDAwRjAwRTk4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDQ5NjAwMDAyMDAwRjAwRUE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDQ5NzAwMDAyMDAwRjAwRUI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDQ5ODAwMDAyMDAwRjAwRUM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDQ5OTAwMDAyMDAwRjAwRUQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDQ5QTAwMDAyMDAwRjAwRUU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDQ5QjAwMDAyMDAwRjAwRUY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDQ5QzAwMDAyMDAwRjAwRjA4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDQ5RDAwMDAyMDAwRjAwRjE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDQ5RTAwMDAyMDAwRjAwRjI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDQ5RjAwMDAyMDAwRjAwRjM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDRBMDAwMDAyMDAwRjAwRjQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRBMTAwMDAyMDAwRjAwRjU4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRBMjAwMDAyMDAwRjAwRjY4MTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDRBMzAwMDAyMDAwRjAwRjc4MTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDRBNDAwMDAyMDAwRjAwRjg4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDRBNTAwMDAyMDAwRjAwRjk4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDRBNjAwMDAyMDAwRjAwRkE4MTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDRBNzAwMDAyMDAwRjAwRkI4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDRBODAwMDAyMDAwRjAwRkM4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDRBOTAwMDAyMDAwRjAwRkQ4MTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDRBQTAwMDAyMDAwRjAwRkU4MTcxMDAzRjAwMDAwMDAzMDI4MERENjQKKzoxMDRBQjAwMDAyMDAwRjAwRkY4MTcxMDA0OTAwMDAwMDAyM0I4NEQxMTkKKzoxMDRBQzAwMDAyMDAwRjAwMDA4MjcxMDA0OTAwMDAwMDAzM0IwMEREN0UKKzoxMDRBRDAwMDAyMDAwRjAwMDE4MjcxMDA2OTAwMDAwMDdBM0IwMERERDYKKzoxMDRBRTAwMDAyMDAwRjAwMDI4MjcxMDA0OTAwMDAwMDc5M0IwMERERTYKKzoxMDRBRjAwMDAyMDAwRjAwMDM4MjcxMDA2NTAwMDAwMDYzMDI4MEYxNzQKKzoxMDRCMDAwMDAyMDAwRjAwMDQ4MjcxMDAxODAwMDAwMDc2M0I3RDdEREEKKzoxMDRCMTAwMDAyMDAwRjAwMDU4MjcxMDAwOTAwMDAwMDdBM0Q4MUNGN0MKKzoxMDRCMjAwMDAyMDAwRjAwMDY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDRCMzAwMDAyMDAwRjAwMDc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDRCNDAwMDAyMDAwRjAwMDg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDRCNTAwMDAyMDAwRjAwMDk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDRCNjAwMDAyMDAwRjAwMEE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDRCNzAwMDAyMDAwRjAwMEI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDRCODAwMDAyMDAwRjAwMEM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRCOTAwMDAyMDAwRjAwMEQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDRCQTAwMDAyMDAwRjAwMEU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDRCQjAwMDAyMDAwRjAwMEY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDRCQzAwMDAyMDAwRjAwMTA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDRCRDAwMDAyMDAwRjAwMTE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDRCRTAwMDAyMDAwRjAwMTI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRCRjAwMDAyMDAwRjAwMTM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRDMDAwMDAyMDAwRjAwMTQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDRDMTAwMDAyMDAwRjAwMTU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDRDMjAwMDAyMDAwRjAwMTY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDRDMzAwMDAyMDAwRjAwMTc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDRDNDAwMDAyMDAwRjAwMTg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDRDNTAwMDAyMDAwRjAwMTk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDRDNjAwMDAyMDAwRjAwMUE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDRDNzAwMDAyMDAwRjAwMUI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRDODAwMDAyMDAwRjAwMUM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDRDOTAwMDAyMDAwRjAwMUQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDRDQTAwMDAyMDAwRjAwMUU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDRDQjAwMDAyMDAwRjAwMUY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDRDQzAwMDAyMDAwRjAwMjA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDRDRDAwMDAyMDAwRjAwMjE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRDRTAwMDAyMDAwRjAwMjI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRDRjAwMDAyMDAwRjAwMjM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDREMDAwMDAyMDAwRjAwMjQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDREMTAwMDAyMDAwRjAwMjU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDREMjAwMDAyMDAwRjAwMjY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDREMzAwMDAyMDAwRjAwMjc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDRENDAwMDAyMDAwRjAwMjg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDRENTAwMDAyMDAwRjAwMjk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDRENjAwMDAyMDAwRjAwMkE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRENzAwMDAyMDAwRjAwMkI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDREODAwMDAyMDAwRjAwMkM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDREOTAwMDAyMDAwRjAwMkQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDREQTAwMDAyMDAwRjAwMkU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDREQjAwMDAyMDAwRjAwMkY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDREQzAwMDAyMDAwRjAwMzA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRERDAwMDAyMDAwRjAwMzE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRERTAwMDAyMDAwRjAwMzI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDRERjAwMDAyMDAwRjAwMzM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDRFMDAwMDAyMDAwRjAwMzQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDRFMTAwMDAyMDAwRjAwMzU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDRFMjAwMDAyMDAwRjAwMzY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDRFMzAwMDAyMDAwRjAwMzc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDRFNDAwMDAyMDAwRjAwMzg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDRFNTAwMDAyMDAwRjAwMzk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRFNjAwMDAyMDAwRjAwM0E4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDRFNzAwMDAyMDAwRjAwM0I4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDRFODAwMDAyMDAwRjAwM0M4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDRFOTAwMDAyMDAwRjAwM0Q4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDRFQTAwMDAyMDAwRjAwM0U4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDRFQjAwMDAyMDAwRjAwM0Y4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRFQzAwMDAyMDAwRjAwNDA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRFRDAwMDAyMDAwRjAwNDE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDRFRTAwMDAyMDAwRjAwNDI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDRFRjAwMDAyMDAwRjAwNDM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDRGMDAwMDAyMDAwRjAwNDQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDRGMTAwMDAyMDAwRjAwNDU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDRGMjAwMDAyMDAwRjAwNDY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDRGMzAwMDAyMDAwRjAwNDc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDRGNDAwMDAyMDAwRjAwNDg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDRGNTAwMDAyMDAwRjAwNDk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDRGNjAwMDAyMDAwRjAwNEE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDRGNzAwMDAyMDAwRjAwNEI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDRGODAwMDAyMDAwRjAwNEM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDRGOTAwMDAyMDAwRjAwNEQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDRGQTAwMDAyMDAwRjAwNEU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDRGQjAwMDAyMDAwRjAwNEY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDRGQzAwMDAyMDAwRjAwNTA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDRGRDAwMDAyMDAwRjAwNTE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDRGRTAwMDAyMDAwRjAwNTI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDRGRjAwMDAyMDAwRjAwNTM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDUwMDAwMDAyMDAwRjAwNTQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDUwMTAwMDAyMDAwRjAwNTU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDUwMjAwMDAyMDAwRjAwNTY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDUwMzAwMDAyMDAwRjAwNTc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDUwNDAwMDAyMDAwRjAwNTg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDUwNTAwMDAyMDAwRjAwNTk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDUwNjAwMDAyMDAwRjAwNUE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDUwNzAwMDAyMDAwRjAwNUI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDUwODAwMDAyMDAwRjAwNUM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUwOTAwMDAyMDAwRjAwNUQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUwQTAwMDAyMDAwRjAwNUU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUwQjAwMDAyMDAwRjAwNUY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDUwQzAwMDAyMDAwRjAwNjA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDUwRDAwMDAyMDAwRjAwNjE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDUwRTAwMDAyMDAwRjAwNjI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDUwRjAwMDAyMDAwRjAwNjM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDUxMDAwMDAyMDAwRjAwNjQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDUxMTAwMDAyMDAwRjAwNjU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDUxMjAwMDAyMDAwRjAwNjY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDUxMzAwMDAyMDAwRjAwNjc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDUxNDAwMDAyMDAwRjAwNjg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDUxNTAwMDAyMDAwRjAwNjk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDUxNjAwMDAyMDAwRjAwNkE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDUxNzAwMDAyMDAwRjAwNkI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUxODAwMDAyMDAwRjAwNkM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUxOTAwMDAyMDAwRjAwNkQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUxQTAwMDAyMDAwRjAwNkU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDUxQjAwMDAyMDAwRjAwNkY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDUxQzAwMDAyMDAwRjAwNzA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDUxRDAwMDAyMDAwRjAwNzE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDUxRTAwMDAyMDAwRjAwNzI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDUxRjAwMDAyMDAwRjAwNzM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDUyMDAwMDAyMDAwRjAwNzQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDUyMTAwMDAyMDAwRjAwNzU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDUyMjAwMDAyMDAwRjAwNzY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDUyMzAwMDAyMDAwRjAwNzc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDUyNDAwMDAyMDAwRjAwNzg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDUyNTAwMDAyMDAwRjAwNzk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDUyNjAwMDAyMDAwRjAwN0E4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUyNzAwMDAyMDAwRjAwN0I4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUyODAwMDAyMDAwRjAwN0M4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUyOTAwMDAyMDAwRjAwN0Q4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDUyQTAwMDAyMDAwRjAwN0U4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDUyQjAwMDAyMDAwRjAwN0Y4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDUyQzAwMDAyMDAwRjAwODA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDUyRDAwMDAyMDAwRjAwODE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDUyRTAwMDAyMDAwRjAwODI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDUyRjAwMDAyMDAwRjAwODM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDUzMDAwMDAyMDAwRjAwODQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDUzMTAwMDAyMDAwRjAwODU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDUzMjAwMDAyMDAwRjAwODY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDUzMzAwMDAyMDAwRjAwODc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDUzNDAwMDAyMDAwRjAwODg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDUzNTAwMDAyMDAwRjAwODk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDUzNjAwMDAyMDAwRjAwOEE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDUzNzAwMDAyMDAwRjAwOEI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDUzODAwMDAyMDAwRjAwOEM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDUzOTAwMDAyMDAwRjAwOEQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDUzQTAwMDAyMDAwRjAwOEU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDUzQjAwMDAyMDAwRjAwOEY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDUzQzAwMDAyMDAwRjAwOTA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDUzRDAwMDAyMDAwRjAwOTE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDUzRTAwMDAyMDAwRjAwOTI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDUzRjAwMDAyMDAwRjAwOTM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU0MDAwMDAyMDAwRjAwOTQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDU0MTAwMDAyMDAwRjAwOTU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDU0MjAwMDAyMDAwRjAwOTY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDU0MzAwMDAyMDAwRjAwOTc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDU0NDAwMDAyMDAwRjAwOTg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDU0NTAwMDAyMDAwRjAwOTk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU0NjAwMDAyMDAwRjAwOUE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU0NzAwMDAyMDAwRjAwOUI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU0ODAwMDAyMDAwRjAwOUM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU0OTAwMDAyMDAwRjAwOUQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU0QTAwMDAyMDAwRjAwOUU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU0QjAwMDAyMDAwRjAwOUY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU0QzAwMDAyMDAwRjAwQTA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU0RDAwMDAyMDAwRjAwQTE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU0RTAwMDAyMDAwRjAwQTI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU0RjAwMDAyMDAwRjAwQTM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU1MDAwMDAyMDAwRjAwQTQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDU1MTAwMDAyMDAwRjAwQTU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDU1MjAwMDAyMDAwRjAwQTY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDU1MzAwMDAyMDAwRjAwQTc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDU1NDAwMDAyMDAwRjAwQTg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU1NTAwMDAyMDAwRjAwQTk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU1NjAwMDAyMDAwRjAwQUE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU1NzAwMDAyMDAwRjAwQUI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU1ODAwMDAyMDAwRjAwQUM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU1OTAwMDAyMDAwRjAwQUQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU1QTAwMDAyMDAwRjAwQUU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU1QjAwMDAyMDAwRjAwQUY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU1QzAwMDAyMDAwRjAwQjA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU1RDAwMDAyMDAwRjAwQjE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU1RTAwMDAyMDAwRjAwQjI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU1RjAwMDAyMDAwRjAwQjM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDU2MDAwMDAyMDAwRjAwQjQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDU2MTAwMDAyMDAwRjAwQjU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDU2MjAwMDAyMDAwRjAwQjY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDU2MzAwMDAyMDAwRjAwQjc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU2NDAwMDAyMDAwRjAwQjg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU2NTAwMDAyMDAwRjAwQjk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU2NjAwMDAyMDAwRjAwQkE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU2NzAwMDAyMDAwRjAwQkI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU2ODAwMDAyMDAwRjAwQkM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU2OTAwMDAyMDAwRjAwQkQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU2QTAwMDAyMDAwRjAwQkU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU2QjAwMDAyMDAwRjAwQkY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU2QzAwMDAyMDAwRjAwQzA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU2RDAwMDAyMDAwRjAwQzE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU2RTAwMDAyMDAwRjAwQzI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDU2RjAwMDAyMDAwRjAwQzM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDU3MDAwMDAyMDAwRjAwQzQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDU3MTAwMDAyMDAwRjAwQzU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDU3MjAwMDAyMDAwRjAwQzY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU3MzAwMDAyMDAwRjAwQzc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU3NDAwMDAyMDAwRjAwQzg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU3NTAwMDAyMDAwRjAwQzk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU3NjAwMDAyMDAwRjAwQ0E4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU3NzAwMDAyMDAwRjAwQ0I4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU3ODAwMDAyMDAwRjAwQ0M4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU3OTAwMDAyMDAwRjAwQ0Q4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU3QTAwMDAyMDAwRjAwQ0U4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU3QjAwMDAyMDAwRjAwQ0Y4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU3QzAwMDAyMDAwRjAwRDA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU3RDAwMDAyMDAwRjAwRDE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDU3RTAwMDAyMDAwRjAwRDI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDU3RjAwMDAyMDAwRjAwRDM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDU4MDAwMDAyMDAwRjAwRDQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDU4MTAwMDAyMDAwRjAwRDU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU4MjAwMDAyMDAwRjAwRDY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU4MzAwMDAyMDAwRjAwRDc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU4NDAwMDAyMDAwRjAwRDg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU4NTAwMDAyMDAwRjAwRDk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU4NjAwMDAyMDAwRjAwREE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU4NzAwMDAyMDAwRjAwREI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU4ODAwMDAyMDAwRjAwREM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU4OTAwMDAyMDAwRjAwREQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU4QTAwMDAyMDAwRjAwREU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU4QjAwMDAyMDAwRjAwREY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU4QzAwMDAyMDAwRjAwRTA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDU4RDAwMDAyMDAwRjAwRTE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDU4RTAwMDAyMDAwRjAwRTI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDU4RjAwMDAyMDAwRjAwRTM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDU5MDAwMDAyMDAwRjAwRTQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDU5MTAwMDAyMDAwRjAwRTU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDU5MjAwMDAyMDAwRjAwRTY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDU5MzAwMDAyMDAwRjAwRTc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDU5NDAwMDAyMDAwRjAwRTg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDU5NTAwMDAyMDAwRjAwRTk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDU5NjAwMDAyMDAwRjAwRUE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDU5NzAwMDAyMDAwRjAwRUI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDU5ODAwMDAyMDAwRjAwRUM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDU5OTAwMDAyMDAwRjAwRUQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDU5QTAwMDAyMDAwRjAwRUU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDU5QjAwMDAyMDAwRjAwRUY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDU5QzAwMDAyMDAwRjAwRjA4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDU5RDAwMDAyMDAwRjAwRjE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDU5RTAwMDAyMDAwRjAwRjI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDU5RjAwMDAyMDAwRjAwRjM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDVBMDAwMDAyMDAwRjAwRjQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVBMTAwMDAyMDAwRjAwRjU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVBMjAwMDAyMDAwRjAwRjY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDVBMzAwMDAyMDAwRjAwRjc4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDVBNDAwMDAyMDAwRjAwRjg4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDVBNTAwMDAyMDAwRjAwRjk4MjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDVBNjAwMDAyMDAwRjAwRkE4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDVBNzAwMDAyMDAwRjAwRkI4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDVBODAwMDAyMDAwRjAwRkM4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDVBOTAwMDAyMDAwRjAwRkQ4MjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDVBQTAwMDAyMDAwRjAwRkU4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDVBQjAwMDAyMDAwRjAwRkY4MjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDVBQzAwMDAyMDAwRjAwMDA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVBRDAwMDAyMDAwRjAwMDE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVBRTAwMDAyMDAwRjAwMDI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVBRjAwMDAyMDAwRjAwMDM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVCMDAwMDAyMDAwRjAwMDQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDVCMTAwMDAyMDAwRjAwMDU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDVCMjAwMDAyMDAwRjAwMDY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDVCMzAwMDAyMDAwRjAwMDc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDVCNDAwMDAyMDAwRjAwMDg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDVCNTAwMDAyMDAwRjAwMDk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDVCNjAwMDAyMDAwRjAwMEE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVCNzAwMDAyMDAwRjAwMEI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDVCODAwMDAyMDAwRjAwMEM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDVCOTAwMDAyMDAwRjAwMEQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDVCQTAwMDAyMDAwRjAwMEU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDVCQjAwMDAyMDAwRjAwMEY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVCQzAwMDAyMDAwRjAwMTA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVCRDAwMDAyMDAwRjAwMTE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVCRTAwMDAyMDAwRjAwMTI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVCRjAwMDAyMDAwRjAwMTM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVDMDAwMDAyMDAwRjAwMTQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDVDMTAwMDAyMDAwRjAwMTU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDVDMjAwMDAyMDAwRjAwMTY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDVDMzAwMDAyMDAwRjAwMTc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDVDNDAwMDAyMDAwRjAwMTg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDVDNTAwMDAyMDAwRjAwMTk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVDNjAwMDAyMDAwRjAwMUE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDVDNzAwMDAyMDAwRjAwMUI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDVDODAwMDAyMDAwRjAwMUM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDVDOTAwMDAyMDAwRjAwMUQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDVDQTAwMDAyMDAwRjAwMUU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVDQjAwMDAyMDAwRjAwMUY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVDQzAwMDAyMDAwRjAwMjA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVDRDAwMDAyMDAwRjAwMjE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVDRTAwMDAyMDAwRjAwMjI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVDRjAwMDAyMDAwRjAwMjM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDVEMDAwMDAyMDAwRjAwMjQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDVEMTAwMDAyMDAwRjAwMjU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDVEMjAwMDAyMDAwRjAwMjY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDVEMzAwMDAyMDAwRjAwMjc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDVENDAwMDAyMDAwRjAwMjg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVENTAwMDAyMDAwRjAwMjk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDVENjAwMDAyMDAwRjAwMkE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDVENzAwMDAyMDAwRjAwMkI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDVEODAwMDAyMDAwRjAwMkM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDVEOTAwMDAyMDAwRjAwMkQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVEQTAwMDAyMDAwRjAwMkU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVEQjAwMDAyMDAwRjAwMkY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVEQzAwMDAyMDAwRjAwMzA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVERDAwMDAyMDAwRjAwMzE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVERTAwMDAyMDAwRjAwMzI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDVERjAwMDAyMDAwRjAwMzM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDVFMDAwMDAyMDAwRjAwMzQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDVFMTAwMDAyMDAwRjAwMzU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDVFMjAwMDAyMDAwRjAwMzY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDVFMzAwMDAyMDAwRjAwMzc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVFNDAwMDAyMDAwRjAwMzg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDVFNTAwMDAyMDAwRjAwMzk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDVFNjAwMDAyMDAwRjAwM0E4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDVFNzAwMDAyMDAwRjAwM0I4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDVFODAwMDAyMDAwRjAwM0M4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVFOTAwMDAyMDAwRjAwM0Q4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVFQTAwMDAyMDAwRjAwM0U4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVFQjAwMDAyMDAwRjAwM0Y4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVFQzAwMDAyMDAwRjAwNDA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVFRDAwMDAyMDAwRjAwNDE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDVFRTAwMDAyMDAwRjAwNDI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDVFRjAwMDAyMDAwRjAwNDM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDVGMDAwMDAyMDAwRjAwNDQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDVGMTAwMDAyMDAwRjAwNDU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDVGMjAwMDAyMDAwRjAwNDY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDVGMzAwMDAyMDAwRjAwNDc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDVGNDAwMDAyMDAwRjAwNDg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDVGNTAwMDAyMDAwRjAwNDk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDVGNjAwMDAyMDAwRjAwNEE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDVGNzAwMDAyMDAwRjAwNEI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDVGODAwMDAyMDAwRjAwNEM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDVGOTAwMDAyMDAwRjAwNEQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDVGQTAwMDAyMDAwRjAwNEU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDVGQjAwMDAyMDAwRjAwNEY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDVGQzAwMDAyMDAwRjAwNTA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDVGRDAwMDAyMDAwRjAwNTE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDVGRTAwMDAyMDAwRjAwNTI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDVGRjAwMDAyMDAwRjAwNTM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDYwMDAwMDAyMDAwRjAwNTQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDYwMTAwMDAyMDAwRjAwNTU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDYwMjAwMDAyMDAwRjAwNTY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDYwMzAwMDAyMDAwRjAwNTc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDYwNDAwMDAyMDAwRjAwNTg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDYwNTAwMDAyMDAwRjAwNTk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDYwNjAwMDAyMDAwRjAwNUE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDYwNzAwMDAyMDAwRjAwNUI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDYwODAwMDAyMDAwRjAwNUM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDYwOTAwMDAyMDAwRjAwNUQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDYwQTAwMDAyMDAwRjAwNUU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDYwQjAwMDAyMDAwRjAwNUY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDYwQzAwMDAyMDAwRjAwNjA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDYwRDAwMDAyMDAwRjAwNjE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDYwRTAwMDAyMDAwRjAwNjI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDYwRjAwMDAyMDAwRjAwNjM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDYxMDAwMDAyMDAwRjAwNjQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDYxMTAwMDAyMDAwRjAwNjU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDYxMjAwMDAyMDAwRjAwNjY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDYxMzAwMDAyMDAwRjAwNjc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDYxNDAwMDAyMDAwRjAwNjg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDYxNTAwMDAyMDAwRjAwNjk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDYxNjAwMDAyMDAwRjAwNkE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDYxNzAwMDAyMDAwRjAwNkI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDYxODAwMDAyMDAwRjAwNkM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDYxOTAwMDAyMDAwRjAwNkQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDYxQTAwMDAyMDAwRjAwNkU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDYxQjAwMDAyMDAwRjAwNkY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDYxQzAwMDAyMDAwRjAwNzA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDYxRDAwMDAyMDAwRjAwNzE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDYxRTAwMDAyMDAwRjAwNzI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDYxRjAwMDAyMDAwRjAwNzM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDYyMDAwMDAyMDAwRjAwNzQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDYyMTAwMDAyMDAwRjAwNzU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDYyMjAwMDAyMDAwRjAwNzY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDYyMzAwMDAyMDAwRjAwNzc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDYyNDAwMDAyMDAwRjAwNzg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDYyNTAwMDAyMDAwRjAwNzk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDYyNjAwMDAyMDAwRjAwN0E4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDYyNzAwMDAyMDAwRjAwN0I4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDYyODAwMDAyMDAwRjAwN0M4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDYyOTAwMDAyMDAwRjAwN0Q4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDYyQTAwMDAyMDAwRjAwN0U4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDYyQjAwMDAyMDAwRjAwN0Y4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDYyQzAwMDAyMDAwRjAwODA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDYyRDAwMDAyMDAwRjAwODE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDYyRTAwMDAyMDAwRjAwODI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDYyRjAwMDAyMDAwRjAwODM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDYzMDAwMDAyMDAwRjAwODQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDYzMTAwMDAyMDAwRjAwODU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDYzMjAwMDAyMDAwRjAwODY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDYzMzAwMDAyMDAwRjAwODc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDYzNDAwMDAyMDAwRjAwODg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDYzNTAwMDAyMDAwRjAwODk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDYzNjAwMDAyMDAwRjAwOEE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDYzNzAwMDAyMDAwRjAwOEI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDYzODAwMDAyMDAwRjAwOEM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDYzOTAwMDAyMDAwRjAwOEQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDYzQTAwMDAyMDAwRjAwOEU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDYzQjAwMDAyMDAwRjAwOEY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDYzQzAwMDAyMDAwRjAwOTA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDYzRDAwMDAyMDAwRjAwOTE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDYzRTAwMDAyMDAwRjAwOTI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDYzRjAwMDAyMDAwRjAwOTM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY0MDAwMDAyMDAwRjAwOTQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDY0MTAwMDAyMDAwRjAwOTU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDY0MjAwMDAyMDAwRjAwOTY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDY0MzAwMDAyMDAwRjAwOTc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDY0NDAwMDAyMDAwRjAwOTg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDY0NTAwMDAyMDAwRjAwOTk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY0NjAwMDAyMDAwRjAwOUE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY0NzAwMDAyMDAwRjAwOUI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY0ODAwMDAyMDAwRjAwOUM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY0OTAwMDAyMDAwRjAwOUQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY0QTAwMDAyMDAwRjAwOUU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY0QjAwMDAyMDAwRjAwOUY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY0QzAwMDAyMDAwRjAwQTA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY0RDAwMDAyMDAwRjAwQTE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY0RTAwMDAyMDAwRjAwQTI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY0RjAwMDAyMDAwRjAwQTM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY1MDAwMDAyMDAwRjAwQTQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDY1MTAwMDAyMDAwRjAwQTU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDY1MjAwMDAyMDAwRjAwQTY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDY1MzAwMDAyMDAwRjAwQTc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDY1NDAwMDAyMDAwRjAwQTg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY1NTAwMDAyMDAwRjAwQTk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY1NjAwMDAyMDAwRjAwQUE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY1NzAwMDAyMDAwRjAwQUI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY1ODAwMDAyMDAwRjAwQUM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY1OTAwMDAyMDAwRjAwQUQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY1QTAwMDAyMDAwRjAwQUU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY1QjAwMDAyMDAwRjAwQUY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY1QzAwMDAyMDAwRjAwQjA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY1RDAwMDAyMDAwRjAwQjE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY1RTAwMDAyMDAwRjAwQjI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY1RjAwMDAyMDAwRjAwQjM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDY2MDAwMDAyMDAwRjAwQjQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDY2MTAwMDAyMDAwRjAwQjU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDY2MjAwMDAyMDAwRjAwQjY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDY2MzAwMDAyMDAwRjAwQjc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY2NDAwMDAyMDAwRjAwQjg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY2NTAwMDAyMDAwRjAwQjk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY2NjAwMDAyMDAwRjAwQkE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY2NzAwMDAyMDAwRjAwQkI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY2ODAwMDAyMDAwRjAwQkM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY2OTAwMDAyMDAwRjAwQkQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY2QTAwMDAyMDAwRjAwQkU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY2QjAwMDAyMDAwRjAwQkY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY2QzAwMDAyMDAwRjAwQzA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY2RDAwMDAyMDAwRjAwQzE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY2RTAwMDAyMDAwRjAwQzI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDY2RjAwMDAyMDAwRjAwQzM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDY3MDAwMDAyMDAwRjAwQzQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDY3MTAwMDAyMDAwRjAwQzU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDY3MjAwMDAyMDAwRjAwQzY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY3MzAwMDAyMDAwRjAwQzc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY3NDAwMDAyMDAwRjAwQzg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY3NTAwMDAyMDAwRjAwQzk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY3NjAwMDAyMDAwRjAwQ0E4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY3NzAwMDAyMDAwRjAwQ0I4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY3ODAwMDAyMDAwRjAwQ0M4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY3OTAwMDAyMDAwRjAwQ0Q4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY3QTAwMDAyMDAwRjAwQ0U4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY3QjAwMDAyMDAwRjAwQ0Y4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY3QzAwMDAyMDAwRjAwRDA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY3RDAwMDAyMDAwRjAwRDE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDY3RTAwMDAyMDAwRjAwRDI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDY3RjAwMDAyMDAwRjAwRDM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDY4MDAwMDAyMDAwRjAwRDQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDY4MTAwMDAyMDAwRjAwRDU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY4MjAwMDAyMDAwRjAwRDY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY4MzAwMDAyMDAwRjAwRDc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY4NDAwMDAyMDAwRjAwRDg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY4NTAwMDAyMDAwRjAwRDk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY4NjAwMDAyMDAwRjAwREE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY4NzAwMDAyMDAwRjAwREI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY4ODAwMDAyMDAwRjAwREM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY4OTAwMDAyMDAwRjAwREQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY4QTAwMDAyMDAwRjAwREU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY4QjAwMDAyMDAwRjAwREY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY4QzAwMDAyMDAwRjAwRTA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDY4RDAwMDAyMDAwRjAwRTE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDY4RTAwMDAyMDAwRjAwRTI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDY4RjAwMDAyMDAwRjAwRTM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDY5MDAwMDAyMDAwRjAwRTQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDY5MTAwMDAyMDAwRjAwRTU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDY5MjAwMDAyMDAwRjAwRTY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDY5MzAwMDAyMDAwRjAwRTc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDY5NDAwMDAyMDAwRjAwRTg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDY5NTAwMDAyMDAwRjAwRTk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDY5NjAwMDAyMDAwRjAwRUE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDY5NzAwMDAyMDAwRjAwRUI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDY5ODAwMDAyMDAwRjAwRUM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDY5OTAwMDAyMDAwRjAwRUQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDY5QTAwMDAyMDAwRjAwRUU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDY5QjAwMDAyMDAwRjAwRUY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDY5QzAwMDAyMDAwRjAwRjA4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDY5RDAwMDAyMDAwRjAwRjE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDY5RTAwMDAyMDAwRjAwRjI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDY5RjAwMDAyMDAwRjAwRjM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDZBMDAwMDAyMDAwRjAwRjQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZBMTAwMDAyMDAwRjAwRjU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZBMjAwMDAyMDAwRjAwRjY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDZBMzAwMDAyMDAwRjAwRjc4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDZBNDAwMDAyMDAwRjAwRjg4MzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDZBNTAwMDAyMDAwRjAwRjk4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDZBNjAwMDAyMDAwRjAwRkE4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDZBNzAwMDAyMDAwRjAwRkI4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDZBODAwMDAyMDAwRjAwRkM4MzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDZBOTAwMDAyMDAwRjAwRkQ4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDZBQTAwMDAyMDAwRjAwRkU4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDZBQjAwMDAyMDAwRjAwRkY4MzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDZBQzAwMDAyMDAwRjAwMDA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZBRDAwMDAyMDAwRjAwMDE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZBRTAwMDAyMDAwRjAwMDI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZBRjAwMDAyMDAwRjAwMDM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZCMDAwMDAyMDAwRjAwMDQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0IKKzoxMDZCMTAwMDAyMDAwRjAwMDU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDZCMjAwMDAyMDAwRjAwMDY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDZCMzAwMDAyMDAwRjAwMDc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDZCNDAwMDAyMDAwRjAwMDg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDZCNTAwMDAyMDAwRjAwMDk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDZCNjAwMDAyMDAwRjAwMEE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDZCNzAwMDAyMDAwRjAwMEI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDZCODAwMDAyMDAwRjAwMEM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDZCOTAwMDAyMDAwRjAwMEQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDZCQTAwMDAyMDAwRjAwMEU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDZCQjAwMDAyMDAwRjAwMEY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZCQzAwMDAyMDAwRjAwMTA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZCRDAwMDAyMDAwRjAwMTE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZCRTAwMDAyMDAwRjAwMTI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZCRjAwMDAyMDAwRjAwMTM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZDMDAwMDAyMDAwRjAwMTQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDZDMTAwMDAyMDAwRjAwMTU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDZDMjAwMDAyMDAwRjAwMTY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDZDMzAwMDAyMDAwRjAwMTc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDZDNDAwMDAyMDAwRjAwMTg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDZDNTAwMDAyMDAwRjAwMTk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDZDNjAwMDAyMDAwRjAwMUE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDZDNzAwMDAyMDAwRjAwMUI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDZDODAwMDAyMDAwRjAwMUM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDZDOTAwMDAyMDAwRjAwMUQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDZDQTAwMDAyMDAwRjAwMUU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZDQjAwMDAyMDAwRjAwMUY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZDQzAwMDAyMDAwRjAwMjA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZDRDAwMDAyMDAwRjAwMjE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZDRTAwMDAyMDAwRjAwMjI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZDRjAwMDAyMDAwRjAwMjM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDZEMDAwMDAyMDAwRjAwMjQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDZEMTAwMDAyMDAwRjAwMjU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDZEMjAwMDAyMDAwRjAwMjY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDZEMzAwMDAyMDAwRjAwMjc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDZENDAwMDAyMDAwRjAwMjg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDZENTAwMDAyMDAwRjAwMjk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDZENjAwMDAyMDAwRjAwMkE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDZENzAwMDAyMDAwRjAwMkI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDZEODAwMDAyMDAwRjAwMkM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDZEOTAwMDAyMDAwRjAwMkQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZEQTAwMDAyMDAwRjAwMkU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZEQjAwMDAyMDAwRjAwMkY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZEQzAwMDAyMDAwRjAwMzA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZERDAwMDAyMDAwRjAwMzE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZERTAwMDAyMDAwRjAwMzI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDZERjAwMDAyMDAwRjAwMzM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDZFMDAwMDAyMDAwRjAwMzQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDZFMTAwMDAyMDAwRjAwMzU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDZFMjAwMDAyMDAwRjAwMzY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDZFMzAwMDAyMDAwRjAwMzc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDZFNDAwMDAyMDAwRjAwMzg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDZFNTAwMDAyMDAwRjAwMzk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDZFNjAwMDAyMDAwRjAwM0E4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDZFNzAwMDAyMDAwRjAwM0I4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDZFODAwMDAyMDAwRjAwM0M4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZFOTAwMDAyMDAwRjAwM0Q4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZFQTAwMDAyMDAwRjAwM0U4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZFQjAwMDAyMDAwRjAwM0Y4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZFQzAwMDAyMDAwRjAwNDA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZFRDAwMDAyMDAwRjAwNDE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDZFRTAwMDAyMDAwRjAwNDI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDZFRjAwMDAyMDAwRjAwNDM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDZGMDAwMDAyMDAwRjAwNDQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDZGMTAwMDAyMDAwRjAwNDU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDZGMjAwMDAyMDAwRjAwNDY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDZGMzAwMDAyMDAwRjAwNDc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDZGNDAwMDAyMDAwRjAwNDg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDZGNTAwMDAyMDAwRjAwNDk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDZGNjAwMDAyMDAwRjAwNEE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDZGNzAwMDAyMDAwRjAwNEI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDZGODAwMDAyMDAwRjAwNEM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDZGOTAwMDAyMDAwRjAwNEQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDZGQTAwMDAyMDAwRjAwNEU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDZGQjAwMDAyMDAwRjAwNEY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDZGQzAwMDAyMDAwRjAwNTA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDZGRDAwMDAyMDAwRjAwNTE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDZGRTAwMDAyMDAwRjAwNTI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDZGRjAwMDAyMDAwRjAwNTM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDcwMDAwMDAyMDAwRjAwNTQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDcwMTAwMDAyMDAwRjAwNTU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDcwMjAwMDAyMDAwRjAwNTY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDcwMzAwMDAyMDAwRjAwNTc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDcwNDAwMDAyMDAwRjAwNTg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDcwNTAwMDAyMDAwRjAwNTk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDcwNjAwMDAyMDAwRjAwNUE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDcwNzAwMDAyMDAwRjAwNUI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDcwODAwMDAyMDAwRjAwNUM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDcwOTAwMDAyMDAwRjAwNUQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDcwQTAwMDAyMDAwRjAwNUU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDcwQjAwMDAyMDAwRjAwNUY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDcwQzAwMDAyMDAwRjAwNjA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDcwRDAwMDAyMDAwRjAwNjE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDcwRTAwMDAyMDAwRjAwNjI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDcwRjAwMDAyMDAwRjAwNjM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDcxMDAwMDAyMDAwRjAwNjQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDcxMTAwMDAyMDAwRjAwNjU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDcxMjAwMDAyMDAwRjAwNjY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDcxMzAwMDAyMDAwRjAwNjc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDcxNDAwMDAyMDAwRjAwNjg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDcxNTAwMDAyMDAwRjAwNjk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDcxNjAwMDAyMDAwRjAwNkE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDcxNzAwMDAyMDAwRjAwNkI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDcxODAwMDAyMDAwRjAwNkM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDcxOTAwMDAyMDAwRjAwNkQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDcxQTAwMDAyMDAwRjAwNkU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDcxQjAwMDAyMDAwRjAwNkY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDcxQzAwMDAyMDAwRjAwNzA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDcxRDAwMDAyMDAwRjAwNzE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDcxRTAwMDAyMDAwRjAwNzI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDcxRjAwMDAyMDAwRjAwNzM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDcyMDAwMDAyMDAwRjAwNzQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDcyMTAwMDAyMDAwRjAwNzU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDcyMjAwMDAyMDAwRjAwNzY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDcyMzAwMDAyMDAwRjAwNzc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDcyNDAwMDAyMDAwRjAwNzg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDcyNTAwMDAyMDAwRjAwNzk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDcyNjAwMDAyMDAwRjAwN0E4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDcyNzAwMDAyMDAwRjAwN0I4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDcyODAwMDAyMDAwRjAwN0M4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDcyOTAwMDAyMDAwRjAwN0Q4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDcyQTAwMDAyMDAwRjAwN0U4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDcyQjAwMDAyMDAwRjAwN0Y4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDcyQzAwMDAyMDAwRjAwODA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDcyRDAwMDAyMDAwRjAwODE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDcyRTAwMDAyMDAwRjAwODI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDcyRjAwMDAyMDAwRjAwODM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDczMDAwMDAyMDAwRjAwODQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDczMTAwMDAyMDAwRjAwODU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDczMjAwMDAyMDAwRjAwODY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDczMzAwMDAyMDAwRjAwODc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDczNDAwMDAyMDAwRjAwODg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDczNTAwMDAyMDAwRjAwODk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDczNjAwMDAyMDAwRjAwOEE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDczNzAwMDAyMDAwRjAwOEI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDczODAwMDAyMDAwRjAwOEM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDczOTAwMDAyMDAwRjAwOEQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDczQTAwMDAyMDAwRjAwOEU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDczQjAwMDAyMDAwRjAwOEY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDczQzAwMDAyMDAwRjAwOTA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDczRDAwMDAyMDAwRjAwOTE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDczRTAwMDAyMDAwRjAwOTI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDczRjAwMDAyMDAwRjAwOTM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc0MDAwMDAyMDAwRjAwOTQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDc0MTAwMDAyMDAwRjAwOTU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDc0MjAwMDAyMDAwRjAwOTY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDc0MzAwMDAyMDAwRjAwOTc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDc0NDAwMDAyMDAwRjAwOTg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDc0NTAwMDAyMDAwRjAwOTk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc0NjAwMDAyMDAwRjAwOUE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc0NzAwMDAyMDAwRjAwOUI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc0ODAwMDAyMDAwRjAwOUM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc0OTAwMDAyMDAwRjAwOUQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc0QTAwMDAyMDAwRjAwOUU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc0QjAwMDAyMDAwRjAwOUY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc0QzAwMDAyMDAwRjAwQTA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc0RDAwMDAyMDAwRjAwQTE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc0RTAwMDAyMDAwRjAwQTI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc0RjAwMDAyMDAwRjAwQTM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc1MDAwMDAyMDAwRjAwQTQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDc1MTAwMDAyMDAwRjAwQTU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDc1MjAwMDAyMDAwRjAwQTY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDc1MzAwMDAyMDAwRjAwQTc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDc1NDAwMDAyMDAwRjAwQTg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc1NTAwMDAyMDAwRjAwQTk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc1NjAwMDAyMDAwRjAwQUE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc1NzAwMDAyMDAwRjAwQUI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc1ODAwMDAyMDAwRjAwQUM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc1OTAwMDAyMDAwRjAwQUQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc1QTAwMDAyMDAwRjAwQUU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc1QjAwMDAyMDAwRjAwQUY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc1QzAwMDAyMDAwRjAwQjA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc1RDAwMDAyMDAwRjAwQjE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc1RTAwMDAyMDAwRjAwQjI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc1RjAwMDAyMDAwRjAwQjM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDc2MDAwMDAyMDAwRjAwQjQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDc2MTAwMDAyMDAwRjAwQjU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDc2MjAwMDAyMDAwRjAwQjY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDc2MzAwMDAyMDAwRjAwQjc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc2NDAwMDAyMDAwRjAwQjg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc2NTAwMDAyMDAwRjAwQjk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc2NjAwMDAyMDAwRjAwQkE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc2NzAwMDAyMDAwRjAwQkI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc2ODAwMDAyMDAwRjAwQkM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc2OTAwMDAyMDAwRjAwQkQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc2QTAwMDAyMDAwRjAwQkU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc2QjAwMDAyMDAwRjAwQkY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc2QzAwMDAyMDAwRjAwQzA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc2RDAwMDAyMDAwRjAwQzE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc2RTAwMDAyMDAwRjAwQzI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDc2RjAwMDAyMDAwRjAwQzM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDc3MDAwMDAyMDAwRjAwQzQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDc3MTAwMDAyMDAwRjAwQzU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDc3MjAwMDAyMDAwRjAwQzY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc3MzAwMDAyMDAwRjAwQzc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc3NDAwMDAyMDAwRjAwQzg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc3NTAwMDAyMDAwRjAwQzk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc3NjAwMDAyMDAwRjAwQ0E4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc3NzAwMDAyMDAwRjAwQ0I4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc3ODAwMDAyMDAwRjAwQ0M4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc3OTAwMDAyMDAwRjAwQ0Q4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc3QTAwMDAyMDAwRjAwQ0U4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc3QjAwMDAyMDAwRjAwQ0Y4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc3QzAwMDAyMDAwRjAwRDA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc3RDAwMDAyMDAwRjAwRDE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDc3RTAwMDAyMDAwRjAwRDI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDc3RjAwMDAyMDAwRjAwRDM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDc4MDAwMDAyMDAwRjAwRDQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDc4MTAwMDAyMDAwRjAwRDU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc4MjAwMDAyMDAwRjAwRDY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc4MzAwMDAyMDAwRjAwRDc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc4NDAwMDAyMDAwRjAwRDg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc4NTAwMDAyMDAwRjAwRDk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc4NjAwMDAyMDAwRjAwREE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc4NzAwMDAyMDAwRjAwREI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc4ODAwMDAyMDAwRjAwREM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc4OTAwMDAyMDAwRjAwREQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc4QTAwMDAyMDAwRjAwREU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc4QjAwMDAyMDAwRjAwREY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc4QzAwMDAyMDAwRjAwRTA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDc4RDAwMDAyMDAwRjAwRTE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDc4RTAwMDAyMDAwRjAwRTI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDc4RjAwMDAyMDAwRjAwRTM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDc5MDAwMDAyMDAwRjAwRTQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDc5MTAwMDAyMDAwRjAwRTU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDc5MjAwMDAyMDAwRjAwRTY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDc5MzAwMDAyMDAwRjAwRTc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDc5NDAwMDAyMDAwRjAwRTg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDc5NTAwMDAyMDAwRjAwRTk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDc5NjAwMDAyMDAwRjAwRUE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDc5NzAwMDAyMDAwRjAwRUI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDc5ODAwMDAyMDAwRjAwRUM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDc5OTAwMDAyMDAwRjAwRUQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDc5QTAwMDAyMDAwRjAwRUU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDc5QjAwMDAyMDAwRjAwRUY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDc5QzAwMDAyMDAwRjAwRjA4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDc5RDAwMDAyMDAwRjAwRjE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDc5RTAwMDAyMDAwRjAwRjI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDc5RjAwMDAyMDAwRjAwRjM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDdBMDAwMDAyMDAwRjAwRjQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdBMTAwMDAyMDAwRjAwRjU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdBMjAwMDAyMDAwRjAwRjY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDdBMzAwMDAyMDAwRjAwRjc4NDcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDdBNDAwMDAyMDAwRjAwRjg4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDdBNTAwMDAyMDAwRjAwRjk4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDdBNjAwMDAyMDAwRjAwRkE4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDdBNzAwMDAyMDAwRjAwRkI4NDcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDdBODAwMDAyMDAwRjAwRkM4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDdBOTAwMDAyMDAwRjAwRkQ4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDdBQTAwMDAyMDAwRjAwRkU4NDcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDdBQjAwMDAyMDAwRjAwRkY4NDcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDdBQzAwMDAyMDAwRjAwMDA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdBRDAwMDAyMDAwRjAwMDE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdBRTAwMDAyMDAwRjAwMDI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdBRjAwMDAyMDAwRjAwMDM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdCMDAwMDAyMDAwRjAwMDQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkEKKzoxMDdCMTAwMDAyMDAwRjAwMDU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDdCMjAwMDAyMDAwRjAwMDY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDdCMzAwMDAyMDAwRjAwMDc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDdCNDAwMDAyMDAwRjAwMDg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDdCNTAwMDAyMDAwRjAwMDk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDdCNjAwMDAyMDAwRjAwMEE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDdCNzAwMDAyMDAwRjAwMEI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDdCODAwMDAyMDAwRjAwMEM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDdCOTAwMDAyMDAwRjAwMEQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDdCQTAwMDAyMDAwRjAwMEU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDdCQjAwMDAyMDAwRjAwMEY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdCQzAwMDAyMDAwRjAwMTA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdCRDAwMDAyMDAwRjAwMTE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdCRTAwMDAyMDAwRjAwMTI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdCRjAwMDAyMDAwRjAwMTM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdDMDAwMDAyMDAwRjAwMTQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDdDMTAwMDAyMDAwRjAwMTU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDdDMjAwMDAyMDAwRjAwMTY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDdDMzAwMDAyMDAwRjAwMTc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDdDNDAwMDAyMDAwRjAwMTg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDdDNTAwMDAyMDAwRjAwMTk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDdDNjAwMDAyMDAwRjAwMUE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDdDNzAwMDAyMDAwRjAwMUI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDdDODAwMDAyMDAwRjAwMUM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDdDOTAwMDAyMDAwRjAwMUQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDdDQTAwMDAyMDAwRjAwMUU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdDQjAwMDAyMDAwRjAwMUY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdDQzAwMDAyMDAwRjAwMjA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdDRDAwMDAyMDAwRjAwMjE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdDRTAwMDAyMDAwRjAwMjI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdDRjAwMDAyMDAwRjAwMjM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDdEMDAwMDAyMDAwRjAwMjQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDdEMTAwMDAyMDAwRjAwMjU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDdEMjAwMDAyMDAwRjAwMjY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDdEMzAwMDAyMDAwRjAwMjc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDdENDAwMDAyMDAwRjAwMjg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDdENTAwMDAyMDAwRjAwMjk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDdENjAwMDAyMDAwRjAwMkE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDdENzAwMDAyMDAwRjAwMkI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDdEODAwMDAyMDAwRjAwMkM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDdEOTAwMDAyMDAwRjAwMkQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdEQTAwMDAyMDAwRjAwMkU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdEQjAwMDAyMDAwRjAwMkY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdEQzAwMDAyMDAwRjAwMzA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdERDAwMDAyMDAwRjAwMzE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdERTAwMDAyMDAwRjAwMzI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDdERjAwMDAyMDAwRjAwMzM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDdFMDAwMDAyMDAwRjAwMzQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDdFMTAwMDAyMDAwRjAwMzU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDdFMjAwMDAyMDAwRjAwMzY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDdFMzAwMDAyMDAwRjAwMzc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDdFNDAwMDAyMDAwRjAwMzg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDdFNTAwMDAyMDAwRjAwMzk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDdFNjAwMDAyMDAwRjAwM0E4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDdFNzAwMDAyMDAwRjAwM0I4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDdFODAwMDAyMDAwRjAwM0M4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdFOTAwMDAyMDAwRjAwM0Q4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdFQTAwMDAyMDAwRjAwM0U4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdFQjAwMDAyMDAwRjAwM0Y4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdFQzAwMDAyMDAwRjAwNDA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdFRDAwMDAyMDAwRjAwNDE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDdFRTAwMDAyMDAwRjAwNDI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDdFRjAwMDAyMDAwRjAwNDM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDdGMDAwMDAyMDAwRjAwNDQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDdGMTAwMDAyMDAwRjAwNDU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDdGMjAwMDAyMDAwRjAwNDY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDdGMzAwMDAyMDAwRjAwNDc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDdGNDAwMDAyMDAwRjAwNDg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDdGNTAwMDAyMDAwRjAwNDk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDdGNjAwMDAyMDAwRjAwNEE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDdGNzAwMDAyMDAwRjAwNEI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDdGODAwMDAyMDAwRjAwNEM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDdGOTAwMDAyMDAwRjAwNEQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDdGQTAwMDAyMDAwRjAwNEU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDdGQjAwMDAyMDAwRjAwNEY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDdGQzAwMDAyMDAwRjAwNTA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDdGRDAwMDAyMDAwRjAwNTE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDdGRTAwMDAyMDAwRjAwNTI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDdGRjAwMDAyMDAwRjAwNTM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDgwMDAwMDAyMDAwRjAwNTQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDgwMTAwMDAyMDAwRjAwNTU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDgwMjAwMDAyMDAwRjAwNTY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDgwMzAwMDAyMDAwRjAwNTc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDgwNDAwMDAyMDAwRjAwNTg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDgwNTAwMDAyMDAwRjAwNTk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDgwNjAwMDAyMDAwRjAwNUE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDgwNzAwMDAyMDAwRjAwNUI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDgwODAwMDAyMDAwRjAwNUM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDgwOTAwMDAyMDAwRjAwNUQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDgwQTAwMDAyMDAwRjAwNUU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDgwQjAwMDAyMDAwRjAwNUY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDgwQzAwMDAyMDAwRjAwNjA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDgwRDAwMDAyMDAwRjAwNjE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDgwRTAwMDAyMDAwRjAwNjI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDgwRjAwMDAyMDAwRjAwNjM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDgxMDAwMDAyMDAwRjAwNjQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDgxMTAwMDAyMDAwRjAwNjU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDgxMjAwMDAyMDAwRjAwNjY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDgxMzAwMDAyMDAwRjAwNjc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDgxNDAwMDAyMDAwRjAwNjg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDgxNTAwMDAyMDAwRjAwNjk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDgxNjAwMDAyMDAwRjAwNkE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDgxNzAwMDAyMDAwRjAwNkI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDgxODAwMDAyMDAwRjAwNkM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDgxOTAwMDAyMDAwRjAwNkQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDgxQTAwMDAyMDAwRjAwNkU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDgxQjAwMDAyMDAwRjAwNkY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDgxQzAwMDAyMDAwRjAwNzA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDgxRDAwMDAyMDAwRjAwNzE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDgxRTAwMDAyMDAwRjAwNzI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDgxRjAwMDAyMDAwRjAwNzM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDgyMDAwMDAyMDAwRjAwNzQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDgyMTAwMDAyMDAwRjAwNzU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDgyMjAwMDAyMDAwRjAwNzY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDgyMzAwMDAyMDAwRjAwNzc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDgyNDAwMDAyMDAwRjAwNzg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDgyNTAwMDAyMDAwRjAwNzk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDgyNjAwMDAyMDAwRjAwN0E4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDgyNzAwMDAyMDAwRjAwN0I4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDgyODAwMDAyMDAwRjAwN0M4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDgyOTAwMDAyMDAwRjAwN0Q4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDgyQTAwMDAyMDAwRjAwN0U4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDgyQjAwMDAyMDAwRjAwN0Y4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDgyQzAwMDAyMDAwRjAwODA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDgyRDAwMDAyMDAwRjAwODE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDgyRTAwMDAyMDAwRjAwODI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDgyRjAwMDAyMDAwRjAwODM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDgzMDAwMDAyMDAwRjAwODQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDgzMTAwMDAyMDAwRjAwODU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDgzMjAwMDAyMDAwRjAwODY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDgzMzAwMDAyMDAwRjAwODc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDgzNDAwMDAyMDAwRjAwODg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDgzNTAwMDAyMDAwRjAwODk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDgzNjAwMDAyMDAwRjAwOEE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDgzNzAwMDAyMDAwRjAwOEI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDgzODAwMDAyMDAwRjAwOEM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDgzOTAwMDAyMDAwRjAwOEQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDgzQTAwMDAyMDAwRjAwOEU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDgzQjAwMDAyMDAwRjAwOEY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDgzQzAwMDAyMDAwRjAwOTA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDgzRDAwMDAyMDAwRjAwOTE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDgzRTAwMDAyMDAwRjAwOTI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDgzRjAwMDAyMDAwRjAwOTM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg0MDAwMDAyMDAwRjAwOTQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDg0MTAwMDAyMDAwRjAwOTU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDg0MjAwMDAyMDAwRjAwOTY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDg0MzAwMDAyMDAwRjAwOTc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDg0NDAwMDAyMDAwRjAwOTg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDg0NTAwMDAyMDAwRjAwOTk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg0NjAwMDAyMDAwRjAwOUE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg0NzAwMDAyMDAwRjAwOUI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg0ODAwMDAyMDAwRjAwOUM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg0OTAwMDAyMDAwRjAwOUQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg0QTAwMDAyMDAwRjAwOUU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg0QjAwMDAyMDAwRjAwOUY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg0QzAwMDAyMDAwRjAwQTA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg0RDAwMDAyMDAwRjAwQTE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg0RTAwMDAyMDAwRjAwQTI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg0RjAwMDAyMDAwRjAwQTM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg1MDAwMDAyMDAwRjAwQTQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDg1MTAwMDAyMDAwRjAwQTU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDg1MjAwMDAyMDAwRjAwQTY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDg1MzAwMDAyMDAwRjAwQTc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDg1NDAwMDAyMDAwRjAwQTg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg1NTAwMDAyMDAwRjAwQTk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg1NjAwMDAyMDAwRjAwQUE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg1NzAwMDAyMDAwRjAwQUI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg1ODAwMDAyMDAwRjAwQUM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg1OTAwMDAyMDAwRjAwQUQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg1QTAwMDAyMDAwRjAwQUU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg1QjAwMDAyMDAwRjAwQUY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg1QzAwMDAyMDAwRjAwQjA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg1RDAwMDAyMDAwRjAwQjE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg1RTAwMDAyMDAwRjAwQjI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg1RjAwMDAyMDAwRjAwQjM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDg2MDAwMDAyMDAwRjAwQjQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDg2MTAwMDAyMDAwRjAwQjU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDg2MjAwMDAyMDAwRjAwQjY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDg2MzAwMDAyMDAwRjAwQjc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg2NDAwMDAyMDAwRjAwQjg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg2NTAwMDAyMDAwRjAwQjk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg2NjAwMDAyMDAwRjAwQkE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg2NzAwMDAyMDAwRjAwQkI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg2ODAwMDAyMDAwRjAwQkM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg2OTAwMDAyMDAwRjAwQkQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg2QTAwMDAyMDAwRjAwQkU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg2QjAwMDAyMDAwRjAwQkY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg2QzAwMDAyMDAwRjAwQzA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg2RDAwMDAyMDAwRjAwQzE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg2RTAwMDAyMDAwRjAwQzI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDg2RjAwMDAyMDAwRjAwQzM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDg3MDAwMDAyMDAwRjAwQzQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDg3MTAwMDAyMDAwRjAwQzU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDg3MjAwMDAyMDAwRjAwQzY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg3MzAwMDAyMDAwRjAwQzc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg3NDAwMDAyMDAwRjAwQzg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg3NTAwMDAyMDAwRjAwQzk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg3NjAwMDAyMDAwRjAwQ0E4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg3NzAwMDAyMDAwRjAwQ0I4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg3ODAwMDAyMDAwRjAwQ0M4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg3OTAwMDAyMDAwRjAwQ0Q4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg3QTAwMDAyMDAwRjAwQ0U4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg3QjAwMDAyMDAwRjAwQ0Y4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg3QzAwMDAyMDAwRjAwRDA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg3RDAwMDAyMDAwRjAwRDE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDg3RTAwMDAyMDAwRjAwRDI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDg3RjAwMDAyMDAwRjAwRDM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDg4MDAwMDAyMDAwRjAwRDQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDg4MTAwMDAyMDAwRjAwRDU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg4MjAwMDAyMDAwRjAwRDY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg4MzAwMDAyMDAwRjAwRDc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg4NDAwMDAyMDAwRjAwRDg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg4NTAwMDAyMDAwRjAwRDk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg4NjAwMDAyMDAwRjAwREE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg4NzAwMDAyMDAwRjAwREI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg4ODAwMDAyMDAwRjAwREM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg4OTAwMDAyMDAwRjAwREQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg4QTAwMDAyMDAwRjAwREU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg4QjAwMDAyMDAwRjAwREY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg4QzAwMDAyMDAwRjAwRTA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDg4RDAwMDAyMDAwRjAwRTE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDg4RTAwMDAyMDAwRjAwRTI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDg4RjAwMDAyMDAwRjAwRTM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDg5MDAwMDAyMDAwRjAwRTQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDg5MTAwMDAyMDAwRjAwRTU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDg5MjAwMDAyMDAwRjAwRTY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDg5MzAwMDAyMDAwRjAwRTc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDg5NDAwMDAyMDAwRjAwRTg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDg5NTAwMDAyMDAwRjAwRTk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDg5NjAwMDAyMDAwRjAwRUE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDg5NzAwMDAyMDAwRjAwRUI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDg5ODAwMDAyMDAwRjAwRUM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDg5OTAwMDAyMDAwRjAwRUQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDg5QTAwMDAyMDAwRjAwRUU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDg5QjAwMDAyMDAwRjAwRUY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDg5QzAwMDAyMDAwRjAwRjA4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDg5RDAwMDAyMDAwRjAwRjE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDg5RTAwMDAyMDAwRjAwRjI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDg5RjAwMDAyMDAwRjAwRjM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDhBMDAwMDAyMDAwRjAwRjQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhBMTAwMDAyMDAwRjAwRjU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhBMjAwMDAyMDAwRjAwRjY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDhBMzAwMDAyMDAwRjAwRjc4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDhBNDAwMDAyMDAwRjAwRjg4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDhBNTAwMDAyMDAwRjAwRjk4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDhBNjAwMDAyMDAwRjAwRkE4NTcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDhBNzAwMDAyMDAwRjAwRkI4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDhBODAwMDAyMDAwRjAwRkM4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDhBOTAwMDAyMDAwRjAwRkQ4NTcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDhBQTAwMDAyMDAwRjAwRkU4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDhBQjAwMDAyMDAwRjAwRkY4NTcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDhBQzAwMDAyMDAwRjAwMDA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhBRDAwMDAyMDAwRjAwMDE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhBRTAwMDAyMDAwRjAwMDI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhBRjAwMDAyMDAwRjAwMDM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhCMDAwMDAyMDAwRjAwMDQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNTkKKzoxMDhCMTAwMDAyMDAwRjAwMDU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDhCMjAwMDAyMDAwRjAwMDY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDhCMzAwMDAyMDAwRjAwMDc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDhCNDAwMDAyMDAwRjAwMDg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDhCNTAwMDAyMDAwRjAwMDk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDhCNjAwMDAyMDAwRjAwMEE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDhCNzAwMDAyMDAwRjAwMEI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDhCODAwMDAyMDAwRjAwMEM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDhCOTAwMDAyMDAwRjAwMEQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDhCQTAwMDAyMDAwRjAwMEU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDhCQjAwMDAyMDAwRjAwMEY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhCQzAwMDAyMDAwRjAwMTA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhCRDAwMDAyMDAwRjAwMTE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhCRTAwMDAyMDAwRjAwMTI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhCRjAwMDAyMDAwRjAwMTM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhDMDAwMDAyMDAwRjAwMTQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDhDMTAwMDAyMDAwRjAwMTU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDhDMjAwMDAyMDAwRjAwMTY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDhDMzAwMDAyMDAwRjAwMTc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDhDNDAwMDAyMDAwRjAwMTg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDhDNTAwMDAyMDAwRjAwMTk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDhDNjAwMDAyMDAwRjAwMUE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDhDNzAwMDAyMDAwRjAwMUI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDhDODAwMDAyMDAwRjAwMUM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDhDOTAwMDAyMDAwRjAwMUQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDhDQTAwMDAyMDAwRjAwMUU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhDQjAwMDAyMDAwRjAwMUY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhDQzAwMDAyMDAwRjAwMjA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhDRDAwMDAyMDAwRjAwMjE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhDRTAwMDAyMDAwRjAwMjI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhDRjAwMDAyMDAwRjAwMjM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDhEMDAwMDAyMDAwRjAwMjQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDhEMTAwMDAyMDAwRjAwMjU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDhEMjAwMDAyMDAwRjAwMjY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDhEMzAwMDAyMDAwRjAwMjc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDhENDAwMDAyMDAwRjAwMjg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDhENTAwMDAyMDAwRjAwMjk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDhENjAwMDAyMDAwRjAwMkE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDhENzAwMDAyMDAwRjAwMkI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDhEODAwMDAyMDAwRjAwMkM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDhEOTAwMDAyMDAwRjAwMkQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhEQTAwMDAyMDAwRjAwMkU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhEQjAwMDAyMDAwRjAwMkY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhEQzAwMDAyMDAwRjAwMzA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhERDAwMDAyMDAwRjAwMzE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhERTAwMDAyMDAwRjAwMzI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDhERjAwMDAyMDAwRjAwMzM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDhFMDAwMDAyMDAwRjAwMzQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDhFMTAwMDAyMDAwRjAwMzU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDhFMjAwMDAyMDAwRjAwMzY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDhFMzAwMDAyMDAwRjAwMzc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDhFNDAwMDAyMDAwRjAwMzg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDhFNTAwMDAyMDAwRjAwMzk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDhFNjAwMDAyMDAwRjAwM0E4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDhFNzAwMDAyMDAwRjAwM0I4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDhFODAwMDAyMDAwRjAwM0M4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhFOTAwMDAyMDAwRjAwM0Q4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhFQTAwMDAyMDAwRjAwM0U4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhFQjAwMDAyMDAwRjAwM0Y4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhFQzAwMDAyMDAwRjAwNDA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhFRDAwMDAyMDAwRjAwNDE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDhFRTAwMDAyMDAwRjAwNDI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDhFRjAwMDAyMDAwRjAwNDM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDhGMDAwMDAyMDAwRjAwNDQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDhGMTAwMDAyMDAwRjAwNDU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDhGMjAwMDAyMDAwRjAwNDY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDhGMzAwMDAyMDAwRjAwNDc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDhGNDAwMDAyMDAwRjAwNDg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDhGNTAwMDAyMDAwRjAwNDk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDhGNjAwMDAyMDAwRjAwNEE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDhGNzAwMDAyMDAwRjAwNEI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDhGODAwMDAyMDAwRjAwNEM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDhGOTAwMDAyMDAwRjAwNEQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDhGQTAwMDAyMDAwRjAwNEU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDhGQjAwMDAyMDAwRjAwNEY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDhGQzAwMDAyMDAwRjAwNTA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDhGRDAwMDAyMDAwRjAwNTE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDhGRTAwMDAyMDAwRjAwNTI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDhGRjAwMDAyMDAwRjAwNTM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDkwMDAwMDAyMDAwRjAwNTQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDkwMTAwMDAyMDAwRjAwNTU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDkwMjAwMDAyMDAwRjAwNTY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDkwMzAwMDAyMDAwRjAwNTc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDkwNDAwMDAyMDAwRjAwNTg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDkwNTAwMDAyMDAwRjAwNTk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDkwNjAwMDAyMDAwRjAwNUE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDkwNzAwMDAyMDAwRjAwNUI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDkwODAwMDAyMDAwRjAwNUM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDkwOTAwMDAyMDAwRjAwNUQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDkwQTAwMDAyMDAwRjAwNUU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDkwQjAwMDAyMDAwRjAwNUY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDkwQzAwMDAyMDAwRjAwNjA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDkwRDAwMDAyMDAwRjAwNjE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDkwRTAwMDAyMDAwRjAwNjI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDkwRjAwMDAyMDAwRjAwNjM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDkxMDAwMDAyMDAwRjAwNjQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDkxMTAwMDAyMDAwRjAwNjU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDkxMjAwMDAyMDAwRjAwNjY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDkxMzAwMDAyMDAwRjAwNjc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDkxNDAwMDAyMDAwRjAwNjg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDkxNTAwMDAyMDAwRjAwNjk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDkxNjAwMDAyMDAwRjAwNkE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDkxNzAwMDAyMDAwRjAwNkI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDkxODAwMDAyMDAwRjAwNkM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDkxOTAwMDAyMDAwRjAwNkQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDkxQTAwMDAyMDAwRjAwNkU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDkxQjAwMDAyMDAwRjAwNkY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDkxQzAwMDAyMDAwRjAwNzA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDkxRDAwMDAyMDAwRjAwNzE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDkxRTAwMDAyMDAwRjAwNzI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDkxRjAwMDAyMDAwRjAwNzM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDkyMDAwMDAyMDAwRjAwNzQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDkyMTAwMDAyMDAwRjAwNzU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDkyMjAwMDAyMDAwRjAwNzY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDkyMzAwMDAyMDAwRjAwNzc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDkyNDAwMDAyMDAwRjAwNzg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDkyNTAwMDAyMDAwRjAwNzk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDkyNjAwMDAyMDAwRjAwN0E4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDkyNzAwMDAyMDAwRjAwN0I4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDkyODAwMDAyMDAwRjAwN0M4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDkyOTAwMDAyMDAwRjAwN0Q4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDkyQTAwMDAyMDAwRjAwN0U4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDkyQjAwMDAyMDAwRjAwN0Y4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDkyQzAwMDAyMDAwRjAwODA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDkyRDAwMDAyMDAwRjAwODE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDkyRTAwMDAyMDAwRjAwODI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDkyRjAwMDAyMDAwRjAwODM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDkzMDAwMDAyMDAwRjAwODQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDkzMTAwMDAyMDAwRjAwODU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDkzMjAwMDAyMDAwRjAwODY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDkzMzAwMDAyMDAwRjAwODc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDkzNDAwMDAyMDAwRjAwODg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDkzNTAwMDAyMDAwRjAwODk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDkzNjAwMDAyMDAwRjAwOEE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDkzNzAwMDAyMDAwRjAwOEI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDkzODAwMDAyMDAwRjAwOEM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDkzOTAwMDAyMDAwRjAwOEQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDkzQTAwMDAyMDAwRjAwOEU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDkzQjAwMDAyMDAwRjAwOEY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDkzQzAwMDAyMDAwRjAwOTA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDkzRDAwMDAyMDAwRjAwOTE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDkzRTAwMDAyMDAwRjAwOTI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDkzRjAwMDAyMDAwRjAwOTM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk0MDAwMDAyMDAwRjAwOTQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDk0MTAwMDAyMDAwRjAwOTU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDk0MjAwMDAyMDAwRjAwOTY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDk0MzAwMDAyMDAwRjAwOTc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDk0NDAwMDAyMDAwRjAwOTg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDk0NTAwMDAyMDAwRjAwOTk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk0NjAwMDAyMDAwRjAwOUE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk0NzAwMDAyMDAwRjAwOUI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk0ODAwMDAyMDAwRjAwOUM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk0OTAwMDAyMDAwRjAwOUQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk0QTAwMDAyMDAwRjAwOUU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk0QjAwMDAyMDAwRjAwOUY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk0QzAwMDAyMDAwRjAwQTA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk0RDAwMDAyMDAwRjAwQTE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk0RTAwMDAyMDAwRjAwQTI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk0RjAwMDAyMDAwRjAwQTM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk1MDAwMDAyMDAwRjAwQTQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDk1MTAwMDAyMDAwRjAwQTU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDk1MjAwMDAyMDAwRjAwQTY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDk1MzAwMDAyMDAwRjAwQTc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDk1NDAwMDAyMDAwRjAwQTg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk1NTAwMDAyMDAwRjAwQTk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk1NjAwMDAyMDAwRjAwQUE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk1NzAwMDAyMDAwRjAwQUI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk1ODAwMDAyMDAwRjAwQUM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk1OTAwMDAyMDAwRjAwQUQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk1QTAwMDAyMDAwRjAwQUU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk1QjAwMDAyMDAwRjAwQUY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk1QzAwMDAyMDAwRjAwQjA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk1RDAwMDAyMDAwRjAwQjE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk1RTAwMDAyMDAwRjAwQjI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk1RjAwMDAyMDAwRjAwQjM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDk2MDAwMDAyMDAwRjAwQjQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDk2MTAwMDAyMDAwRjAwQjU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDk2MjAwMDAyMDAwRjAwQjY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDk2MzAwMDAyMDAwRjAwQjc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk2NDAwMDAyMDAwRjAwQjg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk2NTAwMDAyMDAwRjAwQjk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk2NjAwMDAyMDAwRjAwQkE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk2NzAwMDAyMDAwRjAwQkI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk2ODAwMDAyMDAwRjAwQkM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk2OTAwMDAyMDAwRjAwQkQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk2QTAwMDAyMDAwRjAwQkU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk2QjAwMDAyMDAwRjAwQkY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk2QzAwMDAyMDAwRjAwQzA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk2RDAwMDAyMDAwRjAwQzE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk2RTAwMDAyMDAwRjAwQzI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDk2RjAwMDAyMDAwRjAwQzM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDk3MDAwMDAyMDAwRjAwQzQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDk3MTAwMDAyMDAwRjAwQzU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDk3MjAwMDAyMDAwRjAwQzY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk3MzAwMDAyMDAwRjAwQzc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk3NDAwMDAyMDAwRjAwQzg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk3NTAwMDAyMDAwRjAwQzk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk3NjAwMDAyMDAwRjAwQ0E4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk3NzAwMDAyMDAwRjAwQ0I4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk3ODAwMDAyMDAwRjAwQ0M4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk3OTAwMDAyMDAwRjAwQ0Q4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk3QTAwMDAyMDAwRjAwQ0U4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk3QjAwMDAyMDAwRjAwQ0Y4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk3QzAwMDAyMDAwRjAwRDA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk3RDAwMDAyMDAwRjAwRDE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDk3RTAwMDAyMDAwRjAwRDI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDk3RjAwMDAyMDAwRjAwRDM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDk4MDAwMDAyMDAwRjAwRDQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDk4MTAwMDAyMDAwRjAwRDU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk4MjAwMDAyMDAwRjAwRDY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk4MzAwMDAyMDAwRjAwRDc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk4NDAwMDAyMDAwRjAwRDg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk4NTAwMDAyMDAwRjAwRDk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk4NjAwMDAyMDAwRjAwREE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk4NzAwMDAyMDAwRjAwREI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk4ODAwMDAyMDAwRjAwREM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk4OTAwMDAyMDAwRjAwREQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk4QTAwMDAyMDAwRjAwREU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk4QjAwMDAyMDAwRjAwREY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk4QzAwMDAyMDAwRjAwRTA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDk4RDAwMDAyMDAwRjAwRTE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDk4RTAwMDAyMDAwRjAwRTI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDk4RjAwMDAyMDAwRjAwRTM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDk5MDAwMDAyMDAwRjAwRTQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDk5MTAwMDAyMDAwRjAwRTU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDk5MjAwMDAyMDAwRjAwRTY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDk5MzAwMDAyMDAwRjAwRTc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDk5NDAwMDAyMDAwRjAwRTg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDk5NTAwMDAyMDAwRjAwRTk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDk5NjAwMDAyMDAwRjAwRUE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDk5NzAwMDAyMDAwRjAwRUI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDk5ODAwMDAyMDAwRjAwRUM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDk5OTAwMDAyMDAwRjAwRUQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDk5QTAwMDAyMDAwRjAwRUU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDk5QjAwMDAyMDAwRjAwRUY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDk5QzAwMDAyMDAwRjAwRjA4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDk5RDAwMDAyMDAwRjAwRjE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOEUKKzoxMDk5RTAwMDAyMDAwRjAwRjI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDk5RjAwMDAyMDAwRjAwRjM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMDlBMDAwMDAyMDAwRjAwRjQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlBMTAwMDAyMDAwRjAwRjU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlBMjAwMDAyMDAwRjAwRjY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDlBMzAwMDAyMDAwRjAwRjc4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDlBNDAwMDAyMDAwRjAwRjg4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDlBNTAwMDAyMDAwRjAwRjk4NjcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMDlBNjAwMDAyMDAwRjAwRkE4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDlBNzAwMDAyMDAwRjAwRkI4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDlBODAwMDAyMDAwRjAwRkM4NjcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDlBOTAwMDAyMDAwRjAwRkQ4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDlBQTAwMDAyMDAwRjAwRkU4NjcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDlBQjAwMDAyMDAwRjAwRkY4NjcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMDlBQzAwMDAyMDAwRjAwMDA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlBRDAwMDAyMDAwRjAwMDE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlBRTAwMDAyMDAwRjAwMDI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlBRjAwMDAyMDAwRjAwMDM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlCMDAwMDAyMDAwRjAwMDQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDgKKzoxMDlCMTAwMDAyMDAwRjAwMDU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDlCMjAwMDAyMDAwRjAwMDY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDlCMzAwMDAyMDAwRjAwMDc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDlCNDAwMDAyMDAwRjAwMDg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDlCNTAwMDAyMDAwRjAwMDk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDlCNjAwMDAyMDAwRjAwMEE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDlCNzAwMDAyMDAwRjAwMEI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDlCODAwMDAyMDAwRjAwMEM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDlCOTAwMDAyMDAwRjAwMEQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDlCQTAwMDAyMDAwRjAwMEU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDlCQjAwMDAyMDAwRjAwMEY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlCQzAwMDAyMDAwRjAwMTA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlCRDAwMDAyMDAwRjAwMTE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlCRTAwMDAyMDAwRjAwMTI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlCRjAwMDAyMDAwRjAwMTM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlDMDAwMDAyMDAwRjAwMTQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzcKKzoxMDlDMTAwMDAyMDAwRjAwMTU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDlDMjAwMDAyMDAwRjAwMTY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDlDMzAwMDAyMDAwRjAwMTc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDlDNDAwMDAyMDAwRjAwMTg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDlDNTAwMDAyMDAwRjAwMTk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDlDNjAwMDAyMDAwRjAwMUE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDlDNzAwMDAyMDAwRjAwMUI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDlDODAwMDAyMDAwRjAwMUM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDlDOTAwMDAyMDAwRjAwMUQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDlDQTAwMDAyMDAwRjAwMUU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlDQjAwMDAyMDAwRjAwMUY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlDQzAwMDAyMDAwRjAwMjA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlDRDAwMDAyMDAwRjAwMjE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlDRTAwMDAyMDAwRjAwMjI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlDRjAwMDAyMDAwRjAwMjM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDlEMDAwMDAyMDAwRjAwMjQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjYKKzoxMDlEMTAwMDAyMDAwRjAwMjU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDlEMjAwMDAyMDAwRjAwMjY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDlEMzAwMDAyMDAwRjAwMjc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDlENDAwMDAyMDAwRjAwMjg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDlENTAwMDAyMDAwRjAwMjk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDlENjAwMDAyMDAwRjAwMkE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDlENzAwMDAyMDAwRjAwMkI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDlEODAwMDAyMDAwRjAwMkM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDlEOTAwMDAyMDAwRjAwMkQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlEQTAwMDAyMDAwRjAwMkU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlEQjAwMDAyMDAwRjAwMkY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlEQzAwMDAyMDAwRjAwMzA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlERDAwMDAyMDAwRjAwMzE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlERTAwMDAyMDAwRjAwMzI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDlERjAwMDAyMDAwRjAwMzM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDlFMDAwMDAyMDAwRjAwMzQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTUKKzoxMDlFMTAwMDAyMDAwRjAwMzU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDlFMjAwMDAyMDAwRjAwMzY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDlFMzAwMDAyMDAwRjAwMzc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDlFNDAwMDAyMDAwRjAwMzg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDlFNTAwMDAyMDAwRjAwMzk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDlFNjAwMDAyMDAwRjAwM0E4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDlFNzAwMDAyMDAwRjAwM0I4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDlFODAwMDAyMDAwRjAwM0M4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlFOTAwMDAyMDAwRjAwM0Q4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlFQTAwMDAyMDAwRjAwM0U4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlFQjAwMDAyMDAwRjAwM0Y4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlFQzAwMDAyMDAwRjAwNDA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlFRDAwMDAyMDAwRjAwNDE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDlFRTAwMDAyMDAwRjAwNDI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDlFRjAwMDAyMDAwRjAwNDM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDlGMDAwMDAyMDAwRjAwNDQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDlGMTAwMDAyMDAwRjAwNDU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDlGMjAwMDAyMDAwRjAwNDY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDlGMzAwMDAyMDAwRjAwNDc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMDlGNDAwMDAyMDAwRjAwNDg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMDlGNTAwMDAyMDAwRjAwNDk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMDlGNjAwMDAyMDAwRjAwNEE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMDlGNzAwMDAyMDAwRjAwNEI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMDlGODAwMDAyMDAwRjAwNEM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMDlGOTAwMDAyMDAwRjAwNEQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMDlGQTAwMDAyMDAwRjAwNEU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMDlGQjAwMDAyMDAwRjAwNEY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMDlGQzAwMDAyMDAwRjAwNTA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMDlGRDAwMDAyMDAwRjAwNTE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMDlGRTAwMDAyMDAwRjAwNTI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMDlGRjAwMDAyMDAwRjAwNTM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEEwMDAwMDAyMDAwRjAwNTQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMEEwMTAwMDAyMDAwRjAwNTU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMEEwMjAwMDAyMDAwRjAwNTY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMEEwMzAwMDAyMDAwRjAwNTc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMEEwNDAwMDAyMDAwRjAwNTg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEEwNTAwMDAyMDAwRjAwNTk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEEwNjAwMDAyMDAwRjAwNUE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEEwNzAwMDAyMDAwRjAwNUI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEEwODAwMDAyMDAwRjAwNUM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEEwOTAwMDAyMDAwRjAwNUQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEEwQTAwMDAyMDAwRjAwNUU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEEwQjAwMDAyMDAwRjAwNUY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEEwQzAwMDAyMDAwRjAwNjA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEEwRDAwMDAyMDAwRjAwNjE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEEwRTAwMDAyMDAwRjAwNjI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEEwRjAwMDAyMDAwRjAwNjM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEExMDAwMDAyMDAwRjAwNjQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMEExMTAwMDAyMDAwRjAwNjU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMEExMjAwMDAyMDAwRjAwNjY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMEExMzAwMDAyMDAwRjAwNjc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEExNDAwMDAyMDAwRjAwNjg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEExNTAwMDAyMDAwRjAwNjk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEExNjAwMDAyMDAwRjAwNkE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEExNzAwMDAyMDAwRjAwNkI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEExODAwMDAyMDAwRjAwNkM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEExOTAwMDAyMDAwRjAwNkQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEExQTAwMDAyMDAwRjAwNkU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEExQjAwMDAyMDAwRjAwNkY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEExQzAwMDAyMDAwRjAwNzA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEExRDAwMDAyMDAwRjAwNzE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEExRTAwMDAyMDAwRjAwNzI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEExRjAwMDAyMDAwRjAwNzM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEEyMDAwMDAyMDAwRjAwNzQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDEKKzoxMEEyMTAwMDAyMDAwRjAwNzU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMEEyMjAwMDAyMDAwRjAwNzY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEEyMzAwMDAyMDAwRjAwNzc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEEyNDAwMDAyMDAwRjAwNzg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEEyNTAwMDAyMDAwRjAwNzk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEEyNjAwMDAyMDAwRjAwN0E4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEEyNzAwMDAyMDAwRjAwN0I4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEEyODAwMDAyMDAwRjAwN0M4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEEyOTAwMDAyMDAwRjAwN0Q4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEEyQTAwMDAyMDAwRjAwN0U4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEEyQjAwMDAyMDAwRjAwN0Y4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEEyQzAwMDAyMDAwRjAwODA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEEyRDAwMDAyMDAwRjAwODE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEEyRTAwMDAyMDAwRjAwODI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEEyRjAwMDAyMDAwRjAwODM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEEzMDAwMDAyMDAwRjAwODQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzAKKzoxMEEzMTAwMDAyMDAwRjAwODU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEEzMjAwMDAyMDAwRjAwODY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEEzMzAwMDAyMDAwRjAwODc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEEzNDAwMDAyMDAwRjAwODg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEEzNTAwMDAyMDAwRjAwODk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEEzNjAwMDAyMDAwRjAwOEE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEEzNzAwMDAyMDAwRjAwOEI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEEzODAwMDAyMDAwRjAwOEM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEEzOTAwMDAyMDAwRjAwOEQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEEzQTAwMDAyMDAwRjAwOEU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEEzQjAwMDAyMDAwRjAwOEY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEEzQzAwMDAyMDAwRjAwOTA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEEzRDAwMDAyMDAwRjAwOTE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEEzRTAwMDAyMDAwRjAwOTI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEEzRjAwMDAyMDAwRjAwOTM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMEE0MDAwMDAyMDAwRjAwOTQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQUYKKzoxMEE0MTAwMDAyMDAwRjAwOTU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEE0MjAwMDAyMDAwRjAwOTY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEE0MzAwMDAyMDAwRjAwOTc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEE0NDAwMDAyMDAwRjAwOTg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEE0NTAwMDAyMDAwRjAwOTk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEE0NjAwMDAyMDAwRjAwOUE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEE0NzAwMDAyMDAwRjAwOUI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEE0ODAwMDAyMDAwRjAwOUM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEE0OTAwMDAyMDAwRjAwOUQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEE0QTAwMDAyMDAwRjAwOUU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEE0QjAwMDAyMDAwRjAwOUY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEE0QzAwMDAyMDAwRjAwQTA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEE0RDAwMDAyMDAwRjAwQTE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEE0RTAwMDAyMDAwRjAwQTI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMEE0RjAwMDAyMDAwRjAwQTM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMEE1MDAwMDAyMDAwRjAwQTQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUUKKzoxMEE1MTAwMDAyMDAwRjAwQTU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEE1MjAwMDAyMDAwRjAwQTY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEE1MzAwMDAyMDAwRjAwQTc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEE1NDAwMDAyMDAwRjAwQTg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEE1NTAwMDAyMDAwRjAwQTk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEE1NjAwMDAyMDAwRjAwQUE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEE1NzAwMDAyMDAwRjAwQUI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEE1ODAwMDAyMDAwRjAwQUM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEE1OTAwMDAyMDAwRjAwQUQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEE1QTAwMDAyMDAwRjAwQUU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEE1QjAwMDAyMDAwRjAwQUY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEE1QzAwMDAyMDAwRjAwQjA4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEE1RDAwMDAyMDAwRjAwQjE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMEE1RTAwMDAyMDAwRjAwQjI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMEE1RjAwMDAyMDAwRjAwQjM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOUYKKzoxMEE2MDAwMDAyMDAwRjAwQjQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwOEQKKzoxMEE2MTAwMDAyMDAwRjAwQjU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwN0MKKzoxMEE2MjAwMDAyMDAwRjAwQjY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNkIKKzoxMEE2MzAwMDAyMDAwRjAwQjc4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNUEKKzoxMEE2NDAwMDAyMDAwRjAwQjg4NzcxMDAwMDAwMDAwMDAwMDAwMDAwNDkKKzoxMEE2NTAwMDAyMDAwRjAwQjk4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzoxMEE2NjAwMDAyMDAwRjAwQkE4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMjcKKzoxMEE2NzAwMDAyMDAwRjAwQkI4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMTYKKzoxMEE2ODAwMDAyMDAwRjAwQkM4NzcxMDAwMDAwMDAwMDAwMDAwMDAwMDUKKzoxMEE2OTAwMDAyMDAwRjAwQkQ4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMEE2QTAwMDAyMDAwRjAwQkU4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMEE2QjAwMDAyMDAwRjAwQkY4NzcxMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEE2QzAwMDAyMDAwRjAwQzA4NzcxMDA3OTAwMDAwMDc2OTA2MEZERTUKKzoxMEE2RDAwMDAyMDAwRjAwQzE4NzcxMDAzRDAwMDAwMDZGMDA4MEY3OEQKKzoxMEE2RTAwMDAyMDAwRjAwQzI4NzcxMDAzRDAwMDAwMDZGMDA4MEY3N0MKKzoxMEE2RjAwMDAyMDAwRjAwQzM4NzcxMDAzRDAwMDAwMDZGMDA4MEY3NkIKKzoxMEE3MDAwMDAyMDAwRjAwQzQ4NzcxODAzRDAwMDAwMDZGMDA4MEY3RDkKKzowMDAwMDAwMUZGCisvKiBMb2FkaW5nIEZpcm13YXJlICovCisvKiBJTlRfTUVNIFZlciAqLworICogVGVodXRpIE5ldHdvcmtzKFIpIE5ldHdvcmsgRHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGVodXRpIE5ldHdvcmtzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZApkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmc192ZnMuaCBiL2ZzLzlwL3Y5ZnNfdmZzLmgKaW5kZXggYzI5NWJhNy4uZjBjN2RlNyAxMDA2NDQKLS0tIGEvZnMvOXAvdjlmc192ZnMuaAorKysgYi9mcy85cC92OWZzX3Zmcy5oCkBAIC00MSw4ICs0MSw4IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyB2OWZzX2FkZHJfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHY5ZnNfZmlsZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdjlmc19kaXJfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdjlmc19kZW50cnlfb3BlcmF0aW9uczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfY2FjaGVkX2RlbnRyeV9vcGVyYXRpb25zOwogCiBzdHJ1Y3QgaW5vZGUgKnY5ZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb2RlKTsKIGlub190IHY5ZnNfcWlkMmlubyhzdHJ1Y3QgcDlfcWlkICpxaWQpOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdmZzX2RlbnRyeS5jIGIvZnMvOXAvdmZzX2RlbnRyeS5jCmluZGV4IDA2ZGNjN2MuLmQ3NDMyNTIgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19kZW50cnkuYworKysgYi9mcy85cC92ZnNfZGVudHJ5LmMKQEAgLTEwNCwxMiArMTA0LDEyIEBACiAJfQogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgdjlmc19jYWNoZWRfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlID0gdjlmc19jYWNoZWRfZGVudHJ5X2RlbGV0ZSwKIAkuZF9yZWxlYXNlID0gdjlmc19kZW50cnlfcmVsZWFzZSwKIH07CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB2OWZzX2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHY5ZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfZGVsZXRlID0gdjlmc19kZW50cnlfZGVsZXRlLAogCS5kX3JlbGVhc2UgPSB2OWZzX2RlbnRyeV9yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19zdXBlci5jIGIvZnMvOXAvdmZzX3N1cGVyLmMKaW5kZXggOTMyMTJlNC4uNWY4YWI4YSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX3N1cGVyLmMKKysrIGIvZnMvOXAvdmZzX3N1cGVyLmMKQEAgLTE2OCw4ICsxNjgsOSBAQAogCXA5c3RhdF9mcmVlKHN0KTsKIAlrZnJlZShzdCk7CiAKLVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAiIHJldHVybiBzaW1wbGUgc2V0IG1vdW50XG4iKTsKLQlyZXR1cm4gc2ltcGxlX3NldF9tbnQobW50LCBzYik7CitQOV9EUFJJTlRLKFA5X0RFQlVHX1ZGUywgIiBzaW1wbGUgc2V0IG1vdW50LCByZXR1cm4gMFxuIik7CisJc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisJcmV0dXJuIDA7CiAKIHJlbGVhc2Vfc2I6CiAJaWYgKHNiKSB7CmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCA5Mzk0NWRkLi5jZWY4YjE4IDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTU2LDYxICs1Niw3IEBACiAKIHNvdXJjZSAiZnMvbm90aWZ5L0tjb25maWciCiAKLWNvbmZpZyBRVU9UQQotCWJvb2wgIlF1b3RhIHN1cHBvcnQiCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gc2V0IHBlciB1c2VyIGxpbWl0cyBmb3IgZGlzawotCSAgdXNhZ2UgKGFsc28gY2FsbGVkIGRpc2sgcXVvdGFzKS4gQ3VycmVudGx5LCBpdCB3b3JrcyBmb3IgdGhlCi0JICBleHQyLCBleHQzLCBhbmQgcmVpc2VyZnMgZmlsZSBzeXN0ZW0uIGV4dDMgYWxzbyBzdXBwb3J0cyBqb3VybmFsbGVkCi0JICBxdW90YXMgZm9yIHdoaWNoIHlvdSBkb24ndCBuZWVkIHRvIHJ1biBxdW90YWNoZWNrKDgpIGFmdGVyIGFuIHVuY2xlYW4KLQkgIHNodXRkb3duLgotCSAgRm9yIGZ1cnRoZXIgZGV0YWlscywgcmVhZCB0aGUgUXVvdGEgbWluaS1IT1dUTywgYXZhaWxhYmxlIGZyb20KLQkgIDxodHRwOi8vd3d3LnRsZHAub3JnL2RvY3MuaHRtbCNob3d0bz4sIG9yIHRoZSBkb2N1bWVudGF0aW9uIHByb3ZpZGVkCi0JICB3aXRoIHRoZSBxdW90YSB0b29scy4gUHJvYmFibHkgdGhlIHF1b3RhIHN1cHBvcnQgaXMgb25seSB1c2VmdWwgZm9yCi0JICBtdWx0aSB1c2VyIHN5c3RlbXMuIElmIHVuc3VyZSwgc2F5IE4uCi0KLWNvbmZpZyBRVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQotCWJvb2wgIlJlcG9ydCBxdW90YSBtZXNzYWdlcyB0aHJvdWdoIG5ldGxpbmsgaW50ZXJmYWNlIgotCWRlcGVuZHMgb24gUVVPVEEgJiYgTkVUCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHF1b3RhIHdhcm5pbmdzIChhYm91dCBleGNlZWRpbmcgc29mdGxpbWl0LCByZWFjaGluZwotCSAgaGFyZGxpbWl0LCBldGMuKSB3aWxsIGJlIHJlcG9ydGVkIHRocm91Z2ggbmV0bGluayBpbnRlcmZhY2UuIElmIHVuc3VyZSwKLQkgIHNheSBZLgotCi1jb25maWcgUFJJTlRfUVVPVEFfV0FSTklORwotCWJvb2wgIlByaW50IHF1b3RhIHdhcm5pbmdzIHRvIGNvbnNvbGUgKE9CU09MRVRFKSIKLQlkZXBlbmRzIG9uIFFVT1RBCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUsIHF1b3RhIHdhcm5pbmdzIChhYm91dCBleGNlZWRpbmcgc29mdGxpbWl0LCByZWFjaGluZwotCSAgaGFyZGxpbWl0LCBldGMuKSB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIHByb2Nlc3MnIGNvbnRyb2xsaW5nIHRlcm1pbmFsLgotCSAgTm90ZSB0aGF0IHRoaXMgYmVoYXZpb3IgaXMgY3VycmVudGx5IGRlcHJlY2F0ZWQgYW5kIG1heSBnbyBhd2F5IGluCi0JICBmdXR1cmUuIFBsZWFzZSB1c2Ugbm90aWZpY2F0aW9uIHZpYSBuZXRsaW5rIHNvY2tldCBpbnN0ZWFkLgotCi0jIEdlbmVyaWMgc3VwcG9ydCBmb3IgdHJlZSBzdHJ1Y3R1cmVkIHF1b3RhIGZpbGVzLiBTZWxldGVkIHdoZW4gbmVlZGVkLgotY29uZmlnIFFVT1RBX1RSRUUKLQkgdHJpc3RhdGUKLQotY29uZmlnIFFGTVRfVjEKLQl0cmlzdGF0ZSAiT2xkIHF1b3RhIGZvcm1hdCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUVVPVEEKLQloZWxwCi0JICBUaGlzIHF1b3RhIGZvcm1hdCB3YXMgKGlzKSB1c2VkIGJ5IGtlcm5lbHMgZWFybGllciB0aGFuIDIuNC4yMi4gSWYKLQkgIHlvdSBoYXZlIHF1b3RhIHdvcmtpbmcgYW5kIHlvdSBkb24ndCB3YW50IHRvIGNvbnZlcnQgdG8gbmV3IHF1b3RhCi0JICBmb3JtYXQgc2F5IFkgaGVyZS4KLQotY29uZmlnIFFGTVRfVjIKLQl0cmlzdGF0ZSAiUXVvdGEgZm9ybWF0IHYyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBRVU9UQQotCXNlbGVjdCBRVU9UQV9UUkVFCi0JaGVscAotCSAgVGhpcyBxdW90YSBmb3JtYXQgYWxsb3dzIHVzaW5nIHF1b3RhcyB3aXRoIDMyLWJpdCBVSURzL0dJRHMuIElmIHlvdQotCSAgbmVlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgc2F5IFkgaGVyZS4KLQotY29uZmlnIFFVT1RBQ1RMCi0JYm9vbAotCWRlcGVuZHMgb24gWEZTX1FVT1RBIHx8IFFVT1RBCi0JZGVmYXVsdCB5Citzb3VyY2UgImZzL3F1b3RhL0tjb25maWciCiAKIHNvdXJjZSAiZnMvYXV0b2ZzL0tjb25maWciCiBzb3VyY2UgImZzL2F1dG9mczQvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggZGMyMGRiMy4uNmU4MmEzMCAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTUxLDExICs1MSw3IEBACiBvYmotJChDT05GSUdfTkZTX0NPTU1PTikJKz0gbmZzX2NvbW1vbi8KIG9iai0kKENPTkZJR19HRU5FUklDX0FDTCkJKz0gZ2VuZXJpY19hY2wubwogCi1vYmotJChDT05GSUdfUVVPVEEpCQkrPSBkcXVvdC5vCi1vYmotJChDT05GSUdfUUZNVF9WMSkJCSs9IHF1b3RhX3YxLm8KLW9iai0kKENPTkZJR19RRk1UX1YyKQkJKz0gcXVvdGFfdjIubwotb2JqLSQoQ09ORklHX1FVT1RBX1RSRUUpCSs9IHF1b3RhX3RyZWUubwotb2JqLSQoQ09ORklHX1FVT1RBQ1RMKQkJKz0gcXVvdGEubworb2JqLXkJCQkJKz0gcXVvdGEvCiAKIG9iai0kKENPTkZJR19QUk9DX0ZTKQkJKz0gcHJvYy8KIG9iai15CQkJCSs9IHBhcnRpdGlvbnMvCmRpZmYgLS1naXQgYS9mcy9hZGZzL2FkZnMuaCBiL2ZzL2FkZnMvYWRmcy5oCmluZGV4IDgzMTE1NzUuLmUwYTg1ZGIgMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvYWRmcy5oCisrKyBiL2ZzL2FkZnMvYWRmcy5oCkBAIC04Niw3ICs4Niw3IEBACiAvKiBkaXJfKi5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgYWRmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFkZnNfZGlyX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFkZnNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFkZnNfZGVudHJ5X29wZXJhdGlvbnM7CiBleHRlcm4gc3RydWN0IGFkZnNfZGlyX29wcyBhZGZzX2ZfZGlyX29wczsKIGV4dGVybiBzdHJ1Y3QgYWRmc19kaXJfb3BzIGFkZnNfZnBsdXNfZGlyX29wczsKIApkaWZmIC0tZ2l0IGEvZnMvYWRmcy9kaXIuYyBiL2ZzL2FkZnMvZGlyLmMKaW5kZXggODVhMzBlOS4uZTg2N2NjZiAxMDA2NDQKLS0tIGEvZnMvYWRmcy9kaXIuYworKysgYi9mcy9hZGZzL2Rpci5jCkBAIC0yNjMsNyArMjYzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFkZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWRmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9oYXNoCQk9IGFkZnNfaGFzaCwKIAkuZF9jb21wYXJlCT0gYWRmc19jb21wYXJlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvYWZmcy5oIGIvZnMvYWZmcy9hZmZzLmgKaW5kZXggZTllYzkxNS4uMWEyZDVlMyAxMDA2NDQKLS0tIGEvZnMvYWZmcy9hZmZzLmgKKysrIGIvZnMvYWZmcy9hZmZzLmgKQEAgLTE5OSw4ICsxOTksNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMJIGFmZnNfYW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zCSBhZmZzX2FvcHNfb2ZzOwogCi1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zCSBhZmZzX2RlbnRyeV9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucwkgYWZmc19kZW50cnlfb3BlcmF0aW9uc19pbnRsOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucwkgYWZmc19kZW50cnlfb3BlcmF0aW9uczsKIAogc3RhdGljIGlubGluZSB2b2lkCiBhZmZzX3NldF9ibG9ja3NpemUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNpemUpCmRpZmYgLS1naXQgYS9mcy9hZmZzL2FtaWdhZmZzLmMgYi9mcy9hZmZzL2FtaWdhZmZzLmMKaW5kZXggODA1NTczMC4uN2QwZjBhMyAxMDA2NDQKLS0tIGEvZnMvYWZmcy9hbWlnYWZmcy5jCisrKyBiL2ZzL2FmZnMvYW1pZ2FmZnMuYwpAQCAtMTc5LDE0ICsxNzksMTggQEAKIAkJYWZmc19sb2NrX2RpcihkaXIpOwogCQlhZmZzX2ZpeF9kY2FjaGUoZGVudHJ5LCBsaW5rX2lubyk7CiAJCXJldHZhbCA9IGFmZnNfcmVtb3ZlX2hhc2goZGlyLCBsaW5rX2JoKTsKLQkJaWYgKHJldHZhbCkKKwkJaWYgKHJldHZhbCkgeworCQkJYWZmc191bmxvY2tfZGlyKGRpcik7CiAJCQlnb3RvIGRvbmU7CisJCX0KIAkJbWFya19idWZmZXJfZGlydHlfaW5vZGUobGlua19iaCwgaW5vZGUpOwogCiAJCW1lbWNweShBRkZTX1RBSUwoc2IsIGJoKS0+bmFtZSwgQUZGU19UQUlMKHNiLCBsaW5rX2JoKS0+bmFtZSwgMzIpOwogCQlyZXR2YWwgPSBhZmZzX2luc2VydF9oYXNoKGRpciwgYmgpOwotCQlpZiAocmV0dmFsKQorCQlpZiAocmV0dmFsKSB7CisJCQlhZmZzX3VubG9ja19kaXIoZGlyKTsKIAkJCWdvdG8gZG9uZTsKKwkJfQogCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShiaCwgaW5vZGUpOwogCiAJCWFmZnNfdW5sb2NrX2RpcihkaXIpOwpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9uYW1laS5jIGIvZnMvYWZmcy9uYW1laS5jCmluZGV4IGNmY2YxYjYuLjk2MGQzMzYgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvbmFtZWkuYworKysgYi9mcy9hZmZzL25hbWVpLmMKQEAgLTE5LDEyICsxOSwxMiBAQAogc3RhdGljIGludAkgYWZmc19pbnRsX2hhc2hfZGVudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CiBzdGF0aWMgaW50ICAgICAgIGFmZnNfaW50bF9jb21wYXJlX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICosIHN0cnVjdCBxc3RyICopOwogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWZmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZmZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2gJCT0gYWZmc19oYXNoX2RlbnRyeSwKIAkuZF9jb21wYXJlCT0gYWZmc19jb21wYXJlX2RlbnRyeSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWZmc19pbnRsX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhZmZzX2ludGxfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfaGFzaAkJPSBhZmZzX2ludGxfaGFzaF9kZW50cnksCiAJLmRfY29tcGFyZQk9IGFmZnNfaW50bF9jb21wYXJlX2RlbnRyeSwKIH07CmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyLmMgYi9mcy9hZnMvZGlyLmMKaW5kZXggOTljZjM5MC4uOWJkNzU3NyAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpci5jCisrKyBiL2ZzL2Fmcy9kaXIuYwpAQCAtNjIsNyArNjIsNyBAQAogCS5zZXRhdHRyCT0gYWZzX3NldGF0dHIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFmc19mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYWZzX2ZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX3JldmFsaWRhdGUJPSBhZnNfZF9yZXZhbGlkYXRlLAogCS5kX2RlbGV0ZQk9IGFmc19kX2RlbGV0ZSwKIAkuZF9yZWxlYXNlCT0gYWZzX2RfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2ZzL2Fub25faW5vZGVzLmMgYi9mcy9hbm9uX2lub2Rlcy5jCmluZGV4IDNiYmRiOWQuLjFkZDk2ZDQgMTAwNjQ0Ci0tLSBhL2ZzL2Fub25faW5vZGVzLmMKKysrIGIvZnMvYW5vbl9pbm9kZXMuYwpAQCAtNDgsNyArNDgsNyBAQAogCS5nZXRfc2IJCT0gYW5vbl9pbm9kZWZzX2dldF9zYiwKIAkua2lsbF9zYgk9IGtpbGxfYW5vbl9zdXBlciwKIH07Ci1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGFub25faW5vZGVmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYW5vbl9pbm9kZWZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZQk9IGFub25faW5vZGVmc19kZWxldGVfZGVudHJ5LAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jCmluZGV4IGY0MzYwMTkuLjlmZTFiMWIgMTAwNjQ0Ci0tLSBhL2ZzL2F0dHIuYworKysgYi9mcy9hdHRyLmMKQEAgLTE3Myw3ICsxNzMsOCBAQAogCQlpZiAoIWVycm9yKSB7CiAJCQlpZiAoKGlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgYXR0ci0+aWFfdWlkICE9IGlub2RlLT5pX3VpZCkgfHwKIAkJCSAgICAoaWFfdmFsaWQgJiBBVFRSX0dJRCAmJiBhdHRyLT5pYV9naWQgIT0gaW5vZGUtPmlfZ2lkKSkKLQkJCQllcnJvciA9IERRVU9UX1RSQU5TRkVSKGlub2RlLCBhdHRyKSA/IC1FRFFVT1QgOiAwOworCQkJCWVycm9yID0gdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBhdHRyKSA/CisJCQkJCS1FRFFVT1QgOiAwOwogCQkJaWYgKCFlcnJvcikKIAkJCQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOwogCQl9CmRpZmYgLS1naXQgYS9mcy9hdXRvZnMvcm9vdC5jIGIvZnMvYXV0b2ZzL3Jvb3QuYwppbmRleCA4YWFjYWRlLi40YTE0MDFjIDEwMDY0NAotLS0gYS9mcy9hdXRvZnMvcm9vdC5jCisrKyBiL2ZzL2F1dG9mcy9yb290LmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGF1dG9mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYXV0b2ZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX3JldmFsaWRhdGUJPSBhdXRvZnNfcmV2YWxpZGF0ZSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvaW5vZGUuYyBiL2ZzL2F1dG9mczQvaW5vZGUuYwppbmRleCA3MTZlMTJiLi42OWM4MTQyIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2lub2RlLmMKKysrIGIvZnMvYXV0b2ZzNC9pbm9kZS5jCkBAIC0zMTAsNyArMzEwLDcgQEAKIAlyZXR1cm4gaW5vOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGF1dG9mczRfc2JfZGVudHJ5X29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGF1dG9mczRfc2JfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfcmVsZWFzZSAgICAgID0gYXV0b2ZzNF9kZW50cnlfcmVsZWFzZSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvcm9vdC5jIGIvZnMvYXV0b2ZzNC9yb290LmMKaW5kZXggMmE0MWMyYS4uNzRiMTQ2OSAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9yb290LmMKKysrIGIvZnMvYXV0b2ZzNC9yb290LmMKQEAgLTM0OSwxMyArMzQ5LDEzIEBACiB9CiAKIC8qIEZvciBkZW50cmllcyBvZiBkaXJlY3RvcmllcyBpbiB0aGUgcm9vdCBkaXIgKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgYXV0b2ZzNF9yb290X2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhdXRvZnM0X3Jvb3RfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfcmV2YWxpZGF0ZQk9IGF1dG9mczRfcmV2YWxpZGF0ZSwKIAkuZF9yZWxlYXNlCT0gYXV0b2ZzNF9kZW50cnlfcmVsZWFzZSwKIH07CiAKIC8qIEZvciBvdGhlciBkZW50cmllcyAqLwotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhdXRvZnM0X2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBhdXRvZnM0X2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX3JldmFsaWRhdGUJPSBhdXRvZnM0X3JldmFsaWRhdGUsCiAJLmRfcmVsZWFzZQk9IGF1dG9mczRfZGVudHJ5X3JlbGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvYmlvLWludGVncml0eS5jIGIvZnMvYmlvLWludGVncml0eS5jCmluZGV4IGZlMmIxYWEuLjMxYzQ2YTIgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby1pbnRlZ3JpdHkuYworKysgYi9mcy9iaW8taW50ZWdyaXR5LmMKQEAgLTI2LDU1ICsyNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmJpb19pbnRlZ3JpdHlfc2xhYiBfX3JlYWRfbW9zdGx5Oworc3RhdGljIG1lbXBvb2xfdCAqYmlvX2ludGVncml0eV9wb29sOworc3RhdGljIHN0cnVjdCBiaW9fc2V0ICppbnRlZ3JpdHlfYmlvX3NldDsKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2ludGVncml0eWRfd3E7CiAKIC8qKgotICogYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQgLSBBbGxvY2F0ZSBpbnRlZ3JpdHkgcGF5bG9hZCBhbmQgYXR0YWNoIGl0IHRvIGJpbwotICogQGJpbzoJYmlvIHRvIGF0dGFjaCBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8KLSAqIEBnZnBfbWFzazoJTWVtb3J5IGFsbG9jYXRpb24gbWFzawotICogQG5yX3ZlY3M6CU51bWJlciBvZiBpbnRlZ3JpdHkgbWV0YWRhdGEgc2NhdHRlci1nYXRoZXIgZWxlbWVudHMKLSAqIEBiczoJCWJpb19zZXQgdG8gYWxsb2NhdGUgZnJvbQotICoKLSAqIERlc2NyaXB0aW9uOiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGEgYmlvIGZvciBhdHRhY2hpbmcgaW50ZWdyaXR5Ci0gKiBtZXRhZGF0YS4gIG5yX3ZlY3Mgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWdlcyBjb250YWluaW5nCi0gKiBpbnRlZ3JpdHkgbWV0YWRhdGEgdGhhdCBjYW4gYmUgYXR0YWNoZWQuCi0gKi8KLXN0cnVjdCBiaW9faW50ZWdyaXR5X3BheWxvYWQgKmJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KHN0cnVjdCBiaW8gKmJpbywKLQkJCQkJCQkgZ2ZwX3QgZ2ZwX21hc2ssCi0JCQkJCQkJIHVuc2lnbmVkIGludCBucl92ZWNzLAotCQkJCQkJCSBzdHJ1Y3QgYmlvX3NldCAqYnMpCi17Ci0Jc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlwOwotCXN0cnVjdCBiaW9fdmVjICppdjsKLQl1bnNpZ25lZCBsb25nIGlkeDsKLQotCUJVR19PTihiaW8gPT0gTlVMTCk7Ci0KLQliaXAgPSBtZW1wb29sX2FsbG9jKGJzLT5iaW9faW50ZWdyaXR5X3Bvb2wsIGdmcF9tYXNrKTsKLQlpZiAodW5saWtlbHkoYmlwID09IE5VTEwpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCBhbGxvYyBiaXBcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JbWVtc2V0KGJpcCwgMCwgc2l6ZW9mKCpiaXApKTsKLQotCWl2ID0gYnZlY19hbGxvY19icyhnZnBfbWFzaywgbnJfdmVjcywgJmlkeCwgYnMpOwotCWlmICh1bmxpa2VseShpdiA9PSBOVUxMKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgYWxsb2MgYmlwX3ZlY1xuIiwgX19mdW5jX18pOwotCQltZW1wb29sX2ZyZWUoYmlwLCBicy0+YmlvX2ludGVncml0eV9wb29sKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JYmlwLT5iaXBfcG9vbCA9IGlkeDsKLQliaXAtPmJpcF92ZWMgPSBpdjsKLQliaXAtPmJpcF9iaW8gPSBiaW87Ci0JYmlvLT5iaV9pbnRlZ3JpdHkgPSBiaXA7Ci0KLQlyZXR1cm4gYmlwOwotfQotRVhQT1JUX1NZTUJPTChiaW9faW50ZWdyaXR5X2FsbG9jX2Jpb3NldCk7Ci0KLS8qKgogICogYmlvX2ludGVncml0eV9hbGxvYyAtIEFsbG9jYXRlIGludGVncml0eSBwYXlsb2FkIGFuZCBhdHRhY2ggaXQgdG8gYmlvCiAgKiBAYmlvOgliaW8gdG8gYXR0YWNoIGludGVncml0eSBtZXRhZGF0YSB0bwogICogQGdmcF9tYXNrOglNZW1vcnkgYWxsb2NhdGlvbiBtYXNrCkBAIC04OCwxOSArNDQsNDQgQEAKIAkJCQkJCSAgZ2ZwX3QgZ2ZwX21hc2ssCiAJCQkJCQkgIHVuc2lnbmVkIGludCBucl92ZWNzKQogewotCXJldHVybiBiaW9faW50ZWdyaXR5X2FsbG9jX2Jpb3NldChiaW8sIGdmcF9tYXNrLCBucl92ZWNzLCBmc19iaW9fc2V0KTsKKwlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXA7CisJc3RydWN0IGJpb192ZWMgKml2OworCXVuc2lnbmVkIGxvbmcgaWR4OworCisJQlVHX09OKGJpbyA9PSBOVUxMKTsKKworCWJpcCA9IG1lbXBvb2xfYWxsb2MoYmlvX2ludGVncml0eV9wb29sLCBnZnBfbWFzayk7CisJaWYgKHVubGlrZWx5KGJpcCA9PSBOVUxMKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgYWxsb2MgYmlwXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBOVUxMOworCX0KKworCW1lbXNldChiaXAsIDAsIHNpemVvZigqYmlwKSk7CisKKwlpdiA9IGJ2ZWNfYWxsb2NfYnMoZ2ZwX21hc2ssIG5yX3ZlY3MsICZpZHgsIGludGVncml0eV9iaW9fc2V0KTsKKwlpZiAodW5saWtlbHkoaXYgPT0gTlVMTCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGQgbm90IGFsbG9jIGJpcF92ZWNcbiIsIF9fZnVuY19fKTsKKwkJbWVtcG9vbF9mcmVlKGJpcCwgYmlvX2ludGVncml0eV9wb29sKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYmlwLT5iaXBfcG9vbCA9IGlkeDsKKwliaXAtPmJpcF92ZWMgPSBpdjsKKwliaXAtPmJpcF9iaW8gPSBiaW87CisJYmlvLT5iaV9pbnRlZ3JpdHkgPSBiaXA7CisKKwlyZXR1cm4gYmlwOwogfQogRVhQT1JUX1NZTUJPTChiaW9faW50ZWdyaXR5X2FsbG9jKTsKIAogLyoqCiAgKiBiaW9faW50ZWdyaXR5X2ZyZWUgLSBGcmVlIGJpbyBpbnRlZ3JpdHkgcGF5bG9hZAogICogQGJpbzoJYmlvIGNvbnRhaW5pbmcgYmlwIHRvIGJlIGZyZWVkCi0gKiBAYnM6CQliaW9fc2V0IHRoaXMgYmlvIHdhcyBhbGxvY2F0ZWQgZnJvbQogICoKICAqIERlc2NyaXB0aW9uOiBVc2VkIHRvIGZyZWUgdGhlIGludGVncml0eSBwb3J0aW9uIG9mIGEgYmlvLiBVc3VhbGx5CiAgKiBjYWxsZWQgZnJvbSBiaW9fZnJlZSgpLgogICovCi12b2lkIGJpb19pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBiaW9fc2V0ICpicykKK3ZvaWQgYmlvX2ludGVncml0eV9mcmVlKHN0cnVjdCBiaW8gKmJpbykKIHsKIAlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXAgPSBiaW8tPmJpX2ludGVncml0eTsKIApAQCAtMTExLDggKzkyLDggQEAKIAkgICAgJiYgYmlwLT5iaXBfYnVmICE9IE5VTEwpCiAJCWtmcmVlKGJpcC0+YmlwX2J1Zik7CiAKLQlidmVjX2ZyZWVfYnMoYnMsIGJpcC0+YmlwX3ZlYywgYmlwLT5iaXBfcG9vbCk7Ci0JbWVtcG9vbF9mcmVlKGJpcCwgYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCk7CisJYnZlY19mcmVlX2JzKGludGVncml0eV9iaW9fc2V0LCBiaXAtPmJpcF92ZWMsIGJpcC0+YmlwX3Bvb2wpOworCW1lbXBvb2xfZnJlZShiaXAsIGJpb19pbnRlZ3JpdHlfcG9vbCk7CiAKIAliaW8tPmJpX2ludGVncml0eSA9IE5VTEw7CiB9CkBAIC02ODYsMTkgKzY2NywxNyBAQAogICogQGJpbzoJTmV3IGJpbwogICogQGJpb19zcmM6CU9yaWdpbmFsIGJpbwogICogQGdmcF9tYXNrOglNZW1vcnkgYWxsb2NhdGlvbiBtYXNrCi0gKiBAYnM6CQliaW9fc2V0IHRvIGFsbG9jYXRlIGJpcCBmcm9tCiAgKgogICogRGVzY3JpcHRpb246CUNhbGxlZCB0byBhbGxvY2F0ZSBhIGJpcCB3aGVuIGNsb25pbmcgYSBiaW8KICAqLwotaW50IGJpb19pbnRlZ3JpdHlfY2xvbmUoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgYmlvICpiaW9fc3JjLAotCQkJZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBiaW9fc2V0ICpicykKK2ludCBiaW9faW50ZWdyaXR5X2Nsb25lKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGJpbyAqYmlvX3NyYywgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlwX3NyYyA9IGJpb19zcmMtPmJpX2ludGVncml0eTsKIAlzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaXA7CiAKIAlCVUdfT04oYmlwX3NyYyA9PSBOVUxMKTsKIAotCWJpcCA9IGJpb19pbnRlZ3JpdHlfYWxsb2NfYmlvc2V0KGJpbywgZ2ZwX21hc2ssIGJpcF9zcmMtPmJpcF92Y250LCBicyk7CisJYmlwID0gYmlvX2ludGVncml0eV9hbGxvYyhiaW8sIGdmcF9tYXNrLCBiaXBfc3JjLT5iaXBfdmNudCk7CiAKIAlpZiAoYmlwID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwpAQCAtNzE0LDM3ICs2OTMsMjUgQEAKIH0KIEVYUE9SVF9TWU1CT0woYmlvX2ludGVncml0eV9jbG9uZSk7CiAKLWludCBiaW9zZXRfaW50ZWdyaXR5X2NyZWF0ZShzdHJ1Y3QgYmlvX3NldCAqYnMsIGludCBwb29sX3NpemUpCi17Ci0JYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChwb29sX3NpemUsCi0JCQkJCQkJICBiaW9faW50ZWdyaXR5X3NsYWIpOwotCWlmICghYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCkKLQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGJpb3NldF9pbnRlZ3JpdHlfY3JlYXRlKTsKLQotdm9pZCBiaW9zZXRfaW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpb19zZXQgKmJzKQotewotCWlmIChicy0+YmlvX2ludGVncml0eV9wb29sKQotCQltZW1wb29sX2Rlc3Ryb3koYnMtPmJpb19pbnRlZ3JpdHlfcG9vbCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGJpb3NldF9pbnRlZ3JpdHlfZnJlZSk7Ci0KLXZvaWQgX19pbml0IGJpb19pbnRlZ3JpdHlfaW5pdF9zbGFiKHZvaWQpCi17Ci0JYmlvX2ludGVncml0eV9zbGFiID0gS01FTV9DQUNIRShiaW9faW50ZWdyaXR5X3BheWxvYWQsCi0JCQkJCVNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1BBTklDKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgaW50ZWdyaXR5X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGJpb19pbnRlZ3JpdHlfaW5pdCh2b2lkKQogewogCWtpbnRlZ3JpdHlkX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgia2ludGVncml0eWQiKTsKIAogCWlmICgha2ludGVncml0eWRfd3EpCiAJCXBhbmljKCJGYWlsZWQgdG8gY3JlYXRlIGtpbnRlZ3JpdHlkXG4iKTsKIAorCWJpb19pbnRlZ3JpdHlfc2xhYiA9IEtNRU1fQ0FDSEUoYmlvX2ludGVncml0eV9wYXlsb2FkLAorCQkJCQlTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQyk7CisKKwliaW9faW50ZWdyaXR5X3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woQklPX1BPT0xfU0laRSwKKwkJCQkJCSAgICAgIGJpb19pbnRlZ3JpdHlfc2xhYik7CisJaWYgKCFiaW9faW50ZWdyaXR5X3Bvb2wpCisJCXBhbmljKCJiaW9faW50ZWdyaXR5OiBjYW4ndCBhbGxvY2F0ZSBiaXAgcG9vbFxuIik7CisKKwlpbnRlZ3JpdHlfYmlvX3NldCA9IGJpb3NldF9jcmVhdGUoQklPX1BPT0xfU0laRSwgMCk7CisJaWYgKCFpbnRlZ3JpdHlfYmlvX3NldCkKKwkJcGFuaWMoImJpb19pbnRlZ3JpdHk6IGNhbid0IGFsbG9jYXRlIGJpb19zZXRcbiIpOworCiAJcmV0dXJuIDA7CiB9Ci1zdWJzeXNfaW5pdGNhbGwoaW50ZWdyaXR5X2luaXQpOworc3Vic3lzX2luaXRjYWxsKGJpb19pbnRlZ3JpdHlfaW5pdCk7CmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IGQ0ZjA2MzIuLmEwNDBjZGUgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJYnZlY19mcmVlX2JzKGJzLCBiaW8tPmJpX2lvX3ZlYywgQklPX1BPT0xfSURYKGJpbykpOwogCiAJaWYgKGJpb19pbnRlZ3JpdHkoYmlvKSkKLQkJYmlvX2ludGVncml0eV9mcmVlKGJpbywgYnMpOworCQliaW9faW50ZWdyaXR5X2ZyZWUoYmlvKTsKIAogCS8qCiAJICogSWYgd2UgaGF2ZSBmcm9udCBwYWRkaW5nLCBhZGp1c3QgdGhlIGJpbyBwb2ludGVyIGJlZm9yZSBmcmVlaW5nCkBAIC0zMDEsNDggKzMwMSw1MSBAQAogICoqLwogc3RydWN0IGJpbyAqYmlvX2FsbG9jX2Jpb3NldChnZnBfdCBnZnBfbWFzaywgaW50IG5yX2lvdmVjcywgc3RydWN0IGJpb19zZXQgKmJzKQogeworCXN0cnVjdCBiaW9fdmVjICpidmwgPSBOVUxMOwogCXN0cnVjdCBiaW8gKmJpbyA9IE5VTEw7Ci0Jdm9pZCAqdW5pbml0aWFsaXplZF92YXIocCk7CisJdW5zaWduZWQgbG9uZyBpZHggPSAwOworCXZvaWQgKnAgPSBOVUxMOwogCiAJaWYgKGJzKSB7CiAJCXAgPSBtZW1wb29sX2FsbG9jKGJzLT5iaW9fcG9vbCwgZ2ZwX21hc2spOwotCi0JCWlmIChwKQotCQkJYmlvID0gcCArIGJzLT5mcm9udF9wYWQ7Ci0JfSBlbHNlCisJCWlmICghcCkKKwkJCWdvdG8gZXJyOworCQliaW8gPSBwICsgYnMtPmZyb250X3BhZDsKKwl9IGVsc2UgewogCQliaW8gPSBrbWFsbG9jKHNpemVvZigqYmlvKSwgZ2ZwX21hc2spOwotCi0JaWYgKGxpa2VseShiaW8pKSB7Ci0JCXN0cnVjdCBiaW9fdmVjICpidmwgPSBOVUxMOwotCi0JCWJpb19pbml0KGJpbyk7Ci0JCWlmIChsaWtlbHkobnJfaW92ZWNzKSkgewotCQkJdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihpZHgpOwotCi0JCQlpZiAobnJfaW92ZWNzIDw9IEJJT19JTkxJTkVfVkVDUykgewotCQkJCWlkeCA9IDA7Ci0JCQkJYnZsID0gYmlvLT5iaV9pbmxpbmVfdmVjczsKLQkJCQlucl9pb3ZlY3MgPSBCSU9fSU5MSU5FX1ZFQ1M7Ci0JCQl9IGVsc2UgewotCQkJCWJ2bCA9IGJ2ZWNfYWxsb2NfYnMoZ2ZwX21hc2ssIG5yX2lvdmVjcywgJmlkeCwKLQkJCQkJCQlicyk7Ci0JCQkJbnJfaW92ZWNzID0gYnZlY19ucl92ZWNzKGlkeCk7Ci0JCQl9Ci0JCQlpZiAodW5saWtlbHkoIWJ2bCkpIHsKLQkJCQlpZiAoYnMpCi0JCQkJCW1lbXBvb2xfZnJlZShwLCBicy0+YmlvX3Bvb2wpOwotCQkJCWVsc2UKLQkJCQkJa2ZyZWUoYmlvKTsKLQkJCQliaW8gPSBOVUxMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJYmlvLT5iaV9mbGFncyB8PSBpZHggPDwgQklPX1BPT0xfT0ZGU0VUOwotCQkJYmlvLT5iaV9tYXhfdmVjcyA9IG5yX2lvdmVjczsKLQkJfQotCQliaW8tPmJpX2lvX3ZlYyA9IGJ2bDsKKwkJaWYgKCFiaW8pCisJCQlnb3RvIGVycjsKIAl9Ci1vdXQ6CisKKwliaW9faW5pdChiaW8pOworCisJaWYgKHVubGlrZWx5KCFucl9pb3ZlY3MpKQorCQlnb3RvIG91dF9zZXQ7CisKKwlpZiAobnJfaW92ZWNzIDw9IEJJT19JTkxJTkVfVkVDUykgeworCQlidmwgPSBiaW8tPmJpX2lubGluZV92ZWNzOworCQlucl9pb3ZlY3MgPSBCSU9fSU5MSU5FX1ZFQ1M7CisJfSBlbHNlIHsKKwkJYnZsID0gYnZlY19hbGxvY19icyhnZnBfbWFzaywgbnJfaW92ZWNzLCAmaWR4LCBicyk7CisJCWlmICh1bmxpa2VseSghYnZsKSkKKwkJCWdvdG8gZXJyX2ZyZWU7CisKKwkJbnJfaW92ZWNzID0gYnZlY19ucl92ZWNzKGlkeCk7CisJfQorCWJpby0+YmlfZmxhZ3MgfD0gaWR4IDw8IEJJT19QT09MX09GRlNFVDsKKwliaW8tPmJpX21heF92ZWNzID0gbnJfaW92ZWNzOworb3V0X3NldDoKKwliaW8tPmJpX2lvX3ZlYyA9IGJ2bDsKKwogCXJldHVybiBiaW87CisKK2Vycl9mcmVlOgorCWlmIChicykKKwkJbWVtcG9vbF9mcmVlKHAsIGJzLT5iaW9fcG9vbCk7CisJZWxzZQorCQlrZnJlZShiaW8pOworZXJyOgorCXJldHVybiBOVUxMOwogfQogCiBzdHJ1Y3QgYmlvICpiaW9fYWxsb2MoZ2ZwX3QgZ2ZwX21hc2ssIGludCBucl9pb3ZlY3MpCkBAIC00NjMsNyArNDY2LDcgQEAKIAlpZiAoYmlvX2ludGVncml0eShiaW8pKSB7CiAJCWludCByZXQ7CiAKLQkJcmV0ID0gYmlvX2ludGVncml0eV9jbG9uZShiLCBiaW8sIGdmcF9tYXNrLCBmc19iaW9fc2V0KTsKKwkJcmV0ID0gYmlvX2ludGVncml0eV9jbG9uZShiLCBiaW8sIGdmcF9tYXNrKTsKIAogCQlpZiAocmV0IDwgMCkgewogCQkJYmlvX3B1dChiKTsKQEAgLTE1MjYsNyArMTUyOSw2IEBACiAJaWYgKGJzLT5iaW9fcG9vbCkKIAkJbWVtcG9vbF9kZXN0cm95KGJzLT5iaW9fcG9vbCk7CiAKLQliaW9zZXRfaW50ZWdyaXR5X2ZyZWUoYnMpOwogCWJpb3ZlY19mcmVlX3Bvb2xzKGJzKTsKIAliaW9fcHV0X3NsYWIoYnMpOwogCkBAIC0xNTY3LDkgKzE1NjksNiBAQAogCWlmICghYnMtPmJpb19wb29sKQogCQlnb3RvIGJhZDsKIAotCWlmIChiaW9zZXRfaW50ZWdyaXR5X2NyZWF0ZShicywgcG9vbF9zaXplKSkKLQkJZ290byBiYWQ7Ci0KIAlpZiAoIWJpb3ZlY19jcmVhdGVfcG9vbHMoYnMsIHBvb2xfc2l6ZSkpCiAJCXJldHVybiBiczsKIApAQCAtMTU4Niw2ICsxNTg1LDEzIEBACiAJCWludCBzaXplOwogCQlzdHJ1Y3QgYmlvdmVjX3NsYWIgKmJ2cyA9IGJ2ZWNfc2xhYnMgKyBpOwogCisjaWZuZGVmIENPTkZJR19CTEtfREVWX0lOVEVHUklUWQorCQlpZiAoYnZzLT5ucl92ZWNzIDw9IEJJT19JTkxJTkVfVkVDUykgeworCQkJYnZzLT5zbGFiID0gTlVMTDsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKKwogCQlzaXplID0gYnZzLT5ucl92ZWNzICogc2l6ZW9mKHN0cnVjdCBiaW9fdmVjKTsKIAkJYnZzLT5zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoYnZzLT5uYW1lLCBzaXplLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9QQU5JQywgTlVMTCk7CkBAIC0xNjAwLDcgKzE2MDYsNiBAQAogCWlmICghYmlvX3NsYWJzKQogCQlwYW5pYygiYmlvOiBjYW4ndCBhbGxvY2F0ZSBiaW9zXG4iKTsKIAotCWJpb19pbnRlZ3JpdHlfaW5pdF9zbGFiKCk7CiAJYmlvdmVjX2luaXRfc2xhYnMoKTsKIAogCWZzX2Jpb19zZXQgPSBiaW9zZXRfY3JlYXRlKEJJT19QT09MX1NJWkUsIDApOwpkaWZmIC0tZ2l0IGEvZnMvYmxvY2tfZGV2LmMgYi9mcy9ibG9ja19kZXYuYwppbmRleCBiM2MxZWZmLi44YzNjNjg5IDEwMDY0NAotLS0gYS9mcy9ibG9ja19kZXYuYworKysgYi9mcy9ibG9ja19kZXYuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa3BnLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvbXBhZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgpAQCAtMTc0LDYgKzE3NSwxNTEgQEAKIAkJCQlpb3YsIG9mZnNldCwgbnJfc2VncywgYmxrZGV2X2dldF9ibG9ja3MsIE5VTEwpOwogfQogCisvKgorICogV3JpdGUgb3V0IGFuZCB3YWl0IHVwb24gYWxsIHRoZSBkaXJ0eSBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGJsb2NrCisgKiBkZXZpY2UgdmlhIGl0cyBtYXBwaW5nLiAgRG9lcyBub3QgdGFrZSB0aGUgc3VwZXJibG9jayBsb2NrLgorICovCitpbnQgc3luY19ibG9ja2RldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCWludCByZXQgPSAwOworCisJaWYgKGJkZXYpCisJCXJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoYmRldi0+YmRfaW5vZGUtPmlfbWFwcGluZyk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woc3luY19ibG9ja2Rldik7CisKKy8qCisgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgZGlydHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcworICogZGV2aWNlLiAgIEZpbGVzeXN0ZW0gZGF0YSBhcyB3ZWxsIGFzIHRoZSB1bmRlcmx5aW5nIGJsb2NrCisgKiBkZXZpY2UuICBUYWtlcyB0aGUgc3VwZXJibG9jayBsb2NrLgorICovCitpbnQgZnN5bmNfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBnZXRfc3VwZXIoYmRldik7CisJaWYgKHNiKSB7CisJCWludCByZXMgPSBmc3luY19zdXBlcihzYik7CisJCWRyb3Bfc3VwZXIoc2IpOworCQlyZXR1cm4gcmVzOworCX0KKwlyZXR1cm4gc3luY19ibG9ja2RldihiZGV2KTsKK30KKworLyoqCisgKiBmcmVlemVfYmRldiAgLS0gIGxvY2sgYSBmaWxlc3lzdGVtIGFuZCBmb3JjZSBpdCBpbnRvIGEgY29uc2lzdGVudCBzdGF0ZQorICogQGJkZXY6CWJsb2NrZGV2aWNlIHRvIGxvY2sKKyAqCisgKiBUaGlzIHRha2VzIHRoZSBibG9jayBkZXZpY2UgYmRfbW91bnRfc2VtIHRvIG1ha2Ugc3VyZSBubyBuZXcgbW91bnRzCisgKiBoYXBwZW4gb24gYmRldiB1bnRpbCB0aGF3X2JkZXYoKSBpcyBjYWxsZWQuCisgKiBJZiBhIHN1cGVyYmxvY2sgaXMgZm91bmQgb24gdGhpcyBkZXZpY2UsIHdlIHRha2UgdGhlIHNfdW1vdW50IHNlbWFwaG9yZQorICogb24gaXQgdG8gbWFrZSBzdXJlIG5vYm9keSB1bm1vdW50cyB1bnRpbCB0aGUgc25hcHNob3QgY3JlYXRpb24gaXMgZG9uZS4KKyAqIFRoZSByZWZlcmVuY2UgY291bnRlciAoYmRfZnNmcmVlemVfY291bnQpIGd1YXJhbnRlZXMgdGhhdCBvbmx5IHRoZSBsYXN0CisgKiB1bmZyZWV6ZSBwcm9jZXNzIGNhbiB1bmZyZWV6ZSB0aGUgZnJvemVuIGZpbGVzeXN0ZW0gYWN0dWFsbHkgd2hlbiBtdWx0aXBsZQorICogZnJlZXplIHJlcXVlc3RzIGFycml2ZSBzaW11bHRhbmVvdXNseS4gSXQgY291bnRzIHVwIGluIGZyZWV6ZV9iZGV2KCkgYW5kCisgKiBjb3VudCBkb3duIGluIHRoYXdfYmRldigpLiBXaGVuIGl0IGJlY29tZXMgMCwgdGhhd19iZGV2KCkgd2lsbCB1bmZyZWV6ZQorICogYWN0dWFsbHkuCisgKi8KK3N0cnVjdCBzdXBlcl9ibG9jayAqZnJlZXplX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCWludCBlcnJvciA9IDA7CisKKwltdXRleF9sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CisJaWYgKGJkZXYtPmJkX2ZzZnJlZXplX2NvdW50ID4gMCkgeworCQliZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudCsrOworCQlzYiA9IGdldF9zdXBlcihiZGV2KTsKKwkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CisJCXJldHVybiBzYjsKKwl9CisJYmRldi0+YmRfZnNmcmVlemVfY291bnQrKzsKKworCWRvd24oJmJkZXYtPmJkX21vdW50X3NlbSk7CisJc2IgPSBnZXRfc3VwZXIoYmRldik7CisJaWYgKHNiICYmICEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisJCXNiLT5zX2Zyb3plbiA9IFNCX0ZSRUVaRV9XUklURTsKKwkJc21wX3dtYigpOworCisJCV9fZnN5bmNfc3VwZXIoc2IpOworCisJCXNiLT5zX2Zyb3plbiA9IFNCX0ZSRUVaRV9UUkFOUzsKKwkJc21wX3dtYigpOworCisJCXN5bmNfYmxvY2tkZXYoc2ItPnNfYmRldik7CisKKwkJaWYgKHNiLT5zX29wLT5mcmVlemVfZnMpIHsKKwkJCWVycm9yID0gc2ItPnNfb3AtPmZyZWV6ZV9mcyhzYik7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJIlZGUzpGaWxlc3lzdGVtIGZyZWV6ZSBmYWlsZWRcbiIpOworCQkJCXNiLT5zX2Zyb3plbiA9IFNCX1VORlJPWkVOOworCQkJCWRyb3Bfc3VwZXIoc2IpOworCQkJCXVwKCZiZGV2LT5iZF9tb3VudF9zZW0pOworCQkJCWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50LS07CisJCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7CisJCQkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworCQkJfQorCQl9CisJfQorCisJc3luY19ibG9ja2RldihiZGV2KTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKKworCXJldHVybiBzYjsJLyogdGhhd19iZGV2IHJlbGVhc2VzIHMtPnNfdW1vdW50IGFuZCBiZF9tb3VudF9zZW0gKi8KK30KK0VYUE9SVF9TWU1CT0woZnJlZXplX2JkZXYpOworCisvKioKKyAqIHRoYXdfYmRldiAgLS0gdW5sb2NrIGZpbGVzeXN0ZW0KKyAqIEBiZGV2OglibG9ja2RldmljZSB0byB1bmxvY2sKKyAqIEBzYjoJCWFzc29jaWF0ZWQgc3VwZXJibG9jaworICoKKyAqIFVubG9ja3MgdGhlIGZpbGVzeXN0ZW0gYW5kIG1hcmtzIGl0IHdyaXRlYWJsZSBhZ2FpbiBhZnRlciBmcmVlemVfYmRldigpLgorICovCitpbnQgdGhhd19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJaW50IGVycm9yID0gMDsKKworCW11dGV4X2xvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKKwlpZiAoIWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50KSB7CisJCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwliZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudC0tOworCWlmIChiZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudCA+IDApIHsKKwkJaWYgKHNiKQorCQkJZHJvcF9zdXBlcihzYik7CisJCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoc2IpIHsKKwkJQlVHX09OKHNiLT5zX2JkZXYgIT0gYmRldik7CisJCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCQkJaWYgKHNiLT5zX29wLT51bmZyZWV6ZV9mcykgeworCQkJCWVycm9yID0gc2ItPnNfb3AtPnVuZnJlZXplX2ZzKHNiKTsKKwkJCQlpZiAoZXJyb3IpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkiVkZTOkZpbGVzeXN0ZW0gdGhhdyBmYWlsZWRcbiIpOworCQkJCQlzYi0+c19mcm96ZW4gPSBTQl9GUkVFWkVfVFJBTlM7CisJCQkJCWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50Kys7CisJCQkJCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOworCQkJCQlyZXR1cm4gZXJyb3I7CisJCQkJfQorCQkJfQorCQkJc2ItPnNfZnJvemVuID0gU0JfVU5GUk9aRU47CisJCQlzbXBfd21iKCk7CisJCQl3YWtlX3VwKCZzYi0+c193YWl0X3VuZnJvemVuKTsKKwkJfQorCQlkcm9wX3N1cGVyKHNiKTsKKwl9CisKKwl1cCgmYmRldi0+YmRfbW91bnRfc2VtKTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodGhhd19iZGV2KTsKKwogc3RhdGljIGludCBibGtkZXZfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlyZXR1cm4gYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHBhZ2UsIGJsa2Rldl9nZXRfYmxvY2ssIHdiYyk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggM2UxODE3NS4uNmVjODBjMCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtMjM4NSw3ICsyMzg1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRocmVzaCA9IDMyICogMTAyNCAqIDEwMjQ7CiAJdHJlZSA9ICZCVFJGU19JKHJvb3QtPmZzX2luZm8tPmJ0cmVlX2lub2RlKS0+aW9fdHJlZTsKIAotCWlmIChjdXJyZW50X2lzX3BkZmx1c2goKSB8fCBjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKQorCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKQogCQlyZXR1cm47CiAKIAludW1fZGlydHkgPSBjb3VudF9yYW5nZV9iaXRzKHRyZWUsICZzdGFydCwgKHU2NCktMSwKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggODkxZTFjNy4uYTJmZDc0MyAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTE2NiwxNTEgKzE2Niw2IEBACiB9CiAKIC8qCi0gKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgdGhlIGRpcnR5IGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgYmxvY2sKLSAqIGRldmljZSB2aWEgaXRzIG1hcHBpbmcuICBEb2VzIG5vdCB0YWtlIHRoZSBzdXBlcmJsb2NrIGxvY2suCi0gKi8KLWludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoYmRldikKLQkJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChiZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nKTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChzeW5jX2Jsb2NrZGV2KTsKLQotLyoKLSAqIFdyaXRlIG91dCBhbmQgd2FpdCB1cG9uIGFsbCBkaXJ0eSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gKiBkZXZpY2UuICAgRmlsZXN5c3RlbSBkYXRhIGFzIHdlbGwgYXMgdGhlIHVuZGVybHlpbmcgYmxvY2sKLSAqIGRldmljZS4gIFRha2VzIHRoZSBzdXBlcmJsb2NrIGxvY2suCi0gKi8KLWludCBmc3luY19iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCi17Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGdldF9zdXBlcihiZGV2KTsKLQlpZiAoc2IpIHsKLQkJaW50IHJlcyA9IGZzeW5jX3N1cGVyKHNiKTsKLQkJZHJvcF9zdXBlcihzYik7Ci0JCXJldHVybiByZXM7Ci0JfQotCXJldHVybiBzeW5jX2Jsb2NrZGV2KGJkZXYpOwotfQotCi0vKioKLSAqIGZyZWV6ZV9iZGV2ICAtLSAgbG9jayBhIGZpbGVzeXN0ZW0gYW5kIGZvcmNlIGl0IGludG8gYSBjb25zaXN0ZW50IHN0YXRlCi0gKiBAYmRldjoJYmxvY2tkZXZpY2UgdG8gbG9jawotICoKLSAqIFRoaXMgdGFrZXMgdGhlIGJsb2NrIGRldmljZSBiZF9tb3VudF9zZW0gdG8gbWFrZSBzdXJlIG5vIG5ldyBtb3VudHMKLSAqIGhhcHBlbiBvbiBiZGV2IHVudGlsIHRoYXdfYmRldigpIGlzIGNhbGxlZC4KLSAqIElmIGEgc3VwZXJibG9jayBpcyBmb3VuZCBvbiB0aGlzIGRldmljZSwgd2UgdGFrZSB0aGUgc191bW91bnQgc2VtYXBob3JlCi0gKiBvbiBpdCB0byBtYWtlIHN1cmUgbm9ib2R5IHVubW91bnRzIHVudGlsIHRoZSBzbmFwc2hvdCBjcmVhdGlvbiBpcyBkb25lLgotICogVGhlIHJlZmVyZW5jZSBjb3VudGVyIChiZF9mc2ZyZWV6ZV9jb3VudCkgZ3VhcmFudGVlcyB0aGF0IG9ubHkgdGhlIGxhc3QKLSAqIHVuZnJlZXplIHByb2Nlc3MgY2FuIHVuZnJlZXplIHRoZSBmcm96ZW4gZmlsZXN5c3RlbSBhY3R1YWxseSB3aGVuIG11bHRpcGxlCi0gKiBmcmVlemUgcmVxdWVzdHMgYXJyaXZlIHNpbXVsdGFuZW91c2x5LiBJdCBjb3VudHMgdXAgaW4gZnJlZXplX2JkZXYoKSBhbmQKLSAqIGNvdW50IGRvd24gaW4gdGhhd19iZGV2KCkuIFdoZW4gaXQgYmVjb21lcyAwLCB0aGF3X2JkZXYoKSB3aWxsIHVuZnJlZXplCi0gKiBhY3R1YWxseS4KLSAqLwotc3RydWN0IHN1cGVyX2Jsb2NrICpmcmVlemVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0JaW50IGVycm9yID0gMDsKLQotCW11dGV4X2xvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKLQlpZiAoYmRldi0+YmRfZnNmcmVlemVfY291bnQgPiAwKSB7Ci0JCWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50Kys7Ci0JCXNiID0gZ2V0X3N1cGVyKGJkZXYpOwotCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKLQkJcmV0dXJuIHNiOwotCX0KLQliZGV2LT5iZF9mc2ZyZWV6ZV9jb3VudCsrOwotCi0JZG93bigmYmRldi0+YmRfbW91bnRfc2VtKTsKLQlzYiA9IGdldF9zdXBlcihiZGV2KTsKLQlpZiAoc2IgJiYgIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKLQkJc2ItPnNfZnJvemVuID0gU0JfRlJFRVpFX1dSSVRFOwotCQlzbXBfd21iKCk7Ci0KLQkJX19mc3luY19zdXBlcihzYik7Ci0KLQkJc2ItPnNfZnJvemVuID0gU0JfRlJFRVpFX1RSQU5TOwotCQlzbXBfd21iKCk7Ci0KLQkJc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKLQotCQlpZiAoc2ItPnNfb3AtPmZyZWV6ZV9mcykgewotCQkJZXJyb3IgPSBzYi0+c19vcC0+ZnJlZXplX2ZzKHNiKTsKLQkJCWlmIChlcnJvcikgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkiVkZTOkZpbGVzeXN0ZW0gZnJlZXplIGZhaWxlZFxuIik7Ci0JCQkJc2ItPnNfZnJvemVuID0gU0JfVU5GUk9aRU47Ci0JCQkJZHJvcF9zdXBlcihzYik7Ci0JCQkJdXAoJmJkZXYtPmJkX21vdW50X3NlbSk7Ci0JCQkJYmRldi0+YmRfZnNmcmVlemVfY291bnQtLTsKLQkJCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2ZzZnJlZXplX211dGV4KTsKLQkJCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlzeW5jX2Jsb2NrZGV2KGJkZXYpOwotCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOwotCi0JcmV0dXJuIHNiOwkvKiB0aGF3X2JkZXYgcmVsZWFzZXMgcy0+c191bW91bnQgYW5kIGJkX21vdW50X3NlbSAqLwotfQotRVhQT1JUX1NZTUJPTChmcmVlemVfYmRldik7Ci0KLS8qKgotICogdGhhd19iZGV2ICAtLSB1bmxvY2sgZmlsZXN5c3RlbQotICogQGJkZXY6CWJsb2NrZGV2aWNlIHRvIHVubG9jawotICogQHNiOgkJYXNzb2NpYXRlZCBzdXBlcmJsb2NrCi0gKgotICogVW5sb2NrcyB0aGUgZmlsZXN5c3RlbSBhbmQgbWFya3MgaXQgd3JpdGVhYmxlIGFnYWluIGFmdGVyIGZyZWV6ZV9iZGV2KCkuCi0gKi8KLWludCB0aGF3X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlpbnQgZXJyb3IgPSAwOwotCi0JbXV0ZXhfbG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOwotCWlmICghYmRldi0+YmRfZnNmcmVlemVfY291bnQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWJkZXYtPmJkX2ZzZnJlZXplX2NvdW50LS07Ci0JaWYgKGJkZXYtPmJkX2ZzZnJlZXplX2NvdW50ID4gMCkgewotCQlpZiAoc2IpCi0JCQlkcm9wX3N1cGVyKHNiKTsKLQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChzYikgewotCQlCVUdfT04oc2ItPnNfYmRldiAhPSBiZGV2KTsKLQkJaWYgKCEoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCQlpZiAoc2ItPnNfb3AtPnVuZnJlZXplX2ZzKSB7Ci0JCQkJZXJyb3IgPSBzYi0+c19vcC0+dW5mcmVlemVfZnMoc2IpOwotCQkJCWlmIChlcnJvcikgewotCQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkJCSJWRlM6RmlsZXN5c3RlbSB0aGF3IGZhaWxlZFxuIik7Ci0JCQkJCXNiLT5zX2Zyb3plbiA9IFNCX0ZSRUVaRV9UUkFOUzsKLQkJCQkJYmRldi0+YmRfZnNmcmVlemVfY291bnQrKzsKLQkJCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9mc2ZyZWV6ZV9tdXRleCk7Ci0JCQkJCXJldHVybiBlcnJvcjsKLQkJCQl9Ci0JCQl9Ci0JCQlzYi0+c19mcm96ZW4gPSBTQl9VTkZST1pFTjsKLQkJCXNtcF93bWIoKTsKLQkJCXdha2VfdXAoJnNiLT5zX3dhaXRfdW5mcm96ZW4pOwotCQl9Ci0JCWRyb3Bfc3VwZXIoc2IpOwotCX0KLQotCXVwKCZiZGV2LT5iZF9tb3VudF9zZW0pOwotCW11dGV4X3VubG9jaygmYmRldi0+YmRfZnNmcmVlemVfbXV0ZXgpOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTCh0aGF3X2JkZXYpOwotCi0vKgogICogVmFyaW91cyBmaWxlc3lzdGVtcyBhcHBlYXIgdG8gd2FudCBfX2ZpbmRfZ2V0X2Jsb2NrIHRvIGJlIG5vbi1ibG9ja2luZy4KICAqIEJ1dCBpdCdzIHRoZSBwYWdlIGxvY2sgd2hpY2ggcHJvdGVjdHMgdGhlIGJ1ZmZlcnMuICBUbyBnZXQgYXJvdW5kIHRoaXMsCiAgKiB3ZSBnZXQgZXhjbHVzaW9uIGZyb20gdHJ5X3RvX2ZyZWVfYnVmZmVycyB3aXRoIHRoZSBibG9ja2RldiBtYXBwaW5nJ3MKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCA4NTEzODhmLi42NTk4NDAwIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC02LDcgKzYsMTYgQEAKIGFyZSBhdXRoZW50aWNhdGVkIGFzIGd1ZXN0LCBhcyByZWNvbm5lY3Rpb25zLCBpbnZhbGlkYXRpbmcgdGhlIGVhcmxpZXIKIHVzZXIncyBzbWIgc2Vzc2lvbi4gIFRoaXMgZml4IGFsbG93cyBjaWZzIHRvIG1vdW50IG11bHRpcGxlIHRpbWVzIHRvIHRoZQogc2FtZSBzZXJ2ZXIgd2l0aCBkaWZmZXJlbnQgdXNlcmlkcyB3aXRob3V0IHJpc2tpbmcgaW52YWxpZGF0aW5nIGVhcmxpZXIKLWVzdGFibGlzaGVkIHNlY3VyaXR5IGNvbnRleHRzLgorZXN0YWJsaXNoZWQgc2VjdXJpdHkgY29udGV4dHMuICBmc3luYyBub3cgc2VuZHMgU01CIEZsdXNoIG9wZXJhdGlvbgordG8gYmV0dGVyIGVuc3VyZSB0aGF0IHdlIHdhaXQgZm9yIHNlcnZlciB0byB3cml0ZSBhbGwgb2YgdGhlIGRhdGEgdG8KK3NlcnZlciBkaXNrIChub3QganVzdCB3cml0ZSBpdCBvdmVyIHRoZSBuZXR3b3JrKS4gIEFkZCBuZXcgbW91bnQKK3BhcmFtZXRlciB0byBhbGxvdyB1c2VyIHRvIGRpc2FibGUgc2VuZGluZyB0aGUgKHNsb3cpIFNNQiBmbHVzaCBvbgorZnN5bmMgaWYgZGVzaXJlZCAoZnN5bmMgc3RpbGwgZmx1c2hlcyBhbGwgY2FjaGVkIHdyaXRlIGRhdGEgdG8gdGhlIHNlcnZlcikuCitQb3NpeCBmaWxlIG9wZW4gc3VwcG9ydCBhZGRlZCAodHVybmVkIG9mZiBhZnRlciBvbmUgYXR0ZW1wdCBpZiBzZXJ2ZXIKK2ZhaWxzIHRvIHN1cHBvcnQgaXQgcHJvcGVybHksIGFzIHdpdGggU2FtYmEgc2VydmVyIHZlcnNpb25zIHByaW9yIHRvIDMuMy4yKQorRml4ICJyZWR6b25lIG92ZXJ3cml0dGVuIiBidWcgaW4gY2lmc19wdXRfdGNvbiAoQ0lGU1Rjb24gbWF5IGFsbG9jYXRlIHRvbworbGl0dGxlIG1lbW9yeSBmb3IgdGhlICJuYXRpdmVGaWxlU3lzdGVtIiBmaWVsZCByZXR1cm5lZCBieSB0aGUgc2VydmVyCitkdXJpbmcgbW91bnQpLiAKIAogVmVyc2lvbiAxLjU2CiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvS2NvbmZpZyBiL2ZzL2NpZnMvS2NvbmZpZwppbmRleCAzNDFhOTg5Li42OTk0YTBmIDEwMDY0NAotLS0gYS9mcy9jaWZzL0tjb25maWcKKysrIGIvZnMvY2lmcy9LY29uZmlnCkBAIC0xMTgsNiArMTE4LDE4IEBACiAJICAgb3B0aW9uIGNhbiBiZSB0dXJuZWQgb2ZmIHVubGVzcyB5b3UgYXJlIGRlYnVnZ2luZwogCSAgIGNpZnMgcHJvYmxlbXMuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgQ0lGU19ERlNfVVBDQUxMCisJICBib29sICJERlMgZmVhdHVyZSBzdXBwb3J0IgorCSAgZGVwZW5kcyBvbiBDSUZTICYmIEtFWVMKKwkgIGhlbHAKKwkgICAgRGlzdHJpYnV0ZWQgRmlsZSBTeXN0ZW0gKERGUykgc3VwcG9ydCBpcyB1c2VkIHRvIGFjY2VzcyBzaGFyZXMKKwkgICAgdHJhbnNwYXJlbnRseSBpbiBhbiBlbnRlcnByaXNlIG5hbWUgc3BhY2UsIGV2ZW4gaWYgdGhlIHNoYXJlCisJICAgIG1vdmVzIHRvIGEgZGlmZmVyZW50IHNlcnZlci4gIFRoaXMgZmVhdHVyZSBhbHNvIGVuYWJsZXMKKwkgICAgYW4gdXBjYWxsIG1lY2hhbmlzbSBmb3IgQ0lGUyB3aGljaCBjb250YWN0cyB1c2Vyc3BhY2UgaGVscGVyCisJICAgIHV0aWxpdGllcyB0byBwcm92aWRlIHNlcnZlciBuYW1lIHJlc29sdXRpb24gKGhvc3QgbmFtZXMgdG8KKwkgICAgSVAgYWRkcmVzc2VzKSB3aGljaCBpcyBuZWVkZWQgZm9yIGltcGxpY2l0IG1vdW50cyBvZiBERlMganVuY3Rpb24KKwkgICAgcG9pbnRzLiBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgQ0lGU19FWFBFUklNRU5UQUwKIAkgIGJvb2wgIkNJRlMgRXhwZXJpbWVudGFsIEZlYXR1cmVzIChFWFBFUklNRU5UQUwpIgogCSAgZGVwZW5kcyBvbiBDSUZTICYmIEVYUEVSSU1FTlRBTApAQCAtMTMxLDEyICsxNDMsMyBAQAogCSAgICAod2hpY2ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCkuIFNlZSB0aGUgZmlsZSBmcy9jaWZzL1JFQURNRQogCSAgICBmb3IgbW9yZSBkZXRhaWxzLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAotY29uZmlnIENJRlNfREZTX1VQQ0FMTAotCSAgYm9vbCAiREZTIGZlYXR1cmUgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQkgIGRlcGVuZHMgb24gQ0lGU19FWFBFUklNRU5UQUwKLQkgIGRlcGVuZHMgb24gS0VZUwotCSAgaGVscAotCSAgICBFbmFibGVzIGFuIHVwY2FsbCBtZWNoYW5pc20gZm9yIENJRlMgd2hpY2ggY29udGFjdHMgdXNlcnNwYWNlCi0JICAgIGhlbHBlciB1dGlsaXRpZXMgdG8gcHJvdmlkZSBzZXJ2ZXIgbmFtZSByZXNvbHV0aW9uIChob3N0IG5hbWVzIHRvCi0JICAgIElQIGFkZHJlc3Nlcykgd2hpY2ggaXMgbmVlZGVkIGZvciBpbXBsaWNpdCBtb3VudHMgb2YgREZTIGp1bmN0aW9uCi0JICAgIHBvaW50cy4gSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvUkVBRE1FIGIvZnMvY2lmcy9SRUFETUUKaW5kZXggZGE0NTE1ZS4uMDc0MzQxOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9SRUFETUUKKysrIGIvZnMvY2lmcy9SRUFETUUKQEAgLTQ3Miw2ICs0NzIsMTkgQEAKIAkJZXZlbiBpZiB0aGUgY2lmcyBzZXJ2ZXIgd291bGQgc3VwcG9ydCBwb3NpeCBhZHZpc29yeSBsb2Nrcy4KIAkJImZvcmNlbWFuZCIgaXMgYWNjZXB0ZWQgYXMgYSBzaG9ydGVyIGZvcm0gb2YgdGhpcyBtb3VudAogCQlvcHRpb24uCisgbm9zdHJpY3RzeW5jICAgSWYgdGhpcyBtb3VudCBvcHRpb24gaXMgc2V0LCB3aGVuIGFuIGFwcGxpY2F0aW9uIGRvZXMgYW4KKwkJZnN5bmMgY2FsbCB0aGVuIHRoZSBjaWZzIGNsaWVudCBkb2VzIG5vdCBzZW5kIGFuIFNNQiBGbHVzaAorCQl0byB0aGUgc2VydmVyICh0byBmb3JjZSB0aGUgc2VydmVyIHRvIHdyaXRlIGFsbCBkaXJ0eSBkYXRhCisJCWZvciB0aGlzIGZpbGUgaW1tZWRpYXRlbHkgdG8gZGlzayksIGFsdGhvdWdoIGNpZnMgc3RpbGwgc2VuZHMKKwkJYWxsIGRpcnR5IChjYWNoZWQpIGZpbGUgZGF0YSB0byB0aGUgc2VydmVyIGFuZCB3YWl0cyBmb3IgdGhlCisJCXNlcnZlciB0byByZXNwb25kIHRvIHRoZSB3cml0ZS4gIFNpbmNlIFNNQiBGbHVzaCBjYW4gYmUKKwkJdmVyeSBzbG93LCBhbmQgc29tZSBzZXJ2ZXJzIG1heSBiZSByZWxpYWJsZSBlbm91Z2ggKHRvIHJpc2sKKwkJZGVsYXlpbmcgc2xpZ2h0bHkgZmx1c2hpbmcgdGhlIGRhdGEgdG8gZGlzayBvbiB0aGUgc2VydmVyKSwKKwkJdHVybmluZyBvbiB0aGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yCisJCWFwcGxpY2F0aW9ucyB0aGF0IGZzeW5jIHRvbyBtdWNoLCBhdCBhIHNtYWxsIHJpc2sgb2Ygc2VydmVyCisJCWNyYXNoLiAgSWYgdGhpcyBtb3VudCBvcHRpb24gaXMgbm90IHNldCwgYnkgZGVmYXVsdCBjaWZzIHdpbGwKKwkJc2VuZCBhbiBTTUIgZmx1c2ggcmVxdWVzdCAoYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UpIG9uIGV2ZXJ5CisJCWZzeW5jIGNhbGwuCiAgbm9kZnMgICAgICAgICAgRGlzYWJsZSBERlMgKGdsb2JhbCBuYW1lIHNwYWNlIHN1cHBvcnQpIGV2ZW4gaWYgdGhlCiAJCXNlcnZlciBjbGFpbXMgdG8gc3VwcG9ydCBpdC4gIFRoaXMgY2FuIGhlbHAgd29yayBhcm91bmQKIAkJYSBwcm9ibGVtIHdpdGggcGFyc2luZyBvZiBERlMgcGF0aHMgd2l0aCBTYW1iYSBzZXJ2ZXIKQEAgLTY5MiwxMyArNzA1LDE0IEBACiBjaWZzLnVwY2FsbCBoZWxwZXIgcHJvZ3JhbSksIGluc3RlYWQgb2YgdXNpbmcgS2VyYmVyb3MsIGlzIHN1ZmZpY2llbnQgZm9yCiBzb21lIHVzZSBjYXNlcy4KIAotRW5hYmxpbmcgREZTIHN1cHBvcnQgKHVzZWQgdG8gYWNjZXNzIHNoYXJlcyB0cmFuc3BhcmVudGx5IGluIGFuIE1TLURGUwotZ2xvYmFsIG5hbWUgc3BhY2UpIHJlcXVpcmVzIHRoYXQgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGJlIGVuYWJsZWQuICBJbgotYWRkaXRpb24sIERGUyBzdXBwb3J0IGZvciB0YXJnZXQgc2hhcmVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgYXMgVU5DCitERlMgc3VwcG9ydCBhbGxvd3MgdHJhbnNwYXJlbnQgcmVkaXJlY3Rpb24gdG8gc2hhcmVzIGluIGFuIE1TLURGUyBuYW1lIHNwYWNlLgorSW4gYWRkaXRpb24sIERGUyBzdXBwb3J0IGZvciB0YXJnZXQgc2hhcmVzIHdoaWNoIGFyZSBzcGVjaWZpZWQgYXMgVU5DCiBuYW1lcyB3aGljaCBiZWdpbiB3aXRoIGhvc3QgbmFtZXMgKHJhdGhlciB0aGFuIElQIGFkZHJlc3NlcykgcmVxdWlyZXMKIGEgdXNlciBzcGFjZSBoZWxwZXIgKHN1Y2ggYXMgY2lmcy51cGNhbGwpIHRvIGJlIHByZXNlbnQgaW4gb3JkZXIgdG8KIHRyYW5zbGF0ZSBob3N0IG5hbWVzIHRvIGlwIGFkZHJlc3MsIGFuZCB0aGUgdXNlciBzcGFjZSBoZWxwZXIgbXVzdCBhbHNvCi1iZSBjb25maWd1cmVkIGluIHRoZSBmaWxlIC9ldGMvcmVxdWVzdC1rZXkuY29uZgorYmUgY29uZmlndXJlZCBpbiB0aGUgZmlsZSAvZXRjL3JlcXVlc3Qta2V5LmNvbmYuICBTYW1iYSwgV2luZG93cyBzZXJ2ZXJzIGFuZAorbWFueSBOQVMgYXBwbGlhbmNlcyBzdXBwb3J0IERGUyBhcyBhIHdheSBvZiBjb25zdHJ1Y3RpbmcgYSBnbG9iYWwgbmFtZQorc3BhY2UgdG8gZWFzZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gYW5kIGltcHJvdmUgcmVsaWFiaWxpdHkuCiAKIFRvIHVzZSBjaWZzIEtlcmJlcm9zIGFuZCBERlMgc3VwcG9ydCwgdGhlIExpbnV4IGtleXV0aWxzIHBhY2thZ2Ugc2hvdWxkIGJlCiBpbnN0YWxsZWQgYW5kIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcgbGluZXMgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwppbmRleCA0OTBlMzRiLi44NzdlNGQ5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGVidWcuYworKysgYi9mcy9jaWZzL2NpZnNfZGVidWcuYwpAQCAtMzQwLDYgKzM0MCw4IEBACiAJCQkJc2VxX3ByaW50ZihtLCAiXG5Xcml0ZXM6ICVkIEJ5dGVzOiAlbGxkIiwKIAkJCQkJYXRvbWljX3JlYWQoJnRjb24tPm51bV93cml0ZXMpLAogCQkJCQkobG9uZyBsb25nKSh0Y29uLT5ieXRlc193cml0dGVuKSk7CisJCQkJc2VxX3ByaW50ZihtLCAiXG5GbHVzaGVzOiAlZCIsCisJCQkJCWF0b21pY19yZWFkKCZ0Y29uLT5udW1fZmx1c2hlcykpOwogCQkJCXNlcV9wcmludGYobSwgIlxuTG9ja3M6ICVkIEhhcmRMaW5rczogJWQgIgogCQkJCQkgICAgICAiU3ltbGlua3M6ICVkIiwKIAkJCQkJYXRvbWljX3JlYWQoJnRjb24tPm51bV9sb2NrcyksCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwppbmRleCA4NWMwYTc0Li41ZmRiZjhhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKQEAgLTEwNCw5ICsxMDQsOSBAQAogCiAKIC8qKgotICogY29tcG9zZV9tb3VudF9vcHRpb25zCS0JY3JlYXRlcyBtb3VudCBvcHRpb25zIGZvciByZWZmZXJyYWwKKyAqIGNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zCS0JY3JlYXRlcyBtb3VudCBvcHRpb25zIGZvciByZWZmZXJyYWwKICAqIEBzYl9tb3VudGRhdGE6CXBhcmVudC9yb290IERGUyBtb3VudCBvcHRpb25zICh0ZW1wbGF0ZSkKLSAqIEBkZW50cnk6CQlwb2ludCB3aGVyZSB3ZSBhcmUgZ29pbmcgdG8gbW91bnQKKyAqIEBmdWxscGF0aDoJCWZ1bGwgcGF0aCBpbiBVTkMgZm9ybWF0CiAgKiBAcmVmOgkJc2VydmVyJ3MgcmVmZXJyYWwKICAqIEBkZXZuYW1lOgkJcG9pbnRlciBmb3Igc2F2aW5nIGRldmljZSBuYW1lCiAgKgpAQCAtMTE2LDggKzExNiw4IEBACiAgKiBSZXR1cm5zOiBwb2ludGVyIHRvIG5ldyBtb3VudCBvcHRpb25zIG9yIEVSUl9QVFIuCiAgKiBDYWxsZXIgaXMgcmVzcG9uY2libGUgZm9yIGZyZWVpbmcgcmV0dW5ybmVkIHZhbHVlIGlmIGl0IGlzIG5vdCBlcnJvci4KICAqLwotc3RhdGljIGNoYXIgKmNvbXBvc2VfbW91bnRfb3B0aW9ucyhjb25zdCBjaGFyICpzYl9tb3VudGRhdGEsCi0JCQkJICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorY2hhciAqY2lmc19jb21wb3NlX21vdW50X29wdGlvbnMoY29uc3QgY2hhciAqc2JfbW91bnRkYXRhLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZ1bGxwYXRoLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZiwKIAkJCQkgICBjaGFyICoqZGV2bmFtZSkKIHsKQEAgLTEyOCw3ICsxMjgsNiBAQAogCWNoYXIgKnNydklQID0gTlVMTDsKIAljaGFyIHNlcCA9ICcsJzsKIAlpbnQgb2ZmLCBub2ZmOwotCWNoYXIgKmZ1bGxwYXRoOwogCiAJaWYgKHNiX21vdW50ZGF0YSA9PSBOVUxMKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTIwMiwxNyArMjAxLDYgQEAKIAkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfZXJyOwogCX0KIAotCS8qCi0JICogdGhpcyBmdW5jdGlvbiBnaXZlcyB1cyBhIHBhdGggd2l0aCBhIGRvdWJsZSBiYWNrc2xhc2ggcHJlZml4LiBXZQotCSAqIHJlcXVpcmUgYSBzaW5nbGUgYmFja3NsYXNoIGZvciBERlMuIFRlbXBvcmFyaWx5IGluY3JlbWVudCBmdWxscGF0aAotCSAqIHRvIHB1dCBpdCBpbiB0aGUgcHJvcGVyIGZvcm0gYW5kIGRlY3JlbWVudCBiZWZvcmUgZnJlZWluZyBpdC4KLQkgKi8KLQlmdWxscGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGVudHJ5KTsKLQlpZiAoIWZ1bGxwYXRoKSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBjb21wb3NlX21vdW50X29wdGlvbnNfZXJyOwotCX0KLQkrK2Z1bGxwYXRoOwogCXRrbl9lID0gc3RyY2hyKHRrbl9lICsgMSwgJ1xcJyk7CiAJaWYgKHRrbl9lIHx8IChzdHJsZW4oZnVsbHBhdGgpIC0gcmVmLT5wYXRoX2NvbnN1bWVkKSkgewogCQlzdHJuY2F0KG1vdW50ZGF0YSwgJnNlcCwgMSk7CkBAIC0yMjEsOCArMjA5LDYgQEAKIAkJCXN0cmNhdChtb3VudGRhdGEsIHRrbl9lICsgMSk7CiAJCXN0cmNhdChtb3VudGRhdGEsIGZ1bGxwYXRoICsgcmVmLT5wYXRoX2NvbnN1bWVkKTsKIAl9Ci0JLS1mdWxscGF0aDsKLQlrZnJlZShmdWxscGF0aCk7CiAKIAkvKmNGWUkoMSwoIiVzOiBwYXJlbnQgbW91bnRkYXRhOiAlcyIsIF9fZnVuY19fLHNiX21vdW50ZGF0YSkpOyovCiAJLypjRllJKDEsICgiJXM6IHN1Ym1vdW50IG1vdW50ZGF0YTogJXMiLCBfX2Z1bmNfXywgbW91bnRkYXRhICkpOyovCkBAIC0yNDUsMTAgKzIzMSwyMCBAQAogCXN0cnVjdCB2ZnNtb3VudCAqbW50OwogCWNoYXIgKm1vdW50ZGF0YTsKIAljaGFyICpkZXZuYW1lID0gTlVMTDsKKwljaGFyICpmdWxscGF0aDsKIAogCWNpZnNfc2IgPSBDSUZTX1NCKGRlbnRyeS0+ZF9pbm9kZS0+aV9zYik7Ci0JbW91bnRkYXRhID0gY29tcG9zZV9tb3VudF9vcHRpb25zKGNpZnNfc2ItPm1vdW50ZGF0YSwKLQkJCQkJCWRlbnRyeSwgcmVmLCAmZGV2bmFtZSk7CisJLyoKKwkgKiB0aGlzIGZ1bmN0aW9uIGdpdmVzIHVzIGEgcGF0aCB3aXRoIGEgZG91YmxlIGJhY2tzbGFzaCBwcmVmaXguIFdlCisJICogcmVxdWlyZSBhIHNpbmdsZSBiYWNrc2xhc2ggZm9yIERGUy4KKwkgKi8KKwlmdWxscGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZGVudHJ5KTsKKwlpZiAoIWZ1bGxwYXRoKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW1vdW50ZGF0YSA9IGNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zKGNpZnNfc2ItPm1vdW50ZGF0YSwKKwkJCWZ1bGxwYXRoICsgMSwgcmVmLCAmZGV2bmFtZSk7CisJa2ZyZWUoZnVsbHBhdGgpOwogCiAJaWYgKElTX0VSUihtb3VudGRhdGEpKQogCQlyZXR1cm4gKHN0cnVjdCB2ZnNtb3VudCAqKW1vdW50ZGF0YTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19mc19zYi5oIGIvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKaW5kZXggYzRjMzA2Zi4uNDc5Nzc4NyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKKysrIGIvZnMvY2lmcy9jaWZzX2ZzX3NiLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgQ0lGU19NT1VOVF9PVkVSUl9HSUQgICAgMHg4MDAgLyogb3ZlcnJpZGUgZ2lkIHJldHVybmVkIGZyb20gc2VydmVyICAgICovCiAjZGVmaW5lIENJRlNfTU9VTlRfRFlOUEVSTSAgICAgIDB4MTAwMCAvKiBhbGxvdyBpbi1tZW1vcnkgb25seSBtb2RlIHNldHRpbmcgICAqLwogI2RlZmluZSBDSUZTX01PVU5UX05PUE9TSVhCUkwgICAweDIwMDAgLyogbWFuZGF0b3J5IG5vdCBwb3NpeCBieXRlIHJhbmdlIGxvY2sgKi8KKyNkZWZpbmUgQ0lGU19NT1VOVF9OT1NTWU5DICAgICAgMHg0MDAwIC8qIGRvbid0IGRvIHNsb3cgU01CZmx1c2ggb24gZXZlcnkgc3luYyovCiAKIHN0cnVjdCBjaWZzX3NiX2luZm8gewogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb247CS8qIHByaW1hcnkgbW91bnQgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IDEzZWE1MzIuLjM4NDkxZmQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtNjA2LDcgKzYwNiw4IEBACiAJCXJldHVybiByYzsKIAl9CiAJc2ItPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwotCXJldHVybiBzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlzaW1wbGVfc2V0X21udChtbnQsIHNiKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHNzaXplX3QgY2lmc19maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuaCBiL2ZzL2NpZnMvY2lmc2ZzLmgKaW5kZXggMmIxZDI4YS4uNzdlMTkwZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuaAorKysgYi9mcy9jaWZzL2NpZnNmcy5oCkBAIC03OCw4ICs3OCw4IEBACiBleHRlcm4gaW50IGNpZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZGlyZW50cnksIGZpbGxkaXJfdCBmaWxsZGlyKTsKIAogLyogRnVuY3Rpb25zIHJlbGF0ZWQgdG8gZGlyIGVudHJpZXMgKi8KLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2lmc19kZW50cnlfb3BzOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjaWZzX2NpX2RlbnRyeV9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNpZnNfZGVudHJ5X29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2lmc19jaV9kZW50cnlfb3BzOwogCiAvKiBGdW5jdGlvbnMgcmVsYXRlZCB0byBzeW1saW5rcyAqLwogZXh0ZXJuIHZvaWQgKmNpZnNfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGlyZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCBlMDA0ZjZkLi45ZmJmNGRmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0yNTQsNiArMjU0LDcgQEAKIAlhdG9taWNfdCBudW1fc21ic19zZW50OwogCWF0b21pY190IG51bV93cml0ZXM7CiAJYXRvbWljX3QgbnVtX3JlYWRzOworCWF0b21pY190IG51bV9mbHVzaGVzOwogCWF0b21pY190IG51bV9vcGxvY2tfYnJrczsKIAlhdG9taWNfdCBudW1fb3BlbnM7CiAJYXRvbWljX3QgbnVtX2Nsb3NlczsKQEAgLTI5OCw2ICsyOTksNyBAQAogCWJvb2wgdW5peF9leHQ6MTsgIC8qIGlmIGZhbHNlIGRpc2FibGUgTGludXggZXh0ZW5zaW9ucyB0byBDSUZTIHByb3RvY29sCiAJCQkJZm9yIHRoaXMgbW91bnQgZXZlbiBpZiBzZXJ2ZXIgd291bGQgc3VwcG9ydCAqLwogCWJvb2wgbG9jYWxfbGVhc2U6MTsgLyogY2hlY2sgbGVhc2VzIChvbmx5KSBvbiBsb2NhbCBzeXN0ZW0gbm90IHJlbW90ZSAqLworCWJvb2wgYnJva2VuX3Bvc2l4X29wZW47IC8qIGUuZy4gU2FtYmEgc2VydmVyIHZlcnNpb25zIDwgMy4zLjIsIDMuMi45ICovCiAJYm9vbCBuZWVkX3JlY29ubmVjdDoxOyAvKiBjb25uZWN0aW9uIHJlc2V0LCB0aWQgbm93IGludmFsaWQgKi8KIAkvKiBCQiBhZGQgZmllbGQgZm9yIGJhY2sgcG9pbnRlciB0byBzYiBzdHJ1Y3Qocyk/ICovCiB9OwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcGR1LmggYi9mcy9jaWZzL2NpZnNwZHUuaAppbmRleCBiNGUyZTlmMC4uYjM3MDQ4OSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcGR1LmgKKysrIGIvZnMvY2lmcy9jaWZzcGR1LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL2NpZnNwZHUuaAogICoKLSAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA4CisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOQogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgX0NJRlNQRFVfSAogCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlICJzbWJmc2N0bC5oIgogCiAjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICiAjZGVmaW5lIExBTk1BTl9QUk9UIDAKQEAgLTM0LDE1ICszNSwxNSBAQAogI2RlZmluZSBQT1NJWF9QUk9UICAoQ0lGU19QUk9UKzEpCiAjZGVmaW5lIEJBRF9QUk9UIDB4RkZGRgogCi0vKiBTTUIgY29tbWFuZCBjb2RlcyAqLwotLyoKLSAqIFNvbWUgY29tbWFuZHMgaGF2ZSBtaW5pbWFsICh3Y3Q9MCxiY2M9MCksIG9yIHVuaW50ZXJlc3RpbmcsIHJlc3BvbnNlcworLyogU01CIGNvbW1hbmQgY29kZXM6CisgKiBOb3RlIHNvbWUgY29tbWFuZHMgaGF2ZSBtaW5pbWFsICh3Y3Q9MCxiY2M9MCksIG9yIHVuaW50ZXJlc3RpbmcsIHJlc3BvbnNlcwogICogKGllIHdoaWNoIGluY2x1ZGUgbm8gdXNlZnVsIGRhdGEgb3RoZXIgdGhhbiB0aGUgU01CIGVycm9yIGNvZGUgaXRzZWxmKS4KLSAqIEtub3dpbmcgdGhpcyBoZWxwcyBhdm9pZCByZXNwb25zZSBidWZmZXIgYWxsb2NhdGlvbnMgYW5kIGNvcHkgaW4gc29tZSBjYXNlcworICogVGhpcyBjYW4gYWxsb3cgdXMgdG8gYXZvaWQgcmVzcG9uc2UgYnVmZmVyIGFsbG9jYXRpb25zIGFuZCBjb3B5IGluIHNvbWUgY2FzZXMKICAqLwogI2RlZmluZSBTTUJfQ09NX0NSRUFURV9ESVJFQ1RPUlkgICAgICAweDAwIC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9ERUxFVEVfRElSRUNUT1JZICAgICAgMHgwMSAvKiB0cml2aWFsIHJlc3BvbnNlICovCiAjZGVmaW5lIFNNQl9DT01fQ0xPU0UgICAgICAgICAgICAgICAgIDB4MDQgLyogdHJpdiByZXEvcnNwLCB0aW1lc3RhbXAgaWdub3JlZCAqLworI2RlZmluZSBTTUJfQ09NX0ZMVVNIICAgICAgICAgICAgICAgICAweDA1IC8qIHRyaXYgcmVxL3JzcCAqLwogI2RlZmluZSBTTUJfQ09NX0RFTEVURSAgICAgICAgICAgICAgICAweDA2IC8qIHRyaXZpYWwgcmVzcG9uc2UgKi8KICNkZWZpbmUgU01CX0NPTV9SRU5BTUUgICAgICAgICAgICAgICAgMHgwNyAvKiB0cml2aWFsIHJlc3BvbnNlICovCiAjZGVmaW5lIFNNQl9DT01fUVVFUllfSU5GT1JNQVRJT04gICAgIDB4MDggLyogYWthIGdldGF0dHIgKi8KQEAgLTc5MCw2ICs3OTEsMTIgQEAKIAlfX3UxNiBCeXRlQ291bnQ7CS8qIGJjdCA9IDAgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgQ0xPU0VfUlNQOwogCit0eXBlZGVmIHN0cnVjdCBzbWJfY29tX2ZsdXNoX3JlcSB7CisJc3RydWN0IHNtYl9oZHIgaGRyOwkvKiB3Y3QgPSAxICovCisJX191MTYgRmlsZUlEOworCV9fdTE2IEJ5dGVDb3VudDsJLyogMCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBGTFVTSF9SRVE7CisKIHR5cGVkZWYgc3RydWN0IHNtYl9jb21fZmluZGNsb3NlX3JlcSB7CiAJc3RydWN0IHNtYl9oZHIgaGRyOyAvKiB3Y3QgPSAxICovCiAJX191MTYgRmlsZUlEOwpAQCAtMTkyNCwxOSArMTkzMSwxOSBAQAogI2RlZmluZSBERlNfVFlQRV9ST09UIDB4MDAwMQogCiAvKiBSZWZlcnJhbCBFbnRyeSBGbGFncyAqLwotI2RlZmluZSBERlNfTkFNRV9MSVNUX1JFRiAweDAyMDAKKyNkZWZpbmUgREZTX05BTUVfTElTVF9SRUYgMHgwMjAwIC8qIHNldCBmb3IgZG9tYWluIG9yIERDIHJlZmVycmFsIHJlc3BvbnNlcyAqLworI2RlZmluZSBERlNfVEFSR0VUX1NFVF9CT1VOREFSWSAweDA0MDAgLyogb25seSB2YWxpZCB3aXRoIHZlcnNpb24gNCBkZnMgcmVxICovCiAKLXR5cGVkZWYgc3RydWN0IGRmc19yZWZlcnJhbF9sZXZlbF8zIHsKLQlfX2xlMTYgVmVyc2lvbk51bWJlcjsKK3R5cGVkZWYgc3RydWN0IGRmc19yZWZlcnJhbF9sZXZlbF8zIHsgLyogdmVyc2lvbiA0IGlzIHNhbWUsICsgb25lIGZsYWcgYml0ICovCisJX19sZTE2IFZlcnNpb25OdW1iZXI7ICAvKiBtdXN0IGJlIDMgb3IgNCAqLwogCV9fbGUxNiBTaXplOwogCV9fbGUxNiBTZXJ2ZXJUeXBlOyAvKiAweDAwMDEgPSByb290IHRhcmdldHM7IDB4MDAwMCA9IGxpbmsgdGFyZ2V0cyAqLwotCV9fbGUxNiBSZWZlcnJhbEVudHJ5RmxhZ3M7IC8qIDB4MDIwMCBiaXQgc2V0IG9ubHkgZm9yIGRvbWFpbgotCQkJCSAgICAgIG9yIERDIHJlZmVycmFsIHJlc3BvbmNlICovCisJX19sZTE2IFJlZmVycmFsRW50cnlGbGFnczsKIAlfX2xlMzIgVGltZVRvTGl2ZTsKIAlfX2xlMTYgRGZzUGF0aE9mZnNldDsKIAlfX2xlMTYgRGZzQWx0ZXJuYXRlUGF0aE9mZnNldDsKIAlfX2xlMTYgTmV0d29ya0FkZHJlc3NPZmZzZXQ7IC8qIG9mZnNldCBvZiB0aGUgbGluayB0YXJnZXQgKi8KLQlfX2xlMTYgU2VydmljZVNpdGVHdWlkOworCV9fdTggICBTZXJ2aWNlU2l0ZUd1aWRbMTZdOyAgLyogTUJaLCBpZ25vcmVkICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFJFRkVSUkFMMzsKIAogdHlwZWRlZiBzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbl9nZXRfZGZzX3JlZmVyX3JzcCB7CkBAIC0xOTQ2LDQ4ICsxOTUzLDE1IEBACiAJX191OCBQYWQ7CiAJX19sZTE2IFBhdGhDb25zdW1lZDsKIAlfX2xlMTYgTnVtYmVyT2ZSZWZlcnJhbHM7Ci0JX19sZTE2IERGU0ZsYWdzOwotCV9fdTE2IFBhZDI7CisJX19sZTMyIERGU0ZsYWdzOwogCVJFRkVSUkFMMyByZWZlcnJhbHNbMV07CS8qIGFycmF5IG9mIGxldmVsIDMgZGZzX3JlZmVycmFsIHN0cnVjdHVyZXMgKi8KIAkvKiBmb2xsb3dlZCBieSB0aGUgc3RyaW5ncyBwb2ludGVkIHRvIGJ5IHRoZSByZWZlcnJhbCBzdHJ1Y3R1cmVzICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIFRSQU5TQUNUSU9OMl9HRVRfREZTX1JFRkVSX1JTUDsKIAogLyogREZTIEZsYWdzICovCi0jZGVmaW5lIERGU1JFRl9SRUZFUlJBTF9TRVJWRVIgIDB4MDAwMQotI2RlZmluZSBERlNSRUZfU1RPUkFHRV9TRVJWRVIgICAweDAwMDIKLQotLyogSU9DVEwgaW5mb3JtYXRpb24gKi8KLS8qCi0gKiBMaXN0IG9mIGlvY3RsIGZ1bmN0aW9uIGNvZGVzIHRoYXQgbG9vayB0byBiZSBvZiBpbnRlcmVzdCB0byByZW1vdGUgY2xpZW50cwotICogbGlrZSB0aGlzIG9uZS4gIE5lZWQgdG8gZG8gc29tZSBleHBlcmltZW50YXRpb24gdG8gbWFrZSBzdXJlIHRoZXkgYWxsIHdvcmsKLSAqIHJlbW90ZWx5LiAgU29tZSBvZiB0aGUgZm9sbG93aW5nLCBzdWNoIGFzIHRoZSBlbmNyeXB0aW9uL2NvbXByZXNzaW9uIG9uZXMKLSAqIHdvdWxkIGJlIGludm9rZWQgZnJvbSB0b29scyB2aWEgYSBzcGVjaWFsaXplZCBob29rIGludG8gdGhlIFZGUyByYXRoZXIKLSAqIHRoYW4gdmlhIHRoZSBzdGFuZGFyZCB2ZnMgZW50cnkgcG9pbnRzCi0gKi8KLSNkZWZpbmUgRlNDVExfUkVRVUVTVF9PUExPQ0tfTEVWRUxfMSAweDAwMDkwMDAwCi0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzIgMHgwMDA5MDAwNAotI2RlZmluZSBGU0NUTF9SRVFVRVNUX0JBVENIX09QTE9DSyAgIDB4MDAwOTAwMDgKLSNkZWZpbmUgRlNDVExfTE9DS19WT0xVTUUgICAgICAgICAgICAweDAwMDkwMDE4Ci0jZGVmaW5lIEZTQ1RMX1VOTE9DS19WT0xVTUUgICAgICAgICAgMHgwMDA5MDAxQwotI2RlZmluZSBGU0NUTF9HRVRfQ09NUFJFU1NJT04gICAgICAgIDB4MDAwOTAwM0MKLSNkZWZpbmUgRlNDVExfU0VUX0NPTVBSRVNTSU9OICAgICAgICAweDAwMDlDMDQwCi0jZGVmaW5lIEZTQ1RMX1JFUVVFU1RfRklMVEVSX09QTE9DSyAgMHgwMDA5MDA4QwotI2RlZmluZSBGU0NUTF9GSUxFU1lTX0dFVF9TVEFUSVNUSUNTIDB4MDAwOTAwOTAKLSNkZWZpbmUgRlNDVExfU0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE0Ci0jZGVmaW5lIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5UICAgICAgMHgwMDA5MDBBOAotI2RlZmluZSBGU0NUTF9ERUxFVEVfUkVQQVJTRV9QT0lOVCAgIDB4MDAwOTAwQUMKLSNkZWZpbmUgRlNDVExfU0VUX1NQQVJTRSAgICAgICAgICAgICAweDAwMDkwMEM0Ci0jZGVmaW5lIEZTQ1RMX1NFVF9aRVJPX0RBVEEgICAgICAgICAgMHgwMDA5MDBDOAotI2RlZmluZSBGU0NUTF9TRVRfRU5DUllQVElPTiAgICAgICAgIDB4MDAwOTAwRDcKLSNkZWZpbmUgRlNDVExfRU5DUllQVElPTl9GU0NUTF9JTyAgICAweDAwMDkwMERCCi0jZGVmaW5lIEZTQ1RMX1dSSVRFX1JBV19FTkNSWVBURUQgICAgMHgwMDA5MDBERgotI2RlZmluZSBGU0NUTF9SRUFEX1JBV19FTkNSWVBURUQgICAgIDB4MDAwOTAwRTMKLSNkZWZpbmUgRlNDVExfU0lTX0NPUFlGSUxFICAgICAgICAgICAweDAwMDkwMTAwCi0jZGVmaW5lIEZTQ1RMX1NJU19MSU5LX0ZJTEVTICAgICAgICAgMHgwMDA5QzEwNAotCi0jZGVmaW5lIElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UICAgMHhBMDAwMDAwMwotI2RlZmluZSBJT19SRVBBUlNFX1RBR19IU00gICAgICAgICAgIDB4QzAwMDAwMDQKLSNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfU0lTICAgICAgICAgICAweDgwMDAwMDA3CisjZGVmaW5lIERGU1JFRl9SRUZFUlJBTF9TRVJWRVIgIDB4MDAwMDAwMDEgLyogYWxsIHRhcmdldHMgYXJlIERGUyByb290cyAqLworI2RlZmluZSBERlNSRUZfU1RPUkFHRV9TRVJWRVIgICAweDAwMDAwMDAyIC8qIG5vIGZ1cnRoZXIgcmVmIHJlcXVlc3RzIG5lZWRlZCAqLworI2RlZmluZSBERlNSRUZfVEFSR0VUX0ZBSUxCQUNLICAweDAwMDAwMDA0IC8qIG9ubHkgZm9yIERGUyByZWZlcnJhbCB2ZXJzaW9uIDQgKi8KIAogLyoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI1MDgsOCArMjQ4Miw2IEBACiAJNikgVXNlIG5hbm9zZWNvbmQgdGltZXN0YW1wcyB0aHJvdWdob3V0IGFsbCB0aW1lIGZpZWxkcyBpZgogCSAgIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGZsYWcgaXMgc2V0CiAJNykgc2VuZGZpbGUgLSBoYW5kbGUgYmFzZWQgY29weQotCTgpIERpcmVjdCBpL28KLQk5KSBNaXNjIGZjbnRscz8KIAogCXdoYXQgYWJvdXQgZml4aW5nIDY0IGJpdCBhbGlnbm1lbnQKIApAQCAtMjYyOCw3ICsyNjAwLDUgQEAKIAlfX2xlNjQJbW9kZTsgLyogbGlzdCBvZiBhY3R1YWwgYXR0cmlidXRlIGJpdHMgb24gdGhpcyBpbm9kZSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBGSUxFX0NIQVRUUl9JTkZPOyAgLyogZXh0IGF0dHJpYnV0ZXMKIAkJCQkJCShjaGF0dHIsIGNoZmxhZ3MpIGxldmVsIDB4MjA2ICovCi0KLSNlbmRpZgotCisjZW5kaWYgCQkJCS8qIFBPU0lYICovCiAjZW5kaWYJCQkJLyogX0NJRlNQRFVfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzcHJvdG8uaCBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKaW5kZXggMDgzZGZjNS4uNDE2NzcxNiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcHJvdG8uaAorKysgYi9mcy9jaWZzL2NpZnNwcm90by5oCkBAIC00NCw2ICs0NCw5IEBACiBleHRlcm4gY2hhciAqYnVpbGRfcGF0aF9mcm9tX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIGNoYXIgKmNpZnNfYnVpbGRfcGF0aF90b19yb290KHN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IpOwogZXh0ZXJuIGNoYXIgKmJ1aWxkX3dpbGRjYXJkX3BhdGhfZnJvbV9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGlyZW50cnkpOworZXh0ZXJuIGNoYXIgKmNpZnNfY29tcG9zZV9tb3VudF9vcHRpb25zKGNvbnN0IGNoYXIgKnNiX21vdW50ZGF0YSwKKwkJY29uc3QgY2hhciAqZnVsbHBhdGgsIGNvbnN0IHN0cnVjdCBkZnNfaW5mbzNfcGFyYW0gKnJlZiwKKwkJY2hhciAqKmRldm5hbWUpOwogLyogZXh0ZXJuIHZvaWQgcmVuZXdfcGFyZW50YWxfdGltZXN0YW1wcyhzdHJ1Y3QgZGVudHJ5ICpkaXJlbnRyeSk7Ki8KIGV4dGVybiBpbnQgU2VuZFJlY2VpdmUoY29uc3QgdW5zaWduZWQgaW50IC8qIHhpZCAqLyAsIHN0cnVjdCBjaWZzU2VzSW5mbyAqLAogCQkJc3RydWN0IHNtYl9oZHIgKiAvKiBpbnB1dCAqLyAsCkBAIC05Miw2ICs5NSw5IEBACiBleHRlcm4gX19sZTY0IGNudnJ0RG9zQ2lmc1RtKF9fdTE2IGRhdGUsIF9fdTE2IHRpbWUpOwogZXh0ZXJuIHN0cnVjdCB0aW1lc3BlYyBjbnZydERvc1VuaXhUbShfX3UxNiBkYXRlLCBfX3UxNiB0aW1lKTsKIAorZXh0ZXJuIGludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCisJCQkgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbW9kZSwgaW50IG9mbGFncywKKwkJCSAgIGludCAqcG9wbG9jaywgX191MTYgKnBuZXRmaWQsIGludCB4aWQpOwogZXh0ZXJuIHZvaWQgcG9zaXhfZmlsbF9pbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSwKIAkJCQlGSUxFX1VOSVhfQkFTSUNfSU5GTyAqcERhdGEsIGludCBpc05ld0lub2RlKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmNpZnNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIF9fdTY0ICppbnVtKTsKQEAgLTI4MSw2ICsyODcsOSBAQAogZXh0ZXJuIGludCBDSUZTU01CQ2xvc2UoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkJCWNvbnN0IGludCBzbWJfZmlsZV9pZCk7CiAKK2V4dGVybiBpbnQgQ0lGU1NNQkZsdXNoKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCisJCQljb25zdCBpbnQgc21iX2ZpbGVfaWQpOworCiBleHRlcm4gaW50IENJRlNTTUJSZWFkKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sCiAJCQljb25zdCBpbnQgbmV0ZmlkLCB1bnNpZ25lZCBpbnQgY291bnQsCiAJCQljb25zdCBfX3U2NCBsc2VlaywgdW5zaWduZWQgaW50ICpuYnl0ZXMsIGNoYXIgKipidWYsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDkzOWUyZjcuLmJjMDljOTkgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC0xOTM0LDYgKzE5MzQsMjcgQEAKIH0KIAogaW50CitDSUZTU01CRmx1c2goY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgaW50IHNtYl9maWxlX2lkKQoreworCWludCByYyA9IDA7CisJRkxVU0hfUkVRICpwU01CID0gTlVMTDsKKwljRllJKDEsICgiSW4gQ0lGU1NNQkZsdXNoIikpOworCisJcmMgPSBzbWFsbF9zbWJfaW5pdChTTUJfQ09NX0ZMVVNILCAxLCB0Y29uLCAodm9pZCAqKikgJnBTTUIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcFNNQi0+RmlsZUlEID0gKF9fdTE2KSBzbWJfZmlsZV9pZDsKKwlwU01CLT5CeXRlQ291bnQgPSAwOworCXJjID0gU2VuZFJlY2VpdmVOb1JzcCh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsIDApOworCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fZmx1c2hlcyk7CisJaWYgKHJjKQorCQljRVJST1IoMSwgKCJTZW5kIGVycm9yIGluIEZsdXNoID0gJWQiLCByYykpOworCisJcmV0dXJuIHJjOworfQorCitpbnQKIENJRlNTTUJSZW5hbWUoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKIAkgICAgICBjb25zdCBjaGFyICpmcm9tTmFtZSwgY29uc3QgY2hhciAqdG9OYW1lLAogCSAgICAgIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSwgaW50IHJlbWFwKQpAQCAtMjM1Niw4ICsyMzc3LDEwIEBACiAJCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7CiAJCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KIAkJbmFtZV9sZW4gKj0gMjsKLQkJcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW5dID0gMDsJLyogcGFkICovCi0JCXBTTUItPk9sZEZpbGVOYW1lW25hbWVfbGVuICsgMV0gPSAweDA0OworCisJCS8qIHByb3RvY29sIHNwZWNpZmllcyBBU0NJSSBidWZmZXIgZm9ybWF0ICgweDA0KSBmb3IgdW5pY29kZSAqLworCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbl0gPSAweDA0OworCQlwU01CLT5PbGRGaWxlTmFtZVtuYW1lX2xlbiArIDFdID0gMHgwMDsgLyogcGFkICovCiAJCW5hbWVfbGVuMiA9CiAJCSAgICBjaWZzQ29udmVydFRvVUNTKChfX2xlMTYgKikmcFNNQi0+T2xkRmlsZU5hbWVbbmFtZV9sZW4gKyAyXSwKIAkJCQkgICAgIHRvTmFtZSwgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCBkYTBmNGZmLi4wZGUzYjU2MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTk1LDYgKzk1LDcgQEAKIAlib29sIGxvY2FsX2xlYXNlOjE7IC8qIGNoZWNrIGxlYXNlcyBvbmx5IG9uIGxvY2FsIHN5c3RlbSwgbm90IHJlbW90ZSAqLwogCWJvb2wgbm9ibG9ja3NuZDoxOwogCWJvb2wgbm9hdXRvdHVuZToxOworCWJvb2wgbm9zdHJpY3RzeW5jOjE7IC8qIGRvIG5vdCBmb3JjZSBleHBlbnNpdmUgU01CZmx1c2ggb24gZXZlcnkgc3luYyAqLwogCXVuc2lnbmVkIGludCByc2l6ZTsKIAl1bnNpZ25lZCBpbnQgd3NpemU7CiAJdW5zaWduZWQgaW50IHNvY2tvcHQ7CkBAIC0xMjc0LDYgKzEyNzUsMTAgQEAKIAkJCXZvbC0+aW50ciA9IDA7CiAJCX0gZWxzZSBpZiAoc3RybmljbXAoZGF0YSwgImludHIiLCA0KSA9PSAwKSB7CiAJCQl2b2wtPmludHIgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub3N0cmljdHN5bmMiLCAxMikgPT0gMCkgeworCQkJdm9sLT5ub3N0cmljdHN5bmMgPSAxOworCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJzdHJpY3RzeW5jIiwgMTApID09IDApIHsKKwkJCXZvbC0+bm9zdHJpY3RzeW5jID0gMDsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic2VydmVyaW5vIiwgNykgPT0gMCkgewogCQkJdm9sLT5zZXJ2ZXJfaW5vID0gMTsKIAkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAibm9zZXJ2ZXJpbm8iLCA5KSA9PSAwKSB7CkBAIC0yMTYwLDYgKzIxNjUsOCBAQAogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX1VOWF9FTVVMOwogCWlmIChwdm9sdW1lX2luZm8tPm5vYnJsKQogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSBDSUZTX01PVU5UX05PX0JSTDsKKwlpZiAocHZvbHVtZV9pbmZvLT5ub3N0cmljdHN5bmMpCisJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9TU1lOQzsKIAlpZiAocHZvbHVtZV9pbmZvLT5tYW5kX2xvY2spCiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfTk9QT1NJWEJSTDsKIAlpZiAocHZvbHVtZV9pbmZvLT5jaWZzX2FjbCkKQEAgLTM2NjcsNyArMzY3NCw3IEBACiAJCQkgICAgQkNDKHNtYl9idWZmZXJfcmVzcG9uc2UpKSB7CiAJCQkJa2ZyZWUodGNvbi0+bmF0aXZlRmlsZVN5c3RlbSk7CiAJCQkJdGNvbi0+bmF0aXZlRmlsZVN5c3RlbSA9Ci0JCQkJICAgIGt6YWxsb2MobGVuZ3RoICsgMiwgR0ZQX0tFUk5FTCk7CisJCQkJICAgIGt6YWxsb2MoMioobGVuZ3RoICsgMSksIEdGUF9LRVJORUwpOwogCQkJCWlmICh0Y29uLT5uYXRpdmVGaWxlU3lzdGVtKQogCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoCiAJCQkJCQl0Y29uLT5uYXRpdmVGaWxlU3lzdGVtLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9kaXIuYyBiL2ZzL2NpZnMvZGlyLmMKaW5kZXggODlmYjcyOC4uMmYzNWNjY2YgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZGlyLmMKKysrIGIvZnMvY2lmcy9kaXIuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJcmV0dXJuIGZ1bGxfcGF0aDsKIH0KIAotc3RhdGljIGludCBjaWZzX3Bvc2l4X29wZW4oY2hhciAqZnVsbF9wYXRoLCBzdHJ1Y3QgaW5vZGUgKipwaW5vZGUsCitpbnQgY2lmc19wb3NpeF9vcGVuKGNoYXIgKmZ1bGxfcGF0aCwgc3RydWN0IGlub2RlICoqcGlub2RlLAogCQkgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vZGUsIGludCBvZmxhZ3MsCiAJCSAgICBpbnQgKnBvcGxvY2ssIF9fdTE2ICpwbmV0ZmlkLCBpbnQgeGlkKQogewpAQCAtMTg3LDcgKzE4Nyw5IEBACiAJaWYgKCFwaW5vZGUpCiAJCWdvdG8gcG9zaXhfb3Blbl9yZXQ7IC8qIGNhbGxlciBkb2VzIG5vdCBuZWVkIGluZm8gKi8KIAotCSpwaW5vZGUgPSBjaWZzX25ld19pbm9kZShzYiwgJnByZXNwX2RhdGEtPlVuaXF1ZUlkKTsKKwlpZiAoKnBpbm9kZSA9PSBOVUxMKQorCQkqcGlub2RlID0gY2lmc19uZXdfaW5vZGUoc2IsICZwcmVzcF9kYXRhLT5VbmlxdWVJZCk7CisJLyogZWxzZSBhbiBpbm9kZSB3YXMgcGFzc2VkIGluLiBVcGRhdGUgaXRzIGluZm8sIGRvbid0IGNyZWF0ZSBvbmUgKi8KIAogCS8qIFdlIGRvIG5vdCBuZWVkIHRvIGNsb3NlIHRoZSBmaWxlIGlmIG5ld19pbm9kZSBmYWlscyBzaW5jZQogCSAgIHRoZSBjYWxsZXIgd2lsbCByZXRyeSBxcGF0aGluZm8gYXMgbG9uZyBhcyBpbm9kZSBpcyBudWxsICovCkBAIC02OTksNyArNzAxLDcgQEAKIAlyZXR1cm4gcmM7CiB9ICAgICAqLwogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2lmc19kZW50cnlfb3BzID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNpZnNfZGVudHJ5X29wcyA9IHsKIAkuZF9yZXZhbGlkYXRlID0gY2lmc19kX3JldmFsaWRhdGUsCiAvKiBkX2RlbGV0ZTogICAgICAgY2lmc19kX2RlbGV0ZSwgICAgICAqLyAvKiBub3QgbmVlZGVkIGV4Y2VwdCBmb3IgZGVidWdnaW5nICovCiB9OwpAQCAtNzM3LDcgKzczOSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjaWZzX2NpX2RlbnRyeV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2lmc19jaV9kZW50cnlfb3BzID0gewogCS5kX3JldmFsaWRhdGUgPSBjaWZzX2RfcmV2YWxpZGF0ZSwKIAkuZF9oYXNoID0gY2lmc19jaV9oYXNoLAogCS5kX2NvbXBhcmUgPSBjaWZzX2NpX2NvbXBhcmUsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IDEyYmI2NTYuLjgxNzQ3YWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC03OCw4ICs3OCwzNiBAQAogCXJldHVybiAoUkVBRF9DT05UUk9MIHwgRklMRV9XUklURV9BVFRSSUJVVEVTIHwgRklMRV9SRUFEX0FUVFJJQlVURVMgfAogCQlGSUxFX1dSSVRFX0VBIHwgRklMRV9BUFBFTkRfREFUQSB8IEZJTEVfV1JJVEVfREFUQSB8CiAJCUZJTEVfUkVBRF9EQVRBKTsKK30KIAorc3RhdGljIGlubGluZSBmbW9kZV90IGNpZnNfcG9zaXhfY29udmVydF9mbGFncyh1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJZm1vZGVfdCBwb3NpeF9mbGFncyA9IDA7CiAKKwlpZiAoKGZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1JET05MWSkKKwkJcG9zaXhfZmxhZ3MgPSBGTU9ERV9SRUFEOworCWVsc2UgaWYgKChmbGFncyAmIE9fQUNDTU9ERSkgPT0gT19XUk9OTFkpCisJCXBvc2l4X2ZsYWdzID0gRk1PREVfV1JJVEU7CisJZWxzZSBpZiAoKGZsYWdzICYgT19BQ0NNT0RFKSA9PSBPX1JEV1IpIHsKKwkJLyogR0VORVJJQ19BTEwgaXMgdG9vIG11Y2ggcGVybWlzc2lvbiB0byByZXF1ZXN0CisJCSAgIGNhbiBjYXVzZSB1bm5lY2Vzc2FyeSBhY2Nlc3MgZGVuaWVkIG9uIGNyZWF0ZSAqLworCQkvKiByZXR1cm4gR0VORVJJQ19BTEw7ICovCisJCXBvc2l4X2ZsYWdzID0gRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFOworCX0KKwkvKiBjYW4gbm90IG1hcCBPX0NSRUFUIG9yIE9fRVhDTCBvciBPX1RSVU5DIGZsYWdzIHdoZW4KKwkgICByZW9wZW5pbmcgYSBmaWxlLiAgVGhleSBoYWQgdGhlaXIgZWZmZWN0IG9uIHRoZSBvcmlnaW5hbCBvcGVuICovCisJaWYgKGZsYWdzICYgT19BUFBFTkQpCisJCXBvc2l4X2ZsYWdzIHw9IChmbW9kZV90KU9fQVBQRU5EOworCWlmIChmbGFncyAmIE9fU1lOQykKKwkJcG9zaXhfZmxhZ3MgfD0gKGZtb2RlX3QpT19TWU5DOworCWlmIChmbGFncyAmIE9fRElSRUNUT1JZKQorCQlwb3NpeF9mbGFncyB8PSAoZm1vZGVfdClPX0RJUkVDVE9SWTsKKwlpZiAoZmxhZ3MgJiBPX05PRk9MTE9XKQorCQlwb3NpeF9mbGFncyB8PSAoZm1vZGVfdClPX05PRk9MTE9XOworCWlmIChmbGFncyAmIE9fRElSRUNUKQorCQlwb3NpeF9mbGFncyB8PSAoZm1vZGVfdClPX0RJUkVDVDsKKworCXJldHVybiBwb3NpeF9mbGFnczsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY2lmc19nZXRfZGlzcG9zaXRpb24odW5zaWduZWQgaW50IGZsYWdzKQpAQCAtOTcsNiArMTI1LDgwIEBACiB9CiAKIC8qIGFsbCBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGluIGNhbGxlciAqLworc3RhdGljIGlubGluZSBpbnQgY2lmc19wb3NpeF9vcGVuX2lub2RlX2hlbHBlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBjaWZzSW5vZGVJbmZvICpwQ2lmc0lub2RlLAorCQkJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGaWxlLCBpbnQgb3Bsb2NrLCB1MTYgbmV0ZmlkKQoreworCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKKy8qCXN0cnVjdCB0aW1lc3BlYyB0ZW1wOyAqLyAgIC8qIEJCIFJFTU9WRU1FIEJCICovCisKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2lmc0ZpbGVJbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlwQ2lmc0ZpbGUgPSBjaWZzX2luaXRfcHJpdmF0ZShmaWxlLT5wcml2YXRlX2RhdGEsIGlub2RlLCBmaWxlLCBuZXRmaWQpOworCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCWxpc3RfYWRkKCZwQ2lmc0ZpbGUtPnRsaXN0LCAmY2lmc19zYi0+dGNvbi0+b3BlbkZpbGVMaXN0KTsKKworCXBDaWZzSW5vZGUgPSBDSUZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJaWYgKHBDaWZzSW5vZGUgPT0gTlVMTCkgeworCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiB3YW50IGhhbmRsZXMgd2UgY2FuIHVzZSB0byByZWFkIHdpdGggZmlyc3QKKwkgICBpbiB0aGUgbGlzdCBzbyB3ZSBkbyBub3QgaGF2ZSB0byB3YWxrIHRoZQorCSAgIGxpc3QgdG8gc2VhcmNoIGZvciBvbmUgaW4gd3JpdGVfYmVnaW4gKi8KKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpID09IE9fV1JPTkxZKSB7CisJCWxpc3RfYWRkX3RhaWwoJnBDaWZzRmlsZS0+Zmxpc3QsCisJCQkgICAgICAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKKwl9IGVsc2UgeworCQlsaXN0X2FkZCgmcENpZnNGaWxlLT5mbGlzdCwKKwkJCSAmcENpZnNJbm9kZS0+b3BlbkZpbGVMaXN0KTsKKwl9CisKKwlpZiAocENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkKSB7CisJCS8qIHdlIGhhdmUgdGhlIGlub2RlIG9wZW4gc29tZXdoZXJlIGVsc2UKKwkJICAgbm8gbmVlZCB0byBkaXNjYXJkIGNhY2hlIGRhdGEgKi8KKwkJZ290byBwc3hfY2xpZW50X2Nhbl9jYWNoZTsKKwl9CisKKwkvKiBCQiBGSVhNRSBuZWVkIHRvIGZpeCB0aGlzIGNoZWNrIHRvIG1vdmUgaXQgZWFybGllciBpbnRvIHBvc2l4X29wZW4KKwkgICBCQiAgZklYIGZvbGxvd2luZyBzZWN0aW9uIEJCIEZJWE1FICovCisKKwkvKiBpZiBub3Qgb3Bsb2NrZWQsIGludmFsaWRhdGUgaW5vZGUgcGFnZXMgaWYgbXRpbWUgb3IgZmlsZQorCSAgIHNpemUgY2hhbmdlZCAqLworLyoJdGVtcCA9IGNpZnNfTlR0aW1lVG9Vbml4KGxlNjRfdG9fY3B1KGJ1Zi0+TGFzdFdyaXRlVGltZSkpOworCWlmICh0aW1lc3BlY19lcXVhbCgmZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdGltZSwgJnRlbXApICYmCisJCQkgICAoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplID09CisJCQkgICAgKGxvZmZfdClsZTY0X3RvX2NwdShidWYtPkVuZE9mRmlsZSkpKSB7CisJCWNGWUkoMSwgKCJpbm9kZSB1bmNoYW5nZWQgb24gc2VydmVyIikpOworCX0gZWxzZSB7CisJCWlmIChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmcpIHsKKwkJCXJjID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmcpOworCQkJaWYgKHJjICE9IDApCisJCQkJQ0lGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT53cml0ZV9iZWhpbmRfcmMgPSByYzsKKwkJfQorCQljRllJKDEsICgiaW52YWxpZGF0aW5nIHJlbW90ZSBpbm9kZSBzaW5jZSBvcGVuIGRldGVjdGVkIGl0ICIKKwkJCSAiY2hhbmdlZCIpKTsKKwkJaW52YWxpZGF0ZV9yZW1vdGVfaW5vZGUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJfSAqLworCitwc3hfY2xpZW50X2Nhbl9jYWNoZToKKwlpZiAoKG9wbG9jayAmIDB4RikgPT0gT1BMT0NLX0VYQ0xVU0lWRSkgeworCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9IHRydWU7CisJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IHRydWU7CisJCWNGWUkoMSwgKCJFeGNsdXNpdmUgT3Bsb2NrIGdyYW50ZWQgb24gaW5vZGUgJXAiLAorCQkJIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKTsKKwl9IGVsc2UgaWYgKChvcGxvY2sgJiAweEYpID09IE9QTE9DS19SRUFEKQorCQlwQ2lmc0lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPSB0cnVlOworCisJLyogd2lsbCBoYXZlIHRvIGNoYW5nZSB0aGUgdW5sb2NrIGlmIHdlIHJlZW5hYmxlIHRoZQorCSAgIGZpbGVtYXBfZmRhdGF3cml0ZSAod2hpY2ggZG9lcyBub3Qgc2VlbSBuZWNlc3NhcnkgKi8KKwl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCXJldHVybiAwOworfQorCisvKiBhbGwgYXJndW1lbnRzIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjaGVja2VkIGZvciB2YWxpZGl0eSBpbiBjYWxsZXIgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNpZnNfb3Blbl9pbm9kZV9oZWxwZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGUsIHN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZSwKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbiwgaW50ICpvcGxvY2ssIEZJTEVfQUxMX0lORk8gKmJ1ZiwKQEAgLTE2Nyw3ICsyNjksNyBAQAogCWludCByYyA9IC1FQUNDRVM7CiAJaW50IHhpZCwgb3Bsb2NrOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7Ci0Jc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CisJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGU7CiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGU7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwpAQCAtMTgwLDcgKzI4Miw3IEBACiAJeGlkID0gR2V0WGlkKCk7CiAKIAljaWZzX3NiID0gQ0lGU19TQihpbm9kZS0+aV9zYik7Ci0JcFRjb24gPSBjaWZzX3NiLT50Y29uOworCXRjb24gPSBjaWZzX3NiLT50Y29uOwogCiAJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0NSRUFUKSB7CiAJCS8qIHNlYXJjaCBpbm9kZSBmb3IgdGhpcyBmaWxlIGFuZCBmaWxsIGluIGZpbGUtPnByaXZhdGVfZGF0YSAqLwpAQCAtMjIwLDYgKzMyMiw0NSBAQAogCiAJY0ZZSSgxLCAoImlub2RlID0gMHglcCBmaWxlIGZsYWdzIGFyZSAweCV4IGZvciAlcyIsCiAJCSBpbm9kZSwgZmlsZS0+Zl9mbGFncywgZnVsbF9wYXRoKSk7CisKKwlpZiAob3Bsb2NrRW5hYmxlZCkKKwkJb3Bsb2NrID0gUkVRX09QTE9DSzsKKwllbHNlCisJCW9wbG9jayA9IDA7CisKKwlpZiAoIXRjb24tPmJyb2tlbl9wb3NpeF9vcGVuICYmIHRjb24tPnVuaXhfZXh0ICYmCisJICAgICh0Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSAmJgorCSAgICAoQ0lGU19VTklYX1BPU0lYX1BBVEhfT1BTX0NBUCAmCisJCQlsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgeworCQlpbnQgb2ZsYWdzID0gKGludCkgY2lmc19wb3NpeF9jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOworCQkvKiBjYW4gbm90IHJlZnJlc2ggaW5vZGUgaW5mbyBzaW5jZSBzaXplIGNvdWxkIGJlIHN0YWxlICovCisJCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgJmlub2RlLCBpbm9kZS0+aV9zYiwKKwkJCQkgICAgIGNpZnNfc2ItPm1udF9maWxlX21vZGUgLyogaWdub3JlZCAqLywKKwkJCQkgICAgIG9mbGFncywgJm9wbG9jaywgJm5ldGZpZCwgeGlkKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCWNGWUkoMSwgKCJwb3NpeCBvcGVuIHN1Y2NlZWRlZCIpKTsKKwkJCS8qIG5vIG5lZWQgZm9yIHNwZWNpYWwgY2FzZSBoYW5kbGluZyBvZiBzZXR0aW5nIG1vZGUKKwkJCSAgIG9uIHJlYWQgb25seSBmaWxlcyBuZWVkZWQgaGVyZSAqLworCisJCQljaWZzX3Bvc2l4X29wZW5faW5vZGVfaGVscGVyKGlub2RlLCBmaWxlLCBwQ2lmc0lub2RlLAorCQkJCQkJICAgICBwQ2lmc0ZpbGUsIG9wbG9jaywgbmV0ZmlkKTsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKChyYyA9PSAtRUlOVkFMKSB8fCAocmMgPT0gLUVPUE5PVFNVUFApKSB7CisJCQlpZiAodGNvbi0+c2VzLT5zZXJ2ZXJOT1MpCisJCQkJY0VSUk9SKDEsICgic2VydmVyICVzIG9mIHR5cGUgJXMgcmV0dXJuZWQiCisJCQkJCSAgICIgdW5leHBlY3RlZCBlcnJvciBvbiBTTUIgcG9zaXggb3BlbiIKKwkJCQkJICAgIiwgZGlzYWJsaW5nIHBvc2l4IG9wZW4gc3VwcG9ydC4iCisJCQkJCSAgICIgQ2hlY2sgaWYgc2VydmVyIHVwZGF0ZSBhdmFpbGFibGUuIiwKKwkJCQkJICAgdGNvbi0+c2VzLT5zZXJ2ZXJOYW1lLAorCQkJCQkgICB0Y29uLT5zZXMtPnNlcnZlck5PUykpOworCQkJdGNvbi0+YnJva2VuX3Bvc2l4X29wZW4gPSB0cnVlOworCQl9IGVsc2UgaWYgKChyYyAhPSAtRUlPKSAmJiAocmMgIT0gLUVSRU1PVEUpICYmCisJCQkgKHJjICE9IC1FT1BOT1RTVVBQKSkgLyogcGF0aCBub3QgZm91bmQgb3IgbmV0IGVyciAqLworCQkJZ290byBvdXQ7CisJCS8qIGVsc2UgZmFsbHRocm91Z2ggdG8gcmV0cnkgb3BlbiB0aGUgb2xkIHdheSBvbiBuZXR3b3JrIGkvbworCQkgICBvciBERlMgZXJyb3JzICovCisJfQorCiAJZGVzaXJlZEFjY2VzcyA9IGNpZnNfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjQ4LDExICszODksNiBAQAogCiAJZGlzcG9zaXRpb24gPSBjaWZzX2dldF9kaXNwb3NpdGlvbihmaWxlLT5mX2ZsYWdzKTsKIAotCWlmIChvcGxvY2tFbmFibGVkKQotCQlvcGxvY2sgPSBSRVFfT1BMT0NLOwotCWVsc2UKLQkJb3Bsb2NrID0gMDsKLQogCS8qIEJCIHBhc3MgT19TWU5DIGZsYWcgdGhyb3VnaCBvbiBmaWxlIGF0dHJpYnV0ZXMgLi4gQkIgKi8KIAogCS8qIEFsc28gcmVmcmVzaCBpbm9kZSBieSBwYXNzaW5nIGluIGZpbGVfaW5mbyBidWYgcmV0dXJuZWQgYnkgU01CT3BlbgpAQCAtMjY5LDcgKzQwNSw3IEBACiAJfQogCiAJaWYgKGNpZnNfc2ItPnRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX05UX1NNQlMpCi0JCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBkaXNwb3NpdGlvbiwKKwkJcmMgPSBDSUZTU01CT3Blbih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sCiAJCQkgZGVzaXJlZEFjY2VzcywgQ1JFQVRFX05PVF9ESVIsICZuZXRmaWQsICZvcGxvY2ssIGJ1ZiwKIAkJCSBjaWZzX3NiLT5sb2NhbF9ubHMsIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzCiAJCQkJICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtMjc4LDcgKzQxNCw3IEBACiAKIAlpZiAocmMgPT0gLUVJTykgewogCQkvKiBPbGQgc2VydmVyLCB0cnkgbGVnYWN5IHN0eWxlIE9wZW5YICovCi0JCXJjID0gU01CTGVnYWN5T3Blbih4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLAorCQlyYyA9IFNNQkxlZ2FjeU9wZW4oeGlkLCB0Y29uLCBmdWxsX3BhdGgsIGRpc3Bvc2l0aW9uLAogCQkJZGVzaXJlZEFjY2VzcywgQ1JFQVRFX05PVF9ESVIsICZuZXRmaWQsICZvcGxvY2ssIGJ1ZiwKIAkJCWNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MKIAkJCQkmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKQEAgLTI5NSwxMiArNDMxLDEyIEBACiAJfQogCXBDaWZzRmlsZSA9IGNpZnNfaW5pdF9wcml2YXRlKGZpbGUtPnByaXZhdGVfZGF0YSwgaW5vZGUsIGZpbGUsIG5ldGZpZCk7CiAJd3JpdGVfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7Ci0JbGlzdF9hZGQoJnBDaWZzRmlsZS0+dGxpc3QsICZwVGNvbi0+b3BlbkZpbGVMaXN0KTsKKwlsaXN0X2FkZCgmcENpZnNGaWxlLT50bGlzdCwgJnRjb24tPm9wZW5GaWxlTGlzdCk7CiAKIAlwQ2lmc0lub2RlID0gQ0lGU19JKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCWlmIChwQ2lmc0lub2RlKSB7CiAJCXJjID0gY2lmc19vcGVuX2lub2RlX2hlbHBlcihpbm9kZSwgZmlsZSwgcENpZnNJbm9kZSwKLQkJCQkJICAgIHBDaWZzRmlsZSwgcFRjb24sCisJCQkJCSAgICBwQ2lmc0ZpbGUsIHRjb24sCiAJCQkJCSAgICAmb3Bsb2NrLCBidWYsIGZ1bGxfcGF0aCwgeGlkKTsKIAl9IGVsc2UgewogCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwpAQCAtMzA5LDcgKzQ0NSw3IEBACiAJaWYgKG9wbG9jayAmIENJRlNfQ1JFQVRFX0FDVElPTikgewogCQkvKiB0aW1lIHRvIHNldCBtb2RlIHdoaWNoIHdlIGNhbiBub3Qgc2V0IGVhcmxpZXIgZHVlIHRvCiAJCSAgIHByb2JsZW1zIGNyZWF0aW5nIG5ldyByZWFkLW9ubHkgZmlsZXMgKi8KLQkJaWYgKHBUY29uLT51bml4X2V4dCkgeworCQlpZiAodGNvbi0+dW5peF9leHQpIHsKIAkJCXN0cnVjdCBjaWZzX3VuaXhfc2V0X2luZm9fYXJncyBhcmdzID0gewogCQkJCS5tb2RlCT0gaW5vZGUtPmlfbW9kZSwKIAkJCQkudWlkCT0gTk9fQ0hBTkdFXzY0LApAQCAtMzE5LDcgKzQ1NSw3IEBACiAJCQkJLm10aW1lCT0gTk9fQ0hBTkdFXzY0LAogCQkJCS5kZXZpY2UJPSAwLAogCQkJfTsKLQkJCUNJRlNTTUJVbml4U2V0SW5mbyh4aWQsIHBUY29uLCBmdWxsX3BhdGgsICZhcmdzLAorCQkJQ0lGU1NNQlVuaXhTZXRJbmZvKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCAmYXJncywKIAkJCQkJICAgIGNpZnNfc2ItPmxvY2FsX25scywKIAkJCQkJICAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKQEAgLTM0OSw3ICs0ODUsNyBAQAogCWludCByYyA9IC1FQUNDRVM7CiAJaW50IHhpZCwgb3Bsb2NrOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7Ci0Jc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CisJc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbjsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwQ2lmc0ZpbGU7CiAJc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGU7CiAJc3RydWN0IGlub2RlICppbm9kZTsKQEAgLTM4Nyw3ICs1MjMsNyBAQAogCX0KIAogCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKLQlwVGNvbiA9IGNpZnNfc2ItPnRjb247CisJdGNvbiA9IGNpZnNfc2ItPnRjb247CiAKIC8qIGNhbiBub3QgZ3JhYiByZW5hbWUgc2VtIGhlcmUgYmVjYXVzZSB2YXJpb3VzIG9wcywgaW5jbHVkaW5nCiAgICB0aG9zZSB0aGF0IGFscmVhZHkgaGF2ZSB0aGUgcmVuYW1lIHNlbSBjYW4gZW5kIHVwIGNhdXNpbmcgd3JpdGVwYWdlCkBAIC00MDQsMjAgKzU0MCwzNyBAQAogCiAJY0ZZSSgxLCAoImlub2RlID0gMHglcCBmaWxlIGZsYWdzIDB4JXggZm9yICVzIiwKIAkJIGlub2RlLCBmaWxlLT5mX2ZsYWdzLCBmdWxsX3BhdGgpKTsKLQlkZXNpcmVkQWNjZXNzID0gY2lmc19jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOwogCiAJaWYgKG9wbG9ja0VuYWJsZWQpCiAJCW9wbG9jayA9IFJFUV9PUExPQ0s7CiAJZWxzZQogCQlvcGxvY2sgPSAwOwogCisJaWYgKHRjb24tPnVuaXhfZXh0ICYmICh0Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSAmJgorCSAgICAoQ0lGU19VTklYX1BPU0lYX1BBVEhfT1BTX0NBUCAmCisJCQlsZTY0X3RvX2NwdSh0Y29uLT5mc1VuaXhJbmZvLkNhcGFiaWxpdHkpKSkgeworCQlpbnQgb2ZsYWdzID0gKGludCkgY2lmc19wb3NpeF9jb252ZXJ0X2ZsYWdzKGZpbGUtPmZfZmxhZ3MpOworCQkvKiBjYW4gbm90IHJlZnJlc2ggaW5vZGUgaW5mbyBzaW5jZSBzaXplIGNvdWxkIGJlIHN0YWxlICovCisJCXJjID0gY2lmc19wb3NpeF9vcGVuKGZ1bGxfcGF0aCwgTlVMTCwgaW5vZGUtPmlfc2IsCisJCQkJICAgICBjaWZzX3NiLT5tbnRfZmlsZV9tb2RlIC8qIGlnbm9yZWQgKi8sCisJCQkJICAgICBvZmxhZ3MsICZvcGxvY2ssICZuZXRmaWQsIHhpZCk7CisJCWlmIChyYyA9PSAwKSB7CisJCQljRllJKDEsICgicG9zaXggcmVvcGVuIHN1Y2NlZWRlZCIpKTsKKwkJCWdvdG8gcmVvcGVuX3N1Y2Nlc3M7CisJCX0KKwkJLyogZmFsbHRocm91Z2ggdG8gcmV0cnkgb3BlbiB0aGUgb2xkIHdheSBvbiBlcnJvcnMsIGVzcGVjaWFsbHkKKwkJICAgaW4gdGhlIHJlY29ubmVjdCBwYXRoIGl0IGlzIGltcG9ydGFudCB0byByZXRyeSBoYXJkICovCisJfQorCisJZGVzaXJlZEFjY2VzcyA9IGNpZnNfY29udmVydF9mbGFncyhmaWxlLT5mX2ZsYWdzKTsKKwogCS8qIENhbiBub3QgcmVmcmVzaCBpbm9kZSBieSBwYXNzaW5nIGluIGZpbGVfaW5mbyBidWYgdG8gYmUgcmV0dXJuZWQKIAkgICBieSBTTUJPcGVuIGFuZCB0aGVuIGNhbGxpbmcgZ2V0X2lub2RlX2luZm8gd2l0aCByZXR1cm5lZCBidWYKIAkgICBzaW5jZSBmaWxlIG1pZ2h0IGhhdmUgd3JpdGUgYmVoaW5kIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBmbHVzaGVkCiAJICAgYW5kIHNlcnZlciB2ZXJzaW9uIG9mIGZpbGUgc2l6ZSBjYW4gYmUgc3RhbGUuIElmIHdlIGtuZXcgZm9yIHN1cmUKIAkgICB0aGF0IGlub2RlIHdhcyBub3QgZGlydHkgbG9jYWxseSB3ZSBjb3VsZCBkbyB0aGlzICovCiAKLQlyYyA9IENJRlNTTUJPcGVuKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sIGRlc2lyZWRBY2Nlc3MsCisJcmMgPSBDSUZTU01CT3Blbih4aWQsIHRjb24sIGZ1bGxfcGF0aCwgZGlzcG9zaXRpb24sIGRlc2lyZWRBY2Nlc3MsCiAJCQkgQ1JFQVRFX05PVF9ESVIsICZuZXRmaWQsICZvcGxvY2ssIE5VTEwsCiAJCQkgY2lmc19zYi0+bG9jYWxfbmxzLCBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtNDI2LDYgKzU3OSw3IEBACiAJCWNGWUkoMSwgKCJjaWZzX29wZW4gcmV0dXJuZWQgMHgleCIsIHJjKSk7CiAJCWNGWUkoMSwgKCJvcGxvY2s6ICVkIiwgb3Bsb2NrKSk7CiAJfSBlbHNlIHsKK3Jlb3Blbl9zdWNjZXNzOgogCQlwQ2lmc0ZpbGUtPm5ldGZpZCA9IG5ldGZpZDsKIAkJcENpZnNGaWxlLT5pbnZhbGlkSGFuZGxlID0gZmFsc2U7CiAJCXVwKCZwQ2lmc0ZpbGUtPmZoX3NlbSk7CkBAIC00MzksNyArNTkzLDcgQEAKIAkJCSAgIGdvIHRvIHNlcnZlciB0byBnZXQgaW5vZGUgaW5mbyAqLwogCQkJCXBDaWZzSW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gZmFsc2U7CiAJCQkJcENpZnNJbm9kZS0+Y2xpZW50Q2FuQ2FjaGVSZWFkID0gZmFsc2U7Ci0JCQkJaWYgKHBUY29uLT51bml4X2V4dCkKKwkJCQlpZiAodGNvbi0+dW5peF9leHQpCiAJCQkJCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mb191bml4KCZpbm9kZSwKIAkJCQkJCWZ1bGxfcGF0aCwgaW5vZGUtPmlfc2IsIHhpZCk7CiAJCQkJZWxzZQpAQCAtNDY3LDcgKzYyMSw2IEBACiAJCQljaWZzX3JlbG9ja19maWxlKHBDaWZzRmlsZSk7CiAJCX0KIAl9Ci0KIAlrZnJlZShmdWxsX3BhdGgpOwogCUZyZWVYaWQoeGlkKTsKIAlyZXR1cm4gcmM7CkBAIC0xNTIzLDYgKzE2NzYsOSBAQAogewogCWludCB4aWQ7CiAJaW50IHJjID0gMDsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOworCXN0cnVjdCBjaWZzRmlsZUluZm8gKnNtYmZpbGUgPQorCQkoc3RydWN0IGNpZnNGaWxlSW5mbyAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAogCXhpZCA9IEdldFhpZCgpOwpAQCAtMTUzNCw3ICsxNjkwLDEyIEBACiAJaWYgKHJjID09IDApIHsKIAkJcmMgPSBDSUZTX0koaW5vZGUpLT53cml0ZV9iZWhpbmRfcmM7CiAJCUNJRlNfSShpbm9kZSktPndyaXRlX2JlaGluZF9yYyA9IDA7CisJCXRjb24gPSBDSUZTX1NCKGlub2RlLT5pX3NiKS0+dGNvbjsKKwkJaWYgKCFyYyAmJiB0Y29uICYmIHNtYmZpbGUgJiYKKwkJICAgIShDSUZTX1NCKGlub2RlLT5pX3NiKS0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX05PU1NZTkMpKQorCQkJcmMgPSBDSUZTU01CRmx1c2goeGlkLCB0Y29uLCBzbWJmaWxlLT5uZXRmaWQpOwogCX0KKwogCUZyZWVYaWQoeGlkKTsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggNDY5MGEzNi4uYTg3OTdjYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtNzYzLDYgKzc2Myw5IEBACiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb24gPSBjaWZzX3NiLT50Y29uOwogCUZJTEVfQkFTSUNfSU5GTwlpbmZvX2J1ZjsKIAorCWlmIChhdHRycyA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChhdHRycy0+aWFfdmFsaWQgJiBBVFRSX0FUSU1FKSB7CiAJCXNldF90aW1lID0gdHJ1ZTsKIAkJaW5mb19idWYuTGFzdEFjY2Vzc1RpbWUgPQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWJmc2N0bC5oIGIvZnMvY2lmcy9zbWJmc2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNTZiODkKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jaWZzL3NtYmZzY3RsLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqICAgZnMvY2lmcy9zbWJmc2N0bC5oOiBTTUIsIENJRlMsIFNNQjIgRlNDVEwgZGVmaW5pdGlvbnMKKyAqCisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsMjAwOQorICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQorICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyogSU9DVEwgaW5mb3JtYXRpb24gKi8KKy8qCisgKiBMaXN0IG9mIGlvY3RsL2ZzY3RsIGZ1bmN0aW9uIGNvZGVzIHRoYXQgYXJlIG9yIGNvdWxkIGJlIHVzZWZ1bCBpbiB0aGUKKyAqIGZ1dHVyZSB0byByZW1vdGUgY2xpZW50cyBsaWtlIGNpZnMgb3IgU01CMiBjbGllbnQuICBUaGVyZSBpcyBwcm9iYWJseQorICogYSBzbGlnaHRseSBsYXJnZXIgc2V0IG9mIGZzY3RscyB0aGF0IE5URlMgbG9jYWwgZmlsZXN5c3RlbSBjb3VsZCBoYW5kbGUsCisgKiBpbmNsdWRpbmcgdGhlIHNldmVuIGJlbG93IHRoYXQgd2UgZG8gbm90IGhhdmUgc3RydWN0IGRlZmluaXRpb25zIGZvci4KKyAqIEV2ZW4gd2l0aCBwcm90b2NvbCBkZWZpbml0aW9ucyBmb3IgbW9zdCBvZiB0aGVzZSBub3cgYXZhaWxhYmxlLCB3ZSBzdGlsbAorICogbmVlZCB0byBkbyBzb21lIGV4cGVyaW1lbnRhdGlvbiB0byBpZGVudGlmeSB3aGljaCBhcmUgcHJhY3RpY2FsIHRvIGRvCisgKiByZW1vdGVseS4gIFNvbWUgb2YgdGhlIGZvbGxvd2luZywgc3VjaCBhcyB0aGUgZW5jcnlwdGlvbi9jb21wcmVzc2lvbiBvbmVzCisgKiBjb3VsZCBiZSBpbnZva2VkIGZyb20gdG9vbHMgdmlhIGEgc3BlY2lhbGl6ZWQgaG9vayBpbnRvIHRoZSBWRlMgcmF0aGVyCisgKiB0aGFuIHZpYSB0aGUgc3RhbmRhcmQgdmZzIGVudHJ5IHBvaW50cworICovCisjZGVmaW5lIEZTQ1RMX1JFUVVFU1RfT1BMT0NLX0xFVkVMXzEgMHgwMDA5MDAwMAorI2RlZmluZSBGU0NUTF9SRVFVRVNUX09QTE9DS19MRVZFTF8yIDB4MDAwOTAwMDQKKyNkZWZpbmUgRlNDVExfUkVRVUVTVF9CQVRDSF9PUExPQ0sgICAweDAwMDkwMDA4CisjZGVmaW5lIEZTQ1RMX0xPQ0tfVk9MVU1FICAgICAgICAgICAgMHgwMDA5MDAxOAorI2RlZmluZSBGU0NUTF9VTkxPQ0tfVk9MVU1FICAgICAgICAgIDB4MDAwOTAwMUMKKyNkZWZpbmUgRlNDVExfSVNfUEFUSE5BTUVfVkFMSUQgICAgICAweDAwMDkwMDJDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfR0VUX0NPTVBSRVNTSU9OICAgICAgICAweDAwMDkwMDNDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX0NPTVBSRVNTSU9OICAgICAgICAweDAwMDlDMDQwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUVVFUllfRkFUX0JQQiAgICAgICAgICAweDAwMDkwMDU4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKy8qIFZlcmlmeSB0aGUgbmV4dCBGU0NUTCBudW1iZXIsIHdlIGhhZCBpdCBhcyAweDAwMDkwMDkwIGJlZm9yZSAqLworI2RlZmluZSBGU0NUTF9GSUxFU1lTVEVNX0dFVF9TVEFUUyAgIDB4MDAwOTAwNjAgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfTlRGU19WT0xVTUVfREFUQSAgIDB4MDAwOTAwNjQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9HRVRfUkVUUklFVkFMX1BPSU5URVJTIDB4MDAwOTAwNzMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9JU19WT0xVTUVfRElSVFkgICAgICAgIDB4MDAwOTAwNzggLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9BTExPV19FWFRFTkRFRF9EQVNEX0lPIDB4MDAwOTAwODMgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9SRVFVRVNUX0ZJTFRFUl9PUExPQ0sgIDB4MDAwOTAwOEMKKyNkZWZpbmUgRlNDVExfRklORF9GSUxFU19CWV9TSUQgICAgICAweDAwMDkwMDhGIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX09CSkVDVF9JRCAgICAgICAgICAweDAwMDkwMDk4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfR0VUX09CSkVDVF9JRCAgICAgICAgICAweDAwMDkwMDlDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfREVMRVRFX09CSkVDVF9JRCAgICAgICAweDAwMDkwMEEwIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE0IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfR0VUX1JFUEFSU0VfUE9JTlQgICAgICAweDAwMDkwMEE4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfREVMRVRFX1JFUEFSU0VfUE9JTlQgICAweDAwMDkwMEFDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfU0VUX09CSkVDVF9JRF9FWFRFTkRFRCAweDAwMDkwMEJDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfQ1JFQVRFX09SX0dFVF9PQkpFQ1RfSUQgMHgwMDA5MDBDMCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9TUEFSU0UgICAgICAgICAgICAgMHgwMDA5MDBDNCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9aRVJPX0RBVEEgICAgICAgICAgMHgwMDA5MDBDOCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9FTkNSWVBUSU9OICAgICAgICAgMHgwMDA5MDBENyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX0VOQ1JZUFRJT05fRlNDVExfSU8gICAgMHgwMDA5MDBEQiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1dSSVRFX1JBV19FTkNSWVBURUQgICAgMHgwMDA5MDBERiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFQURfUkFXX0VOQ1JZUFRFRCAgICAgMHgwMDA5MDBFMyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFQURfRklMRV9VU05fREFUQSAgICAgMHgwMDA5MDBFQiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1dSSVRFX1VTTl9DTE9TRV9SRUNPUkQgMHgwMDA5MDBFRiAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NJU19DT1BZRklMRSAgICAgICAgICAgMHgwMDA5MDEwMCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1JFQ0FMTF9GSUxFICAgICAgICAgICAgMHgwMDA5MDExNyAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1FVRVJZX1NQQVJJTkdfSU5GTyAgICAgMHgwMDA5MDEzOCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9aRVJPX09OX0RFQUxMT0MgICAgMHgwMDA5MDE5NCAvKiBCQiBhZGQgc3RydWN0ICovCisjZGVmaW5lIEZTQ1RMX1NFVF9TSE9SVF9OQU1FX0JFSEFWSU9SIDB4MDAwOTAxQjQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9RVUVSWV9BTExPQ0FURURfUkFOR0VTIDB4MDAwOTQwQ0YgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TRVRfREVGRUNUX01BTkFHRU1FTlQgIDB4MDAwOTgxMzQgLyogQkIgYWRkIHN0cnVjdCAqLworI2RlZmluZSBGU0NUTF9TSVNfTElOS19GSUxFUyAgICAgICAgIDB4MDAwOUMxMDQKKyNkZWZpbmUgRlNDVExfUElQRV9QRUVLICAgICAgICAgICAgICAweDAwMTE0MDBDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfUElQRV9UUkFOU0NFSVZFICAgICAgICAweDAwMTFDMDE3IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKy8qIHN0cmFuZ2UgdGhhdCB0aGUgbnVtYmVyIGZvciB0aGlzIG9wIGlzIG5vdCBzZXF1ZW50aWFsIHdpdGggcHJldmlvdXMgb3AgKi8KKyNkZWZpbmUgRlNDVExfUElQRV9XQUlUICAgICAgICAgICAgICAweDAwMTEwMDE4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfTE1SX0dFVF9MSU5LX1RSQUNLX0lORiAweDAwMTQwMEU4IC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKyNkZWZpbmUgRlNDVExfTE1SX1NFVF9MSU5LX1RSQUNLX0lORiAweDAwMTQwMEVDIC8qIEJCIGFkZCBzdHJ1Y3QgKi8KKworI2RlZmluZSBJT19SRVBBUlNFX1RBR19NT1VOVF9QT0lOVCAgIDB4QTAwMDAwMDMKKyNkZWZpbmUgSU9fUkVQQVJTRV9UQUdfSFNNICAgICAgICAgICAweEMwMDAwMDA0CisjZGVmaW5lIElPX1JFUEFSU0VfVEFHX1NJUyAgICAgICAgICAgMHg4MDAwMDAwNwpkaWZmIC0tZ2l0IGEvZnMvY29kYS9kaXIuYyBiL2ZzL2NvZGEvZGlyLmMKaW5kZXggNzViMWZhOS4uNGJiOWQwYSAxMDA2NDQKLS0tIGEvZnMvY29kYS9kaXIuYworKysgYi9mcy9jb2RhL2Rpci5jCkBAIC01OSw3ICs1OSw3IEBACiB9CiAjZGVmaW5lIENPREFfRUlPX0VSUk9SICgodm9pZCAqKSAoY29kYV9yZXR1cm5fRUlPKSkKIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjb2RhX2RlbnRyeV9vcGVyYXRpb25zID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY29kYV9kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfcmV2YWxpZGF0ZQk9IGNvZGFfZGVudHJ5X3JldmFsaWRhdGUsCiAJLmRfZGVsZXRlCT0gY29kYV9kZW50cnlfZGVsZXRlLApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCBkMDE0NWNhLi41ZTM3NGFhIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMzc4LDYgKzM3OCwzNCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorLyoKKyAqIFRoaXMgaXMgYSBjb3B5IG9mIHN5c191c3RhdCwganVzdCBkZWFsaW5nIHdpdGggYSBzdHJ1Y3R1cmUgbGF5b3V0LgorICogR2l2ZW4gaG93IHNpbXBsZSB0aGlzIHN5c2NhbGwgaXMgdGhhdCBhcHBvcmFjaCBpcyBtb3JlIG1haW50YWluYWJsZQorICogdGhhbiB0aGUgdmFyaW91cyBjb252ZXJzaW9uIGhhY2tzLgorICovCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c191c3RhdCh1bnNpZ25lZCBkZXYsIHN0cnVjdCBjb21wYXRfdXN0YXQgX191c2VyICp1KQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJc3RydWN0IGNvbXBhdF91c3RhdCB0bXA7CisJc3RydWN0IGtzdGF0ZnMgc2J1ZjsKKwlpbnQgZXJyOworCisJc2IgPSB1c2VyX2dldF9zdXBlcihuZXdfZGVjb2RlX2RldihkZXYpKTsKKwlpZiAoIXNiKQorCQlyZXR1cm4gLUVJTlZBTDsKKwllcnIgPSB2ZnNfc3RhdGZzKHNiLT5zX3Jvb3QsICZzYnVmKTsKKwlkcm9wX3N1cGVyKHNiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbWVtc2V0KCZ0bXAsIDAsIHNpemVvZihzdHJ1Y3QgY29tcGF0X3VzdGF0KSk7CisJdG1wLmZfdGZyZWUgPSBzYnVmLmZfYmZyZWU7CisJdG1wLmZfdGlub2RlID0gc2J1Zi5mX2ZmcmVlOworCWlmIChjb3B5X3RvX3VzZXIodSwgJnRtcCwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfdXN0YXQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X2NvbXBhdF9mbG9jayhzdHJ1Y3QgZmxvY2sgKmtmbCwgc3RydWN0IGNvbXBhdF9mbG9jayBfX3VzZXIgKnVmbCkKIHsKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgdWZsLCBzaXplb2YoKnVmbCkpIHx8CkBAIC0xNDAyLDYgKzE0MzAsNyBAQAogCXJldHZhbCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKKwljdXJyZW50LT5pbl9leGVjdmUgPSAxOwogCiAJcmV0dmFsID0gLUVOT01FTTsKIAlicHJtLT5jcmVkID0gcHJlcGFyZV9leGVjX2NyZWRzKCk7CkBAIC0xNDU0LDYgKzE0ODMsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIGV4ZWN2ZSBzdWNjZWVkZWQgKi8KKwljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoY3VycmVudCk7CiAJZnJlZV9icHJtKGJwcm0pOwpAQCAtMTQ3MCw2ICsxNTAwLDcgQEAKIAl9CiAKIG91dF91bmxvY2s6CisJY3VycmVudC0+aW5fZXhlY3ZlID0gMDsKIAltdXRleF91bmxvY2soJmN1cnJlbnQtPmNyZWRfZXhlY19tdXRleCk7CiAKIG91dF9mcmVlOgpkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2lvY3RsLmMgYi9mcy9jb21wYXRfaW9jdGwuYwppbmRleCA0NWU1OWQzLi5mZjc4NjY4IDEwMDY0NAotLS0gYS9mcy9jb21wYXRfaW9jdGwuYworKysgYi9mcy9jb21wYXRfaW9jdGwuYwpAQCAtNTIyLDYgKzUyMiwxMSBAQAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJyZWFrOworCWNhc2UgU0lPQ1NIV1RTVEFNUDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZnIsIHVpZnIzMiwgc2l6ZW9mKCp1aWZyMzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZnIuaWZyX2RhdGEgPSBjb21wYXRfcHRyKHVpZnIzMi0+aWZyX2lmcnUuaWZydV9kYXRhKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZnIsIHVpZnIzMiwgc2l6ZW9mKCp1aWZyMzIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTk5Myw2ICsxOTk4LDggQEAKIENPTVBBVElCTEVfSU9DVEwoVFVOR0VURkVBVFVSRVMpCiBDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVE9GRkxPQUQpCiBDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVFRYRklMVEVSKQorQ09NUEFUSUJMRV9JT0NUTChUVU5HRVRTTkRCVUYpCitDT01QQVRJQkxFX0lPQ1RMKFRVTlNFVFNOREJVRikKIC8qIEJpZyBWICovCiBDT01QQVRJQkxFX0lPQ1RMKFZUX1NFVE1PREUpCiBDT01QQVRJQkxFX0lPQ1RMKFZUX0dFVE1PREUpCkBAIC0yNTY2LDYgKzI1NzMsNyBAQAogSEFORExFX0lPQ1RMKFNJT0NHSUZBRERSLCBkZXZfaWZzaW9jKQogSEFORExFX0lPQ1RMKFNJT0NTSUZBRERSLCBkZXZfaWZzaW9jKQogSEFORExFX0lPQ1RMKFNJT0NTSUZIV0JST0FEQ0FTVCwgZGV2X2lmc2lvYykKK0hBTkRMRV9JT0NUTChTSU9DU0hXVFNUQU1QLCBkZXZfaWZzaW9jKQogCiAvKiBpb2N0bHMgdXNlZCBieSBhcHBsZXRhbGsgZGRwLmMgKi8KIEhBTkRMRV9JT0NUTChTSU9DQVRBTEtESUZBRERSLCBkZXZfaWZzaW9jKQpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuYwppbmRleCA4ZTkzMzQxLi4wNTM3M2RiIDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9kaXIuYworKysgYi9mcy9jb25maWdmcy9kaXIuYwpAQCAtNzIsNyArNzIsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2RlbnRyeV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2RlbnRyeV9vcHMgPSB7CiAJLmRfaXB1dAkJPSBjb25maWdmc19kX2lwdXQsCiAJLyogc2ltcGxlX2RlbGV0ZV9kZW50cnkoKSBpc24ndCBleHBvcnRlZCAqLwogCS5kX2RlbGV0ZQk9IGNvbmZpZ2ZzX2RfZGVsZXRlLApkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCAwN2UyZDRhLi45MGJiZDdlIDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYworKysgYi9mcy9kY2FjaGUuYwpAQCAtMTI0NywxNSArMTI0NywxOCBAQAogCXN0cnVjdCBkZW50cnkgKmZvdW5kOwogCXN0cnVjdCBkZW50cnkgKm5ldzsKIAotCS8qIERvZXMgYSBkZW50cnkgbWF0Y2hpbmcgdGhlIG5hbWUgZXhpc3QgYWxyZWFkeT8gKi8KKwkvKgorCSAqIEZpcnN0IGNoZWNrIGlmIGEgZGVudHJ5IG1hdGNoaW5nIHRoZSBuYW1lIGFscmVhZHkgZXhpc3RzLAorCSAqIGlmIG5vdCBnbyBhaGVhZCBhbmQgY3JlYXRlIGl0IG5vdy4KKwkgKi8KIAlmb3VuZCA9IGRfaGFzaF9hbmRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQsIG5hbWUpOwotCS8qIElmIG5vdCwgY3JlYXRlIGl0IG5vdyBhbmQgcmV0dXJuICovCiAJaWYgKCFmb3VuZCkgewogCQluZXcgPSBkX2FsbG9jKGRlbnRyeS0+ZF9wYXJlbnQsIG5hbWUpOwogCQlpZiAoIW5ldykgewogCQkJZXJyb3IgPSAtRU5PTUVNOwogCQkJZ290byBlcnJfb3V0OwogCQl9CisKIAkJZm91bmQgPSBkX3NwbGljZV9hbGlhcyhpbm9kZSwgbmV3KTsKIAkJaWYgKGZvdW5kKSB7CiAJCQlkcHV0KG5ldyk7CkBAIC0xMjYzLDYxICsxMjY2LDQ2IEBACiAJCX0KIAkJcmV0dXJuIG5ldzsKIAl9Ci0JLyogTWF0Y2hpbmcgZGVudHJ5IGV4aXN0cywgY2hlY2sgaWYgaXQgaXMgbmVnYXRpdmUuICovCisKKwkvKgorCSAqIElmIGEgbWF0Y2hpbmcgZGVudHJ5IGV4aXN0cywgYW5kIGl0J3Mgbm90IG5lZ2F0aXZlIHVzZSBpdC4KKwkgKgorCSAqIERlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIGJhbGFuY2UgdGhlIGlnZXQoKSBkb25lCisJICogZWFybGllciBvbi4KKwkgKi8KIAlpZiAoZm91bmQtPmRfaW5vZGUpIHsKIAkJaWYgKHVubGlrZWx5KGZvdW5kLT5kX2lub2RlICE9IGlub2RlKSkgewogCQkJLyogVGhpcyBjYW4ndCBoYXBwZW4gYmVjYXVzZSBiYWQgaW5vZGVzIGFyZSB1bmhhc2hlZC4gKi8KIAkJCUJVR19PTighaXNfYmFkX2lub2RlKGlub2RlKSk7CiAJCQlCVUdfT04oIWlzX2JhZF9pbm9kZShmb3VuZC0+ZF9pbm9kZSkpOwogCQl9Ci0JCS8qCi0JCSAqIEFscmVhZHkgaGF2ZSB0aGUgaW5vZGUgYW5kIHRoZSBkZW50cnkgYXR0YWNoZWQsIGRlY3JlbWVudAotCQkgKiB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIGJhbGFuY2UgdGhlIGlnZXQoKSBkb25lCi0JCSAqIGVhcmxpZXIgb24uICBXZSBmb3VuZCB0aGUgZGVudHJ5IHVzaW5nIGRfbG9va3VwKCkgc28gaXQKLQkJICogY2Fubm90IGJlIGRpc2Nvbm5lY3RlZCBhbmQgdGh1cyB3ZSBkbyBub3QgbmVlZCB0byB3b3JyeQotCQkgKiBhYm91dCBhbnkgTkZTL2Rpc2Nvbm5lY3RlZG5lc3MgaXNzdWVzIGhlcmUuCi0JCSAqLwogCQlpcHV0KGlub2RlKTsKIAkJcmV0dXJuIGZvdW5kOwogCX0KKwogCS8qCiAJICogTmVnYXRpdmUgZGVudHJ5OiBpbnN0YW50aWF0ZSBpdCB1bmxlc3MgdGhlIGlub2RlIGlzIGEgZGlyZWN0b3J5IGFuZAotCSAqIGhhcyBhICdkaXNjb25uZWN0ZWQnIGRlbnRyeSAoaS5lLiBJU19ST09UIGFuZCBEQ0FDSEVfRElTQ09OTkVDVEVEKSwKLQkgKiBpbiB3aGljaCBjYXNlIGRfbW92ZSgpIHRoYXQgaW4gcGxhY2Ugb2YgdGhlIGZvdW5kIGRlbnRyeS4KKwkgKiBhbHJlYWR5IGhhcyBhIGRlbnRyeS4KIAkgKi8KLQlpZiAoIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJLyogTm90IGEgZGlyZWN0b3J5OyBldmVyeXRoaW5nIGlzIGVhc3kuICovCi0JCWRfaW5zdGFudGlhdGUoZm91bmQsIGlub2RlKTsKLQkJcmV0dXJuIGZvdW5kOwotCX0KIAlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQlpZiAobGlzdF9lbXB0eSgmaW5vZGUtPmlfZGVudHJ5KSkgewotCQkvKgotCQkgKiBEaXJlY3Rvcnkgd2l0aG91dCBhICdkaXNjb25uZWN0ZWQnIGRlbnRyeTsgd2UgbmVlZCB0byBkbwotCQkgKiBkX2luc3RhbnRpYXRlKCkgYnkgaGFuZCBiZWNhdXNlIGl0IHRha2VzIGRjYWNoZV9sb2NrIHdoaWNoCi0JCSAqIHdlIGFscmVhZHkgaG9sZC4KLQkJICovCisJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpIHx8IGxpc3RfZW1wdHkoJmlub2RlLT5pX2RlbnRyeSkpIHsKIAkJX19kX2luc3RhbnRpYXRlKGZvdW5kLCBpbm9kZSk7CiAJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUoZm91bmQsIGlub2RlKTsKIAkJcmV0dXJuIGZvdW5kOwogCX0KKwogCS8qCi0JICogRGlyZWN0b3J5IHdpdGggYSAnZGlzY29ubmVjdGVkJyBkZW50cnk7IGdldCBhIHJlZmVyZW5jZSB0byB0aGUKLQkgKiAnZGlzY29ubmVjdGVkJyBkZW50cnkuCisJICogSW4gY2FzZSBhIGRpcmVjdG9yeSBhbHJlYWR5IGhhcyBhIChkaXNjb25uZWN0ZWQpIGVudHJ5IGdyYWIgYQorCSAqIHJlZmVyZW5jZSB0byBpdCwgbW92ZSBpdCBpbiBwbGFjZSBhbmQgdXNlIGl0LgogCSAqLwogCW5ldyA9IGxpc3RfZW50cnkoaW5vZGUtPmlfZGVudHJ5Lm5leHQsIHN0cnVjdCBkZW50cnksIGRfYWxpYXMpOwogCWRnZXRfbG9ja2VkKG5ldyk7CiAJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQkvKiBEbyBzZWN1cml0eSB2b2Rvby4gKi8KIAlzZWN1cml0eV9kX2luc3RhbnRpYXRlKGZvdW5kLCBpbm9kZSk7Ci0JLyogTW92ZSBuZXcgaW4gcGxhY2Ugb2YgZm91bmQuICovCiAJZF9tb3ZlKG5ldywgZm91bmQpOwotCS8qIEJhbGFuY2UgdGhlIGlnZXQoKSB3ZSBkaWQgYWJvdmUuICovCiAJaXB1dChpbm9kZSk7Ci0JLyogVGhyb3cgYXdheSBmb3VuZC4gKi8KIAlkcHV0KGZvdW5kKTsKLQkvKiBVc2UgbmV3IGFzIHRoZSBhY3R1YWwgZGVudHJ5LiAqLwogCXJldHVybiBuZXc7CiAKIGVycl9vdXQ6CmRpZmYgLS1naXQgYS9mcy9kZXZwdHMvaW5vZGUuYyBiL2ZzL2RldnB0cy9pbm9kZS5jCmluZGV4IGJmZjQwNTIuLjYzYTRhNTkgMTAwNjQ0Ci0tLSBhL2ZzL2RldnB0cy9pbm9kZS5jCisrKyBiL2ZzL2RldnB0cy9pbm9kZS5jCkBAIC0zMjIsMTc3ICszMjIsODEgQEAKIH0KIAogLyoKLSAqIFNhZmVseSBwYXJzZSB0aGUgbW91bnQgb3B0aW9ucyBpbiBAZGF0YSBhbmQgdXBkYXRlIEBvcHRzLgorICogZGV2cHRzX2dldF9zYigpCiAgKgotICogZGV2cHRzIGVuZHMgdXAgcGFyc2luZyBvcHRpb25zIHR3byB0aW1lcyBkdXJpbmcgbW91bnQsIGR1ZSB0byB0aGUKLSAqIHR3byBtb2RlcyBvZiBvcGVyYXRpb24gaXQgc3VwcG9ydHMuIFRoZSBmaXJzdCBwYXJzZSBvY2N1cnMgaW4KLSAqIGRldnB0c19nZXRfc2IoKSB3aGVuIGRldGVybWluaW5nIHRoZSBtb2RlIChzaW5nbGUtaW5zdGFuY2Ugb3IKLSAqIG11bHRpLWluc3RhbmNlIG1vZGUpLiBUaGUgc2Vjb25kIHBhcnNlIGhhcHBlbnMgaW4gZGV2cHRzX3JlbW91bnQoKQotICogb3IgbmV3X3B0c19tb3VudCgpIGRlcGVuZGluZyBvbiB0aGUgbW9kZS4KKyAqICAgICBJZiB0aGUgJy1vIG5ld2luc3RhbmNlJyBtb3VudCBvcHRpb24gd2FzIHNwZWNpZmllZCwgbW91bnQgYSBuZXcKKyAqICAgICAocHJpdmF0ZSkgaW5zdGFuY2Ugb2YgZGV2cHRzLiAgUFRZcyBjcmVhdGVkIGluIHRoaXMgaW5zdGFuY2UgYXJlCisgKiAgICAgaW5kZXBlbmRlbnQgb2YgdGhlIFBUWXMgaW4gb3RoZXIgZGV2cHRzIGluc3RhbmNlcy4KICAqCi0gKiBQYXJzaW5nIG9mIG9wdGlvbnMgbW9kaWZpZXMgdGhlIEBkYXRhIG1ha2luZyBzdWJzZXF1ZW50IHBhcnNpbmcKLSAqIGluY29ycmVjdC4gU28gbWFrZSBhIGxvY2FsIGNvcHkgb2YgQGRhdGEgYW5kIHBhcnNlIGl0LgorICogICAgIElmIHRoZSAnLW8gbmV3aW5zdGFuY2UnIG9wdGlvbiB3YXMgbm90IHNwZWNpZmllZCwgbW91bnQvcmVtb3VudCB0aGUKKyAqICAgICBpbml0aWFsIGtlcm5lbCBtb3VudCBvZiBkZXZwdHMuICBUaGlzIHR5cGUgb2YgbW91bnQgZ2l2ZXMgdGhlCisgKiAgICAgbGVnYWN5LCBzaW5nbGUtaW5zdGFuY2Ugc2VtYW50aWNzLgogICoKLSAqIFJldHVybjogMCBPbiBzdWNjZXNzLCAtZXJybm8gb24gZXJyb3IKLSAqLwotc3RhdGljIGludCBzYWZlX3BhcnNlX21vdW50X29wdGlvbnModm9pZCAqZGF0YSwgc3RydWN0IHB0c19tb3VudF9vcHRzICpvcHRzKQotewotCWludCByYzsKLQl2b2lkICpkYXRhY3A7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybiAwOwotCi0JLyogVXNlIGtzdHJkdXAoKSA/ICAqLwotCWRhdGFjcCA9IGttYWxsb2MoUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGFjcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltZW1jcHkoZGF0YWNwLCBkYXRhLCBQQUdFX1NJWkUpOwotCXJjID0gcGFyc2VfbW91bnRfb3B0aW9ucygoY2hhciAqKWRhdGFjcCwgUEFSU0VfTU9VTlQsIG9wdHMpOwotCWtmcmVlKGRhdGFjcCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBNb3VudCBhIG5ldyAocHJpdmF0ZSkgaW5zdGFuY2Ugb2YgZGV2cHRzLiAgUFRZcyBjcmVhdGVkIGluIHRoaXMKLSAqIGluc3RhbmNlIGFyZSBpbmRlcGVuZGVudCBvZiB0aGUgUFRZcyBpbiBvdGhlciBkZXZwdHMgaW5zdGFuY2VzLgotICovCi1zdGF0aWMgaW50IG5ld19wdHNfbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsIGludCBmbGFncywKLQkJdm9pZCAqZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgcHRzX2ZzX2luZm8gKmZzaTsKLQlzdHJ1Y3QgcHRzX21vdW50X29wdHMgKm9wdHM7Ci0KLQllcnIgPSBnZXRfc2Jfbm9kZXYoZnNfdHlwZSwgZmxhZ3MsIGRhdGEsIGRldnB0c19maWxsX3N1cGVyLCBtbnQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlmc2kgPSBERVZQVFNfU0IobW50LT5tbnRfc2IpOwotCW9wdHMgPSAmZnNpLT5tb3VudF9vcHRzOwotCi0JZXJyID0gcGFyc2VfbW91bnRfb3B0aW9ucyhkYXRhLCBQQVJTRV9NT1VOVCwgb3B0cyk7Ci0JaWYgKGVycikKLQkJZ290byBmYWlsOwotCi0JZXJyID0gbWtub2RfcHRteChtbnQtPm1udF9zYik7Ci0JaWYgKGVycikKLQkJZ290byBmYWlsOwotCi0JcmV0dXJuIDA7Ci0KLWZhaWw6Ci0JZHB1dChtbnQtPm1udF9zYi0+c19yb290KTsKLQlkZWFjdGl2YXRlX3N1cGVyKG1udC0+bW50X3NiKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKgotICogQ2hlY2sgaWYgJ25ld2luc3RhbmNlJyBtb3VudCBvcHRpb24gd2FzIHNwZWNpZmllZCBpbiBAZGF0YS4KKyAqICAgICBUaGUgJ25ld2luc3RhbmNlJyBvcHRpb24gaXMgbmVlZGVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgbmFtZXNwYWNlCisgKiAgICAgc2VtYW50aWNzIGluIGRldnB0cyB3aGlsZSBwcmVzZXJ2aW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb2YgdGhlCisgKiAgICAgY3VycmVudCAnc2luZ2xlLW5hbWVzcGFjZScgc2VtYW50aWNzLiBpLmUgYWxsIG1vdW50cyBvZiBkZXZwdHMKKyAqICAgICB3aXRob3V0IHRoZSAnbmV3aW5zdGFuY2UnIG1vdW50IG9wdGlvbiBzaG91bGQgYmluZCB0byB0aGUgaW5pdGlhbAorICogICAgIGtlcm5lbCBtb3VudCwgbGlrZSBnZXRfc2Jfc2luZ2xlKCkuCiAgKgotICogUmV0dXJuOiAtZXJybm8gIAlvbiBlcnJvciAoZWc6IGludmFsaWQgbW91bnQgb3B0aW9ucyBzcGVjaWZpZWQpCi0gKiAJIDogMSAJCWlmICduZXdpbnN0YW5jZScgbW91bnQgb3B0aW9uIHdhcyBzcGVjaWZpZWQKLSAqIAkgOiAwIAkJaWYgJ25ld2luc3RhbmNlJyBtb3VudCBvcHRpb24gd2FzIE5PVCBzcGVjaWZpZWQKLSAqLwotc3RhdGljIGludCBpc19uZXdfaW5zdGFuY2VfbW91bnQodm9pZCAqZGF0YSkKLXsKLQlpbnQgcmM7Ci0Jc3RydWN0IHB0c19tb3VudF9vcHRzIG9wdHM7Ci0KLQlpZiAoIWRhdGEpCi0JCXJldHVybiAwOwotCi0JcmMgPSBzYWZlX3BhcnNlX21vdW50X29wdGlvbnMoZGF0YSwgJm9wdHMpOwotCWlmICghcmMpCi0JCXJjID0gb3B0cy5uZXdpbnN0YW5jZTsKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIGdldF9pbml0X3B0c19zYigpCisgKiAgICAgTW91bnRzIHdpdGggJ25ld2luc3RhbmNlJyBvcHRpb24gY3JlYXRlIGEgbmV3LCBwcml2YXRlIG5hbWVzcGFjZS4KICAqCi0gKiAgICAgVGhpcyBpbnRlcmZhY2UgaXMgbmVlZGVkIHRvIHN1cHBvcnQgbXVsdGlwbGUgbmFtZXNwYWNlIHNlbWFudGljcyBpbgotICogICAgIGRldnB0cyB3aGlsZSBwcmVzZXJ2aW5nIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb2YgdGhlIGN1cnJlbnQgJ3NpbmdsZS0KLSAqICAgICBuYW1lc3BhY2UnIHNlbWFudGljcy4gaS5lIGFsbCBtb3VudHMgb2YgZGV2cHRzIHdpdGhvdXQgdGhlICduZXdpbnN0YW5jZScKLSAqICAgICBtb3VudCBvcHRpb24gc2hvdWxkIGJpbmQgdG8gdGhlIGluaXRpYWwga2VybmVsIG1vdW50LCBsaWtlCi0gKiAgICAgZ2V0X3NiX3NpbmdsZSgpLgorICogICAgIE5PVEU6CiAgKgotICogICAgIE1vdW50cyB3aXRoICduZXdpbnN0YW5jZScgb3B0aW9uIGNyZWF0ZSBhIG5ldyBwcml2YXRlIG5hbWVzcGFjZS4KLSAqCi0gKiAgICAgQnV0IGZvciBzaW5nbGUtbW91bnQgc2VtYW50aWNzLCBkZXZwdHMgY2Fubm90IHVzZSBnZXRfc2Jfc2luZ2xlKCksCisgKiAgICAgRm9yIHNpbmdsZS1tb3VudCBzZW1hbnRpY3MsIGRldnB0cyBjYW5ub3QgdXNlIGdldF9zYl9zaW5nbGUoKSwKICAqICAgICBiZWNhdXNlIGdldF9zYl9zaW5nbGUoKS9zZ2V0KCkgZmluZCBhbmQgdXNlIHRoZSBzdXBlci1ibG9jayBmcm9tCiAgKiAgICAgdGhlIG1vc3QgcmVjZW50IG1vdW50IG9mIGRldnB0cy4gQnV0IHRoYXQgcmVjZW50IG1vdW50IG1heSBiZSBhCiAgKiAgICAgJ25ld2luc3RhbmNlJyBtb3VudCBhbmQgZ2V0X3NiX3NpbmdsZSgpIHdvdWxkIHBpY2sgdGhlIG5ld2luc3RhbmNlCiAgKiAgICAgc3VwZXItYmxvY2sgaW5zdGVhZCBvZiB0aGUgaW5pdGlhbCBzdXBlci1ibG9jay4KLSAqCi0gKiAgICAgVGhpcyBpbnRlcmZhY2UgaXMgaWRlbnRpY2FsIHRvIGdldF9zYl9zaW5nbGUoKSBleGNlcHQgdGhhdCBpdAotICogICAgIGNvbnNpc3RlbnRseSBzZWxlY3RzIHRoZSAnc2luZ2xlLW5hbWVzcGFjZScgc3VwZXJibG9jayBldmVuIGluIHRoZQotICogICAgIHByZXNlbmNlIG9mIHRoZSBwcml2YXRlIG5hbWVzcGFjZSAoaS5lICduZXdpbnN0YW5jZScpIHN1cGVyLWJsb2Nrcy4KICAqLwotc3RhdGljIGludCBnZXRfaW5pdF9wdHNfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsIGludCBmbGFncywKLQkJdm9pZCAqZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpCitzdGF0aWMgaW50IGRldnB0c19nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCisJaW50IGZsYWdzLCBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpCiB7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzOwogCWludCBlcnJvcjsKKwlzdHJ1Y3QgcHRzX21vdW50X29wdHMgb3B0czsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnM7CiAKLQlzID0gc2dldChmc190eXBlLCBjb21wYXJlX2luaXRfcHRzX3NiLCBzZXRfYW5vbl9zdXBlciwgTlVMTCk7CisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCWlmIChkYXRhKSB7CisJCWVycm9yID0gcGFyc2VfbW91bnRfb3B0aW9ucyhkYXRhLCBQQVJTRV9NT1VOVCwgJm9wdHMpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQorCisJaWYgKG9wdHMubmV3aW5zdGFuY2UpCisJCXMgPSBzZ2V0KGZzX3R5cGUsIE5VTEwsIHNldF9hbm9uX3N1cGVyLCBOVUxMKTsKKwllbHNlCisJCXMgPSBzZ2V0KGZzX3R5cGUsIGNvbXBhcmVfaW5pdF9wdHNfc2IsIHNldF9hbm9uX3N1cGVyLCBOVUxMKTsKKwogCWlmIChJU19FUlIocykpCiAJCXJldHVybiBQVFJfRVJSKHMpOwogCiAJaWYgKCFzLT5zX3Jvb3QpIHsKIAkJcy0+c19mbGFncyA9IGZsYWdzOwogCQllcnJvciA9IGRldnB0c19maWxsX3N1cGVyKHMsIGRhdGEsIGZsYWdzICYgTVNfU0lMRU5UID8gMSA6IDApOwotCQlpZiAoZXJyb3IpIHsKLQkJCXVwX3dyaXRlKCZzLT5zX3Vtb3VudCk7Ci0JCQlkZWFjdGl2YXRlX3N1cGVyKHMpOwotCQkJcmV0dXJuIGVycm9yOwotCQl9CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X3VuZG9fc2dldDsKIAkJcy0+c19mbGFncyB8PSBNU19BQ1RJVkU7CiAJfQotCWRvX3JlbW91bnRfc2IocywgZmxhZ3MsIGRhdGEsIDApOwotCXJldHVybiBzaW1wbGVfc2V0X21udChtbnQsIHMpOworCisJc2ltcGxlX3NldF9tbnQobW50LCBzKTsKKworCW1lbWNweSgmKERFVlBUU19TQihzKSktPm1vdW50X29wdHMsICZvcHRzLCBzaXplb2Yob3B0cykpOworCisJZXJyb3IgPSBta25vZF9wdG14KHMpOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfZHB1dDsKKworCXJldHVybiAwOworCitvdXRfZHB1dDoKKwlkcHV0KHMtPnNfcm9vdCk7CisKK291dF91bmRvX3NnZXQ6CisJdXBfd3JpdGUoJnMtPnNfdW1vdW50KTsKKwlkZWFjdGl2YXRlX3N1cGVyKHMpOworCXJldHVybiBlcnJvcjsKIH0KIAotLyoKLSAqIE1vdW50IG9yIHJlbW91bnQgdGhlIGluaXRpYWwga2VybmVsIG1vdW50IG9mIGRldnB0cy4gVGhpcyB0eXBlIG9mCi0gKiBtb3VudCBtYWludGFpbnMgdGhlIGxlZ2FjeSwgc2luZ2xlLWluc3RhbmNlIHNlbWFudGljcywgd2hpbGUgdGhlCi0gKiBrZXJuZWwgc3RpbGwgYWxsb3dzIG11bHRpcGxlLWluc3RhbmNlcy4KLSAqLwotc3RhdGljIGludCBpbml0X3B0c19tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAotCQl2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gZ2V0X2luaXRfcHRzX3NiKGZzX3R5cGUsIGZsYWdzLCBkYXRhLCBtbnQpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQllcnIgPSBta25vZF9wdG14KG1udC0+bW50X3NiKTsKLQlpZiAoZXJyKSB7Ci0JCWRwdXQobW50LT5tbnRfc2ItPnNfcm9vdCk7Ci0JCWRlYWN0aXZhdGVfc3VwZXIobW50LT5tbnRfc2IpOwotCX0KLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgZGV2cHRzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKLQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLQlpbnQgbmV3OwotCi0JbmV3ID0gaXNfbmV3X2luc3RhbmNlX21vdW50KGRhdGEpOwotCWlmIChuZXcgPCAwKQotCQlyZXR1cm4gbmV3OwotCi0JaWYgKG5ldykKLQkJcmV0dXJuIG5ld19wdHNfbW91bnQoZnNfdHlwZSwgZmxhZ3MsIGRhdGEsIG1udCk7Ci0KLQlyZXR1cm4gaW5pdF9wdHNfbW91bnQoZnNfdHlwZSwgZmxhZ3MsIGRhdGEsIG1udCk7Ci19CiAjZWxzZQogLyoKICAqIFRoaXMgc3VwcG9ydHMgb25seSB0aGUgbGVnYWN5IHNpbmdsZS1pbnN0YW5jZSBzZW1hbnRpY3MgKG5vCmRpZmYgLS1naXQgYS9mcy9kbG0vZGlyLmMgYi9mcy9kbG0vZGlyLmMKaW5kZXggOTI5NjlmOC4uODU4ZmJhMSAxMDA2NDQKLS0tIGEvZnMvZGxtL2Rpci5jCisrKyBiL2ZzL2RsbS9kaXIuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiAKIAlidWNrZXQgPSBkaXJfaGFzaChscywgbmFtZSwgbmFtZWxlbik7CiAKLQl3cml0ZV9sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CisJc3Bpbl9sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CiAKIAlkZSA9IHNlYXJjaF9idWNrZXQobHMsIG5hbWUsIG5hbWVsZW4sIGJ1Y2tldCk7CiAKQEAgLTE3Myw3ICsxNzMsNyBAQAogCWxpc3RfZGVsKCZkZS0+bGlzdCk7CiAJa2ZyZWUoZGUpOwogIG91dDoKLQl3cml0ZV91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX3VubG9jaygmbHMtPmxzX2RpcnRibFtidWNrZXRdLmxvY2spOwogfQogCiB2b2lkIGRsbV9kaXJfY2xlYXIoc3RydWN0IGRsbV9scyAqbHMpCkBAIC0xODUsMTQgKzE4NSwxNCBAQAogCURMTV9BU1NFUlQobGlzdF9lbXB0eSgmbHMtPmxzX3JlY292ZXJfbGlzdCksICk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbHMtPmxzX2RpcnRibF9zaXplOyBpKyspIHsKLQkJd3JpdGVfbG9jaygmbHMtPmxzX2RpcnRibFtpXS5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZscy0+bHNfZGlydGJsW2ldLmxvY2spOwogCQloZWFkID0gJmxzLT5sc19kaXJ0YmxbaV0ubGlzdDsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CiAJCQlkZSA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IGRsbV9kaXJlbnRyeSwgbGlzdCk7CiAJCQlsaXN0X2RlbCgmZGUtPmxpc3QpOwogCQkJcHV0X2ZyZWVfZGUobHMsIGRlKTsKIAkJfQotCQl3cml0ZV91bmxvY2soJmxzLT5sc19kaXJ0YmxbaV0ubG9jayk7CisJCXNwaW5fdW5sb2NrKCZscy0+bHNfZGlydGJsW2ldLmxvY2spOwogCX0KIH0KIApAQCAtMzA3LDE3ICszMDcsMTcgQEAKIAogCWJ1Y2tldCA9IGRpcl9oYXNoKGxzLCBuYW1lLCBuYW1lbGVuKTsKIAotCXdyaXRlX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwlzcGluX2xvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAlkZSA9IHNlYXJjaF9idWNrZXQobHMsIG5hbWUsIG5hbWVsZW4sIGJ1Y2tldCk7CiAJaWYgKGRlKSB7CiAJCSpyX25vZGVpZCA9IGRlLT5tYXN0ZXJfbm9kZWlkOwotCQl3cml0ZV91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAkJaWYgKCpyX25vZGVpZCA9PSBub2RlaWQpCiAJCQlyZXR1cm4gLUVFWElTVDsKIAkJcmV0dXJuIDA7CiAJfQogCi0Jd3JpdGVfdW5sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CisJc3Bpbl91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAogCWlmIChuYW1lbGVuID4gRExNX1JFU05BTUVfTUFYTEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMzMCw3ICszMzAsNyBAQAogCWRlLT5sZW5ndGggPSBuYW1lbGVuOwogCW1lbWNweShkZS0+bmFtZSwgbmFtZSwgbmFtZWxlbik7CiAKLQl3cml0ZV9sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CisJc3Bpbl9sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CiAJdG1wID0gc2VhcmNoX2J1Y2tldChscywgbmFtZSwgbmFtZWxlbiwgYnVja2V0KTsKIAlpZiAodG1wKSB7CiAJCWtmcmVlKGRlKTsKQEAgLTMzOSw3ICszMzksNyBAQAogCQlsaXN0X2FkZF90YWlsKCZkZS0+bGlzdCwgJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5saXN0KTsKIAl9CiAJKnJfbm9kZWlkID0gZGUtPm1hc3Rlcl9ub2RlaWQ7Ci0Jd3JpdGVfdW5sb2NrKCZscy0+bHNfZGlydGJsW2J1Y2tldF0ubG9jayk7CisJc3Bpbl91bmxvY2soJmxzLT5sc19kaXJ0YmxbYnVja2V0XS5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZGxtL2RsbV9pbnRlcm5hbC5oIGIvZnMvZGxtL2RsbV9pbnRlcm5hbC5oCmluZGV4IDA3NmU4NmYuLmQwMWNhMGEgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9kbG1faW50ZXJuYWwuaAorKysgYi9mcy9kbG0vZGxtX2ludGVybmFsLmgKQEAgLTk5LDcgKzk5LDcgQEAKIAogc3RydWN0IGRsbV9kaXJ0YWJsZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXJ3bG9ja190CQlsb2NrOworCXNwaW5sb2NrX3QJCWxvY2s7CiB9OwogCiBzdHJ1Y3QgZGxtX3JzYnRhYmxlIHsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb2NrLmMgYi9mcy9kbG0vbG9jay5jCmluZGV4IDAxZTdkMzkuLjIwNWVjOTUgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb2NrLmMKKysrIGIvZnMvZGxtL2xvY2suYwpAQCAtODM1LDcgKzgzNSw3IEBACiAJCWxrYi0+bGtiX3dhaXRfY291bnQrKzsKIAkJaG9sZF9sa2IobGtiKTsKIAotCQlsb2dfZGVidWcobHMsICJhZGQgb3ZlcmxhcCAleCBjdXIgJWQgbmV3ICVkIGNvdW50ICVkIGZsYWdzICV4IiwKKwkJbG9nX2RlYnVnKGxzLCAiYWRkd2FpdCAleCBjdXIgJWQgb3ZlcmxhcCAlZCBjb3VudCAlZCBmICV4IiwKIAkJCSAgbGtiLT5sa2JfaWQsIGxrYi0+bGtiX3dhaXRfdHlwZSwgbXN0eXBlLAogCQkJICBsa2ItPmxrYl93YWl0X2NvdW50LCBsa2ItPmxrYl9mbGFncyk7CiAJCWdvdG8gb3V0OwpAQCAtODUxLDcgKzg1MSw3IEBACiAJbGlzdF9hZGQoJmxrYi0+bGtiX3dhaXRfcmVwbHksICZscy0+bHNfd2FpdGVycyk7CiAgb3V0OgogCWlmIChlcnJvcikKLQkJbG9nX2Vycm9yKGxzLCAiYWRkX3RvX3dhaXRlcnMgJXggZXJyb3IgJWQgZmxhZ3MgJXggJWQgJWQgJXMiLAorCQlsb2dfZXJyb3IobHMsICJhZGR3YWl0IGVycm9yICV4ICVkIGZsYWdzICV4ICVkICVkICVzIiwKIAkJCSAgbGtiLT5sa2JfaWQsIGVycm9yLCBsa2ItPmxrYl9mbGFncywgbXN0eXBlLAogCQkJICBsa2ItPmxrYl93YWl0X3R5cGUsIGxrYi0+bGtiX3Jlc291cmNlLT5yZXNfbmFtZSk7CiAJbXV0ZXhfdW5sb2NrKCZscy0+bHNfd2FpdGVyc19tdXRleCk7CkBAIC04NjMsMjMgKzg2Myw1NSBAQAogICAgcmVxdWVzdCByZXBseSBvbiB0aGUgcmVxdWVzdHF1ZXVlKSBiZXR3ZWVuIGRsbV9yZWNvdmVyX3dhaXRlcnNfcHJlKCkgd2hpY2gKICAgIHNldCBSRVNFTkQgYW5kIGRsbV9yZWNvdmVyX3dhaXRlcnNfcG9zdCgpICovCiAKLXN0YXRpYyBpbnQgX3JlbW92ZV9mcm9tX3dhaXRlcnMoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IG1zdHlwZSkKK3N0YXRpYyBpbnQgX3JlbW92ZV9mcm9tX3dhaXRlcnMoc3RydWN0IGRsbV9sa2IgKmxrYiwgaW50IG1zdHlwZSwKKwkJCQlzdHJ1Y3QgZGxtX21lc3NhZ2UgKm1zKQogewogCXN0cnVjdCBkbG1fbHMgKmxzID0gbGtiLT5sa2JfcmVzb3VyY2UtPnJlc19sczsKIAlpbnQgb3ZlcmxhcF9kb25lID0gMDsKIAogCWlmIChpc19vdmVybGFwX3VubG9jayhsa2IpICYmIChtc3R5cGUgPT0gRExNX01TR19VTkxPQ0tfUkVQTFkpKSB7CisJCWxvZ19kZWJ1ZyhscywgInJlbXdhaXQgJXggdW5sb2NrX3JlcGx5IG92ZXJsYXAiLCBsa2ItPmxrYl9pZCk7CiAJCWxrYi0+bGtiX2ZsYWdzICY9IH5ETE1fSUZMX09WRVJMQVBfVU5MT0NLOwogCQlvdmVybGFwX2RvbmUgPSAxOwogCQlnb3RvIG91dF9kZWw7CiAJfQogCiAJaWYgKGlzX292ZXJsYXBfY2FuY2VsKGxrYikgJiYgKG1zdHlwZSA9PSBETE1fTVNHX0NBTkNFTF9SRVBMWSkpIHsKKwkJbG9nX2RlYnVnKGxzLCAicmVtd2FpdCAleCBjYW5jZWxfcmVwbHkgb3ZlcmxhcCIsIGxrYi0+bGtiX2lkKTsKIAkJbGtiLT5sa2JfZmxhZ3MgJj0gfkRMTV9JRkxfT1ZFUkxBUF9DQU5DRUw7CiAJCW92ZXJsYXBfZG9uZSA9IDE7CiAJCWdvdG8gb3V0X2RlbDsKIAl9CiAKKwkvKiBDYW5jZWwgc3RhdGUgd2FzIHByZWVtcHRpdmVseSBjbGVhcmVkIGJ5IGEgc3VjY2Vzc2Z1bCBjb252ZXJ0LAorCSAgIHNlZSBuZXh0IGNvbW1lbnQsIG5vdGhpbmcgdG8gZG8uICovCisKKwlpZiAoKG1zdHlwZSA9PSBETE1fTVNHX0NBTkNFTF9SRVBMWSkgJiYKKwkgICAgKGxrYi0+bGtiX3dhaXRfdHlwZSAhPSBETE1fTVNHX0NBTkNFTCkpIHsKKwkJbG9nX2RlYnVnKGxzLCAicmVtd2FpdCAleCBjYW5jZWxfcmVwbHkgd2FpdF90eXBlICVkIiwKKwkJCSAgbGtiLT5sa2JfaWQsIGxrYi0+bGtiX3dhaXRfdHlwZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBSZW1vdmUgZm9yIHRoZSBjb252ZXJ0IHJlcGx5LCBhbmQgcHJlbXB0aXZlbHkgcmVtb3ZlIGZvciB0aGUKKwkgICBjYW5jZWwgcmVwbHkuICBBIGNvbnZlcnQgaGFzIGJlZW4gZ3JhbnRlZCB3aGlsZSB0aGVyZSdzIHN0aWxsCisJICAgYW4gb3V0c3RhbmRpbmcgY2FuY2VsIG9uIGl0ICh0aGUgY2FuY2VsIGlzIG1vb3QgYW5kIHRoZSByZXN1bHQKKwkgICBpbiB0aGUgY2FuY2VsIHJlcGx5IHNob3VsZCBiZSAwKS4gIFdlIHByZWVtcHQgdGhlIGNhbmNlbCByZXBseQorCSAgIGJlY2F1c2UgdGhlIGFwcCBnZXRzIHRoZSBjb252ZXJ0IHJlc3VsdCBhbmQgdGhlbiBjYW4gZm9sbG93IHVwCisJICAgd2l0aCBhbm90aGVyIG9wLCBsaWtlIGNvbnZlcnQuICBUaGlzIHN1YnNlcXVlbnQgb3Agd291bGQgc2VlIHRoZQorCSAgIGxpbmdlcmluZyBzdGF0ZSBvZiB0aGUgY2FuY2VsIGFuZCBmYWlsIHdpdGggLUVCVVNZLiAqLworCisJaWYgKChtc3R5cGUgPT0gRExNX01TR19DT05WRVJUX1JFUExZKSAmJgorCSAgICAobGtiLT5sa2Jfd2FpdF90eXBlID09IERMTV9NU0dfQ09OVkVSVCkgJiYKKwkgICAgaXNfb3ZlcmxhcF9jYW5jZWwobGtiKSAmJiBtcyAmJiAhbXMtPm1fcmVzdWx0KSB7CisJCWxvZ19kZWJ1ZyhscywgInJlbXdhaXQgJXggY29udmVydF9yZXBseSB6YXAgb3ZlcmxhcF9jYW5jZWwiLAorCQkJICBsa2ItPmxrYl9pZCk7CisJCWxrYi0+bGtiX3dhaXRfdHlwZSA9IDA7CisJCWxrYi0+bGtiX2ZsYWdzICY9IH5ETE1fSUZMX09WRVJMQVBfQ0FOQ0VMOworCQlsa2ItPmxrYl93YWl0X2NvdW50LS07CisJCWdvdG8gb3V0X2RlbDsKKwl9CisKIAkvKiBOLkIuIHR5cGUgb2YgcmVwbHkgbWF5IG5vdCBhbHdheXMgY29ycmVzcG9uZCB0byB0eXBlIG9mIG9yaWdpbmFsCiAJICAgbXNnIGR1ZSB0byBsb29rdXAtPnJlcXVlc3Qgb3B0aW1pemF0aW9uLCB2ZXJpZnkgb3RoZXJzPyAqLwogCkBAIC04ODgsOCArOTIwLDggQEAKIAkJZ290byBvdXRfZGVsOwogCX0KIAotCWxvZ19lcnJvcihscywgInJlbW92ZV9mcm9tX3dhaXRlcnMgbGtpZCAleCBmbGFncyAleCB0eXBlcyAlZCAlZCIsCi0JCSAgbGtiLT5sa2JfaWQsIGxrYi0+bGtiX2ZsYWdzLCBtc3R5cGUsIGxrYi0+bGtiX3dhaXRfdHlwZSk7CisJbG9nX2Vycm9yKGxzLCAicmVtd2FpdCBlcnJvciAleCByZXBseSAlZCBmbGFncyAleCBubyB3YWl0X3R5cGUiLAorCQkgIGxrYi0+bGtiX2lkLCBtc3R5cGUsIGxrYi0+bGtiX2ZsYWdzKTsKIAlyZXR1cm4gLTE7CiAKICBvdXRfZGVsOgpAQCAtODk5LDcgKzkzMSw3IEBACiAJICAgdGhpcyB3b3VsZCBoYXBwZW4gKi8KIAogCWlmIChvdmVybGFwX2RvbmUgJiYgbGtiLT5sa2Jfd2FpdF90eXBlKSB7Ci0JCWxvZ19lcnJvcihscywgInJlbW92ZV9mcm9tX3dhaXRlcnMgJXggcmVwbHkgJWQgZ2l2ZSB1cCBvbiAlZCIsCisJCWxvZ19lcnJvcihscywgInJlbXdhaXQgZXJyb3IgJXggcmVwbHkgJWQgd2FpdF90eXBlICVkIG92ZXJsYXAiLAogCQkJICBsa2ItPmxrYl9pZCwgbXN0eXBlLCBsa2ItPmxrYl93YWl0X3R5cGUpOwogCQlsa2ItPmxrYl93YWl0X2NvdW50LS07CiAJCWxrYi0+bGtiX3dhaXRfdHlwZSA9IDA7CkBAIC05MjEsNyArOTUzLDcgQEAKIAlpbnQgZXJyb3I7CiAKIAltdXRleF9sb2NrKCZscy0+bHNfd2FpdGVyc19tdXRleCk7Ci0JZXJyb3IgPSBfcmVtb3ZlX2Zyb21fd2FpdGVycyhsa2IsIG1zdHlwZSk7CisJZXJyb3IgPSBfcmVtb3ZlX2Zyb21fd2FpdGVycyhsa2IsIG1zdHlwZSwgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZscy0+bHNfd2FpdGVyc19tdXRleCk7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtOTM2LDcgKzk2OCw3IEBACiAKIAlpZiAobXMgIT0gJmxzLT5sc19zdHViX21zKQogCQltdXRleF9sb2NrKCZscy0+bHNfd2FpdGVyc19tdXRleCk7Ci0JZXJyb3IgPSBfcmVtb3ZlX2Zyb21fd2FpdGVycyhsa2IsIG1zLT5tX3R5cGUpOworCWVycm9yID0gX3JlbW92ZV9mcm9tX3dhaXRlcnMobGtiLCBtcy0+bV90eXBlLCBtcyk7CiAJaWYgKG1zICE9ICZscy0+bHNfc3R1Yl9tcykKIAkJbXV0ZXhfdW5sb2NrKCZscy0+bHNfd2FpdGVyc19tdXRleCk7CiAJcmV0dXJuIGVycm9yOwpAQCAtMjA4Myw2ICsyMTE1LDExIEBACiAJbGtiLT5sa2JfdGltZW91dF9jcyA9IGFyZ3MtPnRpbWVvdXQ7CiAJcnYgPSAwOwogIG91dDoKKwlpZiAocnYpCisJCWxvZ19kZWJ1ZyhscywgInZhbGlkYXRlX2xvY2tfYXJncyAlZCAleCAleCAleCAlZCAlZCAlcyIsCisJCQkgIHJ2LCBsa2ItPmxrYl9pZCwgbGtiLT5sa2JfZmxhZ3MsIGFyZ3MtPmZsYWdzLAorCQkJICBsa2ItPmxrYl9zdGF0dXMsIGxrYi0+bGtiX3dhaXRfdHlwZSwKKwkJCSAgbGtiLT5sa2JfcmVzb3VyY2UtPnJlc19uYW1lKTsKIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTIxNDksNiArMjE4NiwxMyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAorCQkvKiB0aGVyZSdzIG5vdGhpbmcgdG8gY2FuY2VsICovCisJCWlmIChsa2ItPmxrYl9zdGF0dXMgPT0gRExNX0xLU1RTX0dSQU5URUQgJiYKKwkJICAgICFsa2ItPmxrYl93YWl0X3R5cGUpIHsKKwkJCXJ2ID0gLUVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KKwogCQlzd2l0Y2ggKGxrYi0+bGtiX3dhaXRfdHlwZSkgewogCQljYXNlIERMTV9NU0dfTE9PS1VQOgogCQljYXNlIERMTV9NU0dfUkVRVUVTVDoKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb2Nrc3BhY2UuYyBiL2ZzL2RsbS9sb2Nrc3BhY2UuYwppbmRleCBhYTMyZTVmLi5jZDhlMmRmIDEwMDY0NAotLS0gYS9mcy9kbG0vbG9ja3NwYWNlLmMKKysrIGIvZnMvZGxtL2xvY2tzcGFjZS5jCkBAIC00ODcsNyArNDg3LDcgQEAKIAkJZ290byBvdXRfbGtiZnJlZTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAJCUlOSVRfTElTVF9IRUFEKCZscy0+bHNfZGlydGJsW2ldLmxpc3QpOwotCQlyd2xvY2tfaW5pdCgmbHMtPmxzX2RpcnRibFtpXS5sb2NrKTsKKwkJc3Bpbl9sb2NrX2luaXQoJmxzLT5sc19kaXJ0YmxbaV0ubG9jayk7CiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJmxzLT5sc193YWl0ZXJzKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb3djb21tcy5jIGIvZnMvZGxtL2xvd2NvbW1zLmMKaW5kZXggMTAzYTVlYi4uNjA5MTA4YSAxMDA2NDQKLS0tIGEvZnMvZGxtL2xvd2NvbW1zLmMKKysrIGIvZnMvZGxtL2xvd2NvbW1zLmMKQEAgLTIsNyArMiw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKgogKiogIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzICBBbGwgcmlnaHRzIHJlc2VydmVkLgotKiogIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgUmVkIEhhdCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoqCiAqKiAgVGhpcyBjb3B5cmlnaHRlZCBtYXRlcmlhbCBpcyBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgd2lzaGluZyB0byB1c2UsCiAqKiAgbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTIxLDcgKzIxLDcgQEAKICAqCiAgKiBDbHVzdGVyIG5vZGVzIGFyZSByZWZlcnJlZCB0byBieSB0aGVpciBub2RlaWRzLiBub2RlaWRzIGFyZQogICogc2ltcGx5IDMyIGJpdCBudW1iZXJzIHRvIHRoZSBsb2NraW5nIG1vZHVsZSAtIGlmIHRoZXkgbmVlZCB0bwotICogYmUgZXhwYW5kZWQgZm9yIHRoZSBjbHVzdGVyIGluZnJhc3RydWN0dXJlIHRoZW4gdGhhdCBpcyBpdCdzCisgKiBiZSBleHBhbmRlZCBmb3IgdGhlIGNsdXN0ZXIgaW5mcmFzdHJ1Y3R1cmUgdGhlbiB0aGF0IGlzIGl0cwogICogcmVzcG9uc2liaWxpdHkuIEl0IGlzIHRoaXMgbGF5ZXIncwogICogcmVzcG9uc2liaWxpdHkgdG8gcmVzb2x2ZSB0aGVzZSBpbnRvIElQIGFkZHJlc3Mgb3IKICAqIHdoYXRldmVyIGl0IG5lZWRzIGZvciBpbnRlci1ub2RlIGNvbW11bmljYXRpb24uCkBAIC0zNiw5ICszNiw5IEBACiAgKiBvZiBoaWdoIGxvYWQuIEFsc28sIHRoaXMgd2F5LCB0aGUgc2VuZGluZyB0aHJlYWQgY2FuIGNvbGxlY3QgdG9nZXRoZXIKICAqIG1lc3NhZ2VzIGJvdW5kIGZvciBvbmUgbm9kZSBhbmQgc2VuZCB0aGVtIGluIG9uZSBibG9jay4KICAqCi0gKiBsb3djb21tcyB3aWxsIGNob29zZSB0byB1c2Ugd2l0aGVyIFRDUCBvciBTQ1RQIGFzIGl0cyB0cmFuc3BvcnQgbGF5ZXIKKyAqIGxvd2NvbW1zIHdpbGwgY2hvb3NlIHRvIHVzZSBlaXRoZXIgVENQIG9yIFNDVFAgYXMgaXRzIHRyYW5zcG9ydCBsYXllcgogICogZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlICdwcm90b2NvbCcuIFRoaXMgc2hvdWxkIGJlIHNldAotICogdG8gMCAoZGVmYXVsdCkgZm9yIFRDUCBvciAxIGZvciBTQ1RQLiBJdCBzaG91bGRiZSBjb25maWd1cmVkIHVzaW5nIGEKKyAqIHRvIDAgKGRlZmF1bHQpIGZvciBUQ1Agb3IgMSBmb3IgU0NUUC4gSXQgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgdXNpbmcgYQogICogY2x1c3Rlci13aWRlIG1lY2hhbmlzbSBhcyBpdCBtdXN0IGJlIHRoZSBzYW1lIG9uIGFsbCBub2RlcyBvZiB0aGUgY2x1c3RlcgogICogZm9yIHRoZSBETE0gdG8gZnVuY3Rpb24uCiAgKgpAQCAtNDgsMTEgKzQ4LDExIEBACiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjdHAuaD4KICNpbmNsdWRlIDxuZXQvc2N0cC91c2VyLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KIAogI2luY2x1ZGUgImRsbV9pbnRlcm5hbC5oIgogI2luY2x1ZGUgImxvd2NvbW1zLmgiCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNkZWZpbmUgTkVFREVEX1JNRU0gKDQqMTAyNCoxMDI0KQorI2RlZmluZSBDT05OX0hBU0hfU0laRSAzMgogCiBzdHJ1Y3QgY2J1ZiB7CiAJdW5zaWduZWQgaW50IGJhc2U7CkBAIC0xMTQsNiArMTE1LDcgQEAKIAlpbnQgcmV0cmllczsKICNkZWZpbmUgTUFYX0NPTk5FQ1RfUkVUUklFUyAzCiAJaW50IHNjdHBfYXNzb2M7CisJc3RydWN0IGhsaXN0X25vZGUgbGlzdDsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqb3RoZXJjb247CiAJc3RydWN0IHdvcmtfc3RydWN0IHJ3b3JrOyAvKiBSZWNlaXZlIHdvcmtxdWV1ZSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzd29yazsgLyogU2VuZCB3b3JrcXVldWUgKi8KQEAgLTEzOCwxNCArMTQwLDM3IEBACiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJlY3Zfd29ya3F1ZXVlOwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzZW5kX3dvcmtxdWV1ZTsKIAotc3RhdGljIERFRklORV9JRFIoY29ubmVjdGlvbnNfaWRyKTsKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBjb25uZWN0aW9uX2hhc2hbQ09OTl9IQVNIX1NJWkVdOwogc3RhdGljIERFRklORV9NVVRFWChjb25uZWN0aW9uc19sb2NrKTsKLXN0YXRpYyBpbnQgbWF4X25vZGVpZDsKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqY29uX2NhY2hlOwogCiBzdGF0aWMgdm9pZCBwcm9jZXNzX3JlY3Zfc29ja2V0cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgcHJvY2Vzc19zZW5kX3NvY2tldHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAorCisvKiBUaGlzIGlzIGRlbGliZXJhdGVseSB2ZXJ5IHNpbXBsZSBiZWNhdXNlIG1vc3QgY2x1c3RlcnMgaGF2ZSBzaW1wbGUKKyAgIHNlcXVlbnRpYWwgbm9kZWlkcywgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gZ28gc3RyYWlnaHQgdG8gYSBjb25uZWN0aW9uCisgICBzdHJ1Y3QgaW4gdGhlIGFycmF5ICovCitzdGF0aWMgaW5saW5lIGludCBub2RlaWRfaGFzaChpbnQgbm9kZWlkKQoreworCXJldHVybiBub2RlaWQgJiAoQ09OTl9IQVNIX1NJWkUtMSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29ubmVjdGlvbiAqX19maW5kX2NvbihpbnQgbm9kZWlkKQoreworCWludCByOworCXN0cnVjdCBobGlzdF9ub2RlICpoOworCXN0cnVjdCBjb25uZWN0aW9uICpjb247CisKKwlyID0gbm9kZWlkX2hhc2gobm9kZWlkKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbiwgaCwgJmNvbm5lY3Rpb25faGFzaFtyXSwgbGlzdCkgeworCQlpZiAoY29uLT5ub2RlaWQgPT0gbm9kZWlkKQorCQkJcmV0dXJuIGNvbjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIC8qCiAgKiBJZiAnYWxsb2NhdGlvbicgaXMgemVybyB0aGVuIHdlIGRvbid0IGF0dGVtcHQgdG8gY3JlYXRlIGEgbmV3CiAgKiBjb25uZWN0aW9uIHN0cnVjdHVyZSBmb3IgdGhpcyBub2RlLgpAQCAtMTU0LDMxICsxNzksMTcgQEAKIHsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uID0gTlVMTDsKIAlpbnQgcjsKLQlpbnQgbjsKIAotCWNvbiA9IGlkcl9maW5kKCZjb25uZWN0aW9uc19pZHIsIG5vZGVpZCk7CisJY29uID0gX19maW5kX2Nvbihub2RlaWQpOwogCWlmIChjb24gfHwgIWFsbG9jKQogCQlyZXR1cm4gY29uOwogCi0JciA9IGlkcl9wcmVfZ2V0KCZjb25uZWN0aW9uc19pZHIsIGFsbG9jKTsKLQlpZiAoIXIpCi0JCXJldHVybiBOVUxMOwotCiAJY29uID0ga21lbV9jYWNoZV96YWxsb2MoY29uX2NhY2hlLCBhbGxvYyk7CiAJaWYgKCFjb24pCiAJCXJldHVybiBOVUxMOwogCi0JciA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZjb25uZWN0aW9uc19pZHIsIGNvbiwgbm9kZWlkLCAmbik7Ci0JaWYgKHIpIHsKLQkJa21lbV9jYWNoZV9mcmVlKGNvbl9jYWNoZSwgY29uKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKG4gIT0gbm9kZWlkKSB7Ci0JCWlkcl9yZW1vdmUoJmNvbm5lY3Rpb25zX2lkciwgbik7Ci0JCWttZW1fY2FjaGVfZnJlZShjb25fY2FjaGUsIGNvbik7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlyID0gbm9kZWlkX2hhc2gobm9kZWlkKTsKKwlobGlzdF9hZGRfaGVhZCgmY29uLT5saXN0LCAmY29ubmVjdGlvbl9oYXNoW3JdKTsKIAogCWNvbi0+bm9kZWlkID0gbm9kZWlkOwogCW11dGV4X2luaXQoJmNvbi0+c29ja19tdXRleCk7CkBAIC0xODksMTkgKzIwMCwzMCBAQAogCiAJLyogU2V0dXAgYWN0aW9uIHBvaW50ZXJzIGZvciBjaGlsZCBzb2NrZXRzICovCiAJaWYgKGNvbi0+bm9kZWlkKSB7Ci0JCXN0cnVjdCBjb25uZWN0aW9uICp6ZXJvY29uID0gaWRyX2ZpbmQoJmNvbm5lY3Rpb25zX2lkciwgMCk7CisJCXN0cnVjdCBjb25uZWN0aW9uICp6ZXJvY29uID0gX19maW5kX2NvbigwKTsKIAogCQljb24tPmNvbm5lY3RfYWN0aW9uID0gemVyb2Nvbi0+Y29ubmVjdF9hY3Rpb247CiAJCWlmICghY29uLT5yeF9hY3Rpb24pCiAJCQljb24tPnJ4X2FjdGlvbiA9IHplcm9jb24tPnJ4X2FjdGlvbjsKIAl9CiAKLQlpZiAobm9kZWlkID4gbWF4X25vZGVpZCkKLQkJbWF4X25vZGVpZCA9IG5vZGVpZDsKLQogCXJldHVybiBjb247CiB9CiAKKy8qIExvb3Agcm91bmQgYWxsIGNvbm5lY3Rpb25zICovCitzdGF0aWMgdm9pZCBmb3JlYWNoX2Nvbm4odm9pZCAoKmNvbm5fZnVuYykoc3RydWN0IGNvbm5lY3Rpb24gKmMpKQoreworCWludCBpOworCXN0cnVjdCBobGlzdF9ub2RlICpoLCAqbjsKKwlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOworCisJZm9yIChpID0gMDsgaSA8IENPTk5fSEFTSF9TSVpFOyBpKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb24sIGgsIG4sICZjb25uZWN0aW9uX2hhc2hbaV0sIGxpc3QpeworCQkJY29ubl9mdW5jKGNvbik7CisJCX0KKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29ubmVjdGlvbiAqbm9kZWlkMmNvbihpbnQgbm9kZWlkLCBnZnBfdCBhbGxvY2F0aW9uKQogewogCXN0cnVjdCBjb25uZWN0aW9uICpjb247CkBAIC0yMTcsMTQgKzIzOSwxNyBAQAogc3RhdGljIHN0cnVjdCBjb25uZWN0aW9uICphc3NvYzJjb24oaW50IGFzc29jX2lkKQogewogCWludCBpOworCXN0cnVjdCBobGlzdF9ub2RlICpoOwogCXN0cnVjdCBjb25uZWN0aW9uICpjb247CiAKIAltdXRleF9sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKLQlmb3IgKGk9MDsgaTw9bWF4X25vZGVpZDsgaSsrKSB7Ci0JCWNvbiA9IF9fbm9kZWlkMmNvbihpLCAwKTsKLQkJaWYgKGNvbiAmJiBjb24tPnNjdHBfYXNzb2MgPT0gYXNzb2NfaWQpIHsKLQkJCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7Ci0JCQlyZXR1cm4gY29uOworCisJZm9yIChpID0gMCA7IGkgPCBDT05OX0hBU0hfU0laRTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbiwgaCwgJmNvbm5lY3Rpb25faGFzaFtpXSwgbGlzdCkgeworCQkJaWYgKGNvbiAmJiBjb24tPnNjdHBfYXNzb2MgPT0gYXNzb2NfaWQpIHsKKwkJCQltdXRleF91bmxvY2soJmNvbm5lY3Rpb25zX2xvY2spOworCQkJCXJldHVybiBjb247CisJCQl9CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKQEAgLTI1MCw4ICsyNzUsNyBAQAogCX0gZWxzZSB7CiAJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmluNiAgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSAmYWRkcjsKIAkJc3RydWN0IHNvY2thZGRyX2luNiAqcmV0NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHJldGFkZHI7Ci0JCW1lbWNweSgmcmV0Ni0+c2luNl9hZGRyLCAmaW42LT5zaW42X2FkZHIsCi0JCSAgICAgICBzaXplb2YoaW42LT5zaW42X2FkZHIpKTsKKwkJaXB2Nl9hZGRyX2NvcHkoJnJldDYtPnNpbjZfYWRkciwgJmluNi0+c2luNl9hZGRyKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTM3NiwyNSArNDAwLDIzIEBACiAJCWxvZ19wcmludCgic2VuZCBFT0YgdG8gbm9kZSBmYWlsZWQ6ICVkIiwgcmV0KTsKIH0KIAorc3RhdGljIHZvaWQgc2N0cF9pbml0X2ZhaWxlZF9mb3JlYWNoKHN0cnVjdCBjb25uZWN0aW9uICpjb24pCit7CisJY29uLT5zY3RwX2Fzc29jID0gMDsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KENGX0NPTk5FQ1RfUEVORElORywgJmNvbi0+ZmxhZ3MpKSB7CisJCWlmICghdGVzdF9hbmRfc2V0X2JpdChDRl9XUklURV9QRU5ESU5HLCAmY29uLT5mbGFncykpCisJCQlxdWV1ZV93b3JrKHNlbmRfd29ya3F1ZXVlLCAmY29uLT5zd29yayk7CisJfQorfQorCiAvKiBJTklUIGZhaWxlZCBidXQgd2UgZG9uJ3Qga25vdyB3aGljaCBub2RlLi4uCiAgICByZXN0YXJ0IElOSVQgb24gYWxsIHBlbmRpbmcgbm9kZXMgKi8KIHN0YXRpYyB2b2lkIHNjdHBfaW5pdF9mYWlsZWQodm9pZCkKIHsKLQlpbnQgaTsKLQlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOwotCiAJbXV0ZXhfbG9jaygmY29ubmVjdGlvbnNfbG9jayk7Ci0JZm9yIChpPTE7IGk8PW1heF9ub2RlaWQ7IGkrKykgewotCQljb24gPSBfX25vZGVpZDJjb24oaSwgMCk7Ci0JCWlmICghY29uKQotCQkJY29udGludWU7Ci0JCWNvbi0+c2N0cF9hc3NvYyA9IDA7Ci0JCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ0ZfQ09OTkVDVF9QRU5ESU5HLCAmY29uLT5mbGFncykpIHsKLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChDRl9XUklURV9QRU5ESU5HLCAmY29uLT5mbGFncykpIHsKLQkJCQlxdWV1ZV93b3JrKHNlbmRfd29ya3F1ZXVlLCAmY29uLT5zd29yayk7Ci0JCQl9Ci0JCX0KLQl9CisKKwlmb3JlYWNoX2Nvbm4oc2N0cF9pbml0X2ZhaWxlZF9mb3JlYWNoKTsKKwogCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7CiB9CiAKQEAgLTEzMTMsMTMgKzEzMzUsMTAgQEAKIAogc3RhdGljIHZvaWQgY2xlYW5fb25lX3dyaXRlcXVldWUoc3RydWN0IGNvbm5lY3Rpb24gKmNvbikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCXN0cnVjdCBsaXN0X2hlYWQgKnRlbXA7CisJc3RydWN0IHdyaXRlcXVldWVfZW50cnkgKmUsICpzYWZlOwogCiAJc3Bpbl9sb2NrKCZjb24tPndyaXRlcXVldWVfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKGxpc3QsIHRlbXAsICZjb24tPndyaXRlcXVldWUpIHsKLQkJc3RydWN0IHdyaXRlcXVldWVfZW50cnkgKmUgPQotCQkJbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3Qgd3JpdGVxdWV1ZV9lbnRyeSwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIHNhZmUsICZjb24tPndyaXRlcXVldWUsIGxpc3QpIHsKIAkJbGlzdF9kZWwoJmUtPmxpc3QpOwogCQlmcmVlX2VudHJ5KGUpOwogCX0KQEAgLTEzNjksMTQgKzEzODgsNyBAQAogLyogRGlzY2FyZCBhbGwgZW50cmllcyBvbiB0aGUgd3JpdGUgcXVldWVzICovCiBzdGF0aWMgdm9pZCBjbGVhbl93cml0ZXF1ZXVlcyh2b2lkKQogewotCWludCBub2RlaWQ7Ci0KLQlmb3IgKG5vZGVpZCA9IDE7IG5vZGVpZCA8PSBtYXhfbm9kZWlkOyBub2RlaWQrKykgewotCQlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uID0gX19ub2RlaWQyY29uKG5vZGVpZCwgMCk7Ci0KLQkJaWYgKGNvbikKLQkJCWNsZWFuX29uZV93cml0ZXF1ZXVlKGNvbik7Ci0JfQorCWZvcmVhY2hfY29ubihjbGVhbl9vbmVfd3JpdGVxdWV1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtfc3RvcCh2b2lkKQpAQCAtMTQwNiwyMyArMTQxOCwyOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzdG9wX2Nvbm4oc3RydWN0IGNvbm5lY3Rpb24gKmNvbikKK3sKKwljb24tPmZsYWdzIHw9IDB4MEY7CisJaWYgKGNvbi0+c29jaykKKwkJY29uLT5zb2NrLT5zay0+c2tfdXNlcl9kYXRhID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZnJlZV9jb25uKHN0cnVjdCBjb25uZWN0aW9uICpjb24pCit7CisJY2xvc2VfY29ubmVjdGlvbihjb24sIHRydWUpOworCWlmIChjb24tPm90aGVyY29uKQorCQlrbWVtX2NhY2hlX2ZyZWUoY29uX2NhY2hlLCBjb24tPm90aGVyY29uKTsKKwlobGlzdF9kZWwoJmNvbi0+bGlzdCk7CisJa21lbV9jYWNoZV9mcmVlKGNvbl9jYWNoZSwgY29uKTsKK30KKwogdm9pZCBkbG1fbG93Y29tbXNfc3RvcCh2b2lkKQogewotCWludCBpOwotCXN0cnVjdCBjb25uZWN0aW9uICpjb247Ci0KIAkvKiBTZXQgYWxsIHRoZSBmbGFncyB0byBwcmV2ZW50IGFueQogCSAgIHNvY2tldCBhY3Rpdml0eS4KIAkqLwogCW11dGV4X2xvY2soJmNvbm5lY3Rpb25zX2xvY2spOwotCWZvciAoaSA9IDA7IGkgPD0gbWF4X25vZGVpZDsgaSsrKSB7Ci0JCWNvbiA9IF9fbm9kZWlkMmNvbihpLCAwKTsKLQkJaWYgKGNvbikgewotCQkJY29uLT5mbGFncyB8PSAweDBGOwotCQkJaWYgKGNvbi0+c29jaykKLQkJCQljb24tPnNvY2stPnNrLT5za191c2VyX2RhdGEgPSBOVUxMOwotCQl9Ci0JfQorCWZvcmVhY2hfY29ubihzdG9wX2Nvbm4pOwogCW11dGV4X3VubG9jaygmY29ubmVjdGlvbnNfbG9jayk7CiAKIAl3b3JrX3N0b3AoKTsKQEAgLTE0MzAsMjUgKzE0NDgsMjAgQEAKIAltdXRleF9sb2NrKCZjb25uZWN0aW9uc19sb2NrKTsKIAljbGVhbl93cml0ZXF1ZXVlcygpOwogCi0JZm9yIChpID0gMDsgaSA8PSBtYXhfbm9kZWlkOyBpKyspIHsKLQkJY29uID0gX19ub2RlaWQyY29uKGksIDApOwotCQlpZiAoY29uKSB7Ci0JCQljbG9zZV9jb25uZWN0aW9uKGNvbiwgdHJ1ZSk7Ci0JCQlpZiAoY29uLT5vdGhlcmNvbikKLQkJCQlrbWVtX2NhY2hlX2ZyZWUoY29uX2NhY2hlLCBjb24tPm90aGVyY29uKTsKLQkJCWttZW1fY2FjaGVfZnJlZShjb25fY2FjaGUsIGNvbik7Ci0JCX0KLQl9Ci0JbWF4X25vZGVpZCA9IDA7CisJZm9yZWFjaF9jb25uKGZyZWVfY29ubik7CisKIAltdXRleF91bmxvY2soJmNvbm5lY3Rpb25zX2xvY2spOwogCWttZW1fY2FjaGVfZGVzdHJveShjb25fY2FjaGUpOwotCWlkcl9pbml0KCZjb25uZWN0aW9uc19pZHIpOwogfQogCiBpbnQgZGxtX2xvd2NvbW1zX3N0YXJ0KHZvaWQpCiB7CiAJaW50IGVycm9yID0gLUVJTlZBTDsKIAlzdHJ1Y3QgY29ubmVjdGlvbiAqY29uOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IENPTk5fSEFTSF9TSVpFOyBpKyspCisJCUlOSVRfSExJU1RfSEVBRCgmY29ubmVjdGlvbl9oYXNoW2ldKTsKIAogCWluaXRfbG9jYWwoKTsKIAlpZiAoIWRsbV9sb2NhbF9jb3VudCkgewpkaWZmIC0tZ2l0IGEvZnMvZGxtL3VzZXIuYyBiL2ZzL2RsbS91c2VyLmMKaW5kZXggMDY1MTQ5ZS4uZWJjZTk5NCAxMDA2NDQKLS0tIGEvZnMvZGxtL3VzZXIuYworKysgYi9mcy9kbG0vdXNlci5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA4IFJlZCBIYXQsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAogICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAKIAogc3RhdGljIHZvaWQgY29tcGF0X2lucHV0KHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdCAqa2IsCiAJCQkgc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIgKmtiMzIsCi0JCQkgc2l6ZV90IGNvdW50KQorCQkJIGludCBuYW1lbGVuKQogewogCWtiLT52ZXJzaW9uWzBdID0ga2IzMi0+dmVyc2lvblswXTsKIAlrYi0+dmVyc2lvblsxXSA9IGtiMzItPnZlcnNpb25bMV07CkBAIC05Niw4ICs5Niw3IEBACiAJICAgIGtiLT5jbWQgPT0gRExNX1VTRVJfUkVNT1ZFX0xPQ0tTUEFDRSkgewogCQlrYi0+aS5sc3BhY2UuZmxhZ3MgPSBrYjMyLT5pLmxzcGFjZS5mbGFnczsKIAkJa2ItPmkubHNwYWNlLm1pbm9yID0ga2IzMi0+aS5sc3BhY2UubWlub3I7Ci0JCW1lbWNweShrYi0+aS5sc3BhY2UubmFtZSwga2IzMi0+aS5sc3BhY2UubmFtZSwgY291bnQgLQotCQkJb2Zmc2V0b2Yoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIsIGkubHNwYWNlLm5hbWUpKTsKKwkJbWVtY3B5KGtiLT5pLmxzcGFjZS5uYW1lLCBrYjMyLT5pLmxzcGFjZS5uYW1lLCBuYW1lbGVuKTsKIAl9IGVsc2UgaWYgKGtiLT5jbWQgPT0gRExNX1VTRVJfUFVSR0UpIHsKIAkJa2ItPmkucHVyZ2Uubm9kZWlkID0ga2IzMi0+aS5wdXJnZS5ub2RlaWQ7CiAJCWtiLT5pLnB1cmdlLnBpZCA9IGtiMzItPmkucHVyZ2UucGlkOwpAQCAtMTE1LDggKzExNCw3IEBACiAJCWtiLT5pLmxvY2suYmFzdGFkZHIgPSAodm9pZCAqKShsb25nKWtiMzItPmkubG9jay5iYXN0YWRkcjsKIAkJa2ItPmkubG9jay5sa3NiID0gKHZvaWQgKikobG9uZylrYjMyLT5pLmxvY2subGtzYjsKIAkJbWVtY3B5KGtiLT5pLmxvY2subHZiLCBrYjMyLT5pLmxvY2subHZiLCBETE1fVVNFUl9MVkJfTEVOKTsKLQkJbWVtY3B5KGtiLT5pLmxvY2submFtZSwga2IzMi0+aS5sb2NrLm5hbWUsIGNvdW50IC0KLQkJCW9mZnNldG9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyLCBpLmxvY2submFtZSkpOworCQltZW1jcHkoa2ItPmkubG9jay5uYW1lLCBrYjMyLT5pLmxvY2submFtZSwgbmFtZWxlbik7CiAJfQogfQogCkBAIC01MzksOSArNTM3LDE2IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCWlmICgha2J1Zi0+aXM2NGJpdCkgewogCQlzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMiAqazMyYnVmOworCQlpbnQgbmFtZWxlbiA9IDA7CisKKwkJaWYgKGNvdW50ID4gc2l6ZW9mKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyKSkKKwkJCW5hbWVsZW4gPSBjb3VudCAtIHNpemVvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QzMik7CisKIAkJazMyYnVmID0gKHN0cnVjdCBkbG1fd3JpdGVfcmVxdWVzdDMyICopa2J1ZjsKLQkJa2J1ZiA9IGttYWxsb2MoY291bnQgKyAxICsgKHNpemVvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QpIC0KLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGRsbV93cml0ZV9yZXF1ZXN0MzIpKSwgR0ZQX0tFUk5FTCk7CisKKwkJLyogYWRkIDEgYWZ0ZXIgbmFtZWxlbiBzbyB0aGF0IHRoZSBuYW1lIHN0cmluZyBpcyB0ZXJtaW5hdGVkICovCisJCWtidWYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGxtX3dyaXRlX3JlcXVlc3QpICsgbmFtZWxlbiArIDEsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJCWlmICgha2J1ZikgewogCQkJa2ZyZWUoazMyYnVmKTsKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtNTQ5LDcgKzU1NCw4IEBACiAKIAkJaWYgKHByb2MpCiAJCQlzZXRfYml0KERMTV9QUk9DX0ZMQUdTX0NPTVBBVCwgJnByb2MtPmZsYWdzKTsKLQkJY29tcGF0X2lucHV0KGtidWYsIGszMmJ1ZiwgY291bnQgKyAxKTsKKworCQljb21wYXRfaW5wdXQoa2J1ZiwgazMyYnVmLCBuYW1lbGVuKTsKIAkJa2ZyZWUoazMyYnVmKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2RxdW90LmMgYi9mcy9kcXVvdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiY2EzY2FjLi4wMDAwMDAwCi0tLSBhL2ZzL2RxdW90LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEwICswLDAgQEAKLS8qCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGlza3F1b3RhIHN5c3RlbSBmb3IgdGhlIExJTlVYIG9wZXJhdGluZyBzeXN0ZW0uIFFVT1RBCi0gKiBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgQlNEIHN5c3RlbSBjYWxsIGludGVyZmFjZSBhcyB0aGUgbWVhbnMgb2YKLSAqIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdXNlciBsZXZlbC4gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBnZW5lcmljIHJvdXRpbmVzCi0gKiBjYWxsZWQgYnkgdGhlIGRpZmZlcmVudCBmaWxlc3lzdGVtcyBvbiBhbGxvY2F0aW9uIG9mIGFuIGlub2RlIG9yIGJsb2NrLgotICogVGhlc2Ugcm91dGluZXMgdGFrZSBjYXJlIG9mIHRoZSBhZG1pbmlzdHJhdGlvbiBuZWVkZWQgdG8gaGF2ZSBhIGNvbnNpc3RlbnQKLSAqIGRpc2txdW90YSB0cmFja2luZyBzeXN0ZW0uIFRoZSBpZGVhcyBvZiBib3RoIHVzZXIgYW5kIGdyb3VwIHF1b3RhcyBhcmUgYmFzZWQKLSAqIG9uIHRoZSBNZWxib3VybmUgcXVvdGEgc3lzdGVtIGFzIHVzZWQgb24gQlNEIGRlcml2ZWQgc3lzdGVtcy4gVGhlIGludGVybmFsCi0gKiBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBvbmUgb2YgdGhlIHNldmVyYWwgdmFyaWFudHMgb2YgdGhlIExJTlVYCi0gKiBpbm9kZS1zdWJzeXN0ZW0gd2l0aCBhZGRlZCBjb21wbGV4aXR5IG9mIHRoZSBkaXNrcXVvdGEgc3lzdGVtLgotICogCi0gKiBBdXRob3I6CU1hcmNvIHZhbiBXaWVyaW5nZW4gPG12d0BwbGFuZXRzLmVsbS5uZXQ+Ci0gKgotICogRml4ZXM6ICAgRG1pdHJ5IEdvcm9kY2hhbmluIDxwZ21kc2dAaWJpLmNvbT4sIDExIEZlYiA5NgotICoKLSAqCQlSZXZpc2VkIGxpc3QgbWFuYWdlbWVudCB0byBhdm9pZCByYWNlcwotICoJCS0tIEJpbGwgSGF3ZXMsIDx3aGF3ZXNAc3Rhci5uZXQ+LCA5Lzk4Ci0gKgotICoJCUZpeGVkIHJhY2VzIGluIGRxdW90X3RyYW5zZmVyKCksIGRxZ2V0KCkgYW5kIGRxdW90X2FsbG9jXy4uLigpLgotICoJCUFzIHRoZSBjb25zZXF1ZW5jZSB0aGUgbG9ja2luZyB3YXMgbW92ZWQgZnJvbSBkcXVvdF9kZWNyXy4uLigpLAotICoJCWRxdW90X2luY3JfLi4uKCkgdG8gY2FsbGluZyBmdW5jdGlvbnMuCi0gKgkJaW52YWxpZGF0ZV9kcXVvdHMoKSBub3cgd3JpdGVzIG1vZGlmaWVkIGRxdW90cy4KLSAqCQlTZXJpYWxpemVkIHF1b3RhX29mZigpIGFuZCBxdW90YV9vbigpIGZvciBtb3VudCBwb2ludC4KLSAqCQlGaXhlZCBhIGZldyBidWdzIGluIGdyb3dfZHF1b3RzKCkuCi0gKgkJRml4ZWQgZGVhZGxvY2sgaW4gd3JpdGVfZHF1b3QoKSAtIHdlIG5vIGxvbmdlciBhY2NvdW50IHF1b3RhcyBvbgotICoJCXF1b3RhIGZpbGVzCi0gKgkJcmVtb3ZlX2RxdW90X3JlZigpIG1vdmVkIHRvIGlub2RlLmMgLSBpdCBub3cgdHJhdmVyc2VzIHRocm91Z2ggaW5vZGVzCi0gKgkJYWRkX2RxdW90X3JlZigpIHJlc3RhcnRzIGFmdGVyIGJsb2NraW5nCi0gKgkJQWRkZWQgY2hlY2sgZm9yIGJvZ3VzIHVpZCBhbmQgZml4ZWQgY2hlY2sgZm9yIGdyb3VwIGluIHF1b3RhY3RsLgotICoJCUphbiBLYXJhLCA8amFja0BzdXNlLmN6Piwgc3BvbnNvcmVkIGJ5IFN1U0UgQ1IsIDEwLTExLzk5Ci0gKgotICoJCVVzZWQgc3RydWN0IGxpc3RfaGVhZCBpbnN0ZWFkIG9mIG93biBsaXN0IHN0cnVjdAotICoJCUludmFsaWRhdGlvbiBvZiByZWZlcmVuY2VkIGRxdW90cyBpcyBubyBsb25nZXIgcG9zc2libGUKLSAqCQlJbXByb3ZlZCBmcmVlX2RxdW90cyBsaXN0IG1hbmFnZW1lbnQKLSAqCQlRdW90YSBhbmQgaV9ibG9ja3MgYXJlIG5vdyB1cGRhdGVkIGluIG9uZSBwbGFjZSB0byBhdm9pZCByYWNlcwotICoJCVdhcm5pbmdzIGFyZSBub3cgZGVsYXllZCBzbyB3ZSB3b24ndCBibG9jayBpbiBjcml0aWNhbCBzZWN0aW9uCi0gKgkJV3JpdGUgdXBkYXRlZCBub3QgdG8gcmVxdWlyZSBkcXVvdCBsb2NrCi0gKgkJSmFuIEthcmEsIDxqYWNrQHN1c2UuY3o+LCA5LzIwMDAKLSAqCi0gKgkJQWRkZWQgZHluYW1pYyBxdW90YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbgotICoJCUphbiBLYXJhIDxqYWNrQHN1c2UuY3o+IDEyLzIwMDAKLSAqCi0gKgkJUmV3cml0dGVuIHF1b3RhIGludGVyZmFjZS4gSW1wbGVtZW50ZWQgbmV3IHF1b3RhIGZvcm1hdCBhbmQKLSAqCQlmb3JtYXRzIHJlZ2lzdGVyaW5nLgotICoJCUphbiBLYXJhLCA8amFja0BzdXNlLmN6PiwgMjAwMSwyMDAyCi0gKgotICoJCU5ldyBTTVAgbG9ja2luZy4KLSAqCQlKYW4gS2FyYSwgPGphY2tAc3VzZS5jej4sIDEwLzIwMDIKLSAqCi0gKgkJQWRkZWQgam91cm5hbGxlZCBxdW90YSBzdXBwb3J0LCBmaXggbG9jayBpbnZlcnNpb24gcHJvYmxlbXMKLSAqCQlKYW4gS2FyYSwgPGphY2tAc3VzZS5jej4sIDIwMDMsMjAwNAotICoKLSAqIChDKSBDb3B5cmlnaHQgMTk5NCAtIDE5OTcgTWFyY28gdmFuIFdpZXJpbmdlbiAKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPiAvKiBmb3IgaW5vZGVfbG9jaywgb2RkbHkgZW5vdWdoLi4gKi8KLSNpZmRlZiBDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UKLSNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgotI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2RlZmluZSBfX0RRVU9UX1BBUkFOT0lBCi0KLS8qCi0gKiBUaGVyZSBhcmUgdGhyZWUgcXVvdGEgU01QIGxvY2tzLiBkcV9saXN0X2xvY2sgcHJvdGVjdHMgYWxsIGxpc3RzIHdpdGggcXVvdGFzCi0gKiBhbmQgcXVvdGEgZm9ybWF0cywgZHFzdGF0cyBzdHJ1Y3R1cmUgY29udGFpbmluZyBzdGF0aXN0aWNzIGFib3V0IHRoZSBsaXN0cwotICogZHFfZGF0YV9sb2NrIHByb3RlY3RzIGRhdGEgZnJvbSBkcV9kcWIgYW5kIGFsc28gbWVtX2RxaW5mbyBzdHJ1Y3R1cmVzIGFuZAotICogYWxzbyBndWFyZHMgY29uc2lzdGVuY3kgb2YgZHF1b3QtPmRxX2RxYiB3aXRoIGlub2RlLT5pX2Jsb2NrcywgaV9ieXRlcy4KLSAqIGlfYmxvY2tzIGFuZCBpX2J5dGVzIHVwZGF0ZXMgaXRzZWxmIGFyZSBndWFyZGVkIGJ5IGlfbG9jayBhY3F1aXJlZCBkaXJlY3RseQotICogaW4gaW5vZGVfYWRkX2J5dGVzKCkgYW5kIGlub2RlX3N1Yl9ieXRlcygpLiBkcV9zdGF0ZV9sb2NrIHByb3RlY3RzCi0gKiBtb2RpZmljYXRpb25zIG9mIHF1b3RhIHN0YXRlIChvbiBxdW90YW9uIGFuZCBxdW90YW9mZikgYW5kIHJlYWRlcnMgd2hvIGNhcmUKLSAqIGFib3V0IGxhdGVzdCB2YWx1ZXMgdGFrZSBpdCBhcyB3ZWxsLgotICoKLSAqIFRoZSBzcGlubG9jayBvcmRlcmluZyBpcyBoZW5jZTogZHFfZGF0YV9sb2NrID4gZHFfbGlzdF9sb2NrID4gaV9sb2NrLAotICogICBkcV9saXN0X2xvY2sgPiBkcV9zdGF0ZV9sb2NrCi0gKgotICogTm90ZSB0aGF0IHNvbWUgdGhpbmdzIChlZy4gc2IgcG9pbnRlciwgdHlwZSwgaWQpIGRvZXNuJ3QgY2hhbmdlIGR1cmluZwotICogdGhlIGxpZmUgb2YgdGhlIGRxdW90IHN0cnVjdHVyZSBhbmQgc28gbmVlZG4ndCB0byBiZSBwcm90ZWN0ZWQgYnkgYSBsb2NrCi0gKgotICogQW55IG9wZXJhdGlvbiB3b3JraW5nIG9uIGRxdW90cyB2aWEgaW5vZGUgcG9pbnRlcnMgbXVzdCBob2xkIGRxcHRyX3NlbS4gIElmCi0gKiBvcGVyYXRpb24gaXMganVzdCByZWFkaW5nIHBvaW50ZXJzIGZyb20gaW5vZGUgKG9yIG5vdCB1c2luZyB0aGVtIGF0IGFsbCkgdGhlCi0gKiByZWFkIGxvY2sgaXMgZW5vdWdoLiBJZiBwb2ludGVycyBhcmUgYWx0ZXJlZCBmdW5jdGlvbiBtdXN0IGhvbGQgd3JpdGUgbG9jawotICogKHRoZXNlIGxvY2tpbmcgcnVsZXMgYWxzbyBhcHBseSBmb3IgU19OT1FVT1RBIGZsYWcgaW4gdGhlIGlub2RlIC0gbm90ZSB0aGF0Ci0gKiBmb3IgYWx0ZXJpbmcgdGhlIGZsYWcgaV9tdXRleCBpcyBhbHNvIG5lZWRlZCkuCi0gKgotICogRWFjaCBkcXVvdCBoYXMgaXRzIGRxX2xvY2sgbXV0ZXguIExvY2tlZCBkcXVvdHMgbWlnaHQgbm90IGJlIHJlZmVyZW5jZWQKLSAqIGZyb20gaW5vZGVzIChkcXVvdF9hbGxvY19zcGFjZSgpIGFuZCBzdWNoIGRvbid0IGNoZWNrIHRoZSBkcV9sb2NrKS4KLSAqIEN1cnJlbnRseSBkcXVvdCBpcyBsb2NrZWQgb25seSB3aGVuIGl0IGlzIGJlaW5nIHJlYWQgdG8gbWVtb3J5IChvciBzcGFjZSBmb3IKLSAqIGl0IGlzIGJlaW5nIGFsbG9jYXRlZCkgb24gdGhlIGZpcnN0IGRxZ2V0KCkgYW5kIHdoZW4gaXQgaXMgYmVpbmcgcmVsZWFzZWQgb24KLSAqIHRoZSBsYXN0IGRxcHV0KCkuIFRoZSBhbGxvY2F0aW9uIGFuZCByZWxlYXNlIG9wYXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQgYnkKLSAqIHRoZSBkcV9sb2NrIGFuZCBieSBjaGVja2luZyB0aGUgdXNlIGNvdW50IGluIGRxdW90X3JlbGVhc2UoKS4gIFdyaXRlCi0gKiBvcGVyYXRpb25zIG9uIGRxdW90cyBkb24ndCBob2xkIGRxX2xvY2sgYXMgdGhleSBjb3B5IGRhdGEgdW5kZXIgZHFfZGF0YV9sb2NrCi0gKiBzcGlubG9jayB0byBpbnRlcm5hbCBidWZmZXJzIGJlZm9yZSB3cml0aW5nLgotICoKLSAqIExvY2sgb3JkZXJpbmcgKGluY2x1ZGluZyByZWxhdGVkIFZGUyBsb2NrcykgaXMgdGhlIGZvbGxvd2luZzoKLSAqICAgaV9tdXRleCA+IGRxb25vZmZfc2VtID4gam91cm5hbF9sb2NrID4gZHFwdHJfc2VtID4gZHF1b3QtPmRxX2xvY2sgPgotICogICBkcWlvX211dGV4Ci0gKiBUaGUgbG9jayBvcmRlcmluZyBvZiBkcXB0cl9zZW0gaW1wb3NlZCBieSBxdW90YSBjb2RlIGlzIG9ubHkgZHFvbm9mZl9zZW0gPgotICogZHFwdHJfc2VtLiBCdXQgZmlsZXN5c3RlbSBoYXMgdG8gY291bnQgd2l0aCB0aGUgZmFjdCB0aGF0IGZ1bmN0aW9ucyBzdWNoIGFzCi0gKiBkcXVvdF9hbGxvY19zcGFjZSgpIGFjcXVpcmUgZHFwdHJfc2VtIGFuZCB0aGV5IHVzdWFsbHkgaGF2ZSB0byBiZSBjYWxsZWQKLSAqIGZyb20gaW5zaWRlIGEgdHJhbnNhY3Rpb24gdG8ga2VlcCBmaWxlc3lzdGVtIGNvbnNpc3RlbmN5IGFmdGVyIGEgY3Jhc2guIEFsc28KLSAqIGZpbGVzeXN0ZW1zIHVzdWFsbHkgd2FudCB0byBkbyBzb21lIElPIG9uIGRxdW90IGZyb20gLT5tYXJrX2RpcnR5IHdoaWNoIGlzCi0gKiBjYWxsZWQgd2l0aCBkcXB0cl9zZW0gaGVsZC4KLSAqIGlfbXV0ZXggb24gcXVvdGEgZmlsZXMgaXMgc3BlY2lhbCAoaXQncyBiZWxvdyBkcWlvX211dGV4KQotICovCi0KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHFfbGlzdF9sb2NrKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHFfc3RhdGVfbG9jayk7Ci1ERUZJTkVfU1BJTkxPQ0soZHFfZGF0YV9sb2NrKTsKLQotc3RhdGljIGNoYXIgKnF1b3RhdHlwZXNbXSA9IElOSVRRRk5BTUVTOwotc3RhdGljIHN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqcXVvdGFfZm9ybWF0czsJLyogTGlzdCBvZiByZWdpc3RlcmVkIGZvcm1hdHMgKi8KLXN0YXRpYyBzdHJ1Y3QgcXVvdGFfbW9kdWxlX25hbWUgbW9kdWxlX25hbWVzW10gPSBJTklUX1FVT1RBX01PRFVMRV9OQU1FUzsKLQotLyogU0xBQiBjYWNoZSBmb3IgZHF1b3Qgc3RydWN0dXJlcyAqLwotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpkcXVvdF9jYWNoZXA7Ci0KLWludCByZWdpc3Rlcl9xdW90YV9mb3JtYXQoc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlICpmbXQpCi17Ci0Jc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCWZtdC0+cWZfbmV4dCA9IHF1b3RhX2Zvcm1hdHM7Ci0JcXVvdGFfZm9ybWF0cyA9IGZtdDsKLQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCB1bnJlZ2lzdGVyX3F1b3RhX2Zvcm1hdChzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmZtdCkKLXsKLQlzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKiphY3RxZjsKLQotCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQlmb3IgKGFjdHFmID0gJnF1b3RhX2Zvcm1hdHM7ICphY3RxZiAmJiAqYWN0cWYgIT0gZm10OyBhY3RxZiA9ICYoKmFjdHFmKS0+cWZfbmV4dCk7Ci0JaWYgKCphY3RxZikKLQkJKmFjdHFmID0gKCphY3RxZiktPnFmX25leHQ7Ci0Jc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmZpbmRfcXVvdGFfZm9ybWF0KGludCBpZCkKLXsKLQlzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmFjdHFmOwotCi0Jc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCWZvciAoYWN0cWYgPSBxdW90YV9mb3JtYXRzOyBhY3RxZiAmJiBhY3RxZi0+cWZfZm10X2lkICE9IGlkOyBhY3RxZiA9IGFjdHFmLT5xZl9uZXh0KTsKLQlpZiAoIWFjdHFmIHx8ICF0cnlfbW9kdWxlX2dldChhY3RxZi0+cWZfb3duZXIpKSB7Ci0JCWludCBxbTsKLQotCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJCi0JCWZvciAocW0gPSAwOyBtb2R1bGVfbmFtZXNbcW1dLnFtX2ZtdF9pZCAmJiBtb2R1bGVfbmFtZXNbcW1dLnFtX2ZtdF9pZCAhPSBpZDsgcW0rKyk7Ci0JCWlmICghbW9kdWxlX25hbWVzW3FtXS5xbV9mbXRfaWQgfHwgcmVxdWVzdF9tb2R1bGUobW9kdWxlX25hbWVzW3FtXS5xbV9tb2RfbmFtZSkpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JCWZvciAoYWN0cWYgPSBxdW90YV9mb3JtYXRzOyBhY3RxZiAmJiBhY3RxZi0+cWZfZm10X2lkICE9IGlkOyBhY3RxZiA9IGFjdHFmLT5xZl9uZXh0KTsKLQkJaWYgKGFjdHFmICYmICF0cnlfbW9kdWxlX2dldChhY3RxZi0+cWZfb3duZXIpKQotCQkJYWN0cWYgPSBOVUxMOwotCX0KLQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQlyZXR1cm4gYWN0cWY7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dF9xdW90YV9mb3JtYXQoc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlICpmbXQpCi17Ci0JbW9kdWxlX3B1dChmbXQtPnFmX293bmVyKTsKLX0KLQotLyoKLSAqIERxdW90IExpc3QgTWFuYWdlbWVudDoKLSAqIFRoZSBxdW90YSBjb2RlIHVzZXMgdGhyZWUgbGlzdHMgZm9yIGRxdW90IG1hbmFnZW1lbnQ6IHRoZSBpbnVzZV9saXN0LAotICogZnJlZV9kcXVvdHMsIGFuZCBkcXVvdF9oYXNoW10gYXJyYXkuIEEgc2luZ2xlIGRxdW90IHN0cnVjdHVyZSBtYXkgYmUKLSAqIG9uIGFsbCB0aHJlZSBsaXN0cywgZGVwZW5kaW5nIG9uIGl0cyBjdXJyZW50IHN0YXRlLgotICoKLSAqIEFsbCBkcXVvdHMgYXJlIHBsYWNlZCB0byB0aGUgZW5kIG9mIGludXNlX2xpc3Qgd2hlbiBmaXJzdCBjcmVhdGVkLCBhbmQgdGhpcwotICogbGlzdCBpcyB1c2VkIGZvciBpbnZhbGlkYXRlIG9wZXJhdGlvbiwgd2hpY2ggbXVzdCBsb29rIGF0IGV2ZXJ5IGRxdW90LgotICoKLSAqIFVudXNlZCBkcXVvdHMgKGRxX2NvdW50ID09IDApIGFyZSBhZGRlZCB0byB0aGUgZnJlZV9kcXVvdHMgbGlzdCB3aGVuIGZyZWVkLAotICogYW5kIHRoaXMgbGlzdCBpcyBzZWFyY2hlZCB3aGVuZXZlciB3ZSBuZWVkIGFuIGF2YWlsYWJsZSBkcXVvdC4gIERxdW90cyBhcmUKLSAqIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBhcyBzb29uIGFzIHRoZXkgYXJlIHVzZWQgYWdhaW4sIGFuZAotICogZHFzdGF0cy5mcmVlX2RxdW90cyBnaXZlcyB0aGUgbnVtYmVyIG9mIGRxdW90cyBvbiB0aGUgbGlzdC4gV2hlbgotICogZHF1b3QgaXMgaW52YWxpZGF0ZWQgaXQncyBjb21wbGV0ZWx5IHJlbGVhc2VkIGZyb20gbWVtb3J5LgotICoKLSAqIERxdW90cyB3aXRoIGEgc3BlY2lmaWMgaWRlbnRpdHkgKGRldmljZSwgdHlwZSBhbmQgaWQpIGFyZSBwbGFjZWQgb24KLSAqIG9uZSBvZiB0aGUgZHF1b3RfaGFzaFtdIGhhc2ggY2hhaW5zLiBUaGUgcHJvdmlkZXMgYW4gZWZmaWNpZW50IHNlYXJjaAotICogbWVjaGFuaXNtIHRvIGxvY2F0ZSBhIHNwZWNpZmljIGRxdW90LgotICovCi0KLXN0YXRpYyBMSVNUX0hFQUQoaW51c2VfbGlzdCk7Ci1zdGF0aWMgTElTVF9IRUFEKGZyZWVfZHF1b3RzKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZHFfaGFzaF9iaXRzLCBkcV9oYXNoX21hc2s7Ci1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKmRxdW90X2hhc2g7Ci0KLXN0cnVjdCBkcXN0YXRzIGRxc3RhdHM7Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Ci1oYXNoZm4oY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGlkLCBpbnQgdHlwZSkKLXsKLQl1bnNpZ25lZCBsb25nIHRtcDsKLQotCXRtcCA9ICgoKHVuc2lnbmVkIGxvbmcpc2I+PkwxX0NBQ0hFX1NISUZUKSBeIGlkKSAqIChNQVhRVU9UQVMgLSB0eXBlKTsKLQlyZXR1cm4gKHRtcCArICh0bXAgPj4gZHFfaGFzaF9iaXRzKSkgJiBkcV9oYXNoX21hc2s7Ci19Ci0KLS8qCi0gKiBGb2xsb3dpbmcgbGlzdCBmdW5jdGlvbnMgZXhwZWN0IGRxX2xpc3RfbG9jayB0byBiZSBoZWxkCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnNlcnRfZHF1b3RfaGFzaChzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gZHF1b3RfaGFzaCArIGhhc2hmbihkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV9pZCwgZHF1b3QtPmRxX3R5cGUpOwotCWhsaXN0X2FkZF9oZWFkKCZkcXVvdC0+ZHFfaGFzaCwgaGVhZCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZHF1b3RfaGFzaChzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCWhsaXN0X2RlbF9pbml0KCZkcXVvdC0+ZHFfaGFzaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRxdW90ICpmaW5kX2RxdW90KHVuc2lnbmVkIGludCBoYXNoZW50LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgaWQsIGludCB0eXBlKQotewotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCXN0cnVjdCBkcXVvdCAqZHF1b3Q7Ci0KLQlobGlzdF9mb3JfZWFjaCAobm9kZSwgZHF1b3RfaGFzaCtoYXNoZW50KSB7Ci0JCWRxdW90ID0gaGxpc3RfZW50cnkobm9kZSwgc3RydWN0IGRxdW90LCBkcV9oYXNoKTsKLQkJaWYgKGRxdW90LT5kcV9zYiA9PSBzYiAmJiBkcXVvdC0+ZHFfaWQgPT0gaWQgJiYgZHF1b3QtPmRxX3R5cGUgPT0gdHlwZSkKLQkJCXJldHVybiBkcXVvdDsKLQl9Ci0JcmV0dXJuIE5PRFFVT1Q7Ci19Ci0KLS8qIEFkZCBhIGRxdW90IHRvIHRoZSB0YWlsIG9mIHRoZSBmcmVlIGxpc3QgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfZHF1b3RfbGFzdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCWxpc3RfYWRkX3RhaWwoJmRxdW90LT5kcV9mcmVlLCAmZnJlZV9kcXVvdHMpOwotCWRxc3RhdHMuZnJlZV9kcXVvdHMrKzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9mcmVlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JaWYgKGxpc3RfZW1wdHkoJmRxdW90LT5kcV9mcmVlKSkKLQkJcmV0dXJuOwotCWxpc3RfZGVsX2luaXQoJmRxdW90LT5kcV9mcmVlKTsKLQlkcXN0YXRzLmZyZWVfZHF1b3RzLS07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaW51c2Uoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQkvKiBXZSBhZGQgdG8gdGhlIGJhY2sgb2YgaW51c2UgbGlzdCBzbyB3ZSBkb24ndCBoYXZlIHRvIHJlc3RhcnQKLQkgKiB3aGVuIHRyYXZlcnNpbmcgdGhpcyBsaXN0IGFuZCB3ZSBibG9jayAqLwotCWxpc3RfYWRkX3RhaWwoJmRxdW90LT5kcV9pbnVzZSwgJmludXNlX2xpc3QpOwotCWRxc3RhdHMuYWxsb2NhdGVkX2RxdW90cysrOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlX2ludXNlKHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JZHFzdGF0cy5hbGxvY2F0ZWRfZHF1b3RzLS07Ci0JbGlzdF9kZWwoJmRxdW90LT5kcV9pbnVzZSk7Ci19Ci0vKgotICogRW5kIG9mIGxpc3QgZnVuY3Rpb25zIG5lZWRpbmcgZHFfbGlzdF9sb2NrCi0gKi8KLQotc3RhdGljIHZvaWQgd2FpdF9vbl9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCW11dGV4X2xvY2soJmRxdW90LT5kcV9sb2NrKTsKLQltdXRleF91bmxvY2soJmRxdW90LT5kcV9sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlyZXR1cm4gdGVzdF9iaXQoRFFfTU9EX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBtYXJrX2RxdW90X2RpcnR5KHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JcmV0dXJuIGRxdW90LT5kcV9zYi0+ZHFfb3AtPm1hcmtfZGlydHkoZHF1b3QpOwotfQotCi1pbnQgZHF1b3RfbWFya19kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoRFFfTU9EX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKQotCQlsaXN0X2FkZCgmZHF1b3QtPmRxX2RpcnR5LCAmc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+Ci0JCQkJaW5mb1tkcXVvdC0+ZHFfdHlwZV0uZHFpX2RpcnR5X2xpc3QpOwotCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCXJldHVybiAwOwotfQotCi0vKiBUaGlzIGZ1bmN0aW9uIG5lZWRzIGRxX2xpc3RfbG9jayAqLwotc3RhdGljIGlubGluZSBpbnQgY2xlYXJfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChEUV9NT0RfQiwgJmRxdW90LT5kcV9mbGFncykpCi0JCXJldHVybiAwOwotCWxpc3RfZGVsX2luaXQoJmRxdW90LT5kcV9kaXJ0eSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLXZvaWQgbWFya19pbmZvX2RpcnR5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCXNldF9iaXQoRFFGX0lORk9fRElSVFlfQiwgJnNiX2Rxb3B0KHNiKS0+aW5mb1t0eXBlXS5kcWlfZmxhZ3MpOwotfQotRVhQT1JUX1NZTUJPTChtYXJrX2luZm9fZGlydHkpOwotCi0vKgotICoJUmVhZCBkcXVvdCBmcm9tIGRpc2sgYW5kIGFsbG9jIHNwYWNlIGZvciBpdAotICovCi0KLWludCBkcXVvdF9hY3F1aXJlKHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JaW50IHJldCA9IDAsIHJldDIgPSAwOwotCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KGRxdW90LT5kcV9zYik7Ci0KLQltdXRleF9sb2NrKCZkcXVvdC0+ZHFfbG9jayk7Ci0JbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwotCWlmICghdGVzdF9iaXQoRFFfUkVBRF9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkKLQkJcmV0ID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPnJlYWRfZHFibGsoZHF1b3QpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9pb2xvY2s7Ci0Jc2V0X2JpdChEUV9SRUFEX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotCS8qIEluc3RhbnRpYXRlIGRxdW90IGlmIG5lZWRlZCAqLwotCWlmICghdGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpICYmICFkcXVvdC0+ZHFfb2ZmKSB7Ci0JCXJldCA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5jb21taXRfZHFibGsoZHF1b3QpOwotCQkvKiBXcml0ZSB0aGUgaW5mbyBpZiBuZWVkZWQgKi8KLQkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2RxdW90LT5kcV90eXBlXSkpCi0JCQlyZXQyID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPndyaXRlX2ZpbGVfaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9pb2xvY2s7Ci0JCWlmIChyZXQyIDwgMCkgewotCQkJcmV0ID0gcmV0MjsKLQkJCWdvdG8gb3V0X2lvbG9jazsKLQkJfQotCX0KLQlzZXRfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLW91dF9pb2xvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZkcXVvdC0+ZHFfbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqCVdyaXRlIGRxdW90IHRvIGRpc2sKLSAqLwotaW50IGRxdW90X2NvbW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCWludCByZXQgPSAwLCByZXQyID0gMDsKLQlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpOwotCi0JbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwotCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQlpZiAoIWNsZWFyX2RxdW90X2RpcnR5KGRxdW90KSkgewotCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJZ290byBvdXRfc2VtOwotCX0KLQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQkvKiBJbmFjdGl2ZSBkcXVvdCBjYW4gYmUgb25seSBpZiB0aGVyZSB3YXMgZXJyb3IgZHVyaW5nIHJlYWQvaW5pdAotCSAqID0+IHdlIGhhdmUgYmV0dGVyIG5vdCB3cml0aW5nIGl0ICovCi0JaWYgKHRlc3RfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkgewotCQlyZXQgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+Y29tbWl0X2RxYmxrKGRxdW90KTsKLQkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2RxdW90LT5kcV90eXBlXSkpCi0JCQlyZXQyID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPndyaXRlX2ZpbGVfaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKTsKLQkJaWYgKHJldCA+PSAwKQotCQkJcmV0ID0gcmV0MjsKLQl9Ci1vdXRfc2VtOgotCW11dGV4X3VubG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKglSZWxlYXNlIGRxdW90Ci0gKi8KLWludCBkcXVvdF9yZWxlYXNlKHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JaW50IHJldCA9IDAsIHJldDIgPSAwOwotCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KGRxdW90LT5kcV9zYik7Ci0KLQltdXRleF9sb2NrKCZkcXVvdC0+ZHFfbG9jayk7Ci0JLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgbm90IHJhY2luZyB3aXRoIHNvbWUgb3RoZXIgZHFnZXQoKSAqLwotCWlmIChhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSA+IDEpCi0JCWdvdG8gb3V0X2RxbG9jazsKLQltdXRleF9sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7Ci0JaWYgKGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5yZWxlYXNlX2RxYmxrKSB7Ci0JCXJldCA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5yZWxlYXNlX2RxYmxrKGRxdW90KTsKLQkJLyogV3JpdGUgdGhlIGluZm8gKi8KLQkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2RxdW90LT5kcV90eXBlXSkpCi0JCQlyZXQyID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPndyaXRlX2ZpbGVfaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKTsKLQkJaWYgKHJldCA+PSAwKQotCQkJcmV0ID0gcmV0MjsKLQl9Ci0JY2xlYXJfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQltdXRleF91bmxvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKLW91dF9kcWxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZkcXVvdC0+ZHFfbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBkcXVvdF9kZXN0cm95KHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0Ja21lbV9jYWNoZV9mcmVlKGRxdW90X2NhY2hlcCwgZHF1b3QpOwotfQotRVhQT1JUX1NZTUJPTChkcXVvdF9kZXN0cm95KTsKLQotc3RhdGljIGlubGluZSB2b2lkIGRvX2Rlc3Ryb3lfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlkcXVvdC0+ZHFfc2ItPmRxX29wLT5kZXN0cm95X2RxdW90KGRxdW90KTsKLX0KLQotLyogSW52YWxpZGF0ZSBhbGwgZHF1b3RzIG9uIHRoZSBsaXN0LiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIKLSAqIHF1b3RhIGlzIGRpc2FibGVkIGFuZCBwb2ludGVycyBmcm9tIGlub2RlcyByZW1vdmVkIHNvIHRoZXJlIGNhbm5vdCBiZSBuZXcKLSAqIHF1b3RhIHVzZXJzLiBUaGVyZSBjYW4gc3RpbGwgYmUgc29tZSB1c2VycyBvZiBxdW90YXMgZHVlIHRvIGlub2RlcyBiZWluZwotICoganVzdCBkZWxldGVkIG9yIHBydW5lZCBieSBwcnVuZV9pY2FjaGUoKSAodGhvc2UgYXJlIG5vdCBhdHRhY2hlZCB0byBhbnkKLSAqIGxpc3QpIG9yIHBhcmFsbGVsIHF1b3RhY3RsIGNhbGwuIFdlIGhhdmUgdG8gd2FpdCBmb3Igc3VjaCB1c2Vycy4KLSAqLwotc3RhdGljIHZvaWQgaW52YWxpZGF0ZV9kcXVvdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IGRxdW90ICpkcXVvdCwgKnRtcDsKLQotcmVzdGFydDoKLQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRxdW90LCB0bXAsICZpbnVzZV9saXN0LCBkcV9pbnVzZSkgewotCQlpZiAoZHF1b3QtPmRxX3NiICE9IHNiKQotCQkJY29udGludWU7Ci0JCWlmIChkcXVvdC0+ZHFfdHlwZSAhPSB0eXBlKQotCQkJY29udGludWU7Ci0JCS8qIFdhaXQgZm9yIGRxdW90IHVzZXJzICovCi0JCWlmIChhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSkgewotCQkJREVGSU5FX1dBSVQod2FpdCk7Ci0KLQkJCWF0b21pY19pbmMoJmRxdW90LT5kcV9jb3VudCk7Ci0JCQlwcmVwYXJlX3RvX3dhaXQoJmRxdW90LT5kcV93YWl0X3VudXNlZCwgJndhaXQsCi0JCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCQkJLyogT25jZSBkcXB1dCgpIHdha2VzIHVzIHVwLCB3ZSBrbm93IGl0J3MgdGltZSB0byBmcmVlCi0JCQkgKiB0aGUgZHF1b3QuCi0JCQkgKiBJTVBPUlRBTlQ6IHdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB0aGVyZSBpcyBhbHdheXMKLQkJCSAqIGF0IG1vc3Qgb25lIHByb2Nlc3Mgd2FpdGluZyBmb3IgZHF1b3QgdG8gZnJlZS4KLQkJCSAqIE90aGVyd2lzZSBkcV9jb3VudCB3b3VsZCBiZSA+IDEgYW5kIHdlIHdvdWxkIG5ldmVyCi0JCQkgKiB3YWtlIHVwLgotCQkJICovCi0JCQlpZiAoYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkgPiAxKQotCQkJCXNjaGVkdWxlKCk7Ci0JCQlmaW5pc2hfd2FpdCgmZHF1b3QtPmRxX3dhaXRfdW51c2VkLCAmd2FpdCk7Ci0JCQlkcXB1dChkcXVvdCk7Ci0JCQkvKiBBdCB0aGlzIG1vbWVudCBkcXVvdCgpIG5lZWQgbm90IGV4aXN0IChpdCBjb3VsZCBiZQotCQkJICogcmVjbGFpbWVkIGJ5IHBydW5lX2RxY2FjaGUoKS4gSGVuY2Ugd2UgbXVzdAotCQkJICogcmVzdGFydC4gKi8KLQkJCWdvdG8gcmVzdGFydDsKLQkJfQotCQkvKgotCQkgKiBRdW90YSBub3cgaGFzIG5vIHVzZXJzIGFuZCBpdCBoYXMgYmVlbiB3cml0dGVuIG9uIGxhc3QKLQkJICogZHFwdXQoKQotCQkgKi8KLQkJcmVtb3ZlX2RxdW90X2hhc2goZHF1b3QpOwotCQlyZW1vdmVfZnJlZV9kcXVvdChkcXVvdCk7Ci0JCXJlbW92ZV9pbnVzZShkcXVvdCk7Ci0JCWRvX2Rlc3Ryb3lfZHF1b3QoZHF1b3QpOwotCX0KLQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLX0KLQotLyogQ2FsbCBjYWxsYmFjayBmb3IgZXZlcnkgYWN0aXZlIGRxdW90IG9uIGdpdmVuIGZpbGVzeXN0ZW0gKi8KLWludCBkcXVvdF9zY2FuX2FjdGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQkgICAgICBpbnQgKCpmbikoc3RydWN0IGRxdW90ICpkcXVvdCwgdW5zaWduZWQgbG9uZyBwcml2KSwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBwcml2KQotewotCXN0cnVjdCBkcXVvdCAqZHF1b3QsICpvbGRfZHF1b3QgPSBOVUxMOwotCWludCByZXQgPSAwOwotCi0JbXV0ZXhfbG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKLQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkcXVvdCwgJmludXNlX2xpc3QsIGRxX2ludXNlKSB7Ci0JCWlmICghdGVzdF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKQotCQkJY29udGludWU7Ci0JCWlmIChkcXVvdC0+ZHFfc2IgIT0gc2IpCi0JCQljb250aW51ZTsKLQkJLyogTm93IHdlIGhhdmUgYWN0aXZlIGRxdW90IHNvIHdlIGNhbiBqdXN0IGluY3JlYXNlIHVzZSBjb3VudCAqLwotCQlhdG9taWNfaW5jKCZkcXVvdC0+ZHFfY291bnQpOwotCQlkcXN0YXRzLmxvb2t1cHMrKzsKLQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JCWRxcHV0KG9sZF9kcXVvdCk7Ci0JCW9sZF9kcXVvdCA9IGRxdW90OwotCQlyZXQgPSBmbihkcXVvdCwgcHJpdik7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJLyogV2UgYXJlIHNhZmUgdG8gY29udGludWUgbm93IGJlY2F1c2Ugb3VyIGRxdW90IGNvdWxkIG5vdAotCQkgKiBiZSBtb3ZlZCBvdXQgb2YgdGhlIGludXNlIGxpc3Qgd2hpbGUgd2UgaG9sZCB0aGUgcmVmZXJlbmNlICovCi0JfQotCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotb3V0OgotCWRxcHV0KG9sZF9kcXVvdCk7Ci0JbXV0ZXhfdW5sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB2ZnNfcXVvdGFfc3luYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpkaXJ0eTsKLQlzdHJ1Y3QgZHF1b3QgKmRxdW90OwotCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKLQlpbnQgY250OwotCi0JbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIGNudCkpCi0JCQljb250aW51ZTsKLQkJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCQlkaXJ0eSA9ICZkcW9wdC0+aW5mb1tjbnRdLmRxaV9kaXJ0eV9saXN0OwotCQl3aGlsZSAoIWxpc3RfZW1wdHkoZGlydHkpKSB7Ci0JCQlkcXVvdCA9IGxpc3RfZmlyc3RfZW50cnkoZGlydHksIHN0cnVjdCBkcXVvdCwgZHFfZGlydHkpOwotCQkJLyogRGlydHkgYW5kIGluYWN0aXZlIGNhbiBiZSBvbmx5IGJhZCBkcXVvdC4uLiAqLwotCQkJaWYgKCF0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykpIHsKLQkJCQljbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBOb3cgd2UgaGF2ZSBhY3RpdmUgZHF1b3QgZnJvbSB3aGljaCBzb21lb25lIGlzCi0gCQkJICogaG9sZGluZyByZWZlcmVuY2Ugc28gd2UgY2FuIHNhZmVseSBqdXN0IGluY3JlYXNlCi0JCQkgKiB1c2UgY291bnQgKi8KLQkJCWF0b21pY19pbmMoJmRxdW90LT5kcV9jb3VudCk7Ci0JCQlkcXN0YXRzLmxvb2t1cHMrKzsKLQkJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCQkJc2ItPmRxX29wLT53cml0ZV9kcXVvdChkcXVvdCk7Ci0JCQlkcXB1dChkcXVvdCk7Ci0JCQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JfQotCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlpZiAoKGNudCA9PSB0eXBlIHx8IHR5cGUgPT0gLTEpICYmIHNiX2hhc19xdW90YV9hY3RpdmUoc2IsIGNudCkKLQkJICAgICYmIGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2NudF0pKQotCQkJc2ItPmRxX29wLT53cml0ZV9pbmZvKHNiLCBjbnQpOwotCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQlkcXN0YXRzLnN5bmNzKys7Ci0Jc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogRnJlZSB1bnVzZWQgZHF1b3RzIGZyb20gY2FjaGUgKi8KLXN0YXRpYyB2b2lkIHBydW5lX2RxY2FjaGUoaW50IGNvdW50KQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGRxdW90ICpkcXVvdDsKLQotCWhlYWQgPSBmcmVlX2RxdW90cy5wcmV2OwotCXdoaWxlIChoZWFkICE9ICZmcmVlX2RxdW90cyAmJiBjb3VudCkgewotCQlkcXVvdCA9IGxpc3RfZW50cnkoaGVhZCwgc3RydWN0IGRxdW90LCBkcV9mcmVlKTsKLQkJcmVtb3ZlX2RxdW90X2hhc2goZHF1b3QpOwotCQlyZW1vdmVfZnJlZV9kcXVvdChkcXVvdCk7Ci0JCXJlbW92ZV9pbnVzZShkcXVvdCk7Ci0JCWRvX2Rlc3Ryb3lfZHF1b3QoZHF1b3QpOwotCQljb3VudC0tOwotCQloZWFkID0gZnJlZV9kcXVvdHMucHJldjsKLQl9Ci19Ci0KLS8qCi0gKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGtzd2FwZCB3aGVuIHdlIHRoaW5rIHdlIG5lZWQgc29tZQotICogbW9yZSBtZW1vcnkKLSAqLwotCi1zdGF0aWMgaW50IHNocmlua19kcWNhY2hlX21lbW9yeShpbnQgbnIsIGdmcF90IGdmcF9tYXNrKQotewotCWlmIChucikgewotCQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JCXBydW5lX2RxY2FjaGUobnIpOwotCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQl9Ci0JcmV0dXJuIChkcXN0YXRzLmZyZWVfZHF1b3RzIC8gMTAwKSAqIHN5c2N0bF92ZnNfY2FjaGVfcHJlc3N1cmU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2hyaW5rZXIgZHFjYWNoZV9zaHJpbmtlciA9IHsKLQkuc2hyaW5rID0gc2hyaW5rX2RxY2FjaGVfbWVtb3J5LAotCS5zZWVrcyA9IERFRkFVTFRfU0VFS1MsCi19OwotCi0vKgotICogUHV0IHJlZmVyZW5jZSB0byBkcXVvdAotICogTk9URTogSWYgeW91IGNoYW5nZSB0aGlzIGZ1bmN0aW9uIHBsZWFzZSBjaGVjayB3aGV0aGVyIGRxcHV0X2Jsb2NrcygpIHdvcmtzIHJpZ2h0Li4uCi0gKi8KLXZvaWQgZHFwdXQoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpbnQgcmV0OwotCi0JaWYgKCFkcXVvdCkKLQkJcmV0dXJuOwotI2lmZGVmIF9fRFFVT1RfUEFSQU5PSUEKLQlpZiAoIWF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpKSB7Ci0JCXByaW50aygiVkZTOiBkcXB1dDogdHJ5aW5nIHRvIGZyZWUgZnJlZSBkcXVvdFxuIik7Ci0JCXByaW50aygiVkZTOiBkZXZpY2UgJXMsIGRxdW90IG9mICVzICVkXG4iLAotCQkJZHF1b3QtPmRxX3NiLT5zX2lkLAotCQkJcXVvdGF0eXBlc1tkcXVvdC0+ZHFfdHlwZV0sCi0JCQlkcXVvdC0+ZHFfaWQpOwotCQlCVUcoKTsKLQl9Ci0jZW5kaWYKLQkKLQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7Ci0JZHFzdGF0cy5kcm9wcysrOwotCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotd2Vfc2xlcHQ6Ci0Jc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCWlmIChhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSA+IDEpIHsKLQkJLyogV2UgaGF2ZSBtb3JlIHRoYW4gb25lIHVzZXIuLi4gbm90aGluZyB0byBkbyAqLwotCQlhdG9taWNfZGVjKCZkcXVvdC0+ZHFfY291bnQpOwotCQkvKiBSZWxlYXNpbmcgZHF1b3QgZHVyaW5nIHF1b3Rhb2ZmIHBoYXNlPyAqLwotCQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSkgJiYKLQkJICAgIGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpID09IDEpCi0JCQl3YWtlX3VwKCZkcXVvdC0+ZHFfd2FpdF91bnVzZWQpOwotCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBOZWVkIHRvIHJlbGVhc2UgZHF1b3Q/ICovCi0JaWYgKHRlc3RfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSAmJiBkcXVvdF9kaXJ0eShkcXVvdCkpIHsKLQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JCS8qIENvbW1pdCBkcXVvdCBiZWZvcmUgcmVsZWFzaW5nICovCi0JCXJldCA9IGRxdW90LT5kcV9zYi0+ZHFfb3AtPndyaXRlX2RxdW90KGRxdW90KTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBjYW5ub3Qgd3JpdGUgcXVvdGEgc3RydWN0dXJlIG9uICIKLQkJCQkiZGV2aWNlICVzIChlcnJvciAlZCkuIFF1b3RhIG1heSBnZXQgb3V0IG9mICIKLQkJCQkic3luYyFcbiIsIGRxdW90LT5kcV9zYi0+c19pZCwgcmV0KTsKLQkJCS8qCi0JCQkgKiBXZSBjbGVhciBkaXJ0eSBiaXQgYW55d2F5LCBzbyB0aGF0IHdlIGF2b2lkCi0JCQkgKiBpbmZpbml0ZSBsb29wIGhlcmUKLQkJCSAqLwotCQkJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCQkJY2xlYXJfZHF1b3RfZGlydHkoZHF1b3QpOwotCQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JCX0KLQkJZ290byB3ZV9zbGVwdDsKLQl9Ci0JLyogQ2xlYXIgZmxhZyBpbiBjYXNlIGRxdW90IHdhcyBpbmFjdGl2ZSAoc29tZXRoaW5nIGJhZCBoYXBwZW5lZCkgKi8KLQljbGVhcl9kcXVvdF9kaXJ0eShkcXVvdCk7Ci0JaWYgKHRlc3RfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkgewotCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJZHF1b3QtPmRxX3NiLT5kcV9vcC0+cmVsZWFzZV9kcXVvdChkcXVvdCk7Ci0JCWdvdG8gd2Vfc2xlcHQ7Ci0JfQotCWF0b21pY19kZWMoJmRxdW90LT5kcV9jb3VudCk7Ci0jaWZkZWYgX19EUVVPVF9QQVJBTk9JQQotCS8qIHNhbml0eSBjaGVjayAqLwotCUJVR19PTighbGlzdF9lbXB0eSgmZHF1b3QtPmRxX2ZyZWUpKTsKLSNlbmRpZgotCXB1dF9kcXVvdF9sYXN0KGRxdW90KTsKLQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLX0KLQotc3RydWN0IGRxdW90ICpkcXVvdF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlyZXR1cm4ga21lbV9jYWNoZV96YWxsb2MoZHF1b3RfY2FjaGVwLCBHRlBfTk9GUyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRxdW90X2FsbG9jKTsKLQotc3RhdGljIHN0cnVjdCBkcXVvdCAqZ2V0X2VtcHR5X2RxdW90KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCXN0cnVjdCBkcXVvdCAqZHF1b3Q7Ci0KLQlkcXVvdCA9IHNiLT5kcV9vcC0+YWxsb2NfZHF1b3Qoc2IsIHR5cGUpOwotCWlmKCFkcXVvdCkKLQkJcmV0dXJuIE5PRFFVT1Q7Ci0KLQltdXRleF9pbml0KCZkcXVvdC0+ZHFfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRxdW90LT5kcV9mcmVlKTsKLQlJTklUX0xJU1RfSEVBRCgmZHF1b3QtPmRxX2ludXNlKTsKLQlJTklUX0hMSVNUX05PREUoJmRxdW90LT5kcV9oYXNoKTsKLQlJTklUX0xJU1RfSEVBRCgmZHF1b3QtPmRxX2RpcnR5KTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkcXVvdC0+ZHFfd2FpdF91bnVzZWQpOwotCWRxdW90LT5kcV9zYiA9IHNiOwotCWRxdW90LT5kcV90eXBlID0gdHlwZTsKLQlhdG9taWNfc2V0KCZkcXVvdC0+ZHFfY291bnQsIDEpOwotCi0JcmV0dXJuIGRxdW90OwotfQotCi0vKgotICogR2V0IHJlZmVyZW5jZSB0byBkcXVvdAotICoKLSAqIExvY2tpbmcgaXMgc2xpZ2h0bHkgdHJpY2t5IGhlcmUuIFdlIGFyZSBndWFyZGVkIGZyb20gcGFyYWxsZWwgcXVvdGFvZmYoKQotICogZGVzdHJveWluZyBvdXIgZHF1b3QgYnk6Ci0gKiAgIGEpIGNoZWNraW5nIGZvciBxdW90YSBmbGFncyB1bmRlciBkcV9saXN0X2xvY2sgYW5kCi0gKiAgIGIpIGdldHRpbmcgYSByZWZlcmVuY2UgdG8gZHF1b3QgYmVmb3JlIHdlIHJlbGVhc2UgZHFfbGlzdF9sb2NrCi0gKi8KLXN0cnVjdCBkcXVvdCAqZHFnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGlkLCBpbnQgdHlwZSkKLXsKLQl1bnNpZ25lZCBpbnQgaGFzaGVudCA9IGhhc2hmbihzYiwgaWQsIHR5cGUpOwotCXN0cnVjdCBkcXVvdCAqZHF1b3QgPSBOT0RRVU9ULCAqZW1wdHkgPSBOT0RRVU9UOwotCi0gICAgICAgIGlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpCi0JCXJldHVybiBOT0RRVU9UOwotd2Vfc2xlcHQ6Ci0Jc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOwotCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7Ci0JaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkgewotCQlzcGluX3VubG9jaygmZHFfc3RhdGVfbG9jayk7Ci0JCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCQlnb3RvIG91dDsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOwotCi0JaWYgKChkcXVvdCA9IGZpbmRfZHF1b3QoaGFzaGVudCwgc2IsIGlkLCB0eXBlKSkgPT0gTk9EUVVPVCkgewotCQlpZiAoZW1wdHkgPT0gTk9EUVVPVCkgewotCQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Ci0JCQlpZiAoKGVtcHR5ID0gZ2V0X2VtcHR5X2RxdW90KHNiLCB0eXBlKSkgPT0gTk9EUVVPVCkKLQkJCQlzY2hlZHVsZSgpOwkvKiBUcnkgdG8gd2FpdCBmb3IgYSBtb21lbnQuLi4gKi8KLQkJCWdvdG8gd2Vfc2xlcHQ7Ci0JCX0KLQkJZHF1b3QgPSBlbXB0eTsKLQkJZW1wdHkgPSBOT0RRVU9UOwotCQlkcXVvdC0+ZHFfaWQgPSBpZDsKLQkJLyogYWxsIGRxdW90cyBnbyBvbiB0aGUgaW51c2VfbGlzdCAqLwotCQlwdXRfaW51c2UoZHF1b3QpOwotCQkvKiBoYXNoIGl0IGZpcnN0IHNvIGl0IGNhbiBiZSBmb3VuZCAqLwotCQlpbnNlcnRfZHF1b3RfaGFzaChkcXVvdCk7Ci0JCWRxc3RhdHMubG9va3VwcysrOwotCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKLQl9IGVsc2UgewotCQlpZiAoIWF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpKQotCQkJcmVtb3ZlX2ZyZWVfZHF1b3QoZHF1b3QpOwotCQlhdG9taWNfaW5jKCZkcXVvdC0+ZHFfY291bnQpOwotCQlkcXN0YXRzLmNhY2hlX2hpdHMrKzsKLQkJZHFzdGF0cy5sb29rdXBzKys7Ci0JCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCX0KLQkvKiBXYWl0IGZvciBkcV9sb2NrIC0gYWZ0ZXIgdGhpcyB3ZSBrbm93IHRoYXQgZWl0aGVyIGRxdW90X3JlbGVhc2UoKSBpcyBhbHJlYWR5Ci0JICogZmluaXNoZWQgb3IgaXQgd2lsbCBiZSBjYW5jZWxlZCBkdWUgdG8gZHFfY291bnQgPiAxIHRlc3QgKi8KLQl3YWl0X29uX2RxdW90KGRxdW90KTsKLQkvKiBSZWFkIHRoZSBkcXVvdCBhbmQgaW5zdGFudGlhdGUgaXQgKGV2ZXJ5dGhpbmcgZG9uZSBvbmx5IGlmIG5lZWRlZCkgKi8KLQlpZiAoIXRlc3RfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSAmJiBzYi0+ZHFfb3AtPmFjcXVpcmVfZHF1b3QoZHF1b3QpIDwgMCkgewotCQlkcXB1dChkcXVvdCk7Ci0JCWRxdW90ID0gTk9EUVVPVDsKLQkJZ290byBvdXQ7Ci0JfQotI2lmZGVmIF9fRFFVT1RfUEFSQU5PSUEKLQlCVUdfT04oIWRxdW90LT5kcV9zYik7CS8qIEhhcyBzb21lYm9keSBpbnZhbGlkYXRlZCBlbnRyeSB1bmRlciB1cz8gKi8KLSNlbmRpZgotb3V0OgotCWlmIChlbXB0eSkKLQkJZG9fZGVzdHJveV9kcXVvdChlbXB0eSk7Ci0KLQlyZXR1cm4gZHF1b3Q7Ci19Ci0KLXN0YXRpYyBpbnQgZHFpbml0X25lZWRlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSkKLXsKLQlpbnQgY250OwotCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQlyZXR1cm4gMDsKLQlpZiAodHlwZSAhPSAtMSkKLQkJcmV0dXJuIGlub2RlLT5pX2RxdW90W3R5cGVdID09IE5PRFFVT1Q7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSA9PSBOT0RRVU9UKQotCQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgcm91dGluZSBpcyBndWFyZGVkIGJ5IGRxb25vZmZfbXV0ZXggbXV0ZXggKi8KLXN0YXRpYyB2b2lkIGFkZF9kcXVvdF9yZWYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IGlub2RlICppbm9kZSwgKm9sZF9pbm9kZSA9IE5VTEw7Ci0KLQlzcGluX2xvY2soJmlub2RlX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZzYi0+c19pbm9kZXMsIGlfc2JfbGlzdCkgewotCQlpZiAoIWF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50KSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIWRxaW5pdF9uZWVkZWQoaW5vZGUsIHR5cGUpKQotCQkJY29udGludWU7Ci0JCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9XSUxMX0ZSRUUpKQotCQkJY29udGludWU7Ci0KLQkJX19pZ2V0KGlub2RlKTsKLQkJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwotCi0JCWlwdXQob2xkX2lub2RlKTsKLQkJc2ItPmRxX29wLT5pbml0aWFsaXplKGlub2RlLCB0eXBlKTsKLQkJLyogV2UgaG9sZCBhIHJlZmVyZW5jZSB0byAnaW5vZGUnIHNvIGl0IGNvdWxkbid0IGhhdmUgYmVlbgotCQkgKiByZW1vdmVkIGZyb20gc19pbm9kZXMgbGlzdCB3aGlsZSB3ZSBkcm9wcGVkIHRoZSBpbm9kZV9sb2NrLgotCQkgKiBXZSBjYW5ub3QgaXB1dCB0aGUgaW5vZGUgbm93IGFzIHdlIGNhbiBiZSBob2xkaW5nIHRoZSBsYXN0Ci0JCSAqIHJlZmVyZW5jZSBhbmQgd2UgY2Fubm90IGlwdXQgaXQgdW5kZXIgaW5vZGVfbG9jay4gU28gd2UKLQkJICoga2VlcCB0aGUgcmVmZXJlbmNlIGFuZCBpcHV0IGl0IGxhdGVyLiAqLwotCQlvbGRfaW5vZGUgPSBpbm9kZTsKLQkJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwotCWlwdXQob2xkX2lub2RlKTsKLX0KLQotLyogUmV0dXJuIDAgaWYgZHFwdXQoKSB3b24ndCBibG9jayAobm90ZSB0aGF0IDEgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIGJsb2NraW5nKSAqLwotc3RhdGljIGlubGluZSBpbnQgZHFwdXRfYmxvY2tzKHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0JaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpIDw9IDEpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCi0vKiBSZW1vdmUgcmVmZXJlbmNlcyB0byBkcXVvdHMgZnJvbSBpbm9kZSAtIGFkZCBkcXVvdCB0byBsaXN0IGZvciBmcmVlaW5nIGlmIG5lZWRlZCAqLwotLyogV2UgY2FuJ3QgcmFjZSB3aXRoIGFueWJvZHkgYmVjYXVzZSB3ZSBob2xkIGRxcHRyX3NlbSBmb3Igd3JpdGluZy4uLiAqLwotc3RhdGljIGludCByZW1vdmVfaW5vZGVfZHF1b3RfcmVmKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLAotCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqdG9mcmVlX2hlYWQpCi17Ci0Jc3RydWN0IGRxdW90ICpkcXVvdCA9IGlub2RlLT5pX2RxdW90W3R5cGVdOwotCi0JaW5vZGUtPmlfZHF1b3RbdHlwZV0gPSBOT0RRVU9UOwotCWlmIChkcXVvdCAhPSBOT0RRVU9UKSB7Ci0JCWlmIChkcXB1dF9ibG9ja3MoZHF1b3QpKSB7Ci0jaWZkZWYgX19EUVVPVF9QQVJBTk9JQQotCQkJaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpICE9IDEpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVkZTOiBBZGRpbmcgZHF1b3Qgd2l0aCBkcV9jb3VudCAlZCB0byBkaXNwb3NlIGxpc3QuXG4iLCBhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSk7Ci0jZW5kaWYKLQkJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKLQkJCWxpc3RfYWRkKCZkcXVvdC0+ZHFfZnJlZSwgdG9mcmVlX2hlYWQpOwkvKiBBcyBkcXVvdCBtdXN0IGhhdmUgY3VycmVudGx5IHVzZXJzIGl0IGNhbid0IGJlIG9uIHRoZSBmcmVlIGxpc3QuLi4gKi8KLQkJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJZWxzZQotCQkJZHFwdXQoZHF1b3QpOyAgIC8qIFdlIGhhdmUgZ3VhcmFudGVlZCB3ZSB3b24ndCBibG9jayAqLwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogRnJlZSBsaXN0IG9mIGRxdW90cyAtIGNhbGxlZCBmcm9tIGlub2RlLmMgKi8KLS8qIGRxdW90cyBhcmUgcmVtb3ZlZCBmcm9tIGlub2Rlcywgbm8gbmV3IHJlZmVyZW5jZXMgY2FuIGJlIGdvdCBzbyB3ZSBhcmUgdGhlIG9ubHkgb25lcyBob2xkaW5nIHJlZmVyZW5jZSAqLwotc3RhdGljIHZvaWQgcHV0X2RxdW90X2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqdG9mcmVlX2hlYWQpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqYWN0X2hlYWQ7Ci0Jc3RydWN0IGRxdW90ICpkcXVvdDsKLQotCWFjdF9oZWFkID0gdG9mcmVlX2hlYWQtPm5leHQ7Ci0JLyogU28gbm93IHdlIGhhdmUgZHF1b3RzIG9uIHRoZSBsaXN0Li4uIEp1c3QgZnJlZSB0aGVtICovCi0Jd2hpbGUgKGFjdF9oZWFkICE9IHRvZnJlZV9oZWFkKSB7Ci0JCWRxdW90ID0gbGlzdF9lbnRyeShhY3RfaGVhZCwgc3RydWN0IGRxdW90LCBkcV9mcmVlKTsKLQkJYWN0X2hlYWQgPSBhY3RfaGVhZC0+bmV4dDsKLQkJbGlzdF9kZWxfaW5pdCgmZHF1b3QtPmRxX2ZyZWUpOwkvKiBSZW1vdmUgZHF1b3QgZnJvbSB0aGUgbGlzdCBzbyB3ZSB3b24ndCBoYXZlIHByb2JsZW1zLi4uICovCi0JCWRxcHV0KGRxdW90KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZV9kcXVvdF9yZWYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsCi0JCXN0cnVjdCBsaXN0X2hlYWQgKnRvZnJlZV9oZWFkKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0KLQlzcGluX2xvY2soJmlub2RlX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZzYi0+c19pbm9kZXMsIGlfc2JfbGlzdCkgewotCQlpZiAoIUlTX05PUVVPVEEoaW5vZGUpKQotCQkJcmVtb3ZlX2lub2RlX2RxdW90X3JlZihpbm9kZSwgdHlwZSwgdG9mcmVlX2hlYWQpOwotCX0KLQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7Ci19Ci0KLS8qIEdhdGhlciBhbGwgcmVmZXJlbmNlcyBmcm9tIGlub2RlcyBhbmQgZHJvcCB0aGVtICovCi1zdGF0aWMgdm9pZCBkcm9wX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlMSVNUX0hFQUQodG9mcmVlX2hlYWQpOwotCi0JaWYgKHNiLT5kcV9vcCkgewotCQlkb3duX3dyaXRlKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7Ci0JCXJlbW92ZV9kcXVvdF9yZWYoc2IsIHR5cGUsICZ0b2ZyZWVfaGVhZCk7Ci0JCXVwX3dyaXRlKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7Ci0JCXB1dF9kcXVvdF9saXN0KCZ0b2ZyZWVfaGVhZCk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfaW5jcl9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBudW1iZXIpCi17Ci0JZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzICs9IG51bWJlcjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRxdW90X2luY3Jfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBudW1iZXIpCi17Ci0JZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgKz0gbnVtYmVyOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfZGVjcl9pbm9kZXMoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBudW1iZXIpCi17Ci0JaWYgKHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmZsYWdzICYgRFFVT1RfTkVHQVRJVkVfVVNBR0UgfHwKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzID49IG51bWJlcikKLQkJZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzIC09IG51bWJlcjsKLQllbHNlCi0JCWRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyA9IDA7Ci0JaWYgKGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyA8PSBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0KQotCQlkcXVvdC0+ZHFfZHFiLmRxYl9pdGltZSA9ICh0aW1lX3QpIDA7Ci0JY2xlYXJfYml0KERRX0lOT0RFU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGRxdW90X2RlY3Jfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBudW1iZXIpCi17Ci0JaWYgKHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmZsYWdzICYgRFFVT1RfTkVHQVRJVkVfVVNBR0UgfHwKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgPj0gbnVtYmVyKQotCQlkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSAtPSBudW1iZXI7Ci0JZWxzZQotCQlkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSA9IDA7Ci0JaWYgKGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlIDw9IGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQpCi0JCWRxdW90LT5kcV9kcWIuZHFiX2J0aW1lID0gKHRpbWVfdCkgMDsKLQljbGVhcl9iaXQoRFFfQkxLU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLX0KLQotc3RhdGljIGludCB3YXJuaW5nX2lzc3VlZChzdHJ1Y3QgZHF1b3QgKmRxdW90LCBjb25zdCBpbnQgd2FybnR5cGUpCi17Ci0JaW50IGZsYWcgPSAod2FybnR5cGUgPT0gUVVPVEFfTkxfQkhBUkRXQVJOIHx8Ci0JCXdhcm50eXBlID09IFFVT1RBX05MX0JTT0ZUTE9OR1dBUk4pID8gRFFfQkxLU19CIDoKLQkJKCh3YXJudHlwZSA9PSBRVU9UQV9OTF9JSEFSRFdBUk4gfHwKLQkJd2FybnR5cGUgPT0gUVVPVEFfTkxfSVNPRlRMT05HV0FSTikgPyBEUV9JTk9ERVNfQiA6IDApOwotCi0JaWYgKCFmbGFnKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdChmbGFnLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLX0KLQotI2lmZGVmIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HCi1zdGF0aWMgaW50IGZsYWdfcHJpbnRfd2FybmluZ3MgPSAxOwotCi1zdGF0aWMgaW5saW5lIGludCBuZWVkX3ByaW50X3dhcm5pbmcoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpZiAoIWZsYWdfcHJpbnRfd2FybmluZ3MpCi0JCXJldHVybiAwOwotCi0Jc3dpdGNoIChkcXVvdC0+ZHFfdHlwZSkgewotCQljYXNlIFVTUlFVT1RBOgotCQkJcmV0dXJuIGN1cnJlbnRfZnN1aWQoKSA9PSBkcXVvdC0+ZHFfaWQ7Ci0JCWNhc2UgR1JQUVVPVEE6Ci0JCQlyZXR1cm4gaW5fZ3JvdXBfcChkcXVvdC0+ZHFfaWQpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogUHJpbnQgd2FybmluZyB0byB1c2VyIHdoaWNoIGV4Y2VlZGVkIHF1b3RhICovCi1zdGF0aWMgdm9pZCBwcmludF93YXJuaW5nKHN0cnVjdCBkcXVvdCAqZHF1b3QsIGNvbnN0IGludCB3YXJudHlwZSkKLXsKLQljaGFyICptc2cgPSBOVUxMOwotCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0KLQlpZiAod2FybnR5cGUgPT0gUVVPVEFfTkxfSUhBUkRCRUxPVyB8fAotCSAgICB3YXJudHlwZSA9PSBRVU9UQV9OTF9JU09GVEJFTE9XIHx8Ci0JICAgIHdhcm50eXBlID09IFFVT1RBX05MX0JIQVJEQkVMT1cgfHwKLQkgICAgd2FybnR5cGUgPT0gUVVPVEFfTkxfQlNPRlRCRUxPVyB8fCAhbmVlZF9wcmludF93YXJuaW5nKGRxdW90KSkKLQkJcmV0dXJuOwotCi0JdHR5ID0gZ2V0X2N1cnJlbnRfdHR5KCk7Ci0JaWYgKCF0dHkpCi0JCXJldHVybjsKLQl0dHlfd3JpdGVfbWVzc2FnZSh0dHksIGRxdW90LT5kcV9zYi0+c19pZCk7Ci0JaWYgKHdhcm50eXBlID09IFFVT1RBX05MX0lTT0ZUV0FSTiB8fCB3YXJudHlwZSA9PSBRVU9UQV9OTF9CU09GVFdBUk4pCi0JCXR0eV93cml0ZV9tZXNzYWdlKHR0eSwgIjogd2FybmluZywgIik7Ci0JZWxzZQotCQl0dHlfd3JpdGVfbWVzc2FnZSh0dHksICI6IHdyaXRlIGZhaWxlZCwgIik7Ci0JdHR5X3dyaXRlX21lc3NhZ2UodHR5LCBxdW90YXR5cGVzW2RxdW90LT5kcV90eXBlXSk7Ci0Jc3dpdGNoICh3YXJudHlwZSkgewotCQljYXNlIFFVT1RBX05MX0lIQVJEV0FSTjoKLQkJCW1zZyA9ICIgZmlsZSBsaW1pdCByZWFjaGVkLlxyXG4iOwotCQkJYnJlYWs7Ci0JCWNhc2UgUVVPVEFfTkxfSVNPRlRMT05HV0FSTjoKLQkJCW1zZyA9ICIgZmlsZSBxdW90YSBleGNlZWRlZCB0b28gbG9uZy5cclxuIjsKLQkJCWJyZWFrOwotCQljYXNlIFFVT1RBX05MX0lTT0ZUV0FSTjoKLQkJCW1zZyA9ICIgZmlsZSBxdW90YSBleGNlZWRlZC5cclxuIjsKLQkJCWJyZWFrOwotCQljYXNlIFFVT1RBX05MX0JIQVJEV0FSTjoKLQkJCW1zZyA9ICIgYmxvY2sgbGltaXQgcmVhY2hlZC5cclxuIjsKLQkJCWJyZWFrOwotCQljYXNlIFFVT1RBX05MX0JTT0ZUTE9OR1dBUk46Ci0JCQltc2cgPSAiIGJsb2NrIHF1b3RhIGV4Y2VlZGVkIHRvbyBsb25nLlxyXG4iOwotCQkJYnJlYWs7Ci0JCWNhc2UgUVVPVEFfTkxfQlNPRlRXQVJOOgotCQkJbXNnID0gIiBibG9jayBxdW90YSBleGNlZWRlZC5cclxuIjsKLQkJCWJyZWFrOwotCX0KLQl0dHlfd3JpdGVfbWVzc2FnZSh0dHksIG1zZyk7Ci0JdHR5X2tyZWZfcHV0KHR0eSk7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQotCi0vKiBOZXRsaW5rIGZhbWlseSBzdHJ1Y3R1cmUgZm9yIHF1b3RhICovCi1zdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IHF1b3RhX2dlbmxfZmFtaWx5ID0gewotCS5pZCA9IEdFTkxfSURfR0VORVJBVEUsCi0JLmhkcnNpemUgPSAwLAotCS5uYW1lID0gIlZGU19EUVVPVCIsCi0JLnZlcnNpb24gPSAxLAotCS5tYXhhdHRyID0gUVVPVEFfTkxfQV9NQVgsCi19OwotCi0vKiBTZW5kIHdhcm5pbmcgdG8gdXNlcnNwYWNlIGFib3V0IHVzZXIgd2hpY2ggZXhjZWVkZWQgcXVvdGEgKi8KLXN0YXRpYyB2b2lkIHNlbmRfd2FybmluZyhjb25zdCBzdHJ1Y3QgZHF1b3QgKmRxdW90LCBjb25zdCBjaGFyIHdhcm50eXBlKQotewotCXN0YXRpYyBhdG9taWNfdCBzZXE7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl2b2lkICptc2dfaGVhZDsKLQlpbnQgcmV0OwotCWludCBtc2dfc2l6ZSA9IDQgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgKwotCQkgICAgICAgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1NjQpKTsKLQotCS8qIFdlIGhhdmUgdG8gYWxsb2NhdGUgdXNpbmcgR0ZQX05PRlMgYXMgd2UgYXJlIGNhbGxlZCBmcm9tIGEKLQkgKiBmaWxlc3lzdGVtIHBlcmZvcm1pbmcgd3JpdGUgYW5kIHRodXMgZnVydGhlciByZWN1cnNpb24gaW50bwotCSAqIHRoZSBmcyB0byBmcmVlIHNvbWUgZGF0YSBjb3VsZCBjYXVzZSBkZWFkbG9ja3MuICovCi0Jc2tiID0gZ2VubG1zZ19uZXcobXNnX3NpemUsIEdGUF9OT0ZTKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAiVkZTOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBzZW5kIHF1b3RhIHdhcm5pbmcuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQltc2dfaGVhZCA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgYXRvbWljX2FkZF9yZXR1cm4oMSwgJnNlcSksCi0JCQkmcXVvdGFfZ2VubF9mYW1pbHksIDAsIFFVT1RBX05MX0NfV0FSTklORyk7Ci0JaWYgKCFtc2dfaGVhZCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAiVkZTOiBDYW5ub3Qgc3RvcmUgbmV0bGluayBoZWFkZXIgaW4gcXVvdGEgd2FybmluZy5cbiIpOwotCQlnb3RvIGVycl9vdXQ7Ci0JfQotCXJldCA9IG5sYV9wdXRfdTMyKHNrYiwgUVVPVEFfTkxfQV9RVFlQRSwgZHF1b3QtPmRxX3R5cGUpOwotCWlmIChyZXQpCi0JCWdvdG8gYXR0cl9lcnJfb3V0OwotCXJldCA9IG5sYV9wdXRfdTY0KHNrYiwgUVVPVEFfTkxfQV9FWENFU1NfSUQsIGRxdW90LT5kcV9pZCk7Ci0JaWYgKHJldCkKLQkJZ290byBhdHRyX2Vycl9vdXQ7Ci0JcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX1dBUk5JTkcsIHdhcm50eXBlKTsKLQlpZiAocmV0KQotCQlnb3RvIGF0dHJfZXJyX291dDsKLQlyZXQgPSBubGFfcHV0X3UzMihza2IsIFFVT1RBX05MX0FfREVWX01BSk9SLAotCQlNQUpPUihkcXVvdC0+ZHFfc2ItPnNfZGV2KSk7Ci0JaWYgKHJldCkKLQkJZ290byBhdHRyX2Vycl9vdXQ7Ci0JcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX0RFVl9NSU5PUiwKLQkJTUlOT1IoZHF1b3QtPmRxX3NiLT5zX2RldikpOwotCWlmIChyZXQpCi0JCWdvdG8gYXR0cl9lcnJfb3V0OwotCXJldCA9IG5sYV9wdXRfdTY0KHNrYiwgUVVPVEFfTkxfQV9DQVVTRURfSUQsIGN1cnJlbnRfdWlkKCkpOwotCWlmIChyZXQpCi0JCWdvdG8gYXR0cl9lcnJfb3V0OwotCWdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWQpOwotCi0JcmV0ID0gZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBxdW90YV9nZW5sX2ZhbWlseS5pZCwgR0ZQX05PRlMpOwotCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRVNSQ0gpCi0JCXByaW50ayhLRVJOX0VSUgotCQkJIlZGUzogRmFpbGVkIHRvIHNlbmQgbm90aWZpY2F0aW9uIG1lc3NhZ2U6ICVkXG4iLCByZXQpOwotCXJldHVybjsKLWF0dHJfZXJyX291dDoKLQlwcmludGsoS0VSTl9FUlIgIlZGUzogTm90IGVub3VnaCBzcGFjZSB0byBjb21wb3NlIHF1b3RhIG1lc3NhZ2UhXG4iKTsKLWVycl9vdXQ6Ci0Ja2ZyZWVfc2tiKHNrYik7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3dhcm5pbmdzKHN0cnVjdCBkcXVvdCAqIGNvbnN0ICpkcXVvdHMsIGNoYXIgKndhcm50eXBlKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWFFVT1RBUzsgaSsrKQotCQlpZiAoZHF1b3RzW2ldICE9IE5PRFFVT1QgJiYgd2FybnR5cGVbaV0gIT0gUVVPVEFfTkxfTk9XQVJOICYmCi0JCSAgICAhd2FybmluZ19pc3N1ZWQoZHF1b3RzW2ldLCB3YXJudHlwZVtpXSkpIHsKLSNpZmRlZiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORwotCQkJcHJpbnRfd2FybmluZyhkcXVvdHNbaV0sIHdhcm50eXBlW2ldKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQotCQkJc2VuZF93YXJuaW5nKGRxdW90c1tpXSwgd2FybnR5cGVbaV0pOwotI2VuZGlmCi0JCX0KLX0KLQotc3RhdGljIGlubGluZSBjaGFyIGlnbm9yZV9oYXJkbGltaXQoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlzdHJ1Y3QgbWVtX2RxaW5mbyAqaW5mbyA9ICZzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5pbmZvW2RxdW90LT5kcV90eXBlXTsKLQotCXJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpICYmCi0JICAgIChpbmZvLT5kcWlfZm9ybWF0LT5xZl9mbXRfaWQgIT0gUUZNVF9WRlNfT0xEIHx8ICEoaW5mby0+ZHFpX2ZsYWdzICYgVjFfRFFGX1JTUVVBU0gpKTsKLX0KLQotLyogbmVlZHMgZHFfZGF0YV9sb2NrICovCi1zdGF0aWMgaW50IGNoZWNrX2lkcShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2RlcywgY2hhciAqd2FybnR5cGUpCi17Ci0JKndhcm50eXBlID0gUVVPVEFfTkxfTk9XQVJOOwotCWlmICghc2JfaGFzX3F1b3RhX2xpbWl0c19lbmFibGVkKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpIHx8Ci0JICAgIHRlc3RfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncykpCi0JCXJldHVybiBRVU9UQV9PSzsKLQotCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0ICYmCi0JICAgKGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyArIGlub2RlcykgPiBkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0ICYmCi0gICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHsKLQkJKndhcm50eXBlID0gUVVPVEFfTkxfSUhBUkRXQVJOOwotCQlyZXR1cm4gTk9fUVVPVEE7Ci0JfQotCi0JaWYgKGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgJiYKLQkgICAoZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzICsgaW5vZGVzKSA+IGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgJiYKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfaXRpbWUgJiYgZ2V0X3NlY29uZHMoKSA+PSBkcXVvdC0+ZHFfZHFiLmRxYl9pdGltZSAmJgotICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7Ci0JCSp3YXJudHlwZSA9IFFVT1RBX05MX0lTT0ZUTE9OR1dBUk47Ci0JCXJldHVybiBOT19RVU9UQTsKLQl9Ci0KLQlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCAmJgotCSAgIChkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgKyBpbm9kZXMpID4gZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCAmJgotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9pdGltZSA9PSAwKSB7Ci0JCSp3YXJudHlwZSA9IFFVT1RBX05MX0lTT0ZUV0FSTjsKLQkJZHF1b3QtPmRxX2RxYi5kcWJfaXRpbWUgPSBnZXRfc2Vjb25kcygpICsgc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+aW5mb1tkcXVvdC0+ZHFfdHlwZV0uZHFpX2lncmFjZTsKLQl9Ci0KLQlyZXR1cm4gUVVPVEFfT0s7Ci19Ci0KLS8qIG5lZWRzIGRxX2RhdGFfbG9jayAqLwotc3RhdGljIGludCBjaGVja19iZHEoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSwgaW50IHByZWFsbG9jLCBjaGFyICp3YXJudHlwZSkKLXsKLQkqd2FybnR5cGUgPSBRVU9UQV9OTF9OT1dBUk47Ci0JaWYgKCFzYl9oYXNfcXVvdGFfbGltaXRzX2VuYWJsZWQoZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSkgfHwKLQkgICAgdGVzdF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkKLQkJcmV0dXJuIFFVT1RBX09LOwotCi0JaWYgKGRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQgJiYKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgKyBzcGFjZSA+IGRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQgJiYKLSAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkgewotCQlpZiAoIXByZWFsbG9jKQotCQkJKndhcm50eXBlID0gUVVPVEFfTkxfQkhBUkRXQVJOOwotCQlyZXR1cm4gTk9fUVVPVEE7Ci0JfQotCi0JaWYgKGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgJiYKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgKyBzcGFjZSA+IGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgJiYKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfYnRpbWUgJiYgZ2V0X3NlY29uZHMoKSA+PSBkcXVvdC0+ZHFfZHFiLmRxYl9idGltZSAmJgotICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7Ci0JCWlmICghcHJlYWxsb2MpCi0JCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9CU09GVExPTkdXQVJOOwotCQlyZXR1cm4gTk9fUVVPVEE7Ci0JfQotCi0JaWYgKGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgJiYKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgKyBzcGFjZSA+IGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgJiYKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfYnRpbWUgPT0gMCkgewotCQlpZiAoIXByZWFsbG9jKSB7Ci0JCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9CU09GVFdBUk47Ci0JCQlkcXVvdC0+ZHFfZHFiLmRxYl9idGltZSA9IGdldF9zZWNvbmRzKCkgKyBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5pbmZvW2RxdW90LT5kcV90eXBlXS5kcWlfYmdyYWNlOwotCQl9Ci0JCWVsc2UKLQkJCS8qCi0JCQkgKiBXZSBkb24ndCBhbGxvdyBwcmVhbGxvY2F0aW9uIHRvIGV4Y2VlZCBzb2Z0bGltaXQgc28gZXhjZWVkaW5nIHdpbGwKLQkJCSAqIGJlIGFsd2F5cyBwcmludGVkCi0JCQkgKi8KLQkJCXJldHVybiBOT19RVU9UQTsKLQl9Ci0KLQlyZXR1cm4gUVVPVEFfT0s7Ci19Ci0KLXN0YXRpYyBpbnQgaW5mb19pZHFfZnJlZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IGlub2RlcykKLXsKLQlpZiAodGVzdF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSB8fAotCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgPD0gZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCB8fAotCSAgICAhc2JfaGFzX3F1b3RhX2xpbWl0c19lbmFibGVkKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpKQotCQlyZXR1cm4gUVVPVEFfTkxfTk9XQVJOOwotCi0JaWYgKGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyAtIGlub2RlcyA8PSBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0KQotCQlyZXR1cm4gUVVPVEFfTkxfSVNPRlRCRUxPVzsKLQlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzID49IGRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQgJiYKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzIC0gaW5vZGVzIDwgZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCkKLQkJcmV0dXJuIFFVT1RBX05MX0lIQVJEQkVMT1c7Ci0JcmV0dXJuIFFVT1RBX05MX05PV0FSTjsKLX0KLQotc3RhdGljIGludCBpbmZvX2JkcV9mcmVlKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3Qgc3BhY2UpCi17Ci0JaWYgKHRlc3RfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncykgfHwKLQkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgPD0gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCkKLQkJcmV0dXJuIFFVT1RBX05MX05PV0FSTjsKLQotCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSAtIHNwYWNlIDw9IGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQpCi0JCXJldHVybiBRVU9UQV9OTF9CU09GVEJFTE9XOwotCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSA+PSBkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0ICYmCi0JICAgIGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlIC0gc3BhY2UgPCBkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0KQotCQlyZXR1cm4gUVVPVEFfTkxfQkhBUkRCRUxPVzsKLQlyZXR1cm4gUVVPVEFfTkxfTk9XQVJOOwotfQotLyoKLSAqCUluaXRpYWxpemUgcXVvdGEgcG9pbnRlcnMgaW4gaW5vZGUKLSAqCVdlIGRvIHRoaW5ncyBpbiBhIGJpdCBjb21wbGljYXRlZCB3YXkgYnV0IGJ5IHRoYXQgd2UgYXZvaWQgY2FsbGluZwotICoJZHFnZXQoKSBhbmQgdGh1cyBmaWxlc3lzdGVtIGNhbGxiYWNrcyB1bmRlciBkcXB0cl9zZW0uCi0gKi8KLWludCBkcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQotewotCXVuc2lnbmVkIGludCBpZCA9IDA7Ci0JaW50IGNudCwgcmV0ID0gMDsKLQlzdHJ1Y3QgZHF1b3QgKmdvdFtNQVhRVU9UQVNdID0geyBOT0RRVU9ULCBOT0RRVU9UIH07Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwotCi0JLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCi0gICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBGaXJzdCBnZXQgcmVmZXJlbmNlcyB0byBzdHJ1Y3R1cmVzIHdlIG1pZ2h0IG5lZWQuICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmICh0eXBlICE9IC0xICYmIGNudCAhPSB0eXBlKQotCQkJY29udGludWU7Ci0JCXN3aXRjaCAoY250KSB7Ci0JCWNhc2UgVVNSUVVPVEE6Ci0JCQlpZCA9IGlub2RlLT5pX3VpZDsKLQkJCWJyZWFrOwotCQljYXNlIEdSUFFVT1RBOgotCQkJaWQgPSBpbm9kZS0+aV9naWQ7Ci0JCQlicmVhazsKLQkJfQotCQlnb3RbY250XSA9IGRxZ2V0KHNiLCBpZCwgY250KTsKLQl9Ci0KLQlkb3duX3dyaXRlKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7Ci0JLyogSGF2aW5nIGRxcHRyX3NlbSB3ZSBrbm93IE5PUVVPVEEgZmxhZ3MgY2FuJ3QgYmUgYWx0ZXJlZC4uLiAqLwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJZ290byBvdXRfZXJyOwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKLQkJCWNvbnRpbnVlOwotCQkvKiBBdm9pZCByYWNlcyB3aXRoIHF1b3Rhb2ZmKCkgKi8KLQkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCBjbnQpKQotCQkJY29udGludWU7Ci0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdID09IE5PRFFVT1QpIHsKLQkJCWlub2RlLT5pX2RxdW90W2NudF0gPSBnb3RbY250XTsKLQkJCWdvdFtjbnRdID0gTk9EUVVPVDsKLQkJfQotCX0KLW91dF9lcnI6Ci0JdXBfd3JpdGUoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKLQkvKiBEcm9wIHVudXNlZCByZWZlcmVuY2VzICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlkcXB1dChnb3RbY250XSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIAlSZWxlYXNlIGFsbCBxdW90YXMgcmVmZXJlbmNlZCBieSBpbm9kZQotICovCi1pbnQgZHF1b3RfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWludCBjbnQ7Ci0Jc3RydWN0IGRxdW90ICpwdXRbTUFYUVVPVEFTXTsKLQotCWRvd25fd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJcHV0W2NudF0gPSBpbm9kZS0+aV9kcXVvdFtjbnRdOwotCQlpbm9kZS0+aV9kcXVvdFtjbnRdID0gTk9EUVVPVDsKLQl9Ci0JdXBfd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJZHFwdXQocHV0W2NudF0pOwotCXJldHVybiAwOwotfQotCi0vKiBXcmFwcGVyIHRvIHJlbW92ZSByZWZlcmVuY2VzIHRvIHF1b3RhIHN0cnVjdHVyZXMgZnJvbSBpbm9kZSAqLwotdm9pZCB2ZnNfZHFfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCS8qIEhlcmUgd2UgY2FuIGdldCBhcmJpdHJhcnkgaW5vZGUgZnJvbSBjbGVhcl9pbm9kZSgpIHNvIHdlIGhhdmUKLQkgKiB0byBiZSBjYXJlZnVsLiBPVE9IIHdlIGRvbid0IG5lZWQgbG9ja2luZyBhcyBxdW90YSBvcGVyYXRpb25zCi0JICogYXJlIGFsbG93ZWQgdG8gY2hhbmdlIG9ubHkgYXQgbW91bnQgdGltZSAqLwotCWlmICghSVNfTk9RVU9UQShpbm9kZSkgJiYgaW5vZGUtPmlfc2IgJiYgaW5vZGUtPmlfc2ItPmRxX29wCi0JICAgICYmIGlub2RlLT5pX3NiLT5kcV9vcC0+ZHJvcCkgewotCQlpbnQgY250OwotCQkvKiBUZXN0IGJlZm9yZSBjYWxsaW5nIHRvIHJ1bGUgb3V0IGNhbGxzIGZyb20gcHJvYyBhbmQgc3VjaAotICAgICAgICAgICAgICAgICAqIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZCB0byBibG9jay4gTm90ZSB0aGF0IHRoaXMgaXMKLQkJICogYWN0dWFsbHkgcmVsaWFibGUgdGVzdCBldmVuIHdpdGhvdXQgdGhlIGxvY2sgLSB0aGUgY2FsbGVyCi0JCSAqIG11c3QgYXNzdXJlIHRoYXQgbm9ib2R5IGNhbiBjb21lIGFmdGVyIHRoZSBEUVVPVF9EUk9QIGFuZAotCQkgKiBhZGQgcXVvdGEgcG9pbnRlcnMgYmFjayBhbnl3YXkgKi8KLQkJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0gIT0gTk9EUVVPVCkKLQkJCQlicmVhazsKLQkJaWYgKGNudCA8IE1BWFFVT1RBUykKLQkJCWlub2RlLT5pX3NiLT5kcV9vcC0+ZHJvcChpbm9kZSk7Ci0JfQotfQotCi0vKgotICogRm9sbG93aW5nIGZvdXIgZnVuY3Rpb25zIHVwZGF0ZSBpX2Jsb2NrcytpX2J5dGVzIGZpZWxkcyBhbmQKLSAqIHF1b3RhIGluZm9ybWF0aW9uICh0b2dldGhlciB3aXRoIGFwcHJvcHJpYXRlIGNoZWNrcykKLSAqIE5PVEU6IFdlIGFic29sdXRlbHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGNhbGxlciBkaXJ0aWVzCi0gKiB0aGUgaW5vZGUgKHVzdWFsbHkgbWFjcm9zIGluIHF1b3Rhb3BzLmggY2FyZSBhYm91dCB0aGlzKSBhbmQKLSAqIGhvbGRzIGEgaGFuZGxlIGZvciB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBzbyB0aGF0IGRxdW90IHdyaXRlIGFuZAotICogaW5vZGUgd3JpdGUgZ28gaW50byB0aGUgc2FtZSB0cmFuc2FjdGlvbi4KLSAqLwotCi0vKgotICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKLSAqLwotaW50IGRxdW90X2FsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgd2FybikKLXsKLQlpbnQgY250LCByZXQgPSBOT19RVU9UQTsKLQljaGFyIHdhcm50eXBlW01BWFFVT1RBU107Ci0KLQkvKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKLSAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7Ci1vdXRfYWRkOgotCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7Ci0JCXJldHVybiBRVU9UQV9PSzsKLQl9Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQl3YXJudHlwZVtjbnRdID0gUVVPVEFfTkxfTk9XQVJOOwotCi0JZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CS8qIE5vdyB3ZSBjYW4gZG8gcmVsaWFibGUgdGVzdC4uLiAqLwotCQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JCWdvdG8gb3V0X2FkZDsKLQl9Ci0Jc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSA9PSBOT0RRVU9UKQotCQkJY29udGludWU7Ci0JCWlmIChjaGVja19iZHEoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyLCB3YXJuLCB3YXJudHlwZStjbnQpID09IE5PX1FVT1RBKQotCQkJZ290byB3YXJuX3B1dF9hbGw7Ci0JfQotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSA9PSBOT0RRVU9UKQotCQkJY29udGludWU7Ci0JCWRxdW90X2luY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKLQl9Ci0JaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwotCXJldCA9IFFVT1RBX09LOwotd2Fybl9wdXRfYWxsOgotCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCWlmIChyZXQgPT0gUVVPVEFfT0spCi0JCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCi0JCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7Ci0JZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKLQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCi0gKi8KLWludCBkcXVvdF9hbGxvY19pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKLXsKLQlpbnQgY250LCByZXQgPSBOT19RVU9UQTsKLQljaGFyIHdhcm50eXBlW01BWFFVT1RBU107Ci0KLQkvKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKLSAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQlyZXR1cm4gUVVPVEFfT0s7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQl3YXJudHlwZVtjbnRdID0gUVVPVEFfTkxfTk9XQVJOOwotCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkgewotCQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JCXJldHVybiBRVU9UQV9PSzsKLQl9Ci0Jc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSA9PSBOT0RRVU9UKQotCQkJY29udGludWU7Ci0JCWlmIChjaGVja19pZHEoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyLCB3YXJudHlwZStjbnQpID09IE5PX1FVT1RBKQotCQkJZ290byB3YXJuX3B1dF9hbGw7Ci0JfQotCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdID09IE5PRFFVT1QpCi0JCQljb250aW51ZTsKLQkJZHF1b3RfaW5jcl9pbm9kZXMoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKLQl9Ci0JcmV0ID0gUVVPVEFfT0s7Ci13YXJuX3B1dF9hbGw6Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JaWYgKHJldCA9PSBRVU9UQV9PSykKLQkJLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQkJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKLQlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOwotCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKLSAqLwotaW50IGRxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCi17Ci0JdW5zaWduZWQgaW50IGNudDsKLQljaGFyIHdhcm50eXBlW01BWFFVT1RBU107Ci0KLQkvKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKLSAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7Ci1vdXRfc3ViOgotCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIG51bWJlcik7Ci0JCXJldHVybiBRVU9UQV9PSzsKLQl9Ci0KLQlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQkvKiBOb3cgcmVjaGVjayByZWxpYWJseSB3aGVuIGhvbGRpbmcgZHFwdHJfc2VtICovCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7Ci0JCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQkJZ290byBvdXRfc3ViOwotCX0KLQlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdID09IE5PRFFVT1QpCi0JCQljb250aW51ZTsKLQkJd2FybnR5cGVbY250XSA9IGluZm9fYmRxX2ZyZWUoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKLQkJZHF1b3RfZGVjcl9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwotCX0KLQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIG51bWJlcik7Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQotCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKLQlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOwotCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlyZXR1cm4gUVVPVEFfT0s7Ci19Ci0KLS8qCi0gKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAotICovCi1pbnQgZHF1b3RfZnJlZV9pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKLXsKLQl1bnNpZ25lZCBpbnQgY250OwotCWNoYXIgd2FybnR5cGVbTUFYUVVPVEFTXTsKLQotCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQotICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCi0JCXJldHVybiBRVU9UQV9PSzsKLQotCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCS8qIE5vdyByZWNoZWNrIHJlbGlhYmx5IHdoZW4gaG9sZGluZyBkcXB0cl9zZW0gKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCQlyZXR1cm4gUVVPVEFfT0s7Ci0JfQotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0gPT0gTk9EUVVPVCkKLQkJCWNvbnRpbnVlOwotCQl3YXJudHlwZVtjbnRdID0gaW5mb19pZHFfZnJlZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwotCQlkcXVvdF9kZWNyX2lub2Rlcyhpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOwotCX0KLQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKLQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQltYXJrX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90W2NudF0pOwotCWZsdXNoX3dhcm5pbmdzKGlub2RlLT5pX2RxdW90LCB3YXJudHlwZSk7Ci0JdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCXJldHVybiBRVU9UQV9PSzsKLX0KLQotLyoKLSAqIFRyYW5zZmVyIHRoZSBudW1iZXIgb2YgaW5vZGUgYW5kIGJsb2NrcyBmcm9tIG9uZSBkaXNrcXVvdGEgdG8gYW4gb3RoZXIuCi0gKgotICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKLSAqIEEgdHJhbnNhY3Rpb24gbXVzdCBiZSBzdGFydGVkIHdoZW4gZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4KLSAqLwotaW50IGRxdW90X3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqaWF0dHIpCi17Ci0JcXNpemVfdCBzcGFjZTsKLQlzdHJ1Y3QgZHF1b3QgKnRyYW5zZmVyX2Zyb21bTUFYUVVPVEFTXTsKLQlzdHJ1Y3QgZHF1b3QgKnRyYW5zZmVyX3RvW01BWFFVT1RBU107Ci0JaW50IGNudCwgcmV0ID0gUVVPVEFfT0s7Ci0JaW50IGNodWlkID0gaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgaW5vZGUtPmlfdWlkICE9IGlhdHRyLT5pYV91aWQsCi0JICAgIGNoZ2lkID0gaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQgJiYgaW5vZGUtPmlfZ2lkICE9IGlhdHRyLT5pYV9naWQ7Ci0JY2hhciB3YXJudHlwZV90b1tNQVhRVU9UQVNdOwotCWNoYXIgd2FybnR5cGVfZnJvbV9pbm9kZXNbTUFYUVVPVEFTXSwgd2FybnR5cGVfZnJvbV9zcGFjZVtNQVhRVU9UQVNdOwotCi0JLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCi0gICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJcmV0dXJuIFFVT1RBX09LOwotCS8qIEluaXRpYWxpemUgdGhlIGFycmF5cyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQl0cmFuc2Zlcl9mcm9tW2NudF0gPSBOT0RRVU9UOwotCQl0cmFuc2Zlcl90b1tjbnRdID0gTk9EUVVPVDsKLQkJd2FybnR5cGVfdG9bY250XSA9IFFVT1RBX05MX05PV0FSTjsKLQkJc3dpdGNoIChjbnQpIHsKLQkJCWNhc2UgVVNSUVVPVEE6Ci0JCQkJaWYgKCFjaHVpZCkKLQkJCQkJY29udGludWU7Ci0JCQkJdHJhbnNmZXJfdG9bY250XSA9IGRxZ2V0KGlub2RlLT5pX3NiLCBpYXR0ci0+aWFfdWlkLCBjbnQpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBHUlBRVU9UQToKLQkJCQlpZiAoIWNoZ2lkKQotCQkJCQljb250aW51ZTsKLQkJCQl0cmFuc2Zlcl90b1tjbnRdID0gZHFnZXQoaW5vZGUtPmlfc2IsIGlhdHRyLT5pYV9naWQsIGNudCk7Ci0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlkb3duX3dyaXRlKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JLyogTm93IHJlY2hlY2sgcmVsaWFibHkgd2hlbiBob2xkaW5nIGRxcHRyX3NlbSAqLwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkgewkvKiBGaWxlIHdpdGhvdXQgcXVvdGEgYWNjb3VudGluZz8gKi8KLQkJdXBfd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQkJZ290byBwdXRfYWxsOwotCX0KLQlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0Jc3BhY2UgPSBpbm9kZV9nZXRfYnl0ZXMoaW5vZGUpOwotCS8qIEJ1aWxkIHRoZSB0cmFuc2Zlcl9mcm9tIGxpc3QgYW5kIGNoZWNrIHRoZSBsaW1pdHMgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKHRyYW5zZmVyX3RvW2NudF0gPT0gTk9EUVVPVCkKLQkJCWNvbnRpbnVlOwotCQl0cmFuc2Zlcl9mcm9tW2NudF0gPSBpbm9kZS0+aV9kcXVvdFtjbnRdOwotCQlpZiAoY2hlY2tfaWRxKHRyYW5zZmVyX3RvW2NudF0sIDEsIHdhcm50eXBlX3RvICsgY250KSA9PQotCQkgICAgTk9fUVVPVEEgfHwgY2hlY2tfYmRxKHRyYW5zZmVyX3RvW2NudF0sIHNwYWNlLCAwLAotCQkgICAgd2FybnR5cGVfdG8gKyBjbnQpID09IE5PX1FVT1RBKQotCQkJZ290byBvdmVyX3F1b3RhOwotCX0KLQotCS8qCi0JICogRmluYWxseSBwZXJmb3JtIHRoZSBuZWVkZWQgdHJhbnNmZXIgZnJvbSB0cmFuc2Zlcl9mcm9tIHRvIHRyYW5zZmVyX3RvCi0JICovCi0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCS8qCi0JCSAqIFNraXAgY2hhbmdlcyBmb3Igc2FtZSB1aWQgb3IgZ2lkIG9yIGZvciB0dXJuZWQgb2ZmIHF1b3RhLXR5cGUuCi0JCSAqLwotCQlpZiAodHJhbnNmZXJfdG9bY250XSA9PSBOT0RRVU9UKQotCQkJY29udGludWU7Ci0KLQkJLyogRHVlIHRvIElPIGVycm9yIHdlIG1pZ2h0IG5vdCBoYXZlIHRyYW5zZmVyX2Zyb21bXSBzdHJ1Y3R1cmUgKi8KLQkJaWYgKHRyYW5zZmVyX2Zyb21bY250XSkgewotCQkJd2FybnR5cGVfZnJvbV9pbm9kZXNbY250XSA9Ci0JCQkJaW5mb19pZHFfZnJlZSh0cmFuc2Zlcl9mcm9tW2NudF0sIDEpOwotCQkJd2FybnR5cGVfZnJvbV9zcGFjZVtjbnRdID0KLQkJCQlpbmZvX2JkcV9mcmVlKHRyYW5zZmVyX2Zyb21bY250XSwgc3BhY2UpOwotCQkJZHF1b3RfZGVjcl9pbm9kZXModHJhbnNmZXJfZnJvbVtjbnRdLCAxKTsKLQkJCWRxdW90X2RlY3Jfc3BhY2UodHJhbnNmZXJfZnJvbVtjbnRdLCBzcGFjZSk7Ci0JCX0KLQotCQlkcXVvdF9pbmNyX2lub2Rlcyh0cmFuc2Zlcl90b1tjbnRdLCAxKTsKLQkJZHF1b3RfaW5jcl9zcGFjZSh0cmFuc2Zlcl90b1tjbnRdLCBzcGFjZSk7Ci0KLQkJaW5vZGUtPmlfZHF1b3RbY250XSA9IHRyYW5zZmVyX3RvW2NudF07Ci0JfQotCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCXVwX3dyaXRlKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0KLQkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLwotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlpZiAodHJhbnNmZXJfZnJvbVtjbnRdKQotCQkJbWFya19kcXVvdF9kaXJ0eSh0cmFuc2Zlcl9mcm9tW2NudF0pOwotCQlpZiAodHJhbnNmZXJfdG9bY250XSkgewotCQkJbWFya19kcXVvdF9kaXJ0eSh0cmFuc2Zlcl90b1tjbnRdKTsKLQkJCS8qIFRoZSByZWZlcmVuY2Ugd2UgZ290IGlzIHRyYW5zZmVycmVkIHRvIHRoZSBpbm9kZSAqLwotCQkJdHJhbnNmZXJfdG9bY250XSA9IE5PRFFVT1Q7Ci0JCX0KLQl9Ci13YXJuX3B1dF9hbGw6Ci0JZmx1c2hfd2FybmluZ3ModHJhbnNmZXJfdG8sIHdhcm50eXBlX3RvKTsKLQlmbHVzaF93YXJuaW5ncyh0cmFuc2Zlcl9mcm9tLCB3YXJudHlwZV9mcm9tX2lub2Rlcyk7Ci0JZmx1c2hfd2FybmluZ3ModHJhbnNmZXJfZnJvbSwgd2FybnR5cGVfZnJvbV9zcGFjZSk7Ci1wdXRfYWxsOgotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQlkcXB1dCh0cmFuc2Zlcl9mcm9tW2NudF0pOwotCQlkcXB1dCh0cmFuc2Zlcl90b1tjbnRdKTsKLQl9Ci0JcmV0dXJuIHJldDsKLW92ZXJfcXVvdGE6Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JdXBfd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQkvKiBDbGVhciBkcXVvdCBwb2ludGVycyB3ZSBkb24ndCB3YW50IHRvIGRxcHV0KCkgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCXRyYW5zZmVyX2Zyb21bY250XSA9IE5PRFFVT1Q7Ci0JcmV0ID0gTk9fUVVPVEE7Ci0JZ290byB3YXJuX3B1dF9hbGw7Ci19Ci0KLS8qIFdyYXBwZXIgZm9yIHRyYW5zZmVycmluZyBvd25lcnNoaXAgb2YgYW4gaW5vZGUgKi8KLWludCB2ZnNfZHFfdHJhbnNmZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICppYXR0cikKLXsKLQlpZiAoc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikgJiYgIUlTX05PUVVPVEEoaW5vZGUpKSB7Ci0JCXZmc19kcV9pbml0KGlub2RlKTsKLQkJaWYgKGlub2RlLT5pX3NiLT5kcV9vcC0+dHJhbnNmZXIoaW5vZGUsIGlhdHRyKSA9PSBOT19RVU9UQSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKgotICogV3JpdGUgaW5mbyBvZiBxdW90YSBmaWxlIHRvIGRpc2sKLSAqLwotaW50IGRxdW90X2NvbW1pdF9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCWludCByZXQ7Ci0Jc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpOwotCi0JbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOwotCXJldCA9IGRxb3B0LT5vcHNbdHlwZV0tPndyaXRlX2ZpbGVfaW5mbyhzYiwgdHlwZSk7Ci0JbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIERlZmluaXRpb25zIG9mIGRpc2txdW90YSBvcGVyYXRpb25zLgotICovCi1zdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBkcXVvdF9vcGVyYXRpb25zID0gewotCS5pbml0aWFsaXplCT0gZHF1b3RfaW5pdGlhbGl6ZSwKLQkuZHJvcAkJPSBkcXVvdF9kcm9wLAotCS5hbGxvY19zcGFjZQk9IGRxdW90X2FsbG9jX3NwYWNlLAotCS5hbGxvY19pbm9kZQk9IGRxdW90X2FsbG9jX2lub2RlLAotCS5mcmVlX3NwYWNlCT0gZHF1b3RfZnJlZV9zcGFjZSwKLQkuZnJlZV9pbm9kZQk9IGRxdW90X2ZyZWVfaW5vZGUsCi0JLnRyYW5zZmVyCT0gZHF1b3RfdHJhbnNmZXIsCi0JLndyaXRlX2RxdW90CT0gZHF1b3RfY29tbWl0LAotCS5hY3F1aXJlX2RxdW90CT0gZHF1b3RfYWNxdWlyZSwKLQkucmVsZWFzZV9kcXVvdAk9IGRxdW90X3JlbGVhc2UsCi0JLm1hcmtfZGlydHkJPSBkcXVvdF9tYXJrX2RxdW90X2RpcnR5LAotCS53cml0ZV9pbmZvCT0gZHF1b3RfY29tbWl0X2luZm8sCi0JLmFsbG9jX2RxdW90CT0gZHF1b3RfYWxsb2MsCi0JLmRlc3Ryb3lfZHF1b3QJPSBkcXVvdF9kZXN0cm95LAotfTsKLQotLyoKLSAqIFR1cm4gcXVvdGEgb2ZmIG9uIGEgZGV2aWNlLiB0eXBlID09IC0xID09PiBxdW90YW9mZiBmb3IgYWxsIHR5cGVzICh1bW91bnQpCi0gKi8KLWludCB2ZnNfcXVvdGFfZGlzYWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGZsYWdzKQotewotCWludCBjbnQsIHJldCA9IDA7Ci0Jc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpOwotCXN0cnVjdCBpbm9kZSAqdG9wdXRpbm9kZVtNQVhRVU9UQVNdOwotCi0JLyogQ2Fubm90IHR1cm4gb2ZmIHVzYWdlIGFjY291bnRpbmcgd2l0aG91dCB0dXJuaW5nIG9mZiBsaW1pdHMsIG9yCi0JICogc3VzcGVuZCBxdW90YXMgYW5kIHNpbXVsdGFuZW91c2x5IHR1cm4gcXVvdGFzIG9mZi4gKi8KLQlpZiAoKGZsYWdzICYgRFFVT1RfVVNBR0VfRU5BQkxFRCAmJiAhKGZsYWdzICYgRFFVT1RfTElNSVRTX0VOQUJMRUQpKQotCSAgICB8fCAoZmxhZ3MgJiBEUVVPVF9TVVNQRU5ERUQgJiYgZmxhZ3MgJiAoRFFVT1RfTElNSVRTX0VOQUJMRUQgfAotCSAgICBEUVVPVF9VU0FHRV9FTkFCTEVEKSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogV2UgbmVlZCB0byBzZXJpYWxpemUgcXVvdGFfb2ZmKCkgZm9yIGRldmljZSAqLwotCW11dGV4X2xvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKLQotCS8qCi0JICogU2tpcCBldmVyeXRoaW5nIGlmIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gV2UgaGF2ZSB0byBkbyB0aGlzIGJlY2F1c2UKLQkgKiBzb21ldGltZXMgd2UgYXJlIGNhbGxlZCB3aGVuIGZpbGxfc3VwZXIoKSBmYWlsZWQgYW5kIGNhbGxpbmcKLQkgKiBzeW5jX2ZzKCkgaW4gc3VjaCBjYXNlcyBkb2VzIG5vIGdvb2QuCi0JICovCi0JaWYgKCFzYl9hbnlfcXVvdGFfbG9hZGVkKHNiKSkgewotCQltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKLQkJcmV0dXJuIDA7Ci0JfQotCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewotCQl0b3B1dGlub2RlW2NudF0gPSBOVUxMOwotCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXNiX2hhc19xdW90YV9sb2FkZWQoc2IsIGNudCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZmxhZ3MgJiBEUVVPVF9TVVNQRU5ERUQpIHsKLQkJCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7Ci0JCQlkcW9wdC0+ZmxhZ3MgfD0KLQkJCQlkcXVvdF9zdGF0ZV9mbGFnKERRVU9UX1NVU1BFTkRFRCwgY250KTsKLQkJCXNwaW5fdW5sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKLQkJfSBlbHNlIHsKLQkJCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7Ci0JCQlkcW9wdC0+ZmxhZ3MgJj0gfmRxdW90X3N0YXRlX2ZsYWcoZmxhZ3MsIGNudCk7Ci0JCQkvKiBUdXJuaW5nIG9mZiBzdXNwZW5kZWQgcXVvdGFzPyAqLwotCQkJaWYgKCFzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCBjbnQpICYmCi0JCQkgICAgc2JfaGFzX3F1b3RhX3N1c3BlbmRlZChzYiwgY250KSkgewotCQkJCWRxb3B0LT5mbGFncyAmPQl+ZHF1b3Rfc3RhdGVfZmxhZygKLQkJCQkJCQlEUVVPVF9TVVNQRU5ERUQsIGNudCk7Ci0JCQkJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOwotCQkJCWlwdXQoZHFvcHQtPmZpbGVzW2NudF0pOwotCQkJCWRxb3B0LT5maWxlc1tjbnRdID0gTlVMTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKLQkJfQotCi0JCS8qIFdlIHN0aWxsIGhhdmUgdG8ga2VlcCBxdW90YSBsb2FkZWQ/ICovCi0JCWlmIChzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCBjbnQpICYmICEoZmxhZ3MgJiBEUVVPVF9TVVNQRU5ERUQpKQotCQkJY29udGludWU7Ci0KLQkJLyogTm90ZTogdGhlc2UgYXJlIGJsb2NraW5nIG9wZXJhdGlvbnMgKi8KLQkJZHJvcF9kcXVvdF9yZWYoc2IsIGNudCk7Ci0JCWludmFsaWRhdGVfZHF1b3RzKHNiLCBjbnQpOwotCQkvKgotCQkgKiBOb3cgYWxsIGRxdW90cyBzaG91bGQgYmUgaW52YWxpZGF0ZWQsIGFsbCB3cml0ZXMgZG9uZSBzbyB3ZSBzaG91bGQgYmUgb25seQotCQkgKiB1c2VycyBvZiB0aGUgaW5mby4gTm8gbG9ja3MgbmVlZGVkLgotCQkgKi8KLQkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2NudF0pKQotCQkJc2ItPmRxX29wLT53cml0ZV9pbmZvKHNiLCBjbnQpOwotCQlpZiAoZHFvcHQtPm9wc1tjbnRdLT5mcmVlX2ZpbGVfaW5mbykKLQkJCWRxb3B0LT5vcHNbY250XS0+ZnJlZV9maWxlX2luZm8oc2IsIGNudCk7Ci0JCXB1dF9xdW90YV9mb3JtYXQoZHFvcHQtPmluZm9bY250XS5kcWlfZm9ybWF0KTsKLQotCQl0b3B1dGlub2RlW2NudF0gPSBkcW9wdC0+ZmlsZXNbY250XTsKLQkJaWYgKCFzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCBjbnQpKQotCQkJZHFvcHQtPmZpbGVzW2NudF0gPSBOVUxMOwotCQlkcW9wdC0+aW5mb1tjbnRdLmRxaV9mbGFncyA9IDA7Ci0JCWRxb3B0LT5pbmZvW2NudF0uZHFpX2lncmFjZSA9IDA7Ci0JCWRxb3B0LT5pbmZvW2NudF0uZHFpX2JncmFjZSA9IDA7Ci0JCWRxb3B0LT5vcHNbY250XSA9IE5VTEw7Ci0JfQotCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwotCi0JLyogU2tpcCBzeW5jaW5nIGFuZCBzZXR0aW5nIGZsYWdzIGlmIHF1b3RhIGZpbGVzIGFyZSBoaWRkZW4gKi8KLQlpZiAoZHFvcHQtPmZsYWdzICYgRFFVT1RfUVVPVEFfU1lTX0ZJTEUpCi0JCWdvdG8gcHV0X2lub2RlczsKLQotCS8qIFN5bmMgdGhlIHN1cGVyYmxvY2sgc28gdGhhdCBidWZmZXJzIHdpdGggcXVvdGEgZGF0YSBhcmUgd3JpdHRlbiB0bwotCSAqIGRpc2sgKGFuZCBzbyB1c2Vyc3BhY2Ugc2VlcyBjb3JyZWN0IGRhdGEgYWZ0ZXJ3YXJkcykuICovCi0JaWYgKHNiLT5zX29wLT5zeW5jX2ZzKQotCQlzYi0+c19vcC0+c3luY19mcyhzYiwgMSk7Ci0Jc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKLQkvKiBOb3cgdGhlIHF1b3RhIGZpbGVzIGFyZSBqdXN0IG9yZGluYXJ5IGZpbGVzIGFuZCB3ZSBjYW4gc2V0IHRoZQotCSAqIGlub2RlIGZsYWdzIGJhY2suIE1vcmVvdmVyIHdlIGRpc2NhcmQgdGhlIHBhZ2VjYWNoZSBzbyB0aGF0Ci0JICogdXNlcnNwYWNlIHNlZXMgdGhlIHdyaXRlcyB3ZSBkaWQgYnlwYXNzaW5nIHRoZSBwYWdlY2FjaGUuIFdlCi0JICogbXVzdCBhbHNvIGRpc2NhcmQgdGhlIGJsb2NrZGV2IGJ1ZmZlcnMgc28gdGhhdCB3ZSBzZWUgdGhlCi0JICogY2hhbmdlcyBkb25lIGJ5IHVzZXJzcGFjZSBvbiB0aGUgbmV4dCBxdW90YW9uKCkgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCi0JCWlmICh0b3B1dGlub2RlW2NudF0pIHsKLQkJCW11dGV4X2xvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKLQkJCS8qIElmIHF1b3RhIHdhcyByZWVuYWJsZWQgaW4gdGhlIG1lYW50aW1lLCB3ZSBoYXZlCi0JCQkgKiBub3RoaW5nIHRvIGRvICovCi0JCQlpZiAoIXNiX2hhc19xdW90YV9sb2FkZWQoc2IsIGNudCkpIHsKLQkJCQltdXRleF9sb2NrX25lc3RlZCgmdG9wdXRpbm9kZVtjbnRdLT5pX211dGV4LCBJX01VVEVYX1FVT1RBKTsKLQkJCQl0b3B1dGlub2RlW2NudF0tPmlfZmxhZ3MgJj0gfihTX0lNTVVUQUJMRSB8Ci0JCQkJICBTX05PQVRJTUUgfCBTX05PUVVPVEEpOwotCQkJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZ0b3B1dGlub2RlW2NudF0tPmlfZGF0YSwgMCk7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZ0b3B1dGlub2RlW2NudF0tPmlfbXV0ZXgpOwotCQkJCW1hcmtfaW5vZGVfZGlydHkodG9wdXRpbm9kZVtjbnRdKTsKLQkJCX0KLQkJCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwotCQl9Ci0JaWYgKHNiLT5zX2JkZXYpCi0JCWludmFsaWRhdGVfYmRldihzYi0+c19iZGV2KTsKLXB1dF9pbm9kZXM6Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQlpZiAodG9wdXRpbm9kZVtjbnRdKSB7Ci0JCQkvKiBPbiByZW1vdW50IFJPLCB3ZSBrZWVwIHRoZSBpbm9kZSBwb2ludGVyIHNvIHRoYXQgd2UKLQkJCSAqIGNhbiByZWVuYWJsZSBxdW90YSBvbiB0aGUgc3Vic2VxdWVudCByZW1vdW50IFJXLiBXZQotCQkJICogaGF2ZSB0byBjaGVjayAnZmxhZ3MnIHZhcmlhYmxlIGFuZCBub3QgdXNlIHNiX2hhc18KLQkJCSAqIGZ1bmN0aW9uIGJlY2F1c2UgYW5vdGhlciBxdW90YW9uIC8gcXVvdGFvZmYgY291bGQKLQkJCSAqIGNoYW5nZSBnbG9iYWwgc3RhdGUgYmVmb3JlIHdlIGdvdCBoZXJlLiBXZSByZWZ1c2UKLQkJCSAqIHRvIHN1c3BlbmQgcXVvdGFzIHdoZW4gdGhlcmUgaXMgcGVuZGluZyBkZWxldGUgb24KLQkJCSAqIHRoZSBxdW90YSBmaWxlLi4uICovCi0JCQlpZiAoIShmbGFncyAmIERRVU9UX1NVU1BFTkRFRCkpCi0JCQkJaXB1dCh0b3B1dGlub2RlW2NudF0pOwotCQkJZWxzZSBpZiAoIXRvcHV0aW5vZGVbY250XS0+aV9ubGluaykKLQkJCQlyZXQgPSAtRUJVU1k7Ci0JCX0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgdmZzX3F1b3RhX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IHJlbW91bnQpCi17Ci0JcmV0dXJuIHZmc19xdW90YV9kaXNhYmxlKHNiLCB0eXBlLCByZW1vdW50ID8gRFFVT1RfU1VTUEVOREVEIDoKLQkJCQkgKERRVU9UX1VTQUdFX0VOQUJMRUQgfCBEUVVPVF9MSU1JVFNfRU5BQkxFRCkpOwotfQotCi0vKgotICoJVHVybiBxdW90YXMgb24gb24gYSBkZXZpY2UKLSAqLwotCi0vKgotICogSGVscGVyIGZ1bmN0aW9uIHRvIHR1cm4gcXVvdGFzIG9uIHdoZW4gd2UgYWxyZWFkeSBoYXZlIHRoZSBpbm9kZSBvZgotICogcXVvdGEgZmlsZSBhbmQgbm8gcXVvdGEgaW5mb3JtYXRpb24gaXMgbG9hZGVkLgotICovCi1zdGF0aWMgaW50IHZmc19sb2FkX3F1b3RhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLAotCXVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmZtdCA9IGZpbmRfcXVvdGFfZm9ybWF0KGZvcm1hdF9pZCk7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwotCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKLQlpbnQgZXJyb3I7Ci0JaW50IG9sZGZsYWdzID0gLTE7Ci0KLQlpZiAoIWZtdCkKLQkJcmV0dXJuIC1FU1JDSDsKLQlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKLQkJZXJyb3IgPSAtRUFDQ0VTOwotCQlnb3RvIG91dF9mbXQ7Ci0JfQotCWlmIChJU19SRE9OTFkoaW5vZGUpKSB7Ci0JCWVycm9yID0gLUVST0ZTOwotCQlnb3RvIG91dF9mbXQ7Ci0JfQotCWlmICghc2ItPnNfb3AtPnF1b3RhX3dyaXRlIHx8ICFzYi0+c19vcC0+cXVvdGFfcmVhZCkgewotCQllcnJvciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X2ZtdDsKLQl9Ci0JLyogVXNhZ2UgYWx3YXlzIGhhcyB0byBiZSBzZXQuLi4gKi8KLQlpZiAoIShmbGFncyAmIERRVU9UX1VTQUdFX0VOQUJMRUQpKSB7Ci0JCWVycm9yID0gLUVJTlZBTDsKLQkJZ290byBvdXRfZm10OwotCX0KLQotCWlmICghKGRxb3B0LT5mbGFncyAmIERRVU9UX1FVT1RBX1NZU19GSUxFKSkgewotCQkvKiBBcyB3ZSBieXBhc3MgdGhlIHBhZ2VjYWNoZSB3ZSBtdXN0IG5vdyBmbHVzaCB0aGUgaW5vZGUgc28KLQkJICogdGhhdCB3ZSBzZWUgYWxsIHRoZSBjaGFuZ2VzIGZyb20gdXNlcnNwYWNlLi4uICovCi0JCXdyaXRlX2lub2RlX25vdyhpbm9kZSwgMSk7Ci0JCS8qIEFuZCBub3cgZmx1c2ggdGhlIGJsb2NrIGNhY2hlIHNvIHRoYXQga2VybmVsIHNlZXMgdGhlCi0JCSAqIGNoYW5nZXMgKi8KLQkJaW52YWxpZGF0ZV9iZGV2KHNiLT5zX2JkZXYpOwotCX0KLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwotCWlmIChzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCB0eXBlKSkgewotCQllcnJvciA9IC1FQlVTWTsKLQkJZ290byBvdXRfbG9jazsKLQl9Ci0KLQlpZiAoIShkcW9wdC0+ZmxhZ3MgJiBEUVVPVF9RVU9UQV9TWVNfRklMRSkpIHsKLQkJLyogV2UgZG9uJ3Qgd2FudCBxdW90YSBhbmQgYXRpbWUgb24gcXVvdGEgZmlsZXMgKGRlYWRsb2NrcwotCQkgKiBwb3NzaWJsZSkgQWxzbyBub2JvZHkgc2hvdWxkIHdyaXRlIHRvIHRoZSBmaWxlIC0gd2UgdXNlCi0JCSAqIHNwZWNpYWwgSU8gb3BlcmF0aW9ucyB3aGljaCBpZ25vcmUgdGhlIGltbXV0YWJsZSBiaXQuICovCi0JCWRvd25fd3JpdGUoJmRxb3B0LT5kcXB0cl9zZW0pOwotCQlvbGRmbGFncyA9IGlub2RlLT5pX2ZsYWdzICYgKFNfTk9BVElNRSB8IFNfSU1NVVRBQkxFIHwgU19OT1FVT1RBKTsKLQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBIHwgU19OT0FUSU1FIHwgU19JTU1VVEFCTEU7Ci0JCXVwX3dyaXRlKCZkcW9wdC0+ZHFwdHJfc2VtKTsKLQkJc2ItPmRxX29wLT5kcm9wKGlub2RlKTsKLQl9Ci0KLQllcnJvciA9IC1FSU87Ci0JZHFvcHQtPmZpbGVzW3R5cGVdID0gaWdyYWIoaW5vZGUpOwotCWlmICghZHFvcHQtPmZpbGVzW3R5cGVdKQotCQlnb3RvIG91dF9sb2NrOwotCWVycm9yID0gLUVJTlZBTDsKLQlpZiAoIWZtdC0+cWZfb3BzLT5jaGVja19xdW90YV9maWxlKHNiLCB0eXBlKSkKLQkJZ290byBvdXRfZmlsZV9pbml0OwotCi0JZHFvcHQtPm9wc1t0eXBlXSA9IGZtdC0+cWZfb3BzOwotCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9mb3JtYXQgPSBmbXQ7Ci0JZHFvcHQtPmluZm9bdHlwZV0uZHFpX2ZtdF9pZCA9IGZvcm1hdF9pZDsKLQlJTklUX0xJU1RfSEVBRCgmZHFvcHQtPmluZm9bdHlwZV0uZHFpX2RpcnR5X2xpc3QpOwotCW11dGV4X2xvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKLQlpZiAoKGVycm9yID0gZHFvcHQtPm9wc1t0eXBlXS0+cmVhZF9maWxlX2luZm8oc2IsIHR5cGUpKSA8IDApIHsKLQkJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7Ci0JCWdvdG8gb3V0X2ZpbGVfaW5pdDsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0Jc3Bpbl9sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKLQlkcW9wdC0+ZmxhZ3MgfD0gZHF1b3Rfc3RhdGVfZmxhZyhmbGFncywgdHlwZSk7Ci0Jc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOwotCi0JYWRkX2RxdW90X3JlZihzYiwgdHlwZSk7Ci0JbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0KLQlyZXR1cm4gMDsKLQotb3V0X2ZpbGVfaW5pdDoKLQlkcW9wdC0+ZmlsZXNbdHlwZV0gPSBOVUxMOwotCWlwdXQoaW5vZGUpOwotb3V0X2xvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0JaWYgKG9sZGZsYWdzICE9IC0xKSB7Ci0JCWRvd25fd3JpdGUoJmRxb3B0LT5kcXB0cl9zZW0pOwotCQkvKiBTZXQgdGhlIGZsYWdzIGJhY2sgKGluIHRoZSBjYXNlIG9mIGFjY2lkZW50YWwgcXVvdGFvbigpCi0JCSAqIG9uIGEgd3JvbmcgZmlsZSB3ZSBkb24ndCB3YW50IHRvIG1lc3MgdXAgdGhlIGZsYWdzKSAqLwotCQlpbm9kZS0+aV9mbGFncyAmPSB+KFNfTk9BVElNRSB8IFNfTk9RVU9UQSB8IFNfSU1NVVRBQkxFKTsKLQkJaW5vZGUtPmlfZmxhZ3MgfD0gb2xkZmxhZ3M7Ci0JCXVwX3dyaXRlKCZkcW9wdC0+ZHFwdHJfc2VtKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci1vdXRfZm10OgotCXB1dF9xdW90YV9mb3JtYXQoZm10KTsKLQotCXJldHVybiBlcnJvcjsgCi19Ci0KLS8qIFJlZW5hYmxlIHF1b3RhcyBvbiByZW1vdW50IFJXICovCi1zdGF0aWMgaW50IHZmc19xdW90YV9vbl9yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWludCByZXQ7Ci0JdW5zaWduZWQgaW50IGZsYWdzOwotCi0JbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwotCWlmICghc2JfaGFzX3F1b3RhX3N1c3BlbmRlZChzYiwgdHlwZSkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0JCXJldHVybiAwOwotCX0KLQlpbm9kZSA9IGRxb3B0LT5maWxlc1t0eXBlXTsKLQlkcW9wdC0+ZmlsZXNbdHlwZV0gPSBOVUxMOwotCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7Ci0JZmxhZ3MgPSBkcW9wdC0+ZmxhZ3MgJiBkcXVvdF9zdGF0ZV9mbGFnKERRVU9UX1VTQUdFX0VOQUJMRUQgfAotCQkJCQkJRFFVT1RfTElNSVRTX0VOQUJMRUQsIHR5cGUpOwotCWRxb3B0LT5mbGFncyAmPSB+ZHF1b3Rfc3RhdGVfZmxhZyhEUVVPVF9TVEFURV9GTEFHUywgdHlwZSk7Ci0Jc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOwotCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwotCi0JZmxhZ3MgPSBkcXVvdF9nZW5lcmljX2ZsYWcoZmxhZ3MsIHR5cGUpOwotCXJldCA9IHZmc19sb2FkX3F1b3RhX2lub2RlKGlub2RlLCB0eXBlLCBkcW9wdC0+aW5mb1t0eXBlXS5kcWlfZm10X2lkLAotCQkJCSAgIGZsYWdzKTsKLQlpcHV0KGlub2RlKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCB2ZnNfcXVvdGFfb25fcGF0aChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKLQkJICAgICAgc3RydWN0IHBhdGggKnBhdGgpCi17Ci0JaW50IGVycm9yID0gc2VjdXJpdHlfcXVvdGFfb24ocGF0aC0+ZGVudHJ5KTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQkvKiBRdW90YSBmaWxlIG5vdCBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtPyAqLwotCWlmIChwYXRoLT5tbnQtPm1udF9zYiAhPSBzYikKLQkJZXJyb3IgPSAtRVhERVY7Ci0JZWxzZQotCQllcnJvciA9IHZmc19sb2FkX3F1b3RhX2lub2RlKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSwgdHlwZSwKLQkJCQkJICAgICBmb3JtYXRfaWQsIERRVU9UX1VTQUdFX0VOQUJMRUQgfAotCQkJCQkgICAgIERRVU9UX0xJTUlUU19FTkFCTEVEKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLWludCB2ZnNfcXVvdGFfb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBmb3JtYXRfaWQsIGNoYXIgKm5hbWUsCi0JCSBpbnQgcmVtb3VudCkKLXsKLQlzdHJ1Y3QgcGF0aCBwYXRoOwotCWludCBlcnJvcjsKLQotCWlmIChyZW1vdW50KQotCQlyZXR1cm4gdmZzX3F1b3RhX29uX3JlbW91bnQoc2IsIHR5cGUpOwotCi0JZXJyb3IgPSBrZXJuX3BhdGgobmFtZSwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOwotCWlmICghZXJyb3IpIHsKLQkJZXJyb3IgPSB2ZnNfcXVvdGFfb25fcGF0aChzYiwgdHlwZSwgZm9ybWF0X2lkLCAmcGF0aCk7Ci0JCXBhdGhfcHV0KCZwYXRoKTsKLQl9Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKgotICogTW9yZSBwb3dlcmZ1bCBmdW5jdGlvbiBmb3IgdHVybmluZyBvbiBxdW90YXMgYWxsb3dpbmcgc2V0dGluZwotICogb2YgaW5kaXZpZHVhbCBxdW90YSBmbGFncwotICovCi1pbnQgdmZzX3F1b3RhX2VuYWJsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKLQkJdW5zaWduZWQgaW50IGZsYWdzKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKLQlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7Ci0KLQkvKiBKdXN0IHVuc3VzcGVuZCBxdW90YXM/ICovCi0JaWYgKGZsYWdzICYgRFFVT1RfU1VTUEVOREVEKQotCQlyZXR1cm4gdmZzX3F1b3RhX29uX3JlbW91bnQoc2IsIHR5cGUpOwotCWlmICghZmxhZ3MpCi0JCXJldHVybiAwOwotCS8qIEp1c3QgdXBkYXRpbmcgZmxhZ3MgbmVlZGVkPyAqLwotCWlmIChzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCB0eXBlKSkgewotCQltdXRleF9sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0JCS8qIE5vdyBkbyBhIHJlbGlhYmxlIHRlc3QuLi4gKi8KLQkJaWYgKCFzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCB0eXBlKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7Ci0JCQlnb3RvIGxvYWRfcXVvdGE7Ci0JCX0KLQkJaWYgKGZsYWdzICYgRFFVT1RfVVNBR0VfRU5BQkxFRCAmJgotCQkgICAgc2JfaGFzX3F1b3RhX3VzYWdlX2VuYWJsZWQoc2IsIHR5cGUpKSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dF9sb2NrOwotCQl9Ci0JCWlmIChmbGFncyAmIERRVU9UX0xJTUlUU19FTkFCTEVEICYmCi0JCSAgICBzYl9oYXNfcXVvdGFfbGltaXRzX2VuYWJsZWQoc2IsIHR5cGUpKSB7Ci0JCQlyZXQgPSAtRUJVU1k7Ci0JCQlnb3RvIG91dF9sb2NrOwotCQl9Ci0JCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7Ci0JCXNiX2Rxb3B0KHNiKS0+ZmxhZ3MgfD0gZHF1b3Rfc3RhdGVfZmxhZyhmbGFncywgdHlwZSk7Ci0JCXNwaW5fdW5sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKLW91dF9sb2NrOgotCQltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLWxvYWRfcXVvdGE6Ci0JcmV0dXJuIHZmc19sb2FkX3F1b3RhX2lub2RlKGlub2RlLCB0eXBlLCBmb3JtYXRfaWQsIGZsYWdzKTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIGZpbGVzeXN0ZW0gbmVlZHMgdG8gaW5pdGlhbGl6ZSBxdW90YXMKLSAqIGR1cmluZyBtb3VudCB0aW1lLgotICovCi1pbnQgdmZzX3F1b3RhX29uX21vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgKnFmX25hbWUsCi0JCWludCBmb3JtYXRfaWQsIGludCB0eXBlKQotewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKLQlpbnQgZXJyb3I7Ci0KLQlkZW50cnkgPSBsb29rdXBfb25lX2xlbihxZl9uYW1lLCBzYi0+c19yb290LCBzdHJsZW4ocWZfbmFtZSkpOwotCWlmIChJU19FUlIoZGVudHJ5KSkKLQkJcmV0dXJuIFBUUl9FUlIoZGVudHJ5KTsKLQotCWlmICghZGVudHJ5LT5kX2lub2RlKSB7Ci0JCWVycm9yID0gLUVOT0VOVDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyb3IgPSBzZWN1cml0eV9xdW90YV9vbihkZW50cnkpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gdmZzX2xvYWRfcXVvdGFfaW5vZGUoZGVudHJ5LT5kX2lub2RlLCB0eXBlLCBmb3JtYXRfaWQsCi0JCQkJRFFVT1RfVVNBR0VfRU5BQkxFRCB8IERRVU9UX0xJTUlUU19FTkFCTEVEKTsKLQotb3V0OgotCWRwdXQoZGVudHJ5KTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qIFdyYXBwZXIgdG8gdHVybiBvbiBxdW90YXMgd2hlbiByZW1vdW50aW5nIHJ3ICovCi1pbnQgdmZzX2RxX3F1b3RhX29uX3JlbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlpbnQgY250OwotCWludCByZXQgPSAwLCBlcnI7Ci0KLQlpZiAoIXNiLT5zX3Fjb3AgfHwgIXNiLT5zX3Fjb3AtPnF1b3RhX29uKQotCQlyZXR1cm4gLUVOT1NZUzsKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJZXJyID0gc2ItPnNfcWNvcC0+cXVvdGFfb24oc2IsIGNudCwgMCwgTlVMTCwgMSk7Ci0JCWlmIChlcnIgPCAwICYmICFyZXQpCi0JCQlyZXQgPSBlcnI7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcXNpemVfdCBxYnRvcyhxc2l6ZV90IGJsb2NrcykKLXsKLQlyZXR1cm4gYmxvY2tzIDw8IFFJRl9EUUJMS1NJWkVfQklUUzsKLX0KLQotc3RhdGljIGlubGluZSBxc2l6ZV90IHN0b3FiKHFzaXplX3Qgc3BhY2UpCi17Ci0JcmV0dXJuIChzcGFjZSArIFFJRl9EUUJMS1NJWkUgLSAxKSA+PiBRSUZfRFFCTEtTSVpFX0JJVFM7Ci19Ci0KLS8qIEdlbmVyaWMgcm91dGluZSBmb3IgZ2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBzdHJ1Y3R1cmUgKi8KLXN0YXRpYyB2b2lkIGRvX2dldF9kcWJsayhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBzdHJ1Y3QgaWZfZHFibGsgKmRpKQotewotCXN0cnVjdCBtZW1fZHFibGsgKmRtID0gJmRxdW90LT5kcV9kcWI7Ci0KLQlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JZGktPmRxYl9iaGFyZGxpbWl0ID0gc3RvcWIoZG0tPmRxYl9iaGFyZGxpbWl0KTsKLQlkaS0+ZHFiX2Jzb2Z0bGltaXQgPSBzdG9xYihkbS0+ZHFiX2Jzb2Z0bGltaXQpOwotCWRpLT5kcWJfY3Vyc3BhY2UgPSBkbS0+ZHFiX2N1cnNwYWNlOwotCWRpLT5kcWJfaWhhcmRsaW1pdCA9IGRtLT5kcWJfaWhhcmRsaW1pdDsKLQlkaS0+ZHFiX2lzb2Z0bGltaXQgPSBkbS0+ZHFiX2lzb2Z0bGltaXQ7Ci0JZGktPmRxYl9jdXJpbm9kZXMgPSBkbS0+ZHFiX2N1cmlub2RlczsKLQlkaS0+ZHFiX2J0aW1lID0gZG0tPmRxYl9idGltZTsKLQlkaS0+ZHFiX2l0aW1lID0gZG0tPmRxYl9pdGltZTsKLQlkaS0+ZHFiX3ZhbGlkID0gUUlGX0FMTDsKLQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLX0KLQotaW50IHZmc19nZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHFpZF90IGlkLCBzdHJ1Y3QgaWZfZHFibGsgKmRpKQotewotCXN0cnVjdCBkcXVvdCAqZHF1b3Q7Ci0KLQlkcXVvdCA9IGRxZ2V0KHNiLCBpZCwgdHlwZSk7Ci0JaWYgKGRxdW90ID09IE5PRFFVT1QpCi0JCXJldHVybiAtRVNSQ0g7Ci0JZG9fZ2V0X2RxYmxrKGRxdW90LCBkaSk7Ci0JZHFwdXQoZHF1b3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEdlbmVyaWMgcm91dGluZSBmb3Igc2V0dGluZyBjb21tb24gcGFydCBvZiBxdW90YSBzdHJ1Y3R1cmUgKi8KLXN0YXRpYyBpbnQgZG9fc2V0X2RxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHN0cnVjdCBpZl9kcWJsayAqZGkpCi17Ci0Jc3RydWN0IG1lbV9kcWJsayAqZG0gPSAmZHF1b3QtPmRxX2RxYjsKLQlpbnQgY2hlY2tfYmxpbSA9IDAsIGNoZWNrX2lsaW0gPSAwOwotCXN0cnVjdCBtZW1fZHFpbmZvICpkcWkgPSAmc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+aW5mb1tkcXVvdC0+ZHFfdHlwZV07Ci0KLQlpZiAoKGRpLT5kcWJfdmFsaWQgJiBRSUZfQkxJTUlUUyAmJgotCSAgICAgKGRpLT5kcWJfYmhhcmRsaW1pdCA+IGRxaS0+ZHFpX21heGJsaW1pdCB8fAotCSAgICAgIGRpLT5kcWJfYnNvZnRsaW1pdCA+IGRxaS0+ZHFpX21heGJsaW1pdCkpIHx8Ci0JICAgIChkaS0+ZHFiX3ZhbGlkICYgUUlGX0lMSU1JVFMgJiYKLQkgICAgIChkaS0+ZHFiX2loYXJkbGltaXQgPiBkcWktPmRxaV9tYXhpbGltaXQgfHwKLQkgICAgICBkaS0+ZHFiX2lzb2Z0bGltaXQgPiBkcWktPmRxaV9tYXhpbGltaXQpKSkKLQkJcmV0dXJuIC1FUkFOR0U7Ci0KLQlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JaWYgKGRpLT5kcWJfdmFsaWQgJiBRSUZfU1BBQ0UpIHsKLQkJZG0tPmRxYl9jdXJzcGFjZSA9IGRpLT5kcWJfY3Vyc3BhY2U7Ci0JCWNoZWNrX2JsaW0gPSAxOwotCQlfX3NldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX1NQQUNFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotCX0KLQlpZiAoZGktPmRxYl92YWxpZCAmIFFJRl9CTElNSVRTKSB7Ci0JCWRtLT5kcWJfYnNvZnRsaW1pdCA9IHFidG9zKGRpLT5kcWJfYnNvZnRsaW1pdCk7Ci0JCWRtLT5kcWJfYmhhcmRsaW1pdCA9IHFidG9zKGRpLT5kcWJfYmhhcmRsaW1pdCk7Ci0JCWNoZWNrX2JsaW0gPSAxOwotCQlfX3NldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0JMSU1JVFNfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JfQotCWlmIChkaS0+ZHFiX3ZhbGlkICYgUUlGX0lOT0RFUykgewotCQlkbS0+ZHFiX2N1cmlub2RlcyA9IGRpLT5kcWJfY3VyaW5vZGVzOwotCQljaGVja19pbGltID0gMTsKLQkJX19zZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9JTk9ERVNfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JfQotCWlmIChkaS0+ZHFiX3ZhbGlkICYgUUlGX0lMSU1JVFMpIHsKLQkJZG0tPmRxYl9pc29mdGxpbWl0ID0gZGktPmRxYl9pc29mdGxpbWl0OwotCQlkbS0+ZHFiX2loYXJkbGltaXQgPSBkaS0+ZHFiX2loYXJkbGltaXQ7Ci0JCWNoZWNrX2lsaW0gPSAxOwotCQlfX3NldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0lMSU1JVFNfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JfQotCWlmIChkaS0+ZHFiX3ZhbGlkICYgUUlGX0JUSU1FKSB7Ci0JCWRtLT5kcWJfYnRpbWUgPSBkaS0+ZHFiX2J0aW1lOwotCQljaGVja19ibGltID0gMTsKLQkJX19zZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9CVElNRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQl9Ci0JaWYgKGRpLT5kcWJfdmFsaWQgJiBRSUZfSVRJTUUpIHsKLQkJZG0tPmRxYl9pdGltZSA9IGRpLT5kcWJfaXRpbWU7Ci0JCWNoZWNrX2lsaW0gPSAxOwotCQlfX3NldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0lUSU1FX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotCX0KLQotCWlmIChjaGVja19ibGltKSB7Ci0JCWlmICghZG0tPmRxYl9ic29mdGxpbWl0IHx8IGRtLT5kcWJfY3Vyc3BhY2UgPCBkbS0+ZHFiX2Jzb2Z0bGltaXQpIHsKLQkJCWRtLT5kcWJfYnRpbWUgPSAwOwotCQkJY2xlYXJfYml0KERRX0JMS1NfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JCX0KLQkJZWxzZSBpZiAoIShkaS0+ZHFiX3ZhbGlkICYgUUlGX0JUSU1FKSkJLyogU2V0IGdyYWNlIG9ubHkgaWYgdXNlciBoYXNuJ3QgcHJvdmlkZWQgaGlzIG93bi4uLiAqLwotCQkJZG0tPmRxYl9idGltZSA9IGdldF9zZWNvbmRzKCkgKyBkcWktPmRxaV9iZ3JhY2U7Ci0JfQotCWlmIChjaGVja19pbGltKSB7Ci0JCWlmICghZG0tPmRxYl9pc29mdGxpbWl0IHx8IGRtLT5kcWJfY3VyaW5vZGVzIDwgZG0tPmRxYl9pc29mdGxpbWl0KSB7Ci0JCQlkbS0+ZHFiX2l0aW1lID0gMDsKLQkJCWNsZWFyX2JpdChEUV9JTk9ERVNfQiwgJmRxdW90LT5kcV9mbGFncyk7Ci0JCX0KLQkJZWxzZSBpZiAoIShkaS0+ZHFiX3ZhbGlkICYgUUlGX0lUSU1FKSkJLyogU2V0IGdyYWNlIG9ubHkgaWYgdXNlciBoYXNuJ3QgcHJvdmlkZWQgaGlzIG93bi4uLiAqLwotCQkJZG0tPmRxYl9pdGltZSA9IGdldF9zZWNvbmRzKCkgKyBkcWktPmRxaV9pZ3JhY2U7Ci0JfQotCWlmIChkbS0+ZHFiX2JoYXJkbGltaXQgfHwgZG0tPmRxYl9ic29mdGxpbWl0IHx8IGRtLT5kcWJfaWhhcmRsaW1pdCB8fCBkbS0+ZHFiX2lzb2Z0bGltaXQpCi0JCWNsZWFyX2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotCWVsc2UKLQkJc2V0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwotCW1hcmtfZHF1b3RfZGlydHkoZHF1b3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB2ZnNfc2V0X2RxYmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBxaWRfdCBpZCwgc3RydWN0IGlmX2RxYmxrICpkaSkKLXsKLQlzdHJ1Y3QgZHF1b3QgKmRxdW90OwotCWludCByYzsKLQotCWRxdW90ID0gZHFnZXQoc2IsIGlkLCB0eXBlKTsKLQlpZiAoIWRxdW90KSB7Ci0JCXJjID0gLUVTUkNIOwotCQlnb3RvIG91dDsKLQl9Ci0JcmMgPSBkb19zZXRfZHFibGsoZHF1b3QsIGRpKTsKLQlkcXB1dChkcXVvdCk7Ci1vdXQ6Ci0JcmV0dXJuIHJjOwotfQotCi0vKiBHZW5lcmljIHJvdXRpbmUgZm9yIGdldHRpbmcgY29tbW9uIHBhcnQgb2YgcXVvdGEgZmlsZSBpbmZvcm1hdGlvbiAqLwotaW50IHZmc19nZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgaWZfZHFpbmZvICppaSkKLXsKLQlzdHJ1Y3QgbWVtX2RxaW5mbyAqbWk7Ci0gIAotCW11dGV4X2xvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7Ci0JaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkgewotCQltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7Ci0JCXJldHVybiAtRVNSQ0g7Ci0JfQotCW1pID0gc2JfZHFvcHQoc2IpLT5pbmZvICsgdHlwZTsKLQlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JaWktPmRxaV9iZ3JhY2UgPSBtaS0+ZHFpX2JncmFjZTsKLQlpaS0+ZHFpX2lncmFjZSA9IG1pLT5kcWlfaWdyYWNlOwotCWlpLT5kcWlfZmxhZ3MgPSBtaS0+ZHFpX2ZsYWdzICYgRFFGX01BU0s7Ci0JaWktPmRxaV92YWxpZCA9IElJRl9BTEw7Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOwotCXJldHVybiAwOwotfQotCi0vKiBHZW5lcmljIHJvdXRpbmUgZm9yIHNldHRpbmcgY29tbW9uIHBhcnQgb2YgcXVvdGEgZmlsZSBpbmZvcm1hdGlvbiAqLwotaW50IHZmc19zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgaWZfZHFpbmZvICppaSkKLXsKLQlzdHJ1Y3QgbWVtX2RxaW5mbyAqbWk7Ci0JaW50IGVyciA9IDA7Ci0KLQltdXRleF9sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOwotCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpIHsKLQkJZXJyID0gLUVTUkNIOwotCQlnb3RvIG91dDsKLQl9Ci0JbWkgPSBzYl9kcW9wdChzYiktPmluZm8gKyB0eXBlOwotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQlpZiAoaWktPmRxaV92YWxpZCAmIElJRl9CR1JBQ0UpCi0JCW1pLT5kcWlfYmdyYWNlID0gaWktPmRxaV9iZ3JhY2U7Ci0JaWYgKGlpLT5kcWlfdmFsaWQgJiBJSUZfSUdSQUNFKQotCQltaS0+ZHFpX2lncmFjZSA9IGlpLT5kcWlfaWdyYWNlOwotCWlmIChpaS0+ZHFpX3ZhbGlkICYgSUlGX0ZMQUdTKQotCQltaS0+ZHFpX2ZsYWdzID0gKG1pLT5kcWlfZmxhZ3MgJiB+RFFGX01BU0spIHwgKGlpLT5kcWlfZmxhZ3MgJiBEUUZfTUFTSyk7Ci0Jc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JbWFya19pbmZvX2RpcnR5KHNiLCB0eXBlKTsKLQkvKiBGb3JjZSB3cml0ZSB0byBkaXNrICovCi0Jc2ItPmRxX29wLT53cml0ZV9pbmZvKHNiLCB0eXBlKTsKLW91dDoKLQltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RydWN0IHF1b3RhY3RsX29wcyB2ZnNfcXVvdGFjdGxfb3BzID0gewotCS5xdW90YV9vbgk9IHZmc19xdW90YV9vbiwKLQkucXVvdGFfb2ZmCT0gdmZzX3F1b3RhX29mZiwKLQkucXVvdGFfc3luYwk9IHZmc19xdW90YV9zeW5jLAotCS5nZXRfaW5mbwk9IHZmc19nZXRfZHFpbmZvLAotCS5zZXRfaW5mbwk9IHZmc19zZXRfZHFpbmZvLAotCS5nZXRfZHFibGsJPSB2ZnNfZ2V0X2RxYmxrLAotCS5zZXRfZHFibGsJPSB2ZnNfc2V0X2RxYmxrCi19OwotCi1zdGF0aWMgY3RsX3RhYmxlIGZzX2Rxc3RhdHNfdGFibGVbXSA9IHsKLQl7Ci0JCS5jdGxfbmFtZQk9IEZTX0RRX0xPT0tVUFMsCi0JCS5wcm9jbmFtZQk9ICJsb29rdXBzIiwKLQkJLmRhdGEJCT0gJmRxc3RhdHMubG9va3VwcywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDQ0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBGU19EUV9EUk9QUywKLQkJLnByb2NuYW1lCT0gImRyb3BzIiwKLQkJLmRhdGEJCT0gJmRxc3RhdHMuZHJvcHMsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA0NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKLQl9LAotCXsKLQkJLmN0bF9uYW1lCT0gRlNfRFFfUkVBRFMsCi0JCS5wcm9jbmFtZQk9ICJyZWFkcyIsCi0JCS5kYXRhCQk9ICZkcXN0YXRzLnJlYWRzLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAotCQkubW9kZQkJPSAwNDQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCi0JfSwKLQl7Ci0JCS5jdGxfbmFtZQk9IEZTX0RRX1dSSVRFUywKLQkJLnByb2NuYW1lCT0gIndyaXRlcyIsCi0JCS5kYXRhCQk9ICZkcXN0YXRzLndyaXRlcywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDQ0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBGU19EUV9DQUNIRV9ISVRTLAotCQkucHJvY25hbWUJPSAiY2FjaGVfaGl0cyIsCi0JCS5kYXRhCQk9ICZkcXN0YXRzLmNhY2hlX2hpdHMsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA0NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKLQl9LAotCXsKLQkJLmN0bF9uYW1lCT0gRlNfRFFfQUxMT0NBVEVELAotCQkucHJvY25hbWUJPSAiYWxsb2NhdGVkX2RxdW90cyIsCi0JCS5kYXRhCQk9ICZkcXN0YXRzLmFsbG9jYXRlZF9kcXVvdHMsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA0NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKLQl9LAotCXsKLQkJLmN0bF9uYW1lCT0gRlNfRFFfRlJFRSwKLQkJLnByb2NuYW1lCT0gImZyZWVfZHF1b3RzIiwKLQkJLmRhdGEJCT0gJmRxc3RhdHMuZnJlZV9kcXVvdHMsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA0NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKLQl9LAotCXsKLQkJLmN0bF9uYW1lCT0gRlNfRFFfU1lOQ1MsCi0JCS5wcm9jbmFtZQk9ICJzeW5jcyIsCi0JCS5kYXRhCQk9ICZkcXN0YXRzLnN5bmNzLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAotCQkubW9kZQkJPSAwNDQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCi0JfSwKLSNpZmRlZiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORwotCXsKLQkJLmN0bF9uYW1lCT0gRlNfRFFfV0FSTklOR1MsCi0JCS5wcm9jbmFtZQk9ICJ3YXJuaW5ncyIsCi0JCS5kYXRhCQk9ICZmbGFnX3ByaW50X3dhcm5pbmdzLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCi0JfSwKLSNlbmRpZgotCXsgLmN0bF9uYW1lID0gMCB9LAotfTsKLQotc3RhdGljIGN0bF90YWJsZSBmc190YWJsZVtdID0gewotCXsKLQkJLmN0bF9uYW1lCT0gRlNfRFFTVEFUUywKLQkJLnByb2NuYW1lCT0gInF1b3RhIiwKLQkJLm1vZGUJCT0gMDU1NSwKLQkJLmNoaWxkCQk9IGZzX2Rxc3RhdHNfdGFibGUsCi0JfSwKLQl7IC5jdGxfbmFtZSA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjdGxfdGFibGUgc3lzX3RhYmxlW10gPSB7Ci0JewotCQkuY3RsX25hbWUJPSBDVExfRlMsCi0JCS5wcm9jbmFtZQk9ICJmcyIsCi0JCS5tb2RlCQk9IDA1NTUsCi0JCS5jaGlsZAkJPSBmc190YWJsZSwKLQl9LAotCXsgLmN0bF9uYW1lID0gMCB9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgZHF1b3RfaW5pdCh2b2lkKQotewotCWludCBpOwotCXVuc2lnbmVkIGxvbmcgbnJfaGFzaCwgb3JkZXI7Ci0KLQlwcmludGsoS0VSTl9OT1RJQ0UgIlZGUzogRGlzayBxdW90YXMgJXNcbiIsIF9fRFFVT1RfVkVSU0lPTl9fKTsKLQotCXJlZ2lzdGVyX3N5c2N0bF90YWJsZShzeXNfdGFibGUpOwotCi0JZHF1b3RfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImRxdW90IiwKLQkJCXNpemVvZihzdHJ1Y3QgZHF1b3QpLCBzaXplb2YodW5zaWduZWQgbG9uZykgKiA0LAotCQkJKFNMQUJfSFdDQUNIRV9BTElHTnxTTEFCX1JFQ0xBSU1fQUNDT1VOVHwKLQkJCQlTTEFCX01FTV9TUFJFQUR8U0xBQl9QQU5JQyksCi0JCQlOVUxMKTsKLQotCW9yZGVyID0gMDsKLQlkcXVvdF9oYXNoID0gKHN0cnVjdCBobGlzdF9oZWFkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfQVRPTUlDLCBvcmRlcik7Ci0JaWYgKCFkcXVvdF9oYXNoKQotCQlwYW5pYygiQ2Fubm90IGNyZWF0ZSBkcXVvdCBoYXNoIHRhYmxlIik7Ci0KLQkvKiBGaW5kIHBvd2VyLW9mLXR3byBobGlzdF9oZWFkcyB3aGljaCBjYW4gZml0IGludG8gYWxsb2NhdGlvbiAqLwotCW5yX2hhc2ggPSAoMVVMIDw8IG9yZGVyKSAqIFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCk7Ci0JZHFfaGFzaF9iaXRzID0gMDsKLQlkbyB7Ci0JCWRxX2hhc2hfYml0cysrOwotCX0gd2hpbGUgKG5yX2hhc2ggPj4gZHFfaGFzaF9iaXRzKTsKLQlkcV9oYXNoX2JpdHMtLTsKLQotCW5yX2hhc2ggPSAxVUwgPDwgZHFfaGFzaF9iaXRzOwotCWRxX2hhc2hfbWFzayA9IG5yX2hhc2ggLSAxOwotCWZvciAoaSA9IDA7IGkgPCBucl9oYXNoOyBpKyspCi0JCUlOSVRfSExJU1RfSEVBRChkcXVvdF9oYXNoICsgaSk7Ci0KLQlwcmludGsoIkRxdW90LWNhY2hlIGhhc2ggdGFibGUgZW50cmllczogJWxkIChvcmRlciAlbGQsICVsZCBieXRlcylcbiIsCi0JCQlucl9oYXNoLCBvcmRlciwgKFBBR0VfU0laRSA8PCBvcmRlcikpOwotCi0JcmVnaXN0ZXJfc2hyaW5rZXIoJmRxY2FjaGVfc2hyaW5rZXIpOwotCi0jaWZkZWYgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFCi0JaWYgKGdlbmxfcmVnaXN0ZXJfZmFtaWx5KCZxdW90YV9nZW5sX2ZhbWlseSkgIT0gMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IEZhaWxlZCB0byBjcmVhdGUgcXVvdGEgbmV0bGluayBpbnRlcmZhY2UuXG4iKTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChkcXVvdF9pbml0KTsKLQotRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9xdW90YV9mb3JtYXQpOwotRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCk7Ci1FWFBPUlRfU1lNQk9MKGRxc3RhdHMpOwotRVhQT1JUX1NZTUJPTChkcV9kYXRhX2xvY2spOwotRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfZW5hYmxlKTsKLUVYUE9SVF9TWU1CT0wodmZzX3F1b3RhX29uKTsKLUVYUE9SVF9TWU1CT0wodmZzX3F1b3RhX29uX3BhdGgpOwotRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfb25fbW91bnQpOwotRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfZGlzYWJsZSk7Ci1FWFBPUlRfU1lNQk9MKHZmc19xdW90YV9vZmYpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9zY2FuX2FjdGl2ZSk7Ci1FWFBPUlRfU1lNQk9MKHZmc19xdW90YV9zeW5jKTsKLUVYUE9SVF9TWU1CT0wodmZzX2dldF9kcWluZm8pOwotRVhQT1JUX1NZTUJPTCh2ZnNfc2V0X2RxaW5mbyk7Ci1FWFBPUlRfU1lNQk9MKHZmc19nZXRfZHFibGspOwotRVhQT1JUX1NZTUJPTCh2ZnNfc2V0X2RxYmxrKTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfY29tbWl0KTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfY29tbWl0X2luZm8pOwotRVhQT1JUX1NZTUJPTChkcXVvdF9hY3F1aXJlKTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfcmVsZWFzZSk7Ci1FWFBPUlRfU1lNQk9MKGRxdW90X21hcmtfZHF1b3RfZGlydHkpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9pbml0aWFsaXplKTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfZHJvcCk7Ci1FWFBPUlRfU1lNQk9MKHZmc19kcV9kcm9wKTsKLUVYUE9SVF9TWU1CT0woZHFnZXQpOwotRVhQT1JUX1NZTUJPTChkcXB1dCk7Ci1FWFBPUlRfU1lNQk9MKGRxdW90X2FsbG9jX3NwYWNlKTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2NfaW5vZGUpOwotRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX3NwYWNlKTsKLUVYUE9SVF9TWU1CT0woZHF1b3RfZnJlZV9pbm9kZSk7Ci1FWFBPUlRfU1lNQk9MKGRxdW90X3RyYW5zZmVyKTsKLUVYUE9SVF9TWU1CT0wodmZzX2RxX3RyYW5zZmVyKTsKLUVYUE9SVF9TWU1CT0wodmZzX2RxX3F1b3RhX29uX3JlbW91bnQpOwpkaWZmIC0tZ2l0IGEvZnMvZHJvcF9jYWNoZXMuYyBiL2ZzL2Ryb3BfY2FjaGVzLmMKaW5kZXggM2U1NjM3Zi4uNDRkNzI1ZiAxMDA2NDQKLS0tIGEvZnMvZHJvcF9jYWNoZXMuYworKysgYi9mcy9kcm9wX2NhY2hlcy5jCkBAIC0xOCw3ICsxOCw3IEBACiAKIAlzcGluX2xvY2soJmlub2RlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsICZzYi0+c19pbm9kZXMsIGlfc2JfbGlzdCkgewotCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9GUkVFSU5HfElfV0lMTF9GUkVFKSkKKwkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCiAJCQljb250aW51ZTsKIAkJaWYgKGlub2RlLT5pX21hcHBpbmctPm5ycGFnZXMgPT0gMCkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvY3J5cHRvLmMgYi9mcy9lY3J5cHRmcy9jcnlwdG8uYwppbmRleCBiZGNhMWY0Li44YjY1ZjI4IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9jcnlwdG8uYworKysgYi9mcy9lY3J5cHRmcy9jcnlwdG8uYwpAQCAtMTMyNCwxNCArMTMyNCwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci1lY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b19jb250ZW50cyhzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwKLQkJCQkgICAgc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAotCQkJCSAgICBjaGFyICp2aXJ0KQorZWNyeXB0ZnNfd3JpdGVfbWV0YWRhdGFfdG9fY29udGVudHMoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAorCQkJCSAgICBjaGFyICp2aXJ0LCBzaXplX3QgdmlydF9sZW4pCiB7CiAJaW50IHJjOwogCiAJcmMgPSBlY3J5cHRmc193cml0ZV9sb3dlcihlY3J5cHRmc19kZW50cnktPmRfaW5vZGUsIHZpcnQsCi0JCQkJICAwLCBjcnlwdF9zdGF0LT5udW1faGVhZGVyX2J5dGVzX2F0X2Zyb250KTsKKwkJCQkgIDAsIHZpcnRfbGVuKTsKIAlpZiAocmMpCiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gd3JpdGUgaGVhZGVyICIKIAkJICAgICAgICJpbmZvcm1hdGlvbiB0byBsb3dlciBmaWxlOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLApAQCAtMTM0MSw3ICsxMzQwLDYgQEAKIAogc3RhdGljIGludAogZWNyeXB0ZnNfd3JpdGVfbWV0YWRhdGFfdG9feGF0dHIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAotCQkJCSBzdHJ1Y3QgZWNyeXB0ZnNfY3J5cHRfc3RhdCAqY3J5cHRfc3RhdCwKIAkJCQkgY2hhciAqcGFnZV92aXJ0LCBzaXplX3Qgc2l6ZSkKIHsKIAlpbnQgcmM7CkBAIC0xMzUxLDYgKzEzNDksMTcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGVjcnlwdGZzX2dldF96ZXJvZWRfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlwYWdlID0gYWxsb2NfcGFnZXMoZ2ZwX21hc2sgfCBfX0dGUF9aRVJPLCBvcmRlcik7CisJaWYgKHBhZ2UpCisJCXJldHVybiAodW5zaWduZWQgbG9uZykgcGFnZV9hZGRyZXNzKHBhZ2UpOworCXJldHVybiAwOworfQorCiAvKioKICAqIGVjcnlwdGZzX3dyaXRlX21ldGFkYXRhCiAgKiBAZWNyeXB0ZnNfZGVudHJ5OiBUaGUgZUNyeXB0ZnMgZGVudHJ5CkBAIC0xMzY3LDcgKzEzNzYsOSBAQAogewogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0ID0KIAkJJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKS0+Y3J5cHRfc3RhdDsKKwl1bnNpZ25lZCBpbnQgb3JkZXI7CiAJY2hhciAqdmlydDsKKwlzaXplX3QgdmlydF9sZW47CiAJc2l6ZV90IHNpemUgPSAwOwogCWludCByYyA9IDA7CiAKQEAgLTEzODMsMzMgKzEzOTQsMzUgQEAKIAkJcmMgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CisJdmlydF9sZW4gPSBjcnlwdF9zdGF0LT5udW1faGVhZGVyX2J5dGVzX2F0X2Zyb250OworCW9yZGVyID0gZ2V0X29yZGVyKHZpcnRfbGVuKTsKIAkvKiBSZWxlYXNlZCBpbiB0aGlzIGZ1bmN0aW9uICovCi0JdmlydCA9IChjaGFyICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCXZpcnQgPSAoY2hhciAqKWVjcnlwdGZzX2dldF96ZXJvZWRfcGFnZXMoR0ZQX0tFUk5FTCwgb3JkZXIpOwogCWlmICghdmlydCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gZWNyeXB0ZnNfd3JpdGVfaGVhZGVyc192aXJ0KHZpcnQsIFBBR0VfQ0FDSEVfU0laRSwgJnNpemUsCi0JCQkJCSBjcnlwdF9zdGF0LCBlY3J5cHRmc19kZW50cnkpOworCXJjID0gZWNyeXB0ZnNfd3JpdGVfaGVhZGVyc192aXJ0KHZpcnQsIHZpcnRfbGVuLCAmc2l6ZSwgY3J5cHRfc3RhdCwKKwkJCQkJIGVjcnlwdGZzX2RlbnRyeSk7CiAJaWYgKHVubGlrZWx5KHJjKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciB3aGlsc3Qgd3JpdGluZyBoZWFkZXJzOyByYyA9IFslZF1cbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgcmMpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIAlpZiAoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19NRVRBREFUQV9JTl9YQVRUUikKLQkJcmMgPSBlY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b194YXR0cihlY3J5cHRmc19kZW50cnksCi0JCQkJCQkgICAgICBjcnlwdF9zdGF0LCB2aXJ0LCBzaXplKTsKKwkJcmMgPSBlY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b194YXR0cihlY3J5cHRmc19kZW50cnksIHZpcnQsCisJCQkJCQkgICAgICBzaXplKTsKIAllbHNlCi0JCXJjID0gZWNyeXB0ZnNfd3JpdGVfbWV0YWRhdGFfdG9fY29udGVudHMoY3J5cHRfc3RhdCwKLQkJCQkJCQkgZWNyeXB0ZnNfZGVudHJ5LCB2aXJ0KTsKKwkJcmMgPSBlY3J5cHRmc193cml0ZV9tZXRhZGF0YV90b19jb250ZW50cyhlY3J5cHRmc19kZW50cnksIHZpcnQsCisJCQkJCQkJIHZpcnRfbGVuKTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3Igd3JpdGluZyBtZXRhZGF0YSBvdXQgdG8gbG93ZXIgZmlsZTsgIgogCQkgICAgICAgInJjID0gWyVkXVxuIiwgX19mdW5jX18sIHJjKTsKIAkJZ290byBvdXRfZnJlZTsKIAl9CiBvdXRfZnJlZToKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdmlydCk7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2aXJ0LCBvcmRlcik7CiBvdXQ6CiAJcmV0dXJuIHJjOwogfQpAQCAtMjIwOCwxNyArMjIyMSwxOSBAQAogCQkJCQkgc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGlyX2RlbnRyeSwKIAkJCQkJIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX3NpemUpCiB7CisJc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQgKm1vdW50X2NyeXB0X3N0YXQgPQorCQkmZWNyeXB0ZnNfc3VwZXJibG9ja190b19wcml2YXRlKAorCQkJZWNyeXB0ZnNfZGlyX2RlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7CiAJY2hhciAqZGVjb2RlZF9uYW1lOwogCXNpemVfdCBkZWNvZGVkX25hbWVfc2l6ZTsKIAlzaXplX3QgcGFja2V0X3NpemU7CiAJaW50IHJjID0gMDsKIAotCWlmICgobmFtZV9zaXplID4gRUNSWVBURlNfRk5FS19FTkNSWVBURURfRklMRU5BTUVfUFJFRklYX1NJWkUpCisJaWYgKChtb3VudF9jcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX0dMT0JBTF9FTkNSWVBUX0ZJTEVOQU1FUykKKwkgICAgJiYgIShtb3VudF9jcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX0VOQ1JZUFRFRF9WSUVXX0VOQUJMRUQpCisJICAgICYmIChuYW1lX3NpemUgPiBFQ1JZUFRGU19GTkVLX0VOQ1JZUFRFRF9GSUxFTkFNRV9QUkVGSVhfU0laRSkKIAkgICAgJiYgKHN0cm5jbXAobmFtZSwgRUNSWVBURlNfRk5FS19FTkNSWVBURURfRklMRU5BTUVfUFJFRklYLAogCQkJRUNSWVBURlNfRk5FS19FTkNSWVBURURfRklMRU5BTUVfUFJFRklYX1NJWkUpID09IDApKSB7Ci0JCXN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0ID0KLQkJCSZlY3J5cHRmc19zdXBlcmJsb2NrX3RvX3ByaXZhdGUoCi0JCQkJZWNyeXB0ZnNfZGlyX2RlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7CiAJCWNvbnN0IGNoYXIgKm9yaWdfbmFtZSA9IG5hbWU7CiAJCXNpemVfdCBvcmlnX25hbWVfc2l6ZSA9IG5hbWVfc2l6ZTsKIApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZGVudHJ5LmMgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwppbmRleCA1ZTU5NjU4Li4yZGRhNWFkIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9kZW50cnkuYworKysgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwpAQCAtODksNyArODksNyBAQAogCXJldHVybjsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGVjcnlwdGZzX2RvcHMgPSB7Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZWNyeXB0ZnNfZG9wcyA9IHsKIAkuZF9yZXZhbGlkYXRlID0gZWNyeXB0ZnNfZF9yZXZhbGlkYXRlLAogCS5kX3JlbGVhc2UgPSBlY3J5cHRmc19kX3JlbGVhc2UsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmggYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAppbmRleCBlYjIyNjdlLi4wNjRjNTgyIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAorKysgYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaApAQCAtNTgwLDcgKzU4MCw3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZWNyeXB0ZnNfZGlyX2lvcHM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZWNyeXB0ZnNfc3ltbGlua19pb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGVjcnlwdGZzX3NvcHM7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGVjcnlwdGZzX2RvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGVjcnlwdGZzX2RvcHM7CiBleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBlY3J5cHRmc19hb3BzOwogZXh0ZXJuIGludCBlY3J5cHRmc192ZXJib3NpdHk7CiBleHRlcm4gdW5zaWduZWQgaW50IGVjcnlwdGZzX21lc3NhZ2VfYnVmX2xlbjsKQEAgLTYyMCw3ICs2MjAsNiBAQAogCQkgICAgICAgdTMyIGZsYWdzKTsKIGludCBlY3J5cHRmc19sb29rdXBfYW5kX2ludGVycG9zZV9sb3dlcihzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksCiAJCQkJCXN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeSwKLQkJCQkJc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQsCiAJCQkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZGlyX2lub2RlLAogCQkJCQlzdHJ1Y3QgbmFtZWlkYXRhICplY3J5cHRmc19uZCk7CiBpbnQgZWNyeXB0ZnNfZGVjb2RlX2FuZF9kZWNyeXB0X2ZpbGVuYW1lKGNoYXIgKipkZWNyeXB0ZWRfbmFtZSwKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2lub2RlLmMgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCmluZGV4IDU2OTc4OTkuLjU1YjMxNDUgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2lub2RlLmMKKysrIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwpAQCAtMjQ2LDcgKzI0Niw2IEBACiAgKi8KIGludCBlY3J5cHRmc19sb29rdXBfYW5kX2ludGVycG9zZV9sb3dlcihzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksCiAJCQkJCXN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeSwKLQkJCQkJc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQsCiAJCQkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZGlyX2lub2RlLAogCQkJCQlzdHJ1Y3QgbmFtZWlkYXRhICplY3J5cHRmc19uZCkKIHsKQEAgLTI1NCw2ICsyNTMsNyBAQAogCXN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50OwogCXN0cnVjdCBpbm9kZSAqbG93ZXJfaW5vZGU7CiAJc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQgKm1vdW50X2NyeXB0X3N0YXQ7CisJc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQ7CiAJY2hhciAqcGFnZV92aXJ0ID0gTlVMTDsKIAl1NjQgZmlsZV9zaXplOwogCWludCByYyA9IDA7CkBAIC0zMTQsNiArMzE0LDExIEBACiAJCQlnb3RvIG91dF9mcmVlX2ttZW07CiAJCX0KIAl9CisJY3J5cHRfc3RhdCA9ICZlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKAorCQkJCQllY3J5cHRmc19kZW50cnktPmRfaW5vZGUpLT5jcnlwdF9zdGF0OworCS8qIFRPRE86IGxvY2sgZm9yIGNyeXB0X3N0YXQgY29tcGFyaXNvbiAqLworCWlmICghKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfUE9MSUNZX0FQUExJRUQpKQorCQkJZWNyeXB0ZnNfc2V0X2RlZmF1bHRfc2l6ZXMoY3J5cHRfc3RhdCk7CiAJcmMgPSBlY3J5cHRmc19yZWFkX2FuZF92YWxpZGF0ZV9oZWFkZXJfcmVnaW9uKHBhZ2VfdmlydCwKIAkJCQkJCSAgICAgIGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSk7CiAJaWYgKHJjKSB7CkBAIC0zNjIsOSArMzY3LDcgQEAKIHsKIAljaGFyICplbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZSA9IE5VTEw7CiAJc2l6ZV90IGVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lX3NpemU7Ci0Jc3RydWN0IGVjcnlwdGZzX2NyeXB0X3N0YXQgKmNyeXB0X3N0YXQgPSBOVUxMOwogCXN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0ID0gTlVMTDsKLQlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKIAlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kaXJfZGVudHJ5LCAqbG93ZXJfZGVudHJ5OwogCWludCByYyA9IDA7CiAKQEAgLTM4OCwyNiArMzkxLDE1IEBACiAJfQogCWlmIChsb3dlcl9kZW50cnktPmRfaW5vZGUpCiAJCWdvdG8gbG9va3VwX2FuZF9pbnRlcnBvc2U7Ci0JaW5vZGVfaW5mbyA9ICBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGVjcnlwdGZzX2RlbnRyeS0+ZF9pbm9kZSk7Ci0JaWYgKGlub2RlX2luZm8pIHsKLQkJY3J5cHRfc3RhdCA9ICZpbm9kZV9pbmZvLT5jcnlwdF9zdGF0OwotCQkvKiBUT0RPOiBsb2NrIGZvciBjcnlwdF9zdGF0IGNvbXBhcmlzb24gKi8KLQkJaWYgKCEoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19QT0xJQ1lfQVBQTElFRCkpCi0JCQllY3J5cHRmc19zZXRfZGVmYXVsdF9zaXplcyhjcnlwdF9zdGF0KTsKLQl9Ci0JaWYgKGNyeXB0X3N0YXQpCi0JCW1vdW50X2NyeXB0X3N0YXQgPSBjcnlwdF9zdGF0LT5tb3VudF9jcnlwdF9zdGF0OwotCWVsc2UKLQkJbW91bnRfY3J5cHRfc3RhdCA9ICZlY3J5cHRmc19zdXBlcmJsb2NrX3RvX3ByaXZhdGUoCi0JCQllY3J5cHRmc19kZW50cnktPmRfc2IpLT5tb3VudF9jcnlwdF9zdGF0OwotCWlmICghKGNyeXB0X3N0YXQgJiYgKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfRU5DUllQVF9GSUxFTkFNRVMpKQotCSAgICAmJiAhKG1vdW50X2NyeXB0X3N0YXQgJiYgKG1vdW50X2NyeXB0X3N0YXQtPmZsYWdzCi0JCQkJICAgICAmIEVDUllQVEZTX0dMT0JBTF9FTkNSWVBUX0ZJTEVOQU1FUykpKQorCW1vdW50X2NyeXB0X3N0YXQgPSAmZWNyeXB0ZnNfc3VwZXJibG9ja190b19wcml2YXRlKAorCQkJCWVjcnlwdGZzX2RlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7CisJaWYgKCEobW91bnRfY3J5cHRfc3RhdAorCSAgICAmJiAobW91bnRfY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19HTE9CQUxfRU5DUllQVF9GSUxFTkFNRVMpKSkKIAkJZ290byBsb29rdXBfYW5kX2ludGVycG9zZTsKIAlkcHV0KGxvd2VyX2RlbnRyeSk7CiAJcmMgPSBlY3J5cHRmc19lbmNyeXB0X2FuZF9lbmNvZGVfZmlsZW5hbWUoCiAJCSZlbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZSwgJmVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lX3NpemUsCi0JCWNyeXB0X3N0YXQsIG1vdW50X2NyeXB0X3N0YXQsIGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCU5VTEwsIG1vdW50X2NyeXB0X3N0YXQsIGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCWVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLmxlbik7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gZW5jcnlwdCBhbmQgZW5jb2RlICIKQEAgLTQyNiw3ICs0MTgsNyBAQAogCX0KIGxvb2t1cF9hbmRfaW50ZXJwb3NlOgogCXJjID0gZWNyeXB0ZnNfbG9va3VwX2FuZF9pbnRlcnBvc2VfbG93ZXIoZWNyeXB0ZnNfZGVudHJ5LCBsb3dlcl9kZW50cnksCi0JCQkJCQkgY3J5cHRfc3RhdCwgZWNyeXB0ZnNfZGlyX2lub2RlLAorCQkJCQkJIGVjcnlwdGZzX2Rpcl9pbm9kZSwKIAkJCQkJCSBlY3J5cHRmc19uZCk7CiAJZ290byBvdXQ7CiBvdXRfZF9kcm9wOgpkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAwMTFiOWI4Li5jNWM0MjRmIDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtNDE3LDEwICs0MTcsMTAgQEAKIAllcF91bnJlZ2lzdGVyX3BvbGx3YWl0KGVwLCBlcGkpOwogCiAJLyogUmVtb3ZlIHRoZSBjdXJyZW50IGl0ZW0gZnJvbSB0aGUgbGlzdCBvZiBlcG9sbCBob29rcyAqLwotCXNwaW5fbG9jaygmZmlsZS0+Zl9lcF9sb2NrKTsKKwlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CiAJaWYgKGVwX2lzX2xpbmtlZCgmZXBpLT5mbGxpbmspKQogCQlsaXN0X2RlbF9pbml0KCZlcGktPmZsbGluayk7Ci0Jc3Bpbl91bmxvY2soJmZpbGUtPmZfZXBfbG9jayk7CisJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAKIAlyYl9lcmFzZSgmZXBpLT5yYm4sICZlcC0+cmJyKTsKIApAQCAtNTM4LDcgKzUzOCw3IEBACiAJc3RydWN0IGVwaXRlbSAqZXBpOwogCiAJLyoKLQkgKiBXZSBkb24ndCB3YW50IHRvIGdldCAiZmlsZS0+Zl9lcF9sb2NrIiBiZWNhdXNlIGl0IGlzIG5vdAorCSAqIFdlIGRvbid0IHdhbnQgdG8gZ2V0ICJmaWxlLT5mX2xvY2siIGJlY2F1c2UgaXQgaXMgbm90CiAJICogbmVjZXNzYXJ5LiBJdCBpcyBub3QgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UncmUgaW4gdGhlICJzdHJ1Y3QgZmlsZSIKIAkgKiBjbGVhbnVwIHBhdGgsIGFuZCB0aGlzIG1lYW5zIHRoYXQgbm9vbmUgaXMgdXNpbmcgdGhpcyBmaWxlIGFueW1vcmUuCiAJICogU28sIGZvciBleGFtcGxlLCBlcG9sbF9jdGwoKSBjYW5ub3QgaGl0IGhlcmUgc2ljbmUgaWYgd2UgcmVhY2ggdGhpcwpAQCAtNTQ3LDYgKzU0Nyw4IEBACiAJICogd2lsbCBjb3JyZWN0bHkgc2VyaWFsaXplIHRoZSBvcGVyYXRpb24uIFdlIGRvIG5lZWQgdG8gYWNxdWlyZQogCSAqICJlcC0+bXR4IiBhZnRlciAiZXBtdXRleCIgYmVjYXVzZSBlcF9yZW1vdmUoKSByZXF1aXJlcyBpdCB3aGVuIGNhbGxlZAogCSAqIGZyb20gYW55d2hlcmUgYnV0IGVwX2ZyZWUoKS4KKwkgKgorCSAqIEJlc2lkZXMsIGVwX3JlbW92ZSgpIGFjcXVpcmVzIHRoZSBsb2NrLCBzbyB3ZSBjYW4ndCBob2xkIGl0IGhlcmUuCiAJICovCiAJbXV0ZXhfbG9jaygmZXBtdXRleCk7CiAKQEAgLTc4NSw5ICs3ODcsOSBAQAogCQlnb3RvIGVycm9yX3VucmVnaXN0ZXI7CiAKIAkvKiBBZGQgdGhlIGN1cnJlbnQgaXRlbSB0byB0aGUgbGlzdCBvZiBhY3RpdmUgZXBvbGwgaG9vayBmb3IgdGhpcyBmaWxlICovCi0Jc3Bpbl9sb2NrKCZ0ZmlsZS0+Zl9lcF9sb2NrKTsKKwlzcGluX2xvY2soJnRmaWxlLT5mX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmVwaS0+ZmxsaW5rLCAmdGZpbGUtPmZfZXBfbGlua3MpOwotCXNwaW5fdW5sb2NrKCZ0ZmlsZS0+Zl9lcF9sb2NrKTsKKwlzcGluX3VubG9jaygmdGZpbGUtPmZfbG9jayk7CiAKIAkvKgogCSAqIEFkZCB0aGUgY3VycmVudCBpdGVtIHRvIHRoZSBSQiB0cmVlLiBBbGwgUkIgdHJlZSBvcGVyYXRpb25zIGFyZQpkaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jCmluZGV4IDkyOWI1ODAuLmI5ZjFjMTQgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYworKysgYi9mcy9leGVjLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdHNhY2N0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9jbl9wcm9jLmg+CkBAIC0xMjcsNiArMTI4LDkgQEAKIAkJCQkgTUFZX1JFQUQgfCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXhpdDsKKwllcnJvciA9IGltYV9wYXRoX2NoZWNrKCZuZC5wYXRoLCBNQVlfUkVBRCB8IE1BWV9FWEVDIHwgTUFZX09QRU4pOworCWlmIChlcnJvcikKKwkJZ290byBleGl0OwogCiAJZmlsZSA9IG5hbWVpZGF0YV90b19maWxwKCZuZCwgT19SRE9OTFl8T19MQVJHRUZJTEUpOwogCWVycm9yID0gUFRSX0VSUihmaWxlKTsKQEAgLTY3NCw2ICs2NzgsOSBAQAogCWVyciA9IGlub2RlX3Blcm1pc3Npb24obmQucGF0aC5kZW50cnktPmRfaW5vZGUsIE1BWV9FWEVDIHwgTUFZX09QRU4pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3BhdGhfcHV0OworCWVyciA9IGltYV9wYXRoX2NoZWNrKCZuZC5wYXRoLCBNQVlfRVhFQyB8IE1BWV9PUEVOKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9wYXRoX3B1dDsKIAogCWZpbGUgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQsIE9fUkRPTkxZfE9fTEFSR0VGSUxFKTsKIAlpZiAoSVNfRVJSKGZpbGUpKQpAQCAtMTE4NCw2ICsxMTkxLDkgQEAKIAlyZXR2YWwgPSBzZWN1cml0eV9icHJtX2NoZWNrKGJwcm0pOwogCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CisJcmV0dmFsID0gaW1hX2Jwcm1fY2hlY2soYnBybSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKIAogCS8qIGtlcm5lbCBtb2R1bGUgbG9hZGVyIGZpeHVwICovCiAJLyogc28gd2UgZG9uJ3QgdHJ5IHRvIGxvYWQgcnVuIG1vZHByb2JlIGluIGtlcm5lbCBzcGFjZS4gKi8KQEAgLTEyODQsNiArMTI5NCw3IEBACiAJcmV0dmFsID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCWlmIChyZXR2YWwgPCAwKQogCQlnb3RvIG91dF9mcmVlOworCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDE7CiAKIAlyZXR2YWwgPSAtRU5PTUVNOwogCWJwcm0tPmNyZWQgPSBwcmVwYXJlX2V4ZWNfY3JlZHMoKTsKQEAgLTEzMzcsNiArMTM0OCw3IEBACiAJCWdvdG8gb3V0OwogCiAJLyogZXhlY3ZlIHN1Y2NlZWRlZCAqLworCWN1cnJlbnQtPmluX2V4ZWN2ZSA9IDA7CiAJbXV0ZXhfdW5sb2NrKCZjdXJyZW50LT5jcmVkX2V4ZWNfbXV0ZXgpOwogCWFjY3RfdXBkYXRlX2ludGVncmFscyhjdXJyZW50KTsKIAlmcmVlX2Jwcm0oYnBybSk7CkBAIC0xMzU1LDYgKzEzNjcsNyBAQAogCX0KIAogb3V0X3VubG9jazoKKwljdXJyZW50LT5pbl9leGVjdmUgPSAwOwogCW11dGV4X3VubG9jaygmY3VycmVudC0+Y3JlZF9leGVjX211dGV4KTsKIAogb3V0X2ZyZWU6CmRpZmYgLS1naXQgYS9mcy9leHQyL2JhbGxvYy5jIGIvZnMvZXh0Mi9iYWxsb2MuYwppbmRleCA0YTI5ZDYzLi43ZjhkMmU1IDEwMDY0NAotLS0gYS9mcy9leHQyL2JhbGxvYy5jCisrKyBiL2ZzL2V4dDIvYmFsbG9jLmMKQEAgLTU3MCw3ICs1NzAsNyBAQAogZXJyb3JfcmV0dXJuOgogCWJyZWxzZShiaXRtYXBfYmgpOwogCXJlbGVhc2VfYmxvY2tzKHNiLCBmcmVlZCk7Ci0JRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgZnJlZWQpOworCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBmcmVlZCk7CiB9CiAKIC8qKgpAQCAtMTI0Nyw3ICsxMjQ3LDcgQEAKIAkvKgogCSAqIENoZWNrIHF1b3RhIGZvciBhbGxvY2F0aW9uIG9mIHRoaXMgYmxvY2suCiAJICovCi0JaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCBudW0pKSB7CisJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgbnVtKSkgewogCQkqZXJycCA9IC1FRFFVT1Q7CiAJCXJldHVybiAwOwogCX0KQEAgLTE0MDksNyArMTQwOSw3IEBACiAKIAkqZXJycCA9IDA7CiAJYnJlbHNlKGJpdG1hcF9iaCk7Ci0JRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgKmNvdW50LW51bSk7CisJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsICpjb3VudC1udW0pOwogCSpjb3VudCA9IG51bTsKIAlyZXR1cm4gcmV0X2Jsb2NrOwogCkBAIC0xNDIwLDcgKzE0MjAsNyBAQAogCSAqIFVuZG8gdGhlIGJsb2NrIGFsbG9jYXRpb24KIAkgKi8KIAlpZiAoIXBlcmZvcm1lZF9hbGxvY2F0aW9uKQotCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAqY291bnQpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgKmNvdW50KTsKIAlicmVsc2UoYml0bWFwX2JoKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaWFsbG9jLmMgYi9mcy9leHQyL2lhbGxvYy5jCmluZGV4IDY2MzIxYTguLjE1Mzg3YzkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvaWFsbG9jLmMKKysrIGIvZnMvZXh0Mi9pYWxsb2MuYwpAQCAtMTIxLDggKzEyMSw4IEBACiAJaWYgKCFpc19iYWRfaW5vZGUoaW5vZGUpKSB7CiAJCS8qIFF1b3RhIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgaW4gaXB1dCgpICovCiAJCWV4dDJfeGF0dHJfZGVsZXRlX2lub2RlKGlub2RlKTsKLQkgICAgCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOwotCQlEUVVPVF9EUk9QKGlub2RlKTsKKwkJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOworCQl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJfQogCiAJZXMgPSBFWFQyX1NCKHNiKS0+c19lczsKQEAgLTU4Niw3ICs1ODYsNyBAQAogCQlnb3RvIGZhaWxfZHJvcDsKIAl9CiAKLQlpZiAoRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpKSB7CisJaWYgKHZmc19kcV9hbGxvY19pbm9kZShpbm9kZSkpIHsKIAkJZXJyID0gLUVEUVVPVDsKIAkJZ290byBmYWlsX2Ryb3A7CiAJfQpAQCAtNjA1LDEwICs2MDUsMTAgQEAKIAlyZXR1cm4gaW5vZGU7CiAKIGZhaWxfZnJlZV9kcm9wOgotCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOworCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKIAogZmFpbF9kcm9wOgotCURRVU9UX0RST1AoaW5vZGUpOworCXZmc19kcV9kcm9wKGlub2RlKTsKIAlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEE7CiAJaW5vZGUtPmlfbmxpbmsgPSAwOwogCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pbm9kZS5jIGIvZnMvZXh0Mi9pbm9kZS5jCmluZGV4IDIzZmZmMmYuLmI0M2I5NTU2IDEwMDY0NAotLS0gYS9mcy9leHQyL2lub2RlLmMKKysrIGIvZnMvZXh0Mi9pbm9kZS5jCkBAIC0xNDQ0LDcgKzE0NDQsNyBAQAogCQlyZXR1cm4gZXJyb3I7CiAJaWYgKChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCAmJiBpYXR0ci0+aWFfdWlkICE9IGlub2RlLT5pX3VpZCkgfHwKIAkgICAgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfR0lEICYmIGlhdHRyLT5pYV9naWQgIT0gaW5vZGUtPmlfZ2lkKSkgewotCQllcnJvciA9IERRVU9UX1RSQU5TRkVSKGlub2RlLCBpYXR0cikgPyAtRURRVU9UIDogMDsKKwkJZXJyb3IgPSB2ZnNfZHFfdHJhbnNmZXIoaW5vZGUsIGlhdHRyKSA/IC1FRFFVT1QgOiAwOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IDdjNmUzNjAuLmY5ODMyMjUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYworKysgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTEzMzEsNiArMTMzMSw3IEBACiAJCQkJc2ItPnNfYmxvY2tzaXplIC0gb2Zmc2V0IDogdG9yZWFkOwogCiAJCXRtcF9iaC5iX3N0YXRlID0gMDsKKwkJdG1wX2JoLmJfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAkJZXJyID0gZXh0Ml9nZXRfYmxvY2soaW5vZGUsIGJsaywgJnRtcF9iaCwgMCk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHIuYyBiL2ZzL2V4dDIveGF0dHIuYwppbmRleCA5ODdhNTI2Li43OTEzNTMxIDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyLmMKKysrIGIvZnMvZXh0Mi94YXR0ci5jCkBAIC02NDIsNyArNjQyLDcgQEAKIAkJCQllYV9iZGVidWcobmV3X2JoLCAicmV1c2luZyBibG9jayIpOwogCiAJCQkJZXJyb3IgPSAtRURRVU9UOwotCQkJCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpbm9kZSwgMSkpIHsKKwkJCQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCAxKSkgewogCQkJCQl1bmxvY2tfYnVmZmVyKG5ld19iaCk7CiAJCQkJCWdvdG8gY2xlYW51cDsKIAkJCQl9CkBAIC02OTksNyArNjk5LDcgQEAKIAkJICogYXMgaWYgbm90aGluZyBoYXBwZW5lZCBhbmQgY2xlYW51cCB0aGUgdW51c2VkIGJsb2NrICovCiAJCWlmIChlcnJvciAmJiBlcnJvciAhPSAtRU5PU1BDKSB7CiAJCQlpZiAobmV3X2JoICYmIG5ld19iaCAhPSBvbGRfYmgpCi0JCQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgMSk7CisJCQkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCQkJZ290byBjbGVhbnVwOwogCQl9CiAJfSBlbHNlCkBAIC03MzEsNyArNzMxLDcgQEAKIAkJCWxlMzJfYWRkX2NwdSgmSERSKG9sZF9iaCktPmhfcmVmY291bnQsIC0xKTsKIAkJCWlmIChjZSkKIAkJCQltYl9jYWNoZV9lbnRyeV9yZWxlYXNlKGNlKTsKLQkJCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIDEpOworCQkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCQkJbWFya19idWZmZXJfZGlydHkob2xkX2JoKTsKIAkJCWVhX2JkZWJ1ZyhvbGRfYmgsICJyZWZjb3VudCBub3c9JWQiLAogCQkJCWxlMzJfdG9fY3B1KEhEUihvbGRfYmgpLT5oX3JlZmNvdW50KSk7CkBAIC03OTQsNyArNzk0LDcgQEAKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlpZiAoSVNfU1lOQyhpbm9kZSkpCiAJCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIDEpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJfQogCUVYVDJfSShpbm9kZSktPmlfZmlsZV9hY2wgPSAwOwogCmRpZmYgLS1naXQgYS9mcy9leHQzL2JhbGxvYy5jIGIvZnMvZXh0My9iYWxsb2MuYwppbmRleCAwZGJmMWMwLi4yMjUyMDJkIDEwMDY0NAotLS0gYS9mcy9leHQzL2JhbGxvYy5jCisrKyBiL2ZzL2V4dDMvYmFsbG9jLmMKQEAgLTY3Niw3ICs2NzYsNyBAQAogCX0KIAlleHQzX2ZyZWVfYmxvY2tzX3NiKGhhbmRsZSwgc2IsIGJsb2NrLCBjb3VudCwgJmRxdW90X2ZyZWVkX2Jsb2Nrcyk7CiAJaWYgKGRxdW90X2ZyZWVkX2Jsb2NrcykKLQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgZHF1b3RfZnJlZWRfYmxvY2tzKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIGRxdW90X2ZyZWVkX2Jsb2Nrcyk7CiAJcmV0dXJuOwogfQogCkBAIC0xNTAyLDcgKzE1MDIsNyBAQAogCS8qCiAJICogQ2hlY2sgcXVvdGEgZm9yIGFsbG9jYXRpb24gb2YgdGhpcyBibG9jay4KIAkgKi8KLQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIG51bSkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCBudW0pKSB7CiAJCSplcnJwID0gLUVEUVVPVDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTcxNCw3ICsxNzE0LDcgQEAKIAogCSplcnJwID0gMDsKIAlicmVsc2UoYml0bWFwX2JoKTsKLQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAqY291bnQtbnVtKTsKKwl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgKmNvdW50LW51bSk7CiAJKmNvdW50ID0gbnVtOwogCXJldHVybiByZXRfYmxvY2s7CiAKQEAgLTE3MjksNyArMTcyOSw3IEBACiAJICogVW5kbyB0aGUgYmxvY2sgYWxsb2NhdGlvbgogCSAqLwogCWlmICghcGVyZm9ybWVkX2FsbG9jYXRpb24pCi0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsICpjb3VudCk7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAqY291bnQpOwogCWJyZWxzZShiaXRtYXBfYmgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pYWxsb2MuYyBiL2ZzL2V4dDMvaWFsbG9jLmMKaW5kZXggOGRlNmM3Mi4uZGQxM2Q2MCAxMDA2NDQKLS0tIGEvZnMvZXh0My9pYWxsb2MuYworKysgYi9mcy9leHQzL2lhbGxvYy5jCkBAIC0xMjMsMTAgKzEyMywxMCBAQAogCSAqIE5vdGU6IHdlIG11c3QgZnJlZSBhbnkgcXVvdGEgYmVmb3JlIGxvY2tpbmcgdGhlIHN1cGVyYmxvY2ssCiAJICogYXMgd3JpdGluZyB0aGUgcXVvdGEgdG8gZGlzayBtYXkgbmVlZCB0aGUgbG9jayBhcyB3ZWxsLgogCSAqLwotCURRVU9UX0lOSVQoaW5vZGUpOworCXZmc19kcV9pbml0KGlub2RlKTsKIAlleHQzX3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlKTsKLQlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CisJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCiAJaXNfZGlyZWN0b3J5ID0gU19JU0RJUihpbm9kZS0+aV9tb2RlKTsKIApAQCAtNTg5LDcgKzU4OSw3IEBACiAJCXNpemVvZihzdHJ1Y3QgZXh0M19pbm9kZSkgLSBFWFQzX0dPT0RfT0xEX0lOT0RFX1NJWkUgOiAwOwogCiAJcmV0ID0gaW5vZGU7Ci0JaWYoRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpKSB7CisJaWYgKHZmc19kcV9hbGxvY19pbm9kZShpbm9kZSkpIHsKIAkJZXJyID0gLUVEUVVPVDsKIAkJZ290byBmYWlsX2Ryb3A7CiAJfQpAQCAtNjIwLDEwICs2MjAsMTAgQEAKIAlyZXR1cm4gcmV0OwogCiBmYWlsX2ZyZWVfZHJvcDoKLQlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKKwl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CiAKIGZhaWxfZHJvcDoKLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBOwogCWlub2RlLT5pX25saW5rID0gMDsKIAl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCA1ZmE0NTNiLi40YTA5ZmYxIDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC0xNDM1LDYgKzE0MzUsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBidWZmZXJfdW5tYXBwZWQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKK3sKKwlyZXR1cm4gIWJ1ZmZlcl9tYXBwZWQoYmgpOworfQogLyoKICAqIE5vdGUgdGhhdCB3ZSBhbHdheXMgc3RhcnQgYSB0cmFuc2FjdGlvbiBldmVuIGlmIHdlJ3JlIG5vdCBqb3VybmFsbGluZwogICogZGF0YS4gIFRoaXMgaXMgdG8gcHJlc2VydmUgb3JkZXJpbmc6IGFueSBob2xlIGluc3RhbnRpYXRpb24gd2l0aGluCkBAIC0xNTA1LDYgKzE1MDksMTUgQEAKIAlpZiAoZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkpCiAJCWdvdG8gb3V0X2ZhaWw7CiAKKwlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIHsKKwkJY3JlYXRlX2VtcHR5X2J1ZmZlcnMocGFnZSwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplLAorCQkJCSgxIDw8IEJIX0RpcnR5KXwoMSA8PCBCSF9VcHRvZGF0ZSkpOworCX0gZWxzZSBpZiAoIXdhbGtfcGFnZV9idWZmZXJzKE5VTEwsIHBhZ2VfYnVmZmVycyhwYWdlKSwgMCwgUEFHRV9DQUNIRV9TSVpFLCBOVUxMLCBidWZmZXJfdW5tYXBwZWQpKSB7CisJCS8qIFByb3ZpZGUgTlVMTCBpbnN0ZWFkIG9mIGdldF9ibG9jayBzbyB0aGF0IHdlIGNhdGNoIGJ1Z3MgaWYgYnVmZmVycyB3ZXJlbid0IHJlYWxseSBtYXBwZWQgKi8KKwkJcmV0dXJuIGJsb2NrX3dyaXRlX2Z1bGxfcGFnZShwYWdlLCBOVUxMLCB3YmMpOworCX0KKwlwYWdlX2J1ZnMgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CisKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoaW5vZGUsIGV4dDNfd3JpdGVwYWdlX3RyYW5zX2Jsb2Nrcyhpbm9kZSkpOwogCiAJaWYgKElTX0VSUihoYW5kbGUpKSB7CkBAIC0xNTEyLDExICsxNTI1LDYgQEAKIAkJZ290byBvdXRfZmFpbDsKIAl9CiAKLQlpZiAoIXBhZ2VfaGFzX2J1ZmZlcnMocGFnZSkpIHsKLQkJY3JlYXRlX2VtcHR5X2J1ZmZlcnMocGFnZSwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplLAotCQkJCSgxIDw8IEJIX0RpcnR5KXwoMSA8PCBCSF9VcHRvZGF0ZSkpOwotCX0KLQlwYWdlX2J1ZnMgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CiAJd2Fsa19wYWdlX2J1ZmZlcnMoaGFuZGxlLCBwYWdlX2J1ZnMsIDAsCiAJCQlQQUdFX0NBQ0hFX1NJWkUsIE5VTEwsIGJnZXRfb25lKTsKIApAQCAtMzA1NSw3ICszMDYzLDcgQEAKIAkJCWVycm9yID0gUFRSX0VSUihoYW5kbGUpOwogCQkJZ290byBlcnJfb3V0OwogCQl9Ci0JCWVycm9yID0gRFFVT1RfVFJBTlNGRVIoaW5vZGUsIGF0dHIpID8gLUVEUVVPVCA6IDA7CisJCWVycm9yID0gdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBhdHRyKSA/IC1FRFFVT1QgOiAwOwogCQlpZiAoZXJyb3IpIHsKIAkJCWV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJCQlyZXR1cm4gZXJyb3I7CkBAIC0zMTQ2LDcgKzMxNTQsNyBAQAogCQlyZXQgPSAyICogKGJwcCArIGluZGlyZWN0cykgKyAyOwogCiAjaWZkZWYgQ09ORklHX1FVT1RBCi0JLyogV2Uga25vdyB0aGF0IHN0cnVjdHVyZSB3YXMgYWxyZWFkeSBhbGxvY2F0ZWQgZHVyaW5nIERRVU9UX0lOSVQgc28KKwkvKiBXZSBrbm93IHRoYXQgc3RydWN0dXJlIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCBkdXJpbmcgdmZzX2RxX2luaXQgc28KIAkgKiB3ZSB3aWxsIGJlIHVwZGF0aW5nIG9ubHkgdGhlIGRhdGEgYmxvY2tzICsgaW5vZGVzICovCiAJcmV0ICs9IDIqRVhUM19RVU9UQV9UUkFOU19CTE9DS1MoaW5vZGUtPmlfc2IpOwogI2VuZGlmCkBAIC0zMjM3LDcgKzMyNDUsNyBAQAogICogaV9zaXplIGhhcyBiZWVuIGNoYW5nZWQgYnkgZ2VuZXJpY19jb21taXRfd3JpdGUoKSBhbmQgd2UgdGh1cyBuZWVkCiAgKiB0byBpbmNsdWRlIHRoZSB1cGRhdGVkIGlub2RlIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICoKLSAqIEFsc28sIERRVU9UX0FMTE9DX1NQQUNFKCkgd2lsbCBhbHdheXMgZGlydHkgdGhlIGlub2RlIHdoZW4gYmxvY2tzCisgKiBBbHNvLCB2ZnNfZHFfYWxsb2Nfc3BhY2UoKSB3aWxsIGFsd2F5cyBkaXJ0eSB0aGUgaW5vZGUgd2hlbiBibG9ja3MKICAqIGFyZSBhbGxvY2F0ZWQgdG8gdGhlIGZpbGUuCiAgKgogICogSWYgdGhlIGlub2RlIGlzIG1hcmtlZCBzeW5jaHJvbm91cywgd2UgZG9uJ3QgaG9ub3VyIHRoYXQgaGVyZSAtIGRvaW5nCmRpZmYgLS1naXQgYS9mcy9leHQzL25hbWVpLmMgYi9mcy9leHQzL25hbWVpLmMKaW5kZXggNGRiNGZmYS4uZTJmYzYzYyAxMDA2NDQKLS0tIGEvZnMvZXh0My9uYW1laS5jCisrKyBiL2ZzL2V4dDMvbmFtZWkuYwpAQCAtMjA0OSw3ICsyMDQ5LDcgQEAKIAogCS8qIEluaXRpYWxpemUgcXVvdGFzIGJlZm9yZSBzbyB0aGF0IGV2ZW50dWFsIHdyaXRlcyBnbyBpbgogCSAqIHNlcGFyYXRlIHRyYW5zYWN0aW9uICovCi0JRFFVT1RfSU5JVChkZW50cnktPmRfaW5vZGUpOworCXZmc19kcV9pbml0KGRlbnRyeS0+ZF9pbm9kZSk7CiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGRpciwgRVhUM19ERUxFVEVfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKQEAgLTIxMDgsNyArMjEwOCw3IEBACiAKIAkvKiBJbml0aWFsaXplIHF1b3RhcyBiZWZvcmUgc28gdGhhdCBldmVudHVhbCB3cml0ZXMgZ28KIAkgKiBpbiBzZXBhcmF0ZSB0cmFuc2FjdGlvbiAqLwotCURRVU9UX0lOSVQoZGVudHJ5LT5kX2lub2RlKTsKKwl2ZnNfZHFfaW5pdChkZW50cnktPmRfaW5vZGUpOwogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChkaXIsIEVYVDNfREVMRVRFX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CkBAIC0yMjcyLDcgKzIyNzIsNyBAQAogCS8qIEluaXRpYWxpemUgcXVvdGFzIGJlZm9yZSBzbyB0aGF0IGV2ZW50dWFsIHdyaXRlcyBnbwogCSAqIGluIHNlcGFyYXRlIHRyYW5zYWN0aW9uICovCiAJaWYgKG5ld19kZW50cnktPmRfaW5vZGUpCi0JCURRVU9UX0lOSVQobmV3X2RlbnRyeS0+ZF9pbm9kZSk7CisJCXZmc19kcV9pbml0KG5ld19kZW50cnktPmRfaW5vZGUpOwogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChvbGRfZGlyLCAyICoKIAkJCQkJRVhUM19EQVRBX1RSQU5TX0JMT0NLUyhvbGRfZGlyLT5pX3NiKSArCiAJCQkJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMik7CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggNGE5NzA0MS4uOWU1YjhlMyAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtNzA3LDggKzcwNyw2IEBACiAjZGVmaW5lIFFUWVBFMk5BTUUodCkgKCh0KT09VVNSUVVPVEE/InVzZXIiOiJncm91cCIpCiAjZGVmaW5lIFFUWVBFMk1PUFQob24sIHQpICgodCk9PVVTUlFVT1RBPygob24pIyNVU1JKUVVPVEEpOigob24pIyNHUlBKUVVPVEEpKQogCi1zdGF0aWMgaW50IGV4dDNfZHF1b3RfaW5pdGlhbGl6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSk7Ci1zdGF0aWMgaW50IGV4dDNfZHF1b3RfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHN0YXRpYyBpbnQgZXh0M193cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKIHN0YXRpYyBpbnQgZXh0M19hY3F1aXJlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpOwogc3RhdGljIGludCBleHQzX3JlbGVhc2VfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7CkBAIC03MjMsOCArNzIxLDggQEAKIAkJCQljb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKTsKIAogc3RhdGljIHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGV4dDNfcXVvdGFfb3BlcmF0aW9ucyA9IHsKLQkuaW5pdGlhbGl6ZQk9IGV4dDNfZHF1b3RfaW5pdGlhbGl6ZSwKLQkuZHJvcAkJPSBleHQzX2RxdW90X2Ryb3AsCisJLmluaXRpYWxpemUJPSBkcXVvdF9pbml0aWFsaXplLAorCS5kcm9wCQk9IGRxdW90X2Ryb3AsCiAJLmFsbG9jX3NwYWNlCT0gZHF1b3RfYWxsb2Nfc3BhY2UsCiAJLmFsbG9jX2lub2RlCT0gZHF1b3RfYWxsb2NfaW5vZGUsCiAJLmZyZWVfc3BhY2UJPSBkcXVvdF9mcmVlX3NwYWNlLApAQCAtMTQzOCw3ICsxNDM2LDcgQEAKIAkJfQogCiAJCWxpc3RfYWRkKCZFWFQzX0koaW5vZGUpLT5pX29ycGhhbiwgJkVYVDNfU0Ioc2IpLT5zX29ycGhhbik7Ci0JCURRVU9UX0lOSVQoaW5vZGUpOworCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAJCWlmIChpbm9kZS0+aV9ubGluaykgewogCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkiJXM6IHRydW5jYXRpbmcgaW5vZGUgJWx1IHRvICVMZCBieXRlc1xuIiwKQEAgLTI3MDIsNyArMjcwMCw3IEBACiAgKiBQcm9jZXNzIDEgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VzcyAyCiAgKiBleHQzX2NyZWF0ZSgpICAgICAgICAgICAgICAgICAgICAgcXVvdGFfc3luYygpCiAgKiAgIGpvdXJuYWxfc3RhcnQoKSAgICAgICAgICAgICAgICAgICB3cml0ZV9kcXVvdCgpCi0gKiAgIERRVU9UX0lOSVQoKSAgICAgICAgICAgICAgICAgICAgICAgIGRvd24oZHFpb19tdXRleCkKKyAqICAgdmZzX2RxX2luaXQoKSAgICAgICAgICAgICAgICAgICAgICAgZG93bihkcWlvX211dGV4KQogICogICAgIGRvd24oZHFpb19tdXRleCkgICAgICAgICAgICAgICAgICAgIGpvdXJuYWxfc3RhcnQoKQogICoKICAqLwpAQCAtMjcxNCw0NCArMjcxMiw2IEBACiAJcmV0dXJuIHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmZpbGVzW2RxdW90LT5kcV90eXBlXTsKIH0KIAotc3RhdGljIGludCBleHQzX2RxdW90X2luaXRpYWxpemUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCi17Ci0JaGFuZGxlX3QgKmhhbmRsZTsKLQlpbnQgcmV0LCBlcnI7Ci0KLQkvKiBXZSBtYXkgY3JlYXRlIHF1b3RhIHN0cnVjdHVyZSBzbyB3ZSBuZWVkIHRvIHJlc2VydmUgZW5vdWdoIGJsb2NrcyAqLwotCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChpbm9kZSwgMipFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKGlub2RlLT5pX3NiKSk7Ci0JaWYgKElTX0VSUihoYW5kbGUpKQotCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwotCXJldCA9IGRxdW90X2luaXRpYWxpemUoaW5vZGUsIHR5cGUpOwotCWVyciA9IGV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IGVycjsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGV4dDNfZHF1b3RfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWhhbmRsZV90ICpoYW5kbGU7Ci0JaW50IHJldCwgZXJyOwotCi0JLyogV2UgbWF5IGRlbGV0ZSBxdW90YSBzdHJ1Y3R1cmUgc28gd2UgbmVlZCB0byByZXNlcnZlIGVub3VnaCBibG9ja3MgKi8KLQloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoaW5vZGUsIDIqRVhUM19RVU9UQV9ERUxfQkxPQ0tTKGlub2RlLT5pX3NiKSk7Ci0JaWYgKElTX0VSUihoYW5kbGUpKSB7Ci0JCS8qCi0JCSAqIFdlIGNhbGwgZHF1b3RfZHJvcCgpIGFueXdheSB0byBhdCBsZWFzdCByZWxlYXNlIHJlZmVyZW5jZXMKLQkJICogdG8gcXVvdGEgc3RydWN0dXJlcyBzbyB0aGF0IHVtb3VudCBkb2VzIG5vdCBoYW5nLgotCQkgKi8KLQkJZHF1b3RfZHJvcChpbm9kZSk7Ci0JCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7Ci0JfQotCXJldCA9IGRxdW90X2Ryb3AoaW5vZGUpOwotCWVyciA9IGV4dDNfam91cm5hbF9zdG9wKGhhbmRsZSk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IGVycjsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IGV4dDNfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKIHsKIAlpbnQgcmV0LCBlcnI7CmRpZmYgLS1naXQgYS9mcy9leHQzL3hhdHRyLmMgYi9mcy9leHQzL3hhdHRyLmMKaW5kZXggMTc1NDE0YS4uODNiN2JlOCAxMDA2NDQKLS0tIGEvZnMvZXh0My94YXR0ci5jCisrKyBiL2ZzL2V4dDMveGF0dHIuYwpAQCAtNDk4LDcgKzQ5OCw3IEBACiAJCWVycm9yID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgYmgpOwogCQlpZiAoSVNfU1lOQyhpbm9kZSkpCiAJCQloYW5kbGUtPmhfc3luYyA9IDE7Ci0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIDEpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJCWVhX2JkZWJ1ZyhiaCwgInJlZmNvdW50IG5vdz0lZDsgcmVsZWFzaW5nIiwKIAkJCSAgbGUzMl90b19jcHUoQkhEUihiaCktPmhfcmVmY291bnQpKTsKIAkJaWYgKGNlKQpAQCAtNzc0LDcgKzc3NCw3IEBACiAJCQkJLyogVGhlIG9sZCBibG9jayBpcyByZWxlYXNlZCBhZnRlciB1cGRhdGluZwogCQkJCSAgIHRoZSBpbm9kZS4gKi8KIAkJCQllcnJvciA9IC1FRFFVT1Q7Ci0JCQkJaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCAxKSkKKwkJCQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCAxKSkKIAkJCQkJZ290byBjbGVhbnVwOwogCQkJCWVycm9yID0gZXh0M19qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLAogCQkJCQkJCQkgICAgICBuZXdfYmgpOwpAQCAtODQ4LDcgKzg0OCw3IEBACiAJcmV0dXJuIGVycm9yOwogCiBjbGVhbnVwX2RxdW90OgotCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIDEpOworCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKIAlnb3RvIGNsZWFudXA7CiAKIGJhZF9ibG9jazoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYmFsbG9jLmMgYi9mcy9leHQ0L2JhbGxvYy5jCmluZGV4IGRlOTQ1OWIuLjM4ZjQwZDUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9iYWxsb2MuYwpAQCAtNTM2LDcgKzUzNiw3IEBACiAJZXh0NF9tYl9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBibG9jaywgY291bnQsCiAJCQkgICAgbWV0YWRhdGEsICZkcXVvdF9mcmVlZF9ibG9ja3MpOwogCWlmIChkcXVvdF9mcmVlZF9ibG9ja3MpCi0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIGRxdW90X2ZyZWVkX2Jsb2Nrcyk7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBkcXVvdF9mcmVlZF9ibG9ja3MpOwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCBiMGM4N2RjLi42MDgzYmIzOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgogI2luY2x1ZGUgPGxpbnV4L2piZDIuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YS5oPgogI2luY2x1ZGUgImV4dDRfaS5oIgogCiAvKgpAQCAtMTA5OCw2ICsxMDk5LDcgQEAKIGV4dGVybiBpbnQgZXh0NF9ibG9ja190cnVuY2F0ZV9wYWdlKGhhbmRsZV90ICpoYW5kbGUsCiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgZnJvbSk7CiBleHRlcm4gaW50IGV4dDRfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gcXNpemVfdCBleHQ0X2dldF9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogLyogaW9jdGwuYyAqLwogZXh0ZXJuIGxvbmcgZXh0NF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pYWxsb2MuYyBiL2ZzL2V4dDQvaWFsbG9jLmMKaW5kZXggMmQyYjM1OC4uZmI1MWI0MCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pYWxsb2MuYworKysgYi9mcy9leHQ0L2lhbGxvYy5jCkBAIC0yMjAsMTAgKzIyMCwxMCBAQAogCSAqIE5vdGU6IHdlIG11c3QgZnJlZSBhbnkgcXVvdGEgYmVmb3JlIGxvY2tpbmcgdGhlIHN1cGVyYmxvY2ssCiAJICogYXMgd3JpdGluZyB0aGUgcXVvdGEgdG8gZGlzayBtYXkgbmVlZCB0aGUgbG9jayBhcyB3ZWxsLgogCSAqLwotCURRVU9UX0lOSVQoaW5vZGUpOworCXZmc19kcV9pbml0KGlub2RlKTsKIAlleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlKTsKLQlEUVVPVF9GUkVFX0lOT0RFKGlub2RlKTsKLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CisJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCiAJaXNfZGlyZWN0b3J5ID0gU19JU0RJUihpbm9kZS0+aV9tb2RlKTsKIApAQCAtOTE1LDcgKzkxNSw3IEBACiAJZWktPmlfZXh0cmFfaXNpemUgPSBFWFQ0X1NCKHNiKS0+c193YW50X2V4dHJhX2lzaXplOwogCiAJcmV0ID0gaW5vZGU7Ci0JaWYgKERRVU9UX0FMTE9DX0lOT0RFKGlub2RlKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfaW5vZGUoaW5vZGUpKSB7CiAJCWVyciA9IC1FRFFVT1Q7CiAJCWdvdG8gZmFpbF9kcm9wOwogCX0KQEAgLTk1NiwxMCArOTU2LDEwIEBACiAJcmV0dXJuIHJldDsKIAogZmFpbF9mcmVlX2Ryb3A6Ci0JRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7CisJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOwogCiBmYWlsX2Ryb3A6Ci0JRFFVT1RfRFJPUChpbm9kZSk7CisJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9RVU9UQTsKIAlpbm9kZS0+aV9ubGluayA9IDA7CiAJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggYzdmZWQ1Yi4uNzFkM2VjZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtOTc1LDYgKzk3NSwxNyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3FzaXplX3QgZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG90YWw7CisKKwlzcGluX2xvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisJdG90YWwgPSBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzICsKKwkJRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKKwlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKKworCXJldHVybiB0b3RhbDsKK30KIC8qCiAgKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBtZXRhZGF0YSBibG9ja3MgbmVlZCB0byByZXNlcnZlCiAgKiB0byBhbGxvY2F0ZSBAYmxvY2tzIGZvciBub24gZXh0ZW50IGZpbGUgYmFzZWQgZmlsZQpAQCAtMTAzNiw4ICsxMDQ3LDE0IEBACiAJLyogdXBkYXRlIHBlci1pbm9kZSByZXNlcnZhdGlvbnMgKi8KIAlCVUdfT04odXNlZCAgPiBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKTsKIAlFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzIC09IHVzZWQ7Ci0KIAlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKKworCS8qCisJICogZnJlZSB0aG9zZSBvdmVyLWJvb2tpbmcgcXVvdGEgZm9yIG1ldGFkYXRhIGJsb2NrcworCSAqLworCisJaWYgKG1kYl9mcmVlKQorCQl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9ibG9jayhpbm9kZSwgbWRiX2ZyZWUpOwogfQogCiAvKgpAQCAtMTU1Myw4ICsxNTcwLDggQEAKIHN0YXRpYyBpbnQgZXh0NF9kYV9yZXNlcnZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBucmJsb2NrcykKIHsKIAlpbnQgcmV0cmllcyA9IDA7Ci0gICAgICAgc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0+aV9zYik7Ci0gICAgICAgdW5zaWduZWQgbG9uZyBtZF9uZWVkZWQsIG1kYmxvY2tzLCB0b3RhbCA9IDA7CisJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0+aV9zYik7CisJdW5zaWduZWQgbG9uZyBtZF9uZWVkZWQsIG1kYmxvY2tzLCB0b3RhbCA9IDA7CiAKIAkvKgogCSAqIHJlY2FsY3VsYXRlIHRoZSBhbW91bnQgb2YgbWV0YWRhdGEgYmxvY2tzIHRvIHJlc2VydmUKQEAgLTE1NzAsMTIgKzE1ODcsMjMgQEAKIAltZF9uZWVkZWQgPSBtZGJsb2NrcyAtIEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3M7CiAJdG90YWwgPSBtZF9uZWVkZWQgKyBucmJsb2NrczsKIAorCS8qCisJICogTWFrZSBxdW90YSByZXNlcnZhdGlvbiBoZXJlIHRvIHByZXZlbnQgcXVvdGEgb3ZlcmZsb3cKKwkgKiBsYXRlci4gUmVhbCBxdW90YSBhY2NvdW50aW5nIGlzIGRvbmUgYXQgcGFnZXMgd3JpdGVvdXQKKwkgKiB0aW1lLgorCSAqLworCWlmICh2ZnNfZHFfcmVzZXJ2ZV9ibG9jayhpbm9kZSwgdG90YWwpKSB7CisJCXNwaW5fdW5sb2NrKCZFWFQ0X0koaW5vZGUpLT5pX2Jsb2NrX3Jlc2VydmF0aW9uX2xvY2spOworCQlyZXR1cm4gLUVEUVVPVDsKKwl9CisKIAlpZiAoZXh0NF9jbGFpbV9mcmVlX2Jsb2NrcyhzYmksIHRvdGFsKSkgewogCQlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKIAkJaWYgKGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpIHsKIAkJCXlpZWxkKCk7CiAJCQlnb3RvIHJlcGVhdDsKIAkJfQorCQl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9ibG9jayhpbm9kZSwgdG90YWwpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAJRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrcyArPSBucmJsb2NrczsKQEAgLTE2MjksNiArMTY1Nyw4IEBACiAJQlVHX09OKG1kYiA+IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MpOwogCUVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgPSBtZGI7CiAJc3Bpbl91bmxvY2soJkVYVDRfSShpbm9kZSktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CisKKwl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9ibG9jayhpbm9kZSwgcmVsZWFzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGV4dDRfZGFfcGFnZV9yZWxlYXNlX3Jlc2VydmF0aW9uKHN0cnVjdCBwYWdlICpwYWdlLApAQCAtNDYxMiw3ICs0NjQyLDcgQEAKIAkJCWVycm9yID0gUFRSX0VSUihoYW5kbGUpOwogCQkJZ290byBlcnJfb3V0OwogCQl9Ci0JCWVycm9yID0gRFFVT1RfVFJBTlNGRVIoaW5vZGUsIGF0dHIpID8gLUVEUVVPVCA6IDA7CisJCWVycm9yID0gdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBhdHRyKSA/IC1FRFFVT1QgOiAwOwogCQlpZiAoZXJyb3IpIHsKIAkJCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJCQlyZXR1cm4gZXJyb3I7CkBAIC00OTkxLDcgKzUwMjEsNyBAQAogICogaV9zaXplIGhhcyBiZWVuIGNoYW5nZWQgYnkgZ2VuZXJpY19jb21taXRfd3JpdGUoKSBhbmQgd2UgdGh1cyBuZWVkCiAgKiB0byBpbmNsdWRlIHRoZSB1cGRhdGVkIGlub2RlIGluIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLgogICoKLSAqIEFsc28sIERRVU9UX0FMTE9DX1NQQUNFKCkgd2lsbCBhbHdheXMgZGlydHkgdGhlIGlub2RlIHdoZW4gYmxvY2tzCisgKiBBbHNvLCB2ZnNfZHFfYWxsb2NfYmxvY2soKSB3aWxsIGFsd2F5cyBkaXJ0eSB0aGUgaW5vZGUgd2hlbiBibG9ja3MKICAqIGFyZSBhbGxvY2F0ZWQgdG8gdGhlIGZpbGUuCiAgKgogICogSWYgdGhlIGlub2RlIGlzIG1hcmtlZCBzeW5jaHJvbm91cywgd2UgZG9uJ3QgaG9ub3VyIHRoYXQgaGVyZSAtIGRvaW5nCmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IDlmNjFlNjIuLmIwMzgxODggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC0zMDg2LDkgKzMwODYsMTIgQEAKIAlpZiAoIShhYy0+YWNfZmxhZ3MgJiBFWFQ0X01CX0RFTEFMTE9DX1JFU0VSVkVEKSkKIAkJLyogcmVsZWFzZSBhbGwgdGhlIHJlc2VydmVkIGJsb2NrcyBpZiBub24gZGVsYWxsb2MgKi8KIAkJcGVyY3B1X2NvdW50ZXJfc3ViKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlciwgcmVzZXJ2X2Jsa3MpOwotCWVsc2UKKwllbHNlIHsKIAkJcGVyY3B1X2NvdW50ZXJfc3ViKCZzYmktPnNfZGlydHlibG9ja3NfY291bnRlciwKIAkJCQkJCWFjLT5hY19iX2V4LmZlX2xlbik7CisJCS8qIGNvbnZlcnQgcmVzZXJ2ZWQgcXVvdGEgYmxvY2tzIHRvIHJlYWwgcXVvdGEgYmxvY2tzICovCisJCXZmc19kcV9jbGFpbV9ibG9jayhhYy0+YWNfaW5vZGUsIGFjLT5hY19iX2V4LmZlX2xlbik7CisJfQogCiAJaWYgKHNiaS0+c19sb2dfZ3JvdXBzX3Blcl9mbGV4KSB7CiAJCWV4dDRfZ3JvdXBfdCBmbGV4X2dyb3VwID0gZXh0NF9mbGV4X2dyb3VwKHNiaSwKQEAgLTQ1NDQsNyArNDU0Nyw3IEBACiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiAJZXh0NF9mc2Jsa190IGJsb2NrID0gMDsKLQl1bnNpZ25lZCBpbnQgaW5xdW90YTsKKwl1bnNpZ25lZCBpbnQgaW5xdW90YSA9IDA7CiAJdW5zaWduZWQgaW50IHJlc2Vydl9ibGtzID0gMDsKIAogCXNiID0gYXItPmlub2RlLT5pX3NiOwpAQCAtNDU2Miw5ICs0NTY1LDE3IEBACiAJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGFyLT5wbGVmdCwKIAkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgYXItPnByaWdodCk7CiAKLQlpZiAoIUVYVDRfSShhci0+aW5vZGUpLT5pX2RlbGFsbG9jX3Jlc2VydmVkX2ZsYWcpIHsKLQkJLyoKLQkJICogV2l0aCBkZWxhbGxvYyB3ZSBhbHJlYWR5IHJlc2VydmVkIHRoZSBibG9ja3MKKwkvKgorCSAqIEZvciBkZWxheWVkIGFsbG9jYXRpb24sIHdlIGNvdWxkIHNraXAgdGhlIEVOT1NQQyBhbmQKKwkgKiBFRFFVT1QgY2hlY2ssIGFzIGJsb2NrcyBhbmQgcXVvdGFzIGhhdmUgYmVlbiBhbHJlYWR5CisJICogcmVzZXJ2ZWQgd2hlbiBkYXRhIGJlaW5nIGNvcGllZCBpbnRvIHBhZ2VjYWNoZS4KKwkgKi8KKwlpZiAoRVhUNF9JKGFyLT5pbm9kZSktPmlfZGVsYWxsb2NfcmVzZXJ2ZWRfZmxhZykKKwkJYXItPmZsYWdzIHw9IEVYVDRfTUJfREVMQUxMT0NfUkVTRVJWRUQ7CisJZWxzZSB7CisJCS8qIFdpdGhvdXQgZGVsYXllZCBhbGxvY2F0aW9uIHdlIG5lZWQgdG8gdmVyaWZ5CisJCSAqIHRoZXJlIGlzIGVub3VnaCBmcmVlIGJsb2NrcyB0byBkbyBibG9jayBhbGxvY2F0aW9uCisJCSAqIGFuZCB2ZXJpZnkgYWxsb2NhdGlvbiBkb2Vzbid0IGV4Y2VlZCB0aGUgcXVvdGEgbGltaXRzLgogCQkgKi8KIAkJd2hpbGUgKGFyLT5sZW4gJiYgZXh0NF9jbGFpbV9mcmVlX2Jsb2NrcyhzYmksIGFyLT5sZW4pKSB7CiAJCQkvKiBsZXQgb3RoZXJzIHRvIGZyZWUgdGhlIHNwYWNlICovCkBAIC00NTc2LDE5ICs0NTg3LDE2IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyZXNlcnZfYmxrcyA9IGFyLT5sZW47CisJCXdoaWxlIChhci0+bGVuICYmIHZmc19kcV9hbGxvY19ibG9jayhhci0+aW5vZGUsIGFyLT5sZW4pKSB7CisJCQlhci0+ZmxhZ3MgfD0gRVhUNF9NQl9ISU5UX05PUFJFQUxMT0M7CisJCQlhci0+bGVuLS07CisJCX0KKwkJaW5xdW90YSA9IGFyLT5sZW47CisJCWlmIChhci0+bGVuID09IDApIHsKKwkJCSplcnJwID0gLUVEUVVPVDsKKwkJCWdvdG8gb3V0MzsKKwkJfQogCX0KLQl3aGlsZSAoYXItPmxlbiAmJiBEUVVPVF9BTExPQ19CTE9DSyhhci0+aW5vZGUsIGFyLT5sZW4pKSB7Ci0JCWFyLT5mbGFncyB8PSBFWFQ0X01CX0hJTlRfTk9QUkVBTExPQzsKLQkJYXItPmxlbi0tOwotCX0KLQlpZiAoYXItPmxlbiA9PSAwKSB7Ci0JCSplcnJwID0gLUVEUVVPVDsKLQkJZ290byBvdXQzOwotCX0KLQlpbnF1b3RhID0gYXItPmxlbjsKLQotCWlmIChFWFQ0X0koYXItPmlub2RlKS0+aV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnKQotCQlhci0+ZmxhZ3MgfD0gRVhUNF9NQl9ERUxBTExPQ19SRVNFUlZFRDsKIAogCWFjID0ga21lbV9jYWNoZV9hbGxvYyhleHQ0X2FjX2NhY2hlcCwgR0ZQX05PRlMpOwogCWlmICghYWMpIHsKQEAgLTQ2NTQsOCArNDY2Miw4IEBACiBvdXQyOgogCWttZW1fY2FjaGVfZnJlZShleHQ0X2FjX2NhY2hlcCwgYWMpOwogb3V0MToKLQlpZiAoYXItPmxlbiA8IGlucXVvdGEpCi0JCURRVU9UX0ZSRUVfQkxPQ0soYXItPmlub2RlLCBpbnF1b3RhIC0gYXItPmxlbik7CisJaWYgKGlucXVvdGEgJiYgYXItPmxlbiA8IGlucXVvdGEpCisJCXZmc19kcV9mcmVlX2Jsb2NrKGFyLT5pbm9kZSwgaW5xdW90YSAtIGFyLT5sZW4pOwogb3V0MzoKIAlpZiAoIWFyLT5sZW4pIHsKIAkJaWYgKCFFWFQ0X0koYXItPmlub2RlKS0+aV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9uYW1laS5jIGIvZnMvZXh0NC9uYW1laS5jCmluZGV4IGJhNzAyYmQuLjgzNDEwMjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbmFtZWkuYworKysgYi9mcy9leHQ0L25hbWVpLmMKQEAgLTIwOTIsNyArMjA5Miw3IEBACiAKIAkvKiBJbml0aWFsaXplIHF1b3RhcyBiZWZvcmUgc28gdGhhdCBldmVudHVhbCB3cml0ZXMgZ28gaW4KIAkgKiBzZXBhcmF0ZSB0cmFuc2FjdGlvbiAqLwotCURRVU9UX0lOSVQoZGVudHJ5LT5kX2lub2RlKTsKKwl2ZnNfZHFfaW5pdChkZW50cnktPmRfaW5vZGUpOwogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChkaXIsIEVYVDRfREVMRVRFX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CkBAIC0yMTUxLDcgKzIxNTEsNyBAQAogCiAJLyogSW5pdGlhbGl6ZSBxdW90YXMgYmVmb3JlIHNvIHRoYXQgZXZlbnR1YWwgd3JpdGVzIGdvCiAJICogaW4gc2VwYXJhdGUgdHJhbnNhY3Rpb24gKi8KLQlEUVVPVF9JTklUKGRlbnRyeS0+ZF9pbm9kZSk7CisJdmZzX2RxX2luaXQoZGVudHJ5LT5kX2lub2RlKTsKIAloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQ0X0RFTEVURV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSk7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwpAQCAtMjMxOCw3ICsyMzE4LDcgQEAKIAkvKiBJbml0aWFsaXplIHF1b3RhcyBiZWZvcmUgc28gdGhhdCBldmVudHVhbCB3cml0ZXMgZ28KIAkgKiBpbiBzZXBhcmF0ZSB0cmFuc2FjdGlvbiAqLwogCWlmIChuZXdfZGVudHJ5LT5kX2lub2RlKQotCQlEUVVPVF9JTklUKG5ld19kZW50cnktPmRfaW5vZGUpOworCQl2ZnNfZHFfaW5pdChuZXdfZGVudHJ5LT5kX2lub2RlKTsKIAloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQob2xkX2RpciwgMiAqCiAJCQkJCUVYVDRfREFUQV9UUkFOU19CTE9DS1Mob2xkX2Rpci0+aV9zYikgKwogCQkJCQlFWFQ0X0lOREVYX0VYVFJBX1RSQU5TX0JMT0NLUyArIDIpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDM5ZDE5OTMuLmY3MzcxYTYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTkyNiw4ICs5MjYsNiBAQAogI2RlZmluZSBRVFlQRTJOQU1FKHQpICgodCkgPT0gVVNSUVVPVEEgPyAidXNlciIgOiAiZ3JvdXAiKQogI2RlZmluZSBRVFlQRTJNT1BUKG9uLCB0KSAoKHQpID09IFVTUlFVT1RBPygob24pIyNVU1JKUVVPVEEpOigob24pIyNHUlBKUVVPVEEpKQogCi1zdGF0aWMgaW50IGV4dDRfZHF1b3RfaW5pdGlhbGl6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSk7Ci1zdGF0aWMgaW50IGV4dDRfZHF1b3RfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKIHN0YXRpYyBpbnQgZXh0NF9hY3F1aXJlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpOwogc3RhdGljIGludCBleHQ0X3JlbGVhc2VfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCk7CkBAIC05NDIsOSArOTQwLDEzIEBACiAJCQkJY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwgbG9mZl90IG9mZik7CiAKIHN0YXRpYyBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBleHQ0X3F1b3RhX29wZXJhdGlvbnMgPSB7Ci0JLmluaXRpYWxpemUJPSBleHQ0X2RxdW90X2luaXRpYWxpemUsCi0JLmRyb3AJCT0gZXh0NF9kcXVvdF9kcm9wLAorCS5pbml0aWFsaXplCT0gZHF1b3RfaW5pdGlhbGl6ZSwKKwkuZHJvcAkJPSBkcXVvdF9kcm9wLAogCS5hbGxvY19zcGFjZQk9IGRxdW90X2FsbG9jX3NwYWNlLAorCS5yZXNlcnZlX3NwYWNlCT0gZHF1b3RfcmVzZXJ2ZV9zcGFjZSwKKwkuY2xhaW1fc3BhY2UJPSBkcXVvdF9jbGFpbV9zcGFjZSwKKwkucmVsZWFzZV9yc3YJPSBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlLAorCS5nZXRfcmVzZXJ2ZWRfc3BhY2UgPSBleHQ0X2dldF9yZXNlcnZlZF9zcGFjZSwKIAkuYWxsb2NfaW5vZGUJPSBkcXVvdF9hbGxvY19pbm9kZSwKIAkuZnJlZV9zcGFjZQk9IGRxdW90X2ZyZWVfc3BhY2UsCiAJLmZyZWVfaW5vZGUJPSBkcXVvdF9mcmVlX2lub2RlLApAQCAtMTgwMiw3ICsxODA0LDcgQEAKIAkJfQogCiAJCWxpc3RfYWRkKCZFWFQ0X0koaW5vZGUpLT5pX29ycGhhbiwgJkVYVDRfU0Ioc2IpLT5zX29ycGhhbik7Ci0JCURRVU9UX0lOSVQoaW5vZGUpOworCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAJCWlmIChpbm9kZS0+aV9ubGluaykgewogCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkiJXM6IHRydW5jYXRpbmcgaW5vZGUgJWx1IHRvICVsbGQgYnl0ZXNcbiIsCkBAIC0zMzY3LDggKzMzNjksOCBAQAogICogaXMgbG9ja2VkIGZvciB3cml0ZS4gT3RoZXJ3aXNlIHRoZSBhcmUgcG9zc2libGUgZGVhZGxvY2tzOgogICogUHJvY2VzcyAxICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3MgMgogICogZXh0NF9jcmVhdGUoKSAgICAgICAgICAgICAgICAgICAgIHF1b3RhX3N5bmMoKQotICogICBqYmQyX2pvdXJuYWxfc3RhcnQoKSAgICAgICAgICAgICAgICAgICB3cml0ZV9kcXVvdCgpCi0gKiAgIERRVU9UX0lOSVQoKSAgICAgICAgICAgICAgICAgICAgICAgIGRvd24oZHFpb19tdXRleCkKKyAqICAgamJkMl9qb3VybmFsX3N0YXJ0KCkgICAgICAgICAgICAgICAgICB3cml0ZV9kcXVvdCgpCisgKiAgIHZmc19kcV9pbml0KCkgICAgICAgICAgICAgICAgICAgICAgICAgZG93bihkcWlvX211dGV4KQogICogICAgIGRvd24oZHFpb19tdXRleCkgICAgICAgICAgICAgICAgICAgIGpiZDJfam91cm5hbF9zdGFydCgpCiAgKgogICovCkBAIC0zMzgwLDQ0ICszMzgyLDYgQEAKIAlyZXR1cm4gc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmlsZXNbZHF1b3QtPmRxX3R5cGVdOwogfQogCi1zdGF0aWMgaW50IGV4dDRfZHF1b3RfaW5pdGlhbGl6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSkKLXsKLQloYW5kbGVfdCAqaGFuZGxlOwotCWludCByZXQsIGVycjsKLQotCS8qIFdlIG1heSBjcmVhdGUgcXVvdGEgc3RydWN0dXJlIHNvIHdlIG5lZWQgdG8gcmVzZXJ2ZSBlbm91Z2ggYmxvY2tzICovCi0JaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCAyKkVYVDRfUVVPVEFfSU5JVF9CTE9DS1MoaW5vZGUtPmlfc2IpKTsKLQlpZiAoSVNfRVJSKGhhbmRsZSkpCi0JCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7Ci0JcmV0ID0gZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSwgdHlwZSk7Ci0JZXJyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gZXJyOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZXh0NF9kcXVvdF9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaGFuZGxlX3QgKmhhbmRsZTsKLQlpbnQgcmV0LCBlcnI7Ci0KLQkvKiBXZSBtYXkgZGVsZXRlIHF1b3RhIHN0cnVjdHVyZSBzbyB3ZSBuZWVkIHRvIHJlc2VydmUgZW5vdWdoIGJsb2NrcyAqLwotCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgMipFWFQ0X1FVT1RBX0RFTF9CTE9DS1MoaW5vZGUtPmlfc2IpKTsKLQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKLQkJLyoKLQkJICogV2UgY2FsbCBkcXVvdF9kcm9wKCkgYW55d2F5IHRvIGF0IGxlYXN0IHJlbGVhc2UgcmVmZXJlbmNlcwotCQkgKiB0byBxdW90YSBzdHJ1Y3R1cmVzIHNvIHRoYXQgdW1vdW50IGRvZXMgbm90IGhhbmcuCi0JCSAqLwotCQlkcXVvdF9kcm9wKGlub2RlKTsKLQkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKLQl9Ci0JcmV0ID0gZHF1b3RfZHJvcChpbm9kZSk7Ci0JZXJyID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gZXJyOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQogewogCWludCByZXQsIGVycjsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuYwppbmRleCAxNTdjZTY1Li42MmIzMWMyIDEwMDY0NAotLS0gYS9mcy9leHQ0L3hhdHRyLmMKKysrIGIvZnMvZXh0NC94YXR0ci5jCkBAIC00OTAsNyArNDkwLDcgQEAKIAkJZXJyb3IgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGlub2RlLCBiaCk7CiAJCWlmIChJU19TWU5DKGlub2RlKSkKIAkJCWV4dDRfaGFuZGxlX3N5bmMoaGFuZGxlKTsKLQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgMSk7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKIAkJZWFfYmRlYnVnKGJoLCAicmVmY291bnQgbm93PSVkOyByZWxlYXNpbmciLAogCQkJICBsZTMyX3RvX2NwdShCSERSKGJoKS0+aF9yZWZjb3VudCkpOwogCQlpZiAoY2UpCkBAIC03ODQsNyArNzg0LDcgQEAKIAkJCQkvKiBUaGUgb2xkIGJsb2NrIGlzIHJlbGVhc2VkIGFmdGVyIHVwZGF0aW5nCiAJCQkJICAgdGhlIGlub2RlLiAqLwogCQkJCWVycm9yID0gLUVEUVVPVDsKLQkJCQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIDEpKQorCQkJCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIDEpKQogCQkJCQlnb3RvIGNsZWFudXA7CiAJCQkJZXJyb3IgPSBleHQ0X2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsCiAJCQkJCQkJCSAgICAgIG5ld19iaCk7CkBAIC04NjAsNyArODYwLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiAKIGNsZWFudXBfZHF1b3Q6Ci0JRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgMSk7CisJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCWdvdG8gY2xlYW51cDsKIAogYmFkX2Jsb2NrOgpkaWZmIC0tZ2l0IGEvZnMvZmF0L25hbWVpX21zZG9zLmMgYi9mcy9mYXQvbmFtZWlfbXNkb3MuYwppbmRleCA3YmEwM2E0Li5kYTNmMzYxIDEwMDY0NAotLS0gYS9mcy9mYXQvbmFtZWlfbXNkb3MuYworKysgYi9mcy9mYXQvbmFtZWlfbXNkb3MuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbXNkb3NfZGVudHJ5X29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG1zZG9zX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2gJCT0gbXNkb3NfaGFzaCwKIAkuZF9jb21wYXJlCT0gbXNkb3NfY21wLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMgYi9mcy9mYXQvbmFtZWlfdmZhdC5jCmluZGV4IDhhZTMyZTMuLmEwZTAwZTMgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9uYW1laV92ZmF0LmMKKysrIGIvZnMvZmF0L25hbWVpX3ZmYXQuYwpAQCAtMTY2LDEzICsxNjYsMTMgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB2ZmF0X2NpX2RlbnRyeV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHZmYXRfY2lfZGVudHJ5X29wcyA9IHsKIAkuZF9yZXZhbGlkYXRlCT0gdmZhdF9yZXZhbGlkYXRlX2NpLAogCS5kX2hhc2gJCT0gdmZhdF9oYXNoaSwKIAkuZF9jb21wYXJlCT0gdmZhdF9jbXBpLAogfTsKIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB2ZmF0X2RlbnRyeV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHZmYXRfZGVudHJ5X29wcyA9IHsKIAkuZF9yZXZhbGlkYXRlCT0gdmZhdF9yZXZhbGlkYXRlLAogCS5kX2hhc2gJCT0gdmZhdF9oYXNoLAogCS5kX2NvbXBhcmUJPSB2ZmF0X2NtcCwKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IGJkMjE1Y2MuLmQ4NjVjYTY2IDEwMDY0NAotLS0gYS9mcy9mY250bC5jCisrKyBiL2ZzL2ZjbnRsLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNkZWZpbmUgU0VURkxfTUFTSyAoT19BUFBFTkQgfCBPX05PTkJMT0NLIHwgT19OREVMQVkgfCBGQVNZTkMgfCBPX0RJUkVDVCB8IE9fTk9BVElNRSkKKyNkZWZpbmUgU0VURkxfTUFTSyAoT19BUFBFTkQgfCBPX05PTkJMT0NLIHwgT19OREVMQVkgfCBPX0RJUkVDVCB8IE9fTk9BVElNRSkKIAogc3RhdGljIGludCBzZXRmbChpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlscCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0xNzcsMjEgKzE3NywyMSBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAkvKgotCSAqIFdlIHN0aWxsIG5lZWQgYSBsb2NrIGhlcmUgZm9yIG5vdyB0byBrZWVwIG11bHRpcGxlIEZBU1lOQyBjYWxscwotCSAqIGZyb20gcmFjaW5nIHdpdGggZWFjaCBvdGhlci4KKwkgKiAtPmZhc3luYygpIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZSBGQVNZTkMgYml0LgogCSAqLwotCWxvY2tfa2VybmVsKCk7Ci0JaWYgKChhcmcgXiBmaWxwLT5mX2ZsYWdzKSAmIEZBU1lOQykgewotCQlpZiAoZmlscC0+Zl9vcCAmJiBmaWxwLT5mX29wLT5mYXN5bmMpIHsKLQkJCWVycm9yID0gZmlscC0+Zl9vcC0+ZmFzeW5jKGZkLCBmaWxwLCAoYXJnICYgRkFTWU5DKSAhPSAwKTsKLQkJCWlmIChlcnJvciA8IDApCi0JCQkJZ290byBvdXQ7Ci0JCX0KKwlpZiAoKChhcmcgXiBmaWxwLT5mX2ZsYWdzKSAmIEZBU1lOQykgJiYgZmlscC0+Zl9vcCAmJgorCQkJZmlscC0+Zl9vcC0+ZmFzeW5jKSB7CisJCWVycm9yID0gZmlscC0+Zl9vcC0+ZmFzeW5jKGZkLCBmaWxwLCAoYXJnICYgRkFTWU5DKSAhPSAwKTsKKwkJaWYgKGVycm9yIDwgMCkKKwkJCWdvdG8gb3V0OworCQlpZiAoZXJyb3IgPiAwKQorCQkJZXJyb3IgPSAwOwogCX0KLQorCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKIAlmaWxwLT5mX2ZsYWdzID0gKGFyZyAmIFNFVEZMX01BU0spIHwgKGZpbHAtPmZfZmxhZ3MgJiB+U0VURkxfTUFTSyk7CisJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CisKICBvdXQ6Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNTE2LDcgKzUxNiw3IEBACiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmZhc3luY19jYWNoZSBfX3JlYWRfbW9zdGx5OwogCiAvKgotICogZmFzeW5jX2hlbHBlcigpIGlzIHVzZWQgYnkgc29tZSBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlcnMgKG1haW5seSBtaWNlKQorICogZmFzeW5jX2hlbHBlcigpIGlzIHVzZWQgYnkgYWxtb3N0IGFsbCBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlcnMKICAqIHRvIHNldCB1cCB0aGUgZmFzeW5jIHF1ZXVlLiBJdCByZXR1cm5zIG5lZ2F0aXZlIG9uIGVycm9yLCAwIGlmIGl0IGRpZAogICogbm8gY2hhbmdlcyBhbmQgcG9zaXRpdmUgaWYgaXQgYWRkZWQvZGVsZXRlZCB0aGUgZW50cnkuCiAgKi8KQEAgLTU1NSw2ICs1NTUsMTMgQEAKIAkJcmVzdWx0ID0gMTsKIAl9CiBvdXQ6CisJLyogRml4IHVwIEZBU1lOQyBiaXQgd2hpbGUgc3RpbGwgaG9sZGluZyBmYXN5bmNfbG9jayAqLworCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKKwlpZiAob24pCisJCWZpbHAtPmZfZmxhZ3MgfD0gRkFTWU5DOworCWVsc2UKKwkJZmlscC0+Zl9mbGFncyAmPSB+RkFTWU5DOworCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwogCXdyaXRlX3VubG9ja19pcnEoJmZhc3luY19sb2NrKTsKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IGJiZWVhYzYuLmI3NGE4ZTEgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvZXZlbnRwb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgpAQCAtMTI3LDYgKzEyOCw3IEBACiAJYXRvbWljX2xvbmdfc2V0KCZmLT5mX2NvdW50LCAxKTsKIAlyd2xvY2tfaW5pdCgmZi0+Zl9vd25lci5sb2NrKTsKIAlmLT5mX2NyZWQgPSBnZXRfY3JlZChjcmVkKTsKKwlzcGluX2xvY2tfaW5pdCgmZi0+Zl9sb2NrKTsKIAlldmVudHBvbGxfaW5pdF9maWxlKGYpOwogCS8qIGYtPmZfdmVyc2lvbjogMCAqLwogCXJldHVybiBmOwpAQCAtMjc5LDYgKzI4MSw3IEBACiAJaWYgKGZpbGUtPmZfb3AgJiYgZmlsZS0+Zl9vcC0+cmVsZWFzZSkKIAkJZmlsZS0+Zl9vcC0+cmVsZWFzZShpbm9kZSwgZmlsZSk7CiAJc2VjdXJpdHlfZmlsZV9mcmVlKGZpbGUpOworCWltYV9maWxlX2ZyZWUoZmlsZSk7CiAJaWYgKHVubGlrZWx5KFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkgJiYgaW5vZGUtPmlfY2RldiAhPSBOVUxMKSkKIAkJY2Rldl9wdXQoaW5vZGUtPmlfY2Rldik7CiAJZm9wc19wdXQoZmlsZS0+Zl9vcCk7CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCBmZGZmMzQ2Li4wNmRhMDUyIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogCXJldHVybiAhbm9kZWlkIHx8IG5vZGVpZCA9PSBGVVNFX1JPT1RfSUQ7CiB9CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBmdXNlX2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGZ1c2VfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfcmV2YWxpZGF0ZQk9IGZ1c2VfZGVudHJ5X3JldmFsaWRhdGUsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaAppbmRleCA1ZTY0YjgxLi42ZmM1YWVkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Z1c2VfaS5oCisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmgKQEAgLTQ5Myw3ICs0OTMsNyBAQAogLyoqIERldmljZSBvcGVyYXRpb25zICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdXNlX2Rldl9vcGVyYXRpb25zOwogCi1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGZ1c2VfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGZ1c2VfZGVudHJ5X29wZXJhdGlvbnM7CiAKIC8qKgogICogR2V0IGEgZmlsbGVkIGluIGlub2RlCmRpZmYgLS1naXQgYS9mcy9nZnMyL0tjb25maWcgYi9mcy9nZnMyL0tjb25maWcKaW5kZXggZTU2M2E2NC4uM2E5ODFiNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9LY29uZmlnCisrKyBiL2ZzL2dmczIvS2NvbmZpZwpAQCAtMSw2ICsxLDEwIEBACiBjb25maWcgR0ZTMl9GUwogCXRyaXN0YXRlICJHRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgKDY0QklUIHx8IExCRCkKKwlzZWxlY3QgRExNIGlmIEdGUzJfRlNfTE9DS0lOR19ETE0KKwlzZWxlY3QgQ09ORklHRlNfRlMgaWYgR0ZTMl9GU19MT0NLSU5HX0RMTQorCXNlbGVjdCBTWVNGUyBpZiBHRlMyX0ZTX0xPQ0tJTkdfRExNCisJc2VsZWN0IElQX1NDVFAgaWYgRExNX1NDVFAKIAlzZWxlY3QgRlNfUE9TSVhfQUNMCiAJc2VsZWN0IENSQzMyCiAJaGVscApAQCAtMTgsMTcgKzIyLDE2IEBACiAJICB0aGUgbG9ja2luZyBtb2R1bGUgYmVsb3cuIERvY3VtZW50YXRpb24gYW5kIHV0aWxpdGllcyBmb3IgR0ZTMiBjYW4KIAkgIGJlIGZvdW5kIGhlcmU6IGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vY2x1c3RlcgogCi0JICBUaGUgIm5vbG9jayIgbG9jayBtb2R1bGUgaXMgbm93IGJ1aWx0IGluIHRvIEdGUzIgYnkgZGVmYXVsdC4KKwkgIFRoZSAibm9sb2NrIiBsb2NrIG1vZHVsZSBpcyBub3cgYnVpbHQgaW4gdG8gR0ZTMiBieSBkZWZhdWx0LiBJZgorCSAgeW91IHdhbnQgdG8gdXNlIHRoZSBETE0sIGJlIHN1cmUgdG8gZW5hYmxlIEhPVFBMVUcgYW5kIElQdjQvNgorCSAgbmV0d29ya2luZy4KIAogY29uZmlnIEdGUzJfRlNfTE9DS0lOR19ETE0KLQl0cmlzdGF0ZSAiR0ZTMiBETE0gbG9ja2luZyBtb2R1bGUiCi0JZGVwZW5kcyBvbiBHRlMyX0ZTICYmIFNZU0ZTICYmIE5FVCAmJiBJTkVUICYmIChJUFY2IHx8IElQVjY9bikKLQlzZWxlY3QgSVBfU0NUUCBpZiBETE1fU0NUUAotCXNlbGVjdCBDT05GSUdGU19GUwotCXNlbGVjdCBETE0KKwlib29sICJHRlMyIERMTSBsb2NraW5nIgorCWRlcGVuZHMgb24gKEdGUzJfRlMhPW4pICYmIE5FVCAmJiBJTkVUICYmIChJUFY2IHx8IElQVjY9bikgJiYgSE9UUExVRwogCWhlbHAKIAkgIE11bHRpcGxlIG5vZGUgbG9ja2luZyBtb2R1bGUgZm9yIEdGUzIKIAotCSAgTW9zdCB1c2VycyBvZiBHRlMyIHdpbGwgcmVxdWlyZSB0aGlzIG1vZHVsZS4gSXQgcHJvdmlkZXMgdGhlIGxvY2tpbmcKKwkgIE1vc3QgdXNlcnMgb2YgR0ZTMiB3aWxsIHJlcXVpcmUgdGhpcy4gSXQgcHJvdmlkZXMgdGhlIGxvY2tpbmcKIAkgIGludGVyZmFjZSBiZXR3ZWVuIEdGUzIgYW5kIHRoZSBETE0sIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHVzZSBHRlMyCiAJICBpbiBhIGNsdXN0ZXIgZW52aXJvbm1lbnQuCmRpZmYgLS1naXQgYS9mcy9nZnMyL01ha2VmaWxlIGIvZnMvZ2ZzMi9NYWtlZmlsZQppbmRleCBjMWI0ZWM2YS4uYTg1MWVhNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9NYWtlZmlsZQorKysgYi9mcy9nZnMyL01ha2VmaWxlCkBAIC0xLDkgKzEsOSBAQAogb2JqLSQoQ09ORklHX0dGUzJfRlMpICs9IGdmczIubwogZ2ZzMi15IDo9IGFjbC5vIGJtYXAubyBkaXIubyBlYW9wcy5vIGVhdHRyLm8gZ2xvY2subyBcCi0JZ2xvcHMubyBpbm9kZS5vIGxvZy5vIGxvcHMubyBsb2NraW5nLm8gbWFpbi5vIG1ldGFfaW8ubyBcCisJZ2xvcHMubyBpbm9kZS5vIGxvZy5vIGxvcHMubyBtYWluLm8gbWV0YV9pby5vIFwKIAltb3VudC5vIG9wc19hZGRyZXNzLm8gb3BzX2RlbnRyeS5vIG9wc19leHBvcnQubyBvcHNfZmlsZS5vIFwKIAlvcHNfZnN0eXBlLm8gb3BzX2lub2RlLm8gb3BzX3N1cGVyLm8gcXVvdGEubyBcCiAJcmVjb3ZlcnkubyByZ3JwLm8gc3VwZXIubyBzeXMubyB0cmFucy5vIHV0aWwubwogCi1vYmotJChDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTSkgKz0gbG9ja2luZy9kbG0vCitnZnMyLSQoQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0pICs9IGxvY2tfZGxtLm8KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9hY2wuYyBiL2ZzL2dmczIvYWNsLmMKaW5kZXggZTMzNWRjZS4uNDM3NjRmNCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9hY2wuYworKysgYi9mcy9nZnMyL2FjbC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+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+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgpAQCAtNDQyLDYgKzQ0MSw3IEBACiAJICovCiAJaWYgKHVubGlrZWx5KHBhZ2UtPmluZGV4KSkgewogCQl6ZXJvX3VzZXIocGFnZSwgMCwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEwOTYsNiArMTA5Niw3IEBACiAJLnJlbGVhc2VwYWdlID0gZ2ZzMl9yZWxlYXNlcGFnZSwKIAkuZGlyZWN0X0lPID0gZ2ZzMl9kaXJlY3RfSU8sCiAJLm1pZ3JhdGVwYWdlID0gYnVmZmVyX21pZ3JhdGVfcGFnZSwKKwkuaXNfcGFydGlhbGx5X3VwdG9kYXRlID0gYmxvY2tfaXNfcGFydGlhbGx5X3VwdG9kYXRlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZ2ZzMl9vcmRlcmVkX2FvcHMgPSB7CkBAIC0xMTExLDYgKzExMTIsNyBAQAogCS5yZWxlYXNlcGFnZSA9IGdmczJfcmVsZWFzZXBhZ2UsCiAJLmRpcmVjdF9JTyA9IGdmczJfZGlyZWN0X0lPLAogCS5taWdyYXRlcGFnZSA9IGJ1ZmZlcl9taWdyYXRlX3BhZ2UsCisJLmlzX3BhcnRpYWxseV91cHRvZGF0ZSA9IGJsb2NrX2lzX3BhcnRpYWxseV91cHRvZGF0ZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGdmczJfamRhdGFfYW9wcyA9IHsKQEAgLTExMjUsNiArMTEyNyw3IEBACiAJLmJtYXAgPSBnZnMyX2JtYXAsCiAJLmludmFsaWRhdGVwYWdlID0gZ2ZzMl9pbnZhbGlkYXRlcGFnZSwKIAkucmVsZWFzZXBhZ2UgPSBnZnMyX3JlbGVhc2VwYWdlLAorCS5pc19wYXJ0aWFsbHlfdXB0b2RhdGUgPSBibG9ja19pc19wYXJ0aWFsbHlfdXB0b2RhdGUsCiB9OwogCiB2b2lkIGdmczJfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSkKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2RlbnRyeS5jIGIvZnMvZ2ZzMi9vcHNfZGVudHJ5LmMKaW5kZXggYzJhZDM2My4uMDIyYzY2YyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZGVudHJ5LmMKKysrIGIvZnMvZ2ZzMi9vcHNfZGVudHJ5LmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTEwOCw3ICsxMDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZ2ZzMl9kb3BzID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGdmczJfZG9wcyA9IHsKIAkuZF9yZXZhbGlkYXRlID0gZ2ZzMl9kcmV2YWxpZGF0ZSwKIAkuZF9oYXNoID0gZ2ZzMl9kaGFzaCwKIH07CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19leHBvcnQuYyBiL2ZzL2dmczIvb3BzX2V4cG9ydC5jCmluZGV4IDdmZGViMTQuLjkyMDBlZjIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2V4cG9ydC5jCisrKyBiL2ZzL2dmczIvb3BzX2V4cG9ydC5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19maWxlLmMgYi9mcy9nZnMyL29wc19maWxlLmMKaW5kZXggOTNmZTQxYi4uM2I5ZThkZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZmlsZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZpbGUuYwpAQCAtMjAsOSArMjAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZGxtLmg+CisjaW5jbHVkZSA8bGludXgvZGxtX3Bsb2NrLmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0zNTQsNyArMzU1LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAorCXNldF9iaXQoR0xGX0RJUlRZLCAmaXAtPmlfZ2wtPmdsX2ZsYWdzKTsKIAlzZXRfYml0KEdJRl9TV19QQUdFRCwgJmlwLT5pX2ZsYWdzKTsKKwogCXJldCA9IGdmczJfd3JpdGVfYWxsb2NfcmVxdWlyZWQoaXAsIHBvcywgUEFHRV9DQUNIRV9TSVpFLCAmYWxsb2NfcmVxdWlyZWQpOwogCWlmIChyZXQgfHwgIWFsbG9jX3JlcXVpcmVkKQogCQlnb3RvIG91dF91bmxvY2s7CkBAIC01NjAsNTcgKzU2MywyNCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTQorCiAvKioKICAqIGdmczJfc2V0bGVhc2UgLSBhY3F1aXJlL3JlbGVhc2UgYSBmaWxlIGxlYXNlCiAgKiBAZmlsZTogdGhlIGZpbGUgcG9pbnRlcgogICogQGFyZzogbGVhc2UgdHlwZQogICogQGZsOiBmaWxlIGxvY2sKICAqCisgKiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBlbmZvcmNlIGEgbGVhc2UgYWNyb3NzIHRoZSB3aG9sZQorICogY2x1c3RlcjsgdW50aWwgd2UgZG8sIGRpc2FibGUgbGVhc2VzIChieSBqdXN0IHJldHVybmluZyAtRUlOVkFMKSwKKyAqIHVubGVzcyB0aGUgYWRtaW5pc3RyYXRvciBoYXMgcmVxdWVzdGVkIHB1cmVseSBsb2NhbCBsb2NraW5nLgorICoKICAqIFJldHVybnM6IGVycm5vCiAgKi8KIAogc3RhdGljIGludCBnZnMyX3NldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxlLCBsb25nIGFyZywgc3RydWN0IGZpbGVfbG9jayAqKmZsKQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gR0ZTMl9TQihmaWxlLT5mX21hcHBpbmctPmhvc3QpOwotCi0JLyoKLQkgKiBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBlbmZvcmNlIGEgbGVhc2UgYWNyb3NzIHRoZSB3aG9sZQotCSAqIGNsdXN0ZXI7IHVudGlsIHdlIGRvLCBkaXNhYmxlIGxlYXNlcyAoYnkganVzdCByZXR1cm5pbmcgLUVJTlZBTCksCi0JICogdW5sZXNzIHRoZSBhZG1pbmlzdHJhdG9yIGhhcyByZXF1ZXN0ZWQgcHVyZWx5IGxvY2FsIGxvY2tpbmcuCi0JICovCi0JaWYgKCFzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBnZW5lcmljX3NldGxlYXNlKGZpbGUsIGFyZywgZmwpOwotfQotCi1zdGF0aWMgaW50IGdmczJfbG1fcGxvY2tfZ2V0KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wbG9ja19nZXQoCi0JCQkJc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2xvY2tzcGFjZSwgbmFtZSwgZmlsZSwgZmwpOwotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBnZnMyX2xtX3Bsb2NrKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCSAgc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQotewotCWludCBlcnJvciA9IC1FSU87Ci0JaWYgKGxpa2VseSghdGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQotCQllcnJvciA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3Bsb2NrKAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGZpbGUsIGNtZCwgZmwpOwotCXJldHVybiBlcnJvcjsKLX0KLQotc3RhdGljIGludCBnZnMyX2xtX3B1bmxvY2soc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKLXsKLQlpbnQgZXJyb3IgPSAtRUlPOwotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZXJyb3IgPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9wdW5sb2NrKAotCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UsIG5hbWUsIGZpbGUsIGZsKTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qKgpAQCAtNjI2LDkgKzU5Niw3IEBACiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGZpbGUtPmZfbWFwcGluZy0+aG9zdCk7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGZpbGUtPmZfbWFwcGluZy0+aG9zdCk7Ci0Jc3RydWN0IGxtX2xvY2tuYW1lIG5hbWUgPQotCQl7IC5sbl9udW1iZXIgPSBpcC0+aV9ub19hZGRyLAotCQkgIC5sbl90eXBlID0gTE1fVFlQRV9QTE9DSyB9OworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CiAKIAlpZiAoIShmbC0+ZmxfZmxhZ3MgJiBGTF9QT1NJWCkpCiAJCXJldHVybiAtRU5PTENLOwpAQCAtNjQwLDEyICs2MDgsMTQgQEAKIAkJY21kID0gRl9TRVRMSzsKIAkJZmwtPmZsX3R5cGUgPSBGX1VOTENLOwogCX0KKwlpZiAodW5saWtlbHkodGVzdF9iaXQoU0RGX1NIVVRET1dOLCAmc2RwLT5zZF9mbGFncykpKQorCQlyZXR1cm4gLUVJTzsKIAlpZiAoSVNfR0VUTEsoY21kKSkKLQkJcmV0dXJuIGdmczJfbG1fcGxvY2tfZ2V0KHNkcCwgJm5hbWUsIGZpbGUsIGZsKTsKKwkJcmV0dXJuIGRsbV9wb3NpeF9nZXQobHMtPmxzX2RsbSwgaXAtPmlfbm9fYWRkciwgZmlsZSwgZmwpOwogCWVsc2UgaWYgKGZsLT5mbF90eXBlID09IEZfVU5MQ0spCi0JCXJldHVybiBnZnMyX2xtX3B1bmxvY2soc2RwLCAmbmFtZSwgZmlsZSwgZmwpOworCQlyZXR1cm4gZGxtX3Bvc2l4X3VubG9jayhscy0+bHNfZGxtLCBpcC0+aV9ub19hZGRyLCBmaWxlLCBmbCk7CiAJZWxzZQotCQlyZXR1cm4gZ2ZzMl9sbV9wbG9jayhzZHAsICZuYW1lLCBmaWxlLCBjbWQsIGZsKTsKKwkJcmV0dXJuIGRsbV9wb3NpeF9sb2NrKGxzLT5sc19kbG0sIGlwLT5pX25vX2FkZHIsIGZpbGUsIGNtZCwgZmwpOwogfQogCiBzdGF0aWMgaW50IGRvX2Zsb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgY21kLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKQEAgLTczMiw3ICs3MDIsNyBAQAogCX0KIH0KIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2ZpbGVfZm9wcyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZmlsZV9mb3BzID0gJihjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKXsKIAkubGxzZWVrCQk9IGdmczJfbGxzZWVrLAogCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCkBAIC03NTAsNyArNzIwLDcgQEAKIAkuc2V0bGVhc2UJPSBnZnMyX3NldGxlYXNlLAogfTsKIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9mb3BzID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZ2ZzMl9kaXJfZm9wcyA9ICYoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyl7CiAJLnJlYWRkaXIJPSBnZnMyX3JlYWRkaXIsCiAJLnVubG9ja2VkX2lvY3RsCT0gZ2ZzMl9pb2N0bCwKIAkub3BlbgkJPSBnZnMyX29wZW4sCkBAIC03NjAsNyArNzMwLDkgQEAKIAkuZmxvY2sJCT0gZ2ZzMl9mbG9jaywKIH07CiAKLWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2ZzMl9maWxlX2ZvcHNfbm9sb2NrID0geworI2VuZGlmIC8qIENPTkZJR19HRlMyX0ZTX0xPQ0tJTkdfRExNICovCisKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZmlsZV9mb3BzX25vbG9jayA9ICYoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyl7CiAJLmxsc2VlawkJPSBnZnMyX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCiAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLApAQCAtNzczLDEwICs3NDUsMTAgQEAKIAkuZnN5bmMJCT0gZ2ZzMl9mc3luYywKIAkuc3BsaWNlX3JlYWQJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCiAJLnNwbGljZV93cml0ZQk9IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUsCi0JLnNldGxlYXNlCT0gZ2ZzMl9zZXRsZWFzZSwKKwkuc2V0bGVhc2UJPSBnZW5lcmljX3NldGxlYXNlLAogfTsKIAotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZnMyX2Rpcl9mb3BzX25vbG9jayA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmdmczJfZGlyX2ZvcHNfbm9sb2NrID0gJihjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zKXsKIAkucmVhZGRpcgk9IGdmczJfcmVhZGRpciwKIAkudW5sb2NrZWRfaW9jdGwJPSBnZnMyX2lvY3RsLAogCS5vcGVuCQk9IGdmczJfb3BlbiwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKaW5kZXggZjkxZWViZC4uNTE4ODNiMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfZnN0eXBlLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTI1LDcgKzI0LDYgQEAKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgImdsb3BzLmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKLSNpbmNsdWRlICJtb3VudC5oIgogI2luY2x1ZGUgInJlY292ZXJ5LmgiCiAjaW5jbHVkZSAicmdycC5oIgogI2luY2x1ZGUgInN1cGVyLmgiCkBAIC02NCw3ICs2Miw2IEBACiAJZ3QtPmd0X3F1b3RhX3dhcm5fcGVyaW9kID0gMTA7CiAJZ3QtPmd0X3F1b3RhX3NjYWxlX251bSA9IDE7CiAJZ3QtPmd0X3F1b3RhX3NjYWxlX2RlbiA9IDE7Ci0JZ3QtPmd0X3F1b3RhX2NhY2hlX3NlY3MgPSAzMDA7CiAJZ3QtPmd0X3F1b3RhX3F1YW50dW0gPSA2MDsKIAlndC0+Z3RfbmV3X2ZpbGVzX2pkYXRhID0gMDsKIAlndC0+Z3RfbWF4X3JlYWRhaGVhZCA9IDEgPDwgMTg7CkBAIC0xMDAsNyArOTcsNiBAQAogCW11dGV4X2luaXQoJnNkcC0+c2RfamluZGV4X211dGV4KTsKIAogCUlOSVRfTElTVF9IRUFEKCZzZHAtPnNkX3F1b3RhX2xpc3QpOwotCXNwaW5fbG9ja19pbml0KCZzZHAtPnNkX3F1b3RhX3NwaW4pOwogCW11dGV4X2luaXQoJnNkcC0+c2RfcXVvdGFfbXV0ZXgpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNkcC0+c2RfcXVvdGFfd2FpdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnNkcC0+c2RfdHJ1bmNfbGlzdCk7CkBAIC0yMzgsNiArMjM0LDcgQEAKIAogCW1lbWNweShzYi0+c2JfbG9ja3Byb3RvLCBzdHItPnNiX2xvY2twcm90bywgR0ZTMl9MT0NLTkFNRV9MRU4pOwogCW1lbWNweShzYi0+c2JfbG9ja3RhYmxlLCBzdHItPnNiX2xvY2t0YWJsZSwgR0ZTMl9MT0NLTkFNRV9MRU4pOworCW1lbWNweShzYi0+c2JfdXVpZCwgc3RyLT5zYl91dWlkLCAxNik7CiB9CiAKIC8qKgpAQCAtMjk5LDE1ICsyOTYsMTUgQEAKIAlfX2ZyZWVfcGFnZShwYWdlKTsKIAlyZXR1cm4gMDsKIH0KKwogLyoqCiAgKiBnZnMyX3JlYWRfc2IgLSBSZWFkIHN1cGVyIGJsb2NrCiAgKiBAc2RwOiBUaGUgR0ZTMiBzdXBlcmJsb2NrCi0gKiBAZ2w6IHRoZSBnbG9jayBmb3IgdGhlIHN1cGVyYmxvY2sgKGFzc3VtZWQgdG8gYmUgaGVsZCkKICAqIEBzaWxlbnQ6IERvbid0IHByaW50IG1lc3NhZ2UgaWYgbW91bnQgZmFpbHMKICAqCiAgKi8KIAotc3RhdGljIGludCBnZnMyX3JlYWRfc2Ioc3RydWN0IGdmczJfc2JkICpzZHAsIHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IHNpbGVudCkKK3N0YXRpYyBpbnQgZ2ZzMl9yZWFkX3NiKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBpbnQgc2lsZW50KQogewogCXUzMiBoYXNoX2Jsb2NrcywgaW5kX2Jsb2NrcywgbGVhZl9ibG9ja3M7CiAJdTMyIHRtcF9ibG9ja3M7CkBAIC01MjcsNyArNTI0LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBnZnMyX3JlYWRfc2Ioc2RwLCBzYl9naC5naF9nbCwgc2lsZW50KTsKKwlyZXQgPSBnZnMyX3JlYWRfc2Ioc2RwLCBzaWxlbnQpOwogCWlmIChyZXQpIHsKIAkJZnNfZXJyKHNkcCwgImNhbid0IHJlYWQgc3VwZXJibG9jazogJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwpAQCAtNjMwLDEzICs2MjcsMTMgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGdmczJfbG1fb3RoZXJzX21heV9tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKK3N0YXRpYyB2b2lkIGdmczJfb3RoZXJzX21heV9tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCkKIHsKLQlpZiAoIXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX290aGVyc19tYXlfbW91bnQpCi0JCXJldHVybjsKLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX290aGVyc19tYXlfbW91bnQoCi0JCQkJCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19sb2Nrc3BhY2UpOworCWNoYXIgKm1lc3NhZ2UgPSAiRklSU1RNT1VOVD1Eb25lIjsKKwljaGFyICplbnZwW10gPSB7IG1lc3NhZ2UsIE5VTEwgfTsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCWxzLT5sc19maXJzdF9kb25lID0gMTsKKwlrb2JqZWN0X3VldmVudF9lbnYoJnNkcC0+c2Rfa29iaiwgS09CSl9DSEFOR0UsIGVudnApOwogfQogCiAvKioKQEAgLTc5Niw3ICs3OTMsNyBAQAogCQkJfQogCQl9CiAKLQkJZ2ZzMl9sbV9vdGhlcnNfbWF5X21vdW50KHNkcCk7CisJCWdmczJfb3RoZXJzX21heV9tb3VudChzZHApOwogCX0gZWxzZSBpZiAoIXNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpIHsKIAkJZXJyb3IgPSBnZnMyX3JlY292ZXJfam91cm5hbChzZHAtPnNkX2pkZXNjKTsKIAkJaWYgKGVycm9yKSB7CkBAIC0xMDA1LDcgKzEwMDIsNiBAQAogCQlnb3RvIGZhaWxfcXVvdGFkOwogCiAJc2RwLT5zZF9sb2dfZmx1c2hfdGltZSA9IGppZmZpZXM7Ci0Jc2RwLT5zZF9qaW5kZXhfcmVmcmVzaF90aW1lID0gamlmZmllczsKIAogCXAgPSBrdGhyZWFkX3J1bihnZnMyX2xvZ2QsIHNkcCwgImdmczJfbG9nZCIpOwogCWVycm9yID0gSVNfRVJSKHApOwpAQCAtMTAzMyw2ICsxMDI5LDE3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCitzdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCBub2xvY2tfdG9rZW5zID0geworCXsgT3B0X2ppZCwgImppZD0lZFxuIiwgfSwKKwl7IE9wdF9lcnIsIE5VTEwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyBub2xvY2tfb3BzID0geworCS5sbV9wcm90b19uYW1lID0gImxvY2tfbm9sb2NrIiwKKwkubG1fcHV0X2xvY2sgPSBrbWVtX2NhY2hlX2ZyZWUsCisJLmxtX3Rva2VucyA9ICZub2xvY2tfdG9rZW5zLAorfTsKKwogLyoqCiAgKiBnZnMyX2xtX21vdW50IC0gbW91bnQgYSBsb2NraW5nIHByb3RvY29sCiAgKiBAc2RwOiB0aGUgZmlsZXN5c3RlbQpAQCAtMTA0NCwzMSArMTA1MSw3MyBAQAogCiBzdGF0aWMgaW50IGdmczJfbG1fbW91bnQoc3RydWN0IGdmczJfc2JkICpzZHAsIGludCBzaWxlbnQpCiB7Ci0JY2hhciAqcHJvdG8gPSBzZHAtPnNkX3Byb3RvX25hbWU7Ci0JY2hhciAqdGFibGUgPSBzZHAtPnNkX3RhYmxlX25hbWU7Ci0JaW50IGZsYWdzID0gTE1fTUZMQUdfQ09OVl9OT0RST1A7Ci0JaW50IGVycm9yOworCWNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpsbTsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXN0cnVjdCBnZnMyX2FyZ3MgKmFyZ3MgPSAmc2RwLT5zZF9hcmdzOworCWNvbnN0IGNoYXIgKnByb3RvID0gc2RwLT5zZF9wcm90b19uYW1lOworCWNvbnN0IGNoYXIgKnRhYmxlID0gc2RwLT5zZF90YWJsZV9uYW1lOworCWNvbnN0IGNoYXIgKmZzbmFtZTsKKwljaGFyICpvLCAqb3B0aW9uczsKKwlpbnQgcmV0OwogCi0JaWYgKHNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCi0JCWZsYWdzIHw9IExNX01GTEFHX1NQRUNUQVRPUjsKKwlpZiAoIXN0cmNtcCgibG9ja19ub2xvY2siLCBwcm90bykpIHsKKwkJbG0gPSAmbm9sb2NrX29wczsKKwkJc2RwLT5zZF9hcmdzLmFyX2xvY2FsZmxvY2tzID0gMTsKKwkJc2RwLT5zZF9hcmdzLmFyX2xvY2FsY2FjaGluZyA9IDE7CisjaWZkZWYgQ09ORklHX0dGUzJfRlNfTE9DS0lOR19ETE0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoImxvY2tfZGxtIiwgcHJvdG8pKSB7CisJCWxtID0gJmdmczJfZGxtX29wczsKKyNlbmRpZgorCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gIkdGUzI6IGNhbid0IGZpbmQgcHJvdG9jb2wgJXNcbiIsIHByb3RvKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQogCiAJZnNfaW5mbyhzZHAsICJUcnlpbmcgdG8gam9pbiBjbHVzdGVyIFwiJXNcIiwgXCIlc1wiXG4iLCBwcm90bywgdGFibGUpOwogCi0JZXJyb3IgPSBnZnMyX21vdW50X2xvY2twcm90byhwcm90bywgdGFibGUsIHNkcC0+c2RfYXJncy5hcl9ob3N0ZGF0YSwKLQkJCQkgICAgIGdmczJfZ2xvY2tfY2IsIHNkcCwKLQkJCQkgICAgIEdGUzJfTUlOX0xWQl9TSVpFLCBmbGFncywKLQkJCQkgICAgICZzZHAtPnNkX2xvY2tzdHJ1Y3QsICZzZHAtPnNkX2tvYmopOwotCWlmIChlcnJvcikgewotCQlmc19pbmZvKHNkcCwgImNhbid0IG1vdW50IHByb3RvPSVzLCB0YWJsZT0lcywgaG9zdGRhdGE9JXNcbiIsCi0JCQlwcm90bywgdGFibGUsIHNkcC0+c2RfYXJncy5hcl9ob3N0ZGF0YSk7Ci0JCWdvdG8gb3V0OwotCX0KKwlscy0+bHNfb3BzID0gbG07CisJbHMtPmxzX2ZpcnN0ID0gMTsKKwlscy0+bHNfaWQgPSAwOwogCi0JaWYgKGdmczJfYXNzZXJ0X3dhcm4oc2RwLCBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzKSB8fAotCSAgICBnZnMyX2Fzc2VydF93YXJuKHNkcCwgc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2x2Yl9zaXplID49Ci0JCQkJICBHRlMyX01JTl9MVkJfU0laRSkpIHsKLQkJZ2ZzMl91bm1vdW50X2xvY2twcm90bygmc2RwLT5zZF9sb2Nrc3RydWN0KTsKLQkJZ290byBvdXQ7CisJZm9yIChvcHRpb25zID0gYXJncy0+YXJfaG9zdGRhdGE7IChvID0gc3Ryc2VwKCZvcHRpb25zLCAiOiIpKTsgKSB7CisJCXN1YnN0cmluZ190IHRtcFtNQVhfT1BUX0FSR1NdOworCQlpbnQgdG9rZW4sIG9wdGlvbjsKKworCQlpZiAoIW8gfHwgISpvKQorCQkJY29udGludWU7CisKKwkJdG9rZW4gPSBtYXRjaF90b2tlbihvLCAqbG0tPmxtX3Rva2VucywgdG1wKTsKKwkJc3dpdGNoICh0b2tlbikgeworCQljYXNlIE9wdF9qaWQ6CisJCQlyZXQgPSBtYXRjaF9pbnQoJnRtcFswXSwgJm9wdGlvbik7CisJCQlpZiAocmV0IHx8IG9wdGlvbiA8IDApIAorCQkJCWdvdG8gaG9zdGRhdGFfZXJyb3I7CisJCQlscy0+bHNfamlkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2lkOgorCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGhvc3RkYXRhX2Vycm9yOworCQkJbHMtPmxzX2lkID0gb3B0aW9uOworCQkJYnJlYWs7CisJCWNhc2UgT3B0X2ZpcnN0OgorCQkJcmV0ID0gbWF0Y2hfaW50KCZ0bXBbMF0sICZvcHRpb24pOworCQkJaWYgKHJldCB8fCAob3B0aW9uICE9IDAgJiYgb3B0aW9uICE9IDEpKQorCQkJCWdvdG8gaG9zdGRhdGFfZXJyb3I7CisJCQlscy0+bHNfZmlyc3QgPSBvcHRpb247CisJCQlicmVhazsKKwkJY2FzZSBPcHRfbm9kaXI6CisJCQlyZXQgPSBtYXRjaF9pbnQoJnRtcFswXSwgJm9wdGlvbik7CisJCQlpZiAocmV0IHx8IChvcHRpb24gIT0gMCAmJiBvcHRpb24gIT0gMSkpCisJCQkJZ290byBob3N0ZGF0YV9lcnJvcjsKKwkJCWxzLT5sc19ub2RpciA9IG9wdGlvbjsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9lcnI6CisJCWRlZmF1bHQ6Citob3N0ZGF0YV9lcnJvcjoKKwkJCWZzX2luZm8oc2RwLCAidW5rbm93biBob3N0ZGF0YSAoJXMpXG4iLCBvKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCiAJaWYgKHNkcC0+c2RfYXJncy5hcl9zcGVjdGF0b3IpCkBAIC0xMDc3LDIyICsxMTI2LDI1IEBACiAJCXNucHJpbnRmKHNkcC0+c2RfZnNuYW1lLCBHRlMyX0ZTTkFNRV9MRU4sICIlcy4ldSIsIHRhYmxlLAogCQkJIHNkcC0+c2RfbG9ja3N0cnVjdC5sc19qaWQpOwogCi0JZnNfaW5mbyhzZHAsICJKb2luZWQgY2x1c3Rlci4gTm93IG1vdW50aW5nIEZTLi4uXG4iKTsKLQotCWlmICgoc2RwLT5zZF9sb2Nrc3RydWN0LmxzX2ZsYWdzICYgTE1fTFNGTEFHX0xPQ0FMKSAmJgotCSAgICAhc2RwLT5zZF9hcmdzLmFyX2lnbm9yZV9sb2NhbF9mcykgewotCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxmbG9ja3MgPSAxOwotCQlzZHAtPnNkX2FyZ3MuYXJfbG9jYWxjYWNoaW5nID0gMTsKKwlmc25hbWUgPSBzdHJjaHIodGFibGUsICc6Jyk7CisJaWYgKGZzbmFtZSkKKwkJZnNuYW1lKys7CisJaWYgKGxtLT5sbV9tb3VudCA9PSBOVUxMKSB7CisJCWZzX2luZm8oc2RwLCAiTm93IG1vdW50aW5nIEZTLi4uXG4iKTsKKwkJcmV0dXJuIDA7CiAJfQotCi1vdXQ6Ci0JcmV0dXJuIGVycm9yOworCXJldCA9IGxtLT5sbV9tb3VudChzZHAsIGZzbmFtZSk7CisJaWYgKHJldCA9PSAwKQorCQlmc19pbmZvKHNkcCwgIkpvaW5lZCBjbHVzdGVyLiBOb3cgbW91bnRpbmcgRlMuLi5cbiIpOworCXJldHVybiByZXQ7CiB9CiAKIHZvaWQgZ2ZzMl9sbV91bm1vdW50KHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewotCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSkKLQkJZ2ZzMl91bm1vdW50X2xvY2twcm90bygmc2RwLT5zZF9sb2Nrc3RydWN0KTsKKwljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbG0gPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzOworCWlmIChsaWtlbHkoIXRlc3RfYml0KFNERl9TSFVURE9XTiwgJnNkcC0+c2RfZmxhZ3MpKSAmJgorCSAgICBsbS0+bG1fdW5tb3VudCkKKwkJbG0tPmxtX3VubW91bnQoc2RwKTsKIH0KIAogLyoqCkBAIC0xMTE2LDEyICsxMTY4LDIwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgKGNoYXIgKilkYXRhLCAwKTsKKwlzZHAtPnNkX2FyZ3MuYXJfcXVvdGEgPSBHRlMyX1FVT1RBX0RFRkFVTFQ7CisJc2RwLT5zZF9hcmdzLmFyX2RhdGEgPSBHRlMyX0RBVEFfREVGQVVMVDsKKworCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgJnNkcC0+c2RfYXJncywgZGF0YSk7CiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkdGUzI6IGNhbid0IHBhcnNlIG1vdW50IGFyZ3VtZW50c1xuIik7CiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3NwZWN0YXRvcikKKyAgICAgICAgICAgICAgICBzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7CisJaWYgKHNkcC0+c2RfYXJncy5hcl9wb3NpeF9hY2wpCisJCXNiLT5zX2ZsYWdzIHw9IE1TX1BPU0lYQUNMOworCiAJc2ItPnNfbWFnaWMgPSBHRlMyX01BR0lDOwogCXNiLT5zX29wID0gJmdmczJfc3VwZXJfb3BzOwogCXNiLT5zX2V4cG9ydF9vcCA9ICZnZnMyX2V4cG9ydF9vcHM7CkBAIC0xMTk5LDYgKzEyNTksOCBAQAogCQlkcHV0KHNkcC0+c2Rfcm9vdF9kaXIpOwogCWlmIChzZHAtPnNkX21hc3Rlcl9kaXIpCiAJCWRwdXQoc2RwLT5zZF9tYXN0ZXJfZGlyKTsKKwlpZiAoc2ItPnNfcm9vdCkKKwkJZHB1dChzYi0+c19yb290KTsKIAlzYi0+c19yb290ID0gTlVMTDsKIGZhaWxfbG9ja2luZzoKIAlpbml0X2xvY2tpbmcoc2RwLCAmbW91bnRfZ2gsIFVORE8pOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYyBiL2ZzL2dmczIvb3BzX2lub2RlLmMKaW5kZXggNDk4Nzc1NC4uYWJkNTQyOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9vcHNfaW5vZGUuYworKysgYi9mcy9nZnMyL29wc19pbm9kZS5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpZW1hcC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX3N1cGVyLmMgYi9mcy9nZnMyL29wc19zdXBlci5jCmluZGV4IDMyMDMyM2QuLjQ1ODAxOTUgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9vcHNfc3VwZXIuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTI3LDcgKzI2LDYgQEAKICNpbmNsdWRlICJnbG9jay5oIgogI2luY2x1ZGUgImlub2RlLmgiCiAjaW5jbHVkZSAibG9nLmgiCi0jaW5jbHVkZSAibW91bnQuaCIKICNpbmNsdWRlICJxdW90YS5oIgogI2luY2x1ZGUgInJlY292ZXJ5LmgiCiAjaW5jbHVkZSAicmdycC5oIgpAQCAtNDAsNiArMzgsOCBAQAogI2luY2x1ZGUgImJtYXAuaCIKICNpbmNsdWRlICJtZXRhX2lvLmgiCiAKKyNkZWZpbmUgYXJnc19uZXEoYTEsIGEyLCB4KSAoKGExKS0+YXJfIyN4ICE9IChhMiktPmFyXyMjeCkKKwogLyoqCiAgKiBnZnMyX3dyaXRlX2lub2RlIC0gTWFrZSBzdXJlIHRoZSBpbm9kZSBpcyBzdGFibGUgb24gdGhlIGRpc2sKICAqIEBpbm9kZTogVGhlIGlub2RlCkBAIC00MzUsMjUgKzQzNSw0NSBAQAogc3RhdGljIGludCBnZnMyX3JlbW91bnRfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87CisJc3RydWN0IGdmczJfYXJncyBhcmdzID0gc2RwLT5zZF9hcmdzOyAvKiBEZWZhdWx0IHRvIGN1cnJlbnQgc2V0dGluZ3MgKi8KIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IGdmczJfbW91bnRfYXJncyhzZHAsIGRhdGEsIDEpOworCWVycm9yID0gZ2ZzMl9tb3VudF9hcmdzKHNkcCwgJmFyZ3MsIGRhdGEpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCisJLyogTm90IGFsbG93ZWQgdG8gY2hhbmdlIGxvY2tpbmcgZGV0YWlscyAqLworCWlmIChzdHJjbXAoYXJncy5hcl9sb2NrcHJvdG8sIHNkcC0+c2RfYXJncy5hcl9sb2NrcHJvdG8pIHx8CisJICAgIHN0cmNtcChhcmdzLmFyX2xvY2t0YWJsZSwgc2RwLT5zZF9hcmdzLmFyX2xvY2t0YWJsZSkgfHwKKwkgICAgc3RyY21wKGFyZ3MuYXJfaG9zdGRhdGEsIHNkcC0+c2RfYXJncy5hcl9ob3N0ZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU29tZSBmbGFncyBtdXN0IG5vdCBiZSBjaGFuZ2VkICovCisJaWYgKGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBzcGVjdGF0b3IpIHx8CisJICAgIGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBpZ25vcmVfbG9jYWxfZnMpIHx8CisJICAgIGFyZ3NfbmVxKCZhcmdzLCAmc2RwLT5zZF9hcmdzLCBsb2NhbGZsb2NrcykgfHwKKwkgICAgYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIGxvY2FsY2FjaGluZykgfHwKKwkgICAgYXJnc19uZXEoJmFyZ3MsICZzZHAtPnNkX2FyZ3MsIG1ldGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChzZHAtPnNkX2FyZ3MuYXJfc3BlY3RhdG9yKQogCQkqZmxhZ3MgfD0gTVNfUkRPTkxZOwotCWVsc2UgewotCQlpZiAoKmZsYWdzICYgTVNfUkRPTkxZKSB7Ci0JCQlpZiAoIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpCi0JCQkJZXJyb3IgPSBnZnMyX21ha2VfZnNfcm8oc2RwKTsKLQkJfSBlbHNlIGlmICghKCpmbGFncyAmIE1TX1JET05MWSkgJiYKLQkJCSAgIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKKworCWlmICgoc2ItPnNfZmxhZ3MgXiAqZmxhZ3MpICYgTVNfUkRPTkxZKSB7CisJCWlmICgqZmxhZ3MgJiBNU19SRE9OTFkpCisJCQllcnJvciA9IGdmczJfbWFrZV9mc19ybyhzZHApOworCQllbHNlCiAJCQllcnJvciA9IGdmczJfbWFrZV9mc19ydyhzZHApOwotCQl9CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKIAl9CiAKLQlyZXR1cm4gZXJyb3I7CisJc2RwLT5zZF9hcmdzID0gYXJnczsKKwlpZiAoc2RwLT5zZF9hcmdzLmFyX3Bvc2l4X2FjbCkKKwkJc2ItPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CisJZWxzZQorCQlzYi0+c19mbGFncyAmPSB+TVNfUE9TSVhBQ0w7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNTg4LDYgKzYwOCw4IEBACiAJCX0KIAkJc2VxX3ByaW50ZihzLCAiLGRhdGE9JXMiLCBzdGF0ZSk7CiAJfQorCWlmIChhcmdzLT5hcl9kaXNjYXJkKQorCQlzZXFfcHJpbnRmKHMsICIsZGlzY2FyZCIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmMgYi9mcy9nZnMyL3F1b3RhLmMKaW5kZXggYjA4ZDA5Ni4uOGQ1M2Y2NiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5jCisrKyBiL2ZzL2dmczIvcXVvdGEuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KLSNpbmNsdWRlIDxsaW51eC9sbV9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogCkBAIC04MCw2ICs3OSw1MSBAQAogCXUzMiBxY19pZDsKIH07CiAKK3N0YXRpYyBMSVNUX0hFQUQocWRfbHJ1X2xpc3QpOworc3RhdGljIGF0b21pY190IHFkX2xydV9jb3VudCA9IEFUT01JQ19JTklUKDApOworc3RhdGljIHNwaW5sb2NrX3QgcWRfbHJ1X2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisKK2ludCBnZnMyX3Nocmlua19xZF9tZW1vcnkoaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZDsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcDsKKworCWlmIChuciA9PSAwKQorCQlnb3RvIG91dDsKKworCWlmICghKGdmcF9tYXNrICYgX19HRlBfRlMpKQorCQlyZXR1cm4gLTE7CisKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKKwl3aGlsZSAobnIgJiYgIWxpc3RfZW1wdHkoJnFkX2xydV9saXN0KSkgeworCQlxZCA9IGxpc3RfZW50cnkocWRfbHJ1X2xpc3QubmV4dCwKKwkJCQlzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhLCBxZF9yZWNsYWltKTsKKwkJc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7CisKKwkJLyogRnJlZSBmcm9tIHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIGxpc3QgKi8KKwkJbGlzdF9kZWwoJnFkLT5xZF9saXN0KTsKKworCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9jaGFuZ2UpOworCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9zbG90X2NvdW50KTsKKwkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfYmhfY291bnQpOworCisJCWdmczJfZ2xvY2tfcHV0KHFkLT5xZF9nbCk7CisJCWF0b21pY19kZWMoJnNkcC0+c2RfcXVvdGFfY291bnQpOworCisJCS8qIERlbGV0ZSBpdCBmcm9tIHRoZSBjb21tb24gcmVjbGFpbSBsaXN0ICovCisJCWxpc3RfZGVsX2luaXQoJnFkLT5xZF9yZWNsYWltKTsKKwkJYXRvbWljX2RlYygmcWRfbHJ1X2NvdW50KTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKKwkJa21lbV9jYWNoZV9mcmVlKGdmczJfcXVvdGFkX2NhY2hlcCwgcWQpOworCQlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKKwkJbnItLTsKKwl9CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKKworb3V0OgorCXJldHVybiAoYXRvbWljX3JlYWQoJnFkX2xydV9jb3VudCkgKiBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlKSAvIDEwMDsKK30KKwogc3RhdGljIHU2NCBxZDJvZmZzZXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCiB7CiAJdTY0IG9mZnNldDsKQEAgLTEwMCwyMiArMTQ0LDE4IEBACiAJaWYgKCFxZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlxZC0+cWRfY291bnQgPSAxOworCWF0b21pY19zZXQoJnFkLT5xZF9jb3VudCwgMSk7CiAJcWQtPnFkX2lkID0gaWQ7CiAJaWYgKHVzZXIpCiAJCXNldF9iaXQoUURGX1VTRVIsICZxZC0+cWRfZmxhZ3MpOwogCXFkLT5xZF9zbG90ID0gLTE7CisJSU5JVF9MSVNUX0hFQUQoJnFkLT5xZF9yZWNsYWltKTsKIAogCWVycm9yID0gZ2ZzMl9nbG9ja19nZXQoc2RwLCAyICogKHU2NClpZCArICF1c2VyLAogCQkJICAgICAgJmdmczJfcXVvdGFfZ2xvcHMsIENSRUFURSwgJnFkLT5xZF9nbCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGZhaWw7CiAKLQllcnJvciA9IGdmczJfbHZiX2hvbGQocWQtPnFkX2dsKTsKLQlnZnMyX2dsb2NrX3B1dChxZC0+cWRfZ2wpOwotCWlmIChlcnJvcikKLQkJZ290byBmYWlsOwotCiAJKnFkcCA9IHFkOwogCiAJcmV0dXJuIDA7CkBAIC0xMzUsMTEgKzE3NSwxNyBAQAogCiAJZm9yICg7OykgewogCQlmb3VuZCA9IDA7Ci0JCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocWQsICZzZHAtPnNkX3F1b3RhX2xpc3QsIHFkX2xpc3QpIHsKIAkJCWlmIChxZC0+cWRfaWQgPT0gaWQgJiYKIAkJCSAgICAhdGVzdF9iaXQoUURGX1VTRVIsICZxZC0+cWRfZmxhZ3MpID09ICF1c2VyKSB7Ci0JCQkJcWQtPnFkX2NvdW50Kys7CisJCQkJaWYgKCFhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSAmJgorCQkJCSAgICAhbGlzdF9lbXB0eSgmcWQtPnFkX3JlY2xhaW0pKSB7CisJCQkJCS8qIFJlbW92ZSBpdCBmcm9tIHJlY2xhaW0gbGlzdCAqLworCQkJCQlsaXN0X2RlbF9pbml0KCZxZC0+cWRfcmVjbGFpbSk7CisJCQkJCWF0b21pY19kZWMoJnFkX2xydV9jb3VudCk7CisJCQkJfQorCQkJCWF0b21pY19pbmMoJnFkLT5xZF9jb3VudCk7CiAJCQkJZm91bmQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTU1LDExICsyMDEsMTEgQEAKIAkJCW5ld19xZCA9IE5VTEw7CiAJCX0KIAotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCQlpZiAocWQgfHwgIWNyZWF0ZSkgewogCQkJaWYgKG5ld19xZCkgewotCQkJCWdmczJfbHZiX3VuaG9sZChuZXdfcWQtPnFkX2dsKTsKKwkJCQlnZnMyX2dsb2NrX3B1dChuZXdfcWQtPnFkX2dsKTsKIAkJCQlrbWVtX2NhY2hlX2ZyZWUoZ2ZzMl9xdW90YWRfY2FjaGVwLCBuZXdfcWQpOwogCQkJfQogCQkJKnFkcCA9IHFkOwpAQCAtMTc1LDIxICsyMjEsMTggQEAKIHN0YXRpYyB2b2lkIHFkX2hvbGQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKLQotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKLQlnZnMyX2Fzc2VydChzZHAsIHFkLT5xZF9jb3VudCk7Ci0JcWQtPnFkX2NvdW50Kys7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJZ2ZzMl9hc3NlcnQoc2RwLCBhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSk7CisJYXRvbWljX2luYygmcWQtPnFkX2NvdW50KTsKIH0KIAogc3RhdGljIHZvaWQgcWRfcHV0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQogewotCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gcWQtPnFkX2dsLT5nbF9zYmQ7Ci0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOwotCWdmczJfYXNzZXJ0KHNkcCwgcWQtPnFkX2NvdW50KTsKLQlpZiAoIS0tcWQtPnFkX2NvdW50KQotCQlxZC0+cWRfbGFzdF90b3VjaGVkID0gamlmZmllczsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmcWQtPnFkX2NvdW50LCAmcWRfbHJ1X2xvY2spKSB7CisJCS8qIEFkZCB0byB0aGUgcmVjbGFpbSBsaXN0ICovCisJCWxpc3RfYWRkX3RhaWwoJnFkLT5xZF9yZWNsYWltLCAmcWRfbHJ1X2xpc3QpOworCQlhdG9taWNfaW5jKCZxZF9scnVfY291bnQpOworCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOworCX0KIH0KIAogc3RhdGljIGludCBzbG90X2dldChzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhICpxZCkKQEAgLTE5OCwxMCArMjQxLDEwIEBACiAJdW5zaWduZWQgaW50IGMsIG8gPSAwLCBiOwogCXVuc2lnbmVkIGNoYXIgYnl0ZSA9IDA7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlpZiAocWQtPnFkX3Nsb3RfY291bnQrKykgewotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMjUsMTMgKzI2OCwxMyBAQAogCiAJc2RwLT5zZF9xdW90YV9iaXRtYXBbY11bb10gfD0gMSA8PCBiOwogCi0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCXJldHVybiAwOwogCiBmYWlsOgogCXFkLT5xZF9zbG90X2NvdW50LS07Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAlyZXR1cm4gLUVOT1NQQzsKIH0KIApAQCAtMjM5LDIzICsyODIsMjMgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHFkLT5xZF9nbC0+Z2xfc2JkOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCWdmczJfYXNzZXJ0KHNkcCwgcWQtPnFkX3Nsb3RfY291bnQpOwogCXFkLT5xZF9zbG90X2NvdW50Kys7Ci0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgc2xvdF9wdXQoc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQpCiB7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBxZC0+cWRfZ2wtPmdsX3NiZDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAlnZnMyX2Fzc2VydChzZHAsIHFkLT5xZF9zbG90X2NvdW50KTsKIAlpZiAoIS0tcWQtPnFkX3Nsb3RfY291bnQpIHsKIAkJZ2ZzMl9pY2JpdF9tdW5nZShzZHAsIHNkcC0+c2RfcXVvdGFfYml0bWFwLCBxZC0+cWRfc2xvdCwgMCk7CiAJCXFkLT5xZF9zbG90ID0gLTE7CiAJfQotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgYmhfZ2V0KHN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkKQpAQCAtMzMwLDcgKzM3Myw3IEBACiAJaWYgKHNkcC0+c2RfdmZzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogCQlyZXR1cm4gMDsKIAotCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX2xvY2soJnFkX2xydV9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocWQsICZzZHAtPnNkX3F1b3RhX2xpc3QsIHFkX2xpc3QpIHsKIAkJaWYgKHRlc3RfYml0KFFERl9MT0NLRUQsICZxZC0+cWRfZmxhZ3MpIHx8CkBAIC0zNDEsOCArMzg0LDggQEAKIAkJbGlzdF9tb3ZlX3RhaWwoJnFkLT5xZF9saXN0LCAmc2RwLT5zZF9xdW90YV9saXN0KTsKIAogCQlzZXRfYml0KFFERl9MT0NLRUQsICZxZC0+cWRfZmxhZ3MpOwotCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgcWQtPnFkX2NvdW50KTsKLQkJcWQtPnFkX2NvdW50Kys7CisJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSk7CisJCWF0b21pY19pbmMoJnFkLT5xZF9jb3VudCk7CiAJCXFkLT5xZF9jaGFuZ2Vfc3luYyA9IHFkLT5xZF9jaGFuZ2U7CiAJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfc2xvdF9jb3VudCk7CiAJCXFkLT5xZF9zbG90X2NvdW50Kys7CkBAIC0zNTQsNyArMzk3LDcgQEAKIAlpZiAoIWZvdW5kKQogCQlxZCA9IE5VTEw7CiAKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJaWYgKHFkKSB7CiAJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfY2hhbmdlX3N5bmMpOwpAQCAtMzc5LDI0ICs0MjIsMjQgQEAKIAlpZiAoc2RwLT5zZF92ZnMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCiAJaWYgKHRlc3RfYml0KFFERl9MT0NLRUQsICZxZC0+cWRfZmxhZ3MpIHx8CiAJICAgICF0ZXN0X2JpdChRREZfQ0hBTkdFLCAmcWQtPnFkX2ZsYWdzKSkgewotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJbGlzdF9tb3ZlX3RhaWwoJnFkLT5xZF9saXN0LCAmc2RwLT5zZF9xdW90YV9saXN0KTsKIAogCXNldF9iaXQoUURGX0xPQ0tFRCwgJnFkLT5xZF9mbGFncyk7Ci0JZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9jb3VudCk7Ci0JcWQtPnFkX2NvdW50Kys7CisJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIGF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpKTsKKwlhdG9taWNfaW5jKCZxZC0+cWRfY291bnQpOwogCXFkLT5xZF9jaGFuZ2Vfc3luYyA9IHFkLT5xZF9jaGFuZ2U7CiAJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9zbG90X2NvdW50KTsKIAlxZC0+cWRfc2xvdF9jb3VudCsrOwogCi0Jc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCBxZC0+cWRfY2hhbmdlX3N5bmMpOwogCWlmIChiaF9nZXQocWQpKSB7CkBAIC01NTYsOSArNTk5LDkgQEAKIAl4ID0gYmU2NF90b19jcHUocWMtPnFjX2NoYW5nZSkgKyBjaGFuZ2U7CiAJcWMtPnFjX2NoYW5nZSA9IGNwdV90b19iZTY0KHgpOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCXFkLT5xZF9jaGFuZ2UgPSB4OwotCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fdW5sb2NrKCZxZF9scnVfbG9jayk7CiAKIAlpZiAoIXgpIHsKIAkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHRlc3RfYml0KFFERl9DSEFOR0UsICZxZC0+cWRfZmxhZ3MpKTsKQEAgLTgwMiw4ICs4NDUsOCBAQAogCQlsb2ZmX3QgcG9zOwogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdChxX2doKTsKIAkJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQocWQtPnFkX2dsLAotCQkJCQkgIExNX1NUX0VYQ0xVU0lWRSwgR0xfTk9DQUNIRSwKLQkJCQkJICBxX2doKTsKKwkJCQkJICAgTE1fU1RfRVhDTFVTSVZFLCBHTF9OT0NBQ0hFLAorCQkJCQkgICBxX2doKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCkBAIC04MjAsNyArODYzLDYgQEAKIAogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaV9naCk7CiAKLQogCQlnZnMyX3F1b3RhX2luKCZxLCBidWYpOwogCQlxbHZiID0gKHN0cnVjdCBnZnMyX3F1b3RhX2x2YiAqKXFkLT5xZF9nbC0+Z2xfbHZiOwogCQlxbHZiLT5xYl9tYWdpYyA9IGNwdV90b19iZTMyKEdGUzJfTUFHSUMpOwpAQCAtODkwLDkgKzkzMiw5IEBACiAJaWYgKCFxZC0+cWRfcWIucWJfbGltaXQpCiAJCXJldHVybiAwOwogCi0Jc3Bpbl9sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCXZhbHVlID0gcWQtPnFkX2NoYW5nZTsKLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJc3Bpbl9sb2NrKCZndC0+Z3Rfc3Bpbik7CiAJbnVtID0gZ3QtPmd0X3F1b3RhX3NjYWxlX251bTsKQEAgLTk4NSw5ICsxMDI3LDkgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXZhbHVlID0gKHM2NCliZTY0X3RvX2NwdShxZC0+cWRfcWIucWJfdmFsdWUpOwotCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCQl2YWx1ZSArPSBxZC0+cWRfY2hhbmdlOwotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCQlpZiAoYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX2xpbWl0KSAmJiAoczY0KWJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl9saW1pdCkgPCB2YWx1ZSkgewogCQkJcHJpbnRfbWVzc2FnZShxZCwgImV4Y2VlZGVkIik7CkBAIC0xMTcxLDEzICsxMjEzLDEyIEBACiAJCQlxZC0+cWRfY2hhbmdlID0gcWMucWNfY2hhbmdlOwogCQkJcWQtPnFkX3Nsb3QgPSBzbG90OwogCQkJcWQtPnFkX3Nsb3RfY291bnQgPSAxOwotCQkJcWQtPnFkX2xhc3RfdG91Y2hlZCA9IGppZmZpZXM7CiAKLQkJCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCQkJZ2ZzMl9pY2JpdF9tdW5nZShzZHAsIHNkcC0+c2RfcXVvdGFfYml0bWFwLCBzbG90LCAxKTsKIAkJCWxpc3RfYWRkKCZxZC0+cWRfbGlzdCwgJnNkcC0+c2RfcXVvdGFfbGlzdCk7CiAJCQlhdG9taWNfaW5jKCZzZHAtPnNkX3F1b3RhX2NvdW50KTsKLQkJCXNwaW5fdW5sb2NrKCZzZHAtPnNkX3F1b3RhX3NwaW4pOworCQkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAogCQkJZm91bmQrKzsKIAkJfQpAQCAtMTE5Nyw3MyArMTIzOCw0OCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgZ2ZzMl9xdW90YV9zY2FuKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQotewotCXN0cnVjdCBnZnMyX3F1b3RhX2RhdGEgKnFkLCAqc2FmZTsKLQlMSVNUX0hFQUQoZGVhZCk7Ci0KLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHFkLCBzYWZlLCAmc2RwLT5zZF9xdW90YV9saXN0LCBxZF9saXN0KSB7Ci0JCWlmICghcWQtPnFkX2NvdW50ICYmCi0JCSAgICB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHFkLT5xZF9sYXN0X3RvdWNoZWQgKwotCQkJICAgICAgICBnZnMyX3R1bmVfZ2V0KHNkcCwgZ3RfcXVvdGFfY2FjaGVfc2VjcykgKiBIWikpIHsKLQkJCWxpc3RfbW92ZSgmcWQtPnFkX2xpc3QsICZkZWFkKTsKLQkJCWdmczJfYXNzZXJ0X3dhcm4oc2RwLAotCQkJCQkgYXRvbWljX3JlYWQoJnNkcC0+c2RfcXVvdGFfY291bnQpID4gMCk7Ci0JCQlhdG9taWNfZGVjKCZzZHAtPnNkX3F1b3RhX2NvdW50KTsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKLQotCXdoaWxlICghbGlzdF9lbXB0eSgmZGVhZCkpIHsKLQkJcWQgPSBsaXN0X2VudHJ5KGRlYWQubmV4dCwgc3RydWN0IGdmczJfcXVvdGFfZGF0YSwgcWRfbGlzdCk7Ci0JCWxpc3RfZGVsKCZxZC0+cWRfbGlzdCk7Ci0KLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfY2hhbmdlKTsKLQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfc2xvdF9jb3VudCk7Ci0JCWdmczJfYXNzZXJ0X3dhcm4oc2RwLCAhcWQtPnFkX2JoX2NvdW50KTsKLQotCQlnZnMyX2x2Yl91bmhvbGQocWQtPnFkX2dsKTsKLQkJa21lbV9jYWNoZV9mcmVlKGdmczJfcXVvdGFkX2NhY2hlcCwgcWQpOwotCX0KLX0KLQogdm9pZCBnZnMyX3F1b3RhX2NsZWFudXAoc3RydWN0IGdmczJfc2JkICpzZHApCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZzZHAtPnNkX3F1b3RhX2xpc3Q7CiAJc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQ7CiAJdW5zaWduZWQgaW50IHg7CiAKLQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJc3Bpbl9sb2NrKCZxZF9scnVfbG9jayk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CiAJCXFkID0gbGlzdF9lbnRyeShoZWFkLT5wcmV2LCBzdHJ1Y3QgZ2ZzMl9xdW90YV9kYXRhLCBxZF9saXN0KTsKIAotCQlpZiAocWQtPnFkX2NvdW50ID4gMSB8fAotCQkgICAgKHFkLT5xZF9jb3VudCAmJiAhdGVzdF9iaXQoUURGX0NIQU5HRSwgJnFkLT5xZF9mbGFncykpKSB7CisJCWlmIChhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSA+IDEgfHwKKwkJICAgIChhdG9taWNfcmVhZCgmcWQtPnFkX2NvdW50KSAmJgorCQkgICAgICF0ZXN0X2JpdChRREZfQ0hBTkdFLCAmcWQtPnFkX2ZsYWdzKSkpIHsKIAkJCWxpc3RfbW92ZSgmcWQtPnFkX2xpc3QsIGhlYWQpOwotCQkJc3Bpbl91bmxvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCQlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCQkJc2NoZWR1bGUoKTsKLQkJCXNwaW5fbG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCQkJY29udGludWU7CiAJCX0KIAogCQlsaXN0X2RlbCgmcWQtPnFkX2xpc3QpOworCQkvKiBBbHNvIHJlbW92ZSBpZiB0aGlzIHFkIGV4aXN0cyBpbiB0aGUgcmVjbGFpbSBsaXN0ICovCisJCWlmICghbGlzdF9lbXB0eSgmcWQtPnFkX3JlY2xhaW0pKSB7CisJCQlsaXN0X2RlbF9pbml0KCZxZC0+cWRfcmVjbGFpbSk7CisJCQlhdG9taWNfZGVjKCZxZF9scnVfY291bnQpOworCQl9CiAJCWF0b21pY19kZWMoJnNkcC0+c2RfcXVvdGFfY291bnQpOwotCQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwkJc3Bpbl91bmxvY2soJnFkX2xydV9sb2NrKTsKIAotCQlpZiAoIXFkLT5xZF9jb3VudCkgeworCQlpZiAoIWF0b21pY19yZWFkKCZxZC0+cWRfY291bnQpKSB7CiAJCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9jaGFuZ2UpOwogCQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFxZC0+cWRfc2xvdF9jb3VudCk7CiAJCX0gZWxzZQogCQkJZ2ZzMl9hc3NlcnRfd2FybihzZHAsIHFkLT5xZF9zbG90X2NvdW50ID09IDEpOwogCQlnZnMyX2Fzc2VydF93YXJuKHNkcCwgIXFkLT5xZF9iaF9jb3VudCk7CiAKLQkJZ2ZzMl9sdmJfdW5ob2xkKHFkLT5xZF9nbCk7CisJCWdmczJfZ2xvY2tfcHV0KHFkLT5xZF9nbCk7CiAJCWttZW1fY2FjaGVfZnJlZShnZnMyX3F1b3RhZF9jYWNoZXAsIHFkKTsKIAotCQlzcGluX2xvY2soJnNkcC0+c2RfcXVvdGFfc3Bpbik7CisJCXNwaW5fbG9jaygmcWRfbHJ1X2xvY2spOwogCX0KLQlzcGluX3VubG9jaygmc2RwLT5zZF9xdW90YV9zcGluKTsKKwlzcGluX3VubG9jaygmcWRfbHJ1X2xvY2spOwogCiAJZ2ZzMl9hc3NlcnRfd2FybihzZHAsICFhdG9taWNfcmVhZCgmc2RwLT5zZF9xdW90YV9jb3VudCkpOwogCkBAIC0xMzQxLDkgKzEzNTcsNiBAQAogCQlxdW90YWRfY2hlY2tfdGltZW8oc2RwLCAic3luYyIsIGdmczJfcXVvdGFfc3luYywgdCwKIAkJCQkgICAmcXVvdGFkX3RpbWVvLCAmdHVuZS0+Z3RfcXVvdGFfcXVhbnR1bSk7CiAKLQkJLyogRklYTUU6IFRoaXMgc2hvdWxkIGJlIHR1cm5lZCBpbnRvIGEgc2hyaW5rZXIgKi8KLQkJZ2ZzMl9xdW90YV9zY2FuKHNkcCk7Ci0KIAkJLyogQ2hlY2sgZm9yICYgcmVjb3ZlciBwYXJ0aWFsbHkgdHJ1bmNhdGVkIGlub2RlcyAqLwogCQlxdW90YWRfY2hlY2tfdHJ1bmNfbGlzdChzZHApOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmggYi9mcy9nZnMyL3F1b3RhLmgKaW5kZXggY2VjOTAzMi4uMGZhNWZhNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5oCisrKyBiL2ZzL2dmczIvcXVvdGEuaApAQCAtNDksNCArNDksNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2V4dGVybiBpbnQgZ2ZzMl9zaHJpbmtfcWRfbWVtb3J5KGludCBuciwgZ2ZwX3QgZ2ZwX21hc2spOworCiAjZW5kaWYgLyogX19RVU9UQV9ET1RfSF9fICovCmRpZmYgLS1naXQgYS9mcy9nZnMyL3JlY292ZXJ5LmMgYi9mcy9nZnMyL3JlY292ZXJ5LmMKaW5kZXggZWZkMDljMy4uMjQ3ZThmNyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZWNvdmVyeS5jCisrKyBiL2ZzL2dmczIvcmVjb3ZlcnkuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAKQEAgLTQyNywyMCArNDI2LDIzIEBACiB9CiAKIAotc3RhdGljIHZvaWQgZ2ZzMl9sbV9yZWNvdmVyeV9kb25lKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1bnNpZ25lZCBpbnQgamlkLAotCQkJCSAgdW5zaWduZWQgaW50IG1lc3NhZ2UpCitzdGF0aWMgdm9pZCBnZnMyX3JlY292ZXJ5X2RvbmUoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1lc3NhZ2UpCiB7Ci0JaWYgKCFzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfb3BzLT5sbV9yZWNvdmVyeV9kb25lKQotCQlyZXR1cm47Ci0KLQlpZiAobGlrZWx5KCF0ZXN0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkpCi0JCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3JlY292ZXJ5X2RvbmUoCi0JCQlzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfbG9ja3NwYWNlLCBqaWQsIG1lc3NhZ2UpOworCWNoYXIgZW52X2ppZFsyMF07CisJY2hhciBlbnZfc3RhdHVzWzIwXTsKKwljaGFyICplbnZwW10gPSB7IGVudl9qaWQsIGVudl9zdGF0dXMsIE5VTEwgfTsKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworICAgICAgICBscy0+bHNfcmVjb3Zlcl9qaWRfZG9uZSA9IGppZDsKKyAgICAgICAgbHMtPmxzX3JlY292ZXJfamlkX3N0YXR1cyA9IG1lc3NhZ2U7CisJc3ByaW50ZihlbnZfamlkLCAiSklEPSVkIiwgamlkKTsKKwlzcHJpbnRmKGVudl9zdGF0dXMsICJSRUNPVkVSWT0lcyIsCisJCW1lc3NhZ2UgPT0gTE1fUkRfU1VDQ0VTUyA/ICJEb25lIiA6ICJGYWlsZWQiKTsKKyAgICAgICAga29iamVjdF91ZXZlbnRfZW52KCZzZHAtPnNkX2tvYmosIEtPQkpfQ0hBTkdFLCBlbnZwKTsKIH0KIAotCiAvKioKLSAqIGdmczJfcmVjb3Zlcl9qb3VybmFsIC0gcmVjb3ZlcnkgYSBnaXZlbiBqb3VybmFsCisgKiBnZnMyX3JlY292ZXJfam91cm5hbCAtIHJlY292ZXIgYSBnaXZlbiBqb3VybmFsCiAgKiBAamQ6IHRoZSBzdHJ1Y3QgZ2ZzMl9qZGVzYyBkZXNjcmliaW5nIHRoZSBqb3VybmFsCiAgKgogICogQWNxdWlyZSB0aGUgam91cm5hbCdzIGxvY2ssIGNoZWNrIHRvIHNlZSBpZiB0aGUgam91cm5hbCBpcyBjbGVhbiwgYW5kCkBAIC01NjEsNyArNTYzLDcgQEAKIAlpZiAoamQtPmpkX2ppZCAhPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkKQogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmamlfZ2gpOwogCi0JZ2ZzMl9sbV9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfU1VDQ0VTUyk7CisJZ2ZzMl9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfU1VDQ0VTUyk7CiAKIAlpZiAoamQtPmpkX2ppZCAhPSBzZHAtPnNkX2xvY2tzdHJ1Y3QubHNfamlkKQogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmal9naCk7CkBAIC01ODEsNyArNTgzLDcgQEAKIAlmc19pbmZvKHNkcCwgImppZD0ldTogJXNcbiIsIGpkLT5qZF9qaWQsIChlcnJvcikgPyAiRmFpbGVkIiA6ICJEb25lIik7CiAKIGZhaWw6Ci0JZ2ZzMl9sbV9yZWNvdmVyeV9kb25lKHNkcCwgamQtPmpkX2ppZCwgTE1fUkRfR0FWRVVQKTsKKwlnZnMyX3JlY292ZXJ5X2RvbmUoc2RwLCBqZC0+amRfamlkLCBMTV9SRF9HQVZFVVApOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZ3JwLmMgYi9mcy9nZnMyL3JncnAuYwppbmRleCA4YjAxYzYzLi5mMDNkMDI0IDEwMDY0NAotLS0gYS9mcy9nZnMyL3JncnAuYworKysgYi9mcy9nZnMyL3JncnAuYwpAQCAtMTMsOCArMTMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAKICNpbmNsdWRlICJnZnMyLmgiCiAjaW5jbHVkZSAiaW5jb3JlLmgiCkBAIC0xMzIsODEgKzEzMiw5MCBAQAogfQogCiAvKioKKyAqIGdmczJfYml0X3NlYXJjaAorICogQHB0cjogUG9pbnRlciB0byBiaXRtYXAgZGF0YQorICogQG1hc2s6IE1hc2sgdG8gdXNlIChub3JtYWxseSAweDU1NTU1Li4uLiBidXQgYWRqdXN0ZWQgZm9yIHNlYXJjaCBzdGFydCkKKyAqIEBzdGF0ZTogVGhlIHN0YXRlIHdlIGFyZSBzZWFyY2hpbmcgZm9yCisgKgorICogV2UgeG9yIHRoZSBiaXRtYXAgZGF0YSB3aXRoIGEgcGF0dGVyIHdoaWNoIGlzIHRoZSBiaXR3aXNlIG9wcG9zaXRlCisgKiBvZiB3aGF0IHdlIGFyZSBsb29raW5nIGZvciwgdGhpcyBnaXZlcyByaXNlIHRvIGEgcGF0dGVybiBvZiBvbmVzCisgKiB3aGVyZXZlciB0aGVyZSBpcyBhIG1hdGNoLiBTaW5jZSB3ZSBoYXZlIHR3byBiaXRzIHBlciBlbnRyeSwgd2UKKyAqIHRha2UgdGhpcyBwYXR0ZXJuLCBzaGlmdCBpdCBkb3duIGJ5IG9uZSBwbGFjZSBhbmQgdGhlbiBhbmQgaXQgd2l0aAorICogdGhlIG9yaWdpbmFsLiBBbGwgdGhlIGV2ZW4gYml0IHBvc2l0aW9ucyAoMCwyLDQsIGV0YykgdGhlbiByZXByZXNlbnQKKyAqIHN1Y2Nlc3NmdWwgbWF0Y2hlcywgc28gd2UgbWFzayB3aXRoIDB4NTU1NTUuLi4uLiB0byByZW1vdmUgdGhlIHVud2FudGVkCisgKiBvZGQgYml0IHBvc2l0aW9ucy4KKyAqCisgKiBUaGlzIGFsbG93cyBzZWFyY2hpbmcgb2YgYSB3aG9sZSB1NjQgYXQgb25jZSAoMzIgYmxvY2tzKSB3aXRoIGEKKyAqIHNpbmdsZSB0ZXN0IChvbiA2NCBiaXQgYXJjaGVzKS4KKyAqLworCitzdGF0aWMgaW5saW5lIHU2NCBnZnMyX2JpdF9zZWFyY2goY29uc3QgX19sZTY0ICpwdHIsIHU2NCBtYXNrLCB1OCBzdGF0ZSkKK3sKKwl1NjQgdG1wOworCXN0YXRpYyBjb25zdCB1NjQgc2VhcmNoW10gPSB7CisJCVswXSA9IDB4ZmZmZmZmZmZmZmZmZmZmZlVMTCwKKwkJWzFdID0gMHhhYWFhYWFhYWFhYWFhYWFhVUxMLAorCQlbMl0gPSAweDU1NTU1NTU1NTU1NTU1NTVVTEwsCisJCVszXSA9IDB4MDAwMDAwMDAwMDAwMDAwMFVMTCwKKwl9OworCXRtcCA9IGxlNjRfdG9fY3B1KCpwdHIpIF4gc2VhcmNoW3N0YXRlXTsKKwl0bXAgJj0gKHRtcCA+PiAxKTsKKwl0bXAgJj0gbWFzazsKKwlyZXR1cm4gdG1wOworfQorCisvKioKICAqIGdmczJfYml0Zml0IC0gU2VhcmNoIGFuIHJncnAncyBiaXRtYXAgYnVmZmVyIHRvIGZpbmQgYSBiaXQtcGFpciByZXByZXNlbnRpbmcKICAqICAgICAgIGEgYmxvY2sgaW4gYSBnaXZlbiBhbGxvY2F0aW9uIHN0YXRlLgogICogQGJ1ZmZlcjogdGhlIGJ1ZmZlciB0aGF0IGhvbGRzIHRoZSBiaXRtYXBzCi0gKiBAYnVmbGVuOiB0aGUgbGVuZ3RoIChpbiBieXRlcykgb2YgdGhlIGJ1ZmZlcgorICogQGxlbjogdGhlIGxlbmd0aCAoaW4gYnl0ZXMpIG9mIHRoZSBidWZmZXIKICAqIEBnb2FsOiBzdGFydCBzZWFyY2ggYXQgdGhpcyBibG9jaydzIGJpdC1wYWlyICh3aXRoaW4gQGJ1ZmZlcikKLSAqIEBvbGRfc3RhdGU6IEdGUzJfQkxLU1RfWFhYIHRoZSBzdGF0ZSBvZiB0aGUgYmxvY2sgd2UncmUgbG9va2luZyBmb3IuCisgKiBAc3RhdGU6IEdGUzJfQkxLU1RfWFhYIHRoZSBzdGF0ZSBvZiB0aGUgYmxvY2sgd2UncmUgbG9va2luZyBmb3IuCiAgKgogICogU2NvcGUgb2YgQGdvYWwgYW5kIHJldHVybmVkIGJsb2NrIG51bWJlciBpcyBvbmx5IHdpdGhpbiB0aGlzIGJpdG1hcCBidWZmZXIsCiAgKiBub3QgZW50aXJlIHJncnAgb3IgZmlsZXN5c3RlbS4gIEBidWZmZXIgd2lsbCBiZSBvZmZzZXQgZnJvbSB0aGUgYWN0dWFsCi0gKiBiZWdpbm5pbmcgb2YgYSBiaXRtYXAgYmxvY2sgYnVmZmVyLCBza2lwcGluZyBhbnkgaGVhZGVyIHN0cnVjdHVyZXMuCisgKiBiZWdpbm5pbmcgb2YgYSBiaXRtYXAgYmxvY2sgYnVmZmVyLCBza2lwcGluZyBhbnkgaGVhZGVyIHN0cnVjdHVyZXMsIGJ1dAorICogaGVhZGVycyBhcmUgYWx3YXlzIGEgbXVsdGlwbGUgb2YgNjQgYml0cyBsb25nIHNvIHRoYXQgdGhlIGJ1ZmZlciBpcworICogYWx3YXlzIGFsaWduZWQgdG8gYSA2NCBiaXQgYm91bmRhcnkuCisgKgorICogVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBpbiBieXRlcywgYnV0IGlzIGl0IGFzc3VtZWQgdGhhdCBpdCBpcworICogYWx3YXlzIG9rIHRvIHRvIHJlYWQgYSBjb21wbGV0ZSBtdWx0aXBsZSBvZiA2NCBiaXRzIGF0IHRoZSBlbmQKKyAqIG9mIHRoZSBibG9jayBpbiBjYXNlIHRoZSBlbmQgaXMgbm8gYWxpZ25lZCB0byBhIG5hdHVyYWwgYm91bmRhcnkuCiAgKgogICogUmV0dXJuOiB0aGUgYmxvY2sgbnVtYmVyIChiaXRtYXAgYnVmZmVyIHNjb3BlKSB0aGF0IHdhcyBmb3VuZAogICovCiAKLXN0YXRpYyB1MzIgZ2ZzMl9iaXRmaXQoY29uc3QgdTggKmJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1ZmxlbiwgdTMyIGdvYWwsCi0JCSAgICAgICB1OCBvbGRfc3RhdGUpCitzdGF0aWMgdTMyIGdmczJfYml0Zml0KGNvbnN0IHU4ICpidWYsIGNvbnN0IHVuc2lnbmVkIGludCBsZW4sCisJCSAgICAgICB1MzIgZ29hbCwgdTggc3RhdGUpCiB7Ci0JY29uc3QgdTggKmJ5dGUsICpzdGFydCwgKmVuZDsKLQlpbnQgYml0LCBzdGFydGJpdDsKLQl1MzIgZzEsIGcyLCBtaXNhbGlnbmVkOwotCXVuc2lnbmVkIGxvbmcgKnBsb25nOwotCXVuc2lnbmVkIGxvbmcgbHNraXB2YWw7CisJdTMyIHNwb2ludCA9IChnb2FsIDw8IDEpICYgKCg4KnNpemVvZih1NjQpKSAtIDEpOworCWNvbnN0IF9fbGU2NCAqcHRyID0gKChfX2xlNjQgKilidWYpICsgKGdvYWwgPj4gNSk7CisJY29uc3QgX19sZTY0ICplbmQgPSAoX19sZTY0ICopKGJ1ZiArIEFMSUdOKGxlbiwgc2l6ZW9mKHU2NCkpKTsKKwl1NjQgdG1wOworCXU2NCBtYXNrID0gMHg1NTU1NTU1NTU1NTU1NTU1VUxMOworCXUzMiBiaXQ7CiAKLQlsc2tpcHZhbCA9IChvbGRfc3RhdGUgJiBHRlMyX0JMS1NUX1VTRUQpID8gTEJJVFNLSVAwMCA6IExCSVRTS0lQNTU7Ci0JZzEgPSAoZ29hbCAvIEdGUzJfTkJCWSk7Ci0Jc3RhcnQgPSBidWZmZXIgKyBnMTsKLQlieXRlID0gc3RhcnQ7Ci0gICAgICAgIGVuZCA9IGJ1ZmZlciArIGJ1ZmxlbjsKLQlnMiA9IEFMSUdOKGcxLCBzaXplb2YodW5zaWduZWQgbG9uZykpOwotCXBsb25nID0gKHVuc2lnbmVkIGxvbmcgKikoYnVmZmVyICsgZzIpOwotCXN0YXJ0Yml0ID0gYml0ID0gKGdvYWwgJSBHRlMyX05CQlkpICogR0ZTMl9CSVRfU0laRTsKLQltaXNhbGlnbmVkID0gZzIgLSBnMTsKLQlpZiAoIW1pc2FsaWduZWQpCi0JCWdvdG8gdWxvbmdfYWxpZ25lZDsKLS8qIHBhcnNlIHRoZSBiaXRtYXAgYSBieXRlIGF0IGEgdGltZSAqLwotbWlzYWxpZ25lZDoKLQl3aGlsZSAoYnl0ZSA8IGVuZCkgewotCQlpZiAoKCgqYnl0ZSA+PiBiaXQpICYgR0ZTMl9CSVRfTUFTSykgPT0gb2xkX3N0YXRlKSB7Ci0JCQlyZXR1cm4gZ29hbCArCi0JCQkJKCgoYnl0ZSAtIHN0YXJ0KSAqIEdGUzJfTkJCWSkgKwotCQkJCSAoKGJpdCAtIHN0YXJ0Yml0KSA+PiAxKSk7Ci0JCX0KLQkJYml0ICs9IEdGUzJfQklUX1NJWkU7Ci0JCWlmIChiaXQgPj0gR0ZTMl9OQkJZICogR0ZTMl9CSVRfU0laRSkgewotCQkJYml0ID0gMDsKLQkJCWJ5dGUrKzsKLQkJCW1pc2FsaWduZWQtLTsKLQkJCWlmICghbWlzYWxpZ25lZCkgewotCQkJCXBsb25nID0gKHVuc2lnbmVkIGxvbmcgKilieXRlOwotCQkJCWdvdG8gdWxvbmdfYWxpZ25lZDsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gQkZJVE5PRU5UOworCUJVR19PTihzdGF0ZSA+IDMpOwogCi0vKiBwYXJzZSB0aGUgYml0bWFwIGEgdW5zaWduZWQgbG9uZyBhdCBhIHRpbWUgKi8KLXVsb25nX2FsaWduZWQ6Ci0JLyogU3RvcCBhdCAiZW5kIC0gMSIgb3IgZWxzZSBwcmVmZXRjaCBjYW4gZ28gcGFzdCB0aGUgZW5kIGFuZCBzZWdmYXVsdC4KLQkgICBXZSBjb3VsZCAiaWYiIGl0IGJ1dCB3ZSdkIGxvc2Ugc29tZSBvZiB0aGUgcGVyZm9ybWFuY2UgZ2FpbmVkLgotCSAgIFRoaXMgd2F5IHdpbGwgb25seSBzbG93IGRvd24gc2VhcmNoaW5nIHRoZSB2ZXJ5IGxhc3QgNC84IGJ5dGVzCi0JICAgZGVwZW5kaW5nIG9uIGFyY2hpdGVjdHVyZS4gIEkndmUgZXhwZXJpbWVudGVkIHdpdGggc2V2ZXJhbCB3YXlzCi0JICAgb2Ygd3JpdGluZyB0aGlzIHNlY3Rpb24gc3VjaCBhcyB1c2luZyBhbiBlbHNlIGJlZm9yZSB0aGUgZ290bwotCSAgIGJ1dCB0aGlzIG9uZSBzZWVtcyB0byBiZSB0aGUgZmFzdGVzdC4gKi8KLQl3aGlsZSAoKHVuc2lnbmVkIGNoYXIgKilwbG9uZyA8IGVuZCAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkgewotCQlwcmVmZXRjaChwbG9uZyArIDEpOwotCQlpZiAoKCgqcGxvbmcpICYgTEJJVE1BU0spICE9IGxza2lwdmFsKQotCQkJYnJlYWs7Ci0JCXBsb25nKys7CisJLyogTWFzayBvZmYgYml0cyB3ZSBkb24ndCBjYXJlIGFib3V0IGF0IHRoZSBzdGFydCBvZiB0aGUgc2VhcmNoICovCisJbWFzayA8PD0gc3BvaW50OworCXRtcCA9IGdmczJfYml0X3NlYXJjaChwdHIsIG1hc2ssIHN0YXRlKTsKKwlwdHIrKzsKKwl3aGlsZSh0bXAgPT0gMCAmJiBwdHIgPCBlbmQpIHsKKwkJdG1wID0gZ2ZzMl9iaXRfc2VhcmNoKHB0ciwgMHg1NTU1NTU1NTU1NTU1NTU1VUxMLCBzdGF0ZSk7CisJCXB0cisrOwogCX0KLQlpZiAoKHVuc2lnbmVkIGNoYXIgKilwbG9uZyA8IGVuZCkgewotCQlieXRlID0gKGNvbnN0IHU4ICopcGxvbmc7Ci0JCW1pc2FsaWduZWQgKz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gMTsKLQkJZ290byBtaXNhbGlnbmVkOwotCX0KLQlyZXR1cm4gQkZJVE5PRU5UOworCS8qIE1hc2sgb2ZmIGFueSBiaXRzIHdoaWNoIGFyZSBtb3JlIHRoYW4gbGVuIGJ5dGVzIGZyb20gdGhlIHN0YXJ0ICovCisJaWYgKHB0ciA9PSBlbmQgJiYgKGxlbiAmIChzaXplb2YodTY0KSAtIDEpKSkKKwkJdG1wICY9ICgoKHU2NCl+MCkgPj4gKDY0IC0gOCoobGVuICYgKHNpemVvZih1NjQpIC0gMSkpKSk7CisJLyogRGlkbid0IGZpbmQgYW55dGhpbmcsIHNvIHJldHVybiAqLworCWlmICh0bXAgPT0gMCkKKwkJcmV0dXJuIEJGSVROT0VOVDsKKwlwdHItLTsKKwliaXQgPSBmbHM2NCh0bXApOworCWJpdC0tOwkJLyogZmxzNjQgYWx3YXlzIGFkZHMgb25lIHRvIHRoZSBiaXQgY291bnQgKi8KKwliaXQgLz0gMjsJLyogdHdvIGJpdHMgcGVyIGVudHJ5IGluIHRoZSBiaXRtYXAgKi8KKwlyZXR1cm4gKCgoY29uc3QgdW5zaWduZWQgY2hhciAqKXB0ciAtIGJ1ZikgKiBHRlMyX05CQlkpICsgYml0OwogfQogCiAvKioKQEAgLTgzMSw2ICs4NDAsNTggQEAKIAlzcGluX3VubG9jaygmc2RwLT5zZF9yaW5kZXhfc3Bpbik7CiB9CiAKK3N0YXRpYyB2b2lkIGdmczJfcmdycF9zZW5kX2Rpc2NhcmRzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCB1NjQgb2Zmc2V0LAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgZ2ZzMl9iaXRtYXAgKmJpKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZHAtPnNkX3ZmczsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gc2ItPnNfYmRldjsKKwljb25zdCB1bnNpZ25lZCBpbnQgc2VjdHNfcGVyX2JsayA9IHNkcC0+c2Rfc2Iuc2JfYnNpemUgLworCQkJCQkgICBiZGV2X2hhcmRzZWN0X3NpemUoc2ItPnNfYmRldik7CisJdTY0IGJsazsKKwlzZWN0b3JfdCBzdGFydCA9IDA7CisJc2VjdG9yX3QgbnJfc2VjdHMgPSAwOworCWludCBydjsKKwl1bnNpZ25lZCBpbnQgeDsKKworCWZvciAoeCA9IDA7IHggPCBiaS0+YmlfbGVuOyB4KyspIHsKKwkJY29uc3QgdTggKm9yaWcgPSBiaS0+YmlfYmgtPmJfZGF0YSArIGJpLT5iaV9vZmZzZXQgKyB4OworCQljb25zdCB1OCAqY2xvbmUgPSBiaS0+YmlfY2xvbmUgKyBiaS0+Ymlfb2Zmc2V0ICsgeDsKKwkJdTggZGlmZiA9IH4oKm9yaWcgfCAoKm9yaWcgPj4gMSkpICYgKCpjbG9uZSB8ICgqY2xvbmUgPj4gMSkpOworCQlkaWZmICY9IDB4NTU7CisJCWlmIChkaWZmID09IDApCisJCQljb250aW51ZTsKKwkJYmxrID0gb2Zmc2V0ICsgKChiaS0+Ymlfc3RhcnQgKyB4KSAqIEdGUzJfTkJCWSk7CisJCWJsayAqPSBzZWN0c19wZXJfYmxrOyAvKiBjb252ZXJ0IHRvIHNlY3RvcnMgKi8KKwkJd2hpbGUoZGlmZikgeworCQkJaWYgKGRpZmYgJiAxKSB7CisJCQkJaWYgKG5yX3NlY3RzID09IDApCisJCQkJCWdvdG8gc3RhcnRfbmV3X2V4dGVudDsKKwkJCQlpZiAoKHN0YXJ0ICsgbnJfc2VjdHMpICE9IGJsaykgeworCQkJCQlydiA9IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0LAorCQkJCQkJCSAgICBucl9zZWN0cywgR0ZQX05PRlMpOworCQkJCQlpZiAocnYpCisJCQkJCQlnb3RvIGZhaWw7CisJCQkJCW5yX3NlY3RzID0gMDsKK3N0YXJ0X25ld19leHRlbnQ6CisJCQkJCXN0YXJ0ID0gYmxrOworCQkJCX0KKwkJCQlucl9zZWN0cyArPSBzZWN0c19wZXJfYmxrOworCQkJfQorCQkJZGlmZiA+Pj0gMjsKKwkJCWJsayArPSBzZWN0c19wZXJfYmxrOworCQl9CisJfQorCWlmIChucl9zZWN0cykgeworCQlydiA9IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKGJkZXYsIHN0YXJ0LCBucl9zZWN0cywgR0ZQX05PRlMpOworCQlpZiAocnYpCisJCQlnb3RvIGZhaWw7CisJfQorCXJldHVybjsKK2ZhaWw6CisJZnNfd2FybihzZHAsICJlcnJvciAlZCBvbiBkaXNjYXJkIHJlcXVlc3QsIHR1cm5pbmcgZGlzY2FyZHMgb2ZmIGZvciB0aGlzIGZpbGVzeXN0ZW0iLCBydik7CisJc2RwLT5zZF9hcmdzLmFyX2Rpc2NhcmQgPSAwOworfQorCiB2b2lkIGdmczJfcmdycF9yZXBvbGlzaF9jbG9uZXMoc3RydWN0IGdmczJfcmdycGQgKnJnZCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHJnZC0+cmRfc2JkOwpAQCAtODQxLDYgKzkwMiw4IEBACiAJCXN0cnVjdCBnZnMyX2JpdG1hcCAqYmkgPSByZ2QtPnJkX2JpdHMgKyB4OwogCQlpZiAoIWJpLT5iaV9jbG9uZSkKIAkJCWNvbnRpbnVlOworCQlpZiAoc2RwLT5zZF9hcmdzLmFyX2Rpc2NhcmQpCisJCQlnZnMyX3JncnBfc2VuZF9kaXNjYXJkcyhzZHAsIHJnZC0+cmRfZGF0YTAsIGJpKTsKIAkJbWVtY3B5KGJpLT5iaV9jbG9uZSArIGJpLT5iaV9vZmZzZXQsCiAJCSAgICAgICBiaS0+YmlfYmgtPmJfZGF0YSArIGJpLT5iaV9vZmZzZXQsIGJpLT5iaV9sZW4pOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2dmczIvc3VwZXIuYyBiL2ZzL2dmczIvc3VwZXIuYwppbmRleCAxNDFiNzgxLi42MDE5MTNlIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N1cGVyLmMKKysrIGIvZnMvZ2ZzMi9zdXBlci5jCkBAIC0xNSw3ICsxNSw2IEBACiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgotI2luY2x1ZGUgPGxpbnV4L2xtX2ludGVyZmFjZS5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMzM5LDcgKzMzOCw2IEBACiAJCQkJICAgIHN0cnVjdCBnZnMyX2hvbGRlciAqdF9naCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXA7Ci0Jc3RydWN0IGdmczJfaG9sZGVyIGppX2doOwogCXN0cnVjdCBnZnMyX2pkZXNjICpqZDsKIAlzdHJ1Y3QgbGZjYyAqbGZjYzsKIAlMSVNUX0hFQUQobGlzdCk7CkBAIC0zODcsNyArMzg1LDYgQEAKIAkJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmxmY2MtPmdoKTsKIAkJa2ZyZWUobGZjYyk7CiAJfQotCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZqaV9naCk7CiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmggYi9mcy9nZnMyL3N1cGVyLmgKaW5kZXggZjZiOGIwMC4uYjU2NDEzZSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5oCisrKyBiL2ZzL2dmczIvc3VwZXIuaApAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgogI2luY2x1ZGUgImluY29yZS5oIgogCi12b2lkIGdmczJfbG1fdW5tb3VudChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gdm9pZCBnZnMyX2xtX3VubW91bnQoc3RydWN0IGdmczJfc2JkICpzZHApOwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZnMyX2ppbmRleF9zaXplKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewpAQCAtMjcsMjcgKzI3LDI5IEBACiAKIHZvaWQgZ2ZzMl9qaW5kZXhfZnJlZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKLXN0cnVjdCBnZnMyX2pkZXNjICpnZnMyX2pkZXNjX2ZpbmQoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQpOwotaW50IGdmczJfamRlc2NfY2hlY2soc3RydWN0IGdmczJfamRlc2MgKmpkKTsKK2V4dGVybiBpbnQgZ2ZzMl9tb3VudF9hcmdzKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBzdHJ1Y3QgZ2ZzMl9hcmdzICphcmdzLCBjaGFyICpkYXRhKTsKIAotaW50IGdmczJfbG9va3VwX2luX21hc3Rlcl9kaXIoc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmZpbGVuYW1lLAotCQkJICAgICAgc3RydWN0IGdmczJfaW5vZGUgKippcHApOworZXh0ZXJuIHN0cnVjdCBnZnMyX2pkZXNjICpnZnMyX2pkZXNjX2ZpbmQoc3RydWN0IGdmczJfc2JkICpzZHAsIHVuc2lnbmVkIGludCBqaWQpOworZXh0ZXJuIGludCBnZnMyX2pkZXNjX2NoZWNrKHN0cnVjdCBnZnMyX2pkZXNjICpqZCk7CiAKLWludCBnZnMyX21ha2VfZnNfcncoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIGludCBnZnMyX2xvb2t1cF9pbl9tYXN0ZXJfZGlyKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpmaWxlbmFtZSwKKwkJCQkgICAgIHN0cnVjdCBnZnMyX2lub2RlICoqaXBwKTsKIAotaW50IGdmczJfc3RhdGZzX2luaXQoc3RydWN0IGdmczJfc2JkICpzZHApOwotdm9pZCBnZnMyX3N0YXRmc19jaGFuZ2Uoc3RydWN0IGdmczJfc2JkICpzZHAsCi0JCQlzNjQgdG90YWwsIHM2NCBmcmVlLCBzNjQgZGlub2Rlcyk7Ci1pbnQgZ2ZzMl9zdGF0ZnNfc3luYyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CitleHRlcm4gaW50IGdmczJfbWFrZV9mc19ydyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CiAKLWludCBnZnMyX2ZyZWV6ZV9mcyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7Ci12b2lkIGdmczJfdW5mcmVlemVfZnMoc3RydWN0IGdmczJfc2JkICpzZHApOworZXh0ZXJuIGludCBnZnMyX3N0YXRmc19pbml0KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiB2b2lkIGdmczJfc3RhdGZzX2NoYW5nZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgczY0IHRvdGFsLCBzNjQgZnJlZSwKKwkJCSAgICAgICBzNjQgZGlub2Rlcyk7CitleHRlcm4gaW50IGdmczJfc3RhdGZzX3N5bmMoc3RydWN0IGdmczJfc2JkICpzZHApOworCitleHRlcm4gaW50IGdmczJfZnJlZXplX2ZzKHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKK2V4dGVybiB2b2lkIGdmczJfdW5mcmVlemVfZnMoc3RydWN0IGdmczJfc2JkICpzZHApOwogCiBleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZ2ZzMl9mc190eXBlOwogZXh0ZXJuIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGdmczJtZXRhX2ZzX3R5cGU7CiBleHRlcm4gY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIGdmczJfZXhwb3J0X29wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBnZnMyX3N1cGVyX29wczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgZ2ZzMl9kb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBnZnMyX2RvcHM7CiAKICNlbmRpZiAvKiBfX1NVUEVSX0RPVF9IX18gKi8KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zeXMuYyBiL2ZzL2dmczIvc3lzLmMKaW5kZXggMjZjMWZhNy4uNzY1NWY1MDIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvc3lzLmMKKysrIGIvZnMvZ2ZzMi9zeXMuYwpAQCAtMTQsOSArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgotI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogCiAjaW5jbHVkZSAiZ2ZzMi5oIgogI2luY2x1ZGUgImluY29yZS5oIgpAQCAtMjUsNiArMjQsNyBAQAogI2luY2x1ZGUgImdsb2NrLmgiCiAjaW5jbHVkZSAicXVvdGEuaCIKICNpbmNsdWRlICJ1dGlsLmgiCisjaW5jbHVkZSAiZ2xvcHMuaCIKIAogc3RhdGljIHNzaXplX3QgaWRfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQogewpAQCAtMzcsNiArMzcsMzAgQEAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgc2RwLT5zZF9mc25hbWUpOwogfQogCitzdGF0aWMgaW50IGdmczJfdXVpZF92YWxpZChjb25zdCB1OCAqdXVpZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWlmICh1dWlkW2ldKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB1dWlkX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwljb25zdCB1OCAqdXVpZCA9IHNkcC0+c2Rfc2Iuc2JfdXVpZDsKKwlidWZbMF0gPSAnXDAnOworCWlmICghZ2ZzMl91dWlkX3ZhbGlkKHV1aWQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlMDJYJTAyWCUwMlglMDJYLSUwMlglMDJYLSIKKwkJCSIlMDJYJTAyWC0lMDJYJTAyWC0lMDJYJTAyWCUwMlglMDJYJTAyWCUwMlhcbiIsCisJCQl1dWlkWzBdLCB1dWlkWzFdLCB1dWlkWzJdLCB1dWlkWzNdLCB1dWlkWzRdLCB1dWlkWzVdLAorCQkJdXVpZFs2XSwgdXVpZFs3XSwgdXVpZFs4XSwgdXVpZFs5XSwgdXVpZFsxMF0sIHV1aWRbMTFdLAorCQkJdXVpZFsxMl0sIHV1aWRbMTNdLCB1dWlkWzE0XSwgdXVpZFsxNV0pOworfQorCiBzdGF0aWMgc3NpemVfdCBmcmVlemVfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQogewogCXVuc2lnbmVkIGludCBjb3VudDsKQEAgLTE0OCw2ICsxNzIsNDYgQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgc3NpemVfdCBkZW1vdGVfcnFfc3RvcmUoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2w7CisJY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyAqZ2xvcHM7CisJdW5zaWduZWQgaW50IGdsbW9kZTsKKwl1bnNpZ25lZCBpbnQgZ2x0eXBlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBnbG51bTsKKwljaGFyIG1vZGVbMTZdOworCWludCBydjsKKworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKKwlydiA9IHNzY2FuZihidWYsICIldTolbGx1ICUxNXMiLCAmZ2x0eXBlLCAmZ2xudW0sCisJCSAgICBtb2RlKTsKKwlpZiAocnYgIT0gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoc3RyY21wKG1vZGUsICJFWCIpID09IDApCisJCWdsbW9kZSA9IExNX1NUX1VOTE9DS0VEOworCWVsc2UgaWYgKChzdHJjbXAobW9kZSwgIkNXIikgPT0gMCkgfHwgKHN0cmNtcChtb2RlLCAiREYiKSA9PSAwKSkKKwkJZ2xtb2RlID0gTE1fU1RfREVGRVJSRUQ7CisJZWxzZSBpZiAoKHN0cmNtcChtb2RlLCAiUFIiKSA9PSAwKSB8fCAoc3RyY21wKG1vZGUsICJTSCIpID09IDApKQorCQlnbG1vZGUgPSBMTV9TVF9TSEFSRUQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChnbHR5cGUgPiBMTV9UWVBFX0pPVVJOQUwpCisJCXJldHVybiAtRUlOVkFMOworCWdsb3BzID0gZ2ZzMl9nbG9wc19saXN0W2dsdHlwZV07CisJaWYgKGdsb3BzID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCXJ2ID0gZ2ZzMl9nbG9ja19nZXQoc2RwLCBnbG51bSwgZ2xvcHMsIDAsICZnbCk7CisJaWYgKHJ2KQorCQlyZXR1cm4gcnY7CisJZ2ZzMl9nbG9ja19jYihnbCwgZ2xtb2RlKTsKKwlnZnMyX2dsb2NrX3B1dChnbCk7CisJcmV0dXJuIGxlbjsKK30KKwogc3RydWN0IGdmczJfYXR0ciB7CiAJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwogCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZ2ZzMl9zYmQgKiwgY2hhciAqKTsKQEAgLTE1OSwyMiArMjIzLDI2IEBACiAKIEdGUzJfQVRUUihpZCwgICAgICAgICAgICAgICAgICAwNDQ0LCBpZF9zaG93LCAgICAgICBOVUxMKTsKIEdGUzJfQVRUUihmc25hbWUsICAgICAgICAgICAgICAwNDQ0LCBmc25hbWVfc2hvdywgICBOVUxMKTsKK0dGUzJfQVRUUih1dWlkLCAgICAgICAgICAgICAgICAwNDQ0LCB1dWlkX3Nob3csICAgICBOVUxMKTsKIEdGUzJfQVRUUihmcmVlemUsICAgICAgICAgICAgICAwNjQ0LCBmcmVlemVfc2hvdywgICBmcmVlemVfc3RvcmUpOwogR0ZTMl9BVFRSKHdpdGhkcmF3LCAgICAgICAgICAgIDA2NDQsIHdpdGhkcmF3X3Nob3csIHdpdGhkcmF3X3N0b3JlKTsKIEdGUzJfQVRUUihzdGF0ZnNfc3luYywgICAgICAgICAwMjAwLCBOVUxMLCAgICAgICAgICBzdGF0ZnNfc3luY19zdG9yZSk7CiBHRlMyX0FUVFIocXVvdGFfc3luYywgICAgICAgICAgMDIwMCwgTlVMTCwgICAgICAgICAgcXVvdGFfc3luY19zdG9yZSk7CiBHRlMyX0FUVFIocXVvdGFfcmVmcmVzaF91c2VyLCAgMDIwMCwgTlVMTCwgICAgICAgICAgcXVvdGFfcmVmcmVzaF91c2VyX3N0b3JlKTsKIEdGUzJfQVRUUihxdW90YV9yZWZyZXNoX2dyb3VwLCAwMjAwLCBOVUxMLCAgICAgICAgICBxdW90YV9yZWZyZXNoX2dyb3VwX3N0b3JlKTsKK0dGUzJfQVRUUihkZW1vdGVfcnEsICAgICAgICAgICAwMjAwLCBOVUxMLAkgICAgZGVtb3RlX3JxX3N0b3JlKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmdmczJfYXR0cnNbXSA9IHsKIAkmZ2ZzMl9hdHRyX2lkLmF0dHIsCiAJJmdmczJfYXR0cl9mc25hbWUuYXR0ciwKKwkmZ2ZzMl9hdHRyX3V1aWQuYXR0ciwKIAkmZ2ZzMl9hdHRyX2ZyZWV6ZS5hdHRyLAogCSZnZnMyX2F0dHJfd2l0aGRyYXcuYXR0ciwKIAkmZ2ZzMl9hdHRyX3N0YXRmc19zeW5jLmF0dHIsCiAJJmdmczJfYXR0cl9xdW90YV9zeW5jLmF0dHIsCiAJJmdmczJfYXR0cl9xdW90YV9yZWZyZXNoX3VzZXIuYXR0ciwKIAkmZ2ZzMl9hdHRyX3F1b3RhX3JlZnJlc2hfZ3JvdXAuYXR0ciwKKwkmZ2ZzMl9hdHRyX2RlbW90ZV9ycS5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0yMjQsMTQgKzI5MiwxNDUgQEAKIAogTE9DS1NUUlVDVF9BVFRSKGppZCwgICAgICAiJXVcbiIpOwogTE9DS1NUUlVDVF9BVFRSKGZpcnN0LCAgICAiJXVcbiIpOwotTE9DS1NUUlVDVF9BVFRSKGx2Yl9zaXplLCAiJXVcbiIpOwotTE9DS1NUUlVDVF9BVFRSKGZsYWdzLCAgICAiJWRcbiIpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG9ja3N0cnVjdF9hdHRyc1tdID0gewogCSZsb2Nrc3RydWN0X2F0dHJfamlkLmF0dHIsCiAJJmxvY2tzdHJ1Y3RfYXR0cl9maXJzdC5hdHRyLAotCSZsb2Nrc3RydWN0X2F0dHJfbHZiX3NpemUuYXR0ciwKLQkmbG9ja3N0cnVjdF9hdHRyX2ZsYWdzLmF0dHIsCisJTlVMTCwKK307CisKKy8qCisgKiBsb2NrX21vZHVsZS4gT3JpZ2luYWxseSBmcm9tIGxvY2tfZGxtCisgKi8KKworc3RhdGljIHNzaXplX3QgcHJvdG9fbmFtZV9zaG93KHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICpidWYpCit7CisJY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKm9wcyA9IHNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHM7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIG9wcy0+bG1fcHJvdG9fbmFtZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJsb2NrX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXNzaXplX3QgcmV0OworCWludCB2YWwgPSAwOworCisJaWYgKHRlc3RfYml0KERGTF9CTE9DS19MT0NLUywgJmxzLT5sc19mbGFncykpCisJCXZhbCA9IDE7CisJcmV0ID0gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBibG9ja19zdG9yZShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJc3NpemVfdCByZXQgPSBsZW47CisJaW50IHZhbDsKKworCXZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAwKTsKKworCWlmICh2YWwgPT0gMSkKKwkJc2V0X2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+bHNfZmxhZ3MpOworCWVsc2UgaWYgKHZhbCA9PSAwKSB7CisJCWNsZWFyX2JpdChERkxfQkxPQ0tfTE9DS1MsICZscy0+bHNfZmxhZ3MpOworCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCQlnZnMyX2dsb2NrX3RoYXcoc2RwKTsKKwl9IGVsc2UgeworCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBsa2lkX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBscy0+bHNfaWQpOworfQorCitzdGF0aWMgc3NpemVfdCBsa2ZpcnN0X3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+bHNfZmlyc3QpOworfQorCitzdGF0aWMgc3NpemVfdCBmaXJzdF9kb25lX3Nob3coc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbHMgPSAmc2RwLT5zZF9sb2Nrc3RydWN0OworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBscy0+bHNfZmlyc3RfZG9uZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlY292ZXJfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19yZWNvdmVyX2ppZCk7Cit9CisKK3N0YXRpYyB2b2lkIGdmczJfamRlc2NfbWFrZV9kaXJ0eShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdW5zaWduZWQgaW50IGppZCkKK3sKKwlzdHJ1Y3QgZ2ZzMl9qZGVzYyAqamQ7CisKKwlzcGluX2xvY2soJnNkcC0+c2RfamluZGV4X3NwaW4pOworCWxpc3RfZm9yX2VhY2hfZW50cnkoamQsICZzZHAtPnNkX2ppbmRleF9saXN0LCBqZF9saXN0KSB7CisJCWlmIChqZC0+amRfamlkICE9IGppZCkKKwkJCWNvbnRpbnVlOworCQlqZC0+amRfZGlydHkgPSAxOworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJnNkcC0+c2RfamluZGV4X3NwaW4pOworfQorCitzdGF0aWMgc3NpemVfdCByZWNvdmVyX3N0b3JlKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxzID0gJnNkcC0+c2RfbG9ja3N0cnVjdDsKKwlscy0+bHNfcmVjb3Zlcl9qaWQgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMCk7CisJZ2ZzMl9qZGVzY19tYWtlX2RpcnR5KHNkcCwgbHMtPmxzX3JlY292ZXJfamlkKTsKKwlpZiAoc2RwLT5zZF9yZWNvdmVyZF9wcm9jZXNzKQorCQl3YWtlX3VwX3Byb2Nlc3Moc2RwLT5zZF9yZWNvdmVyZF9wcm9jZXNzKTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCByZWNvdmVyX2RvbmVfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19yZWNvdmVyX2ppZF9kb25lKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVjb3Zlcl9zdGF0dXNfc2hvdyhzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgY2hhciAqYnVmKQoreworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGxzLT5sc19yZWNvdmVyX2ppZF9zdGF0dXMpOworfQorCitzdHJ1Y3QgZ2RsbV9hdHRyIHsKKwlzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBnZnMyX3NiZCAqc2RwLCBjaGFyICopOworCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKKyNkZWZpbmUgR0RMTV9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgXAorc3RhdGljIHN0cnVjdCBnZGxtX2F0dHIgZ2RsbV9hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQorCitHRExNX0FUVFIocHJvdG9fbmFtZSwgICAgIDA0NDQsIHByb3RvX25hbWVfc2hvdywgICAgIE5VTEwpOworR0RMTV9BVFRSKGJsb2NrLCAgICAgICAgICAwNjQ0LCBibG9ja19zaG93LCAgICAgICAgICBibG9ja19zdG9yZSk7CitHRExNX0FUVFIod2l0aGRyYXcsICAgICAgIDA2NDQsIHdpdGhkcmF3X3Nob3csICAgICAgIHdpdGhkcmF3X3N0b3JlKTsKK0dETE1fQVRUUihpZCwgICAgICAgICAgICAgMDQ0NCwgbGtpZF9zaG93LCAgICAgICAgICAgTlVMTCk7CitHRExNX0FUVFIoZmlyc3QsICAgICAgICAgIDA0NDQsIGxrZmlyc3Rfc2hvdywgICAgICAgIE5VTEwpOworR0RMTV9BVFRSKGZpcnN0X2RvbmUsICAgICAwNDQ0LCBmaXJzdF9kb25lX3Nob3csICAgICBOVUxMKTsKK0dETE1fQVRUUihyZWNvdmVyLCAgICAgICAgMDY0NCwgcmVjb3Zlcl9zaG93LCAgICAgICAgcmVjb3Zlcl9zdG9yZSk7CitHRExNX0FUVFIocmVjb3Zlcl9kb25lLCAgIDA0NDQsIHJlY292ZXJfZG9uZV9zaG93LCAgIE5VTEwpOworR0RMTV9BVFRSKHJlY292ZXJfc3RhdHVzLCAwNDQ0LCByZWNvdmVyX3N0YXR1c19zaG93LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxvY2tfbW9kdWxlX2F0dHJzW10gPSB7CisJJmdkbG1fYXR0cl9wcm90b19uYW1lLmF0dHIsCisJJmdkbG1fYXR0cl9ibG9jay5hdHRyLAorCSZnZGxtX2F0dHJfd2l0aGRyYXcuYXR0ciwKKwkmZ2RsbV9hdHRyX2lkLmF0dHIsCisJJmxvY2tzdHJ1Y3RfYXR0cl9qaWQuYXR0ciwKKwkmZ2RsbV9hdHRyX2ZpcnN0LmF0dHIsCisJJmdkbG1fYXR0cl9maXJzdF9kb25lLmF0dHIsCisJJmdkbG1fYXR0cl9yZWNvdmVyLmF0dHIsCisJJmdkbG1fYXR0cl9yZWNvdmVyX2RvbmUuYXR0ciwKKwkmZ2RsbV9hdHRyX3JlY292ZXJfc3RhdHVzLmF0dHIsCiAJTlVMTCwKIH07CiAKQEAgLTM3Myw3ICs1NzIsNiBAQAogVFVORV9BVFRSKHN0YXRmc19zbG93LCAwKTsKIFRVTkVfQVRUUihuZXdfZmlsZXNfamRhdGEsIDApOwogVFVORV9BVFRSKHF1b3RhX3NpbXVsX3N5bmMsIDEpOwotVFVORV9BVFRSKHF1b3RhX2NhY2hlX3NlY3MsIDEpOwogVFVORV9BVFRSKHN0YWxsX3NlY3MsIDEpOwogVFVORV9BVFRSKHN0YXRmc19xdWFudHVtLCAxKTsKIFRVTkVfQVRUUl9EQUVNT04ocmVjb3ZlcmRfc2VjcywgcmVjb3ZlcmRfcHJvY2Vzcyk7CkBAIC0zODksNyArNTg3LDYgQEAKIAkmdHVuZV9hdHRyX2NvbXBsYWluX3NlY3MuYXR0ciwKIAkmdHVuZV9hdHRyX3N0YXRmc19zbG93LmF0dHIsCiAJJnR1bmVfYXR0cl9xdW90YV9zaW11bF9zeW5jLmF0dHIsCi0JJnR1bmVfYXR0cl9xdW90YV9jYWNoZV9zZWNzLmF0dHIsCiAJJnR1bmVfYXR0cl9zdGFsbF9zZWNzLmF0dHIsCiAJJnR1bmVfYXR0cl9zdGF0ZnNfcXVhbnR1bS5hdHRyLAogCSZ0dW5lX2F0dHJfcmVjb3ZlcmRfc2Vjcy5hdHRyLApAQCAtNDE0LDYgKzYxMSwxMSBAQAogCS5hdHRycyA9IHR1bmVfYXR0cnMsCiB9OwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsb2NrX21vZHVsZV9ncm91cCA9IHsKKwkubmFtZSA9ICJsb2NrX21vZHVsZSIsCisJLmF0dHJzID0gbG9ja19tb2R1bGVfYXR0cnMsCit9OworCiBpbnQgZ2ZzMl9zeXNfZnNfYWRkKHN0cnVjdCBnZnMyX3NiZCAqc2RwKQogewogCWludCBlcnJvcjsKQEAgLTQzNiw5ICs2MzgsMTUgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbF9hcmdzOwogCisJZXJyb3IgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJmxvY2tfbW9kdWxlX2dyb3VwKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZmFpbF90dW5lOworCiAJa29iamVjdF91ZXZlbnQoJnNkcC0+c2Rfa29iaiwgS09CSl9BREQpOwogCXJldHVybiAwOwogCitmYWlsX3R1bmU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZ0dW5lX2dyb3VwKTsKIGZhaWxfYXJnczoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJmFyZ3NfZ3JvdXApOwogZmFpbF9sb2Nrc3RydWN0OgpAQCAtNDU1LDE1ICs2NjMsMjcgQEAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJnR1bmVfZ3JvdXApOwogCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2RwLT5zZF9rb2JqLCAmYXJnc19ncm91cCk7CiAJc3lzZnNfcmVtb3ZlX2dyb3VwKCZzZHAtPnNkX2tvYmosICZsb2Nrc3RydWN0X2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnNkcC0+c2Rfa29iaiwgJmxvY2tfbW9kdWxlX2dyb3VwKTsKIAlrb2JqZWN0X3B1dCgmc2RwLT5zZF9rb2JqKTsKIH0KIAorCiBzdGF0aWMgaW50IGdmczJfdWV2ZW50KHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJICAgICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudikKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZ2ZzMl9zYmQsIHNkX2tvYmopOworCWNvbnN0IHU4ICp1dWlkID0gc2RwLT5zZF9zYi5zYl91dWlkOworCiAJYWRkX3VldmVudF92YXIoZW52LCAiTE9DS1RBQkxFPSVzIiwgc2RwLT5zZF90YWJsZV9uYW1lKTsKIAlhZGRfdWV2ZW50X3ZhcihlbnYsICJMT0NLUFJPVE89JXMiLCBzZHAtPnNkX3Byb3RvX25hbWUpOworCWlmIChnZnMyX3V1aWRfdmFsaWQodXVpZCkpIHsKKwkJYWRkX3VldmVudF92YXIoZW52LCAiVVVJRD0lMDJYJTAyWCUwMlglMDJYLSUwMlglMDJYLSUwMlglMDJYLSIKKwkJCSAgICAgICAiJTAyWCUwMlgtJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYIiwKKwkJCSAgICAgICB1dWlkWzBdLCB1dWlkWzFdLCB1dWlkWzJdLCB1dWlkWzNdLCB1dWlkWzRdLAorCQkJICAgICAgIHV1aWRbNV0sIHV1aWRbNl0sIHV1aWRbN10sIHV1aWRbOF0sIHV1aWRbOV0sCisJCQkgICAgICAgdXVpZFsxMF0sIHV1aWRbMTFdLCB1dWlkWzEyXSwgdXVpZFsxM10sCisJCQkgICAgICAgdXVpZFsxNF0sIHV1aWRbMTVdKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvdHJhbnMuYyBiL2ZzL2dmczIvdHJhbnMuYwppbmRleCBmNjc3YjhhLi4wNTM3NTJkIDEwMDY0NAotLS0gYS9mcy9nZnMyL3RyYW5zLmMKKysrIGIvZnMvZ2ZzMi90cmFucy5jCkBAIC0xMiw5ICsxMiw4IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC9nZnMyX29uZGlzay5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZzMl9vbmRpc2suaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTg4LDkgKzg3LDExIEBACiAKIAlpZiAoIXRyLT50cl90b3VjaGVkKSB7CiAJCWdmczJfbG9nX3JlbGVhc2Uoc2RwLCB0ci0+dHJfcmVzZXJ2ZWQpOwotCQlnZnMyX2dsb2NrX2RxKCZ0ci0+dHJfdF9naCk7Ci0JCWdmczJfaG9sZGVyX3VuaW5pdCgmdHItPnRyX3RfZ2gpOwotCQlrZnJlZSh0cik7CisJCWlmICh0ci0+dHJfdF9naC5naF9nbCkgeworCQkJZ2ZzMl9nbG9ja19kcSgmdHItPnRyX3RfZ2gpOworCQkJZ2ZzMl9ob2xkZXJfdW5pbml0KCZ0ci0+dHJfdF9naCk7CisJCQlrZnJlZSh0cik7CisJCX0KIAkJcmV0dXJuOwogCX0KIApAQCAtMTA2LDkgKzEwNywxMSBAQAogCX0KIAogCWdmczJfbG9nX2NvbW1pdChzZHAsIHRyKTsKLSAgICAgICAgZ2ZzMl9nbG9ja19kcSgmdHItPnRyX3RfZ2gpOwotICAgICAgICBnZnMyX2hvbGRlcl91bmluaXQoJnRyLT50cl90X2doKTsKLSAgICAgICAga2ZyZWUodHIpOworCWlmICh0ci0+dHJfdF9naC5naF9nbCkgeworCQlnZnMyX2dsb2NrX2RxKCZ0ci0+dHJfdF9naCk7CisJCWdmczJfaG9sZGVyX3VuaW5pdCgmdHItPnRyX3RfZ2gpOworCQlrZnJlZSh0cik7CisJfQogCiAJaWYgKHNkcC0+c2RfdmZzLT5zX2ZsYWdzICYgTVNfU1lOQ0hST05PVVMpCiAJCWdmczJfbG9nX2ZsdXNoKHNkcCwgTlVMTCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3V0aWwuYyBiL2ZzL2dmczIvdXRpbC5jCmluZGV4IDM3NGY1MGUuLjlkMTJiMTEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvdXRpbC5jCisrKyBiL2ZzL2dmczIvdXRpbC5jCkBAIC0xMyw3ICsxMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2dmczJfb25kaXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvbG1faW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgImdmczIuaCIKQEAgLTM1LDYgKzM0LDggQEAKIAogaW50IGdmczJfbG1fd2l0aGRyYXcoc3RydWN0IGdmczJfc2JkICpzZHAsIGNoYXIgKmZtdCwgLi4uKQogeworCXN0cnVjdCBsbV9sb2Nrc3RydWN0ICpscyA9ICZzZHAtPnNkX2xvY2tzdHJ1Y3Q7CisJY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKmxtID0gbHMtPmxzX29wczsKIAl2YV9saXN0IGFyZ3M7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChTREZfU0hVVERPV04sICZzZHAtPnNkX2ZsYWdzKSkKQEAgLTQ3LDggKzQ4LDEyIEBACiAJZnNfZXJyKHNkcCwgImFib3V0IHRvIHdpdGhkcmF3IHRoaXMgZmlsZSBzeXN0ZW1cbiIpOwogCUJVR19PTihzZHAtPnNkX2FyZ3MuYXJfZGVidWcpOwogCi0JZnNfZXJyKHNkcCwgInRlbGxpbmcgTE0gdG8gd2l0aGRyYXdcbiIpOwotCWdmczJfd2l0aGRyYXdfbG9ja3Byb3RvKCZzZHAtPnNkX2xvY2tzdHJ1Y3QpOworCWtvYmplY3RfdWV2ZW50KCZzZHAtPnNkX2tvYmosIEtPQkpfT0ZGTElORSk7CisKKwlpZiAobG0tPmxtX3VubW91bnQpIHsKKwkJZnNfZXJyKHNkcCwgInRlbGxpbmcgTE0gdG8gdW5tb3VudFxuIik7CisJCWxtLT5sbV91bm1vdW50KHNkcCk7CisJfQogCWZzX2VycihzZHAsICJ3aXRoZHJhd25cbiIpOwogCWR1bXBfc3RhY2soKTsKIApkaWZmIC0tZ2l0IGEvZnMvaGZzL2hmc19mcy5oIGIvZnMvaGZzL2hmc19mcy5oCmluZGV4IDk5NTUyMzIuLjA1MjM4N2UgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9oZnNfZnMuaAorKysgYi9mcy9oZnMvaGZzX2ZzLmgKQEAgLTIxMyw3ICsyMTMsNyBAQAogZXh0ZXJuIGludCBoZnNfcGFydF9maW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWN0b3JfdCAqLCBzZWN0b3JfdCAqKTsKIAogLyogc3RyaW5nLmMgKi8KLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzX2RlbnRyeV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAKIGV4dGVybiBpbnQgaGZzX2hhc2hfZGVudHJ5KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CiBleHRlcm4gaW50IGhmc19zdHJjbXAoY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBpbnQsCmRpZmYgLS1naXQgYS9mcy9oZnMvc3lzZGVwLmMgYi9mcy9oZnMvc3lzZGVwLmMKaW5kZXggNWJmODllYy4uNzQ3OGY1YyAxMDA2NDQKLS0tIGEvZnMvaGZzL3N5c2RlcC5jCisrKyBiL2ZzL2hmcy9zeXNkZXAuYwpAQCAtMzEsNyArMzEsNyBAQAogCXJldHVybiAxOwogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzX2RlbnRyeV9vcGVyYXRpb25zID0KK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNfZGVudHJ5X29wZXJhdGlvbnMgPQogewogCS5kX3JldmFsaWRhdGUJPSBoZnNfcmV2YWxpZGF0ZV9kZW50cnksCiAJLmRfaGFzaAkJPSBoZnNfaGFzaF9kZW50cnksCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaCBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCmluZGV4IGYwMjdhOTAuLjVjMTBkODAgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCisrKyBiL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oCkBAIC0zMjcsNyArMzI3LDcgQEAKIC8qIGlub2RlLmMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9uczsKIAogdm9pZCBoZnNwbHVzX2lub2RlX3JlYWRfZm9yayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKik7CiB2b2lkIGhmc3BsdXNfaW5vZGVfd3JpdGVfZm9yayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGhmc3BsdXNfZm9ya19yYXcgKik7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2lub2RlLmMgYi9mcy9oZnNwbHVzL2lub2RlLmMKaW5kZXggZjEwNWVlOS4uMWJjZjU5NyAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9pbm9kZS5jCisrKyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJLndyaXRlcGFnZXMJPSBoZnNwbHVzX3dyaXRlcGFnZXMsCiB9OwogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBoZnNwbHVzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2ggICAgICAgPSBoZnNwbHVzX2hhc2hfZGVudHJ5LAogCS5kX2NvbXBhcmUgICAgPSBoZnNwbHVzX2NvbXBhcmVfZGVudHJ5LAogfTsKZGlmZiAtLWdpdCBhL2ZzL2hvc3Rmcy9ob3N0ZnNfa2Vybi5jIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKaW5kZXggNWM1MzhlMC4uZmUwMmFkNCAxMDA2NDQKLS0tIGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKKysrIGIvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMKQEAgLTMxLDEyICszMSwxMiBAQAogCiAjZGVmaW5lIEZJTEVfSE9TVEZTX0koZmlsZSkgSE9TVEZTX0koKGZpbGUpLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKQogCi1pbnQgaG9zdGZzX2RfZGVsZXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyBpbnQgaG9zdGZzX2RfZGVsZXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlyZXR1cm4gMTsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhvc3Rmc19kZW50cnlfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBob3N0ZnNfZGVudHJ5X29wcyA9IHsKIAkuZF9kZWxldGUJCT0gaG9zdGZzX2RfZGVsZXRlLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvaHBmcy9kZW50cnkuYyBiL2ZzL2hwZnMvZGVudHJ5LmMKaW5kZXggMDgzMTkxMi4uOTQwZDZkMSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9kZW50cnkuYworKysgYi9mcy9ocGZzL2RlbnRyeS5jCkBAIC00OSw3ICs0OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaHBmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaHBmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9oYXNoCQk9IGhwZnNfaGFzaF9kZW50cnksCiAJLmRfY29tcGFyZQk9IGhwZnNfY29tcGFyZV9kZW50cnksCiB9OwpkaWZmIC0tZ2l0IGEvZnMvaW5vZGUuYyBiL2ZzL2lub2RlLmMKaW5kZXggODI2ZmIwYi4uZDA2ZDZkMiAxMDA2NDQKLS0tIGEvZnMvaW5vZGUuYworKysgYi9mcy9pbm9kZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgpAQCAtMTQ3LDEzICsxNDgsMTMgQEAKIAlpbm9kZS0+aV9jZGV2ID0gTlVMTDsKIAlpbm9kZS0+aV9yZGV2ID0gMDsKIAlpbm9kZS0+ZGlydGllZF93aGVuID0gMDsKLQlpZiAoc2VjdXJpdHlfaW5vZGVfYWxsb2MoaW5vZGUpKSB7Ci0JCWlmIChpbm9kZS0+aV9zYi0+c19vcC0+ZGVzdHJveV9pbm9kZSkKLQkJCWlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKGlub2RlKTsKLQkJZWxzZQotCQkJa21lbV9jYWNoZV9mcmVlKGlub2RlX2NhY2hlcCwgKGlub2RlKSk7Ci0JCXJldHVybiBOVUxMOwotCX0KKworCWlmIChzZWN1cml0eV9pbm9kZV9hbGxvYyhpbm9kZSkpCisJCWdvdG8gb3V0X2ZyZWVfaW5vZGU7CisKKwkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpX2ludGVncml0eSAqLworCWlmIChpbWFfaW5vZGVfYWxsb2MoaW5vZGUpKQorCQlnb3RvIG91dF9mcmVlX3NlY3VyaXR5OwogCiAJc3Bpbl9sb2NrX2luaXQoJmlub2RlLT5pX2xvY2spOwogCWxvY2tkZXBfc2V0X2NsYXNzKCZpbm9kZS0+aV9sb2NrLCAmc2ItPnNfdHlwZS0+aV9sb2NrX2tleSk7CkBAIC0xODksNiArMTkwLDE1IEBACiAJaW5vZGUtPmlfbWFwcGluZyA9IG1hcHBpbmc7CiAKIAlyZXR1cm4gaW5vZGU7CisKK291dF9mcmVlX3NlY3VyaXR5OgorCXNlY3VyaXR5X2lub2RlX2ZyZWUoaW5vZGUpOworb3V0X2ZyZWVfaW5vZGU6CisJaWYgKGlub2RlLT5pX3NiLT5zX29wLT5kZXN0cm95X2lub2RlKQorCQlpbm9kZS0+aV9zYi0+c19vcC0+ZGVzdHJveV9pbm9kZShpbm9kZSk7CisJZWxzZQorCQlrbWVtX2NhY2hlX2ZyZWUoaW5vZGVfY2FjaGVwLCAoaW5vZGUpKTsKKwlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woaW5vZGVfaW5pdF9hbHdheXMpOwogCkBAIC0yODQsNyArMjk0LDcgQEAKIAlCVUdfT04oIShpbm9kZS0+aV9zdGF0ZSAmIElfRlJFRUlORykpOwogCUJVR19PTihpbm9kZS0+aV9zdGF0ZSAmIElfQ0xFQVIpOwogCWlub2RlX3N5bmNfd2FpdChpbm9kZSk7Ci0JRFFVT1RfRFJPUChpbm9kZSk7CisJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCWlmIChpbm9kZS0+aV9zYi0+c19vcC0+Y2xlYXJfaW5vZGUpCiAJCWlub2RlLT5pX3NiLT5zX29wLT5jbGVhcl9pbm9kZShpbm9kZSk7CiAJaWYgKFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkgJiYgaW5vZGUtPmlfYmRldikKQEAgLTM1Niw2ICszNjYsOCBAQAogCQlpZiAodG1wID09IGhlYWQpCiAJCQlicmVhazsKIAkJaW5vZGUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGlub2RlLCBpX3NiX2xpc3QpOworCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykKKwkJCWNvbnRpbnVlOwogCQlpbnZhbGlkYXRlX2lub2RlX2J1ZmZlcnMoaW5vZGUpOwogCQlpZiAoIWF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpIHsKIAkJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgZGlzcG9zZSk7CkBAIC0xMTU4LDcgKzExNzAsNyBAQAogCWlmIChvcC0+ZGVsZXRlX2lub2RlKSB7CiAJCXZvaWQgKCpkZWxldGUpKHN0cnVjdCBpbm9kZSAqKSA9IG9wLT5kZWxldGVfaW5vZGU7CiAJCWlmICghaXNfYmFkX2lub2RlKGlub2RlKSkKLQkJCURRVU9UX0lOSVQoaW5vZGUpOworCQkJdmZzX2RxX2luaXQoaW5vZGUpOwogCQkvKiBGaWxlc3lzdGVtcyBpbXBsZW1lbnRpbmcgdGhlaXIgb3duCiAJCSAqIHNfb3AtPmRlbGV0ZV9pbm9kZSBhcmUgcmVxdWlyZWQgdG8gY2FsbAogCQkgKiB0cnVuY2F0ZV9pbm9kZV9wYWdlcyBhbmQgY2xlYXJfaW5vZGUoKQpAQCAtMTI5MCw2ICsxMzAyLDQwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGJtYXApOwogCisvKgorICogV2l0aCByZWxhdGl2ZSBhdGltZSwgb25seSB1cGRhdGUgYXRpbWUgaWYgdGhlIHByZXZpb3VzIGF0aW1lIGlzCisgKiBlYXJsaWVyIHRoYW4gZWl0aGVyIHRoZSBjdGltZSBvciBtdGltZSBvciBpZiBhdCBsZWFzdCBhIGRheSBoYXMKKyAqIHBhc3NlZCBzaW5jZSB0aGUgbGFzdCBhdGltZSB1cGRhdGUuCisgKi8KK3N0YXRpYyBpbnQgcmVsYXRpbWVfbmVlZF91cGRhdGUoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgIHN0cnVjdCB0aW1lc3BlYyBub3cpCit7CisKKwlpZiAoIShtbnQtPm1udF9mbGFncyAmIE1OVF9SRUxBVElNRSkpCisJCXJldHVybiAxOworCS8qCisJICogSXMgbXRpbWUgeW91bmdlciB0aGFuIGF0aW1lPyBJZiB5ZXMsIHVwZGF0ZSBhdGltZToKKwkgKi8KKwlpZiAodGltZXNwZWNfY29tcGFyZSgmaW5vZGUtPmlfbXRpbWUsICZpbm9kZS0+aV9hdGltZSkgPj0gMCkKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiBJcyBjdGltZSB5b3VuZ2VyIHRoYW4gYXRpbWU/IElmIHllcywgdXBkYXRlIGF0aW1lOgorCSAqLworCWlmICh0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9jdGltZSwgJmlub2RlLT5pX2F0aW1lKSA+PSAwKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogSXMgdGhlIHByZXZpb3VzIGF0aW1lIHZhbHVlIG9sZGVyIHRoYW4gYSBkYXk/IElmIHllcywKKwkgKiB1cGRhdGUgYXRpbWU6CisJICovCisJaWYgKChsb25nKShub3cudHZfc2VjIC0gaW5vZGUtPmlfYXRpbWUudHZfc2VjKSA+PSAyNCo2MCo2MCkKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiBHb29kLCB3ZSBjYW4gc2tpcCB0aGUgYXRpbWUgdXBkYXRlOgorCSAqLworCXJldHVybiAwOworfQorCiAvKioKICAqCXRvdWNoX2F0aW1lCS0JdXBkYXRlIHRoZSBhY2Nlc3MgdGltZQogICoJQG1udDogbW91bnQgdGhlIGlub2RlIGlzIGFjY2Vzc2VkIG9uCkBAIC0xMzE3LDE3ICsxMzYzLDEyIEBACiAJCWdvdG8gb3V0OwogCWlmICgobW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9ESVJBVElNRSkgJiYgU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJZ290byBvdXQ7Ci0JaWYgKG1udC0+bW50X2ZsYWdzICYgTU5UX1JFTEFUSU1FKSB7Ci0JCS8qCi0JCSAqIFdpdGggcmVsYXRpdmUgYXRpbWUsIG9ubHkgdXBkYXRlIGF0aW1lIGlmIHRoZSBwcmV2aW91cwotCQkgKiBhdGltZSBpcyBlYXJsaWVyIHRoYW4gZWl0aGVyIHRoZSBjdGltZSBvciBtdGltZS4KLQkJICovCi0JCWlmICh0aW1lc3BlY19jb21wYXJlKCZpbm9kZS0+aV9tdGltZSwgJmlub2RlLT5pX2F0aW1lKSA8IDAgJiYKLQkJICAgIHRpbWVzcGVjX2NvbXBhcmUoJmlub2RlLT5pX2N0aW1lLCAmaW5vZGUtPmlfYXRpbWUpIDwgMCkKLQkJCWdvdG8gb3V0OwotCX0KIAogCW5vdyA9IGN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7CisKKwlpZiAoIXJlbGF0aW1lX25lZWRfdXBkYXRlKG1udCwgaW5vZGUsIG5vdykpCisJCWdvdG8gb3V0OworCiAJaWYgKHRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9hdGltZSwgJm5vdykpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9mcy9pb2N0bC5jIGIvZnMvaW9jdGwuYwppbmRleCAyNDBlYzYzOS4uYWMyZDQ3ZSAxMDA2NDQKLS0tIGEvZnMvaW9jdGwuYworKysgYi9mcy9pb2N0bC5jCkBAIC00MDQsMTAgKzQwNCwxMiBAQAogCWlmIChPX05PTkJMT0NLICE9IE9fTkRFTEFZKQogCQlmbGFnIHw9IE9fTkRFTEFZOwogI2VuZGlmCisJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOwogCWlmIChvbikKIAkJZmlscC0+Zl9mbGFncyB8PSBmbGFnOwogCWVsc2UKIAkJZmlscC0+Zl9mbGFncyAmPSB+ZmxhZzsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTQyNSwxOCArNDI3LDEyIEBACiAJLyogRGlkIEZBU1lOQyBzdGF0ZSBjaGFuZ2UgPyAqLwogCWlmICgoZmxhZyBeIGZpbHAtPmZfZmxhZ3MpICYgRkFTWU5DKSB7CiAJCWlmIChmaWxwLT5mX29wICYmIGZpbHAtPmZfb3AtPmZhc3luYykKKwkJCS8qIGZhc3luYygpIGFkanVzdHMgZmlscC0+Zl9mbGFncyAqLwogCQkJZXJyb3IgPSBmaWxwLT5mX29wLT5mYXN5bmMoZmQsIGZpbHAsIG9uKTsKIAkJZWxzZQogCQkJZXJyb3IgPSAtRU5PVFRZOwogCX0KLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWlmIChvbikKLQkJZmlscC0+Zl9mbGFncyB8PSBGQVNZTkM7Ci0JZWxzZQotCQlmaWxwLT5mX2ZsYWdzICY9IH5GQVNZTkM7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiBlcnJvciA8IDAgPyBlcnJvciA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgaW9jdGxfZnNmcmVlemUoc3RydWN0IGZpbGUgKmZpbHApCkBAIC00OTksMTcgKzQ5NSwxMSBAQAogCQlicmVhazsKIAogCWNhc2UgRklPTkJJTzoKLQkJLyogQktMIG5lZWRlZCB0byBhdm9pZCByYWNlcyB0d2Vha2luZyBmX2ZsYWdzICovCi0JCWxvY2tfa2VybmVsKCk7CiAJCWVycm9yID0gaW9jdGxfZmlvbmJpbyhmaWxwLCBhcmdwKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlicmVhazsKIAogCWNhc2UgRklPQVNZTkM6Ci0JCS8qIEJLTCBuZWVkZWQgdG8gYXZvaWQgcmFjZXMgdHdlYWtpbmcgZl9mbGFncyAqLwotCQlsb2NrX2tlcm5lbCgpOwogCQllcnJvciA9IGlvY3RsX2Zpb2FzeW5jKGZkLCBmaWxwLCBhcmdwKTsKLQkJdW5sb2NrX2tlcm5lbCgpOwogCQlicmVhazsKIAogCWNhc2UgRklPUVNJWkU6CmRpZmYgLS1naXQgYS9mcy9pc29mcy9pbm9kZS5jIGIvZnMvaXNvZnMvaW5vZGUuYwppbmRleCA2MTQ3ZWMzLi4xM2QyZWRkIDEwMDY0NAotLS0gYS9mcy9pc29mcy9pbm9kZS5jCisrKyBiL2ZzL2lzb2ZzL2lub2RlLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGlzb2ZzX2RlbnRyeV9vcHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaXNvZnNfZGVudHJ5X29wc1tdID0gewogCXsKIAkJLmRfaGFzaAkJPSBpc29mc19oYXNoLAogCQkuZF9jb21wYXJlCT0gaXNvZnNfZGVudHJ5X2NtcCwKZGlmZiAtLWdpdCBhL2ZzL2pmcy9hY2wuYyBiL2ZzL2pmcy9hY2wuYwppbmRleCBkM2U1YzMzLi5hMTY2YzE2IDEwMDY0NAotLS0gYS9mcy9qZnMvYWNsLmMKKysrIGIvZnMvamZzL2FjbC5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAogCWlmICgoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgaWF0dHItPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpIHx8CiAJICAgIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCAmJiBpYXR0ci0+aWFfZ2lkICE9IGlub2RlLT5pX2dpZCkpIHsKLQkJaWYgKERRVU9UX1RSQU5TRkVSKGlub2RlLCBpYXR0cikpCisJCWlmICh2ZnNfZHFfdHJhbnNmZXIoaW5vZGUsIGlhdHRyKSkKIAkJCXJldHVybiAtRURRVU9UOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvamZzL2lub2RlLmMgYi9mcy9qZnMvaW5vZGUuYwppbmRleCBiMDBlZTlmLi5iMmFlMTkwIDEwMDY0NAotLS0gYS9mcy9qZnMvaW5vZGUuYworKysgYi9mcy9qZnMvaW5vZGUuYwpAQCAtMTU4LDkgKzE1OCw5IEBACiAJCS8qCiAJCSAqIEZyZWUgdGhlIGlub2RlIGZyb20gdGhlIHF1b3RhIGFsbG9jYXRpb24uCiAJCSAqLwotCQlEUVVPVF9JTklUKGlub2RlKTsKLQkJRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7Ci0JCURRVU9UX0RST1AoaW5vZGUpOworCQl2ZnNfZHFfaW5pdChpbm9kZSk7CisJCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwkJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCX0KIAogCWNsZWFyX2lub2RlKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZHRyZWUuYyBiL2ZzL2pmcy9qZnNfZHRyZWUuYwppbmRleCA0ZGNjMDU4Li45MjU4NzFlIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2R0cmVlLmMKKysrIGIvZnMvamZzL2pmc19kdHJlZS5jCkBAIC0zODEsMTAgKzM4MSwxMCBAQAogCQkgKiBJdCdzIHRpbWUgdG8gbW92ZSB0aGUgaW5saW5lIHRhYmxlIHRvIGFuIGV4dGVybmFsCiAJCSAqIHBhZ2UgYW5kIGJlZ2luIHRvIGJ1aWxkIHRoZSB4dHJlZQogCQkgKi8KLQkJaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlwLCBzYmktPm5icGVycGFnZSkpCisJCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIHNiaS0+bmJwZXJwYWdlKSkKIAkJCWdvdG8gY2xlYW5fdXA7CiAJCWlmIChkYkFsbG9jKGlwLCAwLCBzYmktPm5icGVycGFnZSwgJnhhZGRyKSkgewotCQkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgc2JpLT5uYnBlcnBhZ2UpOworCQkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHNiaS0+bmJwZXJwYWdlKTsKIAkJCWdvdG8gY2xlYW5fdXA7CiAJCX0KIApAQCAtNDA4LDcgKzQwOCw3IEBACiAJCQltZW1jcHkoJmpmc19pcC0+aV9kaXJ0YWJsZSwgdGVtcF90YWJsZSwKIAkJCSAgICAgICBzaXplb2YgKHRlbXBfdGFibGUpKTsKIAkJCWRiRnJlZShpcCwgeGFkZHIsIHNiaS0+bmJwZXJwYWdlKTsKLQkJCURRVU9UX0ZSRUVfQkxPQ0soaXAsIHNiaS0+bmJwZXJwYWdlKTsKKwkJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBzYmktPm5icGVycGFnZSk7CiAJCQlnb3RvIGNsZWFuX3VwOwogCQl9CiAJCWlwLT5pX3NpemUgPSBQU0laRTsKQEAgLTEwMjcsNyArMTAyNyw3IEBACiAJCQluID0geGxlbjsKIAogCQkvKiBBbGxvY2F0ZSBibG9ja3MgdG8gcXVvdGEuICovCi0JCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpcCwgbikpIHsKKwkJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpcCwgbikpIHsKIAkJCXJjID0gLUVEUVVPVDsKIAkJCWdvdG8gZXh0ZW5kT3V0OwogCQl9CkBAIC0xMzA4LDcgKzEzMDgsNyBAQAogCiAJLyogUm9sbGJhY2sgcXVvdGEgYWxsb2NhdGlvbiAqLwogCWlmIChyYyAmJiBxdW90YV9hbGxvY2F0aW9uKQotCQlEUVVPVF9GUkVFX0JMT0NLKGlwLCBxdW90YV9hbGxvY2F0aW9uKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHF1b3RhX2FsbG9jYXRpb24pOwogCiAgICAgICBkdFNwbGl0VXBfRXhpdDoKIApAQCAtMTM2OSw3ICsxMzY5LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAKIAkvKiBBbGxvY2F0ZSBibG9ja3MgdG8gcXVvdGEuICovCi0JaWYgKERRVU9UX0FMTE9DX0JMT0NLKGlwLCBsZW5ndGhQWEQocHhkKSkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBsZW5ndGhQWEQocHhkKSkpIHsKIAkJcmVsZWFzZV9tZXRhcGFnZShybXApOwogCQlyZXR1cm4gLUVEUVVPVDsKIAl9CkBAIC0xOTE2LDcgKzE5MTYsNyBAQAogCXJwID0gcm1wLT5kYXRhOwogCiAJLyogQWxsb2NhdGUgYmxvY2tzIHRvIHF1b3RhLiAqLwotCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpcCwgbGVuZ3RoUFhEKHB4ZCkpKSB7CisJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpcCwgbGVuZ3RoUFhEKHB4ZCkpKSB7CiAJCXJlbGVhc2VfbWV0YXBhZ2Uocm1wKTsKIAkJcmV0dXJuIC1FRFFVT1Q7CiAJfQpAQCAtMjI4Nyw3ICsyMjg3LDcgQEAKIAl4bGVuID0gbGVuZ3RoUFhEKCZmcC0+aGVhZGVyLnNlbGYpOwogCiAJLyogRnJlZSBxdW90YSBhbGxvY2F0aW9uLiAqLwotCURRVU9UX0ZSRUVfQkxPQ0soaXAsIHhsZW4pOworCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCB4bGVuKTsKIAogCS8qIGZyZWUvaW52YWxpZGF0ZSBpdHMgYnVmZmVyIHBhZ2UgKi8KIAlkaXNjYXJkX21ldGFwYWdlKGZtcCk7CkBAIC0yMzYzLDcgKzIzNjMsNyBAQAogCQkJCXhsZW4gPSBsZW5ndGhQWEQoJnAtPmhlYWRlci5zZWxmKTsKIAogCQkJCS8qIEZyZWUgcXVvdGEgYWxsb2NhdGlvbiAqLwotCQkJCURRVU9UX0ZSRUVfQkxPQ0soaXAsIHhsZW4pOworCQkJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCB4bGVuKTsKIAogCQkJCS8qIGZyZWUvaW52YWxpZGF0ZSBpdHMgYnVmZmVyIHBhZ2UgKi8KIAkJCQlkaXNjYXJkX21ldGFwYWdlKG1wKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZXh0ZW50LmMgYi9mcy9qZnMvamZzX2V4dGVudC5jCmluZGV4IDdhZTFlMzIuLjE2OTgwMmUgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZXh0ZW50LmMKKysrIGIvZnMvamZzL2pmc19leHRlbnQuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJfQogCiAJLyogQWxsb2NhdGUgYmxvY2tzIHRvIHF1b3RhLiAqLwotCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpcCwgbnhsZW4pKSB7CisJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpcCwgbnhsZW4pKSB7CiAJCWRiRnJlZShpcCwgbnhhZGRyLCAoczY0KSBueGxlbik7CiAJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKIAkJcmV0dXJuIC1FRFFVT1Q7CkBAIC0xNjQsNyArMTY0LDcgQEAKIAkgKi8KIAlpZiAocmMpIHsKIAkJZGJGcmVlKGlwLCBueGFkZHIsIG54bGVuKTsKLQkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgbnhsZW4pOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgbnhsZW4pOwogCQltdXRleF91bmxvY2soJkpGU19JUChpcCktPmNvbW1pdF9tdXRleCk7CiAJCXJldHVybiAocmMpOwogCX0KQEAgLTI1Niw3ICsyNTYsNyBAQAogCQlnb3RvIGV4aXQ7CiAKIAkvKiBBbGxvY2F0IGJsb2NrcyB0byBxdW90YS4gKi8KLQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaXAsIG54bGVuKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIG54bGVuKSkgewogCQlkYkZyZWUoaXAsIG54YWRkciwgKHM2NCkgbnhsZW4pOwogCQltdXRleF91bmxvY2soJkpGU19JUChpcCktPmNvbW1pdF9tdXRleCk7CiAJCXJldHVybiAtRURRVU9UOwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJCS8qIGV4dGVuZCB0aGUgZXh0ZW50ICovCiAJCWlmICgocmMgPSB4dEV4dGVuZCgwLCBpcCwgeG9mZiArIHhsZW4sIChpbnQpIG5leHRlbmQsIDApKSkgewogCQkJZGJGcmVlKGlwLCB4YWRkciArIHhsZW4sIGRlbHRhKTsKLQkJCURRVU9UX0ZSRUVfQkxPQ0soaXAsIG54bGVuKTsKKwkJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBueGxlbik7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9IGVsc2UgewpAQCAtMzA4LDcgKzMwOCw3IEBACiAJCSAqLwogCQlpZiAoKHJjID0geHRUYWlsZ2F0ZSgwLCBpcCwgeG9mZiwgKGludCkgbnRhaWwsIG54YWRkciwgMCkpKSB7CiAJCQlkYkZyZWUoaXAsIG54YWRkciwgbnhsZW4pOwotCQkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgbnhsZW4pOworCQkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIG54bGVuKTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfaW5vZGUuYyBiL2ZzL2pmcy9qZnNfaW5vZGUuYwppbmRleCBkNGQxNDJjLi5kYzBlMDIxIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2lub2RlLmMKKysrIGIvZnMvamZzL2pmc19pbm9kZS5jCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkvKgogCSAqIEFsbG9jYXRlIGlub2RlIHRvIHF1b3RhLgogCSAqLwotCWlmIChEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2lub2RlKGlub2RlKSkgewogCQlyYyA9IC1FRFFVT1Q7CiAJCWdvdG8gZmFpbF9kcm9wOwogCX0KQEAgLTE2Miw3ICsxNjIsNyBAQAogCXJldHVybiBpbm9kZTsKIAogZmFpbF9kcm9wOgotCURRVU9UX0RST1AoaW5vZGUpOworCXZmc19kcV9kcm9wKGlub2RlKTsKIAlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEE7CiBmYWlsX3VubG9jazoKIAlpbm9kZS0+aV9ubGluayA9IDA7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2lub2RlLmggYi9mcy9qZnMvamZzX2lub2RlLmgKaW5kZXggYWRiMmZhZi4uMWVmZjdkYiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbm9kZS5oCisrKyBiL2ZzL2pmcy9qZnNfaW5vZGUuaApAQCAtNDcsNSArNDcsNSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGpmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqZnNfZmlsZV9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGpmc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGpmc19jaV9kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zOwogI2VuZGlmCQkJCS8qIF9IX0pGU19JTk9ERSAqLwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc194dHJlZS5jIGIvZnMvamZzL2pmc194dHJlZS5jCmluZGV4IGFlM2FjYWYuLmEyN2UyNmMgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfeHRyZWUuYworKysgYi9mcy9qZnMvamZzX3h0cmVlLmMKQEAgLTg0NiwxMCArODQ2LDEwIEBACiAJCQloaW50ID0gYWRkcmVzc1hBRCh4YWQpICsgbGVuZ3RoWEFEKHhhZCkgLSAxOwogCQl9IGVsc2UKIAkJCWhpbnQgPSAwOwotCQlpZiAoKHJjID0gRFFVT1RfQUxMT0NfQkxPQ0soaXAsIHhsZW4pKSkKKwkJaWYgKChyYyA9IHZmc19kcV9hbGxvY19ibG9jayhpcCwgeGxlbikpKQogCQkJZ290byBvdXQ7CiAJCWlmICgocmMgPSBkYkFsbG9jKGlwLCBoaW50LCAoczY0KSB4bGVuLCAmeGFkZHIpKSkgewotCQkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgeGxlbik7CisJCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgeGxlbik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTg3OCw3ICs4NzgsNyBAQAogCQkJLyogdW5kbyBkYXRhIGV4dGVudCBhbGxvY2F0aW9uICovCiAJCQlpZiAoKnhhZGRycCA9PSAwKSB7CiAJCQkJZGJGcmVlKGlwLCB4YWRkciwgKHM2NCkgeGxlbik7Ci0JCQkJRFFVT1RfRlJFRV9CTE9DSyhpcCwgeGxlbik7CisJCQkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHhsZW4pOwogCQkJfQogCQkJcmV0dXJuIHJjOwogCQl9CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQAogCXJibiA9IGFkZHJlc3NQWEQocHhkKTsKIAogCS8qIEFsbG9jYXRlIGJsb2NrcyB0byBxdW90YS4gKi8KLQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaXAsIGxlbmd0aFBYRChweGQpKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIGxlbmd0aFBYRChweGQpKSkgewogCQlyYyA9IC1FRFFVT1Q7CiAJCWdvdG8gY2xlYW5fdXA7CiAJfQpAQCAtMTQ1Niw3ICsxNDU2LDcgQEAKIAogCS8qIFJvbGxiYWNrIHF1b3RhIGFsbG9jYXRpb24uICovCiAJaWYgKHF1b3RhX2FsbG9jYXRpb24pCi0JCURRVU9UX0ZSRUVfQkxPQ0soaXAsIHF1b3RhX2FsbG9jYXRpb24pOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgcXVvdGFfYWxsb2NhdGlvbik7CiAKIAlyZXR1cm4gKHJjKTsKIH0KQEAgLTE1MTMsNyArMTUxMyw3IEBACiAJCXJldHVybiAtRUlPOwogCiAJLyogQWxsb2NhdGUgYmxvY2tzIHRvIHF1b3RhLiAqLwotCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpcCwgbGVuZ3RoUFhEKHB4ZCkpKSB7CisJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpcCwgbGVuZ3RoUFhEKHB4ZCkpKSB7CiAJCXJlbGVhc2VfbWV0YXBhZ2Uocm1wKTsKIAkJcmV0dXJuIC1FRFFVT1Q7CiAJfQpAQCAtMzk0MSw3ICszOTQxLDcgQEAKIAkJaXAtPmlfc2l6ZSA9IG5ld3NpemU7CiAKIAkvKiB1cGRhdGUgcXVvdGEgYWxsb2NhdGlvbiB0byByZWZsZWN0IGZyZWVkIGJsb2NrcyAqLwotCURRVU9UX0ZSRUVfQkxPQ0soaXAsIG5mcmVlZCk7CisJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIG5mcmVlZCk7CiAKIAkvKgogCSAqIGZyZWUgdGxvY2sgb2YgaW52YWxpZGF0ZWQgcGFnZXMKZGlmZiAtLWdpdCBhL2ZzL2pmcy9uYW1laS5jIGIvZnMvamZzL25hbWVpLmMKaW5kZXggYjRkZTU2Yi4uNTE0ZWUyZSAxMDA2NDQKLS0tIGEvZnMvamZzL25hbWVpLmMKKysrIGIvZnMvamZzL25hbWVpLmMKQEAgLTM1LDcgKzM1LDcgQEAKIC8qCiAgKiBmb3J3YXJkIHJlZmVyZW5jZXMKICAqLwotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGpmc19jaV9kZW50cnlfb3BlcmF0aW9uczsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBqZnNfY2lfZGVudHJ5X29wZXJhdGlvbnM7CiAKIHN0YXRpYyBzNjQgY29tbWl0WmVyb0xpbmsodGlkX3QsIHN0cnVjdCBpbm9kZSAqKTsKIApAQCAtMzU2LDcgKzM1Niw3IEBACiAJamZzX2luZm8oImpmc19ybWRpcjogZGlwOjB4JXAgbmFtZTolcyIsIGRpcCwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAkvKiBJbml0IGlub2RlIGZvciBxdW90YSBvcGVyYXRpb25zLiAqLwotCURRVU9UX0lOSVQoaXApOworCXZmc19kcV9pbml0KGlwKTsKIAogCS8qIGRpcmVjdG9yeSBtdXN0IGJlIGVtcHR5IHRvIGJlIHJlbW92ZWQgKi8KIAlpZiAoIWR0RW1wdHkoaXApKSB7CkBAIC00ODMsNyArNDgzLDcgQEAKIAlqZnNfaW5mbygiamZzX3VubGluazogZGlwOjB4JXAgbmFtZTolcyIsIGRpcCwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAkvKiBJbml0IGlub2RlIGZvciBxdW90YSBvcGVyYXRpb25zLiAqLwotCURRVU9UX0lOSVQoaXApOworCXZmc19kcV9pbml0KGlwKTsKIAogCWlmICgocmMgPSBnZXRfVUNTbmFtZSgmZG5hbWUsIGRlbnRyeSkpKQogCQlnb3RvIG91dDsKQEAgLTExMzYsNyArMTEzNiw3IEBACiAJfSBlbHNlIGlmIChuZXdfaXApIHsKIAkJSVdSSVRFX0xPQ0sobmV3X2lwLCBSRFdSTE9DS19OT1JNQUwpOwogCQkvKiBJbml0IGlub2RlIGZvciBxdW90YSBvcGVyYXRpb25zLiAqLwotCQlEUVVPVF9JTklUKG5ld19pcCk7CisJCXZmc19kcV9pbml0KG5ld19pcCk7CiAJfQogCiAJLyoKQEAgLTE1OTUsNyArMTU5NSw3IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGpmc19jaV9kZW50cnlfb3BlcmF0aW9ucyA9Citjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgamZzX2NpX2RlbnRyeV9vcGVyYXRpb25zID0KIHsKIAkuZF9oYXNoID0gamZzX2NpX2hhc2gsCiAJLmRfY29tcGFyZSA9IGpmc19jaV9jb21wYXJlLApkaWZmIC0tZ2l0IGEvZnMvamZzL3hhdHRyLmMgYi9mcy9qZnMveGF0dHIuYwppbmRleCA5YjdmMmNkLi42MWRmYTgxIDEwMDY0NAotLS0gYS9mcy9qZnMveGF0dHIuYworKysgYi9mcy9qZnMveGF0dHIuYwpAQCAtMjYwLDE0ICsyNjAsMTQgQEAKIAluYmxvY2tzID0gKHNpemUgKyAoc2ItPnNfYmxvY2tzaXplIC0gMSkpID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCiAJLyogQWxsb2NhdGUgbmV3IGJsb2NrcyB0byBxdW90YS4gKi8KLQlpZiAoRFFVT1RfQUxMT0NfQkxPQ0soaXAsIG5ibG9ja3MpKSB7CisJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpcCwgbmJsb2NrcykpIHsKIAkJcmV0dXJuIC1FRFFVT1Q7CiAJfQogCiAJcmMgPSBkYkFsbG9jKGlwLCBJTk9ISU5UKGlwKSwgbmJsb2NrcywgJmJsa25vKTsKIAlpZiAocmMpIHsKIAkJLypSb2xsYmFjayBxdW90YSBhbGxvY2F0aW9uLiAqLwotCQlEUVVPVF9GUkVFX0JMT0NLKGlwLCBuYmxvY2tzKTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIG5ibG9ja3MpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0zMzIsNyArMzMyLDcgQEAKIAogICAgICAgZmFpbGVkOgogCS8qIFJvbGxiYWNrIHF1b3RhIGFsbG9jYXRpb24uICovCi0JRFFVT1RfRlJFRV9CTE9DSyhpcCwgbmJsb2Nrcyk7CisJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIG5ibG9ja3MpOwogCiAJZGJGcmVlKGlwLCBibGtubywgbmJsb2Nrcyk7CiAJcmV0dXJuIHJjOwpAQCAtNTM4LDcgKzUzOCw3IEBACiAKIAlpZiAoYmxvY2tzX25lZWRlZCA+IGN1cnJlbnRfYmxvY2tzKSB7CiAJCS8qIEFsbG9jYXRlIG5ldyBibG9ja3MgdG8gcXVvdGEuICovCi0JCWlmIChEUVVPVF9BTExPQ19CTE9DSyhpbm9kZSwgYmxvY2tzX25lZWRlZCkpCisJCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIGJsb2Nrc19uZWVkZWQpKQogCQkJcmV0dXJuIC1FRFFVT1Q7CiAKIAkJcXVvdGFfYWxsb2NhdGlvbiA9IGJsb2Nrc19uZWVkZWQ7CkBAIC02MDIsNyArNjAyLDcgQEAKICAgICAgIGNsZWFuX3VwOgogCS8qIFJvbGxiYWNrIHF1b3RhIGFsbG9jYXRpb24gKi8KIAlpZiAocXVvdGFfYWxsb2NhdGlvbikKLQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgcXVvdGFfYWxsb2NhdGlvbik7CisJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBxdW90YV9hbGxvY2F0aW9uKTsKIAogCXJldHVybiAocmMpOwogfQpAQCAtNjc3LDcgKzY3Nyw3IEBACiAKIAkvKiBJZiBvbGQgYmxvY2tzIGV4aXN0LCB0aGV5IG11c3QgYmUgcmVtb3ZlZCBmcm9tIHF1b3RhIGFsbG9jYXRpb24uICovCiAJaWYgKG9sZF9ibG9ja3MpCi0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIG9sZF9ibG9ja3MpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgb2xkX2Jsb2Nrcyk7CiAKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIApkaWZmIC0tZ2l0IGEvZnMvbGliZnMuYyBiL2ZzL2xpYmZzLmMKaW5kZXggNDliNDQwOS4uNDkxMGEzNiAxMDA2NDQKLS0tIGEvZnMvbGliZnMuYworKysgYi9mcy9saWJmcy5jCkBAIC00NCw3ICs0NCw3IEBACiAgKi8KIHN0cnVjdCBkZW50cnkgKnNpbXBsZV9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0Jc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzaW1wbGVfZGVudHJ5X29wZXJhdGlvbnMgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzaW1wbGVfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJCS5kX2RlbGV0ZSA9IHNpbXBsZV9kZWxldGVfZGVudHJ5LAogCX07CiAKQEAgLTI0Miw3ICsyNDIsOCBAQAogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCByb290KTsKIAlzLT5zX3Jvb3QgPSBkZW50cnk7CiAJcy0+c19mbGFncyB8PSBNU19BQ1RJVkU7Ci0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgcyk7CisJc2ltcGxlX3NldF9tbnQobW50LCBzKTsKKwlyZXR1cm4gMDsKIAogRW5vbWVtOgogCXVwX3dyaXRlKCZzLT5zX3Vtb3VudCk7CmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuYwppbmRleCBkMWQxZWI4Li42MTg4NjViIDEwMDY0NAotLS0gYS9mcy9taW5peC9pbm9kZS5jCisrKyBiL2ZzL21pbml4L2lub2RlLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiAgTGludXMgVG9ydmFsZHMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk2ICBHZXJ0amFuIHZhbiBXaW5nZXJkZSAgICAoZ2VydGphbkBjcy52dS5ubCkKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTYgIEdlcnRqYW4gdmFuIFdpbmdlcmRlCiAgKglNaW5peCBWMiBmcyBzdXBwb3J0LgogICoKICAqICBNb2RpZmllZCBmb3IgNjgweDAgYnkgQW5kcmVhcyBTY2h3YWIKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IGJiYzE1YzIuLmQwNDBjZTEgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2ltYS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgpAQCAtODUwLDYgKzg1MSw4IEBACiAJCWlmIChlcnIgPT0gLUVBR0FJTikKIAkJCWVyciA9IGlub2RlX3Blcm1pc3Npb24obmQtPnBhdGguZGVudHJ5LT5kX2lub2RlLAogCQkJCQkgICAgICAgTUFZX0VYRUMpOworCQlpZiAoIWVycikKKwkJCWVyciA9IGltYV9wYXRoX2NoZWNrKCZuZC0+cGF0aCwgTUFZX0VYRUMpOwogIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCkBAIC0xNDcwLDcgKzE0NzMsNyBAQAogCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKLQlEUVVPVF9JTklUKGRpcik7CisJdmZzX2RxX2luaXQoZGlyKTsKIAllcnJvciA9IGRpci0+aV9vcC0+Y3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBuZCk7CiAJaWYgKCFlcnJvcikKIAkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKQEAgLTE0ODYsMjkgKzE0ODksMzIgQEAKIAlpZiAoIWlub2RlKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKQorCXN3aXRjaCAoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRkxOSzoKIAkJcmV0dXJuIC1FTE9PUDsKLQkKLQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSAmJiAoYWNjX21vZGUgJiBNQVlfV1JJVEUpKQotCQlyZXR1cm4gLUVJU0RJUjsKLQotCS8qCi0JICogRklGTydzLCBzb2NrZXRzIGFuZCBkZXZpY2UgZmlsZXMgYXJlIHNwZWNpYWw6IHRoZXkgZG9uJ3QKLQkgKiBhY3R1YWxseSBsaXZlIG9uIHRoZSBmaWxlc3lzdGVtIGl0c2VsZiwgYW5kIGFzIHN1Y2ggeW91Ci0JICogY2FuIHdyaXRlIHRvIHRoZW0gZXZlbiBpZiB0aGUgZmlsZXN5c3RlbSBpcyByZWFkLW9ubHkuCi0JICovCi0JaWYgKFNfSVNGSUZPKGlub2RlLT5pX21vZGUpIHx8IFNfSVNTT0NLKGlub2RlLT5pX21vZGUpKSB7Ci0JICAgIAlmbGFnICY9IH5PX1RSVU5DOwotCX0gZWxzZSBpZiAoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSB8fCBTX0lTQ0hSKGlub2RlLT5pX21vZGUpKSB7CisJY2FzZSBTX0lGRElSOgorCQlpZiAoYWNjX21vZGUgJiBNQVlfV1JJVEUpCisJCQlyZXR1cm4gLUVJU0RJUjsKKwkJYnJlYWs7CisJY2FzZSBTX0lGQkxLOgorCWNhc2UgU19JRkNIUjoKIAkJaWYgKHBhdGgtPm1udC0+bW50X2ZsYWdzICYgTU5UX05PREVWKQogCQkJcmV0dXJuIC1FQUNDRVM7Ci0KKwkJLypGQUxMVEhSVSovCisJY2FzZSBTX0lGSUZPOgorCWNhc2UgU19JRlNPQ0s6CiAJCWZsYWcgJj0gfk9fVFJVTkM7CisJCWJyZWFrOwogCX0KIAogCWVycm9yID0gaW5vZGVfcGVybWlzc2lvbihpbm9kZSwgYWNjX21vZGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSBpbWFfcGF0aF9jaGVjayhwYXRoLAorCQkJICAgICAgIGFjY19tb2RlICYgKE1BWV9SRUFEIHwgTUFZX1dSSVRFIHwgTUFZX0VYRUMpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAkvKgogCSAqIEFuIGFwcGVuZC1vbmx5IGZpbGUgbXVzdCBiZSBvcGVuZWQgaW4gYXBwZW5kIG1vZGUgZm9yIHdyaXRpbmcuCiAJICovCkBAIC0xNTQ0LDcgKzE1NTAsNyBAQAogCQkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX3RydW5jYXRlKHBhdGgsIDAsCiAJCQkJCSAgICAgICBBVFRSX01USU1FfEFUVFJfQ1RJTUV8QVRUUl9PUEVOKTsKIAkJaWYgKCFlcnJvcikgewotCQkJRFFVT1RfSU5JVChpbm9kZSk7CisJCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAKIAkJCWVycm9yID0gZG9fdHJ1bmNhdGUoZGVudHJ5LCAwLAogCQkJCQkgICAgQVRUUl9NVElNRXxBVFRSX0NUSU1FfEFUVFJfT1BFTiwKQEAgLTE1NTUsNyArMTU2MSw3IEBACiAJCQlyZXR1cm4gZXJyb3I7CiAJfSBlbHNlCiAJCWlmIChmbGFnICYgRk1PREVfV1JJVEUpCi0JCQlEUVVPVF9JTklUKGlub2RlKTsKKwkJCXZmc19kcV9pbml0KGlub2RlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTkzOCw3ICsxOTQ0LDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCURRVU9UX0lOSVQoZGlyKTsKKwl2ZnNfZHFfaW5pdChkaXIpOwogCWVycm9yID0gZGlyLT5pX29wLT5ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgZGV2KTsKIAlpZiAoIWVycm9yKQogCQlmc25vdGlmeV9jcmVhdGUoZGlyLCBkZW50cnkpOwpAQCAtMjAzNyw3ICsyMDQzLDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCURRVU9UX0lOSVQoZGlyKTsKKwl2ZnNfZHFfaW5pdChkaXIpOwogCWVycm9yID0gZGlyLT5pX29wLT5ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKCFlcnJvcikKIAkJZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpOwpAQCAtMjEyMyw3ICsyMTI5LDcgQEAKIAlpZiAoIWRpci0+aV9vcC0+cm1kaXIpCiAJCXJldHVybiAtRVBFUk07CiAKLQlEUVVPVF9JTklUKGRpcik7CisJdmZzX2RxX2luaXQoZGlyKTsKIAogCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJZGVudHJ5X3VuaGFzaChkZW50cnkpOwpAQCAtMjIxMCw3ICsyMjE2LDcgQEAKIAlpZiAoIWRpci0+aV9vcC0+dW5saW5rKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JRFFVT1RfSU5JVChkaXIpOworCXZmc19kcV9pbml0KGRpcik7CiAKIAltdXRleF9sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChkX21vdW50cG9pbnQoZGVudHJ5KSkKQEAgLTIzMjEsNyArMjMyNyw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlEUVVPVF9JTklUKGRpcik7CisJdmZzX2RxX2luaXQoZGlyKTsKIAllcnJvciA9IGRpci0+aV9vcC0+c3ltbGluayhkaXIsIGRlbnRyeSwgb2xkbmFtZSk7CiAJaWYgKCFlcnJvcikKIAkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKQEAgLTI0MDUsNyArMjQxMSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlEUVVPVF9JTklUKGRpcik7CisJdmZzX2RxX2luaXQoZGlyKTsKIAllcnJvciA9IGRpci0+aV9vcC0+bGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyb3IpCkBAIC0yNjA0LDggKzI2MTAsOCBAQAogCWlmICghb2xkX2Rpci0+aV9vcC0+cmVuYW1lKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JRFFVT1RfSU5JVChvbGRfZGlyKTsKLQlEUVVPVF9JTklUKG5ld19kaXIpOworCXZmc19kcV9pbml0KG9sZF9kaXIpOworCXZmc19kcV9pbml0KG5ld19kaXIpOwogCiAJb2xkX25hbWUgPSBmc25vdGlmeV9vbGRuYW1lX2luaXQob2xkX2RlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCmRpZmYgLS1naXQgYS9mcy9uYW1lc3BhY2UuYyBiL2ZzL25hbWVzcGFjZS5jCmluZGV4IDA2ZjhlNjMuLjBhNDJlMGUgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVzcGFjZS5jCisrKyBiL2ZzL25hbWVzcGFjZS5jCkBAIC0zOTcsMTEgKzM5NywxMCBAQAogCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIH0KIAotaW50IHNpbXBsZV9zZXRfbW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQordm9pZCBzaW1wbGVfc2V0X21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAltbnQtPm1udF9zYiA9IHNiOwogCW1udC0+bW50X3Jvb3QgPSBkZ2V0KHNiLT5zX3Jvb3QpOwotCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9zZXRfbW50KTsKQEAgLTc4MCw2ICs3NzksNyBAQAogCQl7IE1OVF9OT0FUSU1FLCAiLG5vYXRpbWUiIH0sCiAJCXsgTU5UX05PRElSQVRJTUUsICIsbm9kaXJhdGltZSIgfSwKIAkJeyBNTlRfUkVMQVRJTUUsICIscmVsYXRpbWUiIH0sCisJCXsgTU5UX1NUUklDVEFUSU1FLCAiLHN0cmljdGF0aW1lIiB9LAogCQl7IDAsIE5VTEwgfQogCX07CiAJY29uc3Qgc3RydWN0IHByb2NfZnNfaW5mbyAqZnNfaW5mb3A7CkBAIC0xOTE5LDYgKzE5MTksOSBAQAogCWlmIChkYXRhX3BhZ2UpCiAJCSgoY2hhciAqKWRhdGFfcGFnZSlbUEFHRV9TSVpFIC0gMV0gPSAwOwogCisJLyogRGVmYXVsdCB0byByZWxhdGltZSAqLworCW1udF9mbGFncyB8PSBNTlRfUkVMQVRJTUU7CisKIAkvKiBTZXBhcmF0ZSB0aGUgcGVyLW1vdW50cG9pbnQgZmxhZ3MgKi8KIAlpZiAoZmxhZ3MgJiBNU19OT1NVSUQpCiAJCW1udF9mbGFncyB8PSBNTlRfTk9TVUlEOwpAQCAtMTkzMCwxMyArMTkzMywxNCBAQAogCQltbnRfZmxhZ3MgfD0gTU5UX05PQVRJTUU7CiAJaWYgKGZsYWdzICYgTVNfTk9ESVJBVElNRSkKIAkJbW50X2ZsYWdzIHw9IE1OVF9OT0RJUkFUSU1FOwotCWlmIChmbGFncyAmIE1TX1JFTEFUSU1FKQotCQltbnRfZmxhZ3MgfD0gTU5UX1JFTEFUSU1FOworCWlmIChmbGFncyAmIE1TX1NUUklDVEFUSU1FKQorCQltbnRfZmxhZ3MgJj0gfihNTlRfUkVMQVRJTUUgfCBNTlRfTk9BVElNRSk7CiAJaWYgKGZsYWdzICYgTVNfUkRPTkxZKQogCQltbnRfZmxhZ3MgfD0gTU5UX1JFQURPTkxZOwogCiAJZmxhZ3MgJj0gfihNU19OT1NVSUQgfCBNU19OT0VYRUMgfCBNU19OT0RFViB8IE1TX0FDVElWRSB8Ci0JCSAgIE1TX05PQVRJTUUgfCBNU19OT0RJUkFUSU1FIHwgTVNfUkVMQVRJTUV8IE1TX0tFUk5NT1VOVCk7CisJCSAgIE1TX05PQVRJTUUgfCBNU19OT0RJUkFUSU1FIHwgTVNfUkVMQVRJTUV8IE1TX0tFUk5NT1VOVCB8CisJCSAgIE1TX1NUUklDVEFUSU1FKTsKIAogCS8qIC4uLiBhbmQgZ2V0IHRoZSBtb3VudHBvaW50ICovCiAJcmV0dmFsID0ga2Vybl9wYXRoKGRpcl9uYW1lLCBMT09LVVBfRk9MTE9XLCAmcGF0aCk7CmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9kaXIuYyBiL2ZzL25jcGZzL2Rpci5jCmluZGV4IDA3ZTk3MTUuLjljNTkwNzIgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2Rpci5jCisrKyBiL2ZzL25jcGZzL2Rpci5jCkBAIC03OSw3ICs3OSw3IEBACiBzdGF0aWMgaW50IG5jcF9jb21wYXJlX2RlbnRyeSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcXN0ciAqKTsKIHN0YXRpYyBpbnQgbmNwX2RlbGV0ZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqKTsKIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuY3BfZGVudHJ5X29wZXJhdGlvbnMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuY3BfZGVudHJ5X29wZXJhdGlvbnMgPQogewogCS5kX3JldmFsaWRhdGUJPSBuY3BfbG9va3VwX3ZhbGlkYXRlLAogCS5kX2hhc2gJCT0gbmNwX2hhc2hfZGVudHJ5LApAQCAtODcsNyArODcsNyBAQAogCS5kX2RlbGV0ZQk9IG5jcF9kZWxldGVfZGVudHJ5LAogfTsKIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5jcF9yb290X2RlbnRyeV9vcGVyYXRpb25zID0KK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuY3Bfcm9vdF9kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfaGFzaAkJPSBuY3BfaGFzaF9kZW50cnksCiAJLmRfY29tcGFyZQk9IG5jcF9jb21wYXJlX2RlbnRyeSwKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXIuYyBiL2ZzL25mcy9kaXIuYwppbmRleCA2NzIzNjhmLi43OGJmNzJmIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyLmMKKysrIGIvZnMvbmZzL2Rpci5jCkBAIC04OTksNyArODk5LDcgQEAKIAlpcHV0KGlub2RlKTsKIH0KIAotc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5mc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfcmV2YWxpZGF0ZQk9IG5mc19sb29rdXBfcmV2YWxpZGF0ZSwKIAkuZF9kZWxldGUJPSBuZnNfZGVudHJ5X2RlbGV0ZSwKIAkuZF9pcHV0CQk9IG5mc19kZW50cnlfaXB1dCwKQEAgLTk2Nyw3ICs5NjcsNyBAQAogI2lmZGVmIENPTkZJR19ORlNfVjQKIHN0YXRpYyBpbnQgbmZzX29wZW5fcmV2YWxpZGF0ZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuYW1laWRhdGEgKik7CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuZnM0X2RlbnRyeV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5mczRfZGVudHJ5X29wZXJhdGlvbnMgPSB7CiAJLmRfcmV2YWxpZGF0ZQk9IG5mc19vcGVuX3JldmFsaWRhdGUsCiAJLmRfZGVsZXRlCT0gbmZzX2RlbnRyeV9kZWxldGUsCiAJLmRfaXB1dAkJPSBuZnNfZGVudHJ5X2lwdXQsCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNF9mcy5oIGIvZnMvbmZzL25mczRfZnMuaAppbmRleCA0ZTRkMzMyLi44NDM0NWRlIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNF9mcy5oCisrKyBiL2ZzL25mcy9uZnM0X2ZzLmgKQEAgLTE3OSw3ICsxNzksNyBAQAogCWludCAoKnJlY292ZXJfbG9jaykoc3RydWN0IG5mczRfc3RhdGUgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzNF9kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgbmZzNF9kZW50cnlfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuZnM0X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCiAvKiBpbm9kZS5jICovCmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCA2ZTUwYWFhLi43ODM3NmI2IDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTM1Niw3ICszNTYsNyBAQAogCQkJcHV0X3dyaXRlX2FjY2Vzcyhpbm9kZSk7CiAJCQlnb3RvIG91dF9uZnNlcnI7CiAJCX0KLQkJRFFVT1RfSU5JVChpbm9kZSk7CisJCXZmc19kcV9pbml0KGlub2RlKTsKIAl9CiAKIAkvKiBzYW5pdGl6ZSB0aGUgbW9kZSBjaGFuZ2UgKi8KQEAgLTcyMyw3ICs3MjMsNyBAQAogCQllbHNlCiAJCQlmbGFncyA9IE9fV1JPTkxZfE9fTEFSR0VGSUxFOwogCi0JCURRVU9UX0lOSVQoaW5vZGUpOworCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAJfQogCSpmaWxwID0gZGVudHJ5X29wZW4oZGdldChkZW50cnkpLCBtbnRnZXQoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KSwKIAkJCSAgICBmbGFncywgY3JlZCk7CkBAIC05OTgsOCArOTk4LDExIEBACiAKIAlpZiAoIUVYX0lTU1lOQyhleHApKQogCQlzdGFibGUgPSAwOwotCWlmIChzdGFibGUgJiYgIUVYX1dHQVRIRVIoZXhwKSkKKwlpZiAoc3RhYmxlICYmICFFWF9XR0FUSEVSKGV4cCkpIHsKKwkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fU1lOQzsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CisJfQogCiAJLyogV3JpdGUgdGhlIGRhdGEuICovCiAJb2xkZnMgPSBnZXRfZnMoKTsgc2V0X2ZzKEtFUk5FTF9EUyk7CmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5LmMgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5LmMKaW5kZXggMzMxZjJlOC4uMjIwYzEzZiAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeS5jCisrKyBiL2ZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnkuYwpAQCAtMzgwLDYgKzM4MCwxNCBAQAogCQlzdHJ1Y3QgbGlzdF9oZWFkICp3YXRjaGVzOwogCiAJCS8qCisJCSAqIFdlIGNhbm5vdCBfX2lnZXQoKSBhbiBpbm9kZSBpbiBzdGF0ZSBJX0NMRUFSLCBJX0ZSRUVJTkcsCisJCSAqIElfV0lMTF9GUkVFLCBvciBJX05FVyB3aGljaCBpcyBmaW5lIGJlY2F1c2UgYnkgdGhhdCBwb2ludAorCQkgKiB0aGUgaW5vZGUgY2Fubm90IGhhdmUgYW55IGFzc29jaWF0ZWQgd2F0Y2hlcy4KKwkJICovCisJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0NMRUFSfElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCisJCQljb250aW51ZTsKKworCQkvKgogCQkgKiBJZiBpX2NvdW50IGlzIHplcm8sIHRoZSBpbm9kZSBjYW5ub3QgaGF2ZSBhbnkgd2F0Y2hlcyBhbmQKIAkJICogZG9pbmcgYW4gX19pZ2V0L2lwdXQgd2l0aCBNU19BQ1RJVkUgY2xlYXIgd291bGQgYWN0dWFsbHkKIAkJICogZXZpY3QgYWxsIGlub2RlcyB3aXRoIHplcm8gaV9jb3VudCBmcm9tIGljYWNoZSB3aGljaCBpcwpAQCAtMzg4LDE0ICszOTYsNiBAQAogCQlpZiAoIWF0b21pY19yZWFkKCZpbm9kZS0+aV9jb3VudCkpCiAJCQljb250aW51ZTsKIAotCQkvKgotCQkgKiBXZSBjYW5ub3QgX19pZ2V0KCkgYW4gaW5vZGUgaW4gc3RhdGUgSV9DTEVBUiwgSV9GUkVFSU5HLCBvcgotCQkgKiBJX1dJTExfRlJFRSB3aGljaCBpcyBmaW5lIGJlY2F1c2UgYnkgdGhhdCBwb2ludCB0aGUgaW5vZGUKLQkJICogY2Fubm90IGhhdmUgYW55IGFzc29jaWF0ZWQgd2F0Y2hlcy4KLQkJICovCi0JCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0NMRUFSIHwgSV9GUkVFSU5HIHwgSV9XSUxMX0ZSRUUpKQotCQkJY29udGludWU7Ci0KIAkJbmVlZF9pcHV0X3RtcCA9IG5lZWRfaXB1dDsKIAkJbmVlZF9pcHV0ID0gTlVMTDsKIAkJLyogSW4gY2FzZSBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoKSBkcm9wcyBhIHJlZmVyZW5jZS4gKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RjYWNoZS5jIGIvZnMvb2NmczIvZGNhY2hlLmMKaW5kZXggZTlkN2MyMC4uN2Q2MDQ0OCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGNhY2hlLmMKKysrIGIvZnMvb2NmczIvZGNhY2hlLmMKQEAgLTQ1NSw3ICs0NTUsNyBAQAogCWRfbW92ZShkZW50cnksIHRhcmdldCk7CiB9CiAKLXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBvY2ZzMl9kZW50cnlfb3BzID0geworY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG9jZnMyX2RlbnRyeV9vcHMgPSB7CiAJLmRfcmV2YWxpZGF0ZQkJPSBvY2ZzMl9kZW50cnlfcmV2YWxpZGF0ZSwKIAkuZF9pcHV0CQkJPSBvY2ZzMl9kZW50cnlfaXB1dCwKIH07CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kY2FjaGUuaCBiL2ZzL29jZnMyL2RjYWNoZS5oCmluZGV4IGQwNmUxNmMuLmZhYTEyZTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RjYWNoZS5oCisrKyBiL2ZzL29jZnMyL2RjYWNoZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZuZGVmIE9DRlMyX0RDQUNIRV9ICiAjZGVmaW5lIE9DRlMyX0RDQUNIRV9ICiAKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgb2NmczJfZGVudHJ5X29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgb2NmczJfZGVudHJ5X29wczsKIAogc3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrIHsKIAkvKiBVc2UgY291bnQgb2YgZGVudHJ5IGxvY2sgKi8KZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCBhM2E3OGNlLi43NWI2MTY3IDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC0yNzMsNyArMjczLDcgQEAKIAlpZiAoIWVycm9yKQogCQllcnJvciA9IHNlY3VyaXR5X3BhdGhfdHJ1bmNhdGUoJnBhdGgsIGxlbmd0aCwgMCk7CiAJaWYgKCFlcnJvcikgewotCQlEUVVPVF9JTklUKGlub2RlKTsKKwkJdmZzX2RxX2luaXQoaW5vZGUpOwogCQllcnJvciA9IGRvX3RydW5jYXRlKHBhdGguZGVudHJ5LCBsZW5ndGgsIDAsIE5VTEwpOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9jaGVjay5jIGIvZnMvcGFydGl0aW9ucy9jaGVjay5jCmluZGV4IDZkNzIwMjQuLjM4ZTMzN2QgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvY2hlY2suYworKysgYi9mcy9wYXJ0aXRpb25zL2NoZWNrLmMKQEAgLTQwMCw3ICs0MDAsNyBAQAogCXBkZXYtPmRldnQgPSBkZXZ0OwogCiAJLyogZGVsYXkgdWV2ZW50IHVudGlsICdob2xkZXJzJyBzdWJkaXIgaXMgY3JlYXRlZCAqLwotCXBkZXYtPnVldmVudF9zdXBwcmVzcyA9IDE7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MocGRldiwgMSk7CiAJZXJyID0gZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9wdXQ7CkBAIC00MTAsNyArNDEwLDcgQEAKIAlpZiAoIXAtPmhvbGRlcl9kaXIpCiAJCWdvdG8gb3V0X2RlbDsKIAotCXBkZXYtPnVldmVudF9zdXBwcmVzcyA9IDA7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MocGRldiwgMCk7CiAJaWYgKGZsYWdzICYgQUREUEFSVF9GTEFHX1dIT0xFRElTSykgewogCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUocGRldiwgJmRldl9hdHRyX3dob2xlX2Rpc2spOwogCQlpZiAoZXJyKQpAQCAtNDIyLDcgKzQyMiw3IEBACiAJcmN1X2Fzc2lnbl9wb2ludGVyKHB0YmwtPnBhcnRbcGFydG5vXSwgcCk7CiAKIAkvKiBzdXBwcmVzcyB1ZXZlbnQgaWYgdGhlIGRpc2sgc3VwcmVzc2VzIGl0ICovCi0JaWYgKCFkZGV2LT51ZXZlbnRfc3VwcHJlc3MpCisJaWYgKCFkZXZfZ2V0X3VldmVudF9zdXBwcmVzcyhwZGV2KSkKIAkJa29iamVjdF91ZXZlbnQoJnBkZXYtPmtvYmosIEtPQkpfQUREKTsKIAogCXJldHVybiBwOwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJZGV2X3NldF9uYW1lKGRkZXYsIGRpc2stPmRpc2tfbmFtZSk7CiAKIAkvKiBkZWxheSB1ZXZlbnRzLCB1bnRpbCB3ZSBzY2FubmVkIHBhcnRpdGlvbiB0YWJsZSAqLwotCWRkZXYtPnVldmVudF9zdXBwcmVzcyA9IDE7CisJZGV2X3NldF91ZXZlbnRfc3VwcHJlc3MoZGRldiwgMSk7CiAKIAlpZiAoZGV2aWNlX2FkZChkZGV2KSkKIAkJcmV0dXJuOwpAQCAtNDkwLDcgKzQ5MCw3IEBACiAKIGV4aXQ6CiAJLyogYW5ub3VuY2UgZGlzayBhZnRlciBwb3NzaWJsZSBwYXJ0aXRpb25zIGFyZSBjcmVhdGVkICovCi0JZGRldi0+dWV2ZW50X3N1cHByZXNzID0gMDsKKwlkZXZfc2V0X3VldmVudF9zdXBwcmVzcyhkZGV2LCAwKTsKIAlrb2JqZWN0X3VldmVudCgmZGRldi0+a29iaiwgS09CSl9BREQpOwogCiAJLyogYW5ub3VuY2UgcG9zc2libGUgcGFydGl0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9pYm0uYyBiL2ZzL3BhcnRpdGlvbnMvaWJtLmMKaW5kZXggMWUwNjRjNC4uNDYyOTc2OCAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9pYm0uYworKysgYi9mcy9wYXJ0aXRpb25zL2libS5jCkBAIC0yMSwyMCArMjEsMzggQEAKICAqIGNvbXB1dGUgdGhlIGJsb2NrIG51bWJlciBmcm9tIGEKICAqIGN5bC1jeWwtaGVhZC1oZWFkIHN0cnVjdHVyZQogICovCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIHNlY3Rvcl90CiBjY2hoMmJsayAoc3RydWN0IHZ0b2NfY2NoaCAqcHRyLCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykgewotICAgICAgICByZXR1cm4gcHRyLT5jYyAqIGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgKwotCSAgICAgICBwdHItPmhoICogZ2VvLT5zZWN0b3JzOworCisJc2VjdG9yX3QgY3lsOworCV9fdTE2IGhlYWQ7CisKKwkvKmRlY29kZSBjeWxpbmRlciBhbmQgaGVhZHMgZm9yIGxhcmdlIHZvbHVtZXMgKi8KKwljeWwgPSBwdHItPmhoICYgMHhGRkYwOworCWN5bCA8PD0gMTI7CisJY3lsIHw9IHB0ci0+Y2M7CisJaGVhZCA9IHB0ci0+aGggJiAweDAwMEY7CisJcmV0dXJuIGN5bCAqIGdlby0+aGVhZHMgKiBnZW8tPnNlY3RvcnMgKworCSAgICAgICBoZWFkICogZ2VvLT5zZWN0b3JzOwogfQogCiAvKgogICogY29tcHV0ZSB0aGUgYmxvY2sgbnVtYmVyIGZyb20gYQogICogY3lsLWN5bC1oZWFkLWhlYWQtYmxvY2sgc3RydWN0dXJlCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgc2VjdG9yX3QKIGNjaGhiMmJsayAoc3RydWN0IHZ0b2NfY2NoaGIgKnB0ciwgc3RydWN0IGhkX2dlb21ldHJ5ICpnZW8pIHsKLSAgICAgICAgcmV0dXJuIHB0ci0+Y2MgKiBnZW8tPmhlYWRzICogZ2VvLT5zZWN0b3JzICsKLQkJcHRyLT5oaCAqIGdlby0+c2VjdG9ycyArCisKKwlzZWN0b3JfdCBjeWw7CisJX191MTYgaGVhZDsKKworCS8qZGVjb2RlIGN5bGluZGVyIGFuZCBoZWFkcyBmb3IgbGFyZ2Ugdm9sdW1lcyAqLworCWN5bCA9IHB0ci0+aGggJiAweEZGRjA7CisJY3lsIDw8PSAxMjsKKwljeWwgfD0gcHRyLT5jYzsKKwloZWFkID0gcHRyLT5oaCAmIDB4MDAwRjsKKwlyZXR1cm4JY3lsICogZ2VvLT5oZWFkcyAqIGdlby0+c2VjdG9ycyArCisJCWhlYWQgKiBnZW8tPnNlY3RvcnMgKwogCQlwdHItPmI7CiB9CiAKQEAgLTQzLDE0ICs2MSwxNSBAQAogaW50CiBpYm1fcGFydGl0aW9uKHN0cnVjdCBwYXJzZWRfcGFydGl0aW9ucyAqc3RhdGUsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCiB7Ci0JaW50IGJsb2Nrc2l6ZSwgb2Zmc2V0LCBzaXplLHJlczsKLQlsb2ZmX3QgaV9zaXplOworCWludCBibG9ja3NpemUsIHJlczsKKwlsb2ZmX3QgaV9zaXplLCBvZmZzZXQsIHNpemUsIGZtdF9zaXplOwogCWRhc2RfaW5mb3JtYXRpb24yX3QgKmluZm87CiAJc3RydWN0IGhkX2dlb21ldHJ5ICpnZW87CiAJY2hhciB0eXBlWzVdID0gezAsfTsKIAljaGFyIG5hbWVbN10gPSB7MCx9OwogCXVuaW9uIGxhYmVsX3QgewotCQlzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWwgdm9sOworCQlzdHJ1Y3QgdnRvY192b2x1bWVfbGFiZWxfY2RsIHZvbDsKKwkJc3RydWN0IHZ0b2Nfdm9sdW1lX2xhYmVsX2xkbCBsbng7CiAJCXN0cnVjdCB2dG9jX2Ntc19sYWJlbCBjbXM7CiAJfSAqbGFiZWw7CiAJdW5zaWduZWQgY2hhciAqZGF0YTsKQEAgLTg1LDE0ICsxMDQsMTYgQEAKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIG91dF9yZWFkZXJyOwogCi0Jc3RybmNweSAodHlwZSwgZGF0YSwgNCk7Ci0JaWYgKCghaW5mby0+RkJBX2xheW91dCkgJiYgKCFzdHJjbXAoaW5mby0+dHlwZSwgIkVDS0QiKSkpCi0JCXN0cm5jcHkobmFtZSwgZGF0YSArIDgsIDYpOwotCWVsc2UKLQkJc3RybmNweShuYW1lLCBkYXRhICsgNCwgNik7CiAJbWVtY3B5KGxhYmVsLCBkYXRhLCBzaXplb2YodW5pb24gbGFiZWxfdCkpOwogCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwogCisJaWYgKCghaW5mby0+RkJBX2xheW91dCkgJiYgKCFzdHJjbXAoaW5mby0+dHlwZSwgIkVDS0QiKSkpIHsKKwkJc3RybmNweSh0eXBlLCBsYWJlbC0+dm9sLnZvbGxibCwgNCk7CisJCXN0cm5jcHkobmFtZSwgbGFiZWwtPnZvbC52b2xpZCwgNik7CisJfSBlbHNlIHsKKwkJc3RybmNweSh0eXBlLCBsYWJlbC0+bG54LnZvbGxibCwgNCk7CisJCXN0cm5jcHkobmFtZSwgbGFiZWwtPmxueC52b2xpZCwgNik7CisJfQogCUVCQ0FTQyh0eXBlLCA0KTsKIAlFQkNBU0MobmFtZSwgNik7CiAKQEAgLTExMCwzNiArMTMxLDU0IEBACiAJCQkvKgogCQkJICogVk0gc3R5bGUgQ01TMSBsYWJlbGVkIGRpc2sKIAkJCSAqLworCQkJYmxvY2tzaXplID0gbGFiZWwtPmNtcy5ibG9ja19zaXplOwogCQkJaWYgKGxhYmVsLT5jbXMuZGlza19vZmZzZXQgIT0gMCkgewogCQkJCXByaW50aygiQ01TMS8lOHMoTURTSyk6IiwgbmFtZSk7CiAJCQkJLyogZGlzayBpcyByZXNlcnZlZCBtaW5pZGlzayAqLwotCQkJCWJsb2Nrc2l6ZSA9IGxhYmVsLT5jbXMuYmxvY2tfc2l6ZTsKIAkJCQlvZmZzZXQgPSBsYWJlbC0+Y21zLmRpc2tfb2Zmc2V0OwogCQkJCXNpemUgPSAobGFiZWwtPmNtcy5ibG9ja19jb3VudCAtIDEpCiAJCQkJCSogKGJsb2Nrc2l6ZSA+PiA5KTsKIAkJCX0gZWxzZSB7CiAJCQkJcHJpbnRrKCJDTVMxLyU4czoiLCBuYW1lKTsKIAkJCQlvZmZzZXQgPSAoaW5mby0+bGFiZWxfYmxvY2sgKyAxKTsKLQkJCQlzaXplID0gaV9zaXplID4+IDk7CisJCQkJc2l6ZSA9IGxhYmVsLT5jbXMuYmxvY2tfY291bnQKKwkJCQkJKiAoYmxvY2tzaXplID4+IDkpOwogCQkJfQotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIE9sZCBzdHlsZSBMTlgxIG9yIHVubGFiZWxlZCBkaXNrCi0JCQkgKi8KLQkJCWlmIChzdHJuY21wKHR5cGUsICJMTlgxIiwgNCkgPT0gMCkKLQkJCQlwcmludGsgKCJMTlgxLyU4czoiLCBuYW1lKTsKLQkJCWVsc2UKLQkJCQlwcmludGsoIihub25sKSIpOwotCQkJb2Zmc2V0ID0gKGluZm8tPmxhYmVsX2Jsb2NrICsgMSk7Ci0JCQlzaXplID0gaV9zaXplID4+IDk7Ci0JCX0KLQkJcHV0X3BhcnRpdGlvbihzdGF0ZSwgMSwgb2Zmc2V0KihibG9ja3NpemUgPj4gOSksCisJCQlwdXRfcGFydGl0aW9uKHN0YXRlLCAxLCBvZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSwKIAkJCQkgICAgICBzaXplLW9mZnNldCooYmxvY2tzaXplID4+IDkpKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzdHJuY21wKHR5cGUsICJMTlgxIiwgNCkgPT0gMCkgeworCQkJCXByaW50aygiTE5YMS8lOHM6IiwgbmFtZSk7CisJCQkJaWYgKGxhYmVsLT5sbngubGRsX3ZlcnNpb24gPT0gMHhmMikgeworCQkJCQlmbXRfc2l6ZSA9IGxhYmVsLT5sbnguZm9ybWF0dGVkX2Jsb2NrcworCQkJCQkJKiAoYmxvY2tzaXplID4+IDkpOworCQkJCX0gZWxzZSBpZiAoIXN0cmNtcChpbmZvLT50eXBlLCAiRUNLRCIpKSB7CisJCQkJCS8qIGZvcm1hdGVkIHcvbyBsYXJnZSB2b2x1bWUgc3VwcG9ydCAqLworCQkJCQlmbXRfc2l6ZSA9IGdlby0+Y3lsaW5kZXJzICogZ2VvLT5oZWFkcworCQkJCQkgICAgICAqIGdlby0+c2VjdG9ycyAqIChibG9ja3NpemUgPj4gOSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogb2xkIGxhYmVsIGFuZCBubyB1c2FibGUgZGlzayBnZW9tZXRyeQorCQkJCQkgKiAoZS5nLiBESUFHKSAqLworCQkJCQlmbXRfc2l6ZSA9IGlfc2l6ZSA+PiA5OworCQkJCX0KKwkJCQlzaXplID0gaV9zaXplID4+IDk7CisJCQkJaWYgKGZtdF9zaXplIDwgc2l6ZSkKKwkJCQkJc2l6ZSA9IGZtdF9zaXplOworCQkJCW9mZnNldCA9IChpbmZvLT5sYWJlbF9ibG9jayArIDEpOworCQkJfSBlbHNlIHsKKwkJCQkvKiB1bmxhYmVsZWQgZGlzayAqLworCQkJCXByaW50aygiKG5vbmwpIik7CisJCQkJc2l6ZSA9IGlfc2l6ZSA+PiA5OworCQkJCW9mZnNldCA9IChpbmZvLT5sYWJlbF9ibG9jayArIDEpOworCQkJfQorCQkJcHV0X3BhcnRpdGlvbihzdGF0ZSwgMSwgb2Zmc2V0KihibG9ja3NpemUgPj4gOSksCisJCQkJICAgICAgc2l6ZS1vZmZzZXQqKGJsb2Nrc2l6ZSA+PiA5KSk7CisJCX0KIAl9IGVsc2UgaWYgKGluZm8tPmZvcm1hdCA9PSBEQVNEX0ZPUk1BVF9DREwpIHsKIAkJLyoKIAkJICogTmV3IHN0eWxlIENETCBmb3JtYXR0ZWQgZGlzawogCQkgKi8KLQkJdW5zaWduZWQgaW50IGJsazsKKwkJc2VjdG9yX3QgYmxrOwogCQlpbnQgY291bnRlcjsKIAogCQkvKgpAQCAtMTY2LDcgKzIwNSw4IEBACiAJCQkJLyogc2tpcCBGTVQ0IC8gRk1UNSAvIEZNVDcgbGFiZWxzICovCiAJCQkJaWYgKGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzQnXQogCQkJCSAgICB8fCBmMS5EUzFGTVRJRCA9PSBfYXNjZWJjWyc1J10KLQkJCQkgICAgfHwgZjEuRFMxRk1USUQgPT0gX2FzY2ViY1snNyddKSB7CisJCQkJICAgIHx8IGYxLkRTMUZNVElEID09IF9hc2NlYmNbJzcnXQorCQkJCSAgICB8fCBmMS5EUzFGTVRJRCA9PSBfYXNjZWJjWyc5J10pIHsKIAkJCQkJYmxrKys7CiAJCQkJCWRhdGEgPSByZWFkX2Rldl9zZWN0b3IoYmRldiwgYmxrICoKIAkJCQkJCQkgICAgICAgKGJsb2Nrc2l6ZS81MTIpLApAQCAtMTc0LDggKzIxNCw5IEBACiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAotCQkJCS8qIG9ubHkgRk1UMSB2YWxpZCBhdCB0aGlzIHBvaW50ICovCi0JCQkJaWYgKGYxLkRTMUZNVElEICE9IF9hc2NlYmNbJzEnXSkKKwkJCQkvKiBvbmx5IEZNVDEgYW5kIDggbGFiZWxzIHZhbGlkIGF0IHRoaXMgcG9pbnQgKi8KKwkJCQlpZiAoZjEuRFMxRk1USUQgIT0gX2FzY2ViY1snMSddICYmCisJCQkJICAgIGYxLkRTMUZNVElEICE9IF9hc2NlYmNbJzgnXSkKIAkJCQkJYnJlYWs7CiAKIAkJCQkvKiBPSywgd2UgZ290IHZhbGlkIHBhcnRpdGlvbiBkYXRhICovCmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmMKaW5kZXggMTRmNTAyYi4uNGFmN2FhNSAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCisrKyBiL2ZzL3BpcGUuYwpAQCAtNjY3LDEwICs2NjcsNyBAQAogCXJldHZhbCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbHAsIG9uLCAmaW5vZGUtPmlfcGlwZS0+ZmFzeW5jX3JlYWRlcnMpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCi0JaWYgKHJldHZhbCA8IDApCi0JCXJldHVybiByZXR2YWw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiAKQEAgLTY4NCwxMCArNjgxLDcgQEAKIAlyZXR2YWwgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxwLCBvbiwgJmlub2RlLT5pX3BpcGUtPmZhc3luY193cml0ZXJzKTsKIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKIAotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC03MDYsMTEgKzcwMCw3IEBACiAJCQlmYXN5bmNfaGVscGVyKC0xLCBmaWxwLCAwLCAmcGlwZS0+ZmFzeW5jX3JlYWRlcnMpOwogCX0KIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQotCWlmIChyZXR2YWwgPCAwKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogCkBAIC04NzAsNyArODYwLDcgQEAKIAkJCQlkZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwaXBlZnNfZGVudHJ5X29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpcGVmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9kZWxldGUJPSBwaXBlZnNfZGVsZXRlX2RlbnRyeSwKIAkuZF9kbmFtZQk9IHBpcGVmc19kbmFtZSwKIH07CkBAIC0xMDM0LDExICsxMDI0LDYgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCBkb19waXBlKGludCAqZmQpCi17Ci0JcmV0dXJuIGRvX3BpcGVfZmxhZ3MoZmQsIDApOwotfQotCiAvKgogICogc3lzX3BpcGUoKSBpcyB0aGUgbm9ybWFsIEMgY2FsbGluZyBzdGFuZGFyZCBmb3IgY3JlYXRpbmcKICAqIGEgcGlwZS4gSXQncyBub3QgdGhlIHdheSBVbml4IHRyYWRpdGlvbmFsbHkgZG9lcyB0aGlzLCB0aG91Z2guCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IGJlYWEwY2UuLmFlZjZkNTUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0xNTQ1LDcgKzE1NDUsNyBAQAogCXJldHVybiAhcHJvY19waWQoZGVudHJ5LT5kX2lub2RlKS0+dGFza3NbUElEVFlQRV9QSURdLmZpcnN0OwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpZF9kZW50cnlfb3BlcmF0aW9ucyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHBpZF9kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfcmV2YWxpZGF0ZQk9IHBpZF9yZXZhbGlkYXRlLAogCS5kX2RlbGV0ZQk9IHBpZF9kZWxldGVfZGVudHJ5LApAQCAtMTcxNyw3ICsxNzE3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB0aWRfZmRfZGVudHJ5X29wZXJhdGlvbnMgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB0aWRfZmRfZGVudHJ5X29wZXJhdGlvbnMgPQogewogCS5kX3JldmFsaWRhdGUJPSB0aWRfZmRfcmV2YWxpZGF0ZSwKIAkuZF9kZWxldGUJPSBwaWRfZGVsZXRlX2RlbnRyeSwKQEAgLTIzMzksNyArMjMzOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcHJvY19iYXNlX2RlbnRyeV9vcGVyYXRpb25zID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcHJvY19iYXNlX2RlbnRyeV9vcGVyYXRpb25zID0KIHsKIAkuZF9yZXZhbGlkYXRlCT0gcHJvY19iYXNlX3JldmFsaWRhdGUsCiAJLmRfZGVsZXRlCT0gcGlkX2RlbGV0ZV9kZW50cnksCmRpZmYgLS1naXQgYS9mcy9wcm9jL2dlbmVyaWMuYyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCmluZGV4IGRiN2ZhNWMuLjVkMjk4OWUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvZ2VuZXJpYy5jCisrKyBiL2ZzL3Byb2MvZ2VuZXJpYy5jCkBAIC0zNjMsNyArMzYzLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwcm9jX2RlbnRyeV9vcGVyYXRpb25zID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcHJvY19kZW50cnlfb3BlcmF0aW9ucyA9CiB7CiAJLmRfZGVsZXRlCT0gcHJvY19kZWxldGVfZGVudHJ5LAogfTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19zeXNjdGwuYyBiL2ZzL3Byb2MvcHJvY19zeXNjdGwuYwppbmRleCA5NGZjZmZmLi45YjFlNGU5IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Byb2Nfc3lzY3RsLmMKKysrIGIvZnMvcHJvYy9wcm9jX3N5c2N0bC5jCkBAIC03LDcgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwcm9jX3N5c19kZW50cnlfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcHJvY19zeXNfZGVudHJ5X29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3N5c19maWxlX29wZXJhdGlvbnM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY19zeXNfaW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2Nfc3lzX2Rpcl9maWxlX29wZXJhdGlvbnM7CkBAIC0zOTYsNyArMzk2LDcgQEAKIAlyZXR1cm4gIXN5c2N0bF9pc19zZWVuKFBST0NfSShkZW50cnktPmRfaW5vZGUpLT5zeXNjdGwpOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHByb2Nfc3lzX2RlbnRyeV9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBwcm9jX3N5c19kZW50cnlfb3BlcmF0aW9ucyA9IHsKIAkuZF9yZXZhbGlkYXRlCT0gcHJvY19zeXNfcmV2YWxpZGF0ZSwKIAkuZF9kZWxldGUJPSBwcm9jX3N5c19kZWxldGUsCiAJLmRfY29tcGFyZQk9IHByb2Nfc3lzX2NvbXBhcmUsCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Jvb3QuYyBiL2ZzL3Byb2Mvcm9vdC5jCmluZGV4IGY2Mjk5YTIuLjFlMTVhMmIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvcm9vdC5jCisrKyBiL2ZzL3Byb2Mvcm9vdC5jCkBAIC04Myw3ICs4Myw4IEBACiAJCW5zLT5wcm9jX21udCA9IG1udDsKIAl9CiAKLQlyZXR1cm4gc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisJc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHByb2Nfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEuYyBiL2ZzL3F1b3RhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3NmFkYTkuLjAwMDAwMDAKLS0tIGEvZnMvcXVvdGEuYworKysgL2Rldi9udWxsCkBAIC0xLDUxMyArMCwwIEBACi0vKgotICogUXVvdGEgY29kZSBuZWNlc3NhcnkgZXZlbiB3aGVuIFZGUyBxdW90YSBzdXBwb3J0IGlzIG5vdCBjb21waWxlZAotICogaW50byB0aGUga2VybmVsLiAgVGhlIGludGVyZXN0aW5nIHN0dWZmIGlzIG92ZXIgaW4gZHF1b3QuYywgaGVyZQotICogd2UgaGF2ZSBzeW1ib2xzIGZvciBpbml0aWFsIHF1b3RhY3RsKDIpIGhhbmRsaW5nLCB0aGUgc3lzY3RsKDIpCi0gKiB2YXJpYWJsZXMsIGV0YyAtIHRoaW5ncyBuZWVkZWQgZXZlbiB3aGVuIHF1b3RhIHN1cHBvcnQgZGlzYWJsZWQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLS8qIENoZWNrIHZhbGlkaXR5IG9mIGdlbmVyaWMgcXVvdGFjdGwgY29tbWFuZHMgKi8KLXN0YXRpYyBpbnQgZ2VuZXJpY19xdW90YWN0bF92YWxpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGNtZCwgcWlkX3QgaWQpCi17Ci0JaWYgKHR5cGUgPj0gTUFYUVVPVEFTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIXNiICYmIGNtZCAhPSBRX1NZTkMpCi0JCXJldHVybiAtRU5PREVWOwotCS8qIElzIG9wZXJhdGlvbiBzdXBwb3J0ZWQ/ICovCi0JaWYgKHNiICYmICFzYi0+c19xY29wKQotCQlyZXR1cm4gLUVOT1NZUzsKLQotCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgUV9HRVRGTVQ6Ci0JCQlicmVhazsKLQkJY2FzZSBRX1FVT1RBT046Ci0JCQlpZiAoIXNiLT5zX3Fjb3AtPnF1b3RhX29uKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9RVU9UQU9GRjoKLQkJCWlmICghc2ItPnNfcWNvcC0+cXVvdGFfb2ZmKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9TRVRJTkZPOgotCQkJaWYgKCFzYi0+c19xY29wLT5zZXRfaW5mbykKLQkJCQlyZXR1cm4gLUVOT1NZUzsKLQkJCWJyZWFrOwotCQljYXNlIFFfR0VUSU5GTzoKLQkJCWlmICghc2ItPnNfcWNvcC0+Z2V0X2luZm8pCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJY2FzZSBRX1NFVFFVT1RBOgotCQkJaWYgKCFzYi0+c19xY29wLT5zZXRfZHFibGspCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJY2FzZSBRX0dFVFFVT1RBOgotCQkJaWYgKCFzYi0+c19xY29wLT5nZXRfZHFibGspCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJY2FzZSBRX1NZTkM6Ci0JCQlpZiAoc2IgJiYgIXNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMpCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIElzIHF1b3RhIHR1cm5lZCBvbiBmb3IgY29tbWFuZHMgd2hpY2ggbmVlZCBpdD8gKi8KLQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFFfR0VURk1UOgotCQljYXNlIFFfR0VUSU5GTzoKLQkJY2FzZSBRX1NFVElORk86Ci0JCWNhc2UgUV9TRVRRVU9UQToKLQkJY2FzZSBRX0dFVFFVT1RBOgotCQkJLyogVGhpcyBpcyBqdXN0IGluZm9ybWF0aXZlIHRlc3Qgc28gd2UgYXJlIHNhdGlzZmllZCB3aXRob3V0IGEgbG9jayAqLwotCQkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkKLQkJCQlyZXR1cm4gLUVTUkNIOwotCX0KLQotCS8qIENoZWNrIHByaXZpbGVnZXMgKi8KLQlpZiAoY21kID09IFFfR0VUUVVPVEEpIHsKLQkJaWYgKCgodHlwZSA9PSBVU1JRVU9UQSAmJiBjdXJyZW50X2V1aWQoKSAhPSBpZCkgfHwKLQkJICAgICAodHlwZSA9PSBHUlBRVU9UQSAmJiAhaW5fZWdyb3VwX3AoaWQpKSkgJiYKLQkJICAgICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0JZWxzZSBpZiAoY21kICE9IFFfR0VURk1UICYmIGNtZCAhPSBRX1NZTkMgJiYgY21kICE9IFFfR0VUSU5GTykKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQotCXJldHVybiAwOwotfQotCi0vKiBDaGVjayB2YWxpZGl0eSBvZiBYRlMgUXVvdGEgTWFuYWdlciBjb21tYW5kcyAqLwotc3RhdGljIGludCB4cW1fcXVvdGFjdGxfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsIHFpZF90IGlkKQotewotCWlmICh0eXBlID49IFhRTV9NQVhRVU9UQVMpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghc2IpCi0JCXJldHVybiAtRU5PREVWOwotCWlmICghc2ItPnNfcWNvcCkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFFfWFFVT1RBT046Ci0JCWNhc2UgUV9YUVVPVEFPRkY6Ci0JCWNhc2UgUV9YUVVPVEFSTToKLQkJCWlmICghc2ItPnNfcWNvcC0+c2V0X3hzdGF0ZSkKLQkJCQlyZXR1cm4gLUVOT1NZUzsKLQkJCWJyZWFrOwotCQljYXNlIFFfWEdFVFFTVEFUOgotCQkJaWYgKCFzYi0+c19xY29wLT5nZXRfeHN0YXRlKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9YU0VUUUxJTToKLQkJCWlmICghc2ItPnNfcWNvcC0+c2V0X3hxdW90YSkKLQkJCQlyZXR1cm4gLUVOT1NZUzsKLQkJCWJyZWFrOwotCQljYXNlIFFfWEdFVFFVT1RBOgotCQkJaWYgKCFzYi0+c19xY29wLT5nZXRfeHF1b3RhKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9YUVVPVEFTWU5DOgotCQkJaWYgKCFzYi0+c19xY29wLT5xdW90YV9zeW5jKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBDaGVjayBwcml2aWxlZ2VzICovCi0JaWYgKGNtZCA9PSBRX1hHRVRRVU9UQSkgewotCQlpZiAoKCh0eXBlID09IFhRTV9VU1JRVU9UQSAmJiBjdXJyZW50X2V1aWQoKSAhPSBpZCkgfHwKLQkJICAgICAodHlwZSA9PSBYUU1fR1JQUVVPVEEgJiYgIWluX2Vncm91cF9wKGlkKSkpICYmCi0JCSAgICAgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCQlyZXR1cm4gLUVQRVJNOwotCX0gZWxzZSBpZiAoY21kICE9IFFfWEdFVFFTVEFUICYmIGNtZCAhPSBRX1hRVU9UQVNZTkMpIHsKLQkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQotCQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjaGVja19xdW90YWN0bF92YWxpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGNtZCwgcWlkX3QgaWQpCi17Ci0JaW50IGVycm9yOwotCi0JaWYgKFhRTV9DT01NQU5EKGNtZCkpCi0JCWVycm9yID0geHFtX3F1b3RhY3RsX3ZhbGlkKHNiLCB0eXBlLCBjbWQsIGlkKTsKLQllbHNlCi0JCWVycm9yID0gZ2VuZXJpY19xdW90YWN0bF92YWxpZChzYiwgdHlwZSwgY21kLCBpZCk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzZWN1cml0eV9xdW90YWN0bChjbWQsIHR5cGUsIGlkLCBzYik7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCBxdW90YV9zeW5jX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCWludCBjbnQ7Ci0KLQlzYi0+c19xY29wLT5xdW90YV9zeW5jKHNiLCB0eXBlKTsKLQotCWlmIChzYl9kcW9wdChzYiktPmZsYWdzICYgRFFVT1RfUVVPVEFfU1lTX0ZJTEUpCi0JCXJldHVybjsKLQkvKiBUaGlzIGlzIG5vdCB2ZXJ5IGNsZXZlciAoYW5kIGZhc3QpIGJ1dCBjdXJyZW50bHkgSSBkb24ndCBrbm93IGFib3V0Ci0JICogYW55IG90aGVyIHNpbXBsZSB3YXkgb2YgZ2V0dGluZyBxdW90YSBkYXRhIHRvIGRpc2sgYW5kIHdlIG11c3QgZ2V0Ci0JICogdGhlbSB0aGVyZSBmb3IgdXNlcnNwYWNlIHRvIGJlIHZpc2libGUuLi4gKi8KLQlpZiAoc2ItPnNfb3AtPnN5bmNfZnMpCi0JCXNiLT5zX29wLT5zeW5jX2ZzKHNiLCAxKTsKLQlzeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYpOwotCi0JLyoKLQkgKiBOb3cgd2hlbiBldmVyeXRoaW5nIGlzIHdyaXR0ZW4gd2UgY2FuIGRpc2NhcmQgdGhlIHBhZ2VjYWNoZSBzbwotCSAqIHRoYXQgdXNlcnNwYWNlIHNlZXMgdGhlIGNoYW5nZXMuCi0JICovCi0JbXV0ZXhfbG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKLQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJaWYgKHR5cGUgIT0gLTEgJiYgY250ICE9IHR5cGUpCi0JCQljb250aW51ZTsKLQkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCBjbnQpKQotCQkJY29udGludWU7Ci0JCW11dGV4X2xvY2tfbmVzdGVkKCZzYl9kcW9wdChzYiktPmZpbGVzW2NudF0tPmlfbXV0ZXgsIElfTVVURVhfUVVPVEEpOwotCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmc2JfZHFvcHQoc2IpLT5maWxlc1tjbnRdLT5pX2RhdGEsIDApOwotCQltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZmlsZXNbY250XS0+aV9tdXRleCk7Ci0JfQotCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKLX0KLQotdm9pZCBzeW5jX2RxdW90cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlpbnQgY250OwotCi0JaWYgKHNiKSB7Ci0JCWlmIChzYi0+c19xY29wLT5xdW90YV9zeW5jKQotCQkJcXVvdGFfc3luY19zYihzYiwgdHlwZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2soJnNiX2xvY2spOwotcmVzdGFydDoKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNiLCAmc3VwZXJfYmxvY2tzLCBzX2xpc3QpIHsKLQkJLyogVGhpcyB0ZXN0IGp1c3QgaW1wcm92ZXMgcGVyZm9ybWFuY2Ugc28gaXQgbmVlZG4ndCBiZSByZWxpYWJsZS4uLiAqLwotCQlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKLQkJCWlmICh0eXBlICE9IC0xICYmIHR5cGUgIT0gY250KQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCBjbnQpKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFpbmZvX2RpcnR5KCZzYl9kcW9wdChzYiktPmluZm9bY250XSkgJiYKLQkJCSAgICBsaXN0X2VtcHR5KCZzYl9kcW9wdChzYiktPmluZm9bY250XS5kcWlfZGlydHlfbGlzdCkpCi0JCQkJY29udGludWU7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoY250ID09IE1BWFFVT1RBUykKLQkJCWNvbnRpbnVlOwotCQlzYi0+c19jb3VudCsrOwotCQlzcGluX3VubG9jaygmc2JfbG9jayk7Ci0JCWRvd25fcmVhZCgmc2ItPnNfdW1vdW50KTsKLQkJaWYgKHNiLT5zX3Jvb3QgJiYgc2ItPnNfcWNvcC0+cXVvdGFfc3luYykKLQkJCXF1b3RhX3N5bmNfc2Ioc2IsIHR5cGUpOwotCQl1cF9yZWFkKCZzYi0+c191bW91bnQpOwotCQlzcGluX2xvY2soJnNiX2xvY2spOwotCQlpZiAoX19wdXRfc3VwZXJfYW5kX25lZWRfcmVzdGFydChzYikpCi0JCQlnb3RvIHJlc3RhcnQ7Ci0JfQotCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKLX0KLQotLyogQ29weSBwYXJhbWV0ZXJzIGFuZCBjYWxsIHByb3BlciBmdW5jdGlvbiAqLwotc3RhdGljIGludCBkb19xdW90YWN0bChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGNtZCwgcWlkX3QgaWQsIHZvaWQgX191c2VyICphZGRyKQotewotCWludCByZXQ7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFFfUVVPVEFPTjogewotCQkJY2hhciAqcGF0aG5hbWU7Ci0KLQkJCWlmIChJU19FUlIocGF0aG5hbWUgPSBnZXRuYW1lKGFkZHIpKSkKLQkJCQlyZXR1cm4gUFRSX0VSUihwYXRobmFtZSk7Ci0JCQlyZXQgPSBzYi0+c19xY29wLT5xdW90YV9vbihzYiwgdHlwZSwgaWQsIHBhdGhuYW1lLCAwKTsKLQkJCXB1dG5hbWUocGF0aG5hbWUpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCQljYXNlIFFfUVVPVEFPRkY6Ci0JCQlyZXR1cm4gc2ItPnNfcWNvcC0+cXVvdGFfb2ZmKHNiLCB0eXBlLCAwKTsKLQotCQljYXNlIFFfR0VURk1UOiB7Ci0JCQlfX3UzMiBmbXQ7Ci0KLQkJCWRvd25fcmVhZCgmc2JfZHFvcHQoc2IpLT5kcXB0cl9zZW0pOwotCQkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkgewotCQkJCXVwX3JlYWQoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKLQkJCQlyZXR1cm4gLUVTUkNIOwotCQkJfQotCQkJZm10ID0gc2JfZHFvcHQoc2IpLT5pbmZvW3R5cGVdLmRxaV9mb3JtYXQtPnFmX2ZtdF9pZDsKLQkJCXVwX3JlYWQoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmZtdCwgc2l6ZW9mKGZtdCkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBRX0dFVElORk86IHsKLQkJCXN0cnVjdCBpZl9kcWluZm8gaW5mbzsKLQotCQkJaWYgKChyZXQgPSBzYi0+c19xY29wLT5nZXRfaW5mbyhzYiwgdHlwZSwgJmluZm8pKSkKLQkJCQlyZXR1cm4gcmV0OwotCQkJaWYgKGNvcHlfdG9fdXNlcihhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgUV9TRVRJTkZPOiB7Ci0JCQlzdHJ1Y3QgaWZfZHFpbmZvIGluZm87Ci0KLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgYWRkciwgc2l6ZW9mKGluZm8pKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiBzYi0+c19xY29wLT5zZXRfaW5mbyhzYiwgdHlwZSwgJmluZm8pOwotCQl9Ci0JCWNhc2UgUV9HRVRRVU9UQTogewotCQkJc3RydWN0IGlmX2RxYmxrIGlkcTsKLQotCQkJaWYgKChyZXQgPSBzYi0+c19xY29wLT5nZXRfZHFibGsoc2IsIHR5cGUsIGlkLCAmaWRxKSkpCi0JCQkJcmV0dXJuIHJldDsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmlkcSwgc2l6ZW9mKGlkcSkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBRX1NFVFFVT1RBOiB7Ci0JCQlzdHJ1Y3QgaWZfZHFibGsgaWRxOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoJmlkcSwgYWRkciwgc2l6ZW9mKGlkcSkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIHNiLT5zX3Fjb3AtPnNldF9kcWJsayhzYiwgdHlwZSwgaWQsICZpZHEpOwotCQl9Ci0JCWNhc2UgUV9TWU5DOgotCQkJc3luY19kcXVvdHMoc2IsIHR5cGUpOwotCQkJcmV0dXJuIDA7Ci0KLQkJY2FzZSBRX1hRVU9UQU9OOgotCQljYXNlIFFfWFFVT1RBT0ZGOgotCQljYXNlIFFfWFFVT1RBUk06IHsKLQkJCV9fdTMyIGZsYWdzOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoJmZsYWdzLCBhZGRyLCBzaXplb2YoZmxhZ3MpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiBzYi0+c19xY29wLT5zZXRfeHN0YXRlKHNiLCBmbGFncywgY21kKTsKLQkJfQotCQljYXNlIFFfWEdFVFFTVEFUOiB7Ci0JCQlzdHJ1Y3QgZnNfcXVvdGFfc3RhdCBmcXM7Ci0JCQotCQkJaWYgKChyZXQgPSBzYi0+c19xY29wLT5nZXRfeHN0YXRlKHNiLCAmZnFzKSkpCi0JCQkJcmV0dXJuIHJldDsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmZxcywgc2l6ZW9mKGZxcykpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBRX1hTRVRRTElNOiB7Ci0JCQlzdHJ1Y3QgZnNfZGlza19xdW90YSBmZHE7Ci0KLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmZmRxLCBhZGRyLCBzaXplb2YoZmRxKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCSAgICAgICByZXR1cm4gc2ItPnNfcWNvcC0+c2V0X3hxdW90YShzYiwgdHlwZSwgaWQsICZmZHEpOwotCQl9Ci0JCWNhc2UgUV9YR0VUUVVPVEE6IHsKLQkJCXN0cnVjdCBmc19kaXNrX3F1b3RhIGZkcTsKLQotCQkJaWYgKChyZXQgPSBzYi0+c19xY29wLT5nZXRfeHF1b3RhKHNiLCB0eXBlLCBpZCwgJmZkcSkpKQotCQkJCXJldHVybiByZXQ7Ci0JCQlpZiAoY29weV90b191c2VyKGFkZHIsICZmZHEsIHNpemVvZihmZHEpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgUV9YUVVPVEFTWU5DOgotCQkJcmV0dXJuIHNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMoc2IsIHR5cGUpOwotCQkvKiBXZSBuZXZlciByZWFjaCBoZXJlIHVubGVzcyB2YWxpZGl0eSBjaGVjayBpcyBicm9rZW4gKi8KLQkJZGVmYXVsdDoKLQkJCUJVRygpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGxvb2sgdXAgYSBzdXBlcmJsb2NrIG9uIHdoaWNoIHF1b3RhIG9wcyB3aWxsIGJlIHBlcmZvcm1lZAotICogLSB1c2UgdGhlIG5hbWUgb2YgYSBibG9jayBkZXZpY2UgdG8gZmluZCB0aGUgc3VwZXJibG9jayB0aGVyZW9uCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHN1cGVyX2Jsb2NrICpxdW90YWN0bF9ibG9jayhjb25zdCBjaGFyIF9fdXNlciAqc3BlY2lhbCkKLXsKLSNpZmRlZiBDT05GSUdfQkxPQ0sKLQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2OwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7Ci0JY2hhciAqdG1wID0gZ2V0bmFtZShzcGVjaWFsKTsKLQotCWlmIChJU19FUlIodG1wKSkKLQkJcmV0dXJuIEVSUl9DQVNUKHRtcCk7Ci0JYmRldiA9IGxvb2t1cF9iZGV2KHRtcCk7Ci0JcHV0bmFtZSh0bXApOwotCWlmIChJU19FUlIoYmRldikpCi0JCXJldHVybiBFUlJfQ0FTVChiZGV2KTsKLQlzYiA9IGdldF9zdXBlcihiZGV2KTsKLQliZHB1dChiZGV2KTsKLQlpZiAoIXNiKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKLQotCXJldHVybiBzYjsKLSNlbHNlCi0JcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZS4gVGhpcyBjb21tdW5pY2F0ZXMgd2l0aAotICogdGhlIHVzZXItbGV2ZWwgcHJvZ3JhbXMuIEN1cnJlbnRseSB0aGlzIG9ubHkgc3VwcG9ydHMgZGlza3F1b3RhCi0gKiBjYWxscy4gTWF5YmUgd2UgbmVlZCB0byBhZGQgdGhlIHByb2Nlc3MgcXVvdGFzIGV0Yy4gaW4gdGhlIGZ1dHVyZSwKLSAqIGJ1dCB3ZSBwcm9iYWJseSBzaG91bGQgdXNlIHJsaW1pdHMgZm9yIHRoYXQuCi0gKi8KLVNZU0NBTExfREVGSU5FNChxdW90YWN0bCwgdW5zaWduZWQgaW50LCBjbWQsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWwsCi0JCXFpZF90LCBpZCwgdm9pZCBfX3VzZXIgKiwgYWRkcikKLXsKLQl1aW50IGNtZHMsIHR5cGU7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IE5VTEw7Ci0JaW50IHJldDsKLQotCWNtZHMgPSBjbWQgPj4gU1VCQ01EU0hJRlQ7Ci0JdHlwZSA9IGNtZCAmIFNVQkNNRE1BU0s7Ci0KLQlpZiAoY21kcyAhPSBRX1NZTkMgfHwgc3BlY2lhbCkgewotCQlzYiA9IHF1b3RhY3RsX2Jsb2NrKHNwZWNpYWwpOwotCQlpZiAoSVNfRVJSKHNiKSkKLQkJCXJldHVybiBQVFJfRVJSKHNiKTsKLQl9Ci0KLQlyZXQgPSBjaGVja19xdW90YWN0bF92YWxpZChzYiwgdHlwZSwgY21kcywgaWQpOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0ID0gZG9fcXVvdGFjdGwoc2IsIHR5cGUsIGNtZHMsIGlkLCBhZGRyKTsKLQlpZiAoc2IpCi0JCWRyb3Bfc3VwZXIoc2IpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCkKLS8qCi0gKiBUaGlzIGNvZGUgd29ya3Mgb25seSBmb3IgMzIgYml0IHF1b3RhIHRvb2xzIG92ZXIgNjQgYml0IE9TICh4ODZfNjQsIGlhNjQpCi0gKiBhbmQgaXMgbmVjZXNzYXJ5IGR1ZSB0byBhbGlnbm1lbnQgcHJvYmxlbXMuCi0gKi8KLXN0cnVjdCBjb21wYXRfaWZfZHFibGsgewotCWNvbXBhdF91NjQgZHFiX2JoYXJkbGltaXQ7Ci0JY29tcGF0X3U2NCBkcWJfYnNvZnRsaW1pdDsKLQljb21wYXRfdTY0IGRxYl9jdXJzcGFjZTsKLQljb21wYXRfdTY0IGRxYl9paGFyZGxpbWl0OwotCWNvbXBhdF91NjQgZHFiX2lzb2Z0bGltaXQ7Ci0JY29tcGF0X3U2NCBkcWJfY3VyaW5vZGVzOwotCWNvbXBhdF91NjQgZHFiX2J0aW1lOwotCWNvbXBhdF91NjQgZHFiX2l0aW1lOwotCWNvbXBhdF91aW50X3QgZHFiX3ZhbGlkOwotfTsKLQotLyogWEZTIHN0cnVjdHVyZXMgKi8KLXN0cnVjdCBjb21wYXRfZnNfcWZpbGVzdGF0IHsKLQljb21wYXRfdTY0IGRxYl9iaGFyZGxpbWl0OwotCWNvbXBhdF91NjQgcWZzX25ibGtzOwotCWNvbXBhdF91aW50X3QgcWZzX25leHRlbnRzOwotfTsKLQotc3RydWN0IGNvbXBhdF9mc19xdW90YV9zdGF0IHsKLQlfX3M4CQlxc192ZXJzaW9uOwotCV9fdTE2CQlxc19mbGFnczsKLQlfX3M4CQlxc19wYWQ7Ci0Jc3RydWN0IGNvbXBhdF9mc19xZmlsZXN0YXQJcXNfdXF1b3RhOwotCXN0cnVjdCBjb21wYXRfZnNfcWZpbGVzdGF0CXFzX2dxdW90YTsKLQljb21wYXRfdWludF90CXFzX2luY29yZWRxczsKLQljb21wYXRfaW50X3QJcXNfYnRpbWVsaW1pdDsKLQljb21wYXRfaW50X3QJcXNfaXRpbWVsaW1pdDsKLQljb21wYXRfaW50X3QJcXNfcnRidGltZWxpbWl0OwotCV9fdTE2CQlxc19id2FybmxpbWl0OwotCV9fdTE2CQlxc19pd2FybmxpbWl0OwotfTsKLQotYXNtbGlua2FnZSBsb25nIHN5czMyX3F1b3RhY3RsKHVuc2lnbmVkIGludCBjbWQsIGNvbnN0IGNoYXIgX191c2VyICpzcGVjaWFsLAotCQkJCQkJcWlkX3QgaWQsIHZvaWQgX191c2VyICphZGRyKQotewotCXVuc2lnbmVkIGludCBjbWRzOwotCXN0cnVjdCBpZl9kcWJsayBfX3VzZXIgKmRxYmxrOwotCXN0cnVjdCBjb21wYXRfaWZfZHFibGsgX191c2VyICpjb21wYXRfZHFibGs7Ci0Jc3RydWN0IGZzX3F1b3RhX3N0YXQgX191c2VyICpmc3FzdGF0OwotCXN0cnVjdCBjb21wYXRfZnNfcXVvdGFfc3RhdCBfX3VzZXIgKmNvbXBhdF9mc3FzdGF0OwotCWNvbXBhdF91aW50X3QgZGF0YTsKLQl1MTYgeGRhdGE7Ci0JbG9uZyByZXQ7Ci0KLQljbWRzID0gY21kID4+IFNVQkNNRFNISUZUOwotCi0Jc3dpdGNoIChjbWRzKSB7Ci0JY2FzZSBRX0dFVFFVT1RBOgotCQlkcWJsayA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgaWZfZHFibGspKTsKLQkJY29tcGF0X2RxYmxrID0gYWRkcjsKLQkJcmV0ID0gc3lzX3F1b3RhY3RsKGNtZCwgc3BlY2lhbCwgaWQsIGRxYmxrKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCQlpZiAoY29weV9pbl91c2VyKGNvbXBhdF9kcWJsaywgZHFibGssIHNpemVvZigqY29tcGF0X2RxYmxrKSkgfHwKLQkJCWdldF91c2VyKGRhdGEsICZkcWJsay0+ZHFiX3ZhbGlkKSB8fAotCQkJcHV0X3VzZXIoZGF0YSwgJmNvbXBhdF9kcWJsay0+ZHFiX3ZhbGlkKSkKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCWJyZWFrOwotCWNhc2UgUV9TRVRRVU9UQToKLQkJZHFibGsgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc3RydWN0IGlmX2RxYmxrKSk7Ci0JCWNvbXBhdF9kcWJsayA9IGFkZHI7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2luX3VzZXIoZHFibGssIGNvbXBhdF9kcWJsaywgc2l6ZW9mKCpjb21wYXRfZHFibGspKSB8fAotCQkJZ2V0X3VzZXIoZGF0YSwgJmNvbXBhdF9kcWJsay0+ZHFiX3ZhbGlkKSB8fAotCQkJcHV0X3VzZXIoZGF0YSwgJmRxYmxrLT5kcWJfdmFsaWQpKQotCQkJYnJlYWs7Ci0JCXJldCA9IHN5c19xdW90YWN0bChjbWQsIHNwZWNpYWwsIGlkLCBkcWJsayk7Ci0JCWJyZWFrOwotCWNhc2UgUV9YR0VUUVNUQVQ6Ci0JCWZzcXN0YXQgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc3RydWN0IGZzX3F1b3RhX3N0YXQpKTsKLQkJY29tcGF0X2ZzcXN0YXQgPSBhZGRyOwotCQlyZXQgPSBzeXNfcXVvdGFjdGwoY21kLCBzcGVjaWFsLCBpZCwgZnNxc3RhdCk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJLyogQ29weWluZyBxc192ZXJzaW9uLCBxc19mbGFncywgcXNfcGFkICovCi0JCWlmIChjb3B5X2luX3VzZXIoY29tcGF0X2ZzcXN0YXQsIGZzcXN0YXQsCi0JCQlvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2ZzX3F1b3RhX3N0YXQsIHFzX3VxdW90YSkpKQotCQkJYnJlYWs7Ci0JCS8qIENvcHlpbmcgcXNfdXF1b3RhICovCi0JCWlmIChjb3B5X2luX3VzZXIoJmNvbXBhdF9mc3FzdGF0LT5xc191cXVvdGEsCi0JCQkmZnNxc3RhdC0+cXNfdXF1b3RhLAotCQkJc2l6ZW9mKGNvbXBhdF9mc3FzdGF0LT5xc191cXVvdGEpKSB8fAotCQkJZ2V0X3VzZXIoZGF0YSwgJmZzcXN0YXQtPnFzX3VxdW90YS5xZnNfbmV4dGVudHMpIHx8Ci0JCQlwdXRfdXNlcihkYXRhLCAmY29tcGF0X2ZzcXN0YXQtPnFzX3VxdW90YS5xZnNfbmV4dGVudHMpKQotCQkJYnJlYWs7Ci0JCS8qIENvcHlpbmcgcXNfZ3F1b3RhICovCi0JCWlmIChjb3B5X2luX3VzZXIoJmNvbXBhdF9mc3FzdGF0LT5xc19ncXVvdGEsCi0JCQkmZnNxc3RhdC0+cXNfZ3F1b3RhLAotCQkJc2l6ZW9mKGNvbXBhdF9mc3FzdGF0LT5xc19ncXVvdGEpKSB8fAotCQkJZ2V0X3VzZXIoZGF0YSwgJmZzcXN0YXQtPnFzX2dxdW90YS5xZnNfbmV4dGVudHMpIHx8Ci0JCQlwdXRfdXNlcihkYXRhLCAmY29tcGF0X2ZzcXN0YXQtPnFzX2dxdW90YS5xZnNfbmV4dGVudHMpKQotCQkJYnJlYWs7Ci0JCS8qIENvcHlpbmcgdGhlIHJlc3QgKi8KLQkJaWYgKGNvcHlfaW5fdXNlcigmY29tcGF0X2ZzcXN0YXQtPnFzX2luY29yZWRxcywKLQkJCSZmc3FzdGF0LT5xc19pbmNvcmVkcXMsCi0JCQlzaXplb2Yoc3RydWN0IGNvbXBhdF9mc19xdW90YV9zdGF0KSAtCi0JCQlvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2ZzX3F1b3RhX3N0YXQsIHFzX2luY29yZWRxcykpIHx8Ci0JCQlnZXRfdXNlcih4ZGF0YSwgJmZzcXN0YXQtPnFzX2l3YXJubGltaXQpIHx8Ci0JCQlwdXRfdXNlcih4ZGF0YSwgJmNvbXBhdF9mc3FzdGF0LT5xc19pd2FybmxpbWl0KSkKLQkJCWJyZWFrOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSBzeXNfcXVvdGFjdGwoY21kLCBzcGVjaWFsLCBpZCwgYWRkcik7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL0tjb25maWcgYi9mcy9xdW90YS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDdlMDEKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9xdW90YS9LY29uZmlnCkBAIC0wLDAgKzEsNTkgQEAKKyMKKyMgIFF1b3RhIGNvbmZpZ3VyYXRpb24KKyMKKworY29uZmlnIFFVT1RBCisJYm9vbCAiUXVvdGEgc3VwcG9ydCIKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBzZXQgcGVyIHVzZXIgbGltaXRzIGZvciBkaXNrCisJICB1c2FnZSAoYWxzbyBjYWxsZWQgZGlzayBxdW90YXMpLiBDdXJyZW50bHksIGl0IHdvcmtzIGZvciB0aGUKKwkgIGV4dDIsIGV4dDMsIGFuZCByZWlzZXJmcyBmaWxlIHN5c3RlbS4gZXh0MyBhbHNvIHN1cHBvcnRzIGpvdXJuYWxsZWQKKwkgIHF1b3RhcyBmb3Igd2hpY2ggeW91IGRvbid0IG5lZWQgdG8gcnVuIHF1b3RhY2hlY2soOCkgYWZ0ZXIgYW4gdW5jbGVhbgorCSAgc2h1dGRvd24uCisJICBGb3IgZnVydGhlciBkZXRhaWxzLCByZWFkIHRoZSBRdW90YSBtaW5pLUhPV1RPLCBhdmFpbGFibGUgZnJvbQorCSAgPGh0dHA6Ly93d3cudGxkcC5vcmcvZG9jcy5odG1sI2hvd3RvPiwgb3IgdGhlIGRvY3VtZW50YXRpb24gcHJvdmlkZWQKKwkgIHdpdGggdGhlIHF1b3RhIHRvb2xzLiBQcm9iYWJseSB0aGUgcXVvdGEgc3VwcG9ydCBpcyBvbmx5IHVzZWZ1bCBmb3IKKwkgIG11bHRpIHVzZXIgc3lzdGVtcy4gSWYgdW5zdXJlLCBzYXkgTi4KKworY29uZmlnIFFVT1RBX05FVExJTktfSU5URVJGQUNFCisJYm9vbCAiUmVwb3J0IHF1b3RhIG1lc3NhZ2VzIHRocm91Z2ggbmV0bGluayBpbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBRVU9UQSAmJiBORVQKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgcXVvdGEgd2FybmluZ3MgKGFib3V0IGV4Y2VlZGluZyBzb2Z0bGltaXQsIHJlYWNoaW5nCisJICBoYXJkbGltaXQsIGV0Yy4pIHdpbGwgYmUgcmVwb3J0ZWQgdGhyb3VnaCBuZXRsaW5rIGludGVyZmFjZS4gSWYgdW5zdXJlLAorCSAgc2F5IFkuCisKK2NvbmZpZyBQUklOVF9RVU9UQV9XQVJOSU5HCisJYm9vbCAiUHJpbnQgcXVvdGEgd2FybmluZ3MgdG8gY29uc29sZSAoT0JTT0xFVEUpIgorCWRlcGVuZHMgb24gUVVPVEEKKwlkZWZhdWx0IHkKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgcXVvdGEgd2FybmluZ3MgKGFib3V0IGV4Y2VlZGluZyBzb2Z0bGltaXQsIHJlYWNoaW5nCisJICBoYXJkbGltaXQsIGV0Yy4pIHdpbGwgYmUgcHJpbnRlZCB0byB0aGUgcHJvY2VzcycgY29udHJvbGxpbmcgdGVybWluYWwuCisJICBOb3RlIHRoYXQgdGhpcyBiZWhhdmlvciBpcyBjdXJyZW50bHkgZGVwcmVjYXRlZCBhbmQgbWF5IGdvIGF3YXkgaW4KKwkgIGZ1dHVyZS4gUGxlYXNlIHVzZSBub3RpZmljYXRpb24gdmlhIG5ldGxpbmsgc29ja2V0IGluc3RlYWQuCisKKyMgR2VuZXJpYyBzdXBwb3J0IGZvciB0cmVlIHN0cnVjdHVyZWQgcXVvdGEgZmlsZXMuIFNlbGVjdGVkIHdoZW4gbmVlZGVkLgorY29uZmlnIFFVT1RBX1RSRUUKKwkgdHJpc3RhdGUKKworY29uZmlnIFFGTVRfVjEKKwl0cmlzdGF0ZSAiT2xkIHF1b3RhIGZvcm1hdCBzdXBwb3J0IgorCWRlcGVuZHMgb24gUVVPVEEKKwloZWxwCisJICBUaGlzIHF1b3RhIGZvcm1hdCB3YXMgKGlzKSB1c2VkIGJ5IGtlcm5lbHMgZWFybGllciB0aGFuIDIuNC4yMi4gSWYKKwkgIHlvdSBoYXZlIHF1b3RhIHdvcmtpbmcgYW5kIHlvdSBkb24ndCB3YW50IHRvIGNvbnZlcnQgdG8gbmV3IHF1b3RhCisJICBmb3JtYXQgc2F5IFkgaGVyZS4KKworY29uZmlnIFFGTVRfVjIKKwl0cmlzdGF0ZSAiUXVvdGEgZm9ybWF0IHYyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBRVU9UQQorCXNlbGVjdCBRVU9UQV9UUkVFCisJaGVscAorCSAgVGhpcyBxdW90YSBmb3JtYXQgYWxsb3dzIHVzaW5nIHF1b3RhcyB3aXRoIDMyLWJpdCBVSURzL0dJRHMuIElmIHlvdQorCSAgbmVlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgc2F5IFkgaGVyZS4KKworY29uZmlnIFFVT1RBQ1RMCisJYm9vbAorCWRlcGVuZHMgb24gWEZTX1FVT1RBIHx8IFFVT1RBCisJZGVmYXVsdCB5CmRpZmYgLS1naXQgYS9mcy9xdW90YS9NYWtlZmlsZSBiL2ZzL3F1b3RhL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NWEwODMKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9xdW90YS9NYWtlZmlsZQpAQCAtMCwwICsxLDE0IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgTGludXggZmlsZXN5c3RlbXMuCisjCisjIDE0IFNlcCAyMDAwLCBDaHJpc3RvcGggSGVsbHdpZyA8aGNoQGluZnJhZGVhZC5vcmc+CisjIFJld3JpdHRlbiB0byB1c2UgbGlzdHMgaW5zdGVhZCBvZiBpZi1zdGF0ZW1lbnRzLgorIworCitvYmoteSA6PQorCitvYmotJChDT05GSUdfUVVPVEEpCQkrPSBkcXVvdC5vCitvYmotJChDT05GSUdfUUZNVF9WMSkJCSs9IHF1b3RhX3YxLm8KK29iai0kKENPTkZJR19RRk1UX1YyKQkJKz0gcXVvdGFfdjIubworb2JqLSQoQ09ORklHX1FVT1RBX1RSRUUpCSs9IHF1b3RhX3RyZWUubworb2JqLSQoQ09ORklHX1FVT1RBQ1RMKQkJKz0gcXVvdGEubwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvZHF1b3QuYyBiL2ZzL3F1b3RhL2RxdW90LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNhOTY3YQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3F1b3RhL2RxdW90LmMKQEAgLTAsMCArMSwyNjE3IEBACisvKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIGRpc2txdW90YSBzeXN0ZW0gZm9yIHRoZSBMSU5VWCBvcGVyYXRpbmcgc3lzdGVtLiBRVU9UQQorICogaXMgaW1wbGVtZW50ZWQgdXNpbmcgdGhlIEJTRCBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UgYXMgdGhlIG1lYW5zIG9mCisgKiBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHVzZXIgbGV2ZWwuIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZ2VuZXJpYyByb3V0aW5lcworICogY2FsbGVkIGJ5IHRoZSBkaWZmZXJlbnQgZmlsZXN5c3RlbXMgb24gYWxsb2NhdGlvbiBvZiBhbiBpbm9kZSBvciBibG9jay4KKyAqIFRoZXNlIHJvdXRpbmVzIHRha2UgY2FyZSBvZiB0aGUgYWRtaW5pc3RyYXRpb24gbmVlZGVkIHRvIGhhdmUgYSBjb25zaXN0ZW50CisgKiBkaXNrcXVvdGEgdHJhY2tpbmcgc3lzdGVtLiBUaGUgaWRlYXMgb2YgYm90aCB1c2VyIGFuZCBncm91cCBxdW90YXMgYXJlIGJhc2VkCisgKiBvbiB0aGUgTWVsYm91cm5lIHF1b3RhIHN5c3RlbSBhcyB1c2VkIG9uIEJTRCBkZXJpdmVkIHN5c3RlbXMuIFRoZSBpbnRlcm5hbAorICogaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gb25lIG9mIHRoZSBzZXZlcmFsIHZhcmlhbnRzIG9mIHRoZSBMSU5VWAorICogaW5vZGUtc3Vic3lzdGVtIHdpdGggYWRkZWQgY29tcGxleGl0eSBvZiB0aGUgZGlza3F1b3RhIHN5c3RlbS4KKyAqIAorICogQXV0aG9yOglNYXJjbyB2YW4gV2llcmluZ2VuIDxtdndAcGxhbmV0cy5lbG0ubmV0PgorICoKKyAqIEZpeGVzOiAgIERtaXRyeSBHb3JvZGNoYW5pbiA8cGdtZHNnQGliaS5jb20+LCAxMSBGZWIgOTYKKyAqCisgKgkJUmV2aXNlZCBsaXN0IG1hbmFnZW1lbnQgdG8gYXZvaWQgcmFjZXMKKyAqCQktLSBCaWxsIEhhd2VzLCA8d2hhd2VzQHN0YXIubmV0PiwgOS85OAorICoKKyAqCQlGaXhlZCByYWNlcyBpbiBkcXVvdF90cmFuc2ZlcigpLCBkcWdldCgpIGFuZCBkcXVvdF9hbGxvY18uLi4oKS4KKyAqCQlBcyB0aGUgY29uc2VxdWVuY2UgdGhlIGxvY2tpbmcgd2FzIG1vdmVkIGZyb20gZHF1b3RfZGVjcl8uLi4oKSwKKyAqCQlkcXVvdF9pbmNyXy4uLigpIHRvIGNhbGxpbmcgZnVuY3Rpb25zLgorICoJCWludmFsaWRhdGVfZHF1b3RzKCkgbm93IHdyaXRlcyBtb2RpZmllZCBkcXVvdHMuCisgKgkJU2VyaWFsaXplZCBxdW90YV9vZmYoKSBhbmQgcXVvdGFfb24oKSBmb3IgbW91bnQgcG9pbnQuCisgKgkJRml4ZWQgYSBmZXcgYnVncyBpbiBncm93X2RxdW90cygpLgorICoJCUZpeGVkIGRlYWRsb2NrIGluIHdyaXRlX2RxdW90KCkgLSB3ZSBubyBsb25nZXIgYWNjb3VudCBxdW90YXMgb24KKyAqCQlxdW90YSBmaWxlcworICoJCXJlbW92ZV9kcXVvdF9yZWYoKSBtb3ZlZCB0byBpbm9kZS5jIC0gaXQgbm93IHRyYXZlcnNlcyB0aHJvdWdoIGlub2RlcworICoJCWFkZF9kcXVvdF9yZWYoKSByZXN0YXJ0cyBhZnRlciBibG9ja2luZworICoJCUFkZGVkIGNoZWNrIGZvciBib2d1cyB1aWQgYW5kIGZpeGVkIGNoZWNrIGZvciBncm91cCBpbiBxdW90YWN0bC4KKyAqCQlKYW4gS2FyYSwgPGphY2tAc3VzZS5jej4sIHNwb25zb3JlZCBieSBTdVNFIENSLCAxMC0xMS85OQorICoKKyAqCQlVc2VkIHN0cnVjdCBsaXN0X2hlYWQgaW5zdGVhZCBvZiBvd24gbGlzdCBzdHJ1Y3QKKyAqCQlJbnZhbGlkYXRpb24gb2YgcmVmZXJlbmNlZCBkcXVvdHMgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlCisgKgkJSW1wcm92ZWQgZnJlZV9kcXVvdHMgbGlzdCBtYW5hZ2VtZW50CisgKgkJUXVvdGEgYW5kIGlfYmxvY2tzIGFyZSBub3cgdXBkYXRlZCBpbiBvbmUgcGxhY2UgdG8gYXZvaWQgcmFjZXMKKyAqCQlXYXJuaW5ncyBhcmUgbm93IGRlbGF5ZWQgc28gd2Ugd29uJ3QgYmxvY2sgaW4gY3JpdGljYWwgc2VjdGlvbgorICoJCVdyaXRlIHVwZGF0ZWQgbm90IHRvIHJlcXVpcmUgZHF1b3QgbG9jaworICoJCUphbiBLYXJhLCA8amFja0BzdXNlLmN6PiwgOS8yMDAwCisgKgorICoJCUFkZGVkIGR5bmFtaWMgcXVvdGEgc3RydWN0dXJlIGFsbG9jYXRpb24KKyAqCQlKYW4gS2FyYSA8amFja0BzdXNlLmN6PiAxMi8yMDAwCisgKgorICoJCVJld3JpdHRlbiBxdW90YSBpbnRlcmZhY2UuIEltcGxlbWVudGVkIG5ldyBxdW90YSBmb3JtYXQgYW5kCisgKgkJZm9ybWF0cyByZWdpc3RlcmluZy4KKyAqCQlKYW4gS2FyYSwgPGphY2tAc3VzZS5jej4sIDIwMDEsMjAwMgorICoKKyAqCQlOZXcgU01QIGxvY2tpbmcuCisgKgkJSmFuIEthcmEsIDxqYWNrQHN1c2UuY3o+LCAxMC8yMDAyCisgKgorICoJCUFkZGVkIGpvdXJuYWxsZWQgcXVvdGEgc3VwcG9ydCwgZml4IGxvY2sgaW52ZXJzaW9uIHByb2JsZW1zCisgKgkJSmFuIEthcmEsIDxqYWNrQHN1c2UuY3o+LCAyMDAzLDIwMDQKKyAqCisgKiAoQykgQ29weXJpZ2h0IDE5OTQgLSAxOTk3IE1hcmNvIHZhbiBXaWVyaW5nZW4gCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4gLyogZm9yIGlub2RlX2xvY2ssIG9kZGx5IGVub3VnaC4uICovCisjaWZkZWYgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFCisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNkZWZpbmUgX19EUVVPVF9QQVJBTk9JQQorCisvKgorICogVGhlcmUgYXJlIHRocmVlIHF1b3RhIFNNUCBsb2Nrcy4gZHFfbGlzdF9sb2NrIHByb3RlY3RzIGFsbCBsaXN0cyB3aXRoIHF1b3RhcworICogYW5kIHF1b3RhIGZvcm1hdHMsIGRxc3RhdHMgc3RydWN0dXJlIGNvbnRhaW5pbmcgc3RhdGlzdGljcyBhYm91dCB0aGUgbGlzdHMKKyAqIGRxX2RhdGFfbG9jayBwcm90ZWN0cyBkYXRhIGZyb20gZHFfZHFiIGFuZCBhbHNvIG1lbV9kcWluZm8gc3RydWN0dXJlcyBhbmQKKyAqIGFsc28gZ3VhcmRzIGNvbnNpc3RlbmN5IG9mIGRxdW90LT5kcV9kcWIgd2l0aCBpbm9kZS0+aV9ibG9ja3MsIGlfYnl0ZXMuCisgKiBpX2Jsb2NrcyBhbmQgaV9ieXRlcyB1cGRhdGVzIGl0c2VsZiBhcmUgZ3VhcmRlZCBieSBpX2xvY2sgYWNxdWlyZWQgZGlyZWN0bHkKKyAqIGluIGlub2RlX2FkZF9ieXRlcygpIGFuZCBpbm9kZV9zdWJfYnl0ZXMoKS4gZHFfc3RhdGVfbG9jayBwcm90ZWN0cworICogbW9kaWZpY2F0aW9ucyBvZiBxdW90YSBzdGF0ZSAob24gcXVvdGFvbiBhbmQgcXVvdGFvZmYpIGFuZCByZWFkZXJzIHdobyBjYXJlCisgKiBhYm91dCBsYXRlc3QgdmFsdWVzIHRha2UgaXQgYXMgd2VsbC4KKyAqCisgKiBUaGUgc3BpbmxvY2sgb3JkZXJpbmcgaXMgaGVuY2U6IGRxX2RhdGFfbG9jayA+IGRxX2xpc3RfbG9jayA+IGlfbG9jaywKKyAqICAgZHFfbGlzdF9sb2NrID4gZHFfc3RhdGVfbG9jaworICoKKyAqIE5vdGUgdGhhdCBzb21lIHRoaW5ncyAoZWcuIHNiIHBvaW50ZXIsIHR5cGUsIGlkKSBkb2Vzbid0IGNoYW5nZSBkdXJpbmcKKyAqIHRoZSBsaWZlIG9mIHRoZSBkcXVvdCBzdHJ1Y3R1cmUgYW5kIHNvIG5lZWRuJ3QgdG8gYmUgcHJvdGVjdGVkIGJ5IGEgbG9jaworICoKKyAqIEFueSBvcGVyYXRpb24gd29ya2luZyBvbiBkcXVvdHMgdmlhIGlub2RlIHBvaW50ZXJzIG11c3QgaG9sZCBkcXB0cl9zZW0uICBJZgorICogb3BlcmF0aW9uIGlzIGp1c3QgcmVhZGluZyBwb2ludGVycyBmcm9tIGlub2RlIChvciBub3QgdXNpbmcgdGhlbSBhdCBhbGwpIHRoZQorICogcmVhZCBsb2NrIGlzIGVub3VnaC4gSWYgcG9pbnRlcnMgYXJlIGFsdGVyZWQgZnVuY3Rpb24gbXVzdCBob2xkIHdyaXRlIGxvY2sKKyAqICh0aGVzZSBsb2NraW5nIHJ1bGVzIGFsc28gYXBwbHkgZm9yIFNfTk9RVU9UQSBmbGFnIGluIHRoZSBpbm9kZSAtIG5vdGUgdGhhdAorICogZm9yIGFsdGVyaW5nIHRoZSBmbGFnIGlfbXV0ZXggaXMgYWxzbyBuZWVkZWQpLgorICoKKyAqIEVhY2ggZHF1b3QgaGFzIGl0cyBkcV9sb2NrIG11dGV4LiBMb2NrZWQgZHF1b3RzIG1pZ2h0IG5vdCBiZSByZWZlcmVuY2VkCisgKiBmcm9tIGlub2RlcyAoZHF1b3RfYWxsb2Nfc3BhY2UoKSBhbmQgc3VjaCBkb24ndCBjaGVjayB0aGUgZHFfbG9jaykuCisgKiBDdXJyZW50bHkgZHF1b3QgaXMgbG9ja2VkIG9ubHkgd2hlbiBpdCBpcyBiZWluZyByZWFkIHRvIG1lbW9yeSAob3Igc3BhY2UgZm9yCisgKiBpdCBpcyBiZWluZyBhbGxvY2F0ZWQpIG9uIHRoZSBmaXJzdCBkcWdldCgpIGFuZCB3aGVuIGl0IGlzIGJlaW5nIHJlbGVhc2VkIG9uCisgKiB0aGUgbGFzdCBkcXB1dCgpLiBUaGUgYWxsb2NhdGlvbiBhbmQgcmVsZWFzZSBvcGFyYXRpb25zIGFyZSBzZXJpYWxpemVkIGJ5CisgKiB0aGUgZHFfbG9jayBhbmQgYnkgY2hlY2tpbmcgdGhlIHVzZSBjb3VudCBpbiBkcXVvdF9yZWxlYXNlKCkuICBXcml0ZQorICogb3BlcmF0aW9ucyBvbiBkcXVvdHMgZG9uJ3QgaG9sZCBkcV9sb2NrIGFzIHRoZXkgY29weSBkYXRhIHVuZGVyIGRxX2RhdGFfbG9jaworICogc3BpbmxvY2sgdG8gaW50ZXJuYWwgYnVmZmVycyBiZWZvcmUgd3JpdGluZy4KKyAqCisgKiBMb2NrIG9yZGVyaW5nIChpbmNsdWRpbmcgcmVsYXRlZCBWRlMgbG9ja3MpIGlzIHRoZSBmb2xsb3dpbmc6CisgKiAgIGlfbXV0ZXggPiBkcW9ub2ZmX3NlbSA+IGpvdXJuYWxfbG9jayA+IGRxcHRyX3NlbSA+IGRxdW90LT5kcV9sb2NrID4KKyAqICAgZHFpb19tdXRleAorICogVGhlIGxvY2sgb3JkZXJpbmcgb2YgZHFwdHJfc2VtIGltcG9zZWQgYnkgcXVvdGEgY29kZSBpcyBvbmx5IGRxb25vZmZfc2VtID4KKyAqIGRxcHRyX3NlbS4gQnV0IGZpbGVzeXN0ZW0gaGFzIHRvIGNvdW50IHdpdGggdGhlIGZhY3QgdGhhdCBmdW5jdGlvbnMgc3VjaCBhcworICogZHF1b3RfYWxsb2Nfc3BhY2UoKSBhY3F1aXJlIGRxcHRyX3NlbSBhbmQgdGhleSB1c3VhbGx5IGhhdmUgdG8gYmUgY2FsbGVkCisgKiBmcm9tIGluc2lkZSBhIHRyYW5zYWN0aW9uIHRvIGtlZXAgZmlsZXN5c3RlbSBjb25zaXN0ZW5jeSBhZnRlciBhIGNyYXNoLiBBbHNvCisgKiBmaWxlc3lzdGVtcyB1c3VhbGx5IHdhbnQgdG8gZG8gc29tZSBJTyBvbiBkcXVvdCBmcm9tIC0+bWFya19kaXJ0eSB3aGljaCBpcworICogY2FsbGVkIHdpdGggZHFwdHJfc2VtIGhlbGQuCisgKiBpX211dGV4IG9uIHF1b3RhIGZpbGVzIGlzIHNwZWNpYWwgKGl0J3MgYmVsb3cgZHFpb19tdXRleCkKKyAqLworCitzdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKGRxX2xpc3RfbG9jayk7CitzdGF0aWMgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKGRxX3N0YXRlX2xvY2spOworX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKGRxX2RhdGFfbG9jayk7CitFWFBPUlRfU1lNQk9MKGRxX2RhdGFfbG9jayk7CisKK3N0YXRpYyBjaGFyICpxdW90YXR5cGVzW10gPSBJTklUUUZOQU1FUzsKK3N0YXRpYyBzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKnF1b3RhX2Zvcm1hdHM7CS8qIExpc3Qgb2YgcmVnaXN0ZXJlZCBmb3JtYXRzICovCitzdGF0aWMgc3RydWN0IHF1b3RhX21vZHVsZV9uYW1lIG1vZHVsZV9uYW1lc1tdID0gSU5JVF9RVU9UQV9NT0RVTEVfTkFNRVM7CisKKy8qIFNMQUIgY2FjaGUgZm9yIGRxdW90IHN0cnVjdHVyZXMgKi8KK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZHF1b3RfY2FjaGVwOworCitpbnQgcmVnaXN0ZXJfcXVvdGFfZm9ybWF0KHN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqZm10KQoreworCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwlmbXQtPnFmX25leHQgPSBxdW90YV9mb3JtYXRzOworCXF1b3RhX2Zvcm1hdHMgPSBmbXQ7CisJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCk7CisKK3ZvaWQgdW5yZWdpc3Rlcl9xdW90YV9mb3JtYXQoc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlICpmbXQpCit7CisJc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlICoqYWN0cWY7CisKKwlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7CisJZm9yIChhY3RxZiA9ICZxdW90YV9mb3JtYXRzOyAqYWN0cWYgJiYgKmFjdHFmICE9IGZtdDsKKwkgICAgIGFjdHFmID0gJigqYWN0cWYpLT5xZl9uZXh0KQorCQk7CisJaWYgKCphY3RxZikKKwkJKmFjdHFmID0gKCphY3RxZiktPnFmX25leHQ7CisJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KTsKKworc3RhdGljIHN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqZmluZF9xdW90YV9mb3JtYXQoaW50IGlkKQoreworCXN0cnVjdCBxdW90YV9mb3JtYXRfdHlwZSAqYWN0cWY7CisKKwlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7CisJZm9yIChhY3RxZiA9IHF1b3RhX2Zvcm1hdHM7IGFjdHFmICYmIGFjdHFmLT5xZl9mbXRfaWQgIT0gaWQ7CisJICAgICBhY3RxZiA9IGFjdHFmLT5xZl9uZXh0KQorCQk7CisJaWYgKCFhY3RxZiB8fCAhdHJ5X21vZHVsZV9nZXQoYWN0cWYtPnFmX293bmVyKSkgeworCQlpbnQgcW07CisKKwkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJCQorCQlmb3IgKHFtID0gMDsgbW9kdWxlX25hbWVzW3FtXS5xbV9mbXRfaWQgJiYKKwkJCSAgICAgbW9kdWxlX25hbWVzW3FtXS5xbV9mbXRfaWQgIT0gaWQ7IHFtKyspCisJCQk7CisJCWlmICghbW9kdWxlX25hbWVzW3FtXS5xbV9mbXRfaWQgfHwKKwkJICAgIHJlcXVlc3RfbW9kdWxlKG1vZHVsZV9uYW1lc1txbV0ucW1fbW9kX25hbWUpKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCQlmb3IgKGFjdHFmID0gcXVvdGFfZm9ybWF0czsgYWN0cWYgJiYgYWN0cWYtPnFmX2ZtdF9pZCAhPSBpZDsKKwkJICAgICBhY3RxZiA9IGFjdHFmLT5xZl9uZXh0KQorCQkJOworCQlpZiAoYWN0cWYgJiYgIXRyeV9tb2R1bGVfZ2V0KGFjdHFmLT5xZl9vd25lcikpCisJCQlhY3RxZiA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCXJldHVybiBhY3RxZjsKK30KKworc3RhdGljIHZvaWQgcHV0X3F1b3RhX2Zvcm1hdChzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmZtdCkKK3sKKwltb2R1bGVfcHV0KGZtdC0+cWZfb3duZXIpOworfQorCisvKgorICogRHF1b3QgTGlzdCBNYW5hZ2VtZW50OgorICogVGhlIHF1b3RhIGNvZGUgdXNlcyB0aHJlZSBsaXN0cyBmb3IgZHF1b3QgbWFuYWdlbWVudDogdGhlIGludXNlX2xpc3QsCisgKiBmcmVlX2RxdW90cywgYW5kIGRxdW90X2hhc2hbXSBhcnJheS4gQSBzaW5nbGUgZHF1b3Qgc3RydWN0dXJlIG1heSBiZQorICogb24gYWxsIHRocmVlIGxpc3RzLCBkZXBlbmRpbmcgb24gaXRzIGN1cnJlbnQgc3RhdGUuCisgKgorICogQWxsIGRxdW90cyBhcmUgcGxhY2VkIHRvIHRoZSBlbmQgb2YgaW51c2VfbGlzdCB3aGVuIGZpcnN0IGNyZWF0ZWQsIGFuZCB0aGlzCisgKiBsaXN0IGlzIHVzZWQgZm9yIGludmFsaWRhdGUgb3BlcmF0aW9uLCB3aGljaCBtdXN0IGxvb2sgYXQgZXZlcnkgZHF1b3QuCisgKgorICogVW51c2VkIGRxdW90cyAoZHFfY291bnQgPT0gMCkgYXJlIGFkZGVkIHRvIHRoZSBmcmVlX2RxdW90cyBsaXN0IHdoZW4gZnJlZWQsCisgKiBhbmQgdGhpcyBsaXN0IGlzIHNlYXJjaGVkIHdoZW5ldmVyIHdlIG5lZWQgYW4gYXZhaWxhYmxlIGRxdW90LiAgRHF1b3RzIGFyZQorICogcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IGFzIHNvb24gYXMgdGhleSBhcmUgdXNlZCBhZ2FpbiwgYW5kCisgKiBkcXN0YXRzLmZyZWVfZHF1b3RzIGdpdmVzIHRoZSBudW1iZXIgb2YgZHF1b3RzIG9uIHRoZSBsaXN0LiBXaGVuCisgKiBkcXVvdCBpcyBpbnZhbGlkYXRlZCBpdCdzIGNvbXBsZXRlbHkgcmVsZWFzZWQgZnJvbSBtZW1vcnkuCisgKgorICogRHF1b3RzIHdpdGggYSBzcGVjaWZpYyBpZGVudGl0eSAoZGV2aWNlLCB0eXBlIGFuZCBpZCkgYXJlIHBsYWNlZCBvbgorICogb25lIG9mIHRoZSBkcXVvdF9oYXNoW10gaGFzaCBjaGFpbnMuIFRoZSBwcm92aWRlcyBhbiBlZmZpY2llbnQgc2VhcmNoCisgKiBtZWNoYW5pc20gdG8gbG9jYXRlIGEgc3BlY2lmaWMgZHF1b3QuCisgKi8KKworc3RhdGljIExJU1RfSEVBRChpbnVzZV9saXN0KTsKK3N0YXRpYyBMSVNUX0hFQUQoZnJlZV9kcXVvdHMpOworc3RhdGljIHVuc2lnbmVkIGludCBkcV9oYXNoX2JpdHMsIGRxX2hhc2hfbWFzazsKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqZHF1b3RfaGFzaDsKKworc3RydWN0IGRxc3RhdHMgZHFzdGF0czsKK0VYUE9SVF9TWU1CT0woZHFzdGF0cyk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitoYXNoZm4oY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGlkLCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCXRtcCA9ICgoKHVuc2lnbmVkIGxvbmcpc2I+PkwxX0NBQ0hFX1NISUZUKSBeIGlkKSAqIChNQVhRVU9UQVMgLSB0eXBlKTsKKwlyZXR1cm4gKHRtcCArICh0bXAgPj4gZHFfaGFzaF9iaXRzKSkgJiBkcV9oYXNoX21hc2s7Cit9CisKKy8qCisgKiBGb2xsb3dpbmcgbGlzdCBmdW5jdGlvbnMgZXhwZWN0IGRxX2xpc3RfbG9jayB0byBiZSBoZWxkCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnNlcnRfZHF1b3RfaGFzaChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCWhlYWQgPSBkcXVvdF9oYXNoICsgaGFzaGZuKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX2lkLCBkcXVvdC0+ZHFfdHlwZSk7CisJaGxpc3RfYWRkX2hlYWQoJmRxdW90LT5kcV9oYXNoLCBoZWFkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9kcXVvdF9oYXNoKHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJaGxpc3RfZGVsX2luaXQoJmRxdW90LT5kcV9oYXNoKTsKK30KKworc3RhdGljIHN0cnVjdCBkcXVvdCAqZmluZF9kcXVvdCh1bnNpZ25lZCBpbnQgaGFzaGVudCwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQl1bnNpZ25lZCBpbnQgaWQsIGludCB0eXBlKQoreworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBkcXVvdCAqZHF1b3Q7CisKKwlobGlzdF9mb3JfZWFjaCAobm9kZSwgZHF1b3RfaGFzaCtoYXNoZW50KSB7CisJCWRxdW90ID0gaGxpc3RfZW50cnkobm9kZSwgc3RydWN0IGRxdW90LCBkcV9oYXNoKTsKKwkJaWYgKGRxdW90LT5kcV9zYiA9PSBzYiAmJiBkcXVvdC0+ZHFfaWQgPT0gaWQgJiYKKwkJICAgIGRxdW90LT5kcV90eXBlID09IHR5cGUpCisJCQlyZXR1cm4gZHF1b3Q7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKiBBZGQgYSBkcXVvdCB0byB0aGUgdGFpbCBvZiB0aGUgZnJlZSBsaXN0ICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2RxdW90X2xhc3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlsaXN0X2FkZF90YWlsKCZkcXVvdC0+ZHFfZnJlZSwgJmZyZWVfZHF1b3RzKTsKKwlkcXN0YXRzLmZyZWVfZHF1b3RzKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZnJlZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWlmIChsaXN0X2VtcHR5KCZkcXVvdC0+ZHFfZnJlZSkpCisJCXJldHVybjsKKwlsaXN0X2RlbF9pbml0KCZkcXVvdC0+ZHFfZnJlZSk7CisJZHFzdGF0cy5mcmVlX2RxdW90cy0tOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2ludXNlKHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJLyogV2UgYWRkIHRvIHRoZSBiYWNrIG9mIGludXNlIGxpc3Qgc28gd2UgZG9uJ3QgaGF2ZSB0byByZXN0YXJ0CisJICogd2hlbiB0cmF2ZXJzaW5nIHRoaXMgbGlzdCBhbmQgd2UgYmxvY2sgKi8KKwlsaXN0X2FkZF90YWlsKCZkcXVvdC0+ZHFfaW51c2UsICZpbnVzZV9saXN0KTsKKwlkcXN0YXRzLmFsbG9jYXRlZF9kcXVvdHMrKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9pbnVzZShzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWRxc3RhdHMuYWxsb2NhdGVkX2RxdW90cy0tOworCWxpc3RfZGVsKCZkcXVvdC0+ZHFfaW51c2UpOworfQorLyoKKyAqIEVuZCBvZiBsaXN0IGZ1bmN0aW9ucyBuZWVkaW5nIGRxX2xpc3RfbG9jaworICovCisKK3N0YXRpYyB2b2lkIHdhaXRfb25fZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwltdXRleF9sb2NrKCZkcXVvdC0+ZHFfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkcXVvdC0+ZHFfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRxdW90X2RpcnR5KHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJcmV0dXJuIHRlc3RfYml0KERRX01PRF9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWFya19kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXJldHVybiBkcXVvdC0+ZHFfc2ItPmRxX29wLT5tYXJrX2RpcnR5KGRxdW90KTsKK30KKworaW50IGRxdW90X21hcmtfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KERRX01PRF9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkKKwkJbGlzdF9hZGQoJmRxdW90LT5kcV9kaXJ0eSwgJnNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPgorCQkJCWluZm9bZHF1b3QtPmRxX3R5cGVdLmRxaV9kaXJ0eV9saXN0KTsKKwlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfbWFya19kcXVvdF9kaXJ0eSk7CisKKy8qIFRoaXMgZnVuY3Rpb24gbmVlZHMgZHFfbGlzdF9sb2NrICovCitzdGF0aWMgaW5saW5lIGludCBjbGVhcl9kcXVvdF9kaXJ0eShzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KERRX01PRF9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkKKwkJcmV0dXJuIDA7CisJbGlzdF9kZWxfaW5pdCgmZHF1b3QtPmRxX2RpcnR5KTsKKwlyZXR1cm4gMTsKK30KKwordm9pZCBtYXJrX2luZm9fZGlydHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJc2V0X2JpdChEUUZfSU5GT19ESVJUWV9CLCAmc2JfZHFvcHQoc2IpLT5pbmZvW3R5cGVdLmRxaV9mbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKG1hcmtfaW5mb19kaXJ0eSk7CisKKy8qCisgKglSZWFkIGRxdW90IGZyb20gZGlzayBhbmQgYWxsb2Mgc3BhY2UgZm9yIGl0CisgKi8KKworaW50IGRxdW90X2FjcXVpcmUoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlpbnQgcmV0ID0gMCwgcmV0MiA9IDA7CisJc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoZHF1b3QtPmRxX3NiKTsKKworCW11dGV4X2xvY2soJmRxdW90LT5kcV9sb2NrKTsKKwltdXRleF9sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CisJaWYgKCF0ZXN0X2JpdChEUV9SRUFEX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKQorCQlyZXQgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+cmVhZF9kcWJsayhkcXVvdCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2lvbG9jazsKKwlzZXRfYml0KERRX1JFQURfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJLyogSW5zdGFudGlhdGUgZHF1b3QgaWYgbmVlZGVkICovCisJaWYgKCF0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykgJiYgIWRxdW90LT5kcV9vZmYpIHsKKwkJcmV0ID0gZHFvcHQtPm9wc1tkcXVvdC0+ZHFfdHlwZV0tPmNvbW1pdF9kcWJsayhkcXVvdCk7CisJCS8qIFdyaXRlIHRoZSBpbmZvIGlmIG5lZWRlZCAqLworCQlpZiAoaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bZHF1b3QtPmRxX3R5cGVdKSkgeworCQkJcmV0MiA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT53cml0ZV9maWxlX2luZm8oCisJCQkJCQlkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKTsKKwkJfQorCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2lvbG9jazsKKwkJaWYgKHJldDIgPCAwKSB7CisJCQlyZXQgPSByZXQyOworCQkJZ290byBvdXRfaW9sb2NrOworCQl9CisJfQorCXNldF9iaXQoRFFfQUNUSVZFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworb3V0X2lvbG9jazoKKwltdXRleF91bmxvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKKwltdXRleF91bmxvY2soJmRxdW90LT5kcV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9hY3F1aXJlKTsKKworLyoKKyAqCVdyaXRlIGRxdW90IHRvIGRpc2sKKyAqLworaW50IGRxdW90X2NvbW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWludCByZXQgPSAwLCByZXQyID0gMDsKKwlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpOworCisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOworCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwlpZiAoIWNsZWFyX2RxdW90X2RpcnR5KGRxdW90KSkgeworCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJZ290byBvdXRfc2VtOworCX0KKwlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwkvKiBJbmFjdGl2ZSBkcXVvdCBjYW4gYmUgb25seSBpZiB0aGVyZSB3YXMgZXJyb3IgZHVyaW5nIHJlYWQvaW5pdAorCSAqID0+IHdlIGhhdmUgYmV0dGVyIG5vdCB3cml0aW5nIGl0ICovCisJaWYgKHRlc3RfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkgeworCQlyZXQgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+Y29tbWl0X2RxYmxrKGRxdW90KTsKKwkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2RxdW90LT5kcV90eXBlXSkpIHsKKwkJCXJldDIgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+d3JpdGVfZmlsZV9pbmZvKAorCQkJCQkJZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSk7CisJCX0KKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gcmV0MjsKKwl9CitvdXRfc2VtOgorCW11dGV4X3VubG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X2NvbW1pdCk7CisKKy8qCisgKglSZWxlYXNlIGRxdW90CisgKi8KK2ludCBkcXVvdF9yZWxlYXNlKHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJaW50IHJldCA9IDAsIHJldDIgPSAwOworCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KGRxdW90LT5kcV9zYik7CisKKwltdXRleF9sb2NrKCZkcXVvdC0+ZHFfbG9jayk7CisJLyogQ2hlY2sgd2hldGhlciB3ZSBhcmUgbm90IHJhY2luZyB3aXRoIHNvbWUgb3RoZXIgZHFnZXQoKSAqLworCWlmIChhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSA+IDEpCisJCWdvdG8gb3V0X2RxbG9jazsKKwltdXRleF9sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CisJaWYgKGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5yZWxlYXNlX2RxYmxrKSB7CisJCXJldCA9IGRxb3B0LT5vcHNbZHF1b3QtPmRxX3R5cGVdLT5yZWxlYXNlX2RxYmxrKGRxdW90KTsKKwkJLyogV3JpdGUgdGhlIGluZm8gKi8KKwkJaWYgKGluZm9fZGlydHkoJmRxb3B0LT5pbmZvW2RxdW90LT5kcV90eXBlXSkpIHsKKwkJCXJldDIgPSBkcW9wdC0+b3BzW2RxdW90LT5kcV90eXBlXS0+d3JpdGVfZmlsZV9pbmZvKAorCQkJCQkJZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSk7CisJCX0KKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gcmV0MjsKKwl9CisJY2xlYXJfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKKwltdXRleF91bmxvY2soJmRxb3B0LT5kcWlvX211dGV4KTsKK291dF9kcWxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkcXVvdC0+ZHFfbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfcmVsZWFzZSk7CisKK3ZvaWQgZHF1b3RfZGVzdHJveShzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWttZW1fY2FjaGVfZnJlZShkcXVvdF9jYWNoZXAsIGRxdW90KTsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfZGVzdHJveSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb19kZXN0cm95X2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJZHF1b3QtPmRxX3NiLT5kcV9vcC0+ZGVzdHJveV9kcXVvdChkcXVvdCk7Cit9CisKKy8qIEludmFsaWRhdGUgYWxsIGRxdW90cyBvbiB0aGUgbGlzdC4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyCisgKiBxdW90YSBpcyBkaXNhYmxlZCBhbmQgcG9pbnRlcnMgZnJvbSBpbm9kZXMgcmVtb3ZlZCBzbyB0aGVyZSBjYW5ub3QgYmUgbmV3CisgKiBxdW90YSB1c2Vycy4gVGhlcmUgY2FuIHN0aWxsIGJlIHNvbWUgdXNlcnMgb2YgcXVvdGFzIGR1ZSB0byBpbm9kZXMgYmVpbmcKKyAqIGp1c3QgZGVsZXRlZCBvciBwcnVuZWQgYnkgcHJ1bmVfaWNhY2hlKCkgKHRob3NlIGFyZSBub3QgYXR0YWNoZWQgdG8gYW55CisgKiBsaXN0KSBvciBwYXJhbGxlbCBxdW90YWN0bCBjYWxsLiBXZSBoYXZlIHRvIHdhaXQgZm9yIHN1Y2ggdXNlcnMuCisgKi8KK3N0YXRpYyB2b2lkIGludmFsaWRhdGVfZHF1b3RzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCXN0cnVjdCBkcXVvdCAqZHF1b3QsICp0bXA7CisKK3Jlc3RhcnQ6CisJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcXVvdCwgdG1wLCAmaW51c2VfbGlzdCwgZHFfaW51c2UpIHsKKwkJaWYgKGRxdW90LT5kcV9zYiAhPSBzYikKKwkJCWNvbnRpbnVlOworCQlpZiAoZHF1b3QtPmRxX3R5cGUgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCQkvKiBXYWl0IGZvciBkcXVvdCB1c2VycyAqLworCQlpZiAoYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkpIHsKKwkJCURFRklORV9XQUlUKHdhaXQpOworCisJCQlhdG9taWNfaW5jKCZkcXVvdC0+ZHFfY291bnQpOworCQkJcHJlcGFyZV90b193YWl0KCZkcXVvdC0+ZHFfd2FpdF91bnVzZWQsICZ3YWl0LAorCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJCS8qIE9uY2UgZHFwdXQoKSB3YWtlcyB1cyB1cCwgd2Uga25vdyBpdCdzIHRpbWUgdG8gZnJlZQorCQkJICogdGhlIGRxdW90LgorCQkJICogSU1QT1JUQU5UOiB3ZSByZWx5IG9uIHRoZSBmYWN0IHRoYXQgdGhlcmUgaXMgYWx3YXlzCisJCQkgKiBhdCBtb3N0IG9uZSBwcm9jZXNzIHdhaXRpbmcgZm9yIGRxdW90IHRvIGZyZWUuCisJCQkgKiBPdGhlcndpc2UgZHFfY291bnQgd291bGQgYmUgPiAxIGFuZCB3ZSB3b3VsZCBuZXZlcgorCQkJICogd2FrZSB1cC4KKwkJCSAqLworCQkJaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpID4gMSkKKwkJCQlzY2hlZHVsZSgpOworCQkJZmluaXNoX3dhaXQoJmRxdW90LT5kcV93YWl0X3VudXNlZCwgJndhaXQpOworCQkJZHFwdXQoZHF1b3QpOworCQkJLyogQXQgdGhpcyBtb21lbnQgZHF1b3QoKSBuZWVkIG5vdCBleGlzdCAoaXQgY291bGQgYmUKKwkJCSAqIHJlY2xhaW1lZCBieSBwcnVuZV9kcWNhY2hlKCkuIEhlbmNlIHdlIG11c3QKKwkJCSAqIHJlc3RhcnQuICovCisJCQlnb3RvIHJlc3RhcnQ7CisJCX0KKwkJLyoKKwkJICogUXVvdGEgbm93IGhhcyBubyB1c2VycyBhbmQgaXQgaGFzIGJlZW4gd3JpdHRlbiBvbiBsYXN0CisJCSAqIGRxcHV0KCkKKwkJICovCisJCXJlbW92ZV9kcXVvdF9oYXNoKGRxdW90KTsKKwkJcmVtb3ZlX2ZyZWVfZHF1b3QoZHF1b3QpOworCQlyZW1vdmVfaW51c2UoZHF1b3QpOworCQlkb19kZXN0cm95X2RxdW90KGRxdW90KTsKKwl9CisJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Cit9CisKKy8qIENhbGwgY2FsbGJhY2sgZm9yIGV2ZXJ5IGFjdGl2ZSBkcXVvdCBvbiBnaXZlbiBmaWxlc3lzdGVtICovCitpbnQgZHF1b3Rfc2Nhbl9hY3RpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJICAgICAgaW50ICgqZm4pKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHVuc2lnbmVkIGxvbmcgcHJpdiksCisJCSAgICAgIHVuc2lnbmVkIGxvbmcgcHJpdikKK3sKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90LCAqb2xkX2RxdW90ID0gTlVMTDsKKwlpbnQgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7CisJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHF1b3QsICZpbnVzZV9saXN0LCBkcV9pbnVzZSkgeworCQlpZiAoIXRlc3RfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoZHF1b3QtPmRxX3NiICE9IHNiKQorCQkJY29udGludWU7CisJCS8qIE5vdyB3ZSBoYXZlIGFjdGl2ZSBkcXVvdCBzbyB3ZSBjYW4ganVzdCBpbmNyZWFzZSB1c2UgY291bnQgKi8KKwkJYXRvbWljX2luYygmZHF1b3QtPmRxX2NvdW50KTsKKwkJZHFzdGF0cy5sb29rdXBzKys7CisJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCQlkcXB1dChvbGRfZHF1b3QpOworCQlvbGRfZHF1b3QgPSBkcXVvdDsKKwkJcmV0ID0gZm4oZHF1b3QsIHByaXYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCQlzcGluX2xvY2soJmRxX2xpc3RfbG9jayk7CisJCS8qIFdlIGFyZSBzYWZlIHRvIGNvbnRpbnVlIG5vdyBiZWNhdXNlIG91ciBkcXVvdCBjb3VsZCBub3QKKwkJICogYmUgbW92ZWQgb3V0IG9mIHRoZSBpbnVzZSBsaXN0IHdoaWxlIHdlIGhvbGQgdGhlIHJlZmVyZW5jZSAqLworCX0KKwlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKK291dDoKKwlkcXB1dChvbGRfZHF1b3QpOworCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9zY2FuX2FjdGl2ZSk7CisKK2ludCB2ZnNfcXVvdGFfc3luYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpkaXJ0eTsKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90OworCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKKwlpbnQgY250OworCisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIGNudCkpCisJCQljb250aW51ZTsKKwkJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCQlkaXJ0eSA9ICZkcW9wdC0+aW5mb1tjbnRdLmRxaV9kaXJ0eV9saXN0OworCQl3aGlsZSAoIWxpc3RfZW1wdHkoZGlydHkpKSB7CisJCQlkcXVvdCA9IGxpc3RfZmlyc3RfZW50cnkoZGlydHksIHN0cnVjdCBkcXVvdCwKKwkJCQkJCSBkcV9kaXJ0eSk7CisJCQkvKiBEaXJ0eSBhbmQgaW5hY3RpdmUgY2FuIGJlIG9ubHkgYmFkIGRxdW90Li4uICovCisJCQlpZiAoIXRlc3RfYml0KERRX0FDVElWRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkgeworCQkJCWNsZWFyX2RxdW90X2RpcnR5KGRxdW90KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIE5vdyB3ZSBoYXZlIGFjdGl2ZSBkcXVvdCBmcm9tIHdoaWNoIHNvbWVvbmUgaXMKKyAJCQkgKiBob2xkaW5nIHJlZmVyZW5jZSBzbyB3ZSBjYW4gc2FmZWx5IGp1c3QgaW5jcmVhc2UKKwkJCSAqIHVzZSBjb3VudCAqLworCQkJYXRvbWljX2luYygmZHF1b3QtPmRxX2NvdW50KTsKKwkJCWRxc3RhdHMubG9va3VwcysrOworCQkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJCQlzYi0+ZHFfb3AtPndyaXRlX2RxdW90KGRxdW90KTsKKwkJCWRxcHV0KGRxdW90KTsKKwkJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJfQorCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwl9CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCWlmICgoY250ID09IHR5cGUgfHwgdHlwZSA9PSAtMSkgJiYgc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgY250KQorCQkgICAgJiYgaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bY250XSkpCisJCQlzYi0+ZHFfb3AtPndyaXRlX2luZm8oc2IsIGNudCk7CisJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCWRxc3RhdHMuc3luY3MrKzsKKwlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfc3luYyk7CisKKy8qIEZyZWUgdW51c2VkIGRxdW90cyBmcm9tIGNhY2hlICovCitzdGF0aWMgdm9pZCBwcnVuZV9kcWNhY2hlKGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBkcXVvdCAqZHF1b3Q7CisKKwloZWFkID0gZnJlZV9kcXVvdHMucHJldjsKKwl3aGlsZSAoaGVhZCAhPSAmZnJlZV9kcXVvdHMgJiYgY291bnQpIHsKKwkJZHF1b3QgPSBsaXN0X2VudHJ5KGhlYWQsIHN0cnVjdCBkcXVvdCwgZHFfZnJlZSk7CisJCXJlbW92ZV9kcXVvdF9oYXNoKGRxdW90KTsKKwkJcmVtb3ZlX2ZyZWVfZHF1b3QoZHF1b3QpOworCQlyZW1vdmVfaW51c2UoZHF1b3QpOworCQlkb19kZXN0cm95X2RxdW90KGRxdW90KTsKKwkJY291bnQtLTsKKwkJaGVhZCA9IGZyZWVfZHF1b3RzLnByZXY7CisJfQorfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSBrc3dhcGQgd2hlbiB3ZSB0aGluayB3ZSBuZWVkIHNvbWUKKyAqIG1vcmUgbWVtb3J5CisgKi8KKworc3RhdGljIGludCBzaHJpbmtfZHFjYWNoZV9tZW1vcnkoaW50IG5yLCBnZnBfdCBnZnBfbWFzaykKK3sKKwlpZiAobnIpIHsKKwkJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCQlwcnVuZV9kcWNhY2hlKG5yKTsKKwkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJfQorCXJldHVybiAoZHFzdGF0cy5mcmVlX2RxdW90cyAvIDEwMCkgKiBzeXNjdGxfdmZzX2NhY2hlX3ByZXNzdXJlOworfQorCitzdGF0aWMgc3RydWN0IHNocmlua2VyIGRxY2FjaGVfc2hyaW5rZXIgPSB7CisJLnNocmluayA9IHNocmlua19kcWNhY2hlX21lbW9yeSwKKwkuc2Vla3MgPSBERUZBVUxUX1NFRUtTLAorfTsKKworLyoKKyAqIFB1dCByZWZlcmVuY2UgdG8gZHF1b3QKKyAqIE5PVEU6IElmIHlvdSBjaGFuZ2UgdGhpcyBmdW5jdGlvbiBwbGVhc2UgY2hlY2sgd2hldGhlciBkcXB1dF9ibG9ja3MoKSB3b3JrcyByaWdodC4uLgorICovCit2b2lkIGRxcHV0KHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJaW50IHJldDsKKworCWlmICghZHF1b3QpCisJCXJldHVybjsKKyNpZmRlZiBfX0RRVU9UX1BBUkFOT0lBCisJaWYgKCFhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSkgeworCQlwcmludGsoIlZGUzogZHFwdXQ6IHRyeWluZyB0byBmcmVlIGZyZWUgZHF1b3RcbiIpOworCQlwcmludGsoIlZGUzogZGV2aWNlICVzLCBkcXVvdCBvZiAlcyAlZFxuIiwKKwkJCWRxdW90LT5kcV9zYi0+c19pZCwKKwkJCXF1b3RhdHlwZXNbZHF1b3QtPmRxX3R5cGVdLAorCQkJZHF1b3QtPmRxX2lkKTsKKwkJQlVHKCk7CisJfQorI2VuZGlmCisJCisJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCWRxc3RhdHMuZHJvcHMrKzsKKwlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKK3dlX3NsZXB0OgorCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwlpZiAoYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkgPiAxKSB7CisJCS8qIFdlIGhhdmUgbW9yZSB0aGFuIG9uZSB1c2VyLi4uIG5vdGhpbmcgdG8gZG8gKi8KKwkJYXRvbWljX2RlYygmZHF1b3QtPmRxX2NvdW50KTsKKwkJLyogUmVsZWFzaW5nIGRxdW90IGR1cmluZyBxdW90YW9mZiBwaGFzZT8gKi8KKwkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpICYmCisJCSAgICBhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSA9PSAxKQorCQkJd2FrZV91cCgmZHF1b3QtPmRxX3dhaXRfdW51c2VkKTsKKwkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJCXJldHVybjsKKwl9CisJLyogTmVlZCB0byByZWxlYXNlIGRxdW90PyAqLworCWlmICh0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykgJiYgZHF1b3RfZGlydHkoZHF1b3QpKSB7CisJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCQkvKiBDb21taXQgZHF1b3QgYmVmb3JlIHJlbGVhc2luZyAqLworCQlyZXQgPSBkcXVvdC0+ZHFfc2ItPmRxX29wLT53cml0ZV9kcXVvdChkcXVvdCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogY2Fubm90IHdyaXRlIHF1b3RhIHN0cnVjdHVyZSBvbiAiCisJCQkJImRldmljZSAlcyAoZXJyb3IgJWQpLiBRdW90YSBtYXkgZ2V0IG91dCBvZiAiCisJCQkJInN5bmMhXG4iLCBkcXVvdC0+ZHFfc2ItPnNfaWQsIHJldCk7CisJCQkvKgorCQkJICogV2UgY2xlYXIgZGlydHkgYml0IGFueXdheSwgc28gdGhhdCB3ZSBhdm9pZAorCQkJICogaW5maW5pdGUgbG9vcCBoZXJlCisJCQkgKi8KKwkJCXNwaW5fbG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJCWNsZWFyX2RxdW90X2RpcnR5KGRxdW90KTsKKwkJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCQl9CisJCWdvdG8gd2Vfc2xlcHQ7CisJfQorCS8qIENsZWFyIGZsYWcgaW4gY2FzZSBkcXVvdCB3YXMgaW5hY3RpdmUgKHNvbWV0aGluZyBiYWQgaGFwcGVuZWQpICovCisJY2xlYXJfZHF1b3RfZGlydHkoZHF1b3QpOworCWlmICh0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykpIHsKKwkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJCWRxdW90LT5kcV9zYi0+ZHFfb3AtPnJlbGVhc2VfZHF1b3QoZHF1b3QpOworCQlnb3RvIHdlX3NsZXB0OworCX0KKwlhdG9taWNfZGVjKCZkcXVvdC0+ZHFfY291bnQpOworI2lmZGVmIF9fRFFVT1RfUEFSQU5PSUEKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlCVUdfT04oIWxpc3RfZW1wdHkoJmRxdW90LT5kcV9mcmVlKSk7CisjZW5kaWYKKwlwdXRfZHF1b3RfbGFzdChkcXVvdCk7CisJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MKGRxcHV0KTsKKworc3RydWN0IGRxdW90ICpkcXVvdF9hbGxvYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlyZXR1cm4ga21lbV9jYWNoZV96YWxsb2MoZHF1b3RfY2FjaGVwLCBHRlBfTk9GUyk7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X2FsbG9jKTsKKworc3RhdGljIHN0cnVjdCBkcXVvdCAqZ2V0X2VtcHR5X2RxdW90KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCXN0cnVjdCBkcXVvdCAqZHF1b3Q7CisKKwlkcXVvdCA9IHNiLT5kcV9vcC0+YWxsb2NfZHF1b3Qoc2IsIHR5cGUpOworCWlmKCFkcXVvdCkKKwkJcmV0dXJuIE5VTEw7CisKKwltdXRleF9pbml0KCZkcXVvdC0+ZHFfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmRxdW90LT5kcV9mcmVlKTsKKwlJTklUX0xJU1RfSEVBRCgmZHF1b3QtPmRxX2ludXNlKTsKKwlJTklUX0hMSVNUX05PREUoJmRxdW90LT5kcV9oYXNoKTsKKwlJTklUX0xJU1RfSEVBRCgmZHF1b3QtPmRxX2RpcnR5KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkcXVvdC0+ZHFfd2FpdF91bnVzZWQpOworCWRxdW90LT5kcV9zYiA9IHNiOworCWRxdW90LT5kcV90eXBlID0gdHlwZTsKKwlhdG9taWNfc2V0KCZkcXVvdC0+ZHFfY291bnQsIDEpOworCisJcmV0dXJuIGRxdW90OworfQorCisvKgorICogR2V0IHJlZmVyZW5jZSB0byBkcXVvdAorICoKKyAqIExvY2tpbmcgaXMgc2xpZ2h0bHkgdHJpY2t5IGhlcmUuIFdlIGFyZSBndWFyZGVkIGZyb20gcGFyYWxsZWwgcXVvdGFvZmYoKQorICogZGVzdHJveWluZyBvdXIgZHF1b3QgYnk6CisgKiAgIGEpIGNoZWNraW5nIGZvciBxdW90YSBmbGFncyB1bmRlciBkcV9saXN0X2xvY2sgYW5kCisgKiAgIGIpIGdldHRpbmcgYSByZWZlcmVuY2UgdG8gZHF1b3QgYmVmb3JlIHdlIHJlbGVhc2UgZHFfbGlzdF9sb2NrCisgKi8KK3N0cnVjdCBkcXVvdCAqZHFnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGlkLCBpbnQgdHlwZSkKK3sKKwl1bnNpZ25lZCBpbnQgaGFzaGVudCA9IGhhc2hmbihzYiwgaWQsIHR5cGUpOworCXN0cnVjdCBkcXVvdCAqZHF1b3QgPSBOVUxMLCAqZW1wdHkgPSBOVUxMOworCisgICAgICAgIGlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpCisJCXJldHVybiBOVUxMOword2Vfc2xlcHQ6CisJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7CisJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkgeworCQlzcGluX3VubG9jaygmZHFfc3RhdGVfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOworCQlnb3RvIG91dDsKKwl9CisJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOworCisJZHF1b3QgPSBmaW5kX2RxdW90KGhhc2hlbnQsIHNiLCBpZCwgdHlwZSk7CisJaWYgKCFkcXVvdCkgeworCQlpZiAoIWVtcHR5KSB7CisJCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJCWVtcHR5ID0gZ2V0X2VtcHR5X2RxdW90KHNiLCB0eXBlKTsKKwkJCWlmICghZW1wdHkpCisJCQkJc2NoZWR1bGUoKTsJLyogVHJ5IHRvIHdhaXQgZm9yIGEgbW9tZW50Li4uICovCisJCQlnb3RvIHdlX3NsZXB0OworCQl9CisJCWRxdW90ID0gZW1wdHk7CisJCWVtcHR5ID0gTlVMTDsKKwkJZHF1b3QtPmRxX2lkID0gaWQ7CisJCS8qIGFsbCBkcXVvdHMgZ28gb24gdGhlIGludXNlX2xpc3QgKi8KKwkJcHV0X2ludXNlKGRxdW90KTsKKwkJLyogaGFzaCBpdCBmaXJzdCBzbyBpdCBjYW4gYmUgZm91bmQgKi8KKwkJaW5zZXJ0X2RxdW90X2hhc2goZHF1b3QpOworCQlkcXN0YXRzLmxvb2t1cHMrKzsKKwkJc3Bpbl91bmxvY2soJmRxX2xpc3RfbG9jayk7CisJfSBlbHNlIHsKKwkJaWYgKCFhdG9taWNfcmVhZCgmZHF1b3QtPmRxX2NvdW50KSkKKwkJCXJlbW92ZV9mcmVlX2RxdW90KGRxdW90KTsKKwkJYXRvbWljX2luYygmZHF1b3QtPmRxX2NvdW50KTsKKwkJZHFzdGF0cy5jYWNoZV9oaXRzKys7CisJCWRxc3RhdHMubG9va3VwcysrOworCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwl9CisJLyogV2FpdCBmb3IgZHFfbG9jayAtIGFmdGVyIHRoaXMgd2Uga25vdyB0aGF0IGVpdGhlciBkcXVvdF9yZWxlYXNlKCkgaXMKKwkgKiBhbHJlYWR5IGZpbmlzaGVkIG9yIGl0IHdpbGwgYmUgY2FuY2VsZWQgZHVlIHRvIGRxX2NvdW50ID4gMSB0ZXN0ICovCisJd2FpdF9vbl9kcXVvdChkcXVvdCk7CisJLyogUmVhZCB0aGUgZHF1b3QgLyBhbGxvY2F0ZSBzcGFjZSBpbiBxdW90YSBmaWxlICovCisJaWYgKCF0ZXN0X2JpdChEUV9BQ1RJVkVfQiwgJmRxdW90LT5kcV9mbGFncykgJiYKKwkgICAgc2ItPmRxX29wLT5hY3F1aXJlX2RxdW90KGRxdW90KSA8IDApIHsKKwkJZHFwdXQoZHF1b3QpOworCQlkcXVvdCA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKyNpZmRlZiBfX0RRVU9UX1BBUkFOT0lBCisJQlVHX09OKCFkcXVvdC0+ZHFfc2IpOwkvKiBIYXMgc29tZWJvZHkgaW52YWxpZGF0ZWQgZW50cnkgdW5kZXIgdXM/ICovCisjZW5kaWYKK291dDoKKwlpZiAoZW1wdHkpCisJCWRvX2Rlc3Ryb3lfZHF1b3QoZW1wdHkpOworCisJcmV0dXJuIGRxdW90OworfQorRVhQT1JUX1NZTUJPTChkcWdldCk7CisKK3N0YXRpYyBpbnQgZHFpbml0X25lZWRlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSkKK3sKKwlpbnQgY250OworCisJaWYgKElTX05PUVVPVEEoaW5vZGUpKQorCQlyZXR1cm4gMDsKKwlpZiAodHlwZSAhPSAtMSkKKwkJcmV0dXJuICFpbm9kZS0+aV9kcXVvdFt0eXBlXTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCWlmICghaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKiBUaGlzIHJvdXRpbmUgaXMgZ3VhcmRlZCBieSBkcW9ub2ZmX211dGV4IG11dGV4ICovCitzdGF0aWMgdm9pZCBhZGRfZHF1b3RfcmVmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUsICpvbGRfaW5vZGUgPSBOVUxMOworCisJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKKwkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX1dJTExfRlJFRXxJX05FVykpCisJCQljb250aW51ZTsKKwkJaWYgKCFhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkpCisJCQljb250aW51ZTsKKwkJaWYgKCFkcWluaXRfbmVlZGVkKGlub2RlLCB0eXBlKSkKKwkJCWNvbnRpbnVlOworCisJCV9faWdldChpbm9kZSk7CisJCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKKworCQlpcHV0KG9sZF9pbm9kZSk7CisJCXNiLT5kcV9vcC0+aW5pdGlhbGl6ZShpbm9kZSwgdHlwZSk7CisJCS8qIFdlIGhvbGQgYSByZWZlcmVuY2UgdG8gJ2lub2RlJyBzbyBpdCBjb3VsZG4ndCBoYXZlIGJlZW4KKwkJICogcmVtb3ZlZCBmcm9tIHNfaW5vZGVzIGxpc3Qgd2hpbGUgd2UgZHJvcHBlZCB0aGUgaW5vZGVfbG9jay4KKwkJICogV2UgY2Fubm90IGlwdXQgdGhlIGlub2RlIG5vdyBhcyB3ZSBjYW4gYmUgaG9sZGluZyB0aGUgbGFzdAorCQkgKiByZWZlcmVuY2UgYW5kIHdlIGNhbm5vdCBpcHV0IGl0IHVuZGVyIGlub2RlX2xvY2suIFNvIHdlCisJCSAqIGtlZXAgdGhlIHJlZmVyZW5jZSBhbmQgaXB1dCBpdCBsYXRlci4gKi8KKwkJb2xkX2lub2RlID0gaW5vZGU7CisJCXNwaW5fbG9jaygmaW5vZGVfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKKwlpcHV0KG9sZF9pbm9kZSk7Cit9CisKKy8qCisgKiBSZXR1cm4gMCBpZiBkcXB1dCgpIHdvbid0IGJsb2NrLgorICogKG5vdGUgdGhhdCAxIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiBibG9ja2luZykKKyAqLworc3RhdGljIGlubGluZSBpbnQgZHFwdXRfYmxvY2tzKHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJaWYgKGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpIDw9IDEpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgorICogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gZHF1b3RzIGZyb20gaW5vZGUgYW5kIGFkZCBkcXVvdCB0byBsaXN0IGZvciBmcmVlaW5nCisgKiBpZiB3ZSBoYXZlIHRoZSBsYXN0IHJlZmVyZWNlIHRvIGRxdW90CisgKiBXZSBjYW4ndCByYWNlIHdpdGggYW55Ym9keSBiZWNhdXNlIHdlIGhvbGQgZHFwdHJfc2VtIGZvciB3cml0aW5nLi4uCisgKi8KK3N0YXRpYyBpbnQgcmVtb3ZlX2lub2RlX2RxdW90X3JlZihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwKKwkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKnRvZnJlZV9oZWFkKQoreworCXN0cnVjdCBkcXVvdCAqZHF1b3QgPSBpbm9kZS0+aV9kcXVvdFt0eXBlXTsKKworCWlub2RlLT5pX2RxdW90W3R5cGVdID0gTlVMTDsKKwlpZiAoZHF1b3QpIHsKKwkJaWYgKGRxcHV0X2Jsb2NrcyhkcXVvdCkpIHsKKyNpZmRlZiBfX0RRVU9UX1BBUkFOT0lBCisJCQlpZiAoYXRvbWljX3JlYWQoJmRxdW90LT5kcV9jb3VudCkgIT0gMSkKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJWRlM6IEFkZGluZyBkcXVvdCB3aXRoIGRxX2NvdW50ICVkIHRvIGRpc3Bvc2UgbGlzdC5cbiIsIGF0b21pY19yZWFkKCZkcXVvdC0+ZHFfY291bnQpKTsKKyNlbmRpZgorCQkJc3Bpbl9sb2NrKCZkcV9saXN0X2xvY2spOworCQkJLyogQXMgZHF1b3QgbXVzdCBoYXZlIGN1cnJlbnRseSB1c2VycyBpdCBjYW4ndCBiZSBvbgorCQkJICogdGhlIGZyZWUgbGlzdC4uLiAqLworCQkJbGlzdF9hZGQoJmRxdW90LT5kcV9mcmVlLCB0b2ZyZWVfaGVhZCk7CisJCQlzcGluX3VubG9jaygmZHFfbGlzdF9sb2NrKTsKKwkJCXJldHVybiAxOworCQl9CisJCWVsc2UKKwkJCWRxcHV0KGRxdW90KTsgICAvKiBXZSBoYXZlIGd1YXJhbnRlZWQgd2Ugd29uJ3QgYmxvY2sgKi8KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGcmVlIGxpc3Qgb2YgZHF1b3RzCisgKiBEcXVvdHMgYXJlIHJlbW92ZWQgZnJvbSBpbm9kZXMgYW5kIG5vIG5ldyByZWZlcmVuY2VzIGNhbiBiZSBnb3Qgc28gd2UgYXJlCisgKiB0aGUgb25seSBvbmVzIGhvbGRpbmcgcmVmZXJlbmNlCisgKi8KK3N0YXRpYyB2b2lkIHB1dF9kcXVvdF9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKnRvZnJlZV9oZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmFjdF9oZWFkOworCXN0cnVjdCBkcXVvdCAqZHF1b3Q7CisKKwlhY3RfaGVhZCA9IHRvZnJlZV9oZWFkLT5uZXh0OworCXdoaWxlIChhY3RfaGVhZCAhPSB0b2ZyZWVfaGVhZCkgeworCQlkcXVvdCA9IGxpc3RfZW50cnkoYWN0X2hlYWQsIHN0cnVjdCBkcXVvdCwgZHFfZnJlZSk7CisJCWFjdF9oZWFkID0gYWN0X2hlYWQtPm5leHQ7CisJCS8qIFJlbW92ZSBkcXVvdCBmcm9tIHRoZSBsaXN0IHNvIHdlIHdvbid0IGhhdmUgcHJvYmxlbXMuLi4gKi8KKwkJbGlzdF9kZWxfaW5pdCgmZHF1b3QtPmRxX2ZyZWUpOworCQlkcXB1dChkcXVvdCk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZW1vdmVfZHF1b3RfcmVmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLAorCQlzdHJ1Y3QgbGlzdF9oZWFkICp0b2ZyZWVfaGVhZCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKKwkJLyoKKwkJICogIFdlIGhhdmUgdG8gc2NhbiBhbHNvIElfTkVXIGlub2RlcyBiZWNhdXNlIHRoZXkgY2FuIGFscmVhZHkKKwkJICogIGhhdmUgcXVvdGEgcG9pbnRlciBpbml0aWFsaXplZC4gTHVja2lseSwgd2UgbmVlZCB0byB0b3VjaAorCQkgKiAgb25seSBxdW90YSBwb2ludGVycyBhbmQgdGhlc2UgaGF2ZSBzZXBhcmF0ZSBsb2NraW5nCisJCSAqICAoZHFwdHJfc2VtKS4KKwkJICovCisJCWlmICghSVNfTk9RVU9UQShpbm9kZSkpCisJCQlyZW1vdmVfaW5vZGVfZHF1b3RfcmVmKGlub2RlLCB0eXBlLCB0b2ZyZWVfaGVhZCk7CisJfQorCXNwaW5fdW5sb2NrKCZpbm9kZV9sb2NrKTsKK30KKworLyogR2F0aGVyIGFsbCByZWZlcmVuY2VzIGZyb20gaW5vZGVzIGFuZCBkcm9wIHRoZW0gKi8KK3N0YXRpYyB2b2lkIGRyb3BfZHF1b3RfcmVmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCUxJU1RfSEVBRCh0b2ZyZWVfaGVhZCk7CisKKwlpZiAoc2ItPmRxX29wKSB7CisJCWRvd25fd3JpdGUoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKKwkJcmVtb3ZlX2RxdW90X3JlZihzYiwgdHlwZSwgJnRvZnJlZV9oZWFkKTsKKwkJdXBfd3JpdGUoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKKwkJcHV0X2RxdW90X2xpc3QoJnRvZnJlZV9oZWFkKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcXVvdF9pbmNyX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKK3sKKwlkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgKz0gbnVtYmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZHF1b3RfaW5jcl9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKK3sKKwlkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSArPSBudW1iZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcXVvdF9yZXN2X3NwYWNlKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgbnVtYmVyKQoreworCWRxdW90LT5kcV9kcWIuZHFiX3JzdnNwYWNlICs9IG51bWJlcjsKK30KKworLyoKKyAqIENsYWltIHJlc2VydmVkIHF1b3RhIHNwYWNlCisgKi8KK3N0YXRpYyB2b2lkIGRxdW90X2NsYWltX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBkcXVvdCAqZHF1b3QsCisJCQkJCQlxc2l6ZV90IG51bWJlcikKK3sKKwlXQVJOX09OKGRxdW90LT5kcV9kcWIuZHFiX3JzdnNwYWNlIDwgbnVtYmVyKTsKKwlkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSArPSBudW1iZXI7CisJZHF1b3QtPmRxX2RxYi5kcWJfcnN2c3BhY2UgLT0gbnVtYmVyOworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGRxdW90X2ZyZWVfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBudW1iZXIpCit7CisJZHF1b3QtPmRxX2RxYi5kcWJfcnN2c3BhY2UgLT0gbnVtYmVyOworfQorCitzdGF0aWMgdm9pZCBkcXVvdF9kZWNyX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKK3sKKwlpZiAoc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmxhZ3MgJiBEUVVPVF9ORUdBVElWRV9VU0FHRSB8fAorCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgPj0gbnVtYmVyKQorCQlkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgLT0gbnVtYmVyOworCWVsc2UKKwkJZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzID0gMDsKKwlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzIDw9IGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQpCisJCWRxdW90LT5kcV9kcWIuZHFiX2l0aW1lID0gKHRpbWVfdCkgMDsKKwljbGVhcl9iaXQoRFFfSU5PREVTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBkcXVvdF9kZWNyX3NwYWNlKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgbnVtYmVyKQoreworCWlmIChzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5mbGFncyAmIERRVU9UX05FR0FUSVZFX1VTQUdFIHx8CisJICAgIGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlID49IG51bWJlcikKKwkJZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgLT0gbnVtYmVyOworCWVsc2UKKwkJZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgPSAwOworCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSA8PSBkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0KQorCQlkcXVvdC0+ZHFfZHFiLmRxYl9idGltZSA9ICh0aW1lX3QpIDA7CisJY2xlYXJfYml0KERRX0JMS1NfQiwgJmRxdW90LT5kcV9mbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgd2FybmluZ19pc3N1ZWQoc3RydWN0IGRxdW90ICpkcXVvdCwgY29uc3QgaW50IHdhcm50eXBlKQoreworCWludCBmbGFnID0gKHdhcm50eXBlID09IFFVT1RBX05MX0JIQVJEV0FSTiB8fAorCQl3YXJudHlwZSA9PSBRVU9UQV9OTF9CU09GVExPTkdXQVJOKSA/IERRX0JMS1NfQiA6CisJCSgod2FybnR5cGUgPT0gUVVPVEFfTkxfSUhBUkRXQVJOIHx8CisJCXdhcm50eXBlID09IFFVT1RBX05MX0lTT0ZUTE9OR1dBUk4pID8gRFFfSU5PREVTX0IgOiAwKTsKKworCWlmICghZmxhZykKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoZmxhZywgJmRxdW90LT5kcV9mbGFncyk7Cit9CisKKyNpZmRlZiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORworc3RhdGljIGludCBmbGFnX3ByaW50X3dhcm5pbmdzID0gMTsKKworc3RhdGljIGludCBuZWVkX3ByaW50X3dhcm5pbmcoc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlpZiAoIWZsYWdfcHJpbnRfd2FybmluZ3MpCisJCXJldHVybiAwOworCisJc3dpdGNoIChkcXVvdC0+ZHFfdHlwZSkgeworCQljYXNlIFVTUlFVT1RBOgorCQkJcmV0dXJuIGN1cnJlbnRfZnN1aWQoKSA9PSBkcXVvdC0+ZHFfaWQ7CisJCWNhc2UgR1JQUVVPVEE6CisJCQlyZXR1cm4gaW5fZ3JvdXBfcChkcXVvdC0+ZHFfaWQpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogUHJpbnQgd2FybmluZyB0byB1c2VyIHdoaWNoIGV4Y2VlZGVkIHF1b3RhICovCitzdGF0aWMgdm9pZCBwcmludF93YXJuaW5nKHN0cnVjdCBkcXVvdCAqZHF1b3QsIGNvbnN0IGludCB3YXJudHlwZSkKK3sKKwljaGFyICptc2cgPSBOVUxMOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlpZiAod2FybnR5cGUgPT0gUVVPVEFfTkxfSUhBUkRCRUxPVyB8fAorCSAgICB3YXJudHlwZSA9PSBRVU9UQV9OTF9JU09GVEJFTE9XIHx8CisJICAgIHdhcm50eXBlID09IFFVT1RBX05MX0JIQVJEQkVMT1cgfHwKKwkgICAgd2FybnR5cGUgPT0gUVVPVEFfTkxfQlNPRlRCRUxPVyB8fCAhbmVlZF9wcmludF93YXJuaW5nKGRxdW90KSkKKwkJcmV0dXJuOworCisJdHR5ID0gZ2V0X2N1cnJlbnRfdHR5KCk7CisJaWYgKCF0dHkpCisJCXJldHVybjsKKwl0dHlfd3JpdGVfbWVzc2FnZSh0dHksIGRxdW90LT5kcV9zYi0+c19pZCk7CisJaWYgKHdhcm50eXBlID09IFFVT1RBX05MX0lTT0ZUV0FSTiB8fCB3YXJudHlwZSA9PSBRVU9UQV9OTF9CU09GVFdBUk4pCisJCXR0eV93cml0ZV9tZXNzYWdlKHR0eSwgIjogd2FybmluZywgIik7CisJZWxzZQorCQl0dHlfd3JpdGVfbWVzc2FnZSh0dHksICI6IHdyaXRlIGZhaWxlZCwgIik7CisJdHR5X3dyaXRlX21lc3NhZ2UodHR5LCBxdW90YXR5cGVzW2RxdW90LT5kcV90eXBlXSk7CisJc3dpdGNoICh3YXJudHlwZSkgeworCQljYXNlIFFVT1RBX05MX0lIQVJEV0FSTjoKKwkJCW1zZyA9ICIgZmlsZSBsaW1pdCByZWFjaGVkLlxyXG4iOworCQkJYnJlYWs7CisJCWNhc2UgUVVPVEFfTkxfSVNPRlRMT05HV0FSTjoKKwkJCW1zZyA9ICIgZmlsZSBxdW90YSBleGNlZWRlZCB0b28gbG9uZy5cclxuIjsKKwkJCWJyZWFrOworCQljYXNlIFFVT1RBX05MX0lTT0ZUV0FSTjoKKwkJCW1zZyA9ICIgZmlsZSBxdW90YSBleGNlZWRlZC5cclxuIjsKKwkJCWJyZWFrOworCQljYXNlIFFVT1RBX05MX0JIQVJEV0FSTjoKKwkJCW1zZyA9ICIgYmxvY2sgbGltaXQgcmVhY2hlZC5cclxuIjsKKwkJCWJyZWFrOworCQljYXNlIFFVT1RBX05MX0JTT0ZUTE9OR1dBUk46CisJCQltc2cgPSAiIGJsb2NrIHF1b3RhIGV4Y2VlZGVkIHRvbyBsb25nLlxyXG4iOworCQkJYnJlYWs7CisJCWNhc2UgUVVPVEFfTkxfQlNPRlRXQVJOOgorCQkJbXNnID0gIiBibG9jayBxdW90YSBleGNlZWRlZC5cclxuIjsKKwkJCWJyZWFrOworCX0KKwl0dHlfd3JpdGVfbWVzc2FnZSh0dHksIG1zZyk7CisJdHR5X2tyZWZfcHV0KHR0eSk7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQorCisvKiBOZXRsaW5rIGZhbWlseSBzdHJ1Y3R1cmUgZm9yIHF1b3RhICovCitzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IHF1b3RhX2dlbmxfZmFtaWx5ID0geworCS5pZCA9IEdFTkxfSURfR0VORVJBVEUsCisJLmhkcnNpemUgPSAwLAorCS5uYW1lID0gIlZGU19EUVVPVCIsCisJLnZlcnNpb24gPSAxLAorCS5tYXhhdHRyID0gUVVPVEFfTkxfQV9NQVgsCit9OworCisvKiBTZW5kIHdhcm5pbmcgdG8gdXNlcnNwYWNlIGFib3V0IHVzZXIgd2hpY2ggZXhjZWVkZWQgcXVvdGEgKi8KK3N0YXRpYyB2b2lkIHNlbmRfd2FybmluZyhjb25zdCBzdHJ1Y3QgZHF1b3QgKmRxdW90LCBjb25zdCBjaGFyIHdhcm50eXBlKQoreworCXN0YXRpYyBhdG9taWNfdCBzZXE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl2b2lkICptc2dfaGVhZDsKKwlpbnQgcmV0OworCWludCBtc2dfc2l6ZSA9IDQgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgKworCQkgICAgICAgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1NjQpKTsKKworCS8qIFdlIGhhdmUgdG8gYWxsb2NhdGUgdXNpbmcgR0ZQX05PRlMgYXMgd2UgYXJlIGNhbGxlZCBmcm9tIGEKKwkgKiBmaWxlc3lzdGVtIHBlcmZvcm1pbmcgd3JpdGUgYW5kIHRodXMgZnVydGhlciByZWN1cnNpb24gaW50bworCSAqIHRoZSBmcyB0byBmcmVlIHNvbWUgZGF0YSBjb3VsZCBjYXVzZSBkZWFkbG9ja3MuICovCisJc2tiID0gZ2VubG1zZ19uZXcobXNnX3NpemUsIEdGUF9OT0ZTKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAiVkZTOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBzZW5kIHF1b3RhIHdhcm5pbmcuXG4iKTsKKwkJcmV0dXJuOworCX0KKwltc2dfaGVhZCA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgYXRvbWljX2FkZF9yZXR1cm4oMSwgJnNlcSksCisJCQkmcXVvdGFfZ2VubF9mYW1pbHksIDAsIFFVT1RBX05MX0NfV0FSTklORyk7CisJaWYgKCFtc2dfaGVhZCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAiVkZTOiBDYW5ub3Qgc3RvcmUgbmV0bGluayBoZWFkZXIgaW4gcXVvdGEgd2FybmluZy5cbiIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCXJldCA9IG5sYV9wdXRfdTMyKHNrYiwgUVVPVEFfTkxfQV9RVFlQRSwgZHF1b3QtPmRxX3R5cGUpOworCWlmIChyZXQpCisJCWdvdG8gYXR0cl9lcnJfb3V0OworCXJldCA9IG5sYV9wdXRfdTY0KHNrYiwgUVVPVEFfTkxfQV9FWENFU1NfSUQsIGRxdW90LT5kcV9pZCk7CisJaWYgKHJldCkKKwkJZ290byBhdHRyX2Vycl9vdXQ7CisJcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX1dBUk5JTkcsIHdhcm50eXBlKTsKKwlpZiAocmV0KQorCQlnb3RvIGF0dHJfZXJyX291dDsKKwlyZXQgPSBubGFfcHV0X3UzMihza2IsIFFVT1RBX05MX0FfREVWX01BSk9SLAorCQlNQUpPUihkcXVvdC0+ZHFfc2ItPnNfZGV2KSk7CisJaWYgKHJldCkKKwkJZ290byBhdHRyX2Vycl9vdXQ7CisJcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX0RFVl9NSU5PUiwKKwkJTUlOT1IoZHF1b3QtPmRxX3NiLT5zX2RldikpOworCWlmIChyZXQpCisJCWdvdG8gYXR0cl9lcnJfb3V0OworCXJldCA9IG5sYV9wdXRfdTY0KHNrYiwgUVVPVEFfTkxfQV9DQVVTRURfSUQsIGN1cnJlbnRfdWlkKCkpOworCWlmIChyZXQpCisJCWdvdG8gYXR0cl9lcnJfb3V0OworCWdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWQpOworCisJZ2VubG1zZ19tdWx0aWNhc3Qoc2tiLCAwLCBxdW90YV9nZW5sX2ZhbWlseS5pZCwgR0ZQX05PRlMpOworCXJldHVybjsKK2F0dHJfZXJyX291dDoKKwlwcmludGsoS0VSTl9FUlIgIlZGUzogTm90IGVub3VnaCBzcGFjZSB0byBjb21wb3NlIHF1b3RhIG1lc3NhZ2UhXG4iKTsKK2Vycl9vdXQ6CisJa2ZyZWVfc2tiKHNrYik7Cit9CisjZW5kaWYKKy8qCisgKiBXcml0ZSB3YXJuaW5ncyB0byB0aGUgY29uc29sZSBhbmQgc2VuZCB3YXJuaW5nIG1lc3NhZ2VzIG92ZXIgbmV0bGluay4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gc2xlZXAuCisgKi8KK3N0YXRpYyB2b2lkIGZsdXNoX3dhcm5pbmdzKHN0cnVjdCBkcXVvdCAqY29uc3QgKmRxdW90cywgY2hhciAqd2FybnR5cGUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYUVVPVEFTOyBpKyspCisJCWlmIChkcXVvdHNbaV0gJiYgd2FybnR5cGVbaV0gIT0gUVVPVEFfTkxfTk9XQVJOICYmCisJCSAgICAhd2FybmluZ19pc3N1ZWQoZHF1b3RzW2ldLCB3YXJudHlwZVtpXSkpIHsKKyNpZmRlZiBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORworCQkJcHJpbnRfd2FybmluZyhkcXVvdHNbaV0sIHdhcm50eXBlW2ldKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQorCQkJc2VuZF93YXJuaW5nKGRxdW90c1tpXSwgd2FybnR5cGVbaV0pOworI2VuZGlmCisJCX0KK30KKworc3RhdGljIGludCBpZ25vcmVfaGFyZGxpbWl0KHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJc3RydWN0IG1lbV9kcWluZm8gKmluZm8gPSAmc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+aW5mb1tkcXVvdC0+ZHFfdHlwZV07CisKKwlyZXR1cm4gY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSAmJgorCSAgICAgICAoaW5mby0+ZHFpX2Zvcm1hdC0+cWZfZm10X2lkICE9IFFGTVRfVkZTX09MRCB8fAorCQkhKGluZm8tPmRxaV9mbGFncyAmIFYxX0RRRl9SU1FVQVNIKSk7Cit9CisKKy8qIG5lZWRzIGRxX2RhdGFfbG9jayAqLworc3RhdGljIGludCBjaGVja19pZHEoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBpbm9kZXMsIGNoYXIgKndhcm50eXBlKQoreworCXFzaXplX3QgbmV3aW5vZGVzID0gZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzICsgaW5vZGVzOworCisJKndhcm50eXBlID0gUVVPVEFfTkxfTk9XQVJOOworCWlmICghc2JfaGFzX3F1b3RhX2xpbWl0c19lbmFibGVkKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpIHx8CisJICAgIHRlc3RfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncykpCisJCXJldHVybiBRVU9UQV9PSzsKKworCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0ICYmCisJICAgIG5ld2lub2RlcyA+IGRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQgJiYKKyAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkgeworCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9JSEFSRFdBUk47CisJCXJldHVybiBOT19RVU9UQTsKKwl9CisKKwlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCAmJgorCSAgICBuZXdpbm9kZXMgPiBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0ICYmCisJICAgIGRxdW90LT5kcV9kcWIuZHFiX2l0aW1lICYmCisJICAgIGdldF9zZWNvbmRzKCkgPj0gZHF1b3QtPmRxX2RxYi5kcWJfaXRpbWUgJiYKKyAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkgeworCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9JU09GVExPTkdXQVJOOworCQlyZXR1cm4gTk9fUVVPVEE7CisJfQorCisJaWYgKGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgJiYKKwkgICAgbmV3aW5vZGVzID4gZHF1b3QtPmRxX2RxYi5kcWJfaXNvZnRsaW1pdCAmJgorCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9pdGltZSA9PSAwKSB7CisJCSp3YXJudHlwZSA9IFFVT1RBX05MX0lTT0ZUV0FSTjsKKwkJZHF1b3QtPmRxX2RxYi5kcWJfaXRpbWUgPSBnZXRfc2Vjb25kcygpICsKKwkJICAgIHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmluZm9bZHF1b3QtPmRxX3R5cGVdLmRxaV9pZ3JhY2U7CisJfQorCisJcmV0dXJuIFFVT1RBX09LOworfQorCisvKiBuZWVkcyBkcV9kYXRhX2xvY2sgKi8KK3N0YXRpYyBpbnQgY2hlY2tfYmRxKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3Qgc3BhY2UsIGludCBwcmVhbGxvYywgY2hhciAqd2FybnR5cGUpCit7CisJcXNpemVfdCB0c3BhY2U7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRxdW90LT5kcV9zYjsKKworCSp3YXJudHlwZSA9IFFVT1RBX05MX05PV0FSTjsKKwlpZiAoIXNiX2hhc19xdW90YV9saW1pdHNfZW5hYmxlZChzYiwgZHF1b3QtPmRxX3R5cGUpIHx8CisJICAgIHRlc3RfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncykpCisJCXJldHVybiBRVU9UQV9PSzsKKworCXRzcGFjZSA9IGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlICsgZHF1b3QtPmRxX2RxYi5kcWJfcnN2c3BhY2UKKwkJKyBzcGFjZTsKKworCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0ICYmCisJICAgIHRzcGFjZSA+IGRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQgJiYKKyAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkgeworCQlpZiAoIXByZWFsbG9jKQorCQkJKndhcm50eXBlID0gUVVPVEFfTkxfQkhBUkRXQVJOOworCQlyZXR1cm4gTk9fUVVPVEE7CisJfQorCisJaWYgKGRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgJiYKKwkgICAgdHNwYWNlID4gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCAmJgorCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9idGltZSAmJgorCSAgICBnZXRfc2Vjb25kcygpID49IGRxdW90LT5kcV9kcWIuZHFiX2J0aW1lICYmCisgICAgICAgICAgICAhaWdub3JlX2hhcmRsaW1pdChkcXVvdCkpIHsKKwkJaWYgKCFwcmVhbGxvYykKKwkJCSp3YXJudHlwZSA9IFFVT1RBX05MX0JTT0ZUTE9OR1dBUk47CisJCXJldHVybiBOT19RVU9UQTsKKwl9CisKKwlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCAmJgorCSAgICB0c3BhY2UgPiBkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ICYmCisJICAgIGRxdW90LT5kcV9kcWIuZHFiX2J0aW1lID09IDApIHsKKwkJaWYgKCFwcmVhbGxvYykgeworCQkJKndhcm50eXBlID0gUVVPVEFfTkxfQlNPRlRXQVJOOworCQkJZHF1b3QtPmRxX2RxYi5kcWJfYnRpbWUgPSBnZXRfc2Vjb25kcygpICsKKwkJCSAgICBzYl9kcW9wdChzYiktPmluZm9bZHF1b3QtPmRxX3R5cGVdLmRxaV9iZ3JhY2U7CisJCX0KKwkJZWxzZQorCQkJLyoKKwkJCSAqIFdlIGRvbid0IGFsbG93IHByZWFsbG9jYXRpb24gdG8gZXhjZWVkIHNvZnRsaW1pdCBzbyBleGNlZWRpbmcgd2lsbAorCQkJICogYmUgYWx3YXlzIHByaW50ZWQKKwkJCSAqLworCQkJcmV0dXJuIE5PX1FVT1RBOworCX0KKworCXJldHVybiBRVU9UQV9PSzsKK30KKworc3RhdGljIGludCBpbmZvX2lkcV9mcmVlKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzKQoreworCXFzaXplX3QgbmV3aW5vZGVzOworCisJaWYgKHRlc3RfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncykgfHwKKwkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzIDw9IGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgfHwKKwkgICAgIXNiX2hhc19xdW90YV9saW1pdHNfZW5hYmxlZChkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKSkKKwkJcmV0dXJuIFFVT1RBX05MX05PV0FSTjsKKworCW5ld2lub2RlcyA9IGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyAtIGlub2RlczsKKwlpZiAobmV3aW5vZGVzIDw9IGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQpCisJCXJldHVybiBRVU9UQV9OTF9JU09GVEJFTE9XOworCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9jdXJpbm9kZXMgPj0gZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCAmJgorCSAgICBuZXdpbm9kZXMgPCBkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0KQorCQlyZXR1cm4gUVVPVEFfTkxfSUhBUkRCRUxPVzsKKwlyZXR1cm4gUVVPVEFfTkxfTk9XQVJOOworfQorCitzdGF0aWMgaW50IGluZm9fYmRxX2ZyZWUoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBzcGFjZSkKK3sKKwlpZiAodGVzdF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSB8fAorCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9jdXJzcGFjZSA8PSBkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0KQorCQlyZXR1cm4gUVVPVEFfTkxfTk9XQVJOOworCisJaWYgKGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlIC0gc3BhY2UgPD0gZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCkKKwkJcmV0dXJuIFFVT1RBX05MX0JTT0ZUQkVMT1c7CisJaWYgKGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlID49IGRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQgJiYKKwkgICAgZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgLSBzcGFjZSA8IGRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQpCisJCXJldHVybiBRVU9UQV9OTF9CSEFSREJFTE9XOworCXJldHVybiBRVU9UQV9OTF9OT1dBUk47Cit9CisvKgorICoJSW5pdGlhbGl6ZSBxdW90YSBwb2ludGVycyBpbiBpbm9kZQorICoJV2UgZG8gdGhpbmdzIGluIGEgYml0IGNvbXBsaWNhdGVkIHdheSBidXQgYnkgdGhhdCB3ZSBhdm9pZCBjYWxsaW5nCisgKglkcWdldCgpIGFuZCB0aHVzIGZpbGVzeXN0ZW0gY2FsbGJhY2tzIHVuZGVyIGRxcHRyX3NlbS4KKyAqLworaW50IGRxdW90X2luaXRpYWxpemUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCit7CisJdW5zaWduZWQgaW50IGlkID0gMDsKKwlpbnQgY250LCByZXQgPSAwOworCXN0cnVjdCBkcXVvdCAqZ290W01BWFFVT1RBU10gPSB7IE5VTEwsIE5VTEwgfTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisKKwkvKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKKyAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCisJaWYgKElTX05PUVVPVEEoaW5vZGUpKQorCQlyZXR1cm4gMDsKKworCS8qIEZpcnN0IGdldCByZWZlcmVuY2VzIHRvIHN0cnVjdHVyZXMgd2UgbWlnaHQgbmVlZC4gKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKHR5cGUgIT0gLTEgJiYgY250ICE9IHR5cGUpCisJCQljb250aW51ZTsKKwkJc3dpdGNoIChjbnQpIHsKKwkJY2FzZSBVU1JRVU9UQToKKwkJCWlkID0gaW5vZGUtPmlfdWlkOworCQkJYnJlYWs7CisJCWNhc2UgR1JQUVVPVEE6CisJCQlpZCA9IGlub2RlLT5pX2dpZDsKKwkJCWJyZWFrOworCQl9CisJCWdvdFtjbnRdID0gZHFnZXQoc2IsIGlkLCBjbnQpOworCX0KKworCWRvd25fd3JpdGUoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKKwkvKiBIYXZpbmcgZHFwdHJfc2VtIHdlIGtub3cgTk9RVU9UQSBmbGFncyBjYW4ndCBiZSBhbHRlcmVkLi4uICovCisJaWYgKElTX05PUVVPVEEoaW5vZGUpKQorCQlnb3RvIG91dF9lcnI7CisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CisJCWlmICh0eXBlICE9IC0xICYmIGNudCAhPSB0eXBlKQorCQkJY29udGludWU7CisJCS8qIEF2b2lkIHJhY2VzIHdpdGggcXVvdGFvZmYoKSAqLworCQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIGNudCkpCisJCQljb250aW51ZTsKKwkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKSB7CisJCQlpbm9kZS0+aV9kcXVvdFtjbnRdID0gZ290W2NudF07CisJCQlnb3RbY250XSA9IE5VTEw7CisJCX0KKwl9CitvdXRfZXJyOgorCXVwX3dyaXRlKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7CisJLyogRHJvcCB1bnVzZWQgcmVmZXJlbmNlcyAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKKwkJZHFwdXQoZ290W2NudF0pOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X2luaXRpYWxpemUpOworCisvKgorICogCVJlbGVhc2UgYWxsIHF1b3RhcyByZWZlcmVuY2VkIGJ5IGlub2RlCisgKi8KK2ludCBkcXVvdF9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaW50IGNudDsKKwlzdHJ1Y3QgZHF1b3QgKnB1dFtNQVhRVU9UQVNdOworCisJZG93bl93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlwdXRbY250XSA9IGlub2RlLT5pX2RxdW90W2NudF07CisJCWlub2RlLT5pX2RxdW90W2NudF0gPSBOVUxMOworCX0KKwl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlkcXB1dChwdXRbY250XSk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X2Ryb3ApOworCisvKiBXcmFwcGVyIHRvIHJlbW92ZSByZWZlcmVuY2VzIHRvIHF1b3RhIHN0cnVjdHVyZXMgZnJvbSBpbm9kZSAqLwordm9pZCB2ZnNfZHFfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCS8qIEhlcmUgd2UgY2FuIGdldCBhcmJpdHJhcnkgaW5vZGUgZnJvbSBjbGVhcl9pbm9kZSgpIHNvIHdlIGhhdmUKKwkgKiB0byBiZSBjYXJlZnVsLiBPVE9IIHdlIGRvbid0IG5lZWQgbG9ja2luZyBhcyBxdW90YSBvcGVyYXRpb25zCisJICogYXJlIGFsbG93ZWQgdG8gY2hhbmdlIG9ubHkgYXQgbW91bnQgdGltZSAqLworCWlmICghSVNfTk9RVU9UQShpbm9kZSkgJiYgaW5vZGUtPmlfc2IgJiYgaW5vZGUtPmlfc2ItPmRxX29wCisJICAgICYmIGlub2RlLT5pX3NiLT5kcV9vcC0+ZHJvcCkgeworCQlpbnQgY250OworCQkvKiBUZXN0IGJlZm9yZSBjYWxsaW5nIHRvIHJ1bGUgb3V0IGNhbGxzIGZyb20gcHJvYyBhbmQgc3VjaAorICAgICAgICAgICAgICAgICAqIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZCB0byBibG9jay4gTm90ZSB0aGF0IHRoaXMgaXMKKwkJICogYWN0dWFsbHkgcmVsaWFibGUgdGVzdCBldmVuIHdpdGhvdXQgdGhlIGxvY2sgLSB0aGUgY2FsbGVyCisJCSAqIG11c3QgYXNzdXJlIHRoYXQgbm9ib2R5IGNhbiBjb21lIGFmdGVyIHRoZSBEUVVPVF9EUk9QIGFuZAorCQkgKiBhZGQgcXVvdGEgcG9pbnRlcnMgYmFjayBhbnl3YXkgKi8KKwkJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCisJCQkJYnJlYWs7CisJCWlmIChjbnQgPCBNQVhRVU9UQVMpCisJCQlpbm9kZS0+aV9zYi0+ZHFfb3AtPmRyb3AoaW5vZGUpOworCX0KK30KK0VYUE9SVF9TWU1CT0wodmZzX2RxX2Ryb3ApOworCisvKgorICogRm9sbG93aW5nIGZvdXIgZnVuY3Rpb25zIHVwZGF0ZSBpX2Jsb2NrcytpX2J5dGVzIGZpZWxkcyBhbmQKKyAqIHF1b3RhIGluZm9ybWF0aW9uICh0b2dldGhlciB3aXRoIGFwcHJvcHJpYXRlIGNoZWNrcykKKyAqIE5PVEU6IFdlIGFic29sdXRlbHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGNhbGxlciBkaXJ0aWVzCisgKiB0aGUgaW5vZGUgKHVzdWFsbHkgbWFjcm9zIGluIHF1b3Rhb3BzLmggY2FyZSBhYm91dCB0aGlzKSBhbmQKKyAqIGhvbGRzIGEgaGFuZGxlIGZvciB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBzbyB0aGF0IGRxdW90IHdyaXRlIGFuZAorICogaW5vZGUgd3JpdGUgZ28gaW50byB0aGUgc2FtZSB0cmFuc2FjdGlvbi4KKyAqLworCisvKgorICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKKyAqLworaW50IF9fZHF1b3RfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsCisJCQlpbnQgd2FybiwgaW50IHJlc2VydmUpCit7CisJaW50IGNudCwgcmV0ID0gUVVPVEFfT0s7CisJY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOworCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQl3YXJudHlwZVtjbnRdID0gUVVPVEFfTkxfTk9XQVJOOworCisJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pCisJCQljb250aW51ZTsKKwkJaWYgKGNoZWNrX2JkcShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIsIHdhcm4sIHdhcm50eXBlK2NudCkKKwkJICAgID09IE5PX1FVT1RBKSB7CisJCQlyZXQgPSBOT19RVU9UQTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCX0KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJY29udGludWU7CisJCWlmIChyZXNlcnZlKQorCQkJZHF1b3RfcmVzdl9zcGFjZShpbm9kZS0+aV9kcXVvdFtjbnRdLCBudW1iZXIpOworCQllbHNlCisJCQlkcXVvdF9pbmNyX3NwYWNlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJfQorCWlmICghcmVzZXJ2ZSkKKwkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOworb3V0X3VubG9jazoKKwlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKwlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBkcXVvdF9hbGxvY19zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IHdhcm4pCit7CisJaW50IGNudCwgcmV0ID0gUVVPVEFfT0s7CisKKwkvKgorCSAqIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQorCSAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleAorCSAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkgeworCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJCWdvdG8gb3V0OworCX0KKworCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCWlmIChJU19OT1FVT1RBKGlub2RlKSkgeworCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlyZXQgPSBfX2RxdW90X2FsbG9jX3NwYWNlKGlub2RlLCBudW1iZXIsIHdhcm4sIDApOworCWlmIChyZXQgPT0gTk9fUVVPVEEpCisJCWdvdG8gb3V0X3VubG9jazsKKworCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CitvdXRfdW5sb2NrOgorCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9hbGxvY19zcGFjZSk7CisKK2ludCBkcXVvdF9yZXNlcnZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgd2FybikKK3sKKwlpbnQgcmV0ID0gUVVPVEFfT0s7CisKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCisJCWdvdG8gb3V0OworCisJZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJaWYgKElTX05PUVVPVEEoaW5vZGUpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlyZXQgPSBfX2RxdW90X2FsbG9jX3NwYWNlKGlub2RlLCBudW1iZXIsIHdhcm4sIDEpOworb3V0X3VubG9jazoKKwl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfcmVzZXJ2ZV9zcGFjZSk7CisKKy8qCisgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAorICovCitpbnQgZHF1b3RfYWxsb2NfaW5vZGUoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJaW50IGNudCwgcmV0ID0gTk9fUVVPVEE7CisJY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOworCisJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCisgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkKKwkJcmV0dXJuIFFVT1RBX09LOworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKKwkJd2FybnR5cGVbY250XSA9IFFVT1RBX05MX05PV0FSTjsKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCQlyZXR1cm4gUVVPVEFfT0s7CisJfQorCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJY29udGludWU7CisJCWlmIChjaGVja19pZHEoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyLCB3YXJudHlwZStjbnQpCisJCSAgICA9PSBOT19RVU9UQSkKKwkJCWdvdG8gd2Fybl9wdXRfYWxsOworCX0KKworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pCisJCQljb250aW51ZTsKKwkJZHF1b3RfaW5jcl9pbm9kZXMoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwl9CisJcmV0ID0gUVVPVEFfT0s7Cit3YXJuX3B1dF9hbGw6CisJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CisJaWYgKHJldCA9PSBRVU9UQV9PSykKKwkJLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KKwkJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCisJCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKwlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOworCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9hbGxvY19pbm9kZSk7CisKK2ludCBkcXVvdF9jbGFpbV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK3sKKwlpbnQgY250OworCWludCByZXQgPSBRVU9UQV9PSzsKKworCWlmIChJU19OT1FVT1RBKGlub2RlKSkgeworCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJCWdvdG8gb3V0OworCX0KKworCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCWlmIChJU19OT1FVT1RBKGlub2RlKSkJeworCQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwkJZ290byBvdXQ7CisJfQorCisJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOworCS8qIENsYWltIHJlc2VydmVkIHF1b3RhcyB0byBhbGxvY2F0ZWQgcXVvdGFzICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CisJCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJZHF1b3RfY2xhaW1fcmVzZXJ2ZWRfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwKKwkJCQkJCQludW1iZXIpOworCX0KKwkvKiBVcGRhdGUgaW5vZGUgYnl0ZXMgKi8KKwlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CisJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CisJLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKwl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfY2xhaW1fc3BhY2UpOworCisvKgorICogUmVsZWFzZSByZXNlcnZlZCBxdW90YSBzcGFjZQorICovCit2b2lkIGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJaW50IGNudDsKKworCWlmIChJU19OT1FVT1RBKGlub2RlKSkKKwkJZ290byBvdXQ7CisKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCisJCWdvdG8gb3V0X3VubG9jazsKKworCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwkvKiBSZWxlYXNlIHJlc2VydmVkIGRxdW90cyAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCWRxdW90X2ZyZWVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwl9CisJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CisKK291dF91bmxvY2s6CisJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworb3V0OgorCXJldHVybjsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfcmVsZWFzZV9yZXNlcnZlZF9zcGFjZSk7CisKKy8qCisgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmxvY2ssIGJ1dCBvbmx5IGFmdGVyIGV2ZXJ5dGhpbmcgaXMgdXBkYXRlZAorICovCitpbnQgZHF1b3RfZnJlZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK3sKKwl1bnNpZ25lZCBpbnQgY250OworCWNoYXIgd2FybnR5cGVbTUFYUVVPVEFTXTsKKworCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQorICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKK291dF9zdWI6CisJCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgbnVtYmVyKTsKKwkJcmV0dXJuIFFVT1RBX09LOworCX0KKworCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCS8qIE5vdyByZWNoZWNrIHJlbGlhYmx5IHdoZW4gaG9sZGluZyBkcXB0cl9zZW0gKi8KKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCQlnb3RvIG91dF9zdWI7CisJfQorCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJY29udGludWU7CisJCXdhcm50eXBlW2NudF0gPSBpbmZvX2JkcV9mcmVlKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlcik7CisJCWRxdW90X2RlY3Jfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwl9CisJaW5vZGVfc3ViX2J5dGVzKGlub2RlLCBudW1iZXIpOworCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCS8qIERpcnRpZnkgYWxsIHRoZSBkcXVvdHMgLSB0aGlzIGNhbiBibG9jayB3aGVuIGpvdXJuYWxsaW5nICovCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQorCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCW1hcmtfZHF1b3RfZGlydHkoaW5vZGUtPmlfZHF1b3RbY250XSk7CisJZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKKwl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJcmV0dXJuIFFVT1RBX09LOworfQorRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX3NwYWNlKTsKKworLyoKKyAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCisgKi8KK2ludCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQoreworCXVuc2lnbmVkIGludCBjbnQ7CisJY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOworCisJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCisgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkKKwkJcmV0dXJuIFFVT1RBX09LOworCisJZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJLyogTm93IHJlY2hlY2sgcmVsaWFibHkgd2hlbiBob2xkaW5nIGRxcHRyX3NlbSAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkgeworCQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisJCXJldHVybiBRVU9UQV9PSzsKKwl9CisJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pCisJCQljb250aW51ZTsKKwkJd2FybnR5cGVbY250XSA9IGluZm9faWRxX2ZyZWUoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwkJZHF1b3RfZGVjcl9pbm9kZXMoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwl9CisJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CisJLyogRGlydGlmeSBhbGwgdGhlIGRxdW90cyAtIHRoaXMgY2FuIGJsb2NrIHdoZW4gam91cm5hbGxpbmcgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCWlmIChpbm9kZS0+aV9kcXVvdFtjbnRdKQorCQkJbWFya19kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdFtjbnRdKTsKKwlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOworCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwlyZXR1cm4gUVVPVEFfT0s7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X2ZyZWVfaW5vZGUpOworCisvKgorICogY2FsbCBiYWNrIGZ1bmN0aW9uLCBnZXQgcmVzZXJ2ZWQgcXVvdGEgc3BhY2UgZnJvbSB1bmRlcmx5aW5nIGZzCisgKi8KK3FzaXplX3QgZHF1b3RfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcXNpemVfdCByZXNlcnZlZF9zcGFjZSA9IDA7CisKKwlpZiAoc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikgJiYKKwkgICAgaW5vZGUtPmlfc2ItPmRxX29wLT5nZXRfcmVzZXJ2ZWRfc3BhY2UpCisJCXJlc2VydmVkX3NwYWNlID0gaW5vZGUtPmlfc2ItPmRxX29wLT5nZXRfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpOworCXJldHVybiByZXNlcnZlZF9zcGFjZTsKK30KKworLyoKKyAqIFRyYW5zZmVyIHRoZSBudW1iZXIgb2YgaW5vZGUgYW5kIGJsb2NrcyBmcm9tIG9uZSBkaXNrcXVvdGEgdG8gYW4gb3RoZXIuCisgKgorICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKKyAqIEEgdHJhbnNhY3Rpb24gbXVzdCBiZSBzdGFydGVkIHdoZW4gZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4KKyAqLworaW50IGRxdW90X3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqaWF0dHIpCit7CisJcXNpemVfdCBzcGFjZSwgY3VyX3NwYWNlOworCXFzaXplX3QgcnN2X3NwYWNlID0gMDsKKwlzdHJ1Y3QgZHF1b3QgKnRyYW5zZmVyX2Zyb21bTUFYUVVPVEFTXTsKKwlzdHJ1Y3QgZHF1b3QgKnRyYW5zZmVyX3RvW01BWFFVT1RBU107CisJaW50IGNudCwgcmV0ID0gUVVPVEFfT0s7CisJaW50IGNodWlkID0gaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgaW5vZGUtPmlfdWlkICE9IGlhdHRyLT5pYV91aWQsCisJICAgIGNoZ2lkID0gaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQgJiYgaW5vZGUtPmlfZ2lkICE9IGlhdHRyLT5pYV9naWQ7CisJY2hhciB3YXJudHlwZV90b1tNQVhRVU9UQVNdOworCWNoYXIgd2FybnR5cGVfZnJvbV9pbm9kZXNbTUFYUVVPVEFTXSwgd2FybnR5cGVfZnJvbV9zcGFjZVtNQVhRVU9UQVNdOworCisJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCisgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLworCWlmIChJU19OT1FVT1RBKGlub2RlKSkKKwkJcmV0dXJuIFFVT1RBX09LOworCS8qIEluaXRpYWxpemUgdGhlIGFycmF5cyAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQl0cmFuc2Zlcl9mcm9tW2NudF0gPSBOVUxMOworCQl0cmFuc2Zlcl90b1tjbnRdID0gTlVMTDsKKwkJd2FybnR5cGVfdG9bY250XSA9IFFVT1RBX05MX05PV0FSTjsKKwl9CisJaWYgKGNodWlkKQorCQl0cmFuc2Zlcl90b1tVU1JRVU9UQV0gPSBkcWdldChpbm9kZS0+aV9zYiwgaWF0dHItPmlhX3VpZCwKKwkJCQkJICAgICAgVVNSUVVPVEEpOworCWlmIChjaGdpZCkKKwkJdHJhbnNmZXJfdG9bR1JQUVVPVEFdID0gZHFnZXQoaW5vZGUtPmlfc2IsIGlhdHRyLT5pYV9naWQsCisJCQkJCSAgICAgIEdSUFFVT1RBKTsKKworCWRvd25fd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwkvKiBOb3cgcmVjaGVjayByZWxpYWJseSB3aGVuIGhvbGRpbmcgZHFwdHJfc2VtICovCisJaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CS8qIEZpbGUgd2l0aG91dCBxdW90YSBhY2NvdW50aW5nPyAqLworCQl1cF93cml0ZSgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOworCQlnb3RvIHB1dF9hbGw7CisJfQorCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwljdXJfc3BhY2UgPSBpbm9kZV9nZXRfYnl0ZXMoaW5vZGUpOworCXJzdl9zcGFjZSA9IGRxdW90X2dldF9yZXNlcnZlZF9zcGFjZShpbm9kZSk7CisJc3BhY2UgPSBjdXJfc3BhY2UgKyByc3Zfc3BhY2U7CisJLyogQnVpbGQgdGhlIHRyYW5zZmVyX2Zyb20gbGlzdCBhbmQgY2hlY2sgdGhlIGxpbWl0cyAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAoIXRyYW5zZmVyX3RvW2NudF0pCisJCQljb250aW51ZTsKKwkJdHJhbnNmZXJfZnJvbVtjbnRdID0gaW5vZGUtPmlfZHF1b3RbY250XTsKKwkJaWYgKGNoZWNrX2lkcSh0cmFuc2Zlcl90b1tjbnRdLCAxLCB3YXJudHlwZV90byArIGNudCkgPT0KKwkJICAgIE5PX1FVT1RBIHx8IGNoZWNrX2JkcSh0cmFuc2Zlcl90b1tjbnRdLCBzcGFjZSwgMCwKKwkJICAgIHdhcm50eXBlX3RvICsgY250KSA9PSBOT19RVU9UQSkKKwkJCWdvdG8gb3Zlcl9xdW90YTsKKwl9CisKKwkvKgorCSAqIEZpbmFsbHkgcGVyZm9ybSB0aGUgbmVlZGVkIHRyYW5zZmVyIGZyb20gdHJhbnNmZXJfZnJvbSB0byB0cmFuc2Zlcl90bworCSAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQkvKgorCQkgKiBTa2lwIGNoYW5nZXMgZm9yIHNhbWUgdWlkIG9yIGdpZCBvciBmb3IgdHVybmVkIG9mZiBxdW90YS10eXBlLgorCQkgKi8KKwkJaWYgKCF0cmFuc2Zlcl90b1tjbnRdKQorCQkJY29udGludWU7CisKKwkJLyogRHVlIHRvIElPIGVycm9yIHdlIG1pZ2h0IG5vdCBoYXZlIHRyYW5zZmVyX2Zyb21bXSBzdHJ1Y3R1cmUgKi8KKwkJaWYgKHRyYW5zZmVyX2Zyb21bY250XSkgeworCQkJd2FybnR5cGVfZnJvbV9pbm9kZXNbY250XSA9CisJCQkJaW5mb19pZHFfZnJlZSh0cmFuc2Zlcl9mcm9tW2NudF0sIDEpOworCQkJd2FybnR5cGVfZnJvbV9zcGFjZVtjbnRdID0KKwkJCQlpbmZvX2JkcV9mcmVlKHRyYW5zZmVyX2Zyb21bY250XSwgc3BhY2UpOworCQkJZHF1b3RfZGVjcl9pbm9kZXModHJhbnNmZXJfZnJvbVtjbnRdLCAxKTsKKwkJCWRxdW90X2RlY3Jfc3BhY2UodHJhbnNmZXJfZnJvbVtjbnRdLCBjdXJfc3BhY2UpOworCQkJZHF1b3RfZnJlZV9yZXNlcnZlZF9zcGFjZSh0cmFuc2Zlcl9mcm9tW2NudF0sCisJCQkJCQkgIHJzdl9zcGFjZSk7CisJCX0KKworCQlkcXVvdF9pbmNyX2lub2Rlcyh0cmFuc2Zlcl90b1tjbnRdLCAxKTsKKwkJZHF1b3RfaW5jcl9zcGFjZSh0cmFuc2Zlcl90b1tjbnRdLCBjdXJfc3BhY2UpOworCQlkcXVvdF9yZXN2X3NwYWNlKHRyYW5zZmVyX3RvW2NudF0sIHJzdl9zcGFjZSk7CisKKwkJaW5vZGUtPmlfZHF1b3RbY250XSA9IHRyYW5zZmVyX3RvW2NudF07CisJfQorCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCXVwX3dyaXRlKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CisKKwkvKiBEaXJ0aWZ5IGFsbCB0aGUgZHF1b3RzIC0gdGhpcyBjYW4gYmxvY2sgd2hlbiBqb3VybmFsbGluZyAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAodHJhbnNmZXJfZnJvbVtjbnRdKQorCQkJbWFya19kcXVvdF9kaXJ0eSh0cmFuc2Zlcl9mcm9tW2NudF0pOworCQlpZiAodHJhbnNmZXJfdG9bY250XSkgeworCQkJbWFya19kcXVvdF9kaXJ0eSh0cmFuc2Zlcl90b1tjbnRdKTsKKwkJCS8qIFRoZSByZWZlcmVuY2Ugd2UgZ290IGlzIHRyYW5zZmVycmVkIHRvIHRoZSBpbm9kZSAqLworCQkJdHJhbnNmZXJfdG9bY250XSA9IE5VTEw7CisJCX0KKwl9Cit3YXJuX3B1dF9hbGw6CisJZmx1c2hfd2FybmluZ3ModHJhbnNmZXJfdG8sIHdhcm50eXBlX3RvKTsKKwlmbHVzaF93YXJuaW5ncyh0cmFuc2Zlcl9mcm9tLCB3YXJudHlwZV9mcm9tX2lub2Rlcyk7CisJZmx1c2hfd2FybmluZ3ModHJhbnNmZXJfZnJvbSwgd2FybnR5cGVfZnJvbV9zcGFjZSk7CitwdXRfYWxsOgorCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlkcXB1dCh0cmFuc2Zlcl9mcm9tW2NudF0pOworCQlkcXB1dCh0cmFuc2Zlcl90b1tjbnRdKTsKKwl9CisJcmV0dXJuIHJldDsKK292ZXJfcXVvdGE6CisJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CisJdXBfd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKKwkvKiBDbGVhciBkcXVvdCBwb2ludGVycyB3ZSBkb24ndCB3YW50IHRvIGRxcHV0KCkgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCXRyYW5zZmVyX2Zyb21bY250XSA9IE5VTEw7CisJcmV0ID0gTk9fUVVPVEE7CisJZ290byB3YXJuX3B1dF9hbGw7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X3RyYW5zZmVyKTsKKworLyogV3JhcHBlciBmb3IgdHJhbnNmZXJyaW5nIG93bmVyc2hpcCBvZiBhbiBpbm9kZSAqLworaW50IHZmc19kcV90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQoreworCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSAmJiAhSVNfTk9RVU9UQShpbm9kZSkpIHsKKwkJdmZzX2RxX2luaXQoaW5vZGUpOworCQlpZiAoaW5vZGUtPmlfc2ItPmRxX29wLT50cmFuc2Zlcihpbm9kZSwgaWF0dHIpID09IE5PX1FVT1RBKQorCQkJcmV0dXJuIDE7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh2ZnNfZHFfdHJhbnNmZXIpOworCisvKgorICogV3JpdGUgaW5mbyBvZiBxdW90YSBmaWxlIHRvIGRpc2sKKyAqLworaW50IGRxdW90X2NvbW1pdF9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCWludCByZXQ7CisJc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpOworCisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOworCXJldCA9IGRxb3B0LT5vcHNbdHlwZV0tPndyaXRlX2ZpbGVfaW5mbyhzYiwgdHlwZSk7CisJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woZHF1b3RfY29tbWl0X2luZm8pOworCisvKgorICogRGVmaW5pdGlvbnMgb2YgZGlza3F1b3RhIG9wZXJhdGlvbnMuCisgKi8KK3N0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGRxdW90X29wZXJhdGlvbnMgPSB7CisJLmluaXRpYWxpemUJPSBkcXVvdF9pbml0aWFsaXplLAorCS5kcm9wCQk9IGRxdW90X2Ryb3AsCisJLmFsbG9jX3NwYWNlCT0gZHF1b3RfYWxsb2Nfc3BhY2UsCisJLmFsbG9jX2lub2RlCT0gZHF1b3RfYWxsb2NfaW5vZGUsCisJLmZyZWVfc3BhY2UJPSBkcXVvdF9mcmVlX3NwYWNlLAorCS5mcmVlX2lub2RlCT0gZHF1b3RfZnJlZV9pbm9kZSwKKwkudHJhbnNmZXIJPSBkcXVvdF90cmFuc2ZlciwKKwkud3JpdGVfZHF1b3QJPSBkcXVvdF9jb21taXQsCisJLmFjcXVpcmVfZHF1b3QJPSBkcXVvdF9hY3F1aXJlLAorCS5yZWxlYXNlX2RxdW90CT0gZHF1b3RfcmVsZWFzZSwKKwkubWFya19kaXJ0eQk9IGRxdW90X21hcmtfZHF1b3RfZGlydHksCisJLndyaXRlX2luZm8JPSBkcXVvdF9jb21taXRfaW5mbywKKwkuYWxsb2NfZHF1b3QJPSBkcXVvdF9hbGxvYywKKwkuZGVzdHJveV9kcXVvdAk9IGRxdW90X2Rlc3Ryb3ksCit9OworCisvKgorICogVHVybiBxdW90YSBvZmYgb24gYSBkZXZpY2UuIHR5cGUgPT0gLTEgPT0+IHF1b3Rhb2ZmIGZvciBhbGwgdHlwZXMgKHVtb3VudCkKKyAqLworaW50IHZmc19xdW90YV9kaXNhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IGNudCwgcmV0ID0gMDsKKwlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7CisJc3RydWN0IGlub2RlICp0b3B1dGlub2RlW01BWFFVT1RBU107CisKKwkvKiBDYW5ub3QgdHVybiBvZmYgdXNhZ2UgYWNjb3VudGluZyB3aXRob3V0IHR1cm5pbmcgb2ZmIGxpbWl0cywgb3IKKwkgKiBzdXNwZW5kIHF1b3RhcyBhbmQgc2ltdWx0YW5lb3VzbHkgdHVybiBxdW90YXMgb2ZmLiAqLworCWlmICgoZmxhZ3MgJiBEUVVPVF9VU0FHRV9FTkFCTEVEICYmICEoZmxhZ3MgJiBEUVVPVF9MSU1JVFNfRU5BQkxFRCkpCisJICAgIHx8IChmbGFncyAmIERRVU9UX1NVU1BFTkRFRCAmJiBmbGFncyAmIChEUVVPVF9MSU1JVFNfRU5BQkxFRCB8CisJICAgIERRVU9UX1VTQUdFX0VOQUJMRUQpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBXZSBuZWVkIHRvIHNlcmlhbGl6ZSBxdW90YV9vZmYoKSBmb3IgZGV2aWNlICovCisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCisJLyoKKwkgKiBTa2lwIGV2ZXJ5dGhpbmcgaWYgdGhlcmUncyBub3RoaW5nIHRvIGRvLiBXZSBoYXZlIHRvIGRvIHRoaXMgYmVjYXVzZQorCSAqIHNvbWV0aW1lcyB3ZSBhcmUgY2FsbGVkIHdoZW4gZmlsbF9zdXBlcigpIGZhaWxlZCBhbmQgY2FsbGluZworCSAqIHN5bmNfZnMoKSBpbiBzdWNoIGNhc2VzIGRvZXMgbm8gZ29vZC4KKwkgKi8KKwlpZiAoIXNiX2FueV9xdW90YV9sb2FkZWQoc2IpKSB7CisJCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCQlyZXR1cm4gMDsKKwl9CisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CisJCXRvcHV0aW5vZGVbY250XSA9IE5VTEw7CisJCWlmICh0eXBlICE9IC0xICYmIGNudCAhPSB0eXBlKQorCQkJY29udGludWU7CisJCWlmICghc2JfaGFzX3F1b3RhX2xvYWRlZChzYiwgY250KSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmbGFncyAmIERRVU9UX1NVU1BFTkRFRCkgeworCQkJc3Bpbl9sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKKwkJCWRxb3B0LT5mbGFncyB8PQorCQkJCWRxdW90X3N0YXRlX2ZsYWcoRFFVT1RfU1VTUEVOREVELCBjbnQpOworCQkJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOworCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKKwkJCWRxb3B0LT5mbGFncyAmPSB+ZHF1b3Rfc3RhdGVfZmxhZyhmbGFncywgY250KTsKKwkJCS8qIFR1cm5pbmcgb2ZmIHN1c3BlbmRlZCBxdW90YXM/ICovCisJCQlpZiAoIXNiX2hhc19xdW90YV9sb2FkZWQoc2IsIGNudCkgJiYKKwkJCSAgICBzYl9oYXNfcXVvdGFfc3VzcGVuZGVkKHNiLCBjbnQpKSB7CisJCQkJZHFvcHQtPmZsYWdzICY9CX5kcXVvdF9zdGF0ZV9mbGFnKAorCQkJCQkJCURRVU9UX1NVU1BFTkRFRCwgY250KTsKKwkJCQlzcGluX3VubG9jaygmZHFfc3RhdGVfbG9jayk7CisJCQkJaXB1dChkcW9wdC0+ZmlsZXNbY250XSk7CisJCQkJZHFvcHQtPmZpbGVzW2NudF0gPSBOVUxMOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOworCQl9CisKKwkJLyogV2Ugc3RpbGwgaGF2ZSB0byBrZWVwIHF1b3RhIGxvYWRlZD8gKi8KKwkJaWYgKHNiX2hhc19xdW90YV9sb2FkZWQoc2IsIGNudCkgJiYgIShmbGFncyAmIERRVU9UX1NVU1BFTkRFRCkpCisJCQljb250aW51ZTsKKworCQkvKiBOb3RlOiB0aGVzZSBhcmUgYmxvY2tpbmcgb3BlcmF0aW9ucyAqLworCQlkcm9wX2RxdW90X3JlZihzYiwgY250KTsKKwkJaW52YWxpZGF0ZV9kcXVvdHMoc2IsIGNudCk7CisJCS8qCisJCSAqIE5vdyBhbGwgZHF1b3RzIHNob3VsZCBiZSBpbnZhbGlkYXRlZCwgYWxsIHdyaXRlcyBkb25lIHNvIHdlCisJCSAqIHNob3VsZCBiZSBvbmx5IHVzZXJzIG9mIHRoZSBpbmZvLiBObyBsb2NrcyBuZWVkZWQuCisJCSAqLworCQlpZiAoaW5mb19kaXJ0eSgmZHFvcHQtPmluZm9bY250XSkpCisJCQlzYi0+ZHFfb3AtPndyaXRlX2luZm8oc2IsIGNudCk7CisJCWlmIChkcW9wdC0+b3BzW2NudF0tPmZyZWVfZmlsZV9pbmZvKQorCQkJZHFvcHQtPm9wc1tjbnRdLT5mcmVlX2ZpbGVfaW5mbyhzYiwgY250KTsKKwkJcHV0X3F1b3RhX2Zvcm1hdChkcW9wdC0+aW5mb1tjbnRdLmRxaV9mb3JtYXQpOworCisJCXRvcHV0aW5vZGVbY250XSA9IGRxb3B0LT5maWxlc1tjbnRdOworCQlpZiAoIXNiX2hhc19xdW90YV9sb2FkZWQoc2IsIGNudCkpCisJCQlkcW9wdC0+ZmlsZXNbY250XSA9IE5VTEw7CisJCWRxb3B0LT5pbmZvW2NudF0uZHFpX2ZsYWdzID0gMDsKKwkJZHFvcHQtPmluZm9bY250XS5kcWlfaWdyYWNlID0gMDsKKwkJZHFvcHQtPmluZm9bY250XS5kcWlfYmdyYWNlID0gMDsKKwkJZHFvcHQtPm9wc1tjbnRdID0gTlVMTDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7CisKKwkvKiBTa2lwIHN5bmNpbmcgYW5kIHNldHRpbmcgZmxhZ3MgaWYgcXVvdGEgZmlsZXMgYXJlIGhpZGRlbiAqLworCWlmIChkcW9wdC0+ZmxhZ3MgJiBEUVVPVF9RVU9UQV9TWVNfRklMRSkKKwkJZ290byBwdXRfaW5vZGVzOworCisJLyogU3luYyB0aGUgc3VwZXJibG9jayBzbyB0aGF0IGJ1ZmZlcnMgd2l0aCBxdW90YSBkYXRhIGFyZSB3cml0dGVuIHRvCisJICogZGlzayAoYW5kIHNvIHVzZXJzcGFjZSBzZWVzIGNvcnJlY3QgZGF0YSBhZnRlcndhcmRzKS4gKi8KKwlpZiAoc2ItPnNfb3AtPnN5bmNfZnMpCisJCXNiLT5zX29wLT5zeW5jX2ZzKHNiLCAxKTsKKwlzeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYpOworCS8qIE5vdyB0aGUgcXVvdGEgZmlsZXMgYXJlIGp1c3Qgb3JkaW5hcnkgZmlsZXMgYW5kIHdlIGNhbiBzZXQgdGhlCisJICogaW5vZGUgZmxhZ3MgYmFjay4gTW9yZW92ZXIgd2UgZGlzY2FyZCB0aGUgcGFnZWNhY2hlIHNvIHRoYXQKKwkgKiB1c2Vyc3BhY2Ugc2VlcyB0aGUgd3JpdGVzIHdlIGRpZCBieXBhc3NpbmcgdGhlIHBhZ2VjYWNoZS4gV2UKKwkgKiBtdXN0IGFsc28gZGlzY2FyZCB0aGUgYmxvY2tkZXYgYnVmZmVycyBzbyB0aGF0IHdlIHNlZSB0aGUKKwkgKiBjaGFuZ2VzIGRvbmUgYnkgdXNlcnNwYWNlIG9uIHRoZSBuZXh0IHF1b3Rhb24oKSAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKKwkJaWYgKHRvcHV0aW5vZGVbY250XSkgeworCQkJbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCQkJLyogSWYgcXVvdGEgd2FzIHJlZW5hYmxlZCBpbiB0aGUgbWVhbnRpbWUsIHdlIGhhdmUKKwkJCSAqIG5vdGhpbmcgdG8gZG8gKi8KKwkJCWlmICghc2JfaGFzX3F1b3RhX2xvYWRlZChzYiwgY250KSkgeworCQkJCW11dGV4X2xvY2tfbmVzdGVkKCZ0b3B1dGlub2RlW2NudF0tPmlfbXV0ZXgsCisJCQkJCQkgIElfTVVURVhfUVVPVEEpOworCQkJCXRvcHV0aW5vZGVbY250XS0+aV9mbGFncyAmPSB+KFNfSU1NVVRBQkxFIHwKKwkJCQkgIFNfTk9BVElNRSB8IFNfTk9RVU9UQSk7CisJCQkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJnRvcHV0aW5vZGVbY250XS0+aV9kYXRhLAorCQkJCQkJICAgICAwKTsKKwkJCQltdXRleF91bmxvY2soJnRvcHV0aW5vZGVbY250XS0+aV9tdXRleCk7CisJCQkJbWFya19pbm9kZV9kaXJ0eSh0b3B1dGlub2RlW2NudF0pOworCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7CisJCX0KKwlpZiAoc2ItPnNfYmRldikKKwkJaW52YWxpZGF0ZV9iZGV2KHNiLT5zX2JkZXYpOworcHV0X2lub2RlczoKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCisJCWlmICh0b3B1dGlub2RlW2NudF0pIHsKKwkJCS8qIE9uIHJlbW91bnQgUk8sIHdlIGtlZXAgdGhlIGlub2RlIHBvaW50ZXIgc28gdGhhdCB3ZQorCQkJICogY2FuIHJlZW5hYmxlIHF1b3RhIG9uIHRoZSBzdWJzZXF1ZW50IHJlbW91bnQgUlcuIFdlCisJCQkgKiBoYXZlIHRvIGNoZWNrICdmbGFncycgdmFyaWFibGUgYW5kIG5vdCB1c2Ugc2JfaGFzXworCQkJICogZnVuY3Rpb24gYmVjYXVzZSBhbm90aGVyIHF1b3Rhb24gLyBxdW90YW9mZiBjb3VsZAorCQkJICogY2hhbmdlIGdsb2JhbCBzdGF0ZSBiZWZvcmUgd2UgZ290IGhlcmUuIFdlIHJlZnVzZQorCQkJICogdG8gc3VzcGVuZCBxdW90YXMgd2hlbiB0aGVyZSBpcyBwZW5kaW5nIGRlbGV0ZSBvbgorCQkJICogdGhlIHF1b3RhIGZpbGUuLi4gKi8KKwkJCWlmICghKGZsYWdzICYgRFFVT1RfU1VTUEVOREVEKSkKKwkJCQlpcHV0KHRvcHV0aW5vZGVbY250XSk7CisJCQllbHNlIGlmICghdG9wdXRpbm9kZVtjbnRdLT5pX25saW5rKQorCQkJCXJldCA9IC1FQlVTWTsKKwkJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHZmc19xdW90YV9kaXNhYmxlKTsKKworaW50IHZmc19xdW90YV9vZmYoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCByZW1vdW50KQoreworCXJldHVybiB2ZnNfcXVvdGFfZGlzYWJsZShzYiwgdHlwZSwgcmVtb3VudCA/IERRVU9UX1NVU1BFTkRFRCA6CisJCQkJIChEUVVPVF9VU0FHRV9FTkFCTEVEIHwgRFFVT1RfTElNSVRTX0VOQUJMRUQpKTsKK30KK0VYUE9SVF9TWU1CT0wodmZzX3F1b3RhX29mZik7CisvKgorICoJVHVybiBxdW90YXMgb24gb24gYSBkZXZpY2UKKyAqLworCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIHR1cm4gcXVvdGFzIG9uIHdoZW4gd2UgYWxyZWFkeSBoYXZlIHRoZSBpbm9kZSBvZgorICogcXVvdGEgZmlsZSBhbmQgbm8gcXVvdGEgaW5mb3JtYXRpb24gaXMgbG9hZGVkLgorICovCitzdGF0aWMgaW50IHZmc19sb2FkX3F1b3RhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLAorCXVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgKmZtdCA9IGZpbmRfcXVvdGFfZm9ybWF0KGZvcm1hdF9pZCk7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKKwlpbnQgZXJyb3I7CisJaW50IG9sZGZsYWdzID0gLTE7CisKKwlpZiAoIWZtdCkKKwkJcmV0dXJuIC1FU1JDSDsKKwlpZiAoIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKKwkJZXJyb3IgPSAtRUFDQ0VTOworCQlnb3RvIG91dF9mbXQ7CisJfQorCWlmIChJU19SRE9OTFkoaW5vZGUpKSB7CisJCWVycm9yID0gLUVST0ZTOworCQlnb3RvIG91dF9mbXQ7CisJfQorCWlmICghc2ItPnNfb3AtPnF1b3RhX3dyaXRlIHx8ICFzYi0+c19vcC0+cXVvdGFfcmVhZCkgeworCQllcnJvciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X2ZtdDsKKwl9CisJLyogVXNhZ2UgYWx3YXlzIGhhcyB0byBiZSBzZXQuLi4gKi8KKwlpZiAoIShmbGFncyAmIERRVU9UX1VTQUdFX0VOQUJMRUQpKSB7CisJCWVycm9yID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZm10OworCX0KKworCWlmICghKGRxb3B0LT5mbGFncyAmIERRVU9UX1FVT1RBX1NZU19GSUxFKSkgeworCQkvKiBBcyB3ZSBieXBhc3MgdGhlIHBhZ2VjYWNoZSB3ZSBtdXN0IG5vdyBmbHVzaCB0aGUgaW5vZGUgc28KKwkJICogdGhhdCB3ZSBzZWUgYWxsIHRoZSBjaGFuZ2VzIGZyb20gdXNlcnNwYWNlLi4uICovCisJCXdyaXRlX2lub2RlX25vdyhpbm9kZSwgMSk7CisJCS8qIEFuZCBub3cgZmx1c2ggdGhlIGJsb2NrIGNhY2hlIHNvIHRoYXQga2VybmVsIHNlZXMgdGhlCisJCSAqIGNoYW5nZXMgKi8KKwkJaW52YWxpZGF0ZV9iZGV2KHNiLT5zX2JkZXYpOworCX0KKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCWlmIChzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCB0eXBlKSkgeworCQllcnJvciA9IC1FQlVTWTsKKwkJZ290byBvdXRfbG9jazsKKwl9CisKKwlpZiAoIShkcW9wdC0+ZmxhZ3MgJiBEUVVPVF9RVU9UQV9TWVNfRklMRSkpIHsKKwkJLyogV2UgZG9uJ3Qgd2FudCBxdW90YSBhbmQgYXRpbWUgb24gcXVvdGEgZmlsZXMgKGRlYWRsb2NrcworCQkgKiBwb3NzaWJsZSkgQWxzbyBub2JvZHkgc2hvdWxkIHdyaXRlIHRvIHRoZSBmaWxlIC0gd2UgdXNlCisJCSAqIHNwZWNpYWwgSU8gb3BlcmF0aW9ucyB3aGljaCBpZ25vcmUgdGhlIGltbXV0YWJsZSBiaXQuICovCisJCWRvd25fd3JpdGUoJmRxb3B0LT5kcXB0cl9zZW0pOworCQlvbGRmbGFncyA9IGlub2RlLT5pX2ZsYWdzICYgKFNfTk9BVElNRSB8IFNfSU1NVVRBQkxFIHwKKwkJCQkJICAgICBTX05PUVVPVEEpOworCQlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEEgfCBTX05PQVRJTUUgfCBTX0lNTVVUQUJMRTsKKwkJdXBfd3JpdGUoJmRxb3B0LT5kcXB0cl9zZW0pOworCQlzYi0+ZHFfb3AtPmRyb3AoaW5vZGUpOworCX0KKworCWVycm9yID0gLUVJTzsKKwlkcW9wdC0+ZmlsZXNbdHlwZV0gPSBpZ3JhYihpbm9kZSk7CisJaWYgKCFkcW9wdC0+ZmlsZXNbdHlwZV0pCisJCWdvdG8gb3V0X2xvY2s7CisJZXJyb3IgPSAtRUlOVkFMOworCWlmICghZm10LT5xZl9vcHMtPmNoZWNrX3F1b3RhX2ZpbGUoc2IsIHR5cGUpKQorCQlnb3RvIG91dF9maWxlX2luaXQ7CisKKwlkcW9wdC0+b3BzW3R5cGVdID0gZm10LT5xZl9vcHM7CisJZHFvcHQtPmluZm9bdHlwZV0uZHFpX2Zvcm1hdCA9IGZtdDsKKwlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfZm10X2lkID0gZm9ybWF0X2lkOworCUlOSVRfTElTVF9IRUFEKCZkcW9wdC0+aW5mb1t0eXBlXS5kcWlfZGlydHlfbGlzdCk7CisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxaW9fbXV0ZXgpOworCWVycm9yID0gZHFvcHQtPm9wc1t0eXBlXS0+cmVhZF9maWxlX2luZm8oc2IsIHR5cGUpOworCWlmIChlcnJvciA8IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CisJCWdvdG8gb3V0X2ZpbGVfaW5pdDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFpb19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJc3Bpbl9sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKKwlkcW9wdC0+ZmxhZ3MgfD0gZHF1b3Rfc3RhdGVfZmxhZyhmbGFncywgdHlwZSk7CisJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOworCisJYWRkX2RxdW90X3JlZihzYiwgdHlwZSk7CisJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7CisKKwlyZXR1cm4gMDsKKworb3V0X2ZpbGVfaW5pdDoKKwlkcW9wdC0+ZmlsZXNbdHlwZV0gPSBOVUxMOworCWlwdXQoaW5vZGUpOworb3V0X2xvY2s6CisJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7CisJaWYgKG9sZGZsYWdzICE9IC0xKSB7CisJCWRvd25fd3JpdGUoJmRxb3B0LT5kcXB0cl9zZW0pOworCQkvKiBTZXQgdGhlIGZsYWdzIGJhY2sgKGluIHRoZSBjYXNlIG9mIGFjY2lkZW50YWwgcXVvdGFvbigpCisJCSAqIG9uIGEgd3JvbmcgZmlsZSB3ZSBkb24ndCB3YW50IHRvIG1lc3MgdXAgdGhlIGZsYWdzKSAqLworCQlpbm9kZS0+aV9mbGFncyAmPSB+KFNfTk9BVElNRSB8IFNfTk9RVU9UQSB8IFNfSU1NVVRBQkxFKTsKKwkJaW5vZGUtPmlfZmxhZ3MgfD0gb2xkZmxhZ3M7CisJCXVwX3dyaXRlKCZkcW9wdC0+ZHFwdHJfc2VtKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CitvdXRfZm10OgorCXB1dF9xdW90YV9mb3JtYXQoZm10KTsKKworCXJldHVybiBlcnJvcjsgCit9CisKKy8qIFJlZW5hYmxlIHF1b3RhcyBvbiByZW1vdW50IFJXICovCitzdGF0aWMgaW50IHZmc19xdW90YV9vbl9yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IGZsYWdzOworCisJbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCWlmICghc2JfaGFzX3F1b3RhX3N1c3BlbmRlZChzYiwgdHlwZSkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkcW9wdC0+ZHFvbm9mZl9tdXRleCk7CisJCXJldHVybiAwOworCX0KKwlpbm9kZSA9IGRxb3B0LT5maWxlc1t0eXBlXTsKKwlkcW9wdC0+ZmlsZXNbdHlwZV0gPSBOVUxMOworCXNwaW5fbG9jaygmZHFfc3RhdGVfbG9jayk7CisJZmxhZ3MgPSBkcW9wdC0+ZmxhZ3MgJiBkcXVvdF9zdGF0ZV9mbGFnKERRVU9UX1VTQUdFX0VOQUJMRUQgfAorCQkJCQkJRFFVT1RfTElNSVRTX0VOQUJMRUQsIHR5cGUpOworCWRxb3B0LT5mbGFncyAmPSB+ZHF1b3Rfc3RhdGVfZmxhZyhEUVVPVF9TVEFURV9GTEFHUywgdHlwZSk7CisJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOworCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCisJZmxhZ3MgPSBkcXVvdF9nZW5lcmljX2ZsYWcoZmxhZ3MsIHR5cGUpOworCXJldCA9IHZmc19sb2FkX3F1b3RhX2lub2RlKGlub2RlLCB0eXBlLCBkcW9wdC0+aW5mb1t0eXBlXS5kcWlfZm10X2lkLAorCQkJCSAgIGZsYWdzKTsKKwlpcHV0KGlub2RlKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCB2ZnNfcXVvdGFfb25fcGF0aChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKKwkJICAgICAgc3RydWN0IHBhdGggKnBhdGgpCit7CisJaW50IGVycm9yID0gc2VjdXJpdHlfcXVvdGFfb24ocGF0aC0+ZGVudHJ5KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwkvKiBRdW90YSBmaWxlIG5vdCBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtPyAqLworCWlmIChwYXRoLT5tbnQtPm1udF9zYiAhPSBzYikKKwkJZXJyb3IgPSAtRVhERVY7CisJZWxzZQorCQllcnJvciA9IHZmc19sb2FkX3F1b3RhX2lub2RlKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSwgdHlwZSwKKwkJCQkJICAgICBmb3JtYXRfaWQsIERRVU9UX1VTQUdFX0VOQUJMRUQgfAorCQkJCQkgICAgIERRVU9UX0xJTUlUU19FTkFCTEVEKTsKKwlyZXR1cm4gZXJyb3I7Cit9CitFWFBPUlRfU1lNQk9MKHZmc19xdW90YV9vbl9wYXRoKTsKKworaW50IHZmc19xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwgY2hhciAqbmFtZSwKKwkJIGludCByZW1vdW50KQoreworCXN0cnVjdCBwYXRoIHBhdGg7CisJaW50IGVycm9yOworCisJaWYgKHJlbW91bnQpCisJCXJldHVybiB2ZnNfcXVvdGFfb25fcmVtb3VudChzYiwgdHlwZSk7CisKKwllcnJvciA9IGtlcm5fcGF0aChuYW1lLCBMT09LVVBfRk9MTE9XLCAmcGF0aCk7CisJaWYgKCFlcnJvcikgeworCQllcnJvciA9IHZmc19xdW90YV9vbl9wYXRoKHNiLCB0eXBlLCBmb3JtYXRfaWQsICZwYXRoKTsKKwkJcGF0aF9wdXQoJnBhdGgpOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CitFWFBPUlRfU1lNQk9MKHZmc19xdW90YV9vbik7CisKKy8qCisgKiBNb3JlIHBvd2VyZnVsIGZ1bmN0aW9uIGZvciB0dXJuaW5nIG9uIHF1b3RhcyBhbGxvd2luZyBzZXR0aW5nCisgKiBvZiBpbmRpdmlkdWFsIHF1b3RhIGZsYWdzCisgKi8KK2ludCB2ZnNfcXVvdGFfZW5hYmxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLAorCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKKworCS8qIEp1c3QgdW5zdXNwZW5kIHF1b3Rhcz8gKi8KKwlpZiAoZmxhZ3MgJiBEUVVPVF9TVVNQRU5ERUQpCisJCXJldHVybiB2ZnNfcXVvdGFfb25fcmVtb3VudChzYiwgdHlwZSk7CisJaWYgKCFmbGFncykKKwkJcmV0dXJuIDA7CisJLyogSnVzdCB1cGRhdGluZyBmbGFncyBuZWVkZWQ/ICovCisJaWYgKHNiX2hhc19xdW90YV9sb2FkZWQoc2IsIHR5cGUpKSB7CisJCW11dGV4X2xvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKKwkJLyogTm93IGRvIGEgcmVsaWFibGUgdGVzdC4uLiAqLworCQlpZiAoIXNiX2hhc19xdW90YV9sb2FkZWQoc2IsIHR5cGUpKSB7CisJCQltdXRleF91bmxvY2soJmRxb3B0LT5kcW9ub2ZmX211dGV4KTsKKwkJCWdvdG8gbG9hZF9xdW90YTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBEUVVPVF9VU0FHRV9FTkFCTEVEICYmCisJCSAgICBzYl9oYXNfcXVvdGFfdXNhZ2VfZW5hYmxlZChzYiwgdHlwZSkpIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0X2xvY2s7CisJCX0KKwkJaWYgKGZsYWdzICYgRFFVT1RfTElNSVRTX0VOQUJMRUQgJiYKKwkJICAgIHNiX2hhc19xdW90YV9saW1pdHNfZW5hYmxlZChzYiwgdHlwZSkpIHsKKwkJCXJldCA9IC1FQlVTWTsKKwkJCWdvdG8gb3V0X2xvY2s7CisJCX0KKwkJc3Bpbl9sb2NrKCZkcV9zdGF0ZV9sb2NrKTsKKwkJc2JfZHFvcHQoc2IpLT5mbGFncyB8PSBkcXVvdF9zdGF0ZV9mbGFnKGZsYWdzLCB0eXBlKTsKKwkJc3Bpbl91bmxvY2soJmRxX3N0YXRlX2xvY2spOworb3V0X2xvY2s6CisJCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworbG9hZF9xdW90YToKKwlyZXR1cm4gdmZzX2xvYWRfcXVvdGFfaW5vZGUoaW5vZGUsIHR5cGUsIGZvcm1hdF9pZCwgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfZW5hYmxlKTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIGZpbGVzeXN0ZW0gbmVlZHMgdG8gaW5pdGlhbGl6ZSBxdW90YXMKKyAqIGR1cmluZyBtb3VudCB0aW1lLgorICovCitpbnQgdmZzX3F1b3RhX29uX21vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNoYXIgKnFmX25hbWUsCisJCWludCBmb3JtYXRfaWQsIGludCB0eXBlKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlpbnQgZXJyb3I7CisKKwlkZW50cnkgPSBsb29rdXBfb25lX2xlbihxZl9uYW1lLCBzYi0+c19yb290LCBzdHJsZW4ocWZfbmFtZSkpOworCWlmIChJU19FUlIoZGVudHJ5KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGVudHJ5KTsKKworCWlmICghZGVudHJ5LT5kX2lub2RlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyb3IgPSBzZWN1cml0eV9xdW90YV9vbihkZW50cnkpOworCWlmICghZXJyb3IpCisJCWVycm9yID0gdmZzX2xvYWRfcXVvdGFfaW5vZGUoZGVudHJ5LT5kX2lub2RlLCB0eXBlLCBmb3JtYXRfaWQsCisJCQkJRFFVT1RfVVNBR0VfRU5BQkxFRCB8IERRVU9UX0xJTUlUU19FTkFCTEVEKTsKKworb3V0OgorCWRwdXQoZGVudHJ5KTsKKwlyZXR1cm4gZXJyb3I7Cit9CitFWFBPUlRfU1lNQk9MKHZmc19xdW90YV9vbl9tb3VudCk7CisKKy8qIFdyYXBwZXIgdG8gdHVybiBvbiBxdW90YXMgd2hlbiByZW1vdW50aW5nIHJ3ICovCitpbnQgdmZzX2RxX3F1b3RhX29uX3JlbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlpbnQgY250OworCWludCByZXQgPSAwLCBlcnI7CisKKwlpZiAoIXNiLT5zX3Fjb3AgfHwgIXNiLT5zX3Fjb3AtPnF1b3RhX29uKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJZXJyID0gc2ItPnNfcWNvcC0+cXVvdGFfb24oc2IsIGNudCwgMCwgTlVMTCwgMSk7CisJCWlmIChlcnIgPCAwICYmICFyZXQpCisJCQlyZXQgPSBlcnI7CisJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHZmc19kcV9xdW90YV9vbl9yZW1vdW50KTsKKworc3RhdGljIGlubGluZSBxc2l6ZV90IHFidG9zKHFzaXplX3QgYmxvY2tzKQoreworCXJldHVybiBibG9ja3MgPDwgUUlGX0RRQkxLU0laRV9CSVRTOworfQorCitzdGF0aWMgaW5saW5lIHFzaXplX3Qgc3RvcWIocXNpemVfdCBzcGFjZSkKK3sKKwlyZXR1cm4gKHNwYWNlICsgUUlGX0RRQkxLU0laRSAtIDEpID4+IFFJRl9EUUJMS1NJWkVfQklUUzsKK30KKworLyogR2VuZXJpYyByb3V0aW5lIGZvciBnZXR0aW5nIGNvbW1vbiBwYXJ0IG9mIHF1b3RhIHN0cnVjdHVyZSAqLworc3RhdGljIHZvaWQgZG9fZ2V0X2RxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHN0cnVjdCBpZl9kcWJsayAqZGkpCit7CisJc3RydWN0IG1lbV9kcWJsayAqZG0gPSAmZHF1b3QtPmRxX2RxYjsKKworCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwlkaS0+ZHFiX2JoYXJkbGltaXQgPSBzdG9xYihkbS0+ZHFiX2JoYXJkbGltaXQpOworCWRpLT5kcWJfYnNvZnRsaW1pdCA9IHN0b3FiKGRtLT5kcWJfYnNvZnRsaW1pdCk7CisJZGktPmRxYl9jdXJzcGFjZSA9IGRtLT5kcWJfY3Vyc3BhY2UgKyBkbS0+ZHFiX3JzdnNwYWNlOworCWRpLT5kcWJfaWhhcmRsaW1pdCA9IGRtLT5kcWJfaWhhcmRsaW1pdDsKKwlkaS0+ZHFiX2lzb2Z0bGltaXQgPSBkbS0+ZHFiX2lzb2Z0bGltaXQ7CisJZGktPmRxYl9jdXJpbm9kZXMgPSBkbS0+ZHFiX2N1cmlub2RlczsKKwlkaS0+ZHFiX2J0aW1lID0gZG0tPmRxYl9idGltZTsKKwlkaS0+ZHFiX2l0aW1lID0gZG0tPmRxYl9pdGltZTsKKwlkaS0+ZHFiX3ZhbGlkID0gUUlGX0FMTDsKKwlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKK30KKworaW50IHZmc19nZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHFpZF90IGlkLAorCQkgIHN0cnVjdCBpZl9kcWJsayAqZGkpCit7CisJc3RydWN0IGRxdW90ICpkcXVvdDsKKworCWRxdW90ID0gZHFnZXQoc2IsIGlkLCB0eXBlKTsKKwlpZiAoIWRxdW90KQorCQlyZXR1cm4gLUVTUkNIOworCWRvX2dldF9kcWJsayhkcXVvdCwgZGkpOworCWRxcHV0KGRxdW90KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh2ZnNfZ2V0X2RxYmxrKTsKKworLyogR2VuZXJpYyByb3V0aW5lIGZvciBzZXR0aW5nIGNvbW1vbiBwYXJ0IG9mIHF1b3RhIHN0cnVjdHVyZSAqLworc3RhdGljIGludCBkb19zZXRfZHFibGsoc3RydWN0IGRxdW90ICpkcXVvdCwgc3RydWN0IGlmX2RxYmxrICpkaSkKK3sKKwlzdHJ1Y3QgbWVtX2RxYmxrICpkbSA9ICZkcXVvdC0+ZHFfZHFiOworCWludCBjaGVja19ibGltID0gMCwgY2hlY2tfaWxpbSA9IDA7CisJc3RydWN0IG1lbV9kcWluZm8gKmRxaSA9ICZzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5pbmZvW2RxdW90LT5kcV90eXBlXTsKKworCWlmICgoZGktPmRxYl92YWxpZCAmIFFJRl9CTElNSVRTICYmCisJICAgICAoZGktPmRxYl9iaGFyZGxpbWl0ID4gZHFpLT5kcWlfbWF4YmxpbWl0IHx8CisJICAgICAgZGktPmRxYl9ic29mdGxpbWl0ID4gZHFpLT5kcWlfbWF4YmxpbWl0KSkgfHwKKwkgICAgKGRpLT5kcWJfdmFsaWQgJiBRSUZfSUxJTUlUUyAmJgorCSAgICAgKGRpLT5kcWJfaWhhcmRsaW1pdCA+IGRxaS0+ZHFpX21heGlsaW1pdCB8fAorCSAgICAgIGRpLT5kcWJfaXNvZnRsaW1pdCA+IGRxaS0+ZHFpX21heGlsaW1pdCkpKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwlpZiAoZGktPmRxYl92YWxpZCAmIFFJRl9TUEFDRSkgeworCQlkbS0+ZHFiX2N1cnNwYWNlID0gZGktPmRxYl9jdXJzcGFjZSAtIGRtLT5kcWJfcnN2c3BhY2U7CisJCWNoZWNrX2JsaW0gPSAxOworCQlfX3NldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX1NQQUNFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworCX0KKwlpZiAoZGktPmRxYl92YWxpZCAmIFFJRl9CTElNSVRTKSB7CisJCWRtLT5kcWJfYnNvZnRsaW1pdCA9IHFidG9zKGRpLT5kcWJfYnNvZnRsaW1pdCk7CisJCWRtLT5kcWJfYmhhcmRsaW1pdCA9IHFidG9zKGRpLT5kcWJfYmhhcmRsaW1pdCk7CisJCWNoZWNrX2JsaW0gPSAxOworCQlfX3NldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0JMSU1JVFNfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJfQorCWlmIChkaS0+ZHFiX3ZhbGlkICYgUUlGX0lOT0RFUykgeworCQlkbS0+ZHFiX2N1cmlub2RlcyA9IGRpLT5kcWJfY3VyaW5vZGVzOworCQljaGVja19pbGltID0gMTsKKwkJX19zZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9JTk9ERVNfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJfQorCWlmIChkaS0+ZHFiX3ZhbGlkICYgUUlGX0lMSU1JVFMpIHsKKwkJZG0tPmRxYl9pc29mdGxpbWl0ID0gZGktPmRxYl9pc29mdGxpbWl0OworCQlkbS0+ZHFiX2loYXJkbGltaXQgPSBkaS0+ZHFiX2loYXJkbGltaXQ7CisJCWNoZWNrX2lsaW0gPSAxOworCQlfX3NldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0lMSU1JVFNfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJfQorCWlmIChkaS0+ZHFiX3ZhbGlkICYgUUlGX0JUSU1FKSB7CisJCWRtLT5kcWJfYnRpbWUgPSBkaS0+ZHFiX2J0aW1lOworCQljaGVja19ibGltID0gMTsKKwkJX19zZXRfYml0KERRX0xBU1RTRVRfQiArIFFJRl9CVElNRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKKwl9CisJaWYgKGRpLT5kcWJfdmFsaWQgJiBRSUZfSVRJTUUpIHsKKwkJZG0tPmRxYl9pdGltZSA9IGRpLT5kcWJfaXRpbWU7CisJCWNoZWNrX2lsaW0gPSAxOworCQlfX3NldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0lUSU1FX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworCX0KKworCWlmIChjaGVja19ibGltKSB7CisJCWlmICghZG0tPmRxYl9ic29mdGxpbWl0IHx8CisJCSAgICBkbS0+ZHFiX2N1cnNwYWNlIDwgZG0tPmRxYl9ic29mdGxpbWl0KSB7CisJCQlkbS0+ZHFiX2J0aW1lID0gMDsKKwkJCWNsZWFyX2JpdChEUV9CTEtTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworCQl9IGVsc2UgaWYgKCEoZGktPmRxYl92YWxpZCAmIFFJRl9CVElNRSkpCisJCQkvKiBTZXQgZ3JhY2Ugb25seSBpZiB1c2VyIGhhc24ndCBwcm92aWRlZCBoaXMgb3duLi4uICovCisJCQlkbS0+ZHFiX2J0aW1lID0gZ2V0X3NlY29uZHMoKSArIGRxaS0+ZHFpX2JncmFjZTsKKwl9CisJaWYgKGNoZWNrX2lsaW0pIHsKKwkJaWYgKCFkbS0+ZHFiX2lzb2Z0bGltaXQgfHwKKwkJICAgIGRtLT5kcWJfY3VyaW5vZGVzIDwgZG0tPmRxYl9pc29mdGxpbWl0KSB7CisJCQlkbS0+ZHFiX2l0aW1lID0gMDsKKwkJCWNsZWFyX2JpdChEUV9JTk9ERVNfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJCX0gZWxzZSBpZiAoIShkaS0+ZHFiX3ZhbGlkICYgUUlGX0lUSU1FKSkKKwkJCS8qIFNldCBncmFjZSBvbmx5IGlmIHVzZXIgaGFzbid0IHByb3ZpZGVkIGhpcyBvd24uLi4gKi8KKwkJCWRtLT5kcWJfaXRpbWUgPSBnZXRfc2Vjb25kcygpICsgZHFpLT5kcWlfaWdyYWNlOworCX0KKwlpZiAoZG0tPmRxYl9iaGFyZGxpbWl0IHx8IGRtLT5kcWJfYnNvZnRsaW1pdCB8fCBkbS0+ZHFiX2loYXJkbGltaXQgfHwKKwkgICAgZG0tPmRxYl9pc29mdGxpbWl0KQorCQljbGVhcl9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKKwllbHNlCisJCXNldF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKKwlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKwltYXJrX2RxdW90X2RpcnR5KGRxdW90KTsKKworCXJldHVybiAwOworfQorCitpbnQgdmZzX3NldF9kcWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsCisJCSAgc3RydWN0IGlmX2RxYmxrICpkaSkKK3sKKwlzdHJ1Y3QgZHF1b3QgKmRxdW90OworCWludCByYzsKKworCWRxdW90ID0gZHFnZXQoc2IsIGlkLCB0eXBlKTsKKwlpZiAoIWRxdW90KSB7CisJCXJjID0gLUVTUkNIOworCQlnb3RvIG91dDsKKwl9CisJcmMgPSBkb19zZXRfZHFibGsoZHF1b3QsIGRpKTsKKwlkcXB1dChkcXVvdCk7CitvdXQ6CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTCh2ZnNfc2V0X2RxYmxrKTsKKworLyogR2VuZXJpYyByb3V0aW5lIGZvciBnZXR0aW5nIGNvbW1vbiBwYXJ0IG9mIHF1b3RhIGZpbGUgaW5mb3JtYXRpb24gKi8KK2ludCB2ZnNfZ2V0X2RxaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgc3RydWN0IGlmX2RxaW5mbyAqaWkpCit7CisJc3RydWN0IG1lbV9kcWluZm8gKm1pOworICAKKwltdXRleF9sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOworCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOworCQlyZXR1cm4gLUVTUkNIOworCX0KKwltaSA9IHNiX2Rxb3B0KHNiKS0+aW5mbyArIHR5cGU7CisJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOworCWlpLT5kcWlfYmdyYWNlID0gbWktPmRxaV9iZ3JhY2U7CisJaWktPmRxaV9pZ3JhY2UgPSBtaS0+ZHFpX2lncmFjZTsKKwlpaS0+ZHFpX2ZsYWdzID0gbWktPmRxaV9mbGFncyAmIERRRl9NQVNLOworCWlpLT5kcWlfdmFsaWQgPSBJSUZfQUxMOworCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wodmZzX2dldF9kcWluZm8pOworCisvKiBHZW5lcmljIHJvdXRpbmUgZm9yIHNldHRpbmcgY29tbW9uIHBhcnQgb2YgcXVvdGEgZmlsZSBpbmZvcm1hdGlvbiAqLworaW50IHZmc19zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgaWZfZHFpbmZvICppaSkKK3sKKwlzdHJ1Y3QgbWVtX2RxaW5mbyAqbWk7CisJaW50IGVyciA9IDA7CisKKwltdXRleF9sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOworCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpIHsKKwkJZXJyID0gLUVTUkNIOworCQlnb3RvIG91dDsKKwl9CisJbWkgPSBzYl9kcW9wdChzYiktPmluZm8gKyB0eXBlOworCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwlpZiAoaWktPmRxaV92YWxpZCAmIElJRl9CR1JBQ0UpCisJCW1pLT5kcWlfYmdyYWNlID0gaWktPmRxaV9iZ3JhY2U7CisJaWYgKGlpLT5kcWlfdmFsaWQgJiBJSUZfSUdSQUNFKQorCQltaS0+ZHFpX2lncmFjZSA9IGlpLT5kcWlfaWdyYWNlOworCWlmIChpaS0+ZHFpX3ZhbGlkICYgSUlGX0ZMQUdTKQorCQltaS0+ZHFpX2ZsYWdzID0gKG1pLT5kcWlfZmxhZ3MgJiB+RFFGX01BU0spIHwKKwkJCQkoaWktPmRxaV9mbGFncyAmIERRRl9NQVNLKTsKKwlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKwltYXJrX2luZm9fZGlydHkoc2IsIHR5cGUpOworCS8qIEZvcmNlIHdyaXRlIHRvIGRpc2sgKi8KKwlzYi0+ZHFfb3AtPndyaXRlX2luZm8oc2IsIHR5cGUpOworb3V0OgorCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTCh2ZnNfc2V0X2RxaW5mbyk7CisKK3N0cnVjdCBxdW90YWN0bF9vcHMgdmZzX3F1b3RhY3RsX29wcyA9IHsKKwkucXVvdGFfb24JPSB2ZnNfcXVvdGFfb24sCisJLnF1b3RhX29mZgk9IHZmc19xdW90YV9vZmYsCisJLnF1b3RhX3N5bmMJPSB2ZnNfcXVvdGFfc3luYywKKwkuZ2V0X2luZm8JPSB2ZnNfZ2V0X2RxaW5mbywKKwkuc2V0X2luZm8JPSB2ZnNfc2V0X2RxaW5mbywKKwkuZ2V0X2RxYmxrCT0gdmZzX2dldF9kcWJsaywKKwkuc2V0X2RxYmxrCT0gdmZzX3NldF9kcWJsaworfTsKKworc3RhdGljIGN0bF90YWJsZSBmc19kcXN0YXRzX3RhYmxlW10gPSB7CisJeworCQkuY3RsX25hbWUJPSBGU19EUV9MT09LVVBTLAorCQkucHJvY25hbWUJPSAibG9va3VwcyIsCisJCS5kYXRhCQk9ICZkcXN0YXRzLmxvb2t1cHMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA0NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gRlNfRFFfRFJPUFMsCisJCS5wcm9jbmFtZQk9ICJkcm9wcyIsCisJCS5kYXRhCQk9ICZkcXN0YXRzLmRyb3BzLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNDQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IEZTX0RRX1JFQURTLAorCQkucHJvY25hbWUJPSAicmVhZHMiLAorCQkuZGF0YQkJPSAmZHFzdGF0cy5yZWFkcywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDQ0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBGU19EUV9XUklURVMsCisJCS5wcm9jbmFtZQk9ICJ3cml0ZXMiLAorCQkuZGF0YQkJPSAmZHFzdGF0cy53cml0ZXMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA0NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gRlNfRFFfQ0FDSEVfSElUUywKKwkJLnByb2NuYW1lCT0gImNhY2hlX2hpdHMiLAorCQkuZGF0YQkJPSAmZHFzdGF0cy5jYWNoZV9oaXRzLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNDQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IEZTX0RRX0FMTE9DQVRFRCwKKwkJLnByb2NuYW1lCT0gImFsbG9jYXRlZF9kcXVvdHMiLAorCQkuZGF0YQkJPSAmZHFzdGF0cy5hbGxvY2F0ZWRfZHF1b3RzLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNDQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IEZTX0RRX0ZSRUUsCisJCS5wcm9jbmFtZQk9ICJmcmVlX2RxdW90cyIsCisJCS5kYXRhCQk9ICZkcXN0YXRzLmZyZWVfZHF1b3RzLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNDQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IEZTX0RRX1NZTkNTLAorCQkucHJvY25hbWUJPSAic3luY3MiLAorCQkuZGF0YQkJPSAmZHFzdGF0cy5zeW5jcywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDQ0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisjaWZkZWYgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkcKKwl7CisJCS5jdGxfbmFtZQk9IEZTX0RRX1dBUk5JTkdTLAorCQkucHJvY25hbWUJPSAid2FybmluZ3MiLAorCQkuZGF0YQkJPSAmZmxhZ19wcmludF93YXJuaW5ncywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisjZW5kaWYKKwl7IC5jdGxfbmFtZSA9IDAgfSwKK307CisKK3N0YXRpYyBjdGxfdGFibGUgZnNfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IEZTX0RRU1RBVFMsCisJCS5wcm9jbmFtZQk9ICJxdW90YSIsCisJCS5tb2RlCQk9IDA1NTUsCisJCS5jaGlsZAkJPSBmc19kcXN0YXRzX3RhYmxlLAorCX0sCisJeyAuY3RsX25hbWUgPSAwIH0sCit9OworCitzdGF0aWMgY3RsX3RhYmxlIHN5c190YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX0ZTLAorCQkucHJvY25hbWUJPSAiZnMiLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gZnNfdGFibGUsCisJfSwKKwl7IC5jdGxfbmFtZSA9IDAgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRxdW90X2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIG5yX2hhc2gsIG9yZGVyOworCisJcHJpbnRrKEtFUk5fTk9USUNFICJWRlM6IERpc2sgcXVvdGFzICVzXG4iLCBfX0RRVU9UX1ZFUlNJT05fXyk7CisKKwlyZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3lzX3RhYmxlKTsKKworCWRxdW90X2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJkcXVvdCIsCisJCQlzaXplb2Yoc3RydWN0IGRxdW90KSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogNCwKKwkJCShTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJU0xBQl9NRU1fU1BSRUFEfFNMQUJfUEFOSUMpLAorCQkJTlVMTCk7CisKKwlvcmRlciA9IDA7CisJZHF1b3RfaGFzaCA9IChzdHJ1Y3QgaGxpc3RfaGVhZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0FUT01JQywgb3JkZXIpOworCWlmICghZHF1b3RfaGFzaCkKKwkJcGFuaWMoIkNhbm5vdCBjcmVhdGUgZHF1b3QgaGFzaCB0YWJsZSIpOworCisJLyogRmluZCBwb3dlci1vZi10d28gaGxpc3RfaGVhZHMgd2hpY2ggY2FuIGZpdCBpbnRvIGFsbG9jYXRpb24gKi8KKwlucl9oYXNoID0gKDFVTCA8PCBvcmRlcikgKiBQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpOworCWRxX2hhc2hfYml0cyA9IDA7CisJZG8geworCQlkcV9oYXNoX2JpdHMrKzsKKwl9IHdoaWxlIChucl9oYXNoID4+IGRxX2hhc2hfYml0cyk7CisJZHFfaGFzaF9iaXRzLS07CisKKwlucl9oYXNoID0gMVVMIDw8IGRxX2hhc2hfYml0czsKKwlkcV9oYXNoX21hc2sgPSBucl9oYXNoIC0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfaGFzaDsgaSsrKQorCQlJTklUX0hMSVNUX0hFQUQoZHF1b3RfaGFzaCArIGkpOworCisJcHJpbnRrKCJEcXVvdC1jYWNoZSBoYXNoIHRhYmxlIGVudHJpZXM6ICVsZCAob3JkZXIgJWxkLCAlbGQgYnl0ZXMpXG4iLAorCQkJbnJfaGFzaCwgb3JkZXIsIChQQUdFX1NJWkUgPDwgb3JkZXIpKTsKKworCXJlZ2lzdGVyX3Nocmlua2VyKCZkcWNhY2hlX3Nocmlua2VyKTsKKworI2lmZGVmIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRQorCWlmIChnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmcXVvdGFfZ2VubF9mYW1pbHkpICE9IDApCisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlZGUzogRmFpbGVkIHRvIGNyZWF0ZSBxdW90YSBuZXRsaW5rIGludGVyZmFjZS5cbiIpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KGRxdW90X2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGEuYyBiL2ZzL3F1b3RhL3F1b3RhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdmNWE0NgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3F1b3RhL3F1b3RhLmMKQEAgLTAsMCArMSw1MjQgQEAKKy8qCisgKiBRdW90YSBjb2RlIG5lY2Vzc2FyeSBldmVuIHdoZW4gVkZTIHF1b3RhIHN1cHBvcnQgaXMgbm90IGNvbXBpbGVkCisgKiBpbnRvIHRoZSBrZXJuZWwuICBUaGUgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMgb3ZlciBpbiBkcXVvdC5jLCBoZXJlCisgKiB3ZSBoYXZlIHN5bWJvbHMgZm9yIGluaXRpYWwgcXVvdGFjdGwoMikgaGFuZGxpbmcsIHRoZSBzeXNjdGwoMikKKyAqIHZhcmlhYmxlcywgZXRjIC0gdGhpbmdzIG5lZWRlZCBldmVuIHdoZW4gcXVvdGEgc3VwcG9ydCBkaXNhYmxlZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogQ2hlY2sgdmFsaWRpdHkgb2YgZ2VuZXJpYyBxdW90YWN0bCBjb21tYW5kcyAqLworc3RhdGljIGludCBnZW5lcmljX3F1b3RhY3RsX3ZhbGlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgY21kLAorCQkJCSAgcWlkX3QgaWQpCit7CisJaWYgKHR5cGUgPj0gTUFYUVVPVEFTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXNiICYmIGNtZCAhPSBRX1NZTkMpCisJCXJldHVybiAtRU5PREVWOworCS8qIElzIG9wZXJhdGlvbiBzdXBwb3J0ZWQ/ICovCisJaWYgKHNiICYmICFzYi0+c19xY29wKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgUV9HRVRGTVQ6CisJCQlicmVhazsKKwkJY2FzZSBRX1FVT1RBT046CisJCQlpZiAoIXNiLT5zX3Fjb3AtPnF1b3RhX29uKQorCQkJCXJldHVybiAtRU5PU1lTOworCQkJYnJlYWs7CisJCWNhc2UgUV9RVU9UQU9GRjoKKwkJCWlmICghc2ItPnNfcWNvcC0+cXVvdGFfb2ZmKQorCQkJCXJldHVybiAtRU5PU1lTOworCQkJYnJlYWs7CisJCWNhc2UgUV9TRVRJTkZPOgorCQkJaWYgKCFzYi0+c19xY29wLT5zZXRfaW5mbykKKwkJCQlyZXR1cm4gLUVOT1NZUzsKKwkJCWJyZWFrOworCQljYXNlIFFfR0VUSU5GTzoKKwkJCWlmICghc2ItPnNfcWNvcC0+Z2V0X2luZm8pCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlicmVhazsKKwkJY2FzZSBRX1NFVFFVT1RBOgorCQkJaWYgKCFzYi0+c19xY29wLT5zZXRfZHFibGspCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlicmVhazsKKwkJY2FzZSBRX0dFVFFVT1RBOgorCQkJaWYgKCFzYi0+c19xY29wLT5nZXRfZHFibGspCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlicmVhazsKKwkJY2FzZSBRX1NZTkM6CisJCQlpZiAoc2IgJiYgIXNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMpCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIElzIHF1b3RhIHR1cm5lZCBvbiBmb3IgY29tbWFuZHMgd2hpY2ggbmVlZCBpdD8gKi8KKwlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFFfR0VURk1UOgorCQljYXNlIFFfR0VUSU5GTzoKKwkJY2FzZSBRX1NFVElORk86CisJCWNhc2UgUV9TRVRRVU9UQToKKwkJY2FzZSBRX0dFVFFVT1RBOgorCQkJLyogVGhpcyBpcyBqdXN0IGFuIGluZm9ybWF0aXZlIHRlc3Qgc28gd2UgYXJlIHNhdGlzZmllZAorCQkJICogd2l0aG91dCB0aGUgbG9jayAqLworCQkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkKKwkJCQlyZXR1cm4gLUVTUkNIOworCX0KKworCS8qIENoZWNrIHByaXZpbGVnZXMgKi8KKwlpZiAoY21kID09IFFfR0VUUVVPVEEpIHsKKwkJaWYgKCgodHlwZSA9PSBVU1JRVU9UQSAmJiBjdXJyZW50X2V1aWQoKSAhPSBpZCkgfHwKKwkJICAgICAodHlwZSA9PSBHUlBRVU9UQSAmJiAhaW5fZWdyb3VwX3AoaWQpKSkgJiYKKwkJICAgICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwl9CisJZWxzZSBpZiAoY21kICE9IFFfR0VURk1UICYmIGNtZCAhPSBRX1NZTkMgJiYgY21kICE9IFFfR0VUSU5GTykKKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKworCXJldHVybiAwOworfQorCisvKiBDaGVjayB2YWxpZGl0eSBvZiBYRlMgUXVvdGEgTWFuYWdlciBjb21tYW5kcyAqLworc3RhdGljIGludCB4cW1fcXVvdGFjdGxfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsCisJCQkgICAgICBxaWRfdCBpZCkKK3sKKwlpZiAodHlwZSA+PSBYUU1fTUFYUVVPVEFTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXNiKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIXNiLT5zX3Fjb3ApCisJCXJldHVybiAtRU5PU1lTOworCisJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBRX1hRVU9UQU9OOgorCQljYXNlIFFfWFFVT1RBT0ZGOgorCQljYXNlIFFfWFFVT1RBUk06CisJCQlpZiAoIXNiLT5zX3Fjb3AtPnNldF94c3RhdGUpCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlicmVhazsKKwkJY2FzZSBRX1hHRVRRU1RBVDoKKwkJCWlmICghc2ItPnNfcWNvcC0+Z2V0X3hzdGF0ZSkKKwkJCQlyZXR1cm4gLUVOT1NZUzsKKwkJCWJyZWFrOworCQljYXNlIFFfWFNFVFFMSU06CisJCQlpZiAoIXNiLT5zX3Fjb3AtPnNldF94cXVvdGEpCisJCQkJcmV0dXJuIC1FTk9TWVM7CisJCQlicmVhazsKKwkJY2FzZSBRX1hHRVRRVU9UQToKKwkJCWlmICghc2ItPnNfcWNvcC0+Z2V0X3hxdW90YSkKKwkJCQlyZXR1cm4gLUVOT1NZUzsKKwkJCWJyZWFrOworCQljYXNlIFFfWFFVT1RBU1lOQzoKKwkJCWlmICghc2ItPnNfcWNvcC0+cXVvdGFfc3luYykKKwkJCQlyZXR1cm4gLUVOT1NZUzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2hlY2sgcHJpdmlsZWdlcyAqLworCWlmIChjbWQgPT0gUV9YR0VUUVVPVEEpIHsKKwkJaWYgKCgodHlwZSA9PSBYUU1fVVNSUVVPVEEgJiYgY3VycmVudF9ldWlkKCkgIT0gaWQpIHx8CisJCSAgICAgKHR5cGUgPT0gWFFNX0dSUFFVT1RBICYmICFpbl9lZ3JvdXBfcChpZCkpKSAmJgorCQkgICAgICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQkJcmV0dXJuIC1FUEVSTTsKKwl9IGVsc2UgaWYgKGNtZCAhPSBRX1hHRVRRU1RBVCAmJiBjbWQgIT0gUV9YUVVPVEFTWU5DKSB7CisJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcXVvdGFjdGxfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsCisJCQkJcWlkX3QgaWQpCit7CisJaW50IGVycm9yOworCisJaWYgKFhRTV9DT01NQU5EKGNtZCkpCisJCWVycm9yID0geHFtX3F1b3RhY3RsX3ZhbGlkKHNiLCB0eXBlLCBjbWQsIGlkKTsKKwllbHNlCisJCWVycm9yID0gZ2VuZXJpY19xdW90YWN0bF92YWxpZChzYiwgdHlwZSwgY21kLCBpZCk7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBzZWN1cml0eV9xdW90YWN0bChjbWQsIHR5cGUsIGlkLCBzYik7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBxdW90YV9zeW5jX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCWludCBjbnQ7CisKKwlzYi0+c19xY29wLT5xdW90YV9zeW5jKHNiLCB0eXBlKTsKKworCWlmIChzYl9kcW9wdChzYiktPmZsYWdzICYgRFFVT1RfUVVPVEFfU1lTX0ZJTEUpCisJCXJldHVybjsKKwkvKiBUaGlzIGlzIG5vdCB2ZXJ5IGNsZXZlciAoYW5kIGZhc3QpIGJ1dCBjdXJyZW50bHkgSSBkb24ndCBrbm93IGFib3V0CisJICogYW55IG90aGVyIHNpbXBsZSB3YXkgb2YgZ2V0dGluZyBxdW90YSBkYXRhIHRvIGRpc2sgYW5kIHdlIG11c3QgZ2V0CisJICogdGhlbSB0aGVyZSBmb3IgdXNlcnNwYWNlIHRvIGJlIHZpc2libGUuLi4gKi8KKwlpZiAoc2ItPnNfb3AtPnN5bmNfZnMpCisJCXNiLT5zX29wLT5zeW5jX2ZzKHNiLCAxKTsKKwlzeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYpOworCisJLyoKKwkgKiBOb3cgd2hlbiBldmVyeXRoaW5nIGlzIHdyaXR0ZW4gd2UgY2FuIGRpc2NhcmQgdGhlIHBhZ2VjYWNoZSBzbworCSAqIHRoYXQgdXNlcnNwYWNlIHNlZXMgdGhlIGNoYW5nZXMuCisJICovCisJbXV0ZXhfbG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKKwlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJaWYgKHR5cGUgIT0gLTEgJiYgY250ICE9IHR5cGUpCisJCQljb250aW51ZTsKKwkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCBjbnQpKQorCQkJY29udGludWU7CisJCW11dGV4X2xvY2tfbmVzdGVkKCZzYl9kcW9wdChzYiktPmZpbGVzW2NudF0tPmlfbXV0ZXgsCisJCQkJICBJX01VVEVYX1FVT1RBKTsKKwkJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJnNiX2Rxb3B0KHNiKS0+ZmlsZXNbY250XS0+aV9kYXRhLCAwKTsKKwkJbXV0ZXhfdW5sb2NrKCZzYl9kcW9wdChzYiktPmZpbGVzW2NudF0tPmlfbXV0ZXgpOworCX0KKwltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7Cit9CisKK3ZvaWQgc3luY19kcXVvdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJaW50IGNudDsKKworCWlmIChzYikgeworCQlpZiAoc2ItPnNfcWNvcC0+cXVvdGFfc3luYykKKwkJCXF1b3RhX3N5bmNfc2Ioc2IsIHR5cGUpOworCQlyZXR1cm47CisJfQorCisJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKK3Jlc3RhcnQ6CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7CisJCS8qIFRoaXMgdGVzdCBqdXN0IGltcHJvdmVzIHBlcmZvcm1hbmNlIHNvIGl0IG5lZWRuJ3QgYmUKKwkJICogcmVsaWFibGUuLi4gKi8KKwkJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CisJCQlpZiAodHlwZSAhPSAtMSAmJiB0eXBlICE9IGNudCkKKwkJCQljb250aW51ZTsKKwkJCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgY250KSkKKwkJCQljb250aW51ZTsKKwkJCWlmICghaW5mb19kaXJ0eSgmc2JfZHFvcHQoc2IpLT5pbmZvW2NudF0pICYmCisJCQkgICBsaXN0X2VtcHR5KCZzYl9kcW9wdChzYiktPmluZm9bY250XS5kcWlfZGlydHlfbGlzdCkpCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJfQorCQlpZiAoY250ID09IE1BWFFVT1RBUykKKwkJCWNvbnRpbnVlOworCQlzYi0+c19jb3VudCsrOworCQlzcGluX3VubG9jaygmc2JfbG9jayk7CisJCWRvd25fcmVhZCgmc2ItPnNfdW1vdW50KTsKKwkJaWYgKHNiLT5zX3Jvb3QgJiYgc2ItPnNfcWNvcC0+cXVvdGFfc3luYykKKwkJCXF1b3RhX3N5bmNfc2Ioc2IsIHR5cGUpOworCQl1cF9yZWFkKCZzYi0+c191bW91bnQpOworCQlzcGluX2xvY2soJnNiX2xvY2spOworCQlpZiAoX19wdXRfc3VwZXJfYW5kX25lZWRfcmVzdGFydChzYikpCisJCQlnb3RvIHJlc3RhcnQ7CisJfQorCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKK30KKworLyogQ29weSBwYXJhbWV0ZXJzIGFuZCBjYWxsIHByb3BlciBmdW5jdGlvbiAqLworc3RhdGljIGludCBkb19xdW90YWN0bChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGNtZCwgcWlkX3QgaWQsCisJCSAgICAgICB2b2lkIF9fdXNlciAqYWRkcikKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBRX1FVT1RBT046IHsKKwkJCWNoYXIgKnBhdGhuYW1lOworCisJCQlwYXRobmFtZSA9IGdldG5hbWUoYWRkcik7CisJCQlpZiAoSVNfRVJSKHBhdGhuYW1lKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihwYXRobmFtZSk7CisJCQlyZXQgPSBzYi0+c19xY29wLT5xdW90YV9vbihzYiwgdHlwZSwgaWQsIHBhdGhuYW1lLCAwKTsKKwkJCXB1dG5hbWUocGF0aG5hbWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQljYXNlIFFfUVVPVEFPRkY6CisJCQlyZXR1cm4gc2ItPnNfcWNvcC0+cXVvdGFfb2ZmKHNiLCB0eXBlLCAwKTsKKworCQljYXNlIFFfR0VURk1UOiB7CisJCQlfX3UzMiBmbXQ7CisKKwkJCWRvd25fcmVhZCgmc2JfZHFvcHQoc2IpLT5kcXB0cl9zZW0pOworCQkJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkgeworCQkJCXVwX3JlYWQoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKKwkJCQlyZXR1cm4gLUVTUkNIOworCQkJfQorCQkJZm10ID0gc2JfZHFvcHQoc2IpLT5pbmZvW3R5cGVdLmRxaV9mb3JtYXQtPnFmX2ZtdF9pZDsKKwkJCXVwX3JlYWQoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmZtdCwgc2l6ZW9mKGZtdCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBRX0dFVElORk86IHsKKwkJCXN0cnVjdCBpZl9kcWluZm8gaW5mbzsKKworCQkJcmV0ID0gc2ItPnNfcWNvcC0+Z2V0X2luZm8oc2IsIHR5cGUsICZpbmZvKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmluZm8sIHNpemVvZihpbmZvKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFFfU0VUSU5GTzogeworCQkJc3RydWN0IGlmX2RxaW5mbyBpbmZvOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sIGFkZHIsIHNpemVvZihpbmZvKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gc2ItPnNfcWNvcC0+c2V0X2luZm8oc2IsIHR5cGUsICZpbmZvKTsKKwkJfQorCQljYXNlIFFfR0VUUVVPVEE6IHsKKwkJCXN0cnVjdCBpZl9kcWJsayBpZHE7CisKKwkJCXJldCA9IHNiLT5zX3Fjb3AtPmdldF9kcWJsayhzYiwgdHlwZSwgaWQsICZpZHEpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJaWYgKGNvcHlfdG9fdXNlcihhZGRyLCAmaWRxLCBzaXplb2YoaWRxKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFFfU0VUUVVPVEE6IHsKKwkJCXN0cnVjdCBpZl9kcWJsayBpZHE7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmaWRxLCBhZGRyLCBzaXplb2YoaWRxKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gc2ItPnNfcWNvcC0+c2V0X2RxYmxrKHNiLCB0eXBlLCBpZCwgJmlkcSk7CisJCX0KKwkJY2FzZSBRX1NZTkM6CisJCQlzeW5jX2RxdW90cyhzYiwgdHlwZSk7CisJCQlyZXR1cm4gMDsKKworCQljYXNlIFFfWFFVT1RBT046CisJCWNhc2UgUV9YUVVPVEFPRkY6CisJCWNhc2UgUV9YUVVPVEFSTTogeworCQkJX191MzIgZmxhZ3M7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcigmZmxhZ3MsIGFkZHIsIHNpemVvZihmbGFncykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIHNiLT5zX3Fjb3AtPnNldF94c3RhdGUoc2IsIGZsYWdzLCBjbWQpOworCQl9CisJCWNhc2UgUV9YR0VUUVNUQVQ6IHsKKwkJCXN0cnVjdCBmc19xdW90YV9zdGF0IGZxczsKKwkJCisJCQlpZiAoKHJldCA9IHNiLT5zX3Fjb3AtPmdldF94c3RhdGUoc2IsICZmcXMpKSkKKwkJCQlyZXR1cm4gcmV0OworCQkJaWYgKGNvcHlfdG9fdXNlcihhZGRyLCAmZnFzLCBzaXplb2YoZnFzKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFFfWFNFVFFMSU06IHsKKwkJCXN0cnVjdCBmc19kaXNrX3F1b3RhIGZkcTsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZmZHEsIGFkZHIsIHNpemVvZihmZHEpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJICAgICAgIHJldHVybiBzYi0+c19xY29wLT5zZXRfeHF1b3RhKHNiLCB0eXBlLCBpZCwgJmZkcSk7CisJCX0KKwkJY2FzZSBRX1hHRVRRVU9UQTogeworCQkJc3RydWN0IGZzX2Rpc2tfcXVvdGEgZmRxOworCisJCQlyZXQgPSBzYi0+c19xY29wLT5nZXRfeHF1b3RhKHNiLCB0eXBlLCBpZCwgJmZkcSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlpZiAoY29weV90b191c2VyKGFkZHIsICZmZHEsIHNpemVvZihmZHEpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgUV9YUVVPVEFTWU5DOgorCQkJcmV0dXJuIHNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMoc2IsIHR5cGUpOworCQkvKiBXZSBuZXZlciByZWFjaCBoZXJlIHVubGVzcyB2YWxpZGl0eSBjaGVjayBpcyBicm9rZW4gKi8KKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGxvb2sgdXAgYSBzdXBlcmJsb2NrIG9uIHdoaWNoIHF1b3RhIG9wcyB3aWxsIGJlIHBlcmZvcm1lZAorICogLSB1c2UgdGhlIG5hbWUgb2YgYSBibG9jayBkZXZpY2UgdG8gZmluZCB0aGUgc3VwZXJibG9jayB0aGVyZW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnF1b3RhY3RsX2Jsb2NrKGNvbnN0IGNoYXIgX191c2VyICpzcGVjaWFsKQoreworI2lmZGVmIENPTkZJR19CTE9DSworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXY7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKwljaGFyICp0bXAgPSBnZXRuYW1lKHNwZWNpYWwpOworCisJaWYgKElTX0VSUih0bXApKQorCQlyZXR1cm4gRVJSX0NBU1QodG1wKTsKKwliZGV2ID0gbG9va3VwX2JkZXYodG1wKTsKKwlwdXRuYW1lKHRtcCk7CisJaWYgKElTX0VSUihiZGV2KSkKKwkJcmV0dXJuIEVSUl9DQVNUKGJkZXYpOworCXNiID0gZ2V0X3N1cGVyKGJkZXYpOworCWJkcHV0KGJkZXYpOworCWlmICghc2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCisJcmV0dXJuIHNiOworI2Vsc2UKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKyNlbmRpZgorfQorCisvKgorICogVGhpcyBpcyB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlLiBUaGlzIGNvbW11bmljYXRlcyB3aXRoCisgKiB0aGUgdXNlci1sZXZlbCBwcm9ncmFtcy4gQ3VycmVudGx5IHRoaXMgb25seSBzdXBwb3J0cyBkaXNrcXVvdGEKKyAqIGNhbGxzLiBNYXliZSB3ZSBuZWVkIHRvIGFkZCB0aGUgcHJvY2VzcyBxdW90YXMgZXRjLiBpbiB0aGUgZnV0dXJlLAorICogYnV0IHdlIHByb2JhYmx5IHNob3VsZCB1c2UgcmxpbWl0cyBmb3IgdGhhdC4KKyAqLworU1lTQ0FMTF9ERUZJTkU0KHF1b3RhY3RsLCB1bnNpZ25lZCBpbnQsIGNtZCwgY29uc3QgY2hhciBfX3VzZXIgKiwgc3BlY2lhbCwKKwkJcWlkX3QsIGlkLCB2b2lkIF9fdXNlciAqLCBhZGRyKQoreworCXVpbnQgY21kcywgdHlwZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gTlVMTDsKKwlpbnQgcmV0OworCisJY21kcyA9IGNtZCA+PiBTVUJDTURTSElGVDsKKwl0eXBlID0gY21kICYgU1VCQ01ETUFTSzsKKworCWlmIChjbWRzICE9IFFfU1lOQyB8fCBzcGVjaWFsKSB7CisJCXNiID0gcXVvdGFjdGxfYmxvY2soc3BlY2lhbCk7CisJCWlmIChJU19FUlIoc2IpKQorCQkJcmV0dXJuIFBUUl9FUlIoc2IpOworCX0KKworCXJldCA9IGNoZWNrX3F1b3RhY3RsX3ZhbGlkKHNiLCB0eXBlLCBjbWRzLCBpZCk7CisJaWYgKHJldCA+PSAwKQorCQlyZXQgPSBkb19xdW90YWN0bChzYiwgdHlwZSwgY21kcywgaWQsIGFkZHIpOworCWlmIChzYikKKwkJZHJvcF9zdXBlcihzYik7CisKKwlyZXR1cm4gcmV0OworfQorCisjaWYgZGVmaW5lZChDT05GSUdfQ09NUEFUX0ZPUl9VNjRfQUxJR05NRU5UKQorLyoKKyAqIFRoaXMgY29kZSB3b3JrcyBvbmx5IGZvciAzMiBiaXQgcXVvdGEgdG9vbHMgb3ZlciA2NCBiaXQgT1MgKHg4Nl82NCwgaWE2NCkKKyAqIGFuZCBpcyBuZWNlc3NhcnkgZHVlIHRvIGFsaWdubWVudCBwcm9ibGVtcy4KKyAqLworc3RydWN0IGNvbXBhdF9pZl9kcWJsayB7CisJY29tcGF0X3U2NCBkcWJfYmhhcmRsaW1pdDsKKwljb21wYXRfdTY0IGRxYl9ic29mdGxpbWl0OworCWNvbXBhdF91NjQgZHFiX2N1cnNwYWNlOworCWNvbXBhdF91NjQgZHFiX2loYXJkbGltaXQ7CisJY29tcGF0X3U2NCBkcWJfaXNvZnRsaW1pdDsKKwljb21wYXRfdTY0IGRxYl9jdXJpbm9kZXM7CisJY29tcGF0X3U2NCBkcWJfYnRpbWU7CisJY29tcGF0X3U2NCBkcWJfaXRpbWU7CisJY29tcGF0X3VpbnRfdCBkcWJfdmFsaWQ7Cit9OworCisvKiBYRlMgc3RydWN0dXJlcyAqLworc3RydWN0IGNvbXBhdF9mc19xZmlsZXN0YXQgeworCWNvbXBhdF91NjQgZHFiX2JoYXJkbGltaXQ7CisJY29tcGF0X3U2NCBxZnNfbmJsa3M7CisJY29tcGF0X3VpbnRfdCBxZnNfbmV4dGVudHM7Cit9OworCitzdHJ1Y3QgY29tcGF0X2ZzX3F1b3RhX3N0YXQgeworCV9fczgJCXFzX3ZlcnNpb247CisJX191MTYJCXFzX2ZsYWdzOworCV9fczgJCXFzX3BhZDsKKwlzdHJ1Y3QgY29tcGF0X2ZzX3FmaWxlc3RhdAlxc191cXVvdGE7CisJc3RydWN0IGNvbXBhdF9mc19xZmlsZXN0YXQJcXNfZ3F1b3RhOworCWNvbXBhdF91aW50X3QJcXNfaW5jb3JlZHFzOworCWNvbXBhdF9pbnRfdAlxc19idGltZWxpbWl0OworCWNvbXBhdF9pbnRfdAlxc19pdGltZWxpbWl0OworCWNvbXBhdF9pbnRfdAlxc19ydGJ0aW1lbGltaXQ7CisJX191MTYJCXFzX2J3YXJubGltaXQ7CisJX191MTYJCXFzX2l3YXJubGltaXQ7Cit9OworCithc21saW5rYWdlIGxvbmcgc3lzMzJfcXVvdGFjdGwodW5zaWduZWQgaW50IGNtZCwgY29uc3QgY2hhciBfX3VzZXIgKnNwZWNpYWwsCisJCQkJCQlxaWRfdCBpZCwgdm9pZCBfX3VzZXIgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IGNtZHM7CisJc3RydWN0IGlmX2RxYmxrIF9fdXNlciAqZHFibGs7CisJc3RydWN0IGNvbXBhdF9pZl9kcWJsayBfX3VzZXIgKmNvbXBhdF9kcWJsazsKKwlzdHJ1Y3QgZnNfcXVvdGFfc3RhdCBfX3VzZXIgKmZzcXN0YXQ7CisJc3RydWN0IGNvbXBhdF9mc19xdW90YV9zdGF0IF9fdXNlciAqY29tcGF0X2ZzcXN0YXQ7CisJY29tcGF0X3VpbnRfdCBkYXRhOworCXUxNiB4ZGF0YTsKKwlsb25nIHJldDsKKworCWNtZHMgPSBjbWQgPj4gU1VCQ01EU0hJRlQ7CisKKwlzd2l0Y2ggKGNtZHMpIHsKKwljYXNlIFFfR0VUUVVPVEE6CisJCWRxYmxrID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKHN0cnVjdCBpZl9kcWJsaykpOworCQljb21wYXRfZHFibGsgPSBhZGRyOworCQlyZXQgPSBzeXNfcXVvdGFjdGwoY21kLCBzcGVjaWFsLCBpZCwgZHFibGspOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCWlmIChjb3B5X2luX3VzZXIoY29tcGF0X2RxYmxrLCBkcWJsaywgc2l6ZW9mKCpjb21wYXRfZHFibGspKSB8fAorCQkJZ2V0X3VzZXIoZGF0YSwgJmRxYmxrLT5kcWJfdmFsaWQpIHx8CisJCQlwdXRfdXNlcihkYXRhLCAmY29tcGF0X2RxYmxrLT5kcWJfdmFsaWQpKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBRX1NFVFFVT1RBOgorCQlkcWJsayA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgaWZfZHFibGspKTsKKwkJY29tcGF0X2RxYmxrID0gYWRkcjsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfaW5fdXNlcihkcWJsaywgY29tcGF0X2RxYmxrLCBzaXplb2YoKmNvbXBhdF9kcWJsaykpIHx8CisJCQlnZXRfdXNlcihkYXRhLCAmY29tcGF0X2RxYmxrLT5kcWJfdmFsaWQpIHx8CisJCQlwdXRfdXNlcihkYXRhLCAmZHFibGstPmRxYl92YWxpZCkpCisJCQlicmVhazsKKwkJcmV0ID0gc3lzX3F1b3RhY3RsKGNtZCwgc3BlY2lhbCwgaWQsIGRxYmxrKTsKKwkJYnJlYWs7CisJY2FzZSBRX1hHRVRRU1RBVDoKKwkJZnNxc3RhdCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgZnNfcXVvdGFfc3RhdCkpOworCQljb21wYXRfZnNxc3RhdCA9IGFkZHI7CisJCXJldCA9IHN5c19xdW90YWN0bChjbWQsIHNwZWNpYWwsIGlkLCBmc3FzdGF0KTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCQlyZXQgPSAtRUZBVUxUOworCQkvKiBDb3B5aW5nIHFzX3ZlcnNpb24sIHFzX2ZsYWdzLCBxc19wYWQgKi8KKwkJaWYgKGNvcHlfaW5fdXNlcihjb21wYXRfZnNxc3RhdCwgZnNxc3RhdCwKKwkJCW9mZnNldG9mKHN0cnVjdCBjb21wYXRfZnNfcXVvdGFfc3RhdCwgcXNfdXF1b3RhKSkpCisJCQlicmVhazsKKwkJLyogQ29weWluZyBxc191cXVvdGEgKi8KKwkJaWYgKGNvcHlfaW5fdXNlcigmY29tcGF0X2ZzcXN0YXQtPnFzX3VxdW90YSwKKwkJCSZmc3FzdGF0LT5xc191cXVvdGEsCisJCQlzaXplb2YoY29tcGF0X2ZzcXN0YXQtPnFzX3VxdW90YSkpIHx8CisJCQlnZXRfdXNlcihkYXRhLCAmZnNxc3RhdC0+cXNfdXF1b3RhLnFmc19uZXh0ZW50cykgfHwKKwkJCXB1dF91c2VyKGRhdGEsICZjb21wYXRfZnNxc3RhdC0+cXNfdXF1b3RhLnFmc19uZXh0ZW50cykpCisJCQlicmVhazsKKwkJLyogQ29weWluZyBxc19ncXVvdGEgKi8KKwkJaWYgKGNvcHlfaW5fdXNlcigmY29tcGF0X2ZzcXN0YXQtPnFzX2dxdW90YSwKKwkJCSZmc3FzdGF0LT5xc19ncXVvdGEsCisJCQlzaXplb2YoY29tcGF0X2ZzcXN0YXQtPnFzX2dxdW90YSkpIHx8CisJCQlnZXRfdXNlcihkYXRhLCAmZnNxc3RhdC0+cXNfZ3F1b3RhLnFmc19uZXh0ZW50cykgfHwKKwkJCXB1dF91c2VyKGRhdGEsICZjb21wYXRfZnNxc3RhdC0+cXNfZ3F1b3RhLnFmc19uZXh0ZW50cykpCisJCQlicmVhazsKKwkJLyogQ29weWluZyB0aGUgcmVzdCAqLworCQlpZiAoY29weV9pbl91c2VyKCZjb21wYXRfZnNxc3RhdC0+cXNfaW5jb3JlZHFzLAorCQkJJmZzcXN0YXQtPnFzX2luY29yZWRxcywKKwkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X2ZzX3F1b3RhX3N0YXQpIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBjb21wYXRfZnNfcXVvdGFfc3RhdCwgcXNfaW5jb3JlZHFzKSkgfHwKKwkJCWdldF91c2VyKHhkYXRhLCAmZnNxc3RhdC0+cXNfaXdhcm5saW1pdCkgfHwKKwkJCXB1dF91c2VyKHhkYXRhLCAmY29tcGF0X2ZzcXN0YXQtPnFzX2l3YXJubGltaXQpKQorCQkJYnJlYWs7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IHN5c19xdW90YWN0bChjbWQsIHNwZWNpYWwsIGlkLCBhZGRyKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGFfdHJlZS5jIGIvZnMvcXVvdGEvcXVvdGFfdHJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MWY0YmMKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9xdW90YS9xdW90YV90cmVlLmMKQEAgLTAsMCArMSw2NTEgQEAKKy8qCisgKgl2ZnN2MCBxdW90YSBJTyBvcGVyYXRpb25zIG9uIGZpbGUKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvZHFibGtfdjIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlICJxdW90YV90cmVlLmgiCisKK01PRFVMRV9BVVRIT1IoIkphbiBLYXJhIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlF1b3RhIHRyaWUgc3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIF9fUVVPVEFfUVRfUEFSQU5PSUEKKworc3RhdGljIGludCBnZXRfaW5kZXgoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHFpZF90IGlkLCBpbnQgZGVwdGgpCit7CisJdW5zaWduZWQgaW50IGVwYiA9IGluZm8tPmRxaV91c2FibGVfYnMgPj4gMjsKKworCWRlcHRoID0gaW5mby0+ZHFpX3F0cmVlX2RlcHRoIC0gZGVwdGggLSAxOworCXdoaWxlIChkZXB0aC0tKQorCQlpZCAvPSBlcGI7CisJcmV0dXJuIGlkICUgZXBiOworfQorCisvKiBOdW1iZXIgb2YgZW50cmllcyBpbiBvbmUgYmxvY2tzICovCitzdGF0aWMgaW50IHF0cmVlX2Rxc3RyX2luX2JsayhzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gKGluZm8tPmRxaV91c2FibGVfYnMgLSBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcikpCisJICAgICAgIC8gaW5mby0+ZHFpX2VudHJ5X3NpemU7Cit9CisKK3N0YXRpYyBjaGFyICpnZXRkcWJ1ZihzaXplX3Qgc2l6ZSkKK3sKKwljaGFyICpidWYgPSBrbWFsbG9jKHNpemUsIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1ZikKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIlZGUzogTm90IGVub3VnaCBtZW1vcnkgZm9yIHF1b3RhIGJ1ZmZlcnMuXG4iKTsKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgc3NpemVfdCByZWFkX2JsayhzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgdWludCBibGssIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5mby0+ZHFpX3NiOworCisJbWVtc2V0KGJ1ZiwgMCwgaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJcmV0dXJuIHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCBpbmZvLT5kcWlfdHlwZSwgYnVmLAorCSAgICAgICBpbmZvLT5kcWlfdXNhYmxlX2JzLCBibGsgPDwgaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzKTsKK30KKworc3RhdGljIHNzaXplX3Qgd3JpdGVfYmxrKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCB1aW50IGJsaywgY2hhciAqYnVmKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbmZvLT5kcWlfc2I7CisKKwlyZXR1cm4gc2ItPnNfb3AtPnF1b3RhX3dyaXRlKHNiLCBpbmZvLT5kcWlfdHlwZSwgYnVmLAorCSAgICAgICBpbmZvLT5kcWlfdXNhYmxlX2JzLCBibGsgPDwgaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzKTsKK30KKworLyogUmVtb3ZlIGVtcHR5IGJsb2NrIGZyb20gbGlzdCBhbmQgcmV0dXJuIGl0ICovCitzdGF0aWMgaW50IGdldF9mcmVlX2RxYmxrKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvKQoreworCWNoYXIgKmJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOworCXN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKmRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7CisJaW50IHJldCwgYmxrOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCWlmIChpbmZvLT5kcWlfZnJlZV9ibGspIHsKKwkJYmxrID0gaW5mby0+ZHFpX2ZyZWVfYmxrOworCQlyZXQgPSByZWFkX2JsayhpbmZvLCBibGssIGJ1Zik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfYnVmOworCQlpbmZvLT5kcWlfZnJlZV9ibGsgPSBsZTMyX3RvX2NwdShkaC0+ZHFkaF9uZXh0X2ZyZWUpOworCX0KKwllbHNlIHsKKwkJbWVtc2V0KGJ1ZiwgMCwgaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJCS8qIEFzc3VyZSBibG9jayBhbGxvY2F0aW9uLi4uICovCisJCXJldCA9IHdyaXRlX2JsayhpbmZvLCBpbmZvLT5kcWlfYmxvY2tzLCBidWYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2J1ZjsKKwkJYmxrID0gaW5mby0+ZHFpX2Jsb2NrcysrOworCX0KKwltYXJrX2luZm9fZGlydHkoaW5mby0+ZHFpX3NiLCBpbmZvLT5kcWlfdHlwZSk7CisJcmV0ID0gYmxrOworb3V0X2J1ZjoKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qIEluc2VydCBlbXB0eSBibG9jayB0byB0aGUgbGlzdCAqLworc3RhdGljIGludCBwdXRfZnJlZV9kcWJsayhzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgY2hhciAqYnVmLCB1aW50IGJsaykKK3sKKwlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOworCWludCBlcnI7CisKKwlkaC0+ZHFkaF9uZXh0X2ZyZWUgPSBjcHVfdG9fbGUzMihpbmZvLT5kcWlfZnJlZV9ibGspOworCWRoLT5kcWRoX3ByZXZfZnJlZSA9IGNwdV90b19sZTMyKDApOworCWRoLT5kcWRoX2VudHJpZXMgPSBjcHVfdG9fbGUxNigwKTsKKwllcnIgPSB3cml0ZV9ibGsoaW5mbywgYmxrLCBidWYpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWluZm8tPmRxaV9mcmVlX2JsayA9IGJsazsKKwltYXJrX2luZm9fZGlydHkoaW5mby0+ZHFpX3NiLCBpbmZvLT5kcWlfdHlwZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlbW92ZSBnaXZlbiBibG9jayBmcm9tIHRoZSBsaXN0IG9mIGJsb2NrcyB3aXRoIGZyZWUgZW50cmllcyAqLworc3RhdGljIGludCByZW1vdmVfZnJlZV9kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBjaGFyICpidWYsCisJCQkgICAgICAgdWludCBibGspCit7CisJY2hhciAqdG1wYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKKwl1aW50IG5leHRibGsgPSBsZTMyX3RvX2NwdShkaC0+ZHFkaF9uZXh0X2ZyZWUpOworCXVpbnQgcHJldmJsayA9IGxlMzJfdG9fY3B1KGRoLT5kcWRoX3ByZXZfZnJlZSk7CisJaW50IGVycjsKKworCWlmICghdG1wYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAobmV4dGJsaykgeworCQllcnIgPSByZWFkX2JsayhpbmZvLCBuZXh0YmxrLCB0bXBidWYpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0X2J1ZjsKKwkJKChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopdG1wYnVmKS0+ZHFkaF9wcmV2X2ZyZWUgPQorCQkJCQkJCWRoLT5kcWRoX3ByZXZfZnJlZTsKKwkJZXJyID0gd3JpdGVfYmxrKGluZm8sIG5leHRibGssIHRtcGJ1Zik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXRfYnVmOworCX0KKwlpZiAocHJldmJsaykgeworCQllcnIgPSByZWFkX2JsayhpbmZvLCBwcmV2YmxrLCB0bXBidWYpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0X2J1ZjsKKwkJKChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopdG1wYnVmKS0+ZHFkaF9uZXh0X2ZyZWUgPQorCQkJCQkJCWRoLT5kcWRoX25leHRfZnJlZTsKKwkJZXJyID0gd3JpdGVfYmxrKGluZm8sIHByZXZibGssIHRtcGJ1Zik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXRfYnVmOworCX0gZWxzZSB7CisJCWluZm8tPmRxaV9mcmVlX2VudHJ5ID0gbmV4dGJsazsKKwkJbWFya19pbmZvX2RpcnR5KGluZm8tPmRxaV9zYiwgaW5mby0+ZHFpX3R5cGUpOworCX0KKwlrZnJlZSh0bXBidWYpOworCWRoLT5kcWRoX25leHRfZnJlZSA9IGRoLT5kcWRoX3ByZXZfZnJlZSA9IGNwdV90b19sZTMyKDApOworCS8qIE5vIG1hdHRlciB3aGV0aGVyIHdyaXRlIHN1Y2NlZWRzIGJsb2NrIGlzIG91dCBvZiBsaXN0ICovCisJaWYgKHdyaXRlX2JsayhpbmZvLCBibGssIGJ1ZikgPCAwKQorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJWRlM6IENhbid0IHdyaXRlIGJsb2NrICgldSkgd2l0aCBmcmVlIGVudHJpZXMuXG4iLAorCQkgICAgICAgYmxrKTsKKwlyZXR1cm4gMDsKK291dF9idWY6CisJa2ZyZWUodG1wYnVmKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBJbnNlcnQgZ2l2ZW4gYmxvY2sgdG8gdGhlIGJlZ2lubmluZyBvZiBsaXN0IHdpdGggZnJlZSBlbnRyaWVzICovCitzdGF0aWMgaW50IGluc2VydF9mcmVlX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIGNoYXIgKmJ1ZiwKKwkJCSAgICAgICB1aW50IGJsaykKK3sKKwljaGFyICp0bXBidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKKwlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOworCWludCBlcnI7CisKKwlpZiAoIXRtcGJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJZGgtPmRxZGhfbmV4dF9mcmVlID0gY3B1X3RvX2xlMzIoaW5mby0+ZHFpX2ZyZWVfZW50cnkpOworCWRoLT5kcWRoX3ByZXZfZnJlZSA9IGNwdV90b19sZTMyKDApOworCWVyciA9IHdyaXRlX2JsayhpbmZvLCBibGssIGJ1Zik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X2J1ZjsKKwlpZiAoaW5mby0+ZHFpX2ZyZWVfZW50cnkpIHsKKwkJZXJyID0gcmVhZF9ibGsoaW5mbywgaW5mby0+ZHFpX2ZyZWVfZW50cnksIHRtcGJ1Zik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXRfYnVmOworCQkoKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKil0bXBidWYpLT5kcWRoX3ByZXZfZnJlZSA9CisJCQkJCQkJY3B1X3RvX2xlMzIoYmxrKTsKKwkJZXJyID0gd3JpdGVfYmxrKGluZm8sIGluZm8tPmRxaV9mcmVlX2VudHJ5LCB0bXBidWYpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0X2J1ZjsKKwl9CisJa2ZyZWUodG1wYnVmKTsKKwlpbmZvLT5kcWlfZnJlZV9lbnRyeSA9IGJsazsKKwltYXJrX2luZm9fZGlydHkoaW5mby0+ZHFpX3NiLCBpbmZvLT5kcWlfdHlwZSk7CisJcmV0dXJuIDA7CitvdXRfYnVmOgorCWtmcmVlKHRtcGJ1Zik7CisJcmV0dXJuIGVycjsKK30KKworLyogSXMgdGhlIGVudHJ5IGluIHRoZSBibG9jayBmcmVlPyAqLworaW50IHF0cmVlX2VudHJ5X3VudXNlZChzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgY2hhciAqZGlzaykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5kcWlfZW50cnlfc2l6ZTsgaSsrKQorCQlpZiAoZGlza1tpXSkKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTChxdHJlZV9lbnRyeV91bnVzZWQpOworCisvKiBGaW5kIHNwYWNlIGZvciBkcXVvdCAqLworc3RhdGljIHVpbnQgZmluZF9mcmVlX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sCisJCQkgICAgICBzdHJ1Y3QgZHF1b3QgKmRxdW90LCBpbnQgKmVycikKK3sKKwl1aW50IGJsaywgaTsKKwlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaDsKKwljaGFyICpidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKKwljaGFyICpkZHF1b3Q7CisKKwkqZXJyID0gMDsKKwlpZiAoIWJ1ZikgeworCQkqZXJyID0gLUVOT01FTTsKKwkJcmV0dXJuIDA7CisJfQorCWRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7CisJaWYgKGluZm8tPmRxaV9mcmVlX2VudHJ5KSB7CisJCWJsayA9IGluZm8tPmRxaV9mcmVlX2VudHJ5OworCQkqZXJyID0gcmVhZF9ibGsoaW5mbywgYmxrLCBidWYpOworCQlpZiAoKmVyciA8IDApCisJCQlnb3RvIG91dF9idWY7CisJfSBlbHNlIHsKKwkJYmxrID0gZ2V0X2ZyZWVfZHFibGsoaW5mbyk7CisJCWlmICgoaW50KWJsayA8IDApIHsKKwkJCSplcnIgPSBibGs7CisJCQlrZnJlZShidWYpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbWVtc2V0KGJ1ZiwgMCwgaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJCS8qIFRoaXMgaXMgZW5vdWdoIGFzIHRoZSBibG9jayBpcyBhbHJlYWR5IHplcm9lZCBhbmQgdGhlIGVudHJ5CisJCSAqIGxpc3QgaXMgZW1wdHkuLi4gKi8KKwkJaW5mby0+ZHFpX2ZyZWVfZW50cnkgPSBibGs7CisJCW1hcmtfaW5mb19kaXJ0eShkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKTsKKwl9CisJLyogQmxvY2sgd2lsbCBiZSBmdWxsPyAqLworCWlmIChsZTE2X3RvX2NwdShkaC0+ZHFkaF9lbnRyaWVzKSArIDEgPj0gcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pKSB7CisJCSplcnIgPSByZW1vdmVfZnJlZV9kcWVudHJ5KGluZm8sIGJ1ZiwgYmxrKTsKKwkJaWYgKCplcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogZmluZF9mcmVlX2RxZW50cnkoKTogQ2FuJ3QgIgorCQkJICAgICAgICJyZW1vdmUgYmxvY2sgKCV1KSBmcm9tIGVudHJ5IGZyZWUgbGlzdC5cbiIsCisJCQkgICAgICAgYmxrKTsKKwkJCWdvdG8gb3V0X2J1ZjsKKwkJfQorCX0KKwlsZTE2X2FkZF9jcHUoJmRoLT5kcWRoX2VudHJpZXMsIDEpOworCS8qIEZpbmQgZnJlZSBzdHJ1Y3R1cmUgaW4gYmxvY2sgKi8KKwlkZHF1b3QgPSBidWYgKyBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcik7CisJZm9yIChpID0gMDsgaSA8IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKTsgaSsrKSB7CisJCWlmIChxdHJlZV9lbnRyeV91bnVzZWQoaW5mbywgZGRxdW90KSkKKwkJCWJyZWFrOworCQlkZHF1b3QgKz0gaW5mby0+ZHFpX2VudHJ5X3NpemU7CisJfQorI2lmZGVmIF9fUVVPVEFfUVRfUEFSQU5PSUEKKwlpZiAoaSA9PSBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IGZpbmRfZnJlZV9kcWVudHJ5KCk6IERhdGEgYmxvY2sgZnVsbCAiCisJCQkJImJ1dCBpdCBzaG91bGRuJ3QuXG4iKTsKKwkJKmVyciA9IC1FSU87CisJCWdvdG8gb3V0X2J1ZjsKKwl9CisjZW5kaWYKKwkqZXJyID0gd3JpdGVfYmxrKGluZm8sIGJsaywgYnVmKTsKKwlpZiAoKmVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IGZpbmRfZnJlZV9kcWVudHJ5KCk6IENhbid0IHdyaXRlIHF1b3RhICIKKwkJCQkiZGF0YSBibG9jayAldS5cbiIsIGJsayk7CisJCWdvdG8gb3V0X2J1ZjsKKwl9CisJZHF1b3QtPmRxX29mZiA9IChibGsgPDwgaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzKSArCisJCQlzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcikgKworCQkJaSAqIGluZm8tPmRxaV9lbnRyeV9zaXplOworCWtmcmVlKGJ1Zik7CisJcmV0dXJuIGJsazsKK291dF9idWY6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gMDsKK30KKworLyogSW5zZXJ0IHJlZmVyZW5jZSB0byBzdHJ1Y3R1cmUgaW50byB0aGUgdHJpZSAqLworc3RhdGljIGludCBkb19pbnNlcnRfdHJlZShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgc3RydWN0IGRxdW90ICpkcXVvdCwKKwkJCSAgdWludCAqdHJlZWJsaywgaW50IGRlcHRoKQoreworCWNoYXIgKmJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOworCWludCByZXQgPSAwLCBuZXdzb24gPSAwLCBuZXdhY3QgPSAwOworCV9fbGUzMiAqcmVmOworCXVpbnQgbmV3YmxrOworCisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCWlmICghKnRyZWVibGspIHsKKwkJcmV0ID0gZ2V0X2ZyZWVfZHFibGsoaW5mbyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfYnVmOworCQkqdHJlZWJsayA9IHJldDsKKwkJbWVtc2V0KGJ1ZiwgMCwgaW5mby0+ZHFpX3VzYWJsZV9icyk7CisJCW5ld2FjdCA9IDE7CisJfSBlbHNlIHsKKwkJcmV0ID0gcmVhZF9ibGsoaW5mbywgKnRyZWVibGssIGJ1Zik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCB0cmVlIHF1b3RhIGJsb2NrICIKKwkJCQkJIiV1LlxuIiwgKnRyZWVibGspOworCQkJZ290byBvdXRfYnVmOworCQl9CisJfQorCXJlZiA9IChfX2xlMzIgKilidWY7CisJbmV3YmxrID0gbGUzMl90b19jcHUocmVmW2dldF9pbmRleChpbmZvLCBkcXVvdC0+ZHFfaWQsIGRlcHRoKV0pOworCWlmICghbmV3YmxrKQorCQluZXdzb24gPSAxOworCWlmIChkZXB0aCA9PSBpbmZvLT5kcWlfcXRyZWVfZGVwdGggLSAxKSB7CisjaWZkZWYgX19RVU9UQV9RVF9QQVJBTk9JQQorCQlpZiAobmV3YmxrKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogSW5zZXJ0aW5nIGFscmVhZHkgcHJlc2VudCBxdW90YSAiCisJCQkJCSJlbnRyeSAoYmxvY2sgJXUpLlxuIiwKKwkJCSAgICAgICBsZTMyX3RvX2NwdShyZWZbZ2V0X2luZGV4KGluZm8sCisJCQkJCQlkcXVvdC0+ZHFfaWQsIGRlcHRoKV0pKTsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIG91dF9idWY7CisJCX0KKyNlbmRpZgorCQluZXdibGsgPSBmaW5kX2ZyZWVfZHFlbnRyeShpbmZvLCBkcXVvdCwgJnJldCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gZG9faW5zZXJ0X3RyZWUoaW5mbywgZHF1b3QsICZuZXdibGssIGRlcHRoKzEpOworCX0KKwlpZiAobmV3c29uICYmIHJldCA+PSAwKSB7CisJCXJlZltnZXRfaW5kZXgoaW5mbywgZHF1b3QtPmRxX2lkLCBkZXB0aCldID0KKwkJCQkJCQljcHVfdG9fbGUzMihuZXdibGspOworCQlyZXQgPSB3cml0ZV9ibGsoaW5mbywgKnRyZWVibGssIGJ1Zik7CisJfSBlbHNlIGlmIChuZXdhY3QgJiYgcmV0IDwgMCkgeworCQlwdXRfZnJlZV9kcWJsayhpbmZvLCBidWYsICp0cmVlYmxrKTsKKwl9CitvdXRfYnVmOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworLyogV3JhcHBlciBmb3IgaW5zZXJ0aW5nIHF1b3RhIHN0cnVjdHVyZSBpbnRvIHRyZWUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGRxX2luc2VydF90cmVlKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWludCB0bXAgPSBRVF9UUkVFT0ZGOworCXJldHVybiBkb19pbnNlcnRfdHJlZShpbmZvLCBkcXVvdCwgJnRtcCwgMCk7Cit9CisKKy8qCisgKiBXZSBkb24ndCBoYXZlIHRvIGJlIGFmcmFpZCBvZiBkZWFkbG9ja3MgYXMgd2UgbmV2ZXIgaGF2ZSBxdW90YXMgb24gcXVvdGEKKyAqIGZpbGVzLi4uCisgKi8KK2ludCBxdHJlZV93cml0ZV9kcXVvdChzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlpbnQgdHlwZSA9IGRxdW90LT5kcV90eXBlOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkcXVvdC0+ZHFfc2I7CisJc3NpemVfdCByZXQ7CisJY2hhciAqZGRxdW90ID0gZ2V0ZHFidWYoaW5mby0+ZHFpX2VudHJ5X3NpemUpOworCisJaWYgKCFkZHF1b3QpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZHFfb2ZmIGlzIGd1YXJkZWQgYnkgZHFpb19tdXRleCAqLworCWlmICghZHF1b3QtPmRxX29mZikgeworCQlyZXQgPSBkcV9pbnNlcnRfdHJlZShpbmZvLCBkcXVvdCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogRXJyb3IgJXpkIG9jY3VycmVkIHdoaWxlICIKKwkJCQkJImNyZWF0aW5nIHF1b3RhLlxuIiwgcmV0KTsKKwkJCWtmcmVlKGRkcXVvdCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwlpbmZvLT5kcWlfb3BzLT5tZW0yZGlza19kcWJsayhkZHF1b3QsIGRxdW90KTsKKwlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKwlyZXQgPSBzYi0+c19vcC0+cXVvdGFfd3JpdGUoc2IsIHR5cGUsIGRkcXVvdCwgaW5mby0+ZHFpX2VudHJ5X3NpemUsCisJCQkJICAgIGRxdW90LT5kcV9vZmYpOworCWlmIChyZXQgIT0gaW5mby0+ZHFpX2VudHJ5X3NpemUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVkZTOiBkcXVvdGEgd3JpdGUgZmFpbGVkIG9uIGRldiAlc1xuIiwKKwkJICAgICAgIHNiLT5zX2lkKTsKKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gLUVOT1NQQzsKKwl9IGVsc2UgeworCQlyZXQgPSAwOworCX0KKwlkcXN0YXRzLndyaXRlcysrOworCWtmcmVlKGRkcXVvdCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChxdHJlZV93cml0ZV9kcXVvdCk7CisKKy8qIEZyZWUgZHF1b3QgZW50cnkgaW4gZGF0YSBibG9jayAqLworc3RhdGljIGludCBmcmVlX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QsCisJCQl1aW50IGJsaykKK3sKKwlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaDsKKwljaGFyICpidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZHF1b3QtPmRxX29mZiA+PiBpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMgIT0gYmxrKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBRdW90YSBzdHJ1Y3R1cmUgaGFzIG9mZnNldCB0byBvdGhlciAiCisJCSAgImJsb2NrICgldSkgdGhhbiBpdCBzaG91bGQgKCV1KS5cbiIsIGJsaywKKwkJICAodWludCkoZHF1b3QtPmRxX29mZiA+PiBpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMpKTsKKwkJZ290byBvdXRfYnVmOworCX0KKwlyZXQgPSByZWFkX2JsayhpbmZvLCBibGssIGJ1Zik7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHJlYWQgcXVvdGEgZGF0YSBibG9jayAldVxuIiwgYmxrKTsKKwkJZ290byBvdXRfYnVmOworCX0KKwlkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOworCWxlMTZfYWRkX2NwdSgmZGgtPmRxZGhfZW50cmllcywgLTEpOworCWlmICghbGUxNl90b19jcHUoZGgtPmRxZGhfZW50cmllcykpIHsJLyogQmxvY2sgZ290IGZyZWU/ICovCisJCXJldCA9IHJlbW92ZV9mcmVlX2RxZW50cnkoaW5mbywgYnVmLCBibGspOworCQlpZiAocmV0ID49IDApCisJCQlyZXQgPSBwdXRfZnJlZV9kcWJsayhpbmZvLCBidWYsIGJsayk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgbW92ZSBxdW90YSBkYXRhIGJsb2NrICgldSkgIgorCQkJICAidG8gZnJlZSBsaXN0LlxuIiwgYmxrKTsKKwkJCWdvdG8gb3V0X2J1ZjsKKwkJfQorCX0gZWxzZSB7CisJCW1lbXNldChidWYgKworCQkgICAgICAgKGRxdW90LT5kcV9vZmYgJiAoKDEgPDwgaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzKSAtIDEpKSwKKwkJICAgICAgIDAsIGluZm8tPmRxaV9lbnRyeV9zaXplKTsKKwkJaWYgKGxlMTZfdG9fY3B1KGRoLT5kcWRoX2VudHJpZXMpID09CisJCSAgICBxdHJlZV9kcXN0cl9pbl9ibGsoaW5mbykgLSAxKSB7CisJCQkvKiBJbnNlcnQgd2lsbCB3cml0ZSBibG9jayBpdHNlbGYgKi8KKwkJCXJldCA9IGluc2VydF9mcmVlX2RxZW50cnkoaW5mbywgYnVmLCBibGspOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgaW5zZXJ0IHF1b3RhIGRhdGEgIgorCQkJCSAgICAgICAiYmxvY2sgKCV1KSB0byBmcmVlIGVudHJ5IGxpc3QuXG4iLCBibGspOworCQkJCWdvdG8gb3V0X2J1ZjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJldCA9IHdyaXRlX2JsayhpbmZvLCBibGssIGJ1Zik7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBDYW4ndCB3cml0ZSBxdW90YSBkYXRhICIKKwkJCQkgICJibG9jayAldVxuIiwgYmxrKTsKKwkJCQlnb3RvIG91dF9idWY7CisJCQl9CisJCX0KKwl9CisJZHF1b3QtPmRxX29mZiA9IDA7CS8qIFF1b3RhIGlzIG5vdyB1bmF0dGFjaGVkICovCitvdXRfYnVmOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworLyogUmVtb3ZlIHJlZmVyZW5jZSB0byBkcXVvdCBmcm9tIHRyZWUgKi8KK3N0YXRpYyBpbnQgcmVtb3ZlX3RyZWUoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QsCisJCSAgICAgICB1aW50ICpibGssIGludCBkZXB0aCkKK3sKKwljaGFyICpidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKKwlpbnQgcmV0ID0gMDsKKwl1aW50IG5ld2JsazsKKwlfX2xlMzIgKnJlZiA9IChfX2xlMzIgKilidWY7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gcmVhZF9ibGsoaW5mbywgKmJsaywgYnVmKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCBxdW90YSBkYXRhIGJsb2NrICV1XG4iLCAqYmxrKTsKKwkJZ290byBvdXRfYnVmOworCX0KKwluZXdibGsgPSBsZTMyX3RvX2NwdShyZWZbZ2V0X2luZGV4KGluZm8sIGRxdW90LT5kcV9pZCwgZGVwdGgpXSk7CisJaWYgKGRlcHRoID09IGluZm8tPmRxaV9xdHJlZV9kZXB0aCAtIDEpIHsKKwkJcmV0ID0gZnJlZV9kcWVudHJ5KGluZm8sIGRxdW90LCBuZXdibGspOworCQluZXdibGsgPSAwOworCX0gZWxzZSB7CisJCXJldCA9IHJlbW92ZV90cmVlKGluZm8sIGRxdW90LCAmbmV3YmxrLCBkZXB0aCsxKTsKKwl9CisJaWYgKHJldCA+PSAwICYmICFuZXdibGspIHsKKwkJaW50IGk7CisJCXJlZltnZXRfaW5kZXgoaW5mbywgZHF1b3QtPmRxX2lkLCBkZXB0aCldID0gY3B1X3RvX2xlMzIoMCk7CisJCS8qIEJsb2NrIGdvdCBlbXB0eT8gKi8KKwkJZm9yIChpID0gMDsgaSA8IChpbmZvLT5kcWlfdXNhYmxlX2JzID4+IDIpICYmICFyZWZbaV07IGkrKykKKwkJCTsKKwkJLyogRG9uJ3QgcHV0IHRoZSByb290IGJsb2NrIGludG8gdGhlIGZyZWUgYmxvY2sgbGlzdCAqLworCQlpZiAoaSA9PSAoaW5mby0+ZHFpX3VzYWJsZV9icyA+PiAyKQorCQkgICAgJiYgKmJsayAhPSBRVF9UUkVFT0ZGKSB7CisJCQlwdXRfZnJlZV9kcWJsayhpbmZvLCBidWYsICpibGspOworCQkJKmJsayA9IDA7CisJCX0gZWxzZSB7CisJCQlyZXQgPSB3cml0ZV9ibGsoaW5mbywgKmJsaywgYnVmKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBDYW4ndCB3cml0ZSBxdW90YSB0cmVlICIKKwkJCQkgICJibG9jayAldS5cbiIsICpibGspOworCQl9CisJfQorb3V0X2J1ZjoKKwlrZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKKy8qIERlbGV0ZSBkcXVvdCBmcm9tIHRyZWUgKi8KK2ludCBxdHJlZV9kZWxldGVfZHF1b3Qoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJdWludCB0bXAgPSBRVF9UUkVFT0ZGOworCisJaWYgKCFkcXVvdC0+ZHFfb2ZmKQkvKiBFdmVuIG5vdCBhbGxvY2F0ZWQ/ICovCisJCXJldHVybiAwOworCXJldHVybiByZW1vdmVfdHJlZShpbmZvLCBkcXVvdCwgJnRtcCwgMCk7Cit9CitFWFBPUlRfU1lNQk9MKHF0cmVlX2RlbGV0ZV9kcXVvdCk7CisKKy8qIEZpbmQgZW50cnkgaW4gYmxvY2sgKi8KK3N0YXRpYyBsb2ZmX3QgZmluZF9ibG9ja19kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLAorCQkJCSBzdHJ1Y3QgZHF1b3QgKmRxdW90LCB1aW50IGJsaykKK3sKKwljaGFyICpidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKKwlsb2ZmX3QgcmV0ID0gMDsKKwlpbnQgaTsKKwljaGFyICpkZHF1b3Q7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gcmVhZF9ibGsoaW5mbywgYmxrLCBidWYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBDYW4ndCByZWFkIHF1b3RhIHRyZWUgYmxvY2sgJXUuXG4iLCBibGspOworCQlnb3RvIG91dF9idWY7CisJfQorCWRkcXVvdCA9IGJ1ZiArIHNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pOyBpKyspIHsKKwkJaWYgKGluZm8tPmRxaV9vcHMtPmlzX2lkKGRkcXVvdCwgZHF1b3QpKQorCQkJYnJlYWs7CisJCWRkcXVvdCArPSBpbmZvLT5kcWlfZW50cnlfc2l6ZTsKKwl9CisJaWYgKGkgPT0gcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBRdW90YSBmb3IgaWQgJXUgcmVmZXJlbmNlZCAiCisJCSAgImJ1dCBub3QgcHJlc2VudC5cbiIsIGRxdW90LT5kcV9pZCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0X2J1ZjsKKwl9IGVsc2UgeworCQlyZXQgPSAoYmxrIDw8IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cykgKyBzaXplb2Yoc3RydWN0CisJCSAgcXRfZGlza19kcWRiaGVhZGVyKSArIGkgKiBpbmZvLT5kcWlfZW50cnlfc2l6ZTsKKwl9CitvdXRfYnVmOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworLyogRmluZCBlbnRyeSBmb3IgZ2l2ZW4gaWQgaW4gdGhlIHRyZWUgKi8KK3N0YXRpYyBsb2ZmX3QgZmluZF90cmVlX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sCisJCQkJc3RydWN0IGRxdW90ICpkcXVvdCwgdWludCBibGssIGludCBkZXB0aCkKK3sKKwljaGFyICpidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKKwlsb2ZmX3QgcmV0ID0gMDsKKwlfX2xlMzIgKnJlZiA9IChfX2xlMzIgKilidWY7CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gcmVhZF9ibGsoaW5mbywgYmxrLCBidWYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBDYW4ndCByZWFkIHF1b3RhIHRyZWUgYmxvY2sgJXUuXG4iLCBibGspOworCQlnb3RvIG91dF9idWY7CisJfQorCXJldCA9IDA7CisJYmxrID0gbGUzMl90b19jcHUocmVmW2dldF9pbmRleChpbmZvLCBkcXVvdC0+ZHFfaWQsIGRlcHRoKV0pOworCWlmICghYmxrKQkvKiBObyByZWZlcmVuY2U/ICovCisJCWdvdG8gb3V0X2J1ZjsKKwlpZiAoZGVwdGggPCBpbmZvLT5kcWlfcXRyZWVfZGVwdGggLSAxKQorCQlyZXQgPSBmaW5kX3RyZWVfZHFlbnRyeShpbmZvLCBkcXVvdCwgYmxrLCBkZXB0aCsxKTsKKwllbHNlCisJCXJldCA9IGZpbmRfYmxvY2tfZHFlbnRyeShpbmZvLCBkcXVvdCwgYmxrKTsKK291dF9idWY6CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBGaW5kIGVudHJ5IGZvciBnaXZlbiBpZCBpbiB0aGUgdHJlZSAtIHdyYXBwZXIgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbmxpbmUgbG9mZl90IGZpbmRfZHFlbnRyeShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywKKwkJCQkgIHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJcmV0dXJuIGZpbmRfdHJlZV9kcWVudHJ5KGluZm8sIGRxdW90LCBRVF9UUkVFT0ZGLCAwKTsKK30KKworaW50IHF0cmVlX3JlYWRfZHF1b3Qoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJaW50IHR5cGUgPSBkcXVvdC0+ZHFfdHlwZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZHF1b3QtPmRxX3NiOworCWxvZmZfdCBvZmZzZXQ7CisJY2hhciAqZGRxdW90OworCWludCByZXQgPSAwOworCisjaWZkZWYgX19RVU9UQV9RVF9QQVJBTk9JQQorCS8qIEludmFsaWRhdGVkIHF1b3RhPyAqLworCWlmICghc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmlsZXNbdHlwZV0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IFF1b3RhIGludmFsaWRhdGVkIHdoaWxlIHJlYWRpbmchXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorI2VuZGlmCisJLyogRG8gd2Uga25vdyBvZmZzZXQgb2YgdGhlIGRxdW90IGVudHJ5IGluIHRoZSBxdW90YSBmaWxlPyAqLworCWlmICghZHF1b3QtPmRxX29mZikgeworCQlvZmZzZXQgPSBmaW5kX2RxZW50cnkoaW5mbywgZHF1b3QpOworCQlpZiAob2Zmc2V0IDw9IDApIHsJLyogRW50cnkgbm90IHByZXNlbnQ/ICovCisJCQlpZiAob2Zmc2V0IDwgMCkKKwkJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCBxdW90YSAiCisJCQkJICAic3RydWN0dXJlIGZvciBpZCAldS5cbiIsIGRxdW90LT5kcV9pZCk7CisJCQlkcXVvdC0+ZHFfb2ZmID0gMDsKKwkJCXNldF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKKwkJCW1lbXNldCgmZHF1b3QtPmRxX2RxYiwgMCwgc2l6ZW9mKHN0cnVjdCBtZW1fZHFibGspKTsKKwkJCXJldCA9IG9mZnNldDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWRxdW90LT5kcV9vZmYgPSBvZmZzZXQ7CisJfQorCWRkcXVvdCA9IGdldGRxYnVmKGluZm8tPmRxaV9lbnRyeV9zaXplKTsKKwlpZiAoIWRkcXVvdCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0ID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIGRkcXVvdCwgaW5mby0+ZHFpX2VudHJ5X3NpemUsCisJCQkJICAgZHF1b3QtPmRxX29mZik7CisJaWYgKHJldCAhPSBpbmZvLT5kcWlfZW50cnlfc2l6ZSkgeworCQlpZiAocmV0ID49IDApCisJCQlyZXQgPSAtRUlPOworCQlwcmludGsoS0VSTl9FUlIgIlZGUzogRXJyb3Igd2hpbGUgcmVhZGluZyBxdW90YSAiCisJCQkJInN0cnVjdHVyZSBmb3IgaWQgJXUuXG4iLCBkcXVvdC0+ZHFfaWQpOworCQlzZXRfYml0KERRX0ZBS0VfQiwgJmRxdW90LT5kcV9mbGFncyk7CisJCW1lbXNldCgmZHF1b3QtPmRxX2RxYiwgMCwgc2l6ZW9mKHN0cnVjdCBtZW1fZHFibGspKTsKKwkJa2ZyZWUoZGRxdW90KTsKKwkJZ290byBvdXQ7CisJfQorCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwlpbmZvLT5kcWlfb3BzLT5kaXNrMm1lbV9kcWJsayhkcXVvdCwgZGRxdW90KTsKKwlpZiAoIWRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQgJiYKKwkgICAgIWRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgJiYKKwkgICAgIWRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQgJiYKKwkgICAgIWRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQpCisJCXNldF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKKwlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKKwlrZnJlZShkZHF1b3QpOworb3V0OgorCWRxc3RhdHMucmVhZHMrKzsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChxdHJlZV9yZWFkX2RxdW90KTsKKworLyogQ2hlY2sgd2hldGhlciBkcXVvdCBzaG91bGQgbm90IGJlIGRlbGV0ZWQuIFdlIGtub3cgd2UgYXJlCisgKiB0aGUgb25seSBvbmUgb3BlcmF0aW5nIG9uIGRxdW90ICh0aGFua3MgdG8gZHFfbG9jaykgKi8KK2ludCBxdHJlZV9yZWxlYXNlX2RxdW90KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCWlmICh0ZXN0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpICYmCisJICAgICEoZHF1b3QtPmRxX2RxYi5kcWJfY3VyaW5vZGVzIHwgZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UpKQorCQlyZXR1cm4gcXRyZWVfZGVsZXRlX2RxdW90KGluZm8sIGRxdW90KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocXRyZWVfcmVsZWFzZV9kcXVvdCk7CmRpZmYgLS1naXQgYS9mcy9xdW90YV90cmVlLmggYi9mcy9xdW90YS9xdW90YV90cmVlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3F1b3RhX3RyZWUuaApyZW5hbWUgdG8gZnMvcXVvdGEvcXVvdGFfdHJlZS5oCmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV92MS5jIGIvZnMvcXVvdGEvcXVvdGFfdjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWRjZjQyCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcXVvdGEvcXVvdGFfdjEuYwpAQCAtMCwwICsxLDIzNCBAQAorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YS5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CisjaW5jbHVkZSA8bGludXgvZHFibGtfdjEuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNpbmNsdWRlICJxdW90YWlvX3YxLmgiCisKK01PRFVMRV9BVVRIT1IoIkphbiBLYXJhIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk9sZCBxdW90YSBmb3JtYXQgc3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIFFVT1RBQkxPQ0tfQklUUyAxMAorI2RlZmluZSBRVU9UQUJMT0NLX1NJWkUgKDEgPDwgUVVPVEFCTE9DS19CSVRTKQorCitzdGF0aWMgaW5saW5lIHFzaXplX3QgdjFfc3RvcWIocXNpemVfdCBzcGFjZSkKK3sKKwlyZXR1cm4gKHNwYWNlICsgUVVPVEFCTE9DS19TSVpFIC0gMSkgPj4gUVVPVEFCTE9DS19CSVRTOworfQorCitzdGF0aWMgaW5saW5lIHFzaXplX3QgdjFfcWJ0b3MocXNpemVfdCBibG9ja3MpCit7CisJcmV0dXJuIGJsb2NrcyA8PCBRVU9UQUJMT0NLX0JJVFM7Cit9CisKK3N0YXRpYyB2b2lkIHYxX2Rpc2sybWVtX2RxYmxrKHN0cnVjdCBtZW1fZHFibGsgKm0sIHN0cnVjdCB2MV9kaXNrX2RxYmxrICpkKQoreworCW0tPmRxYl9paGFyZGxpbWl0ID0gZC0+ZHFiX2loYXJkbGltaXQ7CisJbS0+ZHFiX2lzb2Z0bGltaXQgPSBkLT5kcWJfaXNvZnRsaW1pdDsKKwltLT5kcWJfY3VyaW5vZGVzID0gZC0+ZHFiX2N1cmlub2RlczsKKwltLT5kcWJfYmhhcmRsaW1pdCA9IHYxX3FidG9zKGQtPmRxYl9iaGFyZGxpbWl0KTsKKwltLT5kcWJfYnNvZnRsaW1pdCA9IHYxX3FidG9zKGQtPmRxYl9ic29mdGxpbWl0KTsKKwltLT5kcWJfY3Vyc3BhY2UgPSB2MV9xYnRvcyhkLT5kcWJfY3VyYmxvY2tzKTsKKwltLT5kcWJfaXRpbWUgPSBkLT5kcWJfaXRpbWU7CisJbS0+ZHFiX2J0aW1lID0gZC0+ZHFiX2J0aW1lOworfQorCitzdGF0aWMgdm9pZCB2MV9tZW0yZGlza19kcWJsayhzdHJ1Y3QgdjFfZGlza19kcWJsayAqZCwgc3RydWN0IG1lbV9kcWJsayAqbSkKK3sKKwlkLT5kcWJfaWhhcmRsaW1pdCA9IG0tPmRxYl9paGFyZGxpbWl0OworCWQtPmRxYl9pc29mdGxpbWl0ID0gbS0+ZHFiX2lzb2Z0bGltaXQ7CisJZC0+ZHFiX2N1cmlub2RlcyA9IG0tPmRxYl9jdXJpbm9kZXM7CisJZC0+ZHFiX2JoYXJkbGltaXQgPSB2MV9zdG9xYihtLT5kcWJfYmhhcmRsaW1pdCk7CisJZC0+ZHFiX2Jzb2Z0bGltaXQgPSB2MV9zdG9xYihtLT5kcWJfYnNvZnRsaW1pdCk7CisJZC0+ZHFiX2N1cmJsb2NrcyA9IHYxX3N0b3FiKG0tPmRxYl9jdXJzcGFjZSk7CisJZC0+ZHFiX2l0aW1lID0gbS0+ZHFiX2l0aW1lOworCWQtPmRxYl9idGltZSA9IG0tPmRxYl9idGltZTsKK30KKworc3RhdGljIGludCB2MV9yZWFkX2RxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJaW50IHR5cGUgPSBkcXVvdC0+ZHFfdHlwZTsKKwlzdHJ1Y3QgdjFfZGlza19kcWJsayBkcWJsazsKKworCWlmICghc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmlsZXNbdHlwZV0pCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU2V0IHN0cnVjdHVyZSB0byAwcyBpbiBjYXNlIHJlYWQgZmFpbHMvaXMgYWZ0ZXIgZW5kIG9mIGZpbGUgKi8KKwltZW1zZXQoJmRxYmxrLCAwLCBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspKTsKKwlkcXVvdC0+ZHFfc2ItPnNfb3AtPnF1b3RhX3JlYWQoZHF1b3QtPmRxX3NiLCB0eXBlLCAoY2hhciAqKSZkcWJsaywKKwkJCXNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksIHYxX2Rxb2ZmKGRxdW90LT5kcV9pZCkpOworCisJdjFfZGlzazJtZW1fZHFibGsoJmRxdW90LT5kcV9kcWIsICZkcWJsayk7CisJaWYgKGRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQgPT0gMCAmJgorCSAgICBkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ID09IDAgJiYKKwkgICAgZHF1b3QtPmRxX2RxYi5kcWJfaWhhcmRsaW1pdCA9PSAwICYmCisJICAgIGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgPT0gMCkKKwkJc2V0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOworCWRxc3RhdHMucmVhZHMrKzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHYxX2NvbW1pdF9kcWJsayhzdHJ1Y3QgZHF1b3QgKmRxdW90KQoreworCXNob3J0IHR5cGUgPSBkcXVvdC0+ZHFfdHlwZTsKKwlzc2l6ZV90IHJldDsKKwlzdHJ1Y3QgdjFfZGlza19kcWJsayBkcWJsazsKKworCXYxX21lbTJkaXNrX2RxYmxrKCZkcWJsaywgJmRxdW90LT5kcV9kcWIpOworCWlmIChkcXVvdC0+ZHFfaWQgPT0gMCkgeworCQlkcWJsay5kcWJfYnRpbWUgPQorCQkJc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+aW5mb1t0eXBlXS5kcWlfYmdyYWNlOworCQlkcWJsay5kcWJfaXRpbWUgPQorCQkJc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+aW5mb1t0eXBlXS5kcWlfaWdyYWNlOworCX0KKwlyZXQgPSAwOworCWlmIChzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5maWxlc1t0eXBlXSkKKwkJcmV0ID0gZHF1b3QtPmRxX3NiLT5zX29wLT5xdW90YV93cml0ZShkcXVvdC0+ZHFfc2IsIHR5cGUsCisJCQkoY2hhciAqKSZkcWJsaywgc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSwKKwkJCXYxX2Rxb2ZmKGRxdW90LT5kcV9pZCkpOworCWlmIChyZXQgIT0gc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJWRlM6IGRxdW90YSB3cml0ZSBmYWlsZWQgb24gZGV2ICVzXG4iLAorCQkJZHF1b3QtPmRxX3NiLT5zX2lkKTsKKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IDA7CisKK291dDoKKwlkcXN0YXRzLndyaXRlcysrOworCisJcmV0dXJuIHJldDsKK30KKworLyogTWFnaWNzIG9mIG5ldyBxdW90YSBmb3JtYXQgKi8KKyNkZWZpbmUgVjJfSU5JVFFNQUdJQ1Mge1wKKwkweGQ5YzAxZjExLCAgICAgLyogVVNSUVVPVEEgKi9cCisJMHhkOWMwMTkyNyAgICAgIC8qIEdSUFFVT1RBICovXAorfQorCisvKiBIZWFkZXIgb2YgbmV3IHF1b3RhIGZvcm1hdCAqLworc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIgeworCV9fbGUzMiBkcWhfbWFnaWM7ICAgICAgICAvKiBNYWdpYyBudW1iZXIgaWRlbnRpZnlpbmcgZmlsZSAqLworCV9fbGUzMiBkcWhfdmVyc2lvbjsgICAgICAvKiBGaWxlIHZlcnNpb24gKi8KK307CisKK3N0YXRpYyBpbnQgdjFfY2hlY2tfcXVvdGFfZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gc2JfZHFvcHQoc2IpLT5maWxlc1t0eXBlXTsKKwl1bG9uZyBibG9ja3M7CisJc2l6ZV90IG9mZjsgCisJc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIgZHFoZWFkOworCXNzaXplX3Qgc2l6ZTsKKwlsb2ZmX3QgaXNpemU7CisJc3RhdGljIGNvbnN0IHVpbnQgcXVvdGFfbWFnaWNzW10gPSBWMl9JTklUUU1BR0lDUzsKKworCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOworCWlmICghaXNpemUpCisJCXJldHVybiAwOworCWJsb2NrcyA9IGlzaXplID4+IEJMT0NLX1NJWkVfQklUUzsKKwlvZmYgPSBpc2l6ZSAmIChCTE9DS19TSVpFIC0gMSk7CisJaWYgKChibG9ja3MgJSBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspICogQkxPQ0tfU0laRSArIG9mZikgJQorCSAgICBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspKQorCQlyZXR1cm4gMDsKKwkvKiBEb3VibGVjaGVjayB3aGV0aGVyIHdlIGRpZG4ndCBnZXQgZmlsZSB3aXRoIG5ldyBmb3JtYXQgLSB3aXRoIG9sZAorCSAqIHF1b3RhY3RsKCkgdGhpcyBjb3VsZCBoYXBwZW4gKi8KKwlzaXplID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopJmRxaGVhZCwKKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSwgMCk7CisJaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSkKKwkJcmV0dXJuIDE7CS8qIFByb2JhYmx5IG5vdCBuZXcgZm9ybWF0ICovCisJaWYgKGxlMzJfdG9fY3B1KGRxaGVhZC5kcWhfbWFnaWMpICE9IHF1b3RhX21hZ2ljc1t0eXBlXSkKKwkJcmV0dXJuIDE7CS8qIERlZmluaXRlbHkgbm90IG5ldyBmb3JtYXQgKi8KKwlwcmludGsoS0VSTl9JTkZPCisJICAgICAgICJWRlM6ICVzOiBSZWZ1c2luZyB0byB0dXJuIG9uIG9sZCBxdW90YSBmb3JtYXQgb24gZ2l2ZW4gZmlsZS4iCisJICAgICAgICIgSXQgcHJvYmFibHkgY29udGFpbnMgbmV3ZXIgcXVvdGEgZm9ybWF0LlxuIiwgc2ItPnNfaWQpOworICAgICAgICByZXR1cm4gMDsJCS8qIFNlZW1zIGxpa2UgYSBuZXcgZm9ybWF0IGZpbGUgLT4gcmVmdXNlIGl0ICovCit9CisKK3N0YXRpYyBpbnQgdjFfcmVhZF9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpOworCXN0cnVjdCB2MV9kaXNrX2RxYmxrIGRxYmxrOworCWludCByZXQ7CisKKwlyZXQgPSBzYi0+c19vcC0+cXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKikmZHFibGssCisJCQkJc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSwgdjFfZHFvZmYoMCkpOworCWlmIChyZXQgIT0gc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSkgeworCQlpZiAocmV0ID49IDApCisJCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gMDsKKwkvKiBsaW1pdHMgYXJlIHN0b3JlZCBhcyB1bnNpZ25lZCAzMi1iaXQgZGF0YSAqLworCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9tYXhibGltaXQgPSAweGZmZmZmZmZmOworCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9tYXhpbGltaXQgPSAweGZmZmZmZmZmOworCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9pZ3JhY2UgPQorCQkJZHFibGsuZHFiX2l0aW1lID8gZHFibGsuZHFiX2l0aW1lIDogTUFYX0lRX1RJTUU7CisJZHFvcHQtPmluZm9bdHlwZV0uZHFpX2JncmFjZSA9CisJCQlkcWJsay5kcWJfYnRpbWUgPyBkcWJsay5kcWJfYnRpbWUgOiBNQVhfRFFfVElNRTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHYxX3dyaXRlX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgcXVvdGFfaW5mbyAqZHFvcHQgPSBzYl9kcW9wdChzYik7CisJc3RydWN0IHYxX2Rpc2tfZHFibGsgZHFibGs7CisJaW50IHJldDsKKworCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9mbGFncyAmPSB+RFFGX0lORk9fRElSVFk7CisJcmV0ID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopJmRxYmxrLAorCQkJCXNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksIHYxX2Rxb2ZmKDApKTsKKwlpZiAocmV0ICE9IHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpIHsKKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCWRxYmxrLmRxYl9pdGltZSA9IGRxb3B0LT5pbmZvW3R5cGVdLmRxaV9pZ3JhY2U7CisJZHFibGsuZHFiX2J0aW1lID0gZHFvcHQtPmluZm9bdHlwZV0uZHFpX2JncmFjZTsKKwlyZXQgPSBzYi0+c19vcC0+cXVvdGFfd3JpdGUoc2IsIHR5cGUsIChjaGFyICopJmRxYmxrLAorCSAgICAgIHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksIHYxX2Rxb2ZmKDApKTsKKwlpZiAocmV0ID09IHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpCisJCXJldCA9IDA7CisJZWxzZSBpZiAocmV0ID4gMCkKKwkJcmV0ID0gLUVJTzsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHF1b3RhX2Zvcm1hdF9vcHMgdjFfZm9ybWF0X29wcyA9IHsKKwkuY2hlY2tfcXVvdGFfZmlsZQk9IHYxX2NoZWNrX3F1b3RhX2ZpbGUsCisJLnJlYWRfZmlsZV9pbmZvCQk9IHYxX3JlYWRfZmlsZV9pbmZvLAorCS53cml0ZV9maWxlX2luZm8JPSB2MV93cml0ZV9maWxlX2luZm8sCisJLmZyZWVfZmlsZV9pbmZvCQk9IE5VTEwsCisJLnJlYWRfZHFibGsJCT0gdjFfcmVhZF9kcWJsaywKKwkuY29tbWl0X2RxYmxrCQk9IHYxX2NvbW1pdF9kcWJsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgdjFfcXVvdGFfZm9ybWF0ID0geworCS5xZl9mbXRfaWQJPSBRRk1UX1ZGU19PTEQsCisJLnFmX29wcwkJPSAmdjFfZm9ybWF0X29wcywKKwkucWZfb3duZXIJPSBUSElTX01PRFVMRQorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF92MV9xdW90YV9mb3JtYXQodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCgmdjFfcXVvdGFfZm9ybWF0KTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfdjFfcXVvdGFfZm9ybWF0KHZvaWQpCit7CisgICAgICAgIHVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KCZ2MV9xdW90YV9mb3JtYXQpOworfQorCittb2R1bGVfaW5pdChpbml0X3YxX3F1b3RhX2Zvcm1hdCk7Cittb2R1bGVfZXhpdChleGl0X3YxX3F1b3RhX2Zvcm1hdCk7CisKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL3F1b3RhX3YyLmMgYi9mcy9xdW90YS9xdW90YV92Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NDc1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9xdW90YS9xdW90YV92Mi5jCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICoJdmZzdjAgcXVvdGEgSU8gb3BlcmF0aW9ucyBvbiBmaWxlCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L2RxYmxrX3YyLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaW5jbHVkZSAicXVvdGFfdHJlZS5oIgorI2luY2x1ZGUgInF1b3RhaW9fdjIuaCIKKworTU9EVUxFX0FVVEhPUigiSmFuIEthcmEiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUXVvdGEgZm9ybWF0IHYyIHN1cHBvcnQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworI2RlZmluZSBfX1FVT1RBX1YyX1BBUkFOT0lBCisKK3N0YXRpYyB2b2lkIHYyX21lbTJkaXNrZHFiKHZvaWQgKmRwLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKK3N0YXRpYyB2b2lkIHYyX2Rpc2sybWVtZHFiKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHZvaWQgKmRwKTsKK3N0YXRpYyBpbnQgdjJfaXNfaWQodm9pZCAqZHAsIHN0cnVjdCBkcXVvdCAqZHF1b3QpOworCitzdGF0aWMgc3RydWN0IHF0cmVlX2ZtdF9vcGVyYXRpb25zIHYyX3F0cmVlX29wcyA9IHsKKwkubWVtMmRpc2tfZHFibGsgPSB2Ml9tZW0yZGlza2RxYiwKKwkuZGlzazJtZW1fZHFibGsgPSB2Ml9kaXNrMm1lbWRxYiwKKwkuaXNfaWQgPSB2Ml9pc19pZCwKK307CisKKyNkZWZpbmUgUVVPVEFCTE9DS19CSVRTIDEwCisjZGVmaW5lIFFVT1RBQkxPQ0tfU0laRSAoMSA8PCBRVU9UQUJMT0NLX0JJVFMpCisKK3N0YXRpYyBpbmxpbmUgcXNpemVfdCB2Ml9zdG9xYihxc2l6ZV90IHNwYWNlKQoreworCXJldHVybiAoc3BhY2UgKyBRVU9UQUJMT0NLX1NJWkUgLSAxKSA+PiBRVU9UQUJMT0NLX0JJVFM7Cit9CisKK3N0YXRpYyBpbmxpbmUgcXNpemVfdCB2Ml9xYnRvcyhxc2l6ZV90IGJsb2NrcykKK3sKKwlyZXR1cm4gYmxvY2tzIDw8IFFVT1RBQkxPQ0tfQklUUzsKK30KKworLyogQ2hlY2sgd2hldGhlciBnaXZlbiBmaWxlIGlzIHJlYWxseSB2ZnN2MCBxdW90YWZpbGUgKi8KK3N0YXRpYyBpbnQgdjJfY2hlY2tfcXVvdGFfZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciBkcWhlYWQ7CisJc3NpemVfdCBzaXplOworCXN0YXRpYyBjb25zdCB1aW50IHF1b3RhX21hZ2ljc1tdID0gVjJfSU5JVFFNQUdJQ1M7CisJc3RhdGljIGNvbnN0IHVpbnQgcXVvdGFfdmVyc2lvbnNbXSA9IFYyX0lOSVRRVkVSU0lPTlM7CisgCisJc2l6ZSA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkcWhlYWQsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciksIDApOworCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlcikpIHsKKwkJcHJpbnRrKCJxdW90YV92MjogZmFpbGVkIHJlYWQgZXhwZWN0ZWQ9JXpkIGdvdD0lemRcbiIsCisJCQlzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpLCBzaXplKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChsZTMyX3RvX2NwdShkcWhlYWQuZHFoX21hZ2ljKSAhPSBxdW90YV9tYWdpY3NbdHlwZV0gfHwKKwkgICAgbGUzMl90b19jcHUoZHFoZWFkLmRxaF92ZXJzaW9uKSAhPSBxdW90YV92ZXJzaW9uc1t0eXBlXSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKKy8qIFJlYWQgaW5mb3JtYXRpb24gaGVhZGVyIGZyb20gcXVvdGEgZmlsZSAqLworc3RhdGljIGludCB2Ml9yZWFkX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgdjJfZGlza19kcWluZm8gZGluZm87CisJc3RydWN0IG1lbV9kcWluZm8gKmluZm8gPSBzYl9kcWluZm8oc2IsIHR5cGUpOworCXN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICpxaW5mbzsKKwlzc2l6ZV90IHNpemU7CisKKwlzaXplID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopJmRpbmZvLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFpbmZvKSwgVjJfRFFJTkZPT0ZGKTsKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFpbmZvKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCByZWFkIGluZm8gc3RydWN0dXJlIG9uIGRldmljZSAlcy5cbiIsCisJCQlzYi0+c19pZCk7CisJCXJldHVybiAtMTsKKwl9CisJaW5mby0+ZHFpX3ByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyksIEdGUF9OT0ZTKTsKKwlpZiAoIWluZm8tPmRxaV9wcml2KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgcXVvdGEgaW5mb3JtYXRpb24gc3RydWN0dXJlLlxuIik7CisJCXJldHVybiAtMTsKKwl9CisJcWluZm8gPSBpbmZvLT5kcWlfcHJpdjsKKwkvKiBsaW1pdHMgYXJlIHN0b3JlZCBhcyB1bnNpZ25lZCAzMi1iaXQgZGF0YSAqLworCWluZm8tPmRxaV9tYXhibGltaXQgPSAweGZmZmZmZmZmOworCWluZm8tPmRxaV9tYXhpbGltaXQgPSAweGZmZmZmZmZmOworCWluZm8tPmRxaV9iZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmdyYWNlKTsKKwlpbmZvLT5kcWlfaWdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2lncmFjZSk7CisJaW5mby0+ZHFpX2ZsYWdzID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2ZsYWdzKTsKKwlxaW5mby0+ZHFpX3NiID0gc2I7CisJcWluZm8tPmRxaV90eXBlID0gdHlwZTsKKwlxaW5mby0+ZHFpX2Jsb2NrcyA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9ibG9ja3MpOworCXFpbmZvLT5kcWlfZnJlZV9ibGsgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfZnJlZV9ibGspOworCXFpbmZvLT5kcWlfZnJlZV9lbnRyeSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9mcmVlX2VudHJ5KTsKKwlxaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzID0gVjJfRFFCTEtTSVpFX0JJVFM7CisJcWluZm8tPmRxaV91c2FibGVfYnMgPSAxIDw8IFYyX0RRQkxLU0laRV9CSVRTOworCXFpbmZvLT5kcWlfcXRyZWVfZGVwdGggPSBxdHJlZV9kZXB0aChxaW5mbyk7CisJcWluZm8tPmRxaV9lbnRyeV9zaXplID0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxYmxrKTsKKwlxaW5mby0+ZHFpX29wcyA9ICZ2Ml9xdHJlZV9vcHM7CisJcmV0dXJuIDA7Cit9CisKKy8qIFdyaXRlIGluZm9ybWF0aW9uIGhlYWRlciB0byBxdW90YSBmaWxlICovCitzdGF0aWMgaW50IHYyX3dyaXRlX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgdjJfZGlza19kcWluZm8gZGluZm87CisJc3RydWN0IG1lbV9kcWluZm8gKmluZm8gPSBzYl9kcWluZm8oc2IsIHR5cGUpOworCXN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICpxaW5mbyA9IGluZm8tPmRxaV9wcml2OworCXNzaXplX3Qgc2l6ZTsKKworCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKKwlpbmZvLT5kcWlfZmxhZ3MgJj0gfkRRRl9JTkZPX0RJUlRZOworCWRpbmZvLmRxaV9iZ3JhY2UgPSBjcHVfdG9fbGUzMihpbmZvLT5kcWlfYmdyYWNlKTsKKwlkaW5mby5kcWlfaWdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby0+ZHFpX2lncmFjZSk7CisJZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoaW5mby0+ZHFpX2ZsYWdzICYgRFFGX01BU0spOworCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOworCWRpbmZvLmRxaV9ibG9ja3MgPSBjcHVfdG9fbGUzMihxaW5mby0+ZHFpX2Jsb2Nrcyk7CisJZGluZm8uZHFpX2ZyZWVfYmxrID0gY3B1X3RvX2xlMzIocWluZm8tPmRxaV9mcmVlX2Jsayk7CisJZGluZm8uZHFpX2ZyZWVfZW50cnkgPSBjcHVfdG9fbGUzMihxaW5mby0+ZHFpX2ZyZWVfZW50cnkpOworCXNpemUgPSBzYi0+c19vcC0+cXVvdGFfd3JpdGUoc2IsIHR5cGUsIChjaGFyICopJmRpbmZvLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFpbmZvKSwgVjJfRFFJTkZPT0ZGKTsKKwlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFpbmZvKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCB3cml0ZSBpbmZvIHN0cnVjdHVyZSBvbiBkZXZpY2UgJXMuXG4iLAorCQkJc2ItPnNfaWQpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2Ml9kaXNrMm1lbWRxYihzdHJ1Y3QgZHF1b3QgKmRxdW90LCB2b2lkICpkcCkKK3sKKwlzdHJ1Y3QgdjJfZGlza19kcWJsayAqZCA9IGRwLCBlbXB0eTsKKwlzdHJ1Y3QgbWVtX2RxYmxrICptID0gJmRxdW90LT5kcV9kcWI7CisKKwltLT5kcWJfaWhhcmRsaW1pdCA9IGxlMzJfdG9fY3B1KGQtPmRxYl9paGFyZGxpbWl0KTsKKwltLT5kcWJfaXNvZnRsaW1pdCA9IGxlMzJfdG9fY3B1KGQtPmRxYl9pc29mdGxpbWl0KTsKKwltLT5kcWJfY3VyaW5vZGVzID0gbGUzMl90b19jcHUoZC0+ZHFiX2N1cmlub2Rlcyk7CisJbS0+ZHFiX2l0aW1lID0gbGU2NF90b19jcHUoZC0+ZHFiX2l0aW1lKTsKKwltLT5kcWJfYmhhcmRsaW1pdCA9IHYyX3FidG9zKGxlMzJfdG9fY3B1KGQtPmRxYl9iaGFyZGxpbWl0KSk7CisJbS0+ZHFiX2Jzb2Z0bGltaXQgPSB2Ml9xYnRvcyhsZTMyX3RvX2NwdShkLT5kcWJfYnNvZnRsaW1pdCkpOworCW0tPmRxYl9jdXJzcGFjZSA9IGxlNjRfdG9fY3B1KGQtPmRxYl9jdXJzcGFjZSk7CisJbS0+ZHFiX2J0aW1lID0gbGU2NF90b19jcHUoZC0+ZHFiX2J0aW1lKTsKKwkvKiBXZSBuZWVkIHRvIGVzY2FwZSBiYWNrIGFsbC16ZXJvIHN0cnVjdHVyZSAqLworCW1lbXNldCgmZW1wdHksIDAsIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWJsaykpOworCWVtcHR5LmRxYl9pdGltZSA9IGNwdV90b19sZTY0KDEpOworCWlmICghbWVtY21wKCZlbXB0eSwgZHAsIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWJsaykpKQorCQltLT5kcWJfaXRpbWUgPSAwOworfQorCitzdGF0aWMgdm9pZCB2Ml9tZW0yZGlza2RxYih2b2lkICpkcCwgc3RydWN0IGRxdW90ICpkcXVvdCkKK3sKKwlzdHJ1Y3QgdjJfZGlza19kcWJsayAqZCA9IGRwOworCXN0cnVjdCBtZW1fZHFibGsgKm0gPSAmZHF1b3QtPmRxX2RxYjsKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbyA9CisJCQlzYl9kcWluZm8oZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSktPmRxaV9wcml2OworCisJZC0+ZHFiX2loYXJkbGltaXQgPSBjcHVfdG9fbGUzMihtLT5kcWJfaWhhcmRsaW1pdCk7CisJZC0+ZHFiX2lzb2Z0bGltaXQgPSBjcHVfdG9fbGUzMihtLT5kcWJfaXNvZnRsaW1pdCk7CisJZC0+ZHFiX2N1cmlub2RlcyA9IGNwdV90b19sZTMyKG0tPmRxYl9jdXJpbm9kZXMpOworCWQtPmRxYl9pdGltZSA9IGNwdV90b19sZTY0KG0tPmRxYl9pdGltZSk7CisJZC0+ZHFiX2JoYXJkbGltaXQgPSBjcHVfdG9fbGUzMih2Ml9zdG9xYihtLT5kcWJfYmhhcmRsaW1pdCkpOworCWQtPmRxYl9ic29mdGxpbWl0ID0gY3B1X3RvX2xlMzIodjJfc3RvcWIobS0+ZHFiX2Jzb2Z0bGltaXQpKTsKKwlkLT5kcWJfY3Vyc3BhY2UgPSBjcHVfdG9fbGU2NChtLT5kcWJfY3Vyc3BhY2UpOworCWQtPmRxYl9idGltZSA9IGNwdV90b19sZTY0KG0tPmRxYl9idGltZSk7CisJZC0+ZHFiX2lkID0gY3B1X3RvX2xlMzIoZHF1b3QtPmRxX2lkKTsKKwlpZiAocXRyZWVfZW50cnlfdW51c2VkKGluZm8sIGRwKSkKKwkJZC0+ZHFiX2l0aW1lID0gY3B1X3RvX2xlNjQoMSk7Cit9CisKK3N0YXRpYyBpbnQgdjJfaXNfaWQodm9pZCAqZHAsIHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJc3RydWN0IHYyX2Rpc2tfZHFibGsgKmQgPSBkcDsKKwlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbyA9CisJCQlzYl9kcWluZm8oZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSktPmRxaV9wcml2OworCisJaWYgKHF0cmVlX2VudHJ5X3VudXNlZChpbmZvLCBkcCkpCisJCXJldHVybiAwOworCXJldHVybiBsZTMyX3RvX2NwdShkLT5kcWJfaWQpID09IGRxdW90LT5kcV9pZDsKK30KKworc3RhdGljIGludCB2Ml9yZWFkX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJcmV0dXJuIHF0cmVlX3JlYWRfZHF1b3Qoc2JfZHFpbmZvKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpLT5kcWlfcHJpdiwgZHF1b3QpOworfQorCitzdGF0aWMgaW50IHYyX3dyaXRlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJcmV0dXJuIHF0cmVlX3dyaXRlX2RxdW90KHNiX2RxaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKS0+ZHFpX3ByaXYsIGRxdW90KTsKK30KKworc3RhdGljIGludCB2Ml9yZWxlYXNlX2RxdW90KHN0cnVjdCBkcXVvdCAqZHF1b3QpCit7CisJcmV0dXJuIHF0cmVlX3JlbGVhc2VfZHF1b3Qoc2JfZHFpbmZvKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpLT5kcWlfcHJpdiwgZHF1b3QpOworfQorCitzdGF0aWMgaW50IHYyX2ZyZWVfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCWtmcmVlKHNiX2RxaW5mbyhzYiwgdHlwZSktPmRxaV9wcml2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBxdW90YV9mb3JtYXRfb3BzIHYyX2Zvcm1hdF9vcHMgPSB7CisJLmNoZWNrX3F1b3RhX2ZpbGUJPSB2Ml9jaGVja19xdW90YV9maWxlLAorCS5yZWFkX2ZpbGVfaW5mbwkJPSB2Ml9yZWFkX2ZpbGVfaW5mbywKKwkud3JpdGVfZmlsZV9pbmZvCT0gdjJfd3JpdGVfZmlsZV9pbmZvLAorCS5mcmVlX2ZpbGVfaW5mbwkJPSB2Ml9mcmVlX2ZpbGVfaW5mbywKKwkucmVhZF9kcWJsawkJPSB2Ml9yZWFkX2RxdW90LAorCS5jb21taXRfZHFibGsJCT0gdjJfd3JpdGVfZHF1b3QsCisJLnJlbGVhc2VfZHFibGsJCT0gdjJfcmVsZWFzZV9kcXVvdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgdjJfcXVvdGFfZm9ybWF0ID0geworCS5xZl9mbXRfaWQJPSBRRk1UX1ZGU19WMCwKKwkucWZfb3BzCQk9ICZ2Ml9mb3JtYXRfb3BzLAorCS5xZl9vd25lcgk9IFRISVNfTU9EVUxFCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3YyX3F1b3RhX2Zvcm1hdCh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9xdW90YV9mb3JtYXQoJnYyX3F1b3RhX2Zvcm1hdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3YyX3F1b3RhX2Zvcm1hdCh2b2lkKQoreworCXVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KCZ2Ml9xdW90YV9mb3JtYXQpOworfQorCittb2R1bGVfaW5pdChpbml0X3YyX3F1b3RhX2Zvcm1hdCk7Cittb2R1bGVfZXhpdChleGl0X3YyX3F1b3RhX2Zvcm1hdCk7CmRpZmYgLS1naXQgYS9mcy9xdW90YWlvX3YxLmggYi9mcy9xdW90YS9xdW90YWlvX3YxLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3F1b3RhaW9fdjEuaApyZW5hbWUgdG8gZnMvcXVvdGEvcXVvdGFpb192MS5oCmRpZmYgLS1naXQgYS9mcy9xdW90YWlvX3YyLmggYi9mcy9xdW90YS9xdW90YWlvX3YyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL3F1b3RhaW9fdjIuaApyZW5hbWUgdG8gZnMvcXVvdGEvcXVvdGFpb192Mi5oCmRpZmYgLS1naXQgYS9mcy9xdW90YV90cmVlLmMgYi9mcy9xdW90YV90cmVlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MzQwNGMuLjAwMDAwMDAKLS0tIGEvZnMvcXVvdGFfdHJlZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjQ1ICswLDAgQEAKLS8qCi0gKgl2ZnN2MCBxdW90YSBJTyBvcGVyYXRpb25zIG9uIGZpbGUKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvZHFibGtfdjIuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+Ci0KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KLSNpbmNsdWRlICJxdW90YV90cmVlLmgiCi0KLU1PRFVMRV9BVVRIT1IoIkphbiBLYXJhIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlF1b3RhIHRyaWUgc3VwcG9ydCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jZGVmaW5lIF9fUVVPVEFfUVRfUEFSQU5PSUEKLQotdHlwZWRlZiBjaGFyICpkcWJ1Zl90OwotCi1zdGF0aWMgaW50IGdldF9pbmRleChzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgcWlkX3QgaWQsIGludCBkZXB0aCkKLXsKLQl1bnNpZ25lZCBpbnQgZXBiID0gaW5mby0+ZHFpX3VzYWJsZV9icyA+PiAyOwotCi0JZGVwdGggPSBpbmZvLT5kcWlfcXRyZWVfZGVwdGggLSBkZXB0aCAtIDE7Ci0Jd2hpbGUgKGRlcHRoLS0pCi0JCWlkIC89IGVwYjsKLQlyZXR1cm4gaWQgJSBlcGI7Ci19Ci0KLS8qIE51bWJlciBvZiBlbnRyaWVzIGluIG9uZSBibG9ja3MgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHF0cmVlX2Rxc3RyX2luX2JsayhzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbykKLXsKLQlyZXR1cm4gKGluZm8tPmRxaV91c2FibGVfYnMgLSBzaXplb2Yoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlcikpCi0JICAgICAgIC8gaW5mby0+ZHFpX2VudHJ5X3NpemU7Ci19Ci0KLXN0YXRpYyBkcWJ1Zl90IGdldGRxYnVmKHNpemVfdCBzaXplKQotewotCWRxYnVmX3QgYnVmID0ga21hbGxvYyhzaXplLCBHRlBfTk9GUyk7Ci0JaWYgKCFidWYpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlZGUzogTm90IGVub3VnaCBtZW1vcnkgZm9yIHF1b3RhIGJ1ZmZlcnMuXG4iKTsKLQlyZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZWRxYnVmKGRxYnVmX3QgYnVmKQotewotCWtmcmVlKGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCByZWFkX2JsayhzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgdWludCBibGssIGRxYnVmX3QgYnVmKQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbmZvLT5kcWlfc2I7Ci0KLQltZW1zZXQoYnVmLCAwLCBpbmZvLT5kcWlfdXNhYmxlX2JzKTsKLQlyZXR1cm4gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIGluZm8tPmRxaV90eXBlLCAoY2hhciAqKWJ1ZiwKLQkgICAgICAgaW5mby0+ZHFpX3VzYWJsZV9icywgYmxrIDw8IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3NpemVfdCB3cml0ZV9ibGsoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHVpbnQgYmxrLCBkcWJ1Zl90IGJ1ZikKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5mby0+ZHFpX3NiOwotCi0JcmV0dXJuIHNiLT5zX29wLT5xdW90YV93cml0ZShzYiwgaW5mby0+ZHFpX3R5cGUsIChjaGFyICopYnVmLAotCSAgICAgICBpbmZvLT5kcWlfdXNhYmxlX2JzLCBibGsgPDwgaW5mby0+ZHFpX2Jsb2Nrc2l6ZV9iaXRzKTsKLX0KLQotLyogUmVtb3ZlIGVtcHR5IGJsb2NrIGZyb20gbGlzdCBhbmQgcmV0dXJuIGl0ICovCi1zdGF0aWMgaW50IGdldF9mcmVlX2RxYmxrKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvKQotewotCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7Ci0Jc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqZGggPSAoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKWJ1ZjsKLQlpbnQgcmV0LCBibGs7Ci0KLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKGluZm8tPmRxaV9mcmVlX2JsaykgewotCQlibGsgPSBpbmZvLT5kcWlfZnJlZV9ibGs7Ci0JCXJldCA9IHJlYWRfYmxrKGluZm8sIGJsaywgYnVmKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9idWY7Ci0JCWluZm8tPmRxaV9mcmVlX2JsayA9IGxlMzJfdG9fY3B1KGRoLT5kcWRoX25leHRfZnJlZSk7Ci0JfQotCWVsc2UgewotCQltZW1zZXQoYnVmLCAwLCBpbmZvLT5kcWlfdXNhYmxlX2JzKTsKLQkJLyogQXNzdXJlIGJsb2NrIGFsbG9jYXRpb24uLi4gKi8KLQkJcmV0ID0gd3JpdGVfYmxrKGluZm8sIGluZm8tPmRxaV9ibG9ja3MsIGJ1Zik7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXRfYnVmOwotCQlibGsgPSBpbmZvLT5kcWlfYmxvY2tzKys7Ci0JfQotCW1hcmtfaW5mb19kaXJ0eShpbmZvLT5kcWlfc2IsIGluZm8tPmRxaV90eXBlKTsKLQlyZXQgPSBibGs7Ci1vdXRfYnVmOgotCWZyZWVkcWJ1ZihidWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIEluc2VydCBlbXB0eSBibG9jayB0byB0aGUgbGlzdCAqLwotc3RhdGljIGludCBwdXRfZnJlZV9kcWJsayhzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgZHFidWZfdCBidWYsIHVpbnQgYmxrKQotewotCXN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKmRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7Ci0JaW50IGVycjsKLQotCWRoLT5kcWRoX25leHRfZnJlZSA9IGNwdV90b19sZTMyKGluZm8tPmRxaV9mcmVlX2Jsayk7Ci0JZGgtPmRxZGhfcHJldl9mcmVlID0gY3B1X3RvX2xlMzIoMCk7Ci0JZGgtPmRxZGhfZW50cmllcyA9IGNwdV90b19sZTE2KDApOwotCWVyciA9IHdyaXRlX2JsayhpbmZvLCBibGssIGJ1Zik7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JaW5mby0+ZHFpX2ZyZWVfYmxrID0gYmxrOwotCW1hcmtfaW5mb19kaXJ0eShpbmZvLT5kcWlfc2IsIGluZm8tPmRxaV90eXBlKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogUmVtb3ZlIGdpdmVuIGJsb2NrIGZyb20gdGhlIGxpc3Qgb2YgYmxvY2tzIHdpdGggZnJlZSBlbnRyaWVzICovCi1zdGF0aWMgaW50IHJlbW92ZV9mcmVlX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIGRxYnVmX3QgYnVmLCB1aW50IGJsaykKLXsKLQlkcWJ1Zl90IHRtcGJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOwotCXN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKmRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7Ci0JdWludCBuZXh0YmxrID0gbGUzMl90b19jcHUoZGgtPmRxZGhfbmV4dF9mcmVlKTsKLQl1aW50IHByZXZibGsgPSBsZTMyX3RvX2NwdShkaC0+ZHFkaF9wcmV2X2ZyZWUpOwotCWludCBlcnI7Ci0KLQlpZiAoIXRtcGJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKG5leHRibGspIHsKLQkJZXJyID0gcmVhZF9ibGsoaW5mbywgbmV4dGJsaywgdG1wYnVmKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dF9idWY7Ci0JCSgoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKXRtcGJ1ZiktPmRxZGhfcHJldl9mcmVlID0KLQkJCQkJCQlkaC0+ZHFkaF9wcmV2X2ZyZWU7Ci0JCWVyciA9IHdyaXRlX2JsayhpbmZvLCBuZXh0YmxrLCB0bXBidWYpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0X2J1ZjsKLQl9Ci0JaWYgKHByZXZibGspIHsKLQkJZXJyID0gcmVhZF9ibGsoaW5mbywgcHJldmJsaywgdG1wYnVmKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dF9idWY7Ci0JCSgoc3RydWN0IHF0X2Rpc2tfZHFkYmhlYWRlciAqKXRtcGJ1ZiktPmRxZGhfbmV4dF9mcmVlID0KLQkJCQkJCQlkaC0+ZHFkaF9uZXh0X2ZyZWU7Ci0JCWVyciA9IHdyaXRlX2JsayhpbmZvLCBwcmV2YmxrLCB0bXBidWYpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0X2J1ZjsKLQl9IGVsc2UgewotCQlpbmZvLT5kcWlfZnJlZV9lbnRyeSA9IG5leHRibGs7Ci0JCW1hcmtfaW5mb19kaXJ0eShpbmZvLT5kcWlfc2IsIGluZm8tPmRxaV90eXBlKTsKLQl9Ci0JZnJlZWRxYnVmKHRtcGJ1Zik7Ci0JZGgtPmRxZGhfbmV4dF9mcmVlID0gZGgtPmRxZGhfcHJldl9mcmVlID0gY3B1X3RvX2xlMzIoMCk7Ci0JLyogTm8gbWF0dGVyIHdoZXRoZXIgd3JpdGUgc3VjY2VlZHMgYmxvY2sgaXMgb3V0IG9mIGxpc3QgKi8KLQlpZiAod3JpdGVfYmxrKGluZm8sIGJsaywgYnVmKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiVkZTOiBDYW4ndCB3cml0ZSBibG9jayAoJXUpIHdpdGggZnJlZSBlbnRyaWVzLlxuIiwgYmxrKTsKLQlyZXR1cm4gMDsKLW91dF9idWY6Ci0JZnJlZWRxYnVmKHRtcGJ1Zik7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogSW5zZXJ0IGdpdmVuIGJsb2NrIHRvIHRoZSBiZWdpbm5pbmcgb2YgbGlzdCB3aXRoIGZyZWUgZW50cmllcyAqLwotc3RhdGljIGludCBpbnNlcnRfZnJlZV9kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBkcWJ1Zl90IGJ1ZiwgdWludCBibGspCi17Ci0JZHFidWZfdCB0bXBidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKLQlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOwotCWludCBlcnI7Ci0KLQlpZiAoIXRtcGJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZGgtPmRxZGhfbmV4dF9mcmVlID0gY3B1X3RvX2xlMzIoaW5mby0+ZHFpX2ZyZWVfZW50cnkpOwotCWRoLT5kcWRoX3ByZXZfZnJlZSA9IGNwdV90b19sZTMyKDApOwotCWVyciA9IHdyaXRlX2JsayhpbmZvLCBibGssIGJ1Zik7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0X2J1ZjsKLQlpZiAoaW5mby0+ZHFpX2ZyZWVfZW50cnkpIHsKLQkJZXJyID0gcmVhZF9ibGsoaW5mbywgaW5mby0+ZHFpX2ZyZWVfZW50cnksIHRtcGJ1Zik7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBvdXRfYnVmOwotCQkoKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKil0bXBidWYpLT5kcWRoX3ByZXZfZnJlZSA9Ci0JCQkJCQkJY3B1X3RvX2xlMzIoYmxrKTsKLQkJZXJyID0gd3JpdGVfYmxrKGluZm8sIGluZm8tPmRxaV9mcmVlX2VudHJ5LCB0bXBidWYpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gb3V0X2J1ZjsKLQl9Ci0JZnJlZWRxYnVmKHRtcGJ1Zik7Ci0JaW5mby0+ZHFpX2ZyZWVfZW50cnkgPSBibGs7Ci0JbWFya19pbmZvX2RpcnR5KGluZm8tPmRxaV9zYiwgaW5mby0+ZHFpX3R5cGUpOwotCXJldHVybiAwOwotb3V0X2J1ZjoKLQlmcmVlZHFidWYodG1wYnVmKTsKLQlyZXR1cm4gZXJyOwotfQotCi0vKiBJcyB0aGUgZW50cnkgaW4gdGhlIGJsb2NrIGZyZWU/ICovCi1pbnQgcXRyZWVfZW50cnlfdW51c2VkKHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBjaGFyICpkaXNrKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGluZm8tPmRxaV9lbnRyeV9zaXplOyBpKyspCi0JCWlmIChkaXNrW2ldKQotCQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7Ci19Ci1FWFBPUlRfU1lNQk9MKHF0cmVlX2VudHJ5X3VudXNlZCk7Ci0KLS8qIEZpbmQgc3BhY2UgZm9yIGRxdW90ICovCi1zdGF0aWMgdWludCBmaW5kX2ZyZWVfZHFlbnRyeShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywKLQkJCSAgICAgIHN0cnVjdCBkcXVvdCAqZHF1b3QsIGludCAqZXJyKQotewotCXVpbnQgYmxrLCBpOwotCXN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKmRoOwotCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7Ci0JY2hhciAqZGRxdW90OwotCi0JKmVyciA9IDA7Ci0JaWYgKCFidWYpIHsKLQkJKmVyciA9IC1FTk9NRU07Ci0JCXJldHVybiAwOwotCX0KLQlkaCA9IChzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICopYnVmOwotCWlmIChpbmZvLT5kcWlfZnJlZV9lbnRyeSkgewotCQlibGsgPSBpbmZvLT5kcWlfZnJlZV9lbnRyeTsKLQkJKmVyciA9IHJlYWRfYmxrKGluZm8sIGJsaywgYnVmKTsKLQkJaWYgKCplcnIgPCAwKQotCQkJZ290byBvdXRfYnVmOwotCX0gZWxzZSB7Ci0JCWJsayA9IGdldF9mcmVlX2RxYmxrKGluZm8pOwotCQlpZiAoKGludClibGsgPCAwKSB7Ci0JCQkqZXJyID0gYmxrOwotCQkJZnJlZWRxYnVmKGJ1Zik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQltZW1zZXQoYnVmLCAwLCBpbmZvLT5kcWlfdXNhYmxlX2JzKTsKLQkJLyogVGhpcyBpcyBlbm91Z2ggYXMgYmxvY2sgaXMgYWxyZWFkeSB6ZXJvZWQgYW5kIGVudHJ5IGxpc3QgaXMgZW1wdHkuLi4gKi8KLQkJaW5mby0+ZHFpX2ZyZWVfZW50cnkgPSBibGs7Ci0JCW1hcmtfaW5mb19kaXJ0eShkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKTsKLQl9Ci0JLyogQmxvY2sgd2lsbCBiZSBmdWxsPyAqLwotCWlmIChsZTE2X3RvX2NwdShkaC0+ZHFkaF9lbnRyaWVzKSArIDEgPj0gcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pKSB7Ci0JCSplcnIgPSByZW1vdmVfZnJlZV9kcWVudHJ5KGluZm8sIGJ1ZiwgYmxrKTsKLQkJaWYgKCplcnIgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlZGUzogZmluZF9mcmVlX2RxZW50cnkoKTogQ2FuJ3QgIgotCQkJICAgICAgICJyZW1vdmUgYmxvY2sgKCV1KSBmcm9tIGVudHJ5IGZyZWUgbGlzdC5cbiIsCi0JCQkgICAgICAgYmxrKTsKLQkJCWdvdG8gb3V0X2J1ZjsKLQkJfQotCX0KLQlsZTE2X2FkZF9jcHUoJmRoLT5kcWRoX2VudHJpZXMsIDEpOwotCS8qIEZpbmQgZnJlZSBzdHJ1Y3R1cmUgaW4gYmxvY2sgKi8KLQlmb3IgKGkgPSAwLCBkZHF1b3QgPSAoKGNoYXIgKilidWYpICsgc2l6ZW9mKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIpOwotCSAgICAgaSA8IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSAmJiAhcXRyZWVfZW50cnlfdW51c2VkKGluZm8sIGRkcXVvdCk7Ci0JICAgICBpKyssIGRkcXVvdCArPSBpbmZvLT5kcWlfZW50cnlfc2l6ZSk7Ci0jaWZkZWYgX19RVU9UQV9RVF9QQVJBTk9JQQotCWlmIChpID09IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlZGUzogZmluZF9mcmVlX2RxZW50cnkoKTogRGF0YSBibG9jayBmdWxsICIKLQkJCQkiYnV0IGl0IHNob3VsZG4ndC5cbiIpOwotCQkqZXJyID0gLUVJTzsKLQkJZ290byBvdXRfYnVmOwotCX0KLSNlbmRpZgotCSplcnIgPSB3cml0ZV9ibGsoaW5mbywgYmxrLCBidWYpOwotCWlmICgqZXJyIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlZGUzogZmluZF9mcmVlX2RxZW50cnkoKTogQ2FuJ3Qgd3JpdGUgcXVvdGEgIgotCQkJCSJkYXRhIGJsb2NrICV1LlxuIiwgYmxrKTsKLQkJZ290byBvdXRfYnVmOwotCX0KLQlkcXVvdC0+ZHFfb2ZmID0gKGJsayA8PCBpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMpICsKLQkJCXNpemVvZihzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyKSArCi0JCQlpICogaW5mby0+ZHFpX2VudHJ5X3NpemU7Ci0JZnJlZWRxYnVmKGJ1Zik7Ci0JcmV0dXJuIGJsazsKLW91dF9idWY6Ci0JZnJlZWRxYnVmKGJ1Zik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIEluc2VydCByZWZlcmVuY2UgdG8gc3RydWN0dXJlIGludG8gdGhlIHRyaWUgKi8KLXN0YXRpYyBpbnQgZG9faW5zZXJ0X3RyZWUoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QsCi0JCQkgIHVpbnQgKnRyZWVibGssIGludCBkZXB0aCkKLXsKLQlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOwotCWludCByZXQgPSAwLCBuZXdzb24gPSAwLCBuZXdhY3QgPSAwOwotCV9fbGUzMiAqcmVmOwotCXVpbnQgbmV3YmxrOwotCi0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmICghKnRyZWVibGspIHsKLQkJcmV0ID0gZ2V0X2ZyZWVfZHFibGsoaW5mbyk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXRfYnVmOwotCQkqdHJlZWJsayA9IHJldDsKLQkJbWVtc2V0KGJ1ZiwgMCwgaW5mby0+ZHFpX3VzYWJsZV9icyk7Ci0JCW5ld2FjdCA9IDE7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gcmVhZF9ibGsoaW5mbywgKnRyZWVibGssIGJ1Zik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCB0cmVlIHF1b3RhIGJsb2NrICIKLQkJCQkJIiV1LlxuIiwgKnRyZWVibGspOwotCQkJZ290byBvdXRfYnVmOwotCQl9Ci0JfQotCXJlZiA9IChfX2xlMzIgKilidWY7Ci0JbmV3YmxrID0gbGUzMl90b19jcHUocmVmW2dldF9pbmRleChpbmZvLCBkcXVvdC0+ZHFfaWQsIGRlcHRoKV0pOwotCWlmICghbmV3YmxrKQotCQluZXdzb24gPSAxOwotCWlmIChkZXB0aCA9PSBpbmZvLT5kcWlfcXRyZWVfZGVwdGggLSAxKSB7Ci0jaWZkZWYgX19RVU9UQV9RVF9QQVJBTk9JQQotCQlpZiAobmV3YmxrKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlZGUzogSW5zZXJ0aW5nIGFscmVhZHkgcHJlc2VudCBxdW90YSAiCi0JCQkJCSJlbnRyeSAoYmxvY2sgJXUpLlxuIiwKLQkJCSAgICAgICBsZTMyX3RvX2NwdShyZWZbZ2V0X2luZGV4KGluZm8sCi0JCQkJCQlkcXVvdC0+ZHFfaWQsIGRlcHRoKV0pKTsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dF9idWY7Ci0JCX0KLSNlbmRpZgotCQluZXdibGsgPSBmaW5kX2ZyZWVfZHFlbnRyeShpbmZvLCBkcXVvdCwgJnJldCk7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gZG9faW5zZXJ0X3RyZWUoaW5mbywgZHF1b3QsICZuZXdibGssIGRlcHRoKzEpOwotCX0KLQlpZiAobmV3c29uICYmIHJldCA+PSAwKSB7Ci0JCXJlZltnZXRfaW5kZXgoaW5mbywgZHF1b3QtPmRxX2lkLCBkZXB0aCldID0KLQkJCQkJCQljcHVfdG9fbGUzMihuZXdibGspOwotCQlyZXQgPSB3cml0ZV9ibGsoaW5mbywgKnRyZWVibGssIGJ1Zik7Ci0JfSBlbHNlIGlmIChuZXdhY3QgJiYgcmV0IDwgMCkgewotCQlwdXRfZnJlZV9kcWJsayhpbmZvLCBidWYsICp0cmVlYmxrKTsKLQl9Ci1vdXRfYnVmOgotCWZyZWVkcWJ1ZihidWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIFdyYXBwZXIgZm9yIGluc2VydGluZyBxdW90YSBzdHJ1Y3R1cmUgaW50byB0cmVlICovCi1zdGF0aWMgaW5saW5lIGludCBkcV9pbnNlcnRfdHJlZShzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpbnQgdG1wID0gUVRfVFJFRU9GRjsKLQlyZXR1cm4gZG9faW5zZXJ0X3RyZWUoaW5mbywgZHF1b3QsICZ0bXAsIDApOwotfQotCi0vKgotICoJV2UgZG9uJ3QgaGF2ZSB0byBiZSBhZnJhaWQgb2YgZGVhZGxvY2tzIGFzIHdlIG5ldmVyIGhhdmUgcXVvdGFzIG9uIHF1b3RhIGZpbGVzLi4uCi0gKi8KLWludCBxdHJlZV93cml0ZV9kcXVvdChzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpbnQgdHlwZSA9IGRxdW90LT5kcV90eXBlOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkcXVvdC0+ZHFfc2I7Ci0Jc3NpemVfdCByZXQ7Ci0JZHFidWZfdCBkZHF1b3QgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfZW50cnlfc2l6ZSk7Ci0KLQlpZiAoIWRkcXVvdCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBkcV9vZmYgaXMgZ3VhcmRlZCBieSBkcWlvX211dGV4ICovCi0JaWYgKCFkcXVvdC0+ZHFfb2ZmKSB7Ci0JCXJldCA9IGRxX2luc2VydF90cmVlKGluZm8sIGRxdW90KTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBFcnJvciAlemQgb2NjdXJyZWQgd2hpbGUgIgotCQkJCQkiY3JlYXRpbmcgcXVvdGEuXG4iLCByZXQpOwotCQkJZnJlZWRxYnVmKGRkcXVvdCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQlpbmZvLT5kcWlfb3BzLT5tZW0yZGlza19kcWJsayhkZHF1b3QsIGRxdW90KTsKLQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLQlyZXQgPSBzYi0+c19vcC0+cXVvdGFfd3JpdGUoc2IsIHR5cGUsIChjaGFyICopZGRxdW90LAotCQkJCQlpbmZvLT5kcWlfZW50cnlfc2l6ZSwgZHF1b3QtPmRxX29mZik7Ci0JaWYgKHJldCAhPSBpbmZvLT5kcWlfZW50cnlfc2l6ZSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWRlM6IGRxdW90YSB3cml0ZSBmYWlsZWQgb24gZGV2ICVzXG4iLAotCQkgICAgICAgc2ItPnNfaWQpOwotCQlpZiAocmV0ID49IDApCi0JCQlyZXQgPSAtRU5PU1BDOwotCX0gZWxzZSB7Ci0JCXJldCA9IDA7Ci0JfQotCWRxc3RhdHMud3JpdGVzKys7Ci0JZnJlZWRxYnVmKGRkcXVvdCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChxdHJlZV93cml0ZV9kcXVvdCk7Ci0KLS8qIEZyZWUgZHF1b3QgZW50cnkgaW4gZGF0YSBibG9jayAqLwotc3RhdGljIGludCBmcmVlX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QsCi0JCQl1aW50IGJsaykKLXsKLQlzdHJ1Y3QgcXRfZGlza19kcWRiaGVhZGVyICpkaDsKLQlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOwotCWludCByZXQgPSAwOwotCi0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmIChkcXVvdC0+ZHFfb2ZmID4+IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cyAhPSBibGspIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IFF1b3RhIHN0cnVjdHVyZSBoYXMgb2Zmc2V0IHRvIG90aGVyICIKLQkJICAiYmxvY2sgKCV1KSB0aGFuIGl0IHNob3VsZCAoJXUpLlxuIiwgYmxrLAotCQkgICh1aW50KShkcXVvdC0+ZHFfb2ZmID4+IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cykpOwotCQlnb3RvIG91dF9idWY7Ci0JfQotCXJldCA9IHJlYWRfYmxrKGluZm8sIGJsaywgYnVmKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCBxdW90YSBkYXRhIGJsb2NrICV1XG4iLCBibGspOwotCQlnb3RvIG91dF9idWY7Ci0JfQotCWRoID0gKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIgKilidWY7Ci0JbGUxNl9hZGRfY3B1KCZkaC0+ZHFkaF9lbnRyaWVzLCAtMSk7Ci0JaWYgKCFsZTE2X3RvX2NwdShkaC0+ZHFkaF9lbnRyaWVzKSkgewkvKiBCbG9jayBnb3QgZnJlZT8gKi8KLQkJcmV0ID0gcmVtb3ZlX2ZyZWVfZHFlbnRyeShpbmZvLCBidWYsIGJsayk7Ci0JCWlmIChyZXQgPj0gMCkKLQkJCXJldCA9IHB1dF9mcmVlX2RxYmxrKGluZm8sIGJ1ZiwgYmxrKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBDYW4ndCBtb3ZlIHF1b3RhIGRhdGEgYmxvY2sgKCV1KSAiCi0JCQkgICJ0byBmcmVlIGxpc3QuXG4iLCBibGspOwotCQkJZ290byBvdXRfYnVmOwotCQl9Ci0JfSBlbHNlIHsKLQkJbWVtc2V0KGJ1ZiArCi0JCSAgICAgICAoZHF1b3QtPmRxX29mZiAmICgoMSA8PCBpbmZvLT5kcWlfYmxvY2tzaXplX2JpdHMpIC0gMSkpLAotCQkgICAgICAgMCwgaW5mby0+ZHFpX2VudHJ5X3NpemUpOwotCQlpZiAobGUxNl90b19jcHUoZGgtPmRxZGhfZW50cmllcykgPT0KLQkJICAgIHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSAtIDEpIHsKLQkJCS8qIEluc2VydCB3aWxsIHdyaXRlIGJsb2NrIGl0c2VsZiAqLwotCQkJcmV0ID0gaW5zZXJ0X2ZyZWVfZHFlbnRyeShpbmZvLCBidWYsIGJsayk7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiVkZTOiBDYW4ndCBpbnNlcnQgcXVvdGEgZGF0YSAiCi0JCQkJICAgICAgICJibG9jayAoJXUpIHRvIGZyZWUgZW50cnkgbGlzdC5cbiIsIGJsayk7Ci0JCQkJZ290byBvdXRfYnVmOwotCQkJfQotCQl9IGVsc2UgewotCQkJcmV0ID0gd3JpdGVfYmxrKGluZm8sIGJsaywgYnVmKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IENhbid0IHdyaXRlIHF1b3RhIGRhdGEgIgotCQkJCSAgImJsb2NrICV1XG4iLCBibGspOwotCQkJCWdvdG8gb3V0X2J1ZjsKLQkJCX0KLQkJfQotCX0KLQlkcXVvdC0+ZHFfb2ZmID0gMDsJLyogUXVvdGEgaXMgbm93IHVuYXR0YWNoZWQgKi8KLW91dF9idWY6Ci0JZnJlZWRxYnVmKGJ1Zik7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogUmVtb3ZlIHJlZmVyZW5jZSB0byBkcXVvdCBmcm9tIHRyZWUgKi8KLXN0YXRpYyBpbnQgcmVtb3ZlX3RyZWUoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sIHN0cnVjdCBkcXVvdCAqZHF1b3QsCi0JCSAgICAgICB1aW50ICpibGssIGludCBkZXB0aCkKLXsKLQlkcWJ1Zl90IGJ1ZiA9IGdldGRxYnVmKGluZm8tPmRxaV91c2FibGVfYnMpOwotCWludCByZXQgPSAwOwotCXVpbnQgbmV3YmxrOwotCV9fbGUzMiAqcmVmID0gKF9fbGUzMiAqKWJ1ZjsKLQotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSByZWFkX2JsayhpbmZvLCAqYmxrLCBidWYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVkZTOiBDYW4ndCByZWFkIHF1b3RhIGRhdGEgYmxvY2sgJXVcbiIsICpibGspOwotCQlnb3RvIG91dF9idWY7Ci0JfQotCW5ld2JsayA9IGxlMzJfdG9fY3B1KHJlZltnZXRfaW5kZXgoaW5mbywgZHF1b3QtPmRxX2lkLCBkZXB0aCldKTsKLQlpZiAoZGVwdGggPT0gaW5mby0+ZHFpX3F0cmVlX2RlcHRoIC0gMSkgewotCQlyZXQgPSBmcmVlX2RxZW50cnkoaW5mbywgZHF1b3QsIG5ld2Jsayk7Ci0JCW5ld2JsayA9IDA7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gcmVtb3ZlX3RyZWUoaW5mbywgZHF1b3QsICZuZXdibGssIGRlcHRoKzEpOwotCX0KLQlpZiAocmV0ID49IDAgJiYgIW5ld2JsaykgewotCQlpbnQgaTsKLQkJcmVmW2dldF9pbmRleChpbmZvLCBkcXVvdC0+ZHFfaWQsIGRlcHRoKV0gPSBjcHVfdG9fbGUzMigwKTsKLQkJLyogQmxvY2sgZ290IGVtcHR5PyAqLwotCQlmb3IgKGkgPSAwOwotCQkgICAgIGkgPCAoaW5mby0+ZHFpX3VzYWJsZV9icyA+PiAyKSAmJiAhcmVmW2ldOwotCQkgICAgIGkrKyk7Ci0JCS8qIERvbid0IHB1dCB0aGUgcm9vdCBibG9jayBpbnRvIHRoZSBmcmVlIGJsb2NrIGxpc3QgKi8KLQkJaWYgKGkgPT0gKGluZm8tPmRxaV91c2FibGVfYnMgPj4gMikKLQkJICAgICYmICpibGsgIT0gUVRfVFJFRU9GRikgewotCQkJcHV0X2ZyZWVfZHFibGsoaW5mbywgYnVmLCAqYmxrKTsKLQkJCSpibGsgPSAwOwotCQl9IGVsc2UgewotCQkJcmV0ID0gd3JpdGVfYmxrKGluZm8sICpibGssIGJ1Zik7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3Qgd3JpdGUgcXVvdGEgdHJlZSAiCi0JCQkJICAiYmxvY2sgJXUuXG4iLCAqYmxrKTsKLQkJfQotCX0KLW91dF9idWY6Ci0JZnJlZWRxYnVmKGJ1Zik7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogRGVsZXRlIGRxdW90IGZyb20gdHJlZSAqLwotaW50IHF0cmVlX2RlbGV0ZV9kcXVvdChzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQl1aW50IHRtcCA9IFFUX1RSRUVPRkY7Ci0KLQlpZiAoIWRxdW90LT5kcV9vZmYpCS8qIEV2ZW4gbm90IGFsbG9jYXRlZD8gKi8KLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIHJlbW92ZV90cmVlKGluZm8sIGRxdW90LCAmdG1wLCAwKTsKLX0KLUVYUE9SVF9TWU1CT0wocXRyZWVfZGVsZXRlX2RxdW90KTsKLQotLyogRmluZCBlbnRyeSBpbiBibG9jayAqLwotc3RhdGljIGxvZmZfdCBmaW5kX2Jsb2NrX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sCi0JCQkJIHN0cnVjdCBkcXVvdCAqZHF1b3QsIHVpbnQgYmxrKQotewotCWRxYnVmX3QgYnVmID0gZ2V0ZHFidWYoaW5mby0+ZHFpX3VzYWJsZV9icyk7Ci0JbG9mZl90IHJldCA9IDA7Ci0JaW50IGk7Ci0JY2hhciAqZGRxdW90OwotCi0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCXJldCA9IHJlYWRfYmxrKGluZm8sIGJsaywgYnVmKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCBxdW90YSB0cmVlIGJsb2NrICV1LlxuIiwgYmxrKTsKLQkJZ290byBvdXRfYnVmOwotCX0KLQlmb3IgKGkgPSAwLCBkZHF1b3QgPSAoKGNoYXIgKilidWYpICsgc2l6ZW9mKHN0cnVjdCBxdF9kaXNrX2RxZGJoZWFkZXIpOwotCSAgICAgaSA8IHF0cmVlX2Rxc3RyX2luX2JsayhpbmZvKSAmJiAhaW5mby0+ZHFpX29wcy0+aXNfaWQoZGRxdW90LCBkcXVvdCk7Ci0JICAgICBpKyssIGRkcXVvdCArPSBpbmZvLT5kcWlfZW50cnlfc2l6ZSk7Ci0JaWYgKGkgPT0gcXRyZWVfZHFzdHJfaW5fYmxrKGluZm8pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVkZTOiBRdW90YSBmb3IgaWQgJXUgcmVmZXJlbmNlZCAiCi0JCSAgImJ1dCBub3QgcHJlc2VudC5cbiIsIGRxdW90LT5kcV9pZCk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0X2J1ZjsKLQl9IGVsc2UgewotCQlyZXQgPSAoYmxrIDw8IGluZm8tPmRxaV9ibG9ja3NpemVfYml0cykgKyBzaXplb2Yoc3RydWN0Ci0JCSAgcXRfZGlza19kcWRiaGVhZGVyKSArIGkgKiBpbmZvLT5kcWlfZW50cnlfc2l6ZTsKLQl9Ci1vdXRfYnVmOgotCWZyZWVkcWJ1ZihidWYpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIEZpbmQgZW50cnkgZm9yIGdpdmVuIGlkIGluIHRoZSB0cmVlICovCi1zdGF0aWMgbG9mZl90IGZpbmRfdHJlZV9kcWVudHJ5KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLAotCQkJCXN0cnVjdCBkcXVvdCAqZHF1b3QsIHVpbnQgYmxrLCBpbnQgZGVwdGgpCi17Ci0JZHFidWZfdCBidWYgPSBnZXRkcWJ1ZihpbmZvLT5kcWlfdXNhYmxlX2JzKTsKLQlsb2ZmX3QgcmV0ID0gMDsKLQlfX2xlMzIgKnJlZiA9IChfX2xlMzIgKilidWY7Ci0KLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0ID0gcmVhZF9ibGsoaW5mbywgYmxrLCBidWYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVkZTOiBDYW4ndCByZWFkIHF1b3RhIHRyZWUgYmxvY2sgJXUuXG4iLCBibGspOwotCQlnb3RvIG91dF9idWY7Ci0JfQotCXJldCA9IDA7Ci0JYmxrID0gbGUzMl90b19jcHUocmVmW2dldF9pbmRleChpbmZvLCBkcXVvdC0+ZHFfaWQsIGRlcHRoKV0pOwotCWlmICghYmxrKQkvKiBObyByZWZlcmVuY2U/ICovCi0JCWdvdG8gb3V0X2J1ZjsKLQlpZiAoZGVwdGggPCBpbmZvLT5kcWlfcXRyZWVfZGVwdGggLSAxKQotCQlyZXQgPSBmaW5kX3RyZWVfZHFlbnRyeShpbmZvLCBkcXVvdCwgYmxrLCBkZXB0aCsxKTsKLQllbHNlCi0JCXJldCA9IGZpbmRfYmxvY2tfZHFlbnRyeShpbmZvLCBkcXVvdCwgYmxrKTsKLW91dF9idWY6Ci0JZnJlZWRxYnVmKGJ1Zik7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogRmluZCBlbnRyeSBmb3IgZ2l2ZW4gaWQgaW4gdGhlIHRyZWUgLSB3cmFwcGVyIGZ1bmN0aW9uICovCi1zdGF0aWMgaW5saW5lIGxvZmZfdCBmaW5kX2RxZW50cnkoc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8sCi0JCQkJICBzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCXJldHVybiBmaW5kX3RyZWVfZHFlbnRyeShpbmZvLCBkcXVvdCwgUVRfVFJFRU9GRiwgMCk7Ci19Ci0KLWludCBxdHJlZV9yZWFkX2RxdW90KHN0cnVjdCBxdHJlZV9tZW1fZHFpbmZvICppbmZvLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCWludCB0eXBlID0gZHF1b3QtPmRxX3R5cGU7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRxdW90LT5kcV9zYjsKLQlsb2ZmX3Qgb2Zmc2V0OwotCWRxYnVmX3QgZGRxdW90OwotCWludCByZXQgPSAwOwotCi0jaWZkZWYgX19RVU9UQV9RVF9QQVJBTk9JQQotCS8qIEludmFsaWRhdGVkIHF1b3RhPyAqLwotCWlmICghc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+ZmlsZXNbdHlwZV0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJWRlM6IFF1b3RhIGludmFsaWRhdGVkIHdoaWxlIHJlYWRpbmchXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotI2VuZGlmCi0JLyogRG8gd2Uga25vdyBvZmZzZXQgb2YgdGhlIGRxdW90IGVudHJ5IGluIHRoZSBxdW90YSBmaWxlPyAqLwotCWlmICghZHF1b3QtPmRxX29mZikgewotCQlvZmZzZXQgPSBmaW5kX2RxZW50cnkoaW5mbywgZHF1b3QpOwotCQlpZiAob2Zmc2V0IDw9IDApIHsJLyogRW50cnkgbm90IHByZXNlbnQ/ICovCi0JCQlpZiAob2Zmc2V0IDwgMCkKLQkJCQlwcmludGsoS0VSTl9FUlIgIlZGUzogQ2FuJ3QgcmVhZCBxdW90YSAiCi0JCQkJICAic3RydWN0dXJlIGZvciBpZCAldS5cbiIsIGRxdW90LT5kcV9pZCk7Ci0JCQlkcXVvdC0+ZHFfb2ZmID0gMDsKLQkJCXNldF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQkJCW1lbXNldCgmZHF1b3QtPmRxX2RxYiwgMCwgc2l6ZW9mKHN0cnVjdCBtZW1fZHFibGspKTsKLQkJCXJldCA9IG9mZnNldDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWRxdW90LT5kcV9vZmYgPSBvZmZzZXQ7Ci0JfQotCWRkcXVvdCA9IGdldGRxYnVmKGluZm8tPmRxaV9lbnRyeV9zaXplKTsKLQlpZiAoIWRkcXVvdCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0ID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopZGRxdW90LAotCQkJCSAgIGluZm8tPmRxaV9lbnRyeV9zaXplLCBkcXVvdC0+ZHFfb2ZmKTsKLQlpZiAocmV0ICE9IGluZm8tPmRxaV9lbnRyeV9zaXplKSB7Ci0JCWlmIChyZXQgPj0gMCkKLQkJCXJldCA9IC1FSU87Ci0JCXByaW50ayhLRVJOX0VSUiAiVkZTOiBFcnJvciB3aGlsZSByZWFkaW5nIHF1b3RhICIKLQkJCQkic3RydWN0dXJlIGZvciBpZCAldS5cbiIsIGRxdW90LT5kcV9pZCk7Ci0JCXNldF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQkJbWVtc2V0KCZkcXVvdC0+ZHFfZHFiLCAwLCBzaXplb2Yoc3RydWN0IG1lbV9kcWJsaykpOwotCQlmcmVlZHFidWYoZGRxdW90KTsKLQkJZ290byBvdXQ7Ci0JfQotCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQlpbmZvLT5kcWlfb3BzLT5kaXNrMm1lbV9kcWJsayhkcXVvdCwgZGRxdW90KTsKLQlpZiAoIWRxdW90LT5kcV9kcWIuZHFiX2JoYXJkbGltaXQgJiYKLQkgICAgIWRxdW90LT5kcV9kcWIuZHFiX2Jzb2Z0bGltaXQgJiYKLQkgICAgIWRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQgJiYKLQkgICAgIWRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQpCi0JCXNldF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLQlmcmVlZHFidWYoZGRxdW90KTsKLW91dDoKLQlkcXN0YXRzLnJlYWRzKys7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wocXRyZWVfcmVhZF9kcXVvdCk7Ci0KLS8qIENoZWNrIHdoZXRoZXIgZHF1b3Qgc2hvdWxkIG5vdCBiZSBkZWxldGVkLiBXZSBrbm93IHdlIGFyZQotICogdGhlIG9ubHkgb25lIG9wZXJhdGluZyBvbiBkcXVvdCAodGhhbmtzIHRvIGRxX2xvY2spICovCi1pbnQgcXRyZWVfcmVsZWFzZV9kcXVvdChzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqaW5mbywgc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpZiAodGVzdF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSAmJiAhKGRxdW90LT5kcV9kcWIuZHFiX2N1cmlub2RlcyB8IGRxdW90LT5kcV9kcWIuZHFiX2N1cnNwYWNlKSkKLQkJcmV0dXJuIHF0cmVlX2RlbGV0ZV9kcXVvdChpbmZvLCBkcXVvdCk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKHF0cmVlX3JlbGVhc2VfZHF1b3QpOwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGFfdjEuYyBiL2ZzL3F1b3RhX3YxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0YWYxYzYuLjAwMDAwMDAKLS0tIGEvZnMvcXVvdGFfdjEuYworKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3F1b3RhLmg+Ci0jaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9kcWJsa192MS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLQotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQotI2luY2x1ZGUgInF1b3RhaW9fdjEuaCIKLQotTU9EVUxFX0FVVEhPUigiSmFuIEthcmEiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiT2xkIHF1b3RhIGZvcm1hdCBzdXBwb3J0Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNkZWZpbmUgUVVPVEFCTE9DS19CSVRTIDEwCi0jZGVmaW5lIFFVT1RBQkxPQ0tfU0laRSAoMSA8PCBRVU9UQUJMT0NLX0JJVFMpCi0KLXN0YXRpYyBpbmxpbmUgcXNpemVfdCB2MV9zdG9xYihxc2l6ZV90IHNwYWNlKQotewotCXJldHVybiAoc3BhY2UgKyBRVU9UQUJMT0NLX1NJWkUgLSAxKSA+PiBRVU9UQUJMT0NLX0JJVFM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcXNpemVfdCB2MV9xYnRvcyhxc2l6ZV90IGJsb2NrcykKLXsKLQlyZXR1cm4gYmxvY2tzIDw8IFFVT1RBQkxPQ0tfQklUUzsKLX0KLQotc3RhdGljIHZvaWQgdjFfZGlzazJtZW1fZHFibGsoc3RydWN0IG1lbV9kcWJsayAqbSwgc3RydWN0IHYxX2Rpc2tfZHFibGsgKmQpCi17Ci0JbS0+ZHFiX2loYXJkbGltaXQgPSBkLT5kcWJfaWhhcmRsaW1pdDsKLQltLT5kcWJfaXNvZnRsaW1pdCA9IGQtPmRxYl9pc29mdGxpbWl0OwotCW0tPmRxYl9jdXJpbm9kZXMgPSBkLT5kcWJfY3VyaW5vZGVzOwotCW0tPmRxYl9iaGFyZGxpbWl0ID0gdjFfcWJ0b3MoZC0+ZHFiX2JoYXJkbGltaXQpOwotCW0tPmRxYl9ic29mdGxpbWl0ID0gdjFfcWJ0b3MoZC0+ZHFiX2Jzb2Z0bGltaXQpOwotCW0tPmRxYl9jdXJzcGFjZSA9IHYxX3FidG9zKGQtPmRxYl9jdXJibG9ja3MpOwotCW0tPmRxYl9pdGltZSA9IGQtPmRxYl9pdGltZTsKLQltLT5kcWJfYnRpbWUgPSBkLT5kcWJfYnRpbWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHYxX21lbTJkaXNrX2RxYmxrKHN0cnVjdCB2MV9kaXNrX2RxYmxrICpkLCBzdHJ1Y3QgbWVtX2RxYmxrICptKQotewotCWQtPmRxYl9paGFyZGxpbWl0ID0gbS0+ZHFiX2loYXJkbGltaXQ7Ci0JZC0+ZHFiX2lzb2Z0bGltaXQgPSBtLT5kcWJfaXNvZnRsaW1pdDsKLQlkLT5kcWJfY3VyaW5vZGVzID0gbS0+ZHFiX2N1cmlub2RlczsKLQlkLT5kcWJfYmhhcmRsaW1pdCA9IHYxX3N0b3FiKG0tPmRxYl9iaGFyZGxpbWl0KTsKLQlkLT5kcWJfYnNvZnRsaW1pdCA9IHYxX3N0b3FiKG0tPmRxYl9ic29mdGxpbWl0KTsKLQlkLT5kcWJfY3VyYmxvY2tzID0gdjFfc3RvcWIobS0+ZHFiX2N1cnNwYWNlKTsKLQlkLT5kcWJfaXRpbWUgPSBtLT5kcWJfaXRpbWU7Ci0JZC0+ZHFiX2J0aW1lID0gbS0+ZHFiX2J0aW1lOwotfQotCi1zdGF0aWMgaW50IHYxX3JlYWRfZHFibGsoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlpbnQgdHlwZSA9IGRxdW90LT5kcV90eXBlOwotCXN0cnVjdCB2MV9kaXNrX2RxYmxrIGRxYmxrOwotCi0JaWYgKCFzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5maWxlc1t0eXBlXSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBTZXQgc3RydWN0dXJlIHRvIDBzIGluIGNhc2UgcmVhZCBmYWlscy9pcyBhZnRlciBlbmQgb2YgZmlsZSAqLwotCW1lbXNldCgmZHFibGssIDAsIHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpOwotCWRxdW90LT5kcV9zYi0+c19vcC0+cXVvdGFfcmVhZChkcXVvdC0+ZHFfc2IsIHR5cGUsIChjaGFyICopJmRxYmxrLCBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspLCB2MV9kcW9mZihkcXVvdC0+ZHFfaWQpKTsKLQotCXYxX2Rpc2sybWVtX2RxYmxrKCZkcXVvdC0+ZHFfZHFiLCAmZHFibGspOwotCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9iaGFyZGxpbWl0ID09IDAgJiYgZHF1b3QtPmRxX2RxYi5kcWJfYnNvZnRsaW1pdCA9PSAwICYmCi0JICAgIGRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQgPT0gMCAmJiBkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0ID09IDApCi0JCXNldF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQlkcXN0YXRzLnJlYWRzKys7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2MV9jb21taXRfZHFibGsoc3RydWN0IGRxdW90ICpkcXVvdCkKLXsKLQlzaG9ydCB0eXBlID0gZHF1b3QtPmRxX3R5cGU7Ci0Jc3NpemVfdCByZXQ7Ci0Jc3RydWN0IHYxX2Rpc2tfZHFibGsgZHFibGs7Ci0KLQl2MV9tZW0yZGlza19kcWJsaygmZHFibGssICZkcXVvdC0+ZHFfZHFiKTsKLQlpZiAoZHF1b3QtPmRxX2lkID09IDApIHsKLQkJZHFibGsuZHFiX2J0aW1lID0gc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+aW5mb1t0eXBlXS5kcWlfYmdyYWNlOwotCQlkcWJsay5kcWJfaXRpbWUgPSBzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5pbmZvW3R5cGVdLmRxaV9pZ3JhY2U7Ci0JfQotCXJldCA9IDA7Ci0JaWYgKHNiX2Rxb3B0KGRxdW90LT5kcV9zYiktPmZpbGVzW3R5cGVdKQotCQlyZXQgPSBkcXVvdC0+ZHFfc2ItPnNfb3AtPnF1b3RhX3dyaXRlKGRxdW90LT5kcV9zYiwgdHlwZSwgKGNoYXIgKikmZHFibGssCi0JCQkJCXNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksIHYxX2Rxb2ZmKGRxdW90LT5kcV9pZCkpOwotCWlmIChyZXQgIT0gc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJWRlM6IGRxdW90YSB3cml0ZSBmYWlsZWQgb24gZGV2ICVzXG4iLAotCQkJZHF1b3QtPmRxX3NiLT5zX2lkKTsKLQkJaWYgKHJldCA+PSAwKQotCQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCXJldCA9IDA7Ci0KLW91dDoKLQlkcXN0YXRzLndyaXRlcysrOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogTWFnaWNzIG9mIG5ldyBxdW90YSBmb3JtYXQgKi8KLSNkZWZpbmUgVjJfSU5JVFFNQUdJQ1Mge1wKLQkweGQ5YzAxZjExLCAgICAgLyogVVNSUVVPVEEgKi9cCi0JMHhkOWMwMTkyNyAgICAgIC8qIEdSUFFVT1RBICovXAotfQotCi0vKiBIZWFkZXIgb2YgbmV3IHF1b3RhIGZvcm1hdCAqLwotc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIgewotCV9fbGUzMiBkcWhfbWFnaWM7ICAgICAgICAvKiBNYWdpYyBudW1iZXIgaWRlbnRpZnlpbmcgZmlsZSAqLwotCV9fbGUzMiBkcWhfdmVyc2lvbjsgICAgICAvKiBGaWxlIHZlcnNpb24gKi8KLX07Ci0KLXN0YXRpYyBpbnQgdjFfY2hlY2tfcXVvdGFfZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gc2JfZHFvcHQoc2IpLT5maWxlc1t0eXBlXTsKLQl1bG9uZyBibG9ja3M7Ci0Jc2l6ZV90IG9mZjsgCi0Jc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIgZHFoZWFkOwotCXNzaXplX3Qgc2l6ZTsKLQlsb2ZmX3QgaXNpemU7Ci0Jc3RhdGljIGNvbnN0IHVpbnQgcXVvdGFfbWFnaWNzW10gPSBWMl9JTklUUU1BR0lDUzsKLQotCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCWlmICghaXNpemUpCi0JCXJldHVybiAwOwotCWJsb2NrcyA9IGlzaXplID4+IEJMT0NLX1NJWkVfQklUUzsKLQlvZmYgPSBpc2l6ZSAmIChCTE9DS19TSVpFIC0gMSk7Ci0JaWYgKChibG9ja3MgJSBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspICogQkxPQ0tfU0laRSArIG9mZikgJSBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspKQotCQlyZXR1cm4gMDsKLQkvKiBEb3VibGVjaGVjayB3aGV0aGVyIHdlIGRpZG4ndCBnZXQgZmlsZSB3aXRoIG5ldyBmb3JtYXQgLSB3aXRoIG9sZCBxdW90YWN0bCgpIHRoaXMgY291bGQgaGFwcGVuICovCi0Jc2l6ZSA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkcWhlYWQsIHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlciksIDApOwotCWlmIChzaXplICE9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWhlYWRlcikpCi0JCXJldHVybiAxOwkvKiBQcm9iYWJseSBub3QgbmV3IGZvcm1hdCAqLwotCWlmIChsZTMyX3RvX2NwdShkcWhlYWQuZHFoX21hZ2ljKSAhPSBxdW90YV9tYWdpY3NbdHlwZV0pCi0JCXJldHVybiAxOwkvKiBEZWZpbml0ZWx5IG5vdCBuZXcgZm9ybWF0ICovCi0JcHJpbnRrKEtFUk5fSU5GTyAiVkZTOiAlczogUmVmdXNpbmcgdG8gdHVybiBvbiBvbGQgcXVvdGEgZm9ybWF0IG9uIGdpdmVuIGZpbGUuIEl0IHByb2JhYmx5IGNvbnRhaW5zIG5ld2VyIHF1b3RhIGZvcm1hdC5cbiIsIHNiLT5zX2lkKTsKLSAgICAgICAgcmV0dXJuIDA7CQkvKiBTZWVtcyBsaWtlIGEgbmV3IGZvcm1hdCBmaWxlIC0+IHJlZnVzZSBpdCAqLwotfQotCi1zdGF0aWMgaW50IHYxX3JlYWRfZmlsZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKLQlzdHJ1Y3QgdjFfZGlza19kcWJsayBkcWJsazsKLQlpbnQgcmV0OwotCi0JaWYgKChyZXQgPSBzYi0+c19vcC0+cXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKikmZHFibGssIHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksIHYxX2Rxb2ZmKDApKSkgIT0gc2l6ZW9mKHN0cnVjdCB2MV9kaXNrX2RxYmxrKSkgewotCQlpZiAocmV0ID49IDApCi0JCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0JcmV0ID0gMDsKLQkvKiBsaW1pdHMgYXJlIHN0b3JlZCBhcyB1bnNpZ25lZCAzMi1iaXQgZGF0YSAqLwotCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9tYXhibGltaXQgPSAweGZmZmZmZmZmOwotCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9tYXhpbGltaXQgPSAweGZmZmZmZmZmOwotCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9pZ3JhY2UgPSBkcWJsay5kcWJfaXRpbWUgPyBkcWJsay5kcWJfaXRpbWUgOiBNQVhfSVFfVElNRTsKLQlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfYmdyYWNlID0gZHFibGsuZHFiX2J0aW1lID8gZHFibGsuZHFiX2J0aW1lIDogTUFYX0RRX1RJTUU7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB2MV93cml0ZV9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IHF1b3RhX2luZm8gKmRxb3B0ID0gc2JfZHFvcHQoc2IpOwotCXN0cnVjdCB2MV9kaXNrX2RxYmxrIGRxYmxrOwotCWludCByZXQ7Ci0KLQlkcW9wdC0+aW5mb1t0eXBlXS5kcWlfZmxhZ3MgJj0gfkRRRl9JTkZPX0RJUlRZOwotCWlmICgocmV0ID0gc2ItPnNfb3AtPnF1b3RhX3JlYWQoc2IsIHR5cGUsIChjaGFyICopJmRxYmxrLAotCSAgICBzaXplb2Yoc3RydWN0IHYxX2Rpc2tfZHFibGspLCB2MV9kcW9mZigwKSkpICE9IHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpIHsKLQkJaWYgKHJldCA+PSAwKQotCQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCWRxYmxrLmRxYl9pdGltZSA9IGRxb3B0LT5pbmZvW3R5cGVdLmRxaV9pZ3JhY2U7Ci0JZHFibGsuZHFiX2J0aW1lID0gZHFvcHQtPmluZm9bdHlwZV0uZHFpX2JncmFjZTsKLQlyZXQgPSBzYi0+c19vcC0+cXVvdGFfd3JpdGUoc2IsIHR5cGUsIChjaGFyICopJmRxYmxrLAotCSAgICAgIHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsayksIHYxX2Rxb2ZmKDApKTsKLQlpZiAocmV0ID09IHNpemVvZihzdHJ1Y3QgdjFfZGlza19kcWJsaykpCi0JCXJldCA9IDA7Ci0JZWxzZSBpZiAocmV0ID4gMCkKLQkJcmV0ID0gLUVJTzsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IHF1b3RhX2Zvcm1hdF9vcHMgdjFfZm9ybWF0X29wcyA9IHsKLQkuY2hlY2tfcXVvdGFfZmlsZQk9IHYxX2NoZWNrX3F1b3RhX2ZpbGUsCi0JLnJlYWRfZmlsZV9pbmZvCQk9IHYxX3JlYWRfZmlsZV9pbmZvLAotCS53cml0ZV9maWxlX2luZm8JPSB2MV93cml0ZV9maWxlX2luZm8sCi0JLmZyZWVfZmlsZV9pbmZvCQk9IE5VTEwsCi0JLnJlYWRfZHFibGsJCT0gdjFfcmVhZF9kcWJsaywKLQkuY29tbWl0X2RxYmxrCQk9IHYxX2NvbW1pdF9kcWJsaywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcXVvdGFfZm9ybWF0X3R5cGUgdjFfcXVvdGFfZm9ybWF0ID0gewotCS5xZl9mbXRfaWQJPSBRRk1UX1ZGU19PTEQsCi0JLnFmX29wcwkJPSAmdjFfZm9ybWF0X29wcywKLQkucWZfb3duZXIJPSBUSElTX01PRFVMRQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF92MV9xdW90YV9mb3JtYXQodm9pZCkKLXsKLSAgICAgICAgcmV0dXJuIHJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCgmdjFfcXVvdGFfZm9ybWF0KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGV4aXRfdjFfcXVvdGFfZm9ybWF0KHZvaWQpCi17Ci0gICAgICAgIHVucmVnaXN0ZXJfcXVvdGFfZm9ybWF0KCZ2MV9xdW90YV9mb3JtYXQpOwotfQotCi1tb2R1bGVfaW5pdChpbml0X3YxX3F1b3RhX2Zvcm1hdCk7Ci1tb2R1bGVfZXhpdChleGl0X3YxX3F1b3RhX2Zvcm1hdCk7Ci0KZGlmZiAtLWdpdCBhL2ZzL3F1b3RhX3YyLmMgYi9mcy9xdW90YV92Mi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjE4YjU2Li4wMDAwMDAwCi0tLSBhL2ZzL3F1b3RhX3YyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzYgKzAsMCBAQAotLyoKLSAqCXZmc3YwIHF1b3RhIElPIG9wZXJhdGlvbnMgb24gZmlsZQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW91bnQuaD4KLSNpbmNsdWRlIDxsaW51eC9kcWJsa192Mi5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KLQotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQotI2luY2x1ZGUgInF1b3RhX3RyZWUuaCIKLSNpbmNsdWRlICJxdW90YWlvX3YyLmgiCi0KLU1PRFVMRV9BVVRIT1IoIkphbiBLYXJhIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlF1b3RhIGZvcm1hdCB2MiBzdXBwb3J0Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLSNkZWZpbmUgX19RVU9UQV9WMl9QQVJBTk9JQQotCi1zdGF0aWMgdm9pZCB2Ml9tZW0yZGlza2RxYih2b2lkICpkcCwgc3RydWN0IGRxdW90ICpkcXVvdCk7Ci1zdGF0aWMgdm9pZCB2Ml9kaXNrMm1lbWRxYihzdHJ1Y3QgZHF1b3QgKmRxdW90LCB2b2lkICpkcCk7Ci1zdGF0aWMgaW50IHYyX2lzX2lkKHZvaWQgKmRwLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKLQotc3RhdGljIHN0cnVjdCBxdHJlZV9mbXRfb3BlcmF0aW9ucyB2Ml9xdHJlZV9vcHMgPSB7Ci0JLm1lbTJkaXNrX2RxYmxrID0gdjJfbWVtMmRpc2tkcWIsCi0JLmRpc2sybWVtX2RxYmxrID0gdjJfZGlzazJtZW1kcWIsCi0JLmlzX2lkID0gdjJfaXNfaWQsCi19OwotCi0jZGVmaW5lIFFVT1RBQkxPQ0tfQklUUyAxMAotI2RlZmluZSBRVU9UQUJMT0NLX1NJWkUgKDEgPDwgUVVPVEFCTE9DS19CSVRTKQotCi1zdGF0aWMgaW5saW5lIHFzaXplX3QgdjJfc3RvcWIocXNpemVfdCBzcGFjZSkKLXsKLQlyZXR1cm4gKHNwYWNlICsgUVVPVEFCTE9DS19TSVpFIC0gMSkgPj4gUVVPVEFCTE9DS19CSVRTOwotfQotCi1zdGF0aWMgaW5saW5lIHFzaXplX3QgdjJfcWJ0b3MocXNpemVfdCBibG9ja3MpCi17Ci0JcmV0dXJuIGJsb2NrcyA8PCBRVU9UQUJMT0NLX0JJVFM7Ci19Ci0KLS8qIENoZWNrIHdoZXRoZXIgZ2l2ZW4gZmlsZSBpcyByZWFsbHkgdmZzdjAgcXVvdGFmaWxlICovCi1zdGF0aWMgaW50IHYyX2NoZWNrX3F1b3RhX2ZpbGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIgZHFoZWFkOwotCXNzaXplX3Qgc2l6ZTsKLQlzdGF0aWMgY29uc3QgdWludCBxdW90YV9tYWdpY3NbXSA9IFYyX0lOSVRRTUFHSUNTOwotCXN0YXRpYyBjb25zdCB1aW50IHF1b3RhX3ZlcnNpb25zW10gPSBWMl9JTklUUVZFUlNJT05TOwotIAotCXNpemUgPSBzYi0+c19vcC0+cXVvdGFfcmVhZChzYiwgdHlwZSwgKGNoYXIgKikmZHFoZWFkLCBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpLCAwKTsKLQlpZiAoc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFoZWFkZXIpKSB7Ci0JCXByaW50aygicXVvdGFfdjI6IGZhaWxlZCByZWFkIGV4cGVjdGVkPSV6ZCBnb3Q9JXpkXG4iLAotCQkJc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaGVhZGVyKSwgc2l6ZSk7Ci0JCXJldHVybiAwOwotCX0KLQlpZiAobGUzMl90b19jcHUoZHFoZWFkLmRxaF9tYWdpYykgIT0gcXVvdGFfbWFnaWNzW3R5cGVdIHx8Ci0JICAgIGxlMzJfdG9fY3B1KGRxaGVhZC5kcWhfdmVyc2lvbikgIT0gcXVvdGFfdmVyc2lvbnNbdHlwZV0pCi0JCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCi0vKiBSZWFkIGluZm9ybWF0aW9uIGhlYWRlciBmcm9tIHF1b3RhIGZpbGUgKi8KLXN0YXRpYyBpbnQgdjJfcmVhZF9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRpbmZvOwotCXN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gc2JfZHFpbmZvKHNiLCB0eXBlKTsKLQlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqcWluZm87Ci0Jc3NpemVfdCBzaXplOwotCi0Jc2l6ZSA9IHNiLT5zX29wLT5xdW90YV9yZWFkKHNiLCB0eXBlLCAoY2hhciAqKSZkaW5mbywKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7Ci0JaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbykpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgcmVhZCBpbmZvIHN0cnVjdHVyZSBvbiBkZXZpY2UgJXMuXG4iLAotCQkJc2ItPnNfaWQpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWluZm8tPmRxaV9wcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHF0cmVlX21lbV9kcWluZm8pLCBHRlBfTk9GUyk7Ci0JaWYgKCFpbmZvLT5kcWlfcHJpdikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiTm90IGVub3VnaCBtZW1vcnkgZm9yIHF1b3RhIGluZm9ybWF0aW9uIHN0cnVjdHVyZS5cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXFpbmZvID0gaW5mby0+ZHFpX3ByaXY7Ci0JLyogbGltaXRzIGFyZSBzdG9yZWQgYXMgdW5zaWduZWQgMzItYml0IGRhdGEgKi8KLQlpbmZvLT5kcWlfbWF4YmxpbWl0ID0gMHhmZmZmZmZmZjsKLQlpbmZvLT5kcWlfbWF4aWxpbWl0ID0gMHhmZmZmZmZmZjsKLQlpbmZvLT5kcWlfYmdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2JncmFjZSk7Ci0JaW5mby0+ZHFpX2lncmFjZSA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9pZ3JhY2UpOwotCWluZm8tPmRxaV9mbGFncyA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9mbGFncyk7Ci0JcWluZm8tPmRxaV9zYiA9IHNiOwotCXFpbmZvLT5kcWlfdHlwZSA9IHR5cGU7Ci0JcWluZm8tPmRxaV9ibG9ja3MgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmxvY2tzKTsKLQlxaW5mby0+ZHFpX2ZyZWVfYmxrID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2ZyZWVfYmxrKTsKLQlxaW5mby0+ZHFpX2ZyZWVfZW50cnkgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfZnJlZV9lbnRyeSk7Ci0JcWluZm8tPmRxaV9ibG9ja3NpemVfYml0cyA9IFYyX0RRQkxLU0laRV9CSVRTOwotCXFpbmZvLT5kcWlfdXNhYmxlX2JzID0gMSA8PCBWMl9EUUJMS1NJWkVfQklUUzsKLQlxaW5mby0+ZHFpX3F0cmVlX2RlcHRoID0gcXRyZWVfZGVwdGgocWluZm8pOwotCXFpbmZvLT5kcWlfZW50cnlfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjJfZGlza19kcWJsayk7Ci0JcWluZm8tPmRxaV9vcHMgPSAmdjJfcXRyZWVfb3BzOwotCXJldHVybiAwOwotfQotCi0vKiBXcml0ZSBpbmZvcm1hdGlvbiBoZWFkZXIgdG8gcXVvdGEgZmlsZSAqLwotc3RhdGljIGludCB2Ml93cml0ZV9maWxlX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IHYyX2Rpc2tfZHFpbmZvIGRpbmZvOwotCXN0cnVjdCBtZW1fZHFpbmZvICppbmZvID0gc2JfZHFpbmZvKHNiLCB0eXBlKTsKLQlzdHJ1Y3QgcXRyZWVfbWVtX2RxaW5mbyAqcWluZm8gPSBpbmZvLT5kcWlfcHJpdjsKLQlzc2l6ZV90IHNpemU7Ci0KLQlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JaW5mby0+ZHFpX2ZsYWdzICY9IH5EUUZfSU5GT19ESVJUWTsKLQlkaW5mby5kcWlfYmdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby0+ZHFpX2JncmFjZSk7Ci0JZGluZm8uZHFpX2lncmFjZSA9IGNwdV90b19sZTMyKGluZm8tPmRxaV9pZ3JhY2UpOwotCWRpbmZvLmRxaV9mbGFncyA9IGNwdV90b19sZTMyKGluZm8tPmRxaV9mbGFncyAmIERRRl9NQVNLKTsKLQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKLQlkaW5mby5kcWlfYmxvY2tzID0gY3B1X3RvX2xlMzIocWluZm8tPmRxaV9ibG9ja3MpOwotCWRpbmZvLmRxaV9mcmVlX2JsayA9IGNwdV90b19sZTMyKHFpbmZvLT5kcWlfZnJlZV9ibGspOwotCWRpbmZvLmRxaV9mcmVlX2VudHJ5ID0gY3B1X3RvX2xlMzIocWluZm8tPmRxaV9mcmVlX2VudHJ5KTsKLQlzaXplID0gc2ItPnNfb3AtPnF1b3RhX3dyaXRlKHNiLCB0eXBlLCAoY2hhciAqKSZkaW5mbywKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbyksIFYyX0RRSU5GT09GRik7Ci0JaWYgKHNpemUgIT0gc2l6ZW9mKHN0cnVjdCB2Ml9kaXNrX2RxaW5mbykpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3Qgd3JpdGUgaW5mbyBzdHJ1Y3R1cmUgb24gZGV2aWNlICVzLlxuIiwKLQkJCXNiLT5zX2lkKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdjJfZGlzazJtZW1kcWIoc3RydWN0IGRxdW90ICpkcXVvdCwgdm9pZCAqZHApCi17Ci0Jc3RydWN0IHYyX2Rpc2tfZHFibGsgKmQgPSBkcCwgZW1wdHk7Ci0Jc3RydWN0IG1lbV9kcWJsayAqbSA9ICZkcXVvdC0+ZHFfZHFiOwotCi0JbS0+ZHFiX2loYXJkbGltaXQgPSBsZTMyX3RvX2NwdShkLT5kcWJfaWhhcmRsaW1pdCk7Ci0JbS0+ZHFiX2lzb2Z0bGltaXQgPSBsZTMyX3RvX2NwdShkLT5kcWJfaXNvZnRsaW1pdCk7Ci0JbS0+ZHFiX2N1cmlub2RlcyA9IGxlMzJfdG9fY3B1KGQtPmRxYl9jdXJpbm9kZXMpOwotCW0tPmRxYl9pdGltZSA9IGxlNjRfdG9fY3B1KGQtPmRxYl9pdGltZSk7Ci0JbS0+ZHFiX2JoYXJkbGltaXQgPSB2Ml9xYnRvcyhsZTMyX3RvX2NwdShkLT5kcWJfYmhhcmRsaW1pdCkpOwotCW0tPmRxYl9ic29mdGxpbWl0ID0gdjJfcWJ0b3MobGUzMl90b19jcHUoZC0+ZHFiX2Jzb2Z0bGltaXQpKTsKLQltLT5kcWJfY3Vyc3BhY2UgPSBsZTY0X3RvX2NwdShkLT5kcWJfY3Vyc3BhY2UpOwotCW0tPmRxYl9idGltZSA9IGxlNjRfdG9fY3B1KGQtPmRxYl9idGltZSk7Ci0JLyogV2UgbmVlZCB0byBlc2NhcGUgYmFjayBhbGwtemVybyBzdHJ1Y3R1cmUgKi8KLQltZW1zZXQoJmVtcHR5LCAwLCBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFibGspKTsKLQllbXB0eS5kcWJfaXRpbWUgPSBjcHVfdG9fbGU2NCgxKTsKLQlpZiAoIW1lbWNtcCgmZW1wdHksIGRwLCBzaXplb2Yoc3RydWN0IHYyX2Rpc2tfZHFibGspKSkKLQkJbS0+ZHFiX2l0aW1lID0gMDsKLX0KLQotc3RhdGljIHZvaWQgdjJfbWVtMmRpc2tkcWIodm9pZCAqZHAsIHN0cnVjdCBkcXVvdCAqZHF1b3QpCi17Ci0Jc3RydWN0IHYyX2Rpc2tfZHFibGsgKmQgPSBkcDsKLQlzdHJ1Y3QgbWVtX2RxYmxrICptID0gJmRxdW90LT5kcV9kcWI7Ci0Jc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8gPQotCQkJc2JfZHFpbmZvKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpLT5kcWlfcHJpdjsKLQotCWQtPmRxYl9paGFyZGxpbWl0ID0gY3B1X3RvX2xlMzIobS0+ZHFiX2loYXJkbGltaXQpOwotCWQtPmRxYl9pc29mdGxpbWl0ID0gY3B1X3RvX2xlMzIobS0+ZHFiX2lzb2Z0bGltaXQpOwotCWQtPmRxYl9jdXJpbm9kZXMgPSBjcHVfdG9fbGUzMihtLT5kcWJfY3VyaW5vZGVzKTsKLQlkLT5kcWJfaXRpbWUgPSBjcHVfdG9fbGU2NChtLT5kcWJfaXRpbWUpOwotCWQtPmRxYl9iaGFyZGxpbWl0ID0gY3B1X3RvX2xlMzIodjJfc3RvcWIobS0+ZHFiX2JoYXJkbGltaXQpKTsKLQlkLT5kcWJfYnNvZnRsaW1pdCA9IGNwdV90b19sZTMyKHYyX3N0b3FiKG0tPmRxYl9ic29mdGxpbWl0KSk7Ci0JZC0+ZHFiX2N1cnNwYWNlID0gY3B1X3RvX2xlNjQobS0+ZHFiX2N1cnNwYWNlKTsKLQlkLT5kcWJfYnRpbWUgPSBjcHVfdG9fbGU2NChtLT5kcWJfYnRpbWUpOwotCWQtPmRxYl9pZCA9IGNwdV90b19sZTMyKGRxdW90LT5kcV9pZCk7Ci0JaWYgKHF0cmVlX2VudHJ5X3VudXNlZChpbmZvLCBkcCkpCi0JCWQtPmRxYl9pdGltZSA9IGNwdV90b19sZTY0KDEpOwotfQotCi1zdGF0aWMgaW50IHYyX2lzX2lkKHZvaWQgKmRwLCBzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCXN0cnVjdCB2Ml9kaXNrX2RxYmxrICpkID0gZHA7Ci0Jc3RydWN0IHF0cmVlX21lbV9kcWluZm8gKmluZm8gPQotCQkJc2JfZHFpbmZvKGRxdW90LT5kcV9zYiwgZHF1b3QtPmRxX3R5cGUpLT5kcWlfcHJpdjsKLQotCWlmIChxdHJlZV9lbnRyeV91bnVzZWQoaW5mbywgZHApKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gbGUzMl90b19jcHUoZC0+ZHFiX2lkKSA9PSBkcXVvdC0+ZHFfaWQ7Ci19Ci0KLXN0YXRpYyBpbnQgdjJfcmVhZF9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCXJldHVybiBxdHJlZV9yZWFkX2RxdW90KHNiX2RxaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKS0+ZHFpX3ByaXYsIGRxdW90KTsKLX0KLQotc3RhdGljIGludCB2Ml93cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCXJldHVybiBxdHJlZV93cml0ZV9kcXVvdChzYl9kcWluZm8oZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSktPmRxaV9wcml2LCBkcXVvdCk7Ci19Ci0KLXN0YXRpYyBpbnQgdjJfcmVsZWFzZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKmRxdW90KQotewotCXJldHVybiBxdHJlZV9yZWxlYXNlX2RxdW90KHNiX2RxaW5mbyhkcXVvdC0+ZHFfc2IsIGRxdW90LT5kcV90eXBlKS0+ZHFpX3ByaXYsIGRxdW90KTsKLX0KLQotc3RhdGljIGludCB2Ml9mcmVlX2ZpbGVfaW5mbyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlrZnJlZShzYl9kcWluZm8oc2IsIHR5cGUpLT5kcWlfcHJpdik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcXVvdGFfZm9ybWF0X29wcyB2Ml9mb3JtYXRfb3BzID0gewotCS5jaGVja19xdW90YV9maWxlCT0gdjJfY2hlY2tfcXVvdGFfZmlsZSwKLQkucmVhZF9maWxlX2luZm8JCT0gdjJfcmVhZF9maWxlX2luZm8sCi0JLndyaXRlX2ZpbGVfaW5mbwk9IHYyX3dyaXRlX2ZpbGVfaW5mbywKLQkuZnJlZV9maWxlX2luZm8JCT0gdjJfZnJlZV9maWxlX2luZm8sCi0JLnJlYWRfZHFibGsJCT0gdjJfcmVhZF9kcXVvdCwKLQkuY29tbWl0X2RxYmxrCQk9IHYyX3dyaXRlX2RxdW90LAotCS5yZWxlYXNlX2RxYmxrCQk9IHYyX3JlbGVhc2VfZHF1b3QsCi19OwotCi1zdGF0aWMgc3RydWN0IHF1b3RhX2Zvcm1hdF90eXBlIHYyX3F1b3RhX2Zvcm1hdCA9IHsKLQkucWZfZm10X2lkCT0gUUZNVF9WRlNfVjAsCi0JLnFmX29wcwkJPSAmdjJfZm9ybWF0X29wcywKLQkucWZfb3duZXIJPSBUSElTX01PRFVMRQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF92Ml9xdW90YV9mb3JtYXQodm9pZCkKLXsKLQlyZXR1cm4gcmVnaXN0ZXJfcXVvdGFfZm9ybWF0KCZ2Ml9xdW90YV9mb3JtYXQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF92Ml9xdW90YV9mb3JtYXQodm9pZCkKLXsKLQl1bnJlZ2lzdGVyX3F1b3RhX2Zvcm1hdCgmdjJfcXVvdGFfZm9ybWF0KTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF92Ml9xdW90YV9mb3JtYXQpOwotbW9kdWxlX2V4aXQoZXhpdF92Ml9xdW90YV9mb3JtYXQpOwpkaWZmIC0tZ2l0IGEvZnMvcmFtZnMvZmlsZS1ub21tdS5jIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCmluZGV4IDVkN2M3ZWMuLjk5NWVmMWQgMTAwNjQ0Ci0tLSBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYworKysgYi9mcy9yYW1mcy9maWxlLW5vbW11LmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbWZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogCkBAIC0yMDUsMTEgKzIwNCw2IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIGJ5IHByb3ZpZGluZyBvdXIgb3duIHNldGF0dHIoKSBtZXRob2QsIHdlIHNraXAgdGhpcyBxdW90YWlzbSAqLwotCWlmICgob2xkX2lhX3ZhbGlkICYgQVRUUl9VSUQgJiYgaWEtPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpIHx8Ci0JICAgIChvbGRfaWFfdmFsaWQgJiBBVFRSX0dJRCAmJiBpYS0+aWFfZ2lkICE9IGlub2RlLT5pX2dpZCkpCi0JCXJldCA9IERRVU9UX1RSQU5TRkVSKGlub2RlLCBpYSkgPyAtRURRVU9UIDogMDsKLQogCS8qIHBpY2sgb3V0IHNpemUtY2hhbmdpbmcgZXZlbnRzICovCiAJaWYgKGlhLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgewogCQlsb2ZmX3Qgc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jIGIvZnMvcmVpc2VyZnMvYml0bWFwLmMKaW5kZXggNDY0NmNhYS4uZjMyZDE0MiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvYml0bWFwLmMKKysrIGIvZnMvcmVpc2VyZnMvYml0bWFwLmMKQEAgLTQzMCw3ICs0MzAsNyBAQAogCiAJam91cm5hbF9tYXJrX2RpcnR5KHRoLCBzLCBzYmgpOwogCWlmIChmb3JfdW5mb3JtYXR0ZWQpCi0JCURRVU9UX0ZSRUVfQkxPQ0tfTk9ESVJUWShpbm9kZSwgMSk7CisJCXZmc19kcV9mcmVlX2Jsb2NrX25vZGlydHkoaW5vZGUsIDEpOwogfQogCiB2b2lkIHJlaXNlcmZzX2ZyZWVfYmxvY2soc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCkBAIC0xMDU1LDcgKzEwNTUsNyBAQAogCQkJICAgICAgIGFtb3VudF9uZWVkZWQsIGhpbnQtPmlub2RlLT5pX3VpZCk7CiAjZW5kaWYKIAkJcXVvdGFfcmV0ID0KLQkJICAgIERRVU9UX0FMTE9DX0JMT0NLX05PRElSVFkoaGludC0+aW5vZGUsIGFtb3VudF9uZWVkZWQpOworCQkgICAgdmZzX2RxX2FsbG9jX2Jsb2NrX25vZGlydHkoaGludC0+aW5vZGUsIGFtb3VudF9uZWVkZWQpOwogCQlpZiAocXVvdGFfcmV0KQkvKiBRdW90YSBleGNlZWRlZD8gKi8KIAkJCXJldHVybiBRVU9UQV9FWENFRURFRDsKIAkJaWYgKGhpbnQtPnByZWFsbG9jYXRlICYmIGhpbnQtPnByZWFsbG9jX3NpemUpIHsKQEAgLTEwNjQsOCArMTA2NCw3IEBACiAJCQkJICAgICAgICJyZWlzZXJxdW90YTogYWxsb2NhdGluZyAocHJlYWxsb2MpICVkIGJsb2NrcyBpZD0ldSIsCiAJCQkJICAgICAgIGhpbnQtPnByZWFsbG9jX3NpemUsIGhpbnQtPmlub2RlLT5pX3VpZCk7CiAjZW5kaWYKLQkJCXF1b3RhX3JldCA9Ci0JCQkgICAgRFFVT1RfUFJFQUxMT0NfQkxPQ0tfTk9ESVJUWShoaW50LT5pbm9kZSwKKwkJCXF1b3RhX3JldCA9IHZmc19kcV9wcmVhbGxvY19ibG9ja19ub2RpcnR5KGhpbnQtPmlub2RlLAogCQkJCQkJCSBoaW50LT5wcmVhbGxvY19zaXplKTsKIAkJCWlmIChxdW90YV9yZXQpCiAJCQkJaGludC0+cHJlYWxsb2NhdGUgPSBoaW50LT5wcmVhbGxvY19zaXplID0gMDsKQEAgLTEwOTgsNyArMTA5NywxMCBAQAogCQkJCQkgICAgICAgbnJfYWxsb2NhdGVkLAogCQkJCQkgICAgICAgaGludC0+aW5vZGUtPmlfdWlkKTsKICNlbmRpZgotCQkJCURRVU9UX0ZSRUVfQkxPQ0tfTk9ESVJUWShoaW50LT5pbm9kZSwgYW1vdW50X25lZWRlZCArIGhpbnQtPnByZWFsbG9jX3NpemUgLSBucl9hbGxvY2F0ZWQpOwkvKiBGcmVlIG5vdCBhbGxvY2F0ZWQgYmxvY2tzICovCisJCQkJLyogRnJlZSBub3QgYWxsb2NhdGVkIGJsb2NrcyAqLworCQkJCXZmc19kcV9mcmVlX2Jsb2NrX25vZGlydHkoaGludC0+aW5vZGUsCisJCQkJCWFtb3VudF9uZWVkZWQgKyBoaW50LT5wcmVhbGxvY19zaXplIC0KKwkJCQkJbnJfYWxsb2NhdGVkKTsKIAkJCX0KIAkJCXdoaWxlIChucl9hbGxvY2F0ZWQtLSkKIAkJCQlyZWlzZXJmc19mcmVlX2Jsb2NrKGhpbnQtPnRoLCBoaW50LT5pbm9kZSwKQEAgLTExMjksNyArMTEzMSw3IEBACiAJCQkgICAgICAgUkVJU0VSRlNfSShoaW50LT5pbm9kZSktPmlfcHJlYWxsb2NfY291bnQsCiAJCQkgICAgICAgaGludC0+aW5vZGUtPmlfdWlkKTsKICNlbmRpZgotCQlEUVVPVF9GUkVFX0JMT0NLX05PRElSVFkoaGludC0+aW5vZGUsIGFtb3VudF9uZWVkZWQgKworCQl2ZnNfZHFfZnJlZV9ibG9ja19ub2RpcnR5KGhpbnQtPmlub2RlLCBhbW91bnRfbmVlZGVkICsKIAkJCQkJIGhpbnQtPnByZWFsbG9jX3NpemUgLSBucl9hbGxvY2F0ZWQgLQogCQkJCQkgUkVJU0VSRlNfSShoaW50LT5pbm9kZSktPgogCQkJCQkgaV9wcmVhbGxvY19jb3VudCk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pbm9kZS5jIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwppbmRleCA1NWZjZTkyLi44MjMyMjdhIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pbm9kZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKQEAgLTUzLDcgKzUzLDcgQEAKIAkJICogYWZ0ZXIgZGVsZXRlX29iamVjdCBzbyB0aGF0IHF1b3RhIHVwZGF0ZXMgZ28gaW50byB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhcwogCQkgKiBzdGF0IGRhdGEgZGVsZXRpb24gKi8KIAkJaWYgKCFlcnIpIAotCQkJRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7CisJCQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CiAKIAkJaWYgKGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIGpiZWdpbl9jb3VudCkpCiAJCQlnb3RvIG91dDsKQEAgLTE3NjMsNyArMTc2Myw3IEBACiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCWlmIChEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2lub2RlKGlub2RlKSkgewogCQllcnIgPSAtRURRVU9UOwogCQlnb3RvIG91dF9lbmRfdHJhbnM7CiAJfQpAQCAtMTk0NywxMiArMTk0NywxMiBAQAogCUlOT0RFX1BLRVkoaW5vZGUpLT5rX29iamVjdGlkID0gMDsKIAogCS8qIFF1b3RhIGNoYW5nZSBtdXN0IGJlIGluc2lkZSBhIHRyYW5zYWN0aW9uIGZvciBqb3VybmFsaW5nICovCi0JRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7CisJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOwogCiAgICAgICBvdXRfZW5kX3RyYW5zOgogCWpvdXJuYWxfZW5kKHRoLCB0aC0+dF9zdXBlciwgdGgtPnRfYmxvY2tzX2FsbG9jYXRlZCk7CiAJLyogRHJvcCBjYW4gYmUgb3V0c2lkZSBhbmQgaXQgbmVlZHMgbW9yZSBjcmVkaXRzIHNvIGl0J3MgYmV0dGVyIHRvIGhhdmUgaXQgb3V0c2lkZSAqLwotCURRVU9UX0RST1AoaW5vZGUpOworCXZmc19kcV9kcm9wKGlub2RlKTsKIAlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEE7CiAJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwogCkBAIC0zMTE5LDcgKzMxMTksNyBAQAogCQkJCWlmIChlcnJvcikKIAkJCQkJZ290byBvdXQ7CiAJCQkJZXJyb3IgPQotCQkJCSAgICBEUVVPVF9UUkFOU0ZFUihpbm9kZSwgYXR0cikgPyAtRURRVU9UIDogMDsKKwkJCQkgICAgdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBhdHRyKSA/IC1FRFFVT1QgOiAwOwogCQkJCWlmIChlcnJvcikgewogCQkJCQlqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLAogCQkJCQkJICAgIGpiZWdpbl9jb3VudCk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9uYW1laS5jIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwppbmRleCA3Mzg5NjdmLi42MzlkNjM1IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9uYW1laS5jCisrKyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKQEAgLTU1NSw3ICs1NTUsNyBAQAogKi8KIHN0YXRpYyBpbnQgZHJvcF9uZXdfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlEUVVPVF9EUk9QKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwogCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9RVU9UQTsKIAlpcHV0KGlub2RlKTsKQEAgLTU2Myw3ICs1NjMsNyBAQAogfQogCiAvKiB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgZG9lcyBzZXR1cCBmb3IgcmVpc2VyZnNfbmV3X2lub2RlLiAgCi0qKiBEUVVPVF9JTklUIG5lZWRzIGxvdHMgb2YgY3JlZGl0cyBzbyBpdCdzIGJldHRlciB0byBoYXZlIGl0CisqKiB2ZnNfZHFfaW5pdCBuZWVkcyBsb3RzIG9mIGNyZWRpdHMgc28gaXQncyBiZXR0ZXIgdG8gaGF2ZSBpdAogKiogb3V0c2lkZSBvZiBhIHRyYW5zYWN0aW9uLCBzbyB3ZSBoYWQgdG8gcHVsbCBzb21lIGJpdHMgb2YKICoqIHJlaXNlcmZzX25ld19pbm9kZSBvdXQgaW50byB0aGlzIGZ1bmMuCiAqLwpAQCAtNTg2LDcgKzU4Niw3IEBACiAJfSBlbHNlIHsKIAkJaW5vZGUtPmlfZ2lkID0gY3VycmVudF9mc2dpZCgpOwogCX0KLQlEUVVPVF9JTklUKGlub2RlKTsKKwl2ZnNfZHFfaW5pdChpbm9kZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMgYi9mcy9yZWlzZXJmcy9zdHJlZS5jCmluZGV4IGFiYmM2NGQuLjczYWFhMzMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMKKysrIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwpAQCAtMTI5Nyw3ICsxMjk3LDcgQEAKIAkJICAgICAgICJyZWlzZXJxdW90YSBkZWxldGVfaXRlbSgpOiBmcmVlaW5nICV1LCBpZD0ldSB0eXBlPSVjIiwKIAkJICAgICAgIHF1b3RhX2N1dF9ieXRlcywgcF9zX2lub2RlLT5pX3VpZCwgaGVhZDJ0eXBlKCZzX2loKSk7CiAjZW5kaWYKLQlEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkocF9zX2lub2RlLCBxdW90YV9jdXRfYnl0ZXMpOworCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkocF9zX2lub2RlLCBxdW90YV9jdXRfYnl0ZXMpOwogCiAJLyogUmV0dXJuIGRlbGV0ZWQgYm9keSBsZW5ndGggKi8KIAlyZXR1cm4gbl9yZXRfdmFsdWU7CkBAIC0xMzgzLDcgKzEzODMsNyBAQAogCQkJCQkgICAgICAgcXVvdGFfY3V0X2J5dGVzLCBpbm9kZS0+aV91aWQsCiAJCQkJCSAgICAgICBrZXkydHlwZShrZXkpKTsKICNlbmRpZgotCQkJCURRVU9UX0ZSRUVfU1BBQ0VfTk9ESVJUWShpbm9kZSwKKwkJCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLAogCQkJCQkJCSBxdW90YV9jdXRfYnl0ZXMpOwogCQkJfQogCQkJYnJlYWs7CkBAIC0xNzM0LDcgKzE3MzQsNyBAQAogCQkgICAgICAgInJlaXNlcnF1b3RhIGN1dF9mcm9tX2l0ZW0oKTogZnJlZWluZyAldSBpZD0ldSB0eXBlPSVjIiwKIAkJICAgICAgIHF1b3RhX2N1dF9ieXRlcywgcF9zX2lub2RlLT5pX3VpZCwgJz8nKTsKICNlbmRpZgotCURRVU9UX0ZSRUVfU1BBQ0VfTk9ESVJUWShwX3NfaW5vZGUsIHF1b3RhX2N1dF9ieXRlcyk7CisJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShwX3NfaW5vZGUsIHF1b3RhX2N1dF9ieXRlcyk7CiAJcmV0dXJuIG5fcmV0X3ZhbHVlOwogfQogCkBAIC0xOTcxLDcgKzE5NzEsNyBAQAogCQkgICAgICAga2V5MnR5cGUoJihwX3Nfa2V5LT5vbl9kaXNrX2tleSkpKTsKICNlbmRpZgogCi0JaWYgKERRVU9UX0FMTE9DX1NQQUNFX05PRElSVFkoaW5vZGUsIG5fcGFzdGVkX3NpemUpKSB7CisJaWYgKHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBuX3Bhc3RlZF9zaXplKSkgewogCQlwYXRocmVsc2UocF9zX3NlYXJjaF9wYXRoKTsKIAkJcmV0dXJuIC1FRFFVT1Q7CiAJfQpAQCAtMjAyNyw3ICsyMDI3LDcgQEAKIAkJICAgICAgIG5fcGFzdGVkX3NpemUsIGlub2RlLT5pX3VpZCwKIAkJICAgICAgIGtleTJ0eXBlKCYocF9zX2tleS0+b25fZGlza19rZXkpKSk7CiAjZW5kaWYKLQlEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkoaW5vZGUsIG5fcGFzdGVkX3NpemUpOworCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIG5fcGFzdGVkX3NpemUpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTIwNjAsNyArMjA2MCw3IEBACiAjZW5kaWYKIAkJLyogV2UgY2FuJ3QgZGlydHkgaW5vZGUgaGVyZS4gSXQgd291bGQgYmUgaW1tZWRpYXRlbHkgd3JpdHRlbiBidXQKIAkJICogYXBwcm9wcmlhdGUgc3RhdCBpdGVtIGlzbid0IGluc2VydGVkIHlldC4uLiAqLwotCQlpZiAoRFFVT1RfQUxMT0NfU1BBQ0VfTk9ESVJUWShpbm9kZSwgcXVvdGFfYnl0ZXMpKSB7CisJCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfYnl0ZXMpKSB7CiAJCQlwYXRocmVsc2UocF9zX3BhdGgpOwogCQkJcmV0dXJuIC1FRFFVT1Q7CiAJCX0KQEAgLTIxMTIsNiArMjExMiw2IEBACiAJCSAgICAgICBxdW90YV9ieXRlcywgaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUocF9zX2loKSk7CiAjZW5kaWYKIAlpZiAoaW5vZGUpCi0JCURRVU9UX0ZSRUVfU1BBQ0VfTk9ESVJUWShpbm9kZSwgcXVvdGFfYnl0ZXMpOworCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBxdW90YV9ieXRlcyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMgYi9mcy9yZWlzZXJmcy9zdXBlci5jCmluZGV4IGYzYzgyMGIuLjVkYmFmYjcgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N1cGVyLmMKKysrIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwpAQCAtMjUwLDcgKzI1MCw3IEBACiAJCQlyZXR2YWwgPSByZW1vdmVfc2F2ZV9saW5rX29ubHkocywgJnNhdmVfbGlua19rZXksIDApOwogCQkJY29udGludWU7CiAJCX0KLQkJRFFVT1RfSU5JVChpbm9kZSk7CisJCXZmc19kcV9pbml0KGlub2RlKTsKIAogCQlpZiAodHJ1bmNhdGUgJiYgU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewogCQkJLyogV2UgZ290IGEgdHJ1bmNhdGUgcmVxdWVzdCBmb3IgYSBkaXIgd2hpY2ggaXMgaW1wb3NzaWJsZS4KQEAgLTYyOSw4ICs2MjksNiBAQAogI2lmZGVmIENPTkZJR19RVU9UQQogI2RlZmluZSBRVFlQRTJOQU1FKHQpICgodCk9PVVTUlFVT1RBPyJ1c2VyIjoiZ3JvdXAiKQogCi1zdGF0aWMgaW50IHJlaXNlcmZzX2RxdW90X2luaXRpYWxpemUoc3RydWN0IGlub2RlICosIGludCk7Ci1zdGF0aWMgaW50IHJlaXNlcmZzX2RxdW90X2Ryb3Aoc3RydWN0IGlub2RlICopOwogc3RhdGljIGludCByZWlzZXJmc193cml0ZV9kcXVvdChzdHJ1Y3QgZHF1b3QgKik7CiBzdGF0aWMgaW50IHJlaXNlcmZzX2FjcXVpcmVfZHF1b3Qoc3RydWN0IGRxdW90ICopOwogc3RhdGljIGludCByZWlzZXJmc19yZWxlYXNlX2RxdW90KHN0cnVjdCBkcXVvdCAqKTsKQEAgLTYzOSw4ICs2MzcsOCBAQAogc3RhdGljIGludCByZWlzZXJmc19xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBpbnQsIGNoYXIgKiwgaW50KTsKIAogc3RhdGljIHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIHJlaXNlcmZzX3F1b3RhX29wZXJhdGlvbnMgPSB7Ci0JLmluaXRpYWxpemUgPSByZWlzZXJmc19kcXVvdF9pbml0aWFsaXplLAotCS5kcm9wID0gcmVpc2VyZnNfZHF1b3RfZHJvcCwKKwkuaW5pdGlhbGl6ZSA9IGRxdW90X2luaXRpYWxpemUsCisJLmRyb3AgPSBkcXVvdF9kcm9wLAogCS5hbGxvY19zcGFjZSA9IGRxdW90X2FsbG9jX3NwYWNlLAogCS5hbGxvY19pbm9kZSA9IGRxdW90X2FsbG9jX2lub2RlLAogCS5mcmVlX3NwYWNlID0gZHF1b3RfZnJlZV9zcGFjZSwKQEAgLTE4OTYsNTggKzE4OTQsNiBAQAogfQogCiAjaWZkZWYgQ09ORklHX1FVT1RBCi1zdGF0aWMgaW50IHJlaXNlcmZzX2RxdW90X2luaXRpYWxpemUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUpCi17Ci0Jc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKLQlpbnQgcmV0LCBlcnI7Ci0KLQkvKiBXZSBtYXkgY3JlYXRlIHF1b3RhIHN0cnVjdHVyZSBzbyB3ZSBuZWVkIHRvIHJlc2VydmUgZW5vdWdoIGJsb2NrcyAqLwotCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOwotCXJldCA9Ci0JICAgIGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwKLQkJCSAgMiAqIFJFSVNFUkZTX1FVT1RBX0lOSVRfQkxPQ0tTKGlub2RlLT5pX3NiKSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSwgdHlwZSk7Ci0JZXJyID0KLQkgICAgam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwKLQkJCTIgKiBSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyhpbm9kZS0+aV9zYikpOwotCWlmICghcmV0ICYmIGVycikKLQkJcmV0ID0gZXJyOwotICAgICAgb3V0OgotCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCByZWlzZXJmc19kcXVvdF9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKLQlpbnQgcmV0LCBlcnI7Ci0KLQkvKiBXZSBtYXkgZGVsZXRlIHF1b3RhIHN0cnVjdHVyZSBzbyB3ZSBuZWVkIHRvIHJlc2VydmUgZW5vdWdoIGJsb2NrcyAqLwotCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOwotCXJldCA9Ci0JICAgIGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwKLQkJCSAgMiAqIFJFSVNFUkZTX1FVT1RBX0RFTF9CTE9DS1MoaW5vZGUtPmlfc2IpKTsKLQlpZiAocmV0KSB7Ci0JCS8qCi0JCSAqIFdlIGNhbGwgZHF1b3RfZHJvcCgpIGFueXdheSB0byBhdCBsZWFzdCByZWxlYXNlIHJlZmVyZW5jZXMKLQkJICogdG8gcXVvdGEgc3RydWN0dXJlcyBzbyB0aGF0IHVtb3VudCBkb2VzIG5vdCBoYW5nLgotCQkgKi8KLQkJZHF1b3RfZHJvcChpbm9kZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQlyZXQgPSBkcXVvdF9kcm9wKGlub2RlKTsKLQllcnIgPQotCSAgICBqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLAotCQkJMiAqIFJFSVNFUkZTX1FVT1RBX0RFTF9CTE9DS1MoaW5vZGUtPmlfc2IpKTsKLQlpZiAoIXJldCAmJiBlcnIpCi0JCXJldCA9IGVycjsKLSAgICAgIG91dDoKLQlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQgcmVpc2VyZnNfd3JpdGVfZHF1b3Qoc3RydWN0IGRxdW90ICpkcXVvdCkKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHIuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyLmMKaW5kZXggYWQ5MjQ2MS4uYWU4ODFjYyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHIuYworKysgYi9mcy9yZWlzZXJmcy94YXR0ci5jCkBAIC0xMTM2LDcgKzExMzYsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHhhdHRyX2xvb2t1cF9wb2lzb25fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyB4YXR0cl9sb29rdXBfcG9pc29uX29wcyA9IHsKIAkuZF9jb21wYXJlID0geGF0dHJfbG9va3VwX3BvaXNvbiwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL2Rpci5jIGIvZnMvc21iZnMvZGlyLmMKaW5kZXggZTdkZGQwMy4uM2U0ODAzYiAxMDA2NDQKLS0tIGEvZnMvc21iZnMvZGlyLmMKKysrIGIvZnMvc21iZnMvZGlyLmMKQEAgLTI3Nyw3ICsyNzcsNyBAQAogc3RhdGljIGludCBzbWJfY29tcGFyZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcXN0ciAqKTsKIHN0YXRpYyBpbnQgc21iX2RlbGV0ZV9kZW50cnkoc3RydWN0IGRlbnRyeSAqKTsKIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzbWJmc19kZW50cnlfb3BlcmF0aW9ucyA9CitzdGF0aWMgY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHNtYmZzX2RlbnRyeV9vcGVyYXRpb25zID0KIHsKIAkuZF9yZXZhbGlkYXRlCT0gc21iX2xvb2t1cF92YWxpZGF0ZSwKIAkuZF9oYXNoCQk9IHNtYl9oYXNoX2RlbnRyeSwKQEAgLTI4NSw3ICsyODUsNyBAQAogCS5kX2RlbGV0ZQk9IHNtYl9kZWxldGVfZGVudHJ5LAogfTsKIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzbWJmc19kZW50cnlfb3BlcmF0aW9uc19jYXNlID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc21iZnNfZGVudHJ5X29wZXJhdGlvbnNfY2FzZSA9CiB7CiAJLmRfcmV2YWxpZGF0ZQk9IHNtYl9sb29rdXBfdmFsaWRhdGUsCiAJLmRfZGVsZXRlCT0gc21iX2RlbGV0ZV9kZW50cnksCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA2Y2U1MDE0Li4yYmE0ODE1IDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZzLT5zX2FjdGl2ZSwgJnNiX2xvY2spKSB7CiAJCXMtPnNfY291bnQgLT0gU19CSUFTLTE7CiAJCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKLQkJRFFVT1RfT0ZGKHMsIDApOworCQl2ZnNfZHFfb2ZmKHMsIDApOwogCQlkb3duX3dyaXRlKCZzLT5zX3Vtb3VudCk7CiAJCWZzLT5raWxsX3NiKHMpOwogCQlwdXRfZmlsZXN5c3RlbShmcyk7CkBAIC0yNjYsNyArMjY2LDcgQEAKIHZvaWQgX19mc3luY19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXN5bmNfaW5vZGVzX3NiKHNiLCAwKTsKLQlEUVVPVF9TWU5DKHNiKTsKKwl2ZnNfZHFfc3luYyhzYik7CiAJbG9ja19zdXBlcihzYik7CiAJaWYgKHNiLT5zX2RpcnQgJiYgc2ItPnNfb3AtPndyaXRlX3N1cGVyKQogCQlzYi0+c19vcC0+d3JpdGVfc3VwZXIoc2IpOwpAQCAtNjU1LDcgKzY1NSw3IEBACiAJCQltYXJrX2ZpbGVzX3JvKHNiKTsKIAkJZWxzZSBpZiAoIWZzX21heV9yZW1vdW50X3JvKHNiKSkKIAkJCXJldHVybiAtRUJVU1k7Ci0JCXJldHZhbCA9IERRVU9UX09GRihzYiwgMSk7CisJCXJldHZhbCA9IHZmc19kcV9vZmYoc2IsIDEpOwogCQlpZiAocmV0dmFsIDwgMCAmJiByZXR2YWwgIT0gLUVOT1NZUykKIAkJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtNjcwLDExICs2NzAsMTEgQEAKIAl9CiAJc2ItPnNfZmxhZ3MgPSAoc2ItPnNfZmxhZ3MgJiB+TVNfUk1UX01BU0spIHwgKGZsYWdzICYgTVNfUk1UX01BU0spOwogCWlmIChyZW1vdW50X3J3KQotCQlEUVVPVF9PTl9SRU1PVU5UKHNiKTsKKwkJdmZzX2RxX3F1b3RhX29uX3JlbW91bnQoc2IpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBkb19lbWVyZ2VuY3lfcmVtb3VudCh1bnNpZ25lZCBsb25nIGZvbykKK3N0YXRpYyB2b2lkIGRvX2VtZXJnZW5jeV9yZW1vdW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogCkBAIC02OTcsMTIgKzY5NywxOSBAQAogCQlzcGluX2xvY2soJnNiX2xvY2spOwogCX0KIAlzcGluX3VubG9jaygmc2JfbG9jayk7CisJa2ZyZWUod29yayk7CiAJcHJpbnRrKCJFbWVyZ2VuY3kgUmVtb3VudCBjb21wbGV0ZVxuIik7CiB9CiAKIHZvaWQgZW1lcmdlbmN5X3JlbW91bnQodm9pZCkKIHsKLQlwZGZsdXNoX29wZXJhdGlvbihkb19lbWVyZ2VuY3lfcmVtb3VudCwgMCk7CisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCisJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0FUT01JQyk7CisJaWYgKHdvcmspIHsKKwkJSU5JVF9XT1JLKHdvcmssIGRvX2VtZXJnZW5jeV9yZW1vdW50KTsKKwkJc2NoZWR1bGVfd29yayh3b3JrKTsKKwl9CiB9CiAKIC8qCkBAIC04MzEsNyArODM4LDggQEAKIAkJYmRldi0+YmRfc3VwZXIgPSBzOwogCX0KIAotCXJldHVybiBzaW1wbGVfc2V0X21udChtbnQsIHMpOworCXNpbXBsZV9zZXRfbW50KG1udCwgcyk7CisJcmV0dXJuIDA7CiAKIGVycm9yX3M6CiAJZXJyb3IgPSBQVFJfRVJSKHMpOwpAQCAtODc3LDcgKzg4NSw4IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAJcy0+c19mbGFncyB8PSBNU19BQ1RJVkU7Ci0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgcyk7CisJc2ltcGxlX3NldF9tbnQobW50LCBzKTsKKwlyZXR1cm4gMDsKIH0KIAogRVhQT1JUX1NZTUJPTChnZXRfc2Jfbm9kZXYpOwpAQCAtOTA5LDcgKzkxOCw4IEBACiAJCXMtPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwogCX0KIAlkb19yZW1vdW50X3NiKHMsIGZsYWdzLCBkYXRhLCAwKTsKLQlyZXR1cm4gc2ltcGxlX3NldF9tbnQobW50LCBzKTsKKwlzaW1wbGVfc2V0X21udChtbnQsIHMpOworCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MKGdldF9zYl9zaW5nbGUpOwpkaWZmIC0tZ2l0IGEvZnMvc3luYy5jIGIvZnMvc3luYy5jCmluZGV4IGExNmQ1M2UuLjdhYmM2NWYgMTAwNjQ0Ci0tLSBhL2ZzL3N5bmMuYworKysgYi9mcy9zeW5jLmMKQEAgLTI1LDcgKzI1LDcgQEAKIHsKIAl3YWtldXBfcGRmbHVzaCgwKTsKIAlzeW5jX2lub2RlcygwKTsJCS8qIEFsbCBtYXBwaW5ncywgaW5vZGVzIGFuZCB0aGVpciBibG9ja2RldnMgKi8KLQlEUVVPVF9TWU5DKE5VTEwpOworCXZmc19kcV9zeW5jKE5VTEwpOwogCXN5bmNfc3VwZXJzKCk7CQkvKiBXcml0ZSB0aGUgc3VwZXJibG9ja3MgKi8KIAlzeW5jX2ZpbGVzeXN0ZW1zKDApOwkvKiBTdGFydCBzeW5jaW5nIHRoZSBmaWxlc3lzdGVtcyAqLwogCXN5bmNfZmlsZXN5c3RlbXMod2FpdCk7CS8qIFdhaXRpbmdseSBzeW5jIHRoZSBmaWxlc3lzdGVtcyAqLwpAQCAtNDIsOSArNDIsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZG9fc3luY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlkb19zeW5jKDApOworCWtmcmVlKHdvcmspOworfQorCiB2b2lkIGVtZXJnZW5jeV9zeW5jKHZvaWQpCiB7Ci0JcGRmbHVzaF9vcGVyYXRpb24oZG9fc3luYywgMCk7CisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrOworCisJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0FUT01JQyk7CisJaWYgKHdvcmspIHsKKwkJSU5JVF9XT1JLKHdvcmssIGRvX3N5bmNfd29yayk7CisJCXNjaGVkdWxlX3dvcmsod29yayk7CisJfQogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvYmluLmMgYi9mcy9zeXNmcy9iaW4uYwppbmRleCBmMmM0NzhjLi4wNzcwM2QzIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9iaW4uYworKysgYi9mcy9zeXNmcy9iaW4uYwpAQCAtMjEsMTUgKzIxLDI4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+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+aV9tYXBwaW5nLCAwLCAwLCAxKTsKKwl9CisKKwltdXRleF91bmxvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKK30KKwogLyoqCiAgKglzeXNmc19jcmVhdGVfYmluX2ZpbGUgLSBjcmVhdGUgYmluYXJ5IGZpbGUgZm9yIG9iamVjdC4KICAqCUBrb2JqOglvYmplY3QuCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IDgyZDNiNzkuLmQ4OGQwZmEgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC0zMDIsNyArMzAyLDcgQEAKIAlpcHV0KGlub2RlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzeXNmc19kZW50cnlfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzeXNmc19kZW50cnlfb3BzID0gewogCS5kX2lwdXQJCT0gc3lzZnNfZF9pcHV0LAogfTsKIApAQCAtNDM0LDYgKzQzNCwyNiBAQAogfQogCiAvKioKKyAqCXN5c2ZzX3BhdGhuYW1lIC0gcmV0dXJuIGZ1bGwgcGF0aCB0byBzeXNmcyBkaXJlbnQKKyAqCUBzZDogc3lzZnNfZGlyZW50IHdob3NlIHBhdGggd2Ugd2FudAorICoJQHBhdGg6IGNhbGxlciBhbGxvY2F0ZWQgYnVmZmVyCisgKgorICoJR2l2ZXMgdGhlIG5hbWUgIi8iIHRvIHRoZSBzeXNmc19yb290IGVudHJ5OyBhbnkgcGF0aCByZXR1cm5lZAorICoJaXMgcmVsYXRpdmUgdG8gd2hlcmV2ZXIgc3lzZnMgaXMgbW91bnRlZC4KKyAqCisgKglYWFg6IGRvZXMgbm8gZXJyb3IgY2hlY2tpbmcgb24gQHBhdGggc2l6ZQorICovCitzdGF0aWMgY2hhciAqc3lzZnNfcGF0aG5hbWUoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QsIGNoYXIgKnBhdGgpCit7CisJaWYgKHNkLT5zX3BhcmVudCkgeworCQlzeXNmc19wYXRobmFtZShzZC0+c19wYXJlbnQsIHBhdGgpOworCQlzdHJjYXQocGF0aCwgIi8iKTsKKwl9CisJc3RyY2F0KHBhdGgsIHNkLT5zX25hbWUpOworCXJldHVybiBwYXRoOworfQorCisvKioKICAqCXN5c2ZzX2FkZF9vbmUgLSBhZGQgc3lzZnNfZGlyZW50IHRvIHBhcmVudAogICoJQGFjeHQ6IGFkZHJtIGNvbnRleHQgdG8gdXNlCiAgKglAc2Q6IHN5c2ZzX2RpcmVudCB0byBiZSBhZGRlZApAQCAtNDU4LDggKzQ3OCwxNiBAQAogCWludCByZXQ7CiAKIAlyZXQgPSBfX3N5c2ZzX2FkZF9vbmUoYWN4dCwgc2QpOwotCVdBUk4ocmV0ID09IC1FRVhJU1QsIEtFUk5fV0FSTklORyAic3lzZnM6IGR1cGxpY2F0ZSBmaWxlbmFtZSAnJXMnICIKLQkJICAgICAgICJjYW4gbm90IGJlIGNyZWF0ZWRcbiIsIHNkLT5zX25hbWUpOworCWlmIChyZXQgPT0gLUVFWElTVCkgeworCQljaGFyICpwYXRoID0ga3phbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7CisJCVdBUk4oMSwgS0VSTl9XQVJOSU5HCisJCSAgICAgInN5c2ZzOiBjYW5ub3QgY3JlYXRlIGR1cGxpY2F0ZSBmaWxlbmFtZSAnJXMnXG4iLAorCQkgICAgIChwYXRoID09IE5VTEwpID8gc2QtPnNfbmFtZSA6CisJCSAgICAgc3RyY2F0KHN0cmNhdChzeXNmc19wYXRobmFtZShhY3h0LT5wYXJlbnRfc2QsIHBhdGgpLCAiLyIpLAorCQkgICAgICAgICAgICBzZC0+c19uYW1lKSk7CisJCWtmcmVlKHBhdGgpOworCX0KKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU4MSw2ICs2MDksNyBAQAogCiAJCXN5c2ZzX2Ryb3BfZGVudHJ5KHNkKTsKIAkJc3lzZnNfZGVhY3RpdmF0ZShzZCk7CisJCXVubWFwX2Jpbl9maWxlKHNkKTsKIAkJc3lzZnNfcHV0KHNkKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9maWxlLmMgYi9mcy9zeXNmcy9maWxlLmMKaW5kZXggMWY0YTNmOC4uMjg5YzQzYSAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvZmlsZS5jCisrKyBiL2ZzL3N5c2ZzL2ZpbGUuYwpAQCAtNjU5LDEzICs2NTksMTYgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX3JlbW92ZV9maWxlX2Zyb21fZ3JvdXApOwogCiBzdHJ1Y3Qgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfc3RydWN0IHsKLQlzdHJ1Y3Qga29iamVjdCAJCSprb2JqOworCXN0cnVjdCBsaXN0X2hlYWQJd29ya3FfbGlzdDsKKwlzdHJ1Y3Qga29iamVjdAkJKmtvYmo7CiAJdm9pZAkJCSgqZnVuYykodm9pZCAqKTsKIAl2b2lkCQkJKmRhdGE7CiAJc3RydWN0IG1vZHVsZQkJKm93bmVyOwogCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwogfTsKIAorc3RhdGljIERFRklORV9NVVRFWChzeXNmc193b3JrcV9tdXRleCk7CitzdGF0aWMgTElTVF9IRUFEKHN5c2ZzX3dvcmtxKTsKIHN0YXRpYyB2b2lkIHN5c2ZzX3NjaGVkdWxlX2NhbGxiYWNrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja19zdHJ1Y3QgKnNzID0gY29udGFpbmVyX29mKHdvcmssCkBAIC02NzQsNiArNjc3LDkgQEAKIAkoc3MtPmZ1bmMpKHNzLT5kYXRhKTsKIAlrb2JqZWN0X3B1dChzcy0+a29iaik7CiAJbW9kdWxlX3B1dChzcy0+b3duZXIpOworCW11dGV4X2xvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwlsaXN0X2RlbCgmc3MtPndvcmtxX2xpc3QpOworCW11dGV4X3VubG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOwogCWtmcmVlKHNzKTsKIH0KIApAQCAtNjk1LDE1ICs3MDEsMjUgQEAKICAqIHVudGlsIEBmdW5jIHJldHVybnMuCiAgKgogICogUmV0dXJucyAwIGlmIHRoZSByZXF1ZXN0IHdhcyBzdWJtaXR0ZWQsIC1FTk9NRU0gaWYgc3RvcmFnZSBjb3VsZCBub3QKLSAqIGJlIGFsbG9jYXRlZCwgLUVOT0RFViBpZiBhIHJlZmVyZW5jZSB0byBAb3duZXIgaXNuJ3QgYXZhaWxhYmxlLgorICogYmUgYWxsb2NhdGVkLCAtRU5PREVWIGlmIGEgcmVmZXJlbmNlIHRvIEBvd25lciBpc24ndCBhdmFpbGFibGUsCisgKiAtRUFHQUlOIGlmIGEgY2FsbGJhY2sgaGFzIGFscmVhZHkgYmVlbiBzY2hlZHVsZWQgZm9yIEBrb2JqLgogICovCiBpbnQgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2soc3RydWN0IGtvYmplY3QgKmtvYmosIHZvaWQgKCpmdW5jKSh2b2lkICopLAogCQl2b2lkICpkYXRhLCBzdHJ1Y3QgbW9kdWxlICpvd25lcikKIHsKLQlzdHJ1Y3Qgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfc3RydWN0ICpzczsKKwlzdHJ1Y3Qgc3lzZnNfc2NoZWR1bGVfY2FsbGJhY2tfc3RydWN0ICpzcywgKnRtcDsKIAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3MsIHRtcCwgJnN5c2ZzX3dvcmtxLCB3b3JrcV9saXN0KQorCQlpZiAoc3MtPmtvYmogPT0ga29iaikgeworCQkJbXV0ZXhfdW5sb2NrKCZzeXNmc193b3JrcV9tdXRleCk7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCW11dGV4X3VubG9jaygmc3lzZnNfd29ya3FfbXV0ZXgpOworCiAJc3MgPSBrbWFsbG9jKHNpemVvZigqc3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNzKSB7CiAJCW1vZHVsZV9wdXQob3duZXIpOwpAQCAtNzE1LDYgKzczMSwxMCBAQAogCXNzLT5kYXRhID0gZGF0YTsKIAlzcy0+b3duZXIgPSBvd25lcjsKIAlJTklUX1dPUksoJnNzLT53b3JrLCBzeXNmc19zY2hlZHVsZV9jYWxsYmFja193b3JrKTsKKwlJTklUX0xJU1RfSEVBRCgmc3MtPndvcmtxX2xpc3QpOworCW11dGV4X2xvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZzcy0+d29ya3FfbGlzdCwgJnN5c2ZzX3dvcmtxKTsKKwltdXRleF91bmxvY2soJnN5c2ZzX3dvcmtxX211dGV4KTsKIAlzY2hlZHVsZV93b3JrKCZzcy0+d29yayk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9pbm9kZS5jIGIvZnMvc3lzZnMvaW5vZGUuYwppbmRleCBkZmEzZDk0Li41NTVmMGZmIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9pbm9kZS5jCisrKyBiL2ZzL3N5c2ZzL2lub2RlLmMKQEAgLTE0Nyw2ICsxNDcsNyBAQAogewogCXN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0cjsKIAorCWlub2RlLT5pX3ByaXZhdGUgPSBzeXNmc19nZXQoc2QpOwogCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJnN5c2ZzX2FvcHM7CiAJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZzeXNmc19iYWNraW5nX2Rldl9pbmZvOwogCWlub2RlLT5pX29wID0gJnN5c2ZzX2lub2RlX29wZXJhdGlvbnM7CkBAIC0yMTQsNiArMjE1LDIyIEBACiAJcmV0dXJuIGlub2RlOwogfQogCisvKgorICogVGhlIHN5c2ZzX2RpcmVudCBzZXJ2ZXMgYXMgYm90aCBhbiBpbm9kZSBhbmQgYSBkaXJlY3RvcnkgZW50cnkgZm9yIHN5c2ZzLgorICogVG8gcHJldmVudCB0aGUgc3lzZnMgaW5vZGUgbnVtYmVycyBmcm9tIGJlaW5nIGZyZWVkIHByZW1hdHVyZWx5IHdlIHRha2UgYQorICogcmVmZXJlbmNlIHRvIHN5c2ZzX2RpcmVudCBmcm9tIHRoZSBzeXNmcyBpbm9kZS4gIEEKKyAqIHN1cGVyX29wZXJhdGlvbnMuZGVsZXRlX2lub2RlKCkgaW1wbGVtZW50YXRpb24gaXMgbmVlZGVkIHRvIGRyb3AgdGhhdAorICogcmVmZXJlbmNlIHVwb24gaW5vZGUgZGVzdHJ1Y3Rpb24uCisgKi8KK3ZvaWQgc3lzZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QgID0gaW5vZGUtPmlfcHJpdmF0ZTsKKworCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKwljbGVhcl9pbm9kZShpbm9kZSk7CisJc3lzZnNfcHV0KHNkKTsKK30KKwogaW50IHN5c2ZzX2hhc2hfYW5kX3JlbW92ZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpkaXJfc2QsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHN5c2ZzX2FkZHJtX2N4dCBhY3h0OwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvbW91bnQuYyBiL2ZzL3N5c2ZzL21vdW50LmMKaW5kZXggYWIzNDNlMy4uNDk3NDk5NSAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvbW91bnQuYworKysgYi9mcy9zeXNmcy9tb3VudC5jCkBAIC0xNywxMSArMTcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAKICNpbmNsdWRlICJzeXNmcy5oIgogCi0vKiBSYW5kb20gbWFnaWMgbnVtYmVyICovCi0jZGVmaW5lIFNZU0ZTX01BR0lDIDB4NjI2NTY1NzIKIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqc3lzZnNfbW91bnQ7CiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzeXNmc19zYiA9IE5VTEw7CkBAIC0zMCw2ICsyOSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc3lzZnNfb3BzID0gewogCS5zdGF0ZnMJCT0gc2ltcGxlX3N0YXRmcywKIAkuZHJvcF9pbm9kZQk9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAorCS5kZWxldGVfaW5vZGUJPSBzeXNmc19kZWxldGVfaW5vZGUsCiB9OwogCiBzdHJ1Y3Qgc3lzZnNfZGlyZW50IHN5c2ZzX3Jvb3QgPSB7CkBAIC01Myw3ICs1Myw5IEBACiAJc3lzZnNfc2IgPSBzYjsKIAogCS8qIGdldCByb290IGlub2RlLCBpbml0aWFsaXplIGFuZCB1bmxvY2sgaXQgKi8KKwltdXRleF9sb2NrKCZzeXNmc19tdXRleCk7CiAJaW5vZGUgPSBzeXNmc19nZXRfaW5vZGUoJnN5c2ZzX3Jvb3QpOworCW11dGV4X3VubG9jaygmc3lzZnNfbXV0ZXgpOwogCWlmICghaW5vZGUpIHsKIAkJcHJfZGVidWcoInN5c2ZzOiBjb3VsZCBub3QgZ2V0IHJvb3QgaW5vZGVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IDkzYzZkNmIuLjNmYTBkOTg0IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9zeXNmcy5oCisrKyBiL2ZzL3N5c2ZzL3N5c2ZzLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogc3RydWN0IHN5c2ZzX2VsZW1fYmluX2F0dHIgewogCXN0cnVjdCBiaW5fYXR0cmlidXRlCSpiaW5fYXR0cjsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAlidWZmZXJzOwogfTsKIAogLyoKQEAgLTE0NSw2ICsxNDYsNyBAQAogICogaW5vZGUuYwogICovCiBzdHJ1Y3QgaW5vZGUgKnN5c2ZzX2dldF9pbm9kZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7Cit2b2lkIHN5c2ZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludCBzeXNmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cik7CiBpbnQgc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKHN0cnVjdCBzeXNmc19kaXJlbnQgKmRpcl9zZCwgY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgc3lzZnNfaW5vZGVfaW5pdCh2b2lkKTsKQEAgLTE2Myw2ICsxNjUsNyBAQAogICogYmluLmMKICAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmluX2ZvcHM7Cit2b2lkIHVubWFwX2Jpbl9maWxlKHN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QpOwogCiAvKgogICogc3ltbGluay5jCmRpZmYgLS1naXQgYS9mcy9zeXN2L25hbWVpLmMgYi9mcy9zeXN2L25hbWVpLmMKaW5kZXggYTFmMWVmMy4uMzNlMDQ3YiAxMDA2NDQKLS0tIGEvZnMvc3lzdi9uYW1laS5jCisrKyBiL2ZzL3N5c3YvbmFtZWkuYwpAQCAtMzgsNyArMzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc3lzdl9kZW50cnlfb3BlcmF0aW9ucyA9IHsKK2NvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBzeXN2X2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2hhc2gJCT0gc3lzdl9oYXNoLAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvc3lzdi9zeXN2LmggYi9mcy9zeXN2L3N5c3YuaAppbmRleCAzOGViZTNmLi41Nzg0YTMxIDEwMDY0NAotLS0gYS9mcy9zeXN2L3N5c3YuaAorKysgYi9mcy9zeXN2L3N5c3YuaApAQCAtMTcwLDcgKzE3MCw3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeXN2X2Rpcl9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgc3lzdl9hb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHN5c3Zfc29wczsKLWV4dGVybiBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc3lzdl9kZW50cnlfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc3lzdl9kZW50cnlfb3BlcmF0aW9uczsKIAogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3N1cGVyLmMgYi9mcy91Ymlmcy9zdXBlci5jCmluZGV4IDExODJiNjYuLmM1Yzk4MzUgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL3N1cGVyLmMKKysrIGIvZnMvdWJpZnMvc3VwZXIuYwpAQCAtMjAzNCw3ICsyMDM0LDggQEAKIAkvKiAnZmlsbF9zdXBlcigpJyBvcGVucyB1YmkgYWdhaW4gc28gd2UgbXVzdCBjbG9zZSBpdCBoZXJlICovCiAJdWJpX2Nsb3NlX3ZvbHVtZSh1YmkpOwogCi0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXJldHVybiAwOwogCiBvdXRfZGVhY3Q6CiAJdXBfd3JpdGUoJnNiLT5zX3Vtb3VudCk7CmRpZmYgLS1naXQgYS9mcy91ZGYvYmFsbG9jLmMgYi9mcy91ZGYvYmFsbG9jLmMKaW5kZXggMWI4MDliZDQuLjJiYjc4OGEgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9iYWxsb2MuYworKysgYi9mcy91ZGYvYmFsbG9jLmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogCQkJCQkoKGNoYXIgKiliaC0+Yl9kYXRhKVsoYml0ICsgaSkgPj4gM10pOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoaW5vZGUpCi0JCQkJCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIDEpOworCQkJCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJCQkJdWRmX2FkZF9mcmVlX3NwYWNlKHNiaSwgc2JpLT5zX3BhcnRpdGlvbiwgMSk7CiAJCQl9CiAJCX0KQEAgLTI2MSwxMSArMjYxLDExIEBACiAJCXdoaWxlIChiaXQgPCAoc2ItPnNfYmxvY2tzaXplIDw8IDMpICYmIGJsb2NrX2NvdW50ID4gMCkgewogCQkJaWYgKCF1ZGZfdGVzdF9iaXQoYml0LCBiaC0+Yl9kYXRhKSkKIAkJCQlnb3RvIG91dDsKLQkJCWVsc2UgaWYgKERRVU9UX1BSRUFMTE9DX0JMT0NLKGlub2RlLCAxKSkKKwkJCWVsc2UgaWYgKHZmc19kcV9wcmVhbGxvY19ibG9jayhpbm9kZSwgMSkpCiAJCQkJZ290byBvdXQ7CiAJCQllbHNlIGlmICghdWRmX2NsZWFyX2JpdChiaXQsIGJoLT5iX2RhdGEpKSB7CiAJCQkJdWRmX2RlYnVnKCJiaXQgYWxyZWFkeSBjbGVhcmVkIGZvciBibG9jayAlZFxuIiwgYml0KTsKLQkJCQlEUVVPVF9GUkVFX0JMT0NLKGlub2RlLCAxKTsKKwkJCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCQlibG9ja19jb3VudC0tOwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJLyoKIAkgKiBDaGVjayBxdW90YSBmb3IgYWxsb2NhdGlvbiBvZiB0aGlzIGJsb2NrLgogCSAqLwotCWlmIChpbm9kZSAmJiBEUVVPVF9BTExPQ19CTE9DSyhpbm9kZSwgMSkpIHsKKwlpZiAoaW5vZGUgJiYgdmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCAxKSkgewogCQltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CiAJCSplcnIgPSAtRURRVU9UOwogCQlyZXR1cm4gMDsKQEAgLTQ1Miw3ICs0NTIsNyBAQAogCS8qIFdlIGRvIHRoaXMgdXAgZnJvbnQgLSBUaGVyZSBhcmUgc29tZSBlcnJvciBjb25kaXRpb25zIHRoYXQKIAkgICBjb3VsZCBvY2N1cmUsIGJ1dC4uIG9oIHdlbGwgKi8KIAlpZiAoaW5vZGUpCi0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIGNvdW50KTsKKwkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIGNvdW50KTsKIAlpZiAodWRmX2FkZF9mcmVlX3NwYWNlKHNiaSwgc2JpLT5zX3BhcnRpdGlvbiwgY291bnQpKQogCQltYXJrX2J1ZmZlcl9kaXJ0eShzYmktPnNfbHZpZF9iaCk7CiAKQEAgLTcwMCw3ICs3MDAsNyBAQAogCQllcG9zLm9mZnNldCAtPSBhZHNpemU7CiAKIAkJYWxsb2NfY291bnQgPSAoZWxlbiA+PiBzYi0+c19ibG9ja3NpemVfYml0cyk7Ci0JCWlmIChpbm9kZSAmJiBEUVVPVF9QUkVBTExPQ19CTE9DSyhpbm9kZSwKKwkJaWYgKGlub2RlICYmIHZmc19kcV9wcmVhbGxvY19ibG9jayhpbm9kZSwKIAkJCWFsbG9jX2NvdW50ID4gYmxvY2tfY291bnQgPyBibG9ja19jb3VudCA6IGFsbG9jX2NvdW50KSkKIAkJCWFsbG9jX2NvdW50ID0gMDsKIAkJZWxzZSBpZiAoYWxsb2NfY291bnQgPiBibG9ja19jb3VudCkgewpAQCAtODA2LDcgKzgwNiw3IEBACiAJZ29hbF9lbG9jLmxvZ2ljYWxCbG9ja051bSsrOwogCWdvYWxfZWxlbiAtPSBzYi0+c19ibG9ja3NpemU7CiAKLQlpZiAoaW5vZGUgJiYgRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIDEpKSB7CisJaWYgKGlub2RlICYmIHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgMSkpIHsKIAkJYnJlbHNlKGdvYWxfZXBvcy5iaCk7CiAJCW11dGV4X3VubG9jaygmc2JpLT5zX2FsbG9jX211dGV4KTsKIAkJKmVyciA9IC1FRFFVT1Q7CmRpZmYgLS1naXQgYS9mcy91ZGYvaWFsbG9jLmMgYi9mcy91ZGYvaWFsbG9jLmMKaW5kZXggMzFmYzg0Mi4uNDdkYmU1NiAxMDA2NDQKLS0tIGEvZnMvdWRmL2lhbGxvYy5jCisrKyBiL2ZzL3VkZi9pYWxsb2MuYwpAQCAtMzYsOCArMzYsOCBAQAogCSAqIE5vdGU6IHdlIG11c3QgZnJlZSBhbnkgcXVvdGEgYmVmb3JlIGxvY2tpbmcgdGhlIHN1cGVyYmxvY2ssCiAJICogYXMgd3JpdGluZyB0aGUgcXVvdGEgdG8gZGlzayBtYXkgbmVlZCB0aGUgbG9jayBhcyB3ZWxsLgogCSAqLwotCURRVU9UX0ZSRUVfSU5PREUoaW5vZGUpOwotCURRVU9UX0RST1AoaW5vZGUpOworCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwl2ZnNfZHFfZHJvcChpbm9kZSk7CiAKIAljbGVhcl9pbm9kZShpbm9kZSk7CiAKQEAgLTE1NCw4ICsxNTQsOCBAQAogCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAotCWlmIChEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkpIHsKLQkJRFFVT1RfRFJPUChpbm9kZSk7CisJaWYgKHZmc19kcV9hbGxvY19pbm9kZShpbm9kZSkpIHsKKwkJdmZzX2RxX2Ryb3AoaW5vZGUpOwogCQlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEE7CiAJCWlub2RlLT5pX25saW5rID0gMDsKIAkJaXB1dChpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy91ZnMvYmFsbG9jLmMgYi9mcy91ZnMvYmFsbG9jLmMKaW5kZXggMGQ5YWRhMS4uNTRjMTZlYyAxMDA2NDQKLS0tIGEvZnMvdWZzL2JhbGxvYy5jCisrKyBiL2ZzL3Vmcy9iYWxsb2MuYwpAQCAtODUsNyArODUsNyBAQAogCQkJCSAgICJiaXQgYWxyZWFkeSBjbGVhcmVkIGZvciBmcmFnbWVudCAldSIsIGkpOwogCX0KIAkKLQlEUVVPVF9GUkVFX0JMT0NLIChpbm9kZSwgY291bnQpOworCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBjb3VudCk7CiAKIAkKIAlmczMyX2FkZChzYiwgJnVjZy0+Y2dfY3MuY3NfbmZmcmVlLCBjb3VudCk7CkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJdWJoX3NldGJsb2NrKFVDUElfVUJIKHVjcGkpLCB1Y3BpLT5jX2ZyZWVvZmYsIGJsa25vKTsKIAkJaWYgKChVRlNfU0Ioc2IpLT5zX2ZsYWdzICYgVUZTX0NHX01BU0spID09IFVGU19DR180NEJTRCkKIAkJCXVmc19jbHVzdGVyYWNjdCAoc2IsIHVjcGksIGJsa25vLCAxKTsKLQkJRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgdXNwaS0+c19mcGIpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgdXNwaS0+c19mcGIpOwogCiAJCWZzMzJfYWRkKHNiLCAmdWNnLT5jZ19jcy5jc19uYmZyZWUsIDEpOwogCQl1c3BpLT5jc190b3RhbC5jc19uYmZyZWUrKzsKQEAgLTU1Niw3ICs1NTYsNyBAQAogCQlmczMyX2FkZChzYiwgJnVjZy0+Y2dfZnJzdW1bZnJhZ3NpemUgLSBjb3VudF0sIDEpOwogCWZvciAoaSA9IG9sZGNvdW50OyBpIDwgbmV3Y291bnQ7IGkrKykKIAkJdWJoX2NscmJpdCAoVUNQSV9VQkgodWNwaSksIHVjcGktPmNfZnJlZW9mZiwgZnJhZ25vICsgaSk7Ci0JaWYoRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIGNvdW50KSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIGNvdW50KSkgewogCQkqZXJyID0gLUVEUVVPVDsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNjY0LDcgKzY2NCw3IEBACiAJCWZvciAoaSA9IGNvdW50OyBpIDwgdXNwaS0+c19mcGI7IGkrKykKIAkJCXViaF9zZXRiaXQgKFVDUElfVUJIKHVjcGkpLCB1Y3BpLT5jX2ZyZWVvZmYsIGdvYWwgKyBpKTsKIAkJaSA9IHVzcGktPnNfZnBiIC0gY291bnQ7Ci0JCURRVU9UX0ZSRUVfQkxPQ0soaW5vZGUsIGkpOworCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgaSk7CiAKIAkJZnMzMl9hZGQoc2IsICZ1Y2ctPmNnX2NzLmNzX25mZnJlZSwgaSk7CiAJCXVzcGktPmNzX3RvdGFsLmNzX25mZnJlZSArPSBpOwpAQCAtNjc2LDcgKzY3Niw3IEBACiAJcmVzdWx0ID0gdWZzX2JpdG1hcF9zZWFyY2ggKHNiLCB1Y3BpLCBnb2FsLCBhbGxvY3NpemUpOwogCWlmIChyZXN1bHQgPT0gSU5WQkxPQ0spCiAJCXJldHVybiAwOwotCWlmKERRVU9UX0FMTE9DX0JMT0NLKGlub2RlLCBjb3VudCkpIHsKKwlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCBjb3VudCkpIHsKIAkJKmVyciA9IC1FRFFVT1Q7CiAJCXJldHVybiAwOwogCX0KQEAgLTc0Nyw3ICs3NDcsNyBAQAogCXViaF9jbHJibG9jayAoVUNQSV9VQkgodWNwaSksIHVjcGktPmNfZnJlZW9mZiwgYmxrbm8pOwogCWlmICgoVUZTX1NCKHNiKS0+c19mbGFncyAmIFVGU19DR19NQVNLKSA9PSBVRlNfQ0dfNDRCU0QpCiAJCXVmc19jbHVzdGVyYWNjdCAoc2IsIHVjcGksIGJsa25vLCAtMSk7Ci0JaWYoRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIHVzcGktPnNfZnBiKSkgeworCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIHVzcGktPnNfZnBiKSkgewogCQkqZXJyID0gLUVEUVVPVDsKIAkJcmV0dXJuIElOVkJMT0NLOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3Vmcy9pYWxsb2MuYyBiL2ZzL3Vmcy9pYWxsb2MuYwppbmRleCA2ZjVkY2YwLi4zNTI3YzAwIDEwMDY0NAotLS0gYS9mcy91ZnMvaWFsbG9jLmMKKysrIGIvZnMvdWZzL2lhbGxvYy5jCkBAIC05NSw4ICs5NSw4IEBACiAKIAlpc19kaXJlY3RvcnkgPSBTX0lTRElSKGlub2RlLT5pX21vZGUpOwogCi0JRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7Ci0JRFFVT1RfRFJPUChpbm9kZSk7CisJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOworCXZmc19kcV9kcm9wKGlub2RlKTsKIAogCWNsZWFyX2lub2RlIChpbm9kZSk7CiAKQEAgLTM1NSw4ICszNTUsOCBAQAogCiAJdW5sb2NrX3N1cGVyIChzYik7CiAKLQlpZiAoRFFVT1RfQUxMT0NfSU5PREUoaW5vZGUpKSB7Ci0JCURRVU9UX0RST1AoaW5vZGUpOworCWlmICh2ZnNfZHFfYWxsb2NfaW5vZGUoaW5vZGUpKSB7CisJCXZmc19kcV9kcm9wKGlub2RlKTsKIAkJZXJyID0gLUVEUVVPVDsKIAkJZ290byBmYWlsX3dpdGhvdXRfdW5sb2NrOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3Vmcy9pbm9kZS5jIGIvZnMvdWZzL2lub2RlLmMKaW5kZXggMzlmODc3OC4uM2QyNTEyYyAxMDA2NDQKLS0tIGEvZnMvdWZzL2lub2RlLmMKKysrIGIvZnMvdWZzL2lub2RlLmMKQEAgLTYyMiw3ICs2MjIsNiBAQAogCXN0cnVjdCB1ZnNfaW5vZGVfaW5mbyAqdWZzaSA9IFVGU19JKGlub2RlKTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJbW9kZV90IG1vZGU7Ci0JdW5zaWduZWQgaTsKIAogCS8qCiAJICogQ29weSBkYXRhIHRvIHRoZSBpbi1jb3JlIGlub2RlLgpAQCAtNjU1LDExICs2NTQsMTIgQEAKIAogCQogCWlmIChTX0lTQ0hSKG1vZGUpIHx8IFNfSVNCTEsobW9kZSkgfHwgaW5vZGUtPmlfYmxvY2tzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAoVUZTX05EQUREUiArIFVGU19OSU5ESVIpOyBpKyspCi0JCQl1ZnNpLT5pX3UxLmlfZGF0YVtpXSA9IHVmc19pbm9kZS0+dWlfdTIudWlfYWRkci51aV9kYltpXTsKKwkJbWVtY3B5KHVmc2ktPmlfdTEuaV9kYXRhLCAmdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLAorCQkgICAgICAgc2l6ZW9mKHVmc19pbm9kZS0+dWlfdTIudWlfYWRkcikpOwogCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAoVUZTX05EQUREUiArIFVGU19OSU5ESVIpICogNDsgaSsrKQotCQkJdWZzaS0+aV91MS5pX3N5bWxpbmtbaV0gPSB1ZnNfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmtbaV07CisJCW1lbWNweSh1ZnNpLT5pX3UxLmlfc3ltbGluaywgdWZzX2lub2RlLT51aV91Mi51aV9zeW1saW5rLAorCQkgICAgICAgc2l6ZW9mKHVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGluaykgLSAxKTsKKwkJdWZzaS0+aV91MS5pX3N5bWxpbmtbc2l6ZW9mKHVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGluaykgLSAxXSA9IDA7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNjY5LDcgKzY2OSw2IEBACiAJc3RydWN0IHVmc19pbm9kZV9pbmZvICp1ZnNpID0gVUZTX0koaW5vZGUpOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAltb2RlX3QgbW9kZTsKLQl1bnNpZ25lZCBpOwogCiAJVUZTRCgiUmVhZGluZyB1ZnMyIGlub2RlLCBpbm8gJWx1XG4iLCBpbm9kZS0+aV9pbm8pOwogCS8qCkBAIC03MDQsMTIgKzcwMywxMiBAQAogCSovCiAKIAlpZiAoU19JU0NIUihtb2RlKSB8fCBTX0lTQkxLKG1vZGUpIHx8IGlub2RlLT5pX2Jsb2NrcykgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKTsgaSsrKQotCQkJdWZzaS0+aV91MS51Ml9pX2RhdGFbaV0gPQotCQkJCXVmczJfaW5vZGUtPnVpX3UyLnVpX2FkZHIudWlfZGJbaV07CisJCW1lbWNweSh1ZnNpLT5pX3UxLnUyX2lfZGF0YSwgJnVmczJfaW5vZGUtPnVpX3UyLnVpX2FkZHIsCisJCSAgICAgICBzaXplb2YodWZzMl9pbm9kZS0+dWlfdTIudWlfYWRkcikpOwogCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAoVUZTX05EQUREUiArIFVGU19OSU5ESVIpICogNDsgaSsrKQotCQkJdWZzaS0+aV91MS5pX3N5bWxpbmtbaV0gPSB1ZnMyX2lub2RlLT51aV91Mi51aV9zeW1saW5rW2ldOworCQltZW1jcHkodWZzaS0+aV91MS5pX3N5bWxpbmssIHVmczJfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmssCisJCSAgICAgICBzaXplb2YodWZzMl9pbm9kZS0+dWlfdTIudWlfc3ltbGluaykgLSAxKTsKKwkJdWZzaS0+aV91MS5pX3N5bWxpbmtbc2l6ZW9mKHVmczJfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmspIC0gMV0gPSAwOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTc4MSw3ICs3ODAsNiBAQAogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKICAJc3RydWN0IHVmc19pbm9kZV9pbmZvICp1ZnNpID0gVUZTX0koaW5vZGUpOwotIAl1bnNpZ25lZCBpOwogCiAJdWZzX2lub2RlLT51aV9tb2RlID0gY3B1X3RvX2ZzMTYoc2IsIGlub2RlLT5pX21vZGUpOwogCXVmc19pbm9kZS0+dWlfbmxpbmsgPSBjcHVfdG9fZnMxNihzYiwgaW5vZGUtPmlfbmxpbmspOwpAQCAtODA5LDEyICs4MDcsMTIgQEAKIAkJLyogdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLnVpX2RiWzBdID0gY3B1X3RvX2ZzMzIoc2IsIGlub2RlLT5pX3JkZXYpOyAqLwogCQl1ZnNfaW5vZGUtPnVpX3UyLnVpX2FkZHIudWlfZGJbMF0gPSB1ZnNpLT5pX3UxLmlfZGF0YVswXTsKIAl9IGVsc2UgaWYgKGlub2RlLT5pX2Jsb2NrcykgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKTsgaSsrKQotCQkJdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLnVpX2RiW2ldID0gdWZzaS0+aV91MS5pX2RhdGFbaV07CisJCW1lbWNweSgmdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLCB1ZnNpLT5pX3UxLmlfZGF0YSwKKwkJICAgICAgIHNpemVvZih1ZnNfaW5vZGUtPnVpX3UyLnVpX2FkZHIpKTsKIAl9CiAJZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAoVUZTX05EQUREUiArIFVGU19OSU5ESVIpICogNDsgaSsrKQotCQkJdWZzX2lub2RlLT51aV91Mi51aV9zeW1saW5rW2ldID0gdWZzaS0+aV91MS5pX3N5bWxpbmtbaV07CisJCW1lbWNweSgmdWZzX2lub2RlLT51aV91Mi51aV9zeW1saW5rLCB1ZnNpLT5pX3UxLmlfc3ltbGluaywKKwkJICAgICAgIHNpemVvZih1ZnNfaW5vZGUtPnVpX3UyLnVpX3N5bWxpbmspKTsKIAl9CiAKIAlpZiAoIWlub2RlLT5pX25saW5rKQpAQCAtODI1LDcgKzgyMyw2IEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogIAlzdHJ1Y3QgdWZzX2lub2RlX2luZm8gKnVmc2kgPSBVRlNfSShpbm9kZSk7Ci0gCXVuc2lnbmVkIGk7CiAKIAlVRlNEKCJFTlRFUlxuIik7CiAJdWZzX2lub2RlLT51aV9tb2RlID0gY3B1X3RvX2ZzMTYoc2IsIGlub2RlLT5pX21vZGUpOwpAQCAtODUwLDExICs4NDcsMTEgQEAKIAkJLyogdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLnVpX2RiWzBdID0gY3B1X3RvX2ZzMzIoc2IsIGlub2RlLT5pX3JkZXYpOyAqLwogCQl1ZnNfaW5vZGUtPnVpX3UyLnVpX2FkZHIudWlfZGJbMF0gPSB1ZnNpLT5pX3UxLnUyX2lfZGF0YVswXTsKIAl9IGVsc2UgaWYgKGlub2RlLT5pX2Jsb2NrcykgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKTsgaSsrKQotCQkJdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLnVpX2RiW2ldID0gdWZzaS0+aV91MS51Ml9pX2RhdGFbaV07CisJCW1lbWNweSgmdWZzX2lub2RlLT51aV91Mi51aV9hZGRyLCB1ZnNpLT5pX3UxLnUyX2lfZGF0YSwKKwkJICAgICAgIHNpemVvZih1ZnNfaW5vZGUtPnVpX3UyLnVpX2FkZHIpKTsKIAl9IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgKFVGU19OREFERFIgKyBVRlNfTklORElSKSAqIDQ7IGkrKykKLQkJCXVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGlua1tpXSA9IHVmc2ktPmlfdTEuaV9zeW1saW5rW2ldOworCQltZW1jcHkoJnVmc19pbm9kZS0+dWlfdTIudWlfc3ltbGluaywgdWZzaS0+aV91MS5pX3N5bWxpbmssCisJCSAgICAgICBzaXplb2YodWZzX2lub2RlLT51aV91Mi51aV9zeW1saW5rKSk7CiAgCX0KIAogCWlmICghaW5vZGUtPmlfbmxpbmspCmRpZmYgLS1naXQgYS9mcy91ZnMvbmFtZWkuYyBiL2ZzL3Vmcy9uYW1laS5jCmluZGV4IGUzYTliMWYuLjIzMTE5ZmUgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9uYW1laS5jCisrKyBiL2ZzL3Vmcy9uYW1laS5jCkBAIC0xNDcsNyArMTQ3LDcgQEAKIAl9IGVsc2UgewogCQkvKiBmYXN0IHN5bWxpbmsgKi8KIAkJaW5vZGUtPmlfb3AgPSAmdWZzX2Zhc3Rfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwotCQltZW1jcHkoKGNoYXIqKSZVRlNfSShpbm9kZSktPmlfdTEuaV9kYXRhLHN5bW5hbWUsbCk7CisJCW1lbWNweShVRlNfSShpbm9kZSktPmlfdTEuaV9zeW1saW5rLCBzeW1uYW1lLCBsKTsKIAkJaW5vZGUtPmlfc2l6ZSA9IGwtMTsKIAl9CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy91ZnMvc3VwZXIuYyBiL2ZzL3Vmcy9zdXBlci5jCmluZGV4IGU2NTIxMmQuLmUxYzFmYzUgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9zdXBlci5jCisrKyBiL2ZzL3Vmcy9zdXBlci5jCkBAIC00MSw3ICs0MSw3IEBACiAgKiBTdGVmYW4gUmVpbmF1ZXIgPHN0ZXBhbkBob21lLmN1bHR1cmUubWlwdC5ydT4KICAqCiAgKiBNb2R1bGUgdXNhZ2UgY291bnRzIGFkZGVkIG9uIDk2LzA0LzI5IGJ5Ci0gKiBHZXJ0amFuIHZhbiBXaW5nZXJkZSA8Z2VydGphbkBjcy52dS5ubD4KKyAqIEdlcnRqYW4gdmFuIFdpbmdlcmRlIDxnd2luZ2VyZGVAZ21haWwuY29tPgogICoKICAqIENsZWFuIHN3YWIgc3VwcG9ydCBvbiAxOTk3MDQwNiBieQogICogRnJhbmNvaXMtUmVuZSBSaWRlYXUgPGZhcmVAdHVuZXMub3JnPgpAQCAtNjM2LDYgKzYzNiw3IEBACiAJdW5zaWduZWQgYmxvY2tfc2l6ZSwgc3VwZXJfYmxvY2tfc2l6ZTsKIAl1bnNpZ25lZCBmbGFnczsKIAl1bnNpZ25lZCBzdXBlcl9ibG9ja19vZmZzZXQ7CisJdW5zaWduZWQgbWF4c3ltbGVuOwogCWludCByZXQgPSAtRUlOVkFMOwogCiAJdXNwaSA9IE5VTEw7CkBAIC0xMDY5LDYgKzEwNzAsMTYgQEAKIAkJdXNwaS0+c19tYXhzeW1saW5rbGVuID0KIAkJICAgIGZzMzJfdG9fY3B1KHNiLCB1c2IzLT5mc191bjIuZnNfNDQuZnNfbWF4c3ltbGlua2xlbik7CiAKKwlpZiAodXNwaS0+ZnNfbWFnaWMgPT0gVUZTMl9NQUdJQykKKwkJbWF4c3ltbGVuID0gMiAqIDQgKiAoVUZTX05EQUREUiArIFVGU19OSU5ESVIpOworCWVsc2UKKwkJbWF4c3ltbGVuID0gNCAqIChVRlNfTkRBRERSICsgVUZTX05JTkRJUik7CisJaWYgKHVzcGktPnNfbWF4c3ltbGlua2xlbiA+IG1heHN5bWxlbikgeworCQl1ZnNfd2FybmluZyhzYiwgX19mdW5jX18sICJ1ZnNfcmVhZF9zdXBlcjogZXhjZXNzaXZlIG1heGltdW0gIgorCQkJICAgICJmYXN0IHN5bWxpbmsgc2l6ZSAoJXUpXG4iLCB1c3BpLT5zX21heHN5bWxpbmtsZW4pOworCQl1c3BpLT5zX21heHN5bWxpbmtsZW4gPSBtYXhzeW1sZW47CisJfQorCiAJaW5vZGUgPSB1ZnNfaWdldChzYiwgVUZTX1JPT1RJTk8pOwogCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCXJldCA9IFBUUl9FUlIoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvdWZzL3Vmcy5oIGIvZnMvdWZzL3Vmcy5oCmluZGV4IDExYzAzNTEuLjY5YjM0MjcgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy91ZnMuaAorKysgYi9mcy91ZnMvdWZzLmgKQEAgLTIzLDcgKzIzLDcgQEAKIHN0cnVjdCB1ZnNfaW5vZGVfaW5mbyB7CiAJdW5pb24gewogCQlfX2ZzMzIJaV9kYXRhWzE1XTsKLQkJX191OAlpX3N5bWxpbmtbNCoxNV07CisJCV9fdTgJaV9zeW1saW5rWzIgKiA0ICogMTVdOwogCQlfX2ZzNjQJdTJfaV9kYXRhWzE1XTsKIAl9IGlfdTE7CiAJX191MzIJaV9mbGFnczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcmVncy1zM2MyNDEyLWlpcy5oIGIvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1ZDQwNTguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9yZWdzLXMzYzI0MTItaWlzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MyNHh4L3JlZ3MtczNjMjQxMi1paXMuaAotICoKLSAqIENvcHlyaWdodCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFMzQzI0MTIgSUlTIHJlZ2lzdGVyIGRlZmluaXRpb24KLSovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9SRUdTX1MzQzI0MTJfSUlTX0gKLSNkZWZpbmUgX19BU01fQVJDSF9SRUdTX1MzQzI0MTJfSUlTX0gKLQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTgkJCSgweDAwKQotI2RlZmluZSBTM0MyNDEyX0lJU01PRAkJCSgweDA0KQotI2RlZmluZSBTM0MyNDEyX0lJU0ZJQwkJCSgweDA4KQotI2RlZmluZSBTM0MyNDEyX0lJU1BTUgkJCSgweDBDKQotI2RlZmluZSBTM0MyNDEyX0lJU1RYRAkJCSgweDEwKQotI2RlZmluZSBTM0MyNDEyX0lJU1JYRAkJCSgweDE0KQotCi0jZGVmaW5lIFMzQzI0MTJfSUlTQ09OX0xSSU5ERVgJCSgxIDw8IDExKQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9UWEZJRk9fRU1QVFkJKDEgPDwgMTApCi0jZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1JYRklGT19FTVBUWQkoMSA8PCA5KQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9UWEZJRk9fRlVMTAkoMSA8PCA4KQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9SWEZJRk9fRlVMTAkoMSA8PCA3KQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9UWERNQV9QQVVTRQkoMSA8PCA2KQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9SWERNQV9QQVVTRQkoMSA8PCA1KQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9UWENIX1BBVVNFCSgxIDw8IDQpCi0jZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1JYQ0hfUEFVU0UJKDEgPDwgMykKLSNkZWZpbmUgUzNDMjQxMl9JSVNDT05fVFhETUFfQUNUSVZFCSgxIDw8IDIpCi0jZGVmaW5lIFMzQzI0MTJfSUlTQ09OX1JYRE1BX0FDVElWRQkoMSA8PCAxKQotI2RlZmluZSBTM0MyNDEyX0lJU0NPTl9JSVNfQUNUSVZFCSgxIDw8IDApCi0KLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX0lOVEVSTkFMCSgwIDw8IDEwKQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9NQVNURVJfRVhURVJOQUwJKDEgPDwgMTApCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1NMQVZFCQkoMiA8PCAxMCkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTUFTVEVSX01BU0sJKDMgPDwgMTApCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01PREVfVFhPTkxZCSgwIDw8IDgpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01PREVfUlhPTkxZCSgxIDw8IDgpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX01PREVfVFhSWAkoMiA8PCA4KQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9NT0RFX01BU0sJKDMgPDwgOCkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTFJfTExPVwkJKDAgPDwgNykKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfTFJfUkxPVwkJKDEgPDwgNykKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX0lJUwkJKDAgPDwgNSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX01TQgkJKDAgPDwgNSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX0xTQgkJKDAgPDwgNSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfU0RGX01BU0sJCSgzIDw8IDUpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1JDTEtfMjU2RlMJKDAgPDwgMykKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfUkNMS181MTJGUwkoMSA8PCAzKQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9SQ0xLXzM4NEZTCSgyIDw8IDMpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX1JDTEtfNzY4RlMJKDMgPDwgMykKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfUkNMS19NQVNLIAkoMyA8PCAzKQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9CQ0xLXzMyRlMJKDAgPDwgMSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfQkNMS180OEZTCSgxIDw8IDEpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EX0JDTEtfMTZGUwkoMiA8PCAxKQotI2RlZmluZSBTM0MyNDEyX0lJU01PRF9CQ0xLXzI0RlMJKDMgPDwgMSkKLSNkZWZpbmUgUzNDMjQxMl9JSVNNT0RfQkNMS19NQVNLCSgzIDw8IDEpCi0jZGVmaW5lIFMzQzI0MTJfSUlTTU9EXzhCSVQJCSgxIDw8IDApCi0KLSNkZWZpbmUgUzNDMjQxMl9JSVNQU1JfUFNSRU4JCSgxIDw8IDE1KQotCi0jZGVmaW5lIFMzQzI0MTJfSUlTRklDX1RYRkxVU0gJCSgxIDw8IDE1KQotI2RlZmluZSBTM0MyNDEyX0lJU0ZJQ19SWEZMVVNICQkoMSA8PCA3KQotI2RlZmluZSBTM0MyNDEyX0lJU0ZJQ19UWENPVU5UKHgpCSgoKHgpID4+ICA4KSAmIDB4ZikKLSNkZWZpbmUgUzNDMjQxMl9JSVNGSUNfUlhDT1VOVCh4KQkoKCh4KSA+PiAgMCkgJiAweGYpCi0KLQotCi0jZW5kaWYgLyogX19BU01fQVJDSF9SRUdTX1MzQzI0MTJfSUlTX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjEwNzY2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWZydi9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qIGlkZS5oOiBGUlYgSURFIGRlY2xhcmF0aW9ucwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIF9BU01fSURFX0gKLSNkZWZpbmUgX0FTTV9JREVfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KLQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1mcnYvc29ja2V0LmgKaW5kZXggZTUxY2E2Ny4uNTdjM2Q0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zb2NrZXQuaApAQCAtNTQsNSArNTQsOCBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaCBiL2luY2x1ZGUvYXNtLWZydi9zd2FiLmgKaW5kZXggYWZiMzM5Ni4uZjMwNTgzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3N3YWIuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc3dhYi5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfQVNNX1NXQUJfSAogI2RlZmluZSBfQVNNX1NXQUJfSAogCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKQogIyAgZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAppbmRleCBiODQ3NzQxLi40ZDNlNDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCkBAIC0xMTcsOSArMTE3LDkgQEAKIHN0cnVjdCBmbG9jayB7CiAJc2hvcnQJbF90eXBlOwogCXNob3J0CWxfd2hlbmNlOwotCW9mZl90CWxfc3RhcnQ7Ci0Jb2ZmX3QJbF9sZW47Ci0JcGlkX3QJbF9waWQ7CisJX19rZXJuZWxfb2ZmX3QJbF9zdGFydDsKKwlfX2tlcm5lbF9vZmZfdAlsX2xlbjsKKwlfX2tlcm5lbF9waWRfdAlsX3BpZDsKIAlfX0FSQ0hfRkxPQ0tfUEFECiB9OwogI2VuZGlmCkBAIC0xNDAsOSArMTQwLDkgQEAKIHN0cnVjdCBmbG9jazY0IHsKIAlzaG9ydCAgbF90eXBlOwogCXNob3J0ICBsX3doZW5jZTsKLQlsb2ZmX3QgbF9zdGFydDsKLQlsb2ZmX3QgbF9sZW47Ci0JcGlkX3QgIGxfcGlkOworCV9fa2VybmVsX2xvZmZfdCBsX3N0YXJ0OworCV9fa2VybmVsX2xvZmZfdCBsX2xlbjsKKwlfX2tlcm5lbF9waWRfdCAgbF9waWQ7CiAJX19BUkNIX0ZMT0NLNjRfUEFECiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCmluZGV4IDk2OTU3MDEuLjM1NzUyZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnaW5mby5oCkBAIC0yMyw3ICsyMyw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBfX0FSQ0hfU0lfVUlEX1QKLSNkZWZpbmUgX19BUkNIX1NJX1VJRF9UCXVpZF90CisjZGVmaW5lIF9fQVJDSF9TSV9VSURfVAlfX2tlcm5lbF91aWQzMl90CiAjZW5kaWYKIAogLyoKQEAgLTQ3LDEzICs0NywxMyBAQAogCiAJCS8qIGtpbGwoKSAqLwogCQlzdHJ1Y3QgewotCQkJcGlkX3QgX3BpZDsJCS8qIHNlbmRlcidzIHBpZCAqLworCQkJX19rZXJuZWxfcGlkX3QgX3BpZDsJLyogc2VuZGVyJ3MgcGlkICovCiAJCQlfX0FSQ0hfU0lfVUlEX1QgX3VpZDsJLyogc2VuZGVyJ3MgdWlkICovCiAJCX0gX2tpbGw7CiAKIAkJLyogUE9TSVguMWIgdGltZXJzICovCiAJCXN0cnVjdCB7Ci0JCQl0aW1lcl90IF90aWQ7CQkvKiB0aW1lciBpZCAqLworCQkJX19rZXJuZWxfdGltZXJfdCBfdGlkOwkvKiB0aW1lciBpZCAqLwogCQkJaW50IF9vdmVycnVuOwkJLyogb3ZlcnJ1biBjb3VudCAqLwogCQkJY2hhciBfcGFkW3NpemVvZiggX19BUkNIX1NJX1VJRF9UKSAtIHNpemVvZihpbnQpXTsKIAkJCXNpZ3ZhbF90IF9zaWd2YWw7CS8qIHNhbWUgYXMgYmVsb3cgKi8KQEAgLTYyLDE4ICs2MiwxOCBAQAogCiAJCS8qIFBPU0lYLjFiIHNpZ25hbHMgKi8KIAkJc3RydWN0IHsKLQkJCXBpZF90IF9waWQ7CQkvKiBzZW5kZXIncyBwaWQgKi8KKwkJCV9fa2VybmVsX3BpZF90IF9waWQ7CS8qIHNlbmRlcidzIHBpZCAqLwogCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwogCQkJc2lndmFsX3QgX3NpZ3ZhbDsKIAkJfSBfcnQ7CiAKIAkJLyogU0lHQ0hMRCAqLwogCQlzdHJ1Y3QgewotCQkJcGlkX3QgX3BpZDsJCS8qIHdoaWNoIGNoaWxkICovCisJCQlfX2tlcm5lbF9waWRfdCBfcGlkOwkvKiB3aGljaCBjaGlsZCAqLwogCQkJX19BUkNIX1NJX1VJRF9UIF91aWQ7CS8qIHNlbmRlcidzIHVpZCAqLwogCQkJaW50IF9zdGF0dXM7CQkvKiBleGl0IGNvZGUgKi8KLQkJCWNsb2NrX3QgX3V0aW1lOwotCQkJY2xvY2tfdCBfc3RpbWU7CisJCQlfX2tlcm5lbF9jbG9ja190IF91dGltZTsKKwkJCV9fa2VybmVsX2Nsb2NrX3QgX3N0aW1lOwogCQl9IF9zaWdjaGxkOwogCiAJCS8qIFNJR0lMTCwgU0lHRlBFLCBTSUdTRUdWLCBTSUdCVVMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3N0YXRmcy5oCmluZGV4IDYxMjlkNjguLjNiNGZiM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvc3RhdGZzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9zdGF0ZnMuaApAQCAtMSw4ICsxLDkgQEAKICNpZm5kZWYgX0dFTkVSSUNfU1RBVEZTX0gKICNkZWZpbmUgX0dFTkVSSUNfU1RBVEZTX0gKIAotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKLSMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaWZkZWYgX19LRVJORUxfXwogdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QJZnNpZF90OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCBjNjFmYWIxLi5hY2E0MGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC04MCw2ICs4MCwxMSBAQAogCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZXBvaW50cykgPSAuOwkJCVwKIAkqKF9fdHJhY2Vwb2ludHMpCQkJCQkJXAogCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlcG9pbnRzKSA9IC47CQkJXAorCS8qIGltcGxlbWVudCBkeW5hbWljIHByaW50ayBkZWJ1ZyAqLwkJCQlcCisJLiA9IEFMSUdOKDgpOwkJCQkJCQlcCisJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX3ZlcmJvc2UpID0gLjsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkqKF9fdmVyYm9zZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsJCQkJXAogCUxJS0VMWV9QUk9GSUxFKCkJCSAgICAgICAJCQkJXAogCUJSQU5DSF9QUk9GSUxFKCkKIApAQCAtMzA5LDE1ICszMTQsNyBAQAogCUNQVV9ESVNDQVJEKGluaXQuZGF0YSkJCQkJCQlcCiAJQ1BVX0RJU0NBUkQoaW5pdC5yb2RhdGEpCQkJCQlcCiAJTUVNX0RJU0NBUkQoaW5pdC5kYXRhKQkJCQkJCVwKLQlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKLQkvKiBpbXBsZW1lbnQgZHluYW1pYyBwcmludGsgZGVidWcgKi8JCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICBcCi0JKihfX3ZlcmJvc2Vfc3RyaW5ncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlX3N0cmluZ3MpID0gLjsgICAgICAgICAgICAgICAgICAgXAotCS4gPSBBTElHTig4KTsJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX192ZXJib3NlKSA9IC47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JKihfX3ZlcmJvc2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX192ZXJib3NlKSA9IC47CisJTUVNX0RJU0NBUkQoaW5pdC5yb2RhdGEpCiAKICNkZWZpbmUgSU5JVF9URVhUCQkJCQkJCVwKIAkqKC5pbml0LnRleHQpCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1tMzJyL3NvY2tldC5oCmluZGV4IDlhMGUyMDAuLmJlN2VkNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fTTMyUl9TT0NLRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zd2FiLmggYi9pbmNsdWRlL2FzbS1tMzJyL3N3YWIuaAppbmRleCA5Nzk3M2UxLi41NGRhYjAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3N3YWIuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3N3YWIuaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX0FTTV9NMzJSX1NXQUJfSAogI2RlZmluZSBfQVNNX00zMlJfU1dBQl9ICiAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSB8fCBkZWZpbmVkKF9fS0VSTkVMX18pCiAjICBkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbW4xMDMwMC9pZGUuaCBiL2luY2x1ZGUvYXNtLW1uMTAzMDAvaWRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZGNkZDkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9pZGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qIE1OMTAzMDAgQXJjaC1zcGVjaWZpYyBJREUgY29kZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBSZWQgSGF0LCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBXcml0dGVuIGJ5IERhdmlkIEhvd2VsbHMgKGRob3dlbGxzQHJlZGhhdC5jb20pCi0gKiAtIERlcml2ZWQgZnJvbSBpbmNsdWRlL2FzbS1pMzg2L2lkZS5oCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICogMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaWZuZGVmIF9BU01fSURFX0gKLSNkZWZpbmUgX0FTTV9JREVfSAotCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8YXNtL2ludGN0bC1yZWdzLmg+Ci0KLSN1bmRlZiBTVVBQT1JUX1NMT1dfREFUQV9QT1JUUwotI2RlZmluZSBTVVBQT1JUX1NMT1dfREFUQV9QT1JUUyAwCi0KLSN1bmRlZiBTVVBQT1JUX1ZMQl9TWU5DCi0jZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMAotCi0vKgotICogc29tZSBiaXRzIG5lZWRlZCBmb3IgcGFydHMgb2YgdGhlIElERSBzdWJzeXN0ZW0gdG8gY29tcGlsZQotICovCi0jZGVmaW5lIF9faWRlX21tX2luc3cocG9ydCwgYWRkciwgbikgXAotCWluc3coKHVuc2lnbmVkIGxvbmcpIChwb3J0KSwgKGFkZHIpLCAobikpCi0jZGVmaW5lIF9faWRlX21tX2luc2wocG9ydCwgYWRkciwgbikgXAotCWluc2woKHVuc2lnbmVkIGxvbmcpIChwb3J0KSwgKGFkZHIpLCAobikpCi0jZGVmaW5lIF9faWRlX21tX291dHN3KHBvcnQsIGFkZHIsIG4pIFwKLQlvdXRzdygodW5zaWduZWQgbG9uZykgKHBvcnQpLCAoYWRkciksIChuKSkKLSNkZWZpbmUgX19pZGVfbW1fb3V0c2wocG9ydCwgYWRkciwgbikgXAotCW91dHNsKCh1bnNpZ25lZCBsb25nKSAocG9ydCksIChhZGRyKSwgKG4pKQotCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotI2VuZGlmIC8qIF9BU01fSURFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvcGNpLmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3BjaS5oCmluZGV4IGNkOWNjNWMuLjA1MTdiNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9wY2kuaApAQCAtMTIxLDQgKzEyMSw5IEBACiAKICNkZWZpbmUgcGNpYmlvc19zY2FuX2FsbF9mbnMoYSwgYikJMAogCitzdGF0aWMgaW5saW5lIGludCBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjaGFubmVsKQoreworCXJldHVybiBjaGFubmVsID8gMTUgOiAxNDsKK30KKwogI2VuZGlmIC8qIF9BU01fUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc29ja2V0LmggYi9pbmNsdWRlL2FzbS1tbjEwMzAwL3NvY2tldC5oCmluZGV4IDgwYWY5YzQuLmZiNWRhZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zb2NrZXQuaApAQCAtNTQsNCArNTQsNyBAQAogCiAjZGVmaW5lIFNPX01BUksJCQkzNgogCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORwkJMzcKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUElORwlTT19USU1FU1RBTVBJTkcKKwogI2VuZGlmIC8qIF9BU01fU09DS0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1uMTAzMDAvc3dhYi5oIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zd2FiLmgKaW5kZXggNDUwNGQxYi4uYmQ4MThhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbW4xMDMwMC9zd2FiLmgKKysrIGIvaW5jbHVkZS9hc20tbW4xMDMwMC9zd2FiLmgKQEAgLTExLDcgKzExLDcgQEAKICNpZm5kZWYgX0FTTV9TV0FCX0gKICNkZWZpbmUgX0FTTV9TV0FCX0gKIAotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpZmRlZiBfX0dOVUNfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9hZXMuaCBiL2luY2x1ZGUvY3J5cHRvL2Flcy5oCmluZGV4IDY1NmE0YzYuLjc1MjRiYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY3J5cHRvL2Flcy5oCisrKyBiL2luY2x1ZGUvY3J5cHRvL2Flcy5oCkBAIC0xNywxMCArMTcsMTQgQEAKICNkZWZpbmUgQUVTX01BWF9LRVlMRU5HVEgJKDE1ICogMTYpCiAjZGVmaW5lIEFFU19NQVhfS0VZTEVOR1RIX1UzMgkoQUVTX01BWF9LRVlMRU5HVEggLyBzaXplb2YodTMyKSkKIAorLyoKKyAqIFBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgZmlyc3QgdHdvIGZpZWxkcyBhcmUgMTYtYnl0ZSBhbGlnbmVkCisgKiByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHN0cnVjdHVyZSwgaS5lLiwgZG9uJ3QgbW92ZSB0aGVtIQorICovCiBzdHJ1Y3QgY3J5cHRvX2Flc19jdHggewotCXUzMiBrZXlfbGVuZ3RoOwogCXUzMiBrZXlfZW5jW0FFU19NQVhfS0VZTEVOR1RIX1UzMl07CiAJdTMyIGtleV9kZWNbQUVTX01BWF9LRVlMRU5HVEhfVTMyXTsKKwl1MzIga2V5X2xlbmd0aDsKIH07CiAKIGV4dGVybiBjb25zdCB1MzIgY3J5cHRvX2Z0X3RhYls0XVsyNTZdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vY29tcHJlc3MuaCBiL2luY2x1ZGUvY3J5cHRvL2NvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYxNjNlZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL2NvbXByZXNzLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb21wcmVzczogQ29tcHJlc3Npb24gYWxnb3JpdGhtcyB1bmRlciB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogQ29weXJpZ2h0IDIwMDggU29ueSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLgorICogSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX0NSWVBUT19DT01QUkVTU19ICisjZGVmaW5lIF9DUllQVE9fQ09NUFJFU1NfSAorCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisKKworc3RydWN0IGNvbXBfcmVxdWVzdCB7CisJY29uc3Qgdm9pZCAqbmV4dF9pbjsJCS8qIG5leHQgaW5wdXQgYnl0ZSAqLworCXZvaWQgKm5leHRfb3V0OwkJCS8qIG5leHQgb3V0cHV0IGJ5dGUgKi8KKwl1bnNpZ25lZCBpbnQgYXZhaWxfaW47CQkvKiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dF9pbiAqLworCXVuc2lnbmVkIGludCBhdmFpbF9vdXQ7CQkvKiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dF9vdXQgKi8KK307CisKK2VudW0gemxpYl9jb21wX3BhcmFtcyB7CisJWkxJQl9DT01QX0xFVkVMID0gMSwJCS8qIGUuZy4gWl9ERUZBVUxUX0NPTVBSRVNTSU9OICovCisJWkxJQl9DT01QX01FVEhPRCwJCS8qIGUuZy4gWl9ERUZMQVRFRCAqLworCVpMSUJfQ09NUF9XSU5ET1dCSVRTLAkJLyogZS5nLiBNQVhfV0JJVFMgKi8KKwlaTElCX0NPTVBfTUVNTEVWRUwsCQkvKiBlLmcuIERFRl9NRU1fTEVWRUwgKi8KKwlaTElCX0NPTVBfU1RSQVRFR1ksCQkvKiBlLmcuIFpfREVGQVVMVF9TVFJBVEVHWSAqLworCV9fWkxJQl9DT01QX01BWCwKK307CisKKyNkZWZpbmUgWkxJQl9DT01QX01BWAkoX19aTElCX0NPTVBfTUFYIC0gMSkKKworCitlbnVtIHpsaWJfZGVjb21wX3BhcmFtcyB7CisJWkxJQl9ERUNPTVBfV0lORE9XQklUUyA9IDEsCS8qIGUuZy4gREVGX1dCSVRTICovCisJX19aTElCX0RFQ09NUF9NQVgsCit9OworCisjZGVmaW5lIFpMSUJfREVDT01QX01BWAkoX19aTElCX0RFQ09NUF9NQVggLSAxKQorCisKK3N0cnVjdCBjcnlwdG9fcGNvbXAgeworCXN0cnVjdCBjcnlwdG9fdGZtIGJhc2U7Cit9OworCitzdHJ1Y3QgcGNvbXBfYWxnIHsKKwlpbnQgKCpjb21wcmVzc19zZXR1cCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLCB2b2lkICpwYXJhbXMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuKTsKKwlpbnQgKCpjb21wcmVzc19pbml0KShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pOworCWludCAoKmNvbXByZXNzX3VwZGF0ZSkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJICAgICAgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqY29tcHJlc3NfZmluYWwpKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCSAgICAgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqZGVjb21wcmVzc19zZXR1cCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLCB2b2lkICpwYXJhbXMsCisJCQkJdW5zaWduZWQgaW50IGxlbik7CisJaW50ICgqZGVjb21wcmVzc19pbml0KShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pOworCWludCAoKmRlY29tcHJlc3NfdXBkYXRlKShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisJaW50ICgqZGVjb21wcmVzc19maW5hbCkoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCXN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSk7CisKKwlzdHJ1Y3QgY3J5cHRvX2FsZyBiYXNlOworfTsKKworZXh0ZXJuIHN0cnVjdCBjcnlwdG9fcGNvbXAgKmNyeXB0b19hbGxvY19wY29tcChjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHR5cGUsCisJCQkJCSAgICAgICB1MzIgbWFzayk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19wY29tcF90Zm0oc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCXJldHVybiAmdGZtLT5iYXNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2ZyZWVfcGNvbXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCWNyeXB0b19kZXN0cm95X3RmbSh0Zm0sIGNyeXB0b19wY29tcF90Zm0odGZtKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBjb21wX2FsZyAqX19jcnlwdG9fcGNvbXBfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihhbGcsIHN0cnVjdCBwY29tcF9hbGcsIGJhc2UpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwY29tcF9hbGcgKmNyeXB0b19wY29tcF9hbGcoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtKQoreworCXJldHVybiBfX2NyeXB0b19wY29tcF9hbGcoY3J5cHRvX3Bjb21wX3RmbSh0Zm0pLT5fX2NydF9hbGcpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcHJlc3Nfc2V0dXAoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQl2b2lkICpwYXJhbXMsIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+Y29tcHJlc3Nfc2V0dXAodGZtLCBwYXJhbXMsIGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wcmVzc19pbml0KHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5jb21wcmVzc19pbml0KHRmbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wcmVzc191cGRhdGUoc3RydWN0IGNyeXB0b19wY29tcCAqdGZtLAorCQkJCQkgc3RydWN0IGNvbXBfcmVxdWVzdCAqcmVxKQoreworCXJldHVybiBjcnlwdG9fcGNvbXBfYWxnKHRmbSktPmNvbXByZXNzX3VwZGF0ZSh0Zm0sIHJlcSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jb21wcmVzc19maW5hbChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCXN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5jb21wcmVzc19maW5hbCh0Zm0sIHJlcSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19kZWNvbXByZXNzX3NldHVwKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJICB2b2lkICpwYXJhbXMsIHVuc2lnbmVkIGludCBsZW4pCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+ZGVjb21wcmVzc19zZXR1cCh0Zm0sIHBhcmFtcywgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2RlY29tcHJlc3NfaW5pdChzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+ZGVjb21wcmVzc19pbml0KHRmbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19kZWNvbXByZXNzX3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3Bjb21wICp0Zm0sCisJCQkJCSAgIHN0cnVjdCBjb21wX3JlcXVlc3QgKnJlcSkKK3sKKwlyZXR1cm4gY3J5cHRvX3Bjb21wX2FsZyh0Zm0pLT5kZWNvbXByZXNzX3VwZGF0ZSh0Zm0sIHJlcSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19kZWNvbXByZXNzX2ZpbmFsKHN0cnVjdCBjcnlwdG9fcGNvbXAgKnRmbSwKKwkJCQkJICBzdHJ1Y3QgY29tcF9yZXF1ZXN0ICpyZXEpCit7CisJcmV0dXJuIGNyeXB0b19wY29tcF9hbGcodGZtKS0+ZGVjb21wcmVzc19maW5hbCh0Zm0sIHJlcSk7Cit9CisKKyNlbmRpZgkvKiBfQ1JZUFRPX0NPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2NyeXB0ZC5oIGIvaW5jbHVkZS9jcnlwdG8vY3J5cHRkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmYTdiYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY3J5cHRvL2NyeXB0ZC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBTb2Z0d2FyZSBhc3luYyBjcnlwdG8gZGFlbW9uCisgKi8KKworI2lmbmRlZiBfQ1JZUFRPX0NSWVBUX0gKKyNkZWZpbmUgX0NSWVBUT19DUllQVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyIHsKKwlzdHJ1Y3QgY3J5cHRvX2FibGtjaXBoZXIgYmFzZTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0ZF9hYmxrY2lwaGVyICpfX2NyeXB0ZF9hYmxrY2lwaGVyX2Nhc3QoCisJc3RydWN0IGNyeXB0b19hYmxrY2lwaGVyICp0Zm0pCit7CisJcmV0dXJuIChzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKil0Zm07Cit9CisKKy8qIGFsZ19uYW1lIHNob3VsZCBiZSBhbGdvcml0aG0gdG8gYmUgY3J5cHRkLWVkICovCitzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKmNyeXB0ZF9hbGxvY19hYmxrY2lwaGVyKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkJCQkJICB1MzIgdHlwZSwgdTMyIG1hc2spOworc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKmNyeXB0ZF9hYmxrY2lwaGVyX2NoaWxkKHN0cnVjdCBjcnlwdGRfYWJsa2NpcGhlciAqdGZtKTsKK3ZvaWQgY3J5cHRkX2ZyZWVfYWJsa2NpcGhlcihzdHJ1Y3QgY3J5cHRkX2FibGtjaXBoZXIgKnRmbSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vY3J5cHRvX3dxLmggYi9pbmNsdWRlL2NyeXB0by9jcnlwdG9fd3EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2QyNTJkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jcnlwdG8vY3J5cHRvX3dxLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIENSWVBUT19XUV9ICisjZGVmaW5lIENSWVBUT19XUV9ICisKKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprY3J5cHRvX3dxOworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9oYXNoLmggYi9pbmNsdWRlL2NyeXB0by9oYXNoLmgKaW5kZXggZDc5N2UxMS4uZDU2YmI3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9jcnlwdG8vaGFzaC5oCisrKyBiL2luY2x1ZGUvY3J5cHRvL2hhc2guaApAQCAtMjMxLDYgKzIzMSwxMSBAQAogCXJldHVybiBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2soY3J5cHRvX3NoYXNoX3RmbSh0Zm0pKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3J5cHRvX3NoYXNoX2Jsb2Nrc2l6ZShzdHJ1Y3QgY3J5cHRvX3NoYXNoICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZShjcnlwdG9fc2hhc2hfdGZtKHRmbSkpOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzaGFzaF9hbGcgKl9fY3J5cHRvX3NoYXNoX2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQogewogCXJldHVybiBjb250YWluZXJfb2YoYWxnLCBzdHJ1Y3Qgc2hhc2hfYWxnLCBiYXNlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHRvL2ludGVybmFsL2NvbXByZXNzLmggYi9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OGE4ODgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9pbnRlcm5hbC9jb21wcmVzcy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb21wcmVzczogQ29tcHJlc3Npb24gYWxnb3JpdGhtcyB1bmRlciB0aGUgY3J5cHRvZ3JhcGhpYyBBUEkuCisgKgorICogQ29weXJpZ2h0IDIwMDggU29ueSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLgorICogSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX0NSWVBUT19JTlRFUk5BTF9DT01QUkVTU19ICisjZGVmaW5lIF9DUllQVE9fSU5URVJOQUxfQ09NUFJFU1NfSAorCisjaW5jbHVkZSA8Y3J5cHRvL2NvbXByZXNzLmg+CisKK2V4dGVybiBpbnQgY3J5cHRvX3JlZ2lzdGVyX3Bjb21wKHN0cnVjdCBwY29tcF9hbGcgKmFsZyk7CitleHRlcm4gaW50IGNyeXB0b191bnJlZ2lzdGVyX3Bjb21wKHN0cnVjdCBwY29tcF9hbGcgKmFsZyk7CisKKyNlbmRpZgkvKiBfQ1JZUFRPX0lOVEVSTkFMX0NPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybS5oIGIvaW5jbHVkZS9kcm0vZHJtLmgKaW5kZXggOGU3NzM1Ny4uN2NiNTBiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtLmgKQEAgLTM2LDggKzM2LDcgQEAKICNpZm5kZWYgX0RSTV9IXwogI2RlZmluZSBfRFJNX0hfCiAKLSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgkJLyogRm9yIF9JTyogbWFjcm9zICovCiAjZGVmaW5lIERSTV9JT0NUTF9OUihuKQkJX0lPQ19OUihuKQogI2RlZmluZSBEUk1fSU9DX1ZPSUQJCV9JT0NfTk9ORQpAQCAtNDk3LDggKzQ5Niw4IEBACiAgKiBcc2EgZHJtTW9kZXNldEN0bCgpLgogICovCiBzdHJ1Y3QgZHJtX21vZGVzZXRfY3RsIHsKLQl1aW50MzJfdCBjcnRjOwotCXVpbnQzMl90IGNtZDsKKwlfX3UzMiBjcnRjOworCV9fdTMyIGNtZDsKIH07CiAKIC8qKgpAQCAtNTc0LDI5ICs1NzMsMjkgQEAKIC8qKiBEUk1fSU9DVExfR0VNX0NMT1NFIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KIHN0cnVjdCBkcm1fZ2VtX2Nsb3NlIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBvYmplY3QgdG8gYmUgY2xvc2VkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIH07CiAKIC8qKiBEUk1fSU9DVExfR0VNX0ZMSU5LIGlvY3RsIGFyZ3VtZW50IHR5cGUgKi8KIHN0cnVjdCBkcm1fZ2VtX2ZsaW5rIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG5hbWVkICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKiBSZXR1cm5lZCBnbG9iYWwgbmFtZSAqLwotCXVpbnQzMl90IG5hbWU7CisJX191MzIgbmFtZTsKIH07CiAKIC8qKiBEUk1fSU9DVExfR0VNX09QRU4gaW9jdGwgYXJndW1lbnQgdHlwZSAqLwogc3RydWN0IGRybV9nZW1fb3BlbiB7CiAJLyoqIE5hbWUgb2Ygb2JqZWN0IGJlaW5nIG9wZW5lZCAqLwotCXVpbnQzMl90IG5hbWU7CisJX191MzIgbmFtZTsKIAogCS8qKiBSZXR1cm5lZCBoYW5kbGUgZm9yIHRoZSBvYmplY3QgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqIFJldHVybmVkIHNpemUgb2YgdGhlIG9iamVjdCAqLwotCXVpbnQ2NF90IHNpemU7CisJX191NjQgc2l6ZTsKIH07CiAKICNpbmNsdWRlICJkcm1fbW9kZS5oIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IGU1ZjRhZTkuLmMxOWE5M2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTc1OCw2ICs3NTgsOCBAQAogCiAJaW50ICgqcHJvY19pbml0KShzdHJ1Y3QgZHJtX21pbm9yICptaW5vcik7CiAJdm9pZCAoKnByb2NfY2xlYW51cCkoc3RydWN0IGRybV9taW5vciAqbWlub3IpOworCWludCAoKmRlYnVnZnNfaW5pdCkoc3RydWN0IGRybV9taW5vciAqbWlub3IpOworCXZvaWQgKCpkZWJ1Z2ZzX2NsZWFudXApKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKIAogCS8qKgogCSAqIERyaXZlci1zcGVjaWZpYyBjb25zdHJ1Y3RvciBmb3IgZHJtX2dlbV9vYmplY3RzLCB0byBzZXQgdXAKQEAgLTc5Myw2ICs3OTUsNDggQEAKICNkZWZpbmUgRFJNX01JTk9SX0NPTlRST0wgMgogI2RlZmluZSBEUk1fTUlOT1JfUkVOREVSIDMKIAorCisvKioKKyAqIGRlYnVnZnMgbm9kZSBsaXN0LiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgZGVidWdmcyBmaWxlIHRvCisgKiBiZSBjcmVhdGVkIGJ5IHRoZSBkcm0gY29yZQorICovCitzdHJ1Y3QgZHJtX2RlYnVnZnNfbGlzdCB7CisJY29uc3QgY2hhciAqbmFtZTsgLyoqIGZpbGUgbmFtZSAqLworCWludCAoKnNob3cpKHN0cnVjdCBzZXFfZmlsZSosIHZvaWQqKTsgLyoqIHNob3cgY2FsbGJhY2sgKi8KKwl1MzIgZHJpdmVyX2ZlYXR1cmVzOyAvKio8IFJlcXVpcmVkIGRyaXZlciBmZWF0dXJlcyBmb3IgdGhpcyBlbnRyeSAqLworfTsKKworLyoqCisgKiBkZWJ1Z2ZzIG5vZGUgc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIGEgZGVidWdmcyBmaWxlLgorICovCitzdHJ1Y3QgZHJtX2RlYnVnZnNfbm9kZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBkcm1fbWlub3IgKm1pbm9yOworCXN0cnVjdCBkcm1fZGVidWdmc19saXN0ICpkZWJ1Z2ZzX2VudDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50OworfTsKKworLyoqCisgKiBJbmZvIGZpbGUgbGlzdCBlbnRyeS4gVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyBhIGRlYnVnZnMgb3IgcHJvYyBmaWxlIHRvCisgKiBiZSBjcmVhdGVkIGJ5IHRoZSBkcm0gY29yZQorICovCitzdHJ1Y3QgZHJtX2luZm9fbGlzdCB7CisJY29uc3QgY2hhciAqbmFtZTsgLyoqIGZpbGUgbmFtZSAqLworCWludCAoKnNob3cpKHN0cnVjdCBzZXFfZmlsZSosIHZvaWQqKTsgLyoqIHNob3cgY2FsbGJhY2sgKi8KKwl1MzIgZHJpdmVyX2ZlYXR1cmVzOyAvKio8IFJlcXVpcmVkIGRyaXZlciBmZWF0dXJlcyBmb3IgdGhpcyBlbnRyeSAqLworCXZvaWQgKmRhdGE7Cit9OworCisvKioKKyAqIGRlYnVnZnMgbm9kZSBzdHJ1Y3R1cmUuIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBkZWJ1Z2ZzIGZpbGUuCisgKi8KK3N0cnVjdCBkcm1faW5mb19ub2RlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGRybV9taW5vciAqbWlub3I7CisJc3RydWN0IGRybV9pbmZvX2xpc3QgKmluZm9fZW50OworCXN0cnVjdCBkZW50cnkgKmRlbnQ7Cit9OworCiAvKioKICAqIERSTSBtaW5vciBzdHJ1Y3R1cmUuIFRoaXMgc3RydWN0dXJlIHJlcHJlc2VudHMgYSBkcm0gbWlub3IgbnVtYmVyLgogICovCkBAIC04MDIsNyArODQ2LDEyIEBACiAJZGV2X3QgZGV2aWNlOwkJCS8qKjwgRGV2aWNlIG51bWJlciBmb3IgbWtub2QgKi8KIAlzdHJ1Y3QgZGV2aWNlIGtkZXY7CQkvKio8IExpbnV4IGRldmljZSAqLwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZXZfcm9vdDsgIC8qKjwgcHJvYyBkaXJlY3RvcnkgZW50cnkgKi8KKworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19yb290OyAgLyoqPCBwcm9jIGRpcmVjdG9yeSBlbnRyeSAqLworCXN0cnVjdCBkcm1faW5mb19ub2RlIHByb2Nfbm9kZXM7CisJc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290OworCXN0cnVjdCBkcm1faW5mb19ub2RlIGRlYnVnZnNfbm9kZXM7CisKIAlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyOyAvKiBjdXJyZW50bHkgYWN0aXZlIG1hc3RlciBmb3IgdGhpcyBub2RlICovCiAJc3RydWN0IGxpc3RfaGVhZCBtYXN0ZXJfbGlzdDsKIAlzdHJ1Y3QgZHJtX21vZGVfZ3JvdXAgbW9kZV9ncm91cDsKQEAgLTEyNTgsNiArMTMwNyw3IEBACiAKIGV4dGVybiBzdHJ1Y3QgY2xhc3MgKmRybV9jbGFzczsKIGV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRybV9wcm9jX3Jvb3Q7CitleHRlcm4gc3RydWN0IGRlbnRyeSAqZHJtX2RlYnVnZnNfcm9vdDsKIAogZXh0ZXJuIHN0cnVjdCBpZHIgZHJtX21pbm9yc19pZHI7CiAKQEAgLTEyNjgsNiArMTMxOCwzMSBAQAogCQkJIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCk7CiBleHRlcm4gaW50IGRybV9wcm9jX2NsZWFudXAoc3RydWN0IGRybV9taW5vciAqbWlub3IsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCk7CiAKKwkJCQkvKiBEZWJ1Z2ZzIHN1cHBvcnQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKK2V4dGVybiBpbnQgZHJtX2RlYnVnZnNfaW5pdChzdHJ1Y3QgZHJtX21pbm9yICptaW5vciwgaW50IG1pbm9yX2lkLAorCQkJICAgIHN0cnVjdCBkZW50cnkgKnJvb3QpOworZXh0ZXJuIGludCBkcm1fZGVidWdmc19jcmVhdGVfZmlsZXMoc3RydWN0IGRybV9pbmZvX2xpc3QgKmZpbGVzLCBpbnQgY291bnQsCisJCQkJICAgIHN0cnVjdCBkZW50cnkgKnJvb3QsIHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKK2V4dGVybiBpbnQgZHJtX2RlYnVnZnNfcmVtb3ZlX2ZpbGVzKHN0cnVjdCBkcm1faW5mb19saXN0ICpmaWxlcywgaW50IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9taW5vciAqbWlub3IpOworZXh0ZXJuIGludCBkcm1fZGVidWdmc19jbGVhbnVwKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKTsKKyNlbmRpZgorCisJCQkJLyogSW5mbyBmaWxlIHN1cHBvcnQgKi8KK2V4dGVybiBpbnQgZHJtX25hbWVfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBkcm1fdm1faW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBkcm1fcXVldWVzX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgZHJtX2J1ZnNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBkcm1fdmJsYW5rX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKTsKK2V4dGVybiBpbnQgZHJtX2NsaWVudHNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQqIGRhdGEpOworZXh0ZXJuIGludCBkcm1fZ2VtX25hbWVfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpOworZXh0ZXJuIGludCBkcm1fZ2VtX29iamVjdF9pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCogZGF0YSk7CisKKyNpZiBEUk1fREVCVUdfQ09ERQorZXh0ZXJuIGludCBkcm1fdm1hX2luZm8oc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKTsKKyNlbmRpZgorCiAJCQkJLyogU2NhdHRlciBHYXRoZXIgU3VwcG9ydCAoZHJtX3NjYXR0ZXIuaCkgKi8KIGV4dGVybiB2b2lkIGRybV9zZ19jbGVhbnVwKHN0cnVjdCBkcm1fc2dfbWVtICogZW50cnkpOwogZXh0ZXJuIGludCBkcm1fc2dfYWxsb2NfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tb2RlLmggYi9pbmNsdWRlL2RybS9kcm1fbW9kZS5oCmluZGV4IDYwMWQyYmQuLmFlMzA0Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9tb2RlLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX21vZGUuaApAQCAtMjcsMTEgKzI3LDggQEAKICNpZm5kZWYgX0RSTV9NT0RFX0gKICNkZWZpbmUgX0RSTV9NT0RFX0gKIAotI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9LRVJORUwpCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZWxzZQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBEUk1fRElTUExBWV9JTkZPX0xFTgkzMgogI2RlZmluZSBEUk1fQ09OTkVDVE9SX05BTUVfTEVOCTMyCkBAIC04MSw0MSArNzgsNDEgQEAKICNkZWZpbmUgRFJNX01PREVfRElUSEVSSU5HX09OCTEKIAogc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIHsKLQl1aW50MzJfdCBjbG9jazsKLQl1aW50MTZfdCBoZGlzcGxheSwgaHN5bmNfc3RhcnQsIGhzeW5jX2VuZCwgaHRvdGFsLCBoc2tldzsKLQl1aW50MTZfdCB2ZGlzcGxheSwgdnN5bmNfc3RhcnQsIHZzeW5jX2VuZCwgdnRvdGFsLCB2c2NhbjsKKwlfX3UzMiBjbG9jazsKKwlfX3UxNiBoZGlzcGxheSwgaHN5bmNfc3RhcnQsIGhzeW5jX2VuZCwgaHRvdGFsLCBoc2tldzsKKwlfX3UxNiB2ZGlzcGxheSwgdnN5bmNfc3RhcnQsIHZzeW5jX2VuZCwgdnRvdGFsLCB2c2NhbjsKIAotCXVpbnQzMl90IHZyZWZyZXNoOyAvKiB2ZXJ0aWNhbCByZWZyZXNoICogMTAwMCAqLworCV9fdTMyIHZyZWZyZXNoOyAvKiB2ZXJ0aWNhbCByZWZyZXNoICogMTAwMCAqLwogCi0JdWludDMyX3QgZmxhZ3M7Ci0JdWludDMyX3QgdHlwZTsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiB0eXBlOwogCWNoYXIgbmFtZVtEUk1fRElTUExBWV9NT0RFX0xFTl07CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfY2FyZF9yZXMgewotCXVpbnQ2NF90IGZiX2lkX3B0cjsKLQl1aW50NjRfdCBjcnRjX2lkX3B0cjsKLQl1aW50NjRfdCBjb25uZWN0b3JfaWRfcHRyOwotCXVpbnQ2NF90IGVuY29kZXJfaWRfcHRyOwotCXVpbnQzMl90IGNvdW50X2ZiczsKLQl1aW50MzJfdCBjb3VudF9jcnRjczsKLQl1aW50MzJfdCBjb3VudF9jb25uZWN0b3JzOwotCXVpbnQzMl90IGNvdW50X2VuY29kZXJzOwotCXVpbnQzMl90IG1pbl93aWR0aCwgbWF4X3dpZHRoOwotCXVpbnQzMl90IG1pbl9oZWlnaHQsIG1heF9oZWlnaHQ7CisJX191NjQgZmJfaWRfcHRyOworCV9fdTY0IGNydGNfaWRfcHRyOworCV9fdTY0IGNvbm5lY3Rvcl9pZF9wdHI7CisJX191NjQgZW5jb2Rlcl9pZF9wdHI7CisJX191MzIgY291bnRfZmJzOworCV9fdTMyIGNvdW50X2NydGNzOworCV9fdTMyIGNvdW50X2Nvbm5lY3RvcnM7CisJX191MzIgY291bnRfZW5jb2RlcnM7CisJX191MzIgbWluX3dpZHRoLCBtYXhfd2lkdGg7CisJX191MzIgbWluX2hlaWdodCwgbWF4X2hlaWdodDsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9jcnRjIHsKLQl1aW50NjRfdCBzZXRfY29ubmVjdG9yc19wdHI7Ci0JdWludDMyX3QgY291bnRfY29ubmVjdG9yczsKKwlfX3U2NCBzZXRfY29ubmVjdG9yc19wdHI7CisJX191MzIgY291bnRfY29ubmVjdG9yczsKIAotCXVpbnQzMl90IGNydGNfaWQ7IC8qKjwgSWQgKi8KLQl1aW50MzJfdCBmYl9pZDsgLyoqPCBJZCBvZiBmcmFtZWJ1ZmZlciAqLworCV9fdTMyIGNydGNfaWQ7IC8qKjwgSWQgKi8KKwlfX3UzMiBmYl9pZDsgLyoqPCBJZCBvZiBmcmFtZWJ1ZmZlciAqLwogCi0JdWludDMyX3QgeCwgeTsgLyoqPCBQb3NpdGlvbiBvbiB0aGUgZnJhbWV1ZmZlciAqLworCV9fdTMyIHgsIHk7IC8qKjwgUG9zaXRpb24gb24gdGhlIGZyYW1ldWZmZXIgKi8KIAotCXVpbnQzMl90IGdhbW1hX3NpemU7Ci0JdWludDMyX3QgbW9kZV92YWxpZDsKKwlfX3UzMiBnYW1tYV9zaXplOworCV9fdTMyIG1vZGVfdmFsaWQ7CiAJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIG1vZGU7CiB9OwogCkBAIC0xMjYsMTMgKzEyMywxMyBAQAogI2RlZmluZSBEUk1fTU9ERV9FTkNPREVSX1RWREFDCTQKIAogc3RydWN0IGRybV9tb2RlX2dldF9lbmNvZGVyIHsKLQl1aW50MzJfdCBlbmNvZGVyX2lkOwotCXVpbnQzMl90IGVuY29kZXJfdHlwZTsKKwlfX3UzMiBlbmNvZGVyX2lkOworCV9fdTMyIGVuY29kZXJfdHlwZTsKIAotCXVpbnQzMl90IGNydGNfaWQ7IC8qKjwgSWQgb2YgY3J0YyAqLworCV9fdTMyIGNydGNfaWQ7IC8qKjwgSWQgb2YgY3J0YyAqLwogCi0JdWludDMyX3QgcG9zc2libGVfY3J0Y3M7Ci0JdWludDMyX3QgcG9zc2libGVfY2xvbmVzOworCV9fdTMyIHBvc3NpYmxlX2NydGNzOworCV9fdTMyIHBvc3NpYmxlX2Nsb25lczsKIH07CiAKIC8qIFRoaXMgaXMgZm9yIGNvbm5lY3RvcnMgd2l0aCBtdWx0aXBsZSBzaWduYWwgdHlwZXMuICovCkBAIC0xNjEsMjMgKzE1OCwyMyBAQAogCiBzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Nvbm5lY3RvciB7CiAKLQl1aW50NjRfdCBlbmNvZGVyc19wdHI7Ci0JdWludDY0X3QgbW9kZXNfcHRyOwotCXVpbnQ2NF90IHByb3BzX3B0cjsKLQl1aW50NjRfdCBwcm9wX3ZhbHVlc19wdHI7CisJX191NjQgZW5jb2RlcnNfcHRyOworCV9fdTY0IG1vZGVzX3B0cjsKKwlfX3U2NCBwcm9wc19wdHI7CisJX191NjQgcHJvcF92YWx1ZXNfcHRyOwogCi0JdWludDMyX3QgY291bnRfbW9kZXM7Ci0JdWludDMyX3QgY291bnRfcHJvcHM7Ci0JdWludDMyX3QgY291bnRfZW5jb2RlcnM7CisJX191MzIgY291bnRfbW9kZXM7CisJX191MzIgY291bnRfcHJvcHM7CisJX191MzIgY291bnRfZW5jb2RlcnM7CiAKLQl1aW50MzJfdCBlbmNvZGVyX2lkOyAvKio8IEN1cnJlbnQgRW5jb2RlciAqLwotCXVpbnQzMl90IGNvbm5lY3Rvcl9pZDsgLyoqPCBJZCAqLwotCXVpbnQzMl90IGNvbm5lY3Rvcl90eXBlOwotCXVpbnQzMl90IGNvbm5lY3Rvcl90eXBlX2lkOworCV9fdTMyIGVuY29kZXJfaWQ7IC8qKjwgQ3VycmVudCBFbmNvZGVyICovCisJX191MzIgY29ubmVjdG9yX2lkOyAvKio8IElkICovCisJX191MzIgY29ubmVjdG9yX3R5cGU7CisJX191MzIgY29ubmVjdG9yX3R5cGVfaWQ7CiAKLQl1aW50MzJfdCBjb25uZWN0aW9uOwotCXVpbnQzMl90IG1tX3dpZHRoLCBtbV9oZWlnaHQ7IC8qKjwgSHhXIGluIG1pbGxpbWV0ZXJzICovCi0JdWludDMyX3Qgc3VicGl4ZWw7CisJX191MzIgY29ubmVjdGlvbjsKKwlfX3UzMiBtbV93aWR0aCwgbW1faGVpZ2h0OyAvKio8IEh4VyBpbiBtaWxsaW1ldGVycyAqLworCV9fdTMyIHN1YnBpeGVsOwogfTsKIAogI2RlZmluZSBEUk1fTU9ERV9QUk9QX1BFTkRJTkcJKDE8PDApCkBAIC0xODcsNDYgKzE4NCw0NiBAQAogI2RlZmluZSBEUk1fTU9ERV9QUk9QX0JMT0IJKDE8PDQpCiAKIHN0cnVjdCBkcm1fbW9kZV9wcm9wZXJ0eV9lbnVtIHsKLQl1aW50NjRfdCB2YWx1ZTsKKwlfX3U2NCB2YWx1ZTsKIAljaGFyIG5hbWVbRFJNX1BST1BfTkFNRV9MRU5dOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2dldF9wcm9wZXJ0eSB7Ci0JdWludDY0X3QgdmFsdWVzX3B0cjsgLyogdmFsdWVzIGFuZCBibG9iIGxlbmd0aHMgKi8KLQl1aW50NjRfdCBlbnVtX2Jsb2JfcHRyOyAvKiBlbnVtIGFuZCBibG9iIGlkIHB0cnMgKi8KKwlfX3U2NCB2YWx1ZXNfcHRyOyAvKiB2YWx1ZXMgYW5kIGJsb2IgbGVuZ3RocyAqLworCV9fdTY0IGVudW1fYmxvYl9wdHI7IC8qIGVudW0gYW5kIGJsb2IgaWQgcHRycyAqLwogCi0JdWludDMyX3QgcHJvcF9pZDsKLQl1aW50MzJfdCBmbGFnczsKKwlfX3UzMiBwcm9wX2lkOworCV9fdTMyIGZsYWdzOwogCWNoYXIgbmFtZVtEUk1fUFJPUF9OQU1FX0xFTl07CiAKLQl1aW50MzJfdCBjb3VudF92YWx1ZXM7Ci0JdWludDMyX3QgY291bnRfZW51bV9ibG9iczsKKwlfX3UzMiBjb3VudF92YWx1ZXM7CisJX191MzIgY291bnRfZW51bV9ibG9iczsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9jb25uZWN0b3Jfc2V0X3Byb3BlcnR5IHsKLQl1aW50NjRfdCB2YWx1ZTsKLQl1aW50MzJfdCBwcm9wX2lkOwotCXVpbnQzMl90IGNvbm5lY3Rvcl9pZDsKKwlfX3U2NCB2YWx1ZTsKKwlfX3UzMiBwcm9wX2lkOworCV9fdTMyIGNvbm5lY3Rvcl9pZDsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9nZXRfYmxvYiB7Ci0JdWludDMyX3QgYmxvYl9pZDsKLQl1aW50MzJfdCBsZW5ndGg7Ci0JdWludDY0X3QgZGF0YTsKKwlfX3UzMiBibG9iX2lkOworCV9fdTMyIGxlbmd0aDsKKwlfX3U2NCBkYXRhOwogfTsKIAogc3RydWN0IGRybV9tb2RlX2ZiX2NtZCB7Ci0JdWludDMyX3QgZmJfaWQ7Ci0JdWludDMyX3Qgd2lkdGgsIGhlaWdodDsKLQl1aW50MzJfdCBwaXRjaDsKLQl1aW50MzJfdCBicHA7Ci0JdWludDMyX3QgZGVwdGg7CisJX191MzIgZmJfaWQ7CisJX191MzIgd2lkdGgsIGhlaWdodDsKKwlfX3UzMiBwaXRjaDsKKwlfX3UzMiBicHA7CisJX191MzIgZGVwdGg7CiAJLyogZHJpdmVyIHNwZWNpZmljIGhhbmRsZSAqLwotCXVpbnQzMl90IGhhbmRsZTsKKwlfX3UzMiBoYW5kbGU7CiB9OwogCiBzdHJ1Y3QgZHJtX21vZGVfbW9kZV9jbWQgewotCXVpbnQzMl90IGNvbm5lY3Rvcl9pZDsKKwlfX3UzMiBjb25uZWN0b3JfaWQ7CiAJc3RydWN0IGRybV9tb2RlX21vZGVpbmZvIG1vZGU7CiB9OwogCkBAIC0yNDgsMjQgKzI0NSwyNCBAQAogICogICAgeQogICovCiBzdHJ1Y3QgZHJtX21vZGVfY3Vyc29yIHsKLQl1aW50MzJfdCBmbGFnczsKLQl1aW50MzJfdCBjcnRjX2lkOwotCWludDMyX3QgeDsKLQlpbnQzMl90IHk7Ci0JdWludDMyX3Qgd2lkdGg7Ci0JdWludDMyX3QgaGVpZ2h0OworCV9fdTMyIGZsYWdzOworCV9fdTMyIGNydGNfaWQ7CisJX19zMzIgeDsKKwlfX3MzMiB5OworCV9fdTMyIHdpZHRoOworCV9fdTMyIGhlaWdodDsKIAkvKiBkcml2ZXIgc3BlY2lmaWMgaGFuZGxlICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIH07CiAKIHN0cnVjdCBkcm1fbW9kZV9jcnRjX2x1dCB7Ci0JdWludDMyX3QgY3J0Y19pZDsKLQl1aW50MzJfdCBnYW1tYV9zaXplOworCV9fdTMyIGNydGNfaWQ7CisJX191MzIgZ2FtbWFfc2l6ZTsKIAogCS8qIHBvaW50ZXJzIHRvIGFycmF5cyAqLwotCXVpbnQ2NF90IHJlZDsKLQl1aW50NjRfdCBncmVlbjsKLQl1aW50NjRfdCBibHVlOworCV9fdTY0IHJlZDsKKwlfX3U2NCBncmVlbjsKKwlfX3U2NCBibHVlOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmggYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggNTE2NWYyNC4uNzZjNGM4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaApAQCAtNDE4LDQgKzQxOCw2IEBACiAJezB4ODA4NiwgMHgyZTAyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgMHhmZmZmMDAsIDB9LCBcCiAJezB4ODA4NiwgMHgyZTEyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgMHhmZmZmMDAsIDB9LCBcCiAJezB4ODA4NiwgMHgyZTIyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgMHhmZmZmMDAsIDB9LCBcCisJezB4ODA4NiwgMHhhMDAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgMHhmZmZmMDAsIDB9LCBcCisJezB4ODA4NiwgMHhhMDExLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgMHhmZmZmMDAsIDB9LCBcCiAJezAsIDAsIDB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9pOTE1X2RybS5oIGIvaW5jbHVkZS9kcm0vaTkxNV9kcm0uaAppbmRleCA5MTJjZDUyLi42N2UzMzUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9pOTE1X2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL2k5MTVfZHJtLmgKQEAgLTMwLDcgKzMwLDcgQEAKIC8qIFBsZWFzZSBub3RlIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBhbGwgc3RydWN0cyBkZWZpbmVkIGhlcmUgYXJlCiAgKiBzdWJqZWN0IHRvIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGNvbnN0cmFpbnRzLgogICovCi0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgImRybS5oIgogCiAvKiBFYWNoIHJlZ2lvbiBpcyBhIG1pbmltdW0gb2YgMTZrLCBhbmQgdGhlcmUgYXJlIGF0IG1vc3QgMjU1IG9mIHRoZW0uCkBAIC0xMTYsMTUgKzExNiwxNSBAQAogCiAJLyogZmlsbCBvdXQgc29tZSBzcGFjZSBmb3Igb2xkIHVzZXJzcGFjZSB0cmlwbGUgYnVmZmVyICovCiAJZHJtX2hhbmRsZV90IHVudXNlZF9oYW5kbGU7Ci0JdWludDMyX3QgdW51c2VkMSwgdW51c2VkMiwgdW51c2VkMzsKKwlfX3UzMiB1bnVzZWQxLCB1bnVzZWQyLCB1bnVzZWQzOwogCiAJLyogYnVmZmVyIG9iamVjdCBoYW5kbGVzIGZvciBzdGF0aWMgYnVmZmVycy4gTWF5IGNoYW5nZQogCSAqIG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoZSBjbGllbnQuCiAJICovCi0JdWludDMyX3QgZnJvbnRfYm9faGFuZGxlOwotCXVpbnQzMl90IGJhY2tfYm9faGFuZGxlOwotCXVpbnQzMl90IHVudXNlZF9ib19oYW5kbGU7Ci0JdWludDMyX3QgZGVwdGhfYm9faGFuZGxlOworCV9fdTMyIGZyb250X2JvX2hhbmRsZTsKKwlfX3UzMiBiYWNrX2JvX2hhbmRsZTsKKwlfX3UzMiB1bnVzZWRfYm9faGFuZGxlOworCV9fdTMyIGRlcHRoX2JvX2hhbmRsZTsKIAogfSBkcm1faTkxNV9zYXJlYV90OwogCkBAIC0zMjcsNyArMzI3LDcgQEAKIH0gZHJtX2k5MTVfdmJsYW5rX3N3YXBfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k5MTVfaHdzX2FkZHIgewotCXVpbnQ2NF90IGFkZHI7CisJX191NjQgYWRkcjsKIH0gZHJtX2k5MTVfaHdzX2FkZHJfdDsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9pbml0IHsKQEAgLTMzNSwxMiArMzM1LDEyIEBACiAJICogQmVnaW5uaW5nIG9mZnNldCBpbiB0aGUgR1RUIHRvIGJlIG1hbmFnZWQgYnkgdGhlIERSTSBtZW1vcnkKIAkgKiBtYW5hZ2VyLgogCSAqLwotCXVpbnQ2NF90IGd0dF9zdGFydDsKKwlfX3U2NCBndHRfc3RhcnQ7CiAJLyoqCiAJICogRW5kaW5nIG9mZnNldCBpbiB0aGUgR1RUIHRvIGJlIG1hbmFnZWQgYnkgdGhlIERSTSBtZW1vcnkKIAkgKiBtYW5hZ2VyLgogCSAqLwotCXVpbnQ2NF90IGd0dF9lbmQ7CisJX191NjQgZ3R0X2VuZDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fY3JlYXRlIHsKQEAgLTM0OSw5NCArMzQ5LDk0IEBACiAJICoKIAkgKiBUaGUgKHBhZ2UtYWxpZ25lZCkgYWxsb2NhdGVkIHNpemUgZm9yIHRoZSBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4KIAkgKi8KLQl1aW50NjRfdCBzaXplOworCV9fdTY0IHNpemU7CiAJLyoqCiAJICogUmV0dXJuZWQgaGFuZGxlIGZvciB0aGUgb2JqZWN0LgogCSAqCiAJICogT2JqZWN0IGhhbmRsZXMgYXJlIG5vbnplcm8uCiAJICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9wcmVhZCB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyByZWFkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAkvKiogT2Zmc2V0IGludG8gdGhlIG9iamVjdCB0byByZWFkIGZyb20gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogCS8qKiBMZW5ndGggb2YgZGF0YSB0byByZWFkICovCi0JdWludDY0X3Qgc2l6ZTsKKwlfX3U2NCBzaXplOwogCS8qKgogCSAqIFBvaW50ZXIgdG8gd3JpdGUgdGhlIGRhdGEgaW50by4KIAkgKgogCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCiAJICovCi0JdWludDY0X3QgZGF0YV9wdHI7CisJX191NjQgZGF0YV9wdHI7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3B3cml0ZSB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyB3cml0dGVuIHRvLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIAkvKiogT2Zmc2V0IGludG8gdGhlIG9iamVjdCB0byB3cml0ZSB0byAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiAJLyoqIExlbmd0aCBvZiBkYXRhIHRvIHdyaXRlICovCi0JdWludDY0X3Qgc2l6ZTsKKwlfX3U2NCBzaXplOwogCS8qKgogCSAqIFBvaW50ZXIgdG8gcmVhZCB0aGUgZGF0YSBmcm9tLgogCSAqCiAJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQl1aW50NjRfdCBkYXRhX3B0cjsKKwlfX3U2NCBkYXRhX3B0cjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fbW1hcCB7CiAJLyoqIEhhbmRsZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtYXBwZWQuICovCi0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IHBhZDsKKwlfX3UzMiBoYW5kbGU7CisJX191MzIgcGFkOwogCS8qKiBPZmZzZXQgaW4gdGhlIG9iamVjdCB0byBtYXAuICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIAkvKioKIAkgKiBMZW5ndGggb2YgZGF0YSB0byBtYXAuCiAJICoKIAkgKiBUaGUgdmFsdWUgd2lsbCBiZSBwYWdlLWFsaWduZWQuCiAJICovCi0JdWludDY0X3Qgc2l6ZTsKKwlfX3U2NCBzaXplOwogCS8qKgogCSAqIFJldHVybmVkIHBvaW50ZXIgdGhlIGRhdGEgd2FzIG1hcHBlZCBhdC4KIAkgKgogCSAqIFRoaXMgaXMgYSBmaXhlZC1zaXplIHR5cGUgZm9yIDMyLzY0IGNvbXBhdGliaWxpdHkuCiAJICovCi0JdWludDY0X3QgYWRkcl9wdHI7CisJX191NjQgYWRkcl9wdHI7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX21tYXBfZ3R0IHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiAJLyoqCiAJICogRmFrZSBvZmZzZXQgdG8gdXNlIGZvciBzdWJzZXF1ZW50IG1tYXAgY2FsbAogCSAqCiAJICogVGhpcyBpcyBhIGZpeGVkLXNpemUgdHlwZSBmb3IgMzIvNjQgY29tcGF0aWJpbGl0eS4KIAkgKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfZG9tYWluIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0ICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKiBOZXcgcmVhZCBkb21haW5zICovCi0JdWludDMyX3QgcmVhZF9kb21haW5zOworCV9fdTMyIHJlYWRfZG9tYWluczsKIAogCS8qKiBOZXcgd3JpdGUgZG9tYWluICovCi0JdWludDMyX3Qgd3JpdGVfZG9tYWluOworCV9fdTMyIHdyaXRlX2RvbWFpbjsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fc3dfZmluaXNoIHsKIAkvKiogSGFuZGxlIGZvciB0aGUgb2JqZWN0ICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSB7CkBAIC00NDgsMTYgKzQ0OCwxNiBAQAogCSAqIGEgcmVsb2NhdGlvbiBsaXN0IGZvciBzdGF0ZSBidWZmZXJzIGFuZCBub3QgcmUtd3JpdGUgaXQgcGVyCiAJICogZXhlYyB1c2luZyB0aGUgYnVmZmVyLgogCSAqLwotCXVpbnQzMl90IHRhcmdldF9oYW5kbGU7CisJX191MzIgdGFyZ2V0X2hhbmRsZTsKIAogCS8qKgogCSAqIFZhbHVlIHRvIGJlIGFkZGVkIHRvIHRoZSBvZmZzZXQgb2YgdGhlIHRhcmdldCBidWZmZXIgdG8gbWFrZSB1cAogCSAqIHRoZSByZWxvY2F0aW9uIGVudHJ5LgogCSAqLwotCXVpbnQzMl90IGRlbHRhOworCV9fdTMyIGRlbHRhOwogCiAJLyoqIE9mZnNldCBpbiB0aGUgYnVmZmVyIHRoZSByZWxvY2F0aW9uIGVudHJ5IHdpbGwgYmUgd3JpdHRlbiBpbnRvICovCi0JdWludDY0X3Qgb2Zmc2V0OworCV9fdTY0IG9mZnNldDsKIAogCS8qKgogCSAqIE9mZnNldCB2YWx1ZSBvZiB0aGUgdGFyZ2V0IGJ1ZmZlciB0aGF0IHRoZSByZWxvY2F0aW9uIGVudHJ5IHdhcyBsYXN0CkBAIC00NjcsMTIgKzQ2NywxMiBAQAogCSAqIGFuZCB3cml0aW5nIHRoZSByZWxvY2F0aW9uLiAgVGhpcyB2YWx1ZSBpcyB3cml0dGVuIGJhY2sgb3V0IGJ5CiAJICogdGhlIGV4ZWNidWZmZXIgaW9jdGwgd2hlbiB0aGUgcmVsb2NhdGlvbiBpcyB3cml0dGVuLgogCSAqLwotCXVpbnQ2NF90IHByZXN1bWVkX29mZnNldDsKKwlfX3U2NCBwcmVzdW1lZF9vZmZzZXQ7CiAKIAkvKioKIAkgKiBUYXJnZXQgbWVtb3J5IGRvbWFpbnMgcmVhZCBieSB0aGlzIG9wZXJhdGlvbi4KIAkgKi8KLQl1aW50MzJfdCByZWFkX2RvbWFpbnM7CisJX191MzIgcmVhZF9kb21haW5zOwogCiAJLyoqCiAJICogVGFyZ2V0IG1lbW9yeSBkb21haW5zIHdyaXR0ZW4gYnkgdGhpcyBvcGVyYXRpb24uCkBAIC00ODEsNyArNDgxLDcgQEAKIAkgKiBleGVjYnVmZmVyIG9wZXJhdGlvbiwgc28gdGhhdCB3aGVyZSB0aGVyZSBhcmUgY29uZmxpY3RzLAogCSAqIHRoZSBhcHBsaWNhdGlvbiB3aWxsIGdldCAtRUlOVkFMIGJhY2suCiAJICovCi0JdWludDMyX3Qgd3JpdGVfZG9tYWluOworCV9fdTMyIHdyaXRlX2RvbWFpbjsKIH07CiAKIC8qKiBAewpAQCAtNTEyLDI0ICs1MTIsMjQgQEAKIAkgKiBVc2VyJ3MgaGFuZGxlIGZvciBhIGJ1ZmZlciB0byBiZSBib3VuZCBpbnRvIHRoZSBHVFQgZm9yIHRoaXMKIAkgKiBvcGVyYXRpb24uCiAJICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKiBOdW1iZXIgb2YgcmVsb2NhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoaXMgYnVmZmVyICovCi0JdWludDMyX3QgcmVsb2NhdGlvbl9jb3VudDsKKwlfX3UzMiByZWxvY2F0aW9uX2NvdW50OwogCS8qKgogCSAqIFBvaW50ZXIgdG8gYXJyYXkgb2Ygc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IGNvbnRhaW5pbmcKIAkgKiB0aGUgcmVsb2NhdGlvbnMgdG8gYmUgcGVyZm9ybWVkIGluIHRoaXMgYnVmZmVyLgogCSAqLwotCXVpbnQ2NF90IHJlbG9jc19wdHI7CisJX191NjQgcmVsb2NzX3B0cjsKIAogCS8qKiBSZXF1aXJlZCBhbGlnbm1lbnQgaW4gZ3JhcGhpY3MgYXBlcnR1cmUgKi8KLQl1aW50NjRfdCBhbGlnbm1lbnQ7CisJX191NjQgYWxpZ25tZW50OwogCiAJLyoqCiAJICogUmV0dXJuZWQgdmFsdWUgb2YgdGhlIHVwZGF0ZWQgb2Zmc2V0IG9mIHRoZSBvYmplY3QsIGZvciBmdXR1cmUKIAkgKiBwcmVzdW1lZF9vZmZzZXQgd3JpdGVzLgogCSAqLwotCXVpbnQ2NF90IG9mZnNldDsKKwlfX3U2NCBvZmZzZXQ7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIgewpAQCAtNTQzLDQ0ICs1NDMsNDQgQEAKIAkgKiBhIGJ1ZmZlciBpcyBwZXJmb3JtaW5nIHJlZmVyIHRvIGJ1ZmZlcnMgdGhhdCBoYXZlIGFscmVhZHkgYXBwZWFyZWQKIAkgKiBpbiB0aGUgdmFsaWRhdGUgbGlzdC4KIAkgKi8KLQl1aW50NjRfdCBidWZmZXJzX3B0cjsKLQl1aW50MzJfdCBidWZmZXJfY291bnQ7CisJX191NjQgYnVmZmVyc19wdHI7CisJX191MzIgYnVmZmVyX2NvdW50OwogCiAJLyoqIE9mZnNldCBpbiB0aGUgYmF0Y2hidWZmZXIgdG8gc3RhcnQgZXhlY3V0aW9uIGZyb20uICovCi0JdWludDMyX3QgYmF0Y2hfc3RhcnRfb2Zmc2V0OworCV9fdTMyIGJhdGNoX3N0YXJ0X29mZnNldDsKIAkvKiogQnl0ZXMgdXNlZCBpbiBiYXRjaGJ1ZmZlciBmcm9tIGJhdGNoX3N0YXJ0X29mZnNldCAqLwotCXVpbnQzMl90IGJhdGNoX2xlbjsKLQl1aW50MzJfdCBEUjE7Ci0JdWludDMyX3QgRFI0OwotCXVpbnQzMl90IG51bV9jbGlwcmVjdHM7CisJX191MzIgYmF0Y2hfbGVuOworCV9fdTMyIERSMTsKKwlfX3UzMiBEUjQ7CisJX191MzIgbnVtX2NsaXByZWN0czsKIAkvKiogVGhpcyBpcyBhIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcmVjdHMgKi8KLQl1aW50NjRfdCBjbGlwcmVjdHNfcHRyOworCV9fdTY0IGNsaXByZWN0c19wdHI7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3BpbiB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHBpbm5lZC4gKi8KLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3QgcGFkOworCV9fdTMyIGhhbmRsZTsKKwlfX3UzMiBwYWQ7CiAKIAkvKiogYWxpZ25tZW50IHJlcXVpcmVkIHdpdGhpbiB0aGUgYXBlcnR1cmUgKi8KLQl1aW50NjRfdCBhbGlnbm1lbnQ7CisJX191NjQgYWxpZ25tZW50OwogCiAJLyoqIFJldHVybmVkIEdUVCBvZmZzZXQgb2YgdGhlIGJ1ZmZlci4gKi8KLQl1aW50NjRfdCBvZmZzZXQ7CisJX191NjQgb2Zmc2V0OwogfTsKIAogc3RydWN0IGRybV9pOTE1X2dlbV91bnBpbiB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGJlIHVucGlubmVkLiAqLwotCXVpbnQzMl90IGhhbmRsZTsKLQl1aW50MzJfdCBwYWQ7CisJX191MzIgaGFuZGxlOworCV9fdTMyIHBhZDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fYnVzeSB7CiAJLyoqIEhhbmRsZSBvZiB0aGUgYnVmZmVyIHRvIGNoZWNrIGZvciBidXN5ICovCi0JdWludDMyX3QgaGFuZGxlOworCV9fdTMyIGhhbmRsZTsKIAogCS8qKiBSZXR1cm4gYnVzeSBzdGF0dXMgKDEgaWYgYnVzeSwgMCBpZiBpZGxlKSAqLwotCXVpbnQzMl90IGJ1c3k7CisJX191MzIgYnVzeTsKIH07CiAKICNkZWZpbmUgSTkxNV9USUxJTkdfTk9ORQkwCkBAIC01OTcsNyArNTk3LDcgQEAKIAogc3RydWN0IGRybV9pOTE1X2dlbV9zZXRfdGlsaW5nIHsKIAkvKiogSGFuZGxlIG9mIHRoZSBidWZmZXIgdG8gaGF2ZSBpdHMgdGlsaW5nIHN0YXRlIHVwZGF0ZWQgKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqCiAJICogVGlsaW5nIG1vZGUgZm9yIHRoZSBvYmplY3QgKEk5MTVfVElMSU5HX05PTkUsIEk5MTVfVElMSU5HX1gsCkBAIC02MTEsNDcgKzYxMSw0NyBAQAogCSAqCiAJICogQnVmZmVyIGNvbnRlbnRzIGJlY29tZSB1bmRlZmluZWQgd2hlbiBjaGFuZ2luZyB0aWxpbmdfbW9kZS4KIAkgKi8KLQl1aW50MzJfdCB0aWxpbmdfbW9kZTsKKwlfX3UzMiB0aWxpbmdfbW9kZTsKIAogCS8qKgogCSAqIFN0cmlkZSBpbiBieXRlcyBmb3IgdGhlIG9iamVjdCB3aGVuIGluIEk5MTVfVElMSU5HX1ggb3IKIAkgKiBJOTE1X1RJTElOR19ZLgogCSAqLwotCXVpbnQzMl90IHN0cmlkZTsKKwlfX3UzMiBzdHJpZGU7CiAKIAkvKioKIAkgKiBSZXR1cm5lZCBhZGRyZXNzIGJpdCA2IHN3aXp6bGluZyByZXF1aXJlZCBmb3IgQ1BVIGFjY2VzcyB0aHJvdWdoCiAJICogbW1hcCBtYXBwaW5nLgogCSAqLwotCXVpbnQzMl90IHN3aXp6bGVfbW9kZTsKKwlfX3UzMiBzd2l6emxlX21vZGU7CiB9OwogCiBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2dldF90aWxpbmcgewogCS8qKiBIYW5kbGUgb2YgdGhlIGJ1ZmZlciB0byBnZXQgdGlsaW5nIHN0YXRlIGZvci4gKi8KLQl1aW50MzJfdCBoYW5kbGU7CisJX191MzIgaGFuZGxlOwogCiAJLyoqCiAJICogQ3VycmVudCB0aWxpbmcgbW9kZSBmb3IgdGhlIG9iamVjdCAoSTkxNV9USUxJTkdfTk9ORSwgSTkxNV9USUxJTkdfWCwKIAkgKiBJOTE1X1RJTElOR19ZKS4KIAkgKi8KLQl1aW50MzJfdCB0aWxpbmdfbW9kZTsKKwlfX3UzMiB0aWxpbmdfbW9kZTsKIAogCS8qKgogCSAqIFJldHVybmVkIGFkZHJlc3MgYml0IDYgc3dpenpsaW5nIHJlcXVpcmVkIGZvciBDUFUgYWNjZXNzIHRocm91Z2gKIAkgKiBtbWFwIG1hcHBpbmcuCiAJICovCi0JdWludDMyX3Qgc3dpenpsZV9tb2RlOworCV9fdTMyIHN3aXp6bGVfbW9kZTsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9nZW1fZ2V0X2FwZXJ0dXJlIHsKIAkvKiogVG90YWwgc2l6ZSBvZiB0aGUgYXBlcnR1cmUgdXNlZCBieSBpOTE1X2dlbV9leGVjYnVmZmVyLCBpbiBieXRlcyAqLwotCXVpbnQ2NF90IGFwZXJfc2l6ZTsKKwlfX3U2NCBhcGVyX3NpemU7CiAKIAkvKioKIAkgKiBBdmFpbGFibGUgc3BhY2UgaW4gdGhlIGFwZXJ0dXJlIHVzZWQgYnkgaTkxNV9nZW1fZXhlY2J1ZmZlciwgaW4KIAkgKiBieXRlcwogCSAqLwotCXVpbnQ2NF90IGFwZXJfYXZhaWxhYmxlX3NpemU7CisJX191NjQgYXBlcl9hdmFpbGFibGVfc2l6ZTsKIH07CiAKICNlbmRpZgkJCQkvKiBfSTkxNV9EUk1fSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL21nYV9kcm0uaCBiL2luY2x1ZGUvZHJtL21nYV9kcm0uaAppbmRleCA5NDRiNTBhLi4zMjVmZDZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9tZ2FfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vbWdhX2RybS5oCkBAIC0zNSw2ICszNSw4IEBACiAjaWZuZGVmIF9fTUdBX0RSTV9IX18KICNkZWZpbmUgX19NR0FfRFJNX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogV0FSTklORzogSWYgeW91IGNoYW5nZSBhbnkgb2YgdGhlc2UgZGVmaW5lcywgbWFrZSBzdXJlIHRvIGNoYW5nZSB0aGUKICAqIGRlZmluZXMgaW4gdGhlIFhzZXJ2ZXIgZmlsZSAobWdhX3NhcmVhLmgpCiAgKi8KQEAgLTI1NSw4ICsyNTcsOCBAQAogI2RlZmluZSBEUk1fSU9DVExfTUdBX0lMT0FEICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX0lMT0FELCBkcm1fbWdhX2lsb2FkX3QpCiAjZGVmaW5lIERSTV9JT0NUTF9NR0FfQkxJVCAgICAgRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfQkxJVCwgZHJtX21nYV9ibGl0X3QpCiAjZGVmaW5lIERSTV9JT0NUTF9NR0FfR0VUUEFSQU0gRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9NR0FfR0VUUEFSQU0sIGRybV9tZ2FfZ2V0cGFyYW1fdCkKLSNkZWZpbmUgRFJNX0lPQ1RMX01HQV9TRVRfRkVOQ0UgICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX1NFVF9GRU5DRSwgdWludDMyX3QpCi0jZGVmaW5lIERSTV9JT0NUTF9NR0FfV0FJVF9GRU5DRSAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9XQUlUX0ZFTkNFLCB1aW50MzJfdCkKKyNkZWZpbmUgRFJNX0lPQ1RMX01HQV9TRVRfRkVOQ0UgICAgIERSTV9JT1coIERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX1NFVF9GRU5DRSwgX191MzIpCisjZGVmaW5lIERSTV9JT0NUTF9NR0FfV0FJVF9GRU5DRSAgICBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX01HQV9XQUlUX0ZFTkNFLCBfX3UzMikKICNkZWZpbmUgRFJNX0lPQ1RMX01HQV9ETUFfQk9PVFNUUkFQIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fTUdBX0RNQV9CT09UU1RSQVAsIGRybV9tZ2FfZG1hX2Jvb3RzdHJhcF90KQogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX21nYV93YXJwX2luZGV4IHsKQEAgLTMxMCw3ICszMTIsNyBAQAogCSAqLwogCS8qQHsgKi8KIAl1bnNpZ25lZCBsb25nIHRleHR1cmVfaGFuZGxlOyAvKio8IEhhbmRsZSB1c2VkIHRvIG1hcCBBR1AgdGV4dHVyZXMuICovCi0JdWludDMyX3QgdGV4dHVyZV9zaXplOwkgICAgICAvKio8IFNpemUgb2YgdGhlIEFHUCB0ZXh0dXJlIHJlZ2lvbi4gKi8KKwlfX3UzMiB0ZXh0dXJlX3NpemU7CSAgICAgIC8qKjwgU2l6ZSBvZiB0aGUgQUdQIHRleHR1cmUgcmVnaW9uLiAqLwogCS8qQH0gKi8KIAogCS8qKgpAQCAtMzE5LDcgKzMyMSw3IEBACiAJICogT24gcmV0dXJuIGZyb20gdGhlIERSTV9NR0FfRE1BX0JPT1RTVFJBUCBpb2N0bCwgdGhpcyBmaWVsZCB3aWxsIGJlCiAJICogZmlsbGVkIGluIHdpdGggdGhlIGFjdHVhbCBBR1AgbW9kZS4gIElmIEFHUCB3YXMgbm90IGF2YWlsYWJsZQogCSAqLwotCXVpbnQzMl90IHByaW1hcnlfc2l6ZTsKKwlfX3UzMiBwcmltYXJ5X3NpemU7CiAKIAkvKioKIAkgKiBSZXF1ZXN0ZWQgbnVtYmVyIG9mIHNlY29uZGFyeSBETUEgYnVmZmVycy4KQEAgLTMyOSw3ICszMzEsNyBAQAogCSAqIGFsbG9jYXRlZC4gIFBhcnRpY3VsYXJseSB3aGVuIFBDSSBETUEgaXMgdXNlZCwgdGhpcyBtYXkgYmUKIAkgKiAoc3VidGFudGlhbGx5KSBsZXNzIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQuCiAJICovCi0JdWludDMyX3Qgc2Vjb25kYXJ5X2Jpbl9jb3VudDsKKwlfX3UzMiBzZWNvbmRhcnlfYmluX2NvdW50OwogCiAJLyoqCiAJICogUmVxdWVzdGVkIHNpemUgb2YgZWFjaCBzZWNvbmRhcnkgRE1BIGJ1ZmZlci4KQEAgLTMzOCw3ICszNDAsNyBAQAogCSAqIGRtYV9tZ2FfZG1hX2Jvb3RzdHJhcDo6c2Vjb25kYXJ5X2Jpbl9jb3VudCwgaXQgaXMgXGIgbm90IGFsbG93ZWQKIAkgKiB0byByZWR1Y2UgZG1hX21nYV9kbWFfYm9vdHN0cmFwOjpzZWNvbmRhcnlfYmluX3NpemUuCiAJICovCi0JdWludDMyX3Qgc2Vjb25kYXJ5X2Jpbl9zaXplOworCV9fdTMyIHNlY29uZGFyeV9iaW5fc2l6ZTsKIAogCS8qKgogCSAqIEJpdC13aXNlIG1hc2sgb2YgQUdQU1RBVDJfKiB2YWx1ZXMuICBDdXJyZW50bHkgb25seSBcYyBBR1BTVEFUMl8xWCwKQEAgLTM1MCwxMiArMzUyLDEyIEBACiAJICogZmlsbGVkIGluIHdpdGggdGhlIGFjdHVhbCBBR1AgbW9kZS4gIElmIEFHUCB3YXMgbm90IGF2YWlsYWJsZQogCSAqIChpLmUuLCBQQ0kgRE1BIHdhcyB1c2VkKSwgdGhpcyB2YWx1ZSB3aWxsIGJlIHplcm8uCiAJICovCi0JdWludDMyX3QgYWdwX21vZGU7CisJX191MzIgYWdwX21vZGU7CiAKIAkvKioKIAkgKiBEZXNpcmVkIEFHUCBHQVJUIHNpemUsIG1lYXN1cmVkIGluIG1lZ2FieXRlcy4KIAkgKi8KLQl1aW50OF90IGFncF9zaXplOworCV9fdTggYWdwX3NpemU7CiB9IGRybV9tZ2FfZG1hX2Jvb3RzdHJhcF90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fbWdhX2NsZWFyIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaCBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAppbmRleCA3M2ZmNTFmLi43MmVjZjY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCkBAIC0zMyw2ICszMyw4IEBACiAjaWZuZGVmIF9fUkFERU9OX0RSTV9IX18KICNkZWZpbmUgX19SQURFT05fRFJNX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogV0FSTklORzogSWYgeW91IGNoYW5nZSBhbnkgb2YgdGhlc2UgZGVmaW5lcywgbWFrZSBzdXJlIHRvIGNoYW5nZSB0aGUKICAqIGRlZmluZXMgaW4gdGhlIFggc2VydmVyIGZpbGUgKHJhZGVvbl9zYXJlYS5oKQogICovCkBAIC03MjIsNyArNzI0LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3JhZGVvbl9zZXRwYXJhbSB7CiAJdW5zaWduZWQgaW50IHBhcmFtOwotCWludDY0X3QgdmFsdWU7CisJX19zNjQgdmFsdWU7CiB9IGRybV9yYWRlb25fc2V0cGFyYW1fdDsKIAogI2RlZmluZSBSQURFT05fU0VUUEFSQU1fRkJfTE9DQVRJT04gICAgMQkvKiBkZXRlcm1pbmVkIGZyYW1lYnVmZmVyIGxvY2F0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS92aWFfZHJtLmggYi9pbmNsdWRlL2RybS92aWFfZHJtLmgKaW5kZXggYTNiNWMxMC4uMTcwNzg2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vdmlhX2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL3ZpYV9kcm0uaApAQCAtMjQsNiArMjQsOCBAQAogI2lmbmRlZiBfVklBX0RSTV9IXwogI2RlZmluZSBfVklBX0RSTV9IXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogV0FSTklORzogVGhlc2UgZGVmaW5lcyBtdXN0IGJlIHRoZSBzYW1lIGFzIHdoYXQgdGhlIFhzZXJ2ZXIgdXNlcy4KICAqIGlmIHlvdSBjaGFuZ2UgdGhlbSwgeW91IG11c3QgY2hhbmdlIHRoZSBkZWZpbmVzIGluIHRoZSBYc2VydmVyLgogICovCkBAIC0xMTQsMTkgKzExNiwxOSBAQAogI2RlZmluZSBWSUFfTUVNX1VOS05PV04gNAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IHNpemU7CisJX191MzIgb2Zmc2V0OworCV9fdTMyIHNpemU7CiB9IGRybV92aWFfYWdwX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3Qgc2l6ZTsKKwlfX3UzMiBvZmZzZXQ7CisJX191MzIgc2l6ZTsKIH0gZHJtX3ZpYV9mYl90OwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3QgY29udGV4dDsKLQl1aW50MzJfdCB0eXBlOwotCXVpbnQzMl90IHNpemU7CisJX191MzIgY29udGV4dDsKKwlfX3UzMiB0eXBlOworCV9fdTMyIHNpemU7CiAJdW5zaWduZWQgbG9uZyBpbmRleDsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKIH0gZHJtX3ZpYV9tZW1fdDsKQEAgLTE0OCw5ICsxNTAsOSBAQAogCQlWSUFfRlVURVhfV0FJVCA9IDB4MDAsCiAJCVZJQV9GVVRFWF9XQUtFID0gMFgwMQogCX0gZnVuYzsKLQl1aW50MzJfdCBtczsKLQl1aW50MzJfdCBsb2NrOwotCXVpbnQzMl90IHZhbDsKKwlfX3UzMiBtczsKKwlfX3UzMiBsb2NrOworCV9fdTMyIHZhbDsKIH0gZHJtX3ZpYV9mdXRleF90OwogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX3ZpYV9kbWFfaW5pdCB7CkBAIC0yMTEsNyArMjEzLDcgQEAKIAkJVklBX0NNREJVRl9MQUcgPSAweDAyCiAJfSBmdW5jOwogCWludCB3YWl0OwotCXVpbnQzMl90IHNpemU7CisJX191MzIgc2l6ZTsKIH0gZHJtX3ZpYV9jbWRidWZfc2l6ZV90OwogCiB0eXBlZGVmIGVudW0gewpAQCAtMjM2LDggKzIzOCw4IEBACiBzdHJ1Y3QgZHJtX3ZpYV93YWl0X2lycV9yZXF1ZXN0IHsKIAl1bnNpZ25lZCBpcnE7CiAJdmlhX2lycV9zZXFfdHlwZV90IHR5cGU7Ci0JdWludDMyX3Qgc2VxdWVuY2U7Ci0JdWludDMyX3Qgc2lnbmFsOworCV9fdTMyIHNlcXVlbmNlOworCV9fdTMyIHNpZ25hbDsKIH07CiAKIHR5cGVkZWYgdW5pb24gZHJtX3ZpYV9pcnF3YWl0IHsKQEAgLTI0Niw3ICsyNDgsNyBAQAogfSBkcm1fdmlhX2lycXdhaXRfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3ZpYV9ibGl0c3luYyB7Ci0JdWludDMyX3Qgc3luY19oYW5kbGU7CisJX191MzIgc3luY19oYW5kbGU7CiAJdW5zaWduZWQgZW5naW5lOwogfSBkcm1fdmlhX2JsaXRzeW5jX3Q7CiAKQEAgLTI1NywxNiArMjU5LDE2IEBACiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX3ZpYV9kbWFibGl0IHsKLQl1aW50MzJfdCBudW1fbGluZXM7Ci0JdWludDMyX3QgbGluZV9sZW5ndGg7CisJX191MzIgbnVtX2xpbmVzOworCV9fdTMyIGxpbmVfbGVuZ3RoOwogCi0JdWludDMyX3QgZmJfYWRkcjsKLQl1aW50MzJfdCBmYl9zdHJpZGU7CisJX191MzIgZmJfYWRkcjsKKwlfX3UzMiBmYl9zdHJpZGU7CiAKIAl1bnNpZ25lZCBjaGFyICptZW1fYWRkcjsKLQl1aW50MzJfdCBtZW1fc3RyaWRlOworCV9fdTMyIG1lbV9zdHJpZGU7CiAKLQl1aW50MzJfdCBmbGFnczsKKwlfX3UzMiBmbGFnczsKIAlpbnQgdG9fZmI7CiAKIAlkcm1fdmlhX2JsaXRzeW5jX3Qgc3luYzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggMTA2YzNiYS4uZTk1ODFmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTExNSw2ICsxMTUsNyBAQAogaGVhZGVyLXkgKz0gbXRpby5oCiBoZWFkZXIteSArPSBuY3Bfbm8uaAogaGVhZGVyLXkgKz0gbmVpZ2hib3VyLmgKK2hlYWRlci15ICs9IG5ldF9kcm9wbW9uLmgKIGhlYWRlci15ICs9IG5ldGZpbHRlcl9hcnAuaAogaGVhZGVyLXkgKz0gbmV0cm9tLmgKIGhlYWRlci15ICs9IG5mczIuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hZ3BnYXJ0LmggYi9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaAppbmRleCAxMTBjNjAwLi5mNjc3OGVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaApAQCAtNzcsMjAgKzc3LDIwIEBACiAgKiBUaGUgInByb3QiIGRvd24gYmVsb3cgbmVlZHMgc3RpbGwgYSAic2xlZXAiIGZsYWcgc29tZWhvdyAuLi4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgX2FncF9zZWdtZW50IHsKLQlvZmZfdCBwZ19zdGFydDsJCS8qIHN0YXJ0aW5nIHBhZ2UgdG8gcG9wdWxhdGUgICAgKi8KLQlzaXplX3QgcGdfY291bnQ7CS8qIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAgKi8KLQlpbnQgcHJvdDsJCS8qIHByb3QgZmxhZ3MgZm9yIG1tYXAgICAgICAgICAgKi8KKwlfX2tlcm5lbF9vZmZfdCBwZ19zdGFydDsJLyogc3RhcnRpbmcgcGFnZSB0byBwb3B1bGF0ZSAgICAqLworCV9fa2VybmVsX3NpemVfdCBwZ19jb3VudDsJLyogbnVtYmVyIG9mIHBhZ2VzICAgICAgICAgICAgICAqLworCWludCBwcm90OwkJCS8qIHByb3QgZmxhZ3MgZm9yIG1tYXAgICAgICAgICAgKi8KIH0gYWdwX3NlZ21lbnQ7CiAKIHR5cGVkZWYgc3RydWN0IF9hZ3BfcmVnaW9uIHsKLQlwaWRfdCBwaWQ7CQkvKiBwaWQgb2YgcHJvY2VzcyAgICAgICAgICAgICAgICovCi0Jc2l6ZV90IHNlZ19jb3VudDsJLyogbnVtYmVyIG9mIHNlZ21lbnRzICAgICAgICAgICAqLworCV9fa2VybmVsX3BpZF90IHBpZDsJCS8qIHBpZCBvZiBwcm9jZXNzICAgICAgICovCisJX19rZXJuZWxfc2l6ZV90IHNlZ19jb3VudDsJLyogbnVtYmVyIG9mIHNlZ21lbnRzICAgKi8KIAlzdHJ1Y3QgX2FncF9zZWdtZW50ICpzZWdfbGlzdDsKIH0gYWdwX3JlZ2lvbjsKIAogdHlwZWRlZiBzdHJ1Y3QgX2FncF9hbGxvY2F0ZSB7CiAJaW50IGtleTsJCS8qIHRhZyBvZiBhbGxvY2F0aW9uICAgICAgICAgICAgKi8KLQlzaXplX3QgcGdfY291bnQ7CS8qIG51bWJlciBvZiBwYWdlcyAgICAgICAgICAgICAgKi8KKwlfX2tlcm5lbF9zaXplX3QgcGdfY291bnQ7LyogbnVtYmVyIG9mIHBhZ2VzICAgICAgICAgICAgICovCiAJX191MzIgdHlwZTsJCS8qIDAgPT0gbm9ybWFsLCBvdGhlciBkZXZzcGVjICAgKi8KICAgIAlfX3UzMiBwaHlzaWNhbDsgICAgICAgICAvKiBkZXZpY2Ugc3BlY2lmaWMgKHNvbWUgZGV2aWNlcyAgCiAJCQkJICogbmVlZCBhIHBoeXMgYWRkcmVzcyBvZiB0aGUgICAgIApAQCAtMTAwLDcgKzEwMCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IF9hZ3BfYmluZCB7CiAJaW50IGtleTsJCS8qIHRhZyBvZiBhbGxvY2F0aW9uICAgICAgICAgICAgKi8KLQlvZmZfdCBwZ19zdGFydDsJCS8qIHN0YXJ0aW5nIHBhZ2UgdG8gcG9wdWxhdGUgICAgKi8KKwlfX2tlcm5lbF9vZmZfdCBwZ19zdGFydDsvKiBzdGFydGluZyBwYWdlIHRvIHBvcHVsYXRlICAgICovCiB9IGFncF9iaW5kOwogCiB0eXBlZGVmIHN0cnVjdCBfYWdwX3VuYmluZCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9hcmNkZXZpY2UuaAppbmRleCBhMTkxNjA3Li5jZDRiY2I2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2FyY2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvYXJjZGV2aWNlLmgKQEAgLTIzNSw4ICsyMzUsNiBAQAogCiAKIHN0cnVjdCBhcmNuZXRfbG9jYWwgewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotCiAJdWludDhfdCBjb25maWcsCQkvKiBjdXJyZW50IHZhbHVlIG9mIENPTkZJRyByZWdpc3RlciAqLwogCQl0aW1lb3V0LAkvKiBFeHRlbmRlZCB0aW1lb3V0IGZvciBDT00yMDAyMCAqLwogCQliYWNrcGxhbmUsCS8qIEJhY2twbGFuZSBmbGFnIGZvciBDT00yMDAyMCAqLwpAQCAtMzM1LDcgKzMzMywxMiBAQAogCiB2b2lkIGFyY25ldF91bnJlZ2lzdGVyX3Byb3RvKHN0cnVjdCBBcmNQcm90byAqcHJvdG8pOwogaXJxcmV0dXJuX3QgYXJjbmV0X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2FyY2RldihjaGFyICpuYW1lKTsKK3N0cnVjdCBuZXRfZGV2aWNlICphbGxvY19hcmNkZXYoY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBhcmNuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK2ludCBhcmNuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitpbnQgYXJjbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBhcmNuZXRfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgkJCQkvKiBfTElOVVhfQVJDREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRhLmggYi9pbmNsdWRlL2xpbnV4L2F0YS5oCmluZGV4IDlhMDYxYWMuLjY2MTdjOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdGEuaApAQCAtMTA4LDYgKzEwOCw4IEBACiAJQVRBX1BJTzUJCT0gQVRBX1BJTzQgfCAoMSA8PCA1KSwKIAlBVEFfUElPNgkJPSBBVEFfUElPNSB8ICgxIDw8IDYpLAogCisJQVRBX1BJTzRfT05MWQkJPSAoMSA8PCA0KSwKKwogCUFUQV9TV0RNQTAJCT0gKDEgPDwgMCksCiAJQVRBX1NXRE1BMQkJPSBBVEFfU1dETUEwIHwgKDEgPDwgMSksCiAJQVRBX1NXRE1BMgkJPSBBVEFfU1dETUExIHwgKDEgPDwgMiksCkBAIC0xMTcsNiArMTE5LDggQEAKIAlBVEFfTVdETUEwCQk9ICgxIDw8IDApLAogCUFUQV9NV0RNQTEJCT0gQVRBX01XRE1BMCB8ICgxIDw8IDEpLAogCUFUQV9NV0RNQTIJCT0gQVRBX01XRE1BMSB8ICgxIDw8IDIpLAorCUFUQV9NV0RNQTMJCT0gQVRBX01XRE1BMiB8ICgxIDw8IDMpLAorCUFUQV9NV0RNQTQJCT0gQVRBX01XRE1BMyB8ICgxIDw8IDQpLAogCiAJQVRBX01XRE1BMTJfT05MWQk9ICgxIDw8IDEpIHwgKDEgPDwgMiksCiAJQVRBX01XRE1BMl9PTkxZCQk9ICgxIDw8IDIpLApAQCAtMTMxLDYgKzEzNSw4IEBACiAJQVRBX1VETUE3CQk9IEFUQV9VRE1BNiB8ICgxIDw8IDcpLAogCS8qIEFUQV9VRE1BNyBpcyBqdXN0IGZvciBjb21wbGV0ZW5lc3MuLi4gZG9lc24ndCBleGlzdCAoeWV0PykuICAqLwogCisJQVRBX1VETUEyNF9PTkxZCQk9ICgxIDw8IDIpIHwgKDEgPDwgNCksCisKIAlBVEFfVURNQV9NQVNLXzQwQwk9IEFUQV9VRE1BMiwJLyogdWRtYTAtMiAqLwogCiAJLyogRE1BLXJlbGF0ZWQgKi8KQEAgLTI0NCw4ICsyNTAsNiBAQAogCUFUQV9DTURfTUVESUFfVU5MT0NLCT0gMHhERiwKIAkvKiBtYXJrZWQgb2Jzb2xldGUgaW4gdGhlIEFUQS9BVEFQSS03IHNwZWMgKi8KIAlBVEFfQ01EX1JFU1RPUkUJCT0gMHgxMCwKLQkvKiBFWEFCWVRFIHNwZWNpZmljICovCi0JQVRBX0VYQUJZVEVfRU5BQkxFX05FU1QJPSAweEYwLAogCiAJLyogUkVBRF9MT0dfRVhUIHBhZ2VzICovCiAJQVRBX0xPR19TQVRBX05DUQk9IDB4MTAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0aDlrX3BsYXRmb3JtLmggYi9pbmNsdWRlL2xpbnV4L2F0aDlrX3BsYXRmb3JtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0N2ZjNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYXRoOWtfcGxhdGZvcm0uaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA5IEdhYm9yIEp1aG9zIDxqdWhvc2dAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgSW1yZSBLYWxveiA8a2Fsb3pAb3BlbndydC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfTElOVVhfQVRIOUtfUExBVEZPUk1fSAorI2RlZmluZSBfTElOVVhfQVRIOUtfUExBVEZPUk1fSAorCisjZGVmaW5lIEFUSDlLX1BMQVRfRUVQX01BWF9XT1JEUwkyMDQ4CisKK3N0cnVjdCBhdGg5a19wbGF0Zm9ybV9kYXRhIHsKKwl1MTYgZWVwcm9tX2RhdGFbQVRIOUtfUExBVF9FRVBfTUFYX1dPUkRTXTsKK307CisKKyNlbmRpZiAvKiBfTElOVVhfQVRIOUtfUExBVEZPUk1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1sZWMuaCBiL2luY2x1ZGUvbGludXgvYXRtbGVjLmgKaW5kZXggNmY1YTFiYWIuLjM5YzkxN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRtbGVjLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdG1sZWMuaApAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyogQVRNIGxlYyBkYWVtb24gY29udHJvbCBzb2NrZXQgKi8KICNkZWZpbmUgQVRNTEVDX0NUUkwJX0lPKCdhJywgQVRNSU9DX0xBTkUpCkBAIC03OCw4ICs3OSw4IEBACiAJCX0gbm9ybWFsOwogCQlzdHJ1Y3QgYXRtbGVjX2NvbmZpZ19tc2cgY29uZmlnOwogCQlzdHJ1Y3QgewotCQkJdWludDE2X3QgbGVjX2lkOwkJCS8qIHJlcXVlc3RvciBsZWNfaWQgICovCi0JCQl1aW50MzJfdCB0cmFuX2lkOwkJCS8qIHRyYW5zYWN0aW9uIGlkICAgICovCisJCQlfX3UxNiBsZWNfaWQ7CQkJCS8qIHJlcXVlc3RvciBsZWNfaWQgICovCisJCQlfX3UzMiB0cmFuX2lkOwkJCQkvKiB0cmFuc2FjdGlvbiBpZCAgICAqLwogCQkJdW5zaWduZWQgY2hhciBtYWNfYWRkcltFVEhfQUxFTl07CS8qIGRzdCBtYWMgYWRkciAgICAgICovCiAJCQl1bnNpZ25lZCBjaGFyIGF0bV9hZGRyW0FUTV9FU0FfTEVOXTsJLyogcmVxZXN0b3IgQVRNIGFkZHIgKi8KIAkJfSBwcm94eTsJLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRtbXBjLmggYi9pbmNsdWRlL2xpbnV4L2F0bW1wYy5oCmluZGV4IGVhMTY1MDQuLjJhYmE1NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRtbXBjLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdG1tcGMuaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdG1hcGkuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KICNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIEFUTU1QQ19DVFJMIF9JTygnYScsIEFUTUlPQ19NUE9BKQogI2RlZmluZSBBVE1NUENfREFUQSBfSU8oJ2EnLCBBVE1JT0NfTVBPQSsxKQpAQCAtMTgsMzkgKzE5LDM5IEBACiB9OwogCiB0eXBlZGVmIHN0cnVjdCBpbl9jdHJsX2luZm8gewotICAgICAgICB1aW50OF90ICAgTGFzdF9OSFJQX0NJRV9jb2RlOwotICAgICAgICB1aW50OF90ICAgTGFzdF9RMjkzMV9jYXVzZV92YWx1ZTsgICAgIAotICAgICAgICB1aW50OF90ICAgZWdfTVBDX0FUTV9hZGRyW0FUTV9FU0FfTEVOXTsKKyAgICAgICAgX191OCAgIExhc3RfTkhSUF9DSUVfY29kZTsKKyAgICAgICAgX191OCAgIExhc3RfUTI5MzFfY2F1c2VfdmFsdWU7CisgICAgICAgIF9fdTggICBlZ19NUENfQVRNX2FkZHJbQVRNX0VTQV9MRU5dOwogICAgICAgICBfX2JlMzIgIHRhZzsKICAgICAgICAgX19iZTMyICBpbl9kc3RfaXA7ICAgICAgLyogSVAgYWRkcmVzcyB0aGlzIGluZ3Jlc3MgTVBDIHNlbmRzIHBhY2tldHMgdG8gKi8KLSAgICAgICAgdWludDE2X3QgIGhvbGRpbmdfdGltZTsKLSAgICAgICAgdWludDMyX3QgIHJlcXVlc3RfaWQ7CisgICAgICAgIF9fdTE2ICBob2xkaW5nX3RpbWU7CisgICAgICAgIF9fdTMyICByZXF1ZXN0X2lkOwogfSBpbl9jdHJsX2luZm87CiAKIHR5cGVkZWYgc3RydWN0IGVnX2N0cmxfaW5mbyB7Ci0gICAgICAgIHVpbnQ4X3QgICBETExfaGVhZGVyWzI1Nl07Ci0gICAgICAgIHVpbnQ4X3QgICBESF9sZW5ndGg7CisgICAgICAgIF9fdTggICBETExfaGVhZGVyWzI1Nl07CisgICAgICAgIF9fdTggICBESF9sZW5ndGg7CiAgICAgICAgIF9fYmUzMiAgY2FjaGVfaWQ7CiAgICAgICAgIF9fYmUzMiAgdGFnOwogICAgICAgICBfX2JlMzIgIG1wc19pcDsKICAgICAgICAgX19iZTMyICBlZ19kc3RfaXA7ICAgICAgLyogSVAgYWRkcmVzcyB0byB3aGljaCBpbmdyZXNzIE1QQyBzZW5kcyBwYWNrZXRzICovCi0gICAgICAgIHVpbnQ4X3QgICBpbl9NUENfZGF0YV9BVE1fYWRkcltBVE1fRVNBX0xFTl07Ci0gICAgICAgIHVpbnQxNl90ICBob2xkaW5nX3RpbWU7CisgICAgICAgIF9fdTggICBpbl9NUENfZGF0YV9BVE1fYWRkcltBVE1fRVNBX0xFTl07CisgICAgICAgIF9fdTE2ICBob2xkaW5nX3RpbWU7CiB9IGVnX2N0cmxfaW5mbzsKIAogc3RydWN0IG1wY19wYXJhbWV0ZXJzIHsKLSAgICAgICAgdWludDE2X3QgbXBjX3AxOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIENvdW50ICAgICovCi0gICAgICAgIHVpbnQxNl90IG1wY19wMjsgICAvKiBTaG9ydGN1dC1TZXR1cCBGcmFtZSBUaW1lICAgICAqLwotICAgICAgICB1aW50OF90IG1wY19wM1s4XTsgLyogRmxvdy1kZXRlY3Rpb24gUHJvdG9jb2xzICAgICAgKi8KLSAgICAgICAgdWludDE2X3QgbXBjX3A0OyAgIC8qIE1QQyBJbml0aWFsIFJldHJ5IFRpbWUgICAgICAgICovCi0gICAgICAgIHVpbnQxNl90IG1wY19wNTsgICAvKiBNUEMgUmV0cnkgVGltZSBNYXhpbXVtICAgICAgICAqLwotICAgICAgICB1aW50MTZfdCBtcGNfcDY7ICAgLyogSG9sZCBEb3duIFRpbWUgICAgICAgICAgICAgICAgKi8gICAgICAKKyAgICAgICAgX191MTYgbXBjX3AxOyAgIC8qIFNob3J0Y3V0LVNldHVwIEZyYW1lIENvdW50ICAgICovCisgICAgICAgIF9fdTE2IG1wY19wMjsgICAvKiBTaG9ydGN1dC1TZXR1cCBGcmFtZSBUaW1lICAgICAqLworICAgICAgICBfX3U4IG1wY19wM1s4XTsgLyogRmxvdy1kZXRlY3Rpb24gUHJvdG9jb2xzICAgICAgKi8KKyAgICAgICAgX191MTYgbXBjX3A0OyAgIC8qIE1QQyBJbml0aWFsIFJldHJ5IFRpbWUgICAgICAgICovCisgICAgICAgIF9fdTE2IG1wY19wNTsgICAvKiBNUEMgUmV0cnkgVGltZSBNYXhpbXVtICAgICAgICAqLworICAgICAgICBfX3UxNiBtcGNfcDY7ICAgLyogSG9sZCBEb3duIFRpbWUgICAgICAgICAgICAgICAgKi8KIH0gOwogCiBzdHJ1Y3Qga19tZXNzYWdlIHsKLSAgICAgICAgdWludDE2X3QgdHlwZTsKKyAgICAgICAgX191MTYgdHlwZTsKICAgICAgICAgX19iZTMyIGlwX21hc2s7Ci0gICAgICAgIHVpbnQ4X3QgIE1QU19jdHJsW0FUTV9FU0FfTEVOXTsKKyAgICAgICAgX191OCAgTVBTX2N0cmxbQVRNX0VTQV9MRU5dOwogICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICAgaW5fY3RybF9pbmZvIGluX2luZm87CiAgICAgICAgICAgICAgICAgZWdfY3RybF9pbmZvIGVnX2luZm87CkBAIC02MSwxMSArNjIsMTEgQEAKIAogc3RydWN0IGxsY19zbmFwX2hkciB7CiAJLyogUkZDIDE0ODMgTExDL1NOQVAgZW5jYXBzdWxhdGlvbiBmb3Igcm91dGVkIElQIFBEVXMgKi8KLSAgICAgICAgdWludDhfdCAgZHNhcDsgICAgLyogRGVzdGluYXRpb24gU2VydmljZSBBY2Nlc3MgUG9pbnQgKDB4QUEpICAgICAqLwotICAgICAgICB1aW50OF90ICBzc2FwOyAgICAvKiBTb3VyY2UgU2VydmljZSBBY2Nlc3MgUG9pbnQgICAgICAoMHhBQSkgICAgICovCi0gICAgICAgIHVpbnQ4X3QgIHVpOyAgICAgIC8qIFVubnVtYmVyZWQgSW5mb3JtYXRpb24gICAgICAgICAgICgweDAzKSAgICAgKi8KLSAgICAgICAgdWludDhfdCAgb3JnWzNdOyAgLyogT3JnYW5pemF0aW9uYWwgaWRlbnRpZmljYXRpb24gICAgKDB4MDAwMDAwKSAqLwotICAgICAgICB1aW50OF90ICB0eXBlWzJdOyAvKiBFdGhlciB0eXBlIChmb3IgSVApICAgICAgICAgICAgICAoMHgwODAwKSAgICovCisgICAgICAgIF9fdTggIGRzYXA7ICAgIC8qIERlc3RpbmF0aW9uIFNlcnZpY2UgQWNjZXNzIFBvaW50ICgweEFBKSAgICAgKi8KKyAgICAgICAgX191OCAgc3NhcDsgICAgLyogU291cmNlIFNlcnZpY2UgQWNjZXNzIFBvaW50ICAgICAgKDB4QUEpICAgICAqLworICAgICAgICBfX3U4ICB1aTsgICAgICAvKiBVbm51bWJlcmVkIEluZm9ybWF0aW9uICAgICAgICAgICAoMHgwMykgICAgICovCisgICAgICAgIF9fdTggIG9yZ1szXTsgIC8qIE9yZ2FuaXphdGlvbmFsIGlkZW50aWZpY2F0aW9uICAgICgweDAwMDAwMCkgKi8KKyAgICAgICAgX191OCAgdHlwZVsyXTsgLyogRXRoZXIgdHlwZSAoZm9yIElQKSAgICAgICAgICAgICAgKDB4MDgwMCkgICAqLwogfTsKIAogLyogVExWcyB0aGlzIE1QQyByZWNvZ25pemVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmggYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKaW5kZXggNjdlNWRiZi4uNGZhMjgxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdWRpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvYXVkaXQuaApAQCAtMzYsNyArMzYsOCBAQAogICogMTUwMCAtIDE1OTkga2VybmVsIExTUFAgZXZlbnRzCiAgKiAxNjAwIC0gMTY5OSBrZXJuZWwgY3J5cHRvIGV2ZW50cwogICogMTcwMCAtIDE3OTkga2VybmVsIGFub21hbHkgcmVjb3JkcwotICogMTgwMCAtIDE5OTkgZnV0dXJlIGtlcm5lbCB1c2UgKG1heWJlIGludGVncml0eSBsYWJlbHMgYW5kIHJlbGF0ZWQgZXZlbnRzKQorICogMTgwMCAtIDE4OTkga2VybmVsIGludGVncml0eSBldmVudHMKKyAqIDE5MDAgLSAxOTk5IGZ1dHVyZSBrZXJuZWwgdXNlCiAgKiAyMDAwIGlzIGZvciBvdGhlcndpc2UgdW5jbGFzc2lmaWVkIGtlcm5lbCBhdWRpdCBtZXNzYWdlcyAobGVnYWN5KQogICogMjAwMSAtIDIwOTkgdW51c2VkIChrZXJuZWwpCiAgKiAyMTAwIC0gMjE5OSB1c2VyIHNwYWNlIGFub21hbHkgcmVjb3JkcwpAQCAtMTI1LDYgKzEyNiwxMiBAQAogI2RlZmluZSBBVURJVF9MQVNUX0tFUk5fQU5PTV9NU0cgICAgMTc5OQogI2RlZmluZSBBVURJVF9BTk9NX1BST01JU0NVT1VTICAgICAgMTcwMCAvKiBEZXZpY2UgY2hhbmdlZCBwcm9taXNjdW91cyBtb2RlICovCiAjZGVmaW5lIEFVRElUX0FOT01fQUJFTkQgICAgICAgICAgICAxNzAxIC8qIFByb2Nlc3MgZW5kZWQgYWJub3JtYWxseSAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfREFUQQkgICAgMTgwMCAvKiBEYXRhIGludGVncml0eSB2ZXJpZmljYXRpb24gKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX01FVEFEQVRBICAgIDE4MDEgLyogTWV0YWRhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvbiAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfU1RBVFVTCSAgICAxODAyIC8qIEludGVncml0eSBlbmFibGUgc3RhdHVzICovCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9IQVNICSAgICAxODAzIC8qIEludGVncml0eSBIQVNIIHR5cGUgKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX1BDUgkgICAgMTgwNCAvKiBQQ1IgaW52YWxpZGF0aW9uIG1zZ3MgKi8KKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX1JVTEUJICAgIDE4MDUgLyogcG9saWN5IHJ1bGUgKi8KIAogI2RlZmluZSBBVURJVF9LRVJORUwJCTIwMDAJLyogQXN5bmNocm9ub3VzIGF1ZGl0IHJlY29yZC4gTk9UIEEgUkVRVUVTVC4gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW8uaCBiL2luY2x1ZGUvbGludXgvYmlvLmgKaW5kZXggZDhiZDQzYi4uYjA1YjFkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jpby5oCkBAIC00MjYsOSArNDI2LDYgQEAKIAl1bnNpZ25lZCBpbnQgZnJvbnRfcGFkOwogCiAJbWVtcG9vbF90ICpiaW9fcG9vbDsKLSNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lOVEVHUklUWSkKLQltZW1wb29sX3QgKmJpb19pbnRlZ3JpdHlfcG9vbDsKLSNlbmRpZgogCW1lbXBvb2xfdCAqYnZlY19wb29sOwogfTsKIApAQCAtNTE5LDkgKzUxNiw4IEBACiAKICNkZWZpbmUgYmlvX2ludGVncml0eShiaW8pIChiaW8tPmJpX2ludGVncml0eSAhPSBOVUxMKQogCi1leHRlcm4gc3RydWN0IGJpb19pbnRlZ3JpdHlfcGF5bG9hZCAqYmlvX2ludGVncml0eV9hbGxvY19iaW9zZXQoc3RydWN0IGJpbyAqLCBnZnBfdCwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgYmlvX3NldCAqKTsKIGV4dGVybiBzdHJ1Y3QgYmlvX2ludGVncml0eV9wYXlsb2FkICpiaW9faW50ZWdyaXR5X2FsbG9jKHN0cnVjdCBiaW8gKiwgZ2ZwX3QsIHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X2ZyZWUoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvX3NldCAqKTsKK2V4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvICopOwogZXh0ZXJuIGludCBiaW9faW50ZWdyaXR5X2FkZF9wYWdlKHN0cnVjdCBiaW8gKiwgc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCBiaW9faW50ZWdyaXR5X2VuYWJsZWQoc3RydWN0IGJpbyAqYmlvKTsKIGV4dGVybiBpbnQgYmlvX2ludGVncml0eV9zZXRfdGFnKHN0cnVjdCBiaW8gKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwpAQCAtNTMxLDI3ICs1MjcsMjEgQEAKIGV4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfYWR2YW5jZShzdHJ1Y3QgYmlvICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X3RyaW0oc3RydWN0IGJpbyAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBiaW9faW50ZWdyaXR5X3NwbGl0KHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpb19wYWlyICosIGludCk7Ci1leHRlcm4gaW50IGJpb19pbnRlZ3JpdHlfY2xvbmUoc3RydWN0IGJpbyAqLCBzdHJ1Y3QgYmlvICosIGdmcF90LCBzdHJ1Y3QgYmlvX3NldCAqKTsKLWV4dGVybiBpbnQgYmlvc2V0X2ludGVncml0eV9jcmVhdGUoc3RydWN0IGJpb19zZXQgKiwgaW50KTsKLWV4dGVybiB2b2lkIGJpb3NldF9pbnRlZ3JpdHlfZnJlZShzdHJ1Y3QgYmlvX3NldCAqKTsKLWV4dGVybiB2b2lkIGJpb19pbnRlZ3JpdHlfaW5pdF9zbGFiKHZvaWQpOworZXh0ZXJuIGludCBiaW9faW50ZWdyaXR5X2Nsb25lKHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpbyAqLCBnZnBfdCk7CiAKICNlbHNlIC8qIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSAqLwogCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHkoYSkJCSgwKQotI2RlZmluZSBiaW9zZXRfaW50ZWdyaXR5X2NyZWF0ZShhLCBiKQkoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9wcmVwKGEpCQkoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9lbmFibGVkKGEpCSgwKQotI2RlZmluZSBiaW9faW50ZWdyaXR5X2Nsb25lKGEsIGIsIGMsZCApCSgwKQotI2RlZmluZSBiaW9zZXRfaW50ZWdyaXR5X2ZyZWUoYSkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBiaW9faW50ZWdyaXR5X2ZyZWUoYSwgYikJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBiaW9faW50ZWdyaXR5X2Nsb25lKGEsIGIsIGMpCSgwKQorI2RlZmluZSBiaW9faW50ZWdyaXR5X2ZyZWUoYSkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYmlvX2ludGVncml0eV9lbmRpbyhhLCBiKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfYWR2YW5jZShhLCBiKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfdHJpbShhLCBiLCBjKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGJpb19pbnRlZ3JpdHlfc3BsaXQoYSwgYiwgYykJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X3NldF90YWcoYSwgYiwgYykJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBiaW9faW50ZWdyaXR5X2dldF90YWcoYSwgYiwgYykJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBiaW9faW50ZWdyaXR5X2luaXRfc2xhYihhKQlkbyB7IH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ic2cuaCBiL2luY2x1ZGUvbGludXgvYnNnLmgKaW5kZXggY2YwMzAzYTYuLjNmMGM2NGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnNnLmgKKysrIGIvaW5jbHVkZS9saW51eC9ic2cuaApAQCAtNyw2ICs3LDE0IEBACiAjZGVmaW5lIEJTR19TVUJfUFJPVE9DT0xfU0NTSV9UTUYJMQogI2RlZmluZSBCU0dfU1VCX1BST1RPQ09MX1NDU0lfVFJBTlNQT1JUCTIKIAorLyoKKyAqIEZvciBmbGFncyBtZW1iZXIgYmVsb3cKKyAqIHNnLmggc2dfaW9faGRyIGFsc28gaGFzIGJpdHMgZGVmaW5lZCBmb3IgaXQncyBmbGFncyBtZW1iZXIuIEhvd2V2ZXIKKyAqIG5vbmUgb2YgdGhlc2UgYml0cyBhcmUgaW1wbGVtZW50ZWQvdXNlZCBieSBic2cuIFRoZSBiaXRzIGJlbG93IGFyZQorICogYWxsb2NhdGVkIHRvIG5vdCBjb25mbGljdCB3aXRoIHNnLmggb25lcyBhbnl3YXkuCisgKi8KKyNkZWZpbmUgQlNHX0ZMQUdfUV9BVF9UQUlMIDB4MTAgLyogZGVmYXVsdCwgPT0gMCBhdCB0aGlzIGJpdCwgaXMgUV9BVF9IRUFEICovCisKIHN0cnVjdCBzZ19pb192NCB7CiAJX19zMzIgZ3VhcmQ7CQkvKiBbaV0gJ1EnIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB2MyAqLwogCV9fdTMyIHByb3RvY29sOwkJLyogW2ldIDAgLT4gU0NTSSAsIC4uLi4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAppbmRleCBiZDdhYzc5Li5mMTlmZDkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCkBAIC0xNjUsMTUgKzE2NSw4IEBACiB2b2lkIHVubWFwX3VuZGVybHlpbmdfbWV0YWRhdGEoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2spOwogCiB2b2lkIG1hcmtfYnVmZmVyX2FzeW5jX3dyaXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwotdm9pZCBpbnZhbGlkYXRlX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKLWludCBzeW5jX2Jsb2NrZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpOwogdm9pZCBfX3dhaXRfb25fYnVmZmVyKHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKIHdhaXRfcXVldWVfaGVhZF90ICpiaF93YWl0cV9oZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwotaW50IGZzeW5jX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKLXN0cnVjdCBzdXBlcl9ibG9jayAqZnJlZXplX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKLWludCB0aGF3X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Ci1pbnQgZnN5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOwotaW50IGZzeW5jX25vX3N1cGVyKHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKl9fZmluZF9nZXRfYmxvY2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssCiAJCQl1bnNpZ25lZCBzaXplKTsKIHN0cnVjdCBidWZmZXJfaGVhZCAqX19nZXRibGsoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc2VjdG9yX3QgYmxvY2ssCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nsay5oIGIvaW5jbHVkZS9saW51eC9jbGsuaAppbmRleCA3Nzg3NzczLi4xZGI5YmJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsay5oCisrKyBiL2luY2x1ZGUvbGludXgvY2xrLmgKQEAgLTEyNSw0ICsxMjUsMjEgQEAKICAqLwogc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKTsKIAorLyoqCisgKiBjbGtfZ2V0X3N5cyAtIGdldCBhIGNsb2NrIGJhc2VkIHVwb24gdGhlIGRldmljZSBuYW1lCisgKiBAZGV2X2lkOiBkZXZpY2UgbmFtZQorICogQGNvbl9pZDogY29ubmVjdGlvbiBJRAorICoKKyAqIFJldHVybnMgYSBzdHJ1Y3QgY2xrIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNsb2NrIHByb2R1Y2VyLCBvcgorICogdmFsaWQgSVNfRVJSKCkgY29uZGl0aW9uIGNvbnRhaW5pbmcgZXJybm8uICBUaGUgaW1wbGVtZW50YXRpb24KKyAqIHVzZXMgQGRldl9pZCBhbmQgQGNvbl9pZCB0byBkZXRlcm1pbmUgdGhlIGNsb2NrIGNvbnN1bWVyLCBhbmQKKyAqIHRoZXJlYnkgdGhlIGNsb2NrIHByb2R1Y2VyLiBJbiBjb250cmFzdCB0byBjbGtfZ2V0KCkgdGhpcyBmdW5jdGlvbgorICogdGFrZXMgdGhlIGRldmljZSBuYW1lIGluc3RlYWQgb2YgdGhlIGRldmljZSBpdHNlbGYgZm9yIGlkZW50aWZpY2F0aW9uLgorICoKKyAqIERyaXZlcnMgbXVzdCBhc3N1bWUgdGhhdCB0aGUgY2xvY2sgc291cmNlIGlzIG5vdCBlbmFibGVkLgorICoKKyAqIGNsa19nZXRfc3lzIHNob3VsZCBub3QgYmUgY2FsbGVkIGZyb20gd2l0aGluIGludGVycnVwdCBjb250ZXh0LgorICovCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3N5cyhjb25zdCBjaGFyICpkZXZfaWQsIGNvbnN0IGNoYXIgKmNvbl9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCmluZGV4IGY4OGQzMmYuLjU3MzgxOWVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCkBAIC0yMiw4ICsyMiwxMDkgQEAKIHN0cnVjdCBjbG9ja3NvdXJjZTsKIAogLyoqCisgKiBzdHJ1Y3QgY3ljbGVjb3VudGVyIC0gaGFyZHdhcmUgYWJzdHJhY3Rpb24gZm9yIGEgZnJlZSBydW5uaW5nIGNvdW50ZXIKKyAqCVByb3ZpZGVzIGNvbXBsZXRlbHkgc3RhdGUtZnJlZSBhY2Nlc3NvcnMgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCisgKglEZXBlbmRpbmcgb24gd2hpY2ggaGFyZHdhcmUgaXQgcmVhZHMsIHRoZSBjeWNsZSBjb3VudGVyIG1heSB3cmFwCisgKglhcm91bmQgcXVpY2tseS4gTG9ja2luZyBydWxlcyAoaWYgbmVjZXNzYXJ5KSBoYXZlIHRvIGJlIGRlZmluZWQKKyAqCWJ5IHRoZSBpbXBsZW1lbnRvciBhbmQgdXNlciBvZiBzcGVjaWZpYyBpbnN0YW5jZXMgb2YgdGhpcyBBUEkuCisgKgorICogQHJlYWQ6CQlyZXR1cm5zIHRoZSBjdXJyZW50IGN5Y2xlIHZhbHVlCisgKiBAbWFzazoJCWJpdG1hc2sgZm9yIHR3bydzIGNvbXBsZW1lbnQKKyAqCQkJc3VidHJhY3Rpb24gb2Ygbm9uIDY0IGJpdCBjb3VudGVycywKKyAqCQkJc2VlIENMT0NLU09VUkNFX01BU0soKSBoZWxwZXIgbWFjcm8KKyAqIEBtdWx0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBtdWx0aXBsaWVyCisgKiBAc2hpZnQ6CQljeWNsZSB0byBuYW5vc2Vjb25kIGRpdmlzb3IgKHBvd2VyIG9mIHR3bykKKyAqLworc3RydWN0IGN5Y2xlY291bnRlciB7CisJY3ljbGVfdCAoKnJlYWQpKGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKTsKKwljeWNsZV90IG1hc2s7CisJdTMyIG11bHQ7CisJdTMyIHNoaWZ0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgdGltZWNvdW50ZXIgLSBsYXllciBhYm92ZSBhICVzdHJ1Y3QgY3ljbGVjb3VudGVyIHdoaWNoIGNvdW50cyBuYW5vc2Vjb25kcworICoJQ29udGFpbnMgdGhlIHN0YXRlIG5lZWRlZCBieSB0aW1lY291bnRlcl9yZWFkKCkgdG8gZGV0ZWN0CisgKgljeWNsZSBjb3VudGVyIHdyYXAgYXJvdW5kLiBJbml0aWFsaXplIHdpdGgKKyAqCXRpbWVjb3VudGVyX2luaXQoKS4gQWxzbyB1c2VkIHRvIGNvbnZlcnQgY3ljbGUgY291bnRzIGludG8gdGhlCisgKgljb3JyZXNwb25kaW5nIG5hbm9zZWNvbmQgY291bnRzIHdpdGggdGltZWNvdW50ZXJfY3ljMnRpbWUoKS4gVXNlcnMKKyAqCW9mIHRoaXMgY29kZSBhcmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgdW5kZXJseWluZworICoJY3ljbGUgY291bnRlciBoYXJkd2FyZSwgbG9ja2luZyBpc3N1ZXMgYW5kIHJlYWRpbmcgdGhlIHRpbWUKKyAqCW1vcmUgb2Z0ZW4gdGhhbiB0aGUgY3ljbGUgY291bnRlciB3cmFwcyBhcm91bmQuIFRoZSBuYW5vc2Vjb25kCisgKgljb3VudGVyIHdpbGwgb25seSB3cmFwIGFyb3VuZCBhZnRlciB+NTg1IHllYXJzLgorICoKKyAqIEBjYzoJCQl0aGUgY3ljbGUgY291bnRlciB1c2VkIGJ5IHRoaXMgaW5zdGFuY2UKKyAqIEBjeWNsZV9sYXN0OgkJbW9zdCByZWNlbnQgY3ljbGUgY291bnRlciB2YWx1ZSBzZWVuIGJ5CisgKgkJCXRpbWVjb3VudGVyX3JlYWQoKQorICogQG5zZWM6CQljb250aW51b3VzbHkgaW5jcmVhc2luZyBjb3VudAorICovCitzdHJ1Y3QgdGltZWNvdW50ZXIgeworCWNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjOworCWN5Y2xlX3QgY3ljbGVfbGFzdDsKKwl1NjQgbnNlYzsKK307CisKKy8qKgorICogY3ljbGVjb3VudGVyX2N5YzJucyAtIGNvbnZlcnRzIGN5Y2xlIGNvdW50ZXIgY3ljbGVzIHRvIG5hbm9zZWNvbmRzCisgKiBAdGM6CQlQb2ludGVyIHRvIGN5Y2xlIGNvdW50ZXIuCisgKiBAY3ljbGVzOglDeWNsZXMKKyAqCisgKiBYWFggLSBUaGlzIGNvdWxkIHVzZSBzb21lIG11bHRfbHhsX2xsKCkgYXNtIG9wdGltaXphdGlvbi4gU2FtZSBjb2RlCisgKiBhcyBpbiBjeWMybnMsIGJ1dCB3aXRoIHVuc2lnbmVkIHJlc3VsdC4KKyAqLworc3RhdGljIGlubGluZSB1NjQgY3ljbGVjb3VudGVyX2N5YzJucyhjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYywKKwkJCQkgICAgICBjeWNsZV90IGN5Y2xlcykKK3sKKwl1NjQgcmV0ID0gKHU2NCljeWNsZXM7CisJcmV0ID0gKHJldCAqIGNjLT5tdWx0KSA+PiBjYy0+c2hpZnQ7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiB0aW1lY291bnRlcl9pbml0IC0gaW5pdGlhbGl6ZSBhIHRpbWUgY291bnRlcgorICogQHRjOgkJCVBvaW50ZXIgdG8gdGltZSBjb3VudGVyIHdoaWNoIGlzIHRvIGJlIGluaXRpYWxpemVkL3Jlc2V0CisgKiBAY2M6CQkJQSBjeWNsZSBjb3VudGVyLCByZWFkeSB0byBiZSB1c2VkLgorICogQHN0YXJ0X3RzdGFtcDoJQXJiaXRyYXJ5IGluaXRpYWwgdGltZSBzdGFtcC4KKyAqCisgKiBBZnRlciB0aGlzIGNhbGwgdGhlIGN1cnJlbnQgY3ljbGUgcmVnaXN0ZXIgKHJvdWdobHkpIGNvcnJlc3BvbmRzIHRvCisgKiB0aGUgaW5pdGlhbCB0aW1lIHN0YW1wLiBFdmVyeSBjYWxsIHRvIHRpbWVjb3VudGVyX3JlYWQoKSBpbmNyZW1lbnRzCisgKiB0aGUgdGltZSBzdGFtcCBjb3VudGVyIGJ5IHRoZSBudW1iZXIgb2YgZWxhcHNlZCBuYW5vc2Vjb25kcy4KKyAqLworZXh0ZXJuIHZvaWQgdGltZWNvdW50ZXJfaW5pdChzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYywKKwkJCSAgICAgdTY0IHN0YXJ0X3RzdGFtcCk7CisKKy8qKgorICogdGltZWNvdW50ZXJfcmVhZCAtIHJldHVybiBuYW5vc2Vjb25kcyBlbGFwc2VkIHNpbmNlIHRpbWVjb3VudGVyX2luaXQoKQorICogICAgICAgICAgICAgICAgICAgIHBsdXMgdGhlIGluaXRpYWwgdGltZSBzdGFtcAorICogQHRjOiAgICAgICAgICBQb2ludGVyIHRvIHRpbWUgY291bnRlci4KKyAqCisgKiBJbiBvdGhlciB3b3Jkcywga2VlcHMgdHJhY2sgb2YgdGltZSBzaW5jZSB0aGUgc2FtZSBlcG9jaCBhcworICogdGhlIGZ1bmN0aW9uIHdoaWNoIGdlbmVyYXRlZCB0aGUgaW5pdGlhbCB0aW1lIHN0YW1wLgorICovCitleHRlcm4gdTY0IHRpbWVjb3VudGVyX3JlYWQoc3RydWN0IHRpbWVjb3VudGVyICp0Yyk7CisKKy8qKgorICogdGltZWNvdW50ZXJfY3ljMnRpbWUgLSBjb252ZXJ0IGEgY3ljbGUgY291bnRlciB0byBzYW1lCisgKiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgYmFzZSBhcyB2YWx1ZXMgcmV0dXJuZWQgYnkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdGltZWNvdW50ZXJfcmVhZCgpCisgKiBAdGM6CQlQb2ludGVyIHRvIHRpbWUgY291bnRlci4KKyAqIEBjeWNsZToJYSB2YWx1ZSByZXR1cm5lZCBieSB0Yy0+Y2MtPnJlYWQoKQorICoKKyAqIEN5Y2xlIGNvdW50cyB0aGF0IGFyZSBjb252ZXJ0ZWQgY29ycmVjdGx5IGFzIGxvbmcgYXMgdGhleQorICogZmFsbCBpbnRvIHRoZSBpbnRlcnZhbCBbLTEvMiBtYXggY3ljbGUgY291bnQsICsxLzIgbWF4IGN5Y2xlIGNvdW50XSwKKyAqIHdpdGggIm1heCBjeWNsZSBjb3VudCIgPT0gY3MtPm1hc2srMS4KKyAqCisgKiBUaGlzIGFsbG93cyBjb252ZXJzaW9uIG9mIGN5Y2xlIGNvdW50ZXIgdmFsdWVzIHdoaWNoIHdlcmUgZ2VuZXJhdGVkCisgKiBpbiB0aGUgcGFzdC4KKyAqLworZXh0ZXJuIHU2NCB0aW1lY291bnRlcl9jeWMydGltZShzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjLAorCQkJCWN5Y2xlX3QgY3ljbGVfdHN0YW1wKTsKKworLyoqCiAgKiBzdHJ1Y3QgY2xvY2tzb3VyY2UgLSBoYXJkd2FyZSBhYnN0cmFjdGlvbiBmb3IgYSBmcmVlIHJ1bm5pbmcgY291bnRlcgogICoJUHJvdmlkZXMgbW9zdGx5IHN0YXRlLWZyZWUgYWNjZXNzb3JzIHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLgorICoJVGhpcyBpcyB0aGUgc3RydWN0dXJlIHVzZWQgZm9yIHN5c3RlbSB0aW1lLgogICoKICAqIEBuYW1lOgkJcHRyIHRvIGNsb2Nrc291cmNlIG5hbWUKICAqIEBsaXN0OgkJbGlzdCBoZWFkIGZvciByZWdpc3RyYXRpb24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY200MDAwX2NzLmggYi9pbmNsdWRlL2xpbnV4L2NtNDAwMF9jcy5oCmluZGV4IDYwNWViZTIuLjcyYmZlZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY200MDAwX2NzLmgKKysrIGIvaW5jbHVkZS9saW51eC9jbTQwMDBfY3MuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYJX0NNNDAwMF9IXwogI2RlZmluZQlfQ000MDAwX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lCU1BWF9BVFIJCQkzMwogCiAjZGVmaW5lCUNNNDAwMF9NQVhfREVWCQk0CkBAIC0xMCw5ICsxMiw5IEBACiAgKiBub3QgdG8gYnJlYWsgY29tcGlsYXRpb24gb2YgdXNlcnNwYWNlIGFwcHMuIC1IVyAqLwogCiB0eXBlZGVmIHN0cnVjdCBhdHJlcSB7Ci0JaW50MzJfdCBhdHJfbGVuOworCV9fczMyIGF0cl9sZW47CiAJdW5zaWduZWQgY2hhciBhdHJbNjRdOwotCWludDMyX3QgcG93ZXJfYWN0OworCV9fczMyIHBvd2VyX2FjdDsKIAl1bnNpZ25lZCBjaGFyIGJJRlNEOwogCXVuc2lnbmVkIGNoYXIgYklGU0M7CiB9IGF0cmVxX3Q7CkBAIC0yMiwxMyArMjQsMTMgQEAKICAqIG1lbWJlciBzaXplcy4gVGhpcyBsZWFkcyB0byBDT05GSUdfQ09NUEFUIGJyZWFrYWdlLCBzaW5jZSAzMmJpdCB1c2Vyc3BhY2UKICAqIHdpbGwgbGF5IG91dCB0aGUgc3RydWN0dXJlIG1lbWJlcnMgZGlmZmVyZW50bHkgdGhhbiB0aGUgNjRiaXQga2VybmVsLgogICoKLSAqIEkndmUgY2hhbmdlZCAicHRzcmVxLnByb3RvY29sIiBmcm9tICJ1bnNpZ25lZCBsb25nIiB0byAidV9pbnQzMl90Ii4KKyAqIEkndmUgY2hhbmdlZCAicHRzcmVxLnByb3RvY29sIiBmcm9tICJ1bnNpZ25lZCBsb25nIiB0byAiX191MzIiLgogICogT24gMzJiaXQgdGhpcyB3aWxsIG1ha2Ugbm8gZGlmZmVyZW5jZS4gIFdpdGggNjRiaXQga2VybmVscywgaXQgd2lsbCBtYWtlCiAgKiAzMmJpdCBhcHBzIHdvcmssIHRvby4KICAqLwogCiB0eXBlZGVmIHN0cnVjdCBwdHNyZXEgewotCXVfaW50MzJfdCBwcm90b2NvbDsgLypUPTA6IDJeMCwgVD0xOiAgMl4xKi8KKwlfX3UzMiBwcm90b2NvbDsgLypUPTA6IDJeMCwgVD0xOiAgMl4xKi8KICAJdW5zaWduZWQgY2hhciBmbGFnczsKICAJdW5zaWduZWQgY2hhciBwdHMxOwogIAl1bnNpZ25lZCBjaGFyIHB0czI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaCBiL2luY2x1ZGUvbGludXgvY25fcHJvYy5oCmluZGV4IDFjODZkNjUuLmI4MTI1YjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY25fcHJvYy5oCisrKyBiL2luY2x1ZGUvbGludXgvY25fcHJvYy5oCkBAIC02NSwyMCArNjUsMjAgQEAKIAkJfSBhY2s7CiAKIAkJc3RydWN0IGZvcmtfcHJvY19ldmVudCB7Ci0JCQlwaWRfdCBwYXJlbnRfcGlkOwotCQkJcGlkX3QgcGFyZW50X3RnaWQ7Ci0JCQlwaWRfdCBjaGlsZF9waWQ7Ci0JCQlwaWRfdCBjaGlsZF90Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcGFyZW50X3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IHBhcmVudF90Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgY2hpbGRfcGlkOworCQkJX19rZXJuZWxfcGlkX3QgY2hpbGRfdGdpZDsKIAkJfSBmb3JrOwogCiAJCXN0cnVjdCBleGVjX3Byb2NfZXZlbnQgewotCQkJcGlkX3QgcHJvY2Vzc19waWQ7Ci0JCQlwaWRfdCBwcm9jZXNzX3RnaWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfdGdpZDsKIAkJfSBleGVjOwogCiAJCXN0cnVjdCBpZF9wcm9jX2V2ZW50IHsKLQkJCXBpZF90IHByb2Nlc3NfcGlkOwotCQkJcGlkX3QgcHJvY2Vzc190Z2lkOworCQkJX19rZXJuZWxfcGlkX3QgcHJvY2Vzc19waWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3RnaWQ7CiAJCQl1bmlvbiB7CiAJCQkJX191MzIgcnVpZDsgLyogdGFzayB1aWQgKi8KIAkJCQlfX3UzMiByZ2lkOyAvKiB0YXNrIGdpZCAqLwpAQCAtOTAsOCArOTAsOCBAQAogCQl9IGlkOwogCiAJCXN0cnVjdCBleGl0X3Byb2NfZXZlbnQgewotCQkJcGlkX3QgcHJvY2Vzc19waWQ7Ci0JCQlwaWRfdCBwcm9jZXNzX3RnaWQ7CisJCQlfX2tlcm5lbF9waWRfdCBwcm9jZXNzX3BpZDsKKwkJCV9fa2VybmVsX3BpZF90IHByb2Nlc3NfdGdpZDsKIAkJCV9fdTMyIGV4aXRfY29kZSwgZXhpdF9zaWduYWw7CiAJCX0gZXhpdDsKIAl9IGV2ZW50X2RhdGE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvZGFfcHNkZXYuaCBiL2luY2x1ZGUvbGludXgvY29kYV9wc2Rldi5oCmluZGV4IDA3YWU4ZjguLjViNWQ0NzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29kYV9wc2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvY29kYV9wc2Rldi5oCkBAIC02LDYgKzYsNyBAQAogI2RlZmluZSBDT0RBX1BTREVWX01BSk9SIDY3CiAjZGVmaW5lIE1BWF9DT0RBREVWUyAgNQkgICAvKiBob3cgbWFueSBkbyB3ZSBhbGxvdyAqLwogCisjaWZkZWYgX19LRVJORUxfXwogc3RydWN0IGtzdGF0ZnM7CiAKIC8qIGNvbW11bmljYXRpb24gcGVuZGluZy9wcm9jZXNzaW5nIHF1ZXVlcyAqLwpAQCAtMjQsNyArMjUsNiBAQAogCXJldHVybiAoc3RydWN0IHZlbnVzX2NvbW0gKikoKHNiKS0+c19mc19pbmZvKTsKIH0KIAotCiAvKiB1cGNhbGxzICovCiBpbnQgdmVudXNfcm9vdGZpZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgQ29kYUZpZCAqZmlkcCk7CiBpbnQgdmVudXNfZ2V0YXR0cihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgQ29kYUZpZCAqZmlkLApAQCAtNjQsNiArNjQsMTIgQEAKIGludCB2ZW51c19mc3luYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgQ29kYUZpZCAqZmlkKTsKIGludCB2ZW51c19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqc2ZzKTsKIAorLyoKKyAqIFN0YXRpc3RpY3MKKyAqLworCitleHRlcm4gc3RydWN0IHZlbnVzX2NvbW0gY29kYV9jb21tc1tdOworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyogbWVzc2FnZXMgYmV0d2VlbiBjb2RhIGZpbGVzeXN0ZW0gaW4ga2VybmVsIGFuZCBWZW51cyAqLwogc3RydWN0IHVwY19yZXEgewpAQCAtODIsMTEgKzg4LDQgQEAKICNkZWZpbmUgUkVRX1dSSVRFICAweDQKICNkZWZpbmUgUkVRX0FCT1JUICAweDgKIAotCi0vKgotICogU3RhdGlzdGljcwotICovCi0KLWV4dGVybiBzdHJ1Y3QgdmVudXNfY29tbSBjb2RhX2NvbW1zW107Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb20yMDAyMC5oIGIvaW5jbHVkZS9saW51eC9jb20yMDAyMC5oCmluZGV4IGFjNmQ5YTQuLjVkY2ZiOTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tMjAwMjAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbTIwMDIwLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogaW50IGNvbTIwMDIwX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGNvbTIwMDIwX2ZvdW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzaGFyZWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjb20yMDAyMF9uZXRkZXZfb3BzOwogCiAvKiBUaGUgbnVtYmVyIG9mIGxvdyBJL08gcG9ydHMgdXNlZCBieSB0aGUgY2FyZC4gKi8KICNkZWZpbmUgQVJDTkVUX1RPVEFMX1NJWkUgOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXQuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKaW5kZXggM2ZkMjE5NC4uYjg4MDg2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCkBAIC0xMjUsNiArMTI1LDEzIEBACiAJY2hhcgkJZF9uYW1lWzI1Nl07CiB9OwogCitzdHJ1Y3QgY29tcGF0X3VzdGF0IHsKKwljb21wYXRfZGFkZHJfdAkJZl90ZnJlZTsKKwljb21wYXRfaW5vX3QJCWZfdGlub2RlOworCWNoYXIJCQlmX2ZuYW1lWzZdOworCWNoYXIJCQlmX2ZwYWNrWzZdOworfTsKKwogdHlwZWRlZiB1bmlvbiBjb21wYXRfc2lndmFsIHsKIAljb21wYXRfaW50X3QJc2l2YWxfaW50OwogCWNvbXBhdF91cHRyX3QJc2l2YWxfcHRyOwpAQCAtMTc4LDYgKzE4NSw3IEBACiAJCXVuc2lnbmVkIG5zZW1zLCBjb25zdCBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqdGltZW91dCk7CiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19rZXljdGwodTMyIG9wdGlvbiwKIAkJCSAgICAgIHUzMiBhcmcyLCB1MzIgYXJnMywgdTMyIGFyZzQsIHUzMiBhcmc1KTsKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3VzdGF0KHVuc2lnbmVkIGRldiwgc3RydWN0IGNvbXBhdF91c3RhdCBfX3VzZXIgKnUzMik7CiAKIGFzbWxpbmthZ2Ugc3NpemVfdCBjb21wYXRfc3lzX3JlYWR2KHVuc2lnbmVkIGxvbmcgZmQsCiAJCWNvbnN0IHN0cnVjdCBjb21wYXRfaW92ZWMgX191c2VyICp2ZWMsIHVuc2lnbmVkIGxvbmcgdmxlbik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYzQuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCmluZGV4IDA5OTkyNzEuLjQ1MGZhNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjNC5oCkBAIC0zLDggKzMsMTAgQEAKICNlbmRpZgogCiAvKiBHQ0MgNC4xLlswMV0gbWlzY29tcGlsZXMgX193ZWFrICovCi0jaWYgX19HTlVDX01JTk9SX18gPT0gMSAmJiBfX0dOVUNfUEFUQ0hMRVZFTF9fIDw9IDEKLSMgZXJyb3IgWW91ciB2ZXJzaW9uIG9mIGdjYyBtaXNjb21waWxlcyB0aGUgX193ZWFrIGRpcmVjdGl2ZQorI2lmZGVmIF9fS0VSTkVMX18KKyMgaWYgX19HTlVDX01JTk9SX18gPT0gMSAmJiBfX0dOVUNfUEFUQ0hMRVZFTF9fIDw9IDEKKyMgIGVycm9yIFlvdXIgdmVyc2lvbiBvZiBnY2MgbWlzY29tcGlsZXMgdGhlIF9fd2VhayBkaXJlY3RpdmUKKyMgZW5kaWYKICNlbmRpZgogCiAjZGVmaW5lIF9fdXNlZAkJCV9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmggYi9pbmNsdWRlL2xpbnV4L2Nvbm5lY3Rvci5oCmluZGV4IDM0ZjI3ODkuLmZjNjVkMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29ubmVjdG9yLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25uZWN0b3IuaApAQCAtMTA5LDYgKzEwOSwxMiBAQAogCXVuc2lnbmVkIGNoYXIgbmFtZVtDTl9DQlFfTkFNRUxFTl07CiAKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY25fcXVldWU7CisJLyogU2VudCB0byBrZXZlbnQgdG8gY3JlYXRlIGNuX3F1ZXVlIG9ubHkgd2hlbiBuZWVkZWQgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd3FfY3JlYXRpb247CisJLyogVGVsbCBpZiB0aGUgd3FfY3JlYXRpb24gam9iIGlzIHBlbmRpbmcvY29tcGxldGVkICovCisJYXRvbWljX3Qgd3FfcmVxdWVzdGVkOworCS8qIFdhaXQgZm9yIGNuX3F1ZXVlIHRvIGJlIGNyZWF0ZWQgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cV9jcmVhdGVkOwogCiAJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZV9saXN0OwogCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKQEAgLTE2NCw2ICsxNzAsOCBAQAogaW50IGNuX3F1ZXVlX2FkZF9jYWxsYmFjayhzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYsIGNoYXIgKm5hbWUsIHN0cnVjdCBjYl9pZCAqaWQsIHZvaWQgKCpjYWxsYmFjaykodm9pZCAqKSk7CiB2b2lkIGNuX3F1ZXVlX2RlbF9jYWxsYmFjayhzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYsIHN0cnVjdCBjYl9pZCAqaWQpOwogCitpbnQgcXVldWVfY25fd29yayhzdHJ1Y3QgY25fY2FsbGJhY2tfZW50cnkgKmNicSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKKwogc3RydWN0IGNuX3F1ZXVlX2RldiAqY25fcXVldWVfYWxsb2NfZGV2KGNoYXIgKm5hbWUsIHN0cnVjdCBzb2NrICopOwogdm9pZCBjbl9xdWV1ZV9mcmVlX2RldihzdHJ1Y3QgY25fcXVldWVfZGV2ICpkZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCmluZGV4IGE2N2E5MGMuLmRjY2E1MzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY29uc29sZS5oCkBAIC0xMzcsOCArMTM3LDggQEAKIGludCBtZGFfY29uc29sZV9pbml0KHZvaWQpOwogdm9pZCBwcm9tX2Nvbl9pbml0KHZvaWQpOwogCi12b2lkIHZjc19tYWtlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotdm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwordm9pZCB2Y3NfbWFrZV9zeXNmcyhpbnQgaW5kZXgpOwordm9pZCB2Y3NfcmVtb3ZlX3N5c2ZzKGludCBpbmRleCk7CiAKIC8qIFNvbWUgZGVidWcgc3R1YiB0byBjYXRjaCBzb21lIG9mIHRoZSBvYnZpb3VzIHJhY2VzIGluIHRoZSBWVCBjb2RlICovCiAjaWYgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaCBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKaW5kZXggMWYyZTkwMi4uZWMyOWZhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcnlwdG8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCkBAIC00MCw2ICs0MCw3IEBACiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9TSEFTSAkJMHgwMDAwMDAwOQogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfQUhBU0gJCTB4MDAwMDAwMGEKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX1JORwkJMHgwMDAwMDAwYworI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfUENPTVBSRVNTCTB4MDAwMDAwMGYKIAogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfSEFTSF9NQVNLCTB4MDAwMDAwMGUKICNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0FIQVNIX01BU0sJMHgwMDAwMDAwYwpAQCAtNTQ4LDkgKzU0OSw2IEBACiAgKiBUcmFuc2Zvcm0gdXNlciBpbnRlcmZhY2UuCiAgKi8KICAKLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAotCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmZyb250ZW5kLAotCQkJCSAgICB1MzIgdHlwZSwgdTMyIG1hc2spOwogc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19hbGxvY19iYXNlKGNvbnN0IGNoYXIgKmFsZ19uYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spOwogdm9pZCBjcnlwdG9fZGVzdHJveV90Zm0odm9pZCAqbWVtLCBzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oIGIvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCmluZGV4IGQwNmZiZjIuLjc4ODg1MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKQEAgLTgyLDkgKzgyLDkgQEAKICAqIG9wZW4pCiAgKi8KIHN0cnVjdCBjeWNsYWRlc19pZGxlX3N0YXRzIHsKLSAgICB0aW1lX3QJICAgaW5fdXNlOwkvKiBUaW1lIGRldmljZSBoYXMgYmVlbiBpbiB1c2UgKHNlY3MpICovCi0gICAgdGltZV90CSAgIHJlY3ZfaWRsZTsJLyogVGltZSBzaW5jZSBsYXN0IGNoYXIgcmVjZWl2ZWQgKHNlY3MpICovCi0gICAgdGltZV90CSAgIHhtaXRfaWRsZTsJLyogVGltZSBzaW5jZSBsYXN0IGNoYXIgdHJhbnNtaXR0ZWQgKHNlY3MpICovCisgICAgX19rZXJuZWxfdGltZV90IGluX3VzZTsJLyogVGltZSBkZXZpY2UgaGFzIGJlZW4gaW4gdXNlIChzZWNzKSAqLworICAgIF9fa2VybmVsX3RpbWVfdCByZWN2X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHJlY2VpdmVkIChzZWNzKSAqLworICAgIF9fa2VybmVsX3RpbWVfdCB4bWl0X2lkbGU7CS8qIFRpbWUgc2luY2UgbGFzdCBjaGFyIHRyYW5zbWl0dGVkIChzZWNzKSAqLwogICAgIHVuc2lnbmVkIGxvbmcgIHJlY3ZfYnl0ZXM7CS8qIEJ5dGVzIHJlY2VpdmVkICovCiAgICAgdW5zaWduZWQgbG9uZyAgeG1pdF9ieXRlczsJLyogQnl0ZXMgdHJhbnNtaXR0ZWQgKi8KICAgICB1bnNpZ25lZCBsb25nICBvdmVycnVuczsJLyogSW5wdXQgb3ZlcnJ1bnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNhLmggYi9pbmNsdWRlL2xpbnV4L2RjYS5oCmluZGV4IGIwMGE3NTMuLjljMjBjN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNhLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY2EuaApAQCAtMSwzICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKKyAqIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluIHRoZQorICogZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqLwogI2lmbmRlZiBEQ0FfSAogI2RlZmluZSBEQ0FfSAogLyogRENBIFByb3ZpZGVyIEFQSSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKaW5kZXggYzY2ZDIyNC4uMTUxNTYzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2FjaGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCkBAIC0xMTIsNyArMTEyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRfc3ViZGlyczsJLyogb3VyIGNoaWxkcmVuICovCiAJc3RydWN0IGxpc3RfaGVhZCBkX2FsaWFzOwkvKiBpbm9kZSBhbGlhcyBsaXN0ICovCiAJdW5zaWduZWQgbG9uZyBkX3RpbWU7CQkvKiB1c2VkIGJ5IGRfcmV2YWxpZGF0ZSAqLwotCXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZF9vcDsKKwljb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRfb3A7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpkX3NiOwkvKiBUaGUgcm9vdCBvZiB0aGUgZGVudHJ5IHRyZWUgKi8KIAl2b2lkICpkX2ZzZGF0YTsJCQkvKiBmcy1zcGVjaWZpYyBkYXRhICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGNjcC5oIGIvaW5jbHVkZS9saW51eC9kY2NwLmgKaW5kZXggNjE3MzRlMi4uNzQzNGE4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2NwLmgKKysrIGIvaW5jbHVkZS9saW51eC9kY2NwLmgKQEAgLTM1NSw0NiArMzU1LDYgQEAKIAlyZXR1cm4gX19kY2NwX2hkcl9sZW4oZGNjcF9oZHIoc2tiKSk7CiB9CiAKLQotLyogaW5pdGlhbCB2YWx1ZXMgZm9yIGVhY2ggZmVhdHVyZSAqLwotI2RlZmluZSBEQ0NQRl9JTklUSUFMX1NFUVVFTkNFX1dJTkRPVwkJMTAwCi0jZGVmaW5lIERDQ1BGX0lOSVRJQUxfQUNLX1JBVElPCQkJMgotI2RlZmluZSBEQ0NQRl9JTklUSUFMX0NDSUQJCQlEQ0NQQ19DQ0lEMgotLyogRklYTUU6IGZvciBub3cgd2UncmUgZGVmYXVsdCB0byAxIGJ1dCBpdCBzaG91bGQgcmVhbGx5IGJlIDAgKi8KLSNkZWZpbmUgRENDUEZfSU5JVElBTF9TRU5EX05EUF9DT1VOVAkJMQotCi0vKioKLSAgKiBzdHJ1Y3QgZGNjcF9taW5pc29jayAtIE1pbmltYWwgRENDUCBjb25uZWN0aW9uIHJlcHJlc2VudGF0aW9uCi0gICoKLSAgKiBXaWxsIGJlIHVzZWQgdG8gcGFzcyB0aGUgc3RhdGUgZnJvbSBkY2NwX3JlcXVlc3Rfc29jayB0byBkY2NwX3NvY2suCi0gICoKLSAgKiBAZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyAtIFNlcXVlbmNlIFdpbmRvdyBGZWF0dXJlIChzZWN0aW9uIDcuNS4yKQotICAqIEBkY2NwbXNfcGVuZGluZyAtIExpc3Qgb2YgZmVhdHVyZXMgYmVpbmcgbmVnb3RpYXRlZAotICAqIEBkY2NwbXNfY29uZiAtCi0gICovCi1zdHJ1Y3QgZGNjcF9taW5pc29jayB7Ci0JX191NjQJCQlkY2NwbXNfc2VxdWVuY2Vfd2luZG93OwotCXN0cnVjdCBsaXN0X2hlYWQJZGNjcG1zX3BlbmRpbmc7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkY2NwbXNfY29uZjsKLX07Ci0KLXN0cnVjdCBkY2NwX29wdF9jb25mIHsKLQlfX3U4CQkJKmRjY3BvY192YWw7Ci0JX191OAkJCWRjY3BvY19sZW47Ci19OwotCi1zdHJ1Y3QgZGNjcF9vcHRfcGVuZCB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkY2Nwb3Bfbm9kZTsKLQlfX3U4CQkJZGNjcG9wX3R5cGU7Ci0JX191OAkJCWRjY3BvcF9mZWF0OwotCV9fdTgJCSAgICAgICAgKmRjY3BvcF92YWw7Ci0JX191OAkJCWRjY3BvcF9sZW47Ci0JaW50CQkJZGNjcG9wX2NvbmY7Ci0Jc3RydWN0IGRjY3Bfb3B0X2NvbmYgICAgKmRjY3BvcF9zYzsKLX07Ci0KLWV4dGVybiB2b2lkIGRjY3BfbWluaXNvY2tfaW5pdChzdHJ1Y3QgZGNjcF9taW5pc29jayAqZG1zayk7Ci0KIC8qKgogICogc3RydWN0IGRjY3BfcmVxdWVzdF9zb2NrICAtICByZXByZXNlbnQgRENDUC1zcGVjaWZpYyBjb25uZWN0aW9uIHJlcXVlc3QKICAqIEBkcmVxX2luZXRfcnNrOiBzdHJ1Y3R1cmUgaW5oZXJpdGVkIGZyb20KQEAgLTQ4MywxMyArNDQzLDE0IEBACiAgKiBAZGNjcHNfdGltZXN0YW1wX3RpbWUgLSB0aW1lIG9mIHJlY2VpdmluZyBsYXRlc3QgQGRjY3BzX3RpbWVzdGFtcF9lY2hvCiAgKiBAZGNjcHNfbF9hY2tfcmF0aW8gLSBmZWF0dXJlLWxvY2FsIEFjayBSYXRpbwogICogQGRjY3BzX3JfYWNrX3JhdGlvIC0gZmVhdHVyZS1yZW1vdGUgQWNrIFJhdGlvCisgKiBAZGNjcHNfbF9zZXFfd2luIC0gbG9jYWwgU2VxdWVuY2UgV2luZG93IChpbmZsdWVuY2VzIGFjayBudW1iZXIgdmFsaWRpdHkpCisgKiBAZGNjcHNfcl9zZXFfd2luIC0gcmVtb3RlIFNlcXVlbmNlIFdpbmRvdyAoaW5mbHVlbmNlcyBzZXEgbnVtYmVyIHZhbGlkaXR5KQogICogQGRjY3BzX3Bjc2xlbiAtIHNlbmRlciAgIHBhcnRpYWwgY2hlY2tzdW0gY292ZXJhZ2UgKHZpYSBzb2Nrb3B0KQogICogQGRjY3BzX3BjcmxlbiAtIHJlY2VpdmVyIHBhcnRpYWwgY2hlY2tzdW0gY292ZXJhZ2UgKHZpYSBzb2Nrb3B0KQogICogQGRjY3BzX3NlbmRfbmRwX2NvdW50IC0gbG9jYWwgU2VuZCBORFAgQ291bnQgZmVhdHVyZSAoNy43LjIpCiAgKiBAZGNjcHNfbmRwX2NvdW50IC0gbnVtYmVyIG9mIE5vbiBEYXRhIFBhY2tldHMgc2luY2UgbGFzdCBkYXRhIHBhY2tldAogICogQGRjY3BzX21zc19jYWNoZSAtIGN1cnJlbnQgdmFsdWUgb2YgTVNTIChwYXRoIE1UVSBtaW51cyBoZWFkZXIgc2l6ZXMpCiAgKiBAZGNjcHNfcmF0ZV9sYXN0IC0gdGltZXN0YW1wIGZvciByYXRlLWxpbWl0aW5nIERDQ1AtU3luYyAoUkZDIDQzNDAsIDcuNS40KQotICogQGRjY3BzX21pbmlzb2NrIC0gYXNzb2NpYXRlZCBtaW5pc29jayAoYWNjZXNzZWQgdmlhIGRjY3BfbXNrKQogICogQGRjY3BzX2ZlYXRuZWcgLSB0cmFja3MgZmVhdHVyZS1uZWdvdGlhdGlvbiBzdGF0ZSAobW9zdGx5IGR1cmluZyBoYW5kc2hha2UpCiAgKiBAZGNjcHNfaGNfcnhfYWNrdmVjIC0gcnggaGFsZiBjb25uZWN0aW9uIGFjayB2ZWN0b3IKICAqIEBkY2Nwc19oY19yeF9jY2lkIC0gQ0NJRCB1c2VkIGZvciB0aGUgcmVjZWl2ZXIgKG9yIHJlY2VpdmluZyBoYWxmLWNvbm5lY3Rpb24pCkBAIC01MjMsMTIgKzQ4NCwxMyBAQAogCV9fdTMyCQkJCWRjY3BzX3RpbWVzdGFtcF90aW1lOwogCV9fdTE2CQkJCWRjY3BzX2xfYWNrX3JhdGlvOwogCV9fdTE2CQkJCWRjY3BzX3JfYWNrX3JhdGlvOworCV9fdTY0CQkJCWRjY3BzX2xfc2VxX3dpbjo0ODsKKwlfX3U2NAkJCQlkY2Nwc19yX3NlcV93aW46NDg7CiAJX191OAkJCQlkY2Nwc19wY3NsZW46NDsKIAlfX3U4CQkJCWRjY3BzX3Bjcmxlbjo0OwogCV9fdTgJCQkJZGNjcHNfc2VuZF9uZHBfY291bnQ6MTsKIAlfX3U2NAkJCQlkY2Nwc19uZHBfY291bnQ6NDg7CiAJdW5zaWduZWQgbG9uZwkJCWRjY3BzX3JhdGVfbGFzdDsKLQlzdHJ1Y3QgZGNjcF9taW5pc29jawkJZGNjcHNfbWluaXNvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAkJZGNjcHNfZmVhdG5lZzsKIAlzdHJ1Y3QgZGNjcF9hY2t2ZWMJCSpkY2Nwc19oY19yeF9hY2t2ZWM7CiAJc3RydWN0IGNjaWQJCQkqZGNjcHNfaGNfcnhfY2NpZDsKQEAgLTU0NiwxMSArNTA4LDYgQEAKIAlyZXR1cm4gKHN0cnVjdCBkY2NwX3NvY2sgKilzazsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNjcF9taW5pc29jayAqZGNjcF9tc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQotewotCXJldHVybiAoc3RydWN0IGRjY3BfbWluaXNvY2sgKikmZGNjcF9zayhzayktPmRjY3BzX21pbmlzb2NrOwotfQotCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmRjY3Bfcm9sZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3dpdGNoIChkY2NwX3NrKHNrKS0+ZGNjcHNfcm9sZSkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKaW5kZXggNDdmMzQzYy4uMjkxOGMwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIEJVU19JRF9TSVpFCQkyMAogCiBzdHJ1Y3QgZGV2aWNlOworc3RydWN0IGRldmljZV9wcml2YXRlOwogc3RydWN0IGRldmljZV9kcml2ZXI7CiBzdHJ1Y3QgZHJpdmVyX3ByaXZhdGU7CiBzdHJ1Y3QgY2xhc3M7CkBAIC0xNDcsNyArMTQ4LDcgQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJpdmVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJIHN0cnVjdCBidXNfdHlwZSAqYnVzKTsKIGV4dGVybiBpbnQgZHJpdmVyX3Byb2JlX2RvbmUodm9pZCk7Ci1leHRlcm4gaW50IHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKTsKK2V4dGVybiB2b2lkIHdhaXRfZm9yX2RldmljZV9wcm9iZSh2b2lkKTsKIAogCiAvKiBzeXNmcyBpbnRlcmZhY2UgZm9yIGV4cG9ydGluZyBkcml2ZXIgYXR0cmlidXRlcyAqLwpAQCAtMzY3LDE1ICszNjgsMTEgQEAKIH07CiAKIHN0cnVjdCBkZXZpY2UgewotCXN0cnVjdCBrbGlzdAkJa2xpc3RfY2hpbGRyZW47Ci0Jc3RydWN0IGtsaXN0X25vZGUJa25vZGVfcGFyZW50OwkvKiBub2RlIGluIHNpYmxpbmcgbGlzdCAqLwotCXN0cnVjdCBrbGlzdF9ub2RlCWtub2RlX2RyaXZlcjsKLQlzdHJ1Y3Qga2xpc3Rfbm9kZQlrbm9kZV9idXM7CiAJc3RydWN0IGRldmljZQkJKnBhcmVudDsKIAorCXN0cnVjdCBkZXZpY2VfcHJpdmF0ZQkqcDsKKwogCXN0cnVjdCBrb2JqZWN0IGtvYmo7Ci0JY2hhcglidXNfaWRbQlVTX0lEX1NJWkVdOwkvKiBwb3NpdGlvbiBvbiBwYXJlbnQgYnVzICovCi0JdW5zaWduZWQJCXVldmVudF9zdXBwcmVzczoxOwogCWNvbnN0IGNoYXIJCSppbml0X25hbWU7IC8qIGluaXRpYWwgbmFtZSBvZiB0aGUgZGV2aWNlICovCiAJc3RydWN0IGRldmljZV90eXBlCSp0eXBlOwogCkBAIC0zODcsOCArMzg0LDEzIEBACiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcjsJLyogd2hpY2ggZHJpdmVyIGhhcyBhbGxvY2F0ZWQgdGhpcwogCQkJCQkgICBkZXZpY2UgKi8KIAl2b2lkCQkqZHJpdmVyX2RhdGE7CS8qIGRhdGEgcHJpdmF0ZSB0byB0aGUgZHJpdmVyICovCi0Jdm9pZAkJKnBsYXRmb3JtX2RhdGE7CS8qIFBsYXRmb3JtIHNwZWNpZmljIGRhdGEsIGRldmljZQotCQkJCQkgICBjb3JlIGRvZXNuJ3QgdG91Y2ggaXQgKi8KKworCXZvaWQJCSpwbGF0Zm9ybV9kYXRhOwkvKiBXZSB3aWxsIHJlbW92ZSBwbGF0Zm9ybV9kYXRhCisJCQkJCSAgIGZpZWxkIGlmIGFsbCBwbGF0Zm9ybSBkZXZpY2VzCisJCQkJCSAgIHBhc3MgaXRzIHBsYXRmb3JtIHNwZWNpZmljIGRhdGEKKwkJCQkJICAgZnJvbSBwbGF0Zm9ybV9kZXZpY2UtPnBsYXRmb3JtX2RhdGEsCisJCQkJCSAgIG90aGVyIGtpbmQgb2YgZGV2aWNlcyBzaG91bGQgbm90CisJCQkJCSAgIHVzZSBwbGF0Zm9ybV9kYXRhLiAqLwogCXN0cnVjdCBkZXZfcG1faW5mbwlwb3dlcjsKIAogI2lmZGVmIENPTkZJR19OVU1BCkBAIC00MjcsOCArNDI5LDcgQEAKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpkZXZfbmFtZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JLyogd2lsbCBiZSBjaGFuZ2VkIGludG8ga29iamVjdF9uYW1lKCZkZXYtPmtvYmopIGluIHRoZSBuZWFyIGZ1dHVyZSAqLwotCXJldHVybiBkZXYtPmJ1c19pZDsKKwlyZXR1cm4ga29iamVjdF9uYW1lKCZkZXYtPmtvYmopOwogfQogCiBleHRlcm4gaW50IGRldl9zZXRfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUsIC4uLikKQEAgLTQ2Myw2ICs0NjQsMTYgQEAKIAlkZXYtPmRyaXZlcl9kYXRhID0gZGF0YTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZGV2X2dldF91ZXZlbnRfc3VwcHJlc3MoY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPmtvYmoudWV2ZW50X3N1cHByZXNzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGV2X3NldF91ZXZlbnRfc3VwcHJlc3Moc3RydWN0IGRldmljZSAqZGV2LCBpbnQgdmFsKQoreworCWRldi0+a29iai51ZXZlbnRfc3VwcHJlc3MgPSB2YWw7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV9pc19yZWdpc3RlcmVkKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gZGV2LT5rb2JqLnN0YXRlX2luX3N5c2ZzOwpAQCAtNDgzLDcgKzQ5NCw4IEBACiBleHRlcm4gc3RydWN0IGRldmljZSAqZGV2aWNlX2ZpbmRfY2hpbGQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJCWludCAoKm1hdGNoKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpKTsKIGV4dGVybiBpbnQgZGV2aWNlX3JlbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKm5ld19uYW1lKTsKLWV4dGVybiBpbnQgZGV2aWNlX21vdmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpuZXdfcGFyZW50KTsKK2V4dGVybiBpbnQgZGV2aWNlX21vdmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpuZXdfcGFyZW50LAorCQkgICAgICAgZW51bSBkcG1fb3JkZXIgZHBtX29yZGVyKTsKIAogLyoKICAqIFJvb3QgZGV2aWNlIG9iamVjdHMgZm9yIGdyb3VwaW5nIHVuZGVyIC9zeXMvZGV2aWNlcwpAQCAtNTcwLDcgKzU4Miw3IEBACiAjaWYgZGVmaW5lZChERUJVRykKICNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgYXJnLi4uKQkJXAogCWRldl9wcmludGsoS0VSTl9ERUJVRyAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKLSNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19ERUJVRykKICNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSBkbyB7IFwKIAlkeW5hbWljX2Rldl9kYmcoZGV2LCBmb3JtYXQsICMjX19WQV9BUkdTX18pOyBcCiAJfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvZGxtX25ldGxpbmsuaAppbmRleCAxOTI3NjMzLi42NDdjOGVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RsbV9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbG1fbmV0bGluay5oCkBAIC05LDYgKzksOCBAQAogI2lmbmRlZiBfRExNX05FVExJTktfSAogI2RlZmluZSBfRExNX05FVExJTktfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB7CiAJRExNX1NUQVRVU19XQUlUSU5HID0gMSwKIAlETE1fU1RBVFVTX0dSQU5URUQgPSAyLApAQCAtMTgsMTYgKzIwLDE2IEBACiAjZGVmaW5lIERMTV9MT0NLX0RBVEFfVkVSU0lPTiAxCiAKIHN0cnVjdCBkbG1fbG9ja19kYXRhIHsKLQl1aW50MTZfdCB2ZXJzaW9uOwotCXVpbnQzMl90IGxvY2tzcGFjZV9pZDsKKwlfX3UxNiB2ZXJzaW9uOworCV9fdTMyIGxvY2tzcGFjZV9pZDsKIAlpbnQgbm9kZWlkOwogCWludCBvd25waWQ7Ci0JdWludDMyX3QgaWQ7Ci0JdWludDMyX3QgcmVtaWQ7Ci0JdWludDY0X3QgeGlkOwotCWludDhfdCBzdGF0dXM7Ci0JaW50OF90IGdybW9kZTsKLQlpbnQ4X3QgcnFtb2RlOworCV9fdTMyIGlkOworCV9fdTMyIHJlbWlkOworCV9fdTY0IHhpZDsKKwlfX3M4IHN0YXR1czsKKwlfX3M4IGdybW9kZTsKKwlfX3M4IHJxbW9kZTsKIAl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsKIAlpbnQgcmVzb3VyY2VfbmFtZWxlbjsKIAljaGFyIHJlc291cmNlX25hbWVbRExNX1JFU05BTUVfTUFYTEVOXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaCBiL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAppbmRleCAyOGMyOTQwLi40OGU0NGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCkBAIC0xMTMsMjAgKzExMywyMCBAQAogCSAqIHJldHVybiAtRU5PVFRZKSBmaWxsIG91dCB0aGlzIGZpZWxkLCBldmVuIGlmIHRoZQogCSAqIGNvbW1hbmQgZmFpbGVkLgogCSAqLwotCXVpbnQzMl90IHZlcnNpb25bM107CS8qIGluL291dCAqLwotCXVpbnQzMl90IGRhdGFfc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiBkYXRhIHBhc3NlZCBpbgorCV9fdTMyIHZlcnNpb25bM107CS8qIGluL291dCAqLworCV9fdTMyIGRhdGFfc2l6ZTsJLyogdG90YWwgc2l6ZSBvZiBkYXRhIHBhc3NlZCBpbgogCQkJCSAqIGluY2x1ZGluZyB0aGlzIHN0cnVjdCAqLwogCi0JdWludDMyX3QgZGF0YV9zdGFydDsJLyogb2Zmc2V0IHRvIHN0YXJ0IG9mIGRhdGEKKwlfX3UzMiBkYXRhX3N0YXJ0OwkvKiBvZmZzZXQgdG8gc3RhcnQgb2YgZGF0YQogCQkJCSAqIHJlbGF0aXZlIHRvIHN0YXJ0IG9mIHRoaXMgc3RydWN0ICovCiAKLQl1aW50MzJfdCB0YXJnZXRfY291bnQ7CS8qIGluL291dCAqLwotCWludDMyX3Qgb3Blbl9jb3VudDsJLyogb3V0ICovCi0JdWludDMyX3QgZmxhZ3M7CQkvKiBpbi9vdXQgKi8KLQl1aW50MzJfdCBldmVudF9ucjsgICAgICAJLyogaW4vb3V0ICovCi0JdWludDMyX3QgcGFkZGluZzsKKwlfX3UzMiB0YXJnZXRfY291bnQ7CS8qIGluL291dCAqLworCV9fczMyIG9wZW5fY291bnQ7CS8qIG91dCAqLworCV9fdTMyIGZsYWdzOwkJLyogaW4vb3V0ICovCisJX191MzIgZXZlbnRfbnI7ICAgICAgCS8qIGluL291dCAqLworCV9fdTMyIHBhZGRpbmc7CiAKLQl1aW50NjRfdCBkZXY7CQkvKiBpbi9vdXQgKi8KKwlfX3U2NCBkZXY7CQkvKiBpbi9vdXQgKi8KIAogCWNoYXIgbmFtZVtETV9OQU1FX0xFTl07CS8qIGRldmljZSBuYW1lICovCiAJY2hhciB1dWlkW0RNX1VVSURfTEVOXTsJLyogdW5pcXVlIGlkZW50aWZpZXIgZm9yCkBAIC0xMzksOSArMTM5LDkgQEAKICAqIGRtX2lvY3RsLgogICovCiBzdHJ1Y3QgZG1fdGFyZ2V0X3NwZWMgewotCXVpbnQ2NF90IHNlY3Rvcl9zdGFydDsKLQl1aW50NjRfdCBsZW5ndGg7Ci0JaW50MzJfdCBzdGF0dXM7CQkvKiB1c2VkIHdoZW4gcmVhZGluZyBmcm9tIGtlcm5lbCBvbmx5ICovCisJX191NjQgc2VjdG9yX3N0YXJ0OworCV9fdTY0IGxlbmd0aDsKKwlfX3MzMiBzdGF0dXM7CQkvKiB1c2VkIHdoZW4gcmVhZGluZyBmcm9tIGtlcm5lbCBvbmx5ICovCiAKIAkvKgogCSAqIExvY2F0aW9uIG9mIHRoZSBuZXh0IGRtX3RhcmdldF9zcGVjLgpAQCAtMTUzLDcgKzE1Myw3IEBACiAJICogICAodGhhdCBmb2xsb3dzIHRoZSBkbV9pb2N0bCBzdHJ1Y3QpIHRvIHRoZSBzdGFydCBvZiB0aGUgIm5leHQiCiAJICogICBkbV90YXJnZXRfc3BlYy4KIAkgKi8KLQl1aW50MzJfdCBuZXh0OworCV9fdTMyIG5leHQ7CiAKIAljaGFyIHRhcmdldF90eXBlW0RNX01BWF9UWVBFX05BTUVdOwogCkBAIC0xNjgsMTcgKzE2OCwxNyBAQAogICogVXNlZCB0byByZXRyaWV2ZSB0aGUgdGFyZ2V0IGRlcGVuZGVuY2llcy4KICAqLwogc3RydWN0IGRtX3RhcmdldF9kZXBzIHsKLQl1aW50MzJfdCBjb3VudDsJLyogQXJyYXkgc2l6ZSAqLwotCXVpbnQzMl90IHBhZGRpbmc7CS8qIHVudXNlZCAqLwotCXVpbnQ2NF90IGRldlswXTsJLyogb3V0ICovCisJX191MzIgY291bnQ7CS8qIEFycmF5IHNpemUgKi8KKwlfX3UzMiBwYWRkaW5nOwkvKiB1bnVzZWQgKi8KKwlfX3U2NCBkZXZbMF07CS8qIG91dCAqLwogfTsKIAogLyoKICAqIFVzZWQgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgZG0gZGV2aWNlcy4KICAqLwogc3RydWN0IGRtX25hbWVfbGlzdCB7Ci0JdWludDY0X3QgZGV2OwotCXVpbnQzMl90IG5leHQ7CQkvKiBvZmZzZXQgdG8gdGhlIG5leHQgcmVjb3JkIGZyb20KKwlfX3U2NCBkZXY7CisJX191MzIgbmV4dDsJCS8qIG9mZnNldCB0byB0aGUgbmV4dCByZWNvcmQgZnJvbQogCQkJCSAgIHRoZSBfc3RhcnRfIG9mIHRoaXMgKi8KIAljaGFyIG5hbWVbMF07CiB9OwpAQCAtMTg3LDggKzE4Nyw4IEBACiAgKiBVc2VkIHRvIHJldHJpZXZlIHRoZSB0YXJnZXQgdmVyc2lvbnMKICAqLwogc3RydWN0IGRtX3RhcmdldF92ZXJzaW9ucyB7Ci0gICAgICAgIHVpbnQzMl90IG5leHQ7Ci0gICAgICAgIHVpbnQzMl90IHZlcnNpb25bM107CisgICAgICAgIF9fdTMyIG5leHQ7CisgICAgICAgIF9fdTMyIHZlcnNpb25bM107CiAKICAgICAgICAgY2hhciBuYW1lWzBdOwogfTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICogVXNlZCB0byBwYXNzIG1lc3NhZ2UgdG8gYSB0YXJnZXQKICAqLwogc3RydWN0IGRtX3RhcmdldF9tc2cgewotCXVpbnQ2NF90IHNlY3RvcjsJLyogRGV2aWNlIHNlY3RvciAqLworCV9fdTY0IHNlY3RvcjsJLyogRGV2aWNlIHNlY3RvciAqLwogCiAJY2hhciBtZXNzYWdlWzBdOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi9hdWRpby5oCmluZGV4IGJiMGRmMmEuLmZlYzY2YmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL2F1ZGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvYXVkaW8uaApAQCAtNzYsNyArNzYsNyBAQAogfSBhdWRpb19rYXJhb2tlX3Q7ICAgICAvKiBpbnRvIGxlZnQgYW5kIHJpZ2h0ICAqLwogCiAKLXR5cGVkZWYgdWludDE2X3QgYXVkaW9fYXR0cmlidXRlc190OwordHlwZWRlZiBfX3UxNiBhdWRpb19hdHRyaWJ1dGVzX3Q7CiAvKiAgIGJpdHM6IGRlc2NyLiAqLwogLyogICAxNS0xMyBhdWRpbyBjb2RpbmcgbW9kZSAoMD1hYzMsIDI9bXBlZzEsIDM9bXBlZzJleHQsIDQ9TFBDTSwgNj1EVFMsICovCiAvKiAgIDEyICAgIG11bHRpY2hhbm5lbCBleHRlbnNpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmggYi9pbmNsdWRlL2xpbnV4L2R2Yi92aWRlby5oCmluZGV4IGJkNDljM2UuLjFkNzUwYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHZiL3ZpZGVvLmgKKysrIGIvaW5jbHVkZS9saW51eC9kdmIvdmlkZW8uaApAQCAtMTMyLDEyICsxMzIsMTIgQEAKICNkZWZpbmUgVklERU9fVlNZTkNfRklFTERfUFJPR1JFU1NJVkUJKDMpCiAKIHN0cnVjdCB2aWRlb19ldmVudCB7Ci0JaW50MzJfdCB0eXBlOworCV9fczMyIHR5cGU7CiAjZGVmaW5lIFZJREVPX0VWRU5UX1NJWkVfQ0hBTkdFRAkxCiAjZGVmaW5lIFZJREVPX0VWRU5UX0ZSQU1FX1JBVEVfQ0hBTkdFRAkyCiAjZGVmaW5lIFZJREVPX0VWRU5UX0RFQ09ERVJfU1RPUFBFRCAJMwogI2RlZmluZSBWSURFT19FVkVOVF9WU1lOQyAJCTQKLQl0aW1lX3QgdGltZXN0YW1wOworCV9fa2VybmVsX3RpbWVfdCB0aW1lc3RhbXA7CiAJdW5pb24gewogCQl2aWRlb19zaXplX3Qgc2l6ZTsKIAkJdW5zaWduZWQgaW50IGZyYW1lX3JhdGU7CS8qIGluIGZyYW1lcyBwZXIgMTAwMHNlYyAqLwpAQCAtMTU3LDI1ICsxNTcsMjUgQEAKIAogc3RydWN0IHZpZGVvX3N0aWxsX3BpY3R1cmUgewogCWNoYXIgX191c2VyICppRnJhbWU7ICAgICAgICAvKiBwb2ludGVyIHRvIGEgc2luZ2xlIGlmcmFtZSBpbiBtZW1vcnkgKi8KLQlpbnQzMl90IHNpemU7CisJX19zMzIgc2l6ZTsKIH07CiAKIAogdHlwZWRlZgogc3RydWN0IHZpZGVvX2hpZ2hsaWdodCB7CiAJaW50ICAgICBhY3RpdmU7ICAgICAgLyogICAgMT1zaG93IGhpZ2hsaWdodCwgMD1oaWRlIGhpZ2hsaWdodCAqLwotCXVpbnQ4X3QgY29udHJhc3QxOyAgIC8qICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29udHJhc3QgKi8KKwlfX3U4ICAgIGNvbnRyYXN0MTsgICAvKiAgICA3LSA0ICBQYXR0ZXJuIHBpeGVsIGNvbnRyYXN0ICovCiAJCQkgICAgIC8qICAgIDMtIDAgIEJhY2tncm91bmQgcGl4ZWwgY29udHJhc3QgKi8KLQl1aW50OF90IGNvbnRyYXN0MjsgICAvKiAgICA3LSA0ICBFbXBoYXNpcyBwaXhlbC0yIGNvbnRyYXN0ICovCisJX191OCAgICBjb250cmFzdDI7ICAgLyogICAgNy0gNCAgRW1waGFzaXMgcGl4ZWwtMiBjb250cmFzdCAqLwogCQkJICAgICAvKiAgICAzLSAwICBFbXBoYXNpcyBwaXhlbC0xIGNvbnRyYXN0ICovCi0JdWludDhfdCBjb2xvcjE7ICAgICAgLyogICAgNy0gNCAgUGF0dGVybiBwaXhlbCBjb2xvciAqLworCV9fdTggICAgY29sb3IxOyAgICAgIC8qICAgIDctIDQgIFBhdHRlcm4gcGl4ZWwgY29sb3IgKi8KIAkJCSAgICAgLyogICAgMy0gMCAgQmFja2dyb3VuZCBwaXhlbCBjb2xvciAqLwotCXVpbnQ4X3QgY29sb3IyOyAgICAgIC8qICAgIDctIDQgIEVtcGhhc2lzIHBpeGVsLTIgY29sb3IgKi8KKwlfX3U4ICAgIGNvbG9yMjsgICAgICAvKiAgICA3LSA0ICBFbXBoYXNpcyBwaXhlbC0yIGNvbG9yICovCiAJCQkgICAgIC8qICAgIDMtIDAgIEVtcGhhc2lzIHBpeGVsLTEgY29sb3IgKi8KLQl1aW50MzJfdCB5cG9zOyAgICAgICAvKiAgIDIzLTIyICBhdXRvIGFjdGlvbiBtb2RlICovCisJX191MzIgICAgeXBvczsgICAgICAgLyogICAyMy0yMiAgYXV0byBhY3Rpb24gbW9kZSAqLwogCQkJICAgICAvKiAgIDIxLTEyICBzdGFydCB5ICovCiAJCQkgICAgIC8qICAgIDktIDAgIGVuZCB5ICovCi0JdWludDMyX3QgeHBvczsgICAgICAgLyogICAyMy0yMiAgYnV0dG9uIGNvbG9yIG51bWJlciAqLworCV9fdTMyICAgIHhwb3M7ICAgICAgIC8qICAgMjMtMjIgIGJ1dHRvbiBjb2xvciBudW1iZXIgKi8KIAkJCSAgICAgLyogICAyMS0xMiAgc3RhcnQgeCAqLwogCQkJICAgICAvKiAgICA5LSAwICBlbmQgeCAqLwogfSB2aWRlb19oaWdobGlnaHRfdDsKQEAgLTE4OSwxNyArMTg5LDE3IEBACiAKIHR5cGVkZWYgc3RydWN0IHZpZGVvX3NwdV9wYWxldHRlIHsgICAgICAvKiBTUFUgUGFsZXR0ZSBpbmZvcm1hdGlvbiAqLwogCWludCBsZW5ndGg7Ci0JdWludDhfdCBfX3VzZXIgKnBhbGV0dGU7CisJX191OCBfX3VzZXIgKnBhbGV0dGU7CiB9IHZpZGVvX3NwdV9wYWxldHRlX3Q7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgdmlkZW9fbmF2aV9wYWNrIHsKIAlpbnQgbGVuZ3RoOyAgICAgICAgICAvKiAwIC4uLiAxMDI0ICovCi0JdWludDhfdCBkYXRhWzEwMjRdOworCV9fdTggZGF0YVsxMDI0XTsKIH0gdmlkZW9fbmF2aV9wYWNrX3Q7CiAKIAotdHlwZWRlZiB1aW50MTZfdCB2aWRlb19hdHRyaWJ1dGVzX3Q7Cit0eXBlZGVmIF9fdTE2IHZpZGVvX2F0dHJpYnV0ZXNfdDsKIC8qICAgYml0czogZGVzY3IuICovCiAvKiAgIDE1LTE0IFZpZGVvIGNvbXByZXNzaW9uIG1vZGUgKDA9TVBFRy0xLCAxPU1QRUctMikgKi8KIC8qICAgMTMtMTIgVFYgc3lzdGVtICgwPTUyNS82MCwgMT02MjUvNTApICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaCBiL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYWJmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaApAQCAtMCwwICsxLDg4IEBACisjaWZuZGVmIF9EWU5BTUlDX0RFQlVHX0gKKyNkZWZpbmUgX0RZTkFNSUNfREVCVUdfSAorCisvKiBkeW5hbWljX3ByaW50a19lbmFibGVkLCBhbmQgZHluYW1pY19wcmludGtfZW5hYmxlZDIgYXJlIGJpdG1hc2tzIGluIHdoaWNoCisgKiBiaXQgbiBpcyBzZXQgdG8gMSBpZiBhbnkgbW9kbmFtZSBoYXNoZXMgaW50byB0aGUgYnVja2V0IG4sIDAgb3RoZXJ3aXNlLiBUaGV5CisgKiB1c2UgaW5kZXBlbmRlbnQgaGFzaCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGZhbHNlIHBvc2l0aXZlcy4KKyAqLworZXh0ZXJuIGxvbmcgbG9uZyBkeW5hbWljX2RlYnVnX2VuYWJsZWQ7CitleHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfZGVidWdfZW5hYmxlZDI7CisKKy8qCisgKiBBbiBpbnN0YW5jZSBvZiB0aGlzIHN0cnVjdHVyZSBpcyBjcmVhdGVkIGluIGEgc3BlY2lhbAorICogRUxGIHNlY3Rpb24gYXQgZXZlcnkgZHluYW1pYyBkZWJ1ZyBjYWxsc2l0ZS4gIEF0IHJ1bnRpbWUsCisgKiB0aGUgc3BlY2lhbCBzZWN0aW9uIGlzIHRyZWF0ZWQgYXMgYW4gYXJyYXkgb2YgdGhlc2UuCisgKi8KK3N0cnVjdCBfZGRlYnVnIHsKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBhcmUgdXNlZCB0byBkcml2ZSB0aGUgdXNlciBpbnRlcmZhY2UKKwkgKiBmb3Igc2VsZWN0aW5nIGFuZCBkaXNwbGF5aW5nIGRlYnVnIGNhbGxzaXRlcy4KKwkgKi8KKwljb25zdCBjaGFyICptb2RuYW1lOworCWNvbnN0IGNoYXIgKmZ1bmN0aW9uOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNvbnN0IGNoYXIgKmZvcm1hdDsKKwljaGFyIHByaW1hcnlfaGFzaDsKKwljaGFyIHNlY29uZGFyeV9oYXNoOworCXVuc2lnbmVkIGludCBsaW5lbm86MjQ7CisJLyoKKyAJICogVGhlIGZsYWdzIGZpZWxkIGNvbnRyb2xzIHRoZSBiZWhhdmlvdXIgYXQgdGhlIGNhbGxzaXRlLgorIAkgKiBUaGUgYml0cyBoZXJlIGFyZSBjaGFuZ2VkIGR5bmFtaWNhbGx5IHdoZW4gdGhlIHVzZXIKKyAJICogd3JpdGVzIGNvbW1hbmRzIHRvIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZworCSAqLworI2RlZmluZSBfRFBSSU5US19GTEFHU19QUklOVCAgICgxPDwwKSAgLyogcHJpbnRrKCkgYSBtZXNzYWdlIHVzaW5nIHRoZSBmb3JtYXQgKi8KKyNkZWZpbmUgX0RQUklOVEtfRkxBR1NfREVGQVVMVCAwCisJdW5zaWduZWQgaW50IGZsYWdzOjg7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKworCitpbnQgZGRlYnVnX2FkZF9tb2R1bGUoc3RydWN0IF9kZGVidWcgKnRhYiwgdW5zaWduZWQgaW50IG4sCisJCQkJY29uc3QgY2hhciAqbW9kbmFtZSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQorZXh0ZXJuIGludCBkZGVidWdfcmVtb3ZlX21vZHVsZShjaGFyICptb2RfbmFtZSk7CisKKyNkZWZpbmUgX19keW5hbWljX2RiZ19lbmFibGVkKGRkKSAgKHsJICAgICBcCisJaW50IF9fcmV0ID0gMDsJCQkJCQkJICAgICBcCisJaWYgKHVubGlrZWx5KChkeW5hbWljX2RlYnVnX2VuYWJsZWQgJiAoMUxMIDw8IERFQlVHX0hBU0gpKSAmJgkgICAgIFwKKwkJCShkeW5hbWljX2RlYnVnX2VuYWJsZWQyICYgKDFMTCA8PCBERUJVR19IQVNIMikpKSkgICBcCisJCQkJaWYgKHVubGlrZWx5KGRkLmZsYWdzKSkJCQkgICAgIFwKKwkJCQkJX19yZXQgPSAxOwkJCSAgICAgXAorCV9fcmV0OyB9KQorCisjZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pIGRvIHsJCQkJCVwKKwlzdGF0aWMgc3RydWN0IF9kZGVidWcgZGVzY3JpcHRvcgkJCQlcCisJX191c2VkCQkJCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQlcCisJeyBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fRklMRV9fLCBmbXQsIERFQlVHX0hBU0gsCVwKKwkJREVCVUdfSEFTSDIsIF9fTElORV9fLCBfRFBSSU5US19GTEFHU19ERUZBVUxUIH07CVwKKwlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKGRlc2NyaXB0b3IpKQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6IiBwcl9mbXQoZm10KSwJXAorCQkJCSMjX19WQV9BUkdTX18pOwkJCQlcCisJfSB3aGlsZSAoMCkKKworCisjZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZtdCwgLi4uKSBkbyB7CQkJCVwKKwlzdGF0aWMgc3RydWN0IF9kZGVidWcgZGVzY3JpcHRvcgkJCQlcCisJX191c2VkCQkJCQkJCQlcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX192ZXJib3NlIiksIGFsaWduZWQoOCkpKSA9CQlcCisJeyBLQlVJTERfTU9ETkFNRSwgX19mdW5jX18sIF9fRklMRV9fLCBmbXQsIERFQlVHX0hBU0gsCVwKKwkJREVCVUdfSEFTSDIsIF9fTElORV9fLCBfRFBSSU5US19GTEFHU19ERUZBVUxUIH07CVwKKwlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKGRlc2NyaXB0b3IpKQkJCQlcCisJCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwJCQlcCisJCQkJCUtCVUlMRF9NT0ROQU1FICI6ICIgcHJfZm10KGZtdCksXAorCQkJCQkjI19fVkFfQVJHU19fKTsJCQlcCisJfSB3aGlsZSAoMCkKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgZGRlYnVnX3JlbW92ZV9tb2R1bGUoY2hhciAqbW9kKQoreworCXJldHVybiAwOworfQorCisjZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9keW5hbWljX3ByaW50ay5oIGIvaW5jbHVkZS9saW51eC9keW5hbWljX3ByaW50ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDUyOGQwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvZHluYW1pY19wcmludGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLSNpZm5kZWYgX0RZTkFNSUNfUFJJTlRLX0gKLSNkZWZpbmUgX0RZTkFNSUNfUFJJTlRLX0gKLQotI2RlZmluZSBEWU5BTUlDX0RFQlVHX0hBU0hfQklUUyA2Ci0jZGVmaW5lIERFQlVHX0hBU0hfVEFCTEVfU0laRSAoMSA8PCBEWU5BTUlDX0RFQlVHX0hBU0hfQklUUykKLQotI2RlZmluZSBUWVBFX0JPT0xFQU4gMQotCi0jZGVmaW5lIERZTkFNSUNfRU5BQkxFRF9BTEwgMAotI2RlZmluZSBEWU5BTUlDX0VOQUJMRURfTk9ORSAxCi0jZGVmaW5lIERZTkFNSUNfRU5BQkxFRF9TT01FIDIKLQotZXh0ZXJuIGludCBkeW5hbWljX2VuYWJsZWQ7Ci0KLS8qIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQsIGFuZCBkeW5hbWljX3ByaW50a19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKLSAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKLSAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgotICovCi1leHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQ7Ci1leHRlcm4gbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyOwotCi1zdHJ1Y3QgbW9kX2RlYnVnIHsKLQljaGFyICptb2RuYW1lOwotCWNoYXIgKmxvZ2ljYWxfbW9kbmFtZTsKLQljaGFyICpmbGFnX25hbWVzOwotCWludCB0eXBlOwotCWludCBoYXNoOwotCWludCBoYXNoMjsKLX0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwotCi1pbnQgcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUsIGludCB0eXBlLCBjaGFyICpzaGFyZV9uYW1lLAotCQkJCQljaGFyICpmbGFncywgaW50IGhhc2gsIGludCBoYXNoMik7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKLWV4dGVybiBpbnQgdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSk7Ci1leHRlcm4gaW50IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIoY2hhciAqbW9kbmFtZSwgaW50IHR5cGUsCi0JCQkJCWludCB2YWx1ZSwgaW50IGhhc2gpOwotCi0jZGVmaW5lIF9fZHluYW1pY19kYmdfZW5hYmxlZChtb2R1bGUsIHR5cGUsIHZhbHVlLCBsZXZlbCwgaGFzaCkgICh7CSAgICAgXAotCWludCBfX3JldCA9IDA7CQkJCQkJCSAgICAgXAotCWlmICh1bmxpa2VseSgoZHluYW1pY19wcmludGtfZW5hYmxlZCAmICgxTEwgPDwgREVCVUdfSEFTSCkpICYmCSAgICAgXAotCQkJKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyICYgKDFMTCA8PCBERUJVR19IQVNIMikpKSkgICBcCi0JCQlfX3JldCA9IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIobW9kdWxlLCB0eXBlLCAgIFwKLQkJCQkJCQkJdmFsdWUsIGhhc2gpO1wKLQlfX3JldDsgfSkKLQotI2RlZmluZSBkeW5hbWljX3ByX2RlYnVnKGZtdCwgLi4uKSBkbyB7CQkJCQkgICAgXAotCXN0YXRpYyBjaGFyIG1vZF9uYW1lW10JCQkJCQkgICAgXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZV9zdHJpbmdzIikpKQkJCSAgICBcCi0JID0gS0JVSUxEX01PRE5BTUU7CQkJCQkJICAgIFwKLQlzdGF0aWMgc3RydWN0IG1vZF9kZWJ1ZyBkZXNjcmlwdG9yCQkJCSAgICBcCi0JX191c2VkCQkJCQkJCQkgICAgXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdmVyYm9zZSIpLCBhbGlnbmVkKDgpKSkgPQkJICAgIFwKLQl7IG1vZF9uYW1lLCBtb2RfbmFtZSwgTlVMTCwgVFlQRV9CT09MRUFOLCBERUJVR19IQVNILCBERUJVR19IQVNIMiB9O1wKLQlpZiAoX19keW5hbWljX2RiZ19lbmFibGVkKEtCVUlMRF9NT0ROQU1FLCBUWVBFX0JPT0xFQU4sCQkgICAgXAotCQkJCQkJMCwgMCwgREVCVUdfSEFTSCkpCSAgICBcCi0JCXByaW50ayhLRVJOX0RFQlVHIEtCVUlMRF9NT0ROQU1FICI6IiBmbXQsCQkgICAgXAotCQkJCSMjX19WQV9BUkdTX18pOwkJCQkgICAgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgZHluYW1pY19kZXZfZGJnKGRldiwgZm9ybWF0LCAuLi4pIGRvIHsJCQkJICAgIFwKLQlzdGF0aWMgY2hhciBtb2RfbmFtZVtdCQkJCQkJICAgIFwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2Vfc3RyaW5ncyIpKSkJCQkgICAgXAotCSA9IEtCVUlMRF9NT0ROQU1FOwkJCQkJCSAgICBcCi0Jc3RhdGljIHN0cnVjdCBtb2RfZGVidWcgZGVzY3JpcHRvcgkJCQkgICAgXAotCV9fdXNlZAkJCQkJCQkJICAgIFwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3ZlcmJvc2UiKSwgYWxpZ25lZCg4KSkpID0JCSAgICBcCi0JeyBtb2RfbmFtZSwgbW9kX25hbWUsIE5VTEwsIFRZUEVfQk9PTEVBTiwgREVCVUdfSEFTSCwgREVCVUdfSEFTSDIgfTtcCi0JaWYgKF9fZHluYW1pY19kYmdfZW5hYmxlZChLQlVJTERfTU9ETkFNRSwgVFlQRV9CT09MRUFOLAkJICAgIFwKLQkJCQkJCTAsIDAsIERFQlVHX0hBU0gpKQkgICAgXAotCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsCQkJICAgIFwKLQkJCQkJS0JVSUxEX01PRE5BTUUgIjogIiBmb3JtYXQsCSAgICBcCi0JCQkJCSMjX19WQV9BUkdTX18pOwkJCSAgICBcCi0JfSB3aGlsZSAoMCkKLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSBpbnQgdW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjb25zdCBjaGFyICptb2RfbmFtZSkKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIoY2hhciAqbW9kbmFtZSwgaW50IHR5cGUsCi0JCQkJCQlpbnQgdmFsdWUsIGludCBoYXNoKQotewotCXJldHVybiAwOwotfQotCi0jZGVmaW5lIF9fZHluYW1pY19kYmdfZW5hYmxlZChtb2R1bGUsIHR5cGUsIHZhbHVlLCBsZXZlbCwgaGFzaCkgICh7IDA7IH0pCi0jZGVmaW5lIGR5bmFtaWNfcHJfZGVidWcoZm10LCAuLi4pICBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGR5bmFtaWNfZGV2X2RiZyhkZXYsIGZvcm1hdCwgLi4uKSAgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oIGIvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCmluZGV4IGNlYjE0NTQuLmVjMTJjYzc0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZXJycXVldWUuaApAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBTT19FRV9PUklHSU5fTE9DQUwJMQogI2RlZmluZSBTT19FRV9PUklHSU5fSUNNUAkyCiAjZGVmaW5lIFNPX0VFX09SSUdJTl9JQ01QNgkzCisjZGVmaW5lIFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkcgNAogCiAjZGVmaW5lIFNPX0VFX09GRkVOREVSKGVlKQkoKHN0cnVjdCBzb2NrYWRkciopKChlZSkrMSkpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaAppbmRleCAxY2IwZjBiLi5hMWYxN2FiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oCkBAIC0xODQsNCArMTg0LDI1IEBACiB9CiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCisvKioKKyAqIGNvbXBhcmVfZXRoZXJfaGVhZGVyIC0gQ29tcGFyZSB0d28gRXRoZXJuZXQgaGVhZGVycworICogQGE6IFBvaW50ZXIgdG8gRXRoZXJuZXQgaGVhZGVyCisgKiBAYjogUG9pbnRlciB0byBFdGhlcm5ldCBoZWFkZXIKKyAqCisgKiBDb21wYXJlIHR3byBldGhlcm5ldCBoZWFkZXJzLCByZXR1cm5zIDAgaWYgZXF1YWwuCisgKiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgbmV0d29yayBoZWFkZXIgKGkuZS4sIElQIGhlYWRlcikgaXMgNC1ieXRlCisgKiBhbGlnbmVkIE9SIHRoZSBwbGF0Zm9ybSBjYW4gaGFuZGxlIHVuYWxpZ25lZCBhY2Nlc3MuICBUaGlzIGlzIHRoZQorICogY2FzZSBmb3IgYWxsIHBhY2tldHMgY29taW5nIGludG8gbmV0aWZfcmVjZWl2ZV9za2Igb3Igc2ltaWxhcgorICogZW50cnkgcG9pbnRzLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGNvbXBhcmVfZXRoZXJfaGVhZGVyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJdTMyICphMzIgPSAodTMyICopKCh1OCAqKWEgKyAyKTsKKwl1MzIgKmIzMiA9ICh1MzIgKikoKHU4ICopYiArIDIpOworCisJcmV0dXJuICgqKHUxNiAqKWEgXiAqKHUxNiAqKWIpIHwgKGEzMlswXSBeIGIzMlswXSkgfAorCSAgICAgICAoYTMyWzFdIF4gYjMyWzFdKSB8IChhMzJbMl0gXiBiMzJbMl0pOworfQorCiAjZW5kaWYJLyogX0xJTlVYX0VUSEVSREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKaW5kZXggMjdjNjdhNS4uMTMxYjEyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTcsNiArNyw3IEBACiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgMjAwMiBJbnRlbCAoZWxpLmt1cGVybWFubkBpbnRlbC5jb20sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyaXN0b3BoZXIubGVlY2hAaW50ZWwuY29tLAogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3R0LmZlbGRtYW5AaW50ZWwuY29tKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSBTdW4gTWljcm9zeXN0ZW1zIDIwMDgKICAqLwogCiAjaWZuZGVmIF9MSU5VWF9FVEhUT09MX0gKQEAgLTI4NywxMCArMjg4LDc1IEBACiAJRVRIX0ZMQUdfTFJPCQk9ICgxIDw8IDE1KSwJLyogTFJPIGlzIGVuYWJsZWQgKi8KIH07CiAKLXN0cnVjdCBldGh0b29sX3J4bmZjIHsKLQlfX3UzMgkJY21kOworLyogVGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzIGFyZSBmb3Igc3VwcG9ydGluZyBSWCBuZXR3b3JrIGZsb3cKKyAqIGNsYXNzaWZpY2F0aW9uIGNvbmZpZ3VyYXRpb24uIE5vdGUsIGFsbCBtdWx0aWJ5dGUgZmllbGRzLCBlLmcuLAorICogaXA0c3JjLCBpcDRkc3QsIHBzcmMsIHBkc3QsIHNwaSwgZXRjLiBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gbmV0d29yaworICogYnl0ZSBvcmRlci4KKyAqLworc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX2JlMTYJcHNyYzsKKwlfX2JlMTYJcGRzdDsKKwlfX3U4ICAgIHRvczsKK307CisKK3N0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjIHsKKwlfX2JlMzIJaXA0c3JjOworCV9fYmUzMglpcDRkc3Q7CisJX19iZTMyCXNwaTsKKwlfX3U4ICAgIHRvczsKK307CisKK3N0cnVjdCBldGh0b29sX3Jhd2lwNF9zcGVjIHsKKwlfX2JlMzIJaXA0c3JjOworCV9fYmUzMglpcDRkc3Q7CisJX191OAloZGF0YVs2NF07Cit9OworCitzdHJ1Y3QgZXRodG9vbF9ldGhlcl9zcGVjIHsKKwlfX2JlMTYJZXRoZXJfdHlwZTsKKwlfX3U4CWZyYW1lX3NpemU7CisJX191OAllZnJhbWVbMTZdOworfTsKKworI2RlZmluZQlFVEhfUlhfTkZDX0lQNAkxCisjZGVmaW5lCUVUSF9SWF9ORkNfSVA2CTIKKworc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMgeworCV9fYmUzMglpcDRzcmM7CisJX19iZTMyCWlwNGRzdDsKKwlfX2JlMzIJbDRfNF9ieXRlczsKKwlfX3U4ICAgIHRvczsKKwlfX3U4ICAgIGlwX3ZlcjsKKwlfX3U4ICAgIHByb3RvOworfTsKKworc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjIHsKIAlfX3UzMgkJZmxvd190eXBlOwotCV9fdTY0CQlkYXRhOworCXVuaW9uIHsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXRjcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXVkcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdGNwaXA0X3NwZWMJCXNjdHBfaXA0X3NwZWM7CisJCXN0cnVjdCBldGh0b29sX2FoX2VzcGlwNF9zcGVjCQlhaF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWVzcF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfcmF3aXA0X3NwZWMJCXJhd19pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfZXRoZXJfc3BlYwkJZXRoZXJfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfdXNyaXA0X3NwZWMJCXVzcl9pcDRfc3BlYzsKKwkJX191OAkJCQkJaGRhdGFbNjRdOworCX0gaF91LCBtX3U7IC8qIGVudHJ5LCBtYXNrICovCisJX191NjQJCXJpbmdfY29va2llOworCV9fdTMyCQlsb2NhdGlvbjsKK307CisKK3N0cnVjdCBldGh0b29sX3J4bmZjIHsKKwlfX3UzMgkJCQljbWQ7CisJX191MzIJCQkJZmxvd190eXBlOworCS8qIFRoZSByeCBmbG93IGhhc2ggdmFsdWUgb3IgdGhlIHJ1bGUgREIgc2l6ZSAqLworCV9fdTY0CQkJCWRhdGE7CisJc3RydWN0IGV0aHRvb2xfcnhfZmxvd19zcGVjCWZzOworCV9fdTMyCQkJCXJ1bGVfY250OworCV9fdTMyCQkJCXJ1bGVfbG9jc1swXTsKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCkBAIC00MTcsOCArNDgzLDggQEAKIAkvKiB0aGUgZm9sbG93aW5nIGhvb2tzIGFyZSBvYnNvbGV0ZSAqLwogCWludAkoKnNlbGZfdGVzdF9jb3VudCkoc3RydWN0IG5ldF9kZXZpY2UgKik7LyogdXNlIGdldF9zc2V0X2NvdW50ICovCiAJaW50CSgqZ2V0X3N0YXRzX2NvdW50KShzdHJ1Y3QgbmV0X2RldmljZSAqKTsvKiB1c2UgZ2V0X3NzZXRfY291bnQgKi8KLQlpbnQJKCpnZXRfcnhoYXNoKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKLQlpbnQJKCpzZXRfcnhoYXNoKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKKwlpbnQJKCpnZXRfcnhuZmMpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICosIHZvaWQgKik7CisJaW50CSgqc2V0X3J4bmZjKShzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9yeG5mYyAqKTsKIH07CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCkBAIC00NjksNiArNTM1LDEyIEBACiAjZGVmaW5lCUVUSFRPT0xfU1JYRkgJCTB4MDAwMDAwMmEgLyogU2V0IFJYIGZsb3cgaGFzaCBjb25maWd1cmF0aW9uICovCiAjZGVmaW5lIEVUSFRPT0xfR0dSTwkJMHgwMDAwMDAyYiAvKiBHZXQgR1JPIGVuYWJsZSAoZXRodG9vbF92YWx1ZSkgKi8KICNkZWZpbmUgRVRIVE9PTF9TR1JPCQkweDAwMDAwMDJjIC8qIFNldCBHUk8gZW5hYmxlIChldGh0b29sX3ZhbHVlKSAqLworI2RlZmluZQlFVEhUT09MX0dSWFJJTkdTCTB4MDAwMDAwMmQgLyogR2V0IFJYIHJpbmdzIGF2YWlsYWJsZSBmb3IgTEIgKi8KKyNkZWZpbmUJRVRIVE9PTF9HUlhDTFNSTENOVAkweDAwMDAwMDJlIC8qIEdldCBSWCBjbGFzcyBydWxlIGNvdW50ICovCisjZGVmaW5lCUVUSFRPT0xfR1JYQ0xTUlVMRQkweDAwMDAwMDJmIC8qIEdldCBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCisjZGVmaW5lCUVUSFRPT0xfR1JYQ0xTUkxBTEwJMHgwMDAwMDAzMCAvKiBHZXQgYWxsIFJYIGNsYXNzaWZpY2F0aW9uIHJ1bGUgKi8KKyNkZWZpbmUJRVRIVE9PTF9TUlhDTFNSTERFTAkweDAwMDAwMDMxIC8qIERlbGV0ZSBSWCBjbGFzc2lmaWNhdGlvbiBydWxlICovCisjZGVmaW5lCUVUSFRPT0xfU1JYQ0xTUkxJTlMJMHgwMDAwMDAzMiAvKiBJbnNlcnQgUlggY2xhc3NpZmljYXRpb24gcnVsZSAqLwogCiAvKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgY29kZSAqLwogI2RlZmluZSBTUEFSQ19FVEhfR1NFVAkJRVRIVE9PTF9HU0VUCkBAIC01NjUsOSArNjM3LDEzIEBACiAjZGVmaW5lCVVEUF9WNl9GTE9XCTB4MDYKICNkZWZpbmUJU0NUUF9WNl9GTE9XCTB4MDcKICNkZWZpbmUJQUhfRVNQX1Y2X0ZMT1cJMHgwOAorI2RlZmluZQlBSF9WNF9GTE9XCTB4MDkKKyNkZWZpbmUJRVNQX1Y0X0ZMT1cJMHgwYQorI2RlZmluZQlBSF9WNl9GTE9XCTB4MGIKKyNkZWZpbmUJRVNQX1Y2X0ZMT1cJMHgwYworI2RlZmluZQlJUF9VU0VSX0ZMT1cJMHgwZAogCiAvKiBMMy1MNCBuZXR3b3JrIHRyYWZmaWMgZmxvdyBoYXNoIG9wdGlvbnMgKi8KLSNkZWZpbmUJUlhIX0RFVl9QT1JUCSgxIDw8IDApCiAjZGVmaW5lCVJYSF9MMkRBCSgxIDw8IDEpCiAjZGVmaW5lCVJYSF9WTEFOCSgxIDw8IDIpCiAjZGVmaW5lCVJYSF9MM19QUk9UTwkoMSA8PCAzKQpAQCAtNTc3LDUgKzY1Myw2IEBACiAjZGVmaW5lCVJYSF9MNF9CXzJfMwkoMSA8PCA3KSAvKiBkc3QgcG9ydCBpbiBjYXNlIG9mIFRDUC9VRFAvU0NUUCAqLwogI2RlZmluZQlSWEhfRElTQ0FSRAkoMSA8PCAzMSkKIAorI2RlZmluZQlSWF9DTFNfRkxPV19ESVNDCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTAogCiAjZW5kaWYgLyogX0xJTlVYX0VUSFRPT0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaCBiL2luY2x1ZGUvbGludXgvZXZlbnRwb2xsLmgKaW5kZXggZjFlMWQzYy4uZjY4NTZhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldmVudHBvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V2ZW50cG9sbC5oCkBAIC02MSw3ICs2MSw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZXZlbnRwb2xsX2luaXRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlJTklUX0xJU1RfSEVBRCgmZmlsZS0+Zl9lcF9saW5rcyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmZpbGUtPmZfZXBfbG9jayk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAppbmRleCA0ZDA3OGU5Li5jNmIzY2EzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLWNkZXYuaApAQCAtMjUsMTAgKzI1LDEyIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9maXJld2lyZS1jb25zdGFudHMuaD4KIAotI2RlZmluZSBGV19DREVWX0VWRU5UX0JVU19SRVNFVAkJMHgwMAotI2RlZmluZSBGV19DREVWX0VWRU5UX1JFU1BPTlNFCQkweDAxCi0jZGVmaW5lIEZXX0NERVZfRVZFTlRfUkVRVUVTVAkJMHgwMgotI2RlZmluZSBGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQJMHgwMworI2RlZmluZSBGV19DREVWX0VWRU5UX0JVU19SRVNFVAkJCTB4MDAKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9SRVNQT05TRQkJCTB4MDEKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9SRVFVRVNUCQkJMHgwMgorI2RlZmluZSBGV19DREVWX0VWRU5UX0lTT19JTlRFUlJVUFQJCTB4MDMKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVECTB4MDQKKyNkZWZpbmUgRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQJMHgwNQogCiAvKioKICAqIHN0cnVjdCBmd19jZGV2X2V2ZW50X2NvbW1vbiAtIENvbW1vbiBwYXJ0IG9mIGFsbCBmd19jZGV2X2V2ZW50XyB0eXBlcwpAQCAtMTM2LDcgKzEzOCwyNCBAQAogICogVGhpcyBldmVudCBpcyBzZW50IHdoZW4gdGhlIGNvbnRyb2xsZXIgaGFzIGNvbXBsZXRlZCBhbiAmZndfY2Rldl9pc29fcGFja2V0CiAgKiB3aXRoIHRoZSAlRldfQ0RFVl9JU09fSU5URVJSVVBUIGJpdCBzZXQuICBJbiB0aGUgcmVjZWl2ZSBjYXNlLCB0aGUgaGVhZGVycwogICogc3RyaXBwZWQgb2YgYWxsIHBhY2tldHMgdXAgdW50aWwgYW5kIGluY2x1ZGluZyB0aGUgaW50ZXJydXB0IHBhY2tldCBhcmUKLSAqIHJldHVybmVkIGluIHRoZSBAaGVhZGVyIGZpZWxkLgorICogcmV0dXJuZWQgaW4gdGhlIEBoZWFkZXIgZmllbGQuICBUaGUgYW1vdW50IG9mIGhlYWRlciBkYXRhIHBlciBwYWNrZXQgaXMgYXMKKyAqIHNwZWNpZmllZCBhdCBpc28gY29udGV4dCBjcmVhdGlvbiBieSAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUuCisgKgorICogSW4gdmVyc2lvbiAxIG9mIHRoaXMgQUJJLCBoZWFkZXIgZGF0YSBjb25zaXN0ZWQgb2YgdGhlIDEzOTQgaXNvY2hyb25vdXMKKyAqIHBhY2tldCBoZWFkZXIsIGZvbGxvd2VkIGJ5IHF1YWRsZXRzIGZyb20gdGhlIHBhY2tldCBwYXlsb2FkIGlmCisgKiAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUgPiA0LgorICoKKyAqIEluIHZlcnNpb24gMiBvZiB0aGlzIEFCSSwgaGVhZGVyIGRhdGEgY29uc2lzdCBvZiB0aGUgMTM5NCBpc29jaHJvbm91cworICogcGFja2V0IGhlYWRlciwgZm9sbG93ZWQgYnkgYSB0aW1lc3RhbXAgcXVhZGxldCBpZgorICogJmZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0LmhlYWRlcl9zaXplID4gNCwgZm9sbG93ZWQgYnkgcXVhZGxldHMgZnJvbSB0aGUKKyAqIHBhY2tldCBwYXlsb2FkIGlmICZmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dC5oZWFkZXJfc2l6ZSA+IDguCisgKgorICogQmVoYXZpb3VyIG9mIHZlci4gMSBvZiB0aGlzIEFCSSBpcyBubyBsb25nZXIgYXZhaWxhYmxlIHNpbmNlIEFCSSB2ZXIuIDIuCisgKgorICogRm9ybWF0IG9mIDEzOTQgaXNvIHBhY2tldCBoZWFkZXI6IDE2IGJpdHMgbGVuLCAyIGJpdHMgdGFnLCA2IGJpdHMgY2hhbm5lbCwKKyAqIDQgYml0cyB0Y29kZSwgNCBiaXRzIHN5LCBpbiBiaWcgZW5kaWFuIGJ5dGUgb3JkZXIuICBGb3JtYXQgb2YgdGltZXN0YW1wOgorICogMTYgYml0cyBpbnZhbGlkLCAzIGJpdHMgY3ljbGVTZWNvbmRzLCAxMyBiaXRzIGN5Y2xlQ291bnQsIGluIGJpZyBlbmRpYW4gYnl0ZQorICogb3JkZXIuCiAgKi8KIHN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQgewogCV9fdTY0IGNsb3N1cmU7CkBAIC0xNDcsMTIgKzE2Niw0NCBAQAogfTsKIAogLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29fcmVzb3VyY2UgLSBJc28gcmVzb3VyY2VzIHdlcmUgYWxsb2NhdGVkIG9yIGZyZWVkCisgKiBAY2xvc3VyZToJU2VlICZmd19jZGV2X2V2ZW50X2NvbW1vbjsKKyAqCQlzZXQgYnkgJUZXX0NERVZfSU9DXyhERSlBTExPQ0FURV9JU09fUkVTT1VSQ0UoX09OQ0UpIGlvY3RsCisgKiBAdHlwZToJJUZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0FMTE9DQVRFRCBvcgorICoJCSVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRAorICogQGhhbmRsZToJUmVmZXJlbmNlIGJ5IHdoaWNoIGFuIGFsbG9jYXRlZCByZXNvdXJjZSBjYW4gYmUgZGVhbGxvY2F0ZWQKKyAqIEBjaGFubmVsOglJc29jaHJvbm91cyBjaGFubmVsIHdoaWNoIHdhcyAoZGUpYWxsb2NhdGVkLCBpZiBhbnkKKyAqIEBiYW5kd2lkdGg6CUJhbmR3aWR0aCBhbGxvY2F0aW9uIHVuaXRzIHdoaWNoIHdlcmUgKGRlKWFsbG9jYXRlZCwgaWYgYW55CisgKgorICogQW4gJUZXX0NERVZfRVZFTlRfSVNPX1JFU09VUkNFX0FMTE9DQVRFRCBldmVudCBpcyBzZW50IGFmdGVyIGFuIGlzb2Nocm9ub3VzCisgKiByZXNvdXJjZSB3YXMgYWxsb2NhdGVkIGF0IHRoZSBJUk0uICBUaGUgY2xpZW50IGhhcyB0byBjaGVjayBAY2hhbm5lbCBhbmQKKyAqIEBiYW5kd2lkdGggZm9yIHdoZXRoZXIgdGhlIGFsbG9jYXRpb24gYWN0dWFsbHkgc3VjY2VlZGVkLgorICoKKyAqIEFuICVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRCBldmVudCBpcyBzZW50IGFmdGVyIGFuIGlzb2Nocm9ub3VzCisgKiByZXNvdXJjZSB3YXMgZGVhbGxvY2F0ZWQgYXQgdGhlIElSTS4gIEl0IGlzIGFsc28gc2VudCB3aGVuIGF1dG9tYXRpYworICogcmVhbGxvY2F0aW9uIGFmdGVyIGEgYnVzIHJlc2V0IGZhaWxlZC4KKyAqCisgKiBAY2hhbm5lbCBpcyA8MCBpZiBubyBjaGFubmVsIHdhcyAoZGUpYWxsb2NhdGVkIG9yIGlmIHJlYWxsb2NhdGlvbiBmYWlsZWQuCisgKiBAYmFuZHdpZHRoIGlzIDAgaWYgbm8gYmFuZHdpZHRoIHdhcyAoZGUpYWxsb2NhdGVkIG9yIGlmIHJlYWxsb2NhdGlvbiBmYWlsZWQuCisgKi8KK3N0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19yZXNvdXJjZSB7CisJX191NjQgY2xvc3VyZTsKKwlfX3UzMiB0eXBlOworCV9fdTMyIGhhbmRsZTsKKwlfX3MzMiBjaGFubmVsOworCV9fczMyIGJhbmR3aWR0aDsKK307CisKKy8qKgogICogdW5pb24gZndfY2Rldl9ldmVudCAtIENvbnZlbmllbmNlIHVuaW9uIG9mIGZ3X2NkZXZfZXZlbnRfIHR5cGVzCiAgKiBAY29tbW9uOiAgICAgICAgVmFsaWQgZm9yIGFsbCB0eXBlcwogICogQGJ1c19yZXNldDogICAgIFZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9CVVNfUkVTRVQKICAqIEByZXNwb25zZTogICAgICBWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0gJUZXX0NERVZfRVZFTlRfUkVTUE9OU0UKICAqIEByZXF1ZXN0OiAgICAgICBWYWxpZCBpZiBAY29tbW9uLnR5cGUgPT0gJUZXX0NERVZfRVZFTlRfUkVRVUVTVAogICogQGlzb19pbnRlcnJ1cHQ6IFZhbGlkIGlmIEBjb21tb24udHlwZSA9PSAlRldfQ0RFVl9FVkVOVF9JU09fSU5URVJSVVBUCisgKiBAaXNvX3Jlc291cmNlOiAgVmFsaWQgaWYgQGNvbW1vbi50eXBlID09CisgKgkJCQklRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVEIG9yCisgKgkJCQklRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQKICAqCiAgKiBDb252ZW5pZW5jZSB1bmlvbiBmb3IgdXNlcnNwYWNlIHVzZS4gIEV2ZW50cyBjb3VsZCBiZSByZWFkKDIpIGludG8gYW4KICAqIGFwcHJvcHJpYXRlbHkgYWxpZ25lZCBjaGFyIGJ1ZmZlciBhbmQgdGhlbiBjYXN0IHRvIHRoaXMgdW5pb24gZm9yIGZ1cnRoZXIKQEAgLTE2MywzMyArMjE0LDQ3IEBACiAgKiBub3QgZml0IHdpbGwgYmUgZGlzY2FyZGVkIHNvIHRoYXQgdGhlIG5leHQgcmVhZCgyKSB3aWxsIHJldHVybiBhIG5ldyBldmVudC4KICAqLwogdW5pb24gZndfY2Rldl9ldmVudCB7Ci0Jc3RydWN0IGZ3X2NkZXZfZXZlbnRfY29tbW9uIGNvbW1vbjsKLQlzdHJ1Y3QgZndfY2Rldl9ldmVudF9idXNfcmVzZXQgYnVzX3Jlc2V0OwotCXN0cnVjdCBmd19jZGV2X2V2ZW50X3Jlc3BvbnNlIHJlc3BvbnNlOwotCXN0cnVjdCBmd19jZGV2X2V2ZW50X3JlcXVlc3QgcmVxdWVzdDsKLQlzdHJ1Y3QgZndfY2Rldl9ldmVudF9pc29faW50ZXJydXB0IGlzb19pbnRlcnJ1cHQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfY29tbW9uCQljb21tb247CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfYnVzX3Jlc2V0CQlidXNfcmVzZXQ7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfcmVzcG9uc2UJCXJlc3BvbnNlOworCXN0cnVjdCBmd19jZGV2X2V2ZW50X3JlcXVlc3QJCXJlcXVlc3Q7CisJc3RydWN0IGZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdAlpc29faW50ZXJydXB0OworCXN0cnVjdCBmd19jZGV2X2V2ZW50X2lzb19yZXNvdXJjZQlpc29fcmVzb3VyY2U7CiB9OwogCi0jZGVmaW5lIEZXX0NERVZfSU9DX0dFVF9JTkZPCQlfSU9XUignIycsIDB4MDAsIHN0cnVjdCBmd19jZGV2X2dldF9pbmZvKQotI2RlZmluZSBGV19DREVWX0lPQ19TRU5EX1JFUVVFU1QJX0lPVygnIycsIDB4MDEsIHN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCkKLSNkZWZpbmUgRldfQ0RFVl9JT0NfQUxMT0NBVEUJCV9JT1dSKCcjJywgMHgwMiwgc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGUpCi0jZGVmaW5lIEZXX0NERVZfSU9DX0RFQUxMT0NBVEUJCV9JT1coJyMnLCAweDAzLCBzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlKQotI2RlZmluZSBGV19DREVWX0lPQ19TRU5EX1JFU1BPTlNFCV9JT1coJyMnLCAweDA0LCBzdHJ1Y3QgZndfY2Rldl9zZW5kX3Jlc3BvbnNlKQotI2RlZmluZSBGV19DREVWX0lPQ19JTklUSUFURV9CVVNfUkVTRVQJX0lPVygnIycsIDB4MDUsIHN0cnVjdCBmd19jZGV2X2luaXRpYXRlX2J1c19yZXNldCkKLSNkZWZpbmUgRldfQ0RFVl9JT0NfQUREX0RFU0NSSVBUT1IJX0lPV1IoJyMnLCAweDA2LCBzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvcikKLSNkZWZpbmUgRldfQ0RFVl9JT0NfUkVNT1ZFX0RFU0NSSVBUT1IJX0lPVygnIycsIDB4MDcsIHN0cnVjdCBmd19jZGV2X3JlbW92ZV9kZXNjcmlwdG9yKQorLyogYXZhaWxhYmxlIHNpbmNlIGtlcm5lbCB2ZXJzaW9uIDIuNi4yMiAqLworI2RlZmluZSBGV19DREVWX0lPQ19HRVRfSU5GTyAgICAgICAgICAgX0lPV1IoJyMnLCAweDAwLCBzdHJ1Y3QgZndfY2Rldl9nZXRfaW5mbykKKyNkZWZpbmUgRldfQ0RFVl9JT0NfU0VORF9SRVFVRVNUICAgICAgICBfSU9XKCcjJywgMHgwMSwgc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0KQorI2RlZmluZSBGV19DREVWX0lPQ19BTExPQ0FURSAgICAgICAgICAgX0lPV1IoJyMnLCAweDAyLCBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfREVBTExPQ0FURSAgICAgICAgICBfSU9XKCcjJywgMHgwMywgc3RydWN0IGZ3X2NkZXZfZGVhbGxvY2F0ZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfU0VORF9SRVNQT05TRSAgICAgICBfSU9XKCcjJywgMHgwNCwgc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXNwb25zZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfSU5JVElBVEVfQlVTX1JFU0VUICBfSU9XKCcjJywgMHgwNSwgc3RydWN0IGZ3X2NkZXZfaW5pdGlhdGVfYnVzX3Jlc2V0KQorI2RlZmluZSBGV19DREVWX0lPQ19BRERfREVTQ1JJUFRPUiAgICAgX0lPV1IoJyMnLCAweDA2LCBzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvcikKKyNkZWZpbmUgRldfQ0RFVl9JT0NfUkVNT1ZFX0RFU0NSSVBUT1IgICBfSU9XKCcjJywgMHgwNywgc3RydWN0IGZ3X2NkZXZfcmVtb3ZlX2Rlc2NyaXB0b3IpCisjZGVmaW5lIEZXX0NERVZfSU9DX0NSRUFURV9JU09fQ09OVEVYVCBfSU9XUignIycsIDB4MDgsIHN0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dCkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfUVVFVUVfSVNPICAgICAgICAgIF9JT1dSKCcjJywgMHgwOSwgc3RydWN0IGZ3X2NkZXZfcXVldWVfaXNvKQorI2RlZmluZSBGV19DREVWX0lPQ19TVEFSVF9JU08gICAgICAgICAgIF9JT1coJyMnLCAweDBhLCBzdHJ1Y3QgZndfY2Rldl9zdGFydF9pc28pCisjZGVmaW5lIEZXX0NERVZfSU9DX1NUT1BfSVNPICAgICAgICAgICAgX0lPVygnIycsIDB4MGIsIHN0cnVjdCBmd19jZGV2X3N0b3BfaXNvKQogCi0jZGVmaW5lIEZXX0NERVZfSU9DX0NSRUFURV9JU09fQ09OVEVYVAlfSU9XUignIycsIDB4MDgsIHN0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dCkKLSNkZWZpbmUgRldfQ0RFVl9JT0NfUVVFVUVfSVNPCQlfSU9XUignIycsIDB4MDksIHN0cnVjdCBmd19jZGV2X3F1ZXVlX2lzbykKLSNkZWZpbmUgRldfQ0RFVl9JT0NfU1RBUlRfSVNPCQlfSU9XKCcjJywgMHgwYSwgc3RydWN0IGZ3X2NkZXZfc3RhcnRfaXNvKQotI2RlZmluZSBGV19DREVWX0lPQ19TVE9QX0lTTwkJX0lPVygnIycsIDB4MGIsIHN0cnVjdCBmd19jZGV2X3N0b3BfaXNvKQotI2RlZmluZSBGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIJX0lPUignIycsIDB4MGMsIHN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lcikKKy8qIGF2YWlsYWJsZSBzaW5jZSBrZXJuZWwgdmVyc2lvbiAyLjYuMjQgKi8KKyNkZWZpbmUgRldfQ0RFVl9JT0NfR0VUX0NZQ0xFX1RJTUVSICAgICBfSU9SKCcjJywgMHgwYywgc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyKQogCi0vKiBGV19DREVWX1ZFUlNJT04gSGlzdG9yeQotICoKLSAqIDEJRmViIDE4LCAyMDA3OiAgSW5pdGlhbCB2ZXJzaW9uLgorLyogYXZhaWxhYmxlIHNpbmNlIGtlcm5lbCB2ZXJzaW9uIDIuNi4zMCAqLworI2RlZmluZSBGV19DREVWX0lPQ19BTExPQ0FURV9JU09fUkVTT1VSQ0UgICAgICAgX0lPV1IoJyMnLCAweDBkLCBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UpCisjZGVmaW5lIEZXX0NERVZfSU9DX0RFQUxMT0NBVEVfSVNPX1JFU09VUkNFICAgICAgX0lPVygnIycsIDB4MGUsIHN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUpCisjZGVmaW5lIEZXX0NERVZfSU9DX0FMTE9DQVRFX0lTT19SRVNPVVJDRV9PTkNFICAgX0lPVygnIycsIDB4MGYsIHN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSkKKyNkZWZpbmUgRldfQ0RFVl9JT0NfREVBTExPQ0FURV9JU09fUkVTT1VSQ0VfT05DRSBfSU9XKCcjJywgMHgxMCwgc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlKQorI2RlZmluZSBGV19DREVWX0lPQ19HRVRfU1BFRUQgICAgICAgICAgICAgICAgICAgICBfSU8oJyMnLCAweDExKSAvKiByZXR1cm5zIHNwZWVkIGNvZGUgKi8KKyNkZWZpbmUgRldfQ0RFVl9JT0NfU0VORF9CUk9BRENBU1RfUkVRVUVTVCAgICAgICBfSU9XKCcjJywgMHgxMiwgc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0KQorI2RlZmluZSBGV19DREVWX0lPQ19TRU5EX1NUUkVBTV9QQUNLRVQgICAgICAgICAgIF9JT1coJyMnLCAweDEzLCBzdHJ1Y3QgZndfY2Rldl9zZW5kX3N0cmVhbV9wYWNrZXQpCisKKy8qCisgKiBGV19DREVWX1ZFUlNJT04gSGlzdG9yeQorICogIDEgICgyLjYuMjIpICAtIGluaXRpYWwgdmVyc2lvbgorICogIDIgICgyLjYuMzApICAtIGNoYW5nZWQgJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdC5oZWFkZXIgaWYKKyAqICAgICAgICAgICAgICAgICAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUgaXMgOCBvciBtb3JlCiAgKi8KLSNkZWZpbmUgRldfQ0RFVl9WRVJTSU9OCQkxCisjZGVmaW5lIEZXX0NERVZfVkVSU0lPTiAyCiAKIC8qKgogICogc3RydWN0IGZ3X2NkZXZfZ2V0X2luZm8gLSBHZW5lcmFsIHB1cnBvc2UgaW5mb3JtYXRpb24gaW9jdGwKQEAgLTIwMSw3ICsyNjYsNyBAQAogICoJCWNhc2UsIEByb21fbGVuZ3RoIGlzIHVwZGF0ZWQgd2l0aCB0aGUgYWN0dWFsIGxlbmd0aCBvZiB0aGUKICAqCQljb25maWd1cmF0aW9uIFJPTS4KICAqIEByb206CUlmIG5vbi16ZXJvLCBhZGRyZXNzIG9mIGEgYnVmZmVyIHRvIGJlIGZpbGxlZCBieSBhIGNvcHkgb2YgdGhlCi0gKgkJbG9jYWwgbm9kZSdzIGNvbmZpZ3VyYXRpb24gUk9NCisgKgkJZGV2aWNlJ3MgY29uZmlndXJhdGlvbiBST00KICAqIEBidXNfcmVzZXQ6CUlmIG5vbi16ZXJvLCBhZGRyZXNzIG9mIGEgYnVmZmVyIHRvIGJlIGZpbGxlZCBieSBhCiAgKgkJJnN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCB3aXRoIHRoZSBjdXJyZW50IHN0YXRlCiAgKgkJb2YgdGhlIGJ1cy4gIFRoaXMgZG9lcyBub3QgY2F1c2UgYSBidXMgcmVzZXQgdG8gaGFwcGVuLgpAQCAtMjI5LDcgKzI5NCw3IEBACiAgKiBTZW5kIGEgcmVxdWVzdCB0byB0aGUgZGV2aWNlLiAgVGhpcyBpb2N0bCBpbXBsZW1lbnRzIGFsbCBvdXRnb2luZyByZXF1ZXN0cy4KICAqIEJvdGggcXVhZGxldCBhbmQgYmxvY2sgcmVxdWVzdCBzcGVjaWZ5IHRoZSBwYXlsb2FkIGFzIGEgcG9pbnRlciB0byB0aGUgZGF0YQogICogaW4gdGhlIEBkYXRhIGZpZWxkLiAgT25jZSB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGVzLCB0aGUga2VybmVsIHdyaXRlcyBhbgotICogJmZ3X2NkZXZfZXZlbnRfcmVxdWVzdCBldmVudCBiYWNrLiAgVGhlIEBjbG9zdXJlIGZpZWxkIGlzIHBhc3NlZCBiYWNrIHRvCisgKiAmZndfY2Rldl9ldmVudF9yZXNwb25zZSBldmVudCBiYWNrLiAgVGhlIEBjbG9zdXJlIGZpZWxkIGlzIHBhc3NlZCBiYWNrIHRvCiAgKiB1c2VyIHNwYWNlIGluIHRoZSByZXNwb25zZSBldmVudC4KICAqLwogc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0IHsKQEAgLTI4NCw5ICszNDksOSBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlIC0gRnJlZSBhbiBhZGRyZXNzIHJhbmdlIGFsbG9jYXRpb24KLSAqIEBoYW5kbGU6CUhhbmRsZSB0byB0aGUgYWRkcmVzcyByYW5nZSwgYXMgcmV0dXJuZWQgYnkgdGhlIGtlcm5lbCB3aGVuIHRoZQotICoJCXJhbmdlIHdhcyBhbGxvY2F0ZWQKKyAqIHN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUgLSBGcmVlIGEgQ1NSIGFkZHJlc3MgcmFuZ2Ugb3IgaXNvY2hyb25vdXMgcmVzb3VyY2UKKyAqIEBoYW5kbGU6CUhhbmRsZSB0byB0aGUgYWRkcmVzcyByYW5nZSBvciBpc28gcmVzb3VyY2UsIGFzIHJldHVybmVkIGJ5IHRoZQorICoJCWtlcm5lbCB3aGVuIHRoZSByYW5nZSBvciByZXNvdXJjZSB3YXMgYWxsb2NhdGVkCiAgKi8KIHN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUgewogCV9fdTMyIGhhbmRsZTsKQEAgLTMyOSw2ICszOTQsOSBAQAogICogSWYgc3VjY2Vzc2Z1bCwgdGhlIGtlcm5lbCBhZGRzIHRoZSBkZXNjcmlwdG9yIGFuZCB3cml0ZXMgYmFjayBhIGhhbmRsZSB0byB0aGUKICAqIGtlcm5lbC1zaWRlIG9iamVjdCB0byBiZSB1c2VkIGZvciBsYXRlciByZW1vdmFsIG9mIHRoZSBkZXNjcmlwdG9yIGJsb2NrIGFuZAogICogaW1tZWRpYXRlIGtleS4KKyAqCisgKiBUaGlzIGlvY3RsIGFmZmVjdHMgdGhlIGNvbmZpZ3VyYXRpb24gUk9NcyBvZiBhbGwgbG9jYWwgbm9kZXMuCisgKiBUaGUgaW9jdGwgb25seSBzdWNjZWVkcyBvbiBkZXZpY2UgZmlsZXMgd2hpY2ggcmVwcmVzZW50IGEgbG9jYWwgbm9kZS4KICAqLwogc3RydWN0IGZ3X2NkZXZfYWRkX2Rlc2NyaXB0b3IgewogCV9fdTMyIGltbWVkaWF0ZTsKQEAgLTM0NCw3ICs0MTIsNyBAQAogICoJCWRlc2NyaXB0b3Igd2FzIGFkZGVkCiAgKgogICogUmVtb3ZlIGEgZGVzY3JpcHRvciBibG9jayBhbmQgYWNjb21wYW55aW5nIGltbWVkaWF0ZSBrZXkgZnJvbSB0aGUgbG9jYWwKLSAqIG5vZGUncyBjb25maWd1cmF0aW9uIFJPTS4KKyAqIG5vZGVzJyBjb25maWd1cmF0aW9uIFJPTXMuCiAgKi8KIHN0cnVjdCBmd19jZGV2X3JlbW92ZV9kZXNjcmlwdG9yIHsKIAlfX3UzMiBoYW5kbGU7CkBAIC0zNzAsNiArNDM4LDkgQEAKICAqCiAgKiBJZiBhIGNvbnRleHQgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLCB0aGUga2VybmVsIHdyaXRlcyBiYWNrIGEgaGFuZGxlIHRvIHRoZQogICogY29udGV4dCwgd2hpY2ggbXVzdCBiZSBwYXNzZWQgaW4gZm9yIHN1YnNlcXVlbnQgb3BlcmF0aW9ucyBvbiB0aGF0IGNvbnRleHQuCisgKgorICogTm90ZSB0aGF0IHRoZSBlZmZlY3Qgb2YgYSBAaGVhZGVyX3NpemUgPiA0IGRlcGVuZHMgb24KKyAqICZmd19jZGV2X2dldF9pbmZvLnZlcnNpb24sIGFzIGRvY3VtZW50ZWQgYXQgJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdC4KICAqLwogc3RydWN0IGZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0IHsKIAlfX3UzMiB0eXBlOwpAQCAtNDczLDEwICs1NDQsOTEgQEAKICAqIFRoZSAlRldfQ0RFVl9JT0NfR0VUX0NZQ0xFX1RJTUVSIGlvY3RsIHJlYWRzIHRoZSBpc29jaHJvbm91cyBjeWNsZSB0aW1lcgogICogYW5kIGFsc28gdGhlIHN5c3RlbSBjbG9jay4gIFRoaXMgYWxsb3dzIHRvIGV4cHJlc3MgdGhlIHJlY2VpdmUgdGltZSBvZiBhbgogICogaXNvY2hyb25vdXMgcGFja2V0IGFzIGEgc3lzdGVtIHRpbWUgd2l0aCBtaWNyb3NlY29uZCBhY2N1cmFjeS4KKyAqCisgKiBAY3ljbGVfdGltZXIgY29uc2lzdHMgb2YgNyBiaXRzIGN5Y2xlU2Vjb25kcywgMTMgYml0cyBjeWNsZUNvdW50LCBhbmQKKyAqIDEyIGJpdHMgY3ljbGVPZmZzZXQsIGluIGhvc3QgYnl0ZSBvcmRlci4KICAqLwogc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyIHsKIAlfX3U2NCBsb2NhbF90aW1lOwogCV9fdTMyIGN5Y2xlX3RpbWVyOwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgLSAoRGUpYWxsb2NhdGUgYSBjaGFubmVsIG9yIGJhbmR3aWR0aAorICogQGNsb3N1cmU6CVBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiBjb3JyZXBvbmRpbmcgaXNvIHJlc291cmNlIGV2ZW50cworICogQGNoYW5uZWxzOglJc29jaHJvbm91cyBjaGFubmVscyBvZiB3aGljaCBvbmUgaXMgdG8gYmUgKGRlKWFsbG9jYXRlZAorICogQGJhbmR3aWR0aDoJSXNvY2hyb25vdXMgYmFuZHdpZHRoIHVuaXRzIHRvIGJlIChkZSlhbGxvY2F0ZWQKKyAqIEBoYW5kbGU6CUhhbmRsZSB0byB0aGUgYWxsb2NhdGlvbiwgd3JpdHRlbiBieSB0aGUga2VybmVsIChvbmx5IHZhbGlkIGluCisgKgkJY2FzZSBvZiAlRldfQ0RFVl9JT0NfQUxMT0NBVEVfSVNPX1JFU09VUkNFIGlvY3RscykKKyAqCisgKiBUaGUgJUZXX0NERVZfSU9DX0FMTE9DQVRFX0lTT19SRVNPVVJDRSBpb2N0bCBpbml0aWF0ZXMgYWxsb2NhdGlvbiBvZiBhbgorICogaXNvY2hyb25vdXMgY2hhbm5lbCBhbmQvb3Igb2YgaXNvY2hyb25vdXMgYmFuZHdpZHRoIGF0IHRoZSBpc29jaHJvbm91cworICogcmVzb3VyY2UgbWFuYWdlciAoSVJNKS4gIE9ubHkgb25lIG9mIHRoZSBjaGFubmVscyBzcGVjaWZpZWQgaW4gQGNoYW5uZWxzIGlzCisgKiBhbGxvY2F0ZWQuICBBbiAlRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVEIGlzIHNlbnQgYWZ0ZXIKKyAqIGNvbW11bmljYXRpb24gd2l0aCB0aGUgSVJNLCBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBpbiB0aGUgZXZlbnQgZGF0YS4KKyAqIFRoZSBrZXJuZWwgd2lsbCBhdXRvbWF0aWNhbGx5IHJlYWxsb2NhdGUgdGhlIHJlc291cmNlcyBhZnRlciBidXMgcmVzZXRzLgorICogU2hvdWxkIGEgcmVhbGxvY2F0aW9uIGZhaWwsIGFuICVGV19DREVWX0VWRU5UX0lTT19SRVNPVVJDRV9ERUFMTE9DQVRFRCBldmVudAorICogd2lsbCBiZSBzZW50LiAgVGhlIGtlcm5lbCB3aWxsIGFsc28gYXV0b21hdGljYWxseSBkZWFsbG9jYXRlIHRoZSByZXNvdXJjZXMKKyAqIHdoZW4gdGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjbG9zZWQuCisgKgorICogVGhlICVGV19DREVWX0lPQ19ERUFMTE9DQVRFX0lTT19SRVNPVVJDRSBpb2N0bCBjYW4gYmUgdXNlZCB0byBpbml0aWF0ZQorICogZGVhbGxvY2F0aW9uIG9mIHJlc291cmNlcyB3aGljaCB3ZXJlIGFsbG9jYXRlZCBhcyBkZXNjcmliZWQgYWJvdmUuCisgKiBBbiAlRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQgZXZlbnQgY29uY2x1ZGVzIHRoaXMgb3BlcmF0aW9uLgorICoKKyAqIFRoZSAlRldfQ0RFVl9JT0NfQUxMT0NBVEVfSVNPX1JFU09VUkNFX09OQ0UgaW9jdGwgaXMgYSB2YXJpYW50IG9mIGFsbG9jYXRpb24KKyAqIHdpdGhvdXQgYXV0b21hdGljIHJlLSBvciBkZWFsbG9jYXRpb24uCisgKiBBbiAlRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfQUxMT0NBVEVEIGV2ZW50IGNvbmNsdWRlcyB0aGlzIG9wZXJhdGlvbiwKKyAqIGluZGljYXRpbmcgc3VjY2VzcyBvciBmYWlsdXJlIGluIGl0cyBkYXRhLgorICoKKyAqIFRoZSAlRldfQ0RFVl9JT0NfREVBTExPQ0FURV9JU09fUkVTT1VSQ0VfT05DRSBpb2N0bCB3b3JrcyBsaWtlCisgKiAlRldfQ0RFVl9JT0NfQUxMT0NBVEVfSVNPX1JFU09VUkNFX09OQ0UgZXhjZXB0IHRoYXQgcmVzb3VyY2VzIGFyZSBmcmVlZAorICogaW5zdGVhZCBvZiBhbGxvY2F0ZWQuCisgKiBBbiAlRldfQ0RFVl9FVkVOVF9JU09fUkVTT1VSQ0VfREVBTExPQ0FURUQgZXZlbnQgY29uY2x1ZGVzIHRoaXMgb3BlcmF0aW9uLgorICoKKyAqIFRvIHN1bW1hcml6ZSwgJUZXX0NERVZfSU9DX0RFQUxMT0NBVEVfSVNPX1JFU09VUkNFIGFsbG9jYXRlcyBpc28gcmVzb3VyY2VzCisgKiBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBmZCBvciBoYW5kbGUuCisgKiBJbiBjb250cmFzdCwgJUZXX0NERVZfSU9DX0FMTE9DQVRFX0lTT19SRVNPVVJDRV9PTkNFIGFsbG9jYXRlcyBpc28gcmVzb3VyY2VzCisgKiBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgYnVzIGdlbmVyYXRpb24uCisgKgorICogQGNoYW5uZWxzIGlzIGEgaG9zdC1lbmRpYW4gYml0ZmllbGQgd2l0aCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisgKiByZXByZXNlbnRpbmcgY2hhbm5lbCAwIGFuZCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgcmVwcmVzZW50aW5nIGNoYW5uZWwgNjM6CisgKiAxVUxMIDw8IGMgZm9yIGVhY2ggY2hhbm5lbCBjIHRoYXQgaXMgYSBjYW5kaWRhdGUgZm9yIChkZSlhbGxvY2F0aW9uLgorICoKKyAqIEBiYW5kd2lkdGggaXMgZXhwcmVzc2VkIGluIGJhbmR3aWR0aCBhbGxvY2F0aW9uIHVuaXRzLCBpLmUuIHRoZSB0aW1lIHRvIHNlbmQKKyAqIG9uZSBxdWFkbGV0IG9mIGRhdGEgKHBheWxvYWQgb3IgaGVhZGVyIGRhdGEpIGF0IHNwZWVkIFMxNjAwLgorICovCitzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgeworCV9fdTY0IGNsb3N1cmU7CisJX191NjQgY2hhbm5lbHM7CisJX191MzIgYmFuZHdpZHRoOworCV9fdTMyIGhhbmRsZTsKK307CisKKy8qKgorICogc3RydWN0IGZ3X2NkZXZfc2VuZF9zdHJlYW1fcGFja2V0IC0gc2VuZCBhbiBhc3luY2hyb25vdXMgc3RyZWFtIHBhY2tldAorICogQGxlbmd0aDoJTGVuZ3RoIG9mIG91dGdvaW5nIHBheWxvYWQsIGluIGJ5dGVzCisgKiBAdGFnOglEYXRhIGZvcm1hdCB0YWcKKyAqIEBjaGFubmVsOglJc29jaHJvbm91cyBjaGFubmVsIHRvIHRyYW5zbWl0IHRvCisgKiBAc3k6CQlTeW5jaHJvbml6YXRpb24gY29kZQorICogQGNsb3N1cmU6CVBhc3NlZCBiYWNrIHRvIHVzZXJzcGFjZSBpbiB0aGUgcmVzcG9uc2UgZXZlbnQKKyAqIEBkYXRhOglVc2Vyc3BhY2UgcG9pbnRlciB0byBwYXlsb2FkCisgKiBAZ2VuZXJhdGlvbjoJVGhlIGJ1cyBnZW5lcmF0aW9uIHdoZXJlIHBhY2tldCBpcyB2YWxpZAorICogQHNwZWVkOglTcGVlZCB0byB0cmFuc21pdCBhdAorICoKKyAqIFRoZSAlRldfQ0RFVl9JT0NfU0VORF9TVFJFQU1fUEFDS0VUIGlvY3RsIHNlbmRzIGFuIGFzeW5jaHJvbm91cyBzdHJlYW0gcGFja2V0CisgKiB0byBldmVyeSBkZXZpY2Ugd2hpY2ggaXMgbGlzdGVuaW5nIHRvIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4gIFRoZSBrZXJuZWwKKyAqIHdyaXRlcyBhbiAmZndfY2Rldl9ldmVudF9yZXNwb25zZSBldmVudCB3aGljaCBpbmRpY2F0ZXMgc3VjY2VzcyBvciBmYWlsdXJlIG9mCisgKiB0aGUgdHJhbnNtaXNzaW9uLgorICovCitzdHJ1Y3QgZndfY2Rldl9zZW5kX3N0cmVhbV9wYWNrZXQgeworCV9fdTMyIGxlbmd0aDsKKwlfX3UzMiB0YWc7CisJX191MzIgY2hhbm5lbDsKKwlfX3UzMiBzeTsKKwlfX3U2NCBjbG9zdXJlOworCV9fdTY0IGRhdGE7CisJX191MzIgZ2VuZXJhdGlvbjsKKwlfX3UzMiBzcGVlZDsKK307CisKICNlbmRpZiAvKiBfTElOVVhfRklSRVdJUkVfQ0RFVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggOTI3MzRjMC4uNDI0MzZhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMTQxLDYgKzE0MSw3IEBACiAjZGVmaW5lIE1TX1JFTEFUSU1FCSgxPDwyMSkJLyogVXBkYXRlIGF0aW1lIHJlbGF0aXZlIHRvIG10aW1lL2N0aW1lLiAqLwogI2RlZmluZSBNU19LRVJOTU9VTlQJKDE8PDIyKSAvKiB0aGlzIGlzIGEga2Vybl9tb3VudCBjYWxsICovCiAjZGVmaW5lIE1TX0lfVkVSU0lPTgkoMTw8MjMpIC8qIFVwZGF0ZSBpbm9kZSBJX3ZlcnNpb24gZmllbGQgKi8KKyNkZWZpbmUgTVNfU1RSSUNUQVRJTUUJKDE8PDI0KSAvKiBBbHdheXMgcGVyZm9ybSBhdGltZSB1cGRhdGVzICovCiAjZGVmaW5lIE1TX0FDVElWRQkoMTw8MzApCiAjZGVmaW5lIE1TX05PVVNFUgkoMTw8MzEpCiAKQEAgLTg0OCw2ICs4NDksNyBAQAogI2RlZmluZSBmX2RlbnRyeQlmX3BhdGguZGVudHJ5CiAjZGVmaW5lIGZfdmZzbW50CWZfcGF0aC5tbnQKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSpmX29wOworCXNwaW5sb2NrX3QJCWZfbG9jazsgIC8qIGZfZXBfbGlua3MsIGZfZmxhZ3MgKi8KIAlhdG9taWNfbG9uZ190CQlmX2NvdW50OwogCXVuc2lnbmVkIGludCAJCWZfZmxhZ3M7CiAJZm1vZGVfdAkJCWZfbW9kZTsKQEAgLTg2Niw3ICs4NjgsNiBAQAogI2lmZGVmIENPTkZJR19FUE9MTAogCS8qIFVzZWQgYnkgZnMvZXZlbnRwb2xsLmMgdG8gbGluayBhbGwgdGhlIGhvb2tzIHRvIHRoaXMgZmlsZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJZl9lcF9saW5rczsKLQlzcGlubG9ja190CQlmX2VwX2xvY2s7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19FUE9MTCAqLwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSpmX21hcHBpbmc7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQKQEAgLTEwNjMsMzQgKzEwNjQsMTQ3IEBACiBleHRlcm4gaW50IGxvY2tfbWF5X3JlYWQoc3RydWN0IGlub2RlICosIGxvZmZfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CiBleHRlcm4gaW50IGxvY2tfbWF5X3dyaXRlKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3Qgc3RhcnQsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogI2Vsc2UgLyogIUNPTkZJR19GSUxFX0xPQ0tJTkcgKi8KLSNkZWZpbmUgZmNudGxfZ2V0bGsoYSwgYikgKHsgLUVJTlZBTDsgfSkKLSNkZWZpbmUgZmNudGxfc2V0bGsoYSwgYiwgYywgZCkgKHsgLUVBQ0NFUzsgfSkKK3N0YXRpYyBpbmxpbmUgaW50IGZjbnRsX2dldGxrKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmxvY2sgX191c2VyICp1c2VyKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBmY250bF9zZXRsayh1bnNpZ25lZCBpbnQgZmQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgc3RydWN0IGZsb2NrIF9fdXNlciAqdXNlcikKK3sKKwlyZXR1cm4gLUVBQ0NFUzsKK30KKwogI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKLSNkZWZpbmUgZmNudGxfZ2V0bGs2NChhLCBiKSAoeyAtRUlOVkFMOyB9KQotI2RlZmluZSBmY250bF9zZXRsazY0KGEsIGIsIGMsIGQpICh7IC1FQUNDRVM7IH0pCitzdGF0aWMgaW5saW5lIGludCBmY250bF9nZXRsazY0KHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmxvY2s2NCBfX3VzZXIgKnVzZXIpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZjbnRsX3NldGxrNjQodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQl1bnNpZ25lZCBpbnQgY21kLCBzdHJ1Y3QgZmxvY2s2NCBfX3VzZXIgKnVzZXIpCit7CisJcmV0dXJuIC1FQUNDRVM7Cit9CiAjZW5kaWYKLSNkZWZpbmUgZmNudGxfc2V0bGVhc2UoYSwgYiwgYykgKHsgMDsgfSkKLSNkZWZpbmUgZmNudGxfZ2V0bGVhc2UoYSkgKHsgMDsgfSkKLSNkZWZpbmUgbG9ja3NfaW5pdF9sb2NrKGEpICh7IH0pCi0jZGVmaW5lIF9fbG9ja3NfY29weV9sb2NrKGEsIGIpICh7IH0pCi0jZGVmaW5lIGxvY2tzX2NvcHlfbG9jayhhLCBiKSAoeyB9KQotI2RlZmluZSBsb2Nrc19yZW1vdmVfcG9zaXgoYSwgYikgKHsgfSkKLSNkZWZpbmUgbG9ja3NfcmVtb3ZlX2Zsb2NrKGEpICh7IH0pCi0jZGVmaW5lIHBvc2l4X3Rlc3RfbG9jayhhLCBiKSAoeyAwOyB9KQotI2RlZmluZSBwb3NpeF9sb2NrX2ZpbGUoYSwgYiwgYykgKHsgLUVOT0xDSzsgfSkKLSNkZWZpbmUgcG9zaXhfbG9ja19maWxlX3dhaXQoYSwgYikgKHsgLUVOT0xDSzsgfSkKLSNkZWZpbmUgcG9zaXhfdW5ibG9ja19sb2NrKGEsIGIpICgtRU5PRU5UKQotI2RlZmluZSB2ZnNfdGVzdF9sb2NrKGEsIGIpICh7IDA7IH0pCi0jZGVmaW5lIHZmc19sb2NrX2ZpbGUoYSwgYiwgYywgZCkgKC1FTk9MQ0spCi0jZGVmaW5lIHZmc19jYW5jZWxfbG9jayhhLCBiKSAoeyAwOyB9KQotI2RlZmluZSBmbG9ja19sb2NrX2ZpbGVfd2FpdChhLCBiKSAoeyAtRU5PTENLOyB9KQotI2RlZmluZSBfX2JyZWFrX2xlYXNlKGEsIGIpICh7IDA7IH0pCi0jZGVmaW5lIGxlYXNlX2dldF9tdGltZShhLCBiKSAoeyB9KQotI2RlZmluZSBnZW5lcmljX3NldGxlYXNlKGEsIGIsIGMpICh7IC1FSU5WQUw7IH0pCi0jZGVmaW5lIHZmc19zZXRsZWFzZShhLCBiLCBjKSAoeyAtRUlOVkFMOyB9KQotI2RlZmluZSBsZWFzZV9tb2RpZnkoYSwgYikgKHsgLUVJTlZBTDsgfSkKLSNkZWZpbmUgbG9ja19tYXlfcmVhZChhLCBiLCBjKSAoeyAxOyB9KQotI2RlZmluZSBsb2NrX21heV93cml0ZShhLCBiLCBjKSAoeyAxOyB9KQorc3RhdGljIGlubGluZSBpbnQgZmNudGxfc2V0bGVhc2UodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgbG9uZyBhcmcpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZjbnRsX2dldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja3NfaW5pdF9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fbG9ja3NfY29weV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKm5ldywgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja3NfY29weV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKm5ldywgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9ja3NfcmVtb3ZlX3Bvc2l4KHN0cnVjdCBmaWxlICpmaWxwLCBmbF9vd25lcl90IG93bmVyKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxvY2tzX3JlbW92ZV9mbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3NpeF90ZXN0X2xvY2soc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG9zaXhfbG9ja19maWxlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCwKKwkJCQkgIHN0cnVjdCBmaWxlX2xvY2sgKmNvbmZsb2NrKQoreworCXJldHVybiAtRU5PTENLOworfQorCitzdGF0aWMgaW5saW5lIGludCBwb3NpeF9sb2NrX2ZpbGVfd2FpdChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuIC1FTk9MQ0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvc2l4X3VuYmxvY2tfbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQkgICAgIHN0cnVjdCBmaWxlX2xvY2sgKndhaXRlcikKK3sKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmZzX3Rlc3RfbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZmc19sb2NrX2ZpbGUoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCQkJc3RydWN0IGZpbGVfbG9jayAqZmwsIHN0cnVjdCBmaWxlX2xvY2sgKmNvbmYpCit7CisJcmV0dXJuIC1FTk9MQ0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZmc19jYW5jZWxfbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZsb2NrX2xvY2tfZmlsZV93YWl0KHN0cnVjdCBmaWxlICpmaWxwLAorCQkJCSAgICAgICBzdHJ1Y3QgZmlsZV9sb2NrICpyZXF1ZXN0KQoreworCXJldHVybiAtRU5PTENLOworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2JyZWFrX2xlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBtb2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbGVhc2VfZ2V0X210aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdlbmVyaWNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGxvbmcgYXJnLAorCQkJCSAgICBzdHJ1Y3QgZmlsZV9sb2NrICoqZmxwKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGxvbmcgYXJnLAorCQkJICAgICAgIHN0cnVjdCBmaWxlX2xvY2sgKipsZWFzZSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbGVhc2VfbW9kaWZ5KHN0cnVjdCBmaWxlX2xvY2sgKipiZWZvcmUsIGludCBhcmcpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvY2tfbWF5X3JlYWQoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHN0YXJ0LAorCQkJCXVuc2lnbmVkIGxvbmcgbGVuKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2NrX21heV93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc3RhcnQsCisJCQkJIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXJldHVybiAxOworfQorCiAjZW5kaWYgLyogIUNPTkZJR19GSUxFX0xPQ0tJTkcgKi8KIAogCkBAIC0xNjA2LDcgKzE3MjAsNyBAQAogZXh0ZXJuIGludCBnZXRfc2JfcHNldWRvKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICosIGNoYXIgKiwKIAljb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyAqb3BzLCB1bnNpZ25lZCBsb25nLAogCXN0cnVjdCB2ZnNtb3VudCAqbW50KTsKLWV4dGVybiBpbnQgc2ltcGxlX3NldF9tbnQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworZXh0ZXJuIHZvaWQgc2ltcGxlX3NldF9tbnQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogaW50IF9fcHV0X3N1cGVyX2FuZF9uZWVkX3Jlc3RhcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiAKIC8qIEFsYXMsIG5vIGFsaWFzZXMuIFRvbyBtdWNoIGhhc3NsZSB3aXRoIGJyaW5naW5nIG1vZHVsZS5oIGV2ZXJ5d2hlcmUgKi8KQEAgLTE2ODcsMTMgKzE4MDEsNDQgQEAKIAlyZXR1cm4gMDsKIH0KICNlbHNlIC8qICFDT05GSUdfRklMRV9MT0NLSU5HICovCi0jZGVmaW5lIGxvY2tzX21hbmRhdG9yeV9sb2NrZWQoYSkgKHsgMDsgfSkKLSNkZWZpbmUgbG9ja3NfbWFuZGF0b3J5X2FyZWEoYSwgYiwgYywgZCwgZSkgKHsgMDsgfSkKLSNkZWZpbmUgX19tYW5kYXRvcnlfbG9jayhhKSAoeyAwOyB9KQotI2RlZmluZSBtYW5kYXRvcnlfbG9jayhhKSAoeyAwOyB9KQotI2RlZmluZSBsb2Nrc192ZXJpZnlfbG9ja2VkKGEpICh7IDA7IH0pCi0jZGVmaW5lIGxvY2tzX3ZlcmlmeV90cnVuY2F0ZShhLCBiLCBjKSAoeyAwOyB9KQotI2RlZmluZSBicmVha19sZWFzZShhLCBiKSAoeyAwOyB9KQorc3RhdGljIGlubGluZSBpbnQgbG9ja3NfbWFuZGF0b3J5X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2Nrc19tYW5kYXRvcnlfYXJlYShpbnQgcncsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICAgICAgIHN0cnVjdCBmaWxlICpmaWxwLCBsb2ZmX3Qgb2Zmc2V0LAorCQkJCSAgICAgICBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fbWFuZGF0b3J5X2xvY2soc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWFuZGF0b3J5X2xvY2soc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9ja3NfdmVyaWZ5X2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBsb2Nrc192ZXJpZnlfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkJCXNpemVfdCBzaXplKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBicmVha19sZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIENPTkZJR19GSUxFX0xPQ0tJTkcgKi8KIAogLyogZnMvb3Blbi5jICovCkBAIC0xNzMwLDYgKzE4NzUsMTMgQEAKIGV4dGVybiB2b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiB2b2lkIGJkcHV0KHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiBleHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqb3Blbl9ieV9kZXZudW0oZGV2X3QsIGZtb2RlX3QpOworZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKik7CitleHRlcm4gaW50IHN5bmNfYmxvY2tkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7CitleHRlcm4gc3RydWN0IHN1cGVyX2Jsb2NrICpmcmVlemVfYmRldihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworZXh0ZXJuIGludCB0aGF3X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitleHRlcm4gaW50IGZzeW5jX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKK2V4dGVybiBpbnQgZnN5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICopOworZXh0ZXJuIGludCBmc3luY19ub19zdXBlcihzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBiZF9mb3JnZXQoc3RydWN0IGlub2RlICppbm9kZSkge30KICNlbmRpZgpAQCAtMTg4MSw3ICsyMDMzLDYgQEAKIAlpZiAoZmlsZSkKIAkJYXRvbWljX2luYygmZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50KTsKIH0KLWV4dGVybiBpbnQgZG9fcGlwZShpbnQgKik7CiBleHRlcm4gaW50IGRvX3BpcGVfZmxhZ3MoaW50ICosIGludCk7CiBleHRlcm4gc3RydWN0IGZpbGUgKmNyZWF0ZV9yZWFkX3BpcGUoc3RydWN0IGZpbGUgKmYsIGludCBmbGFncyk7CiBleHRlcm4gc3RydWN0IGZpbGUgKmNyZWF0ZV93cml0ZV9waXBlKGludCBmbGFncyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oIGIvaW5jbHVkZS9saW51eC9nZW5fc3RhdHMuaAppbmRleCAxM2Y0ZTc0Li4wZmZhNDFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbl9zdGF0cy5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuX3N0YXRzLmgKQEAgLTIyLDcgKzIyLDcgQEAKIHsKIAlfX3U2NAlieXRlczsKIAlfX3UzMglwYWNrZXRzOwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioKICAqIHN0cnVjdCBnbmV0X3N0YXRzX3JhdGVfZXN0IC0gcmF0ZSBlc3RpbWF0b3IKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaCBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaAppbmRleCAxNjk0OGVhLi42MzRjNTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCkBAIC0zMzMsMTEgKzMzMywxMCBAQAogCQlwYXJ0X3RvX2Rpc2socGFydCktPnBhcnQwLmluX2ZsaWdodC0tOwogfQogCi0vKiBkcml2ZXJzL2Jsb2NrL2xsX3J3X2Jsay5jICovCisvKiBibG9jay9ibGstY29yZS5jICovCiBleHRlcm4gdm9pZCBwYXJ0X3JvdW5kX3N0YXRzKGludCBjcHUsIHN0cnVjdCBoZF9zdHJ1Y3QgKnBhcnQpOwogCi0vKiBkcml2ZXJzL2Jsb2NrL2dlbmhkLmMgKi8KLWV4dGVybiBpbnQgZ2V0X2Jsa2Rldl9saXN0KGNoYXIgKiwgaW50KTsKKy8qIGJsb2NrL2dlbmhkLmMgKi8KIGV4dGVybiB2b2lkIGFkZF9kaXNrKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIGV4dGVybiB2b2lkIGRlbF9nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpncCk7CiBleHRlcm4gdm9pZCB1bmxpbmtfZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZ3ApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZGxjLmggYi9pbmNsdWRlL2xpbnV4L2hkbGMuaAppbmRleCBmZDQ3YTE1Li42YTZlNzAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hkbGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hkbGMuaApAQCAtMzgsNiArMzgsNyBAQAogCWludCAoKmlvY3RsKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcik7CiAJX19iZTE2ICgqdHlwZV90cmFucykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJaW50ICgqbmV0aWZfcngpKHN0cnVjdCBza19idWZmICpza2IpOworCWludCAoKnhtaXQpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKIAlzdHJ1Y3QgaGRsY19wcm90byAqbmV4dDsgLyogbmV4dCBwcm90b2NvbCBpbiB0aGUgbGlzdCAqLwogfTsKQEAgLTEwMiw2ICsxMDMsMTAgQEAKIGludCBoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAvKiBNdXN0IGJlIGNhbGxlZCBieSBoYXJkd2FyZSBkcml2ZXIgd2hlbiBIRExDIGRldmljZSBpcyBiZWluZyBjbG9zZWQgKi8KIHZvaWQgaGRsY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKy8qIE1heSBiZSB1c2VkIGJ5IGhhcmR3YXJlIGRyaXZlciAqLworaW50IGhkbGNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSk7CisvKiBNdXN0IGJlIHBvaW50ZWQgdG8gYnkgaHcgZHJpdmVyJ3MgZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RhcnRfeG1pdCAqLworaW50IGhkbGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogaW50IGF0dGFjaF9oZGxjX3Byb3RvY29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBoZGxjX3Byb3RvICpwcm90bywKIAkJCSBzaXplX3Qgc2l6ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hkbGNkcnYuaCBiL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oCmluZGV4IGJmNjMwMmYuLmMwMTBiNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oCisrKyBiL2luY2x1ZGUvbGludXgvaGRsY2Rydi5oCkBAIC0yMTUsNyArMjE1LDcgQEAKIAogCXN0cnVjdCBoZGxjZHJ2X2hkbGN0eCB7CiAJCXN0cnVjdCBoZGxjZHJ2X2hkbGNidWZmZXIgaGJ1ZjsKLQkJbG9uZyBpbl9oZGxjX3R4OworCQl1bnNpZ25lZCBsb25nIGluX2hkbGNfdHg7CiAJCS8qCiAJCSAqIDAgPSBzZW5kIGZsYWdzCiAJCSAqIDEgPSBzZW5kIHR4dGFpbCAoZmxhZ3MpCkBAIC0yNDEsNyArMjQxLDYgQEAKIAlzdHJ1Y3QgaGRsY2Rydl9iaXRidWZmZXIgYml0YnVmX2hkbGM7CiAjZW5kaWYgLyogSERMQ0RSVl9ERUJVRyAqLwogCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJaW50IHB0dF9rZXllZDsKIAogCS8qIHF1ZXVlZCBza2IgZm9yIHRyYW5zbWlzc2lvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pYm10ci5oIGIvaW5jbHVkZS9saW51eC9pYm10ci5oCmluZGV4IDFjN2EwZGQuLjA2Njk1YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWJtdHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2libXRyLmgKQEAgLTIwNyw3ICsyMDcsNyBAQAogCXVuc2lnbmVkIHNob3J0IGV4c2FwX3N0YXRpb25faWQ7CiAJdW5zaWduZWQgc2hvcnQgZ2xvYmFsX2ludF9lbmFibGU7CiAJc3RydWN0IHNrX2J1ZmYgKmN1cnJlbnRfc2tiOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHRyX3N0YXRzOworCiAJdW5zaWduZWQgY2hhciBhdXRvX3NwZWVkc2F2ZTsKIAlvcGVuX3N0YXRlCQkJb3Blbl9zdGF0dXMsIHNhcF9zdGF0dXM7CiAJZW51bSB7TUFOVUFMLCBBVVRPTUFUSUN9CW9wZW5fbW9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWRlLmggYi9pbmNsdWRlL2xpbnV4L2lkZS5oCmluZGV4IDI1MDg3YWUuLjg1NGViYTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZGUuaApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9tdXRleC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1JJUykgfHwgZGVmaW5lZChDT05GSUdfRlJWKQorI2lmIGRlZmluZWQoQ09ORklHX0NSSVMpIHx8IGRlZmluZWQoQ09ORklHX0ZSVikgfHwgZGVmaW5lZChDT05GSUdfTU4xMDMwMCkKICMgZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMAogI2Vsc2UKICMgZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMQpAQCAtMTkzLDI0ICsxOTMsOCBAQAogCWh3LT5pb19wb3J0cy5jdGxfYWRkciA9IGN0bF9hZGRyOwogfQogCi0vKiBmb3IgSURFIFBDSSBjb250cm9sbGVycyBpbiBsZWdhY3kgbW9kZSwgdGVtcG9yYXJ5ICovCi1zdGF0aWMgaW5saW5lIGludCBfX2lkZV9kZWZhdWx0X2lycSh1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0Jc3dpdGNoIChiYXNlKSB7Ci0jaWZkZWYgQ09ORklHX0lBNjQKLQljYXNlIDB4MWYwOiByZXR1cm4gaXNhX2lycV90b192ZWN0b3IoMTQpOwotCWNhc2UgMHgxNzA6IHJldHVybiBpc2FfaXJxX3RvX3ZlY3RvcigxNSk7Ci0jZWxzZQotCWNhc2UgMHgxZjA6IHJldHVybiAxNDsKLQljYXNlIDB4MTcwOiByZXR1cm4gMTU7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19BUk0pIHx8IGRlZmluZWQoQ09ORklHX0ZSVikgfHwgZGVmaW5lZChDT05GSUdfTTY4SykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX01JUFMpIHx8IGRlZmluZWQoQ09ORklHX01OMTAzMDApIHx8IGRlZmluZWQoQ09ORklHX1BBUklTQykgXAotICAgIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDNjQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJNKSB8fCBkZWZpbmVkKENPTkZJR19NNjhLKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDKQogI2luY2x1ZGUgPGFzbS9pZGUuaD4KICNlbHNlCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KQEAgLTg2Niw3ICs4NTAsNyBAQAogCWlkZV9od2lmX3QJKnBvcnRzW01BWF9IT1NUX1BPUlRTICsgMV07CiAJdW5zaWduZWQgaW50CW5fcG9ydHM7CiAJc3RydWN0IGRldmljZQkqZGV2WzJdOwotCXVuc2lnbmVkIGludAkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CisJaW50CQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CiAJaXJxX2hhbmRsZXJfdAlpcnFfaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nCWhvc3RfZmxhZ3M7CiAJdm9pZAkJKmhvc3RfcHJpdjsKQEAgLTExNDYsMTEgKzExMzAsMTQgQEAKIGV4dGVybiBpbnQgaWRlX3ZsYl9jbGs7CiBleHRlcm4gaW50IGlkZV9wY2lfY2xrOwogCi1leHRlcm4gaW50IGlkZV9lbmRfcmVxdWVzdCAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgdXB0b2RhdGUsIGludCBucnNlY3MpOwotaW50IGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCSAgICAgaW50IHVwdG9kYXRlLCBpbnQgbnJfc2VjdG9ycyk7CitpbnQgaWRlX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICosIGludCwgaW50KTsKK2ludCBpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50LCBpbnQpOwordm9pZCBpZGVfa2lsbF9ycShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIAotZXh0ZXJuIHZvaWQgaWRlX3NldF9oYW5kbGVyIChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV9oYW5kbGVyX3QgKmhhbmRsZXIsIHVuc2lnbmVkIGludCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSk7Cit2b2lkIF9faWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICosIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LAorCQkgICAgICAgaWRlX2V4cGlyeV90ICopOwordm9pZCBpZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCisJCSAgICAgaWRlX2V4cGlyeV90ICopOwogCiB2b2lkIGlkZV9leGVjdXRlX2NvbW1hbmQoaWRlX2RyaXZlX3QgKiwgdTgsIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LAogCQkJIGlkZV9leHBpcnlfdCAqKTsKQEAgLTExNjksMTMgKzExNTYsMTQgQEAKIAogaW50IGlkZV93YWl0X3N0YXQoaWRlX3N0YXJ0c3RvcF90ICosIGlkZV9kcml2ZV90ICosIHU4LCB1OCwgdW5zaWduZWQgbG9uZyk7CiAKK2lkZV9zdGFydHN0b3BfdCBpZGVfZG9fcGFya191bnBhcmsoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX2RldnNldChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKKwogZXh0ZXJuIGlkZV9zdGFydHN0b3BfdCBpZGVfZG9fcmVzZXQgKGlkZV9kcml2ZV90ICopOwogCiBleHRlcm4gaW50IGlkZV9kZXZzZXRfZXhlY3V0ZShpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywgaW50IGFyZyk7CiAKLWV4dGVybiB2b2lkIGlkZV9kb19kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci0KIGV4dGVybiB2b2lkIGlkZV9lbmRfZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7CiAKIHZvaWQgaWRlX3RmX2R1bXAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgaWRlX3Rhc2tmaWxlICopOwpAQCAtMTIwMCwxMCArMTE4OCw2IEBACiB1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqKTsKIHZvaWQgaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKGlkZV9kcml2ZV90ICosIHUxNiAqLCB1OCAqKTsKIAotZXh0ZXJuIGludCBkcml2ZV9pc19yZWFkeShpZGVfZHJpdmVfdCAqKTsKLQotdm9pZCBpZGVfcGt0Y21kX3RmX2xvYWQoaWRlX2RyaXZlX3QgKiwgdTMyLCB1MTYsIHU4KTsKLQogaW50IGlkZV9jaGVja19hdGFwaV9kZXZpY2UoaWRlX2RyaXZlX3QgKiwgY29uc3QgY2hhciAqKTsKIAogdm9pZCBpZGVfaW5pdF9wYyhzdHJ1Y3QgaWRlX2F0YXBpX3BjICopOwpAQCAtMTI1MSw2ICsxMjM1LDggQEAKIAogaW50IGlkZV90YXNrZmlsZV9pb2N0bChpZGVfZHJpdmVfdCAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCitpbnQgaWRlX2Rldl9yZWFkX2lkKGlkZV9kcml2ZV90ICosIHU4LCB1MTYgKik7CisKIGV4dGVybiBpbnQgaWRlX2RyaXZlaWRfdXBkYXRlKGlkZV9kcml2ZV90ICopOwogZXh0ZXJuIGludCBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGlkZV9kcml2ZV90ICosIHU4KTsKIGV4dGVybiB1OCBlaWdodHlfbmludHlfdGhyZWUgKGlkZV9kcml2ZV90ICopOwpAQCAtMTI4MCw3ICsxMjY2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBpZGVfcGNpX3NldHVwX3BvcnRzKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICosIGludCwKK3ZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqLAogCQkJIGh3X3JlZ3NfdCAqLCBod19yZWdzX3QgKiopOwogdm9pZCBpZGVfc2V0dXBfcGNpX25vaXNlKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICopOwogCkBAIC0xMzQ5LDEwICsxMzM1LDYgQEAKIAlJREVfSEZMQUdfRVJST1JfU1RPUFNfRklGTwk9ICgxIDw8IDE5KSwKIAkvKiBzZXJpYWxpemUgcG9ydHMgKi8KIAlJREVfSEZMQUdfU0VSSUFMSVpFCQk9ICgxIDw8IDIwKSwKLQkvKiB1c2UgbGVnYWN5IElSUXMgKi8KLQlJREVfSEZMQUdfTEVHQUNZX0lSUVMJCT0gKDEgPDwgMjEpLAotCS8qIGZvcmNlIHVzZSBvZiBsZWdhY3kgSVJRcyAqLwotCUlERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUwk9ICgxIDw8IDIyKSwKIAkvKiBob3N0IGlzIFRSTTI5MCAqLwogCUlERV9IRkxBR19UUk0yOTAJCT0gKDEgPDwgMjMpLAogCS8qIHVzZSAzMi1iaXQgSS9PIG9wcyAqLwpAQCAtMTM4MCw3ICsxMzYyLDcgQEAKIAogc3RydWN0IGlkZV9wb3J0X2luZm8gewogCWNoYXIJCQkqbmFtZTsKLQl1bnNpZ25lZCBpbnQJCSgqaW5pdF9jaGlwc2V0KShzdHJ1Y3QgcGNpX2RldiAqKTsKKwlpbnQJCQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CiAJdm9pZAkJCSgqaW5pdF9pb3BzKShpZGVfaHdpZl90ICopOwogCXZvaWQgICAgICAgICAgICAgICAgICAgICgqaW5pdF9od2lmKShpZGVfaHdpZl90ICopOwogCWludAkJCSgqaW5pdF9kbWEpKGlkZV9od2lmX3QgKiwKQEAgLTE0NzEsNiArMTQ1Myw3IEBACiAKIHZvaWQgaWRlX2RtYV9sb3N0X2lycShpZGVfZHJpdmVfdCAqKTsKIHZvaWQgaWRlX2RtYV90aW1lb3V0KGlkZV9kcml2ZV90ICopOworaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqLCBpbnQpOwogCiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgaWRlX2lkX2RtYV9idWcoaWRlX2RyaXZlX3QgKmRyaXZlKSB7IHJldHVybiAwOyB9CkBAIC0xNDgyLDIxICsxNDY1LDI0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2RtYV92ZXJib3NlKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9zZXRfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMTsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9jaGVja19kbWFfY3JjKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KK3N0YXRpYyBpbmxpbmUgaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfdGltZW91dF9yZXRyeShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBlcnJvcikgeyByZXR1cm4gaWRlX3N0b3BwZWQ7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BICovCiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVBQ1BJCitpbnQgaWRlX2FjcGlfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgaWRlX2FjcGlfZXhlY190ZnMoaWRlX2RyaXZlX3QgKmRyaXZlKTsKIGV4dGVybiB2b2lkIGlkZV9hY3BpX2dldF90aW1pbmcoaWRlX2h3aWZfdCAqaHdpZik7CiBleHRlcm4gdm9pZCBpZGVfYWNwaV9wdXNoX3RpbWluZyhpZGVfaHdpZl90ICpod2lmKTsKLWV4dGVybiB2b2lkIGlkZV9hY3BpX2luaXQoaWRlX2h3aWZfdCAqaHdpZik7Cit2b2lkIGlkZV9hY3BpX2luaXRfcG9ydChpZGVfaHdpZl90ICopOwogdm9pZCBpZGVfYWNwaV9wb3J0X2luaXRfZGV2aWNlcyhpZGVfaHdpZl90ICopOwogZXh0ZXJuIHZvaWQgaWRlX2FjcGlfc2V0X3N0YXRlKGlkZV9od2lmX3QgKmh3aWYsIGludCBvbik7CiAjZWxzZQorc3RhdGljIGlubGluZSBpbnQgaWRlX2FjcGlfaW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBpZGVfYWNwaV9leGVjX3RmcyhpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9nZXRfdGltaW5nKGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfcHVzaF90aW1pbmcoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9pbml0KGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfaW5pdF9wb3J0KGlkZV9od2lmX3QgKmh3aWYpIHsgOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2FjcGlfcG9ydF9pbml0X2RldmljZXMoaWRlX2h3aWZfdCAqaHdpZikgeyA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpZGVfYWNwaV9zZXRfc3RhdGUoaWRlX2h3aWZfdCAqaHdpZiwgaW50IG9uKSB7fQogI2VuZGlmCkBAIC0xNTMwLDkgKzE1MTYsNyBAQAogCWh3aWYtPmh3aWZfZGF0YSA9IGRhdGE7CiB9CiAKLWNvbnN0IGNoYXIgKmlkZV94ZmVyX3ZlcmJvc2UodTggbW9kZSk7CiBleHRlcm4gdm9pZCBpZGVfdG9nZ2xlX2JvdW5jZShpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBvbik7Ci1leHRlcm4gaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcmF0ZSk7CiAKIHU2NCBpZGVfZ2V0X2xiYV9hZGRyKHN0cnVjdCBpZGVfdGFza2ZpbGUgKiwgaW50KTsKIHU4IGlkZV9kdW1wX3N0YXR1cyhpZGVfZHJpdmVfdCAqLCBjb25zdCBjaGFyICosIHU4KTsKQEAgLTE1NzEsMTQgKzE1NTUsMTggQEAKIAkJICAgICAgc3RydWN0IGlkZV90aW1pbmcgKiwgdW5zaWduZWQgaW50KTsKIGludCBpZGVfdGltaW5nX2NvbXB1dGUoaWRlX2RyaXZlX3QgKiwgdTgsIHN0cnVjdCBpZGVfdGltaW5nICosIGludCwgaW50KTsKIAorI2lmZGVmIENPTkZJR19JREVfWEZFUl9NT0RFCiBpbnQgaWRlX3NjYW5fcGlvX2JsYWNrbGlzdChjaGFyICopOwotCitjb25zdCBjaGFyICppZGVfeGZlcl92ZXJib3NlKHU4KTsKIHU4IGlkZV9nZXRfYmVzdF9waW9fbW9kZShpZGVfZHJpdmVfdCAqLCB1OCwgdTgpOwotCiBpbnQgaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqLCB1OCk7CiBpbnQgaWRlX3NldF9kbWFfbW9kZShpZGVfZHJpdmVfdCAqLCB1OCk7Ci0KIHZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKiwgdTgpOworaW50IGlkZV9zZXRfeGZlcl9yYXRlKGlkZV9kcml2ZV90ICosIHU4KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3NldF9waW8oaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBwaW8pIHsgOyB9CitzdGF0aWMgaW5saW5lIGludCBpZGVfc2V0X3hmZXJfcmF0ZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHJhdGUpIHsgcmV0dXJuIC0xOyB9CisjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIGlkZV9zZXRfbWF4X3BpbyhpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CkBAIC0xNjExLDYgKzE1OTksMTAgQEAKICNkZWZpbmUgaWRlX3BvcnRfZm9yX2VhY2hfZGV2KGksIGRldiwgcG9ydCkgXAogCWZvciAoKGkpID0gMDsgKChkZXYpID0gKHBvcnQpLT5kZXZpY2VzW2ldKSB8fCAoaSkgPCBNQVhfRFJJVkVTOyAoaSkrKykKIAorI2RlZmluZSBpZGVfcG9ydF9mb3JfZWFjaF9wcmVzZW50X2RldihpLCBkZXYsIHBvcnQpIFwKKwlmb3IgKChpKSA9IDA7ICgoZGV2KSA9IChwb3J0KS0+ZGV2aWNlc1tpXSkgfHwgKGkpIDwgTUFYX0RSSVZFUzsgKGkpKyspIFwKKwkJaWYgKChkZXYpLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfUFJFU0VOVCkKKwogI2RlZmluZSBpZGVfaG9zdF9mb3JfZWFjaF9wb3J0KGksIHBvcnQsIGhvc3QpIFwKIAlmb3IgKChpKSA9IDA7ICgocG9ydCkgPSAoaG9zdCktPnBvcnRzW2ldKSB8fCAoaSkgPCBNQVhfSE9TVF9QT1JUUzsgKGkpKyspCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCmluZGV4IGM0ZTZjYTEuLjRiNTAxYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaApAQCAtMTgsNiArMTgsMjIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAorLyoKKyAqIERTIGJpdCB1c2FnZQorICoKKyAqIFRBID0gdHJhbnNtaXR0ZXIgYWRkcmVzcworICogUkEgPSByZWNlaXZlciBhZGRyZXNzCisgKiBEQSA9IGRlc3RpbmF0aW9uIGFkZHJlc3MKKyAqIFNBID0gc291cmNlIGFkZHJlc3MKKyAqCisgKiBUb0RTICAgIEZyb21EUyAgQTEoUkEpICBBMihUQSkgIEEzICAgICAgQTQgICAgICBVc2UKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMCAgICAgICAwICAgICAgIERBICAgICAgU0EgICAgICBCU1NJRCAgIC0gICAgICAgSUJTUy9ETFMKKyAqICAwICAgICAgIDEgICAgICAgREEgICAgICBCU1NJRCAgIFNBICAgICAgLSAgICAgICBBUCAtPiBTVEEKKyAqICAxICAgICAgIDAgICAgICAgQlNTSUQgICBTQSAgICAgIERBICAgICAgLSAgICAgICBBUCA8LSBTVEEKKyAqICAxICAgICAgIDEgICAgICAgUkEgICAgICBUQSAgICAgIERBICAgICAgU0EgICAgICB1bnNwZWNpZmllZCAoV0RTKQorICovCisKICNkZWZpbmUgRkNTX0xFTiA0CiAKICNkZWZpbmUgSUVFRTgwMjExX0ZDVExfVkVSUwkJMHgwMDAzCkBAIC01MjcsNiArNTQzLDggQEAKIAl1OCB2aXJ0dWFsX21hcFswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisjZGVmaW5lIFdMQU5fU0FfUVVFUllfVFJfSURfTEVOIDE2CisKIHN0cnVjdCBpZWVlODAyMTFfbWdtdCB7CiAJX19sZTE2IGZyYW1lX2NvbnRyb2w7CiAJX19sZTE2IGR1cmF0aW9uOwpAQCAtNjQ2LDYgKzY2NCwxMCBAQAogCQkJCQl1OCBhY3Rpb25fY29kZTsKIAkJCQkJdTggdmFyaWFibGVbMF07CiAJCQkJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBtZXNoX2FjdGlvbjsKKwkJCQlzdHJ1Y3QgeworCQkJCQl1OCBhY3Rpb247CisJCQkJCXU4IHRyYW5zX2lkW1dMQU5fU0FfUVVFUllfVFJfSURfTEVOXTsKKwkJCQl9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBzYV9xdWVyeTsKIAkJCX0gdTsKIAkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYWN0aW9uOwogCX0gdTsKQEAgLTY1NSw2ICs2NzcsMTUgQEAKICNkZWZpbmUgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYWN0aW9uLnUpCiAKIAorLyogTWFuYWdlbWVudCBNSUMgaW5mb3JtYXRpb24gZWxlbWVudCAoSUVFRSA4MDIuMTF3KSAqLworc3RydWN0IGllZWU4MDIxMV9tbWllIHsKKwl1OCBlbGVtZW50X2lkOworCXU4IGxlbmd0aDsKKwlfX2xlMTYga2V5X2lkOworCXU4IHNlcXVlbmNlX251bWJlcls2XTsKKwl1OCBtaWNbOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyogQ29udHJvbCBmcmFtZXMgKi8KIHN0cnVjdCBpZWVlODAyMTFfcnRzIHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKQEAgLTgzNiw2ICs4NjcsNyBAQAogLyogQXV0aGVudGljYXRpb24gYWxnb3JpdGhtcyAqLwogI2RlZmluZSBXTEFOX0FVVEhfT1BFTiAwCiAjZGVmaW5lIFdMQU5fQVVUSF9TSEFSRURfS0VZIDEKKyNkZWZpbmUgV0xBTl9BVVRIX0ZUIDIKICNkZWZpbmUgV0xBTl9BVVRIX0xFQVAgMTI4CiAKICNkZWZpbmUgV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4gMTI4CkBAIC04OTksNiArOTMxLDkgQEAKIAkvKiA4MDIuMTFnICovCiAJV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PU0hPUlRUSU1FID0gMjUsCiAJV0xBTl9TVEFUVVNfQVNTT0NfREVOSUVEX05PRFNTU09GRE0gPSAyNiwKKwkvKiA4MDIuMTF3ICovCisJV0xBTl9TVEFUVVNfQVNTT0NfUkVKRUNURURfVEVNUE9SQVJJTFkgPSAzMCwKKwlXTEFOX1NUQVRVU19ST0JVU1RfTUdNVF9GUkFNRV9QT0xJQ1lfVklPTEFUSU9OID0gMzEsCiAJLyogODAyLjExaSAqLwogCVdMQU5fU1RBVFVTX0lOVkFMSURfSUUgPSA0MCwKIAlXTEFOX1NUQVRVU19JTlZBTElEX0dST1VQX0NJUEhFUiA9IDQxLApAQCAtMTAxOCw2ICsxMDUzLDggQEAKIAlXTEFOX0VJRF9IVF9JTkZPUk1BVElPTiA9IDYxLAogCS8qIDgwMi4xMWkgKi8KIAlXTEFOX0VJRF9SU04gPSA0OCwKKwlXTEFOX0VJRF9USU1FT1VUX0lOVEVSVkFMID0gNTYsCisJV0xBTl9FSURfTU1JRSA9IDc2IC8qIDgwMi4xMXcgKi8sCiAJV0xBTl9FSURfV1BBID0gMjIxLAogCVdMQU5fRUlEX0dFTkVSSUMgPSAyMjEsCiAJV0xBTl9FSURfVkVORE9SX1NQRUNJRklDID0gMjIxLApAQCAtMTAzMCw2ICsxMDY3LDggQEAKIAlXTEFOX0NBVEVHT1JZX1FPUyA9IDEsCiAJV0xBTl9DQVRFR09SWV9ETFMgPSAyLAogCVdMQU5fQ0FURUdPUllfQkFDSyA9IDMsCisJV0xBTl9DQVRFR09SWV9QVUJMSUMgPSA0LAorCVdMQU5fQ0FURUdPUllfU0FfUVVFUlkgPSA4LAogCVdMQU5fQ0FURUdPUllfV01NID0gMTcsCiB9OwogCkBAIC0xMTA0LDYgKzExNDMsMTIgQEAKIAl9OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK2VudW0gaWVlZTgwMjExX3RpbWVvdXRfaW50ZXJ2YWxfdHlwZSB7CisJV0xBTl9USU1FT1VUX1JFQVNTT0NfREVBRExJTkUgPSAxIC8qIDgwMi4xMXIgKi8sCisJV0xBTl9USU1FT1VUX0tFWV9MSUZFVElNRSA9IDIgLyogODAyLjExciAqLywKKwlXTEFOX1RJTUVPVVRfQVNTT0NfQ09NRUJBQ0sgPSAzIC8qIDgwMi4xMXcgKi8sCit9OworCiAvKiBCQUNLIGFjdGlvbiBjb2RlICovCiBlbnVtIGllZWU4MDIxMV9iYWNrX2FjdGlvbmNvZGUgewogCVdMQU5fQUNUSU9OX0FEREJBX1JFUSA9IDAsCkBAIC0xMTE4LDYgKzExNjMsMTMgQEAKIAlXTEFOX0JBQ0tfVElNRVIgPSAyLAogfTsKIAorLyogU0EgUXVlcnkgYWN0aW9uICovCitlbnVtIGllZWU4MDIxMV9zYV9xdWVyeV9hY3Rpb24geworCVdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFUVVFU1QgPSAwLAorCVdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFU1BPTlNFID0gMSwKK307CisKKwogLyogQS1NU0RVIDgwMi4xMW4gKi8KICNkZWZpbmUgSUVFRTgwMjExX1FPU19DT05UUk9MX0FfTVNEVV9QUkVTRU5UIDB4MDA4MAogCkBAIC0xMTI4LDYgKzExODAsNyBAQAogLyogcmVzZXJ2ZWQ6IAkJCQkweDAwMEZBQzAzICovCiAjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVAJCTB4MDAwRkFDMDQKICNkZWZpbmUgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0CTB4MDAwRkFDMDUKKyNkZWZpbmUgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMJMHgwMDBGQUMwNgogCiAjZGVmaW5lIFdMQU5fTUFYX0tFWV9MRU4JCTMyCiAKQEAgLTExODUsNCArMTIzOCwxNDkgQEAKIAkJcmV0dXJuIGhkci0+YWRkcjE7CiB9CiAKKy8qKgorICogaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lIC0gY2hlY2sgaWYgZnJhbWUgaXMgYSByb2J1c3QgbWFuYWdlbWVudCBmcmFtZQorICogQGhkcjogdGhlIGZyYW1lIChidWZmZXIgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IHRoZSBmaXJzdCBvY3RldCBvZiBwYXlsb2FkKQorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCit7CisJaWYgKGllZWU4MDIxMV9pc19kaXNhc3NvYyhoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJICAgIGllZWU4MDIxMV9pc19kZWF1dGgoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoaWVlZTgwMjExX2lzX2FjdGlvbihoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCXU4ICpjYXRlZ29yeTsKKworCQkvKgorCQkgKiBBY3Rpb24gZnJhbWVzLCBleGNsdWRpbmcgUHVibGljIEFjdGlvbiBmcmFtZXMsIGFyZSBSb2J1c3QKKwkJICogTWFuYWdlbWVudCBGcmFtZXMuIEhvd2V2ZXIsIGlmIHdlIGFyZSBsb29raW5nIGF0IGEgUHJvdGVjdGVkCisJCSAqIGZyYW1lLCBza2lwIHRoZSBjaGVjayBzaW5jZSB0aGUgZGF0YSBtYXkgYmUgZW5jcnlwdGVkIGFuZAorCQkgKiB0aGUgZnJhbWUgaGFzIGFscmVhZHkgYmVlbiBmb3VuZCB0byBiZSBhIFJvYnVzdCBNYW5hZ2VtZW50CisJCSAqIEZyYW1lIChieSB0aGUgb3RoZXIgZW5kKS4KKwkJICovCisJCWlmIChpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQkJcmV0dXJuIHRydWU7CisJCWNhdGVnb3J5ID0gKCh1OCAqKSBoZHIpICsgMjQ7CisJCXJldHVybiAqY2F0ZWdvcnkgIT0gV0xBTl9DQVRFR09SWV9QVUJMSUM7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIGllZWU4MDIxMV9maHNzX2NoYW5fdG9fZnJlcSAtIGdldCBjaGFubmVsIGZyZXF1ZW5jeQorICogQGNoYW5uZWw6IHRoZSBGSFNTIGNoYW5uZWwKKyAqCisgKiBDb252ZXJ0IElFRUU4MDIuMTEgRkhTUyBjaGFubmVsIHRvIGZyZXF1ZW5jeSAoTUh6KQorICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxNC42CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9maHNzX2NoYW5fdG9fZnJlcShpbnQgY2hhbm5lbCkKK3sKKwlpZiAoKGNoYW5uZWwgPiAxKSAmJiAoY2hhbm5lbCA8IDk2KSkKKwkJcmV0dXJuIGNoYW5uZWwgKyAyNDAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGllZWU4MDIxMV9mcmVxX3RvX2Zoc3NfY2hhbiAtIGdldCBjaGFubmVsCisgKiBAZnJlcTogdGhlIGNoYW5uZWxzIGZyZXF1ZW5jeQorICoKKyAqIENvbnZlcnQgZnJlcXVlbmN5IChNSHopIHRvIElFRUU4MDIuMTEgRkhTUyBjaGFubmVsCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE0LjYKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2ZyZXFfdG9fZmhzc19jaGFuKGludCBmcmVxKQoreworCWlmICgoZnJlcSA+IDI0MDEpICYmIChmcmVxIDwgMjQ5NikpCisJCXJldHVybiBmcmVxIC0gMjQwMDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZHNzc19jaGFuX3RvX2ZyZXEgLSBnZXQgY2hhbm5lbCBjZW50ZXIgZnJlcXVlbmN5CisgKiBAY2hhbm5lbDogdGhlIERTU1MgY2hhbm5lbAorICoKKyAqIENvbnZlcnQgSUVFRTgwMi4xMSBEU1NTIGNoYW5uZWwgdG8gdGhlIGNlbnRlciBmcmVxdWVuY3kgKE1IeikuCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE1LjYKKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2Rzc3NfY2hhbl90b19mcmVxKGludCBjaGFubmVsKQoreworCWlmICgoY2hhbm5lbCA+IDApICYmIChjaGFubmVsIDwgMTQpKQorCQlyZXR1cm4gMjQwNyArIChjaGFubmVsICogNSk7CisJZWxzZSBpZiAoY2hhbm5lbCA9PSAxNCkKKwkJcmV0dXJuIDI0ODQ7CisJZWxzZQorCQlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuIC0gZ2V0IGNoYW5uZWwKKyAqIEBmcmVxOiB0aGUgZnJlcXVlbmN5CisgKgorICogQ29udmVydCBmcmVxdWVuY3kgKE1IeikgdG8gSUVFRTgwMi4xMSBEU1NTIGNoYW5uZWwKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTUuNgorICoKKyAqIFRoaXMgcm91dGluZSBzZWxlY3RzIHRoZSBjaGFubmVsIHdpdGggdGhlIGNsb3Nlc3QgY2VudGVyIGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2ZyZXFfdG9fZHNzc19jaGFuKGludCBmcmVxKQoreworCWlmICgoZnJlcSA+PSAyNDEwKSAmJiAoZnJlcSA8IDI0NzUpKQorCQlyZXR1cm4gKGZyZXEgLSAyNDA1KSAvIDU7CisJZWxzZSBpZiAoKGZyZXEgPj0gMjQ4MikgJiYgKGZyZXEgPCAyNDg3KSkKKwkJcmV0dXJuIDE0OworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCisvKiBDb252ZXJ0IElFRUU4MDIuMTEgSFIgRFNTUyBjaGFubmVsIHRvIGZyZXF1ZW5jeSAoTUh6KSBhbmQgYmFjaworICogUmVmIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxOC40LjYuMgorICoKKyAqIFRoZSBjaGFubmVscyBhbmQgZnJlcXVlbmNpZXMgYXJlIHRoZSBzYW1lIGFzIHRob3NlIGRlZmluZWQgZm9yIERTU1MKKyAqLworI2RlZmluZSBpZWVlODAyMTFfaHJfY2hhbl90b19mcmVxKGNoYW4pIGllZWU4MDIxMV9kc3NzX2NoYW5fdG9fZnJlcShjaGFuKQorI2RlZmluZSBpZWVlODAyMTFfZnJlcV90b19ocl9jaGFuKGZyZXEpIGllZWU4MDIxMV9mcmVxX3RvX2Rzc3NfY2hhbihmcmVxKQorCisvKiBDb252ZXJ0IElFRUU4MDIuMTEgRVJQIGNoYW5uZWwgdG8gZnJlcXVlbmN5IChNSHopIGFuZCBiYWNrCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE5LjQuMgorICovCisjZGVmaW5lIGllZWU4MDIxMV9lcnBfY2hhbl90b19mcmVxKGNoYW4pIGllZWU4MDIxMV9ocl9jaGFuX3RvX2ZyZXEoY2hhbikKKyNkZWZpbmUgaWVlZTgwMjExX2ZyZXFfdG9fZXJwX2NoYW4oZnJlcSkgaWVlZTgwMjExX2ZyZXFfdG9faHJfY2hhbihmcmVxKQorCisvKioKKyAqIGllZWU4MDIxMV9vZmRtX2NoYW5fdG9fZnJlcSAtIGdldCBjaGFubmVsIGNlbnRlciBmcmVxdWVuY3kKKyAqIEBzX2ZyZXE6IHN0YXJ0aW5nIGZyZXF1ZW5jeSA9PSAoZG90Q2hhbm5lbFN0YXJ0aW5nRmFjdG9yLzIpIE1IegorICogQGNoYW5uZWw6IHRoZSBPRkRNIGNoYW5uZWwKKyAqCisgKiBDb252ZXJ0IElFRUU4MDIuMTEgT0ZETSBjaGFubmVsIHRvIGNlbnRlciBmcmVxdWVuY3kgKE1IeikKKyAqIFJlZiBJRUVFIDgwMi4xMS0yMDA3IHNlY3Rpb24gMTcuMy44LjMuMgorICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfb2ZkbV9jaGFuX3RvX2ZyZXEoaW50IHNfZnJlcSwgaW50IGNoYW5uZWwpCit7CisJaWYgKChjaGFubmVsID4gMCkgJiYgKGNoYW5uZWwgPD0gMjAwKSAmJgorCSAgICAoc19mcmVxID49IDQwMDApKQorCQlyZXR1cm4gc19mcmVxICsgKGNoYW5uZWwgKiA1KTsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworLyoqCisgKiBpZWVlODAyMTFfZnJlcV90b19vZmRtX2NoYW5uZWwgLSBnZXQgY2hhbm5lbAorICogQHNfZnJlcTogc3RhcnRpbmcgZnJlcXVlbmN5ID09IChkb3RDaGFubmVsU3RhcnRpbmdGYWN0b3IvMikgTUh6CisgKiBAZnJlcTogdGhlIGZyZXF1ZW5jeQorICoKKyAqIENvbnZlcnQgZnJlcXVlbmN5IChNSHopIHRvIElFRUU4MDIuMTEgT0ZETSBjaGFubmVsCisgKiBSZWYgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE3LjMuOC4zLjIKKyAqCisgKiBUaGlzIHJvdXRpbmUgc2VsZWN0cyB0aGUgY2hhbm5lbCB3aXRoIHRoZSBjbG9zZXN0IGNlbnRlciBmcmVxdWVuY3kuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9mcmVxX3RvX29mZG1fY2hhbihpbnQgc19mcmVxLCBpbnQgZnJlcSkKK3sKKwlpZiAoKGZyZXEgPiAoc19mcmVxICsgMikpICYmIChmcmVxIDw9IChzX2ZyZXEgKyAxMjAyKSkgJiYKKwkgICAgKHNfZnJlcSA+PSA0MDAwKSkKKwkJcmV0dXJuIChmcmVxICsgMiAtIHNfZnJlcSkgLyA1OworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorCiAjZW5kaWYgLyogTElOVVhfSUVFRTgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWYuaCBiL2luY2x1ZGUvbGludXgvaWYuaAppbmRleCAyYTZlMjk2Li4xMTA4ZjNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZi5oCkBAIC02Niw2ICs2Niw3IEBACiAjZGVmaW5lIElGRl9TTEFWRV9ORUVEQVJQIDB4NDAJCS8qIG5lZWQgQVJQcyBmb3IgdmFsaWRhdGlvbgkqLwogI2RlZmluZSBJRkZfSVNBVEFQCTB4ODAJCS8qIElTQVRBUCBpbnRlcmZhY2UgKFJGQzQyMTQpCSovCiAjZGVmaW5lIElGRl9NQVNURVJfQVJQTU9OIDB4MTAwCQkvKiBib25kaW5nIG1hc3RlciwgQVJQIG1vbiBpbiB1c2UgKi8KKyNkZWZpbmUgSUZGX1dBTl9IRExDCTB4MjAwCQkvKiBXQU4gSERMQyBkZXZpY2UJCSovCiAKICNkZWZpbmUgSUZfR0VUX0lGQUNFCTB4MDAwMQkJLyogZm9yIHF1ZXJ5aW5nIG9ubHkgKi8KICNkZWZpbmUgSUZfR0VUX1BST1RPCTB4MDAwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaCBiL2luY2x1ZGUvbGludXgvaWZfYXJjbmV0LmgKaW5kZXggMjdlYTJhYy4uMDgzNWRlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9hcmNuZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2FyY25ldC5oCkBAIC0xNiw2ICsxNiw3IEBACiAjaWZuZGVmIF9MSU5VWF9JRl9BUkNORVRfSAogI2RlZmluZSBfTElOVVhfSUZfQVJDTkVUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KIAogCkBAIC01NywxMCArNTgsMTAgQEAKICAqLwogc3RydWN0IGFyY19yZmMxMjAxCiB7Ci0gICAgdWludDhfdCAgcHJvdG87CQkvKiBwcm90b2NvbCBJRCBmaWVsZCAtIHZhcmllcwkJKi8KLSAgICB1aW50OF90ICBzcGxpdF9mbGFnOwkvKiBmb3IgdXNlIHdpdGggc3BsaXQgcGFja2V0cwkJKi8KKyAgICBfX3U4ICBwcm90bzsJCS8qIHByb3RvY29sIElEIGZpZWxkIC0gdmFyaWVzCQkqLworICAgIF9fdTggIHNwbGl0X2ZsYWc7CS8qIGZvciB1c2Ugd2l0aCBzcGxpdCBwYWNrZXRzCQkqLwogICAgIF9fYmUxNiAgIHNlcXVlbmNlOwkJLyogc2VxdWVuY2UgbnVtYmVyCQkJKi8KLSAgICB1aW50OF90ICBwYXlsb2FkWzBdOwkvKiBzcGFjZSByZW1haW5pbmcgaW4gcGFja2V0ICg1MDQgYnl0ZXMpKi8KKyAgICBfX3U4ICBwYXlsb2FkWzBdOwkvKiBzcGFjZSByZW1haW5pbmcgaW4gcGFja2V0ICg1MDQgYnl0ZXMpKi8KIH07CiAjZGVmaW5lIFJGQzEyMDFfSERSX1NJWkUgNAogCkBAIC03MCw4ICs3MSw4IEBACiAgKi8KIHN0cnVjdCBhcmNfcmZjMTA1MQogewotICAgIHVpbnQ4X3QgcHJvdG87CQkvKiBBUkNfUF9SRkMxMDUxX0FSUC9SRkMxMDUxX0lQCSovCi0gICAgdWludDhfdCBwYXlsb2FkWzBdOwkJLyogNTA3IGJ5dGVzCQkJKi8KKyAgICBfX3U4IHByb3RvOwkJLyogQVJDX1BfUkZDMTA1MV9BUlAvUkZDMTA1MV9JUAkqLworICAgIF9fdTggcGF5bG9hZFswXTsJCS8qIDUwNyBieXRlcwkJCSovCiB9OwogI2RlZmluZSBSRkMxMDUxX0hEUl9TSVpFIDEKIApAQCAtODIsMjAgKzgzLDIwIEBACiAgKi8KIHN0cnVjdCBhcmNfZXRoX2VuY2FwCiB7Ci0gICAgdWludDhfdCBwcm90bzsJCS8qIEFsd2F5cyBBUkNfUF9FVEhFUgkJCSovCisgICAgX191OCBwcm90bzsJCS8qIEFsd2F5cyBBUkNfUF9FVEhFUgkJCSovCiAgICAgc3RydWN0IGV0aGhkciBldGg7CQkvKiBzdGFuZGFyZCBldGhlcm5ldCBoZWFkZXIgKHl1Y2shKQkqLwotICAgIHVpbnQ4X3QgcGF5bG9hZFswXTsJCS8qIDQ5MyBieXRlcwkJCQkqLworICAgIF9fdTggcGF5bG9hZFswXTsJCS8qIDQ5MyBieXRlcwkJCQkqLwogfTsKICNkZWZpbmUgRVRIX0VOQ0FQX0hEUl9TSVpFIDE0CiAKIAogc3RydWN0IGFyY19jYXAKIHsKLQl1aW50OF90IHByb3RvOwotCXVpbnQ4X3QgY29va2llW3NpemVvZihpbnQpXTsgICAvKiBBY3R1YWxseSBOT1Qgc2VudCBvdmVyIHRoZSBuZXR3b3JrICovCisJX191OCBwcm90bzsKKwlfX3U4IGNvb2tpZVtzaXplb2YoaW50KV07ICAgLyogQWN0dWFsbHkgTk9UIHNlbnQgb3ZlciB0aGUgbmV0d29yayAqLwogCXVuaW9uIHsKLQkJdWludDhfdCBhY2s7Ci0JCXVpbnQ4X3QgcmF3WzBdOwkJLyogNTA3IGJ5dGVzICovCisJCV9fdTggYWNrOworCQlfX3U4IHJhd1swXTsJCS8qIDUwNyBieXRlcyAqLwogCX0gbWVzOwogfTsKIApAQCAtMTA5LDcgKzExMCw3IEBACiAgKi8KIHN0cnVjdCBhcmNfaGFyZHdhcmUKIHsKLSAgICB1aW50OF90ICBzb3VyY2UsCQkvKiBzb3VyY2UgQVJDbmV0IC0gZmlsbGVkIGluIGF1dG9tYWdpY2FsbHkgKi8KKyAgICBfX3U4ICBzb3VyY2UsCQkvKiBzb3VyY2UgQVJDbmV0IC0gZmlsbGVkIGluIGF1dG9tYWdpY2FsbHkgKi8KICAgICAgICAgICAgICBkZXN0LAkJLyogZGVzdGluYXRpb24gQVJDbmV0IC0gMCBmb3IgYnJvYWRjYXN0ICAgICovCiAgICAgCSAgICAgb2Zmc2V0WzJdOwkJLyogb2Zmc2V0IGJ5dGVzIChzb21lIHdlaXJkIHNlbWFudGljcykgICAgICovCiB9OwpAQCAtMTMwLDcgKzEzMSw3IEBACiAJc3RydWN0IGFyY19yZmMxMDUxICAgcmZjMTA1MTsKIAlzdHJ1Y3QgYXJjX2V0aF9lbmNhcCBldGhfZW5jYXA7CiAJc3RydWN0IGFyY19jYXAgICAgICAgY2FwOwotCXVpbnQ4X3QgcmF3WzBdOwkJLyogNTA4IGJ5dGVzCQkJCSovCisJX191OCByYXdbMF07CQkvKiA1MDggYnl0ZXMJCQkJKi8KICAgICB9IHNvZnQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmggYi9pbmNsdWRlL2xpbnV4L2lmX2V0aGVyLmgKaW5kZXggN2YzYzczNS4uMDIxNmUxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaApAQCAtMTcsNyArMTcsNyBAQAogICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KLSAKKwogI2lmbmRlZiBfTElOVVhfSUZfRVRIRVJfSAogI2RlZmluZSBfTElOVVhfSUZfRVRIRVJfSAogCkBAIC0yNSw3ICsyNSw3IEBACiAKIC8qCiAgKglJRUVFIDgwMi4zIEV0aGVybmV0IG1hZ2ljIGNvbnN0YW50cy4gIFRoZSBmcmFtZSBzaXplcyBvbWl0IHRoZSBwcmVhbWJsZQotICoJYW5kIEZDUy9DUkMgKGZyYW1lIGNoZWNrIHNlcXVlbmNlKS4gCisgKglhbmQgRkNTL0NSQyAoZnJhbWUgY2hlY2sgc2VxdWVuY2UpLgogICovCiAKICNkZWZpbmUgRVRIX0FMRU4JNgkJLyogT2N0ZXRzIGluIG9uZSBldGhlcm5ldCBhZGRyCSAqLwpAQCAtODMsNyArODMsNyBAQAogLyoKICAqCU5vbiBESVggdHlwZXMuIFdvbid0IGNsYXNoIGZvciAxNTAwIHR5cGVzLgogICovCi0gCisKICNkZWZpbmUgRVRIX1BfODAyXzMJMHgwMDAxCQkvKiBEdW1teSB0eXBlIGZvciA4MDIuMyBmcmFtZXMgICovCiAjZGVmaW5lIEVUSF9QX0FYMjUJMHgwMDAyCQkvKiBEdW1teSBwcm90b2NvbCBpZCBmb3IgQVguMjUgICovCiAjZGVmaW5lIEVUSF9QX0FMTAkweDAwMDMJCS8qIEV2ZXJ5IHBhY2tldCAoYmUgY2FyZWZ1bCEhISkgKi8KQEAgLTEwOSw3ICsxMDksNyBAQAogLyoKICAqCVRoaXMgaXMgYW4gRXRoZXJuZXQgZnJhbWUgaGVhZGVyLgogICovCi0gCisKIHN0cnVjdCBldGhoZHIgewogCXVuc2lnbmVkIGNoYXIJaF9kZXN0W0VUSF9BTEVOXTsJLyogZGVzdGluYXRpb24gZXRoIGFkZHIJKi8KIAl1bnNpZ25lZCBjaGFyCWhfc291cmNlW0VUSF9BTEVOXTsJLyogc291cmNlIGV0aGVyIGFkZHIJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfZnJhZC5oIGIvaW5jbHVkZS9saW51eC9pZl9mcmFkLmgKaW5kZXggNjBlMTZhNS4uNjczZjIyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9mcmFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9mcmFkLmgKQEAgLTE1Myw3ICsxNTMsNiBAQAogCiBzdHJ1Y3QgZGxjaV9sb2NhbAogewotICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAgICBzdHJ1Y3QgbmV0X2RldmljZSAgICAgICptYXN0ZXI7CiAgICBzdHJ1Y3QgbmV0X2RldmljZSAgICAgICpzbGF2ZTsKICAgIHN0cnVjdCBkbGNpX2NvbmYgICAgICAgY29uZmlnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oIGIvaW5jbHVkZS9saW51eC9pZl9wcHBvbDJ0cC5oCmluZGV4IGM3YTY2ODguLjNhMTRiMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfcHBwb2wydHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3BwcG9sMnRwLmgKQEAgLTI2LDcgKzI2LDcgQEAKICAqLwogc3RydWN0IHBwcG9sMnRwX2FkZHIKIHsKLQlwaWRfdAlwaWQ7CQkJLyogcGlkIHRoYXQgb3ducyB0aGUgZmQuCisJX19rZXJuZWxfcGlkX3QJcGlkOwkJLyogcGlkIHRoYXQgb3ducyB0aGUgZmQuCiAJCQkJCSAqIDAgPT4gY3VycmVudCAqLwogCWludAlmZDsJCQkvKiBGRCBvZiBVRFAgc29ja2V0IHRvIHVzZSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmggYi9pbmNsdWRlL2xpbnV4L2lmX3BwcG94LmgKaW5kZXggMzBjODhiMi4uOTBiNWZhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wcHBveC5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfcHBwb3guaApAQCAtOTUsMTYgKzk1LDE2IEBACiB9IF9fYXR0cmlidXRlICgocGFja2VkKSk7CiAKIC8qIFRhZyBpZGVudGlmaWVycyAqLwotI2RlZmluZSBQVFRfRU9MCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMCkKLSNkZWZpbmUgUFRUX1NSVl9OQU1FCV9fY29uc3RhbnRfaHRvbnMoMHgwMTAxKQotI2RlZmluZSBQVFRfQUNfTkFNRQlfX2NvbnN0YW50X2h0b25zKDB4MDEwMikKLSNkZWZpbmUgUFRUX0hPU1RfVU5JUQlfX2NvbnN0YW50X2h0b25zKDB4MDEwMykKLSNkZWZpbmUgUFRUX0FDX0NPT0tJRQlfX2NvbnN0YW50X2h0b25zKDB4MDEwNCkKLSNkZWZpbmUgUFRUX1ZFTkRPUiAJX19jb25zdGFudF9odG9ucygweDAxMDUpCi0jZGVmaW5lIFBUVF9SRUxBWV9TSUQJX19jb25zdGFudF9odG9ucygweDAxMTApCi0jZGVmaW5lIFBUVF9TUlZfRVJSICAgICBfX2NvbnN0YW50X2h0b25zKDB4MDIwMSkKLSNkZWZpbmUgUFRUX1NZU19FUlIgIAlfX2NvbnN0YW50X2h0b25zKDB4MDIwMikKLSNkZWZpbmUgUFRUX0dFTl9FUlIgIAlfX2NvbnN0YW50X2h0b25zKDB4MDIwMykKKyNkZWZpbmUgUFRUX0VPTAkJX19jcHVfdG9fYmUxNigweDAwMDApCisjZGVmaW5lIFBUVF9TUlZfTkFNRQlfX2NwdV90b19iZTE2KDB4MDEwMSkKKyNkZWZpbmUgUFRUX0FDX05BTUUJX19jcHVfdG9fYmUxNigweDAxMDIpCisjZGVmaW5lIFBUVF9IT1NUX1VOSVEJX19jcHVfdG9fYmUxNigweDAxMDMpCisjZGVmaW5lIFBUVF9BQ19DT09LSUUJX19jcHVfdG9fYmUxNigweDAxMDQpCisjZGVmaW5lIFBUVF9WRU5ET1IgCV9fY3B1X3RvX2JlMTYoMHgwMTA1KQorI2RlZmluZSBQVFRfUkVMQVlfU0lECV9fY3B1X3RvX2JlMTYoMHgwMTEwKQorI2RlZmluZSBQVFRfU1JWX0VSUiAgICAgX19jcHVfdG9fYmUxNigweDAyMDEpCisjZGVmaW5lIFBUVF9TWVNfRVJSICAJX19jcHVfdG9fYmUxNigweDAyMDIpCisjZGVmaW5lIFBUVF9HRU5fRVJSICAJX19jcHVfdG9fYmUxNigweDAyMDMpCiAKIHN0cnVjdCBwcHBvZV9oZHIgewogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKaW5kZXggODUyOWY1Ny4uMDQ5ZDZjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl90dW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCkBAIC00Niw2ICs0Niw4IEBACiAjZGVmaW5lIFRVTlNFVE9GRkxPQUQgIF9JT1coJ1QnLCAyMDgsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVFVOU0VUVFhGSUxURVIgX0lPVygnVCcsIDIwOSwgdW5zaWduZWQgaW50KQogI2RlZmluZSBUVU5HRVRJRkYgICAgICBfSU9SKCdUJywgMjEwLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFRVTkdFVFNOREJVRiAgIF9JT1IoJ1QnLCAyMTEsIGludCkKKyNkZWZpbmUgVFVOU0VUU05EQlVGICAgX0lPVygnVCcsIDIxMiwgaW50KQogCiAvKiBUVU5TRVRJRkYgaWZyIGZsYWdzICovCiAjZGVmaW5lIElGRl9UVU4JCTB4MDAwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaCBiL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmgKaW5kZXggODJjNDM2MjQuLjVhOWFhZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVubmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW5uZWwuaApAQCAtMTYsMTQgKzE2LDE0IEBACiAjZGVmaW5lIFNJT0NERUxQUkwgICAgICAoU0lPQ0RFVlBSSVZBVEUgKyA2KQogI2RlZmluZSBTSU9DQ0hHUFJMICAgICAgKFNJT0NERVZQUklWQVRFICsgNykKIAotI2RlZmluZSBHUkVfQ1NVTQlfX2NvbnN0YW50X2h0b25zKDB4ODAwMCkKLSNkZWZpbmUgR1JFX1JPVVRJTkcJX19jb25zdGFudF9odG9ucygweDQwMDApCi0jZGVmaW5lIEdSRV9LRVkJCV9fY29uc3RhbnRfaHRvbnMoMHgyMDAwKQotI2RlZmluZSBHUkVfU0VRCQlfX2NvbnN0YW50X2h0b25zKDB4MTAwMCkKLSNkZWZpbmUgR1JFX1NUUklDVAlfX2NvbnN0YW50X2h0b25zKDB4MDgwMCkKLSNkZWZpbmUgR1JFX1JFQwkJX19jb25zdGFudF9odG9ucygweDA3MDApCi0jZGVmaW5lIEdSRV9GTEFHUwlfX2NvbnN0YW50X2h0b25zKDB4MDBGOCkKLSNkZWZpbmUgR1JFX1ZFUlNJT04JX19jb25zdGFudF9odG9ucygweDAwMDcpCisjZGVmaW5lIEdSRV9DU1VNCV9fY3B1X3RvX2JlMTYoMHg4MDAwKQorI2RlZmluZSBHUkVfUk9VVElORwlfX2NwdV90b19iZTE2KDB4NDAwMCkKKyNkZWZpbmUgR1JFX0tFWQkJX19jcHVfdG9fYmUxNigweDIwMDApCisjZGVmaW5lIEdSRV9TRVEJCV9fY3B1X3RvX2JlMTYoMHgxMDAwKQorI2RlZmluZSBHUkVfU1RSSUNUCV9fY3B1X3RvX2JlMTYoMHgwODAwKQorI2RlZmluZSBHUkVfUkVDCQlfX2NwdV90b19iZTE2KDB4MDcwMCkKKyNkZWZpbmUgR1JFX0ZMQUdTCV9fY3B1X3RvX2JlMTYoMHgwMEY4KQorI2RlZmluZSBHUkVfVkVSU0lPTglfX2NwdV90b19iZTE2KDB4MDAwNykKIAogc3RydWN0IGlwX3R1bm5lbF9wYXJtCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ltYS5oIGIvaW5jbHVkZS9saW51eC9pbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTJhYTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pbWEuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IElCTSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBNaW1pIFpvaGFyIDx6b2hhckB1cy5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0lNQV9ICisjZGVmaW5lIF9MSU5VWF9JTUFfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KK3N0cnVjdCBsaW51eF9iaW5wcm07CisKKyNpZmRlZiBDT05GSUdfSU1BCitleHRlcm4gaW50IGltYV9icHJtX2NoZWNrKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOworZXh0ZXJuIGludCBpbWFfaW5vZGVfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSk7CitleHRlcm4gdm9pZCBpbWFfaW5vZGVfZnJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2V4dGVybiBpbnQgaW1hX3BhdGhfY2hlY2soc3RydWN0IHBhdGggKnBhdGgsIGludCBtYXNrKTsKK2V4dGVybiB2b2lkIGltYV9maWxlX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpOworZXh0ZXJuIGludCBpbWFfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHByb3QpOworZXh0ZXJuIHZvaWQgaW1hX3NobV9jaGVjayhzdHJ1Y3QgZmlsZSAqZmlsZSk7CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBpbWFfYnBybV9jaGVjayhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbWFfaW5vZGVfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGltYV9pbm9kZV9mcmVlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbWFfcGF0aF9jaGVjayhzdHJ1Y3QgcGF0aCAqcGF0aCwgaW50IG1hc2spCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbWFfZmlsZV9mcmVlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW1hX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwcm90KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW1hX3NobV9jaGVjayhzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm47Cit9CisjZW5kaWYgLyogQ09ORklHX0lNQV9IICovCisjZW5kaWYgLyogX0xJTlVYX0lNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luNi5oIGIvaW5jbHVkZS9saW51eC9pbjYuaAppbmRleCBiYzQ5MjA0Li43MThiZjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luNi5oCisrKyBiL2luY2x1ZGUvbGludXgvaW42LmgKQEAgLTQ0LDExICs0NCwxMSBAQAogICogTk9URTogQmUgYXdhcmUgdGhlIElONkFERFJfKiBjb25zdGFudHMgYW5kIGluNmFkZHJfKiBleHRlcm5hbHMgYXJlIGRlZmluZWQKICAqIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgbm90IGluIGhvc3QgYnl0ZSBvcmRlciBhcyBhcmUgdGhlIElQdjQgZXF1aXZhbGVudHMKICAqLworI2lmZGVmIF9fS0VSTkVMX18KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9hbnk7CiAjZGVmaW5lIElONkFERFJfQU5ZX0lOSVQgeyB7IHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9IH0gfQogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2xvb3BiYWNrOwogI2RlZmluZSBJTjZBRERSX0xPT1BCQUNLX0lOSVQgeyB7IHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSB9IH0gfQotI2lmZGVmIF9fS0VSTkVMX18KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9saW5rbG9jYWxfYWxsbm9kZXM7CiAjZGVmaW5lIElONkFERFJfTElOS0xPQ0FMX0FMTE5PREVTX0lOSVQJXAogCQl7IHsgeyAweGZmLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxIH0gfSB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCmluZGV4IDA2ZmNkYjQuLmFjZWYyYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oCkBAIC0xMDgsNiArMTA4LDcgQEAKICNkZWZpbmUgSU5fREVWX0FSUEZJTFRFUihpbl9kZXYpCUlOX0RFVl9PUkNPTkYoKGluX2RldiksIEFSUEZJTFRFUikKICNkZWZpbmUgSU5fREVWX0FSUF9BTk5PVU5DRShpbl9kZXYpCUlOX0RFVl9NQVhDT05GKChpbl9kZXYpLCBBUlBfQU5OT1VOQ0UpCiAjZGVmaW5lIElOX0RFVl9BUlBfSUdOT1JFKGluX2RldikJSU5fREVWX01BWENPTkYoKGluX2RldiksIEFSUF9JR05PUkUpCisjZGVmaW5lIElOX0RFVl9BUlBfTk9USUZZKGluX2RldikJSU5fREVWX01BWENPTkYoKGluX2RldiksIEFSUF9OT1RJRlkpCiAKIHN0cnVjdCBpbl9pZmFkZHIKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmggYi9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCmluZGV4IGU3NTJkOTcuLmFmMWRlOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaApAQCAtMTQ3LDYgKzE0Nyw3IEBACiAJCS5ucl9jcHVzX2FsbG93ZWQgPSBOUl9DUFVTLAkJCQlcCiAJfSwJCQkJCQkJCVwKIAkudGFza3MJCT0gTElTVF9IRUFEX0lOSVQodHNrLnRhc2tzKSwJCQlcCisJLnB1c2hhYmxlX3Rhc2tzID0gUExJU1RfTk9ERV9JTklUKHRzay5wdXNoYWJsZV90YXNrcywgTUFYX1BSSU8pLCBcCiAJLnB0cmFjZWQJPSBMSVNUX0hFQURfSU5JVCh0c2sucHRyYWNlZCksCQkJXAogCS5wdHJhY2VfZW50cnkJPSBMSVNUX0hFQURfSU5JVCh0c2sucHRyYWNlX2VudHJ5KSwJCVwKIAkucmVhbF9wYXJlbnQJPSAmdHNrLAkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQuaAppbmRleCAxMjQ5YTBjLi42YjI4MDQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCkBAIC02NjEsNiArNjYxLDcgQEAKICNkZWZpbmUgU1dfRE9DSwkJCTB4MDUgIC8qIHNldCA9IHBsdWdnZWQgaW50byBkb2NrICovCiAjZGVmaW5lIFNXX0xJTkVPVVRfSU5TRVJUCTB4MDYgIC8qIHNldCA9IGluc2VydGVkICovCiAjZGVmaW5lIFNXX0pBQ0tfUEhZU0lDQUxfSU5TRVJUIDB4MDcgIC8qIHNldCA9IG1lY2hhbmljYWwgc3dpdGNoIHNldCAqLworI2RlZmluZSBTV19WSURFT09VVF9JTlNFUlQJMHgwOCAgLyogc2V0ID0gaW5zZXJ0ZWQgKi8KICNkZWZpbmUgU1dfTUFYCQkJMHgwZgogI2RlZmluZSBTV19DTlQJCQkoU1dfTUFYKzEpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDkxMjdmNmIuLjkxNjU4ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtNjEsNiArNjEsMTcgQEAKIAogdHlwZWRlZiBpcnFyZXR1cm5fdCAoKmlycV9oYW5kbGVyX3QpKGludCwgdm9pZCAqKTsKIAorLyoqCisgKiBzdHJ1Y3QgaXJxYWN0aW9uIC0gcGVyIGludGVycnVwdCBhY3Rpb24gZGVzY3JpcHRvcgorICogQGhhbmRsZXI6CWludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9uCisgKiBAZmxhZ3M6CWZsYWdzIChzZWUgSVJRRl8qIGFib3ZlKQorICogQG1hc2s6CW5vIGNvbW1lbnQgYXMgaXQgaXMgdXNlbGVzcyBhbmQgYWJvdXQgdG8gYmUgcmVtb3ZlZAorICogQG5hbWU6CW5hbWUgb2YgdGhlIGRldmljZQorICogQGRldl9pZDoJY29va2llIHRvIGlkZW50aWZ5IHRoZSBkZXZpY2UKKyAqIEBuZXh0Oglwb2ludGVyIHRvIHRoZSBuZXh0IGlycWFjdGlvbiBmb3Igc2hhcmVkIGludGVycnVwdHMKKyAqIEBpcnE6CWludGVycnVwdCBudW1iZXIKKyAqIEBkaXI6CXBvaW50ZXIgdG8gdGhlIHByb2MvaXJxL05OL25hbWUgZW50cnkKKyAqLwogc3RydWN0IGlycWFjdGlvbiB7CiAJaXJxX2hhbmRsZXJfdCBoYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00NjIsNiArNDczLDEyIEBACiB9CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfSEFSRElSUVMpICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX1NISVJRKQorZXh0ZXJuIHZvaWQgZGVidWdfcG9sbF9hbGxfc2hhcmVkX2lycXModm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3BvbGxfYWxsX3NoYXJlZF9pcnFzKHZvaWQpIHsgfQorI2VuZGlmCisKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KTsKIAogc3RydWN0IGlycV9kZXNjOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcF92cy5oIGIvaW5jbHVkZS9saW51eC9pcF92cy5oCmluZGV4IDBmNDM0YTIuLjE0ODI2NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBfdnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwX3ZzLmgKQEAgLTk2LDEwICs5NiwxMCBAQAogICovCiBzdHJ1Y3QgaXBfdnNfc2VydmljZV91c2VyIHsKIAkvKiB2aXJ0dWFsIHNlcnZpY2UgYWRkcmVzc2VzICovCi0JdV9pbnQxNl90CQlwcm90b2NvbDsKKwlfX3UxNgkJcHJvdG9jb2w7CiAJX19iZTMyCQkJYWRkcjsJCS8qIHZpcnR1YWwgaXAgYWRkcmVzcyAqLwogCV9fYmUxNgkJCXBvcnQ7Ci0JdV9pbnQzMl90CQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLworCV9fdTMyCQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLwogCiAJLyogdmlydHVhbCBzZXJ2aWNlIG9wdGlvbnMgKi8KIAljaGFyCQkJc2NoZWRfbmFtZVtJUF9WU19TQ0hFRE5BTUVfTUFYTEVOXTsKQEAgLTExOSw4ICsxMTksOCBAQAogCWludAkJCXdlaWdodDsJCS8qIGRlc3RpbmF0aW9uIHdlaWdodCAqLwogCiAJLyogdGhyZXNob2xkcyBmb3IgYWN0aXZlIGNvbm5lY3Rpb25zICovCi0JdV9pbnQzMl90CQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCi0JdV9pbnQzMl90CQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCisJX191MzIJCXVfdGhyZXNob2xkOwkvKiB1cHBlciB0aHJlc2hvbGQgKi8KKwlfX3UzMgkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLwogfTsKIAogCkBAIC0xNTksMTAgKzE1OSwxMCBAQAogLyogVGhlIGFyZ3VtZW50IHRvIElQX1ZTX1NPX0dFVF9TRVJWSUNFICovCiBzdHJ1Y3QgaXBfdnNfc2VydmljZV9lbnRyeSB7CiAJLyogd2hpY2ggc2VydmljZTogdXNlciBmaWxscyBpbiB0aGVzZSAqLwotCXVfaW50MTZfdAkJcHJvdG9jb2w7CisJX191MTYJCXByb3RvY29sOwogCV9fYmUzMgkJCWFkZHI7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KIAlfX2JlMTYJCQlwb3J0OwotCXVfaW50MzJfdAkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KKwlfX3UzMgkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KIAogCS8qIHNlcnZpY2Ugb3B0aW9ucyAqLwogCWNoYXIJCQlzY2hlZF9uYW1lW0lQX1ZTX1NDSEVETkFNRV9NQVhMRU5dOwpAQCAtMTg0LDEyICsxODQsMTIgQEAKIAl1bnNpZ25lZAkJY29ubl9mbGFnczsJLyogY29ubmVjdGlvbiBmbGFncyAqLwogCWludAkJCXdlaWdodDsJCS8qIGRlc3RpbmF0aW9uIHdlaWdodCAqLwogCi0JdV9pbnQzMl90CQl1X3RocmVzaG9sZDsJLyogdXBwZXIgdGhyZXNob2xkICovCi0JdV9pbnQzMl90CQlsX3RocmVzaG9sZDsJLyogbG93ZXIgdGhyZXNob2xkICovCisJX191MzIJCXVfdGhyZXNob2xkOwkvKiB1cHBlciB0aHJlc2hvbGQgKi8KKwlfX3UzMgkJbF90aHJlc2hvbGQ7CS8qIGxvd2VyIHRocmVzaG9sZCAqLwogCi0JdV9pbnQzMl90CQlhY3RpdmVjb25uczsJLyogYWN0aXZlIGNvbm5lY3Rpb25zICovCi0JdV9pbnQzMl90CQlpbmFjdGNvbm5zOwkvKiBpbmFjdGl2ZSBjb25uZWN0aW9ucyAqLwotCXVfaW50MzJfdAkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCisJX191MzIJCWFjdGl2ZWNvbm5zOwkvKiBhY3RpdmUgY29ubmVjdGlvbnMgKi8KKwlfX3UzMgkJaW5hY3Rjb25uczsJLyogaW5hY3RpdmUgY29ubmVjdGlvbnMgKi8KKwlfX3UzMgkJcGVyc2lzdGNvbm5zOwkvKiBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zICovCiAKIAkvKiBzdGF0aXN0aWNzICovCiAJc3RydWN0IGlwX3ZzX3N0YXRzX3VzZXIgc3RhdHM7CkBAIC0xOTksMTAgKzE5OSwxMCBAQAogLyogVGhlIGFyZ3VtZW50IHRvIElQX1ZTX1NPX0dFVF9ERVNUUyAqLwogc3RydWN0IGlwX3ZzX2dldF9kZXN0cyB7CiAJLyogd2hpY2ggc2VydmljZTogdXNlciBmaWxscyBpbiB0aGVzZSAqLwotCXVfaW50MTZfdAkJcHJvdG9jb2w7CisJX191MTYJCXByb3RvY29sOwogCV9fYmUzMgkJCWFkZHI7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KIAlfX2JlMTYJCQlwb3J0OwotCXVfaW50MzJfdAkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KKwlfX3UzMgkJZndtYXJrOwkJLyogZmlyd2FsbCBtYXJrIG9mIHNlcnZpY2UgKi8KIAogCS8qIG51bWJlciBvZiByZWFsIHNlcnZlcnMgKi8KIAl1bnNpZ25lZCBpbnQJCW51bV9kZXN0czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IGY4OTliNTAuLjZkYjkzOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtMTYwLDEyICsxNjAsMTAgQEAKICAqLwogc3RydWN0IGlycV9kZXNjIHsKIAl1bnNpZ25lZCBpbnQJCWlycTsKLSNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQogCXN0cnVjdCB0aW1lcl9yYW5kX3N0YXRlICp0aW1lcl9yYW5kX3N0YXRlOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICprc3RhdF9pcnFzOwotIyBpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJc3RydWN0IGlycV8yX2lvbW11ICAgICAgKmlycV8yX2lvbW11OwotIyBlbmRpZgogI2VuZGlmCiAJaXJxX2Zsb3dfaGFuZGxlcl90CWhhbmRsZV9pcnE7CiAJc3RydWN0IGlycV9jaGlwCQkqY2hpcDsKQEAgLTIwMiwxMiArMjAwLDYgQEAKIGV4dGVybiBzdHJ1Y3QgaXJxX2Rlc2MgaXJxX2Rlc2NbTlJfSVJRU107CiAjZWxzZSAvKiBDT05GSUdfU1BBUlNFX0lSUSAqLwogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqbW92ZV9pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKm9sZF9kZXNjLCBpbnQgY3B1KTsKLQotI2RlZmluZSBrc3RhdF9pcnFzX3RoaXNfY3B1KERFU0MpIFwKLQkoKERFU0MpLT5rc3RhdF9pcnFzW3NtcF9wcm9jZXNzb3JfaWQoKV0pCi0jZGVmaW5lIGtzdGF0X2luY3JfaXJxc190aGlzX2NwdShpcnFubywgREVTQykgXAotCSgoREVTQyktPmtzdGF0X2lycXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSsrKQotCiAjZW5kaWYgLyogQ09ORklHX1NQQVJTRV9JUlEgKi8KIAogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqaXJxX3RvX2Rlc2NfYWxsb2NfY3B1KHVuc2lnbmVkIGludCBpcnEsIGludCBjcHUpOwpAQCAtMjI2LDcgKzIxOCw2IEBACiAgKiBNaWdyYXRpb24gaGVscGVycyBmb3Igb2Jzb2xldGUgbmFtZXMsIHRoZXkgd2lsbCBnbyBhd2F5OgogICovCiAjZGVmaW5lIGh3X2ludGVycnVwdF90eXBlCWlycV9jaGlwCi10eXBlZGVmIHN0cnVjdCBpcnFfY2hpcAkJaHdfaXJxX2NvbnRyb2xsZXI7CiAjZGVmaW5lIG5vX2lycV90eXBlCQlub19pcnFfY2hpcAogdHlwZWRlZiBzdHJ1Y3QgaXJxX2Rlc2MJCWlycV9kZXNjX3Q7CiAKQEAgLTIzNiw2ICsyMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KIAogZXh0ZXJuIGludCBzZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqbmV3KTsKK2V4dGVybiB2b2lkIHJlbW92ZV9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0KTsKIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiAKQEAgLTI4MCw3ICsyNzIsNyBAQAogfQogCiAvKiBIYW5kbGUgaXJxIGFjdGlvbiBjaGFpbnM6ICovCi1leHRlcm4gaW50IGhhbmRsZV9JUlFfZXZlbnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBoYW5kbGVfSVJRX2V2ZW50KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbik7CiAKIC8qCiAgKiBCdWlsdC1pbiBJUlEgaGFuZGxlcnMgZm9yIHZhcmlvdXMgSVJRIHR5cGVzLApAQCAtMzI1LDcgKzMxNyw3IEBACiAKIC8qIEhhbmRsaW5nIG9mIHVuaGFuZGxlZCBhbmQgc3B1cmlvdXMgaW50ZXJydXB0czogKi8KIGV4dGVybiB2b2lkIG5vdGVfaW50ZXJydXB0KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKLQkJCSAgIGludCBhY3Rpb25fcmV0KTsKKwkJCSAgIGlycXJldHVybl90IGFjdGlvbl9yZXQpOwogCiAvKiBSZXNlbmRpbmcgb2YgaW50ZXJydXB0cyA6Ki8KIHZvaWQgY2hlY2tfaXJxX3Jlc2VuZChzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFuci5oIGIvaW5jbHVkZS9saW51eC9pcnFuci5oCmluZGV4IDg2YWY5MmUuLjUyZWJiYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxbnIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycW5yLmgKQEAgLTI4LDEzICsyOCwxNyBAQAogIyBkZWZpbmUgZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQkJCQkJXAogCWZvciAoaXJxID0gMCwgZGVzYyA9IGlycV90b19kZXNjKGlycSk7IGlycSA8IG5yX2lycXM7CQlcCiAJICAgICBpcnErKywgZGVzYyA9IGlycV90b19kZXNjKGlycSkpCQkJCVwKLQkJaWYgKGRlc2MpCisJCWlmICghZGVzYykJCQkJCQlcCisJCQk7CQkJCQkJXAorCQllbHNlCiAKIAogIyBkZWZpbmUgZm9yX2VhY2hfaXJxX2Rlc2NfcmV2ZXJzZShpcnEsIGRlc2MpCQkJCVwKIAlmb3IgKGlycSA9IG5yX2lycXMgLSAxLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsgaXJxID49IDA7CVwKIAkgICAgIGlycS0tLCBkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKSkJCQkJXAotCQlpZiAoZGVzYykKKwkJaWYgKCFkZXNjKQkJCQkJCVwKKwkJCTsJCQkJCQlcCisJCWVsc2UKIAogI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX0hBUkRJUlFTICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmggYi9pbmNsdWRlL2xpbnV4L2lycXJldHVybi5oCmluZGV4IDg4MTg4M2MuLmM1NTg0Y2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxcmV0dXJuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnFyZXR1cm4uaApAQCAtMSwyNSArMSwxNyBAQAotLyogaXJxcmV0dXJuLmggKi8KICNpZm5kZWYgX0xJTlVYX0lSUVJFVFVSTl9ICiAjZGVmaW5lIF9MSU5VWF9JUlFSRVRVUk5fSAogCi0vKgotICogRm9yIDIuNC54IGNvbXBhdGliaWxpdHksIDIuNC54IGNhbiB1c2UKLSAqCi0gKgl0eXBlZGVmIHZvaWQgaXJxcmV0dXJuX3Q7Ci0gKgkjZGVmaW5lIElSUV9OT05FCi0gKgkjZGVmaW5lIElSUV9IQU5ETEVECi0gKgkjZGVmaW5lIElSUV9SRVRWQUwoeCkKLSAqCi0gKiBUbyBtaXggb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgaXJxIGhhbmRsZXIgcmV0dXJucy4KLSAqCi0gKiBJUlFfTk9ORSBtZWFucyB3ZSBkaWRuJ3QgaGFuZGxlIGl0LgotICogSVJRX0hBTkRMRUQgbWVhbnMgdGhhdCB3ZSBkaWQgaGF2ZSBhIHZhbGlkIGludGVycnVwdCBhbmQgaGFuZGxlZCBpdC4KLSAqIElSUV9SRVRWQUwoeCkgc2VsZWN0cyBvbiB0aGUgdHdvIGRlcGVuZGluZyBvbiB4IGJlaW5nIG5vbi16ZXJvIChmb3IgaGFuZGxlZCkKKy8qKgorICogZW51bSBpcnFyZXR1cm4KKyAqIEBJUlFfTk9ORQkJaW50ZXJydXB0IHdhcyBub3QgZnJvbSB0aGlzIGRldmljZQorICogQElSUV9IQU5ETEVECQlpbnRlcnJ1cHQgd2FzIGhhbmRsZWQgYnkgdGhpcyBkZXZpY2UKICAqLwotdHlwZWRlZiBpbnQgaXJxcmV0dXJuX3Q7CitlbnVtIGlycXJldHVybiB7CisJSVJRX05PTkUsCisJSVJRX0hBTkRMRUQsCit9OwogCi0jZGVmaW5lIElSUV9OT05FCSgwKQotI2RlZmluZSBJUlFfSEFORExFRAkoMSkKLSNkZWZpbmUgSVJRX1JFVFZBTCh4KQkoKHgpICE9IDApCit0eXBlZGVmIGVudW0gaXJxcmV0dXJuIGlycXJldHVybl90OworI2RlZmluZSBJUlFfUkVUVkFMKHgpCSgoeCkgIT0gSVJRX05PTkUpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pdnR2ZmIuaCBiL2luY2x1ZGUvbGludXgvaXZ0dmZiLmgKaW5kZXggZTIwYWY0Ny4uOWQ4OGIyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pdnR2ZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2l2dHZmYi5oCkBAIC0zMyw2ICszMyw2IEBACiB9OwogCiAjZGVmaW5lIElWVFZGQl9JT0NfRE1BX0ZSQU1FIAlfSU9XKCdWJywgQkFTRV9WSURJT0NfUFJJVkFURSswLCBzdHJ1Y3QgaXZ0dmZiX2RtYV9mcmFtZSkKLSNkZWZpbmUgRkJJT19XQUlURk9SVlNZTkMJX0lPVygnRicsIDB4MjAsIHVfaW50MzJfdCkKKyNkZWZpbmUgRkJJT19XQUlURk9SVlNZTkMJX0lPVygnRicsIDB4MjAsIF9fdTMyKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamZmczIuaCBiL2luY2x1ZGUvbGludXgvamZmczIuaAppbmRleCBkYTcyMGJjLi4yYjMyZDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKKysrIGIvaW5jbHVkZS9saW51eC9qZmZzMi5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaWZuZGVmIF9fTElOVVhfSkZGUzJfSF9fCiAjZGVmaW5lIF9fTElOVVhfSkZGUzJfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAKIC8qIFlvdSBtdXN0IGluY2x1ZGUgc29tZXRoaW5nIHdoaWNoIGRlZmluZXMgdGhlIEM5OSB1aW50WFhfdCB0eXBlcy4gCkBAIC05MSwxNSArOTIsMTUgQEAKICAgIGJ5dGVzd2FwcGluZyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3QgdjMyOworCV9fdTMyIHYzMjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgamludDMyX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MzJfdCBtOworCV9fdTMyIG07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGptb2RlX3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLQl1aW50MTZfdCB2MTY7CisJX191MTYgdjE2OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqaW50MTZfdDsKIAogc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZQpAQCAtMTIxLDEyICsxMjIsMTIgQEAKIAlqaW50MzJfdCB2ZXJzaW9uOwogCWppbnQzMl90IGlubzsgLyogPT0gemVybyBmb3IgdW5saW5rICovCiAJamludDMyX3QgbWN0aW1lOwotCXVpbnQ4X3QgbnNpemU7Ci0JdWludDhfdCB0eXBlOwotCXVpbnQ4X3QgdW51c2VkWzJdOworCV9fdTggbnNpemU7CisJX191OCB0eXBlOworCV9fdTggdW51c2VkWzJdOwogCWppbnQzMl90IG5vZGVfY3JjOwogCWppbnQzMl90IG5hbWVfY3JjOwotCXVpbnQ4X3QgbmFtZVswXTsKKwlfX3U4IG5hbWVbMF07CiB9OwogCiAvKiBUaGUgSkZGUzIgcmF3IGlub2RlIHN0cnVjdHVyZTogVXNlZCBmb3Igc3RvcmFnZSBvbiBwaHlzaWNhbCBtZWRpYS4gICovCkBAIC0xNTMsMTIgKzE1NCwxMiBAQAogCWppbnQzMl90IG9mZnNldDsgICAgIC8qIFdoZXJlIHRvIGJlZ2luIHRvIHdyaXRlLiAgKi8KIAlqaW50MzJfdCBjc2l6ZTsgICAgICAvKiAoQ29tcHJlc3NlZCkgZGF0YSBzaXplICovCiAJamludDMyX3QgZHNpemU7CSAgICAgLyogU2l6ZSBvZiB0aGUgbm9kZSdzIGRhdGEuIChhZnRlciBkZWNvbXByZXNzaW9uKSAqLwotCXVpbnQ4X3QgY29tcHI7ICAgICAgIC8qIENvbXByZXNzaW9uIGFsZ29yaXRobSB1c2VkICovCi0JdWludDhfdCB1c2VyY29tcHI7ICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHJlcXVlc3RlZCBieSB0aGUgdXNlciAqLworCV9fdTggY29tcHI7ICAgICAgIC8qIENvbXByZXNzaW9uIGFsZ29yaXRobSB1c2VkICovCisJX191OCB1c2VyY29tcHI7ICAgLyogQ29tcHJlc3Npb24gYWxnb3JpdGhtIHJlcXVlc3RlZCBieSB0aGUgdXNlciAqLwogCWppbnQxNl90IGZsYWdzOwkgICAgIC8qIFNlZSBKRkZTMl9JTk9fRkxBR18qICovCiAJamludDMyX3QgZGF0YV9jcmM7ICAgLyogQ1JDIGZvciB0aGUgKGNvbXByZXNzZWQpIGRhdGEuICAqLwogCWppbnQzMl90IG5vZGVfY3JjOyAgIC8qIENSQyBmb3IgdGhlIHJhdyBpbm9kZSAoZXhjbHVkaW5nIGRhdGEpICAqLwotCXVpbnQ4X3QgZGF0YVswXTsKKwlfX3U4IGRhdGFbMF07CiB9OwogCiBzdHJ1Y3QgamZmczJfcmF3X3hhdHRyIHsKQEAgLTE2OCwxMiArMTY5LDEyIEBACiAJamludDMyX3QgaGRyX2NyYzsKIAlqaW50MzJfdCB4aWQ7CQkvKiBYQVRUUiBpZGVudGlmaWVyIG51bWJlciAqLwogCWppbnQzMl90IHZlcnNpb247Ci0JdWludDhfdCB4cHJlZml4OwotCXVpbnQ4X3QgbmFtZV9sZW47CisJX191OCB4cHJlZml4OworCV9fdTggbmFtZV9sZW47CiAJamludDE2X3QgdmFsdWVfbGVuOwogCWppbnQzMl90IGRhdGFfY3JjOwogCWppbnQzMl90IG5vZGVfY3JjOwotCXVpbnQ4X3QgZGF0YVswXTsKKwlfX3U4IGRhdGFbMF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgamZmczJfcmF3X3hyZWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDdmYTM3MTguLjkxNDkxOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9yYXRlbGltaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9keW5hbWljX3ByaW50ay5oPgorI2luY2x1ZGUgPGxpbnV4L2R5bmFtaWNfZGVidWcuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgogCkBAIC0zNTgsOSArMzU4LDEwIEBACiAjaWYgZGVmaW5lZChERUJVRykKICNkZWZpbmUgcHJfZGVidWcoZm10LCAuLi4pIFwKIAlwcmludGsoS0VSTl9ERUJVRyBwcl9mbXQoZm10KSwgIyNfX1ZBX0FSR1NfXykKLSNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHKQorI2VsaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19ERUJVRykKKy8qIGR5bmFtaWNfcHJfZGVidWcoKSB1c2VzIHByX2ZtdCgpIGludGVybmFsbHkgc28gd2UgZG9uJ3QgbmVlZCBpdCBoZXJlICovCiAjZGVmaW5lIHByX2RlYnVnKGZtdCwgLi4uKSBkbyB7IFwKLQlkeW5hbWljX3ByX2RlYnVnKHByX2ZtdChmbXQpLCAjI19fVkFfQVJHU19fKTsgXAorCWR5bmFtaWNfcHJfZGVidWcoZm10LCAjI19fVkFfQVJHU19fKTsgXAogCX0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBwcl9kZWJ1ZyhmbXQsIC4uLikgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCmluZGV4IDU3MGQyMDQuLjBjOGI4OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogc3RydWN0IGtlcm5lbF9zdGF0IHsKIAlzdHJ1Y3QgY3B1X3VzYWdlX3N0YXQJY3B1c3RhdDsKLSNpZm5kZWYgQ09ORklHX1NQQVJTRV9JUlEKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfSEFSRElSUVMKICAgICAgICB1bnNpZ25lZCBpbnQgaXJxc1tOUl9JUlFTXTsKICNlbmRpZgogfTsKQEAgLTQxLDcgKzQxLDcgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBucl9jb250ZXh0X3N3aXRjaGVzKHZvaWQpOwogCi0jaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCisjaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTCiAjZGVmaW5lIGtzdGF0X2lycXNfdGhpc19jcHUoaXJxKSBcCiAJKGtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSkKIApAQCAtNTIsMTYgKzUyLDE5IEBACiB7CiAJa3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CiB9Ci0jZW5kaWYKIAotCi0jaWZuZGVmIENPTkZJR19TUEFSU0VfSVJRCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KQogewogICAgICAgIHJldHVybiBrc3RhdF9jcHUoY3B1KS5pcnFzW2lycV07CiB9CiAjZWxzZQorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogZXh0ZXJuIHVuc2lnbmVkIGludCBrc3RhdF9pcnFzX2NwdSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgY3B1KTsKKyNkZWZpbmUga3N0YXRfaXJxc190aGlzX2NwdShERVNDKSBcCisJKChERVNDKS0+a3N0YXRfaXJxc1tzbXBfcHJvY2Vzc29yX2lkKCldKQorI2RlZmluZSBrc3RhdF9pbmNyX2lycXNfdGhpc19jcHUoaXJxbm8sIERFU0MpIFwKKwkoKERFU0MpLT5rc3RhdF9pcnFzW3NtcF9wcm9jZXNzb3JfaWQoKV0rKykKKwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaCBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCmluZGV4IDU0MzdhYzAuLjU4YWU4ZTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaApAQCAtNjgsMTAgKzY4LDEzIEBACiAJdW5zaWduZWQgaW50IHN0YXRlX2luX3N5c2ZzOjE7CiAJdW5zaWduZWQgaW50IHN0YXRlX2FkZF91ZXZlbnRfc2VudDoxOwogCXVuc2lnbmVkIGludCBzdGF0ZV9yZW1vdmVfdWV2ZW50X3NlbnQ6MTsKKwl1bnNpZ25lZCBpbnQgdWV2ZW50X3N1cHByZXNzOjE7CiB9OwogCiBleHRlcm4gaW50IGtvYmplY3Rfc2V0X25hbWUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKm5hbWUsIC4uLikKIAkJCSAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQocHJpbnRmLCAyLCAzKSkpOworZXh0ZXJuIGludCBrb2JqZWN0X3NldF9uYW1lX3ZhcmdzKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBjb25zdCBjaGFyICpmbXQsCisJCQkJICB2YV9saXN0IHZhcmdzKTsKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICprb2JqZWN0X25hbWUoY29uc3Qgc3RydWN0IGtvYmplY3QgKmtvYmopCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS9saW51eC9rdm0uaAppbmRleCAwNDI0MzI2Zi4uMzExYTA3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bS5oCkBAIC00OCw3ICs0OCwxMCBAQAogCSAqIEZvciBJQS02NCAoQVBJQyBtb2RlbCkgSU9BUElDMDogaXJxIDAtMjM7IElPQVBJQzE6IGlycSAyNC00Ny4uCiAJICogRm9yIFg4NiAoc3RhbmRhcmQgQVQgbW9kZSkgUElDMC8xOiBpcnEgMC0xNS4gSU9BUElDMDogMC0yMy4uCiAJICovCi0JX191MzIgaXJxOworCXVuaW9uIHsKKwkJX191MzIgaXJxOworCQlfX3MzMiBzdGF0dXM7CisJfTsKIAlfX3UzMiBsZXZlbDsKIH07CiAKQEAgLTEyNiw2ICsxMjksNyBAQAogCQkJX191NjQgZGF0YV9vZmZzZXQ7IC8qIHJlbGF0aXZlIHRvIGt2bV9ydW4gc3RhcnQgKi8KIAkJfSBpbzsKIAkJc3RydWN0IHsKKwkJCXN0cnVjdCBrdm1fZGVidWdfZXhpdF9hcmNoIGFyY2g7CiAJCX0gZGVidWc7CiAJCS8qIEtWTV9FWElUX01NSU8gKi8KIAkJc3RydWN0IHsKQEAgLTIxNywyMSArMjIxLDYgQEAKIAlfX3UzMiBpcnE7CiB9OwogCi1zdHJ1Y3Qga3ZtX2JyZWFrcG9pbnQgewotCV9fdTMyIGVuYWJsZWQ7Ci0JX191MzIgcGFkZGluZzsKLQlfX3U2NCBhZGRyZXNzOwotfTsKLQotLyogZm9yIEtWTV9ERUJVR19HVUVTVCAqLwotc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCB7Ci0JLyogaW50ICovCi0JX191MzIgZW5hYmxlZDsKLQlfX3UzMiBwYWQ7Ci0Jc3RydWN0IGt2bV9icmVha3BvaW50IGJyZWFrcG9pbnRzWzRdOwotCV9fdTMyIHNpbmdsZXN0ZXA7Ci19OwotCiAvKiBmb3IgS1ZNX0dFVF9ESVJUWV9MT0cgKi8KIHN0cnVjdCBrdm1fZGlydHlfbG9nIHsKIAlfX3UzMiBzbG90OwpAQCAtMjkyLDYgKzI4MSwxNyBAQAogCV9fdTY0IHBhcm02NDsKIH07CiAKKy8qIGZvciBLVk1fU0VUX0dVRVNUX0RFQlVHICovCisKKyNkZWZpbmUgS1ZNX0dVRVNUREJHX0VOQUJMRQkJMHgwMDAwMDAwMQorI2RlZmluZSBLVk1fR1VFU1REQkdfU0lOR0xFU1RFUAkJMHgwMDAwMDAwMgorCitzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIHsKKwlfX3UzMiBjb250cm9sOworCV9fdTMyIHBhZDsKKwlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnX2FyY2ggYXJjaDsKK307CisKICNkZWZpbmUgS1ZNX1RSQ19TSElGVCAgICAgICAgICAgMTYKIC8qCiAgKiBrdm0gdHJhY2UgY2F0ZWdvcmllcwpAQCAtMzk2LDYgKzM5Niw1NyBAQAogI2lmZGVmIF9fS1ZNX0hBVkVfVVNFUl9OTUkKICNkZWZpbmUgS1ZNX0NBUF9VU0VSX05NSSAyMgogI2VuZGlmCisjaWZkZWYgX19LVk1fSEFWRV9HVUVTVF9ERUJVRworI2RlZmluZSBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRyAyMworI2VuZGlmCisjaWZkZWYgX19LVk1fSEFWRV9QSVQKKyNkZWZpbmUgS1ZNX0NBUF9SRUlOSkVDVF9DT05UUk9MIDI0CisjZW5kaWYKKyNpZmRlZiBfX0tWTV9IQVZFX0lPQVBJQworI2RlZmluZSBLVk1fQ0FQX0lSUV9ST1VUSU5HIDI1CisjZW5kaWYKKyNkZWZpbmUgS1ZNX0NBUF9JUlFfSU5KRUNUX1NUQVRVUyAyNgorI2lmZGVmIF9fS1ZNX0hBVkVfREVWSUNFX0FTU0lHTk1FTlQKKyNkZWZpbmUgS1ZNX0NBUF9ERVZJQ0VfREVBU1NJR05NRU5UIDI3CisjZW5kaWYKKworI2lmZGVmIEtWTV9DQVBfSVJRX1JPVVRJTkcKKworc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHsKKwlfX3UzMiBpcnFjaGlwOworCV9fdTMyIHBpbjsKK307CisKK3N0cnVjdCBrdm1faXJxX3JvdXRpbmdfbXNpIHsKKwlfX3UzMiBhZGRyZXNzX2xvOworCV9fdTMyIGFkZHJlc3NfaGk7CisJX191MzIgZGF0YTsKKwlfX3UzMiBwYWQ7Cit9OworCisvKiBnc2kgcm91dGluZyBlbnRyeSB0eXBlcyAqLworI2RlZmluZSBLVk1fSVJRX1JPVVRJTkdfSVJRQ0hJUCAxCisjZGVmaW5lIEtWTV9JUlFfUk9VVElOR19NU0kgMgorCitzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IHsKKwlfX3UzMiBnc2k7CisJX191MzIgdHlwZTsKKwlfX3UzMiBmbGFnczsKKwlfX3UzMiBwYWQ7CisJdW5pb24geworCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAgaXJxY2hpcDsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZ19tc2kgbXNpOworCQlfX3UzMiBwYWRbOF07CisJfSB1OworfTsKKworc3RydWN0IGt2bV9pcnFfcm91dGluZyB7CisJX191MzIgbnI7CisJX191MzIgZmxhZ3M7CisJc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSBlbnRyaWVzWzBdOworfTsKKworI2VuZGlmCiAKIC8qCiAgKiBpb2N0bHMgZm9yIFZNIGZkcwpAQCAtNDIxLDE0ICs0NzIsMTkgQEAKICNkZWZpbmUgS1ZNX0NSRUFURV9QSVQJCSAgX0lPKEtWTUlPLCAgMHg2NCkKICNkZWZpbmUgS1ZNX0dFVF9QSVQJCSAgX0lPV1IoS1ZNSU8sIDB4NjUsIHN0cnVjdCBrdm1fcGl0X3N0YXRlKQogI2RlZmluZSBLVk1fU0VUX1BJVAkJICBfSU9SKEtWTUlPLCAgMHg2Niwgc3RydWN0IGt2bV9waXRfc3RhdGUpCisjZGVmaW5lIEtWTV9JUlFfTElORV9TVEFUVVMJICBfSU9XUihLVk1JTywgMHg2Nywgc3RydWN0IGt2bV9pcnFfbGV2ZWwpCiAjZGVmaW5lIEtWTV9SRUdJU1RFUl9DT0FMRVNDRURfTU1JTyBcCiAJCQlfSU9XKEtWTUlPLCAgMHg2Nywgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lKQogI2RlZmluZSBLVk1fVU5SRUdJU1RFUl9DT0FMRVNDRURfTU1JTyBcCiAJCQlfSU9XKEtWTUlPLCAgMHg2OCwgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lKQogI2RlZmluZSBLVk1fQVNTSUdOX1BDSV9ERVZJQ0UgX0lPUihLVk1JTywgMHg2OSwgXAogCQkJCSAgIHN0cnVjdCBrdm1fYXNzaWduZWRfcGNpX2RldikKKyNkZWZpbmUgS1ZNX1NFVF9HU0lfUk9VVElORyAgICAgICBfSU9XKEtWTUlPLCAweDZhLCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nKQogI2RlZmluZSBLVk1fQVNTSUdOX0lSUSBfSU9SKEtWTUlPLCAweDcwLCBcCiAJCQkgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9pcnEpCisjZGVmaW5lIEtWTV9SRUlOSkVDVF9DT05UUk9MICAgICAgX0lPKEtWTUlPLCAweDcxKQorI2RlZmluZSBLVk1fREVBU1NJR05fUENJX0RFVklDRSBfSU9XKEtWTUlPLCAweDcyLCBcCisJCQkJICAgICBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX3BjaV9kZXYpCiAKIC8qCiAgKiBpb2N0bHMgZm9yIHZjcHUgZmRzCkBAIC00NDAsNyArNDk2LDggQEAKICNkZWZpbmUgS1ZNX1NFVF9TUkVHUyAgICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg4NCwgc3RydWN0IGt2bV9zcmVncykKICNkZWZpbmUgS1ZNX1RSQU5TTEFURSAgICAgICAgICAgICBfSU9XUihLVk1JTywgMHg4NSwgc3RydWN0IGt2bV90cmFuc2xhdGlvbikKICNkZWZpbmUgS1ZNX0lOVEVSUlVQVCAgICAgICAgICAgICBfSU9XKEtWTUlPLCAgMHg4Niwgc3RydWN0IGt2bV9pbnRlcnJ1cHQpCi0jZGVmaW5lIEtWTV9ERUJVR19HVUVTVCAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4ODcsIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QpCisvKiBLVk1fREVCVUdfR1VFU1QgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCwgdXNlIEtWTV9TRVRfR1VFU1RfREVCVUcgaW5zdGVhZCAqLworI2RlZmluZSBLVk1fREVCVUdfR1VFU1QgICAgICAgICAgIF9fS1ZNX0RFUFJFQ0FURURfREVCVUdfR1VFU1QKICNkZWZpbmUgS1ZNX0dFVF9NU1JTICAgICAgICAgICAgICBfSU9XUihLVk1JTywgMHg4OCwgc3RydWN0IGt2bV9tc3JzKQogI2RlZmluZSBLVk1fU0VUX01TUlMgICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweDg5LCBzdHJ1Y3Qga3ZtX21zcnMpCiAjZGVmaW5lIEtWTV9TRVRfQ1BVSUQgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4OGEsIHN0cnVjdCBrdm1fY3B1aWQpCkBAIC00NjksNiArNTI2LDI5IEBACiAjZGVmaW5lIEtWTV9TRVRfTVBfU1RBVEUgICAgICAgICAgX0lPVyhLVk1JTywgIDB4OTksIHN0cnVjdCBrdm1fbXBfc3RhdGUpCiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX05NSSAqLwogI2RlZmluZSBLVk1fTk1JICAgICAgICAgICAgICAgICAgIF9JTyhLVk1JTywgIDB4OWEpCisvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1NFVF9HVUVTVF9ERUJVRyAqLworI2RlZmluZSBLVk1fU0VUX0dVRVNUX0RFQlVHICAgICAgIF9JT1coS1ZNSU8sICAweDliLCBzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnKQorCisvKgorICogRGVwcmVjYXRlZCBpbnRlcmZhY2VzCisgKi8KK3N0cnVjdCBrdm1fYnJlYWtwb2ludCB7CisJX191MzIgZW5hYmxlZDsKKwlfX3UzMiBwYWRkaW5nOworCV9fdTY0IGFkZHJlc3M7Cit9OworCitzdHJ1Y3Qga3ZtX2RlYnVnX2d1ZXN0IHsKKwlfX3UzMiBlbmFibGVkOworCV9fdTMyIHBhZDsKKwlzdHJ1Y3Qga3ZtX2JyZWFrcG9pbnQgYnJlYWtwb2ludHNbNF07CisJX191MzIgc2luZ2xlc3RlcDsKK307CisKKyNkZWZpbmUgX19LVk1fREVQUkVDQVRFRF9ERUJVR19HVUVTVCBfSU9XKEtWTUlPLCAgMHg4Nywgc3RydWN0IGt2bV9kZWJ1Z19ndWVzdCkKKworI2RlZmluZSBLVk1fSUE2NF9WQ1BVX0dFVF9TVEFDSyAgIF9JT1IoS1ZNSU8sICAweDlhLCB2b2lkICopCisjZGVmaW5lIEtWTV9JQTY0X1ZDUFVfU0VUX1NUQUNLICAgX0lPVyhLVk1JTywgIDB4OWIsIHZvaWQgKikKIAogI2RlZmluZSBLVk1fVFJDX0lOSl9WSVJRICAgICAgICAgKEtWTV9UUkNfSEFORExFUiArIDB4MDIpCiAjZGVmaW5lIEtWTV9UUkNfUkVERUxJVkVSX0VWVCAgICAoS1ZNX1RSQ19IQU5ETEVSICsgMHgwMykKQEAgLTUyMiw2ICs2MDIsNyBAQAogCiAjZGVmaW5lIEtWTV9ERVZfQVNTSUdOX0VOQUJMRV9JT01NVQkoMSA8PCAwKQogCisjZGVmaW5lIEtWTV9ERVZfSVJRX0FTU0lHTl9NU0lfQUNUSU9OCUtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJCiAjZGVmaW5lIEtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJCSgxIDw8IDApCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IGJmNmY3MDMuLjg5NGE1NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTM3LDYgKzM3LDcgQEAKICNkZWZpbmUgS1ZNX1JFUV9QRU5ESU5HX1RJTUVSICAgICAgNQogI2RlZmluZSBLVk1fUkVRX1VOSEFMVCAgICAgICAgICAgICA2CiAjZGVmaW5lIEtWTV9SRVFfTU1VX1NZTkMgICAgICAgICAgIDcKKyNkZWZpbmUgS1ZNX1JFUV9LVk1DTE9DS19VUERBVEUgICAgOAogCiAjZGVmaW5lIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRAkwCiAKQEAgLTczLDcgKzc0LDcgQEAKIAlzdHJ1Y3Qga3ZtX3J1biAqcnVuOwogCWludCBndWVzdF9tb2RlOwogCXVuc2lnbmVkIGxvbmcgcmVxdWVzdHM7Ci0Jc3RydWN0IGt2bV9ndWVzdF9kZWJ1ZyBndWVzdF9kZWJ1ZzsKKwl1bnNpZ25lZCBsb25nIGd1ZXN0X2RlYnVnOwogCWludCBmcHVfYWN0aXZlOwogCWludCBndWVzdF9mcHVfbG9hZGVkOwogCXdhaXRfcXVldWVfaGVhZF90IHdxOwpAQCAtMTA3LDYgKzEwOCwyMCBAQAogCWludCB1c2VyX2FsbG9jOwogfTsKIAorc3RydWN0IGt2bV9rZXJuZWxfaXJxX3JvdXRpbmdfZW50cnkgeworCXUzMiBnc2k7CisJaW50ICgqc2V0KShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1bnNpZ25lZCBpcnFjaGlwOworCQkJdW5zaWduZWQgcGluOworCQl9IGlycWNoaXA7CisJCXN0cnVjdCBtc2lfbXNnIG1zaTsKKwl9OworCXN0cnVjdCBsaXN0X2hlYWQgbGluazsKK307CisKIHN0cnVjdCBrdm0gewogCXN0cnVjdCBtdXRleCBsb2NrOyAvKiBwcm90ZWN0cyB0aGUgdmNwdXMgYXJyYXkgYW5kIEFQSUMgYWNjZXNzZXMgKi8KIAlzcGlubG9ja190IG1tdV9sb2NrOwpAQCAtMTI3LDYgKzE0MiwxMSBAQAogCXN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fcmluZyAqY29hbGVzY2VkX21taW9fcmluZzsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKKwlzdHJ1Y3QgbGlzdF9oZWFkIGlycV9yb3V0aW5nOyAvKiBvZiBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICovCisJc3RydWN0IGhsaXN0X2hlYWQgbWFza19ub3RpZmllcl9saXN0OworI2VuZGlmCisKICNpZmRlZiBLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUgogCXN0cnVjdCBtbXVfbm90aWZpZXIgbW11X25vdGlmaWVyOwogCXVuc2lnbmVkIGxvbmcgbW11X25vdGlmaWVyX3NlcTsKQEAgLTIzNyw3ICsyNTcsNiBAQAogCQkJCSAgIGludCB1c2VyX2FsbG9jKTsKIGxvbmcga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXZvaWQga3ZtX2FyY2hfZGVzdHJveV92bShzdHJ1Y3Qga3ZtICprdm0pOwogCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9mcHUgKmZwdSk7CiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9mcHUgKmZwdSk7CkBAIC0yNTUsOCArMjc0LDggQEAKIAkJCQkgICAgc3RydWN0IGt2bV9tcF9zdGF0ZSAqbXBfc3RhdGUpOwogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X21wc3RhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgICBzdHJ1Y3Qga3ZtX21wX3N0YXRlICptcF9zdGF0ZSk7Ci1pbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9kZWJ1Z19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJICAgIHN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgKmRiZyk7CitpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnICpkYmcpOwogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4pOwogCiBpbnQga3ZtX2FyY2hfaW5pdCh2b2lkICpvcGFxdWUpOwpAQCAtMzEwLDcgKzMyOSw2IEBACiAJaW50IGhvc3RfaXJxOwogCWJvb2wgaG9zdF9pcnFfZGlzYWJsZWQ7CiAJaW50IGd1ZXN0X2lycTsKLQlzdHJ1Y3QgbXNpX21zZyBndWVzdF9tc2k7CiAjZGVmaW5lIEtWTV9BU1NJR05FRF9ERVZfR1VFU1RfSU5UWAkoMSA8PCAwKQogI2RlZmluZSBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSQkoMSA8PCAxKQogI2RlZmluZSBLVk1fQVNTSUdORURfREVWX0hPU1RfSU5UWAkoMSA8PCA4KQpAQCAtMzIxLDggKzMzOSwyMSBAQAogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IGt2bSAqa3ZtOwogfTsKLXZvaWQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGlycSwgaW50IGxldmVsKTsKLXZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBnc2kpOworCitzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyIHsKKwl2b2lkICgqZnVuYykoc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbiwgYm9vbCBtYXNrZWQpOworCWludCBpcnE7CisJc3RydWN0IGhsaXN0X25vZGUgbGluazsKK307CisKK3ZvaWQga3ZtX3JlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKKwkJCQkgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbik7Cit2b2lkIGt2bV91bnJlZ2lzdGVyX2lycV9tYXNrX25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwKKwkJCQkgICAgICBzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uKTsKK3ZvaWQga3ZtX2ZpcmVfbWFza19ub3RpZmllcnMoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLCBib29sIG1hc2spOworCitpbnQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGlycSwgaW50IGxldmVsKTsKK3ZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpcnFjaGlwLCB1bnNpZ25lZCBwaW4pOwogdm9pZCBrdm1fcmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICAgc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyICpraWFuKTsKIHZvaWQga3ZtX3VucmVnaXN0ZXJfaXJxX2Fja19ub3RpZmllcihzdHJ1Y3Qga3ZtX2lycV9hY2tfbm90aWZpZXIgKmtpYW4pOwpAQCAtNDY0LDQgKzQ5NSwyMSBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAorCisjZGVmaW5lIEtWTV9NQVhfSVJRX1JPVVRFUyAxMDI0CisKK2ludCBrdm1fc2V0dXBfZGVmYXVsdF9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pOworaW50IGt2bV9zZXRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtLAorCQkJY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSAqZW50cmllcywKKwkJCXVuc2lnbmVkIG5yLAorCQkJdW5zaWduZWQgZmxhZ3MpOwordm9pZCBrdm1fZnJlZV9pcnFfcm91dGluZyhzdHJ1Y3Qga3ZtICprdm0pOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2ZyZWVfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKSB7fQorCisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9rdm1fdHlwZXMuaAppbmRleCA5YjZmMzk1Li4yYjgzMThjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtX3R5cGVzLmgKQEAgLTQwLDE3ICs0MCw0IEBACiAKIHR5cGVkZWYgaGZuX3QgcGZuX3Q7CiAKLXN0cnVjdCBrdm1fcGlvX3JlcXVlc3QgewotCXVuc2lnbmVkIGxvbmcgY291bnQ7Ci0JaW50IGN1cl9jb3VudDsKLQlzdHJ1Y3QgcGFnZSAqZ3Vlc3RfcGFnZXNbMl07Ci0JdW5zaWduZWQgZ3Vlc3RfcGFnZV9vZmZzZXQ7Ci0JaW50IGluOwotCWludCBwb3J0OwotCWludCBzaXplOwotCWludCBzdHJpbmc7Ci0JaW50IGRvd247Ci0JaW50IHJlcDsKLX07Ci0KICNlbmRpZiAvKiBfX0tWTV9UWVBFU19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGF0ZW5jeXRvcC5oIGIvaW5jbHVkZS9saW51eC9sYXRlbmN5dG9wLmgKaW5kZXggOTAxYzJkNi4uYjBlOTk4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sYXRlbmN5dG9wLmgKKysrIGIvaW5jbHVkZS9saW51eC9sYXRlbmN5dG9wLmgKQEAgLTksNiArOSw3IEBACiAjaWZuZGVmIF9JTkNMVURFX0dVQVJEX0xBVEVOQ1lUT1BfSF8KICNkZWZpbmUgX0lOQ0xVREVfR1VBUkRfTEFURU5DWVRPUF9IXwogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpZmRlZiBDT05GSUdfTEFURU5DWVRPUAogCiAjZGVmaW5lIExUX1NBVkVDT1VOVAkJMzIKQEAgLTI0LDcgKzI1LDE0IEBACiAKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIAotdm9pZCBhY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHVzZWNzLCBpbnQgaW50ZXIpOworZXh0ZXJuIGludCBsYXRlbmN5dG9wX2VuYWJsZWQ7Cit2b2lkIF9fYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCB1c2VjcywgaW50IGludGVyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZAorYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCB1c2VjcywgaW50IGludGVyKQoreworCWlmICh1bmxpa2VseShsYXRlbmN5dG9wX2VuYWJsZWQpKQorCQlfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kodGFzaywgdXNlY3MsIGludGVyKTsKK30KIAogdm9pZCBjbGVhcl9hbGxfbGF0ZW5jeV90cmFjaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IGRjMThiODcuLjc2MjYyZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtNzk1LDYgKzc5NSw3IEBACiAJYXRhX3Jlc2V0X2ZuX3QJCXBtcF9oYXJkcmVzZXQ7CiAJYXRhX3Bvc3RyZXNldF9mbl90CXBtcF9wb3N0cmVzZXQ7CiAJdm9pZCAoKmVycm9yX2hhbmRsZXIpKHN0cnVjdCBhdGFfcG9ydCAqYXApOworCXZvaWQgKCpsb3N0X2ludGVycnVwdCkoc3RydWN0IGF0YV9wb3J0ICphcCk7CiAJdm9pZCAoKnBvc3RfaW50ZXJuYWxfY21kKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAogCS8qCkBAIC04MzYsNiArODM3LDggQEAKIAl2b2lkICgqYm1kbWFfc3RhcnQpKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpOwogCXZvaWQgKCpibWRtYV9zdG9wKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIAl1OCAgICgqYm1kbWFfc3RhdHVzKShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKKworCXZvaWQgKCpkcmFpbl9maWZvKShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKICNlbmRpZiAvKiBDT05GSUdfQVRBX1NGRiAqLwogCiAJc3NpemVfdCAoKmVtX3Nob3cpKHN0cnVjdCBhdGFfcG9ydCAqYXAsIGNoYXIgKmJ1Zik7CkBAIC0xMDA4LDYgKzEwMTEsOSBAQAogZXh0ZXJuIGludCBhdGFfY2FibGVfaWdub3JlKHN0cnVjdCBhdGFfcG9ydCAqYXApOwogZXh0ZXJuIGludCBhdGFfY2FibGVfdW5rbm93bihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAorZXh0ZXJuIHZvaWQgYXRhX3Bpb19xdWV1ZV90YXNrKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHZvaWQgKmRhdGEsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBkZWxheSk7CisKIC8qIFRpbWluZyBoZWxwZXJzICovCiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9waW9fbmVlZF9pb3JkeShjb25zdCBzdHJ1Y3QgYXRhX2RldmljZSAqKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgYXRhX3RpbWluZyAqYXRhX3RpbWluZ19maW5kX21vZGUodTggeGZlcl9tb2RlKTsKQEAgLTE1NzIsNiArMTU3OCw3IEBACiBleHRlcm4gdW5zaWduZWQgaW50IGF0YV9zZmZfaG9zdF9pbnRyKHN0cnVjdCBhdGFfcG9ydCAqYXAsCiAJCQkJICAgICAgc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gaXJxcmV0dXJuX3QgYXRhX3NmZl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKK2V4dGVybiB2b2lkIGF0YV9zZmZfbG9zdF9pbnRlcnJ1cHQoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBleHRlcm4gdm9pZCBhdGFfc2ZmX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiBpbnQgYXRhX3NmZl9wcmVyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpOwpAQCAtMTU4NCw2ICsxNTkxLDcgQEAKIGV4dGVybiBpbnQgc2F0YV9zZmZfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfcG9zdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzc2VzKTsKK2V4dGVybiB2b2lkIGF0YV9zZmZfZHJhaW5fZmlmbyhzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIGV4dGVybiB2b2lkIGF0YV9zZmZfcG9zdF9pbnRlcm5hbF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBleHRlcm4gaW50IGF0YV9zZmZfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG1faW50ZXJmYWNlLmggYi9pbmNsdWRlL2xpbnV4L2xtX2ludGVyZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWQ4ZmExLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvbG1faW50ZXJmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgU2lzdGluYSBTb2Z0d2FyZSwgSW5jLiAgMTk5Ny0yMDAzIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBSZWQgSGF0LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaXMgbWFkZSBhdmFpbGFibGUgdG8gYW55b25lIHdpc2hpbmcgdG8gdXNlLAotICogbW9kaWZ5LCBjb3B5LCBvciByZWRpc3RyaWJ1dGUgaXQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCi0gKi8KLQotI2lmbmRlZiBfX0xNX0lOVEVSRkFDRV9ET1RfSF9fCi0jZGVmaW5lIF9fTE1fSU5URVJGQUNFX0RPVF9IX18KLQotCi10eXBlZGVmIHZvaWQgKCpsbV9jYWxsYmFja190KSAodm9pZCAqcHRyLCB1bnNpZ25lZCBpbnQgdHlwZSwgdm9pZCAqZGF0YSk7Ci0KLS8qCi0gKiBsbV9tb3VudCgpIGZsYWdzCi0gKgotICogTE1fTUZMQUdfU1BFQ1RBVE9SCi0gKiBHRlMgaXMgYXNraW5nIHRvIGpvaW4gdGhlIGZpbGVzeXN0ZW0ncyBsb2Nrc3BhY2UsIGJ1dCBpdCBkb2Vzbid0IHdhbnQgdG8KLSAqIG1vZGlmeSB0aGUgZmlsZXN5c3RlbS4gIFRoZSBsb2NrIG1vZHVsZSBzaG91bGRuJ3QgYXNzaWduIGEgam91cm5hbCB0byB0aGUgRlMKLSAqIG1vdW50LiAgSXQgc2hvdWxkbid0IHNlbmQgcmVjb3ZlcnkgY2FsbGJhY2tzIHRvIHRoZSBGUyBtb3VudC4gIElmIHRoZSBub2RlCi0gKiBkaWVzIG9yIHdpdGhkcmF3cywgYWxsIGxvY2tzIGNhbiBiZSB3aXBlZCBpbW1lZGlhdGVseS4KLSAqCi0gKiBMTV9NRkxBR19DT05WX05PRFJPUAotICogRG8gbm90IGFsbG93IHRoZSBkbG0gdG8gaW50ZXJuYWxseSByZXNvbHZlIGNvbnZlcnNpb24gZGVhZGxvY2tzIGJ5IGRlbW90aW5nCi0gKiB0aGUgbG9jayB0byB1bmxvY2tlZCBhbmQgdGhlbiByZWFjcXVpcmluZyBpdCBpbiB0aGUgcmVxdWVzdGVkIG1vZGUuIEluc3RlYWQsCi0gKiBpdCBzaG91bGQgY2FuY2VsIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gTE1fT1VUX0NPTlZfREVBRExLLgotICovCi0KLSNkZWZpbmUgTE1fTUZMQUdfU1BFQ1RBVE9SCTB4MDAwMDAwMDEKLSNkZWZpbmUgTE1fTUZMQUdfQ09OVl9OT0RST1AJMHgwMDAwMDAwMgotCi0vKgotICogbG1fbG9ja3N0cnVjdCBmbGFncwotICoKLSAqIExNX0xTRkxBR19MT0NBTAotICogVGhlIGxvY2tfbm9sb2NrIG1vZHVsZSByZXR1cm5zIExNX0xTRkxBR19MT0NBTCB0byBHRlMsIGluZGljYXRpbmcgdGhhdCBHRlMKLSAqIGNhbiBtYWtlIHNpbmdsZS1ub2RlIG9wdGltaXphdGlvbnMuCi0gKi8KLQotI2RlZmluZSBMTV9MU0ZMQUdfTE9DQUwJCTB4MDAwMDAwMDEKLQotLyoKLSAqIGxtX2xvY2tuYW1lIHR5cGVzCi0gKi8KLQotI2RlZmluZSBMTV9UWVBFX1JFU0VSVkVECTB4MDAKLSNkZWZpbmUgTE1fVFlQRV9OT05ESVNLCQkweDAxCi0jZGVmaW5lIExNX1RZUEVfSU5PREUJCTB4MDIKLSNkZWZpbmUgTE1fVFlQRV9SR1JQCQkweDAzCi0jZGVmaW5lIExNX1RZUEVfTUVUQQkJMHgwNAotI2RlZmluZSBMTV9UWVBFX0lPUEVOCQkweDA1Ci0jZGVmaW5lIExNX1RZUEVfRkxPQ0sJCTB4MDYKLSNkZWZpbmUgTE1fVFlQRV9QTE9DSwkJMHgwNwotI2RlZmluZSBMTV9UWVBFX1FVT1RBCQkweDA4Ci0jZGVmaW5lIExNX1RZUEVfSk9VUk5BTAkJMHgwOQotCi0vKgotICogbG1fbG9jaygpIHN0YXRlcwotICoKLSAqIFNIQVJFRCBpcyBjb21wYXRpYmxlIHdpdGggU0hBUkVELCBub3Qgd2l0aCBERUZFUlJFRCBvciBFWC4KLSAqIERFRkVSUkVEIGlzIGNvbXBhdGlibGUgd2l0aCBERUZFUlJFRCwgbm90IHdpdGggU0hBUkVEIG9yIEVYLgotICovCi0KLSNkZWZpbmUgTE1fU1RfVU5MT0NLRUQJCTAKLSNkZWZpbmUgTE1fU1RfRVhDTFVTSVZFCQkxCi0jZGVmaW5lIExNX1NUX0RFRkVSUkVECQkyCi0jZGVmaW5lIExNX1NUX1NIQVJFRAkJMwotCi0vKgotICogbG1fbG9jaygpIGZsYWdzCi0gKgotICogTE1fRkxBR19UUlkKLSAqIERvbid0IHdhaXQgdG8gYWNxdWlyZSB0aGUgbG9jayBpZiBpdCBjYW4ndCBiZSBncmFudGVkIGltbWVkaWF0ZWx5LgotICoKLSAqIExNX0ZMQUdfVFJZXzFDQgotICogU2VuZCBvbmUgYmxvY2tpbmcgY2FsbGJhY2sgaWYgVFJZIGlzIHNldCBhbmQgdGhlIGxvY2sgaXMgbm90IGdyYW50ZWQuCi0gKgotICogTE1fRkxBR19OT0VYUAotICogR0ZTIHNldHMgdGhpcyBmbGFnIG9uIGxvY2sgcmVxdWVzdHMgaXQgbWFrZXMgd2hpbGUgZG9pbmcgam91cm5hbCByZWNvdmVyeS4KLSAqIFRoZXNlIHNwZWNpYWwgcmVxdWVzdHMgc2hvdWxkIG5vdCBiZSBibG9ja2VkIGR1ZSB0byB0aGUgcmVjb3ZlcnkgbGlrZQotICogb3JkaW5hcnkgbG9ja3Mgd291bGQgYmUuCi0gKgotICogTE1fRkxBR19BTlkKLSAqIEEgU0hBUkVEIHJlcXVlc3QgbWF5IGFsc28gYmUgZ3JhbnRlZCBpbiBERUZFUlJFRCwgb3IgYSBERUZFUlJFRCByZXF1ZXN0IG1heQotICogYWxzbyBiZSBncmFudGVkIGluIFNIQVJFRC4gIFRoZSBwcmVmZXJyZWQgc3RhdGUgaXMgd2hpY2hldmVyIGlzIGNvbXBhdGlibGUKLSAqIHdpdGggb3RoZXIgZ3JhbnRlZCBsb2Nrcywgb3IgdGhlIHNwZWNpZmllZCBzdGF0ZSBpZiBubyBvdGhlciBsb2NrcyBleGlzdC4KLSAqCi0gKiBMTV9GTEFHX1BSSU9SSVRZCi0gKiBPdmVycmlkZSBmYWlybmVzcyBjb25zaWRlcmF0aW9ucy4gIFN1cHBvc2UgYSBsb2NrIGlzIGhlbGQgaW4gYSBzaGFyZWQgc3RhdGUKLSAqIGFuZCB0aGVyZSBpcyBhIHBlbmRpbmcgcmVxdWVzdCBmb3IgdGhlIGRlZmVycmVkIHN0YXRlLiAgQSBzaGFyZWQgbG9jawotICogcmVxdWVzdCB3aXRoIHRoZSBwcmlvcml0eSBmbGFnIHdvdWxkIGJlIGFsbG93ZWQgdG8gYnlwYXNzIHRoZSBkZWZlcnJlZAotICogcmVxdWVzdCBhbmQgZGlyZWN0bHkgam9pbiB0aGUgb3RoZXIgc2hhcmVkIGxvY2suICBBIHNoYXJlZCBsb2NrIHJlcXVlc3QKLSAqIHdpdGhvdXQgdGhlIHByaW9yaXR5IGZsYWcgbWlnaHQgYmUgZm9yY2VkIHRvIHdhaXQgdW50aWwgdGhlIGRlZmVycmVkCi0gKiByZXF1ZXN0ZWQgaGFkIGFjcXVpcmVkIGFuZCByZWxlYXNlZCB0aGUgbG9jay4KLSAqLwotCi0jZGVmaW5lIExNX0ZMQUdfVFJZCQkweDAwMDAwMDAxCi0jZGVmaW5lIExNX0ZMQUdfVFJZXzFDQgkJMHgwMDAwMDAwMgotI2RlZmluZSBMTV9GTEFHX05PRVhQCQkweDAwMDAwMDA0Ci0jZGVmaW5lIExNX0ZMQUdfQU5ZCQkweDAwMDAwMDA4Ci0jZGVmaW5lIExNX0ZMQUdfUFJJT1JJVFkJMHgwMDAwMDAxMAotCi0vKgotICogbG1fbG9jaygpIGFuZCBsbV9hc3luY19jYiByZXR1cm4gZmxhZ3MKLSAqCi0gKiBMTV9PVVRfU1RfTUFTSwotICogTWFza3MgdGhlIGxvd2VyIHR3byBiaXRzIG9mIGxvY2sgc3RhdGUgaW4gdGhlIHJldHVybmVkIHZhbHVlLgotICoKLSAqIExNX09VVF9DQUNIRUFCTEUKLSAqIFRoZSBsb2NrIGhhc24ndCBiZWVuIHJlbGVhc2VkIHNvIEdGUyBjYW4gY29udGludWUgdG8gY2FjaGUgZGF0YSBmb3IgaXQuCi0gKgotICogTE1fT1VUX0NBTkNFTEVECi0gKiBUaGUgbG9jayByZXF1ZXN0IHdhcyBjYW5jZWxlZC4KLSAqCi0gKiBMTV9PVVRfQVNZTkMKLSAqIFRoZSByZXN1bHQgb2YgdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXR1cm5lZCBpbiBhbiBMTV9DQl9BU1lOQyBjYWxsYmFjay4KLSAqCi0gKiBMTV9PVVRfQ09OVl9ERUFETEsKLSAqIFRoZSBsb2NrIHJlcXVlc3Qgd2FzIGNhbmNlbGVkIGRvIHRvIGEgY29udmVyc2lvbiBkZWFkbG9jay4KLSAqLwotCi0jZGVmaW5lIExNX09VVF9TVF9NQVNLCQkweDAwMDAwMDAzCi0jZGVmaW5lIExNX09VVF9DQU5DRUxFRAkJMHgwMDAwMDAwOAotI2RlZmluZSBMTV9PVVRfQVNZTkMJCTB4MDAwMDAwODAKLSNkZWZpbmUgTE1fT1VUX0VSUk9SCQkweDAwMDAwMTAwCi0KLS8qCi0gKiBsbV9jYWxsYmFja190IHR5cGVzCi0gKgotICogTE1fQ0JfTkVFRF9FIExNX0NCX05FRURfRCBMTV9DQl9ORUVEX1MKLSAqIEJsb2NraW5nIGNhbGxiYWNrLCBhIHJlbW90ZSBub2RlIGlzIHJlcXVlc3RpbmcgdGhlIGdpdmVuIGxvY2sgaW4KLSAqIEVYQ0xVU0lWRSwgREVGRVJSRUQsIG9yIFNIQVJFRC4KLSAqCi0gKiBMTV9DQl9ORUVEX1JFQ09WRVJZCi0gKiBUaGUgZ2l2ZW4gam91cm5hbCBuZWVkcyB0byBiZSByZWNvdmVyZWQuCi0gKgotICogTE1fQ0JfQVNZTkMKLSAqIFRoZSBnaXZlbiBsb2NrIGhhcyBiZWVuIGdyYW50ZWQuCi0gKi8KLQotI2RlZmluZSBMTV9DQl9ORUVEX0UJCTI1NwotI2RlZmluZSBMTV9DQl9ORUVEX0QJCTI1OAotI2RlZmluZSBMTV9DQl9ORUVEX1MJCTI1OQotI2RlZmluZSBMTV9DQl9ORUVEX1JFQ09WRVJZCTI2MAotI2RlZmluZSBMTV9DQl9BU1lOQwkJMjYyCi0KLS8qCi0gKiBsbV9yZWNvdmVyeV9kb25lKCkgbWVzc2FnZXMKLSAqLwotCi0jZGVmaW5lIExNX1JEX0dBVkVVUAkJMzA4Ci0jZGVmaW5lIExNX1JEX1NVQ0NFU1MJCTMwOQotCi0KLXN0cnVjdCBsbV9sb2NrbmFtZSB7Ci0JdTY0IGxuX251bWJlcjsKLQl1bnNpZ25lZCBpbnQgbG5fdHlwZTsKLX07Ci0KLSNkZWZpbmUgbG1fbmFtZV9lcXVhbChuYW1lMSwgbmFtZTIpIFwKLQkoKChuYW1lMSktPmxuX251bWJlciA9PSAobmFtZTIpLT5sbl9udW1iZXIpICYmIFwKLQkgKChuYW1lMSktPmxuX3R5cGUgPT0gKG5hbWUyKS0+bG5fdHlwZSkpIFwKLQotc3RydWN0IGxtX2FzeW5jX2NiIHsKLQlzdHJ1Y3QgbG1fbG9ja25hbWUgbGNfbmFtZTsKLQlpbnQgbGNfcmV0OwotfTsKLQotc3RydWN0IGxtX2xvY2tzdHJ1Y3Q7Ci0KLXN0cnVjdCBsbV9sb2Nrb3BzIHsKLQljb25zdCBjaGFyICpsbV9wcm90b19uYW1lOwotCi0JLyoKLQkgKiBNb3VudC9Vbm1vdW50Ci0JICovCi0KLQlpbnQgKCpsbV9tb3VudCkgKGNoYXIgKnRhYmxlX25hbWUsIGNoYXIgKmhvc3RfZGF0YSwKLQkJCSBsbV9jYWxsYmFja190IGNiLCB2b2lkICpjYl9kYXRhLAotCQkJIHVuc2lnbmVkIGludCBtaW5fbHZiX3NpemUsIGludCBmbGFncywKLQkJCSBzdHJ1Y3QgbG1fbG9ja3N0cnVjdCAqbG9ja3N0cnVjdCwKLQkJCSBzdHJ1Y3Qga29iamVjdCAqZnNrb2JqKTsKLQotCXZvaWQgKCpsbV9vdGhlcnNfbWF5X21vdW50KSAodm9pZCAqbG9ja3NwYWNlKTsKLQotCXZvaWQgKCpsbV91bm1vdW50KSAodm9pZCAqbG9ja3NwYWNlKTsKLQotCXZvaWQgKCpsbV93aXRoZHJhdykgKHZvaWQgKmxvY2tzcGFjZSk7Ci0KLQkvKgotCSAqIExvY2sgb3JpZW50ZWQgb3BlcmF0aW9ucwotCSAqLwotCi0JaW50ICgqbG1fZ2V0X2xvY2spICh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwgdm9pZCAqKmxvY2twKTsKLQotCXZvaWQgKCpsbV9wdXRfbG9jaykgKHZvaWQgKmxvY2spOwotCi0JdW5zaWduZWQgaW50ICgqbG1fbG9jaykgKHZvaWQgKmxvY2ssIHVuc2lnbmVkIGludCBjdXJfc3RhdGUsCi0JCQkJIHVuc2lnbmVkIGludCByZXFfc3RhdGUsIHVuc2lnbmVkIGludCBmbGFncyk7Ci0KLQl1bnNpZ25lZCBpbnQgKCpsbV91bmxvY2spICh2b2lkICpsb2NrLCB1bnNpZ25lZCBpbnQgY3VyX3N0YXRlKTsKLQotCXZvaWQgKCpsbV9jYW5jZWwpICh2b2lkICpsb2NrKTsKLQotCWludCAoKmxtX2hvbGRfbHZiKSAodm9pZCAqbG9jaywgY2hhciAqKmx2YnApOwotCXZvaWQgKCpsbV91bmhvbGRfbHZiKSAodm9pZCAqbG9jaywgY2hhciAqbHZiKTsKLQotCS8qCi0JICogUG9zaXggTG9jayBvcmllbnRlZCBvcGVyYXRpb25zCi0JICovCi0KLQlpbnQgKCpsbV9wbG9ja19nZXQpICh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKLQotCWludCAoKmxtX3Bsb2NrKSAodm9pZCAqbG9ja3NwYWNlLCBzdHJ1Y3QgbG1fbG9ja25hbWUgKm5hbWUsCi0JCQkgc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKLQotCWludCAoKmxtX3B1bmxvY2spICh2b2lkICpsb2Nrc3BhY2UsIHN0cnVjdCBsbV9sb2NrbmFtZSAqbmFtZSwKLQkJCSAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7Ci0KLQkvKgotCSAqIENsaWVudCBvcmllbnRlZCBvcGVyYXRpb25zCi0JICovCi0KLQl2b2lkICgqbG1fcmVjb3ZlcnlfZG9uZSkgKHZvaWQgKmxvY2tzcGFjZSwgdW5zaWduZWQgaW50IGppZCwKLQkJCQkgIHVuc2lnbmVkIGludCBtZXNzYWdlKTsKLQotCXN0cnVjdCBtb2R1bGUgKmxtX293bmVyOwotfTsKLQotLyoKLSAqIGxtX21vdW50KCkgcmV0dXJuIHZhbHVlcwotICoKLSAqIGxzX2ppZCAtIHRoZSBqb3VybmFsIElEIHRoaXMgbm9kZSBzaG91bGQgdXNlCi0gKiBsc19maXJzdCAtIHRoaXMgbm9kZSBpcyB0aGUgZmlyc3QgdG8gbW91bnQgdGhlIGZpbGUgc3lzdGVtCi0gKiBsc19sdmJfc2l6ZSAtIHNpemUgaW4gYnl0ZXMgb2YgbG9jayB2YWx1ZSBibG9ja3MKLSAqIGxzX2xvY2tzcGFjZSAtIGxvY2sgbW9kdWxlJ3MgY29udGV4dCBmb3IgdGhpcyBmaWxlIHN5c3RlbQotICogbHNfb3BzIC0gbG9jayBtb2R1bGUncyBmdW5jdGlvbnMKLSAqIGxzX2ZsYWdzIC0gbG9jayBtb2R1bGUgZmVhdHVyZXMKLSAqLwotCi1zdHJ1Y3QgbG1fbG9ja3N0cnVjdCB7Ci0JdW5zaWduZWQgaW50IGxzX2ppZDsKLQl1bnNpZ25lZCBpbnQgbHNfZmlyc3Q7Ci0JdW5zaWduZWQgaW50IGxzX2x2Yl9zaXplOwotCXZvaWQgKmxzX2xvY2tzcGFjZTsKLQljb25zdCBzdHJ1Y3QgbG1fbG9ja29wcyAqbHNfb3BzOwotCWludCBsc19mbGFnczsKLX07Ci0KLS8qCi0gKiBMb2NrIG1vZHVsZSBib3R0b20gaW50ZXJmYWNlLiAgQSBsb2NrIG1vZHVsZSBtYWtlcyBpdHNlbGYgYXZhaWxhYmxlIHRvIEdGUwotICogd2l0aCB0aGVzZSBmdW5jdGlvbnMuCi0gKi8KLQotaW50IGdmczJfcmVnaXN0ZXJfbG9ja3Byb3RvKGNvbnN0IHN0cnVjdCBsbV9sb2Nrb3BzICpwcm90byk7Ci12b2lkIGdmczJfdW5yZWdpc3Rlcl9sb2NrcHJvdG8oY29uc3Qgc3RydWN0IGxtX2xvY2tvcHMgKnByb3RvKTsKLQotLyoKLSAqIExvY2sgbW9kdWxlIHRvcCBpbnRlcmZhY2UuICBHRlMgY2FsbHMgdGhlc2UgZnVuY3Rpb25zIHdoZW4gbW91bnRpbmcgb3IKLSAqIHVubW91bnRpbmcgYSBmaWxlIHN5c3RlbS4KLSAqLwotCi1pbnQgZ2ZzMl9tb3VudF9sb2NrcHJvdG8oY2hhciAqcHJvdG9fbmFtZSwgY2hhciAqdGFibGVfbmFtZSwgY2hhciAqaG9zdF9kYXRhLAotCQkJIGxtX2NhbGxiYWNrX3QgY2IsIHZvaWQgKmNiX2RhdGEsCi0JCQkgdW5zaWduZWQgaW50IG1pbl9sdmJfc2l6ZSwgaW50IGZsYWdzLAotCQkJIHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0LAotCQkJIHN0cnVjdCBrb2JqZWN0ICpmc2tvYmopOwotCi12b2lkIGdmczJfdW5tb3VudF9sb2NrcHJvdG8oc3RydWN0IGxtX2xvY2tzdHJ1Y3QgKmxvY2tzdHJ1Y3QpOwotCi12b2lkIGdmczJfd2l0aGRyYXdfbG9ja3Byb3RvKHN0cnVjdCBsbV9sb2Nrc3RydWN0ICpsb2Nrc3RydWN0KTsKLQotI2VuZGlmIC8qIF9fTE1fSU5URVJGQUNFX0RPVF9IX18gKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXBsZS5oIGIvaW5jbHVkZS9saW51eC9tYXBsZS5oCmluZGV4IGMyM2QzZjUuLmQ5YTUxYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFwbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21hcGxlLmgKQEAgLTgsMzMgKzgsNDkgQEAKIAogLyogTWFwbGUgQnVzIGNvbW1hbmQgYW5kIHJlc3BvbnNlIGNvZGVzICovCiBlbnVtIG1hcGxlX2NvZGUgewotCU1BUExFX1JFU1BPTlNFX0ZJTEVFUlIgPSAtNSwKLQlNQVBMRV9SRVNQT05TRV9BR0FJTiA9IC00LAkvKiByZXF1ZXN0IHNob3VsZCBiZSByZXRyYW5zbWl0dGVkICovCi0JTUFQTEVfUkVTUE9OU0VfQkFEQ01EID0gLTMsCi0JTUFQTEVfUkVTUE9OU0VfQkFERlVOQyA9IC0yLAotCU1BUExFX1JFU1BPTlNFX05PTkUgPSAtMSwJLyogdW5pdCBkaWRuJ3QgcmVzcG9uZCBhdCBhbGwgKi8KLQlNQVBMRV9DT01NQU5EX0RFVklORk8gPSAxLAotCU1BUExFX0NPTU1BTkRfQUxMSU5GTyA9IDIsCi0JTUFQTEVfQ09NTUFORF9SRVNFVCA9IDMsCi0JTUFQTEVfQ09NTUFORF9LSUxMID0gNCwKLQlNQVBMRV9SRVNQT05TRV9ERVZJTkZPID0gNSwKLQlNQVBMRV9SRVNQT05TRV9BTExJTkZPID0gNiwKLQlNQVBMRV9SRVNQT05TRV9PSyA9IDcsCi0JTUFQTEVfUkVTUE9OU0VfREFUQVRSRiA9IDgsCi0JTUFQTEVfQ09NTUFORF9HRVRDT05EID0gOSwKLQlNQVBMRV9DT01NQU5EX0dFVE1JTkZPID0gMTAsCi0JTUFQTEVfQ09NTUFORF9CUkVBRCA9IDExLAotCU1BUExFX0NPTU1BTkRfQldSSVRFID0gMTIsCi0JTUFQTEVfQ09NTUFORF9TRVRDT05EID0gMTQKKwlNQVBMRV9SRVNQT05TRV9GSUxFRVJSID0JLTUsCisJTUFQTEVfUkVTUE9OU0VfQUdBSU4sCS8qIHJldHJhbnNtaXQgKi8KKwlNQVBMRV9SRVNQT05TRV9CQURDTUQsCisJTUFQTEVfUkVTUE9OU0VfQkFERlVOQywKKwlNQVBMRV9SRVNQT05TRV9OT05FLAkvKiB1bml0IGRpZG4ndCByZXNwb25kKi8KKwlNQVBMRV9DT01NQU5EX0RFVklORk8gPQkJMSwKKwlNQVBMRV9DT01NQU5EX0FMTElORk8sCisJTUFQTEVfQ09NTUFORF9SRVNFVCwKKwlNQVBMRV9DT01NQU5EX0tJTEwsCisJTUFQTEVfUkVTUE9OU0VfREVWSU5GTywKKwlNQVBMRV9SRVNQT05TRV9BTExJTkZPLAorCU1BUExFX1JFU1BPTlNFX09LLAorCU1BUExFX1JFU1BPTlNFX0RBVEFUUkYsCisJTUFQTEVfQ09NTUFORF9HRVRDT05ELAorCU1BUExFX0NPTU1BTkRfR0VUTUlORk8sCisJTUFQTEVfQ09NTUFORF9CUkVBRCwKKwlNQVBMRV9DT01NQU5EX0JXUklURSwKKwlNQVBMRV9DT01NQU5EX0JTWU5DLAorCU1BUExFX0NPTU1BTkRfU0VUQ09ORCwKKwlNQVBMRV9DT01NQU5EX01JQ0NPTlRST0wKK307CisKK2VudW0gbWFwbGVfZmlsZV9lcnJvcnMgeworCU1BUExFX0ZJTEVFUlJfSU5WQUxJRF9QQVJUSVRJT04gPQkweDAxMDAwMDAwLAorCU1BUExFX0ZJTEVFUlJfUEhBU0VfRVJST1IgPQkJMHgwMjAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX0lOVkFMSURfQkxPQ0sgPQkJMHgwNDAwMDAwMCwKKwlNQVBMRV9GSUxFRVJSX1dSSVRFX0VSUk9SID0JCTB4MDgwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9JTlZBTElEX1dSSVRFX0xFTkdUSCA9CTB4MTAwMDAwMDAsCisJTUFQTEVfRklMRUVSUl9CQURfQ1JDID0gCQkweDIwMDAwMDAwCit9OworCitzdHJ1Y3QgbWFwbGVfYnVmZmVyIHsKKwljaGFyIGJ1ZnhbMHg0MDBdOworCXZvaWQgKmJ1ZjsKIH07CiAKIHN0cnVjdCBtYXBsZXEgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3QgbWFwbGVfZGV2aWNlICpkZXY7Ci0Jdm9pZCAqc2VuZGJ1ZiwgKnJlY3ZidWYsICpyZWN2YnVmZGNzcDsKKwlzdHJ1Y3QgbWFwbGVfYnVmZmVyICpyZWN2YnVmOworCXZvaWQgKnNlbmRidWYsICpyZWN2YnVmX3AyOwogCXVuc2lnbmVkIGNoYXIgbGVuZ3RoOwogCWVudW0gbWFwbGVfY29kZSBjb21tYW5kOwotCXN0cnVjdCBtdXRleCBtdXRleDsKIH07CiAKIHN0cnVjdCBtYXBsZV9kZXZpbmZvIHsKQEAgLTUyLDExICs2OCwxNSBAQAogCXN0cnVjdCBtYXBsZV9kcml2ZXIgKmRyaXZlcjsKIAlzdHJ1Y3QgbWFwbGVxICptcTsKIAl2b2lkICgqY2FsbGJhY2spIChzdHJ1Y3QgbWFwbGVxICogbXEpOworCXZvaWQgKCpmaWxlZXJyX2hhbmRsZXIpKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYsIHZvaWQgKnJlY3ZidWYpOworCWludCAoKmNhbl91bmxvYWQpKHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpOwogCXVuc2lnbmVkIGxvbmcgd2hlbiwgaW50ZXJ2YWwsIGZ1bmN0aW9uOwogCXN0cnVjdCBtYXBsZV9kZXZpbmZvIGRldmluZm87CiAJdW5zaWduZWQgY2hhciBwb3J0LCB1bml0OwogCWNoYXIgcHJvZHVjdF9uYW1lWzMyXTsKIAljaGFyIHByb2R1Y3RfbGljZW5jZVs2NF07CisJYXRvbWljX3QgYnVzeTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBtYXBsZV93YWl0OwogCXN0cnVjdCBkZXZpY2UgZGV2OwogfTsKIApAQCAtNzIsNyArOTIsNyBAQAogaW50IG1hcGxlX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgbWFwbGVfZHJpdmVyICopOwogdm9pZCBtYXBsZV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbWFwbGVfZHJpdmVyICopOwogCi1pbnQgbWFwbGVfYWRkX3BhY2tldF9zbGVlcHMoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdTMyIGZ1bmN0aW9uLAoraW50IG1hcGxlX2FkZF9wYWNrZXQoc3RydWN0IG1hcGxlX2RldmljZSAqbWRldiwgdTMyIGZ1bmN0aW9uLAogCXUzMiBjb21tYW5kLCB1MzIgbGVuZ3RoLCB2b2lkICpkYXRhKTsKIHZvaWQgbWFwbGVfY2xlYXJfZGV2KHN0cnVjdCBtYXBsZV9kZXZpY2UgKm1kZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmggYi9pbmNsdWRlL2xpbnV4L21hdHJveGZiLmgKaW5kZXggNDA0ZjY3OC4uMjIwMzEyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tYXRyb3hmYi5oCisrKyBiL2luY2x1ZGUvbGludXgvbWF0cm94ZmIuaApAQCAtMzcsNyArMzcsNyBAQAogICBNQVRST1hGQl9DSURfTEFTVAogfTsKIAotI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgdV9pbnQzMl90KQorI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgX191MzIpCiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvYXVkaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oCmluZGV4IGFmOTVhMWQuLmQ4OTlkYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9hdWRpby5oCkBAIC00OTAsNiArNDkwLDcgQEAKIC8qCiAgKiBSMjMxICgweEU3KSAtIEphY2sgU3RhdHVzCiAgKi8KKyNkZWZpbmUgV004MzUwX0pBQ0tfTF9MVkwJCQkweDA4MDAKICNkZWZpbmUgV004MzUwX0pBQ0tfUl9MVkwgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMAogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204NDAwLWF1ZGlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaAppbmRleCBiNjY0MGUwLi5lMDZlZDNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTg0MDAtYXVkaW8uaApAQCAtMTE4MSw2ICsxMTgxLDcgQEAKICNkZWZpbmUgV004NDAwX0ZMTF9PVVRESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMX09VVERJViAtIFsyOjBdICovCiAjZGVmaW5lIFdNODQwMF9GTExfT1VURElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEZMTF9PVVRESVYgLSBbMjowXSAqLwogCitzdHJ1Y3Qgd204NDAwOwogdm9pZCB3bTg0MDBfcmVzZXRfY29kZWNfcmVnX2NhY2hlKHN0cnVjdCB3bTg0MDAgKndtODQwMCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oCmluZGV4IGNmOWM2NzkuLjBmODIyOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvY21kLmgKQEAgLTU1LDYgKzU1LDcgQEAKIAlNTFg0X0NNRF9DTE9TRV9QT1JUCSA9IDB4YSwKIAlNTFg0X0NNRF9RVUVSWV9IQ0EJID0gMHhiLAogCU1MWDRfQ01EX1FVRVJZX1BPUlQJID0gMHg0MywKKwlNTFg0X0NNRF9TRU5TRV9QT1JUCSA9IDB4NGQsCiAJTUxYNF9DTURfU0VUX1BPUlQJID0gMHhjLAogCU1MWDRfQ01EX0FDQ0VTU19ERFIJID0gMHgyZSwKIAlNTFg0X0NNRF9NQVBfSUNNCSA9IDB4ZmZhLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCmluZGV4IDhmNjU5Y2MuLjNhZmY4YTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKQEAgLTE1NSw4ICsxNTUsOSBAQAogfTsKIAogZW51bSBtbHg0X3BvcnRfdHlwZSB7Ci0JTUxYNF9QT1JUX1RZUEVfSUIJPSAxIDw8IDAsCi0JTUxYNF9QT1JUX1RZUEVfRVRICT0gMSA8PCAxLAorCU1MWDRfUE9SVF9UWVBFX0lCCT0gMSwKKwlNTFg0X1BPUlRfVFlQRV9FVEgJPSAyLAorCU1MWDRfUE9SVF9UWVBFX0FVVE8JPSAzCiB9OwogCiBlbnVtIG1seDRfc3BlY2lhbF92bGFuX2lkeCB7CkBAIC0yMzcsNiArMjM4LDcgQEAKIAllbnVtIG1seDRfcG9ydF90eXBlCXBvcnRfdHlwZVtNTFg0X01BWF9QT1JUUyArIDFdOwogCXU4CQkJc3VwcG9ydGVkX3R5cGVbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIAl1MzIJCQlwb3J0X21hc2s7CisJZW51bSBtbHg0X3BvcnRfdHlwZQlwb3NzaWJsZV90eXBlW01MWDRfTUFYX1BPUlRTICsgMV07CiB9OwogCiBzdHJ1Y3QgbWx4NF9idWZfbGlzdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAppbmRleCBmZGU4NjY3Li4xYmY1OTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTQ1NCw0ICs0NTQsMTMgQEAKIAogI2RlZmluZSBETUlfTUFUQ0goYSwgYikJeyBhLCBiIH0KIAorI2RlZmluZSBQTEFURk9STV9OQU1FX1NJWkUJMjAKKyNkZWZpbmUgUExBVEZPUk1fTU9EVUxFX1BSRUZJWAkicGxhdGZvcm06IgorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHsKKwljaGFyIG5hbWVbUExBVEZPUk1fTkFNRV9TSVpFXTsKKwlrZXJuZWxfdWxvbmdfdCBkcml2ZXJfZGF0YQorCQkJX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2Yoa2VybmVsX3Vsb25nX3QpKSkpOworfTsKKwogI2VuZGlmIC8qIExJTlVYX01PRF9ERVZJQ0VUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vdW50LmggYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKaW5kZXggY2FiMmE4NS4uNTFmNTVmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb3VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW91bnQuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBNTlRfTk9ESVJBVElNRQkweDEwCiAjZGVmaW5lIE1OVF9SRUxBVElNRQkweDIwCiAjZGVmaW5lIE1OVF9SRUFET05MWQkweDQwCS8qIGRvZXMgdGhlIHVzZXIgd2FudCB0aGlzIHRvIGJlIHIvbz8gKi8KKyNkZWZpbmUgTU5UX1NUUklDVEFUSU1FIDB4ODAKIAogI2RlZmluZSBNTlRfU0hSSU5LQUJMRQkweDEwMAogI2RlZmluZSBNTlRfSU1CQUxBTkNFRF9XUklURV9DT1VOVAkweDIwMCAvKiBqdXN0IGZvciBkZWJ1Z2dpbmcgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlLmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCmluZGV4IDhhNDU1NjkuLjBkNDViNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGUuaApAQCAtMTkzLDYgKzE5Myw5IEBACiBzdHJ1Y3QgbWZjX2NhY2hlIAogewogCXN0cnVjdCBtZmNfY2FjaGUgKm5leHQ7CQkJLyogTmV4dCBlbnRyeSBvbiBjYWNoZSBsaW5lIAkqLworI2lmZGVmIENPTkZJR19ORVRfTlMKKwlzdHJ1Y3QgbmV0ICptZmNfbmV0OworI2VuZGlmCiAJX19iZTMyIG1mY19tY2FzdGdycDsJCQkvKiBHcm91cCB0aGUgZW50cnkgYmVsb25ncyB0byAJKi8KIAlfX2JlMzIgbWZjX29yaWdpbjsJCQkvKiBTb3VyY2Ugb2YgcGFja2V0IAkJKi8KIAl2aWZpX3QgbWZjX3BhcmVudDsJCQkvKiBTb3VyY2UgaW50ZXJmYWNlCQkqLwpAQCAtMjE1LDYgKzIxOCwxOCBAQAogCX0gbWZjX3VuOwogfTsKIAorc3RhdGljIGlubGluZQorc3RydWN0IG5ldCAqbWZjX25ldChjb25zdCBzdHJ1Y3QgbWZjX2NhY2hlICptZmMpCit7CisJcmV0dXJuIHJlYWRfcG5ldCgmbWZjLT5tZmNfbmV0KTsKK30KKworc3RhdGljIGlubGluZQordm9pZCBtZmNfbmV0X3NldChzdHJ1Y3QgbWZjX2NhY2hlICptZmMsIHN0cnVjdCBuZXQgKm5ldCkKK3sKKwl3cml0ZV9wbmV0KCZtZmMtPm1mY19uZXQsIGhvbGRfbmV0KG5ldCkpOworfQorCiAjZGVmaW5lIE1GQ19TVEFUSUMJCTEKICNkZWZpbmUgTUZDX05PVElGWQkJMgogCkBAIC0yNDEsNyArMjU2LDggQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIHN0cnVjdCBydG1zZzsKLWV4dGVybiBpbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpOworZXh0ZXJuIGludCBpcG1yX2dldF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgIHN0cnVjdCBydG1zZyAqcnRtLCBpbnQgbm93YWl0KTsKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oIGIvaW5jbHVkZS9saW51eC9tcm91dGU2LmgKaW5kZXggNTM3NWZhYy4uNDNkYzk3ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oCisrKyBiL2luY2x1ZGUvbGludXgvbXJvdXRlNi5oCkBAIC02NSw3ICs2NSw3IEBACiAJbWlmaV90CW1pZjZjX21pZmk7CQkvKiBJbmRleCBvZiBNSUYgKi8KIAl1bnNpZ25lZCBjaGFyIG1pZjZjX2ZsYWdzOwkvKiBNSUZGXyBmbGFncyAqLwogCXVuc2lnbmVkIGNoYXIgdmlmY190aHJlc2hvbGQ7CS8qIHR0bCBsaW1pdCAqLwotCXVfc2hvcnQJIG1pZjZjX3BpZmk7CQkvKiB0aGUgaW5kZXggb2YgdGhlIHBoeXNpY2FsIElGICovCisJX191MTYJIG1pZjZjX3BpZmk7CQkvKiB0aGUgaW5kZXggb2YgdGhlIHBoeXNpY2FsIElGICovCiAJdW5zaWduZWQgaW50IHZpZmNfcmF0ZV9saW1pdDsJLyogUmF0ZSBsaW1pdGVyIHZhbHVlcyAoTkkpICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9mcy5oIGIvaW5jbHVkZS9saW51eC9uY3BfZnMuaAppbmRleCBmNjllNjZkLi4zMGIwNmM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25jcF9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmNwX2ZzLmgKQEAgLTIwNCw3ICsyMDQsNyBAQAogLyogbGludXgvZnMvbmNwZnMvZGlyLmMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBuY3BfZGlyX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBuY3BfZGlyX29wZXJhdGlvbnM7Ci1leHRlcm4gc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5jcF9yb290X2RlbnRyeV9vcGVyYXRpb25zOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuY3Bfcm9vdF9kZW50cnlfb3BlcmF0aW9uczsKIGludCBuY3BfY29ubl9sb2dnZWRfaW4oc3RydWN0IHN1cGVyX2Jsb2NrICopOwogaW50IG5jcF9kYXRlX2RvczJ1bml4KF9fbGUxNiB0aW1lLCBfX2xlMTYgZGF0ZSk7CiB2b2lkIG5jcF9kYXRlX3VuaXgyZG9zKGludCB1bml4X2RhdGUsIF9fbGUxNiAqIHRpbWUsIF9fbGUxNiAqIGRhdGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uY3Bfbm8uaCBiL2luY2x1ZGUvbGludXgvbmNwX25vLmgKaW5kZXggZjU2YTY5Ni4uY2RkYWE0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uY3Bfbm8uaAorKysgYi9pbmNsdWRlL2xpbnV4L25jcF9uby5oCkBAIC0yLDE4ICsyLDE4IEBACiAjZGVmaW5lIF9OQ1BfTk8KIAogLyogdGhlc2UgZGVmaW5lIHRoZSBhdHRyaWJ1dGUgYnl0ZSBhcyBzZWVuIGJ5IE5DUCAqLwotI2RlZmluZSBhUk9OTFkJCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxKSkKLSNkZWZpbmUgYUhJRERFTgkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDIpKQotI2RlZmluZSBhU1lTVEVNCQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoNCkpCi0jZGVmaW5lIGFFWEVDVVRFCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMig4KSkKLSNkZWZpbmUgYURJUgkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MTApKQotI2RlZmluZSBhQVJDSAkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MjApKQotI2RlZmluZSBhU0hBUkVECQkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHg4MCkpCi0jZGVmaW5lIGFET05UU1VCQUxMT0NBVEUJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDExKSkKLSNkZWZpbmUgYVRSQU5TQUNUSU9OQUwJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxMikpCi0jZGVmaW5lIGFQVVJHRQkJCShfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxNikpCi0jZGVmaW5lIGFSRU5BTUVJTkhJQklUCQkoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTcpKQotI2RlZmluZSBhREVMRVRFSU5ISUJJVAkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDE4KSkKLSNkZWZpbmUgYURPTlRDT01QUkVTUwkJKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDI3KSkKKyNkZWZpbmUgYVJPTkxZCQkJKF9fY3B1X3RvX2xlMzIoMSkpCisjZGVmaW5lIGFISURERU4JCQkoX19jcHVfdG9fbGUzMigyKSkKKyNkZWZpbmUgYVNZU1RFTQkJCShfX2NwdV90b19sZTMyKDQpKQorI2RlZmluZSBhRVhFQ1VURQkJKF9fY3B1X3RvX2xlMzIoOCkpCisjZGVmaW5lIGFESVIJCQkoX19jcHVfdG9fbGUzMigweDEwKSkKKyNkZWZpbmUgYUFSQ0gJCQkoX19jcHVfdG9fbGUzMigweDIwKSkKKyNkZWZpbmUgYVNIQVJFRAkJCShfX2NwdV90b19sZTMyKDB4ODApKQorI2RlZmluZSBhRE9OVFNVQkFMTE9DQVRFCShfX2NwdV90b19sZTMyKDFMPDwxMSkpCisjZGVmaW5lIGFUUkFOU0FDVElPTkFMCQkoX19jcHVfdG9fbGUzMigxTDw8MTIpKQorI2RlZmluZSBhUFVSR0UJCQkoX19jcHVfdG9fbGUzMigxTDw8MTYpKQorI2RlZmluZSBhUkVOQU1FSU5ISUJJVAkJKF9fY3B1X3RvX2xlMzIoMUw8PDE3KSkKKyNkZWZpbmUgYURFTEVURUlOSElCSVQJCShfX2NwdV90b19sZTMyKDFMPDwxOCkpCisjZGVmaW5lIGFET05UQ09NUFJFU1MJCShfX2NwdV90b19sZTMyKDFMPDwyNykpCiAKICNlbmRpZiAvKiBfTkNQX05PICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25laWdoYm91ci5oIGIvaW5jbHVkZS9saW51eC9uZWlnaGJvdXIuaAppbmRleCA4NzMwZDVkLi4xMmM5ZGUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25laWdoYm91ci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmVpZ2hib3VyLmgKQEAgLTMxLDYgKzMxLDcgQEAKICAqCU5laWdoYm9yIENhY2hlIEVudHJ5IEZsYWdzCiAgKi8KIAorI2RlZmluZSBOVEZfVVNFCQkweDAxCiAjZGVmaW5lIE5URl9QUk9YWQkweDA4CS8qID09IEFURl9QVUJMICovCiAjZGVmaW5lIE5URl9ST1VURVIJMHg4MAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldC5oIGIvaW5jbHVkZS9saW51eC9uZXQuaAppbmRleCA0NTE1ZWZhLi40ZmMyZmZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0LmgKQEAgLTEyOSwxMSArMTI5LDE1IEBACiAJc29ja2V0X3N0YXRlCQlzdGF0ZTsKIAlzaG9ydAkJCXR5cGU7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7Ci0JY29uc3Qgc3RydWN0IHByb3RvX29wcwkqb3BzOworCS8qCisJICogUGxlYXNlIGtlZXAgZmFzeW5jX2xpc3QgJiB3YWl0IGZpZWxkcyBpbiB0aGUgc2FtZSBjYWNoZSBsaW5lCisJICovCiAJc3RydWN0IGZhc3luY19zdHJ1Y3QJKmZhc3luY19saXN0OworCXdhaXRfcXVldWVfaGVhZF90CXdhaXQ7CisKIAlzdHJ1Y3QgZmlsZQkJKmZpbGU7CiAJc3RydWN0IHNvY2sJCSpzazsKLQl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworCWNvbnN0IHN0cnVjdCBwcm90b19vcHMJKm9wczsKIH07CiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0X2Ryb3Btb24uaCBiL2luY2x1ZGUvbGludXgvbmV0X2Ryb3Btb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjE3ZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRfZHJvcG1vbi5oCkBAIC0wLDAgKzEsNTYgQEAKKyNpZm5kZWYgX19ORVRfRFJPUE1PTl9ICisjZGVmaW5lIF9fTkVUX0RST1BNT05fSAorCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCitzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQgeworCV9fdTggcGNbOF07CisJX191MzIgY291bnQ7Cit9OworCisjZGVmaW5lIE5FVF9ETV9DRkdfVkVSU0lPTiAgMAorI2RlZmluZSBORVRfRE1fQ0ZHX0FMRVJUX0NPVU5UICAxCisjZGVmaW5lIE5FVF9ETV9DRkdfQUxFUlRfREVMQVkgMgorI2RlZmluZSBORVRfRE1fQ0ZHX01BWCAzCisKK3N0cnVjdCBuZXRfZG1fY29uZmlnX2VudHJ5IHsKKwlfX3UzMiB0eXBlOworCV9fdTY0IGRhdGEgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworfTsKKworc3RydWN0IG5ldF9kbV9jb25maWdfbXNnIHsKKwlfX3UzMiBlbnRyaWVzOworCXN0cnVjdCBuZXRfZG1fY29uZmlnX2VudHJ5IG9wdGlvbnNbMF07Cit9OworCitzdHJ1Y3QgbmV0X2RtX2FsZXJ0X21zZyB7CisJX191MzIgZW50cmllczsKKwlzdHJ1Y3QgbmV0X2RtX2Ryb3BfcG9pbnQgcG9pbnRzWzBdOworfTsKKworc3RydWN0IG5ldF9kbV91c2VyX21zZyB7CisJdW5pb24geworCQlzdHJ1Y3QgbmV0X2RtX2NvbmZpZ19tc2cgdXNlcjsKKwkJc3RydWN0IG5ldF9kbV9hbGVydF9tc2cgYWxlcnQ7CisJfSB1OworfTsKKworCisvKiBUaGVzZSBhcmUgdGhlIG5ldGxpbmsgbWVzc2FnZSB0eXBlcyBmb3IgdGhpcyBwcm90b2NvbCAqLworCitlbnVtIHsKKwlORVRfRE1fQ01EX1VOU1BFQyA9IDAsCisJTkVUX0RNX0NNRF9BTEVSVCwKKwlORVRfRE1fQ01EX0NPTkZJRywKKwlORVRfRE1fQ01EX1NUQVJULAorCU5FVF9ETV9DTURfU1RPUCwKKwlfTkVUX0RNX0NNRF9NQVgsCit9OworCisjZGVmaW5lIE5FVF9ETV9DTURfTUFYIChfTkVUX0RNX0NNRF9NQVggLSAxKQorCisvKgorICogT3VyIGdyb3VwIGlkZW50aWZpZXJzCisgKi8KKyNkZWZpbmUgTkVUX0RNX0dSUF9BTEVSVCAxCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oIGIvaW5jbHVkZS9saW51eC9uZXRfdHN0YW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiODU0NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbmV0X3RzdGFtcC5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogVXNlcnNwYWNlIEFQSSBmb3IgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBvZiBuZXR3b3JrIHBhY2tldHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CisgKgorICovCisKKyNpZm5kZWYgX05FVF9USU1FU1RBTVBJTkdfSAorI2RlZmluZSBfTkVUX1RJTUVTVEFNUElOR19ICisKKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4gICAvKiBmb3IgU09fVElNRVNUQU1QSU5HICovCisKKy8qIFNPX1RJTUVTVEFNUElORyBnZXRzIGFuIGludGVnZXIgYml0IGZpZWxkIGNvbXByaXNlZCBvZiB0aGVzZSB2YWx1ZXMgKi8KK2VudW0geworCVNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgPSAoMTw8MCksCisJU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSA9ICgxPDwxKSwKKwlTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFID0gKDE8PDIpLAorCVNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkUgPSAoMTw8MyksCisJU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSA9ICgxPDw0KSwKKwlTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSA9ICgxPDw1KSwKKwlTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSA9ICgxPDw2KSwKKwlTT0ZfVElNRVNUQU1QSU5HX01BU0sgPQorCShTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSAtIDEpIHwKKwlTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRQorfTsKKworLyoqCisgKiBzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIC0gJVNJT0NTSFdUU1RBTVAgcGFyYW1ldGVyCisgKgorICogQGZsYWdzOglubyBmbGFncyBkZWZpbmVkIHJpZ2h0IG5vdywgbXVzdCBiZSB6ZXJvCisgKiBAdHhfdHlwZToJb25lIG9mIEhXVFNUQU1QX1RYXyoKKyAqIEByeF90eXBlOglvbmUgb2Ygb25lIG9mIEhXVFNUQU1QX0ZJTFRFUl8qCisgKgorICogJVNJT0NTSFdUU1RBTVAgZXhwZWN0cyBhICZzdHJ1Y3QgaWZyZXEgd2l0aCBhIGlmcl9kYXRhIHBvaW50ZXIgdG8KKyAqIHRoaXMgc3RydWN0dXJlLiBkZXZfaWZzaW9jKCkgaW4gdGhlIGtlcm5lbCB0YWtlcyBjYXJlIG9mIHRoZQorICogdHJhbnNsYXRpb24gYmV0d2VlbiAzMiBiaXQgdXNlcnNwYWNlIGFuZCA2NCBiaXQga2VybmVsLiBUaGUKKyAqIHN0cnVjdHVyZSBpcyBpbnRlbnRpb25hbGx5IGNob3NlbiBzbyB0aGF0IGl0IGhhcyB0aGUgc2FtZSBsYXlvdXQgb24KKyAqIDMyIGFuZCA2NCBiaXQgc3lzdGVtcywgZG9uJ3QgYnJlYWsgdGhpcyEKKyAqLworc3RydWN0IGh3dHN0YW1wX2NvbmZpZyB7CisJaW50IGZsYWdzOworCWludCB0eF90eXBlOworCWludCByeF9maWx0ZXI7Cit9OworCisvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy0+dHhfdHlwZSAqLworZW51bSB7CisJLyoKKwkgKiBObyBvdXRnb2luZyBwYWNrZXQgd2lsbCBuZWVkIGhhcmR3YXJlIHRpbWUgc3RhbXBpbmc7CisJICogc2hvdWxkIGEgcGFja2V0IGFycml2ZSB3aGljaCBhc2tzIGZvciBpdCwgbm8gaGFyZHdhcmUKKwkgKiB0aW1lIHN0YW1waW5nIHdpbGwgYmUgZG9uZS4KKwkgKi8KKwlIV1RTVEFNUF9UWF9PRkYsCisKKwkvKgorCSAqIEVuYWJsZXMgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBmb3Igb3V0Z29pbmcgcGFja2V0czsKKwkgKiB0aGUgc2VuZGVyIG9mIHRoZSBwYWNrZXQgZGVjaWRlcyB3aGljaCBhcmUgdG8gYmUKKwkgKiB0aW1lIHN0YW1wZWQgYnkgc2V0dGluZyAlU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRQorCSAqIGJlZm9yZSBzZW5kaW5nIHRoZSBwYWNrZXQuCisJICovCisJSFdUU1RBTVBfVFhfT04sCit9OworCisvKiBwb3NzaWJsZSB2YWx1ZXMgZm9yIGh3dHN0YW1wX2NvbmZpZy0+cnhfZmlsdGVyICovCitlbnVtIHsKKwkvKiB0aW1lIHN0YW1wIG5vIGluY29taW5nIHBhY2tldCBhdCBhbGwgKi8KKwlIV1RTVEFNUF9GSUxURVJfTk9ORSwKKworCS8qIHRpbWUgc3RhbXAgYW55IGluY29taW5nIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9BTEwsCisKKwkvKiByZXR1cm4gdmFsdWU6IHRpbWUgc3RhbXAgYWxsIHBhY2tldHMgcmVxdWVzdGVkIHBsdXMgc29tZSBvdGhlcnMgKi8KKwlIV1RTVEFNUF9GSUxURVJfU09NRSwKKworCS8qIFBUUCB2MSwgVURQLCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0VWRU5ULAorCS8qIFBUUCB2MSwgVURQLCBTeW5jIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfU1lOQywKKwkvKiBQVFAgdjEsIFVEUCwgRGVsYXlfcmVxIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVRLAorCS8qIFBUUCB2MiwgVURQLCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5ULAorCS8qIFBUUCB2MiwgVURQLCBTeW5jIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQywKKwkvKiBQVFAgdjIsIFVEUCwgRGVsYXlfcmVxIHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVRLAorCisJLyogODAyLkFTMSwgRXRoZXJuZXQsIGFueSBraW5kIG9mIGV2ZW50IHBhY2tldCAqLworCUhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQsCisJLyogODAyLkFTMSwgRXRoZXJuZXQsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DLAorCS8qIDgwMi5BUzEsIEV0aGVybmV0LCBEZWxheV9yZXEgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9ERUxBWV9SRVEsCisKKwkvKiBQVFAgdjIvODAyLkFTMSwgYW55IGxheWVyLCBhbnkga2luZCBvZiBldmVudCBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5ULAorCS8qIFBUUCB2Mi84MDIuQVMxLCBhbnkgbGF5ZXIsIFN5bmMgcGFja2V0ICovCisJSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DLAorCS8qIFBUUCB2Mi84MDIuQVMxLCBhbnkgbGF5ZXIsIERlbGF5X3JlcSBwYWNrZXQgKi8KKwlIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0RFTEFZX1JFUSwKK307CisKKyNlbmRpZiAvKiBfTkVUX1RJTUVTVEFNUElOR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA2NTkzNjY3Li4xYjU1OTUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KQEAgLTk2LDcgKzk3LDcgQEAKICAqCUNvbXB1dGUgdGhlIHdvcnN0IGNhc2UgaGVhZGVyIGxlbmd0aCBhY2NvcmRpbmcgdG8gdGhlIHByb3RvY29scwogICoJdXNlZC4KICAqLwotIAorCiAjaWYgZGVmaW5lZChDT05GSUdfV0xBTl84MDIxMSkgfHwgZGVmaW5lZChDT05GSUdfQVgyNSkgfHwgZGVmaW5lZChDT05GSUdfQVgyNV9NT0RVTEUpCiAjIGlmIGRlZmluZWQoQ09ORklHX01BQzgwMjExX01FU0gpCiAjICBkZWZpbmUgTExfTUFYX0hFQURFUiAxMjgKQEAgLTEyNCw3ICsxMjUsNyBAQAogICoJTmV0d29yayBkZXZpY2Ugc3RhdGlzdGljcy4gQWtpbiB0byB0aGUgMi4wIGV0aGVyIHN0YXRzIGJ1dAogICoJd2l0aCBieXRlIGNvdW50ZXJzLgogICovCi0gCisKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCiB7CiAJdW5zaWduZWQgbG9uZwlyeF9wYWNrZXRzOwkJLyogdG90YWwgcGFja2V0cyByZWNlaXZlZAkqLwpAQCAtMjg1LDcgKzI4Niw3IEBACiAKIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyBhdCBib290IHRpbWUgY29uZmlndXJlZCBuZXRkZXZpY2Ugc2V0dGluZ3MuIFRoZXkKLSAqIGFyZSB0aGVuIHVzZWQgaW4gdGhlIGRldmljZSBwcm9iaW5nLiAKKyAqIGFyZSB0aGVuIHVzZWQgaW4gdGhlIGRldmljZSBwcm9iaW5nLgogICovCiBzdHJ1Y3QgbmV0ZGV2X2Jvb3Rfc2V0dXAgewogCWNoYXIgbmFtZVtJRk5BTVNJWl07CkBAIC0zMTQsNiArMzE1LDkgQEAKIAlzcGlubG9ja190CQlwb2xsX2xvY2s7CiAJaW50CQkJcG9sbF9vd25lcjsKICNlbmRpZgorCisJdW5zaWduZWQgaW50CQlncm9fY291bnQ7CisKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQJZGV2X2xpc3Q7CiAJc3RydWN0IHNrX2J1ZmYJCSpncm9fbGlzdDsKQEAgLTMyNyw2ICszMzEsMTQgQEAKIAlOQVBJX1NUQVRFX05QU1ZDLAkvKiBOZXRwb2xsIC0gZG9uJ3QgZGVxdWV1ZSBmcm9tIHBvbGxfbGlzdCAqLwogfTsKIAorZW51bSB7CisJR1JPX01FUkdFRCwKKwlHUk9fTUVSR0VEX0ZSRUUsCisJR1JPX0hFTEQsCisJR1JPX05PUk1BTCwKKwlHUk9fRFJPUCwKK307CisKIGV4dGVybiB2b2lkIF9fbmFwaV9zY2hlZHVsZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pOwogCiBzdGF0aWMgaW5saW5lIGludCBuYXBpX2Rpc2FibGVfcGVuZGluZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pCkBAIC03NDAsNyArNzUyLDcgQEAKIAl2b2lkCQkJKmRzYV9wdHI7CS8qIGRzYSBzcGVjaWZpYyBkYXRhICovCiAjZW5kaWYKIAl2b2lkIAkJCSphdGFsa19wdHI7CS8qIEFwcGxlVGFsayBsaW5rIAkqLwotCXZvaWQJCQkqaXBfcHRyOwkvKiBJUHY0IHNwZWNpZmljIGRhdGEJKi8gIAorCXZvaWQJCQkqaXBfcHRyOwkvKiBJUHY0IHNwZWNpZmljIGRhdGEJKi8KIAl2b2lkICAgICAgICAgICAgICAgICAgICAqZG5fcHRyOyAgICAgICAgLyogREVDbmV0IHNwZWNpZmljIGRhdGEgKi8KIAl2b2lkICAgICAgICAgICAgICAgICAgICAqaXA2X3B0cjsgICAgICAgLyogSVB2NiBzcGVjaWZpYyBkYXRhICovCiAJdm9pZAkJCSplY19wdHI7CS8qIEVjb25ldCBzcGVjaWZpYyBkYXRhCSovCkBAIC03NTMsNyArNzY1LDcgQEAKICAqLwogCXVuc2lnbmVkIGxvbmcJCWxhc3Rfcng7CS8qIFRpbWUgb2YgbGFzdCBSeAkqLwogCS8qIEludGVyZmFjZSBhZGRyZXNzIGluZm8gdXNlZCBpbiBldGhfdHlwZV90cmFucygpICovCi0JdW5zaWduZWQgY2hhcgkJZGV2X2FkZHJbTUFYX0FERFJfTEVOXTsJLyogaHcgYWRkcmVzcywgKGJlZm9yZSBiY2FzdCAKKwl1bnNpZ25lZCBjaGFyCQlkZXZfYWRkcltNQVhfQUREUl9MRU5dOwkvKiBodyBhZGRyZXNzLCAoYmVmb3JlIGJjYXN0CiAJCQkJCQkJICAgYmVjYXVzZSBtb3N0IHBhY2tldHMgYXJlIHVuaWNhc3QpICovCiAKIAl1bnNpZ25lZCBjaGFyCQlicm9hZGNhc3RbTUFYX0FERFJfTEVOXTsJLyogaHcgYmNhc3QgYWRkCSovCkBAIC05ODQsNiArOTk2LDkgQEAKIHZvaWQgbmV0aWZfbmFwaV9kZWwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKTsKIAogc3RydWN0IG5hcGlfZ3JvX2NiIHsKKwkvKiBUaGlzIGluZGljYXRlcyB3aGVyZSB3ZSBhcmUgcHJvY2Vzc2luZyByZWxhdGl2ZSB0byBza2ItPmRhdGEuICovCisJaW50IGRhdGFfb2Zmc2V0OworCiAJLyogVGhpcyBpcyBub24temVybyBpZiB0aGUgcGFja2V0IG1heSBiZSBvZiB0aGUgc2FtZSBmbG93LiAqLwogCWludCBzYW1lX2Zsb3c7CiAKQEAgLTEwODgsNiArMTEwMywzNiBAQAogI2lmZGVmIENPTkZJR19ORVRQT0xMX1RSQVAKIGV4dGVybiBpbnQJCW5ldHBvbGxfdHJhcCh2b2lkKTsKICNlbmRpZgorZXh0ZXJuIHZvaWQJICAgICAgKnNrYl9ncm9faGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBobGVuKTsKK2V4dGVybiBpbnQJICAgICAgIHNrYl9ncm9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsCisJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBza2JfZ3JvX29mZnNldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBOQVBJX0dST19DQihza2IpLT5kYXRhX29mZnNldDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2tiX2dyb19sZW4oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT5sZW4gLSBOQVBJX0dST19DQihza2IpLT5kYXRhX29mZnNldDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNrYl9ncm9fcHVsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCU5BUElfR1JPX0NCKHNrYiktPmRhdGFfb2Zmc2V0ICs9IGxlbjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNrYl9ncm9fcmVzZXRfb2Zmc2V0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJTkFQSV9HUk9fQ0Ioc2tiKS0+ZGF0YV9vZmZzZXQgPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKnNrYl9ncm9fbWFjX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2JfbWFjX2hlYWRlcihza2IpIDwgc2tiLT5kYXRhID8gc2tiX21hY19oZWFkZXIoc2tiKSA6CisJICAgICAgIHBhZ2VfYWRkcmVzcyhza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UpICsKKwkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldDsKK30KIAogc3RhdGljIGlubGluZSBpbnQgZGV2X2hhcmRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICB1bnNpZ25lZCBzaG9ydCB0eXBlLApAQCAtMTM3NiwxMiArMTQyMSwxNSBAQAogZXh0ZXJuIHZvaWQJCW5hcGlfZ3JvX2ZsdXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7CiBleHRlcm4gaW50CQlkZXZfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQJCW5hcGlfc2tiX2ZpbmlzaChpbnQgcmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJCW5hcGlfZ3JvX3JlY2VpdmUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZAkJbmFwaV9yZXVzZV9za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqCW5hcGlfZnJhZ2luZm9fc2tiKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwKIAkJCQkJICBzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gKmluZm8pOworZXh0ZXJuIGludAkJbmFwaV9mcmFnc19maW5pc2goc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIGludCByZXQpOwogZXh0ZXJuIGludAkJbmFwaV9ncm9fZnJhZ3Moc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLAogCQkJCSAgICAgICBzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gKmluZm8pOwogZXh0ZXJuIHZvaWQJCW5ldGlmX25pdF9kZWxpdmVyKHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTU3NSw1NiArMTYyMyw2IEBACiAJcmV0dXJuICgxIDw8IGRlYnVnX3ZhbHVlKSAtIDE7CiB9CiAKLS8qIFRlc3QgaWYgcmVjZWl2ZSBuZWVkcyB0byBiZSBzY2hlZHVsZWQgYnV0IG9ubHkgaWYgdXAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCXJldHVybiBuYXBpX3NjaGVkdWxlX3ByZXAobmFwaSk7Ci19Ci0KLS8qIEFkZCBpbnRlcmZhY2UgdG8gdGFpbCBvZiByeCBwb2xsIGxpc3QuIFRoaXMgYXNzdW1lcyB0aGF0IF9wcmVwIGhhcwotICogYWxyZWFkeSBiZWVuIGNhbGxlZCBhbmQgcmV0dXJuZWQgMS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIF9fbmV0aWZfcnhfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCV9fbmFwaV9zY2hlZHVsZShuYXBpKTsKLX0KLQotLyogVHJ5IHRvIHJlc2NoZWR1bGUgcG9sbC4gQ2FsbGVkIGJ5IGlycSBoYW5kbGVyLiAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfcnhfc2NoZWR1bGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCWlmIChuZXRpZl9yeF9zY2hlZHVsZV9wcmVwKG5hcGkpKQotCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5hcGkpOwotfQotCi0vKiBUcnkgdG8gcmVzY2hlZHVsZSBwb2xsLiBDYWxsZWQgYnkgZGV2LT5wb2xsKCkgYWZ0ZXIgbmV0aWZfcnhfY29tcGxldGUoKS4gICovCi1zdGF0aWMgaW5saW5lIGludCBuZXRpZl9yeF9yZXNjaGVkdWxlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKLXsKLQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKG5hcGkpKSB7Ci0JCV9fbmV0aWZfcnhfc2NoZWR1bGUobmFwaSk7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogc2FtZSBhcyBuZXRpZl9yeF9jb21wbGV0ZSwgZXhjZXB0IHRoYXQgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpCi0gKiBoYXMgYWxyZWFkeSBiZWVuIGlzc3VlZAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19uZXRpZl9yeF9jb21wbGV0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCi17Ci0JX19uYXBpX2NvbXBsZXRlKG5hcGkpOwotfQotCi0vKiBSZW1vdmUgaW50ZXJmYWNlIGZyb20gcG9sbCBsaXN0OiBpdCBtdXN0IGJlIGluIHRoZSBwb2xsIGxpc3QKLSAqIG9uIGN1cnJlbnQgY3B1LiBUaGlzIHByaW1pdGl2ZSBpcyBjYWxsZWQgYnkgZGV2LT5wb2xsKCksIHdoZW4KLSAqIGl0IGNvbXBsZXRlcyB0aGUgd29yay4gVGhlIGRldmljZSBjYW5ub3QgYmUgb3V0IG9mIHBvbGwgbGlzdCBhdCB0aGlzCi0gKiBtb21lbnQsIGl0IGlzIEJVRygpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfcnhfY29tcGxldGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKQotewotCW5hcGlfY29tcGxldGUobmFwaSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX25ldGlmX3R4X2xvY2soc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxLCBpbnQgY3B1KQogewogCXNwaW5fbG9jaygmdHhxLT5feG1pdF9sb2NrKTsKQEAgLTE4NzUsNyArMTg3Myw3IEBACiAKIAkJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9TTEFWRV9JTkFDVElWRSkgewogCQkJaWYgKChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfU0xBVkVfTkVFREFSUCkgJiYKLQkJCSAgICBza2ItPnByb3RvY29sID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJQKSkKKwkJCSAgICBza2ItPnByb3RvY29sID09IF9fY3B1X3RvX2JlMTYoRVRIX1BfQVJQKSkKIAkJCQlyZXR1cm4gMDsKIAogCQkJaWYgKG1hc3Rlci0+cHJpdl9mbGFncyAmIElGRl9NQVNURVJfQUxCKSB7CkBAIC0xODg0LDcgKzE4ODIsNyBAQAogCQkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWlmIChtYXN0ZXItPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSXzgwMjNBRCAmJgotCQkJICAgIHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9TTE9XKSkKKwkJCSAgICBza2ItPnByb3RvY29sID09IF9fY3B1X3RvX2JlMTYoRVRIX1BfU0xPVykpCiAJCQkJcmV0dXJuIDA7CiAKIAkJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCmluZGV4IDVhOGFmODcuLmFmOWQyZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKQEAgLTcsMTYgKzcsMjEgQEAKIGhlYWRlci15ICs9IHh0X0NPTk5NQVJLLmgKIGhlYWRlci15ICs9IHh0X0NPTk5TRUNNQVJLLmgKIGhlYWRlci15ICs9IHh0X0RTQ1AuaAoraGVhZGVyLXkgKz0geHRfTEVELmgKIGhlYWRlci15ICs9IHh0X01BUksuaAogaGVhZGVyLXkgKz0geHRfTkZMT0cuaAogaGVhZGVyLXkgKz0geHRfTkZRVUVVRS5oCiBoZWFkZXIteSArPSB4dF9SQVRFRVNULmgKIGhlYWRlci15ICs9IHh0X1NFQ01BUksuaAogaGVhZGVyLXkgKz0geHRfVENQTVNTLmgKK2hlYWRlci15ICs9IHh0X1RDUE9QVFNUUklQLmgKK2hlYWRlci15ICs9IHh0X1RQUk9YWS5oCiBoZWFkZXIteSArPSB4dF9jb21tZW50LmgKIGhlYWRlci15ICs9IHh0X2Nvbm5ieXRlcy5oCitoZWFkZXIteSArPSB4dF9jb25ubGltaXQuaAogaGVhZGVyLXkgKz0geHRfY29ubm1hcmsuaAogaGVhZGVyLXkgKz0geHRfY29ubnRyYWNrLmgKK2hlYWRlci15ICs9IHh0X2NsdXN0ZXIuaAogaGVhZGVyLXkgKz0geHRfZGNjcC5oCiBoZWFkZXIteSArPSB4dF9kc2NwLmgKIGhlYWRlci15ICs9IHh0X2VzcC5oCkBAIC0zMCw2ICszNSw3IEBACiBoZWFkZXIteSArPSB4dF9tdWx0aXBvcnQuaAogaGVhZGVyLXkgKz0geHRfb3duZXIuaAogaGVhZGVyLXkgKz0geHRfcGt0dHlwZS5oCitoZWFkZXIteSArPSB4dF9xdW90YS5oCiBoZWFkZXIteSArPSB4dF9yYXRlZXN0LmgKIGhlYWRlci15ICs9IHh0X3JlYWxtLmgKIGhlYWRlci15ICs9IHh0X3JlY2VudC5oCkBAIC0zOSw2ICs0NSw4IEBACiBoZWFkZXIteSArPSB4dF9zdHJpbmcuaAogaGVhZGVyLXkgKz0geHRfdGNwbXNzLmgKIGhlYWRlci15ICs9IHh0X3RjcHVkcC5oCitoZWFkZXIteSArPSB4dF90aW1lLmgKK2hlYWRlci15ICs9IHh0X3UzMi5oCiAKIHVuaWZkZWYteSArPSBuZl9jb25udHJhY2tfY29tbW9uLmgKIHVuaWZkZWYteSArPSBuZl9jb25udHJhY2tfZnRwLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaAppbmRleCBhMDQ5ZGY0Li4zMDY2Nzg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oCkBAIC0yLDYgKzIsOCBAQAogI2RlZmluZSBfTkZfQ09OTlRSQUNLX1RDUF9ICiAvKiBUQ1AgdHJhY2tpbmcuICovCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBUaGlzIGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIChjdG5ldGxpbmspICovCiBlbnVtIHRjcF9jb25udHJhY2sgewogCVRDUF9DT05OVFJBQ0tfTk9ORSwKQEAgLTM0LDggKzM2LDggQEAKICNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfREFUQV9VTkFDS05PV0xFREdFRAkweDEwCiAKIHN0cnVjdCBuZl9jdF90Y3BfZmxhZ3MgewotCXVfaW50OF90IGZsYWdzOwotCXVfaW50OF90IG1hc2s7CisJX191OCBmbGFnczsKKwlfX3U4IG1hc2s7CiB9OwogCiAjaWZkZWYgX19LRVJORUxfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAppbmRleCA3ZDhlMDQ1Li5jNjAwMDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApAQCAtMjUsOCArMjUsOCBAQAogLyogR2VuZXJhbCBmb3JtIG9mIGFkZHJlc3MgZmFtaWx5IGRlcGVuZGVudCBtZXNzYWdlLgogICovCiBzdHJ1Y3QgbmZnZW5tc2cgewotCXVfaW50OF90ICBuZmdlbl9mYW1pbHk7CQkvKiBBRl94eHggKi8KLQl1X2ludDhfdCAgdmVyc2lvbjsJCS8qIG5mbmV0bGluayB2ZXJzaW9uICovCisJX191OCAgbmZnZW5fZmFtaWx5OwkJLyogQUZfeHh4ICovCisJX191OCAgdmVyc2lvbjsJCS8qIG5mbmV0bGluayB2ZXJzaW9uICovCiAJX19iZTE2ICAgIHJlc19pZDsJCS8qIHJlc291cmNlIGlkICovCiB9OwogCkBAIC03Niw2ICs3Niw3IEBACiBleHRlcm4gaW50IG5mbmV0bGlua19oYXNfbGlzdGVuZXJzKHVuc2lnbmVkIGludCBncm91cCk7CiBleHRlcm4gaW50IG5mbmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHVuc2lnbmVkIGdyb3VwLCAKIAkJCSAgaW50IGVjaG8pOworZXh0ZXJuIHZvaWQgbmZuZXRsaW5rX3NldF9lcnIodTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpOwogZXh0ZXJuIGludCBuZm5ldGxpbmtfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDMyX3QgcGlkLCBpbnQgZmxhZ3MpOwogCiBleHRlcm4gdm9pZCBuZm5sX2xvY2sodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29tcGF0LmgKaW5kZXggZTE0NTE3Ni4uZWRhNTVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb21wYXQuaApAQCAtMSw1ICsxLDggQEAKICNpZm5kZWYgX05GTkVUTElOS19DT01QQVRfSAogI2RlZmluZSBfTkZORVRMSU5LX0NPTVBBVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjaWZuZGVmIF9fS0VSTkVMX18KIC8qIE9sZCBuZm5ldGxpbmsgbWFjcm9zIGZvciB1c2Vyc3BhY2UgKi8KIApAQCAtMjAsOCArMjMsOCBAQAogCiBzdHJ1Y3QgbmZhdHRyCiB7Ci0JdV9pbnQxNl90IG5mYV9sZW47Ci0JdV9pbnQxNl90IG5mYV90eXBlOwkvKiB3ZSB1c2UgMTUgYml0cyBmb3IgdGhlIHR5cGUsIGFuZCB0aGUgaGlnaGVzdAorCV9fdTE2IG5mYV9sZW47CisJX191MTYgbmZhX3R5cGU7CS8qIHdlIHVzZSAxNSBiaXRzIGZvciB0aGUgdHlwZSwgYW5kIHRoZSBoaWdoZXN0CiAJCQkJICogYml0IHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgbmVzdGVkICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmgKaW5kZXggZjY2MTczMS4uZDNiYWI3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuaApAQCAtMTcsMTQgKzE3LDE0IEBACiAKIHN0cnVjdCBuZnVsbmxfbXNnX3BhY2tldF9oZHIgewogCV9fYmUxNgkJaHdfcHJvdG9jb2w7CS8qIGh3IHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLwotCXVfaW50OF90CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLwotCXVfaW50OF90CV9wYWQ7CisJX191OAlob29rOwkJLyogbmV0ZmlsdGVyIGhvb2sgKi8KKwlfX3U4CV9wYWQ7CiB9OwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19wYWNrZXRfaHcgewogCV9fYmUxNgkJaHdfYWRkcmxlbjsKLQl1X2ludDE2X3QJX3BhZDsKLQl1X2ludDhfdAlod19hZGRyWzhdOworCV9fdTE2CV9wYWQ7CisJX191OAlod19hZGRyWzhdOwogfTsKIAogc3RydWN0IG5mdWxubF9tc2dfcGFja2V0X3RpbWVzdGFtcCB7CkBAIC0zNSwxMiArMzUsMTIgQEAKIGVudW0gbmZ1bG5sX2F0dHJfdHlwZSB7CiAJTkZVTEFfVU5TUEVDLAogCU5GVUxBX1BBQ0tFVF9IRFIsCi0JTkZVTEFfTUFSSywJCQkvKiB1X2ludDMyX3QgbmZtYXJrICovCisJTkZVTEFfTUFSSywJCQkvKiBfX3UzMiBuZm1hcmsgKi8KIAlORlVMQV9USU1FU1RBTVAsCQkvKiBuZnVsbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgKi8KLQlORlVMQV9JRklOREVYX0lOREVWLAkJLyogdV9pbnQzMl90IGlmaW5kZXggKi8KLQlORlVMQV9JRklOREVYX09VVERFViwJCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZVTEFfSUZJTkRFWF9QSFlTSU5ERVYsCS8qIHVfaW50MzJfdCBpZmluZGV4ICovCi0JTkZVTEFfSUZJTkRFWF9QSFlTT1VUREVWLAkvKiB1X2ludDMyX3QgaWZpbmRleCAqLworCU5GVUxBX0lGSU5ERVhfSU5ERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9PVVRERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZVTEFfSUZJTkRFWF9QSFlTSU5ERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlVMQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KIAlORlVMQV9IV0FERFIsCQkJLyogbmZ1bG5sX21zZ19wYWNrZXRfaHcgKi8KIAlORlVMQV9QQVlMT0FELAkJCS8qIG9wYXF1ZSBkYXRhIHBheWxvYWQgKi8KIAlORlVMQV9QUkVGSVgsCQkJLyogc3RyaW5nIHByZWZpeCAqLwpAQCAtNjUsMjMgKzY1LDIzIEBACiB9OwogCiBzdHJ1Y3QgbmZ1bG5sX21zZ19jb25maWdfY21kIHsKLQl1X2ludDhfdAljb21tYW5kOwkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWRzICovCisJX191OAljb21tYW5kOwkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWRzICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IG5mdWxubF9tc2dfY29uZmlnX21vZGUgewogCV9fYmUzMgkJY29weV9yYW5nZTsKLQl1X2ludDhfdAljb3B5X21vZGU7Ci0JdV9pbnQ4X3QJX3BhZDsKKwlfX3U4CWNvcHlfbW9kZTsKKwlfX3U4CV9wYWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogZW51bSBuZnVsbmxfYXR0cl9jb25maWcgewogCU5GVUxBX0NGR19VTlNQRUMsCiAJTkZVTEFfQ0ZHX0NNRCwJCQkvKiBuZnVsbmxfbXNnX2NvbmZpZ19jbWQgKi8KIAlORlVMQV9DRkdfTU9ERSwJCQkvKiBuZnVsbmxfbXNnX2NvbmZpZ19tb2RlICovCi0JTkZVTEFfQ0ZHX05MQlVGU0laLAkJLyogdV9pbnQzMl90IGJ1ZmZlciBzaXplICovCi0JTkZVTEFfQ0ZHX1RJTUVPVVQsCQkvKiB1X2ludDMyX3QgaW4gMS8xMDAgcyAqLwotCU5GVUxBX0NGR19RVEhSRVNILAkJLyogdV9pbnQzMl90ICovCi0JTkZVTEFfQ0ZHX0ZMQUdTLAkJLyogdV9pbnQxNl90ICovCisJTkZVTEFfQ0ZHX05MQlVGU0laLAkJLyogX191MzIgYnVmZmVyIHNpemUgKi8KKwlORlVMQV9DRkdfVElNRU9VVCwJCS8qIF9fdTMyIGluIDEvMTAwIHMgKi8KKwlORlVMQV9DRkdfUVRIUkVTSCwJCS8qIF9fdTMyICovCisJTkZVTEFfQ0ZHX0ZMQUdTLAkJLyogX191MTYgKi8KIAlfX05GVUxBX0NGR19NQVgKIH07CiAjZGVmaW5lIE5GVUxBX0NGR19NQVggKF9fTkZVTEFfQ0ZHX01BWCAtMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKaW5kZXggODNlNzg5Ni4uMjQ1NWZlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmgKQEAgLTE1LDEzICsxNSwxMyBAQAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaGRyIHsKIAlfX2JlMzIJCXBhY2tldF9pZDsJLyogdW5pcXVlIElEIG9mIHBhY2tldCBpbiBxdWV1ZSAqLwogCV9fYmUxNgkJaHdfcHJvdG9jb2w7CS8qIGh3IHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLwotCXVfaW50OF90CWhvb2s7CQkvKiBuZXRmaWx0ZXIgaG9vayAqLworCV9fdTgJaG9vazsJCS8qIG5ldGZpbHRlciBob29rICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfaHcgewogCV9fYmUxNgkJaHdfYWRkcmxlbjsKLQl1X2ludDE2X3QJX3BhZDsKLQl1X2ludDhfdAlod19hZGRyWzhdOworCV9fdTE2CV9wYWQ7CisJX191OAlod19hZGRyWzhdOwogfTsKIAogc3RydWN0IG5mcW5sX21zZ19wYWNrZXRfdGltZXN0YW1wIHsKQEAgLTMzLDEyICszMywxMiBAQAogCU5GUUFfVU5TUEVDLAogCU5GUUFfUEFDS0VUX0hEUiwKIAlORlFBX1ZFUkRJQ1RfSERSLAkJLyogbmZxbmxfbXNnX3ZlcmRpY3RfaHJkICovCi0JTkZRQV9NQVJLLAkJCS8qIHVfaW50MzJfdCBuZm1hcmsgKi8KKwlORlFBX01BUkssCQkJLyogX191MzIgbmZtYXJrICovCiAJTkZRQV9USU1FU1RBTVAsCQkJLyogbmZxbmxfbXNnX3BhY2tldF90aW1lc3RhbXAgKi8KLQlORlFBX0lGSU5ERVhfSU5ERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9PVVRERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9QSFlTSU5ERVYsCQkvKiB1X2ludDMyX3QgaWZpbmRleCAqLwotCU5GUUFfSUZJTkRFWF9QSFlTT1VUREVWLAkvKiB1X2ludDMyX3QgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9JTkRFViwJCS8qIF9fdTMyIGlmaW5kZXggKi8KKwlORlFBX0lGSU5ERVhfT1VUREVWLAkJLyogX191MzIgaWZpbmRleCAqLworCU5GUUFfSUZJTkRFWF9QSFlTSU5ERVYsCQkvKiBfX3UzMiBpZmluZGV4ICovCisJTkZRQV9JRklOREVYX1BIWVNPVVRERVYsCS8qIF9fdTMyIGlmaW5kZXggKi8KIAlORlFBX0hXQUREUiwJCQkvKiBuZnFubF9tc2dfcGFja2V0X2h3ICovCiAJTkZRQV9QQVlMT0FELAkJCS8qIG9wYXF1ZSBkYXRhIHBheWxvYWQgKi8KIApAQCAtNjEsOCArNjEsOCBAQAogfTsKIAogc3RydWN0IG5mcW5sX21zZ19jb25maWdfY21kIHsKLQl1X2ludDhfdAljb21tYW5kOwkvKiBuZnFubF9tc2dfY29uZmlnX2NtZHMgKi8KLQl1X2ludDhfdAlfcGFkOworCV9fdTgJY29tbWFuZDsJLyogbmZxbmxfbXNnX2NvbmZpZ19jbWRzICovCisJX191OAlfcGFkOwogCV9fYmUxNgkJcGY7CQkvKiBBRl94eHggZm9yIFBGX1tVTl1CSU5EICovCiB9OwogCkBAIC03NCw3ICs3NCw3IEBACiAKIHN0cnVjdCBuZnFubF9tc2dfY29uZmlnX3BhcmFtcyB7CiAJX19iZTMyCQljb3B5X3JhbmdlOwotCXVfaW50OF90CWNvcHlfbW9kZTsJLyogZW51bSBuZnFubF9jb25maWdfbW9kZSAqLworCV9fdTgJY29weV9tb2RlOwkvKiBlbnVtIG5mcW5sX2NvbmZpZ19tb2RlICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogCkBAIC04Miw3ICs4Miw3IEBACiAJTkZRQV9DRkdfVU5TUEVDLAogCU5GUUFfQ0ZHX0NNRCwJCQkvKiBuZnFubF9tc2dfY29uZmlnX2NtZCAqLwogCU5GUUFfQ0ZHX1BBUkFNUywJCS8qIG5mcW5sX21zZ19jb25maWdfcGFyYW1zICovCi0JTkZRQV9DRkdfUVVFVUVfTUFYTEVOLAkJLyogdV9pbnQzMl90ICovCisJTkZRQV9DRkdfUVVFVUVfTUFYTEVOLAkJLyogX191MzIgKi8KIAlfX05GUUFfQ0ZHX01BWAogfTsKICNkZWZpbmUgTkZRQV9DRkdfTUFYIChfX05GUUFfQ0ZHX01BWC0xKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggYzdlZTg3NC4uN2IxYTY1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWF9UQUJMRVNfSAogI2RlZmluZSBfWF9UQUJMRVNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9GVU5DVElPTl9NQVhOQU1FTEVOIDMwCiAjZGVmaW5lIFhUX1RBQkxFX01BWE5BTUVMRU4gMzIKIApAQCAtOCwyMiArMTAsMjIgQEAKIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJCV9fdTE2IG1hdGNoX3NpemU7CiAKIAkJCS8qIFVzZWQgYnkgdXNlcnNwYWNlICovCiAJCQljaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKIAotCQkJdV9pbnQ4X3QgcmV2aXNpb247CisJCQlfX3U4IHJldmlzaW9uOwogCQl9IHVzZXI7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJCV9fdTE2IG1hdGNoX3NpemU7CiAKIAkJCS8qIFVzZWQgaW5zaWRlIHRoZSBrZXJuZWwgKi8KIAkJCXN0cnVjdCB4dF9tYXRjaCAqbWF0Y2g7CiAJCX0ga2VybmVsOwogCiAJCS8qIFRvdGFsIGxlbmd0aCAqLwotCQl1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKwkJX191MTYgbWF0Y2hfc2l6ZTsKIAl9IHU7CiAKIAl1bnNpZ25lZCBjaGFyIGRhdGFbMF07CkBAIC0zMywyMiArMzUsMjIgQEAKIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJCQlfX3UxNiB0YXJnZXRfc2l6ZTsKIAogCQkJLyogVXNlZCBieSB1c2Vyc3BhY2UgKi8KIAkJCWNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOwogCi0JCQl1X2ludDhfdCByZXZpc2lvbjsKKwkJCV9fdTggcmV2aXNpb247CiAJCX0gdXNlcjsKIAkJc3RydWN0IHsKLQkJCXVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKwkJCV9fdTE2IHRhcmdldF9zaXplOwogCiAJCQkvKiBVc2VkIGluc2lkZSB0aGUga2VybmVsICovCiAJCQlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CiAJCX0ga2VybmVsOwogCiAJCS8qIFRvdGFsIGxlbmd0aCAqLwotCQl1X2ludDE2X3QgdGFyZ2V0X3NpemU7CisJCV9fdTE2IHRhcmdldF9zaXplOwogCX0gdTsKIAogCXVuc2lnbmVkIGNoYXIgZGF0YVswXTsKQEAgLTc0LDcgKzc2LDcgQEAKIHsKIAljaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKIAotCXVfaW50OF90IHJldmlzaW9uOworCV9fdTggcmV2aXNpb247CiB9OwogCiAvKiBDT05USU5VRSB2ZXJkaWN0IGZvciB0YXJnZXRzICovCkBAIC05MCwxMCArOTIsMTAgQEAKICAqLwogc3RydWN0IF94dF9hbGlnbgogewotCXVfaW50OF90IHU4OwotCXVfaW50MTZfdCB1MTY7Ci0JdV9pbnQzMl90IHUzMjsKLQl1X2ludDY0X3QgdTY0OworCV9fdTggdTg7CisJX191MTYgdTE2OworCV9fdTMyIHUzMjsKKwlfX3U2NCB1NjQ7CiB9OwogCiAjZGVmaW5lIFhUX0FMSUdOKHMpICgoKHMpICsgKF9fYWxpZ25vZl9fKHN0cnVjdCBfeHRfYWxpZ24pLTEpKSAJXApAQCAtMTA5LDcgKzExMSw3IEBACiAKIHN0cnVjdCB4dF9jb3VudGVycwogewotCXVfaW50NjRfdCBwY250LCBiY250OwkJCS8qIFBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyAqLworCV9fdTY0IHBjbnQsIGJjbnQ7CQkJLyogUGFja2V0IGFuZCBieXRlIGNvdW50ZXJzICovCiB9OwogCiAvKiBUaGUgYXJndW1lbnQgdG8gSVBUX1NPX0FERF9DT1VOVEVSUy4gKi8KQEAgLTM0OSwyMyArMzUxLDIyIEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCi0JLyogQSB1bmlxdWUgbmFtZS4uLiAqLwotCWNvbnN0IGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKLQogCS8qIFdoYXQgaG9va3MgeW91IHdpbGwgZW50ZXIgb24gKi8KIAl1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CiAKIAkvKiBMb2NrIGZvciB0aGUgY3VydGFpbiAqLwotCXJ3bG9ja190IGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAKIAkvKiBNYW4gYmVoaW5kIHRoZSBjdXJ0YWluLi4uICovCi0JLy9zdHJ1Y3QgaXA2dF90YWJsZV9pbmZvICpwcml2YXRlOwotCXZvaWQgKnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAKIAkvKiBTZXQgdGhpcyB0byBUSElTX01PRFVMRSBpZiB5b3UgYXJlIGEgbW9kdWxlLCBvdGhlcndpc2UgTlVMTCAqLwogCXN0cnVjdCBtb2R1bGUgKm1lOwogCiAJdV9pbnQ4X3QgYWY7CQkvKiBhZGRyZXNzL3Byb3RvY29sIGZhbWlseSAqLworCisJLyogQSB1bmlxdWUgbmFtZS4uLiAqLworCWNvbnN0IGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKIH07CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgpAQCAtMzg2LDcgKzM4Nyw3IEBACiAKIAkvKiBpcHRfZW50cnkgdGFibGVzOiBvbmUgcGVyIENQVSAqLwogCS8qIE5vdGUgOiB0aGlzIGZpZWxkIE1VU1QgYmUgdGhlIGxhc3Qgb25lLCBzZWUgWFRfVEFCTEVfSU5GT19TWiAqLwotCWNoYXIgKmVudHJpZXNbMV07CisJdm9pZCAqZW50cmllc1sxXTsKIH07CiAKICNkZWZpbmUgWFRfVEFCTEVfSU5GT19TWiAob2Zmc2V0b2Yoc3RydWN0IHh0X3RhYmxlX2luZm8sIGVudHJpZXMpIFwKQEAgLTQzMyw2ICs0MzQsMzEgQEAKIAogZXh0ZXJuIHN0cnVjdCB4dF90YWJsZV9pbmZvICp4dF9hbGxvY190YWJsZV9pbmZvKHVuc2lnbmVkIGludCBzaXplKTsKIGV4dGVybiB2b2lkIHh0X2ZyZWVfdGFibGVfaW5mbyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbyk7CitleHRlcm4gdm9pZCB4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqb2xkLAorCQkJCSAgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3KTsKKworLyoKKyAqIFRoaXMgaGVscGVyIGlzIHBlcmZvcm1hbmNlIGNyaXRpY2FsIGFuZCBtdXN0IGJlIGlubGluZWQKKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlmbmFtZV9jb21wYXJlX2FsaWduZWQoY29uc3QgY2hhciAqX2EsCisJCQkJCQkgICBjb25zdCBjaGFyICpfYiwKKwkJCQkJCSAgIGNvbnN0IGNoYXIgKl9tYXNrKQoreworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmEgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9hOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmIgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9iOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKm1hc2sgPSAoY29uc3QgdW5zaWduZWQgbG9uZyAqKV9tYXNrOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJcmV0ID0gKGFbMF0gXiBiWzBdKSAmIG1hc2tbMF07CisJaWYgKElGTkFNU0laID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorCQlyZXQgfD0gKGFbMV0gXiBiWzFdKSAmIG1hc2tbMV07CisJaWYgKElGTkFNU0laID4gMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKwkJcmV0IHw9IChhWzJdIF4gYlsyXSkgJiBtYXNrWzJdOworCWlmIChJRk5BTVNJWiA+IDMgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisJCXJldCB8PSAoYVszXSBeIGJbM10pICYgbWFza1szXTsKKwlCVUlMRF9CVUdfT04oSUZOQU1TSVogPiA0ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwlyZXR1cm4gcmV0OworfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogI2luY2x1ZGUgPG5ldC9jb21wYXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oCmluZGV4IDU4MTExMzUuLmE4MTNiZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaApAQCAtMSw4ICsxLDEwIEBACiAjaWZuZGVmIF9YVF9DTEFTU0lGWV9ICiAjZGVmaW5lIF9YVF9DTEFTU0lGWV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8gewotCXVfaW50MzJfdCBwcmlvcml0eTsKKwlfX3UzMiBwcmlvcml0eTsKIH07CiAKICNlbmRpZiAvKl9YVF9DTEFTU0lGWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaAppbmRleCA0ZTU4YmE0Li43NjM1YzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9DT05OTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfQ09OTk1BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIENvcHlyaWdodCAoQykgMjAwMiwyMDA0IE1BUkEgU3lzdGVtcyBBQiA8aHR0cDovL3d3dy5tYXJhc3lzdGVtcy5jb20+CiAgKiBieSBIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPgogICoKQEAgLTE5LDEyICsyMSwxMiBAQAogc3RydWN0IHh0X2Nvbm5tYXJrX3RhcmdldF9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIG1hcms7CiAJdW5zaWduZWQgbG9uZyBtYXNrOwotCXVfaW50OF90IG1vZGU7CisJX191OCBtb2RlOwogfTsKIAogc3RydWN0IHh0X2Nvbm5tYXJrX3RnaW5mbzEgewotCXVfaW50MzJfdCBjdG1hcmssIGN0bWFzaywgbmZtYXNrOwotCXVfaW50OF90IG1vZGU7CisJX191MzIgY3RtYXJrLCBjdG1hc2ssIG5mbWFzazsKKwlfX3U4IG1vZGU7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTk1BUktfSF90YXJnZXQqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKaW5kZXggYzZiZDc1NC4uYjk3M2ZmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oCkBAIC0xLDEzICsxLDE1IEBACiAjaWZuZGVmIF9YVF9DT05OU0VDTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCUNPTk5TRUNNQVJLX1NBVkUgPSAxLAogCUNPTk5TRUNNQVJLX1JFU1RPUkUsCiB9OwogCiBzdHJ1Y3QgeHRfY29ubnNlY21hcmtfdGFyZ2V0X2luZm8gewotCXVfaW50OF90IG1vZGU7CisJX191OCBtb2RlOwogfTsKIAogI2VuZGlmIC8qX1hUX0NPTk5TRUNNQVJLX0hfdGFyZ2V0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9EU0NQLmgKaW5kZXggMTRkYTE5Ni4uNjQ4ZTBiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfRFNDUC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0RTQ1AuaApAQCAtMTEsMTUgKzExLDE2IEBACiAjaWZuZGVmIF9YVF9EU0NQX1RBUkdFVF9ICiAjZGVmaW5lIF9YVF9EU0NQX1RBUkdFVF9ICiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiB0YXJnZXQgaW5mbyAqLwogc3RydWN0IHh0X0RTQ1BfaW5mbyB7Ci0JdV9pbnQ4X3QgZHNjcDsKKwlfX3U4IGRzY3A7CiB9OwogCiBzdHJ1Y3QgeHRfdG9zX3RhcmdldF9pbmZvIHsKLQl1X2ludDhfdCB0b3NfdmFsdWU7Ci0JdV9pbnQ4X3QgdG9zX21hc2s7CisJX191OCB0b3NfdmFsdWU7CisJX191OCB0b3NfbWFzazsKIH07CiAKICNlbmRpZiAvKiBfWFRfRFNDUF9UQVJHRVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTEVELmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9MRUQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzkxYTBkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTEVELmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBfWFRfTEVEX0gKKyNkZWZpbmUgX1hUX0xFRF9ICisKK3N0cnVjdCB4dF9sZWRfaW5mbyB7CisJY2hhciBpZFsyN107ICAgICAgICAvKiBVbmlxdWUgSUQgZm9yIHRoaXMgdHJpZ2dlciBpbiB0aGUgTEVEIGNsYXNzICovCisJX191OCBhbHdheXNfYmxpbms7ICAvKiBCbGluayBldmVuIGlmIHRoZSBMRUQgaXMgYWxyZWFkeSBvbiAqLworCV9fdTMyIGRlbGF5OyAgICAgICAgLyogRGVsYXkgdW50aWwgTEVEIGlzIHN3aXRjaGVkIG9mZiBhZnRlciB0cmlnZ2VyICovCisKKwkvKiBLZXJuZWwgZGF0YSB1c2VkIGluIHRoZSBtb2R1bGUgKi8KKwl2b2lkICppbnRlcm5hbF9kYXRhIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKK307CisKKyNlbmRpZiAvKiBfWFRfTEVEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaAppbmRleCA3NzhiMjc4Li4wMjgzMDRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogVmVyc2lvbiAwICovCiBzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBtYXJrOwpAQCAtMTUsMTEgKzE3LDExIEBACiAKIHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxIHsKIAl1bnNpZ25lZCBsb25nIG1hcms7Ci0JdV9pbnQ4X3QgbW9kZTsKKwlfX3U4IG1vZGU7CiB9OwogCiBzdHJ1Y3QgeHRfbWFya190Z2luZm8yIHsKLQl1X2ludDMyX3QgbWFyaywgbWFzazsKKwlfX3UzMiBtYXJrLCBtYXNrOwogfTsKIAogI2VuZGlmIC8qX1hUX01BUktfSF90YXJnZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORkxPRy5oCmluZGV4IDRiMzZhZWIuLjg3YjU4MzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GTE9HLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfTkZMT0cuaApAQCAtMSwxNyArMSwxOSBAQAogI2lmbmRlZiBfWFRfTkZMT0dfVEFSR0VUCiAjZGVmaW5lIF9YVF9ORkxPR19UQVJHRVQKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNkZWZpbmUgWFRfTkZMT0dfREVGQVVMVF9HUk9VUAkJMHgxCiAjZGVmaW5lIFhUX05GTE9HX0RFRkFVTFRfVEhSRVNIT0xECTAKIAogI2RlZmluZSBYVF9ORkxPR19NQVNLCQkJMHgwCiAKIHN0cnVjdCB4dF9uZmxvZ19pbmZvIHsKLQl1X2ludDMyX3QJbGVuOwotCXVfaW50MTZfdAlncm91cDsKLQl1X2ludDE2X3QJdGhyZXNob2xkOwotCXVfaW50MTZfdAlmbGFnczsKLQl1X2ludDE2X3QJcGFkOworCV9fdTMyCWxlbjsKKwlfX3UxNglncm91cDsKKwlfX3UxNgl0aHJlc2hvbGQ7CisJX191MTYJZmxhZ3M7CisJX191MTYJcGFkOwogCWNoYXIJCXByZWZpeFs2NF07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKaW5kZXggOWE5YWY3OWYuLjk4MmE4OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKQEAgLTgsOSArOCwxMSBAQAogI2lmbmRlZiBfWFRfTkZRX1RBUkdFVF9ICiAjZGVmaW5lIF9YVF9ORlFfVEFSR0VUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIHRhcmdldCBpbmZvICovCiBzdHJ1Y3QgeHRfTkZRX2luZm8gewotCXVfaW50MTZfdCBxdWV1ZW51bTsKKwlfX3UxNiBxdWV1ZW51bTsKIH07CiAKICNlbmRpZiAvKiBfWFRfTkZRX1RBUkdFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9SQVRFRVNULmgKaW5kZXggZjc5ZTMxMy4uNjYwNWUyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfUkFURUVTVC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfUkFURUVTVF9UQVJHRVRfSAogI2RlZmluZSBfWFRfUkFURUVTVF9UQVJHRVRfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3JhdGVlc3RfdGFyZ2V0X2luZm8gewogCWNoYXIJCQluYW1lW0lGTkFNU0laXTsKLQlpbnQ4X3QJCQlpbnRlcnZhbDsKLQl1X2ludDhfdAkJZXdtYV9sb2c7CisJX19zOAkJCWludGVydmFsOworCV9fdTgJCWV3bWFfbG9nOwogCiAJLyogVXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBrZXJuZWwgKi8KIAlzdHJ1Y3QgeHRfcmF0ZWVzdAkqZXN0IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaAppbmRleCBjNTNmYmZmLi42ZmNkMzQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfU0VDTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfU0VDTUFSS19IX3RhcmdldAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyoKICAqIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSB2YXJpb3VzIHNlY3VyaXR5IHN1YnN5c3RlbXMgKGJ1dCBub3QKICAqIGF0IHRoZSBzYW1lIHRpbWUpLgpAQCAtMTIsMTIgKzE0LDEyIEBACiAjZGVmaW5lIFNFQ01BUktfU0VMQ1RYX01BWAkyNTYKIAogc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X3NlbGludXhfaW5mbyB7Ci0JdV9pbnQzMl90IHNlbHNpZDsKKwlfX3UzMiBzZWxzaWQ7CiAJY2hhciBzZWxjdHhbU0VDTUFSS19TRUxDVFhfTUFYXTsKIH07CiAKIHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9pbmZvIHsKLQl1X2ludDhfdCBtb2RlOworCV9fdTggbW9kZTsKIAl1bmlvbiB7CiAJCXN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gc2VsOwogCX0gdTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X1RDUE1TUy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKaW5kZXggNTNhMjkyYy4uOWE2OTYwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfVENQTVNTLmgKQEAgLTEsOCArMSwxMCBAQAogI2lmbmRlZiBfWFRfVENQTVNTX0gKICNkZWZpbmUgX1hUX1RDUE1TU19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfdGNwbXNzX2luZm8gewotCXVfaW50MTZfdCBtc3M7CisJX191MTYgbXNzOwogfTsKIAogI2RlZmluZSBYVF9UQ1BNU1NfQ0xBTVBfUE1UVSAweGZmZmYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTBhMGQwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY2x1c3Rlci5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX1hUX0NMVVNURVJfTUFUQ0hfSAorI2RlZmluZSBfWFRfQ0xVU1RFUl9NQVRDSF9ICisKK2VudW0geHRfY2x1c3Rlcl9mbGFncyB7CisJWFRfQ0xVU1RFUl9GX0lOVgk9ICgxIDw8IDApCit9OworCitzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvIHsKKwl1X2ludDMyX3QJCXRvdGFsX25vZGVzOworCXVfaW50MzJfdAkJbm9kZV9tYXNrOworCXVfaW50MzJfdAkJaGFzaF9zZWVkOworCXVfaW50MzJfdAkJZmxhZ3M7Cit9OworCisjZW5kaWYgLyogX1hUX0NMVVNURVJfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaAppbmRleCBjMDIyYzk4Li41MmJkNjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX0NPTk5CWVRFU19ICiAjZGVmaW5lIF9YVF9DT05OQllURVNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB4dF9jb25uYnl0ZXNfd2hhdCB7CiAJWFRfQ09OTkJZVEVTX1BLVFMsCiAJWFRfQ09OTkJZVEVTX0JZVEVTLApAQCAtMTksNyArMjEsNyBAQAogCQlhbGlnbmVkX3U2NCBmcm9tOwkvKiBjb3VudCB0byBiZSBtYXRjaGVkICovCiAJCWFsaWduZWRfdTY0IHRvOwkJLyogY291bnQgdG8gYmUgbWF0Y2hlZCAqLwogCX0gY291bnQ7Ci0JdV9pbnQ4X3Qgd2hhdDsJCS8qIGlwdF9jb25uYnl0ZXNfd2hhdCAqLwotCXVfaW50OF90IGRpcmVjdGlvbjsJLyogaXB0X2Nvbm5ieXRlc19kaXJlY3Rpb24gKi8KKwlfX3U4IHdoYXQ7CQkvKiBpcHRfY29ubmJ5dGVzX3doYXQgKi8KKwlfX3U4IGRpcmVjdGlvbjsJLyogaXB0X2Nvbm5ieXRlc19kaXJlY3Rpb24gKi8KIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCmluZGV4IDM1OWVmODYuLjU3MWUyNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX0NPTk5NQVJLX0gKICNkZWZpbmUgX1hUX0NPTk5NQVJLX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIENvcHlyaWdodCAoQykgMjAwMiwyMDA0IE1BUkEgU3lzdGVtcyBBQiA8aHR0cDovL3d3dy5tYXJhc3lzdGVtcy5jb20+CiAgKiBieSBIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPgogICoKQEAgLTEyLDEyICsxNCwxMiBAQAogCiBzdHJ1Y3QgeHRfY29ubm1hcmtfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyBtYXJrLCBtYXNrOwotCXVfaW50OF90IGludmVydDsKKwlfX3U4IGludmVydDsKIH07CiAKIHN0cnVjdCB4dF9jb25ubWFya19tdGluZm8xIHsKLQl1X2ludDMyX3QgbWFyaywgbWFzazsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgbWFyaywgbWFzazsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKl9YVF9DT05OTUFSS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKaW5kZXggOGY1MzQ1Mi4uMzQzMGM3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKQEAgLTYzLDkgKzYzLDkgQEAKIAl1bnNpZ25lZCBsb25nIGV4cGlyZXNfbWluLCBleHBpcmVzX21heDsKIAogCS8qIEZsYWdzIHdvcmQgKi8KLQl1X2ludDhfdCBmbGFnczsKKwlfX3U4IGZsYWdzOwogCS8qIEludmVyc2UgZmxhZ3MgKi8KLQl1X2ludDhfdCBpbnZmbGFnczsKKwlfX3U4IGludmZsYWdzOwogfTsKIAogc3RydWN0IHh0X2Nvbm50cmFja19tdGluZm8xIHsKQEAgLTczLDEyICs3MywxMiBAQAogCXVuaW9uIG5mX2luZXRfYWRkciBvcmlnZHN0X2FkZHIsIG9yaWdkc3RfbWFzazsKIAl1bmlvbiBuZl9pbmV0X2FkZHIgcmVwbHNyY19hZGRyLCByZXBsc3JjX21hc2s7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHJlcGxkc3RfYWRkciwgcmVwbGRzdF9tYXNrOwotCXVfaW50MzJfdCBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7Ci0JdV9pbnQxNl90IGw0cHJvdG87CisJX191MzIgZXhwaXJlc19taW4sIGV4cGlyZXNfbWF4OworCV9fdTE2IGw0cHJvdG87CiAJX19iZTE2IG9yaWdzcmNfcG9ydCwgb3JpZ2RzdF9wb3J0OwogCV9fYmUxNiByZXBsc3JjX3BvcnQsIHJlcGxkc3RfcG9ydDsKLQl1X2ludDE2X3QgbWF0Y2hfZmxhZ3MsIGludmVydF9mbGFnczsKLQl1X2ludDhfdCBzdGF0ZV9tYXNrLCBzdGF0dXNfbWFzazsKKwlfX3UxNiBtYXRjaF9mbGFncywgaW52ZXJ0X2ZsYWdzOworCV9fdTggc3RhdGVfbWFzaywgc3RhdHVzX21hc2s7CiB9OwogCiAjZW5kaWYgLypfWFRfQ09OTlRSQUNLX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCmluZGV4IGUwMjIxYjkuLmE1NzllMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kY2NwLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9EQ0NQX0hfCiAjZGVmaW5lIF9YVF9EQ0NQX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX0RDQ1BfU1JDX1BPUlRTCSAgICAgICAgMHgwMQogI2RlZmluZSBYVF9EQ0NQX0RFU1RfUE9SVFMJICAgICAgICAweDAyCiAjZGVmaW5lIFhUX0RDQ1BfVFlQRQkJCTB4MDQKQEAgLTksMTQgKzExLDE0IEBACiAjZGVmaW5lIFhUX0RDQ1BfVkFMSURfRkxBR1MJCTB4MGYKIAogc3RydWN0IHh0X2RjY3BfaW5mbyB7Ci0JdV9pbnQxNl90IGRwdHNbMl07ICAvKiBNaW4sIE1heCAqLwotCXVfaW50MTZfdCBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwlfX3UxNiBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KKwlfX3UxNiBzcHRzWzJdOyAgLyogTWluLCBNYXggKi8KIAotCXVfaW50MTZfdCBmbGFnczsKLQl1X2ludDE2X3QgaW52ZmxhZ3M7CisJX191MTYgZmxhZ3M7CisJX191MTYgaW52ZmxhZ3M7CiAKLQl1X2ludDE2X3QgdHlwZW1hc2s7Ci0JdV9pbnQ4X3Qgb3B0aW9uOworCV9fdTE2IHR5cGVtYXNrOworCV9fdTggb3B0aW9uOwogfTsKIAogI2VuZGlmIC8qIF9YVF9EQ0NQX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kc2NwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9kc2NwLmgKaW5kZXggZjQ5YmMxYS4uMTVmODkzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfZHNjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2RzY3AuaApAQCAtMTAsMjAgKzEwLDIyIEBACiAjaWZuZGVmIF9YVF9EU0NQX0gKICNkZWZpbmUgX1hUX0RTQ1BfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9EU0NQX01BU0sJMHhmYwkvKiAxMTExMTEwMCAqLwogI2RlZmluZSBYVF9EU0NQX1NISUZUCTIKICNkZWZpbmUgWFRfRFNDUF9NQVgJMHgzZgkvKiAwMDExMTExMSAqLwogCiAvKiBtYXRjaCBpbmZvICovCiBzdHJ1Y3QgeHRfZHNjcF9pbmZvIHsKLQl1X2ludDhfdCBkc2NwOwotCXVfaW50OF90IGludmVydDsKKwlfX3U4IGRzY3A7CisJX191OCBpbnZlcnQ7CiB9OwogCiBzdHJ1Y3QgeHRfdG9zX21hdGNoX2luZm8gewotCXVfaW50OF90IHRvc19tYXNrOwotCXVfaW50OF90IHRvc192YWx1ZTsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191OCB0b3NfbWFzazsKKwlfX3U4IHRvc192YWx1ZTsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfRFNDUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oCmluZGV4IDkzODBmYjFjLi5lZjZmYTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfRVNQX0gKICNkZWZpbmUgX1hUX0VTUF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfZXNwCiB7Ci0JdV9pbnQzMl90IHNwaXNbMl07CS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLwotCXVfaW50OF90ICBpbnZmbGFnczsJLyogSW52ZXJzZSBmbGFncyAqLworCV9fdTMyIHNwaXNbMl07CS8qIFNlY3VyaXR5IFBhcmFtZXRlciBJbmRleCAqLworCV9fdTggIGludmZsYWdzOwkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IHh0X2VzcC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKaW5kZXggNTFiMThkOC4uYjE5MjViNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9IQVNITElNSVRfSAogI2RlZmluZSBfWFRfSEFTSExJTUlUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIC8qIHRpbWluZ3MgYXJlIGluIG1pbGxpc2Vjb25kcy4gKi8KICNkZWZpbmUgWFRfSEFTSExJTUlUX1NDQUxFIDEwMDAwCiAvKiAxLzEwLDAwMCBzZWMgcGVyaW9kID0+IG1heCBvZiAxMCwwMDAvc2VjLiAgTWluIHJhdGUgaXMgdGhlbiA0Mjk0OTAKQEAgLTE4LDE1ICsyMCwxNSBAQAogfTsKIAogc3RydWN0IGhhc2hsaW1pdF9jZmcgewotCXVfaW50MzJfdCBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLwotCXVfaW50MzJfdCBhdmc7ICAgIC8qIEF2ZXJhZ2Ugc2VjcyBiZXR3ZWVuIHBhY2tldHMgKiBzY2FsZSAqLwotCXVfaW50MzJfdCBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KKwlfX3UzMiBtb2RlOwkgIC8qIGJpdG1hc2sgb2YgWFRfSEFTSExJTUlUX0hBU0hfKiAqLworCV9fdTMyIGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCisJX191MzIgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCiAKIAkvKiB1c2VyIHNwZWNpZmllZCAqLwotCXVfaW50MzJfdCBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLwotCXVfaW50MzJfdCBtYXg7CQkvKiBtYXggbnVtYmVyIG9mIGVudHJpZXMgKi8KLQl1X2ludDMyX3QgZ2NfaW50ZXJ2YWw7CS8qIGdjIGludGVydmFsICovCi0JdV9pbnQzMl90IGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KKwlfX3UzMiBzaXplOwkJLyogaG93IG1hbnkgYnVja2V0cyAqLworCV9fdTMyIG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLworCV9fdTMyIGdjX2ludGVydmFsOwkvKiBnYyBpbnRlcnZhbCAqLworCV9fdTMyIGV4cGlyZTsJLyogd2hlbiBkbyBlbnRyaWVzIGV4cGlyZT8gKi8KIH07CiAKIHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyB7CkBAIC00MiwxNyArNDQsMTcgQEAKIH07CiAKIHN0cnVjdCBoYXNobGltaXRfY2ZnMSB7Ci0JdV9pbnQzMl90IG1vZGU7CSAgLyogYml0bWFzayBvZiBYVF9IQVNITElNSVRfSEFTSF8qICovCi0JdV9pbnQzMl90IGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCi0JdV9pbnQzMl90IGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLworCV9fdTMyIG1vZGU7CSAgLyogYml0bWFzayBvZiBYVF9IQVNITElNSVRfSEFTSF8qICovCisJX191MzIgYXZnOyAgICAvKiBBdmVyYWdlIHNlY3MgYmV0d2VlbiBwYWNrZXRzICogc2NhbGUgKi8KKwlfX3UzMiBidXJzdDsgIC8qIFBlcmlvZCBtdWx0aXBsaWVyIGZvciB1cHBlciBsaW1pdC4gKi8KIAogCS8qIHVzZXIgc3BlY2lmaWVkICovCi0JdV9pbnQzMl90IHNpemU7CQkvKiBob3cgbWFueSBidWNrZXRzICovCi0JdV9pbnQzMl90IG1heDsJCS8qIG1heCBudW1iZXIgb2YgZW50cmllcyAqLwotCXVfaW50MzJfdCBnY19pbnRlcnZhbDsJLyogZ2MgaW50ZXJ2YWwgKi8KLQl1X2ludDMyX3QgZXhwaXJlOwkvKiB3aGVuIGRvIGVudHJpZXMgZXhwaXJlPyAqLworCV9fdTMyIHNpemU7CQkvKiBob3cgbWFueSBidWNrZXRzICovCisJX191MzIgbWF4OwkJLyogbWF4IG51bWJlciBvZiBlbnRyaWVzICovCisJX191MzIgZ2NfaW50ZXJ2YWw7CS8qIGdjIGludGVydmFsICovCisJX191MzIgZXhwaXJlOwkvKiB3aGVuIGRvIGVudHJpZXMgZXhwaXJlPyAqLwogCi0JdV9pbnQ4X3Qgc3JjbWFzaywgZHN0bWFzazsKKwlfX3U4IHNyY21hc2ssIGRzdG1hc2s7CiB9OwogCiBzdHJ1Y3QgeHRfaGFzaGxpbWl0X210aW5mbzEgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfaXByYW5nZS5oCmluZGV4IGE0Mjk5YzcuLmMxZjIxYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2lwcmFuZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9pcHJhbmdlLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9MSU5VWF9ORVRGSUxURVJfWFRfSVBSQU5HRV9ICiAjZGVmaW5lIF9MSU5VWF9ORVRGSUxURVJfWFRfSVBSQU5HRV9IIDEKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCUlQUkFOR0VfU1JDICAgICA9IDEgPDwgMCwJLyogbWF0Y2ggc291cmNlIElQIGFkZHJlc3MgKi8KIAlJUFJBTkdFX0RTVCAgICAgPSAxIDw8IDEsCS8qIG1hdGNoIGRlc3RpbmF0aW9uIElQIGFkZHJlc3MgKi8KQEAgLTExLDcgKzEzLDcgQEAKIHN0cnVjdCB4dF9pcHJhbmdlX210aW5mbyB7CiAJdW5pb24gbmZfaW5ldF9hZGRyIHNyY19taW4sIHNyY19tYXg7CiAJdW5pb24gbmZfaW5ldF9hZGRyIGRzdF9taW4sIGRzdF9tYXg7Ci0JdV9pbnQ4X3QgZmxhZ3M7CisJX191OCBmbGFnczsKIH07CiAKICNlbmRpZiAvKiBfTElOVVhfTkVURklMVEVSX1hUX0lQUkFOR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaAppbmRleCA3YzJiNDM5Li5iODJlZDdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaApAQCAtMSw5ICsxLDExIEBACiAjaWZuZGVmIF9YVF9MRU5HVEhfSAogI2RlZmluZSBfWFRfTEVOR1RIX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIHN0cnVjdCB4dF9sZW5ndGhfaW5mbyB7Ci0gICAgdV9pbnQxNl90CW1pbiwgbWF4OwotICAgIHVfaW50OF90CWludmVydDsKKyAgICBfX3UxNgltaW4sIG1heDsKKyAgICBfX3U4CWludmVydDsKIH07CiAKICNlbmRpZiAvKl9YVF9MRU5HVEhfSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaAppbmRleCBiM2NlNjUzLi5iYjQ3ZmM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmgKQEAgLTEsMjEgKzEsMjQgQEAKICNpZm5kZWYgX1hUX1JBVEVfSAogI2RlZmluZSBfWFRfUkFURV9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiB0aW1pbmdzIGFyZSBpbiBtaWxsaXNlY29uZHMuICovCiAjZGVmaW5lIFhUX0xJTUlUX1NDQUxFIDEwMDAwCiAKK3N0cnVjdCB4dF9saW1pdF9wcml2OworCiAvKiAxLzEwLDAwMCBzZWMgcGVyaW9kID0+IG1heCBvZiAxMCwwMDAvc2VjLiAgTWluIHJhdGUgaXMgdGhlbiA0Mjk0OTAKICAgIHNlY29uZHMsIG9yIG9uZSBldmVyeSA1OSBob3Vycy4gKi8KIHN0cnVjdCB4dF9yYXRlaW5mbyB7Ci0JdV9pbnQzMl90IGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCi0JdV9pbnQzMl90IGJ1cnN0OyAgLyogUGVyaW9kIG11bHRpcGxpZXIgZm9yIHVwcGVyIGxpbWl0LiAqLworCV9fdTMyIGF2ZzsgICAgLyogQXZlcmFnZSBzZWNzIGJldHdlZW4gcGFja2V0cyAqIHNjYWxlICovCisJX191MzIgYnVyc3Q7ICAvKiBQZXJpb2QgbXVsdGlwbGllciBmb3IgdXBwZXIgbGltaXQuICovCiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwotCXVuc2lnbmVkIGxvbmcgcHJldjsKLQl1X2ludDMyX3QgY3JlZGl0OwotCXVfaW50MzJfdCBjcmVkaXRfY2FwLCBjb3N0OworCXVuc2lnbmVkIGxvbmcgcHJldjsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLworCV9fdTMyIGNyZWRpdDsgLyogbW92ZWQgdG8geHRfbGltaXRfcHJpdiAqLworCV9fdTMyIGNyZWRpdF9jYXAsIGNvc3Q7CiAKLQkvKiBVZ2x5LCB1Z2x5IGZ1Y2tlci4gKi8KLQlzdHJ1Y3QgeHRfcmF0ZWluZm8gKm1hc3RlcjsKKwlzdHJ1Y3QgeHRfbGltaXRfcHJpdiAqbWFzdGVyOwogfTsKICNlbmRpZiAvKl9YVF9SQVRFX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCmluZGV4IGZhZTc0YmMuLjZmYTQ2MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmgKQEAgLTEsMTQgKzEsMTYgQEAKICNpZm5kZWYgX1hUX01BUktfSAogI2RlZmluZSBfWFRfTUFSS19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfbWFya19pbmZvIHsKICAgICB1bnNpZ25lZCBsb25nIG1hcmssIG1hc2s7Ci0gICAgdV9pbnQ4X3QgaW52ZXJ0OworICAgIF9fdTggaW52ZXJ0OwogfTsKIAogc3RydWN0IHh0X21hcmtfbXRpbmZvMSB7Ci0JdV9pbnQzMl90IG1hcmssIG1hc2s7Ci0JdV9pbnQ4X3QgaW52ZXJ0OworCV9fdTMyIG1hcmssIG1hc2s7CisJX191OCBpbnZlcnQ7CiB9OwogCiAjZW5kaWYgLypfWFRfTUFSS19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKaW5kZXggZDQ5ZWU0MS4uMTg1ZGI0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9NVUxUSVBPUlRfSAogI2RlZmluZSBfWFRfTVVMVElQT1JUX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfbXVsdGlwb3J0X2ZsYWdzCiB7CiAJWFRfTVVMVElQT1JUX1NPVVJDRSwKQEAgLTEzLDE4ICsxNSwxOCBAQAogLyogTXVzdCBmaXQgaW5zaWRlIHVuaW9uIHh0X21hdGNoaW5mbzogMTYgYnl0ZXMgKi8KIHN0cnVjdCB4dF9tdWx0aXBvcnQKIHsKLQl1X2ludDhfdCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCi0JdV9pbnQ4X3QgY291bnQ7CQkJCS8qIE51bWJlciBvZiBwb3J0cyAqLwotCXVfaW50MTZfdCBwb3J0c1tYVF9NVUxUSV9QT1JUU107CS8qIFBvcnRzICovCisJX191OCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCisJX191OCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJX191MTYgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLwogfTsKIAogc3RydWN0IHh0X211bHRpcG9ydF92MQogewotCXVfaW50OF90IGZsYWdzOwkJCQkvKiBUeXBlIG9mIGNvbXBhcmlzb24gKi8KLQl1X2ludDhfdCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCi0JdV9pbnQxNl90IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydHMgKi8KLQl1X2ludDhfdCBwZmxhZ3NbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0IGZsYWdzICovCi0JdV9pbnQ4X3QgaW52ZXJ0OwkJCS8qIEludmVydCBmbGFnICovCisJX191OCBmbGFnczsJCQkJLyogVHlwZSBvZiBjb21wYXJpc29uICovCisJX191OCBjb3VudDsJCQkJLyogTnVtYmVyIG9mIHBvcnRzICovCisJX191MTYgcG9ydHNbWFRfTVVMVElfUE9SVFNdOwkvKiBQb3J0cyAqLworCV9fdTggcGZsYWdzW1hUX01VTFRJX1BPUlRTXTsJLyogUG9ydCBmbGFncyAqLworCV9fdTggaW52ZXJ0OwkJCS8qIEludmVydCBmbGFnICovCiB9OwogCiAjZW5kaWYgLypfWFRfTVVMVElQT1JUX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X293bmVyLmgKaW5kZXggYzg0ZTUyYy4uMjA4MTc2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfb3duZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9vd25lci5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfT1dORVJfTUFUQ0hfSAogI2RlZmluZSBfWFRfT1dORVJfTUFUQ0hfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogZW51bSB7CiAJWFRfT1dORVJfVUlEICAgID0gMSA8PCAwLAogCVhUX09XTkVSX0dJRCAgICA9IDEgPDwgMSwKQEAgLTgsOSArMTAsOSBAQAogfTsKIAogc3RydWN0IHh0X293bmVyX21hdGNoX2luZm8gewotCXVfaW50MzJfdCB1aWRfbWluLCB1aWRfbWF4OwotCXVfaW50MzJfdCBnaWRfbWluLCBnaWRfbWF4OwotCXVfaW50OF90IG1hdGNoLCBpbnZlcnQ7CisJX191MzIgdWlkX21pbiwgdWlkX21heDsKKwlfX3UzMiBnaWRfbWluLCBnaWRfbWF4OworCV9fdTggbWF0Y2gsIGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfT1dORVJfTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oCmluZGV4IDI1YTdhMTguLjg1NTVlMzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9waHlzZGV2LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9QSFlTREVWX0gKICNkZWZpbmUgX1hUX1BIWVNERVZfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2VuZGlmCkBAIC0xNyw4ICsxOSw4IEBACiAJY2hhciBpbl9tYXNrW0lGTkFNU0laXTsKIAljaGFyIHBoeXNvdXRkZXZbSUZOQU1TSVpdOwogCWNoYXIgb3V0X21hc2tbSUZOQU1TSVpdOwotCXVfaW50OF90IGludmVydDsKLQl1X2ludDhfdCBiaXRtYXNrOworCV9fdTggaW52ZXJ0OworCV9fdTggYml0bWFzazsKIH07CiAKICNlbmRpZiAvKl9YVF9QSFlTREVWX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaAppbmRleCAwNTNkOGNjLi43YmI2NGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9wb2xpY3kuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX1hUX1BPTElDWV9ICiAjZGVmaW5lIF9YVF9QT0xJQ1lfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBYVF9QT0xJQ1lfTUFYX0VMRU0JNAogCiBlbnVtIHh0X3BvbGljeV9mbGFncwpAQCAtMTksNyArMjEsNyBAQAogCiBzdHJ1Y3QgeHRfcG9saWN5X3NwZWMKIHsKLQl1X2ludDhfdAlzYWRkcjoxLAorCV9fdTgJc2FkZHI6MSwKIAkJCWRhZGRyOjEsCiAJCQlwcm90bzoxLAogCQkJbW9kZToxLApAQCAtNTUsOSArNTcsOSBAQAogI2VuZGlmCiAJfTsKIAlfX2JlMzIJCQlzcGk7Ci0JdV9pbnQzMl90CQlyZXFpZDsKLQl1X2ludDhfdAkJcHJvdG87Ci0JdV9pbnQ4X3QJCW1vZGU7CisJX191MzIJCXJlcWlkOworCV9fdTgJCXByb3RvOworCV9fdTgJCW1vZGU7CiAKIAlzdHJ1Y3QgeHRfcG9saWN5X3NwZWMJbWF0Y2g7CiAJc3RydWN0IHh0X3BvbGljeV9zcGVjCWludmVydDsKQEAgLTY2LDggKzY4LDggQEAKIHN0cnVjdCB4dF9wb2xpY3lfaW5mbwogewogCXN0cnVjdCB4dF9wb2xpY3lfZWxlbSBwb2xbWFRfUE9MSUNZX01BWF9FTEVNXTsKLQl1X2ludDE2X3QgZmxhZ3M7Ci0JdV9pbnQxNl90IGxlbjsKKwlfX3UxNiBmbGFnczsKKwlfX3UxNiBsZW47CiB9OwogCiAjZW5kaWYgLyogX1hUX1BPTElDWV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaAppbmRleCA0YzgzNjhkLi44ZGM4OWRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmgKQEAgLTYsMTMgKzYsMTUgQEAKIH07CiAjZGVmaW5lIFhUX1FVT1RBX01BU0sJCTB4MQogCitzdHJ1Y3QgeHRfcXVvdGFfcHJpdjsKKwogc3RydWN0IHh0X3F1b3RhX2luZm8gewogCXVfaW50MzJfdAkJZmxhZ3M7CiAJdV9pbnQzMl90CQlwYWQ7CiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwogCWFsaWduZWRfdTY0CQlxdW90YTsKLQlzdHJ1Y3QgeHRfcXVvdGFfaW5mbwkqbWFzdGVyOworCXN0cnVjdCB4dF9xdW90YV9wcml2CSptYXN0ZXI7CiB9OwogCiAjZW5kaWYgLyogX1hUX1FVT1RBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JhdGVlc3QuaAppbmRleCAyMDEwY2I3Li5kNDBhNjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yYXRlZXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmF0ZWVzdC5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfUkFURUVTVF9NQVRDSF9ICiAjZGVmaW5lIF9YVF9SQVRFRVNUX01BVENIX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfcmF0ZWVzdF9tYXRjaF9mbGFncyB7CiAJWFRfUkFURUVTVF9NQVRDSF9JTlZFUlQJPSAxPDwwLAogCVhUX1JBVEVFU1RfTUFUQ0hfQUJTCT0gMTw8MSwKQEAgLTIwLDEyICsyMiwxMiBAQAogc3RydWN0IHh0X3JhdGVlc3RfbWF0Y2hfaW5mbyB7CiAJY2hhcgkJCW5hbWUxW0lGTkFNU0laXTsKIAljaGFyCQkJbmFtZTJbSUZOQU1TSVpdOwotCXVfaW50MTZfdAkJZmxhZ3M7Ci0JdV9pbnQxNl90CQltb2RlOwotCXVfaW50MzJfdAkJYnBzMTsKLQl1X2ludDMyX3QJCXBwczE7Ci0JdV9pbnQzMl90CQlicHMyOwotCXVfaW50MzJfdAkJcHBzMjsKKwlfX3UxNgkJZmxhZ3M7CisJX191MTYJCW1vZGU7CisJX191MzIJCWJwczE7CisJX191MzIJCXBwczE7CisJX191MzIJCWJwczI7CisJX191MzIJCXBwczI7CiAKIAkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLwogCXN0cnVjdCB4dF9yYXRlZXN0CSplc3QxIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oCmluZGV4IDIyMGU4NzIuLmQ0YTgyZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaApAQCAtMSwxMCArMSwxMiBAQAogI2lmbmRlZiBfWFRfUkVBTE1fSAogI2RlZmluZSBfWFRfUkVBTE1fSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHh0X3JlYWxtX2luZm8gewotCXVfaW50MzJfdCBpZDsKLQl1X2ludDMyX3QgbWFzazsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgaWQ7CisJX191MzIgbWFzazsKKwlfX3U4IGludmVydDsKIH07CiAKICNlbmRpZiAvKiBfWFRfUkVBTE1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfcmVjZW50LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaAppbmRleCA1Y2ZlYjgxLi5kMmMyNzY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0xJTlVYX05FVEZJTFRFUl9YVF9SRUNFTlRfSAogI2RlZmluZSBfTElOVVhfTkVURklMVEVSX1hUX1JFQ0VOVF9IIDEKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0gewogCVhUX1JFQ0VOVF9DSEVDSyAgICA9IDEgPDwgMCwKIAlYVF9SRUNFTlRfU0VUICAgICAgPSAxIDw8IDEsCkBAIC0xNSwxMiArMTcsMTIgQEAKIH07CiAKIHN0cnVjdCB4dF9yZWNlbnRfbXRpbmZvIHsKLQl1X2ludDMyX3Qgc2Vjb25kczsKLQl1X2ludDMyX3QgaGl0X2NvdW50OwotCXVfaW50OF90IGNoZWNrX3NldDsKLQl1X2ludDhfdCBpbnZlcnQ7CisJX191MzIgc2Vjb25kczsKKwlfX3UzMiBoaXRfY291bnQ7CisJX191OCBjaGVja19zZXQ7CisJX191OCBpbnZlcnQ7CiAJY2hhciBuYW1lW1hUX1JFQ0VOVF9OQU1FX0xFTl07Ci0JdV9pbnQ4X3Qgc2lkZTsKKwlfX3U4IHNpZGU7CiB9OwogCiAjZW5kaWYgLyogX0xJTlVYX05FVEZJTFRFUl9YVF9SRUNFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCmluZGV4IDMyMDAwYmEuLjI5Mjg3YmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9TQ1RQX0hfCiAjZGVmaW5lIF9YVF9TQ1RQX0hfCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX1NDVFBfU1JDX1BPUlRTCSAgICAgICAgMHgwMQogI2RlZmluZSBYVF9TQ1RQX0RFU1RfUE9SVFMJICAgICAgICAweDAyCiAjZGVmaW5lIFhUX1NDVFBfQ0hVTktfVFlQRVMJCTB4MDQKQEAgLTgsNDkgKzEwLDQ5IEBACiAjZGVmaW5lIFhUX1NDVFBfVkFMSURfRkxBR1MJCTB4MDcKIAogc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvIHsKLQl1X2ludDhfdCBjaHVua3R5cGU7Ci0JdV9pbnQ4X3QgZmxhZzsKLQl1X2ludDhfdCBmbGFnX21hc2s7CisJX191OCBjaHVua3R5cGU7CisJX191OCBmbGFnOworCV9fdTggZmxhZ19tYXNrOwogfTsKIAogI2RlZmluZSBYVF9OVU1fU0NUUF9GTEFHUwk0CiAKIHN0cnVjdCB4dF9zY3RwX2luZm8gewotCXVfaW50MTZfdCBkcHRzWzJdOyAgLyogTWluLCBNYXggKi8KLQl1X2ludDE2X3Qgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgZHB0c1syXTsgIC8qIE1pbiwgTWF4ICovCisJX191MTYgc3B0c1syXTsgIC8qIE1pbiwgTWF4ICovCiAKLQl1X2ludDMyX3QgY2h1bmttYXBbMjU2IC8gc2l6ZW9mICh1X2ludDMyX3QpXTsgIC8qIEJpdCBtYXNrIG9mIGNodW5rcyB0byBiZSBtYXRjaGVkIGFjY29yZGluZyB0byBSRkMgMjk2MCAqLworCV9fdTMyIGNodW5rbWFwWzI1NiAvIHNpemVvZiAoX191MzIpXTsgIC8qIEJpdCBtYXNrIG9mIGNodW5rcyB0byBiZSBtYXRjaGVkIGFjY29yZGluZyB0byBSRkMgMjk2MCAqLwogCiAjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQU5ZICAgMHgwMSAgLyogTWF0Y2ggaWYgYW55IG9mIHRoZSBjaHVuayB0eXBlcyBhcmUgcHJlc2VudCAqLwogI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FMTCAgIDB4MDIgIC8qIE1hdGNoIGlmIGFsbCBvZiB0aGUgY2h1bmsgdHlwZXMgYXJlIHByZXNlbnQgKi8KICNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9PTkxZICAweDA0ICAvKiBNYXRjaCBpZiB0aGVzZSBhcmUgdGhlIG9ubHkgY2h1bmsgdHlwZXMgcHJlc2VudCAqLwogCi0JdV9pbnQzMl90IGNodW5rX21hdGNoX3R5cGU7CisJX191MzIgY2h1bmtfbWF0Y2hfdHlwZTsKIAlzdHJ1Y3QgeHRfc2N0cF9mbGFnX2luZm8gZmxhZ19pbmZvW1hUX05VTV9TQ1RQX0ZMQUdTXTsKIAlpbnQgZmxhZ19jb3VudDsKIAotCXVfaW50MzJfdCBmbGFnczsKLQl1X2ludDMyX3QgaW52ZmxhZ3M7CisJX191MzIgZmxhZ3M7CisJX191MzIgaW52ZmxhZ3M7CiB9OwogCiAjZGVmaW5lIGJ5dGVzKHR5cGUpIChzaXplb2YodHlwZSkgKiA4KQogCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUKGNodW5rbWFwLCB0eXBlKSAJCVwKIAlkbyB7IAkJCQkJCVwKLQkJKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gfD0gCVwKLQkJCTEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKTsJXAorCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyhfX3UzMildIHw9IAlcCisJCQkxIDw8ICh0eXBlICUgYnl0ZXMoX191MzIpKTsJXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9DTEVBUihjaHVua21hcCwgdHlwZSkJCSAJXAogCWRvIHsJCQkJCQkJXAotCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyh1X2ludDMyX3QpXSAmPSAJCVwKLQkJCX4oMSA8PCAodHlwZSAlIGJ5dGVzKHVfaW50MzJfdCkpKTsJXAorCQkoY2h1bmttYXApW3R5cGUgLyBieXRlcyhfX3UzMildICY9IAkJXAorCQkJfigxIDw8ICh0eXBlICUgYnl0ZXMoX191MzIpKSk7CVwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfU0VUKGNodW5rbWFwLCB0eXBlKSAJCQlcCiAoewkJCQkJCQkJXAotCSgoY2h1bmttYXApW3R5cGUgLyBieXRlcyAodV9pbnQzMl90KV0gJiAJCVwKLQkJKDEgPDwgKHR5cGUgJSBieXRlcyAodV9pbnQzMl90KSkpKSA/IDE6IDA7CVwKKwkoKGNodW5rbWFwKVt0eXBlIC8gYnl0ZXMgKF9fdTMyKV0gJiAJCVwKKwkJKDEgPDwgKHR5cGUgJSBieXRlcyAoX191MzIpKSkpID8gMTogMDsJXAogfSkKIAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1JFU0VUKGNodW5rbWFwKSBcCkBAIC02NSw3ICs2Nyw3IEBACiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQ0xFQVIoY2h1bmttYXApIFwKIAlfX3NjdHBfY2h1bmttYXBfaXNfY2xlYXIoKGNodW5rbWFwKSwgQVJSQVlfU0laRShjaHVua21hcCkpCiBzdGF0aWMgaW5saW5lIGJvb2wKLV9fc2N0cF9jaHVua21hcF9pc19jbGVhcihjb25zdCB1X2ludDMyX3QgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKK19fc2N0cF9jaHVua21hcF9pc19jbGVhcihjb25zdCBfX3UzMiAqY2h1bmttYXAsIHVuc2lnbmVkIGludCBuKQogewogCXVuc2lnbmVkIGludCBpOwogCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCkBAIC03Nyw3ICs3OSw3IEBACiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQUxMX1NFVChjaHVua21hcCkgXAogCV9fc2N0cF9jaHVua21hcF9pc19hbGxfc2V0KChjaHVua21hcCksIEFSUkFZX1NJWkUoY2h1bmttYXApKQogc3RhdGljIGlubGluZSBib29sCi1fX3NjdHBfY2h1bmttYXBfaXNfYWxsX3NldChjb25zdCB1X2ludDMyX3QgKmNodW5rbWFwLCB1bnNpZ25lZCBpbnQgbikKK19fc2N0cF9jaHVua21hcF9pc19hbGxfc2V0KGNvbnN0IF9fdTMyICpjaHVua21hcCwgdW5zaWduZWQgaW50IG4pCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IG47ICsraSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKaW5kZXggM2QzOGJjOS4uNGU5ODNlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9YVF9TVEFUSVNUSUNfSAogI2RlZmluZSBfWFRfU1RBVElTVElDX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKIGVudW0geHRfc3RhdGlzdGljX21vZGUgewogCVhUX1NUQVRJU1RJQ19NT0RFX1JBTkRPTSwKIAlYVF9TVEFUSVNUSUNfTU9ERV9OVEgsCkBAIC0xMywyMSArMTUsMjIgQEAKIH07CiAjZGVmaW5lIFhUX1NUQVRJU1RJQ19NQVNLCQkweDEKIAorc3RydWN0IHh0X3N0YXRpc3RpY19wcml2OworCiBzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gewotCXVfaW50MTZfdAkJCW1vZGU7Ci0JdV9pbnQxNl90CQkJZmxhZ3M7CisJX191MTYJCQltb2RlOworCV9fdTE2CQkJZmxhZ3M7CiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJdV9pbnQzMl90CXByb2JhYmlsaXR5OworCQkJX191MzIJcHJvYmFiaWxpdHk7CiAJCX0gcmFuZG9tOwogCQlzdHJ1Y3QgewotCQkJdV9pbnQzMl90CWV2ZXJ5OwotCQkJdV9pbnQzMl90CXBhY2tldDsKLQkJCS8qIFVzZWQgaW50ZXJuYWxseSBieSB0aGUga2VybmVsICovCi0JCQl1X2ludDMyX3QJY291bnQ7CisJCQlfX3UzMglldmVyeTsKKwkJCV9fdTMyCXBhY2tldDsKKwkJCV9fdTMyCWNvdW50OyAvKiB1bnVzZWQgKi8KIAkJfSBudGg7CiAJfSB1OwotCXN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbwkqbWFzdGVyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKwlzdHJ1Y3QgeHRfc3RhdGlzdGljX3ByaXYgKm1hc3RlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiB9OwogCiAjZW5kaWYgLyogX1hUX1NUQVRJU1RJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCmluZGV4IDhhNmJhN2IuLmVjYmI5NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfWFRfU1RSSU5HX0gKICNkZWZpbmUgX1hUX1NUUklOR19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAjZGVmaW5lIFhUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFIDEyOAogI2RlZmluZSBYVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFIDE2CiAKQEAgLTExLDE4ICsxMywxOCBAQAogCiBzdHJ1Y3QgeHRfc3RyaW5nX2luZm8KIHsKLQl1X2ludDE2X3QgZnJvbV9vZmZzZXQ7Ci0JdV9pbnQxNl90IHRvX29mZnNldDsKKwlfX3UxNiBmcm9tX29mZnNldDsKKwlfX3UxNiB0b19vZmZzZXQ7CiAJY2hhcgkgIGFsZ29bWFRfU1RSSU5HX01BWF9BTEdPX05BTUVfU0laRV07CiAJY2hhciAJICBwYXR0ZXJuW1hUX1NUUklOR19NQVhfUEFUVEVSTl9TSVpFXTsKLQl1X2ludDhfdCAgcGF0bGVuOworCV9fdTggIHBhdGxlbjsKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQl1X2ludDhfdCAgaW52ZXJ0OworCQkJX191OCAgaW52ZXJ0OwogCQl9IHYwOwogCiAJCXN0cnVjdCB7Ci0JCQl1X2ludDhfdCAgZmxhZ3M7CisJCQlfX3U4ICBmbGFnczsKIAkJfSB2MTsKIAl9IHU7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKaW5kZXggZTAzMjc0Yy4uZmJhYzU2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKQEAgLTEsOSArMSwxMSBAQAogI2lmbmRlZiBfWFRfVENQTVNTX01BVENIX0gKICNkZWZpbmUgX1hUX1RDUE1TU19NQVRDSF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiBzdHJ1Y3QgeHRfdGNwbXNzX21hdGNoX2luZm8gewotICAgIHVfaW50MTZfdCBtc3NfbWluLCBtc3NfbWF4OwotICAgIHVfaW50OF90IGludmVydDsKKyAgICBfX3UxNiBtc3NfbWluLCBtc3NfbWF4OworICAgIF9fdTggaW52ZXJ0OwogfTsKIAogI2VuZGlmIC8qX1hUX1RDUE1TU19NQVRDSF9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKaW5kZXggNzhiYzY1Zi4uYTQ5MGEwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKQEAgLTEsMTUgKzEsMTcgQEAKICNpZm5kZWYgX1hUX1RDUFVEUF9ICiAjZGVmaW5lIF9YVF9UQ1BVRFBfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogVENQIG1hdGNoaW5nIHN0dWZmICovCiBzdHJ1Y3QgeHRfdGNwCiB7Ci0JdV9pbnQxNl90IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCi0JdV9pbnQxNl90IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KLQl1X2ludDhfdCBvcHRpb247CQkJLyogVENQIE9wdGlvbiBpZmYgbm9uLXplcm8qLwotCXVfaW50OF90IGZsZ19tYXNrOwkJCS8qIFRDUCBmbGFncyBtYXNrIGJ5dGUgKi8KLQl1X2ludDhfdCBmbGdfY21wOwkJCS8qIFRDUCBmbGFncyBjb21wYXJlIGJ5dGUgKi8KLQl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCisJX191MTYgc3B0c1syXTsJCQkvKiBTb3VyY2UgcG9ydCByYW5nZS4gKi8KKwlfX3UxNiBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCisJX191OCBvcHRpb247CQkJLyogVENQIE9wdGlvbiBpZmYgbm9uLXplcm8qLworCV9fdTggZmxnX21hc2s7CQkJLyogVENQIGZsYWdzIG1hc2sgYnl0ZSAqLworCV9fdTggZmxnX2NtcDsJCQkvKiBUQ1AgZmxhZ3MgY29tcGFyZSBieXRlICovCisJX191OCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnYiIGZpZWxkIGluIHN0cnVjdCBpcHRfdGNwLiAqLwpAQCAtMjIsOSArMjQsOSBAQAogLyogVURQIG1hdGNoaW5nIHN0dWZmICovCiBzdHJ1Y3QgeHRfdWRwCiB7Ci0JdV9pbnQxNl90IHNwdHNbMl07CQkJLyogU291cmNlIHBvcnQgcmFuZ2UuICovCi0JdV9pbnQxNl90IGRwdHNbMl07CQkJLyogRGVzdGluYXRpb24gcG9ydCByYW5nZS4gKi8KLQl1X2ludDhfdCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCisJX191MTYgc3B0c1syXTsJCQkvKiBTb3VyY2UgcG9ydCByYW5nZS4gKi8KKwlfX3UxNiBkcHRzWzJdOwkJCS8qIERlc3RpbmF0aW9uIHBvcnQgcmFuZ2UuICovCisJX191OCBpbnZmbGFnczsJCQkvKiBJbnZlcnNlIGZsYWdzICovCiB9OwogCiAvKiBWYWx1ZXMgZm9yICJpbnZmbGFncyIgZmllbGQgaW4gc3RydWN0IGlwdF91ZHAuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCmluZGV4IDQ5OWFhOTMuLmY4MTA1ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCkBAIC01OSw5ICs1OSw5IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBuZl9icmlkZ2VfZW5jYXBfaGVhZGVyX2xlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSk6CisJY2FzZSBfX2NwdV90b19iZTE2KEVUSF9QXzgwMjFRKToKIAkJcmV0dXJuIFZMQU5fSExFTjsKLQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUFBQX1NFUyk6CisJY2FzZSBfX2NwdV90b19iZTE2KEVUSF9QX1BQUF9TRVMpOgogCQlyZXR1cm4gUFBQT0VfU0VTX0hMRU47CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaAppbmRleCA5MmY0YmRhLi5hNzg0NDViZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCkBAIC05LDEwICs5LDEwIEBACiAjZGVmaW5lIElQVF9PV05FUl9DT01NCTB4MTAKIAogc3RydWN0IGlwdF9vd25lcl9pbmZvIHsKLSAgICB1aWRfdCB1aWQ7Ci0gICAgZ2lkX3QgZ2lkOwotICAgIHBpZF90IHBpZDsKLSAgICBwaWRfdCBzaWQ7CisgICAgX19rZXJuZWxfdWlkMzJfdCB1aWQ7CisgICAgX19rZXJuZWxfZ2lkMzJfdCBnaWQ7CisgICAgX19rZXJuZWxfcGlkX3QgcGlkOworICAgIF9fa2VybmVsX3BpZF90IHNpZDsKICAgICBjaGFyIGNvbW1bMTZdOwogICAgIHVfaW50OF90IG1hdGNoLCBpbnZlcnQ7CS8qIGZsYWdzICovCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAppbmRleCA4ODg3YTVmLi5hY2E0YmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L0tidWlsZApAQCAtMTEsNiArMTEsNyBAQAogaGVhZGVyLXkgKz0gaXA2dF9saW1pdC5oCiBoZWFkZXIteSArPSBpcDZ0X21hYy5oCiBoZWFkZXIteSArPSBpcDZ0X21hcmsuaAoraGVhZGVyLXkgKz0gaXA2dF9taC5oCiBoZWFkZXIteSArPSBpcDZ0X211bHRpcG9ydC5oCiBoZWFkZXIteSArPSBpcDZ0X29wdHMuaAogaGVhZGVyLXkgKz0gaXA2dF9vd25lci5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCmluZGV4IDE5OTM3ZGEuLmVjNWNjN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCkBAIC04LDEwICs4LDEwIEBACiAjZGVmaW5lIElQNlRfT1dORVJfU0lECTB4MDgKIAogc3RydWN0IGlwNnRfb3duZXJfaW5mbyB7Ci0gICAgdWlkX3QgdWlkOwotICAgIGdpZF90IGdpZDsKLSAgICBwaWRfdCBwaWQ7Ci0gICAgcGlkX3Qgc2lkOworICAgIF9fa2VybmVsX3VpZDMyX3QgdWlkOworICAgIF9fa2VybmVsX2dpZDMyX3QgZ2lkOworICAgIF9fa2VybmVsX3BpZF90IHBpZDsKKyAgICBfX2tlcm5lbF9waWRfdCBzaWQ7CiAgICAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsJLyogZmxhZ3MgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKaW5kZXggNTFiMDlhMS4uNWJhMzk4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgKQEAgLTEwMyw2ICsxMDMsOCBAQAogI2RlZmluZSBORVRMSU5LX0FERF9NRU1CRVJTSElQCTEKICNkZWZpbmUgTkVUTElOS19EUk9QX01FTUJFUlNISVAJMgogI2RlZmluZSBORVRMSU5LX1BLVElORk8JCTMKKyNkZWZpbmUgTkVUTElOS19CUk9BRENBU1RfRVJST1IJNAorI2RlZmluZSBORVRMSU5LX05PX0VOT0JVRlMJNQogCiBzdHJ1Y3QgbmxfcGt0aW5mbwogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAppbmRleCBlMzhkM2M5Li5kZTk5MDI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtNjMsNiArNjMsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3J4X29uKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpbmZvID0gc2tiLT5kZXYtPm5waW5mbzsKKworCXJldHVybiBucGluZm8gJiYgKG5waW5mby0+cnhfbnAgfHwgbnBpbmZvLT5yeF9mbGFncyk7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IG5ldHBvbGxfcmVjZWl2ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAoIWxpc3RfZW1wdHkoJnNrYi0+ZGV2LT5uYXBpX2xpc3QpKQpAQCAtOTksNiArMTA2LDEwIEBACiB7CiAJcmV0dXJuIDA7CiB9CitzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3J4X29uKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIDA7Cit9CiBzdGF0aWMgaW5saW5lIGludCBuZXRwb2xsX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCBkYjg2N2IwLi44Y2M4ODA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTQxNSw3ICs0MTUsNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG5mczNfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAjZW5kaWYgLyogQ09ORklHX05GU19WMyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmZzX2Rpcl9vcGVyYXRpb25zOwotZXh0ZXJuIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBuZnNfZGVudHJ5X29wZXJhdGlvbnM7CitleHRlcm4gY29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIG5mc19kZW50cnlfb3BlcmF0aW9uczsKIAogZXh0ZXJuIHZvaWQgbmZzX2ZvcmNlX2xvb2t1cF9yZXZhbGlkYXRlKHN0cnVjdCBpbm9kZSAqZGlyKTsKIGV4dGVybiBpbnQgbmZzX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5mc19maCAqZmgsIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKaW5kZXggMmU1ZjAwMC4uNDNhNzEzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfeGRyLmgKQEAgLTc4NSw3ICs3ODUsNyBAQAogICovCiBzdHJ1Y3QgbmZzX3JwY19vcHMgewogCXUzMgl2ZXJzaW9uOwkJLyogUHJvdG9jb2wgdmVyc2lvbiAqLwotCXN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZGVudHJ5X29wczsKKwljb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgKmRlbnRyeV9vcHM7CiAJY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmRpcl9pbm9kZV9vcHM7CiAJY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKmZpbGVfaW5vZGVfb3BzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCmluZGV4IGU4NmVkNTkuLmNiZThjZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCkBAIC00Nyw3ICs0Nyw3IEBACiAgKiBATkw4MDIxMV9DTURfU0VUX1dJUEhZOiBzZXQgd2lwaHkgcGFyYW1ldGVycywgbmVlZHMgJU5MODAyMTFfQVRUUl9XSVBIWSBvcgogICoJJU5MODAyMTFfQVRUUl9JRklOREVYOyBjYW4gYmUgdXNlZCB0byBzZXQgJU5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLAogICoJJU5MODAyMTFfQVRUUl9XSVBIWV9UWFFfUEFSQU1TLCAlTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEsIGFuZC9vcgotICoJJU5MODAyMTFfQVRUUl9XSVBIWV9TRUNfQ0hBTl9PRkZTRVQuCisgKgklTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRS4KICAqIEBOTDgwMjExX0NNRF9ORVdfV0lQSFk6IE5ld2x5IGNyZWF0ZWQgd2lwaHksIHJlc3BvbnNlIHRvIGdldCByZXF1ZXN0CiAgKglvciByZW5hbWUgbm90aWZpY2F0aW9uLiBIYXMgYXR0cmlidXRlcyAlTkw4MDIxMV9BVFRSX1dJUEhZIGFuZAogICoJJU5MODAyMTFfQVRUUl9XSVBIWV9OQU1FLgpAQCAtNzIsOCArNzIsOCBAQAogICoKICAqIEBOTDgwMjExX0NNRF9HRVRfS0VZOiBHZXQgc2VxdWVuY2UgY291bnRlciBpbmZvcm1hdGlvbiBmb3IgYSBrZXkgc3BlY2lmaWVkCiAgKglieSAlTkw4MDIxMV9BVFRSX0tFWV9JRFggYW5kL29yICVOTDgwMjExX0FUVFJfTUFDLgotICogQE5MODAyMTFfQ01EX1NFVF9LRVk6IFNldCBrZXkgYXR0cmlidXRlcyAlTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUIG9yCi0gKgklTkw4MDIxMV9BVFRSX0tFWV9USFJFU0hPTEQuCisgKiBATkw4MDIxMV9DTURfU0VUX0tFWTogU2V0IGtleSBhdHRyaWJ1dGVzICVOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFQsCisgKgklTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUX01HTVQsIG9yICVOTDgwMjExX0FUVFJfS0VZX1RIUkVTSE9MRC4KICAqIEBOTDgwMjExX0NNRF9ORVdfS0VZOiBhZGQgYSBrZXkgd2l0aCBnaXZlbiAlTkw4MDIxMV9BVFRSX0tFWV9EQVRBLAogICoJJU5MODAyMTFfQVRUUl9LRVlfSURYLCAlTkw4MDIxMV9BVFRSX01BQyBhbmQgJU5MODAyMTFfQVRUUl9LRVlfQ0lQSEVSCiAgKglhdHRyaWJ1dGVzLgpAQCAtODQsNyArODQsNyBAQAogICoJJU5MODAyMjJfQ01EX05FV19CRUFDT04gbWVzc2FnZSkKICAqIEBOTDgwMjExX0NNRF9TRVRfQkVBQ09OOiBzZXQgdGhlIGJlYWNvbiBvbiBhbiBhY2Nlc3MgcG9pbnQgaW50ZXJmYWNlCiAgKgl1c2luZyB0aGUgJU5MODAyMTFfQVRUUl9CRUFDT05fSU5URVJWQUwsICVOTDgwMjExX0FUVFJfRFRJTV9QRVJJT0QsCi0gKgklTkw4MDIxMV9CRUFDT05fSEVBRCBhbmQgJU5MODAyMTFfQkVBQ09OX1RBSUwgYXR0cmlidXRlcy4KKyAqCSVOTDgwMjExX0FUVFJfQkVBQ09OX0hFQUQgYW5kICVOTDgwMjExX0FUVFJfQkVBQ09OX1RBSUwgYXR0cmlidXRlcy4KICAqIEBOTDgwMjExX0NNRF9ORVdfQkVBQ09OOiBhZGQgYSBuZXcgYmVhY29uIHRvIGFuIGFjY2VzcyBwb2ludCBpbnRlcmZhY2UsCiAgKglwYXJhbWV0ZXJzIGFyZSBsaWtlIGZvciAlTkw4MDIxMV9DTURfU0VUX0JFQUNPTi4KICAqIEBOTDgwMjExX0NNRF9ERUxfQkVBQ09OOiByZW1vdmUgdGhlIGJlYWNvbiwgc3RvcCBzZW5kaW5nIGl0CkBAIC0xMTMsNiArMTEzLDggQEAKICAqIEBOTDgwMjExX0NNRF9TRVRfQlNTOiBTZXQgQlNTIGF0dHJpYnV0ZXMgZm9yIEJTUyBpZGVudGlmaWVkIGJ5CiAgKgklTkw4MDIxMV9BVFRSX0lGSU5ERVguCiAgKgorICogQE5MODAyMTFfQ01EX0dFVF9SRUc6IGFzayB0aGUgd2lyZWxlc3MgY29yZSB0byBzZW5kIHVzIGl0cyBjdXJyZW50bHkgc2V0CisgKiAJcmVndWxhdG9yeSBkb21haW4uCiAgKiBATkw4MDIxMV9DTURfU0VUX1JFRzogU2V0IGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4uIENSREEgc2VuZHMgdGhpcyBjb21tYW5kCiAgKglhZnRlciBiZWluZyBxdWVyaWVkIGJ5IHRoZSBrZXJuZWwuIENSREEgcmVwbGllcyBieSBzZW5kaW5nIGEgcmVndWxhdG9yeQogICoJZG9tYWluIHN0cnVjdHVyZSB3aGljaCBjb25zaXN0cyBvZiAlTkw4MDIxMV9BVFRSX1JFR19BTFBIQSBzZXQgdG8gb3VyCkBAIC0xMzMsNiArMTM1LDcwIEBACiAgKiBATkw4MDIxMV9DTURfU0VUX01FU0hfUEFSQU1TOiBTZXQgbWVzaCBuZXR3b3JraW5nIHByb3BlcnRpZXMgZm9yIHRoZQogICogICAgICBpbnRlcmZhY2UgaWRlbnRpZmllZCBieSAlTkw4MDIxMV9BVFRSX0lGSU5ERVgKICAqCisgKiBATkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUU6IFNldCBleHRyYSBJRXMgZm9yIG1hbmFnZW1lbnQgZnJhbWVzLiBUaGUKKyAqCWludGVyZmFjZSBpcyBpZGVudGlmaWVkIHdpdGggJU5MODAyMTFfQVRUUl9JRklOREVYIGFuZCB0aGUgbWFuYWdlbWVudAorICoJZnJhbWUgc3VidHlwZSB3aXRoICVOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFLiBUaGUgZXh0cmEgSUUgZGF0YSB0byBiZQorICoJYWRkZWQgdG8gdGhlIGVuZCBvZiB0aGUgc3BlY2lmaWVkIG1hbmFnZW1lbnQgZnJhbWUgaXMgc3BlY2lmaWVkIHdpdGgKKyAqCSVOTDgwMjExX0FUVFJfSUUuIElmIHRoZSBjb21tYW5kIHN1Y2NlZWRzLCB0aGUgcmVxdWVzdGVkIGRhdGEgd2lsbCBiZQorICoJYWRkZWQgdG8gYWxsIHNwZWNpZmllZCBtYW5hZ2VtZW50IGZyYW1lcyBnZW5lcmF0ZWQgYnkKKyAqCWtlcm5lbC9maXJtd2FyZS9kcml2ZXIuCisgKglOb3RlOiBUaGlzIGNvbW1hbmQgaGFzIGJlZW4gcmVtb3ZlZCBhbmQgaXQgaXMgb25seSByZXNlcnZlZCBhdCB0aGlzCisgKglwb2ludCB0byBhdm9pZCByZS11c2luZyBleGlzdGluZyBjb21tYW5kIG51bWJlci4gVGhlIGZ1bmN0aW9uYWxpdHkgdGhpcworICoJY29tbWFuZCB3YXMgcGxhbm5lZCBmb3IgaGFzIGJlZW4gcHJvdmlkZWQgd2l0aCBjbGVhbmVyIGRlc2lnbiB3aXRoIHRoZQorICoJb3B0aW9uIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBJRXMgaW4gTkw4MDIxMV9DTURfVFJJR0dFUl9TQ0FOLAorICoJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFLCBOTDgwMjExX0NNRF9BU1NPQ0lBVEUsCisgKglOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSwgYW5kIE5MODAyMTFfQ01EX0RJU0FTU09DSUFURS4KKyAqCisgKiBATkw4MDIxMV9DTURfR0VUX1NDQU46IGdldCBzY2FuIHJlc3VsdHMKKyAqIEBOTDgwMjExX0NNRF9UUklHR0VSX1NDQU46IHRyaWdnZXIgYSBuZXcgc2NhbiB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzCisgKiBATkw4MDIxMV9DTURfTkVXX1NDQU5fUkVTVUxUUzogc2NhbiBub3RpZmljYXRpb24gKGFzIGEgcmVwbHkgdG8KKyAqCU5MODAyMTFfQ01EX0dFVF9TQ0FOIGFuZCBvbiB0aGUgInNjYW4iIG11bHRpY2FzdCBncm91cCkKKyAqIEBOTDgwMjExX0NNRF9TQ0FOX0FCT1JURUQ6IHNjYW4gd2FzIGFib3J0ZWQsIGZvciB1bnNwZWNpZmllZCByZWFzb25zLAorICoJcGFydGlhbCBzY2FuIHJlc3VsdHMgbWF5IGJlIGF2YWlsYWJsZQorICoKKyAqIEBOTDgwMjExX0NNRF9SRUdfQ0hBTkdFOiBpbmRpY2F0ZXMgdG8gdXNlcnNwYWNlIHRoZSByZWd1bGF0b3J5IGRvbWFpbgorICogCWhhcyBiZWVuIGNoYW5nZWQgYW5kIHByb3ZpZGVzIGRldGFpbHMgb2YgdGhlIHJlcXVlc3QgaW5mb3JtYXRpb24KKyAqIAl0aGF0IGNhdXNlZCB0aGUgY2hhbmdlIHN1Y2ggYXMgd2hvIGluaXRpYXRlZCB0aGUgcmVndWxhdG9yeSByZXF1ZXN0CisgKiAJKCVOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUiksIHRoZSB3aXBoeV9pZHgKKyAqIAkoJU5MODAyMTFfQVRUUl9SRUdfQUxQSEEyKSBvbiB3aGljaCB0aGUgcmVxdWVzdCB3YXMgbWFkZSBmcm9tIGlmCisgKiAJdGhlIGluaXRpYXRvciB3YXMgJU5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFIG9yCisgKiAJJU5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIsIHRoZSB0eXBlIG9mIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJc2V0ICglTkw4MDIxMV9BVFRSX1JFR19UWVBFKSwgaWYgdGhlIHR5cGUgb2YgcmVndWxhdG9yeSBkb21haW4gaXMKKyAqIAklTkw4MDIxMV9SRUdfVFlQRV9DT1VOVFJZIHRoZSBhbHBoYTIgdG8gd2hpY2ggd2UgaGF2ZSBtb3ZlZCBvbgorICogCXRvICglTkw4MDIxMV9BVFRSX1JFR19BTFBIQTIpLgorICoKKyAqIEBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEU6IGF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgYW5kIG5vdGlmaWNhdGlvbi4KKyAqCVRoaXMgY29tbWFuZCBpcyB1c2VkIGJvdGggYXMgYSBjb21tYW5kIChyZXF1ZXN0IHRvIGF1dGhlbnRpY2F0ZSkgYW5kCisgKglhcyBhbiBldmVudCBvbiB0aGUgIm1sbWUiIG11bHRpY2FzdCBncm91cCBpbmRpY2F0aW5nIGNvbXBsZXRpb24gb2YgdGhlCisgKglhdXRoZW50aWNhdGlvbiBwcm9jZXNzLgorICoJV2hlbiB1c2VkIGFzIGEgY29tbWFuZCwgJU5MODAyMTFfQVRUUl9JRklOREVYIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlCisgKglpbnRlcmZhY2UuICVOTDgwMjExX0FUVFJfTUFDIGlzIHVzZWQgdG8gc3BlY2lmeSBQZWVyU1RBQWRkcmVzcyAoYW5kCisgKglCU1NJRCBpbiBjYXNlIG9mIHN0YXRpb24gbW9kZSkuICVOTDgwMjExX0FUVFJfU1NJRCBpcyB1c2VkIHRvIHNwZWNpZnkKKyAqCXRoZSBTU0lEIChtYWlubHkgZm9yIGFzc29jaWF0aW9uLCBidXQgaXMgaW5jbHVkZWQgaW4gYXV0aGVudGljYXRpb24KKyAqCXJlcXVlc3QsIHRvbywgdG8gaGVscCBCU1Mgc2VsZWN0aW9uLiAlTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEgaXMgdXNlZAorICoJdG8gc3BlY2lmeSB0aGUgZnJlcXVlbmNlIG9mIHRoZSBjaGFubmVsIGluIE1Iei4gJU5MODAyMTFfQVRUUl9BVVRIX1RZUEUKKyAqCWlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgYXV0aGVudGljYXRpb24gdHlwZS4gJU5MODAyMTFfQVRUUl9JRSBpcyB1c2VkIHRvCisgKglkZWZpbmUgSUVzIChWZW5kb3JTcGVjaWZpY0luZm8sIGJ1dCBhbHNvIGluY2x1ZGluZyBSU04gSUUgYW5kIEZUIElFcykKKyAqCXRvIGJlIGFkZGVkIHRvIHRoZSBmcmFtZS4KKyAqCVdoZW4gdXNlZCBhcyBhbiBldmVudCwgdGhpcyByZXBvcnRzIHJlY2VwdGlvbiBvZiBhbiBBdXRoZW50aWNhdGlvbgorICoJZnJhbWUgaW4gc3RhdGlvbiBhbmQgSUJTUyBtb2RlcyB3aGVuIHRoZSBsb2NhbCBNTE1FIHByb2Nlc3NlZCB0aGUKKyAqCWZyYW1lLCBpLmUuLCBpdCB3YXMgZm9yIHRoZSBsb2NhbCBTVEEgYW5kIHdhcyByZWNlaXZlZCBpbiBjb3JyZWN0CisgKglzdGF0ZS4gVGhpcyBpcyBzaW1pbGFyIHRvIE1MTUUtQVVUSEVOVElDQVRFLmNvbmZpcm0gcHJpbWl0aXZlIGluIHRoZQorICoJTUxNRSBTQVAgaW50ZXJmYWNlIChrZXJuZWwgcHJvdmlkaW5nIE1MTUUsIHVzZXJzcGFjZSBTTUUpLiBUaGUKKyAqCWluY2x1ZGVkIE5MODAyMTFfQVRUUl9GUkFNRSBhdHRyaWJ1dGUgY29udGFpbnMgdGhlIG1hbmFnZW1lbnQgZnJhbWUKKyAqCShpbmNsdWRpbmcgYm90aCB0aGUgaGVhZGVyIGFuZCBmcmFtZSBib2R5LCBidXQgbm90IEZDUykuCisgKiBATkw4MDIxMV9DTURfQVNTT0NJQVRFOiBhc3NvY2lhdGlvbiByZXF1ZXN0IGFuZCBub3RpZmljYXRpb247IGxpa2UKKyAqCU5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSBidXQgZm9yIEFzc29jaWF0aW9uIGFuZCBSZWFzc29jaWF0aW9uCisgKgkoc2ltaWxhciB0byBNTE1FLUFTU09DSUFURS5yZXF1ZXN0LCBNTE1FLVJFQVNTT0NJQVRFLnJlcXVlc3QsCisgKglNTE1FLUFTU09DSUFURS5jb25maXJtIG9yIE1MTUUtUkVBU1NPQ0lBVEUuY29uZmlybSBwcmltaXRpdmVzKS4KKyAqIEBOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURTogZGVhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGFuZCBub3RpZmljYXRpb247IGxpa2UKKyAqCU5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSBidXQgZm9yIERlYXV0aGVudGljYXRpb24gZnJhbWVzIChzaW1pbGFyIHRvCisgKglNTE1FLURFQVVUSEVOVElDQVRJT04ucmVxdWVzdCBhbmQgTUxNRS1ERUFVVEhFTlRJQ0FURS5pbmRpY2F0aW9uCisgKglwcmltaXRpdmVzKS4KKyAqIEBOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEU6IGRpc2Fzc29jaWF0aW9uIHJlcXVlc3QgYW5kIG5vdGlmaWNhdGlvbjsgbGlrZQorICoJTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFIGJ1dCBmb3IgRGlzYXNzb2NpYXRpb24gZnJhbWVzIChzaW1pbGFyIHRvCisgKglNTE1FLURJU0FTU09DSUFURS5yZXF1ZXN0IGFuZCBNTE1FLURJU0FTU09DSUFURS5pbmRpY2F0aW9uIHByaW1pdGl2ZXMpLgorICoKICAqIEBOTDgwMjExX0NNRF9NQVg6IGhpZ2hlc3QgdXNlZCBjb21tYW5kIG51bWJlcgogICogQF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTE3OCw2ICsyNDQsMjIgQEAKIAlOTDgwMjExX0NNRF9HRVRfTUVTSF9QQVJBTVMsCiAJTkw4MDIxMV9DTURfU0VUX01FU0hfUEFSQU1TLAogCisJTkw4MDIxMV9DTURfU0VUX01HTVRfRVhUUkFfSUUgLyogcmVzZXJ2ZWQ7IG5vdCB1c2VkICovLAorCisJTkw4MDIxMV9DTURfR0VUX1JFRywKKworCU5MODAyMTFfQ01EX0dFVF9TQ0FOLAorCU5MODAyMTFfQ01EX1RSSUdHRVJfU0NBTiwKKwlOTDgwMjExX0NNRF9ORVdfU0NBTl9SRVNVTFRTLAorCU5MODAyMTFfQ01EX1NDQU5fQUJPUlRFRCwKKworCU5MODAyMTFfQ01EX1JFR19DSEFOR0UsCisKKwlOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUsCisJTkw4MDIxMV9DTURfQVNTT0NJQVRFLAorCU5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFLAorCU5MODAyMTFfQ01EX0RJU0FTU09DSUFURSwKKwogCS8qIGFkZCBuZXcgY29tbWFuZHMgYWJvdmUgaGVyZSAqLwogCiAJLyogdXNlZCB0byBkZWZpbmUgTkw4MDIxMV9DTURfTUFYIGJlbG93ICovCkBAIC0xOTAsNiArMjcyLDEyIEBACiAgKiBoZXJlCiAgKi8KICNkZWZpbmUgTkw4MDIxMV9DTURfU0VUX0JTUyBOTDgwMjExX0NNRF9TRVRfQlNTCisjZGVmaW5lIE5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFIE5MODAyMTFfQ01EX1NFVF9NR01UX0VYVFJBX0lFCisjZGVmaW5lIE5MODAyMTFfQ01EX1JFR19DSEFOR0UgTkw4MDIxMV9DTURfUkVHX0NIQU5HRQorI2RlZmluZSBOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUgTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFCisjZGVmaW5lIE5MODAyMTFfQ01EX0FTU09DSUFURSBOTDgwMjExX0NNRF9BU1NPQ0lBVEUKKyNkZWZpbmUgTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUgTkw4MDIxMV9DTURfREVBVVRIRU5USUNBVEUKKyNkZWZpbmUgTkw4MDIxMV9DTURfRElTQVNTT0NJQVRFIE5MODAyMTFfQ01EX0RJU0FTU09DSUFURQogCiAvKioKICAqIGVudW0gbmw4MDIxMV9hdHRycyAtIG5sODAyMTEgbmV0bGluayBhdHRyaWJ1dGVzCkBAIC0yODQsNiArMzcyLDQyIEBACiAgKglzdXBwb3J0ZWQgaW50ZXJmYWNlIHR5cGVzLCBlYWNoIGEgZmxhZyBhdHRyaWJ1dGUgd2l0aCB0aGUgbnVtYmVyCiAgKglvZiB0aGUgaW50ZXJmYWNlIG1vZGUuCiAgKgorICogQE5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEU6IE1hbmFnZW1lbnQgZnJhbWUgc3VidHlwZSBmb3IKKyAqCSVOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0lFOiBJbmZvcm1hdGlvbiBlbGVtZW50KHMpIGRhdGEgKHVzZWQsIGUuZy4sIHdpdGgKKyAqCSVOTDgwMjExX0NNRF9TRVRfTUdNVF9FWFRSQV9JRSkuCisgKgorICogQE5MODAyMTFfQVRUUl9NQVhfTlVNX1NDQU5fU1NJRFM6IG51bWJlciBvZiBTU0lEcyB5b3UgY2FuIHNjYW4gd2l0aAorICoJYSBzaW5nbGUgc2NhbiByZXF1ZXN0LCBhIHdpcGh5IGF0dHJpYnV0ZS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVM6IG5lc3RlZCBhdHRyaWJ1dGUgd2l0aCBmcmVxdWVuY2llcyAoaW4gTUh6KQorICogQE5MODAyMTFfQVRUUl9TQ0FOX1NTSURTOiBuZXN0ZWQgYXR0cmlidXRlIHdpdGggU1NJRHMsIGxlYXZlIG91dCBmb3IgcGFzc2l2ZQorICoJc2Nhbm5pbmcgYW5kIGluY2x1ZGUgYSB6ZXJvLWxlbmd0aCBTU0lEICh3aWxkY2FyZCkgZm9yIHdpbGRjYXJkIHNjYW4KKyAqIEBOTDgwMjExX0FUVFJfU0NBTl9HRU5FUkFUSU9OOiB0aGUgc2NhbiBnZW5lcmF0aW9uIGluY3JlYXNlcyB3aGVuZXZlciB0aGUKKyAqCXNjYW4gcmVzdWx0IGxpc3QgY2hhbmdlcyAoQlNTIGV4cGlyZWQgb3IgYWRkZWQpIHNvIHRoYXQgYXBwbGljYXRpb25zCisgKgljYW4gdmVyaWZ5IHRoYXQgdGhleSBnb3QgYSBzaW5nbGUsIGNvbnNpc3RlbnQgc25hcHNob3QgKHdoZW4gYWxsIGR1bXAKKyAqCW1lc3NhZ2VzIGNhcnJpZWQgdGhlIHNhbWUgZ2VuZXJhdGlvbiBudW1iZXIpCisgKiBATkw4MDIxMV9BVFRSX0JTUzogc2NhbiByZXN1bHQgQlNTCisgKgorICogQE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SOiBpbmRpY2F0ZXMgd2hvIHJlcXVlc3RlZCB0aGUgcmVndWxhdG9yeSBkb21haW4KKyAqIAljdXJyZW50bHkgaW4gZWZmZWN0LiBUaGlzIGNvdWxkIGJlIGFueSBvZiB0aGUgJU5MODAyMTFfUkVHRE9NX1NFVF9CWV8qCisgKiBATkw4MDIxMV9BVFRSX1JFR19UWVBFOiBpbmRpY2F0ZXMgdGhlIHR5cGUgb2YgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGN1cnJlbnRseQorICogCXNldC4gVGhpcyBjYW4gYmUgb25lIG9mIHRoZSBubDgwMjExX3JlZ190eXBlICglTkw4MDIxMV9SRUdET01fVFlQRV8qKQorICoKKyAqIEBOTDgwMjExX0FUVFJfU1VQUE9SVEVEX0NPTU1BTkRTOiB3aXBoeSBhdHRyaWJ1dGUgdGhhdCBzcGVjaWZpZXMKKyAqCWFuIGFycmF5IG9mIGNvbW1hbmQgbnVtYmVycyAoaS5lLiBhIG1hcHBpbmcgaW5kZXggdG8gY29tbWFuZCBudW1iZXIpCisgKgl0aGF0IHRoZSBkcml2ZXIgZm9yIHRoZSBnaXZlbiB3aXBoeSBzdXBwb3J0cy4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0ZSQU1FOiBmcmFtZSBkYXRhIChiaW5hcnkgYXR0cmlidXRlKSwgaW5jbHVkaW5nIGZyYW1lIGhlYWRlcgorICoJYW5kIGJvZHksIGJ1dCBub3QgRkNTOyB1c2VkLCBlLmcuLCB3aXRoIE5MODAyMTFfQ01EX0FVVEhFTlRJQ0FURSBhbmQKKyAqCU5MODAyMTFfQ01EX0FTU09DSUFURSBldmVudHMKKyAqIEBOTDgwMjExX0FUVFJfU1NJRDogU1NJRCAoYmluYXJ5IGF0dHJpYnV0ZSwgMC4uMzIgb2N0ZXRzKQorICogQE5MODAyMTFfQVRUUl9BVVRIX1RZUEU6IEF1dGhlbnRpY2F0aW9uVHlwZSwgc2VlICZlbnVtIG5sODAyMTFfYXV0aF90eXBlLAorICoJcmVwcmVzZW50ZWQgYXMgYSB1MzIKKyAqIEBOTDgwMjExX0FUVFJfUkVBU09OX0NPREU6IFJlYXNvbkNvZGUgZm9yICVOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSBhbmQKKyAqCSVOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUsIHUxNgorICoKICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtMzQ2LDYgKzQ3MCwyOCBAQAogCU5MODAyMTFfQVRUUl9XSVBIWV9GUkVRLAogCU5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUsCiAKKwlOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRfTUdNVCwKKworCU5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEUsCisJTkw4MDIxMV9BVFRSX0lFLAorCisJTkw4MDIxMV9BVFRSX01BWF9OVU1fU0NBTl9TU0lEUywKKworCU5MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTLAorCU5MODAyMTFfQVRUUl9TQ0FOX1NTSURTLAorCU5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT04sCisJTkw4MDIxMV9BVFRSX0JTUywKKworCU5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SLAorCU5MODAyMTFfQVRUUl9SRUdfVFlQRSwKKworCU5MODAyMTFfQVRUUl9TVVBQT1JURURfQ09NTUFORFMsCisKKwlOTDgwMjExX0FUVFJfRlJBTUUsCisJTkw4MDIxMV9BVFRSX1NTSUQsCisJTkw4MDIxMV9BVFRSX0FVVEhfVFlQRSwKKwlOTDgwMjExX0FUVFJfUkVBU09OX0NPREUsCisKIAkvKiBhZGQgYXR0cmlidXRlcyBoZXJlLCB1cGRhdGUgdGhlIHBvbGljeSBpbiBubDgwMjExLmMgKi8KIAogCV9fTkw4MDIxMV9BVFRSX0FGVEVSX0xBU1QsCkBAIC0zNjAsNyArNTA2LDE1IEBACiAjZGVmaW5lIE5MODAyMTFfQVRUUl9CU1NfQkFTSUNfUkFURVMgTkw4MDIxMV9BVFRSX0JTU19CQVNJQ19SQVRFUwogI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfVFhRX1BBUkFNUyBOTDgwMjExX0FUVFJfV0lQSFlfVFhRX1BBUkFNUwogI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSBOTDgwMjExX0FUVFJfV0lQSFlfRlJFUQotI2RlZmluZSBOTDgwMjExX0FUVFJfV0lQSFlfU0VDX0NIQU5fT0ZGU0VUIE5MODAyMTFfQVRUUl9XSVBIWV9TRUNfQ0hBTl9PRkZTRVQKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRSBOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFCisjZGVmaW5lIE5MODAyMTFfQVRUUl9NR01UX1NVQlRZUEUgTkw4MDIxMV9BVFRSX01HTVRfU1VCVFlQRQorI2RlZmluZSBOTDgwMjExX0FUVFJfSUUgTkw4MDIxMV9BVFRSX0lFCisjZGVmaW5lIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SCisjZGVmaW5lIE5MODAyMTFfQVRUUl9SRUdfVFlQRSBOTDgwMjExX0FUVFJfUkVHX1RZUEUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX0ZSQU1FIE5MODAyMTFfQVRUUl9GUkFNRQorI2RlZmluZSBOTDgwMjExX0FUVFJfU1NJRCBOTDgwMjExX0FUVFJfU1NJRAorI2RlZmluZSBOTDgwMjExX0FUVFJfQVVUSF9UWVBFIE5MODAyMTFfQVRUUl9BVVRIX1RZUEUKKyNkZWZpbmUgTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFIE5MODAyMTFfQVRUUl9SRUFTT05fQ09ERQogCiAjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkFURVMJCQkzMgogI2RlZmluZSBOTDgwMjExX01BWF9TVVBQX1JFR19SVUxFUwkJMzIKQEAgLTQxMiwxMiArNTY2LDE0IEBACiAgKiBATkw4MDIxMV9TVEFfRkxBR19TSE9SVF9QUkVBTUJMRTogc3RhdGlvbiBpcyBjYXBhYmxlIG9mIHJlY2VpdmluZyBmcmFtZXMKICAqCXdpdGggc2hvcnQgYmFya2VyIHByZWFtYmxlCiAgKiBATkw4MDIxMV9TVEFfRkxBR19XTUU6IHN0YXRpb24gaXMgV01FL1FvUyBjYXBhYmxlCisgKiBATkw4MDIxMV9TVEFfRkxBR19NRlA6IHN0YXRpb24gdXNlcyBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24KICAqLwogZW51bSBubDgwMjExX3N0YV9mbGFncyB7CiAJX19OTDgwMjExX1NUQV9GTEFHX0lOVkFMSUQsCiAJTkw4MDIxMV9TVEFfRkxBR19BVVRIT1JJWkVELAogCU5MODAyMTFfU1RBX0ZMQUdfU0hPUlRfUFJFQU1CTEUsCiAJTkw4MDIxMV9TVEFfRkxBR19XTUUsCisJTkw4MDIxMV9TVEFfRkxBR19NRlAsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0ZMQUdfQUZURVJfTEFTVCwKQEAgLTQ2NSw2ICs2MjEsOSBAQAogICogQE5MODAyMTFfU1RBX0lORk9fU0lHTkFMOiBzaWduYWwgc3RyZW5ndGggb2YgbGFzdCByZWNlaXZlZCBQUERVICh1OCwgZEJtKQogICogQE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURTogY3VycmVudCB1bmljYXN0IHR4IHJhdGUsIG5lc3RlZCBhdHRyaWJ1dGUKICAqIAljb250YWluaW5nIGluZm8gYXMgcG9zc2libGUsIHNlZSAmZW51bSBubDgwMjExX3N0YV9pbmZvX3R4cmF0ZS4KKyAqIEBOTDgwMjExX1NUQV9JTkZPX1JYX1BBQ0tFVFM6IHRvdGFsIHJlY2VpdmVkIHBhY2tldCAodTMyLCBmcm9tIHRoaXMgc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFM6IHRvdGFsIHRyYW5zbWl0dGVkIHBhY2tldHMgKHUzMiwgdG8gdGhpcworICoJc3RhdGlvbikKICAqLwogZW51bSBubDgwMjExX3N0YV9pbmZvIHsKIAlfX05MODAyMTFfU1RBX0lORk9fSU5WQUxJRCwKQEAgLTQ3Niw2ICs2MzUsOCBAQAogCU5MODAyMTFfU1RBX0lORk9fUExJTktfU1RBVEUsCiAJTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwsCiAJTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFLAorCU5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUywKKwlOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVCwKQEAgLTYwNyw2ICs3NjgsNDggQEAKIH07CiAKIC8qKgorICogZW51bSBubDgwMjExX2luaXRpYXRvciAtIEluZGljYXRlcyB0aGUgaW5pdGlhdG9yIG9mIGEgcmVnIGRvbWFpbiByZXF1ZXN0CisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU6IENvcmUgcXVlcmllZCBDUkRBIGZvciBhIGR5bmFtaWMgd29ybGQKKyAqIAlyZWd1bGF0b3J5IGRvbWFpbi4KKyAqIEBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUjogVXNlciBhc2tlZCB0aGUgd2lyZWxlc3MgY29yZSB0byBzZXQgdGhlCisgKiAJcmVndWxhdG9yeSBkb21haW4uCisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjogYSB3aXJlbGVzcyBkcml2ZXJzIGhhcyBoaW50ZWQgdG8gdGhlCisgKiAJd2lyZWxlc3MgY29yZSBpdCB0aGlua3MgaXRzIGtub3dzIHRoZSByZWd1bGF0b3J5IGRvbWFpbiB3ZSBzaG91bGQgYmUgaW4uCisgKiBATkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6IHRoZSB3aXJlbGVzcyBjb3JlIGhhcyByZWNlaXZlZCBhbgorICogCTgwMi4xMSBjb3VudHJ5IGluZm9ybWF0aW9uIGVsZW1lbnQgd2l0aCByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGl0CisgKiAJdGhpbmtzIHdlIHNob3VsZCBjb25zaWRlci4KKyAqLworZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgeworCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFLAorCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSLAorCU5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIsCisJTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUsCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9yZWdfdHlwZSAtIHNwZWNpZmllcyB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IGRvbWFpbgorICogQE5MODAyMTFfUkVHRE9NX1RZUEVfQ09VTlRSWTogdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHNldCBpcyBvbmUgdGhhdCBwZXJ0YWlucworICoJdG8gYSBzcGVjaWZpYyBjb3VudHJ5LiBXaGVuIHRoaXMgaXMgc2V0IHlvdSBjYW4gY291bnQgb24gdGhlCisgKglJU08gLyBJRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIGJlaW5nIHZhbGlkLgorICogQE5MODAyMTFfUkVHRE9NX1RZUEVfV09STEQ6IHRoZSByZWd1bGF0b3J5IHNldCBkb21haW4gaXMgdGhlIHdvcmxkIHJlZ3VsYXRvcnkKKyAqIAlkb21haW4uCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQ6IHRoZSByZWd1bGF0b3J5IGRvbWFpbiBzZXQgaXMgYSBjdXN0b20KKyAqIAlkcml2ZXIgc3BlY2lmaWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4uIFRoZXNlIGRvIG5vdCBhcHBseSBzeXN0ZW0td2lkZQorICogCWFuZCBhcmUgb25seSBhcHBsaWNhYmxlIHRvIHRoZSBpbmRpdmlkdWFsIGRldmljZXMgd2hpY2ggaGF2ZSByZXF1ZXN0ZWQKKyAqIAl0aGVtIHRvIGJlIGFwcGxpZWQuCisgKiBATkw4MDIxMV9SRUdET01fVFlQRV9JTlRFUlNFQ1RJT046IHRoZSByZWd1bGF0b3J5IGRvbWFpbiBzZXQgaXMgdGhlIHByb2R1Y3QKKyAqCW9mIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWd1bGF0b3J5IGRvbWFpbnMgLS0gdGhlIHByZXZpb3VzbHkKKyAqCXNldCByZWd1bGF0b3J5IGRvbWFpbiBvbiB0aGUgc3lzdGVtIGFuZCB0aGUgbGFzdCBhY2NlcHRlZCByZWd1bGF0b3J5CisgKglkb21haW4gcmVxdWVzdCB0byBiZSBwcm9jZXNzZWQuCisgKi8KK2VudW0gbmw4MDIxMV9yZWdfdHlwZSB7CisJTkw4MDIxMV9SRUdET01fVFlQRV9DT1VOVFJZLAorCU5MODAyMTFfUkVHRE9NX1RZUEVfV09STEQsCisJTkw4MDIxMV9SRUdET01fVFlQRV9DVVNUT01fV09STEQsCisJTkw4MDIxMV9SRUdET01fVFlQRV9JTlRFUlNFQ1RJT04sCit9OworCisvKioKICAqIGVudW0gbmw4MDIxMV9yZWdfcnVsZV9hdHRyIC0gcmVndWxhdG9yeSBydWxlIGF0dHJpYnV0ZXMKICAqIEBOTDgwMjExX0FUVFJfUkVHX1JVTEVfRkxBR1M6IGEgc2V0IG9mIGZsYWdzIHdoaWNoIHNwZWNpZnkgYWRkaXRpb25hbAogICogCWNvbnNpZGVyYXRpb25zIGZvciBhIGdpdmVuIGZyZXF1ZW5jeSByYW5nZS4gVGhlc2UgYXJlIHRoZQpAQCAtODExLDQgKzEwMTQsNTIgQEAKIAlOTDgwMjExX0NIQU5fSFQ0ME1JTlVTLAogCU5MODAyMTFfQ0hBTl9IVDQwUExVUwogfTsKKworLyoqCisgKiBlbnVtIG5sODAyMTFfYnNzIC0gbmV0bGluayBhdHRyaWJ1dGVzIGZvciBhIEJTUworICoKKyAqIEBfX05MODAyMTFfQlNTX0lOVkFMSUQ6IGludmFsaWQKKyAqIEBOTDgwMjExX0JTU19GUkVRVUVOQ1k6IGZyZXF1ZW5jeSBpbiBNSHogKHUzMikKKyAqIEBOTDgwMjExX0JTU19UU0Y6IFRTRiBvZiB0aGUgcmVjZWl2ZWQgcHJvYmUgcmVzcG9uc2UvYmVhY29uICh1NjQpCisgKiBATkw4MDIxMV9CU1NfQkVBQ09OX0lOVEVSVkFMOiBiZWFjb24gaW50ZXJ2YWwgb2YgdGhlIChJKUJTUyAodTE2KQorICogQE5MODAyMTFfQlNTX0NBUEFCSUxJVFk6IGNhcGFiaWxpdHkgZmllbGQgKENQVSBvcmRlciwgdTE2KQorICogQE5MODAyMTFfQlNTX0lORk9STUFUSU9OX0VMRU1FTlRTOiBiaW5hcnkgYXR0cmlidXRlIGNvbnRhaW5pbmcgdGhlCisgKglyYXcgaW5mb3JtYXRpb24gZWxlbWVudHMgZnJvbSB0aGUgcHJvYmUgcmVzcG9uc2UvYmVhY29uIChiaW4pCisgKiBATkw4MDIxMV9CU1NfU0lHTkFMX01CTTogc2lnbmFsIHN0cmVuZ3RoIG9mIHByb2JlIHJlc3BvbnNlL2JlYWNvbgorICoJaW4gbUJtICgxMDAgKiBkQm0pIChzMzIpCisgKiBATkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQzogc2lnbmFsIHN0cmVuZ3RoIG9mIHRoZSBwcm9iZSByZXNwb25zZS9iZWFjb24KKyAqCWluIHVuc3BlY2lmaWVkIHVuaXRzLCBzY2FsZWQgdG8gMC4uMTAwICh1OCkKKyAqIEBfX05MODAyMTFfQlNTX0FGVEVSX0xBU1Q6IGludGVybmFsCisgKiBATkw4MDIxMV9CU1NfTUFYOiBoaWdoZXN0IEJTUyBhdHRyaWJ1dGUKKyAqLworZW51bSBubDgwMjExX2JzcyB7CisJX19OTDgwMjExX0JTU19JTlZBTElELAorCU5MODAyMTFfQlNTX0JTU0lELAorCU5MODAyMTFfQlNTX0ZSRVFVRU5DWSwKKwlOTDgwMjExX0JTU19UU0YsCisJTkw4MDIxMV9CU1NfQkVBQ09OX0lOVEVSVkFMLAorCU5MODAyMTFfQlNTX0NBUEFCSUxJVFksCisJTkw4MDIxMV9CU1NfSU5GT1JNQVRJT05fRUxFTUVOVFMsCisJTkw4MDIxMV9CU1NfU0lHTkFMX01CTSwKKwlOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDLAorCisJLyoga2VlcCBsYXN0ICovCisJX19OTDgwMjExX0JTU19BRlRFUl9MQVNULAorCU5MODAyMTFfQlNTX01BWCA9IF9fTkw4MDIxMV9CU1NfQUZURVJfTEFTVCAtIDEKK307CisKKy8qKgorICogZW51bSBubDgwMjExX2F1dGhfdHlwZSAtIEF1dGhlbnRpY2F0aW9uVHlwZQorICoKKyAqIEBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOiBPcGVuIFN5c3RlbSBhdXRoZW50aWNhdGlvbgorICogQE5MODAyMTFfQVVUSFRZUEVfU0hBUkVEX0tFWTogU2hhcmVkIEtleSBhdXRoZW50aWNhdGlvbiAoV0VQIG9ubHkpCisgKiBATkw4MDIxMV9BVVRIVFlQRV9GVDogRmFzdCBCU1MgVHJhbnNpdGlvbiAoSUVFRSA4MDIuMTFyKQorICogQE5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVA6IE5ldHdvcmsgRUFQIChzb21lIENpc2NvIEFQcyBhbmQgbWFpbmx5IExFQVApCisgKi8KK2VudW0gbmw4MDIxMV9hdXRoX3R5cGUgeworCU5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU0sCisJTkw4MDIxMV9BVVRIVFlQRV9TSEFSRURfS0VZLAorCU5MODAyMTFfQVVUSFRZUEVfRlQsCisJTkw4MDIxMV9BVVRIVFlQRV9ORVRXT1JLX0VBUCwKK307CiAjZW5kaWYgLyogX19MSU5VWF9OTDgwMjExX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbnVidXMuaCBiL2luY2x1ZGUvbGludXgvbnVidXMuaAppbmRleCA3MzgyYWYzLi5lMTM3YjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L251YnVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9udWJ1cy5oCkBAIC0yMzcsNiArMjM3LDcgQEAKIAlpbnQgbWFzazsKIH07CiAKKyNpZmRlZiBfX0tFUk5FTF9fCiBzdHJ1Y3QgbnVidXNfYm9hcmQgewogCXN0cnVjdCBudWJ1c19ib2FyZCogbmV4dDsKIAlzdHJ1Y3QgbnVidXNfZGV2KiBmaXJzdF9kZXY7CkBAIC0zNTEsNiArMzUyLDcgQEAKIHZvaWQgbnVidXNfZ2V0X3JzcmNfc3RyKHZvaWQqIGRlc3QsCiAJCQljb25zdCBzdHJ1Y3QgbnVidXNfZGlyZW50ICpkaXJlbnQsCiAJCQlpbnQgbWF4bGVuKTsKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKIC8qIFdlJ2QgbGlrZSB0byBnZXQgcmlkIG9mIHRoaXMgZXZlbnR1YWxseS4gIE9ubHkgZGF5bmFwb3J0LmMgdXNlcyBpdCBub3cuICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKm51YnVzX3Nsb3RfYWRkcihpbnQgc2xvdCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggYWNhOGM0NS4uMDVkZmE3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTgzNCw2ICs4MzQsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzYJMHg1Mjc1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3NwkweDcyNzUKIAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZPWENPTk4JCTB4MTA1YgorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVU1DCQkweDEwNjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9VTUNfVU04NjczRgkweDAxMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9VTUNfVU04ODg2QkYJMHg2NzNhCkBAIC0xOTcxLDYgKzE5NzMsOCBAQAogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0FNU1VORwkJMHgxNDRkCiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTUJJVAkJMHgxNDY4CisKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NWVJJQ09NCQkweDE0YzEKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJVEFOCQkweDE0RDIKQEAgLTIxMTIsNiArMjExNiw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfU0lOQUlfT0xEIDB4NWU4YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1NJTkFJCTB4NjI3NAogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfREZJCQkweDE1YmQKKwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1FVSUNLTkVUCQkweDE1ZTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUlDS05FVF9YSgkweDA1MDAKIApAQCAtMjIxNSw2ICsyMjIxLDggQEAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RPUFNQSU4JCTB4MTg2NwogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0lMQU4JCTB4MTkwNAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVERJICAgICAgICAgICAgICAgMHgxOTJFCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kgICAgICAgICAgMHgwMTAxCiAKQEAgLTIyNjMsNiArMjI3MSw4IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjAJMHgxNjAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjEJMHgxNmZmCiAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9RTUkJCTB4MWEzMgorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVEVLUkFNCQkweDFkZTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9URUtSQU1fREMyOTAJMHhkYzI5CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGZrZXl2Mi5oIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKaW5kZXggMDFiMjYyOS4uMjI4YjBiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZmtleXYyLmgKQEAgLTEyLDE4NyArMTIsMTg3IEBACiAjZGVmaW5lIFBGS0VZVjJfUkVWSVNJT04JMTk5ODA2TAogCiBzdHJ1Y3Qgc2FkYl9tc2cgewotCXVpbnQ4X3QJCXNhZGJfbXNnX3ZlcnNpb247Ci0JdWludDhfdAkJc2FkYl9tc2dfdHlwZTsKLQl1aW50OF90CQlzYWRiX21zZ19lcnJubzsKLQl1aW50OF90CQlzYWRiX21zZ19zYXR5cGU7Ci0JdWludDE2X3QJc2FkYl9tc2dfbGVuOwotCXVpbnQxNl90CXNhZGJfbXNnX3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfbXNnX3NlcTsKLQl1aW50MzJfdAlzYWRiX21zZ19waWQ7CisJX191OAkJc2FkYl9tc2dfdmVyc2lvbjsKKwlfX3U4CQlzYWRiX21zZ190eXBlOworCV9fdTgJCXNhZGJfbXNnX2Vycm5vOworCV9fdTgJCXNhZGJfbXNnX3NhdHlwZTsKKwlfX3UxNglzYWRiX21zZ19sZW47CisJX191MTYJc2FkYl9tc2dfcmVzZXJ2ZWQ7CisJX191MzIJc2FkYl9tc2dfc2VxOworCV9fdTMyCXNhZGJfbXNnX3BpZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfbXNnKSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl9leHQgewotCXVpbnQxNl90CXNhZGJfZXh0X2xlbjsKLQl1aW50MTZfdAlzYWRiX2V4dF90eXBlOworCV9fdTE2CXNhZGJfZXh0X2xlbjsKKwlfX3UxNglzYWRiX2V4dF90eXBlOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9leHQpID09IDQgKi8KIAogc3RydWN0IHNhZGJfc2EgewotCXVpbnQxNl90CXNhZGJfc2FfbGVuOwotCXVpbnQxNl90CXNhZGJfc2FfZXh0dHlwZTsKKwlfX3UxNglzYWRiX3NhX2xlbjsKKwlfX3UxNglzYWRiX3NhX2V4dHR5cGU7CiAJX19iZTMyCQlzYWRiX3NhX3NwaTsKLQl1aW50OF90CQlzYWRiX3NhX3JlcGxheTsKLQl1aW50OF90CQlzYWRiX3NhX3N0YXRlOwotCXVpbnQ4X3QJCXNhZGJfc2FfYXV0aDsKLQl1aW50OF90CQlzYWRiX3NhX2VuY3J5cHQ7Ci0JdWludDMyX3QJc2FkYl9zYV9mbGFnczsKKwlfX3U4CQlzYWRiX3NhX3JlcGxheTsKKwlfX3U4CQlzYWRiX3NhX3N0YXRlOworCV9fdTgJCXNhZGJfc2FfYXV0aDsKKwlfX3U4CQlzYWRiX3NhX2VuY3J5cHQ7CisJX191MzIJc2FkYl9zYV9mbGFnczsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfc2EpID09IDE2ICovCiAKIHN0cnVjdCBzYWRiX2xpZmV0aW1lIHsKLQl1aW50MTZfdAlzYWRiX2xpZmV0aW1lX2xlbjsKLQl1aW50MTZfdAlzYWRiX2xpZmV0aW1lX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl9saWZldGltZV9hbGxvY2F0aW9uczsKLQl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfbGlmZXRpbWVfYWRkdGltZTsKLQl1aW50NjRfdAlzYWRiX2xpZmV0aW1lX3VzZXRpbWU7CisJX191MTYJc2FkYl9saWZldGltZV9sZW47CisJX191MTYJc2FkYl9saWZldGltZV9leHR0eXBlOworCV9fdTMyCXNhZGJfbGlmZXRpbWVfYWxsb2NhdGlvbnM7CisJX191NjQJc2FkYl9saWZldGltZV9ieXRlczsKKwlfX3U2NAlzYWRiX2xpZmV0aW1lX2FkZHRpbWU7CisJX191NjQJc2FkYl9saWZldGltZV91c2V0aW1lOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9saWZldGltZSkgPT0gMzIgKi8KIAogc3RydWN0IHNhZGJfYWRkcmVzcyB7Ci0JdWludDE2X3QJc2FkYl9hZGRyZXNzX2xlbjsKLQl1aW50MTZfdAlzYWRiX2FkZHJlc3NfZXh0dHlwZTsKLQl1aW50OF90CQlzYWRiX2FkZHJlc3NfcHJvdG87Ci0JdWludDhfdAkJc2FkYl9hZGRyZXNzX3ByZWZpeGxlbjsKLQl1aW50MTZfdAlzYWRiX2FkZHJlc3NfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl9hZGRyZXNzX2xlbjsKKwlfX3UxNglzYWRiX2FkZHJlc3NfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX2FkZHJlc3NfcHJvdG87CisJX191OAkJc2FkYl9hZGRyZXNzX3ByZWZpeGxlbjsKKwlfX3UxNglzYWRiX2FkZHJlc3NfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2FkZHJlc3MpID09IDggKi8KIAogc3RydWN0IHNhZGJfa2V5IHsKLQl1aW50MTZfdAlzYWRiX2tleV9sZW47Ci0JdWludDE2X3QJc2FkYl9rZXlfZXh0dHlwZTsKLQl1aW50MTZfdAlzYWRiX2tleV9iaXRzOwotCXVpbnQxNl90CXNhZGJfa2V5X3Jlc2VydmVkOworCV9fdTE2CXNhZGJfa2V5X2xlbjsKKwlfX3UxNglzYWRiX2tleV9leHR0eXBlOworCV9fdTE2CXNhZGJfa2V5X2JpdHM7CisJX191MTYJc2FkYl9rZXlfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2tleSkgPT0gOCAqLwogCiBzdHJ1Y3Qgc2FkYl9pZGVudCB7Ci0JdWludDE2X3QJc2FkYl9pZGVudF9sZW47Ci0JdWludDE2X3QJc2FkYl9pZGVudF9leHR0eXBlOwotCXVpbnQxNl90CXNhZGJfaWRlbnRfdHlwZTsKLQl1aW50MTZfdAlzYWRiX2lkZW50X3Jlc2VydmVkOwotCXVpbnQ2NF90CXNhZGJfaWRlbnRfaWQ7CisJX191MTYJc2FkYl9pZGVudF9sZW47CisJX191MTYJc2FkYl9pZGVudF9leHR0eXBlOworCV9fdTE2CXNhZGJfaWRlbnRfdHlwZTsKKwlfX3UxNglzYWRiX2lkZW50X3Jlc2VydmVkOworCV9fdTY0CXNhZGJfaWRlbnRfaWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2lkZW50KSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl9zZW5zIHsKLQl1aW50MTZfdAlzYWRiX3NlbnNfbGVuOwotCXVpbnQxNl90CXNhZGJfc2Vuc19leHR0eXBlOwotCXVpbnQzMl90CXNhZGJfc2Vuc19kcGQ7Ci0JdWludDhfdAkJc2FkYl9zZW5zX3NlbnNfbGV2ZWw7Ci0JdWludDhfdAkJc2FkYl9zZW5zX3NlbnNfbGVuOwotCXVpbnQ4X3QJCXNhZGJfc2Vuc19pbnRlZ19sZXZlbDsKLQl1aW50OF90CQlzYWRiX3NlbnNfaW50ZWdfbGVuOwotCXVpbnQzMl90CXNhZGJfc2Vuc19yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3NlbnNfbGVuOworCV9fdTE2CXNhZGJfc2Vuc19leHR0eXBlOworCV9fdTMyCXNhZGJfc2Vuc19kcGQ7CisJX191OAkJc2FkYl9zZW5zX3NlbnNfbGV2ZWw7CisJX191OAkJc2FkYl9zZW5zX3NlbnNfbGVuOworCV9fdTgJCXNhZGJfc2Vuc19pbnRlZ19sZXZlbDsKKwlfX3U4CQlzYWRiX3NlbnNfaW50ZWdfbGVuOworCV9fdTMyCXNhZGJfc2Vuc19yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfc2VucykgPT0gMTYgKi8KIAogLyogZm9sbG93ZWQgYnk6Ci0JdWludDY0X3QJc2FkYl9zZW5zX2JpdG1hcFtzZW5zX2xlbl07Ci0JdWludDY0X3QJc2FkYl9pbnRlZ19iaXRtYXBbaW50ZWdfbGVuXTsgICovCisJX191NjQJc2FkYl9zZW5zX2JpdG1hcFtzZW5zX2xlbl07CisJX191NjQJc2FkYl9pbnRlZ19iaXRtYXBbaW50ZWdfbGVuXTsgICovCiAKIHN0cnVjdCBzYWRiX3Byb3AgewotCXVpbnQxNl90CXNhZGJfcHJvcF9sZW47Ci0JdWludDE2X3QJc2FkYl9wcm9wX2V4dHR5cGU7Ci0JdWludDhfdAkJc2FkYl9wcm9wX3JlcGxheTsKLQl1aW50OF90CQlzYWRiX3Byb3BfcmVzZXJ2ZWRbM107CisJX191MTYJc2FkYl9wcm9wX2xlbjsKKwlfX3UxNglzYWRiX3Byb3BfZXh0dHlwZTsKKwlfX3U4CQlzYWRiX3Byb3BfcmVwbGF5OworCV9fdTgJCXNhZGJfcHJvcF9yZXNlcnZlZFszXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfcHJvcCkgPT0gOCAqLwogCiAvKiBmb2xsb3dlZCBieToKIAlzdHJ1Y3Qgc2FkYl9jb21iIHNhZGJfY29tYnNbKHNhZGJfcHJvcF9sZW4gKwotCQlzaXplb2YodWludDY0X3QpIC0gc2l6ZW9mKHN0cnVjdCBzYWRiX3Byb3ApKSAvCisJCXNpemVvZihfX3U2NCkgLSBzaXplb2Yoc3RydWN0IHNhZGJfcHJvcCkpIC8KIAkJc2l6ZW9mKHN0cnVjdCBzYWRiX2NvbWIpXTsgKi8KIAogc3RydWN0IHNhZGJfY29tYiB7Ci0JdWludDhfdAkJc2FkYl9jb21iX2F1dGg7Ci0JdWludDhfdAkJc2FkYl9jb21iX2VuY3J5cHQ7Ci0JdWludDE2X3QJc2FkYl9jb21iX2ZsYWdzOwotCXVpbnQxNl90CXNhZGJfY29tYl9hdXRoX21pbmJpdHM7Ci0JdWludDE2X3QJc2FkYl9jb21iX2F1dGhfbWF4Yml0czsKLQl1aW50MTZfdAlzYWRiX2NvbWJfZW5jcnlwdF9taW5iaXRzOwotCXVpbnQxNl90CXNhZGJfY29tYl9lbmNyeXB0X21heGJpdHM7Ci0JdWludDMyX3QJc2FkYl9jb21iX3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfY29tYl9zb2Z0X2FsbG9jYXRpb25zOwotCXVpbnQzMl90CXNhZGJfY29tYl9oYXJkX2FsbG9jYXRpb25zOwotCXVpbnQ2NF90CXNhZGJfY29tYl9zb2Z0X2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfY29tYl9oYXJkX2J5dGVzOwotCXVpbnQ2NF90CXNhZGJfY29tYl9zb2Z0X2FkZHRpbWU7Ci0JdWludDY0X3QJc2FkYl9jb21iX2hhcmRfYWRkdGltZTsKLQl1aW50NjRfdAlzYWRiX2NvbWJfc29mdF91c2V0aW1lOwotCXVpbnQ2NF90CXNhZGJfY29tYl9oYXJkX3VzZXRpbWU7CisJX191OAkJc2FkYl9jb21iX2F1dGg7CisJX191OAkJc2FkYl9jb21iX2VuY3J5cHQ7CisJX191MTYJc2FkYl9jb21iX2ZsYWdzOworCV9fdTE2CXNhZGJfY29tYl9hdXRoX21pbmJpdHM7CisJX191MTYJc2FkYl9jb21iX2F1dGhfbWF4Yml0czsKKwlfX3UxNglzYWRiX2NvbWJfZW5jcnlwdF9taW5iaXRzOworCV9fdTE2CXNhZGJfY29tYl9lbmNyeXB0X21heGJpdHM7CisJX191MzIJc2FkYl9jb21iX3Jlc2VydmVkOworCV9fdTMyCXNhZGJfY29tYl9zb2Z0X2FsbG9jYXRpb25zOworCV9fdTMyCXNhZGJfY29tYl9oYXJkX2FsbG9jYXRpb25zOworCV9fdTY0CXNhZGJfY29tYl9zb2Z0X2J5dGVzOworCV9fdTY0CXNhZGJfY29tYl9oYXJkX2J5dGVzOworCV9fdTY0CXNhZGJfY29tYl9zb2Z0X2FkZHRpbWU7CisJX191NjQJc2FkYl9jb21iX2hhcmRfYWRkdGltZTsKKwlfX3U2NAlzYWRiX2NvbWJfc29mdF91c2V0aW1lOworCV9fdTY0CXNhZGJfY29tYl9oYXJkX3VzZXRpbWU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX2NvbWIpID09IDcyICovCiAKIHN0cnVjdCBzYWRiX3N1cHBvcnRlZCB7Ci0JdWludDE2X3QJc2FkYl9zdXBwb3J0ZWRfbGVuOwotCXVpbnQxNl90CXNhZGJfc3VwcG9ydGVkX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl9zdXBwb3J0ZWRfcmVzZXJ2ZWQ7CisJX191MTYJc2FkYl9zdXBwb3J0ZWRfbGVuOworCV9fdTE2CXNhZGJfc3VwcG9ydGVkX2V4dHR5cGU7CisJX191MzIJc2FkYl9zdXBwb3J0ZWRfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3N1cHBvcnRlZCkgPT0gOCAqLwogCiAvKiBmb2xsb3dlZCBieToKIAlzdHJ1Y3Qgc2FkYl9hbGcgc2FkYl9hbGdzWyhzYWRiX3N1cHBvcnRlZF9sZW4gKwotCQlzaXplb2YodWludDY0X3QpIC0gc2l6ZW9mKHN0cnVjdCBzYWRiX3N1cHBvcnRlZCkpIC8KKwkJc2l6ZW9mKF9fdTY0KSAtIHNpemVvZihzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQpKSAvCiAJCXNpemVvZihzdHJ1Y3Qgc2FkYl9hbGcpXTsgKi8KIAogc3RydWN0IHNhZGJfYWxnIHsKLQl1aW50OF90CQlzYWRiX2FsZ19pZDsKLQl1aW50OF90CQlzYWRiX2FsZ19pdmxlbjsKLQl1aW50MTZfdAlzYWRiX2FsZ19taW5iaXRzOwotCXVpbnQxNl90CXNhZGJfYWxnX21heGJpdHM7Ci0JdWludDE2X3QJc2FkYl9hbGdfcmVzZXJ2ZWQ7CisJX191OAkJc2FkYl9hbGdfaWQ7CisJX191OAkJc2FkYl9hbGdfaXZsZW47CisJX191MTYJc2FkYl9hbGdfbWluYml0czsKKwlfX3UxNglzYWRiX2FsZ19tYXhiaXRzOworCV9fdTE2CXNhZGJfYWxnX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9hbGcpID09IDggKi8KIAogc3RydWN0IHNhZGJfc3BpcmFuZ2UgewotCXVpbnQxNl90CXNhZGJfc3BpcmFuZ2VfbGVuOwotCXVpbnQxNl90CXNhZGJfc3BpcmFuZ2VfZXh0dHlwZTsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX21pbjsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX21heDsKLQl1aW50MzJfdAlzYWRiX3NwaXJhbmdlX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfc3BpcmFuZ2VfbGVuOworCV9fdTE2CXNhZGJfc3BpcmFuZ2VfZXh0dHlwZTsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX21pbjsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX21heDsKKwlfX3UzMglzYWRiX3NwaXJhbmdlX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl9zcGlyYW5nZSkgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfeF9rbXByaXZhdGUgewotCXVpbnQxNl90CXNhZGJfeF9rbXByaXZhdGVfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9rbXByaXZhdGVfZXh0dHlwZTsKLQl1aW50MzJfdAlzYWRiX3hfa21wcml2YXRlX3Jlc2VydmVkOworCV9fdTE2CXNhZGJfeF9rbXByaXZhdGVfbGVuOworCV9fdTE2CXNhZGJfeF9rbXByaXZhdGVfZXh0dHlwZTsKKwlfX3UzMglzYWRiX3hfa21wcml2YXRlX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X2ttcHJpdmF0ZSkgPT0gOCAqLwogCiBzdHJ1Y3Qgc2FkYl94X3NhMiB7Ci0JdWludDE2X3QJc2FkYl94X3NhMl9sZW47Ci0JdWludDE2X3QJc2FkYl94X3NhMl9leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9zYTJfbW9kZTsKLQl1aW50OF90CQlzYWRiX3hfc2EyX3Jlc2VydmVkMTsKLQl1aW50MTZfdAlzYWRiX3hfc2EyX3Jlc2VydmVkMjsKLQl1aW50MzJfdAlzYWRiX3hfc2EyX3NlcXVlbmNlOwotCXVpbnQzMl90CXNhZGJfeF9zYTJfcmVxaWQ7CisJX191MTYJc2FkYl94X3NhMl9sZW47CisJX191MTYJc2FkYl94X3NhMl9leHR0eXBlOworCV9fdTgJCXNhZGJfeF9zYTJfbW9kZTsKKwlfX3U4CQlzYWRiX3hfc2EyX3Jlc2VydmVkMTsKKwlfX3UxNglzYWRiX3hfc2EyX3Jlc2VydmVkMjsKKwlfX3UzMglzYWRiX3hfc2EyX3NlcXVlbmNlOworCV9fdTMyCXNhZGJfeF9zYTJfcmVxaWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfc2EyKSA9PSAxNiAqLwogCiBzdHJ1Y3Qgc2FkYl94X3BvbGljeSB7Ci0JdWludDE2X3QJc2FkYl94X3BvbGljeV9sZW47Ci0JdWludDE2X3QJc2FkYl94X3BvbGljeV9leHR0eXBlOwotCXVpbnQxNl90CXNhZGJfeF9wb2xpY3lfdHlwZTsKLQl1aW50OF90CQlzYWRiX3hfcG9saWN5X2RpcjsKLQl1aW50OF90CQlzYWRiX3hfcG9saWN5X3Jlc2VydmVkOwotCXVpbnQzMl90CXNhZGJfeF9wb2xpY3lfaWQ7Ci0JdWludDMyX3QJc2FkYl94X3BvbGljeV9wcmlvcml0eTsKKwlfX3UxNglzYWRiX3hfcG9saWN5X2xlbjsKKwlfX3UxNglzYWRiX3hfcG9saWN5X2V4dHR5cGU7CisJX191MTYJc2FkYl94X3BvbGljeV90eXBlOworCV9fdTgJCXNhZGJfeF9wb2xpY3lfZGlyOworCV9fdTgJCXNhZGJfeF9wb2xpY3lfcmVzZXJ2ZWQ7CisJX191MzIJc2FkYl94X3BvbGljeV9pZDsKKwlfX3UzMglzYWRiX3hfcG9saWN5X3ByaW9yaXR5OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIC8qIHNpemVvZihzdHJ1Y3Qgc2FkYl94X3BvbGljeSkgPT0gMTYgKi8KIAogc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QgewotCXVpbnQxNl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfbGVuOwotCXVpbnQxNl90CXNhZGJfeF9pcHNlY3JlcXVlc3RfcHJvdG87Ci0JdWludDhfdAkJc2FkYl94X2lwc2VjcmVxdWVzdF9tb2RlOwotCXVpbnQ4X3QJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbGV2ZWw7Ci0JdWludDE2X3QJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDE7Ci0JdWludDMyX3QJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXFpZDsKLQl1aW50MzJfdAlzYWRiX3hfaXBzZWNyZXF1ZXN0X3Jlc2VydmVkMjsKKwlfX3UxNglzYWRiX3hfaXBzZWNyZXF1ZXN0X2xlbjsKKwlfX3UxNglzYWRiX3hfaXBzZWNyZXF1ZXN0X3Byb3RvOworCV9fdTgJCXNhZGJfeF9pcHNlY3JlcXVlc3RfbW9kZTsKKwlfX3U4CQlzYWRiX3hfaXBzZWNyZXF1ZXN0X2xldmVsOworCV9fdTE2CXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVzZXJ2ZWQxOworCV9fdTMyCXNhZGJfeF9pcHNlY3JlcXVlc3RfcmVxaWQ7CisJX191MzIJc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDI7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3hfaXBzZWNyZXF1ZXN0KSA9PSAxNiAqLwogCkBAIC0yMDAsMzggKzIwMCwzOCBAQAogICogdHlwZSBvZiBOQVQtVCBpcyBzdXBwb3J0ZWQsIGRyYWZ0LWlldGYtaXBzZWMtdWRwLWVuY2Fwcy0wNgogICovCiBzdHJ1Y3Qgc2FkYl94X25hdF90X3R5cGUgewotCXVpbnQxNl90CXNhZGJfeF9uYXRfdF90eXBlX2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfdHlwZV9leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9uYXRfdF90eXBlX3R5cGU7Ci0JdWludDhfdAkJc2FkYl94X25hdF90X3R5cGVfcmVzZXJ2ZWRbM107CisJX191MTYJc2FkYl94X25hdF90X3R5cGVfbGVuOworCV9fdTE2CXNhZGJfeF9uYXRfdF90eXBlX2V4dHR5cGU7CisJX191OAkJc2FkYl94X25hdF90X3R5cGVfdHlwZTsKKwlfX3U4CQlzYWRiX3hfbmF0X3RfdHlwZV9yZXNlcnZlZFszXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9uYXRfdF90eXBlKSA9PSA4ICovCiAKIC8qIFBhc3MgYSBOQVQgVHJhdmVyc2FsIHBvcnQgKFNvdXJjZSBvciBEZXN0IHBvcnQpICovCiBzdHJ1Y3Qgc2FkYl94X25hdF90X3BvcnQgewotCXVpbnQxNl90CXNhZGJfeF9uYXRfdF9wb3J0X2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9leHR0eXBlOworCV9fdTE2CXNhZGJfeF9uYXRfdF9wb3J0X2xlbjsKKwlfX3UxNglzYWRiX3hfbmF0X3RfcG9ydF9leHR0eXBlOwogCV9fYmUxNgkJc2FkYl94X25hdF90X3BvcnRfcG9ydDsKLQl1aW50MTZfdAlzYWRiX3hfbmF0X3RfcG9ydF9yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3hfbmF0X3RfcG9ydF9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0KSA9PSA4ICovCiAKIC8qIEdlbmVyaWMgTFNNIHNlY3VyaXR5IGNvbnRleHQgKi8KIHN0cnVjdCBzYWRiX3hfc2VjX2N0eCB7Ci0JdWludDE2X3QJc2FkYl94X3NlY19sZW47Ci0JdWludDE2X3QJc2FkYl94X3NlY19leHR0eXBlOwotCXVpbnQ4X3QJCXNhZGJfeF9jdHhfYWxnOyAgLyogTFNNczogZS5nLiwgc2VsaW51eCA9PSAxICovCi0JdWludDhfdAkJc2FkYl94X2N0eF9kb2k7Ci0JdWludDE2X3QJc2FkYl94X2N0eF9sZW47CisJX191MTYJc2FkYl94X3NlY19sZW47CisJX191MTYJc2FkYl94X3NlY19leHR0eXBlOworCV9fdTgJCXNhZGJfeF9jdHhfYWxnOyAgLyogTFNNczogZS5nLiwgc2VsaW51eCA9PSAxICovCisJX191OAkJc2FkYl94X2N0eF9kb2k7CisJX191MTYJc2FkYl94X2N0eF9sZW47CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogc2l6ZW9mKHN0cnVjdCBzYWRiX3NlY19jdHgpID0gOCAqLwogCiAvKiBVc2VkIGJ5IE1JR1JBVEUgdG8gcGFzcyBhZGRyZXNzZXMgSUtFIHdpbGwgdXNlIHRvIHBlcmZvcm0KICAqIG5lZ290aWF0aW9uIHdpdGggdGhlIHBlZXIgKi8KIHN0cnVjdCBzYWRiX3hfa21hZGRyZXNzIHsKLQl1aW50MTZfdAlzYWRiX3hfa21hZGRyZXNzX2xlbjsKLQl1aW50MTZfdAlzYWRiX3hfa21hZGRyZXNzX2V4dHR5cGU7Ci0JdWludDMyX3QJc2FkYl94X2ttYWRkcmVzc19yZXNlcnZlZDsKKwlfX3UxNglzYWRiX3hfa21hZGRyZXNzX2xlbjsKKwlfX3UxNglzYWRiX3hfa21hZGRyZXNzX2V4dHR5cGU7CisJX191MzIJc2FkYl94X2ttYWRkcmVzc19yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBzaXplb2Yoc3RydWN0IHNhZGJfeF9rbWFkZHJlc3MpID09IDggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggZDdlNTRkOS4uMzJjZjE0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0zMTUsOCArMzE1LDcgQEAKIAogCS8qIEludGVycnVwdCBhbmQgUG9sbGluZyBpbmZyYXN0cnVjdHVyZSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCBwaHlfcXVldWU7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHN0YXRlX3F1ZXVlOwotCXN0cnVjdCB0aW1lcl9saXN0IHBoeV90aW1lcjsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRlX3F1ZXVlOwogCWF0b21pY190IGlycV9kaXNhYmxlOwogCiAJc3RydWN0IG11dGV4IGxvY2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpbS5oIGIvaW5jbHVkZS9saW51eC9waW0uaAppbmRleCAxYmEwNjYxLi4yNTJiZjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGltLmgKQEAgLTQsMTQgKzQsMTQgQEAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKIC8qIE1lc3NhZ2UgdHlwZXMgLSBWMSAqLwotI2RlZmluZSBQSU1fVjFfVkVSU0lPTgkJX19jb25zdGFudF9odG9ubCgweDEwMDAwMDAwKQorI2RlZmluZSBQSU1fVjFfVkVSU0lPTgkJY3B1X3RvX2JlMzIoMHgxMDAwMDAwMCkKICNkZWZpbmUgUElNX1YxX1JFR0lTVEVSCQkxCiAKIC8qIE1lc3NhZ2UgdHlwZXMgLSBWMiAqLwogI2RlZmluZSBQSU1fVkVSU0lPTgkJMgogI2RlZmluZSBQSU1fUkVHSVNURVIJCTEKIAotI2RlZmluZSBQSU1fTlVMTF9SRUdJU1RFUglfX2NvbnN0YW50X2h0b25sKDB4NDAwMDAwMDApCisjZGVmaW5lIFBJTV9OVUxMX1JFR0lTVEVSCWNwdV90b19iZTMyKDB4NDAwMDAwMDApCiAKIC8qIFBJTXYyIHJlZ2lzdGVyIG1lc3NhZ2UgaGVhZGVyIGxheW91dCAoaWV0Zi1kcmFmdC1pZG1yLXBpbXZzbS12Mi0wMC5wcyAqLwogc3RydWN0IHBpbXJlZ2hkcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKaW5kZXggOWEzNDI2OS4uNzZlNDcwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCkBAIC0xMiw2ICsxMiw3IEBACiAjZGVmaW5lIF9QTEFURk9STV9ERVZJQ0VfSF8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHsKIAljb25zdCBjaGFyCSogbmFtZTsKQEAgLTE5LDggKzIwLDEzIEBACiAJc3RydWN0IGRldmljZQlkZXY7CiAJdTMyCQludW1fcmVzb3VyY2VzOwogCXN0cnVjdCByZXNvdXJjZQkqIHJlc291cmNlOworCXZvaWQJCSpwbGF0Zm9ybV9kYXRhOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZAkqaWRfZW50cnk7CiB9OwogCisjZGVmaW5lIHBsYXRmb3JtX2dldF9kZXZpY2VfaWQocGRldikJKChwZGV2KS0+aWRfZW50cnkpCisKICNkZWZpbmUgdG9fcGxhdGZvcm1fZGV2aWNlKHgpIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldikKIAogZXh0ZXJuIGludCBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKQEAgLTU2LDYgKzYyLDcgQEAKIAlpbnQgKCpyZXN1bWVfZWFybHkpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZF90YWJsZTsKIH07CiAKIGV4dGVybiBpbnQgcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsaXN0LmggYi9pbmNsdWRlL2xpbnV4L3BsaXN0LmgKaW5kZXggODVkZTJmMC4uNDU5MjZkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxpc3QuaApAQCAtOTYsNiArOTYsMTAgQEAKICMgZGVmaW5lIFBMSVNUX0hFQURfTE9DS19JTklUKF9sb2NrKQogI2VuZGlmCiAKKyNkZWZpbmUgX1BMSVNUX0hFQURfSU5JVChoZWFkKQkJCQlcCisJLnByaW9fbGlzdCA9IExJU1RfSEVBRF9JTklUKChoZWFkKS5wcmlvX2xpc3QpLAlcCisJLm5vZGVfbGlzdCA9IExJU1RfSEVBRF9JTklUKChoZWFkKS5ub2RlX2xpc3QpCisKIC8qKgogICogUExJU1RfSEVBRF9JTklUIC0gc3RhdGljIHN0cnVjdCBwbGlzdF9oZWFkIGluaXRpYWxpemVyCiAgKiBAaGVhZDoJc3RydWN0IHBsaXN0X2hlYWQgdmFyaWFibGUgbmFtZQpAQCAtMTAzLDggKzEwNyw3IEBACiAgKi8KICNkZWZpbmUgUExJU1RfSEVBRF9JTklUKGhlYWQsIF9sb2NrKQkJCVwKIHsJCQkJCQkJXAotCS5wcmlvX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgoaGVhZCkucHJpb19saXN0KSwJXAotCS5ub2RlX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgoaGVhZCkubm9kZV9saXN0KSwJXAorICAgICAgICBfUExJU1RfSEVBRF9JTklUKGhlYWQpLCAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJUExJU1RfSEVBRF9MT0NLX0lOSVQoJihfbG9jaykpCQkJXAogfQogCkBAIC0xMTYsNyArMTE5LDcgQEAKICNkZWZpbmUgUExJU1RfTk9ERV9JTklUKG5vZGUsIF9fcHJpbykJCQlcCiB7CQkJCQkJCVwKIAkucHJpbyAgPSAoX19wcmlvKSwJCQkJXAotCS5wbGlzdCA9IFBMSVNUX0hFQURfSU5JVCgobm9kZSkucGxpc3QsIE5VTEwpLAlcCisJLnBsaXN0ID0geyBfUExJU1RfSEVBRF9JTklUKChub2RlKS5wbGlzdCkgfSwgCVwKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggMjRiYTVmNi4uMWQ0ZTJkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtNDAwLDYgKzQwMCw5IEBACiAKICNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAorI2RlZmluZSBkZXZpY2VfcG1fbG9jaygpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBkZXZpY2VfcG1fdW5sb2NrKCkgZG8ge30gd2hpbGUgKDApCisKIHN0YXRpYyBpbmxpbmUgaW50IGRldmljZV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTQwOSw2ICs0MTIsMTQgQEAKIAogI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAorLyogSG93IHRvIHJlb3JkZXIgZHBtX2xpc3QgYWZ0ZXIgZGV2aWNlX21vdmUoKSAqLworZW51bSBkcG1fb3JkZXIgeworCURQTV9PUkRFUl9OT05FLAorCURQTV9PUkRFUl9ERVZfQUZURVJfUEFSRU5ULAorCURQTV9PUkRFUl9QQVJFTlRfQkVGT1JFX0RFViwKKwlEUE1fT1JERVJfREVWX0xBU1QsCit9OworCiAvKgogICogR2xvYmFsIFBvd2VyIE1hbmFnZW1lbnQgZmxhZ3MKICAqIFVzZWQgdG8ga2VlcCBBUE0gYW5kIEFDUEkgZnJvbSBib3RoIGJlaW5nIGFjdGl2ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oIGIvaW5jbHVkZS9saW51eC9wcHBfY2hhbm5lbC5oCmluZGV4IGE5NDI4OTIuLjBkM2ZhNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2NoYW5uZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9jaGFubmVsLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAKIHN0cnVjdCBwcHBfY2hhbm5lbDsKIApAQCAtMzksOCArNDAsOCBAQAogCWludAkJbXR1OwkJLyogbWF4IHRyYW5zbWl0IHBhY2tldCBzaXplICovCiAJaW50CQloZHJsZW47CQkvKiBhbW91bnQgb2YgaGVhZHJvb20gY2hhbm5lbCBuZWVkcyAqLwogCXZvaWQJCSpwcHA7CQkvKiBvcGFxdWUgdG8gY2hhbm5lbCAqLwotCS8qIHRoZSBmb2xsb3dpbmcgYXJlIG5vdCB1c2VkIGF0IHByZXNlbnQgKi8KIAlpbnQJCXNwZWVkOwkJLyogdHJhbnNmZXIgcmF0ZSAoYnl0ZXMvc2Vjb25kKSAqLworCS8qIHRoZSBmb2xsb3dpbmcgaXMgbm90IHVzZWQgYXQgcHJlc2VudCAqLwogCWludAkJbGF0ZW5jeTsJLyogb3ZlcmhlYWQgdGltZSBpbiBtaWxsaXNlY29uZHMgKi8KIH07CiAKQEAgLTU2LDYgKzU3LDkgQEAKICAgIHRoYXQgd2UgbWF5IGhhdmUgbWlzc2VkIGEgcGFja2V0LiAqLwogZXh0ZXJuIHZvaWQgcHBwX2lucHV0X2Vycm9yKHN0cnVjdCBwcHBfY2hhbm5lbCAqLCBpbnQgY29kZSk7CiAKKy8qIEF0dGFjaCBhIGNoYW5uZWwgdG8gYSBnaXZlbiBQUFAgdW5pdCBpbiBzcGVjaWZpZWQgbmV0LiAqLworZXh0ZXJuIGludCBwcHBfcmVnaXN0ZXJfbmV0X2NoYW5uZWwoc3RydWN0IG5ldCAqLCBzdHJ1Y3QgcHBwX2NoYW5uZWwgKik7CisKIC8qIEF0dGFjaCBhIGNoYW5uZWwgdG8gYSBnaXZlbiBQUFAgdW5pdC4gKi8KIGV4dGVybiBpbnQgcHBwX3JlZ2lzdGVyX2NoYW5uZWwoc3RydWN0IHBwcF9jaGFubmVsICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmggYi9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmgKaW5kZXggMWM4NjZiZC4uMGY5M2VkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaApAQCAtMTc3LDggKzE3Nyw4IEBACiAgKiB0aGUgbGFzdCBOUCBwYWNrZXQgd2FzIHNlbnQgb3IgcmVjZWl2ZWQuCiAgKi8KIHN0cnVjdCBwcHBfaWRsZSB7Ci0gICAgdGltZV90IHhtaXRfaWRsZTsJCS8qIHRpbWUgc2luY2UgbGFzdCBOUCBwYWNrZXQgc2VudCAqLwotICAgIHRpbWVfdCByZWN2X2lkbGU7CQkvKiB0aW1lIHNpbmNlIGxhc3QgTlAgcGFja2V0IHJlY2VpdmVkICovCisgICAgX19rZXJuZWxfdGltZV90IHhtaXRfaWRsZTsJLyogdGltZSBzaW5jZSBsYXN0IE5QIHBhY2tldCBzZW50ICovCisgICAgX19rZXJuZWxfdGltZV90IHJlY3ZfaWRsZTsJLyogdGltZSBzaW5jZSBsYXN0IE5QIHBhY2tldCByZWNlaXZlZCAqLwogfTsKIAogI2VuZGlmIC8qIF9QUFBfREVGU19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCmluZGV4IGQ3MmQ1ZDguLjc4YzQ4ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTE5OCw2ICsxOTgsNyBAQAogCXFzaXplX3QgZHFiX2JoYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIGRpc2sgYmxrcyBhbGxvYyAqLwogCXFzaXplX3QgZHFiX2Jzb2Z0bGltaXQ7CS8qIHByZWZlcnJlZCBsaW1pdCBvbiBkaXNrIGJsa3MgKi8KIAlxc2l6ZV90IGRxYl9jdXJzcGFjZTsJLyogY3VycmVudCB1c2VkIHNwYWNlICovCisJcXNpemVfdCBkcWJfcnN2c3BhY2U7ICAgLyogY3VycmVudCByZXNlcnZlZCBzcGFjZSBmb3IgZGVsYWxsb2MqLwogCXFzaXplX3QgZHFiX2loYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIGFsbG9jYXRlZCBpbm9kZXMgKi8KIAlxc2l6ZV90IGRxYl9pc29mdGxpbWl0OwkvKiBwcmVmZXJyZWQgaW5vZGUgbGltaXQgKi8KIAlxc2l6ZV90IGRxYl9jdXJpbm9kZXM7CS8qIGN1cnJlbnQgIyBhbGxvY2F0ZWQgaW5vZGVzICovCkBAIC0yNzYsOCArMjc3LDYgQEAKIAlzdHJ1Y3QgbWVtX2RxYmxrIGRxX2RxYjsJLyogRGlza3F1b3RhIHVzYWdlICovCiB9OwogCi0jZGVmaW5lIE5PRFFVT1QgKHN0cnVjdCBkcXVvdCAqKU5VTEwKLQogI2RlZmluZSBRVU9UQV9PSyAgICAgICAgICAwCiAjZGVmaW5lIE5PX1FVT1RBICAgICAgICAgIDEKIApAQCAtMzA4LDYgKzMwNywxNCBAQAogCWludCAoKnJlbGVhc2VfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKik7CQkvKiBRdW90YSBpcyBnb2luZyB0byBiZSBkZWxldGVkIGZyb20gZGlzayAqLwogCWludCAoKm1hcmtfZGlydHkpIChzdHJ1Y3QgZHF1b3QgKik7CQkvKiBEcXVvdCBpcyBtYXJrZWQgZGlydHkgKi8KIAlpbnQgKCp3cml0ZV9pbmZvKSAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CS8qIFdyaXRlIG9mIHF1b3RhICJzdXBlcmJsb2NrIiAqLworCS8qIHJlc2VydmUgcXVvdGEgZm9yIGRlbGF5ZWQgYmxvY2sgYWxsb2NhdGlvbiAqLworCWludCAoKnJlc2VydmVfc3BhY2UpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCwgaW50KTsKKwkvKiBjbGFpbSByZXNlcnZlZCBxdW90YSBmb3IgZGVsYXllZCBhbGxvYyAqLworCWludCAoKmNsYWltX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOworCS8qIHJlbGVhc2UgcnN2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MgKi8KKwl2b2lkICgqcmVsZWFzZV9yc3YpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCk7CisJLyogZ2V0IHJlc2VydmVkIHF1b3RhIGZvciBkZWxheWVkIGFsbG9jICovCisJcXNpemVfdCAoKmdldF9yZXNlcnZlZF9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqKTsKIH07CiAKIC8qIE9wZXJhdGlvbnMgaGFuZGxpbmcgcmVxdWVzdHMgZnJvbSB1c2Vyc3BhY2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaCBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAppbmRleCAwYjM1YjNhLi4zNjM1M2Q5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCkBAIC0zNSw2ICszNSwxMSBAQAogaW50IGRxdW90X2FsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgcHJlYWxsb2MpOwogaW50IGRxdW90X2FsbG9jX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKTsKIAoraW50IGRxdW90X3Jlc2VydmVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCBwcmVhbGxvYyk7CitpbnQgZHF1b3RfY2xhaW1fc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpOwordm9pZCBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKTsKK3FzaXplX3QgZHF1b3RfZ2V0X3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworCiBpbnQgZHF1b3RfZnJlZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcik7CiBpbnQgZHF1b3RfZnJlZV9pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcik7CiAKQEAgLTE4Myw2ICsxODgsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSkgeworCQkvKiBVc2VkIHNwYWNlIGlzIHVwZGF0ZWQgaW4gYWxsb2Nfc3BhY2UoKSAqLworCQlpZiAoaW5vZGUtPmlfc2ItPmRxX29wLT5yZXNlcnZlX3NwYWNlKGlub2RlLCBuciwgMCkgPT0gTk9fUVVPVEEpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9hbGxvY19pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSkgewpAQCAtMTkzLDYgKzIwOCwzMSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogQ29udmVydCBpbi1tZW1vcnkgcmVzZXJ2ZWQgcXVvdGFzIHRvIHJlYWwgY29uc3VtZWQgcXVvdGFzCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9jbGFpbV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSkgeworCQlpZiAoaW5vZGUtPmlfc2ItPmRxX29wLT5jbGFpbV9zcGFjZShpbm9kZSwgbnIpID09IE5PX1FVT1RBKQorCQkJcmV0dXJuIDE7CisJfSBlbHNlCisJCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnIpOworCisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWxlYXNlIHJlc2VydmVkIChpbi1tZW1vcnkpIHF1b3RhcworICovCitzdGF0aWMgaW5saW5lCit2b2lkIHZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpKQorCQlpbm9kZS0+aV9zYi0+ZHFfb3AtPnJlbGVhc2VfcnN2KGlub2RlLCBucik7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7CiAJaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpKQpAQCAtMzM5LDYgKzM3OSwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfY2xhaW1fc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlyZXR1cm4gdmZzX2RxX2FsbG9jX3NwYWNlKGlub2RlLCBucik7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2ludCB2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQogewogCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgbnIpOwpAQCAtMzU0LDY3ICs0MTAsNDggQEAKIAogc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX3ByZWFsbG9jX2Jsb2NrX25vZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLQlyZXR1cm4gdmZzX2RxX3ByZWFsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsCi0JCQluciA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cyk7CisJcmV0dXJuIHZmc19kcV9wcmVhbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX3ByZWFsbG9jX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7Ci0JcmV0dXJuIHZmc19kcV9wcmVhbGxvY19zcGFjZShpbm9kZSwKLQkJCW5yIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKKwlyZXR1cm4gdmZzX2RxX3ByZWFsbG9jX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX2FsbG9jX2Jsb2NrX25vZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLSAJcmV0dXJuIHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLAotCQkJbnIgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOworCXJldHVybiB2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9hbGxvY19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQogewotCXJldHVybiB2ZnNfZHFfYWxsb2Nfc3BhY2UoaW5vZGUsCi0JCQluciA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cyk7CisJcmV0dXJuIHZmc19kcV9hbGxvY19zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9yZXNlcnZlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJcmV0dXJuIHZmc19kcV9yZXNlcnZlX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX2NsYWltX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJcmV0dXJuIHZmc19kcV9jbGFpbV9zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZnNfZHFfZnJlZV9ibG9ja19ub2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7Ci0JdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOworCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2ZyZWVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLQl2ZnNfZHFfZnJlZV9zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpOworCXZmc19kcV9mcmVlX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKIH0KIAotLyoKLSAqIERlZmluZSB1cHBlcmNhc2UgZXF1aXZhbGVudHMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZnVuY3Rpb24gbmFtZXMKLSAqIENhbiBnbyBhd2F5IHdoZW4gd2UgdGhpbmsgYWxsIHVzZXJzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgKDE1LzA0LzIwMDgpCi0gKi8KLSNkZWZpbmUgRFFVT1RfSU5JVChpbm9kZSkgdmZzX2RxX2luaXQoaW5vZGUpCi0jZGVmaW5lIERRVU9UX0RST1AoaW5vZGUpIHZmc19kcV9kcm9wKGlub2RlKQotI2RlZmluZSBEUVVPVF9QUkVBTExPQ19TUEFDRV9OT0RJUlRZKGlub2RlLCBucikgXAotCQkJCXZmc19kcV9wcmVhbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfUFJFQUxMT0NfU1BBQ0UoaW5vZGUsIG5yKSB2ZnNfZHFfcHJlYWxsb2Nfc3BhY2UoaW5vZGUsIG5yKQotI2RlZmluZSBEUVVPVF9BTExPQ19TUEFDRV9OT0RJUlRZKGlub2RlLCBucikgXAotCQkJCXZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfQUxMT0NfU1BBQ0UoaW5vZGUsIG5yKSB2ZnNfZHFfYWxsb2Nfc3BhY2UoaW5vZGUsIG5yKQotI2RlZmluZSBEUVVPVF9QUkVBTExPQ19CTE9DS19OT0RJUlRZKGlub2RlLCBucikgXAotCQkJCXZmc19kcV9wcmVhbGxvY19ibG9ja19ub2RpcnR5KGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfUFJFQUxMT0NfQkxPQ0soaW5vZGUsIG5yKSB2ZnNfZHFfcHJlYWxsb2NfYmxvY2soaW5vZGUsIG5yKQotI2RlZmluZSBEUVVPVF9BTExPQ19CTE9DS19OT0RJUlRZKGlub2RlLCBucikgXAotCQkJCXZmc19kcV9hbGxvY19ibG9ja19ub2RpcnR5KGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfQUxMT0NfQkxPQ0soaW5vZGUsIG5yKSB2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIG5yKQotI2RlZmluZSBEUVVPVF9BTExPQ19JTk9ERShpbm9kZSkgdmZzX2RxX2FsbG9jX2lub2RlKGlub2RlKQotI2RlZmluZSBEUVVPVF9GUkVFX1NQQUNFX05PRElSVFkoaW5vZGUsIG5yKSBcCi0JCQkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIpCi0jZGVmaW5lIERRVU9UX0ZSRUVfU1BBQ0UoaW5vZGUsIG5yKSB2ZnNfZHFfZnJlZV9zcGFjZShpbm9kZSwgbnIpCi0jZGVmaW5lIERRVU9UX0ZSRUVfQkxPQ0tfTk9ESVJUWShpbm9kZSwgbnIpIFwKLQkJCQl2ZnNfZHFfZnJlZV9ibG9ja19ub2RpcnR5KGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfRlJFRV9CTE9DSyhpbm9kZSwgbnIpIHZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBucikKLSNkZWZpbmUgRFFVT1RfRlJFRV9JTk9ERShpbm9kZSkgdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpCi0jZGVmaW5lIERRVU9UX1RSQU5TRkVSKGlub2RlLCBpYXR0cikgdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBpYXR0cikKLSNkZWZpbmUgRFFVT1RfU1lOQyhzYikgdmZzX2RxX3N5bmMoc2IpCi0jZGVmaW5lIERRVU9UX09GRihzYiwgcmVtb3VudCkgdmZzX2RxX29mZihzYiwgcmVtb3VudCkKLSNkZWZpbmUgRFFVT1RfT05fUkVNT1VOVChzYikgdmZzX2RxX3F1b3RhX29uX3JlbW91bnQoc2IpCi0KICNlbmRpZiAvKiBfTElOVVhfUVVPVEFPUFNfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jkcy5oIGIvaW5jbHVkZS9saW51eC9yZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTFkYzkxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yZHMuaApAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1JEU19ICisjZGVmaW5lIF9MSU5VWF9SRFNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogVGhlc2Ugc3BhcnNlIGFubm90YXRlZCB0eXBlcyBzaG91bGRuJ3QgYmUgaW4gYW55IHVzZXIKKyAqIHZpc2libGUgaGVhZGVyIGZpbGUuIFdlIHNob3VsZCBjbGVhbiB0aGlzIHVwIHJhdGhlcgorICogdGhhbiBrbHVkZ2luZyBhcm91bmQgdGhlbS4gKi8KKyNpZm5kZWYgX19LRVJORUxfXworI2RlZmluZSBfX2JlMTYJdV9pbnQxNl90CisjZGVmaW5lIF9fYmUzMgl1X2ludDMyX3QKKyNkZWZpbmUgX19iZTY0CXVfaW50NjRfdAorI2VuZGlmCisKKyNkZWZpbmUgUkRTX0lCX0FCSV9WRVJTSU9OCQkweDMwMQorCisvKgorICogc2V0c29ja29wdC9nZXRzb2Nrb3B0IGZvciBTT0xfUkRTCisgKi8KKyNkZWZpbmUgUkRTX0NBTkNFTF9TRU5UX1RPICAgICAgCTEKKyNkZWZpbmUgUkRTX0dFVF9NUgkJCTIKKyNkZWZpbmUgUkRTX0ZSRUVfTVIJCQkzCisvKiBkZXByZWNhdGVkOiBSRFNfQkFSUklFUiA0ICovCisjZGVmaW5lIFJEU19SRUNWRVJSCQkJNQorI2RlZmluZSBSRFNfQ09OR19NT05JVE9SCQk2CisKKy8qCisgKiBDb250cm9sIG1lc3NhZ2UgdHlwZXMgZm9yIFNPTF9SRFMuCisgKgorICogQ01TR19SRE1BX0FSR1MgKHNlbmRtc2cpCisgKglSZXF1ZXN0IGEgUkRNQSB0cmFuc2ZlciB0by9mcm9tIHRoZSBzcGVjaWZpZWQKKyAqCW1lbW9yeSByYW5nZXMuCisgKglUaGUgY21zZ19kYXRhIGlzIGEgc3RydWN0IHJkc19yZG1hX2FyZ3MuCisgKiBSRFNfQ01TR19SRE1BX0RFU1QgKHJlY3Ztc2csIHNlbmRtc2cpCisgKglLZXJuZWwgaW5mb3JtcyBhcHBsaWNhdGlvbiBhYm91dCBpbnRlbmRlZAorICoJc291cmNlL2Rlc3RpbmF0aW9uIG9mIGEgUkRNQSB0cmFuc2ZlcgorICogUkRTX0NNU0dfUkRNQV9NQVAgKHNlbmRtc2cpCisgKglBcHBsaWNhdGlvbiBhc2tzIGtlcm5lbCB0byBtYXAgdGhlIGdpdmVuCisgKgltZW1vcnkgcmFuZ2UgaW50byBhIElCIE1SLCBhbmQgc2VuZCB0aGUKKyAqCVJfS2V5IGFsb25nIGluIGFuIFJEUyBleHRlbnNpb24gaGVhZGVyLgorICoJVGhlIGNtc2dfZGF0YSBpcyBhIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MsCisgKgl0aGUgc2FtZSBhcyBmb3IgdGhlIEdFVF9NUiBzZXRzb2Nrb3B0LgorICogUkRTX0NNU0dfUkRNQV9TVEFUVVMgKHJlY3Ztc2cpCisgKglSZXR1cm5zIHRoZSBzdGF0dXMgb2YgYSBjb21wbGV0ZWQgUkRNQSBvcGVyYXRpb24uCisgKi8KKyNkZWZpbmUgUkRTX0NNU0dfUkRNQV9BUkdTCQkxCisjZGVmaW5lIFJEU19DTVNHX1JETUFfREVTVAkJMgorI2RlZmluZSBSRFNfQ01TR19SRE1BX01BUAkJMworI2RlZmluZSBSRFNfQ01TR19SRE1BX1NUQVRVUwkJNAorI2RlZmluZSBSRFNfQ01TR19DT05HX1VQREFURQkJNQorCisjZGVmaW5lIFJEU19JTkZPX0ZJUlNUCQkJMTAwMDAKKyNkZWZpbmUgUkRTX0lORk9fQ09VTlRFUlMJCTEwMDAwCisjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05TCQkxMDAwMQorLyogMTAwMDIgYWthIFJEU19JTkZPX0ZMT1dTIGlzIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgUkRTX0lORk9fU0VORF9NRVNTQUdFUwkJMTAwMDMKKyNkZWZpbmUgUkRTX0lORk9fUkVUUkFOU19NRVNTQUdFUyAgICAgICAxMDAwNAorI2RlZmluZSBSRFNfSU5GT19SRUNWX01FU1NBR0VTICAgICAgICAgIDEwMDA1CisjZGVmaW5lIFJEU19JTkZPX1NPQ0tFVFMgICAgICAgICAgICAgICAgMTAwMDYKKyNkZWZpbmUgUkRTX0lORk9fVENQX1NPQ0tFVFMgICAgICAgICAgICAxMDAwNworI2RlZmluZSBSRFNfSU5GT19JQl9DT05ORUNUSU9OUwkJMTAwMDgKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTl9TVEFUUwkxMDAwOQorI2RlZmluZSBSRFNfSU5GT19JV0FSUF9DT05ORUNUSU9OUwkxMDAxMAorI2RlZmluZSBSRFNfSU5GT19MQVNUCQkJMTAwMTAKKworc3RydWN0IHJkc19pbmZvX2NvdW50ZXIgeworCXVfaW50OF90CW5hbWVbMzJdOworCXVfaW50NjRfdAl2YWx1ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUkRTX0lORk9fQ09OTkVDVElPTl9GTEFHX1NFTkRJTkcJMHgwMQorI2RlZmluZSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfQ09OTkVDVElORwkweDAyCisjZGVmaW5lIFJEU19JTkZPX0NPTk5FQ1RJT05fRkxBR19DT05ORUNURUQJMHgwNAorCisjZGVmaW5lIFRSQU5TTkFNU0laCTE2CisKK3N0cnVjdCByZHNfaW5mb19jb25uZWN0aW9uIHsKKwl1X2ludDY0X3QJbmV4dF90eF9zZXE7CisJdV9pbnQ2NF90CW5leHRfcnhfc2VxOworCV9fYmUzMgkJbGFkZHI7CisJX19iZTMyCQlmYWRkcjsKKwl1X2ludDhfdAl0cmFuc3BvcnRbVFJBTlNOQU1TSVpdOwkJLyogbnVsbCB0ZXJtIGFzY2lpICovCisJdV9pbnQ4X3QJZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgcmRzX2luZm9fZmxvdyB7CisJX19iZTMyCQlsYWRkcjsKKwlfX2JlMzIJCWZhZGRyOworCXVfaW50MzJfdAlieXRlczsKKwlfX2JlMTYJCWxwb3J0OworCV9fYmUxNgkJZnBvcnQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFJEU19JTkZPX01FU1NBR0VfRkxBR19BQ0sgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFJEU19JTkZPX01FU1NBR0VfRkxBR19GQVNUX0FDSyAgICAgICAgICAweDAyCisKK3N0cnVjdCByZHNfaW5mb19tZXNzYWdlIHsKKwl1X2ludDY0X3QJc2VxOworCXVfaW50MzJfdAlsZW47CisJX19iZTMyCQlsYWRkcjsKKwlfX2JlMzIJCWZhZGRyOworCV9fYmUxNgkJbHBvcnQ7CisJX19iZTE2CQlmcG9ydDsKKwl1X2ludDhfdAlmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCByZHNfaW5mb19zb2NrZXQgeworCXVfaW50MzJfdAlzbmRidWY7CisJX19iZTMyCQlib3VuZF9hZGRyOworCV9fYmUzMgkJY29ubmVjdGVkX2FkZHI7CisJX19iZTE2CQlib3VuZF9wb3J0OworCV9fYmUxNgkJY29ubmVjdGVkX3BvcnQ7CisJdV9pbnQzMl90CXJjdmJ1ZjsKKwl1X2ludDY0X3QJaW51bTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgUkRTX0lCX0dJRF9MRU4JMTYKK3N0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24geworCV9fYmUzMgkJc3JjX2FkZHI7CisJX19iZTMyCQlkc3RfYWRkcjsKKwl1aW50OF90CQlzcmNfZ2lkW1JEU19JQl9HSURfTEVOXTsKKwl1aW50OF90CQlkc3RfZ2lkW1JEU19JQl9HSURfTEVOXTsKKworCXVpbnQzMl90CW1heF9zZW5kX3dyOworCXVpbnQzMl90CW1heF9yZWN2X3dyOworCXVpbnQzMl90CW1heF9zZW5kX3NnZTsKKwl1aW50MzJfdAlyZG1hX21yX21heDsKKwl1aW50MzJfdAlyZG1hX21yX3NpemU7Cit9OworCisvKgorICogQ29uZ2VzdGlvbiBtb25pdG9yaW5nLgorICogQ29uZ2VzdGlvbiBjb250cm9sIGluIFJEUyBoYXBwZW5zIGF0IHRoZSBob3N0IGNvbm5lY3Rpb24KKyAqIGxldmVsIGJ5IGV4Y2hhbmdpbmcgYSBiaXRtYXAgbWFya2luZyBjb25nZXN0ZWQgcG9ydHMuCisgKiBCeSBkZWZhdWx0LCBhIHByb2Nlc3Mgc2xlZXBpbmcgaW4gcG9sbCgpIGlzIGFsd2F5cyB3b2tlbgorICogdXAgd2hlbiB0aGUgY29uZ2VzdGlvbiBtYXAgaXMgdXBkYXRlZC4KKyAqIFdpdGggZXhwbGljaXQgbW9uaXRvcmluZywgYW4gYXBwbGljYXRpb24gY2FuIGhhdmUgbW9yZQorICogZmluZS1ncmFpbmVkIGNvbnRyb2wuCisgKiBUaGUgYXBwbGljYXRpb24gaW5zdGFsbHMgYSA2NGJpdCBtYXNrIHZhbHVlIGluIHRoZSBzb2NrZXQsCisgKiB3aGVyZSBlYWNoIGJpdCBjb3JyZXNwb25kcyB0byBhIGdyb3VwIG9mIHBvcnRzLgorICogV2hlbiBhIGNvbmdlc3Rpb24gdXBkYXRlIGFycml2ZXMsIFJEUyBjaGVja3MgdGhlIHNldCBvZgorICogcG9ydHMgdGhhdCBhcmUgbm93IHVuY29uZ2VzdGVkIGFnYWluc3QgdGhlIGxpc3QgYml0IG1hc2sKKyAqIGluc3RhbGxlZCBpbiB0aGUgc29ja2V0LCBhbmQgaWYgdGhleSBvdmVybGFwLCB3ZSBxdWV1ZSBhCisgKiBjb25nX25vdGlmaWNhdGlvbiBvbiB0aGUgc29ja2V0LgorICoKKyAqIFRvIGluc3RhbGwgdGhlIGNvbmdlc3Rpb24gbW9uaXRvciBiaXRtYXNrLCB1c2UgUkRTX0NPTkdfTU9OSVRPUgorICogd2l0aCB0aGUgNjRiaXQgbWFzay4KKyAqIENvbmdlc3Rpb24gdXBkYXRlcyBhcmUgcmVjZWl2ZWQgdmlhIFJEU19DTVNHX0NPTkdfVVBEQVRFCisgKiBjb250cm9sIG1lc3NhZ2VzLgorICoKKyAqIFRoZSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGJpdHMgYW5kIHBvcnRzIGlzCisgKgkxIDw8IChwb3J0bnVtICUgNjQpCisgKi8KKyNkZWZpbmUgUkRTX0NPTkdfTU9OSVRPUl9TSVpFCTY0CisjZGVmaW5lIFJEU19DT05HX01PTklUT1JfQklUKHBvcnQpICAoKCh1bnNpZ25lZCBpbnQpIHBvcnQpICUgUkRTX0NPTkdfTU9OSVRPUl9TSVpFKQorI2RlZmluZSBSRFNfQ09OR19NT05JVE9SX01BU0socG9ydCkgKDFVTEwgPDwgUkRTX0NPTkdfTU9OSVRPUl9CSVQocG9ydCkpCisKKy8qCisgKiBSRE1BIHJlbGF0ZWQgdHlwZXMKKyAqLworCisvKgorICogVGhpcyBlbmNhcHN1bGF0ZXMgYSByZW1vdGUgbWVtb3J5IGxvY2F0aW9uLgorICogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGl0IGNvbnRhaW5zIHRoZSBSX0tleQorICogb2YgdGhlIHJlbW90ZSBtZW1vcnkgcmVnaW9uLCBhbmQgdGhlIG9mZnNldCBpbnRvIGl0CisgKiAoc28gdGhhdCB0aGUgYXBwbGljYXRpb24gZG9lcyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dAorICogYWxpZ25tZW50KS4KKyAqLwordHlwZWRlZiB1X2ludDY0X3QJcmRzX3JkbWFfY29va2llX3Q7CisKK3N0cnVjdCByZHNfaW92ZWMgeworCXVfaW50NjRfdAlhZGRyOworCXVfaW50NjRfdAlieXRlczsKK307CisKK3N0cnVjdCByZHNfZ2V0X21yX2FyZ3MgeworCXN0cnVjdCByZHNfaW92ZWMgdmVjOworCXVfaW50NjRfdAljb29raWVfYWRkcjsKKwl1aW50NjRfdAlmbGFnczsKK307CisKK3N0cnVjdCByZHNfZnJlZV9tcl9hcmdzIHsKKwlyZHNfcmRtYV9jb29raWVfdCBjb29raWU7CisJdV9pbnQ2NF90CWZsYWdzOworfTsKKworc3RydWN0IHJkc19yZG1hX2FyZ3MgeworCXJkc19yZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlzdHJ1Y3QgcmRzX2lvdmVjIHJlbW90ZV92ZWM7CisJdV9pbnQ2NF90CWxvY2FsX3ZlY19hZGRyOworCXVfaW50NjRfdAlucl9sb2NhbDsKKwl1X2ludDY0X3QJZmxhZ3M7CisJdV9pbnQ2NF90CXVzZXJfdG9rZW47Cit9OworCitzdHJ1Y3QgcmRzX3JkbWFfbm90aWZ5IHsKKwl1X2ludDY0X3QJdXNlcl90b2tlbjsKKwlpbnQzMl90CQlzdGF0dXM7Cit9OworCisjZGVmaW5lIFJEU19SRE1BX1NVQ0NFU1MJMAorI2RlZmluZSBSRFNfUkRNQV9SRU1PVEVfRVJST1IJMQorI2RlZmluZSBSRFNfUkRNQV9DQU5DRUxFRAkyCisjZGVmaW5lIFJEU19SRE1BX0RST1BQRUQJMworI2RlZmluZSBSRFNfUkRNQV9PVEhFUl9FUlJPUgk0CisKKy8qCisgKiBDb21tb24gc2V0IG9mIGZsYWdzIGZvciBhbGwgUkRNQSByZWxhdGVkIHN0cnVjdHMKKyAqLworI2RlZmluZSBSRFNfUkRNQV9SRUFEV1JJVEUJMHgwMDAxCisjZGVmaW5lIFJEU19SRE1BX0ZFTkNFCQkweDAwMDIJLyogdXNlIEZFTkNFIGZvciBpbW1lZGlhdGUgc2VuZCAqLworI2RlZmluZSBSRFNfUkRNQV9JTlZBTElEQVRFCTB4MDAwNAkvKiBpbnZhbGlkYXRlIFJfS2V5IGFmdGVyIGZyZWVpbmcgTVIgKi8KKyNkZWZpbmUgUkRTX1JETUFfVVNFX09OQ0UJMHgwMDA4CS8qIGZyZWUgTVIgYWZ0ZXIgdXNlICovCisjZGVmaW5lIFJEU19SRE1BX0RPTlRXQUlUCTB4MDAxMAkvKiBEb24ndCB3YWl0IGluIFNFVF9CQVJSSUVSICovCisjZGVmaW5lIFJEU19SRE1BX05PVElGWV9NRQkweDAwMjAJLyogTm90aWZ5IHdoZW4gb3BlcmF0aW9uIGNvbXBsZXRlcyAqLworCisjZW5kaWYgLyogSUJfUkRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAppbmRleCBiYzUxMTRkLi5lMzU2Yzk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCkBAIC0yOCw4ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfZnNfc2IuaD4KICNlbmRpZgogCi1zdHJ1Y3QgZmlkOwotCiAvKgogICogIGluY2x1ZGUvbGludXgvcmVpc2VyX2ZzLmgKICAqCkBAIC0zNyw2ICszNSwzMyBAQAogICoKICAqLwogCisvKiBpb2N0bCdzIGNvbW1hbmQgKi8KKyNkZWZpbmUgUkVJU0VSRlNfSU9DX1VOUEFDSwkJX0lPVygweENELDEsbG9uZykKKy8qIGRlZmluZSBmb2xsb3dpbmcgZmxhZ3MgdG8gYmUgdGhlIHNhbWUgYXMgaW4gZXh0Miwgc28gdGhhdCBjaGF0dHIoMSksCisgICBsc2F0dHIoMSkgd2lsbCB3b3JrIHdpdGggdXMuICovCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19HRVRGTEFHUwkJRlNfSU9DX0dFVEZMQUdTCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19TRVRGTEFHUwkJRlNfSU9DX1NFVEZMQUdTCisjZGVmaW5lIFJFSVNFUkZTX0lPQ19HRVRWRVJTSU9OCQlGU19JT0NfR0VUVkVSU0lPTgorI2RlZmluZSBSRUlTRVJGU19JT0NfU0VUVkVSU0lPTgkJRlNfSU9DX1NFVFZFUlNJT04KKworI2lmZGVmIF9fS0VSTkVMX18KKy8qIHRoZSAzMiBiaXQgY29tcGF0IGRlZmluaXRpb25zIHdpdGggaW50IGFyZ3VtZW50ICovCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1VOUEFDSwkJX0lPVygweENELCAxLCBpbnQpCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX0dFVEZMQUdTCQlGU19JT0MzMl9HRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0MzMl9TRVRGTEFHUwkJRlNfSU9DMzJfU0VURkxBR1MKKyNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfR0VUVkVSU0lPTglGU19JT0MzMl9HRVRWRVJTSU9OCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1NFVFZFUlNJT04JRlNfSU9DMzJfU0VUVkVSU0lPTgorCisvKiBMb2NraW5nIHByaW1pdGl2ZXMgKi8KKy8qIFJpZ2h0IG5vdyB3ZSBhcmUgc3RpbGwgZmFsbGluZyBiYWNrIHRvICh1bilsb2NrX2tlcm5lbCwgYnV0IGV2ZW50dWFsbHkgdGhhdAorICAgd291bGQgZXZvbHZlIGludG8gcmVhbCBwZXItZnMgbG9ja3MgKi8KKyNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfbG9jayggc2IgKSBsb2NrX2tlcm5lbCgpCisjZGVmaW5lIHJlaXNlcmZzX3dyaXRlX3VubG9jayggc2IgKSB1bmxvY2tfa2VybmVsKCkKKworLyogeGF0dHIgc3R1ZmYgKi8KKyNkZWZpbmUgUkVJU0VSRlNfWEFUVFJfRElSX1NFTShzKSAoUkVJU0VSRlNfU0IocyktPnhhdHRyX2Rpcl9zZW0pCitzdHJ1Y3QgZmlkOworCiAvKiBpbiByZWFkaW5nIHRoZSAjZGVmaW5lcywgaXQgbWF5IGhlbHAgdG8gdW5kZXJzdGFuZCB0aGF0IHRoZXkgZW1wbG95CiAgICB0aGUgZm9sbG93aW5nIGFiYnJldmlhdGlvbnM6CiAKQEAgLTY5OCw2ICs3MjMsNyBAQAogLyogb2JqZWN0IGlkZW50aWZpZXIgZm9yIHJvb3QgZGlyICovCiAjZGVmaW5lIFJFSVNFUkZTX1JPT1RfT0JKRUNUSUQgMgogI2RlZmluZSBSRUlTRVJGU19ST09UX1BBUkVOVF9PQkpFQ1RJRCAxCisKIGV4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfa2V5IHJvb3Rfa2V5OwogCiAvKiAKQEAgLTE1NDAsNyArMTU2Niw2IEBACiAvKiAgICAgICAgICAgICAgICAgICAgRlVOQ1RJT04gREVDTEFSQVRJT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyojaWZkZWYgX19LRVJORUxfXyovCiAjZGVmaW5lIGdldF9qb3VybmFsX2Rlc2NfbWFnaWMoYmgpIChiaC0+Yl9kYXRhICsgYmgtPmJfc2l6ZSAtIDEyKQogCiAjZGVmaW5lIGpvdXJuYWxfdHJhbnNfaGFsZihibG9ja3NpemUpIFwKQEAgLTIxNzgsMjkgKzIyMDMsNiBAQAogCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBpbnQgcmVpc2VyZnNfdW5wYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIAotLyogaW9jdGwncyBjb21tYW5kICovCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19VTlBBQ0sJCV9JT1coMHhDRCwxLGxvbmcpCi0vKiBkZWZpbmUgZm9sbG93aW5nIGZsYWdzIHRvIGJlIHRoZSBzYW1lIGFzIGluIGV4dDIsIHNvIHRoYXQgY2hhdHRyKDEpLAotICAgbHNhdHRyKDEpIHdpbGwgd29yayB3aXRoIHVzLiAqLwotI2RlZmluZSBSRUlTRVJGU19JT0NfR0VURkxBR1MJCUZTX0lPQ19HRVRGTEFHUwotI2RlZmluZSBSRUlTRVJGU19JT0NfU0VURkxBR1MJCUZTX0lPQ19TRVRGTEFHUwotI2RlZmluZSBSRUlTRVJGU19JT0NfR0VUVkVSU0lPTgkJRlNfSU9DX0dFVFZFUlNJT04KLSNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVFZFUlNJT04JCUZTX0lPQ19TRVRWRVJTSU9OCiAKLS8qIHRoZSAzMiBiaXQgY29tcGF0IGRlZmluaXRpb25zIHdpdGggaW50IGFyZ3VtZW50ICovCi0jZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1VOUEFDSwkJX0lPVygweENELCAxLCBpbnQpCi0jZGVmaW5lIFJFSVNFUkZTX0lPQzMyX0dFVEZMQUdTCQlGU19JT0MzMl9HRVRGTEFHUwotI2RlZmluZSBSRUlTRVJGU19JT0MzMl9TRVRGTEFHUwkJRlNfSU9DMzJfU0VURkxBR1MKLSNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfR0VUVkVSU0lPTglGU19JT0MzMl9HRVRWRVJTSU9OCi0jZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1NFVFZFUlNJT04JRlNfSU9DMzJfU0VUVkVSU0lPTgotCi0vKiBMb2NraW5nIHByaW1pdGl2ZXMgKi8KLS8qIFJpZ2h0IG5vdyB3ZSBhcmUgc3RpbGwgZmFsbGluZyBiYWNrIHRvICh1bilsb2NrX2tlcm5lbCwgYnV0IGV2ZW50dWFsbHkgdGhhdAotICAgd291bGQgZXZvbHZlIGludG8gcmVhbCBwZXItZnMgbG9ja3MgKi8KLSNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfbG9jayggc2IgKSBsb2NrX2tlcm5lbCgpCi0jZGVmaW5lIHJlaXNlcmZzX3dyaXRlX3VubG9jayggc2IgKSB1bmxvY2tfa2VybmVsKCkKLQotLyogeGF0dHIgc3R1ZmYgKi8KLSNkZWZpbmUgUkVJU0VSRlNfWEFUVFJfRElSX1NFTShzKSAoUkVJU0VSRlNfU0IocyktPnhhdHRyX2Rpcl9zZW0pCi0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYJCQkJLyogX0xJTlVYX1JFSVNFUl9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCAxZTVmNjczLi5iYTMyNTRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKQEAgLTIxNyw2ICsyMTcsNyBAQAogI2RlZmluZSBSVFBST1RfRE5ST1VURUQJMTMJLyogREVDbmV0IHJvdXRpbmcgZGFlbW9uICovCiAjZGVmaW5lIFJUUFJPVF9YT1JQCTE0CS8qIFhPUlAgKi8KICNkZWZpbmUgUlRQUk9UX05USwkxNQkvKiBOZXRzdWt1a3UgKi8KKyNkZWZpbmUgUlRQUk9UX0RIQ1AJMTYgICAgICAvKiBESENQIGNsaWVudCAqLwogCiAvKiBydG1fc2NvcGUKIApAQCAtNjIyLDggKzYyMyw4IEBACiAKIGV4dGVybiBpbnQgcnRuZXRsaW5rX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsIGludCBlY2hvKTsKIGV4dGVybiBpbnQgcnRubF91bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCk7Ci1leHRlcm4gaW50IHJ0bmxfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwgdTMyIGdyb3VwLAotCQkgICAgICAgc3RydWN0IG5sbXNnaGRyICpubGgsIGdmcF90IGZsYWdzKTsKK2V4dGVybiB2b2lkIHJ0bmxfbm90aWZ5KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwKKwkJCXUzMiBncm91cCwgc3RydWN0IG5sbXNnaGRyICpubGgsIGdmcF90IGZsYWdzKTsKIGV4dGVybiB2b2lkIHJ0bmxfc2V0X3NrX2VycihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBncm91cCwgaW50IGVycm9yKTsKIGV4dGVybiBpbnQgcnRuZXRsaW5rX3B1dF9tZXRyaWNzKHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqbWV0cmljcyk7CiBleHRlcm4gaW50IHJ0bmxfcHV0X2NhY2hlaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggMDExZGIyZi4uZmY5MDRiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtOTk4LDYgKzk5OCw3IEBACiAJCQkgICAgICBzdHJ1Y3QgcnEgKmJ1c2llc3QsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAogCQkJICAgICAgZW51bSBjcHVfaWRsZV90eXBlIGlkbGUpOwogCXZvaWQgKCpwcmVfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CisJaW50ICgqbmVlZHNfcG9zdF9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSk7CiAJdm9pZCAoKnBvc3Rfc2NoZWR1bGUpIChzdHJ1Y3QgcnEgKnRoaXNfcnEpOwogCXZvaWQgKCp0YXNrX3dha2VfdXApIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAKQEAgLTEwNTIsNiArMTA1MywxMCBAQAogCXU2NAkJCWxhc3Rfd2FrZXVwOwogCXU2NAkJCWF2Z19vdmVybGFwOwogCisJdTY0CQkJc3RhcnRfcnVudGltZTsKKwl1NjQJCQlhdmdfd2FrZXVwOworCXU2NAkJCW5yX21pZ3JhdGlvbnM7CisKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCXU2NAkJCXdhaXRfc3RhcnQ7CiAJdTY0CQkJd2FpdF9tYXg7CkBAIC0xMDY3LDcgKzEwNzIsNiBAQAogCXU2NAkJCWV4ZWNfbWF4OwogCXU2NAkJCXNsaWNlX21heDsKIAotCXU2NAkJCW5yX21pZ3JhdGlvbnM7CiAJdTY0CQkJbnJfbWlncmF0aW9uc19jb2xkOwogCXU2NAkJCW5yX2ZhaWxlZF9taWdyYXRpb25zX2FmZmluZTsKIAl1NjQJCQlucl9mYWlsZWRfbWlncmF0aW9uc19ydW5uaW5nOwpAQCAtMTE2NCw2ICsxMTY4LDcgQEAKICNlbmRpZgogCiAJc3RydWN0IGxpc3RfaGVhZCB0YXNrczsKKwlzdHJ1Y3QgcGxpc3Rfbm9kZSBwdXNoYWJsZV90YXNrczsKIAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCAqYWN0aXZlX21tOwogCkBAIC0xMTc1LDYgKzExODAsOCBAQAogCS8qID8/PyAqLwogCXVuc2lnbmVkIGludCBwZXJzb25hbGl0eTsKIAl1bnNpZ25lZCBkaWRfZXhlYzoxOworCXVuc2lnbmVkIGluX2V4ZWN2ZToxOwkvKiBUZWxsIHRoZSBMU01zIHRoYXQgdGhlIHByb2Nlc3MgaXMgZG9pbmcgYW4KKwkJCQkgKiBleGVjdmUgKi8KIAlwaWRfdCBwaWQ7CiAJcGlkX3QgdGdpZDsKIApAQCAtMTY3Myw2ICsxNjgwLDE2IEBACiAJcmV0dXJuIHNldF9jcHVzX2FsbG93ZWRfcHRyKHAsICZuZXdfbWFzayk7CiB9CiAKKy8qCisgKiBBcmNoaXRlY3R1cmVzIGNhbiBzZXQgdGhpcyB0byAxIGlmIHRoZXkgaGF2ZSBzcGVjaWZpZWQKKyAqIENPTkZJR19IQVZFX1VOU1RBQkxFX1NDSEVEX0NMT0NLIGluIHRoZWlyIGFyY2ggS2NvbmZpZywKKyAqIGJ1dCB0aGVuIGR1cmluZyBib290dXAgaXQgdHVybnMgb3V0IHRoYXQgc2NoZWRfY2xvY2soKQorICogaXMgcmVsaWFibGUgYWZ0ZXIgYWxsOgorICovCisjaWZkZWYgQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sKK2V4dGVybiBpbnQgc2NoZWRfY2xvY2tfc3RhYmxlOworI2VuZGlmCisKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc2NoZWRfY2xvY2sodm9pZCk7CiAKIGV4dGVybiB2b2lkIHNjaGVkX2Nsb2NrX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjdHAuaCBiL2luY2x1ZGUvbGludXgvc2N0cC5oCmluZGV4IDhiYTFjMzIuLmMyNzMxYmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2N0cC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2N0cC5oCkBAIC02MCw3ICs2MCw3IEBACiAJX19iZTE2IHNvdXJjZTsKIAlfX2JlMTYgZGVzdDsKIAlfX2JlMzIgdnRhZzsKLQlfX2JlMzIgY2hlY2tzdW07CisJX19sZTMyIGNoZWNrc3VtOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBzY3RwX3NjdHBoZHJfdDsKIAogI2lmZGVmIF9fS0VSTkVMX18KQEAgLTE3MiwzNSArMTcyLDM1IEBACiB0eXBlZGVmIGVudW0gewogCiAJLyogUkZDIDI5NjAgU2VjdGlvbiAzLjMuNSAqLwotCVNDVFBfUEFSQU1fSEVBUlRCRUFUX0lORk8JCT0gX19jb25zdGFudF9odG9ucygxKSwKKwlTQ1RQX1BBUkFNX0hFQVJUQkVBVF9JTkZPCQk9IGNwdV90b19iZTE2KDEpLAogCS8qIFJGQyAyOTYwIFNlY3Rpb24gMy4zLjIuMSAqLwotCVNDVFBfUEFSQU1fSVBWNF9BRERSRVNTCQkJPSBfX2NvbnN0YW50X2h0b25zKDUpLAotCVNDVFBfUEFSQU1fSVBWNl9BRERSRVNTCQkJPSBfX2NvbnN0YW50X2h0b25zKDYpLAotCVNDVFBfUEFSQU1fU1RBVEVfQ09PS0lFCQkJPSBfX2NvbnN0YW50X2h0b25zKDcpLAotCVNDVFBfUEFSQU1fVU5SRUNPR05JWkVEX1BBUkFNRVRFUlMJPSBfX2NvbnN0YW50X2h0b25zKDgpLAotCVNDVFBfUEFSQU1fQ09PS0lFX1BSRVNFUlZBVElWRQkJPSBfX2NvbnN0YW50X2h0b25zKDkpLAotCVNDVFBfUEFSQU1fSE9TVF9OQU1FX0FERFJFU1MJCT0gX19jb25zdGFudF9odG9ucygxMSksCi0JU0NUUF9QQVJBTV9TVVBQT1JURURfQUREUkVTU19UWVBFUwk9IF9fY29uc3RhbnRfaHRvbnMoMTIpLAotCVNDVFBfUEFSQU1fRUNOX0NBUEFCTEUJCQk9IF9fY29uc3RhbnRfaHRvbnMoMHg4MDAwKSwKKwlTQ1RQX1BBUkFNX0lQVjRfQUREUkVTUwkJCT0gY3B1X3RvX2JlMTYoNSksCisJU0NUUF9QQVJBTV9JUFY2X0FERFJFU1MJCQk9IGNwdV90b19iZTE2KDYpLAorCVNDVFBfUEFSQU1fU1RBVEVfQ09PS0lFCQkJPSBjcHVfdG9fYmUxNig3KSwKKwlTQ1RQX1BBUkFNX1VOUkVDT0dOSVpFRF9QQVJBTUVURVJTCT0gY3B1X3RvX2JlMTYoOCksCisJU0NUUF9QQVJBTV9DT09LSUVfUFJFU0VSVkFUSVZFCQk9IGNwdV90b19iZTE2KDkpLAorCVNDVFBfUEFSQU1fSE9TVF9OQU1FX0FERFJFU1MJCT0gY3B1X3RvX2JlMTYoMTEpLAorCVNDVFBfUEFSQU1fU1VQUE9SVEVEX0FERFJFU1NfVFlQRVMJPSBjcHVfdG9fYmUxNigxMiksCisJU0NUUF9QQVJBTV9FQ05fQ0FQQUJMRQkJCT0gY3B1X3RvX2JlMTYoMHg4MDAwKSwKIAogCS8qIEFVVEggRXh0ZW5zaW9uIFNlY3Rpb24gMyAqLwotCVNDVFBfUEFSQU1fUkFORE9NCQkJPSBfX2NvbnN0YW50X2h0b25zKDB4ODAwMiksCi0JU0NUUF9QQVJBTV9DSFVOS1MJCQk9IF9fY29uc3RhbnRfaHRvbnMoMHg4MDAzKSwKLQlTQ1RQX1BBUkFNX0hNQUNfQUxHTwkJCT0gX19jb25zdGFudF9odG9ucygweDgwMDQpLAorCVNDVFBfUEFSQU1fUkFORE9NCQkJPSBjcHVfdG9fYmUxNigweDgwMDIpLAorCVNDVFBfUEFSQU1fQ0hVTktTCQkJPSBjcHVfdG9fYmUxNigweDgwMDMpLAorCVNDVFBfUEFSQU1fSE1BQ19BTEdPCQkJPSBjcHVfdG9fYmUxNigweDgwMDQpLAogCiAJLyogQWRkLUlQOiBTdXBwb3J0ZWQgRXh0ZW5zaW9ucywgU2VjdGlvbiA0LjIgKi8KLQlTQ1RQX1BBUkFNX1NVUFBPUlRFRF9FWFQJPSBfX2NvbnN0YW50X2h0b25zKDB4ODAwOCksCisJU0NUUF9QQVJBTV9TVVBQT1JURURfRVhUCT0gY3B1X3RvX2JlMTYoMHg4MDA4KSwKIAogCS8qIFBSLVNDVFAgU2VjIDMuMSAqLwotCVNDVFBfUEFSQU1fRldEX1RTTl9TVVBQT1JUCT0gX19jb25zdGFudF9odG9ucygweGMwMDApLAorCVNDVFBfUEFSQU1fRldEX1RTTl9TVVBQT1JUCT0gY3B1X3RvX2JlMTYoMHhjMDAwKSwKIAogCS8qIEFkZC1JUCBFeHRlbnNpb24uIFNlY3Rpb24gMy4yICovCi0JU0NUUF9QQVJBTV9BRERfSVAJCT0gX19jb25zdGFudF9odG9ucygweGMwMDEpLAotCVNDVFBfUEFSQU1fREVMX0lQCQk9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDAyKSwKLQlTQ1RQX1BBUkFNX0VSUl9DQVVTRQkJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMyksCi0JU0NUUF9QQVJBTV9TRVRfUFJJTUFSWQkJPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwNCksCi0JU0NUUF9QQVJBTV9TVUNDRVNTX1JFUE9SVAk9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDA1KSwKLQlTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EID0gX19jb25zdGFudF9odG9ucygweGMwMDYpLAorCVNDVFBfUEFSQU1fQUREX0lQCQk9IGNwdV90b19iZTE2KDB4YzAwMSksCisJU0NUUF9QQVJBTV9ERUxfSVAJCT0gY3B1X3RvX2JlMTYoMHhjMDAyKSwKKwlTQ1RQX1BBUkFNX0VSUl9DQVVTRQkJPSBjcHVfdG9fYmUxNigweGMwMDMpLAorCVNDVFBfUEFSQU1fU0VUX1BSSU1BUlkJCT0gY3B1X3RvX2JlMTYoMHhjMDA0KSwKKwlTQ1RQX1BBUkFNX1NVQ0NFU1NfUkVQT1JUCT0gY3B1X3RvX2JlMTYoMHhjMDA1KSwKKwlTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EID0gY3B1X3RvX2JlMTYoMHhjMDA2KSwKIAogfSBzY3RwX3BhcmFtX3Q7IC8qIGVudW0gKi8KIApAQCAtMjEyLDEzICsyMTIsMTMgQEAKICAqCiAgKi8KIHR5cGVkZWYgZW51bSB7Ci0JU0NUUF9QQVJBTV9BQ1RJT05fRElTQ0FSRCAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDAwMCksCi0JU0NUUF9QQVJBTV9BQ1RJT05fRElTQ0FSRF9FUlIgPSBfX2NvbnN0YW50X2h0b25zKDB4NDAwMCksCi0JU0NUUF9QQVJBTV9BQ1RJT05fU0tJUCAgICAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4ODAwMCksCi0JU0NUUF9QQVJBTV9BQ1RJT05fU0tJUF9FUlIgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4YzAwMCksCisJU0NUUF9QQVJBTV9BQ1RJT05fRElTQ0FSRCAgICAgPSBjcHVfdG9fYmUxNigweDAwMDApLAorCVNDVFBfUEFSQU1fQUNUSU9OX0RJU0NBUkRfRVJSID0gY3B1X3RvX2JlMTYoMHg0MDAwKSwKKwlTQ1RQX1BBUkFNX0FDVElPTl9TS0lQICAgICAgICA9IGNwdV90b19iZTE2KDB4ODAwMCksCisJU0NUUF9QQVJBTV9BQ1RJT05fU0tJUF9FUlIgICAgPSBjcHVfdG9fYmUxNigweGMwMDApLAogfSBzY3RwX3BhcmFtX2FjdGlvbl90OwogCi1lbnVtIHsgU0NUUF9QQVJBTV9BQ1RJT05fTUFTSyA9IF9fY29uc3RhbnRfaHRvbnMoMHhjMDAwKSwgfTsKK2VudW0geyBTQ1RQX1BBUkFNX0FDVElPTl9NQVNLID0gY3B1X3RvX2JlMTYoMHhjMDAwKSwgfTsKIAogLyogUkZDIDI5NjAgU2VjdGlvbiAzLjMuMSBQYXlsb2FkIERhdGEgKERBVEEpICgwKSAqLwogCkBAIC00NTcsMTcgKzQ1NywxNyBAQAogICovCiB0eXBlZGVmIGVudW0gewogCi0JU0NUUF9FUlJPUl9OT19FUlJPUgkgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwMCksCi0JU0NUUF9FUlJPUl9JTlZfU1RSTQkgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwMSksCi0JU0NUUF9FUlJPUl9NSVNTX1BBUkFNIAkgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwMiksCi0JU0NUUF9FUlJPUl9TVEFMRV9DT09LSUUJICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDMpLAotCVNDVFBfRVJST1JfTk9fUkVTT1VSQ0UgCSAgID0gX19jb25zdGFudF9odG9ucygweDA0KSwKLQlTQ1RQX0VSUk9SX0ROU19GQUlMRUQgICAgICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwNSksCi0JU0NUUF9FUlJPUl9VTktOT1dOX0NIVU5LICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDYpLAotCVNDVFBfRVJST1JfSU5WX1BBUkFNICAgICAgID0gX19jb25zdGFudF9odG9ucygweDA3KSwKLQlTQ1RQX0VSUk9SX1VOS05PV05fUEFSQU0gICA9IF9fY29uc3RhbnRfaHRvbnMoMHgwOCksCi0JU0NUUF9FUlJPUl9OT19EQVRBICAgICAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MDkpLAotCVNDVFBfRVJST1JfQ09PS0lFX0lOX1NIVVRET1dOID0gX19jb25zdGFudF9odG9ucygweDBhKSwKKwlTQ1RQX0VSUk9SX05PX0VSUk9SCSAgID0gY3B1X3RvX2JlMTYoMHgwMCksCisJU0NUUF9FUlJPUl9JTlZfU1RSTQkgICA9IGNwdV90b19iZTE2KDB4MDEpLAorCVNDVFBfRVJST1JfTUlTU19QQVJBTSAJICAgPSBjcHVfdG9fYmUxNigweDAyKSwKKwlTQ1RQX0VSUk9SX1NUQUxFX0NPT0tJRQkgICA9IGNwdV90b19iZTE2KDB4MDMpLAorCVNDVFBfRVJST1JfTk9fUkVTT1VSQ0UgCSAgID0gY3B1X3RvX2JlMTYoMHgwNCksCisJU0NUUF9FUlJPUl9ETlNfRkFJTEVEICAgICAgPSBjcHVfdG9fYmUxNigweDA1KSwKKwlTQ1RQX0VSUk9SX1VOS05PV05fQ0hVTksgICA9IGNwdV90b19iZTE2KDB4MDYpLAorCVNDVFBfRVJST1JfSU5WX1BBUkFNICAgICAgID0gY3B1X3RvX2JlMTYoMHgwNyksCisJU0NUUF9FUlJPUl9VTktOT1dOX1BBUkFNICAgPSBjcHVfdG9fYmUxNigweDA4KSwKKwlTQ1RQX0VSUk9SX05PX0RBVEEgICAgICAgICA9IGNwdV90b19iZTE2KDB4MDkpLAorCVNDVFBfRVJST1JfQ09PS0lFX0lOX1NIVVRET1dOID0gY3B1X3RvX2JlMTYoMHgwYSksCiAKIAogCS8qIFNDVFAgSW1wbGVtZW50YXRpb24gR3VpZGU6CkBAIC00NzYsOSArNDc2LDkgQEAKIAkgKiAgMTMgIFByb3RvY29sIFZpb2xhdGlvbgogCSAqLwogCi0JU0NUUF9FUlJPUl9SRVNUQVJUICAgICAgICAgPSBfX2NvbnN0YW50X2h0b25zKDB4MGIpLAotCVNDVFBfRVJST1JfVVNFUl9BQk9SVCAgICAgID0gX19jb25zdGFudF9odG9ucygweDBjKSwKLQlTQ1RQX0VSUk9SX1BST1RPX1ZJT0xBVElPTiA9IF9fY29uc3RhbnRfaHRvbnMoMHgwZCksCisJU0NUUF9FUlJPUl9SRVNUQVJUICAgICAgICAgPSBjcHVfdG9fYmUxNigweDBiKSwKKwlTQ1RQX0VSUk9SX1VTRVJfQUJPUlQgICAgICA9IGNwdV90b19iZTE2KDB4MGMpLAorCVNDVFBfRVJST1JfUFJPVE9fVklPTEFUSU9OID0gY3B1X3RvX2JlMTYoMHgwZCksCiAKIAkvKiBBRERJUCBTZWN0aW9uIDMuMyAgTmV3IEVycm9yIENhdXNlcwogCSAqCkBAIC00OTMsMTEgKzQ5MywxMSBAQAogCSAqIDB4MDEwMyAgICAgICAgICBBc3NvY2lhdGlvbiBBYm9ydGVkIGR1ZSB0byBpbGxlZ2FsIEFTQ09ORi1BQ0sKIAkgKiAweDAxMDQgICAgICAgICAgUmVxdWVzdCByZWZ1c2VkIC0gbm8gYXV0aG9yaXphdGlvbi4KIAkgKi8KLQlTQ1RQX0VSUk9SX0RFTF9MQVNUX0lQCT0gX19jb25zdGFudF9odG9ucygweDAxMDApLAotCVNDVFBfRVJST1JfUlNSQ19MT1cJPSBfX2NvbnN0YW50X2h0b25zKDB4MDEwMSksCi0JU0NUUF9FUlJPUl9ERUxfU1JDX0lQCT0gX19jb25zdGFudF9odG9ucygweDAxMDIpLAotCVNDVFBfRVJST1JfQVNDT05GX0FDSyAgID0gX19jb25zdGFudF9odG9ucygweDAxMDMpLAotCVNDVFBfRVJST1JfUkVRX1JFRlVTRUQJPSBfX2NvbnN0YW50X2h0b25zKDB4MDEwNCksCisJU0NUUF9FUlJPUl9ERUxfTEFTVF9JUAk9IGNwdV90b19iZTE2KDB4MDEwMCksCisJU0NUUF9FUlJPUl9SU1JDX0xPVwk9IGNwdV90b19iZTE2KDB4MDEwMSksCisJU0NUUF9FUlJPUl9ERUxfU1JDX0lQCT0gY3B1X3RvX2JlMTYoMHgwMTAyKSwKKwlTQ1RQX0VSUk9SX0FTQ09ORl9BQ0sgICA9IGNwdV90b19iZTE2KDB4MDEwMyksCisJU0NUUF9FUlJPUl9SRVFfUkVGVVNFRAk9IGNwdV90b19iZTE2KDB4MDEwNCksCiAKIAkvKiBBVVRIIFNlY3Rpb24gNC4gIE5ldyBFcnJvciBDYXVzZQogCSAqCkBAIC01MDksNyArNTA5LDcgQEAKIAkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCSAqIDB4MDEwNSAgICAgICAgICBVbnN1cHBvcnRlZCBITUFDIElkZW50aWZpZXIKIAkgKi8KLQkgU0NUUF9FUlJPUl9VTlNVUF9ITUFDCT0gX19jb25zdGFudF9odG9ucygweDAxMDUpCisJIFNDVFBfRVJST1JfVU5TVVBfSE1BQwk9IGNwdV90b19iZTE2KDB4MDEwNSkKIH0gc2N0cF9lcnJvcl90OwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VsaW51eF9uZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3NlbGludXhfbmV0bGluay5oCmluZGV4IGJiZjQ4OWQuLmQyMzk3OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VsaW51eF9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWxpbnV4X25ldGxpbmsuaApAQCAtMTIsNiArMTIsOCBAQAogI2lmbmRlZiBfTElOVVhfU0VMSU5VWF9ORVRMSU5LX0gKICNkZWZpbmUgX0xJTlVYX1NFTElOVVhfTkVUTElOS19ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKiBNZXNzYWdlIHR5cGVzLiAqLwogI2RlZmluZSBTRUxOTF9NU0dfQkFTRSAweDEwCiBlbnVtIHsKQEAgLTM4LDExICs0MCwxMSBAQAogCiAvKiBNZXNzYWdlIHN0cnVjdHVyZXMgKi8KIHN0cnVjdCBzZWxubF9tc2dfc2V0ZW5mb3JjZSB7Ci0JaW50MzJfdAkJdmFsOworCV9fczMyCQl2YWw7CiB9OwogCiBzdHJ1Y3Qgc2VsbmxfbXNnX3BvbGljeWxvYWQgewotCXVfaW50MzJfdAlzZXFubzsKKwlfX3UzMglzZXFubzsKIH07CiAKICNlbmRpZiAvKiBfTElOVVhfU0VMSU5VWF9ORVRMSU5LX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2hfY210LmggYi9pbmNsdWRlL2xpbnV4L3NoX2NtdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2FjZGUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NoX2NtdC5oCkBAIC0wLDAgKzEsMTMgQEAKKyNpZm5kZWYgX19TSF9DTVRfSF9fCisjZGVmaW5lIF9fU0hfQ01UX0hfXworCitzdHJ1Y3Qgc2hfY210X2NvbmZpZyB7CisJY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBsb25nIGNoYW5uZWxfb2Zmc2V0OworCWludCB0aW1lcl9iaXQ7CisJY2hhciAqY2xrOworCXVuc2lnbmVkIGxvbmcgY2xvY2tldmVudF9yYXRpbmc7CisJdW5zaWduZWQgbG9uZyBjbG9ja3NvdXJjZV9yYXRpbmc7Cit9OworCisjZW5kaWYgLyogX19TSF9DTVRfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NoX2ludGMuaCBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCmluZGV4IDY4ZTIxMmYuLmViMTQyM2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvc2hfaW50Yy5oCkBAIC04NSw2ICs4NSw3IEBACiB9CiAjZW5kaWYKIAordW5zaWduZWQgaW50IGludGNfZXZ0MmlycSh1bnNpZ25lZCBpbnQgdmVjdG9yKTsKIHZvaWQgX19pbml0IHJlZ2lzdGVyX2ludGNfY29udHJvbGxlcihzdHJ1Y3QgaW50Y19kZXNjICpkZXNjKTsKIGludCBpbnRjX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpbyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IDlkY2Y5NTYuLmJiMTk4MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMjksOSArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KIAotI2RlZmluZSBIQVZFX0FMTE9DX1NLQgkJLyogRm9yIHRoZSBkcml2ZXJzIHRvIGtub3cgKi8KLSNkZWZpbmUgSEFWRV9BTElHTkFCTEVfU0tCCS8qIERpdHRvIDgpCQkgICAqLwotCiAvKiBEb24ndCBjaGFuZ2UgdGhpcyB3aXRob3V0IGNoYW5naW5nIHNrYl9jc3VtX3VubmVjZXNzYXJ5ISAqLwogI2RlZmluZSBDSEVDS1NVTV9OT05FIDAKICNkZWZpbmUgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgMQpAQCAtMTM1LDYgKzEzMiw1NSBAQAogCV9fdTMyIHNpemU7CiB9OwogCisjZGVmaW5lIEhBVkVfSFdfVElNRV9TVEFNUAorCisvKioKKyAqIHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAtIGhhcmR3YXJlIHRpbWUgc3RhbXBzCisgKiBAaHd0c3RhbXA6CWhhcmR3YXJlIHRpbWUgc3RhbXAgdHJhbnNmb3JtZWQgaW50byBkdXJhdGlvbgorICoJCXNpbmNlIGFyYml0cmFyeSBwb2ludCBpbiB0aW1lCisgKiBAc3lzdHN0YW1wOglod3RzdGFtcCB0cmFuc2Zvcm1lZCB0byBzeXN0ZW0gdGltZSBiYXNlCisgKgorICogU29mdHdhcmUgdGltZSBzdGFtcHMgZ2VuZXJhdGVkIGJ5IGt0aW1lX2dldF9yZWFsKCkgYXJlIHN0b3JlZCBpbgorICogc2tiLT50c3RhbXAuIFRoZSByZWxhdGlvbiBiZXR3ZWVuIHRoZSBkaWZmZXJlbnQga2luZHMgb2YgdGltZQorICogc3RhbXBzIGlzIGFzIGZvbGxvd3M6CisgKgorICogc3lzdHN0YW1wIGFuZCB0c3RhbXAgY2FuIGJlIGNvbXBhcmVkIGFnYWluc3QgZWFjaCBvdGhlciBpbgorICogYXJiaXRyYXJ5IGNvbWJpbmF0aW9ucy4gIFRoZSBhY2N1cmFjeSBvZiBhCisgKiBzeXN0c3RhbXAvdHN0YW1wLyJzeXN0c3RhbXAgZnJvbSBvdGhlciBkZXZpY2UiIGNvbXBhcmlzb24gaXMKKyAqIGxpbWl0ZWQgYnkgdGhlIGFjY3VyYWN5IG9mIHRoZSB0cmFuc2Zvcm1hdGlvbiBpbnRvIHN5c3RlbSB0aW1lCisgKiBiYXNlLiBUaGlzIGRlcGVuZHMgb24gdGhlIGRldmljZSBkcml2ZXIgYW5kIGl0cyB1bmRlcmx5aW5nCisgKiBoYXJkd2FyZS4KKyAqCisgKiBod3RzdGFtcHMgY2FuIG9ubHkgYmUgY29tcGFyZWQgYWdhaW5zdCBvdGhlciBod3RzdGFtcHMgZnJvbQorICogdGhlIHNhbWUgZGV2aWNlLgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIGF0dGFjaGVkIHRvIHBhY2tldHMgYXMgcGFydCBvZiB0aGUKKyAqICZza2Jfc2hhcmVkX2luZm8uIFVzZSBza2JfaHd0c3RhbXBzKCkgdG8gZ2V0IGEgcG9pbnRlci4KKyAqLworc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHsKKwlrdGltZV90CWh3dHN0YW1wOworCWt0aW1lX3QJc3lzdHN0YW1wOworfTsKKworLyoqCisgKiBzdHJ1Y3Qgc2tiX3NoYXJlZF90eCAtIGluc3RydWN0aW9ucyBmb3IgdGltZSBzdGFtcGluZyBvZiBvdXRnb2luZyBwYWNrZXRzCisgKiBAaGFyZHdhcmU6CQlnZW5lcmF0ZSBoYXJkd2FyZSB0aW1lIHN0YW1wCisgKiBAc29mdHdhcmU6CQlnZW5lcmF0ZSBzb2Z0d2FyZSB0aW1lIHN0YW1wCisgKiBAaW5fcHJvZ3Jlc3M6CWRldmljZSBkcml2ZXIgaXMgZ29pbmcgdG8gcHJvdmlkZQorICoJCQloYXJkd2FyZSB0aW1lIHN0YW1wCisgKgorICogVGhlc2UgZmxhZ3MgYXJlIGF0dGFjaGVkIHRvIHBhY2tldHMgYXMgcGFydCBvZiB0aGUKKyAqICZza2Jfc2hhcmVkX2luZm8uIFVzZSBza2JfdHgoKSB0byBnZXQgYSBwb2ludGVyLgorICovCit1bmlvbiBza2Jfc2hhcmVkX3R4IHsKKwlzdHJ1Y3QgeworCQlfX3U4CWhhcmR3YXJlOjEsCisJCQlzb2Z0d2FyZToxLAorCQkJaW5fcHJvZ3Jlc3M6MTsKKwl9OworCV9fdTggZmxhZ3M7Cit9OworCiAvKiBUaGlzIGRhdGEgaXMgaW52YXJpYW50IGFjcm9zcyBjbG9uZXMgYW5kIGxpdmVzIGF0CiAgKiB0aGUgZW5kIG9mIHRoZSBoZWFkZXIgZGF0YSwgaWUuIGF0IHNrYi0+ZW5kLgogICovCkBAIC0xNDYsMTAgKzE5MiwxMiBAQAogCXVuc2lnbmVkIHNob3J0CWdzb19zZWdzOwogCXVuc2lnbmVkIHNob3J0ICBnc29fdHlwZTsKIAlfX2JlMzIgICAgICAgICAgaXA2X2ZyYWdfaWQ7CisJdW5pb24gc2tiX3NoYXJlZF90eCB0eF9mbGFnczsKICNpZmRlZiBDT05GSUdfSEFTX0RNQQogCXVuc2lnbmVkIGludAludW1fZG1hX21hcHM7CiAjZW5kaWYKIAlzdHJ1Y3Qgc2tfYnVmZgkqZnJhZ19saXN0OworCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyBod3RzdGFtcHM7CiAJc2tiX2ZyYWdfdAlmcmFnc1tNQVhfU0tCX0ZSQUdTXTsKICNpZmRlZiBDT05GSUdfSEFTX0RNQQogCWRtYV9hZGRyX3QJZG1hX21hcHNbTUFYX1NLQl9GUkFHUyArIDFdOwpAQCAtMzczLDYgKzQyMSw3IEBACiAjZW5kaWYKIAogZXh0ZXJuIHZvaWQga2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHZvaWQgY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZAkgICAgICAgX19rZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLAogCQkJCSAgIGdmcF90IHByaW9yaXR5LCBpbnQgZmNsb25lLCBpbnQgbm9kZSk7CkBAIC00MTEsNyArNDYwLDggQEAKIGV4dGVybiBpbnQJICAgICAgIHNrYl9jb3dfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdGFpbGJpdHMsCiAJCQkJICAgIHN0cnVjdCBza19idWZmICoqdHJhaWxlcik7CiBleHRlcm4gaW50CSAgICAgICBza2JfcGFkKHN0cnVjdCBza19idWZmICpza2IsIGludCBwYWQpOwotI2RlZmluZSBkZXZfa2ZyZWVfc2tiKGEpCWtmcmVlX3NrYihhKQorI2RlZmluZSBkZXZfa2ZyZWVfc2tiKGEpCWNvbnN1bWVfc2tiKGEpCisjZGVmaW5lIGRldl9jb25zdW1lX3NrYihhKQlrZnJlZV9za2JfY2xlYW4oYSkKIGV4dGVybiB2b2lkCSAgICAgIHNrYl9vdmVyX3BhbmljKHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4sCiAJCQkJICAgICB2b2lkICpoZXJlKTsKIGV4dGVybiB2b2lkCSAgICAgIHNrYl91bmRlcl9wYW5pYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuLApAQCAtNDU5LDYgKzUwOSwxNiBAQAogLyogSW50ZXJuYWwgKi8KICNkZWZpbmUgc2tiX3NoaW5mbyhTS0IpCSgoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqKShza2JfZW5kX3BvaW50ZXIoU0tCKSkpCiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpza2JfaHd0c3RhbXBzKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuICZza2Jfc2hpbmZvKHNrYiktPmh3dHN0YW1wczsKK30KKworc3RhdGljIGlubGluZSB1bmlvbiBza2Jfc2hhcmVkX3R4ICpza2JfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gJnNrYl9zaGluZm8oc2tiKS0+dHhfZmxhZ3M7Cit9CisKIC8qKgogICoJc2tiX3F1ZXVlX2VtcHR5IC0gY2hlY2sgaWYgYSBxdWV1ZSBpcyBlbXB0eQogICoJQGxpc3Q6IHF1ZXVlIGhlYWQKQEAgLTEyNzgsNyArMTMzOCw3IEBACiAgKiBUaGUgbmV0d29ya2luZyBsYXllciByZXNlcnZlcyBzb21lIGhlYWRyb29tIGluIHNrYiBkYXRhICh2aWEKICAqIGRldl9hbGxvY19za2IpLiBUaGlzIGlzIHVzZWQgdG8gYXZvaWQgaGF2aW5nIHRvIHJlYWxsb2NhdGUgc2tiIGRhdGEgd2hlbgogICogdGhlIGhlYWRlciBoYXMgdG8gZ3Jvdy4gSW4gdGhlIGRlZmF1bHQgY2FzZSwgaWYgdGhlIGhlYWRlciBoYXMgdG8gZ3JvdwotICogMTYgYnl0ZXMgb3IgbGVzcyB3ZSBhdm9pZCB0aGUgcmVhbGxvY2F0aW9uLgorICogMzIgYnl0ZXMgb3IgbGVzcyB3ZSBhdm9pZCB0aGUgcmVhbGxvY2F0aW9uLgogICoKICAqIFVuZm9ydHVuYXRlbHkgdGhpcyBoZWFkcm9vbSBjaGFuZ2VzIHRoZSBETUEgYWxpZ25tZW50IG9mIHRoZSByZXN1bHRpbmcKICAqIG5ldHdvcmsgcGFja2V0LiBBcyBmb3IgTkVUX0lQX0FMSUdOLCB0aGlzIHVuYWxpZ25lZCBETUEgaXMgZXhwZW5zaXZlCkBAIC0xMjg2LDExICsxMzQ2LDExIEBACiAgKiBwZXJoYXBzIHNldHRpbmcgaXQgdG8gYSBjYWNoZWxpbmUgaW4gc2l6ZSAoc2luY2UgdGhhdCB3aWxsIG1haW50YWluCiAgKiBjYWNoZWxpbmUgYWxpZ25tZW50IG9mIHRoZSBETUEpLiBJdCBtdXN0IGJlIGEgcG93ZXIgb2YgMi4KICAqCi0gKiBWYXJpb3VzIHBhcnRzIG9mIHRoZSBuZXR3b3JraW5nIGxheWVyIGV4cGVjdCBhdCBsZWFzdCAxNiBieXRlcyBvZgorICogVmFyaW91cyBwYXJ0cyBvZiB0aGUgbmV0d29ya2luZyBsYXllciBleHBlY3QgYXQgbGVhc3QgMzIgYnl0ZXMgb2YKICAqIGhlYWRyb29tLCB5b3Ugc2hvdWxkIG5vdCByZWR1Y2UgdGhpcy4KICAqLwogI2lmbmRlZiBORVRfU0tCX1BBRAotI2RlZmluZSBORVRfU0tCX1BBRAkxNgorI2RlZmluZSBORVRfU0tCX1BBRAkzMgogI2VuZGlmCiAKIGV4dGVybiBpbnQgX19fcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pOwpAQCAtMTY3OCw4ICsxNzM4LDYgQEAKIAkJCQkgaW50IHNoaWZ0bGVuKTsKIAogZXh0ZXJuIHN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZmVhdHVyZXMpOwotZXh0ZXJuIGludAkgICAgICAgc2tiX2dyb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqaGVhZCwKLQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqc2tiX2hlYWRlcl9wb2ludGVyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsCiAJCQkJICAgICAgIGludCBsZW4sIHZvaWQgKmJ1ZmZlcikKQEAgLTE3MjYsNiArMTc4NCwxMSBAQAogCiBleHRlcm4gdm9pZCBza2JfaW5pdCh2b2lkKTsKIAorc3RhdGljIGlubGluZSBrdGltZV90IHNrYl9nZXRfa3RpbWUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT50c3RhbXA7Cit9CisKIC8qKgogICoJc2tiX2dldF90aW1lc3RhbXAgLSBnZXQgdGltZXN0YW1wIGZyb20gYSBza2IKICAqCUBza2I6IHNrYiB0byBnZXQgc3RhbXAgZnJvbQpAQCAtMTczNSwxMSArMTc5OCwxOCBAQAogICoJVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgb2Zmc2V0IGJhY2sgdG8gYSBzdHJ1Y3QgdGltZXZhbCBhbmQgc3RvcmVzCiAgKglpdCBpbiBzdGFtcC4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHNrYl9nZXRfdGltZXN0YW1wKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aW1ldmFsICpzdGFtcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBza2JfZ2V0X3RpbWVzdGFtcChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IHRpbWV2YWwgKnN0YW1wKQogewogCSpzdGFtcCA9IGt0aW1lX3RvX3RpbWV2YWwoc2tiLT50c3RhbXApOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX2dldF90aW1lc3RhbXBucyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKnN0YW1wKQoreworCSpzdGFtcCA9IGt0aW1lX3RvX3RpbWVzcGVjKHNrYi0+dHN0YW1wKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIF9fbmV0X3RpbWVzdGFtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXNrYi0+dHN0YW1wID0ga3RpbWVfZ2V0X3JlYWwoKTsKQEAgLTE3NTUsNiArMTgyNSwyMCBAQAogCXJldHVybiBrdGltZV9zZXQoMCwgMCk7CiB9CiAKKy8qKgorICogc2tiX3RzdGFtcF90eCAtIHF1ZXVlIGNsb25lIG9mIHNrYiB3aXRoIHNlbmQgdGltZSBzdGFtcHMKKyAqIEBvcmlnX3NrYjoJdGhlIG9yaWdpbmFsIG91dGdvaW5nIHBhY2tldAorICogQGh3dHN0YW1wczoJaGFyZHdhcmUgdGltZSBzdGFtcHMsIG1heSBiZSBOVUxMIGlmIG5vdCBhdmFpbGFibGUKKyAqCisgKiBJZiB0aGUgc2tiIGhhcyBhIHNvY2tldCBhc3NvY2lhdGVkLCB0aGVuIHRoaXMgZnVuY3Rpb24gY2xvbmVzIHRoZQorICogc2tiICh0aHVzIHNoYXJpbmcgdGhlIGFjdHVhbCBkYXRhIGFuZCBvcHRpb25hbCBzdHJ1Y3R1cmVzKSwgc3RvcmVzCisgKiB0aGUgb3B0aW9uYWwgaGFyZHdhcmUgdGltZSBzdGFtcGluZyBpbmZvcm1hdGlvbiAoaWYgbm9uIE5VTEwpIG9yCisgKiBnZW5lcmF0ZXMgYSBzb2Z0d2FyZSB0aW1lIHN0YW1wIChvdGhlcndpc2UpLCB0aGVuIHF1ZXVlcyB0aGUgY2xvbmUKKyAqIHRvIHRoZSBlcnJvciBxdWV1ZSBvZiB0aGUgc29ja2V0LiAgRXJyb3JzIGFyZSBzaWxlbnRseSBpZ25vcmVkLgorICovCitleHRlcm4gdm9pZCBza2JfdHN0YW1wX3R4KHN0cnVjdCBza19idWZmICpvcmlnX3NrYiwKKwkJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHd0c3RhbXBzKTsKKwogZXh0ZXJuIF9fc3VtMTYgX19za2JfY2hlY2tzdW1fY29tcGxldGVfaGVhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKTsKIGV4dGVybiBfX3N1bTE2IF9fc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IpOwogCkBAIC0xODg1LDcgKzE5NjksNyBAQAogCXNrYi0+cXVldWVfbWFwcGluZyA9IHF1ZXVlX21hcHBpbmc7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IHNrYl9nZXRfcXVldWVfbWFwcGluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSB1MTYgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJcmV0dXJuIHNrYi0+cXVldWVfbWFwcGluZzsKIH0KQEAgLTE4OTUsNiArMTk3OSwyNCBAQAogCXRvLT5xdWV1ZV9tYXBwaW5nID0gZnJvbS0+cXVldWVfbWFwcGluZzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNrYl9yZWNvcmRfcnhfcXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTE2IHJ4X3F1ZXVlKQoreworCXNrYi0+cXVldWVfbWFwcGluZyA9IHJ4X3F1ZXVlICsgMTsKK30KKworc3RhdGljIGlubGluZSB1MTYgc2tiX2dldF9yeF9xdWV1ZShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBza2ItPnF1ZXVlX21hcHBpbmcgLSAxOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3J4X3F1ZXVlX3JlY29yZGVkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIChza2ItPnF1ZXVlX21hcHBpbmcgIT0gMCk7Cit9CisKK2V4dGVybiB1MTYgc2tiX3R4X2hhc2goY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOworCiAjaWZkZWYgQ09ORklHX1hGUk0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNlY19wYXRoICpza2Jfc2VjX3BhdGgoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaCBiL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAppbmRleCAyZjVjMTZiLi5lMzdiNmFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCkBAIC00Niw3ICs0Niw2IEBACiBzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlIHsKIAlzcGlubG9ja190IGxpc3RfbG9jazsJLyogUHJvdGVjdCBwYXJ0aWFsIGxpc3QgYW5kIG5yX3BhcnRpYWwgKi8KIAl1bnNpZ25lZCBsb25nIG5yX3BhcnRpYWw7Ci0JdW5zaWduZWQgbG9uZyBtaW5fcGFydGlhbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHBhcnRpYWw7CiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKIAlhdG9taWNfbG9uZ190IG5yX3NsYWJzOwpAQCAtODksNiArODgsNyBAQAogCXZvaWQgKCpjdG9yKSh2b2lkICopOwogCWludCBpbnVzZTsJCS8qIE9mZnNldCB0byBtZXRhZGF0YSAqLwogCWludCBhbGlnbjsJCS8qIEFsaWdubWVudCAqLworCXVuc2lnbmVkIGxvbmcgbWluX3BhcnRpYWw7CiAJY29uc3QgY2hhciAqbmFtZTsJLyogTmFtZSAob25seSBmb3IgZGlzcGxheSEpICovCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBMaXN0IG9mIHNsYWIgY2FjaGVzICovCiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKQEAgLTEyMSwxMCArMTIxLDIzIEBACiAjZGVmaW5lIEtNQUxMT0NfU0hJRlRfTE9XIGlsb2cyKEtNQUxMT0NfTUlOX1NJWkUpCiAKIC8qCisgKiBNYXhpbXVtIGttYWxsb2Mgb2JqZWN0IHNpemUgaGFuZGxlZCBieSBTTFVCLiBMYXJnZXIgb2JqZWN0IGFsbG9jYXRpb25zCisgKiBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlIHBhZ2UgYWxsb2NhdG9yLiBUaGUgcGFnZSBhbGxvY2F0b3IgImZhc3RwYXRoIgorICogaXMgcmVsYXRpdmVseSBzbG93IHNvIHdlIG5lZWQgdGhpcyB2YWx1ZSBzdWZmaWNpZW50bHkgaGlnaCBzbyB0aGF0CisgKiBwZXJmb3JtYW5jZSBjcml0aWNhbCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgdGhyb3VnaCB0aGUgU0xVQiBmYXN0cGF0aC4KKyAqCisgKiBUaGlzIHNob3VsZCBiZSBkcm9wcGVkIHRvIFBBR0VfU0laRSAvIDIgb25jZSB0aGUgcGFnZSBhbGxvY2F0b3IKKyAqICJmYXN0cGF0aCIgYmVjb21lcyBjb21wZXRpdGl2ZSB3aXRoIHRoZSBzbGFiIGFsbG9jYXRvciBmYXN0cGF0aHMuCisgKi8KKyNkZWZpbmUgU0xVQl9NQVhfU0laRSAoMiAqIFBBR0VfU0laRSkKKworI2RlZmluZSBTTFVCX1BBR0VfU0hJRlQgKFBBR0VfU0hJRlQgKyAyKQorCisvKgogICogV2Uga2VlcCB0aGUgZ2VuZXJhbCBjYWNoZXMgaW4gYW4gYXJyYXkgb2Ygc2xhYiBjYWNoZXMgdGhhdCBhcmUgdXNlZCBmb3IKICAqIDJeeCBieXRlcyBvZiBhbGxvY2F0aW9ucy4KICAqLwotZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlIGttYWxsb2NfY2FjaGVzW1BBR0VfU0hJRlQgKyAxXTsKK2V4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSBrbWFsbG9jX2NhY2hlc1tTTFVCX1BBR0VfU0hJRlRdOwogCiAvKgogICogU29ycnkgdGhhdCB0aGUgZm9sbG93aW5nIGhhcyB0byBiZSB0aGF0IHVnbHkgYnV0IHNvbWUgdmVyc2lvbnMgb2YgR0NDCkBAIC0yMTIsNyArMjI1LDcgQEAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqa21hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpKSB7Ci0JCWlmIChzaXplID4gUEFHRV9TSVpFKQorCQlpZiAoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpCiAJCQlyZXR1cm4ga21hbGxvY19sYXJnZShzaXplLCBmbGFncyk7CiAKIAkJaWYgKCEoZmxhZ3MgJiBTTFVCX0RNQSkpIHsKQEAgLTIzNCw3ICsyNDcsNyBAQAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICprbWFsbG9jX25vZGUoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSkKIHsKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkgJiYKLQkJc2l6ZSA8PSBQQUdFX1NJWkUgJiYgIShmbGFncyAmIFNMVUJfRE1BKSkgeworCQlzaXplIDw9IFNMVUJfTUFYX1NJWkUgJiYgIShmbGFncyAmIFNMVUJfRE1BKSkgewogCQkJc3RydWN0IGttZW1fY2FjaGUgKnMgPSBrbWFsbG9jX3NsYWIoc2l6ZSk7CiAKIAkJaWYgKCFzKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oIGIvaW5jbHVkZS9saW51eC9zbXNjOTExeC5oCmluZGV4IDFjYmYwMzEuLmIzMjcyNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21zYzkxMXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3Ntc2M5MTF4LmgKQEAgLTQzLDUgKzQzLDggQEAKIC8qIENvbnN0YW50cyBmb3IgZmxhZ3MgKi8KICNkZWZpbmUgU01TQzkxMVhfVVNFXzE2QklUIAkJCShCSVQoMCkpCiAjZGVmaW5lIFNNU0M5MTFYX1VTRV8zMkJJVCAJCQkoQklUKDEpKQorI2RlZmluZSBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkJCShCSVQoMikpCisjZGVmaW5lIFNNU0M5MTFYX0ZPUkNFX0VYVEVSTkFMX1BIWSAJCShCSVQoMykpCisjZGVmaW5lIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MJCShCSVQoNCkpCiAKICNlbmRpZiAvKiBfX0xJTlVYX1NNU0M5MTFYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKaW5kZXggMjBmYzRiYi4uNDIxYWZiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCkBAIC0yNCwxMCArMjQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgkJLyogcGlkX3QJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CQkvKiBfX3VzZXIJCQkqLwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKKyNpZmRlZiBfX0tFUk5FTF9fCisjIGlmZGVmIENPTkZJR19QUk9DX0ZTCiBzdHJ1Y3Qgc2VxX2ZpbGU7CiBleHRlcm4gdm9pZCBzb2NrZXRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEpOwotI2VuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0CXNhX2ZhbWlseV90OwogCkBAIC0xNzksNiArMTgxLDcgQEAKICNkZWZpbmUgQUZfQVNICQkxOAkvKiBBc2gJCQkJKi8KICNkZWZpbmUgQUZfRUNPTkVUCTE5CS8qIEFjb3JuIEVjb25ldAkJCSovCiAjZGVmaW5lIEFGX0FUTVNWQwkyMAkvKiBBVE0gU1ZDcwkJCSovCisjZGVmaW5lIEFGX1JEUwkJMjEJLyogUkRTIHNvY2tldHMgCQkJKi8KICNkZWZpbmUgQUZfU05BCQkyMgkvKiBMaW51eCBTTkEgUHJvamVjdCAobnV0dGVycyEpICovCiAjZGVmaW5lIEFGX0lSREEJCTIzCS8qIElSREEgc29ja2V0cwkJCSovCiAjZGVmaW5lIEFGX1BQUE9YCTI0CS8qIFBQUG9YIHNvY2tldHMJCSovCkBAIC0yMTcsNiArMjIwLDcgQEAKICNkZWZpbmUgUEZfQVNICQlBRl9BU0gKICNkZWZpbmUgUEZfRUNPTkVUCUFGX0VDT05FVAogI2RlZmluZSBQRl9BVE1TVkMJQUZfQVRNU1ZDCisjZGVmaW5lIFBGX1JEUwkJQUZfUkRTCiAjZGVmaW5lIFBGX1NOQQkJQUZfU05BCiAjZGVmaW5lIFBGX0lSREEJCUFGX0lSREEKICNkZWZpbmUgUEZfUFBQT1gJQUZfUFBQT1gKQEAgLTI5OCw2ICszMDIsNyBAQAogI2RlZmluZSBTT0xfUFBQT0wyVFAJMjczCiAjZGVmaW5lIFNPTF9CTFVFVE9PVEgJMjc0CiAjZGVmaW5lIFNPTF9QTlBJUEUJMjc1CisjZGVmaW5lIFNPTF9SRFMJCTI3NgogCiAvKiBJUFggb3B0aW9ucyAqLwogI2RlZmluZSBJUFhfVFlQRQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tpb3MuaCBiL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCmluZGV4IGFiZWY3NTkuLjI0MWYxNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ja2lvcy5oCkBAIC0xMjIsNiArMTIyLDkgQEAKICNkZWZpbmUgU0lPQ0JSQURESUYJMHg4OWEyCQkvKiBhZGQgaW50ZXJmYWNlIHRvIGJyaWRnZSAgICAgICovCiAjZGVmaW5lIFNJT0NCUkRFTElGCTB4ODlhMwkJLyogcmVtb3ZlIGludGVyZmFjZSBmcm9tIGJyaWRnZSAqLwogCisvKiBoYXJkd2FyZSB0aW1lIHN0YW1waW5nOiBwYXJhbWV0ZXJzIGluIGxpbnV4L25ldF90c3RhbXAuaCAqLworI2RlZmluZSBTSU9DU0hXVFNUQU1QICAgMHg4OWIwCisKIC8qIERldmljZSBwcml2YXRlIGlvY3RsIGNhbGxzICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9saWJlcnRhc19zcGkuaCBiL2luY2x1ZGUvbGludXgvc3BpL2xpYmVydGFzX3NwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NTA2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9saWJlcnRhc19zcGkuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogYm9hcmQtc3BlY2lmaWMgZGF0YSBmb3IgdGhlIGxpYmVydGFzX3NwaSBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IDIwMDggQW5hbG9nIERldmljZXMgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX0xJQkVSVEFTX1NQSV9IXworI2RlZmluZSBfTElCRVJUQVNfU1BJX0hfCisKK3N0cnVjdCBzcGlfZGV2aWNlOworCitzdHJ1Y3QgbGliZXJ0YXNfc3BpX3BsYXRmb3JtX2RhdGEgeworCS8qIFRoZXJlIGFyZSB0d28gd2F5cyB0byByZWFkIGRhdGEgZnJvbSB0aGUgV0xBTiBtb2R1bGUncyBTUEkKKwkgKiBpbnRlcmZhY2UuIFNldHRpbmcgMCBvciAxIGhlcmUgY29udHJvbHMgd2hpY2ggb25lIGlzIHVzZWQuCisJICoKKwkgKiBVc3VhbGx5IHlvdSB3YW50IHRvIHNldCB1c2VfZHVtbXlfd3JpdGVzID0gMS4KKwkgKiBIb3dldmVyLCBpZiB0aGF0IGRvZXNuJ3Qgd29yayBvciBpZiB5b3UgYXJlIHVzaW5nIGEgc2xvdyBTUEkgY2xvY2sKKwkgKiBzcGVlZCwgeW91IG1heSB3YW50IHRvIHVzZSAwIGhlcmUuICovCisJdTE2IHVzZV9kdW1teV93cml0ZXM7CisKKwkvKiBHUElPIG51bWJlciB0byB1c2UgYXMgY2hpcCBzZWxlY3QgKi8KKwl1MTYgZ3Bpb19jczsKKworCS8qIEJvYXJkIHNwZWNpZmljIHNldHVwL3RlYXJkb3duICovCisJaW50ICgqc2V0dXApKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpOworCWludCAoKnRlYXJkb3duKShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKTsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKaW5kZXggMTdkOWI1OC4uNWFlOGZhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiLmgKQEAgLTMzOSw2ICszMzksMTAgQEAKIAogZXh0ZXJuIHZvaWQgc3NiX2J1c191bnJlZ2lzdGVyKHN0cnVjdCBzc2JfYnVzICpidXMpOwogCisvKiBTZXQgYSBmYWxsYmFjayBTUFJPTS4KKyAqIFNlZSBrZG9jIGF0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGZvciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLiAqLworZXh0ZXJuIGludCBzc2JfYXJjaF9zZXRfZmFsbGJhY2tfc3Byb20oY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqc3Byb20pOworCiAvKiBTdXNwZW5kIGEgU1NCIGJ1cy4KICAqIENhbGwgdGhpcyBmcm9tIHRoZSBwYXJlbnQgYnVzIHN1c3BlbmQgcm91dGluZS4gKi8KIGV4dGVybiBpbnQgc3NiX2J1c19zdXNwZW5kKHN0cnVjdCBzc2JfYnVzICpidXMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX2RyaXZlcl9jaGlwY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaAppbmRleCA3ZDdlMDNkLi5kM2IxZDE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfZHJpdmVyX2NoaXBjb21tb24uaApAQCAtMTgxLDYgKzE4MSwxNiBAQAogI2RlZmluZSBTU0JfQ0hJUENPX1BST0dfV0FJVENOVAkJMHgwMTI0CiAjZGVmaW5lIFNTQl9DSElQQ09fRkxBU0hfQ0ZHCQkweDAxMjgKICNkZWZpbmUgU1NCX0NISVBDT19GTEFTSF9XQUlUQ05UCTB4MDEyQworI2RlZmluZSBTU0JfQ0hJUENPX0NMS0NUTFNUCQkweDAxRTAgLyogQ2xvY2sgY29udHJvbCBhbmQgc3RhdHVzIChyZXYgPj0gMjApICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0ZPUkNFQUxQCTB4MDAwMDAwMDEgLyogRm9yY2UgQUxQIHJlcXVlc3QgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfRk9SQ0VIVAkweDAwMDAwMDAyIC8qIEZvcmNlIEhUIHJlcXVlc3QgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfRk9SQ0VJTFAJMHgwMDAwMDAwNCAvKiBGb3JjZSBJTFAgcmVxdWVzdCAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFQUxQUkVRCTB4MDAwMDAwMDggLyogQUxQIGF2YWlsYWJsZSByZXF1ZXN0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hBVkVIVFJFUQkweDAwMDAwMDEwIC8qIEhUIGF2YWlsYWJsZSByZXF1ZXN0ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX0NMS0NUTFNUX0hXQ1JPRkYJMHgwMDAwMDAyMCAvKiBGb3JjZSBIVyBjbG9jayByZXF1ZXN0IG9mZiAqLworI2RlZmluZSAgU1NCX0NISVBDT19DTEtDVExTVF9IQVZFSFQJMHgwMDAxMDAwMCAvKiBIVCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fQ0xLQ1RMU1RfSEFWRUFMUAkweDAwMDIwMDAwIC8qIEFQTCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19IV19XT1JLQVJPVU5ECTB4MDFFNCAvKiBIYXJkd2FyZSB3b3JrYXJvdW5kIChyZXYgPj0gMjApICovCiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDBfREFUQQkJMHgwMzAwCiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDBfSU1SCQkweDAzMDQKICNkZWZpbmUgU1NCX0NISVBDT19VQVJUMF9GQ1IJCTB4MDMwOApAQCAtMTk3LDYgKzIwNywxOTYgQEAKICNkZWZpbmUgU1NCX0NISVBDT19VQVJUMV9MU1IJCTB4MDQxNAogI2RlZmluZSBTU0JfQ0hJUENPX1VBUlQxX01TUgkJMHgwNDE4CiAjZGVmaW5lIFNTQl9DSElQQ09fVUFSVDFfU0NSQVRDSAkweDA0MUMKKy8qIFBNVSByZWdpc3RlcnMgKHJldiA+PSAyMCkgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfQ1RMCQkJMHgwNjAwIC8qIFBNVSBjb250cm9sICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfSUxQX0RJVgkJMHhGRkZGMDAwMCAvKiBJTFAgZGl2IG1hc2sgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9JTFBfRElWX1NISUZUCTE2CisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DVExfTk9JTFBPTlcJCTB4MDAwMDAyMDAgLyogTm8gSUxQIG9uIHdhaXQgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9IVFJFUUVOCQkweDAwMDAwMTAwIC8qIEhUIHJlcSBlbmFibGUgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9BTFBSRVFFTgkJMHgwMDAwMDA4MCAvKiBBTFAgcmVxIGVuYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRCQkweDAwMDAwMDdDIC8qIENyeXN0YWwgZnJlcSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX1hUQUxGUkVRX1NISUZUCTIKKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX0NUTF9JTFBESVZFTgkJMHgwMDAwMDAwMiAvKiBJTFAgZGl2IGVuYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfQ1RMX0xQT1NFTAkJMHgwMDAwMDAwMSAvKiBMUE8gc2VsICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX0NBUAkJCTB4MDYwNCAvKiBQTVUgY2FwYWJpbGl0aWVzICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9DQVBfUkVWSVNJT04JCTB4MDAwMDAwRkYgLyogUmV2aXNpb24gbWFzayAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9TVEFUCQkJMHgwNjA4IC8qIFBNVSBzdGF0dXMgKi8KKyNkZWZpbmUgIFNTQl9DSElQQ09fUE1VX1NUQVRfSU5UUEVORAkJMHgwMDAwMDA0MCAvKiBJbnRlcnJ1cHQgcGVuZGluZyAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfU1RBVF9TQkNMS1NUCQkweDAwMDAwMDMwIC8qIEJhY2twbGFuZSBjbG9jayBzdGF0dXM/ICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9TVEFUX0hBVkVBTFAJCTB4MDAwMDAwMDggLyogQUxQIGF2YWlsYWJsZSAqLworI2RlZmluZSAgU1NCX0NISVBDT19QTVVfU1RBVF9IQVZFSFQJCTB4MDAwMDAwMDQgLyogSFQgYXZhaWxhYmxlICovCisjZGVmaW5lICBTU0JfQ0hJUENPX1BNVV9TVEFUX1JFU0lOSVQJCTB4MDAwMDAwMDMgLyogUmVzIGluaXQgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1NUQVQJCQkweDA2MEMgLyogUE1VIHJlcyBzdGF0dXMgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1BFTkQJCQkweDA2MTAgLyogUE1VIHJlcyBwZW5kaW5nICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1RJTUVSCQkJMHgwNjE0IC8qIFBNVSB0aW1lciAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9NSU5SRVNfTVNLCQkweDA2MTggLyogUE1VIG1pbiByZXMgbWFzayAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9NQVhSRVNfTVNLCQkweDA2MUMgLyogUE1VIG1heCByZXMgbWFzayAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfVEFCU0VMCQkweDA2MjAgLyogUE1VIHJlcyB0YWJsZSBzZWwgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX0RFUE1TSwkJMHgwNjI0IC8qIFBNVSByZXMgZGVwIG1hc2sgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfUkVTX1VQRE5UTQkJMHgwNjI4IC8qIFBNVSByZXMgdXBkb3duIHRpbWVyICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19USU1FUgkJMHgwNjJDIC8qIFBNVSByZXMgdGltZXIgKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfQ0xLU1RSRVRDSAkJMHgwNjMwIC8qIFBNVSBjbG9ja3N0cmV0Y2ggKi8KKyNkZWZpbmUgU1NCX0NISVBDT19QTVVfV0FUQ0hET0cJCQkweDA2MzQgLyogUE1VIHdhdGNoZG9nICovCisjZGVmaW5lIFNTQl9DSElQQ09fUE1VX1JFU19SRVFUUwkJMHgwNjQwIC8qIFBNVSByZXMgcmVxIHRpbWVyIHNlbCAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfUkVRVAkJCTB4MDY0NCAvKiBQTVUgcmVzIHJlcSB0aW1lciAqLworI2RlZmluZSBTU0JfQ0hJUENPX1BNVV9SRVNfUkVRTQkJCTB4MDY0OCAvKiBQTVUgcmVzIHJlcSBtYXNrICovCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hJUENUTF9BRERSCQkJMHgwNjUwCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hJUENUTF9EQVRBCQkJMHgwNjU0CisjZGVmaW5lIFNTQl9DSElQQ09fUkVHQ1RMX0FERFIJCQkweDA2NTgKKyNkZWZpbmUgU1NCX0NISVBDT19SRUdDVExfREFUQQkJCTB4MDY1QworI2RlZmluZSBTU0JfQ0hJUENPX1BMTENUTF9BRERSCQkJMHgwNjYwCisjZGVmaW5lIFNTQl9DSElQQ09fUExMQ1RMX0RBVEEJCQkweDA2NjQKKworCisKKy8qKiBQTVUgUExMIHJlZ2lzdGVycyAqLworCisvKiBQTVUgcmV2IDAgUExMIHJlZ2lzdGVycyAqLworI2RlZmluZSBTU0JfUE1VMF9QTExDVEwwCQkJMAorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMF9QRElWX01TSwkJMHgwMDAwMDAwMQorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMF9QRElWX0ZSRVEJCTI1MDAwIC8qIGtIeiAqLworI2RlZmluZSBTU0JfUE1VMF9QTExDVEwxCQkJMQorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0lNU0sJCTB4RjAwMDAwMDAgLyogV2lsZCBpbnQgbWFzayAobG93IG5pYmJsZSkgKi8KKyNkZWZpbmUgIFNTQl9QTVUwX1BMTENUTDFfV0lMRF9JTVNLX1NISUZUCTI4CisjZGVmaW5lICBTU0JfUE1VMF9QTExDVEwxX1dJTERfRk1TSwkJMHgwRkZGRkYwMCAvKiBXaWxkIGZyYWMgbWFzayAqLworI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMV9XSUxEX0ZNU0tfU0hJRlQJOAorI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMV9TVE9QTU9ECQkweDAwMDAwMDQwIC8qIFN0b3AgbW9kICovCisjZGVmaW5lIFNTQl9QTVUwX1BMTENUTDIJCQkyCisjZGVmaW5lICBTU0JfUE1VMF9QTExDVEwyX1dJTERfSU1TS0hJCQkweDAwMDAwMDBGIC8qIFdpbGQgaW50IG1hc2sgKGhpZ2ggbmliYmxlKSAqLworI2RlZmluZSAgU1NCX1BNVTBfUExMQ1RMMl9XSUxEX0lNU0tISV9TSElGVAkwCisKKy8qIFBNVSByZXYgMSBQTEwgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDAJCQkwCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwwX1AxRElWCQkJMHgwMEYwMDAwMCAvKiBQMSBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDBfUDFESVZfU0hJRlQJCTIwCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwwX1AyRElWCQkJMHgwRjAwMDAwMCAvKiBQMiBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDBfUDJESVZfU0hJRlQJCTI0CisjZGVmaW5lIFNTQl9QTVUxX1BMTENUTDEJCQkxCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX00xRElWCQkJMHgwMDAwMDBGRiAvKiBNMSBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTFESVZfU0hJRlQJCTAKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDFfTTJESVYJCQkweDAwMDBGRjAwIC8qIE0yIGRpdiAqLworI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NMkRJVl9TSElGVAkJOAorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NM0RJVgkJCTB4MDBGRjAwMDAgLyogTTMgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX00zRElWX1NISUZUCQkxNgorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMV9NNERJVgkJCTB4RkYwMDAwMDAgLyogTTQgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwxX000RElWX1NISUZUCQkyNAorI2RlZmluZSBTU0JfUE1VMV9QTExDVEwyCQkJMgorI2RlZmluZSAgU1NCX1BNVTFfUExMQ1RMMl9NNURJVgkJCTB4MDAwMDAwRkYgLyogTTUgZGl2ICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX001RElWX1NISUZUCQkwCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX002RElWCQkJMHgwMDAwRkYwMCAvKiBNNiBkaXYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDJfTTZESVZfU0hJRlQJCTgKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDJfTkRJVk1PREUJCTB4MDAwRTAwMDAgLyogTkRJViBtb2RlICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX05ESVZNT0RFX1NISUZUCTE3CisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwyX05ESVZJTlQJCTB4MUZGMDAwMDAgLyogTkRJViBpbnQgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDJfTkRJVklOVF9TSElGVAkJMjAKKyNkZWZpbmUgU1NCX1BNVTFfUExMQ1RMMwkJCTMKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDNfTkRJVkZSQUMJCTB4MDBGRkZGRkYgLyogTkRJViBmcmFjICovCisjZGVmaW5lICBTU0JfUE1VMV9QTExDVEwzX05ESVZGUkFDX1NISUZUCTAKKyNkZWZpbmUgU1NCX1BNVTFfUExMQ1RMNAkJCTQKKyNkZWZpbmUgU1NCX1BNVTFfUExMQ1RMNQkJCTUKKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDVfQ0xLRFJWCQkweEZGRkZGRjAwIC8qIGNsayBkcnYgKi8KKyNkZWZpbmUgIFNTQl9QTVUxX1BMTENUTDVfQ0xLRFJWX1NISUZUCQk4CisKKy8qIEJDTTQzMTIgUExMIHJlc291cmNlIG51bWJlcnMuICovCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9TV0lUQ0hFUl9CVVJTVAkJMAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfU1dJVENIRVJfUFdNICAgIAkxCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9QQV9SRUZfTERPCQkyCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9DT1JFX0xET19CVVJTVAkJMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfQ09SRV9MRE9fUFdNCQk0CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9SQURJT19MRE8JCTUKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX0lMUF9SRVFVRVNUCQk2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9CR19GSUxUQllQCQk3CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9UWF9GSUxUQllQCQk4CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9SWF9GSUxUQllQCQk5CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9YVEFMX1BVCQkJMTAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX0FMUF9BVkFJTAkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzEyX0JCX1BMTF9GSUxUQllQCQkxMgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMTJfUkZfUExMX0ZJTFRCWVAJCTEzCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMxMl9IVF9BVkFJTAkJMTQKKworLyogQkNNNDMyNSBQTEwgcmVzb3VyY2UgbnVtYmVycy4gKi8KKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0JVQ0tfQk9PU1RfQlVSU1QJMAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQ0JVQ0tfQlVSU1QJCTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0NCVUNLX1BXTQkJMgorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQ0xET19DQlVDS19CVVJTVAkzCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9DTERPX0NCVUNLX1BXTQkJNAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQlVDS19CT09TVF9QV00JCTUKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0lMUF9SRVFVRVNUCQk2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9BQlVDS19CVVJTVAkJNworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQUJVQ0tfUFdNCQk4CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9MTkxETzFfUFUJCTkKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0xOTERPMl9QVQkJMTAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0xOTERPM19QVQkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0xOTERPNF9QVQkJMTIKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X1hUQUxfUFUJCQkxMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfQUxQX0FWQUlMCQkxNAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfUlhfUFdSU1dfUFUJCTE1CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9UWF9QV1JTV19QVQkJMTYKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X1JGUExMX1BXUlNXX1BVCQkxNworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjVfTE9HRU5fUFdSU1dfUFUJCTE4CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9BRkVfUFdSU1dfUFUJCTE5CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyNV9CQlBMTF9QV1JTV19QVQkJMjAKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI1X0hUX0FWQUlMCQkyMQorCisvKiBCQ000MzI4IFBMTCByZXNvdXJjZSBudW1iZXJzLiAqLworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfRVhUX1NXSVRDSEVSX1BXTQkwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CQl9TV0lUQ0hFUl9QV00JCTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0JCX1NXSVRDSEVSX0JVUlNUCTIKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0JCX0VYVF9TV0lUQ0hFUl9CVVJTVAkzCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9JTFBfUkVRVUVTVAkJNAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfUkFESU9fU1dJVENIRVJfUFdNCTUKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JBRElPX1NXSVRDSEVSX0JVUlNUCTYKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JPTV9TV0lUQ0gJCTcKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1BBX1JFRl9MRE8JCTgKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JBRElPX0xETwkJOQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfQUZFX0xETwkJCTEwCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9QTExfTERPCQkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X0JHX0ZJTFRCWVAJCTEyCisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9UWF9GSUxUQllQCQkxMworI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfUlhfRklMVEJZUAkJMTQKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1hUQUxfUFUJCQkxNQorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfWFRBTF9FTgkJCTE2CisjZGVmaW5lIFNTQl9QTVVSRVNfNDMyOF9CQl9QTExfRklMVEJZUAkJMTcKKyNkZWZpbmUgU1NCX1BNVVJFU180MzI4X1JGX1BMTF9GSUxUQllQCQkxOAorI2RlZmluZSBTU0JfUE1VUkVTXzQzMjhfQkJfUExMX1BVCQkxOQorCisvKiBCQ001MzU0IFBMTCByZXNvdXJjZSBudW1iZXJzLiAqLworI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfRVhUX1NXSVRDSEVSX1BXTQkwCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CQl9TV0lUQ0hFUl9QV00JCTEKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0JCX1NXSVRDSEVSX0JVUlNUCTIKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0JCX0VYVF9TV0lUQ0hFUl9CVVJTVAkzCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9JTFBfUkVRVUVTVAkJNAorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfUkFESU9fU1dJVENIRVJfUFdNCTUKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JBRElPX1NXSVRDSEVSX0JVUlNUCTYKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JPTV9TV0lUQ0gJCTcKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1BBX1JFRl9MRE8JCTgKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JBRElPX0xETwkJOQorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfQUZFX0xETwkJCTEwCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9QTExfTERPCQkJMTEKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X0JHX0ZJTFRCWVAJCTEyCisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9UWF9GSUxUQllQCQkxMworI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfUlhfRklMVEJZUAkJMTQKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1hUQUxfUFUJCQkxNQorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfWFRBTF9FTgkJCTE2CisjZGVmaW5lIFNTQl9QTVVSRVNfNTM1NF9CQl9QTExfRklMVEJZUAkJMTcKKyNkZWZpbmUgU1NCX1BNVVJFU181MzU0X1JGX1BMTF9GSUxUQllQCQkxOAorI2RlZmluZSBTU0JfUE1VUkVTXzUzNTRfQkJfUExMX1BVCQkxOQorCisKKworLyoqIENoaXAgc3BlY2lmaWMgQ2hpcC1TdGF0dXMgcmVnaXN0ZXIgY29udGVudHMuICovCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1NQUk9NX09UUF9TRUwJMHgwMDAwMDAwMworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9ERUZDSVNfU0VMCQkwIC8qIE9UUCBpcyBwb3dlcmVkIHVwLCB1c2UgZGVmLiBDSVMsIG5vIFNQUk9NICovCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1NQUk9NX1NFTAkJMSAvKiBPVFAgaXMgcG93ZXJlZCB1cCwgU1BST00gaXMgcHJlc2VudCAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9PVFBfU0VMCQkyIC8qIE9UUCBpcyBwb3dlcmVkIHVwLCBubyBTUFJPTSAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9PVFBfUFdSRE4JCTMgLyogT1RQIGlzIHBvd2VyZWQgZG93biwgU1BST00gaXMgcHJlc2VudCAqLworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9TRElPX1VTQl9NT0RFCTB4MDAwMDAwMDQKKyNkZWZpbmUgU1NCX0NISVBDT19DSFNUXzQzMjVfU0RJT19VU0JfTU9ERV9TSElGVCAgMgorI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9SQ0FMX1ZBTElECQkweDAwMDAwMDA4CisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1JDQUxfVkFMSURfU0hJRlQJMworI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9SQ0FMX1ZBTFVFCQkweDAwMDAwMUYwCisjZGVmaW5lIFNTQl9DSElQQ09fQ0hTVF80MzI1X1JDQUxfVkFMVUVfU0hJRlQJNAorI2RlZmluZSBTU0JfQ0hJUENPX0NIU1RfNDMyNV9QTVVUT1BfMkIgCQkweDAwMDAwMjAwIC8qIDEgZm9yIDJiLCAwIGZvciB0byAyYSAqLwogCiAKIApAQCAtMzUzLDExICs1NTMsMjAgQEAKIHN0cnVjdCBzc2JfZGV2aWNlOwogc3RydWN0IHNzYl9zZXJpYWxfcG9ydDsKIAorLyogRGF0YSBmb3IgdGhlIFBNVSwgaWYgYXZhaWxhYmxlLgorICogQ2hlY2sgYXZhaWxhYmlsaXR5IHdpdGggKChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24pLT5jYXBhYmlsaXRpZXMgJiBTU0JfQ0hJUENPX0NBUF9QTVUpCisgKi8KK3N0cnVjdCBzc2JfY2hpcGNvbW1vbl9wbXUgeworCXU4IHJldjsJCQkvKiBQTVUgcmV2aXNpb24gKi8KKwl1MzIgY3J5c3RhbGZyZXE7CS8qIFRoZSBhY3RpdmUgY3J5c3RhbCBmcmVxdWVuY3kgKGluIGtIeikgKi8KK307CisKIHN0cnVjdCBzc2JfY2hpcGNvbW1vbiB7CiAJc3RydWN0IHNzYl9kZXZpY2UgKmRldjsKIAl1MzIgY2FwYWJpbGl0aWVzOwogCS8qIEZhc3QgUG93ZXJ1cCBEZWxheSBjb25zdGFudCAqLwogCXUxNiBmYXN0X3B3cnVwX2RlbGF5OworCXN0cnVjdCBzc2JfY2hpcGNvbW1vbl9wbXUgcG11OwogfTsKIAogc3RhdGljIGlubGluZSBib29sIHNzYl9jaGlwY29fYXZhaWxhYmxlKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpCkBAIC0zNjUsNiArNTc0LDE3IEBACiAJcmV0dXJuIChjYy0+ZGV2ICE9IE5VTEwpOwogfQogCisvKiBSZWdpc3RlciBhY2Nlc3MgKi8KKyNkZWZpbmUgY2hpcGNvX3JlYWQzMihjYywgb2Zmc2V0KQlzc2JfcmVhZDMyKChjYyktPmRldiwgb2Zmc2V0KQorI2RlZmluZSBjaGlwY29fd3JpdGUzMihjYywgb2Zmc2V0LCB2YWwpCXNzYl93cml0ZTMyKChjYyktPmRldiwgb2Zmc2V0LCB2YWwpCisKKyNkZWZpbmUgY2hpcGNvX21hc2szMihjYywgb2Zmc2V0LCBtYXNrKSBcCisJCWNoaXBjb193cml0ZTMyKGNjLCBvZmZzZXQsIGNoaXBjb19yZWFkMzIoY2MsIG9mZnNldCkgJiAobWFzaykpCisjZGVmaW5lIGNoaXBjb19zZXQzMihjYywgb2Zmc2V0LCBzZXQpIFwKKwkJY2hpcGNvX3dyaXRlMzIoY2MsIG9mZnNldCwgY2hpcGNvX3JlYWQzMihjYywgb2Zmc2V0KSB8IChzZXQpKQorI2RlZmluZSBjaGlwY29fbWFza3NldDMyKGNjLCBvZmZzZXQsIG1hc2ssIHNldCkgXAorCQljaGlwY29fd3JpdGUzMihjYywgb2Zmc2V0LCAoY2hpcGNvX3JlYWQzMihjYywgb2Zmc2V0KSAmIChtYXNrKSkgfCAoc2V0KSkKKwogZXh0ZXJuIHZvaWQgc3NiX2NoaXBjb21tb25faW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKTsKIAogZXh0ZXJuIHZvaWQgc3NiX2NoaXBjb19zdXNwZW5kKHN0cnVjdCBzc2JfY2hpcGNvbW1vbiAqY2MpOwpAQCAtNDA2LDQgKzYyNiw4IEBACiAJCQkJICBzdHJ1Y3Qgc3NiX3NlcmlhbF9wb3J0ICpwb3J0cyk7CiAjZW5kaWYgLyogQ09ORklHX1NTQl9TRVJJQUwgKi8KIAorLyogUE1VIHN1cHBvcnQgKi8KK2V4dGVybiB2b2lkIHNzYl9wbXVfaW5pdChzdHJ1Y3Qgc3NiX2NoaXBjb21tb24gKmNjKTsKKworCiAjZW5kaWYgLyogTElOVVhfU1NCX0NISVBDT19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmgKaW5kZXggOTlhMGY5OS4uYTAxYjk4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oCkBAIC0zMjYsNiArMzI2LDQyIEBACiAjZGVmaW5lICBTU0JfU1BST001X0dQSU9CX1AzCQkweEZGMDAJLyogUGluIDMgKi8KICNkZWZpbmUgIFNTQl9TUFJPTTVfR1BJT0JfUDNfU0hJRlQJOAogCisvKiBTUFJPTSBSZXZpc2lvbiA4ICovCisjZGVmaW5lIFNTQl9TUFJPTThfQkZMTE8JCTB4MTA4NAkvKiBCb2FyZGZsYWdzIChsb3cgMTYgYml0cykgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9CRkxISQkJMHgxMDg2CS8qIEJvYXJkZmxhZ3MgSGkgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9JTDBNQUMJCTB4MTA4QwkvKiA2IGJ5dGUgTUFDIGFkZHJlc3MgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9DQ09ERQkJMHgxMDkyCS8qIDIgYnl0ZSBjb3VudHJ5IGNvZGUgKi8KKyNkZWZpbmUgU1NCX1NQUk9NOF9BTlRBVkFJTAkJMHgxMDlDICAvKiBBbnRlbm5hIGF2YWlsYWJsZSBiaXRmaWVsZHMqLworI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMX0EJCTB4RkYwMAkvKiBBLVBIWSBiaXRmaWVsZCAqLworI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMX0FfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X0FOVEFWQUlMX0JHCQkweDAwRkYJLyogQi1QSFkgYW5kIEctUEhZIGJpdGZpZWxkICovCisjZGVmaW5lIFNTQl9TUFJPTThfQU5UQVZBSUxfQkdfU0hJRlQJMAorI2RlZmluZSBTU0JfU1BST004X0FHQUlOMDEJCTB4MTA5RQkvKiBBbnRlbm5hIEdhaW4gKGluIGRCbSBRNS4yKSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjAJCTB4MDBGRgkvKiBBbnRlbm5hIDAgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4wX1NISUZUCTAKKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4xCQkweEZGMDAJLyogQW50ZW5uYSAxICovCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOMV9TSElGVAk4CisjZGVmaW5lIFNTQl9TUFJPTThfQUdBSU4yMwkJMHgxMEEwCisjZGVmaW5lICBTU0JfU1BST004X0FHQUlOMgkJMHgwMEZGCS8qIEFudGVubmEgMiAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjJfU0hJRlQJMAorI2RlZmluZSAgU1NCX1NQUk9NOF9BR0FJTjMJCTB4RkYwMAkvKiBBbnRlbm5hIDMgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfQUdBSU4zX1NISUZUCTgKKyNkZWZpbmUgU1NCX1NQUk9NOF9HUElPQQkJMHgxMDk2CS8qR2VuLiBQdXJwb3NlIElPICMgMCBhbmQgMSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQV9QMAkJMHgwMEZGCS8qIFBpbiAwICovCisjZGVmaW5lICBTU0JfU1BST004X0dQSU9BX1AxCQkweEZGMDAJLyogUGluIDEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0FfUDFfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X0dQSU9CCQkweDEwOTgJLyogR2VuLiBQdXJwb3NlIElPICMgMiBhbmQgMyAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9HUElPQl9QMgkJMHgwMEZGCS8qIFBpbiAyICovCisjZGVmaW5lICBTU0JfU1BST004X0dQSU9CX1AzCQkweEZGMDAJLyogUGluIDMgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfR1BJT0JfUDNfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X01BWFBfQkcJCTB4MTBDMCAgLyogTWF4IFBvd2VyIEJHIGluIHBhdGggMSAqLworI2RlZmluZSAgU1NCX1NQUk9NOF9NQVhQX0JHX01BU0sJMHgwMEZGICAvKiBNYXNrIGZvciBNYXggUG93ZXIgQkcgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfSVRTU0lfQkcJCTB4RkYwMAkvKiBNYXNrIGZvciBwYXRoIDEgaXRzc2lfYmcgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfSVRTU0lfQkdfU0hJRlQJOAorI2RlZmluZSBTU0JfU1BST004X01BWFBfQQkJMHgxMEM4ICAvKiBNYXggUG93ZXIgQSBpbiBwYXRoIDEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfTUFYUF9BX01BU0sJCTB4MDBGRiAgLyogTWFzayBmb3IgTWF4IFBvd2VyIEEgKi8KKyNkZWZpbmUgIFNTQl9TUFJPTThfSVRTU0lfQQkJMHhGRjAwCS8qIE1hc2sgZm9yIHBhdGggMSBpdHNzaV9hICovCisjZGVmaW5lICBTU0JfU1BST004X0lUU1NJX0FfU0hJRlQJOAogCiAvKiBWYWx1ZXMgZm9yIFNTQl9TUFJPTTFfQklORl9DQ09ERSAqLwogZW51bSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfaW9jdGxzLmggYi9pbmNsdWRlL2xpbnV4L3N1c3BlbmRfaW9jdGxzLmgKaW5kZXggMmM2ZmFlYy4uMGIzMDM4MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdXNwZW5kX2lvY3Rscy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VzcGVuZF9pb2N0bHMuaApAQCAtMSwxNCArMSwxNSBAQAogI2lmbmRlZiBfTElOVVhfU1VTUEVORF9JT0NUTFNfSAogI2RlZmluZSBfTElOVVhfU1VTUEVORF9JT0NUTFNfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIC8qCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHBhc3MgdGhlIHZhbHVlcyBuZWVkZWQgZm9yIHRoZSBpZGVudGlmaWNhdGlvbgogICogb2YgdGhlIHJlc3VtZSBzd2FwIGFyZWEgZnJvbSBhIHVzZXIgc3BhY2UgdG8gdGhlIGtlcm5lbCB2aWEgdGhlCiAgKiBTTkFQU0hPVF9TRVRfU1dBUF9BUkVBIGlvY3RsCiAgKi8KIHN0cnVjdCByZXN1bWVfc3dhcF9hcmVhIHsKLQlsb2ZmX3Qgb2Zmc2V0OwotCXVfaW50MzJfdCBkZXY7CisJX19rZXJuZWxfbG9mZl90IG9mZnNldDsKKwlfX3UzMiBkZXY7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAjZGVmaW5lIFNOQVBTSE9UX0lPQ19NQUdJQwknMycKQEAgLTIwLDEzICsyMSwxMyBAQAogI2RlZmluZSBTTkFQU0hPVF9TMlJBTQkJCV9JTyhTTkFQU0hPVF9JT0NfTUFHSUMsIDExKQogI2RlZmluZSBTTkFQU0hPVF9TRVRfU1dBUF9BUkVBCQlfSU9XKFNOQVBTSE9UX0lPQ19NQUdJQywgMTMsIFwKIAkJCQkJCQlzdHJ1Y3QgcmVzdW1lX3N3YXBfYXJlYSkKLSNkZWZpbmUgU05BUFNIT1RfR0VUX0lNQUdFX1NJWkUJCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAxNCwgbG9mZl90KQorI2RlZmluZSBTTkFQU0hPVF9HRVRfSU1BR0VfU0laRQkJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDE0LCBfX2tlcm5lbF9sb2ZmX3QpCiAjZGVmaW5lIFNOQVBTSE9UX1BMQVRGT1JNX1NVUFBPUlQJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMTUpCiAjZGVmaW5lIFNOQVBTSE9UX1BPV0VSX09GRgkJX0lPKFNOQVBTSE9UX0lPQ19NQUdJQywgMTYpCiAjZGVmaW5lIFNOQVBTSE9UX0NSRUFURV9JTUFHRQkJX0lPVyhTTkFQU0hPVF9JT0NfTUFHSUMsIDE3LCBpbnQpCiAjZGVmaW5lIFNOQVBTSE9UX1BSRUZfSU1BR0VfU0laRQlfSU8oU05BUFNIT1RfSU9DX01BR0lDLCAxOCkKLSNkZWZpbmUgU05BUFNIT1RfQVZBSUxfU1dBUF9TSVpFCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAxOSwgbG9mZl90KQotI2RlZmluZSBTTkFQU0hPVF9BTExPQ19TV0FQX1BBR0UJX0lPUihTTkFQU0hPVF9JT0NfTUFHSUMsIDIwLCBsb2ZmX3QpCisjZGVmaW5lIFNOQVBTSE9UX0FWQUlMX1NXQVBfU0laRQlfSU9SKFNOQVBTSE9UX0lPQ19NQUdJQywgMTksIF9fa2VybmVsX2xvZmZfdCkKKyNkZWZpbmUgU05BUFNIT1RfQUxMT0NfU1dBUF9QQUdFCV9JT1IoU05BUFNIT1RfSU9DX01BR0lDLCAyMCwgX19rZXJuZWxfbG9mZl90KQogI2RlZmluZSBTTkFQU0hPVF9JT0NfTUFYTlIJMjAKIAogI2VuZGlmIC8qIF9MSU5VWF9TVVNQRU5EX0lPQ1RMU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaAppbmRleCAzOWQ0NzFkLi5lNzZkM2IyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKQEAgLTQ5MCw2ICs0OTAsNyBAQAogCU5FVF9JUFY0X0NPTkZfQVJQX0lHTk9SRT0xOSwKIAlORVRfSVBWNF9DT05GX1BST01PVEVfU0VDT05EQVJJRVM9MjAsCiAJTkVUX0lQVjRfQ09ORl9BUlBfQUNDRVBUPTIxLAorCU5FVF9JUFY0X0NPTkZfQVJQX05PVElGWT0yMiwKIAlfX05FVF9JUFY0X0NPTkZfTUFYCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS9saW51eC90Y3AuaAppbmRleCBmZTc3ZTE0Li45ZDUwNzhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGNwLmgKQEAgLTY5LDE2ICs2OSwxNiBAQAogI2RlZmluZSB0Y3BfZmxhZ193b3JkKHRwKSAoICgodW5pb24gdGNwX3dvcmRfaGRyICopKHRwKSktPndvcmRzIFszXSkgCiAKIGVudW0geyAKLQlUQ1BfRkxBR19DV1IgPSBfX2NvbnN0YW50X2h0b25sKDB4MDA4MDAwMDApLCAKLQlUQ1BfRkxBR19FQ0UgPSBfX2NvbnN0YW50X2h0b25sKDB4MDA0MDAwMDApLCAKLQlUQ1BfRkxBR19VUkcgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAyMDAwMDApLCAKLQlUQ1BfRkxBR19BQ0sgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAxMDAwMDApLCAKLQlUQ1BfRkxBR19QU0ggPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwODAwMDApLCAKLQlUQ1BfRkxBR19SU1QgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwNDAwMDApLCAKLQlUQ1BfRkxBR19TWU4gPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwMjAwMDApLCAKLQlUQ1BfRkxBR19GSU4gPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwMTAwMDApLAotCVRDUF9SRVNFUlZFRF9CSVRTID0gX19jb25zdGFudF9odG9ubCgweDBGMDAwMDAwKSwKLQlUQ1BfREFUQV9PRkZTRVQgPSBfX2NvbnN0YW50X2h0b25sKDB4RjAwMDAwMDApCisJVENQX0ZMQUdfQ1dSID0gX19jcHVfdG9fYmUzMigweDAwODAwMDAwKSwKKwlUQ1BfRkxBR19FQ0UgPSBfX2NwdV90b19iZTMyKDB4MDA0MDAwMDApLAorCVRDUF9GTEFHX1VSRyA9IF9fY3B1X3RvX2JlMzIoMHgwMDIwMDAwMCksCisJVENQX0ZMQUdfQUNLID0gX19jcHVfdG9fYmUzMigweDAwMTAwMDAwKSwKKwlUQ1BfRkxBR19QU0ggPSBfX2NwdV90b19iZTMyKDB4MDAwODAwMDApLAorCVRDUF9GTEFHX1JTVCA9IF9fY3B1X3RvX2JlMzIoMHgwMDA0MDAwMCksCisJVENQX0ZMQUdfU1lOID0gX19jcHVfdG9fYmUzMigweDAwMDIwMDAwKSwKKwlUQ1BfRkxBR19GSU4gPSBfX2NwdV90b19iZTMyKDB4MDAwMTAwMDApLAorCVRDUF9SRVNFUlZFRF9CSVRTID0gX19jcHVfdG9fYmUzMigweDBGMDAwMDAwKSwKKwlUQ1BfREFUQV9PRkZTRVQgPSBfX2NwdV90b19iZTMyKDB4RjAwMDAwMDApCiB9OyAKIAogLyogVENQIHNvY2tldCBvcHRpb25zICovCkBAIC0yMTgsNyArMjE4LDYgQEAKIAkJc25kX3dzY2FsZSA6IDQsCS8qIFdpbmRvdyBzY2FsaW5nIHJlY2VpdmVkIGZyb20gc2VuZGVyCSovCiAJCXJjdl93c2NhbGUgOiA0OwkvKiBXaW5kb3cgc2NhbGluZyB0byBzZW5kIHRvIHJlY2VpdmVyCSovCiAvKglTQUNLcyBkYXRhCSovCi0JdTgJZWZmX3NhY2tzOwkvKiBTaXplIG9mIFNBQ0sgYXJyYXkgdG8gc2VuZCB3aXRoIG5leHQgcGFja2V0ICovCiAJdTgJbnVtX3NhY2tzOwkvKiBOdW1iZXIgb2YgU0FDSyBibG9ja3MJCSovCiAJdTE2CXVzZXJfbXNzOyAgCS8qIG1zcyByZXF1ZXN0ZWQgYnkgdXNlciBpbiBpb2N0bCAqLwogCXUxNgltc3NfY2xhbXA7CS8qIE1heGltYWwgbXNzLCBuZWdvdGlhdGVkIGF0IGNvbm5lY3Rpb24gc2V0dXAgKi8KQEAgLTI0OSw3ICsyNDgsNyBAQAogCS8qIGluZXRfY29ubmVjdGlvbl9zb2NrIGhhcyB0byBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIHRjcF9zb2NrICovCiAJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrCWluZXRfY29ubjsKIAl1MTYJdGNwX2hlYWRlcl9sZW47CS8qIEJ5dGVzIG9mIHRjcCBoZWFkZXIgdG8gc2VuZAkJKi8KLQl1MTYJeG1pdF9zaXplX2dvYWw7CS8qIEdvYWwgZm9yIHNlZ21lbnRpbmcgb3V0cHV0IHBhY2tldHMJKi8KKwl1MTYJeG1pdF9zaXplX2dvYWxfc2VnczsgLyogR29hbCBmb3Igc2VnbWVudGluZyBvdXRwdXQgcGFja2V0cyAqLwogCiAvKgogICoJSGVhZGVyIHByZWRpY3Rpb24gZmxhZ3MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZS5oIGIvaW5jbHVkZS9saW51eC90aW1lLmgKaW5kZXggZmJiZDJhMS4uMjQyZjYyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lLmgKQEAgLTEyLDE0ICsxMiwxNCBAQAogI2lmbmRlZiBfU1RSVUNUX1RJTUVTUEVDCiAjZGVmaW5lIF9TVFJVQ1RfVElNRVNQRUMKIHN0cnVjdCB0aW1lc3BlYyB7Ci0JdGltZV90CXR2X3NlYzsJCS8qIHNlY29uZHMgKi8KLQlsb25nCXR2X25zZWM7CS8qIG5hbm9zZWNvbmRzICovCisJX19rZXJuZWxfdGltZV90CXR2X3NlYzsJCQkvKiBzZWNvbmRzICovCisJbG9uZwkJdHZfbnNlYzsJCS8qIG5hbm9zZWNvbmRzICovCiB9OwogI2VuZGlmCiAKIHN0cnVjdCB0aW1ldmFsIHsKLQl0aW1lX3QJCXR2X3NlYzsJCS8qIHNlY29uZHMgKi8KLQlzdXNlY29uZHNfdAl0dl91c2VjOwkvKiBtaWNyb3NlY29uZHMgKi8KKwlfX2tlcm5lbF90aW1lX3QJCXR2X3NlYzsJCS8qIHNlY29uZHMgKi8KKwlfX2tlcm5lbF9zdXNlY29uZHNfdAl0dl91c2VjOwkvKiBtaWNyb3NlY29uZHMgKi8KIH07CiAKIHN0cnVjdCB0aW1lem9uZSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVjb21wYXJlLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVjb21wYXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2ZTIyMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdGltZWNvbXBhcmUuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIFV0aWxpdHkgY29kZSB3aGljaCBoZWxwcyB0cmFuc2Zvcm1pbmcgYmV0d2VlbiB0d28gZGlmZmVyZW50IHRpbWUKKyAqIGJhc2VzLCBjYWxsZWQgInNvdXJjZSIgYW5kICJ0YXJnZXQiIHRpbWUgaW4gdGhpcyBjb2RlLgorICoKKyAqIFNvdXJjZSB0aW1lIGhhcyB0byBiZSBwcm92aWRlZCB2aWEgdGhlIHRpbWVjb3VudGVyIEFQSSB3aGlsZSB0YXJnZXQKKyAqIHRpbWUgaXMgYWNjZXNzZWQgdmlhIGEgZnVuY3Rpb24gY2FsbGJhY2sgd2hvc2UgcHJvdG90eXBlCisgKiBpbnRlbnRpb25hbGx5IG1hdGNoZXMga3RpbWVfZ2V0KCkgYW5kIGt0aW1lX2dldF9yZWFsKCkuIFRoZXNlCisgKiBpbnRlcmZhY2VzIHdoZXJlIGNob3NlbiBsaWtlIHRoaXMgc28gdGhhdCB0aGUgY29kZSBzZXJ2ZXMgaXRzCisgKiBpbml0aWFsIHB1cnBvc2Ugd2l0aG91dCBhZGRpdGlvbmFsIGdsdWUgY29kZS4KKyAqCisgKiBUaGlzIHB1cnBvc2UgaXMgc3luY2hyb25pemluZyBhIGhhcmR3YXJlIGNsb2NrIGluIGEgTklDIHdpdGggc3lzdGVtCisgKiB0aW1lLCBpbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIFByZWNpc2lvbiBUaW1lIFByb3RvY29sIChQVFAsCisgKiBJRUVFMTU4OCkgd2l0aCBtb3JlIGFjY3VyYXRlIGhhcmR3YXJlIGFzc2lzdGVkIHRpbWUgc3RhbXBpbmcuICBJbgorICogdGhhdCBjb250ZXh0IG9ubHkgc3luY2hyb25pemF0aW9uIGFnYWluc3Qgc3lzdGVtIHRpbWUgKD0KKyAqIGt0aW1lX2dldF9yZWFsKCkpIGlzIGN1cnJlbnRseSBuZWVkZWQuIEJ1dCB0aGlzIHV0aWxpdHkgY29kZSBtaWdodAorICogYmVjb21lIHVzZWZ1bCBpbiBvdGhlciBzaXR1YXRpb25zLCB3aGljaCBpcyB3aHkgaXQgd2FzIHdyaXR0ZW4gYXMKKyAqIGdlbmVyYWwgcHVycG9zZSB1dGlsaXR5IGNvZGUuCisgKgorICogVGhlIHNvdXJjZSB0aW1lY291bnRlciBpcyBhc3N1bWVkIHRvIHJldHVybiBtb25vdG9uaWNhbGx5CisgKiBpbmNyZWFzaW5nIHRpbWUgKGJ1dCB0aGlzIGNvZGUgZG9lcyBpdHMgYmVzdCB0byBjb21wZW5zYXRlIGlmIHRoYXQKKyAqIGlzIG5vdCB0aGUgY2FzZSkgd2hlcmVhcyB0YXJnZXQgdGltZSBtYXkganVtcC4KKyAqCisgKiBUaGUgdGFyZ2V0IHRpbWUgY29ycmVzcG9uZGluZyB0byBhIHNvdXJjZSB0aW1lIGlzIGRldGVybWluZWQgYnkKKyAqIHJlYWRpbmcgdGFyZ2V0IHRpbWUsIHJlYWRpbmcgc291cmNlIHRpbWUsIHJlYWRpbmcgdGFyZ2V0IHRpbWUKKyAqIGFnYWluLCB0aGVuIGFzc3VtaW5nIHRoYXQgYXZlcmFnZSB0YXJnZXQgdGltZSBjb3JyZXNwb25kcyB0byBzb3VyY2UKKyAqIHRpbWUuIEluIG90aGVyIHdvcmRzLCB0aGUgYXNzdW1wdGlvbiBpcyB0aGF0IHJlYWRpbmcgdGhlIHNvdXJjZQorICogdGltZSBpcyBzbG93IGFuZCBpbnZvbHZlcyBlcXVhbCB0aW1lIGZvciBzZW5kaW5nIHRoZSByZXF1ZXN0IGFuZAorICogcmVjZWl2aW5nIHRoZSByZXBseSwgd2hlcmVhcyByZWFkaW5nIHRhcmdldCB0aW1lIGlzIGFzc3VtZWQgdG8gYmUKKyAqIGZhc3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorICogQXV0aG9yOiBQYXRyaWNrIE9obHkgPHBhdHJpY2sub2hseUBpbnRlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICogU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKi8KKyNpZm5kZWYgX0xJTlVYX1RJTUVDT01QQVJFX0gKKyNkZWZpbmUgX0xJTlVYX1RJTUVDT01QQVJFX0gKKworI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKworLyoqCisgKiBzdHJ1Y3QgdGltZWNvbXBhcmUgLSBzdG9yZXMgc3RhdGUgYW5kIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0d28gY2xvY2tzCisgKgorICogSW5pdGlhbGl6ZSB0byB6ZXJvLCB0aGVuIHNldCBzb3VyY2UvdGFyZ2V0L251bV9zYW1wbGVzLgorICoKKyAqIFRyYW5zZm9ybWF0aW9uIGJldHdlZW4gc291cmNlIHRpbWUgYW5kIHRhcmdldCB0aW1lIGlzIGRvbmUgd2l0aDoKKyAqIHRhcmdldF90aW1lID0gc291cmNlX3RpbWUgKyBvZmZzZXQgKworICogICAgICAgICAgICAgICAoc291cmNlX3RpbWUgLSBsYXN0X3VwZGF0ZSkgKiBza2V3IC8KKyAqICAgICAgICAgICAgICAgVElNRUNPTVBBUkVfU0tFV19SRVNPTFVUSU9OCisgKgorICogQHNvdXJjZTogICAgICAgICAgdXNlZCB0byBnZXQgc291cmNlIHRpbWUgc3RhbXBzIHZpYSB0aW1lY291bnRlcl9yZWFkKCkKKyAqIEB0YXJnZXQ6ICAgICAgICAgIGZ1bmN0aW9uIHJldHVybmluZyB0YXJnZXQgdGltZSAoZm9yIGV4YW1wbGUsIGt0aW1lX2dldAorICogICAgICAgICAgICAgICAgICAgZm9yIG1vbm90b25pYyB0aW1lLCBvciBrdGltZV9nZXRfcmVhbCBmb3Igd2FsbCBjbG9jaykKKyAqIEBudW1fc2FtcGxlczogICAgIG51bWJlciBvZiB0aW1lcyB0aGF0IHNvdXJjZSB0aW1lIGFuZCB0YXJnZXQgdGltZSBhcmUgdG8KKyAqICAgICAgICAgICAgICAgICAgIGJlIGNvbXBhcmVkIHdoZW4gZGV0ZXJtaW5pbmcgdGhlaXIgb2Zmc2V0CisgKiBAb2Zmc2V0OiAgICAgICAgICAodGFyZ2V0IHRpbWUgLSBzb3VyY2UgdGltZSkgYXQgdGhlIHRpbWUgb2YgdGhlIGxhc3QgdXBkYXRlCisgKiBAc2tldzogICAgICAgICAgICBhdmVyYWdlICh0YXJnZXQgdGltZSAtIHNvdXJjZSB0aW1lKSAvIGRlbHRhIHNvdXJjZSB0aW1lICoKKyAqICAgICAgICAgICAgICAgICAgIFRJTUVDT01QQVJFX1NLRVdfUkVTT0xVVElPTgorICogQGxhc3RfdXBkYXRlOiAgICAgbGFzdCBzb3VyY2UgdGltZSBzdGFtcCB3aGVuIHRpbWUgb2Zmc2V0IHdhcyBtZWFzdXJlZAorICovCitzdHJ1Y3QgdGltZWNvbXBhcmUgeworCXN0cnVjdCB0aW1lY291bnRlciAqc291cmNlOworCWt0aW1lX3QgKCp0YXJnZXQpKHZvaWQpOworCWludCBudW1fc2FtcGxlczsKKworCXM2NCBvZmZzZXQ7CisJczY0IHNrZXc7CisJdTY0IGxhc3RfdXBkYXRlOworfTsKKworLyoqCisgKiB0aW1lY29tcGFyZV90cmFuc2Zvcm0gLSB0cmFuc2Zvcm0gc291cmNlIHRpbWUgc3RhbXAgaW50byB0YXJnZXQgdGltZSBiYXNlCisgKiBAc3luYzogICAgICAgICAgICBjb250ZXh0IGZvciB0aW1lIHN5bmMKKyAqIEBzb3VyY2VfdHN0YW1wOiAgIHRoZSByZXN1bHQgb2YgdGltZWNvdW50ZXJfcmVhZCgpIG9yCisgKiAgICAgICAgICAgICAgICAgICB0aW1lY291bnRlcl9jeWMydGltZSgpCisgKi8KK2V4dGVybiBrdGltZV90IHRpbWVjb21wYXJlX3RyYW5zZm9ybShzdHJ1Y3QgdGltZWNvbXBhcmUgKnN5bmMsCisJCQkJICAgICB1NjQgc291cmNlX3RzdGFtcCk7CisKKy8qKgorICogdGltZWNvbXBhcmVfb2Zmc2V0IC0gbWVhc3VyZSBjdXJyZW50ICh0YXJnZXQgdGltZSAtIHNvdXJjZSB0aW1lKSBvZmZzZXQKKyAqIEBzeW5jOiAgICAgICAgICAgIGNvbnRleHQgZm9yIHRpbWUgc3luYworICogQG9mZnNldDogICAgICAgICAgYXZlcmFnZSBvZmZzZXQgZHVyaW5nIHNhbXBsZSBwZXJpb2QgcmV0dXJuZWQgaGVyZQorICogQHNvdXJjZV90c3RhbXA6ICAgYXZlcmFnZSBzb3VyY2UgdGltZSBkdXJpbmcgc2FtcGxlIHBlcmlvZCByZXR1cm5lZCBoZXJlCisgKgorICogUmV0dXJucyBudW1iZXIgb2Ygc2FtcGxlcyB1c2VkLiBNaWdodCBiZSB6ZXJvICg9IG5vIHJlc3VsdCkgaW4gdGhlCisgKiB1bmxpa2VseSBjYXNlIHRoYXQgdGFyZ2V0IHRpbWUgd2FzIG1vbm90b25pY2FsbHkgZGVjcmVhc2luZyBmb3IgYWxsCisgKiBzYW1wbGVzICg9IGJyb2tlbikuCisgKi8KK2V4dGVybiBpbnQgdGltZWNvbXBhcmVfb2Zmc2V0KHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCSAgICAgIHM2NCAqb2Zmc2V0LAorCQkJICAgICAgdTY0ICpzb3VyY2VfdHN0YW1wKTsKKworZXh0ZXJuIHZvaWQgX190aW1lY29tcGFyZV91cGRhdGUoc3RydWN0IHRpbWVjb21wYXJlICpzeW5jLAorCQkJCSB1NjQgc291cmNlX3RzdGFtcCk7CisKKy8qKgorICogdGltZWNvbXBhcmVfdXBkYXRlIC0gdXBkYXRlIG9mZnNldCBhbmQgc2tldyBieSBtZWFzdXJpbmcgY3VycmVudCBvZmZzZXQKKyAqIEBzeW5jOiAgICAgICAgICAgIGNvbnRleHQgZm9yIHRpbWUgc3luYworICogQHNvdXJjZV90c3RhbXA6ICAgdGhlIHJlc3VsdCBvZiB0aW1lY291bnRlcl9yZWFkKCkgb3IKKyAqICAgICAgICAgICAgICAgICAgIHRpbWVjb3VudGVyX2N5YzJ0aW1lKCksIHBhc3MgemVybyB0byBmb3JjZSB1cGRhdGUKKyAqCisgKiBVcGRhdGVzIGFyZSBvbmx5IGRvbmUgYXQgbW9zdCBvbmNlIHBlciBzZWNvbmQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCB0aW1lY29tcGFyZV91cGRhdGUoc3RydWN0IHRpbWVjb21wYXJlICpzeW5jLAorCQkJCSAgICAgIHU2NCBzb3VyY2VfdHN0YW1wKQoreworCWlmICghc291cmNlX3RzdGFtcCB8fAorCSAgICAoczY0KShzb3VyY2VfdHN0YW1wIC0gc3luYy0+bGFzdF91cGRhdGUpID49IE5TRUNfUEVSX1NFQykKKwkJX190aW1lY29tcGFyZV91cGRhdGUoc3luYywgc291cmNlX3RzdGFtcCk7Cit9CisKKyNlbmRpZiAvKiBfTElOVVhfVElNRUNPTVBBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lci5oIGIvaW5jbHVkZS9saW51eC90aW1lci5oCmluZGV4IGRhZjk2ODUuLmUyZDY2MmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKQEAgLTg2LDggKzg2LDggQEAKIAogZXh0ZXJuIHZvaWQgYWRkX3RpbWVyX29uKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgaW50IGNwdSk7CiBleHRlcm4gaW50IGRlbF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKTsKLWV4dGVybiBpbnQgX19tb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOwogZXh0ZXJuIGludCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpOworZXh0ZXJuIGludCBtb2RfdGltZXJfcGVuZGluZyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcyk7CiAKIC8qCiAgKiBUaGUgamlmZmllcyB2YWx1ZSB3aGljaCBpcyBhZGRlZCB0byBub3csIHdoZW4gdGhlcmUgaXMgbm8gdGltZXIKQEAgLTE0NiwyNSArMTQ2LDcgQEAKIH0KICNlbmRpZgogCi0vKioKLSAqIGFkZF90aW1lciAtIHN0YXJ0IGEgdGltZXIKLSAqIEB0aW1lcjogdGhlIHRpbWVyIHRvIGJlIGFkZGVkCi0gKgotICogVGhlIGtlcm5lbCB3aWxsIGRvIGEgLT5mdW5jdGlvbigtPmRhdGEpIGNhbGxiYWNrIGZyb20gdGhlCi0gKiB0aW1lciBpbnRlcnJ1cHQgYXQgdGhlIC0+ZXhwaXJlcyBwb2ludCBpbiB0aGUgZnV0dXJlLiBUaGUKLSAqIGN1cnJlbnQgdGltZSBpcyAnamlmZmllcycuCi0gKgotICogVGhlIHRpbWVyJ3MgLT5leHBpcmVzLCAtPmZ1bmN0aW9uIChhbmQgaWYgdGhlIGhhbmRsZXIgdXNlcyBpdCwgLT5kYXRhKQotICogZmllbGRzIG11c3QgYmUgc2V0IHByaW9yIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KLSAqCi0gKiBUaW1lcnMgd2l0aCBhbiAtPmV4cGlyZXMgZmllbGQgaW4gdGhlIHBhc3Qgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgbmV4dAotICogdGltZXIgdGljay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGFkZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCi17Ci0JQlVHX09OKHRpbWVyX3BlbmRpbmcodGltZXIpKTsKLQlfX21vZF90aW1lcih0aW1lciwgdGltZXItPmV4cGlyZXMpOwotfQorZXh0ZXJuIHZvaWQgYWRkX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CiAKICNpZmRlZiBDT05GSUdfU01QCiAgIGV4dGVybiBpbnQgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVyaW9tZW0tcm5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyNTMxNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXJpb21lbS1ybmcuaApAQCAtMCwwICsxLDIxIEBACisvKgorICogbGludXgvaW5jbHVkZS9saW51eC90aW1lcmlvbWVtLXJuZy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IEFsZXhhbmRlciBDbG91dGVyIDxhbGV4QGRpZ3Jpei5vcmcudWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorCitzdHJ1Y3QgdGltZXJpb21lbV9ybmdfZGF0YSB7CisJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsKKwl1bnNpZ25lZCBpbnQJCXByZXNlbnQ6MTsKKworCXUzMiBfX2lvbWVtCQkqYWRkcmVzczsKKworCS8qIG1lYXN1cmVzIGluIHVzZWNzICovCisJdW5zaWduZWQgaW50CQlwZXJpb2Q7Cit9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lcy5oIGIvaW5jbHVkZS9saW51eC90aW1lcy5oCmluZGV4IGUyZDMwMjAuLjg3YjYyNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWVzLmgKQEAgLTQsMTAgKzQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdHJ1Y3QgdG1zIHsKLQljbG9ja190IHRtc191dGltZTsKLQljbG9ja190IHRtc19zdGltZTsKLQljbG9ja190IHRtc19jdXRpbWU7Ci0JY2xvY2tfdCB0bXNfY3N0aW1lOworCV9fa2VybmVsX2Nsb2NrX3QgdG1zX3V0aW1lOworCV9fa2VybmVsX2Nsb2NrX3QgdG1zX3N0aW1lOworCV9fa2VybmVsX2Nsb2NrX3QgdG1zX2N1dGltZTsKKwlfX2tlcm5lbF9jbG9ja190IHRtc19jc3RpbWU7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXguaCBiL2luY2x1ZGUvbGludXgvdGltZXguaAppbmRleCA5OThhNTVkLi5hYTM0NzVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1leC5oCkBAIC0xOTAsNyArMTkwLDcgQEAKICAqIG9mZnNldCBhbmQgbWF4aW11bSBmcmVxdWVuY3kgdG9sZXJhbmNlLgogICovCiAjZGVmaW5lIFNISUZUX1VTRUMgMTYJCS8qIGZyZXF1ZW5jeSBvZmZzZXQgc2NhbGUgKHNoaWZ0KSAqLwotI2RlZmluZSBQUE1fU0NBTEUgKE5TRUNfUEVSX1VTRUMgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIFNISUZUX1VTRUMpKQorI2RlZmluZSBQUE1fU0NBTEUgKChzNjQpTlNFQ19QRVJfVVNFQyA8PCAoTlRQX1NDQUxFX1NISUZUIC0gU0hJRlRfVVNFQykpCiAjZGVmaW5lIFBQTV9TQ0FMRV9JTlZfU0hJRlQgMTkKICNkZWZpbmUgUFBNX1NDQUxFX0lOViAoKDFsbCA8PCAoUFBNX1NDQUxFX0lOVl9TSElGVCArIE5UUF9TQ0FMRV9TSElGVCkpIC8gXAogCQkgICAgICAgUFBNX1NDQUxFICsgMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHBtLmggYi9pbmNsdWRlL2xpbnV4L3RwbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMzhiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3RwbS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBMZWVuZGVydCB2YW4gRG9vcm4gPGxlZW5kZXJ0QHdhdHNvbi5pYm0uY29tPgorICogRGF2ZSBTYWZmb3JkIDxzYWZmb3JkQHdhdHNvbi5pYm0uY29tPgorICogUmVpbmVyIFNhaWxlciA8c2FpbGVyQHdhdHNvbi5pYm0uY29tPgorICogS3lsZW5lIEhhbGwgPGtqaGFsbEB1cy5pYm0uY29tPgorICogRGVib3JhIFZlbGFyZGUgPGR2ZWxhcmRlQHVzLmlibS5jb20+CisgKgorICogTWFpbnRhaW5lZCBieTogPHRwbWRkX2RldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBEZXZpY2UgZHJpdmVyIGZvciBUQ0cvVENQQSBUUE0gKHRydXN0ZWQgcGxhdGZvcm0gbW9kdWxlKS4KKyAqIFNwZWNpZmljYXRpb25zIGF0IHd3dy50cnVzdGVkY29tcHV0aW5nZ3JvdXAub3JnCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqLworI2lmbmRlZiBfX0xJTlVYX1RQTV9IX18KKyNkZWZpbmUgX19MSU5VWF9UUE1fSF9fCisKKy8qCisgKiBDaGlwIG51bSBpcyB0aGlzIHZhbHVlIG9yIGEgdmFsaWQgdHBtIGlkeAorICovCisjZGVmaW5lCVRQTV9BTllfTlVNIDB4RkZGRgorCisjaWYgZGVmaW5lZChDT05GSUdfVENHX1RQTSkKKworZXh0ZXJuIGludCB0cG1fcGNyX3JlYWQodTMyIGNoaXBfbnVtLCBpbnQgcGNyX2lkeCwgdTggKnJlc19idWYpOworZXh0ZXJuIGludCB0cG1fcGNyX2V4dGVuZCh1MzIgY2hpcF9udW0sIGludCBwY3JfaWR4LCBjb25zdCB1OCAqaGFzaCk7CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90eXBlcy5oIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCmluZGV4IDcxMmNhNTMuLjVhYmUzNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHlwZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKQEAgLTEsNiArMSw5IEBACiAjaWZuZGVmIF9MSU5VWF9UWVBFU19ICiAjZGVmaW5lIF9MSU5VWF9UWVBFU19ICiAKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpZmRlZglfX0tFUk5FTF9fCiAKICNkZWZpbmUgREVDTEFSRV9CSVRNQVAobmFtZSxiaXRzKSBcCkBAIC05LDkgKzEyLDggQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAotI2lmbmRlZiBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMKKyNpZmRlZiBfX0tFUk5FTF9fCiAKIHR5cGVkZWYgX191MzIgX19rZXJuZWxfZGV2X3Q7CiAKQEAgLTI5LDcgKzMxLDYgQEAKIHR5cGVkZWYgX19rZXJuZWxfY2xvY2tpZF90CWNsb2NraWRfdDsKIHR5cGVkZWYgX19rZXJuZWxfbXFkX3QJCW1xZF90OwogCi0jaWZkZWYgX19LRVJORUxfXwogdHlwZWRlZiBfQm9vbAkJCWJvb2w7CiAKIHR5cGVkZWYgX19rZXJuZWxfdWlkMzJfdAl1aWRfdDsKQEAgLTQ1LDE0ICs0Niw2IEBACiB0eXBlZGVmIF9fa2VybmVsX29sZF9naWRfdAlvbGRfZ2lkX3Q7CiAjZW5kaWYgLyogQ09ORklHX1VJRDE2ICovCiAKLS8qIGxpYmM1IGluY2x1ZGVzIHRoaXMgZmlsZSB0byBkZWZpbmUgdWlkX3QsIHRodXMgdWlkX3QgY2FuIG5ldmVyIGNoYW5nZQotICogd2hlbiBpdCBpcyBpbmNsdWRlZCBieSBub24ta2VybmVsIGNvZGUKLSAqLwotI2Vsc2UKLXR5cGVkZWYgX19rZXJuZWxfdWlkX3QJCXVpZF90OwotdHlwZWRlZiBfX2tlcm5lbF9naWRfdAkJZ2lkX3Q7Ci0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjaWYgZGVmaW5lZChfX0dOVUNfXykKIHR5cGVkZWYgX19rZXJuZWxfbG9mZl90CQlsb2ZmX3Q7CiAjZW5kaWYKQEAgLTE1NCw3ICsxNDcsNyBAQAogI2RlZmluZSBwZ29mZl90IHVuc2lnbmVkIGxvbmcKICNlbmRpZgogCi0jZW5kaWYgLyogX19LRVJORUxfU1RSSUNUX05BTUVTICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKgogICogQmVsb3cgYXJlIHRydWx5IExpbnV4LXNwZWNpZmljIHR5cGVzIHRoYXQgc2hvdWxkIG5ldmVyIGNvbGxpZGUgd2l0aApAQCAtMjEyLDUgKzIwNSw1IEBACiB9OwogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwotCisjZW5kaWYgLyogIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpb19kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvdWlvX2RyaXZlci5oCmluZGV4IGEwYmI2YmQuLjVkY2M5ZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWlvX2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvdWlvX2RyaXZlci5oCkBAIC0yMiw2ICsyMiw3IEBACiAKIC8qKgogICogc3RydWN0IHVpb19tZW0gLSBkZXNjcmlwdGlvbiBvZiBhIFVJTyBtZW1vcnkgcmVnaW9uCisgKiBAbmFtZToJCW5hbWUgb2YgdGhlIG1lbW9yeSByZWdpb24gZm9yIGlkZW50aWZpY2F0aW9uCiAgKiBAYWRkcjoJCWFkZHJlc3Mgb2YgdGhlIGRldmljZSdzIG1lbW9yeQogICogQHNpemU6CQlzaXplIG9mIElPCiAgKiBAbWVtdHlwZToJCXR5cGUgb2YgbWVtb3J5IGFkZHIgcG9pbnRzIHRvCkBAIC0yOSw2ICszMCw3IEBACiAgKiBAbWFwOgkJZm9yIHVzZSBieSB0aGUgVUlPIGNvcmUgb25seS4KICAqLwogc3RydWN0IHVpb19tZW0geworCWNvbnN0IGNoYXIJCSpuYW1lOwogCXVuc2lnbmVkIGxvbmcJCWFkZHI7CiAJdW5zaWduZWQgbG9uZwkJc2l6ZTsKIAlpbnQJCQltZW10eXBlOwpAQCAtNDIsMTIgKzQ0LDE0IEBACiAKIC8qKgogICogc3RydWN0IHVpb19wb3J0IC0gZGVzY3JpcHRpb24gb2YgYSBVSU8gcG9ydCByZWdpb24KKyAqIEBuYW1lOgkJbmFtZSBvZiB0aGUgcG9ydCByZWdpb24gZm9yIGlkZW50aWZpY2F0aW9uCiAgKiBAc3RhcnQ6CQlzdGFydCBvZiBwb3J0IHJlZ2lvbgogICogQHNpemU6CQlzaXplIG9mIHBvcnQgcmVnaW9uCiAgKiBAcG9ydHR5cGU6CQl0eXBlIG9mIHBvcnQgKHNlZSBVSU9fUE9SVF8qIGJlbG93KQogICogQHBvcnRpbzoJCWZvciB1c2UgYnkgdGhlIFVJTyBjb3JlIG9ubHkuCiAgKi8KIHN0cnVjdCB1aW9fcG9ydCB7CisJY29uc3QgY2hhcgkJKm5hbWU7CiAJdW5zaWduZWQgbG9uZwkJc3RhcnQ7CiAJdW5zaWduZWQgbG9uZwkJc2l6ZTsKIAlpbnQJCQlwb3J0dHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi5oCmluZGV4IDg4MDc5ZmQuLmM2YjJhYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IuaApAQCAtNjQzLDE4NiArNjQzLDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotLyoqCi0gKiB1c2JfZW5kcG9pbnRfbnVtIC0gZ2V0IHRoZSBlbmRwb2ludCdzIG51bWJlcgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgQGVwZCdzIG51bWJlcjogMCB0byAxNS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X251bShjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF90eXBlIC0gZ2V0IHRoZSBlbmRwb2ludCdzIHRyYW5zZmVyIHR5cGUKLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIG9uZSBvZiBVU0JfRU5EUE9JTlRfWEZFUl97Q09OVFJPTCwgSVNPQywgQlVMSywgSU5UfSBhY2NvcmRpbmcKLSAqIHRvIEBlcGQncyB0cmFuc2ZlciB0eXBlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfdHlwZShjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSzsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfZGlyX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBJTiBkaXJlY3Rpb24KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgSU4sIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfZGlyX2luKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9JTik7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2Rpcl9vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIE9VVCBkaXJlY3Rpb24KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgT1VULCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2Rpcl9vdXQoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICgoZXBkLT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKSA9PSBVU0JfRElSX09VVCk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X3hmZXJfYnVsayAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGJ1bGssIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9idWxrKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09Ci0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspOwotfQotCi0vKioKLSAqIHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2wgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGNvbnRyb2wgdHJhbnNmZXIgdHlwZQotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBjb250cm9sLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfY29udHJvbCgKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQotCQlVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfeGZlcl9pbnQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGludGVycnVwdCwgb3RoZXJ3aXNlIGl0IHJldHVybnMKLSAqIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9pbnQoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJVVNCX0VORFBPSU5UX1hGRVJfSU5UKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfeGZlcl9pc29jIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGlzb2Nocm9ub3VzLCBvdGhlcndpc2UgaXQgcmV0dXJucwotICogZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KLQkJVVNCX0VORFBPSU5UX1hGRVJfSVNPQyk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgYnVsayBJTgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19idWxrX2luKAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfYnVsayhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGJ1bGsgT1VUCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgYnVsayB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19idWxrX291dCgKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfaW50X2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBJTgotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2ludF9pbigKLQkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKLXsKLQlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2ludF9vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaW50ZXJydXB0IE9VVAotICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAotICoKLSAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlIGFuZCBPVVQgZGlyZWN0aW9uLAotICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pbnRfb3V0KAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQotewotCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaW50KGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKSk7Ci19Ci0KLS8qKgotICogdXNiX2VuZHBvaW50X2lzX2lzb2NfaW4gLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaXNvY2hyb25vdXMgSU4KLSAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCi0gKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2NfaW4oCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKLX0KLQotLyoqCi0gKiB1c2JfZW5kcG9pbnRfaXNfaXNvY19vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaXNvY2hyb25vdXMgT1VUCi0gKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKLSAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgotICovCi1zdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaXNvY19vdXQoCi0JCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCi17Ci0JcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKSk7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UgXAogCQkoVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgfCBVU0JfREVWSUNFX0lEX01BVENIX1BST0RVQ1QpCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1JBTkdFIFwKQEAgLTEzNTcsOCArMTE3Nyw4IEBACiAJdW5zaWduZWQgaW50IHRyYW5zZmVyX2ZsYWdzOwkvKiAoaW4pIFVSQl9TSE9SVF9OT1RfT0sgfCAuLi4qLwogCXZvaWQgKnRyYW5zZmVyX2J1ZmZlcjsJCS8qIChpbikgYXNzb2NpYXRlZCBkYXRhIGJ1ZmZlciAqLwogCWRtYV9hZGRyX3QgdHJhbnNmZXJfZG1hOwkvKiAoaW4pIGRtYSBhZGRyIGZvciB0cmFuc2Zlcl9idWZmZXIgKi8KLQlpbnQgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsJLyogKGluKSBkYXRhIGJ1ZmZlciBsZW5ndGggKi8KLQlpbnQgYWN0dWFsX2xlbmd0aDsJCS8qIChyZXR1cm4pIGFjdHVhbCB0cmFuc2ZlciBsZW5ndGggKi8KKwl1MzIgdHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsJLyogKGluKSBkYXRhIGJ1ZmZlciBsZW5ndGggKi8KKwl1MzIgYWN0dWFsX2xlbmd0aDsJCS8qIChyZXR1cm4pIGFjdHVhbCB0cmFuc2ZlciBsZW5ndGggKi8KIAl1bnNpZ25lZCBjaGFyICpzZXR1cF9wYWNrZXQ7CS8qIChpbikgc2V0dXAgcGFja2V0IChjb250cm9sIG9ubHkpICovCiAJZG1hX2FkZHJfdCBzZXR1cF9kbWE7CQkvKiAoaW4pIGRtYSBhZGRyIGZvciBzZXR1cF9wYWNrZXQgKi8KIAlpbnQgc3RhcnRfZnJhbWU7CQkvKiAobW9kaWZ5KSBzdGFydCBmcmFtZSAoSVNPKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvY2g5LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAppbmRleCA5YjQyYmFlLi5iMTQ1MTE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaApAQCAtMTAyLDcgKzEwMiw3IEBACiAjZGVmaW5lIFVTQl9SRVFfTE9PUEJBQ0tfREFUQV9SRUFECTB4MTYKICNkZWZpbmUgVVNCX1JFUV9TRVRfSU5URVJGQUNFX0RTCTB4MTcKIAotLyogVGhlIExpbmsgUG93ZXIgTWFuZ2VtZW50IChMUE0pIEVDTiBkZWZpbmVzIFVTQl9SRVFfVEVTVF9BTkRfU0VUIGNvbW1hbmQsCisvKiBUaGUgTGluayBQb3dlciBNYW5hZ2VtZW50IChMUE0pIEVDTiBkZWZpbmVzIFVTQl9SRVFfVEVTVF9BTkRfU0VUIGNvbW1hbmQsCiAgKiB1c2VkIGJ5IGh1YnMgdG8gcHV0IHBvcnRzIGludG8gYSBuZXcgTDEgc3VzcGVuZCBzdGF0ZSwgZXhjZXB0IHRoYXQgaXQKICAqIGZvcmdvdCB0byBkZWZpbmUgaXRzIG51bWJlciAuLi4KICAqLwpAQCAtMzUzLDYgKzM1MywxODUgQEAKICNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfSU5UCQkzCiAjZGVmaW5lIFVTQl9FTkRQT0lOVF9NQVhfQURKVVNUQUJMRQkweDgwCiAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qKgorICogdXNiX2VuZHBvaW50X251bSAtIGdldCB0aGUgZW5kcG9pbnQncyBudW1iZXIKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIEBlcGQncyBudW1iZXI6IDAgdG8gMTUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9udW0oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSzsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfdHlwZSAtIGdldCB0aGUgZW5kcG9pbnQncyB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyBvbmUgb2YgVVNCX0VORFBPSU5UX1hGRVJfe0NPTlRST0wsIElTT0MsIEJVTEssIElOVH0gYWNjb3JkaW5nCisgKiB0byBAZXBkJ3MgdHJhbnNmZXIgdHlwZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3R5cGUoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuIGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2Rpcl9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgSU4gZGlyZWN0aW9uCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIElOLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2Rpcl9pbihjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9kaXJfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBPVVQgZGlyZWN0aW9uCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIE9VVCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9kaXJfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykgPT0gVVNCX0RJUl9PVVQpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBidWxrLCBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfYnVsaygKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PQorCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfeGZlcl9jb250cm9sIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBjb250cm9sIHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgY29udHJvbCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF94ZmVyX2NvbnRyb2woCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfaW50IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpbnRlcnJ1cHQsIG90aGVyd2lzZSBpdCByZXR1cm5zCisgKiBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X3hmZXJfaW50KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0lOVCk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X3hmZXJfaXNvYyAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZQorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaXMgb2YgdHlwZSBpc29jaHJvbm91cywgb3RoZXJ3aXNlIGl0IHJldHVybnMKKyAqIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfeGZlcl9pc29jKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19idWxrX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGJ1bGsgSU4KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbigKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19idWxrX291dCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBidWxrIE9VVAorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGJ1bGsgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9vdXQoZXBkKSk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2ludF9pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpbnRlcnJ1cHQgSU4KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pbnRfaW4oCisJCQkJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pbnRfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBPVVQKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X291dCgKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2ludChlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pc29jX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIElOCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZSBhbmQgSU4gZGlyZWN0aW9uLAorICogb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzYl9lbmRwb2ludF9pc19pc29jX2luKAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfaW4oZXBkKSk7Cit9CisKKy8qKgorICogdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGlzb2Nocm9ub3VzIE9VVAorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0KAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOworfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC01ODQsOCArNzYzLDggQEAKIAkvKiBjaGFwdGVyIDkgYW5kIGF1dGhlbnRpY2F0aW9uICh3aXJlbGVzcykgZGV2aWNlIHN0YXRlcyAqLwogCVVTQl9TVEFURV9BVFRBQ0hFRCwKIAlVU0JfU1RBVEVfUE9XRVJFRCwJCQkvKiB3aXJlZCAqLwotCVVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQsCQkvKiBhdXRoICovCiAJVVNCX1NUQVRFX1JFQ09OTkVDVElORywJCQkvKiBhdXRoICovCisJVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRCwJCS8qIGF1dGggKi8KIAlVU0JfU1RBVEVfREVGQVVMVCwJCQkvKiBsaW1pdGVkIGZ1bmN0aW9uICovCiAJVVNCX1NUQVRFX0FERFJFU1MsCiAJVVNCX1NUQVRFX0NPTkZJR1VSRUQsCQkJLyogbW9zdCBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2NvbXBvc2l0ZS5oIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKaW5kZXggOTM1YzM4MC4uYWNkN2IwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvY29tcG9zaXRlLmgKQEAgLTI0NCw2ICsyNDQsMTAgQEAKICAqCXZhbHVlOyBpdCBzaG91bGQgcmV0dXJuIHplcm8gb24gc3VjY2Vzc2Z1bCBpbml0aWFsaXphdGlvbi4KICAqIEB1bmJpbmQ6IFJldmVyc2VzIEBiaW5kKCk7IGNhbGxlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHVucmVnaXN0ZXJpbmcKICAqCXRoaXMgZHJpdmVyLgorICogQHN1c3BlbmQ6IE5vdGlmaWVzIHdoZW4gdGhlIGhvc3Qgc3RvcHMgc2VuZGluZyBVU0IgdHJhZmZpYywKKyAqCWFmdGVyIGZ1bmN0aW9uIG5vdGlmaWNhdGlvbnMKKyAqIEByZXN1bWU6IE5vdGlmaWVzIGNvbmZpZ3VyYXRpb24gd2hlbiB0aGUgaG9zdCByZXN0YXJ0cyBVU0IgdHJhZmZpYywKKyAqCWJlZm9yZSBmdW5jdGlvbiBub3RpZmljYXRpb25zCiAgKgogICogRGV2aWNlcyBkZWZhdWx0IHRvIHJlcG9ydGluZyBzZWxmIHBvd2VyZWQgb3BlcmF0aW9uLiAgRGV2aWNlcyB3aGljaCByZWx5CiAgKiBvbiBidXMgcG93ZXJlZCBvcGVyYXRpb24gc2hvdWxkIHJlcG9ydCB0aGlzIGluIHRoZWlyIEBiaW5kKCkgbWV0aG9kLgpAQCAtMjY4LDYgKzI3MiwxMCBAQAogCiAJaW50CQkJKCpiaW5kKShzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKik7CiAJaW50CQkJKCp1bmJpbmQpKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqKTsKKworCS8qIGdsb2JhbCBzdXNwZW5kIGhvb2tzICovCisJdm9pZAkJCSgqc3VzcGVuZCkoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICopOworCXZvaWQJCQkoKnJlc3VtZSkoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICopOwogfTsKIAogZXh0ZXJuIGludCB1c2JfY29tcG9zaXRlX3JlZ2lzdGVyKHN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2dhZGdldC5oIGIvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKaW5kZXggMDQ2MGE3NC4uYmJmNDVkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvZ2FkZ2V0LmgKQEAgLTU5OCw2ICs1OTgsNyBAQAogLyoqCiAgKiB1c2JfZ2FkZ2V0X3ZidXNfY29ubmVjdCAtIE5vdGlmeSBjb250cm9sbGVyIHRoYXQgVkJVUyBpcyBwb3dlcmVkCiAgKiBAZ2FkZ2V0OlRoZSBkZXZpY2Ugd2hpY2ggbm93IGhhcyBWQlVTIHBvd2VyLgorICogQ29udGV4dDogY2FuIHNsZWVwCiAgKgogICogVGhpcyBjYWxsIGlzIHVzZWQgYnkgYSBkcml2ZXIgZm9yIGFuIGV4dGVybmFsIHRyYW5zY2VpdmVyIChvciBHUElPKQogICogdGhhdCBkZXRlY3RzIGEgVkJVUyBwb3dlciBzZXNzaW9uIHN0YXJ0aW5nLiAgQ29tbW9uIHJlc3BvbnNlcyBpbmNsdWRlCkBAIC02MzYsNiArNjM3LDcgQEAKIC8qKgogICogdXNiX2dhZGdldF92YnVzX2Rpc2Nvbm5lY3QgLSBub3RpZnkgY29udHJvbGxlciBhYm91dCBWQlVTIHNlc3Npb24gZW5kCiAgKiBAZ2FkZ2V0OnRoZSBkZXZpY2Ugd2hvc2UgVkJVUyBzdXBwbHkgaXMgYmVpbmcgZGVzY3JpYmVkCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCiAgKiBUaGlzIGNhbGwgaXMgdXNlZCBieSBhIGRyaXZlciBmb3IgYW4gZXh0ZXJuYWwgdHJhbnNjZWl2ZXIgKG9yIEdQSU8pCiAgKiB0aGF0IGRldGVjdHMgYSBWQlVTIHBvd2VyIHNlc3Npb24gZW5kaW5nLiAgQ29tbW9uIHJlc3BvbnNlcyBpbmNsdWRlCkBAIC03OTIsMTkgKzc5NCwyMCBAQAogLyoqCiAgKiB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlciAtIHJlZ2lzdGVyIGEgZ2FkZ2V0IGRyaXZlcgogICogQGRyaXZlcjp0aGUgZHJpdmVyIGJlaW5nIHJlZ2lzdGVyZWQKKyAqIENvbnRleHQ6IGNhbiBzbGVlcAogICoKICAqIENhbGwgdGhpcyBpbiB5b3VyIGdhZGdldCBkcml2ZXIncyBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24sCiAgKiB0byB0ZWxsIHRoZSB1bmRlcmx5aW5nIHVzYiBjb250cm9sbGVyIGRyaXZlciBhYm91dCB5b3VyIGRyaXZlci4KICAqIFRoZSBkcml2ZXIncyBiaW5kKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgdG8gYmluZCBpdCB0byBhCiAgKiBnYWRnZXQgYmVmb3JlIHRoaXMgcmVnaXN0cmF0aW9uIGNhbGwgcmV0dXJucy4gIEl0J3MgZXhwZWN0ZWQgdGhhdAogICogdGhlIGJpbmQoKSBmdW5jdGlvbnMgd2lsbCBiZSBpbiBpbml0IHNlY3Rpb25zLgotICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiBhIGNvbnRleHQgdGhhdCBjYW4gc2xlZXAuCiAgKi8KIGludCB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcik7CiAKIC8qKgogICogdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAtIHVucmVnaXN0ZXIgYSBnYWRnZXQgZHJpdmVyCiAgKiBAZHJpdmVyOnRoZSBkcml2ZXIgYmVpbmcgdW5yZWdpc3RlcmVkCisgKiBDb250ZXh0OiBjYW4gc2xlZXAKICAqCiAgKiBDYWxsIHRoaXMgaW4geW91ciBnYWRnZXQgZHJpdmVyJ3MgbW9kdWxlIGNsZWFudXAgZnVuY3Rpb24sCiAgKiB0byB0ZWxsIHRoZSB1bmRlcmx5aW5nIHVzYiBjb250cm9sbGVyIHRoYXQgeW91ciBkcml2ZXIgaXMKQEAgLTgxMyw3ICs4MTYsNiBAQAogICogdG8gdW5iaW5kKCkgYW5kIGNsZWFuIHVwIGFueSBkZXZpY2Ugc3RhdGUsIGJlZm9yZSB0aGlzIHByb2NlZHVyZQogICogZmluYWxseSByZXR1cm5zLiAgSXQncyBleHBlY3RlZCB0aGF0IHRoZSB1bmJpbmQoKSBmdW5jdGlvbnMKICAqIHdpbGwgaW4gaW4gZXhpdCBzZWN0aW9ucywgc28gbWF5IG5vdCBiZSBsaW5rZWQgaW4gc29tZSBrZXJuZWxzLgotICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbiBhIGNvbnRleHQgdGhhdCBjYW4gc2xlZXAuCiAgKi8KIGludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivb3RnLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaAppbmRleCA5NGRmNGZlLi4xYWFhODI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaApAQCAtODAsMTIgKzgwLDE3IEBACiAKIC8qIGZvciBib2FyZC1zcGVjaWZpYyBpbml0IGxvZ2ljICovCiBleHRlcm4gaW50IG90Z19zZXRfdHJhbnNjZWl2ZXIoc3RydWN0IG90Z190cmFuc2NlaXZlciAqKTsKKyNpZmRlZiBDT05GSUdfTk9QX1VTQl9YQ0VJVgorZXh0ZXJuIHZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKTsKK2V4dGVybiB2b2lkIHVzYl9ub3BfeGNlaXZfdW5yZWdpc3Rlcih2b2lkKTsKKyNlbmRpZgogCiAKIC8qIGZvciB1c2IgaG9zdCBhbmQgcGVyaXBoZXJhbCBjb250cm9sbGVyIGRyaXZlcnMgKi8KIGV4dGVybiBzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGdfZ2V0X3RyYW5zY2VpdmVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgb3RnX3B1dF90cmFuc2NlaXZlcihzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICopOwogCisvKiBDb250ZXh0OiBjYW4gc2xlZXAgKi8KIHN0YXRpYyBpbmxpbmUgaW50CiBvdGdfc3RhcnRfaG5wKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZykKIHsKQEAgLTEwMiw2ICsxMDcsOCBAQAogCiAKIC8qIGZvciB1c2IgcGVyaXBoZXJhbCBjb250cm9sbGVyIGRyaXZlcnMgKi8KKworLyogQ29udGV4dDogY2FuIHNsZWVwICovCiBzdGF0aWMgaW5saW5lIGludAogb3RnX3NldF9wZXJpcGhlcmFsKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90Zywgc3RydWN0IHVzYl9nYWRnZXQgKnBlcmlwaCkKIHsKQEAgLTExNCw2ICsxMjEsNyBAQAogCXJldHVybiBvdGctPnNldF9wb3dlcihvdGcsIG1BKTsKIH0KIAorLyogQ29udGV4dDogY2FuIHNsZWVwICovCiBzdGF0aWMgaW5saW5lIGludAogb3RnX3NldF9zdXNwZW5kKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZywgaW50IHN1c3BlbmQpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaCBiL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oCmluZGV4IDdmNmM2MDMuLjI1MjZmM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3F1aXJrcy5oCkBAIC0xNiw0ICsxNiw3IEBACiAvKiBkZXZpY2UgY2FuJ3QgaGFuZGxlIFNldC1JbnRlcmZhY2UgcmVxdWVzdHMgKi8KICNkZWZpbmUgVVNCX1FVSVJLX05PX1NFVF9JTlRGCQkweDAwMDAwMDA0CiAKKy8qIGRldmljZSBjYW4ndCBoYW5kbGUgaXRzIENvbmZpZ3VyYXRpb24gb3IgSW50ZXJmYWNlIHN0cmluZ3MgKi8KKyNkZWZpbmUgVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MJMHgwMDAwMDAwOAorCiAjZW5kaWYgLyogX19MSU5VWF9VU0JfUVVJUktTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaCBiL2luY2x1ZGUvbGludXgvdXNiL3JuZGlzX2hvc3QuaAppbmRleCAwYTZlNmQ0Li4zNzgzNmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9ybmRpc19ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivcm5kaXNfaG9zdC5oCkBAIC00OSw0OCArNDksNDUgQEAKICAqLwogI2RlZmluZQlSTkRJU19DT05UUk9MX1RJTUVPVVRfTVMJKDUgKiAxMDAwKQogCi0KLSNkZWZpbmUgY2NwdTIgX19jb25zdGFudF9jcHVfdG9fbGUzMgotCi0jZGVmaW5lIFJORElTX01TR19DT01QTEVUSU9OCWNjcHUyKDB4ODAwMDAwMDApCisjZGVmaW5lIFJORElTX01TR19DT01QTEVUSU9OCWNwdV90b19sZTMyKDB4ODAwMDAwMDApCiAKIC8qIGNvZGVzIGZvciAibXNnX3R5cGUiIGZpZWxkIG9mIHJuZGlzIG1lc3NhZ2VzOwogICogb25seSB0aGUgZGF0YSBjaGFubmVsIHVzZXMgcGFja2V0IG1lc3NhZ2VzIChtYXliZSBiYXRjaGVkKTsKICAqIGV2ZXJ5dGhpbmcgZWxzZSBnb2VzIG9uIHRoZSBjb250cm9sIGNoYW5uZWwuCiAgKi8KLSNkZWZpbmUgUk5ESVNfTVNHX1BBQ0tFVAljY3B1MigweDAwMDAwMDAxKQkvKiAxLU4gcGFja2V0cyAqLwotI2RlZmluZSBSTkRJU19NU0dfSU5JVAkJY2NwdTIoMHgwMDAwMDAwMikKKyNkZWZpbmUgUk5ESVNfTVNHX1BBQ0tFVAljcHVfdG9fbGUzMigweDAwMDAwMDAxKQkvKiAxLU4gcGFja2V0cyAqLworI2RlZmluZSBSTkRJU19NU0dfSU5JVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKICNkZWZpbmUgUk5ESVNfTVNHX0lOSVRfQwkoUk5ESVNfTVNHX0lOSVR8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCi0jZGVmaW5lIFJORElTX01TR19IQUxUCQljY3B1MigweDAwMDAwMDAzKQotI2RlZmluZSBSTkRJU19NU0dfUVVFUlkJCWNjcHUyKDB4MDAwMDAwMDQpCisjZGVmaW5lIFJORElTX01TR19IQUxUCQljcHVfdG9fbGUzMigweDAwMDAwMDAzKQorI2RlZmluZSBSTkRJU19NU0dfUVVFUlkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDQpCiAjZGVmaW5lIFJORElTX01TR19RVUVSWV9DCShSTkRJU19NU0dfUVVFUll8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCi0jZGVmaW5lIFJORElTX01TR19TRVQJCWNjcHUyKDB4MDAwMDAwMDUpCisjZGVmaW5lIFJORElTX01TR19TRVQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDUpCiAjZGVmaW5lIFJORElTX01TR19TRVRfQwkJKFJORElTX01TR19TRVR8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCi0jZGVmaW5lIFJORElTX01TR19SRVNFVAkJY2NwdTIoMHgwMDAwMDAwNikKKyNkZWZpbmUgUk5ESVNfTVNHX1JFU0VUCQljcHVfdG9fbGUzMigweDAwMDAwMDA2KQogI2RlZmluZSBSTkRJU19NU0dfUkVTRVRfQwkoUk5ESVNfTVNHX1JFU0VUfFJORElTX01TR19DT01QTEVUSU9OKQotI2RlZmluZSBSTkRJU19NU0dfSU5ESUNBVEUJY2NwdTIoMHgwMDAwMDAwNykKLSNkZWZpbmUgUk5ESVNfTVNHX0tFRVBBTElWRQljY3B1MigweDAwMDAwMDA4KQorI2RlZmluZSBSTkRJU19NU0dfSU5ESUNBVEUJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNykKKyNkZWZpbmUgUk5ESVNfTVNHX0tFRVBBTElWRQljcHVfdG9fbGUzMigweDAwMDAwMDA4KQogI2RlZmluZSBSTkRJU19NU0dfS0VFUEFMSVZFX0MJKFJORElTX01TR19LRUVQQUxJVkV8Uk5ESVNfTVNHX0NPTVBMRVRJT04pCiAKIC8qIGNvZGVzIGZvciAic3RhdHVzIiBmaWVsZCBvZiBjb21wbGV0aW9uIG1lc3NhZ2VzICovCi0jZGVmaW5lCVJORElTX1NUQVRVU19TVUNDRVNTCQljY3B1MigweDAwMDAwMDAwKQotI2RlZmluZQlSTkRJU19TVEFUVVNfRkFJTFVSRQkJY2NwdTIoMHhjMDAwMDAwMSkKLSNkZWZpbmUJUk5ESVNfU1RBVFVTX0lOVkFMSURfREFUQQljY3B1MigweGMwMDEwMDE1KQotI2RlZmluZQlSTkRJU19TVEFUVVNfTk9UX1NVUFBPUlRFRAljY3B1MigweGMwMDAwMGJiKQotI2RlZmluZQlSTkRJU19TVEFUVVNfTUVESUFfQ09OTkVDVAljY3B1MigweDQwMDEwMDBiKQotI2RlZmluZQlSTkRJU19TVEFUVVNfTUVESUFfRElTQ09OTkVDVAljY3B1MigweDQwMDEwMDBjKQorI2RlZmluZQlSTkRJU19TVEFUVVNfU1VDQ0VTUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX0ZBSUxVUkUJCWNwdV90b19sZTMyKDB4YzAwMDAwMDEpCisjZGVmaW5lCVJORElTX1NUQVRVU19JTlZBTElEX0RBVEEJY3B1X3RvX2xlMzIoMHhjMDAxMDAxNSkKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX05PVF9TVVBQT1JURUQJY3B1X3RvX2xlMzIoMHhjMDAwMDBiYikKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX01FRElBX0NPTk5FQ1QJY3B1X3RvX2xlMzIoMHg0MDAxMDAwYikKKyNkZWZpbmUJUk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1QJY3B1X3RvX2xlMzIoMHg0MDAxMDAwYykKIAogLyogY29kZXMgZm9yIE9JRF9HRU5fUEhZU0lDQUxfTUVESVVNICovCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9VTlNQRUNJRklFRAljY3B1MigweDAwMDAwMDAwKQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fV0lSRUxFU1NfTEFOCWNjcHUyKDB4MDAwMDAwMDEpCi0jZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9DQUJMRV9NT0RFTQljY3B1MigweDAwMDAwMDAyKQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fUEhPTkVfTElORQljY3B1MigweDAwMDAwMDAzKQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fUE9XRVJfTElORQljY3B1MigweDAwMDAwMDA0KQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fRFNMCQljY3B1MigweDAwMDAwMDA1KQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fRklCUkVfQ0hBTk5FTAljY3B1MigweDAwMDAwMDA2KQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fMTM5NAkJY2NwdTIoMHgwMDAwMDAwNykKLSNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1dJUkVMRVNTX1dBTgljY3B1MigweDAwMDAwMDA4KQotI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fTUFYCQljY3B1MigweDAwMDAwMDA5KQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fVU5TUEVDSUZJRUQJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1dJUkVMRVNTX0xBTgljcHVfdG9fbGUzMigweDAwMDAwMDAxKQorI2RlZmluZQlSTkRJU19QSFlTSUNBTF9NRURJVU1fQ0FCTEVfTU9ERU0JY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1BIT05FX0xJTkUJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMykKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX1BPV0VSX0xJTkUJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX0RTTAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNSkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX0ZJQlJFX0NIQU5ORUwJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNikKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNXzEzOTQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDcpCisjZGVmaW5lCVJORElTX1BIWVNJQ0FMX01FRElVTV9XSVJFTEVTU19XQU4JY3B1X3RvX2xlMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUJUk5ESVNfUEhZU0lDQUxfTUVESVVNX01BWAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwOSkKIAogc3RydWN0IHJuZGlzX2RhdGFfaGRyIHsKIAlfX2xlMzIJbXNnX3R5cGU7CQkvKiBSTkRJU19NU0dfUEFDS0VUICovCkBAIC0yMjgsMjQgKzIyNSwyNCBAQAogICogdGhlcmUgYXJlIGdvYnMgbW9yZSB0aGF0IG1heSBvcHRpb25hbGx5IGJlIHN1cHBvcnRlZC4gIFdlJ2xsIGF2b2lkIGFzIG11Y2gKICAqIG9mIHRoYXQgbWVzcyBhcyBwb3NzaWJsZS4KICAqLwotI2RlZmluZSBPSURfODAyXzNfUEVSTUFORU5UX0FERFJFU1MJY2NwdTIoMHgwMTAxMDEwMSkKLSNkZWZpbmUgT0lEX0dFTl9NQVhJTVVNX0ZSQU1FX1NJWkUJY2NwdTIoMHgwMDAxMDEwNikKLSNkZWZpbmUgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIJY2NwdTIoMHgwMDAxMDEwZSkKLSNkZWZpbmUgT0lEX0dFTl9QSFlTSUNBTF9NRURJVU0JCWNjcHUyKDB4MDAwMTAyMDIpCisjZGVmaW5lIE9JRF84MDJfM19QRVJNQU5FTlRfQUREUkVTUwljcHVfdG9fbGUzMigweDAxMDEwMTAxKQorI2RlZmluZSBPSURfR0VOX01BWElNVU1fRlJBTUVfU0laRQljcHVfdG9fbGUzMigweDAwMDEwMTA2KQorI2RlZmluZSBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUgljcHVfdG9fbGUzMigweDAwMDEwMTBlKQorI2RlZmluZSBPSURfR0VOX1BIWVNJQ0FMX01FRElVTQkJY3B1X3RvX2xlMzIoMHgwMDAxMDIwMikKIAogLyogcGFja2V0IGZpbHRlciBiaXRzIHVzZWQgYnkgT0lEX0dFTl9DVVJSRU5UX1BBQ0tFVF9GSUxURVIgKi8KLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQJCWNjcHUyKDB4MDAwMDAwMDEpCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVAkJY2NwdTIoMHgwMDAwMDAwMikKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVAkJY2NwdTIoMHgwMDAwMDAwNCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUCQljY3B1MigweDAwMDAwMDA4KQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9TT1VSQ0VfUk9VVElORwljY3B1MigweDAwMDAwMDEwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUwkJY2NwdTIoMHgwMDAwMDAyMCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfU01UCQkJY2NwdTIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQUxMX0xPQ0FMCQljY3B1MigweDAwMDAwMDgwKQotI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9HUk9VUAkJCWNjcHUyKDB4MDAwMDEwMDApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9GVU5DVElPTkFMCWNjcHUyKDB4MDAwMDIwMDApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0ZVTkNUSU9OQUwJCWNjcHUyKDB4MDAwMDQwMDApCi0jZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX01BQ19GUkFNRQkJY2NwdTIoMHgwMDAwODAwMCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQJCWNwdV90b19sZTMyKDB4MDAwMDAwMDEpCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX01VTFRJQ0FTVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVAkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQlJPQURDQVNUCQljcHVfdG9fbGUzMigweDAwMDAwMDA4KQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9TT1VSQ0VfUk9VVElORwljcHVfdG9fbGUzMigweDAwMDAwMDEwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUwkJY3B1X3RvX2xlMzIoMHgwMDAwMDAyMCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfU01UCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDA0MCkKKyNkZWZpbmUgUk5ESVNfUEFDS0VUX1RZUEVfQUxMX0xPQ0FMCQljcHVfdG9fbGUzMigweDAwMDAwMDgwKQorI2RlZmluZSBSTkRJU19QQUNLRVRfVFlQRV9HUk9VUAkJCWNwdV90b19sZTMyKDB4MDAwMDEwMDApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0FMTF9GVU5DVElPTkFMCWNwdV90b19sZTMyKDB4MDAwMDIwMDApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX0ZVTkNUSU9OQUwJCWNwdV90b19sZTMyKDB4MDAwMDQwMDApCisjZGVmaW5lIFJORElTX1BBQ0tFVF9UWVBFX01BQ19GUkFNRQkJY3B1X3RvX2xlMzIoMHgwMDAwODAwMCkKIAogLyogZGVmYXVsdCBmaWx0ZXIgdXNlZCB3aXRoIFJORElTIGRldmljZXMgKi8KICNkZWZpbmUgUk5ESVNfREVGQVVMVF9GSUxURVIgKCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IDBiODYxN2EuLmI5NTg0MjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0xMzAsNyArMTMwLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZQkJKmRldjsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIJKnR5cGU7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UJCSppbnRlcmZhY2U7Ci0JdW5zaWduZWQgY2hhcgkJCWRpc2Nvbm5lY3RlZDsKKwl1bnNpZ25lZCBjaGFyCQkJZGlzY29ubmVjdGVkOjE7CisJdW5zaWduZWQgY2hhcgkJCXN1c3BlbmRpbmc6MTsKIAl1bnNpZ25lZCBjaGFyCQkJbWlub3I7CiAJdW5zaWduZWQgY2hhcgkJCW51bV9wb3J0czsKIAl1bnNpZ25lZCBjaGFyCQkJbnVtX3BvcnRfcG9pbnRlcnM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaCBiL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCmluZGV4IDdkMzgyMjIuLjM2ZmFiYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oCkBAIC0xNzYsNiArMTc2LDExIEBACiAJc2l6ZV90CQkJbGVuZ3RoOwogfTsKIAorZXh0ZXJuIGludCB1c2JuZXRfb3BlbiAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCk7CitleHRlcm4gaW50IHVzYm5ldF9zdG9wIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKK2V4dGVybiBpbnQgdXNibmV0X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpOworZXh0ZXJuIHZvaWQgdXNibmV0X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpOworZXh0ZXJuIGludCB1c2JuZXRfY2hhbmdlX210dSAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IG5ld19tdHUpOwogCiBleHRlcm4gaW50IHVzYm5ldF9nZXRfZW5kcG9pbnRzKHN0cnVjdCB1c2JuZXQgKiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CiBleHRlcm4gdm9pZCB1c2JuZXRfZGVmZXJfa2V2ZW50IChzdHJ1Y3QgdXNibmV0ICosIGludCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaAppbmRleCAxZWVhMWFiLi4zZDE1ZmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKQEAgLTk2LDM5ICs5NiwyNiBAQAogI2RlZmluZSBVU19QUl9DQkkJMHgwMAkJLyogQ29udHJvbC9CdWxrL0ludGVycnVwdCAqLwogI2RlZmluZSBVU19QUl9DQgkweDAxCQkvKiBDb250cm9sL0J1bGsgdy9vIGludGVycnVwdCAqLwogI2RlZmluZSBVU19QUl9CVUxLCTB4NTAJCS8qIGJ1bGsgb25seSAqLwotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVAorCiAjZGVmaW5lIFVTX1BSX1VTQkFUCTB4ODAJCS8qIFNDTS1BVEFQSSBicmlkZ2UgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkKICNkZWZpbmUgVVNfUFJfRVVTQl9TRERSMDkJMHg4MQkvKiBTQ00tU0NTSSBicmlkZ2UgZm9yIFNERFItMDkgKi8KLSNlbmRpZgotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUKICNkZWZpbmUgVVNfUFJfU0REUjU1CTB4ODIJCS8qIFNERFItNTUgKG1hZGUgdXApICovCi0jZW5kaWYKICNkZWZpbmUgVVNfUFJfRFBDTV9VU0IgIDB4ZjAJCS8qIENvbWJpbmF0aW9uIENCL1NERFIwOSAqLwotI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NCiAjZGVmaW5lIFVTX1BSX0ZSRUVDT00gICAweGYxCQkvKiBGcmVlY29tICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQgogI2RlZmluZSBVU19QUl9EQVRBRkFCICAgMHhmMgkJLyogRGF0YWZhYiBjaGlwc2V0cyAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UCiAjZGVmaW5lIFVTX1BSX0pVTVBTSE9UICAweGYzCQkvKiBMZXhhciBKdW1wc2hvdCAqLwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQQogI2RlZmluZSBVU19QUl9BTEFVREEgICAgMHhmNAkJLyogQWxhdWRhIGNoaXBzZXRzICovCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEKICNkZWZpbmUgVVNfUFJfS0FSTUEgICAgIDB4ZjUJCS8qIFJpbyBLYXJtYSAqLwotI2VuZGlmCiAKICNkZWZpbmUgVVNfUFJfREVWSUNFCTB4ZmYJCS8qIFVzZSBkZXZpY2UncyB2YWx1ZSAqLwogCiAvKgogICovCitleHRlcm4gaW50IHVzYl91c3VhbF9pZ25vcmVfZGV2aWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK2V4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2Jfc3RvcmFnZV91c2JfaWRzW107CisKICNpZmRlZiBDT05GSUdfVVNCX0xJQlVTVUFMCiAKLWV4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzdG9yYWdlX3VzYl9pZHNbXTsKIGV4dGVybiB2b2lkIHVzYl91c3VhbF9zZXRfcHJlc2VudChpbnQgdHlwZSk7CiBleHRlcm4gdm9pZCB1c2JfdXN1YWxfY2xlYXJfcHJlc2VudChpbnQgdHlwZSk7CiBleHRlcm4gaW50IHVzYl91c3VhbF9jaGVja190eXBlKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICosIGludCB0eXBlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXRpbWUuaCBiL2luY2x1ZGUvbGludXgvdXRpbWUuaAppbmRleCA2NDBiZTZhLi41Y2RmNjczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3V0aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC91dGltZS5oCkBAIC00LDggKzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIHN0cnVjdCB1dGltYnVmIHsKLQl0aW1lX3QgYWN0aW1lOwotCXRpbWVfdCBtb2R0aW1lOworCV9fa2VybmVsX3RpbWVfdCBhY3RpbWU7CisJX19rZXJuZWxfdGltZV90IG1vZHRpbWU7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX25ldC5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKaW5kZXggM2VmYTg2Yy4uMjQyMzQ4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fbmV0LmgKQEAgLTIyLDExICsyMiwxOSBAQAogI2RlZmluZSBWSVJUSU9fTkVUX0ZfSE9TVF9FQ04JMTMJLyogSG9zdCBjYW4gaGFuZGxlIFRTT1s2XSB3LyBFQ04gaW4uICovCiAjZGVmaW5lIFZJUlRJT19ORVRfRl9IT1NUX1VGTwkxNAkvKiBIb3N0IGNhbiBoYW5kbGUgVUZPIGluLiAqLwogI2RlZmluZSBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGCTE1CS8qIEhvc3QgY2FuIG1lcmdlIHJlY2VpdmUgYnVmZmVycy4gKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX1NUQVRVUwkxNgkvKiB2aXJ0aW9fbmV0X2NvbmZpZy5zdGF0dXMgYXZhaWxhYmxlICovCisjZGVmaW5lIFZJUlRJT19ORVRfRl9DVFJMX1ZRCTE3CS8qIENvbnRyb2wgY2hhbm5lbCBhdmFpbGFibGUgKi8KKyNkZWZpbmUgVklSVElPX05FVF9GX0NUUkxfUlgJMTgJLyogQ29udHJvbCBjaGFubmVsIFJYIG1vZGUgc3VwcG9ydCAqLworI2RlZmluZSBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOCTE5CS8qIENvbnRyb2wgY2hhbm5lbCBWTEFOIGZpbHRlcmluZyAqLworCisjZGVmaW5lIFZJUlRJT19ORVRfU19MSU5LX1VQCTEJLyogTGluayBpcyB1cCAqLwogCiBzdHJ1Y3QgdmlydGlvX25ldF9jb25maWcKIHsKIAkvKiBUaGUgY29uZmlnIGRlZmluaW5nIG1hYyBhZGRyZXNzIChpZiBWSVJUSU9fTkVUX0ZfTUFDKSAqLwogCV9fdTggbWFjWzZdOworCS8qIFNlZSBWSVJUSU9fTkVUX0ZfU1RBVFVTIGFuZCBWSVJUSU9fTkVUX1NfKiBhYm92ZSAqLworCV9fdTE2IHN0YXR1czsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIFRoaXMgaXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIHNjYXR0ZXItZ2F0aGVyIGxpc3QuICBJZiB5b3UgZG9uJ3QKQEAgLTU0LDQgKzYyLDY3IEBACiAJX191MTYgbnVtX2J1ZmZlcnM7CS8qIE51bWJlciBvZiBtZXJnZWQgcnggYnVmZmVycyAqLwogfTsKIAorLyoKKyAqIENvbnRyb2wgdmlydHF1ZXVlIGRhdGEgc3RydWN0dXJlcworICoKKyAqIFRoZSBjb250cm9sIHZpcnRxdWV1ZSBleHBlY3RzIGEgaGVhZGVyIGluIHRoZSBmaXJzdCBzZyBlbnRyeQorICogYW5kIGFuIGFjay9zdGF0dXMgcmVzcG9uc2UgaW4gdGhlIGxhc3QgZW50cnkuICBEYXRhIGZvciB0aGUKKyAqIGNvbW1hbmQgZ29lcyBpbiBiZXR3ZWVuLgorICovCitzdHJ1Y3QgdmlydGlvX25ldF9jdHJsX2hkciB7CisJX191OCBjbGFzczsKKwlfX3U4IGNtZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3R5cGVkZWYgX191OCB2aXJ0aW9fbmV0X2N0cmxfYWNrOworCisjZGVmaW5lIFZJUlRJT19ORVRfT0sgICAgIDAKKyNkZWZpbmUgVklSVElPX05FVF9FUlIgICAgMQorCisvKgorICogQ29udHJvbCB0aGUgUlggbW9kZSwgaWUuIHByb21pc3Vjb3VzIGFuZCBhbGxtdWx0aS4gIFBST01JU0MgYW5kCisgKiBBTExNVUxUSSBjb21tYW5kcyByZXF1aXJlIGFuICJvdXQiIHNnIGVudHJ5IGNvbnRhaW5pbmcgYSAxIGJ5dGUKKyAqIHN0YXRlIHZhbHVlLCB6ZXJvID0gZGlzYWJsZSwgbm9uLXplcm8gPSBlbmFibGUuICBUaGVzZSBjb21tYW5kcworICogYXJlIHN1cHBvcnRlZCB3aXRoIHRoZSBWSVJUSU9fTkVUX0ZfQ1RSTF9SWCBmZWF0dXJlLgorICovCisjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9SWCAgICAwCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfUlhfUFJPTUlTQyAgICAgIDAKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9SWF9BTExNVUxUSSAgICAgMQorCisvKgorICogQ29udHJvbCB0aGUgTUFDIGZpbHRlciB0YWJsZS4KKyAqCisgKiBUaGUgTUFDIGZpbHRlciB0YWJsZSBpcyBtYW5hZ2VkIGJ5IHRoZSBoeXBlcnZpc29yLCB0aGUgZ3Vlc3Qgc2hvdWxkCisgKiBhc3N1bWUgdGhlIHNpemUgaXMgaW5maW5pdGUuICBGaWx0ZXJpbmcgc2hvdWxkIGJlIGNvbnNpZGVyZWQKKyAqIG5vbi1wZXJmZWN0LCBpZS4gYmFzZWQgb24gaHlwZXJ2aXNvciByZXNvdXJjZXMsIHRoZSBndWVzdCBtYXkKKyAqIHJlY2VpdmVkIHBhY2tldHMgZnJvbSBzb3VyY2VzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGZpbHRlciBsaXN0LgorICoKKyAqIEluIGFkZGl0aW9uIHRvIHRoZSBjbGFzcy9jbWQgaGVhZGVyLCB0aGUgVEFCTEVfU0VUIGNvbW1hbmQgcmVxdWlyZXMKKyAqIHR3byBvdXQgc2NhdHRlcmxpc3RzLiAgRWFjaCBjb250YWlucyBhIDQgYnl0ZSBjb3VudCBvZiBlbnRyaWVzIGZvbGxvd2VkCisgKiBieSBhIGNvbmNhdGVuYXRlZCBieXRlIHN0cmVhbSBvZiB0aGUgRVRIX0FMRU4gTUFDIGFkZHJlc3Nlcy4gIFRoZQorICogZmlyc3Qgc2cgbGlzdCBjb250YWlucyB1bmljYXN0IGFkZHJlc3NlcywgdGhlIHNlY29uZCBpcyBmb3IgbXVsdGljYXN0LgorICogVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQgaWYgdGhlIFZJUlRJT19ORVRfRl9DVFJMX1JYIGZlYXR1cmUKKyAqIGlzIGF2YWlsYWJsZS4KKyAqLworc3RydWN0IHZpcnRpb19uZXRfY3RybF9tYWMgeworCV9fdTMyIGVudHJpZXM7CisJX191OCBtYWNzW11bRVRIX0FMRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfTUFDICAgIDEKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9NQUNfVEFCTEVfU0VUICAgICAgICAwCisKKy8qCisgKiBDb250cm9sIFZMQU4gZmlsdGVyaW5nCisgKgorICogVGhlIFZMQU4gZmlsdGVyIHRhYmxlIGlzIGNvbnRyb2xsZWQgdmlhIGEgc2ltcGxlIEFERC9ERUwgaW50ZXJmYWNlLgorICogVkxBTiBJRHMgbm90IGFkZGVkIG1heSBiZSBmaWx0ZXJkIGJ5IHRoZSBoeXBlcnZpc29yLiAgRGVsIGlzIHRoZQorICogb3Bwb3NpdGUgb2YgYWRkLiAgQm90aCBjb21tYW5kcyBleHBlY3QgYW4gb3V0IGVudHJ5IGNvbnRhaW5pbmcgYSAyCisgKiBieXRlIFZMQU4gSUQuICBWTEFOIGZpbHRlcnRpbmcgaXMgYXZhaWxhYmxlIHdpdGggdGhlCisgKiBWSVJUSU9fTkVUX0ZfQ1RSTF9WTEFOIGZlYXR1cmUgYml0LgorICovCisjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9WTEFOICAgICAgIDIKKyAjZGVmaW5lIFZJUlRJT19ORVRfQ1RSTF9WTEFOX0FERCAgICAgICAgICAgICAwCisgI2RlZmluZSBWSVJUSU9fTkVUX0NUUkxfVkxBTl9ERUwgICAgICAgICAgICAgMQorCiAjZW5kaWYgLyogX0xJTlVYX1ZJUlRJT19ORVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93aW1heC9kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC93aW1heC9kZWJ1Zy5oCmluZGV4IGJhMGM0OTMuLmM3MDNlMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2ltYXgvZGVidWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpbWF4L2RlYnVnLmgKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQlXQVJOX09OKDEpOwogCX0gZWxzZQogCQlzbnByaW50ZihoZWFkLCBoZWFkX3NpemUsICIlcyAlczogIiwKLQkJCSBkZXZfZHJpdmVyX3N0cmluZyhkZXYpLCBkZXYtPmJ1c19pZCk7CisJCQkgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSwgZGV2X25hbWUoZGV2KSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaCBiL2luY2x1ZGUvbGludXgvd2ltYXgvaTI0MDBtLmgKaW5kZXggNzQxOThmNS4uZDUxNDhhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aW1heC9pMjQwMG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3dpbWF4L2kyNDAwbS5oCkBAIC0yMDcsNiArMjA3LDcgQEAKIAlJMjQwME1fUFRfVFJBQ0UsCS8qIEZvciBkZXZpY2UgZGVidWcgKi8KIAlJMjQwME1fUFRfUkVTRVRfV0FSTSwJLyogZGV2aWNlIHJlc2V0ICovCiAJSTI0MDBNX1BUX1JFU0VUX0NPTEQsCS8qIFVTQlt0cmFuc3BvcnRdIHJlc2V0LCBsaWtlIHJlY29ubmVjdCAqLworCUkyNDAwTV9QVF9FREFUQSwJLyogRXh0ZW5kZWQgUlggZGF0YSAqLwogCUkyNDAwTV9QVF9JTExFR0FMCiB9OwogCkBAIC0yMjEsNiArMjIyLDQ4IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAKKy8qCisgKiBQYXlsb2FkIGZvciBhbiBleHRlbmRlZCBkYXRhIHBhY2tldAorICoKKyAqIE5ldyBpbiBmdyB2MS40CisgKgorICogQHJlb3JkZXI6IGlmIHRoaXMgcGF5bG9hZCBoYXMgdG8gYmUgcmVvcmRlciBvciBub3QgKGFuZCBob3cpCisgKiBAY3M6IHRoZSB0eXBlIG9mIGRhdGEgaW4gdGhlIHBhY2tldCwgYXMgZGVmaW5lZCBwZXIgKDgwMi4xNmUKKyAqICAgICBUMTEuMTMuMTkuMSkuIEN1cnJlbnRseSBvbmx5IDIgKElQdjQgcGFja2V0KSBzdXBwb3J0ZWQuCisgKgorICogVGhpcyBpcyBwcmVmaXhlZCB0byBlYWNoIGFuZCBldmVyeSBJTkNPTUlORyBEQVRBIHBhY2tldC4KKyAqLworc3RydWN0IGkyNDAwbV9wbF9lZGF0YV9oZHIgeworCV9fbGUzMiByZW9yZGVyOwkJLyogYml0cyBkZWZpbmVkIGluIGkyNDAwbV9ybyAqLworCV9fdTggY3M7CisJX191OCByZXNlcnZlZFsxMV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitlbnVtIGkyNDAwbV9jcyB7CisJSTI0MDBNX0NTX0lQVjRfMCA9IDAsCisJSTI0MDBNX0NTX0lQVjQgPSAyLAorfTsKKworZW51bSBpMjQwMG1fcm8geworCUkyNDAwTV9ST19ORUVERUQgICAgID0gMHgwMSwKKwlJMjQwME1fUk9fVFlQRSAgICAgICA9IDB4MDMsCisJSTI0MDBNX1JPX1RZUEVfU0hJRlQgPSAxLAorCUkyNDAwTV9ST19DSU4gICAgICAgID0gMHgwZiwKKwlJMjQwME1fUk9fQ0lOX1NISUZUICA9IDQsCisJSTI0MDBNX1JPX0ZCTiAgICAgICAgPSAweDA3ZmYsCisJSTI0MDBNX1JPX0ZCTl9TSElGVCAgPSA4LAorCUkyNDAwTV9ST19TTiAgICAgICAgID0gMHgwN2ZmLAorCUkyNDAwTV9ST19TTl9TSElGVCAgID0gMjEsCit9OworCitlbnVtIGkyNDAwbV9yb190eXBlIHsKKwlJMjQwME1fUk9fVFlQRV9SRVNFVCA9IDAsCisJSTI0MDBNX1JPX1RZUEVfUEFDS0VULAorCUkyNDAwTV9ST19UWVBFX1dTLAorCUkyNDAwTV9ST19UWVBFX1BBQ0tFVF9XUywKK307CisKKwogLyogTWlzYyBjb25zdGFudHMgKi8KIGVudW0gewogCUkyNDAwTV9QTF9QQUQgPSAxNiwJLyogUGF5bG9hZCBkYXRhIHNpemUgYWxpZ25tZW50ICovCkBAIC0zODEsNiArNDI0LDkgQEAKIAlJMjQwME1fVExWX1JGX1NUQVRVUyA9IDE2MywKIAlJMjQwME1fVExWX0RFVklDRV9SRVNFVF9UWVBFID0gMTMyLAogCUkyNDAwTV9UTFZfQ09ORklHX0lETEVfUEFSQU1FVEVSUyA9IDYwMSwKKwlJMjQwME1fVExWX0NPTkZJR19JRExFX1RJTUVPVVQgPSA2MTEsCisJSTI0MDBNX1RMVl9DT05GSUdfRDJIX0RBVEFfRk9STUFUID0gNjE0LAorCUkyNDAwTV9UTFZfQ09ORklHX0RMX0hPU1RfUkVPUkRFUiA9IDYxNSwKIH07CiAKIApAQCAtNTA5LDQgKzU1NSwyNyBAQAogCV9fbGUzMiBtZWRpYV9zdGF0dXM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisKKy8qIE5ldyBpbiB2MS40ICovCitzdHJ1Y3QgaTI0MDBtX3Rsdl9jb25maWdfaWRsZV90aW1lb3V0IHsKKwlzdHJ1Y3QgaTI0MDBtX3Rsdl9oZHIgaGRyOworCV9fbGUzMiB0aW1lb3V0OwkvKiAxMDAgdG8gMzAwMDAwIG1zIFs1bWluXSwgMTAwIGluY3JlbWVudHMKKwkJCSAqIDAgZGlzYWJsZWQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qIE5ldyBpbiB2MS40IC0tIGZvciBiYWNrd2FyZCBjb21wYXQsIHdpbGwgYmUgcmVtb3ZlZCAqLworc3RydWN0IGkyNDAwbV90bHZfY29uZmlnX2QyaF9kYXRhX2Zvcm1hdCB7CisJc3RydWN0IGkyNDAwbV90bHZfaGRyIGhkcjsKKwlfX3U4IGZvcm1hdDsgCQkvKiAwIG9sZCBmb3JtYXQsIDEgZW5oYW5jZWQgKi8KKwlfX3U4IHJlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogTmV3IGluIHYxLjQgKi8KK3N0cnVjdCBpMjQwMG1fdGx2X2NvbmZpZ19kbF9ob3N0X3Jlb3JkZXIgeworCXN0cnVjdCBpMjQwMG1fdGx2X2hkciBoZHI7CisJX191OCByZW9yZGVyOyAJCS8qIDAgZGlzYWJsZWQsIDEgZW5hYmxlZCAqLworCV9fdTggcmVzZXJ2ZWRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisKICNlbmRpZiAvKiAjaWZuZGVmIF9fTElOVVhfX1dJTUFYX19JMjQwME1fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmggYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKaW5kZXggZDc5NThmOS4uY2IyNDIwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaApAQCAtNTc3LDE4ICs1NzcsMjIgQEAKICNkZWZpbmUgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTAk4CiAjZGVmaW5lIElXX0FVVEhfUk9BTUlOR19DT05UUk9MCQk5CiAjZGVmaW5lIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VECQkxMAorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9HUk9VUF9NR01UCTExCisjZGVmaW5lIElXX0FVVEhfTUZQCQkJMTIKIAogLyogSVdfQVVUSF9XUEFfVkVSU0lPTiB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KICNkZWZpbmUgSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRAkweDAwMDAwMDAxCiAjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBCQkweDAwMDAwMDAyCiAjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMgkweDAwMDAwMDA0CiAKLS8qIElXX0FVVEhfUEFJUldJU0VfQ0lQSEVSIGFuZCBJV19BVVRIX0dST1VQX0NJUEhFUiB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KKy8qIElXX0FVVEhfUEFJUldJU0VfQ0lQSEVSLCBJV19BVVRIX0dST1VQX0NJUEhFUiwgYW5kIElXX0FVVEhfQ0lQSEVSX0dST1VQX01HTVQKKyAqIHZhbHVlcyAoYml0IGZpZWxkKSAqLwogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9OT05FCTB4MDAwMDAwMDEKICNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfV0VQNDAJMHgwMDAwMDAwMgogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9US0lQCTB4MDAwMDAwMDQKICNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfQ0NNUAkweDAwMDAwMDA4CiAjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX1dFUDEwNAkweDAwMDAwMDEwCisjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX0FFU19DTUFDCTB4MDAwMDAwMjAKIAogLyogSVdfQVVUSF9LRVlfTUdNVCB2YWx1ZXMgKGJpdCBmaWVsZCkgKi8KICNkZWZpbmUgSVdfQVVUSF9LRVlfTUdNVF84MDJfMVgJMQpAQCAtNjA0LDYgKzYwOCwxMSBAQAogI2RlZmluZSBJV19BVVRIX1JPQU1JTkdfRElTQUJMRQkxCS8qIHVzZXIgc3BhY2UgcHJvZ3JhbSB1c2VkIGZvciByb2FtaW5nCiAJCQkJCSAqIGNvbnRyb2wgKi8KIAorLyogSVdfQVVUSF9NRlAgKG1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbikgdmFsdWVzICovCisjZGVmaW5lIElXX0FVVEhfTUZQX0RJU0FCTEVECTAJLyogTUZQIGRpc2FibGVkICovCisjZGVmaW5lIElXX0FVVEhfTUZQX09QVElPTkFMCTEJLyogTUZQIG9wdGlvbmFsICovCisjZGVmaW5lIElXX0FVVEhfTUZQX1JFUVVJUkVECTIJLyogTUZQIHJlcXVpcmVkICovCisKIC8qIFNJT0NTSVdFTkNPREVFWFQgZGVmaW5pdGlvbnMgKi8KICNkZWZpbmUgSVdfRU5DT0RFX1NFUV9NQVhfU0laRQk4CiAvKiBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAtPmFsZyAqLwpAQCAtNjEyLDYgKzYyMSw3IEBACiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfVEtJUAkyCiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfQ0NNUAkzCiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfUE1LCTQKKyNkZWZpbmUgSVdfRU5DT0RFX0FMR19BRVNfQ01BQwk1CiAvKiBzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAtPmV4dF9mbGFncyAqLwogI2RlZmluZSBJV19FTkNPREVfRVhUX1RYX1NFUV9WQUxJRAkweDAwMDAwMDAxCiAjZGVmaW5lIElXX0VOQ09ERV9FWFRfUlhfU0VRX1ZBTElECTB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgveGZybS5oIGIvaW5jbHVkZS9saW51eC94ZnJtLmgKaW5kZXggNTJmM2FiZC4uMmQ0ZWMxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC94ZnJtLmgKKysrIGIvaW5jbHVkZS9saW51eC94ZnJtLmgKQEAgLTU4LDcgKzU4LDcgQEAKIAlfX3U4CXByZWZpeGxlbl9zOwogCV9fdTgJcHJvdG87CiAJaW50CWlmaW5kZXg7Ci0JdWlkX3QJdXNlcjsKKwlfX2tlcm5lbF91aWQzMl90CXVzZXI7CiB9OwogCiAjZGVmaW5lIFhGUk1fSU5GICh+KF9fdTY0KTApCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9pbmZ0bC11c2VyLmggYi9pbmNsdWRlL210ZC9pbmZ0bC11c2VyLmgKaW5kZXggZDQwOWQ0OC4uODM3NmJkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvaW5mdGwtdXNlci5oCisrKyBiL2luY2x1ZGUvbXRkL2luZnRsLXVzZXIuaApAQCAtMTYsMzMgKzE2LDMzIEBACiAvKiBCbG9jayBDb250cm9sIEluZm9ybWF0aW9uICovCiAKIHN0cnVjdCBpbmZ0bF9iY2kgewotCXVpbnQ4X3QgRUNDc2lnWzZdOwotCXVpbnQ4X3QgU3RhdHVzOwotCXVpbnQ4X3QgU3RhdHVzMTsKKwlfX3U4IEVDQ3NpZ1s2XTsKKwlfX3U4IFN0YXR1czsKKwlfX3U4IFN0YXR1czE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgaW5mdGxfdW5pdGhlYWQxIHsKLQl1aW50MTZfdCB2aXJ0dWFsVW5pdE5vOwotCXVpbnQxNl90IHByZXZVbml0Tm87Ci0JdWludDhfdCBBTkFDOwotCXVpbnQ4X3QgTkFDczsKLQl1aW50OF90IHBhcml0eVBlckZpZWxkOwotCXVpbnQ4X3QgZGlzY2FyZGVkOworCV9fdTE2IHZpcnR1YWxVbml0Tm87CisJX191MTYgcHJldlVuaXRObzsKKwlfX3U4IEFOQUM7CisJX191OCBOQUNzOworCV9fdTggcGFyaXR5UGVyRmllbGQ7CisJX191OCBkaXNjYXJkZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgaW5mdGxfdW5pdGhlYWQyIHsKLQl1aW50OF90IHBhcml0eVBlckZpZWxkOwotCXVpbnQ4X3QgQU5BQzsKLQl1aW50MTZfdCBwcmV2VW5pdE5vOwotCXVpbnQxNl90IHZpcnR1YWxVbml0Tm87Ci0JdWludDhfdCBOQUNzOwotCXVpbnQ4X3QgZGlzY2FyZGVkOworCV9fdTggcGFyaXR5UGVyRmllbGQ7CisJX191OCBBTkFDOworCV9fdTE2IHByZXZVbml0Tm87CisJX191MTYgdmlydHVhbFVuaXRObzsKKwlfX3U4IE5BQ3M7CisJX191OCBkaXNjYXJkZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgaW5mdGxfdW5pdHRhaWwgewotCXVpbnQ4X3QgUmVzZXJ2ZWRbNF07Ci0JdWludDE2X3QgRXJhc2VNYXJrOwotCXVpbnQxNl90IEVyYXNlTWFyazE7CisJX191OCBSZXNlcnZlZFs0XTsKKwlfX3UxNiBFcmFzZU1hcms7CisJX191MTYgRXJhc2VNYXJrMTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHVuaW9uIGluZnRsX3VjaSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9qZmZzMi11c2VyLmggYi9pbmNsdWRlL210ZC9qZmZzMi11c2VyLmgKaW5kZXggMDAxNjg1ZC4uZmE5NGIwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvamZmczItdXNlci5oCisrKyBiL2luY2x1ZGUvbXRkL2pmZnMyLXVzZXIuaApAQCAtNyw2ICs3LDcgQEAKIAogLyogVGhpcyBmaWxlIGlzIGJsZXNzZWQgZm9yIGluY2x1c2lvbiBieSB1c2Vyc3BhY2UgKi8KICNpbmNsdWRlIDxsaW51eC9qZmZzMi5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8ZW5kaWFuLmg+CiAjaW5jbHVkZSA8Ynl0ZXN3YXAuaD4KIApAQCAtMTksOCArMjAsOCBAQAogCiBleHRlcm4gaW50IHRhcmdldF9lbmRpYW47CiAKLSNkZWZpbmUgdDE2KHgpICh7IHVpbnQxNl90IF9fYiA9ICh4KTsgKHRhcmdldF9lbmRpYW49PV9fQllURV9PUkRFUik/X19iOmJzd2FwXzE2KF9fYik7IH0pCi0jZGVmaW5lIHQzMih4KSAoeyB1aW50MzJfdCBfX2IgPSAoeCk7ICh0YXJnZXRfZW5kaWFuPT1fX0JZVEVfT1JERVIpP19fYjpic3dhcF8zMihfX2IpOyB9KQorI2RlZmluZSB0MTYoeCkgKHsgX191MTYgX19iID0gKHgpOyAodGFyZ2V0X2VuZGlhbj09X19CWVRFX09SREVSKT9fX2I6YnN3YXBfMTYoX19iKTsgfSkKKyNkZWZpbmUgdDMyKHgpICh7IF9fdTMyIF9fYiA9ICh4KTsgKHRhcmdldF9lbmRpYW49PV9fQllURV9PUkRFUik/X19iOmJzd2FwXzMyKF9fYik7IH0pCiAKICNkZWZpbmUgY3B1X3RvX2plMTYoeCkgKChqaW50MTZfdCl7dDE2KHgpfSkKICNkZWZpbmUgY3B1X3RvX2plMzIoeCkgKChqaW50MzJfdCl7dDMyKHgpfSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL210ZC1hYmkuaCBiL2luY2x1ZGUvbXRkL210ZC1hYmkuaAppbmRleCBjNmM2MWNkLi5iNjU5NWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9tdGQtYWJpLmgKKysrIGIvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCkBAIC01LDE0ICs1LDE2IEBACiAjaWZuZGVmIF9fTVREX0FCSV9IX18KICNkZWZpbmUgX19NVERfQUJJX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IGVyYXNlX2luZm9fdXNlciB7Ci0JdWludDMyX3Qgc3RhcnQ7Ci0JdWludDMyX3QgbGVuZ3RoOworCV9fdTMyIHN0YXJ0OworCV9fdTMyIGxlbmd0aDsKIH07CiAKIHN0cnVjdCBtdGRfb29iX2J1ZiB7Ci0JdWludDMyX3Qgc3RhcnQ7Ci0JdWludDMyX3QgbGVuZ3RoOworCV9fdTMyIHN0YXJ0OworCV9fdTMyIGxlbmd0aDsKIAl1bnNpZ25lZCBjaGFyIF9fdXNlciAqcHRyOwogfTsKIApAQCAtNDgsMzAgKzUwLDMwIEBACiAjZGVmaW5lIE1URF9PVFBfVVNFUgkJMgogCiBzdHJ1Y3QgbXRkX2luZm9fdXNlciB7Ci0JdWludDhfdCB0eXBlOwotCXVpbnQzMl90IGZsYWdzOwotCXVpbnQzMl90IHNpemU7CSAvLyBUb3RhbCBzaXplIG9mIHRoZSBNVEQKLQl1aW50MzJfdCBlcmFzZXNpemU7Ci0JdWludDMyX3Qgd3JpdGVzaXplOwotCXVpbnQzMl90IG9vYnNpemU7ICAgLy8gQW1vdW50IG9mIE9PQiBkYXRhIHBlciBibG9jayAoZS5nLiAxNikKKwlfX3U4IHR5cGU7CisJX191MzIgZmxhZ3M7CisJX191MzIgc2l6ZTsJIC8vIFRvdGFsIHNpemUgb2YgdGhlIE1URAorCV9fdTMyIGVyYXNlc2l6ZTsKKwlfX3UzMiB3cml0ZXNpemU7CisJX191MzIgb29ic2l6ZTsgICAvLyBBbW91bnQgb2YgT09CIGRhdGEgcGVyIGJsb2NrIChlLmcuIDE2KQogCS8qIFRoZSBiZWxvdyB0d28gZmllbGRzIGFyZSBvYnNvbGV0ZSBhbmQgYnJva2VuLCBkbyBub3QgdXNlIHRoZW0KIAkgKiAoVE9ETzogcmVtb3ZlIGF0IHNvbWUgcG9pbnQpICovCi0JdWludDMyX3QgZWNjdHlwZTsKLQl1aW50MzJfdCBlY2NzaXplOworCV9fdTMyIGVjY3R5cGU7CisJX191MzIgZWNjc2l6ZTsKIH07CiAKIHN0cnVjdCByZWdpb25faW5mb191c2VyIHsKLQl1aW50MzJfdCBvZmZzZXQ7CQkvKiBBdCB3aGljaCB0aGlzIHJlZ2lvbiBzdGFydHMsCisJX191MzIgb2Zmc2V0OwkJLyogQXQgd2hpY2ggdGhpcyByZWdpb24gc3RhcnRzLAogCQkJCQkgKiBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIE1URCAqLwotCXVpbnQzMl90IGVyYXNlc2l6ZTsJCS8qIEZvciB0aGlzIHJlZ2lvbiAqLwotCXVpbnQzMl90IG51bWJsb2NrczsJCS8qIE51bWJlciBvZiBibG9ja3MgaW4gdGhpcyByZWdpb24gKi8KLQl1aW50MzJfdCByZWdpb25pbmRleDsKKwlfX3UzMiBlcmFzZXNpemU7CQkvKiBGb3IgdGhpcyByZWdpb24gKi8KKwlfX3UzMiBudW1ibG9ja3M7CQkvKiBOdW1iZXIgb2YgYmxvY2tzIGluIHRoaXMgcmVnaW9uICovCisJX191MzIgcmVnaW9uaW5kZXg7CiB9OwogCiBzdHJ1Y3Qgb3RwX2luZm8gewotCXVpbnQzMl90IHN0YXJ0OwotCXVpbnQzMl90IGxlbmd0aDsKLQl1aW50MzJfdCBsb2NrZWQ7CisJX191MzIgc3RhcnQ7CisJX191MzIgbGVuZ3RoOworCV9fdTMyIGxvY2tlZDsKIH07CiAKICNkZWZpbmUgTUVNR0VUSU5GTwkJX0lPUignTScsIDEsIHN0cnVjdCBtdGRfaW5mb191c2VyKQpAQCAtODQsOCArODYsOCBAQAogI2RlZmluZSBNRU1HRVRSRUdJT05JTkZPCV9JT1dSKCdNJywgOCwgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIpCiAjZGVmaW5lIE1FTVNFVE9PQlNFTAkJX0lPVygnTScsIDksIHN0cnVjdCBuYW5kX29vYmluZm8pCiAjZGVmaW5lIE1FTUdFVE9PQlNFTAkJX0lPUignTScsIDEwLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvKQotI2RlZmluZSBNRU1HRVRCQURCTE9DSwkJX0lPVygnTScsIDExLCBsb2ZmX3QpCi0jZGVmaW5lIE1FTVNFVEJBREJMT0NLCQlfSU9XKCdNJywgMTIsIGxvZmZfdCkKKyNkZWZpbmUgTUVNR0VUQkFEQkxPQ0sJCV9JT1coJ00nLCAxMSwgX19rZXJuZWxfbG9mZl90KQorI2RlZmluZSBNRU1TRVRCQURCTE9DSwkJX0lPVygnTScsIDEyLCBfX2tlcm5lbF9sb2ZmX3QpCiAjZGVmaW5lIE9UUFNFTEVDVAkJX0lPUignTScsIDEzLCBpbnQpCiAjZGVmaW5lIE9UUEdFVFJFR0lPTkNPVU5UCV9JT1coJ00nLCAxNCwgaW50KQogI2RlZmluZSBPVFBHRVRSRUdJT05JTkZPCV9JT1coJ00nLCAxNSwgc3RydWN0IG90cF9pbmZvKQpAQCAtOTksMTUgKzEwMSwxNSBAQAogICogaW50ZXJmYWNlcwogICovCiBzdHJ1Y3QgbmFuZF9vb2JpbmZvIHsKLQl1aW50MzJfdCB1c2VlY2M7Ci0JdWludDMyX3QgZWNjYnl0ZXM7Ci0JdWludDMyX3Qgb29iZnJlZVs4XVsyXTsKLQl1aW50MzJfdCBlY2Nwb3NbMzJdOworCV9fdTMyIHVzZWVjYzsKKwlfX3UzMiBlY2NieXRlczsKKwlfX3UzMiBvb2JmcmVlWzhdWzJdOworCV9fdTMyIGVjY3Bvc1szMl07CiB9OwogCiBzdHJ1Y3QgbmFuZF9vb2JmcmVlIHsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0JdWludDMyX3QgbGVuZ3RoOworCV9fdTMyIG9mZnNldDsKKwlfX3UzMiBsZW5ndGg7CiB9OwogCiAjZGVmaW5lIE1URF9NQVhfT09CRlJFRV9FTlRSSUVTCTgKQEAgLTExNiw5ICsxMTgsOSBAQAogICogZGlhZ25vc2lzIGFuZCB0byBhbGxvdyBjcmVhdGlvbiBvZiByYXcgaW1hZ2VzCiAgKi8KIHN0cnVjdCBuYW5kX2VjY2xheW91dCB7Ci0JdWludDMyX3QgZWNjYnl0ZXM7Ci0JdWludDMyX3QgZWNjcG9zWzY0XTsKLQl1aW50MzJfdCBvb2JhdmFpbDsKKwlfX3UzMiBlY2NieXRlczsKKwlfX3UzMiBlY2Nwb3NbNjRdOworCV9fdTMyIG9vYmF2YWlsOwogCXN0cnVjdCBuYW5kX29vYmZyZWUgb29iZnJlZVtNVERfTUFYX09PQkZSRUVfRU5UUklFU107CiB9OwogCkBAIC0xMzEsMTAgKzEzMywxMCBAQAogICogQGJidGJsb2NrczoJbnVtYmVyIG9mIGJsb2NrcyByZXNlcnZlZCBmb3IgYmFkIGJsb2NrIHRhYmxlcwogICovCiBzdHJ1Y3QgbXRkX2VjY19zdGF0cyB7Ci0JdWludDMyX3QgY29ycmVjdGVkOwotCXVpbnQzMl90IGZhaWxlZDsKLQl1aW50MzJfdCBiYWRibG9ja3M7Ci0JdWludDMyX3QgYmJ0YmxvY2tzOworCV9fdTMyIGNvcnJlY3RlZDsKKwlfX3UzMiBmYWlsZWQ7CisJX191MzIgYmFkYmxvY2tzOworCV9fdTMyIGJidGJsb2NrczsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9uZnRsLXVzZXIuaCBiL2luY2x1ZGUvbXRkL25mdGwtdXNlci5oCmluZGV4IDM5MGQyMWMuLjk4ZTllNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL25mdGwtdXNlci5oCisrKyBiL2luY2x1ZGUvbXRkL25mdGwtdXNlci5oCkBAIC02LDMzICs2LDM1IEBACiAjaWZuZGVmIF9fTVREX05GVExfVVNFUl9IX18KICNkZWZpbmUgX19NVERfTkZUTF9VU0VSX0hfXwogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogQmxvY2sgQ29udHJvbCBJbmZvcm1hdGlvbiAqLwogCiBzdHJ1Y3QgbmZ0bF9iY2kgewogCXVuc2lnbmVkIGNoYXIgRUNDU2lnWzZdOwotCXVpbnQ4X3QgU3RhdHVzOwotCXVpbnQ4X3QgU3RhdHVzMTsKKwlfX3U4IFN0YXR1czsKKwlfX3U4IFN0YXR1czE7CiB9X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIC8qIFVuaXQgQ29udHJvbCBJbmZvcm1hdGlvbiAqLwogCiBzdHJ1Y3QgbmZ0bF91Y2kwIHsKLQl1aW50MTZfdCBWaXJ0VW5pdE51bTsKLQl1aW50MTZfdCBSZXBsVW5pdE51bTsKLQl1aW50MTZfdCBTcGFyZVZpcnRVbml0TnVtOwotCXVpbnQxNl90IFNwYXJlUmVwbFVuaXROdW07CisJX191MTYgVmlydFVuaXROdW07CisJX191MTYgUmVwbFVuaXROdW07CisJX191MTYgU3BhcmVWaXJ0VW5pdE51bTsKKwlfX3UxNiBTcGFyZVJlcGxVbml0TnVtOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IG5mdGxfdWNpMSB7Ci0JdWludDMyX3QgV2VhckluZm87Ci0JdWludDE2X3QgRXJhc2VNYXJrOwotCXVpbnQxNl90IEVyYXNlTWFyazE7CisJX191MzIgV2VhckluZm87CisJX191MTYgRXJhc2VNYXJrOworCV9fdTE2IEVyYXNlTWFyazE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgbmZ0bF91Y2kyIHsKLSAgICAgICAgdWludDE2X3QgRm9sZE1hcms7Ci0gICAgICAgIHVpbnQxNl90IEZvbGRNYXJrMTsKLQl1aW50MzJfdCB1bnVzZWQ7CisgICAgICAgIF9fdTE2IEZvbGRNYXJrOworICAgICAgICBfX3UxNiBGb2xkTWFyazE7CisJX191MzIgdW51c2VkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogdW5pb24gbmZ0bF91Y2kgewpAQCAtNTAsOSArNTIsOSBAQAogCiBzdHJ1Y3QgTkZUTE1lZGlhSGVhZGVyIHsKIAljaGFyIERhdGFPcmdJRFs2XTsKLQl1aW50MTZfdCBOdW1FcmFzZVVuaXRzOwotCXVpbnQxNl90IEZpcnN0UGh5c2ljYWxFVU47Ci0JdWludDMyX3QgRm9ybWF0dGVkU2l6ZTsKKwlfX3UxNiBOdW1FcmFzZVVuaXRzOworCV9fdTE2IEZpcnN0UGh5c2ljYWxFVU47CisJX191MzIgRm9ybWF0dGVkU2l6ZTsKIAl1bnNpZ25lZCBjaGFyIFVuaXRTaXplRmFjdG9yOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaCBiL2luY2x1ZGUvbXRkL3ViaS11c2VyLmgKaW5kZXggMjk2ZWZhZS4uNDY2YTgzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvdWJpLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC91YmktdXNlci5oCkBAIC0yMSw2ICsyMSw4IEBACiAjaWZuZGVmIF9fVUJJX1VTRVJfSF9fCiAjZGVmaW5lIF9fVUJJX1VTRVJfSF9fCiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCiAvKgogICogVUJJIGRldmljZSBjcmVhdGlvbiAodGhlIHNhbWUgYXMgTVREIGRldmljZSBhdHRhY2htZW50KQogICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTE1Miw3ICsxNTQsNyBAQAogLyogQ3JlYXRlIGFuIFVCSSB2b2x1bWUgKi8KICNkZWZpbmUgVUJJX0lPQ01LVk9MIF9JT1coVUJJX0lPQ19NQUdJQywgMCwgc3RydWN0IHViaV9ta3ZvbF9yZXEpCiAvKiBSZW1vdmUgYW4gVUJJIHZvbHVtZSAqLwotI2RlZmluZSBVQklfSU9DUk1WT0wgX0lPVyhVQklfSU9DX01BR0lDLCAxLCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DUk1WT0wgX0lPVyhVQklfSU9DX01BR0lDLCAxLCBfX3MzMikKIC8qIFJlLXNpemUgYW4gVUJJIHZvbHVtZSAqLwogI2RlZmluZSBVQklfSU9DUlNWT0wgX0lPVyhVQklfSU9DX01BR0lDLCAyLCBzdHJ1Y3QgdWJpX3Jzdm9sX3JlcSkKIC8qIFJlLW5hbWUgdm9sdW1lcyAqLwpAQCAtMTY1LDI0ICsxNjcsMjQgQEAKIC8qIEF0dGFjaCBhbiBNVEQgZGV2aWNlICovCiAjZGVmaW5lIFVCSV9JT0NBVFQgX0lPVyhVQklfQ1RSTF9JT0NfTUFHSUMsIDY0LCBzdHJ1Y3QgdWJpX2F0dGFjaF9yZXEpCiAvKiBEZXRhY2ggYW4gTVREIGRldmljZSAqLwotI2RlZmluZSBVQklfSU9DREVUIF9JT1coVUJJX0NUUkxfSU9DX01BR0lDLCA2NSwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ0RFVCBfSU9XKFVCSV9DVFJMX0lPQ19NQUdJQywgNjUsIF9fczMyKQogCiAvKiBpb2N0bCBjb21tYW5kcyBvZiBVQkkgdm9sdW1lIGNoYXJhY3RlciBkZXZpY2VzICovCiAKICNkZWZpbmUgVUJJX1ZPTF9JT0NfTUFHSUMgJ08nCiAKIC8qIFN0YXJ0IFVCSSB2b2x1bWUgdXBkYXRlICovCi0jZGVmaW5lIFVCSV9JT0NWT0xVUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAwLCBpbnQ2NF90KQorI2RlZmluZSBVQklfSU9DVk9MVVAgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMCwgX19zNjQpCiAvKiBMRUIgZXJhc3VyZSBjb21tYW5kLCB1c2VkIGZvciBkZWJ1Z2dpbmcsIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KLSNkZWZpbmUgVUJJX0lPQ0VCRVIgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMSwgaW50MzJfdCkKKyNkZWZpbmUgVUJJX0lPQ0VCRVIgX0lPVyhVQklfVk9MX0lPQ19NQUdJQywgMSwgX19zMzIpCiAvKiBBdG9taWMgTEVCIGNoYW5nZSBjb21tYW5kICovCi0jZGVmaW5lIFVCSV9JT0NFQkNIIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDIsIGludDMyX3QpCisjZGVmaW5lIFVCSV9JT0NFQkNIIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDIsIF9fczMyKQogLyogTWFwIExFQiBjb21tYW5kICovCiAjZGVmaW5lIFVCSV9JT0NFQk1BUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCAzLCBzdHJ1Y3QgdWJpX21hcF9yZXEpCiAvKiBVbm1hcCBMRUIgY29tbWFuZCAqLwotI2RlZmluZSBVQklfSU9DRUJVTk1BUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCA0LCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DRUJVTk1BUCBfSU9XKFVCSV9WT0xfSU9DX01BR0lDLCA0LCBfX3MzMikKIC8qIENoZWNrIGlmIExFQiBpcyBtYXBwZWQgY29tbWFuZCAqLwotI2RlZmluZSBVQklfSU9DRUJJU01BUCBfSU9SKFVCSV9WT0xfSU9DX01BR0lDLCA1LCBpbnQzMl90KQorI2RlZmluZSBVQklfSU9DRUJJU01BUCBfSU9SKFVCSV9WT0xfSU9DX01BR0lDLCA1LCBfX3MzMikKIC8qIFNldCBhbiBVQkkgdm9sdW1lIHByb3BlcnR5ICovCiAjZGVmaW5lIFVCSV9JT0NTRVRQUk9QIF9JT1coVUJJX1ZPTF9JT0NfTUFHSUMsIDYsIHN0cnVjdCB1Ymlfc2V0X3Byb3BfcmVxKQogCkBAIC0yNjAsMTAgKzI2MiwxMCBAQAogICogc3ViLXBhZ2Ugb2YgdGhlIGZpcnN0IHBhZ2UgYW5kIGFkZCBuZWVkZWQgcGFkZGluZy4KICAqLwogc3RydWN0IHViaV9hdHRhY2hfcmVxIHsKLQlpbnQzMl90IHViaV9udW07Ci0JaW50MzJfdCBtdGRfbnVtOwotCWludDMyX3QgdmlkX2hkcl9vZmZzZXQ7Ci0JaW50OF90IHBhZGRpbmdbMTJdOworCV9fczMyIHViaV9udW07CisJX19zMzIgbXRkX251bTsKKwlfX3MzMiB2aWRfaGRyX29mZnNldDsKKwlfX3M4IHBhZGRpbmdbMTJdOwogfTsKIAogLyoqCkBAIC0yOTgsMTMgKzMwMCwxMyBAQAogICogQkxPQnMsIHdpdGhvdXQgY2FyaW5nIGFib3V0IGhvdyB0byBwcm9wZXJseSBhbGlnbiB0aGVtLgogICovCiBzdHJ1Y3QgdWJpX21rdm9sX3JlcSB7Ci0JaW50MzJfdCB2b2xfaWQ7Ci0JaW50MzJfdCBhbGlnbm1lbnQ7Ci0JaW50NjRfdCBieXRlczsKLQlpbnQ4X3Qgdm9sX3R5cGU7Ci0JaW50OF90IHBhZGRpbmcxOwotCWludDE2X3QgbmFtZV9sZW47Ci0JaW50OF90IHBhZGRpbmcyWzRdOworCV9fczMyIHZvbF9pZDsKKwlfX3MzMiBhbGlnbm1lbnQ7CisJX19zNjQgYnl0ZXM7CisJX19zOCB2b2xfdHlwZTsKKwlfX3M4IHBhZGRpbmcxOworCV9fczE2IG5hbWVfbGVuOworCV9fczggcGFkZGluZzJbNF07CiAJY2hhciBuYW1lW1VCSV9NQVhfVk9MVU1FX05BTUUgKyAxXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0zMjAsOCArMzIyLDggQEAKICAqIHplcm8gbnVtYmVyIG9mIGJ5dGVzKS4KICAqLwogc3RydWN0IHViaV9yc3ZvbF9yZXEgewotCWludDY0X3QgYnl0ZXM7Ci0JaW50MzJfdCB2b2xfaWQ7CisJX19zNjQgYnl0ZXM7CisJX19zMzIgdm9sX2lkOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qKgpAQCAtMzU2LDEyICszNTgsMTIgQEAKICAqIHJlLW5hbWUgcmVxdWVzdC4KICAqLwogc3RydWN0IHViaV9ybnZvbF9yZXEgewotCWludDMyX3QgY291bnQ7Ci0JaW50OF90IHBhZGRpbmcxWzEyXTsKKwlfX3MzMiBjb3VudDsKKwlfX3M4IHBhZGRpbmcxWzEyXTsKIAlzdHJ1Y3QgewotCQlpbnQzMl90IHZvbF9pZDsKLQkJaW50MTZfdCBuYW1lX2xlbjsKLQkJaW50OF90ICBwYWRkaW5nMlsyXTsKKwkJX19zMzIgdm9sX2lkOworCQlfX3MxNiBuYW1lX2xlbjsKKwkJX19zOCAgcGFkZGluZzJbMl07CiAJCWNoYXIgICAgbmFtZVtVQklfTUFYX1ZPTFVNRV9OQU1FICsgMV07CiAJfSBlbnRzW1VCSV9NQVhfUk5WT0xdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CkBAIC0zNzUsMTAgKzM3NywxMCBAQAogICogQHBhZGRpbmc6IHJlc2VydmVkIGZvciBmdXR1cmUsIG5vdCB1c2VkLCBoYXMgdG8gYmUgemVyb2VkCiAgKi8KIHN0cnVjdCB1YmlfbGViX2NoYW5nZV9yZXEgewotCWludDMyX3QgbG51bTsKLQlpbnQzMl90IGJ5dGVzOwotCWludDhfdCAgZHR5cGU7Ci0JaW50OF90ICBwYWRkaW5nWzddOworCV9fczMyIGxudW07CisJX19zMzIgYnl0ZXM7CisJX19zOCAgZHR5cGU7CisJX19zOCAgcGFkZGluZ1s3XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKioKQEAgLTM4OCw5ICszOTAsOSBAQAogICogQHBhZGRpbmc6IHJlc2VydmVkIGZvciBmdXR1cmUsIG5vdCB1c2VkLCBoYXMgdG8gYmUgemVyb2VkCiAgKi8KIHN0cnVjdCB1YmlfbWFwX3JlcSB7Ci0JaW50MzJfdCBsbnVtOwotCWludDhfdCAgZHR5cGU7Ci0JaW50OF90ICBwYWRkaW5nWzNdOworCV9fczMyIGxudW07CisJX19zOCAgZHR5cGU7CisJX19zOCAgcGFkZGluZ1szXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAKQEAgLTQwMiw5ICs0MDQsOSBAQAogICogQHZhbHVlOiB2YWx1ZSB0byBzZXQKICAqLwogc3RydWN0IHViaV9zZXRfcHJvcF9yZXEgewotICAgICAgIHVpbnQ4X3QgIHByb3BlcnR5OwotICAgICAgIHVpbnQ4X3QgIHBhZGRpbmdbN107Ci0gICAgICAgdWludDY0X3QgdmFsdWU7CisgICAgICAgX191OCAgcHJvcGVydHk7CisgICAgICAgX191OCAgcGFkZGluZ1s3XTsKKyAgICAgICBfX3U2NCB2YWx1ZTsKIH0gIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2VuZGlmIC8qIF9fVUJJX1VTRVJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAppbmRleCBjMjE2ZGU1Li43YjU1YWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oCisrKyBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKQEAgLTg4LDggKzg4LDggQEAKIGV4dGVybiBpbnQJCQlpcHY2X2dldF9sbGFkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCXN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJCQkJCXVuc2lnbmVkIGNoYXIgYmFubmVkX2ZsYWdzKTsKLWV4dGVybiBpbnQJCQlpcHY2X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIAotCQkJCQkJICAgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrMik7CitleHRlcm4gaW50IAkJCWlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywKKwkJCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKTsKIGV4dGVybiB2b2lkCQkJYWRkcmNvbmZfam9pbl9zb2xpY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IGluNl9hZGRyICphZGRyKTsKIGV4dGVybiB2b2lkCQkJYWRkcmNvbmZfbGVhdmVfc29saWN0KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hdG1jbGlwLmggYi9pbmNsdWRlL25ldC9hdG1jbGlwLmgKaW5kZXggYjVhNTFhNy4uNDY3YzUzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXRtY2xpcC5oCisrKyBiL2luY2x1ZGUvbmV0L2F0bWNsaXAuaApAQCAtNTAsNyArNTAsNiBAQAogc3RydWN0IGNsaXBfcHJpdiB7CiAJaW50IG51bWJlcjsJCQkvKiBmb3IgY29udmVuaWVuY2UgLi4uICovCiAJc3BpbmxvY2tfdCB4b2ZmX2xvY2s7CQkvKiBlbnN1cmVzIHRoYXQgcG9wIGlzIGF0b21pYyAoU01QKSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXh0OwkvKiBuZXh0IENMSVAgaW50ZXJmYWNlICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9heDg4Nzk2LmggYi9pbmNsdWRlL25ldC9heDg4Nzk2LmgKaW5kZXggNTEzMjlkYS4uYjlhM2JlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXg4ODc5Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2F4ODg3OTYuaApAQCAtMTUsMTQgKzE1LDE3IEBACiAjZGVmaW5lIEFYRkxHX0hBU19FRVBST00JCSgxPDwwKQogI2RlZmluZSBBWEZMR19NQUNfRlJPTURFVgkJKDE8PDEpCS8qIGRldmljZSBhbHJlYWR5IGhhcyBNQUMgKi8KICNkZWZpbmUgQVhGTEdfSEFTXzkzQ1g2CQkJKDE8PDIpCS8qIHVzZSBlZXByb21fOTNjeDYgZHJpdmVyICovCisjZGVmaW5lIEFYRkxHX01BQ19GUk9NUExBVEZPUk0JCSgxPDwzKQkvKiBNQUMgZ2l2ZW4gYnkgcGxhdGZvcm0gZGF0YSAqLwogCiBzdHJ1Y3QgYXhfcGxhdF9kYXRhIHsKIAl1bnNpZ25lZCBpbnQJIGZsYWdzOwotCXVuc2lnbmVkIGNoYXIJIHdvcmRsZW5ndGg7CQkvKiAxIG9yIDIgKi8KLQl1bnNpZ25lZCBjaGFyCSBkY3JfdmFsOwkJLyogZGVmYXVsdCB2YWx1ZSBmb3IgRENSICovCi0JdW5zaWduZWQgY2hhcgkgcmNyX3ZhbDsJCS8qIGRlZmF1bHQgdmFsdWUgZm9yIFJDUiAqLwotCXVuc2lnbmVkIGNoYXIJIGdwb2NfdmFsOwkJLyogZGVmYXVsdCB2YWx1ZSBmb3IgR1BPQyAqLwotCXUzMgkJKnJlZ19vZmZzZXRzOwkJLyogcmVnaXN0ZXIgb2Zmc2V0cyAqLworCXVuc2lnbmVkIGNoYXIJIHdvcmRsZW5ndGg7CS8qIDEgb3IgMiAqLworCXVuc2lnbmVkIGNoYXIJIGRjcl92YWw7CS8qIGRlZmF1bHQgdmFsdWUgZm9yIERDUiAqLworCXVuc2lnbmVkIGNoYXIJIHJjcl92YWw7CS8qIGRlZmF1bHQgdmFsdWUgZm9yIFJDUiAqLworCXVuc2lnbmVkIGNoYXIJIGdwb2NfdmFsOwkvKiBkZWZhdWx0IHZhbHVlIGZvciBHUE9DICovCisJdTMyCQkqcmVnX29mZnNldHM7CS8qIHJlZ2lzdGVyIG9mZnNldHMgKi8KKwl1OAkJKm1hY19hZGRyOwkvKiBNQUMgYWRkciAob25seSB1c2VkIHdoZW4KKwkJCQkJICAgQVhGTEdfTUFDX0ZST01QTEFURk9STSBpcyB1c2VkICovCiB9OwogCiAjZW5kaWYgLyogX19ORVRfQVg4ODc5Nl9QTEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaAppbmRleCBhMDRmODQ2Li4zYWQ1MzkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCkBAIC01Myw2ICs1MywxNyBAQAogI2RlZmluZSBTT0xfU0NPCQkxNwogI2RlZmluZSBTT0xfUkZDT01NCTE4CiAKKyNkZWZpbmUgQlRfU0VDVVJJVFkJNAorc3RydWN0IGJ0X3NlY3VyaXR5IHsKKwlfX3U4IGxldmVsOworfTsKKyNkZWZpbmUgQlRfU0VDVVJJVFlfU0RQCQkwCisjZGVmaW5lIEJUX1NFQ1VSSVRZX0xPVwkJMQorI2RlZmluZSBCVF9TRUNVUklUWV9NRURJVU0JMgorI2RlZmluZSBCVF9TRUNVUklUWV9ISUdICTMKKworI2RlZmluZSBCVF9ERUZFUl9TRVRVUAk3CisKICNkZWZpbmUgQlRfSU5GTyhmbXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAiQmx1ZXRvb3RoOiAiIGZtdCAiXG4iICwgIyMgYXJnKQogI2RlZmluZSBCVF9FUlIoZm10LCBhcmcuLi4pICBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCAiXG4iICwgX19mdW5jX18gLCAjIyBhcmcpCiAjZGVmaW5lIEJUX0RCRyhmbXQsIGFyZy4uLikgIHByX2RlYnVnKCIlczogIiBmbXQgIlxuIiAsIF9fZnVuY19fICwgIyMgYXJnKQpAQCAtMTA4LDYgKzExOSw3IEBACiAJYmRhZGRyX3QgICAgZHN0OwogCXN0cnVjdCBsaXN0X2hlYWQgYWNjZXB0X3E7CiAJc3RydWN0IHNvY2sgKnBhcmVudDsKKwl1MzIgZGVmZXJfc2V0dXA7CiB9OwogCiBzdHJ1Y3QgYnRfc29ja19saXN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAppbmRleCAzNjQ1MTM5Li5mNjlmMDE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCkBAIC0xMzMsOCArMTMzLDEzIEBACiAjZGVmaW5lIEVTQ09fRVYzCTB4MDAwOAogI2RlZmluZSBFU0NPX0VWNAkweDAwMTAKICNkZWZpbmUgRVNDT19FVjUJMHgwMDIwCisjZGVmaW5lIEVTQ09fMkVWMwkweDAwNDAKKyNkZWZpbmUgRVNDT18zRVYzCTB4MDA4MAorI2RlZmluZSBFU0NPXzJFVjUJMHgwMTAwCisjZGVmaW5lIEVTQ09fM0VWNQkweDAyMDAKIAogI2RlZmluZSBTQ09fRVNDT19NQVNLICAoRVNDT19IVjEgfCBFU0NPX0hWMiB8IEVTQ09fSFYzKQorI2RlZmluZSBFRFJfRVNDT19NQVNLICAoRVNDT18yRVYzIHwgRVNDT18zRVYzIHwgRVNDT18yRVY1IHwgRVNDT18zRVY1KQogCiAvKiBBQ0wgZmxhZ3MgKi8KICNkZWZpbmUgQUNMX0NPTlQJCTB4MDEKQEAgLTE3Niw2ICsxODEsOSBAQAogI2RlZmluZSBMTVBfRVY1CQkweDAyCiAKICNkZWZpbmUgTE1QX1NOSUZGX1NVQlIJMHgwMgorI2RlZmluZSBMTVBfRURSX0VTQ09fMk0JMHgyMAorI2RlZmluZSBMTVBfRURSX0VTQ09fM00JMHg0MAorI2RlZmluZSBMTVBfRURSXzNTX0VTQ08JMHg4MAogCiAjZGVmaW5lIExNUF9TSU1QTEVfUEFJUgkweDA4CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKaW5kZXggNDZhNDNiNy4uMDFmOTMxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKQEAgLTE2OSw2ICsxNjksNyBAQAogCV9fdTE2ICAgICAgICAgICAgbGlua19wb2xpY3k7CiAJX191MzIJCSBsaW5rX21vZGU7CiAJX191OCAgICAgICAgICAgICBhdXRoX3R5cGU7CisJX191OCAgICAgICAgICAgICBzZWNfbGV2ZWw7CiAJX191OCAgICAgICAgICAgICBwb3dlcl9zYXZlOwogCXVuc2lnbmVkIGxvbmcJIHBlbmQ7CiAKQEAgLTMyNSwxMiArMzI2LDExIEBACiB2b2lkIGhjaV9jb25uX2hhc2hfZmx1c2goc3RydWN0IGhjaV9kZXYgKmhkZXYpOwogdm9pZCBoY2lfY29ubl9jaGVja19wZW5kaW5nKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKIAotc3RydWN0IGhjaV9jb25uICpoY2lfY29ubmVjdChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgaW50IHR5cGUsIGJkYWRkcl90ICpkc3QsIF9fdTggYXV0aF90eXBlKTsKK3N0cnVjdCBoY2lfY29ubiAqaGNpX2Nvbm5lY3Qoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCB0eXBlLCBiZGFkZHJfdCAqZHN0LCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpOwogaW50IGhjaV9jb25uX2NoZWNrX2xpbmtfbW9kZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwotaW50IGhjaV9jb25uX2F1dGgoc3RydWN0IGhjaV9jb25uICpjb25uKTsKLWludCBoY2lfY29ubl9lbmNyeXB0KHN0cnVjdCBoY2lfY29ubiAqY29ubik7CitpbnQgaGNpX2Nvbm5fc2VjdXJpdHkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUpOwogaW50IGhjaV9jb25uX2NoYW5nZV9saW5rX2tleShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwotaW50IGhjaV9jb25uX3N3aXRjaF9yb2xlKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdWludDhfdCByb2xlKTsKK2ludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcm9sZSk7CiAKIHZvaWQgaGNpX2Nvbm5fZW50ZXJfYWN0aXZlX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uKTsKIHZvaWQgaGNpX2Nvbm5fZW50ZXJfc25pZmZfbW9kZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwpAQCAtNDcwLDI2ICs0NzAsMjYgQEAKIAogLyogLS0tLS0gSENJIHByb3RvY29scyAtLS0tLSAqLwogc3RydWN0IGhjaV9wcm90byB7Ci0JY2hhciAJCSpuYW1lOworCWNoYXIJCSpuYW1lOwogCXVuc2lnbmVkIGludAlpZDsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJdm9pZAkJKnByaXY7CiAKLQlpbnQgKCpjb25uZWN0X2luZCkgCShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgX191OCB0eXBlKTsKKwlpbnQgKCpjb25uZWN0X2luZCkJKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCBfX3U4IHR5cGUpOwogCWludCAoKmNvbm5lY3RfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cyk7Ci0JaW50ICgqZGlzY29ubl9pbmQpCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcmVhc29uKTsKKwlpbnQgKCpkaXNjb25uX2luZCkJKHN0cnVjdCBoY2lfY29ubiAqY29ubik7CisJaW50ICgqZGlzY29ubl9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcmVhc29uKTsKIAlpbnQgKCpyZWN2X2FjbGRhdGEpCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IsIF9fdTE2IGZsYWdzKTsKIAlpbnQgKCpyZWN2X3Njb2RhdGEpCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIHN0cnVjdCBza19idWZmICpza2IpOwotCWludCAoKmF1dGhfY2ZtKQkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOwotCWludCAoKmVuY3J5cHRfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KTsKKwlpbnQgKCpzZWN1cml0eV9jZm0pCShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzLCBfX3U4IGVuY3J5cHQpOwogfTsKIAogc3RhdGljIGlubGluZSBpbnQgaGNpX3Byb3RvX2Nvbm5lY3RfaW5kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLCBfX3U4IHR5cGUpCiB7CiAJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CiAJaW50IG1hc2sgPSAwOwotCQorCiAJaHAgPSBoY2lfcHJvdG9bSENJX1BST1RPX0wyQ0FQXTsKIAlpZiAoaHAgJiYgaHAtPmNvbm5lY3RfaW5kKQogCQltYXNrIHw9IGhwLT5jb25uZWN0X2luZChoZGV2LCBiZGFkZHIsIHR5cGUpOwpAQCAtNTE0LDMwICs1MTQsNTIgQEAKIAkJaHAtPmNvbm5lY3RfY2ZtKGNvbm4sIHN0YXR1cyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fZGlzY29ubl9pbmQoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJlYXNvbikKK3N0YXRpYyBpbmxpbmUgaW50IGhjaV9wcm90b19kaXNjb25uX2luZChzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCit7CisJcmVnaXN0ZXIgc3RydWN0IGhjaV9wcm90byAqaHA7CisJaW50IHJlYXNvbiA9IDB4MTM7CisKKwlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fTDJDQVBdOworCWlmIChocCAmJiBocC0+ZGlzY29ubl9pbmQpCisJCXJlYXNvbiA9IGhwLT5kaXNjb25uX2luZChjb25uKTsKKworCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOworCWlmIChocCAmJiBocC0+ZGlzY29ubl9pbmQpCisJCXJlYXNvbiA9IGhwLT5kaXNjb25uX2luZChjb25uKTsKKworCXJldHVybiByZWFzb247Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fZGlzY29ubl9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHJlYXNvbikKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaGNpX3Byb3RvICpocDsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07Ci0JaWYgKGhwICYmIGhwLT5kaXNjb25uX2luZCkKLQkJaHAtPmRpc2Nvbm5faW5kKGNvbm4sIHJlYXNvbik7CisJaWYgKGhwICYmIGhwLT5kaXNjb25uX2NmbSkKKwkJaHAtPmRpc2Nvbm5fY2ZtKGNvbm4sIHJlYXNvbik7CiAKIAlocCA9IGhjaV9wcm90b1tIQ0lfUFJPVE9fU0NPXTsKLQlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5faW5kKQotCQlocC0+ZGlzY29ubl9pbmQoY29ubiwgcmVhc29uKTsKKwlpZiAoaHAgJiYgaHAtPmRpc2Nvbm5fY2ZtKQorCQlocC0+ZGlzY29ubl9jZm0oY29ubiwgcmVhc29uKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGhjaV9wcm90b19hdXRoX2NmbShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggc3RhdHVzKQogewogCXJlZ2lzdGVyIHN0cnVjdCBoY2lfcHJvdG8gKmhwOworCV9fdTggZW5jcnlwdDsKKworCWlmICh0ZXN0X2JpdChIQ0lfQ09OTl9FTkNSWVBUX1BFTkQsICZjb25uLT5wZW5kKSkKKwkJcmV0dXJuOworCisJZW5jcnlwdCA9IChjb25uLT5saW5rX21vZGUgJiBIQ0lfTE1fRU5DUllQVCkgPyAweDAxIDogMHgwMDsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07Ci0JaWYgKGhwICYmIGhwLT5hdXRoX2NmbSkKLQkJaHAtPmF1dGhfY2ZtKGNvbm4sIHN0YXR1cyk7CisJaWYgKGhwICYmIGhwLT5zZWN1cml0eV9jZm0pCisJCWhwLT5zZWN1cml0eV9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOwotCWlmIChocCAmJiBocC0+YXV0aF9jZm0pCi0JCWhwLT5hdXRoX2NmbShjb25uLCBzdGF0dXMpOworCWlmIChocCAmJiBocC0+c2VjdXJpdHlfY2ZtKQorCQlocC0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfcHJvdG9fZW5jcnlwdF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cywgX191OCBlbmNyeXB0KQpAQCAtNTQ1LDEyICs1NjcsMTIgQEAKIAlyZWdpc3RlciBzdHJ1Y3QgaGNpX3Byb3RvICpocDsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19MMkNBUF07Ci0JaWYgKGhwICYmIGhwLT5lbmNyeXB0X2NmbSkKLQkJaHAtPmVuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CisJaWYgKGhwICYmIGhwLT5zZWN1cml0eV9jZm0pCisJCWhwLT5zZWN1cml0eV9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAogCWhwID0gaGNpX3Byb3RvW0hDSV9QUk9UT19TQ09dOwotCWlmIChocCAmJiBocC0+ZW5jcnlwdF9jZm0pCi0JCWhwLT5lbmNyeXB0X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOworCWlmIChocCAmJiBocC0+c2VjdXJpdHlfY2ZtKQorCQlocC0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiB9CiAKIGludCBoY2lfcmVnaXN0ZXJfcHJvdG8oc3RydWN0IGhjaV9wcm90byAqaHByb3RvKTsKQEAgLTU2Miw4ICs1ODQsNyBAQAogCiAJY2hhciAqbmFtZTsKIAotCXZvaWQgKCphdXRoX2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMpOwotCXZvaWQgKCplbmNyeXB0X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCk7CisJdm9pZCAoKnNlY3VyaXR5X2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggZW5jcnlwdCk7CiAJdm9pZCAoKmtleV9jaGFuZ2VfY2ZtKQkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cyk7CiAJdm9pZCAoKnJvbGVfc3dpdGNoX2NmbSkJKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCBzdGF0dXMsIF9fdTggcm9sZSk7CiB9OwpAQCAtNTcxLDE0ICs1OTIsMjAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBoY2lfYXV0aF9jZm0oc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHN0YXR1cykKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCV9fdTggZW5jcnlwdDsKIAogCWhjaV9wcm90b19hdXRoX2NmbShjb25uLCBzdGF0dXMpOwogCisJaWYgKHRlc3RfYml0KEhDSV9DT05OX0VOQ1JZUFRfUEVORCwgJmNvbm4tPnBlbmQpKQorCQlyZXR1cm47CisKKwllbmNyeXB0ID0gKGNvbm4tPmxpbmtfbW9kZSAmIEhDSV9MTV9FTkNSWVBUKSA/IDB4MDEgOiAweDAwOworCiAJcmVhZF9sb2NrX2JoKCZoY2lfY2JfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoKHAsICZoY2lfY2JfbGlzdCkgewogCQlzdHJ1Y3QgaGNpX2NiICpjYiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhjaV9jYiwgbGlzdCk7Ci0JCWlmIChjYi0+YXV0aF9jZm0pCi0JCQljYi0+YXV0aF9jZm0oY29ubiwgc3RhdHVzKTsKKwkJaWYgKGNiLT5zZWN1cml0eV9jZm0pCisJCQljYi0+c2VjdXJpdHlfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CiAJfQogCXJlYWRfdW5sb2NrX2JoKCZoY2lfY2JfbGlzdF9sb2NrKTsKIH0KQEAgLTU4NywxMyArNjE0LDE2IEBACiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcDsKIAorCWlmIChjb25uLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfU0RQKQorCQljb25uLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisKIAloY2lfcHJvdG9fZW5jcnlwdF9jZm0oY29ubiwgc3RhdHVzLCBlbmNyeXB0KTsKIAogCXJlYWRfbG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaChwLCAmaGNpX2NiX2xpc3QpIHsKIAkJc3RydWN0IGhjaV9jYiAqY2IgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBoY2lfY2IsIGxpc3QpOwotCQlpZiAoY2ItPmVuY3J5cHRfY2ZtKQotCQkJY2ItPmVuY3J5cHRfY2ZtKGNvbm4sIHN0YXR1cywgZW5jcnlwdCk7CisJCWlmIChjYi0+c2VjdXJpdHlfY2ZtKQorCQkJY2ItPnNlY3VyaXR5X2NmbShjb25uLCBzdGF0dXMsIGVuY3J5cHQpOwogCX0KIAlyZWFkX3VubG9ja19iaCgmaGNpX2NiX2xpc3RfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCmluZGV4IDczZTExNWIuLmY1NjZhYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCkBAIC0zNyw2ICszNyw3IEBACiAJc2FfZmFtaWx5X3QJbDJfZmFtaWx5OwogCV9fbGUxNgkJbDJfcHNtOwogCWJkYWRkcl90CWwyX2JkYWRkcjsKKwlfX2xlMTYJCWwyX2NpZDsKIH07CiAKIC8qIEwyQ0FQIHNvY2tldCBvcHRpb25zICovCkBAIC0xODUsNiArMTg2LDcgQEAKIC8qIGluZm8gdHlwZSAqLwogI2RlZmluZSBMMkNBUF9JVF9DTF9NVFUgICAgIDB4MDAwMQogI2RlZmluZSBMMkNBUF9JVF9GRUFUX01BU0sgIDB4MDAwMgorI2RlZmluZSBMMkNBUF9JVF9GSVhFRF9DSEFOIDB4MDAwMwogCiAvKiBpbmZvIHJlc3VsdCAqLwogI2RlZmluZSBMMkNBUF9JUl9TVUNDRVNTICAgIDB4MDAwMApAQCAtMjE5LDExICsyMjEsMTQgQEAKIAlfX3U4CQlyeF9pZGVudDsKIAlfX3U4CQl0eF9pZGVudDsKIAorCV9fdTgJCWRpc2NfcmVhc29uOworCiAJc3RydWN0IGwyY2FwX2NoYW5fbGlzdCBjaGFuX2xpc3Q7CiB9OwogCiAjZGVmaW5lIEwyQ0FQX0lORk9fQ0xfTVRVX1JFUV9TRU5UCTB4MDEKLSNkZWZpbmUgTDJDQVBfSU5GT19GRUFUX01BU0tfUkVRX1NFTlQJMHgwMgorI2RlZmluZSBMMkNBUF9JTkZPX0ZFQVRfTUFTS19SRVFfU0VOVAkweDA0CisjZGVmaW5lIEwyQ0FQX0lORk9fRkVBVF9NQVNLX1JFUV9ET05FCTB4MDgKIAogLyogLS0tLS0gTDJDQVAgY2hhbm5lbCBhbmQgc29ja2V0IGluZm8gLS0tLS0gKi8KICNkZWZpbmUgbDJjYXBfcGkoc2spICgoc3RydWN0IGwyY2FwX3BpbmZvICopIHNrKQpAQCAtMjM3LDggKzI0Miw5IEBACiAJX191MTYJCWltdHU7CiAJX191MTYJCW9tdHU7CiAJX191MTYJCWZsdXNoX3RvOwotCi0JX191MzIJCWxpbmtfbW9kZTsKKwlfX3U4ICAgICAgICAgICAgc2VjX2xldmVsOworCV9fdTgJCXJvbGVfc3dpdGNoOworCV9fdTggICAgICAgICAgICBmb3JjZV9yZWxpYWJsZTsKIAogCV9fdTgJCWNvbmZfcmVxWzY0XTsKIAlfX3U4CQljb25mX2xlbjsKQEAgLTI1Nyw2ICsyNjMsNyBAQAogI2RlZmluZSBMMkNBUF9DT05GX1JFUV9TRU5UCTB4MDEKICNkZWZpbmUgTDJDQVBfQ09ORl9JTlBVVF9ET05FCTB4MDIKICNkZWZpbmUgTDJDQVBfQ09ORl9PVVRQVVRfRE9ORQkweDA0CisjZGVmaW5lIEwyQ0FQX0NPTkZfQ09OTkVDVF9QRU5ECTB4ODAKIAogI2RlZmluZSBMMkNBUF9DT05GX01BWF9SRVRSSUVTCTIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCmluZGV4IDRkYzhkOTIuLjgwMDcyNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKQEAgLTE4Myw4ICsxODMsOSBAQAogCXU4ICAgICAgICAgICAgcmVtb3RlX3YyNF9zaWc7CiAJdTggICAgICAgICAgICBtc2NleDsKIAl1OCAgICAgICAgICAgIG91dDsKLQotCXUzMiAgICAgICAgICAgbGlua19tb2RlOworCXU4ICAgICAgICAgICAgc2VjX2xldmVsOworCXU4ICAgICAgICAgICAgcm9sZV9zd2l0Y2g7CisJdTMyICAgICAgICAgICBkZWZlcl9zZXR1cDsKIAogCXVpbnQgICAgICAgICAgbXR1OwogCXVpbnQgICAgICAgICAgY2ZjOwpAQCAtMjAyLDEwICsyMDMsMTIgQEAKICNkZWZpbmUgUkZDT01NX1JYX1RIUk9UVExFRCAwCiAjZGVmaW5lIFJGQ09NTV9UWF9USFJPVFRMRUQgMQogI2RlZmluZSBSRkNPTU1fVElNRURfT1VUICAgIDIKLSNkZWZpbmUgUkZDT01NX01TQ19QRU5ESU5HICAzIAotI2RlZmluZSBSRkNPTU1fQVVUSF9QRU5ESU5HIDQKLSNkZWZpbmUgUkZDT01NX0FVVEhfQUNDRVBUICA1Ci0jZGVmaW5lIFJGQ09NTV9BVVRIX1JFSkVDVCAgNgorI2RlZmluZSBSRkNPTU1fTVNDX1BFTkRJTkcgIDMKKyNkZWZpbmUgUkZDT01NX1NFQ19QRU5ESU5HICA0CisjZGVmaW5lIFJGQ09NTV9BVVRIX1BFTkRJTkcgNQorI2RlZmluZSBSRkNPTU1fQVVUSF9BQ0NFUFQgIDYKKyNkZWZpbmUgUkZDT01NX0FVVEhfUkVKRUNUICA3CisjZGVmaW5lIFJGQ09NTV9ERUZFUl9TRVRVUCAgOAogCiAvKiBTY2hlZHVsaW5nIGZsYWdzIGFuZCBldmVudHMgKi8KICNkZWZpbmUgUkZDT01NX1NDSEVEX1NUQVRFICAwCkBAIC0yMzksNiArMjQyLDcgQEAKIGludCAgcmZjb21tX2RsY19zZW5kKHN0cnVjdCByZmNvbW1fZGxjICpkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCAgcmZjb21tX2RsY19zZXRfbW9kZW1fc3RhdHVzKHN0cnVjdCByZmNvbW1fZGxjICpkLCB1OCB2MjRfc2lnKTsKIGludCAgcmZjb21tX2RsY19nZXRfbW9kZW1fc3RhdHVzKHN0cnVjdCByZmNvbW1fZGxjICpkLCB1OCAqdjI0X3NpZyk7Cit2b2lkIHJmY29tbV9kbGNfYWNjZXB0KHN0cnVjdCByZmNvbW1fZGxjICpkKTsKIAogI2RlZmluZSByZmNvbW1fZGxjX2xvY2soZCkgICAgIHNwaW5fbG9jaygmZC0+bG9jaykKICNkZWZpbmUgcmZjb21tX2RsY191bmxvY2soZCkgICBzcGluX3VubG9jaygmZC0+bG9jaykKQEAgLTMwNCw3ICszMDgsOCBAQAogCXN0cnVjdCBidF9zb2NrIGJ0OwogCXN0cnVjdCByZmNvbW1fZGxjICAgKmRsYzsKIAl1OCAgICAgY2hhbm5lbDsKLQl1MzIgICAgbGlua19tb2RlOworCXU4ICAgICBzZWNfbGV2ZWw7CisJdTggICAgIHJvbGVfc3dpdGNoOwogfTsKIAogaW50ICByZmNvbW1faW5pdF9zb2NrZXRzKHZvaWQpOwpAQCAtMzMzLDcgKzMzOCw2IEBACiAJYmRhZGRyX3Qgc3JjOwogCWJkYWRkcl90IGRzdDsKIAl1OCAgICAgICBjaGFubmVsOwotCQogfTsKIAogc3RydWN0IHJmY29tbV9kZXZfaW5mbyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oIGIvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAppbmRleCAyM2MwYWI3Li41Mzg5YWZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKQEAgLTQsNiArNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogLyogcmVtb3ZlIG9uY2Ugd2UgcmVtb3ZlIHRoZSB3ZXh0IHN0dWZmICovCiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KQEAgLTExMiwxMiArMTE2LDE0IEBACiAgKiBAU1RBVElPTl9GTEFHX1NIT1JUX1BSRUFNQkxFOiBzdGF0aW9uIGlzIGNhcGFibGUgb2YgcmVjZWl2aW5nIGZyYW1lcwogICoJd2l0aCBzaG9ydCBwcmVhbWJsZXMKICAqIEBTVEFUSU9OX0ZMQUdfV01FOiBzdGF0aW9uIGlzIFdNRS9Rb1MgY2FwYWJsZQorICogQFNUQVRJT05fRkxBR19NRlA6IHN0YXRpb24gdXNlcyBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24KICAqLwogZW51bSBzdGF0aW9uX2ZsYWdzIHsKIAlTVEFUSU9OX0ZMQUdfQ0hBTkdFRAkJPSAxPDwwLAogCVNUQVRJT05fRkxBR19BVVRIT1JJWkVECQk9IDE8PE5MODAyMTFfU1RBX0ZMQUdfQVVUSE9SSVpFRCwKIAlTVEFUSU9OX0ZMQUdfU0hPUlRfUFJFQU1CTEUJPSAxPDxOTDgwMjExX1NUQV9GTEFHX1NIT1JUX1BSRUFNQkxFLAogCVNUQVRJT05fRkxBR19XTUUJCT0gMTw8Tkw4MDIxMV9TVEFfRkxBR19XTUUsCisJU1RBVElPTl9GTEFHX01GUAkJPSAxPDxOTDgwMjExX1NUQV9GTEFHX01GUCwKIH07CiAKIC8qKgpAQCAtMTcyLDYgKzE3OCw4IEBACiAgKiBAU1RBVElPTl9JTkZPX1NJR05BTDogQHNpZ25hbCBmaWxsZWQKICAqIEBTVEFUSU9OX0lORk9fVFhfQklUUkFURTogQHR4X2JpdHJhdGUgZmllbGRzIGFyZSBmaWxsZWQKICAqICAodHhfYml0cmF0ZSwgdHhfYml0cmF0ZV9mbGFncyBhbmQgdHhfYml0cmF0ZV9tY3MpCisgKiBAU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFM6IEByeF9wYWNrZXRzIGZpbGxlZAorICogQFNUQVRJT05fSU5GT19UWF9QQUNLRVRTOiBAdHhfcGFja2V0cyBmaWxsZWQKICAqLwogZW51bSBzdGF0aW9uX2luZm9fZmxhZ3MgewogCVNUQVRJT05fSU5GT19JTkFDVElWRV9USU1FCT0gMTw8MCwKQEAgLTE4Miw2ICsxOTAsOCBAQAogCVNUQVRJT05fSU5GT19QTElOS19TVEFURQk9IDE8PDUsCiAJU1RBVElPTl9JTkZPX1NJR05BTAkJPSAxPDw2LAogCVNUQVRJT05fSU5GT19UWF9CSVRSQVRFCQk9IDE8PDcsCisJU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMJCT0gMTw8OCwKKwlTVEFUSU9OX0lORk9fVFhfUEFDS0VUUwkJPSAxPDw5LAogfTsKIAogLyoqCkBAIC0yMjksNiArMjM5LDggQEAKICAqIEBwbGlua19zdGF0ZTogbWVzaCBwZWVyIGxpbmsgc3RhdGUKICAqIEBzaWduYWw6IHNpZ25hbCBzdHJlbmd0aCBvZiBsYXN0IHJlY2VpdmVkIHBhY2tldCBpbiBkQm0KICAqIEB0eHJhdGU6IGN1cnJlbnQgdW5pY2FzdCBiaXRyYXRlIHRvIHRoaXMgc3RhdGlvbgorICogQHJ4X3BhY2tldHM6IHBhY2tldHMgcmVjZWl2ZWQgZnJvbSB0aGlzIHN0YXRpb24KKyAqIEB0eF9wYWNrZXRzOiBwYWNrZXRzIHRyYW5zbWl0dGVkIHRvIHRoaXMgc3RhdGlvbgogICovCiBzdHJ1Y3Qgc3RhdGlvbl9pbmZvIHsKIAl1MzIgZmlsbGVkOwpAQCAtMjQwLDYgKzI1Miw4IEBACiAJdTggcGxpbmtfc3RhdGU7CiAJczggc2lnbmFsOwogCXN0cnVjdCByYXRlX2luZm8gdHhyYXRlOworCXUzMiByeF9wYWNrZXRzOworCXUzMiB0eF9wYWNrZXRzOwogfTsKIAogLyoqCkBAIC0zMzUsMjQgKzM0OSw1MCBAQAogfTsKIAogLyoqCi0gKiBlbnVtIHJlZ19zZXRfYnkgLSBJbmRpY2F0ZXMgd2hvIGlzIHRyeWluZyB0byBzZXQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCi0gKiBAUkVHRE9NX1NFVF9CWV9JTklUOiByZWd1bGF0b3J5IGRvbWFpbiB3YXMgc2V0IGJ5IGluaXRpYWxpemF0aW9uLiBXZSB3aWxsIGJlCi0gKiAJdXNpbmcgYSBzdGF0aWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4gYnkgZGVmYXVsdC4KLSAqIEBSRUdET01fU0VUX0JZX0NPUkU6IENvcmUgcXVlcmllZCBDUkRBIGZvciBhIGR5bmFtaWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4uCi0gKiBAUkVHRE9NX1NFVF9CWV9VU0VSOiBVc2VyIGFza2VkIHRoZSB3aXJlbGVzcyBjb3JlIHRvIHNldCB0aGUKLSAqIAlyZWd1bGF0b3J5IGRvbWFpbi4KLSAqIEBSRUdET01fU0VUX0JZX0RSSVZFUjogYSB3aXJlbGVzcyBkcml2ZXJzIGhhcyBoaW50ZWQgdG8gdGhlIHdpcmVsZXNzIGNvcmUKLSAqCWl0IHRoaW5rcyBpdHMga25vd3MgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIHdlIHNob3VsZCBiZSBpbi4KLSAqIEBSRUdET01fU0VUX0JZX0NPVU5UUllfSUU6IHRoZSB3aXJlbGVzcyBjb3JlIGhhcyByZWNlaXZlZCBhbiA4MDIuMTEgY291bnRyeQotICoJaW5mb3JtYXRpb24gZWxlbWVudCB3aXRoIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gaXQgdGhpbmtzIHdlCi0gKglzaG91bGQgY29uc2lkZXIuCisgKiBlbnVtIGVudmlyb25tZW50X2NhcCAtIEVudmlyb25tZW50IHBhcnNlZCBmcm9tIGNvdW50cnkgSUUKKyAqIEBFTlZJUk9OX0FOWTogaW5kaWNhdGVzIGNvdW50cnkgSUUgYXBwbGllcyB0byBib3RoIGluZG9vciBhbmQKKyAqCW91dGRvb3Igb3BlcmF0aW9uLgorICogQEVOVklST05fSU5ET09SOiBpbmRpY2F0ZXMgY291bnRyeSBJRSBhcHBsaWVzIG9ubHkgdG8gaW5kb29yIG9wZXJhdGlvbgorICogQEVOVklST05fT1VURE9PUjogaW5kaWNhdGVzIGNvdW50cnkgSUUgYXBwbGllcyBvbmx5IHRvIG91dGRvb3Igb3BlcmF0aW9uCiAgKi8KLWVudW0gcmVnX3NldF9ieSB7Ci0JUkVHRE9NX1NFVF9CWV9JTklULAotCVJFR0RPTV9TRVRfQllfQ09SRSwKLQlSRUdET01fU0VUX0JZX1VTRVIsCi0JUkVHRE9NX1NFVF9CWV9EUklWRVIsCi0JUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFLAorZW51bSBlbnZpcm9ubWVudF9jYXAgeworCUVOVklST05fQU5ZLAorCUVOVklST05fSU5ET09SLAorCUVOVklST05fT1VURE9PUiwKK307CisKKy8qKgorICogc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAtIHVzZWQgdG8ga2VlcCB0cmFjayBvZiByZWd1bGF0b3J5IHJlcXVlc3RzCisgKgorICogQHdpcGh5X2lkeDogdGhpcyBpcyBzZXQgaWYgdGhpcyByZXF1ZXN0J3MgaW5pdGlhdG9yIGlzCisgKiAJJVJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSBvciAlUkVHRE9NX1NFVF9CWV9EUklWRVIuIFRoaXMKKyAqIAljYW4gYmUgdXNlZCBieSB0aGUgd2lyZWxlc3MgY29yZSB0byBkZWFsIHdpdGggY29uZmxpY3RzCisgKiAJYW5kIHBvdGVudGlhbGx5IGluZm9ybSB1c2VycyBvZiB3aGljaCBkZXZpY2VzIHNwZWNpZmljYWxseQorICogCWNhc2VkIHRoZSBjb25mbGljdHMuCisgKiBAaW5pdGlhdG9yOiBpbmRpY2F0ZXMgd2hvIHNlbnQgdGhpcyByZXF1ZXN0LCBjb3VsZCBiZSBhbnkgb2YKKyAqIAlvZiB0aG9zZSBzZXQgaW4gbmw4MDIxMV9yZWdfaW5pdGlhdG9yICglTkw4MDIxMV9SRUdET01fU0VUX0JZXyopCisgKiBAYWxwaGEyOiB0aGUgSVNPIC8gSUVDIDMxNjYgYWxwaGEyIGNvdW50cnkgY29kZSBvZiB0aGUgcmVxdWVzdGVkCisgKiAJcmVndWxhdG9yeSBkb21haW4uIFdlIGhhdmUgYSBmZXcgc3BlY2lhbCBjb2RlczoKKyAqIAkwMCAtIFdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluCisgKiAJOTkgLSBidWlsdCBieSBkcml2ZXIgYnV0IGEgc3BlY2lmaWMgYWxwaGEyIGNhbm5vdCBiZSBkZXRlcm1pbmVkCisgKiAJOTggLSByZXN1bHQgb2YgYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlZ3VsYXRvcnkgZG9tYWlucworICogQGludGVyc2VjdDogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHdpcmVsZXNzIGNvcmUgc2hvdWxkIGludGVyc2VjdAorICogCXRoZSByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4gd2l0aCB0aGUgcHJlc2VudGx5IHNldCByZWd1bGF0b3J5CisgKiAJZG9tYWluLgorICogQGNvdW50cnlfaWVfY2hlY2tzdW06IGNoZWNrc3VtIG9mIHRoZSBsYXN0IHByb2Nlc3NlZCBhbmQgYWNjZXB0ZWQKKyAqIAljb3VudHJ5IElFCisgKiBAY291bnRyeV9pZV9lbnY6IGxldHMgdXMga25vdyBpZiB0aGUgQVAgaXMgdGVsbGluZyB1cyB3ZSBhcmUgb3V0ZG9vciwKKyAqIAlpbmRvb3IsIG9yIGlmIGl0IGRvZXNuJ3QgbWF0dGVyCisgKiBAbGlzdDogdXNlZCB0byBpbnNlcnQgaW50byB0aGUgcmVnX3JlcXVlc3RzX2xpc3QgbGlua2VkIGxpc3QKKyAqLworc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCB7CisJaW50IHdpcGh5X2lkeDsKKwllbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3I7CisJY2hhciBhbHBoYTJbMl07CisJYm9vbCBpbnRlcnNlY3Q7CisJdTMyIGNvdW50cnlfaWVfY2hlY2tzdW07CisJZW51bSBlbnZpcm9ubWVudF9jYXAgY291bnRyeV9pZV9lbnY7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogfTsKIAogc3RydWN0IGllZWU4MDIxMV9mcmVxX3JhbmdlIHsKQEAgLTQzOCw2ICs0NzgsMTg3IEBACiBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWw7CiAKIC8qKgorICogc3RydWN0IGNmZzgwMjExX3NzaWQgLSBTU0lEIGRlc2NyaXB0aW9uCisgKiBAc3NpZDogdGhlIFNTSUQKKyAqIEBzc2lkX2xlbjogbGVuZ3RoIG9mIHRoZSBzc2lkCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9zc2lkIHsKKwl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCXU4IHNzaWRfbGVuOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IC0gc2NhbiByZXF1ZXN0IGRlc2NyaXB0aW9uCisgKgorICogQHNzaWRzOiBTU0lEcyB0byBzY2FuIGZvciAoYWN0aXZlIHNjYW4gb25seSkKKyAqIEBuX3NzaWRzOiBudW1iZXIgb2YgU1NJRHMKKyAqIEBjaGFubmVsczogY2hhbm5lbHMgdG8gc2NhbiBvbi4KKyAqIEBuX2NoYW5uZWxzOiBudW1iZXIgb2YgY2hhbm5lbHMgZm9yIGVhY2ggYmFuZAorICogQGllOiBvcHRpb25hbCBpbmZvcm1hdGlvbiBlbGVtZW50KHMpIHRvIGFkZCBpbnRvIFByb2JlIFJlcXVlc3Qgb3IgJU5VTEwKKyAqIEBpZV9sZW46IGxlbmd0aCBvZiBpZSBpbiBvY3RldHMKKyAqIEB3aXBoeTogdGhlIHdpcGh5IHRoaXMgd2FzIGZvcgorICogQGlmaWR4OiB0aGUgaW50ZXJmYWNlIGluZGV4CisgKi8KK3N0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgeworCXN0cnVjdCBjZmc4MDIxMV9zc2lkICpzc2lkczsKKwlpbnQgbl9zc2lkczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKipjaGFubmVsczsKKwl1MzIgbl9jaGFubmVsczsKKwl1OCAqaWU7CisJc2l6ZV90IGllX2xlbjsKKworCS8qIGludGVybmFsICovCisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlpbnQgaWZpZHg7Cit9OworCisvKioKKyAqIGVudW0gY2ZnODAyMTFfc2lnbmFsX3R5cGUgLSBzaWduYWwgdHlwZQorICoKKyAqIEBDRkc4MDIxMV9TSUdOQUxfVFlQRV9OT05FOiBubyBzaWduYWwgc3RyZW5ndGggaW5mb3JtYXRpb24gYXZhaWxhYmxlCisgKiBAQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOiBzaWduYWwgc3RyZW5ndGggaW4gbUJtICgxMDAqZEJtKQorICogQENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzogc2lnbmFsIHN0cmVuZ3RoLCBpbmNyZWFzaW5nIGZyb20gMCB0aHJvdWdoIDEwMAorICovCitlbnVtIGNmZzgwMjExX3NpZ25hbF90eXBlIHsKKwlDRkc4MDIxMV9TSUdOQUxfVFlQRV9OT05FLAorCUNGRzgwMjExX1NJR05BTF9UWVBFX01CTSwKKwlDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUMsCit9OworCisvKioKKyAqIHN0cnVjdCBjZmc4MDIxMV9ic3MgLSBCU1MgZGVzY3JpcHRpb24KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgYSBCU1MgKHdoaWNoIG1heSBhbHNvIGJlIGEgbWVzaCBuZXR3b3JrKQorICogZm9yIHVzZSBpbiBzY2FuIHJlc3VsdHMgYW5kIHNpbWlsYXIuCisgKgorICogQGJzc2lkOiBCU1NJRCBvZiB0aGUgQlNTCisgKiBAdHNmOiB0aW1lc3RhbXAgb2YgbGFzdCByZWNlaXZlZCB1cGRhdGUKKyAqIEBiZWFjb25faW50ZXJ2YWw6IHRoZSBiZWFjb24gaW50ZXJ2YWwgYXMgZnJvbSB0aGUgZnJhbWUKKyAqIEBjYXBhYmlsaXR5OiB0aGUgY2FwYWJpbGl0eSBmaWVsZCBpbiBob3N0IGJ5dGUgb3JkZXIKKyAqIEBpbmZvcm1hdGlvbl9lbGVtZW50czogdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzIChOb3RlIHRoYXQgdGhlcmUKKyAqCWlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZXNlIGFyZSB3ZWxsLWZvcm1lZCEpCisgKiBAbGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOiB0b3RhbCBsZW5ndGggb2YgdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzCisgKiBAc2lnbmFsOiBzaWduYWwgc3RyZW5ndGggdmFsdWUgKHR5cGUgZGVwZW5kcyBvbiB0aGUgd2lwaHkncyBzaWduYWxfdHlwZSkKKyAqIEBob2xkOiBCU1Mgc2hvdWxkIG5vdCBleHBpcmUKKyAqIEBmcmVlX3ByaXY6IGZ1bmN0aW9uIHBvaW50ZXIgdG8gZnJlZSBwcml2YXRlIGRhdGEKKyAqIEBwcml2OiBwcml2YXRlIGFyZWEgZm9yIGRyaXZlciB1c2UsIGhhcyBhdCBsZWFzdCB3aXBoeS0+YnNzX3ByaXZfc2l6ZSBieXRlcworICovCitzdHJ1Y3QgY2ZnODAyMTFfYnNzIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CisKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTY0IHRzZjsKKwl1MTYgYmVhY29uX2ludGVydmFsOworCXUxNiBjYXBhYmlsaXR5OworCXU4ICppbmZvcm1hdGlvbl9lbGVtZW50czsKKwlzaXplX3QgbGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOworCisJczMyIHNpZ25hbDsKKworCXZvaWQgKCpmcmVlX3ByaXYpKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7CisJdTggcHJpdlswXSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhzaXplb2Yodm9pZCAqKSkpKTsKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCAtIEF1dGhlbnRpY2F0aW9uIHJlcXVlc3QgZGF0YQorICoKKyAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb21wbGV0ZSBJRUVFIDgwMi4xMQorICogYXV0aGVudGljYXRpb24uCisgKiBOT1RFOiBUaGlzIHN0cnVjdHVyZSB3aWxsIGxpa2VseSBjaGFuZ2Ugd2hlbiBtb3JlIGNvZGUgZnJvbSBtYWM4MDIxMSBpcworICogbW92ZWQgaW50byBjZmc4MDIxMSBzbyB0aGF0IG5vbi1tYWM4MDIxMSBkcml2ZXJzIGNhbiBiZW5lZml0IGZyb20gaXQsIHRvby4KKyAqIEJlZm9yZSB1c2luZyB0aGlzIGluIGEgZHJpdmVyIHRoYXQgZG9lcyBub3QgdXNlIG1hYzgwMjExLCBpdCB3b3VsZCBiZSBiZXR0ZXIKKyAqIHRvIGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhhdCB3b3JrIGFuZCBiZXR0ZXIgeWV0LCB2b2x1bnRlZXIgdG8gd29yayBvbiBpdC4KKyAqCisgKiBAY2hhbjogVGhlIGNoYW5uZWwgdG8gdXNlIG9yICVOVUxMIGlmIG5vdCBzcGVjaWZpZWQgKGF1dG8tc2VsZWN0IGJhc2VkIG9uCisgKglzY2FuIHJlc3VsdHMpCisgKiBAcGVlcl9hZGRyOiBUaGUgYWRkcmVzcyBvZiB0aGUgcGVlciBTVEEgKEFQIEJTU0lEIGluIGluZnJhc3RydWN0dXJlIGNhc2UpOworICoJdGhpcyBmaWVsZCBpcyByZXF1aXJlZCB0byBiZSBwcmVzZW50OyBpZiB0aGUgZHJpdmVyIHdhbnRzIHRvIGhlbHAgd2l0aAorICoJQlNTIHNlbGVjdGlvbiwgaXQgc2hvdWxkIHVzZSAoeWV0IHRvIGJlIGFkZGVkKSBNTE1FIGV2ZW50IHRvIGFsbG93IHVzZXIKKyAqCXNwYWNlIFNNRSB0byBiZSBub3RpZmllZCBvZiByb2FtaW5nIGNhbmRpZGF0ZSwgc28gdGhhdCB0aGUgU01FIGNhbiB0aGVuCisgKgl1c2UgdGhlIGF1dGhlbnRpY2F0aW9uIHJlcXVlc3Qgd2l0aCB0aGUgcmVjb21tZW5kZWQgQlNTSUQgYW5kIHdoYXRldmVyCisgKglvdGhlciBkYXRhIG1heSBiZSBuZWVkZWQgZm9yIGF1dGhlbnRpY2F0aW9uL2Fzc29jaWF0aW9uCisgKiBAc3NpZDogU1NJRCBvciAlTlVMTCBpZiBub3QgeWV0IGF2YWlsYWJsZQorICogQHNzaWRfbGVuOiBMZW5ndGggb2Ygc3NpZCBpbiBvY3RldHMKKyAqIEBhdXRoX3R5cGU6IEF1dGhlbnRpY2F0aW9uIHR5cGUgKGFsZ29yaXRobSkKKyAqIEBpZTogRXh0cmEgSUVzIHRvIGFkZCB0byBBdXRoZW50aWNhdGlvbiBmcmFtZSBvciAlTlVMTAorICogQGllX2xlbjogTGVuZ3RoIG9mIGllIGJ1ZmZlciBpbiBvY3RldHMKKyAqLworc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCB7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCXU4ICpwZWVyX2FkZHI7CisJY29uc3QgdTggKnNzaWQ7CisJc2l6ZV90IHNzaWRfbGVuOworCWVudW0gbmw4MDIxMV9hdXRoX3R5cGUgYXV0aF90eXBlOworCWNvbnN0IHU4ICppZTsKKwlzaXplX3QgaWVfbGVuOworfTsKKworLyoqCisgKiBzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCAtIChSZSlBc3NvY2lhdGlvbiByZXF1ZXN0IGRhdGEKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29tcGxldGUgSUVFRSA4MDIuMTEKKyAqIChyZSlhc3NvY2lhdGlvbi4KKyAqIE5PVEU6IFRoaXMgc3RydWN0dXJlIHdpbGwgbGlrZWx5IGNoYW5nZSB3aGVuIG1vcmUgY29kZSBmcm9tIG1hYzgwMjExIGlzCisgKiBtb3ZlZCBpbnRvIGNmZzgwMjExIHNvIHRoYXQgbm9uLW1hYzgwMjExIGRyaXZlcnMgY2FuIGJlbmVmaXQgZnJvbSBpdCwgdG9vLgorICogQmVmb3JlIHVzaW5nIHRoaXMgaW4gYSBkcml2ZXIgdGhhdCBkb2VzIG5vdCB1c2UgbWFjODAyMTEsIGl0IHdvdWxkIGJlIGJldHRlcgorICogdG8gY2hlY2sgdGhlIHN0YXR1cyBvZiB0aGF0IHdvcmsgYW5kIGJldHRlciB5ZXQsIHZvbHVudGVlciB0byB3b3JrIG9uIGl0LgorICoKKyAqIEBjaGFuOiBUaGUgY2hhbm5lbCB0byB1c2Ugb3IgJU5VTEwgaWYgbm90IHNwZWNpZmllZCAoYXV0by1zZWxlY3QgYmFzZWQgb24KKyAqCXNjYW4gcmVzdWx0cykKKyAqIEBwZWVyX2FkZHI6IFRoZSBhZGRyZXNzIG9mIHRoZSBwZWVyIFNUQSAoQVAgQlNTSUQpOyB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkCisgKgl0byBiZSBwcmVzZW50IGFuZCB0aGUgU1RBIG11c3QgYmUgaW4gU3RhdGUgMiAoYXV0aGVudGljYXRlZCkgd2l0aCB0aGUKKyAqCXBlZXIgU1RBCisgKiBAc3NpZDogU1NJRAorICogQHNzaWRfbGVuOiBMZW5ndGggb2Ygc3NpZCBpbiBvY3RldHMKKyAqIEBpZTogRXh0cmEgSUVzIHRvIGFkZCB0byAoUmUpQXNzb2NpYXRpb24gUmVxdWVzdCBmcmFtZSBvciAlTlVMTAorICogQGllX2xlbjogTGVuZ3RoIG9mIGllIGJ1ZmZlciBpbiBvY3RldHMKKyAqLworc3RydWN0IGNmZzgwMjExX2Fzc29jX3JlcXVlc3QgeworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwl1OCAqcGVlcl9hZGRyOworCWNvbnN0IHU4ICpzc2lkOworCXNpemVfdCBzc2lkX2xlbjsKKwljb25zdCB1OCAqaWU7CisJc2l6ZV90IGllX2xlbjsKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX2RlYXV0aF9yZXF1ZXN0IC0gRGVhdXRoZW50aWNhdGlvbiByZXF1ZXN0IGRhdGEKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29tcGxldGUgSUVFRSA4MDIuMTEKKyAqIGRlYXV0aGVudGljYXRpb24uCisgKgorICogQHBlZXJfYWRkcjogVGhlIGFkZHJlc3Mgb2YgdGhlIHBlZXIgU1RBIChBUCBCU1NJRCk7IHRoaXMgZmllbGQgaXMgcmVxdWlyZWQKKyAqCXRvIGJlIHByZXNlbnQgYW5kIHRoZSBTVEEgbXVzdCBiZSBhdXRoZW50aWNhdGVkIHdpdGggdGhlIHBlZXIgU1RBCisgKiBAaWU6IEV4dHJhIElFcyB0byBhZGQgdG8gRGVhdXRoZW50aWNhdGlvbiBmcmFtZSBvciAlTlVMTAorICogQGllX2xlbjogTGVuZ3RoIG9mIGllIGJ1ZmZlciBpbiBvY3RldHMKKyAqLworc3RydWN0IGNmZzgwMjExX2RlYXV0aF9yZXF1ZXN0IHsKKwl1OCAqcGVlcl9hZGRyOworCXUxNiByZWFzb25fY29kZTsKKwljb25zdCB1OCAqaWU7CisJc2l6ZV90IGllX2xlbjsKK307CisKKy8qKgorICogc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgLSBEaXNhc3NvY2lhdGlvbiByZXF1ZXN0IGRhdGEKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29tcGxldGUgSUVFRSA4MDIuMTEKKyAqIGRpc2Fzc29jYXRpb24uCisgKgorICogQHBlZXJfYWRkcjogVGhlIGFkZHJlc3Mgb2YgdGhlIHBlZXIgU1RBIChBUCBCU1NJRCk7IHRoaXMgZmllbGQgaXMgcmVxdWlyZWQKKyAqCXRvIGJlIHByZXNlbnQgYW5kIHRoZSBTVEEgbXVzdCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHBlZXIgU1RBCisgKiBAaWU6IEV4dHJhIElFcyB0byBhZGQgdG8gRGlzYXNzb2NpYXRpb24gZnJhbWUgb3IgJU5VTEwKKyAqIEBpZV9sZW46IExlbmd0aCBvZiBpZSBidWZmZXIgaW4gb2N0ZXRzCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0IHsKKwl1OCAqcGVlcl9hZGRyOworCXUxNiByZWFzb25fY29kZTsKKwljb25zdCB1OCAqaWU7CisJc2l6ZV90IGllX2xlbjsKK307CisKKy8qKgogICogc3RydWN0IGNmZzgwMjExX29wcyAtIGJhY2tlbmQgZGVzY3JpcHRpb24gZm9yIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24KICAqCiAgKiBUaGlzIHN0cnVjdCBpcyByZWdpc3RlcmVkIGJ5IGZ1bGxtYWMgY2FyZCBkcml2ZXJzIGFuZC9vciB3aXJlbGVzcyBzdGFja3MKQEAgLTQ1MCw2ICs2NzEsOSBAQAogICogd2lyZWxlc3MgZXh0ZW5zaW9ucyBidXQgdGhpcyBpcyBzdWJqZWN0IHRvIHJlZXZhbHVhdGlvbiBhcyBzb29uIGFzIHRoaXMKICAqIGNvZGUgaXMgdXNlZCBtb3JlIHdpZGVseSBhbmQgd2UgaGF2ZSBhIGZpcnN0IHVzZXIgd2l0aG91dCB3ZXh0LgogICoKKyAqIEBzdXNwZW5kOiB3aXBoeSBkZXZpY2UgbmVlZHMgdG8gYmUgc3VzcGVuZGVkCisgKiBAcmVzdW1lOiB3aXBoeSBkZXZpY2UgbmVlZHMgdG8gYmUgcmVzdW1lZAorICoKICAqIEBhZGRfdmlydHVhbF9pbnRmOiBjcmVhdGUgYSBuZXcgdmlydHVhbCBpbnRlcmZhY2Ugd2l0aCB0aGUgZ2l2ZW4gbmFtZSwKICAqCW11c3Qgc2V0IHRoZSBzdHJ1Y3Qgd2lyZWxlc3NfZGV2J3MgaWZ0eXBlLgogICoKQEAgLTQ3MSw2ICs2OTUsOCBAQAogICoKICAqIEBzZXRfZGVmYXVsdF9rZXk6IHNldCB0aGUgZGVmYXVsdCBrZXkgb24gYW4gaW50ZXJmYWNlCiAgKgorICogQHNldF9kZWZhdWx0X21nbXRfa2V5OiBzZXQgdGhlIGRlZmF1bHQgbWFuYWdlbWVudCBmcmFtZSBrZXkgb24gYW4gaW50ZXJmYWNlCisgKgogICogQGFkZF9iZWFjb246IEFkZCBhIGJlYWNvbiB3aXRoIGdpdmVuIHBhcmFtZXRlcnMsIEBoZWFkLCBAaW50ZXJ2YWwKICAqCWFuZCBAZHRpbV9wZXJpb2Qgd2lsbCBiZSB2YWxpZCwgQHRhaWwgaXMgb3B0aW9uYWwuCiAgKiBAc2V0X2JlYWNvbjogQ2hhbmdlIHRoZSBiZWFjb24gcGFyYW1ldGVycyBmb3IgYW4gYWNjZXNzIHBvaW50IG1vZGUKQEAgLTQ5Nyw4ICs3MjMsMjEgQEAKICAqIEBzZXRfdHhxX3BhcmFtczogU2V0IFRYIHF1ZXVlIHBhcmFtZXRlcnMKICAqCiAgKiBAc2V0X2NoYW5uZWw6IFNldCBjaGFubmVsCisgKgorICogQHNjYW46IFJlcXVlc3QgdG8gZG8gYSBzY2FuLiBJZiByZXR1cm5pbmcgemVybywgdGhlIHNjYW4gcmVxdWVzdCBpcyBnaXZlbgorICoJdGhlIGRyaXZlciwgYW5kIHdpbGwgYmUgdmFsaWQgdW50aWwgcGFzc2VkIHRvIGNmZzgwMjExX3NjYW5fZG9uZSgpLgorICoJRm9yIHNjYW4gcmVzdWx0cywgY2FsbCBjZmc4MDIxMV9pbmZvcm1fYnNzKCk7IHlvdSBjYW4gY2FsbCB0aGlzIG91dHNpZGUKKyAqCXRoZSBzY2FuL3NjYW5fZG9uZSBicmFja2V0IHRvby4KKyAqCisgKiBAYXV0aDogUmVxdWVzdCB0byBhdXRoZW50aWNhdGUgd2l0aCB0aGUgc3BlY2lmaWVkIHBlZXIKKyAqIEBhc3NvYzogUmVxdWVzdCB0byAocmUpYXNzb2NpYXRlIHdpdGggdGhlIHNwZWNpZmllZCBwZWVyCisgKiBAZGVhdXRoOiBSZXF1ZXN0IHRvIGRlYXV0aGVudGljYXRlIGZyb20gdGhlIHNwZWNpZmllZCBwZWVyCisgKiBAZGlzYXNzb2M6IFJlcXVlc3QgdG8gZGlzYXNzb2NpYXRlIGZyb20gdGhlIHNwZWNpZmllZCBwZWVyCiAgKi8KIHN0cnVjdCBjZmc4MDIxMV9vcHMgeworCWludAkoKnN1c3BlbmQpKHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCWludAkoKnJlc3VtZSkoc3RydWN0IHdpcGh5ICp3aXBoeSk7CisKIAlpbnQJKCphZGRfdmlydHVhbF9pbnRmKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjaGFyICpuYW1lLAogCQkJCSAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCiAJCQkJICAgIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpOwpAQCAtNTE4LDYgKzc1Nyw5IEBACiAJaW50CSgqc2V0X2RlZmF1bHRfa2V5KShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgdTgga2V5X2luZGV4KTsKKwlpbnQJKCpzZXRfZGVmYXVsdF9tZ210X2tleSkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJdTgga2V5X2luZGV4KTsKIAogCWludAkoKmFkZF9iZWFjb24pKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgYmVhY29uX3BhcmFtZXRlcnMgKmluZm8pOwpAQCAtNTY0LDYgKzgwNiwxOCBAQAogCWludAkoKnNldF9jaGFubmVsKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKIAkJCSAgICAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSk7CisKKwlpbnQJKCpzY2FuKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxdWVzdCk7CisKKwlpbnQJKCphdXRoKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCAqcmVxKTsKKwlpbnQJKCphc3NvYykoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCAqcmVxKTsKKwlpbnQJKCpkZWF1dGgpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCAqcmVxKTsKKwlpbnQJKCpkaXNhc3NvYykoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfZGlzYXNzb2NfcmVxdWVzdCAqcmVxKTsKIH07CiAKIC8qIHRlbXBvcmFyeSB3ZXh0IGhhbmRsZXJzICovCkBAIC01NzQsNSArODI4LDEzNCBAQAogCQkJICB1MzIgKm1vZGUsIGNoYXIgKmV4dHJhKTsKIGludCBjZmc4MDIxMV93ZXh0X2dpd21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSAgdTMyICptb2RlLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9zaXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKTsKK2ludCBjZmc4MDIxMV93ZXh0X2dpd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSk7CitpbnQgY2ZnODAyMTFfd2V4dF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpOworCisvKioKKyAqIGNmZzgwMjExX3NjYW5fZG9uZSAtIG5vdGlmeSB0aGF0IHNjYW4gZmluaXNoZWQKKyAqCisgKiBAcmVxdWVzdDogdGhlIGNvcnJlc3BvbmRpbmcgc2NhbiByZXF1ZXN0CisgKiBAYWJvcnRlZDogc2V0IHRvIHRydWUgaWYgdGhlIHNjYW4gd2FzIGFib3J0ZWQgZm9yIGFueSByZWFzb24sCisgKgl1c2Vyc3BhY2Ugd2lsbCBiZSBub3RpZmllZCBvZiB0aGF0CisgKi8KK3ZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsIGJvb2wgYWJvcnRlZCk7CisKKy8qKgorICogY2ZnODAyMTFfaW5mb3JtX2JzcyAtIGluZm9ybSBjZmc4MDIxMSBvZiBhIG5ldyBCU1MKKyAqCisgKiBAd2lwaHk6IHRoZSB3aXBoeSByZXBvcnRpbmcgdGhlIEJTUworICogQGJzczogdGhlIGZvdW5kIEJTUworICogQHNpZ25hbDogdGhlIHNpZ25hbCBzdHJlbmd0aCwgdHlwZSBkZXBlbmRzIG9uIHRoZSB3aXBoeSdzIHNpZ25hbF90eXBlCisgKiBAZ2ZwOiBjb250ZXh0IGZsYWdzCisgKgorICogVGhpcyBpbmZvcm1zIGNmZzgwMjExIHRoYXQgQlNTIGluZm9ybWF0aW9uIHdhcyBmb3VuZCBhbmQKKyAqIHRoZSBCU1Mgc2hvdWxkIGJlIHVwZGF0ZWQvYWRkZWQuCisgKi8KK3N0cnVjdCBjZmc4MDIxMV9ic3MqCitjZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAorCQkJICBzMzIgc2lnbmFsLCBnZnBfdCBnZnApOworCitzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjZmc4MDIxMV9nZXRfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgIGNvbnN0IHU4ICpic3NpZCwKKwkJCQkgICAgICBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkJCSAgICAgIHUxNiBjYXBhX21hc2ssIHUxNiBjYXBhX3ZhbCk7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZmc4MDIxMV9ic3MgKgorY2ZnODAyMTFfZ2V0X2lic3Moc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCSAgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKK3sKKwlyZXR1cm4gY2ZnODAyMTFfZ2V0X2Jzcyh3aXBoeSwgY2hhbm5lbCwgTlVMTCwgc3NpZCwgc3NpZF9sZW4sCisJCQkJV0xBTl9DQVBBQklMSVRZX0lCU1MsIFdMQU5fQ0FQQUJJTElUWV9JQlNTKTsKK30KKworc3RydWN0IGNmZzgwMjExX2JzcyAqY2ZnODAyMTFfZ2V0X21lc2goc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGlkLCBzaXplX3QgbWVzaGlkbGVuLAorCQkJCSAgICAgICBjb25zdCB1OCAqbWVzaGNmZyk7Cit2b2lkIGNmZzgwMjExX3B1dF9ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKTsKKy8qKgorICogY2ZnODAyMTFfdW5saW5rX2JzcyAtIHVubGluayBCU1MgZnJvbSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMKKyAqIEB3aXBoeTogdGhlIHdpcGh5CisgKiBAYnNzOiB0aGUgYnNzIHRvIHJlbW92ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgZ2l2ZW4gQlNTIGZyb20gdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICogdGhlcmVieSBtYWtpbmcgaXQgbm8gbG9uZ2VyIHNob3cgdXAgaW4gc2NhbiByZXN1bHRzIGV0Yy4gVXNlIHRoaXMKKyAqIGZ1bmN0aW9uIHdoZW4geW91IGRldGVjdCBhIEJTUyBpcyBnb25lLiBOb3JtYWxseSBCU1NlcyB3aWxsIGFsc28gdGltZQorICogb3V0LCBzbyBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGF0IGFsbC4KKyAqLwordm9pZCBjZmc4MDIxMV91bmxpbmtfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBjZmc4MDIxMV9ic3MgKmJzcyk7CisKKy8qKgorICogY2ZnODAyMTFfc2VuZF9yeF9hdXRoIC0gbm90aWZpY2F0aW9uIG9mIHByb2Nlc3NlZCBhdXRoZW50aWNhdGlvbgorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqIEBidWY6IGF1dGhlbnRpY2F0aW9uIGZyYW1lIChoZWFkZXIgKyBib2R5KQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBmcmFtZSBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gYXV0aGVudGljYXRpb24gaGFzIGJlZW4gcHJvY2Vzc2VkIGluCisgKiBzdGF0aW9uIG1vZGUuCisgKi8KK3ZvaWQgY2ZnODAyMTFfc2VuZF9yeF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOworCisvKioKKyAqIGNmZzgwMjExX3NlbmRfcnhfYXNzb2MgLSBub3RpZmljYXRpb24gb2YgcHJvY2Vzc2VkIGFzc29jaWF0aW9uCisgKiBAZGV2OiBuZXR3b3JrIGRldmljZQorICogQGJ1ZjogKHJlKWFzc29jaWF0aW9uIHJlc3BvbnNlIGZyYW1lIChoZWFkZXIgKyBib2R5KQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBmcmFtZSBkYXRhCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYSAocmUpYXNzb2NpYXRpb24gcmVzcG9uc2UgaGFzIGJlZW4KKyAqIHByb2Nlc3NlZCBpbiBzdGF0aW9uIG1vZGUuCisgKi8KK3ZvaWQgY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKKworLyoqCisgKiBjZmc4MDIxMV9zZW5kX3J4X2RlYXV0aCAtIG5vdGlmaWNhdGlvbiBvZiBwcm9jZXNzZWQgZGVhdXRoZW50aWNhdGlvbgorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqIEBidWY6IGRlYXV0aGVudGljYXRpb24gZnJhbWUgKGhlYWRlciArIGJvZHkpCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGZyYW1lIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBkZWF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHByb2Nlc3NlZCBpbgorICogc3RhdGlvbiBtb2RlLgorICovCit2b2lkIGNmZzgwMjExX3NlbmRfcnhfZGVhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsCisJCQkgICAgIHNpemVfdCBsZW4pOworCisvKioKKyAqIGNmZzgwMjExX3NlbmRfcnhfZGlzYXNzb2MgLSBub3RpZmljYXRpb24gb2YgcHJvY2Vzc2VkIGRpc2Fzc29jaWF0aW9uCisgKiBAZGV2OiBuZXR3b3JrIGRldmljZQorICogQGJ1ZjogZGlzYXNzb2NpYXRpb24gcmVzcG9uc2UgZnJhbWUgKGhlYWRlciArIGJvZHkpCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGZyYW1lIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBkaXNhc3NvY2lhdGlvbiBoYXMgYmVlbiBwcm9jZXNzZWQgaW4KKyAqIHN0YXRpb24gbW9kZS4KKyAqLwordm9pZCBjZmc4MDIxMV9zZW5kX3J4X2Rpc2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsCisJCQkgICAgICAgc2l6ZV90IGxlbik7CisKKy8qKgorICogY2ZnODAyMTFfaG9sZF9ic3MgLSBleGNsdWRlIGJzcyBmcm9tIGV4cGlyYXRpb24KKyAqIEBic3M6IGJzcyB3aGljaCBzaG91bGQgbm90IGV4cGlyZQorICoKKyAqIEluIGEgY2FzZSB3aGVuIHRoZSBCU1MgaXMgbm90IHVwZGF0ZWQgYnV0IGl0IHNob3VsZG4ndCBleHBpcmUgdGhpcworICogZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gbWFyayB0aGUgQlNTIHRvIGJlIGV4Y2x1ZGVkIGZyb20gZXhwaXJhdGlvbi4KKyAqLwordm9pZCBjZmc4MDIxMV9ob2xkX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOworCisvKioKKyAqIGNmZzgwMjExX3VuaG9sZF9ic3MgLSByZW1vdmUgZXhwaXJhdGlvbiBleGNlcHRpb24gZnJvbSB0aGUgQlNTCisgKiBAYnNzOiBic3Mgd2hpY2ggY2FuIGV4cGlyZSBhZ2FpbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbWFya3MgdGhlIEJTUyB0byBiZSBleHBpcmFibGUgYWdhaW4uCisgKi8KK3ZvaWQgY2ZnODAyMTFfdW5ob2xkX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MpOwogCiAjZW5kaWYgLyogX19ORVRfQ0ZHODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaAppbmRleCA1MmU5N2JmLi44MzlmNzY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc2EuaAorKysgYi9pbmNsdWRlL25ldC9kc2EuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBpbmNsdWRlL25ldC9kc2EuaCAtIERyaXZlciBmb3IgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSBzd2l0Y2ggY2hpcHMKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTEsMjMgKzExLDQ3IEBACiAjaWZuZGVmIF9fTElOVVhfTkVUX0RTQV9ICiAjZGVmaW5lIF9fTElOVVhfTkVUX0RTQV9ICiAKLSNkZWZpbmUgRFNBX01BWF9QT1JUUwkxMgorI2RlZmluZSBEU0FfTUFYX1NXSVRDSEVTCTQKKyNkZWZpbmUgRFNBX01BWF9QT1JUUwkJMTIKKworc3RydWN0IGRzYV9jaGlwX2RhdGEgeworCS8qCisJICogSG93IHRvIGFjY2VzcyB0aGUgc3dpdGNoIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLgorCSAqLworCXN0cnVjdCBkZXZpY2UJKm1paV9idXM7CisJaW50CQlzd19hZGRyOworCisJLyoKKwkgKiBUaGUgbmFtZXMgb2YgdGhlIHN3aXRjaCdzIHBvcnRzLiAgVXNlICJjcHUiIHRvCisJICogZGVzaWduYXRlIHRoZSBzd2l0Y2ggcG9ydCB0aGF0IHRoZSBjcHUgaXMgY29ubmVjdGVkIHRvLAorCSAqICJkc2EiIHRvIGluZGljYXRlIHRoYXQgdGhpcyBwb3J0IGlzIGEgRFNBIGxpbmsgdG8KKwkgKiBhbm90aGVyIHN3aXRjaCwgTlVMTCB0byBpbmRpY2F0ZSB0aGUgcG9ydCBpcyB1bnVzZWQsCisJICogb3IgYW55IG90aGVyIHN0cmluZyB0byBpbmRpY2F0ZSB0aGlzIGlzIGEgcGh5c2ljYWwgcG9ydC4KKwkgKi8KKwljaGFyCQkqcG9ydF9uYW1lc1tEU0FfTUFYX1BPUlRTXTsKKworCS8qCisJICogQW4gYXJyYXkgKHdpdGggbnJfY2hpcHMgZWxlbWVudHMpIG9mIHdoaWNoIGVsZW1lbnQgW2FdCisJICogaW5kaWNhdGVzIHdoaWNoIHBvcnQgb24gdGhpcyBzd2l0Y2ggc2hvdWxkIGJlIHVzZWQgdG8KKwkgKiBzZW5kIHBhY2tldHMgdG8gdGhhdCBhcmUgZGVzdGluZWQgZm9yIHN3aXRjaCBhLiAgQ2FuIGJlCisJICogTlVMTCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzd2l0Y2ggY2hpcC4KKwkgKi8KKwlzOAkJKnJ0YWJsZTsKK307CiAKIHN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSB7CiAJLyoKIAkgKiBSZWZlcmVuY2UgdG8gYSBMaW51eCBuZXR3b3JrIGludGVyZmFjZSB0aGF0IGNvbm5lY3RzCi0JICogdG8gdGhlIHN3aXRjaCBjaGlwLgorCSAqIHRvIHRoZSByb290IHN3aXRjaCBjaGlwIG9mIHRoZSB0cmVlLgogCSAqLwogCXN0cnVjdCBkZXZpY2UJKm5ldGRldjsKIAogCS8qCi0JICogSG93IHRvIGFjY2VzcyB0aGUgc3dpdGNoIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzLCBhbmQKLQkgKiB0aGUgbmFtZXMgb2YgdGhlIHN3aXRjaCBwb3J0cyAodXNlICJjcHUiIHRvIGRlc2lnbmF0ZQotCSAqIHRoZSBzd2l0Y2ggcG9ydCB0aGF0IHRoZSBjcHUgaXMgY29ubmVjdGVkIHRvKS4KKwkgKiBJbmZvIHN0cnVjdHMgZGVzY3JpYmluZyBlYWNoIG9mIHRoZSBzd2l0Y2ggY2hpcHMKKwkgKiBjb25uZWN0ZWQgdmlhIHRoaXMgbmV0d29yayBpbnRlcmZhY2UuCiAJICovCi0Jc3RydWN0IGRldmljZQkqbWlpX2J1czsKLQlpbnQJCXN3X2FkZHI7Ci0JY2hhcgkJKnBvcnRfbmFtZXNbRFNBX01BWF9QT1JUU107CisJaW50CQlucl9jaGlwczsKKwlzdHJ1Y3QgZHNhX2NoaXBfZGF0YQkqY2hpcDsKIH07CiAKIGV4dGVybiBib29sIGRzYV91c2VzX2RzYV90YWdzKHZvaWQgKmRzYV9wdHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZXRob2MuaCBiL2luY2x1ZGUvbmV0L2V0aG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmMzc4OQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0L2V0aG9jLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbmV0L2V0aG9jLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBBdmlvbmljIERlc2lnbiBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBXcml0dGVuIGJ5IFRoaWVycnkgUmVkaW5nIDx0aGllcnJ5LnJlZGluZ0BhdmlvbmljLWRlc2lnbi5kZT4KKyAqLworCisjaWZuZGVmIExJTlVYX05FVF9FVEhPQ19ICisjZGVmaW5lIExJTlVYX05FVF9FVEhPQ19IIDEKKworc3RydWN0IGV0aG9jX3BsYXRmb3JtX2RhdGEgeworCXU4IGh3YWRkcltJRkhXQUREUkxFTl07CisJczggcGh5X2lkOworfTsKKworI2VuZGlmIC8qICFMSU5VWF9ORVRfRVRIT0NfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGI3Y2YzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE4NSArMCwwIEBACi0vKgotICogTWVyZ2VkIHdpdGggbWFpbmxpbmUgaWVlZTgwMjExLmggaW4gQXVnIDIwMDQuICBPcmlnaW5hbCBpZWVlODAyXzExCi0gKiByZW1haW5zIGNvcHlyaWdodCBieSB0aGUgb3JpZ2luYWwgYXV0aG9ycwotICoKLSAqIFBvcnRpb25zIG9mIHRoZSBtZXJnZWQgY29kZSBhcmUgYmFzZWQgb24gSG9zdCBBUCAoc29mdHdhcmUgd2lyZWxlc3MKLSAqIExBTiBhY2Nlc3MgcG9pbnQpIGRyaXZlciBmb3IgSW50ZXJzaWwgUHJpc20yLzIuNS8zLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyLCBTU0ggQ29tbXVuaWNhdGlvbnMgU2VjdXJpdHkgQ29ycCBhbmQgSm91bmkgTWFsaW5lbgotICogPGpAdzEuZmk+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMywgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KLSAqCi0gKiBBZGFwdGlvbiB0byBhIGdlbmVyaWMgSUVFRSA4MDIuMTEgc3RhY2sgYnkgSmFtZXMgS2V0cmVub3MKLSAqIDxqa2V0cmVub0BsaW51eC5pbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSwgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBTZWUgUkVBRE1FIGFuZCBDT1BZSU5HIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIEFQSSBWZXJzaW9uIEhpc3RvcnkKLSAqIDEuMC54IC0tIEluaXRpYWwgdmVyc2lvbgotICogMS4xLnggLS0gQWRkZWQgcmFkaW90YXAsIFFvUywgVElNLCBpZWVlODAyMTFfZ2VvIEFQSXMsCi0gKiAgICAgICAgICB2YXJpb3VzIHN0cnVjdHVyZSBjaGFuZ2VzLCBhbmQgY3J5cHRvIEFQSSBpbml0IG1ldGhvZAotICovCi0jaWZuZGVmIElFRUU4MDIxMV9ICi0jZGVmaW5lIElFRUU4MDIxMV9ICi0jaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4JLyogRVRIX0FMRU4gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogQVJSQVlfU0laRSAqLwotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaWVlZTgwMjExLmg+Ci0KLSNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KLQotI2RlZmluZSBJRUVFODAyMTFfVkVSU0lPTiAiZ2l0LTEuMS4xMyIKLQotI2RlZmluZSBJRUVFODAyMTFfREFUQV9MRU4JCTIzMDQKLS8qIE1heGltdW0gc2l6ZSBmb3IgdGhlIE1BLVVOSVREQVRBIHByaW1pdGl2ZSwgODAyLjExIHN0YW5kYXJkIHNlY3Rpb24KLSAgIDYuMi4xLjEuMi4KLQotICAgVGhlIGZpZ3VyZSBpbiBzZWN0aW9uIDcuMS4yIHN1Z2dlc3RzIGEgYm9keSBzaXplIG9mIHVwIHRvIDIzMTIKLSAgIGJ5dGVzIGlzIGFsbG93ZWQsIHdoaWNoIGlzIGEgYml0IGNvbmZ1c2luZywgSSBzdXNwZWN0IHRoaXMKLSAgIHJlcHJlc2VudHMgdGhlIDIzMDQgYnl0ZXMgb2YgcmVhbCBkYXRhLCBwbHVzIGEgcG9zc2libGUgOCBieXRlcyBvZgotICAgV0VQIElWIGFuZCBJQ1YuICh0aGlzIGludGVycHJldGF0aW9uIHN1Z2dlc3RlZCBieSBSYW1pcm8gQmFycmVpcm8pICovCi0KLSNkZWZpbmUgSUVFRTgwMjExXzFBRERSX0xFTiAxMAotI2RlZmluZSBJRUVFODAyMTFfMkFERFJfTEVOIDE2Ci0jZGVmaW5lIElFRUU4MDIxMV8zQUREUl9MRU4gMjQKLSNkZWZpbmUgSUVFRTgwMjExXzRBRERSX0xFTiAzMAotI2RlZmluZSBJRUVFODAyMTFfRkNTX0xFTiAgICA0Ci0jZGVmaW5lIElFRUU4MDIxMV9ITEVOCQkJKElFRUU4MDIxMV80QUREUl9MRU4pCi0jZGVmaW5lIElFRUU4MDIxMV9GUkFNRV9MRU4JCShJRUVFODAyMTFfREFUQV9MRU4gKyBJRUVFODAyMTFfSExFTikKLQotI2RlZmluZSBNSU5fRlJBR19USFJFU0hPTEQgICAgIDI1NlUKLSNkZWZpbmUJTUFYX0ZSQUdfVEhSRVNIT0xEICAgICAyMzQ2VQotCi0vKiBGcmFtZSBjb250cm9sIGZpZWxkIGNvbnN0YW50cyAqLwotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9WRVJTCQkweDAwMDMKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfRlRZUEUJCTB4MDAwYwotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9TVFlQRQkJMHgwMGYwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1RPRFMJCTB4MDEwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9GUk9NRFMJCTB4MDIwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MJMHgwNDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1JFVFJZCQkweDA4MDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfUE0JCTB4MTAwMAotI2RlZmluZSBJRUVFODAyMTFfRkNUTF9NT1JFREFUQQkJMHgyMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRAkweDQwMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZDVExfT1JERVIJCTB4ODAwMAotCi0jZGVmaW5lIElFRUU4MDIxMV9GVFlQRV9NR01UCQkweDAwMDAKLSNkZWZpbmUgSUVFRTgwMjExX0ZUWVBFX0NUTAkJMHgwMDA0Ci0jZGVmaW5lIElFRUU4MDIxMV9GVFlQRV9EQVRBCQkweDAwMDgKLQotLyogbWFuYWdlbWVudCAqLwotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRCTB4MDAwMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCAJMHgwMDEwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFUQkweDAwMjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUAkweDAwMzAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUQkweDAwNDAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AJMHgwMDUwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9CRUFDT04JCTB4MDA4MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQVRJTQkJMHgwMDkwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQwkweDAwQTAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FVVEgJCTB4MDBCMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREVBVVRICQkweDAwQzAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FDVElPTgkJMHgwMEQwCi0KLS8qIGNvbnRyb2wgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1BTUE9MTAkJMHgwMEEwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9SVFMJCTB4MDBCMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ1RTCQkweDAwQzAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0FDSwkJMHgwMEQwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkVORAkJMHgwMEUwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9DRkVOREFDSwkweDAwRjAKLQotLyogZGF0YSAqLwotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREFUQQkJMHgwMDAwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBX0NGQUNLCTB4MDAxMAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfREFUQV9DRlBPTEwJMHgwMDIwCi0jZGVmaW5lIElFRUU4MDIxMV9TVFlQRV9EQVRBX0NGQUNLUE9MTAkweDAwMzAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DCTB4MDA0MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZBQ0sJCTB4MDA1MAotI2RlZmluZSBJRUVFODAyMTFfU1RZUEVfQ0ZQT0xMCQkweDAwNjAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX0NGQUNLUE9MTAkweDAwNzAKLSNkZWZpbmUgSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBICAgICAgICAweDAwODAKLQotI2RlZmluZSBJRUVFODAyMTFfU0NUTF9GUkFHCQkweDAwMEYKLSNkZWZpbmUgSUVFRTgwMjExX1NDVExfU0VRCQkweEZGRjAKLQotLyogUU9TIGNvbnRyb2wgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1FDVExfVElECQkweDAwMEYKLQotLyogZGVidWcgbWFjcm9zICovCi0KLSNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCi1leHRlcm4gdTMyIGllZWU4MDIxMV9kZWJ1Z19sZXZlbDsKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKLWRvIHsgaWYgKGllZWU4MDIxMV9kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKLSAgcHJpbnRrKEtFUk5fREVCVUcgImllZWU4MDIxMTogJWMgJXMgIiBmbXQsIFwKLSAgICAgICAgIGluX2ludGVycnVwdCgpID8gJ0knIDogJ1UnLCBfX2Z1bmNfXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQotc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9yYXRlbGltaXRfZGVidWcodTMyIGxldmVsKQotewotCXJldHVybiAoaWVlZTgwMjExX2RlYnVnX2xldmVsICYgbGV2ZWwpICYmIG5ldF9yYXRlbGltaXQoKTsKLX0KLSNlbHNlCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKLXN0YXRpYyBpbmxpbmUgYm9vbCBpZWVlODAyMTFfcmF0ZWxpbWl0X2RlYnVnKHUzMiBsZXZlbCkKLXsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYJCQkJLyogQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLwotCi0vKgotICogVG8gdXNlIHRoZSBkZWJ1ZyBzeXN0ZW06Ci0gKgotICogSWYgeW91IGFyZSBkZWZpbmluZyBhIG5ldyBkZWJ1ZyBjbGFzc2lmaWNhdGlvbiwgc2ltcGx5IGFkZCBpdCB0byB0aGUgI2RlZmluZQotICogbGlzdCBoZXJlIGluIHRoZSBmb3JtIG9mOgotICoKLSAqICNkZWZpbmUgSUVFRTgwMjExX0RMX3h4eHggVkFMVUUKLSAqCi0gKiBzaGlmdGluZyB2YWx1ZSB0byB0aGUgbGVmdCBvbmUgYml0IGZyb20gdGhlIHByZXZpb3VzIGVudHJ5LiAgeHh4eCBzaG91bGQgYmUKLSAqIHRoZSBuYW1lIG9mIHRoZSBjbGFzc2lmaWNhdGlvbiAoZm9yIGV4YW1wbGUsIFdFUCkKLSAqCi0gKiBZb3UgdGhlbiBuZWVkIHRvIGVpdGhlciBhZGQgYSBJRUVFODAyMTFfeHh4eF9ERUJVRygpIG1hY3JvIGRlZmluaXRpb24gZm9yIHlvdXIKLSAqIGNsYXNzaWZpY2F0aW9uLCBvciB1c2UgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF94eHh4LCAuLi4pIHdoZW5ldmVyIHlvdSB3YW50Ci0gKiB0byBzZW5kIG91dHB1dCB0byB0aGF0IGNsYXNzaWZpY2F0aW9uLgotICoKLSAqIFRvIGFkZCB5b3VyIGRlYnVnIGxldmVsIHRvIHRoZSBsaXN0IG9mIGxldmVscyBzZWVuIHdoZW4geW91IHBlcmZvcm0KLSAqCi0gKiAlIGNhdCAvcHJvYy9uZXQvaWVlZTgwMjExL2RlYnVnX2xldmVsCi0gKgotICogeW91IHNpbXBseSBuZWVkIHRvIGFkZCB5b3VyIGVudHJ5IHRvIHRoZSBpZWVlODAyMTFfZGVidWdfbGV2ZWwgYXJyYXkuCi0gKgotICogSWYgeW91IGRvIG5vdCBzZWUgZGVidWdfbGV2ZWwgaW4gL3Byb2MvbmV0L2llZWU4MDIxMSB0aGVuIHlvdSBkbyBub3QgaGF2ZQotICogQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBkZWZpbmVkIGluIHlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24KLSAqCi0gKi8KLQotI2RlZmluZSBJRUVFODAyMTFfRExfSU5GTyAgICAgICAgICAoMTw8MCkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1dYICAgICAgICAgICAgKDE8PDEpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9TQ0FOICAgICAgICAgICgxPDwyKQotI2RlZmluZSBJRUVFODAyMTFfRExfU1RBVEUgICAgICAgICAoMTw8MykKLSNkZWZpbmUgSUVFRTgwMjExX0RMX01HTVQgICAgICAgICAgKDE8PDQpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9GUkFHICAgICAgICAgICgxPDw1KQotI2RlZmluZSBJRUVFODAyMTFfRExfRFJPUCAgICAgICAgICAoMTw8NykKLQotI2RlZmluZSBJRUVFODAyMTFfRExfVFggICAgICAgICAgICAoMTw8OCkKLSNkZWZpbmUgSUVFRTgwMjExX0RMX1JYICAgICAgICAgICAgKDE8PDkpCi0jZGVmaW5lIElFRUU4MDIxMV9ETF9RT1MgICAgICAgICAgICgxPDwzMSkKLQotI2RlZmluZSBJRUVFODAyMTFfRVJST1IoZiwgYS4uLikgcHJpbnRrKEtFUk5fRVJSICJpZWVlODAyMTE6ICIgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX1dBUk5JTkcoZiwgYS4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiaWVlZTgwMjExOiAiIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19JTkZPKGYsIGEuLi4pICAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9JTkZPLCBmLCAjIyBhKQotCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19XWChmLCBhLi4uKSAgICAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9XWCwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1NDQU4oZiwgYS4uLikgICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1NDQU4sIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19TVEFURShmLCBhLi4uKSAgSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9TVEFURSwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX01HTVQoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfTUdNVCwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX0ZSQUcoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRlJBRywgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX0RST1AoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRFJPUCwgZiwgIyMgYSkKLSNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX1RYKGYsIGEuLi4pICBJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RYLCBmLCAjIyBhKQotI2RlZmluZSBJRUVFODAyMTFfREVCVUdfUlgoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUlgsIGYsICMjIGEpCi0jZGVmaW5lIElFRUU4MDIxMV9ERUJVR19RT1MoZiwgYS4uLikgIElFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfUU9TLCBmLCAjIyBhKQotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgkvKiBBUlBIUkRfRVRIRVIgKi8KLQotI2lmbmRlZiBXSVJFTEVTU19TUFkKLSNkZWZpbmUgV0lSRUxFU1NfU1BZCQkvKiBlbmFibGUgaXdzcHkgc3VwcG9ydCAqLwotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4JLyogbmV3IGRyaXZlciBBUEkgKi8KLQotI2RlZmluZSBFVEhfUF9QUkVBVVRIIDB4ODhDNwkvKiBJRUVFIDgwMi4xMWkgcHJlLWF1dGhlbnRpY2F0aW9uICovCi0KLSNpZm5kZWYgRVRIX1BfODAyMTFfUkFXCi0jZGVmaW5lIEVUSF9QXzgwMjExX1JBVyAoRVRIX1BfRUNPTkVUICsgMSkKLSNlbmRpZgotCi0vKiBJRUVFIDgwMi4xMSBkZWZpbmVzICovCi0KLSNkZWZpbmUgUDgwMjExX09VSV9MRU4gMwotCi1zdHJ1Y3QgaWVlZTgwMjExX3NuYXBfaGRyIHsKLQotCXU4IGRzYXA7CQkvKiBhbHdheXMgMHhBQSAqLwotCXU4IHNzYXA7CQkvKiBhbHdheXMgMHhBQSAqLwotCXU4IGN0cmw7CQkvKiBhbHdheXMgMHgwMyAqLwotCXU4IG91aVtQODAyMTFfT1VJX0xFTl07CS8qIG9yZ2FuaXphdGlvbmFsIHVuaXZlcnNhbCBpZCAqLwotCi19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotI2RlZmluZSBTTkFQX1NJWkUgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfc25hcF9oZHIpCi0KLSNkZWZpbmUgV0xBTl9GQ19HRVRfVkVSUyhmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9WRVJTKQotI2RlZmluZSBXTEFOX0ZDX0dFVF9UWVBFKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKQotI2RlZmluZSBXTEFOX0ZDX0dFVF9TVFlQRShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkKLQotI2RlZmluZSBXTEFOX0dFVF9TRVFfRlJBRyhzZXEpICgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX0ZSQUcpCi0jZGVmaW5lIFdMQU5fR0VUX1NFUV9TRVEoc2VxKSAgKCgoc2VxKSAmIElFRUU4MDIxMV9TQ1RMX1NFUSkgPj4gNCkKLQotLyogQWN0aW9uIGNhdGVnb3JpZXMgLSA4MDIuMTFoICovCi1lbnVtIGllZWU4MDIxMV9hY3Rpb25jYXRlZ29yaWVzIHsKLQlXTEFOX0FDVElPTl9TUEVDVFJVTV9NR01UID0gMCwKLQkvKiBSZXNlcnZlZCAxLTEyNyAgKi8KLQkvKiBFcnJvciAgICAxMjgtMjU1ICovCi19OwotCi0vKiBBY3Rpb24gZGV0YWlscyAtIDgwMi4xMWggKi8KLWVudW0gaWVlZTgwMjExX2FjdGlvbmRldGFpbHMgewotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX01FQVNVUkVfUkVRVUVTVCA9IDAsCi0JV0xBTl9BQ1RJT05fQ0FURUdPUllfTUVBU1VSRV9SRVBPUlQgPSAxLAotCVdMQU5fQUNUSU9OX0NBVEVHT1JZX1RQQ19SRVFVRVNUID0gMiwKLQlXTEFOX0FDVElPTl9DQVRFR09SWV9UUENfUkVQT1JUID0gMywKLQlXTEFOX0FDVElPTl9DQVRFR09SWV9DSEFOTkVMX1NXSVRDSCA9IDQsCi0JLyogNSAtIDI1NSBSZXNlcnZlZCAqLwotfTsKLQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfU0lHTkFMICgxPDwwKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfUlNTSSAoMTw8MSkKLSNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX05PSVNFICgxPDwyKQotI2RlZmluZSBJRUVFODAyMTFfU1RBVE1BU0tfUkFURSAoMTw8MykKLSNkZWZpbmUgSUVFRTgwMjExX1NUQVRNQVNLX1dFTUFTSyAweDcKLQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX01PRFVMQVRJT04gICAgKDE8PDApCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX01PRFVMQVRJT04gICAoMTw8MSkKLQotI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfQkFORCAgICAgKDE8PDApCi0jZGVmaW5lIElFRUU4MDIxMV81MkdIWl9CQU5EICAgICAoMTw8MSkKLQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1CCQkgICAgICAgIDB4MDIKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzJNQgkJICAgICAgICAweDA0Ci0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURV81TUIJCSAgICAgICAgMHgwQgotI2RlZmluZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQgkJICAgICAgICAweDE2Ci0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CCQkgICAgICAgIDB4MEMKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV85TUIJCSAgICAgICAgMHgxMgotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzEyTUIJCTB4MTgKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8xOE1CCQkweDI0Ci0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQgkJMHgzMAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzM2TUIJCTB4NDgKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV80OE1CCQkweDYwCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNTRNQgkJMHg2QwotI2RlZmluZSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLCQkweDgwCi0KLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzFNQl9NQVNLCQkoMTw8MCkKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzJNQl9NQVNLCQkoMTw8MSkKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzVNQl9NQVNLCQkoMTw8MikKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19SQVRFXzExTUJfTUFTSwkJKDE8PDMpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfNk1CX01BU0sJCSgxPDw0KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzlNQl9NQVNLCQkoMTw8NSkKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8xMk1CX01BU0sJCSgxPDw2KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzE4TUJfTUFTSwkJKDE8PDcpCi0jZGVmaW5lIElFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQl9NQVNLCQkoMTw8OCkKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURV8zNk1CX01BU0sJCSgxPDw5KQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzQ4TUJfTUFTSwkJKDE8PDEwKQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9SQVRFXzU0TUJfTUFTSwkJKDE8PDExKQotCi0jZGVmaW5lIElFRUU4MDIxMV9DQ0tfUkFURVNfTUFTSwkgICAgICAgIDB4MDAwMDAwMEYKLSNkZWZpbmUgSUVFRTgwMjExX0NDS19CQVNJQ19SQVRFU19NQVNLCShJRUVFODAyMTFfQ0NLX1JBVEVfMU1CX01BU0sgfCBcCi0JSUVFRTgwMjExX0NDS19SQVRFXzJNQl9NQVNLKQotI2RlZmluZSBJRUVFODAyMTFfQ0NLX0RFRkFVTFRfUkFURVNfTUFTSwkoSUVFRTgwMjExX0NDS19CQVNJQ19SQVRFU19NQVNLIHwgXAotICAgICAgICBJRUVFODAyMTFfQ0NLX1JBVEVfNU1CX01BU0sgfCBcCi0gICAgICAgIElFRUU4MDIxMV9DQ0tfUkFURV8xMU1CX01BU0spCi0KLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fUkFURVNfTUFTSwkJMHgwMDAwMEZGMAotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9CQVNJQ19SQVRFU19NQVNLCShJRUVFODAyMTFfT0ZETV9SQVRFXzZNQl9NQVNLIHwgXAotCUlFRUU4MDIxMV9PRkRNX1JBVEVfMTJNQl9NQVNLIHwgXAotCUlFRUU4MDIxMV9PRkRNX1JBVEVfMjRNQl9NQVNLKQotI2RlZmluZSBJRUVFODAyMTFfT0ZETV9ERUZBVUxUX1JBVEVTX01BU0sJKElFRUU4MDIxMV9PRkRNX0JBU0lDX1JBVEVTX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV85TUJfTUFTSyAgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV8xOE1CX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV8zNk1CX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV80OE1CX01BU0sgfCBcCi0JSUVFRTgwMjExX09GRE1fUkFURV81NE1CX01BU0spCi0jZGVmaW5lIElFRUU4MDIxMV9ERUZBVUxUX1JBVEVTX01BU0sgKElFRUU4MDIxMV9PRkRNX0RFRkFVTFRfUkFURVNfTUFTSyB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUVFRTgwMjExX0NDS19ERUZBVUxUX1JBVEVTX01BU0spCi0KLSNkZWZpbmUgSUVFRTgwMjExX05VTV9PRkRNX1JBVEVTCSAgICA4Ci0jZGVmaW5lIElFRUU4MDIxMV9OVU1fQ0NLX1JBVEVTCSAgICAgICAgICAgIDQKLSNkZWZpbmUgSUVFRTgwMjExX09GRE1fU0hJRlRfTUFTS19BICAgICAgICAgNAotCi0vKiBOT1RFOiBUaGlzIGRhdGEgaXMgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzOyBub3QgYWxsIGhhcmR3YXJlIHByb3ZpZGVzIHRoaXMKLSAqICAgICAgIGluZm9ybWF0aW9uIGZvciBmcmFtZXMgcmVjZWl2ZWQuCi0gKiAgICAgICBGb3IgaWVlZTgwMjExX3J4X21ndCwgeW91IG5lZWQgdG8gc2V0IGF0IGxlYXN0IHRoZSAnbGVuJyBwYXJhbWV0ZXIuCi0gKi8KLXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgewotCXUzMiBtYWNfdGltZTsKLQlzOCByc3NpOwotCXU4IHNpZ25hbDsKLQl1OCBub2lzZTsKLQl1MTYgcmF0ZTsJCS8qIGluIDEwMCBrYnBzICovCi0JdTggcmVjZWl2ZWRfY2hhbm5lbDsKLQl1OCBjb250cm9sOwotCXU4IG1hc2s7Ci0JdTggZnJlcTsKLQl1MTYgbGVuOwotCXU2NCB0c2Y7Ci0JdTMyIGJlYWNvbl90aW1lOwotfTsKLQotLyogSUVFRSA4MDIuMTEgcmVxdWlyZXMgdGhhdCBTVEEgc3VwcG9ydHMgY29uY3VycmVudCByZWNlcHRpb24gb2YgYXQgbGVhc3QKLSAqIHRocmVlIGZyYWdtZW50ZWQgZnJhbWVzLiBUaGlzIGRlZmluZSBjYW4gYmUgaW5jcmVhc2VkIHRvIHN1cHBvcnQgbW9yZQotICogY29uY3VycmVudCBmcmFtZXMsIGJ1dCBpdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBlYWNoIGVudHJ5IGNhbiBjb25zdW1lIGFib3V0Ci0gKiAyIGtCIG9mIFJBTSBhbmQgaW5jcmVhc2luZyBjYWNoZSBzaXplIHdpbGwgc2xvdyBkb3duIGZyYW1lIHJlYXNzZW1ibHkuICovCi0jZGVmaW5lIElFRUU4MDIxMV9GUkFHX0NBQ0hFX0xFTiA0Ci0KLXN0cnVjdCBpZWVlODAyMTFfZnJhZ19lbnRyeSB7Ci0JdW5zaWduZWQgbG9uZyBmaXJzdF9mcmFnX3RpbWU7Ci0JdW5zaWduZWQgaW50IHNlcTsKLQl1bnNpZ25lZCBpbnQgbGFzdF9mcmFnOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTggc3JjX2FkZHJbRVRIX0FMRU5dOwotCXU4IGRzdF9hZGRyW0VUSF9BTEVOXTsKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfc3RhdHMgewotCXVuc2lnbmVkIGludCB0eF91bmljYXN0X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgdHhfbXVsdGljYXN0X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgdHhfZnJhZ21lbnRzOwotCXVuc2lnbmVkIGludCB0eF91bmljYXN0X29jdGV0czsKLQl1bnNpZ25lZCBpbnQgdHhfbXVsdGljYXN0X29jdGV0czsKLQl1bnNpZ25lZCBpbnQgdHhfZGVmZXJyZWRfdHJhbnNtaXNzaW9uczsKLQl1bnNpZ25lZCBpbnQgdHhfc2luZ2xlX3JldHJ5X2ZyYW1lczsKLQl1bnNpZ25lZCBpbnQgdHhfbXVsdGlwbGVfcmV0cnlfZnJhbWVzOwotCXVuc2lnbmVkIGludCB0eF9yZXRyeV9saW1pdF9leGNlZWRlZDsKLQl1bnNpZ25lZCBpbnQgdHhfZGlzY2FyZHM7Ci0JdW5zaWduZWQgaW50IHJ4X3VuaWNhc3RfZnJhbWVzOwotCXVuc2lnbmVkIGludCByeF9tdWx0aWNhc3RfZnJhbWVzOwotCXVuc2lnbmVkIGludCByeF9mcmFnbWVudHM7Ci0JdW5zaWduZWQgaW50IHJ4X3VuaWNhc3Rfb2N0ZXRzOwotCXVuc2lnbmVkIGludCByeF9tdWx0aWNhc3Rfb2N0ZXRzOwotCXVuc2lnbmVkIGludCByeF9mY3NfZXJyb3JzOwotCXVuc2lnbmVkIGludCByeF9kaXNjYXJkc19ub19idWZmZXI7Ci0JdW5zaWduZWQgaW50IHR4X2Rpc2NhcmRzX3dyb25nX3NhOwotCXVuc2lnbmVkIGludCByeF9kaXNjYXJkc191bmRlY3J5cHRhYmxlOwotCXVuc2lnbmVkIGludCByeF9tZXNzYWdlX2luX21zZ19mcmFnbWVudHM7Ci0JdW5zaWduZWQgaW50IHJ4X21lc3NhZ2VfaW5fYmFkX21zZ19mcmFnbWVudHM7Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX2RldmljZTsKLQotI2RlZmluZSBTRUNfS0VZXzEJCSgxPDwwKQotI2RlZmluZSBTRUNfS0VZXzIJCSgxPDwxKQotI2RlZmluZSBTRUNfS0VZXzMJCSgxPDwyKQotI2RlZmluZSBTRUNfS0VZXzQJCSgxPDwzKQotI2RlZmluZSBTRUNfQUNUSVZFX0tFWQkJKDE8PDQpCi0jZGVmaW5lIFNFQ19BVVRIX01PREUJCSgxPDw1KQotI2RlZmluZSBTRUNfVU5JQ0FTVF9HUk9VUAkoMTw8NikKLSNkZWZpbmUgU0VDX0xFVkVMCQkoMTw8NykKLSNkZWZpbmUgU0VDX0VOQUJMRUQJCSgxPDw4KQotI2RlZmluZSBTRUNfRU5DUllQVAkJKDE8PDkpCi0KLSNkZWZpbmUgU0VDX0xFVkVMXzAJCTAJLyogTm9uZSAqLwotI2RlZmluZSBTRUNfTEVWRUxfMQkJMQkvKiBXRVAgNDAgYW5kIDEwNCBiaXQgKi8KLSNkZWZpbmUgU0VDX0xFVkVMXzIJCTIJLyogTGV2ZWwgMSArIFRLSVAgKi8KLSNkZWZpbmUgU0VDX0xFVkVMXzJfQ0tJUAkzCS8qIExldmVsIDEgKyBDS0lQICovCi0jZGVmaW5lIFNFQ19MRVZFTF8zCQk0CS8qIExldmVsIDIgKyBDQ01QICovCi0KLSNkZWZpbmUgU0VDX0FMR19OT05FCQkwCi0jZGVmaW5lIFNFQ19BTEdfV0VQCQkxCi0jZGVmaW5lIFNFQ19BTEdfVEtJUAkJMgotI2RlZmluZSBTRUNfQUxHX0NDTVAJCTMKLQotI2RlZmluZSBXRVBfS0VZUwkJNAotI2RlZmluZSBXRVBfS0VZX0xFTgkJMTMKLSNkZWZpbmUgU0NNX0tFWV9MRU4JCTMyCi0jZGVmaW5lIFNDTV9URU1QT1JBTF9LRVlfTEVOR1RICTE2Ci0KLXN0cnVjdCBpZWVlODAyMTFfc2VjdXJpdHkgewotCXUxNiBhY3RpdmVfa2V5OjIsIGVuYWJsZWQ6MSwgdW5pY2FzdF91c2VzX2dyb3VwOjEsIGVuY3J5cHQ6MTsKLQl1OCBhdXRoX21vZGU7Ci0JdTggZW5jb2RlX2FsZ1tXRVBfS0VZU107Ci0JdTgga2V5X3NpemVzW1dFUF9LRVlTXTsKLQl1OCBrZXlzW1dFUF9LRVlTXVtTQ01fS0VZX0xFTl07Ci0JdTggbGV2ZWw7Ci0JdTE2IGZsYWdzOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qCi0KLSA4MDIuMTEgZGF0YSBmcmFtZSBmcm9tIEFQCi0KLSAgICAgICwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotQnl0ZXMgfCAgMiAgIHwgIDIgICB8ICAgIDYgICAgfCAgICA2ICAgIHwgICAgNiAgICB8ICAyICAgfCAwLi4yMzEyIHwgICA0ICB8Ci0gICAgICB8LS0tLS0tfC0tLS0tLXwtLS0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS18LS0tLS0tLS0tfC0tLS0tLXwKLURlc2MuIHwgY3RybCB8IGR1cmEgfCAgREEvUkEgIHwgICBUQSAgICB8ICAgIFNBICAgfCBTZXF1IHwgIGZyYW1lICB8ICBmY3MgfAotICAgICAgfCAgICAgIHwgdGlvbiB8IChCU1NJRCkgfCAgICAgICAgIHwgICAgICAgICB8IGVuY2UgfCAgZGF0YSAgIHwgICAgICB8Ci0gICAgICBgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScKLQotVG90YWw6IDI4LTIzNDAgYnl0ZXMKLQotKi8KLQotI2RlZmluZSBCRUFDT05fUFJPQkVfU1NJRF9JRF9QT1NJVElPTiAxMgotCi0vKiBNYW5hZ2VtZW50IEZyYW1lIEluZm9ybWF0aW9uIEVsZW1lbnQgVHlwZXMgKi8KLWVudW0gaWVlZTgwMjExX21maWUgewotCU1GSUVfVFlQRV9TU0lEID0gMCwKLQlNRklFX1RZUEVfUkFURVMgPSAxLAotCU1GSUVfVFlQRV9GSF9TRVQgPSAyLAotCU1GSUVfVFlQRV9EU19TRVQgPSAzLAotCU1GSUVfVFlQRV9DRl9TRVQgPSA0LAotCU1GSUVfVFlQRV9USU0gPSA1LAotCU1GSUVfVFlQRV9JQlNTX1NFVCA9IDYsCi0JTUZJRV9UWVBFX0NPVU5UUlkgPSA3LAotCU1GSUVfVFlQRV9IT1BfUEFSQU1TID0gOCwKLQlNRklFX1RZUEVfSE9QX1RBQkxFID0gOSwKLQlNRklFX1RZUEVfUkVRVUVTVCA9IDEwLAotCU1GSUVfVFlQRV9DSEFMTEVOR0UgPSAxNiwKLQlNRklFX1RZUEVfUE9XRVJfQ09OU1RSQUlOVCA9IDMyLAotCU1GSUVfVFlQRV9QT1dFUl9DQVBBQklMSVRZID0gMzMsCi0JTUZJRV9UWVBFX1RQQ19SRVFVRVNUID0gMzQsCi0JTUZJRV9UWVBFX1RQQ19SRVBPUlQgPSAzNSwKLQlNRklFX1RZUEVfU1VQUF9DSEFOTkVMUyA9IDM2LAotCU1GSUVfVFlQRV9DU0EgPSAzNywKLQlNRklFX1RZUEVfTUVBU1VSRV9SRVFVRVNUID0gMzgsCi0JTUZJRV9UWVBFX01FQVNVUkVfUkVQT1JUID0gMzksCi0JTUZJRV9UWVBFX1FVSUVUID0gNDAsCi0JTUZJRV9UWVBFX0lCU1NfREZTID0gNDEsCi0JTUZJRV9UWVBFX0VSUF9JTkZPID0gNDIsCi0JTUZJRV9UWVBFX1JTTiA9IDQ4LAotCU1GSUVfVFlQRV9SQVRFU19FWCA9IDUwLAotCU1GSUVfVFlQRV9HRU5FUklDID0gMjIxLAotCU1GSUVfVFlQRV9RT1NfUEFSQU1FVEVSID0gMjIyLAotfTsKLQotc3RydWN0IGllZWU4MDIxMV9oZHJfMWFkZHIgewotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzJhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgewotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBhZGRyMltFVEhfQUxFTl07Ci0JdTggYWRkcjNbRVRIX0FMRU5dOwotCV9fbGUxNiBzZXFfY3RsOwotCXU4IHBheWxvYWRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgewotCV9fbGUxNiBmcmFtZV9jdGw7Ci0JX19sZTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBhZGRyMltFVEhfQUxFTl07Ci0JdTggYWRkcjNbRVRIX0FMRU5dOwotCV9fbGUxNiBzZXFfY3RsOwotCXU4IGFkZHI0W0VUSF9BTEVOXTsKLQl1OCBwYXlsb2FkWzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLQl1OCBwYXlsb2FkWzBdOwotCV9fbGUxNiBxb3NfY3RsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IHsKLQl1OCBpZDsKLQl1OCBsZW47Ci0JdTggZGF0YVswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKgotICogVGhlc2UgYXJlIHRoZSBkYXRhIHR5cGVzIHRoYXQgY2FuIG1ha2UgdXAgbWFuYWdlbWVudCBwYWNrZXRzCi0gKgotCXUxNiBhdXRoX2FsZ29yaXRobTsKLQl1MTYgYXV0aF9zZXF1ZW5jZTsKLQl1MTYgYmVhY29uX2ludGVydmFsOwotCXUxNiBjYXBhYmlsaXR5OwotCXU4IGN1cnJlbnRfYXBbRVRIX0FMRU5dOwotCXUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0Jc3RydWN0IHsKLQkJdTE2IGFzc29jaWF0aW9uX2lkOjE0LCByZXNlcnZlZDoyOwotCX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCXUzMiB0aW1lX3N0YW1wWzJdOwotCXUxNiByZWFzb247Ci0JdTE2IHN0YXR1czsKLSovCi0KLXN0cnVjdCBpZWVlODAyMTFfYXV0aCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCV9fbGUxNiBhbGdvcml0aG07Ci0JX19sZTE2IHRyYW5zYWN0aW9uOwotCV9fbGUxNiBzdGF0dXM7Ci0JLyogY2hhbGxlbmdlICovCi0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2ggewotCXU4IGlkOwotCXU4IGxlbjsKLQl1OCBtb2RlOwotCXU4IGNoYW5uZWw7Ci0JdTggY291bnQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9hY3Rpb24gewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQl1OCBjYXRlZ29yeTsKLQl1OCBhY3Rpb247Ci0JdW5pb24gewotCQlzdHJ1Y3QgaWVlZTgwMjExX2FjdGlvbl9leGNoYW5nZSB7Ci0JCQl1OCB0b2tlbjsKLQkJCXN0cnVjdCBpZWVlODAyMTFfaW5mb19lbGVtZW50IGluZm9fZWxlbWVudFswXTsKLQkJfSBleGNoYW5nZTsKLQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3aXRjaCBjaGFubmVsX3N3aXRjaDsKLQotCX0gZm9ybWF0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMTYgcmVhc29uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qIEFsaWFzIGRlYXV0aCBmb3IgZGlzYXNzb2MgKi8KLSNkZWZpbmUgaWVlZTgwMjExX2RlYXV0aCBpZWVlODAyMTFfZGlzYXNzb2MKLQotc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXF1ZXN0IHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JLyogU1NJRCwgc3VwcG9ydGVkIHJhdGVzICovCi0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVzcG9uc2UgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMzIgdGltZV9zdGFtcFsyXTsKLQlfX2xlMTYgYmVhY29uX2ludGVydmFsOwotCV9fbGUxNiBjYXBhYmlsaXR5OwotCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcywgRkggcGFyYW1zLCBEUyBwYXJhbXMsCi0JICogQ0YgcGFyYW1zLCBJQlNTIHBhcmFtcywgVElNIChpZiBiZWFjb24pLCBSU04gKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyogQWxpYXMgYmVhY29uIGZvciBwcm9iZV9yZXNwb25zZSAqLwotI2RlZmluZSBpZWVlODAyMTFfYmVhY29uIGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZQotCi1zdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3JlcXVlc3QgewotCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIGhlYWRlcjsKLQlfX2xlMTYgY2FwYWJpbGl0eTsKLQlfX2xlMTYgbGlzdGVuX2ludGVydmFsOwotCS8qIFNTSUQsIHN1cHBvcnRlZCByYXRlcywgUlNOICovCi0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaW5mb19lbGVtZW50WzBdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcmVhc3NvY19yZXF1ZXN0IHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciBoZWFkZXI7Ci0JX19sZTE2IGNhcGFiaWxpdHk7Ci0JX19sZTE2IGxpc3Rlbl9pbnRlcnZhbDsKLQl1OCBjdXJyZW50X2FwW0VUSF9BTEVOXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgaGVhZGVyOwotCV9fbGUxNiBjYXBhYmlsaXR5OwotCV9fbGUxNiBzdGF0dXM7Ci0JX19sZTE2IGFpZDsKLQkvKiBzdXBwb3J0ZWQgcmF0ZXMgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2luZm9fZWxlbWVudCBpbmZvX2VsZW1lbnRbMF07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV90eGIgewotCXU4IG5yX2ZyYWdzOwotCXU4IGVuY3J5cHRlZDsKLQl1OCBydHNfaW5jbHVkZWQ7Ci0JdTggcmVzZXJ2ZWQ7Ci0JdTE2IGZyYWdfc2l6ZTsKLQl1MTYgcGF5bG9hZF9zaXplOwotCXN0cnVjdCBza19idWZmICpmcmFnbWVudHNbMF07Ci19OwotCi0vKiBTV0VFUCBUQUJMRSBFTlRSSUVTIE5VTUJFUiAqLwotI2RlZmluZSBNQVhfU1dFRVBfVEFCX0VOVFJJRVMJCSAgNDIKLSNkZWZpbmUgTUFYX1NXRUVQX1RBQl9FTlRSSUVTX1BFUl9QQUNLRVQgIDcKLS8qIE1BWF9SQVRFU19MRU5HVEggbmVlZHMgdG8gYmUgMTIuICBUaGUgc3BlYyBzYXlzIDgsIGFuZCBtYW55IEFQcwotICogb25seSB1c2UgOCwgYW5kIHRoZW4gdXNlIGV4dGVuZGVkIHJhdGVzIGZvciB0aGUgcmVtYWluaW5nIHN1cHBvcnRlZAotICogcmF0ZXMuICBPdGhlciBBUHMsIGhvd2V2ZXIsIHN0aWNrIGFsbCBvZiB0aGVpciBzdXBwb3J0ZWQgcmF0ZXMgb24gdGhlCi0gKiBtYWluIHJhdGVzIGluZm9ybWF0aW9uIGVsZW1lbnQuLi4gKi8KLSNkZWZpbmUgTUFYX1JBVEVTX0xFTkdUSCAgICAgICAgICAgICAgICAgICgodTgpMTIpCi0jZGVmaW5lIE1BWF9SQVRFU19FWF9MRU5HVEggICAgICAgICAgICAgICAoKHU4KTE2KQotI2RlZmluZSBNQVhfTkVUV09SS19DT1VOVCAgICAgICAgICAgICAgICAgIDEyOAotCi0jZGVmaW5lIENSQ19MRU5HVEggICAgICAgICAgICAgICAgIDRVCi0KLSNkZWZpbmUgTUFYX1dQQV9JRV9MRU4gNjQKLQotI2RlZmluZSBORVRXT1JLX0hBU19PRkRNICAgICAgICgxPDwxKQotI2RlZmluZSBORVRXT1JLX0hBU19DQ0sgICAgICAgICgxPDwyKQotCi0vKiBRb1Mgc3RydWN0dXJlICovCi0jZGVmaW5lIE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTICAgICAgKDE8PDMpCi0jZGVmaW5lIE5FVFdPUktfSEFTX1FPU19JTkZPUk1BVElPTiAgICAgKDE8PDQpCi0jZGVmaW5lIE5FVFdPUktfSEFTX1FPU19NQVNLICAgICAgICAgICAgKE5FVFdPUktfSEFTX1FPU19QQVJBTUVURVJTIHwgXAotCQkJCQkgTkVUV09SS19IQVNfUU9TX0lORk9STUFUSU9OKQotCi0vKiA4MDIuMTFoICovCi0jZGVmaW5lIE5FVFdPUktfSEFTX1BPV0VSX0NPTlNUUkFJTlQgICAgKDE8PDUpCi0jZGVmaW5lIE5FVFdPUktfSEFTX0NTQSAgICAgICAgICAgICAgICAgKDE8PDYpCi0jZGVmaW5lIE5FVFdPUktfSEFTX1FVSUVUICAgICAgICAgICAgICAgKDE8PDcpCi0jZGVmaW5lIE5FVFdPUktfSEFTX0lCU1NfREZTICAgICAgICAgICAgKDE8PDgpCi0jZGVmaW5lIE5FVFdPUktfSEFTX1RQQ19SRVBPUlQgICAgICAgICAgKDE8PDkpCi0KLSNkZWZpbmUgTkVUV09SS19IQVNfRVJQX1ZBTFVFICAgICAgICAgICAoMTw8MTApCi0KLSNkZWZpbmUgUU9TX1FVRVVFX05VTSAgICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFFPU19PVUlfTEVOICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBRT1NfT1VJX1RZUEUgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgUU9TX0VMRU1FTlRfSUQgICAgICAgICAgICAgICAgICAyMjEKLSNkZWZpbmUgUU9TX09VSV9JTkZPX1NVQl9UWVBFICAgICAgICAgICAwCi0jZGVmaW5lIFFPU19PVUlfUEFSQU1fU1VCX1RZUEUgICAgICAgICAgMQotI2RlZmluZSBRT1NfVkVSU0lPTl8xICAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgUU9TX0FJRlNOX01JTl9WQUxVRSAgICAgICAgICAgICAyCi0KLXN0cnVjdCBpZWVlODAyMTFfcW9zX2luZm9ybWF0aW9uX2VsZW1lbnQgewotCXU4IGVsZW1lbnRJRDsKLQl1OCBsZW5ndGg7Ci0JdTggcXVpW1FPU19PVUlfTEVOXTsKLQl1OCBxdWlfdHlwZTsKLQl1OCBxdWlfc3VidHlwZTsKLQl1OCB2ZXJzaW9uOwotCXU4IGFjX2luZm87Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9xb3NfYWNfcGFyYW1ldGVyIHsKLQl1OCBhY2lfYWlmc247Ci0JdTggZWN3X21pbl9tYXg7Ci0JX19sZTE2IHR4X29wX2xpbWl0OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcW9zX3BhcmFtZXRlcl9pbmZvIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19pbmZvcm1hdGlvbl9lbGVtZW50IGluZm9fZWxlbWVudDsKLQl1OCByZXNlcnZlZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19hY19wYXJhbWV0ZXIgYWNfcGFyYW1zX3JlY29yZFtRT1NfUVVFVUVfTlVNXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIHsKLQlfX2xlMTYgY3dfbWluW1FPU19RVUVVRV9OVU1dOwotCV9fbGUxNiBjd19tYXhbUU9TX1FVRVVFX05VTV07Ci0JdTggYWlmc1tRT1NfUVVFVUVfTlVNXTsKLQl1OCBmbGFnW1FPU19RVUVVRV9OVU1dOwotCV9fbGUxNiB0eF9vcF9saW1pdFtRT1NfUVVFVUVfTlVNXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX3Fvc19kYXRhIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0JaW50IGFjdGl2ZTsKLQlpbnQgc3VwcG9ydGVkOwotCXU4IHBhcmFtX2NvdW50OwotCXU4IG9sZF9wYXJhbV9jb3VudDsKLX07Ci0KLXN0cnVjdCBpZWVlODAyMTFfdGltX3BhcmFtZXRlcnMgewotCXU4IHRpbV9jb3VudDsKLQl1OCB0aW1fcGVyaW9kOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1lbnVtIHsJCQkJLyogaWVlZTgwMjExX2Jhc2ljX3JlcG9ydC5tYXAgKi8KLQlJRUVFODAyMTFfQkFTSUNfTUFQX0JTUyA9ICgxIDw8IDApLAotCUlFRUU4MDIxMV9CQVNJQ19NQVBfT0ZETSA9ICgxIDw8IDEpLAotCUlFRUU4MDIxMV9CQVNJQ19NQVBfVU5JREVOVElGSUVEID0gKDEgPDwgMiksCi0JSUVFRTgwMjExX0JBU0lDX01BUF9SQURBUiA9ICgxIDw8IDMpLAotCUlFRUU4MDIxMV9CQVNJQ19NQVBfVU5NRUFTVVJFRCA9ICgxIDw8IDQpLAotCS8qIEJpdHMgNS03IGFyZSByZXNlcnZlZCAqLwotCi19Owotc3RydWN0IGllZWU4MDIxMV9iYXNpY19yZXBvcnQgewotCXU4IGNoYW5uZWw7Ci0JX19sZTY0IHN0YXJ0X3RpbWU7Ci0JX19sZTE2IGR1cmF0aW9uOwotCXU4IG1hcDsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1lbnVtIHsJCQkJLyogaWVlZTgwMjExX21lYXN1cmVtZW50X3JlcXVlc3QubW9kZSAqLwotCS8qIEJpdCAwIGlzIHJlc2VydmVkICovCi0JSUVFRTgwMjExX01FQVNVUkVNRU5UX0VOQUJMRSA9ICgxIDw8IDEpLAotCUlFRUU4MDIxMV9NRUFTVVJFTUVOVF9SRVFVRVNUID0gKDEgPDwgMiksCi0JSUVFRTgwMjExX01FQVNVUkVNRU5UX1JFUE9SVCA9ICgxIDw8IDMpLAotCS8qIEJpdHMgNC03IGFyZSByZXNlcnZlZCAqLwotfTsKLQotZW51bSB7Ci0JSUVFRTgwMjExX1JFUE9SVF9CQVNJQyA9IDAsCS8qIHJlcXVpcmVkICovCi0JSUVFRTgwMjExX1JFUE9SVF9DQ0EgPSAxLAkvKiBvcHRpb25hbCAqLwotCUlFRUU4MDIxMV9SRVBPUlRfUlBJID0gMiwJLyogb3B0aW9uYWwgKi8KLQkvKiAzLTI1NSByZXNlcnZlZCAqLwotfTsKLQotc3RydWN0IGllZWU4MDIxMV9tZWFzdXJlbWVudF9wYXJhbXMgewotCXU4IGNoYW5uZWw7Ci0JX19sZTY0IHN0YXJ0X3RpbWU7Ci0JX19sZTE2IGR1cmF0aW9uOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcmVxdWVzdCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaWU7Ci0JdTggdG9rZW47Ci0JdTggbW9kZTsKLQl1OCB0eXBlOwotCXN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcGFyYW1zIHBhcmFtc1swXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi1zdHJ1Y3QgaWVlZTgwMjExX21lYXN1cmVtZW50X3JlcG9ydCB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaWU7Ci0JdTggdG9rZW47Ci0JdTggbW9kZTsKLQl1OCB0eXBlOwotCXVuaW9uIHsKLQkJc3RydWN0IGllZWU4MDIxMV9iYXNpY19yZXBvcnQgYmFzaWNbMF07Ci0JfSB1OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfdHBjX3JlcG9ydCB7Ci0JdTggdHJhbnNtaXRfcG93ZXI7Ci0JdTggbGlua19tYXJnaW47Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX21hcCB7Ci0JdTggY2hhbm5lbDsKLQl1OCBtYXA7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9pYnNzX2RmcyB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pbmZvX2VsZW1lbnQgaWU7Ci0JdTggb3duZXJbRVRIX0FMRU5dOwotCXU4IHJlY292ZXJ5X2ludGVydmFsOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9tYXAgY2hhbm5lbF9tYXBbMF07Ci19OwotCi1zdHJ1Y3QgaWVlZTgwMjExX2NzYSB7Ci0JdTggbW9kZTsKLQl1OCBjaGFubmVsOwotCXU4IGNvdW50OwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBpZWVlODAyMTFfcXVpZXQgewotCXU4IGNvdW50OwotCXU4IHBlcmlvZDsKLQl1OCBkdXJhdGlvbjsKLQl1OCBvZmZzZXQ7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrIHsKLQkvKiBUaGVzZSBlbnRyaWVzIGFyZSB1c2VkIHRvIGlkZW50aWZ5IGEgdW5pcXVlIG5ldHdvcmsgKi8KLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JdTggY2hhbm5lbDsKLQkvKiBFbnN1cmUgbnVsbC10ZXJtaW5hdGVkIGZvciBhbnkgZGVidWcgbXNncyAqLwotCXU4IHNzaWRbSVdfRVNTSURfTUFYX1NJWkUgKyAxXTsKLQl1OCBzc2lkX2xlbjsKLQotCXN0cnVjdCBpZWVlODAyMTFfcW9zX2RhdGEgcW9zX2RhdGE7Ci0KLQkvKiBUaGVzZSBhcmUgbmV0d29yayBzdGF0aXN0aWNzICovCi0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyBzdGF0czsKLQl1MTYgY2FwYWJpbGl0eTsKLQl1OCByYXRlc1tNQVhfUkFURVNfTEVOR1RIXTsKLQl1OCByYXRlc19sZW47Ci0JdTggcmF0ZXNfZXhbTUFYX1JBVEVTX0VYX0xFTkdUSF07Ci0JdTggcmF0ZXNfZXhfbGVuOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FubmVkOwotCXU4IG1vZGU7Ci0JdTMyIGZsYWdzOwotCXUzMiBsYXN0X2Fzc29jaWF0ZTsKLQl1MzIgdGltZV9zdGFtcFsyXTsKLQl1MTYgYmVhY29uX2ludGVydmFsOwotCXUxNiBsaXN0ZW5faW50ZXJ2YWw7Ci0JdTE2IGF0aW1fd2luZG93OwotCXU4IGVycF92YWx1ZTsKLQl1OCB3cGFfaWVbTUFYX1dQQV9JRV9MRU5dOwotCXNpemVfdCB3cGFfaWVfbGVuOwotCXU4IHJzbl9pZVtNQVhfV1BBX0lFX0xFTl07Ci0Jc2l6ZV90IHJzbl9pZV9sZW47Ci0Jc3RydWN0IGllZWU4MDIxMV90aW1fcGFyYW1ldGVycyB0aW07Ci0KLQkvKiA4MDIuMTFoIGluZm8gKi8KLQotCS8qIFBvd2VyIENvbnN0cmFpbnQgLSBtYW5kYXRvcnkgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgKi8KLQl1OCBwb3dlcl9jb25zdHJhaW50OwotCi0JLyogVFBDIFJlcG9ydCAtIG1hbmRhdG9yeSBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLwotCXN0cnVjdCBpZWVlODAyMTFfdHBjX3JlcG9ydCB0cGNfcmVwb3J0OwotCi0JLyogSUJTUyBERlMgLSBtYW5kYXRvcnkgaWYgc3BjdHJtIG1nbXQgcmVxdWlyZWQgYW5kIElCU1MKLQkgKiBOT1RFOiBUaGlzIGlzIHZhcmlhYmxlIGxlbmd0aCBhbmQgc28gbXVzdCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2lic3NfZGZzICppYnNzX2RmczsKLQotCS8qIENoYW5uZWwgU3dpdGNoIEFubm91bmNlbWVudCAtIG9wdGlvbmFsIGlmIHNwY3RybSBtZ210IHJlcXVpcmVkICovCi0Jc3RydWN0IGllZWU4MDIxMV9jc2EgY3NhOwotCi0JLyogUXVpZXQgLSBvcHRpb25hbCBpZiBzcGN0cm0gbWdtdCByZXF1aXJlZCAqLwotCXN0cnVjdCBpZWVlODAyMTFfcXVpZXQgcXVpZXQ7Ci0KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci19OwotCi1lbnVtIGllZWU4MDIxMV9zdGF0ZSB7Ci0JSUVFRTgwMjExX1VOSU5JVElBTElaRUQgPSAwLAotCUlFRUU4MDIxMV9JTklUSUFMSVpFRCwKLQlJRUVFODAyMTFfQVNTT0NJQVRJTkcsCi0JSUVFRTgwMjExX0FTU09DSUFURUQsCi0JSUVFRTgwMjExX0FVVEhFTlRJQ0FUSU5HLAotCUlFRUU4MDIxMV9BVVRIRU5USUNBVEVELAotCUlFRUU4MDIxMV9TSFVURE9XTgotfTsKLQotI2RlZmluZSBERUZBVUxUX01BWF9TQ0FOX0FHRSAoMTUgKiBIWikKLSNkZWZpbmUgREVGQVVMVF9GVFMgMjM0NgotCi0jZGVmaW5lIENGR19JRUVFODAyMTFfUkVTRVJWRV9GQ1MgKDE8PDApCi0jZGVmaW5lIENGR19JRUVFODAyMTFfQ09NUFVURV9GQ1MgKDE8PDEpCi0jZGVmaW5lIENGR19JRUVFODAyMTFfUlRTICgxPDwyKQotCi0jZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9NSU5fQ0hBTk5FTCAxCi0jZGVmaW5lIElFRUU4MDIxMV8yNEdIWl9NQVhfQ0hBTk5FTCAxNAotI2RlZmluZSBJRUVFODAyMTFfMjRHSFpfQ0hBTk5FTFMgKElFRUU4MDIxMV8yNEdIWl9NQVhfQ0hBTk5FTCAtIFwKLQkJCQkgIElFRUU4MDIxMV8yNEdIWl9NSU5fQ0hBTk5FTCArIDEpCi0KLSNkZWZpbmUgSUVFRTgwMjExXzUyR0haX01JTl9DSEFOTkVMIDM0Ci0jZGVmaW5lIElFRUU4MDIxMV81MkdIWl9NQVhfQ0hBTk5FTCAxNjUKLSNkZWZpbmUgSUVFRTgwMjExXzUyR0haX0NIQU5ORUxTIChJRUVFODAyMTFfNTJHSFpfTUFYX0NIQU5ORUwgLSBcCi0JCQkJICBJRUVFODAyMTFfNTJHSFpfTUlOX0NIQU5ORUwgKyAxKQotCi1lbnVtIHsKLQlJRUVFODAyMTFfQ0hfUEFTU0lWRV9PTkxZID0gKDEgPDwgMCksCi0JSUVFRTgwMjExX0NIXzgwMjExSF9SVUxFUyA9ICgxIDw8IDEpLAotCUlFRUU4MDIxMV9DSF9CX09OTFkgPSAoMSA8PCAyKSwKLQlJRUVFODAyMTFfQ0hfTk9fSUJTUyA9ICgxIDw8IDMpLAotCUlFRUU4MDIxMV9DSF9VTklGT1JNX1NQUkVBRElORyA9ICgxIDw8IDQpLAotCUlFRUU4MDIxMV9DSF9SQURBUl9ERVRFQ1QgPSAoMSA8PCA1KSwKLQlJRUVFODAyMTFfQ0hfSU5WQUxJRCA9ICgxIDw8IDYpLAotfTsKLQotc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHsKLQl1MzIgZnJlcTsJLyogaW4gTUh6ICovCi0JdTggY2hhbm5lbDsKLQl1OCBmbGFnczsKLQl1OCBtYXhfcG93ZXI7CS8qIGluIGRCbSAqLwotfTsKLQotc3RydWN0IGllZWU4MDIxMV9nZW8gewotCXU4IG5hbWVbNF07Ci0JdTggYmdfY2hhbm5lbHM7Ci0JdTggYV9jaGFubmVsczsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYmdbSUVFRTgwMjExXzI0R0haX0NIQU5ORUxTXTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYVtJRUVFODAyMTFfNTJHSFpfQ0hBTk5FTFNdOwotfTsKLQotc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWM7Ci0KLQkvKiBCb29ra2VlcGluZyBzdHJ1Y3R1cmVzICovCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGF0cyBpZWVlX3N0YXRzOwotCi0Jc3RydWN0IGllZWU4MDIxMV9nZW8gZ2VvOwotCi0JLyogUHJvYmUgLyBCZWFjb24gbWFuYWdlbWVudCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbmV0d29ya19mcmVlX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCBuZXR3b3JrX2xpc3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrczsKLQlpbnQgc2NhbnM7Ci0JaW50IHNjYW5fYWdlOwotCi0JaW50IGl3X21vZGU7CQkvKiBvcGVyYXRpbmcgbW9kZSAoSVdfTU9ERV8qKSAqLwotCXN0cnVjdCBpd19zcHlfZGF0YSBzcHlfZGF0YTsJLyogaXdzcHkgc3VwcG9ydCAqLwotCi0Jc3BpbmxvY2tfdCBsb2NrOwotCi0JaW50IHR4X2hlYWRyb29tOwkvKiBTZXQgdG8gc2l6ZSBvZiBhbnkgYWRkaXRpb25hbCByb29tIG5lZWRlZCBhdCBmcm9udAotCQkJCSAqIG9mIGFsbG9jYXRlZCBUeCBTS0JzICovCi0JdTMyIGNvbmZpZzsKLQotCS8qIFdFUCBhbmQgb3RoZXIgZW5jcnlwdGlvbiByZWxhdGVkIHNldHRpbmdzIGF0IHRoZSBkZXZpY2UgbGV2ZWwgKi8KLQlpbnQgb3Blbl93ZXA7CQkvKiBTZXQgdG8gMSB0byBhbGxvdyB1bmVuY3J5cHRlZCBmcmFtZXMgKi8KLQotCWludCByZXNldF9vbl9rZXljaGFuZ2U7CS8qIFNldCB0byAxIGlmIHRoZSBIVyBuZWVkcyB0byBiZSByZXNldCBvbgotCQkJCSAqIFdFUCBrZXkgY2hhbmdlcyAqLwotCi0JLyogSWYgdGhlIGhvc3QgcGVyZm9ybXMge2VuLGRlfWNyeXB0aW9uLCB0aGVuIHNldCB0byAxICovCi0JaW50IGhvc3RfZW5jcnlwdDsKLQlpbnQgaG9zdF9lbmNyeXB0X21zZHU7Ci0JaW50IGhvc3RfZGVjcnlwdDsKLQkvKiBob3N0IHBlcmZvcm1zIG11bHRpY2FzdCBkZWNyeXB0aW9uICovCi0JaW50IGhvc3RfbWNfZGVjcnlwdDsKLQotCS8qIGhvc3Qgc2hvdWxkIHN0cmlwIElWIGFuZCBJQ1YgZnJvbSBwcm90ZWN0ZWQgZnJhbWVzICovCi0JLyogbWVhbmluZ2Z1bCBvbmx5IHdoZW4gaGFyZHdhcmUgZGVjcnlwdGlvbiBpcyBiZWluZyB1c2VkICovCi0JaW50IGhvc3Rfc3RyaXBfaXZfaWN2OwotCi0JaW50IGhvc3Rfb3Blbl9mcmFnOwotCWludCBob3N0X2J1aWxkX2l2OwotCWludCBpZWVlODAyXzF4OwkJLyogaXMgSUVFRSA4MDIuMVggdXNlZCAqLwotCi0JLyogV1BBIGRhdGEgKi8KLQlpbnQgd3BhX2VuYWJsZWQ7Ci0JaW50IGRyb3BfdW5lbmNyeXB0ZWQ7Ci0JaW50IHByaXZhY3lfaW52b2tlZDsKLQlzaXplX3Qgd3BhX2llX2xlbjsKLQl1OCAqd3BhX2llOwotCi0Jc3RydWN0IGxpYjgwMjExX2NyeXB0X2luZm8gY3J5cHRfaW5mbzsKLQotCWludCBiY3J4X3N0YV9rZXk7CS8qIHVzZSBpbmRpdmlkdWFsIGtleXMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBrZXlzIGV2ZW4KLQkJCQkgKiB3aXRoIFJYIG9mIGJyb2FkL211bHRpY2FzdCBmcmFtZXMgKi8KLQotCS8qIEZyYWdtZW50YXRpb24gc3RydWN0dXJlcyAqLwotCXN0cnVjdCBpZWVlODAyMTFfZnJhZ19lbnRyeSBmcmFnX2NhY2hlW0lFRUU4MDIxMV9GUkFHX0NBQ0hFX0xFTl07Ci0JdW5zaWduZWQgaW50IGZyYWdfbmV4dF9pZHg7Ci0JdTE2IGZ0czsJCS8qIEZyYWdtZW50YXRpb24gVGhyZXNob2xkICovCi0JdTE2IHJ0czsJCS8qIFJUUyB0aHJlc2hvbGQgKi8KLQotCS8qIEFzc29jaWF0aW9uIGluZm8gKi8KLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0KLQllbnVtIGllZWU4MDIxMV9zdGF0ZSBzdGF0ZTsKLQotCWludCBtb2RlOwkJLyogQSwgQiwgRyAqLwotCWludCBtb2R1bGF0aW9uOwkJLyogQ0NLLCBPRkRNICovCi0JaW50IGZyZXFfYmFuZDsJCS8qIDIuNEdoeiwgNS4yR2h6LCBNaXhlZCAqLwotCWludCBhYmdfdHJ1ZTsJCS8qIEFCRyBmbGFnICAgICAgICAgICAgICAqLwotCi0JaW50IHBlcmZlY3RfcnNzaTsKLQlpbnQgd29yc3RfcnNzaTsKLQotCXUxNiBwcmV2X3NlcV9jdGw7CS8qIHVzZWQgdG8gZHJvcCBkdXBsaWNhdGUgZnJhbWVzICovCi0KLQkvKiBDYWxsYmFjayBmdW5jdGlvbnMgKi8KLQl2b2lkICgqc2V0X3NlY3VyaXR5KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3NlY3VyaXR5ICogc2VjKTsKLQlpbnQgKCpoYXJkX3N0YXJ0X3htaXQpIChzdHJ1Y3QgaWVlZTgwMjExX3R4YiAqIHR4YiwKLQkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IHByaSk7Ci0JaW50ICgqcmVzZXRfcG9ydCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKLQlpbnQgKCppc19xdWV1ZV9mdWxsKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBwcmkpOwotCi0JaW50ICgqaGFuZGxlX21hbmFnZW1lbnQpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqIG5ldHdvcmssIHUxNiB0eXBlKTsKLQlpbnQgKCppc19xb3NfYWN0aXZlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KLQkvKiBUeXBpY2FsIFNUQSBtZXRob2RzICovCi0JaW50ICgqaGFuZGxlX2F1dGgpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2F1dGggKiBhdXRoKTsKLQlpbnQgKCpoYW5kbGVfZGVhdXRoKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RlYXV0aCAqIGF1dGgpOwotCWludCAoKmhhbmRsZV9hY3Rpb24pIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYWN0aW9uICogYWN0aW9uLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqIHN0YXRzKTsKLQlpbnQgKCpoYW5kbGVfZGlzYXNzb2MpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2Rpc2Fzc29jICogYXNzb2MpOwotCWludCAoKmhhbmRsZV9iZWFjb24pIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfYmVhY29uICogYmVhY29uLAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogbmV0d29yayk7Ci0JaW50ICgqaGFuZGxlX3Byb2JlX3Jlc3BvbnNlKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSAqIHJlc3AsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogbmV0d29yayk7Ci0JaW50ICgqaGFuZGxlX3Byb2JlX3JlcXVlc3QpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVxdWVzdCAqIHJlcSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKiBzdGF0cyk7Ci0JaW50ICgqaGFuZGxlX2Fzc29jX3Jlc3BvbnNlKSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZSAqIHJlc3AsCi0JCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogbmV0d29yayk7Ci0KLQkvKiBUeXBpY2FsIEFQIG1ldGhvZHMgKi8KLQlpbnQgKCpoYW5kbGVfYXNzb2NfcmVxdWVzdCkgKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKLQlpbnQgKCpoYW5kbGVfcmVhc3NvY19yZXF1ZXN0KSAoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsCi0JCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcmVhc3NvY19yZXF1ZXN0ICogcmVxKTsKLQotCS8qIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBpdGVtIHNvIHRoYXQgaXQgcG9pbnRzIHRvIHRoZSBkYXRhCi0JICogYWxsb2NhdGVkIGJleW9uZCB0aGlzIHN0cnVjdHVyZSBieSBhbGxvY19pZWVlODAyMTEgKi8KLQl1OCBwcml2WzBdOwotfTsKLQotI2RlZmluZSBJRUVFX0EgICAgICAgICAgICAoMTw8MCkKLSNkZWZpbmUgSUVFRV9CICAgICAgICAgICAgKDE8PDEpCi0jZGVmaW5lIElFRUVfRyAgICAgICAgICAgICgxPDwyKQotI2RlZmluZSBJRUVFX01PREVfTUFTSyAgICAoSUVFRV9BfElFRUVfQnxJRUVFX0cpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCAqaWVlZTgwMjExX3ByaXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gKChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqKW5ldGRldl9wcml2KGRldikpLT5wcml2OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfaXNfdmFsaWRfbW9kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQkJICBpbnQgbW9kZSkKLXsKLQkvKgotCSAqIEl0IGlzIHBvc3NpYmxlIGZvciBib3RoIGFjY2VzcyBwb2ludHMgYW5kIG91ciBkZXZpY2UgdG8gc3VwcG9ydAotCSAqIGNvbWJpbmF0aW9ucyBvZiBtb2Rlcywgc28gYXMgbG9uZyBhcyB0aGVyZSBpcyBvbmUgdmFsaWQgY29tYmluYXRpb24KLQkgKiBvZiBhcC9kZXZpY2Ugc3VwcG9ydGVkIG1vZGVzLCB0aGVuIHJldHVybiBzdWNjZXNzCi0JICoKLQkgKi8KLQlpZiAoKG1vZGUgJiBJRUVFX0EpICYmCi0JICAgIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikgJiYKLQkgICAgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV81MkdIWl9CQU5EKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoKG1vZGUgJiBJRUVFX0cpICYmCi0JICAgIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX09GRE1fTU9EVUxBVElPTikgJiYKLQkgICAgKGllZWUtPmZyZXFfYmFuZCAmIElFRUU4MDIxMV8yNEdIWl9CQU5EKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoKG1vZGUgJiBJRUVFX0IpICYmCi0JICAgIChpZWVlLT5tb2R1bGF0aW9uICYgSUVFRTgwMjExX0NDS19NT0RVTEFUSU9OKSAmJgotCSAgICAoaWVlZS0+ZnJlcV9iYW5kICYgSUVFRTgwMjExXzI0R0haX0JBTkQpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZ2V0X2hkcmxlbih1MTYgZmMpCi17Ci0JaW50IGhkcmxlbiA9IElFRUU4MDIxMV8zQUREUl9MRU47Ci0JdTE2IHN0eXBlID0gV0xBTl9GQ19HRVRfU1RZUEUoZmMpOwotCi0Jc3dpdGNoIChXTEFOX0ZDX0dFVF9UWVBFKGZjKSkgewotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6Ci0JCWlmICgoZmMgJiBJRUVFODAyMTFfRkNUTF9GUk9NRFMpICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpKQotCQkJaGRybGVuID0gSUVFRTgwMjExXzRBRERSX0xFTjsKLQkJaWYgKHN0eXBlICYgSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBKQotCQkJaGRybGVuICs9IDI7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKLQkJc3dpdGNoIChXTEFOX0ZDX0dFVF9TVFlQRShmYykpIHsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQ1RTOgotCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BQ0s6Ci0JCQloZHJsZW4gPSBJRUVFODAyMTFfMUFERFJfTEVOOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQloZHJsZW4gPSBJRUVFODAyMTFfMkFERFJfTEVOOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGhkcmxlbjsKLX0KLQotc3RhdGljIGlubGluZSB1OCAqaWVlZTgwMjExX2dldF9wYXlsb2FkKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpCi17Ci0Jc3dpdGNoIChpZWVlODAyMTFfZ2V0X2hkcmxlbihsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpKSkgewotCWNhc2UgSUVFRTgwMjExXzFBRERSX0xFTjoKLQkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfMWFkZHIgKiloZHIpLT5wYXlsb2FkOwotCWNhc2UgSUVFRTgwMjExXzJBRERSX0xFTjoKLQkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfMmFkZHIgKiloZHIpLT5wYXlsb2FkOwotCWNhc2UgSUVFRTgwMjExXzNBRERSX0xFTjoKLQkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKiloZHIpLT5wYXlsb2FkOwotCWNhc2UgSUVFRTgwMjExXzRBRERSX0xFTjoKLQkJcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKiloZHIpLT5wYXlsb2FkOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2lzX29mZG1fcmF0ZSh1OCByYXRlKQotewotCXN3aXRjaCAocmF0ZSAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSB7Ci0JY2FzZSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQjoKLQljYXNlIElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xMk1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8xOE1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8yNE1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV8zNk1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV80OE1COgotCWNhc2UgSUVFRTgwMjExX09GRE1fUkFURV81NE1COgotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGllZWU4MDIxMV9pc19jY2tfcmF0ZSh1OCByYXRlKQotewotCXN3aXRjaCAocmF0ZSAmIH5JRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLKSB7Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COgotCWNhc2UgSUVFRTgwMjExX0NDS19SQVRFXzJNQjoKLQljYXNlIElFRUU4MDIxMV9DQ0tfUkFURV81TUI6Ci0JY2FzZSBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQjoKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKiBpZWVlODAyMTEuYyAqLwotZXh0ZXJuIHZvaWQgZnJlZV9pZWVlODAyMTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2llZWU4MDIxMShpbnQgc2l6ZW9mX3ByaXYpOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7Ci0KLS8qIGllZWU4MDIxMV90eC5jICovCi1leHRlcm4gaW50IGllZWU4MDIxMV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3R4Yl9mcmVlKHN0cnVjdCBpZWVlODAyMTFfdHhiICopOwotCi0vKiBpZWVlODAyMTFfcnguYyAqLwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J4X2FueShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cyk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV9yeChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnJ4X3N0YXRzKTsKLS8qIG1ha2Ugc3VyZSB0byBzZXQgc3RhdHMtPmxlbiAqLwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J4X21ndChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpOwotZXh0ZXJuIHZvaWQgaWVlZTgwMjExX25ldHdvcmtfcmVzZXQoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrKTsKLQotLyogaWVlZTgwMjExX2dlby5jICovCi1leHRlcm4gY29uc3Qgc3RydWN0IGllZWU4MDIxMV9nZW8gKmllZWU4MDIxMV9nZXRfZ2VvKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlCi0JCQkJCQkgICAgICppZWVlKTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3NldF9nZW8oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW8pOwotCi1leHRlcm4gaW50IGllZWU4MDIxMV9pc192YWxpZF9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgICAgIHU4IGNoYW5uZWwpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQkgICAgICB1OCBjaGFubmVsKTsKLWV4dGVybiB1OCBpZWVlODAyMTFfZnJlcV90b19jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1MzIgZnJlcSk7Ci1leHRlcm4gdTggaWVlZTgwMjExX2dldF9jaGFubmVsX2ZsYWdzKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgICAgIHU4IGNoYW5uZWwpOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqaWVlZTgwMjExX2dldF9jaGFubmVsKHN0cnVjdAotCQkJCQkJCSAgICAgaWVlZTgwMjExX2RldmljZQotCQkJCQkJCSAgICAgKmllZWUsIHU4IGNoYW5uZWwpOwotZXh0ZXJuIHUzMiBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSwKLQkJCQkgICAgICB1OCBjaGFubmVsKTsKLQotLyogaWVlZTgwMjExX3d4LmMgKi8KLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X2dldF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICprZXkpOwotZXh0ZXJuIGludCBpZWVlODAyMTFfd3hfc2V0X2VuY29kZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwKLQkJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmtleSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqa2V5KTsKLWV4dGVybiBpbnQgaWVlZTgwMjExX3d4X3NldF9lbmNvZGVleHQoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCi0JCQkJICAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICAgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSk7Ci1leHRlcm4gaW50IGllZWU4MDIxMV93eF9nZXRfZW5jb2RlZXh0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAotCQkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2luY3JlbWVudF9zY2FucyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKLXsKLQlpZWVlLT5zY2FucysrOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfZ2V0X3NjYW5zKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQotewotCXJldHVybiBpZWVlLT5zY2FuczsKLX0KLQotI2VuZGlmCQkJCS8qIElFRUU4MDIxMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pZWVlODAyMTFfcmFkaW90YXAuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oCmluZGV4IDM4NDY5OGMuLjIzYzNmM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oCkBAIC0yMzAsOCArMjMwLDEwIEBACiAJCQkJCQkgKiA4MDIuMTEgaGVhZGVyIGFuZCBwYXlsb2FkCiAJCQkJCQkgKiAodG8gMzItYml0IGJvdW5kYXJ5KQogCQkJCQkJICovCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9GX0JBREZDUwkweDQwCS8qIGJhZCBGQ1MgKi8KKwogLyogRm9yIElFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHUyAqLwotI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfRl9SWF9CQURGQ1MJMHgwMDAxCS8qIGZyYW1lIGZhaWxlZCBjcmMgY2hlY2sgKi8KKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX0ZfUlhfQkFEUExDUAkweDAwMDIJLyogZnJhbWUgaGFzIGJhZCBQTENQICovCiAKIC8qIEZvciBJRUVFODAyMTFfUkFESU9UQVBfVFhfRkxBR1MgKi8KICNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX0ZfVFhfRkFJTAkweDAwMDEJLyogZmFpbGVkIGR1ZSB0byBleGNlc3NpdmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmggYi9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCmluZGV4IGM4ZWZmYTQuLjM4Yjc4MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKKysrIGIvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaApAQCAtMzksOCArMzksNiBAQAogCQogCV9fdTMyCQkJdmFsaWRfbGZ0OwogCV9fdTMyCQkJcHJlZmVyZWRfbGZ0OwotCXVuc2lnbmVkIGxvbmcJCWNzdGFtcDsJLyogY3JlYXRlZCB0aW1lc3RhbXAgKi8KLQl1bnNpZ25lZCBsb25nCQl0c3RhbXA7IC8qIHVwZGF0ZWQgdGltZXN0YW1wICovCiAJYXRvbWljX3QJCXJlZmNudDsKIAlzcGlubG9ja190CQlsb2NrOwogCkBAIC00OSw2ICs0Nyw5IEBACiAKIAlfX3UxNgkJCXNjb3BlOwogCisJdW5zaWduZWQgbG9uZwkJY3N0YW1wOwkvKiBjcmVhdGVkIHRpbWVzdGFtcCAqLworCXVuc2lnbmVkIGxvbmcJCXRzdGFtcDsgLyogdXBkYXRlZCB0aW1lc3RhbXAgKi8KKwogCXN0cnVjdCB0aW1lcl9saXN0CXRpbWVyOwogCiAJc3RydWN0IGluZXQ2X2RldgkqaWRldjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfZWNuLmggYi9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCmluZGV4IDcwNDBhNzguLjliNWQwOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9lY24uaApAQCAtMTEzLDEyICsxMTMsMTIgQEAKIHN0YXRpYyBpbmxpbmUgaW50IElORVRfRUNOX3NldF9jZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCWlmIChza2ItPm5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikgPD0gc2tiLT50YWlsKQogCQkJcmV0dXJuIElQX0VDTl9zZXRfY2UoaXBfaGRyKHNrYikpOwogCQlicmVhazsKIAotCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgogCQlpZiAoc2tiLT5uZXR3b3JrX2hlYWRlciArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikgPD0gc2tiLT50YWlsKQogCQkJcmV0dXJuIElQNl9FQ05fc2V0X2NlKGlwdjZfaGRyKHNrYikpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfZnJhZy5oIGIvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKaW5kZXggZTA4MWVlZi4uMzlmMmRjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmgKQEAgLTYxLDcgKzYxLDggQEAKIAkJCQlzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgaW50ICp3b3JrKTsKIGludCBpbmV0X2ZyYWdfZXZpY3RvcihzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mLCBzdHJ1Y3QgaW5ldF9mcmFncyAqZik7CiBzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICppbmV0X2ZyYWdfZmluZChzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mLAotCQlzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgdm9pZCAqa2V5LCB1bnNpZ25lZCBpbnQgaGFzaCk7CisJCXN0cnVjdCBpbmV0X2ZyYWdzICpmLCB2b2lkICprZXksIHVuc2lnbmVkIGludCBoYXNoKQorCV9fcmVsZWFzZXMoJmYtPmxvY2spOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5ldF9mcmFnX3B1dChzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxLCBzdHJ1Y3QgaW5ldF9mcmFncyAqZikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKaW5kZXggZDBhMDQzMS4uYTQ0ZTIyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKQEAgLTgyLDYgKzgyLDcgQEAKICNlbmRpZgogCXVuc2lnbmVkIHNob3J0CQlwb3J0OwogCXNpZ25lZCBzaG9ydAkJZmFzdHJldXNlOworCWludAkJCW51bV9vd25lcnM7CiAJc3RydWN0IGhsaXN0X25vZGUJbm9kZTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAlvd25lcnM7CiB9OwpAQCAtMTMzLDcgKzEzNCw3IEBACiAJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0CSpiaGFzaDsKIAogCXVuc2lnbmVkIGludAkJCWJoYXNoX3NpemU7Ci0JLyogTm90ZSA6IDQgYnl0ZXMgcGFkZGluZyBvbiA2NCBiaXQgYXJjaGVzICovCisJLyogNCBieXRlcyBob2xlIG9uIDY0IGJpdCAqLwogCiAJc3RydWN0IGttZW1fY2FjaGUJCSpiaW5kX2J1Y2tldF9jYWNoZXA7CiAKQEAgLTE1MCw2ICsxNTEsNyBAQAogCXN0cnVjdCBpbmV0X2xpc3Rlbl9oYXNoYnVja2V0CWxpc3RlbmluZ19oYXNoW0lORVRfTEhUQUJMRV9TSVpFXQogCQkJCQlfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCisJYXRvbWljX3QJCQlic29ja2V0czsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGluZXRfZWhhc2hfYnVja2V0ICppbmV0X2VoYXNoX2J1Y2tldCgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDEwODY4MTMuLjRhYzc1NzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtNTUsNiArNTUsNyBAQAogCV9fYmUzMgkJCWFkZHI7CiAJaW50CQkJb2lmOwogCXN0cnVjdCBpcF9vcHRpb25zCSpvcHQ7CisJdW5pb24gc2tiX3NoYXJlZF90eAlzaHR4OwogfTsKIAogI2RlZmluZSBJUENCKHNrYikgKChzdHJ1Y3QgaW5ldF9za2JfcGFybSopKChza2IpLT5jYikpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCBhYjliMDAzLi5iYmFlMWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTE4NCw4ICsxODQsOCBAQAogLyoKICAqICAgICAgVGhlIHBvcnQgbnVtYmVyIG9mIEZUUCBzZXJ2aWNlIChpbiBuZXR3b3JrIG9yZGVyKS4KICAqLwotI2RlZmluZSBGVFBQT1JUICBfX2NvbnN0YW50X2h0b25zKDIxKQotI2RlZmluZSBGVFBEQVRBICBfX2NvbnN0YW50X2h0b25zKDIwKQorI2RlZmluZSBGVFBQT1JUICBjcHVfdG9fYmUxNigyMSkKKyNkZWZpbmUgRlRQREFUQSAgY3B1X3RvX2JlMTYoMjApCiAKIC8qCiAgKiAgICAgIFRDUCBTdGF0ZSBWYWx1ZXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCA2ZDViNThhLi5jMWYxNmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC0xOTYsOCArMTk2LDggQEAKIAlzdHJ1Y3QgbmV0CQkqZmxfbmV0OwogfTsKIAotI2RlZmluZSBJUFY2X0ZMT1dJTkZPX01BU0sJX19jb25zdGFudF9odG9ubCgweDBGRkZGRkZGKQotI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NQVNLCV9fY29uc3RhbnRfaHRvbmwoMHgwMDBGRkZGRikKKyNkZWZpbmUgSVBWNl9GTE9XSU5GT19NQVNLCWNwdV90b19iZTMyKDB4MEZGRkZGRkYpCisjZGVmaW5lIElQVjZfRkxPV0xBQkVMX01BU0sJY3B1X3RvX2JlMzIoMHgwMDBGRkZGRikKIAogc3RydWN0IGlwdjZfZmxfc29ja2xpc3QKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lweC5oIGIvaW5jbHVkZS9uZXQvaXB4LmgKaW5kZXggNGNjMGI0ZS4uYTE0MTIxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB4LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB4LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogc3RydWN0IGlweGhkciB7CiAJX19iZTE2CQkJaXB4X2NoZWNrc3VtIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLSNkZWZpbmUgSVBYX05PX0NIRUNLU1VNCV9fY29uc3RhbnRfaHRvbnMoMHhGRkZGKQorI2RlZmluZSBJUFhfTk9fQ0hFQ0tTVU0JY3B1X3RvX2JlMTYoMHhGRkZGKQogCV9fYmUxNgkJCWlweF9wa3RzaXplIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAlfX3U4CQkJaXB4X3RjdHJsOwogCV9fdTgJCQlpcHhfdHlwZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDU1OTQyMmYuLjNiODNhODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtOTMsMTIgKzkzLDkgQEAKICAqIGVudW0gaWVlZTgwMjExX21heF9xdWV1ZXMgLSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZXMKICAqCiAgKiBASUVFRTgwMjExX01BWF9RVUVVRVM6IE1heGltdW0gbnVtYmVyIG9mIHJlZ3VsYXIgZGV2aWNlIHF1ZXVlcy4KLSAqIEBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFUzogTWF4aW11bSBudW1iZXIgb2YgcXVldWVzIHVzYWJsZQotICoJZm9yIEEtTVBEVSBvcGVyYXRpb24uCiAgKi8KIGVudW0gaWVlZTgwMjExX21heF9xdWV1ZXMgewotCUlFRUU4MDIxMV9NQVhfUVVFVUVTID0JCTE2LAotCUlFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTID0JMTYsCisJSUVFRTgwMjExX01BWF9RVUVVRVMgPQkJNCwKIH07CiAKIC8qKgpAQCAtMjA3LDcgKzIwNCw3IEBACiAJdTE2IGJlYWNvbl9pbnQ7CiAJdTE2IGFzc29jX2NhcGFiaWxpdHk7CiAJdTY0IHRpbWVzdGFtcDsKLQl1NjQgYmFzaWNfcmF0ZXM7CisJdTMyIGJhc2ljX3JhdGVzOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzX2h0X2NvbmYgaHQ7CiB9OwogCkBAIC0yNDUsNiArMjQyLDEyIEBACiAgKiBASUVFRTgwMjExX1RYX0NUTF9SQVRFX0NUUkxfUFJPQkU6IGludGVybmFsIHRvIG1hYzgwMjExLCBjYW4gYmUKICAqCXNldCBieSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtcyB0byBpbmRpY2F0ZSBwcm9iZSByYXRlLCB3aWxsCiAgKgliZSBjbGVhcmVkIGZvciBmcmFnbWVudGVkIGZyYW1lcyAoZXhjZXB0IG9uIHRoZSBsYXN0IGZyYWdtZW50KQorICogQElFRUU4MDIxMV9UWF9JTlRGTF9SQ0FMR086IG1hYzgwMjExIGludGVybmFsIGZsYWcsIGRvIG5vdCB0ZXN0IG9yCisgKglzZXQgdGhpcyBmbGFnIGluIHRoZSBkcml2ZXI7IGluZGljYXRlcyB0aGF0IHRoZSByYXRlIGNvbnRyb2wKKyAqCWFsZ29yaXRobSB3YXMgdXNlZCBhbmQgc2hvdWxkIGJlIG5vdGlmaWVkIG9mIFRYIHN0YXR1cworICogQElFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORzogY29tcGxldGVseSBpbnRlcm5hbCB0byBtYWM4MDIxMSwKKyAqCXVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIHBlbmRpbmcgZnJhbWUgcmVxdWlyZXMgVFggcHJvY2Vzc2luZyBiZWZvcmUKKyAqCWl0IGNhbiBiZSBzZW50IG91dC4KICAqLwogZW51bSBtYWM4MDIxMV90eF9jb250cm9sX2ZsYWdzIHsKIAlJRUVFODAyMTFfVFhfQ1RMX1JFUV9UWF9TVEFUVVMJCT0gQklUKDApLApAQCAtMjYwLDggKzI2MywzMCBAQAogCUlFRUU4MDIxMV9UWF9TVEFUX0FNUERVCQkJPSBCSVQoMTApLAogCUlFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0sJCT0gQklUKDExKSwKIAlJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRQk9IEJJVCgxMiksCisJSUVFRTgwMjExX1RYX0lOVEZMX1JDQUxHTwkJPSBCSVQoMTMpLAorCUlFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORwk9IEJJVCgxNCksCiB9OwogCisvKioKKyAqIGVudW0gbWFjODAyMTFfcmF0ZV9jb250cm9sX2ZsYWdzIC0gcGVyLXJhdGUgZmxhZ3Mgc2V0IGJ5IHRoZQorICoJUmF0ZSBDb250cm9sIGFsZ29yaXRobS4KKyAqCisgKiBUaGVzZSBmbGFncyBhcmUgc2V0IGJ5IHRoZSBSYXRlIGNvbnRyb2wgYWxnb3JpdGhtIGZvciBlYWNoIHJhdGUgZHVyaW5nIHR4LAorICogaW4gdGhlIEBmbGFncyBtZW1iZXIgb2Ygc3RydWN0IGllZWU4MDIxMV90eF9yYXRlLgorICoKKyAqIEBJRUVFODAyMTFfVFhfUkNfVVNFX1JUU19DVFM6IFVzZSBSVFMvQ1RTIGV4Y2hhbmdlIGZvciB0aGlzIHJhdGUuCisgKiBASUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVDogQ1RTLXRvLXNlbGYgcHJvdGVjdGlvbiBpcyByZXF1aXJlZC4KKyAqCVRoaXMgaXMgc2V0IGlmIHRoZSBjdXJyZW50IEJTUyByZXF1aXJlcyBFUlAgcHJvdGVjdGlvbi4KKyAqIEBJRUVFODAyMTFfVFhfUkNfVVNFX1NIT1JUX1BSRUFNQkxFOiBVc2Ugc2hvcnQgcHJlYW1ibGUuCisgKiBASUVFRTgwMjExX1RYX1JDX01DUzogSFQgcmF0ZS4KKyAqIEBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQ6IEluZGljYXRlcyB3aGV0aGVyIHRoaXMgcmF0ZSBzaG91bGQgYmUgdXNlZCBpbgorICoJR3JlZW5maWVsZCBtb2RlLgorICogQElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEg6IEluZGljYXRlcyBpZiB0aGUgQ2hhbm5lbCBXaWR0aCBzaG91bGQgYmUgNDAgTUh6LgorICogQElFRUU4MDIxMV9UWF9SQ19EVVBfREFUQTogVGhlIGZyYW1lIHNob3VsZCBiZSB0cmFuc21pdHRlZCBvbiBib3RoIG9mIHRoZQorICoJYWRqYWNlbnQgMjAgTUh6IGNoYW5uZWxzLCBpZiB0aGUgY3VycmVudCBjaGFubmVsIHR5cGUgaXMKKyAqCU5MODAyMTFfQ0hBTl9IVDQwTUlOVVMgb3IgTkw4MDIxMV9DSEFOX0hUNDBQTFVTLgorICogQElFRUU4MDIxMV9UWF9SQ19TSE9SVF9HSTogU2hvcnQgR3VhcmQgaW50ZXJ2YWwgc2hvdWxkIGJlIHVzZWQgZm9yIHRoaXMgcmF0ZS4KKyAqLwogZW51bSBtYWM4MDIxMV9yYXRlX2NvbnRyb2xfZmxhZ3MgewogCUlFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUwkJPSBCSVQoMCksCiAJSUVFRTgwMjExX1RYX1JDX1VTRV9DVFNfUFJPVEVDVAkJPSBCSVQoMSksCkBAIC01MDAsMTcgKzUyNSw2IEBACiAJSUVFRTgwMjExX0NPTkZfUFMJCT0gKDE8PDEpLAogfTsKIAotLyogWFhYOiByZW1vdmUgYWxsIHRoaXMgb25jZSBkcml2ZXJzIHN0b3AgdHJ5aW5nIHRvIHVzZSBpdCAqLwotc3RhdGljIGlubGluZSBpbnQgX19kZXByZWNhdGVkIF9fSUVFRTgwMjExX0NPTkZfU0hPUlRfU0xPVF9USU1FKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZGVmaW5lIElFRUU4MDIxMV9DT05GX1NIT1JUX1NMT1RfVElNRSAoX19JRUVFODAyMTFfQ09ORl9TSE9SVF9TTE9UX1RJTUUoKSkKLQotc3RydWN0IGllZWU4MDIxMV9odF9jb25mIHsKLQlib29sIGVuYWJsZWQ7Ci0JZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGU7Ci19OwogCiAvKioKICAqIGVudW0gaWVlZTgwMjExX2NvbmZfY2hhbmdlZCAtIGRlbm90ZXMgd2hpY2ggY29uZmlndXJhdGlvbiBjaGFuZ2VkCkBAIC01MjAsMTAgKzUzNCwxMCBAQAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUw6IHRoZSBsaXN0ZW4gaW50ZXJ2YWwgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9SQURJT1RBUDogdGhlIHJhZGlvdGFwIGZsYWcgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUzogdGhlIFBTIGZsYWcgY2hhbmdlZAorICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9EWU5QU19USU1FT1VUOiB0aGUgZHluYW1pYyBQUyB0aW1lb3V0IGNoYW5nZWQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVI6IHRoZSBUWCBwb3dlciBjaGFuZ2VkCi0gKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUw6IHRoZSBjaGFubmVsIGNoYW5nZWQKKyAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTDogdGhlIGNoYW5uZWwvY2hhbm5lbF90eXBlIGNoYW5nZWQKICAqIEBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTOiByZXRyeSBsaW1pdHMgY2hhbmdlZAotICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9IVDogSFQgY29uZmlndXJhdGlvbiBjaGFuZ2VkCiAgKi8KIGVudW0gaWVlZTgwMjExX2NvbmZfY2hhbmdlZCB7CiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPX0VOQUJMRUQJPSBCSVQoMCksCkBAIC01MzEsMTAgKzU0NSwxMCBAQAogCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9MSVNURU5fSU5URVJWQUwJPSBCSVQoMiksCiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1JBRElPVEFQCQk9IEJJVCgzKSwKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMJCT0gQklUKDQpLAotCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUgkJPSBCSVQoNSksCi0JSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwJCT0gQklUKDYpLAotCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFMJPSBCSVQoNyksCi0JSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0hUCQk9IEJJVCg4KSwKKwlJRUVFODAyMTFfQ09ORl9DSEFOR0VfRFlOUFNfVElNRU9VVAk9IEJJVCg1KSwKKwlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIJCT0gQklUKDYpLAorCUlFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMCQk9IEJJVCg3KSwKKwlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTCT0gQklUKDgpLAogfTsKIAogLyoqCkBAIC01NDcsOCArNTYxLDkgQEAKICAqIEBsaXN0ZW5faW50ZXJ2YWw6IGxpc3RlbiBpbnRlcnZhbCBpbiB1bml0cyBvZiBiZWFjb24gaW50ZXJ2YWwKICAqIEBmbGFnczogY29uZmlndXJhdGlvbiBmbGFncyBkZWZpbmVkIGFib3ZlCiAgKiBAcG93ZXJfbGV2ZWw6IHJlcXVlc3RlZCB0cmFuc21pdCBwb3dlciAoaW4gZEJtKQorICogQGR5bmFtaWNfcHNfdGltZW91dDogZHluYW1pYyBwb3dlcnNhdmUgdGltZW91dCAoaW4gbXMpCiAgKiBAY2hhbm5lbDogdGhlIGNoYW5uZWwgdG8gdHVuZSB0bwotICogQGh0OiB0aGUgSFQgY29uZmlndXJhdGlvbiBmb3IgdGhlIGRldmljZQorICogQGNoYW5uZWxfdHlwZTogdGhlIGNoYW5uZWwgKEhUKSB0eXBlCiAgKiBAbG9uZ19mcmFtZV9tYXhfdHhfY291bnQ6IE1heGltdW0gbnVtYmVyIG9mIHRyYW5zbWlzc2lvbnMgZm9yIGEgImxvbmciIGZyYW1lCiAgKiAgICAoYSBmcmFtZSBub3QgUlRTIHByb3RlY3RlZCksIGNhbGxlZCAiZG90MTFMb25nUmV0cnlMaW1pdCIgaW4gODAyLjExLAogICogICAgYnV0IGFjdHVhbGx5IG1lYW5zIHRoZSBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBub3QgdGhlIG51bWJlciBvZiByZXRyaWVzCkBAIC01NTksNyArNTc0LDcgQEAKIHN0cnVjdCBpZWVlODAyMTFfY29uZiB7CiAJaW50IGJlYWNvbl9pbnQ7CiAJdTMyIGZsYWdzOwotCWludCBwb3dlcl9sZXZlbDsKKwlpbnQgcG93ZXJfbGV2ZWwsIGR5bmFtaWNfcHNfdGltZW91dDsKIAogCXUxNiBsaXN0ZW5faW50ZXJ2YWw7CiAJYm9vbCByYWRpb19lbmFibGVkOwpAQCAtNTY3LDcgKzU4Miw3IEBACiAJdTggbG9uZ19mcmFtZV9tYXhfdHhfY291bnQsIHNob3J0X2ZyYW1lX21heF90eF9jb3VudDsKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2NvbmYgaHQ7CisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGU7CiB9OwogCiAvKioKQEAgLTYzMCwxMCArNjQ1LDEyIEBACiAgKiBASUVFRTgwMjExX0lGQ0NfQlNTSUQ6IFRoZSBCU1NJRCBjaGFuZ2VkLgogICogQElFRUU4MDIxMV9JRkNDX0JFQUNPTjogVGhlIGJlYWNvbiBmb3IgdGhpcyBpbnRlcmZhY2UgY2hhbmdlZAogICoJKGN1cnJlbnRseSBBUCBhbmQgTUVTSCBvbmx5KSwgdXNlIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkuCisgKiBASUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQ6IFRoZSBlbmFibGVfYmVhY29uIHZhbHVlIGNoYW5nZWQuCiAgKi8KIGVudW0gaWVlZTgwMjExX2lmX2NvbmZfY2hhbmdlIHsKLQlJRUVFODAyMTFfSUZDQ19CU1NJRAk9IEJJVCgwKSwKLQlJRUVFODAyMTFfSUZDQ19CRUFDT04JPSBCSVQoMSksCisJSUVFRTgwMjExX0lGQ0NfQlNTSUQJCT0gQklUKDApLAorCUlFRUU4MDIxMV9JRkNDX0JFQUNPTgkJPSBCSVQoMSksCisJSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQJPSBCSVQoMiksCiB9OwogCiAvKioKQEAgLTY0MSwxMyArNjU4LDE2IEBACiAgKgogICogQGNoYW5nZWQ6IHBhcmFtZXRlcnMgdGhhdCBoYXZlIGNoYW5nZWQsIHNlZSAmZW51bSBpZWVlODAyMTFfaWZfY29uZl9jaGFuZ2UuCiAgKiBAYnNzaWQ6IEJTU0lEIG9mIHRoZSBuZXR3b3JrIHdlIGFyZSBhc3NvY2lhdGVkIHRvL2NyZWF0aW5nLgorICogQGVuYWJsZV9iZWFjb246IEluZGljYXRlcyB3aGV0aGVyIGJlYWNvbnMgY2FuIGJlIHNlbnQuCisgKglUaGlzIGlzIHZhbGlkIG9ubHkgZm9yIEFQL0lCU1MvTUVTSCBtb2Rlcy4KICAqCiAgKiBUaGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQgdG8gdGhlIGNvbmZpZ19pbnRlcmZhY2UoKSBjYWxsYmFjayBvZgogICogJnN0cnVjdCBpZWVlODAyMTFfaHcuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfaWZfY29uZiB7CiAJdTMyIGNoYW5nZWQ7Ci0JdTggKmJzc2lkOworCWNvbnN0IHU4ICpic3NpZDsKKwlib29sIGVuYWJsZV9iZWFjb247CiB9OwogCiAvKioKQEAgLTY1NSwxMSArNjc1LDEzIEBACiAgKiBAQUxHX1dFUDogV0VQNDAgb3IgV0VQMTA0CiAgKiBAQUxHX1RLSVA6IFRLSVAKICAqIEBBTEdfQ0NNUDogQ0NNUCAoQUVTKQorICogQEFMR19BRVNfQ01BQzogQUVTLTEyOC1DTUFDCiAgKi8KIGVudW0gaWVlZTgwMjExX2tleV9hbGcgewogCUFMR19XRVAsCiAJQUxHX1RLSVAsCiAJQUxHX0NDTVAsCisJQUxHX0FFU19DTUFDLAogfTsKIAogLyoqCkBAIC02ODgsMTIgKzcxMCwxNiBAQAogICoJZ2VuZXJhdGlvbiBpbiBzb2Z0d2FyZS4KICAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfUEFJUldJU0U6IFNldCBieSBtYWM4MDIxMSwgdGhpcyBmbGFnIGluZGljYXRlcwogICoJdGhhdCB0aGUga2V5IGlzIHBhaXJ3aXNlIHJhdGhlciB0aGVuIGEgc2hhcmVkIGtleS4KKyAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVDogVGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYnkgdGhlIGRyaXZlciBmb3IgYQorICoJQ0NNUCBrZXkgaWYgaXQgcmVxdWlyZXMgQ0NNUCBlbmNyeXB0aW9uIG9mIG1hbmFnZW1lbnQgZnJhbWVzIChNRlApIHRvCisgKgliZSBkb25lIGluIHNvZnR3YXJlLgogICovCiBlbnVtIGllZWU4MDIxMV9rZXlfZmxhZ3MgewogCUlFRUU4MDIxMV9LRVlfRkxBR19XTU1fU1RBCT0gMTw8MCwKIAlJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYJPSAxPDwxLAogCUlFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDPSAxPDwyLAogCUlFRUU4MDIxMV9LRVlfRkxBR19QQUlSV0lTRQk9IDE8PDMsCisJSUVFRTgwMjExX0tFWV9GTEFHX1NXX01HTVQJPSAxPDw0LAogfTsKIAogLyoqCkBAIC03MTQsOCArNzQwLDggQEAKICAqIAktIFRlbXBvcmFsIEVuY3J5cHRpb24gS2V5ICgxMjggYml0cykKICAqIAktIFRlbXBvcmFsIEF1dGhlbnRpY2F0b3IgVHggTUlDIEtleSAoNjQgYml0cykKICAqIAktIFRlbXBvcmFsIEF1dGhlbnRpY2F0b3IgUnggTUlDIEtleSAoNjQgYml0cykKLSAqIEBpY3ZfbGVuOiBGSVhNRQotICogQGl2X2xlbjogRklYTUUKKyAqIEBpY3ZfbGVuOiBUaGUgSUNWIGxlbmd0aCBmb3IgdGhpcyBrZXkgdHlwZQorICogQGl2X2xlbjogVGhlIElWIGxlbmd0aCBmb3IgdGhpcyBrZXkgdHlwZQogICovCiBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mIHsKIAllbnVtIGllZWU4MDIxMV9rZXlfYWxnIGFsZzsKQEAgLTc1OSw3ICs3ODUsNyBAQAogICoJc2l6ZW9mKHZvaWQgKiksIHNpemUgaXMgZGV0ZXJtaW5lZCBpbiBodyBpbmZvcm1hdGlvbi4KICAqLwogc3RydWN0IGllZWU4MDIxMV9zdGEgewotCXU2NCBzdXBwX3JhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdOworCXUzMiBzdXBwX3JhdGVzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwogCXU4IGFkZHJbRVRIX0FMRU5dOwogCXUxNiBhaWQ7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwIGh0X2NhcDsKQEAgLTgzMywxMSArODU5LDYgQEAKICAqCWV4cGVjdCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCBAbWF4X3NpZ25hbC4KICAqCUlmIHBvc3NpYmxlIHBsZWFzZSBwcm92aWRlIGRCIG9yIGRCbSBpbnN0ZWFkLgogICoKLSAqIEBJRUVFODAyMTFfSFdfU0lHTkFMX0RCOgotICoJSGFyZHdhcmUgZ2l2ZXMgc2lnbmFsIHZhbHVlcyBpbiBkQiwgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20gYW4KLSAqCWFyYml0cmFyeSwgZml4ZWQgcmVmZXJlbmNlLiBXZSBleHBlY3QgdmFsdWVzIGJldHdlZW4gMCBhbmQgQG1heF9zaWduYWwuCi0gKglJZiBwb3NzaWJsZSBwbGVhc2UgcHJvdmlkZSBkQm0gaW5zdGVhZC4KLSAqCiAgKiBASUVFRTgwMjExX0hXX1NJR05BTF9EQk06CiAgKglIYXJkd2FyZSBnaXZlcyBzaWduYWwgdmFsdWVzIGluIGRCbSwgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20KICAqCW9uZSBtaWxsaXdhdHQuIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBtZXRob2Qgc2luY2UgaXQgaXMgc3RhbmRhcmRpemVkCkBAIC04NTQsMTAgKzg3NSwyMiBAQAogICogQElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjoKICAqCUhhcmR3YXJlIHN1cHBvcnRzIDExbiBBLU1QRFUgYWdncmVnYXRpb24uCiAgKgotICogQElFRUU4MDIxMV9IV19OT19TVEFDS19EWU5BTUlDX1BTOgotICoJSGFyZHdhcmUgd2hpY2ggaGFzIGR5bmFtaWMgcG93ZXIgc2F2ZSBzdXBwb3J0LCBtZWFuaW5nCi0gKgl0aGF0IHBvd2VyIHNhdmUgaXMgZW5hYmxlZCBpbiBpZGxlIHBlcmlvZHMsIGFuZCBkb24ndCBuZWVkIHN1cHBvcnQKLSAqCWZyb20gc3RhY2suCisgKiBASUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTOgorICoJSGFyZHdhcmUgaGFzIHBvd2VyIHNhdmUgc3VwcG9ydCAoaS5lLiBjYW4gZ28gdG8gc2xlZXApLgorICoKKyAqIEBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0s6CisgKglIYXJkd2FyZSByZXF1aXJlcyBudWxsZnVuYyBmcmFtZSBoYW5kbGluZyBpbiBzdGFjaywgaW1wbGllcworICoJc3RhY2sgc3VwcG9ydCBmb3IgZHluYW1pYyBQUy4KKyAqCisgKiBASUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFM6CisgKglIYXJkd2FyZSBoYXMgc3VwcG9ydCBmb3IgZHluYW1pYyBQUy4KKyAqCisgKiBASUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOgorICoJSGFyZHdhcmUgc3VwcG9ydHMgbWFuYWdlbWVudCBmcmFtZSBwcm90ZWN0aW9uIChNRlAsIElFRUUgODAyLjExdykuCisgKgorICogQElFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSOgorICoJSGFyZHdhcmUgc3VwcG9ydHMgZHJvcHBpbmcgb2YgaXJyZWxldmFudCBiZWFjb24gZnJhbWVzIHRvCisgKglhdm9pZCB3YWtpbmcgdXAgY3B1LgogICovCiBlbnVtIGllZWU4MDIxMV9od19mbGFncyB7CiAJSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUwkJCT0gMTw8MSwKQEAgLTg2NSwxMiArODk4LDE1IEBACiAJSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfU0xPVF9JTkNBUEFCTEUJCT0gMTw8MywKIAlJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9QUkVBTUJMRV9JTkNBUEFCTEUJPSAxPDw0LAogCUlFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDCQkJPSAxPDw1LAotCUlFRUU4MDIxMV9IV19TSUdOQUxfREIJCQkJPSAxPDw2LAotCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNCQkJCT0gMTw8NywKLQlJRUVFODAyMTFfSFdfTk9JU0VfREJNCQkJCT0gMTw8OCwKLQlJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVAkJCT0gMTw8OSwKLQlJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04JCQk9IDE8PDEwLAotCUlFRUU4MDIxMV9IV19OT19TVEFDS19EWU5BTUlDX1BTCQk9IDE8PDExLAorCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNCQkJCT0gMTw8NiwKKwlJRUVFODAyMTFfSFdfTk9JU0VfREJNCQkJCT0gMTw8NywKKwlJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVAkJCT0gMTw8OCwKKwlJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04JCQk9IDE8PDksCisJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTCQkJPSAxPDwxMCwKKwlJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sJCQk9IDE8PDExLAorCUlFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTCQk9IDE8PDEyLAorCUlFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRQkJCT0gMTw8MTMsCisJSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVIJCQk9IDE8PDE0LAogfTsKIAogLyoqCkBAIC04OTAsOSArOTI2LDggQEAKICAqIEB3b3JrcXVldWU6IHNpbmdsZSB0aHJlYWRlZCB3b3JrcXVldWUgYXZhaWxhYmxlIGZvciBkcml2ZXIgdXNlLAogICoJYWxsb2NhdGVkIGJ5IG1hYzgwMjExIG9uIHJlZ2lzdHJhdGlvbiBhbmQgZmx1c2hlZCB3aGVuIGFuCiAgKglpbnRlcmZhY2UgaXMgcmVtb3ZlZC4KLSAqCU5PVElDRTogQWxsIHdvcmsgcGVyZm9ybWVkIG9uIHRoaXMgd29ya3F1ZXVlIHNob3VsZCBORVZFUgotICoJYWNxdWlyZSB0aGUgUlROTCBsb2NrIChpLmUuIERvbid0IHVzZSB0aGUgZnVuY3Rpb24KLSAqCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzKCkpCisgKglOT1RJQ0U6IEFsbCB3b3JrIHBlcmZvcm1lZCBvbiB0aGlzIHdvcmtxdWV1ZSBtdXN0IG5vdAorICoJYWNxdWlyZSB0aGUgUlROTCBsb2NrLgogICoKICAqIEBwcml2OiBwb2ludGVyIHRvIHByaXZhdGUgYXJlYSB0aGF0IHdhcyBhbGxvY2F0ZWQgZm9yIGRyaXZlciB1c2UKICAqCWFsb25nIHdpdGggdGhpcyBzdHJ1Y3R1cmUuCkBAIC05MTQsMTIgKzk0OSw2IEBACiAgKglkYXRhIHBhY2tldHMuIFdNTS9Rb1MgcmVxdWlyZXMgYXQgbGVhc3QgZm91ciwgdGhlc2UKICAqCXF1ZXVlcyBuZWVkIHRvIGhhdmUgY29uZmlndXJhYmxlIGFjY2VzcyBwYXJhbWV0ZXJzLgogICoKLSAqIEBhbXBkdV9xdWV1ZXM6IG51bWJlciBvZiBhdmFpbGFibGUgaGFyZHdhcmUgdHJhbnNtaXQgcXVldWVzCi0gKglmb3IgQS1NUERVIHBhY2tldHMsIHRoZXNlIGhhdmUgbm8gYWNjZXNzIHBhcmFtZXRlcnMKLSAqCWJlY2F1c2UgdGhleSdyZSB1c2VkIG9ubHkgZm9yIEEtTVBEVSBmcmFtZXMuIE5vdGUgdGhhdAotICoJbWFjODAyMTEgd2lsbCBub3QgY3VycmVudGx5IHVzZSBhbnkgb2YgdGhlIHJlZ3VsYXIgcXVldWVzCi0gKglmb3IgYWdncmVnYXRpb24uCi0gKgogICogQHJhdGVfY29udHJvbF9hbGdvcml0aG06IHJhdGUgY29udHJvbCBhbGdvcml0aG0gZm9yIHRoaXMgaGFyZHdhcmUuCiAgKglJZiB1bnNldCAoTlVMTCksIHRoZSBkZWZhdWx0IGFsZ29yaXRobSB3aWxsIGJlIHVzZWQuIE11c3QgYmUKICAqCXNldCBiZWZvcmUgY2FsbGluZyBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKS4KQEAgLTk0NCw3ICs5NzMsNiBAQAogCWludCB2aWZfZGF0YV9zaXplOwogCWludCBzdGFfZGF0YV9zaXplOwogCXUxNiBxdWV1ZXM7Ci0JdTE2IGFtcGR1X3F1ZXVlczsKIAl1MTYgbWF4X2xpc3Rlbl9pbnRlcnZhbDsKIAlzOCBtYXhfc2lnbmFsOwogCXU4IG1heF9yYXRlczsKQEAgLTk1Miw2ICs5ODAsMTkgQEAKIH07CiAKIC8qKgorICogd2lwaHlfdG9faWVlZTgwMjExX2h3IC0gcmV0dXJuIGEgbWFjODAyMTEgZHJpdmVyIGh3IHN0cnVjdCBmcm9tIGEgd2lwaHkKKyAqCisgKiBAd2lwaHk6IHRoZSAmc3RydWN0IHdpcGh5IHdoaWNoIHdlIHdhbnQgdG8gcXVlcnkKKyAqCisgKiBtYWM4MDIxMSBkcml2ZXJzIGNhbiB1c2UgdGhpcyB0byBnZXQgdG8gdGhlaXIgcmVzcGVjdGl2ZQorICogJnN0cnVjdCBpZWVlODAyMTFfaHcuIERyaXZlcnMgd2lzaGluZyB0byBnZXQgdG8gdGhlaXIgb3duIHByaXZhdGUKKyAqIHN0cnVjdHVyZSBjYW4gdGhlbiBhY2Nlc3MgaXQgdmlhIGh3LT5wcml2LiBOb3RlIHRoYXQgbWFjODAyMTExIGRyaXZlcnMgc2hvdWxkCisgKiBub3QgdXNlIHdpcGh5X3ByaXYoKSB0byB0cnkgdG8gZ2V0IHRoZWlyIHByaXZhdGUgZHJpdmVyIHN0cnVjdHVyZSBhcyB0aGlzCisgKiBpcyBhbHJlYWR5IHVzZWQgaW50ZXJuYWxseSBieSBtYWM4MDIxMS4KKyAqLworc3RydWN0IGllZWU4MDIxMV9odyAqd2lwaHlfdG9faWVlZTgwMjExX2h3KHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCisvKioKICAqIFNFVF9JRUVFODAyMTFfREVWIC0gc2V0IGRldmljZSBmb3IgODAyLjExIGhhcmR3YXJlCiAgKgogICogQGh3OiB0aGUgJnN0cnVjdCBpZWVlODAyMTFfaHcgdG8gc2V0IHRoZSBkZXZpY2UgZm9yCkBAIC05NzMsMTYgKzEwMTQsNiBAQAogCW1lbWNweShody0+d2lwaHktPnBlcm1fYWRkciwgYWRkciwgRVRIX0FMRU4pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXJldHVybiBody0+cXVldWVzOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlyZXR1cm4gaHctPnF1ZXVlcyArIGh3LT5hbXBkdV9xdWV1ZXM7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGllZWU4MDIxMV9yYXRlICoKIGllZWU4MDIxMV9nZXRfdHhfcmF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpjKQpAQCAtMTAxOCwxNiArMTA0OSwxMiBAQAogICoKICAqIFRoZSBzZXRfa2V5KCkgY2FsbGJhY2sgaW4gdGhlICZzdHJ1Y3QgaWVlZTgwMjExX29wcyBmb3IgYSBnaXZlbgogICogZGV2aWNlIGlzIGNhbGxlZCB0byBlbmFibGUgaGFyZHdhcmUgYWNjZWxlcmF0aW9uIG9mIGVuY3J5cHRpb24gYW5kCi0gKiBkZWNyeXB0aW9uLiBUaGUgY2FsbGJhY2sgdGFrZXMgYW4gQGFkZHJlc3MgcGFyYW1ldGVyIHRoYXQgd2lsbCBiZQotICogdGhlIGJyb2FkY2FzdCBhZGRyZXNzIGZvciBkZWZhdWx0IGtleXMsIHRoZSBvdGhlciBzdGF0aW9uJ3MgaGFyZHdhcmUKLSAqIGFkZHJlc3MgZm9yIGluZGl2aWR1YWwga2V5cyBvciB0aGUgemVybyBhZGRyZXNzIGZvciBrZXlzIHRoYXQgd2lsbAotICogYmUgdXNlZCBvbmx5IGZvciB0cmFuc21pc3Npb24uCisgKiBkZWNyeXB0aW9uLiBUaGUgY2FsbGJhY2sgdGFrZXMgYSBAc3RhIHBhcmFtZXRlciB0aGF0IHdpbGwgYmUgTlVMTAorICogZm9yIGRlZmF1bHQga2V5cyBvciBrZXlzIHVzZWQgZm9yIHRyYW5zbWlzc2lvbiBvbmx5LCBvciBwb2ludCB0bworICogdGhlIHN0YXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBwZWVyIGZvciBpbmRpdmlkdWFsIGtleXMuCiAgKiBNdWx0aXBsZSB0cmFuc21pc3Npb24ga2V5cyB3aXRoIHRoZSBzYW1lIGtleSBpbmRleCBtYXkgYmUgdXNlZCB3aGVuCiAgKiBWTEFOcyBhcmUgY29uZmlndXJlZCBmb3IgYW4gYWNjZXNzIHBvaW50LgogICoKLSAqIFRoZSBAbG9jYWxfYWRkcmVzcyBwYXJhbWV0ZXIgd2lsbCBhbHdheXMgYmUgc2V0IHRvIG91ciBvd24gYWRkcmVzcywKLSAqIHRoaXMgaXMgb25seSByZWxldmFudCBpZiB5b3Ugc3VwcG9ydCBtdWx0aXBsZSBsb2NhbCBhZGRyZXNzZXMuCi0gKgogICogV2hlbiB0cmFuc21pdHRpbmcsIHRoZSBUWCBjb250cm9sIGRhdGEgd2lsbCB1c2UgdGhlIEBod19rZXlfaWR4CiAgKiBzZWxlY3RlZCBieSB0aGUgZHJpdmVyIGJ5IG1vZGlmeWluZyB0aGUgJnN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYKICAqIHBvaW50ZWQgdG8gYnkgdGhlIEBrZXkgcGFyYW1ldGVyIHRvIHRoZSBzZXRfa2V5KCkgZnVuY3Rpb24uCkBAIC0xMDYxLDYgKzEwODgsNjAgQEAKICAqLwogCiAvKioKKyAqIERPQzogUG93ZXJzYXZlIHN1cHBvcnQKKyAqCisgKiBtYWM4MDIxMSBoYXMgc3VwcG9ydCBmb3IgdmFyaW91cyBwb3dlcnNhdmUgaW1wbGVtZW50YXRpb25zLgorICoKKyAqIEZpcnN0LCBpdCBjYW4gc3VwcG9ydCBoYXJkd2FyZSB0aGF0IGhhbmRsZXMgYWxsIHBvd2Vyc2F2aW5nIGJ5CisgKiBpdHNlbGYsIHN1Y2ggaGFyZHdhcmUgc2hvdWxkIHNpbXBseSBzZXQgdGhlICVJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMKKyAqIGhhcmR3YXJlIGZsYWcuIEluIHRoYXQgY2FzZSwgaXQgd2lsbCBiZSB0b2xkIGFib3V0IHRoZSBkZXNpcmVkCisgKiBwb3dlcnNhdmUgbW9kZSBkZXBlbmRpbmcgb24gdGhlIGFzc29jaWF0aW9uIHN0YXR1cywgYW5kIHRoZSBkcml2ZXIKKyAqIG11c3QgdGFrZSBjYXJlIG9mIHNlbmRpbmcgbnVsbGZ1bmMgZnJhbWVzIHdoZW4gbmVjZXNzYXJ5LCBpLmUuIHdoZW4KKyAqIGVudGVyaW5nIGFuZCBsZWF2aW5nIHBvd2Vyc2F2ZSBtb2RlLiBUaGUgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIGxvb2sgYXQKKyAqIHRoZSBBSUQgaW4gYmVhY29ucyBhbmQgc2lnbmFsIHRvIHRoZSBBUCB0aGF0IGl0IHdva2UgdXAgd2hlbiBpdCBmaW5kcworICogdHJhZmZpYyBkaXJlY3RlZCB0byBpdC4gVGhpcyBtb2RlIHN1cHBvcnRzIGR5bmFtaWMgUFMgYnkgc2ltcGx5CisgKiBlbmFibGluZy9kaXNhYmxpbmcgUFMuCisgKgorICogQWRkaXRpb25hbGx5LCBzdWNoIGhhcmR3YXJlIG1heSBzZXQgdGhlICVJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUworICogZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGl0IGNhbiBzdXBwb3J0IGR5bmFtaWMgUFMgbW9kZSBpdHNlbGYgKHNlZSBiZWxvdykuCisgKgorICogT3RoZXIgaGFyZHdhcmUgZGVzaWducyBjYW5ub3Qgc2VuZCBudWxsZnVuYyBmcmFtZXMgYnkgdGhlbXNlbHZlcyBhbmQgYWxzbworICogbmVlZCBzb2Z0d2FyZSBzdXBwb3J0IGZvciBwYXJzaW5nIHRoZSBUSU0gYml0bWFwLiBUaGlzIGlzIGFsc28gc3VwcG9ydGVkCisgKiBieSBtYWM4MDIxMSBieSBjb21iaW5pbmcgdGhlICVJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgYW5kCisgKiAlSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIGZsYWdzLiBUaGUgaGFyZHdhcmUgaXMgb2YgY291cnNlIHN0aWxsCisgKiByZXF1aXJlZCB0byBwYXNzIHVwIGJlYWNvbnMuIEFkZGl0aW9uYWxseSwgaW4gdGhpcyBjYXNlLCBtYWM4MDIxMSB3aWxsCisgKiB3YWtlIHVwIHRoZSBoYXJkd2FyZSB3aGVuIG11bHRpY2FzdCB0cmFmZmljIGlzIGFubm91bmNlZCBpbiB0aGUgYmVhY29uLgorICoKKyAqIEZJWE1FOiBJIGRvbid0IHRoaW5rIHdlIGNhbiBiZSBmYXN0IGVub3VnaCBpbiBzb2Z0d2FyZSB3aGVuIHdlIHdhbnQgdG8KKyAqCSAgcmVjZWl2ZSBtdWx0aWNhc3QgdHJhZmZpYz8KKyAqCisgKiBEeW5hbWljIHBvd2Vyc2F2ZSBtb2RlIGlzIGFuIGV4dGVuc2lvbiB0byBub3JtYWwgcG93ZXJzYXZlIG1vZGUgaW4gd2hpY2gKKyAqIHRoZSBoYXJkd2FyZSBzdGF5cyBhd2FrZSBmb3IgYSB1c2VyLXNwZWNpZmllZCBwZXJpb2Qgb2YgdGltZSBhZnRlciBzZW5kaW5nCisgKiBhIGZyYW1lIHNvIHRoYXQgcmVwbHkgZnJhbWVzIG5lZWQgbm90IGJlIGJ1ZmZlcmVkIGFuZCB0aGVyZWZvcmUgZGVsYXllZAorICogdG8gdGhlIG5leHQgd2FrZXVwLiBUaGlzIGNhbiBlaXRoZXIgYmUgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlLCBpbiB3aGljaCBjYXNlCisgKiB0aGUgZHJpdmVyIG5lZWRzIHRvIGxvb2sgYXQgdGhlIEBkeW5hbWljX3BzX3RpbWVvdXQgaGFyZHdhcmUgY29uZmlndXJhdGlvbgorICogdmFsdWUsIG9yIGJ5IHRoZSBzdGFjayBpZiBhbGwgbnVsbGZ1bmMgaGFuZGxpbmcgaXMgaW4gdGhlIHN0YWNrLgorICovCisKKy8qKgorICogRE9DOiBCZWFjb24gZmlsdGVyIHN1cHBvcnQKKyAqCisgKiBTb21lIGhhcmR3YXJlIGhhdmUgYmVhY29uIGZpbHRlciBzdXBwb3J0IHRvIHJlZHVjZSBob3N0IGNwdSB3YWtldXBzCisgKiB3aGljaCB3aWxsIHJlZHVjZSBzeXN0ZW0gcG93ZXIgY29uc3VtcHRpb24uIEl0IHVzdWFsbGx5IHdvcmtzIHNvIHRoYXQKKyAqIHRoZSBmaXJtd2FyZSBjcmVhdGVzIGEgY2hlY2tzdW0gb2YgdGhlIGJlYWNvbiBidXQgb21pdHMgYWxsIGNvbnN0YW50bHkKKyAqIGNoYW5naW5nIGVsZW1lbnRzIChUU0YsIFRJTSBldGMpLiBXaGVuZXZlciB0aGUgY2hlY2tzdW0gY2hhbmdlcyB0aGUKKyAqIGJlYWNvbiBpcyBmb3J3YXJkZWQgdG8gdGhlIGhvc3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGp1c3QgZHJvcHBlZC4gVGhhdAorICogd2F5IHRoZSBob3N0IHdpbGwgb25seSByZWNlaXZlIGJlYWNvbnMgd2hlcmUgc29tZSByZWxldmFudCBpbmZvcm1hdGlvbgorICogKGZvciBleGFtcGxlIEVSUCBwcm90ZWN0aW9uIG9yIFdNTSBzZXR0aW5ncykgaGF2ZSBjaGFuZ2VkLgorICoKKyAqIEJlYWNvbiBmaWx0ZXIgc3VwcG9ydCBpcyBpbmZvcm1lZCB3aXRoICVJRUVFODAyMTFfSFdfQkVBQ09OX0ZJTFRFUiBmbGFnLgorICogVGhlIGRyaXZlciBuZWVkcyB0byBlbmFibGUgYmVhY29uIGZpbHRlciBzdXBwb3J0IHdoZW5ldmVyIHBvd2VyIHNhdmUgaXMKKyAqIGVuYWJsZWQsIHRoYXQgaXMgJUlFRUU4MDIxMV9DT05GX1BTIGlzIHNldC4gV2hlbiBwb3dlciBzYXZlIGlzIGVuYWJsZWQsCisgKiB0aGUgc3RhY2sgd2lsbCBub3QgY2hlY2sgZm9yIGJlYWNvbiBtaXNzIGF0IGFsbCBhbmQgdGhlIGRyaXZlciBuZWVkcyB0bworICogbm90aWZ5IGFib3V0IGNvbXBsZXRlIGxvc3Mgb2YgYmVhY29ucyB3aXRoIGllZWU4MDIxMV9iZWFjb25fbG9zcygpLgorICovCisKKy8qKgogICogRE9DOiBGcmFtZSBmaWx0ZXJpbmcKICAqCiAgKiBtYWM4MDIxMSByZXF1aXJlcyB0byBzZWUgbWFueSBtYW5hZ2VtZW50IGZyYW1lcyBmb3IgcHJvcGVyCkBAIC0xMTQ5LDE0ICsxMjMwLDE0IEBACiAgKiBASUVFRTgwMjExX0FNUERVX1JYX1NUT1A6IHN0b3AgUnggYWdncmVnYXRpb24KICAqIEBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6IHN0YXJ0IFR4IGFnZ3JlZ2F0aW9uCiAgKiBASUVFRTgwMjExX0FNUERVX1RYX1NUT1A6IHN0b3AgVHggYWdncmVnYXRpb24KLSAqIEBJRUVFODAyMTFfQU1QRFVfVFhfUkVTVU1FOiByZXN1bWUgVFggYWdncmVnYXRpb24KKyAqIEBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6IFRYIGFnZ3JlZ2F0aW9uIGhhcyBiZWNvbWUgb3BlcmF0aW9uYWwKICAqLwogZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gewogCUlFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVCwKIAlJRUVFODAyMTFfQU1QRFVfUlhfU1RPUCwKIAlJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQsCiAJSUVFRTgwMjExX0FNUERVX1RYX1NUT1AsCi0JSUVFRTgwMjExX0FNUERVX1RYX1JFU1VNRSwKKwlJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUwsCiB9OwogCiAvKioKQEAgLTExNzIsNiArMTI1Myw4IEBACiAgKgljb25maWd1cmF0aW9uIGluIHRoZSBUWCBjb250cm9sIGRhdGEuIFRoaXMgaGFuZGxlciBzaG91bGQsCiAgKglwcmVmZXJhYmx5LCBuZXZlciBmYWlsIGFuZCBzdG9wIHF1ZXVlcyBhcHByb3ByaWF0ZWx5LCBtb3JlCiAgKglpbXBvcnRhbnRseSwgaG93ZXZlciwgaXQgbXVzdCBuZXZlciBmYWlsIGZvciBBLU1QRFUtcXVldWVzLgorICoJVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIE5FVERFVl9UWF9PSyBleGNlcHQgaW4gdmVyeQorICoJbGltaXRlZCBjYXNlcy4KICAqCU11c3QgYmUgaW1wbGVtZW50ZWQgYW5kIGF0b21pYy4KICAqCiAgKiBAc3RhcnQ6IENhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IG5ldGRldmljZSBhdHRhY2hlZCB0byB0aGUgaGFyZHdhcmUKQEAgLTEyMTIsOSArMTI5NSwxMiBAQAogICoKICAqIEBjb25maWc6IEhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMuIElFRUUgODAyLjExIGNvZGUgY2FsbHMgdGhpcwogICoJZnVuY3Rpb24gdG8gY2hhbmdlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24sIGUuZy4sIGNoYW5uZWwuCisgKglUaGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBmYWlsIGJ1dCByZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICoJaWYgaXQgZG9lcy4KICAqCiAgKiBAY29uZmlnX2ludGVyZmFjZTogSGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiByZXF1ZXN0cyByZWxhdGVkIHRvIGludGVyZmFjZXMKICAqCShlLmcuIEJTU0lEIGNoYW5nZXMuKQorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgd2hpY2ggd2lsbCBiZSBzZWVuIGluIHVzZXJzcGFjZS4KICAqCiAgKiBAYnNzX2luZm9fY2hhbmdlZDogSGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiByZXF1ZXN0cyByZWxhdGVkIHRvIEJTUwogICoJcGFyYW1ldGVycyB0aGF0IG1heSB2YXJ5IGR1cmluZyBCU1MncyBsaWZlc3BhbiwgYW5kIG1heSBhZmZlY3QgbG93CkBAIC0xMjMyLDggKzEzMTgsOSBAQAogICoKICAqIEBzZXRfa2V5OiBTZWUgdGhlIHNlY3Rpb24gIkhhcmR3YXJlIGNyeXB0byBhY2NlbGVyYXRpb24iCiAgKglUaGlzIGNhbGxiYWNrIGNhbiBzbGVlcCwgYW5kIGlzIG9ubHkgY2FsbGVkIGJldHdlZW4gYWRkX2ludGVyZmFjZQotICoJYW5kIHJlbW92ZV9pbnRlcmZhY2UgY2FsbHMsIGkuZS4gd2hpbGUgdGhlIGludGVyZmFjZSB3aXRoIHRoZQotICoJZ2l2ZW4gbG9jYWxfYWRkcmVzcyBpcyBlbmFibGVkLgorICoJYW5kIHJlbW92ZV9pbnRlcmZhY2UgY2FsbHMsIGkuZS4gd2hpbGUgdGhlIGdpdmVuIHZpcnR1YWwgaW50ZXJmYWNlCisgKglpcyBlbmFibGVkLgorICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgdGhlIGtleSBjYW4ndCBiZSBhZGRlZC4KICAqCiAgKiBAdXBkYXRlX3RraXBfa2V5OiBTZWUgdGhlIHNlY3Rpb24gIkhhcmR3YXJlIGNyeXB0byBhY2NlbGVyYXRpb24iCiAgKiAJVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgY29udGV4dCBvZiBSeC4gQ2FsbGVkIGZvciBkcml2ZXJzCkBAIC0xMjQxLDEyICsxMzI4LDIyIEBACiAgKgogICogQGh3X3NjYW46IEFzayB0aGUgaGFyZHdhcmUgdG8gc2VydmljZSB0aGUgc2NhbiByZXF1ZXN0LCBubyBuZWVkIHRvIHN0YXJ0CiAgKgl0aGUgc2NhbiBzdGF0ZSBtYWNoaW5lIGluIHN0YWNrLiBUaGUgc2NhbiBtdXN0IGhvbm91ciB0aGUgY2hhbm5lbAotICoJY29uZmlndXJhdGlvbiBkb25lIGJ5IHRoZSByZWd1bGF0b3J5IGFnZW50IGluIHRoZSB3aXBoeSdzIHJlZ2lzdGVyZWQKLSAqCWJhbmRzLiBXaGVuIHRoZSBzY2FuIGZpbmlzaGVzLCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoKSBtdXN0IGJlCi0gKgljYWxsZWQ7IG5vdGUgdGhhdCBpdCBhbHNvIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIHNjYW4gY2Fubm90IGZpbmlzaAotICoJYmVjYXVzZSB0aGUgaGFyZHdhcmUgaXMgdHVybmVkIG9mZiEgQW55dGhpbmcgZWxzZSBpcyBhIGJ1ZyEKKyAqCWNvbmZpZ3VyYXRpb24gZG9uZSBieSB0aGUgcmVndWxhdG9yeSBhZ2VudCBpbiB0aGUgd2lwaHkncworICoJcmVnaXN0ZXJlZCBiYW5kcy4gVGhlIGhhcmR3YXJlIChvciB0aGUgZHJpdmVyKSBuZWVkcyB0byBtYWtlIHN1cmUKKyAqCXRoYXQgcG93ZXIgc2F2ZSBpcyBkaXNhYmxlZC4gV2hlbiB0aGUgc2NhbiBmaW5pc2hlcywKKyAqCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgpIG11c3QgYmUgY2FsbGVkOyBub3RlIHRoYXQgaXQgYWxzbyBtdXN0CisgKgliZSBjYWxsZWQgd2hlbiB0aGUgc2NhbiBjYW5ub3QgZmluaXNoIGJlY2F1c2UgdGhlIGhhcmR3YXJlIGlzCisgKgl0dXJuZWQgb2ZmISBBbnl0aGluZyBlbHNlIGlzIGEgYnVnISBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICoJd2hpY2ggd2lsbCBiZSBzZWVuIGluIHVzZXJzcGFjZS4KICAqCi0gKiBAZ2V0X3N0YXRzOiByZXR1cm4gbG93LWxldmVsIHN0YXRpc3RpY3MKKyAqIEBzd19zY2FuX3N0YXJ0OiBOb3RpZmllciBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBqdXN0IGJlZm9yZSBhIHNvZnR3YXJlIHNjYW4KKyAqCWlzIHN0YXJ0ZWQuIENhbiBiZSBOVUxMLCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0aGlzIG5vdGlmaWNhdGlvbi4KKyAqCisgKiBAc3dfc2Nhbl9jb21wbGV0ZTogTm90aWZpZXIgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQganVzdCBhZnRlciBhIHNvZnR3YXJlIHNjYW4KKyAqCWZpbmlzaGVkLiBDYW4gYmUgTlVMTCwgaWYgdGhlIGRyaXZlciBkb2Vzbid0IG5lZWQgdGhpcyBub3RpZmljYXRpb24uCisgKgorICogQGdldF9zdGF0czogUmV0dXJuIGxvdy1sZXZlbCBzdGF0aXN0aWNzLgorICogCVJldHVybnMgemVybyBpZiBzdGF0aXN0aWNzIGFyZSBhdmFpbGFibGUuCiAgKgogICogQGdldF90a2lwX3NlcTogSWYgeW91ciBkZXZpY2UgaW1wbGVtZW50cyBUS0lQIGVuY3J5cHRpb24gaW4gaGFyZHdhcmUgdGhpcwogICoJY2FsbGJhY2sgc2hvdWxkIGJlIHByb3ZpZGVkIHRvIHJlYWQgdGhlIFRLSVAgdHJhbnNtaXQgSVZzIChib3RoIElWMzIKQEAgLTEyNjAsMTYgKzEzNTcsMjEgQEAKICAqCiAgKiBAY29uZl90eDogQ29uZmlndXJlIFRYIHF1ZXVlIHBhcmFtZXRlcnMgKEVEQ0YgKGFpZnMsIGN3X21pbiwgY3dfbWF4KSwKICAqCWJ1cnN0aW5nKSBmb3IgYSBoYXJkd2FyZSBUWCBxdWV1ZS4KKyAqCVJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKgogICogQGdldF90eF9zdGF0czogR2V0IHN0YXRpc3RpY3Mgb2YgdGhlIGN1cnJlbnQgVFggcXVldWUgc3RhdHVzLiBUaGlzIGlzIHVzZWQKICAqCXRvIGdldCBudW1iZXIgb2YgY3VycmVudGx5IHF1ZXVlZCBwYWNrZXRzIChxdWV1ZSBsZW5ndGgpLCBtYXhpbXVtIHF1ZXVlCiAgKglzaXplIChsaW1pdCksIGFuZCB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBzZW50IHVzaW5nIGVhY2ggVFggcXVldWUKLSAqCShjb3VudCkuIFRoZSAnc3RhdHMnIHBvaW50ZXIgcG9pbnRzIHRvIGFuIGFycmF5IHRoYXQgaGFzIGh3LT5xdWV1ZXMgKwotICoJaHctPmFtcGR1X3F1ZXVlcyBpdGVtcy4KKyAqCShjb3VudCkuIFRoZSAnc3RhdHMnIHBvaW50ZXIgcG9pbnRzIHRvIGFuIGFycmF5IHRoYXQgaGFzIGh3LT5xdWV1ZXMKKyAqCWl0ZW1zLgogICoKICAqIEBnZXRfdHNmOiBHZXQgdGhlIGN1cnJlbnQgVFNGIHRpbWVyIHZhbHVlIGZyb20gZmlybXdhcmUvaGFyZHdhcmUuIEN1cnJlbnRseSwKLSAqCXRoaXMgaXMgb25seSB1c2VkIGZvciBJQlNTIG1vZGUgZGVidWdnaW5nIGFuZCwgYXMgc3VjaCwgaXMgbm90IGEKLSAqCXJlcXVpcmVkIGZ1bmN0aW9uLiBNdXN0IGJlIGF0b21pYy4KKyAqCXRoaXMgaXMgb25seSB1c2VkIGZvciBJQlNTIG1vZGUgQlNTSUQgbWVyZ2luZyBhbmQgZGVidWdnaW5nLiBJcyBub3QgYQorICoJcmVxdWlyZWQgZnVuY3Rpb24uCisgKgorICogQHNldF90c2Y6IFNldCB0aGUgVFNGIHRpbWVyIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGZpcm13YXJlL2hhcmR3YXJlLgorICogICAgICBDdXJyZW50bHksIHRoaXMgaXMgb25seSB1c2VkIGZvciBJQlNTIG1vZGUgZGVidWdnaW5nLiBJcyBub3QgYQorICoJcmVxdWlyZWQgZnVuY3Rpb24uCiAgKgogICogQHJlc2V0X3RzZjogUmVzZXQgdGhlIFRTRiB0aW1lciBhbmQgYWxsb3cgZmlybXdhcmUvaGFyZHdhcmUgdG8gc3luY2hyb25pemUKICAqCXdpdGggb3RoZXIgU1RBcyBpbiB0aGUgSUJTUy4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gSUJTUyBtb2RlLiBUaGlzCkBAIC0xMjc5LDEzICsxMzgxLDE1IEBACiAgKiBAdHhfbGFzdF9iZWFjb246IERldGVybWluZSB3aGV0aGVyIHRoZSBsYXN0IElCU1MgYmVhY29uIHdhcyBzZW50IGJ5IHVzLgogICoJVGhpcyBpcyBuZWVkZWQgb25seSBmb3IgSUJTUyBtb2RlIGFuZCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMKICAqCXVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcmVwbHkgdG8gUHJvYmUgUmVxdWVzdHMuCisgKglSZXR1cm5zIG5vbi16ZXJvIGlmIHRoaXMgZGV2aWNlIHNlbnQgdGhlIGxhc3QgYmVhY29uLgogICoKICAqIEBhbXBkdV9hY3Rpb246IFBlcmZvcm0gYSBjZXJ0YWluIEEtTVBEVSBhY3Rpb24KICAqIAlUaGUgUkEvVElEIGNvbWJpbmF0aW9uIGRldGVybWluZXMgdGhlIGRlc3RpbmF0aW9uIGFuZCBUSUQgd2Ugd2FudAogICogCXRoZSBhbXBkdSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIGZvci4gVGhlIGFjdGlvbiBpcyBkZWZpbmVkIHRocm91Z2gKICAqIAlpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24uIFN0YXJ0aW5nIHNlcXVlbmNlIG51bWJlciAoQHNzbikKLSAqIAlpcyB0aGUgZmlyc3QgZnJhbWUgd2UgZXhwZWN0IHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4gbm90aWNlCisgKiAJaXMgdGhlIGZpcnN0IGZyYW1lIHdlIGV4cGVjdCB0byBwZXJmb3JtIHRoZSBhY3Rpb24gb24uIE5vdGljZQogICogCXRoYXQgVFgvUlhfU1RPUCBjYW4gcGFzcyBOVUxMIGZvciB0aGlzIHBhcmFtZXRlci4KKyAqCVJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfb3BzIHsKIAlpbnQgKCp0eCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTMxMCwxMiArMTQxNCwxNSBAQAogCWludCAoKnNldF90aW0pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgICAgICAgYm9vbCBzZXQpOwogCWludCAoKnNldF9rZXkpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJICAgICAgIGNvbnN0IHU4ICpsb2NhbF9hZGRyZXNzLCBjb25zdCB1OCAqYWRkcmVzcywKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkpOwogCXZvaWQgKCp1cGRhdGVfdGtpcF9rZXkpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqY29uZiwgY29uc3QgdTggKmFkZHJlc3MsCiAJCQl1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpOwotCWludCAoKmh3X3NjYW4pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqc3NpZCwgc2l6ZV90IGxlbik7CisJaW50ICgqaHdfc2Nhbikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOworCXZvaWQgKCpzd19zY2FuX3N0YXJ0KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnN3X3NjYW5fY29tcGxldGUpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAlpbnQgKCpnZXRfc3RhdHMpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cyk7CiAJdm9pZCAoKmdldF90a2lwX3NlcSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGh3X2tleV9pZHgsCkBAIC0xMzI4LDYgKzE0MzUsNyBAQAogCWludCAoKmdldF90eF9zdGF0cykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogCXU2NCAoKmdldF90c2YpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKwl2b2lkICgqc2V0X3RzZikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU2NCB0c2YpOwogCXZvaWQgKCpyZXNldF90c2YpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAlpbnQgKCp0eF9sYXN0X2JlYWNvbikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCWludCAoKmFtcGR1X2FjdGlvbikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0xNzUyLDggKzE4NjAsOSBAQAogICogbWFjODAyMTEgdGhhdCB0aGUgc2NhbiBmaW5pc2hlZC4KICAqCiAgKiBAaHc6IHRoZSBoYXJkd2FyZSB0aGF0IGZpbmlzaGVkIHRoZSBzY2FuCisgKiBAYWJvcnRlZDogc2V0IHRvIHRydWUgaWYgc2NhbiB3YXMgYWJvcnRlZAogICovCi12b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Cit2b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBhYm9ydGVkKTsKIAogLyoqCiAgKiBpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyAtIGl0ZXJhdGUgYWN0aXZlIGludGVyZmFjZXMKQEAgLTE4ODIsMTAgKzE5OTEsMzAgQEAKIHN0cnVjdCBpZWVlODAyMTFfc3RhICppZWVlODAyMTFfZmluZF9zdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJCSBjb25zdCB1OCAqYWRkcik7CiAKKy8qKgorICogaWVlZTgwMjExX2JlYWNvbl9sb3NzIC0gaW5mb3JtIGhhcmR3YXJlIGRvZXMgbm90IHJlY2VpdmUgYmVhY29ucworICoKKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mLgorICoKKyAqIFdoZW4gYmVhY29uIGZpbHRlcmluZyBpcyBlbmFibGVkIHdpdGggSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVJJTkcgYW5kCisgKiBJRUVFODAyMTFfQ09ORl9QUyBpcyBzZXQsIHRoZSBkcml2ZXIgbmVlZHMgdG8gaW5mb3JtIHdoZW5ldmVyIHRoZQorICogaGFyZHdhcmUgaXMgbm90IHJlY2VpdmluZyBiZWFjb25zIHdpdGggdGhpcyBmdW5jdGlvbi4KKyAqLwordm9pZCBpZWVlODAyMTFfYmVhY29uX2xvc3Moc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiAKIC8qIFJhdGUgY29udHJvbCBBUEkgKi8KIAogLyoqCisgKiBlbnVtIHJhdGVfY29udHJvbF9jaGFuZ2VkIC0gZmxhZ3MgdG8gaW5kaWNhdGUgd2hpY2ggcGFyYW1ldGVyIGNoYW5nZWQKKyAqCisgKiBASUVFRTgwMjExX1JDX0hUX0NIQU5HRUQ6IFRoZSBIVCBwYXJhbWV0ZXJzIG9mIHRoZSBvcGVyYXRpbmcgY2hhbm5lbCBoYXZlCisgKgljaGFuZ2VkLCByYXRlIGNvbnRyb2wgYWxnb3JpdGhtIGNhbiB1cGRhdGUgaXRzIGludGVybmFsIHN0YXRlIGlmIG5lZWRlZC4KKyAqLworZW51bSByYXRlX2NvbnRyb2xfY2hhbmdlZCB7CisJSUVFRTgwMjExX1JDX0hUX0NIQU5HRUQgPSBCSVQoMCkKK307CisKKy8qKgogICogc3RydWN0IGllZWU4MDIxMV90eF9yYXRlX2NvbnRyb2wgLSByYXRlIGNvbnRyb2wgaW5mb3JtYXRpb24gZm9yL2Zyb20gUkMgYWxnbwogICoKICAqIEBodzogVGhlIGhhcmR3YXJlIHRoZSBhbGdvcml0aG0gaXMgaW52b2tlZCBmb3IuCkBAIC0xOTIxLDYgKzIwNTAsOSBAQAogCXZvaWQgKigqYWxsb2Nfc3RhKSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBnZnBfdCBnZnApOwogCXZvaWQgKCpyYXRlX2luaXQpKHZvaWQgKnByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB2b2lkICpwcml2X3N0YSk7CisJdm9pZCAoKnJhdGVfdXBkYXRlKSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJICAgIHZvaWQgKnByaXZfc3RhLCB1MzIgY2hhbmdlZCk7CiAJdm9pZCAoKmZyZWVfc3RhKSh2b2lkICpwcml2LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJIHZvaWQgKnByaXZfc3RhKTsKIApAQCAtMTk2Miw0ICsyMDk0LDM0IEBACiBpbnQgaWVlZTgwMjExX3JhdGVfY29udHJvbF9yZWdpc3RlcihzdHJ1Y3QgcmF0ZV9jb250cm9sX29wcyAqb3BzKTsKIHZvaWQgaWVlZTgwMjExX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzICpvcHMpOwogCitzdGF0aWMgaW5saW5lIGJvb2wKK2NvbmZfaXNfaHQyMChzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQyMDsKK30KKworc3RhdGljIGlubGluZSBib29sCitjb25mX2lzX2h0NDBfbWludXMoc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXJldHVybiBjb25mLT5jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzsKK30KKworc3RhdGljIGlubGluZSBib29sCitjb25mX2lzX2h0NDBfcGx1cyhzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0MFBMVVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorY29uZl9pc19odDQwKHN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKK3sKKwlyZXR1cm4gY29uZl9pc19odDQwX21pbnVzKGNvbmYpIHx8IGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2NvbmZfaXNfaHQoc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mKQoreworCXJldHVybiBjb25mLT5jaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX05PX0hUOworfQorCiAjZW5kaWYgLyogTUFDODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCmluZGV4IDJlMGM1MzYuLjZjM2Y5NjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKQEAgLTkxLDggKzkxLDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjQvbmZfY29ubnRyYWNrX2lwdjQuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfY29ubnRyYWNrX2lwdjYuaD4KIAotc3RydWN0IG5mX2Nvbm4KLXsKK3N0cnVjdCBuZl9jb25uIHsKIAkvKiBVc2FnZSBjb3VudCBpbiBoZXJlIGlzIDEgZm9yIGhhc2ggdGFibGUvZGVzdHJ1Y3QgdGltZXIsIDEgcGVyIHNrYiwKICAgICAgICAgICAgcGx1cyAxIGZvciBhbnkgY29ubmVjdGlvbihzKSB3ZSBhcmUgYG1hc3RlcicgZm9yICovCiAJc3RydWN0IG5mX2Nvbm50cmFjayBjdF9nZW5lcmFsOwpAQCAtMTI2LDcgKzEyNSw2IEBACiAjaWZkZWYgQ09ORklHX05FVF9OUwogCXN0cnVjdCBuZXQgKmN0X25ldDsKICNlbmRpZgotCXN0cnVjdCByY3VfaGVhZCByY3U7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZl9jb25uICoKQEAgLTE5MCw5ICsxODgsMTMgQEAKIGV4dGVybiBpbnQgbmZfY3RfbDNwcm90b190cnlfbW9kdWxlX2dldCh1bnNpZ25lZCBzaG9ydCBsM3Byb3RvKTsKIGV4dGVybiB2b2lkIG5mX2N0X2wzcHJvdG9fbW9kdWxlX3B1dCh1bnNpZ25lZCBzaG9ydCBsM3Byb3RvKTsKIAotZXh0ZXJuIHN0cnVjdCBobGlzdF9oZWFkICpuZl9jdF9hbGxvY19oYXNodGFibGUodW5zaWduZWQgaW50ICpzaXplcCwgaW50ICp2bWFsbG9jZWQpOwotZXh0ZXJuIHZvaWQgbmZfY3RfZnJlZV9oYXNodGFibGUoc3RydWN0IGhsaXN0X2hlYWQgKmhhc2gsIGludCB2bWFsbG9jZWQsCi0JCQkJIHVuc2lnbmVkIGludCBzaXplKTsKKy8qCisgKiBBbGxvY2F0ZSBhIGhhc2h0YWJsZSBvZiBobGlzdF9oZWFkIChpZiBudWxscyA9PSAwKSwKKyAqIG9yIGhsaXN0X251bGxzX2hlYWQgKGlmIG51bGxzID09IDEpCisgKi8KK2V4dGVybiB2b2lkICpuZl9jdF9hbGxvY19oYXNodGFibGUodW5zaWduZWQgaW50ICpzaXplcCwgaW50ICp2bWFsbG9jZWQsIGludCBudWxscyk7CisKK2V4dGVybiB2b2lkIG5mX2N0X2ZyZWVfaGFzaHRhYmxlKHZvaWQgKmhhc2gsIGludCB2bWFsbG9jZWQsIHVuc2lnbmVkIGludCBzaXplKTsKIAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCiBfX25mX2Nvbm50cmFja19maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwpAQCAtMjg3LDcgKzI4OSw3IEBACiAKIGV4dGVybiBpbnQgbmZfY29ubnRyYWNrX3NldF9oYXNoc2l6ZShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwotZXh0ZXJuIGludCBuZl9jb25udHJhY2tfbWF4OworZXh0ZXJuIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfbWF4OwogCiAjZGVmaW5lIE5GX0NUX1NUQVRfSU5DKG5ldCwgY291bnQpCVwKIAkocGVyX2NwdV9wdHIoKG5ldCktPmN0LnN0YXQsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpLT5jb3VudCsrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaAppbmRleCBjMjUwNjhlLi41YTQ0OWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaApAQCAtNjIsNyArNjIsOCBAQAogCWlmIChjdCAmJiBjdCAhPSAmbmZfY29ubnRyYWNrX3VudHJhY2tlZCkgewogCQlpZiAoIW5mX2N0X2lzX2NvbmZpcm1lZChjdCkgJiYgIW5mX2N0X2lzX2R5aW5nKGN0KSkKIAkJCXJldCA9IF9fbmZfY29ubnRyYWNrX2NvbmZpcm0oc2tiKTsKLQkJbmZfY3RfZGVsaXZlcl9jYWNoZWRfZXZlbnRzKGN0KTsKKwkJaWYgKGxpa2VseShyZXQgPT0gTkZfQUNDRVBUKSkKKwkJCW5mX2N0X2RlbGl2ZXJfY2FjaGVkX2V2ZW50cyhjdCk7CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAppbmRleCA2NmQ2NWE3Li5lZTJhNGIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKQEAgLTE0LDYgKzE0LDggQEAKIAogc3RydWN0IG1vZHVsZTsKIAorI2RlZmluZSBORl9DVF9IRUxQRVJfTkFNRV9MRU4JMTYKKwogc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBobm9kZTsJLyogSW50ZXJuYWwgdXNlLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaAppbmRleCAwMzc4Njc2Li45Zjk5ZDM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaApAQCAtNTMsMTAgKzUzLDE3IEBACiAJaW50ICgqdHVwbGVfdG9fbmxhdHRyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQpOwogCisJLyoKKwkgKiBDYWxjdWxhdGUgc2l6ZSBvZiB0dXBsZSBubGF0dHIKKwkgKi8KKwlpbnQgKCpubGF0dHJfdHVwbGVfc2l6ZSkodm9pZCk7CisKIAlpbnQgKCpubGF0dHJfdG9fdHVwbGUpKHN0cnVjdCBubGF0dHIgKnRiW10sCiAJCQkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdCk7CiAJY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKm5sYV9wb2xpY3k7CiAKKwlzaXplX3QgbmxhX3NpemU7CisKICNpZmRlZiBDT05GSUdfU1lTQ1RMCiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIJKmN0bF90YWJsZV9oZWFkZXI7CiAJc3RydWN0IGN0bF9wYXRoCQkqY3RsX3RhYmxlX3BhdGg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCmluZGV4IGRlYmRhZjcuLmJhMzJlZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oCkBAIC02NCwxNiArNjQsMjIgQEAKIAkvKiBjb252ZXJ0IHByb3RvaW5mbyB0byBuZm5ldGluayBhdHRyaWJ1dGVzICovCiAJaW50ICgqdG9fbmxhdHRyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmxhdHRyICpubGEsCiAJCQkgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0KTsKKwkvKiBDYWxjdWxhdGUgcHJvdG9pbmZvIG5sYXR0ciBzaXplICovCisJaW50ICgqbmxhdHRyX3NpemUpKHZvaWQpOwogCiAJLyogY29udmVydCBuZm5ldGxpbmsgYXR0cmlidXRlcyB0byBwcm90b2luZm8gKi8KIAlpbnQgKCpmcm9tX25sYXR0cikoc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5mX2Nvbm4gKmN0KTsKIAogCWludCAoKnR1cGxlX3RvX25sYXR0cikoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KTsKKwkvKiBDYWxjdWxhdGUgdHVwbGUgbmxhdHRyIHNpemUgKi8KKwlpbnQgKCpubGF0dHJfdHVwbGVfc2l6ZSkodm9pZCk7CiAJaW50ICgqbmxhdHRyX3RvX3R1cGxlKShzdHJ1Y3QgbmxhdHRyICp0YltdLAogCQkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQpOwogCWNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpubGFfcG9saWN5OwogCisJc2l6ZV90IG5sYV9zaXplOworCiAjaWZkZWYgQ09ORklHX1NZU0NUTAogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyCSoqY3RsX3RhYmxlX2hlYWRlcjsKIAlzdHJ1Y3QgY3RsX3RhYmxlCSpjdGxfdGFibGU7CkBAIC05MCwxMCArOTYsNyBAQAogCXN0cnVjdCBtb2R1bGUgKm1lOwogfTsKIAotLyogRXhpc3RpbmcgYnVpbHQtaW4gcHJvdG9jb2xzICovCi1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3RjcDY7Ci1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3VkcDQ7Ci1leHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX3VkcDY7CisvKiBFeGlzdGluZyBidWlsdC1pbiBnZW5lcmljIHByb3RvY29sICovCiBleHRlcm4gc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWM7CiAKICNkZWZpbmUgTUFYX05GX0NUX1BST1RPIDI1NgpAQCAtMTAxLDExICsxMDQsNiBAQAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqCiBfX25mX2N0X2w0cHJvdG9fZmluZCh1X2ludDE2X3QgbDNwcm90bywgdV9pbnQ4X3QgbDRwcm90byk7CiAKLWV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKgotbmZfY3RfbDRwcm90b19maW5kX2dldCh1X2ludDE2X3QgbDNwcm90bywgdV9pbnQ4X3QgcHJvdG9jb2wpOwotCi1leHRlcm4gdm9pZCBuZl9jdF9sNHByb3RvX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnApOwotCiAvKiBQcm90b2NvbCByZWdpc3RyYXRpb24uICovCiBleHRlcm4gaW50IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKHN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqcHJvdG8pOwogZXh0ZXJuIHZvaWQgbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnByb3RvKTsKQEAgLTExNSw2ICsxMTMsNyBAQAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKTsKIGV4dGVybiBpbnQgbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUoc3RydWN0IG5sYXR0ciAqdGJbXSwKIAkJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0KTsKK2V4dGVybiBpbnQgbmZfY3RfcG9ydF9ubGF0dHJfdHVwbGVfc2l6ZSh2b2lkKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZl9jdF9wb3J0X25sYV9wb2xpY3lbXTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaAppbmRleCBmMmY2YWE3Li4yNjI4YzE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oCkBAIC0xMiw2ICsxMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3RfbnVsbHMuaD4KIAogLyogQSBgdHVwbGUnIGlzIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uIHRvIHVuaXF1ZWx5CiAgIGlkZW50aWZ5IGEgY29ubmVjdGlvbi4gIGllLiBpZiB0d28gcGFja2V0cyBoYXZlIHRoZSBzYW1lIHR1cGxlLCB0aGV5CkBAIC0xNDYsOSArMTQ3LDggQEAKIAkoKGVudW0gaXBfY29ubnRyYWNrX2RpcikoaCktPnR1cGxlLmRzdC5kaXIpCiAKIC8qIENvbm5lY3Rpb25zIGhhdmUgdHdvIGVudHJpZXMgaW4gdGhlIGhhc2ggdGFibGU6IG9uZSBmb3IgZWFjaCB3YXkgKi8KLXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaAotewotCXN0cnVjdCBobGlzdF9ub2RlIGhub2RlOworc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoIHsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBobm5vZGU7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9sb2cuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9sb2cuaAppbmRleCA3MTgyYzA2Li45MjA5OTdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfTkZfTE9HX0gKICNkZWZpbmUgX05GX0xPR19ICiAKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KKwogLyogdGhvc2UgTkZfTE9HXyogZGVmaW5lcyBhbmQgc3RydWN0IG5mX2xvZ2luZm8gYXJlIGxlZ2FjeSBkZWZpbml0aW9zIHRoYXQgd2lsbAogICogZGlzYXBwZWFyIG9uY2UgaXB0YWJsZXMgaXMgcmVwbGFjZWQgd2l0aCBwa3R0YWJsZXMuICBQbGVhc2UgRE8gTk9UIHVzZSB0aGVtCiAgKiBmb3IgYW55IG5ldyBjb2RlISAqLwpAQCAtNDAsMTIgKzQyLDE1IEBACiAJc3RydWN0IG1vZHVsZQkqbWU7CiAJbmZfbG9nZm4gCSpsb2dmbjsKIAljaGFyCQkqbmFtZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3RbTkZQUk9UT19OVU1QUk9UT107CiB9OwogCiAvKiBGdW5jdGlvbiB0byByZWdpc3Rlci91bnJlZ2lzdGVyIGxvZyBmdW5jdGlvbi4gKi8KLWludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Ci12b2lkIG5mX2xvZ191bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Ci12b2lkIG5mX2xvZ191bnJlZ2lzdGVyX3BmKHVfaW50OF90IHBmKTsKK2ludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7Cit2b2lkIG5mX2xvZ191bnJlZ2lzdGVyKHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcik7CisKK2ludCBuZl9sb2dfYmluZF9wZih1X2ludDhfdCBwZiwgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKTsKK3ZvaWQgbmZfbG9nX3VuYmluZF9wZih1X2ludDhfdCBwZik7CiAKIC8qIENhbGxzIHRoZSByZWdpc3RlcmVkIGJhY2tlbmQgbG9nZ2luZyBmdW5jdGlvbiAqLwogdm9pZCBuZl9sb2dfcGFja2V0KHVfaW50OF90IHBmLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCmluZGV4IDhhNjE1MGEuLmVkZGI1MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9uZXRsaW5rLmgKQEAgLTIzMCw2ICsyMzAsNyBAQAogZXh0ZXJuIGludAkJbmxhX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLAogCQkJCSAgc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3kpOworZXh0ZXJuIGludAkJbmxhX3BvbGljeV9sZW4oY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKiwgaW50KTsKIGV4dGVybiBzdHJ1Y3QgbmxhdHRyICoJbmxhX2ZpbmQoc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IGF0dHJ0eXBlKTsKIGV4dGVybiBzaXplX3QJCW5sYV9zdHJsY3B5KGNoYXIgKmRzdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLAogCQkJCSAgICBzaXplX3QgZHN0c2l6ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaCBiL2luY2x1ZGUvbmV0L25ldG5zL2Nvbm50cmFjay5oCmluZGV4IGY0NDk4YTYuLjlkYzU4NDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldG5zL2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2Nvbm50cmFjay5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX05FVE5TX0NPTk5UUkFDS19ICiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdF9udWxscy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RydWN0IGN0bF90YWJsZV9oZWFkZXI7CkBAIC0xMCw5ICsxMSw5IEBACiBzdHJ1Y3QgbmV0bnNfY3QgewogCWF0b21pY190CQljb3VudDsKIAl1bnNpZ25lZCBpbnQJCWV4cGVjdF9jb3VudDsKLQlzdHJ1Y3QgaGxpc3RfaGVhZAkqaGFzaDsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZAkqaGFzaDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAkqZXhwZWN0X2hhc2g7Ci0Jc3RydWN0IGhsaXN0X2hlYWQJdW5jb25maXJtZWQ7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQJdW5jb25maXJtZWQ7CiAJc3RydWN0IGlwX2Nvbm50cmFja19zdGF0ICpzdGF0OwogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTCiAJc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaCBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaAppbmRleCA5NzdmNDgyLi4yZWIzODE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCkBAIC01NCw1ICs1NCwxOCBAQAogCiAJc3RydWN0IHRpbWVyX2xpc3QgcnRfc2VjcmV0X3RpbWVyOwogCWF0b21pY190IHJ0X2dlbmlkOworCisjaWZkZWYgQ09ORklHX0lQX01ST1VURQorCXN0cnVjdCBzb2NrCQkqbXJvdXRlX3NrOworCXN0cnVjdCBtZmNfY2FjaGUJKiptZmNfY2FjaGVfYXJyYXk7CisJc3RydWN0IHZpZl9kZXZpY2UJKnZpZl90YWJsZTsKKwlpbnQJCQltYXh2aWY7CisJYXRvbWljX3QJCWNhY2hlX3Jlc29sdmVfcXVldWVfbGVuOworCWludAkJCW1yb3V0ZV9kb19hc3NlcnQ7CisJaW50CQkJbXJvdXRlX2RvX3BpbTsKKyNpZiBkZWZpbmVkKENPTkZJR19JUF9QSU1TTV9WMSkgfHwgZGVmaW5lZChDT05GSUdfSVBfUElNU01fVjIpCisJaW50CQkJbXJvdXRlX3JlZ192aWZfbnVtOworI2VuZGlmCisjZW5kaWYKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldHJvbS5oIGIvaW5jbHVkZS9uZXQvbmV0cm9tLmgKaW5kZXggZjA2ODUyYi4uMTU2OTZiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0cm9tLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0cm9tLmgKQEAgLTU5LDEwICs1OSw2IEBACiAjZGVmaW5lIE5SX01BWF9XSU5ET1dfU0laRQkJMTI3CQkJLyogTWF4aW11bSBXaW5kb3cgQWxsb3dhYmxlIC0gMTI3ICovCiAjZGVmaW5lCU5SX01BWF9QQUNLRVRfU0laRQkJMjM2CQkJLyogTWF4aW11bSBQYWNrZXQgTGVuZ3RoIC0gMjM2ICovCiAKLXN0cnVjdCBucl9wcml2YXRlIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKLX07Ci0KIHN0cnVjdCBucl9zb2NrIHsKIAlzdHJ1Y3Qgc29jawkJc29jazsKIAlheDI1X2FkZHJlc3MJCXVzZXJfYWRkciwgc291cmNlX2FkZHIsIGRlc3RfYWRkcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Bob25ldC9waG9uZXQuaCBiL2luY2x1ZGUvbmV0L3Bob25ldC9waG9uZXQuaAppbmRleCAwNTdiMGE4Li5kNDNmNzFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9waG9uZXQvcGhvbmV0LmgKKysrIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3Bob25ldC5oCkBAIC0xMDUsNyArMTA1LDYgQEAKIAogaW50IHBob25ldF9zeXNjdGxfaW5pdCh2b2lkKTsKIHZvaWQgcGhvbmV0X3N5c2N0bF9leGl0KHZvaWQpOwotdm9pZCBwaG9uZXRfbmV0bGlua19yZWdpc3Rlcih2b2lkKTsKIGludCBpc2lfcmVnaXN0ZXIodm9pZCk7CiB2b2lkIGlzaV91bnJlZ2lzdGVyKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmggYi9pbmNsdWRlL25ldC9waG9uZXQvcG5fZGV2LmgKaW5kZXggYWExYzU5YS4uNTA1NGRjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcGhvbmV0L3BuX2Rldi5oCisrKyBiL2luY2x1ZGUvbmV0L3Bob25ldC9wbl9kZXYuaApAQCAtMjgsNyArMjgsNyBAQAogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0IHBuZGV2czsKK3N0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBob25ldF9kZXZpY2VfbGlzdChzdHJ1Y3QgbmV0ICpuZXQpOwogCiBzdHJ1Y3QgcGhvbmV0X2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpAQCAtMzYsOCArMzYsOSBAQAogCURFQ0xBUkVfQklUTUFQKGFkZHJzLCA2NCk7CiB9OwogCi12b2lkIHBob25ldF9kZXZpY2VfaW5pdCh2b2lkKTsKK2ludCBwaG9uZXRfZGV2aWNlX2luaXQodm9pZCk7CiB2b2lkIHBob25ldF9kZXZpY2VfZXhpdCh2b2lkKTsKK2ludCBwaG9uZXRfbmV0bGlua19yZWdpc3Rlcih2b2lkKTsKIHN0cnVjdCBuZXRfZGV2aWNlICpwaG9uZXRfZGV2aWNlX2dldChzdHJ1Y3QgbmV0ICpuZXQpOwogCiBpbnQgcGhvbmV0X2FkZHJlc3NfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkZHIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmggYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAppbmRleCA0MDgyZjM5Li5lMzdmZTMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAorKysgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaApAQCAtODUsNiArODUsNyBAQAogCQlzdHJ1Y3QgbmxhdHRyICp0YWIpOwogZXh0ZXJuIHZvaWQgcWRpc2NfcHV0X3J0YWIoc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnRhYik7CiBleHRlcm4gdm9pZCBxZGlzY19wdXRfc3RhYihzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZSAqdGFiKTsKK2V4dGVybiB2b2lkIHFkaXNjX3dhcm5fbm9ud2MoY2hhciAqdHh0LCBzdHJ1Y3QgUWRpc2MgKnFkaXNjKTsKIAogZXh0ZXJuIHZvaWQgX19xZGlzY19ydW4oc3RydWN0IFFkaXNjICpxKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcHNuYXAuaCBiL2luY2x1ZGUvbmV0L3BzbmFwLmgKaW5kZXggYjJlMDFjYy4uZmU0NTZjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcHNuYXAuaAorKysgYi9pbmNsdWRlL25ldC9wc25hcC5oCkBAIC0xLDcgKzEsMTEgQEAKICNpZm5kZWYgX05FVF9QU05BUF9ICiAjZGVmaW5lIF9ORVRfUFNOQVBfSAogCi1leHRlcm4gc3RydWN0IGRhdGFsaW5rX3Byb3RvICpyZWdpc3Rlcl9zbmFwX2NsaWVudCh1bnNpZ25lZCBjaGFyICpkZXNjLCBpbnQgKCpyY3ZmdW5jKShzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgcGFja2V0X3R5cGUgKiwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KSk7CitleHRlcm4gc3RydWN0IGRhdGFsaW5rX3Byb3RvICoKK3JlZ2lzdGVyX3NuYXBfY2xpZW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc2MsCisJCSAgICAgaW50ICgqcmN2ZnVuYykoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKiwKKwkJCQkgICAgc3RydWN0IHBhY2tldF90eXBlICosCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9zbmFwX2NsaWVudChzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnByb3RvKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAppbmRleCBmOGM0NzQyLi45NjRmZmEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKQEAgLTQyLDI0ICs0MiwxNyBAQAogCWludCAJCQkoKmVucXVldWUpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBRZGlzYyAqZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqCSgqZGVxdWV1ZSkoc3RydWN0IFFkaXNjICpkZXYpOwogCXVuc2lnbmVkCQlmbGFnczsKLSNkZWZpbmUgVENRX0ZfQlVJTFRJTgkxCi0jZGVmaW5lIFRDUV9GX1RIUk9UVExFRAkyCi0jZGVmaW5lIFRDUV9GX0lOR1JFU1MJNAorI2RlZmluZSBUQ1FfRl9CVUlMVElOCQkxCisjZGVmaW5lIFRDUV9GX1RIUk9UVExFRAkJMgorI2RlZmluZSBUQ1FfRl9JTkdSRVNTCQk0CisjZGVmaW5lIFRDUV9GX1dBUk5fTk9OV0MJKDEgPDwgMTYpCiAJaW50CQkJcGFkZGVkOwogCXN0cnVjdCBRZGlzY19vcHMJKm9wczsKIAlzdHJ1Y3QgcWRpc2Nfc2l6ZV90YWJsZQkqc3RhYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJdTMyCQkJaGFuZGxlOwogCXUzMgkJCXBhcmVudDsKIAlhdG9taWNfdAkJcmVmY250OwotCXVuc2lnbmVkIGxvbmcJCXN0YXRlOwotCXN0cnVjdCBza19idWZmCQkqZ3NvX3NrYjsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXE7Ci0Jc3RydWN0IG5ldGRldl9xdWV1ZQkqZGV2X3F1ZXVlOwotCXN0cnVjdCBRZGlzYwkJKm5leHRfc2NoZWQ7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCi0Jc3RydWN0IGduZXRfc3RhdHNfYmFzaWMJYnN0YXRzOwotCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlCXFzdGF0czsKIAlzdHJ1Y3QgZ25ldF9zdGF0c19yYXRlX2VzdAlyYXRlX2VzdDsKIAlpbnQJCQkoKnJlc2hhcGVfZmFpbCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJc3RydWN0IFFkaXNjICpxKTsKQEAgLTcwLDYgKzYzLDE3IEBACiAJICogYW5kIGl0IHdpbGwgbGl2ZSB1bnRpbCBiZXR0ZXIgc29sdXRpb24gd2lsbCBiZSBpbnZlbnRlZC4KIAkgKi8KIAlzdHJ1Y3QgUWRpc2MJCSpfX3BhcmVudDsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlCSpkZXZfcXVldWU7CisJc3RydWN0IFFkaXNjCQkqbmV4dF9zY2hlZDsKKworCXN0cnVjdCBza19idWZmCQkqZ3NvX3NrYjsKKwkvKgorCSAqIEZvciBwZXJmb3JtYW5jZSBzYWtlIG9uIFNNUCwgd2UgcHV0IGhpZ2hseSBtb2RpZmllZCBmaWVsZHMgYXQgdGhlIGVuZAorCSAqLworCXVuc2lnbmVkIGxvbmcJCXN0YXRlOworCXN0cnVjdCBza19idWZmX2hlYWQJcTsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpYyBic3RhdHM7CisJc3RydWN0IGduZXRfc3RhdHNfcXVldWUJcXN0YXRzOwogfTsKIAogc3RydWN0IFFkaXNjX2NsYXNzX29wcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9jaGVja3N1bS5oIGIvaW5jbHVkZS9uZXQvc2N0cC9jaGVja3N1bS5oCmluZGV4IDJmZWMzYzMuLmJlZmM4ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL2NoZWNrc3VtLmgKQEAgLTQ2LDE0ICs0NiwxNCBAQAogI2luY2x1ZGUgPG5ldC9zY3RwL3NjdHAuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMmMuaD4KIAotc3RhdGljIGlubGluZSBfX2JlMzIgc2N0cF9jcmMzMmMoX19iZTMyIGNyYywgdTggKmJ1ZmZlciwgdTE2IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgX191MzIgc2N0cF9jcmMzMmMoX191MzIgY3JjLCB1OCAqYnVmZmVyLCB1MTYgbGVuZ3RoKQogewotCXJldHVybiAoX19mb3JjZSBfX2JlMzIpY3JjMzJjKChfX2ZvcmNlIHUzMiljcmMsIGJ1ZmZlciwgbGVuZ3RoKTsKKwlyZXR1cm4gY3JjMzJjKGNyYywgYnVmZmVyLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW5saW5lIF9fYmUzMiBzY3RwX3N0YXJ0X2Nrc3VtKF9fdTggKmJ1ZmZlciwgX191MTYgbGVuZ3RoKQorc3RhdGljIGlubGluZSBfX3UzMiBzY3RwX3N0YXJ0X2Nrc3VtKF9fdTggKmJ1ZmZlciwgX191MTYgbGVuZ3RoKQogewotCV9fYmUzMiBjcmMgPSB+Y3B1X3RvX2JlMzIoMCk7CisJX191MzIgY3JjID0gfihfX3UzMikwOwogCV9fdTggIHplcm9bc2l6ZW9mKF9fdTMyKV0gPSB7MH07CiAKIAkvKiBPcHRpbWl6ZSB0aGlzIHJvdXRpbmUgdG8gYmUgU0NUUCBzcGVjaWZpYywga25vd2luZyBob3cKQEAgLTcyLDEyICs3MiwxMiBAQAogCXJldHVybiBjcmM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTMyIHNjdHBfdXBkYXRlX2Nrc3VtKF9fdTggKmJ1ZmZlciwgX191MTYgbGVuZ3RoLCBfX2JlMzIgY3JjMzIpCitzdGF0aWMgaW5saW5lIF9fdTMyIHNjdHBfdXBkYXRlX2Nrc3VtKF9fdTggKmJ1ZmZlciwgX191MTYgbGVuZ3RoLCBfX3UzMiBjcmMzMikKIHsKIAlyZXR1cm4gc2N0cF9jcmMzMmMoY3JjMzIsIGJ1ZmZlciwgbGVuZ3RoKTsKIH0KIAotc3RhdGljIGlubGluZSBfX2JlMzIgc2N0cF9lbmRfY2tzdW0oX19iZTMyIGNyYzMyKQorc3RhdGljIGlubGluZSBfX2xlMzIgc2N0cF9lbmRfY2tzdW0oX19iZTMyIGNyYzMyKQogewotCXJldHVybiAoX19mb3JjZSBfX2JlMzIpfmNwdV90b19sZTMyKChfX2ZvcmNlIHUzMiljcmMzMik7CisJcmV0dXJuIGNwdV90b19sZTMyKH5jcmMzMik7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2NvbW1hbmQuaCBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCmluZGV4IDg4OTg4YWIuLjNiOTY2ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY29tbWFuZC5oCkBAIC03Nyw3ICs3Nyw4IEBACiAJU0NUUF9DTURfSEJfVElNRVJTX1NUQVJULCAgICAvKiBTdGFydCB0aGUgaGVhcnRiZWF0IHRpbWVycy4gKi8KIAlTQ1RQX0NNRF9IQl9USU1FUl9VUERBVEUsICAgIC8qIFVwZGF0ZSBhIGhlYXJ0YmVhdCB0aW1lcnMuICAqLwogCVNDVFBfQ01EX0hCX1RJTUVSU19TVE9QLCAgICAgLyogU3RvcCB0aGUgaGVhcnRiZWF0IHRpbWVycy4gICovCi0JU0NUUF9DTURfVFJBTlNQT1JUX1JFU0VULCAgICAvKiBSZXNldCB0aGUgc3RhdHVzIG9mIGEgdHJhbnNwb3J0LiAqLworCVNDVFBfQ01EX1RSQU5TUE9SVF9IQl9TRU5ULCAgLyogUmVzZXQgdGhlIHN0YXR1cyBvZiBhIHRyYW5zcG9ydC4gKi8KKwlTQ1RQX0NNRF9UUkFOU1BPUlRfSURMRSwgICAgIC8qIERvIG1hbmlwdWxhdGlvbnMgb24gaWRsZSB0cmFuc3BvcnQgKi8KIAlTQ1RQX0NNRF9UUkFOU1BPUlRfT04sICAgICAgIC8qIE1hcmsgdGhlIHRyYW5zcG9ydCBhcyBhY3RpdmUuICovCiAJU0NUUF9DTURfUkVQT1JUX0VSUk9SLCAgIC8qIFBhc3MgdGhpcyBlcnJvciBiYWNrIG91dCBvZiB0aGUgc20uICovCiAJU0NUUF9DTURfUkVQT1JUX0JBRF9UQUcsIC8qIFZlcmlmaWNhdGlvbiB0YWdzIGRpZG4ndCBtYXRjaC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKaW5kZXggYmJiNzc0Mi4uOWY4MGE3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKQEAgLTYyLDEzICs2Miw2IEBACiAgKiAgIGFuZCB3aWxsIGNvbnRpbnVlIHRvIGV2b2x2ZS4KICAqLwogCi0KLQotI2lmZGVmIFRFU1RfRlJBTUUKLSN1bmRlZiBDT05GSUdfU0NUUF9EQkdfT0JKQ05UCi0jdW5kZWYgQ09ORklHX1NZU0NUTAotI2VuZGlmIC8qIFRFU1RfRlJBTUUgKi8KLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CkBAIC0xMzgsNiArMTMxLDggQEAKIHVuc2lnbmVkIGludCBzY3RwX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCXBvbGxfdGFibGUgKndhaXQpOwogdm9pZCBzY3RwX3NvY2tfcmZyZWUoc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIHNjdHBfY29weV9zb2NrKHN0cnVjdCBzb2NrICpuZXdzaywgc3RydWN0IHNvY2sgKnNrLAorCQkgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwogZXh0ZXJuIHN0cnVjdCBwZXJjcHVfY291bnRlciBzY3RwX3NvY2tldHNfYWxsb2NhdGVkOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCA5NjYxZDdiLi4yM2YwOGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtMjE4LDYgKzIxOCwxMCBAQAogCiAJLyogRmxhZyB0byBpZGljYXRlIGlmIFNDVFAtQVVUSCBpcyBlbmFibGVkICovCiAJaW50IGF1dGhfZW5hYmxlOworCisJLyogRmxhZyB0byBpbmRpY2F0ZSB3aGV0aGVyIGNvbXB1dGluZyBhbmQgdmVyaWZ5aW5nIGNoZWNrc3VtCisJICogaXMgZGlzYWJsZWQuICovCisgICAgICAgIGludCBjaGVja3N1bV9kaXNhYmxlOwogfSBzY3RwX2dsb2JhbHM7CiAKICNkZWZpbmUgc2N0cF9ydG9faW5pdGlhbAkJKHNjdHBfZ2xvYmFscy5ydG9faW5pdGlhbCkKQEAgLTI1Miw2ICsyNTYsNyBAQAogI2RlZmluZSBzY3RwX2FkZGlwX25vYXV0aAkJKHNjdHBfZ2xvYmFscy5hZGRpcF9ub2F1dGhfZW5hYmxlKQogI2RlZmluZSBzY3RwX3Byc2N0cF9lbmFibGUJCShzY3RwX2dsb2JhbHMucHJzY3RwX2VuYWJsZSkKICNkZWZpbmUgc2N0cF9hdXRoX2VuYWJsZQkJKHNjdHBfZ2xvYmFscy5hdXRoX2VuYWJsZSkKKyNkZWZpbmUgc2N0cF9jaGVja3N1bV9kaXNhYmxlCQkoc2N0cF9nbG9iYWxzLmNoZWNrc3VtX2Rpc2FibGUpCiAKIC8qIFNDVFAgU29ja2V0IHR5cGU6IFVEUCBvciBUQ1Agc3R5bGUuICovCiB0eXBlZGVmIGVudW0gewpAQCAtOTA1LDggKzkxMCwxMCBAQAogCSAqCQlzaG91bGQgYmUgc2V0LiBFdmVyeSB0aW1lIHRoZSBSVFQKIAkgKgkJY2FsY3VsYXRpb24gY29tcGxldGVzIChpLmUuIHRoZSBEQVRBIGNodW5rCiAJICoJCWlzIFNBQ0snZCkgY2xlYXIgdGhpcyBmbGFnLgorCSAqIGhiX3NlbnQgOiBhIGZsYWcgdGhhdCBzaWduYWxzIHRoYXQgd2UgaGF2ZSBhIHBlbmRpbmcgaGVhcnRiZWF0LgogCSAqLwogCV9fdTggcnRvX3BlbmRpbmc7CisJX191OCBoYl9zZW50OwogCiAJLyogRmxhZyB0byB0cmFjayB0aGUgY3VycmVudCBmYXN0IHJlY292ZXJ5IHN0YXRlICovCiAJX191OCBmYXN0X3JlY292ZXJ5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IGVlZmVlYWYuLjRiYjFmZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTE1OCw3ICsxNTgsNyBAQAogICAqCUBza19hbGxvY2F0aW9uOiBhbGxvY2F0aW9uIG1vZGUKICAgKglAc2tfc25kYnVmOiBzaXplIG9mIHNlbmQgYnVmZmVyIGluIGJ5dGVzCiAgICoJQHNrX2ZsYWdzOiAlU09fTElOR0VSIChsX29ub2ZmKSwgJVNPX0JST0FEQ0FTVCwgJVNPX0tFRVBBTElWRSwKLSAgKgkJICAgJVNPX09PQklOTElORSBzZXR0aW5ncworICAqCQkgICAlU09fT09CSU5MSU5FIHNldHRpbmdzLCAlU09fVElNRVNUQU1QSU5HIHNldHRpbmdzCiAgICoJQHNrX25vX2NoZWNrOiAlU09fTk9fQ0hFQ0sgc2V0dGluZywgd2V0aGVyIG9yIG5vdCBjaGVja3VwIHBhY2tldHMKICAgKglAc2tfcm91dGVfY2Fwczogcm91dGUgY2FwYWJpbGl0aWVzIChlLmcuICVORVRJRl9GX1RTTykKICAgKglAc2tfZ3NvX3R5cGU6IEdTTyB0eXBlIChlLmcuICVTS0JfR1NPX1RDUFY0KQpAQCAtNDg4LDYgKzQ4OCwxMyBAQAogCVNPQ0tfUkNWVFNUQU1QTlMsIC8qICVTT19USU1FU1RBTVBOUyBzZXR0aW5nICovCiAJU09DS19MT0NBTFJPVVRFLCAvKiByb3V0ZSBsb2NhbGx5IG9ubHksICVTT19ET05UUk9VVEUgc2V0dGluZyAqLwogCVNPQ0tfUVVFVUVfU0hSVU5LLCAvKiB3cml0ZSBxdWV1ZSBoYXMgYmVlbiBzaHJ1bmsgcmVjZW50bHkgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSwgIC8qICVTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFICovCisJU09DS19USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUsICAvKiAlU09GX1RJTUVTVEFNUElOR19UWF9TT0ZUV0FSRSAqLworCVNPQ0tfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFLCAgLyogJVNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkUgKi8KKwlTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSwgIC8qICVTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFICovCisJU09DS19USU1FU1RBTVBJTkdfU09GVFdBUkUsICAgICAvKiAlU09GX1RJTUVTVEFNUElOR19TT0ZUV0FSRSAqLworCVNPQ0tfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSwgLyogJVNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFICovCisJU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFLCAvKiAlU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX2NvcHlfZmxhZ3Moc3RydWN0IHNvY2sgKm5zaywgc3RydWN0IHNvY2sgKm9zaykKQEAgLTk0NCw2ICs5NTEsMTEgQEAKIAkJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCQkJICAgICBpbnQgbm9ibG9jaywKIAkJCQkJCSAgICAgaW50ICplcnJjb2RlKTsKK2V4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAJCSpzb2NrX2FsbG9jX3NlbmRfcHNrYihzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGhlYWRlcl9sZW4sCisJCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGRhdGFfbGVuLAorCQkJCQkJICAgICAgaW50IG5vYmxvY2ssCisJCQkJCQkgICAgICBpbnQgKmVycmNvZGUpOwogZXh0ZXJuIHZvaWQgKnNvY2tfa21hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBzaXplLAogCQkJICBnZnBfdCBwcmlvcml0eSk7CiBleHRlcm4gdm9pZCBzb2NrX2tmcmVlX3Moc3RydWN0IHNvY2sgKnNrLCB2b2lkICptZW0sIGludCBzaXplKTsKQEAgLTEzNDAsMTQgKzEzNTIsNDUgQEAKIHNvY2tfcmVjdl90aW1lc3RhbXAoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJa3RpbWVfdCBrdCA9IHNrYi0+dHN0YW1wOworCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHd0c3RhbXBzID0gc2tiX2h3dHN0YW1wcyhza2IpOwogCi0JaWYgKHNvY2tfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVApKQorCS8qCisJICogZ2VuZXJhdGUgY29udHJvbCBtZXNzYWdlcyBpZgorCSAqIC0gcmVjZWl2ZSB0aW1lIHN0YW1waW5nIGluIHNvZnR3YXJlIHJlcXVlc3RlZCAoU09DS19SQ1ZUU1RBTVAKKwkgKiAgIG9yIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKQorCSAqIC0gc29mdHdhcmUgdGltZSBzdGFtcCBhdmFpbGFibGUgYW5kIHdhbnRlZAorCSAqICAgKFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFKQorCSAqIC0gaGFyZHdhcmUgdGltZSBzdGFtcHMgYXZhaWxhYmxlIGFuZCB3YW50ZWQKKwkgKiAgIChTT0NLX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUgb3IKKwkgKiAgIFNPQ0tfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSkKKwkgKi8KKwlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCkgfHwKKwkgICAgc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSkgfHwKKwkgICAgKGt0LnR2NjQgJiYgc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TT0ZUV0FSRSkpIHx8CisJICAgIChod3RzdGFtcHMtPmh3dHN0YW1wLnR2NjQgJiYKKwkgICAgIHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKSkgfHwKKwkgICAgKGh3dHN0YW1wcy0+c3lzdHN0YW1wLnR2NjQgJiYKKwkgICAgIHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFKSkpCiAJCV9fc29ja19yZWN2X3RpbWVzdGFtcChtc2csIHNrLCBza2IpOwogCWVsc2UKIAkJc2stPnNrX3N0YW1wID0ga3Q7CiB9CiAKIC8qKgorICogc29ja190eF90aW1lc3RhbXAgLSBjaGVja3Mgd2hldGhlciB0aGUgb3V0Z29pbmcgcGFja2V0IGlzIHRvIGJlIHRpbWUgc3RhbXBlZAorICogQG1zZzoJb3V0Z29pbmcgcGFja2V0CisgKiBAc2s6CQlzb2NrZXQgc2VuZGluZyB0aGlzIHBhY2tldAorICogQHNodHg6CWZpbGxlZCB3aXRoIGluc3RydWN0aW9ucyBmb3IgdGltZSBzdGFtcGluZworICoKKyAqIEN1cnJlbnRseSBvbmx5IGRlcGVuZHMgb24gU09DS19USU1FU1RBTVBJTkcqIGZsYWdzLiBSZXR1cm5zIGVycm9yIGNvZGUgaWYKKyAqIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgKi8KK2V4dGVybiBpbnQgc29ja190eF90aW1lc3RhbXAoc3RydWN0IG1zZ2hkciAqbXNnLAorCQkJICAgICBzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICAgIHVuaW9uIHNrYl9zaGFyZWRfdHggKnNodHgpOworCisKKy8qKgogICogc2tfZWF0X3NrYiAtIFJlbGVhc2UgYSBza2IgaWYgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZAogICogQHNrOiBzb2NrZXQgdG8gZWF0IHRoaXMgc2tiIGZyb20KICAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gZWF0CkBAIC0xNDE1LDcgKzE0NTgsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1leHRlcm4gdm9pZCBzb2NrX2VuYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKTsKIGV4dGVybiBpbnQgc29ja19nZXRfdGltZXN0YW1wKHN0cnVjdCBzb2NrICosIHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqKTsKIGV4dGVybiBpbnQgc29ja19nZXRfdGltZXN0YW1wbnMoc3RydWN0IHNvY2sgKiwgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCAyMTgyMzVkLi5lNTRjNzZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtNDgxLDcgKzQ4MSwxNiBAQAogfQogCiBleHRlcm4gdW5zaWduZWQgaW50IHRjcF9zeW5jX21zcyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwbXR1KTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IGxhcmdlKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzayk7CisKKy8qIEJvdW5kIE1TUyAvIFRTTyBwYWNrZXQgc2l6ZSB3aXRoIHRoZSBoYWxmIG9mIHRoZSB3aW5kb3cgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRjcF9ib3VuZF90b19oYWxmX3duZChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgcGt0c2l6ZSkKK3sKKwlpZiAodHAtPm1heF93aW5kb3cgJiYgcGt0c2l6ZSA+ICh0cC0+bWF4X3dpbmRvdyA+PiAxKSkKKwkJcmV0dXJuIG1heCh0cC0+bWF4X3dpbmRvdyA+PiAxLCA2OFUgLSB0cC0+dGNwX2hlYWRlcl9sZW4pOworCWVsc2UKKwkJcmV0dXJuIHBrdHNpemU7Cit9CiAKIC8qIHRjcC5jICovCiBleHRlcm4gdm9pZCB0Y3BfZ2V0X2luZm8oc3RydWN0IHNvY2sgKiwgc3RydWN0IHRjcF9pbmZvICopOwpAQCAtNjg1LDYgKzY5NCw3IEBACiBleHRlcm4gaW50IHRjcF9zZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYWxsb3dlZCk7CiBleHRlcm4gaW50IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwKTsKK2V4dGVybiB2b2lkIHRjcF9jb25nX2F2b2lkX2FpKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiB3KTsKIAogZXh0ZXJuIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX2luaXRfY29uZ2VzdGlvbl9vcHM7CiBleHRlcm4gdTMyIHRjcF9yZW5vX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzayk7CkBAIC04MjEsMTUgKzgzMSwxNSBAQAogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCi0JX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgdGNwX2N1cnJlbnRfbXNzKHNrLCAxKSwgdHAtPm5vbmFnbGUpOworCV9fdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIHRjcF9jdXJyZW50X21zcyhzayksIHRwLT5ub25hZ2xlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9pbml0X3dsKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBhY2ssIHUzMiBzZXEpCitzdGF0aWMgaW5saW5lIHZvaWQgdGNwX2luaXRfd2woc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHNlcSkKIHsKIAl0cC0+c25kX3dsMSA9IHNlcTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF91cGRhdGVfd2woc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIGFjaywgdTMyIHNlcSkKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfdXBkYXRlX3dsKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBzZXEpCiB7CiAJdHAtPnNuZF93bDEgPSBzZXE7CiB9CkBAIC05MjUsNyArOTM1LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3Bfc2Fja19yZXNldChzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnJ4X29wdCkKIHsKIAlyeF9vcHQtPmRzYWNrID0gMDsKLQlyeF9vcHQtPmVmZl9zYWNrcyA9IDA7CiAJcnhfb3B0LT5udW1fc2Fja3MgPSAwOwogfQogCkBAIC05OTcsMTEgKzEwMDYsMjEgQEAKIAlyZXR1cm4gZmluX3RpbWVvdXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHRjcF9wYXdzX2NoZWNrKGNvbnN0IHN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCAqcnhfb3B0LCBpbnQgcnN0KQorc3RhdGljIGlubGluZSBpbnQgdGNwX3Bhd3NfY2hlY2soY29uc3Qgc3RydWN0IHRjcF9vcHRpb25zX3JlY2VpdmVkICpyeF9vcHQsCisJCQkJIGludCBwYXdzX3dpbikKIHsKLQlpZiAoKHMzMikocnhfb3B0LT5yY3ZfdHN2YWwgLSByeF9vcHQtPnRzX3JlY2VudCkgPj0gMCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGdldF9zZWNvbmRzKCkgPj0gcnhfb3B0LT50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMpCisJaWYgKChzMzIpKHJ4X29wdC0+dHNfcmVjZW50IC0gcnhfb3B0LT5yY3ZfdHN2YWwpIDw9IHBhd3Nfd2luKQorCQlyZXR1cm4gMTsKKwlpZiAodW5saWtlbHkoZ2V0X3NlY29uZHMoKSA+PSByeF9vcHQtPnRzX3JlY2VudF9zdGFtcCArIFRDUF9QQVdTXzI0REFZUykpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHRjcF9wYXdzX3JlamVjdChjb25zdCBzdHJ1Y3QgdGNwX29wdGlvbnNfcmVjZWl2ZWQgKnJ4X29wdCwKKwkJCQkgIGludCByc3QpCit7CisJaWYgKHRjcF9wYXdzX2NoZWNrKHJ4X29wdCwgMCkpCiAJCXJldHVybiAwOwogCiAJLyogUlNUIHNlZ21lbnRzIGFyZSBub3QgcmVjb21tZW5kZWQgdG8gY2FycnkgdGltZXN0YW1wLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdHJhbnNwX3Y2LmggYi9pbmNsdWRlL25ldC90cmFuc3BfdjYuaAppbmRleCA4NzZiNmYyLi5iZmIyNDBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90cmFuc3BfdjYuaAorKysgYi9pbmNsdWRlL25ldC90cmFuc3BfdjYuaApAQCAtNDYsNyArNDYsNyBAQAogCQkJCQkJICBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCwKIAkJCQkJCSAgaW50ICpobGltaXQsIGludCAqdGNsYXNzKTsKIAotI2RlZmluZQkJTE9PUEJBQ0s0X0lQVjYJCV9fY29uc3RhbnRfaHRvbmwoMHg3ZjAwMDAwNikKKyNkZWZpbmUJCUxPT1BCQUNLNF9JUFY2CQljcHVfdG9fYmUzMigweDdmMDAwMDA2KQogCiAvKgogICoJYWRkcmVzcyBmYW1pbHkgc3BlY2lmaWMgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC91ZHAuaCBiL2luY2x1ZGUvbmV0L3VkcC5oCmluZGV4IDkwZTZjZTUuLjkzZGJlMjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3VkcC5oCisrKyBiL2luY2x1ZGUvbmV0L3VkcC5oCkBAIC0xMjQsNiArMTI0LDggQEAKIAlza19jb21tb25fcmVsZWFzZShzayk7CiB9CiAKK2V4dGVybiBpbnQJaXB2NF9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrMSwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrMik7CiBleHRlcm4gaW50CXVkcF9saWJfZ2V0X3BvcnQoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBzaG9ydCBzbnVtLAogCQlpbnQgKCopKGNvbnN0IHN0cnVjdCBzb2NrKixjb25zdCBzdHJ1Y3Qgc29jayopKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvd2lyZWxlc3MuaCBiL2luY2x1ZGUvbmV0L3dpcmVsZXNzLmgKaW5kZXggMjFjNWQ5Ni4uNjRhNzYyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvd2lyZWxlc3MuaAorKysgYi9pbmNsdWRlL25ldC93aXJlbGVzcy5oCkBAIC02OSw2ICs2OSw5IEBACiAgKiBAYmFuZDogYmFuZCB0aGlzIGNoYW5uZWwgYmVsb25ncyB0by4KICAqIEBtYXhfYW50ZW5uYV9nYWluOiBtYXhpbXVtIGFudGVubmEgZ2FpbiBpbiBkQmkKICAqIEBtYXhfcG93ZXI6IG1heGltdW0gdHJhbnNtaXNzaW9uIHBvd2VyIChpbiBkQm0pCisgKiBAYmVhY29uX2ZvdW5kOiBoZWxwZXIgdG8gcmVndWxhdG9yeSBjb2RlIHRvIGluZGljYXRlIHdoZW4gYSBiZWFjb24KKyAqCWhhcyBiZWVuIGZvdW5kIG9uIHRoaXMgY2hhbm5lbC4gVXNlIHJlZ3VsYXRvcnlfaGludF9mb3VuZF9iZWFjb24oKQorICoJdG8gZW5hYmxlIHRoaXMsIHRoaXMgaXMgaXMgdXNlZnVsIG9ubHkgb24gNSBHSHogYmFuZC4KICAqIEBvcmlnX21hZzogaW50ZXJuYWwgdXNlCiAgKiBAb3JpZ19tcHdyOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtODAsNiArODMsNyBAQAogCXUzMiBmbGFnczsKIAlpbnQgbWF4X2FudGVubmFfZ2FpbjsKIAlpbnQgbWF4X3Bvd2VyOworCWJvb2wgYmVhY29uX2ZvdW5kOwogCXUzMiBvcmlnX2ZsYWdzOwogCWludCBvcmlnX21hZywgb3JpZ19tcHdyOwogfTsKQEAgLTE4MSwxMiArMTg1LDI2IEBACiAgKiBzdHJ1Y3Qgd2lwaHkgLSB3aXJlbGVzcyBoYXJkd2FyZSBkZXNjcmlwdGlvbgogICogQGlkeDogdGhlIHdpcGh5IGluZGV4IGFzc2lnbmVkIHRvIHRoaXMgaXRlbQogICogQGNsYXNzX2RldjogdGhlIGNsYXNzIGRldmljZSByZXByZXNlbnRpbmcgL3N5cy9jbGFzcy9pZWVlODAyMTEvPHdpcGh5LW5hbWU+Ci0gKiBAZndfaGFuZGxlc19yZWd1bGF0b3J5OiB0ZWxscyB1cyB0aGUgZmlybXdhcmUgZm9yIHRoaXMgZGV2aWNlCi0gKiAJaGFzIGl0cyBvd24gcmVndWxhdG9yeSBzb2x1dGlvbiBhbmQgY2Fubm90IGlkZW50aWZ5IHRoZQorICogQGN1c3RvbV9yZWd1bGF0b3J5OiB0ZWxscyB1cyB0aGUgZHJpdmVyIGZvciB0aGlzIGRldmljZQorICogCWhhcyBpdHMgb3duIGN1c3RvbSByZWd1bGF0b3J5IGRvbWFpbiBhbmQgY2Fubm90IGlkZW50aWZ5IHRoZQogICogCUlTTyAvIElFQyAzMTY2IGFscGhhMiBpdCBiZWxvbmdzIHRvLiBXaGVuIHRoaXMgaXMgZW5hYmxlZAogICogCXdlIHdpbGwgZGlzcmVnYXJkIHRoZSBmaXJzdCByZWd1bGF0b3J5IGhpbnQgKHdoZW4gdGhlCiAgKiAJaW5pdGlhdG9yIGlzICVSRUdET01fU0VUX0JZX0NPUkUpLgorICogQHN0cmljdF9yZWd1bGF0b3J5OiB0ZWxscyB1cyB0aGUgZHJpdmVyIGZvciB0aGlzIGRldmljZSB3aWxsIGlnbm9yZQorICogCXJlZ3VsYXRvcnkgZG9tYWluIHNldHRpbmdzIHVudGlsIGl0IGdldHMgaXRzIG93biByZWd1bGF0b3J5IGRvbWFpbgorICogCXZpYSBpdHMgcmVndWxhdG9yeV9oaW50KCkuIEFmdGVyIGl0cyBnZXRzIGl0cyBvd24gcmVndWxhdG9yeSBkb21haW4KKyAqIAlpdCB3aWxsIG9ubHkgYWxsb3cgZnVydGhlciByZWd1bGF0b3J5IGRvbWFpbiBzZXR0aW5ncyB0byBmdXJ0aGVyCisgKiAJZW5oYW5jZSBjb21wbGlhbmNlLiBGb3IgZXhhbXBsZSBpZiBjaGFubmVsIDEzIGFuZCAxNCBhcmUgZGlzYWJsZWQKKyAqIAlieSB0aGlzIHJlZ3VsYXRvcnkgZG9tYWluIG5vIHVzZXIgcmVndWxhdG9yeSBkb21haW4gY2FuIGVuYWJsZSB0aGVzZQorICogCWNoYW5uZWxzIGF0IGEgbGF0ZXIgdGltZS4gVGhpcyBjYW4gYmUgdXNlZCBmb3IgZGV2aWNlcyB3aGljaCBkbyBub3QKKyAqIAloYXZlIGNhbGlicmF0aW9uIGluZm9ybWF0aW9uIGdhdXJhbnRlZWQgZm9yIGZyZXF1ZW5jaWVzIG9yIHNldHRpbmdzCisgKiAJb3V0c2lkZSBvZiBpdHMgcmVndWxhdG9yeSBkb21haW4uCiAgKiBAcmVnX25vdGlmaWVyOiB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBub3RpZmljYXRpb24gY2FsbGJhY2sKKyAqIEByZWdkOiB0aGUgZHJpdmVyJ3MgcmVndWxhdG9yeSBkb21haW4sIGlmIG9uZSB3YXMgcmVxdWVzdGVkIHZpYQorICogCXRoZSByZWd1bGF0b3J5X2hpbnQoKSBBUEkuIFRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIGRyaXZlcgorICoJb24gdGhlIHJlZ19ub3RpZmllcigpIGlmIGl0IGNob29zZXMgdG8gaWdub3JlIGZ1dHVyZQorICoJcmVndWxhdG9yeSBkb21haW4gY2hhbmdlcyBjYXVzZWQgYnkgb3RoZXIgZHJpdmVycy4KKyAqIEBzaWduYWxfdHlwZTogc2lnbmFsIHR5cGUgcmVwb3J0ZWQgaW4gJnN0cnVjdCBjZmc4MDIxMV9ic3MuCiAgKi8KIHN0cnVjdCB3aXBoeSB7CiAJLyogYXNzaWduIHRoZXNlIGZpZWxkcyBiZWZvcmUgeW91IHJlZ2lzdGVyIHRoZSB3aXBoeSAqLwpAQCAtMTk3LDcgKzIxNSwxMyBAQAogCS8qIFN1cHBvcnRlZCBpbnRlcmZhY2UgbW9kZXMsIE9SIHRvZ2V0aGVyIEJJVChOTDgwMjExX0lGVFlQRV8uLi4pICovCiAJdTE2IGludGVyZmFjZV9tb2RlczsKIAotCWJvb2wgZndfaGFuZGxlc19yZWd1bGF0b3J5OworCWJvb2wgY3VzdG9tX3JlZ3VsYXRvcnk7CisJYm9vbCBzdHJpY3RfcmVndWxhdG9yeTsKKworCWVudW0gY2ZnODAyMTFfc2lnbmFsX3R5cGUgc2lnbmFsX3R5cGU7CisKKwlpbnQgYnNzX3ByaXZfc2l6ZTsKKwl1OCBtYXhfc2Nhbl9zc2lkczsKIAogCS8qIElmIG11bHRpcGxlIHdpcGh5cyBhcmUgcmVnaXN0ZXJlZCBhbmQgeW91J3JlIGhhbmRlZCBlLmcuCiAJICogYSByZWd1bGFyIG5ldGRldiB3aXRoIGFzc2lnbmVkIGllZWU4MDIxMV9wdHIsIHlvdSB3b24ndApAQCAtMjA5LDEwICsyMzMsMTMgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kc1tJRUVFODAyMTFfTlVNX0JBTkRTXTsKIAogCS8qIExldHMgdXMgZ2V0IGJhY2sgdGhlIHdpcGh5IG9uIHRoZSBjYWxsYmFjayAqLwotCWludCAoKnJlZ19ub3RpZmllcikoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldGJ5KTsKKwlpbnQgKCpyZWdfbm90aWZpZXIpKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCk7CiAKIAkvKiBmaWVsZHMgYmVsb3cgYXJlIHJlYWQtb25seSwgYXNzaWduZWQgYnkgY2ZnODAyMTEgKi8KIAorCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOworCiAJLyogdGhlIGl0ZW0gaW4gL3N5cy9jbGFzcy9pZWVlODAyMTEvIHBvaW50cyB0byB0aGlzLAogCSAqIHlvdSBuZWVkIHVzZSBzZXRfd2lwaHlfZGV2KCkgKHNlZSBiZWxvdykgKi8KIAlzdHJ1Y3QgZGV2aWNlIGRldjsKQEAgLTM2MSw3ICszODgsNyBAQAogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKgogaWVlZTgwMjExX2dldF9yZXNwb25zZV9yYXRlKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAotCQkJICAgIHU2NCBiYXNpY19yYXRlcywgaW50IGJpdHJhdGUpOworCQkJICAgIHUzMiBiYXNpY19yYXRlcywgaW50IGJpdHJhdGUpOwogCiAvKioKICAqIHJlZ3VsYXRvcnlfaGludCAtIGRyaXZlciBoaW50IHRvIHRoZSB3aXJlbGVzcyBjb3JlIGEgcmVndWxhdG9yeSBkb21haW4KQEAgLTM3OCw4ICs0MDUsMTUgQEAKICAqIGRvbWFpbiBzaG91bGQgYmUgaW4gb3IgYnkgcHJvdmlkaW5nIGEgY29tcGxldGVseSBidWlsZCByZWd1bGF0b3J5IGRvbWFpbi4KICAqIElmIHRoZSBkcml2ZXIgcHJvdmlkZXMgYW4gSVNPL0lFQyAzMTY2IGFscGhhMiB1c2Vyc3BhY2Ugd2lsbCBiZSBxdWVyaWVkCiAgKiBmb3IgYSByZWd1bGF0b3J5IGRvbWFpbiBzdHJ1Y3R1cmUgZm9yIHRoZSByZXNwZWN0aXZlIGNvdW50cnkuCisgKgorICogVGhlIHdpcGh5IG11c3QgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQgdG8gY2ZnODAyMTEgcHJpb3IgdG8gdGhpcyBjYWxsLgorICogRm9yIGNmZzgwMjExIGRyaXZlcnMgdGhpcyBtZWFucyB5b3UgbXVzdCBmaXJzdCB1c2Ugd2lwaHlfcmVnaXN0ZXIoKSwKKyAqIGZvciBtYWM4MDIxMSBkcml2ZXJzIHlvdSBtdXN0IGZpcnN0IHVzZSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoKS4KKyAqCisgKiBEcml2ZXJzIHNob3VsZCBjaGVjayB0aGUgcmV0dXJuIHZhbHVlLCBpdHMgcG9zc2libGUgeW91IGNhbiBnZXQKKyAqIGFuIC1FTk9NRU0uCiAgKi8KLWV4dGVybiB2b2lkIHJlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjb25zdCBjaGFyICphbHBoYTIpOworZXh0ZXJuIGludCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKTsKIAogLyoqCiAgKiByZWd1bGF0b3J5X2hpbnRfMTFkIC0gaGludHMgYSBjb3VudHJ5IElFIGFzIGEgcmVndWxhdG9yeSBkb21haW4KQEAgLTM5NSw0ICs0MjksNDQgQEAKIGV4dGVybiB2b2lkIHJlZ3VsYXRvcnlfaGludF8xMWQoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQl1OCAqY291bnRyeV9pZSwKIAkJCQl1OCBjb3VudHJ5X2llX2xlbik7CisvKioKKyAqIHdpcGh5X2FwcGx5X2N1c3RvbV9yZWd1bGF0b3J5IC0gYXBwbHkgYSBjdXN0b20gZHJpdmVyIHJlZ3VsYXRvcnkgZG9tYWluCisgKiBAd2lwaHk6IHRoZSB3aXJlbGVzcyBkZXZpY2Ugd2Ugd2FudCB0byBwcm9jZXNzIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBvbgorICogQHJlZ2Q6IHRoZSBjdXN0b20gcmVndWxhdG9yeSBkb21haW4gdG8gdXNlIGZvciB0aGlzIHdpcGh5CisgKgorICogRHJpdmVycyBjYW4gc29tZXRpbWVzIGhhdmUgY3VzdG9tIHJlZ3VsYXRvcnkgZG9tYWlucyB3aGljaCBkbyBub3QgYXBwbHkKKyAqIHRvIGEgc3BlY2lmaWMgY291bnRyeS4gRHJpdmVycyBjYW4gdXNlIHRoaXMgdG8gYXBwbHkgc3VjaCBjdXN0b20gcmVndWxhdG9yeQorICogZG9tYWlucy4gVGhpcyByb3V0aW5lIG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIHdpcGh5IHJlZ2lzdHJhdGlvbi4gVGhlCisgKiBjdXN0b20gcmVndWxhdG9yeSBkb21haW4gd2lsbCBiZSB0cnVzdGVkIGNvbXBsZXRlbHkgYW5kIGFzIHN1Y2ggcHJldmlvdXMKKyAqIGRlZmF1bHQgY2hhbm5lbCBzZXR0aW5ncyB3aWxsIGJlIGRpc3JlZ2FyZGVkLiBJZiBubyBydWxlIGlzIGZvdW5kIGZvciBhCisgKiBjaGFubmVsIG9uIHRoZSByZWd1bGF0b3J5IGRvbWFpbiB0aGUgY2hhbm5lbCB3aWxsIGJlIGRpc2FibGVkLgorICovCitleHRlcm4gdm9pZCB3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSgKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkKTsKKworLyoqCisgKiBmcmVxX3JlZ19pbmZvIC0gZ2V0IHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gZm9yIHRoZSBnaXZlbiBmcmVxdWVuY3kKKyAqIEB3aXBoeTogdGhlIHdpcGh5IGZvciB3aGljaCB3ZSB3YW50IHRvIHByb2Nlc3MgdGhpcyBydWxlIGZvcgorICogQGNlbnRlcl9mcmVxOiBGcmVxdWVuY3kgaW4gS0h6IGZvciB3aGljaCB3ZSB3YW50IHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gZm9yCisgKiBAYmFuZHdpZHRoOiB0aGUgYmFuZHdpZHRoIHJlcXVpcmVtZW50IHlvdSBoYXZlIGluIEtIeiwgaWYgeW91IGRvIG5vdCBoYXZlIG9uZQorICogCXlvdSBjYW4gc2V0IHRoaXMgdG8gMC4gSWYgdGhpcyBmcmVxdWVuY3kgaXMgYWxsb3dlZCB3ZSB0aGVuIHNldAorICogCXRoaXMgdmFsdWUgdG8gdGhlIG1heGltdW0gYWxsb3dlZCBiYW5kd2lkdGguCisgKiBAcmVnX3J1bGU6IHRoZSByZWd1bGF0b3J5IHJ1bGUgd2hpY2ggd2UgaGF2ZSBmb3IgdGhpcyBmcmVxdWVuY3kKKyAqCisgKiBVc2UgdGhpcyBmdW5jdGlvbiB0byBnZXQgdGhlIHJlZ3VsYXRvcnkgcnVsZSBmb3IgYSBzcGVjaWZpYyBmcmVxdWVuY3kgb24KKyAqIGEgZ2l2ZW4gd2lyZWxlc3MgZGV2aWNlLiBJZiB0aGUgZGV2aWNlIGhhcyBhIHNwZWNpZmljIHJlZ3VsYXRvcnkgZG9tYWluCisgKiBpdCB3YW50cyB0byBmb2xsb3cgd2UgcmVzcGVjdCB0aGF0IHVubGVzcyBhIGNvdW50cnkgSUUgaGFzIGJlZW4gcmVjZWl2ZWQKKyAqIGFuZCBwcm9jZXNzZWQgYWxyZWFkeS4KKyAqCisgKiBSZXR1cm5zIDAgaWYgaXQgd2FzIGFibGUgdG8gZmluZCBhIHZhbGlkIHJlZ3VsYXRvcnkgcnVsZSB3aGljaCBkb2VzCisgKiBhcHBseSB0byB0aGUgZ2l2ZW4gY2VudGVyX2ZyZXEgb3RoZXJ3aXNlIGl0IHJldHVybnMgbm9uLXplcm8uIEl0IHdpbGwKKyAqIGFsc28gcmV0dXJuIC1FUkFOR0UgaWYgd2UgZGV0ZXJtaW5lIHRoZSBnaXZlbiBjZW50ZXJfZnJlcSBkb2VzIG5vdCBldmVuIGhhdmUKKyAqIGEgcmVndWxhdG9yeSBydWxlIGZvciBhIGZyZXF1ZW5jeSByYW5nZSBpbiB0aGUgY2VudGVyX2ZyZXEncyBiYW5kLiBTZWUKKyAqIGZyZXFfaW5fcnVsZV9iYW5kKCkgZm9yIG91ciBjdXJyZW50IGRlZmluaXRpb24gb2YgYSBiYW5kIC0tIHRoaXMgaXMgcHVyZWx5CisgKiBzdWJqZWN0aXZlIGFuZCByaWdodCBub3cgaXRzIDgwMi4xMSBzcGVjaWZpYy4KKyAqLworZXh0ZXJuIGludCBmcmVxX3JlZ19pbmZvKHN0cnVjdCB3aXBoeSAqd2lwaHksIHUzMiBjZW50ZXJfZnJlcSwgdTMyICpiYW5kd2lkdGgsCisJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqKnJlZ19ydWxlKTsKKwogI2VuZGlmIC8qIF9fTkVUX1dJUkVMRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9jbS5oIGIvaW5jbHVkZS9yZG1hL2liX2NtLmgKaW5kZXggZWM3YzZkOS4uOTM4ODU4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX2NtLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX2NtLmgKQEAgLTMxNCwxMiArMzE0LDEyIEBACiAgKi8KIHZvaWQgaWJfZGVzdHJveV9jbV9pZChzdHJ1Y3QgaWJfY21faWQgKmNtX2lkKTsKIAotI2RlZmluZSBJQl9TRVJWSUNFX0lEX0FHTl9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHhGRjAwMDAwMDAwMDAwMDAwVUxMKQotI2RlZmluZSBJQl9DTV9BU1NJR05fU0VSVklDRV9JRCBfX2NvbnN0YW50X2NwdV90b19iZTY0KDB4MDIwMDAwMDAwMDAwMDAwMFVMTCkKLSNkZWZpbmUgSUJfQ01BX1NFUlZJQ0VfSUQJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweDAwMDAwMDAwMDEwMDAwMDBVTEwpCi0jZGVmaW5lIElCX0NNQV9TRVJWSUNFX0lEX01BU0sJX19jb25zdGFudF9jcHVfdG9fYmU2NCgweEZGRkZGRkZGRkYwMDAwMDBVTEwpCi0jZGVmaW5lIElCX1NEUF9TRVJWSUNFX0lECV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHgwMDAwMDAwMDAwMDEwMDAwVUxMKQotI2RlZmluZSBJQl9TRFBfU0VSVklDRV9JRF9NQVNLCV9fY29uc3RhbnRfY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGRkYwMDAwVUxMKQorI2RlZmluZSBJQl9TRVJWSUNFX0lEX0FHTl9NQVNLCWNwdV90b19iZTY0KDB4RkYwMDAwMDAwMDAwMDAwMFVMTCkKKyNkZWZpbmUgSUJfQ01fQVNTSUdOX1NFUlZJQ0VfSUQJY3B1X3RvX2JlNjQoMHgwMjAwMDAwMDAwMDAwMDAwVUxMKQorI2RlZmluZSBJQl9DTUFfU0VSVklDRV9JRAljcHVfdG9fYmU2NCgweDAwMDAwMDAwMDEwMDAwMDBVTEwpCisjZGVmaW5lIElCX0NNQV9TRVJWSUNFX0lEX01BU0sJY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGMDAwMDAwVUxMKQorI2RlZmluZSBJQl9TRFBfU0VSVklDRV9JRAljcHVfdG9fYmU2NCgweDAwMDAwMDAwMDAwMTAwMDBVTEwpCisjZGVmaW5lIElCX1NEUF9TRVJWSUNFX0lEX01BU0sJY3B1X3RvX2JlNjQoMHhGRkZGRkZGRkZGRkYwMDAwVUxMKQogCiBzdHJ1Y3QgaWJfY21fY29tcGFyZV9kYXRhIHsKIAl1OCAgZGF0YVtJQl9DTV9DT01QQVJFX1NJWkVdOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX21hZC5oIGIvaW5jbHVkZS9yZG1hL2liX21hZC5oCmluZGV4IDVmNmM0MGYuLmQzYjk0MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9tYWQuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfbWFkLmgKQEAgLTEwNyw3ICsxMDcsNyBAQAogI2RlZmluZQlJQl9NR01UX1JNUFBfU1RBVFVTX0FCT1JUX01BWAkJMTI3CiAKICNkZWZpbmUgSUJfUVAwCQkwCi0jZGVmaW5lIElCX1FQMQkJX19jb25zdGFudF9odG9ubCgxKQorI2RlZmluZSBJQl9RUDEJCWNwdV90b19iZTMyKDEpCiAjZGVmaW5lIElCX1FQMV9RS0VZCTB4ODAwMTAwMDAKICNkZWZpbmUgSUJfUVBfU0VUX1FLRVkJMHg4MDAwMDAwMAogCkBAIC0yOTAsNyArMjkwLDcgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGliX3NldF9ybXBwX2ZsYWdzKHN0cnVjdCBpYl9ybXBwX2hkciAqcm1wcF9oZHIsIHU4IGZsYWdzKQogewotCXJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzID0gKHJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzICYgMHhGMSkgfAorCXJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzID0gKHJtcHBfaGRyLT5ybXBwX3J0aW1lX2ZsYWdzICYgMHhGOCkgfAogCQkJCSAgICAgKGZsYWdzICYgMHg3KTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3NtaS5oIGIvaW5jbHVkZS9yZG1hL2liX3NtaS5oCmluZGV4IGFhY2EwODcuLjk4YjkwODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl9zbWkuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfc21pLmgKQEAgLTYzLDI1ICs2MywyNSBAQAogCXU4CXJldHVybl9wYXRoW0lCX1NNUF9NQVhfUEFUSF9IT1BTXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCi0jZGVmaW5lIElCX1NNUF9ESVJFQ1RJT04JCQlfX2NvbnN0YW50X2h0b25zKDB4ODAwMCkKKyNkZWZpbmUgSUJfU01QX0RJUkVDVElPTgkJCWNwdV90b19iZTE2KDB4ODAwMCkKIAogLyogU3VibmV0IG1hbmFnZW1lbnQgYXR0cmlidXRlcyAqLwotI2RlZmluZSBJQl9TTVBfQVRUUl9OT1RJQ0UJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAwMikKLSNkZWZpbmUgSUJfU01QX0FUVFJfTk9ERV9ERVNDCQkJX19jb25zdGFudF9odG9ucygweDAwMTApCi0jZGVmaW5lIElCX1NNUF9BVFRSX05PREVfSU5GTwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDExKQotI2RlZmluZSBJQl9TTVBfQVRUUl9TV0lUQ0hfSU5GTwkJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDEyKQotI2RlZmluZSBJQl9TTVBfQVRUUl9HVUlEX0lORk8JCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxNCkKLSNkZWZpbmUgSUJfU01QX0FUVFJfUE9SVF9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMTUpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1BLRVlfVEFCTEUJCQlfX2NvbnN0YW50X2h0b25zKDB4MDAxNikKLSNkZWZpbmUgSUJfU01QX0FUVFJfU0xfVE9fVkxfVEFCTEUJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE3KQotI2RlZmluZSBJQl9TTVBfQVRUUl9WTF9BUkJfVEFCTEUJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDE4KQotI2RlZmluZSBJQl9TTVBfQVRUUl9MSU5FQVJfRk9SV0FSRF9UQUJMRQlfX2NvbnN0YW50X2h0b25zKDB4MDAxOSkKLSNkZWZpbmUgSUJfU01QX0FUVFJfUkFORE9NX0ZPUldBUkRfVEFCTEUJX19jb25zdGFudF9odG9ucygweDAwMUEpCi0jZGVmaW5lIElCX1NNUF9BVFRSX01DQVNUX0ZPUldBUkRfVEFCTEUJCV9fY29uc3RhbnRfaHRvbnMoMHgwMDFCKQotI2RlZmluZSBJQl9TTVBfQVRUUl9TTV9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMjApCi0jZGVmaW5lIElCX1NNUF9BVFRSX1ZFTkRPUl9ESUFHCQkJX19jb25zdGFudF9odG9ucygweDAwMzApCi0jZGVmaW5lIElCX1NNUF9BVFRSX0xFRF9JTkZPCQkJX19jb25zdGFudF9odG9ucygweDAwMzEpCi0jZGVmaW5lIElCX1NNUF9BVFRSX1ZFTkRPUl9NQVNLCQkJX19jb25zdGFudF9odG9ucygweEZGMDApCisjZGVmaW5lIElCX1NNUF9BVFRSX05PVElDRQkJCWNwdV90b19iZTE2KDB4MDAwMikKKyNkZWZpbmUgSUJfU01QX0FUVFJfTk9ERV9ERVNDCQkJY3B1X3RvX2JlMTYoMHgwMDEwKQorI2RlZmluZSBJQl9TTVBfQVRUUl9OT0RFX0lORk8JCQljcHVfdG9fYmUxNigweDAwMTEpCisjZGVmaW5lIElCX1NNUF9BVFRSX1NXSVRDSF9JTkZPCQkJY3B1X3RvX2JlMTYoMHgwMDEyKQorI2RlZmluZSBJQl9TTVBfQVRUUl9HVUlEX0lORk8JCQljcHVfdG9fYmUxNigweDAwMTQpCisjZGVmaW5lIElCX1NNUF9BVFRSX1BPUlRfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAxNSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfUEtFWV9UQUJMRQkJCWNwdV90b19iZTE2KDB4MDAxNikKKyNkZWZpbmUgSUJfU01QX0FUVFJfU0xfVE9fVkxfVEFCTEUJCWNwdV90b19iZTE2KDB4MDAxNykKKyNkZWZpbmUgSUJfU01QX0FUVFJfVkxfQVJCX1RBQkxFCQljcHVfdG9fYmUxNigweDAwMTgpCisjZGVmaW5lIElCX1NNUF9BVFRSX0xJTkVBUl9GT1JXQVJEX1RBQkxFCWNwdV90b19iZTE2KDB4MDAxOSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfUkFORE9NX0ZPUldBUkRfVEFCTEUJY3B1X3RvX2JlMTYoMHgwMDFBKQorI2RlZmluZSBJQl9TTVBfQVRUUl9NQ0FTVF9GT1JXQVJEX1RBQkxFCQljcHVfdG9fYmUxNigweDAwMUIpCisjZGVmaW5lIElCX1NNUF9BVFRSX1NNX0lORk8JCQljcHVfdG9fYmUxNigweDAwMjApCisjZGVmaW5lIElCX1NNUF9BVFRSX1ZFTkRPUl9ESUFHCQkJY3B1X3RvX2JlMTYoMHgwMDMwKQorI2RlZmluZSBJQl9TTVBfQVRUUl9MRURfSU5GTwkJCWNwdV90b19iZTE2KDB4MDAzMSkKKyNkZWZpbmUgSUJfU01QX0FUVFJfVkVORE9SX01BU0sJCQljcHVfdG9fYmUxNigweEZGMDApCiAKIHN0cnVjdCBpYl9wb3J0X2luZm8gewogCV9fYmU2NCBta2V5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAppbmRleCA5MzZlMzMzLi5jMTc5MzE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtMzg4LDcgKzM4OCw3IEBACiAJSUJfTVVMVElDQVNUX1FQTiA9IDB4ZmZmZmZmCiB9OwogCi0jZGVmaW5lIElCX0xJRF9QRVJNSVNTSVZFCV9fY29uc3RhbnRfaHRvbnMoMHhGRkZGKQorI2RlZmluZSBJQl9MSURfUEVSTUlTU0lWRQljcHVfdG9fYmUxNigweEZGRkYpCiAKIGVudW0gaWJfYWhfZmxhZ3MgewogCUlCX0FIX0dSSAk9IDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWQxODE2YS5oIGIvaW5jbHVkZS9zb3VuZC9hZDE4MTZhLmgKaW5kZXggYjNhYTYyZS4uZDAxMDg1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9hZDE4MTZhLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hZDE4MTZhLmgKQEAgLTE2OSw1ICsxNjksNyBAQAogCiBleHRlcm4gaW50IHNuZF9hZDE4MTZhX3BjbShzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7CiBleHRlcm4gaW50IHNuZF9hZDE4MTZhX21peGVyKHN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCk7CitleHRlcm4gaW50IHNuZF9hZDE4MTZhX3RpbWVyKHN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCwgaW50IGRldmljZSwKKwkJCSAgICAgc3RydWN0IHNuZF90aW1lciAqKnJ0aW1lcik7CiAKICNlbmRpZgkvKiBfX1NPVU5EX0FEMTgxNkFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hc291bmQuaCBiL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKaW5kZXggMWMwMmVkMS4uNmFkZDgwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9hc291bmQuaAorKysgYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCkBAIC0yMyw5ICsyMywxMCBAQAogI2lmbmRlZiBfX1NPVU5EX0FTT1VORF9ICiAjZGVmaW5lIF9fU09VTkRfQVNPVU5EX0gKIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKQEAgLTEyNiwxMiArMTI3LDEwIEBACiAJdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YTsJLyogVzogZHJpdmVyLXNwZWNpZmljIGRhdGEgKi8KIH07CiAKLWVudW0gewotCVNORFJWX0hXREVQX0lPQ1RMX1BWRVJTSU9OID0gX0lPUiAoJ0gnLCAweDAwLCBpbnQpLAotCVNORFJWX0hXREVQX0lPQ1RMX0lORk8gPSBfSU9SICgnSCcsIDB4MDEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbyksCi0JU05EUlZfSFdERVBfSU9DVExfRFNQX1NUQVRVUyA9IF9JT1IoJ0gnLCAweDAyLCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9zdGF0dXMpLAotCVNORFJWX0hXREVQX0lPQ1RMX0RTUF9MT0FEICAgPSBfSU9XKCdIJywgMHgwMywgc3RydWN0IHNuZF9od2RlcF9kc3BfaW1hZ2UpCi19OworI2RlZmluZSBTTkRSVl9IV0RFUF9JT0NUTF9QVkVSU0lPTglfSU9SICgnSCcsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfSU5GTwkJX0lPUiAoJ0gnLCAweDAxLCBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8pCisjZGVmaW5lIFNORFJWX0hXREVQX0lPQ1RMX0RTUF9TVEFUVVMJX0lPUignSCcsIDB4MDIsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cykKKyNkZWZpbmUgU05EUlZfSFdERVBfSU9DVExfRFNQX0xPQUQJX0lPVygnSCcsIDB4MDMsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX2ltYWdlKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtMzQyLDcgKzM0MSw3IEBACiAjZGVmaW5lIFNORFJWX01BU0tfTUFYCTI1NgogCiBzdHJ1Y3Qgc25kX21hc2sgewotCXVfaW50MzJfdCBiaXRzWyhTTkRSVl9NQVNLX01BWCszMSkvMzJdOworCV9fdTMyIGJpdHNbKFNORFJWX01BU0tfTUFYKzMxKS8zMl07CiB9OwogCiBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgewpAQCAtMzg1LDcgKzM4NCw3IEBACiAKIHN0cnVjdCBzbmRfcGNtX2NoYW5uZWxfaW5mbyB7CiAJdW5zaWduZWQgaW50IGNoYW5uZWw7Ci0Jb2ZmX3Qgb2Zmc2V0OwkJCS8qIG1tYXAgb2Zmc2V0ICovCisJX19rZXJuZWxfb2ZmX3Qgb2Zmc2V0OwkJLyogbW1hcCBvZmZzZXQgKi8KIAl1bnNpZ25lZCBpbnQgZmlyc3Q7CQkvKiBvZmZzZXQgdG8gZmlyc3Qgc2FtcGxlIGluIGJpdHMgKi8KIAl1bnNpZ25lZCBpbnQgc3RlcDsJCS8qIHNhbXBsZXMgZGlzdGFuY2UgaW4gYml0cyAqLwogfTsKQEAgLTQ1MSw0MCArNDUwLDM1IEBACiAJU05EUlZfUENNX1RTVEFNUF9UWVBFX0xBU1QgPSBTTkRSVl9QQ01fVFNUQU1QX1RZUEVfTU9OT1RPTklDLAogfTsKIAotZW51bSB7Ci0JU05EUlZfUENNX0lPQ1RMX1BWRVJTSU9OID0gX0lPUignQScsIDB4MDAsIGludCksCi0JU05EUlZfUENNX0lPQ1RMX0lORk8gPSBfSU9SKCdBJywgMHgwMSwgc3RydWN0IHNuZF9wY21faW5mbyksCi0JU05EUlZfUENNX0lPQ1RMX1RTVEFNUCA9IF9JT1coJ0EnLCAweDAyLCBpbnQpLAotCVNORFJWX1BDTV9JT0NUTF9UVFNUQU1QID0gX0lPVygnQScsIDB4MDMsIGludCksCi0JU05EUlZfUENNX0lPQ1RMX0hXX1JFRklORSA9IF9JT1dSKCdBJywgMHgxMCwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zKSwKLQlTTkRSVl9QQ01fSU9DVExfSFdfUEFSQU1TID0gX0lPV1IoJ0EnLCAweDExLCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMpLAotCVNORFJWX1BDTV9JT0NUTF9IV19GUkVFID0gX0lPKCdBJywgMHgxMiksCi0JU05EUlZfUENNX0lPQ1RMX1NXX1BBUkFNUyA9IF9JT1dSKCdBJywgMHgxMywgc3RydWN0IHNuZF9wY21fc3dfcGFyYW1zKSwKLQlTTkRSVl9QQ01fSU9DVExfU1RBVFVTID0gX0lPUignQScsIDB4MjAsIHN0cnVjdCBzbmRfcGNtX3N0YXR1cyksCi0JU05EUlZfUENNX0lPQ1RMX0RFTEFZID0gX0lPUignQScsIDB4MjEsIHNuZF9wY21fc2ZyYW1lc190KSwKLQlTTkRSVl9QQ01fSU9DVExfSFdTWU5DID0gX0lPKCdBJywgMHgyMiksCi0JU05EUlZfUENNX0lPQ1RMX1NZTkNfUFRSID0gX0lPV1IoJ0EnLCAweDIzLCBzdHJ1Y3Qgc25kX3BjbV9zeW5jX3B0ciksCi0JU05EUlZfUENNX0lPQ1RMX0NIQU5ORUxfSU5GTyA9IF9JT1IoJ0EnLCAweDMyLCBzdHJ1Y3Qgc25kX3BjbV9jaGFubmVsX2luZm8pLAotCVNORFJWX1BDTV9JT0NUTF9QUkVQQVJFID0gX0lPKCdBJywgMHg0MCksCi0JU05EUlZfUENNX0lPQ1RMX1JFU0VUID0gX0lPKCdBJywgMHg0MSksCi0JU05EUlZfUENNX0lPQ1RMX1NUQVJUID0gX0lPKCdBJywgMHg0MiksCi0JU05EUlZfUENNX0lPQ1RMX0RST1AgPSBfSU8oJ0EnLCAweDQzKSwKLQlTTkRSVl9QQ01fSU9DVExfRFJBSU4gPSBfSU8oJ0EnLCAweDQ0KSwKLQlTTkRSVl9QQ01fSU9DVExfUEFVU0UgPSBfSU9XKCdBJywgMHg0NSwgaW50KSwKLQlTTkRSVl9QQ01fSU9DVExfUkVXSU5EID0gX0lPVygnQScsIDB4NDYsIHNuZF9wY21fdWZyYW1lc190KSwKLQlTTkRSVl9QQ01fSU9DVExfUkVTVU1FID0gX0lPKCdBJywgMHg0NyksCi0JU05EUlZfUENNX0lPQ1RMX1hSVU4gPSBfSU8oJ0EnLCAweDQ4KSwKLQlTTkRSVl9QQ01fSU9DVExfRk9SV0FSRCA9IF9JT1coJ0EnLCAweDQ5LCBzbmRfcGNtX3VmcmFtZXNfdCksCi0JU05EUlZfUENNX0lPQ1RMX1dSSVRFSV9GUkFNRVMgPSBfSU9XKCdBJywgMHg1MCwgc3RydWN0IHNuZF94ZmVyaSksCi0JU05EUlZfUENNX0lPQ1RMX1JFQURJX0ZSQU1FUyA9IF9JT1IoJ0EnLCAweDUxLCBzdHJ1Y3Qgc25kX3hmZXJpKSwKLQlTTkRSVl9QQ01fSU9DVExfV1JJVEVOX0ZSQU1FUyA9IF9JT1coJ0EnLCAweDUyLCBzdHJ1Y3Qgc25kX3hmZXJuKSwKLQlTTkRSVl9QQ01fSU9DVExfUkVBRE5fRlJBTUVTID0gX0lPUignQScsIDB4NTMsIHN0cnVjdCBzbmRfeGZlcm4pLAotCVNORFJWX1BDTV9JT0NUTF9MSU5LID0gX0lPVygnQScsIDB4NjAsIGludCksCi0JU05EUlZfUENNX0lPQ1RMX1VOTElOSyA9IF9JTygnQScsIDB4NjEpLAotfTsKLQotLyogVHJpY2sgdG8gbWFrZSBhbHNhLWxpYi9hY2luY2x1ZGUubTQgaGFwcHkgKi8KLSNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFV0lORCBTTkRSVl9QQ01fSU9DVExfUkVXSU5ECisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QVkVSU0lPTglfSU9SKCdBJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSU5GTwkJX0lPUignQScsIDB4MDEsIHN0cnVjdCBzbmRfcGNtX2luZm8pCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9UU1RBTVAJCV9JT1coJ0EnLCAweDAyLCBpbnQpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9UVFNUQU1QCQlfSU9XKCdBJywgMHgwMywgaW50KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdfUkVGSU5FCV9JT1dSKCdBJywgMHgxMCwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdfUEFSQU1TCV9JT1dSKCdBJywgMHgxMSwgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfSFdfRlJFRQkJX0lPKCdBJywgMHgxMikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NXX1BBUkFNUwlfSU9XUignQScsIDB4MTMsIHN0cnVjdCBzbmRfcGNtX3N3X3BhcmFtcykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1NUQVRVUwkJX0lPUignQScsIDB4MjAsIHN0cnVjdCBzbmRfcGNtX3N0YXR1cykKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0RFTEFZCQlfSU9SKCdBJywgMHgyMSwgc25kX3BjbV9zZnJhbWVzX3QpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9IV1NZTkMJCV9JTygnQScsIDB4MjIpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TWU5DX1BUUglfSU9XUignQScsIDB4MjMsIHN0cnVjdCBzbmRfcGNtX3N5bmNfcHRyKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfQ0hBTk5FTF9JTkZPCV9JT1IoJ0EnLCAweDMyLCBzdHJ1Y3Qgc25kX3BjbV9jaGFubmVsX2luZm8pCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9QUkVQQVJFCQlfSU8oJ0EnLCAweDQwKQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVTRVQJCV9JTygnQScsIDB4NDEpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9TVEFSVAkJX0lPKCdBJywgMHg0MikKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX0RST1AJCV9JTygnQScsIDB4NDMpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9EUkFJTgkJX0lPKCdBJywgMHg0NCkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1BBVVNFCQlfSU9XKCdBJywgMHg0NSwgaW50KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfUkVXSU5ECQlfSU9XKCdBJywgMHg0Niwgc25kX3BjbV91ZnJhbWVzX3QpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRVNVTUUJCV9JTygnQScsIDB4NDcpCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9YUlVOCQlfSU8oJ0EnLCAweDQ4KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfRk9SV0FSRAkJX0lPVygnQScsIDB4NDksIHNuZF9wY21fdWZyYW1lc190KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfV1JJVEVJX0ZSQU1FUwlfSU9XKCdBJywgMHg1MCwgc3RydWN0IHNuZF94ZmVyaSkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1JFQURJX0ZSQU1FUwlfSU9SKCdBJywgMHg1MSwgc3RydWN0IHNuZF94ZmVyaSkKKyNkZWZpbmUgU05EUlZfUENNX0lPQ1RMX1dSSVRFTl9GUkFNRVMJX0lPVygnQScsIDB4NTIsIHN0cnVjdCBzbmRfeGZlcm4pCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9SRUFETl9GUkFNRVMJX0lPUignQScsIDB4NTMsIHN0cnVjdCBzbmRfeGZlcm4pCisjZGVmaW5lIFNORFJWX1BDTV9JT0NUTF9MSU5LCQlfSU9XKCdBJywgMHg2MCwgaW50KQorI2RlZmluZSBTTkRSVl9QQ01fSU9DVExfVU5MSU5LCQlfSU8oJ0EnLCAweDYxKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgpAQCAtNTM4LDE0ICs1MzIsMTIgQEAKIAl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzE2XTsJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KIH07CiAKLWVudW0gewotCVNORFJWX1JBV01JRElfSU9DVExfUFZFUlNJT04gPSBfSU9SKCdXJywgMHgwMCwgaW50KSwKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX0lORk8gPSBfSU9SKCdXJywgMHgwMSwgc3RydWN0IHNuZF9yYXdtaWRpX2luZm8pLAotCVNORFJWX1JBV01JRElfSU9DVExfUEFSQU1TID0gX0lPV1IoJ1cnLCAweDEwLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfcGFyYW1zKSwKLQlTTkRSVl9SQVdNSURJX0lPQ1RMX1NUQVRVUyA9IF9JT1dSKCdXJywgMHgyMCwgc3RydWN0IHNuZF9yYXdtaWRpX3N0YXR1cyksCi0JU05EUlZfUkFXTUlESV9JT0NUTF9EUk9QID0gX0lPVygnVycsIDB4MzAsIGludCksCi0JU05EUlZfUkFXTUlESV9JT0NUTF9EUkFJTiA9IF9JT1coJ1cnLCAweDMxLCBpbnQpLAotfTsKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9QVkVSU0lPTglfSU9SKCdXJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX0lORk8JX0lPUignVycsIDB4MDEsIHN0cnVjdCBzbmRfcmF3bWlkaV9pbmZvKQorI2RlZmluZSBTTkRSVl9SQVdNSURJX0lPQ1RMX1BBUkFNUwlfSU9XUignVycsIDB4MTAsIHN0cnVjdCBzbmRfcmF3bWlkaV9wYXJhbXMpCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfU1RBVFVTCV9JT1dSKCdXJywgMHgyMCwgc3RydWN0IHNuZF9yYXdtaWRpX3N0YXR1cykKKyNkZWZpbmUgU05EUlZfUkFXTUlESV9JT0NUTF9EUk9QCV9JT1coJ1cnLCAweDMwLCBpbnQpCisjZGVmaW5lIFNORFJWX1JBV01JRElfSU9DVExfRFJBSU4JX0lPVygnVycsIDB4MzEsIGludCkKIAogLyoKICAqICBUaW1lciBzZWN0aW9uIC0gL2Rldi9zbmQvdGltZXIKQEAgLTY1NCwyMyArNjQ2LDIxIEBACiAJdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CS8qIHJlc2VydmVkICovCiB9OwogCi1lbnVtIHsKLQlTTkRSVl9USU1FUl9JT0NUTF9QVkVSU0lPTiA9IF9JT1IoJ1QnLCAweDAwLCBpbnQpLAotCVNORFJWX1RJTUVSX0lPQ1RMX05FWFRfREVWSUNFID0gX0lPV1IoJ1QnLCAweDAxLCBzdHJ1Y3Qgc25kX3RpbWVyX2lkKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9UUkVBRCA9IF9JT1coJ1QnLCAweDAyLCBpbnQpLAotCVNORFJWX1RJTUVSX0lPQ1RMX0dJTkZPID0gX0lPV1IoJ1QnLCAweDAzLCBzdHJ1Y3Qgc25kX3RpbWVyX2dpbmZvKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9HUEFSQU1TID0gX0lPVygnVCcsIDB4MDQsIHN0cnVjdCBzbmRfdGltZXJfZ3BhcmFtcyksCi0JU05EUlZfVElNRVJfSU9DVExfR1NUQVRVUyA9IF9JT1dSKCdUJywgMHgwNSwgc3RydWN0IHNuZF90aW1lcl9nc3RhdHVzKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9TRUxFQ1QgPSBfSU9XKCdUJywgMHgxMCwgc3RydWN0IHNuZF90aW1lcl9zZWxlY3QpLAotCVNORFJWX1RJTUVSX0lPQ1RMX0lORk8gPSBfSU9SKCdUJywgMHgxMSwgc3RydWN0IHNuZF90aW1lcl9pbmZvKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9QQVJBTVMgPSBfSU9XKCdUJywgMHgxMiwgc3RydWN0IHNuZF90aW1lcl9wYXJhbXMpLAotCVNORFJWX1RJTUVSX0lPQ1RMX1NUQVRVUyA9IF9JT1IoJ1QnLCAweDE0LCBzdHJ1Y3Qgc25kX3RpbWVyX3N0YXR1cyksCi0JLyogVGhlIGZvbGxvd2luZyBmb3VyIGlvY3RscyBhcmUgY2hhbmdlZCBzaW5jZSAxLjAuOSBkdWUgdG8gY29uZmxpY3Rpb24gKi8KLQlTTkRSVl9USU1FUl9JT0NUTF9TVEFSVCA9IF9JTygnVCcsIDB4YTApLAotCVNORFJWX1RJTUVSX0lPQ1RMX1NUT1AgPSBfSU8oJ1QnLCAweGExKSwKLQlTTkRSVl9USU1FUl9JT0NUTF9DT05USU5VRSA9IF9JTygnVCcsIDB4YTIpLAotCVNORFJWX1RJTUVSX0lPQ1RMX1BBVVNFID0gX0lPKCdUJywgMHhhMyksCi19OworI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9QVkVSU0lPTglfSU9SKCdUJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9ORVhUX0RFVklDRQlfSU9XUignVCcsIDB4MDEsIHN0cnVjdCBzbmRfdGltZXJfaWQpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1RSRUFECQlfSU9XKCdUJywgMHgwMiwgaW50KQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9HSU5GTwkJX0lPV1IoJ1QnLCAweDAzLCBzdHJ1Y3Qgc25kX3RpbWVyX2dpbmZvKQorI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9HUEFSQU1TCV9JT1coJ1QnLCAweDA0LCBzdHJ1Y3Qgc25kX3RpbWVyX2dwYXJhbXMpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0dTVEFUVVMJX0lPV1IoJ1QnLCAweDA1LCBzdHJ1Y3Qgc25kX3RpbWVyX2dzdGF0dXMpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NFTEVDVAlfSU9XKCdUJywgMHgxMCwgc3RydWN0IHNuZF90aW1lcl9zZWxlY3QpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX0lORk8JCV9JT1IoJ1QnLCAweDExLCBzdHJ1Y3Qgc25kX3RpbWVyX2luZm8pCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1BBUkFNUwlfSU9XKCdUJywgMHgxMiwgc3RydWN0IHNuZF90aW1lcl9wYXJhbXMpCisjZGVmaW5lIFNORFJWX1RJTUVSX0lPQ1RMX1NUQVRVUwlfSU9SKCdUJywgMHgxNCwgc3RydWN0IHNuZF90aW1lcl9zdGF0dXMpCisvKiBUaGUgZm9sbG93aW5nIGZvdXIgaW9jdGxzIGFyZSBjaGFuZ2VkIHNpbmNlIDEuMC45IGR1ZSB0byBjb25mbGljdGlvbiAqLworI2RlZmluZSBTTkRSVl9USU1FUl9JT0NUTF9TVEFSVAkJX0lPKCdUJywgMHhhMCkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfU1RPUAkJX0lPKCdUJywgMHhhMSkKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfQ09OVElOVUUJX0lPKCdUJywgMHhhMikKKyNkZWZpbmUgU05EUlZfVElNRVJfSU9DVExfUEFVU0UJCV9JTygnVCcsIDB4YTMpCiAKIHN0cnVjdCBzbmRfdGltZXJfcmVhZCB7CiAJdW5zaWduZWQgaW50IHJlc29sdXRpb247CkBAIC03ODksNyArNzc5LDcgQEAKIAlzbmRfY3RsX2VsZW1fdHlwZV90IHR5cGU7CS8qIFI6IHZhbHVlIHR5cGUgLSBTTkRSVl9DVExfRUxFTV9UWVBFXyogKi8KIAl1bnNpZ25lZCBpbnQgYWNjZXNzOwkJLyogUjogdmFsdWUgYWNjZXNzIChiaXRtYXNrKSAtIFNORFJWX0NUTF9FTEVNX0FDQ0VTU18qICovCiAJdW5zaWduZWQgaW50IGNvdW50OwkJLyogY291bnQgb2YgdmFsdWVzICovCi0JcGlkX3Qgb3duZXI7CQkJLyogb3duZXIncyBQSUQgb2YgdGhpcyBjb250cm9sICovCisJX19rZXJuZWxfcGlkX3Qgb3duZXI7CQkvKiBvd25lcidzIFBJRCBvZiB0aGlzIGNvbnRyb2wgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7CiAJCQlsb25nIG1pbjsJCS8qIFI6IG1pbmltdW0gdmFsdWUgKi8KQEAgLTg0NywzMyArODM3LDMxIEBACiAgICAgICAgIHVuc2lnbmVkIGludCB0bHZbMF07CS8qIGZpcnN0IFRMViAqLwogfTsKIAotZW51bSB7Ci0JU05EUlZfQ1RMX0lPQ1RMX1BWRVJTSU9OID0gX0lPUignVScsIDB4MDAsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX0NBUkRfSU5GTyA9IF9JT1IoJ1UnLCAweDAxLCBzdHJ1Y3Qgc25kX2N0bF9jYXJkX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX0xJU1QgPSBfSU9XUignVScsIDB4MTAsIHN0cnVjdCBzbmRfY3RsX2VsZW1fbGlzdCksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fSU5GTyA9IF9JT1dSKCdVJywgMHgxMSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9SRUFEID0gX0lPV1IoJ1UnLCAweDEyLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9XUklURSA9IF9JT1dSKCdVJywgMHgxMywgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fTE9DSyA9IF9JT1coJ1UnLCAweDE0LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKSwKLQlTTkRSVl9DVExfSU9DVExfRUxFTV9VTkxPQ0sgPSBfSU9XKCdVJywgMHgxNSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCksCi0JU05EUlZfQ1RMX0lPQ1RMX1NVQlNDUklCRV9FVkVOVFMgPSBfSU9XUignVScsIDB4MTYsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fQUREID0gX0lPV1IoJ1UnLCAweDE3LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9FTEVNX1JFUExBQ0UgPSBfSU9XUignVScsIDB4MTgsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX0VMRU1fUkVNT1ZFID0gX0lPV1IoJ1UnLCAweDE5LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKSwKLQlTTkRSVl9DVExfSU9DVExfVExWX1JFQUQgPSBfSU9XUignVScsIDB4MWEsIHN0cnVjdCBzbmRfY3RsX3RsdiksCi0JU05EUlZfQ1RMX0lPQ1RMX1RMVl9XUklURSA9IF9JT1dSKCdVJywgMHgxYiwgc3RydWN0IHNuZF9jdGxfdGx2KSwKLQlTTkRSVl9DVExfSU9DVExfVExWX0NPTU1BTkQgPSBfSU9XUignVScsIDB4MWMsIHN0cnVjdCBzbmRfY3RsX3RsdiksCi0JU05EUlZfQ1RMX0lPQ1RMX0hXREVQX05FWFRfREVWSUNFID0gX0lPV1IoJ1UnLCAweDIwLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9IV0RFUF9JTkZPID0gX0lPUignVScsIDB4MjEsIHN0cnVjdCBzbmRfaHdkZXBfaW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX1BDTV9ORVhUX0RFVklDRSA9IF9JT1IoJ1UnLCAweDMwLCBpbnQpLAotCVNORFJWX0NUTF9JT0NUTF9QQ01fSU5GTyA9IF9JT1dSKCdVJywgMHgzMSwgc3RydWN0IHNuZF9wY21faW5mbyksCi0JU05EUlZfQ1RMX0lPQ1RMX1BDTV9QUkVGRVJfU1VCREVWSUNFID0gX0lPVygnVScsIDB4MzIsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfTkVYVF9ERVZJQ0UgPSBfSU9XUignVScsIDB4NDAsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX1JBV01JRElfSU5GTyA9IF9JT1dSKCdVJywgMHg0MSwgc3RydWN0IHNuZF9yYXdtaWRpX2luZm8pLAotCVNORFJWX0NUTF9JT0NUTF9SQVdNSURJX1BSRUZFUl9TVUJERVZJQ0UgPSBfSU9XKCdVJywgMHg0MiwgaW50KSwKLQlTTkRSVl9DVExfSU9DVExfUE9XRVIgPSBfSU9XUignVScsIDB4ZDAsIGludCksCi0JU05EUlZfQ1RMX0lPQ1RMX1BPV0VSX1NUQVRFID0gX0lPUignVScsIDB4ZDEsIGludCksCi19OworI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUFZFUlNJT04JX0lPUignVScsIDB4MDAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0NBUkRfSU5GTwlfSU9SKCdVJywgMHgwMSwgc3RydWN0IHNuZF9jdGxfY2FyZF9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9MSVNUCV9JT1dSKCdVJywgMHgxMCwgc3RydWN0IHNuZF9jdGxfZWxlbV9saXN0KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9JTkZPCV9JT1dSKCdVJywgMHgxMSwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9SRUFECV9JT1dSKCdVJywgMHgxMiwgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX0VMRU1fV1JJVEUJX0lPV1IoJ1UnLCAweDEzLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9MT0NLCV9JT1coJ1UnLCAweDE0LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2lkKQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9VTkxPQ0sJX0lPVygnVScsIDB4MTUsIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9TVUJTQ1JJQkVfRVZFTlRTIF9JT1dSKCdVJywgMHgxNiwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfRUxFTV9BREQJX0lPV1IoJ1UnLCAweDE3LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1JFUExBQ0UJX0lPV1IoJ1UnLCAweDE4LCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9FTEVNX1JFTU9WRQlfSU9XUignVScsIDB4MTksIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9UTFZfUkVBRAlfSU9XUignVScsIDB4MWEsIHN0cnVjdCBzbmRfY3RsX3RsdikKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9XUklURQlfSU9XUignVScsIDB4MWIsIHN0cnVjdCBzbmRfY3RsX3RsdikKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1RMVl9DT01NQU5ECV9JT1dSKCdVJywgMHgxYywgc3RydWN0IHNuZF9jdGxfdGx2KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfSFdERVBfTkVYVF9ERVZJQ0UgX0lPV1IoJ1UnLCAweDIwLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9IV0RFUF9JTkZPCV9JT1IoJ1UnLCAweDIxLCBzdHJ1Y3Qgc25kX2h3ZGVwX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9QQ01fTkVYVF9ERVZJQ0UJX0lPUignVScsIDB4MzAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9JTkZPCV9JT1dSKCdVJywgMHgzMSwgc3RydWN0IHNuZF9wY21faW5mbykKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BDTV9QUkVGRVJfU1VCREVWSUNFIF9JT1coJ1UnLCAweDMyLCBpbnQpCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9SQVdNSURJX05FWFRfREVWSUNFIF9JT1dSKCdVJywgMHg0MCwgaW50KQorI2RlZmluZSBTTkRSVl9DVExfSU9DVExfUkFXTUlESV9JTkZPCV9JT1dSKCdVJywgMHg0MSwgc3RydWN0IHNuZF9yYXdtaWRpX2luZm8pCisjZGVmaW5lIFNORFJWX0NUTF9JT0NUTF9SQVdNSURJX1BSRUZFUl9TVUJERVZJQ0UgX0lPVygnVScsIDB4NDIsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BPV0VSCQlfSU9XUignVScsIDB4ZDAsIGludCkKKyNkZWZpbmUgU05EUlZfQ1RMX0lPQ1RMX1BPV0VSX1NUQVRFCV9JT1IoJ1UnLCAweGQxLCBpbnQpCiAKIC8qCiAgKiAgUmVhZCBpbnRlcmZhY2UuCkBAIC05MTksMTggKzkwNyw0IEBACiAjZGVmaW5lIFNORFJWX0NUTF9OQU1FX0lFQzk1OF9QQ01fU1RSRUFNCQkiUENNIFN0cmVhbSIKICNkZWZpbmUgU05EUlZfQ1RMX05BTUVfSUVDOTU4KGV4cGwsZGlyZWN0aW9uLHdoYXQpCSJJRUM5NTggIiBleHBsIFNORFJWX0NUTF9OQU1FXyMjZGlyZWN0aW9uIFNORFJWX0NUTF9OQU1FX0lFQzk1OF8jI3doYXQKIAotLyoKLSAqCi0gKi8KLQotc3RydWN0IHNuZF94ZmVydiB7Ci0JY29uc3Qgc3RydWN0IGlvdmVjICp2ZWN0b3I7Ci0JdW5zaWduZWQgbG9uZyBjb3VudDsKLX07Ci0KLWVudW0gewotCVNORFJWX0lPQ1RMX1JFQURWID0gX0lPVygnSycsIDB4MDAsIHN0cnVjdCBzbmRfeGZlcnYpLAotCVNORFJWX0lPQ1RMX1dSSVRFViA9IF9JT1coJ0snLCAweDAxLCBzdHJ1Y3Qgc25kX3hmZXJ2KSwKLX07Ci0KICNlbmRpZiAvKiBfX1NPVU5EX0FTT1VORF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2F0bWVsLWFiZGFjLmggYi9pbmNsdWRlL3NvdW5kL2F0bWVsLWFiZGFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRmZjZhOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvc291bmQvYXRtZWwtYWJkYWMuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgQXRtZWwgQXVkaW8gQml0c3RyZWFtIERBQyAoQUJEQUMpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUJEQUNfSAorI2RlZmluZSBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUJEQUNfSAorCisjaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgorCisvKioKKyAqIHN0cnVjdCBhdG1lbF9hYmRhY19wZGF0YSAtIGJvYXJkIHNwZWNpZmljIEFCREFDIGNvbmZpZ3VyYXRpb24KKyAqIEBkd3M6IERNQSBzbGF2ZSBpbnRlcmZhY2UgdG8gdXNlIGZvciBzb3VuZCBwbGF5YmFjay4KKyAqLworc3RydWN0IGF0bWVsX2FiZGFjX3BkYXRhIHsKKwlzdHJ1Y3QgZHdfZG1hX3NsYXZlCWR3czsKK307CisKKyNlbmRpZiAvKiBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUJEQUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYzk3Yy5oIGIvaW5jbHVkZS9zb3VuZC9hdG1lbC1hYzk3Yy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YWFiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3NvdW5kL2F0bWVsLWFjOTdjLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIEF0bWVsIEFDOTdDIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19JTkNMVURFX1NPVU5EX0FUTUVMX0FDOTdDX0gKKyNkZWZpbmUgX19JTkNMVURFX1NPVU5EX0FUTUVMX0FDOTdDX0gKKworI2luY2x1ZGUgPGxpbnV4L2R3X2RtYWMuaD4KKworI2RlZmluZSBBQzk3Q19DQVBUVVJFCTB4MDEKKyNkZWZpbmUgQUM5N0NfUExBWUJBQ0sJMHgwMgorI2RlZmluZSBBQzk3Q19CT1RICShBQzk3Q19DQVBUVVJFIHwgQUM5N0NfUExBWUJBQ0spCisKKy8qKgorICogc3RydWN0IGF0bWVsX2FjOTdjX3BkYXRhIC0gYm9hcmQgc3BlY2lmaWMgQUM5N0MgY29uZmlndXJhdGlvbgorICogQHJ4X2R3czogRE1BIHNsYXZlIGludGVyZmFjZSB0byB1c2UgZm9yIHNvdW5kIGNhcHR1cmUuCisgKiBAdHhfZHdzOiBETUEgc2xhdmUgaW50ZXJmYWNlIHRvIHVzZSBmb3Igc291bmQgcGxheWJhY2suCisgKiBAcmVzZXRfcGluOiBHUElPIHBpbiB3aXJlZCB0byB0aGUgcmVzZXQgaW5wdXQgb24gdGhlIGV4dGVybmFsIEFDOTcgY29kZWMsCisgKiAgICAgICAgICAgICBvcHRpb25hbCB0byB1c2UsIHNldCB0byAtRU5PREVWIGlmIG5vdCBpbiB1c2UuIEFDOTcgbGF5ZXIgd2lsbAorICogICAgICAgICAgICAgdHJ5IHRvIGRvIGEgc29mdHdhcmUgcmVzZXQgb2YgdGhlIGV4dGVybmFsIGNvZGVjIGFueXdheS4KKyAqIEBmbGFnczogRmxhZ3MgZm9yIHdoaWNoIGRpcmVjdGlvbnMgc2hvdWxkIGJlIGVuYWJsZWQuCisgKgorICogSWYgdGhlIHVzZXIgZG8gbm90IHdhbnQgdG8gdXNlIGEgRE1BIGNoYW5uZWwgZm9yIHBsYXliYWNrIG9yIGNhcHR1cmUsIGkuZS4KKyAqIG9ubHkgb25lIGZlYXR1cmUgaXMgcmVxdWlyZWQgb24gdGhlIGJvYXJkLiBUaGUgc2xhdmUgZm9yIHBsYXliYWNrIG9yIGNhcHR1cmUKKyAqIGNhbiBiZSBzZXQgdG8gTlVMTC4gVGhlIEFDOTdDIGRyaXZlciB3aWxsIHRha2UgdXNlIG9mIHRoaXMgd2hlbiBzZXR0aW5nIHVwCisgKiB0aGUgc291bmQgc3RyZWFtcy4KKyAqLworc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgeworCXN0cnVjdCBkd19kbWFfc2xhdmUJcnhfZHdzOworCXN0cnVjdCBkd19kbWFfc2xhdmUJdHhfZHdzOworCXVuc2lnbmVkIGludCAJCWZsYWdzOworCWludAkJCXJlc2V0X3BpbjsKK307CisKKyNlbmRpZiAvKiBfX0lOQ0xVREVfU09VTkRfQVRNRUxfQUM5N0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jb250cm9sLmggYi9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaAppbmRleCA0NzIxYjRiLi5lZjk2ZjA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaApAQCAtMTcxLDYgKzE3MSw1NCBAQAogICovCiBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfY3RsX21ha2VfdmlydHVhbF9tYXN0ZXIoY2hhciAqbmFtZSwKIAkJCQkJCSBjb25zdCB1bnNpZ25lZCBpbnQgKnRsdik7Ci1pbnQgc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSk7Ci0JCSAgICAgIAoraW50IF9zbmRfY3RsX2FkZF9zbGF2ZShzdHJ1Y3Qgc25kX2tjb250cm9sICptYXN0ZXIsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNsYXZlLAorCQkgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKKy8qIG9wdGlvbmFsIGZsYWdzIGZvciBzbGF2ZSAqLworI2RlZmluZSBTTkRfQ1RMX1NMQVZFX05FRURfVVBEQVRFCSgxIDw8IDApCisKKy8qKgorICogc25kX2N0bF9hZGRfc2xhdmUgLSBBZGQgYSB2aXJ0dWFsIHNsYXZlIGNvbnRyb2wKKyAqIEBtYXN0ZXI6IHZtYXN0ZXIgZWxlbWVudAorICogQHNsYXZlOiBzbGF2ZSBlbGVtZW50IHRvIGFkZAorICoKKyAqIEFkZCBhIHZpcnR1YWwgc2xhdmUgY29udHJvbCB0byB0aGUgZ2l2ZW4gbWFzdGVyIGVsZW1lbnQgY3JlYXRlZCB2aWEKKyAqIHNuZF9jdGxfY3JlYXRlX3ZpcnR1YWxfbWFzdGVyKCkgYmVmb3JlaGFuZC4KKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqCisgKiBBbGwgc2xhdmVzIG11c3QgYmUgdGhlIHNhbWUgdHlwZSAocmV0dXJuaW5nIHRoZSBzYW1lIGluZm9ybWF0aW9uCisgKiB2aWEgaW5mbyBjYWxsYmFjaykuICBUaGUgZnVjbnRpb24gZG9lc24ndCBjaGVjayBpdCwgc28gaXQncyB5b3VyCisgKiByZXNwb25zaWJpbGl0eS4KKyAqCisgKiBBbHNvLCBzb21lIGFkZGl0aW9uYWwgbGltaXRhdGlvbnM6CisgKiBhdCBtb3N0IHR3byBjaGFubmVscywKKyAqIGxvZ2FyaXRobWljIHZvbHVtZSBjb250cm9sIChkQiBsZXZlbCkgdGh1cyBubyBsaW5lYXIgdm9sdW1lLAorICogbWFzdGVyIGNhbiBvbmx5IGF0dGVudWF0ZSB0aGUgdm9sdW1lIHdpdGhvdXQgZ2FpbgorICovCitzdGF0aWMgaW5saW5lIGludAorc25kX2N0bF9hZGRfc2xhdmUoc3RydWN0IHNuZF9rY29udHJvbCAqbWFzdGVyLCBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbGF2ZSkKK3sKKwlyZXR1cm4gX3NuZF9jdGxfYWRkX3NsYXZlKG1hc3Rlciwgc2xhdmUsIDApOworfQorCisvKioKKyAqIHNuZF9jdGxfYWRkX3NsYXZlX3VuY2FjaGVkIC0gQWRkIGEgdmlydHVhbCBzbGF2ZSBjb250cm9sCisgKiBAbWFzdGVyOiB2bWFzdGVyIGVsZW1lbnQKKyAqIEBzbGF2ZTogc2xhdmUgZWxlbWVudCB0byBhZGQKKyAqCisgKiBBZGQgYSB2aXJ0dWFsIHNsYXZlIGNvbnRyb2wgdG8gdGhlIGdpdmVuIG1hc3Rlci4KKyAqIFVubGlrZSBzbmRfY3RsX2FkZF9zbGF2ZSgpLCB0aGUgZWxlbWVudCBhZGRlZCB2aWEgdGhpcyBmdW5jdGlvbgorICogaXMgc3VwcG9zZWQgdG8gaGF2ZSB2b2xhdGlsZSB2YWx1ZXMsIGFuZCBnZXQgY2FsbGJhY2sgaXMgY2FsbGVkCisgKiBhdCBlYWNoIHRpbWUgcXVyaWVkIGZyb20gdGhlIG1hc3Rlci4KKyAqCisgKiBXaGVuIHRoZSBjb250cm9sIHBlZWtzIHRoZSBoYXJkd2FyZSB2YWx1ZXMgZGlyZWN0bHkgYW5kIHRoZSB2YWx1ZQorICogY2FuIGJlIGNoYW5nZWQgYnkgb3RoZXIgbWVhbnMgdGhhbiB0aGUgcHV0IGNhbGxiYWNrIG9mIHRoZSBlbGVtZW50LAorICogdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB0byBrZWVwIHRoZSB2YWx1ZSBhbHdheXMgdXAtdG8tZGF0ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3NuZF9jdGxfYWRkX3NsYXZlX3VuY2FjaGVkKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3RlciwKKwkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKnNsYXZlKQoreworCXJldHVybiBfc25kX2N0bF9hZGRfc2xhdmUobWFzdGVyLCBzbGF2ZSwgU05EX0NUTF9TTEFWRV9ORUVEX1VQREFURSk7Cit9CisKICNlbmRpZgkvKiBfX1NPVU5EX0NPTlRST0xfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jb3JlLmggYi9pbmNsdWRlL3NvdW5kL2NvcmUuaAppbmRleCBmNjMyNDg0Li4zZGVhNzk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NvcmUuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NvcmUuaApAQCAtOTcsOSArOTcsOSBAQAogCiBzdHJ1Y3Qgc25kX21vbml0b3JfZmlsZSB7CiAJc3RydWN0IGZpbGUgKmZpbGU7Ci0Jc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgKm5leHQ7CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZGlzY29ubmVjdGVkX2Zfb3A7Ci0Jc3RydWN0IGxpc3RfaGVhZCBzaHV0ZG93bl9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgc2h1dGRvd25fbGlzdDsJLyogc3RpbGwgbmVlZCB0byBzaHV0ZG93biAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJLyogbGluayBvZiBtb25pdG9yIGZpbGVzICovCiB9OwogCiAvKiBtYWluIHN0cnVjdHVyZSBmb3Igc291bmRjYXJkICovCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKnByb2NfaWQ7CS8qIHRoZSBjYXJkIGlkICovCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3Jvb3RfbGluazsJLyogbnVtYmVyIGxpbmsgdG8gcmVhbCBpZCAqLwogCi0Jc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgKmZpbGVzOyAvKiBhbGwgZmlsZXMgYXNzb2NpYXRlZCB0byB0aGlzIGNhcmQgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZpbGVzX2xpc3Q7CS8qIGFsbCBmaWxlcyBhc3NvY2lhdGVkIHRvIHRoaXMgY2FyZCAqLwogCXN0cnVjdCBzbmRfc2h1dGRvd25fZl9vcHMgKnNfZl9vcHM7IC8qIGZpbGUgb3BlcmF0aW9ucyBpbiB0aGUgc2h1dGRvd24KIAkJCQkJCQkJc3RhdGUgKi8KIAlzcGlubG9ja190IGZpbGVzX2xvY2s7CQkvKiBsb2NrIHRoZSBmaWxlcyBmb3IgdGhpcyBjYXJkICovCkBAIC0yOTYsOCArMjk2LDIwIEBACiBleHRlcm4gaW50ICgqc25kX21peGVyX29zc19ub3RpZnlfY2FsbGJhY2spKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGNtZCk7CiAjZW5kaWYKIAoraW50IHNuZF9jYXJkX2NyZWF0ZShpbnQgaWR4LCBjb25zdCBjaGFyICppZCwKKwkJICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgaW50IGV4dHJhX3NpemUsCisJCSAgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkX3JldCk7CisKK3N0YXRpYyBpbmxpbmUgX19kZXByZWNhdGVkCiBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9jYXJkX25ldyhpbnQgaWR4LCBjb25zdCBjaGFyICppZCwKLQkJCSBzdHJ1Y3QgbW9kdWxlICptb2R1bGUsIGludCBleHRyYV9zaXplKTsKKwkJCSAgICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgaW50IGV4dHJhX3NpemUpCit7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWlmIChzbmRfY2FyZF9jcmVhdGUoaWR4LCBpZCwgbW9kdWxlLCBleHRyYV9zaXplLCAmY2FyZCkgPCAwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gY2FyZDsKK30KKwogaW50IHNuZF9jYXJkX2Rpc2Nvbm5lY3Qoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKIGludCBzbmRfY2FyZF9mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7CiBpbnQgc25kX2NhcmRfZnJlZV93aGVuX2Nsb3NlZChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwpAQCAtNDQ2LDIxICs0NTgsMzMgQEAKIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHsKIAl1bnNpZ25lZCBzaG9ydCBzdWJ2ZW5kb3I7CS8qIFBDSSBzdWJ2ZW5kb3IgSUQgKi8KIAl1bnNpZ25lZCBzaG9ydCBzdWJkZXZpY2U7CS8qIFBDSSBzdWJkZXZpY2UgSUQgKi8KKwl1bnNpZ25lZCBzaG9ydCBzdWJkZXZpY2VfbWFzazsJLyogYml0bWFzayB0byBtYXRjaCAqLwogCWludCB2YWx1ZTsJCQkvKiB2YWx1ZSAqLwogI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBuYW1lIG9mIHRoZSBkZXZpY2UgKG9wdGlvbmFsKSAqLwogI2VuZGlmCiB9OwogCi0jZGVmaW5lIF9TTkRfUENJX1FVSVJLX0lEKHZlbmQsZGV2KSBcCi0JLnN1YnZlbmRvciA9ICh2ZW5kKSwgLnN1YmRldmljZSA9IChkZXYpCisjZGVmaW5lIF9TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgbWFzaywgZGV2KQlcCisJLnN1YnZlbmRvciA9ICh2ZW5kKSwgLnN1YmRldmljZSA9IChkZXYpLCAuc3ViZGV2aWNlX21hc2sgPSAobWFzaykKKyNkZWZpbmUgX1NORF9QQ0lfUVVJUktfSUQodmVuZCwgZGV2KSBcCisJX1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCAweGZmZmYsIGRldikKICNkZWZpbmUgU05EX1BDSV9RVUlSS19JRCh2ZW5kLGRldikge19TTkRfUENJX1FVSVJLX0lEKHZlbmQsIGRldil9CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVR19WRVJCT1NFCiAjZGVmaW5lIFNORF9QQ0lfUVVJUksodmVuZCxkZXYseG5hbWUsdmFsKSBcCiAJe19TTkRfUENJX1FVSVJLX0lEKHZlbmQsIGRldiksIC52YWx1ZSA9ICh2YWwpLCAubmFtZSA9ICh4bmFtZSl9CisjZGVmaW5lIFNORF9QQ0lfUVVJUktfVkVORE9SKHZlbmQsIHhuYW1lLCB2YWwpCQkJXAorCXtfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIDAsIDApLCAudmFsdWUgPSAodmFsKSwgLm5hbWUgPSAoeG5hbWUpfQorI2RlZmluZSBTTkRfUENJX1FVSVJLX01BU0sodmVuZCwgbWFzaywgZGV2LCB4bmFtZSwgdmFsKQkJCVwKKwl7X1NORF9QQ0lfUVVJUktfSURfTUFTSyh2ZW5kLCBtYXNrLCBkZXYpLAkJCVwKKwkJCS52YWx1ZSA9ICh2YWwpLCAubmFtZSA9ICh4bmFtZSl9CiAjZWxzZQogI2RlZmluZSBTTkRfUENJX1FVSVJLKHZlbmQsZGV2LHhuYW1lLHZhbCkgXAogCXtfU05EX1BDSV9RVUlSS19JRCh2ZW5kLCBkZXYpLCAudmFsdWUgPSAodmFsKX0KKyNkZWZpbmUgU05EX1BDSV9RVUlSS19NQVNLKHZlbmQsIG1hc2ssIGRldiwgeG5hbWUsIHZhbCkJCQlcCisJe19TTkRfUENJX1FVSVJLX0lEX01BU0sodmVuZCwgbWFzaywgZGV2KSwgLnZhbHVlID0gKHZhbCl9CisjZGVmaW5lIFNORF9QQ0lfUVVJUktfVkVORE9SKHZlbmQsIHhuYW1lLCB2YWwpCQkJXAorCXtfU05EX1BDSV9RVUlSS19JRF9NQVNLKHZlbmQsIDAsIDApLCAudmFsdWUgPSAodmFsKX0KICNlbmRpZgogCiBjb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaCBiL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCmluZGV4IDEwZWUyOGUuLjZhNjY0YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCisrKyBiL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfX1NPVU5EX0VNVTEwSzFfSAogI2RlZmluZSBfX1NPVU5EX0VNVTEwSzFfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyoKICAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+LAogICoJCSAgICAgQ3JlYXRpdmUgTGFicywgSW5jLgpAQCAtMzQsNiArMzYsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKwogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIERFRklORVMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIxNzEsNyArMjE3NCw3IEBACiAJY2hhciBuYW1lWzEyOF07CiAKIAlERUNMQVJFX0JJVE1BUChncHJfdmFsaWQsIDB4MjAwKTsgLyogYml0bWFzayBvZiB2YWxpZCBpbml0aWFsaXplcnMgKi8KLQl1X2ludDMyX3QgX191c2VyICpncHJfbWFwOwkgIC8qIGluaXRpYWxpemVycyAqLworCV9fdTMyIF9fdXNlciAqZ3ByX21hcDsJCS8qIGluaXRpYWxpemVycyAqLwogCiAJdW5zaWduZWQgaW50IGdwcl9hZGRfY29udHJvbF9jb3VudDsgLyogY291bnQgb2YgR1BSIGNvbnRyb2xzIHRvIGFkZC9yZXBsYWNlICovCiAJc3RydWN0IHNuZF9lbXUxMGsxX2Z4ODAxMF9jb250cm9sX2dwciBfX3VzZXIgKmdwcl9hZGRfY29udHJvbHM7IC8qIEdQUiBjb250cm9scyB0byBhZGQvcmVwbGFjZSAqLwpAQCAtMjE4NCwxMSArMjE4NywxMSBAQAogCXN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfY29udHJvbF9ncHIgX191c2VyICpncHJfbGlzdF9jb250cm9sczsgLyogbGlzdGVkIEdQUiBjb250cm9scyAqLwogCiAJREVDTEFSRV9CSVRNQVAodHJhbV92YWxpZCwgMHgxMDApOyAvKiBiaXRtYXNrIG9mIHZhbGlkIGluaXRpYWxpemVycyAqLwotCXVfaW50MzJfdCBfX3VzZXIgKnRyYW1fZGF0YV9tYXA7ICAvKiBkYXRhIGluaXRpYWxpemVycyAqLwotCXVfaW50MzJfdCBfX3VzZXIgKnRyYW1fYWRkcl9tYXA7ICAvKiBtYXAgaW5pdGlhbGl6ZXJzICovCisJX191MzIgX191c2VyICp0cmFtX2RhdGFfbWFwOwkgIC8qIGRhdGEgaW5pdGlhbGl6ZXJzICovCisJX191MzIgX191c2VyICp0cmFtX2FkZHJfbWFwOwkgIC8qIG1hcCBpbml0aWFsaXplcnMgKi8KIAogCURFQ0xBUkVfQklUTUFQKGNvZGVfdmFsaWQsIDEwMjQpOyAvKiBiaXRtYXNrIG9mIHZhbGlkIGluc3RydWN0aW9ucyAqLwotCXVfaW50MzJfdCBfX3VzZXIgKmNvZGU7CQkgIC8qIG9uZSBpbnN0cnVjdGlvbiAtIDY0IGJpdHMgKi8KKwlfX3UzMiBfX3VzZXIgKmNvZGU7CQkgIC8qIG9uZSBpbnN0cnVjdGlvbiAtIDY0IGJpdHMgKi8KIH07CiAKIHN0cnVjdCBzbmRfZW11MTBrMV9meDgwMTBfdHJhbSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2h3ZGVwLmggYi9pbmNsdWRlL3NvdW5kL2h3ZGVwLmgKaW5kZXggZDllZWEwMS4uOGMwNWU0N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvaHdkZXAuaAorKysgYi9pbmNsdWRlL3NvdW5kL2h3ZGVwLmgKQEAgLTI3LDE4ICsyNywyOCBAQAogCiBzdHJ1Y3Qgc25kX2h3ZGVwOwogCisvKiBod2RlcCBmaWxlIG9wczsgYWxsIG9wcyBjYW4gYmUgTlVMTCAqLwogc3RydWN0IHNuZF9od2RlcF9vcHMgewotCWxvbmcgbG9uZyAoKmxsc2VlaykgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIGxvbmcgbG9uZyBvZmZzZXQsIGludCBvcmlnKTsKLQlsb25nICgqcmVhZCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBjaGFyIF9fdXNlciAqYnVmLCBsb25nIGNvdW50LCBsb2ZmX3QgKm9mZnNldCk7Ci0JbG9uZyAoKndyaXRlKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KTsKLQlpbnQgKCpvcGVuKSAoc3RydWN0IHNuZF9od2RlcCAqIGh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUpOwotCWludCAoKnJlbGVhc2UpIChzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlKTsKLQl1bnNpZ25lZCBpbnQgKCpwb2xsKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpOwotCWludCAoKmlvY3RsKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotCWludCAoKmlvY3RsX2NvbXBhdCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLQlpbnQgKCptbWFwKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKTsKLQlpbnQgKCpkc3Bfc3RhdHVzKSAoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyAqc3RhdHVzKTsKLQlpbnQgKCpkc3BfbG9hZCkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9pbWFnZSAqaW1hZ2UpOworCWxvbmcgbG9uZyAoKmxsc2Vlaykoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIGxvbmcgbG9uZyBvZmZzZXQsIGludCBvcmlnKTsKKwlsb25nICgqcmVhZCkoc3RydWN0IHNuZF9od2RlcCAqaHcsIGNoYXIgX191c2VyICpidWYsCisJCSAgICAgbG9uZyBjb3VudCwgbG9mZl90ICpvZmZzZXQpOworCWxvbmcgKCp3cml0ZSkoc3RydWN0IHNuZF9od2RlcCAqaHcsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCSAgICAgIGxvbmcgY291bnQsIGxvZmZfdCAqb2Zmc2V0KTsKKwlpbnQgKCpvcGVuKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlKTsKKwlpbnQgKCpyZWxlYXNlKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKiBmaWxlKTsKKwl1bnNpZ25lZCBpbnQgKCpwb2xsKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgIHBvbGxfdGFibGUgKndhaXQpOworCWludCAoKmlvY3RsKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCWludCAoKmlvY3RsX2NvbXBhdCkoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwlpbnQgKCptbWFwKShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CisJaW50ICgqZHNwX3N0YXR1cykoc3RydWN0IHNuZF9od2RlcCAqaHcsCisJCQkgIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyAqc3RhdHVzKTsKKwlpbnQgKCpkc3BfbG9hZCkoc3RydWN0IHNuZF9od2RlcCAqaHcsCisJCQlzdHJ1Y3Qgc25kX2h3ZGVwX2RzcF9pbWFnZSAqaW1hZ2UpOwogfTsKIAogc3RydWN0IHNuZF9od2RlcCB7CkBAIC02MSw5ICs3MSw5IEBACiAJdm9pZCAoKnByaXZhdGVfZnJlZSkgKHN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwKTsKIAogCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwotCWludCB1c2VkOwotCXVuc2lnbmVkIGludCBkc3BfbG9hZGVkOwotCXVuc2lnbmVkIGludCBleGNsdXNpdmU6IDE7CisJaW50IHVzZWQ7CQkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KKwl1bnNpZ25lZCBpbnQgZHNwX2xvYWRlZDsJLyogYml0IGZpZWxkcyBvZiBsb2FkZWQgZHNwIGluZGljZXMgKi8KKwl1bnNpZ25lZCBpbnQgZXhjbHVzaXZlOjE7CS8qIGV4Y2x1c2l2ZSBhY2Nlc3MgbW9kZSAqLwogfTsKIAogZXh0ZXJuIGludCBzbmRfaHdkZXBfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgY2hhciAqaWQsIGludCBkZXZpY2UsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2phY2suaCBiL2luY2x1ZGUvc291bmQvamFjay5oCmluZGV4IDJlMDMxNWMuLjZiMDEzYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvamFjay5oCisrKyBiL2luY2x1ZGUvc291bmQvamFjay5oCkBAIC0zMCw2ICszMCw5IEBACiAvKioKICAqIEphY2sgdHlwZXMgd2hpY2ggY2FuIGJlIHJlcG9ydGVkLiAgVGhlc2UgdmFsdWVzIGFyZSB1c2VkIGFzIGEKICAqIGJpdG1hc2suCisgKgorICogTm90ZSB0aGF0IHRoaXMgbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgbG9va3VwIHRhYmxlIGluCisgKiBzb3VuZC9jb3JlL2phY2suYy4KICAqLwogZW51bSBzbmRfamFja190eXBlcyB7CiAJU05EX0pBQ0tfSEVBRFBIT05FCT0gMHgwMDAxLApAQCAtMzcsNiArNDAsOCBAQAogCVNORF9KQUNLX0hFQURTRVQJPSBTTkRfSkFDS19IRUFEUEhPTkUgfCBTTkRfSkFDS19NSUNST1BIT05FLAogCVNORF9KQUNLX0xJTkVPVVQJPSAweDAwMDQsCiAJU05EX0pBQ0tfTUVDSEFOSUNBTAk9IDB4MDAwOCwgLyogSWYgZGV0ZWN0ZWQgc2VwYXJhdGVseSAqLworCVNORF9KQUNLX1ZJREVPT1VUCT0gMHgwMDEwLAorCVNORF9KQUNLX0FWT1VUCQk9IFNORF9KQUNLX0xJTkVPVVQgfCBTTkRfSkFDS19WSURFT09VVCwKIH07CiAKIHN0cnVjdCBzbmRfamFjayB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3BjbS5oIGIvaW5jbHVkZS9zb3VuZC9wY20uaAppbmRleCA0MGM1YTZmLi44OTA0YjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3BjbS5oCisrKyBiL2luY2x1ZGUvc291bmQvcGNtLmgKQEAgLTM2NCw3ICszNjQsNiBAQAogICAgICAgICAvKiAtLSB0aW1lciBzZWN0aW9uIC0tICovCiAJc3RydWN0IHNuZF90aW1lciAqdGltZXI7CQkvKiB0aW1lciAqLwogCXVuc2lnbmVkIHRpbWVyX3J1bm5pbmc6IDE7CS8qIHRpbWUgaXMgcnVubmluZyAqLwotCXNwaW5sb2NrX3QgdGltZXJfbG9jazsKIAkvKiAtLSBuZXh0IHN1YnN0cmVhbSAtLSAqLwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqbmV4dDsKIAkvKiAtLSBsaW5rZWQgc3Vic3RyZWFtcyAtLSAqLwpAQCAtNDUxLDcgKzQ1MCw3IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNuZF9wY21fZl9vcHNbMl07CiAKLWludCBzbmRfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNoYXIgKmlkLCBpbnQgZGV2aWNlLAoraW50IHNuZF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgY29uc3QgY2hhciAqaWQsIGludCBkZXZpY2UsCiAJCWludCBwbGF5YmFja19jb3VudCwgaW50IGNhcHR1cmVfY291bnQsCiAJCXN0cnVjdCBzbmRfcGNtICoqcnBjbSk7CiBpbnQgc25kX3BjbV9uZXdfc3RyZWFtKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0sIGludCBzdWJzdHJlYW1fY291bnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9weGEyeHgtbGliLmggYi9pbmNsdWRlL3NvdW5kL3B4YTJ4eC1saWIuaAppbmRleCAyZmQzZDI1Li4yYzg5NGI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3B4YTJ4eC1saWIuaAorKysgYi9pbmNsdWRlL3NvdW5kL3B4YTJ4eC1saWIuaApAQCAtNDIsNCArNDIsMTkgQEAKIGV4dGVybiBpbnQgcHhhMnh4X2FjOTdfaHdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHB4YTJ4eF9hYzk3X2h3X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwogCisvKiBBQzk3IHBsYXRmb3JtX2RhdGEgKi8KKy8qKgorICogc3RydWN0IHB4YTJ4eF9hYzk3X3BsYXRmb3JtX2RhdGEgLSBweGEgYWM5NyBwbGF0Zm9ybSBkYXRhCisgKiBAcmVzZXRfZ3BpbzogQUM5NyByZXNldCBncGlvIChub3JtYWxseSBncGlvMTEzIG9yIGdwaW85NSkKKyAqICAgICAgICAgICAgICBhIC0xIHZhbHVlIG1lYW5zIG5vIGdwaW8gd2lsbCBiZSB1c2VkIGZvciByZXNldAorICoKKyAqIFBsYXRmb3JtIGRhdGEgc2hvdWxkIG9ubHkgYmUgc3BlY2lmaWVkIGZvciBweGEyN3ggQ1BVcyB3aGVyZSBhIHNpbGljb24gYnVnCisgKiBwcmV2ZW50cyBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgcmVzZXQgbGluZS4gSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQKKyAqIGJlaGF2aW91ciBpcyB0byBjb25zaWRlciBncGlvIDExMyBhcyB0aGUgQUM5NyByZXNldCBsaW5lLCB3aGljaCBpcyB0aGUKKyAqIGRlZmF1bHQgb24gbW9zdCBib2FyZHMuCisgKi8KK3N0cnVjdCBweGEyeHhfYWM5N19wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgcmVzZXRfZ3BpbzsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9yYXdtaWRpLmggYi9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaAppbmRleCBiNTUwYTQxLi5jMjNjMjY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaAorKysgYi9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaApAQCAtNDIsNyArNDIsNiBAQAogI2RlZmluZSBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQJKDE8PDEpCiAjZGVmaW5lIFNORFJWX1JBV01JRElfTEZMR19PUEVOCQkoMzw8MCkKICNkZWZpbmUgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORAkoMTw8MikKLSNkZWZpbmUJU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0sJKDE8PDMpCiAKIHN0cnVjdCBzbmRfcmF3bWlkaTsKIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NiLmggYi9pbmNsdWRlL3NvdW5kL3NiLmgKaW5kZXggODVmOTNjNS4uNGU2MmVlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zYi5oCisrKyBiL2luY2x1ZGUvc291bmQvc2IuaApAQCAtMjQ5LDYgKzI0OSw3IEBACiAjZGVmaW5lIFNCX0FMUzQwMDBfM0RfQVVUT19NVVRFCTB4NTIKICNkZWZpbmUgU0JfQUxTNDAwMF9BTkFMT0dfQkxPQ0tfQ1RSTCAweDUzCiAjZGVmaW5lIFNCX0FMUzQwMDBfM0RfREVMQVlMSU5FX1BBVFRFUk4gMHg1NAorI2RlZmluZSBTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OCTB4YzMgLyogYml0IDcgaXMgRGlnaXRhbCBMb29wIEVuYWJsZSAqLwogI2RlZmluZSBTQl9BTFM0MDAwX1FTT1VORAkweGRiCiAKIC8qIElSUSBzZXR0aW5nIGJpdG1hcCAqLwpAQCAtMzMwLDcgKzMzMSw4IEBACiAJU0JfTUlYX0RPVUJMRSwKIAlTQl9NSVhfSU5QVVRfU1csCiAJU0JfTUlYX0NBUFRVUkVfUFJPLAotCVNCX01JWF9DQVBUVVJFX0RUMDE5WAorCVNCX01JWF9DQVBUVVJFX0RUMDE5WCwKKwlTQl9NSVhfTU9OT19DQVBUVVJFX0FMUzRLCiB9OwogCiAjZGVmaW5lIFNCX01JWFZBTF9ET1VCTEUobGVmdF9yZWcsIHJpZ2h0X3JlZywgbGVmdF9zaGlmdCwgcmlnaHRfc2hpZnQsIG1hc2spIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2ZudF9pbmZvLmggYi9pbmNsdWRlL3NvdW5kL3NmbnRfaW5mby5oCmluZGV4IDVkMWFiOWMuLjFiY2U3ZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc2ZudF9pbmZvLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zZm50X2luZm8uaApAQCAtMjAyLDEzICsyMDIsMTEgQEAKIAlpbnQgdmFsdWUyOwkvKiByZXNlcnZlZCAqLwogfTsKIAotZW51bSB7Ci0JU05EUlZfRU1VWF9JT0NUTF9WRVJTSU9OID0gX0lPUignSCcsIDB4ODAsIHVuc2lnbmVkIGludCksCi0JU05EUlZfRU1VWF9JT0NUTF9MT0FEX1BBVENIID0gX0lPV1IoJ0gnLCAweDgxLCBzdHJ1Y3Qgc291bmRmb250X3BhdGNoX2luZm8pLAotCVNORFJWX0VNVVhfSU9DVExfUkVTRVRfU0FNUExFUyA9IF9JTygnSCcsIDB4ODIpLAotCVNORFJWX0VNVVhfSU9DVExfUkVNT1ZFX0xBU1RfU0FNUExFUyA9IF9JTygnSCcsIDB4ODMpLAotCVNORFJWX0VNVVhfSU9DVExfTUVNX0FWQUlMID0gX0lPVygnSCcsIDB4ODQsIGludCksCi0JU05EUlZfRU1VWF9JT0NUTF9NSVNDX01PREUgPSBfSU9XUignSCcsIDB4ODQsIHN0cnVjdCBzbmRfZW11eF9taXNjX21vZGUpLAotfTsKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9WRVJTSU9OCV9JT1IoJ0gnLCAweDgwLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfTE9BRF9QQVRDSAlfSU9XUignSCcsIDB4ODEsIHN0cnVjdCBzb3VuZGZvbnRfcGF0Y2hfaW5mbykKKyNkZWZpbmUgU05EUlZfRU1VWF9JT0NUTF9SRVNFVF9TQU1QTEVTCV9JTygnSCcsIDB4ODIpCisjZGVmaW5lIFNORFJWX0VNVVhfSU9DVExfUkVNT1ZFX0xBU1RfU0FNUExFUyBfSU8oJ0gnLCAweDgzKQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX01FTV9BVkFJTAlfSU9XKCdIJywgMHg4NCwgaW50KQorI2RlZmluZSBTTkRSVl9FTVVYX0lPQ1RMX01JU0NfTU9ERQlfSU9XUignSCcsIDB4ODQsIHN0cnVjdCBzbmRfZW11eF9taXNjX21vZGUpCiAKICNlbmRpZiAvKiBfX1NPVU5EX1NGTlRfSU5GT19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy1kYWkuaCBiL2luY2x1ZGUvc291bmQvc29jLWRhaS5oCmluZGV4IDI0MjQ3ZjcuLjEzNjc2NDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLWRhaS5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLWRhaS5oCkBAIC0yMDMsNyArMjAzLDcgQEAKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKTsKIAogCS8qIG9wcyAqLwotCXN0cnVjdCBzbmRfc29jX2RhaV9vcHMgb3BzOworCXN0cnVjdCBzbmRfc29jX2RhaV9vcHMgKm9wczsKIAogCS8qIERBSSBjYXBhYmlsaXRpZXMgKi8KIAlzdHJ1Y3Qgc25kX3NvY19wY21fc3RyZWFtIGNhcHR1cmU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmggYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKaW5kZXggZGZhODA0OS4uYTdkZWY2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaApAQCAtNzYsNiArNzYsMTEgQEAKIAkgd2NvbnRyb2xzLCB3bmNvbnRyb2xzKVwKIHsJLmlkID0gc25kX3NvY19kYXBtX21peGVyLCAubmFtZSA9IHduYW1lLCAucmVnID0gd3JlZywgLnNoaWZ0ID0gd3NoaWZ0LCBcCiAJLmludmVydCA9IHdpbnZlcnQsIC5rY29udHJvbHMgPSB3Y29udHJvbHMsIC5udW1fa2NvbnRyb2xzID0gd25jb250cm9sc30KKyNkZWZpbmUgU05EX1NPQ19EQVBNX01JWEVSX05BTUVEX0NUTCh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCisJIHdjb250cm9scywgd25jb250cm9scylcCit7ICAgICAgIC5pZCA9IHNuZF9zb2NfZGFwbV9taXhlcl9uYW1lZF9jdGwsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCBcCisJLnNoaWZ0ID0gd3NoaWZ0LCAuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAorCS5udW1fa2NvbnRyb2xzID0gd25jb250cm9sc30KICNkZWZpbmUgU05EX1NPQ19EQVBNX01JQ0JJQVMod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCkgXAogewkuaWQgPSBzbmRfc29jX2RhcG1fbWljYmlhcywgLm5hbWUgPSB3bmFtZSwgLnJlZyA9IHdyZWcsIC5zaGlmdCA9IHdzaGlmdCwgXAogCS5pbnZlcnQgPSB3aW52ZXJ0LCAua2NvbnRyb2xzID0gTlVMTCwgLm51bV9rY29udHJvbHMgPSAwfQpAQCAtMTAxLDYgKzEwNiwxMSBAQAogewkuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKIAkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgLm51bV9rY29udHJvbHMgPSB3bmNvbnRyb2xzLCBcCiAJLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CisjZGVmaW5lIFNORF9TT0NfREFQTV9NSVhFUl9OQU1FRF9DVExfRSh3bmFtZSwgd3JlZywgd3NoaWZ0LCB3aW52ZXJ0LCBcCisJd2NvbnRyb2xzLCB3bmNvbnRyb2xzLCB3ZXZlbnQsIHdmbGFncykgXAoreyAgICAgICAuaWQgPSBzbmRfc29jX2RhcG1fbWl4ZXIsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKKwkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IHdjb250cm9scywgXAorCS5udW1fa2NvbnRyb2xzID0gd25jb250cm9scywgLmV2ZW50ID0gd2V2ZW50LCAuZXZlbnRfZmxhZ3MgPSB3ZmxhZ3N9CiAjZGVmaW5lIFNORF9TT0NfREFQTV9NSUNCSUFTX0Uod25hbWUsIHdyZWcsIHdzaGlmdCwgd2ludmVydCwgd2V2ZW50LCB3ZmxhZ3MpIFwKIHsJLmlkID0gc25kX3NvY19kYXBtX21pY2JpYXMsIC5uYW1lID0gd25hbWUsIC5yZWcgPSB3cmVnLCAuc2hpZnQgPSB3c2hpZnQsIFwKIAkuaW52ZXJ0ID0gd2ludmVydCwgLmtjb250cm9scyA9IE5VTEwsIC5udW1fa2NvbnRyb2xzID0gMCwgXApAQCAtMTgyLDYgKzE5MiwxMiBAQAogCS5nZXQgPSBzbmRfc29jX2RhcG1fZ2V0X3ZhbHVlX2VudW1fZG91YmxlLCBcCiAJLnB1dCA9IHNuZF9zb2NfZGFwbV9wdXRfdmFsdWVfZW51bV9kb3VibGUsIFwKIAkucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSZ4ZW51bSB9CisjZGVmaW5lIFNPQ19EQVBNX1BJTl9TV0lUQ0goeG5hbWUpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUgIiBTd2l0Y2giLCBcCisJLmluZm8gPSBzbmRfc29jX2RhcG1faW5mb19waW5fc3dpdGNoLCBcCisJLmdldCA9IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N3aXRjaCwgXAorCS5wdXQgPSBzbmRfc29jX2RhcG1fcHV0X3Bpbl9zd2l0Y2gsIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKXhuYW1lIH0KIAogLyogZGFwbSBzdHJlYW0gb3BlcmF0aW9ucyAqLwogI2RlZmluZSBTTkRfU09DX0RBUE1fU1RSRUFNX05PUAkJCTB4MApAQCAtMjI4LDYgKzI0NCwxMiBAQAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKIGludCBzbmRfc29jX2RhcG1fcHV0X3ZhbHVlX2VudW1fZG91YmxlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKTsKK2ludCBzbmRfc29jX2RhcG1faW5mb19waW5fc3dpdGNoKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pOworaW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1bmNvbnRyb2wpOworaW50IHNuZF9zb2NfZGFwbV9wdXRfcGluX3N3aXRjaChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1bmNvbnRyb2wpOwogaW50IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCiAJY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCk7CiBpbnQgc25kX3NvY19kYXBtX25ld19jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCkBAIC0yNTAsMTAgKzI3MiwxMCBAQAogaW50IHNuZF9zb2NfZGFwbV9zeXNfYWRkKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIC8qIGRhcG0gYXVkaW8gcGluIGNvbnRyb2wgYW5kIHN0YXR1cyAqLwotaW50IHNuZF9zb2NfZGFwbV9lbmFibGVfcGluKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY2hhciAqcGluKTsKLWludCBzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pOwotaW50IHNuZF9zb2NfZGFwbV9uY19waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjaGFyICpwaW4pOwotaW50IHNuZF9zb2NfZGFwbV9nZXRfcGluX3N0YXR1cyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX2VuYWJsZV9waW4oc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpwaW4pOworaW50IHNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX25jX3BpbihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBpbik7CitpbnQgc25kX3NvY19kYXBtX2dldF9waW5fc3RhdHVzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqcGluKTsKIGludCBzbmRfc29jX2RhcG1fc3luYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOwogCiAvKiBkYXBtIHdpZGdldCB0eXBlcyAqLwpAQCAtMjYzLDYgKzI4NSw3IEBACiAJc25kX3NvY19kYXBtX211eCwJCQkvKiBzZWxlY3RzIDEgYW5hbG9nIHNpZ25hbCBmcm9tIG1hbnkgaW5wdXRzICovCiAJc25kX3NvY19kYXBtX3ZhbHVlX211eCwJCQkvKiBzZWxlY3RzIDEgYW5hbG9nIHNpZ25hbCBmcm9tIG1hbnkgaW5wdXRzICovCiAJc25kX3NvY19kYXBtX21peGVyLAkJCS8qIG1peGVzIHNldmVyYWwgYW5hbG9nIHNpZ25hbHMgdG9nZXRoZXIgKi8KKwlzbmRfc29jX2RhcG1fbWl4ZXJfbmFtZWRfY3RsLAkJLyogbWl4ZXIgd2l0aCBuYW1lZCBjb250cm9scyAqLwogCXNuZF9zb2NfZGFwbV9wZ2EsCQkJLyogcHJvZ3JhbW1hYmxlIGdhaW4vYXR0ZW51YXRpb24gKHZvbHVtZSkgKi8KIAlzbmRfc29jX2RhcG1fYWRjLAkJCS8qIGFuYWxvZyB0byBkaWdpdGFsIGNvbnZlcnRlciAqLwogCXNuZF9zb2NfZGFwbV9kYWMsCQkJLyogZGlnaXRhbCB0byBhbmFsb2cgY29udmVydGVyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy5oIGIvaW5jbHVkZS9zb3VuZC9zb2MuaAppbmRleCAyNDU5M2FjLi5hNDBiYzZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NvYy5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLmgKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CkBAIC0xNTQsNiArMTU2LDggQEAKIAlTTkRfU09DX0JJQVNfT0ZGLAogfTsKIAorc3RydWN0IHNuZF9qYWNrOworc3RydWN0IHNuZF9zb2NfY2FyZDsKIHN0cnVjdCBzbmRfc29jX2RldmljZTsKIHN0cnVjdCBzbmRfc29jX3BjbV9zdHJlYW07CiBzdHJ1Y3Qgc25kX3NvY19vcHM7CkBAIC0xNjQsNiArMTY4LDExIEBACiBzdHJ1Y3Qgc25kX3NvY19jb2RlYzsKIHN0cnVjdCBzb2NfZW51bTsKIHN0cnVjdCBzbmRfc29jX2FjOTdfb3BzOworc3RydWN0IHNuZF9zb2NfamFjazsKK3N0cnVjdCBzbmRfc29jX2phY2tfcGluOworI2lmZGVmIENPTkZJR19HUElPTElCCitzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW87CisjZW5kaWYKIAogdHlwZWRlZiBpbnQgKCpod193cml0ZV90KSh2b2lkICosY29uc3QgY2hhciogLGludCk7CiB0eXBlZGVmIGludCAoKmh3X3JlYWRfdCkodm9pZCAqLGNoYXIqICxpbnQpOwpAQCAtMTg0LDYgKzE5MywxOSBAQAogaW50IHNuZF9zb2Nfc2V0X3J1bnRpbWVfaHdwYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJY29uc3Qgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgKmh3KTsKIAorLyogSmFjayByZXBvcnRpbmcgKi8KK2ludCBzbmRfc29jX2phY2tfbmV3KHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsIGNvbnN0IGNoYXIgKmlkLCBpbnQgdHlwZSwKKwkJICAgICBzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrKTsKK3ZvaWQgc25kX3NvY19qYWNrX3JlcG9ydChzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgc3RhdHVzLCBpbnQgbWFzayk7CitpbnQgc25kX3NvY19qYWNrX2FkZF9waW5zKHN0cnVjdCBzbmRfc29jX2phY2sgKmphY2ssIGludCBjb3VudCwKKwkJCSAgc3RydWN0IHNuZF9zb2NfamFja19waW4gKnBpbnMpOworI2lmZGVmIENPTkZJR19HUElPTElCCitpbnQgc25kX3NvY19qYWNrX2FkZF9ncGlvcyhzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrLCBpbnQgY291bnQsCisJCQlzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gKmdwaW9zKTsKK3ZvaWQgc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3Moc3RydWN0IHNuZF9zb2NfamFjayAqamFjaywgaW50IGNvdW50LAorCQkJc3RydWN0IHNuZF9zb2NfamFja19ncGlvICpncGlvcyk7CisjZW5kaWYKKwogLyogY29kZWMgSU8gKi8KICNkZWZpbmUgc25kX3NvY19yZWFkKGNvZGVjLCByZWcpIGNvZGVjLT5yZWFkKGNvZGVjLCByZWcpCiAjZGVmaW5lIHNuZF9zb2Nfd3JpdGUoY29kZWMsIHJlZywgdmFsdWUpIGNvZGVjLT53cml0ZShjb2RlYywgcmVnLCB2YWx1ZSkKQEAgLTIwMyw2ICsyMjUsOCBAQAogICovCiBzdHJ1Y3Qgc25kX2tjb250cm9sICpzbmRfc29jX2NuZXcoY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKl90ZW1wbGF0ZSwKIAl2b2lkICpkYXRhLCBjaGFyICpsb25nX25hbWUpOworaW50IHNuZF9zb2NfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwljb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY29udHJvbHMsIGludCBudW1fY29udHJvbHMpOwogaW50IHNuZF9zb2NfaW5mb19lbnVtX2RvdWJsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKTsKIGludCBzbmRfc29jX2luZm9fZW51bV9leHQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC0yMzcsNiArMjYxLDQ4IEBACiBpbnQgc25kX3NvY19wdXRfdm9sc3dfczgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpOwogCisvKioKKyAqIHN0cnVjdCBzbmRfc29jX2phY2tfcGluIC0gRGVzY3JpYmVzIGEgcGluIHRvIHVwZGF0ZSBiYXNlZCBvbiBqYWNrIGRldGVjdGlvbgorICoKKyAqIEBwaW46ICAgIG5hbWUgb2YgdGhlIHBpbiB0byB1cGRhdGUKKyAqIEBtYXNrOiAgIGJpdHMgdG8gY2hlY2sgZm9yIGluIHJlcG9ydGVkIGphY2sgc3RhdHVzCisgKiBAaW52ZXJ0OiBpZiBub24temVybyB0aGVuIHBpbiBpcyBlbmFibGVkIHdoZW4gc3RhdHVzIGlzIG5vdCByZXBvcnRlZAorICovCitzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IGNoYXIgKnBpbjsKKwlpbnQgbWFzazsKKwlib29sIGludmVydDsKK307CisKKy8qKgorICogc3RydWN0IHNuZF9zb2NfamFja19ncGlvIC0gRGVzY3JpYmVzIGEgZ3BpbyBwaW4gZm9yIGphY2sgZGV0ZWN0aW9uCisgKgorICogQGdwaW86ICAgICAgICAgZ3BpbyBudW1iZXIKKyAqIEBuYW1lOiAgICAgICAgIGdwaW8gbmFtZQorICogQHJlcG9ydDogICAgICAgdmFsdWUgdG8gcmVwb3J0IHdoZW4gamFjayBkZXRlY3RlZAorICogQGludmVydDogICAgICAgcmVwb3J0IHByZXNlbmNlIGluIGxvdyBzdGF0ZQorICogQGRlYm91Y2VfdGltZTogZGVib3VjZSB0aW1lIGluIG1zCisgKi8KKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorc3RydWN0IHNuZF9zb2NfamFja19ncGlvIHsKKwl1bnNpZ25lZCBpbnQgZ3BpbzsKKwljb25zdCBjaGFyICpuYW1lOworCWludCByZXBvcnQ7CisJaW50IGludmVydDsKKwlpbnQgZGVib3VuY2VfdGltZTsKKwlzdHJ1Y3Qgc25kX3NvY19qYWNrICpqYWNrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworfTsKKyNlbmRpZgorCitzdHJ1Y3Qgc25kX3NvY19qYWNrIHsKKwlzdHJ1Y3Qgc25kX2phY2sgKmphY2s7CisJc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBpbnM7CisJaW50IHN0YXR1czsKK307CisKIC8qIFNvQyBQQ00gc3RyZWFtIGluZm9ybWF0aW9uICovCiBzdHJ1Y3Qgc25kX3NvY19wY21fc3RyZWFtIHsKIAljaGFyICpzdHJlYW1fbmFtZTsKQEAgLTM4NCw2ICs0NTAsOCBAQAogCiAJc3RydWN0IHNuZF9zb2NfZGV2aWNlICpzb2NkZXY7CiAKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisKIAlzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybSAqcGxhdGZvcm07CiAJc3RydWN0IGRlbGF5ZWRfd29yayBkZWxheWVkX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IGRlZmVycmVkX3Jlc3VtZV93b3JrOwpAQCAtMzkzLDcgKzQ2MSw2IEBACiBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlY19kZXZpY2UgKmNvZGVjX2RldjsKIAl2b2lkICpjb2RlY19kYXRhOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdWRhMTM0MS5oIGIvaW5jbHVkZS9zb3VuZC91ZGExMzQxLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMGQ1ZGMuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9zb3VuZC91ZGExMzQxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqICBsaW51eC9pbmNsdWRlL2xpbnV4L2wzL3VkYTEzNDEuaAotICoKLSAqIFBoaWxpcHMgVURBMTM0MSBtaXhlciBkZXZpY2UgZHJpdmVyIGZvciBBTFNBCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyIFRvbWFzIEthc3BhcmVrIDx0b21hcy5rYXNwYXJla0BzZXpuYW0uY3o+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0gKgotICogSGlzdG9yeToKLSAqCi0gKiAyMDAyLTAzLTEzIFRvbWFzIEthc3BhcmVrIEluaXRpYWwgcmVsZWFzZSAtIGJhc2VkIG9uIHVkYTEzNDEuaCBmcm9tIE9TUwotICogMjAwMi0wMy0zMCBUb21hcyBLYXNwYXJlayBQcm9jIGZpbGVzeXN0ZW0gc3VwcG9ydCwgY29tcGxldGUgbWl4ZXIgYW5kIERTUAotICogICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyBzdXBwb3J0Ci0gKi8KLQotI2RlZmluZSBVREExMzQxX0FMU0FfTkFNRSAic25kLXVkYTEzNDEiCi0KLS8qCi0gKiBEZWZhdWx0IHJhdGUgc2V0IGFmdGVyIGluaWNpYWxpemF0aW9uCi0gKi8KLSNkZWZpbmUgQVVESU9fUkFURV9ERUZBVUxUCTQ0MTAwCi0KLS8qCi0gKiBVREExMzQxIEwzIGFkZHJlc3MgYW5kIGNvbW1hbmQgdHlwZXMKLSAqLwotI2RlZmluZSBVREExMzQxX0wzQUREUgkJNQotI2RlZmluZSBVREExMzQxX0RBVEEwCQkoVURBMTM0MV9MM0FERFIgPDwgMiB8IDApCi0jZGVmaW5lIFVEQTEzNDFfREFUQTEJCShVREExMzQxX0wzQUREUiA8PCAyIHwgMSkKLSNkZWZpbmUgVURBMTM0MV9TVEFUVVMJCShVREExMzQxX0wzQUREUiA8PCAyIHwgMikKLQotZW51bSB1ZGExMzQxX29ub2ZmIHsKLQlPRkY9MCwKLQlPTiwKLX07Ci0KLWVudW0gdWRhMTM0MV9mb3JtYXQgewotCUkyUz0wLAotCUxTQjE2LAotCUxTQjE4LAotCUxTQjIwLAotCU1TQiwKLQlMU0IxNk1TQiwKLQlMU0IxOE1TQiwKLQlMU0IyME1TQiwgICAgICAgIAotfTsKLQotZW51bSB1ZGExMzQxX2ZzIHsKLQlGNTEyPTAsCi0JRjM4NCwKLQlGMjU2LAotCUZ1bnVzZWQsCi19OwotCi1lbnVtIHVkYTEzNDFfcGVhayB7Ci0JQkVGT1JFPTAsCi0JQUZURVIsCi19OwotCi1lbnVtIHVkYTEzNDFfZmlsdGVyIHsKLQlGTEFUPTAsCi0JTUlOLAotCU1JTjIsCi0JTUFYLAotfTsKLQotZW51bSB1ZGExMzQxX21peGVyIHsKLQlET1VCTEUsCi0JTElORSwKLQlNSUMsCi0JTUlYRVIsCi19OwotCi1lbnVtIHVkYTEzNDFfZGVlbXAgewotCU5PTkUsCi0JRDMyLAotCUQ0NCwKLQlENDgsCi19OwotCi1lbnVtIHVkYTEzNDFfY29uZmlnIHsKLQlDTURfUkVBRF9SRUcgPSAwLAotCUNNRF9SRVNFVCwKLQlDTURfRlMsCi0JQ01EX0ZPUk1BVCwKLQlDTURfT0dBSU4sCi0JQ01EX0lHQUlOLAotCUNNRF9EQUMsCi0JQ01EX0FEQywKLQlDTURfVk9MVU1FLAotCUNNRF9CQVNTLAotCUNNRF9UUkVCQkxFLAotCUNNRF9QRUFLLAotCUNNRF9ERUVNUCwKLQlDTURfTVVURSwgICAgICAgIAotCUNNRF9GSUxURVIsCi0JQ01EX0NIMSwKLQlDTURfQ0gyLAotCUNNRF9NSUMsICAgICAgIAotCUNNRF9NSVhFUiwKLQlDTURfQUdDLAotCUNNRF9JRywKLQlDTURfQUdDX1RJTUUsCi0JQ01EX0FHQ19MRVZFTCwKLSNpZmRlZiBDT05GSUdfUE0KLQlDTURfU1VTUEVORCwKLQlDTURfUkVTVU1FLAotI2VuZGlmCi0JQ01EX0xBU1QsCi19OwotCi1lbnVtIHdyaXRlX3Rocm91Z2ggewotCS8vdXNlZCBpbiB1cGRhdGVfYml0cyAod3JpdGVfY2ZnKSB0byBhdm9pZCBsM193cml0ZSAtIGp1c3QgdXBkYXRlIGxvY2FsIGNvcHkgb2YgcmVncy4KLQlSRUdTX09OTFk9MCwKLQkvL3VwZGF0ZSBsb2NhbCByZWdzIGFuZCB3cml0ZSB2YWx1ZSB0byB1ZGExMzQxIC0gZG8gbDNfd3JpdGUKLQlGTFVTSCwKLX07Ci0KLWludCBfX2luaXQgc25kX2NoaXBfdWRhMTM0MV9taXhlcl9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgbDNfY2xpZW50ICoqY2xudCk7Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBpbmRlbnQtdGFicy1tb2RlOiB0Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvdmVyc2lvbi5oIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKaW5kZXggMmI0ODIzNy4uYTdlNzRlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKKysrIGIvaW5jbHVkZS9zb3VuZC92ZXJzaW9uLmgKQEAgLTEsMyArMSwzIEBACiAvKiBpbmNsdWRlL3ZlcnNpb24uaCAqLwotI2RlZmluZSBDT05GSUdfU05EX1ZFUlNJT04gIjEuMC4xOGEiCisjZGVmaW5lIENPTkZJR19TTkRfVkVSU0lPTiAiMS4wLjE5IgogI2RlZmluZSBDT05GSUdfU05EX0RBVEUgIiIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvd3NzLmggYi9pbmNsdWRlL3NvdW5kL3dzcy5oCmluZGV4IGZkMDFmMjIuLjZkNjVmMzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvd3NzLmgKKysrIGIvaW5jbHVkZS9zb3VuZC93c3MuaApAQCAtMTU0LDYgKzE1NCw3IEBACiAJCSAgICAgIHVuc2lnbmVkIHNob3J0IGhhcmR3YXJlLAogCQkgICAgICB1bnNpZ25lZCBzaG9ydCBod3NoYXJlLAogCQkgICAgICBzdHJ1Y3Qgc25kX3dzcyAqKnJjaGlwKTsKK2ludCBzbmRfd3NzX2ZyZWUoc3RydWN0IHNuZF93c3MgKmNoaXApOwogaW50IHNuZF93c3NfcGNtKHN0cnVjdCBzbmRfd3NzICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOwogaW50IHNuZF93c3NfdGltZXIoc3RydWN0IHNuZF93c3MgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfdGltZXIgKipydGltZXIpOwogaW50IHNuZF93c3NfbWl4ZXIoc3RydWN0IHNuZF93c3MgKmNoaXApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9za2IuaCBiL2luY2x1ZGUvdHJhY2Uvc2tiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2NjEwZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdHJhY2Uvc2tiLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfVFJBQ0VfU0tCX0hfCisjZGVmaW5lIF9UUkFDRV9TS0JfSF8KKworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworREVDTEFSRV9UUkFDRShrZnJlZV9za2IsCisJVFBQUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpsb2NhdGlvbiksCisJVFBBUkdTKHNrYiwgbG9jYXRpb24pKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5oIGIvaW5jbHVkZS92aWRlby9icm9hZHNoZWV0ZmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzU4NTM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS92aWRlby9icm9hZHNoZWV0ZmIuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogYnJvYWRzaGVldGZiLmggLSBkZWZpbml0aW9ucyBmb3IgdGhlIGJyb2Fkc2hlZXQgZnJhbWVidWZmZXIgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IEpheWEgS3VtYXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfQlJPQURTSEVFVEZCX0hfCisjZGVmaW5lIF9MSU5VWF9CUk9BRFNIRUVURkJfSF8KKworLyogQnJvYWRzaGVldCBjb21tYW5kIGRlZmluZXMgKi8KKyNkZWZpbmUgQlNfQ01EX0lOSVRfU1lTX1JVTgkweDA2CisjZGVmaW5lIEJTX0NNRF9JTklUX0RTUEVfQ0ZHCTB4MDkKKyNkZWZpbmUgQlNfQ01EX0lOSVRfRFNQRV9UTUcJMHgwQQorI2RlZmluZSBCU19DTURfSU5JVF9ST1RNT0RFCTB4MEIKKyNkZWZpbmUgQlNfQ01EX1JEX1JFRwkJMHgxMAorI2RlZmluZSBCU19DTURfV1JfUkVHCQkweDExCisjZGVmaW5lIEJTX0NNRF9MRF9JTUcJCTB4MjAKKyNkZWZpbmUgQlNfQ01EX0xEX0lNR19BUkVBCTB4MjIKKyNkZWZpbmUgQlNfQ01EX0xEX0lNR19FTkQJMHgyMworI2RlZmluZSBCU19DTURfV0FJVF9EU1BFX1RSRwkweDI4CisjZGVmaW5lIEJTX0NNRF9XQUlUX0RTUEVfRlJFTkQJMHgyOQorI2RlZmluZSBCU19DTURfUkRfV0ZNX0lORk8JMHgzMAorI2RlZmluZSBCU19DTURfVVBEX0lOSVQJCTB4MzIKKyNkZWZpbmUgQlNfQ01EX1VQRF9GVUxMCQkweDMzCisjZGVmaW5lIEJTX0NNRF9VUERfR0RSVl9DTFIJMHgzNworCisvKiBCcm9hZHNoZWV0IHBpbiBpbnRlcmZhY2Ugc3BlY2lmaWMgZGVmaW5lcyAqLworI2RlZmluZSBCU19DUwkweDAxCisjZGVmaW5lIEJTX0RDIAkweDAyCisjZGVmaW5lIEJTX1dSIAkweDAzCisKKy8qIHN0cnVjdCB1c2VkIGJ5IGJyb2Fkc2hlZXQuIGJvYXJkIHNwZWNpZmljIHN0dWZmIGNvbWVzIGZyb20gKmJvYXJkICovCitzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciB7CisJc3RydWN0IGZiX2luZm8gKmluZm87CisJc3RydWN0IGJyb2Fkc2hlZXRfYm9hcmQgKmJvYXJkOworCXZvaWQgKCp3cml0ZV9yZWcpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICosIHUxNiByZWcsIHUxNiB2YWwpOworCXUxNiAoKnJlYWRfcmVnKShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqLCB1MTYgcmVnKTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsKK307CisKKy8qIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzICovCitzdHJ1Y3QgYnJvYWRzaGVldF9ib2FyZCB7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJaW50ICgqaW5pdCkoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKik7CisJaW50ICgqd2FpdF9mb3JfcmR5KShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqKTsKKwl2b2lkICgqc2V0X2N0bCkoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKiwgdW5zaWduZWQgY2hhciwgdTgpOworCXZvaWQgKCpzZXRfaGRiKShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqLCB1MTYpOworCXUxNiAoKmdldF9oZGIpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICopOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqKTsKKwlpbnQgKCpnZXRfcGFuZWxfdHlwZSkodm9pZCk7CisJaW50ICgqc2V0dXBfaXJxKShzdHJ1Y3QgZmJfaW5mbyAqKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDZhNWM1ZmUuLjY4Njk5MTMgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTk2Niw3ICs5NjYsNiBAQAogCiBjb25maWcgUlRfTVVURVhFUwogCWJvb2xlYW4KLQlzZWxlY3QgUExJU1QKIAogY29uZmlnIEJBU0VfU01BTEwKIAlpbnQKZGlmZiAtLWdpdCBhL2lwYy9tcXVldWUuYyBiL2lwYy9tcXVldWUuYwppbmRleCA1NGI0MDc3Li5hOGRkYWRiIDEwMDY0NAotLS0gYS9pcGMvbXF1ZXVlLmMKKysrIGIvaXBjL21xdWV1ZS5jCkBAIC0xMTU2LDEwICsxMTU2LDEyIEBACiAJb21xc3RhdC5tcV9mbGFncyA9IGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOwogCWlmICh1X21xc3RhdCkgewogCQlhdWRpdF9tcV9nZXRzZXRhdHRyKG1xZGVzLCAmbXFzdGF0KTsKKwkJc3Bpbl9sb2NrKCZmaWxwLT5mX2xvY2spOwogCQlpZiAobXFzdGF0Lm1xX2ZsYWdzICYgT19OT05CTE9DSykKIAkJCWZpbHAtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKIAkJZWxzZQogCQkJZmlscC0+Zl9mbGFncyAmPSB+T19OT05CTE9DSzsKKwkJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CiAKIAkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAl9CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggMDVkNTFkMi4uZjIzOWQ4NyAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2lwY19uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbWEuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTM4Myw2ICszODQsNyBAQAogCWVycm9yID0gUFRSX0VSUihmaWxlKTsKIAlpZiAoSVNfRVJSKGZpbGUpKQogCQlnb3RvIG5vX2ZpbGU7CisJaW1hX3NobV9jaGVjayhmaWxlKTsKIAogCWlkID0gaXBjX2FkZGlkKCZzaG1faWRzKG5zKSwgJnNocC0+c2htX3Blcm0sIG5zLT5zaG1fY3RsbW5pKTsKIAlpZiAoaWQgPCAwKSB7CkBAIC04ODcsNiArODg5LDcgQEAKIAlmaWxlID0gYWxsb2NfZmlsZShwYXRoLm1udCwgcGF0aC5kZW50cnksIGZfbW9kZSwgJnNobV9maWxlX29wZXJhdGlvbnMpOwogCWlmICghZmlsZSkKIAkJZ290byBvdXRfZnJlZTsKKwlpbWFfc2htX2NoZWNrKGZpbGUpOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc2ZkOwogCWZpbGUtPmZfbWFwcGluZyA9IHNocC0+c2htX2ZpbGUtPmZfbWFwcGluZzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCA5ZWRiNWM0Li5jNTAwY2E3IDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0xMDcxLDcgKzEwNzEsOCBAQAogCQltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CiAJfQogCi0JcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCXJldHVybiAwOwogCiAgZnJlZV9jZ19saW5rczoKIAlmcmVlX2NnX2xpbmtzKCZ0bXBfY2dfbGlua3MpOwpAQCAtMTYyNyw3ICsxNjI4LDcgQEAKIHN0YXRpYyBpbnQgY2dyb3VwX2NyZWF0ZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCiAJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGNncm91cF9kb3BzID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2dyb3VwX2RvcHMgPSB7CiAJCS5kX2lwdXQgPSBjZ3JvdXBfZGlwdXQsCiAJfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9jaGlwLmMgYi9rZXJuZWwvaXJxL2NoaXAuYwppbmRleCA3ZGUxMWJkLi4wM2QwYmVkIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2NoaXAuYworKysgYi9rZXJuZWwvaXJxL2NoaXAuYwpAQCAtNzgsNiArNzgsNyBAQAogCWRlc2MtPmhhbmRsZV9pcnEgPSBoYW5kbGVfYmFkX2lycTsKIAlkZXNjLT5jaGlwID0gJm5vX2lycV9jaGlwOwogCWRlc2MtPm5hbWUgPSBOVUxMOworCWNsZWFyX2tzdGF0X2lycXMoZGVzYyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0yOTAsNyArMjkxLDggQEAKIAkJZGVzYy0+Y2hpcC0+bWFza19hY2soaXJxKTsKIAllbHNlIHsKIAkJZGVzYy0+Y2hpcC0+bWFzayhpcnEpOwotCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsKKwkJaWYgKGRlc2MtPmNoaXAtPmFjaykKKwkJCWRlc2MtPmNoaXAtPmFjayhpcnEpOwogCX0KIH0KIApAQCAtNDc2LDcgKzQ3OCw4IEBACiAJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAKIAkvKiBTdGFydCBoYW5kbGluZyB0aGUgaXJxICovCi0JZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisJaWYgKGRlc2MtPmNoaXAtPmFjaykKKwkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CiAJZGVzYyA9IGlycV9yZW1hcF90b19kZXNjKGlycSwgZGVzYyk7CiAKIAkvKiBNYXJrIHRoZSBJUlEgY3VycmVudGx5IGluIHByb2dyZXNzLiovCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2hhbmRsZS5jIGIva2VybmVsL2lycS9oYW5kbGUuYwppbmRleCAzYWJhOGQxLi5mNmNkZGE2IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2hhbmRsZS5jCisrKyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKQEAgLTgzLDE5ICs4MywyMSBAQAogCiB2b2lkIGluaXRfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGludCBjcHUsIGludCBucikKIHsKLQl1bnNpZ25lZCBsb25nIGJ5dGVzOwotCWNoYXIgKnB0cjsKIAlpbnQgbm9kZTsKLQotCS8qIENvbXB1dGUgaG93IG1hbnkgYnl0ZXMgd2UgbmVlZCBwZXIgaXJxIGFuZCBhbGxvY2F0ZSB0aGVtICovCi0JYnl0ZXMgPSBuciAqIHNpemVvZih1bnNpZ25lZCBpbnQpOworCXZvaWQgKnB0cjsKIAogCW5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwotCXB0ciA9IGt6YWxsb2Nfbm9kZShieXRlcywgR0ZQX0FUT01JQywgbm9kZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiAgYWxsb2Mga3N0YXRfaXJxcyBvbiBjcHUgJWQgbm9kZSAlZFxuIiwgY3B1LCBub2RlKTsKKwlwdHIgPSBremFsbG9jX25vZGUobnIgKiBzaXplb2YoKmRlc2MtPmtzdGF0X2lycXMpLCBHRlBfQVRPTUlDLCBub2RlKTsKIAotCWlmIChwdHIpCi0JCWRlc2MtPmtzdGF0X2lycXMgPSAodW5zaWduZWQgaW50ICopcHRyOworCS8qCisJICogZG9uJ3Qgb3ZlcndpdGUgaWYgY2FuIG5vdCBnZXQgbmV3IG9uZQorCSAqIGluaXRfY29weV9rc3RhdF9pcnFzKCkgY291bGQgc3RpbGwgdXNlIG9sZCBvbmUKKwkgKi8KKwlpZiAocHRyKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIgIGFsbG9jIGtzdGF0X2lycXMgb24gY3B1ICVkIG5vZGUgJWRcbiIsCisJCQkgY3B1LCBub2RlKTsKKwkJZGVzYy0+a3N0YXRfaXJxcyA9IHB0cjsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRfb25lX2lycV9kZXNjKGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGNwdSkKQEAgLTIyNyw2ICsyMjksNyBAQAogCX0KIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQga3N0YXRfaXJxc19hbGxbTlJfSVJRU11bTlJfQ1BVU107CiBpbnQgX19pbml0IGVhcmx5X2lycV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwpAQCAtMjM4LDggKzI0MSwxMCBAQAogCWRlc2MgPSBpcnFfZGVzYzsKIAljb3VudCA9IEFSUkFZX1NJWkUoaXJxX2Rlc2MpOwogCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJZGVzY1tpXS5pcnEgPSBpOworCQlkZXNjW2ldLmtzdGF0X2lycXMgPSBrc3RhdF9pcnFzX2FsbFtpXTsKKwl9CiAKIAlyZXR1cm4gYXJjaF9lYXJseV9pcnFfaW5pdCgpOwogfQpAQCAtMjU1LDYgKzI2MCwxMSBAQAogfQogI2VuZGlmIC8qICFDT05GSUdfU1BBUlNFX0lSUSAqLwogCit2b2lkIGNsZWFyX2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCW1lbXNldChkZXNjLT5rc3RhdF9pcnFzLCAwLCBucl9jcHVfaWRzICogc2l6ZW9mKCooZGVzYy0+a3N0YXRfaXJxcykpKTsKK30KKwogLyoKICAqIFdoYXQgc2hvdWxkIHdlIGRvIGlmIHdlIGdldCBhIGh3IGlycSBldmVudCBvbiBhbiBpbGxlZ2FsIHZlY3Rvcj8KICAqIEVhY2ggYXJjaGl0ZWN0dXJlIGhhcyB0byBhbnN3ZXIgdGhpcyB0aGVtc2VsZi4KQEAgLTMyOCw2ICszMzgsOCBAQAogCWlycXJldHVybl90IHJldCwgcmV0dmFsID0gSVJRX05PTkU7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IDA7CiAKKwlXQVJOX09OQ0UoIWluX2lycSgpLCAiQlVHOiBJUlEgaGFuZGxlciBjYWxsZWQgZnJvbSBub24taGFyZGlycSBjb250ZXh0ISIpOworCiAJaWYgKCEoYWN0aW9uLT5mbGFncyAmIElSUUZfRElTQUJMRUQpKQogCQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIApAQCAtMzQ3LDYgKzM1OSwxMSBAQAogfQogCiAjaWZuZGVmIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKKworI2lmZGVmIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVECisjIHdhcm5pbmcgX19kb19JUlEgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIGNvbnZlcnQgdG8gcHJvcGVyIGZsb3cgaGFuZGxlcnMKKyNlbmRpZgorCiAvKioKICAqIF9fZG9fSVJRIC0gb3JpZ2luYWwgYWxsIGluIG9uZSBoaWdobGV2ZWwgSVJRIGhhbmRsZXIKICAqIEBpcnE6CXRoZSBpbnRlcnJ1cHQgbnVtYmVyCkBAIC00NjcsMTIgKzQ4NCwxMCBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCiB1bnNpZ25lZCBpbnQga3N0YXRfaXJxc19jcHUodW5zaWduZWQgaW50IGlycSwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwogCXJldHVybiBkZXNjID8gZGVzYy0+a3N0YXRfaXJxc1tjcHVdIDogMDsKIH0KLSNlbmRpZgogRVhQT1JUX1NZTUJPTChrc3RhdF9pcnFzX2NwdSk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmggYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCmluZGV4IGU2ZDBhNDMuLmI2MDk1MGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaApAQCAtMTUsNiArMTUsNyBAQAogCiBleHRlcm4gc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlycV9kZXNjX2xvY2tfY2xhc3M7CiBleHRlcm4gdm9pZCBpbml0X2tzdGF0X2lycXMoc3RydWN0IGlycV9kZXNjICpkZXNjLCBpbnQgY3B1LCBpbnQgbnIpOworZXh0ZXJuIHZvaWQgY2xlYXJfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwogZXh0ZXJuIHNwaW5sb2NrX3Qgc3BhcnNlX2lycV9sb2NrOwogZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqaXJxX2Rlc2NfcHRyc1tOUl9JUlFTXTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggMjkxZjAzNi4uZWExMTllZiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9tYW5hZ2UuYworKysgYi9rZXJuZWwvaXJxL21hbmFnZS5jCkBAIC0xMDksNyArMTA5LDcgQEAKIC8qCiAgKiBHZW5lcmljIHZlcnNpb24gb2YgdGhlIGFmZmluaXR5IGF1dG9zZWxlY3Rvci4KICAqLwotaW50IGRvX2lycV9zZWxlY3RfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQorc3RhdGljIGludCBzZXR1cF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCiB7CiAJaWYgKCFpcnFfY2FuX3NldF9hZmZpbml0eShpcnEpKQogCQlyZXR1cm4gMDsKQEAgLTEzMyw3ICsxMzMsNyBAQAogCXJldHVybiAwOwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGRvX2lycV9zZWxlY3RfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkKQorc3RhdGljIGlubGluZSBpbnQgc2V0dXBfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkKQogewogCXJldHVybiBpcnFfc2VsZWN0X2FmZmluaXR5KGlycSk7CiB9CkBAIC0xNDksMTQgKzE0OSwxNCBAQAogCWludCByZXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCXJldCA9IGRvX2lycV9zZWxlY3RfYWZmaW5pdHkoaXJxLCBkZXNjKTsKKwlyZXQgPSBzZXR1cF9hZmZpbml0eShpcnEsIGRlc2MpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBkb19pcnFfc2VsZWN0X2FmZmluaXR5KGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3N0YXRpYyBpbmxpbmUgaW50IHNldHVwX2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTM4OSw5ICszODksOSBAQAogICogYWxsb2NhdGUgc3BlY2lhbCBpbnRlcnJ1cHRzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGFyY2hpdGVjdHVyZS4KICAqLwogc3RhdGljIGludAotX19zZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICogZGVzYywgc3RydWN0IGlycWFjdGlvbiAqbmV3KQorX19zZXR1cF9pcnEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgaXJxYWN0aW9uICpuZXcpCiB7Ci0Jc3RydWN0IGlycWFjdGlvbiAqb2xkLCAqKnA7CisJc3RydWN0IGlycWFjdGlvbiAqb2xkLCAqKm9sZF9wdHI7CiAJY29uc3QgY2hhciAqb2xkX25hbWUgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHNoYXJlZCA9IDA7CkBAIC00MjMsOCArNDIzLDggQEAKIAkgKiBUaGUgZm9sbG93aW5nIGJsb2NrIG9mIGNvZGUgaGFzIHRvIGJlIGV4ZWN1dGVkIGF0b21pY2FsbHkKIAkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCXAgPSAmZGVzYy0+YWN0aW9uOwotCW9sZCA9ICpwOworCW9sZF9wdHIgPSAmZGVzYy0+YWN0aW9uOworCW9sZCA9ICpvbGRfcHRyOwogCWlmIChvbGQpIHsKIAkJLyoKIAkJICogQ2FuJ3Qgc2hhcmUgaW50ZXJydXB0cyB1bmxlc3MgYm90aCBhZ3JlZSB0byBhbmQgYXJlCkBAIC00NDcsOCArNDQ3LDggQEAKIAogCQkvKiBhZGQgbmV3IGludGVycnVwdCBhdCBlbmQgb2YgaXJxIHF1ZXVlICovCiAJCWRvIHsKLQkJCXAgPSAmb2xkLT5uZXh0OwotCQkJb2xkID0gKnA7CisJCQlvbGRfcHRyID0gJm9sZC0+bmV4dDsKKwkJCW9sZCA9ICpvbGRfcHRyOwogCQl9IHdoaWxlIChvbGQpOwogCQlzaGFyZWQgPSAxOwogCX0KQEAgLTQ4OCw3ICs0ODgsNyBAQAogCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9OT19CQUxBTkNJTkc7CiAKIAkJLyogU2V0IGRlZmF1bHQgYWZmaW5pdHkgbWFzayBvbmNlIGV2ZXJ5dGhpbmcgaXMgc2V0dXAgKi8KLQkJZG9faXJxX3NlbGVjdF9hZmZpbml0eShpcnEsIGRlc2MpOworCQlzZXR1cF9hZmZpbml0eShpcnEsIGRlc2MpOwogCiAJfSBlbHNlIGlmICgobmV3LT5mbGFncyAmIElSUUZfVFJJR0dFUl9NQVNLKQogCQkJJiYgKG5ldy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSykKQEAgLTQ5OSw3ICs0OTksNyBAQAogCQkJCShpbnQpKG5ldy0+ZmxhZ3MgJiBJUlFGX1RSSUdHRVJfTUFTSykpOwogCX0KIAotCSpwID0gbmV3OworCSpvbGRfcHRyID0gbmV3OwogCiAJLyogUmVzZXQgYnJva2VuIGlycSBkZXRlY3Rpb24gd2hlbiBpbnN0YWxsaW5nIG5ldyBoYW5kbGVyICovCiAJZGVzYy0+aXJxX2NvdW50ID0gMDsKQEAgLTU0OSw5ICs1NDksMTAyIEBACiAKIAlyZXR1cm4gX19zZXR1cF9pcnEoaXJxLCBkZXNjLCBhY3QpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2V0dXBfaXJxKTsKKworIC8qCisgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyIGFuIGlycWFjdGlvbiAtIHVzZWQgdG8gZnJlZQorICogcmVndWxhciBhbmQgc3BlY2lhbCBpbnRlcnJ1cHRzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGFyY2hpdGVjdHVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gKl9fZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uLCAqKmFjdGlvbl9wdHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCVdBUk4oaW5faW50ZXJydXB0KCksICJUcnlpbmcgdG8gZnJlZSBJUlEgJWQgZnJvbSBJUlEgY29udGV4dCFcbiIsIGlycSk7CisKKwlpZiAoIWRlc2MpCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKworCS8qCisJICogVGhlcmUgY2FuIGJlIG11bHRpcGxlIGFjdGlvbnMgcGVyIElSUSBkZXNjcmlwdG9yLCBmaW5kIHRoZSByaWdodAorCSAqIG9uZSBiYXNlZCBvbiB0aGUgZGV2X2lkOgorCSAqLworCWFjdGlvbl9wdHIgPSAmZGVzYy0+YWN0aW9uOworCWZvciAoOzspIHsKKwkJYWN0aW9uID0gKmFjdGlvbl9wdHI7CisKKwkJaWYgKCFhY3Rpb24pIHsKKwkJCVdBUk4oMSwgIlRyeWluZyB0byBmcmVlIGFscmVhZHktZnJlZSBJUlEgJWRcbiIsIGlycSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJaWYgKGFjdGlvbi0+ZGV2X2lkID09IGRldl9pZCkKKwkJCWJyZWFrOworCQlhY3Rpb25fcHRyID0gJmFjdGlvbi0+bmV4dDsKKwl9CisKKwkvKiBGb3VuZCBpdCAtIG5vdyByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBlbnRyaWVzOiAqLworCSphY3Rpb25fcHRyID0gYWN0aW9uLT5uZXh0OworCisJLyogQ3VycmVudGx5IHVzZWQgb25seSBieSBVTUwsIG1pZ2h0IGRpc2FwcGVhciBvbmUgZGF5OiAqLworI2lmZGVmIENPTkZJR19JUlFfUkVMRUFTRV9NRVRIT0QKKwlpZiAoZGVzYy0+Y2hpcC0+cmVsZWFzZSkKKwkJZGVzYy0+Y2hpcC0+cmVsZWFzZShpcnEsIGRldl9pZCk7CisjZW5kaWYKKworCS8qIElmIHRoaXMgd2FzIHRoZSBsYXN0IGhhbmRsZXIsIHNodXQgZG93biB0aGUgSVJRIGxpbmU6ICovCisJaWYgKCFkZXNjLT5hY3Rpb24pIHsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKKwkJaWYgKGRlc2MtPmNoaXAtPnNodXRkb3duKQorCQkJZGVzYy0+Y2hpcC0+c2h1dGRvd24oaXJxKTsKKwkJZWxzZQorCQkJZGVzYy0+Y2hpcC0+ZGlzYWJsZShpcnEpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisKKwl1bnJlZ2lzdGVyX2hhbmRsZXJfcHJvYyhpcnEsIGFjdGlvbik7CisKKwkvKiBNYWtlIHN1cmUgaXQncyBub3QgYmVpbmcgdXNlZCBvbiBhbm90aGVyIENQVTogKi8KKwlzeW5jaHJvbml6ZV9pcnEoaXJxKTsKKworI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQorCS8qCisJICogSXQncyBhIHNoYXJlZCBJUlEgLS0gdGhlIGRyaXZlciBvdWdodCB0byBiZSBwcmVwYXJlZCBmb3IgYW4gSVJRCisJICogZXZlbnQgdG8gaGFwcGVuIGV2ZW4gbm93IGl0J3MgYmVpbmcgZnJlZWQsIHNvIGxldCdzIG1ha2Ugc3VyZSB0aGF0CisJICogaXMgc28gYnkgZG9pbmcgYW4gZXh0cmEgY2FsbCB0byB0aGUgaGFuZGxlciAuLi4uCisJICoKKwkgKiAoIFdlIGRvIHRoaXMgYWZ0ZXIgYWN0dWFsbHkgZGVyZWdpc3RlcmluZyBpdCwgdG8gbWFrZSBzdXJlIHRoYXQgYQorCSAqICAgJ3JlYWwnIElSUSBkb2Vzbid0IHJ1biBpbiAqIHBhcmFsbGVsIHdpdGggb3VyIGZha2UuICkKKwkgKi8KKwlpZiAoYWN0aW9uLT5mbGFncyAmIElSUUZfU0hBUkVEKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJYWN0aW9uLT5oYW5kbGVyKGlycSwgZGV2X2lkKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKyNlbmRpZgorCXJldHVybiBhY3Rpb247Cit9CiAKIC8qKgotICoJZnJlZV9pcnEgLSBmcmVlIGFuIGludGVycnVwdAorICoJcmVtb3ZlX2lycSAtIGZyZWUgYW4gaW50ZXJydXB0CisgKglAaXJxOiBJbnRlcnJ1cHQgbGluZSB0byBmcmVlCisgKglAYWN0OiBpcnFhY3Rpb24gZm9yIHRoZSBpbnRlcnJ1cHQKKyAqCisgKiBVc2VkIHRvIHJlbW92ZSBpbnRlcnJ1cHRzIHN0YXRpY2FsbHkgc2V0dXAgYnkgdGhlIGVhcmx5IGJvb3QgcHJvY2Vzcy4KKyAqLwordm9pZCByZW1vdmVfaXJxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFhY3Rpb24gKmFjdCkKK3sKKwlfX2ZyZWVfaXJxKGlycSwgYWN0LT5kZXZfaWQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVtb3ZlX2lycSk7CisKKy8qKgorICoJZnJlZV9pcnEgLSBmcmVlIGFuIGludGVycnVwdCBhbGxvY2F0ZWQgd2l0aCByZXF1ZXN0X2lycQogICoJQGlycTogSW50ZXJydXB0IGxpbmUgdG8gZnJlZQogICoJQGRldl9pZDogRGV2aWNlIGlkZW50aXR5IHRvIGZyZWUKICAqCkBAIC01NjYsNzMgKzY1OSw3IEBACiAgKi8KIHZvaWQgZnJlZV9pcnEodW5zaWduZWQgaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7Ci0Jc3RydWN0IGlycWFjdGlvbiAqKnA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVdBUk5fT04oaW5faW50ZXJydXB0KCkpOwotCi0JaWYgKCFkZXNjKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCXAgPSAmZGVzYy0+YWN0aW9uOwotCWZvciAoOzspIHsKLQkJc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uID0gKnA7Ci0KLQkJaWYgKGFjdGlvbikgewotCQkJc3RydWN0IGlycWFjdGlvbiAqKnBwID0gcDsKLQotCQkJcCA9ICZhY3Rpb24tPm5leHQ7Ci0JCQlpZiAoYWN0aW9uLT5kZXZfaWQgIT0gZGV2X2lkKQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBGb3VuZCBpdCAtIG5vdyByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBlbnRyaWVzICovCi0JCQkqcHAgPSBhY3Rpb24tPm5leHQ7Ci0KLQkJCS8qIEN1cnJlbnRseSB1c2VkIG9ubHkgYnkgVU1MLCBtaWdodCBkaXNhcHBlYXIgb25lIGRheS4qLwotI2lmZGVmIENPTkZJR19JUlFfUkVMRUFTRV9NRVRIT0QKLQkJCWlmIChkZXNjLT5jaGlwLT5yZWxlYXNlKQotCQkJCWRlc2MtPmNoaXAtPnJlbGVhc2UoaXJxLCBkZXZfaWQpOwotI2VuZGlmCi0KLQkJCWlmICghZGVzYy0+YWN0aW9uKSB7Ci0JCQkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKLQkJCQlpZiAoZGVzYy0+Y2hpcC0+c2h1dGRvd24pCi0JCQkJCWRlc2MtPmNoaXAtPnNodXRkb3duKGlycSk7Ci0JCQkJZWxzZQotCQkJCQlkZXNjLT5jaGlwLT5kaXNhYmxlKGlycSk7Ci0JCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JCQl1bnJlZ2lzdGVyX2hhbmRsZXJfcHJvYyhpcnEsIGFjdGlvbik7Ci0KLQkJCS8qIE1ha2Ugc3VyZSBpdCdzIG5vdCBiZWluZyB1c2VkIG9uIGFub3RoZXIgQ1BVICovCi0JCQlzeW5jaHJvbml6ZV9pcnEoaXJxKTsKLSNpZmRlZiBDT05GSUdfREVCVUdfU0hJUlEKLQkJCS8qCi0JCQkgKiBJdCdzIGEgc2hhcmVkIElSUSAtLSB0aGUgZHJpdmVyIG91Z2h0IHRvIGJlCi0JCQkgKiBwcmVwYXJlZCBmb3IgaXQgdG8gaGFwcGVuIGV2ZW4gbm93IGl0J3MKLQkJCSAqIGJlaW5nIGZyZWVkLCBzbyBsZXQncyBtYWtlIHN1cmUuLi4uICBXZSBkbwotCQkJICogdGhpcyBhZnRlciBhY3R1YWxseSBkZXJlZ2lzdGVyaW5nIGl0LCB0bwotCQkJICogbWFrZSBzdXJlIHRoYXQgYSAncmVhbCcgSVJRIGRvZXNuJ3QgcnVuIGluCi0JCQkgKiBwYXJhbGxlbCB3aXRoIG91ciBmYWtlCi0JCQkgKi8KLQkJCWlmIChhY3Rpb24tPmZsYWdzICYgSVJRRl9TSEFSRUQpIHsKLQkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCQkJYWN0aW9uLT5oYW5kbGVyKGlycSwgZGV2X2lkKTsKLQkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCQl9Ci0jZW5kaWYKLQkJCWtmcmVlKGFjdGlvbik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcHJpbnRrKEtFUk5fRVJSICJUcnlpbmcgdG8gZnJlZSBhbHJlYWR5LWZyZWUgSVJRICVkXG4iLCBpcnEpOwotI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQotCQlkdW1wX3N0YWNrKCk7Ci0jZW5kaWYKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQorCWtmcmVlKF9fZnJlZV9pcnEoaXJxLCBkZXZfaWQpKTsKIH0KIEVYUE9SVF9TWU1CT0woZnJlZV9pcnEpOwogCkBAIC02NzksMTEgKzcwNiwxMiBAQAogCSAqIHRoZSBiZWhhdmlvciBpcyBjbGFzc2lmaWVkIGFzICJ3aWxsIG5vdCBmaXgiIHNvIHdlIG5lZWQgdG8KIAkgKiBzdGFydCBudWRnaW5nIGRyaXZlcnMgYXdheSBmcm9tIHVzaW5nIHRoYXQgaWRpb20uCiAJICovCi0JaWYgKChpcnFmbGFncyAmIChJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVEKSkKLQkJCT09IChJUlFGX1NIQVJFRHxJUlFGX0RJU0FCTEVEKSkKLQkJcHJfd2FybmluZygiSVJRICVkLyVzOiBJUlFGX0RJU0FCTEVEIGlzIG5vdCAiCi0JCQkJImd1YXJhbnRlZWQgb24gc2hhcmVkIElSUXNcbiIsCi0JCQkJaXJxLCBkZXZuYW1lKTsKKwlpZiAoKGlycWZsYWdzICYgKElSUUZfU0hBUkVEfElSUUZfRElTQUJMRUQpKSA9PQorCQkJCQkoSVJRRl9TSEFSRUR8SVJRRl9ESVNBQkxFRCkpIHsKKwkJcHJfd2FybmluZygKKwkJICAiSVJRICVkLyVzOiBJUlFGX0RJU0FCTEVEIGlzIG5vdCBndWFyYW50ZWVkIG9uIHNoYXJlZCBJUlFzXG4iLAorCQkJaXJxLCBkZXZuYW1lKTsKKwl9CiAKICNpZmRlZiBDT05GSUdfTE9DS0RFUAogCS8qCkBAIC03MDksMTUgKzczNywxMyBAQAogCWlmICghaGFuZGxlcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlhY3Rpb24gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXJxYWN0aW9uKSwgR0ZQX0FUT01JQyk7CisJYWN0aW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlycWFjdGlvbiksIEdGUF9LRVJORUwpOwogCWlmICghYWN0aW9uKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWFjdGlvbi0+aGFuZGxlciA9IGhhbmRsZXI7CiAJYWN0aW9uLT5mbGFncyA9IGlycWZsYWdzOwotCWNwdXNfY2xlYXIoYWN0aW9uLT5tYXNrKTsKIAlhY3Rpb24tPm5hbWUgPSBkZXZuYW1lOwotCWFjdGlvbi0+bmV4dCA9IE5VTEw7CiAJYWN0aW9uLT5kZXZfaWQgPSBkZXZfaWQ7CiAKIAlyZXR2YWwgPSBfX3NldHVwX2lycShpcnEsIGRlc2MsIGFjdGlvbik7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jIGIva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYwppbmRleCBhY2Q4ODM1Li5hZWYxOGFiIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jCisrKyBiL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMKQEAgLTE3LDE2ICsxNywxMSBAQAogCQkJCSBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCiAJCQkJIGludCBjcHUsIGludCBucikKIHsKLQl1bnNpZ25lZCBsb25nIGJ5dGVzOwotCiAJaW5pdF9rc3RhdF9pcnFzKGRlc2MsIGNwdSwgbnIpOwogCi0JaWYgKGRlc2MtPmtzdGF0X2lycXMgIT0gb2xkX2Rlc2MtPmtzdGF0X2lycXMpIHsKLQkJLyogQ29tcHV0ZSBob3cgbWFueSBieXRlcyB3ZSBuZWVkIHBlciBpcnEgYW5kIGFsbG9jYXRlIHRoZW0gKi8KLQkJYnl0ZXMgPSBuciAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwotCi0JCW1lbWNweShkZXNjLT5rc3RhdF9pcnFzLCBvbGRfZGVzYy0+a3N0YXRfaXJxcywgYnl0ZXMpOwotCX0KKwlpZiAoZGVzYy0+a3N0YXRfaXJxcyAhPSBvbGRfZGVzYy0+a3N0YXRfaXJxcykKKwkJbWVtY3B5KGRlc2MtPmtzdGF0X2lycXMsIG9sZF9kZXNjLT5rc3RhdF9pcnFzLAorCQkJIG5yICogc2l6ZW9mKCpkZXNjLT5rc3RhdF9pcnFzKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfa3N0YXRfaXJxcyhzdHJ1Y3QgaXJxX2Rlc2MgKm9sZF9kZXNjLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3NwdXJpb3VzLmMgYi9rZXJuZWwvaXJxL3NwdXJpb3VzLmMKaW5kZXggZGQzNjRjMS4uNGQ1NjgyOSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9zcHVyaW91cy5jCisrKyBiL2tlcm5lbC9pcnEvc3B1cmlvdXMuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJcmV0dXJuIG9rOwogfQogCi1zdGF0aWMgdm9pZCBwb2xsX3NwdXJpb3VzX2lycXModW5zaWduZWQgbG9uZyBkdW1teSkKK3N0YXRpYyB2b2lkIHBvbGxfYWxsX3NoYXJlZF9pcnFzKHZvaWQpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWludCBpOwpAQCAtMTIzLDExICsxMjMsMjMgQEAKIAogCQl0cnlfb25lX2lycShpLCBkZXNjKTsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIHBvbGxfc3B1cmlvdXNfaXJxcyh1bnNpZ25lZCBsb25nIGR1bW15KQoreworCXBvbGxfYWxsX3NoYXJlZF9pcnFzKCk7CiAKIAltb2RfdGltZXIoJnBvbGxfc3B1cmlvdXNfaXJxX3RpbWVyLAogCQkgIGppZmZpZXMgKyBQT0xMX1NQVVJJT1VTX0lSUV9JTlRFUlZBTCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfU0hJUlEKK3ZvaWQgZGVidWdfcG9sbF9hbGxfc2hhcmVkX2lycXModm9pZCkKK3sKKwlwb2xsX2FsbF9zaGFyZWRfaXJxcygpOworfQorI2VuZGlmCisKIC8qCiAgKiBJZiA5OSw5MDAgb2YgdGhlIHByZXZpb3VzIDEwMCwwMDAgaW50ZXJydXB0cyBoYXZlIG5vdCBiZWVuIGhhbmRsZWQKICAqIHRoZW4gYXNzdW1lIHRoYXQgdGhlIElSUSBpcyBzdHVjayBpbiBzb21lIG1hbm5lci4gRHJvcCBhIGRpYWdub3N0aWMKZGlmZiAtLWdpdCBhL2tlcm5lbC9sYXRlbmN5dG9wLmMgYi9rZXJuZWwvbGF0ZW5jeXRvcC5jCmluZGV4IDQ0OWRiNDYuLmNhMDdjNWMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sYXRlbmN5dG9wLmMKKysrIGIva2VybmVsL2xhdGVuY3l0b3AuYwpAQCAtOSw2ICs5LDQ0IEBACiAgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCiAgKiBvZiB0aGUgTGljZW5zZS4KICAqLworCisvKgorICogQ09ORklHX0xBVEVOQ1lUT1AgZW5hYmxlcyBhIGtlcm5lbCBsYXRlbmN5IHRyYWNraW5nIGluZnJhc3RydWN0dXJlIHRoYXQgaXMKKyAqIHVzZWQgYnkgdGhlICJsYXRlbmN5dG9wIiB1c2Vyc3BhY2UgdG9vbC4gVGhlIGxhdGVuY3kgdGhhdCBpcyB0cmFja2VkIGlzIG5vdAorICogdGhlICd0cmFkaXRpb25hbCcgaW50ZXJydXB0IGxhdGVuY3kgKHdoaWNoIGlzIHByaW1hcmlseSBjYXVzZWQgYnkgc29tZXRoaW5nCisgKiBlbHNlIGNvbnN1bWluZyBDUFUpLCBidXQgaW5zdGVhZCwgaXQgaXMgdGhlIGxhdGVuY3kgYW4gYXBwbGljYXRpb24gZW5jb3VudGVycworICogYmVjYXVzZSB0aGUga2VybmVsIHNsZWVwcyBvbiBpdHMgYmVoYWxmIGZvciB2YXJpb3VzIHJlYXNvbnMuCisgKgorICogVGhpcyBjb2RlIHRyYWNrcyAyIGxldmVscyBvZiBzdGF0aXN0aWNzOgorICogMSkgU3lzdGVtIGxldmVsIGxhdGVuY3kKKyAqIDIpIFBlciBwcm9jZXNzIGxhdGVuY3kKKyAqCisgKiBUaGUgbGF0ZW5jeSBpcyBzdG9yZWQgaW4gZml4ZWQgc2l6ZWQgZGF0YSBzdHJ1Y3R1cmVzIGluIGFuIGFjY3VtdWxhdGVkIGZvcm07CisgKiBpZiB0aGUgInNhbWUiIGxhdGVuY3kgY2F1c2UgaXMgaGl0IHR3aWNlLCB0aGlzIHdpbGwgYmUgdHJhY2tlZCBhcyBvbmUgZW50cnkKKyAqIGluIHRoZSBkYXRhIHN0cnVjdHVyZS4gQm90aCB0aGUgY291bnQsIHRvdGFsIGFjY3VtdWxhdGVkIGxhdGVuY3kgYW5kIG1heGltdW0KKyAqIGxhdGVuY3kgYXJlIHRyYWNrZWQgaW4gdGhpcyBkYXRhIHN0cnVjdHVyZS4gV2hlbiB0aGUgZml4ZWQgc2l6ZSBzdHJ1Y3R1cmUgaXMKKyAqIGZ1bGwsIG5vIG5ldyBjYXVzZXMgYXJlIHRyYWNrZWQgdW50aWwgdGhlIGJ1ZmZlciBpcyBmbHVzaGVkIGJ5IHdyaXRpbmcgdG8KKyAqIHRoZSAvcHJvYyBmaWxlOyB0aGUgdXNlcnNwYWNlIHRvb2wgZG9lcyB0aGlzIG9uIGEgcmVndWxhciBiYXNpcy4KKyAqCisgKiBBIGxhdGVuY3kgY2F1c2UgaXMgaWRlbnRpZmllZCBieSBhIHN0cmluZ2lmaWVkIGJhY2t0cmFjZSBhdCB0aGUgcG9pbnQgdGhhdAorICogdGhlIHNjaGVkdWxlciBnZXRzIGludm9rZWQuIFRoZSB1c2VybGFuZCB0b29sIHdpbGwgdXNlIHRoaXMgc3RyaW5nIHRvCisgKiBpZGVudGlmeSB0aGUgY2F1c2Ugb2YgdGhlIGxhdGVuY3kgaW4gaHVtYW4gcmVhZGFibGUgZm9ybS4KKyAqCisgKiBUaGUgaW5mb3JtYXRpb24gaXMgZXhwb3J0ZWQgdmlhIC9wcm9jL2xhdGVuY3lfc3RhdHMgYW5kIC9wcm9jLzxwaWQ+L2xhdGVuY3kuCisgKiBUaGVzZSBmaWxlcyBsb29rIGxpa2UgdGhpczoKKyAqCisgKiBMYXRlbmN5IFRvcCB2ZXJzaW9uIDogdjAuMQorICogNzAgNTk0MzMgNDg5NyBpOTE1X2lycV93YWl0IGRybV9pb2N0bCB2ZnNfaW9jdGwgZG9fdmZzX2lvY3RsIHN5c19pb2N0bAorICogfCAgICB8ICAgIHwgICAgfAorICogfCAgICB8ICAgIHwgICAgKy0tLS0+IHRoZSBzdHJpbmdpZmllZCBiYWNrdHJhY2UKKyAqIHwgICAgfCAgICArLS0tLS0tLS0tPiBUaGUgbWF4aW11bSBsYXRlbmN5IGZvciB0aGlzIGVudHJ5IGluIG1pY3Jvc2Vjb25kcworICogfCAgICArLS0tLS0tLS0tLS0tLS0+IFRoZSBhY2N1bXVsYXRlZCBsYXRlbmN5IGZvciB0aGlzIGVudHJ5IChtaWNyb3NlY29uZHMpCisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLT4gVGhlIG51bWJlciBvZiB0aW1lcyB0aGlzIGVudHJ5IGlzIGhpdAorICoKKyAqIChub3RlOiB0aGUgYXZlcmFnZSBsYXRlbmN5IGlzIHRoZSBhY2N1bXVsYXRlZCBsYXRlbmN5IGRpdmlkZWQgYnkgdGhlIG51bWJlcgorICogb2YgdGltZXMpCisgKi8KKwogI2luY2x1ZGUgPGxpbnV4L2xhdGVuY3l0b3AuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CkBAIC03Miw3ICsxMTAsNyBAQAogCQkJCWZpcnN0bm9ubnVsbCA9IGk7CiAJCQljb250aW51ZTsKIAkJfQotCQlmb3IgKHEgPSAwIDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIIDsgcSsrKSB7CisJCWZvciAocSA9IDA7IHEgPCBMVF9CQUNLVFJBQ0VERVBUSDsgcSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJlY29yZCA9IGxhdC0+YmFja3RyYWNlW3FdOwogCiAJCQlpZiAobGF0ZW5jeV9yZWNvcmRbaV0uYmFja3RyYWNlW3FdICE9IHJlY29yZCkgewpAQCAtMTAxLDMxICsxMzksNTIgQEAKIAltZW1jcHkoJmxhdGVuY3lfcmVjb3JkW2ldLCBsYXQsIHNpemVvZihzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX3N0YWNrdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBsYXRlbmN5X3JlY29yZCAqbGF0KQorLyoKKyAqIEl0ZXJhdG9yIHRvIHN0b3JlIGEgYmFja3RyYWNlIGludG8gYSBsYXRlbmN5IHJlY29yZCBlbnRyeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfc3RhY2t0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJc3RydWN0IGxhdGVuY3lfcmVjb3JkICpsYXQpCiB7CiAJc3RydWN0IHN0YWNrX3RyYWNlIHRyYWNlOwogCiAJbWVtc2V0KCZ0cmFjZSwgMCwgc2l6ZW9mKHRyYWNlKSk7CiAJdHJhY2UubWF4X2VudHJpZXMgPSBMVF9CQUNLVFJBQ0VERVBUSDsKIAl0cmFjZS5lbnRyaWVzID0gJmxhdC0+YmFja3RyYWNlWzBdOwotCXRyYWNlLnNraXAgPSAwOwogCXNhdmVfc3RhY2tfdHJhY2VfdHNrKHRzaywgJnRyYWNlKTsKIH0KIAorLyoqCisgKiBfX2FjY291bnRfc2NoZWR1bGVyX2xhdGVuY3kgLSByZWNvcmQgYW4gb2NjdXJlZCBsYXRlbmN5CisgKiBAdHNrIC0gdGhlIHRhc2sgc3RydWN0IG9mIHRoZSB0YXNrIGhpdHRpbmcgdGhlIGxhdGVuY3kKKyAqIEB1c2VjcyAtIHRoZSBkdXJhdGlvbiBvZiB0aGUgbGF0ZW5jeSBpbiBtaWNyb3NlY29uZHMKKyAqIEBpbnRlciAtIDEgaWYgdGhlIHNsZWVwIHdhcyBpbnRlcnJ1cHRpYmxlLCAwIGlmIHVuaW50ZXJydXB0aWJsZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHJlY29yZGluZyBsYXRlbmN5IGVudHJpZXMKKyAqIGFzIGNhbGxlZCBieSB0aGUgc2NoZWR1bGVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFzIGEgZmV3IHNwZWNpYWwgY2FzZXMgdG8gZGVhbCB3aXRoIG5vcm1hbCAnbm9uLWxhdGVuY3knCisgKiBzbGVlcHM6IHNwZWNpZmljYWxseSwgaW50ZXJydXB0aWJsZSBzbGVlcCBsb25nZXIgdGhhbiA1IG1zZWMgaXMgc2tpcHBlZAorICogc2luY2UgdGhpcyB1c3VhbGx5IGlzIGNhdXNlZCBieSB3YWl0aW5nIGZvciBldmVudHMgdmlhIHNlbGVjdCgpIGFuZCBjby4KKyAqCisgKiBOZWdhdGl2ZSBsYXRlbmNpZXMgKGNhdXNlZCBieSB0aW1lIGdvaW5nIGJhY2t3YXJkcykgYXJlIGFsc28gZXhwbGljaXRseQorICogc2tpcHBlZC4KKyAqLwogdm9pZCBfX3NjaGVkCi1hY2NvdW50X3NjaGVkdWxlcl9sYXRlbmN5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgdXNlY3MsIGludCBpbnRlcikKK19fYWNjb3VudF9zY2hlZHVsZXJfbGF0ZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHVzZWNzLCBpbnQgaW50ZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaSwgcTsKIAlzdHJ1Y3QgbGF0ZW5jeV9yZWNvcmQgbGF0OwogCi0JaWYgKCFsYXRlbmN5dG9wX2VuYWJsZWQpCi0JCXJldHVybjsKLQogCS8qIExvbmcgaW50ZXJydXB0aWJsZSB3YWl0cyBhcmUgZ2VuZXJhbGx5IHVzZXIgcmVxdWVzdGVkLi4uICovCiAJaWYgKGludGVyICYmIHVzZWNzID4gNTAwMCkKIAkJcmV0dXJuOwogCisJLyogTmVnYXRpdmUgc2xlZXBzIGFyZSB0aW1lIGdvaW5nIGJhY2t3YXJkcyAqLworCS8qIFplcm8tdGltZSBzbGVlcHMgYXJlIG5vbi1pbnRlcmVzdGluZyAqLworCWlmICh1c2VjcyA8PSAwKQorCQlyZXR1cm47CisKIAltZW1zZXQoJmxhdCwgMCwgc2l6ZW9mKGxhdCkpOwogCWxhdC5jb3VudCA9IDE7CiAJbGF0LnRpbWUgPSB1c2VjczsKQEAgLTE0MywxMiArMjAyLDEyIEBACiAJaWYgKHRzay0+bGF0ZW5jeV9yZWNvcmRfY291bnQgPj0gTFRfU0FWRUNPVU5UKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTFRfU0FWRUNPVU5UIDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IExUX1NBVkVDT1VOVDsgaSsrKSB7CiAJCXN0cnVjdCBsYXRlbmN5X3JlY29yZCAqbXlsYXQ7CiAJCWludCBzYW1lID0gMTsKIAogCQlteWxhdCA9ICZ0c2stPmxhdGVuY3lfcmVjb3JkW2ldOwotCQlmb3IgKHEgPSAwIDsgcSA8IExUX0JBQ0tUUkFDRURFUFRIIDsgcSsrKSB7CisJCWZvciAocSA9IDA7IHEgPCBMVF9CQUNLVFJBQ0VERVBUSDsgcSsrKSB7CiAJCQl1bnNpZ25lZCBsb25nIHJlY29yZCA9IGxhdC5iYWNrdHJhY2VbcV07CiAKIAkJCWlmIChteWxhdC0+YmFja3RyYWNlW3FdICE9IHJlY29yZCkgewpAQCAtMTg2LDcgKzI0NSw3IEBACiAJZm9yIChpID0gMDsgaSA8IE1BWExSOyBpKyspIHsKIAkJaWYgKGxhdGVuY3lfcmVjb3JkW2ldLmJhY2t0cmFjZVswXSkgewogCQkJaW50IHE7Ci0JCQlzZXFfcHJpbnRmKG0sICIlaSAlbGkgJWxpICIsCisJCQlzZXFfcHJpbnRmKG0sICIlaSAlbHUgJWx1ICIsCiAJCQkJbGF0ZW5jeV9yZWNvcmRbaV0uY291bnQsCiAJCQkJbGF0ZW5jeV9yZWNvcmRbaV0udGltZSwKIAkJCQlsYXRlbmN5X3JlY29yZFtpXS5tYXgpOwpAQCAtMjIzLDcgKzI4Miw3IEBACiAJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbHAsIGxzdGF0c19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHN0YXRzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsc3RhdHNfZm9wcyA9IHsKIAkub3BlbgkJPSBsc3RhdHNfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkud3JpdGUJCT0gbHN0YXRzX3dyaXRlLApAQCAtMjM2LDQgKzI5NSw0IEBACiAJcHJvY19jcmVhdGUoImxhdGVuY3lfc3RhdHMiLCAwNjQ0LCBOVUxMLCAmbHN0YXRzX2ZvcHMpOwogCXJldHVybiAwOwogfQotX19pbml0Y2FsbChpbml0X2xzdGF0c19wcm9jZnMpOworZGV2aWNlX2luaXRjYWxsKGluaXRfbHN0YXRzX3Byb2Nmcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggMTE5NmY1ZC4uNzc2NzIyMyAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtODIyLDcgKzgyMiw3IEBACiAJbXV0ZXhfbG9jaygmbW9kdWxlX211dGV4KTsKIAkvKiBTdG9yZSB0aGUgbmFtZSBvZiB0aGUgbGFzdCB1bmxvYWRlZCBtb2R1bGUgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMgKi8KIAlzdHJsY3B5KGxhc3RfdW5sb2FkZWRfbW9kdWxlLCBtb2QtPm5hbWUsIHNpemVvZihsYXN0X3VubG9hZGVkX21vZHVsZSkpOwotCXVucmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUobW9kLT5uYW1lKTsKKwlkZGVidWdfcmVtb3ZlX21vZHVsZShtb2QtPm5hbWUpOwogCWZyZWVfbW9kdWxlKG1vZCk7CiAKICBvdXQ6CkBAIC0xODI3LDE5ICsxODI3LDEzIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0tBTExTWU1TICovCiAKLXN0YXRpYyB2b2lkIGR5bmFtaWNfcHJpbnRrX3NldHVwKHN0cnVjdCBtb2RfZGVidWcgKmRlYnVnLCB1bnNpZ25lZCBpbnQgbnVtKQorc3RhdGljIHZvaWQgZHluYW1pY19kZWJ1Z19zZXR1cChzdHJ1Y3QgX2RkZWJ1ZyAqZGVidWcsIHVuc2lnbmVkIGludCBudW0pCiB7Ci0jaWZkZWYgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHCi0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLQkJcmVnaXN0ZXJfZHluYW1pY19kZWJ1Z19tb2R1bGUoZGVidWdbaV0ubW9kbmFtZSwKLQkJCQkJICAgICAgZGVidWdbaV0udHlwZSwKLQkJCQkJICAgICAgZGVidWdbaV0ubG9naWNhbF9tb2RuYW1lLAotCQkJCQkgICAgICBkZWJ1Z1tpXS5mbGFnX25hbWVzLAotCQkJCQkgICAgICBkZWJ1Z1tpXS5oYXNoLCBkZWJ1Z1tpXS5oYXNoMik7Ci0JfQotI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyAqLworI2lmZGVmIENPTkZJR19EWU5BTUlDX0RFQlVHCisJaWYgKGRkZWJ1Z19hZGRfbW9kdWxlKGRlYnVnLCBudW0sIGRlYnVnLT5tb2RuYW1lKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJkeW5hbWljIGRlYnVnIGVycm9yIGFkZGluZyBtb2R1bGU6ICVzXG4iLAorCQkJCQlkZWJ1Zy0+bW9kbmFtZSk7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgKm1vZHVsZV9hbGxvY191cGRhdGVfYm91bmRzKHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTIyMTMsMTIgKzIyMDcsMTMgQEAKIAlhZGRfa2FsbHN5bXMobW9kLCBzZWNoZHJzLCBzeW1pbmRleCwgc3RyaW5kZXgsIHNlY3N0cmluZ3MpOwogCiAJaWYgKCFtb2QtPnRhaW50cykgewotCQlzdHJ1Y3QgbW9kX2RlYnVnICpkZWJ1ZzsKKwkJc3RydWN0IF9kZGVidWcgKmRlYnVnOwogCQl1bnNpZ25lZCBpbnQgbnVtX2RlYnVnOwogCiAJCWRlYnVnID0gc2VjdGlvbl9vYmpzKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywgIl9fdmVyYm9zZSIsCiAJCQkJICAgICBzaXplb2YoKmRlYnVnKSwgJm51bV9kZWJ1Zyk7Ci0JCWR5bmFtaWNfcHJpbnRrX3NldHVwKGRlYnVnLCBudW1fZGVidWcpOworCQlpZiAoZGVidWcpCisJCQlkeW5hbWljX2RlYnVnX3NldHVwKGRlYnVnLCBudW1fZGVidWcpOwogCX0KIAogCS8qIHNlY2hkcnNbMF0uc2hfc2l6ZSBpcyBhbHdheXMgemVybyAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKaW5kZXggZTk3NmU1MC4uOGU1ZDlhNiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCkBAIC0xMzcwLDcgKzEzNzAsOCBAQAogCQlpZiAodGFza19jcHV0aW1lX2V4cGlyZWQoJmdyb3VwX3NhbXBsZSwgJnNpZy0+Y3B1dGltZV9leHBpcmVzKSkKIAkJCXJldHVybiAxOwogCX0KLQlyZXR1cm4gMDsKKworCXJldHVybiBzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKaW5kZXggOWQ3OWI3OC4uOGYyMTc5YyAxMDA2NDQKLS0tIGEva2VybmVsL3JlbGF5LmMKKysrIGIva2VybmVsL3JlbGF5LmMKQEAgLTc1MCw3ICs3NTAsNyBAQAogCQkJICogZnJvbSB0aGUgc2NoZWR1bGVyICh0cnlpbmcgdG8gcmUtZ3JhYgogCQkJICogcnEtPmxvY2spLCBzbyBkZWZlciBpdC4KIAkJCSAqLwotCQkJX19tb2RfdGltZXIoJmJ1Zi0+dGltZXIsIGppZmZpZXMgKyAxKTsKKwkJCW1vZF90aW1lcigmYnVmLT50aW1lciwgamlmZmllcyArIDEpOwogCX0KIAogCW9sZCA9IGJ1Zi0+ZGF0YTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggOGUyNTU4Yy4uOWY4NTA2ZCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTMzMSw2ICszMzEsMTMgQEAKICAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyh0YXNrX2dyb3VwX2xvY2spOwogCisjaWZkZWYgQ09ORklHX1NNUAorc3RhdGljIGludCByb290X3Rhc2tfZ3JvdXBfZW1wdHkodm9pZCkKK3sKKwlyZXR1cm4gbGlzdF9lbXB0eSgmcm9vdF90YXNrX2dyb3VwLmNoaWxkcmVuKTsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKICNpZmRlZiBDT05GSUdfVVNFUl9TQ0hFRAogIyBkZWZpbmUgSU5JVF9UQVNLX0dST1VQX0xPQUQJKDIqTklDRV8wX0xPQUQpCkBAIC0zOTEsNiArMzk4LDEzIEBACiAKICNlbHNlCiAKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW50IHJvb3RfdGFza19ncm91cF9lbXB0eSh2b2lkKQoreworCXJldHVybiAxOworfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFza19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGludCBjcHUpIHsgfQogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19ncm91cCAqdGFza19ncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CkBAIC00NjcsMTEgKzQ4MSwxNyBAQAogCXN0cnVjdCBydF9wcmlvX2FycmF5IGFjdGl2ZTsKIAl1bnNpZ25lZCBsb25nIHJ0X25yX3J1bm5pbmc7CiAjaWYgZGVmaW5lZCBDT05GSUdfU01QIHx8IGRlZmluZWQgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JaW50IGhpZ2hlc3RfcHJpbzsgLyogaGlnaGVzdCBxdWV1ZWQgcnQgdGFzayBwcmlvICovCisJc3RydWN0IHsKKwkJaW50IGN1cnI7IC8qIGhpZ2hlc3QgcXVldWVkIHJ0IHRhc2sgcHJpbyAqLworI2lmZGVmIENPTkZJR19TTVAKKwkJaW50IG5leHQ7IC8qIG5leHQgaGlnaGVzdCAqLworI2VuZGlmCisJfSBoaWdoZXN0X3ByaW87CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCiAJdW5zaWduZWQgbG9uZyBydF9ucl9taWdyYXRvcnk7CiAJaW50IG92ZXJsb2FkZWQ7CisJc3RydWN0IHBsaXN0X2hlYWQgcHVzaGFibGVfdGFza3M7CiAjZW5kaWYKIAlpbnQgcnRfdGhyb3R0bGVkOwogCXU2NCBydF90aW1lOwpAQCAtNTQ5LDcgKzU2OSw2IEBACiAJdW5zaWduZWQgbG9uZyBucl9ydW5uaW5nOwogCSNkZWZpbmUgQ1BVX0xPQURfSURYX01BWCA1CiAJdW5zaWduZWQgbG9uZyBjcHVfbG9hZFtDUFVfTE9BRF9JRFhfTUFYXTsKLQl1bnNpZ25lZCBjaGFyIGlkbGVfYXRfdGljazsKICNpZmRlZiBDT05GSUdfTk9fSFoKIAl1bnNpZ25lZCBsb25nIGxhc3RfdGlja19zZWVuOwogCXVuc2lnbmVkIGNoYXIgaW5fbm9oel9yZWNlbnRseTsKQEAgLTU5MCw2ICs2MDksNyBAQAogCXN0cnVjdCByb290X2RvbWFpbiAqcmQ7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAKKwl1bnNpZ25lZCBjaGFyIGlkbGVfYXRfdGljazsKIAkvKiBGb3IgYWN0aXZlIGJhbGFuY2luZyAqLwogCWludCBhY3RpdmVfYmFsYW5jZTsKIAlpbnQgcHVzaF9jcHU7CkBAIC02MTgsOSArNjM4LDYgQEAKIAkvKiBjb3VsZCBhYm92ZSBiZSBycS0+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+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIG5leHQpOwpAQCAtODIxOCwxMSArODYxNiwxNSBAQAogCV9fc2V0X2JpdChNQVhfUlRfUFJJTywgYXJyYXktPmJpdG1hcCk7CiAKICNpZiBkZWZpbmVkIENPTkZJR19TTVAgfHwgZGVmaW5lZCBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQlydF9ycS0+aGlnaGVzdF9wcmlvID0gTUFYX1JUX1BSSU87CisJcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyID0gTUFYX1JUX1BSSU87CisjaWZkZWYgQ09ORklHX1NNUAorCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IE1BWF9SVF9QUklPOworI2VuZGlmCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCiAJcnRfcnEtPnJ0X25yX21pZ3JhdG9yeSA9IDA7CiAJcnRfcnEtPm92ZXJsb2FkZWQgPSAwOworCXBsaXN0X2hlYWRfaW5pdCgmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzLCAmcnEtPmxvY2spOwogI2VuZGlmCiAKIAlydF9ycS0+cnRfdGltZSA9IDA7CkBAIC05NTk4LDcgKzEwMDAwLDcgQEAKIAlzdHJ1Y3QgY3B1YWNjdCAqY2E7CiAJaW50IGNwdTsKIAotCWlmICghY3B1YWNjdF9zdWJzeXMuYWN0aXZlKQorCWlmICh1bmxpa2VseSghY3B1YWNjdF9zdWJzeXMuYWN0aXZlKSkKIAkJcmV0dXJuOwogCiAJY3B1ID0gdGFza19jcHUodHNrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9jbG9jay5jIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKaW5kZXggYTBiMDg1Mi4uMzkwZjMzMiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2Nsb2NrLmMKKysrIGIva2VybmVsL3NjaGVkX2Nsb2NrLmMKQEAgLTI0LDExICsyNCwxMSBAQAogICogVGhlIGNsb2NrOiBzY2hlZF9jbG9ja19jcHUoKSBpcyBtb25vdG9uaWMgcGVyIGNwdSwgYW5kIHNob3VsZCBiZSBzb21ld2hhdAogICogY29uc2lzdGVudCBiZXR3ZWVuIGNwdXMgKG5ldmVyIG1vcmUgdGhhbiAyIGppZmZpZXMgZGlmZmVyZW5jZSkuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIC8qCiAgKiBTY2hlZHVsZXIgY2xvY2sgLSByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiBuYW5vc2VjIHVuaXRzLgpAQCAtNDMsNiArNDMsNyBAQAogc3RhdGljIF9fcmVhZF9tb3N0bHkgaW50IHNjaGVkX2Nsb2NrX3J1bm5pbmc7CiAKICNpZmRlZiBDT05GSUdfSEFWRV9VTlNUQUJMRV9TQ0hFRF9DTE9DSworX19yZWFkX21vc3RseSBpbnQgc2NoZWRfY2xvY2tfc3RhYmxlOwogCiBzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSB7CiAJLyoKQEAgLTg3LDcgKzg4LDcgQEAKIH0KIAogLyoKLSAqIG1pbixtYXggZXhjZXB0IHRoZXkgdGFrZSB3cmFwcGluZyBpbnRvIGFjY291bnQKKyAqIG1pbiwgbWF4IGV4Y2VwdCB0aGV5IHRha2Ugd3JhcHBpbmcgaW50byBhY2NvdW50CiAgKi8KIAogc3RhdGljIGlubGluZSB1NjQgd3JhcF9taW4odTY0IHgsIHU2NCB5KQpAQCAtMTExLDE1ICsxMTIsMTMgQEAKIAlzNjQgZGVsdGEgPSBub3cgLSBzY2QtPnRpY2tfcmF3OwogCXU2NCBjbG9jaywgbWluX2Nsb2NrLCBtYXhfY2xvY2s7CiAKLQlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7Ci0KIAlpZiAodW5saWtlbHkoZGVsdGEgPCAwKSkKIAkJZGVsdGEgPSAwOwogCiAJLyoKIAkgKiBzY2QtPmNsb2NrID0gY2xhbXAoc2NkLT50aWNrX2d0b2QgKyBkZWx0YSwKLQkgKiAJCSAgICAgIG1heChzY2QtPnRpY2tfZ3RvZCwgc2NkLT5jbG9jayksCi0JICogCQkgICAgICBzY2QtPnRpY2tfZ3RvZCArIFRJQ0tfTlNFQyk7CisJICoJCSAgICAgIG1heChzY2QtPnRpY2tfZ3RvZCwgc2NkLT5jbG9jayksCisJICoJCSAgICAgIHNjZC0+dGlja19ndG9kICsgVElDS19OU0VDKTsKIAkgKi8KIAogCWNsb2NrID0gc2NkLT50aWNrX2d0b2QgKyBkZWx0YTsKQEAgLTE0OCwxMiArMTQ3LDEzIEBACiAKIHU2NCBzY2hlZF9jbG9ja19jcHUoaW50IGNwdSkKIHsKLQlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkID0gY3B1X3NkYyhjcHUpOwogCXU2NCBub3csIGNsb2NrLCB0aGlzX2Nsb2NrLCByZW1vdGVfY2xvY2s7CisJc3RydWN0IHNjaGVkX2Nsb2NrX2RhdGEgKnNjZDsKIAotCWlmICh1bmxpa2VseSghc2NoZWRfY2xvY2tfcnVubmluZykpCi0JCXJldHVybiAwdWxsOworCWlmIChzY2hlZF9jbG9ja19zdGFibGUpCisJCXJldHVybiBzY2hlZF9jbG9jaygpOwogCisJc2NkID0gY3B1X3NkYyhjcHUpOwogCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKIAlub3cgPSBzY2hlZF9jbG9jaygpOwogCkBAIC0xOTUsMTQgKzE5NSwxOCBAQAogCiB2b2lkIHNjaGVkX2Nsb2NrX3RpY2sodm9pZCkKIHsKLQlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkID0gdGhpc19zY2QoKTsKKwlzdHJ1Y3Qgc2NoZWRfY2xvY2tfZGF0YSAqc2NkOwogCXU2NCBub3csIG5vd19ndG9kOwogCisJaWYgKHNjaGVkX2Nsb2NrX3N0YWJsZSkKKwkJcmV0dXJuOworCiAJaWYgKHVubGlrZWx5KCFzY2hlZF9jbG9ja19ydW5uaW5nKSkKIAkJcmV0dXJuOwogCiAJV0FSTl9PTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCkpOwogCisJc2NkID0gdGhpc19zY2QoKTsKIAlub3dfZ3RvZCA9IGt0aW1lX3RvX25zKGt0aW1lX2dldCgpKTsKIAlub3cgPSBzY2hlZF9jbG9jaygpOwogCkBAIC0yNTAsNyArMjU0LDcgQEAKIAlyZXR1cm4gc2NoZWRfY2xvY2soKTsKIH0KIAotI2VuZGlmCisjZW5kaWYgLyogQ09ORklHX0hBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sgKi8KIAogdW5zaWduZWQgbG9uZyBsb25nIGNwdV9jbG9jayhpbnQgY3B1KQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2RlYnVnLmMgYi9rZXJuZWwvc2NoZWRfZGVidWcuYwppbmRleCAxNmVlYmE0ZS4uNDY3Y2E3MiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2RlYnVnLmMKKysrIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKQEAgLTI3Miw3ICsyNzIsNiBAQAogCVAobnJfc3dpdGNoZXMpOwogCVAobnJfbG9hZF91cGRhdGVzKTsKIAlQKG5yX3VuaW50ZXJydXB0aWJsZSk7Ci0JU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsdVxuIiwgImppZmZpZXMiLCBqaWZmaWVzKTsKIAlQTihuZXh0X2JhbGFuY2UpOwogCVAoY3Vyci0+cGlkKTsKIAlQTihjbG9jayk7CkBAIC0yODcsOSArMjg2LDYgQEAKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogI2RlZmluZSBQKG4pIFNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlZFxuIiwgI24sIHJxLT5uKTsKIAotCVAoeWxkX2V4cF9lbXB0eSk7Ci0JUCh5bGRfYWN0X2VtcHR5KTsKLQlQKHlsZF9ib3RoX2VtcHR5KTsKIAlQKHlsZF9jb3VudCk7CiAKIAlQKHNjaGVkX3N3aXRjaCk7CkBAIC0zMTQsNyArMzEwLDcgQEAKIAl1NjQgbm93ID0ga3RpbWVfdG9fbnMoa3RpbWVfZ2V0KCkpOwogCWludCBjcHU7CiAKLQlTRVFfcHJpbnRmKG0sICJTY2hlZCBEZWJ1ZyBWZXJzaW9uOiB2MC4wOCwgJXMgJS4qc1xuIiwKKwlTRVFfcHJpbnRmKG0sICJTY2hlZCBEZWJ1ZyBWZXJzaW9uOiB2MC4wOSwgJXMgJS4qc1xuIiwKIAkJaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCiAJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKIAkJaW5pdF91dHNuYW1lKCktPnZlcnNpb24pOwpAQCAtMzI1LDYgKzMyMSw3IEBACiAJU0VRX3ByaW50ZihtLCAiICAuJS00MHM6ICVMZFxuIiwgI3gsIChsb25nIGxvbmcpKHgpKQogI2RlZmluZSBQTih4KSBcCiAJU0VRX3ByaW50ZihtLCAiICAuJS00MHM6ICVMZC4lMDZsZFxuIiwgI3gsIFNQTElUX05TKHgpKQorCVAoamlmZmllcyk7CiAJUE4oc3lzY3RsX3NjaGVkX2xhdGVuY3kpOwogCVBOKHN5c2N0bF9zY2hlZF9taW5fZ3JhbnVsYXJpdHkpOwogCVBOKHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHkpOwpAQCAtMzk3LDYgKzM5NCw3IEBACiAJUE4oc2UudnJ1bnRpbWUpOwogCVBOKHNlLnN1bV9leGVjX3J1bnRpbWUpOwogCVBOKHNlLmF2Z19vdmVybGFwKTsKKwlQTihzZS5hdmdfd2FrZXVwKTsKIAogCW5yX3N3aXRjaGVzID0gcC0+bnZjc3cgKyBwLT5uaXZjc3c7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDA1NjZmMmEuLjM4MTZmMjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtMTMxNCwxNiArMTMxNCw2MyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgd2FrZXVwX2dyYW4oc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpCisvKgorICogQWRhcHRpdmUgZ3JhbnVsYXJpdHkKKyAqCisgKiBzZS0+YXZnX3dha2V1cCBnaXZlcyB0aGUgYXZlcmFnZSB0aW1lIGEgdGFzayBydW5zIHVudGlsIGl0IGRvZXMgYSB3YWtldXAsCisgKiB3aXRoIHRoZSBsaW1pdCBvZiB3YWtldXBfZ3JhbiAtLSB3aGVuIGl0IG5ldmVyIGRvZXMgYSB3YWtldXAuCisgKgorICogU28gdGhlIHNtYWxsZXIgYXZnX3dha2V1cCBpcyB0aGUgZmFzdGVyIHdlIHdhbnQgdGhpcyB0YXNrIHRvIHByZWVtcHQsCisgKiBidXQgd2UgZG9uJ3Qgd2FudCB0byB0cmVhdCB0aGUgcHJlZW1wdGVlIHVuZmFpcmx5IGFuZCB0aGVyZWZvcmUgYWxsb3cgaXQKKyAqIHRvIHJ1biBmb3IgYXQgbGVhc3QgdGhlIGFtb3VudCBvZiB0aW1lIHdlJ2QgbGlrZSB0byBydW4uCisgKgorICogTk9URTogd2UgdXNlIDIqYXZnX3dha2V1cCB0byBpbmNyZWFzZSB0aGUgcHJvYmFiaWxpdHkgb2YgYWN0dWFsbHkgZG9pbmcgb25lCisgKgorICogTk9URTogd2UgdXNlICpucl9ydW5uaW5nIHRvIHNjYWxlIHdpdGggbG9hZCwgdGhpcyBuaWNlbHkgbWF0Y2hlcyB0aGUKKyAqICAgICAgIGRlZ3JhZGluZyBsYXRlbmN5IG9uIGxvYWQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nCithZGFwdGl2ZV9ncmFuKHN0cnVjdCBzY2hlZF9lbnRpdHkgKmN1cnIsIHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQoreworCXU2NCB0aGlzX3J1biA9IGN1cnItPnN1bV9leGVjX3J1bnRpbWUgLSBjdXJyLT5wcmV2X3N1bV9leGVjX3J1bnRpbWU7CisJdTY0IGV4cGVjdGVkX3dha2V1cCA9IDIqc2UtPmF2Z193YWtldXAgKiBjZnNfcnFfb2Yoc2UpLT5ucl9ydW5uaW5nOworCXU2NCBncmFuID0gMDsKKworCWlmICh0aGlzX3J1biA8IGV4cGVjdGVkX3dha2V1cCkKKwkJZ3JhbiA9IGV4cGVjdGVkX3dha2V1cCAtIHRoaXNfcnVuOworCisJcmV0dXJuIG1pbl90KHM2NCwgZ3Jhbiwgc3lzY3RsX3NjaGVkX3dha2V1cF9ncmFudWxhcml0eSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCit3YWtldXBfZ3JhbihzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpjdXJyLCBzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSkKIHsKIAl1bnNpZ25lZCBsb25nIGdyYW4gPSBzeXNjdGxfc2NoZWRfd2FrZXVwX2dyYW51bGFyaXR5OwogCisJaWYgKGNmc19ycV9vZihjdXJyKS0+Y3VyciAmJiBzY2hlZF9mZWF0KEFEQVBUSVZFX0dSQU4pKQorCQlncmFuID0gYWRhcHRpdmVfZ3JhbihjdXJyLCBzZSk7CisKIAkvKgotCSAqIE1vcmUgZWFzaWx5IHByZWVtcHQgLSBuaWNlIHRhc2tzLCB3aGlsZSBub3QgbWFraW5nIGl0IGhhcmRlciBmb3IKLQkgKiArIG5pY2UgdGFza3MuCisJICogU2luY2UgaXRzIGN1cnIgcnVubmluZyBub3csIGNvbnZlcnQgdGhlIGdyYW4gZnJvbSByZWFsLXRpbWUKKwkgKiB0byB2aXJ0dWFsLXRpbWUgaW4gaGlzIHVuaXRzLgogCSAqLwotCWlmICghc2NoZWRfZmVhdChBU1lNX0dSQU4pIHx8IHNlLT5sb2FkLndlaWdodCA+IE5JQ0VfMF9MT0FEKQotCQlncmFuID0gY2FsY19kZWx0YV9mYWlyKHN5c2N0bF9zY2hlZF93YWtldXBfZ3JhbnVsYXJpdHksIHNlKTsKKwlpZiAoc2NoZWRfZmVhdChBU1lNX0dSQU4pKSB7CisJCS8qCisJCSAqIEJ5IHVzaW5nICdzZScgaW5zdGVhZCBvZiAnY3Vycicgd2UgcGVuYWxpemUgbGlnaHQgdGFza3MsIHNvCisJCSAqIHRoZXkgZ2V0IHByZWVtcHRlZCBlYXNpZXIuIFRoYXQgaXMsIGlmICdzZScgPCAnY3VycicgdGhlbgorCQkgKiB0aGUgcmVzdWx0aW5nIGdyYW4gd2lsbCBiZSBsYXJnZXIsIHRoZXJlZm9yZSBwZW5hbGl6aW5nIHRoZQorCQkgKiBsaWdodGVyLCBpZiBvdG9oICdzZScgPiAnY3VycicgdGhlbiB0aGUgcmVzdWx0aW5nIGdyYW4gd2lsbAorCQkgKiBiZSBzbWFsbGVyLCBhZ2FpbiBwZW5hbGl6aW5nIHRoZSBsaWdodGVyIHRhc2suCisJCSAqCisJCSAqIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGJ1ZGRpZXMgd2hlbiB0aGUgbGVmdG1vc3QKKwkJICogdGFzayBpcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgYnVkZHkuCisJCSAqLworCQlpZiAodW5saWtlbHkoc2UtPmxvYWQud2VpZ2h0ICE9IE5JQ0VfMF9MT0FEKSkKKwkJCWdyYW4gPSBjYWxjX2RlbHRhX2ZhaXIoZ3Jhbiwgc2UpOworCX0gZWxzZSB7CisJCWlmICh1bmxpa2VseShjdXJyLT5sb2FkLndlaWdodCAhPSBOSUNFXzBfTE9BRCkpCisJCQlncmFuID0gY2FsY19kZWx0YV9mYWlyKGdyYW4sIGN1cnIpOworCX0KIAogCXJldHVybiBncmFuOwogfQpAQCAtMTM1MCw3ICsxMzk3LDcgQEAKIAlpZiAodmRpZmYgPD0gMCkKIAkJcmV0dXJuIC0xOwogCi0JZ3JhbiA9IHdha2V1cF9ncmFuKGN1cnIpOworCWdyYW4gPSB3YWtldXBfZ3JhbihjdXJyLCBzZSk7CiAJaWYgKHZkaWZmID4gZ3JhbikKIAkJcmV0dXJuIDE7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oIGIva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKaW5kZXggZGE1ZDkzYi4uNzZmNjE3NSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKKysrIGIva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKQEAgLTEsNSArMSw2IEBACiBTQ0hFRF9GRUFUKE5FV19GQUlSX1NMRUVQRVJTLCAxKQotU0NIRURfRkVBVChOT1JNQUxJWkVEX1NMRUVQRVIsIDEpCitTQ0hFRF9GRUFUKE5PUk1BTElaRURfU0xFRVBFUiwgMCkKK1NDSEVEX0ZFQVQoQURBUFRJVkVfR1JBTiwgMSkKIFNDSEVEX0ZFQVQoV0FLRVVQX1BSRUVNUFQsIDEpCiBTQ0hFRF9GRUFUKFNUQVJUX0RFQklULCAxKQogU0NIRURfRkVBVChBRkZJTkVfV0FLRVVQUywgMSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggYmFjMTA2MS4uYzc5ZGM3ODQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC0zLDYgKzMsNDAgQEAKICAqIHBvbGljaWVzKQogICovCiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpydF90YXNrX29mKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQoreworCXJldHVybiBjb250YWluZXJfb2YocnRfc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcnQpOworfQorCisjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCXJldHVybiBydF9ycS0+cnE7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3sKKwlyZXR1cm4gcnRfc2UtPnJ0X3JxOworfQorCisjZWxzZSAvKiBDT05GSUdfUlRfR1JPVVBfU0NIRUQgKi8KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnEgKnJxX29mX3J0X3JxKHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihydF9ycSwgc3RydWN0IHJxLCBydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBydF90YXNrX29mKHJ0X3NlKTsKKwlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKKworCXJldHVybiAmcnEtPnJ0OworfQorCisjZW5kaWYgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisKICNpZmRlZiBDT05GSUdfU01QCiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ0X292ZXJsb2FkZWQoc3RydWN0IHJxICpycSkKQEAgLTM3LDI1ICs3MSw2OSBAQAogCWNwdW1hc2tfY2xlYXJfY3B1KHJxLT5jcHUsIHJxLT5yZC0+cnRvX21hc2spOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfcnRfbWlncmF0aW9uKHN0cnVjdCBycSAqcnEpCitzdGF0aWMgdm9pZCB1cGRhdGVfcnRfbWlncmF0aW9uKHN0cnVjdCBydF9ycSAqcnRfcnEpCiB7Ci0JaWYgKHJxLT5ydC5ydF9ucl9taWdyYXRvcnkgJiYgKHJxLT5ydC5ydF9ucl9ydW5uaW5nID4gMSkpIHsKLQkJaWYgKCFycS0+cnQub3ZlcmxvYWRlZCkgewotCQkJcnRfc2V0X292ZXJsb2FkKHJxKTsKLQkJCXJxLT5ydC5vdmVybG9hZGVkID0gMTsKKwlpZiAocnRfcnEtPnJ0X25yX21pZ3JhdG9yeSAmJiAocnRfcnEtPnJ0X25yX3J1bm5pbmcgPiAxKSkgeworCQlpZiAoIXJ0X3JxLT5vdmVybG9hZGVkKSB7CisJCQlydF9zZXRfb3ZlcmxvYWQocnFfb2ZfcnRfcnEocnRfcnEpKTsKKwkJCXJ0X3JxLT5vdmVybG9hZGVkID0gMTsKIAkJfQotCX0gZWxzZSBpZiAocnEtPnJ0Lm92ZXJsb2FkZWQpIHsKLQkJcnRfY2xlYXJfb3ZlcmxvYWQocnEpOwotCQlycS0+cnQub3ZlcmxvYWRlZCA9IDA7CisJfSBlbHNlIGlmIChydF9ycS0+b3ZlcmxvYWRlZCkgeworCQlydF9jbGVhcl9vdmVybG9hZChycV9vZl9ydF9ycShydF9ycSkpOworCQlydF9ycS0+b3ZlcmxvYWRlZCA9IDA7CiAJfQogfQotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJ0X3Rhc2tfb2Yoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCitzdGF0aWMgdm9pZCBpbmNfcnRfbWlncmF0aW9uKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewotCXJldHVybiBjb250YWluZXJfb2YocnRfc2UsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcnQpOworCWlmIChydF9zZS0+bnJfY3B1c19hbGxvd2VkID4gMSkKKwkJcnRfcnEtPnJ0X25yX21pZ3JhdG9yeSsrOworCisJdXBkYXRlX3J0X21pZ3JhdGlvbihydF9ycSk7CiB9CiAKK3N0YXRpYyB2b2lkIGRlY19ydF9taWdyYXRpb24oc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CisJaWYgKHJ0X3NlLT5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQlydF9ycS0+cnRfbnJfbWlncmF0b3J5LS07CisKKwl1cGRhdGVfcnRfbWlncmF0aW9uKHJ0X3JxKTsKK30KKworc3RhdGljIHZvaWQgZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlwbGlzdF9kZWwoJnAtPnB1c2hhYmxlX3Rhc2tzLCAmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKKwlwbGlzdF9ub2RlX2luaXQoJnAtPnB1c2hhYmxlX3Rhc2tzLCBwLT5wcmlvKTsKKwlwbGlzdF9hZGQoJnAtPnB1c2hhYmxlX3Rhc2tzLCAmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKK30KKworc3RhdGljIHZvaWQgZGVxdWV1ZV9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlwbGlzdF9kZWwoJnAtPnB1c2hhYmxlX3Rhc2tzLCAmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIGVucXVldWVfcHVzaGFibGVfdGFzayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXF1ZXVlX3B1c2hhYmxlX3Rhc2soc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGluY19ydF9taWdyYXRpb24oc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgZGVjX3J0X21pZ3JhdGlvbihzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKwogc3RhdGljIGlubGluZSBpbnQgb25fcnRfcnEoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCiB7CiAJcmV0dXJuICFsaXN0X2VtcHR5KCZydF9zZS0+cnVuX2xpc3QpOwpAQCAtNzksMTYgKzE1Nyw2IEBACiAjZGVmaW5lIGZvcl9lYWNoX2xlYWZfcnRfcnEocnRfcnEsIHJxKSBcCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocnRfcnEsICZycS0+bGVhZl9ydF9ycV9saXN0LCBsZWFmX3J0X3JxX2xpc3QpCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJxICpycV9vZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQotewotCXJldHVybiBydF9ycS0+cnE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3JxICpydF9ycV9vZl9zZShzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSkKLXsKLQlyZXR1cm4gcnRfc2UtPnJ0X3JxOwotfQotCiAjZGVmaW5lIGZvcl9lYWNoX3NjaGVkX3J0X2VudGl0eShydF9zZSkgXAogCWZvciAoOyBydF9zZTsgcnRfc2UgPSBydF9zZS0+cGFyZW50KQogCkBAIC0xMDgsNyArMTc2LDcgQEAKIAlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcpIHsKIAkJaWYgKHJ0X3NlICYmICFvbl9ydF9ycShydF9zZSkpCiAJCQllbnF1ZXVlX3J0X2VudGl0eShydF9zZSk7Ci0JCWlmIChydF9ycS0+aGlnaGVzdF9wcmlvIDwgY3Vyci0+cHJpbykKKwkJaWYgKHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciA8IGN1cnItPnByaW8pCiAJCQlyZXNjaGVkX3Rhc2soY3Vycik7CiAJfQogfQpAQCAtMTc2LDE5ICsyNDQsNiBAQAogI2RlZmluZSBmb3JfZWFjaF9sZWFmX3J0X3JxKHJ0X3JxLCBycSkgXAogCWZvciAocnRfcnEgPSAmcnEtPnJ0OyBydF9ycTsgcnRfcnEgPSBOVUxMKQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqcnFfb2ZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHJ0X3JxLCBzdHJ1Y3QgcnEsIHJ0KTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfcnEgKnJ0X3JxX29mX3NlKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IHJ0X3Rhc2tfb2YocnRfc2UpOwotCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwotCi0JcmV0dXJuICZycS0+cnQ7Ci19Ci0KICNkZWZpbmUgZm9yX2VhY2hfc2NoZWRfcnRfZW50aXR5KHJ0X3NlKSBcCiAJZm9yICg7IHJ0X3NlOyBydF9zZSA9IE5VTEwpCiAKQEAgLTQ3Myw3ICs1MjgsNyBAQAogCXN0cnVjdCBydF9ycSAqcnRfcnEgPSBncm91cF9ydF9ycShydF9zZSk7CiAKIAlpZiAocnRfcnEpCi0JCXJldHVybiBydF9ycS0+aGlnaGVzdF9wcmlvOworCQlyZXR1cm4gcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyOwogI2VuZGlmCiAKIAlyZXR1cm4gcnRfdGFza19vZihydF9zZSktPnByaW87CkBAIC01NDcsOTEgKzYwMiwxNzQgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUKLXZvaWQgaW5jX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQorI2lmIGRlZmluZWQgQ09ORklHX1NNUAorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfaGlnaGVzdF90YXNrX3J0KHN0cnVjdCBycSAqcnEsIGludCBjcHUpOworCitzdGF0aWMgaW5saW5lIGludCBuZXh0X3ByaW8oc3RydWN0IHJxICpycSkKIHsKLQlXQVJOX09OKCFydF9wcmlvKHJ0X3NlX3ByaW8ocnRfc2UpKSk7Ci0JcnRfcnEtPnJ0X25yX3J1bm5pbmcrKzsKLSNpZiBkZWZpbmVkIENPTkZJR19TTVAgfHwgZGVmaW5lZCBDT05GSUdfUlRfR1JPVVBfU0NIRUQKLQlpZiAocnRfc2VfcHJpbyhydF9zZSkgPCBydF9ycS0+aGlnaGVzdF9wcmlvKSB7Ci0jaWZkZWYgQ09ORklHX1NNUAotCQlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOwotI2VuZGlmCisJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0ID0gcGlja19uZXh0X2hpZ2hlc3RfdGFza19ydChycSwgcnEtPmNwdSk7CiAKLQkJcnRfcnEtPmhpZ2hlc3RfcHJpbyA9IHJ0X3NlX3ByaW8ocnRfc2UpOwotI2lmZGVmIENPTkZJR19TTVAKKwlpZiAobmV4dCAmJiBydF9wcmlvKG5leHQtPnByaW8pKQorCQlyZXR1cm4gbmV4dC0+cHJpbzsKKwllbHNlCisJCXJldHVybiBNQVhfUlRfUFJJTzsKK30KKworc3RhdGljIHZvaWQKK2luY19ydF9wcmlvX3NtcChzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbywgaW50IHByZXZfcHJpbykKK3sKKwlzdHJ1Y3QgcnEgKnJxID0gcnFfb2ZfcnRfcnEocnRfcnEpOworCisJaWYgKHByaW8gPCBwcmV2X3ByaW8pIHsKKworCQkvKgorCQkgKiBJZiB0aGUgbmV3IHRhc2sgaXMgaGlnaGVyIGluIHByaW9yaXR5IHRoYW4gYW55dGhpbmcgb24gdGhlCisJCSAqIHJ1bi1xdWV1ZSwgd2Uga25vdyB0aGF0IHRoZSBwcmV2aW91cyBoaWdoIGJlY29tZXMgb3VyCisJCSAqIG5leHQtaGlnaGVzdC4KKwkJICovCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IHByZXZfcHJpbzsKKwogCQlpZiAocnEtPm9ubGluZSkKLQkJCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LAotCQkJCSAgIHJ0X3NlX3ByaW8ocnRfc2UpKTsKLSNlbmRpZgotCX0KLSNlbmRpZgotI2lmZGVmIENPTkZJR19TTVAKLQlpZiAocnRfc2UtPm5yX2NwdXNfYWxsb3dlZCA+IDEpIHsKLQkJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKKwkJCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LCBwcmlvKTsKIAotCQlycS0+cnQucnRfbnJfbWlncmF0b3J5Kys7Ci0JfQorCX0gZWxzZSBpZiAocHJpbyA9PSBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnIpCisJCS8qCisJCSAqIElmIHRoZSBuZXh0IHRhc2sgaXMgZXF1YWwgaW4gcHJpb3JpdHkgdG8gdGhlIGhpZ2hlc3Qgb24KKwkJICogdGhlIHJ1bi1xdWV1ZSwgdGhlbiB3ZSBpbXBsaWNpdGx5IGtub3cgdGhhdCB0aGUgbmV4dCBoaWdoZXN0CisJCSAqIHRhc2sgY2Fubm90IGJlIGFueSBsb3dlciB0aGFuIGN1cnJlbnQKKwkJICovCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IHByaW87CisJZWxzZSBpZiAocHJpbyA8IHJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCkKKwkJLyoKKwkJICogT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIHJlY29tcHV0ZSBuZXh0LWhpZ2hlc3QKKwkJICovCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8ubmV4dCA9IG5leHRfcHJpbyhycSk7Cit9CiAKLQl1cGRhdGVfcnRfbWlncmF0aW9uKHJxX29mX3J0X3JxKHJ0X3JxKSk7Ci0jZW5kaWYKK3N0YXRpYyB2b2lkCitkZWNfcnRfcHJpb19zbXAoc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8sIGludCBwcmV2X3ByaW8pCit7CisJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKKworCWlmIChydF9ycS0+cnRfbnJfcnVubmluZyAmJiAocHJpbyA8PSBydF9ycS0+aGlnaGVzdF9wcmlvLm5leHQpKQorCQlydF9ycS0+aGlnaGVzdF9wcmlvLm5leHQgPSBuZXh0X3ByaW8ocnEpOworCisJaWYgKHJxLT5vbmxpbmUgJiYgcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyICE9IHByZXZfcHJpbykKKwkJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsIHJ0X3JxLT5oaWdoZXN0X3ByaW8uY3Vycik7Cit9CisKKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KKworc3RhdGljIGlubGluZQordm9pZCBpbmNfcnRfcHJpb19zbXAoc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8sIGludCBwcmV2X3ByaW8pIHt9CitzdGF0aWMgaW5saW5lCit2b2lkIGRlY19ydF9wcmlvX3NtcChzdHJ1Y3QgcnRfcnEgKnJ0X3JxLCBpbnQgcHJpbywgaW50IHByZXZfcHJpbykge30KKworI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAorc3RhdGljIHZvaWQKK2luY19ydF9wcmlvKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKQoreworCWludCBwcmV2X3ByaW8gPSBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnI7CisKKwlpZiAocHJpbyA8IHByZXZfcHJpbykKKwkJcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyID0gcHJpbzsKKworCWluY19ydF9wcmlvX3NtcChydF9ycSwgcHJpbywgcHJldl9wcmlvKTsKK30KKworc3RhdGljIHZvaWQKK2RlY19ydF9wcmlvKHN0cnVjdCBydF9ycSAqcnRfcnEsIGludCBwcmlvKQoreworCWludCBwcmV2X3ByaW8gPSBydF9ycS0+aGlnaGVzdF9wcmlvLmN1cnI7CisKKwlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcpIHsKKworCQlXQVJOX09OKHByaW8gPCBwcmV2X3ByaW8pOworCisJCS8qCisJCSAqIFRoaXMgbWF5IGhhdmUgYmVlbiBvdXIgaGlnaGVzdCB0YXNrLCBhbmQgdGhlcmVmb3JlCisJCSAqIHdlIG1heSBoYXZlIHNvbWUgcmVjb21wdXRhdGlvbiB0byBkbworCQkgKi8KKwkJaWYgKHByaW8gPT0gcHJldl9wcmlvKSB7CisJCQlzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXkgPSAmcnRfcnEtPmFjdGl2ZTsKKworCQkJcnRfcnEtPmhpZ2hlc3RfcHJpby5jdXJyID0KKwkJCQlzY2hlZF9maW5kX2ZpcnN0X2JpdChhcnJheS0+Yml0bWFwKTsKKwkJfQorCisJfSBlbHNlCisJCXJ0X3JxLT5oaWdoZXN0X3ByaW8uY3VyciA9IE1BWF9SVF9QUklPOworCisJZGVjX3J0X3ByaW9fc21wKHJ0X3JxLCBwcmlvLCBwcmV2X3ByaW8pOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVjX3J0X3ByaW8oc3RydWN0IHJ0X3JxICpydF9ycSwgaW50IHByaW8pIHt9CisKKyNlbmRpZiAvKiBDT05GSUdfU01QIHx8IENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLworCiAjaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECisKK3N0YXRpYyB2b2lkCitpbmNfcnRfZ3JvdXAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CiAJaWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKQogCQlydF9ycS0+cnRfbnJfYm9vc3RlZCsrOwogCiAJaWYgKHJ0X3JxLT50ZykKIAkJc3RhcnRfcnRfYmFuZHdpZHRoKCZydF9ycS0+dGctPnJ0X2JhbmR3aWR0aCk7Ci0jZWxzZQorfQorCitzdGF0aWMgdm9pZAorZGVjX3J0X2dyb3VwKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQoreworCWlmIChydF9zZV9ib29zdGVkKHJ0X3NlKSkKKwkJcnRfcnEtPnJ0X25yX2Jvb3N0ZWQtLTsKKworCVdBUk5fT04oIXJ0X3JxLT5ydF9ucl9ydW5uaW5nICYmIHJ0X3JxLT5ydF9ucl9ib29zdGVkKTsKK30KKworI2Vsc2UgLyogQ09ORklHX1JUX0dST1VQX1NDSEVEICovCisKK3N0YXRpYyB2b2lkCitpbmNfcnRfZ3JvdXAoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UsIHN0cnVjdCBydF9ycSAqcnRfcnEpCit7CiAJc3RhcnRfcnRfYmFuZHdpZHRoKCZkZWZfcnRfYmFuZHdpZHRoKTsKLSNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lCit2b2lkIGRlY19ydF9ncm91cChzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkge30KKworI2VuZGlmIC8qIENPTkZJR19SVF9HUk9VUF9TQ0hFRCAqLworCitzdGF0aWMgaW5saW5lCit2b2lkIGluY19ydF90YXNrcyhzdHJ1Y3Qgc2NoZWRfcnRfZW50aXR5ICpydF9zZSwgc3RydWN0IHJ0X3JxICpydF9ycSkKK3sKKwlpbnQgcHJpbyA9IHJ0X3NlX3ByaW8ocnRfc2UpOworCisJV0FSTl9PTighcnRfcHJpbyhwcmlvKSk7CisJcnRfcnEtPnJ0X25yX3J1bm5pbmcrKzsKKworCWluY19ydF9wcmlvKHJ0X3JxLCBwcmlvKTsKKwlpbmNfcnRfbWlncmF0aW9uKHJ0X3NlLCBydF9ycSk7CisJaW5jX3J0X2dyb3VwKHJ0X3NlLCBydF9ycSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUKIHZvaWQgZGVjX3J0X3Rhc2tzKHN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlLCBzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewotI2lmZGVmIENPTkZJR19TTVAKLQlpbnQgaGlnaGVzdF9wcmlvID0gcnRfcnEtPmhpZ2hlc3RfcHJpbzsKLSNlbmRpZgotCiAJV0FSTl9PTighcnRfcHJpbyhydF9zZV9wcmlvKHJ0X3NlKSkpOwogCVdBUk5fT04oIXJ0X3JxLT5ydF9ucl9ydW5uaW5nKTsKIAlydF9ycS0+cnRfbnJfcnVubmluZy0tOwotI2lmIGRlZmluZWQgQ09ORklHX1NNUCB8fCBkZWZpbmVkIENPTkZJR19SVF9HUk9VUF9TQ0hFRAotCWlmIChydF9ycS0+cnRfbnJfcnVubmluZykgewotCQlzdHJ1Y3QgcnRfcHJpb19hcnJheSAqYXJyYXk7CiAKLQkJV0FSTl9PTihydF9zZV9wcmlvKHJ0X3NlKSA8IHJ0X3JxLT5oaWdoZXN0X3ByaW8pOwotCQlpZiAocnRfc2VfcHJpbyhydF9zZSkgPT0gcnRfcnEtPmhpZ2hlc3RfcHJpbykgewotCQkJLyogcmVjYWxjdWxhdGUgKi8KLQkJCWFycmF5ID0gJnJ0X3JxLT5hY3RpdmU7Ci0JCQlydF9ycS0+aGlnaGVzdF9wcmlvID0KLQkJCQlzY2hlZF9maW5kX2ZpcnN0X2JpdChhcnJheS0+Yml0bWFwKTsKLQkJfSAvKiBvdGhlcndpc2UgbGVhdmUgcnEtPmhpZ2hlc3QgcHJpbyBhbG9uZSAqLwotCX0gZWxzZQotCQlydF9ycS0+aGlnaGVzdF9wcmlvID0gTUFYX1JUX1BSSU87Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHJ0X3NlLT5ucl9jcHVzX2FsbG93ZWQgPiAxKSB7Ci0JCXN0cnVjdCBycSAqcnEgPSBycV9vZl9ydF9ycShydF9ycSk7Ci0JCXJxLT5ydC5ydF9ucl9taWdyYXRvcnktLTsKLQl9Ci0KLQlpZiAocnRfcnEtPmhpZ2hlc3RfcHJpbyAhPSBoaWdoZXN0X3ByaW8pIHsKLQkJc3RydWN0IHJxICpycSA9IHJxX29mX3J0X3JxKHJ0X3JxKTsKLQotCQlpZiAocnEtPm9ubGluZSkKLQkJCWNwdXByaV9zZXQoJnJxLT5yZC0+Y3B1cHJpLCBycS0+Y3B1LAotCQkJCSAgIHJ0X3JxLT5oaWdoZXN0X3ByaW8pOwotCX0KLQotCXVwZGF0ZV9ydF9taWdyYXRpb24ocnFfb2ZfcnRfcnEocnRfcnEpKTsKLSNlbmRpZiAvKiBDT05GSUdfU01QICovCi0jaWZkZWYgQ09ORklHX1JUX0dST1VQX1NDSEVECi0JaWYgKHJ0X3NlX2Jvb3N0ZWQocnRfc2UpKQotCQlydF9ycS0+cnRfbnJfYm9vc3RlZC0tOwotCi0JV0FSTl9PTighcnRfcnEtPnJ0X25yX3J1bm5pbmcgJiYgcnRfcnEtPnJ0X25yX2Jvb3N0ZWQpOwotI2VuZGlmCisJZGVjX3J0X3ByaW8ocnRfcnEsIHJ0X3NlX3ByaW8ocnRfc2UpKTsKKwlkZWNfcnRfbWlncmF0aW9uKHJ0X3NlLCBydF9ycSk7CisJZGVjX3J0X2dyb3VwKHJ0X3NlLCBydF9ycSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZW5xdWV1ZV9ydF9lbnRpdHkoc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2UpCkBAIC03MTgsNiArODU2LDkgQEAKIAogCWVucXVldWVfcnRfZW50aXR5KHJ0X3NlKTsKIAorCWlmICghdGFza19jdXJyZW50KHJxLCBwKSAmJiBwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCiAJaW5jX2NwdV9sb2FkKHJxLCBwLT5zZS5sb2FkLndlaWdodCk7CiB9CiAKQEAgLTcyOCw2ICs4NjksOCBAQAogCXVwZGF0ZV9jdXJyX3J0KHJxKTsKIAlkZXF1ZXVlX3J0X2VudGl0eShydF9zZSk7CiAKKwlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCiAJZGVjX2NwdV9sb2FkKHJxLCBwLT5zZS5sb2FkLndlaWdodCk7CiB9CiAKQEAgLTg3OCw3ICsxMDIxLDcgQEAKIAlyZXR1cm4gbmV4dDsKIH0KIAotc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlja19uZXh0X3Rhc2tfcnQoc3RydWN0IHJxICpycSkKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9waWNrX25leHRfdGFza19ydChzdHJ1Y3QgcnEgKnJxKQogewogCXN0cnVjdCBzY2hlZF9ydF9lbnRpdHkgKnJ0X3NlOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKQEAgLTkwMCw2ICsxMDQzLDE4IEBACiAKIAlwID0gcnRfdGFza19vZihydF9zZSk7CiAJcC0+c2UuZXhlY19zdGFydCA9IHJxLT5jbG9jazsKKworCXJldHVybiBwOworfQorCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpwaWNrX25leHRfdGFza19ydChzdHJ1Y3QgcnEgKnJxKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IF9waWNrX25leHRfdGFza19ydChycSk7CisKKwkvKiBUaGUgcnVubmluZyB0YXNrIGlzIG5ldmVyIGVsaWdpYmxlIGZvciBwdXNoaW5nICovCisJaWYgKHApCisJCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKIAlyZXR1cm4gcDsKIH0KIApAQCAtOTA3LDYgKzEwNjIsMTMgQEAKIHsKIAl1cGRhdGVfY3Vycl9ydChycSk7CiAJcC0+c2UuZXhlY19zdGFydCA9IDA7CisKKwkvKgorCSAqIFRoZSBwcmV2aW91cyB0YXNrIG5lZWRzIHRvIGJlIG1hZGUgZWxpZ2libGUgZm9yIHB1c2hpbmcKKwkgKiBpZiBpdCBpcyBzdGlsbCBhY3RpdmUKKwkgKi8KKwlpZiAocC0+c2Uub25fcnEgJiYgcC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkKKwkJZW5xdWV1ZV9wdXNoYWJsZV90YXNrKHJxLCBwKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTEwNzIsNyArMTIzNCw3IEBACiAJCX0KIAogCQkvKiBJZiB0aGlzIHJxIGlzIHN0aWxsIHN1aXRhYmxlIHVzZSBpdC4gKi8KLQkJaWYgKGxvd2VzdF9ycS0+cnQuaGlnaGVzdF9wcmlvID4gdGFzay0+cHJpbykKKwkJaWYgKGxvd2VzdF9ycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIgPiB0YXNrLT5wcmlvKQogCQkJYnJlYWs7CiAKIAkJLyogdHJ5IGFnYWluICovCkBAIC0xMDgzLDYgKzEyNDUsMzEgQEAKIAlyZXR1cm4gbG93ZXN0X3JxOwogfQogCitzdGF0aWMgaW5saW5lIGludCBoYXNfcHVzaGFibGVfdGFza3Moc3RydWN0IHJxICpycSkKK3sKKwlyZXR1cm4gIXBsaXN0X2hlYWRfZW1wdHkoJnJxLT5ydC5wdXNoYWJsZV90YXNrcyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpY2tfbmV4dF9wdXNoYWJsZV90YXNrKHN0cnVjdCBycSAqcnEpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCisJaWYgKCFoYXNfcHVzaGFibGVfdGFza3MocnEpKQorCQlyZXR1cm4gTlVMTDsKKworCXAgPSBwbGlzdF9maXJzdF9lbnRyeSgmcnEtPnJ0LnB1c2hhYmxlX3Rhc2tzLAorCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0LCBwdXNoYWJsZV90YXNrcyk7CisKKwlCVUdfT04ocnEtPmNwdSAhPSB0YXNrX2NwdShwKSk7CisJQlVHX09OKHRhc2tfY3VycmVudChycSwgcCkpOworCUJVR19PTihwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPD0gMSk7CisKKwlCVUdfT04oIXAtPnNlLm9uX3JxKTsKKwlCVUdfT04oIXJ0X3Rhc2socCkpOworCisJcmV0dXJuIHA7Cit9CisKIC8qCiAgKiBJZiB0aGUgY3VycmVudCBDUFUgaGFzIG1vcmUgdGhhbiBvbmUgUlQgdGFzaywgc2VlIGlmIHRoZSBub24KICAqIHJ1bm5pbmcgdGFzayBjYW4gbWlncmF0ZSBvdmVyIHRvIGEgQ1BVIHRoYXQgaXMgcnVubmluZyBhIHRhc2sKQEAgLTEwOTIsMTMgKzEyNzksMTEgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHRfdGFzazsKIAlzdHJ1Y3QgcnEgKmxvd2VzdF9ycTsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgcGFyYW5vaWQgPSBSVF9NQVhfVFJJRVM7CiAKIAlpZiAoIXJxLT5ydC5vdmVybG9hZGVkKQogCQlyZXR1cm4gMDsKIAotCW5leHRfdGFzayA9IHBpY2tfbmV4dF9oaWdoZXN0X3Rhc2tfcnQocnEsIC0xKTsKKwluZXh0X3Rhc2sgPSBwaWNrX25leHRfcHVzaGFibGVfdGFzayhycSk7CiAJaWYgKCFuZXh0X3Rhc2spCiAJCXJldHVybiAwOwogCkBAIC0xMTI3LDE2ICsxMzEyLDM0IEBACiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAkJLyoKIAkJICogZmluZCBsb2NrX2xvd2VzdF9ycSByZWxlYXNlcyBycS0+bG9jawotCQkgKiBzbyBpdCBpcyBwb3NzaWJsZSB0aGF0IG5leHRfdGFzayBoYXMgY2hhbmdlZC4KLQkJICogSWYgaXQgaGFzLCB0aGVuIHRyeSBhZ2Fpbi4KKwkJICogc28gaXQgaXMgcG9zc2libGUgdGhhdCBuZXh0X3Rhc2sgaGFzIG1pZ3JhdGVkLgorCQkgKgorCQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSB0YXNrIGlzIHN0aWxsIG9uIHRoZSBzYW1lCisJCSAqIHJ1bi1xdWV1ZSBhbmQgaXMgYWxzbyBzdGlsbCB0aGUgbmV4dCB0YXNrIGVsaWdpYmxlIGZvcgorCQkgKiBwdXNoaW5nLgogCQkgKi8KLQkJdGFzayA9IHBpY2tfbmV4dF9oaWdoZXN0X3Rhc2tfcnQocnEsIC0xKTsKLQkJaWYgKHVubGlrZWx5KHRhc2sgIT0gbmV4dF90YXNrKSAmJiB0YXNrICYmIHBhcmFub2lkLS0pIHsKLQkJCXB1dF90YXNrX3N0cnVjdChuZXh0X3Rhc2spOwotCQkJbmV4dF90YXNrID0gdGFzazsKLQkJCWdvdG8gcmV0cnk7CisJCXRhc2sgPSBwaWNrX25leHRfcHVzaGFibGVfdGFzayhycSk7CisJCWlmICh0YXNrX2NwdShuZXh0X3Rhc2spID09IHJxLT5jcHUgJiYgdGFzayA9PSBuZXh0X3Rhc2spIHsKKwkJCS8qCisJCQkgKiBJZiB3ZSBnZXQgaGVyZSwgdGhlIHRhc2sgaGFzbnQgbW92ZWQgYXQgYWxsLCBidXQKKwkJCSAqIGl0IGhhcyBmYWlsZWQgdG8gcHVzaC4gIFdlIHdpbGwgbm90IHRyeSBhZ2FpbiwKKwkJCSAqIHNpbmNlIHRoZSBvdGhlciBjcHVzIHdpbGwgcHVsbCBmcm9tIHVzIHdoZW4gdGhleQorCQkJICogYXJlIHJlYWR5LgorCQkJICovCisJCQlkZXF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIG5leHRfdGFzayk7CisJCQlnb3RvIG91dDsKIAkJfQotCQlnb3RvIG91dDsKKworCQlpZiAoIXRhc2spCisJCQkvKiBObyBtb3JlIHRhc2tzLCBqdXN0IGV4aXQgKi8KKwkJCWdvdG8gb3V0OworCisJCS8qCisJCSAqIFNvbWV0aGluZyBoYXMgc2hpZnRlZCwgdHJ5IGFnYWluLgorCQkgKi8KKwkJcHV0X3Rhc2tfc3RydWN0KG5leHRfdGFzayk7CisJCW5leHRfdGFzayA9IHRhc2s7CisJCWdvdG8gcmV0cnk7CiAJfQogCiAJZGVhY3RpdmF0ZV90YXNrKHJxLCBuZXh0X3Rhc2ssIDApOwpAQCAtMTE0NywyMyArMTM1MCwxMiBAQAogCiAJZG91YmxlX3VubG9ja19iYWxhbmNlKHJxLCBsb3dlc3RfcnEpOwogCi0JcmV0ID0gMTsKIG91dDoKIAlwdXRfdGFza19zdHJ1Y3QobmV4dF90YXNrKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDE7CiB9CiAKLS8qCi0gKiBUT0RPOiBDdXJyZW50bHkgd2UganVzdCB1c2UgdGhlIHNlY29uZCBoaWdoZXN0IHByaW8gdGFzayBvbgotICogICAgICAgdGhlIHF1ZXVlLCBhbmQgc3RvcCB3aGVuIGl0IGNhbid0IG1pZ3JhdGUgKG9yIHRoZXJlJ3MKLSAqICAgICAgIG5vIG1vcmUgUlQgdGFza3MpLiAgVGhlcmUgbWF5IGJlIGEgY2FzZSB3aGVyZSBhIGxvd2VyCi0gKiAgICAgICBwcmlvcml0eSBSVCB0YXNrIGhhcyBhIGRpZmZlcmVudCBhZmZpbml0eSB0aGFuIHRoZQotICogICAgICAgaGlnaGVyIFJUIHRhc2suIEluIHRoaXMgY2FzZSB0aGUgbG93ZXIgUlQgdGFzayBjb3VsZAotICogICAgICAgcG9zc2libHkgYmUgYWJsZSB0byBtaWdyYXRlIHdoZXJlIGFzIHRoZSBoaWdoZXIgcHJpb3JpdHkKLSAqICAgICAgIFJUIHRhc2sgY291bGQgbm90LiAgV2UgY3VycmVudGx5IGlnbm9yZSB0aGlzIGlzc3VlLgotICogICAgICAgRW5oYW5jZW1lbnRzIGFyZSB3ZWxjb21lIQotICovCiBzdGF0aWMgdm9pZCBwdXNoX3J0X3Rhc2tzKHN0cnVjdCBycSAqcnEpCiB7CiAJLyogcHVzaF9ydF90YXNrIHdpbGwgcmV0dXJuIHRydWUgaWYgaXQgbW92ZWQgYW4gUlQgKi8KQEAgLTExNzQsMzMgKzEzNjYsMzUgQEAKIHN0YXRpYyBpbnQgcHVsbF9ydF90YXNrKHN0cnVjdCBycSAqdGhpc19ycSkKIHsKIAlpbnQgdGhpc19jcHUgPSB0aGlzX3JxLT5jcHUsIHJldCA9IDAsIGNwdTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpuZXh0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAlzdHJ1Y3QgcnEgKnNyY19ycTsKIAogCWlmIChsaWtlbHkoIXJ0X292ZXJsb2FkZWQodGhpc19ycSkpKQogCQlyZXR1cm4gMDsKIAotCW5leHQgPSBwaWNrX25leHRfdGFza19ydCh0aGlzX3JxKTsKLQogCWZvcl9lYWNoX2NwdShjcHUsIHRoaXNfcnEtPnJkLT5ydG9fbWFzaykgewogCQlpZiAodGhpc19jcHUgPT0gY3B1KQogCQkJY29udGludWU7CiAKIAkJc3JjX3JxID0gY3B1X3JxKGNwdSk7CisKKwkJLyoKKwkJICogRG9uJ3QgYm90aGVyIHRha2luZyB0aGUgc3JjX3JxLT5sb2NrIGlmIHRoZSBuZXh0IGhpZ2hlc3QKKwkJICogdGFzayBpcyBrbm93biB0byBiZSBsb3dlci1wcmlvcml0eSB0aGFuIG91ciBjdXJyZW50IHRhc2suCisJCSAqIFRoaXMgbWF5IGxvb2sgcmFjeSwgYnV0IGlmIHRoaXMgdmFsdWUgaXMgYWJvdXQgdG8gZ28KKwkJICogbG9naWNhbGx5IGhpZ2hlciwgdGhlIHNyY19ycSB3aWxsIHB1c2ggdGhpcyB0YXNrIGF3YXkuCisJCSAqIEFuZCBpZiBpdHMgZ29pbmcgbG9naWNhbGx5IGxvd2VyLCB3ZSBkbyBub3QgY2FyZQorCQkgKi8KKwkJaWYgKHNyY19ycS0+cnQuaGlnaGVzdF9wcmlvLm5leHQgPj0KKwkJICAgIHRoaXNfcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyKQorCQkJY29udGludWU7CisKIAkJLyoKIAkJICogV2UgY2FuIHBvdGVudGlhbGx5IGRyb3AgdGhpc19ycSdzIGxvY2sgaW4KIAkJICogZG91YmxlX2xvY2tfYmFsYW5jZSwgYW5kIGFub3RoZXIgQ1BVIGNvdWxkCi0JCSAqIHN0ZWFsIG91ciBuZXh0IHRhc2sgLSBoZW5jZSB3ZSBtdXN0IGNhdXNlCi0JCSAqIHRoZSBjYWxsZXIgdG8gcmVjYWxjdWxhdGUgdGhlIG5leHQgdGFzawotCQkgKiBpbiB0aGF0IGNhc2U6CisJCSAqIGFsdGVyIHRoaXNfcnEKIAkJICovCi0JCWlmIChkb3VibGVfbG9ja19iYWxhbmNlKHRoaXNfcnEsIHNyY19ycSkpIHsKLQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkX25leHQgPSBuZXh0OwotCi0JCQluZXh0ID0gcGlja19uZXh0X3Rhc2tfcnQodGhpc19ycSk7Ci0JCQlpZiAobmV4dCAhPSBvbGRfbmV4dCkKLQkJCQlyZXQgPSAxOwotCQl9CisJCWRvdWJsZV9sb2NrX2JhbGFuY2UodGhpc19ycSwgc3JjX3JxKTsKIAogCQkvKgogCQkgKiBBcmUgdGhlcmUgc3RpbGwgcHVsbGFibGUgUlQgdGFza3M/CkBAIC0xMjE0LDcgKzE0MDgsNyBAQAogCQkgKiBEbyB3ZSBoYXZlIGFuIFJUIHRhc2sgdGhhdCBwcmVlbXB0cwogCQkgKiB0aGUgdG8tYmUtc2NoZWR1bGVkIHRhc2s/CiAJCSAqLwotCQlpZiAocCAmJiAoIW5leHQgfHwgKHAtPnByaW8gPCBuZXh0LT5wcmlvKSkpIHsKKwkJaWYgKHAgJiYgKHAtPnByaW8gPCB0aGlzX3JxLT5ydC5oaWdoZXN0X3ByaW8uY3VycikpIHsKIAkJCVdBUk5fT04ocCA9PSBzcmNfcnEtPmN1cnIpOwogCQkJV0FSTl9PTighcC0+c2Uub25fcnEpOwogCkBAIC0xMjI0LDEyICsxNDE4LDkgQEAKIAkJCSAqIFRoaXMgaXMganVzdCB0aGF0IHAgaXMgd2FrZWluZyB1cCBhbmQgaGFzbid0CiAJCQkgKiBoYWQgYSBjaGFuY2UgdG8gc2NoZWR1bGUuIFdlIG9ubHkgcHVsbAogCQkJICogcCBpZiBpdCBpcyBsb3dlciBpbiBwcmlvcml0eSB0aGFuIHRoZQotCQkJICogY3VycmVudCB0YXNrIG9uIHRoZSBydW4gcXVldWUgb3IKLQkJCSAqIHRoaXNfcnEgbmV4dCB0YXNrIGlzIGxvd2VyIGluIHByaW8gdGhhbgotCQkJICogdGhlIGN1cnJlbnQgdGFzayBvbiB0aGF0IHJxLgorCQkJICogY3VycmVudCB0YXNrIG9uIHRoZSBydW4gcXVldWUKIAkJCSAqLwotCQkJaWYgKHAtPnByaW8gPCBzcmNfcnEtPmN1cnItPnByaW8gfHwKLQkJCSAgICAobmV4dCAmJiBuZXh0LT5wcmlvIDwgc3JjX3JxLT5jdXJyLT5wcmlvKSkKKwkJCWlmIChwLT5wcmlvIDwgc3JjX3JxLT5jdXJyLT5wcmlvKQogCQkJCWdvdG8gc2tpcDsKIAogCQkJcmV0ID0gMTsKQEAgLTEyNDIsMTMgKzE0MzMsNyBAQAogCQkJICogY2FzZSB0aGVyZSdzIGFuIGV2ZW4gaGlnaGVyIHByaW8gdGFzawogCQkJICogaW4gYW5vdGhlciBydW5xdWV1ZS4gKGxvdyBsaWtlbHlob29kCiAJCQkgKiBidXQgcG9zc2libGUpCi0JCQkgKgotCQkJICogVXBkYXRlIG5leHQgc28gdGhhdCB3ZSB3b24ndCBwaWNrIGEgdGFzawotCQkJICogb24gYW5vdGhlciBjcHUgd2l0aCBhIHByaW9yaXR5IGxvd2VyIChvciBlcXVhbCkKLQkJCSAqIHRoYW4gdGhlIG9uZSB3ZSBqdXN0IHBpY2tlZC4KIAkJCSAqLwotCQkJbmV4dCA9IHA7Ci0KIAkJfQogIHNraXA6CiAJCWRvdWJsZV91bmxvY2tfYmFsYW5jZSh0aGlzX3JxLCBzcmNfcnEpOwpAQCAtMTI2MCwyNCArMTQ0NSwyNyBAQAogc3RhdGljIHZvaWQgcHJlX3NjaGVkdWxlX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIHsKIAkvKiBUcnkgdG8gcHVsbCBSVCB0YXNrcyBoZXJlIGlmIHdlIGxvd2VyIHRoaXMgcnEncyBwcmlvICovCi0JaWYgKHVubGlrZWx5KHJ0X3Rhc2socHJldikpICYmIHJxLT5ydC5oaWdoZXN0X3ByaW8gPiBwcmV2LT5wcmlvKQorCWlmICh1bmxpa2VseShydF90YXNrKHByZXYpKSAmJiBycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIgPiBwcmV2LT5wcmlvKQogCQlwdWxsX3J0X3Rhc2socnEpOwogfQogCisvKgorICogYXNzdW1lcyBycS0+bG9jayBpcyBoZWxkCisgKi8KK3N0YXRpYyBpbnQgbmVlZHNfcG9zdF9zY2hlZHVsZV9ydChzdHJ1Y3QgcnEgKnJxKQoreworCXJldHVybiBoYXNfcHVzaGFibGVfdGFza3MocnEpOworfQorCiBzdGF0aWMgdm9pZCBwb3N0X3NjaGVkdWxlX3J0KHN0cnVjdCBycSAqcnEpCiB7CiAJLyoKLQkgKiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgcnRfdGFzayBxdWV1ZWQsIHRoZW4KLQkgKiBzZWUgaWYgd2UgY2FuIHB1c2ggdGhlIG90aGVyIHJ0X3Rhc2tzIG9mZiB0byBvdGhlciBDUFVTLgotCSAqIE5vdGUgd2UgbWF5IHJlbGVhc2UgdGhlIHJxIGxvY2ssIGFuZCBzaW5jZQotCSAqIHRoZSBsb2NrIHdhcyBvd25lZCBieSBwcmV2LCB3ZSBuZWVkIHRvIHJlbGVhc2UgaXQKLQkgKiBmaXJzdCB2aWEgZmluaXNoX2xvY2tfc3dpdGNoIGFuZCB0aGVuIHJlYXF1aXJlIGl0IGhlcmUuCisJICogVGhpcyBpcyBvbmx5IGNhbGxlZCBpZiBuZWVkc19wb3N0X3NjaGVkdWxlX3J0KCkgaW5kaWNhdGVzIHRoYXQKKwkgKiB3ZSBuZWVkIHRvIHB1c2ggdGFza3MgYXdheQogCSAqLwotCWlmICh1bmxpa2VseShycS0+cnQub3ZlcmxvYWRlZCkpIHsKLQkJc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOwotCQlwdXNoX3J0X3Rhc2tzKHJxKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7Ci0JfQorCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKKwlwdXNoX3J0X3Rhc2tzKHJxKTsKKwlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKIH0KIAogLyoKQEAgLTEyODgsNyArMTQ3Niw4IEBACiB7CiAJaWYgKCF0YXNrX3J1bm5pbmcocnEsIHApICYmCiAJICAgICF0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmN1cnIpICYmCi0JICAgIHJxLT5ydC5vdmVybG9hZGVkKQorCSAgICBoYXNfcHVzaGFibGVfdGFza3MocnEpICYmCisJICAgIHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpCiAJCXB1c2hfcnRfdGFza3MocnEpOwogfQogCkBAIC0xMzI0LDYgKzE1MTMsMjQgQEAKIAlpZiAocC0+c2Uub25fcnEgJiYgKHdlaWdodCAhPSBwLT5ydC5ucl9jcHVzX2FsbG93ZWQpKSB7CiAJCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwogCisJCWlmICghdGFza19jdXJyZW50KHJxLCBwKSkgeworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB3ZSBkZXF1ZXVlIHRoaXMgdGFzayBmcm9tIHRoZSBwdXNoYWJsZSBsaXN0CisJCQkgKiBiZWZvcmUgZ29pbmcgZnVydGhlci4gIEl0IHdpbGwgZWl0aGVyIHJlbWFpbiBvZmYgb2YKKwkJCSAqIHRoZSBsaXN0IGJlY2F1c2Ugd2UgYXJlIG5vIGxvbmdlciBwdXNoYWJsZSwgb3IgaXQKKwkJCSAqIHdpbGwgYmUgcmVxdWV1ZWQuCisJCQkgKi8KKwkJCWlmIChwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQorCQkJCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CisKKwkJCS8qCisJCQkgKiBSZXF1ZXVlIGlmIG91ciB3ZWlnaHQgaXMgY2hhbmdpbmcgYW5kIHN0aWxsID4gMQorCQkJICovCisJCQlpZiAod2VpZ2h0ID4gMSkKKwkJCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOworCisJCX0KKwogCQlpZiAoKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA8PSAxKSAmJiAod2VpZ2h0ID4gMSkpIHsKIAkJCXJxLT5ydC5ydF9ucl9taWdyYXRvcnkrKzsKIAkJfSBlbHNlIGlmICgocC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkgJiYgKHdlaWdodCA8PSAxKSkgewpAQCAtMTMzMSw3ICsxNTM4LDcgQEAKIAkJCXJxLT5ydC5ydF9ucl9taWdyYXRvcnktLTsKIAkJfQogCi0JCXVwZGF0ZV9ydF9taWdyYXRpb24ocnEpOworCQl1cGRhdGVfcnRfbWlncmF0aW9uKCZycS0+cnQpOwogCX0KIAogCWNwdW1hc2tfY29weSgmcC0+Y3B1c19hbGxvd2VkLCBuZXdfbWFzayk7CkBAIC0xMzQ2LDcgKzE1NTMsNyBAQAogCiAJX19lbmFibGVfcnVudGltZShycSk7CiAKLQljcHVwcmlfc2V0KCZycS0+cmQtPmNwdXByaSwgcnEtPmNwdSwgcnEtPnJ0LmhpZ2hlc3RfcHJpbyk7CisJY3B1cHJpX3NldCgmcnEtPnJkLT5jcHVwcmksIHJxLT5jcHUsIHJxLT5ydC5oaWdoZXN0X3ByaW8uY3Vycik7CiB9CiAKIC8qIEFzc3VtZXMgcnEtPmxvY2sgaXMgaGVsZCAqLwpAQCAtMTQzOCw3ICsxNjQ1LDcgQEAKIAkJICogY2FuIHJlbGVhc2UgdGhlIHJxIGxvY2sgYW5kIHAgY291bGQgbWlncmF0ZS4KIAkJICogT25seSByZXNjaGVkdWxlIGlmIHAgaXMgc3RpbGwgb24gdGhlIHNhbWUgcnVucXVldWUuCiAJCSAqLwotCQlpZiAocC0+cHJpbyA+IHJxLT5ydC5oaWdoZXN0X3ByaW8gJiYgcnEtPmN1cnIgPT0gcCkKKwkJaWYgKHAtPnByaW8gPiBycS0+cnQuaGlnaGVzdF9wcmlvLmN1cnIgJiYgcnEtPmN1cnIgPT0gcCkKIAkJCXJlc2NoZWRfdGFzayhwKTsKICNlbHNlCiAJCS8qIEZvciBVUCBzaW1wbHkgcmVzY2hlZCBvbiBkcm9wIG9mIHByaW8gKi8KQEAgLTE1MDksNiArMTcxNiw5IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gcnEtPmN1cnI7CiAKIAlwLT5zZS5leGVjX3N0YXJ0ID0gcnEtPmNsb2NrOworCisJLyogVGhlIHJ1bm5pbmcgdGFzayBpcyBuZXZlciBlbGlnaWJsZSBmb3IgcHVzaGluZyAqLworCWRlcXVldWVfcHVzaGFibGVfdGFzayhycSwgcCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgcnRfc2NoZWRfY2xhc3MgPSB7CkBAIC0xNTMxLDYgKzE3NDEsNyBAQAogCS5ycV9vbmxpbmUgICAgICAgICAgICAgID0gcnFfb25saW5lX3J0LAogCS5ycV9vZmZsaW5lICAgICAgICAgICAgID0gcnFfb2ZmbGluZV9ydCwKIAkucHJlX3NjaGVkdWxlCQk9IHByZV9zY2hlZHVsZV9ydCwKKwkubmVlZHNfcG9zdF9zY2hlZHVsZQk9IG5lZWRzX3Bvc3Rfc2NoZWR1bGVfcnQsCiAJLnBvc3Rfc2NoZWR1bGUJCT0gcG9zdF9zY2hlZHVsZV9ydCwKIAkudGFza193YWtlX3VwCQk9IHRhc2tfd2FrZV91cF9ydCwKIAkuc3dpdGNoZWRfZnJvbQkJPSBzd2l0Y2hlZF9mcm9tX3J0LApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3N0YXRzLmggYi9rZXJuZWwvc2NoZWRfc3RhdHMuaAppbmRleCBhOGY5M2RkLi4zMmQyYmQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfc3RhdHMuaAorKysgYi9rZXJuZWwvc2NoZWRfc3RhdHMuaApAQCAtNCw3ICs0LDcgQEAKICAqIGJ1bXAgdGhpcyB1cCB3aGVuIGNoYW5naW5nIHRoZSBvdXRwdXQgZm9ybWF0IG9yIHRoZSBtZWFuaW5nIG9mIGFuIGV4aXN0aW5nCiAgKiBmb3JtYXQsIHNvIHRoYXQgdG9vbHMgY2FuIGFkYXB0IChvciBhYm9ydCkKICAqLwotI2RlZmluZSBTQ0hFRFNUQVRfVkVSU0lPTiAxNAorI2RlZmluZSBTQ0hFRFNUQVRfVkVSU0lPTiAxNQogCiBzdGF0aWMgaW50IHNob3dfc2NoZWRzdGF0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewpAQCAtMjYsOSArMjYsOCBAQAogCiAJCS8qIHJ1bnF1ZXVlLXNwZWNpZmljIHN0YXRzICovCiAJCXNlcV9wcmludGYoc2VxLAotCQkgICAgImNwdSVkICV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1ICVsbHUgJWxsdSAlbHUiLAotCQkgICAgY3B1LCBycS0+eWxkX2JvdGhfZW1wdHksCi0JCSAgICBycS0+eWxkX2FjdF9lbXB0eSwgcnEtPnlsZF9leHBfZW1wdHksIHJxLT55bGRfY291bnQsCisJCSAgICAiY3B1JWQgJXUgJXUgJXUgJXUgJXUgJXUgJWxsdSAlbGx1ICVsdSIsCisJCSAgICBjcHUsIHJxLT55bGRfY291bnQsCiAJCSAgICBycS0+c2NoZWRfc3dpdGNoLCBycS0+c2NoZWRfY291bnQsIHJxLT5zY2hlZF9nb2lkbGUsCiAJCSAgICBycS0+dHR3dV9jb3VudCwgcnEtPnR0d3VfbG9jYWwsCiAJCSAgICBycS0+cnFfY3B1X3RpbWUsCmRpZmYgLS1naXQgYS9rZXJuZWwvc2lnbmFsLmMgYi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMmE3NGZlOC4uMWM4ODE0NCAxMDA2NDQKLS0tIGEva2VybmVsL3NpZ25hbC5jCisrKyBiL2tlcm5lbC9zaWduYWwuYwpAQCAtMTU3NSw3ICsxNTc1LDE1IEBACiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlpZiAobWF5X3B0cmFjZV9zdG9wKCkpIHsKIAkJZG9fbm90aWZ5X3BhcmVudF9jbGRzdG9wKGN1cnJlbnQsIENMRF9UUkFQUEVEKTsKKwkJLyoKKwkJICogRG9uJ3Qgd2FudCB0byBhbGxvdyBwcmVlbXB0aW9uIGhlcmUsIGJlY2F1c2UKKwkJICogc3lzX3B0cmFjZSgpIG5lZWRzIHRoaXMgdGFzayB0byBiZSBpbmFjdGl2ZS4KKwkJICoKKwkJICogWFhYOiBpbXBsZW1lbnQgcmVhZF91bmxvY2tfbm9fcmVzY2hlZCgpLgorCQkgKi8KKwkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwogCQlzY2hlZHVsZSgpOwogCX0gZWxzZSB7CiAJCS8qCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsX2NoZWNrLmMgYi9rZXJuZWwvc3lzY3RsX2NoZWNrLmMKaW5kZXggZmFmZWI0OC4uYjM4NDIzYyAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bF9jaGVjay5jCisrKyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwpAQCAtMjE5LDYgKzIxOSw3IEBACiAJeyBORVRfSVBWNF9DT05GX0FSUF9JR05PUkUsCQkiYXJwX2lnbm9yZSIgfSwKIAl7IE5FVF9JUFY0X0NPTkZfUFJPTU9URV9TRUNPTkRBUklFUywJInByb21vdGVfc2Vjb25kYXJpZXMiIH0sCiAJeyBORVRfSVBWNF9DT05GX0FSUF9BQ0NFUFQsCQkiYXJwX2FjY2VwdCIgfSwKKwl7IE5FVF9JUFY0X0NPTkZfQVJQX05PVElGWSwJCSJhcnBfbm90aWZ5IiB9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9NYWtlZmlsZSBiL2tlcm5lbC90aW1lL01ha2VmaWxlCmluZGV4IDkwNWIwYjUuLjBiMGE2MzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL01ha2VmaWxlCisrKyBiL2tlcm5lbC90aW1lL01ha2VmaWxlCkBAIC0xLDQgKzEsNCBAQAotb2JqLXkgKz0gdGltZWtlZXBpbmcubyBudHAubyBjbG9ja3NvdXJjZS5vIGppZmZpZXMubyB0aW1lcl9saXN0Lm8KK29iai15ICs9IHRpbWVrZWVwaW5nLm8gbnRwLm8gY2xvY2tzb3VyY2UubyBqaWZmaWVzLm8gdGltZXJfbGlzdC5vIHRpbWVjb21wYXJlLm8KIAogb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQpCQkrPSBjbG9ja2V2ZW50cy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUykJCSs9IHRpY2stY29tbW9uLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMgYi9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCmluZGV4IGVhMmY0OGEuLmQxM2JlMjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwpAQCAtNjgsNiArNjgsMTcgQEAKIAlpZiAoZGV2LT5tb2RlICE9IG1vZGUpIHsKIAkJZGV2LT5zZXRfbW9kZShtb2RlLCBkZXYpOwogCQlkZXYtPm1vZGUgPSBtb2RlOworCisJCS8qCisJCSAqIEEgbnNlYzJjeWMgbXVsdGlwbGljYXRvciBvZiAwIGlzIGludmFsaWQgYW5kIHdlJ2QgY3Jhc2gKKwkJICogb24gaXQsIHNvIGZpeCBpdCB1cCBhbmQgZW1pdCBhIHdhcm5pbmc6CisJCSAqLworCQlpZiAobW9kZSA9PSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UKSB7CisJCQlpZiAodW5saWtlbHkoIWRldi0+bXVsdCkpIHsKKwkJCQlkZXYtPm11bHQgPSAxOworCQkJCVdBUk5fT04oMSk7CisJCQl9CisJCX0KIAl9CiB9CiAKQEAgLTE2OCwxNSArMTc5LDYgQEAKIAlCVUdfT04oZGV2LT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1VOVVNFRCk7CiAJQlVHX09OKCFkZXYtPmNwdW1hc2spOwogCi0JLyoKLQkgKiBBIG5zZWMyY3ljIG11bHRpcGxpY2F0b3Igb2YgMCBpcyBpbnZhbGlkIGFuZCB3ZSdkIGNyYXNoCi0JICogb24gaXQsIHNvIGZpeCBpdCB1cCBhbmQgZW1pdCBhIHdhcm5pbmc6Ci0JICovCi0JaWYgKHVubGlrZWx5KCFkZXYtPm11bHQpKSB7Ci0JCWRldi0+bXVsdCA9IDE7Ci0JCVdBUk5fT04oMSk7Ci0JfQotCiAJc3Bpbl9sb2NrKCZjbG9ja2V2ZW50c19sb2NrKTsKIAogCWxpc3RfYWRkKCZkZXYtPmxpc3QsICZjbG9ja2V2ZW50X2RldmljZXMpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggY2E4OWUxNS4uYzQ2YzkzMSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC0zMSw2ICszMSw4MiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+IC8qIGZvciBzcGluX3VubG9ja19pcnEoKSB1c2luZyBwcmVlbXB0X2NvdW50KCkgbTY4ayAqLwogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KIAordm9pZCB0aW1lY291bnRlcl9pbml0KHN0cnVjdCB0aW1lY291bnRlciAqdGMsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjLAorCQkgICAgICB1NjQgc3RhcnRfdHN0YW1wKQoreworCXRjLT5jYyA9IGNjOworCXRjLT5jeWNsZV9sYXN0ID0gY2MtPnJlYWQoY2MpOworCXRjLT5uc2VjID0gc3RhcnRfdHN0YW1wOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY291bnRlcl9pbml0KTsKKworLyoqCisgKiB0aW1lY291bnRlcl9yZWFkX2RlbHRhIC0gZ2V0IG5hbm9zZWNvbmRzIHNpbmNlIGxhc3QgY2FsbCBvZiB0aGlzIGZ1bmN0aW9uCisgKiBAdGM6ICAgICAgICAgUG9pbnRlciB0byB0aW1lIGNvdW50ZXIKKyAqCisgKiBXaGVuIHRoZSB1bmRlcmx5aW5nIGN5Y2xlIGNvdW50ZXIgcnVucyBvdmVyLCB0aGlzIHdpbGwgYmUgaGFuZGxlZAorICogY29ycmVjdGx5IGFzIGxvbmcgYXMgaXQgZG9lcyBub3QgcnVuIG92ZXIgbW9yZSB0aGFuIG9uY2UgYmV0d2VlbgorICogY2FsbHMuCisgKgorICogVGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBmb3IgYSBuZXcgdGltZSBjb3VudGVyIGluaXRpYWxpemVzCisgKiB0aGUgdGltZSB0cmFja2luZyBhbmQgcmV0dXJucyBhbiB1bmRlZmluZWQgcmVzdWx0LgorICovCitzdGF0aWMgdTY0IHRpbWVjb3VudGVyX3JlYWRfZGVsdGEoc3RydWN0IHRpbWVjb3VudGVyICp0YykKK3sKKwljeWNsZV90IGN5Y2xlX25vdywgY3ljbGVfZGVsdGE7CisJdTY0IG5zX29mZnNldDsKKworCS8qIHJlYWQgY3ljbGUgY291bnRlcjogKi8KKwljeWNsZV9ub3cgPSB0Yy0+Y2MtPnJlYWQodGMtPmNjKTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3QgdGltZWNvdW50ZXJfcmVhZF9kZWx0YSgpOiAqLworCWN5Y2xlX2RlbHRhID0gKGN5Y2xlX25vdyAtIHRjLT5jeWNsZV9sYXN0KSAmIHRjLT5jYy0+bWFzazsKKworCS8qIGNvbnZlcnQgdG8gbmFub3NlY29uZHM6ICovCisJbnNfb2Zmc2V0ID0gY3ljbGVjb3VudGVyX2N5YzJucyh0Yy0+Y2MsIGN5Y2xlX2RlbHRhKTsKKworCS8qIHVwZGF0ZSB0aW1lIHN0YW1wIG9mIHRpbWVjb3VudGVyX3JlYWRfZGVsdGEoKSBjYWxsOiAqLworCXRjLT5jeWNsZV9sYXN0ID0gY3ljbGVfbm93OworCisJcmV0dXJuIG5zX29mZnNldDsKK30KKwordTY0IHRpbWVjb3VudGVyX3JlYWQoc3RydWN0IHRpbWVjb3VudGVyICp0YykKK3sKKwl1NjQgbnNlYzsKKworCS8qIGluY3JlbWVudCB0aW1lIGJ5IG5hbm9zZWNvbmRzIHNpbmNlIGxhc3QgY2FsbCAqLworCW5zZWMgPSB0aW1lY291bnRlcl9yZWFkX2RlbHRhKHRjKTsKKwluc2VjICs9IHRjLT5uc2VjOworCXRjLT5uc2VjID0gbnNlYzsKKworCXJldHVybiBuc2VjOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY291bnRlcl9yZWFkKTsKKwordTY0IHRpbWVjb3VudGVyX2N5YzJ0aW1lKHN0cnVjdCB0aW1lY291bnRlciAqdGMsCisJCQkgY3ljbGVfdCBjeWNsZV90c3RhbXApCit7CisJdTY0IGN5Y2xlX2RlbHRhID0gKGN5Y2xlX3RzdGFtcCAtIHRjLT5jeWNsZV9sYXN0KSAmIHRjLT5jYy0+bWFzazsKKwl1NjQgbnNlYzsKKworCS8qCisJICogSW5zdGVhZCBvZiBhbHdheXMgdHJlYXRpbmcgY3ljbGVfdHN0YW1wIGFzIG1vcmUgcmVjZW50CisJICogdGhhbiB0Yy0+Y3ljbGVfbGFzdCwgZGV0ZWN0IHdoZW4gaXQgaXMgdG9vIGZhciBpbiB0aGUKKwkgKiBmdXR1cmUgYW5kIHRyZWF0IGl0IGFzIG9sZCB0aW1lIHN0YW1wIGluc3RlYWQuCisJICovCisJaWYgKGN5Y2xlX2RlbHRhID4gdGMtPmNjLT5tYXNrIC8gMikgeworCQljeWNsZV9kZWx0YSA9ICh0Yy0+Y3ljbGVfbGFzdCAtIGN5Y2xlX3RzdGFtcCkgJiB0Yy0+Y2MtPm1hc2s7CisJCW5zZWMgPSB0Yy0+bnNlYyAtIGN5Y2xlY291bnRlcl9jeWMybnModGMtPmNjLCBjeWNsZV9kZWx0YSk7CisJfSBlbHNlIHsKKwkJbnNlYyA9IGN5Y2xlY291bnRlcl9jeWMybnModGMtPmNjLCBjeWNsZV9kZWx0YSkgKyB0Yy0+bnNlYzsKKwl9CisKKwlyZXR1cm4gbnNlYzsKK30KK0VYUE9SVF9TWU1CT0wodGltZWNvdW50ZXJfY3ljMnRpbWUpOworCiAvKiBYWFggLSBXb3VsZCBsaWtlIGEgYmV0dGVyIHdheSBmb3IgaW5pdGlhbGl6aW5nIGN1cnJfY2xvY2tzb3VyY2UgKi8KIGV4dGVybiBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfamlmZmllczsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvbnRwLmMgYi9rZXJuZWwvdGltZS9udHAuYwppbmRleCBmNWY3OTNkLi43ZmM2NDM3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9udHAuYworKysgYi9rZXJuZWwvdGltZS9udHAuYwpAQCAtMSw3MSArMSwxMjkgQEAKIC8qCi0gKiBsaW51eC9rZXJuZWwvdGltZS9udHAuYwotICoKICAqIE5UUCBzdGF0ZSBtYWNoaW5lIGludGVyZmFjZXMgYW5kIGxvZ2ljLgogICoKICAqIFRoaXMgY29kZSB3YXMgbWFpbmx5IG1vdmVkIGZyb20ga2VybmVsL3RpbWVyLmMgYW5kIGtlcm5lbC90aW1lLmMKICAqIFBsZWFzZSBzZWUgdGhvc2UgZmlsZXMgZm9yIHJlbGV2YW50IGNvcHlyaWdodCBpbmZvIGFuZCBoaXN0b3JpY2FsCiAgKiBjaGFuZ2Vsb2dzLgogICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAvKgotICogVGltZWtlZXBpbmcgdmFyaWFibGVzCisgKiBOVFAgdGltZWtlZXBpbmcgdmFyaWFibGVzOgogICovCi11bnNpZ25lZCBsb25nIHRpY2tfdXNlYyA9IFRJQ0tfVVNFQzsgCQkvKiBVU0VSX0haIHBlcmlvZCAodXNlYykgKi8KLXVuc2lnbmVkIGxvbmcgdGlja19uc2VjOwkJCS8qIEFDVEhaIHBlcmlvZCAobnNlYykgKi8KLXU2NCB0aWNrX2xlbmd0aDsKLXN0YXRpYyB1NjQgdGlja19sZW5ndGhfYmFzZTsKIAotc3RhdGljIHN0cnVjdCBocnRpbWVyIGxlYXBfdGltZXI7CisvKiBVU0VSX0haIHBlcmlvZCAodXNlY3MpOiAqLwordW5zaWduZWQgbG9uZwkJCXRpY2tfdXNlYyA9IFRJQ0tfVVNFQzsKIAotI2RlZmluZSBNQVhfVElDS0FESgkJNTAwCQkvKiBtaWNyb3NlY3MgKi8KLSNkZWZpbmUgTUFYX1RJQ0tBREpfU0NBTEVECSgoKHU2NCkoTUFYX1RJQ0tBREogKiBOU0VDX1BFUl9VU0VDKSA8PCBcCi0JCQkJICBOVFBfU0NBTEVfU0hJRlQpIC8gTlRQX0lOVEVSVkFMX0ZSRVEpCisvKiBBQ1RIWiBwZXJpb2QgKG5zZWNzKTogKi8KK3Vuc2lnbmVkIGxvbmcJCQl0aWNrX25zZWM7CisKK3U2NAkJCQl0aWNrX2xlbmd0aDsKK3N0YXRpYyB1NjQJCQl0aWNrX2xlbmd0aF9iYXNlOworCitzdGF0aWMgc3RydWN0IGhydGltZXIJCWxlYXBfdGltZXI7CisKKyNkZWZpbmUgTUFYX1RJQ0tBREoJCTUwMExMCQkvKiB1c2VjcyAqLworI2RlZmluZSBNQVhfVElDS0FESl9TQ0FMRUQgXAorCSgoKE1BWF9USUNLQURKICogTlNFQ19QRVJfVVNFQykgPDwgTlRQX1NDQUxFX1NISUZUKSAvIE5UUF9JTlRFUlZBTF9GUkVRKQogCiAvKgogICogcGhhc2UtbG9jayBsb29wIHZhcmlhYmxlcwogICovCi0vKiBUSU1FX0VSUk9SIHByZXZlbnRzIG92ZXJ3cml0aW5nIHRoZSBDTU9TIGNsb2NrICovCi1zdGF0aWMgaW50IHRpbWVfc3RhdGUgPSBUSU1FX09LOwkvKiBjbG9jayBzeW5jaHJvbml6YXRpb24gc3RhdHVzCSovCi1pbnQgdGltZV9zdGF0dXMgPSBTVEFfVU5TWU5DOwkJLyogY2xvY2sgc3RhdHVzIGJpdHMJCSovCi1zdGF0aWMgbG9uZyB0aW1lX3RhaTsJCQkvKiBUQUkgb2Zmc2V0IChzKQkJKi8KLXN0YXRpYyBzNjQgdGltZV9vZmZzZXQ7CQkJLyogdGltZSBhZGp1c3RtZW50IChucykJCSovCi1zdGF0aWMgbG9uZyB0aW1lX2NvbnN0YW50ID0gMjsJCS8qIHBsbCB0aW1lIGNvbnN0YW50CQkqLwotbG9uZyB0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOwkvKiBtYXhpbXVtIGVycm9yICh1cykJCSovCi1sb25nIHRpbWVfZXN0ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CS8qIGVzdGltYXRlZCBlcnJvciAodXMpCQkqLwotc3RhdGljIHM2NCB0aW1lX2ZyZXE7CQkJLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIG5zL3MpKi8KLXN0YXRpYyBsb25nIHRpbWVfcmVmdGltZTsJCS8qIHRpbWUgYXQgbGFzdCBhZGp1c3RtZW50IChzKQkqLwotbG9uZyB0aW1lX2FkanVzdDsKLXN0YXRpYyBsb25nIG50cF90aWNrX2FkajsKIAorLyoKKyAqIGNsb2NrIHN5bmNocm9uaXphdGlvbiBzdGF0dXMKKyAqCisgKiAoVElNRV9FUlJPUiBwcmV2ZW50cyBvdmVyd3JpdGluZyB0aGUgQ01PUyBjbG9jaykKKyAqLworc3RhdGljIGludAkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCisvKiBjbG9jayBzdGF0dXMgYml0czoJCQkJCQkJKi8KK2ludAkJCQl0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7CisKKy8qIFRBSSBvZmZzZXQgKHNlY3MpOgkJCQkJCQkqLworc3RhdGljIGxvbmcJCQl0aW1lX3RhaTsKKworLyogdGltZSBhZGp1c3RtZW50IChuc2Vjcyk6CQkJCQkJKi8KK3N0YXRpYyBzNjQJCQl0aW1lX29mZnNldDsKKworLyogcGxsIHRpbWUgY29uc3RhbnQ6CQkJCQkJCSovCitzdGF0aWMgbG9uZwkJCXRpbWVfY29uc3RhbnQgPSAyOworCisvKiBtYXhpbXVtIGVycm9yICh1c2Vjcyk6CQkJCQkJKi8KK2xvbmcJCQkJdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKworLyogZXN0aW1hdGVkIGVycm9yICh1c2Vjcyk6CQkJCQkJKi8KK2xvbmcJCQkJdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKworLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIG5zZWNzL3NlY3MpOgkJCQkqLworc3RhdGljIHM2NAkJCXRpbWVfZnJlcTsKKworLyogdGltZSBhdCBsYXN0IGFkanVzdG1lbnQgKHNlY3MpOgkJCQkJKi8KK3N0YXRpYyBsb25nCQkJdGltZV9yZWZ0aW1lOworCitsb25nCQkJCXRpbWVfYWRqdXN0OworCisvKiBjb25zdGFudCAoYm9vdC1wYXJhbSBjb25maWd1cmFibGUpIE5UUCB0aWNrIGFkanVzdG1lbnQgKHVwc2NhbGVkKQkqLworc3RhdGljIHM2NAkJCW50cF90aWNrX2FkajsKKworLyoKKyAqIE5UUCBtZXRob2RzOgorICovCisKKy8qCisgKiBVcGRhdGUgKHRpY2tfbGVuZ3RoLCB0aWNrX2xlbmd0aF9iYXNlLCB0aWNrX25zZWMpLCBiYXNlZAorICogb24gKHRpY2tfdXNlYywgbnRwX3RpY2tfYWRqLCB0aW1lX2ZyZXEpOgorICovCiBzdGF0aWMgdm9pZCBudHBfdXBkYXRlX2ZyZXF1ZW5jeSh2b2lkKQogewotCXU2NCBzZWNvbmRfbGVuZ3RoID0gKHU2NCkodGlja191c2VjICogTlNFQ19QRVJfVVNFQyAqIFVTRVJfSFopCi0JCQkJPDwgTlRQX1NDQUxFX1NISUZUOwotCXNlY29uZF9sZW5ndGggKz0gKHM2NCludHBfdGlja19hZGogPDwgTlRQX1NDQUxFX1NISUZUOwotCXNlY29uZF9sZW5ndGggKz0gdGltZV9mcmVxOworCXU2NCBzZWNvbmRfbGVuZ3RoOworCXU2NCBuZXdfYmFzZTsKIAotCXRpY2tfbGVuZ3RoX2Jhc2UgPSBzZWNvbmRfbGVuZ3RoOworCXNlY29uZF9sZW5ndGgJCSA9ICh1NjQpKHRpY2tfdXNlYyAqIE5TRUNfUEVSX1VTRUMgKiBVU0VSX0haKQorCQkJCQkJPDwgTlRQX1NDQUxFX1NISUZUOwogCi0JdGlja19uc2VjID0gZGl2X3U2NChzZWNvbmRfbGVuZ3RoLCBIWikgPj4gTlRQX1NDQUxFX1NISUZUOwotCXRpY2tfbGVuZ3RoX2Jhc2UgPSBkaXZfdTY0KHRpY2tfbGVuZ3RoX2Jhc2UsIE5UUF9JTlRFUlZBTF9GUkVRKTsKKwlzZWNvbmRfbGVuZ3RoCQkrPSBudHBfdGlja19hZGo7CisJc2Vjb25kX2xlbmd0aAkJKz0gdGltZV9mcmVxOworCisJdGlja19uc2VjCQkgPSBkaXZfdTY0KHNlY29uZF9sZW5ndGgsIEhaKSA+PiBOVFBfU0NBTEVfU0hJRlQ7CisJbmV3X2Jhc2UJCSA9IGRpdl91NjQoc2Vjb25kX2xlbmd0aCwgTlRQX0lOVEVSVkFMX0ZSRVEpOworCisJLyoKKwkgKiBEb24ndCB3YWl0IGZvciB0aGUgbmV4dCBzZWNvbmRfb3ZlcmZsb3csIGFwcGx5CisJICogdGhlIGNoYW5nZSB0byB0aGUgdGljayBsZW5ndGggaW1tZWRpYXRlbHk6CisJICovCisJdGlja19sZW5ndGgJCSs9IG5ld19iYXNlIC0gdGlja19sZW5ndGhfYmFzZTsKKwl0aWNrX2xlbmd0aF9iYXNlCSA9IG5ld19iYXNlOworfQorCitzdGF0aWMgaW5saW5lIHM2NCBudHBfdXBkYXRlX29mZnNldF9mbGwoczY0IG9mZnNldDY0LCBsb25nIHNlY3MpCit7CisJdGltZV9zdGF0dXMgJj0gflNUQV9NT0RFOworCisJaWYgKHNlY3MgPCBNSU5TRUMpCisJCXJldHVybiAwOworCisJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfRkxMKSAmJiAoc2VjcyA8PSBNQVhTRUMpKQorCQlyZXR1cm4gMDsKKworCXRpbWVfc3RhdHVzIHw9IFNUQV9NT0RFOworCisJcmV0dXJuIGRpdl9zNjQob2Zmc2V0NjQgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIFNISUZUX0ZMTCksIHNlY3MpOwogfQogCiBzdGF0aWMgdm9pZCBudHBfdXBkYXRlX29mZnNldChsb25nIG9mZnNldCkKIHsKLQlsb25nIG10ZW1wOwogCXM2NCBmcmVxX2FkajsKKwlzNjQgb2Zmc2V0NjQ7CisJbG9uZyBzZWNzOwogCiAJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfUExMKSkKIAkJcmV0dXJuOwpAQCAtODQsMjQgKzE0MiwyMyBAQAogCSAqIFNlbGVjdCBob3cgdGhlIGZyZXF1ZW5jeSBpcyB0byBiZSBjb250cm9sbGVkCiAJICogYW5kIGluIHdoaWNoIG1vZGUgKFBMTCBvciBGTEwpLgogCSAqLwotCWlmICh0aW1lX3N0YXR1cyAmIFNUQV9GUkVRSE9MRCB8fCB0aW1lX3JlZnRpbWUgPT0gMCkKLQkJdGltZV9yZWZ0aW1lID0geHRpbWUudHZfc2VjOwotCW10ZW1wID0geHRpbWUudHZfc2VjIC0gdGltZV9yZWZ0aW1lOworCXNlY3MgPSB4dGltZS50dl9zZWMgLSB0aW1lX3JlZnRpbWU7CisJaWYgKHVubGlrZWx5KHRpbWVfc3RhdHVzICYgU1RBX0ZSRVFIT0xEKSkKKwkJc2VjcyA9IDA7CisKIAl0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7CiAKLQlmcmVxX2FkaiA9IChzNjQpb2Zmc2V0ICogbXRlbXA7Ci0JZnJlcV9hZGogPDw9IE5UUF9TQ0FMRV9TSElGVCAtIDIgKiAoU0hJRlRfUExMICsgMiArIHRpbWVfY29uc3RhbnQpOwotCXRpbWVfc3RhdHVzICY9IH5TVEFfTU9ERTsKLQlpZiAobXRlbXAgPj0gTUlOU0VDICYmICh0aW1lX3N0YXR1cyAmIFNUQV9GTEwgfHwgbXRlbXAgPiBNQVhTRUMpKSB7Ci0JCWZyZXFfYWRqICs9IGRpdl9zNjQoKHM2NClvZmZzZXQgPDwgKE5UUF9TQ0FMRV9TSElGVCAtIFNISUZUX0ZMTCksCi0JCQkJICAgIG10ZW1wKTsKLQkJdGltZV9zdGF0dXMgfD0gU1RBX01PREU7Ci0JfQotCWZyZXFfYWRqICs9IHRpbWVfZnJlcTsKLQlmcmVxX2FkaiA9IG1pbihmcmVxX2FkaiwgTUFYRlJFUV9TQ0FMRUQpOwotCXRpbWVfZnJlcSA9IG1heChmcmVxX2FkaiwgLU1BWEZSRVFfU0NBTEVEKTsKKwlvZmZzZXQ2NCAgICA9IG9mZnNldDsKKwlmcmVxX2FkaiAgICA9IChvZmZzZXQ2NCAqIHNlY3MpIDw8CisJCQkoTlRQX1NDQUxFX1NISUZUIC0gMiAqIChTSElGVF9QTEwgKyAyICsgdGltZV9jb25zdGFudCkpOwogCi0JdGltZV9vZmZzZXQgPSBkaXZfczY0KChzNjQpb2Zmc2V0IDw8IE5UUF9TQ0FMRV9TSElGVCwgTlRQX0lOVEVSVkFMX0ZSRVEpOworCWZyZXFfYWRqICAgICs9IG50cF91cGRhdGVfb2Zmc2V0X2ZsbChvZmZzZXQ2NCwgc2Vjcyk7CisKKwlmcmVxX2FkaiAgICA9IG1pbihmcmVxX2FkaiArIHRpbWVfZnJlcSwgTUFYRlJFUV9TQ0FMRUQpOworCisJdGltZV9mcmVxICAgPSBtYXgoZnJlcV9hZGosIC1NQVhGUkVRX1NDQUxFRCk7CisKKwl0aW1lX29mZnNldCA9IGRpdl9zNjQob2Zmc2V0NjQgPDwgTlRQX1NDQUxFX1NISUZULCBOVFBfSU5URVJWQUxfRlJFUSk7CiB9CiAKIC8qKgpAQCAtMTExLDE1ICsxNjgsMTUgQEAKICAqLwogdm9pZCBudHBfY2xlYXIodm9pZCkKIHsKLQl0aW1lX2FkanVzdCA9IDA7CQkvKiBzdG9wIGFjdGl2ZSBhZGp0aW1lKCkgKi8KLQl0aW1lX3N0YXR1cyB8PSBTVEFfVU5TWU5DOwotCXRpbWVfbWF4ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7Ci0JdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKwl0aW1lX2FkanVzdAk9IDA7CQkvKiBzdG9wIGFjdGl2ZSBhZGp0aW1lKCkgKi8KKwl0aW1lX3N0YXR1cwl8PSBTVEFfVU5TWU5DOworCXRpbWVfbWF4ZXJyb3IJPSBOVFBfUEhBU0VfTElNSVQ7CisJdGltZV9lc3RlcnJvcgk9IE5UUF9QSEFTRV9MSU1JVDsKIAogCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7CiAKLQl0aWNrX2xlbmd0aCA9IHRpY2tfbGVuZ3RoX2Jhc2U7Ci0JdGltZV9vZmZzZXQgPSAwOworCXRpY2tfbGVuZ3RoCT0gdGlja19sZW5ndGhfYmFzZTsKKwl0aW1lX29mZnNldAk9IDA7CiB9CiAKIC8qCkBAIC0xNDAsOCArMTk3LDggQEAKIAkJeHRpbWUudHZfc2VjLS07CiAJCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYysrOwogCQl0aW1lX3N0YXRlID0gVElNRV9PT1A7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiQ2xvY2s6ICIKLQkJICAgICAgICJpbnNlcnRpbmcgbGVhcCBzZWNvbmQgMjM6NTk6NjAgVVRDXG4iKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkiQ2xvY2s6IGluc2VydGluZyBsZWFwIHNlY29uZCAyMzo1OTo2MCBVVENcbiIpOwogCQlocnRpbWVyX2FkZF9leHBpcmVzX25zKCZsZWFwX3RpbWVyLCBOU0VDX1BFUl9TRUMpOwogCQlyZXMgPSBIUlRJTUVSX1JFU1RBUlQ7CiAJCWJyZWFrOwpAQCAtMTUwLDggKzIwNyw4IEBACiAJCXRpbWVfdGFpLS07CiAJCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYy0tOwogCQl0aW1lX3N0YXRlID0gVElNRV9XQUlUOwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNsb2NrOiAiCi0JCSAgICAgICAiZGVsZXRpbmcgbGVhcCBzZWNvbmQgMjM6NTk6NTkgVVRDXG4iKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkiQ2xvY2s6IGRlbGV0aW5nIGxlYXAgc2Vjb25kIDIzOjU5OjU5IFVUQ1xuIik7CiAJCWJyZWFrOwogCWNhc2UgVElNRV9PT1A6CiAJCXRpbWVfdGFpKys7CkBAIC0xNzksNyArMjM2LDcgQEAKICAqLwogdm9pZCBzZWNvbmRfb3ZlcmZsb3codm9pZCkKIHsKLQlzNjQgdGltZV9hZGo7CisJczY0IGRlbHRhOwogCiAJLyogQnVtcCB0aGUgbWF4ZXJyb3IgZmllbGQgKi8KIAl0aW1lX21heGVycm9yICs9IE1BWEZSRVEgLyBOU0VDX1BFUl9VU0VDOwpAQCAtMTkyLDI0ICsyNDksMzAgQEAKIAkgKiBDb21wdXRlIHRoZSBwaGFzZSBhZGp1c3RtZW50IGZvciB0aGUgbmV4dCBzZWNvbmQuIFRoZSBvZmZzZXQgaXMKIAkgKiByZWR1Y2VkIGJ5IGEgZml4ZWQgZmFjdG9yIHRpbWVzIHRoZSB0aW1lIGNvbnN0YW50LgogCSAqLwotCXRpY2tfbGVuZ3RoID0gdGlja19sZW5ndGhfYmFzZTsKLQl0aW1lX2FkaiA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0LCBTSElGVF9QTEwgKyB0aW1lX2NvbnN0YW50KTsKLQl0aW1lX29mZnNldCAtPSB0aW1lX2FkajsKLQl0aWNrX2xlbmd0aCArPSB0aW1lX2FkajsKKwl0aWNrX2xlbmd0aAkgPSB0aWNrX2xlbmd0aF9iYXNlOwogCi0JaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0KSkgewotCQlpZiAodGltZV9hZGp1c3QgPiBNQVhfVElDS0FESikgewotCQkJdGltZV9hZGp1c3QgLT0gTUFYX1RJQ0tBREo7Ci0JCQl0aWNrX2xlbmd0aCArPSBNQVhfVElDS0FESl9TQ0FMRUQ7Ci0JCX0gZWxzZSBpZiAodGltZV9hZGp1c3QgPCAtTUFYX1RJQ0tBREopIHsKLQkJCXRpbWVfYWRqdXN0ICs9IE1BWF9USUNLQURKOwotCQkJdGlja19sZW5ndGggLT0gTUFYX1RJQ0tBREpfU0NBTEVEOwotCQl9IGVsc2UgewotCQkJdGlja19sZW5ndGggKz0gKHM2NCkodGltZV9hZGp1c3QgKiBOU0VDX1BFUl9VU0VDIC8KLQkJCQkJTlRQX0lOVEVSVkFMX0ZSRVEpIDw8IE5UUF9TQ0FMRV9TSElGVDsKLQkJCXRpbWVfYWRqdXN0ID0gMDsKLQkJfQorCWRlbHRhCQkgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCwgU0hJRlRfUExMICsgdGltZV9jb25zdGFudCk7CisJdGltZV9vZmZzZXQJLT0gZGVsdGE7CisJdGlja19sZW5ndGgJKz0gZGVsdGE7CisKKwlpZiAoIXRpbWVfYWRqdXN0KQorCQlyZXR1cm47CisKKwlpZiAodGltZV9hZGp1c3QgPiBNQVhfVElDS0FESikgeworCQl0aW1lX2FkanVzdCAtPSBNQVhfVElDS0FESjsKKwkJdGlja19sZW5ndGggKz0gTUFYX1RJQ0tBREpfU0NBTEVEOworCQlyZXR1cm47CiAJfQorCisJaWYgKHRpbWVfYWRqdXN0IDwgLU1BWF9USUNLQURKKSB7CisJCXRpbWVfYWRqdXN0ICs9IE1BWF9USUNLQURKOworCQl0aWNrX2xlbmd0aCAtPSBNQVhfVElDS0FESl9TQ0FMRUQ7CisJCXJldHVybjsKKwl9CisKKwl0aWNrX2xlbmd0aCArPSAoczY0KSh0aW1lX2FkanVzdCAqIE5TRUNfUEVSX1VTRUMgLyBOVFBfSU5URVJWQUxfRlJFUSkKKwkJCQkJCQkgPDwgTlRQX1NDQUxFX1NISUZUOworCXRpbWVfYWRqdXN0ID0gMDsKIH0KIAogI2lmZGVmIENPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFCkBAIC0yMzMsMTIgKzI5NiwxMyBAQAogCSAqIFRoaXMgY29kZSBpcyBydW4gb24gYSB0aW1lci4gIElmIHRoZSBjbG9jayBpcyBzZXQsIHRoYXQgdGltZXIKIAkgKiBtYXkgbm90IGV4cGlyZSBhdCB0aGUgY29ycmVjdCB0aW1lLiAgVGh1cywgd2UgYWRqdXN0Li4uCiAJICovCi0JaWYgKCFudHBfc3luY2VkKCkpCisJaWYgKCFudHBfc3luY2VkKCkpIHsKIAkJLyoKIAkJICogTm90IHN5bmNlZCwgZXhpdCwgZG8gbm90IHJlc3RhcnQgYSB0aW1lciAoaWYgb25lIGlzCiAJCSAqIHJ1bm5pbmcsIGxldCBpdCBydW4gb3V0KS4KIAkJICovCiAJCXJldHVybjsKKwl9CiAKIAlnZXRuc3RpbWVvZmRheSgmbm93KTsKIAlpZiAoYWJzKG5vdy50dl9uc2VjIC0gKE5TRUNfUEVSX1NFQyAvIDIpKSA8PSB0aWNrX25zZWMgLyAyKQpAQCAtMjcwLDcgKzMzNCwxMTYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlfY21vc190aW1lcih2b2lkKSB7IH0KICNlbmRpZgogCi0vKiBhZGp0aW1leCBtYWlubHkgYWxsb3dzIHJlYWRpbmcgKGFuZCB3cml0aW5nLCBpZiBzdXBlcnVzZXIpIG9mCisvKgorICogU3RhcnQgdGhlIGxlYXAgc2Vjb25kcyB0aW1lcjoKKyAqLworc3RhdGljIGlubGluZSB2b2lkIG50cF9zdGFydF9sZWFwX3RpbWVyKHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJbG9uZyBub3cgPSB0cy0+dHZfc2VjOworCisJaWYgKHRpbWVfc3RhdHVzICYgU1RBX0lOUykgeworCQl0aW1lX3N0YXRlID0gVElNRV9JTlM7CisJCW5vdyArPSA4NjQwMCAtIG5vdyAlIDg2NDAwOworCQlocnRpbWVyX3N0YXJ0KCZsZWFwX3RpbWVyLCBrdGltZV9zZXQobm93LCAwKSwgSFJUSU1FUl9NT0RFX0FCUyk7CisKKwkJcmV0dXJuOworCX0KKworCWlmICh0aW1lX3N0YXR1cyAmIFNUQV9ERUwpIHsKKwkJdGltZV9zdGF0ZSA9IFRJTUVfREVMOworCQlub3cgKz0gODY0MDAgLSAobm93ICsgMSkgJSA4NjQwMDsKKwkJaHJ0aW1lcl9zdGFydCgmbGVhcF90aW1lciwga3RpbWVfc2V0KG5vdywgMCksIEhSVElNRVJfTU9ERV9BQlMpOworCX0KK30KKworLyoKKyAqIFByb3BhZ2F0ZSBhIG5ldyB0eGMtPnN0YXR1cyB2YWx1ZSBpbnRvIHRoZSBOVFAgc3RhdGU6CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX2Fkal9zdGF0dXMoc3RydWN0IHRpbWV4ICp0eGMsIHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJaWYgKCh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpICYmICEodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkgeworCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKKwkJdGltZV9zdGF0dXMgPSBTVEFfVU5TWU5DOworCX0KKworCS8qCisJICogSWYgd2UgdHVybiBvbiBQTEwgYWRqdXN0bWVudHMgdGhlbiByZXNldCB0aGUKKwkgKiByZWZlcmVuY2UgdGltZSB0byBjdXJyZW50IHRpbWUuCisJICovCisJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfUExMKSAmJiAodHhjLT5zdGF0dXMgJiBTVEFfUExMKSkKKwkJdGltZV9yZWZ0aW1lID0geHRpbWUudHZfc2VjOworCisJLyogb25seSBzZXQgYWxsb3dlZCBiaXRzICovCisJdGltZV9zdGF0dXMgJj0gU1RBX1JPTkxZOworCXRpbWVfc3RhdHVzIHw9IHR4Yy0+c3RhdHVzICYgflNUQV9ST05MWTsKKworCXN3aXRjaCAodGltZV9zdGF0ZSkgeworCWNhc2UgVElNRV9PSzoKKwkJbnRwX3N0YXJ0X2xlYXBfdGltZXIodHMpOworCQlicmVhazsKKwljYXNlIFRJTUVfSU5TOgorCWNhc2UgVElNRV9ERUw6CisJCXRpbWVfc3RhdGUgPSBUSU1FX09LOworCQludHBfc3RhcnRfbGVhcF90aW1lcih0cyk7CisJY2FzZSBUSU1FX1dBSVQ6CisJCWlmICghKHRpbWVfc3RhdHVzICYgKFNUQV9JTlMgfCBTVEFfREVMKSkpCisJCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKKwkJYnJlYWs7CisJY2FzZSBUSU1FX09PUDoKKwkJaHJ0aW1lcl9yZXN0YXJ0KCZsZWFwX3RpbWVyKTsKKwkJYnJlYWs7CisJfQorfQorLyoKKyAqIENhbGxlZCB3aXRoIHRoZSB4dGltZSBsb2NrIGhlbGQsIHNvIHdlIGNhbiBhY2Nlc3MgYW5kIG1vZGlmeQorICogYWxsIHRoZSBnbG9iYWwgTlRQIHN0YXRlOgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc19hZGp0aW1leF9tb2RlcyhzdHJ1Y3QgdGltZXggKnR4Yywgc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMpCisJCXByb2Nlc3NfYWRqX3N0YXR1cyh0eGMsIHRzKTsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX05BTk8pCisJCXRpbWVfc3RhdHVzIHw9IFNUQV9OQU5POworCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTUlDUk8pCisJCXRpbWVfc3RhdHVzICY9IH5TVEFfTkFOTzsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX0ZSRVFVRU5DWSkgeworCQl0aW1lX2ZyZXEgPSB0eGMtPmZyZXEgKiBQUE1fU0NBTEU7CisJCXRpbWVfZnJlcSA9IG1pbih0aW1lX2ZyZXEsIE1BWEZSRVFfU0NBTEVEKTsKKwkJdGltZV9mcmVxID0gbWF4KHRpbWVfZnJlcSwgLU1BWEZSRVFfU0NBTEVEKTsKKwl9CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9NQVhFUlJPUikKKwkJdGltZV9tYXhlcnJvciA9IHR4Yy0+bWF4ZXJyb3I7CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9FU1RFUlJPUikKKwkJdGltZV9lc3RlcnJvciA9IHR4Yy0+ZXN0ZXJyb3I7CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9USU1FQ09OU1QpIHsKKwkJdGltZV9jb25zdGFudCA9IHR4Yy0+Y29uc3RhbnQ7CisJCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQorCQkJdGltZV9jb25zdGFudCArPSA0OworCQl0aW1lX2NvbnN0YW50ID0gbWluKHRpbWVfY29uc3RhbnQsIChsb25nKU1BWFRDKTsKKwkJdGltZV9jb25zdGFudCA9IG1heCh0aW1lX2NvbnN0YW50LCAwbCk7CisJfQorCisJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVEFJICYmIHR4Yy0+Y29uc3RhbnQgPiAwKQorCQl0aW1lX3RhaSA9IHR4Yy0+Y29uc3RhbnQ7CisKKwlpZiAodHhjLT5tb2RlcyAmIEFESl9PRkZTRVQpCisJCW50cF91cGRhdGVfb2Zmc2V0KHR4Yy0+b2Zmc2V0KTsKKworCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCisJCXRpY2tfdXNlYyA9IHR4Yy0+dGljazsKKworCWlmICh0eGMtPm1vZGVzICYgKEFESl9USUNLfEFESl9GUkVRVUVOQ1l8QURKX09GRlNFVCkpCisJCW50cF91cGRhdGVfZnJlcXVlbmN5KCk7Cit9CisKKy8qCisgKiBhZGp0aW1leCBtYWlubHkgYWxsb3dzIHJlYWRpbmcgKGFuZCB3cml0aW5nLCBpZiBzdXBlcnVzZXIpIG9mCiAgKiBrZXJuZWwgdGltZS1rZWVwaW5nIHZhcmlhYmxlcy4gdXNlZCBieSB4bnRwZC4KICAqLwogaW50IGRvX2FkanRpbWV4KHN0cnVjdCB0aW1leCAqdHhjKQpAQCAtMjkxLDExICs0NjQsMTQgQEAKIAkJIGlmICh0eGMtPm1vZGVzICYmICFjYXBhYmxlKENBUF9TWVNfVElNRSkpCiAJCQlyZXR1cm4gLUVQRVJNOwogCi0JCS8qIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgc29tZXRoaW5nIGlzIFZFUlkgd3JvbmchICovCisJCS8qCisJCSAqIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgdGhlbgorCQkgKiBzb21ldGhpbmcgaXMgVkVSWSB3cm9uZyEKKwkJICovCiAJCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0sgJiYKIAkJICAgICh0eGMtPnRpY2sgPCAgOTAwMDAwL1VTRVJfSFogfHwKIAkJICAgICB0eGMtPnRpY2sgPiAxMTAwMDAwL1VTRVJfSFopKQotCQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfU1RBVFVTICYmIHRpbWVfc3RhdGUgIT0gVElNRV9PSykKIAkJCWhydGltZXJfY2FuY2VsKCZsZWFwX3RpbWVyKTsKQEAgLTMwNSw3ICs0ODEsNiBAQAogCiAJd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwogCi0JLyogSWYgdGhlcmUgYXJlIGlucHV0IHBhcmFtZXRlcnMsIHRoZW4gcHJvY2VzcyB0aGVtICovCiAJaWYgKHR4Yy0+bW9kZXMgJiBBREpfQURKVElNRSkgewogCQlsb25nIHNhdmVfYWRqdXN0ID0gdGltZV9hZGp1c3Q7CiAKQEAgLTMxNSw5OCArNDkwLDI0IEBACiAJCQludHBfdXBkYXRlX2ZyZXF1ZW5jeSgpOwogCQl9CiAJCXR4Yy0+b2Zmc2V0ID0gc2F2ZV9hZGp1c3Q7Ci0JCWdvdG8gYWRqX2RvbmU7Ci0JfQotCWlmICh0eGMtPm1vZGVzKSB7Ci0JCWxvbmcgc2VjOworCX0gZWxzZSB7CiAKLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfU1RBVFVTKSB7Ci0JCQlpZiAoKHRpbWVfc3RhdHVzICYgU1RBX1BMTCkgJiYKLQkJCSAgICAhKHR4Yy0+c3RhdHVzICYgU1RBX1BMTCkpIHsKLQkJCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKLQkJCQl0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7Ci0JCQl9Ci0JCQkvKiBvbmx5IHNldCBhbGxvd2VkIGJpdHMgKi8KLQkJCXRpbWVfc3RhdHVzICY9IFNUQV9ST05MWTsKLQkJCXRpbWVfc3RhdHVzIHw9IHR4Yy0+c3RhdHVzICYgflNUQV9ST05MWTsKKwkJLyogSWYgdGhlcmUgYXJlIGlucHV0IHBhcmFtZXRlcnMsIHRoZW4gcHJvY2VzcyB0aGVtOiAqLworCQlpZiAodHhjLT5tb2RlcykKKwkJCXByb2Nlc3NfYWRqdGltZXhfbW9kZXModHhjLCAmdHMpOwogCi0JCQlzd2l0Y2ggKHRpbWVfc3RhdGUpIHsKLQkJCWNhc2UgVElNRV9PSzoKLQkJCXN0YXJ0X3RpbWVyOgotCQkJCXNlYyA9IHRzLnR2X3NlYzsKLQkJCQlpZiAodGltZV9zdGF0dXMgJiBTVEFfSU5TKSB7Ci0JCQkJCXRpbWVfc3RhdGUgPSBUSU1FX0lOUzsKLQkJCQkJc2VjICs9IDg2NDAwIC0gc2VjICUgODY0MDA7Ci0JCQkJCWhydGltZXJfc3RhcnQoJmxlYXBfdGltZXIsIGt0aW1lX3NldChzZWMsIDApLCBIUlRJTUVSX01PREVfQUJTKTsKLQkJCQl9IGVsc2UgaWYgKHRpbWVfc3RhdHVzICYgU1RBX0RFTCkgewotCQkJCQl0aW1lX3N0YXRlID0gVElNRV9ERUw7Ci0JCQkJCXNlYyArPSA4NjQwMCAtIChzZWMgKyAxKSAlIDg2NDAwOwotCQkJCQlocnRpbWVyX3N0YXJ0KCZsZWFwX3RpbWVyLCBrdGltZV9zZXQoc2VjLCAwKSwgSFJUSU1FUl9NT0RFX0FCUyk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FX0lOUzoKLQkJCWNhc2UgVElNRV9ERUw6Ci0JCQkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7Ci0JCQkJZ290byBzdGFydF90aW1lcjsKLQkJCQlicmVhazsKLQkJCWNhc2UgVElNRV9XQUlUOgotCQkJCWlmICghKHRpbWVfc3RhdHVzICYgKFNUQV9JTlMgfCBTVEFfREVMKSkpCi0JCQkJCXRpbWVfc3RhdGUgPSBUSU1FX09LOwotCQkJCWJyZWFrOwotCQkJY2FzZSBUSU1FX09PUDoKLQkJCQlocnRpbWVyX3Jlc3RhcnQoJmxlYXBfdGltZXIpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfTkFOTykKLQkJCXRpbWVfc3RhdHVzIHw9IFNUQV9OQU5POwotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9NSUNSTykKLQkJCXRpbWVfc3RhdHVzICY9IH5TVEFfTkFOTzsKLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9GUkVRVUVOQ1kpIHsKLQkJCXRpbWVfZnJlcSA9IChzNjQpdHhjLT5mcmVxICogUFBNX1NDQUxFOwotCQkJdGltZV9mcmVxID0gbWluKHRpbWVfZnJlcSwgTUFYRlJFUV9TQ0FMRUQpOwotCQkJdGltZV9mcmVxID0gbWF4KHRpbWVfZnJlcSwgLU1BWEZSRVFfU0NBTEVEKTsKLQkJfQotCi0JCWlmICh0eGMtPm1vZGVzICYgQURKX01BWEVSUk9SKQotCQkJdGltZV9tYXhlcnJvciA9IHR4Yy0+bWF4ZXJyb3I7Ci0JCWlmICh0eGMtPm1vZGVzICYgQURKX0VTVEVSUk9SKQotCQkJdGltZV9lc3RlcnJvciA9IHR4Yy0+ZXN0ZXJyb3I7Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElNRUNPTlNUKSB7Ci0JCQl0aW1lX2NvbnN0YW50ID0gdHhjLT5jb25zdGFudDsKLQkJCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX05BTk8pKQotCQkJCXRpbWVfY29uc3RhbnQgKz0gNDsKLQkJCXRpbWVfY29uc3RhbnQgPSBtaW4odGltZV9jb25zdGFudCwgKGxvbmcpTUFYVEMpOwotCQkJdGltZV9jb25zdGFudCA9IG1heCh0aW1lX2NvbnN0YW50LCAwbCk7Ci0JCX0KLQotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9UQUkgJiYgdHhjLT5jb25zdGFudCA+IDApCi0JCQl0aW1lX3RhaSA9IHR4Yy0+Y29uc3RhbnQ7Ci0KLQkJaWYgKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUKQotCQkJbnRwX3VwZGF0ZV9vZmZzZXQodHhjLT5vZmZzZXQpOwotCQlpZiAodHhjLT5tb2RlcyAmIEFESl9USUNLKQotCQkJdGlja191c2VjID0gdHhjLT50aWNrOwotCi0JCWlmICh0eGMtPm1vZGVzICYgKEFESl9USUNLfEFESl9GUkVRVUVOQ1l8QURKX09GRlNFVCkpCi0JCQludHBfdXBkYXRlX2ZyZXF1ZW5jeSgpOwotCX0KLQotCXR4Yy0+b2Zmc2V0ID0gc2hpZnRfcmlnaHQodGltZV9vZmZzZXQgKiBOVFBfSU5URVJWQUxfRlJFUSwKKwkJdHhjLT5vZmZzZXQgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCAqIE5UUF9JTlRFUlZBTF9GUkVRLAogCQkJCSAgTlRQX1NDQUxFX1NISUZUKTsKLQlpZiAoISh0aW1lX3N0YXR1cyAmIFNUQV9OQU5PKSkKLQkJdHhjLT5vZmZzZXQgLz0gTlNFQ19QRVJfVVNFQzsKKwkJaWYgKCEodGltZV9zdGF0dXMgJiBTVEFfTkFOTykpCisJCQl0eGMtPm9mZnNldCAvPSBOU0VDX1BFUl9VU0VDOworCX0KIAotYWRqX2RvbmU6CiAJcmVzdWx0ID0gdGltZV9zdGF0ZTsJLyogbW9zdGx5IGBUSU1FX09LJyAqLwogCWlmICh0aW1lX3N0YXR1cyAmIChTVEFfVU5TWU5DfFNUQV9DTE9DS0VSUikpCiAJCXJlc3VsdCA9IFRJTUVfRVJST1I7CiAKIAl0eGMtPmZyZXEJICAgPSBzaGlmdF9yaWdodCgodGltZV9mcmVxID4+IFBQTV9TQ0FMRV9JTlZfU0hJRlQpICoKLQkJCQkJIChzNjQpUFBNX1NDQUxFX0lOViwgTlRQX1NDQUxFX1NISUZUKTsKKwkJCQkJIFBQTV9TQ0FMRV9JTlYsIE5UUF9TQ0FMRV9TSElGVCk7CiAJdHhjLT5tYXhlcnJvcgkgICA9IHRpbWVfbWF4ZXJyb3I7CiAJdHhjLT5lc3RlcnJvcgkgICA9IHRpbWVfZXN0ZXJyb3I7CiAJdHhjLT5zdGF0dXMJICAgPSB0aW1lX3N0YXR1czsKQEAgLTQyNSw2ICs1MjYsNyBAQAogCXR4Yy0+Y2FsY250CSAgID0gMDsKIAl0eGMtPmVycmNudAkgICA9IDA7CiAJdHhjLT5zdGJjbnQJICAgPSAwOworCiAJd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7CiAKIAl0eGMtPnRpbWUudHZfc2VjID0gdHMudHZfc2VjOwpAQCAtNDQwLDYgKzU0Miw4IEBACiBzdGF0aWMgaW50IF9faW5pdCBudHBfdGlja19hZGpfc2V0dXAoY2hhciAqc3RyKQogewogCW50cF90aWNrX2FkaiA9IHNpbXBsZV9zdHJ0b2woc3RyLCBOVUxMLCAwKTsKKwludHBfdGlja19hZGogPDw9IE5UUF9TQ0FMRV9TSElGVDsKKwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lY29tcGFyZS5jIGIva2VybmVsL3RpbWUvdGltZWNvbXBhcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWU3ZjFhCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RpbWUvdGltZWNvbXBhcmUuYwpAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqIEF1dGhvcjogUGF0cmljayBPaGx5IDxwYXRyaWNrLm9obHlAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90aW1lY29tcGFyZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgorCisvKgorICogZml4ZWQgcG9pbnQgYXJpdGhtZXRpYyBzY2FsZSBmYWN0b3IgZm9yIHNrZXcKKyAqCisgKiBVc3VhbGx5IG9uZSB3b3VsZCBtZWFzdXJlIHNrZXcgaW4gcHBiIChwYXJ0cyBwZXIgYmlsbGlvbiwgMWU5KSwgYnV0CisgKiB1c2luZyBhIGZhY3RvciBvZiAyIHNpbXBsaWZpZXMgdGhlIG1hdGguCisgKi8KKyNkZWZpbmUgVElNRUNPTVBBUkVfU0tFV19SRVNPTFVUSU9OICgoKHM2NCkxKTw8MzApCisKK2t0aW1lX3QgdGltZWNvbXBhcmVfdHJhbnNmb3JtKHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCSAgICAgIHU2NCBzb3VyY2VfdHN0YW1wKQoreworCXU2NCBuc2VjOworCisJbnNlYyA9IHNvdXJjZV90c3RhbXAgKyBzeW5jLT5vZmZzZXQ7CisJbnNlYyArPSAoczY0KShzb3VyY2VfdHN0YW1wIC0gc3luYy0+bGFzdF91cGRhdGUpICogc3luYy0+c2tldyAvCisJCVRJTUVDT01QQVJFX1NLRVdfUkVTT0xVVElPTjsKKworCXJldHVybiBuc190b19rdGltZShuc2VjKTsKK30KK0VYUE9SVF9TWU1CT0wodGltZWNvbXBhcmVfdHJhbnNmb3JtKTsKKworaW50IHRpbWVjb21wYXJlX29mZnNldChzdHJ1Y3QgdGltZWNvbXBhcmUgKnN5bmMsCisJCSAgICAgICBzNjQgKm9mZnNldCwKKwkJICAgICAgIHU2NCAqc291cmNlX3RzdGFtcCkKK3sKKwl1NjQgc3RhcnRfc291cmNlID0gMCwgZW5kX3NvdXJjZSA9IDA7CisJc3RydWN0IHsKKwkJczY0IG9mZnNldDsKKwkJczY0IGR1cmF0aW9uX3RhcmdldDsKKwl9IGJ1ZmZlclsxMF0sIHNhbXBsZSwgKnNhbXBsZXM7CisJaW50IGNvdW50ZXIgPSAwLCBpOworCWludCB1c2VkOworCWludCBpbmRleDsKKwlpbnQgbnVtX3NhbXBsZXMgPSBzeW5jLT5udW1fc2FtcGxlczsKKworCWlmIChudW1fc2FtcGxlcyA+IHNpemVvZihidWZmZXIpL3NpemVvZihidWZmZXJbMF0pKSB7CisJCXNhbXBsZXMgPSBrbWFsbG9jKHNpemVvZigqc2FtcGxlcykgKiBudW1fc2FtcGxlcywgR0ZQX0FUT01JQyk7CisJCWlmICghc2FtcGxlcykgeworCQkJc2FtcGxlcyA9IGJ1ZmZlcjsKKwkJCW51bV9zYW1wbGVzID0gc2l6ZW9mKGJ1ZmZlcikvc2l6ZW9mKGJ1ZmZlclswXSk7CisJCX0KKwl9IGVsc2UgeworCQlzYW1wbGVzID0gYnVmZmVyOworCX0KKworCS8qIHJ1biB1bnRpbCB3ZSBoYXZlIGVub3VnaCB2YWxpZCBzYW1wbGVzLCBidXQgZG8gbm90IHRyeSBmb3JldmVyICovCisJaSA9IDA7CisJY291bnRlciA9IDA7CisJd2hpbGUgKDEpIHsKKwkJdTY0IHRzOworCQlrdGltZV90IHN0YXJ0LCBlbmQ7CisKKwkJc3RhcnQgPSBzeW5jLT50YXJnZXQoKTsKKwkJdHMgPSB0aW1lY291bnRlcl9yZWFkKHN5bmMtPnNvdXJjZSk7CisJCWVuZCA9IHN5bmMtPnRhcmdldCgpOworCisJCWlmICghaSkKKwkJCXN0YXJ0X3NvdXJjZSA9IHRzOworCisJCS8qIGlnbm9yZSBuZWdhdGl2ZSBkdXJhdGlvbnMgKi8KKwkJc2FtcGxlLmR1cmF0aW9uX3RhcmdldCA9IGt0aW1lX3RvX25zKGt0aW1lX3N1YihlbmQsIHN0YXJ0KSk7CisJCWlmIChzYW1wbGUuZHVyYXRpb25fdGFyZ2V0ID49IDApIHsKKwkJCS8qCisJCQkgKiBhc3N1bWUgc3ltZXRyaWMgZGVsYXkgdG8gYW5kIGZyb20gc291cmNlOgorCQkJICogYXZlcmFnZSB0YXJnZXQgdGltZSBjb3JyZXNwb25kcyB0byBtZWFzdXJlZAorCQkJICogc291cmNlIHRpbWUKKwkJCSAqLworCQkJc2FtcGxlLm9mZnNldCA9CisJCQkJa3RpbWVfdG9fbnMoa3RpbWVfYWRkKGVuZCwgc3RhcnQpKSAvIDIgLQorCQkJCXRzOworCisJCQkvKiBzaW1wbGUgaW5zZXJ0aW9uIHNvcnQgYmFzZWQgb24gZHVyYXRpb24gKi8KKwkJCWluZGV4ID0gY291bnRlciAtIDE7CisJCQl3aGlsZSAoaW5kZXggPj0gMCkgeworCQkJCWlmIChzYW1wbGVzW2luZGV4XS5kdXJhdGlvbl90YXJnZXQgPAorCQkJCSAgICBzYW1wbGUuZHVyYXRpb25fdGFyZ2V0KQorCQkJCQlicmVhazsKKwkJCQlzYW1wbGVzW2luZGV4ICsgMV0gPSBzYW1wbGVzW2luZGV4XTsKKwkJCQlpbmRleC0tOworCQkJfQorCQkJc2FtcGxlc1tpbmRleCArIDFdID0gc2FtcGxlOworCQkJY291bnRlcisrOworCQl9CisKKwkJaSsrOworCQlpZiAoY291bnRlciA+PSBudW1fc2FtcGxlcyB8fCBpID49IDEwMDAwMCkgeworCQkJZW5kX3NvdXJjZSA9IHRzOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkqc291cmNlX3RzdGFtcCA9IChlbmRfc291cmNlICsgc3RhcnRfc291cmNlKSAvIDI7CisKKwkvKiByZW1vdmUgb3V0bGllcnMgYnkgb25seSB1c2luZyA3NSUgb2YgdGhlIHNhbXBsZXMgKi8KKwl1c2VkID0gY291bnRlciAqIDMgLyA0OworCWlmICghdXNlZCkKKwkJdXNlZCA9IGNvdW50ZXI7CisJaWYgKHVzZWQpIHsKKwkJLyogY2FsY3VsYXRlIGF2ZXJhZ2UgKi8KKwkJczY0IG9mZiA9IDA7CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHVzZWQ7IGluZGV4KyspCisJCQlvZmYgKz0gc2FtcGxlc1tpbmRleF0ub2Zmc2V0OworCQkqb2Zmc2V0ID0gZGl2X3M2NChvZmYsIHVzZWQpOworCX0KKworCWlmIChzYW1wbGVzICYmIHNhbXBsZXMgIT0gYnVmZmVyKQorCQlrZnJlZShzYW1wbGVzKTsKKworCXJldHVybiB1c2VkOworfQorRVhQT1JUX1NZTUJPTCh0aW1lY29tcGFyZV9vZmZzZXQpOworCit2b2lkIF9fdGltZWNvbXBhcmVfdXBkYXRlKHN0cnVjdCB0aW1lY29tcGFyZSAqc3luYywKKwkJCSAgdTY0IHNvdXJjZV90c3RhbXApCit7CisJczY0IG9mZnNldDsKKwl1NjQgYXZlcmFnZV90aW1lOworCisJaWYgKCF0aW1lY29tcGFyZV9vZmZzZXQoc3luYywgJm9mZnNldCwgJmF2ZXJhZ2VfdGltZSkpCisJCXJldHVybjsKKworCWlmICghc3luYy0+bGFzdF91cGRhdGUpIHsKKwkJc3luYy0+bGFzdF91cGRhdGUgPSBhdmVyYWdlX3RpbWU7CisJCXN5bmMtPm9mZnNldCA9IG9mZnNldDsKKwkJc3luYy0+c2tldyA9IDA7CisJfSBlbHNlIHsKKwkJczY0IGRlbHRhX25zZWMgPSBhdmVyYWdlX3RpbWUgLSBzeW5jLT5sYXN0X3VwZGF0ZTsKKworCQkvKiBhdm9pZCBkaXZpc2lvbiBieSBuZWdhdGl2ZSBvciBzbWFsbCBkZWx0YXMgKi8KKwkJaWYgKGRlbHRhX25zZWMgPj0gMTAwMDApIHsKKwkJCXM2NCBkZWx0YV9vZmZzZXRfbnNlYyA9IG9mZnNldCAtIHN5bmMtPm9mZnNldDsKKwkJCXM2NCBza2V3OyAvKiBkZWx0YV9vZmZzZXRfbnNlYyAqCisJCQkJICAgICBUSU1FQ09NUEFSRV9TS0VXX1JFU09MVVRJT04gLworCQkJCSAgICAgZGVsdGFfbnNlYyAqLworCQkJdTY0IGRpdmlzb3I7CisKKwkJCS8qIGRpdl9zNjQoKSBpcyBsaW1pdGVkIHRvIDMyIGJpdCBkaXZpc29yICovCisJCQlza2V3ID0gZGVsdGFfb2Zmc2V0X25zZWMgKiBUSU1FQ09NUEFSRV9TS0VXX1JFU09MVVRJT047CisJCQlkaXZpc29yID0gZGVsdGFfbnNlYzsKKwkJCXdoaWxlICh1bmxpa2VseShkaXZpc29yID49ICgoczY0KTEpIDw8IDMyKSkgeworCQkJCS8qIGRpdmlkZSBib3RoIGJ5IDI7IGJld2FyZSwgcmlnaHQgc2hpZnQKKwkJCQkgICBvZiBuZWdhdGl2ZSB2YWx1ZSBoYXMgdW5kZWZpbmVkCisJCQkJICAgYmVoYXZpb3IgYW5kIGNhbiBvbmx5IGJlIHVzZWQgZm9yCisJCQkJICAgdGhlIHBvc2l0aXZlIGRpdmlzb3IgKi8KKwkJCQlza2V3ID0gZGl2X3M2NChza2V3LCAyKTsKKwkJCQlkaXZpc29yID4+PSAxOworCQkJfQorCQkJc2tldyA9IGRpdl9zNjQoc2tldywgZGl2aXNvcik7CisKKwkJCS8qCisJCQkgKiBDYWxjdWxhdGUgbmV3IG92ZXJhbGwgc2tldyBhcyA0LzE2IHRoZQorCQkJICogb2xkIHZhbHVlIGFuZCAxMi8xNiB0aGUgbmV3IG9uZS4gVGhpcyBpcworCQkJICogYSByYXRoZXIgYXJiaXRyYXJ5IHRyYWRlb2ZmIGJldHdlZW4KKwkJCSAqIG9ubHkgdXNpbmcgdGhlIGxhdGVzdCBtZWFzdXJlbWVudCAoMC8xNiBhbmQKKwkJCSAqIDE2LzE2KSBhbmQgZXZlbiBtb3JlIHdlaWdodCBvbiBwYXN0IG1lYXN1cmVtZW50cy4KKwkJCSAqLworI2RlZmluZSBUSU1FQ09NUEFSRV9ORVdfU0tFV19QRVJfMTYgMTIKKwkJCXN5bmMtPnNrZXcgPQorCQkJCWRpdl9zNjQoKDE2IC0gVElNRUNPTVBBUkVfTkVXX1NLRVdfUEVSXzE2KSAqCisJCQkJCXN5bmMtPnNrZXcgKworCQkJCQlUSU1FQ09NUEFSRV9ORVdfU0tFV19QRVJfMTYgKiBza2V3LAorCQkJCQkxNik7CisJCQlzeW5jLT5sYXN0X3VwZGF0ZSA9IGF2ZXJhZ2VfdGltZTsKKwkJCXN5bmMtPm9mZnNldCA9IG9mZnNldDsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0woX190aW1lY29tcGFyZV91cGRhdGUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCAxM2RkNjRmLi45Yjc3ZmM5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtNTg5LDExICs1ODksMTQgQEAKIAl9CiB9CiAKLWludCBfX21vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcykKK3N0YXRpYyBpbmxpbmUgaW50CitfX21vZF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcywgYm9vbCBwZW5kaW5nX29ubHkpCiB7CiAJc3RydWN0IHR2ZWNfYmFzZSAqYmFzZSwgKm5ld19iYXNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKKworCXJldCA9IDA7CiAKIAl0aW1lcl9zdGF0c190aW1lcl9zZXRfc3RhcnRfaW5mbyh0aW1lcik7CiAJQlVHX09OKCF0aW1lci0+ZnVuY3Rpb24pOwpAQCAtNjAzLDYgKzYwNiw5IEBACiAJaWYgKHRpbWVyX3BlbmRpbmcodGltZXIpKSB7CiAJCWRldGFjaF90aW1lcih0aW1lciwgMCk7CiAJCXJldCA9IDE7CisJfSBlbHNlIHsKKwkJaWYgKHBlbmRpbmdfb25seSkKKwkJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlkZWJ1Z190aW1lcl9hY3RpdmF0ZSh0aW1lcik7CkBAIC02MjksMTIgKzYzNSw4MyBAQAogCiAJdGltZXItPmV4cGlyZXMgPSBleHBpcmVzOwogCWludGVybmFsX2FkZF90aW1lcihiYXNlLCB0aW1lcik7CisKK291dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmFzZS0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotRVhQT1JUX1NZTUJPTChfX21vZF90aW1lcik7CisvKioKKyAqIG1vZF90aW1lcl9wZW5kaW5nIC0gbW9kaWZ5IGEgcGVuZGluZyB0aW1lcidzIHRpbWVvdXQKKyAqIEB0aW1lcjogdGhlIHBlbmRpbmcgdGltZXIgdG8gYmUgbW9kaWZpZWQKKyAqIEBleHBpcmVzOiBuZXcgdGltZW91dCBpbiBqaWZmaWVzCisgKgorICogbW9kX3RpbWVyX3BlbmRpbmcoKSBpcyB0aGUgc2FtZSBmb3IgcGVuZGluZyB0aW1lcnMgYXMgbW9kX3RpbWVyKCksCisgKiBidXQgd2lsbCBub3QgcmUtYWN0aXZhdGUgYW5kIG1vZGlmeSBhbHJlYWR5IGRlbGV0ZWQgdGltZXJzLgorICoKKyAqIEl0IGlzIHVzZWZ1bCBmb3IgdW5zZXJpYWxpemVkIHVzZSBvZiB0aW1lcnMuCisgKi8KK2ludCBtb2RfdGltZXJfcGVuZGluZyhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgZXhwaXJlcykKK3sKKwlyZXR1cm4gX19tb2RfdGltZXIodGltZXIsIGV4cGlyZXMsIHRydWUpOworfQorRVhQT1JUX1NZTUJPTChtb2RfdGltZXJfcGVuZGluZyk7CisKKy8qKgorICogbW9kX3RpbWVyIC0gbW9kaWZ5IGEgdGltZXIncyB0aW1lb3V0CisgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBtb2RpZmllZAorICogQGV4cGlyZXM6IG5ldyB0aW1lb3V0IGluIGppZmZpZXMKKyAqCisgKiBtb2RfdGltZXIoKSBpcyBhIG1vcmUgZWZmaWNpZW50IHdheSB0byB1cGRhdGUgdGhlIGV4cGlyZSBmaWVsZCBvZiBhbgorICogYWN0aXZlIHRpbWVyIChpZiB0aGUgdGltZXIgaXMgaW5hY3RpdmUgaXQgd2lsbCBiZSBhY3RpdmF0ZWQpCisgKgorICogbW9kX3RpbWVyKHRpbWVyLCBleHBpcmVzKSBpcyBlcXVpdmFsZW50IHRvOgorICoKKyAqICAgICBkZWxfdGltZXIodGltZXIpOyB0aW1lci0+ZXhwaXJlcyA9IGV4cGlyZXM7IGFkZF90aW1lcih0aW1lcik7CisgKgorICogTm90ZSB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSB1bnNlcmlhbGl6ZWQgY29uY3VycmVudCB1c2VycyBvZiB0aGUKKyAqIHNhbWUgdGltZXIsIHRoZW4gbW9kX3RpbWVyKCkgaXMgdGhlIG9ubHkgc2FmZSB3YXkgdG8gbW9kaWZ5IHRoZSB0aW1lb3V0LAorICogc2luY2UgYWRkX3RpbWVyKCkgY2Fubm90IG1vZGlmeSBhbiBhbHJlYWR5IHJ1bm5pbmcgdGltZXIuCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgd2hldGhlciBpdCBoYXMgbW9kaWZpZWQgYSBwZW5kaW5nIHRpbWVyIG9yIG5vdC4KKyAqIChpZS4gbW9kX3RpbWVyKCkgb2YgYW4gaW5hY3RpdmUgdGltZXIgcmV0dXJucyAwLCBtb2RfdGltZXIoKSBvZiBhbgorICogYWN0aXZlIHRpbWVyIHJldHVybnMgMS4pCisgKi8KK2ludCBtb2RfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIGV4cGlyZXMpCit7CisJLyoKKwkgKiBUaGlzIGlzIGEgY29tbW9uIG9wdGltaXphdGlvbiB0cmlnZ2VyZWQgYnkgdGhlCisJICogbmV0d29ya2luZyBjb2RlIC0gaWYgdGhlIHRpbWVyIGlzIHJlLW1vZGlmaWVkCisJICogdG8gYmUgdGhlIHNhbWUgdGhpbmcgdGhlbiBqdXN0IHJldHVybjoKKwkgKi8KKwlpZiAodGltZXItPmV4cGlyZXMgPT0gZXhwaXJlcyAmJiB0aW1lcl9wZW5kaW5nKHRpbWVyKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gX19tb2RfdGltZXIodGltZXIsIGV4cGlyZXMsIGZhbHNlKTsKK30KK0VYUE9SVF9TWU1CT0wobW9kX3RpbWVyKTsKKworLyoqCisgKiBhZGRfdGltZXIgLSBzdGFydCBhIHRpbWVyCisgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBhZGRlZAorICoKKyAqIFRoZSBrZXJuZWwgd2lsbCBkbyBhIC0+ZnVuY3Rpb24oLT5kYXRhKSBjYWxsYmFjayBmcm9tIHRoZQorICogdGltZXIgaW50ZXJydXB0IGF0IHRoZSAtPmV4cGlyZXMgcG9pbnQgaW4gdGhlIGZ1dHVyZS4gVGhlCisgKiBjdXJyZW50IHRpbWUgaXMgJ2ppZmZpZXMnLgorICoKKyAqIFRoZSB0aW1lcidzIC0+ZXhwaXJlcywgLT5mdW5jdGlvbiAoYW5kIGlmIHRoZSBoYW5kbGVyIHVzZXMgaXQsIC0+ZGF0YSkKKyAqIGZpZWxkcyBtdXN0IGJlIHNldCBwcmlvciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgKgorICogVGltZXJzIHdpdGggYW4gLT5leHBpcmVzIGZpZWxkIGluIHRoZSBwYXN0IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIG5leHQKKyAqIHRpbWVyIHRpY2suCisgKi8KK3ZvaWQgYWRkX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKK3sKKwlCVUdfT04odGltZXJfcGVuZGluZyh0aW1lcikpOworCW1vZF90aW1lcih0aW1lciwgdGltZXItPmV4cGlyZXMpOworfQorRVhQT1JUX1NZTUJPTChhZGRfdGltZXIpOwogCiAvKioKICAqIGFkZF90aW1lcl9vbiAtIHN0YXJ0IGEgdGltZXIgb24gYSBwYXJ0aWN1bGFyIENQVQpAQCAtNjY3LDQ0ICs3NDQsNiBAQAogfQogCiAvKioKLSAqIG1vZF90aW1lciAtIG1vZGlmeSBhIHRpbWVyJ3MgdGltZW91dAotICogQHRpbWVyOiB0aGUgdGltZXIgdG8gYmUgbW9kaWZpZWQKLSAqIEBleHBpcmVzOiBuZXcgdGltZW91dCBpbiBqaWZmaWVzCi0gKgotICogbW9kX3RpbWVyKCkgaXMgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gdXBkYXRlIHRoZSBleHBpcmUgZmllbGQgb2YgYW4KLSAqIGFjdGl2ZSB0aW1lciAoaWYgdGhlIHRpbWVyIGlzIGluYWN0aXZlIGl0IHdpbGwgYmUgYWN0aXZhdGVkKQotICoKLSAqIG1vZF90aW1lcih0aW1lciwgZXhwaXJlcykgaXMgZXF1aXZhbGVudCB0bzoKLSAqCi0gKiAgICAgZGVsX3RpbWVyKHRpbWVyKTsgdGltZXItPmV4cGlyZXMgPSBleHBpcmVzOyBhZGRfdGltZXIodGltZXIpOwotICoKLSAqIE5vdGUgdGhhdCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdW5zZXJpYWxpemVkIGNvbmN1cnJlbnQgdXNlcnMgb2YgdGhlCi0gKiBzYW1lIHRpbWVyLCB0aGVuIG1vZF90aW1lcigpIGlzIHRoZSBvbmx5IHNhZmUgd2F5IHRvIG1vZGlmeSB0aGUgdGltZW91dCwKLSAqIHNpbmNlIGFkZF90aW1lcigpIGNhbm5vdCBtb2RpZnkgYW4gYWxyZWFkeSBydW5uaW5nIHRpbWVyLgotICoKLSAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHdoZXRoZXIgaXQgaGFzIG1vZGlmaWVkIGEgcGVuZGluZyB0aW1lciBvciBub3QuCi0gKiAoaWUuIG1vZF90aW1lcigpIG9mIGFuIGluYWN0aXZlIHRpbWVyIHJldHVybnMgMCwgbW9kX3RpbWVyKCkgb2YgYW4KLSAqIGFjdGl2ZSB0aW1lciByZXR1cm5zIDEuKQotICovCi1pbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBleHBpcmVzKQotewotCUJVR19PTighdGltZXItPmZ1bmN0aW9uKTsKLQotCXRpbWVyX3N0YXRzX3RpbWVyX3NldF9zdGFydF9pbmZvKHRpbWVyKTsKLQkvKgotCSAqIFRoaXMgaXMgYSBjb21tb24gb3B0aW1pemF0aW9uIHRyaWdnZXJlZCBieSB0aGUKLQkgKiBuZXR3b3JraW5nIGNvZGUgLSBpZiB0aGUgdGltZXIgaXMgcmUtbW9kaWZpZWQKLQkgKiB0byBiZSB0aGUgc2FtZSB0aGluZyB0aGVuIGp1c3QgcmV0dXJuOgotCSAqLwotCWlmICh0aW1lci0+ZXhwaXJlcyA9PSBleHBpcmVzICYmIHRpbWVyX3BlbmRpbmcodGltZXIpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiBfX21vZF90aW1lcih0aW1lciwgZXhwaXJlcyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0wobW9kX3RpbWVyKTsKLQotLyoqCiAgKiBkZWxfdGltZXIgLSBkZWFjdGl2ZSBhIHRpbWVyLgogICogQHRpbWVyOiB0aGUgdGltZXIgdG8gYmUgZGVhY3RpdmF0ZWQKICAqCkBAIC03MzMsNyArNzcyLDYgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KIEVYUE9SVF9TWU1CT0woZGVsX3RpbWVyKTsKIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTc2Nyw3ICs4MDUsNiBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQogRVhQT1JUX1NZTUJPTCh0cnlfdG9fZGVsX3RpbWVyX3N5bmMpOwogCiAvKioKQEAgLTc5Niw3ICs4MzMsNiBAQAogCQljcHVfcmVsYXgoKTsKIAl9CiB9Ci0KIEVYUE9SVF9TWU1CT0woZGVsX3RpbWVyX3N5bmMpOwogI2VuZGlmCiAKQEAgLTEyNjgsNyArMTMwNCw3IEBACiAJZXhwaXJlID0gdGltZW91dCArIGppZmZpZXM7CiAKIAlzZXR1cF90aW1lcl9vbl9zdGFjaygmdGltZXIsIHByb2Nlc3NfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpY3VycmVudCk7Ci0JX19tb2RfdGltZXIoJnRpbWVyLCBleHBpcmUpOworCV9fbW9kX3RpbWVyKCZ0aW1lciwgZXhwaXJlLCBmYWxzZSk7CiAJc2NoZWR1bGUoKTsKIAlkZWxfc2luZ2xlc2hvdF90aW1lcl9zeW5jKCZ0aW1lcik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyLmMgYi9rZXJuZWwvdXNlci5jCmluZGV4IGZiYjMwMGUuLjg1MGUwYmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyLmMKKysrIGIva2VybmVsL3VzZXIuYwpAQCAtMjAsNyArMjAsNyBAQAogCiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgaW5pdF91c2VyX25zID0gewogCS5rcmVmID0gewotCQkucmVmY291bnQJPSBBVE9NSUNfSU5JVCgxKSwKKwkJLnJlZmNvdW50CT0gQVRPTUlDX0lOSVQoMiksCiAJfSwKIAkuY3JlYXRvciA9ICZyb290X3VzZXIsCiB9OwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZpZwppbmRleCAwM2MyYzI0Li41NGFhZjRmIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZworKysgYi9saWIvS2NvbmZpZwpAQCAtMTM2LDEyICsxMzYsNiBAQAogY29uZmlnIFRFWFRTRUFSQ0hfRlNNCiAJdHJpc3RhdGUKIAotIwotIyBwbGlzdCBzdXBwb3J0IGlzIHNlbGVjdCNlZCBpZiBuZWVkZWQKLSMKLWNvbmZpZyBQTElTVAotCWJvb2xlYW4KLQogY29uZmlnIEhBU19JT01FTQogCWJvb2xlYW4KIAlkZXBlbmRzIG9uICFOT19JT01FTQpAQCAtMTc0LDQgKzE2OCwxMCBAQAogICAgICAgIGJvb2wgIkRpc2FibGUgb2Jzb2xldGUgY3B1bWFzayBmdW5jdGlvbnMiIGlmIERFQlVHX1BFUl9DUFVfTUFQUwogICAgICAgIGRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIEJST0tFTgogCisjCisjIE5ldGxpbmsgYXR0cmlidXRlIHBhcnNpbmcgc3VwcG9ydCBpcyBzZWxlY3QnZWQgaWYgbmVlZGVkCisjCitjb25maWcgTkxBVFRSCisJYm9vbAorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDFiY2Y5Y2QuLjA2MjZmYTQgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC00MDIsNyArNDAyLDcgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCAmJiBTVEFDS1RSQUNFX1NVUFBPUlQgJiYgTE9DS0RFUF9TVVBQT1JUCiAJc2VsZWN0IFNUQUNLVFJBQ0UKLQlzZWxlY3QgRlJBTUVfUE9JTlRFUiBpZiAhWDg2ICYmICFNSVBTICYmICFQUEMKKwlzZWxlY3QgRlJBTUVfUE9JTlRFUiBpZiAhWDg2ICYmICFNSVBTICYmICFQUEMgJiYgIUFSTV9VTldJTkQKIAlzZWxlY3QgS0FMTFNZTVMKIAlzZWxlY3QgS0FMTFNZTVNfQUxMCiAKQEAgLTg0Nyw2MCArODQ3LDcwIEBACiAKIAkgIFNheSBOIGlmIHlvdSBhcmUgdW5zdXJlLgogCi1jb25maWcgRFlOQU1JQ19QUklOVEtfREVCVUcKLQlib29sICJFbmFibGUgZHluYW1pYyBwcmludGsoKSBjYWxsIHN1cHBvcnQiCitjb25maWcgRFlOQU1JQ19ERUJVRworCWJvb2wgIkVuYWJsZSBkeW5hbWljIHByaW50aygpIHN1cHBvcnQiCiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBQUklOVEsKKwlkZXBlbmRzIG9uIERFQlVHX0ZTCiAJc2VsZWN0IFBSSU5US19ERUJVRwogCWhlbHAKIAogCSAgQ29tcGlsZXMgZGVidWcgbGV2ZWwgbWVzc2FnZXMgaW50byB0aGUga2VybmVsLCB3aGljaCB3b3VsZCBub3QKIAkgIG90aGVyd2lzZSBiZSBhdmFpbGFibGUgYXQgcnVudGltZS4gVGhlc2UgbWVzc2FnZXMgY2FuIHRoZW4gYmUKLQkgIGVuYWJsZWQvZGlzYWJsZWQgb24gYSBwZXIgbW9kdWxlIGJhc2lzLiBUaGlzIG1lY2hhbmlzbSBpbXBsaWNpdGx5Ci0JICBlbmFibGVzIGFsbCBwcl9kZWJ1ZygpIGFuZCBkZXZfZGJnKCkgY2FsbHMuIFRoZSBpbXBhY3Qgb2YgdGhpcwotCSAgY29tcGlsZSBvcHRpb24gaXMgYSBsYXJnZXIga2VybmVsIHRleHQgc2l6ZSBvZiBhYm91dCAyJS4KKwkgIGVuYWJsZWQvZGlzYWJsZWQgYmFzZWQgb24gdmFyaW91cyBsZXZlbHMgb2Ygc2NvcGUgLSBwZXIgc291cmNlIGZpbGUsCisJICBmdW5jdGlvbiwgbW9kdWxlLCBmb3JtYXQgc3RyaW5nLCBhbmQgbGluZSBudW1iZXIuIFRoaXMgbWVjaGFuaXNtCisJICBpbXBsaWNpdGx5IGVuYWJsZXMgYWxsIHByX2RlYnVnKCkgYW5kIGRldl9kYmcoKSBjYWxscy4gVGhlIGltcGFjdCBvZgorCSAgdGhpcyBjb21waWxlIG9wdGlvbiBpcyBhIGxhcmdlciBrZXJuZWwgdGV4dCBzaXplIG9mIGFib3V0IDIlLgogCiAJICBVc2FnZToKIAotCSAgRHluYW1pYyBkZWJ1Z2dpbmcgaXMgY29udHJvbGxlZCBieSB0aGUgZGVidWdmcyBmaWxlLAotCSAgZHluYW1pY19wcmludGsvbW9kdWxlcy4gVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiB0aGUgbW9kdWxlcyB0aGF0Ci0JICBjYW4gYmUgZW5hYmxlZC4gVGhlIGZvcm1hdCBvZiB0aGUgZmlsZSBpcyB0aGUgbW9kdWxlIG5hbWUsIGZvbGxvd2VkCi0JICBieSBhIHNldCBvZiBmbGFncyB0aGF0IGNhbiBiZSBlbmFibGVkLiBUaGUgZmlyc3QgZmxhZyBpcyBhbHdheXMgdGhlCi0JICAnZW5hYmxlZCcgZmxhZy4gRm9yIGV4YW1wbGU6CisJICBEeW5hbWljIGRlYnVnZ2luZyBpcyBjb250cm9sbGVkIHZpYSB0aGUgJ2R5bmFtaWNfZGVidWcvZGRlYnVnJyBmaWxlLAorCSAgd2hpY2ggaXMgY29udGFpbmVkIGluIHRoZSAnZGVidWdmcycgZmlsZXN5c3RlbS4gVGh1cywgdGhlIGRlYnVnZnMKKwkgIGZpbGVzeXN0ZW0gbXVzdCBmaXJzdCBiZSBtb3VudGVkIGJlZm9yZSBtYWtpbmcgdXNlIG9mIHRoaXMgZmVhdHVyZS4KKwkgIFdlIHJlZmVyIHRoZSBjb250cm9sIGZpbGUgYXM6IDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1Zy4gVGhpcworCSAgZmlsZSBjb250YWlucyBhIGxpc3Qgb2YgdGhlIGRlYnVnIHN0YXRlbWVudHMgdGhhdCBjYW4gYmUgZW5hYmxlZC4gVGhlCisJICBmb3JtYXQgZm9yIGVhY2ggbGluZSBvZiB0aGUgZmlsZSBpczoKIAotCQk8bW9kdWxlX25hbWU+IDxlbmFibGVkPTAvMT4KLQkJCQkuCi0JCQkJLgotCQkJCS4KKwkJZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CiAKLQkgIDxtb2R1bGVfbmFtZT4gOiBOYW1lIG9mIHRoZSBtb2R1bGUgaW4gd2hpY2ggdGhlIGRlYnVnIGNhbGwgcmVzaWRlcwotCSAgPGVuYWJsZWQ9MC8xPiA6IHdoZXRoZXIgdGhlIG1lc3NhZ2VzIGFyZSBlbmFibGVkIG9yIG5vdAorCSAgZmlsZW5hbWUgOiBzb3VyY2UgZmlsZSBvZiB0aGUgZGVidWcgc3RhdGVtZW50CisJICBsaW5lbm8gOiBsaW5lIG51bWJlciBvZiB0aGUgZGVidWcgc3RhdGVtZW50CisJICBtb2R1bGUgOiBtb2R1bGUgdGhhdCBjb250YWlucyB0aGUgZGVidWcgc3RhdGVtZW50CisJICBmdW5jdGlvbiA6IGZ1bmN0aW9uIHRoYXQgY29udGFpbnMgdGhlIGRlYnVnIHN0YXRlbWVudAorICAgICAgICAgIGZsYWdzIDogJ3AnIG1lYW5zIHRoZSBsaW5lIGlzIHR1cm5lZCAnb24nIGZvciBwcmludGluZworICAgICAgICAgIGZvcm1hdCA6IHRoZSBmb3JtYXQgdXNlZCBmb3IgdGhlIGRlYnVnIHN0YXRlbWVudAogCiAJICBGcm9tIGEgbGl2ZSBzeXN0ZW06CiAKLQkJc25kX2hkYV9pbnRlbCBlbmFibGVkPTAKLQkJZml4dXAgZW5hYmxlZD0wCi0JCWRyaXZlciBlbmFibGVkPTAKKwkJbnVsbGFyYm9yOn4gIyBjYXQgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCisJCSMgZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0CisJCWZzL2Fpby5jOjIyMiBbYWlvXV9fcHV0X2lvY3R4IC0gIl9fcHV0X2lvY3R4OlwwNDBmcmVlaW5nXDA0MCVwXDAxMiIKKwkJZnMvYWlvLmM6MjQ4IFthaW9daW9jdHhfYWxsb2MgLSAiRU5PTUVNOlwwNDBucl9ldmVudHNcMDQwdG9vXDA0MGhpZ2hcMDEyIgorCQlmcy9haW8uYzoxNzcwIFthaW9dc3lzX2lvX2NhbmNlbCAtICJjYWxsaW5nXDA0MGNhbmNlbFwwMTIiCiAKLQkgIEVuYWJsZSBhIG1vZHVsZToKKwkgIEV4YW1wbGUgdXNhZ2U6CiAKLQkgIAkkZWNobyAic2V0IGVuYWJsZWQ9MSA8bW9kdWxlX25hbWU+IiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKwkJLy8gZW5hYmxlIHRoZSBtZXNzYWdlIGF0IGxpbmUgMTYwMyBvZiBmaWxlIHN2Y3NvY2suYworCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ2ZpbGUgc3Zjc29jay5jIGxpbmUgMTYwMyArcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkgIERpc2FibGUgYSBtb2R1bGU6CisJCS8vIGVuYWJsZSBhbGwgdGhlIG1lc3NhZ2VzIGluIGZpbGUgc3Zjc29jay5jCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnZmlsZSBzdmNzb2NrLmMgK3AnID4KKwkJCQkJCTxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2RkZWJ1ZwogCi0JICAJJGVjaG8gInNldCBlbmFibGVkPTAgPG1vZHVsZV9uYW1lPiIgPiBkeW5hbWljX3ByaW50ay9tb2R1bGVzCisJCS8vIGVuYWJsZSBhbGwgdGhlIG1lc3NhZ2VzIGluIHRoZSBORlMgc2VydmVyIG1vZHVsZQorCQludWxsYXJib3I6fiAjIGVjaG8gLW4gJ21vZHVsZSBuZnNkICtwJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCSAgRW5hYmxlIGFsbCBtb2R1bGVzOgorCQkvLyBlbmFibGUgYWxsIDEyIG1lc3NhZ2VzIGluIHRoZSBmdW5jdGlvbiBzdmNfcHJvY2VzcygpCisJCW51bGxhcmJvcjp+ICMgZWNobyAtbiAnZnVuYyBzdmNfcHJvY2VzcyArcCcgPgorCQkJCQkJPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvZGRlYnVnCiAKLQkJJGVjaG8gInNldCBlbmFibGVkPTEgYWxsIiA+IGR5bmFtaWNfcHJpbnRrL21vZHVsZXMKKwkJLy8gZGlzYWJsZSBhbGwgMTIgbWVzc2FnZXMgaW4gdGhlIGZ1bmN0aW9uIHN2Y19wcm9jZXNzKCkKKwkJbnVsbGFyYm9yOn4gIyBlY2hvIC1uICdmdW5jIHN2Y19wcm9jZXNzIC1wJyA+CisJCQkJCQk8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9kZGVidWcKIAotCSAgRGlzYWJsZSBhbGwgbW9kdWxlczoKLQotCQkkZWNobyAic2V0IGVuYWJsZWQ9MCBhbGwiID4gZHluYW1pY19wcmludGsvbW9kdWxlcwotCi0JICBGaW5hbGx5LCBwYXNzaW5nICJkeW5hbWljX3ByaW50ayIgYXQgdGhlIGNvbW1hbmQgbGluZSBlbmFibGVzCi0JICBkZWJ1Z2dpbmcgZm9yIGFsbCBtb2R1bGVzLiBUaGlzIG1vZGUgY2FuIGJlIHR1cm5lZCBvZmYgdmlhIHRoZSBhYm92ZQotCSAgZGlzYWJsZSBjb21tYW5kLgorCSAgU2VlIERvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAKIHNvdXJjZSAic2FtcGxlcy9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggMzJiMGU2NC4uOGJkYzY0NyAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtMTEsNyArMTEsOCBAQAogCSByYnRyZWUubyByYWRpeC10cmVlLm8gZHVtcF9zdGFjay5vIFwKIAkgaWRyLm8gaW50X3NxcnQubyBleHRhYmxlLm8gcHJpb190cmVlLm8gXAogCSBzaGExLm8gaXJxX3JlZ3MubyByZWNpcHJvY2FsX2Rpdi5vIGFyZ3Zfc3BsaXQubyBcCi0JIHByb3BvcnRpb25zLm8gcHJpb19oZWFwLm8gcmF0ZWxpbWl0Lm8gc2hvd19tZW0ubyBpc19zaW5nbGVfdGhyZWFkZWQubworCSBwcm9wb3J0aW9ucy5vIHByaW9faGVhcC5vIHJhdGVsaW1pdC5vIHNob3dfbWVtLm8gXAorCSBpc19zaW5nbGVfdGhyZWFkZWQubyBwbGlzdC5vCiAKIGxpYi0kKENPTkZJR19NTVUpICs9IGlvcmVtYXAubwogbGliLSQoQ09ORklHX1NNUCkgKz0gY3B1bWFzay5vCkBAIC00MCw3ICs0MSw2IEBACiBsaWItJChDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUKSArPSBmaW5kX2xhc3RfYml0Lm8KIG9iai0kKENPTkZJR19HRU5FUklDX0hXRUlHSFQpICs9IGh3ZWlnaHQubwogb2JqLSQoQ09ORklHX0xPQ0tfS0VSTkVMKSArPSBrZXJuZWxfbG9jay5vCi1vYmotJChDT05GSUdfUExJU1QpICs9IHBsaXN0Lm8KIG9iai0kKENPTkZJR19ERUJVR19QUkVFTVBUKSArPSBzbXBfcHJvY2Vzc29yX2lkLm8KIG9iai0kKENPTkZJR19ERUJVR19MSVNUKSArPSBsaXN0X2RlYnVnLm8KIG9iai0kKENPTkZJR19ERUJVR19PQkpFQ1RTKSArPSBkZWJ1Z29iamVjdHMubwpAQCAtODIsNyArODIsOSBAQAogCiBvYmotJChDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSykgKz0gc3lzY2FsbC5vCiAKLW9iai0kKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykgKz0gZHluYW1pY19wcmludGsubworb2JqLSQoQ09ORklHX0RZTkFNSUNfREVCVUcpICs9IGR5bmFtaWNfZGVidWcubworCitvYmotJChDT05GSUdfTkxBVFRSKSArPSBubGF0dHIubwogCiBob3N0cHJvZ3MteQk6PSBnZW5fY3JjMzJ0YWJsZQogY2xlYW4tZmlsZXMJOj0gY3JjMzJ0YWJsZS5oCmRpZmYgLS1naXQgYS9saWIvZHluYW1pY19kZWJ1Zy5jIGIvbGliL2R5bmFtaWNfZGVidWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzMxMzljCi0tLSAvZGV2L251bGwKKysrIGIvbGliL2R5bmFtaWNfZGVidWcuYwpAQCAtMCwwICsxLDc2OSBAQAorLyoKKyAqIGxpYi9keW5hbWljX2RlYnVnLmMKKyAqCisgKiBtYWtlIHByX2RlYnVnKCkvZGV2X2RiZygpIGNhbGxzIHJ1bnRpbWUgY29uZmlndXJhYmxlIGJhc2VkIHVwb24gdGhlaXIKKyAqIHNvdXJjZSBtb2R1bGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphc29uIEJhcm9uIDxqYmFyb25AcmVkaGF0LmNvbT4KKyAqIEJ5IEdyZWcgQmFua3MgPGduYkBtZWxib3VybmUuc2dpLmNvbT4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBTaWxpY29uIEdyYXBoaWNzIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9keW5hbWljX2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorCitleHRlcm4gc3RydWN0IF9kZGVidWcgX19zdGFydF9fX3ZlcmJvc2VbXTsKK2V4dGVybiBzdHJ1Y3QgX2RkZWJ1ZyBfX3N0b3BfX192ZXJib3NlW107CisKKy8qIGR5bmFtaWNfZGVidWdfZW5hYmxlZCwgYW5kIGR5bmFtaWNfZGVidWdfZW5hYmxlZDIgYXJlIGJpdG1hc2tzIGluIHdoaWNoCisgKiBiaXQgbiBpcyBzZXQgdG8gMSBpZiBhbnkgbW9kbmFtZSBoYXNoZXMgaW50byB0aGUgYnVja2V0IG4sIDAgb3RoZXJ3aXNlLiBUaGV5CisgKiB1c2UgaW5kZXBlbmRlbnQgaGFzaCBmdW5jdGlvbnMsIHRvIHJlZHVjZSB0aGUgY2hhbmNlIG9mIGZhbHNlIHBvc2l0aXZlcy4KKyAqLworbG9uZyBsb25nIGR5bmFtaWNfZGVidWdfZW5hYmxlZDsKK0VYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfZGVidWdfZW5hYmxlZCk7Citsb25nIGxvbmcgZHluYW1pY19kZWJ1Z19lbmFibGVkMjsKK0VYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfZGVidWdfZW5hYmxlZDIpOworCitzdHJ1Y3QgZGRlYnVnX3RhYmxlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CisJY2hhciAqbW9kX25hbWU7CisJdW5zaWduZWQgaW50IG51bV9kZGVidWdzOworCXVuc2lnbmVkIGludCBudW1fZW5hYmxlZDsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqZGRlYnVnczsKK307CisKK3N0cnVjdCBkZGVidWdfcXVlcnkgeworCWNvbnN0IGNoYXIgKmZpbGVuYW1lOworCWNvbnN0IGNoYXIgKm1vZHVsZTsKKwljb25zdCBjaGFyICpmdW5jdGlvbjsKKwljb25zdCBjaGFyICpmb3JtYXQ7CisJdW5zaWduZWQgaW50IGZpcnN0X2xpbmVubywgbGFzdF9saW5lbm87Cit9OworCitzdHJ1Y3QgZGRlYnVnX2l0ZXIgeworCXN0cnVjdCBkZGVidWdfdGFibGUgKnRhYmxlOworCXVuc2lnbmVkIGludCBpZHg7Cit9OworCitzdGF0aWMgREVGSU5FX01VVEVYKGRkZWJ1Z19sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQoZGRlYnVnX3RhYmxlcyk7CitzdGF0aWMgaW50IHZlcmJvc2UgPSAwOworCisvKiBSZXR1cm4gdGhlIGxhc3QgcGFydCBvZiBhIHBhdGhuYW1lICovCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmJhc2VuYW1lKGNvbnN0IGNoYXIgKnBhdGgpCit7CisJY29uc3QgY2hhciAqdGFpbCA9IHN0cnJjaHIocGF0aCwgJy8nKTsKKwlyZXR1cm4gdGFpbCA/IHRhaWwrMSA6IHBhdGg7Cit9CisKKy8qIGZvcm1hdCBhIHN0cmluZyBpbnRvIGJ1ZltdIHdoaWNoIGRlc2NyaWJlcyB0aGUgX2RkZWJ1ZydzIGZsYWdzICovCitzdGF0aWMgY2hhciAqZGRlYnVnX2Rlc2NyaWJlX2ZsYWdzKHN0cnVjdCBfZGRlYnVnICpkcCwgY2hhciAqYnVmLAorCQkJCSAgICBzaXplX3QgbWF4bGVuKQoreworCWNoYXIgKnAgPSBidWY7CisKKwlCVUdfT04obWF4bGVuIDwgNCk7CisJaWYgKGRwLT5mbGFncyAmIF9EUFJJTlRLX0ZMQUdTX1BSSU5UKQorCQkqcCsrID0gJ3AnOworCWlmIChwID09IGJ1ZikKKwkJKnArKyA9ICctJzsKKwkqcCA9ICdcMCc7CisKKwlyZXR1cm4gYnVmOworfQorCisvKgorICogbXVzdCBiZSBjYWxsZWQgd2l0aCBkZGVidWdfbG9jayBoZWxkCisgKi8KKworc3RhdGljIGludCBkaXNhYmxlZF9oYXNoKGNoYXIgaGFzaCwgYm9vbCBmaXJzdF90YWJsZSkKK3sKKwlzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdDsKKwljaGFyIHRhYmxlX2hhc2hfdmFsdWU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR0LCAmZGRlYnVnX3RhYmxlcywgbGluaykgeworCQlpZiAoZmlyc3RfdGFibGUpCisJCQl0YWJsZV9oYXNoX3ZhbHVlID0gZHQtPmRkZWJ1Z3MtPnByaW1hcnlfaGFzaDsKKwkJZWxzZQorCQkJdGFibGVfaGFzaF92YWx1ZSA9IGR0LT5kZGVidWdzLT5zZWNvbmRhcnlfaGFzaDsKKwkJaWYgKGR0LT5udW1fZW5hYmxlZCAmJiAoaGFzaCA9PSB0YWJsZV9oYXNoX3ZhbHVlKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFNlYXJjaCB0aGUgdGFibGVzIGZvciBfZGRlYnVnJ3Mgd2hpY2ggbWF0Y2ggdGhlIGdpdmVuCisgKiBgcXVlcnknIGFuZCBhcHBseSB0aGUgYGZsYWdzJyBhbmQgYG1hc2snIHRvIHRoZW0uICBUZWxscworICogdGhlIHVzZXIgd2hpY2ggZGRlYnVnJ3Mgd2VyZSBjaGFuZ2VkLCBvciB3aGV0aGVyIG5vbmUKKyAqIHdlcmUgbWF0Y2hlZC4KKyAqLworc3RhdGljIHZvaWQgZGRlYnVnX2NoYW5nZShjb25zdCBzdHJ1Y3QgZGRlYnVnX3F1ZXJ5ICpxdWVyeSwKKwkJCSAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50IG1hc2spCit7CisJaW50IGk7CisJc3RydWN0IGRkZWJ1Z190YWJsZSAqZHQ7CisJdW5zaWduZWQgaW50IG5ld2ZsYWdzOworCXVuc2lnbmVkIGludCBuZm91bmQgPSAwOworCWNoYXIgZmxhZ2J1Zls4XTsKKworCS8qIHNlYXJjaCBmb3IgbWF0Y2hpbmcgZGRlYnVncyAqLworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGR0LCAmZGRlYnVnX3RhYmxlcywgbGluaykgeworCisJCS8qIG1hdGNoIGFnYWluc3QgdGhlIG1vZHVsZSBuYW1lICovCisJCWlmIChxdWVyeS0+bW9kdWxlICE9IE5VTEwgJiYKKwkJICAgIHN0cmNtcChxdWVyeS0+bW9kdWxlLCBkdC0+bW9kX25hbWUpKQorCQkJY29udGludWU7CisKKwkJZm9yIChpID0gMCA7IGkgPCBkdC0+bnVtX2RkZWJ1Z3MgOyBpKyspIHsKKwkJCXN0cnVjdCBfZGRlYnVnICpkcCA9ICZkdC0+ZGRlYnVnc1tpXTsKKworCQkJLyogbWF0Y2ggYWdhaW5zdCB0aGUgc291cmNlIGZpbGVuYW1lICovCisJCQlpZiAocXVlcnktPmZpbGVuYW1lICE9IE5VTEwgJiYKKwkJCSAgICBzdHJjbXAocXVlcnktPmZpbGVuYW1lLCBkcC0+ZmlsZW5hbWUpICYmCisJCQkgICAgc3RyY21wKHF1ZXJ5LT5maWxlbmFtZSwgYmFzZW5hbWUoZHAtPmZpbGVuYW1lKSkpCisJCQkJY29udGludWU7CisKKwkJCS8qIG1hdGNoIGFnYWluc3QgdGhlIGZ1bmN0aW9uICovCisJCQlpZiAocXVlcnktPmZ1bmN0aW9uICE9IE5VTEwgJiYKKwkJCSAgICBzdHJjbXAocXVlcnktPmZ1bmN0aW9uLCBkcC0+ZnVuY3Rpb24pKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBtYXRjaCBhZ2FpbnN0IHRoZSBmb3JtYXQgKi8KKwkJCWlmIChxdWVyeS0+Zm9ybWF0ICE9IE5VTEwgJiYKKwkJCSAgICBzdHJzdHIoZHAtPmZvcm1hdCwgcXVlcnktPmZvcm1hdCkgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJLyogbWF0Y2ggYWdhaW5zdCB0aGUgbGluZSBudW1iZXIgcmFuZ2UgKi8KKwkJCWlmIChxdWVyeS0+Zmlyc3RfbGluZW5vICYmCisJCQkgICAgZHAtPmxpbmVubyA8IHF1ZXJ5LT5maXJzdF9saW5lbm8pCisJCQkJY29udGludWU7CisJCQlpZiAocXVlcnktPmxhc3RfbGluZW5vICYmCisJCQkgICAgZHAtPmxpbmVubyA+IHF1ZXJ5LT5sYXN0X2xpbmVubykKKwkJCQljb250aW51ZTsKKworCQkJbmZvdW5kKys7CisKKwkJCW5ld2ZsYWdzID0gKGRwLT5mbGFncyAmIG1hc2spIHwgZmxhZ3M7CisJCQlpZiAobmV3ZmxhZ3MgPT0gZHAtPmZsYWdzKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoIW5ld2ZsYWdzKQorCQkJCWR0LT5udW1fZW5hYmxlZC0tOworCQkJZWxzZSBpZiAoIWRwLWZsYWdzKQorCQkJCWR0LT5udW1fZW5hYmxlZCsrOworCQkJZHAtPmZsYWdzID0gbmV3ZmxhZ3M7CisJCQlpZiAobmV3ZmxhZ3MpIHsKKwkJCQlkeW5hbWljX2RlYnVnX2VuYWJsZWQgfD0KKwkJCQkJCSgxTEwgPDwgZHAtPnByaW1hcnlfaGFzaCk7CisJCQkJZHluYW1pY19kZWJ1Z19lbmFibGVkMiB8PQorCQkJCQkJKDFMTCA8PCBkcC0+c2Vjb25kYXJ5X2hhc2gpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoZGlzYWJsZWRfaGFzaChkcC0+cHJpbWFyeV9oYXNoLCB0cnVlKSkKKwkJCQkJZHluYW1pY19kZWJ1Z19lbmFibGVkICY9CisJCQkJCQl+KDFMTCA8PCBkcC0+cHJpbWFyeV9oYXNoKTsKKwkJCQlpZiAoZGlzYWJsZWRfaGFzaChkcC0+c2Vjb25kYXJ5X2hhc2gsIGZhbHNlKSkKKwkJCQkJZHluYW1pY19kZWJ1Z19lbmFibGVkMiAmPQorCQkJCQkJfigxTEwgPDwgZHAtPnNlY29uZGFyeV9oYXNoKTsKKwkJCX0KKwkJCWlmICh2ZXJib3NlKQorCQkJCXByaW50ayhLRVJOX0lORk8KKwkJCQkJImRkZWJ1ZzogY2hhbmdlZCAlczolZCBbJXNdJXMgJXNcbiIsCisJCQkJCWRwLT5maWxlbmFtZSwgZHAtPmxpbmVubywKKwkJCQkJZHQtPm1vZF9uYW1lLCBkcC0+ZnVuY3Rpb24sCisJCQkJCWRkZWJ1Z19kZXNjcmliZV9mbGFncyhkcCwgZmxhZ2J1ZiwKKwkJCQkJCQlzaXplb2YoZmxhZ2J1ZikpKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKKworCWlmICghbmZvdW5kICYmIHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gImRkZWJ1Zzogbm8gbWF0Y2hlcyBmb3IgcXVlcnlcbiIpOworfQorCisvKgorICogU3BsaXQgdGhlIGJ1ZmZlciBgYnVmJyBpbnRvIHNwYWNlLXNlcGFyYXRlZCB3b3Jkcy4KKyAqIEhhbmRsZXMgc2ltcGxlICIgYW5kICcgcXVvdGluZywgaS5lLiB3aXRob3V0IG5lc3RlZCwKKyAqIGVtYmVkZGVkIG9yIGVzY2FwZWQgXCIuICBSZXR1cm4gdGhlIG51bWJlciBvZiB3b3JkcworICogb3IgPDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgZGRlYnVnX3Rva2VuaXplKGNoYXIgKmJ1ZiwgY2hhciAqd29yZHNbXSwgaW50IG1heHdvcmRzKQoreworCWludCBud29yZHMgPSAwOworCisJd2hpbGUgKCpidWYpIHsKKwkJY2hhciAqZW5kOworCisJCS8qIFNraXAgbGVhZGluZyB3aGl0ZXNwYWNlICovCisJCXdoaWxlICgqYnVmICYmIGlzc3BhY2UoKmJ1ZikpCisJCQlidWYrKzsKKwkJaWYgKCEqYnVmKQorCQkJYnJlYWs7CS8qIG9oLCBpdCB3YXMgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworCisJCS8qIFJ1biBgZW5kJyBvdmVyIGEgd29yZCwgZWl0aGVyIHdoaXRlc3BhY2Ugc2VwYXJhdGVkIG9yIHF1b3RlZCAqLworCQlpZiAoKmJ1ZiA9PSAnIicgfHwgKmJ1ZiA9PSAnXCcnKSB7CisJCQlpbnQgcXVvdGUgPSAqYnVmKys7CisJCQlmb3IgKGVuZCA9IGJ1ZiA7ICplbmQgJiYgKmVuZCAhPSBxdW90ZSA7IGVuZCsrKQorCQkJCTsKKwkJCWlmICghKmVuZCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsJLyogdW5jbG9zZWQgcXVvdGUgKi8KKwkJfSBlbHNlIHsKKwkJCWZvciAoZW5kID0gYnVmIDsgKmVuZCAmJiAhaXNzcGFjZSgqZW5kKSA7IGVuZCsrKQorCQkJCTsKKwkJCUJVR19PTihlbmQgPT0gYnVmKTsKKwkJfQorCQkvKiBIZXJlIGBidWYnIGlzIHRoZSBzdGFydCBvZiB0aGUgd29yZCwgYGVuZCcgaXMgb25lIHBhc3QgdGhlIGVuZCAqLworCisJCWlmIChud29yZHMgPT0gbWF4d29yZHMpCisJCQlyZXR1cm4gLUVJTlZBTDsJLyogcmFuIG91dCBvZiB3b3Jkc1tdIGJlZm9yZSBieXRlcyAqLworCQlpZiAoKmVuZCkKKwkJCSplbmQrKyA9ICdcMCc7CS8qIHRlcm1pbmF0ZSB0aGUgd29yZCAqLworCQl3b3Jkc1tud29yZHMrK10gPSBidWY7CisJCWJ1ZiA9IGVuZDsKKwl9CisKKwlpZiAodmVyYm9zZSkgeworCQlpbnQgaTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNwbGl0IGludG8gd29yZHM6IiwgX19mdW5jX18pOworCQlmb3IgKGkgPSAwIDsgaSA8IG53b3JkcyA7IGkrKykKKwkJCXByaW50aygiIFwiJXNcIiIsIHdvcmRzW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKworCXJldHVybiBud29yZHM7Cit9CisKKy8qCisgKiBQYXJzZSBhIHNpbmdsZSBsaW5lIG51bWJlci4gIE5vdGUgdGhhdCB0aGUgZW1wdHkgc3RyaW5nICIiCisgKiBpcyB0cmVhdGVkIGFzIGEgc3BlY2lhbCBjYXNlIGFuZCBjb252ZXJ0ZWQgdG8gemVybywgd2hpY2gKKyAqIGlzIGxhdGVyIHRyZWF0ZWQgYXMgYSAiZG9uJ3QgY2FyZSIgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX2xpbmVubyhjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCAqdmFsKQoreworCWNoYXIgKmVuZCA9IE5VTEw7CisJQlVHX09OKHN0ciA9PSBOVUxMKTsKKwlpZiAoKnN0ciA9PSAnXDAnKSB7CisJCSp2YWwgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJKnZhbCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJmVuZCwgMTApOworCXJldHVybiBlbmQgPT0gTlVMTCB8fCBlbmQgPT0gc3RyIHx8ICplbmQgIT0gJ1wwJyA/IC1FSU5WQUwgOiAwOworfQorCisvKgorICogVW5kbyBvY3RhbCBlc2NhcGluZyBpbiBhIHN0cmluZywgaW5wbGFjZS4gIFRoaXMgaXMgdXNlZnVsIHRvCisgKiBhbGxvdyB0aGUgdXNlciB0byBleHByZXNzIGEgcXVlcnkgd2hpY2ggbWF0Y2hlcyBhIGZvcm1hdAorICogY29udGFpbmluZyBlbWJlZGRlZCBzcGFjZXMuCisgKi8KKyNkZWZpbmUgaXNvZGlnaXQoYykJCSgoYykgPj0gJzAnICYmIChjKSA8PSAnNycpCitzdGF0aWMgY2hhciAqdW5lc2NhcGUoY2hhciAqc3RyKQoreworCWNoYXIgKmluID0gc3RyOworCWNoYXIgKm91dCA9IHN0cjsKKworCXdoaWxlICgqaW4pIHsKKwkJaWYgKCppbiA9PSAnXFwnKSB7CisJCQlpZiAoaW5bMV0gPT0gJ1xcJykgeworCQkJCSpvdXQrKyA9ICdcXCc7CisJCQkJaW4gKz0gMjsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoaW5bMV0gPT0gJ3QnKSB7CisJCQkJKm91dCsrID0gJ1x0JzsKKwkJCQlpbiArPSAyOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChpblsxXSA9PSAnbicpIHsKKwkJCQkqb3V0KysgPSAnXG4nOworCQkJCWluICs9IDI7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKGlzb2RpZ2l0KGluWzFdKSAmJgorCQkJICAgICAgICAgaXNvZGlnaXQoaW5bMl0pICYmCisJCQkgICAgICAgICBpc29kaWdpdChpblszXSkpIHsKKwkJCQkqb3V0KysgPSAoKGluWzFdIC0gJzAnKTw8NikgfAorCQkJCSAgICAgICAgICAoKGluWzJdIC0gJzAnKTw8MykgfAorCQkJCSAgICAgICAgICAoaW5bM10gLSAnMCcpOworCQkJCWluICs9IDQ7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJKm91dCsrID0gKmluKys7CisJfQorCSpvdXQgPSAnXDAnOworCisJcmV0dXJuIHN0cjsKK30KKworLyoKKyAqIFBhcnNlIHdvcmRzW10gYXMgYSBkZGVidWcgcXVlcnkgc3BlY2lmaWNhdGlvbiwgd2hpY2ggaXMgYSBzZXJpZXMKKyAqIG9mIChrZXl3b3JkLCB2YWx1ZSkgcGFpcnMgY2hvc2VuIGZyb20gdGhlc2UgcG9zc2liaWxpdGllczoKKyAqCisgKiBmdW5jIDxmdW5jdGlvbi1uYW1lPgorICogZmlsZSA8ZnVsbC1wYXRobmFtZT4KKyAqIGZpbGUgPGJhc2UtZmlsZW5hbWU+CisgKiBtb2R1bGUgPG1vZHVsZS1uYW1lPgorICogZm9ybWF0IDxlc2NhcGVkLXN0cmluZy10by1maW5kLWluLWZvcm1hdD4KKyAqIGxpbmUgPGxpbmVubz4KKyAqIGxpbmUgPGZpcnN0LWxpbmVubz4tPGxhc3QtbGluZW5vPiAvLyB3aGVyZSBlaXRoZXIgbWF5IGJlIGVtcHR5CisgKi8KK3N0YXRpYyBpbnQgZGRlYnVnX3BhcnNlX3F1ZXJ5KGNoYXIgKndvcmRzW10sIGludCBud29yZHMsCisJCQkgICAgICAgc3RydWN0IGRkZWJ1Z19xdWVyeSAqcXVlcnkpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBjaGVjayB3ZSBoYXZlIGFuIGV2ZW4gbnVtYmVyIG9mIHdvcmRzICovCisJaWYgKG53b3JkcyAlIDIgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWVtc2V0KHF1ZXJ5LCAwLCBzaXplb2YoKnF1ZXJ5KSk7CisKKwlmb3IgKGkgPSAwIDsgaSA8IG53b3JkcyA7IGkgKz0gMikgeworCQlpZiAoIXN0cmNtcCh3b3Jkc1tpXSwgImZ1bmMiKSkKKwkJCXF1ZXJ5LT5mdW5jdGlvbiA9IHdvcmRzW2krMV07CisJCWVsc2UgaWYgKCFzdHJjbXAod29yZHNbaV0sICJmaWxlIikpCisJCQlxdWVyeS0+ZmlsZW5hbWUgPSB3b3Jkc1tpKzFdOworCQllbHNlIGlmICghc3RyY21wKHdvcmRzW2ldLCAibW9kdWxlIikpCisJCQlxdWVyeS0+bW9kdWxlID0gd29yZHNbaSsxXTsKKwkJZWxzZSBpZiAoIXN0cmNtcCh3b3Jkc1tpXSwgImZvcm1hdCIpKQorCQkJcXVlcnktPmZvcm1hdCA9IHVuZXNjYXBlKHdvcmRzW2krMV0pOworCQllbHNlIGlmICghc3RyY21wKHdvcmRzW2ldLCAibGluZSIpKSB7CisJCQljaGFyICpmaXJzdCA9IHdvcmRzW2krMV07CisJCQljaGFyICpsYXN0ID0gc3RyY2hyKGZpcnN0LCAnLScpOworCQkJaWYgKGxhc3QpCisJCQkJKmxhc3QrKyA9ICdcMCc7CisJCQlpZiAocGFyc2VfbGluZW5vKGZpcnN0LCAmcXVlcnktPmZpcnN0X2xpbmVubykgPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJaWYgKGxhc3QgIT0gTlVMTCkgeworCQkJCS8qIHJhbmdlIDxmaXJzdD4tPGxhc3Q+ICovCisJCQkJaWYgKHBhcnNlX2xpbmVubyhsYXN0LCAmcXVlcnktPmxhc3RfbGluZW5vKSA8IDApCisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJfSBlbHNlIHsKKwkJCQlxdWVyeS0+bGFzdF9saW5lbm8gPSBxdWVyeS0+Zmlyc3RfbGluZW5vOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHZlcmJvc2UpCisJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biBrZXl3b3JkIFwiJXNcIlxuIiwKKwkJCQkJX19mdW5jX18sIHdvcmRzW2ldKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBxLT5mdW5jdGlvbj1cIiVzXCIgcS0+ZmlsZW5hbWU9XCIlc1wiICIKKwkJICAgICAgICJxLT5tb2R1bGU9XCIlc1wiIHEtPmZvcm1hdD1cIiVzXCIgcS0+bGluZW5vPSV1LSV1XG4iLAorCQkJX19mdW5jX18sIHF1ZXJ5LT5mdW5jdGlvbiwgcXVlcnktPmZpbGVuYW1lLAorCQkJcXVlcnktPm1vZHVsZSwgcXVlcnktPmZvcm1hdCwgcXVlcnktPmZpcnN0X2xpbmVubywKKwkJCXF1ZXJ5LT5sYXN0X2xpbmVubyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBhcnNlIGBzdHInIGFzIGEgZmxhZ3Mgc3BlY2lmaWNhdGlvbiwgZm9ybWF0IFstKz1dW3BdKy4KKyAqIFNldHMgdXAgKm1hc2twIGFuZCAqZmxhZ3NwIHRvIGJlIHVzZWQgd2hlbiBjaGFuZ2luZyB0aGUKKyAqIGZsYWdzIGZpZWxkcyBvZiBtYXRjaGVkIF9kZGVidWcncy4gIFJldHVybnMgMCBvbiBzdWNjZXNzCisgKiBvciA8MCBvbiBlcnJvci4KKyAqLworc3RhdGljIGludCBkZGVidWdfcGFyc2VfZmxhZ3MoY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgKmZsYWdzcCwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKm1hc2twKQoreworCXVuc2lnbmVkIGZsYWdzID0gMDsKKwlpbnQgb3AgPSAnPSc7CisKKwlzd2l0Y2ggKCpzdHIpIHsKKwljYXNlICcrJzoKKwljYXNlICctJzoKKwljYXNlICc9JzoKKwkJb3AgPSAqc3RyKys7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG9wPSclYydcbiIsIF9fZnVuY19fLCBvcCk7CisKKwlmb3IgKCA7ICpzdHIgOyArK3N0cikgeworCQlzd2l0Y2ggKCpzdHIpIHsKKwkJY2FzZSAncCc6CisJCQlmbGFncyB8PSBfRFBSSU5US19GTEFHU19QUklOVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisJaWYgKGZsYWdzID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogZmxhZ3M9MHgleFxuIiwgX19mdW5jX18sIGZsYWdzKTsKKworCS8qIGNhbGN1bGF0ZSBmaW5hbCAqZmxhZ3NwLCAqbWFza3AgYWNjb3JkaW5nIHRvIG1hc2sgYW5kIG9wICovCisJc3dpdGNoIChvcCkgeworCWNhc2UgJz0nOgorCQkqbWFza3AgPSAwOworCQkqZmxhZ3NwID0gZmxhZ3M7CisJCWJyZWFrOworCWNhc2UgJysnOgorCQkqbWFza3AgPSB+MFU7CisJCSpmbGFnc3AgPSBmbGFnczsKKwkJYnJlYWs7CisJY2FzZSAnLSc6CisJCSptYXNrcCA9IH5mbGFnczsKKwkJKmZsYWdzcCA9IDA7CisJCWJyZWFrOworCX0KKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICpmbGFnc3A9MHgleCAqbWFza3A9MHgleFxuIiwKKwkJCV9fZnVuY19fLCAqZmxhZ3NwLCAqbWFza3ApOworCXJldHVybiAwOworfQorCisvKgorICogRmlsZV9vcHMtPndyaXRlIG1ldGhvZCBmb3IgPGRlYnVnZnM+L2R5bmFtaWNfZGVidWcvY29ucm9sLiAgR2F0aGVycyB0aGUKKyAqIGNvbW1hbmQgdGV4dCBmcm9tIHVzZXJzcGFjZSwgcGFyc2VzIGFuZCBleGVjdXRlcyBpdC4KKyAqLworc3RhdGljIHNzaXplX3QgZGRlYnVnX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJCSAgc2l6ZV90IGxlbiwgbG9mZl90ICpvZmZwKQoreworCXVuc2lnbmVkIGludCBmbGFncyA9IDAsIG1hc2sgPSAwOworCXN0cnVjdCBkZGVidWdfcXVlcnkgcXVlcnk7CisjZGVmaW5lIE1BWFdPUkRTIDkKKwlpbnQgbndvcmRzOworCWNoYXIgKndvcmRzW01BWFdPUkRTXTsKKwljaGFyIHRtcGJ1ZlsyNTZdOworCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gMDsKKwkvKiB3ZSBkb24ndCBjaGVjayAqb2ZmcCAtLSBtdWx0aXBsZSB3cml0ZXMoKSBhcmUgYWxsb3dlZCAqLworCWlmIChsZW4gPiBzaXplb2YodG1wYnVmKS0xKQorCQlyZXR1cm4gLUUyQklHOworCWlmIChjb3B5X2Zyb21fdXNlcih0bXBidWYsIHVidWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCXRtcGJ1ZltsZW5dID0gJ1wwJzsKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlYWQgJWQgYnl0ZXMgZnJvbSB1c2Vyc3BhY2VcbiIsCisJCQlfX2Z1bmNfXywgKGludClsZW4pOworCisJbndvcmRzID0gZGRlYnVnX3Rva2VuaXplKHRtcGJ1Ziwgd29yZHMsIE1BWFdPUkRTKTsKKwlpZiAobndvcmRzIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRkZWJ1Z19wYXJzZV9xdWVyeSh3b3JkcywgbndvcmRzLTEsICZxdWVyeSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChkZGVidWdfcGFyc2VfZmxhZ3Mod29yZHNbbndvcmRzLTFdLCAmZmxhZ3MsICZtYXNrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBhY3R1YWxseSBnbyBhbmQgaW1wbGVtZW50IHRoZSBjaGFuZ2UgKi8KKwlkZGVidWdfY2hhbmdlKCZxdWVyeSwgZmxhZ3MsIG1hc2spOworCisJKm9mZnAgKz0gbGVuOworCXJldHVybiBsZW47Cit9CisKKy8qCisgKiBTZXQgdGhlIGl0ZXJhdG9yIHRvIHBvaW50IHRvIHRoZSBmaXJzdCBfZGRlYnVnIG9iamVjdAorICogYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhhdCBmaXJzdCBvYmplY3QuICBSZXR1cm5zCisgKiBOVUxMIGlmIHRoZXJlIGFyZSBubyBfZGRlYnVncyBhdCBhbGwuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgX2RkZWJ1ZyAqZGRlYnVnX2l0ZXJfZmlyc3Qoc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyKQoreworCWlmIChsaXN0X2VtcHR5KCZkZGVidWdfdGFibGVzKSkgeworCQlpdGVyLT50YWJsZSA9IE5VTEw7CisJCWl0ZXItPmlkeCA9IDA7CisJCXJldHVybiBOVUxMOworCX0KKwlpdGVyLT50YWJsZSA9IGxpc3RfZW50cnkoZGRlYnVnX3RhYmxlcy5uZXh0LAorCQkJCSBzdHJ1Y3QgZGRlYnVnX3RhYmxlLCBsaW5rKTsKKwlpdGVyLT5pZHggPSAwOworCXJldHVybiAmaXRlci0+dGFibGUtPmRkZWJ1Z3NbaXRlci0+aWR4XTsKK30KKworLyoKKyAqIEFkdmFuY2UgdGhlIGl0ZXJhdG9yIHRvIHBvaW50IHRvIHRoZSBuZXh0IF9kZGVidWcKKyAqIG9iamVjdCBmcm9tIHRoZSBvbmUgdGhlIGl0ZXJhdG9yIGN1cnJlbnRseSBwb2ludHMgYXQsCisgKiBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBfZGRlYnVnLiAgUmV0dXJucworICogTlVMTCBpZiB0aGUgaXRlcmF0b3IgaGFzIHNlZW4gYWxsIHRoZSBfZGRlYnVncy4KKyAqLworc3RhdGljIHN0cnVjdCBfZGRlYnVnICpkZGVidWdfaXRlcl9uZXh0KHN0cnVjdCBkZGVidWdfaXRlciAqaXRlcikKK3sKKwlpZiAoaXRlci0+dGFibGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKCsraXRlci0+aWR4ID09IGl0ZXItPnRhYmxlLT5udW1fZGRlYnVncykgeworCQkvKiBpdGVyYXRlIHRvIG5leHQgdGFibGUgKi8KKwkJaXRlci0+aWR4ID0gMDsKKwkJaWYgKGxpc3RfaXNfbGFzdCgmaXRlci0+dGFibGUtPmxpbmssICZkZGVidWdfdGFibGVzKSkgeworCQkJaXRlci0+dGFibGUgPSBOVUxMOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJaXRlci0+dGFibGUgPSBsaXN0X2VudHJ5KGl0ZXItPnRhYmxlLT5saW5rLm5leHQsCisJCQkJCSBzdHJ1Y3QgZGRlYnVnX3RhYmxlLCBsaW5rKTsKKwl9CisJcmV0dXJuICZpdGVyLT50YWJsZS0+ZGRlYnVnc1tpdGVyLT5pZHhdOworfQorCisvKgorICogU2VxX29wcyBzdGFydCBtZXRob2QuICBDYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGV2ZXJ5CisgKiByZWFkKCkgY2FsbCBmcm9tIHVzZXJzcGFjZS4gIFRha2VzIHRoZSBkZGVidWdfbG9jayBhbmQKKyAqIHNlZWtzIHRoZSBzZXFfZmlsZSdzIGl0ZXJhdG9yIHRvIHRoZSBnaXZlbiBwb3NpdGlvbi4KKyAqLworc3RhdGljIHZvaWQgKmRkZWJ1Z19wcm9jX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqZHA7CisJaW50IG4gPSAqcG9zOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYWxsZWQgbT0lcCAqcG9zPSVsbGRcbiIsCisJCQlfX2Z1bmNfXywgbSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqcG9zKTsKKworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKworCWlmICghbikKKwkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKKwlpZiAobiA8IDApCisJCXJldHVybiBOVUxMOworCWRwID0gZGRlYnVnX2l0ZXJfZmlyc3QoaXRlcik7CisJd2hpbGUgKGRwICE9IE5VTEwgJiYgLS1uID4gMCkKKwkJZHAgPSBkZGVidWdfaXRlcl9uZXh0KGl0ZXIpOworCXJldHVybiBkcDsKK30KKworLyoKKyAqIFNlcV9vcHMgbmV4dCBtZXRob2QuICBDYWxsZWQgc2V2ZXJhbCB0aW1lcyB3aXRoaW4gYSByZWFkKCkKKyAqIGNhbGwgZnJvbSB1c2Vyc3BhY2UsIHdpdGggZGRlYnVnX2xvY2sgaGVsZC4gIFdhbGtzIHRvIHRoZQorICogbmV4dCBfZGRlYnVnIG9iamVjdCB3aXRoIGEgc3BlY2lhbCBjYXNlIGZvciB0aGUgaGVhZGVyIGxpbmUuCisgKi8KK3N0YXRpYyB2b2lkICpkZGVidWdfcHJvY19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgX2RkZWJ1ZyAqZHA7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbGxlZCBtPSVwIHA9JXAgKnBvcz0lbGxkXG4iLAorCQkJX19mdW5jX18sIG0sIHAsICh1bnNpZ25lZCBsb25nIGxvbmcpKnBvcyk7CisKKwlpZiAocCA9PSBTRVFfU1RBUlRfVE9LRU4pCisJCWRwID0gZGRlYnVnX2l0ZXJfZmlyc3QoaXRlcik7CisJZWxzZQorCQlkcCA9IGRkZWJ1Z19pdGVyX25leHQoaXRlcik7CisJKysqcG9zOworCXJldHVybiBkcDsKK30KKworLyoKKyAqIFNlcV9vcHMgc2hvdyBtZXRob2QuICBDYWxsZWQgc2V2ZXJhbCB0aW1lcyB3aXRoaW4gYSByZWFkKCkKKyAqIGNhbGwgZnJvbSB1c2Vyc3BhY2UsIHdpdGggZGRlYnVnX2xvY2sgaGVsZC4gIEZvcm1hdHMgdGhlCisgKiBjdXJyZW50IF9kZGVidWcgYXMgYSBzaW5nbGUgaHVtYW4tcmVhZGFibGUgbGluZSwgd2l0aCBhCisgKiBzcGVjaWFsIGNhc2UgZm9yIHRoZSBoZWFkZXIgbGluZS4KKyAqLworc3RhdGljIGludCBkZGVidWdfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgZGRlYnVnX2l0ZXIgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0cnVjdCBfZGRlYnVnICpkcCA9IHA7CisJY2hhciBmbGFnc2J1Zls4XTsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FsbGVkIG09JXAgcD0lcFxuIiwKKwkJCV9fZnVuY19fLCBtLCBwKTsKKworCWlmIChwID09IFNFUV9TVEFSVF9UT0tFTikgeworCQlzZXFfcHV0cyhtLAorCQkJIiMgZmlsZW5hbWU6bGluZW5vIFttb2R1bGVdZnVuY3Rpb24gZmxhZ3MgZm9ybWF0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc2VxX3ByaW50ZihtLCAiJXM6JXUgWyVzXSVzICVzIFwiIiwKKwkJICAgZHAtPmZpbGVuYW1lLCBkcC0+bGluZW5vLAorCQkgICBpdGVyLT50YWJsZS0+bW9kX25hbWUsIGRwLT5mdW5jdGlvbiwKKwkJICAgZGRlYnVnX2Rlc2NyaWJlX2ZsYWdzKGRwLCBmbGFnc2J1Ziwgc2l6ZW9mKGZsYWdzYnVmKSkpOworCXNlcV9lc2NhcGUobSwgZHAtPmZvcm1hdCwgIlx0XHJcblwiIik7CisJc2VxX3B1dHMobSwgIlwiXG4iKTsKKworCXJldHVybiAwOworfQorCisvKgorICogU2VxX29wcyBzdG9wIG1ldGhvZC4gIENhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcmVhZCgpCisgKiBjYWxsIGZyb20gdXNlcnNwYWNlLiAgRHJvcHMgZGRlYnVnX2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIGRkZWJ1Z19wcm9jX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQoreworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIlczogY2FsbGVkIG09JXAgcD0lcFxuIiwKKwkJCV9fZnVuY19fLCBtLCBwKTsKKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBkZGVidWdfcHJvY19zZXFvcHMgPSB7CisJLnN0YXJ0ID0gZGRlYnVnX3Byb2Nfc3RhcnQsCisJLm5leHQgPSBkZGVidWdfcHJvY19uZXh0LAorCS5zaG93ID0gZGRlYnVnX3Byb2Nfc2hvdywKKwkuc3RvcCA9IGRkZWJ1Z19wcm9jX3N0b3AKK307CisKKy8qCisgKiBGaWxlX29wcy0+b3BlbiBtZXRob2QgZm9yIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnRyb2wuICBEb2VzIHRoZSBzZXFfZmlsZQorICogc2V0dXAgZGFuY2UsIGFuZCBhbHNvIGNyZWF0ZXMgYW4gaXRlcmF0b3IgdG8gd2FsayB0aGUgX2RkZWJ1Z3MuCisgKiBOb3RlIHRoYXQgd2UgY3JlYXRlIGEgc2VxX2ZpbGUgYWx3YXlzLCBldmVuIGZvciBPX1dST05MWSBmaWxlcworICogd2hlcmUgaXQncyBub3QgbmVlZGVkLCBhcyBkb2luZyBzbyBzaW1wbGlmaWVzIHRoZSAtPnJlbGVhc2UgbWV0aG9kLgorICovCitzdGF0aWMgaW50IGRkZWJ1Z19wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGRkZWJ1Z19pdGVyICppdGVyOworCWludCBlcnI7CisKKwlpZiAodmVyYm9zZSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNhbGxlZFxuIiwgX19mdW5jX18pOworCisJaXRlciA9IGt6YWxsb2Moc2l6ZW9mKCppdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGl0ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBzZXFfb3BlbihmaWxlLCAmZGRlYnVnX3Byb2Nfc2Vxb3BzKTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKGl0ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKwkoKHN0cnVjdCBzZXFfZmlsZSAqKSBmaWxlLT5wcml2YXRlX2RhdGEpLT5wcml2YXRlID0gaXRlcjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGRlYnVnX3Byb2NfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGRkZWJ1Z19wcm9jX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkud3JpdGUgPSBkZGVidWdfcHJvY193cml0ZQorfTsKKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IGRkZWJ1Z190YWJsZSBmb3IgdGhlIGdpdmVuIG1vZHVsZQorICogYW5kIGFkZCBpdCB0byB0aGUgZ2xvYmFsIGxpc3QuCisgKi8KK2ludCBkZGVidWdfYWRkX21vZHVsZShzdHJ1Y3QgX2RkZWJ1ZyAqdGFiLCB1bnNpZ25lZCBpbnQgbiwKKwkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdDsKKwljaGFyICpuZXdfbmFtZTsKKworCWR0ID0ga3phbGxvYyhzaXplb2YoKmR0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGR0ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW5ld19uYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKKwlpZiAobmV3X25hbWUgPT0gTlVMTCkgeworCQlrZnJlZShkdCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlkdC0+bW9kX25hbWUgPSBuZXdfbmFtZTsKKwlkdC0+bnVtX2RkZWJ1Z3MgPSBuOworCWR0LT5udW1fZW5hYmxlZCA9IDA7CisJZHQtPmRkZWJ1Z3MgPSB0YWI7CisKKwltdXRleF9sb2NrKCZkZGVidWdfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZHQtPmxpbmssICZkZGVidWdfdGFibGVzKTsKKwltdXRleF91bmxvY2soJmRkZWJ1Z19sb2NrKTsKKworCWlmICh2ZXJib3NlKQorCQlwcmludGsoS0VSTl9JTkZPICIldSBkZWJ1ZyBwcmludHMgaW4gbW9kdWxlICVzXG4iLAorCQkJCSBuLCBkdC0+bW9kX25hbWUpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGRlYnVnX2FkZF9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBkZGVidWdfdGFibGVfZnJlZShzdHJ1Y3QgZGRlYnVnX3RhYmxlICpkdCkKK3sKKwlsaXN0X2RlbF9pbml0KCZkdC0+bGluayk7CisJa2ZyZWUoZHQtPm1vZF9uYW1lKTsKKwlrZnJlZShkdCk7Cit9CisKKy8qCisgKiBDYWxsZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmcgdW5sb2FkZWQuICBSZW1vdmVzCisgKiBhbnkgZGRlYnVnX3RhYmxlJ3Mgd2hpY2ggcG9pbnQgYXQgdGhlIG1vZHVsZS4KKyAqLworaW50IGRkZWJ1Z19yZW1vdmVfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKQoreworCXN0cnVjdCBkZGVidWdfdGFibGUgKmR0LCAqbmV4dGR0OworCWludCByZXQgPSAtRU5PRU5UOworCisJaWYgKHZlcmJvc2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZW1vdmluZyBtb2R1bGUgXCIlc1wiXG4iLAorCQkJCV9fZnVuY19fLCBtb2RfbmFtZSk7CisKKwltdXRleF9sb2NrKCZkZGVidWdfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGR0LCBuZXh0ZHQsICZkZGVidWdfdGFibGVzLCBsaW5rKSB7CisJCWlmICghc3RyY21wKGR0LT5tb2RfbmFtZSwgbW9kX25hbWUpKSB7CisJCQlkZGVidWdfdGFibGVfZnJlZShkdCk7CisJCQlyZXQgPSAwOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZGRlYnVnX2xvY2spOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZGVidWdfcmVtb3ZlX21vZHVsZSk7CisKK3N0YXRpYyB2b2lkIGRkZWJ1Z19yZW1vdmVfYWxsX3RhYmxlcyh2b2lkKQoreworCW11dGV4X2xvY2soJmRkZWJ1Z19sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRkZWJ1Z190YWJsZXMpKSB7CisJCXN0cnVjdCBkZGVidWdfdGFibGUgKmR0ID0gbGlzdF9lbnRyeShkZGVidWdfdGFibGVzLm5leHQsCisJCQkJCQkgICAgICBzdHJ1Y3QgZGRlYnVnX3RhYmxlLAorCQkJCQkJICAgICAgbGluayk7CisJCWRkZWJ1Z190YWJsZV9mcmVlKGR0KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZGVidWdfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfZGVidWdfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRpciwgKmZpbGU7CisJc3RydWN0IF9kZGVidWcgKml0ZXIsICppdGVyX3N0YXJ0OworCWNvbnN0IGNoYXIgKm1vZG5hbWUgPSBOVUxMOworCWludCByZXQgPSAwOworCWludCBuID0gMDsKKworCWRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZHluYW1pY19kZWJ1ZyIsIE5VTEwpOworCWlmICghZGlyKQorCQlyZXR1cm4gLUVOT01FTTsKKwlmaWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiY29udHJvbCIsIDA2NDQsIGRpciwgTlVMTCwKKwkJCQkJJmRkZWJ1Z19wcm9jX2ZvcHMpOworCWlmICghZmlsZSkgeworCQlkZWJ1Z2ZzX3JlbW92ZShkaXIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKF9fc3RhcnRfX192ZXJib3NlICE9IF9fc3RvcF9fX3ZlcmJvc2UpIHsKKwkJaXRlciA9IF9fc3RhcnRfX192ZXJib3NlOworCQltb2RuYW1lID0gaXRlci0+bW9kbmFtZTsKKwkJaXRlcl9zdGFydCA9IGl0ZXI7CisJCWZvciAoOyBpdGVyIDwgX19zdG9wX19fdmVyYm9zZTsgaXRlcisrKSB7CisJCQlpZiAoc3RyY21wKG1vZG5hbWUsIGl0ZXItPm1vZG5hbWUpKSB7CisJCQkJcmV0ID0gZGRlYnVnX2FkZF9tb2R1bGUoaXRlcl9zdGFydCwgbiwgbW9kbmFtZSk7CisJCQkJaWYgKHJldCkKKwkJCQkJZ290byBvdXRfZnJlZTsKKwkJCQluID0gMDsKKwkJCQltb2RuYW1lID0gaXRlci0+bW9kbmFtZTsKKwkJCQlpdGVyX3N0YXJ0ID0gaXRlcjsKKwkJCX0KKwkJCW4rKzsKKwkJfQorCQlyZXQgPSBkZGVidWdfYWRkX21vZHVsZShpdGVyX3N0YXJ0LCBuLCBtb2RuYW1lKTsKKwl9CitvdXRfZnJlZToKKwlpZiAocmV0KSB7CisJCWRkZWJ1Z19yZW1vdmVfYWxsX3RhYmxlcygpOworCQlkZWJ1Z2ZzX3JlbW92ZShkaXIpOworCQlkZWJ1Z2ZzX3JlbW92ZShmaWxlKTsKKwl9CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChkeW5hbWljX2RlYnVnX2luaXQpOwpkaWZmIC0tZ2l0IGEvbGliL2R5bmFtaWNfcHJpbnRrLmMgYi9saWIvZHluYW1pY19wcmludGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY1YTE5Ny4uMDAwMDAwMAotLS0gYS9saWIvZHluYW1pY19wcmludGsuYworKysgL2Rldi9udWxsCkBAIC0xLDQxNCArMCwwIEBACi0vKgotICogbGliL2R5bmFtaWNfcHJpbnRrLmMKLSAqCi0gKiBtYWtlIHByX2RlYnVnKCkvZGV2X2RiZygpIGNhbGxzIHJ1bnRpbWUgY29uZmlndXJhYmxlIGJhc2VkIHVwb24gdGhlaXIKLSAqIHRoZWlyIHNvdXJjZSBtb2R1bGUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYy4sIEphc29uIEJhcm9uIDxqYmFyb25AcmVkaGF0LmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgbW9kX2RlYnVnIF9fc3RhcnRfX192ZXJib3NlW107Ci1leHRlcm4gc3RydWN0IG1vZF9kZWJ1ZyBfX3N0b3BfX192ZXJib3NlW107Ci0KLXN0cnVjdCBkZWJ1Z19uYW1lIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDI7Ci0JaW50IGhhc2gxOwotCWludCBoYXNoMjsKLQljaGFyICpuYW1lOwotCWludCBlbmFibGU7Ci0JaW50IHR5cGU7Ci19OwotCi1zdGF0aWMgaW50IG5yX2VudHJpZXM7Ci1zdGF0aWMgaW50IG51bV9lbmFibGVkOwotaW50IGR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9OT05FOwotc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIG1vZHVsZV90YWJsZVtERUJVR19IQVNIX1RBQkxFX1NJWkVdID0KLQl7IFswIC4uLiBERUJVR19IQVNIX1RBQkxFX1NJWkUtMV0gPSBITElTVF9IRUFEX0lOSVQgfTsKLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBtb2R1bGVfdGFibGUyW0RFQlVHX0hBU0hfVEFCTEVfU0laRV0gPQotCXsgWzAgLi4uIERFQlVHX0hBU0hfVEFCTEVfU0laRS0xXSA9IEhMSVNUX0hFQURfSU5JVCB9Owotc3RhdGljIERFQ0xBUkVfTVVURVgoZGVidWdfbGlzdF9tdXRleCk7Ci0KLS8qIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQsIGFuZCBkeW5hbWljX3ByaW50a19lbmFibGVkMiBhcmUgYml0bWFza3MgaW4gd2hpY2gKLSAqIGJpdCBuIGlzIHNldCB0byAxIGlmIGFueSBtb2RuYW1lIGhhc2hlcyBpbnRvIHRoZSBidWNrZXQgbiwgMCBvdGhlcndpc2UuIFRoZXkKLSAqIHVzZSBpbmRlcGVuZGVudCBoYXNoIGZ1bmN0aW9ucywgdG8gcmVkdWNlIHRoZSBjaGFuY2Ugb2YgZmFsc2UgcG9zaXRpdmVzLgotICovCi1sb25nIGxvbmcgZHluYW1pY19wcmludGtfZW5hYmxlZDsKLUVYUE9SVF9TWU1CT0xfR1BMKGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQpOwotbG9uZyBsb25nIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyOwotRVhQT1JUX1NZTUJPTF9HUEwoZHluYW1pY19wcmludGtfZW5hYmxlZDIpOwotCi0vKiByZXR1cm5zIHRoZSBkZWJ1ZyBtb2R1bGUgcG9pbnRlci4gKi8KLXN0YXRpYyBzdHJ1Y3QgZGVidWdfbmFtZSAqZmluZF9kZWJ1Z19tb2R1bGUoY2hhciAqbW9kdWxlX25hbWUpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW1lbnQ7Ci0KLQllbGVtZW50ID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgREVCVUdfSEFTSF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJaGVhZCA9ICZtb2R1bGVfdGFibGVbaV07Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtZW50LCBub2RlLCBoZWFkLCBobGlzdCkKLQkJCWlmICghc3RyY21wKGVsZW1lbnQtPm5hbWUsIG1vZHVsZV9uYW1lKSkKLQkJCQlyZXR1cm4gZWxlbWVudDsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIHJldHVybnMgdGhlIGRlYnVnIG1vZHVsZSBwb2ludGVyLiAqLwotc3RhdGljIHN0cnVjdCBkZWJ1Z19uYW1lICpmaW5kX2RlYnVnX21vZHVsZV9oYXNoKGNoYXIgKm1vZHVsZV9uYW1lLCBpbnQgaGFzaCkKLXsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbWVudDsKLQotCWVsZW1lbnQgPSBOVUxMOwotCWhlYWQgPSAmbW9kdWxlX3RhYmxlW2hhc2hdOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtZW50LCBub2RlLCBoZWFkLCBobGlzdCkKLQkJaWYgKCFzdHJjbXAoZWxlbWVudC0+bmFtZSwgbW9kdWxlX25hbWUpKQotCQkJcmV0dXJuIGVsZW1lbnQ7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGNhbGxlciBtdXN0IGhvbGQgbXV0ZXgqLwotc3RhdGljIGludCBfX2FkZF9kZWJ1Z19tb2R1bGUoY2hhciAqbW9kX25hbWUsIGludCBoYXNoLCBpbnQgaGFzaDIpCi17Ci0Jc3RydWN0IGRlYnVnX25hbWUgKm5ldzsKLQljaGFyICptb2R1bGVfbmFtZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSkpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCW1vZHVsZV9uYW1lID0ga21hbGxvYyhzdHJsZW4obW9kX25hbWUpICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtb2R1bGVfbmFtZSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0JbW9kdWxlX25hbWUgPSBzdHJjcHkobW9kdWxlX25hbWUsIG1vZF9uYW1lKTsKLQltb2R1bGVfbmFtZVtzdHJsZW4obW9kX25hbWUpXSA9ICdcMCc7Ci0JbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRlYnVnX25hbWUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5ldykgewotCQlrZnJlZShtb2R1bGVfbmFtZSk7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQlJTklUX0hMSVNUX05PREUoJm5ldy0+aGxpc3QpOwotCUlOSVRfSExJU1RfTk9ERSgmbmV3LT5obGlzdDIpOwotCW5ldy0+bmFtZSA9IG1vZHVsZV9uYW1lOwotCW5ldy0+aGFzaDEgPSBoYXNoOwotCW5ldy0+aGFzaDIgPSBoYXNoMjsKLQlobGlzdF9hZGRfaGVhZF9yY3UoJm5ldy0+aGxpc3QsICZtb2R1bGVfdGFibGVbaGFzaF0pOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmbmV3LT5obGlzdDIsICZtb2R1bGVfdGFibGUyW2hhc2gyXSk7Ci0JbnJfZW50cmllcysrOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLWludCB1bnJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGNoYXIgKm1vZF9uYW1lKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtZW50OwotCWludCByZXQgPSAwOwotCi0JZG93bigmZGVidWdfbGlzdF9tdXRleCk7Ci0JZWxlbWVudCA9IGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKTsKLQlpZiAoIWVsZW1lbnQpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCWhsaXN0X2RlbF9yY3UoJmVsZW1lbnQtPmhsaXN0KTsKLQlobGlzdF9kZWxfcmN1KCZlbGVtZW50LT5obGlzdDIpOwotCXN5bmNocm9uaXplX3JjdSgpOwotCWtmcmVlKGVsZW1lbnQtPm5hbWUpOwotCWlmIChlbGVtZW50LT5lbmFibGUpCi0JCW51bV9lbmFibGVkLS07Ci0Ja2ZyZWUoZWxlbWVudCk7Ci0JbnJfZW50cmllcy0tOwotb3V0OgotCXVwKCZkZWJ1Z19saXN0X211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZSk7Ci0KLWludCByZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZShjaGFyICptb2RfbmFtZSwgaW50IHR5cGUsIGNoYXIgKnNoYXJlX25hbWUsCi0JCQkJCWNoYXIgKmZsYWdzLCBpbnQgaGFzaCwgaW50IGhhc2gyKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplbGVtOwotCWludCByZXQgPSAwOwotCi0JZG93bigmZGVidWdfbGlzdF9tdXRleCk7Ci0JZWxlbSA9IGZpbmRfZGVidWdfbW9kdWxlKG1vZF9uYW1lKTsKLQlpZiAoIWVsZW0pIHsKLQkJaWYgKF9fYWRkX2RlYnVnX21vZHVsZShtb2RfbmFtZSwgaGFzaCwgaGFzaDIpKQotCQkJZ290byBvdXQ7Ci0JCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZShtb2RfbmFtZSk7Ci0JCWlmIChkeW5hbWljX2VuYWJsZWQgPT0gRFlOQU1JQ19FTkFCTEVEX0FMTCAmJgotCQkJCSFzdHJjbXAobW9kX25hbWUsIHNoYXJlX25hbWUpKSB7Ci0JCQllbGVtLT5lbmFibGUgPSB0cnVlOwotCQkJbnVtX2VuYWJsZWQrKzsKLQkJfQotCX0KLQllbGVtLT50eXBlIHw9IHR5cGU7Ci1vdXQ6Ci0JdXAoJmRlYnVnX2xpc3RfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9keW5hbWljX2RlYnVnX21vZHVsZSk7Ci0KLWludCBfX2R5bmFtaWNfZGJnX2VuYWJsZWRfaGVscGVyKGNoYXIgKm1vZF9uYW1lLCBpbnQgdHlwZSwgaW50IHZhbHVlLCBpbnQgaGFzaCkKLXsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChkeW5hbWljX2VuYWJsZWQgPT0gRFlOQU1JQ19FTkFCTEVEX0FMTCkKLQkJcmV0dXJuIDE7Ci0JcmN1X3JlYWRfbG9jaygpOwotCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZV9oYXNoKG1vZF9uYW1lLCBoYXNoKTsKLQlpZiAoZWxlbSAmJiBlbGVtLT5lbmFibGUpCi0JCXJldCA9IDE7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKF9fZHluYW1pY19kYmdfZW5hYmxlZF9oZWxwZXIpOwotCi1zdGF0aWMgdm9pZCBzZXRfYWxsKGJvb2wgZW5hYmxlKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCWludCBpOwotCWxvbmcgbG9uZyBlbmFibGVfbWFzazsKLQotCWZvciAoaSA9IDA7IGkgPCBERUJVR19IQVNIX1RBQkxFX1NJWkU7IGkrKykgewotCQlpZiAobW9kdWxlX3RhYmxlW2ldLmZpcnN0ICE9IE5VTEwpIHsKLQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsICZtb2R1bGVfdGFibGVbaV0sIGhsaXN0KSB7Ci0JCQkJZS0+ZW5hYmxlID0gZW5hYmxlOwotCQkJfQotCQl9Ci0JfQotCWlmIChlbmFibGUpCi0JCWVuYWJsZV9tYXNrID0gVUxMT05HX01BWDsKLQllbHNlCi0JCWVuYWJsZV9tYXNrID0gMDsKLQlkeW5hbWljX3ByaW50a19lbmFibGVkID0gZW5hYmxlX21hc2s7Ci0JZHluYW1pY19wcmludGtfZW5hYmxlZDIgPSBlbmFibGVfbWFzazsKLX0KLQotc3RhdGljIGludCBkaXNhYmxlZF9oYXNoKGludCBpLCBib29sIGZpcnN0X3RhYmxlKQotewotCXN0cnVjdCBkZWJ1Z19uYW1lICplOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCi0JaWYgKGZpcnN0X3RhYmxlKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsICZtb2R1bGVfdGFibGVbaV0sIGhsaXN0KSB7Ci0JCQlpZiAoZS0+ZW5hYmxlKQotCQkJCXJldHVybiAwOwotCQl9Ci0JfSBlbHNlIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgJm1vZHVsZV90YWJsZTJbaV0sIGhsaXN0MikgewotCQkJaWYgKGUtPmVuYWJsZSkKLQkJCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHNzaXplX3QgcHJfZGVidWdfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkJc2l6ZV90IGxlbmd0aCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgKmJ1ZmZlciwgKnMsICp2YWx1ZV9zdHIsICpzZXR0aW5nX3N0cjsKLQlpbnQgZXJyLCB2YWx1ZTsKLQlzdHJ1Y3QgZGVidWdfbmFtZSAqZWxlbSA9IE5VTEw7Ci0JaW50IGFsbCA9IDA7Ci0KLQlpZiAobGVuZ3RoID4gUEFHRV9TSVpFIHx8IGxlbmd0aCA8IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYnVmZmVyID0gKGNoYXIgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZXJyID0gLUVGQVVMVDsKLQlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBidWYsIGxlbmd0aCkpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gLUVJTlZBTDsKLQlpZiAobGVuZ3RoIDwgUEFHRV9TSVpFKQotCQlidWZmZXJbbGVuZ3RoXSA9ICdcMCc7Ci0JZWxzZSBpZiAoYnVmZmVyW1BBR0VfU0laRS0xXSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAtRUlOVkFMOwotCWRvd24oJmRlYnVnX2xpc3RfbXV0ZXgpOwotCi0JaWYgKHN0cm5jbXAoInNldCIsIGJ1ZmZlciwgMykpCi0JCWdvdG8gb3V0X3VwOwotCXMgPSBidWZmZXIgKyAzOwotCXNldHRpbmdfc3RyID0gc3Ryc2VwKCZzLCAiPSIpOwotCWlmIChzID09IE5VTEwpCi0JCWdvdG8gb3V0X3VwOwotCXNldHRpbmdfc3RyID0gc3Ryc3RyaXAoc2V0dGluZ19zdHIpOwotCXZhbHVlX3N0ciA9IHN0cnNlcCgmcywgIiAiKTsKLQlpZiAocyA9PSBOVUxMKQotCQlnb3RvIG91dF91cDsKLQlzID0gc3Ryc3RyaXAocyk7Ci0JaWYgKCFzdHJuY21wKHMsICJhbGwiLCAzKSkKLQkJYWxsID0gMTsKLQllbHNlCi0JCWVsZW0gPSBmaW5kX2RlYnVnX21vZHVsZShzKTsKLQlpZiAoIXN0cm5jbXAoc2V0dGluZ19zdHIsICJlbmFibGUiLCA2KSkgewotCQl2YWx1ZSA9ICEhc2ltcGxlX3N0cnRvbCh2YWx1ZV9zdHIsIE5VTEwsIDEwKTsKLQkJaWYgKGFsbCkgewotCQkJaWYgKHZhbHVlKSB7Ci0JCQkJc2V0X2FsbCh0cnVlKTsKLQkJCQludW1fZW5hYmxlZCA9IG5yX2VudHJpZXM7Ci0JCQkJZHluYW1pY19lbmFibGVkID0gRFlOQU1JQ19FTkFCTEVEX0FMTDsKLQkJCX0gZWxzZSB7Ci0JCQkJc2V0X2FsbChmYWxzZSk7Ci0JCQkJbnVtX2VuYWJsZWQgPSAwOwotCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9OT05FOwotCQkJfQotCQkJZXJyID0gMDsKLQkJfSBlbHNlIGlmIChlbGVtKSB7Ci0JCQlpZiAodmFsdWUgJiYgKGVsZW0tPmVuYWJsZSA9PSAwKSkgewotCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgfD0gKDFMTCA8PCBlbGVtLT5oYXNoMSk7Ci0JCQkJZHluYW1pY19wcmludGtfZW5hYmxlZDIgfD0gKDFMTCA8PCBlbGVtLT5oYXNoMik7Ci0JCQkJZWxlbS0+ZW5hYmxlID0gMTsKLQkJCQludW1fZW5hYmxlZCsrOwotCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9TT01FOwotCQkJCWVyciA9IDA7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkJImRlYnVnZ2luZyBlbmFibGVkIGZvciBtb2R1bGUgJXNcbiIsCi0JCQkJCWVsZW0tPm5hbWUpOwotCQkJfSBlbHNlIGlmICghdmFsdWUgJiYgKGVsZW0tPmVuYWJsZSA9PSAxKSkgewotCQkJCWVsZW0tPmVuYWJsZSA9IDA7Ci0JCQkJbnVtX2VuYWJsZWQtLTsKLQkJCQlpZiAoZGlzYWJsZWRfaGFzaChlbGVtLT5oYXNoMSwgdHJ1ZSkpCi0JCQkJCWR5bmFtaWNfcHJpbnRrX2VuYWJsZWQgJj0KLQkJCQkJCQl+KDFMTCA8PCBlbGVtLT5oYXNoMSk7Ci0JCQkJaWYgKGRpc2FibGVkX2hhc2goZWxlbS0+aGFzaDIsIGZhbHNlKSkKLQkJCQkJZHluYW1pY19wcmludGtfZW5hYmxlZDIgJj0KLQkJCQkJCQl+KDFMTCA8PCBlbGVtLT5oYXNoMik7Ci0JCQkJaWYgKG51bV9lbmFibGVkKQotCQkJCQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfU09NRTsKLQkJCQllbHNlCi0JCQkJCWR5bmFtaWNfZW5hYmxlZCA9IERZTkFNSUNfRU5BQkxFRF9OT05FOwotCQkJCWVyciA9IDA7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkJImRlYnVnZ2luZyBkaXNhYmxlZCBmb3IgbW9kdWxlICVzXG4iLAotCQkJCQllbGVtLT5uYW1lKTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoIWVycikKLQkJZXJyID0gbGVuZ3RoOwotb3V0X3VwOgotCXVwKCZkZWJ1Z19saXN0X211dGV4KTsKLW91dDoKLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCAqcHJfZGVidWdfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuICgqcG9zIDwgREVCVUdfSEFTSF9UQUJMRV9TSVpFKSA/IHBvcyA6IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkICpwcl9kZWJ1Z19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCSgqcG9zKSsrOwotCWlmICgqcG9zID49IERFQlVHX0hBU0hfVEFCTEVfU0laRSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIHBvczsKLX0KLQotc3RhdGljIHZvaWQgcHJfZGVidWdfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQotewotCS8qIE5vdGhpbmcgdG8gZG8gKi8KLX0KLQotc3RhdGljIGludCBwcl9kZWJ1Z19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCi17Ci0Jc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0Jc3RydWN0IGRlYnVnX25hbWUgKmVsZW07Ci0JdW5zaWduZWQgaW50IGkgPSAqKGxvZmZfdCAqKSB2OwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWhlYWQgPSAmbW9kdWxlX3RhYmxlW2ldOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtLCBub2RlLCBoZWFkLCBobGlzdCkgewotCQlzZXFfcHJpbnRmKHMsICIlcyBlbmFibGVkPSVkIiwgZWxlbS0+bmFtZSwgZWxlbS0+ZW5hYmxlKTsKLQkJc2VxX3ByaW50ZihzLCAiXG4iKTsKLQl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHJfZGVidWdfc2VxX29wcyA9IHsKLQkuc3RhcnQgPSBwcl9kZWJ1Z19zZXFfc3RhcnQsCi0JLm5leHQgID0gcHJfZGVidWdfc2VxX25leHQsCi0JLnN0b3AgID0gcHJfZGVidWdfc2VxX3N0b3AsCi0JLnNob3cgID0gcHJfZGVidWdfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgcHJfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlscCwgJnByX2RlYnVnX3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcl9kZWJ1Z19vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IHByX2RlYnVnX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLndyaXRlCQk9IHByX2RlYnVnX3dyaXRlLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBkeW5hbWljX3ByaW50a19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGlyLCAqZmlsZTsKLQlzdHJ1Y3QgbW9kX2RlYnVnICppdGVyOwotCXVuc2lnbmVkIGxvbmcgdmFsdWU7Ci0KLQlkaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImR5bmFtaWNfcHJpbnRrIiwgTlVMTCk7Ci0JaWYgKCFkaXIpCi0JCXJldHVybiAtRU5PTUVNOwotCWZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJtb2R1bGVzIiwgMDY0NCwgZGlyLCBOVUxMLAotCQkJCQkmcHJfZGVidWdfb3BlcmF0aW9ucyk7Ci0JaWYgKCFmaWxlKSB7Ci0JCWRlYnVnZnNfcmVtb3ZlKGRpcik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlmb3IgKHZhbHVlID0gKHVuc2lnbmVkIGxvbmcpX19zdGFydF9fX3ZlcmJvc2U7Ci0JCXZhbHVlIDwgKHVuc2lnbmVkIGxvbmcpX19zdG9wX19fdmVyYm9zZTsKLQkJdmFsdWUgKz0gc2l6ZW9mKHN0cnVjdCBtb2RfZGVidWcpKSB7Ci0JCQlpdGVyID0gKHN0cnVjdCBtb2RfZGVidWcgKil2YWx1ZTsKLQkJCXJlZ2lzdGVyX2R5bmFtaWNfZGVidWdfbW9kdWxlKGl0ZXItPm1vZG5hbWUsCi0JCQkJaXRlci0+dHlwZSwKLQkJCQlpdGVyLT5sb2dpY2FsX21vZG5hbWUsCi0JCQkJaXRlci0+ZmxhZ19uYW1lcywgaXRlci0+aGFzaCwgaXRlci0+aGFzaDIpOwotCX0KLQlpZiAoZHluYW1pY19lbmFibGVkID09IERZTkFNSUNfRU5BQkxFRF9BTEwpCi0JCXNldF9hbGwodHJ1ZSk7Ci0JcmV0dXJuIDA7Ci19Ci1tb2R1bGVfaW5pdChkeW5hbWljX3ByaW50a19pbml0KTsKLS8qIG1heSB3YW50IHRvIG1vdmUgdGhpcyBlYXJsaWVyIHNvIHdlIGNhbiBnZXQgdHJhY2VzIGFzIGVhcmx5IGFzIHBvc3NpYmxlICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGR5bmFtaWNfcHJpbnRrX3NldHVwKGNoYXIgKnN0cikKLXsKLQlpZiAoc3RyKQotCQlyZXR1cm4gLUVOT0VOVDsKLQlkeW5hbWljX2VuYWJsZWQgPSBEWU5BTUlDX0VOQUJMRURfQUxMOwotCXJldHVybiAwOwotfQotLyogVXNlIGVhcmx5X3BhcmFtKCksIHNvIHdlIGNhbiBnZXQgZGVidWcgb3V0cHV0IGFzIGVhcmx5IGFzIHBvc3NpYmxlICovCi1lYXJseV9wYXJhbSgiZHluYW1pY19wcmludGsiLCBkeW5hbWljX3ByaW50a19zZXR1cCk7CmRpZmYgLS1naXQgYS9saWIva2VybmVsX2xvY2suYyBiL2xpYi9rZXJuZWxfbG9jay5jCmluZGV4IDAxYTNjMjIuLjM5ZjEwMjkgMTAwNjQ0Ci0tLSBhL2xpYi9rZXJuZWxfbG9jay5jCisrKyBiL2xpYi9rZXJuZWxfbG9jay5jCkBAIC0zOSw3ICszOSw3IEBACiBpbnQgX19sb2NrZnVuYyBfX3JlYWNxdWlyZV9rZXJuZWxfbG9jayh2b2lkKQogewogCXdoaWxlICghX3Jhd19zcGluX3RyeWxvY2soJmtlcm5lbF9mbGFnKSkgewotCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfTkVFRF9SRVNDSEVEKSkKKwkJaWYgKG5lZWRfcmVzY2hlZCgpKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCWNwdV9yZWxheCgpOwogCX0KZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0LmMgYi9saWIva29iamVjdC5jCmluZGV4IDA0ODdkMWYuLmE2ZGVjMzIgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0LmMKKysrIGIvbGliL2tvYmplY3QuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAgKiBAZm10OiBmb3JtYXQgc3RyaW5nIHVzZWQgdG8gYnVpbGQgdGhlIG5hbWUKICAqIEB2YXJnczogdmFyZ3MgdG8gZm9ybWF0IHRoZSBzdHJpbmcuCiAgKi8KLXN0YXRpYyBpbnQga29iamVjdF9zZXRfbmFtZV92YXJncyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqZm10LAoraW50IGtvYmplY3Rfc2V0X25hbWVfdmFyZ3Moc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IGNoYXIgKmZtdCwKIAkJCQkgIHZhX2xpc3QgdmFyZ3MpCiB7CiAJY29uc3QgY2hhciAqb2xkX25hbWUgPSBrb2JqLT5uYW1lOwpkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3RfdWV2ZW50LmMgYi9saWIva29iamVjdF91ZXZlbnQuYwppbmRleCAzMTgzMjhkZC4uOTdhNzc3YSAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3RfdWV2ZW50LmMKKysrIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKQEAgLTExOCw2ICsxMTgsMTMgQEAKIAlrc2V0ID0gdG9wX2tvYmotPmtzZXQ7CiAJdWV2ZW50X29wcyA9IGtzZXQtPnVldmVudF9vcHM7CiAKKwkvKiBza2lwIHRoZSBldmVudCwgaWYgdWV2ZW50X3N1cHByZXNzIGlzIHNldCovCisJaWYgKGtvYmotPnVldmVudF9zdXBwcmVzcykgeworCQlwcl9kZWJ1Zygia29iamVjdDogJyVzJyAoJXApOiAlczogdWV2ZW50X3N1cHByZXNzICIKKwkJCQkgImNhdXNlZCB0aGUgZXZlbnQgdG8gZHJvcCFcbiIsCisJCQkJIGtvYmplY3RfbmFtZShrb2JqKSwga29iaiwgX19mdW5jX18pOworCQlyZXR1cm4gMDsKKwl9CiAJLyogc2tpcCB0aGUgZXZlbnQsIGlmIHRoZSBmaWx0ZXIgcmV0dXJucyB6ZXJvLiAqLwogCWlmICh1ZXZlbnRfb3BzICYmIHVldmVudF9vcHMtPmZpbHRlcikKIAkJaWYgKCF1ZXZlbnRfb3BzLT5maWx0ZXIoa3NldCwga29iaikpIHsKQEAgLTIyNyw2ICsyMzQsOSBAQAogCQkJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IDE7CiAJCQlyZXR2YWwgPSBuZXRsaW5rX2Jyb2FkY2FzdCh1ZXZlbnRfc29jaywgc2tiLCAwLCAxLAogCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCQkvKiBFTk9CVUZTIHNob3VsZCBiZSBoYW5kbGVkIGluIHVzZXJzcGFjZSAqLworCQkJaWYgKHJldHZhbCA9PSAtRU5PQlVGUykKKwkJCQlyZXR2YWwgPSAwOwogCQl9IGVsc2UKIAkJCXJldHZhbCA9IC1FTk9NRU07CiAJfQpAQCAtMjQ4LDcgKzI1OCw3IEBACiAJCQlnb3RvIGV4aXQ7CiAKIAkJcmV0dmFsID0gY2FsbF91c2VybW9kZWhlbHBlcihhcmd2WzBdLCBhcmd2LAotCQkJCQkgICAgIGVudi0+ZW52cCwgVU1IX1dBSVRfRVhFQyk7CisJCQkJCSAgICAgZW52LT5lbnZwLCBVTUhfTk9fV0FJVCk7CiAJfQogCiBleGl0OgpkaWZmIC0tZ2l0IGEvbGliL25sYXR0ci5jIGIvbGliL25sYXR0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NzA2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbmxhdHRyLmMKQEAgLTAsMCArMSw1MDIgQEAKKy8qCisgKiBORVRMSU5LICAgICAgTmV0bGluayBhdHRyaWJ1dGVzCisgKgorICogCQlBdXRob3JzOglUaG9tYXMgR3JhZiA8dGdyYWZAc3V1Zy5jaD4KKyAqIAkJCQlBbGV4ZXkgS3V6bmV0c292IDxrdXpuZXRAbXMyLmluci5hYy5ydT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorCitzdGF0aWMgdTE2IG5sYV9hdHRyX21pbmxlbltOTEFfVFlQRV9NQVgrMV0gX19yZWFkX21vc3RseSA9IHsKKwlbTkxBX1U4XQk9IHNpemVvZih1OCksCisJW05MQV9VMTZdCT0gc2l6ZW9mKHUxNiksCisJW05MQV9VMzJdCT0gc2l6ZW9mKHUzMiksCisJW05MQV9VNjRdCT0gc2l6ZW9mKHU2NCksCisJW05MQV9ORVNURURdCT0gTkxBX0hEUkxFTiwKK307CisKK3N0YXRpYyBpbnQgdmFsaWRhdGVfbmxhKHN0cnVjdCBubGF0dHIgKm5sYSwgaW50IG1heHR5cGUsCisJCQljb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5KQoreworCWNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwdDsKKwlpbnQgbWlubGVuID0gMCwgYXR0cmxlbiA9IG5sYV9sZW4obmxhKSwgdHlwZSA9IG5sYV90eXBlKG5sYSk7CisKKwlpZiAodHlwZSA8PSAwIHx8IHR5cGUgPiBtYXh0eXBlKQorCQlyZXR1cm4gMDsKKworCXB0ID0gJnBvbGljeVt0eXBlXTsKKworCUJVR19PTihwdC0+dHlwZSA+IE5MQV9UWVBFX01BWCk7CisKKwlzd2l0Y2ggKHB0LT50eXBlKSB7CisJY2FzZSBOTEFfRkxBRzoKKwkJaWYgKGF0dHJsZW4gPiAwKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWJyZWFrOworCisJY2FzZSBOTEFfTlVMX1NUUklORzoKKwkJaWYgKHB0LT5sZW4pCisJCQltaW5sZW4gPSBtaW5fdChpbnQsIGF0dHJsZW4sIHB0LT5sZW4gKyAxKTsKKwkJZWxzZQorCQkJbWlubGVuID0gYXR0cmxlbjsKKworCQlpZiAoIW1pbmxlbiB8fCBtZW1jaHIobmxhX2RhdGEobmxhKSwgJ1wwJywgbWlubGVuKSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBOTEFfU1RSSU5HOgorCQlpZiAoYXR0cmxlbiA8IDEpCisJCQlyZXR1cm4gLUVSQU5HRTsKKworCQlpZiAocHQtPmxlbikgeworCQkJY2hhciAqYnVmID0gbmxhX2RhdGEobmxhKTsKKworCQkJaWYgKGJ1ZlthdHRybGVuIC0gMV0gPT0gJ1wwJykKKwkJCQlhdHRybGVuLS07CisKKwkJCWlmIChhdHRybGVuID4gcHQtPmxlbikKKwkJCQlyZXR1cm4gLUVSQU5HRTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgTkxBX0JJTkFSWToKKwkJaWYgKHB0LT5sZW4gJiYgYXR0cmxlbiA+IHB0LT5sZW4pCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJYnJlYWs7CisKKwljYXNlIE5MQV9ORVNURURfQ09NUEFUOgorCQlpZiAoYXR0cmxlbiA8IHB0LT5sZW4pCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKGF0dHJsZW4gPCBOTEFfQUxJR04ocHQtPmxlbikpCisJCQlicmVhazsKKwkJaWYgKGF0dHJsZW4gPCBOTEFfQUxJR04ocHQtPmxlbikgKyBOTEFfSERSTEVOKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCW5sYSA9IG5sYV9kYXRhKG5sYSkgKyBOTEFfQUxJR04ocHQtPmxlbik7CisJCWlmIChhdHRybGVuIDwgTkxBX0FMSUdOKHB0LT5sZW4pICsgTkxBX0hEUkxFTiArIG5sYV9sZW4obmxhKSkKKwkJCXJldHVybiAtRVJBTkdFOworCQlicmVhazsKKwljYXNlIE5MQV9ORVNURUQ6CisJCS8qIGEgbmVzdGVkIGF0dHJpYnV0ZXMgaXMgYWxsb3dlZCB0byBiZSBlbXB0eTsgaWYgaXRzIG5vdCwKKwkJICogaXQgbXVzdCBoYXZlIGEgc2l6ZSBvZiBhdCBsZWFzdCBOTEFfSERSTEVOLgorCQkgKi8KKwkJaWYgKGF0dHJsZW4gPT0gMCkKKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChwdC0+bGVuKQorCQkJbWlubGVuID0gcHQtPmxlbjsKKwkJZWxzZSBpZiAocHQtPnR5cGUgIT0gTkxBX1VOU1BFQykKKwkJCW1pbmxlbiA9IG5sYV9hdHRyX21pbmxlbltwdC0+dHlwZV07CisKKwkJaWYgKGF0dHJsZW4gPCBtaW5sZW4pCisJCQlyZXR1cm4gLUVSQU5HRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBubGFfdmFsaWRhdGUgLSBWYWxpZGF0ZSBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzCisgKiBAaGVhZDogaGVhZCBvZiBhdHRyaWJ1dGUgc3RyZWFtCisgKiBAbGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHN0cmVhbQorICogQG1heHR5cGU6IG1heGltdW0gYXR0cmlidXRlIHR5cGUgdG8gYmUgZXhwZWN0ZWQKKyAqIEBwb2xpY3k6IHZhbGlkYXRpb24gcG9saWN5CisgKgorICogVmFsaWRhdGVzIGFsbCBhdHRyaWJ1dGVzIGluIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlIHN0cmVhbSBhZ2FpbnN0IHRoZQorICogc3BlY2lmaWVkIHBvbGljeS4gQXR0cmlidXRlcyB3aXRoIGEgdHlwZSBleGNlZWRpbmcgbWF4dHlwZSB3aWxsIGJlCisgKiBpZ25vcmVkLiBTZWUgZG9jdW1lbmF0aW9uIG9mIHN0cnVjdCBubGFfcG9saWN5IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbmxhX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKmhlYWQsIGludCBsZW4sIGludCBtYXh0eXBlLAorCQkgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnBvbGljeSkKK3sKKwlzdHJ1Y3QgbmxhdHRyICpubGE7CisJaW50IHJlbSwgZXJyOworCisJbmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkgeworCQllcnIgPSB2YWxpZGF0ZV9ubGEobmxhLCBtYXh0eXBlLCBwb2xpY3kpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyb3V0OworCX0KKworCWVyciA9IDA7CitlcnJvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBubGFfcG9saWN5X2xlbiAtIERldGVybWluIHRoZSBtYXguIGxlbmd0aCBvZiBhIHBvbGljeQorICogQHBvbGljeTogcG9saWN5IHRvIHVzZQorICogQG46IG51bWJlciBvZiBwb2xpY2llcworICoKKyAqIERldGVybWluZXMgdGhlIG1heC4gbGVuZ3RoIG9mIHRoZSBwb2xpY3kuICBJdCBpcyBjdXJyZW50bHkgdXNlZAorICogdG8gYWxsb2NhdGVkIE5ldGxpbmsgYnVmZmVycyByb3VnaGx5IHRoZSBzaXplIG9mIHRoZSBhY3R1YWwKKyAqIG1lc3NhZ2UuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQKK25sYV9wb2xpY3lfbGVuKGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwLCBpbnQgbikKK3sKKwlpbnQgaSwgbGVuID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKHAtPmxlbikKKwkJCWxlbiArPSBubGFfdG90YWxfc2l6ZShwLT5sZW4pOworCQllbHNlIGlmIChubGFfYXR0cl9taW5sZW5bcC0+dHlwZV0pCisJCQlsZW4gKz0gbmxhX3RvdGFsX3NpemUobmxhX2F0dHJfbWlubGVuW3AtPnR5cGVdKTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCisvKioKKyAqIG5sYV9wYXJzZSAtIFBhcnNlIGEgc3RyZWFtIG9mIGF0dHJpYnV0ZXMgaW50byBhIHRiIGJ1ZmZlcgorICogQHRiOiBkZXN0aW5hdGlvbiBhcnJheSB3aXRoIG1heHR5cGUrMSBlbGVtZW50cworICogQG1heHR5cGU6IG1heGltdW0gYXR0cmlidXRlIHR5cGUgdG8gYmUgZXhwZWN0ZWQKKyAqIEBoZWFkOiBoZWFkIG9mIGF0dHJpYnV0ZSBzdHJlYW0KKyAqIEBsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgc3RyZWFtCisgKiBAcG9saWN5OiB2YWxpZGF0aW9uIHBvbGljeQorICoKKyAqIFBhcnNlcyBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzIGFuZCBzdG9yZXMgYSBwb2ludGVyIHRvIGVhY2ggYXR0cmlidXRlIGluCisgKiB0aGUgdGIgYXJyYXkgYWNjZXNzYWJsZSB2aWEgdGhlIGF0dHJpYnV0ZSB0eXBlLiBBdHRyaWJ1dGVzIHdpdGggYSB0eXBlCisgKiBleGNlZWRpbmcgbWF4dHlwZSB3aWxsIGJlIHNpbGVudGx5IGlnbm9yZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgKiByZWFzb25zLiBwb2xpY3kgbWF5IGJlIHNldCB0byBOVUxMIGlmIG5vIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgbmxhX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLCBzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLAorCSAgICAgIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3kpCit7CisJc3RydWN0IG5sYXR0ciAqbmxhOworCWludCByZW0sIGVycjsKKworCW1lbXNldCh0YiwgMCwgc2l6ZW9mKHN0cnVjdCBubGF0dHIgKikgKiAobWF4dHlwZSArIDEpKTsKKworCW5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHsKKwkJdTE2IHR5cGUgPSBubGFfdHlwZShubGEpOworCisJCWlmICh0eXBlID4gMCAmJiB0eXBlIDw9IG1heHR5cGUpIHsKKwkJCWlmIChwb2xpY3kpIHsKKwkJCQllcnIgPSB2YWxpZGF0ZV9ubGEobmxhLCBtYXh0eXBlLCBwb2xpY3kpOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlnb3RvIGVycm91dDsKKwkJCX0KKworCQkJdGJbdHlwZV0gPSBubGE7CisJCX0KKwl9CisKKwlpZiAodW5saWtlbHkocmVtID4gMCkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm5ldGxpbms6ICVkIGJ5dGVzIGxlZnRvdmVyIGFmdGVyIHBhcnNpbmcgIgorCQkgICAgICAgImF0dHJpYnV0ZXMuXG4iLCByZW0pOworCisJZXJyID0gMDsKK2Vycm91dDoKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIG5sYV9maW5kIC0gRmluZCBhIHNwZWNpZmljIGF0dHJpYnV0ZSBpbiBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzCisgKiBAaGVhZDogaGVhZCBvZiBhdHRyaWJ1dGUgc3RyZWFtCisgKiBAbGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHN0cmVhbQorICogQGF0dHJ0eXBlOiB0eXBlIG9mIGF0dHJpYnV0ZSB0byBsb29rIGZvcgorICoKKyAqIFJldHVybnMgdGhlIGZpcnN0IGF0dHJpYnV0ZSBpbiB0aGUgc3RyZWFtIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgdHlwZS4KKyAqLworc3RydWN0IG5sYXR0ciAqbmxhX2ZpbmQoc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IGF0dHJ0eXBlKQoreworCXN0cnVjdCBubGF0dHIgKm5sYTsKKwlpbnQgcmVtOworCisJbmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkKKwkJaWYgKG5sYV90eXBlKG5sYSkgPT0gYXR0cnR5cGUpCisJCQlyZXR1cm4gbmxhOworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogbmxhX3N0cmxjcHkgLSBDb3B5IHN0cmluZyBhdHRyaWJ1dGUgcGF5bG9hZCBpbnRvIGEgc2l6ZWQgYnVmZmVyCisgKiBAZHN0OiB3aGVyZSB0byBjb3B5IHRoZSBzdHJpbmcgdG8KKyAqIEBubGE6IGF0dHJpYnV0ZSB0byBjb3B5IHRoZSBzdHJpbmcgZnJvbQorICogQGRzdHNpemU6IHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyCisgKgorICogQ29waWVzIGF0IG1vc3QgZHN0c2l6ZSAtIDEgYnl0ZXMgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgorICogVGhlIHJlc3VsdCBpcyBhbHdheXMgYSB2YWxpZCBOVUwtdGVybWluYXRlZCBzdHJpbmcuIFVubGlrZQorICogc3RybGNweSB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIGFsd2F5cyBwYWRkZWQgb3V0LgorICoKKyAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4KKyAqLworc2l6ZV90IG5sYV9zdHJsY3B5KGNoYXIgKmRzdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCBzaXplX3QgZHN0c2l6ZSkKK3sKKwlzaXplX3Qgc3JjbGVuID0gbmxhX2xlbihubGEpOworCWNoYXIgKnNyYyA9IG5sYV9kYXRhKG5sYSk7CisKKwlpZiAoc3JjbGVuID4gMCAmJiBzcmNbc3JjbGVuIC0gMV0gPT0gJ1wwJykKKwkJc3JjbGVuLS07CisKKwlpZiAoZHN0c2l6ZSA+IDApIHsKKwkJc2l6ZV90IGxlbiA9IChzcmNsZW4gPj0gZHN0c2l6ZSkgPyBkc3RzaXplIC0gMSA6IHNyY2xlbjsKKworCQltZW1zZXQoZHN0LCAwLCBkc3RzaXplKTsKKwkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOworCX0KKworCXJldHVybiBzcmNsZW47Cit9CisKKy8qKgorICogbmxhX21lbWNweSAtIENvcHkgYSBuZXRsaW5rIGF0dHJpYnV0ZSBpbnRvIGFub3RoZXIgbWVtb3J5IGFyZWEKKyAqIEBkZXN0OiB3aGVyZSB0byBjb3B5IHRvIG1lbWNweQorICogQHNyYzogbmV0bGluayBhdHRyaWJ1dGUgdG8gY29weSBmcm9tCisgKiBAY291bnQ6IHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGFyZWEKKyAqCisgKiBOb3RlOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBpcyBsaW1pdGVkIGJ5IHRoZSBsZW5ndGggb2YKKyAqICAgICAgIGF0dHJpYnV0ZSdzIHBheWxvYWQuIG1lbWNweQorICoKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisgKi8KK2ludCBubGFfbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHN0cnVjdCBubGF0dHIgKnNyYywgaW50IGNvdW50KQoreworCWludCBtaW5sZW4gPSBtaW5fdChpbnQsIGNvdW50LCBubGFfbGVuKHNyYykpOworCisJbWVtY3B5KGRlc3QsIG5sYV9kYXRhKHNyYyksIG1pbmxlbik7CisKKwlyZXR1cm4gbWlubGVuOworfQorCisvKioKKyAqIG5sYV9tZW1jbXAgLSBDb21wYXJlIGFuIGF0dHJpYnV0ZSB3aXRoIHNpemVkIG1lbW9yeSBhcmVhCisgKiBAbmxhOiBuZXRsaW5rIGF0dHJpYnV0ZQorICogQGRhdGE6IG1lbW9yeSBhcmVhCisgKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgYXJlYQorICovCitpbnQgbmxhX21lbWNtcChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkgICAgIHNpemVfdCBzaXplKQoreworCWludCBkID0gbmxhX2xlbihubGEpIC0gc2l6ZTsKKworCWlmIChkID09IDApCisJCWQgPSBtZW1jbXAobmxhX2RhdGEobmxhKSwgZGF0YSwgc2l6ZSk7CisKKwlyZXR1cm4gZDsKK30KKworLyoqCisgKiBubGFfc3RyY21wIC0gQ29tcGFyZSBhIHN0cmluZyBhdHRyaWJ1dGUgYWdhaW5zdCBhIHN0cmluZworICogQG5sYTogbmV0bGluayBzdHJpbmcgYXR0cmlidXRlCisgKiBAc3RyOiBhbm90aGVyIHN0cmluZworICovCitpbnQgbmxhX3N0cmNtcChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgbGVuID0gc3RybGVuKHN0cikgKyAxOworCWludCBkID0gbmxhX2xlbihubGEpIC0gbGVuOworCisJaWYgKGQgPT0gMCkKKwkJZCA9IG1lbWNtcChubGFfZGF0YShubGEpLCBzdHIsIGxlbik7CisKKwlyZXR1cm4gZDsKK30KKworI2lmZGVmIENPTkZJR19ORVQKKy8qKgorICogX19ubGFfcmVzZXJ2ZSAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIG9uIHRoZSBza2IKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uCisgKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlCisgKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCisgKgorICogQWRkcyBhIG5ldGxpbmsgYXR0cmlidXRlIGhlYWRlciB0byBhIHNvY2tldCBidWZmZXIgYW5kIHJlc2VydmVzCisgKiByb29tIGZvciB0aGUgcGF5bG9hZCBidXQgZG9lcyBub3QgY29weSBpdC4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBza2IgcHJvdmlkZXMgZW5vdWdoCisgKiB0YWlscm9vbSBmb3IgdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuCisgKi8KK3N0cnVjdCBubGF0dHIgKl9fbmxhX3Jlc2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJ0eXBlLCBpbnQgYXR0cmxlbikKK3sKKwlzdHJ1Y3QgbmxhdHRyICpubGE7CisKKwlubGEgPSAoc3RydWN0IG5sYXR0ciAqKSBza2JfcHV0KHNrYiwgbmxhX3RvdGFsX3NpemUoYXR0cmxlbikpOworCW5sYS0+bmxhX3R5cGUgPSBhdHRydHlwZTsKKwlubGEtPm5sYV9sZW4gPSBubGFfYXR0cl9zaXplKGF0dHJsZW4pOworCisJbWVtc2V0KCh1bnNpZ25lZCBjaGFyICopIG5sYSArIG5sYS0+bmxhX2xlbiwgMCwgbmxhX3BhZGxlbihhdHRybGVuKSk7CisKKwlyZXR1cm4gbmxhOworfQorRVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlKTsKKworLyoqCisgKiBfX25sYV9yZXNlcnZlX25vaGRyIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uCisgKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCisgKgorICogUmVzZXJ2ZXMgcm9vbSBmb3IgYXR0cmlidXRlIHBheWxvYWQgd2l0aG91dCBhIGhlYWRlci4KKyAqCisgKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBza2IgcHJvdmlkZXMgZW5vdWdoCisgKiB0YWlscm9vbSBmb3IgdGhlIHBheWxvYWQuCisgKi8KK3ZvaWQgKl9fbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pCit7CisJdm9pZCAqc3RhcnQ7CisKKwlzdGFydCA9IHNrYl9wdXQoc2tiLCBOTEFfQUxJR04oYXR0cmxlbikpOworCW1lbXNldChzdGFydCwgMCwgTkxBX0FMSUdOKGF0dHJsZW4pKTsKKworCXJldHVybiBzdGFydDsKK30KK0VYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV9ub2hkcik7CisKKy8qKgorICogbmxhX3Jlc2VydmUgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvbgorICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQorICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAorICoKKyAqIEFkZHMgYSBuZXRsaW5rIGF0dHJpYnV0ZSBoZWFkZXIgdG8gYSBzb2NrZXQgYnVmZmVyIGFuZCByZXNlcnZlcworICogcm9vbSBmb3IgdGhlIHBheWxvYWQgYnV0IGRvZXMgbm90IGNvcHkgaXQuCisgKgorICogUmV0dXJucyBOVUxMIGlmIHRoZSB0YWlscm9vbSBvZiB0aGUgc2tiIGlzIGluc3VmZmljaWVudCB0byBzdG9yZQorICogdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuCisgKi8KK3N0cnVjdCBubGF0dHIgKm5sYV9yZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4pCit7CisJaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgbmxhX3RvdGFsX3NpemUoYXR0cmxlbikpKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pOworfQorRVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZSk7CisKKy8qKgorICogbmxhX3Jlc2VydmVfbm9oZHIgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSB3aXRob3V0IGhlYWRlcgorICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb24KKyAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqCisgKiBSZXNlcnZlcyByb29tIGZvciBhdHRyaWJ1dGUgcGF5bG9hZCB3aXRob3V0IGEgaGVhZGVyLgorICoKKyAqIFJldHVybnMgTlVMTCBpZiB0aGUgdGFpbHJvb20gb2YgdGhlIHNrYiBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUKKyAqIHRoZSBhdHRyaWJ1dGUgcGF5bG9hZC4KKyAqLwordm9pZCAqbmxhX3Jlc2VydmVfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4pCit7CisJaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgTkxBX0FMSUdOKGF0dHJsZW4pKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gX19ubGFfcmVzZXJ2ZV9ub2hkcihza2IsIGF0dHJsZW4pOworfQorRVhQT1JUX1NZTUJPTChubGFfcmVzZXJ2ZV9ub2hkcik7CisKKy8qKgorICogX19ubGFfcHV0IC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgdG8gYSBzb2NrZXQgYnVmZmVyCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG8KKyAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGUKKyAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqIEBkYXRhOiBoZWFkIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBlbnN1cmUgdGhhdCB0aGUgc2tiIHByb3ZpZGVzIGVub3VnaAorICogdGFpbHJvb20gZm9yIHRoZSBhdHRyaWJ1dGUgaGVhZGVyIGFuZCBwYXlsb2FkLgorICovCit2b2lkIF9fbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLAorCQkJICAgICBjb25zdCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBubGF0dHIgKm5sYTsKKworCW5sYSA9IF9fbmxhX3Jlc2VydmUoc2tiLCBhdHRydHlwZSwgYXR0cmxlbik7CisJbWVtY3B5KG5sYV9kYXRhKG5sYSksIGRhdGEsIGF0dHJsZW4pOworfQorRVhQT1JUX1NZTUJPTChfX25sYV9wdXQpOworCisvKioKKyAqIF9fbmxhX3B1dF9ub2hkciAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG8KKyAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqIEBkYXRhOiBoZWFkIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCisgKgorICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBlbnN1cmUgdGhhdCB0aGUgc2tiIHByb3ZpZGVzIGVub3VnaAorICogdGFpbHJvb20gZm9yIHRoZSBhdHRyaWJ1dGUgcGF5bG9hZC4KKyAqLwordm9pZCBfX25sYV9wdXRfbm9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCit7CisJdm9pZCAqc3RhcnQ7CisKKwlzdGFydCA9IF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTsKKwltZW1jcHkoc3RhcnQsIGRhdGEsIGF0dHJsZW4pOworfQorRVhQT1JUX1NZTUJPTChfX25sYV9wdXRfbm9oZHIpOworCisvKioKKyAqIG5sYV9wdXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0bworICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQorICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAorICogQGRhdGE6IGhlYWQgb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqCisgKiBSZXR1cm5zIC1FTVNHU0laRSBpZiB0aGUgdGFpbHJvb20gb2YgdGhlIHNrYiBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUKKyAqIHRoZSBhdHRyaWJ1dGUgaGVhZGVyIGFuZCBwYXlsb2FkLgorICovCitpbnQgbmxhX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKQoreworCWlmICh1bmxpa2VseShza2JfdGFpbHJvb20oc2tiKSA8IG5sYV90b3RhbF9zaXplKGF0dHJsZW4pKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCV9fbmxhX3B1dChza2IsIGF0dHJ0eXBlLCBhdHRybGVuLCBkYXRhKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobmxhX3B1dCk7CisKKy8qKgorICogbmxhX3B1dF9ub2hkciAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCisgKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIGFkZCBhdHRyaWJ1dGUgdG8KKyAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqIEBkYXRhOiBoZWFkIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCisgKgorICogUmV0dXJucyAtRU1TR1NJWkUgaWYgdGhlIHRhaWxyb29tIG9mIHRoZSBza2IgaXMgaW5zdWZmaWNpZW50IHRvIHN0b3JlCisgKiB0aGUgYXR0cmlidXRlIHBheWxvYWQuCisgKi8KK2ludCBubGFfcHV0X25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKQoreworCWlmICh1bmxpa2VseShza2JfdGFpbHJvb20oc2tiKSA8IE5MQV9BTElHTihhdHRybGVuKSkpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwlfX25sYV9wdXRfbm9oZHIoc2tiLCBhdHRybGVuLCBkYXRhKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobmxhX3B1dF9ub2hkcik7CisKKy8qKgorICogbmxhX2FwcGVuZCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyIG9yIHBhZGRpbmcKKyAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0bworICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAorICogQGRhdGE6IGhlYWQgb2YgYXR0cmlidXRlIHBheWxvYWQKKyAqCisgKiBSZXR1cm5zIC1FTVNHU0laRSBpZiB0aGUgdGFpbHJvb20gb2YgdGhlIHNrYiBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUKKyAqIHRoZSBhdHRyaWJ1dGUgcGF5bG9hZC4KKyAqLworaW50IG5sYV9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCit7CisJaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgTkxBX0FMSUdOKGF0dHJsZW4pKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCW1lbWNweShza2JfcHV0KHNrYiwgYXR0cmxlbiksIGRhdGEsIGF0dHJsZW4pOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChubGFfYXBwZW5kKTsKKyNlbmRpZgorCitFWFBPUlRfU1lNQk9MKG5sYV92YWxpZGF0ZSk7CitFWFBPUlRfU1lNQk9MKG5sYV9wb2xpY3lfbGVuKTsKK0VYUE9SVF9TWU1CT0wobmxhX3BhcnNlKTsKK0VYUE9SVF9TWU1CT0wobmxhX2ZpbmQpOworRVhQT1JUX1NZTUJPTChubGFfc3RybGNweSk7CitFWFBPUlRfU1lNQk9MKG5sYV9tZW1jcHkpOworRVhQT1JUX1NZTUJPTChubGFfbWVtY21wKTsKK0VYUE9SVF9TWU1CT0wobmxhX3N0cmNtcCk7CmRpZmYgLS1naXQgYS9tbS9iYWNraW5nLWRldi5jIGIvbW0vYmFja2luZy1kZXYuYwppbmRleCA4ZTg1ODc0Li5iZTY4Yzk1IDEwMDY0NAotLS0gYS9tbS9iYWNraW5nLWRldi5jCisrKyBiL21tL2JhY2tpbmctZGV2LmMKQEAgLTIsMTEgKzIsMjQgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCit2b2lkIGRlZmF1bHRfdW5wbHVnX2lvX2ZuKHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGksIHN0cnVjdCBwYWdlICpwYWdlKQoreworfQorRVhQT1JUX1NZTUJPTChkZWZhdWx0X3VucGx1Z19pb19mbik7CisKK3N0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyA9IHsKKwkucmFfcGFnZXMJPSBWTV9NQVhfUkVBREFIRUFEICogMTAyNCAvIFBBR0VfQ0FDSEVfU0laRSwKKwkuc3RhdGUJCT0gMCwKKwkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9NQVBfQ09QWSwKKwkudW5wbHVnX2lvX2ZuCT0gZGVmYXVsdF91bnBsdWdfaW9fZm4sCit9OworRVhQT1JUX1NZTUJPTF9HUEwoZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvKTsKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqYmRpX2NsYXNzOwogCkBAIC0xNjYsOSArMTc5LDIwIEBACiAJYmRpX2RlYnVnX2luaXQoKTsKIAlyZXR1cm4gMDsKIH0KLQogcG9zdGNvcmVfaW5pdGNhbGwoYmRpX2NsYXNzX2luaXQpOwogCitzdGF0aWMgaW50IF9faW5pdCBkZWZhdWx0X2JkaV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGJkaV9pbml0KCZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8pOworCWlmICghZXJyKQorCQliZGlfcmVnaXN0ZXIoJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbywgTlVMTCwgImRlZmF1bHQiKTsKKworCXJldHVybiBlcnI7Cit9CitzdWJzeXNfaW5pdGNhbGwoZGVmYXVsdF9iZGlfaW5pdCk7CisKIGludCBiZGlfcmVnaXN0ZXIoc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IGRldmljZSAqcGFyZW50LAogCQljb25zdCBjaGFyICpmbXQsIC4uLikKIHsKZGlmZiAtLWdpdCBhL21tL2hpZ2htZW0uYyBiL21tL2hpZ2htZW0uYwppbmRleCBiMzZiODNiLi45MTAxOTgwIDEwMDY0NAotLS0gYS9tbS9oaWdobWVtLmMKKysrIGIvbW0vaGlnaG1lbS5jCkBAIC02Nyw2ICs2NywyNSBAQAogCiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocGttYXBfbWFwX3dhaXQpOwogCisvKgorICogTW9zdCBhcmNoaXRlY3R1cmVzIGhhdmUgbm8gdXNlIGZvciBrbWFwX2hpZ2hfZ2V0KCksIHNvIGxldCdzIGFic3RyYWN0CisgKiB0aGUgZGlzYWJsaW5nIG9mIElSUSBvdXQgb2YgdGhlIGxvY2tpbmcgaW4gdGhhdCBjYXNlIHRvIHNhdmUgb24gYQorICogcG90ZW50aWFsIHVzZWxlc3Mgb3ZlcmhlYWQuCisgKi8KKyNpZmRlZiBBUkNIX05FRURTX0tNQVBfSElHSF9HRVQKKyNkZWZpbmUgbG9ja19rbWFwKCkgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycSgma21hcF9sb2NrKQorI2RlZmluZSB1bmxvY2tfa21hcCgpICAgICAgICAgICBzcGluX3VubG9ja19pcnEoJmttYXBfbG9jaykKKyNkZWZpbmUgbG9ja19rbWFwX2FueShmbGFncykgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmttYXBfbG9jaywgZmxhZ3MpCisjZGVmaW5lIHVubG9ja19rbWFwX2FueShmbGFncykgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmttYXBfbG9jaywgZmxhZ3MpCisjZWxzZQorI2RlZmluZSBsb2NrX2ttYXAoKSAgICAgICAgICAgICBzcGluX2xvY2soJmttYXBfbG9jaykKKyNkZWZpbmUgdW5sb2NrX2ttYXAoKSAgICAgICAgICAgc3Bpbl91bmxvY2soJmttYXBfbG9jaykKKyNkZWZpbmUgbG9ja19rbWFwX2FueShmbGFncykgICAgXAorCQlkbyB7IHNwaW5fbG9jaygma21hcF9sb2NrKTsgKHZvaWQpKGZsYWdzKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdW5sb2NrX2ttYXBfYW55KGZsYWdzKSAgXAorCQlkbyB7IHNwaW5fdW5sb2NrKCZrbWFwX2xvY2spOyAodm9pZCkoZmxhZ3MpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIGZsdXNoX2FsbF96ZXJvX3BrbWFwcyh2b2lkKQogewogCWludCBpOwpAQCAtMTEzLDkgKzEzMiw5IEBACiAgKi8KIHZvaWQga21hcF9mbHVzaF91bnVzZWQodm9pZCkKIHsKLQlzcGluX2xvY2soJmttYXBfbG9jayk7CisJbG9ja19rbWFwKCk7CiAJZmx1c2hfYWxsX3plcm9fcGttYXBzKCk7Ci0Jc3Bpbl91bmxvY2soJmttYXBfbG9jayk7CisJdW5sb2NrX2ttYXAoKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1hcF9uZXdfdmlydHVhbChzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTE0NSwxMCArMTY0LDEwIEBACiAKIAkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQkJYWRkX3dhaXRfcXVldWUoJnBrbWFwX21hcF93YWl0LCAmd2FpdCk7Ci0JCQlzcGluX3VubG9jaygma21hcF9sb2NrKTsKKwkJCXVubG9ja19rbWFwKCk7CiAJCQlzY2hlZHVsZSgpOwogCQkJcmVtb3ZlX3dhaXRfcXVldWUoJnBrbWFwX21hcF93YWl0LCAmd2FpdCk7Ci0JCQlzcGluX2xvY2soJmttYXBfbG9jayk7CisJCQlsb2NrX2ttYXAoKTsKIAogCQkJLyogU29tZWJvZHkgZWxzZSBtaWdodCBoYXZlIG1hcHBlZCBpdCB3aGlsZSB3ZSBzbGVwdCAqLwogCQkJaWYgKHBhZ2VfYWRkcmVzcyhwYWdlKSkKQEAgLTE4NCwyOSArMjAzLDU5IEBACiAJICogRm9yIGhpZ2htZW0gcGFnZXMsIHdlIGNhbid0IHRydXN0ICJ2aXJ0dWFsIiB1bnRpbAogCSAqIGFmdGVyIHdlIGhhdmUgdGhlIGxvY2suCiAJICovCi0Jc3Bpbl9sb2NrKCZrbWFwX2xvY2spOworCWxvY2tfa21hcCgpOwogCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwogCWlmICghdmFkZHIpCiAJCXZhZGRyID0gbWFwX25ld192aXJ0dWFsKHBhZ2UpOwogCXBrbWFwX2NvdW50W1BLTUFQX05SKHZhZGRyKV0rKzsKIAlCVUdfT04ocGttYXBfY291bnRbUEtNQVBfTlIodmFkZHIpXSA8IDIpOwotCXNwaW5fdW5sb2NrKCZrbWFwX2xvY2spOworCXVubG9ja19rbWFwKCk7CiAJcmV0dXJuICh2b2lkKikgdmFkZHI7CiB9CiAKIEVYUE9SVF9TWU1CT0woa21hcF9oaWdoKTsKIAorI2lmZGVmIEFSQ0hfTkVFRFNfS01BUF9ISUdIX0dFVAorLyoqCisgKiBrbWFwX2hpZ2hfZ2V0IC0gcGluIGEgaGlnaG1lbSBwYWdlIGludG8gbWVtb3J5CisgKiBAcGFnZTogJnN0cnVjdCBwYWdlIHRvIHBpbgorICoKKyAqIFJldHVybnMgdGhlIHBhZ2UncyBjdXJyZW50IHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MsIG9yIE5VTEwgaWYgbm8gbWFwcGluZworICogZXhpc3RzLiAgV2hlbiBhbmQgb25seSB3aGVuIGEgbm9uIG51bGwgYWRkcmVzcyBpcyByZXR1cm5lZCB0aGVuIGEKKyAqIG1hdGNoaW5nIGNhbGwgdG8ga3VubWFwX2hpZ2goKSBpcyBuZWNlc3NhcnkuCisgKgorICogVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuCisgKi8KK3ZvaWQgKmttYXBfaGlnaF9nZXQoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyB2YWRkciwgZmxhZ3M7CisKKwlsb2NrX2ttYXBfYW55KGZsYWdzKTsKKwl2YWRkciA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKTsKKwlpZiAodmFkZHIpIHsKKwkJQlVHX09OKHBrbWFwX2NvdW50W1BLTUFQX05SKHZhZGRyKV0gPCAxKTsKKwkJcGttYXBfY291bnRbUEtNQVBfTlIodmFkZHIpXSsrOworCX0KKwl1bmxvY2tfa21hcF9hbnkoZmxhZ3MpOworCXJldHVybiAodm9pZCopIHZhZGRyOworfQorI2VuZGlmCisKIC8qKgogICoga3VubWFwX2hpZ2ggLSBtYXAgYSBoaWdobWVtIHBhZ2UgaW50byBtZW1vcnkKICAqIEBwYWdlOiAmc3RydWN0IHBhZ2UgdG8gdW5tYXAKKyAqCisgKiBJZiBBUkNIX05FRURTX0tNQVBfSElHSF9HRVQgaXMgbm90IGRlZmluZWQgdGhlbiB0aGlzIG1heSBiZSBjYWxsZWQKKyAqIG9ubHkgZnJvbSB1c2VyIGNvbnRleHQuCiAgKi8KIHZvaWQga3VubWFwX2hpZ2goc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWRkcjsKIAl1bnNpZ25lZCBsb25nIG5yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG5lZWRfd2FrZXVwOwogCi0Jc3Bpbl9sb2NrKCZrbWFwX2xvY2spOworCWxvY2tfa21hcF9hbnkoZmxhZ3MpOwogCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwogCUJVR19PTighdmFkZHIpOwogCW5yID0gUEtNQVBfTlIodmFkZHIpOwpAQCAtMjMyLDcgKzI4MSw3IEBACiAJCSAqLwogCQluZWVkX3dha2V1cCA9IHdhaXRxdWV1ZV9hY3RpdmUoJnBrbWFwX21hcF93YWl0KTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmttYXBfbG9jayk7CisJdW5sb2NrX2ttYXBfYW55KGZsYWdzKTsKIAogCS8qIGRvIHdha2UtdXAsIGlmIG5lZWRlZCwgcmFjZS1mcmVlIG91dHNpZGUgb2YgdGhlIHNwaW4gbG9jayAqLwogCWlmIChuZWVkX3dha2V1cCkKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCAwMGNlZDNlLi4xYWJiOTE4IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTEwNDksNiArMTA1MCw5IEBACiAJZXJyb3IgPSBzZWN1cml0eV9maWxlX21tYXAoZmlsZSwgcmVxcHJvdCwgcHJvdCwgZmxhZ3MsIGFkZHIsIDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOworCWVycm9yID0gaW1hX2ZpbGVfbW1hcChmaWxlLCBwcm90KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAogCXJldHVybiBtbWFwX3JlZ2lvbihmaWxlLCBhZGRyLCBsZW4sIGZsYWdzLCB2bV9mbGFncywgcGdvZmYpOwogfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggNzRkYzU3Yy4uNDBjYTdjZCAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC02Niw3ICs2Niw3IEBACiAvKgogICogU3RhcnQgYmFja2dyb3VuZCB3cml0ZWJhY2sgKHZpYSBwZGZsdXNoKSBhdCB0aGlzIHBlcmNlbnRhZ2UKICAqLwotaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW8gPSA1OworaW50IGRpcnR5X2JhY2tncm91bmRfcmF0aW8gPSAxMDsKIAogLyoKICAqIGRpcnR5X2JhY2tncm91bmRfYnl0ZXMgc3RhcnRzIGF0IDAgKGRpc2FibGVkKSBzbyB0aGF0IGl0IGlzIGEgZnVuY3Rpb24gb2YKQEAgLTgzLDcgKzgzLDcgQEAKIC8qCiAgKiBUaGUgZ2VuZXJhdG9yIG9mIGRpcnR5IGRhdGEgc3RhcnRzIHdyaXRlYmFjayBhdCB0aGlzIHBlcmNlbnRhZ2UKICAqLwotaW50IHZtX2RpcnR5X3JhdGlvID0gMTA7CitpbnQgdm1fZGlydHlfcmF0aW8gPSAyMDsKIAogLyoKICAqIHZtX2RpcnR5X2J5dGVzIHN0YXJ0cyBhdCAwIChkaXNhYmxlZCkgc28gdGhhdCBpdCBpcyBhIGZ1bmN0aW9uIG9mCmRpZmYgLS1naXQgYS9tbS9yZWFkYWhlYWQuYyBiL21tL3JlYWRhaGVhZC5jCmluZGV4IGJlYzgzYzEuLjljZTMwM2QgMTAwNjQ0Ci0tLSBhL21tL3JlYWRhaGVhZC5jCisrKyBiL21tL3JlYWRhaGVhZC5jCkBAIC0xNywxOSArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2V2ZWMuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAKLXZvaWQgZGVmYXVsdF91bnBsdWdfaW9fZm4oc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwgc3RydWN0IHBhZ2UgKnBhZ2UpCi17Ci19Ci1FWFBPUlRfU1lNQk9MKGRlZmF1bHRfdW5wbHVnX2lvX2ZuKTsKLQotc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvID0gewotCS5yYV9wYWdlcwk9IFZNX01BWF9SRUFEQUhFQUQgKiAxMDI0IC8gUEFHRV9DQUNIRV9TSVpFLAotCS5zdGF0ZQkJPSAwLAotCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX01BUF9DT1BZLAotCS51bnBsdWdfaW9fZm4JPSBkZWZhdWx0X3VucGx1Z19pb19mbiwKLX07Ci1FWFBPUlRfU1lNQk9MX0dQTChkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm8pOwotCiAvKgogICogSW5pdGlhbGlzZSBhIHN0cnVjdCBmaWxlJ3MgcmVhZGFoZWFkIHN0YXRlLiAgQXNzdW1lcyB0aGF0IHRoZSBjYWxsZXIgaGFzCiAgKiBtZW1zZXQgKnJhIHRvIHplcm8uCkBAIC0yMzMsMTggKzIyMCw2IEBACiAJCSsgbm9kZV9wYWdlX3N0YXRlKG51bWFfbm9kZV9pZCgpLCBOUl9GUkVFX1BBR0VTKSkgLyAyKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcmVhZGFoZWFkX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyOwotCi0JZXJyID0gYmRpX2luaXQoJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbyk7Ci0JaWYgKCFlcnIpCi0JCWJkaV9yZWdpc3RlcigmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvLCBOVUxMLCAiZGVmYXVsdCIpOwotCi0JcmV0dXJuIGVycjsKLX0KLXN1YnN5c19pbml0Y2FsbChyZWFkYWhlYWRfaW5pdCk7Ci0KIC8qCiAgKiBTdWJtaXQgSU8gZm9yIHRoZSByZWFkLWFoZWFkIHJlcXVlc3QgaW4gZmlsZV9yYV9zdGF0ZS4KICAqLwpkaWZmIC0tZ2l0IGEvbW0vc2htZW0uYyBiL21tL3NobWVtLmMKaW5kZXggNDEwM2EyMy4uN2VjNzhlMiAxMDA2NDQKLS0tIGEvbW0vc2htZW0uYworKysgYi9tbS9zaG1lbS5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNobV9tbnQ7CiAKQEAgLTI2NjUsNiArMjY2Niw3IEBACiAJaWYgKElTX0VSUihmaWxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7CiAKKwlpbWFfc2htX2NoZWNrKGZpbGUpOwogCWlmICh2bWEtPnZtX2ZpbGUpCiAJCWZwdXQodm1hLT52bV9maWxlKTsKIAl2bWEtPnZtX2ZpbGUgPSBmaWxlOwpkaWZmIC0tZ2l0IGEvbW0vc2xvYi5jIGIvbW0vc2xvYi5jCmluZGV4IDUyYmM4YTIuLjBiZmE2ODAgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTEyNiw5ICsxMjYsOSBAQAogc3RhdGljIExJU1RfSEVBRChmcmVlX3Nsb2JfbGFyZ2UpOwogCiAvKgotICogc2xvYl9wYWdlOiBUcnVlIGZvciBhbGwgc2xvYiBwYWdlcyAoZmFsc2UgZm9yIGJpZ2Jsb2NrIHBhZ2VzKQorICogaXNfc2xvYl9wYWdlOiBUcnVlIGZvciBhbGwgc2xvYiBwYWdlcyAoZmFsc2UgZm9yIGJpZ2Jsb2NrIHBhZ2VzKQogICovCi1zdGF0aWMgaW5saW5lIGludCBzbG9iX3BhZ2Uoc3RydWN0IHNsb2JfcGFnZSAqc3ApCitzdGF0aWMgaW5saW5lIGludCBpc19zbG9iX3BhZ2Uoc3RydWN0IHNsb2JfcGFnZSAqc3ApCiB7CiAJcmV0dXJuIFBhZ2VTbG9iUGFnZSgoc3RydWN0IHBhZ2UgKilzcCk7CiB9CkBAIC0xNDMsNiArMTQzLDExIEBACiAJX19DbGVhclBhZ2VTbG9iUGFnZSgoc3RydWN0IHBhZ2UgKilzcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNsb2JfcGFnZSAqc2xvYl9wYWdlKGNvbnN0IHZvaWQgKmFkZHIpCit7CisJcmV0dXJuIChzdHJ1Y3Qgc2xvYl9wYWdlICopdmlydF90b19wYWdlKGFkZHIpOworfQorCiAvKgogICogc2xvYl9wYWdlX2ZyZWU6IHRydWUgZm9yIHBhZ2VzIG9uIGZyZWVfc2xvYl9wYWdlcyBsaXN0LgogICovCkBAIC0yMzAsNyArMjM1LDcgQEAKIAlyZXR1cm4gISgodW5zaWduZWQgbG9uZylzbG9iX25leHQocykgJiB+UEFHRV9NQVNLKTsKIH0KIAotc3RhdGljIHZvaWQgKnNsb2JfbmV3X3BhZ2UoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIGludCBub2RlKQorc3RhdGljIHZvaWQgKnNsb2JfbmV3X3BhZ2VzKGdmcF90IGdmcCwgaW50IG9yZGVyLCBpbnQgbm9kZSkKIHsKIAl2b2lkICpwYWdlOwogCkBAIC0yNDcsMTIgKzI1MiwxNyBAQAogCXJldHVybiBwYWdlX2FkZHJlc3MocGFnZSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNsb2JfZnJlZV9wYWdlcyh2b2lkICpiLCBpbnQgb3JkZXIpCit7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyliLCBvcmRlcik7Cit9CisKIC8qCiAgKiBBbGxvY2F0ZSBhIHNsb2IgYmxvY2sgd2l0aGluIGEgZ2l2ZW4gc2xvYl9wYWdlIHNwLgogICovCiBzdGF0aWMgdm9pZCAqc2xvYl9wYWdlX2FsbG9jKHN0cnVjdCBzbG9iX3BhZ2UgKnNwLCBzaXplX3Qgc2l6ZSwgaW50IGFsaWduKQogewotCXNsb2JfdCAqcHJldiwgKmN1ciwgKmFsaWduZWQgPSAwOworCXNsb2JfdCAqcHJldiwgKmN1ciwgKmFsaWduZWQgPSBOVUxMOwogCWludCBkZWx0YSA9IDAsIHVuaXRzID0gU0xPQl9VTklUUyhzaXplKTsKIAogCWZvciAocHJldiA9IE5VTEwsIGN1ciA9IHNwLT5mcmVlOyA7IHByZXYgPSBjdXIsIGN1ciA9IHNsb2JfbmV4dChjdXIpKSB7CkBAIC0zNDksMTAgKzM1OSwxMCBAQAogCiAJLyogTm90IGVub3VnaCBzcGFjZTogbXVzdCBhbGxvY2F0ZSBhIG5ldyBwYWdlICovCiAJaWYgKCFiKSB7Ci0JCWIgPSBzbG9iX25ld19wYWdlKGdmcCAmIH5fX0dGUF9aRVJPLCAwLCBub2RlKTsKKwkJYiA9IHNsb2JfbmV3X3BhZ2VzKGdmcCAmIH5fX0dGUF9aRVJPLCAwLCBub2RlKTsKIAkJaWYgKCFiKQotCQkJcmV0dXJuIDA7Ci0JCXNwID0gKHN0cnVjdCBzbG9iX3BhZ2UgKil2aXJ0X3RvX3BhZ2UoYik7CisJCQlyZXR1cm4gTlVMTDsKKwkJc3AgPSBzbG9iX3BhZ2UoYik7CiAJCXNldF9zbG9iX3BhZ2Uoc3ApOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzbG9iX2xvY2ssIGZsYWdzKTsKQEAgLTM4NCw3ICszOTQsNyBAQAogCQlyZXR1cm47CiAJQlVHX09OKCFzaXplKTsKIAotCXNwID0gKHN0cnVjdCBzbG9iX3BhZ2UgKil2aXJ0X3RvX3BhZ2UoYmxvY2spOworCXNwID0gc2xvYl9wYWdlKGJsb2NrKTsKIAl1bml0cyA9IFNMT0JfVU5JVFMoc2l6ZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2xvYl9sb2NrLCBmbGFncyk7CkBAIC0zOTMsMTAgKzQwMywxMSBAQAogCQkvKiBHbyBkaXJlY3RseSB0byBwYWdlIGFsbG9jYXRvci4gRG8gbm90IHBhc3Mgc2xvYiBhbGxvY2F0b3IgKi8KIAkJaWYgKHNsb2JfcGFnZV9mcmVlKHNwKSkKIAkJCWNsZWFyX3Nsb2JfcGFnZV9mcmVlKHNwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xvYl9sb2NrLCBmbGFncyk7CiAJCWNsZWFyX3Nsb2JfcGFnZShzcCk7CiAJCWZyZWVfc2xvYl9wYWdlKHNwKTsKIAkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWIpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCX0KIAogCWlmICghc2xvYl9wYWdlX2ZyZWUoc3ApKSB7CkBAIC00NzYsNyArNDg3LDcgQEAKIAl9IGVsc2UgewogCQl2b2lkICpyZXQ7CiAKLQkJcmV0ID0gc2xvYl9uZXdfcGFnZShnZnAgfCBfX0dGUF9DT01QLCBnZXRfb3JkZXIoc2l6ZSksIG5vZGUpOworCQlyZXQgPSBzbG9iX25ld19wYWdlcyhnZnAgfCBfX0dGUF9DT01QLCBnZXRfb3JkZXIoc2l6ZSksIG5vZGUpOwogCQlpZiAocmV0KSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAkJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UocmV0KTsKQEAgLTQ5NCw4ICs1MDUsOCBAQAogCWlmICh1bmxpa2VseShaRVJPX09SX05VTExfUFRSKGJsb2NrKSkpCiAJCXJldHVybjsKIAotCXNwID0gKHN0cnVjdCBzbG9iX3BhZ2UgKil2aXJ0X3RvX3BhZ2UoYmxvY2spOwotCWlmIChzbG9iX3BhZ2Uoc3ApKSB7CisJc3AgPSBzbG9iX3BhZ2UoYmxvY2spOworCWlmIChpc19zbG9iX3BhZ2Uoc3ApKSB7CiAJCWludCBhbGlnbiA9IG1heChBUkNIX0tNQUxMT0NfTUlOQUxJR04sIEFSQ0hfU0xBQl9NSU5BTElHTik7CiAJCXVuc2lnbmVkIGludCAqbSA9ICh1bnNpZ25lZCBpbnQgKikoYmxvY2sgLSBhbGlnbik7CiAJCXNsb2JfZnJlZShtLCAqbSArIGFsaWduKTsKQEAgLTUxMyw4ICs1MjQsOCBAQAogCWlmICh1bmxpa2VseShibG9jayA9PSBaRVJPX1NJWkVfUFRSKSkKIAkJcmV0dXJuIDA7CiAKLQlzcCA9IChzdHJ1Y3Qgc2xvYl9wYWdlICopdmlydF90b19wYWdlKGJsb2NrKTsKLQlpZiAoc2xvYl9wYWdlKHNwKSkgeworCXNwID0gc2xvYl9wYWdlKGJsb2NrKTsKKwlpZiAoaXNfc2xvYl9wYWdlKHNwKSkgewogCQlpbnQgYWxpZ24gPSBtYXgoQVJDSF9LTUFMTE9DX01JTkFMSUdOLCBBUkNIX1NMQUJfTUlOQUxJR04pOwogCQl1bnNpZ25lZCBpbnQgKm0gPSAodW5zaWduZWQgaW50ICopKGJsb2NrIC0gYWxpZ24pOwogCQlyZXR1cm4gU0xPQl9VTklUUygqbSkgKiBTTE9CX1VOSVQ7CkBAIC01NzMsNyArNTg0LDcgQEAKIAlpZiAoYy0+c2l6ZSA8IFBBR0VfU0laRSkKIAkJYiA9IHNsb2JfYWxsb2MoYy0+c2l6ZSwgZmxhZ3MsIGMtPmFsaWduLCBub2RlKTsKIAllbHNlCi0JCWIgPSBzbG9iX25ld19wYWdlKGZsYWdzLCBnZXRfb3JkZXIoYy0+c2l6ZSksIG5vZGUpOworCQliID0gc2xvYl9uZXdfcGFnZXMoZmxhZ3MsIGdldF9vcmRlcihjLT5zaXplKSwgbm9kZSk7CiAKIAlpZiAoYy0+Y3RvcikKIAkJYy0+Y3RvcihiKTsKQEAgLTU4Nyw3ICs1OTgsNyBAQAogCWlmIChzaXplIDwgUEFHRV9TSVpFKQogCQlzbG9iX2ZyZWUoYiwgc2l6ZSk7CiAJZWxzZQotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWIsIGdldF9vcmRlcihzaXplKSk7CisJCXNsb2JfZnJlZV9wYWdlcyhiLCBnZXRfb3JkZXIoc2l6ZSkpOwogfQogCiBzdGF0aWMgdm9pZCBrbWVtX3JjdV9mcmVlKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCAwMjgwZWVlLi5jNjVhNGVkIDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0zNzQsMTQgKzM3NCw4IEBACiBzdGF0aWMgdm9pZCBzZXRfdHJhY2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwKIAkJCWVudW0gdHJhY2tfaXRlbSBhbGxvYywgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCB0cmFjayAqcDsKKwlzdHJ1Y3QgdHJhY2sgKnAgPSBnZXRfdHJhY2socywgb2JqZWN0LCBhbGxvYyk7CiAKLQlpZiAocy0+b2Zmc2V0KQotCQlwID0gb2JqZWN0ICsgcy0+b2Zmc2V0ICsgc2l6ZW9mKHZvaWQgKik7Ci0JZWxzZQotCQlwID0gb2JqZWN0ICsgcy0+aW51c2U7Ci0KLQlwICs9IGFsbG9jOwogCWlmIChhZGRyKSB7CiAJCXAtPmFkZHIgPSBhZGRyOwogCQlwLT5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0xMzM1LDcgKzEzMjksNyBAQAogCQluID0gZ2V0X25vZGUocywgem9uZV90b19uaWQoem9uZSkpOwogCiAJCWlmIChuICYmIGNwdXNldF96b25lX2FsbG93ZWRfaGFyZHdhbGwoem9uZSwgZmxhZ3MpICYmCi0JCQkJbi0+bnJfcGFydGlhbCA+IG4tPm1pbl9wYXJ0aWFsKSB7CisJCQkJbi0+bnJfcGFydGlhbCA+IHMtPm1pbl9wYXJ0aWFsKSB7CiAJCQlwYWdlID0gZ2V0X3BhcnRpYWxfbm9kZShuKTsKIAkJCWlmIChwYWdlKQogCQkJCXJldHVybiBwYWdlOwpAQCAtMTM4Nyw3ICsxMzgxLDcgQEAKIAkJc2xhYl91bmxvY2socGFnZSk7CiAJfSBlbHNlIHsKIAkJc3RhdChjLCBERUFDVElWQVRFX0VNUFRZKTsKLQkJaWYgKG4tPm5yX3BhcnRpYWwgPCBuLT5taW5fcGFydGlhbCkgeworCQlpZiAobi0+bnJfcGFydGlhbCA8IHMtPm1pbl9wYXJ0aWFsKSB7CiAJCQkvKgogCQkJICogQWRkaW5nIGFuIGVtcHR5IHNsYWIgdG8gdGhlIHBhcnRpYWwgc2xhYnMgaW4gb3JkZXIKIAkJCSAqIHRvIGF2b2lkIHBhZ2UgYWxsb2NhdG9yIG92ZXJoZWFkLiBUaGlzIHNsYWIgbmVlZHMKQEAgLTE3MjQsNyArMTcxOCw3IEBACiAJYyA9IGdldF9jcHVfc2xhYihzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKG9iamVjdCwgYy0+b2Jqc2l6ZSk7CiAJaWYgKCEocy0+ZmxhZ3MgJiBTTEFCX0RFQlVHX09CSkVDVFMpKQotCQlkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQob2JqZWN0LCBzLT5vYmpzaXplKTsKKwkJZGVidWdfY2hlY2tfbm9fb2JqX2ZyZWVkKG9iamVjdCwgYy0+b2Jqc2l6ZSk7CiAJaWYgKGxpa2VseShwYWdlID09IGMtPnBhZ2UgJiYgYy0+bm9kZSA+PSAwKSkgewogCQlvYmplY3RbYy0+b2Zmc2V0XSA9IGMtPmZyZWVsaXN0OwogCQljLT5mcmVlbGlzdCA9IG9iamVjdDsKQEAgLTE4NDQsNiArMTgzOCw3IEBACiAJaW50IG9yZGVyOwogCWludCBtaW5fb2JqZWN0czsKIAlpbnQgZnJhY3Rpb247CisJaW50IG1heF9vYmplY3RzOwogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIGZpbmQgYmVzdCBjb25maWd1cmF0aW9uIGZvciBhIHNsYWIuIFRoaXMKQEAgLTE4NTYsNiArMTg1MSw5IEBACiAJbWluX29iamVjdHMgPSBzbHViX21pbl9vYmplY3RzOwogCWlmICghbWluX29iamVjdHMpCiAJCW1pbl9vYmplY3RzID0gNCAqIChmbHMobnJfY3B1X2lkcykgKyAxKTsKKwltYXhfb2JqZWN0cyA9IChQQUdFX1NJWkUgPDwgc2x1Yl9tYXhfb3JkZXIpL3NpemU7CisJbWluX29iamVjdHMgPSBtaW4obWluX29iamVjdHMsIG1heF9vYmplY3RzKTsKKwogCXdoaWxlIChtaW5fb2JqZWN0cyA+IDEpIHsKIAkJZnJhY3Rpb24gPSAxNjsKIAkJd2hpbGUgKGZyYWN0aW9uID49IDQpIHsKQEAgLTE4NjUsNyArMTg2Myw3IEBACiAJCQkJcmV0dXJuIG9yZGVyOwogCQkJZnJhY3Rpb24gLz0gMjsKIAkJfQotCQltaW5fb2JqZWN0cyAvPSAyOworCQltaW5fb2JqZWN0cyAtLTsKIAl9CiAKIAkvKgpAQCAtMTkyOCwxNyArMTkyNiw2IEBACiBpbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIHsKIAluLT5ucl9wYXJ0aWFsID0gMDsKLQotCS8qCi0JICogVGhlIGxhcmdlciB0aGUgb2JqZWN0IHNpemUgaXMsIHRoZSBtb3JlIHBhZ2VzIHdlIHdhbnQgb24gdGhlIHBhcnRpYWwKLQkgKiBsaXN0IHRvIGF2b2lkIHBvdW5kaW5nIHRoZSBwYWdlIGFsbG9jYXRvciBleGNlc3NpdmVseS4KLQkgKi8KLQluLT5taW5fcGFydGlhbCA9IGlsb2cyKHMtPnNpemUpOwotCWlmIChuLT5taW5fcGFydGlhbCA8IE1JTl9QQVJUSUFMKQotCQluLT5taW5fcGFydGlhbCA9IE1JTl9QQVJUSUFMOwotCWVsc2UgaWYgKG4tPm1pbl9wYXJ0aWFsID4gTUFYX1BBUlRJQUwpCi0JCW4tPm1pbl9wYXJ0aWFsID0gTUFYX1BBUlRJQUw7Ci0KIAlzcGluX2xvY2tfaW5pdCgmbi0+bGlzdF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmbi0+cGFydGlhbCk7CiAjaWZkZWYgQ09ORklHX1NMVUJfREVCVUcKQEAgLTIxODEsNiArMjE2OCwxNSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIHNldF9taW5fcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdW5zaWduZWQgbG9uZyBtaW4pCit7CisJaWYgKG1pbiA8IE1JTl9QQVJUSUFMKQorCQltaW4gPSBNSU5fUEFSVElBTDsKKwllbHNlIGlmIChtaW4gPiBNQVhfUEFSVElBTCkKKwkJbWluID0gTUFYX1BBUlRJQUw7CisJcy0+bWluX3BhcnRpYWwgPSBtaW47Cit9CisKIC8qCiAgKiBjYWxjdWxhdGVfc2l6ZXMoKSBkZXRlcm1pbmVzIHRoZSBvcmRlciBhbmQgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkYXRhIHdpdGhpbgogICogYSBzbGFiIG9iamVjdC4KQEAgLTIzMTksNiArMjMxNSwxMSBAQAogCWlmICghY2FsY3VsYXRlX3NpemVzKHMsIC0xKSkKIAkJZ290byBlcnJvcjsKIAorCS8qCisJICogVGhlIGxhcmdlciB0aGUgb2JqZWN0IHNpemUgaXMsIHRoZSBtb3JlIHBhZ2VzIHdlIHdhbnQgb24gdGhlIHBhcnRpYWwKKwkgKiBsaXN0IHRvIGF2b2lkIHBvdW5kaW5nIHRoZSBwYWdlIGFsbG9jYXRvciBleGNlc3NpdmVseS4KKwkgKi8KKwlzZXRfbWluX3BhcnRpYWwocywgaWxvZzIocy0+c2l6ZSkpOwogCXMtPnJlZmNvdW50ID0gMTsKICNpZmRlZiBDT05GSUdfTlVNQQogCXMtPnJlbW90ZV9ub2RlX2RlZnJhZ19yYXRpbyA9IDEwMDA7CkBAIC0yNDc1LDcgKzI0NzYsNyBAQAogICoJCUttYWxsb2Mgc3Vic3lzdGVtCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RydWN0IGttZW1fY2FjaGUga21hbGxvY19jYWNoZXNbUEFHRV9TSElGVCArIDFdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CitzdHJ1Y3Qga21lbV9jYWNoZSBrbWFsbG9jX2NhY2hlc1tTTFVCX1BBR0VfU0hJRlRdIF9fY2FjaGVsaW5lX2FsaWduZWQ7CiBFWFBPUlRfU1lNQk9MKGttYWxsb2NfY2FjaGVzKTsKIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfc2x1Yl9taW5fb3JkZXIoY2hhciAqc3RyKQpAQCAtMjUzNyw3ICsyNTM4LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19aT05FX0RNQQotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICprbWFsbG9jX2NhY2hlc19kbWFbUEFHRV9TSElGVCArIDFdOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICprbWFsbG9jX2NhY2hlc19kbWFbU0xVQl9QQUdFX1NISUZUXTsKIAogc3RhdGljIHZvaWQgc3lzZnNfYWRkX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3KQogewpAQCAtMjY1OCw3ICsyNjU5LDcgQEAKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAotCWlmICh1bmxpa2VseShzaXplID4gUEFHRV9TSVpFKSkKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQogCQlyZXR1cm4ga21hbGxvY19sYXJnZShzaXplLCBmbGFncyk7CiAKIAlzID0gZ2V0X3NsYWIoc2l6ZSwgZmxhZ3MpOwpAQCAtMjY4Niw3ICsyNjg3LDcgQEAKIHsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqczsKIAotCWlmICh1bmxpa2VseShzaXplID4gUEFHRV9TSVpFKSkKKwlpZiAodW5saWtlbHkoc2l6ZSA+IFNMVUJfTUFYX1NJWkUpKQogCQlyZXR1cm4ga21hbGxvY19sYXJnZV9ub2RlKHNpemUsIGZsYWdzLCBub2RlKTsKIAogCXMgPSBnZXRfc2xhYihzaXplLCBmbGFncyk7CkBAIC0yOTg2LDcgKzI5ODcsNyBAQAogCQljYWNoZXMrKzsKIAl9CiAKLQlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8PSBQQUdFX1NISUZUOyBpKyspIHsKKwlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8IFNMVUJfUEFHRV9TSElGVDsgaSsrKSB7CiAJCWNyZWF0ZV9rbWFsbG9jX2NhY2hlKCZrbWFsbG9jX2NhY2hlc1tpXSwKIAkJCSJrbWFsbG9jIiwgMSA8PCBpLCBHRlBfS0VSTkVMKTsKIAkJY2FjaGVzKys7CkBAIC0zMDIzLDcgKzMwMjQsNyBAQAogCXNsYWJfc3RhdGUgPSBVUDsKIAogCS8qIFByb3ZpZGUgdGhlIGNvcnJlY3Qga21hbGxvYyBuYW1lcyBub3cgdGhhdCB0aGUgY2FjaGVzIGFyZSB1cCAqLwotCWZvciAoaSA9IEtNQUxMT0NfU0hJRlRfTE9XOyBpIDw9IFBBR0VfU0hJRlQ7IGkrKykKKwlmb3IgKGkgPSBLTUFMTE9DX1NISUZUX0xPVzsgaSA8IFNMVUJfUEFHRV9TSElGVDsgaSsrKQogCQlrbWFsbG9jX2NhY2hlc1tpXS4gbmFtZSA9CiAJCQlrYXNwcmludGYoR0ZQX0tFUk5FTCwgImttYWxsb2MtJWQiLCAxIDw8IGkpOwogCkBAIC0zMjIzLDcgKzMyMjQsNyBAQAogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCi0JaWYgKHVubGlrZWx5KHNpemUgPiBQQUdFX1NJWkUpKQorCWlmICh1bmxpa2VseShzaXplID4gU0xVQl9NQVhfU0laRSkpCiAJCXJldHVybiBrbWFsbG9jX2xhcmdlKHNpemUsIGdmcGZsYWdzKTsKIAogCXMgPSBnZXRfc2xhYihzaXplLCBnZnBmbGFncyk7CkBAIC0zMjM5LDcgKzMyNDAsNyBAQAogewogCXN0cnVjdCBrbWVtX2NhY2hlICpzOwogCi0JaWYgKHVubGlrZWx5KHNpemUgPiBQQUdFX1NJWkUpKQorCWlmICh1bmxpa2VseShzaXplID4gU0xVQl9NQVhfU0laRSkpCiAJCXJldHVybiBrbWFsbG9jX2xhcmdlX25vZGUoc2l6ZSwgZ2ZwZmxhZ3MsIG5vZGUpOwogCiAJcyA9IGdldF9zbGFiKHNpemUsIGdmcGZsYWdzKTsKQEAgLTM4MzYsNiArMzgzNywyNiBAQAogfQogU0xBQl9BVFRSKG9yZGVyKTsKIAorc3RhdGljIHNzaXplX3QgbWluX3BhcnRpYWxfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgcy0+bWluX3BhcnRpYWwpOworfQorCitzdGF0aWMgc3NpemVfdCBtaW5fcGFydGlhbF9zdG9yZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqYnVmLAorCQkJCSBzaXplX3QgbGVuZ3RoKQoreworCXVuc2lnbmVkIGxvbmcgbWluOworCWludCBlcnI7CisKKwllcnIgPSBzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmbWluKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2V0X21pbl9wYXJ0aWFsKHMsIG1pbik7CisJcmV0dXJuIGxlbmd0aDsKK30KK1NMQUJfQVRUUihtaW5fcGFydGlhbCk7CisKIHN0YXRpYyBzc2l6ZV90IGN0b3Jfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKQogewogCWlmIChzLT5jdG9yKSB7CkBAIC00MTUxLDYgKzQxNzIsNyBAQAogCSZvYmplY3Rfc2l6ZV9hdHRyLmF0dHIsCiAJJm9ianNfcGVyX3NsYWJfYXR0ci5hdHRyLAogCSZvcmRlcl9hdHRyLmF0dHIsCisJJm1pbl9wYXJ0aWFsX2F0dHIuYXR0ciwKIAkmb2JqZWN0c19hdHRyLmF0dHIsCiAJJm9iamVjdHNfcGFydGlhbF9hdHRyLmF0dHIsCiAJJnRvdGFsX29iamVjdHNfYXR0ci5hdHRyLApkaWZmIC0tZ2l0IGEvbmV0LzgwMi9wc25hcC5jIGIvbmV0LzgwMi9wc25hcC5jCmluZGV4IDcwOTgwYmEuLjZmZWEwNzUgMTAwNjQ0Ci0tLSBhL25ldC84MDIvcHNuYXAuYworKysgYi9uZXQvODAyL3BzbmFwLmMKQEAgLTI5LDcgKzI5LDcgQEAKIC8qCiAgKglGaW5kIGEgc25hcCBjbGllbnQgYnkgbWF0Y2hpbmcgdGhlIDUgYnl0ZXMuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKmZpbmRfc25hcF9jbGllbnQodW5zaWduZWQgY2hhciAqZGVzYykKK3N0YXRpYyBzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKmZpbmRfc25hcF9jbGllbnQoY29uc3QgdW5zaWduZWQgY2hhciAqZGVzYykKIHsKIAlzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnByb3RvID0gTlVMTCwgKnA7CiAKQEAgLTUxLDcgKzUxLDcgQEAKIAlpbnQgcmMgPSAxOwogCXN0cnVjdCBkYXRhbGlua19wcm90byAqcHJvdG87CiAJc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBzbmFwX3BhY2tldF90eXBlID0gewotCQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfU05BUCksCisJCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfU05BUCksCiAJfTsKIAogCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIDUpKSkKQEAgLTk1LDE1ICs5NSwxNiBAQAogRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9zbmFwX2NsaWVudCk7CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfc25hcF9jbGllbnQpOwogCi1zdGF0aWMgY2hhciBzbmFwX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIHNuYXBfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIlNOQVAgLSB1bmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuMlxuIjsKIAogc3RhdGljIGludCBfX2luaXQgc25hcF9pbml0KHZvaWQpCiB7CiAJc25hcF9zYXAgPSBsbGNfc2FwX29wZW4oMHhBQSwgc25hcF9yY3YpOwotCi0JaWYgKCFzbmFwX3NhcCkKKwlpZiAoIXNuYXBfc2FwKSB7CiAJCXByaW50ayhzbmFwX2Vycl9tc2cpOworCQlyZXR1cm4gLUVCVVNZOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMTIxLDcgKzEyMiw3IEBACiAvKgogICoJUmVnaXN0ZXIgU05BUCBjbGllbnRzLiBXZSBkb24ndCB5ZXQgdXNlIHRoaXMgZm9yIElQLgogICovCi1zdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnJlZ2lzdGVyX3NuYXBfY2xpZW50KHVuc2lnbmVkIGNoYXIgKmRlc2MsCitzdHJ1Y3QgZGF0YWxpbmtfcHJvdG8gKnJlZ2lzdGVyX3NuYXBfY2xpZW50KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRlc2MsCiAJCQkJCSAgICBpbnQgKCpyY3ZmdW5jKShzdHJ1Y3Qgc2tfYnVmZiAqLAogCQkJCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICosCiAJCQkJCQkJICAgc3RydWN0IHBhY2tldF90eXBlICosCkBAIC0xMzYsNyArMTM3LDcgQEAKIAogCXByb3RvID0ga21hbGxvYyhzaXplb2YoKnByb3RvKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHByb3RvKSB7Ci0JCW1lbWNweShwcm90by0+dHlwZSwgZGVzYyw1KTsKKwkJbWVtY3B5KHByb3RvLT50eXBlLCBkZXNjLCA1KTsKIAkJcHJvdG8tPnJjdmZ1bmMJCT0gcmN2ZnVuYzsKIAkJcHJvdG8tPmhlYWRlcl9sZW5ndGgJPSA1ICsgMzsgLyogc25hcCArIDgwMi4yICovCiAJCXByb3RvLT5yZXF1ZXN0CQk9IHNuYXBfcmVxdWVzdDsKZGlmZiAtLWdpdCBhL25ldC84MDIvdHIuYyBiL25ldC84MDIvdHIuYwppbmRleCBmNDdhZTI4Li5lN2ViMTMwIDEwMDY0NAotLS0gYS9uZXQvODAyL3RyLmMKKysrIGIvbmV0LzgwMi90ci5jCkBAIC00ODYsNiArNDg2LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgKnJpZl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoJnJpZl9sb2NrKQogewogCXNwaW5fbG9ja19pcnEoJnJpZl9sb2NrKTsKIApAQCAtNTE3LDYgKzUxOCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIHJpZl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKKwlfX3JlbGVhc2VzKCZyaWZfbG9jaykKIHsKIAlzcGluX3VubG9ja19pcnEoJnJpZl9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuLmMgYi9uZXQvODAyMXEvdmxhbi5jCmluZGV4IDQxZThmNjUuLjJiNzM5MGUgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW4uYwpAQCAtNTEsOCArNTEsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgdmxhbl9jb3B5cmlnaHRbXSA9ICJCZW4gR3JlZWFyIDxncmVlYXJiQGNhbmRlbGF0ZWNoLmNvbT4iOwogc3RhdGljIGNvbnN0IGNoYXIgdmxhbl9idWdneXJpZ2h0W10gPSAiRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUByZWRoYXQuY29tPiI7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgdmxhbl9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB2bGFuX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSksCiAJLmZ1bmMgPSB2bGFuX3NrYl9yZWN2LCAvKiBWTEFOIHJlY2VpdmUgbWV0aG9kICovCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKaW5kZXggMjg4NmQyZi4uNjU0ZTQ1ZiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCisrKyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwpAQCAtODksMzggKzg5LDI3IEBACiAJCWdvdG8gZHJvcDsKIAogCWZvciAocCA9IG5hcGktPmdyb19saXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gcC0+ZGV2ID09IHNrYi0+ZGV2OworCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0KKwkJCXAtPmRldiA9PSBza2ItPmRldiAmJiAhY29tcGFyZV9ldGhlcl9oZWFkZXIoCisJCQkJc2tiX21hY19oZWFkZXIocCksIHNrYl9ncm9fbWFjX2hlYWRlcihza2IpKTsKIAkJTkFQSV9HUk9fQ0IocCktPmZsdXNoID0gMDsKIAl9CiAKIAlyZXR1cm4gZGV2X2dyb19yZWNlaXZlKG5hcGksIHNrYik7CiAKIGRyb3A6Ci0JcmV0dXJuIDI7CisJcmV0dXJuIEdST19EUk9QOwogfQogCiBpbnQgdmxhbl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCB2bGFuX2dyb3VwICpncnAsCiAJCSAgICAgdW5zaWduZWQgaW50IHZsYW5fdGNpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCBlcnIgPSBORVRfUlhfU1VDQ0VTUzsKKwlpZiAobmV0cG9sbF9yeF9vbihza2IpKQorCQlyZXR1cm4gdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgZ3JwLCB2bGFuX3RjaSk7CiAKLQlpZiAobmV0cG9sbF9yZWNlaXZlX3NrYihza2IpKQotCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJc2tiX2dyb19yZXNldF9vZmZzZXQoc2tiKTsKIAotCXN3aXRjaCAodmxhbl9ncm9fY29tbW9uKG5hcGksIGdycCwgdmxhbl90Y2ksIHNrYikpIHsKLQljYXNlIC0xOgotCQlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKLQotCWNhc2UgMjoKLQkJZXJyID0gTkVUX1JYX0RST1A7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCi0JY2FzZSAxOgotCQlrZnJlZV9za2Ioc2tiKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gbmFwaV9za2JfZmluaXNoKHZsYW5fZ3JvX2NvbW1vbihuYXBpLCBncnAsIHZsYW5fdGNpLCBza2IpLCBza2IpOwogfQogRVhQT1JUX1NZTUJPTCh2bGFuX2dyb19yZWNlaXZlKTsKIApAQCAtMTI4LDMwICsxMTcsMTQgQEAKIAkJICAgdW5zaWduZWQgaW50IHZsYW5fdGNpLCBzdHJ1Y3QgbmFwaV9ncm9fZnJhZ2luZm8gKmluZm8pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5hcGlfZnJhZ2luZm9fc2tiKG5hcGksIGluZm8pOwotCWludCBlcnIgPSBORVRfUlhfRFJPUDsKIAogCWlmICghc2tiKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCi0JaWYgKG5ldHBvbGxfcmVjZWl2ZV9za2Ioc2tiKSkKLQkJZ290byBvdXQ7CisJaWYgKG5ldHBvbGxfcnhfb24oc2tiKSkKKwkJcmV0dXJuIHZsYW5faHdhY2NlbF9yZWNlaXZlX3NrYihza2IsIGdycCwgdmxhbl90Y2kpOwogCi0JZXJyID0gTkVUX1JYX1NVQ0NFU1M7Ci0KLQlzd2l0Y2ggKHZsYW5fZ3JvX2NvbW1vbihuYXBpLCBncnAsIHZsYW5fdGNpLCBza2IpKSB7Ci0JY2FzZSAtMToKLQkJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0KLQljYXNlIDI6Ci0JCWVyciA9IE5FVF9SWF9EUk9QOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCWNhc2UgMToKLQkJbmFwaV9yZXVzZV9za2IobmFwaSwgc2tiKTsKLQkJYnJlYWs7Ci0JfQotCi1vdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gbmFwaV9mcmFnc19maW5pc2gobmFwaSwgc2tiLAorCQkJCSB2bGFuX2dyb19jb21tb24obmFwaSwgZ3JwLCB2bGFuX3RjaSwgc2tiKSk7CiB9CiBFWFBPUlRfU1lNQk9MKHZsYW5fZ3JvX2ZyYWdzKTsKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc19mZC5jIGIvbmV0LzlwL3RyYW5zX2ZkLmMKaW5kZXggMWRmMDM1Ni4uYzYxM2VkMDggMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc19mZC5jCisrKyBiL25ldC85cC90cmFuc19mZC5jCkBAIC00MTcsNyArNDE3LDcgQEAKIAlvbGRmcyA9IGdldF9mcygpOwogCXNldF9mcyhnZXRfZHMoKSk7CiAJLyogVGhlIGNhc3QgdG8gYSB1c2VyIHBvaW50ZXIgaXMgdmFsaWQgZHVlIHRvIHRoZSBzZXRfZnMoKSAqLwotCXJldCA9IHZmc193cml0ZSh0cy0+d3IsICh2b2lkIF9fdXNlciAqKXYsIGxlbiwgJnRzLT53ci0+Zl9wb3MpOworCXJldCA9IHZmc193cml0ZSh0cy0+d3IsIChfX2ZvcmNlIHZvaWQgX191c2VyICopdiwgbGVuLCAmdHMtPndyLT5mX3Bvcyk7CiAJc2V0X2ZzKG9sZGZzKTsKIAogCWlmIChyZXQgPD0gMCAmJiByZXQgIT0gLUVSRVNUQVJUU1lTICYmIHJldCAhPSAtRUFHQUlOKQpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCBjZGI4ZmRlLi5lYzkzZTdlIDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtNCw2ICs0LDcgQEAKIAogbWVudWNvbmZpZyBORVQKIAlib29sICJOZXR3b3JraW5nIHN1cHBvcnQiCisJc2VsZWN0IE5MQVRUUgogCS0tLWhlbHAtLS0KIAkgIFVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUuCiAJICBUaGUgcmVhc29uIGlzIHRoYXQgc29tZSBwcm9ncmFtcyBuZWVkIGtlcm5lbCBuZXR3b3JraW5nIHN1cHBvcnQgZXZlbgpAQCAtMjQsOSArMjUsNiBAQAogCiBtZW51ICJOZXR3b3JraW5nIG9wdGlvbnMiCiAKLWNvbmZpZyBDT01QQVRfTkVUX0RFVl9PUFMKLSAgICAgICBkZWZfYm9vbCB5Ci0KIHNvdXJjZSAibmV0L3BhY2tldC9LY29uZmlnIgogc291cmNlICJuZXQvdW5peC9LY29uZmlnIgogc291cmNlICJuZXQveGZybS9LY29uZmlnIgpAQCAtMTcxLDYgKzE2OSw3IEBACiAKIHNvdXJjZSAibmV0L2RjY3AvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3NjdHAvS2NvbmZpZyIKK3NvdXJjZSAibmV0L3Jkcy9LY29uZmlnIgogc291cmNlICJuZXQvdGlwYy9LY29uZmlnIgogc291cmNlICJuZXQvYXRtL0tjb25maWciCiBzb3VyY2UgIm5ldC84MDIvS2NvbmZpZyIKQEAgLTE4NSw2ICsxODQsNyBAQAogc291cmNlICJuZXQvbGFwYi9LY29uZmlnIgogc291cmNlICJuZXQvZWNvbmV0L0tjb25maWciCiBzb3VyY2UgIm5ldC93YW5yb3V0ZXIvS2NvbmZpZyIKK3NvdXJjZSAibmV0L3Bob25ldC9LY29uZmlnIgogc291cmNlICJuZXQvc2NoZWQvS2NvbmZpZyIKIHNvdXJjZSAibmV0L2RjYi9LY29uZmlnIgogCkBAIC0yMjAsNiArMjIwLDE3IEBACiAJVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCW1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0Y3BfcHJvYmUuCiAKK2NvbmZpZyBORVRfRFJPUF9NT05JVE9SCisJYm9vbGVhbiAiTmV0d29yayBwYWNrZXQgZHJvcCBhbGVydGluZyBzZXJ2aWNlIgorCWRlcGVuZHMgb24gSU5FVCAmJiBFWFBFUklNRU5UQUwgJiYgVFJBQ0VQT0lOVFMKKwktLS1oZWxwLS0tCisJVGhpcyBmZWF0dXJlIHByb3ZpZGVzIGFuIGFsZXJ0aW5nIHNlcnZpY2UgdG8gdXNlcnNwYWNlIGluIHRoZQorCWV2ZW50IHRoYXQgcGFja2V0cyBhcmUgZGlzY2FyZGVkIGluIHRoZSBuZXR3b3JrIHN0YWNrLiAgQWxlcnRzCisJYXJlIGJyb2FkY2FzdCB2aWEgbmV0bGluayBzb2NrZXQgdG8gYW55IGxpc3RlbmluZyB1c2VyIHNwYWNlCisJcHJvY2Vzcy4gIElmIHlvdSBkb24ndCBuZWVkIG5ldHdvcmsgZHJvcCBhbGVydHMsIG9yIGlmIHlvdSBhcmUgb2sKKwlqdXN0IGNoZWNraW5nIHRoZSB2YXJpb3VzIHByb2MgZmlsZXMgYW5kIG90aGVyIHV0aWxpdGllcyBmb3IKKwlkcm9wIHN0YXRpc3RpY3MsIHNheSBOIGhlcmUuCisKIGVuZG1lbnUKIAogZW5kbWVudQpAQCAtMjI5LDcgKzI0MCw2IEBACiBzb3VyY2UgIm5ldC9pcmRhL0tjb25maWciCiBzb3VyY2UgIm5ldC9ibHVldG9vdGgvS2NvbmZpZyIKIHNvdXJjZSAibmV0L3J4cnBjL0tjb25maWciCi1zb3VyY2UgIm5ldC9waG9uZXQvS2NvbmZpZyIKIAogY29uZmlnIEZJQl9SVUxFUwogCWJvb2wKZGlmZiAtLWdpdCBhL25ldC9NYWtlZmlsZSBiL25ldC9NYWtlZmlsZQppbmRleCAwZmNjZTg5Li45ZTAwYTU1IDEwMDY0NAotLS0gYS9uZXQvTWFrZWZpbGUKKysrIGIvbmV0L01ha2VmaWxlCkBAIC00OSw2ICs0OSw3IEBACiBlbmRpZgogb2JqLSQoQ09ORklHX0lQX0RDQ1ApCQkrPSBkY2NwLwogb2JqLSQoQ09ORklHX0lQX1NDVFApCQkrPSBzY3RwLworb2JqLSQoQ09ORklHX1JEUykJCSs9IHJkcy8KIG9iai15CQkJCSs9IHdpcmVsZXNzLwogb2JqLSQoQ09ORklHX01BQzgwMjExKQkJKz0gbWFjODAyMTEvCiBvYmotJChDT05GSUdfVElQQykJCSs9IHRpcGMvCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2RkcC5jIGIvbmV0L2FwcGxldGFsay9kZHAuYwppbmRleCA1YWJjZTA3Li5kNmE5MjQzIDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2RkcC5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKQEAgLTE1NzEsMTQgKzE1NzEsMTAgQEAKIAkJICAgIHVzYXQtPnNhdF9mYW1pbHkgIT0gQUZfQVBQTEVUQUxLKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJLyogbmV0YXRhbGsgZG9lc24ndCBpbXBsZW1lbnQgdGhpcyBjaGVjayAqLworCQkvKiBuZXRhdGFsayBkaWRuJ3QgaW1wbGVtZW50IHRoaXMgY2hlY2sgKi8KIAkJaWYgKHVzYXQtPnNhdF9hZGRyLnNfbm9kZSA9PSBBVEFERFJfQkNBU1QgJiYKIAkJICAgICFzb2NrX2ZsYWcoc2ssIFNPQ0tfQlJPQURDQVNUKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiU09fQlJPQURDQVNUOiBGaXggeW91ciBuZXRhdGFsayBhcyAiCi0JCQkJCSAiaXQgd2lsbCBicmVhayBiZWZvcmUgMi4yXG4iKTsKLSNpZiAwCiAJCQlyZXR1cm4gLUVQRVJNOwotI2VuZGlmCiAJCX0KIAl9IGVsc2UgewogCQlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9FU1RBQkxJU0hFRCkKQEAgLTE4NjAsMTMgKzE4NTYsMTMgQEAKIAkubm90aWZpZXJfY2FsbAk9IGRkcF9kZXZpY2VfZXZlbnQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGx0YWxrX3BhY2tldF90eXBlID0gewotCS50eXBlCQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfTE9DQUxUQUxLKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbHRhbGtfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF9MT0NBTFRBTEspLAogCS5mdW5jCQk9IGx0YWxrX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcHBwdGFsa19wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1BQUFRBTEspLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBwcHB0YWxrX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJCT0gY3B1X3RvX2JlMTYoRVRIX1BfUFBQVEFMSyksCiAJLmZ1bmMJCT0gYXRhbGtfcmN2LAogfTsKIApAQCAtMTg3Nyw3ICsxODczLDcgQEAKIEVYUE9SVF9TWU1CT0woYXRydHJfZ2V0X2Rldik7CiBFWFBPUlRfU1lNQk9MKGF0YWxrX2ZpbmRfZGV2X2FkZHIpOwogCi1zdGF0aWMgY2hhciBhdGFsa19lcnJfc25hcFtdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgYXRhbGtfZXJyX3NuYXBbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJVbmFibGUgdG8gcmVnaXN0ZXIgRERQIHdpdGggU05BUC5cbiI7CiAKIC8qIENhbGxlZCBieSBwcm90by5jIG9uIGtlcm5lbCBzdGFydCB1cCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2FwcGxldGFsay9kZXYuYyBiL25ldC9hcHBsZXRhbGsvZGV2LmMKaW5kZXggZDg1NmE2Mi4uNzIyNzdkNyAxMDA2NDQKLS0tIGEvbmV0L2FwcGxldGFsay9kZXYuYworKysgYi9uZXQvYXBwbGV0YWxrL2Rldi5jCkBAIC05LDIyICs5LDIwIEBACiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfbHRhbGsuaD4KIAorI2lmZGVmIENPTkZJR19DT01QQVRfTkVUX0RFVl9PUFMKIHN0YXRpYyBpbnQgbHRhbGtfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbXR1KQogewogCXJldHVybiAtRUlOVkFMOwogfQotCi1zdGF0aWMgaW50IGx0YWxrX21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCi17Ci0JcmV0dXJuIC1FSU5WQUw7Ci19CisjZW5kaWYKIAogc3RhdGljIHZvaWQgbHRhbGtfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAkvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgdGhlIGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBsb2NhbHRhbGstZ2VuZXJpYyB2YWx1ZXMuICovCiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTCiAJZGV2LT5jaGFuZ2VfbXR1CQk9IGx0YWxrX2NoYW5nZV9tdHU7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgCT0gbHRhbGtfbWFjX2FkZHI7CisjZW5kaWYKIAogCWRldi0+dHlwZQkJPSBBUlBIUkRfTE9DQUxUTEs7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gCT0gTFRBTEtfSExFTjsKZGlmZiAtLWdpdCBhL25ldC9hdG0vYnIyNjg0LmMgYi9uZXQvYXRtL2JyMjY4NC5jCmluZGV4IGVhOTQzOGZjLi4zMzRmY2Q0IDEwMDY0NAotLS0gYS9uZXQvYXRtL2JyMjY4NC5jCisrKyBiL25ldC9hdG0vYnIyNjg0LmMKQEAgLTgzLDcgKzgzLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJyMjY4NF9kZXZzOwogCWludCBudW1iZXI7CiAJc3RydWN0IGxpc3RfaGVhZCBicnZjY3M7CS8qIG9uZSBkZXZpY2UgPD0+IG9uZSB2Y2MgKGJlZm9yZSB4bWFzKSAqLwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCWludCBtYWNfd2FzX3NldDsKIAllbnVtIGJyMjY4NF9wYXlsb2FkIHBheWxvYWQ7CiB9OwpAQCAtMTQ4LDkgKzE0NywxMCBAQAogICogdGhlIHdheSBmb3IgbXVsdGlwbGUgdmNjJ3MgcGVyIGl0Zi4gIFJldHVybnMgdHJ1ZSBpZiB3ZSBjYW4gc2VuZCwKICAqIG90aGVyd2lzZSBmYWxzZQogICovCi1zdGF0aWMgaW50IGJyMjY4NF94bWl0X3ZjYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXYsCitzdGF0aWMgaW50IGJyMjY4NF94bWl0X3ZjYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgc3RydWN0IGJyMjY4NF92Y2MgKmJydmNjKQogeworCXN0cnVjdCBicjI2ODRfZGV2ICpicmRldiA9IEJSUFJJVihkZXYpOwogCXN0cnVjdCBhdG1fdmNjICphdG12Y2M7CiAJaW50IG1pbmhlYWRyb29tID0gKGJydmNjLT5lbmNhcHMgPT0gZV9sbGMpID8gMTAgOiAyOwogCkBAIC0yMTEsOCArMjExLDggQEAKIAl9CiAJYXRvbWljX2FkZChza2ItPnRydWVzaXplLCAmc2tfYXRtKGF0bXZjYyktPnNrX3dtZW1fYWxsb2MpOwogCUFUTV9TS0Ioc2tiKS0+YXRtX29wdGlvbnMgPSBhdG12Y2MtPmF0bV9vcHRpb25zOwotCWJyZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JYnJkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOworCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJYXRtdmNjLT5zZW5kKGF0bXZjYywgc2tiKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTIzMywxNCArMjMzLDE0IEBACiAJYnJ2Y2MgPSBwaWNrX291dGdvaW5nX3ZjYyhza2IsIGJyZGV2KTsKIAlpZiAoYnJ2Y2MgPT0gTlVMTCkgewogCQlwcl9kZWJ1Zygibm8gdmNjIGF0dGFjaGVkIHRvIGRldiAlc1xuIiwgZGV2LT5uYW1lKTsKLQkJYnJkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQlicmRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOwogCQkvKiBuZXRpZl9zdG9wX3F1ZXVlKGRldik7ICovCiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmVhZF91bmxvY2soJmRldnNfbG9jayk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoIWJyMjY4NF94bWl0X3ZjYyhza2IsIGJyZGV2LCBicnZjYykpIHsKKwlpZiAoIWJyMjY4NF94bWl0X3ZjYyhza2IsIGRldiwgYnJ2Y2MpKSB7CiAJCS8qCiAJCSAqIFdlIHNob3VsZCBwcm9iYWJseSB1c2UgbmV0aWZfKl9xdWV1ZSgpIGhlcmUsIGJ1dCB0aGF0CiAJCSAqIGludm9sdmVzIGFkZGVkIGNvbXBsaWNhdGlvbi4gIFdlIG5lZWQgdG8gd2FsayBiZWZvcmUKQEAgLTI0OCwyNyArMjQ4LDIwIEBACiAJCSAqCiAJCSAqIERvbid0IGZyZWUgaGVyZSEgdGhpcyBwb2ludGVyIG1pZ2h0IGJlIG5vIGxvbmdlciB2YWxpZCEKIAkJICovCi0JCWJyZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJYnJkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAl9CiAJcmVhZF91bmxvY2soJmRldnNfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYnIyNjg0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXByX2RlYnVnKCJicjI2ODRfZ2V0X3N0YXRzXG4iKTsKLQlyZXR1cm4gJkJSUFJJVihkZXYpLT5zdGF0czsKLX0KLQogLyoKICAqIFdlIHJlbWVtYmVyIHdoZW4gdGhlIE1BQyBnZXRzIHNldCwgc28gd2UgZG9uJ3Qgb3ZlcnJpZGUgaXQgbGF0ZXIgd2l0aAogICogdGhlIEVTSSBvZiB0aGUgQVRNIGNhcmQgb2YgdGhlIGZpcnN0IFZDCiAgKi8KLXN0YXRpYyBpbnQgKCpteV9ldGhfbWFjX2FkZHIpIChzdHJ1Y3QgbmV0X2RldmljZSAqLCB2b2lkICopOwogc3RhdGljIGludCBicjI2ODRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKIHsKLQlpbnQgZXJyID0gbXlfZXRoX21hY19hZGRyKGRldiwgcCk7CisJaW50IGVyciA9IGV0aF9tYWNfYWRkcihkZXYsIHApOwogCWlmICghZXJyKQogCQlCUlBSSVYoZGV2KS0+bWFjX3dhc19zZXQgPSAxOwogCXJldHVybiBlcnI7CkBAIC00MzAsMTcgKzQyMywxNyBAQAogCS8qIHNpZ2gsIGludGVyZmFjZSBpcyBkb3duPyAqLwogCWlmICh1bmxpa2VseSghKG5ldF9kZXYtPmZsYWdzICYgSUZGX1VQKSkpCiAJCWdvdG8gZHJvcHBlZDsKLQlicmRldi0+c3RhdHMucnhfcGFja2V0cysrOwotCWJyZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwluZXRfZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJbmV0X2Rldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJbWVtc2V0KEFUTV9TS0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBhdG1fc2tiX2RhdGEpKTsKIAluZXRpZl9yeChza2IpOwogCXJldHVybjsKIAogZHJvcHBlZDoKLQlicmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCW5ldF9kZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAlnb3RvIGZyZWVfc2tiOwogZXJyb3I6Ci0JYnJkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCW5ldF9kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogZnJlZV9za2I6CiAJZGV2X2tmcmVlX3NrYihza2IpOwogCXJldHVybjsKQEAgLTUzMSw4ICs1MjQsOCBAQAogCiAJCXNrYi0+bmV4dCA9IHNrYi0+cHJldiA9IE5VTEw7CiAJCWJyMjY4NF9wdXNoKGF0bXZjYywgc2tiKTsKLQkJQlJQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfYnl0ZXMgLT0gc2tiLT5sZW47Ci0JCUJSUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X3BhY2tldHMtLTsKKwkJc2tiLT5kZXYtPnN0YXRzLnJ4X2J5dGVzIC09IHNrYi0+bGVuOworCQlza2ItPmRldi0+c3RhdHMucnhfcGFja2V0cy0tOwogCiAJCXNrYiA9IG5leHQ7CiAJfQpAQCAtNTQ0LDE3ICs1MzcsMjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGJyMjY4NF9uZXRkZXZfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCAJPSBicjI2ODRfc3RhcnRfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGJyMjY4NF9tYWNfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCisJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCiBzdGF0aWMgdm9pZCBicjI2ODRfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXYgPSBCUlBSSVYobmV0ZGV2KTsKIAogCWV0aGVyX3NldHVwKG5ldGRldik7Ci0JYnJkZXYtPm5ldF9kZXYgPSBuZXRkZXY7CiAKLQlteV9ldGhfbWFjX2FkZHIgPSBuZXRkZXYtPnNldF9tYWNfYWRkcmVzczsKLQluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IGJyMjY4NF9tYWNfYWRkcjsKLQluZXRkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGJyMjY4NF9zdGFydF94bWl0OwotCW5ldGRldi0+Z2V0X3N0YXRzID0gYnIyNjg0X2dldF9zdGF0czsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmYnIyNjg0X25ldGRldl9vcHM7CiAKIAlJTklUX0xJU1RfSEVBRCgmYnJkZXYtPmJydmNjcyk7CiB9CkBAIC01NjUsMTAgKzU2MSw4IEBACiAJYnJkZXYtPm5ldF9kZXYgPSBuZXRkZXY7CiAKIAluZXRkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IDA7Ci0JbXlfZXRoX21hY19hZGRyID0gbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3M7Ci0JbmV0ZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBicjI2ODRfbWFjX2FkZHI7Ci0JbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBicjI2ODRfc3RhcnRfeG1pdDsKLQluZXRkZXYtPmdldF9zdGF0cyA9IGJyMjY4NF9nZXRfc3RhdHM7CisKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmYnIyNjg0X25ldGRldl9vcHM7CiAJbmV0ZGV2LT5hZGRyX2xlbiA9IDA7CiAJbmV0ZGV2LT5tdHUgPSAxNTAwOwogCW5ldGRldi0+dHlwZSA9IEFSUEhSRF9QUFA7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2NsaXAuYyBiL25ldC9hdG0vY2xpcC5jCmluZGV4IDJkMzNhODMuLjNkYzBhM2EgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY2xpcC5jCisrKyBiL25ldC9hdG0vY2xpcC5jCkBAIC0yMTQsMTUgKzIxNCwxNSBAQAogCQlza2ItPnByb3RvY29sID0gKChfX2JlMTYgKikgc2tiLT5kYXRhKVszXTsKIAkJc2tiX3B1bGwoc2tiLCBSRkMxNDgzTExDX0xFTik7CiAJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0FSUCkpIHsKLQkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQlza2ItPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQkJc2tiLT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJY2xpcF9hcnBfcmN2KHNrYik7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAJY2xpcF92Y2MtPmxhc3RfdXNlID0gamlmZmllczsKLQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfcGFja2V0cysrOwotCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlza2ItPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCXNrYi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAltZW1zZXQoQVRNX1NLQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IGF0bV9za2JfZGF0YSkpOwogCW5ldGlmX3J4KHNrYik7CiB9CkBAIC0zNzIsNyArMzcyLDcgQEAKIAlpZiAoIXNrYi0+ZHN0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2xpcF9zdGFydF94bWl0OiBza2ItPmRzdCA9PSBOVUxMXG4iKTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCQljbGlwX3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIXNrYi0+ZHN0LT5uZWlnaGJvdXIpIHsKQEAgLTM4MCwxMyArMzgwLDEzIEBACiAJCXNrYi0+ZHN0LT5uZWlnaGJvdXIgPSBjbGlwX2ZpbmRfbmVpZ2hib3VyKHNrYi0+ZHN0LCAxKTsKIAkJaWYgKCFza2ItPmRzdC0+bmVpZ2hib3VyKSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CS8qIGxvc3QgdGhhdCBvbmUgKi8KLQkJCWNsaXBfcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlyZXR1cm4gMDsKIAkJfQogI2VuZGlmCiAJCXByaW50ayhLRVJOX0VSUiAiY2xpcF9zdGFydF94bWl0OiBOTyBORUlHSEJPVVIgIVxuIik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJY2xpcF9wcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlyZXR1cm4gMDsKIAl9CiAJZW50cnkgPSBORUlHSDJFTlRSWShza2ItPmRzdC0+bmVpZ2hib3VyKTsKQEAgLTQwMCw3ICs0MDAsNyBAQAogCQkJc2tiX3F1ZXVlX3RhaWwoJmVudHJ5LT5uZWlnaC0+YXJwX3F1ZXVlLCBza2IpOwogCQllbHNlIHsKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCWNsaXBfcHJpdi0+c3RhdHMudHhfZHJvcHBlZCsrOworCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQpAQCAtNDIzLDggKzQyMyw4IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNsaXBfc3RhcnRfeG1pdDogWE9GRi0+WE9GRiB0cmFuc2l0aW9uXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCWNsaXBfcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOwotCWNsaXBfcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAl2Y2MtPnNlbmQodmNjLCBza2IpOwogCWlmIChhdG1fbWF5X3NlbmQodmNjLCAwKSkgewogCQllbnRyeS0+dmNjcy0+eG9mZiA9IDA7CkBAIC00NDMsMTEgKzQ0Myw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqY2xpcF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gJlBSSVYoZGV2KS0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBpbnQgY2xpcF9ta2lwKHN0cnVjdCBhdG1fdmNjICp2Y2MsIGludCB0aW1lb3V0KQogewogCXN0cnVjdCBjbGlwX3ZjYyAqY2xpcF92Y2M7CkBAIC01MDEsOCArNDk2LDggQEAKIAogCQkJc2tiX2dldChza2IpOwogCQkJY2xpcF9wdXNoKHZjYywgc2tiKTsKLQkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9wYWNrZXRzLS07Ci0JCQlQUklWKHNrYi0+ZGV2KS0+c3RhdHMucnhfYnl0ZXMgLT0gbGVuOworCQkJc2tiLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMtLTsKKwkJCXNrYi0+ZGV2LT5zdGF0cy5yeF9ieXRlcyAtPSBsZW47CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJfQogCkBAIC01NTcsMTEgKzU1MiwxMyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBjbGlwX25ldGRldl9vcHMgPSB7CisJLm5kb19zdGFydF94bWl0ID0gY2xpcF9zdGFydF94bWl0LAorfTsKKwogc3RhdGljIHZvaWQgY2xpcF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gY2xpcF9zdGFydF94bWl0OwotCS8qIHNnX3htaXQgLi4uICovCi0JZGV2LT5nZXRfc3RhdHMgPSBjbGlwX2dldF9zdGF0czsKKwlkZXYtPm5ldGRldl9vcHMgPSAmY2xpcF9uZXRkZXZfb3BzOwogCWRldi0+dHlwZSA9IEFSUEhSRF9BVE07CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBSRkMxNDgzTExDX0xFTjsKIAlkZXYtPm10dSA9IFJGQzE2MjZfTVRVOwpAQCAtNjIxLDcgKzYxOCw3IEBACiAJfQogCiAJLyogaWdub3JlIG5vbi1DTElQIGRldmljZXMgKi8KLQlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9BVE0gfHwgZGV2LT5oYXJkX3N0YXJ0X3htaXQgIT0gY2xpcF9zdGFydF94bWl0KQorCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0FUTSB8fCBkZXYtPm5ldGRldl9vcHMgIT0gJmNsaXBfbmV0ZGV2X29wcykKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCiAJc3dpdGNoIChldmVudCkgewpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9sZWMuYyBiL25ldC9hdG0vbGVjLmMKaW5kZXggZTVlMzAxNS4uMTk5YjZiYiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9sZWMuYworKysgYi9uZXQvYXRtL2xlYy5jCkBAIC02Miw3ICs2Miw2IEBACiBzdGF0aWMgaW50IGxlY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBsZWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbGVjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpsZWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgbGVjX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IGxlY19hcnBfdGFibGUgKmxlY19hcnBfZmluZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCiAJCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIpOwpAQCAtMjE4LDI4ICsyMTcsMjggQEAKIAogc3RhdGljIGludCBsZWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0KIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCW1lbXNldCgmcHJpdi0+c3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOworCW1lbXNldCgmZGV2LT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZAotbGVjX3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGxlY19wcml2ICpwcml2KQorc3RhdGljIHZvaWQKK2xlY19zZW5kKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OworCiAJQVRNX1NLQihza2IpLT52Y2MgPSB2Y2M7CiAJQVRNX1NLQihza2IpLT5hdG1fb3B0aW9ucyA9IHZjYy0+YXRtX29wdGlvbnM7CiAKIAlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZza19hdG0odmNjKS0+c2tfd21lbV9hbGxvYyk7CiAJaWYgKHZjYy0+c2VuZCh2Y2MsIHNrYikgPCAwKSB7Ci0JCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAKLQlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIH0KIAogc3RhdGljIHZvaWQgbGVjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI3MCw3ICsyNjksNyBAQAogCXByX2RlYnVnKCJsZWNfc3RhcnRfeG1pdCBjYWxsZWRcbiIpOwogCWlmICghcHJpdi0+bGVjZCkgewogCQlwcmludGsoIiVzOk5vIGxlY2QgYXR0YWNoZWRcbiIsIGRldi0+bmFtZSk7Ci0JCXByaXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXJldHVybiAtRVVOQVRDSDsKIAl9CkBAIC0zNDUsNyArMzQ0LDcgQEAKIAkJCQkJICAgICAgIEdGUF9BVE9NSUMpOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJaWYgKHNrYjIgPT0gTlVMTCkgewotCQkJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCXNrYiA9IHNrYjI7CkBAIC0zODAsNyArMzc5LDcgQEAKIAkJCSAgICAoIiVzOmxlY19zdGFydF94bWl0OiB0eCBxdWV1ZSBmdWxsIG9yIG5vIGFycCBlbnRyeSwgZHJvcHBpbmcsICIsCiAJCQkgICAgIGRldi0+bmFtZSk7CiAJCQlwcl9kZWJ1ZygiTUFDIGFkZHJlc3MgJXBNXG4iLCBsZWNfaC0+aF9kZXN0KTsKLQkJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQl9CiAJCWdvdG8gb3V0OwpAQCAtMzkyLDEwICszOTEsMTAgQEAKIAl3aGlsZSAoZW50cnkgJiYgKHNrYjIgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSkgewogCQlwcl9kZWJ1ZygibGVjLmM6IGVtcHR5aW5nIHR4IHF1ZXVlLCAiKTsKIAkJcHJfZGVidWcoIk1BQyBhZGRyZXNzICVwTVxuIiwgbGVjX2gtPmhfZGVzdCk7Ci0JCWxlY19zZW5kKHZjYywgc2tiMiwgcHJpdik7CisJCWxlY19zZW5kKHZjYywgc2tiMik7CiAJfQogCi0JbGVjX3NlbmQodmNjLCBza2IsIHByaXYpOworCWxlY19zZW5kKHZjYywgc2tiKTsKIAogCWlmICghYXRtX21heV9zZW5kKHZjYywgMCkpIHsKIAkJc3RydWN0IGxlY192Y2NfcHJpdiAqdnByaXYgPSBMRUNfVkNDX1BSSVYodmNjKTsKQEAgLTQyNywxNSArNDI2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIEdldCB0aGUgY3VycmVudCBzdGF0aXN0aWNzLgotICogVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggdGhlIGNhcmQgb3BlbiBvciBjbG9zZWQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGVjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiAmKChzdHJ1Y3QgbGVjX3ByaXYgKiluZXRkZXZfcHJpdihkZXYpKS0+c3RhdHM7Ci19Ci0KIHN0YXRpYyBpbnQgbGVjX2F0bV9zZW5kKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTUxMiw3ICs1MDIsNyBAQAogCQlwcml2LT5sYW5lMl9vcHMgPSBOVUxMOwogCQlpZiAocHJpdi0+bGFuZV92ZXJzaW9uID4gMSkKIAkJCXByaXYtPmxhbmUyX29wcyA9ICZsYW5lMl9vcHM7Ci0JCWlmIChkZXYtPmNoYW5nZV9tdHUoZGV2LCBtZXNnLT5jb250ZW50LmNvbmZpZy5tdHUpKQorCQlpZiAoZGV2X3NldF9tdHUoZGV2LCBtZXNnLT5jb250ZW50LmNvbmZpZy5tdHUpKQogCQkJcHJpbnRrKCIlczogY2hhbmdlX210dSB0byAlZCBmYWlsZWRcbiIsIGRldi0+bmFtZSwKIAkJCSAgICAgICBtZXNnLT5jb250ZW50LmNvbmZpZy5tdHUpOwogCQlwcml2LT5pc19wcm94eSA9IG1lc2ctPmNvbnRlbnQuY29uZmlnLmlzX3Byb3h5OwpAQCAtNjc3LDE3ICs2NjcsMTkgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbGVjX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGxlY19vcGVuLAorCS5uZG9fc3RvcAkJPSBsZWNfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IGxlY19zdGFydF94bWl0LAorCS5uZG9fY2hhbmdlX210dQkJPSBsZWNfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbGVjX3R4X3RpbWVvdXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSBsZWNfc2V0X211bHRpY2FzdF9saXN0LAorfTsKKworCiBzdGF0aWMgdm9pZCBsZWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWRldi0+Y2hhbmdlX210dSA9IGxlY19jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9IGxlY19vcGVuOwotCWRldi0+c3RvcCA9IGxlY19jbG9zZTsKLQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGxlY19zdGFydF94bWl0OwotCWRldi0+dHhfdGltZW91dCA9IGxlY190eF90aW1lb3V0OwotCi0JZGV2LT5nZXRfc3RhdHMgPSBsZWNfZ2V0X3N0YXRzOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbGVjX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlkZXYtPmRvX2lvY3RsID0gTlVMTDsKKwlkZXYtPm5ldGRldl9vcHMgPSAmbGVjX25ldGRldl9vcHM7CiAJcHJpbnRrKCIlczogSW5pdGlhbGl6ZWQhXG4iLCBkZXYtPm5hbWUpOwogfQogCkBAIC04MTAsOCArODAyLDggQEAKIAkJZWxzZQogI2VuZGlmCiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJbWVtc2V0KEFUTV9TS0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBhdG1fc2tiX2RhdGEpKTsKIAkJbmV0aWZfcngoc2tiKTsKIAl9CkBAIC0xODg3LDcgKzE4NzksNyBAQAogCQkJCQlsZWNfYXJwX2hvbGQoZW50cnkpOwogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKIAkJCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSAhPSBOVUxMKQotCQkJCQkJbGVjX3NlbmQodmNjLCBza2IsIGVudHJ5LT5wcml2KTsKKwkJCQkJCWxlY19zZW5kKHZjYywgc2tiKTsKIAkJCQkJZW50cnktPmxhc3RfdXNlZCA9IGppZmZpZXM7CiAJCQkJCWVudHJ5LT5zdGF0dXMgPSBFU0lfRk9SV0FSRF9ESVJFQ1Q7CiAJCQkJCWxlY19hcnBfcHV0KGVudHJ5KTsKQEAgLTIzMDUsNyArMjI5Nyw3IEBACiAJCQkJbGVjX2FycF9ob2xkKGVudHJ5KTsKIAkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKIAkJCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZlbnRyeS0+dHhfd2FpdCkpICE9IE5VTEwpCi0JCQkJCWxlY19zZW5kKHZjYywgc2tiLCBlbnRyeS0+cHJpdik7CisJCQkJCWxlY19zZW5kKHZjYywgc2tiKTsKIAkJCQllbnRyeS0+bGFzdF91c2VkID0gamlmZmllczsKIAkJCQllbnRyeS0+c3RhdHVzID0gRVNJX0ZPUldBUkRfRElSRUNUOwogCQkJCWxlY19hcnBfcHV0KGVudHJ5KTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vbGVjLmggYi9uZXQvYXRtL2xlYy5oCmluZGV4IDBkMzc2NjguLjlkMTRkMTkgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbGVjLmgKKysrIGIvbmV0L2F0bS9sZWMuaApAQCAtNjksNyArNjksNiBAQAogI2RlZmluZSBMRUNfQVJQX1RBQkxFX1NJWkUgMTYKIAogc3RydWN0IGxlY19wcml2IHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIAl1bnNpZ25lZCBzaG9ydCBsZWNpZDsJCQkvKiBMZWNpZCBvZiB0aGlzIGNsaWVudCAqLwogCXN0cnVjdCBobGlzdF9oZWFkIGxlY19hcnBfZW1wdHlfb25lczsKIAkJCQkJCS8qIFVzZWQgZm9yIHN0b3JpbmcgVkNDJ3MgdGhhdCBkb24ndCBoYXZlIGEgTUFDIGFkZHJlc3MgYXR0YWNoZWQgeWV0ICovCmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5jIGIvbmV0L2F0bS9tcGMuYwppbmRleCAwMzlkNWNjLi5lNWJmMTE0IDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5jCisrKyBiL25ldC9hdG0vbXBjLmMKQEAgLTI4NiwzMyArMjg2LDMyIEBACiB7CiAKIAlkcHJpbnRrKCJtcG9hOiAoJXMpIHN0YXJ0X21wYzpcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKLQlpZiAoZGV2LT5oYXJkX3N0YXJ0X3htaXQgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6ICglcykgc3RhcnRfbXBjOiBkZXYtPmhhcmRfc3RhcnRfeG1pdCA9PSBOVUxMLCBub3Qgc3RhcnRpbmdcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOwotCQlyZXR1cm47CisJaWYgKCFkZXYtPm5ldGRldl9vcHMpCisJCXByaW50aygibXBvYTogKCVzKSBzdGFydF9tcGMgIG5vdCBzdGFydGluZ1xuIiwgZGV2LT5uYW1lKTsKKwllbHNlIHsKKwkJbXBjLT5vbGRfb3BzID0gZGV2LT5uZXRkZXZfb3BzOworCQltcGMtPm5ld19vcHMgPSAqbXBjLT5vbGRfb3BzOworCQltcGMtPm5ld19vcHMubmRvX3N0YXJ0X3htaXQgPSBtcGNfc2VuZF9wYWNrZXQ7CisJCWRldi0+bmV0ZGV2X29wcyA9ICZtcGMtPm5ld19vcHM7CiAJfQotCW1wYy0+b2xkX2hhcmRfc3RhcnRfeG1pdCA9IGRldi0+aGFyZF9zdGFydF94bWl0OwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gbXBjX3NlbmRfcGFja2V0OwotCi0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBzdG9wX21wYyhzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYykKIHsKLQorCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBtcGMtPmRldjsKIAlkcHJpbnRrKCJtcG9hOiAoJXMpIHN0b3BfbXBjOiIsIG1wYy0+ZGV2LT5uYW1lKTsKIAogCS8qIExldHMgbm90IG51bGxpZnkgbGVjIGRldmljZSdzIGRldi0+aGFyZF9zdGFydF94bWl0ICovCi0JaWYgKG1wYy0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgIT0gbXBjX3NlbmRfcGFja2V0KSB7CisJaWYgKGRldi0+bmV0ZGV2X29wcyAhPSAmbXBjLT5uZXdfb3BzKSB7CiAJCWRwcmludGsoIiBtcGMgYWxyZWFkeSBzdG9wcGVkLCBub3QgZmF0YWxcbiIpOwogCQlyZXR1cm47CiAJfQogCWRwcmludGsoIlxuIik7Ci0JbXBjLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IG1wYy0+b2xkX2hhcmRfc3RhcnRfeG1pdDsKLQltcGMtPm9sZF9oYXJkX3N0YXJ0X3htaXQgPSBOVUxMOwotCS8qIGNsb3NlX3Nob3J0Y3V0cyhtcGMpOyAgICA/Pz8gRklYTUUgKi8KIAotCXJldHVybjsKKwlkZXYtPm5ldGRldl9vcHMgPSBtcGMtPm9sZF9vcHM7CisJbXBjLT5vbGRfb3BzID0gTlVMTDsKKworCS8qIGNsb3NlX3Nob3J0Y3V0cyhtcGMpOyAgICA/Pz8gRklYTUUgKi8KIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKm1wb2FfZGV2aWNlX3R5cGVfc3RyaW5nKGNoYXIgdHlwZSkgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpOwpAQCAtNTMxLDcgKzUzMCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgbXBjX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldHZhbDsKIAlzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYzsKIAlzdHJ1Y3QgZXRoaGRyICpldGg7CiAJaW50IGkgPSAwOwpAQCAtNTYxLDkgKzU1OSw3IEBACiAJfQogCiAgbm9uX2lwOgotCXJldHZhbCA9IG1wYy0+b2xkX2hhcmRfc3RhcnRfeG1pdChza2IsZGV2KTsKLQotCXJldHVybiByZXR2YWw7CisJcmV0dXJuIG1wYy0+b2xkX29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLGRldik7CiB9CiAKIHN0YXRpYyBpbnQgYXRtX21wb2FfdmNjX2F0dGFjaChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCB2b2lkIF9fdXNlciAqYXJnKQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9tcGMuaCBiL25ldC9hdG0vbXBjLmgKaW5kZXggMjRjMzg2Yy4uMDkxOWE4OCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcGMuaAorKysgYi9uZXQvYXRtL21wYy5oCkBAIC0xNSw3ICsxNSw3IEBACiAJc3RydWN0IG1wb2FfY2xpZW50ICpuZXh0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7ICAgICAgLyogbGVjIGluIHF1ZXN0aW9uICAgICAgICAgICAgICAgICAgICAgKi8KIAlpbnQgZGV2X251bTsgICAgICAgICAgICAgICAgIC8qIGUuZy4gMiBmb3IgbGVjMiAgICAgICAgICAgICAgICAgICAgICovCi0JaW50ICgqb2xkX2hhcmRfc3RhcnRfeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKIAlzdHJ1Y3QgYXRtX3ZjYyAqbXBvYWRfdmNjOyAgIC8qIGNvbnRyb2wgY2hhbm5lbCB0byBtcG9hZCAgICAgICAgICAgICovCiAJdWludDhfdCBtcHNfY3RybF9hZGRyW0FUTV9FU0FfTEVOXTsgIC8qIE1QUyBjb250cm9sIEFUTSBhZGRyZXNzICAgICAqLwogCXVpbnQ4X3Qgb3VyX2N0cmxfYWRkcltBVE1fRVNBX0xFTl07ICAvKiBNUEMncyBjb250cm9sIEFUTSBhZGRyZXNzICAgKi8KQEAgLTMxLDYgKzMxLDkgQEAKIAl1aW50OF90ICptcHNfbWFjczsgICAgICAgICAgIC8qIGFycmF5IG9mIE1QUyBNQUMgYWRkcmVzc2VzLCA+PTEgICAgICovCiAJaW50IG51bWJlcl9vZl9tcHNfbWFjczsgICAgICAvKiBudW1iZXIgb2YgdGhlIGFib3ZlIE1BQyBhZGRyZXNzZXMgICAqLwogCXN0cnVjdCBtcGNfcGFyYW1ldGVycyBwYXJhbWV0ZXJzOyAgLyogcGFyYW1ldGVycyBmb3IgdGhpcyBjbGllbnQgICAgKi8KKworCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb2xkX29wczsKKwlzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV3X29wczsKIH07CiAKIApkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYWZfYXgyNS5jIGIvbmV0L2F4MjUvYWZfYXgyNS5jCmluZGV4IDAwZDllNWUuLmZkOWQwNmYgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2FmX2F4MjUuYworKysgYi9uZXQvYXgyNS9hZl9heDI1LmMKQEAgLTE1MjksMTAgKzE1MjksOCBAQAogCQlkcCA9IGF4MjUtPmRpZ2lwZWF0OwogCX0KIAotCVNPQ0tfREVCVUcoc2ssICJBWC4yNTogc2VuZHRvOiBBZGRyZXNzZXMgYnVpbHQuXG4iKTsKLQogCS8qIEJ1aWxkIGEgcGFja2V0ICovCi0JU09DS19ERUJVRyhzaywgIkFYLjI1OiBzZW5kdG86IGJ1aWxkaW5nIHBhY2tldC5cbiIpOworCVNPQ0tfREVCVUcoc2ssICJBWC4yNTogc2VuZHRvOiBBZGRyZXNzZXMgYnVpbHQuIEJ1aWxkaW5nIHBhY2tldC5cbiIpOwogCiAJLyogQXNzdW1lIHRoZSB3b3JzdCBjYXNlICovCiAJc2l6ZSA9IGxlbiArIGF4MjUtPmF4MjVfZGV2LT5kZXYtPmhhcmRfaGVhZGVyX2xlbjsKQEAgLTE5ODUsOSArMTk4Myw4IEBACiAvKgogICoJQ2FsbGVkIGJ5IHNvY2tldC5jIG9uIGtlcm5lbCBzdGFydCB1cAogICovCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGF4MjVfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0FYMjUpLAotCS5kZXYJPQlOVUxMLAkJCQkvKiBBbGwgZGV2aWNlcyAqLworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBheDI1X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPQljcHVfdG9fYmUxNihFVEhfUF9BWDI1KSwKIAkuZnVuYwk9CWF4MjVfa2lzc19yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2lmYWNlLmMgYi9uZXQvYXgyNS9heDI1X2lmYWNlLmMKaW5kZXggODQ0M2FmNS4uNzEzMzhmMSAxMDA2NDQKLS0tIGEvbmV0L2F4MjUvYXgyNV9pZmFjZS5jCisrKyBiL25ldC9heDI1L2F4MjVfaWZhY2UuYwpAQCAtNjEsMjcgKzYxLDI0IEBACiAKIAl3cml0ZV9sb2NrX2JoKCZwcm90b2NvbF9saXN0X2xvY2spOwogCXByb3RvY29sID0gcHJvdG9jb2xfbGlzdDsKLQlpZiAocHJvdG9jb2wgPT0gTlVMTCkgewotCQl3cml0ZV91bmxvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7Ci0JCXJldHVybjsKLQl9CisJaWYgKHByb3RvY29sID09IE5VTEwpCisJCWdvdG8gb3V0OwogCiAJaWYgKHByb3RvY29sLT5waWQgPT0gcGlkKSB7CiAJCXByb3RvY29sX2xpc3QgPSBwcm90b2NvbC0+bmV4dDsKLQkJd3JpdGVfdW5sb2NrX2JoKCZwcm90b2NvbF9saXN0X2xvY2spOwotCQlyZXR1cm47CisJCWdvdG8gb3V0OwogCX0KIAogCXdoaWxlIChwcm90b2NvbCAhPSBOVUxMICYmIHByb3RvY29sLT5uZXh0ICE9IE5VTEwpIHsKIAkJaWYgKHByb3RvY29sLT5uZXh0LT5waWQgPT0gcGlkKSB7CiAJCQlzID0gcHJvdG9jb2wtPm5leHQ7CiAJCQlwcm90b2NvbC0+bmV4dCA9IHByb3RvY29sLT5uZXh0LT5uZXh0OwotCQkJd3JpdGVfdW5sb2NrX2JoKCZwcm90b2NvbF9saXN0X2xvY2spOwotCQkJcmV0dXJuOworCQkJZ290byBvdXQ7CiAJCX0KIAogCQlwcm90b2NvbCA9IHByb3RvY29sLT5uZXh0OwogCX0KK291dDoKIAl3cml0ZV91bmxvY2tfYmgoJnByb3RvY29sX2xpc3RfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCmluZGV4IDc0NGVkM2YuLjAyYjliYWEgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKKysrIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwpAQCAtNDEsMTQgKzQxLDEzIEBACiAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogCi0jZGVmaW5lIFZFUlNJT04gIjIuMTQiCisjZGVmaW5lIFZFUlNJT04gIjIuMTUiCiAKIC8qIEJsdWV0b290aCBzb2NrZXRzICovCiAjZGVmaW5lIEJUX01BWF9QUk9UTwk4CiBzdGF0aWMgc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKmJ0X3Byb3RvW0JUX01BWF9QUk9UT107CiBzdGF0aWMgREVGSU5FX1JXTE9DSyhidF9wcm90b19sb2NrKTsKIAotI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJ0X2xvY2tfa2V5W0JUX01BWF9QUk9UT107CiBzdGF0aWMgY29uc3QgY2hhciAqYnRfa2V5X3N0cmluZ3NbQlRfTUFYX1BST1RPXSA9IHsKIAkic2tfbG9jay1BRl9CTFVFVE9PVEgtQlRQUk9UT19MMkNBUCIsCkBAIC04NiwxMSArODUsNiBAQAogCQkJYnRfc2xvY2tfa2V5X3N0cmluZ3NbcHJvdG9dLCAmYnRfc2xvY2tfa2V5W3Byb3RvXSwKIAkJCQlidF9rZXlfc3RyaW5nc1twcm90b10sICZidF9sb2NrX2tleVtwcm90b10pOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBidF9zb2NrX3JlY2xhc3NpZnlfbG9jayhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG8pCi17Ci19Ci0jZW5kaWYKIAogaW50IGJ0X3NvY2tfcmVnaXN0ZXIoaW50IHByb3RvLCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqb3BzKQogewpAQCAtMjE3LDcgKzIxMSw4IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChzay0+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+a29iaik7CiAJZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIC0xKTsKIHB1dF9iYWNrOgogCWRldl9wdXQoZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCmluZGV4IGNmNzU0YWMuLjM5NTNhYzQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBmYWtlX2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS51cGRhdGVfcG10dSA9CQlmYWtlX3VwZGF0ZV9wbXR1LAogCS5lbnRyaWVzID0JCUFUT01JQ19JTklUKDApLAogfTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKaW5kZXggYmE3YmUxOS4uZmNmZmIzZiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKQEAgLTk4LDcgKzk4LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9MSU5LLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfTElOSywgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYwppbmRleCBkNDRjYmY4Li5hOTRmM2NjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBlYnRfbG9nX2xvZ2dlciA9IHsKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyIGVidF9sb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUgCQk9ICJlYnRfbG9nIiwKIAkubG9nZm4JCT0gJmVidF9sb2dfcGFja2V0LAogCS5tZQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCmluZGV4IDJjNmQ2ODIuLjEzM2VlYWUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYwpAQCAtMjc5LDIxICsyNzksMjEgQEAKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBlYnRfdWxvZ19sb2dnZXIgPSB7Ci0JLm5hbWUJCT0gInVsb2ciLAorc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgZWJ0X3Vsb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CisJLm5hbWUJCT0gImVidF91bG9nIiwKIAkubG9nZm4JCT0gJmVidF9sb2dfcGFja2V0LAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGVidF91bG9nX2luaXQodm9pZCkKIHsKLQlib29sIHJldCA9IHRydWU7CisJaW50IHJldDsKIAlpbnQgaTsKIAogCWlmIChubGJ1ZnNpeiA+PSAxMjgqMTAyNCkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgImVidF91bG9nOiBOZXRsaW5rIGJ1ZmZlciBoYXMgdG8gYmUgPD0gMTI4a0IsIgogCQkgICAgICAgIiBwbGVhc2UgdHJ5IGEgc21hbGxlciBubGJ1ZnNpeiBwYXJhbWV0ZXIuXG4iKTsKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBpbml0aWFsaXplIHVsb2dfYnVmZmVycyAqLwpAQCAtMzA4LDEyICszMDgsMTIgQEAKIAlpZiAoIWVidHVsb2dubCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIEtCVUlMRF9NT0ROQU1FICI6IG91dCBvZiBtZW1vcnkgdHJ5aW5nIHRvICIKIAkJICAgICAgICJjYWxsIG5ldGxpbmtfa2VybmVsX2NyZWF0ZVxuIik7Ci0JCXJldCA9IGZhbHNlOwotCX0gZWxzZSBpZiAoeHRfcmVnaXN0ZXJfdGFyZ2V0KCZlYnRfdWxvZ190Z19yZWcpICE9IDApIHsKKwkJcmV0ID0gLUVOT01FTTsKKwl9IGVsc2UgaWYgKChyZXQgPSB4dF9yZWdpc3Rlcl90YXJnZXQoJmVidF91bG9nX3RnX3JlZykpICE9IDApIHsKIAkJbmV0bGlua19rZXJuZWxfcmVsZWFzZShlYnR1bG9nbmwpOwogCX0KIAotCWlmIChyZXQpCisJaWYgKHJldCA9PSAwKQogCQluZl9sb2dfcmVnaXN0ZXIoTkZQUk9UT19CUklER0UsICZlYnRfdWxvZ19sb2dnZXIpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCmluZGV4IDg2MDRkZmMuLmM3NTExMTEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYwpAQCAtNDYsNyArNDYsNiBAQAogCS5uYW1lCQk9ICJicm91dGUiLAogCS50YWJsZQkJPSAmaW5pdGlhbF90YWJsZSwKIAkudmFsaWRfaG9va3MJPSAxIDw8IE5GX0JSX0JST1VUSU5HLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChicm91dGVfdGFibGUubG9jayksCiAJLmNoZWNrCQk9IGNoZWNrLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYwppbmRleCAyYjJlODA0Li5hNWVlYTcyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKQEAgLTU1LDcgKzU1LDYgQEAKIAkubmFtZQkJPSAiZmlsdGVyIiwKIAkudGFibGUJCT0gJmluaXRpYWxfdGFibGUsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChmcmFtZV9maWx0ZXIubG9jayksCiAJLmNoZWNrCQk9IGNoZWNrLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYwppbmRleCAzZmUxYWU4Li42MDI0YzU1IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKQEAgLTU1LDcgKzU1LDYgQEAKIAkubmFtZQkJPSAibmF0IiwKIAkudGFibGUJCT0gJmluaXRpYWxfdGFibGUsCiAJLnZhbGlkX2hvb2tzCT0gTkFUX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChmcmFtZV9uYXQubG9jayksCiAJLmNoZWNrCQk9IGNoZWNrLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCBmYTQxN2NhLi41NDdiYWZjIDEwMDY0NAotLS0gYS9uZXQvY2FuL2FmX2Nhbi5jCisrKyBiL25ldC9jYW4vYWZfY2FuLmMKQEAgLTI3Myw4ICsyNzMsNyBAQAogCQllcnIgPSBuZXRfeG1pdF9lcnJubyhlcnIpOwogCiAJaWYgKGVycikgewotCQlpZiAobmV3c2tiKQotCQkJa2ZyZWVfc2tiKG5ld3NrYik7CisJCWtmcmVlX3NrYihuZXdza2IpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtODI4LDcgKzgyNyw3IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBjYW5fcGFja2V0IF9fcmVhZF9tb3N0bHkgPSB7Ci0JLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0NBTiksCisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9DQU4pLAogCS5kZXYgID0gTlVMTCwKIAkuZnVuYyA9IGNhbl9yY3YsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9yYXcuYyBiL25ldC9jYW4vcmF3LmMKaW5kZXggMDcwM2NiYS4uNmFhMTU0ZSAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9yYXcuYworKysgYi9uZXQvY2FuL3Jhdy5jCkBAIC02NDgsNiArNjQ4LDkgQEAKIAllcnIgPSBtZW1jcHlfZnJvbWlvdmVjKHNrYl9wdXQoc2tiLCBzaXplKSwgbXNnLT5tc2dfaW92LCBzaXplKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmcmVlX3NrYjsKKwllcnIgPSBzb2NrX3R4X3RpbWVzdGFtcChtc2csIHNrLCBza2JfdHgoc2tiKSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZnJlZV9za2I7CiAJc2tiLT5kZXYgPSBkZXY7CiAJc2tiLT5zayAgPSBzazsKIApkaWZmIC0tZ2l0IGEvbmV0L2NvbXBhdC5jIGIvbmV0L2NvbXBhdC5jCmluZGV4IGEzYTJiYTAuLjhkNzM5MDUgMTAwNjQ0Ci0tLSBhL25ldC9jb21wYXQuYworKysgYi9uZXQvY29tcGF0LmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogaW50IHB1dF9jbXNnX2NvbXBhdChzdHJ1Y3QgbXNnaGRyICprbXNnLCBpbnQgbGV2ZWwsIGludCB0eXBlLCBpbnQgbGVuLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBjb21wYXRfdGltZXZhbCBjdHY7Ci0Jc3RydWN0IGNvbXBhdF90aW1lc3BlYyBjdHM7CisJc3RydWN0IGNvbXBhdF90aW1lc3BlYyBjdHNbM107CiAJc3RydWN0IGNvbXBhdF9jbXNnaGRyIF9fdXNlciAqY20gPSAoc3RydWN0IGNvbXBhdF9jbXNnaGRyIF9fdXNlciAqKSBrbXNnLT5tc2dfY29udHJvbDsKIAlzdHJ1Y3QgY29tcGF0X2Ntc2doZHIgY21oZHI7CiAJaW50IGNtbGVuOwpAQCAtMjMzLDEyICsyMzMsMTcgQEAKIAkJZGF0YSA9ICZjdHY7CiAJCWxlbiA9IHNpemVvZihjdHYpOwogCX0KLQlpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCAmJiB0eXBlID09IFNDTV9USU1FU1RBTVBOUykgeworCWlmIChsZXZlbCA9PSBTT0xfU09DS0VUICYmCisJICAgICh0eXBlID09IFNDTV9USU1FU1RBTVBOUyB8fCB0eXBlID09IFNDTV9USU1FU1RBTVBJTkcpKSB7CisJCWludCBjb3VudCA9IHR5cGUgPT0gU0NNX1RJTUVTVEFNUE5TID8gMSA6IDM7CisJCWludCBpOwogCQlzdHJ1Y3QgdGltZXNwZWMgKnRzID0gKHN0cnVjdCB0aW1lc3BlYyAqKWRhdGE7Ci0JCWN0cy50dl9zZWMgPSB0cy0+dHZfc2VjOwotCQljdHMudHZfbnNlYyA9IHRzLT50dl9uc2VjOworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJY3RzW2ldLnR2X3NlYyA9IHRzW2ldLnR2X3NlYzsKKwkJCWN0c1tpXS50dl9uc2VjID0gdHNbaV0udHZfbnNlYzsKKwkJfQogCQlkYXRhID0gJmN0czsKLQkJbGVuID0gc2l6ZW9mKGN0cyk7CisJCWxlbiA9IHNpemVvZihjdHNbMF0pICogY291bnQ7CiAJfQogCiAJY21sZW4gPSBDTVNHX0NPTVBBVF9MRU4obGVuKTsKQEAgLTQ1NSw3ICs0NjAsNyBAQAogCXN0cnVjdCB0aW1ldmFsIHR2OwogCiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QKSkKLQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrKTsKKwkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CiAJdHYgPSBrdGltZV90b190aW1ldmFsKHNrLT5za19zdGFtcCk7CiAJaWYgKHR2LnR2X3NlYyA9PSAtMSkKIAkJcmV0dXJuIGVycjsKQEAgLTQ3OSw3ICs0ODQsNyBAQAogCXN0cnVjdCB0aW1lc3BlYyB0czsKIAogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpCi0JCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzayk7CisJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVApOwogCXRzID0ga3RpbWVfdG9fdGltZXNwZWMoc2stPnNrX3N0YW1wKTsKIAlpZiAodHMudHZfc2VjID09IC0xKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZQppbmRleCAyNmEzN2NiLi43OTZmNDZlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQorKysgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtMTcsMyArMTcsNiBAQAogb2JqLSQoQ09ORklHX05FVFBPTEwpICs9IG5ldHBvbGwubwogb2JqLSQoQ09ORklHX05FVF9ETUEpICs9IHVzZXJfZG1hLm8KIG9iai0kKENPTkZJR19GSUJfUlVMRVMpICs9IGZpYl9ydWxlcy5vCitvYmotJChDT05GSUdfVFJBQ0VQT0lOVFMpICs9IG5ldC10cmFjZXMubworb2JqLSQoQ09ORklHX05FVF9EUk9QX01PTklUT1IpICs9IGRyb3BfbW9uaXRvci5vCisKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2RhdGFncmFtLmMgYi9uZXQvY29yZS9kYXRhZ3JhbS5jCmluZGV4IDVlMmFjMGMuLmQwZGU2NDQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2RhdGFncmFtLmMKKysrIGIvbmV0L2NvcmUvZGF0YWdyYW0uYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAKIHZvaWQgc2tiX2ZyZWVfZGF0YWdyYW0oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWtmcmVlX3NrYihza2IpOworCWNvbnN1bWVfc2tiKHNrYik7CiAJc2tfbWVtX3JlY2xhaW1fcGFydGlhbChzayk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggZjExMjk3MC4uNjNlYzRiZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTE2NjgsOCArMTY2OCw4IEBACiAJCQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEpCiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CisJaW50IHJjOwogCi0JcHJlZmV0Y2goJmRldi0+bmV0ZGV2X29wcy0+bmRvX3N0YXJ0X3htaXQpOwogCWlmIChsaWtlbHkoIXNrYi0+bmV4dCkpIHsKIAkJaWYgKCFsaXN0X2VtcHR5KCZwdHlwZV9hbGwpKQogCQkJZGV2X3F1ZXVlX3htaXRfbml0KHNrYiwgZGV2KTsKQEAgLTE2ODEsMTMgKzE2ODEsMjcgQEAKIAkJCQlnb3RvIGdzbzsKIAkJfQogCi0JCXJldHVybiBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKKwkJcmMgPSBvcHMtPm5kb19zdGFydF94bWl0KHNrYiwgZGV2KTsKKwkJLyoKKwkJICogVE9ETzogaWYgc2tiX29ycGhhbigpIHdhcyBjYWxsZWQgYnkKKwkJICogZGV2LT5oYXJkX3N0YXJ0X3htaXQoKSAoZm9yIGV4YW1wbGUsIHRoZSB1bm1vZGlmaWVkCisJCSAqIGlnYiBkcml2ZXIgZG9lcyB0aGF0OyBibngyIGRvZXNuJ3QpLCB0aGVuCisJCSAqIHNrYl90eF9zb2Z0d2FyZV90aW1lc3RhbXAoKSB3aWxsIGJlIHVuYWJsZSB0byBzZW5kCisJCSAqIGJhY2sgdGhlIHRpbWUgc3RhbXAuCisJCSAqCisJCSAqIEhvdyBjYW4gdGhpcyBiZSBwcmV2ZW50ZWQ/IEFsd2F5cyBjcmVhdGUgYW5vdGhlcgorCQkgKiByZWZlcmVuY2UgdG8gdGhlIHNvY2tldCBiZWZvcmUgY2FsbGluZworCQkgKiBkZXYtPmhhcmRfc3RhcnRfeG1pdCgpPyBQcmV2ZW50IHRoYXQgc2tiX29ycGhhbigpCisJCSAqIGRvZXMgYW55dGhpbmcgaW4gZGV2LT5oYXJkX3N0YXJ0X3htaXQoKSBieSBjbGVhcmluZworCQkgKiB0aGUgc2tiIGRlc3RydWN0b3IgYmVmb3JlIHRoZSBjYWxsIGFuZCByZXN0b3JpbmcgaXQKKwkJICogYWZ0ZXJ3YXJkcywgdGhlbiBkb2luZyB0aGUgc2tiX29ycGhhbigpIG91cnNlbHZlcz8KKwkJICovCisJCXJldHVybiByYzsKIAl9CiAKIGdzbzoKIAlkbyB7CiAJCXN0cnVjdCBza19idWZmICpuc2tiID0gc2tiLT5uZXh0OwotCQlpbnQgcmM7CiAKIAkJc2tiLT5uZXh0ID0gbnNrYi0+bmV4dDsKIAkJbnNrYi0+bmV4dCA9IE5VTEw7CkBAIC0xNzA4LDU5ICsxNzIyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgc2ltcGxlX3R4X2hhc2hybmQ7Ci1zdGF0aWMgaW50IHNpbXBsZV90eF9oYXNocm5kX2luaXRpYWxpemVkID0gMDsKK3N0YXRpYyB1MzIgc2tiX3R4X2hhc2hybmQ7CiAKLXN0YXRpYyB1MTYgc2ltcGxlX3R4X2hhc2goc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3UxNiBza2JfdHhfaGFzaChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXUzMiBhZGRyMSwgYWRkcjIsIHBvcnRzOwotCXUzMiBoYXNoLCBpaGw7Ci0JdTggaXBfcHJvdG8gPSAwOworCXUzMiBoYXNoOwogCi0JaWYgKHVubGlrZWx5KCFzaW1wbGVfdHhfaGFzaHJuZF9pbml0aWFsaXplZCkpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmc2ltcGxlX3R4X2hhc2hybmQsIDQpOwotCQlzaW1wbGVfdHhfaGFzaHJuZF9pbml0aWFsaXplZCA9IDE7Ci0JfQorCWlmIChza2JfcnhfcXVldWVfcmVjb3JkZWQoc2tiKSkgeworCQloYXNoID0gc2tiX2dldF9yeF9xdWV1ZShza2IpOworCX0gZWxzZSBpZiAoc2tiLT5zayAmJiBza2ItPnNrLT5za19oYXNoKSB7CisJCWhhc2ggPSBza2ItPnNrLT5za19oYXNoOworCX0gZWxzZQorCQloYXNoID0gc2tiLT5wcm90b2NvbDsKIAotCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgewotCWNhc2UgaHRvbnMoRVRIX1BfSVApOgotCQlpZiAoIShpcF9oZHIoc2tiKS0+ZnJhZ19vZmYgJiBodG9ucyhJUF9NRiB8IElQX09GRlNFVCkpKQotCQkJaXBfcHJvdG8gPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7Ci0JCWFkZHIxID0gaXBfaGRyKHNrYiktPnNhZGRyOwotCQlhZGRyMiA9IGlwX2hkcihza2IpLT5kYWRkcjsKLQkJaWhsID0gaXBfaGRyKHNrYiktPmlobDsKLQkJYnJlYWs7Ci0JY2FzZSBodG9ucyhFVEhfUF9JUFY2KToKLQkJaXBfcHJvdG8gPSBpcHY2X2hkcihza2IpLT5uZXh0aGRyOwotCQlhZGRyMSA9IGlwdjZfaGRyKHNrYiktPnNhZGRyLnM2X2FkZHIzMlszXTsKLQkJYWRkcjIgPSBpcHY2X2hkcihza2IpLT5kYWRkci5zNl9hZGRyMzJbM107Ci0JCWlobCA9ICg0MCA+PiAyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0KLQlzd2l0Y2ggKGlwX3Byb3RvKSB7Ci0JY2FzZSBJUFBST1RPX1RDUDoKLQljYXNlIElQUFJPVE9fVURQOgotCWNhc2UgSVBQUk9UT19EQ0NQOgotCWNhc2UgSVBQUk9UT19FU1A6Ci0JY2FzZSBJUFBST1RPX0FIOgotCWNhc2UgSVBQUk9UT19TQ1RQOgotCWNhc2UgSVBQUk9UT19VRFBMSVRFOgotCQlwb3J0cyA9ICooKHUzMiAqKSAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyAoaWhsICogNCkpKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlwb3J0cyA9IDA7Ci0JCWJyZWFrOwotCX0KLQotCWhhc2ggPSBqaGFzaF8zd29yZHMoYWRkcjEsIGFkZHIyLCBwb3J0cywgc2ltcGxlX3R4X2hhc2hybmQpOworCWhhc2ggPSBqaGFzaF8xd29yZChoYXNoLCBza2JfdHhfaGFzaHJuZCk7CiAKIAlyZXR1cm4gKHUxNikgKCgodTY0KSBoYXNoICogZGV2LT5yZWFsX251bV90eF9xdWV1ZXMpID4+IDMyKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3R4X2hhc2gpOwogCiBzdGF0aWMgc3RydWN0IG5ldGRldl9xdWV1ZSAqZGV2X3BpY2tfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTE3NzEsNyArMTc1MCw3IEBACiAJaWYgKG9wcy0+bmRvX3NlbGVjdF9xdWV1ZSkKIAkJcXVldWVfaW5kZXggPSBvcHMtPm5kb19zZWxlY3RfcXVldWUoZGV2LCBza2IpOwogCWVsc2UgaWYgKGRldi0+cmVhbF9udW1fdHhfcXVldWVzID4gMSkKLQkJcXVldWVfaW5kZXggPSBzaW1wbGVfdHhfaGFzaChkZXYsIHNrYik7CisJCXF1ZXVlX2luZGV4ID0gc2tiX3R4X2hhc2goZGV2LCBza2IpOwogCiAJc2tiX3NldF9xdWV1ZV9tYXBwaW5nKHNrYiwgcXVldWVfaW5kZXgpOwogCXJldHVybiBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgcXVldWVfaW5kZXgpOwpAQCAtMjI5Nyw2ICsyMjc2LDggQEAKIAlpZiAoIXNrYikKIAkJZ290byBvdXQ7CiAKKwlza2Jfb3JwaGFuKHNrYik7CisKIAl0eXBlID0gc2tiLT5wcm90b2NvbDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwKIAkJCSZwdHlwZV9iYXNlW250b2hzKHR5cGUpICYgUFRZUEVfSEFTSF9NQVNLXSwgbGlzdCkgewpAQCAtMjM2Niw3ICsyMzQ3LDYgQEAKIAogb3V0OgogCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSAwOwotCV9fc2tiX3B1c2goc2tiLCAtc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikpOwogCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwogfQogCkBAIC0yMzgwLDIwICsyMzYwLDQwIEBACiAJCW5hcGlfZ3JvX2NvbXBsZXRlKHNrYik7CiAJfQogCisJbmFwaS0+Z3JvX2NvdW50ID0gMDsKIAluYXBpLT5ncm9fbGlzdCA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZ3JvX2ZsdXNoKTsKIAordm9pZCAqc2tiX2dyb19oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhsZW4pCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IHNrYl9ncm9fb2Zmc2V0KHNrYik7CisKKwlobGVuICs9IG9mZnNldDsKKwlpZiAoaGxlbiA8PSBza2JfaGVhZGxlbihza2IpKQorCQlyZXR1cm4gc2tiLT5kYXRhICsgb2Zmc2V0OworCisJaWYgKHVubGlrZWx5KCFza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIHx8CisJCSAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5zaXplIDw9CisJCSAgICAgaGxlbiAtIHNrYl9oZWFkbGVuKHNrYikgfHwKKwkJICAgICBQYWdlSGlnaE1lbShza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UpKSkKKwkJcmV0dXJuIHBza2JfbWF5X3B1bGwoc2tiLCBobGVuKSA/IHNrYi0+ZGF0YSArIG9mZnNldCA6IE5VTEw7CisKKwlyZXR1cm4gcGFnZV9hZGRyZXNzKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZSkgKworCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2Vfb2Zmc2V0ICsKKwkgICAgICAgb2Zmc2V0IC0gc2tiX2hlYWRsZW4oc2tiKTsKK30KK0VYUE9SVF9TWU1CT0woc2tiX2dyb19oZWFkZXIpOworCiBpbnQgZGV2X2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnBwID0gTlVMTDsKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlOwogCV9fYmUxNiB0eXBlID0gc2tiLT5wcm90b2NvbDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJnB0eXBlX2Jhc2VbbnRvaHModHlwZSkgJiBQVFlQRV9IQVNIX01BU0tdOwotCWludCBjb3VudCA9IDA7CiAJaW50IHNhbWVfZmxvdzsKIAlpbnQgbWFjX2xlbjsKLQlpbnQgZnJlZTsKKwlpbnQgcmV0OwogCiAJaWYgKCEoc2tiLT5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9HUk8pKQogCQlnb3RvIG5vcm1hbDsKQEAgLTI0MDMsMzAgKzI0MDMsMTYgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwgaGVhZCwgbGlzdCkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqcDsKLQogCQlpZiAocHR5cGUtPnR5cGUgIT0gdHlwZSB8fCBwdHlwZS0+ZGV2IHx8ICFwdHlwZS0+Z3JvX3JlY2VpdmUpCiAJCQljb250aW51ZTsKIAotCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKKwkJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOwogCQltYWNfbGVuID0gc2tiLT5uZXR3b3JrX2hlYWRlciAtIHNrYi0+bWFjX2hlYWRlcjsKIAkJc2tiLT5tYWNfbGVuID0gbWFjX2xlbjsKIAkJTkFQSV9HUk9fQ0Ioc2tiKS0+c2FtZV9mbG93ID0gMDsKIAkJTkFQSV9HUk9fQ0Ioc2tiKS0+Zmx1c2ggPSAwOwogCQlOQVBJX0dST19DQihza2IpLT5mcmVlID0gMDsKIAotCQlmb3IgKHAgPSBuYXBpLT5ncm9fbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKLQkJCWNvdW50Kys7Ci0KLQkJCWlmICghTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdykKLQkJCQljb250aW51ZTsKLQotCQkJaWYgKHAtPm1hY19sZW4gIT0gbWFjX2xlbiB8fAotCQkJICAgIG1lbWNtcChza2JfbWFjX2hlYWRlcihwKSwgc2tiX21hY19oZWFkZXIoc2tiKSwKLQkJCQkgICBtYWNfbGVuKSkKLQkJCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gMDsKLQkJfQotCiAJCXBwID0gcHR5cGUtPmdyb19yZWNlaXZlKCZuYXBpLT5ncm9fbGlzdCwgc2tiKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjQzNiw3ICsyNDIyLDcgQEAKIAkJZ290byBub3JtYWw7CiAKIAlzYW1lX2Zsb3cgPSBOQVBJX0dST19DQihza2IpLT5zYW1lX2Zsb3c7Ci0JZnJlZSA9IE5BUElfR1JPX0NCKHNrYiktPmZyZWU7CisJcmV0ID0gTkFQSV9HUk9fQ0Ioc2tiKS0+ZnJlZSA/IEdST19NRVJHRURfRlJFRSA6IEdST19NRVJHRUQ7CiAKIAlpZiAocHApIHsKIAkJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSAqcHA7CkBAIC0yNDQ0LDI3ICsyNDMwLDM1IEBACiAJCSpwcCA9IG5za2ItPm5leHQ7CiAJCW5za2ItPm5leHQgPSBOVUxMOwogCQluYXBpX2dyb19jb21wbGV0ZShuc2tiKTsKLQkJY291bnQtLTsKKwkJbmFwaS0+Z3JvX2NvdW50LS07CiAJfQogCiAJaWYgKHNhbWVfZmxvdykKIAkJZ290byBvazsKIAotCWlmIChOQVBJX0dST19DQihza2IpLT5mbHVzaCB8fCBjb3VudCA+PSBNQVhfR1JPX1NLQlMpIHsKLQkJX19za2JfcHVzaChza2IsIC1za2JfbmV0d29ya19vZmZzZXQoc2tiKSk7CisJaWYgKE5BUElfR1JPX0NCKHNrYiktPmZsdXNoIHx8IG5hcGktPmdyb19jb3VudCA+PSBNQVhfR1JPX1NLQlMpCiAJCWdvdG8gbm9ybWFsOwotCX0KIAorCW5hcGktPmdyb19jb3VudCsrOwogCU5BUElfR1JPX0NCKHNrYiktPmNvdW50ID0gMTsKLQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gc2tiLT5sZW47CisJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IHNrYl9ncm9fbGVuKHNrYik7CiAJc2tiLT5uZXh0ID0gbmFwaS0+Z3JvX2xpc3Q7CiAJbmFwaS0+Z3JvX2xpc3QgPSBza2I7CisJcmV0ID0gR1JPX0hFTEQ7CisKK3B1bGw6CisJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSkpKSB7CisJCWlmIChuYXBpLT5ncm9fbGlzdCA9PSBza2IpCisJCQluYXBpLT5ncm9fbGlzdCA9IHNrYi0+bmV4dDsKKwkJcmV0ID0gR1JPX0RST1A7CisJfQogCiBvazoKLQlyZXR1cm4gZnJlZTsKKwlyZXR1cm4gcmV0OwogCiBub3JtYWw6Ci0JcmV0dXJuIC0xOworCXJldCA9IEdST19OT1JNQUw7CisJZ290byBwdWxsOwogfQogRVhQT1JUX1NZTUJPTChkZXZfZ3JvX3JlY2VpdmUpOwogCkBAIC0yNDcyLDI5ICsyNDY2LDQ0IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnA7CiAKKwlpZiAobmV0cG9sbF9yeF9vbihza2IpKQorCQlyZXR1cm4gR1JPX05PUk1BTDsKKwogCWZvciAocCA9IG5hcGktPmdyb19saXN0OyBwOyBwID0gcC0+bmV4dCkgewotCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gMTsKKwkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9ICFjb21wYXJlX2V0aGVyX2hlYWRlcigKKwkJCXNrYl9tYWNfaGVhZGVyKHApLCBza2JfZ3JvX21hY19oZWFkZXIoc2tiKSk7CiAJCU5BUElfR1JPX0NCKHApLT5mbHVzaCA9IDA7CiAJfQogCiAJcmV0dXJuIGRldl9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOwogfQogCi1pbnQgbmFwaV9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBza19idWZmICpza2IpCitpbnQgbmFwaV9za2JfZmluaXNoKGludCByZXQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKG5ldHBvbGxfcmVjZWl2ZV9za2Ioc2tiKSkKLQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCWludCBlcnIgPSBORVRfUlhfU1VDQ0VTUzsKIAotCXN3aXRjaCAoX19uYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYikpIHsKLQljYXNlIC0xOgorCXN3aXRjaCAocmV0KSB7CisJY2FzZSBHUk9fTk9STUFMOgogCQlyZXR1cm4gbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAotCWNhc2UgMToKKwljYXNlIEdST19EUk9QOgorCQllcnIgPSBORVRfUlhfRFJPUDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIEdST19NRVJHRURfRlJFRToKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWJyZWFrOwogCX0KIAotCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChuYXBpX3NrYl9maW5pc2gpOworCitpbnQgbmFwaV9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiX2dyb19yZXNldF9vZmZzZXQoc2tiKTsKKworCXJldHVybiBuYXBpX3NrYl9maW5pc2goX19uYXBpX2dyb19yZWNlaXZlKG5hcGksIHNrYiksIHNrYik7CiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZ3JvX3JlY2VpdmUpOwogCkBAIC0yNTEyLDYgKzI1MjEsOSBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuYXBpLT5kZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5hcGktPnNrYjsKKwlzdHJ1Y3QgZXRoaGRyICpldGg7CisJc2tiX2ZyYWdfdCAqZnJhZzsKKwlpbnQgaTsKIAogCW5hcGktPnNrYiA9IE5VTEw7CiAKQEAgLTI1MjQsMjAgKzI1MzYsMzYgQEAKIAl9CiAKIAlCVUdfT04oaW5mby0+bnJfZnJhZ3MgPiBNQVhfU0tCX0ZSQUdTKTsKKwlmcmFnID0gJmluZm8tPmZyYWdzW2luZm8tPm5yX2ZyYWdzIC0gMV07CisKKwlmb3IgKGkgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpIDwgaW5mby0+bnJfZnJhZ3M7IGkrKykgeworCQlza2JfZmlsbF9wYWdlX2Rlc2Moc2tiLCBpLCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKKwkJCQkgICBmcmFnLT5zaXplKTsKKwkJZnJhZysrOworCX0KIAlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID0gaW5mby0+bnJfZnJhZ3M7Ci0JbWVtY3B5KHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3MsIGluZm8tPmZyYWdzLCBzaXplb2YoaW5mby0+ZnJhZ3MpKTsKIAogCXNrYi0+ZGF0YV9sZW4gPSBpbmZvLT5sZW47CiAJc2tiLT5sZW4gKz0gaW5mby0+bGVuOwogCXNrYi0+dHJ1ZXNpemUgKz0gaW5mby0+bGVuOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgRVRIX0hMRU4pKSB7CisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwlza2JfZ3JvX3Jlc2V0X29mZnNldChza2IpOworCisJZXRoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKmV0aCkpOworCWlmICghZXRoKSB7CiAJCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7CiAJCXNrYiA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KIAotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJc2tiX2dyb19wdWxsKHNrYiwgc2l6ZW9mKCpldGgpKTsKKworCS8qCisJICogVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBvbmx5IHByb3RvY29scyB3ZSBjYXJlIGFib3V0IGRvbid0IHJlcXVpcmUKKwkgKiBzcGVjaWFsIGhhbmRsaW5nLiAgV2UnbGwgZml4IGl0IHVwIHByb3Blcmx5IGF0IHRoZSBlbmQuCisJICovCisJc2tiLT5wcm90b2NvbCA9IGV0aC0+aF9wcm90bzsKIAogCXNrYi0+aXBfc3VtbWVkID0gaW5mby0+aXBfc3VtbWVkOwogCXNrYi0+Y3N1bSA9IGluZm8tPmNzdW07CkBAIC0yNTQ3LDMxICsyNTc1LDQyIEBACiB9CiBFWFBPUlRfU1lNQk9MKG5hcGlfZnJhZ2luZm9fc2tiKTsKIAoraW50IG5hcGlfZnJhZ3NfZmluaXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJldCkKK3sKKwlpbnQgZXJyID0gTkVUX1JYX1NVQ0NFU1M7CisKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgR1JPX05PUk1BTDoKKwljYXNlIEdST19IRUxEOgorCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuYXBpLT5kZXYpOworCisJCWlmIChyZXQgPT0gR1JPX05PUk1BTCkKKwkJCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJCXNrYl9ncm9fcHVsbChza2IsIC1FVEhfSExFTik7CisJCWJyZWFrOworCisJY2FzZSBHUk9fRFJPUDoKKwkJZXJyID0gTkVUX1JYX0RST1A7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCisJY2FzZSBHUk9fTUVSR0VEX0ZSRUU6CisJCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7CisJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKG5hcGlfZnJhZ3NfZmluaXNoKTsKKwogaW50IG5hcGlfZ3JvX2ZyYWdzKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IG5hcGlfZ3JvX2ZyYWdpbmZvICppbmZvKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBuYXBpX2ZyYWdpbmZvX3NrYihuYXBpLCBpbmZvKTsKLQlpbnQgZXJyID0gTkVUX1JYX0RST1A7CiAKIAlpZiAoIXNrYikKLQkJZ290byBvdXQ7CisJCXJldHVybiBORVRfUlhfRFJPUDsKIAotCWlmIChuZXRwb2xsX3JlY2VpdmVfc2tiKHNrYikpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gTkVUX1JYX1NVQ0NFU1M7Ci0KLQlzd2l0Y2ggKF9fbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpKSB7Ci0JY2FzZSAtMToKLQkJcmV0dXJuIG5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Ci0KLQljYXNlIDA6Ci0JCWdvdG8gb3V0OwotCX0KLQotCW5hcGlfcmV1c2Vfc2tiKG5hcGksIHNrYik7Ci0KLW91dDoKLQlyZXR1cm4gZXJyOworCXJldHVybiBuYXBpX2ZyYWdzX2ZpbmlzaChuYXBpLCBza2IsIF9fbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpKTsKIH0KIEVYUE9SVF9TWU1CT0wobmFwaV9ncm9fZnJhZ3MpOwogCkBAIC0yNTk0LDExICsyNjMzLDkgQEAKIAkJfQogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQkJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOworCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0gd2hpbGUgKCsrd29yayA8IHF1b3RhICYmIGppZmZpZXMgPT0gc3RhcnRfdGltZSk7CiAKLQluYXBpX2dyb19mbHVzaChuYXBpKTsKLQogCXJldHVybiB3b3JrOwogfQogCkBAIC0yNjUyLDYgKzI2ODksNyBAQAogCQkgICAgaW50ICgqcG9sbCkoc3RydWN0IG5hcGlfc3RydWN0ICosIGludCksIGludCB3ZWlnaHQpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJm5hcGktPnBvbGxfbGlzdCk7CisJbmFwaS0+Z3JvX2NvdW50ID0gMDsKIAluYXBpLT5ncm9fbGlzdCA9IE5VTEw7CiAJbmFwaS0+c2tiID0gTlVMTDsKIAluYXBpLT5wb2xsID0gcG9sbDsKQEAgLTI2NzEsNyArMjcwOSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5leHQ7CiAKIAlsaXN0X2RlbF9pbml0KCZuYXBpLT5kZXZfbGlzdCk7Ci0Ja2ZyZWUobmFwaS0+c2tiKTsKKwlrZnJlZV9za2IobmFwaS0+c2tiKTsKIAogCWZvciAoc2tiID0gbmFwaS0+Z3JvX2xpc3Q7IHNrYjsgc2tiID0gbmV4dCkgewogCQluZXh0ID0gc2tiLT5uZXh0OwpAQCAtMjY4MCw2ICsyNzE4LDcgQEAKIAl9CiAKIAluYXBpLT5ncm9fbGlzdCA9IE5VTEw7CisJbmFwaS0+Z3JvX2NvdW50ID0gMDsKIH0KIEVYUE9SVF9TWU1CT0wobmV0aWZfbmFwaV9kZWwpOwogCkBAIC0zOTQ4LDYgKzM5ODcsNyBAQAogCQkJICAgIGNtZCA9PSBTSU9DU01JSVJFRyB8fAogCQkJICAgIGNtZCA9PSBTSU9DQlJBRERJRiB8fAogCQkJICAgIGNtZCA9PSBTSU9DQlJERUxJRiB8fAorCQkJICAgIGNtZCA9PSBTSU9DU0hXVFNUQU1QIHx8CiAJCQkgICAgY21kID09IFNJT0NXQU5ERVYpIHsKIAkJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJCQlpZiAob3BzLT5uZG9fZG9faW9jdGwpIHsKQEAgLTQxMDIsNiArNDE0Miw3IEBACiAJCWNhc2UgU0lPQ0JPTkRDSEFOR0VBQ1RJVkU6CiAJCWNhc2UgU0lPQ0JSQURESUY6CiAJCWNhc2UgU0lPQ0JSREVMSUY6CisJCWNhc2UgU0lPQ1NIV1RTVEFNUDoKIAkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCQlyZXR1cm4gLUVQRVJNOwogCQkJLyogZmFsbCB0aHJvdWdoICovCkBAIC01MTk4LDYgKzUyMzksNyBAQAogCQlxdWV1ZS0+YmFja2xvZy5wb2xsID0gcHJvY2Vzc19iYWNrbG9nOwogCQlxdWV1ZS0+YmFja2xvZy53ZWlnaHQgPSB3ZWlnaHRfcDsKIAkJcXVldWUtPmJhY2tsb2cuZ3JvX2xpc3QgPSBOVUxMOworCQlxdWV1ZS0+YmFja2xvZy5ncm9fY291bnQgPSAwOwogCX0KIAogCWRldl9ib290X3BoYXNlID0gMDsKQEAgLTUyMzAsNiArNTI3MiwxNCBAQAogCiBzdWJzeXNfaW5pdGNhbGwobmV0X2Rldl9pbml0KTsKIAorc3RhdGljIGludCBfX2luaXQgaW5pdGlhbGl6ZV9oYXNocm5kKHZvaWQpCit7CisJZ2V0X3JhbmRvbV9ieXRlcygmc2tiX3R4X2hhc2hybmQsIHNpemVvZihza2JfdHhfaGFzaHJuZCkpOworCXJldHVybiAwOworfQorCitsYXRlX2luaXRjYWxsX3N5bmMoaW5pdGlhbGl6ZV9oYXNocm5kKTsKKwogRVhQT1JUX1NZTUJPTChfX2Rldl9nZXRfYnlfaW5kZXgpOwogRVhQT1JUX1NZTUJPTChfX2Rldl9nZXRfYnlfbmFtZSk7CiBFWFBPUlRfU1lNQk9MKF9fZGV2X3JlbW92ZV9wYWNrKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jIGIvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkMGRjMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogTW9uaXRvcmluZyBjb2RlIGZvciBuZXR3b3JrIGRyb3BwZWQgcGFja2V0IGFsZXJ0cworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZWlsIEhvcm1hbiA8bmhvcm1hbkB0dXhkcml2ZXIuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+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+bmRtX3N0YXRlLCBmbGFncyk7CiAJCW5laWdoX3JlbGVhc2UobmVpZ2gpOwogCQlnb3RvIG91dF9kZXZfcHV0OwogCX0KQEAgLTI1MzQsNyArMjUzNiw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTkVJR0gsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05FSUdILCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfTkVJR0gsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXQtc3lzZnMuYyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCmluZGV4IDQ4NGY1ODcuLjJkYTU5YTAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25ldC1zeXNmcy5jCisrKyBiL25ldC9jb3JlL25ldC1zeXNmcy5jCkBAIC00OTgsNyArNDk4LDcgQEAKIAlkZXYtPmdyb3VwcyA9IGdyb3VwczsKIAogCUJVSUxEX0JVR19PTihCVVNfSURfU0laRSA8IElGTkFNU0laKTsKLQlkZXZfc2V0X25hbWUoZGV2LCBuZXQtPm5hbWUpOworCWRldl9zZXRfbmFtZShkZXYsICIlcyIsIG5ldC0+bmFtZSk7CiAKICNpZmRlZiBDT05GSUdfU1lTRlMKIAkqZ3JvdXBzKysgPSAmbmV0c3RhdF9ncm91cDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC10cmFjZXMuYyBiL25ldC9jb3JlL25ldC10cmFjZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZiNDU2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2NvcmUvbmV0LXRyYWNlcy5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBjb25zb2xpZGF0ZXMgdHJhY2UgcG9pbnQgZGVmaW5pdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmVpbCBIb3JtYW4gPG5ob3JtYW5AdHV4ZHJpdmVyLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldHBvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfZHJvcG1vbi5oPgorI2luY2x1ZGUgPHRyYWNlL3NrYi5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKworCitERUZJTkVfVFJBQ0Uoa2ZyZWVfc2tiKTsKK0VYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoa2ZyZWVfc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggNjU0OTg0OC4uMzJkNDE5ZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTMyNzUsOCArMzI3NSw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBrdF9kZXYsICZ0LT5pZl9saXN0LCBsaXN0KSB7CiAJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKLQkJaWYgKHBrdF9kZXYtPnNrYikKLQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKIAogCQlwa3RfZGV2LT5za2IgPSBOVUxMOwogCX0KQEAgLTMzMDMsOCArMzMwMiw3IEBACiAJCWlmICghY3VyLT5yZW1vdmFsX21hcmspCiAJCQljb250aW51ZTsKIAotCQlpZiAoY3VyLT5za2IpCi0JCQlrZnJlZV9za2IoY3VyLT5za2IpOworCQlrZnJlZV9za2IoY3VyLT5za2IpOwogCQljdXItPnNrYiA9IE5VTEw7CiAKIAkJcGt0Z2VuX3JlbW92ZV9kZXZpY2UodCwgY3VyKTsKQEAgLTMzMjgsOCArMzMyNiw3IEBACiAJbGlzdF9mb3JfZWFjaF9zYWZlKHEsIG4sICZ0LT5pZl9saXN0KSB7CiAJCWN1ciA9IGxpc3RfZW50cnkocSwgc3RydWN0IHBrdGdlbl9kZXYsIGxpc3QpOwogCi0JCWlmIChjdXItPnNrYikKLQkJCWtmcmVlX3NrYihjdXItPnNrYik7CisJCWtmcmVlX3NrYihjdXItPnNrYik7CiAJCWN1ci0+c2tiID0gTlVMTDsKIAogCQlwa3RnZW5fcmVtb3ZlX2RldmljZSh0LCBjdXIpOwpAQCAtMzM5Myw4ICszMzkwLDcgQEAKIAogCQlpZiAoIW5ldGlmX3J1bm5pbmcob2RldikpIHsKIAkJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKLQkJCWlmIChwa3RfZGV2LT5za2IpCi0JCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CisJCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKIAkJCXBrdF9kZXYtPnNrYiA9IE5VTEw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMzQxNSw4ICszNDExLDcgQEAKIAkJaWYgKCgrK3BrdF9kZXYtPmNsb25lX2NvdW50ID49IHBrdF9kZXYtPmNsb25lX3NrYikKIAkJICAgIHx8ICghcGt0X2Rldi0+c2tiKSkgewogCQkJLyogYnVpbGQgYSBuZXcgcGt0ICovCi0JCQlpZiAocGt0X2Rldi0+c2tiKQotCQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQkJa2ZyZWVfc2tiKHBrdF9kZXYtPnNrYik7CiAKIAkJCXBrdF9kZXYtPnNrYiA9IGZpbGxfcGFja2V0KG9kZXYsIHBrdF9kZXYpOwogCQkJaWYgKHBrdF9kZXYtPnNrYiA9PSBOVUxMKSB7CkBAIC0zNDk4LDggKzM0OTMsNyBAQAogCiAJCS8qIERvbmUgd2l0aCB0aGlzICovCiAJCXBrdGdlbl9zdG9wX2RldmljZShwa3RfZGV2KTsKLQkJaWYgKHBrdF9kZXYtPnNrYikKLQkJCWtmcmVlX3NrYihwa3RfZGV2LT5za2IpOworCQlrZnJlZV9za2IocGt0X2Rldi0+c2tiKTsKIAkJcGt0X2Rldi0+c2tiID0gTlVMTDsKIAl9CiBvdXQ6OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA3OTBkZDIwLi5kNzgwMzBmIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtNDU1LDggKzQ1NSw4IEBACiAJcmV0dXJuIG5sbXNnX3VuaWNhc3QocnRubCwgc2tiLCBwaWQpOwogfQogCi1pbnQgcnRubF9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsCi0JCXN0cnVjdCBubG1zZ2hkciAqbmxoLCBnZnBfdCBmbGFncykKK3ZvaWQgcnRubF9ub3RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsCisJCSBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnJ0bmwgPSBuZXQtPnJ0bmw7CiAJaW50IHJlcG9ydCA9IDA7CkBAIC00NjQsNyArNDY0LDcgQEAKIAlpZiAobmxoKQogCQlyZXBvcnQgPSBubG1zZ19yZXBvcnQobmxoKTsKIAotCXJldHVybiBubG1zZ19ub3RpZnkocnRubCwgc2tiLCBwaWQsIGdyb3VwLCByZXBvcnQsIGZsYWdzKTsKKwlubG1zZ19ub3RpZnkocnRubCwgc2tiLCBwaWQsIGdyb3VwLCByZXBvcnQsIGZsYWdzKTsKIH0KIAogdm9pZCBydG5sX3NldF9za19lcnIoc3RydWN0IG5ldCAqbmV0LCB1MzIgZ3JvdXAsIGludCBlcnJvcikKQEAgLTEyNDYsNyArMTI0Niw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTElOSywgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfTElOSywgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0xJTkssIGVycik7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9za2J1ZmYuYyBiL25ldC9jb3JlL3NrYnVmZi5jCmluZGV4IGM2YTZiMTYuLjZhY2JmOWUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NrYnVmZi5jCisrKyBiL25ldC9jb3JlL3NrYnVmZi5jCkBAIC01NSw2ICs1NSw3IEBACiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJycXVldWUuaD4KIAogI2luY2x1ZGUgPG5ldC9wcm90b2NvbC5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KQEAgLTY0LDYgKzY1LDcgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPHRyYWNlL3NrYi5oPgogCiAjaW5jbHVkZSAia21hcF9za2IuaCIKIApAQCAtMTIzLDYgKzEyNSw3IEBACiAJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiPE5VTEw+Iik7CiAJQlVHKCk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9vdmVyX3BhbmljKTsKIAogLyoqCiAgKglza2JfdW5kZXJfcGFuaWMJLSAJcHJpdmF0ZSBmdW5jdGlvbgpAQCAtMTQyLDYgKzE0NSw3IEBACiAJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiPE5VTEw+Iik7CiAJQlVHKCk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl91bmRlcl9wYW5pYyk7CiAKIC8qIAlBbGxvY2F0ZSBhIG5ldyBza2J1ZmYuIFdlIGRvIHRoaXMgb3Vyc2VsdmVzIHNvIHdlIGNhbiBmaWxsIGluIGEgZmV3CiAgKgkncHJpdmF0ZScgZmllbGRzIGFuZCBhbHNvIGRvIG1lbW9yeSBzdGF0aXN0aWNzIHRvIGZpbmQgYWxsIHRoZQpAQCAtMjA1LDcgKzIwOSw5IEBACiAJc2hpbmZvLT5nc29fc2VncyA9IDA7CiAJc2hpbmZvLT5nc29fdHlwZSA9IDA7CiAJc2hpbmZvLT5pcDZfZnJhZ19pZCA9IDA7CisJc2hpbmZvLT50eF9mbGFncy5mbGFncyA9IDA7CiAJc2hpbmZvLT5mcmFnX2xpc3QgPSBOVUxMOworCW1lbXNldCgmc2hpbmZvLT5od3RzdGFtcHMsIDAsIHNpemVvZihzaGluZm8tPmh3dHN0YW1wcykpOwogCiAJaWYgKGZjbG9uZSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqY2hpbGQgPSBza2IgKyAxOwpAQCAtMjIzLDYgKzIyOSw3IEBACiAJc2tiID0gTlVMTDsKIAlnb3RvIG91dDsKIH0KK0VYUE9SVF9TWU1CT0woX19hbGxvY19za2IpOwogCiAvKioKICAqCV9fbmV0ZGV2X2FsbG9jX3NrYiAtIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3Igcnggb24gYSBzcGVjaWZpYyBkZXZpY2UKQEAgLTI1MCw2ICsyNTcsNyBAQAogCX0KIAlyZXR1cm4gc2tiOwogfQorRVhQT1JUX1NZTUJPTChfX25ldGRldl9hbGxvY19za2IpOwogCiBzdHJ1Y3QgcGFnZSAqX19uZXRkZXZfYWxsb2NfcGFnZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBnZnBfdCBnZnBfbWFzaykKIHsKQEAgLTQxOCw2ICs0MjYsNyBAQAogCXNrYl9yZWxlYXNlX2FsbChza2IpOwogCWtmcmVlX3NrYm1lbShza2IpOwogfQorRVhQT1JUX1NZTUJPTChfX2tmcmVlX3NrYik7CiAKIC8qKgogICoJa2ZyZWVfc2tiIC0gZnJlZSBhbiBza19idWZmCkBAIC00MzQsOCArNDQzLDMwIEBACiAJCXNtcF9ybWIoKTsKIAllbHNlIGlmIChsaWtlbHkoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnNrYi0+dXNlcnMpKSkKIAkJcmV0dXJuOworCXRyYWNlX2tmcmVlX3NrYihza2IsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJX19rZnJlZV9za2Ioc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woa2ZyZWVfc2tiKTsKKworLyoqCisgKgljb25zdW1lX3NrYiAtIGZyZWUgYW4gc2tidWZmCisgKglAc2tiOiBidWZmZXIgdG8gZnJlZQorICoKKyAqCURyb3AgYSByZWYgdG8gdGhlIGJ1ZmZlciBhbmQgZnJlZSBpdCBpZiB0aGUgdXNhZ2UgY291bnQgaGFzIGhpdCB6ZXJvCisgKglGdW5jdGlvbnMgaWRlbnRpY2FsbHkgdG8ga2ZyZWVfc2tiLCBidXQga2ZyZWVfc2tiIGFzc3VtZXMgdGhhdCB0aGUgZnJhbWUKKyAqCWlzIGJlaW5nIGRyb3BwZWQgYWZ0ZXIgYSBmYWlsdXJlIGFuZCBub3RlcyB0aGF0CisgKi8KK3ZvaWQgY29uc3VtZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybjsKKwlpZiAobGlrZWx5KGF0b21pY19yZWFkKCZza2ItPnVzZXJzKSA9PSAxKSkKKwkJc21wX3JtYigpOworCWVsc2UgaWYgKGxpa2VseSghYXRvbWljX2RlY19hbmRfdGVzdCgmc2tiLT51c2VycykpKQorCQlyZXR1cm47CisJX19rZnJlZV9za2Ioc2tiKTsKK30KK0VYUE9SVF9TWU1CT0woY29uc3VtZV9za2IpOwogCiAvKioKICAqCXNrYl9yZWN5Y2xlX2NoZWNrIC0gY2hlY2sgaWYgc2tiIGNhbiBiZSByZXVzZWQgZm9yIHJlY2VpdmUKQEAgLTYwNSw2ICs2MzYsNyBAQAogCiAJcmV0dXJuIF9fc2tiX2Nsb25lKG4sIHNrYik7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jbG9uZSk7CiAKIHN0YXRpYyB2b2lkIGNvcHlfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKQogewpAQCAtNjcxLDcgKzcwMyw3IEBACiAJY29weV9za2JfaGVhZGVyKG4sIHNrYik7CiAJcmV0dXJuIG47CiB9Ci0KK0VYUE9SVF9TWU1CT0woc2tiX2NvcHkpOwogCiAvKioKICAqCXBza2JfY29weQktCWNyZWF0ZSBjb3B5IG9mIGFuIHNrX2J1ZmYgd2l0aCBwcml2YXRlIGhlYWQuCkBAIC03MzAsNiArNzYyLDcgQEAKIG91dDoKIAlyZXR1cm4gbjsKIH0KK0VYUE9SVF9TWU1CT0wocHNrYl9jb3B5KTsKIAogLyoqCiAgKglwc2tiX2V4cGFuZF9oZWFkIC0gcmVhbGxvY2F0ZSBoZWFkZXIgb2YgJnNrX2J1ZmYKQEAgLTgxMyw2ICs4NDYsNyBAQAogbm9kYXRhOgogCXJldHVybiAtRU5PTUVNOwogfQorRVhQT1JUX1NZTUJPTChwc2tiX2V4cGFuZF9oZWFkKTsKIAogLyogTWFrZSBwcml2YXRlIGNvcHkgb2Ygc2tiIHdpdGggd3JpdGFibGUgaGVhZCBhbmQgc29tZSBoZWFkcm9vbSAqLwogCkBAIC04MzMsNyArODY3LDcgQEAKIAl9CiAJcmV0dXJuIHNrYjI7CiB9Ci0KK0VYUE9SVF9TWU1CT0woc2tiX3JlYWxsb2NfaGVhZHJvb20pOwogCiAvKioKICAqCXNrYl9jb3B5X2V4cGFuZAktCWNvcHkgYW5kIGV4cGFuZCBza19idWZmCkBAIC04OTgsNiArOTMyLDcgQEAKIAogCXJldHVybiBuOwogfQorRVhQT1JUX1NZTUJPTChza2JfY29weV9leHBhbmQpOwogCiAvKioKICAqCXNrYl9wYWQJCQktCXplcm8gcGFkIHRoZSB0YWlsIG9mIGFuIHNrYgpAQCAtOTQzLDYgKzk3OCw3IEBACiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIGVycjsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3BhZCk7CiAKIC8qKgogICoJc2tiX3B1dCAtIGFkZCBkYXRhIHRvIGEgYnVmZmVyCkBAIC0xMTAwLDYgKzExMzYsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKF9fX3Bza2JfdHJpbSk7CiAKIC8qKgogICoJX19wc2tiX3B1bGxfdGFpbCAtIGFkdmFuY2UgdGFpbCBvZiBza2IgaGVhZGVyCkBAIC0xMTkzLDggKzEyMzAsNyBAQAogCQkJCQlpbnNwID0gbGlzdDsKIAkJCQl9CiAJCQkJaWYgKCFwc2tiX3B1bGwobGlzdCwgZWF0KSkgewotCQkJCQlpZiAoY2xvbmUpCi0JCQkJCQlrZnJlZV9za2IoY2xvbmUpOworCQkJCQlrZnJlZV9za2IoY2xvbmUpOwogCQkJCQlyZXR1cm4gTlVMTDsKIAkJCQl9CiAJCQkJYnJlYWs7CkBAIC0xMjM4LDYgKzEyNzQsNyBAQAogCiAJcmV0dXJuIHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woX19wc2tiX3B1bGxfdGFpbCk7CiAKIC8qIENvcHkgc29tZSBkYXRhIGJpdHMgZnJvbSBza2IgdG8ga2VybmVsIGJ1ZmZlci4gKi8KIApAQCAtMTMxNSw2ICsxMzUyLDcgQEAKIGZhdWx0OgogCXJldHVybiAtRUZBVUxUOwogfQorRVhQT1JUX1NZTUJPTChza2JfY29weV9iaXRzKTsKIAogLyoKICAqIENhbGxiYWNrIGZyb20gc3BsaWNlX3RvX3BpcGUoKSwgaWYgd2UgbmVlZCB0byByZWxlYXNlIHNvbWUgcGFnZXMKQEAgLTEzMjUsMTQgKzEzNjMsMzkgQEAKIAlwdXRfcGFnZShzcGQtPnBhZ2VzW2ldKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqbGluZWFyX3RvX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBsZW4sCi0JCQkJCSAgdW5zaWduZWQgaW50IG9mZnNldCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmxpbmVhcl90b19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgKmxlbiwKKwkJCQkJICB1bnNpZ25lZCBpbnQgKm9mZnNldCwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7CisJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKKwlzdHJ1Y3QgcGFnZSAqcCA9IHNrLT5za19zbmRtc2dfcGFnZTsKKwl1bnNpZ25lZCBpbnQgb2ZmOwogCi0JaWYgKCFwKQotCQlyZXR1cm4gTlVMTDsKLQltZW1jcHkocGFnZV9hZGRyZXNzKHApICsgb2Zmc2V0LCBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQsIGxlbik7CisJaWYgKCFwKSB7CituZXdfcGFnZToKKwkJcCA9IHNrLT5za19zbmRtc2dfcGFnZSA9IGFsbG9jX3BhZ2VzKHNrLT5za19hbGxvY2F0aW9uLCAwKTsKKwkJaWYgKCFwKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJb2ZmID0gc2stPnNrX3NuZG1zZ19vZmYgPSAwOworCQkvKiBob2xkIG9uZSByZWYgdG8gdGhpcyBwYWdlIHVudGlsIGl0J3MgZnVsbCAqLworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGludCBtbGVuOworCisJCW9mZiA9IHNrLT5za19zbmRtc2dfb2ZmOworCQltbGVuID0gUEFHRV9TSVpFIC0gb2ZmOworCQlpZiAobWxlbiA8IDY0ICYmIG1sZW4gPCAqbGVuKSB7CisJCQlwdXRfcGFnZShwKTsKKwkJCWdvdG8gbmV3X3BhZ2U7CisJCX0KKworCQkqbGVuID0gbWluX3QodW5zaWduZWQgaW50LCAqbGVuLCBtbGVuKTsKKwl9CisKKwltZW1jcHkocGFnZV9hZGRyZXNzKHApICsgb2ZmLCBwYWdlX2FkZHJlc3MocGFnZSkgKyAqb2Zmc2V0LCAqbGVuKTsKKwlzay0+c2tfc25kbXNnX29mZiArPSAqbGVuOworCSpvZmZzZXQgPSBvZmY7CisJZ2V0X3BhZ2UocCk7CiAKIAlyZXR1cm4gcDsKIH0KQEAgLTEzNDEsMjEgKzE0MDQsMjEgQEAKICAqIEZpbGwgcGFnZS9vZmZzZXQvbGVuZ3RoIGludG8gc3BkLCBpZiBpdCBjYW4gaG9sZCBtb3JlIHBhZ2VzLgogICovCiBzdGF0aWMgaW5saW5lIGludCBzcGRfZmlsbF9wYWdlKHN0cnVjdCBzcGxpY2VfcGlwZV9kZXNjICpzcGQsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCXVuc2lnbmVkIGludCBsZW4sIHVuc2lnbmVkIGludCBvZmZzZXQsCisJCQkJdW5zaWduZWQgaW50ICpsZW4sIHVuc2lnbmVkIGludCBvZmZzZXQsCiAJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxpbmVhcikKIHsKIAlpZiAodW5saWtlbHkoc3BkLT5ucl9wYWdlcyA9PSBQSVBFX0JVRkZFUlMpKQogCQlyZXR1cm4gMTsKIAogCWlmIChsaW5lYXIpIHsKLQkJcGFnZSA9IGxpbmVhcl90b19wYWdlKHBhZ2UsIGxlbiwgb2Zmc2V0KTsKKwkJcGFnZSA9IGxpbmVhcl90b19wYWdlKHBhZ2UsIGxlbiwgJm9mZnNldCwgc2tiKTsKIAkJaWYgKCFwYWdlKQogCQkJcmV0dXJuIDE7CiAJfSBlbHNlCiAJCWdldF9wYWdlKHBhZ2UpOwogCiAJc3BkLT5wYWdlc1tzcGQtPm5yX3BhZ2VzXSA9IHBhZ2U7Ci0Jc3BkLT5wYXJ0aWFsW3NwZC0+bnJfcGFnZXNdLmxlbiA9IGxlbjsKKwlzcGQtPnBhcnRpYWxbc3BkLT5ucl9wYWdlc10ubGVuID0gKmxlbjsKIAlzcGQtPnBhcnRpYWxbc3BkLT5ucl9wYWdlc10ub2Zmc2V0ID0gb2Zmc2V0OwogCXNwZC0+bnJfcGFnZXMrKzsKIApAQCAtMTM2NSw4ICsxNDI4LDEzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19zZWdtZW50X3NlZWsoc3RydWN0IHBhZ2UgKipwYWdlLCB1bnNpZ25lZCBpbnQgKnBvZmYsCiAJCQkJICB1bnNpZ25lZCBpbnQgKnBsZW4sIHVuc2lnbmVkIGludCBvZmYpCiB7CisJdW5zaWduZWQgbG9uZyBuOworCiAJKnBvZmYgKz0gb2ZmOwotCSpwYWdlICs9ICpwb2ZmIC8gUEFHRV9TSVpFOworCW4gPSAqcG9mZiAvIFBBR0VfU0laRTsKKwlpZiAobikKKwkJKnBhZ2UgPSBudGhfcGFnZSgqcGFnZSwgbik7CisKIAkqcG9mZiA9ICpwb2ZmICUgUEFHRV9TSVpFOwogCSpwbGVuIC09IG9mZjsKIH0KQEAgLTEzOTcsNyArMTQ2NSw3IEBACiAJCS8qIHRoZSBsaW5lYXIgcmVnaW9uIG1heSBzcHJlYWQgYWNyb3NzIHNldmVyYWwgcGFnZXMgICovCiAJCWZsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGZsZW4sIFBBR0VfU0laRSAtIHBvZmYpOwogCi0JCWlmIChzcGRfZmlsbF9wYWdlKHNwZCwgcGFnZSwgZmxlbiwgcG9mZiwgc2tiLCBsaW5lYXIpKQorCQlpZiAoc3BkX2ZpbGxfcGFnZShzcGQsIHBhZ2UsICZmbGVuLCBwb2ZmLCBza2IsIGxpbmVhcikpCiAJCQlyZXR1cm4gMTsKIAogCQlfX3NlZ21lbnRfc2VlaygmcGFnZSwgJnBvZmYsICZwbGVuLCBmbGVuKTsKQEAgLTE1OTAsNyArMTY1OCw2IEBACiBmYXVsdDoKIAlyZXR1cm4gLUVGQVVMVDsKIH0KLQogRVhQT1JUX1NZTUJPTChza2Jfc3RvcmVfYml0cyk7CiAKIC8qIENoZWNrc3VtIHNrYiBkYXRhLiAqLwpAQCAtMTY2Nyw2ICsxNzM0LDcgQEAKIAogCXJldHVybiBjc3VtOwogfQorRVhQT1JUX1NZTUJPTChza2JfY2hlY2tzdW0pOwogCiAvKiBCb3RoIG9mIGFib3ZlIGluIG9uZSBib3R0bGUuICovCiAKQEAgLTE3NDgsNiArMTgxNiw3IEBACiAJQlVHX09OKGxlbik7CiAJcmV0dXJuIGNzdW07CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2FuZF9jc3VtX2JpdHMpOwogCiB2b2lkIHNrYl9jb3B5X2FuZF9jc3VtX2Rldihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqdG8pCiB7CkBAIC0xNzc0LDYgKzE4NDMsNyBAQAogCQkqKChfX3N1bTE2ICopKHRvICsgY3NzdHVmZikpID0gY3N1bV9mb2xkKGNzdW0pOwogCX0KIH0KK0VYUE9SVF9TWU1CT0woc2tiX2NvcHlfYW5kX2NzdW1fZGV2KTsKIAogLyoqCiAgKglza2JfZGVxdWV1ZSAtIHJlbW92ZSBmcm9tIHRoZSBoZWFkIG9mIHRoZSBxdWV1ZQpAQCAtMTc5NCw2ICsxODY0LDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2RlcXVldWUpOwogCiAvKioKICAqCXNrYl9kZXF1ZXVlX3RhaWwgLSByZW1vdmUgZnJvbSB0aGUgdGFpbCBvZiB0aGUgcXVldWUKQEAgLTE4MTMsNiArMTg4NCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXN1bHQ7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9kZXF1ZXVlX3RhaWwpOwogCiAvKioKICAqCXNrYl9xdWV1ZV9wdXJnZSAtIGVtcHR5IGEgbGlzdApAQCAtMTgyOCw2ICsxOTAwLDcgQEAKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKGxpc3QpKSAhPSBOVUxMKQogCQlrZnJlZV9za2Ioc2tiKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3F1ZXVlX3B1cmdlKTsKIAogLyoqCiAgKglza2JfcXVldWVfaGVhZCAtIHF1ZXVlIGEgYnVmZmVyIGF0IHRoZSBsaXN0IGhlYWQKQEAgLTE4NDgsNiArMTkyMSw3IEBACiAJX19za2JfcXVldWVfaGVhZChsaXN0LCBuZXdzayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChza2JfcXVldWVfaGVhZCk7CiAKIC8qKgogICoJc2tiX3F1ZXVlX3RhaWwgLSBxdWV1ZSBhIGJ1ZmZlciBhdCB0aGUgbGlzdCB0YWlsCkBAIC0xODY4LDYgKzE5NDIsNyBAQAogCV9fc2tiX3F1ZXVlX3RhaWwobGlzdCwgbmV3c2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3F1ZXVlX3RhaWwpOwogCiAvKioKICAqCXNrYl91bmxpbmsJLQlyZW1vdmUgYSBidWZmZXIgZnJvbSBhIGxpc3QKQEAgLTE4ODcsNiArMTk2Miw3IEBACiAJX19za2JfdW5saW5rKHNrYiwgbGlzdCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdC0+bG9jaywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTChza2JfdW5saW5rKTsKIAogLyoqCiAgKglza2JfYXBwZW5kCS0JYXBwZW5kIGEgYnVmZmVyCkBAIC0xOTA2LDcgKzE5ODIsNyBAQAogCV9fc2tiX3F1ZXVlX2FmdGVyKGxpc3QsIG9sZCwgbmV3c2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIH0KLQorRVhQT1JUX1NZTUJPTChza2JfYXBwZW5kKTsKIAogLyoqCiAgKglza2JfaW5zZXJ0CS0JaW5zZXJ0IGEgYnVmZmVyCkBAIC0xOTI4LDYgKzIwMDQsNyBAQAogCV9fc2tiX2luc2VydChuZXdzaywgb2xkLT5wcmV2LCBvbGQsIGxpc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX2luc2VydCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBza2Jfc3BsaXRfaW5zaWRlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiogc2tiMSwKQEAgLTIwMDYsNiArMjA4Myw3IEBACiAJZWxzZQkJLyogU2Vjb25kIGNodW5rIGhhcyBubyBoZWFkZXIsIG5vdGhpbmcgdG8gY29weS4gKi8KIAkJc2tiX3NwbGl0X25vX2hlYWRlcihza2IsIHNrYjEsIGxlbiwgcG9zKTsKIH0KK0VYUE9SVF9TWU1CT0woc2tiX3NwbGl0KTsKIAogLyogU2hpZnRpbmcgZnJvbS90byBhIGNsb25lZCBza2IgaXMgYSBuby1nby4KICAqCkBAIC0yMTY4LDYgKzIyNDYsNyBAQAogCXN0LT5mcmFnX2lkeCA9IHN0LT5zdGVwcGVkX29mZnNldCA9IDA7CiAJc3QtPmZyYWdfZGF0YSA9IE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9wcmVwYXJlX3NlcV9yZWFkKTsKIAogLyoqCiAgKiBza2Jfc2VxX3JlYWQgLSBTZXF1ZW50aWFsbHkgcmVhZCBza2IgZGF0YQpAQCAtMjI1NSw2ICsyMzM0LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChza2Jfc2VxX3JlYWQpOwogCiAvKioKICAqIHNrYl9hYm9ydF9zZXFfcmVhZCAtIEFib3J0IGEgc2VxdWVudGlhbCByZWFkIG9mIHNrYiBkYXRhCkBAIC0yMjY4LDYgKzIzNDgsNyBAQAogCWlmIChzdC0+ZnJhZ19kYXRhKQogCQlrdW5tYXBfc2tiX2ZyYWcoc3QtPmZyYWdfZGF0YSk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9hYm9ydF9zZXFfcmVhZCk7CiAKICNkZWZpbmUgVFNfU0tCX0NCKHN0YXRlKQkoKHN0cnVjdCBza2Jfc2VxX3N0YXRlICopICYoKHN0YXRlKS0+Y2IpKQogCkBAIC0yMzEwLDYgKzIzOTEsNyBAQAogCXJldCA9IHRleHRzZWFyY2hfZmluZChjb25maWcsIHN0YXRlKTsKIAlyZXR1cm4gKHJldCA8PSB0byAtIGZyb20gPyByZXQgOiBVSU5UX01BWCk7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9maW5kX3RleHQpOwogCiAvKioKICAqIHNrYl9hcHBlbmRfZGF0YXRvX2ZyYWdzOiAtIGFwcGVuZCB0aGUgdXNlciBkYXRhIHRvIGEgc2tiCkBAIC0yMzgyLDYgKzI0NjQsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNrYl9hcHBlbmRfZGF0YXRvX2ZyYWdzKTsKIAogLyoqCiAgKglza2JfcHVsbF9yY3N1bSAtIHB1bGwgc2tiIGFuZCB1cGRhdGUgcmVjZWl2ZSBjaGVja3N1bQpAQCAtMjU2OSw3ICsyNjUyLDYgQEAKIAl9CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3NlZ21lbnQpOwogCiBpbnQgc2tiX2dyb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTI1NzcsMTcgKzI2NTksMjMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqcCA9ICpoZWFkOwogCXN0cnVjdCBza19idWZmICpuc2tiOwogCXVuc2lnbmVkIGludCBoZWFkcm9vbTsKLQl1bnNpZ25lZCBpbnQgaGxlbiA9IHAtPmRhdGEgLSBza2JfbWFjX2hlYWRlcihwKTsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9ncm9fbGVuKHNrYik7CiAKLQlpZiAoaGxlbiArIHAtPmxlbiArIGxlbiA+PSA2NTUzNikKKwlpZiAocC0+bGVuICsgbGVuID49IDY1NTM2KQogCQlyZXR1cm4gLUUyQklHOwogCiAJaWYgKHNrYl9zaGluZm8ocCktPmZyYWdfbGlzdCkKIAkJZ290byBtZXJnZTsKLQllbHNlIGlmICghc2tiX2hlYWRsZW4ocCkgJiYgIXNrYl9oZWFkbGVuKHNrYikgJiYKLQkJIHNrYl9zaGluZm8ocCktPm5yX2ZyYWdzICsgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA8Ci0JCSBNQVhfU0tCX0ZSQUdTKSB7CisJZWxzZSBpZiAoc2tiX2hlYWRsZW4oc2tiKSA8PSBza2JfZ3JvX29mZnNldChza2IpKSB7CisJCWlmIChza2Jfc2hpbmZvKHApLT5ucl9mcmFncyArIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPgorCQkgICAgTUFYX1NLQl9GUkFHUykKKwkJCXJldHVybiAtRTJCSUc7CisKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCArPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSAtPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisKIAkJbWVtY3B5KHNrYl9zaGluZm8ocCktPmZyYWdzICsgc2tiX3NoaW5mbyhwKS0+bnJfZnJhZ3MsCiAJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzLAogCQkgICAgICAgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAqIHNpemVvZihza2JfZnJhZ190KSk7CkBAIC0yNjA0LDcgKzI2OTIsNyBAQAogCX0KIAogCWhlYWRyb29tID0gc2tiX2hlYWRyb29tKHApOwotCW5za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHAtPmRldiwgaGVhZHJvb20pOworCW5za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHAtPmRldiwgaGVhZHJvb20gKyBza2JfZ3JvX29mZnNldChwKSk7CiAJaWYgKHVubGlrZWx5KCFuc2tiKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTI2MTIsMTIgKzI3MDAsMTUgQEAKIAluc2tiLT5tYWNfbGVuID0gcC0+bWFjX2xlbjsKIAogCXNrYl9yZXNlcnZlKG5za2IsIGhlYWRyb29tKTsKKwlfX3NrYl9wdXQobnNrYiwgc2tiX2dyb19vZmZzZXQocCkpOwogCi0Jc2tiX3NldF9tYWNfaGVhZGVyKG5za2IsIC1obGVuKTsKKwlza2Jfc2V0X21hY19oZWFkZXIobnNrYiwgc2tiX21hY19oZWFkZXIocCkgLSBwLT5kYXRhKTsKIAlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKG5za2IsIHNrYl9uZXR3b3JrX29mZnNldChwKSk7CiAJc2tiX3NldF90cmFuc3BvcnRfaGVhZGVyKG5za2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHApKTsKIAotCW1lbWNweShza2JfbWFjX2hlYWRlcihuc2tiKSwgc2tiX21hY19oZWFkZXIocCksIGhsZW4pOworCV9fc2tiX3B1bGwocCwgc2tiX2dyb19vZmZzZXQocCkpOworCW1lbWNweShza2JfbWFjX2hlYWRlcihuc2tiKSwgc2tiX21hY19oZWFkZXIocCksCisJICAgICAgIHAtPmRhdGEgLSBza2JfbWFjX2hlYWRlcihwKSk7CiAKIAkqTkFQSV9HUk9fQ0IobnNrYikgPSAqTkFQSV9HUk9fQ0IocCk7CiAJc2tiX3NoaW5mbyhuc2tiKS0+ZnJhZ19saXN0ID0gcDsKQEAgLTI2MzYsNiArMjcyNywxNyBAQAogCXAgPSBuc2tiOwogCiBtZXJnZToKKwlpZiAoc2tiX2dyb19vZmZzZXQoc2tiKSA+IHNrYl9oZWFkbGVuKHNrYikpIHsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCArPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSAtPQorCQkJc2tiX2dyb19vZmZzZXQoc2tiKSAtIHNrYl9oZWFkbGVuKHNrYik7CisJCXNrYl9ncm9fcmVzZXRfb2Zmc2V0KHNrYik7CisJCXNrYl9ncm9fcHVsbChza2IsIHNrYl9oZWFkbGVuKHNrYikpOworCX0KKworCV9fc2tiX3B1bGwoc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKKwogCXAtPnByZXYtPm5leHQgPSBza2I7CiAJcC0+cHJldiA9IHNrYjsKIAlza2JfaGVhZGVyX3JlbGVhc2Uoc2tiKTsKQEAgLTI3NDcsNiArMjg0OSw3IEBACiAKIAlyZXR1cm4gbnNnOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3RvX3NndmVjKTsKIAogLyoqCiAgKglza2JfY293X2RhdGEgLSBDaGVjayB0aGF0IGEgc29ja2V0IGJ1ZmZlcidzIGRhdGEgYnVmZmVycyBhcmUgd3JpdGFibGUKQEAgLTI4NTYsNiArMjk1OSw0NSBAQAogCiAJcmV0dXJuIGVsdDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNrYl9jb3dfZGF0YSk7CisKK3ZvaWQgc2tiX3RzdGFtcF90eChzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsCisJCXN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHd0c3RhbXBzKQoreworCXN0cnVjdCBzb2NrICpzayA9IG9yaWdfc2tiLT5zazsKKwlzdHJ1Y3Qgc29ja19leHRlcnJfc2tiICpzZXJyOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGVycjsKKworCWlmICghc2spCisJCXJldHVybjsKKworCXNrYiA9IHNrYl9jbG9uZShvcmlnX3NrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpCisJCXJldHVybjsKKworCWlmIChod3RzdGFtcHMpIHsKKwkJKnNrYl9od3RzdGFtcHMoc2tiKSA9CisJCQkqaHd0c3RhbXBzOworCX0gZWxzZSB7CisJCS8qCisJCSAqIG5vIGhhcmR3YXJlIHRpbWUgc3RhbXBzIGF2YWlsYWJsZSwKKwkJICogc28ga2VlcCB0aGUgc2tiX3NoYXJlZF90eCBhbmQgb25seQorCQkgKiBzdG9yZSBzb2Z0d2FyZSB0aW1lIHN0YW1wCisJCSAqLworCQlza2ItPnRzdGFtcCA9IGt0aW1lX2dldF9yZWFsKCk7CisJfQorCisJc2VyciA9IFNLQl9FWFRfRVJSKHNrYik7CisJbWVtc2V0KHNlcnIsIDAsIHNpemVvZigqc2VycikpOworCXNlcnItPmVlLmVlX2Vycm5vID0gRU5PTVNHOworCXNlcnItPmVlLmVlX29yaWdpbiA9IFNPX0VFX09SSUdJTl9USU1FU1RBTVBJTkc7CisJZXJyID0gc29ja19xdWV1ZV9lcnJfc2tiKHNrLCBza2IpOworCWlmIChlcnIpCisJCWtmcmVlX3NrYihza2IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3RzdGFtcF90eCk7CisKIAogLyoqCiAgKiBza2JfcGFydGlhbF9jc3VtX3NldCAtIHNldCB1cCBhbmQgdmVyaWZ5IHBhcnRpYWwgY3N1bSB2YWx1ZXMgZm9yIHBhY2tldApAQCAtMjg4NCw2ICszMDI2LDcgQEAKIAlza2ItPmNzdW1fb2Zmc2V0ID0gb2ZmOwogCXJldHVybiB0cnVlOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc2tiX3BhcnRpYWxfY3N1bV9zZXQpOwogCiB2b2lkIF9fc2tiX3dhcm5fbHJvX2ZvcndhcmRpbmcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTI4OTEsNDIgKzMwMzQsNCBAQAogCQlwcl93YXJuaW5nKCIlczogcmVjZWl2ZWQgcGFja2V0cyBjYW5ub3QgYmUgZm9yd2FyZGVkIgogCQkJICAgIiB3aGlsZSBMUk8gaXMgZW5hYmxlZFxuIiwgc2tiLT5kZXYtPm5hbWUpOwogfQotCi1FWFBPUlRfU1lNQk9MKF9fX3Bza2JfdHJpbSk7Ci1FWFBPUlRfU1lNQk9MKF9fa2ZyZWVfc2tiKTsKLUVYUE9SVF9TWU1CT0woa2ZyZWVfc2tiKTsKLUVYUE9SVF9TWU1CT0woX19wc2tiX3B1bGxfdGFpbCk7Ci1FWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTsKLUVYUE9SVF9TWU1CT0woX19uZXRkZXZfYWxsb2Nfc2tiKTsKLUVYUE9SVF9TWU1CT0wocHNrYl9jb3B5KTsKLUVYUE9SVF9TWU1CT0wocHNrYl9leHBhbmRfaGVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jaGVja3N1bSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jbG9uZSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5KTsKLUVYUE9SVF9TWU1CT0woc2tiX2NvcHlfYW5kX2NzdW1fYml0cyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2FuZF9jc3VtX2Rldik7Ci1FWFBPUlRfU1lNQk9MKHNrYl9jb3B5X2JpdHMpOwotRVhQT1JUX1NZTUJPTChza2JfY29weV9leHBhbmQpOwotRVhQT1JUX1NZTUJPTChza2Jfb3Zlcl9wYW5pYyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9wYWQpOwotRVhQT1JUX1NZTUJPTChza2JfcmVhbGxvY19oZWFkcm9vbSk7Ci1FWFBPUlRfU1lNQk9MKHNrYl91bmRlcl9wYW5pYyk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9kZXF1ZXVlKTsKLUVYUE9SVF9TWU1CT0woc2tiX2RlcXVldWVfdGFpbCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9pbnNlcnQpOwotRVhQT1JUX1NZTUJPTChza2JfcXVldWVfcHVyZ2UpOwotRVhQT1JUX1NZTUJPTChza2JfcXVldWVfaGVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9xdWV1ZV90YWlsKTsKLUVYUE9SVF9TWU1CT0woc2tiX3VubGluayk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9hcHBlbmQpOwotRVhQT1JUX1NZTUJPTChza2Jfc3BsaXQpOwotRVhQT1JUX1NZTUJPTChza2JfcHJlcGFyZV9zZXFfcmVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9zZXFfcmVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9hYm9ydF9zZXFfcmVhZCk7Ci1FWFBPUlRfU1lNQk9MKHNrYl9maW5kX3RleHQpOwotRVhQT1JUX1NZTUJPTChza2JfYXBwZW5kX2RhdGF0b19mcmFncyk7CiBFWFBPUlRfU1lNQk9MKF9fc2tiX3dhcm5fbHJvX2ZvcndhcmRpbmcpOwotCi1FWFBPUlRfU1lNQk9MX0dQTChza2JfdG9fc2d2ZWMpOwotRVhQT1JUX1NZTUJPTF9HUEwoc2tiX2Nvd19kYXRhKTsKLUVYUE9SVF9TWU1CT0xfR1BMKHNrYl9wYXJ0aWFsX2NzdW1fc2V0KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NvY2suYyBiL25ldC9jb3JlL3NvY2suYwppbmRleCA1Zjk3Y2FhLi4wNjIwMDQ2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9zb2NrLmMKKysrIGIvbmV0L2NvcmUvc29jay5jCkBAIC0xMjAsNiArMTIwLDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9yZXF1ZXN0X3NvY2suaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogI2luY2x1ZGUgPGxpbnV4L2lwc2VjLmg+CiAKQEAgLTE0OSw3ICsxNTAsNyBAQAogICAic2tfbG9jay1BRl9ERUNuZXQiLCAic2tfbG9jay1BRl9ORVRCRVVJIiAgLCAic2tfbG9jay1BRl9TRUNVUklUWSIgLAogICAic2tfbG9jay1BRl9LRVkiICAgLCAic2tfbG9jay1BRl9ORVRMSU5LIiAgLCAic2tfbG9jay1BRl9QQUNLRVQiICAgLAogICAic2tfbG9jay1BRl9BU0giICAgLCAic2tfbG9jay1BRl9FQ09ORVQiICAgLCAic2tfbG9jay1BRl9BVE1TVkMiICAgLAotICAic2tfbG9jay0yMSIgICAgICAgLCAic2tfbG9jay1BRl9TTkEiICAgICAgLCAic2tfbG9jay1BRl9JUkRBIiAgICAgLAorICAic2tfbG9jay1BRl9SRFMiICAgLCAic2tfbG9jay1BRl9TTkEiICAgICAgLCAic2tfbG9jay1BRl9JUkRBIiAgICAgLAogICAic2tfbG9jay1BRl9QUFBPWCIgLCAic2tfbG9jay1BRl9XQU5QSVBFIiAgLCAic2tfbG9jay1BRl9MTEMiICAgICAgLAogICAic2tfbG9jay0yNyIgICAgICAgLCAic2tfbG9jay0yOCIgICAgICAgICAgLCAic2tfbG9jay1BRl9DQU4iICAgICAgLAogICAic2tfbG9jay1BRl9USVBDIiAgLCAic2tfbG9jay1BRl9CTFVFVE9PVEgiLCAic2tfbG9jay1JVUNWIiAgICAgICAgLApAQCAtMTY0LDcgKzE2NSw3IEBACiAgICJzbG9jay1BRl9ERUNuZXQiLCAic2xvY2stQUZfTkVUQkVVSSIgICwgInNsb2NrLUFGX1NFQ1VSSVRZIiAsCiAgICJzbG9jay1BRl9LRVkiICAgLCAic2xvY2stQUZfTkVUTElOSyIgICwgInNsb2NrLUFGX1BBQ0tFVCIgICAsCiAgICJzbG9jay1BRl9BU0giICAgLCAic2xvY2stQUZfRUNPTkVUIiAgICwgInNsb2NrLUFGX0FUTVNWQyIgICAsCi0gICJzbG9jay0yMSIgICAgICAgLCAic2xvY2stQUZfU05BIiAgICAgICwgInNsb2NrLUFGX0lSREEiICAgICAsCisgICJzbG9jay1BRl9SRFMiICAgLCAic2xvY2stQUZfU05BIiAgICAgICwgInNsb2NrLUFGX0lSREEiICAgICAsCiAgICJzbG9jay1BRl9QUFBPWCIgLCAic2xvY2stQUZfV0FOUElQRSIgICwgInNsb2NrLUFGX0xMQyIgICAgICAsCiAgICJzbG9jay0yNyIgICAgICAgLCAic2xvY2stMjgiICAgICAgICAgICwgInNsb2NrLUFGX0NBTiIgICAgICAsCiAgICJzbG9jay1BRl9USVBDIiAgLCAic2xvY2stQUZfQkxVRVRPT1RIIiwgInNsb2NrLUFGX0lVQ1YiICAgICAsCkBAIC0xNzksNyArMTgwLDcgQEAKICAgImNsb2NrLUFGX0RFQ25ldCIsICJjbG9jay1BRl9ORVRCRVVJIiAgLCAiY2xvY2stQUZfU0VDVVJJVFkiICwKICAgImNsb2NrLUFGX0tFWSIgICAsICJjbG9jay1BRl9ORVRMSU5LIiAgLCAiY2xvY2stQUZfUEFDS0VUIiAgICwKICAgImNsb2NrLUFGX0FTSCIgICAsICJjbG9jay1BRl9FQ09ORVQiICAgLCAiY2xvY2stQUZfQVRNU1ZDIiAgICwKLSAgImNsb2NrLTIxIiAgICAgICAsICJjbG9jay1BRl9TTkEiICAgICAgLCAiY2xvY2stQUZfSVJEQSIgICAgICwKKyAgImNsb2NrLUFGX1JEUyIgICAsICJjbG9jay1BRl9TTkEiICAgICAgLCAiY2xvY2stQUZfSVJEQSIgICAgICwKICAgImNsb2NrLUFGX1BQUE9YIiAsICJjbG9jay1BRl9XQU5QSVBFIiAgLCAiY2xvY2stQUZfTExDIiAgICAgICwKICAgImNsb2NrLTI3IiAgICAgICAsICJjbG9jay0yOCIgICAgICAgICAgLCAiY2xvY2stQUZfQ0FOIiAgICAgICwKICAgImNsb2NrLUFGX1RJUEMiICAsICJjbG9jay1BRl9CTFVFVE9PVEgiLCAiY2xvY2stQUZfSVVDViIgICAgICwKQEAgLTI1NSwxMSArMjU2LDE0IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzb2NrX2Rpc2FibGVfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyB2b2lkIHNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZykKIHsKLQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpIHsKLQkJc29ja19yZXNldF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCk7Ci0JCW5ldF9kaXNhYmxlX3RpbWVzdGFtcCgpOworCWlmIChzb2NrX2ZsYWcoc2ssIGZsYWcpKSB7CisJCXNvY2tfcmVzZXRfZmxhZyhzaywgZmxhZyk7CisJCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkgJiYKKwkJICAgICFzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKSkgeworCQkJbmV0X2Rpc2FibGVfdGltZXN0YW1wKCk7CisJCX0KIAl9CiB9CiAKQEAgLTYxNCwxMyArNjE4LDM4IEBACiAJCQllbHNlCiAJCQkJc29ja19zZXRfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUyk7CiAJCQlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCk7Ci0JCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUCk7CiAJCX0gZWxzZSB7CiAJCQlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKTsKIAkJCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUyk7CiAJCX0KIAkJYnJlYWs7CiAKKwljYXNlIFNPX1RJTUVTVEFNUElORzoKKwkJaWYgKHZhbCAmIH5TT0ZfVElNRVNUQU1QSU5HX01BU0spIHsKKwkJCXJldCA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSwKKwkJCQkgIHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUsCisJCQkJICB2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFKTsKKwkJc29ja192YWxib29sX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRSk7CisJCWlmICh2YWwgJiBTT0ZfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKQorCQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrLAorCQkJCQkgICAgICBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSk7CisJCWVsc2UKKwkJCXNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc2ssCisJCQkJCSAgICAgICBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSk7CisJCXNvY2tfdmFsYm9vbF9mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUElOR19TT0ZUV0FSRSwKKwkJCQkgIHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19TWVNfSEFSRFdBUkUpOworCQlzb2NrX3ZhbGJvb2xfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFLAorCQkJCSAgdmFsICYgU09GX1RJTUVTVEFNUElOR19SQVdfSEFSRFdBUkUpOworCQlicmVhazsKKwogCWNhc2UgU09fUkNWTE9XQVQ6CiAJCWlmICh2YWwgPCAwKQogCQkJdmFsID0gSU5UX01BWDsKQEAgLTc2OCw2ICs3OTcsMjQgQEAKIAkJdi52YWwgPSBzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QTlMpOwogCQlicmVhazsKIAorCWNhc2UgU09fVElNRVNUQU1QSU5HOgorCQl2LnZhbCA9IDA7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1RYX1NPRlRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfVFhfU09GVFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1JYX1NPRlRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfUlhfU09GVFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkU7CisJCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRSkpCisJCQl2LnZhbCB8PSBTT0ZfVElNRVNUQU1QSU5HX1NZU19IQVJEV0FSRTsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKSkKKwkJCXYudmFsIHw9IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFOworCQlicmVhazsKKwogCWNhc2UgU09fUkNWVElNRU86CiAJCWx2PXNpemVvZihzdHJ1Y3QgdGltZXZhbCk7CiAJCWlmIChzay0+c2tfcmN2dGltZW8gPT0gTUFYX1NDSEVEVUxFX1RJTUVPVVQpIHsKQEAgLTk2OSw3ICsxMDE2LDggQEAKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKHNrLT5za19maWx0ZXIsIE5VTEwpOwogCX0KIAotCXNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc2spOworCXNvY2tfZGlzYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKKwlzb2NrX2Rpc2FibGVfdGltZXN0YW1wKHNrLCBTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJnNrLT5za19vbWVtX2FsbG9jKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvcHRtZW0gbGVha2FnZSAoJWQgYnl0ZXMpIGRldGVjdGVkLlxuIiwKQEAgLTEyNTUsMTAgKzEzMDMsOSBAQAogICoJR2VuZXJpYyBzZW5kL3JlY2VpdmUgYnVmZmVyIGhhbmRsZXJzCiAgKi8KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpzb2NrX2FsbG9jX3NlbmRfcHNrYihzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIGhlYWRlcl9sZW4sCi0JCQkJCSAgICB1bnNpZ25lZCBsb25nIGRhdGFfbGVuLAotCQkJCQkgICAgaW50IG5vYmxvY2ssIGludCAqZXJyY29kZSkKK3N0cnVjdCBza19idWZmICpzb2NrX2FsbG9jX3NlbmRfcHNrYihzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGxvbmcgaGVhZGVyX2xlbiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9sZW4sIGludCBub2Jsb2NrLAorCQkJCSAgICAgaW50ICplcnJjb2RlKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJZ2ZwX3QgZ2ZwX21hc2s7CkBAIC0xMzM4LDYgKzEzODUsNyBAQAogCSplcnJjb2RlID0gZXJyOwogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChzb2NrX2FsbG9jX3NlbmRfcHNrYik7CiAKIHN0cnVjdCBza19idWZmICpzb2NrX2FsbG9jX3NlbmRfc2tiKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgICBpbnQgbm9ibG9jaywgaW50ICplcnJjb2RlKQpAQCAtMTc4Niw3ICsxODM0LDcgQEAKIHsKIAlzdHJ1Y3QgdGltZXZhbCB0djsKIAlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVApKQotCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2spOworCQlzb2NrX2VuYWJsZV90aW1lc3RhbXAoc2ssIFNPQ0tfVElNRVNUQU1QKTsKIAl0diA9IGt0aW1lX3RvX3RpbWV2YWwoc2stPnNrX3N0YW1wKTsKIAlpZiAodHYudHZfc2VjID09IC0xKQogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTE4MDIsNyArMTg1MCw3IEBACiB7CiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpCi0JCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzayk7CisJCXNvY2tfZW5hYmxlX3RpbWVzdGFtcChzaywgU09DS19USU1FU1RBTVApOwogCXRzID0ga3RpbWVfdG9fdGltZXNwZWMoc2stPnNrX3N0YW1wKTsKIAlpZiAodHMudHZfc2VjID09IC0xKQogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTE4MTQsMTEgKzE4NjIsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woc29ja19nZXRfdGltZXN0YW1wbnMpOwogCi12b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2spCit2b2lkIHNvY2tfZW5hYmxlX3RpbWVzdGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFnKQogewotCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1RJTUVTVEFNUCkpIHsKLQkJc29ja19zZXRfZmxhZyhzaywgU09DS19USU1FU1RBTVApOwotCQluZXRfZW5hYmxlX3RpbWVzdGFtcCgpOworCWlmICghc29ja19mbGFnKHNrLCBmbGFnKSkgeworCQlzb2NrX3NldF9mbGFnKHNrLCBmbGFnKTsKKwkJLyoKKwkJICogd2UganVzdCBzZXQgb25lIG9mIHRoZSB0d28gZmxhZ3Mgd2hpY2ggcmVxdWlyZSBuZXQKKwkJICogdGltZSBzdGFtcGluZywgYnV0IHRpbWUgc3RhbXBpbmcgbWlnaHQgaGF2ZSBiZWVuIG9uCisJCSAqIGFscmVhZHkgYmVjYXVzZSBvZiB0aGUgb3RoZXIgb25lCisJCSAqLworCQlpZiAoIXNvY2tfZmxhZyhzaywKKwkJCQlmbGFnID09IFNPQ0tfVElNRVNUQU1QID8KKwkJCQlTT0NLX1RJTUVTVEFNUElOR19SWF9TT0ZUV0FSRSA6CisJCQkJU09DS19USU1FU1RBTVApKQorCQkJbmV0X2VuYWJsZV90aW1lc3RhbXAoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKaW5kZXggODNkMzM5OC4uN2RiMWRlMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKKysrIGIvbmV0L2NvcmUvc3lzY3RsX25ldF9jb3JlLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgbmV0X2NvcmVfdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3V0aWxzLmMgYi9uZXQvY29yZS91dGlscy5jCmluZGV4IDcyZTBlYmUuLjgzMjIxYWUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3V0aWxzLmMKKysrIGIvbmV0L2NvcmUvdXRpbHMuYwpAQCAtMjIsNyArMjIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9hY2t2ZWMuaCBiL25ldC9kY2NwL2Fja3ZlYy5oCmluZGV4IDQ1Zjk1ZTUuLjdlYTU1N2IgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2Fja3ZlYy5oCisrKyBiL25ldC9kY2NwL2Fja3ZlYy5oCkBAIC0yMCw2ICsyMCw5IEBACiAvKiBXZSBjYW4gc3ByZWFkIGFuIGFjayB2ZWN0b3IgYWNyb3NzIG11bHRpcGxlIG9wdGlvbnMgKi8KICNkZWZpbmUgRENDUF9NQVhfQUNLVkVDX0xFTiAoRENDUF9TSU5HTEVfT1BUX01BWExFTiAqIDIpCiAKKy8qIEVzdGltYXRlZCBtaW5pbXVtIGF2ZXJhZ2UgQWNrIFZlY3RvciBsZW5ndGggLSB1c2VkIGZvciB1cGRhdGluZyBNUFMgKi8KKyNkZWZpbmUgRENDUEFWX01JTl9PUFRMRU4JMTYKKwogI2RlZmluZSBEQ0NQX0FDS1ZFQ19TVEFURV9SRUNFSVZFRAkwCiAjZGVmaW5lIERDQ1BfQUNLVkVDX1NUQVRFX0VDTl9NQVJLRUQJKDEgPDwgNikKICNkZWZpbmUgRENDUF9BQ0tWRUNfU1RBVEVfTk9UX1JFQ0VJVkVECSgzIDw8IDYpCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9kY2NwLmggYi9uZXQvZGNjcC9kY2NwLmgKaW5kZXggZjIyMzBmYy4uZDZiYzQ3MyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZGNjcC5oCisrKyBiL25ldC9kY2NwL2RjY3AuaApAQCAtNDIsOSArNDIsMTEgQEAKIGV4dGVybiBpbnQgZGNjcF9kZWJ1ZzsKICNkZWZpbmUgZGNjcF9wcl9kZWJ1Zyhmb3JtYXQsIGEuLi4pCSAgRENDUF9QUl9ERUJVRyhkY2NwX2RlYnVnLCBmb3JtYXQsICMjYSkKICNkZWZpbmUgZGNjcF9wcl9kZWJ1Z19jYXQoZm9ybWF0LCBhLi4uKSAgIERDQ1BfUFJJTlRLKGRjY3BfZGVidWcsIGZvcm1hdCwgIyNhKQorI2RlZmluZSBkY2NwX2RlYnVnKGZtdCwgYS4uLikJCSAgZGNjcF9wcl9kZWJ1Z19jYXQoS0VSTl9ERUJVRyBmbXQsICMjYSkKICNlbHNlCiAjZGVmaW5lIGRjY3BfcHJfZGVidWcoZm9ybWF0LCBhLi4uKQogI2RlZmluZSBkY2NwX3ByX2RlYnVnX2NhdChmb3JtYXQsIGEuLi4pCisjZGVmaW5lIGRjY3BfZGVidWcoZm9ybWF0LCBhLi4uKQogI2VuZGlmCiAKIGV4dGVybiBzdHJ1Y3QgaW5ldF9oYXNoaW5mbyBkY2NwX2hhc2hpbmZvOwpAQCAtNjEsMTEgKzYzLDE0IEBACiAgKiAgICAtIERDQ1AtUmVzZXQgICAgd2l0aCBBQ0sgU3ViaGVhZGVyIGFuZCA0IGJ5dGVzIG9mIFJlc2V0IENvZGUgZmllbGRzCiAgKiAgSGVuY2UgYSBzYWZlIHVwcGVyIGJvdW5kIGZvciB0aGUgbWF4aW11bSBvcHRpb24gbGVuZ3RoIGlzIDEwMjAtMjggPSA5OTIKICAqLwotI2RlZmluZSBNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgKDI1NSAqIHNpemVvZihpbnQpKQorI2RlZmluZSBNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgKDI1NSAqIHNpemVvZih1aW50MzJfdCkpCiAjZGVmaW5lIERDQ1BfTUFYX1BBQ0tFVF9IRFIgMjgKICNkZWZpbmUgRENDUF9NQVhfT1BUX0xFTiAoTUFYX0RDQ1BfU1BFQ0lGSUNfSEVBREVSIC0gRENDUF9NQVhfUEFDS0VUX0hEUikKICNkZWZpbmUgTUFYX0RDQ1BfSEVBREVSIChNQVhfRENDUF9TUEVDSUZJQ19IRUFERVIgKyBNQVhfSEVBREVSKQogCisvKiBVcHBlciBib3VuZCBmb3IgaW5pdGlhbCBmZWF0dXJlLW5lZ290aWF0aW9uIG92ZXJoZWFkIChwYWRkZWQgdG8gMzIgYml0cykgKi8KKyNkZWZpbmUgRENDUF9GRUFUTkVHX09WRVJIRUFECSAoMzIgKiBzaXplb2YodWludDMyX3QpKQorCiAjZGVmaW5lIERDQ1BfVElNRVdBSVRfTEVOICg2MCAqIEhaKSAvKiBob3cgbG9uZyB0byB3YWl0IHRvIGRlc3Ryb3kgVElNRS1XQUlUCiAJCQkJICAgICAqIHN0YXRlLCBhYm91dCA2MCBzZWNvbmRzICovCiAKQEAgLTk1LDkgKzEwMCw2IEBACiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9yZXF1ZXN0X3JldHJpZXM7CiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF9yZXRyaWVzMTsKIGV4dGVybiBpbnQgIHN5c2N0bF9kY2NwX3JldHJpZXMyOwotZXh0ZXJuIGludCAgc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3c7Ci1leHRlcm4gaW50ICBzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQ7Ci1leHRlcm4gaW50ICBzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQ7CiBleHRlcm4gaW50ICBzeXNjdGxfZGNjcF90eF9xbGVuOwogZXh0ZXJuIGludCAgc3lzY3RsX2RjY3Bfc3luY19yYXRlbGltaXQ7CiAKQEAgLTQwOSwyMyArNDExLDIxIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGNjcF91cGRhdGVfZ3NyKHN0cnVjdCBzb2NrICpzaywgdTY0IHNlcSkKIHsKIAlzdHJ1Y3QgZGNjcF9zb2NrICpkcCA9IGRjY3Bfc2soc2spOwotCWNvbnN0IHN0cnVjdCBkY2NwX21pbmlzb2NrICpkbXNrID0gZGNjcF9tc2soc2spOwogCiAJZHAtPmRjY3BzX2dzciA9IHNlcTsKLQlkY2NwX3NldF9zZXFubygmZHAtPmRjY3BzX3N3bCwKLQkJICAgICAgIGRwLT5kY2Nwc19nc3IgKyAxIC0gKGRtc2stPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgLyA0KSk7Ci0JZGNjcF9zZXRfc2Vxbm8oJmRwLT5kY2Nwc19zd2gsCi0JCSAgICAgICBkcC0+ZGNjcHNfZ3NyICsgKDMgKiBkbXNrLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93KSAvIDQpOworCS8qIFNlcXVlbmNlIHZhbGlkaXR5IHdpbmRvdyBkZXBlbmRzIG9uIHJlbW90ZSBTZXF1ZW5jZSBXaW5kb3cgKDcuNS4xKSAqLworCWRwLT5kY2Nwc19zd2wgPSBTVUI0OChBREQ0OChkcC0+ZGNjcHNfZ3NyLCAxKSwgZHAtPmRjY3BzX3Jfc2VxX3dpbiAvIDQpOworCWRwLT5kY2Nwc19zd2ggPSBBREQ0OChkcC0+ZGNjcHNfZ3NyLCAoMyAqIGRwLT5kY2Nwc19yX3NlcV93aW4pIC8gNCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX3VwZGF0ZV9nc3Moc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxKQogewogCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CiAKLQlkcC0+ZGNjcHNfYXdoID0gZHAtPmRjY3BzX2dzcyA9IHNlcTsKLQlkY2NwX3NldF9zZXFubygmZHAtPmRjY3BzX2F3bCwKLQkJICAgICAgIChkcC0+ZGNjcHNfZ3NzIC0KLQkJCWRjY3BfbXNrKHNrKS0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyArIDEpKTsKKwlkcC0+ZGNjcHNfZ3NzID0gc2VxOworCS8qIEFjayB2YWxpZGl0eSB3aW5kb3cgZGVwZW5kcyBvbiBsb2NhbCBTZXF1ZW5jZSBXaW5kb3cgdmFsdWUgKDcuNS4xKSAqLworCWRwLT5kY2Nwc19hd2wgPSBTVUI0OChBREQ0OChkcC0+ZGNjcHNfZ3NzLCAxKSwgZHAtPmRjY3BzX2xfc2VxX3dpbik7CisJZHAtPmRjY3BzX2F3aCA9IGRwLT5kY2Nwc19nc3M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRjY3BfYWNrX3BlbmRpbmcoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvZmVhdC5jIGIvbmV0L2RjY3AvZmVhdC5jCmluZGV4IDQxNTIzMDguLmIwNDE2MGEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2ZlYXQuYworKysgYi9uZXQvZGNjcC9mZWF0LmMKQEAgLTI1LDYgKzI1LDExIEBACiAjaW5jbHVkZSAiY2NpZC5oIgogI2luY2x1ZGUgImZlYXQuaCIKIAorLyogZmVhdHVyZS1zcGVjaWZpYyBzeXNjdGxzIC0gaW5pdGlhbGlzZWQgdG8gdGhlIGRlZmF1bHRzIGZyb20gUkZDIDQzNDAsIDYuNCAqLwordW5zaWduZWQgbG9uZwlzeXNjdGxfZGNjcF9zZXF1ZW5jZV93aW5kb3cgX19yZWFkX21vc3RseSA9IDEwMDsKK2ludAkJc3lzY3RsX2RjY3BfcnhfY2NpZAkgICAgX19yZWFkX21vc3RseSA9IDIsCisJCXN5c2N0bF9kY2NwX3R4X2NjaWQJICAgIF9fcmVhZF9tb3N0bHkgPSAyOworCiAvKgogICogRmVhdHVyZSBhY3RpdmF0aW9uIGhhbmRsZXJzLgogICoKQEAgLTUxLDggKzU2LDE3IEBACiAKIHN0YXRpYyBpbnQgZGNjcF9oZGxyX3NlcV93aW4oc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxX3dpbiwgYm9vbCByeCkKIHsKLQlpZiAoIXJ4KQotCQlkY2NwX21zayhzayktPmRjY3Btc19zZXF1ZW5jZV93aW5kb3cgPSBzZXFfd2luOworCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7CisKKwlpZiAocngpIHsKKwkJZHAtPmRjY3BzX3Jfc2VxX3dpbiA9IHNlcV93aW47CisJCS8qIHByb3BhZ2F0ZSBjaGFuZ2VzIHRvIHVwZGF0ZSBTV0wvU1dIICovCisJCWRjY3BfdXBkYXRlX2dzcihzaywgZHAtPmRjY3BzX2dzcik7CisJfSBlbHNlIHsKKwkJZHAtPmRjY3BzX2xfc2VxX3dpbiA9IHNlcV93aW47CisJCS8qIHByb3BhZ2F0ZSBjaGFuZ2VzIHRvIHVwZGF0ZSBBV0wgKi8KKwkJZGNjcF91cGRhdGVfZ3NzKHNrLCBkcC0+ZGNjcHNfZ3NzKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5NCw2ICsyMDgsMTAwIEBACiAJcmV0dXJuIGlkeCA8IDAgPyAwIDogZGNjcF9mZWF0X3RhYmxlW2lkeF0uZGVmYXVsdF92YWx1ZTsKIH0KIAorLyoKKyAqCURlYnVnZ2luZyBhbmQgdmVyYm9zZS1wcmludGluZyBzZWN0aW9uCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpkY2NwX2ZlYXRfZm5hbWUoY29uc3QgdTggZmVhdCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciAqZmVhdHVyZV9uYW1lc1tdID0geworCQlbRENDUEZfUkVTRVJWRURdCT0gIlJlc2VydmVkIiwKKwkJW0RDQ1BGX0NDSURdCQk9ICJDQ0lEIiwKKwkJW0RDQ1BGX1NIT1JUX1NFUU5PU10JPSAiQWxsb3cgU2hvcnQgU2Vxbm9zIiwKKwkJW0RDQ1BGX1NFUVVFTkNFX1dJTkRPV10JPSAiU2VxdWVuY2UgV2luZG93IiwKKwkJW0RDQ1BGX0VDTl9JTkNBUEFCTEVdCT0gIkVDTiBJbmNhcGFibGUiLAorCQlbRENDUEZfQUNLX1JBVElPXQk9ICJBY2sgUmF0aW8iLAorCQlbRENDUEZfU0VORF9BQ0tfVkVDVE9SXQk9ICJTZW5kIEFDSyBWZWN0b3IiLAorCQlbRENDUEZfU0VORF9ORFBfQ09VTlRdCT0gIlNlbmQgTkRQIENvdW50IiwKKwkJW0RDQ1BGX01JTl9DU1VNX0NPVkVSXQk9ICJNaW4uIENzdW0gQ292ZXJhZ2UiLAorCQlbRENDUEZfREFUQV9DSEVDS1NVTV0JPSAiU2VuZCBEYXRhIENoZWNrc3VtIiwKKwl9OworCWlmIChmZWF0ID4gRENDUEZfREFUQV9DSEVDS1NVTSAmJiBmZWF0IDwgRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMpCisJCXJldHVybiBmZWF0dXJlX25hbWVzW0RDQ1BGX1JFU0VSVkVEXTsKKworCWlmIChmZWF0ID09ICBEQ0NQRl9TRU5EX0xFVl9SQVRFKQorCQlyZXR1cm4gIlNlbmQgTG9zcyBFdmVudCBSYXRlIjsKKwlpZiAoZmVhdCA+PSBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQykKKwkJcmV0dXJuICJDQ0lELXNwZWNpZmljIjsKKworCXJldHVybiBmZWF0dXJlX25hbWVzW2ZlYXRdOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZGNjcF9mZWF0X3NuYW1lW10gPSB7ICJERUZBVUxUIiwgIklOSVRJQUxJU0lORyIsICJDSEFOR0lORyIsCisJCQkJCSAiVU5TVEFCTEUiLCAiU1RBQkxFIiB9OworCisjaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKK3N0YXRpYyBjb25zdCBjaGFyICpkY2NwX2ZlYXRfb25hbWUoY29uc3QgdTggb3B0KQoreworCXN3aXRjaCAob3B0KSB7CisJY2FzZSBEQ0NQT19DSEFOR0VfTDogIHJldHVybiAiQ2hhbmdlX0wiOworCWNhc2UgRENDUE9fQ09ORklSTV9MOiByZXR1cm4gIkNvbmZpcm1fTCI7CisJY2FzZSBEQ0NQT19DSEFOR0VfUjogIHJldHVybiAiQ2hhbmdlX1IiOworCWNhc2UgRENDUE9fQ09ORklSTV9SOiByZXR1cm4gIkNvbmZpcm1fUiI7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBkY2NwX2ZlYXRfcHJpbnR2YWwodTggZmVhdF9udW0sIGRjY3BfZmVhdF92YWwgY29uc3QgKnZhbCkKK3sKKwl1OCBpLCB0eXBlID0gZGNjcF9mZWF0X3R5cGUoZmVhdF9udW0pOworCisJaWYgKHZhbCA9PSBOVUxMIHx8ICh0eXBlID09IEZFQVRfU1AgJiYgdmFsLT5zcC52ZWMgPT0gTlVMTCkpCisJCWRjY3BfcHJfZGVidWdfY2F0KCIoTlVMTCkiKTsKKwllbHNlIGlmICh0eXBlID09IEZFQVRfU1ApCisJCWZvciAoaSA9IDA7IGkgPCB2YWwtPnNwLmxlbjsgaSsrKQorCQkJZGNjcF9wcl9kZWJ1Z19jYXQoIiVzJXUiLCBpID8gIiAiIDogIiIsIHZhbC0+c3AudmVjW2ldKTsKKwllbHNlIGlmICh0eXBlID09IEZFQVRfTk4pCisJCWRjY3BfcHJfZGVidWdfY2F0KCIlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWwtPm5uKTsKKwllbHNlCisJCWRjY3BfcHJfZGVidWdfY2F0KCJ1bmtub3duIHR5cGUgJXUiLCB0eXBlKTsKK30KKworc3RhdGljIHZvaWQgZGNjcF9mZWF0X3ByaW50dmFscyh1OCBmZWF0X251bSwgdTggKmxpc3QsIHU4IGxlbikKK3sKKwl1OCB0eXBlID0gZGNjcF9mZWF0X3R5cGUoZmVhdF9udW0pOworCWRjY3BfZmVhdF92YWwgZnZhbCA9IHsgLnNwLnZlYyA9IGxpc3QsIC5zcC5sZW4gPSBsZW4gfTsKKworCWlmICh0eXBlID09IEZFQVRfTk4pCisJCWZ2YWwubm4gPSBkY2NwX2RlY29kZV92YWx1ZV92YXIobGlzdCwgbGVuKTsKKwlkY2NwX2ZlYXRfcHJpbnR2YWwoZmVhdF9udW0sICZmdmFsKTsKK30KKworc3RhdGljIHZvaWQgZGNjcF9mZWF0X3ByaW50X2VudHJ5KHN0cnVjdCBkY2NwX2ZlYXRfZW50cnkgY29uc3QgKmVudHJ5KQoreworCWRjY3BfZGVidWcoIiAgICogJXMgJXMgPSAiLCBlbnRyeS0+aXNfbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCisJCQkJICAgIGRjY3BfZmVhdF9mbmFtZShlbnRyeS0+ZmVhdF9udW0pKTsKKwlkY2NwX2ZlYXRfcHJpbnR2YWwoZW50cnktPmZlYXRfbnVtLCAmZW50cnktPnZhbCk7CisJZGNjcF9wcl9kZWJ1Z19jYXQoIiwgc3RhdGU9JXMgJXNcbiIsIGRjY3BfZmVhdF9zbmFtZVtlbnRyeS0+c3RhdGVdLAorCQkJICBlbnRyeS0+bmVlZHNfY29uZmlybSA/ICIoQ29uZmlybSBwZW5kaW5nKSIgOiAiIik7Cit9CisKKyNkZWZpbmUgZGNjcF9mZWF0X3ByaW50X29wdChvcHQsIGZlYXQsIHZhbCwgbGVuLCBtYW5kYXRvcnkpCWRvIHsJICAgICAgXAorCWRjY3BfcHJfZGVidWcoIiVzKCVzLCAiLCBkY2NwX2ZlYXRfb25hbWUob3B0KSwgZGNjcF9mZWF0X2ZuYW1lKGZlYXQpKTtcCisJZGNjcF9mZWF0X3ByaW50dmFscyhmZWF0LCB2YWwsIGxlbik7CQkJCSAgICAgIFwKKwlkY2NwX3ByX2RlYnVnX2NhdCgiKSAlc1xuIiwgbWFuZGF0b3J5ID8gIiEiIDogIiIpOwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGRjY3BfZmVhdF9wcmludF9mbmxpc3QoZm5fbGlzdCkgIHsJCVwKKwljb25zdCBzdHJ1Y3QgZGNjcF9mZWF0X2VudHJ5ICpfX19lbnRyeTsJCVwKKwkJCQkJCQlcCisJZGNjcF9wcl9kZWJ1ZygiTGlzdCBEdW1wOlxuIik7CQkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoX19fZW50cnksIGZuX2xpc3QsIG5vZGUpCVwKKwkJZGNjcF9mZWF0X3ByaW50X2VudHJ5KF9fX2VudHJ5KTsJXAorfQorI2Vsc2UJLyogISBDT05GSUdfSVBfRENDUF9ERUJVRyAqLworI2RlZmluZSBkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgZmVhdCwgdmFsLCBsZW4sIG1hbmRhdG9yeSkKKyNkZWZpbmUgZGNjcF9mZWF0X3ByaW50X2ZubGlzdChmbl9saXN0KQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19kY2NwX2ZlYXRfYWN0aXZhdGUoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBpbnQgaWR4LAogCQkJCWNvbnN0IGJvb2wgaXNfbG9jYWwsIGRjY3BfZmVhdF92YWwgY29uc3QgKmZ2YWwpCiB7CkBAIC0yMjYsNiArMzM0LDEwIEBACiAJLyogTG9jYXRpb24gaXMgUlggaWYgdGhpcyBpcyBhIGxvY2FsLVJYIG9yIHJlbW90ZS1UWCBmZWF0dXJlICovCiAJcnggPSAoaXNfbG9jYWwgPT0gKGRjY3BfZmVhdF90YWJsZVtpZHhdLnJ4dHggPT0gRkVBVF9BVF9SWCkpOwogCisJZGNjcF9kZWJ1ZygiICAgLT4gYWN0aXZhdGluZyAlcyAlcywgJXN2YWw9JWxsdVxuIiwgcnggPyAiUlgiIDogIlRYIiwKKwkJICAgZGNjcF9mZWF0X2ZuYW1lKGRjY3BfZmVhdF90YWJsZVtpZHhdLmZlYXRfbnVtKSwKKwkJICAgZnZhbCA/ICIiIDogImRlZmF1bHQgIiwgICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsKTsKKwogCXJldHVybiBkY2NwX2ZlYXRfdGFibGVbaWR4XS5hY3RpdmF0aW9uX2hkbHIoc2ssIHZhbCwgcngpOwogfQogCkBAIC01MzAsNiArNjQyLDcgQEAKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCX0KKwkJZGNjcF9mZWF0X3ByaW50X29wdChvcHQsIHBvcy0+ZmVhdF9udW0sIHB0ciwgbGVuLCAwKTsKIAogCQlpZiAoZGNjcF9pbnNlcnRfZm5fb3B0KHNrYiwgb3B0LCBwb3MtPmZlYXRfbnVtLCBwdHIsIGxlbiwgcnB0KSkKIAkJCXJldHVybiAtMTsKQEAgLTc4Myw2ICs4OTYsNyBAQAogCXdoaWxlIChpLS0pCiAJCWlmIChjY2lkc1tpXSA+IDAgJiYgZGNjcF9mZWF0X3Byb3BhZ2F0ZV9jY2lkKGZuLCBjY2lkc1tpXSwgaSkpCiAJCQlyZXR1cm4gLTE7CisJZGNjcF9mZWF0X3ByaW50X2ZubGlzdChmbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkwMSw2ICsxMDE1LDggQEAKIAlpZiAobGVuID09IDAgfHwgdHlwZSA9PSBGRUFUX1VOS05PV04pCQkvKiA2LjEgYW5kIDYuNi44ICovCiAJCWdvdG8gdW5rbm93bl9mZWF0dXJlX29yX3ZhbHVlOwogCisJZGNjcF9mZWF0X3ByaW50X29wdChvcHQsIGZlYXQsIHZhbCwgbGVuLCBpc19tYW5kYXRvcnkpOworCiAJLyoKIAkgKglOZWdvdGlhdGlvbiBvZiBOTiBmZWF0dXJlczogQ2hhbmdlIFIgaXMgaW52YWxpZCwgc28gdGhlcmUgaXMgbm8KIAkgKglzaW11bHRhbmVvdXMgbmVnb3RpYXRpb247IGhlbmNlIHdlIGRvIG5vdCBsb29rIHVwIGluIHRoZSBsaXN0LgpAQCAtMTAwNiw2ICsxMTIyLDggQEAKIAljb25zdCBib29sIGxvY2FsID0gKG9wdCA9PSBEQ0NQT19DT05GSVJNX1IpOwogCXN0cnVjdCBkY2NwX2ZlYXRfZW50cnkgKmVudHJ5ID0gZGNjcF9mZWF0X2xpc3RfbG9va3VwKGZuLCBmZWF0LCBsb2NhbCk7CiAKKwlkY2NwX2ZlYXRfcHJpbnRfb3B0KG9wdCwgZmVhdCwgdmFsLCBsZW4sIGlzX21hbmRhdG9yeSk7CisKIAlpZiAoZW50cnkgPT0gTlVMTCkgewkvKiBub3RoaW5nIHF1ZXVlZDogaWdub3JlIG9yIGhhbmRsZSBlcnJvciAqLwogCQlpZiAoaXNfbWFuZGF0b3J5ICYmIHR5cGUgPT0gRkVBVF9VTktOT1dOKQogCQkJcmV0dXJuIERDQ1BfUkVTRVRfQ09ERV9NQU5EQVRPUllfRVJST1I7CkBAIC0xMTE1LDIzICsxMjMzLDcwIEBACiAJcmV0dXJuIDA7CS8qIGlnbm9yZSBGTiBvcHRpb25zIGluIGFsbCBvdGhlciBzdGF0ZXMgKi8KIH0KIAorLyoqCisgKiBkY2NwX2ZlYXRfaW5pdCAgLSAgU2VlZCBmZWF0dXJlIG5lZ290aWF0aW9uIHdpdGggaG9zdC1zcGVjaWZpYyBkZWZhdWx0cworICogVGhpcyBpbml0aWFsaXNlcyBnbG9iYWwgZGVmYXVsdHMsIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgdGhlIHN5c2N0bHMuCisgKiBUaGVzZSBjYW4gbGF0ZXIgYmUgb3ZlcnJpZGRlbiBieSByZWdpc3RlcmluZyBjaGFuZ2VzIHZpYSBzZXRzb2Nrb3B0IGNhbGxzLgorICogVGhlIGxhc3QgbGluayBpbiB0aGUgY2hhaW4gaXMgZmluYWxpc2Vfc2V0dGluZ3MsIHRvIG1ha2Ugc3VyZSB0aGF0IGJldHdlZW4KKyAqIGhlcmUgYW5kIHRoZSBzdGFydCBvZiBhY3R1YWwgZmVhdHVyZSBuZWdvdGlhdGlvbiBubyBpbmNvbnNpc3RlbmNpZXMgZW50ZXIuCisgKgorICogQWxsIGZlYXR1cmVzIG5vdCBhcHBlYXJpbmcgYmVsb3cgdXNlIGVpdGhlciBkZWZhdWx0cyBvciBhcmUgb3RoZXJ3aXNlCisgKiBsYXRlciBhZGp1c3RlZCB0aHJvdWdoIGRjY3BfZmVhdF9maW5hbGlzZV9zZXR0aW5ncygpLgorICovCiBpbnQgZGNjcF9mZWF0X2luaXQoc3RydWN0IHNvY2sgKnNrKQogewotCXN0cnVjdCBkY2NwX3NvY2sgKmRwID0gZGNjcF9zayhzayk7Ci0Jc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2sgPSBkY2NwX21zayhzayk7CisJc3RydWN0IGxpc3RfaGVhZCAqZm4gPSAmZGNjcF9zayhzayktPmRjY3BzX2ZlYXRuZWc7CisJdTggb24gPSAxLCBvZmYgPSAwOwogCWludCByYzsKKwlzdHJ1Y3QgeworCQl1OCAqdmFsOworCQl1OCBsZW47CisJfSB0eCwgcng7CiAKLQlJTklUX0xJU1RfSEVBRCgmZG1zay0+ZGNjcG1zX3BlbmRpbmcpOwkvKiBYWFggbm8gbG9uZ2VyIHVzZWQgKi8KLQlJTklUX0xJU1RfSEVBRCgmZG1zay0+ZGNjcG1zX2NvbmYpOwkvKiBYWFggbm8gbG9uZ2VyIHVzZWQgKi8KKwkvKiBOb24tbmVnb3RpYWJsZSAoTk4pIGZlYXR1cmVzICovCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfbm4oZm4sIERDQ1BGX1NFUVVFTkNFX1dJTkRPVywgMCwKKwkJCQkgICAgc3lzY3RsX2RjY3Bfc2VxdWVuY2Vfd2luZG93KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAotCS8qIEFjayByYXRpbyAqLwotCXJjID0gX19mZWF0X3JlZ2lzdGVyX25uKCZkcC0+ZGNjcHNfZmVhdG5lZywgRENDUEZfQUNLX1JBVElPLCAwLAotCQkJCWRwLT5kY2Nwc19sX2Fja19yYXRpbyk7CisJLyogU2VydmVyLXByaW9yaXR5IChTUCkgZmVhdHVyZXMgKi8KKworCS8qIEFkdmVydGlzZSB0aGF0IHNob3J0IHNlcW5vcyBhcmUgbm90IHN1cHBvcnRlZCAoNy42LjEpICovCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfc3AoZm4sIERDQ1BGX1NIT1JUX1NFUU5PUywgdHJ1ZSwgdHJ1ZSwgJm9mZiwgMSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBSRkMgNDM0MCAxMi4xOiAiSWYgYSBEQ0NQIGlzIG5vdCBFQ04gY2FwYWJsZSwgLi4uIiAqLworCXJjID0gX19mZWF0X3JlZ2lzdGVyX3NwKGZuLCBEQ0NQRl9FQ05fSU5DQVBBQkxFLCB0cnVlLCB0cnVlLCAmb24sIDEpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJLyoKKwkgKiBXZSBhZHZlcnRpc2UgdGhlIGF2YWlsYWJsZSBsaXN0IG9mIENDSURzIGFuZCByZW9yZGVyIGFjY29yZGluZyB0bworCSAqIHByZWZlcmVuY2VzLCB0byBhdm9pZCBmYWlsdXJlIHJlc3VsdGluZyBmcm9tIG5lZ290aWF0aW5nIGRpZmZlcmVudAorCSAqIHNpbmdsZXRvbiB2YWx1ZXMgKHdoaWNoIGFsd2F5cyBsZWFkcyB0byBmYWlsdXJlKS4KKwkgKiBUaGVzZSBzZXR0aW5ncyBjYW4gc3RpbGwgKGxhdGVyKSBiZSBvdmVycmlkZGVuIHZpYSBzb2Nrb3B0cy4KKwkgKi8KKwlpZiAoY2NpZF9nZXRfYnVpbHRpbl9jY2lkcygmdHgudmFsLCAmdHgubGVuKSB8fAorCSAgICBjY2lkX2dldF9idWlsdGluX2NjaWRzKCZyeC52YWwsICZyeC5sZW4pKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwlpZiAoIWRjY3BfZmVhdF9wcmVmZXIoc3lzY3RsX2RjY3BfdHhfY2NpZCwgdHgudmFsLCB0eC5sZW4pIHx8CisJICAgICFkY2NwX2ZlYXRfcHJlZmVyKHN5c2N0bF9kY2NwX3J4X2NjaWQsIHJ4LnZhbCwgcngubGVuKSkKKwkJZ290byBmcmVlX2NjaWRfbGlzdHM7CisKKwlyYyA9IF9fZmVhdF9yZWdpc3Rlcl9zcChmbiwgRENDUEZfQ0NJRCwgdHJ1ZSwgZmFsc2UsIHR4LnZhbCwgdHgubGVuKTsKKwlpZiAocmMpCisJCWdvdG8gZnJlZV9jY2lkX2xpc3RzOworCisJcmMgPSBfX2ZlYXRfcmVnaXN0ZXJfc3AoZm4sIERDQ1BGX0NDSUQsIGZhbHNlLCBmYWxzZSwgcngudmFsLCByeC5sZW4pOworCitmcmVlX2NjaWRfbGlzdHM6CisJa2ZyZWUodHgudmFsKTsKKwlrZnJlZShyeC52YWwpOwogCXJldHVybiByYzsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF9mZWF0X2luaXQpOwotCiBpbnQgZGNjcF9mZWF0X2FjdGl2YXRlX3ZhbHVlcyhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBsaXN0X2hlYWQgKmZuX2xpc3QpCiB7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKQEAgLTExNTYsOSArMTMyMSwxMCBAQAogCQkJZ290byBhY3RpdmF0aW9uX2ZhaWxlZDsKIAkJfQogCQlpZiAoY3VyLT5zdGF0ZSAhPSBGRUFUX1NUQUJMRSkgewotCQkJRENDUF9DUklUKCJOZWdvdGlhdGlvbiBvZiAlcyAldSBmYWlsZWQgaW4gc3RhdGUgJXUiLAorCQkJRENDUF9DUklUKCJOZWdvdGlhdGlvbiBvZiAlcyAlcyBmYWlsZWQgaW4gc3RhdGUgJXMiLAogCQkJCSAgY3VyLT5pc19sb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKLQkJCQkgIGN1ci0+ZmVhdF9udW0sIGN1ci0+c3RhdGUpOworCQkJCSAgZGNjcF9mZWF0X2ZuYW1lKGN1ci0+ZmVhdF9udW0pLAorCQkJCSAgZGNjcF9mZWF0X3NuYW1lW2N1ci0+c3RhdGVdKTsKIAkJCWdvdG8gYWN0aXZhdGlvbl9mYWlsZWQ7CiAJCX0KIAkJZnZhbHNbaWR4XVtjdXItPmlzX2xvY2FsXSA9ICZjdXItPnZhbDsKQEAgLTExOTksNDMgKzEzNjUsMyBAQAogCWRwLT5kY2Nwc19oY19yeF9hY2t2ZWMgPSBOVUxMOwogCXJldHVybiAtMTsKIH0KLQotI2lmZGVmIENPTkZJR19JUF9EQ0NQX0RFQlVHCi1jb25zdCBjaGFyICpkY2NwX2ZlYXRfdHlwZW5hbWUoY29uc3QgdTggdHlwZSkKLXsKLQlzd2l0Y2godHlwZSkgewotCWNhc2UgRENDUE9fQ0hBTkdFX0w6ICByZXR1cm4oIkNoYW5nZUwiKTsKLQljYXNlIERDQ1BPX0NPTkZJUk1fTDogcmV0dXJuKCJDb25maXJtTCIpOwotCWNhc2UgRENDUE9fQ0hBTkdFX1I6ICByZXR1cm4oIkNoYW5nZVIiKTsKLQljYXNlIERDQ1BPX0NPTkZJUk1fUjogcmV0dXJuKCJDb25maXJtUiIpOwotCS8qIHRoZSBmb2xsb3dpbmcgY2FzZSBtdXN0IG5vdCBhcHBlYXIgaW4gZmVhdHVyZSBuZWdvdGF0aW9uICAqLwotCWRlZmF1bHQ6CSAgICAgIGRjY3BfcHJfZGVidWcoInVua25vd24gdHlwZSAlZCBbQlVHIV1cbiIsIHR5cGUpOwotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQotY29uc3QgY2hhciAqZGNjcF9mZWF0X25hbWUoY29uc3QgdTggZmVhdCkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqZmVhdHVyZV9uYW1lc1tdID0gewotCQlbRENDUEZfUkVTRVJWRURdCT0gIlJlc2VydmVkIiwKLQkJW0RDQ1BGX0NDSURdCQk9ICJDQ0lEIiwKLQkJW0RDQ1BGX1NIT1JUX1NFUU5PU10JPSAiQWxsb3cgU2hvcnQgU2Vxbm9zIiwKLQkJW0RDQ1BGX1NFUVVFTkNFX1dJTkRPV10JPSAiU2VxdWVuY2UgV2luZG93IiwKLQkJW0RDQ1BGX0VDTl9JTkNBUEFCTEVdCT0gIkVDTiBJbmNhcGFibGUiLAotCQlbRENDUEZfQUNLX1JBVElPXQk9ICJBY2sgUmF0aW8iLAotCQlbRENDUEZfU0VORF9BQ0tfVkVDVE9SXQk9ICJTZW5kIEFDSyBWZWN0b3IiLAotCQlbRENDUEZfU0VORF9ORFBfQ09VTlRdCT0gIlNlbmQgTkRQIENvdW50IiwKLQkJW0RDQ1BGX01JTl9DU1VNX0NPVkVSXQk9ICJNaW4uIENzdW0gQ292ZXJhZ2UiLAotCQlbRENDUEZfREFUQV9DSEVDS1NVTV0JPSAiU2VuZCBEYXRhIENoZWNrc3VtIiwKLQl9OwotCWlmIChmZWF0ID4gRENDUEZfREFUQV9DSEVDS1NVTSAmJiBmZWF0IDwgRENDUEZfTUlOX0NDSURfU1BFQ0lGSUMpCi0JCXJldHVybiBmZWF0dXJlX25hbWVzW0RDQ1BGX1JFU0VSVkVEXTsKLQotCWlmIChmZWF0ID09ICBEQ0NQRl9TRU5EX0xFVl9SQVRFKQotCQlyZXR1cm4gIlNlbmQgTG9zcyBFdmVudCBSYXRlIjsKLQlpZiAoZmVhdCA+PSBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQykKLQkJcmV0dXJuICJDQ0lELXNwZWNpZmljIjsKLQotCXJldHVybiBmZWF0dXJlX25hbWVzW2ZlYXRdOwotfQotI2VuZGlmIC8qIENPTkZJR19JUF9EQ0NQX0RFQlVHICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9mZWF0LmggYi9uZXQvZGNjcC9mZWF0LmgKaW5kZXggOWI0NmUyYS4uZjk2NzIxNiAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvZmVhdC5oCisrKyBiL25ldC9kY2NwL2ZlYXQuaApAQCAtMTAwLDI2ICsxMDAsMjEgQEAKIAl1OAl2YWw7CiB9OwogCi0jaWZkZWYgQ09ORklHX0lQX0RDQ1BfREVCVUcKLWV4dGVybiBjb25zdCBjaGFyICpkY2NwX2ZlYXRfdHlwZW5hbWUoY29uc3QgdTggdHlwZSk7Ci1leHRlcm4gY29uc3QgY2hhciAqZGNjcF9mZWF0X25hbWUoY29uc3QgdTggZmVhdCk7CisvKgorICogU3lzY3RscyB0byBzZWVkIGRlZmF1bHRzIGZvciBmZWF0dXJlIG5lZ290aWF0aW9uCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2N0bF9kY2NwX3NlcXVlbmNlX3dpbmRvdzsKK2V4dGVybiBpbnQJICAgICBzeXNjdGxfZGNjcF9yeF9jY2lkOworZXh0ZXJuIGludAkgICAgIHN5c2N0bF9kY2NwX3R4X2NjaWQ7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX2ZlYXRfZGVidWcoY29uc3QgdTggdHlwZSwgY29uc3QgdTggZmVhdCwgY29uc3QgdTggdmFsKQotewotCWRjY3BfcHJfZGVidWcoIiVzKCVzICglZCksICVkKVxuIiwgZGNjcF9mZWF0X3R5cGVuYW1lKHR5cGUpLAotCQkJCQkgICBkY2NwX2ZlYXRfbmFtZShmZWF0KSwgZmVhdCwgdmFsKTsKLX0KLSNlbHNlCi0jZGVmaW5lIGRjY3BfZmVhdF9kZWJ1Zyh0eXBlLCBmZWF0LCB2YWwpCi0jZW5kaWYgLyogQ09ORklHX0lQX0RDQ1BfREVCVUcgKi8KLQorZXh0ZXJuIGludCAgZGNjcF9mZWF0X2luaXQoc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiB2b2lkIGRjY3BfZmVhdF9pbml0aWFsaXNlX3N5c2N0bHModm9pZCk7CiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfcmVnaXN0ZXJfc3Aoc3RydWN0IHNvY2sgKnNrLCB1OCBmZWF0LCB1OCBpc19sb2NhbCwKIAkJCQkgIHU4IGNvbnN0ICpsaXN0LCB1OCBsZW4pOwogZXh0ZXJuIGludCAgZGNjcF9mZWF0X3JlZ2lzdGVyX25uKHN0cnVjdCBzb2NrICpzaywgdTggZmVhdCwgdTY0IHZhbCk7CiBleHRlcm4gaW50ICBkY2NwX2ZlYXRfcGFyc2Vfb3B0aW9ucyhzdHJ1Y3Qgc29jayAqLCBzdHJ1Y3QgZGNjcF9yZXF1ZXN0X3NvY2sgKiwKIAkJCQkgICAgdTggbWFuZCwgdTggb3B0LCB1OCBmZWF0LCB1OCAqdmFsLCB1OCBsZW4pOwogZXh0ZXJuIGludCAgZGNjcF9mZWF0X2Nsb25lX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCBjb25zdCAqLCBzdHJ1Y3QgbGlzdF9oZWFkICopOwotZXh0ZXJuIGludCAgZGNjcF9mZWF0X2luaXQoc3RydWN0IHNvY2sgKnNrKTsKIAogLyoKICAqIEVuY29kaW5nIHZhcmlhYmxlLWxlbmd0aCBvcHRpb25zIGFuZCB0aGVpciBtYXhpbXVtIGxlbmd0aC4KZGlmZiAtLWdpdCBhL25ldC9kY2NwL21pbmlzb2Nrcy5jIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKaW5kZXggNjgyMWFlMy4uNWNhNDljZSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvbWluaXNvY2tzLmMKKysrIGIvbmV0L2RjY3AvbWluaXNvY2tzLmMKQEAgLTQyLDExICs0Miw2IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfZGVhdGhfcm93KTsKIAotdm9pZCBkY2NwX21pbmlzb2NrX2luaXQoc3RydWN0IGRjY3BfbWluaXNvY2sgKmRtc2spCi17Ci0JZG1zay0+ZGNjcG1zX3NlcXVlbmNlX3dpbmRvdyA9IHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93OwotfQotCiB2b2lkIGRjY3BfdGltZV93YWl0KHN0cnVjdCBzb2NrICpzaywgaW50IHN0YXRlLCBpbnQgdGltZW8pCiB7CiAJc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBOVUxMOwpAQCAtMTEwLDcgKzEwNSw2IEBACiAJCXN0cnVjdCBkY2NwX3JlcXVlc3Rfc29jayAqZHJlcSA9IGRjY3BfcnNrKHJlcSk7CiAJCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqbmV3aWNzayA9IGluZXRfY3NrKG5ld3NrKTsKIAkJc3RydWN0IGRjY3Bfc29jayAqbmV3ZHAgPSBkY2NwX3NrKG5ld3NrKTsKLQkJc3RydWN0IGRjY3BfbWluaXNvY2sgKm5ld2Rtc2sgPSBkY2NwX21zayhuZXdzayk7CiAKIAkJbmV3ZHAtPmRjY3BzX3JvbGUJICAgID0gRENDUF9ST0xFX1NFUlZFUjsKIAkJbmV3ZHAtPmRjY3BzX2hjX3J4X2Fja3ZlYyAgID0gTlVMTDsKQEAgLTEyOCwxMCArMTIyLDYgQEAKIAkJICogICAgSW5pdGlhbGl6ZSBTLkdBUiA6PSBTLklTUwogCQkgKiAgICBTZXQgUy5JU1IsIFMuR1NSLCBTLlNXTCwgUy5TV0ggZnJvbSBwYWNrZXQgb3IgSW5pdCBDb29raWVzCiAJCSAqLwotCi0JCS8qIFNlZSBkY2NwX3Y0X2Nvbm5fcmVxdWVzdCAqLwotCQluZXdkbXNrLT5kY2NwbXNfc2VxdWVuY2Vfd2luZG93ID0gcmVxLT5yY3Zfd25kOwotCiAJCW5ld2RwLT5kY2Nwc19nYXIgPSBuZXdkcC0+ZGNjcHNfaXNzID0gZHJlcS0+ZHJlcV9pc3M7CiAJCWRjY3BfdXBkYXRlX2dzcyhuZXdzaywgZHJlcS0+ZHJlcV9pc3MpOwogCkBAIC0yOTAsNyArMjgwLDYgQEAKIAlpbmV0X3JzayhyZXEpLT5ybXRfcG9ydAkgID0gZGNjcF9oZHIoc2tiKS0+ZGNjcGhfc3BvcnQ7CiAJaW5ldF9yc2socmVxKS0+bG9jX3BvcnQJICA9IGRjY3BfaGRyKHNrYiktPmRjY3BoX2Rwb3J0OwogCWluZXRfcnNrKHJlcSktPmFja2VkCSAgPSAwOwotCXJlcS0+cmN2X3duZAkJICA9IHN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93OwogCWRyZXEtPmRyZXFfdGltZXN0YW1wX2VjaG8gPSAwOwogCiAJLyogaW5oZXJpdCBmZWF0dXJlIG5lZ290aWF0aW9uIG9wdGlvbnMgZnJvbSBsaXN0ZW5pbmcgc29ja2V0ICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vcHRpb25zLmMgYi9uZXQvZGNjcC9vcHRpb25zLmMKaW5kZXggN2IxMTY1Yy4uMWIwOGNhZSAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3B0aW9ucy5jCisrKyBiL25ldC9kY2NwL29wdGlvbnMuYwpAQCAtMjMsMTAgKzIzLDYgQEAKICNpbmNsdWRlICJkY2NwLmgiCiAjaW5jbHVkZSAiZmVhdC5oIgogCi1pbnQgc3lzY3RsX2RjY3BfZmVhdF9zZXF1ZW5jZV93aW5kb3cgPSBEQ0NQRl9JTklUSUFMX1NFUVVFTkNFX1dJTkRPVzsKLWludCBzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQJICAgICAgPSBEQ0NQRl9JTklUSUFMX0NDSUQ7Ci1pbnQgc3lzY3RsX2RjY3BfZmVhdF90eF9jY2lkCSAgICAgID0gRENDUEZfSU5JVElBTF9DQ0lEOwotCiB1NjQgZGNjcF9kZWNvZGVfdmFsdWVfdmFyKGNvbnN0IHU4ICpiZiwgY29uc3QgdTggbGVuKQogewogCXU2NCB2YWx1ZSA9IDA7CkBAIC01MDIsMTAgKzQ5OCw2IEBACiAJCSp0bysrID0gKnZhbDsKIAlpZiAobGVuKQogCQltZW1jcHkodG8sIHZhbCwgbGVuKTsKLQotCWRjY3BfcHJfZGVidWcoIiVzKCVzICglZCksIC4uLiksIGxlbmd0aCAlZFxuIiwKLQkJICAgICAgZGNjcF9mZWF0X3R5cGVuYW1lKHR5cGUpLAotCQkgICAgICBkY2NwX2ZlYXRfbmFtZShmZWF0KSwgZmVhdCwgbGVuKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2RjY3Avb3V0cHV0LmMgYi9uZXQvZGNjcC9vdXRwdXQuYwppbmRleCAyMmE2MThhLi4zNmJjYzAwIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vdXRwdXQuYworKysgYi9uZXQvZGNjcC9vdXRwdXQuYwpAQCAtMTYxLDIxICsxNjEsMjcgQEAKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAl1MzIgY2NtcHMgPSBkY2NwX2RldGVybWluZV9jY21wcyhkcCk7Ci0JaW50IGN1cl9tcHMgPSBjY21wcyA/IG1pbihwbXR1LCBjY21wcykgOiBwbXR1OworCXUzMiBjdXJfbXBzID0gY2NtcHMgPyBtaW4ocG10dSwgY2NtcHMpIDogcG10dTsKIAogCS8qIEFjY291bnQgZm9yIGhlYWRlciBsZW5ndGhzIGFuZCBJUHY0L3Y2IG9wdGlvbiBvdmVyaGVhZCAqLwogCWN1cl9tcHMgLT0gKGljc2stPmljc2tfYWZfb3BzLT5uZXRfaGVhZGVyX2xlbiArIGljc2stPmljc2tfZXh0X2hkcl9sZW4gKwogCQkgICAgc2l6ZW9mKHN0cnVjdCBkY2NwX2hkcikgKyBzaXplb2Yoc3RydWN0IGRjY3BfaGRyX2V4dCkpOwogCiAJLyoKLQkgKiBGSVhNRTogdGhpcyBzaG91bGQgY29tZSBmcm9tIHRoZSBDQ0lEIGluZnJhc3RydWN0dXJlLCB3aGVyZSwgc2F5LAotCSAqIFRGUkMgd2lsbCBzYXkgaXQgd2FudHMgVElNRVNUQU1QUywgRUxBUFNFRCB0aW1lLCBldGMsIGZvciBub3cgbGV0cwotCSAqIHB1dCBhIHJvdWdoIGVzdGltYXRlIGZvciBORFAgKyBUSU1FU1RBTVAgKyBUSU1FU1RBTVBfRUNITyArIEVMQVBTRUQKLQkgKiBUSU1FICsgVEZSQ19PUFRfTE9TU19FVkVOVF9SQVRFICsgVEZSQ19PUFRfUkVDRUlWRV9SQVRFICsgcGFkZGluZyB0bwotCSAqIG1ha2UgaXQgYSBtdWx0aXBsZSBvZiA0CisJICogTGVhdmUgZW5vdWdoIGhlYWRyb29tIGZvciBjb21tb24gRENDUCBoZWFkZXIgb3B0aW9ucy4KKwkgKiBUaGlzIG9ubHkgY29uc2lkZXJzIG9wdGlvbnMgd2hpY2ggbWF5IGFwcGVhciBvbiBEQ0NQLURhdGEgcGFja2V0cywgYXMKKwkgKiBwZXIgdGFibGUgMyBpbiBSRkMgNDM0MCwgNS44LiBXaGVuIHJ1bm5pbmcgb3V0IG9mIHNwYWNlIGZvciBvdGhlcgorCSAqIG9wdGlvbnMgKGVnLiBBY2sgVmVjdG9yIHdoaWNoIGNhbiB0YWtlIHVwIHRvIDI1NSBieXRlcyksIGl0IGlzIGJldHRlcgorCSAqIHRvIHNjaGVkdWxlIGEgc2VwYXJhdGUgQWNrLiBUaHVzIHdlIGxlYXZlIGhlYWRyb29tIGZvciB0aGUgZm9sbG93aW5nOgorCSAqICAtIDEgYnl0ZSBmb3IgU2xvdyBSZWNlaXZlciAoMTEuNikKKwkgKiAgLSA2IGJ5dGVzIGZvciBUaW1lc3RhbXAgKDEzLjEpCisJICogIC0gMTAgYnl0ZXMgZm9yIFRpbWVzdGFtcCBFY2hvICgxMy4zKQorCSAqICAtIDggYnl0ZXMgZm9yIE5EUCBjb3VudCAoNy43LCB3aGVuIGFjdGl2YXRlZCkKKwkgKiAgLSA2IGJ5dGVzIGZvciBEYXRhIENoZWNrc3VtICg5LjMpCisJICogIC0gJURDQ1BBVl9NSU5fT1BUTEVOIGJ5dGVzIGZvciBBY2sgVmVjdG9yIHNpemUgKDExLjQsIHdoZW4gZW5hYmxlZCkKIAkgKi8KLQotCWN1cl9tcHMgLT0gcm91bmR1cCg1ICsgNiArIDEwICsgNiArIDYgKyA2LCA0KTsKKwljdXJfbXBzIC09IHJvdW5kdXAoMSArIDYgKyAxMCArIGRwLT5kY2Nwc19zZW5kX25kcF9jb3VudCAqIDggKyA2ICsKKwkJCSAgIChkcC0+ZGNjcHNfaGNfcnhfYWNrdmVjID8gRENDUEFWX01JTl9PUFRMRU4gOiAwKSwgNCk7CiAKIAkvKiBBbmQgc3RvcmUgY2FjaGVkIHJlc3VsdHMgKi8KIAlpY3NrLT5pY3NrX3BtdHVfY29va2llID0gcG10dTsKQEAgLTI3MCw3ICsyNzYsMjAgQEAKIAkJCWNvbnN0IGludCBsZW4gPSBza2ItPmxlbjsKIAogCQkJaWYgKHNrLT5za19zdGF0ZSA9PSBEQ0NQX1BBUlRPUEVOKSB7Ci0JCQkJLyogU2VlIDguMS41LiAgSGFuZHNoYWtlIENvbXBsZXRpb24gKi8KKwkJCQljb25zdCB1MzIgY3VyX21wcyA9IGRwLT5kY2Nwc19tc3NfY2FjaGUgLSBEQ0NQX0ZFQVRORUdfT1ZFUkhFQUQ7CisJCQkJLyoKKwkJCQkgKiBTZWUgOC4xLjUgLSBIYW5kc2hha2UgQ29tcGxldGlvbi4KKwkJCQkgKgorCQkJCSAqIEZvciByb2J1c3RuZXNzIHdlIHJlc2VuZCBDb25maXJtIG9wdGlvbnMgdW50aWwgdGhlIGNsaWVudCBoYXMKKwkJCQkgKiBlbnRlcmVkIE9QRU4uIER1cmluZyB0aGUgaW5pdGlhbCBmZWF0dXJlIG5lZ290aWF0aW9uLCB0aGUgTVBTCisJCQkJICogaXMgc21hbGxlciB0aGFuIHVzdWFsLCByZWR1Y2VkIGJ5IHRoZSBDaGFuZ2UvQ29uZmlybSBvcHRpb25zLgorCQkJCSAqLworCQkJCWlmICghbGlzdF9lbXB0eSgmZHAtPmRjY3BzX2ZlYXRuZWcpICYmIGxlbiA+IGN1cl9tcHMpIHsKKwkJCQkJRENDUF9XQVJOKCJQYXlsb2FkIHRvbyBsYXJnZSAoJWQpIGZvciBmZWF0bmVnLlxuIiwgbGVuKTsKKwkJCQkJZGNjcF9zZW5kX2Fjayhzayk7CisJCQkJCWRjY3BfZmVhdF9saXN0X3B1cmdlKCZkcC0+ZGNjcHNfZmVhdG5lZyk7CisJCQkJfQorCiAJCQkJaW5ldF9jc2tfc2NoZWR1bGVfYWNrKHNrKTsKIAkJCQlpbmV0X2Nza19yZXNldF94bWl0X3RpbWVyKHNrLCBJQ1NLX1RJTUVfREFDSywKIAkJCQkJCSAgaW5ldF9jc2soc2spLT5pY3NrX3J0bywKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3Byb3RvLmMgYi9uZXQvZGNjcC9wcm90by5jCmluZGV4IDk0NWI0ZDUuLjMxNGExYjUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3Byb3RvLmMKKysrIGIvbmV0L2RjY3AvcHJvdG8uYwpAQCAtMTc0LDggKzE3NCw2IEBACiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7CiAKLQlkY2NwX21pbmlzb2NrX2luaXQoJmRwLT5kY2Nwc19taW5pc29jayk7Ci0KIAlpY3NrLT5pY3NrX3J0bwkJPSBEQ0NQX1RJTUVPVVRfSU5JVDsKIAlpY3NrLT5pY3NrX3N5bl9yZXRyaWVzCT0gc3lzY3RsX2RjY3BfcmVxdWVzdF9yZXRyaWVzOwogCXNrLT5za19zdGF0ZQkJPSBEQ0NQX0NMT1NFRDsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL3N5c2N0bC5jIGIvbmV0L2RjY3Avc3lzY3RsLmMKaW5kZXggMDE4ZTIxMC4uYTVhMTg1NiAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avc3lzY3RsLmMKKysrIGIvbmV0L2RjY3Avc3lzY3RsLmMKQEAgLTE4LDU1ICsxOCw3MiBAQAogI2Vycm9yIFRoaXMgZmlsZSBzaG91bGQgbm90IGJlIGNvbXBpbGVkIHdpdGhvdXQgQ09ORklHX1NZU0NUTCBkZWZpbmVkCiAjZW5kaWYKIAorLyogQm91bmRhcnkgdmFsdWVzICovCitzdGF0aWMgaW50CQl6ZXJvICAgICA9IDAsCisJCQl1OF9tYXggICA9IDB4RkY7CitzdGF0aWMgdW5zaWduZWQgbG9uZwlzZXF3X21pbiA9IDMyOworCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBkY2NwX2RlZmF1bHRfdGFibGVbXSA9IHsKIAl7CiAJCS5wcm9jbmFtZQk9ICJzZXFfd2luZG93IiwKLQkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX2ZlYXRfc2VxdWVuY2Vfd2luZG93LAotCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9mZWF0X3NlcXVlbmNlX3dpbmRvdyksCisJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9zZXF1ZW5jZV93aW5kb3csCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3NlcXVlbmNlX3dpbmRvdyksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmc2Vxd19taW4sCQkvKiBSRkMgNDM0MCwgNy41LjIgKi8KIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJ4X2NjaWQiLAotCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfZmVhdF9yeF9jY2lkLAotCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9mZWF0X3J4X2NjaWQpLAorCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfcnhfY2NpZCwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfcnhfY2NpZCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwJCS8qIFJGQyA0MzQwLCAxMC4gKi8KIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInR4X2NjaWQiLAotCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfZmVhdF90eF9jY2lkLAotCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9mZWF0X3R4X2NjaWQpLAorCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfdHhfY2NpZCwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfdHhfY2NpZCksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwJCS8qIFJGQyA0MzQwLCAxMC4gKi8KIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJlcXVlc3RfcmV0cmllcyIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfZGNjcF9yZXF1ZXN0X3JldHJpZXMsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHN5c2N0bF9kY2NwX3JlcXVlc3RfcmV0cmllcyksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJldHJpZXMxIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3JldHJpZXMxLAogCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9yZXRyaWVzMSksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInJldHJpZXMyIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9kY2NwX3JldHJpZXMyLAogCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfZGNjcF9yZXRyaWVzMiksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJnU4X21heCwKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gInR4X3FsZW4iLAogCQkuZGF0YQkJPSAmc3lzY3RsX2RjY3BfdHhfcWxlbiwKIAkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2RjY3BfdHhfcWxlbiksCiAJCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJzeW5jX3JhdGVsaW1pdCIsCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jIGIvbmV0L2RlY25ldC9hZl9kZWNuZXQuYwppbmRleCBjZjBlMTg0Li45NjQ3ZDkxIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2FmX2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvYWZfZGVjbmV0LmMKQEAgLTEyNDYsMTEgKzEyNDYsMTIgQEAKIAogCWNhc2UgVElPQ0lOUToKIAkJbG9ja19zb2NrKHNrKTsKLQkJaWYgKChza2IgPSBza2JfcGVlaygmc2NwLT5vdGhlcl9yZWNlaXZlX3F1ZXVlKSkgIT0gTlVMTCkgeworCQlza2IgPSBza2JfcGVlaygmc2NwLT5vdGhlcl9yZWNlaXZlX3F1ZXVlKTsKKwkJaWYgKHNrYikgewogCQkJYW1vdW50ID0gc2tiLT5sZW47CiAJCX0gZWxzZSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2stPnNrX3JlY2VpdmVfcXVldWUubmV4dDsKLQkJCWZvcig7OykgeworCQkJc2tiID0gc2stPnNrX3JlY2VpdmVfcXVldWUubmV4dDsKKwkJCWZvciAoOzspIHsKIAkJCQlpZiAoc2tiID09CiAJCQkJICAgIChzdHJ1Y3Qgc2tfYnVmZiAqKSZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkKIAkJCQkJYnJlYWs7CkBAIC0xNTc5LDE2ICsxNTgwLDE2IEBACiAJCWRlZmF1bHQ6CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogCQl7Ci0JCQlpbnQgdmFsLCBsZW47CisJCQlpbnQgcmV0LCBsZW47CiAKIAkJCWlmKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQkJdmFsID0gbmZfZ2V0c29ja29wdChzaywgUEZfREVDbmV0LCBvcHRuYW1lLAorCQkJcmV0ID0gbmZfZ2V0c29ja29wdChzaywgUEZfREVDbmV0LCBvcHRuYW1lLAogCQkJCQkJCW9wdHZhbCwgJmxlbik7Ci0JCQlpZiAodmFsID49IDApCi0JCQkJdmFsID0gcHV0X3VzZXIobGVuLCBvcHRsZW4pOwotCQkJcmV0dXJuIHZhbDsKKwkJCWlmIChyZXQgPj0gMCkKKwkJCQlyZXQgPSBwdXRfdXNlcihsZW4sIG9wdGxlbik7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAjZW5kaWYKIAkJY2FzZSBEU09fU1RSRUFNOgpAQCAtMjA3MSw4ICsyMDcyLDcgQEAKIAl9CiBvdXQ6CiAKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAogCXJlbGVhc2Vfc29jayhzayk7CiAKQEAgLTIxMTIsOSArMjExMiw4IEBACiAKIGV4dGVybiBpbnQgZG5fcm91dGVfcmN2KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBwYWNrZXRfdHlwZSAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBkbl9kaXhfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9ETkFfUlQpLAotCS5kZXYgPQkJTlVMTCwJCS8qIEFsbCBkZXZpY2VzICovCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGRuX2RpeF9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0JCWNwdV90b19iZTE2KEVUSF9QX0ROQV9SVCksCiAJLmZ1bmMgPQkJZG5fcm91dGVfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9kZXYuYyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKaW5kZXggZGFmMmI5OC4uMWM2YTViYiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9kZXYuYworKysgYi9uZXQvZGVjbmV0L2RuX2Rldi5jCkBAIC02ODQsNyArNjg0LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoKGRuX2RiID0gZGV2LT5kbl9wdHIpID09IE5VTEwpIHsKLQkJaW50IGVycjsKIAkJZG5fZGIgPSBkbl9kZXZfY3JlYXRlKGRldiwgJmVycik7CiAJCWlmICghZG5fZGIpCiAJCQlyZXR1cm4gZXJyOwpAQCAtNzY5LDcgKzc2OCw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIDAsIFJUTkxHUlBfREVDbmV0X0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCAmaW5pdF9uZXQsIDAsIFJUTkxHUlBfREVDbmV0X0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIoJmluaXRfbmV0LCBSVE5MR1JQX0RFQ25ldF9JRkFERFIsIGVycik7CkBAIC0xMzIyLDYgKzEzMjIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCAqZG5fZGV2X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcygmZGV2X2Jhc2VfbG9jaykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTM2NCw2ICsxMzY1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgZG5fZGV2X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoJmRldl9iYXNlX2xvY2spCiB7CiAJcmVhZF91bmxvY2soJmRldl9iYXNlX2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCmluZGV4IGM3NTQ2NzAuLjBjYzQzOTQgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fcm91dGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgZG5fZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCVBGX0RFQ25ldCwKLQkucHJvdG9jb2wgPQkJX19jb25zdGFudF9odG9ucyhFVEhfUF9ETkFfUlQpLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9ETkFfUlQpLAogCS5nY190aHJlc2ggPQkJMTI4LAogCS5nYyA9CQkJZG5fZHN0X2djLAogCS5jaGVjayA9CQlkbl9kc3RfY2hlY2ssCkBAIC0zODAsNyArMzgwLDYgQEAKIAl1bnNpZ25lZCBjaGFyICpwdHI7CiAJX19sZTE2ICpzcmM7CiAJX19sZTE2ICpkc3Q7Ci0JX19sZTE2IHRtcDsKIAogCS8qIEFkZCBiYWNrIGhlYWRlcnMgKi8KIAlza2JfcHVzaChza2IsIHNrYi0+ZGF0YSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpKTsKQEAgLTM5OSwxMCArMzk4LDcgQEAKIAlwdHIgKz0gMjsKIAkqcHRyID0gMDsgLyogWmVybyBob3AgY291bnQgKi8KIAotCS8qIFN3YXAgc291cmNlIGFuZCBkZXN0aW5hdGlvbiAqLwotCXRtcCAgPSAqc3JjOwotCSpzcmMgPSAqZHN0OwotCSpkc3QgPSB0bXA7CisJc3dhcCgqc3JjLCAqZHN0KTsKIAogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfT1VUR09JTkc7CiAJZG5fcnRfZmluaXNoX291dHB1dChza2IsIE5VTEwsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl90YWJsZS5jIGIvbmV0L2RlY25ldC9kbl90YWJsZS5jCmluZGV4IDY5YWQ5MjguLjY3MDU0YjAgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fdGFibGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKQEAgLTM3NSw3ICszNzUsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgJmluaXRfbmV0LCBwaWQsIFJUTkxHUlBfREVDbmV0X1JPVVRFLCBubGgsIEdGUF9LRVJORUwpOworCXJ0bmxfbm90aWZ5KHNrYiwgJmluaXRfbmV0LCBwaWQsIFJUTkxHUlBfREVDbmV0X1JPVVRFLCBubGgsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKCZpbml0X25ldCwgUlROTEdSUF9ERUNuZXRfUk9VVEUsIGVycik7CmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMgYi9uZXQvZGVjbmV0L3N5c2N0bF9uZXRfZGVjbmV0LmMKaW5kZXggOTY1Mzk3YS4uNWJjZDU5MiAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9zeXNjdGxfbmV0X2RlY25ldC5jCisrKyBiL25ldC9kZWNuZXQvc3lzY3RsX25ldF9kZWNuZXQuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJfQogCiAJaWYgKHdyaXRlKSB7Ci0JCWludCBsZW4gPSAoKmxlbnAgPCBETl9BU0NCVUZfTEVOKSA/ICpsZW5wIDogKEROX0FTQ0JVRl9MRU4tMSk7CisJCWxlbiA9ICgqbGVucCA8IEROX0FTQ0JVRl9MRU4pID8gKmxlbnAgOiAoRE5fQVNDQlVGX0xFTi0xKTsKIAogCQlpZiAoY29weV9mcm9tX3VzZXIoYWRkciwgYnVmZmVyLCBsZW4pKQogCQkJcmV0dXJuIC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9uZXQvZHNhL0tjb25maWcgYi9uZXQvZHNhL0tjb25maWcKaW5kZXggNDkyMTFiMy4uYzUxYjU1NCAxMDA2NDQKLS0tIGEvbmV0L2RzYS9LY29uZmlnCisrKyBiL25ldC9kc2EvS2NvbmZpZwpAQCAtNDEsMTMgKzQxLDEzIEBACiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBORVRfRFNBX01WODhFNjEzMQotCWJvb2wgIk1hcnZlbGwgODhFNjEzMSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0IgorCWJvb2wgIk1hcnZlbGwgODhFNjA5NS82MDk1Ri82MTMxIGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCiAJc2VsZWN0IE5FVF9EU0FfTVY4OEU2WFhYCiAJc2VsZWN0IE5FVF9EU0FfTVY4OEU2WFhYX05FRURfUFBVCiAJc2VsZWN0IE5FVF9EU0FfVEFHX0RTQQogCS0tLWhlbHAtLS0KLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCA4OEU2MTMxIGV0aGVybmV0IHN3aXRjaAotCSAgY2hpcC4KKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFydmVsbCA4OEU2MDk1LzYwOTVGLzYxMzEKKwkgIGV0aGVybmV0IHN3aXRjaCBjaGlwcy4KIAogY29uZmlnIE5FVF9EU0FfTVY4OEU2MTIzXzYxXzY1CiAJYm9vbCAiTWFydmVsbCA4OEU2MTIzLzYxNjEvNjE2NSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9kc2EuYyBiL25ldC9kc2EvZHNhLmMKaW5kZXggMzNlOTk0Ni4uNzE0ODlmNiAxMDA2NDQKLS0tIGEvbmV0L2RzYS9kc2EuYworKysgYi9uZXQvZHNhL2RzYS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIG5ldC9kc2EvZHNhLmMgLSBIYXJkd2FyZSBzd2l0Y2ggaGFuZGxpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNjcsMTIgKzY3LDEzIEBACiAKIC8qIGJhc2ljIHN3aXRjaCBvcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCBkc2Ffc3dpdGNoICoKLWRzYV9zd2l0Y2hfc2V0dXAoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEgKnBkLAotCQkgc3RydWN0IG1paV9idXMgKmJ1cywgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2RzYV9zd2l0Y2hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0LCBpbnQgaW5kZXgsCisJCSBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCBtaWlfYnVzICpidXMpCiB7CisJc3RydWN0IGRzYV9jaGlwX2RhdGEgKnBkID0gZHN0LT5wZC0+Y2hpcCArIGluZGV4OworCXN0cnVjdCBkc2Ffc3dpdGNoX2RyaXZlciAqZHJ2OwogCXN0cnVjdCBkc2Ffc3dpdGNoICpkczsKIAlpbnQgcmV0OwotCXN0cnVjdCBkc2Ffc3dpdGNoX2RyaXZlciAqZHJ2OwogCWNoYXIgKm5hbWU7CiAJaW50IGk7CiAKQEAgLTgxLDExICs4MiwxMiBAQAogCSAqLwogCWRydiA9IGRzYV9zd2l0Y2hfcHJvYmUoYnVzLCBwZC0+c3dfYWRkciwgJm5hbWUpOwogCWlmIChkcnYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3QgZGV0ZWN0IGF0dGFjaGVkIHN3aXRjaFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXNbJWRdOiBjb3VsZCBub3QgZGV0ZWN0IGF0dGFjaGVkIHN3aXRjaFxuIiwKKwkJICAgICAgIGRzdC0+bWFzdGVyX25ldGRldi0+bmFtZSwgaW5kZXgpOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRldGVjdGVkIGEgJXMgc3dpdGNoXG4iLCBkZXYtPm5hbWUsIG5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiVzWyVkXTogZGV0ZWN0ZWQgYSAlcyBzd2l0Y2hcbiIsCisJCWRzdC0+bWFzdGVyX25ldGRldi0+bmFtZSwgaW5kZXgsIG5hbWUpOwogCiAKIAkvKgpAQCAtOTUsMTggKzk3LDE2IEBACiAJaWYgKGRzID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JZHMtPnBkID0gcGQ7Ci0JZHMtPm1hc3Rlcl9uZXRkZXYgPSBkZXY7Ci0JZHMtPm1hc3Rlcl9taWlfYnVzID0gYnVzOwotCisJZHMtPmRzdCA9IGRzdDsKKwlkcy0+aW5kZXggPSBpbmRleDsKKwlkcy0+cGQgPSBkc3QtPnBkLT5jaGlwICsgaW5kZXg7CiAJZHMtPmRydiA9IGRydjsKLQlkcy0+dGFnX3Byb3RvY29sID0gZHJ2LT50YWdfcHJvdG9jb2w7CisJZHMtPm1hc3Rlcl9taWlfYnVzID0gYnVzOwogCiAKIAkvKgogCSAqIFZhbGlkYXRlIHN1cHBsaWVkIHN3aXRjaCBjb25maWd1cmF0aW9uLgogCSAqLwotCWRzLT5jcHVfcG9ydCA9IC0xOwogCWZvciAoaSA9IDA7IGkgPCBEU0FfTUFYX1BPUlRTOyBpKyspIHsKIAkJY2hhciAqbmFtZTsKIApAQCAtMTE1LDMyICsxMTUsMjggQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghc3RyY21wKG5hbWUsICJjcHUiKSkgewotCQkJaWYgKGRzLT5jcHVfcG9ydCAhPSAtMSkgeworCQkJaWYgKGRzdC0+Y3B1X3N3aXRjaCAhPSAtMSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAibXVsdGlwbGUgY3B1IHBvcnRzPyFcbiIpOwogCQkJCXJldCA9IC1FSU5WQUw7CiAJCQkJZ290byBvdXQ7CiAJCQl9Ci0JCQlkcy0+Y3B1X3BvcnQgPSBpOworCQkJZHN0LT5jcHVfc3dpdGNoID0gaW5kZXg7CisJCQlkc3QtPmNwdV9wb3J0ID0gaTsKKwkJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJkc2EiKSkgeworCQkJZHMtPmRzYV9wb3J0X21hc2sgfD0gMSA8PCBpOwogCQl9IGVsc2UgewotCQkJZHMtPnZhbGlkX3BvcnRfbWFzayB8PSAxIDw8IGk7CisJCQlkcy0+cGh5c19wb3J0X21hc2sgfD0gMSA8PCBpOwogCQl9CiAJfQogCi0JaWYgKGRzLT5jcHVfcG9ydCA9PSAtMSkgewotCQlwcmludGsoS0VSTl9FUlIgIm5vIGNwdSBwb3J0PyFcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KIAogCS8qCi0JICogSWYgd2UgdXNlIGEgdGFnZ2luZyBmb3JtYXQgdGhhdCBkb2Vzbid0IGhhdmUgYW4gZXRoZXJ0eXBlCi0JICogZmllbGQsIG1ha2Ugc3VyZSB0aGF0IGFsbCBwYWNrZXRzIGZyb20gdGhpcyBwb2ludCBvbiBnZXQKLQkgKiBzZW50IHRvIHRoZSB0YWcgZm9ybWF0J3MgcmVjZWl2ZSBmdW5jdGlvbi4gIChXaGljaCB3aWxsCi0JICogZGlzY2FyZCByZWNlaXZlZCBwYWNrZXRzIHVudGlsIHdlIHNldCBkcy0+cG9ydHNbXSBiZWxvdy4pCisJICogSWYgdGhlIENQVSBjb25uZWN0cyB0byB0aGlzIHN3aXRjaCwgc2V0IHRoZSBzd2l0Y2ggdHJlZQorCSAqIHRhZ2dpbmcgcHJvdG9jb2wgdG8gdGhlIHByZWZlcnJlZCB0YWdnaW5nIGZvcm1hdCBvZiB0aGlzCisJICogc3dpdGNoLgogCSAqLwotCXdtYigpOwotCWRldi0+ZHNhX3B0ciA9ICh2b2lkICopZHM7CisJaWYgKGRzLT5kc3QtPmNwdV9zd2l0Y2ggPT0gaW5kZXgpCisJCWRzLT5kc3QtPnRhZ19wcm90b2NvbCA9IGRydi0+dGFnX3Byb3RvY29sOwogCiAKIAkvKgpAQCAtMTUwLDcgKzE0Niw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gZHJ2LT5zZXRfYWRkcihkcywgZGV2LT5kZXZfYWRkcik7CisJcmV0ID0gZHJ2LT5zZXRfYWRkcihkcywgZHN0LT5tYXN0ZXJfbmV0ZGV2LT5kZXZfYWRkcik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0xNjksMTggKzE2NSwxOCBAQAogCS8qCiAJICogQ3JlYXRlIG5ldHdvcmsgZGV2aWNlcyBmb3IgcGh5c2ljYWwgc3dpdGNoIHBvcnRzLgogCSAqLwotCXdtYigpOwogCWZvciAoaSA9IDA7IGkgPCBEU0FfTUFYX1BPUlRTOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKnNsYXZlX2RldjsKIAotCQlpZiAoIShkcy0+dmFsaWRfcG9ydF9tYXNrICYgKDEgPDwgaSkpKQorCQlpZiAoIShkcy0+cGh5c19wb3J0X21hc2sgJiAoMSA8PCBpKSkpCiAJCQljb250aW51ZTsKIAogCQlzbGF2ZV9kZXYgPSBkc2Ffc2xhdmVfY3JlYXRlKGRzLCBwYXJlbnQsIGksIHBkLT5wb3J0X25hbWVzW2ldKTsKIAkJaWYgKHNsYXZlX2RldiA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBjcmVhdGUgZHNhIHNsYXZlICIKLQkJCSAgICAgICAiZGV2aWNlIGZvciBwb3J0ICVkKCVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGksIHBkLT5wb3J0X25hbWVzW2ldKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXNbJWRdOiBjYW4ndCBjcmVhdGUgZHNhICIKKwkJCSAgICAgICAic2xhdmUgZGV2aWNlIGZvciBwb3J0ICVkKCVzKVxuIiwKKwkJCSAgICAgICBkc3QtPm1hc3Rlcl9uZXRkZXYtPm5hbWUsCisJCQkgICAgICAgaW5kZXgsIGksIHBkLT5wb3J0X25hbWVzW2ldKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTE5Miw3ICsxODgsNiBAQAogb3V0X2ZyZWU6CiAJbWRpb2J1c19mcmVlKGRzLT5zbGF2ZV9taWlfYnVzKTsKIG91dDoKLQlkZXYtPmRzYV9wdHIgPSBOVUxMOwogCWtmcmVlKGRzKTsKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQpAQCAtMjEyLDM1ICsyMDcsNDIgQEAKICAqLwogYm9vbCBkc2FfdXNlc19kc2FfdGFncyh2b2lkICpkc2FfcHRyKQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0ID0gZHNhX3B0cjsKIAotCXJldHVybiAhIShkcy0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX0RTQSkpOworCXJldHVybiAhIShkc3QtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9EU0EpKTsKIH0KIAogYm9vbCBkc2FfdXNlc190cmFpbGVyX3RhZ3Modm9pZCAqZHNhX3B0cikKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzYV9wdHI7CiAKLQlyZXR1cm4gISEoZHMtPnRhZ19wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9UUkFJTEVSKSk7CisJcmV0dXJuICEhKGRzdC0+dGFnX3Byb3RvY29sID09IGh0b25zKEVUSF9QX1RSQUlMRVIpKTsKIH0KIAogCiAvKiBsaW5rIHBvbGxpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkIGRzYV9saW5rX3BvbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKnVnbHkpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdDsKKwlpbnQgaTsKIAotCWRzID0gY29udGFpbmVyX29mKHVnbHksIHN0cnVjdCBkc2Ffc3dpdGNoLCBsaW5rX3BvbGxfd29yayk7CisJZHN0ID0gY29udGFpbmVyX29mKHVnbHksIHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUsIGxpbmtfcG9sbF93b3JrKTsKIAotCWRzLT5kcnYtPnBvbGxfbGluayhkcyk7Ci0JbW9kX3RpbWVyKCZkcy0+bGlua19wb2xsX3RpbWVyLCByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBIWikpOworCWZvciAoaSA9IDA7IGkgPCBkc3QtPnBkLT5ucl9jaGlwczsgaSsrKSB7CisJCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzdC0+ZHNbaV07CisKKwkJaWYgKGRzICE9IE5VTEwgJiYgZHMtPmRydi0+cG9sbF9saW5rICE9IE5VTEwpCisJCQlkcy0+ZHJ2LT5wb2xsX2xpbmsoZHMpOworCX0KKworCW1vZF90aW1lcigmZHN0LT5saW5rX3BvbGxfdGltZXIsIHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzYV9saW5rX3BvbGxfdGltZXIodW5zaWduZWQgbG9uZyBfZHMpCitzdGF0aWMgdm9pZCBkc2FfbGlua19wb2xsX3RpbWVyKHVuc2lnbmVkIGxvbmcgX2RzdCkKIHsKLQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSAodm9pZCAqKV9kczsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSAodm9pZCAqKV9kc3Q7CiAKLQlzY2hlZHVsZV93b3JrKCZkcy0+bGlua19wb2xsX3dvcmspOworCXNjaGVkdWxlX3dvcmsoJmRzdC0+bGlua19wb2xsX3dvcmspOwogfQogCiAKQEAgLTMwMywxOCArMzA1LDE0IEBACiAJc3RhdGljIGludCBkc2FfdmVyc2lvbl9wcmludGVkOwogCXN0cnVjdCBkc2FfcGxhdGZvcm1fZGF0YSAqcGQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBtaWlfYnVzICpidXM7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdDsKKwlpbnQgaTsKIAogCWlmICghZHNhX3ZlcnNpb25fcHJpbnRlZCsrKQogCQlwcmludGsoS0VSTl9OT1RJQ0UgIkRpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgIgogCQkJImRyaXZlciB2ZXJzaW9uICVzXG4iLCBkc2FfZHJpdmVyX3ZlcnNpb24pOwogCi0JaWYgKHBkID09IE5VTEwgfHwgcGQtPm1paV9idXMgPT0gTlVMTCB8fCBwZC0+bmV0ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYnVzID0gZGV2X3RvX21paV9idXMocGQtPm1paV9idXMpOwotCWlmIChidXMgPT0gTlVMTCkKKwlpZiAocGQgPT0gTlVMTCB8fCBwZC0+bmV0ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGV2ID0gZGV2X3RvX25ldF9kZXZpY2UocGQtPm5ldGRldik7CkBAIC0zMjYsMzYgKzMyNCw3OSBAQAogCQlyZXR1cm4gLUVFWElTVDsKIAl9CiAKLQlkcyA9IGRzYV9zd2l0Y2hfc2V0dXAoJnBkZXYtPmRldiwgcGQsIGJ1cywgZGV2KTsKLQlpZiAoSVNfRVJSKGRzKSkgeworCWRzdCA9IGt6YWxsb2Moc2l6ZW9mKCpkc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZHN0ID09IE5VTEwpIHsKIAkJZGV2X3B1dChkZXYpOwotCQlyZXR1cm4gUFRSX0VSUihkcyk7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWlmIChkcy0+ZHJ2LT5wb2xsX2xpbmsgIT0gTlVMTCkgewotCQlJTklUX1dPUksoJmRzLT5saW5rX3BvbGxfd29yaywgZHNhX2xpbmtfcG9sbF93b3JrKTsKLQkJaW5pdF90aW1lcigmZHMtPmxpbmtfcG9sbF90aW1lcik7Ci0JCWRzLT5saW5rX3BvbGxfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRzOwotCQlkcy0+bGlua19wb2xsX3RpbWVyLmZ1bmN0aW9uID0gZHNhX2xpbmtfcG9sbF90aW1lcjsKLQkJZHMtPmxpbmtfcG9sbF90aW1lci5leHBpcmVzID0gcm91bmRfamlmZmllcyhqaWZmaWVzICsgSFopOwotCQlhZGRfdGltZXIoJmRzLT5saW5rX3BvbGxfdGltZXIpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRzdCk7CisKKwlkc3QtPnBkID0gcGQ7CisJZHN0LT5tYXN0ZXJfbmV0ZGV2ID0gZGV2OworCWRzdC0+Y3B1X3N3aXRjaCA9IC0xOworCWRzdC0+Y3B1X3BvcnQgPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBwZC0+bnJfY2hpcHM7IGkrKykgeworCQlzdHJ1Y3QgbWlpX2J1cyAqYnVzOworCQlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CisKKwkJYnVzID0gZGV2X3RvX21paV9idXMocGQtPmNoaXBbaV0ubWlpX2J1cyk7CisJCWlmIChidXMgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlc1slZF06IG5vIG1paSBidXMgZm91bmQgZm9yICIKKwkJCQkiZHNhIHN3aXRjaFxuIiwgZGV2LT5uYW1lLCBpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZHMgPSBkc2Ffc3dpdGNoX3NldHVwKGRzdCwgaSwgJnBkZXYtPmRldiwgYnVzKTsKKwkJaWYgKElTX0VSUihkcykpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXNbJWRdOiBjb3VsZG4ndCBjcmVhdGUgZHNhIHN3aXRjaCAiCisJCQkJImluc3RhbmNlIChlcnJvciAlbGQpXG4iLCBkZXYtPm5hbWUsIGksCisJCQkJUFRSX0VSUihkcykpOworCQkJY29udGludWU7CisJCX0KKworCQlkc3QtPmRzW2ldID0gZHM7CisJCWlmIChkcy0+ZHJ2LT5wb2xsX2xpbmsgIT0gTlVMTCkKKwkJCWRzdC0+bGlua19wb2xsX25lZWRlZCA9IDE7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHMpOworCS8qCisJICogSWYgd2UgdXNlIGEgdGFnZ2luZyBmb3JtYXQgdGhhdCBkb2Vzbid0IGhhdmUgYW4gZXRoZXJ0eXBlCisJICogZmllbGQsIG1ha2Ugc3VyZSB0aGF0IGFsbCBwYWNrZXRzIGZyb20gdGhpcyBwb2ludCBvbiBnZXQKKwkgKiBzZW50IHRvIHRoZSB0YWcgZm9ybWF0J3MgcmVjZWl2ZSBmdW5jdGlvbi4KKwkgKi8KKwl3bWIoKTsKKwlkZXYtPmRzYV9wdHIgPSAodm9pZCAqKWRzdDsKKworCWlmIChkc3QtPmxpbmtfcG9sbF9uZWVkZWQpIHsKKwkJSU5JVF9XT1JLKCZkc3QtPmxpbmtfcG9sbF93b3JrLCBkc2FfbGlua19wb2xsX3dvcmspOworCQlpbml0X3RpbWVyKCZkc3QtPmxpbmtfcG9sbF90aW1lcik7CisJCWRzdC0+bGlua19wb2xsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkc3Q7CisJCWRzdC0+bGlua19wb2xsX3RpbWVyLmZ1bmN0aW9uID0gZHNhX2xpbmtfcG9sbF90aW1lcjsKKwkJZHN0LT5saW5rX3BvbGxfdGltZXIuZXhwaXJlcyA9IHJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKTsKKwkJYWRkX3RpbWVyKCZkc3QtPmxpbmtfcG9sbF90aW1lcik7CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZHNhX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOwogCi0JaWYgKGRzLT5kcnYtPnBvbGxfbGluayAhPSBOVUxMKQotCQlkZWxfdGltZXJfc3luYygmZHMtPmxpbmtfcG9sbF90aW1lcik7CisJaWYgKGRzdC0+bGlua19wb2xsX25lZWRlZCkKKwkJZGVsX3RpbWVyX3N5bmMoJmRzdC0+bGlua19wb2xsX3RpbWVyKTsKIAogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKLQlkc2Ffc3dpdGNoX2Rlc3Ryb3koZHMpOworCWZvciAoaSA9IDA7IGkgPCBkc3QtPnBkLT5ucl9jaGlwczsgaSsrKSB7CisJCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzdC0+ZHNbaV07CisKKwkJaWYgKGRzICE9IE5VTEwpCisJCQlkc2Ffc3dpdGNoX2Rlc3Ryb3koZHMpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9kc2FfcHJpdi5oIGIvbmV0L2RzYS9kc2FfcHJpdi5oCmluZGV4IDcwNjMzNzguLjQxMDU1ZjMgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvZHNhX3ByaXYuaAorKysgYi9uZXQvZHNhL2RzYV9wcml2LmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS9kc2FfcHJpdi5oIC0gSGFyZHdhcmUgc3dpdGNoIGhhbmRsaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5LDQyICsxOSwxMDcgQEAKIAogc3RydWN0IGRzYV9zd2l0Y2ggewogCS8qCi0JICogQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgcGxhdGZvcm0gZGV2aWNlIHRoYXQgb3ducwotCSAqIHRoaXMgZHNhIHN3aXRjaCBpbnN0YW5jZS4KKwkgKiBQYXJlbnQgc3dpdGNoIHRyZWUsIGFuZCBzd2l0Y2ggaW5kZXguCiAJICovCi0Jc3RydWN0IGRzYV9wbGF0Zm9ybV9kYXRhCSpwZDsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlCSpkc3Q7CisJaW50CQkJaW5kZXg7CiAKIAkvKgotCSAqIFJlZmVyZW5jZXMgdG8gbmV0d29yayBkZXZpY2UgYW5kIG1paSBidXMgdG8gdXNlLgorCSAqIENvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhpcyBzd2l0Y2guCiAJICovCi0Jc3RydWN0IG5ldF9kZXZpY2UJCSptYXN0ZXJfbmV0ZGV2OwotCXN0cnVjdCBtaWlfYnVzCQkJKm1hc3Rlcl9taWlfYnVzOworCXN0cnVjdCBkc2FfY2hpcF9kYXRhCSpwZDsKIAogCS8qCi0JICogVGhlIHVzZWQgc3dpdGNoIGRyaXZlciBhbmQgZnJhbWUgdGFnZ2luZyB0eXBlLgorCSAqIFRoZSB1c2VkIHN3aXRjaCBkcml2ZXIuCiAJICovCiAJc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyCSpkcnY7Ci0JX19iZTE2CQkJCXRhZ19wcm90b2NvbDsKKworCS8qCisJICogUmVmZXJlbmNlIHRvIG1paSBidXMgdG8gdXNlLgorCSAqLworCXN0cnVjdCBtaWlfYnVzCQkqbWFzdGVyX21paV9idXM7CiAKIAkvKgogCSAqIFNsYXZlIG1paV9idXMgYW5kIGRldmljZXMgZm9yIHRoZSBpbmRpdmlkdWFsIHBvcnRzLgogCSAqLwotCWludAkJCQljcHVfcG9ydDsKLQl1MzIJCQkJdmFsaWRfcG9ydF9tYXNrOwotCXN0cnVjdCBtaWlfYnVzCQkJKnNsYXZlX21paV9idXM7Ci0Jc3RydWN0IG5ldF9kZXZpY2UJCSpwb3J0c1tEU0FfTUFYX1BPUlRTXTsKKwl1MzIJCQlkc2FfcG9ydF9tYXNrOworCXUzMgkJCXBoeXNfcG9ydF9tYXNrOworCXN0cnVjdCBtaWlfYnVzCQkqc2xhdmVfbWlpX2J1czsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqcG9ydHNbRFNBX01BWF9QT1JUU107Cit9OworCitzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlIHsKKwkvKgorCSAqIENvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhlIHBsYXRmb3JtIGRldmljZSB0aGF0IG93bnMKKwkgKiB0aGlzIGRzYSBzd2l0Y2ggdHJlZSBpbnN0YW5jZS4KKwkgKi8KKwlzdHJ1Y3QgZHNhX3BsYXRmb3JtX2RhdGEJKnBkOworCisJLyoKKwkgKiBSZWZlcmVuY2UgdG8gbmV0d29yayBkZXZpY2UgdG8gdXNlLCBhbmQgd2hpY2ggdGFnZ2luZworCSAqIHByb3RvY29sIHRvIHVzZS4KKwkgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZQkqbWFzdGVyX25ldGRldjsKKwlfX2JlMTYJCQl0YWdfcHJvdG9jb2w7CisKKwkvKgorCSAqIFRoZSBzd2l0Y2ggYW5kIHBvcnQgdG8gd2hpY2ggdGhlIENQVSBpcyBhdHRhY2hlZC4KKwkgKi8KKwlzOAkJCWNwdV9zd2l0Y2g7CisJczgJCQljcHVfcG9ydDsKIAogCS8qCiAJICogTGluayBzdGF0ZSBwb2xsaW5nLgogCSAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdAkJbGlua19wb2xsX3dvcms7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJCWxpbmtfcG9sbF90aW1lcjsKKwlpbnQJCQlsaW5rX3BvbGxfbmVlZGVkOworCXN0cnVjdCB3b3JrX3N0cnVjdAlsaW5rX3BvbGxfd29yazsKKwlzdHJ1Y3QgdGltZXJfbGlzdAlsaW5rX3BvbGxfdGltZXI7CisKKwkvKgorCSAqIERhdGEgZm9yIHRoZSBpbmRpdmlkdWFsIHN3aXRjaCBjaGlwcy4KKwkgKi8KKwlzdHJ1Y3QgZHNhX3N3aXRjaAkqZHNbRFNBX01BWF9TV0lUQ0hFU107CiB9OwogCitzdGF0aWMgaW5saW5lIGJvb2wgZHNhX2lzX2NwdV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHApCit7CisJcmV0dXJuICEhKGRzLT5pbmRleCA9PSBkcy0+ZHN0LT5jcHVfc3dpdGNoICYmIHAgPT0gZHMtPmRzdC0+Y3B1X3BvcnQpOworfQorCitzdGF0aWMgaW5saW5lIHU4IGRzYV91cHN0cmVhbV9wb3J0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKK3sKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkcy0+ZHN0OworCisJLyoKKwkgKiBJZiB0aGlzIGlzIHRoZSByb290IHN3aXRjaCAoaS5lLiB0aGUgc3dpdGNoIHRoYXQgY29ubmVjdHMKKwkgKiB0byB0aGUgQ1BVKSwgcmV0dXJuIHRoZSBjcHUgcG9ydCBudW1iZXIgb24gdGhpcyBzd2l0Y2guCisJICogRWxzZSByZXR1cm4gdGhlIChEU0EpIHBvcnQgbnVtYmVyIHRoYXQgY29ubmVjdHMgdG8gdGhlCisJICogc3dpdGNoIHRoYXQgaXMgb25lIGhvcCBjbG9zZXIgdG8gdGhlIGNwdS4KKwkgKi8KKwlpZiAoZHN0LT5jcHVfc3dpdGNoID09IGRzLT5pbmRleCkKKwkJcmV0dXJuIGRzdC0+Y3B1X3BvcnQ7CisJZWxzZQorCQlyZXR1cm4gZHMtPnBkLT5ydGFibGVbZHN0LT5jcHVfc3dpdGNoXTsKK30KKwogc3RydWN0IGRzYV9zbGF2ZV9wcml2IHsKKwkvKgorCSAqIFRoZSBsaW51eCBuZXR3b3JrIGludGVyZmFjZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMKKwkgKiBzd2l0Y2ggcG9ydC4KKwkgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OworCisJLyoKKwkgKiBXaGljaCBzd2l0Y2ggdGhpcyBwb3J0IGlzIGEgcGFydCBvZiwgYW5kIHRoZSBwb3J0IGluZGV4CisJICogZm9yIHRoaXMgcG9ydC4KKwkgKi8KIAlzdHJ1Y3QgZHNhX3N3aXRjaAkqcGFyZW50OwotCWludAkJCXBvcnQ7CisJdTgJCQlwb3J0OworCisJLyoKKwkgKiBUaGUgcGh5bGliIHBoeV9kZXZpY2UgcG9pbnRlciBmb3IgdGhlIFBIWSBjb25uZWN0ZWQKKwkgKiB0byB0aGlzIHBvcnQuCisJICovCiAJc3RydWN0IHBoeV9kZXZpY2UJKnBoeTsKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9kc2EvbXY4OGU2MDYwLmMgYi9uZXQvZHNhL212ODhlNjA2MC5jCmluZGV4IDg1MDgxYWUuLjgzMjc3ZjQgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvbXY4OGU2MDYwLmMKKysrIGIvbmV0L2RzYS9tdjg4ZTYwNjAuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL212ODhlNjA2MC5jIC0gRHJpdmVyIGZvciBNYXJ2ZWxsIDg4ZTYwNjAgc3dpdGNoIGNoaXBzCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTgxLDcgKzgxLDcgQEAKIAkvKgogCSAqIFJlc2V0IHRoZSBzd2l0Y2guCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MEEsIDB4YTEzMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MGEsIDB4YTEzMCk7CiAKIAkvKgogCSAqIFdhaXQgdXAgdG8gb25lIHNlY29uZCBmb3IgcmVzZXQgdG8gY29tcGxldGUuCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkgKiBzdGF0ZSB0byBGb3J3YXJkaW5nLiAgQWRkaXRpb25hbGx5LCBpZiB0aGlzIGlzIHRoZSBDUFUKIAkgKiBwb3J0LCBlbmFibGUgSW5ncmVzcyBhbmQgRWdyZXNzIFRyYWlsZXIgdGFnZ2luZyBtb2RlLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA0LCAocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHg0MTAzIDogMHgwMDAzKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNCwgZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/ICAweDQxMDMgOiAweDAwMDMpOwogCiAJLyoKIAkgKiBQb3J0IGJhc2VkIFZMQU4gbWFwOiBnaXZlIGVhY2ggcG9ydCBpdHMgb3duIGFkZHJlc3MKQEAgLTEzOCw5ICsxMzgsOSBAQAogCSAqLwogCVJFR19XUklURShhZGRyLCAweDA2LAogCQkJKChwICYgMHhmKSA8PCAxMikgfAotCQkJICgocCA9PSBkcy0+Y3B1X3BvcnQpID8KLQkJCQlkcy0+dmFsaWRfcG9ydF9tYXNrIDoKLQkJCQkoMSA8PCBkcy0+Y3B1X3BvcnQpKSk7CisJCQkgKGRzYV9pc19jcHVfcG9ydChkcywgcCkgPworCQkJCWRzLT5waHlzX3BvcnRfbWFzayA6CisJCQkJKDEgPDwgZHMtPmRzdC0+Y3B1X3BvcnQpKSk7CiAKIAkvKgogCSAqIFBvcnQgQXNzb2NpYXRpb24gVmVjdG9yOiB3aGVuIGxlYXJuaW5nIHNvdXJjZSBhZGRyZXNzZXMKZGlmZiAtLWdpdCBhL25ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMgYi9uZXQvZHNhL212ODhlNjEyM182MV82NS5jCmluZGV4IGVjOGM2YTAuLjUyZmFhYTIgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvbXY4OGU2MTIzXzYxXzY1LmMKKysrIGIvbmV0L2RzYS9tdjg4ZTYxMjNfNjFfNjUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL212ODhlNjEyM182MV82NS5jIC0gTWFydmVsbCA4OGU2MTIzLzYxNjEvNjE2NSBzd2l0Y2ggY2hpcCBzdXBwb3J0Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTk4LDE3ICs5OCwxNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJLyoKLQkgKiBDb25maWd1cmUgdGhlIGNwdSBwb3J0LCBhbmQgY29uZmlndXJlIHRoZSBjcHUgcG9ydCBhcyB0aGUKLQkgKiBwb3J0IHRvIHdoaWNoIGluZ3Jlc3MgYW5kIGVncmVzcyBtb25pdG9yIGZyYW1lcyBhcmUgdG8gYmUKLQkgKiBzZW50LgorCSAqIENvbmZpZ3VyZSB0aGUgdXBzdHJlYW0gcG9ydCwgYW5kIGNvbmZpZ3VyZSB0aGUgdXBzdHJlYW0KKwkgKiBwb3J0IGFzIHRoZSBwb3J0IHRvIHdoaWNoIGluZ3Jlc3MgYW5kIGVncmVzcyBtb25pdG9yIGZyYW1lcworCSAqIGFyZSB0byBiZSBzZW50LgogCSAqLwotCVJFR19XUklURShSRUdfR0xPQkFMLCAweDFhLCAoZHMtPmNwdV9wb3J0ICogMHgxMTEwKSk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWEsIChkc2FfdXBzdHJlYW1fcG9ydChkcykgKiAweDExMTApKTsKIAogCS8qCiAJICogRGlzYWJsZSByZW1vdGUgbWFuYWdlbWVudCBmb3Igbm93LCBhbmQgc2V0IHRoZSBzd2l0Y2gncwotCSAqIERTQSBkZXZpY2UgbnVtYmVyIHRvIHplcm8uCisJICogRFNBIGRldmljZSBudW1iZXIuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIDB4MDAwMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIGRzLT5pbmRleCAmIDB4MWYpOwogCiAJLyoKIAkgKiBTZW5kIGFsbCBmcmFtZXMgd2l0aCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgbWF0Y2hpbmcKQEAgLTEzMywxMCArMTMzLDE3IEBACiAJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA1LCAweDAwZmYpOwogCiAJLyoKLQkgKiBNYXAgYWxsIERTQSBkZXZpY2UgSURzIHRvIHRoZSBDUFUgcG9ydC4KKwkgKiBQcm9ncmFtIHRoZSBEU0Egcm91dGluZyB0YWJsZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKLQkJUkVHX1dSSVRFKFJFR19HTE9CQUwyLCAweDA2LCAweDgwMDAgfCAoaSA8PCA4KSB8IGRzLT5jcHVfcG9ydCk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaW50IG5leHRob3A7CisKKwkJbmV4dGhvcCA9IDB4MWY7CisJCWlmIChpICE9IGRzLT5pbmRleCAmJiBpIDwgZHMtPmRzdC0+cGQtPm5yX2NoaXBzKQorCQkJbmV4dGhvcCA9IGRzLT5wZC0+cnRhYmxlW2ldICYgMHgxZjsKKworCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgbmV4dGhvcCk7CisJfQogCiAJLyoKIAkgKiBDbGVhciBhbGwgdHJ1bmsgbWFza3MuCkBAIC0xNzYsMTIgKzE4MywxOCBAQAogc3RhdGljIGludCBtdjg4ZTYxMjNfNjFfNjVfc2V0dXBfcG9ydChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwKQogewogCWludCBhZGRyID0gUkVHX1BPUlQocCk7CisJdTE2IHZhbDsKIAogCS8qCiAJICogTUFDIEZvcmNpbmcgcmVnaXN0ZXI6IGRvbid0IGZvcmNlIGxpbmssIHNwZWVkLCBkdXBsZXgKLQkgKiBvciBmbG93IGNvbnRyb2wgc3RhdGUgdG8gYW55IHBhcnRpY3VsYXIgdmFsdWVzLgorCSAqIG9yIGZsb3cgY29udHJvbCBzdGF0ZSB0byBhbnkgcGFydGljdWxhciB2YWx1ZXMgb24gcGh5c2ljYWwKKwkgKiBwb3J0cywgYnV0IGZvcmNlIHRoZSBDUFUgcG9ydCBhbmQgYWxsIERTQSBwb3J0cyB0byAxMDAwIE1iL3MKKwkgKiBmdWxsIGR1cGxleC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDAzKTsKKwlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSB8fCBkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQorCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDNlKTsKKwllbHNlCisJCVJFR19XUklURShhZGRyLCAweDAxLCAweDAwMDMpOwogCiAJLyoKIAkgKiBEbyBub3QgbGltaXQgdGhlIHBlcmlvZCBvZiB0aW1lIHRoYXQgdGhpcyBwb3J0IGNhbiBiZQpAQCAtMTkyLDM3ICsyMDUsNTAgQEAKIAogCS8qCiAJICogUG9ydCBDb250cm9sOiBkaXNhYmxlIERyb3Atb24tVW5sb2NrLCBkaXNhYmxlIERyb3Atb24tTG9jaywKLQkgKiBjb25maWd1cmUgdGhlIHJlcXVlc3RlZCAoRFNBL0VEU0EpIHRhZ2dpbmcgbW9kZSBpZiB0aGlzIGlzCi0JICogdGhlIENQVSBwb3J0LCBkaXNhYmxlIEhlYWRlciBtb2RlLCBlbmFibGUgSUdNUC9NTEQgc25vb3BpbmcsCi0JICogZGlzYWJsZSBWTEFOIHR1bm5lbGluZywgZGV0ZXJtaW5lIHByaW9yaXR5IGJ5IGxvb2tpbmcgYXQKLQkgKiA4MDIuMXAgYW5kIElQIHByaW9yaXR5IGZpZWxkcyAoSVAgcHJpbyBoYXMgcHJlY2VkZW5jZSksIGFuZAotCSAqIHNldCBTVFAgc3RhdGUgdG8gRm9yd2FyZGluZy4gIEZpbmFsbHksIGlmIHRoaXMgaXMgdGhlIENQVQotCSAqIHBvcnQsIGFkZGl0aW9uYWxseSBlbmFibGUgZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3QgYW5kCi0JICogbXVsdGljYXN0IGFkZHJlc3Nlcy4KKwkgKiBkaXNhYmxlIEhlYWRlciBtb2RlLCBlbmFibGUgSUdNUC9NTEQgc25vb3BpbmcsIGRpc2FibGUgVkxBTgorCSAqIHR1bm5lbGluZywgZGV0ZXJtaW5lIHByaW9yaXR5IGJ5IGxvb2tpbmcgYXQgODAyLjFwIGFuZCBJUAorCSAqIHByaW9yaXR5IGZpZWxkcyAoSVAgcHJpbyBoYXMgcHJlY2VkZW5jZSksIGFuZCBzZXQgU1RQIHN0YXRlCisJICogdG8gRm9yd2FyZGluZy4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIENQVSBsaW5rLCB1c2UgRFNBIG9yIEVEU0EgdGFnZ2luZyBkZXBlbmRpbmcKKwkgKiBvbiB3aGljaCB0YWdnaW5nIG1vZGUgd2FzIGNvbmZpZ3VyZWQuCisJICoKKwkgKiBJZiB0aGlzIGlzIGEgbGluayB0byBhbm90aGVyIHN3aXRjaCwgdXNlIERTQSB0YWdnaW5nIG1vZGUuCisJICoKKwkgKiBJZiB0aGlzIGlzIHRoZSB1cHN0cmVhbSBwb3J0IGZvciB0aGlzIHN3aXRjaCwgZW5hYmxlCisJICogZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3RzIGFuZCBtdWx0aWNhc3RzLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA0LAotCQkJKHAgPT0gZHMtPmNwdV9wb3J0KSA/Ci0JCQkgKGRzLT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRFNBKSkgPwotCQkJICAweDA1M2YgOiAweDM3M2YgOgotCQkJIDB4MDQzMyk7CisJdmFsID0gMHgwNDMzOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApKSB7CisJCWlmIChkcy0+ZHN0LT50YWdfcHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfRURTQSkpCisJCQl2YWwgfD0gMHgzMzAwOworCQllbHNlCisJCQl2YWwgfD0gMHgwMTAwOworCX0KKwlpZiAoZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKKwkJdmFsIHw9IDB4MDEwMDsKKwlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCisJCXZhbCB8PSAweDAwMGM7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDQsIHZhbCk7CiAKIAkvKgogCSAqIFBvcnQgQ29udHJvbCAxOiBkaXNhYmxlIHRydW5raW5nLiAgQWxzbywgaWYgdGhpcyBpcyB0aGUKIAkgKiBDUFUgcG9ydCwgZW5hYmxlIGxlYXJuIG1lc3NhZ2VzIHRvIGJlIHNlbnQgdG8gdGhpcyBwb3J0LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA1LCAocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHg4MDAwIDogMHgwMDAwKTsKKwlSRUdfV1JJVEUoYWRkciwgMHgwNSwgZHNhX2lzX2NwdV9wb3J0KGRzLCBwKSA/IDB4ODAwMCA6IDB4MDAwMCk7CiAKIAkvKgogCSAqIFBvcnQgYmFzZWQgVkxBTiBtYXA6IGdpdmUgZWFjaCBwb3J0IGl0cyBvd24gYWRkcmVzcwogCSAqIGRhdGFiYXNlLCBhbGxvdyB0aGUgQ1BVIHBvcnQgdG8gdGFsayB0byBlYWNoIG9mIHRoZSAncmVhbCcKIAkgKiBwb3J0cywgYW5kIGFsbG93IGVhY2ggb2YgdGhlICdyZWFsJyBwb3J0cyB0byBvbmx5IHRhbGsgdG8KLQkgKiB0aGUgQ1BVIHBvcnQuCisJICogdGhlIHVwc3RyZWFtIHBvcnQuCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDYsCi0JCQkoKHAgJiAweGYpIDw8IDEyKSB8Ci0JCQkgKChwID09IGRzLT5jcHVfcG9ydCkgPwotCQkJCWRzLT52YWxpZF9wb3J0X21hc2sgOgotCQkJCSgxIDw8IGRzLT5jcHVfcG9ydCkpKTsKKwl2YWwgPSAocCAmIDB4ZikgPDwgMTI7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkpCisJCXZhbCB8PSBkcy0+cGh5c19wb3J0X21hc2s7CisJZWxzZQorCQl2YWwgfD0gMSA8PCBkc2FfdXBzdHJlYW1fcG9ydChkcyk7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDYsIHZhbCk7CiAKIAkvKgogCSAqIERlZmF1bHQgVkxBTiBJRCBhbmQgcHJpb3JpdHk6IGRvbid0IHNldCBhIGRlZmF1bHQgVkxBTgpAQCAtMzk0LDcgKzQyMCw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHNhX3N3aXRjaF9kcml2ZXIgbXY4OGU2MTIzXzYxXzY1X3N3aXRjaF9kcml2ZXIgPSB7Ci0JLnRhZ19wcm90b2NvbAkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0VEU0EpLAorCS50YWdfcHJvdG9jb2wJCT0gY3B1X3RvX2JlMTYoRVRIX1BfRURTQSksCiAJLnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IG12ODhlNnh4eF9wcml2X3N0YXRlKSwKIAkucHJvYmUJCQk9IG12ODhlNjEyM182MV82NV9wcm9iZSwKIAkuc2V0dXAJCQk9IG12ODhlNjEyM182MV82NV9zZXR1cCwKZGlmZiAtLWdpdCBhL25ldC9kc2EvbXY4OGU2MTMxLmMgYi9uZXQvZHNhL212ODhlNjEzMS5jCmluZGV4IDM3NGQ0NmEuLmJiMmI0MWIgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvbXY4OGU2MTMxLmMKKysrIGIvbmV0L2RzYS9tdjg4ZTYxMzEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBuZXQvZHNhL212ODhlNjEzMS5jIC0gTWFydmVsbCA4OGU2MTMxIHN3aXRjaCBjaGlwIHN1cHBvcnQKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIG5ldC9kc2EvbXY4OGU2MTMxLmMgLSBNYXJ2ZWxsIDg4ZTYwOTUvNjA5NWYvNjEzMSBzd2l0Y2ggY2hpcCBzdXBwb3J0CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIxLDYgKzIxLDggQEAKIAlyZXQgPSBfX212ODhlNnh4eF9yZWdfcmVhZChidXMsIHN3X2FkZHIsIFJFR19QT1JUKDApLCAweDAzKTsKIAlpZiAocmV0ID49IDApIHsKIAkJcmV0ICY9IDB4ZmZmMDsKKwkJaWYgKHJldCA9PSAweDA5NTApCisJCQlyZXR1cm4gIk1hcnZlbGwgODhFNjA5NS84OEU2MDk1RiI7CiAJCWlmIChyZXQgPT0gMHgxMDYwKQogCQkJcmV0dXJuICJNYXJ2ZWxsIDg4RTYxMzEiOwogCX0KQEAgLTM2LDcgKzM4LDcgQEAKIAkvKgogCSAqIFNldCBhbGwgcG9ydHMgdG8gdGhlIGRpc2FibGVkIHN0YXRlLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykgewogCQlyZXQgPSBSRUdfUkVBRChSRUdfUE9SVChpKSwgMHgwNCk7CiAJCVJFR19XUklURShSRUdfUE9SVChpKSwgMHgwNCwgcmV0ICYgMHhmZmZjKTsKIAl9CkBAIC0xMDAsMTcgKzEwMiwxNyBAQAogCVJFR19XUklURShSRUdfR0xPQkFMLCAweDE5LCAweDgxMDApOwogCiAJLyoKLQkgKiBEaXNhYmxlIEFSUCBtaXJyb3JpbmcsIGFuZCBjb25maWd1cmUgdGhlIGNwdSBwb3J0IGFzIHRoZQotCSAqIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzIGFyZSB0byBiZQotCSAqIHNlbnQuCisJICogRGlzYWJsZSBBUlAgbWlycm9yaW5nLCBhbmQgY29uZmlndXJlIHRoZSB1cHN0cmVhbSBwb3J0IGFzCisJICogdGhlIHBvcnQgdG8gd2hpY2ggaW5ncmVzcyBhbmQgZWdyZXNzIG1vbml0b3IgZnJhbWVzIGFyZSB0bworCSAqIGJlIHNlbnQuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWEsIChkcy0+Y3B1X3BvcnQgKiAweDExMDApIHwgMHgwMGYwKTsKKwlSRUdfV1JJVEUoUkVHX0dMT0JBTCwgMHgxYSwgKGRzYV91cHN0cmVhbV9wb3J0KGRzKSAqIDB4MTEwMCkgfCAweDAwZjApOwogCiAJLyoKIAkgKiBEaXNhYmxlIGNhc2NhZGUgcG9ydCBmdW5jdGlvbmFsaXR5LCBhbmQgc2V0IHRoZSBzd2l0Y2gncwotCSAqIERTQSBkZXZpY2UgbnVtYmVyIHRvIHplcm8uCisJICogRFNBIGRldmljZSBudW1iZXIuCiAJICovCi0JUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIDB4ZTAwMCk7CisJUkVHX1dSSVRFKFJFR19HTE9CQUwsIDB4MWMsIDB4ZTAwMCB8IChkcy0+aW5kZXggJiAweDFmKSk7CiAKIAkvKgogCSAqIFNlbmQgYWxsIGZyYW1lcyB3aXRoIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBtYXRjaGluZwpAQCAtMTI3LDE2ICsxMjksMjMgQEAKIAlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDUsIDB4MDBmZik7CiAKIAkvKgotCSAqIE1hcCBhbGwgRFNBIGRldmljZSBJRHMgdG8gdGhlIENQVSBwb3J0LgorCSAqIFByb2dyYW0gdGhlIERTQSByb3V0aW5nIHRhYmxlLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQotCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgZHMtPmNwdV9wb3J0KTsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpbnQgbmV4dGhvcDsKKworCQluZXh0aG9wID0gMHgxZjsKKwkJaWYgKGkgIT0gZHMtPmluZGV4ICYmIGkgPCBkcy0+ZHN0LT5wZC0+bnJfY2hpcHMpCisJCQluZXh0aG9wID0gZHMtPnBkLT5ydGFibGVbaV0gJiAweDFmOworCisJCVJFR19XUklURShSRUdfR0xPQkFMMiwgMHgwNiwgMHg4MDAwIHwgKGkgPDwgOCkgfCBuZXh0aG9wKTsKKwl9CiAKIAkvKgogCSAqIENsZWFyIGFsbCB0cnVuayBtYXNrcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDcsIDB4ODAwMCB8IChpIDw8IDEyKSB8IDB4ZmYpOworCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDcsIDB4ODAwMCB8IChpIDw8IDEyKSB8IDB4N2ZmKTsKIAogCS8qCiAJICogQ2xlYXIgYWxsIHRydW5rIG1hcHBpbmdzLgpAQCAtMTU2LDEyICsxNjUsMTggQEAKIHN0YXRpYyBpbnQgbXY4OGU2MTMxX3NldHVwX3BvcnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcCkKIHsKIAlpbnQgYWRkciA9IFJFR19QT1JUKHApOworCXUxNiB2YWw7CiAKIAkvKgogCSAqIE1BQyBGb3JjaW5nIHJlZ2lzdGVyOiBkb24ndCBmb3JjZSBsaW5rLCBzcGVlZCwgZHVwbGV4Ci0JICogb3IgZmxvdyBjb250cm9sIHN0YXRlIHRvIGFueSBwYXJ0aWN1bGFyIHZhbHVlcy4KKwkgKiBvciBmbG93IGNvbnRyb2wgc3RhdGUgdG8gYW55IHBhcnRpY3VsYXIgdmFsdWVzIG9uIHBoeXNpY2FsCisJICogcG9ydHMsIGJ1dCBmb3JjZSB0aGUgQ1BVIHBvcnQgYW5kIGFsbCBEU0EgcG9ydHMgdG8gMTAwMCBNYi9zCisJICogZnVsbCBkdXBsZXguCiAJICovCi0JUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAwMyk7CisJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcCkgfHwgZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDEsIDB4MDAzZSk7CisJZWxzZQorCQlSRUdfV1JJVEUoYWRkciwgMHgwMSwgMHgwMDAzKTsKIAogCS8qCiAJICogUG9ydCBDb250cm9sOiBkaXNhYmxlIENvcmUgVGFnLCBkaXNhYmxlIERyb3Atb24tTG9jaywKQEAgLTE2OSwyOSArMTg0LDQwIEBACiAJICogZW5hYmxlIElHTVAvTUxEIHNub29wLCBkaXNhYmxlIERvdWJsZVRhZywgZGlzYWJsZSBWTEFOCiAJICogdHVubmVsaW5nLCBkZXRlcm1pbmUgcHJpb3JpdHkgYnkgbG9va2luZyBhdCA4MDIuMXAgYW5kCiAJICogSVAgcHJpb3JpdHkgZmllbGRzIChJUCBwcmlvIGhhcyBwcmVjZWRlbmNlKSwgYW5kIHNldCBTVFAKLQkgKiBzdGF0ZSB0byBGb3J3YXJkaW5nLiAgRmluYWxseSwgaWYgdGhpcyBpcyB0aGUgQ1BVIHBvcnQsCi0JICogYWRkaXRpb25hbGx5IGVuYWJsZSBEU0EgdGFnZ2luZyBhbmQgZm9yd2FyZGluZyBvZiB1bmtub3duCi0JICogdW5pY2FzdCBhZGRyZXNzZXMuCisJICogc3RhdGUgdG8gRm9yd2FyZGluZy4KKwkgKgorCSAqIElmIHRoaXMgaXMgdGhlIHVwc3RyZWFtIHBvcnQgZm9yIHRoaXMgc3dpdGNoLCBlbmFibGUKKwkgKiBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdHMsIGFuZCBlbmFibGUgRFNBIHRhZ2dpbmcKKwkgKiBtb2RlLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgbGluayB0byBhbm90aGVyIHN3aXRjaCwgdXNlIERTQSB0YWdnaW5nCisJICogbW9kZSwgYnV0IGRvIG5vdCBlbmFibGUgZm9yd2FyZGluZyBvZiB1bmtub3duIHVuaWNhc3RzLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA0LCAocCA9PSBkcy0+Y3B1X3BvcnQpID8gMHgwNTM3IDogMHgwNDMzKTsKKwl2YWwgPSAweDA0MzM7CisJaWYgKHAgPT0gZHNhX3Vwc3RyZWFtX3BvcnQoZHMpKQorCQl2YWwgfD0gMHgwMTA0OworCWlmIChkcy0+ZHNhX3BvcnRfbWFzayAmICgxIDw8IHApKQorCQl2YWwgfD0gMHgwMTAwOworCVJFR19XUklURShhZGRyLCAweDA0LCB2YWwpOwogCiAJLyoKIAkgKiBQb3J0IENvbnRyb2wgMTogZGlzYWJsZSB0cnVua2luZy4gIEFsc28sIGlmIHRoaXMgaXMgdGhlCiAJICogQ1BVIHBvcnQsIGVuYWJsZSBsZWFybiBtZXNzYWdlcyB0byBiZSBzZW50IHRvIHRoaXMgcG9ydC4KIAkgKi8KLQlSRUdfV1JJVEUoYWRkciwgMHgwNSwgKHAgPT0gZHMtPmNwdV9wb3J0KSA/IDB4ODAwMCA6IDB4MDAwMCk7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDUsIGRzYV9pc19jcHVfcG9ydChkcywgcCkgPyAweDgwMDAgOiAweDAwMDApOwogCiAJLyoKIAkgKiBQb3J0IGJhc2VkIFZMQU4gbWFwOiBnaXZlIGVhY2ggcG9ydCBpdHMgb3duIGFkZHJlc3MKIAkgKiBkYXRhYmFzZSwgYWxsb3cgdGhlIENQVSBwb3J0IHRvIHRhbGsgdG8gZWFjaCBvZiB0aGUgJ3JlYWwnCiAJICogcG9ydHMsIGFuZCBhbGxvdyBlYWNoIG9mIHRoZSAncmVhbCcgcG9ydHMgdG8gb25seSB0YWxrIHRvCi0JICogdGhlIENQVSBwb3J0LgorCSAqIHRoZSB1cHN0cmVhbSBwb3J0LgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA2LAotCQkJKChwICYgMHhmKSA8PCAxMikgfAotCQkJICgocCA9PSBkcy0+Y3B1X3BvcnQpID8KLQkJCQlkcy0+dmFsaWRfcG9ydF9tYXNrIDoKLQkJCQkoMSA8PCBkcy0+Y3B1X3BvcnQpKSk7CisJdmFsID0gKHAgJiAweGYpIDw8IDEyOworCWlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHApKQorCQl2YWwgfD0gZHMtPnBoeXNfcG9ydF9tYXNrOworCWVsc2UKKwkJdmFsIHw9IDEgPDwgZHNhX3Vwc3RyZWFtX3BvcnQoZHMpOworCVJFR19XUklURShhZGRyLCAweDA2LCB2YWwpOwogCiAJLyoKIAkgKiBEZWZhdWx0IFZMQU4gSUQgYW5kIHByaW9yaXR5OiBkb24ndCBzZXQgYSBkZWZhdWx0IFZMQU4KQEAgLTIwNywxMyArMjMzLDE1IEBACiAJICogdW50YWdnZWQgZnJhbWVzIG9uIHRoaXMgcG9ydCwgZG8gYSBkZXN0aW5hdGlvbiBhZGRyZXNzCiAJICogbG9va3VwIG9uIHJlY2VpdmVkIHBhY2tldHMgYXMgdXN1YWwsIGRvbid0IHNlbmQgYSBjb3B5CiAJICogb2YgYWxsIHRyYW5zbWl0dGVkL3JlY2VpdmVkIGZyYW1lcyBvbiB0aGlzIHBvcnQgdG8gdGhlCi0JICogQ1BVLCBhbmQgY29uZmlndXJlIHRoZSBDUFUgcG9ydCBudW1iZXIuICBBbHNvLCBpZiB0aGlzCi0JICogaXMgdGhlIENQVSBwb3J0LCBlbmFibGUgZm9yd2FyZGluZyBvZiB1bmtub3duIG11bHRpY2FzdAotCSAqIGFkZHJlc3Nlcy4KKwkgKiBDUFUsIGFuZCBjb25maWd1cmUgdGhlIHVwc3RyZWFtIHBvcnQgbnVtYmVyLgorCSAqCisJICogSWYgdGhpcyBpcyB0aGUgdXBzdHJlYW0gcG9ydCBmb3IgdGhpcyBzd2l0Y2gsIGVuYWJsZQorCSAqIGZvcndhcmRpbmcgb2YgdW5rbm93biBtdWx0aWNhc3QgYWRkcmVzc2VzLgogCSAqLwotCVJFR19XUklURShhZGRyLCAweDA4LAotCQkJKChwID09IGRzLT5jcHVfcG9ydCkgPyAweDAwYzAgOiAweDAwODApIHwKLQkJCSBkcy0+Y3B1X3BvcnQpOworCXZhbCA9IDB4MDA4MCB8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKKwlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCisJCXZhbCB8PSAweDAwNDA7CisJUkVHX1dSSVRFKGFkZHIsIDB4MDgsIHZhbCk7CiAKIAkvKgogCSAqIFJhdGUgQ29udHJvbDogZGlzYWJsZSBpbmdyZXNzIHJhdGUgbGltaXRpbmcuCkBAIC0yNjgsNyArMjk2LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgMTE7IGkrKykgewogCQlyZXQgPSBtdjg4ZTYxMzFfc2V0dXBfcG9ydChkcywgaSk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKQEAgLTI3OSw3ICszMDcsNyBAQAogCiBzdGF0aWMgaW50IG12ODhlNjEzMV9wb3J0X3RvX3BoeV9hZGRyKGludCBwb3J0KQogewotCWlmIChwb3J0ID49IDAgJiYgcG9ydCAhPSAzICYmIHBvcnQgPD0gNykKKwlpZiAocG9ydCA+PSAwICYmIHBvcnQgPD0gMTEpCiAJCXJldHVybiBwb3J0OwogCXJldHVybiAtMTsKIH0KQEAgLTM1Myw3ICszODEsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGRzYV9zd2l0Y2hfZHJpdmVyIG12ODhlNjEzMV9zd2l0Y2hfZHJpdmVyID0gewotCS50YWdfcHJvdG9jb2wJCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9EU0EpLAorCS50YWdfcHJvdG9jb2wJCT0gY3B1X3RvX2JlMTYoRVRIX1BfRFNBKSwKIAkucHJpdl9zaXplCQk9IHNpemVvZihzdHJ1Y3QgbXY4OGU2eHh4X3ByaXZfc3RhdGUpLAogCS5wcm9iZQkJCT0gbXY4OGU2MTMxX3Byb2JlLAogCS5zZXR1cAkJCT0gbXY4OGU2MTMxX3NldHVwLApkaWZmIC0tZ2l0IGEvbmV0L2RzYS9zbGF2ZS5jIGIvbmV0L2RzYS9zbGF2ZS5jCmluZGV4IGE2OGZkNzkuLmVkMTMxMTggMTAwNjQ0Ci0tLSBhL25ldC9kc2Evc2xhdmUuYworKysgYi9uZXQvZHNhL3NsYXZlLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS9zbGF2ZS5jIC0gU2xhdmUgZGV2aWNlIGhhbmRsaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE5LDcgKzE5LDcgQEAKIHsKIAlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBidXMtPnByaXY7CiAKLQlpZiAoZHMtPnZhbGlkX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQorCWlmIChkcy0+cGh5c19wb3J0X21hc2sgJiAoMSA8PCBhZGRyKSkKIAkJcmV0dXJuIGRzLT5kcnYtPnBoeV9yZWFkKGRzLCBhZGRyLCByZWcpOwogCiAJcmV0dXJuIDB4ZmZmZjsKQEAgLTI5LDcgKzI5LDcgQEAKIHsKIAlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBidXMtPnByaXY7CiAKLQlpZiAoZHMtPnZhbGlkX3BvcnRfbWFzayAmICgxIDw8IGFkZHIpKQorCWlmIChkcy0+cGh5c19wb3J0X21hc2sgJiAoMSA8PCBhZGRyKSkKIAkJcmV0dXJuIGRzLT5kcnYtPnBoeV93cml0ZShkcywgYWRkciwgcmVnLCB2YWwpOwogCiAJcmV0dXJuIDA7CkBAIC00MywxNSArNDMsMjQgQEAKIAlkcy0+c2xhdmVfbWlpX2J1cy0+d3JpdGUgPSBkc2Ffc2xhdmVfcGh5X3dyaXRlOwogCXNucHJpbnRmKGRzLT5zbGF2ZV9taWlfYnVzLT5pZCwgTUlJX0JVU19JRF9TSVpFLCAiJXM6JS4yeCIsCiAJCQlkcy0+bWFzdGVyX21paV9idXMtPmlkLCBkcy0+cGQtPnN3X2FkZHIpOwotCWRzLT5zbGF2ZV9taWlfYnVzLT5wYXJlbnQgPSAmKGRzLT5tYXN0ZXJfbWlpX2J1cy0+ZGV2KTsKKwlkcy0+c2xhdmVfbWlpX2J1cy0+cGFyZW50ID0gJmRzLT5tYXN0ZXJfbWlpX2J1cy0+ZGV2OwogfQogCiAKIC8qIHNsYXZlIGRldmljZSBoYW5kbGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBkc2Ffc2xhdmVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkc2Ffc2xhdmVfcHJpdiAqcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlkZXYtPmlmbGluayA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2LT5pZmluZGV4OworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZHNhX3NsYXZlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCWludCBlcnI7CiAKIAlpZiAoIShtYXN0ZXItPmZsYWdzICYgSUZGX1VQKSkKQEAgLTg5LDcgKzk4LDcgQEAKIHN0YXRpYyBpbnQgZHNhX3NsYXZlX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gcC0+cGFyZW50LT5tYXN0ZXJfbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPmRzdC0+bWFzdGVyX25ldGRldjsKIAogCWRldl9tY191bnN5bmMobWFzdGVyLCBkZXYpOwogCWRldl91bmljYXN0X3Vuc3luYyhtYXN0ZXIsIGRldik7CkBAIC0xMDcsNyArMTE2LDcgQEAKIHN0YXRpYyB2b2lkIGRzYV9zbGF2ZV9jaGFuZ2VfcnhfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNoYW5nZSkKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCiAJaWYgKGNoYW5nZSAmIElGRl9BTExNVUxUSSkKIAkJZGV2X3NldF9hbGxtdWx0aShtYXN0ZXIsIGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgPyAxIDogLTEpOwpAQCAtMTE4LDcgKzEyNyw3IEBACiBzdGF0aWMgdm9pZCBkc2Ffc2xhdmVfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCiAJZGV2X21jX3N5bmMobWFzdGVyLCBkZXYpOwogCWRldl91bmljYXN0X3N5bmMobWFzdGVyLCBkZXYpOwpAQCAtMTI3LDcgKzEzNiw3IEBACiBzdGF0aWMgaW50IGRzYV9zbGF2ZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYSkKIHsKIAlzdHJ1Y3QgZHNhX3NsYXZlX3ByaXYgKnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IGE7CiAJaW50IGVycjsKIApAQCAtMjg4LDYgKzI5Nyw3IEBACiAKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfRFNBCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGRzYV9uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAkJPSBkc2Ffc2xhdmVfaW5pdCwKIAkubmRvX29wZW4JIAk9IGRzYV9zbGF2ZV9vcGVuLAogCS5uZG9fc3RvcAkJPSBkc2Ffc2xhdmVfY2xvc2UsCiAJLm5kb19zdGFydF94bWl0CQk9IGRzYV94bWl0LApAQCAtMzAwLDYgKzMxMCw3IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfRURTQQogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlZHNhX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGRzYV9zbGF2ZV9pbml0LAogCS5uZG9fb3BlbgkgCT0gZHNhX3NsYXZlX29wZW4sCiAJLm5kb19zdG9wCQk9IGRzYV9zbGF2ZV9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gZWRzYV94bWl0LApAQCAtMzEyLDYgKzMyMyw3IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfVFJBSUxFUgogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB0cmFpbGVyX25ldGRldl9vcHMgPSB7CisJLm5kb19pbml0CQk9IGRzYV9zbGF2ZV9pbml0LAogCS5uZG9fb3BlbgkgCT0gZHNhX3NsYXZlX29wZW4sCiAJLm5kb19zdG9wCQk9IGRzYV9zbGF2ZV9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0gdHJhaWxlcl94bWl0LApAQCAtMzI4LDcgKzM0MCw3IEBACiBkc2Ffc2xhdmVfY3JlYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgc3RydWN0IGRldmljZSAqcGFyZW50LAogCQkgaW50IHBvcnQsIGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciA9IGRzLT5tYXN0ZXJfbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIgPSBkcy0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXY7CiAJc3RydWN0IGRzYV9zbGF2ZV9wcml2ICpwOwogCWludCByZXQ7CkBAIC0zNDMsNyArMzU1LDcgQEAKIAltZW1jcHkoc2xhdmVfZGV2LT5kZXZfYWRkciwgbWFzdGVyLT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCXNsYXZlX2Rldi0+dHhfcXVldWVfbGVuID0gMDsKIAotCXN3aXRjaCAoZHMtPnRhZ19wcm90b2NvbCkgeworCXN3aXRjaCAoZHMtPmRzdC0+dGFnX3Byb3RvY29sKSB7CiAjaWZkZWYgQ09ORklHX05FVF9EU0FfVEFHX0RTQQogCWNhc2UgaHRvbnMoRVRIX1BfRFNBKToKIAkJc2xhdmVfZGV2LT5uZXRkZXZfb3BzID0gJmRzYV9uZXRkZXZfb3BzOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfZHNhLmMgYi9uZXQvZHNhL3RhZ19kc2EuYwppbmRleCBmOTlhMDE5Li44ZmEyNWJhIDEwMDY0NAotLS0gYS9uZXQvZHNhL3RhZ19kc2EuYworKysgYi9uZXQvZHNhL3RhZ19kc2EuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3RhZ19kc2EuYyAtIChOb24tZXRoZXJ0eXBlKSBEU0EgdGFnZ2luZwotICogQ29weXJpZ2h0IChjKSAyMDA4IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zNiw3ICszNiw3IEBACiAJCSAqIENvbnN0cnVjdCB0YWdnZWQgRlJPTV9DUFUgRFNBIHRhZyBmcm9tIDgwMi4xcSB0YWcuCiAJCSAqLwogCQlkc2FfaGVhZGVyID0gc2tiLT5kYXRhICsgMiAqIEVUSF9BTEVOOwotCQlkc2FfaGVhZGVyWzBdID0gMHg2MDsKKwkJZHNhX2hlYWRlclswXSA9IDB4NjAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQlkc2FfaGVhZGVyWzFdID0gcC0+cG9ydCA8PCAzOwogCiAJCS8qCkBAIC01Nyw3ICs1Nyw3IEBACiAJCSAqIENvbnN0cnVjdCB1bnRhZ2dlZCBGUk9NX0NQVSBEU0EgdGFnLgogCQkgKi8KIAkJZHNhX2hlYWRlciA9IHNrYi0+ZGF0YSArIDIgKiBFVEhfQUxFTjsKLQkJZHNhX2hlYWRlclswXSA9IDB4NDA7CisJCWRzYV9oZWFkZXJbMF0gPSAweDQwIHwgcC0+cGFyZW50LT5pbmRleDsKIAkJZHNhX2hlYWRlclsxXSA9IHAtPnBvcnQgPDwgMzsKIAkJZHNhX2hlYWRlclsyXSA9IDB4MDA7CiAJCWRzYV9oZWFkZXJbM10gPSAweDAwOwpAQCAtNjUsNyArNjUsNyBAQAogCiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0RTQSk7CiAKLQlza2ItPmRldiA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlza2ItPmRldiA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtNzgsMTEgKzc4LDEzIEBACiBzdGF0aWMgaW50IGRzYV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogewotCXN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkZXYtPmRzYV9wdHI7CisJc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwogCXU4ICpkc2FfaGVhZGVyOworCWludCBzb3VyY2VfZGV2aWNlOwogCWludCBzb3VyY2VfcG9ydDsKIAotCWlmICh1bmxpa2VseShkcyA9PSBOVUxMKSkKKwlpZiAodW5saWtlbHkoZHN0ID09IE5VTEwpKQogCQlnb3RvIG91dF9kcm9wOwogCiAJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKQEAgLTk4LDE2ICsxMDAsMjQgQEAKIAlkc2FfaGVhZGVyID0gc2tiLT5kYXRhIC0gMjsKIAogCS8qCi0JICogQ2hlY2sgdGhhdCBmcmFtZSB0eXBlIGlzIGVpdGhlciBUT19DUFUgb3IgRk9SV0FSRCwgYW5kCi0JICogdGhhdCB0aGUgc291cmNlIGRldmljZSBpcyB6ZXJvLgorCSAqIENoZWNrIHRoYXQgZnJhbWUgdHlwZSBpcyBlaXRoZXIgVE9fQ1BVIG9yIEZPUldBUkQuCiAJICovCi0JaWYgKChkc2FfaGVhZGVyWzBdICYgMHhkZikgIT0gMHgwMCAmJiAoZHNhX2hlYWRlclswXSAmIDB4ZGYpICE9IDB4YzApCisJaWYgKChkc2FfaGVhZGVyWzBdICYgMHhjMCkgIT0gMHgwMCAmJiAoZHNhX2hlYWRlclswXSAmIDB4YzApICE9IDB4YzApCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgdGhlIHNvdXJjZSBwb3J0IGlzIGEgcmVnaXN0ZXJlZCBEU0EgcG9ydC4KKwkgKiBEZXRlcm1pbmUgc291cmNlIGRldmljZSBhbmQgcG9ydC4KIAkgKi8KKwlzb3VyY2VfZGV2aWNlID0gZHNhX2hlYWRlclswXSAmIDB4MWY7CiAJc291cmNlX3BvcnQgPSAoZHNhX2hlYWRlclsxXSA+PiAzKSAmIDB4MWY7CisKKwkvKgorCSAqIENoZWNrIHRoYXQgdGhlIHNvdXJjZSBkZXZpY2UgZXhpc3RzIGFuZCB0aGF0IHRoZSBzb3VyY2UKKwkgKiBwb3J0IGlzIGEgcmVnaXN0ZXJlZCBEU0EgcG9ydC4KKwkgKi8KKwlpZiAoc291cmNlX2RldmljZSA+PSBkc3QtPnBkLT5ucl9jaGlwcykKKwkJZ290byBvdXRfZHJvcDsKKwlkcyA9IGRzdC0+ZHNbc291cmNlX2RldmljZV07CiAJaWYgKHNvdXJjZV9wb3J0ID49IERTQV9NQVhfUE9SVFMgfHwgZHMtPnBvcnRzW3NvdXJjZV9wb3J0XSA9PSBOVUxMKQogCQlnb3RvIG91dF9kcm9wOwogCkBAIC0xNzUsOCArMTg1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBkc2FfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0RTQSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGRzYV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfRFNBKSwKIAkuZnVuYwk9IGRzYV9yY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ19lZHNhLmMgYi9uZXQvZHNhL3RhZ19lZHNhLmMKaW5kZXggMzI4ZWM5NS4uODE1NjA3YiAxMDA2NDQKLS0tIGEvbmV0L2RzYS90YWdfZWRzYS5jCisrKyBiL25ldC9kc2EvdGFnX2Vkc2EuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBuZXQvZHNhL3RhZ19lZHNhLmMgLSBFdGhlcnR5cGUgRFNBIHRhZ2dpbmcKLSAqIENvcHlyaWdodCAoYykgMjAwOCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IE1hcnZlbGwgU2VtaWNvbmR1Y3RvcgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtNDUsNyArNDUsNyBAQAogCQllZHNhX2hlYWRlclsxXSA9IEVUSF9QX0VEU0EgJiAweGZmOwogCQllZHNhX2hlYWRlclsyXSA9IDB4MDA7CiAJCWVkc2FfaGVhZGVyWzNdID0gMHgwMDsKLQkJZWRzYV9oZWFkZXJbNF0gPSAweDYwOworCQllZHNhX2hlYWRlcls0XSA9IDB4NjAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQllZHNhX2hlYWRlcls1XSA9IHAtPnBvcnQgPDwgMzsKIAogCQkvKgpAQCAtNzAsNyArNzAsNyBAQAogCQllZHNhX2hlYWRlclsxXSA9IEVUSF9QX0VEU0EgJiAweGZmOwogCQllZHNhX2hlYWRlclsyXSA9IDB4MDA7CiAJCWVkc2FfaGVhZGVyWzNdID0gMHgwMDsKLQkJZWRzYV9oZWFkZXJbNF0gPSAweDQwOworCQllZHNhX2hlYWRlcls0XSA9IDB4NDAgfCBwLT5wYXJlbnQtPmluZGV4OwogCQllZHNhX2hlYWRlcls1XSA9IHAtPnBvcnQgPDwgMzsKIAkJZWRzYV9oZWFkZXJbNl0gPSAweDAwOwogCQllZHNhX2hlYWRlcls3XSA9IDB4MDA7CkBAIC03OCw3ICs3OCw3IEBACiAKIAlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfRURTQSk7CiAKLQlza2ItPmRldiA9IHAtPnBhcmVudC0+bWFzdGVyX25ldGRldjsKKwlza2ItPmRldiA9IHAtPnBhcmVudC0+ZHN0LT5tYXN0ZXJfbmV0ZGV2OwogCWRldl9xdWV1ZV94bWl0KHNrYik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtOTEsMTEgKzkxLDEzIEBACiBzdGF0aWMgaW50IGVkc2FfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJdTggKmVkc2FfaGVhZGVyOworCWludCBzb3VyY2VfZGV2aWNlOwogCWludCBzb3VyY2VfcG9ydDsKIAotCWlmICh1bmxpa2VseShkcyA9PSBOVUxMKSkKKwlpZiAodW5saWtlbHkoZHN0ID09IE5VTEwpKQogCQlnb3RvIG91dF9kcm9wOwogCiAJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKQEAgLTExMSwxNiArMTEzLDI0IEBACiAJZWRzYV9oZWFkZXIgPSBza2ItPmRhdGEgKyAyOwogCiAJLyoKLQkgKiBDaGVjayB0aGF0IGZyYW1lIHR5cGUgaXMgZWl0aGVyIFRPX0NQVSBvciBGT1JXQVJELCBhbmQKLQkgKiB0aGF0IHRoZSBzb3VyY2UgZGV2aWNlIGlzIHplcm8uCisJICogQ2hlY2sgdGhhdCBmcmFtZSB0eXBlIGlzIGVpdGhlciBUT19DUFUgb3IgRk9SV0FSRC4KIAkgKi8KLQlpZiAoKGVkc2FfaGVhZGVyWzBdICYgMHhkZikgIT0gMHgwMCAmJiAoZWRzYV9oZWFkZXJbMF0gJiAweGRmKSAhPSAweGMwKQorCWlmICgoZWRzYV9oZWFkZXJbMF0gJiAweGMwKSAhPSAweDAwICYmIChlZHNhX2hlYWRlclswXSAmIDB4YzApICE9IDB4YzApCiAJCWdvdG8gb3V0X2Ryb3A7CiAKIAkvKgotCSAqIENoZWNrIHRoYXQgdGhlIHNvdXJjZSBwb3J0IGlzIGEgcmVnaXN0ZXJlZCBEU0EgcG9ydC4KKwkgKiBEZXRlcm1pbmUgc291cmNlIGRldmljZSBhbmQgcG9ydC4KIAkgKi8KKwlzb3VyY2VfZGV2aWNlID0gZWRzYV9oZWFkZXJbMF0gJiAweDFmOwogCXNvdXJjZV9wb3J0ID0gKGVkc2FfaGVhZGVyWzFdID4+IDMpICYgMHgxZjsKKworCS8qCisJICogQ2hlY2sgdGhhdCB0aGUgc291cmNlIGRldmljZSBleGlzdHMgYW5kIHRoYXQgdGhlIHNvdXJjZQorCSAqIHBvcnQgaXMgYSByZWdpc3RlcmVkIERTQSBwb3J0LgorCSAqLworCWlmIChzb3VyY2VfZGV2aWNlID49IGRzdC0+cGQtPm5yX2NoaXBzKQorCQlnb3RvIG91dF9kcm9wOworCWRzID0gZHN0LT5kc1tzb3VyY2VfZGV2aWNlXTsKIAlpZiAoc291cmNlX3BvcnQgPj0gRFNBX01BWF9QT1JUUyB8fCBkcy0+cG9ydHNbc291cmNlX3BvcnRdID09IE5VTEwpCiAJCWdvdG8gb3V0X2Ryb3A7CiAKQEAgLTE5NCw4ICsyMDQsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGVkc2FfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0VEU0EpLAorc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBlZHNhX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUJPSBjcHVfdG9fYmUxNihFVEhfUF9FRFNBKSwKIAkuZnVuYwk9IGVkc2FfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfdHJhaWxlci5jIGIvbmV0L2RzYS90YWdfdHJhaWxlci5jCmluZGV4IGI1OTEzMjguLjFjM2UzMGMgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX3RyYWlsZXIuYworKysgYi9uZXQvZHNhL3RhZ190cmFpbGVyLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbmV0L2RzYS90YWdfdHJhaWxlci5jIC0gVHJhaWxlciB0YWcgZm9ybWF0IGhhbmRsaW5nCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggTWFydmVsbCBTZW1pY29uZHVjdG9yCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSBNYXJ2ZWxsIFNlbWljb25kdWN0b3IKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTU5LDcgKzU5LDcgQEAKIAogCW5za2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfVFJBSUxFUik7CiAKLQluc2tiLT5kZXYgPSBwLT5wYXJlbnQtPm1hc3Rlcl9uZXRkZXY7CisJbnNrYi0+ZGV2ID0gcC0+cGFyZW50LT5kc3QtPm1hc3Rlcl9uZXRkZXY7CiAJZGV2X3F1ZXVlX3htaXQobnNrYik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtNjgsMTIgKzY4LDE0IEBACiBzdGF0aWMgaW50IHRyYWlsZXJfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2LT5kc2FfcHRyOworCXN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRldi0+ZHNhX3B0cjsKKwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJdTggKnRyYWlsZXI7CiAJaW50IHNvdXJjZV9wb3J0OwogCi0JaWYgKHVubGlrZWx5KGRzID09IE5VTEwpKQorCWlmICh1bmxpa2VseShkc3QgPT0gTlVMTCkpCiAJCWdvdG8gb3V0X2Ryb3A7CisJZHMgPSBkc3QtPmRzWzBdOwogCiAJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCkBAIC0xMTEsOCArMTEzLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB0cmFpbGVyX3BhY2tldF90eXBlID0gewotCS50eXBlCT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9UUkFJTEVSKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgdHJhaWxlcl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlCT0gY3B1X3RvX2JlMTYoRVRIX1BfVFJBSUxFUiksCiAJLmZ1bmMJPSB0cmFpbGVyX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCmluZGV4IDg3ODlkMmIuLjZmNDc5ZmEgMTAwNjQ0Ci0tLSBhL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKKysrIGIvbmV0L2Vjb25ldC9hZl9lY29uZXQuYwpAQCAtMTEwMiw4ICsxMTAyLDggQEAKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZWNvbmV0X3BhY2tldF90eXBlID0gewotCS50eXBlID0JCV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfRUNPTkVUKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgZWNvbmV0X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPQkJY3B1X3RvX2JlMTYoRVRIX1BfRUNPTkVUKSwKIAkuZnVuYyA9CQllY29uZXRfcmN2LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvS2NvbmZpZyBiL25ldC9pcHY0L0tjb25maWcKaW5kZXggNjkxMjY4Zi4uYjJjZjkxZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvS2NvbmZpZworKysgYi9uZXQvaXB2NC9LY29uZmlnCkBAIC0zNSw3ICszNSw3IEBACiAKIAkgIGF0IGJvb3QgdGltZSBhZnRlciB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0gaGFzIGJlZW4gbW91bnRlZC4KIAotCSAgSWYgeW91IHR1cm4gb24gSVAgZm9yd2FyZGluZywgeW91IHdpbGwgYWxzbyBnZXQgdGhlIHJwX2ZpbHRlciwgd2hpY2gKKwkgIElmIHlvdSB0dXJuIG9uIElQIGZvcndhcmRpbmcsIHlvdSBzaG91bGQgY29uc2lkZXIgdGhlIHJwX2ZpbHRlciwgd2hpY2gKIAkgIGF1dG9tYXRpY2FsbHkgcmVqZWN0cyBpbmNvbWluZyBwYWNrZXRzIGlmIHRoZSByb3V0aW5nIHRhYmxlIGVudHJ5CiAJICBmb3IgdGhlaXIgc291cmNlIGFkZHJlc3MgZG9lc24ndCBtYXRjaCB0aGUgbmV0d29yayBpbnRlcmZhY2UgdGhleSdyZQogCSAgYXJyaXZpbmcgb24uIFRoaXMgaGFzIHNlY3VyaXR5IGFkdmFudGFnZXMgYmVjYXVzZSBpdCBwcmV2ZW50cyB0aGUKQEAgLTQ2LDEyICs0NiwxNiBAQAogCSAgcnBfZmlsdGVyIG9uIHVzZToKIAogCSAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvPGRldmljZT4vcnBfZmlsdGVyCi0JICBvcgorCSAgIGFuZAogCSAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL3JwX2ZpbHRlcgogCisJICBOb3RlIHRoYXQgc29tZSBkaXN0cmlidXRpb25zIGVuYWJsZSBpdCBpbiBzdGFydHVwIHNjcmlwdHMuCisJICBGb3IgZGV0YWlscyBhYm91dCBycF9maWx0ZXIgc3RyaWN0IGFuZCBsb29zZSBtb2RlIHJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0Pi4KKwogCSAgSWYgdW5zdXJlLCBzYXkgTiBoZXJlLgogCi1jaG9pY2UgCitjaG9pY2UKIAlwcm9tcHQgIkNob29zZSBJUDogRklCIGxvb2t1cCBhbGdvcml0aG0gKGNob29zZSBGSUJfSEFTSCBpZiB1bnN1cmUpIgogCWRlcGVuZHMgb24gSVBfQURWQU5DRURfUk9VVEVSCiAJZGVmYXVsdCBBU0tfSVBfRklCX0hBU0gKQEAgLTU5LDI3ICs2MywyOSBAQAogY29uZmlnIEFTS19JUF9GSUJfSEFTSAogCWJvb2wgIkZJQl9IQVNIIgogCS0tLWhlbHAtLS0KLQlDdXJyZW50IEZJQiBpcyB2ZXJ5IHByb3ZlbiBhbmQgZ29vZCBlbm91Z2ggZm9yIG1vc3QgdXNlcnMuCisJICBDdXJyZW50IEZJQiBpcyB2ZXJ5IHByb3ZlbiBhbmQgZ29vZCBlbm91Z2ggZm9yIG1vc3QgdXNlcnMuCiAKIGNvbmZpZyBJUF9GSUJfVFJJRQogCWJvb2wgIkZJQl9UUklFIgogCS0tLWhlbHAtLS0KLQlVc2UgbmV3IGV4cGVyaW1lbnRhbCBMQy10cmllIGFzIEZJQiBsb29rdXAgYWxnb3JpdGhtLiAKLSAgICAgICAgVGhpcyBpbXByb3ZlcyBsb29rdXAgcGVyZm9ybWFuY2UgaWYgeW91IGhhdmUgYSBsYXJnZQotCW51bWJlciBvZiByb3V0ZXMuCisJICBVc2UgbmV3IGV4cGVyaW1lbnRhbCBMQy10cmllIGFzIEZJQiBsb29rdXAgYWxnb3JpdGhtLgorCSAgVGhpcyBpbXByb3ZlcyBsb29rdXAgcGVyZm9ybWFuY2UgaWYgeW91IGhhdmUgYSBsYXJnZQorCSAgbnVtYmVyIG9mIHJvdXRlcy4KIAotCUxDLXRyaWUgaXMgYSBsb25nZXN0IG1hdGNoaW5nIHByZWZpeCBsb29rdXAgYWxnb3JpdGhtIHdoaWNoCi0JcGVyZm9ybXMgYmV0dGVyIHRoYW4gRklCX0hBU0ggZm9yIGxhcmdlIHJvdXRpbmcgdGFibGVzLgotCUJ1dCwgaXQgY29uc3VtZXMgbW9yZSBtZW1vcnkgYW5kIGlzIG1vcmUgY29tcGxleC4KLQkKLQlMQy10cmllIGlzIGRlc2NyaWJlZCBpbjoKLQkKLSAJSVAtYWRkcmVzcyBsb29rdXAgdXNpbmcgTEMtdHJpZXMuIFN0ZWZhbiBOaWxzc29uIGFuZCBHdW5uYXIgS2FybHNzb24KLSAJSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb25zLCAxNyg2KToxMDgzLTEwOTIsIEp1bmUgMTk5OQotCUFuIGV4cGVyaW1lbnRhbCBzdHVkeSBvZiBjb21wcmVzc2lvbiBtZXRob2RzIGZvciBkeW5hbWljIHRyaWVzCi0gCVN0ZWZhbiBOaWxzc29uIGFuZCBNYXR0aSBUaWtrYW5lbi4gQWxnb3JpdGhtaWNhLCAzMygxKToxOS0zMywgMjAwMi4KLSAJaHR0cDovL3d3dy5uYWRhLmt0aC5zZS9+c25pbHNzb24vcHVibGljL3BhcGVycy9keW50cmllMi8KLSAgICAgICAKKwkgIExDLXRyaWUgaXMgYSBsb25nZXN0IG1hdGNoaW5nIHByZWZpeCBsb29rdXAgYWxnb3JpdGhtIHdoaWNoCisJICBwZXJmb3JtcyBiZXR0ZXIgdGhhbiBGSUJfSEFTSCBmb3IgbGFyZ2Ugcm91dGluZyB0YWJsZXMuCisJICBCdXQsIGl0IGNvbnN1bWVzIG1vcmUgbWVtb3J5IGFuZCBpcyBtb3JlIGNvbXBsZXguCisKKwkgIExDLXRyaWUgaXMgZGVzY3JpYmVkIGluOgorCisJICBJUC1hZGRyZXNzIGxvb2t1cCB1c2luZyBMQy10cmllcy4gU3RlZmFuIE5pbHNzb24gYW5kIEd1bm5hciBLYXJsc3NvbgorCSAgSUVFRSBKb3VybmFsIG9uIFNlbGVjdGVkIEFyZWFzIGluIENvbW11bmljYXRpb25zLCAxNyg2KToxMDgzLTEwOTIsCisJICBKdW5lIDE5OTkKKworCSAgQW4gZXhwZXJpbWVudGFsIHN0dWR5IG9mIGNvbXByZXNzaW9uIG1ldGhvZHMgZm9yIGR5bmFtaWMgdHJpZXMKKwkgIFN0ZWZhbiBOaWxzc29uIGFuZCBNYXR0aSBUaWtrYW5lbi4gQWxnb3JpdGhtaWNhLCAzMygxKToxOS0zMywgMjAwMi4KKwkgIGh0dHA6Ly93d3cubmFkYS5rdGguc2UvfnNuaWxzc29uL3B1YmxpYy9wYXBlcnMvZHludHJpZTIvCisKIGVuZGNob2ljZQogCiBjb25maWcgSVBfRklCX0hBU0gKQEAgLTE5MSw3ICsxOTcsNyBAQAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnNyb290LnR4dD4gZm9yIGRldGFpbHMuCiAKICMgbm90IHlldCByZWFkeS4uCi0jICAgYm9vbCAnICAgIElQOiBBUlAgc3VwcG9ydCcgQ09ORklHX0lQX1BOUF9BUlAJCQorIyAgIGJvb2wgJyAgICBJUDogQVJQIHN1cHBvcnQnIENPTkZJR19JUF9QTlBfQVJQCiBjb25maWcgTkVUX0lQSVAKIAl0cmlzdGF0ZSAiSVA6IHR1bm5lbGluZyIKIAlzZWxlY3QgSU5FVF9UVU5ORUwKQEAgLTM2MSw3ICszNjcsNyBAQAogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wgKElQQ29tcCkgKFJGQzMxNzMpLAogCSAgdHlwaWNhbGx5IG5lZWRlZCBmb3IgSVBzZWMuCi0JICAKKwogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIElORVRfWEZSTV9UVU5ORUwKQEAgLTQxNSw3ICs0MjEsNyBAQAogCSAgU3VwcG9ydCBmb3IgSU5FVCAoVENQLCBEQ0NQLCBldGMpIHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5CiAJICBuYXRpdmUgTGludXggdG9vbHMgc3VjaCBhcyBzcy4gc3MgaXMgaW5jbHVkZWQgaW4gaXByb3V0ZTIsIGN1cnJlbnRseQogCSAgZG93bmxvYWRhYmxlIGF0IDxodHRwOi8vbGludXgtbmV0Lm9zZGwub3JnL2luZGV4LnBocC9JcHJvdXRlMj4uCi0JICAKKwogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAogY29uZmlnIElORVRfVENQX0RJQUcKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCA3NDNmNTU0Li5kNWFhYWJiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC0zNjksNyArMzY5LDYgQEAKIAlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7CiAKIAlzay0+c2tfZGVzdHJ1Y3QJICAgPSBpbmV0X3NvY2tfZGVzdHJ1Y3Q7Ci0Jc2stPnNrX2ZhbWlseQkgICA9IFBGX0lORVQ7CiAJc2stPnNrX3Byb3RvY29sCSAgID0gcHJvdG9jb2w7CiAJc2stPnNrX2JhY2tsb2dfcmN2ID0gc2stPnNrX3Byb3QtPmJhY2tsb2dfcmN2OwogCkBAIC0xMjUzLDEwICsxMjUyLDEwIEBACiAJaW50IHByb3RvOwogCWludCBpZDsKIAotCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpKQorCWlwaCA9IHNrYl9ncm9faGVhZGVyKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlpZiAodW5saWtlbHkoIWlwaCkpCiAJCWdvdG8gb3V0OwogCi0JaXBoID0gaXBfaGRyKHNrYik7CiAJcHJvdG8gPSBpcGgtPnByb3RvY29sICYgKE1BWF9JTkVUX1BST1RPUyAtIDEpOwogCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTI2NCwxMyArMTI2MywxMyBAQAogCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlpZiAoaXBoLT52ZXJzaW9uICE9IDQgfHwgaXBoLT5paGwgIT0gNSkKKwlpZiAoKih1OCAqKWlwaCAhPSAweDQ1KQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlpZiAodW5saWtlbHkoaXBfZmFzdF9jc3VtKCh1OCAqKWlwaCwgaXBoLT5paGwpKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JZmx1c2ggPSBudG9ocyhpcGgtPnRvdF9sZW4pICE9IHNrYi0+bGVuIHx8CisJZmx1c2ggPSBudG9ocyhpcGgtPnRvdF9sZW4pICE9IHNrYl9ncm9fbGVuKHNrYikgfHwKIAkJaXBoLT5mcmFnX29mZiAhPSBodG9ucyhJUF9ERik7CiAJaWQgPSBudG9ocyhpcGgtPmlkKTsKIApAQCAtMTI4MiwyNCArMTI4MSwyNSBAQAogCiAJCWlwaDIgPSBpcF9oZHIocCk7CiAKLQkJaWYgKGlwaC0+cHJvdG9jb2wgIT0gaXBoMi0+cHJvdG9jb2wgfHwKLQkJICAgIGlwaC0+dG9zICE9IGlwaDItPnRvcyB8fAotCQkgICAgbWVtY21wKCZpcGgtPnNhZGRyLCAmaXBoMi0+c2FkZHIsIDgpKSB7CisJCWlmICgoaXBoLT5wcm90b2NvbCBeIGlwaDItPnByb3RvY29sKSB8CisJCSAgICAoaXBoLT50b3MgXiBpcGgyLT50b3MpIHwKKwkJICAgIChpcGgtPnNhZGRyIF4gaXBoMi0+c2FkZHIpIHwKKwkJICAgIChpcGgtPmRhZGRyIF4gaXBoMi0+ZGFkZHIpKSB7CiAJCQlOQVBJX0dST19DQihwKS0+c2FtZV9mbG93ID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogQWxsIGZpZWxkcyBtdXN0IG1hdGNoIGV4Y2VwdCBsZW5ndGggYW5kIGNoZWNrc3VtLiAqLwogCQlOQVBJX0dST19DQihwKS0+Zmx1c2ggfD0KLQkJCW1lbWNtcCgmaXBoLT5mcmFnX29mZiwgJmlwaDItPmZyYWdfb2ZmLCA0KSB8fAotCQkJKHUxNikobnRvaHMoaXBoMi0+aWQpICsgTkFQSV9HUk9fQ0IocCktPmNvdW50KSAhPSBpZDsKKwkJCShpcGgtPnR0bCBeIGlwaDItPnR0bCkgfAorCQkJKCh1MTYpKG50b2hzKGlwaDItPmlkKSArIE5BUElfR1JPX0NCKHApLT5jb3VudCkgXiBpZCk7CiAKIAkJTkFQSV9HUk9fQ0IocCktPmZsdXNoIHw9IGZsdXNoOwogCX0KIAogCU5BUElfR1JPX0NCKHNrYiktPmZsdXNoIHw9IGZsdXNoOwotCV9fc2tiX3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpOwotCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CisJc2tiX2dyb19wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlza2Jfc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKIAogCXBwID0gb3BzLT5ncm9fcmVjZWl2ZShoZWFkLCBza2IpOwogCkBAIC0xNTAwLDggKzE1MDAsOCBAQAogICoJSVAgcHJvdG9jb2wgbGF5ZXIgaW5pdGlhbGlzZXIKICAqLwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlwX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlwX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9JUCksCiAJLmZ1bmMgPSBpcF9yY3YsCiAJLmdzb19zZW5kX2NoZWNrID0gaW5ldF9nc29fc2VuZF9jaGVjaywKIAkuZ3NvX3NlZ21lbnQgPSBpbmV0X2dzb19zZWdtZW50LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCAyOWE3NGMwLi5mMTE5MzFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtODAxLDggKzgwMSwxMSBAQAogICogIGNhY2hlLgogICovCiAKLQkvKiBTcGVjaWFsIGNhc2U6IElQdjQgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIHBhY2tldCAoUkZDMjEzMSkgKi8KLQlpZiAoc2lwID09IDApIHsKKwkvKgorCSAqICBTcGVjaWFsIGNhc2U6IElQdjQgZHVwbGljYXRlIGFkZHJlc3MgZGV0ZWN0aW9uIHBhY2tldCAoUkZDMjEzMSkKKwkgKiAgYW5kIEdyYXR1aXRvdXMgQVJQL0FSUCBBbm5vdW5jZS4gKFJGQzM5MjcsIFNlY3Rpb24gMi40KQorCSAqLworCWlmIChzaXAgPT0gMCB8fCB0aXAgPT0gc2lwKSB7CiAJCWlmIChhcnAtPmFyX29wID09IGh0b25zKEFSUE9QX1JFUVVFU1QpICYmCiAJCSAgICBpbmV0X2FkZHJfdHlwZShuZXQsIHRpcCkgPT0gUlROX0xPQ0FMICYmCiAJCSAgICAhYXJwX2lnbm9yZShpbl9kZXYsIHNpcCwgdGlwKSkKQEAgLTg5Miw3ICs4OTUsNyBAQAogb3V0OgogCWlmIChpbl9kZXYpCiAJCWluX2Rldl9wdXQoaW5fZGV2KTsKLQlrZnJlZV9za2Ioc2tiKTsKKwljb25zdW1lX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjI1LDggKzEyMjgsOCBAQAogICoJQ2FsbGVkIG9uY2Ugb24gc3RhcnR1cC4KICAqLwogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGFycF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9CV9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQVJQKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYXJwX3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPQljcHVfdG9fYmUxNihFVEhfUF9BUlApLAogCS5mdW5jID0JYXJwX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCAzMDk5OTdlLi4xMjZiYjkxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0xMDc1LDYgKzEwNzUsMTQgQEAKIAkJCX0KIAkJfQogCQlpcF9tY191cChpbl9kZXYpOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE5FVERFVl9DSEFOR0VBRERSOgorCQlpZiAoSU5fREVWX0FSUF9OT1RJRlkoaW5fZGV2KSkKKwkJCWFycF9zZW5kKEFSUE9QX1JFUVVFU1QsIEVUSF9QX0FSUCwKKwkJCQkgaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2FkZHJlc3MsCisJCQkJIGRldiwKKwkJCQkgaW5fZGV2LT5pZmFfbGlzdC0+aWZhX2FkZHJlc3MsCisJCQkJIE5VTEwsIGRldi0+ZGV2X2FkZHIsIE5VTEwpOwogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCQlpcF9tY19kb3duKGluX2Rldik7CkBAIC0xMjA4LDcgKzEyMTYsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCBwaWQsIFJUTkxHUlBfSVBWNF9JRkFERFIsIG5saCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIHBpZCwgUlROTEdSUF9JUFY0X0lGQUREUiwgbmxoLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNF9JRkFERFIsIGVycik7CkBAIC0xNDM5LDYgKzE0NDgsNyBAQAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfQU5OT1VOQ0UsICJhcnBfYW5ub3VuY2UiKSwKIAkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQVJQX0lHTk9SRSwgImFycF9pZ25vcmUiKSwKIAkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQVJQX0FDQ0VQVCwgImFycF9hY2NlcHQiKSwKKwkJREVWSU5FVF9TWVNDVExfUldfRU5UUlkoQVJQX05PVElGWSwgImFycF9ub3RpZnkiKSwKIAogCQlERVZJTkVUX1NZU0NUTF9GTFVTSElOR19FTlRSWShOT1hGUk0sICJkaXNhYmxlX3hmcm0iKSwKIAkJREVWSU5FVF9TWVNDVExfRkxVU0hJTkdfRU5UUlkoTk9QT0xJQ1ksICJkaXNhYmxlX3BvbGljeSIpLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwppbmRleCA3NDFlNGZhLi5jYWZjYzQ5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYworKysgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJZmliX3Jlc19wdXQoJnJlcyk7CiAJaWYgKG5vX2FkZHIpCiAJCWdvdG8gbGFzdF9yZXNvcnQ7Ci0JaWYgKHJwZikKKwlpZiAocnBmID09IDEpCiAJCWdvdG8gZV9pbnZhbDsKIAlmbC5vaWYgPSBkZXYtPmlmaW5kZXg7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwppbmRleCA0ODE3ZGVhLi5mODMxZGY1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKKysrIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCkBAIC0zMjIsOCArMzIyLDkgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIGluZm8tPm5sX25ldCwgaW5mby0+cGlkLCBSVE5MR1JQX0lQVjRfUk9VVEUsCi0JCQkgIGluZm8tPm5saCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCBpbmZvLT5ubF9uZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY0X1JPVVRFLAorCQkgICAgaW5mby0+bmxoLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihpbmZvLT5ubF9uZXQsIFJUTkxHUlBfSVBWNF9ST1VURSwgZXJyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ljbXAuYyBiL25ldC9pcHY0L2ljbXAuYwppbmRleCBmYzU2MmQyLi4zZjUwODA3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pY21wLmMKKysrIGIvbmV0L2lwdjQvaWNtcC5jCkBAIC0zNzUsNiArMzc1LDcgQEAKIAlpbmV0LT50b3MgPSBpcF9oZHIoc2tiKS0+dG9zOwogCWRhZGRyID0gaXBjLmFkZHIgPSBydC0+cnRfc3JjOwogCWlwYy5vcHQgPSBOVUxMOworCWlwYy5zaHR4LmZsYWdzID0gMDsKIAlpZiAoaWNtcF9wYXJhbS0+cmVwbHlvcHRzLm9wdGxlbikgewogCQlpcGMub3B0ID0gJmljbXBfcGFyYW0tPnJlcGx5b3B0czsKIAkJaWYgKGlwYy5vcHQtPnNycikKQEAgLTUzMiw2ICs1MzMsNyBAQAogCWluZXRfc2soc2spLT50b3MgPSB0b3M7CiAJaXBjLmFkZHIgPSBpcGgtPnNhZGRyOwogCWlwYy5vcHQgPSAmaWNtcF9wYXJhbS5yZXBseW9wdHM7CisJaXBjLnNodHguZmxhZ3MgPSAwOwogCiAJewogCQlzdHJ1Y3QgZmxvd2kgZmwgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCBmMjZhYjM4Li4yMmNkMTllIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTkzLDI0ICs5Myw0MCBAQAogCXN0cnVjdCBpbmV0X2JpbmRfaGFzaGJ1Y2tldCAqaGVhZDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGI7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBhdHRlbXB0cyA9IDU7CiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOworCWludCBzbWFsbGVzdF9zaXplID0gLTEsIHNtYWxsZXN0X3JvdmVyOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWlmICghc251bSkgewogCQlpbnQgcmVtYWluaW5nLCByb3ZlciwgbG93LCBoaWdoOwogCithZ2FpbjoKIAkJaW5ldF9nZXRfbG9jYWxfcG9ydF9yYW5nZSgmbG93LCAmaGlnaCk7CiAJCXJlbWFpbmluZyA9IChoaWdoIC0gbG93KSArIDE7Ci0JCXJvdmVyID0gbmV0X3JhbmRvbSgpICUgcmVtYWluaW5nICsgbG93OworCQlzbWFsbGVzdF9yb3ZlciA9IHJvdmVyID0gbmV0X3JhbmRvbSgpICUgcmVtYWluaW5nICsgbG93OwogCisJCXNtYWxsZXN0X3NpemUgPSAtMTsKIAkJZG8gewogCQkJaGVhZCA9ICZoYXNoaW5mby0+Ymhhc2hbaW5ldF9iaGFzaGZuKG5ldCwgcm92ZXIsCiAJCQkJCWhhc2hpbmZvLT5iaGFzaF9zaXplKV07CiAJCQlzcGluX2xvY2soJmhlYWQtPmxvY2spOwogCQkJaW5ldF9iaW5kX2J1Y2tldF9mb3JfZWFjaCh0Yiwgbm9kZSwgJmhlYWQtPmNoYWluKQotCQkJCWlmIChpYl9uZXQodGIpID09IG5ldCAmJiB0Yi0+cG9ydCA9PSByb3ZlcikKKwkJCQlpZiAoaWJfbmV0KHRiKSA9PSBuZXQgJiYgdGItPnBvcnQgPT0gcm92ZXIpIHsKKwkJCQkJaWYgKHRiLT5mYXN0cmV1c2UgPiAwICYmCisJCQkJCSAgICBzay0+c2tfcmV1c2UgJiYKKwkJCQkJICAgIHNrLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOICYmCisJCQkJCSAgICAodGItPm51bV9vd25lcnMgPCBzbWFsbGVzdF9zaXplIHx8IHNtYWxsZXN0X3NpemUgPT0gLTEpKSB7CisJCQkJCQlzbWFsbGVzdF9zaXplID0gdGItPm51bV9vd25lcnM7CisJCQkJCQlzbWFsbGVzdF9yb3ZlciA9IHJvdmVyOworCQkJCQkJaWYgKGF0b21pY19yZWFkKCZoYXNoaW5mby0+YnNvY2tldHMpID4gKGhpZ2ggLSBsb3cpICsgMSkgeworCQkJCQkJCXNwaW5fdW5sb2NrKCZoZWFkLT5sb2NrKTsKKwkJCQkJCQlzbnVtID0gc21hbGxlc3Rfcm92ZXI7CisJCQkJCQkJZ290byBoYXZlX3NudW07CisJCQkJCQl9CisJCQkJCX0KIAkJCQkJZ290byBuZXh0OworCQkJCX0KIAkJCWJyZWFrOwogCQluZXh0OgogCQkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOwpAQCAtMTI1LDE0ICsxNDEsMTkgQEAKIAkJICogdGhlIHRvcCBsZXZlbCwgbm90IGZyb20gdGhlICdicmVhazsnIHN0YXRlbWVudC4KIAkJICovCiAJCXJldCA9IDE7Ci0JCWlmIChyZW1haW5pbmcgPD0gMCkKKwkJaWYgKHJlbWFpbmluZyA8PSAwKSB7CisJCQlpZiAoc21hbGxlc3Rfc2l6ZSAhPSAtMSkgeworCQkJCXNudW0gPSBzbWFsbGVzdF9yb3ZlcjsKKwkJCQlnb3RvIGhhdmVfc251bTsKKwkJCX0KIAkJCWdvdG8gZmFpbDsKLQorCQl9CiAJCS8qIE9LLCBoZXJlIGlzIHRoZSBvbmUgd2Ugd2lsbCB1c2UuICBIRUFEIGlzCiAJCSAqIG5vbi1OVUxMIGFuZCB3ZSBob2xkIGl0J3MgbXV0ZXguCiAJCSAqLwogCQlzbnVtID0gcm92ZXI7CiAJfSBlbHNlIHsKK2hhdmVfc251bToKIAkJaGVhZCA9ICZoYXNoaW5mby0+Ymhhc2hbaW5ldF9iaGFzaGZuKG5ldCwgc251bSwKIAkJCQloYXNoaW5mby0+Ymhhc2hfc2l6ZSldOwogCQlzcGluX2xvY2soJmhlYWQtPmxvY2spOwpAQCAtMTQ1LDEyICsxNjYsMTkgQEAKIHRiX2ZvdW5kOgogCWlmICghaGxpc3RfZW1wdHkoJnRiLT5vd25lcnMpKSB7CiAJCWlmICh0Yi0+ZmFzdHJldXNlID4gMCAmJgotCQkgICAgc2stPnNrX3JldXNlICYmIHNrLT5za19zdGF0ZSAhPSBUQ1BfTElTVEVOKSB7CisJCSAgICBzay0+c2tfcmV1c2UgJiYgc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4gJiYKKwkJICAgIHNtYWxsZXN0X3NpemUgPT0gLTEpIHsKIAkJCWdvdG8gc3VjY2VzczsKIAkJfSBlbHNlIHsKIAkJCXJldCA9IDE7Ci0JCQlpZiAoaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+YmluZF9jb25mbGljdChzaywgdGIpKQorCQkJaWYgKGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPmJpbmRfY29uZmxpY3Qoc2ssIHRiKSkgeworCQkJCWlmIChzay0+c2tfcmV1c2UgJiYgc2stPnNrX3N0YXRlICE9IFRDUF9MSVNURU4gJiYKKwkJCQkgICAgc21hbGxlc3Rfc2l6ZSAhPSAtMSAmJiAtLWF0dGVtcHRzID49IDApIHsKKwkJCQkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOworCQkJCQlnb3RvIGFnYWluOworCQkJCX0KIAkJCQlnb3RvIGZhaWxfdW5sb2NrOworCQkJfQogCQl9CiAJfQogdGJfbm90X2ZvdW5kOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jIGIvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jCmluZGV4IDZjNTJlMDguLmVhZjNlMmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYworKysgYi9uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMKQEAgLTI2Nyw2ICsyNjcsNyBAQAogCiBzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICppbmV0X2ZyYWdfZmluZChzdHJ1Y3QgbmV0bnNfZnJhZ3MgKm5mLAogCQlzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgdm9pZCAqa2V5LCB1bnNpZ25lZCBpbnQgaGFzaCkKKwlfX3JlbGVhc2VzKCZmLT5sb2NrKQogewogCXN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnE7CiAJc3RydWN0IGhsaXN0X25vZGUgKm47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCmluZGV4IDZhMTA0NWQuLjYyNWNjNWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCisrKyBiL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jCkBAIC0zOCw2ICszOCw3IEBACiAJCXdyaXRlX3BuZXQoJnRiLT5pYl9uZXQsIGhvbGRfbmV0KG5ldCkpOwogCQl0Yi0+cG9ydCAgICAgID0gc251bTsKIAkJdGItPmZhc3RyZXVzZSA9IDA7CisJCXRiLT5udW1fb3duZXJzID0gMDsKIAkJSU5JVF9ITElTVF9IRUFEKCZ0Yi0+b3duZXJzKTsKIAkJaGxpc3RfYWRkX2hlYWQoJnRiLT5ub2RlLCAmaGVhZC0+Y2hhaW4pOwogCX0KQEAgLTU5LDggKzYwLDEzIEBACiB2b2lkIGluZXRfYmluZF9oYXNoKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfYmluZF9idWNrZXQgKnRiLAogCQkgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgc251bSkKIHsKKwlzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8gPSBzay0+c2tfcHJvdC0+aC5oYXNoaW5mbzsKKworCWF0b21pY19pbmMoJmhhc2hpbmZvLT5ic29ja2V0cyk7CisKIAlpbmV0X3NrKHNrKS0+bnVtID0gc251bTsKIAlza19hZGRfYmluZF9ub2RlKHNrLCAmdGItPm93bmVycyk7CisJdGItPm51bV9vd25lcnMrKzsKIAlpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoID0gdGI7CiB9CiAKQEAgLTc1LDkgKzgxLDEyIEBACiAJc3RydWN0IGluZXRfYmluZF9oYXNoYnVja2V0ICpoZWFkID0gJmhhc2hpbmZvLT5iaGFzaFtiaGFzaF07CiAJc3RydWN0IGluZXRfYmluZF9idWNrZXQgKnRiOwogCisJYXRvbWljX2RlYygmaGFzaGluZm8tPmJzb2NrZXRzKTsKKwogCXNwaW5fbG9jaygmaGVhZC0+bG9jayk7CiAJdGIgPSBpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoOwogCV9fc2tfZGVsX2JpbmRfbm9kZShzayk7CisJdGItPm51bV9vd25lcnMtLTsKIAlpbmV0X2NzayhzayktPmljc2tfYmluZF9oYXNoID0gTlVMTDsKIAlpbmV0X3NrKHNrKS0+bnVtID0gMDsKIAlpbmV0X2JpbmRfYnVja2V0X2Rlc3Ryb3koaGFzaGluZm8tPmJpbmRfYnVja2V0X2NhY2hlcCwgdGIpOwpAQCAtNDQ0LDkgKzQ1Myw5IEBACiAJCQkgKi8KIAkJCWluZXRfYmluZF9idWNrZXRfZm9yX2VhY2godGIsIG5vZGUsICZoZWFkLT5jaGFpbikgewogCQkJCWlmIChpYl9uZXQodGIpID09IG5ldCAmJiB0Yi0+cG9ydCA9PSBwb3J0KSB7Ci0JCQkJCVdBUk5fT04oaGxpc3RfZW1wdHkoJnRiLT5vd25lcnMpKTsKIAkJCQkJaWYgKHRiLT5mYXN0cmV1c2UgPj0gMCkKIAkJCQkJCWdvdG8gbmV4dF9wb3J0OworCQkJCQlXQVJOX09OKGhsaXN0X2VtcHR5KCZ0Yi0+b3duZXJzKSk7CiAJCQkJCWlmICghY2hlY2tfZXN0YWJsaXNoZWQoZGVhdGhfcm93LCBzaywKIAkJCQkJCQkJcG9ydCwgJnR3KSkKIAkJCQkJCWdvdG8gb2s7CkBAIC01MjMsNiArNTMyLDcgQEAKIHsKIAlpbnQgaTsKIAorCWF0b21pY19zZXQoJmgtPmJzb2NrZXRzLCAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgSU5FVF9MSFRBQkxFX1NJWkU7IGkrKykgewogCQlzcGluX2xvY2tfaW5pdCgmaC0+bGlzdGVuaW5nX2hhc2hbaV0ubG9jayk7CiAJCUlOSVRfSExJU1RfTlVMTFNfSEVBRCgmaC0+bGlzdGVuaW5nX2hhc2hbaV0uaGVhZCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IDY2NTlhYzAuLjc5ODUzNDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwpAQCAtNDYzLDYgKzQ2Myw3IEBACiBzdGF0aWMgaW50IGlwX2ZyYWdfcmVhc20oc3RydWN0IGlwcSAqcXAsIHN0cnVjdCBza19idWZmICpwcmV2LAogCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKHFwLT5xLm5ldCwgc3RydWN0IG5ldCwgaXB2NC5mcmFncyk7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IHNrX2J1ZmYgKmZwLCAqaGVhZCA9IHFwLT5xLmZyYWdtZW50czsKIAlpbnQgbGVuOwpAQCAtNTQ4LDcgKzU0OSw3IEBACiAJaXBoID0gaXBfaGRyKGhlYWQpOwogCWlwaC0+ZnJhZ19vZmYgPSAwOwogCWlwaC0+dG90X2xlbiA9IGh0b25zKGxlbik7Ci0JSVBfSU5DX1NUQVRTX0JIKGRldl9uZXQoZGV2KSwgSVBTVEFUU19NSUJfUkVBU01PS1MpOworCUlQX0lOQ19TVEFUU19CSChuZXQsIElQU1RBVFNfTUlCX1JFQVNNT0tTKTsKIAlxcC0+cS5mcmFnbWVudHMgPSBOVUxMOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jCmluZGV4IDAxMDE1MjEuLmU2MjUxMGQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC0xNjQsNjcgKzE2NCwxMjQgQEAKIAogLyogR2l2ZW4gc3JjLCBkc3QgYW5kIGtleSwgZmluZCBhcHByb3ByaWF0ZSBmb3IgaW5wdXQgdHVubmVsLiAqLwogCi1zdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqIGlwZ3JlX3R1bm5lbF9sb29rdXAoc3RydWN0IG5ldCAqbmV0LAorc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKiBpcGdyZV90dW5uZWxfbG9va3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgIF9fYmUzMiByZW1vdGUsIF9fYmUzMiBsb2NhbCwKIAkJCQkJICAgICAgX19iZTMyIGtleSwgX19iZTE2IGdyZV9wcm90bykKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CisJaW50IGxpbmsgPSBkZXYtPmlmaW5kZXg7CiAJdW5zaWduZWQgaDAgPSBIQVNIKHJlbW90ZSk7CiAJdW5zaWduZWQgaDEgPSBIQVNIKGtleSk7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdDsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0MiA9IE5VTEw7CisJc3RydWN0IGlwX3R1bm5lbCAqdCwgKmNhbmQgPSBOVUxMOwogCXN0cnVjdCBpcGdyZV9uZXQgKmlnbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBncmVfbmV0X2lkKTsKIAlpbnQgZGV2X3R5cGUgPSAoZ3JlX3Byb3RvID09IGh0b25zKEVUSF9QX1RFQikpID8KIAkJICAgICAgIEFSUEhSRF9FVEhFUiA6IEFSUEhSRF9JUEdSRTsKKwlpbnQgc2NvcmUsIGNhbmRfc2NvcmUgPSA0OwogCiAJZm9yICh0ID0gaWduLT50dW5uZWxzX3JfbFtoMF5oMV07IHQ7IHQgPSB0LT5uZXh0KSB7Ci0JCWlmIChsb2NhbCA9PSB0LT5wYXJtcy5pcGguc2FkZHIgJiYgcmVtb3RlID09IHQtPnBhcm1zLmlwaC5kYWRkcikgewotCQkJaWYgKHQtPnBhcm1zLmlfa2V5ID09IGtleSAmJiB0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSB7Ci0JCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBkZXZfdHlwZSkKLQkJCQkJcmV0dXJuIHQ7Ci0JCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBBUlBIUkRfSVBHUkUgJiYgIXQyKQotCQkJCQl0MiA9IHQ7Ci0JCQl9CisJCWlmIChsb2NhbCAhPSB0LT5wYXJtcy5pcGguc2FkZHIgfHwKKwkJICAgIHJlbW90ZSAhPSB0LT5wYXJtcy5pcGguZGFkZHIgfHwKKwkJICAgIGtleSAhPSB0LT5wYXJtcy5pX2tleSB8fAorCQkgICAgISh0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0LT5kZXYtPnR5cGUgIT0gQVJQSFJEX0lQR1JFICYmCisJCSAgICB0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQljb250aW51ZTsKKworCQlzY29yZSA9IDA7CisJCWlmICh0LT5wYXJtcy5saW5rICE9IGxpbmspCisJCQlzY29yZSB8PSAxOworCQlpZiAodC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJc2NvcmUgfD0gMjsKKwkJaWYgKHNjb3JlID09IDApCisJCQlyZXR1cm4gdDsKKworCQlpZiAoc2NvcmUgPCBjYW5kX3Njb3JlKSB7CisJCQljYW5kID0gdDsKKwkJCWNhbmRfc2NvcmUgPSBzY29yZTsKIAkJfQogCX0KIAogCWZvciAodCA9IGlnbi0+dHVubmVsc19yW2gwXmgxXTsgdDsgdCA9IHQtPm5leHQpIHsKLQkJaWYgKHJlbW90ZSA9PSB0LT5wYXJtcy5pcGguZGFkZHIpIHsKLQkJCWlmICh0LT5wYXJtcy5pX2tleSA9PSBrZXkgJiYgdC0+ZGV2LT5mbGFncyAmIElGRl9VUCkgewotCQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gZGV2X3R5cGUpCi0JCQkJCXJldHVybiB0OwotCQkJCWlmICh0LT5kZXYtPnR5cGUgPT0gQVJQSFJEX0lQR1JFICYmICF0MikKLQkJCQkJdDIgPSB0OwotCQkJfQorCQlpZiAocmVtb3RlICE9IHQtPnBhcm1zLmlwaC5kYWRkciB8fAorCQkgICAga2V5ICE9IHQtPnBhcm1zLmlfa2V5IHx8CisJCSAgICAhKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQorCQkJY29udGludWU7CisKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBBUlBIUkRfSVBHUkUgJiYKKwkJICAgIHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCWNvbnRpbnVlOworCisJCXNjb3JlID0gMDsKKwkJaWYgKHQtPnBhcm1zLmxpbmsgIT0gbGluaykKKwkJCXNjb3JlIHw9IDE7CisJCWlmICh0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQlzY29yZSB8PSAyOworCQlpZiAoc2NvcmUgPT0gMCkKKwkJCXJldHVybiB0OworCisJCWlmIChzY29yZSA8IGNhbmRfc2NvcmUpIHsKKwkJCWNhbmQgPSB0OworCQkJY2FuZF9zY29yZSA9IHNjb3JlOwogCQl9CiAJfQogCiAJZm9yICh0ID0gaWduLT50dW5uZWxzX2xbaDFdOyB0OyB0ID0gdC0+bmV4dCkgewotCQlpZiAobG9jYWwgPT0gdC0+cGFybXMuaXBoLnNhZGRyIHx8Ci0JCSAgICAgKGxvY2FsID09IHQtPnBhcm1zLmlwaC5kYWRkciAmJgotCQkgICAgICBpcHY0X2lzX211bHRpY2FzdChsb2NhbCkpKSB7Ci0JCQlpZiAodC0+cGFybXMuaV9rZXkgPT0ga2V5ICYmIHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJCQlpZiAodC0+ZGV2LT50eXBlID09IGRldl90eXBlKQotCQkJCQlyZXR1cm4gdDsKLQkJCQlpZiAodC0+ZGV2LT50eXBlID09IEFSUEhSRF9JUEdSRSAmJiAhdDIpCi0JCQkJCXQyID0gdDsKLQkJCX0KKwkJaWYgKChsb2NhbCAhPSB0LT5wYXJtcy5pcGguc2FkZHIgJiYKKwkJICAgICAobG9jYWwgIT0gdC0+cGFybXMuaXBoLmRhZGRyIHx8CisJCSAgICAgICFpcHY0X2lzX211bHRpY2FzdChsb2NhbCkpKSB8fAorCQkgICAga2V5ICE9IHQtPnBhcm1zLmlfa2V5IHx8CisJCSAgICAhKHQtPmRldi0+ZmxhZ3MgJiBJRkZfVVApKQorCQkJY29udGludWU7CisKKwkJaWYgKHQtPmRldi0+dHlwZSAhPSBBUlBIUkRfSVBHUkUgJiYKKwkJICAgIHQtPmRldi0+dHlwZSAhPSBkZXZfdHlwZSkKKwkJCWNvbnRpbnVlOworCisJCXNjb3JlID0gMDsKKwkJaWYgKHQtPnBhcm1zLmxpbmsgIT0gbGluaykKKwkJCXNjb3JlIHw9IDE7CisJCWlmICh0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQlzY29yZSB8PSAyOworCQlpZiAoc2NvcmUgPT0gMCkKKwkJCXJldHVybiB0OworCisJCWlmIChzY29yZSA8IGNhbmRfc2NvcmUpIHsKKwkJCWNhbmQgPSB0OworCQkJY2FuZF9zY29yZSA9IHNjb3JlOwogCQl9CiAJfQogCiAJZm9yICh0ID0gaWduLT50dW5uZWxzX3djW2gxXTsgdDsgdCA9IHQtPm5leHQpIHsKLQkJaWYgKHQtPnBhcm1zLmlfa2V5ID09IGtleSAmJiB0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSB7Ci0JCQlpZiAodC0+ZGV2LT50eXBlID09IGRldl90eXBlKQotCQkJCXJldHVybiB0OwotCQkJaWYgKHQtPmRldi0+dHlwZSA9PSBBUlBIUkRfSVBHUkUgJiYgIXQyKQotCQkJCXQyID0gdDsKKwkJaWYgKHQtPnBhcm1zLmlfa2V5ICE9IGtleSB8fAorCQkgICAgISh0LT5kZXYtPmZsYWdzICYgSUZGX1VQKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0LT5kZXYtPnR5cGUgIT0gQVJQSFJEX0lQR1JFICYmCisJCSAgICB0LT5kZXYtPnR5cGUgIT0gZGV2X3R5cGUpCisJCQljb250aW51ZTsKKworCQlzY29yZSA9IDA7CisJCWlmICh0LT5wYXJtcy5saW5rICE9IGxpbmspCisJCQlzY29yZSB8PSAxOworCQlpZiAodC0+ZGV2LT50eXBlICE9IGRldl90eXBlKQorCQkJc2NvcmUgfD0gMjsKKwkJaWYgKHNjb3JlID09IDApCisJCQlyZXR1cm4gdDsKKworCQlpZiAoc2NvcmUgPCBjYW5kX3Njb3JlKSB7CisJCQljYW5kID0gdDsKKwkJCWNhbmRfc2NvcmUgPSBzY29yZTsKIAkJfQogCX0KIAotCWlmICh0MikKLQkJcmV0dXJuIHQyOworCWlmIChjYW5kICE9IE5VTEwpCisJCXJldHVybiBjYW5kOwogCi0JaWYgKGlnbi0+ZmJfdHVubmVsX2Rldi0+ZmxhZ3MmSUZGX1VQKQorCWlmIChpZ24tPmZiX3R1bm5lbF9kZXYtPmZsYWdzICYgSUZGX1VQKQogCQlyZXR1cm4gbmV0ZGV2X3ByaXYoaWduLT5mYl90dW5uZWxfZGV2KTsKKwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yODQsNiArMzQxLDcgQEAKIAlfX2JlMzIgcmVtb3RlID0gcGFybXMtPmlwaC5kYWRkcjsKIAlfX2JlMzIgbG9jYWwgPSBwYXJtcy0+aXBoLnNhZGRyOwogCV9fYmUzMiBrZXkgPSBwYXJtcy0+aV9rZXk7CisJaW50IGxpbmsgPSBwYXJtcy0+bGluazsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0LCAqKnRwOwogCXN0cnVjdCBpcGdyZV9uZXQgKmlnbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBncmVfbmV0X2lkKTsKIApAQCAtMjkxLDYgKzM0OSw3IEBACiAJCWlmIChsb2NhbCA9PSB0LT5wYXJtcy5pcGguc2FkZHIgJiYKIAkJICAgIHJlbW90ZSA9PSB0LT5wYXJtcy5pcGguZGFkZHIgJiYKIAkJICAgIGtleSA9PSB0LT5wYXJtcy5pX2tleSAmJgorCQkgICAgbGluayA9PSB0LT5wYXJtcy5saW5rICYmCiAJCSAgICB0eXBlID09IHQtPmRldi0+dHlwZSkKIAkJCWJyZWFrOwogCkBAIC00MjEsNyArNDgwLDcgQEAKIAl9CiAKIAlyZWFkX2xvY2soJmlwZ3JlX2xvY2spOwotCXQgPSBpcGdyZV90dW5uZWxfbG9va3VwKGRldl9uZXQoc2tiLT5kZXYpLCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAorCXQgPSBpcGdyZV90dW5uZWxfbG9va3VwKHNrYi0+ZGV2LCBpcGgtPmRhZGRyLCBpcGgtPnNhZGRyLAogCQkJCWZsYWdzICYgR1JFX0tFWSA/CiAJCQkJKigoKF9fYmUzMiAqKXApICsgKGdyZWhsZW4gLyA0KSAtIDEpIDogMCwKIAkJCQlwWzFdKTsKQEAgLTQzMiw3ICs0OTEsNyBAQAogCWlmICh0LT5wYXJtcy5pcGgudHRsID09IDAgJiYgdHlwZSA9PSBJQ01QX1RJTUVfRVhDRUVERUQpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGppZmZpZXMgLSB0LT5lcnJfdGltZSA8IElQVFVOTkVMX0VSUl9USU1FTykKKwlpZiAodGltZV9iZWZvcmUoamlmZmllcywgdC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKQogCQl0LT5lcnJfY291bnQrKzsKIAllbHNlCiAJCXQtPmVycl9jb3VudCA9IDE7CkBAIC01MTgsNyArNTc3LDcgQEAKIAlncmVfcHJvdG8gPSAqKF9fYmUxNiAqKShoICsgMik7CiAKIAlyZWFkX2xvY2soJmlwZ3JlX2xvY2spOwotCWlmICgodHVubmVsID0gaXBncmVfdHVubmVsX2xvb2t1cChkZXZfbmV0KHNrYi0+ZGV2KSwKKwlpZiAoKHR1bm5lbCA9IGlwZ3JlX3R1bm5lbF9sb29rdXAoc2tiLT5kZXYsCiAJCQkJCSAgaXBoLT5zYWRkciwgaXBoLT5kYWRkciwga2V5LAogCQkJCQkgIGdyZV9wcm90bykpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ0dW5uZWwtPmRldi0+c3RhdHM7CkBAIC03NDQsNyArODAzLDggQEAKICNlbmRpZgogCiAJaWYgKHR1bm5lbC0+ZXJyX2NvdW50ID4gMCkgewotCQlpZiAoamlmZmllcyAtIHR1bm5lbC0+ZXJyX3RpbWUgPCBJUFRVTk5FTF9FUlJfVElNRU8pIHsKKwkJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsCisJCQkJdHVubmVsLT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpIHsKIAkJCXR1bm5lbC0+ZXJyX2NvdW50LS07CiAKIAkJCWRzdF9saW5rX2ZhaWx1cmUoc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggOGViZTg2ZGQuLjNlN2U5MTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC05MzUsNiArOTM1LDEwIEBACiAJCQkJCQkJICAgc2stPnNrX2FsbG9jYXRpb24pOwogCQkJCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCiAJCQkJCWVyciA9IC1FTk9CVUZTOworCQkJCWVsc2UKKwkJCQkJLyogb25seSB0aGUgaW5pdGlhbCBmcmFnbWVudCBpcworCQkJCQkgICB0aW1lIHN0YW1wZWQgKi8KKwkJCQkJaXBjLT5zaHR4LmZsYWdzID0gMDsKIAkJCX0KIAkJCWlmIChza2IgPT0gTlVMTCkKIAkJCQlnb3RvIGVycm9yOwpAQCAtOTQ1LDYgKzk0OSw3IEBACiAJCQlza2ItPmlwX3N1bW1lZCA9IGNzdW1tb2RlOwogCQkJc2tiLT5jc3VtID0gMDsKIAkJCXNrYl9yZXNlcnZlKHNrYiwgaGhfbGVuKTsKKwkJCSpza2JfdHgoc2tiKSA9IGlwYy0+c2h0eDsKIAogCQkJLyoKIAkJCSAqCUZpbmQgd2hlcmUgdG8gc3RhcnQgcHV0dGluZyBieXRlcy4KQEAgLTEzNjQsNiArMTM2OSw3IEBACiAKIAlkYWRkciA9IGlwYy5hZGRyID0gcnQtPnJ0X3NyYzsKIAlpcGMub3B0ID0gTlVMTDsKKwlpcGMuc2h0eC5mbGFncyA9IDA7CiAKIAlpZiAocmVwbHlvcHRzLm9wdC5vcHRsZW4pIHsKIAkJaXBjLm9wdCA9ICZyZXBseW9wdHMub3B0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb25maWcuYyBiL25ldC9pcHY0L2lwY29uZmlnLmMKaW5kZXggZDcyMjAxMy4uOTBkMjJhZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBjb25maWcuYworKysgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCkBAIC0xMDAsOCArMTAwLDggQEAKICNkZWZpbmUgQ09ORl9OQU1FU0VSVkVSU19NQVggICAzICAgICAgIC8qIE1heGltdW0gbnVtYmVyIG9mIG5hbWVzZXJ2ZXJzCiAJCQkJCSAgIC0gJzMnIGZyb20gcmVzb2x2LmggKi8KIAotI2RlZmluZSBOT05FIF9fY29uc3RhbnRfaHRvbmwoSU5BRERSX05PTkUpCi0jZGVmaW5lIEFOWSBfX2NvbnN0YW50X2h0b25sKElOQUREUl9BTlkpCisjZGVmaW5lIE5PTkUgY3B1X3RvX2JlMzIoSU5BRERSX05PTkUpCisjZGVmaW5lIEFOWSBjcHVfdG9fYmUzMihJTkFERFJfQU5ZKQogCiAvKgogICogUHVibGljIElQIGNvbmZpZ3VyYXRpb24KQEAgLTQwNiw3ICs0MDYsNyBAQAogc3RhdGljIGludCBpY19yYXJwX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKIAogc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSByYXJwX3BhY2tldF90eXBlIF9faW5pdGRhdGEgPSB7Ci0JLnR5cGUgPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX1JBUlApLAorCS50eXBlID0JY3B1X3RvX2JlMTYoRVRIX1BfUkFSUCksCiAJLmZ1bmMgPQlpY19yYXJwX3JlY3YsCiB9OwogCkBAIC01NjgsNyArNTY4LDcgQEAKIHN0YXRpYyBpbnQgaWNfYm9vdHBfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGJvb3RwX3BhY2tldF90eXBlIF9faW5pdGRhdGEgPSB7Ci0JLnR5cGUgPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkudHlwZSA9CWNwdV90b19iZTE2KEVUSF9QX0lQKSwKIAkuZnVuYyA9CWljX2Jvb3RwX3JlY3YsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggNTA3OWRmYi4uOTA1NDEzOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJaWYgKHQtPnBhcm1zLmlwaC50dGwgPT0gMCAmJiB0eXBlID09IElDTVBfVElNRV9FWENFRURFRCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoamlmZmllcyAtIHQtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0LT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpCiAJCXQtPmVycl9jb3VudCsrOwogCWVsc2UKIAkJdC0+ZXJyX2NvdW50ID0gMTsKQEAgLTQ2Niw3ICs0NjYsOCBAQAogCX0KIAogCWlmICh0dW5uZWwtPmVycl9jb3VudCA+IDApIHsKLQkJaWYgKGppZmZpZXMgLSB0dW5uZWwtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLAorCQkJCXR1bm5lbC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKSB7CiAJCQl0dW5uZWwtPmVycl9jb3VudC0tOwogCQkJZHN0X2xpbmtfZmFpbHVyZShza2IpOwogCQl9IGVsc2UKQEAgLTc1MCw3ICs3NTEsNyBAQAogCS5wcmlvcml0eQk9CTEsCiB9OwogCi1zdGF0aWMgY2hhciBiYW5uZXJbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGJhbm5lcltdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0lORk8gIklQdjQgb3ZlciBJUHY0IHR1bm5lbGluZyBkcml2ZXJcbiI7CiAKIHN0YXRpYyB2b2lkIGlwaXBfZGVzdHJveV90dW5uZWxzKHN0cnVjdCBpcGlwX25ldCAqaXBuKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IDE0NjY2NDQuLjEzZTlkZDMwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC02Nyw5ICs2Nyw2IEBACiAjZGVmaW5lIENPTkZJR19JUF9QSU1TTQkxCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBzb2NrICptcm91dGVfc29ja2V0OwotCi0KIC8qIEJpZyBsb2NrLCBwcm90ZWN0aW5nIHZpZiB0YWJsZSwgbXJ0IGNhY2hlIGFuZCBtcm91dGUgc29ja2V0IHN0YXRlLgogICAgTm90ZSB0aGF0IHRoZSBjaGFuZ2VzIGFyZSBzZW1hcGhvcmVkIHZpYSBydG5sX2xvY2suCiAgKi8KQEAgLTgwLDE4ICs3Nyw5IEBACiAgKglNdWx0aWNhc3Qgcm91dGVyIGNvbnRyb2wgdmFyaWFibGVzCiAgKi8KIAotc3RhdGljIHN0cnVjdCB2aWZfZGV2aWNlIHZpZl90YWJsZVtNQVhWSUZTXTsJCS8qIERldmljZXMgCQkqLwotc3RhdGljIGludCBtYXh2aWY7Ci0KLSNkZWZpbmUgVklGX0VYSVNUUyhpZHgpICh2aWZfdGFibGVbaWR4XS5kZXYgIT0gTlVMTCkKLQotc3RhdGljIGludCBtcm91dGVfZG9fYXNzZXJ0OwkJCQkvKiBTZXQgaW4gUElNIGFzc2VydAkqLwotc3RhdGljIGludCBtcm91dGVfZG9fcGltOwotCi1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqbWZjX2NhY2hlX2FycmF5W01GQ19MSU5FU107CS8qIEZvcndhcmRpbmcgY2FjaGUJKi8KKyNkZWZpbmUgVklGX0VYSVNUUyhfbmV0LCBfaWR4KSAoKF9uZXQpLT5pcHY0LnZpZl90YWJsZVtfaWR4XS5kZXYgIT0gTlVMTCkKIAogc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKm1mY191bnJlc19xdWV1ZTsJCS8qIFF1ZXVlIG9mIHVucmVzb2x2ZWQgZW50cmllcyAqLwotc3RhdGljIGF0b21pY190IGNhY2hlX3Jlc29sdmVfcXVldWVfbGVuOwkJLyogU2l6ZSBvZiB1bnJlc29sdmVkCSovCiAKIC8qIFNwZWNpYWwgc3BpbmxvY2sgZm9yIHF1ZXVlIG9mIHVucmVzb2x2ZWQgZW50cmllcyAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhtZmNfdW5yZXNfbG9jayk7CkBAIC0xMDcsNyArOTUsOCBAQAogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBpbnQgaXBfbXJfZm9yd2FyZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWZjX2NhY2hlICpjYWNoZSwgaW50IGxvY2FsKTsKLXN0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoc3RydWN0IHNrX2J1ZmYgKnBrdCwgdmlmaV90IHZpZmksIGludCBhc3NlcnQpOworc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpwa3QsIHZpZmlfdCB2aWZpLCBpbnQgYXNzZXJ0KTsKIHN0YXRpYyBpbnQgaXBtcl9maWxsX21yb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbWZjX2NhY2hlICpjLCBzdHJ1Y3QgcnRtc2cgKnJ0bSk7CiAKICNpZmRlZiBDT05GSUdfSVBfUElNU01fVjIKQEAgLTEyMCw5ICsxMDksMTEgQEAKIAogc3RhdGljIHZvaWQgaXBtcl9kZWxfdHVubmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCB2aWZjdGwgKnYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCiAJZGV2X2Nsb3NlKGRldik7CiAKLQlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsICJ0dW5sMCIpOworCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgInR1bmwwIik7CiAJaWYgKGRldikgewogCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKIAkJc3RydWN0IGlmcmVxIGlmcjsKQEAgLTE0OCwxMSArMTM5LDExIEBACiB9CiAKIHN0YXRpYwotc3RydWN0IG5ldF9kZXZpY2UgKmlwbXJfbmV3X3R1bm5lbChzdHJ1Y3QgdmlmY3RsICp2KQorc3RydWN0IG5ldF9kZXZpY2UgKmlwbXJfbmV3X3R1bm5lbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB2aWZjdGwgKnYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgICpkZXY7CiAKLQlkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsICJ0dW5sMCIpOworCWRldiA9IF9fZGV2X2dldF9ieV9uYW1lKG5ldCwgInR1bmwwIik7CiAKIAlpZiAoZGV2KSB7CiAJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyAqb3BzID0gZGV2LT5uZXRkZXZfb3BzOwpAQCAtMTgxLDcgKzE3Miw4IEBACiAKIAkJZGV2ID0gTlVMTDsKIAotCQlpZiAoZXJyID09IDAgJiYgKGRldiA9IF9fZGV2X2dldF9ieV9uYW1lKCZpbml0X25ldCwgcC5uYW1lKSkgIT0gTlVMTCkgeworCQlpZiAoZXJyID09IDAgJiYKKwkJICAgIChkZXYgPSBfX2Rldl9nZXRfYnlfbmFtZShuZXQsIHAubmFtZSkpICE9IE5VTEwpIHsKIAkJCWRldi0+ZmxhZ3MgfD0gSUZGX01VTFRJQ0FTVDsKIAogCQkJaW5fZGV2ID0gX19pbl9kZXZfZ2V0X3J0bmwoZGV2KTsKQEAgLTIwOSwxNCArMjAxLDE1IEBACiAKICNpZmRlZiBDT05GSUdfSVBfUElNU00KIAotc3RhdGljIGludCByZWdfdmlmX251bSA9IC0xOwotCiBzdGF0aWMgaW50IHJlZ192aWZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwogCXJlYWRfbG9jaygmbXJ0X2xvY2spOwogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JaXBtcl9jYWNoZV9yZXBvcnQoc2tiLCByZWdfdmlmX251bSwgSUdNUE1TR19XSE9MRVBLVCk7CisJaXBtcl9jYWNoZV9yZXBvcnQobmV0LCBza2IsIG5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0sCisJCQkgIElHTVBNU0dfV0hPTEVQS1QpOwogCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CkBAIC0yODMsMTYgKzI3NiwxNiBAQAogICoJQG5vdGlmeTogU2V0IHRvIDEsIGlmIHRoZSBjYWxsZXIgaXMgYSBub3RpZmllcl9jYWxsCiAgKi8KIAotc3RhdGljIGludCB2aWZfZGVsZXRlKGludCB2aWZpLCBpbnQgbm90aWZ5KQorc3RhdGljIGludCB2aWZfZGVsZXRlKHN0cnVjdCBuZXQgKm5ldCwgaW50IHZpZmksIGludCBub3RpZnkpCiB7CiAJc3RydWN0IHZpZl9kZXZpY2UgKnY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAKLQlpZiAodmlmaSA8IDAgfHwgdmlmaSA+PSBtYXh2aWYpCisJaWYgKHZpZmkgPCAwIHx8IHZpZmkgPj0gbmV0LT5pcHY0Lm1heHZpZikKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCi0JdiA9ICZ2aWZfdGFibGVbdmlmaV07CisJdiA9ICZuZXQtPmlwdjQudmlmX3RhYmxlW3ZpZmldOwogCiAJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwogCWRldiA9IHYtPmRldjsKQEAgLTMwNCwxNyArMjk3LDE3IEBACiAJfQogCiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCi0JaWYgKHZpZmkgPT0gcmVnX3ZpZl9udW0pCi0JCXJlZ192aWZfbnVtID0gLTE7CisJaWYgKHZpZmkgPT0gbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSkKKwkJbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSA9IC0xOwogI2VuZGlmCiAKLQlpZiAodmlmaSsxID09IG1heHZpZikgeworCWlmICh2aWZpKzEgPT0gbmV0LT5pcHY0Lm1heHZpZikgewogCQlpbnQgdG1wOwogCQlmb3IgKHRtcD12aWZpLTE7IHRtcD49MDsgdG1wLS0pIHsKLQkJCWlmIChWSUZfRVhJU1RTKHRtcCkpCisJCQlpZiAoVklGX0VYSVNUUyhuZXQsIHRtcCkpCiAJCQkJYnJlYWs7CiAJCX0KLQkJbWF4dmlmID0gdG1wKzE7CisJCW5ldC0+aXB2NC5tYXh2aWYgPSB0bXArMTsKIAl9CiAKIAl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKQEAgLTMzMyw2ICszMjYsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGlwbXJfY2FjaGVfZnJlZShzdHJ1Y3QgbWZjX2NhY2hlICpjKQoreworCXJlbGVhc2VfbmV0KG1mY19uZXQoYykpOworCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCBjKTsKK30KKwogLyogRGVzdHJveSBhbiB1bnJlc29sdmVkIGNhY2hlIGVudHJ5LCBraWxsaW5nIHF1ZXVlZCBza2JzCiAgICBhbmQgcmVwb3J0aW5nIGVycm9yIHRvIG5ldGxpbmsgcmVhZGVycy4KICAqLwpAQCAtMzQxLDggKzM0MCw5IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3Qgbmxtc2dlcnIgKmU7CisJc3RydWN0IG5ldCAqbmV0ID0gbWZjX25ldChjKTsKIAotCWF0b21pY19kZWMoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKTsKKwlhdG9taWNfZGVjKCZuZXQtPmlwdjQuY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pOwogCiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYy0+bWZjX3VuLnVucmVzLnVucmVzb2x2ZWQpKSkgewogCQlpZiAoaXBfaGRyKHNrYiktPnZlcnNpb24gPT0gMCkgewpAQCAtMzU0LDEyICszNTQsMTIgQEAKIAkJCWUtPmVycm9yID0gLUVUSU1FRE9VVDsKIAkJCW1lbXNldCgmZS0+bXNnLCAwLCBzaXplb2YoZS0+bXNnKSk7CiAKLQkJCXJ0bmxfdW5pY2FzdChza2IsICZpbml0X25ldCwgTkVUTElOS19DQihza2IpLnBpZCk7CisJCQlydG5sX3VuaWNhc3Qoc2tiLCBuZXQsIE5FVExJTktfQ0Ioc2tiKS5waWQpOwogCQl9IGVsc2UKIAkJCWtmcmVlX3NrYihza2IpOwogCX0KIAotCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCBjKTsKKwlpcG1yX2NhY2hlX2ZyZWUoYyk7CiB9CiAKIApAQCAtMzc2LDcgKzM3Niw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSA9PSAwKQorCWlmIChtZmNfdW5yZXNfcXVldWUgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKIAlub3cgPSBqaWZmaWVzOwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJCWlwbXJfZGVzdHJveV91bnJlcyhjKTsKIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSkKKwlpZiAobWZjX3VucmVzX3F1ZXVlICE9IE5VTEwpCiAJCW1vZF90aW1lcigmaXBtcl9leHBpcmVfdGltZXIsIGppZmZpZXMgKyBleHBpcmVzKTsKIAogb3V0OgpAQCAtNDA5LDEzICs0MDksMTUgQEAKIHN0YXRpYyB2b2lkIGlwbXJfdXBkYXRlX3RocmVzaG9sZHMoc3RydWN0IG1mY19jYWNoZSAqY2FjaGUsIHVuc2lnbmVkIGNoYXIgKnR0bHMpCiB7CiAJaW50IHZpZmk7CisJc3RydWN0IG5ldCAqbmV0ID0gbWZjX25ldChjYWNoZSk7CiAKIAljYWNoZS0+bWZjX3VuLnJlcy5taW52aWYgPSBNQVhWSUZTOwogCWNhY2hlLT5tZmNfdW4ucmVzLm1heHZpZiA9IDA7CiAJbWVtc2V0KGNhY2hlLT5tZmNfdW4ucmVzLnR0bHMsIDI1NSwgTUFYVklGUyk7CiAKLQlmb3IgKHZpZmk9MDsgdmlmaTxtYXh2aWY7IHZpZmkrKykgewotCQlpZiAoVklGX0VYSVNUUyh2aWZpKSAmJiB0dGxzW3ZpZmldICYmIHR0bHNbdmlmaV0gPCAyNTUpIHsKKwlmb3IgKHZpZmkgPSAwOyB2aWZpIDwgbmV0LT5pcHY0Lm1heHZpZjsgdmlmaSsrKSB7CisJCWlmIChWSUZfRVhJU1RTKG5ldCwgdmlmaSkgJiYKKwkJICAgIHR0bHNbdmlmaV0gJiYgdHRsc1t2aWZpXSA8IDI1NSkgewogCQkJY2FjaGUtPm1mY191bi5yZXMudHRsc1t2aWZpXSA9IHR0bHNbdmlmaV07CiAJCQlpZiAoY2FjaGUtPm1mY191bi5yZXMubWludmlmID4gdmlmaSkKIAkJCQljYWNoZS0+bWZjX3VuLnJlcy5taW52aWYgPSB2aWZpOwpAQCAtNDI1LDE2ICs0MjcsMTYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdmlmX2FkZChzdHJ1Y3QgdmlmY3RsICp2aWZjLCBpbnQgbXJ0c29jaykKK3N0YXRpYyBpbnQgdmlmX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB2aWZjdGwgKnZpZmMsIGludCBtcnRzb2NrKQogewogCWludCB2aWZpID0gdmlmYy0+dmlmY192aWZpOwotCXN0cnVjdCB2aWZfZGV2aWNlICp2ID0gJnZpZl90YWJsZVt2aWZpXTsKKwlzdHJ1Y3QgdmlmX2RldmljZSAqdiA9ICZuZXQtPmlwdjQudmlmX3RhYmxlW3ZpZmldOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCWludCBlcnI7CiAKIAkvKiBJcyB2aWYgYnVzeSA/ICovCi0JaWYgKFZJRl9FWElTVFModmlmaSkpCisJaWYgKFZJRl9FWElTVFMobmV0LCB2aWZpKSkKIAkJcmV0dXJuIC1FQUREUklOVVNFOwogCiAJc3dpdGNoICh2aWZjLT52aWZjX2ZsYWdzKSB7CkBAIC00NDQsNyArNDQ2LDcgQEAKIAkJICogU3BlY2lhbCBQdXJwb3NlIFZJRiBpbiBQSU0KIAkJICogQWxsIHRoZSBwYWNrZXRzIHdpbGwgYmUgc2VudCB0byB0aGUgZGFlbW9uCiAJCSAqLwotCQlpZiAocmVnX3ZpZl9udW0gPj0gMCkKKwkJaWYgKG5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0gPj0gMCkKIAkJCXJldHVybiAtRUFERFJJTlVTRTsKIAkJZGV2ID0gaXBtcl9yZWdfdmlmKCk7CiAJCWlmICghZGV2KQpAQCAtNDU4LDcgKzQ2MCw3IEBACiAJCWJyZWFrOwogI2VuZGlmCiAJY2FzZSBWSUZGX1RVTk5FTDoKLQkJZGV2ID0gaXBtcl9uZXdfdHVubmVsKHZpZmMpOworCQlkZXYgPSBpcG1yX25ld190dW5uZWwobmV0LCB2aWZjKTsKIAkJaWYgKCFkZXYpCiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCWVyciA9IGRldl9zZXRfYWxsbXVsdGkoZGV2LCAxKTsKQEAgLTQ2OSw3ICs0NzEsNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgMDoKLQkJZGV2ID0gaXBfZGV2X2ZpbmQoJmluaXRfbmV0LCB2aWZjLT52aWZjX2xjbF9hZGRyLnNfYWRkcik7CisJCWRldiA9IGlwX2Rldl9maW5kKG5ldCwgdmlmYy0+dmlmY19sY2xfYWRkci5zX2FkZHIpOwogCQlpZiAoIWRldikKIAkJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAkJZXJyID0gZGV2X3NldF9hbGxtdWx0aShkZXYsIDEpOwpAQCAtNTEwLDIwICs1MTIsMjIgQEAKIAl2LT5kZXYgPSBkZXY7CiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCiAJaWYgKHYtPmZsYWdzJlZJRkZfUkVHSVNURVIpCi0JCXJlZ192aWZfbnVtID0gdmlmaTsKKwkJbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSA9IHZpZmk7CiAjZW5kaWYKLQlpZiAodmlmaSsxID4gbWF4dmlmKQotCQltYXh2aWYgPSB2aWZpKzE7CisJaWYgKHZpZmkrMSA+IG5ldC0+aXB2NC5tYXh2aWYpCisJCW5ldC0+aXB2NC5tYXh2aWYgPSB2aWZpKzE7CiAJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2ZpbmQoX19iZTMyIG9yaWdpbiwgX19iZTMyIG1jYXN0Z3JwKQorc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfZmluZChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSBfX2JlMzIgb3JpZ2luLAorCQkJCQkgX19iZTMyIG1jYXN0Z3JwKQogewogCWludCBsaW5lID0gTUZDX0hBU0gobWNhc3RncnAsIG9yaWdpbik7CiAJc3RydWN0IG1mY19jYWNoZSAqYzsKIAotCWZvciAoYz1tZmNfY2FjaGVfYXJyYXlbbGluZV07IGM7IGMgPSBjLT5uZXh0KSB7CisJZm9yIChjID0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtsaW5lXTsgYzsgYyA9IGMtPm5leHQpIHsKIAkJaWYgKGMtPm1mY19vcmlnaW49PW9yaWdpbiAmJiBjLT5tZmNfbWNhc3RncnA9PW1jYXN0Z3JwKQogCQkJYnJlYWs7CiAJfQpAQCAtNTMzLDIyICs1MzcsMjQgQEAKIC8qCiAgKglBbGxvY2F0ZSBhIG11bHRpY2FzdCBjYWNoZSBlbnRyeQogICovCi1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9hbGxvYyh2b2lkKQorc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBtZmNfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIAlpZiAoYyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAljLT5tZmNfdW4ucmVzLm1pbnZpZiA9IE1BWFZJRlM7CisJbWZjX25ldF9zZXQoYywgbmV0KTsKIAlyZXR1cm4gYzsKIH0KIAotc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfY2FjaGVfYWxsb2NfdW5yZXModm9pZCkKK3N0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0FUT01JQyk7CiAJaWYgKGMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYy0+bWZjX3VuLnVucmVzLnVucmVzb2x2ZWQpOwogCWMtPm1mY191bi51bnJlcy5leHBpcmVzID0gamlmZmllcyArIDEwKkhaOworCW1mY19uZXRfc2V0KGMsIG5ldCk7CiAJcmV0dXJuIGM7CiB9CiAKQEAgLTU4MSw3ICs1ODcsNyBAQAogCQkJCW1lbXNldCgmZS0+bXNnLCAwLCBzaXplb2YoZS0+bXNnKSk7CiAJCQl9CiAKLQkJCXJ0bmxfdW5pY2FzdChza2IsICZpbml0X25ldCwgTkVUTElOS19DQihza2IpLnBpZCk7CisJCQlydG5sX3VuaWNhc3Qoc2tiLCBtZmNfbmV0KGMpLCBORVRMSU5LX0NCKHNrYikucGlkKTsKIAkJfSBlbHNlCiAJCQlpcF9tcl9mb3J3YXJkKHNrYiwgYywgMCk7CiAJfQpAQCAtNTk0LDcgKzYwMCw4IEBACiAgKglDYWxsZWQgdW5kZXIgbXJ0X2xvY2suCiAgKi8KIAotc3RhdGljIGludCBpcG1yX2NhY2hlX3JlcG9ydChzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCkKK3N0YXRpYyBpbnQgaXBtcl9jYWNoZV9yZXBvcnQoc3RydWN0IG5ldCAqbmV0LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LCB2aWZpX3QgdmlmaSwgaW50IGFzc2VydCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWNvbnN0IGludCBpaGwgPSBpcF9oZHJsZW4ocGt0KTsKQEAgLTYyNiw3ICs2MzMsNyBAQAogCQltZW1jcHkobXNnLCBza2JfbmV0d29ya19oZWFkZXIocGt0KSwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpOwogCQltc2ctPmltX21zZ3R5cGUgPSBJR01QTVNHX1dIT0xFUEtUOwogCQltc2ctPmltX21ieiA9IDA7Ci0JCW1zZy0+aW1fdmlmID0gcmVnX3ZpZl9udW07CisJCW1zZy0+aW1fdmlmID0gbmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bTsKIAkJaXBfaGRyKHNrYiktPmlobCA9IHNpemVvZihzdHJ1Y3QgaXBoZHIpID4+IDI7CiAJCWlwX2hkcihza2IpLT50b3RfbGVuID0gaHRvbnMobnRvaHMoaXBfaGRyKHBrdCktPnRvdF9sZW4pICsKIAkJCQkJICAgICBzaXplb2Yoc3RydWN0IGlwaGRyKSk7CkBAIC02NTgsNyArNjY1LDcgQEAKIAlza2ItPnRyYW5zcG9ydF9oZWFkZXIgPSBza2ItPm5ldHdvcmtfaGVhZGVyOwogCX0KIAotCWlmIChtcm91dGVfc29ja2V0ID09IE5VTEwpIHsKKwlpZiAobmV0LT5pcHY0Lm1yb3V0ZV9zayA9PSBOVUxMKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC02NjYsNyArNjczLDggQEAKIAkvKgogCSAqCURlbGl2ZXIgdG8gbXJvdXRlZAogCSAqLwotCWlmICgocmV0ID0gc29ja19xdWV1ZV9yY3Zfc2tiKG1yb3V0ZV9zb2NrZXQsIHNrYikpPDApIHsKKwlyZXQgPSBzb2NrX3F1ZXVlX3Jjdl9za2IobmV0LT5pcHY0Lm1yb3V0ZV9zaywgc2tiKTsKKwlpZiAocmV0IDwgMCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXJvdXRlOiBwZW5kaW5nIHF1ZXVlIGZ1bGwsIGRyb3BwaW5nIGVudHJpZXMuXG4iKTsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC02ODAsNyArNjg4LDcgQEAKICAqLwogCiBzdGF0aWMgaW50Ci1pcG1yX2NhY2hlX3VucmVzb2x2ZWQodmlmaV90IHZpZmksIHN0cnVjdCBza19idWZmICpza2IpCitpcG1yX2NhY2hlX3VucmVzb2x2ZWQoc3RydWN0IG5ldCAqbmV0LCB2aWZpX3QgdmlmaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBtZmNfY2FjaGUgKmM7CkBAIC02ODgsNyArNjk2LDggQEAKIAogCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCWZvciAoYz1tZmNfdW5yZXNfcXVldWU7IGM7IGM9Yy0+bmV4dCkgewotCQlpZiAoYy0+bWZjX21jYXN0Z3JwID09IGlwaC0+ZGFkZHIgJiYKKwkJaWYgKG5ldF9lcShtZmNfbmV0KGMpLCBuZXQpICYmCisJCSAgICBjLT5tZmNfbWNhc3RncnAgPT0gaXBoLT5kYWRkciAmJgogCQkgICAgYy0+bWZjX29yaWdpbiA9PSBpcGgtPnNhZGRyKQogCQkJYnJlYWs7CiAJfQpAQCAtNjk4LDggKzcwNyw4IEBACiAJCSAqCUNyZWF0ZSBhIG5ldyBlbnRyeSBpZiBhbGxvd2FibGUKIAkJICovCiAKLQkJaWYgKGF0b21pY19yZWFkKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgPj0gMTAgfHwKLQkJICAgIChjPWlwbXJfY2FjaGVfYWxsb2NfdW5yZXMoKSk9PU5VTEwpIHsKKwkJaWYgKGF0b21pY19yZWFkKCZuZXQtPmlwdjQuY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pID49IDEwIHx8CisJCSAgICAoYyA9IGlwbXJfY2FjaGVfYWxsb2NfdW5yZXMobmV0KSkgPT0gTlVMTCkgewogCQkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAogCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC03MTYsMTggKzcyNSwxOSBAQAogCQkvKgogCQkgKglSZWZsZWN0IGZpcnN0IHF1ZXJ5IGF0IG1yb3V0ZWQuCiAJCSAqLwotCQlpZiAoKGVyciA9IGlwbXJfY2FjaGVfcmVwb3J0KHNrYiwgdmlmaSwgSUdNUE1TR19OT0NBQ0hFKSk8MCkgeworCQllcnIgPSBpcG1yX2NhY2hlX3JlcG9ydChuZXQsIHNrYiwgdmlmaSwgSUdNUE1TR19OT0NBQ0hFKTsKKwkJaWYgKGVyciA8IDApIHsKIAkJCS8qIElmIHRoZSByZXBvcnQgZmFpbGVkIHRocm93IHRoZSBjYWNoZSBlbnRyeQogCQkJICAgb3V0IC0gQnJhZCBQYXJrZXIKIAkJCSAqLwogCQkJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAotCQkJa21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIGMpOworCQkJaXBtcl9jYWNoZV9mcmVlKGMpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJYXRvbWljX2luYygmY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pOworCQlhdG9taWNfaW5jKCZuZXQtPmlwdjQuY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pOwogCQljLT5uZXh0ID0gbWZjX3VucmVzX3F1ZXVlOwogCQltZmNfdW5yZXNfcXVldWUgPSBjOwogCkBAIC03NTMsMzUgKzc2MywzNyBAQAogICoJTUZDIGNhY2hlIG1hbmlwdWxhdGlvbiBieSB1c2VyIHNwYWNlIG1yb3V0ZSBkYWVtb24KICAqLwogCi1zdGF0aWMgaW50IGlwbXJfbWZjX2RlbGV0ZShzdHJ1Y3QgbWZjY3RsICptZmMpCitzdGF0aWMgaW50IGlwbXJfbWZjX2RlbGV0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtZmNjdGwgKm1mYykKIHsKIAlpbnQgbGluZTsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjLCAqKmNwOwogCiAJbGluZSA9IE1GQ19IQVNIKG1mYy0+bWZjY19tY2FzdGdycC5zX2FkZHIsIG1mYy0+bWZjY19vcmlnaW4uc19hZGRyKTsKIAotCWZvciAoY3A9Jm1mY19jYWNoZV9hcnJheVtsaW5lXTsgKGM9KmNwKSAhPSBOVUxMOyBjcCA9ICZjLT5uZXh0KSB7CisJZm9yIChjcCA9ICZuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5W2xpbmVdOworCSAgICAgKGMgPSAqY3ApICE9IE5VTEw7IGNwID0gJmMtPm5leHQpIHsKIAkJaWYgKGMtPm1mY19vcmlnaW4gPT0gbWZjLT5tZmNjX29yaWdpbi5zX2FkZHIgJiYKIAkJICAgIGMtPm1mY19tY2FzdGdycCA9PSBtZmMtPm1mY2NfbWNhc3RncnAuc19hZGRyKSB7CiAJCQl3cml0ZV9sb2NrX2JoKCZtcnRfbG9jayk7CiAJCQkqY3AgPSBjLT5uZXh0OwogCQkJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAKLQkJCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCBjKTsKKwkJCWlwbXJfY2FjaGVfZnJlZShjKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCXJldHVybiAtRU5PRU5UOwogfQogCi1zdGF0aWMgaW50IGlwbXJfbWZjX2FkZChzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBtcnRzb2NrKQorc3RhdGljIGludCBpcG1yX21mY19hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBtcnRzb2NrKQogewogCWludCBsaW5lOwogCXN0cnVjdCBtZmNfY2FjaGUgKnVjLCAqYywgKipjcDsKIAogCWxpbmUgPSBNRkNfSEFTSChtZmMtPm1mY2NfbWNhc3RncnAuc19hZGRyLCBtZmMtPm1mY2Nfb3JpZ2luLnNfYWRkcik7CiAKLQlmb3IgKGNwPSZtZmNfY2FjaGVfYXJyYXlbbGluZV07IChjPSpjcCkgIT0gTlVMTDsgY3AgPSAmYy0+bmV4dCkgeworCWZvciAoY3AgPSAmbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtsaW5lXTsKKwkgICAgIChjID0gKmNwKSAhPSBOVUxMOyBjcCA9ICZjLT5uZXh0KSB7CiAJCWlmIChjLT5tZmNfb3JpZ2luID09IG1mYy0+bWZjY19vcmlnaW4uc19hZGRyICYmCiAJCSAgICBjLT5tZmNfbWNhc3RncnAgPT0gbWZjLT5tZmNjX21jYXN0Z3JwLnNfYWRkcikKIAkJCWJyZWFrOwpAQCAtODAwLDcgKzgxMiw3IEBACiAJaWYgKCFpcHY0X2lzX211bHRpY2FzdChtZmMtPm1mY2NfbWNhc3RncnAuc19hZGRyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljID0gaXBtcl9jYWNoZV9hbGxvYygpOworCWMgPSBpcG1yX2NhY2hlX2FsbG9jKG5ldCk7CiAJaWYgKGMgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTgxMiw4ICs4MjQsOCBAQAogCQljLT5tZmNfZmxhZ3MgfD0gTUZDX1NUQVRJQzsKIAogCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKLQljLT5uZXh0ID0gbWZjX2NhY2hlX2FycmF5W2xpbmVdOwotCW1mY19jYWNoZV9hcnJheVtsaW5lXSA9IGM7CisJYy0+bmV4dCA9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbbGluZV07CisJbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtsaW5lXSA9IGM7CiAJd3JpdGVfdW5sb2NrX2JoKCZtcnRfbG9jayk7CiAKIAkvKgpAQCAtODIzLDE5ICs4MzUsMjEgQEAKIAlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAlmb3IgKGNwID0gJm1mY191bnJlc19xdWV1ZTsgKHVjPSpjcCkgIT0gTlVMTDsKIAkgICAgIGNwID0gJnVjLT5uZXh0KSB7Ci0JCWlmICh1Yy0+bWZjX29yaWdpbiA9PSBjLT5tZmNfb3JpZ2luICYmCisJCWlmIChuZXRfZXEobWZjX25ldCh1YyksIG5ldCkgJiYKKwkJICAgIHVjLT5tZmNfb3JpZ2luID09IGMtPm1mY19vcmlnaW4gJiYKIAkJICAgIHVjLT5tZmNfbWNhc3RncnAgPT0gYy0+bWZjX21jYXN0Z3JwKSB7CiAJCQkqY3AgPSB1Yy0+bmV4dDsKLQkJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikpCi0JCQkJZGVsX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lcik7CisJCQlhdG9taWNfZGVjKCZuZXQtPmlwdjQuY2FjaGVfcmVzb2x2ZV9xdWV1ZV9sZW4pOwogCQkJYnJlYWs7CiAJCX0KIAl9CisJaWYgKG1mY191bnJlc19xdWV1ZSA9PSBOVUxMKQorCQlkZWxfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyKTsKIAlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCiAJaWYgKHVjKSB7CiAJCWlwbXJfY2FjaGVfcmVzb2x2ZSh1YywgYyk7Ci0JCWttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCB1Yyk7CisJCWlwbXJfY2FjaGVfZnJlZSh1Yyk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODQ0LDE2ICs4NTgsMTYgQEAKICAqCUNsb3NlIHRoZSBtdWx0aWNhc3Qgc29ja2V0LCBhbmQgY2xlYXIgdGhlIHZpZiB0YWJsZXMgZXRjCiAgKi8KIAotc3RhdGljIHZvaWQgbXJvdXRlX2NsZWFuX3RhYmxlcyhzdHJ1Y3Qgc29jayAqc2spCitzdGF0aWMgdm9pZCBtcm91dGVfY2xlYW5fdGFibGVzKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgaTsKIAogCS8qCiAJICoJU2h1dCBkb3duIGFsbCBhY3RpdmUgdmlmIGVudHJpZXMKIAkgKi8KLQlmb3IgKGk9MDsgaTxtYXh2aWY7IGkrKykgewotCQlpZiAoISh2aWZfdGFibGVbaV0uZmxhZ3MmVklGRl9TVEFUSUMpKQotCQkJdmlmX2RlbGV0ZShpLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmV0LT5pcHY0Lm1heHZpZjsgaSsrKSB7CisJCWlmICghKG5ldC0+aXB2NC52aWZfdGFibGVbaV0uZmxhZ3MmVklGRl9TVEFUSUMpKQorCQkJdmlmX2RlbGV0ZShuZXQsIGksIDApOwogCX0KIAogCS8qCkBAIC04NjIsNyArODc2LDcgQEAKIAlmb3IgKGk9MDsgaTxNRkNfTElORVM7IGkrKykgewogCQlzdHJ1Y3QgbWZjX2NhY2hlICpjLCAqKmNwOwogCi0JCWNwID0gJm1mY19jYWNoZV9hcnJheVtpXTsKKwkJY3AgPSAmbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtpXTsKIAkJd2hpbGUgKChjID0gKmNwKSAhPSBOVUxMKSB7CiAJCQlpZiAoYy0+bWZjX2ZsYWdzJk1GQ19TVEFUSUMpIHsKIAkJCQljcCA9ICZjLT5uZXh0OwpAQCAtODcyLDIyICs4ODYsMjMgQEAKIAkJCSpjcCA9IGMtPm5leHQ7CiAJCQl3cml0ZV91bmxvY2tfYmgoJm1ydF9sb2NrKTsKIAotCQkJa21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIGMpOworCQkJaXBtcl9jYWNoZV9mcmVlKGMpOwogCQl9CiAJfQogCi0JaWYgKGF0b21pY19yZWFkKCZjYWNoZV9yZXNvbHZlX3F1ZXVlX2xlbikgIT0gMCkgewotCQlzdHJ1Y3QgbWZjX2NhY2hlICpjOworCWlmIChhdG9taWNfcmVhZCgmbmV0LT5pcHY0LmNhY2hlX3Jlc29sdmVfcXVldWVfbGVuKSAhPSAwKSB7CisJCXN0cnVjdCBtZmNfY2FjaGUgKmMsICoqY3A7CiAKIAkJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7Ci0JCXdoaWxlIChtZmNfdW5yZXNfcXVldWUgIT0gTlVMTCkgewotCQkJYyA9IG1mY191bnJlc19xdWV1ZTsKLQkJCW1mY191bnJlc19xdWV1ZSA9IGMtPm5leHQ7Ci0JCQlzcGluX3VubG9ja19iaCgmbWZjX3VucmVzX2xvY2spOworCQljcCA9ICZtZmNfdW5yZXNfcXVldWU7CisJCXdoaWxlICgoYyA9ICpjcCkgIT0gTlVMTCkgeworCQkJaWYgKCFuZXRfZXEobWZjX25ldChjKSwgbmV0KSkgeworCQkJCWNwID0gJmMtPm5leHQ7CisJCQkJY29udGludWU7CisJCQl9CisJCQkqY3AgPSBjLT5uZXh0OwogCiAJCQlpcG1yX2Rlc3Ryb3lfdW5yZXMoYyk7Ci0KLQkJCXNwaW5fbG9ja19iaCgmbWZjX3VucmVzX2xvY2spOwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJfQpAQCAtODk1LDE1ICs5MTAsMTcgQEAKIAogc3RhdGljIHZvaWQgbXJ0c29ja19kZXN0cnVjdChzdHJ1Y3Qgc29jayAqc2spCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOworCiAJcnRubF9sb2NrKCk7Ci0JaWYgKHNrID09IG1yb3V0ZV9zb2NrZXQpIHsKLQkJSVBWNF9ERVZDT05GX0FMTChzb2NrX25ldChzayksIE1DX0ZPUldBUkRJTkcpLS07CisJaWYgKHNrID09IG5ldC0+aXB2NC5tcm91dGVfc2spIHsKKwkJSVBWNF9ERVZDT05GX0FMTChuZXQsIE1DX0ZPUldBUkRJTkcpLS07CiAKIAkJd3JpdGVfbG9ja19iaCgmbXJ0X2xvY2spOwotCQltcm91dGVfc29ja2V0ID0gTlVMTDsKKwkJbmV0LT5pcHY0Lm1yb3V0ZV9zayA9IE5VTEw7CiAJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCi0JCW1yb3V0ZV9jbGVhbl90YWJsZXMoc2spOworCQltcm91dGVfY2xlYW5fdGFibGVzKG5ldCk7CiAJfQogCXJ0bmxfdW5sb2NrKCk7CiB9CkBAIC05MjAsOSArOTM3LDEwIEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgdmlmY3RsIHZpZjsKIAlzdHJ1Y3QgbWZjY3RsIG1mYzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlpZiAob3B0bmFtZSAhPSBNUlRfSU5JVCkgewotCQlpZiAoc2sgIT0gbXJvdXRlX3NvY2tldCAmJiAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJaWYgKHNrICE9IG5ldC0+aXB2NC5tcm91dGVfc2sgJiYgIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CiAKQEAgLTkzNSw3ICs5NTMsNyBAQAogCQkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAogCQlydG5sX2xvY2soKTsKLQkJaWYgKG1yb3V0ZV9zb2NrZXQpIHsKKwkJaWYgKG5ldC0+aXB2NC5tcm91dGVfc2spIHsKIAkJCXJ0bmxfdW5sb2NrKCk7CiAJCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJCX0KQEAgLTk0MywxNSArOTYxLDE1IEBACiAJCXJldCA9IGlwX3JhX2NvbnRyb2woc2ssIDEsIG1ydHNvY2tfZGVzdHJ1Y3QpOwogCQlpZiAocmV0ID09IDApIHsKIAkJCXdyaXRlX2xvY2tfYmgoJm1ydF9sb2NrKTsKLQkJCW1yb3V0ZV9zb2NrZXQgPSBzazsKKwkJCW5ldC0+aXB2NC5tcm91dGVfc2sgPSBzazsKIAkJCXdyaXRlX3VubG9ja19iaCgmbXJ0X2xvY2spOwogCi0JCQlJUFY0X0RFVkNPTkZfQUxMKHNvY2tfbmV0KHNrKSwgTUNfRk9SV0FSRElORykrKzsKKwkJCUlQVjRfREVWQ09ORl9BTEwobmV0LCBNQ19GT1JXQVJESU5HKSsrOwogCQl9CiAJCXJ0bmxfdW5sb2NrKCk7CiAJCXJldHVybiByZXQ7CiAJY2FzZSBNUlRfRE9ORToKLQkJaWYgKHNrICE9IG1yb3V0ZV9zb2NrZXQpCisJCWlmIChzayAhPSBuZXQtPmlwdjQubXJvdXRlX3NrKQogCQkJcmV0dXJuIC1FQUNDRVM7CiAJCXJldHVybiBpcF9yYV9jb250cm9sKHNrLCAwLCBOVUxMKTsKIAljYXNlIE1SVF9BRERfVklGOgpAQCAtOTY0LDkgKzk4Miw5IEBACiAJCQlyZXR1cm4gLUVORklMRTsKIAkJcnRubF9sb2NrKCk7CiAJCWlmIChvcHRuYW1lID09IE1SVF9BRERfVklGKSB7Ci0JCQlyZXQgPSB2aWZfYWRkKCZ2aWYsIHNrPT1tcm91dGVfc29ja2V0KTsKKwkJCXJldCA9IHZpZl9hZGQobmV0LCAmdmlmLCBzayA9PSBuZXQtPmlwdjQubXJvdXRlX3NrKTsKIAkJfSBlbHNlIHsKLQkJCXJldCA9IHZpZl9kZWxldGUodmlmLnZpZmNfdmlmaSwgMCk7CisJCQlyZXQgPSB2aWZfZGVsZXRlKG5ldCwgdmlmLnZpZmNfdmlmaSwgMCk7CiAJCX0KIAkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuIHJldDsKQEAgLTk4Myw5ICsxMDAxLDkgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQlydG5sX2xvY2soKTsKIAkJaWYgKG9wdG5hbWUgPT0gTVJUX0RFTF9NRkMpCi0JCQlyZXQgPSBpcG1yX21mY19kZWxldGUoJm1mYyk7CisJCQlyZXQgPSBpcG1yX21mY19kZWxldGUobmV0LCAmbWZjKTsKIAkJZWxzZQotCQkJcmV0ID0gaXBtcl9tZmNfYWRkKCZtZmMsIHNrPT1tcm91dGVfc29ja2V0KTsKKwkJCXJldCA9IGlwbXJfbWZjX2FkZChuZXQsICZtZmMsIHNrID09IG5ldC0+aXB2NC5tcm91dGVfc2spOwogCQlydG5sX3VubG9jaygpOwogCQlyZXR1cm4gcmV0OwogCQkvKgpAQCAtOTk2LDcgKzEwMTQsNyBAQAogCQlpbnQgdjsKIAkJaWYgKGdldF91c2VyKHYsKGludCBfX3VzZXIgKilvcHR2YWwpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCW1yb3V0ZV9kb19hc3NlcnQ9KHYpPzE6MDsKKwkJbmV0LT5pcHY0Lm1yb3V0ZV9kb19hc3NlcnQgPSAodikgPyAxIDogMDsKIAkJcmV0dXJuIDA7CiAJfQogI2lmZGVmIENPTkZJR19JUF9QSU1TTQpAQCAtMTAxMCwxMSArMTAyOCwxMSBAQAogCiAJCXJ0bmxfbG9jaygpOwogCQlyZXQgPSAwOwotCQlpZiAodiAhPSBtcm91dGVfZG9fcGltKSB7Ci0JCQltcm91dGVfZG9fcGltID0gdjsKLQkJCW1yb3V0ZV9kb19hc3NlcnQgPSB2OworCQlpZiAodiAhPSBuZXQtPmlwdjQubXJvdXRlX2RvX3BpbSkgeworCQkJbmV0LT5pcHY0Lm1yb3V0ZV9kb19waW0gPSB2OworCQkJbmV0LT5pcHY0Lm1yb3V0ZV9kb19hc3NlcnQgPSB2OwogI2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMgotCQkJaWYgKG1yb3V0ZV9kb19waW0pCisJCQlpZiAobmV0LT5pcHY0Lm1yb3V0ZV9kb19waW0pCiAJCQkJcmV0ID0gaW5ldF9hZGRfcHJvdG9jb2woJnBpbV9wcm90b2NvbCwKIAkJCQkJCQlJUFBST1RPX1BJTSk7CiAJCQllbHNlCkBAIC0xMDQ1LDYgKzEwNjMsNyBAQAogewogCWludCBvbHI7CiAJaW50IHZhbDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKIAlpZiAob3B0bmFtZSAhPSBNUlRfVkVSU0lPTiAmJgogI2lmZGVmIENPTkZJR19JUF9QSU1TTQpAQCAtMTA2NiwxMCArMTA4NSwxMCBAQAogCQl2YWwgPSAweDAzMDU7CiAjaWZkZWYgQ09ORklHX0lQX1BJTVNNCiAJZWxzZSBpZiAob3B0bmFtZSA9PSBNUlRfUElNKQotCQl2YWwgPSBtcm91dGVfZG9fcGltOworCQl2YWwgPSBuZXQtPmlwdjQubXJvdXRlX2RvX3BpbTsKICNlbmRpZgogCWVsc2UKLQkJdmFsID0gbXJvdXRlX2RvX2Fzc2VydDsKKwkJdmFsID0gbmV0LT5pcHY0Lm1yb3V0ZV9kb19hc3NlcnQ7CiAJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZ2YWwsIG9scikpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwpAQCAtMTA4NSwxNiArMTEwNCwxNyBAQAogCXN0cnVjdCBzaW9jX3ZpZl9yZXEgdnI7CiAJc3RydWN0IHZpZl9kZXZpY2UgKnZpZjsKIAlzdHJ1Y3QgbWZjX2NhY2hlICpjOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR0VUVklGQ05UOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJnZyLCBhcmcsIHNpemVvZih2cikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh2ci52aWZpID49IG1heHZpZikKKwkJaWYgKHZyLnZpZmkgPj0gbmV0LT5pcHY0Lm1heHZpZikKIAkJCXJldHVybiAtRUlOVkFMOwogCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQkJdmlmPSZ2aWZfdGFibGVbdnIudmlmaV07Ci0JCWlmIChWSUZfRVhJU1RTKHZyLnZpZmkpKQl7CisJCXZpZiA9ICZuZXQtPmlwdjQudmlmX3RhYmxlW3ZyLnZpZmldOworCQlpZiAoVklGX0VYSVNUUyhuZXQsIHZyLnZpZmkpKSB7CiAJCQl2ci5pY291bnQgPSB2aWYtPnBrdF9pbjsKIAkJCXZyLm9jb3VudCA9IHZpZi0+cGt0X291dDsKIAkJCXZyLmlieXRlcyA9IHZpZi0+Ynl0ZXNfaW47CkBAIC0xMTEyLDcgKzExMzIsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JCWMgPSBpcG1yX2NhY2hlX2ZpbmQoc3Iuc3JjLnNfYWRkciwgc3IuZ3JwLnNfYWRkcik7CisJCWMgPSBpcG1yX2NhY2hlX2ZpbmQobmV0LCBzci5zcmMuc19hZGRyLCBzci5ncnAuc19hZGRyKTsKIAkJaWYgKGMpIHsKIAkJCXNyLnBrdGNudCA9IGMtPm1mY191bi5yZXMucGt0OwogCQkJc3IuYnl0ZWNudCA9IGMtPm1mY191bi5yZXMuYnl0ZXM7CkBAIC0xMTM0LDE4ICsxMTU0LDE5IEBACiBzdGF0aWMgaW50IGlwbXJfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCXN0cnVjdCB2aWZfZGV2aWNlICp2OwogCWludCBjdDsKIAotCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAogCWlmIChldmVudCAhPSBORVRERVZfVU5SRUdJU1RFUikKIAkJcmV0dXJuIE5PVElGWV9ET05FOwotCXY9JnZpZl90YWJsZVswXTsKLQlmb3IgKGN0PTA7IGN0PG1heHZpZjsgY3QrKyx2KyspIHsKKwl2ID0gJm5ldC0+aXB2NC52aWZfdGFibGVbMF07CisJZm9yIChjdCA9IDA7IGN0IDwgbmV0LT5pcHY0Lm1heHZpZjsgY3QrKywgdisrKSB7CiAJCWlmICh2LT5kZXYgPT0gZGV2KQotCQkJdmlmX2RlbGV0ZShjdCwgMSk7CisJCQl2aWZfZGVsZXRlKG5ldCwgY3QsIDEpOwogCX0KIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CkBAIC0xMjA1LDggKzEyMjYsOSBAQAogCiBzdGF0aWMgdm9pZCBpcG1yX3F1ZXVlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG1mY19jYWNoZSAqYywgaW50IHZpZmkpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gbWZjX25ldChjKTsKIAljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwotCXN0cnVjdCB2aWZfZGV2aWNlICp2aWYgPSAmdmlmX3RhYmxlW3ZpZmldOworCXN0cnVjdCB2aWZfZGV2aWNlICp2aWYgPSAmbmV0LT5pcHY0LnZpZl90YWJsZVt2aWZpXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBydGFibGUgKnJ0OwogCWludCAgICBlbmNhcCA9IDA7CkBAIC0xMjIwLDkgKzEyNDIsOCBAQAogCQl2aWYtPmJ5dGVzX291dCArPSBza2ItPmxlbjsKIAkJdmlmLT5kZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQl2aWYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCQlpcG1yX2NhY2hlX3JlcG9ydChza2IsIHZpZmksIElHTVBNU0dfV0hPTEVQS1QpOwotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuOworCQlpcG1yX2NhY2hlX3JlcG9ydChuZXQsIHNrYiwgdmlmaSwgSUdNUE1TR19XSE9MRVBLVCk7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQogI2VuZGlmCiAKQEAgLTEyMzMsNyArMTI1NCw3IEBACiAJCQkJCQkuc2FkZHIgPSB2aWYtPmxvY2FsLAogCQkJCQkJLnRvcyA9IFJUX1RPUyhpcGgtPnRvcykgfSB9LAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lQSVAgfTsKLQkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpCisJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJnJ0LCAmZmwpKQogCQkJZ290byBvdXRfZnJlZTsKIAkJZW5jYXAgPSBzaXplb2Yoc3RydWN0IGlwaGRyKTsKIAl9IGVsc2UgewpAQCAtMTI0Miw3ICsxMjYzLDcgQEAKIAkJCQkJICAgICAgeyAuZGFkZHIgPSBpcGgtPmRhZGRyLAogCQkJCQkJLnRvcyA9IFJUX1RPUyhpcGgtPnRvcykgfSB9LAogCQkJCSAgICAucHJvdG8gPSBJUFBST1RPX0lQSVAgfTsKLQkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoJmluaXRfbmV0LCAmcnQsICZmbCkpCisJCWlmIChpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJnJ0LCAmZmwpKQogCQkJZ290byBvdXRfZnJlZTsKIAl9CiAKQEAgLTEzMDYsOSArMTMyNywxMCBAQAogCiBzdGF0aWMgaW50IGlwbXJfZmluZF92aWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAJaW50IGN0OwotCWZvciAoY3Q9bWF4dmlmLTE7IGN0Pj0wOyBjdC0tKSB7Ci0JCWlmICh2aWZfdGFibGVbY3RdLmRldiA9PSBkZXYpCisJZm9yIChjdCA9IG5ldC0+aXB2NC5tYXh2aWYtMTsgY3QgPj0gMDsgY3QtLSkgeworCQlpZiAobmV0LT5pcHY0LnZpZl90YWJsZVtjdF0uZGV2ID09IGRldikKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gY3Q7CkBAIC0xMzIwLDYgKzEzNDIsNyBAQAogewogCWludCBwc2VuZCA9IC0xOwogCWludCB2aWYsIGN0OworCXN0cnVjdCBuZXQgKm5ldCA9IG1mY19uZXQoY2FjaGUpOwogCiAJdmlmID0gY2FjaGUtPm1mY19wYXJlbnQ7CiAJY2FjaGUtPm1mY191bi5yZXMucGt0Kys7CkBAIC0xMzI4LDcgKzEzNTEsNyBAQAogCS8qCiAJICogV3JvbmcgaW50ZXJmYWNlOiBkcm9wIHBhY2tldCBhbmQgKG1heWJlKSBzZW5kIFBJTSBhc3NlcnQuCiAJICovCi0JaWYgKHZpZl90YWJsZVt2aWZdLmRldiAhPSBza2ItPmRldikgeworCWlmIChuZXQtPmlwdjQudmlmX3RhYmxlW3ZpZl0uZGV2ICE9IHNrYi0+ZGV2KSB7CiAJCWludCB0cnVlX3ZpZmk7CiAKIAkJaWYgKHNrYi0+cnRhYmxlLT5mbC5paWYgPT0gMCkgewpAQCAtMTM0OSwyMyArMTM3MiwyNCBAQAogCQljYWNoZS0+bWZjX3VuLnJlcy53cm9uZ19pZisrOwogCQl0cnVlX3ZpZmkgPSBpcG1yX2ZpbmRfdmlmKHNrYi0+ZGV2KTsKIAotCQlpZiAodHJ1ZV92aWZpID49IDAgJiYgbXJvdXRlX2RvX2Fzc2VydCAmJgorCQlpZiAodHJ1ZV92aWZpID49IDAgJiYgbmV0LT5pcHY0Lm1yb3V0ZV9kb19hc3NlcnQgJiYKIAkJICAgIC8qIHBpbXNtIHVzZXMgYXNzZXJ0cywgd2hlbiBzd2l0Y2hpbmcgZnJvbSBSUFQgdG8gU1BULAogCQkgICAgICAgc28gdGhhdCB3ZSBjYW5ub3QgY2hlY2sgdGhhdCBwYWNrZXQgYXJyaXZlZCBvbiBhbiBvaWYuCiAJCSAgICAgICBJdCBpcyBiYWQsIGJ1dCBvdGhlcndpc2Ugd2Ugd291bGQgbmVlZCB0byBtb3ZlIHByZXR0eQogCQkgICAgICAgbGFyZ2UgY2h1bmsgb2YgcGltZCB0byBrZXJuZWwuIE91Z2guLi4gLS1BTksKIAkJICAgICAqLwotCQkgICAgKG1yb3V0ZV9kb19waW0gfHwgY2FjaGUtPm1mY191bi5yZXMudHRsc1t0cnVlX3ZpZmldIDwgMjU1KSAmJgorCQkgICAgKG5ldC0+aXB2NC5tcm91dGVfZG9fcGltIHx8CisJCSAgICAgY2FjaGUtPm1mY191bi5yZXMudHRsc1t0cnVlX3ZpZmldIDwgMjU1KSAmJgogCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLAogCQkJICAgICAgIGNhY2hlLT5tZmNfdW4ucmVzLmxhc3RfYXNzZXJ0ICsgTUZDX0FTU0VSVF9USFJFU0gpKSB7CiAJCQljYWNoZS0+bWZjX3VuLnJlcy5sYXN0X2Fzc2VydCA9IGppZmZpZXM7Ci0JCQlpcG1yX2NhY2hlX3JlcG9ydChza2IsIHRydWVfdmlmaSwgSUdNUE1TR19XUk9OR1ZJRik7CisJCQlpcG1yX2NhY2hlX3JlcG9ydChuZXQsIHNrYiwgdHJ1ZV92aWZpLCBJR01QTVNHX1dST05HVklGKTsKIAkJfQogCQlnb3RvIGRvbnRfZm9yd2FyZDsKIAl9CiAKLQl2aWZfdGFibGVbdmlmXS5wa3RfaW4rKzsKLQl2aWZfdGFibGVbdmlmXS5ieXRlc19pbiArPSBza2ItPmxlbjsKKwluZXQtPmlwdjQudmlmX3RhYmxlW3ZpZl0ucGt0X2luKys7CisJbmV0LT5pcHY0LnZpZl90YWJsZVt2aWZdLmJ5dGVzX2luICs9IHNrYi0+bGVuOwogCiAJLyoKIAkgKglGb3J3YXJkIHRoZSBmcmFtZQpAQCAtMTQwNSw2ICsxNDI5LDcgQEAKIGludCBpcF9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCWludCBsb2NhbCA9IHNrYi0+cnRhYmxlLT5ydF9mbGFncyZSVENGX0xPQ0FMOwogCiAJLyogUGFja2V0IGlzIGxvb3BlZCBiYWNrIGFmdGVyIGZvcndhcmQsIGl0IHNob3VsZCBub3QgYmUKQEAgLTE0MjUsOSArMTQ1MCw5IEBACiAJCQkgICAgICAgdGhhdCB3ZSBjYW4gZm9yd2FyZCBOTyBJR01QIG1lc3NhZ2VzLgogCQkJICAgICAqLwogCQkJICAgIHJlYWRfbG9jaygmbXJ0X2xvY2spOwotCQkJICAgIGlmIChtcm91dGVfc29ja2V0KSB7CisJCQkgICAgaWYgKG5ldC0+aXB2NC5tcm91dGVfc2spIHsKIAkJCQkgICAgbmZfcmVzZXQoc2tiKTsKLQkJCQkgICAgcmF3X3Jjdihtcm91dGVfc29ja2V0LCBza2IpOworCQkJCSAgICByYXdfcmN2KG5ldC0+aXB2NC5tcm91dGVfc2ssIHNrYik7CiAJCQkJICAgIHJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CiAJCQkJICAgIHJldHVybiAwOwogCQkJICAgIH0KQEAgLTE0MzYsNyArMTQ2MSw3IEBACiAJfQogCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JY2FjaGUgPSBpcG1yX2NhY2hlX2ZpbmQoaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIpOworCWNhY2hlID0gaXBtcl9jYWNoZV9maW5kKG5ldCwgaXBfaGRyKHNrYiktPnNhZGRyLCBpcF9oZHIoc2tiKS0+ZGFkZHIpOwogCiAJLyoKIAkgKglObyB1c2FibGUgY2FjaGUgZW50cnkKQEAgLTE0NTYsNyArMTQ4MSw3IEBACiAKIAkJdmlmID0gaXBtcl9maW5kX3ZpZihza2ItPmRldik7CiAJCWlmICh2aWYgPj0gMCkgewotCQkJaW50IGVyciA9IGlwbXJfY2FjaGVfdW5yZXNvbHZlZCh2aWYsIHNrYik7CisJCQlpbnQgZXJyID0gaXBtcl9jYWNoZV91bnJlc29sdmVkKG5ldCwgdmlmLCBza2IpOwogCQkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIAogCQkJcmV0dXJuIGVycjsKQEAgLTE0ODcsNiArMTUxMiw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnJlZ19kZXYgPSBOVUxMOwogCXN0cnVjdCBpcGhkciAqZW5jYXA7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKIAllbmNhcCA9IChzdHJ1Y3QgaXBoZHIgKikoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSArIHBpbWxlbik7CiAJLyoKQEAgLTE1MDEsOCArMTUyNyw4IEBACiAJCXJldHVybiAxOwogCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JaWYgKHJlZ192aWZfbnVtID49IDApCi0JCXJlZ19kZXYgPSB2aWZfdGFibGVbcmVnX3ZpZl9udW1dLmRldjsKKwlpZiAobmV0LT5pcHY0Lm1yb3V0ZV9yZWdfdmlmX251bSA+PSAwKQorCQlyZWdfZGV2ID0gbmV0LT5pcHY0LnZpZl90YWJsZVtuZXQtPmlwdjQubXJvdXRlX3JlZ192aWZfbnVtXS5kZXY7CiAJaWYgKHJlZ19kZXYpCiAJCWRldl9ob2xkKHJlZ19kZXYpOwogCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CkBAIC0xNTM3LDEzICsxNTYzLDE0IEBACiBpbnQgcGltX3Jjdl92MShzdHJ1Y3Qgc2tfYnVmZiAqIHNrYikKIHsKIAlzdHJ1Y3QgaWdtcGhkciAqcGltOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCpwaW0pICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQogCQlnb3RvIGRyb3A7CiAKIAlwaW0gPSBpZ21wX2hkcihza2IpOwogCi0JaWYgKCFtcm91dGVfZG9fcGltIHx8CisJaWYgKCFuZXQtPmlwdjQubXJvdXRlX2RvX3BpbSB8fAogCSAgICBwaW0tPmdyb3VwICE9IFBJTV9WMV9WRVJTSU9OIHx8IHBpbS0+Y29kZSAhPSBQSU1fVjFfUkVHSVNURVIpCiAJCWdvdG8gZHJvcDsKIApAQCAtMTU4Myw3ICsxNjEwLDggQEAKIHsKIAlpbnQgY3Q7CiAJc3RydWN0IHJ0bmV4dGhvcCAqbmhwOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB2aWZfdGFibGVbYy0+bWZjX3BhcmVudF0uZGV2OworCXN0cnVjdCBuZXQgKm5ldCA9IG1mY19uZXQoYyk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldC0+aXB2NC52aWZfdGFibGVbYy0+bWZjX3BhcmVudF0uZGV2OwogCXU4ICpiID0gc2tiX3RhaWxfcG9pbnRlcihza2IpOwogCXN0cnVjdCBydGF0dHIgKm1wX2hlYWQ7CiAKQEAgLTE1OTksNyArMTYyNyw3IEBACiAJCQluaHAgPSAoc3RydWN0IHJ0bmV4dGhvcCAqKXNrYl9wdXQoc2tiLCBSVEFfQUxJR04oc2l6ZW9mKCpuaHApKSk7CiAJCQluaHAtPnJ0bmhfZmxhZ3MgPSAwOwogCQkJbmhwLT5ydG5oX2hvcHMgPSBjLT5tZmNfdW4ucmVzLnR0bHNbY3RdOwotCQkJbmhwLT5ydG5oX2lmaW5kZXggPSB2aWZfdGFibGVbY3RdLmRldi0+aWZpbmRleDsKKwkJCW5ocC0+cnRuaF9pZmluZGV4ID0gbmV0LT5pcHY0LnZpZl90YWJsZVtjdF0uZGV2LT5pZmluZGV4OwogCQkJbmhwLT5ydG5oX2xlbiA9IHNpemVvZigqbmhwKTsKIAkJfQogCX0KQEAgLTE2MTMsMTQgKzE2NDEsMTUgQEAKIAlyZXR1cm4gLUVNU0dTSVpFOwogfQogCi1pbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHJ0bXNnICpydG0sIGludCBub3dhaXQpCitpbnQgaXBtcl9nZXRfcm91dGUoc3RydWN0IG5ldCAqbmV0LAorCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcnRtc2cgKnJ0bSwgaW50IG5vd2FpdCkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBtZmNfY2FjaGUgKmNhY2hlOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiLT5ydGFibGU7CiAKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKLQljYWNoZSA9IGlwbXJfY2FjaGVfZmluZChydC0+cnRfc3JjLCBydC0+cnRfZHN0KTsKKwljYWNoZSA9IGlwbXJfY2FjaGVfZmluZChuZXQsIHJ0LT5ydF9zcmMsIHJ0LT5ydF9kc3QpOwogCiAJaWYgKGNhY2hlID09IE5VTEwpIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CkBAIC0xNjUxLDcgKzE2ODAsNyBAQAogCQlpcGgtPnNhZGRyID0gcnQtPnJ0X3NyYzsKIAkJaXBoLT5kYWRkciA9IHJ0LT5ydF9kc3Q7CiAJCWlwaC0+dmVyc2lvbiA9IDA7Ci0JCWVyciA9IGlwbXJfY2FjaGVfdW5yZXNvbHZlZCh2aWYsIHNrYjIpOworCQllcnIgPSBpcG1yX2NhY2hlX3VucmVzb2x2ZWQobmV0LCB2aWYsIHNrYjIpOwogCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTE2NjgsMTcgKzE2OTcsMTkgQEAKICAqCVRoZSAvcHJvYyBpbnRlcmZhY2VzIHRvIG11bHRpY2FzdCByb3V0aW5nIC9wcm9jL2lwX21yX2NhY2hlIC9wcm9jL2lwX21yX3ZpZgogICovCiBzdHJ1Y3QgaXBtcl92aWZfaXRlciB7CisJc3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwOwogCWludCBjdDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlmX2RldmljZSAqaXBtcl92aWZfc2VxX2lkeChzdHJ1Y3QgaXBtcl92aWZfaXRlciAqaXRlciwKK3N0YXRpYyBzdHJ1Y3QgdmlmX2RldmljZSAqaXBtcl92aWZfc2VxX2lkeChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSAgIHN0cnVjdCBpcG1yX3ZpZl9pdGVyICppdGVyLAogCQkJCQkgICBsb2ZmX3QgcG9zKQogewotCWZvciAoaXRlci0+Y3QgPSAwOyBpdGVyLT5jdCA8IG1heHZpZjsgKytpdGVyLT5jdCkgewotCQlpZiAoIVZJRl9FWElTVFMoaXRlci0+Y3QpKQorCWZvciAoaXRlci0+Y3QgPSAwOyBpdGVyLT5jdCA8IG5ldC0+aXB2NC5tYXh2aWY7ICsraXRlci0+Y3QpIHsKKwkJaWYgKCFWSUZfRVhJU1RTKG5ldCwgaXRlci0+Y3QpKQogCQkJY29udGludWU7CiAJCWlmIChwb3MtLSA9PSAwKQotCQkJcmV0dXJuICZ2aWZfdGFibGVbaXRlci0+Y3RdOworCQkJcmV0dXJuICZuZXQtPmlwdjQudmlmX3RhYmxlW2l0ZXItPmN0XTsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xNjg2LDIzICsxNzE3LDI2IEBACiBzdGF0aWMgdm9pZCAqaXBtcl92aWZfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIAlfX2FjcXVpcmVzKG1ydF9sb2NrKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOworCiAJcmVhZF9sb2NrKCZtcnRfbG9jayk7Ci0JcmV0dXJuICpwb3MgPyBpcG1yX3ZpZl9zZXFfaWR4KHNlcS0+cHJpdmF0ZSwgKnBvcyAtIDEpCisJcmV0dXJuICpwb3MgPyBpcG1yX3ZpZl9zZXFfaWR4KG5ldCwgc2VxLT5wcml2YXRlLCAqcG9zIC0gMSkKIAkJOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKIHN0YXRpYyB2b2lkICppcG1yX3ZpZl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IGlwbXJfdmlmX2l0ZXIgKml0ZXIgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAkrKypwb3M7CiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gaXBtcl92aWZfc2VxX2lkeChpdGVyLCAwKTsKKwkJcmV0dXJuIGlwbXJfdmlmX3NlcV9pZHgobmV0LCBpdGVyLCAwKTsKIAotCXdoaWxlICgrK2l0ZXItPmN0IDwgbWF4dmlmKSB7Ci0JCWlmICghVklGX0VYSVNUUyhpdGVyLT5jdCkpCisJd2hpbGUgKCsraXRlci0+Y3QgPCBuZXQtPmlwdjQubWF4dmlmKSB7CisJCWlmICghVklGX0VYSVNUUyhuZXQsIGl0ZXItPmN0KSkKIAkJCWNvbnRpbnVlOwotCQlyZXR1cm4gJnZpZl90YWJsZVtpdGVyLT5jdF07CisJCXJldHVybiAmbmV0LT5pcHY0LnZpZl90YWJsZVtpdGVyLT5jdF07CiAJfQogCXJldHVybiBOVUxMOwogfQpAQCAtMTcxNSw2ICsxNzQ5LDggQEAKIAogc3RhdGljIGludCBpcG1yX3ZpZl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKKwogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewogCQlzZXFfcHV0cyhzZXEsCiAJCQkgIkludGVyZmFjZSAgICAgIEJ5dGVzSW4gIFBrdHNJbiAgQnl0ZXNPdXQgUGt0c091dCBGbGFncyBMb2NhbCAgICBSZW1vdGVcbiIpOwpAQCAtMTcyNCw3ICsxNzYwLDcgQEAKIAogCQlzZXFfcHJpbnRmKHNlcSwKIAkJCSAgICIlMlpkICUtMTBzICU4bGQgJTdsZCAgJThsZCAlN2xkICUwNVggJTA4WCAlMDhYXG4iLAotCQkJICAgdmlmIC0gdmlmX3RhYmxlLAorCQkJICAgdmlmIC0gbmV0LT5pcHY0LnZpZl90YWJsZSwKIAkJCSAgIG5hbWUsIHZpZi0+Ynl0ZXNfaW4sIHZpZi0+cGt0X2luLAogCQkJICAgdmlmLT5ieXRlc19vdXQsIHZpZi0+cGt0X291dCwKIAkJCSAgIHZpZi0+ZmxhZ3MsIHZpZi0+bG9jYWwsIHZpZi0+cmVtb3RlKTsKQEAgLTE3NDEsOCArMTc3Nyw4IEBACiAKIHN0YXRpYyBpbnQgaXBtcl92aWZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmaXBtcl92aWZfc2VxX29wcywKLQkJCXNpemVvZihzdHJ1Y3QgaXBtcl92aWZfaXRlcikpOworCXJldHVybiBzZXFfb3Blbl9uZXQoaW5vZGUsIGZpbGUsICZpcG1yX3ZpZl9zZXFfb3BzLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgaXBtcl92aWZfaXRlcikpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcG1yX3ZpZl9mb3BzID0gewpAQCAtMTc1MCwyMyArMTc4NiwyNiBAQAogCS5vcGVuICAgID0gaXBtcl92aWZfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAKIHN0cnVjdCBpcG1yX21mY19pdGVyIHsKKwlzdHJ1Y3Qgc2VxX25ldF9wcml2YXRlIHA7CiAJc3RydWN0IG1mY19jYWNoZSAqKmNhY2hlOwogCWludCBjdDsKIH07CiAKIAotc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfbWZjX3NlcV9pZHgoc3RydWN0IGlwbXJfbWZjX2l0ZXIgKml0LCBsb2ZmX3QgcG9zKQorc3RhdGljIHN0cnVjdCBtZmNfY2FjaGUgKmlwbXJfbWZjX3NlcV9pZHgoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgIHN0cnVjdCBpcG1yX21mY19pdGVyICppdCwgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgbWZjX2NhY2hlICptZmM7CiAKLQlpdC0+Y2FjaGUgPSBtZmNfY2FjaGVfYXJyYXk7CisJaXQtPmNhY2hlID0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheTsKIAlyZWFkX2xvY2soJm1ydF9sb2NrKTsKIAlmb3IgKGl0LT5jdCA9IDA7IGl0LT5jdCA8IE1GQ19MSU5FUzsgaXQtPmN0KyspCi0JCWZvciAobWZjID0gbWZjX2NhY2hlX2FycmF5W2l0LT5jdF07IG1mYzsgbWZjID0gbWZjLT5uZXh0KQorCQlmb3IgKG1mYyA9IG5ldC0+aXB2NC5tZmNfY2FjaGVfYXJyYXlbaXQtPmN0XTsKKwkJICAgICBtZmM7IG1mYyA9IG1mYy0+bmV4dCkKIAkJCWlmIChwb3MtLSA9PSAwKQogCQkJCXJldHVybiBtZmM7CiAJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKQEAgLTE3NzQsNyArMTgxMyw4IEBACiAJaXQtPmNhY2hlID0gJm1mY191bnJlc19xdWV1ZTsKIAlzcGluX2xvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIAlmb3IgKG1mYyA9IG1mY191bnJlc19xdWV1ZTsgbWZjOyBtZmMgPSBtZmMtPm5leHQpCi0JCWlmIChwb3MtLSA9PSAwKQorCQlpZiAobmV0X2VxKG1mY19uZXQobWZjKSwgbmV0KSAmJgorCQkgICAgcG9zLS0gPT0gMCkKIAkJCXJldHVybiBtZmM7CiAJc3Bpbl91bmxvY2tfYmgoJm1mY191bnJlc19sb2NrKTsKIApAQCAtMTc4Niw5ICsxODI2LDExIEBACiBzdGF0aWMgdm9pZCAqaXBtcl9tZmNfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CisKIAlpdC0+Y2FjaGUgPSBOVUxMOwogCWl0LT5jdCA9IDA7Ci0JcmV0dXJuICpwb3MgPyBpcG1yX21mY19zZXFfaWR4KHNlcS0+cHJpdmF0ZSwgKnBvcyAtIDEpCisJcmV0dXJuICpwb3MgPyBpcG1yX21mY19zZXFfaWR4KG5ldCwgc2VxLT5wcml2YXRlLCAqcG9zIC0gMSkKIAkJOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKQEAgLTE3OTYsMTEgKzE4MzgsMTIgQEAKIHsKIAlzdHJ1Y3QgbWZjX2NhY2hlICptZmMgPSB2OwogCXN0cnVjdCBpcG1yX21mY19pdGVyICppdCA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCSsrKnBvczsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJcmV0dXJuIGlwbXJfbWZjX3NlcV9pZHgoc2VxLT5wcml2YXRlLCAwKTsKKwkJcmV0dXJuIGlwbXJfbWZjX3NlcV9pZHgobmV0LCBzZXEtPnByaXZhdGUsIDApOwogCiAJaWYgKG1mYy0+bmV4dCkKIAkJcmV0dXJuIG1mYy0+bmV4dDsKQEAgLTE4MDgsMTAgKzE4NTEsMTAgQEAKIAlpZiAoaXQtPmNhY2hlID09ICZtZmNfdW5yZXNfcXVldWUpCiAJCWdvdG8gZW5kX29mX2xpc3Q7CiAKLQlCVUdfT04oaXQtPmNhY2hlICE9IG1mY19jYWNoZV9hcnJheSk7CisJQlVHX09OKGl0LT5jYWNoZSAhPSBuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5KTsKIAogCXdoaWxlICgrK2l0LT5jdCA8IE1GQ19MSU5FUykgewotCQltZmMgPSBtZmNfY2FjaGVfYXJyYXlbaXQtPmN0XTsKKwkJbWZjID0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheVtpdC0+Y3RdOwogCQlpZiAobWZjKQogCQkJcmV0dXJuIG1mYzsKIAl9CkBAIC0xODIzLDYgKzE4NjYsOCBAQAogCiAJc3Bpbl9sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7CiAJbWZjID0gbWZjX3VucmVzX3F1ZXVlOworCXdoaWxlIChtZmMgJiYgIW5ldF9lcShtZmNfbmV0KG1mYyksIG5ldCkpCisJCW1mYyA9IG1mYy0+bmV4dDsKIAlpZiAobWZjKQogCQlyZXR1cm4gbWZjOwogCkBAIC0xODM2LDE2ICsxODgxLDE4IEBACiBzdGF0aWMgdm9pZCBpcG1yX21mY19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgaXBtcl9tZmNfaXRlciAqaXQgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAKIAlpZiAoaXQtPmNhY2hlID09ICZtZmNfdW5yZXNfcXVldWUpCiAJCXNwaW5fdW5sb2NrX2JoKCZtZmNfdW5yZXNfbG9jayk7Ci0JZWxzZSBpZiAoaXQtPmNhY2hlID09IG1mY19jYWNoZV9hcnJheSkKKwllbHNlIGlmIChpdC0+Y2FjaGUgPT0gbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSkKIAkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKIH0KIAogc3RhdGljIGludCBpcG1yX21mY19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKIAlpbnQgbjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewogCQlzZXFfcHV0cyhzZXEsCkBAIC0xODY2LDkgKzE5MTMsOSBAQAogCQkJCSAgIG1mYy0+bWZjX3VuLnJlcy53cm9uZ19pZik7CiAJCQlmb3IgKG4gPSBtZmMtPm1mY191bi5yZXMubWludmlmOwogCQkJICAgICBuIDwgbWZjLT5tZmNfdW4ucmVzLm1heHZpZjsgbisrICkgewotCQkJCWlmIChWSUZfRVhJU1RTKG4pCi0JCQkJICAgJiYgbWZjLT5tZmNfdW4ucmVzLnR0bHNbbl0gPCAyNTUpCi0JCQkJc2VxX3ByaW50ZihzZXEsCisJCQkJaWYgKFZJRl9FWElTVFMobmV0LCBuKSAmJgorCQkJCSAgICBtZmMtPm1mY191bi5yZXMudHRsc1tuXSA8IDI1NSkKKwkJCQkJc2VxX3ByaW50ZihzZXEsCiAJCQkJCSAgICIgJTJkOiUtM2QiLAogCQkJCQkgICBuLCBtZmMtPm1mY191bi5yZXMudHRsc1tuXSk7CiAJCQl9CkBAIC0xODkyLDggKzE5MzksOCBAQAogCiBzdGF0aWMgaW50IGlwbXJfbWZjX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmlwbXJfbWZjX3NlcV9vcHMsCi0JCQlzaXplb2Yoc3RydWN0IGlwbXJfbWZjX2l0ZXIpKTsKKwlyZXR1cm4gc2VxX29wZW5fbmV0KGlub2RlLCBmaWxlLCAmaXBtcl9tZmNfc2VxX29wcywKKwkJCSAgICBzaXplb2Yoc3RydWN0IGlwbXJfbWZjX2l0ZXIpKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaXBtcl9tZmNfZm9wcyA9IHsKQEAgLTE5MDEsNyArMTk0OCw3IEBACiAJLm9wZW4gICAgPSBpcG1yX21mY19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKICNlbmRpZgogCkBAIC0xOTE1LDYgKzE5NjIsNjUgQEAKIC8qCiAgKglTZXR1cCBmb3IgSVAgbXVsdGljYXN0IHJvdXRpbmcKICAqLworc3RhdGljIGludCBfX25ldF9pbml0IGlwbXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCWludCBlcnIgPSAwOworCisJbmV0LT5pcHY0LnZpZl90YWJsZSA9IGtjYWxsb2MoTUFYVklGUywgc2l6ZW9mKHN0cnVjdCB2aWZfZGV2aWNlKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ldC0+aXB2NC52aWZfdGFibGUpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCS8qIEZvcndhcmRpbmcgY2FjaGUgKi8KKwluZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5ID0ga2NhbGxvYyhNRkNfTElORVMsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IG1mY19jYWNoZSAqKSwKKwkJCQkJICAgIEdGUF9LRVJORUwpOworCWlmICghbmV0LT5pcHY0Lm1mY19jYWNoZV9hcnJheSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWxfbWZjX2NhY2hlOworCX0KKworI2lmZGVmIENPTkZJR19JUF9QSU1TTQorCW5ldC0+aXB2NC5tcm91dGVfcmVnX3ZpZl9udW0gPSAtMTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwllcnIgPSAtRU5PTUVNOworCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUobmV0LCAiaXBfbXJfdmlmIiwgMCwgJmlwbXJfdmlmX2ZvcHMpKQorCQlnb3RvIHByb2NfdmlmX2ZhaWw7CisJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJpcF9tcl9jYWNoZSIsIDAsICZpcG1yX21mY19mb3BzKSkKKwkJZ290byBwcm9jX2NhY2hlX2ZhaWw7CisjZW5kaWYKKwlyZXR1cm4gMDsKKworI2lmZGVmIENPTkZJR19QUk9DX0ZTCitwcm9jX2NhY2hlX2ZhaWw6CisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwX21yX3ZpZiIpOworcHJvY192aWZfZmFpbDoKKwlrZnJlZShuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5KTsKKyNlbmRpZgorZmFpbF9tZmNfY2FjaGU6CisJa2ZyZWUobmV0LT5pcHY0LnZpZl90YWJsZSk7CitmYWlsOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXBtcl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXBfbXJfY2FjaGUiKTsKKwlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXBfbXJfdmlmIik7CisjZW5kaWYKKwlrZnJlZShuZXQtPmlwdjQubWZjX2NhY2hlX2FycmF5KTsKKwlrZnJlZShuZXQtPmlwdjQudmlmX3RhYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcG1yX25ldF9vcHMgPSB7CisJLmluaXQgPSBpcG1yX25ldF9pbml0LAorCS5leGl0ID0gaXBtcl9uZXRfZXhpdCwKK307CiAKIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKQogewpAQCAtMTkyNywyNiArMjAzMywyMCBAQAogCWlmICghbXJ0X2NhY2hlcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcG1yX25ldF9vcHMpOworCWlmIChlcnIpCisJCWdvdG8gcmVnX3Blcm5ldF9mYWlsOworCiAJc2V0dXBfdGltZXIoJmlwbXJfZXhwaXJlX3RpbWVyLCBpcG1yX2V4cGlyZV9wcm9jZXNzLCAwKTsKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmlwX21yX25vdGlmaWVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIHJlZ19ub3RpZl9mYWlsOwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JZXJyID0gLUVOT01FTTsKLQlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKCZpbml0X25ldCwgImlwX21yX3ZpZiIsIDAsICZpcG1yX3ZpZl9mb3BzKSkKLQkJZ290byBwcm9jX3ZpZl9mYWlsOwotCWlmICghcHJvY19uZXRfZm9wc19jcmVhdGUoJmluaXRfbmV0LCAiaXBfbXJfY2FjaGUiLCAwLCAmaXBtcl9tZmNfZm9wcykpCi0JCWdvdG8gcHJvY19jYWNoZV9mYWlsOwotI2VuZGlmCiAJcmV0dXJuIDA7Ci0jaWZkZWYgQ09ORklHX1BST0NfRlMKLXByb2NfY2FjaGVfZmFpbDoKLQlwcm9jX25ldF9yZW1vdmUoJmluaXRfbmV0LCAiaXBfbXJfdmlmIik7Ci1wcm9jX3ZpZl9mYWlsOgotCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZpcF9tcl9ub3RpZmllcik7Ci0jZW5kaWYKKwogcmVnX25vdGlmX2ZhaWw6CiAJZGVsX3RpbWVyKCZpcG1yX2V4cGlyZV90aW1lcik7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcG1yX25ldF9vcHMpOworcmVnX3Blcm5ldF9mYWlsOgogCWttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZwppbmRleCAzODE2ZTFkLi4xODMzYmRiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMzEsNyArMzEsNyBAQAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgL3Byb2MgYW5kIHN5c2N0bCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9sZAotCSAgbGF5ZXIgMyBkZXBlbmRhbnQgY29ubmVjdGlvbiB0cmFja2luZy4gVGhpcyBpcyBuZWVkZWQgdG8ga2VlcAorCSAgbGF5ZXIgMyBkZXBlbmRlbnQgY29ubmVjdGlvbiB0cmFja2luZy4gVGhpcyBpcyBuZWVkZWQgdG8ga2VlcAogCSAgb2xkIHByb2dyYW1zIHRoYXQgaGF2ZSBub3QgYmVlbiBhZGFwdGVkIHRvIHRoZSBuZXcgbmFtZXMgd29ya2luZy4KIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KQEAgLTk1LDExICs5NSwxMSBAQAogY29uZmlnIElQX05GX01BVENIX1RUTAogCXRyaXN0YXRlICcidHRsIiBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECi0JaGVscAotCSAgVGhpcyBhZGRzIENPTkZJR19JUF9ORl9NQVRDSF9UVEwgb3B0aW9uLCB3aGljaCBlbmFibGVkIHRoZSB1c2VyCi0JICB0byBtYXRjaCBwYWNrZXRzIGJ5IHRoZWlyIFRUTCB2YWx1ZS4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisJc2VsZWN0IE5FVEZJTFRFUl9YVF9NQVRDSF9ITAorCS0tLWhlbHAtLS0KKwlUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2UKKwkoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0cworCUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEwuCiAKICMgYGZpbHRlcicsIGdlbmVyaWMgYW5kIHNwZWNpZmljIHRhcmdldHMKIGNvbmZpZyBJUF9ORl9GSUxURVIKQEAgLTMyMywxOSArMzIzLDEzIEBACiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIElQX05GX1RBUkdFVF9UVEwKLQl0cmlzdGF0ZSAgJ1RUTCB0YXJnZXQgc3VwcG9ydCcKLQlkZXBlbmRzIG9uIElQX05GX01BTkdMRQorCXRyaXN0YXRlICciVFRMIiB0YXJnZXQgc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRAotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGFkZHMgYSBgVFRMJyB0YXJnZXQsIHdoaWNoIGVuYWJsZXMgdGhlIHVzZXIgdG8gbW9kaWZ5Ci0JICB0aGUgVFRMIHZhbHVlIG9mIHRoZSBJUCBoZWFkZXIuCi0KLQkgIFdoaWxlIGl0IGlzIHNhZmUgdG8gZGVjcmVtZW50L2xvd2VyIHRoZSBUVEwsIHRoaXMgdGFyZ2V0IGFsc28gZW5hYmxlcwotCSAgZnVuY3Rpb25hbGl0eSB0byBpbmNyZW1lbnQgYW5kIHNldCB0aGUgVFRMIHZhbHVlIG9mIHRoZSBJUCBoZWFkZXIgdG8KLQkgIGFyYml0cmFyeSB2YWx1ZXMuICBUaGlzIGlzIEVYVFJFTUVMWSBEQU5HRVJPVVMgc2luY2UgeW91IGNhbiBlYXNpbHkKLQkgIGNyZWF0ZSBpbW1vcnRhbCBwYWNrZXRzIHRoYXQgbG9vcCBmb3JldmVyIG9uIHRoZSBuZXR3b3JrLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KKwlzZWxlY3QgTkVURklMVEVSX1hUX1RBUkdFVF9ITAorCS0tLWhlbHAtLS0KKwlUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2UKKwkoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0cworCUNPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMLgogCiAjIHJhdyArIHNwZWNpZmljIHRhcmdldHMKIGNvbmZpZyBJUF9ORl9SQVcKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCA1ZjliNjUwLi40ODExMTU5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC01MSw3ICs1MSw2IEBACiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEUpICs9IGlwdF9hZGRydHlwZS5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfQUgpICs9IGlwdF9haC5vCiBvYmotJChDT05GSUdfSVBfTkZfTUFUQ0hfRUNOKSArPSBpcHRfZWNuLm8KLW9iai0kKENPTkZJR19JUF9ORl9NQVRDSF9UVEwpICs9IGlwdF90dGwubwogCiAjIHRhcmdldHMKIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQKSArPSBpcHRfQ0xVU1RFUklQLm8KQEAgLTYxLDcgKzYwLDYgQEAKIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQKSArPSBpcHRfTkVUTUFQLm8KIG9iai0kKENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1QpICs9IGlwdF9SRURJUkVDVC5vCiBvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVCkgKz0gaXB0X1JFSkVDVC5vCi1vYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCkgKz0gaXB0X1RUTC5vCiBvYmotJChDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0cpICs9IGlwdF9VTE9HLm8KIAogIyBnZW5lcmljIEFSUCB0YWJsZXMKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCmluZGV4IDdlYTg4YjYuLjM1YzVmNmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwpAQCAtNzMsNiArNzMsMjggQEAKIAlyZXR1cm4gKHJldCAhPSAwKTsKIH0KIAorLyoKKyAqIFVuZm9ydHVuYXRseSwgX2IgYW5kIF9tYXNrIGFyZSBub3QgYWxpZ25lZCB0byBhbiBpbnQgKG9yIGxvbmcgaW50KQorICogU29tZSBhcmNoZXMgZG9udCBjYXJlLCB1bnJvbGxpbmcgdGhlIGxvb3AgaXMgYSB3aW4gb24gdGhlbS4KKyAqIEZvciBvdGhlciBhcmNoZXMsIHdlIG9ubHkgaGF2ZSBhIDE2Yml0IGFsaWduZW1lbnQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlmbmFtZV9jb21wYXJlKGNvbnN0IGNoYXIgKl9hLCBjb25zdCBjaGFyICpfYiwgY29uc3QgY2hhciAqX21hc2spCit7CisjaWZkZWYgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKKwl1bnNpZ25lZCBsb25nIHJldCA9IGlmbmFtZV9jb21wYXJlX2FsaWduZWQoX2EsIF9iLCBfbWFzayk7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKKwljb25zdCB1MTYgKmEgPSAoY29uc3QgdTE2ICopX2E7CisJY29uc3QgdTE2ICpiID0gKGNvbnN0IHUxNiAqKV9iOworCWNvbnN0IHUxNiAqbWFzayA9IChjb25zdCB1MTYgKilfbWFzazsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBJRk5BTVNJWi9zaXplb2YodTE2KTsgaSsrKQorCQlyZXQgfD0gKGFbaV0gXiBiW2ldKSAmIG1hc2tbaV07CisjZW5kaWYKKwlyZXR1cm4gcmV0OworfQorCiAvKiBSZXR1cm5zIHdoZXRoZXIgcGFja2V0IG1hdGNoZXMgcnVsZSBvciBub3QuICovCiBzdGF0aWMgaW5saW5lIGludCBhcnBfcGFja2V0X21hdGNoKGNvbnN0IHN0cnVjdCBhcnBoZHIgKmFycGhkciwKIAkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtODMsNyArMTA1LDcgQEAKIAljb25zdCBjaGFyICphcnBwdHIgPSAoY2hhciAqKShhcnBoZHIgKyAxKTsKIAljb25zdCBjaGFyICpzcmNfZGV2YWRkciwgKnRndF9kZXZhZGRyOwogCV9fYmUzMiBzcmNfaXBhZGRyLCB0Z3RfaXBhZGRyOwotCWludCBpLCByZXQ7CisJbG9uZyByZXQ7CiAKICNkZWZpbmUgRldJTlYoYm9vbCwgaW52ZmxnKSAoKGJvb2wpIF4gISEoYXJwaW5mby0+aW52ZmxhZ3MgJiAoaW52ZmxnKSkpCiAKQEAgLTE1NiwxMCArMTc4LDcgQEAKIAl9CiAKIAkvKiBMb29rIGZvciBpZm5hbWUgbWF0Y2hlcy4gICovCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laOyBpKyspIHsKLQkJcmV0IHw9IChpbmRldltpXSBeIGFycGluZm8tPmluaWZhY2VbaV0pCi0JCQkmIGFycGluZm8tPmluaWZhY2VfbWFza1tpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmUoaW5kZXYsIGFycGluZm8tPmluaWZhY2UsIGFycGluZm8tPmluaWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIEFSUFRfSU5WX1ZJQV9JTikpIHsKIAkJZHByaW50ZigiVklBIGluIG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0xNjgsMTAgKzE4Nyw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWZvciAoaSA9IDAsIHJldCA9IDA7IGkgPCBJRk5BTVNJWjsgaSsrKSB7Ci0JCXJldCB8PSAob3V0ZGV2W2ldIF4gYXJwaW5mby0+b3V0aWZhY2VbaV0pCi0JCQkmIGFycGluZm8tPm91dGlmYWNlX21hc2tbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlKG91dGRldiwgYXJwaW5mby0+b3V0aWZhY2UsIGFycGluZm8tPm91dGlmYWNlX21hc2spOwogCiAJaWYgKEZXSU5WKHJldCAhPSAwLCBBUlBUX0lOVl9WSUFfT1VUKSkgewogCQlkcHJpbnRmKCJWSUEgb3V0IG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0yMjEsNyArMjM3LDcgQEAKIAkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCQkgICBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQogewotCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXTsKKwlzdGF0aWMgY29uc3QgY2hhciBudWxsZGV2bmFtZVtJRk5BTVNJWl0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YobG9uZykpKSk7CiAJdW5zaWduZWQgaW50IHZlcmRpY3QgPSBORl9EUk9QOwogCWNvbnN0IHN0cnVjdCBhcnBoZHIgKmFycDsKIAlib29sIGhvdGRyb3AgPSBmYWxzZTsKQEAgLTIzNyw5ICsyNTMsMTAgQEAKIAlpbmRldiA9IGluID8gaW4tPm5hbWUgOiBudWxsZGV2bmFtZTsKIAlvdXRkZXYgPSBvdXQgPyBvdXQtPm5hbWUgOiBudWxsZGV2bmFtZTsKIAotCXJlYWRfbG9ja19iaCgmdGFibGUtPmxvY2spOwotCXByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKLQl0YWJsZV9iYXNlID0gKHZvaWQgKilwcml2YXRlLT5lbnRyaWVzW3NtcF9wcm9jZXNzb3JfaWQoKV07CisJcmN1X3JlYWRfbG9jaygpOworCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOworCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKKwogCWUgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSk7CiAJYmFjayA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT51bmRlcmZsb3dbaG9va10pOwogCkBAIC0zMTEsNyArMzI4LDggQEAKIAkJCWUgPSAodm9pZCAqKWUgKyBlLT5uZXh0X29mZnNldDsKIAkJfQogCX0gd2hpbGUgKCFob3Rkcm9wKTsKLQlyZWFkX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoaG90ZHJvcCkKIAkJcmV0dXJuIE5GX0RST1A7CkBAIC0zNzQsNyArMzkyLDkgQEAKIAkJCSAgICAmJiB1bmNvbmRpdGlvbmFsKCZlLT5hcnApKSB8fCB2aXNpdGVkKSB7CiAJCQkJdW5zaWduZWQgaW50IG9sZHBvcywgc2l6ZTsKIAotCQkJCWlmICh0LT52ZXJkaWN0IDwgLU5GX01BWF9WRVJESUNUIC0gMSkgeworCQkJCWlmICgoc3RyY21wKHQtPnRhcmdldC51LnVzZXIubmFtZSwKKwkJCQkJICAgIEFSUFRfU1RBTkRBUkRfVEFSR0VUKSA9PSAwKSAmJgorCQkJCSAgICB0LT52ZXJkaWN0IDwgLU5GX01BWF9WRVJESUNUIC0gMSkgewogCQkJCQlkdXByaW50ZigibWFya19zb3VyY2VfY2hhaW5zOiBiYWQgIgogCQkJCQkJIm5lZ2F0aXZlIHZlcmRpY3QgKCVpKVxuIiwKIAkJCQkJCQkJdC0+dmVyZGljdCk7CkBAIC03MTQsMTEgKzczNCw2NSBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCisKKy8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYworICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCitzdGF0aWMgaW50CithZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgYXJwdF9lbnRyeSAqZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKKwkJICAgICB1bnNpZ25lZCBpbnQgKmkpCit7CisJQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7CisKKwkoKmkpKys7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRha2UgdmFsdWVzIGZyb20gY291bnRlcnMgYW5kIGFkZCB0aGVtIGJhY2sgb250byB0aGUgY3VycmVudCBjcHUgKi8KK3N0YXRpYyB2b2lkIHB1dF9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqdCwKKwkJCSBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgY3B1OworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpID0gMDsKKwlBUlBUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjcHVdLAorCQkJICB0LT5zaXplLAorCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKKwkJCSAgY291bnRlcnMsCisJCQkgICZpKTsKKwlsb2NhbF9iaF9lbmFibGUoKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3plcm9fZW50cnlfY291bnRlcihzdHJ1Y3QgYXJwdF9lbnRyeSAqZSwgdm9pZCAqYXJnKQoreworCWUtPmNvdW50ZXJzLmJjbnQgPSAwOworCWUtPmNvdW50ZXJzLnBjbnQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY2xvbmVfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvKQoreworCXVuc2lnbmVkIGludCBjcHU7CisJY29uc3Qgdm9pZCAqbG9jX2NwdV9lbnRyeSA9IGluZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwltZW1jcHkobmV3aW5mbywgaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHh0X3RhYmxlX2luZm8sIGVudHJpZXMpKTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzW2NwdV0sIGxvY19jcHVfZW50cnksIGluZm8tPnNpemUpOworCQlBUlBUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllc1tjcHVdLCBuZXdpbmZvLT5zaXplLAorCQkJCSAgemVyb19lbnRyeV9jb3VudGVyLCBOVUxMKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0JY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvOwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgKiAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtNzI4LDE0ICs4MDIsMzAgQEAKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShjb3VudGVyc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG5vbWVtOwogCi0JLyogRmlyc3QsIHN1bSBjb3VudGVycy4uLiAqLwotCXdyaXRlX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKLQlnZXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOwotCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCWluZm8gPSB4dF9hbGxvY190YWJsZV9pbmZvKHByaXZhdGUtPnNpemUpOworCWlmICghaW5mbykKKwkJZ290byBmcmVlX2NvdW50ZXJzOworCisJY2xvbmVfY291bnRlcnMoaW5mbywgcHJpdmF0ZSk7CisKKwltdXRleF9sb2NrKCZ0YWJsZS0+bG9jayk7CisJeHRfdGFibGVfZW50cnlfc3dhcF9yY3UocHJpdmF0ZSwgaW5mbyk7CisJc3luY2hyb25pemVfbmV0KCk7CS8qIFdhaXQgdW50aWwgc21va2UgaGFzIGNsZWFyZWQgKi8KKworCWdldF9jb3VudGVycyhpbmZvLCBjb3VudGVycyk7CisJcHV0X2NvdW50ZXJzKHByaXZhdGUsIGNvdW50ZXJzKTsKKwltdXRleF91bmxvY2soJnRhYmxlLT5sb2NrKTsKKworCXh0X2ZyZWVfdGFibGVfaW5mbyhpbmZvKTsKIAogCXJldHVybiBjb3VudGVyczsKKworIGZyZWVfY291bnRlcnM6CisJdmZyZWUoY291bnRlcnMpOworIG5vbWVtOgorCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogfQogCiBzdGF0aWMgaW50IGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLApAQCAtMTA3NSwyMCArMTE2NSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCi0gKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGFycHRfZW50cnkgKmUsCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAotCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0KLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBkb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbiwKIAkJCSAgIGludCBjb21wYXQpCiB7CkBAIC0xMTQ4LDEzICsxMjI0LDE0IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0LT5sb2NrKTsKIAlwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IG51bV9jb3VudGVycykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja191cF9mcmVlOwogCX0KIAorCXByZWVtcHRfZGlzYWJsZSgpOwogCWkgPSAwOwogCS8qIENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKQEAgLTExNjMsOCArMTI0MCwxMCBAQAogCQkJICAgYWRkX2NvdW50ZXJfdG9fZW50cnksCiAJCQkgICBwYWRkYywKIAkJCSAgICZpKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogIHVubG9ja191cF9mcmVlOgotCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKKwogCXh0X3RhYmxlX3VubG9jayh0KTsKIAltb2R1bGVfcHV0KHQtPm1lKTsKICBmcmVlOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCmluZGV4IGUwOTExODcuLjZlY2ZkYWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKQEAgLTQ4LDggKzQ4LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X2ZpbHRlciA9IHsKIAkubmFtZQkJPSAiZmlsdGVyIiwKIAkudmFsaWRfaG9va3MJPSBGSUxURVJfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKHBhY2tldF9maWx0ZXIubG9jayksCi0JLnByaXZhdGUJPSBOVUxMLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gTkZQUk9UT19BUlAsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3F1ZXVlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwppbmRleCA0MzJjZTlkLi41ZjIyYzkxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfcXVldWUuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CkBAIC02NDAsNiArNjQxLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiSVB2NCBwYWNrZXQgcXVldWUgaGFuZGxlciIpOwogTU9EVUxFX0FVVEhPUigiSmFtZXMgTW9ycmlzIDxqbW9ycmlzQGludGVyY29kZS5jb20uYXU+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTkVUX1BGX1BST1RPKFBGX05FVExJTkssIE5FVExJTktfRklSRVdBTEwpOwogCiBtb2R1bGVfaW5pdChpcF9xdWV1ZV9pbml0KTsKIG1vZHVsZV9leGl0KGlwX3F1ZXVlX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCmluZGV4IGVmOGI2Y2EuLjgyZWU3YzkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKQEAgLTgzLDcgKzgzLDYgQEAKIAkJY29uc3Qgc3RydWN0IGlwdF9pcCAqaXBpbmZvLAogCQlpbnQgaXNmcmFnKQogewotCXNpemVfdCBpOwogCXVuc2lnbmVkIGxvbmcgcmV0OwogCiAjZGVmaW5lIEZXSU5WKGJvb2wsIGludmZsZykgKChib29sKSBeICEhKGlwaW5mby0+aW52ZmxhZ3MgJiAoaW52ZmxnKSkpCkBAIC0xMDMsMTIgKzEwMiw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBMb29rIGZvciBpZm5hbWUgbWF0Y2hlczsgdGhpcyBzaG91bGQgdW5yb2xsIG5pY2VseS4gKi8KLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpbmRldilbaV0KLQkJCV4gKChjb25zdCB1bnNpZ25lZCBsb25nICopaXBpbmZvLT5pbmlmYWNlKVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBsb25nICopaXBpbmZvLT5pbmlmYWNlX21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZV9hbGlnbmVkKGluZGV2LCBpcGluZm8tPmluaWZhY2UsIGlwaW5mby0+aW5pZmFjZV9tYXNrKTsKIAogCWlmIChGV0lOVihyZXQgIT0gMCwgSVBUX0lOVl9WSUFfSU4pKSB7CiAJCWRwcmludGYoIlZJQSBpbiBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMTE3LDExICsxMTEsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JZm9yIChpID0gMCwgcmV0ID0gMDsgaSA8IElGTkFNU0laL3NpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBsb25nICopb3V0ZGV2KVtpXQotCQkJXiAoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpcGluZm8tPm91dGlmYWNlKVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBsb25nICopaXBpbmZvLT5vdXRpZmFjZV9tYXNrKVtpXTsKLQl9CisJcmV0ID0gaWZuYW1lX2NvbXBhcmVfYWxpZ25lZChvdXRkZXYsIGlwaW5mby0+b3V0aWZhY2UsIGlwaW5mby0+b3V0aWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIElQVF9JTlZfVklBX09VVCkpIHsKIAkJZHByaW50ZigiVklBIG91dCBtaXNtYXRjaCAoJXMgdnMgJXMpLiVzXG4iLApAQCAtMzQ3LDEwICszMzcsMTIgQEAKIAltdHBhci5mYW1pbHkgID0gdGdwYXIuZmFtaWx5ID0gTkZQUk9UT19JUFY0OwogCXRncGFyLmhvb2tudW0gPSBob29rOwogCi0JcmVhZF9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CiAJSVBfTkZfQVNTRVJUKHRhYmxlLT52YWxpZF9ob29rcyAmICgxIDw8IGhvb2spKTsKLQlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7Ci0JdGFibGVfYmFzZSA9ICh2b2lkICopcHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOworCisJcmN1X3JlYWRfbG9jaygpOworCXByaXZhdGUgPSByY3VfZGVyZWZlcmVuY2UodGFibGUtPnByaXZhdGUpOworCXRhYmxlX2Jhc2UgPSByY3VfZGVyZWZlcmVuY2UocHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKKwogCWUgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSk7CiAKIAkvKiBGb3IgcmV0dXJuIGZyb20gYnVpbHRpbiBjaGFpbiAqLwpAQCAtNDQ1LDcgKzQzNyw3IEBACiAJCX0KIAl9IHdoaWxlICghaG90ZHJvcCk7CiAKLQlyZWFkX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAjaWZkZWYgREVCVUdfQUxMT1dfQUxMCiAJcmV0dXJuIE5GX0FDQ0VQVDsKQEAgLTQ5Niw3ICs0ODgsOSBAQAogCQkJICAgICYmIHVuY29uZGl0aW9uYWwoJmUtPmlwKSkgfHwgdmlzaXRlZCkgewogCQkJCXVuc2lnbmVkIGludCBvbGRwb3MsIHNpemU7CiAKLQkJCQlpZiAodC0+dmVyZGljdCA8IC1ORl9NQVhfVkVSRElDVCAtIDEpIHsKKwkJCQlpZiAoKHN0cmNtcCh0LT50YXJnZXQudS51c2VyLm5hbWUsCisJCQkgICAgCQkgICAgSVBUX1NUQU5EQVJEX1RBUkdFVCkgPT0gMCkgJiYKKwkJCQkgICAgdC0+dmVyZGljdCA8IC1ORl9NQVhfVkVSRElDVCAtIDEpIHsKIAkJCQkJZHVwcmludGYoIm1hcmtfc291cmNlX2NoYWluczogYmFkICIKIAkJCQkJCSJuZWdhdGl2ZSB2ZXJkaWN0ICglaSlcbiIsCiAJCQkJCQkJCXQtPnZlcmRpY3QpOwpAQCAtOTI0LDEzICs5MTgsNjggQEAKIAkJCQkgIGNvdW50ZXJzLAogCQkJCSAgJmkpOwogCX0KKworfQorCisvKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKKyAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLworc3RhdGljIGludAorYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKKwkJICAgICB1bnNpZ25lZCBpbnQgKmkpCit7CisJQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7CisKKwkoKmkpKys7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRha2UgdmFsdWVzIGZyb20gY291bnRlcnMgYW5kIGFkZCB0aGVtIGJhY2sgb250byB0aGUgY3VycmVudCBjcHUgKi8KK3N0YXRpYyB2b2lkIHB1dF9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqdCwKKwkJCSBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgY3B1OworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpID0gMDsKKwlJUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzW2NwdV0sCisJCQkgIHQtPnNpemUsCisJCQkgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAorCQkJICBjb3VudGVycywKKwkJCSAgJmkpOworCWxvY2FsX2JoX2VuYWJsZSgpOworfQorCisKK3N0YXRpYyBpbmxpbmUgaW50Cit6ZXJvX2VudHJ5X2NvdW50ZXIoc3RydWN0IGlwdF9lbnRyeSAqZSwgdm9pZCAqYXJnKQoreworCWUtPmNvdW50ZXJzLmJjbnQgPSAwOworCWUtPmNvdW50ZXJzLnBjbnQgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY2xvbmVfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvKQoreworCXVuc2lnbmVkIGludCBjcHU7CisJY29uc3Qgdm9pZCAqbG9jX2NwdV9lbnRyeSA9IGluZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwltZW1jcHkobmV3aW5mbywgaW5mbywgb2Zmc2V0b2Yoc3RydWN0IHh0X3RhYmxlX2luZm8sIGVudHJpZXMpKTsKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCW1lbWNweShuZXdpbmZvLT5lbnRyaWVzW2NwdV0sIGxvY19jcHVfZW50cnksIGluZm8tPnNpemUpOworCQlJUFRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzW2NwdV0sIG5ld2luZm8tPnNpemUsCisJCQkJICB6ZXJvX2VudHJ5X2NvdW50ZXIsIE5VTEwpOworCX0KIH0KIAogc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqIGFsbG9jX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0JY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvOwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgICAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtOTM5LDE0ICs5ODgsMzAgQEAKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShjb3VudGVyc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG5vbWVtOwogCi0JLyogRmlyc3QsIHN1bSBjb3VudGVycy4uLiAqLwotCXdyaXRlX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKLQlnZXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOwotCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCWluZm8gPSB4dF9hbGxvY190YWJsZV9pbmZvKHByaXZhdGUtPnNpemUpOworCWlmICghaW5mbykKKwkJZ290byBmcmVlX2NvdW50ZXJzOworCisJY2xvbmVfY291bnRlcnMoaW5mbywgcHJpdmF0ZSk7CisKKwltdXRleF9sb2NrKCZ0YWJsZS0+bG9jayk7CisJeHRfdGFibGVfZW50cnlfc3dhcF9yY3UocHJpdmF0ZSwgaW5mbyk7CisJc3luY2hyb25pemVfbmV0KCk7CS8qIFdhaXQgdW50aWwgc21va2UgaGFzIGNsZWFyZWQgKi8KKworCWdldF9jb3VudGVycyhpbmZvLCBjb3VudGVycyk7CisJcHV0X2NvdW50ZXJzKHByaXZhdGUsIGNvdW50ZXJzKTsKKwltdXRleF91bmxvY2soJnRhYmxlLT5sb2NrKTsKKworCXh0X2ZyZWVfdGFibGVfaW5mbyhpbmZvKTsKIAogCXJldHVybiBjb3VudGVyczsKKworIGZyZWVfY291bnRlcnM6CisJdmZyZWUoY291bnRlcnMpOworIG5vbWVtOgorCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMzEyLDI3ICsxMzc3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKLSAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLwotc3RhdGljIGludAotYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0jaWYgMAotCWR1cHJpbnRmKCJhZGRfY291bnRlcjogRW50cnkgJXUgJWx1LyVsdSArICVsdS8lbHVcbiIsCi0JCSAqaSwKLQkJIChsb25nIHVuc2lnbmVkIGludCllLT5jb3VudGVycy5wY250LAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWUtPmNvdW50ZXJzLmJjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLnBjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLmJjbnQpOwotI2VuZGlmCi0KLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KIAogc3RhdGljIGludAogZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4sIGludCBjb21wYXQpCkBAIC0xMzkzLDEzICsxNDM3LDE0IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0LT5sb2NrKTsKIAlwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IG51bV9jb3VudGVycykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja191cF9mcmVlOwogCX0KIAorCXByZWVtcHRfZGlzYWJsZSgpOwogCWkgPSAwOwogCS8qIENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CkBAIC0xNDA4LDggKzE0NTMsOSBAQAogCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKIAkJCSAgcGFkZGMsCiAJCQkgICZpKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogIHVubG9ja191cF9mcmVlOgotCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKIAl4dF90YWJsZV91bmxvY2sodCk7CiAJbW9kdWxlX3B1dCh0LT5tZSk7CiAgZnJlZToKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0xPRy5jCmluZGV4IDI3YTc4ZmIuLmFjYzQ0YzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTE9HLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9MT0cuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgaXB0X2xvZ19sb2dnZXIgPXsKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyIGlwdF9sb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCT0gImlwdF9MT0ciLAogCS5sb2dmbgkJPSAmaXB0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVFRMLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNzZhYWUuLjAwMDAwMDAKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYworKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qIFRUTCBtb2RpZmljYXRpb24gdGFyZ2V0IGZvciBJUCB0YWJsZXMKLSAqIChDKSAyMDAwLDIwMDUgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVFRMLmg+Ci0KLU1PRFVMRV9BVVRIT1IoIkhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBJUHY0IFRUTCBmaWVsZCBtb2RpZmljYXRpb24gdGFyZ2V0Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXR0bF90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCi17Ci0Jc3RydWN0IGlwaGRyICppcGg7Ci0JY29uc3Qgc3RydWN0IGlwdF9UVExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0JaW50IG5ld190dGw7Ci0KLQlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgc2tiLT5sZW4pKQotCQlyZXR1cm4gTkZfRFJPUDsKLQotCWlwaCA9IGlwX2hkcihza2IpOwotCi0Jc3dpdGNoIChpbmZvLT5tb2RlKSB7Ci0JCWNhc2UgSVBUX1RUTF9TRVQ6Ci0JCQluZXdfdHRsID0gaW5mby0+dHRsOwotCQkJYnJlYWs7Ci0JCWNhc2UgSVBUX1RUTF9JTkM6Ci0JCQluZXdfdHRsID0gaXBoLT50dGwgKyBpbmZvLT50dGw7Ci0JCQlpZiAobmV3X3R0bCA+IDI1NSkKLQkJCQluZXdfdHRsID0gMjU1OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVBUX1RUTF9ERUM6Ci0JCQluZXdfdHRsID0gaXBoLT50dGwgLSBpbmZvLT50dGw7Ci0JCQlpZiAobmV3X3R0bCA8IDApCi0JCQkJbmV3X3R0bCA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCW5ld190dGwgPSBpcGgtPnR0bDsKLQkJCWJyZWFrOwotCX0KLQotCWlmIChuZXdfdHRsICE9IGlwaC0+dHRsKSB7Ci0JCWNzdW1fcmVwbGFjZTIoJmlwaC0+Y2hlY2ssIGh0b25zKGlwaC0+dHRsIDw8IDgpLAotCQkJCQkgICBodG9ucyhuZXdfdHRsIDw8IDgpKTsKLQkJaXBoLT50dGwgPSBuZXdfdHRsOwotCX0KLQotCXJldHVybiBYVF9DT05USU5VRTsKLX0KLQotc3RhdGljIGJvb2wgdHRsX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQotewotCWNvbnN0IHN0cnVjdCBpcHRfVFRMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOwotCi0JaWYgKGluZm8tPm1vZGUgPiBJUFRfVFRMX01BWE1PREUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXB0X1RUTDogaW52YWxpZCBvciB1bmtub3duIE1vZGUgJXVcbiIsCi0JCQlpbmZvLT5tb2RlKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoaW5mby0+bW9kZSAhPSBJUFRfVFRMX1NFVCAmJiBpbmZvLT50dGwgPT0gMCkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCB0dGxfdGdfcmVnIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUgCQk9ICJUVEwiLAotCS5mYW1pbHkJCT0gTkZQUk9UT19JUFY0LAotCS50YXJnZXQgCT0gdHRsX3RnLAotCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcHRfVFRMX2luZm8pLAotCS50YWJsZQkJPSAibWFuZ2xlIiwKLQkuY2hlY2tlbnRyeSAJPSB0dGxfdGdfY2hlY2ssCi0JLm1lIAkJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHR0bF90Z19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldCgmdHRsX3RnX3JlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0dGxfdGdfZXhpdCh2b2lkKQotewotCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZ0dGxfdGdfcmVnKTsKLX0KLQotbW9kdWxlX2luaXQodHRsX3RnX2luaXQpOwotbW9kdWxlX2V4aXQodHRsX3RnX2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYwppbmRleCAxOGEyODI2Li5kMzJjYzRiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYwpAQCAtMzc5LDcgKzM3OSw3IEBACiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXB0X3Vsb2dfbG9nZ2VyID0geworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgaXB0X3Vsb2dfbG9nZ2VyIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCT0gImlwdF9VTE9HIiwKIAkubG9nZm4JCT0gaXB0X2xvZ2ZuLAogCS5tZQkJPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdHRsLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3R0bC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTdmMWNiLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfdHRsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBJUCB0YWJsZXMgbW9kdWxlIGZvciBtYXRjaGluZyB0aGUgdmFsdWUgb2YgdGhlIFRUTAotICoKLSAqIChDKSAyMDAwLDIwMDEgYnkgSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLQotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90dGwuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLQotTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IElQdjQgVFRMIGZpZWxkIG1hdGNoIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLXN0YXRpYyBib29sIHR0bF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKLXsKLQljb25zdCBzdHJ1Y3QgaXB0X3R0bF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87Ci0JY29uc3QgdTggdHRsID0gaXBfaGRyKHNrYiktPnR0bDsKLQotCXN3aXRjaCAoaW5mby0+bW9kZSkgewotCQljYXNlIElQVF9UVExfRVE6Ci0JCQlyZXR1cm4gdHRsID09IGluZm8tPnR0bDsKLQkJY2FzZSBJUFRfVFRMX05FOgotCQkJcmV0dXJuIHR0bCAhPSBpbmZvLT50dGw7Ci0JCWNhc2UgSVBUX1RUTF9MVDoKLQkJCXJldHVybiB0dGwgPCBpbmZvLT50dGw7Ci0JCWNhc2UgSVBUX1RUTF9HVDoKLQkJCXJldHVybiB0dGwgPiBpbmZvLT50dGw7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcHRfdHRsOiB1bmtub3duIG1vZGUgJWRcbiIsCi0JCQkJaW5mby0+bW9kZSk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X21hdGNoIHR0bF9tdF9yZWcgX19yZWFkX21vc3RseSA9IHsKLQkubmFtZQkJPSAidHRsIiwKLQkuZmFtaWx5CQk9IE5GUFJPVE9fSVBWNCwKLQkubWF0Y2gJCT0gdHRsX210LAotCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGlwdF90dGxfaW5mbyksCi0JLm1lCQk9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdHRsX210X2luaXQodm9pZCkKLXsKLQlyZXR1cm4geHRfcmVnaXN0ZXJfbWF0Y2goJnR0bF9tdF9yZWcpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdHRsX210X2V4aXQodm9pZCkKLXsKLQl4dF91bnJlZ2lzdGVyX21hdGNoKCZ0dGxfbXRfcmVnKTsKLX0KLQotbW9kdWxlX2luaXQodHRsX210X2luaXQpOwotbW9kdWxlX2V4aXQodHRsX210X2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYwppbmRleCA1MmNiNjkzLi5jMzBhOTY5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYwpAQCAtNTYsNyArNTYsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X2ZpbHRlci5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwppbmRleCAzOTI5ZDIwLi40MDg3NjE0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwpAQCAtNjcsNyArNjcsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfbWFuZ2xlciA9IHsKIAkubmFtZQkJPSAibWFuZ2xlIiwKIAkudmFsaWRfaG9va3MJPSBNQU5HTEVfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKHBhY2tldF9tYW5nbGVyLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCmluZGV4IDdmNjVkMTguLmU1MzU2ZGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCkBAIC0zOSw3ICszOSw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSAgUkFXX1ZBTElEX0hPT0tTLAotCS5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKHBhY2tldF9yYXcubG9jayksCiAJLm1lID0gVEhJU19NT0RVTEUsCiAJLmFmID0gQUZfSU5FVCwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwppbmRleCBhNTJhMzVmLi4yOWFiNjMwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMKQEAgLTYwLDcgKzYwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgc2VjdXJpdHlfdGFibGUgPSB7CiAJLm5hbWUJCT0gInNlY3VyaXR5IiwKIAkudmFsaWRfaG9va3MJPSBTRUNVUklUWV9WQUxJRF9IT09LUywKLQkubG9jawkJPSBfX1JXX0xPQ0tfVU5MT0NLRUQoc2VjdXJpdHlfdGFibGUubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCmluZGV4IDRiZWIwNGYuLjdkMmVhZDcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpAQCAtMTIwLDggKzEyMCwxMCBAQAogCQl0eXBlb2YobmZfbmF0X3NlcV9hZGp1c3RfaG9vaykgc2VxX2FkanVzdDsKIAogCQlzZXFfYWRqdXN0ID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zZXFfYWRqdXN0X2hvb2spOwotCQlpZiAoIXNlcV9hZGp1c3QgfHwgIXNlcV9hZGp1c3Qoc2tiLCBjdCwgY3RpbmZvKSkKKwkJaWYgKCFzZXFfYWRqdXN0IHx8ICFzZXFfYWRqdXN0KHNrYiwgY3QsIGN0aW5mbykpIHsKKwkJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZl9jdF9uZXQoY3QpLCBkcm9wKTsKIAkJCXJldHVybiBORl9EUk9QOworCQl9CiAJfQogb3V0OgogCS8qIFdlJ3ZlIHNlZW4gaXQgY29taW5nIG91dCB0aGUgb3RoZXIgc2lkZTogY29uZmlybSBpdCAqLwpAQCAtMzI2LDYgKzMyOCwxMSBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgaXB2NF9ubGF0dHJfdHVwbGVfc2l6ZSh2b2lkKQoreworCXJldHVybiBubGFfcG9saWN5X2xlbihpcHY0X25sYV9wb2xpY3ksIENUQV9JUF9NQVggKyAxKTsKK30KICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IG5mX3NvY2tvcHRfb3BzIHNvX2dldG9yaWdkc3QgPSB7CkBAIC0zNDUsNiArMzUyLDcgQEAKIAkuZ2V0X2w0cHJvdG8JID0gaXB2NF9nZXRfbDRwcm90bywKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudHVwbGVfdG9fbmxhdHRyID0gaXB2NF90dXBsZV90b19ubGF0dHIsCisJLm5sYXR0cl90dXBsZV9zaXplID0gaXB2NF9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhdHRyX3RvX3R1cGxlID0gaXB2NF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJID0gaXB2NF9ubGFfcG9saWN5LAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NF9jb21wYXQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCmluZGV4IDZiYTVjNTUuLjg2NjhhM2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0X2NvbXBhdC5jCkBAIC0yNSw0MCArMjUsNDIgQEAKIAl1bnNpZ25lZCBpbnQgYnVja2V0OwogfTsKIAotc3RhdGljIHN0cnVjdCBobGlzdF9ub2RlICpjdF9nZXRfZmlyc3Qoc3RydWN0IHNlcV9maWxlICpzZXEpCitzdGF0aWMgc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmN0X2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKIAlzdHJ1Y3QgY3RfaXRlcl9zdGF0ZSAqc3QgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47CiAKIAlmb3IgKHN0LT5idWNrZXQgPSAwOwogCSAgICAgc3QtPmJ1Y2tldCA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKIAkgICAgIHN0LT5idWNrZXQrKykgewogCQluID0gcmN1X2RlcmVmZXJlbmNlKG5ldC0+Y3QuaGFzaFtzdC0+YnVja2V0XS5maXJzdCk7Ci0JCWlmIChuKQorCQlpZiAoIWlzX2FfbnVsbHMobikpCiAJCQlyZXR1cm4gbjsKIAl9CiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGxpc3Rfbm9kZSAqY3RfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsCi0JCQkJICAgICAgc3RydWN0IGhsaXN0X25vZGUgKmhlYWQpCitzdGF0aWMgc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmN0X2dldF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLAorCQkJCSAgICAgIHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpoZWFkKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCXN0cnVjdCBjdF9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKIAogCWhlYWQgPSByY3VfZGVyZWZlcmVuY2UoaGVhZC0+bmV4dCk7Ci0Jd2hpbGUgKGhlYWQgPT0gTlVMTCkgewotCQlpZiAoKytzdC0+YnVja2V0ID49IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSkKLQkJCXJldHVybiBOVUxMOworCXdoaWxlIChpc19hX251bGxzKGhlYWQpKSB7CisJCWlmIChsaWtlbHkoZ2V0X251bGxzX3ZhbHVlKGhlYWQpID09IHN0LT5idWNrZXQpKSB7CisJCQlpZiAoKytzdC0+YnVja2V0ID49IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJfQogCQloZWFkID0gcmN1X2RlcmVmZXJlbmNlKG5ldC0+Y3QuaGFzaFtzdC0+YnVja2V0XS5maXJzdCk7CiAJfQogCXJldHVybiBoZWFkOwogfQogCi1zdGF0aWMgc3RydWN0IGhsaXN0X25vZGUgKmN0X2dldF9pZHgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCBwb3MpCitzdGF0aWMgc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmN0X2dldF9pZHgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCBwb3MpCiB7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKmhlYWQgPSBjdF9nZXRfZmlyc3Qoc2VxKTsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqaGVhZCA9IGN0X2dldF9maXJzdChzZXEpOwogCiAJaWYgKGhlYWQpCiAJCXdoaWxlIChwb3MgJiYgKGhlYWQgPSBjdF9nZXRfbmV4dChzZXEsIGhlYWQpKSkKQEAgLTg3LDY5ICs4OSw3NiBAQAogCiBzdGF0aWMgaW50IGN0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKIHsKLQljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmhhc2ggPSB2OwotCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaGFzaCk7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoYXNoID0gdjsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGhhc2gpOwogCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bzsKIAljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmw0cHJvdG87CisJaW50IHJldCA9IDA7CiAKIAlORl9DVF9BU1NFUlQoY3QpOworCWlmICh1bmxpa2VseSghYXRvbWljX2luY19ub3RfemVybygmY3QtPmN0X2dlbmVyYWwudXNlKSkpCisJCXJldHVybiAwOworCiAKIAkvKiB3ZSBvbmx5IHdhbnQgdG8gcHJpbnQgRElSX09SSUdJTkFMICovCiAJaWYgKE5GX0NUX0RJUkVDVElPTihoYXNoKSkKLQkJcmV0dXJuIDA7CisJCWdvdG8gcmVsZWFzZTsKIAlpZiAobmZfY3RfbDNudW0oY3QpICE9IEFGX0lORVQpCi0JCXJldHVybiAwOworCQlnb3RvIHJlbGVhc2U7CiAKIAlsM3Byb3RvID0gX19uZl9jdF9sM3Byb3RvX2ZpbmQobmZfY3RfbDNudW0oY3QpKTsKIAlORl9DVF9BU1NFUlQobDNwcm90byk7CiAJbDRwcm90byA9IF9fbmZfY3RfbDRwcm90b19maW5kKG5mX2N0X2wzbnVtKGN0KSwgbmZfY3RfcHJvdG9udW0oY3QpKTsKIAlORl9DVF9BU1NFUlQobDRwcm90byk7CiAKKwlyZXQgPSAtRU5PU1BDOwogCWlmIChzZXFfcHJpbnRmKHMsICIlLThzICV1ICVsZCAiLAogCQkgICAgICBsNHByb3RvLT5uYW1lLCBuZl9jdF9wcm90b251bShjdCksCiAJCSAgICAgIHRpbWVyX3BlbmRpbmcoJmN0LT50aW1lb3V0KQogCQkgICAgICA/IChsb25nKShjdC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykvSFogOiAwKSAhPSAwKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKGw0cHJvdG8tPnByaW50X2Nvbm50cmFjayAmJiBsNHByb3RvLT5wcmludF9jb25udHJhY2socywgY3QpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHByaW50X3R1cGxlKHMsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUsCiAJCQlsM3Byb3RvLCBsNHByb3RvKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKIAogCWlmIChzZXFfcHJpbnRfYWNjdChzLCBjdCwgSVBfQ1RfRElSX09SSUdJTkFMKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKIAogCWlmICghKHRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKSkKIAkJaWYgKHNlcV9wcmludGYocywgIltVTlJFUExJRURdICIpKQotCQkJcmV0dXJuIC1FTk9TUEM7CisJCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAocHJpbnRfdHVwbGUocywgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSwKIAkJCWwzcHJvdG8sIGw0cHJvdG8pKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHNlcV9wcmludF9hY2N0KHMsIGN0LCBJUF9DVF9ESVJfUkVQTFkpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmN0LT5zdGF0dXMpKQogCQlpZiAoc2VxX3ByaW50ZihzLCAiW0FTU1VSRURdICIpKQotCQkJcmV0dXJuIC1FTk9TUEM7CisJCQlnb3RvIHJlbGVhc2U7CiAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksKIAlpZiAoc2VxX3ByaW50ZihzLCAibWFyaz0ldSAiLCBjdC0+bWFyaykpCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSwogCWlmIChzZXFfcHJpbnRmKHMsICJzZWNtYXJrPSV1ICIsIGN0LT5zZWNtYXJrKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKICNlbmRpZgogCiAJaWYgKHNlcV9wcmludGYocywgInVzZT0ldVxuIiwgYXRvbWljX3JlYWQoJmN0LT5jdF9nZW5lcmFsLnVzZSkpKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCXJldHVybiAwOworCQlnb3RvIHJlbGVhc2U7CisJcmV0ID0gMDsKK3JlbGVhc2U6CisJbmZfY3RfcHV0KGN0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGN0X3NlcV9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCmluZGV4IDJhOGJlZTIuLjIzYjJjMmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcC5jCkBAIC0yNjIsNiArMjYyLDExIEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBpY21wX25sYXR0cl90dXBsZV9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV9wb2xpY3lfbGVuKGljbXBfbmxhX3BvbGljeSwgQ1RBX1BST1RPX01BWCArIDEpOworfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC0zMDksNiArMzE0LDcgQEAKIAkubWUJCQk9IE5VTEwsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnR1cGxlX3RvX25sYXR0cgk9IGljbXBfdHVwbGVfdG9fbmxhdHRyLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IGljbXBfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYXR0cl90b190dXBsZQk9IGljbXBfbmxhdHRyX3RvX3R1cGxlLAogCS5ubGFfcG9saWN5CQk9IGljbXBfbmxhX3BvbGljeSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwppbmRleCBhNjVjZjY5Li5mZTY1MTg3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYwpAQCAtNjc5LDcgKzY3OSw3IEBACiBzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZfbmF0X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAluZXQtPmlwdjQubmF0X2J5c291cmNlID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZuZl9uYXRfaHRhYmxlX3NpemUsCi0JCQkJCQkgICAgICAmbmV0LT5pcHY0Lm5hdF92bWFsbG9jZWQpOworCQkJCQkJICAgICAgJm5ldC0+aXB2NC5uYXRfdm1hbGxvY2VkLCAwKTsKIAlpZiAoIW5ldC0+aXB2NC5uYXRfYnlzb3VyY2UpCiAJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9ydWxlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwppbmRleCBhN2ViMDQ3Li42MzQ4YTc5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYwpAQCAtNjEsNyArNjEsNiBAQAogc3RhdGljIHN0cnVjdCB4dF90YWJsZSBuYXRfdGFibGUgPSB7CiAJLm5hbWUJCT0gIm5hdCIsCiAJLnZhbGlkX2hvb2tzCT0gTkFUX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChuYXRfdGFibGUubG9jayksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBBRl9JTkVULAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKaW5kZXggMTgyZjg0NS4uZDk1MjFmNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKQEAgLTEyOTIsNyArMTI5Miw3IEBACiAJLmV4cGVjdF9wb2xpY3kJCT0gJnNubXBfZXhwX3BvbGljeSwKIAkubmFtZQkJCT0gInNubXAiLAogCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoU05NUF9QT1JUKSwKKwkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNihTTk1QX1BPUlQpLAogCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIH07CiAKQEAgLTEzMDIsNyArMTMwMiw3IEBACiAJLmV4cGVjdF9wb2xpY3kJCT0gJnNubXBfZXhwX3BvbGljeSwKIAkubmFtZQkJCT0gInNubXBfdHJhcCIsCiAJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhTTk1QX1RSQVBfUE9SVCksCisJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gY3B1X3RvX2JlMTYoU05NUF9UUkFQX1BPUlQpLAogCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCBlYjYyZTU4Li5jZjBjZGVlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9wcm9jLmMKKysrIGIvbmV0L2lwdjQvcHJvYy5jCkBAIC01NCw4ICs1NCw4IEBACiAJaW50IG9ycGhhbnMsIHNvY2tldHM7CiAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0Jb3JwaGFucyA9IHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgmdGNwX29ycGhhbl9jb3VudCksCi0Jc29ja2V0cyA9IHBlcmNwdV9jb3VudGVyX3N1bV9wb3NpdGl2ZSgmdGNwX3NvY2tldHNfYWxsb2NhdGVkKSwKKwlvcnBoYW5zID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfb3JwaGFuX2NvdW50KTsKKwlzb2NrZXRzID0gcGVyY3B1X2NvdW50ZXJfc3VtX3Bvc2l0aXZlKCZ0Y3Bfc29ja2V0c19hbGxvY2F0ZWQpOwogCWxvY2FsX2JoX2VuYWJsZSgpOwogCiAJc29ja2V0X3NlcV9zaG93KHNlcSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IGRmZjhiYzQuLmY3NzQ2NTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC00OTMsNiArNDkzLDcgQEAKIAogCWlwYy5hZGRyID0gaW5ldC0+c2FkZHI7CiAJaXBjLm9wdCA9IE5VTEw7CisJaXBjLnNodHguZmxhZ3MgPSAwOwogCWlwYy5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOwogCiAJaWYgKG1zZy0+bXNnX2NvbnRyb2xsZW4pIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDk3ZjcxMTUuLjVjYWVlNjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtMTUxLDcgKzE1MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5nYyA9CQkJcnRfZ2FyYmFnZV9jb2xsZWN0LAogCS5jaGVjayA9CQlpcHY0X2RzdF9jaGVjaywKIAkuZGVzdHJveSA9CQlpcHY0X2RzdF9kZXN0cm95LApAQCAtMjY5Niw3ICsyNjk2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwdjRfZHN0X2JsYWNraG9sZV9vcHMgPSB7CiAJLmZhbWlseQkJCT0JQUZfSU5FVCwKLQkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCksCisJLnByb3RvY29sCQk9CWNwdV90b19iZTE2KEVUSF9QX0lQKSwKIAkuZGVzdHJveQkJPQlpcHY0X2RzdF9kZXN0cm95LAogCS5jaGVjawkJCT0JaXB2NF9kc3RfY2hlY2ssCiAJLnVwZGF0ZV9wbXR1CQk9CWlwdjRfcnRfYmxhY2tob2xlX3VwZGF0ZV9wbXR1LApAQCAtMjc3OSw3ICsyNzc5LDggQEAKIAlyZXR1cm4gaXBfcm91dGVfb3V0cHV0X2Zsb3cobmV0LCBycCwgZmxwLCBOVUxMLCAwKTsKIH0KIAotc3RhdGljIGludCBydF9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LAorc3RhdGljIGludCBydF9maWxsX2luZm8oc3RydWN0IG5ldCAqbmV0LAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LAogCQkJaW50IG5vd2FpdCwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXN0cnVjdCBydGFibGUgKnJ0ID0gc2tiLT5ydGFibGU7CkBAIC0yODQ0LDggKzI4NDUsOCBAQAogCQlfX2JlMzIgZHN0ID0gcnQtPnJ0X2RzdDsKIAogCQlpZiAoaXB2NF9pc19tdWx0aWNhc3QoZHN0KSAmJiAhaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZHN0KSAmJgotCQkgICAgSVBWNF9ERVZDT05GX0FMTCgmaW5pdF9uZXQsIE1DX0ZPUldBUkRJTkcpKSB7Ci0JCQlpbnQgZXJyID0gaXBtcl9nZXRfcm91dGUoc2tiLCByLCBub3dhaXQpOworCQkgICAgSVBWNF9ERVZDT05GX0FMTChuZXQsIE1DX0ZPUldBUkRJTkcpKSB7CisJCQlpbnQgZXJyID0gaXBtcl9nZXRfcm91dGUobmV0LCBza2IsIHIsIG5vd2FpdCk7CiAJCQlpZiAoZXJyIDw9IDApIHsKIAkJCQlpZiAoIW5vd2FpdCkgewogCQkJCQlpZiAoZXJyID09IDApCkBAIC0yOTUwLDcgKzI5NTEsNyBAQAogCWlmIChydG0tPnJ0bV9mbGFncyAmIFJUTV9GX05PVElGWSkKIAkJcnQtPnJ0X2ZsYWdzIHw9IFJUQ0ZfTk9USUZZOwogCi0JZXJyID0gcnRfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihpbl9za2IpLnBpZCwgbmxoLT5ubG1zZ19zZXEsCisJZXJyID0gcnRfZmlsbF9pbmZvKG5ldCwgc2tiLCBORVRMSU5LX0NCKGluX3NrYikucGlkLCBubGgtPm5sbXNnX3NlcSwKIAkJCSAgIFJUTV9ORVdST1VURSwgMCwgMCk7CiAJaWYgKGVyciA8PSAwKQogCQlnb3RvIGVycm91dF9mcmVlOwpAQCAtMjk4OCw3ICsyOTg5LDcgQEAKIAkJCWlmIChydF9pc19leHBpcmVkKHJ0KSkKIAkJCQljb250aW51ZTsKIAkJCXNrYi0+ZHN0ID0gZHN0X2Nsb25lKCZydC0+dS5kc3QpOwotCQkJaWYgKHJ0X2ZpbGxfaW5mbyhza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJaWYgKHJ0X2ZpbGxfaW5mbyhuZXQsIHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCiAJCQkJCSBjYi0+bmxoLT5ubG1zZ19zZXEsIFJUTV9ORVdST1VURSwKIAkJCQkJIDEsIE5MTV9GX01VTFRJKSA8PSAwKSB7CiAJCQkJZHN0X3JlbGVhc2UoeGNoZygmc2tiLT5kc3QsIE5VTEwpKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggNzZiMTQ4Yi4uMjQ1MWFlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTY2MSw2ICs2NjEsNDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCB0Y3BfeG1pdF9zaXplX2dvYWwoc3RydWN0IHNvY2sgKnNrLCB1MzIgbXNzX25vdywKKwkJCQkgICAgICAgaW50IGxhcmdlX2FsbG93ZWQpCit7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJdTMyIHhtaXRfc2l6ZV9nb2FsLCBvbGRfc2l6ZV9nb2FsOworCisJeG1pdF9zaXplX2dvYWwgPSBtc3Nfbm93OworCisJaWYgKGxhcmdlX2FsbG93ZWQgJiYgc2tfY2FuX2dzbyhzaykpIHsKKwkJeG1pdF9zaXplX2dvYWwgPSAoKHNrLT5za19nc29fbWF4X3NpemUgLSAxKSAtCisJCQkJICBpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5uZXRfaGVhZGVyX2xlbiAtCisJCQkJICBpbmV0X2NzayhzayktPmljc2tfZXh0X2hkcl9sZW4gLQorCQkJCSAgdHAtPnRjcF9oZWFkZXJfbGVuKTsKKworCQl4bWl0X3NpemVfZ29hbCA9IHRjcF9ib3VuZF90b19oYWxmX3duZCh0cCwgeG1pdF9zaXplX2dvYWwpOworCisJCS8qIFdlIHRyeSBoYXJkIHRvIGF2b2lkIGRpdmlkZXMgaGVyZSAqLworCQlvbGRfc2l6ZV9nb2FsID0gdHAtPnhtaXRfc2l6ZV9nb2FsX3NlZ3MgKiBtc3Nfbm93OworCisJCWlmIChsaWtlbHkob2xkX3NpemVfZ29hbCA8PSB4bWl0X3NpemVfZ29hbCAmJgorCQkJICAgb2xkX3NpemVfZ29hbCArIG1zc19ub3cgPiB4bWl0X3NpemVfZ29hbCkpIHsKKwkJCXhtaXRfc2l6ZV9nb2FsID0gb2xkX3NpemVfZ29hbDsKKwkJfSBlbHNlIHsKKwkJCXRwLT54bWl0X3NpemVfZ29hbF9zZWdzID0geG1pdF9zaXplX2dvYWwgLyBtc3Nfbm93OworCQkJeG1pdF9zaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWxfc2VncyAqIG1zc19ub3c7CisJCX0KKwl9CisKKwlyZXR1cm4gbWF4KHhtaXRfc2l6ZV9nb2FsLCBtc3Nfbm93KTsKK30KKworc3RhdGljIGludCB0Y3Bfc2VuZF9tc3Moc3RydWN0IHNvY2sgKnNrLCBpbnQgKnNpemVfZ29hbCwgaW50IGZsYWdzKQoreworCWludCBtc3Nfbm93OworCisJbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzayk7CisJKnNpemVfZ29hbCA9IHRjcF94bWl0X3NpemVfZ29hbChzaywgbXNzX25vdywgIShmbGFncyAmIE1TR19PT0IpKTsKKworCXJldHVybiBtc3Nfbm93OworfQorCiBzdGF0aWMgc3NpemVfdCBkb190Y3Bfc2VuZHBhZ2VzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IHBvZmZzZXQsCiAJCQkgc2l6ZV90IHBzaXplLCBpbnQgZmxhZ3MpCiB7CkBAIC02NzcsMTMgKzcxOCwxMiBAQAogCiAJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKTsKIAotCW1zc19ub3cgPSB0Y3BfY3VycmVudF9tc3Moc2ssICEoZmxhZ3MmTVNHX09PQikpOwotCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAJY29waWVkID0gMDsKIAogCWVyciA9IC1FUElQRTsKIAlpZiAoc2stPnNrX2VyciB8fCAoc2stPnNrX3NodXRkb3duICYgU0VORF9TSFVURE9XTikpCi0JCWdvdG8gZG9fZXJyb3I7CisJCWdvdG8gb3V0X2VycjsKIAogCXdoaWxlIChwc2l6ZSA+IDApIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKTsKQEAgLTc2MSw4ICs4MDEsNyBAQAogCQlpZiAoKGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgJnRpbWVvKSkgIT0gMCkKIAkJCWdvdG8gZG9fZXJyb3I7CiAKLQkJbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzaywgIShmbGFncyZNU0dfT09CKSk7Ci0JCXNpemVfZ29hbCA9IHRwLT54bWl0X3NpemVfZ29hbDsKKwkJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJnNpemVfZ29hbCwgZmxhZ3MpOwogCX0KIAogb3V0OgpAQCAtODQ0LDggKzg4Myw3IEBACiAJLyogVGhpcyBzaG91bGQgYmUgaW4gcG9sbCAqLwogCWNsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7CiAKLQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAhKGZsYWdzJk1TR19PT0IpKTsKLQlzaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWw7CisJbXNzX25vdyA9IHRjcF9zZW5kX21zcyhzaywgJnNpemVfZ29hbCwgZmxhZ3MpOwogCiAJLyogT2sgY29tbWVuY2Ugc2VuZGluZy4gKi8KIAlpb3ZsZW4gPSBtc2ctPm1zZ19pb3ZsZW47CkBAIC04NTQsNyArODkyLDcgQEAKIAogCWVyciA9IC1FUElQRTsKIAlpZiAoc2stPnNrX2VyciB8fCAoc2stPnNrX3NodXRkb3duICYgU0VORF9TSFVURE9XTikpCi0JCWdvdG8gZG9fZXJyb3I7CisJCWdvdG8gb3V0X2VycjsKIAogCXdoaWxlICgtLWlvdmxlbiA+PSAwKSB7CiAJCWludCBzZWdsZW4gPSBpb3YtPmlvdl9sZW47CkBAIC0xMDA3LDggKzEwNDUsNyBAQAogCQkJaWYgKChlcnIgPSBza19zdHJlYW1fd2FpdF9tZW1vcnkoc2ssICZ0aW1lbykpICE9IDApCiAJCQkJZ290byBkb19lcnJvcjsKIAotCQkJbXNzX25vdyA9IHRjcF9jdXJyZW50X21zcyhzaywgIShmbGFncyZNU0dfT09CKSk7Ci0JCQlzaXplX2dvYWwgPSB0cC0+eG1pdF9zaXplX2dvYWw7CisJCQltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAJCX0KIAl9CiAKQEAgLTEwNDUsOCArMTA4Miw3IEBACiAgKi8KIAogc3RhdGljIGludCB0Y3BfcmVjdl91cmcoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvLAotCQkJc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLCBpbnQgZmxhZ3MsCi0JCQlpbnQgKmFkZHJfbGVuKQorCQkJc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAKQEAgLTE2NjEsNyArMTY5Nyw3IEBACiAJcmV0dXJuIGVycjsKIAogcmVjdl91cmc6Ci0JZXJyID0gdGNwX3JlY3ZfdXJnKHNrLCB0aW1lbywgbXNnLCBsZW4sIGZsYWdzLCBhZGRyX2xlbik7CisJZXJyID0gdGNwX3JlY3ZfdXJnKHNrLCB0aW1lbywgbXNnLCBsZW4sIGZsYWdzKTsKIAlnb3RvIG91dDsKIH0KIApAQCAtMjQ3OCwyMyArMjUxNCwyMyBAQAogCXN0cnVjdCB0Y3BoZHIgKnRoMjsKIAl1bnNpZ25lZCBpbnQgdGhsZW47CiAJdW5zaWduZWQgaW50IGZsYWdzOwotCXVuc2lnbmVkIGludCB0b3RhbDsKIAl1bnNpZ25lZCBpbnQgbXNzID0gMTsKIAlpbnQgZmx1c2ggPSAxOworCWludCBpOwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCp0aCkpKQorCXRoID0gc2tiX2dyb19oZWFkZXIoc2tiLCBzaXplb2YoKnRoKSk7CisJaWYgKHVubGlrZWx5KCF0aCkpCiAJCWdvdG8gb3V0OwogCi0JdGggPSB0Y3BfaGRyKHNrYik7CiAJdGhsZW4gPSB0aC0+ZG9mZiAqIDQ7CiAJaWYgKHRobGVuIDwgc2l6ZW9mKCp0aCkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgdGhsZW4pKQorCXRoID0gc2tiX2dyb19oZWFkZXIoc2tiLCB0aGxlbik7CisJaWYgKHVubGlrZWx5KCF0aCkpCiAJCWdvdG8gb3V0OwogCi0JdGggPSB0Y3BfaGRyKHNrYik7Ci0JX19za2JfcHVsbChza2IsIHRobGVuKTsKKwlza2JfZ3JvX3B1bGwoc2tiLCB0aGxlbik7CiAKIAlmbGFncyA9IHRjcF9mbGFnX3dvcmQodGgpOwogCkBAIC0yNTA0LDcgKzI1NDAsNyBAQAogCiAJCXRoMiA9IHRjcF9oZHIocCk7CiAKLQkJaWYgKHRoLT5zb3VyY2UgIT0gdGgyLT5zb3VyY2UgfHwgdGgtPmRlc3QgIT0gdGgyLT5kZXN0KSB7CisJCWlmICgodGgtPnNvdXJjZSBeIHRoMi0+c291cmNlKSB8ICh0aC0+ZGVzdCBeIHRoMi0+ZGVzdCkpIHsKIAkJCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSAwOwogCQkJY29udGludWU7CiAJCX0KQEAgLTI1MTksMTQgKzI1NTUsMTUgQEAKIAlmbHVzaCB8PSBmbGFncyAmIFRDUF9GTEFHX0NXUjsKIAlmbHVzaCB8PSAoZmxhZ3MgXiB0Y3BfZmxhZ193b3JkKHRoMikpICYKIAkJICB+KFRDUF9GTEFHX0NXUiB8IFRDUF9GTEFHX0ZJTiB8IFRDUF9GTEFHX1BTSCk7Ci0JZmx1c2ggfD0gdGgtPmFja19zZXEgIT0gdGgyLT5hY2tfc2VxIHx8IHRoLT53aW5kb3cgIT0gdGgyLT53aW5kb3c7Ci0JZmx1c2ggfD0gbWVtY21wKHRoICsgMSwgdGgyICsgMSwgdGhsZW4gLSBzaXplb2YoKnRoKSk7CisJZmx1c2ggfD0gKHRoLT5hY2tfc2VxIF4gdGgyLT5hY2tfc2VxKSB8ICh0aC0+d2luZG93IF4gdGgyLT53aW5kb3cpOworCWZvciAoaSA9IHNpemVvZigqdGgpOyAhZmx1c2ggJiYgaSA8IHRobGVuOyBpICs9IDQpCisJCWZsdXNoIHw9ICoodTMyICopKCh1OCAqKXRoICsgaSkgXgorCQkJICoodTMyICopKCh1OCAqKXRoMiArIGkpOwogCi0JdG90YWwgPSBwLT5sZW47CiAJbXNzID0gc2tiX3NoaW5mbyhwKS0+Z3NvX3NpemU7CiAKLQlmbHVzaCB8PSBza2ItPmxlbiA+IG1zcyB8fCBza2ItPmxlbiA8PSAwOwotCWZsdXNoIHw9IG50b2hsKHRoMi0+c2VxKSArIHRvdGFsICE9IG50b2hsKHRoLT5zZXEpOworCWZsdXNoIHw9IChza2JfZ3JvX2xlbihza2IpID4gbXNzKSB8ICFza2JfZ3JvX2xlbihza2IpOworCWZsdXNoIHw9IChudG9obCh0aDItPnNlcSkgKyBza2JfZ3JvX2xlbihwKSkgXiBudG9obCh0aC0+c2VxKTsKIAogCWlmIChmbHVzaCB8fCBza2JfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiKSkgewogCQltc3MgPSAxOwpAQCAtMjUzOCw3ICsyNTc1LDcgQEAKIAl0Y3BfZmxhZ193b3JkKHRoMikgfD0gZmxhZ3MgJiAoVENQX0ZMQUdfRklOIHwgVENQX0ZMQUdfUFNIKTsKIAogb3V0X2NoZWNrX2ZpbmFsOgotCWZsdXNoID0gc2tiLT5sZW4gPCBtc3M7CisJZmx1c2ggPSBza2JfZ3JvX2xlbihza2IpIDwgbXNzOwogCWZsdXNoIHw9IGZsYWdzICYgKFRDUF9GTEFHX1VSRyB8IFRDUF9GTEFHX1BTSCB8IFRDUF9GTEFHX1JTVCB8CiAJCQkgIFRDUF9GTEFHX1NZTiB8IFRDUF9GTEFHX0ZJTik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9iaWMuYyBiL25ldC9pcHY0L3RjcF9iaWMuYwppbmRleCA3ZWI3NjM2Li4zYjUzZmQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfYmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2JpYy5jCkBAIC0xNDksMTYgKzE0OSw3IEBACiAJCXRjcF9zbG93X3N0YXJ0KHRwKTsKIAllbHNlIHsKIAkJYmljdGNwX3VwZGF0ZShjYSwgdHAtPnNuZF9jd25kKTsKLQotCQkvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LgotCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyB0cC0+c25kX2N3bmQgKz0gMSAvIHRwLT5zbmRfY3duZAotCQkgKi8KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gY2EtPmNudCkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9IGVsc2UKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIGNhLT5jbnQpOwogCX0KIAogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggNGVjNWI0ZS4uZTkyYmViOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYworKysgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0zMzYsNiArMzM2LDE5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3Bfc2xvd19zdGFydCk7CiAKKy8qIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kIChvciBhbHRlcm5hdGl2ZSB3KSAqLwordm9pZCB0Y3BfY29uZ19hdm9pZF9haShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgdykKK3sKKwlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB3KSB7CisJCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCisJCQl0cC0+c25kX2N3bmQrKzsKKwkJdHAtPnNuZF9jd25kX2NudCA9IDA7CisJfSBlbHNlIHsKKwkJdHAtPnNuZF9jd25kX2NudCsrOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRjcF9jb25nX2F2b2lkX2FpKTsKKwogLyoKICAqIFRDUCBSZW5vIGNvbmdlc3Rpb24gY29udHJvbAogICogVGhpcyBpcyBzcGVjaWFsIGNhc2UgdXNlZCBmb3IgZmFsbGJhY2sgYXMgd2VsbC4KQEAgLTM2NSwxMyArMzc4LDcgQEAKIAkJCQl0cC0+c25kX2N3bmQrKzsKIAkJfQogCX0gZWxzZSB7Ci0JCS8qIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kICovCi0JCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgewotCQkJaWYgKHRwLT5zbmRfY3duZCA8IHRwLT5zbmRfY3duZF9jbGFtcCkKLQkJCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9IGVsc2UKLQkJCXRwLT5zbmRfY3duZF9jbnQrKzsKKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Jlbm9fY29uZ19hdm9pZCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY3ViaWMuYyBiL25ldC9pcHY0L3RjcF9jdWJpYy5jCmluZGV4IGVlNDY3ZWMuLjcxZDVmMmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9jdWJpYy5jCisrKyBiL25ldC9pcHY0L3RjcF9jdWJpYy5jCkBAIC0yOTQsMTYgKzI5NCw3IEBACiAJCXRjcF9zbG93X3N0YXJ0KHRwKTsKIAl9IGVsc2UgewogCQliaWN0Y3BfdXBkYXRlKGNhLCB0cC0+c25kX2N3bmQpOwotCi0JCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuCi0JCSAqIEluIHRoZW9yeSB0aGlzIGlzIHRwLT5zbmRfY3duZCArPSAxIC8gdHAtPnNuZF9jd25kCi0JCSAqLwotCQlpZiAodHAtPnNuZF9jd25kX2NudCA+PSBjYS0+Y250KSB7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0gZWxzZQotCQkJdHAtPnNuZF9jd25kX2NudCsrOworCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgY2EtPmNudCk7CiAJfQogCiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaHRjcC5jIGIvbmV0L2lwdjQvdGNwX2h0Y3AuYwppbmRleCA5Mzc1NDliLi4yNmQ1YzdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaHRjcC5jCisrKyBiL25ldC9pcHY0L3RjcF9odGNwLmMKQEAgLTExNSw4ICsxMTUsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBhY2hpZXZlZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9ucyAqLwotCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlICE9IFRDUF9DQV9PcGVuICYmCi0JICAgIGljc2stPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX0Rpc29yZGVyKSB7CisJaWYgKCEoKDEgPDwgaWNzay0+aWNza19jYV9zdGF0ZSkgJiAoVENQRl9DQV9PcGVuIHwgVENQRl9DQV9EaXNvcmRlcikpKSB7CiAJCWNhLT5wYWNrZXRjb3VudCA9IDA7CiAJCWNhLT5sYXN0dGltZSA9IG5vdzsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCBjMjg5NzZhNy4uMmJjOGUyNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CkBAIC0xMTc4LDEwICsxMTc5LDE4IEBACiAJCWlmICghKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkICYgVENQQ0JfU0FDS0VEX1JFVFJBTlMpKQogCQkJY29udGludWU7CiAKLQkJaWYgKGFmdGVyKHJlY2VpdmVkX3VwdG8sIGFja19zZXEpICYmCi0JCSAgICAodGNwX2lzX2ZhY2sodHApIHx8Ci0JCSAgICAgIWJlZm9yZShyZWNlaXZlZF91cHRvLAotCQkJICAgICBhY2tfc2VxICsgdHAtPnJlb3JkZXJpbmcgKiB0cC0+bXNzX2NhY2hlKSkpIHsKKwkJLyogVE9ETzogV2Ugd291bGQgbGlrZSB0byBnZXQgcmlkIG9mIHRjcF9pc19mYWNrKHRwKSBvbmx5CisJCSAqIGNvbnN0cmFpbnQgaGVyZSAoc2VlIGFib3ZlKSBidXQgZmlndXJpbmcgb3V0IHRoYXQgYXQKKwkJICogbGVhc3QgdHAtPnJlb3JkZXJpbmcgU0FDSyBibG9ja3MgcmVzaWRlIGJldHdlZW4gYWNrX3NlcQorCQkgKiBhbmQgcmVjZWl2ZWRfdXB0byBpcyBub3QgZWFzeSB0YXNrIHRvIGRvIGNoZWFwbHkgd2l0aAorCQkgKiB0aGUgYXZhaWxhYmxlIGRhdGFzdHJ1Y3R1cmVzLgorCQkgKgorCQkgKiBXaGV0aGVyIEZBQ0sgc2hvdWxkIGNoZWNrIGhlcmUgZm9yIHRwLT5yZW9yZGVyaW5nIHNlZ3MKKwkJICogaW4tYmV0d2VlbiBvbmUgY291bGQgYXJndWUgZm9yIGVpdGhlciB3YXkgKGl0IHdvdWxkIGJlCisJCSAqIHJhdGhlciBzaW1wbGUgdG8gaW1wbGVtZW50IGFzIHdlIGNvdWxkIGNvdW50IGZhY2tfY291bnQKKwkJICogZHVyaW5nIHRoZSB3YWxrIGFuZCBkbyB0cC0+ZmFja2V0c19vdXQgLSBmYWNrX2NvdW50KS4KKwkJICovCisJCWlmIChhZnRlcihyZWNlaXZlZF91cHRvLCBhY2tfc2VxKSkgewogCQkJVENQX1NLQl9DQihza2IpLT5zYWNrZWQgJj0gflRDUENCX1NBQ0tFRF9SRVRSQU5TOwogCQkJdHAtPnJldHJhbnNfb3V0IC09IHRjcF9za2JfcGNvdW50KHNrYik7CiAKQEAgLTE3OTQsMTEgKzE4MDMsNyBAQAogCWZvciAoaSA9IHVzZWRfc2Fja3MgLSAxOyBpID4gMDsgaS0tKSB7CiAJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKIAkJCWlmIChhZnRlcihzcFtqXS5zdGFydF9zZXEsIHNwW2ogKyAxXS5zdGFydF9zZXEpKSB7Ci0JCQkJc3RydWN0IHRjcF9zYWNrX2Jsb2NrIHRtcDsKLQotCQkJCXRtcCA9IHNwW2pdOwotCQkJCXNwW2pdID0gc3BbaiArIDFdOwotCQkJCXNwW2ogKyAxXSA9IHRtcDsKKwkJCQlzd2FwKHNwW2pdLCBzcFtqICsgMV0pOwogCiAJCQkJLyogVHJhY2sgd2hlcmUgdGhlIGZpcnN0IFNBQ0sgYmxvY2sgZ29lcyB0byAqLwogCQkJCWlmIChqID09IGZpcnN0X3NhY2tfaW5kZXgpCkBAIC0yNDUzLDYgKzI0NTgsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogTmV3IGhldXJpc3RpY3M6IGl0IGlzIHBvc3NpYmxlIG9ubHkgYWZ0ZXIgd2Ugc3dpdGNoZWQgdG8gcmVzdGFydCB0aW1lcgorICogZWFjaCB0aW1lIHdoZW4gc29tZXRoaW5nIGlzIEFDS2VkLiBIZW5jZSwgd2UgY2FuIGRldGVjdCB0aW1lZCBvdXQgcGFja2V0cworICogZHVyaW5nIGZhc3QgcmV0cmFuc21pdCB3aXRob3V0IGZhbGxpbmcgdG8gc2xvdyBzdGFydC4KKyAqCisgKiBVc2VmdWxuZXNzIG9mIHRoaXMgYXMgaXMgdmVyeSBxdWVzdGlvbmFibGUsIHNpbmNlIHdlIHNob3VsZCBrbm93IHdoaWNoIG9mCisgKiB0aGUgc2VnbWVudHMgaXMgdGhlIG5leHQgdG8gdGltZW91dCB3aGljaCBpcyByZWxhdGl2ZWx5IGV4cGVuc2l2ZSB0byBmaW5kCisgKiBpbiBnZW5lcmFsIGNhc2UgdW5sZXNzIHdlIGFkZCBzb21lIGRhdGEgc3RydWN0dXJlIGp1c3QgZm9yIHRoYXQuIFRoZQorICogY3VycmVudCBhcHByb2FjaCBjZXJ0YWlubHkgd29uJ3QgZmluZCB0aGUgcmlnaHQgb25lIHRvbyBvZnRlbiBhbmQgd2hlbiBpdAorICogZmluYWxseSBkb2VzIGZpbmQgX3NvbWV0aGluZ18gaXQgdXN1YWxseSBtYXJrcyBsYXJnZSBwYXJ0IG9mIHRoZSB3aW5kb3cKKyAqIHJpZ2h0IGF3YXkgKGJlY2F1c2UgYSByZXRyYW5zbWlzc2lvbiB3aXRoIGEgbGFyZ2VyIHRpbWVzdGFtcCBibG9ja3MgdGhlCisgKiBsb29wIGZyb20gYWR2YW5jaW5nKS4gLWlqCisgKi8KK3N0YXRpYyB2b2lkIHRjcF90aW1lb3V0X3NrYnMoc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIXRjcF9pc19mYWNrKHRwKSB8fCAhdGNwX2hlYWRfdGltZWRvdXQoc2spKQorCQlyZXR1cm47CisKKwlza2IgPSB0cC0+c2NvcmVib2FyZF9za2JfaGludDsKKwlpZiAodHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPT0gTlVMTCkKKwkJc2tiID0gdGNwX3dyaXRlX3F1ZXVlX2hlYWQoc2spOworCisJdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tKHNrYiwgc2spIHsKKwkJaWYgKHNrYiA9PSB0Y3Bfc2VuZF9oZWFkKHNrKSkKKwkJCWJyZWFrOworCQlpZiAoIXRjcF9za2JfdGltZWRvdXQoc2ssIHNrYikpCisJCQlicmVhazsKKworCQl0Y3Bfc2tiX21hcmtfbG9zdCh0cCwgc2tiKTsKKwl9CisKKwl0cC0+c2NvcmVib2FyZF9za2JfaGludCA9IHNrYjsKKworCXRjcF92ZXJpZnlfbGVmdF9vdXQodHApOworfQorCiAvKiBNYXJrIGhlYWQgb2YgcXVldWUgdXAgYXMgbG9zdC4gV2l0aCBSRkMzNTE3IFNBQ0ssIHRoZSBwYWNrZXRzIGlzCiAgKiBpcyBhZ2FpbnN0IHNhY2tlZCAiY250Iiwgb3RoZXJ3aXNlIGl0J3MgYWdhaW5zdCBmYWNrZWQgImNudCIKICAqLwpAQCAtMjUyNSwzMCArMjU2OCw3IEBACiAJCXRjcF9tYXJrX2hlYWRfbG9zdChzaywgc2Fja2VkX3VwdG8pOwogCX0KIAotCS8qIE5ldyBoZXVyaXN0aWNzOiBpdCBpcyBwb3NzaWJsZSBvbmx5IGFmdGVyIHdlIHN3aXRjaGVkCi0JICogdG8gcmVzdGFydCB0aW1lciBlYWNoIHRpbWUgd2hlbiBzb21ldGhpbmcgaXMgQUNLZWQuCi0JICogSGVuY2UsIHdlIGNhbiBkZXRlY3QgdGltZWQgb3V0IHBhY2tldHMgZHVyaW5nIGZhc3QKLQkgKiByZXRyYW5zbWl0IHdpdGhvdXQgZmFsbGluZyB0byBzbG93IHN0YXJ0LgotCSAqLwotCWlmICh0Y3BfaXNfZmFjayh0cCkgJiYgdGNwX2hlYWRfdGltZWRvdXQoc2spKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkJc2tiID0gdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPyB0cC0+c2NvcmVib2FyZF9za2JfaGludAotCQkJOiB0Y3Bfd3JpdGVfcXVldWVfaGVhZChzayk7Ci0KLQkJdGNwX2Zvcl93cml0ZV9xdWV1ZV9mcm9tKHNrYiwgc2spIHsKLQkJCWlmIChza2IgPT0gdGNwX3NlbmRfaGVhZChzaykpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoIXRjcF9za2JfdGltZWRvdXQoc2ssIHNrYikpCi0JCQkJYnJlYWs7Ci0KLQkJCXRjcF9za2JfbWFya19sb3N0KHRwLCBza2IpOwotCQl9Ci0KLQkJdHAtPnNjb3JlYm9hcmRfc2tiX2hpbnQgPSBza2I7Ci0KLQkJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7Ci0JfQorCXRjcF90aW1lb3V0X3NrYnMoc2spOwogfQogCiAvKiBDV05EIG1vZGVyYXRpb24sIHByZXZlbnRpbmcgYnVyc3RzIGR1ZSB0byB0b28gYmlnIEFDS3MKQEAgLTI4MTMsNyArMjgzMyw3IEBACiAJaWNzay0+aWNza19tdHVwLnByb2JlX3NpemUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCB0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIHRjcF9tdHVwX3Byb2JlX3N1Y2Nlc3Moc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKQEAgLTI4NDEsNyArMjg2MSw3IEBACiAJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgaW50IG1zcyA9IHRjcF9jdXJyZW50X21zcyhzaywgMCk7CisJdW5zaWduZWQgaW50IG1zcyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAJdTMyIHByaW9yX2xvc3QgPSB0cC0+bG9zdF9vdXQ7CiAKIAl0Y3BfZm9yX3dyaXRlX3F1ZXVlKHNrYiwgc2spIHsKQEAgLTMxNzgsNyArMzE5OCw2IEBACiAKIAl3aGlsZSAoKHNrYiA9IHRjcF93cml0ZV9xdWV1ZV9oZWFkKHNrKSkgJiYgc2tiICE9IHRjcF9zZW5kX2hlYWQoc2spKSB7CiAJCXN0cnVjdCB0Y3Bfc2tiX2NiICpzY2IgPSBUQ1BfU0tCX0NCKHNrYik7Ci0JCXUzMiBlbmRfc2VxOwogCQl1MzIgYWNrZWRfcGNvdW50OwogCQl1OCBzYWNrZWQgPSBzY2ItPnNhY2tlZDsKIApAQCAtMzE5MywxNiArMzIxMiw4IEBACiAJCQkJYnJlYWs7CiAKIAkJCWZ1bGx5X2Fja2VkID0gMDsKLQkJCWVuZF9zZXEgPSB0cC0+c25kX3VuYTsKIAkJfSBlbHNlIHsKIAkJCWFja2VkX3Bjb3VudCA9IHRjcF9za2JfcGNvdW50KHNrYik7Ci0JCQllbmRfc2VxID0gc2NiLT5lbmRfc2VxOwotCQl9Ci0KLQkJLyogTVRVIHByb2JpbmcgY2hlY2tzICovCi0JCWlmIChmdWxseV9hY2tlZCAmJiBpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSAmJgotCQkgICAgIWFmdGVyKHRwLT5tdHVfcHJvYmUucHJvYmVfc2VxX2VuZCwgc2NiLT5lbmRfc2VxKSkgewotCQkJdGNwX210dXBfcHJvYmVfc3VjY2Vzcyhzaywgc2tiKTsKIAkJfQogCiAJCWlmIChzYWNrZWQgJiBUQ1BDQl9SRVRSQU5TKSB7CkBAIC0zMjY3LDI0ICszMjc4LDI2IEBACiAJCWNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKmNhX29wcwogCQkJPSBpbmV0X2NzayhzayktPmljc2tfY2Ffb3BzOwogCisJCWlmICh1bmxpa2VseShpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSAmJgorCQkJICAgICAhYWZ0ZXIodHAtPm10dV9wcm9iZS5wcm9iZV9zZXFfZW5kLCB0cC0+c25kX3VuYSkpKSB7CisJCQl0Y3BfbXR1cF9wcm9iZV9zdWNjZXNzKHNrKTsKKwkJfQorCiAJCXRjcF9hY2tfdXBkYXRlX3J0dChzaywgZmxhZywgc2VxX3J0dCk7CiAJCXRjcF9yZWFybV9ydG8oc2spOwogCiAJCWlmICh0Y3BfaXNfcmVubyh0cCkpIHsKIAkJCXRjcF9yZW1vdmVfcmVub19zYWNrcyhzaywgcGt0c19hY2tlZCk7CiAJCX0gZWxzZSB7CisJCQlpbnQgZGVsdGE7CisKIAkJCS8qIE5vbi1yZXRyYW5zbWl0dGVkIGhvbGUgZ290IGZpbGxlZD8gVGhhdCdzIHJlb3JkZXJpbmcgKi8KIAkJCWlmIChyZW9yZCA8IHByaW9yX2ZhY2tldHMpCiAJCQkJdGNwX3VwZGF0ZV9yZW9yZGVyaW5nKHNrLCB0cC0+ZmFja2V0c19vdXQgLSByZW9yZCwgMCk7CiAKLQkJCS8qIE5vIG5lZWQgdG8gY2FyZSBmb3IgdW5kZXJmbG93cyBoZXJlIGJlY2F1c2UKLQkJCSAqIHRoZSBsb3N0X3NrYl9oaW50IGdldHMgTlVMTGVkIGlmIHdlJ3JlIHBhc3QgaXQKLQkJCSAqIChvciBzb21ldGhpbmcgbm9uLXRyaXZpYWwgaGFwcGVuZWQpCi0JCQkgKi8KLQkJCWlmICh0Y3BfaXNfZmFjayh0cCkpCi0JCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gcGt0c19hY2tlZDsKLQkJCWVsc2UKLQkJCQl0cC0+bG9zdF9jbnRfaGludCAtPSBwcmlvcl9zYWNrZWQgLSB0cC0+c2Fja2VkX291dDsKKwkJCWRlbHRhID0gdGNwX2lzX2ZhY2sodHApID8gcGt0c19hY2tlZCA6CisJCQkJCQkgIHByaW9yX3NhY2tlZCAtIHRwLT5zYWNrZWRfb3V0OworCQkJdHAtPmxvc3RfY250X2hpbnQgLT0gbWluKHRwLT5sb3N0X2NudF9oaW50LCBkZWx0YSk7CiAJCX0KIAogCQl0cC0+ZmFja2V0c19vdXQgLT0gbWluKHBrdHNfYWNrZWQsIHRwLT5mYWNrZXRzX291dCk7CkBAIC0zMzk2LDcgKzM0MDksNyBAQAogCiAJaWYgKHRjcF9tYXlfdXBkYXRlX3dpbmRvdyh0cCwgYWNrLCBhY2tfc2VxLCBud2luKSkgewogCQlmbGFnIHw9IEZMQUdfV0lOX1VQREFURTsKLQkJdGNwX3VwZGF0ZV93bCh0cCwgYWNrLCBhY2tfc2VxKTsKKwkJdGNwX3VwZGF0ZV93bCh0cCwgYWNrX3NlcSk7CiAKIAkJaWYgKHRwLT5zbmRfd25kICE9IG53aW4pIHsKIAkJCXRwLT5zbmRfd25kID0gbndpbjsKQEAgLTM1NzIsMTUgKzM1ODUsMTggQEAKIAlpbnQgcHJpb3JfcGFja2V0czsKIAlpbnQgZnJ0b19jd25kID0gMDsKIAotCS8qIElmIHRoZSBhY2sgaXMgbmV3ZXIgdGhhbiBzZW50IG9yIG9sZGVyIHRoYW4gcHJldmlvdXMgYWNrcworCS8qIElmIHRoZSBhY2sgaXMgb2xkZXIgdGhhbiBwcmV2aW91cyBhY2tzCiAJICogdGhlbiB3ZSBjYW4gcHJvYmFibHkgaWdub3JlIGl0LgogCSAqLwotCWlmIChhZnRlcihhY2ssIHRwLT5zbmRfbnh0KSkKLQkJZ290byB1bmludGVyZXN0aW5nX2FjazsKLQogCWlmIChiZWZvcmUoYWNrLCBwcmlvcl9zbmRfdW5hKSkKIAkJZ290byBvbGRfYWNrOwogCisJLyogSWYgdGhlIGFjayBpbmNsdWRlcyBkYXRhIHdlIGhhdmVuJ3Qgc2VudCB5ZXQsIGRpc2NhcmQKKwkgKiB0aGlzIHNlZ21lbnQgKFJGQzc5MyBTZWN0aW9uIDMuOSkuCisJICovCisJaWYgKGFmdGVyKGFjaywgdHAtPnNuZF9ueHQpKQorCQlnb3RvIGludmFsaWRfYWNrOworCiAJaWYgKGFmdGVyKGFjaywgcHJpb3Jfc25kX3VuYSkpCiAJCWZsYWcgfD0gRkxBR19TTkRfVU5BX0FEVkFOQ0VEOwogCkBAIC0zNjAxLDcgKzM2MTcsNyBAQAogCQkgKiBObyBtb3JlIGNoZWNrcyBhcmUgcmVxdWlyZWQuCiAJCSAqIE5vdGUsIHdlIHVzZSB0aGUgZmFjdCB0aGF0IFNORC5VTkE+PVNORC5XTDIuCiAJCSAqLwotCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2ssIGFja19zZXEpOworCQl0Y3BfdXBkYXRlX3dsKHRwLCBhY2tfc2VxKTsKIAkJdHAtPnNuZF91bmEgPSBhY2s7CiAJCWZsYWcgfD0gRkxBR19XSU5fVVBEQVRFOwogCkBAIC0zNjcwLDYgKzM2ODYsMTAgQEAKIAkJdGNwX2Fja19wcm9iZShzayk7CiAJcmV0dXJuIDE7CiAKK2ludmFsaWRfYWNrOgorCVNPQ0tfREVCVUcoc2ssICJBY2sgJXUgYWZ0ZXIgJXU6JXVcbiIsIGFjaywgdHAtPnNuZF91bmEsIHRwLT5zbmRfbnh0KTsKKwlyZXR1cm4gLTE7CisKIG9sZF9hY2s6CiAJaWYgKFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkKSB7CiAJCXRjcF9zYWNrdGFnX3dyaXRlX3F1ZXVlKHNrLCBza2IsIHByaW9yX3NuZF91bmEpOwpAQCAtMzY3Nyw4ICszNjk3LDcgQEAKIAkJCXRjcF90cnlfa2VlcF9vcGVuKHNrKTsKIAl9CiAKLXVuaW50ZXJlc3RpbmdfYWNrOgotCVNPQ0tfREVCVUcoc2ssICJBY2sgJXUgb3V0IG9mICV1OiV1XG4iLCBhY2ssIHRwLT5zbmRfdW5hLCB0cC0+c25kX254dCk7CisJU09DS19ERUJVRyhzaywgIkFjayAldSBiZWZvcmUgJXU6JXVcbiIsIGFjaywgdHAtPnNuZF91bmEsIHRwLT5zbmRfbnh0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzg2Niw4ICszODg1LDcgQEAKIAkJICogTm90IG9ubHksIGFsc28gaXQgb2NjdXJzIGZvciBleHBpcmVkIHRpbWVzdGFtcHMuCiAJCSAqLwogCi0JCWlmICgoczMyKSh0cC0+cnhfb3B0LnJjdl90c3ZhbCAtIHRwLT5yeF9vcHQudHNfcmVjZW50KSA+PSAwIHx8Ci0JCSAgIGdldF9zZWNvbmRzKCkgPj0gdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMpCisJCWlmICh0Y3BfcGF3c19jaGVjaygmdHAtPnJ4X29wdCwgMCkpCiAJCQl0Y3Bfc3RvcmVfdHNfcmVjZW50KHRwKTsKIAl9CiB9CkBAIC0zOTE5LDkgKzM5MzcsOSBAQAogCQkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY29uc3Qgc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0JcmV0dXJuICgoczMyKSh0cC0+cnhfb3B0LnRzX3JlY2VudCAtIHRwLT5yeF9vcHQucmN2X3RzdmFsKSA+IFRDUF9QQVdTX1dJTkRPVyAmJgotCQlnZXRfc2Vjb25kcygpIDwgdHAtPnJ4X29wdC50c19yZWNlbnRfc3RhbXAgKyBUQ1BfUEFXU18yNERBWVMgJiYKLQkJIXRjcF9kaXNvcmRlcmVkX2Fjayhzaywgc2tiKSk7CisKKwlyZXR1cm4gIXRjcF9wYXdzX2NoZWNrKCZ0cC0+cnhfb3B0LCBUQ1BfUEFXU19XSU5ET1cpICYmCisJICAgICAgICF0Y3BfZGlzb3JkZXJlZF9hY2soc2ssIHNrYik7CiB9CiAKIC8qIENoZWNrIHNlZ21lbnQgc2VxdWVuY2UgbnVtYmVyIGZvciB2YWxpZGl0eS4KQEAgLTQwNzksNyArNDA5Nyw2IEBACiAJCXRwLT5yeF9vcHQuZHNhY2sgPSAxOwogCQl0cC0+ZHVwbGljYXRlX3NhY2tbMF0uc3RhcnRfc2VxID0gc2VxOwogCQl0cC0+ZHVwbGljYXRlX3NhY2tbMF0uZW5kX3NlcSA9IGVuZF9zZXE7Ci0JCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3MgKyAxOwogCX0KIH0KIApAQCAtNDEzNCw4ICs0MTUxLDYgQEAKIAkJCSAqIERlY3JlYXNlIG51bV9zYWNrcy4KIAkJCSAqLwogCQkJdHAtPnJ4X29wdC5udW1fc2Fja3MtLTsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gdHAtPnJ4X29wdC5udW1fc2Fja3MgKwotCQkJCQkgICAgICAgdHAtPnJ4X29wdC5kc2FjazsKIAkJCWZvciAoaSA9IHRoaXNfc2FjazsgaSA8IHRwLT5yeF9vcHQubnVtX3NhY2tzOyBpKyspCiAJCQkJc3BbaV0gPSBzcFtpICsgMV07CiAJCQljb250aW51ZTsKQEAgLTQxNDQsMjAgKzQxNTksNiBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRjcF9zYWNrX3N3YXAoc3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzYWNrMSwKLQkJCQkgc3RydWN0IHRjcF9zYWNrX2Jsb2NrICpzYWNrMikKLXsKLQlfX3UzMiB0bXA7Ci0KLQl0bXAgPSBzYWNrMS0+c3RhcnRfc2VxOwotCXNhY2sxLT5zdGFydF9zZXEgPSBzYWNrMi0+c3RhcnRfc2VxOwotCXNhY2syLT5zdGFydF9zZXEgPSB0bXA7Ci0KLQl0bXAgPSBzYWNrMS0+ZW5kX3NlcTsKLQlzYWNrMS0+ZW5kX3NlcSA9IHNhY2syLT5lbmRfc2VxOwotCXNhY2syLT5lbmRfc2VxID0gdG1wOwotfQotCiBzdGF0aWMgdm9pZCB0Y3Bfc2Fja19uZXdfb2ZvX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHUzMiBzZXEsIHUzMiBlbmRfc2VxKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwpAQCAtNDE3Miw3ICs0MTczLDcgQEAKIAkJaWYgKHRjcF9zYWNrX2V4dGVuZChzcCwgc2VxLCBlbmRfc2VxKSkgewogCQkJLyogUm90YXRlIHRoaXNfc2FjayB0byB0aGUgZmlyc3Qgb25lLiAqLwogCQkJZm9yICg7IHRoaXNfc2FjayA+IDA7IHRoaXNfc2Fjay0tLCBzcC0tKQotCQkJCXRjcF9zYWNrX3N3YXAoc3AsIHNwIC0gMSk7CisJCQkJc3dhcCgqc3AsICooc3AgLSAxKSk7CiAJCQlpZiAoY3VyX3NhY2tzID4gMSkKIAkJCQl0Y3Bfc2Fja19tYXliZV9jb2FsZXNjZSh0cCk7CiAJCQlyZXR1cm47CkBAIC00MTk4LDcgKzQxOTksNiBAQAogCXNwLT5zdGFydF9zZXEgPSBzZXE7CiAJc3AtPmVuZF9zZXEgPSBlbmRfc2VxOwogCXRwLT5yeF9vcHQubnVtX3NhY2tzKys7Ci0JdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArIHRwLT5yeF9vcHQuZHNhY2s7CiB9CiAKIC8qIFJDVi5OWFQgYWR2YW5jZXMsIHNvbWUgU0FDS3Mgc2hvdWxkIGJlIGVhdGVuLiAqLwpAQCAtNDIxMiw3ICs0MjEyLDYgQEAKIAkvKiBFbXB0eSBvZm8gcXVldWUsIGhlbmNlLCBhbGwgdGhlIFNBQ0tzIGFyZSBlYXRlbi4gQ2xlYXIuICovCiAJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmdHAtPm91dF9vZl9vcmRlcl9xdWV1ZSkpIHsKIAkJdHAtPnJ4X29wdC5udW1fc2Fja3MgPSAwOwotCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQuZHNhY2s7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQyMzMsMTEgKzQyMzIsNyBAQAogCQl0aGlzX3NhY2srKzsKIAkJc3ArKzsKIAl9Ci0JaWYgKG51bV9zYWNrcyAhPSB0cC0+cnhfb3B0Lm51bV9zYWNrcykgewotCQl0cC0+cnhfb3B0Lm51bV9zYWNrcyA9IG51bV9zYWNrczsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArCi0JCQkJICAgICAgIHRwLT5yeF9vcHQuZHNhY2s7Ci0JfQorCXRwLT5yeF9vcHQubnVtX3NhY2tzID0gbnVtX3NhY2tzOwogfQogCiAvKiBUaGlzIG9uZSBjaGVja3MgdG8gc2VlIGlmIHdlIGNhbiBwdXQgZGF0YSBmcm9tIHRoZQpAQCAtNDMxMywxMCArNDMwOCw3IEBACiAKIAlUQ1BfRUNOX2FjY2VwdF9jd3IodHAsIHNrYik7CiAKLQlpZiAodHAtPnJ4X29wdC5kc2FjaykgewotCQl0cC0+cnhfb3B0LmRzYWNrID0gMDsKLQkJdHAtPnJ4X29wdC5lZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrczsKLQl9CisJdHAtPnJ4X29wdC5kc2FjayA9IDA7CiAKIAkvKiAgUXVldWUgZGF0YSBmb3IgZGVsaXZlcnkgdG8gdGhlIHVzZXIuCiAJICogIFBhY2tldHMgaW4gc2VxdWVuY2UgZ28gdG8gdGhlIHJlY2VpdmUgcXVldWUuCkBAIC00NDM1LDggKzQ0MjcsNiBAQAogCQkvKiBJbml0aWFsIG91dCBvZiBvcmRlciBzZWdtZW50LCBidWlsZCAxIFNBQ0suICovCiAJCWlmICh0Y3BfaXNfc2Fjayh0cCkpIHsKIAkJCXRwLT5yeF9vcHQubnVtX3NhY2tzID0gMTsKLQkJCXRwLT5yeF9vcHQuZHNhY2sgICAgID0gMDsKLQkJCXRwLT5yeF9vcHQuZWZmX3NhY2tzID0gMTsKIAkJCXRwLT5zZWxlY3RpdmVfYWNrc1swXS5zdGFydF9zZXEgPSBUQ1BfU0tCX0NCKHNrYiktPnNlcTsKIAkJCXRwLT5zZWxlY3RpdmVfYWNrc1swXS5lbmRfc2VxID0KIAkJCQkJCVRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcTsKQEAgLTUxNTcsNyArNTE0Nyw4IEBACiAJICovCiAKIAlpZiAoKHRjcF9mbGFnX3dvcmQodGgpICYgVENQX0hQX0JJVFMpID09IHRwLT5wcmVkX2ZsYWdzICYmCi0JICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxID09IHRwLT5yY3Zfbnh0KSB7CisJICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxID09IHRwLT5yY3Zfbnh0ICYmCisJICAgICFhZnRlcihUQ1BfU0tCX0NCKHNrYiktPmFja19zZXEsIHRwLT5zbmRfbnh0KSkgewogCQlpbnQgdGNwX2hlYWRlcl9sZW4gPSB0cC0+dGNwX2hlYWRlcl9sZW47CiAKIAkJLyogVGltZXN0YW1wIGhlYWRlciBwcmVkaWN0aW9uOiB0Y3BfaGVhZGVyX2xlbgpAQCAtNTMxMCw4ICs1MzAxLDggQEAKIAkJcmV0dXJuIC1yZXM7CiAKIHN0ZXA1OgotCWlmICh0aC0+YWNrKQotCQl0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpOworCWlmICh0aC0+YWNrICYmIHRjcF9hY2soc2ssIHNrYiwgRkxBR19TTE9XUEFUSCkgPCAwKQorCQlnb3RvIGRpc2NhcmQ7CiAKIAl0Y3BfcmN2X3J0dF9tZWFzdXJlX3RzKHNrLCBza2IpOwogCkBAIC01NDA5LDcgKzU0MDAsNyBAQAogCQkgKiBuZXZlciBzY2FsZWQuCiAJCSAqLwogCQl0cC0+c25kX3duZCA9IG50b2hzKHRoLT53aW5kb3cpOwotCQl0Y3BfaW5pdF93bCh0cCwgVENQX1NLQl9DQihza2IpLT5hY2tfc2VxLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CisJCXRjcF9pbml0X3dsKHRwLCBUQ1BfU0tCX0NCKHNrYiktPnNlcSk7CiAKIAkJaWYgKCF0cC0+cnhfb3B0LndzY2FsZV9vaykgewogCQkJdHAtPnJ4X29wdC5zbmRfd3NjYWxlID0gdHAtPnJ4X29wdC5yY3Zfd3NjYWxlID0gMDsKQEAgLTU1MTAsNyArNTUwMSw3IEBACiAKIAkvKiBQQVdTIGNoZWNrLiAqLwogCWlmICh0cC0+cnhfb3B0LnRzX3JlY2VudF9zdGFtcCAmJiB0cC0+cnhfb3B0LnNhd190c3RhbXAgJiYKLQkgICAgdGNwX3Bhd3NfY2hlY2soJnRwLT5yeF9vcHQsIDApKQorCSAgICB0Y3BfcGF3c19yZWplY3QoJnRwLT5yeF9vcHQsIDApKQogCQlnb3RvIGRpc2NhcmRfYW5kX3VuZG87CiAKIAlpZiAodGgtPnN5bikgewpAQCAtNTY0OCw3ICs1NjM5LDcgQEAKIAogCS8qIHN0ZXAgNTogY2hlY2sgdGhlIEFDSyBmaWVsZCAqLwogCWlmICh0aC0+YWNrKSB7Ci0JCWludCBhY2NlcHRhYmxlID0gdGNwX2Fjayhzaywgc2tiLCBGTEFHX1NMT1dQQVRIKTsKKwkJaW50IGFjY2VwdGFibGUgPSB0Y3BfYWNrKHNrLCBza2IsIEZMQUdfU0xPV1BBVEgpID4gMDsKIAogCQlzd2l0Y2ggKHNrLT5za19zdGF0ZSkgewogCQljYXNlIFRDUF9TWU5fUkVDVjoKQEAgLTU2NzAsOCArNTY2MSw3IEBACiAJCQkJdHAtPnNuZF91bmEgPSBUQ1BfU0tCX0NCKHNrYiktPmFja19zZXE7CiAJCQkJdHAtPnNuZF93bmQgPSBudG9ocyh0aC0+d2luZG93KSA8PAogCQkJCQkgICAgICB0cC0+cnhfb3B0LnNuZF93c2NhbGU7Ci0JCQkJdGNwX2luaXRfd2wodHAsIFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcSwKLQkJCQkJICAgIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxKTsKKwkJCQl0Y3BfaW5pdF93bCh0cCwgVENQX1NLQl9DQihza2IpLT5zZXEpOwogCiAJCQkJLyogdGNwX2FjayBjb25zaWRlcnMgdGhpcyBBQ0sgYXMgZHVwbGljYXRlCiAJCQkJICogYW5kIGRvZXMgbm90IGNhbGN1bGF0ZSBydHQuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCBjZjc0YzQxLi5kMGEzMTQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTEyMjYsMTUgKzEyMjYsNiBAQAogCWlmICh3YW50X2Nvb2tpZSAmJiAhdG1wX29wdC5zYXdfdHN0YW1wKQogCQl0Y3BfY2xlYXJfb3B0aW9ucygmdG1wX29wdCk7CiAKLQlpZiAodG1wX29wdC5zYXdfdHN0YW1wICYmICF0bXBfb3B0LnJjdl90c3ZhbCkgewotCQkvKiBTb21lIE9TZXMgKHVua25vd24gb25lcywgYnV0IEkgc2VlIHRoZW0gb24gd2ViIHNlcnZlciwgd2hpY2gKLQkJICogY29udGFpbnMgaW5mb3JtYXRpb24gaW50ZXJlc3Rpbmcgb25seSBmb3Igd2luZG93cycKLQkJICogdXNlcnMpIGRvIG5vdCBzZW5kIHRoZWlyIHN0YW1wIGluIFNZTi4gSXQgaXMgZWFzeSBjYXNlLgotCQkgKiBXZSBzaW1wbHkgZG8gbm90IGFkdmVydGlzZSBUUyBzdXBwb3J0LgotCQkgKi8KLQkJdG1wX29wdC5zYXdfdHN0YW1wID0gMDsKLQkJdG1wX29wdC50c3RhbXBfb2sgID0gMDsKLQl9CiAJdG1wX29wdC50c3RhbXBfb2sgPSB0bXBfb3B0LnNhd190c3RhbXA7CiAKIAl0Y3Bfb3BlbnJlcV9pbml0KHJlcSwgJnRtcF9vcHQsIHNrYik7CkBAIC0yMzU1LDcgKzIzNDYsNyBAQAogCiAJc3dpdGNoIChza2ItPmlwX3N1bW1lZCkgewogCWNhc2UgQ0hFQ0tTVU1fQ09NUExFVEU6Ci0JCWlmICghdGNwX3Y0X2NoZWNrKHNrYi0+bGVuLCBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQlpZiAoIXRjcF92NF9jaGVjayhza2JfZ3JvX2xlbihza2IpLCBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAogCQkJCSAgc2tiLT5jc3VtKSkgewogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCmluZGV4IGY2N2VmZmIuLjQzYmJiYTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYworKysgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCQlpZiAodG1wX29wdC5zYXdfdHN0YW1wKSB7CiAJCQl0bXBfb3B0LnRzX3JlY2VudAk9IHRjcHR3LT50d190c19yZWNlbnQ7CiAJCQl0bXBfb3B0LnRzX3JlY2VudF9zdGFtcAk9IHRjcHR3LT50d190c19yZWNlbnRfc3RhbXA7Ci0JCQlwYXdzX3JlamVjdCA9IHRjcF9wYXdzX2NoZWNrKCZ0bXBfb3B0LCB0aC0+cnN0KTsKKwkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfcmVqZWN0KCZ0bXBfb3B0LCB0aC0+cnN0KTsKIAkJfQogCX0KIApAQCAtMzk5LDcgKzM5OSw3IEBACiAKIAkJdGNwX3ByZXF1ZXVlX2luaXQobmV3dHApOwogCi0JCXRjcF9pbml0X3dsKG5ld3RwLCB0cmVxLT5zbnRfaXNuLCB0cmVxLT5yY3ZfaXNuKTsKKwkJdGNwX2luaXRfd2wobmV3dHAsIHRyZXEtPnJjdl9pc24pOwogCiAJCW5ld3RwLT5zcnR0ID0gMDsKIAkJbmV3dHAtPm1kZXYgPSBUQ1BfVElNRU9VVF9JTklUOwpAQCAtNDM0LDkgKzQzNCw4IEBACiAJCW5ld3RwLT5yeF9vcHQuc2F3X3RzdGFtcCA9IDA7CiAKIAkJbmV3dHAtPnJ4X29wdC5kc2FjayA9IDA7Ci0JCW5ld3RwLT5yeF9vcHQuZWZmX3NhY2tzID0gMDsKLQogCQluZXd0cC0+cnhfb3B0Lm51bV9zYWNrcyA9IDA7CisKIAkJbmV3dHAtPnVyZ19kYXRhID0gMDsKIAogCQlpZiAoc29ja19mbGFnKG5ld3NrLCBTT0NLX0tFRVBPUEVOKSkKQEAgLTUxMiw3ICs1MTEsNyBAQAogCQkJICogZnJvbSBhbm90aGVyIGRhdGEuCiAJCQkgKi8KIAkJCXRtcF9vcHQudHNfcmVjZW50X3N0YW1wID0gZ2V0X3NlY29uZHMoKSAtICgoVENQX1RJTUVPVVRfSU5JVC9IWik8PHJlcS0+cmV0cmFucyk7Ci0JCQlwYXdzX3JlamVjdCA9IHRjcF9wYXdzX2NoZWNrKCZ0bXBfb3B0LCB0aC0+cnN0KTsKKwkJCXBhd3NfcmVqZWN0ID0gdGNwX3Bhd3NfcmVqZWN0KCZ0bXBfb3B0LCB0aC0+cnN0KTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IGRhMmMzYjguLmMxZjI1OWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTQ0MSwxMCArNDQxLDcgQEAKIAkJCSpwdHIrKyA9IGh0b25sKHNwW3RoaXNfc2Fja10uZW5kX3NlcSk7CiAJCX0KIAotCQlpZiAodHAtPnJ4X29wdC5kc2FjaykgewotCQkJdHAtPnJ4X29wdC5kc2FjayA9IDA7Ci0JCQl0cC0+cnhfb3B0LmVmZl9zYWNrcyA9IHRwLT5yeF9vcHQubnVtX3NhY2tzOwotCQl9CisJCXRwLT5yeF9vcHQuZHNhY2sgPSAwOwogCX0KIH0KIApAQCAtNTUwLDYgKzU0Nyw3IEBACiAJc3RydWN0IHRjcF9za2JfY2IgKnRjYiA9IHNrYiA/IFRDUF9TS0JfQ0Ioc2tiKSA6IE5VTEw7CiAJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CiAJdW5zaWduZWQgc2l6ZSA9IDA7CisJdW5zaWduZWQgaW50IGVmZl9zYWNrczsKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiAJKm1kNSA9IHRwLT5hZl9zcGVjaWZpYy0+bWQ1X2xvb2t1cChzaywgc2spOwpAQCAtNTY4LDEwICs1NjYsMTEgQEAKIAkJc2l6ZSArPSBUQ1BPTEVOX1RTVEFNUF9BTElHTkVEOwogCX0KIAotCWlmICh1bmxpa2VseSh0cC0+cnhfb3B0LmVmZl9zYWNrcykpIHsKKwllZmZfc2Fja3MgPSB0cC0+cnhfb3B0Lm51bV9zYWNrcyArIHRwLT5yeF9vcHQuZHNhY2s7CisJaWYgKHVubGlrZWx5KGVmZl9zYWNrcykpIHsKIAkJY29uc3QgdW5zaWduZWQgcmVtYWluaW5nID0gTUFYX1RDUF9PUFRJT05fU1BBQ0UgLSBzaXplOwogCQlvcHRzLT5udW1fc2Fja19ibG9ja3MgPQotCQkJbWluX3QodW5zaWduZWQsIHRwLT5yeF9vcHQuZWZmX3NhY2tzLAorCQkJbWluX3QodW5zaWduZWQsIGVmZl9zYWNrcywKIAkJCSAgICAgIChyZW1haW5pbmcgLSBUQ1BPTEVOX1NBQ0tfQkFTRV9BTElHTkVEKSAvCiAJCQkgICAgICBUQ1BPTEVOX1NBQ0tfUEVSQkxPQ0spOwogCQlzaXplICs9IFRDUE9MRU5fU0FDS19CQVNFX0FMSUdORUQgKwpAQCAtNjYzLDEwICs2NjIsMTQgQEAKIAl0aC0+dXJnX3B0cgkJPSAwOwogCiAJLyogVGhlIHVyZ19tb2RlIGNoZWNrIGlzIG5lY2Vzc2FyeSBkdXJpbmcgYSBiZWxvdyBzbmRfdW5hIHdpbiBwcm9iZSAqLwotCWlmICh1bmxpa2VseSh0Y3BfdXJnX21vZGUodHApICYmCi0JCSAgICAgYmV0d2Vlbih0cC0+c25kX3VwLCB0Y2ItPnNlcSArIDEsIHRjYi0+c2VxICsgMHhGRkZGKSkpIHsKLQkJdGgtPnVyZ19wdHIJCT0gaHRvbnModHAtPnNuZF91cCAtIHRjYi0+c2VxKTsKLQkJdGgtPnVyZwkJCT0gMTsKKwlpZiAodW5saWtlbHkodGNwX3VyZ19tb2RlKHRwKSAmJiBiZWZvcmUodGNiLT5zZXEsIHRwLT5zbmRfdXApKSkgeworCQlpZiAoYmVmb3JlKHRwLT5zbmRfdXAsIHRjYi0+c2VxICsgMHgxMDAwMCkpIHsKKwkJCXRoLT51cmdfcHRyID0gaHRvbnModHAtPnNuZF91cCAtIHRjYi0+c2VxKTsKKwkJCXRoLT51cmcgPSAxOworCQl9IGVsc2UgaWYgKGFmdGVyKHRjYi0+c2VxICsgMHhGRkZGLCB0cC0+c25kX254dCkpIHsKKwkJCXRoLT51cmdfcHRyID0gMHhGRkZGOworCQkJdGgtPnVyZyA9IDE7CisJCX0KIAl9CiAKIAl0Y3Bfb3B0aW9uc193cml0ZSgoX19iZTMyICopKHRoICsgMSksIHRwLCAmb3B0cywgJm1kNV9oYXNoX2xvY2F0aW9uKTsKQEAgLTc2MywxMSArNzY2LDEwIEBACiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZmY7CiAJaW50IG5zaXplLCBvbGRfZmFjdG9yOwogCWludCBubGVuOwotCXUxNiBmbGFnczsKKwl1OCBmbGFnczsKIAogCUJVR19PTihsZW4gPiBza2ItPmxlbik7CiAKLQl0Y3BfY2xlYXJfcmV0cmFuc19oaW50c19wYXJ0aWFsKHRwKTsKIAluc2l6ZSA9IHNrYl9oZWFkbGVuKHNrYikgLSBsZW47CiAJaWYgKG5zaXplIDwgMCkKIAkJbnNpemUgPSAwOwpAQCAtODUwLDYgKzg1MiwxMiBAQAogCQkJdGNwX3ZlcmlmeV9sZWZ0X291dCh0cCk7CiAJCX0KIAkJdGNwX2FkanVzdF9mYWNrZXRzX291dChzaywgc2tiLCBkaWZmKTsKKworCQlpZiAodHAtPmxvc3Rfc2tiX2hpbnQgJiYKKwkJICAgIGJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPnNlcSwKKwkJCSAgIFRDUF9TS0JfQ0IodHAtPmxvc3Rfc2tiX2hpbnQpLT5zZXEpICYmCisJCSAgICAodGNwX2lzX2ZhY2sodHApIHx8IFRDUF9TS0JfQ0Ioc2tiKS0+c2Fja2VkKSkKKwkJCXRwLT5sb3N0X2NudF9oaW50IC09IGRpZmY7CiAJfQogCiAJLyogTGluayBCVUZGIGludG8gdGhlIHNlbmQgcXVldWUuICovCkBAIC05MTMsNyArOTIxLDcgQEAKIAkgKiBmYWN0b3IgYW5kIG1zcy4KIAkgKi8KIAlpZiAodGNwX3NrYl9wY291bnQoc2tiKSA+IDEpCi0JCXRjcF9zZXRfc2tiX3Rzb19zZWdzKHNrLCBza2IsIHRjcF9jdXJyZW50X21zcyhzaywgMSkpOworCQl0Y3Bfc2V0X3NrYl90c29fc2Vncyhzaywgc2tiLCB0Y3BfY3VycmVudF9tc3Moc2spKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTc0LDE1ICs5ODIsNiBAQAogCWljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplID0gMDsKIH0KIAotLyogQm91bmQgTVNTIC8gVFNPIHBhY2tldCBzaXplIHdpdGggdGhlIGhhbGYgb2YgdGhlIHdpbmRvdyAqLwotc3RhdGljIGludCB0Y3BfYm91bmRfdG9faGFsZl93bmQoc3RydWN0IHRjcF9zb2NrICp0cCwgaW50IHBrdHNpemUpCi17Ci0JaWYgKHRwLT5tYXhfd2luZG93ICYmIHBrdHNpemUgPiAodHAtPm1heF93aW5kb3cgPj4gMSkpCi0JCXJldHVybiBtYXgodHAtPm1heF93aW5kb3cgPj4gMSwgNjhVIC0gdHAtPnRjcF9oZWFkZXJfbGVuKTsKLQllbHNlCi0JCXJldHVybiBwa3RzaXplOwotfQotCiAvKiBUaGlzIGZ1bmN0aW9uIHN5bmNocm9uaXplIHNuZCBtc3MgdG8gY3VycmVudCBwbXR1L2V4dGhkciBzZXQuCiAKICAgIHRwLT5yeF9vcHQudXNlcl9tc3MgaXMgbXNzIHNldCBieSB1c2VyIGJ5IFRDUF9NQVhTRUcuIEl0IGRvZXMgTk9UIGNvdW50cwpAQCAtMTAyOSwyMiArMTAyOCwxNyBAQAogLyogQ29tcHV0ZSB0aGUgY3VycmVudCBlZmZlY3RpdmUgTVNTLCB0YWtpbmcgU0FDS3MgYW5kIElQIG9wdGlvbnMsCiAgKiBhbmQgZXZlbiBQTVRVIGRpc2NvdmVyeSBldmVudHMgaW50byBhY2NvdW50LgogICovCi11bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzaywgaW50IGxhcmdlX2FsbG93ZWQpCit1bnNpZ25lZCBpbnQgdGNwX2N1cnJlbnRfbXNzKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBfX3NrX2RzdF9nZXQoc2spOwogCXUzMiBtc3Nfbm93OwotCXUxNiB4bWl0X3NpemVfZ29hbDsKLQlpbnQgZG9pbmdfdHNvID0gMDsKIAl1bnNpZ25lZCBoZWFkZXJfbGVuOwogCXN0cnVjdCB0Y3Bfb3V0X29wdGlvbnMgb3B0czsKIAlzdHJ1Y3QgdGNwX21kNXNpZ19rZXkgKm1kNTsKIAogCW1zc19ub3cgPSB0cC0+bXNzX2NhY2hlOwogCi0JaWYgKGxhcmdlX2FsbG93ZWQgJiYgc2tfY2FuX2dzbyhzaykpCi0JCWRvaW5nX3RzbyA9IDE7Ci0KIAlpZiAoZHN0KSB7CiAJCXUzMiBtdHUgPSBkc3RfbXR1KGRzdCk7CiAJCWlmIChtdHUgIT0gaW5ldF9jc2soc2spLT5pY3NrX3BtdHVfY29va2llKQpAQCAtMTA2MiwxOSArMTA1Niw2IEBACiAJCW1zc19ub3cgLT0gZGVsdGE7CiAJfQogCi0JeG1pdF9zaXplX2dvYWwgPSBtc3Nfbm93OwotCi0JaWYgKGRvaW5nX3RzbykgewotCQl4bWl0X3NpemVfZ29hbCA9ICgoc2stPnNrX2dzb19tYXhfc2l6ZSAtIDEpIC0KLQkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19hZl9vcHMtPm5ldF9oZWFkZXJfbGVuIC0KLQkJCQkgIGluZXRfY3NrKHNrKS0+aWNza19leHRfaGRyX2xlbiAtCi0JCQkJICB0cC0+dGNwX2hlYWRlcl9sZW4pOwotCi0JCXhtaXRfc2l6ZV9nb2FsID0gdGNwX2JvdW5kX3RvX2hhbGZfd25kKHRwLCB4bWl0X3NpemVfZ29hbCk7Ci0JCXhtaXRfc2l6ZV9nb2FsIC09ICh4bWl0X3NpemVfZ29hbCAlIG1zc19ub3cpOwotCX0KLQl0cC0+eG1pdF9zaXplX2dvYWwgPSB4bWl0X3NpemVfZ29hbDsKLQogCXJldHVybiBtc3Nfbm93OwogfQogCkBAIC0xMjU2LDcgKzEyMzcsNyBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSB0Y3Bfc2VuZF9oZWFkKHNrKTsKIAogCXJldHVybiAoc2tiICYmCi0JCXRjcF9zbmRfdGVzdChzaywgc2tiLCB0Y3BfY3VycmVudF9tc3Moc2ssIDEpLAorCQl0Y3Bfc25kX3Rlc3Qoc2ssIHNrYiwgdGNwX2N1cnJlbnRfbXNzKHNrKSwKIAkJCSAgICAgKHRjcF9za2JfaXNfbGFzdChzaywgc2tiKSA/CiAJCQkgICAgICB0cC0+bm9uYWdsZSA6IFRDUF9OQUdMRV9QVVNIKSkpOwogfQpAQCAtMTI3Myw3ICsxMjU0LDcgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmZjsKIAlpbnQgbmxlbiA9IHNrYi0+bGVuIC0gbGVuOwotCXUxNiBmbGFnczsKKwl1OCBmbGFnczsKIAogCS8qIEFsbCBvZiBhIFRTTyBmcmFtZSBtdXN0IGJlIGNvbXBvc2VkIG9mIHBhZ2VkIGRhdGEuICAqLwogCWlmIChza2ItPmxlbiAhPSBza2ItPmRhdGFfbGVuKQpAQCAtMTM1Miw2ICsxMzMzLDEwIEBACiAJaWYgKGxpbWl0ID49IHNrLT5za19nc29fbWF4X3NpemUpCiAJCWdvdG8gc2VuZF9ub3c7CiAKKwkvKiBNaWRkbGUgaW4gcXVldWUgd29uJ3QgZ2V0IGFueSBtb3JlIGRhdGEsIGZ1bGwgc2VuZGFibGUgYWxyZWFkeT8gKi8KKwlpZiAoKHNrYiAhPSB0Y3Bfd3JpdGVfcXVldWVfdGFpbChzaykpICYmIChsaW1pdCA+PSBza2ItPmxlbikpCisJCWdvdG8gc2VuZF9ub3c7CisKIAlpZiAoc3lzY3RsX3RjcF90c29fd2luX2Rpdmlzb3IpIHsKIAkJdTMyIGNodW5rID0gbWluKHRwLT5zbmRfd25kLCB0cC0+c25kX2N3bmQgKiB0cC0+bXNzX2NhY2hlKTsKIApAQCAtMTQwNSwxMSArMTM5MCwxMSBAQAogCSAgICBpY3NrLT5pY3NrX210dXAucHJvYmVfc2l6ZSB8fAogCSAgICBpbmV0X2NzayhzayktPmljc2tfY2Ffc3RhdGUgIT0gVENQX0NBX09wZW4gfHwKIAkgICAgdHAtPnNuZF9jd25kIDwgMTEgfHwKLQkgICAgdHAtPnJ4X29wdC5lZmZfc2Fja3MpCisJICAgIHRwLT5yeF9vcHQubnVtX3NhY2tzIHx8IHRwLT5yeF9vcHQuZHNhY2spCiAJCXJldHVybiAtMTsKIAogCS8qIFZlcnkgc2ltcGxlIHNlYXJjaCBzdHJhdGVneToganVzdCBkb3VibGUgdGhlIE1TUy4gKi8KLQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAwKTsKKwltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAlwcm9iZV9zaXplID0gMiAqIHRwLT5tc3NfY2FjaGU7CiAJc2l6ZV9uZWVkZWQgPSBwcm9iZV9zaXplICsgKHRwLT5yZW9yZGVyaW5nICsgMSkgKiB0cC0+bXNzX2NhY2hlOwogCWlmIChwcm9iZV9zaXplID4gdGNwX210dV90b19tc3Moc2ssIGljc2stPmljc2tfbXR1cC5zZWFyY2hfaGlnaCkpIHsKQEAgLTE3NTQsMTEgKzE3MzksOSBAQAogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpuZXh0X3NrYiA9IHRjcF93cml0ZV9xdWV1ZV9uZXh0KHNrLCBza2IpOwogCWludCBza2Jfc2l6ZSwgbmV4dF9za2Jfc2l6ZTsKLQl1MTYgZmxhZ3M7CiAKIAlza2Jfc2l6ZSA9IHNrYi0+bGVuOwogCW5leHRfc2tiX3NpemUgPSBuZXh0X3NrYi0+bGVuOwotCWZsYWdzID0gVENQX1NLQl9DQihza2IpLT5mbGFnczsKIAogCUJVR19PTih0Y3Bfc2tiX3Bjb3VudChza2IpICE9IDEgfHwgdGNwX3NrYl9wY291bnQobmV4dF9za2IpICE9IDEpOwogCkBAIC0xNzc4LDkgKzE3NjEsOCBAQAogCS8qIFVwZGF0ZSBzZXF1ZW5jZSByYW5nZSBvbiBvcmlnaW5hbCBza2IuICovCiAJVENQX1NLQl9DQihza2IpLT5lbmRfc2VxID0gVENQX1NLQl9DQihuZXh0X3NrYiktPmVuZF9zZXE7CiAKLQkvKiBNZXJnZSBvdmVyIGNvbnRyb2wgaW5mb3JtYXRpb24uICovCi0JZmxhZ3MgfD0gVENQX1NLQl9DQihuZXh0X3NrYiktPmZsYWdzOyAvKiBUaGlzIG1vdmVzIFBTSC9GSU4gZXRjLiBvdmVyICovCi0JVENQX1NLQl9DQihza2IpLT5mbGFncyA9IGZsYWdzOworCS8qIE1lcmdlIG92ZXIgY29udHJvbCBpbmZvcm1hdGlvbi4gVGhpcyBtb3ZlcyBQU0gvRklOIGV0Yy4gb3ZlciAqLworCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gVENQX1NLQl9DQihuZXh0X3NrYiktPmZsYWdzOwogCiAJLyogQWxsIGRvbmUsIGdldCByaWQgb2Ygc2Vjb25kIFNLQiBhbmQgYWNjb3VudCBmb3IgaXQgc28KIAkgKiBwYWNrZXQgY291bnRpbmcgZG9lcyBub3QgYnJlYWsuCkBAIC0xODk0LDcgKzE4NzYsNyBAQAogCWlmIChpbmV0X2NzayhzayktPmljc2tfYWZfb3BzLT5yZWJ1aWxkX2hlYWRlcihzaykpCiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOyAvKiBSb3V0aW5nIGZhaWx1cmUgb3Igc2ltaWxhci4gKi8KIAotCWN1cl9tc3MgPSB0Y3BfY3VycmVudF9tc3Moc2ssIDApOworCWN1cl9tc3MgPSB0Y3BfY3VycmVudF9tc3Moc2spOwogCiAJLyogSWYgcmVjZWl2ZXIgaGFzIHNocnVuayBoaXMgd2luZG93LCBhbmQgc2tiIGlzIG91dCBvZgogCSAqIG5ldyB3aW5kb3csIGRvIG5vdCByZXRyYW5zbWl0IGl0LiBUaGUgZXhjZXB0aW9uIGlzIHRoZQpAQCAtMTkwOCw2ICsxODkwLDggQEAKIAlpZiAoc2tiLT5sZW4gPiBjdXJfbXNzKSB7CiAJCWlmICh0Y3BfZnJhZ21lbnQoc2ssIHNrYiwgY3VyX21zcywgY3VyX21zcykpCiAJCQlyZXR1cm4gLUVOT01FTTsgLyogV2UnbGwgdHJ5IGFnYWluIGxhdGVyLiAqLworCX0gZWxzZSB7CisJCXRjcF9pbml0X3Rzb19zZWdzKHNrLCBza2IsIGN1cl9tc3MpOwogCX0KIAogCXRjcF9yZXRyYW5zX3RyeV9jb2xsYXBzZShzaywgc2tiLCBjdXJfbXNzKTsKQEAgLTIwNjEsNyArMjA0NSw3IEBACiAJCQlnb3RvIGJlZ2luX2Z3ZDsKIAogCQl9IGVsc2UgaWYgKCEoc2Fja2VkICYgVENQQ0JfTE9TVCkpIHsKLQkJCWlmIChob2xlID09IE5VTEwgJiYgIShzYWNrZWQgJiBUQ1BDQl9TQUNLRURfUkVUUkFOUykpCisJCQlpZiAoaG9sZSA9PSBOVUxMICYmICEoc2Fja2VkICYgKFRDUENCX1NBQ0tFRF9SRVRSQU5TfFRDUENCX1NBQ0tFRF9BQ0tFRCkpKQogCQkJCWhvbGUgPSBza2I7CiAJCQljb250aW51ZTsKIApAQCAtMjEwMCw3ICsyMDg0LDcgQEAKIAkgKiB1bnNlbnQgZnJhbWVzLiAgQnV0IGJlIGNhcmVmdWwgYWJvdXQgb3V0Z29pbmcgU0FDS1MKIAkgKiBhbmQgSVAgb3B0aW9ucy4KIAkgKi8KLQltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAxKTsKKwltc3Nfbm93ID0gdGNwX2N1cnJlbnRfbXNzKHNrKTsKIAogCWlmICh0Y3Bfc2VuZF9oZWFkKHNrKSAhPSBOVUxMKSB7CiAJCVRDUF9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gVENQQ0JfRkxBR19GSU47CkBAIC0yMzI1LDcgKzIzMDksNyBAQAogCXNrLT5za19lcnIgPSAwOwogCXNvY2tfcmVzZXRfZmxhZyhzaywgU09DS19ET05FKTsKIAl0cC0+c25kX3duZCA9IDA7Ci0JdGNwX2luaXRfd2wodHAsIHRwLT53cml0ZV9zZXEsIDApOworCXRjcF9pbml0X3dsKHRwLCAwKTsKIAl0cC0+c25kX3VuYSA9IHRwLT53cml0ZV9zZXE7CiAJdHAtPnNuZF9zbWwgPSB0cC0+d3JpdGVfc2VxOwogCXRwLT5zbmRfdXAgPSB0cC0+d3JpdGVfc2VxOwpAQCAtMjUxMiw3ICsyNDk2LDcgQEAKIAlpZiAoKHNrYiA9IHRjcF9zZW5kX2hlYWQoc2spKSAhPSBOVUxMICYmCiAJICAgIGJlZm9yZShUQ1BfU0tCX0NCKHNrYiktPnNlcSwgdGNwX3duZF9lbmQodHApKSkgewogCQlpbnQgZXJyOwotCQl1bnNpZ25lZCBpbnQgbXNzID0gdGNwX2N1cnJlbnRfbXNzKHNrLCAwKTsKKwkJdW5zaWduZWQgaW50IG1zcyA9IHRjcF9jdXJyZW50X21zcyhzayk7CiAJCXVuc2lnbmVkIGludCBzZWdfc2l6ZSA9IHRjcF93bmRfZW5kKHRwKSAtIFRDUF9TS0JfQ0Ioc2tiKS0+c2VxOwogCiAJCWlmIChiZWZvcmUodHAtPnB1c2hlZF9zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSkpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfcHJvYmUuYyBiL25ldC9pcHY0L3RjcF9wcm9iZS5jCmluZGV4IDI1NTI0ZDQuLjU5ZjViNWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9wcm9iZS5jCisrKyBiL25ldC9pcHY0L3RjcF9wcm9iZS5jCkBAIC0xNjUsOSArMTY1LDEwIEBACiBzdGF0aWMgc3NpemVfdCB0Y3Bwcm9iZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7Ci0JaW50IGVycm9yID0gMCwgY250ID0gMDsKKwlpbnQgZXJyb3IgPSAwOworCXNpemVfdCBjbnQgPSAwOwogCi0JaWYgKCFidWYgfHwgbGVuIDwgMCkKKwlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl3aGlsZSAoY250IDwgbGVuKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfc2NhbGFibGUuYyBiL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCmluZGV4IDQ2NjBiMDguLmE3NjUxMzcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCisrKyBiL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCkBAIC0yNCwxNCArMjQsOCBAQAogCiAJaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKQogCQl0Y3Bfc2xvd19zdGFydCh0cCk7Ci0JZWxzZSB7Ci0JCXRwLT5zbmRfY3duZF9jbnQrKzsKLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPiBtaW4odHAtPnNuZF9jd25kLCBUQ1BfU0NBTEFCTEVfQUlfQ05UKSl7Ci0JCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCXRwLT5zbmRfY3duZCsrOwotCQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JCX0KLQl9CisJZWxzZQorCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgbWluKHRwLT5zbmRfY3duZCwgVENQX1NDQUxBQkxFX0FJX0NOVCkpOwogfQogCiBzdGF0aWMgdTMyIHRjcF9zY2FsYWJsZV9zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDAxNzBlOTEuLmIxNDRhMjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0zMjgsMTkgKzMyOCwxNiBAQAogCWlmIChpY3NrLT5pY3NrX3JldHJhbnNtaXRzID09IDApIHsKIAkJaW50IG1pYl9pZHg7CiAKLQkJaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0Rpc29yZGVyIHx8Ci0JCSAgICBpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkgewotCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkgewotCQkJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLUkVDT1ZFUllGQUlMOwotCQkJCWVsc2UKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BTQUNLRkFJTFVSRVM7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PUkVDT1ZFUllGQUlMOwotCQkJCWVsc2UKLQkJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PRkFJTFVSRVM7Ci0JCQl9CisJCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9EaXNvcmRlcikgeworCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tGQUlMVVJFUzsKKwkJCWVsc2UKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFJFTk9GQUlMVVJFUzsKKwkJfSBlbHNlIGlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9SZWNvdmVyeSkgeworCQkJaWYgKHRjcF9pc19zYWNrKHRwKSkKKwkJCQltaWJfaWR4ID0gTElOVVhfTUlCX1RDUFNBQ0tSRUNPVkVSWUZBSUw7CisJCQllbHNlCisJCQkJbWliX2lkeCA9IExJTlVYX01JQl9UQ1BSRU5PUkVDT1ZFUllGQUlMOwogCQl9IGVsc2UgaWYgKGljc2stPmljc2tfY2Ffc3RhdGUgPT0gVENQX0NBX0xvc3MpIHsKIAkJCW1pYl9pZHggPSBMSU5VWF9NSUJfVENQTE9TU0ZBSUxVUkVTOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX3Zlbm8uYyBiL25ldC9pcHY0L3RjcF92ZW5vLmMKaW5kZXggZDA4YjJlOC4uZTliYmZmNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3Zlbm8uYworKysgYi9uZXQvaXB2NC90Y3BfdmVuby5jCkBAIC0xNTksMTIgKzE1OSw3IEBACiAJCQkJLyogSW4gdGhlICJub24tY29uZ2VzdGl2ZSBzdGF0ZSIsIGluY3JlYXNlIGN3bmQKIAkJCQkgKiAgZXZlcnkgcnR0LgogCQkJCSAqLwotCQkJCWlmICh0cC0+c25kX2N3bmRfY250ID49IHRwLT5zbmRfY3duZCkgewotCQkJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQotCQkJCQkJdHAtPnNuZF9jd25kKys7Ci0JCQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQkJCX0gZWxzZQotCQkJCQl0cC0+c25kX2N3bmRfY250Kys7CisJCQkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIEluIHRoZSAiY29uZ2VzdGl2ZSBzdGF0ZSIsIGluY3JlYXNlIGN3bmQKIAkJCQkgKiBldmVyeSBvdGhlciBydHQuCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfeWVhaC5jIGIvbmV0L2lwdjQvdGNwX3llYWguYwppbmRleCA5ZWM4NDNhLi42NmI2ODIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfeWVhaC5jCisrKyBiL25ldC9pcHY0L3RjcF95ZWFoLmMKQEAgLTk0LDE0ICs5NCw3IEBACiAKIAl9IGVsc2UgewogCQkvKiBSZW5vICovCi0KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPCB0cC0+c25kX2N3bmQpCi0JCQl0cC0+c25kX2N3bmRfY250Kys7Ci0KLQkJaWYgKHRwLT5zbmRfY3duZF9jbnQgPj0gdHAtPnNuZF9jd25kKSB7Ci0JCQl0cC0+c25kX2N3bmQrKzsKLQkJCXRwLT5zbmRfY3duZF9jbnQgPSAwOwotCQl9CisJCXRjcF9jb25nX2F2b2lkX2FpKHRwLCB0cC0+c25kX2N3bmQpOwogCX0KIAogCS8qIFRoZSBrZXkgcGxheWVycyBhcmUgdl92ZWdhcy5iZWdfc25kX3VuYSBhbmQgdl9iZWdfc25kX254dC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggYzQ3Yzk4OS4uYmRhMDhhMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIGludCBpcHY0X3Jjdl9zYWRkcl9lcXVhbChjb25zdCBzdHJ1Y3Qgc29jayAqc2sxLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQoraW50IGlwdjRfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzazEsIGNvbnN0IHN0cnVjdCBzb2NrICpzazIpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldDEgPSBpbmV0X3NrKHNrMSksICppbmV0MiA9IGluZXRfc2soc2syKTsKIApAQCAtNTk2LDYgKzU5Niw3IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlwYy5vcHQgPSBOVUxMOworCWlwYy5zaHR4LmZsYWdzID0gMDsKIAogCWlmICh1cC0+cGVuZGluZykgewogCQkvKgpAQCAtNjQzLDYgKzY0NCw5IEBACiAJaXBjLmFkZHIgPSBpbmV0LT5zYWRkcjsKIAogCWlwYy5vaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCWVyciA9IHNvY2tfdHhfdGltZXN0YW1wKG1zZywgc2ssICZpcGMuc2h0eCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAlpZiAobXNnLT5tc2dfY29udHJvbGxlbikgewogCQllcnIgPSBpcF9jbXNnX3NlbmQoc29ja19uZXQoc2spLCBtc2csICZpcGMpOwogCQlpZiAoZXJyKQpAQCAtMTE4MCw3ICsxMTg0LDcgQEAKIAkJCXNrID0gc2tuZXh0OwogCQl9IHdoaWxlIChza25leHQpOwogCX0gZWxzZQotCQlrZnJlZV9za2Ioc2tiKTsKKwkJY29uc3VtZV9za2Ioc2tiKTsKIAlzcGluX3VubG9jaygmaHNsb3QtPmxvY2spOwogCXJldHVybiAwOwogfQpAQCAtMTYxNCw3ICsxNjE4LDggQEAKIAl9IHdoaWxlIChzayAmJiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkgfHwgc2stPnNrX2ZhbWlseSAhPSBzdGF0ZS0+ZmFtaWx5KSk7CiAKIAlpZiAoIXNrKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+dWRwX3RhYmxlLT5oYXNoW3N0YXRlLT5idWNrZXRdLmxvY2spOworCQlpZiAoc3RhdGUtPmJ1Y2tldCA8IFVEUF9IVEFCTEVfU0laRSkKKwkJCXNwaW5fdW5sb2NrX2JoKCZzdGF0ZS0+dWRwX3RhYmxlLT5oYXNoW3N0YXRlLT5idWNrZXRdLmxvY2spOwogCQlyZXR1cm4gdWRwX2dldF9maXJzdChzZXEsIHN0YXRlLT5idWNrZXQgKyAxKTsKIAl9CiAJcmV0dXJuIHNrOwpAQCAtMTYzMiw2ICsxNjM3LDkgQEAKIAogc3RhdGljIHZvaWQgKnVkcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogeworCXN0cnVjdCB1ZHBfaXRlcl9zdGF0ZSAqc3RhdGUgPSBzZXEtPnByaXZhdGU7CisJc3RhdGUtPmJ1Y2tldCA9IFVEUF9IVEFCTEVfU0laRTsKKwogCXJldHVybiAqcG9zID8gdWRwX2dldF9pZHgoc2VxLCAqcG9zLTEpIDogU0VRX1NUQVJUX1RPS0VOOwogfQogCkBAIC0xODE1LDYgKzE4MjMsNyBAQAogRVhQT1JUX1NZTUJPTCh1ZHBfbGliX3NldHNvY2tvcHQpOwogRVhQT1JUX1NZTUJPTCh1ZHBfcG9sbCk7CiBFWFBPUlRfU1lNQk9MKHVkcF9saWJfZ2V0X3BvcnQpOworRVhQT1JUX1NZTUJPTChpcHY0X3Jjdl9zYWRkcl9lcXVhbCk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogRVhQT1JUX1NZTUJPTCh1ZHBfcHJvY19yZWdpc3Rlcik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDJhZDI0YmEuLjYwZDkxOGMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIHhmcm00X2RzdF9vcHMgPSB7CiAJLmZhbWlseSA9CQlBRl9JTkVULAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKSwKKwkucHJvdG9jb2wgPQkJY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5nYyA9CQkJeGZybTRfZ2FyYmFnZV9jb2xsZWN0LAogCS51cGRhdGVfcG10dSA9CQl4ZnJtNF91cGRhdGVfcG10dSwKIAkuZGVzdHJveSA9CQl4ZnJtNF9kc3RfZGVzdHJveSwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IDEyMjBlMmMuLmE4MjE4YmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtNDAsNiArNDAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KQEAgLTU5MCw2ICs1OTEsNyBAQAogewogCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYSA9IE5VTEw7CiAJc3RydWN0IHJ0Nl9pbmZvICpydDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGlkZXYtPmRldik7CiAJaW50IGhhc2g7CiAJaW50IGVyciA9IDA7CiAJaW50IGFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKGFkZHIpOwpAQCAtNjA2LDYgKzYwOCwxMSBAQAogCQlnb3RvIG91dDI7CiAJfQogCisJaWYgKGlkZXYtPmNuZi5kaXNhYmxlX2lwdjYgfHwgbmV0LT5pcHY2LmRldmNvbmZfYWxsLT5kaXNhYmxlX2lwdjYpIHsKKwkJZXJyID0gLUVBQ0NFUzsKKwkJZ290byBvdXQyOworCX0KKwogCXdyaXRlX2xvY2soJmFkZHJjb25mX2hhc2hfbG9jayk7CiAKIAkvKiBJZ25vcmUgYWRkaW5nIGR1cGxpY2F0ZSBhZGRyZXNzZXMgb24gYW4gaW50ZXJmYWNlICovCkBAIC0xMjA5LDE2ICsxMjE2LDEyIEBACiAJCQkJCX0KIAkJCQkJYnJlYWs7CiAJCQkJfSBlbHNlIGlmIChtaW5paGlzY29yZSA8IG1pbmlzY29yZSkgewotCQkJCQlzdHJ1Y3QgaXB2Nl9zYWRkcl9zY29yZSAqdG1wOwotCiAJCQkJCWlmIChoaXNjb3JlLT5pZmEpCiAJCQkJCQlpbjZfaWZhX3B1dChoaXNjb3JlLT5pZmEpOwogCiAJCQkJCWluNl9pZmFfaG9sZChzY29yZS0+aWZhKTsKIAotCQkJCQl0bXAgPSBoaXNjb3JlOwotCQkJCQloaXNjb3JlID0gc2NvcmU7Ci0JCQkJCXNjb3JlID0gdG1wOworCQkJCQlzd2FwKGhpc2NvcmUsIHNjb3JlKTsKIAogCQkJCQkvKiByZXN0b3JlIG91ciBpdGVyYXRvciAqLwogCQkJCQlzY29yZS0+aWZhID0gaGlzY29yZS0+aWZhOwpAQCAtMTM2Nyw0MCArMTM3MCw2IEBACiAJcmV0dXJuIGlmcDsKIH0KIAotaW50IGlwdjZfcmN2X3NhZGRyX2VxdWFsKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNvY2sgKnNrMikKLXsKLQljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrX3Jjdl9zYWRkcjYgPSAmaW5ldDZfc2soc2spLT5yY3Zfc2FkZHI7Ci0JY29uc3Qgc3RydWN0IGluNl9hZGRyICpzazJfcmN2X3NhZGRyNiA9IGluZXQ2X3Jjdl9zYWRkcihzazIpOwotCV9fYmUzMiBza19yY3Zfc2FkZHIgPSBpbmV0X3NrKHNrKS0+cmN2X3NhZGRyOwotCV9fYmUzMiBzazJfcmN2X3NhZGRyID0gaW5ldF9yY3Zfc2FkZHIoc2syKTsKLQlpbnQgc2tfaXB2Nm9ubHkgPSBpcHY2X29ubHlfc29jayhzayk7Ci0JaW50IHNrMl9pcHY2b25seSA9IGluZXRfdjZfaXB2Nm9ubHkoc2syKTsKLQlpbnQgYWRkcl90eXBlID0gaXB2Nl9hZGRyX3R5cGUoc2tfcmN2X3NhZGRyNik7Ci0JaW50IGFkZHJfdHlwZTIgPSBzazJfcmN2X3NhZGRyNiA/IGlwdjZfYWRkcl90eXBlKHNrMl9yY3Zfc2FkZHI2KSA6IElQVjZfQUREUl9NQVBQRUQ7Ci0KLQlpZiAoIXNrMl9yY3Zfc2FkZHIgJiYgIXNrX2lwdjZvbmx5KQotCQlyZXR1cm4gMTsKLQotCWlmIChhZGRyX3R5cGUyID09IElQVjZfQUREUl9BTlkgJiYKLQkgICAgIShzazJfaXB2Nm9ubHkgJiYgYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpKQotCQlyZXR1cm4gMTsKLQotCWlmIChhZGRyX3R5cGUgPT0gSVBWNl9BRERSX0FOWSAmJgotCSAgICAhKHNrX2lwdjZvbmx5ICYmIGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX01BUFBFRCkpCi0JCXJldHVybiAxOwotCi0JaWYgKHNrMl9yY3Zfc2FkZHI2ICYmCi0JICAgIGlwdjZfYWRkcl9lcXVhbChza19yY3Zfc2FkZHI2LCBzazJfcmN2X3NhZGRyNikpCi0JCXJldHVybiAxOwotCi0JaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEICYmCi0JICAgICFzazJfaXB2Nm9ubHkgJiYKLQkgICAgKCFzazJfcmN2X3NhZGRyIHx8ICFza19yY3Zfc2FkZHIgfHwgc2tfcmN2X3NhZGRyID09IHNrMl9yY3Zfc2FkZHIpKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCiAvKiBHZXRzIHJlZmVyZW5jZWQgYWRkcmVzcywgZGVzdHJveXMgaWZhZGRyICovCiAKIHN0YXRpYyB2b2lkIGFkZHJjb25mX2RhZF9zdG9wKHN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmcCkKQEAgLTE0MzMsNiArMTQwMiwxMSBAQAogdm9pZCBhZGRyY29uZl9kYWRfZmFpbHVyZShzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnApCiB7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldiA9IGlmcC0+aWRldjsKKworCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUHY2IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGVkIVxuIiwKKwkJCWlmcC0+aWRldi0+ZGV2LT5uYW1lKTsKKwogCWlmIChpZGV2LT5jbmYuYWNjZXB0X2RhZCA+IDEgJiYgIWlkZXYtPmNuZi5kaXNhYmxlX2lwdjYpIHsKIAkJc3RydWN0IGluNl9hZGRyIGFkZHI7CiAKQEAgLTE0NDMsMTEgKzE0MTcsMTIgQEAKIAkJICAgIGlwdjZfYWRkcl9lcXVhbCgmaWZwLT5hZGRyLCAmYWRkcikpIHsKIAkJCS8qIERBRCBmYWlsZWQgZm9yIGxpbmstbG9jYWwgYmFzZWQgb24gTUFDIGFkZHJlc3MgKi8KIAkJCWlkZXYtPmNuZi5kaXNhYmxlX2lwdjYgPSAxOworCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogSVB2NiBiZWluZyBkaXNhYmxlZCFcbiIsCisJCQkJaWZwLT5pZGV2LT5kZXYtPm5hbWUpOwogCQl9CiAJfQogCi0JaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGR1cGxpY2F0ZSBhZGRyZXNzIGRldGVjdGVkIVxuIiwgaWZwLT5pZGV2LT5kZXYtPm5hbWUpOwogCWFkZHJjb25mX2RhZF9zdG9wKGlmcCk7CiB9CiAKQEAgLTIyMjcsMTAgKzIyMDIsMjQgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBhZGRfYWRkcihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsCisJCSAgICAgaW50IHBsZW4sIGludCBzY29wZSkKK3sKKwlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7CisKKwlpZnAgPSBpcHY2X2FkZF9hZGRyKGlkZXYsIGFkZHIsIHBsZW4sIHNjb3BlLCBJRkFfRl9QRVJNQU5FTlQpOworCWlmICghSVNfRVJSKGlmcCkpIHsKKwkJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOworCQlpZnAtPmZsYWdzICY9IH5JRkFfRl9URU5UQVRJVkU7CisJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOworCQlpcHY2X2lmYV9ub3RpZnkoUlRNX05FV0FERFIsIGlmcCk7CisJCWluNl9pZmFfcHV0KGlmcCk7CisJfQorfQorCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNl9TSVQpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfU0lUX01PRFVMRSkKIHN0YXRpYyB2b2lkIHNpdF9hZGRfdjRfYWRkcnMoc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKLQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICogaWZwOwogCXN0cnVjdCBpbjZfYWRkciBhZGRyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChpZGV2LT5kZXYpOwpAQCAtMjI0OSwxNCArMjIzOCw3IEBACiAJfQogCiAJaWYgKGFkZHIuczZfYWRkcjMyWzNdKSB7Ci0JCWlmcCA9IGlwdjZfYWRkX2FkZHIoaWRldiwgJmFkZHIsIDEyOCwgc2NvcGUsIElGQV9GX1BFUk1BTkVOVCk7Ci0JCWlmICghSVNfRVJSKGlmcCkpIHsKLQkJCXNwaW5fbG9ja19iaCgmaWZwLT5sb2NrKTsKLQkJCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKLQkJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJaXB2Nl9pZmFfbm90aWZ5KFJUTV9ORVdBRERSLCBpZnApOwotCQkJaW42X2lmYV9wdXQoaWZwKTsKLQkJfQorCQlhZGRfYWRkcihpZGV2LCAmYWRkciwgMTI4LCBzY29wZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIyODQsMTUgKzIyNjYsNyBAQAogCQkJCWVsc2UKIAkJCQkJcGxlbiA9IDk2OwogCi0JCQkJaWZwID0gaXB2Nl9hZGRfYWRkcihpZGV2LCAmYWRkciwgcGxlbiwgZmxhZywKLQkJCQkJCSAgICBJRkFfRl9QRVJNQU5FTlQpOwotCQkJCWlmICghSVNfRVJSKGlmcCkpIHsKLQkJCQkJc3Bpbl9sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJCQlpZnAtPmZsYWdzICY9IH5JRkFfRl9URU5UQVRJVkU7Ci0JCQkJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOwotCQkJCQlpcHY2X2lmYV9ub3RpZnkoUlRNX05FV0FERFIsIGlmcCk7Ci0JCQkJCWluNl9pZmFfcHV0KGlmcCk7Ci0JCQkJfQorCQkJCWFkZF9hZGRyKGlkZXYsICZhZGRyLCBwbGVuLCBmbGFnKTsKIAkJCX0KIAkJfQogCX0KQEAgLTIzMDIsNyArMjI3Niw2IEBACiBzdGF0aWMgdm9pZCBpbml0X2xvb3BiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGluZXQ2X2RldiAgKmlkZXY7Ci0Jc3RydWN0IGluZXQ2X2lmYWRkciAqIGlmcDsKIAogCS8qIDo6MSAqLwogCkBAIC0yMzEzLDE0ICsyMjg2LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmcCA9IGlwdjZfYWRkX2FkZHIoaWRldiwgJmluNmFkZHJfbG9vcGJhY2ssIDEyOCwgSUZBX0hPU1QsIElGQV9GX1BFUk1BTkVOVCk7Ci0JaWYgKCFJU19FUlIoaWZwKSkgewotCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCWlmcC0+ZmxhZ3MgJj0gfklGQV9GX1RFTlRBVElWRTsKLQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7Ci0JCWlwdjZfaWZhX25vdGlmeShSVE1fTkVXQUREUiwgaWZwKTsKLQkJaW42X2lmYV9wdXQoaWZwKTsKLQl9CisJYWRkX2FkZHIoaWRldiwgJmluNmFkZHJfbG9vcGJhY2ssIDEyOCwgSUZBX0hPU1QpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRyY29uZl9hZGRfbGlua2xvY2FsKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBpbjZfYWRkciAqYWRkcikKQEAgLTI4MzIsMTEgKzI3OTgsNiBAQAogCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoaWRldi0+Y25mLmFjY2VwdF9kYWQgPiAxICYmIGlkZXYtPmNuZi5kaXNhYmxlX2lwdjYpIHsKLQkJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwotCQlhZGRyY29uZl9kYWRfZmFpbHVyZShpZnApOwotCQlyZXR1cm47Ci0JfQogCXNwaW5fbG9ja19iaCgmaWZwLT5sb2NrKTsKIAlpZiAoaWZwLT5wcm9iZXMgPT0gMCkgewogCQkvKgpAQCAtMzY0Nyw3ICszNjA4LDggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWdvdG8gZXJyb3V0OwogCX0KLQllcnIgPSBydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X0lGQUREUiwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9JRkFERFIsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X0lGQUREUiwgZXJyKTsKQEAgLTM4NTgsNyArMzgyMCw4IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIDAsIFJUTkxHUlBfSVBWNl9JRkFERFIsIE5VTEwsIEdGUF9BVE9NSUMpOworCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfSUZBRERSLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm47CiBlcnJvdXQ6CiAJaWYgKGVyciA8IDApCiAJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfSVBWNl9JRkFERFIsIGVycik7CkBAIC0zOTI4LDcgKzM4OTEsOCBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJZ290byBlcnJvdXQ7CiAJfQotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0lQVjZfUFJFRklYLCBOVUxMLCBHRlBfQVRPTUlDKTsKKwlydG5sX25vdGlmeShza2IsIG5ldCwgMCwgUlROTEdSUF9JUFY2X1BSRUZJWCwgTlVMTCwgR0ZQX0FUT01JQyk7CisJcmV0dXJuOwogZXJyb3V0OgogCWlmIChlcnIgPCAwKQogCQlydG5sX3NldF9za19lcnIobmV0LCBSVE5MR1JQX0lQVjZfUFJFRklYLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggOWM4MzA5ZS4uNjFmNTUzOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC0yNzYsMTEgKzI3NiwyNiBAQAogCiAJLyogQ2hlY2sgaWYgdGhlIGFkZHJlc3MgYmVsb25ncyB0byB0aGUgaG9zdC4gKi8KIAlpZiAoYWRkcl90eXBlID09IElQVjZfQUREUl9NQVBQRUQpIHsKLQkJdjRhZGRyID0gYWRkci0+c2luNl9hZGRyLnM2X2FkZHIzMlszXTsKLQkJaWYgKGluZXRfYWRkcl90eXBlKG5ldCwgdjRhZGRyKSAhPSBSVE5fTE9DQUwpIHsKLQkJCWVyciA9IC1FQUREUk5PVEFWQUlMOworCQlpbnQgY2hrX2FkZHJfcmV0OworCisJCS8qIEJpbmRpbmcgdG8gdjQtbWFwcGVkIGFkZHJlc3Mgb24gYSB2Ni1vbmx5IHNvY2tldAorCQkgKiBtYWtlcyBubyBzZW5zZQorCQkgKi8KKwkJaWYgKG5wLT5pcHY2b25seSkgeworCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9CisKKwkJLyogUmVwcm9kdWNlIEFGX0lORVQgY2hlY2tzIHRvIG1ha2UgdGhlIGJpbmRpbmdzIGNvbnNpdGFudCAqLworCQl2NGFkZHIgPSBhZGRyLT5zaW42X2FkZHIuczZfYWRkcjMyWzNdOworCQljaGtfYWRkcl9yZXQgPSBpbmV0X2FkZHJfdHlwZShuZXQsIHY0YWRkcik7CisJCWlmICghc3lzY3RsX2lwX25vbmxvY2FsX2JpbmQgJiYKKwkJICAgICEoaW5ldC0+ZnJlZWJpbmQgfHwgaW5ldC0+dHJhbnNwYXJlbnQpICYmCisJCSAgICB2NGFkZHIgIT0gaHRvbmwoSU5BRERSX0FOWSkgJiYKKwkJICAgIGNoa19hZGRyX3JldCAhPSBSVE5fTE9DQUwgJiYKKwkJICAgIGNoa19hZGRyX3JldCAhPSBSVE5fTVVMVElDQVNUICYmCisJCSAgICBjaGtfYWRkcl9yZXQgIT0gUlROX0JST0FEQ0FTVCkKKwkJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSkgewogCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CkBAIC0zMzksOCArMzU0LDExIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX0FOWSkKKwlpZiAoYWRkcl90eXBlICE9IElQVjZfQUREUl9BTlkpIHsKIAkJc2stPnNrX3VzZXJsb2NrcyB8PSBTT0NLX0JJTkRBRERSX0xPQ0s7CisJCWlmIChhZGRyX3R5cGUgIT0gSVBWNl9BRERSX01BUFBFRCkKKwkJCW5wLT5pcHY2b25seSA9IDE7CisJfQogCWlmIChzbnVtKQogCQlzay0+c2tfdXNlcmxvY2tzIHw9IFNPQ0tfQklORFBPUlRfTE9DSzsKIAlpbmV0LT5zcG9ydCA9IGh0b25zKGluZXQtPm51bSk7CkBAIC04MDMsMjQgKzgyMSwzNCBAQAogCWludCBwcm90bzsKIAlfX3dzdW0gY3N1bTsKIAotCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZigqaXBoKSkpKQorCWlwaCA9IHNrYl9ncm9faGVhZGVyKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlpZiAodW5saWtlbHkoIWlwaCkpCiAJCWdvdG8gb3V0OwogCi0JaXBoID0gaXB2Nl9oZHIoc2tiKTsKLQlfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKTsKKwlza2JfZ3JvX3B1bGwoc2tiLCBzaXplb2YoKmlwaCkpOworCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNrYl9ncm9fb2Zmc2V0KHNrYikpOwogCi0JZmx1c2ggKz0gbnRvaHMoaXBoLT5wYXlsb2FkX2xlbikgIT0gc2tiLT5sZW47CisJZmx1c2ggKz0gbnRvaHMoaXBoLT5wYXlsb2FkX2xlbikgIT0gc2tiX2dyb19sZW4oc2tiKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlwcm90byA9IGlwdjZfZ3NvX3B1bGxfZXh0aGRycyhza2IsIGlwaC0+bmV4dGhkcik7Ci0JaXBoID0gaXB2Nl9oZHIoc2tiKTsKLQlJUFY2X0dST19DQihza2IpLT5wcm90byA9IHByb3RvOworCXByb3RvID0gaXBoLT5uZXh0aGRyOwogCW9wcyA9IHJjdV9kZXJlZmVyZW5jZShpbmV0Nl9wcm90b3NbcHJvdG9dKTsKLQlpZiAoIW9wcyB8fCAhb3BzLT5ncm9fcmVjZWl2ZSkKLQkJZ290byBvdXRfdW5sb2NrOworCWlmICghb3BzIHx8ICFvcHMtPmdyb19yZWNlaXZlKSB7CisJCV9fcHNrYl9wdWxsKHNrYiwgc2tiX2dyb19vZmZzZXQoc2tiKSk7CisJCXByb3RvID0gaXB2Nl9nc29fcHVsbF9leHRoZHJzKHNrYiwgcHJvdG8pOworCQlza2JfZ3JvX3B1bGwoc2tiLCAtc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSk7CisJCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CisJCV9fc2tiX3B1c2goc2tiLCBza2JfZ3JvX29mZnNldChza2IpKTsKKworCQlpZiAoIW9wcyB8fCAhb3BzLT5ncm9fcmVjZWl2ZSkKKwkJCWdvdG8gb3V0X3VubG9jazsKKworCQlpcGggPSBpcHY2X2hkcihza2IpOworCX0KKworCUlQVjZfR1JPX0NCKHNrYiktPnByb3RvID0gcHJvdG87CiAKIAlmbHVzaC0tOwotCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CiAJbmxlbiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTsKIAogCWZvciAocCA9ICpoZWFkOyBwOyBwID0gcC0+bmV4dCkgewpAQCAtODgzLDggKzkxMSw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHY2X3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB2Nl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmZ1bmMgPSBpcHY2X3JjdiwKIAkuZ3NvX3NlbmRfY2hlY2sgPSBpcHY2X2dzb19zZW5kX2NoZWNrLAogCS5nc29fc2VnbWVudCA9IGlwdjZfZ3NvX3NlZ21lbnQsCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCmluZGV4IGYxNzFlOGQuLjhmMDRiZDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L2lwNl9pbnB1dC5jCkBAIC03NSw4ICs3NSw3IEBACiAJaWYgKChza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCB8fAogCSAgICAhaWRldiB8fCB1bmxpa2VseShpZGV2LT5jbmYuZGlzYWJsZV9pcHY2KSkgewogCQlJUDZfSU5DX1NUQVRTX0JIKG5ldCwgaWRldiwgSVBTVEFUU19NSUJfSU5ESVNDQVJEUyk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlnb3RvIG91dDsKKwkJZ290byBkcm9wOwogCX0KIAogCW1lbXNldChJUDZDQihza2IpLCAwLCBzaXplb2Yoc3RydWN0IGluZXQ2X3NrYl9wYXJtKSk7CkBAIC0xNDcsNyArMTQ2LDYgQEAKIGRyb3A6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJa2ZyZWVfc2tiKHNrYik7Ci1vdXQ6CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwppbmRleCA0MGYzMjQ2Li5kMzFkZjBmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCkBAIC0yMTgsOCArMjE4LDcgQEAKIAkJCWlmIChvcHQpCiAJCQkJc29ja19rZnJlZV9zKHNrLCBvcHQsIG9wdC0+dG90X2xlbik7CiAJCQlwa3RvcHQgPSB4Y2hnKCZucC0+cGt0b3B0aW9ucywgTlVMTCk7Ci0JCQlpZiAocGt0b3B0KQotCQkJCWtmcmVlX3NrYihwa3RvcHQpOworCQkJa2ZyZWVfc2tiKHBrdG9wdCk7CiAKIAkJCXNrLT5za19kZXN0cnVjdCA9IGluZXRfc29ja19kZXN0cnVjdDsKIAkJCS8qCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZGlzYy5jIGIvbmV0L2lwdjYvbmRpc2MuYwppbmRleCAzZTI5NzA4Li45ZjA2MWQxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZGlzYy5jCisrKyBiL25ldC9pcHY2L25kaXNjLmMKQEAgLTEwOTUsMTEgKzEwOTUsNyBAQAogCQkmaXB2Nl9oZHIocmEpLT5zYWRkcik7CiAJbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAotCWVyciA9IHJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05EX1VTRVJPUFQsIE5VTEwsCi0JCQkgIEdGUF9BVE9NSUMpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm91dDsKLQorCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX05EX1VTRVJPUFQsIE5VTEwsIEdGUF9BVE9NSUMpOwogCXJldHVybjsKIAogbmxhX3B1dF9mYWlsdXJlOgpAQCAtMTUzOCwxMyArMTUzNCwxMCBAQAogCWlmIChydC0+cnQ2aV9mbGFncyAmIFJURl9HQVRFV0FZKSB7CiAJCU5EX1BSSU5USzIoS0VSTl9XQVJOSU5HCiAJCQkgICAiSUNNUHY2IFJlZGlyZWN0OiBkZXN0aW5hdGlvbiBpcyBub3QgYSBuZWlnaGJvdXIuXG4iKTsKLQkJZHN0X3JlbGVhc2UoZHN0KTsKLQkJcmV0dXJuOworCQlnb3RvIHJlbGVhc2U7CiAJfQotCWlmICgheHJsaW1fYWxsb3coZHN0LCAxKkhaKSkgewotCQlkc3RfcmVsZWFzZShkc3QpOwotCQlyZXR1cm47Ci0JfQorCWlmICgheHJsaW1fYWxsb3coZHN0LCAxKkhaKSkKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKGRldi0+YWRkcl9sZW4pIHsKIAkJcmVhZF9sb2NrX2JoKCZuZWlnaC0+bG9jayk7CkBAIC0xNTcwLDggKzE1NjMsNyBAQAogCQlORF9QUklOVEswKEtFUk5fRVJSCiAJCQkgICAiSUNNUHY2IFJlZGlyZWN0OiAlcygpIGZhaWxlZCB0byBhbGxvY2F0ZSBhbiBza2IuXG4iLAogCQkJICAgX19mdW5jX18pOwotCQlkc3RfcmVsZWFzZShkc3QpOwotCQlyZXR1cm47CisJCWdvdG8gcmVsZWFzZTsKIAl9CiAKIAlza2JfcmVzZXJ2ZShidWZmLCBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKTsKQEAgLTE2MzEsNiArMTYyMywxMCBAQAogCiAJaWYgKGxpa2VseShpZGV2ICE9IE5VTEwpKQogCQlpbjZfZGV2X3B1dChpZGV2KTsKKwlyZXR1cm47CisKK3JlbGVhc2U6CisJZHN0X3JlbGVhc2UoZHN0KTsKIH0KIAogc3RhdGljIHZvaWQgcG5kaXNjX3JlZG8oc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggNTNlYTUxMi4uMjlkNjQzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTk1LDEzICs5NSwxMyBAQAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBJUDZfTkZfTUFUQ0hfSEwKLQl0cmlzdGF0ZSAnImhsIiBtYXRjaCBzdXBwb3J0JworCXRyaXN0YXRlICciaGwiIGhvcGxpbWl0IG1hdGNoIHN1cHBvcnQnCiAJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKLQloZWxwCi0JICBITCBtYXRjaGluZyBhbGxvd3MgeW91IHRvIG1hdGNoIHBhY2tldHMgYmFzZWQgb24gdGhlIGhvcAotCSAgbGltaXQgb2YgdGhlIHBhY2tldC4KLQotCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisJc2VsZWN0IE5FVEZJTFRFUl9YVF9NQVRDSF9ITAorCS0tLWhlbHAtLS0KKwlUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2UKKwkoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0cworCUNPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEwuCiAKIGNvbmZpZyBJUDZfTkZfTUFUQ0hfSVBWNkhFQURFUgogCXRyaXN0YXRlICciaXB2NmhlYWRlciIgSVB2NiBFeHRlbnNpb24gSGVhZGVycyBNYXRjaCcKQEAgLTEzMCw2ICsxMzAsMTUgQEAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCiAjIFRoZSB0YXJnZXRzCitjb25maWcgSVA2X05GX1RBUkdFVF9ITAorCXRyaXN0YXRlICciSEwiIGhvcGxpbWl0IHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJc2VsZWN0IE5FVEZJTFRFUl9YVF9UQVJHRVRfSEwKKwktLS1oZWxwLS0tCisJVGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlCisJKGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMKKwlDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ITC4KKwogY29uZmlnIElQNl9ORl9UQVJHRVRfTE9HCiAJdHJpc3RhdGUgIkxPRyB0YXJnZXQgc3VwcG9ydCIKIAlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KQEAgLTE3MCwyMyArMTc5LDYgQEAKIAogCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBJUDZfTkZfVEFSR0VUX0hMCi0JdHJpc3RhdGUgICdITCAoaG9wbGltaXQpIHRhcmdldCBzdXBwb3J0JwotCWRlcGVuZHMgb24gSVA2X05GX01BTkdMRQotCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWRkcyBhIGBITCcgdGFyZ2V0LCB3aGljaCBlbmFibGVzIHRoZSB1c2VyIHRvIGRlY3JlbWVudAotCSAgdGhlIGhvcGxpbWl0IHZhbHVlIG9mIHRoZSBJUHY2IGhlYWRlciBvciBzZXQgaXQgdG8gYSBnaXZlbiAobG93ZXIpCi0JICB2YWx1ZS4KLQotCSAgV2hpbGUgaXQgaXMgc2FmZSB0byBkZWNyZW1lbnQgdGhlIGhvcGxpbWl0IHZhbHVlLCB0aGlzIG9wdGlvbiBhbHNvCi0JICBlbmFibGVzIGZ1bmN0aW9uYWxpdHkgdG8gaW5jcmVtZW50IGFuZCBzZXQgdGhlIGhvcGxpbWl0IHZhbHVlIG9mIHRoZQotCSAgSVB2NiBoZWFkZXIgdG8gYXJiaXRyYXJ5IHZhbHVlcy4gIFRoaXMgaXMgRVhUUkVNRUxZIERBTkdFUk9VUyBzaW5jZQotCSAgeW91IGNhbiBlYXNpbHkgY3JlYXRlIGltbW9ydGFsIHBhY2tldHMgdGhhdCBsb29wIGZvcmV2ZXIgb24gdGhlCi0JICBuZXR3b3JrLgotCi0JICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIElQNl9ORl9SQVcKIAl0cmlzdGF0ZSAgJ3JhdyB0YWJsZSBzdXBwb3J0IChyZXF1aXJlZCBmb3IgVFJBQ0UpJwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggM2YxN2M5NC4uYWFmYmJhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZQpAQCAtMjAsMTMgKzIwLDExIEBACiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0FIKSArPSBpcDZ0X2FoLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQpICs9IGlwNnRfZXVpNjQubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHKSArPSBpcDZ0X2ZyYWcubwotb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9ITCkgKz0gaXA2dF9obC5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVIpICs9IGlwNnRfaXB2NmhlYWRlci5vCiBvYmotJChDT05GSUdfSVA2X05GX01BVENIX01IKSArPSBpcDZ0X21oLm8KIG9iai0kKENPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUykgKz0gaXA2dF9oYmgubwogb2JqLSQoQ09ORklHX0lQNl9ORl9NQVRDSF9SVCkgKz0gaXA2dF9ydC5vCiAKICMgdGFyZ2V0cwotb2JqLSQoQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwpICs9IGlwNnRfSEwubwogb2JqLSQoQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HKSArPSBpcDZ0X0xPRy5vCiBvYmotJChDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1QpICs9IGlwNnRfUkVKRUNULm8KZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfcXVldWUuYwppbmRleCA1ODU5YzA0Li5iNjkzZjg0IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3F1ZXVlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl9xdWV1ZS5jCkBAIC02NDMsNiArNjQzLDcgQEAKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUHY2IHBhY2tldCBxdWV1ZSBoYW5kbGVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTkVUX1BGX1BST1RPKFBGX05FVExJTkssIE5FVExJTktfSVA2X0ZXKTsKIAogbW9kdWxlX2luaXQoaXA2X3F1ZXVlX2luaXQpOwogbW9kdWxlX2V4aXQoaXA2X3F1ZXVlX2ZpbmkpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggYTMzNDg1ZC4uZTg5Y2ZhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC05OSw3ICs5OSw2IEBACiAJCSB1bnNpZ25lZCBpbnQgKnByb3RvZmYsCiAJCSBpbnQgKmZyYWdvZmYsIGJvb2wgKmhvdGRyb3ApCiB7Ci0Jc2l6ZV90IGk7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiAJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwdjYgPSBpcHY2X2hkcihza2IpOwogCkBAIC0xMjAsMTIgKzExOSw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBMb29rIGZvciBpZm5hbWUgbWF0Y2hlczsgdGhpcyBzaG91bGQgdW5yb2xsIG5pY2VseS4gKi8KLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilpbmRldilbaV0KLQkJCV4gKChjb25zdCB1bnNpZ25lZCBsb25nICopaXA2aW5mby0+aW5pZmFjZSlbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwNmluZm8tPmluaWZhY2VfbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlX2FsaWduZWQoaW5kZXYsIGlwNmluZm8tPmluaWZhY2UsIGlwNmluZm8tPmluaWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIElQNlRfSU5WX1ZJQV9JTikpIHsKIAkJZHByaW50ZigiVklBIGluIG1pc21hdGNoICglcyB2cyAlcykuJXNcbiIsCkBAIC0xMzQsMTEgKzEyOCw3IEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlmb3IgKGkgPSAwLCByZXQgPSAwOyBpIDwgSUZOQU1TSVovc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOyBpKyspIHsKLQkJcmV0IHw9ICgoKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilvdXRkZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgbG9uZyAqKWlwNmluZm8tPm91dGlmYWNlKVtpXSkKLQkJCSYgKChjb25zdCB1bnNpZ25lZCBsb25nICopaXA2aW5mby0+b3V0aWZhY2VfbWFzaylbaV07Ci0JfQorCXJldCA9IGlmbmFtZV9jb21wYXJlX2FsaWduZWQob3V0ZGV2LCBpcDZpbmZvLT5vdXRpZmFjZSwgaXA2aW5mby0+b3V0aWZhY2VfbWFzayk7CiAKIAlpZiAoRldJTlYocmV0ICE9IDAsIElQNlRfSU5WX1ZJQV9PVVQpKSB7CiAJCWRwcmludGYoIlZJQSBvdXQgbWlzbWF0Y2ggKCVzIHZzICVzKS4lc1xuIiwKQEAgLTM3MywxMCArMzYzLDEyIEBACiAJbXRwYXIuZmFtaWx5ICA9IHRncGFyLmZhbWlseSA9IE5GUFJPVE9fSVBWNjsKIAl0Z3Bhci5ob29rbnVtID0gaG9vazsKIAotCXJlYWRfbG9ja19iaCgmdGFibGUtPmxvY2spOwogCUlQX05GX0FTU0VSVCh0YWJsZS0+dmFsaWRfaG9va3MgJiAoMSA8PCBob29rKSk7Ci0JcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwotCXRhYmxlX2Jhc2UgPSAodm9pZCAqKXByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlwcml2YXRlID0gcmN1X2RlcmVmZXJlbmNlKHRhYmxlLT5wcml2YXRlKTsKKwl0YWJsZV9iYXNlID0gcmN1X2RlcmVmZXJlbmNlKHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CisKIAllID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pOwogCiAJLyogRm9yIHJldHVybiBmcm9tIGJ1aWx0aW4gY2hhaW4gKi8KQEAgLTQ3NCw3ICs0NjYsNyBAQAogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKIAkoKHN0cnVjdCBpcDZ0X2VudHJ5ICopdGFibGVfYmFzZSktPmNvbWVmcm9tID0gTkVURklMVEVSX0xJTktfUE9JU09OOwogI2VuZGlmCi0JcmVhZF91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogI2lmZGVmIERFQlVHX0FMTE9XX0FMTAogCXJldHVybiBORl9BQ0NFUFQ7CkBAIC01MjUsNyArNTE3LDkgQEAKIAkJCSAgICAmJiB1bmNvbmRpdGlvbmFsKCZlLT5pcHY2KSkgfHwgdmlzaXRlZCkgewogCQkJCXVuc2lnbmVkIGludCBvbGRwb3MsIHNpemU7CiAKLQkJCQlpZiAodC0+dmVyZGljdCA8IC1ORl9NQVhfVkVSRElDVCAtIDEpIHsKKwkJCQlpZiAoKHN0cmNtcCh0LT50YXJnZXQudS51c2VyLm5hbWUsCisJCQkJCSAgICBJUDZUX1NUQU5EQVJEX1RBUkdFVCkgPT0gMCkgJiYKKwkJCQkgICAgdC0+dmVyZGljdCA8IC1ORl9NQVhfVkVSRElDVCAtIDEpIHsKIAkJCQkJZHVwcmludGYoIm1hcmtfc291cmNlX2NoYWluczogYmFkICIKIAkJCQkJCSJuZWdhdGl2ZSB2ZXJkaWN0ICglaSlcbiIsCiAJCQkJCQkJCXQtPnZlcmRpY3QpOwpAQCAtOTU1LDExICs5NDksNjQgQEAKIAl9CiB9CiAKKy8qIFdlJ3JlIGxhenksIGFuZCBhZGQgdG8gdGhlIGZpcnN0IENQVTsgb3ZlcmZsb3cgd29ya3MgaXRzIGZleSBtYWdpYworICogYW5kIGV2ZXJ5dGhpbmcgaXMgT0suICovCitzdGF0aWMgaW50CithZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKKwkJICAgICB1bnNpZ25lZCBpbnQgKmkpCit7CisJQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7CisKKwkoKmkpKys7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRha2UgdmFsdWVzIGZyb20gY291bnRlcnMgYW5kIGFkZCB0aGVtIGJhY2sgb250byB0aGUgY3VycmVudCBjcHUgKi8KK3N0YXRpYyB2b2lkIHB1dF9jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqdCwKKwkJCSBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgY3B1OworCisJbG9jYWxfYmhfZGlzYWJsZSgpOworCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpID0gMDsKKwlJUDZUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjcHVdLAorCQkJICAgdC0+c2l6ZSwKKwkJCSAgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAorCQkJICAgY291bnRlcnMsCisJCQkgICAmaSk7CisJbG9jYWxfYmhfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit6ZXJvX2VudHJ5X2NvdW50ZXIoc3RydWN0IGlwNnRfZW50cnkgKmUsIHZvaWQgKmFyZykKK3sKKwllLT5jb3VudGVycy5iY250ID0gMDsKKwllLT5jb3VudGVycy5wY250ID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2Nsb25lX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCBjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgY3B1OworCWNvbnN0IHZvaWQgKmxvY19jcHVfZW50cnkgPSBpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOworCisJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQltZW1jcHkobmV3aW5mby0+ZW50cmllc1tjcHVdLCBsb2NfY3B1X2VudHJ5LCBpbmZvLT5zaXplKTsKKwkJSVA2VF9FTlRSWV9JVEVSQVRFKG5ld2luZm8tPmVudHJpZXNbY3B1XSwgbmV3aW5mby0+c2l6ZSwKKwkJCQkgICB6ZXJvX2VudHJ5X2NvdW50ZXIsIE5VTEwpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY291bnRlcnNpemU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKmluZm87CiAKIAkvKiBXZSBuZWVkIGF0b21pYyBzbmFwc2hvdCBvZiBjb3VudGVyczogcmVzdCBkb2Vzbid0IGNoYW5nZQogCSAgIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vyc3BhY2UgZG9lc24ndCBjYXJlCkBAIC05NjgsMTQgKzEwMTUsMjggQEAKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShjb3VudGVyc2l6ZSwgbnVtYV9ub2RlX2lkKCkpOwogCiAJaWYgKGNvdW50ZXJzID09IE5VTEwpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG5vbWVtOwogCi0JLyogRmlyc3QsIHN1bSBjb3VudGVycy4uLiAqLwotCXdyaXRlX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKLQlnZXRfY291bnRlcnMocHJpdmF0ZSwgY291bnRlcnMpOwotCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCWluZm8gPSB4dF9hbGxvY190YWJsZV9pbmZvKHByaXZhdGUtPnNpemUpOworCWlmICghaW5mbykKKwkJZ290byBmcmVlX2NvdW50ZXJzOwogCi0JcmV0dXJuIGNvdW50ZXJzOworCWNsb25lX2NvdW50ZXJzKGluZm8sIHByaXZhdGUpOworCisJbXV0ZXhfbG9jaygmdGFibGUtPmxvY2spOworCXh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KHByaXZhdGUsIGluZm8pOworCXN5bmNocm9uaXplX25ldCgpOwkvKiBXYWl0IHVudGlsIHNtb2tlIGhhcyBjbGVhcmVkICovCisKKwlnZXRfY291bnRlcnMoaW5mbywgY291bnRlcnMpOworCXB1dF9jb3VudGVycyhwcml2YXRlLCBjb3VudGVycyk7CisJbXV0ZXhfdW5sb2NrKCZ0YWJsZS0+bG9jayk7CisKKwl4dF9mcmVlX3RhYmxlX2luZm8oaW5mbyk7CisKKyBmcmVlX2NvdW50ZXJzOgorCXZmcmVlKGNvdW50ZXJzKTsKKyBub21lbToKKwlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIH0KIAogc3RhdGljIGludApAQCAtMTM0MiwyOCArMTQwMyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCi0gKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1hZGRfY291bnRlcl90b19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0jaWYgMAotCWR1cHJpbnRmKCJhZGRfY291bnRlcjogRW50cnkgJXUgJWx1LyVsdSArICVsdS8lbHVcbiIsCi0JCSAqaSwKLQkJIChsb25nIHVuc2lnbmVkIGludCllLT5jb3VudGVycy5wY250LAotCQkgKGxvbmcgdW5zaWduZWQgaW50KWUtPmNvdW50ZXJzLmJjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLnBjbnQsCi0JCSAobG9uZyB1bnNpZ25lZCBpbnQpYWRkbWVbKmldLmJjbnQpOwotI2VuZGlmCi0KLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludAogZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4sCiAJCWludCBjb21wYXQpCkBAIC0xNDI0LDEzICsxNDYzLDE0IEBACiAJCWdvdG8gZnJlZTsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ0LT5sb2NrKTsKIAlwcml2YXRlID0gdC0+cHJpdmF0ZTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyICE9IG51bV9jb3VudGVycykgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja191cF9mcmVlOwogCX0KIAorCXByZWVtcHRfZGlzYWJsZSgpOwogCWkgPSAwOwogCS8qIENob29zZSB0aGUgY29weSB0aGF0IGlzIG9uIG91ciBub2RlICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CkBAIC0xNDM5LDggKzE0NzksOSBAQAogCQkJICBhZGRfY291bnRlcl90b19lbnRyeSwKIAkJCSAgcGFkZGMsCiAJCQkgICZpKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogIHVubG9ja191cF9mcmVlOgotCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKIAl4dF90YWJsZV91bmxvY2sodCk7CiAJbW9kdWxlX3B1dCh0LT5tZSk7CiAgZnJlZToKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0hMLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9ITC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2I1YWRmLi4wMDAwMDAwCi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0hMLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKgotICogSG9wIExpbWl0IG1vZGlmaWNhdGlvbiB0YXJnZXQgZm9yIGlwNnRhYmxlcwotICogTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KLSAqIEJhc2VkIG9uIEhXJ3MgVFRMIG1vZHVsZQotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdOVSBHUEwKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvaXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0hMLmg+Ci0KLU1PRFVMRV9BVVRIT1IoIk1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IElQdjYgSG9wIExpbWl0IGZpZWxkIG1vZGlmaWNhdGlvbiB0YXJnZXQiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHVuc2lnbmVkIGludAotaGxfdGc2KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF90YXJnZXRfcGFyYW0gKnBhcikKLXsKLQlzdHJ1Y3QgaXB2NmhkciAqaXA2aDsKLQljb25zdCBzdHJ1Y3QgaXA2dF9ITF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKLQlpbnQgbmV3X2hsOwotCi0JaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNrYi0+bGVuKSkKLQkJcmV0dXJuIE5GX0RST1A7Ci0KLQlpcDZoID0gaXB2Nl9oZHIoc2tiKTsKLQotCXN3aXRjaCAoaW5mby0+bW9kZSkgewotCQljYXNlIElQNlRfSExfU0VUOgotCQkJbmV3X2hsID0gaW5mby0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVA2VF9ITF9JTkM6Ci0JCQluZXdfaGwgPSBpcDZoLT5ob3BfbGltaXQgKyBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlpZiAobmV3X2hsID4gMjU1KQotCQkJCW5ld19obCA9IDI1NTsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfREVDOgotCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0IC0gaW5mby0+aG9wX2xpbWl0OwotCQkJaWYgKG5ld19obCA8IDApCi0JCQkJbmV3X2hsID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JfQotCi0JaXA2aC0+aG9wX2xpbWl0ID0gbmV3X2hsOwotCi0JcmV0dXJuIFhUX0NPTlRJTlVFOwotfQotCi1zdGF0aWMgYm9vbCBobF90ZzZfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87Ci0KLQlpZiAoaW5mby0+bW9kZSA+IElQNlRfSExfTUFYTU9ERSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKLQkJCWluZm8tPm1vZGUpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChpbmZvLT5tb2RlICE9IElQNlRfSExfU0VUICYmIGluZm8tPmhvcF9saW1pdCA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfSEw6IGluY3JlbWVudC9kZWNyZW1lbnQgZG9lc24ndCAiCi0JCQkibWFrZSBzZW5zZSB3aXRoIHZhbHVlIDBcbiIpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgc3RydWN0IHh0X3RhcmdldCBobF90ZzZfcmVnIF9fcmVhZF9tb3N0bHkgPSB7Ci0JLm5hbWUgCQk9ICJITCIsCi0JLmZhbWlseQkJPSBORlBST1RPX0lQVjYsCi0JLnRhcmdldAkJPSBobF90ZzYsCi0JLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGlwNnRfSExfaW5mbyksCi0JLnRhYmxlCQk9ICJtYW5nbGUiLAotCS5jaGVja2VudHJ5CT0gaGxfdGc2X2NoZWNrLAotCS5tZQkJPSBUSElTX01PRFVMRQotfTsKLQotc3RhdGljIGludCBfX2luaXQgaGxfdGc2X2luaXQodm9pZCkKLXsKLQlyZXR1cm4geHRfcmVnaXN0ZXJfdGFyZ2V0KCZobF90ZzZfcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGhsX3RnNl9leGl0KHZvaWQpCi17Ci0JeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmhsX3RnNl9yZWcpOwotfQotCi1tb2R1bGVfaW5pdChobF90ZzZfaW5pdCk7Ci1tb2R1bGVfZXhpdChobF90ZzZfZXhpdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCmluZGV4IDM3YWRmNWEuLjcwMThjYWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X0xPRy5jCkBAIC00NzcsNyArNDc3LDcgQEAKIAkubWUgCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgaXA2dF9sb2dnZXIgPSB7CitzdGF0aWMgc3RydWN0IG5mX2xvZ2dlciBpcDZ0X2xvZ2dlciBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQk9ICJpcDZ0X0xPRyIsCiAJLmxvZ2ZuCQk9ICZpcDZ0X2xvZ19wYWNrZXQsCiAJLm1lCQk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGwuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X2hsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NjRkY2EuLjAwMDAwMDAKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfaGwuYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qIEhvcCBMaW1pdCBtYXRjaGluZyBtb2R1bGUgKi8KLQotLyogKEMpIDIwMDEtMjAwMiBNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PgotICogQmFzZWQgb24gSFcncyB0dGwgbW9kdWxlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaXB2Ni5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotCi0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9obC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgotCi1NT0RVTEVfQVVUSE9SKCJNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBJUHY2IEhvcCBMaW1pdCBmaWVsZCBtYXRjaCIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgYm9vbCBobF9tdDYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCi17Ci0JY29uc3Qgc3RydWN0IGlwNnRfaGxfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCWNvbnN0IHN0cnVjdCBpcHY2aGRyICppcDZoID0gaXB2Nl9oZHIoc2tiKTsKLQotCXN3aXRjaCAoaW5mby0+bW9kZSkgewotCQljYXNlIElQNlRfSExfRVE6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ID09IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfTkU6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0ICE9IGluZm8tPmhvcF9saW1pdDsKLQkJCWJyZWFrOwotCQljYXNlIElQNlRfSExfTFQ6Ci0JCQlyZXR1cm4gaXA2aC0+aG9wX2xpbWl0IDwgaW5mby0+aG9wX2xpbWl0OwotCQkJYnJlYWs7Ci0JCWNhc2UgSVA2VF9ITF9HVDoKLQkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgPiBpbmZvLT5ob3BfbGltaXQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfaGw6IHVua25vd24gbW9kZSAlZFxuIiwKLQkJCQlpbmZvLT5tb2RlKTsKLQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggaGxfbXQ2X3JlZyBfX3JlYWRfbW9zdGx5ID0gewotCS5uYW1lCQk9ICJobCIsCi0JLmZhbWlseQkJPSBORlBST1RPX0lQVjYsCi0JLm1hdGNoCQk9IGhsX210NiwKLQkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X2hsX2luZm8pLAotCS5tZQkJPSBUSElTX01PRFVMRSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGhsX210Nl9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoKCZobF9tdDZfcmVnKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGhsX210Nl9leGl0KHZvaWQpCi17Ci0JeHRfdW5yZWdpc3Rlcl9tYXRjaCgmaGxfbXQ2X3JlZyk7Ci19Ci0KLW1vZHVsZV9pbml0KGhsX210Nl9pbml0KTsKLW1vZHVsZV9leGl0KGhsX210Nl9leGl0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwppbmRleCA0MGQyZTM2Li5lZjVhMGEzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCkBAIC01NCw3ICs1NCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9maWx0ZXIgPSB7CiAJLm5hbWUJCT0gImZpbHRlciIsCiAJLnZhbGlkX2hvb2tzCT0gRklMVEVSX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfZmlsdGVyLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVDYsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCmluZGV4IGQwYjMxYjIuLmFiMGQzOTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKQEAgLTYwLDcgKzYwLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X21hbmdsZXIgPSB7CiAJLm5hbWUJCT0gIm1hbmdsZSIsCiAJLnZhbGlkX2hvb2tzCT0gTUFOR0xFX1ZBTElEX0hPT0tTLAotCS5sb2NrCQk9IF9fUldfTE9DS19VTkxPQ0tFRChwYWNrZXRfbWFuZ2xlci5sb2NrKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IEFGX0lORVQ2LAogfTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYwppbmRleCAxMDlmYWI2Li40Yjc5MmI2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCkBAIC0zOCw3ICszOCw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSBSQVdfVkFMSURfSE9PS1MsCi0JLmxvY2sgPSBfX1JXX0xPQ0tfVU5MT0NLRUQocGFja2V0X3Jhdy5sb2NrKSwKIAkubWUgPSBUSElTX01PRFVMRSwKIAkuYWYgPSBBRl9JTkVUNiwKIH07CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCmluZGV4IDIwYmM1MmYuLjBlYTM3ZmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCkBAIC01OSw3ICs1OSw2IEBACiBzdGF0aWMgc3RydWN0IHh0X3RhYmxlIHNlY3VyaXR5X3RhYmxlID0gewogCS5uYW1lCQk9ICJzZWN1cml0eSIsCiAJLnZhbGlkX2hvb2tzCT0gU0VDVVJJVFlfVkFMSURfSE9PS1MsCi0JLmxvY2sJCT0gX19SV19MT0NLX1VOTE9DS0VEKHNlY3VyaXR5X3RhYmxlLmxvY2spLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gQUZfSU5FVDYsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKaW5kZXggNzI3Yjk1My4uMmExNWMyZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pcHY2Lmg+CiAKIHN0YXRpYyBib29sIGlwdjZfcGt0X3RvX3R1cGxlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKIAkJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQpAQCAtMzQxLDYgKzM0MiwxMSBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgaXB2Nl9ubGF0dHJfdHVwbGVfc2l6ZSh2b2lkKQoreworCXJldHVybiBubGFfcG9saWN5X2xlbihpcHY2X25sYV9wb2xpY3ksIENUQV9JUF9NQVggKyAxKTsKK30KICNlbmRpZgogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NiBfX3JlYWRfbW9zdGx5ID0gewpAQCAtMzUyLDYgKzM1OCw3IEBACiAJLmdldF9sNHByb3RvCQk9IGlwdjZfZ2V0X2w0cHJvdG8sCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnR1cGxlX3RvX25sYXR0cgk9IGlwdjZfdHVwbGVfdG9fbmxhdHRyLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IGlwdjZfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYXR0cl90b190dXBsZQk9IGlwdjZfbmxhdHRyX3RvX3R1cGxlLAogCS5ubGFfcG9saWN5CQk9IGlwdjZfbmxhX3BvbGljeSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKaW5kZXggNzJkYmI2ZC4uOTkwMzIyNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCkBAIC0xMjYsNiArMTI2LDEwIEBACiAJCXByX2RlYnVnKCJpY21wdjY6IGNhbid0IGNyZWF0ZSBuZXcgY29ubiB3aXRoIHR5cGUgJXVcbiIsCiAJCQkgdHlwZSArIDEyOCk7CiAJCW5mX2N0X2R1bXBfdHVwbGVfaXB2NigmY3QtPnR1cGxlaGFzaFswXS50dXBsZSk7CisJCWlmIChMT0dfSU5WQUxJRChuZl9jdF9uZXQoY3QpLCBJUFBST1RPX0lDTVBWNikpCisJCQluZl9sb2dfcGFja2V0KFBGX0lORVQ2LCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCisJCQkJICAgICAgIm5mX2N0X2ljbXB2NjogaW52YWxpZCBuZXcgd2l0aCB0eXBlICVkICIsCisJCQkJICAgICAgdHlwZSArIDEyOCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAJYXRvbWljX3NldCgmY3QtPnByb3RvLmljbXAuY291bnQsIDApOwpAQCAtMjY1LDYgKzI2OSwxMSBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgaWNtcHY2X25sYXR0cl90dXBsZV9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV9wb2xpY3lfbGVuKGljbXB2Nl9ubGFfcG9saWN5LCBDVEFfUFJPVE9fTUFYICsgMSk7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKQEAgLTI5Niw2ICszMDUsNyBAQAogCS5lcnJvcgkJCT0gaWNtcHY2X2Vycm9yLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19ubGF0dHIJPSBpY21wdjZfdHVwbGVfdG9fbmxhdHRyLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IGljbXB2Nl9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhdHRyX3RvX3R1cGxlCT0gaWNtcHY2X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkJPSBpY21wdjZfbmxhX3BvbGljeSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCmluZGV4IGVkNGQ3OWEuLjA1OGE1ZTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKQEAgLTUyOCwxNCArNTI4LDE0IEBACiAJCWlmICghaXB2Nl9leHRfaGRyKG5leHRoZHIpKSB7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQkJaWYgKGxlbiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBpcHY2X29wdF9oZHIpKSB7Ci0JCQlwcl9kZWJ1ZygidG9vIHNob3J0XG4iKTsKLQkJCXJldHVybiAtMTsKLQkJfQogCQlpZiAobmV4dGhkciA9PSBORVhUSERSX05PTkUpIHsKIAkJCXByX2RlYnVnKCJuZXh0IGhlYWRlciBpcyBub25lXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQorCQlpZiAobGVuIDwgKGludClzaXplb2Yoc3RydWN0IGlwdjZfb3B0X2hkcikpIHsKKwkJCXByX2RlYnVnKCJ0b28gc2hvcnRcbiIpOworCQkJcmV0dXJuIC0xOworCQl9CiAJCWlmIChza2JfY29weV9iaXRzKHNrYiwgc3RhcnQsICZoZHIsIHNpemVvZihoZHIpKSkKIAkJCUJVRygpOwogCQlpZiAobmV4dGhkciA9PSBORVhUSERSX0FVVEgpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKaW5kZXggM2M1NzUxMS4uZTlhYzdhMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jCisrKyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwpAQCAtNDUyLDYgKzQ1Miw3IEBACiBzdGF0aWMgaW50IGlwNl9mcmFnX3JlYXNtKHN0cnVjdCBmcmFnX3F1ZXVlICpmcSwgc3RydWN0IHNrX2J1ZmYgKnByZXYsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKGZxLT5xLm5ldCwgc3RydWN0IG5ldCwgaXB2Ni5mcmFncyk7CiAJc3RydWN0IHNrX2J1ZmYgKmZwLCAqaGVhZCA9IGZxLT5xLmZyYWdtZW50czsKIAlpbnQgICAgcGF5bG9hZF9sZW47CiAJdW5zaWduZWQgaW50IG5ob2ZmOwpAQCAtNTUxLDggKzU1Miw3IEBACiAJCQkJCSAgaGVhZC0+Y3N1bSk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JSVA2X0lOQ19TVEFUU19CSChkZXZfbmV0KGRldiksCi0JCQkgX19pbjZfZGV2X2dldChkZXYpLCBJUFNUQVRTX01JQl9SRUFTTU9LUyk7CisJSVA2X0lOQ19TVEFUU19CSChuZXQsIF9faW42X2Rldl9nZXQoZGV2KSwgSVBTVEFUU19NSUJfUkVBU01PS1MpOwogCXJjdV9yZWFkX3VubG9jaygpOwogCWZxLT5xLmZyYWdtZW50cyA9IE5VTEw7CiAJcmV0dXJuIDE7CkBAIC01NjYsOCArNTY2LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgImlwNl9mcmFnX3JlYXNtOiBubyBtZW1vcnkgZm9yIHJlYXNzZW1ibHlcbiIpOwogb3V0X2ZhaWw6CiAJcmN1X3JlYWRfbG9jaygpOwotCUlQNl9JTkNfU1RBVFNfQkgoZGV2X25ldChkZXYpLAotCQkJIF9faW42X2Rldl9nZXQoZGV2KSwgSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CisJSVA2X0lOQ19TVEFUU19CSChuZXQsIF9faW42X2Rldl9nZXQoZGV2KSwgSVBTVEFUU19NSUJfUkVBU01GQUlMUyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggOWM1NzQyMy4uMTM5NGRkYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC05OCw3ICs5OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcDZfZHN0X29wc190ZW1wbGF0ZSA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVUNiwKLQkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKKwkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmdjCQkJPQlpcDZfZHN0X2djLAogCS5nY190aHJlc2gJCT0JMTAyNCwKIAkuY2hlY2sJCQk9CWlwNl9kc3RfY2hlY2ssCkBAIC0xMTcsNyArMTE3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkc3Rfb3BzIGlwNl9kc3RfYmxhY2tob2xlX29wcyA9IHsKIAkuZmFtaWx5CQkJPQlBRl9JTkVUNiwKLQkucHJvdG9jb2wJCT0JX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KSwKKwkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmRlc3Ryb3kJCT0JaXA2X2RzdF9kZXN0cm95LAogCS5jaGVjawkJCT0JaXA2X2RzdF9jaGVjaywKIAkudXBkYXRlX3BtdHUJCT0JaXA2X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dSwKQEAgLTI0MDAsOCArMjQwMCw5IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBuZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY2X1JPVVRFLAotCQkJICBpbmZvLT5ubGgsIGdmcF9hbnkoKSk7CisJcnRubF9ub3RpZnkoc2tiLCBuZXQsIGluZm8tPnBpZCwgUlROTEdSUF9JUFY2X1JPVVRFLAorCQkgICAgaW5mby0+bmxoLCBnZnBfYW55KCkpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9JUFY2X1JPVVRFLCBlcnIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc2l0LmMgYi9uZXQvaXB2Ni9zaXQuYwppbmRleCBkMzQ2N2U1Li42NjRhYjgyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zaXQuYworKysgYi9uZXQvaXB2Ni9zaXQuYwpAQCAtMTg4LDkgKzE4OCw5IEBACiAJfQogCiAJbnQgPSBuZXRkZXZfcHJpdihkZXYpOwotCWlwaXA2X3R1bm5lbF9pbml0KGRldik7CiAKIAludC0+cGFybXMgPSAqcGFybXM7CisJaXBpcDZfdHVubmVsX2luaXQoZGV2KTsKIAogCWlmIChwYXJtcy0+aV9mbGFncyAmIFNJVF9JU0FUQVApCiAJCWRldi0+cHJpdl9mbGFncyB8PSBJRkZfSVNBVEFQOwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJaWYgKHQtPnBhcm1zLmlwaC50dGwgPT0gMCAmJiB0eXBlID09IElDTVBfVElNRV9FWENFRURFRCkKIAkJZ290byBvdXQ7CiAKLQlpZiAoamlmZmllcyAtIHQtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKQorCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0LT5lcnJfdGltZSArIElQVFVOTkVMX0VSUl9USU1FTykpCiAJCXQtPmVycl9jb3VudCsrOwogCWVsc2UKIAkJdC0+ZXJyX2NvdW50ID0gMTsKQEAgLTY1OCw3ICs2NTgsOCBAQAogCX0KIAogCWlmICh0dW5uZWwtPmVycl9jb3VudCA+IDApIHsKLQkJaWYgKGppZmZpZXMgLSB0dW5uZWwtPmVycl90aW1lIDwgSVBUVU5ORUxfRVJSX1RJTUVPKSB7CisJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLAorCQkJCXR1bm5lbC0+ZXJyX3RpbWUgKyBJUFRVTk5FTF9FUlJfVElNRU8pKSB7CiAJCQl0dW5uZWwtPmVycl9jb3VudC0tOwogCQkJZHN0X2xpbmtfZmFpbHVyZShza2IpOwogCQl9IGVsc2UKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IGU1Yjg1ZDQuLjRiNWFhMTggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtNTMzLDggKzUzMyw3IEBACiAKIHN0YXRpYyB2b2lkIHRjcF92Nl9yZXFza19kZXN0cnVjdG9yKHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSkKIHsKLQlpZiAoaW5ldDZfcnNrKHJlcSktPnBrdG9wdHMpCi0JCWtmcmVlX3NrYihpbmV0Nl9yc2socmVxKS0+cGt0b3B0cyk7CisJa2ZyZWVfc2tiKGluZXQ2X3JzayhyZXEpLT5wa3RvcHRzKTsKIH0KIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCkBAIC05NDgsNyArOTQ3LDcgQEAKIAogCXN3aXRjaCAoc2tiLT5pcF9zdW1tZWQpIHsKIAljYXNlIENIRUNLU1VNX0NPTVBMRVRFOgotCQlpZiAoIXRjcF92Nl9jaGVjayhza2ItPmxlbiwgJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLAorCQlpZiAoIXRjcF92Nl9jaGVjayhza2JfZ3JvX2xlbihza2IpLCAmaXBoLT5zYWRkciwgJmlwaC0+ZGFkZHIsCiAJCQkJICBza2ItPmNzdW0pKSB7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJYnJlYWs7CkBAIC0xNjExLDggKzE2MTAsNyBAQAogCQl9CiAJfQogCi0JaWYgKG9wdF9za2IpCi0JCWtmcmVlX3NrYihvcHRfc2tiKTsKKwlrZnJlZV9za2Iob3B0X3NrYik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggODRiMWEyOS4uNjg0MmRkMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTQ5LDYgKzQ5LDM0IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlICJ1ZHBfaW1wbC5oIgogCitpbnQgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc29jayAqc2syKQoreworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2tfcmN2X3NhZGRyNiA9ICZpbmV0Nl9zayhzayktPnJjdl9zYWRkcjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrMl9yY3Zfc2FkZHI2ID0gaW5ldDZfcmN2X3NhZGRyKHNrMik7CisJaW50IHNrX2lwdjZvbmx5ID0gaXB2Nl9vbmx5X3NvY2soc2spOworCWludCBzazJfaXB2Nm9ubHkgPSBpbmV0X3Y2X2lwdjZvbmx5KHNrMik7CisJaW50IGFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKHNrX3Jjdl9zYWRkcjYpOworCWludCBhZGRyX3R5cGUyID0gc2syX3Jjdl9zYWRkcjYgPyBpcHY2X2FkZHJfdHlwZShzazJfcmN2X3NhZGRyNikgOiBJUFY2X0FERFJfTUFQUEVEOworCisJLyogaWYgYm90aCBhcmUgbWFwcGVkLCB0cmVhdCBhcyBJUHY0ICovCisJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfTUFQUEVEICYmIGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX01BUFBFRCkKKwkJcmV0dXJuIGlwdjRfcmN2X3NhZGRyX2VxdWFsKHNrLCBzazIpOworCisJaWYgKGFkZHJfdHlwZTIgPT0gSVBWNl9BRERSX0FOWSAmJgorCSAgICAhKHNrMl9pcHY2b25seSAmJiBhZGRyX3R5cGUgPT0gSVBWNl9BRERSX01BUFBFRCkpCisJCXJldHVybiAxOworCisJaWYgKGFkZHJfdHlwZSA9PSBJUFY2X0FERFJfQU5ZICYmCisJICAgICEoc2tfaXB2Nm9ubHkgJiYgYWRkcl90eXBlMiA9PSBJUFY2X0FERFJfTUFQUEVEKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoc2syX3Jjdl9zYWRkcjYgJiYKKwkgICAgaXB2Nl9hZGRyX2VxdWFsKHNrX3Jjdl9zYWRkcjYsIHNrMl9yY3Zfc2FkZHI2KSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHVkcF92Nl9nZXRfcG9ydChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIHNob3J0IHNudW0pCiB7CiAJcmV0dXJuIHVkcF9saWJfZ2V0X3BvcnQoc2ssIHNudW0sIGlwdjZfcmN2X3NhZGRyX2VxdWFsKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKaW5kZXggOTdhYjA2OC4uYjRiMTZhNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKKysrIGIvbmV0L2lwdjYveGZybTZfcG9saWN5LmMKQEAgLTI3Miw3ICsyNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgeGZybTZfZHN0X29wcyA9IHsKIAkuZmFtaWx5ID0JCUFGX0lORVQ2LAotCS5wcm90b2NvbCA9CQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpLAorCS5wcm90b2NvbCA9CQljcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKIAkuZ2MgPQkJCXhmcm02X2dhcmJhZ2VfY29sbGVjdCwKIAkudXBkYXRlX3BtdHUgPQkJeGZybTZfdXBkYXRlX3BtdHUsCiAJLmRlc3Ryb3kgPQkJeGZybTZfZHN0X2Rlc3Ryb3ksCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwppbmRleCAwZTY4NWIwLi5mNDE3Yjc3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKIAkJZHN0W2NvdW50W2NsYXNzW2ldIC0gMV0rK10gPSBzcmNbaV07Ci0JCXNyY1tpXSA9IDA7CisJCXNyY1tpXSA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB4L2FmX2lweC5jIGIvbmV0L2lweC9hZl9pcHguYwppbmRleCBiNmU3MGY5Li4xNjI3MDUwIDEwMDY0NAotLS0gYS9uZXQvaXB4L2FmX2lweC5jCisrKyBiL25ldC9pcHgvYWZfaXB4LmMKQEAgLTE5NTgsMTMgKzE5NTgsMTMgQEAKIAogU09DS09QU19XUkFQKGlweF9kZ3JhbSwgUEZfSVBYKTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpcHhfODAyM19wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMl8zKSwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4XzgwMjNfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF84MDJfMyksCiAJLmZ1bmMJCT0gaXB4X3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXB4X2RpeF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQkJPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQWCksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlweF9kaXhfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQkJPSBjcHVfdG9fYmUxNihFVEhfUF9JUFgpLAogCS5mdW5jCQk9IGlweF9yY3YsCiB9OwogCkBAIC0xOTc1LDE1ICsxOTc1LDE1IEBACiBleHRlcm4gc3RydWN0IGRhdGFsaW5rX3Byb3RvICptYWtlX0VJSV9jbGllbnQodm9pZCk7CiBleHRlcm4gdm9pZCBkZXN0cm95X0VJSV9jbGllbnQoc3RydWN0IGRhdGFsaW5rX3Byb3RvICopOwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBpcHhfODAyMl90eXBlID0gMHhFMDsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGlweF9zbmFwX2lkWzVdID0geyAweDAsIDB4MCwgMHgwLCAweDgxLCAweDM3IH07Ci1zdGF0aWMgY2hhciBpcHhfRUlJX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGlweF84MDIyX3R5cGUgPSAweEUwOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaXB4X3NuYXBfaWRbNV0gPSB7IDB4MCwgMHgwLCAweDAsIDB4ODEsIDB4MzcgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGlweF9FSUlfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIklQWDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGggRXRoZXJuZXQgSUlcbiI7Ci1zdGF0aWMgY2hhciBpcHhfODAyM19lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBpcHhfODAyM19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuM1xuIjsKLXN0YXRpYyBjaGFyIGlweF9sbGNfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgaXB4X2xsY19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiSVBYOiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCA4MDIuMlxuIjsKLXN0YXRpYyBjaGFyIGlweF9zbmFwX2Vycl9tc2dbXSBfX2luaXRkYXRhID0KK3N0YXRpYyBjb25zdCBjaGFyIGlweF9zbmFwX2Vycl9tc2dbXSBfX2luaXRjb25zdCA9CiAJS0VSTl9DUklUICJJUFg6IFVuYWJsZSB0byByZWdpc3RlciB3aXRoIFNOQVBcbiI7CiAKIHN0YXRpYyBpbnQgX19pbml0IGlweF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmRhX2RldmljZS5jIGIvbmV0L2lyZGEvaXJkYV9kZXZpY2UuYwppbmRleCBlYTMxOWUzLi5iZjkyZTE0IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmRhX2RldmljZS5jCisrKyBiL25ldC9pcmRhL2lyZGFfZGV2aWNlLmMKQEAgLTE0OSwxMyArMTQ5LDE0IEBACiAKIAlJUkRBX0RFQlVHKDIsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpZiAoIWRldi0+ZG9faW9jdGwpIHsKKwlpZiAoIWRldi0+bmV0ZGV2X29wcy0+bmRvX2RvX2lvY3RsKSB7CiAJCUlSREFfRVJST1IoIiVzOiBkb19pb2N0bCBub3QgaW1wbC4gYnkgZGV2aWNlIGRyaXZlclxuIiwKIAkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXJldCA9IGRldi0+ZG9faW9jdGwoZGV2LCAoc3RydWN0IGlmcmVxICopICZyZXEsIFNJT0NHUkVDRUlWSU5HKTsKKwlyZXQgPSAoZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwpKGRldiwgKHN0cnVjdCBpZnJlcSAqKSAmcmVxLAorCQkJCQkgICAgICBTSU9DR1JFQ0VJVklORyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V0aC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKaW5kZXggMDUxMTJiZS4uNzI0YmNmOSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMKQEAgLTQ1LDYgKzQ1LDE2IEBACiBzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0KCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXJsYW5fZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcmxhbl9ldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gICAgICAgICAgICAgICA9IGlybGFuX2V0aF9vcGVuLAorCS5uZG9fc3RvcCAgICAgICAgICAgICAgID0gaXJsYW5fZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICAJPSBpcmxhbl9ldGhfeG1pdCwKKwkubmRvX2dldF9zdGF0cwkgICAgICAgID0gaXJsYW5fZXRoX2dldF9zdGF0cywKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGlybGFuX2V0aF9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAorfTsKKwogLyoKICAqIEZ1bmN0aW9uIGlybGFuX2V0aF9zZXR1cCAoZGV2KQogICoKQEAgLTUzLDE0ICs2MywxMSBAQAogICovCiBzdGF0aWMgdm9pZCBpcmxhbl9ldGhfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkZXYtPm9wZW4gICAgICAgICAgICAgICA9IGlybGFuX2V0aF9vcGVuOwotCWRldi0+c3RvcCAgICAgICAgICAgICAgID0gaXJsYW5fZXRoX2Nsb3NlOwotCWRldi0+aGFyZF9zdGFydF94bWl0ICAgID0gaXJsYW5fZXRoX3htaXQ7Ci0JZGV2LT5nZXRfc3RhdHMJICAgICAgICA9IGlybGFuX2V0aF9nZXRfc3RhdHM7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpcmxhbl9ldGhfc2V0X211bHRpY2FzdF9saXN0OworCWV0aGVyX3NldHVwKGRldik7CisKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmlybGFuX2V0aF9uZXRkZXZfb3BzOwogCWRldi0+ZGVzdHJ1Y3RvcgkJPSBmcmVlX25ldGRldjsKIAotCWV0aGVyX3NldHVwKGRldik7CiAKIAkvKgogCSAqIExldHMgZG8gYWxsIHF1ZXVlaW5nIGluIElyVFRQIGluc3RlYWQgb2YgdGhpcyBkZXZpY2UgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJtb2QuYyBiL25ldC9pcmRhL2lybW9kLmMKaW5kZXggNGM0ODdhOC4uMzAzYTY4ZCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJtb2QuYworKysgYi9uZXQvaXJkYS9pcm1vZC5jCkBAIC01NSw4ICs1NSw4IEBACiAvKiBQYWNrZXQgdHlwZSBoYW5kbGVyLgogICogVGVsbCB0aGUga2VybmVsIGhvdyBJckRBIHBhY2tldHMgc2hvdWxkIGJlIGhhbmRsZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgaXJkYV9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZQk9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVJEQSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGlyZGFfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZQk9IGNwdV90b19iZTE2KEVUSF9QX0lSREEpLAogCS5mdW5jCT0gaXJsYXBfZHJpdmVyX3JjdiwJLyogUGFja2V0IHR5cGUgaGFuZGxlciBpcmxhcF9mcmFtZS5jICovCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXVjdi9hZl9pdWN2LmMgYi9uZXQvaXVjdi9hZl9pdWN2LmMKaW5kZXggZWI4YTJhMC4uNDllNzg2NSAxMDA2NDQKLS0tIGEvbmV0L2l1Y3YvYWZfaXVjdi5jCisrKyBiL25ldC9pdWN2L2FmX2l1Y3YuYwpAQCAtMTE3MSw4ICsxMTcxLDcgQEAKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0LT5sb2NrLCBmbGFncyk7CiAKLQkJaWYgKHRoaXMpCi0JCQlrZnJlZV9za2IodGhpcyk7CisJCWtmcmVlX3NrYih0aGlzKTsKIAl9CiAJQlVHX09OKCF0aGlzKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggN2RjYmRlMy4uNjQzYzFiZSAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC0zMTMsOCArMzEzLDcgQEAKIAlpZiAob25lX3NrICE9IE5VTEwpCiAJCWVyciA9IHBma2V5X2Jyb2FkY2FzdF9vbmUoc2tiLCAmc2tiMiwgYWxsb2NhdGlvbiwgb25lX3NrKTsKIAotCWlmIChza2IyKQotCQlrZnJlZV9za2Ioc2tiMik7CisJa2ZyZWVfc2tiKHNrYjIpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBlcnI7CiB9CkBAIC0zNTczLDggKzM1NzIsNyBAQAogb3V0OgogCWlmIChlcnIgJiYgaGRyICYmIHBma2V5X2Vycm9yKGhkciwgZXJyLCBzaykgPT0gMCkKIAkJZXJyID0gMDsKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAogCXJldHVybiBlcnIgPyA6IGxlbjsKIH0KZGlmZiAtLWdpdCBhL25ldC9sbGMvYWZfbGxjLmMgYi9uZXQvbGxjL2FmX2xsYy5jCmluZGV4IDU2ZmQ4NWEuLmZlYmFlNzAgMTAwNjQ0Ci0tLSBhL25ldC9sbGMvYWZfbGxjLmMKKysrIGIvbmV0L2xsYy9hZl9sbGMuYwpAQCAtMTExOCwxMSArMTExOCwxMSBAQAogCS5zZW5kcGFnZSAgICA9IHNvY2tfbm9fc2VuZHBhZ2UsCiB9OwogCi1zdGF0aWMgY2hhciBsbGNfcHJvY19lcnJfbXNnW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY29uc3QgY2hhciBsbGNfcHJvY19lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiTExDOiBVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIHByb2NfZnMgZW50cmllc1xuIjsKLXN0YXRpYyBjaGFyIGxsY19zeXNjdGxfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3N5c2N0bF9lcnJfbXNnW10gX19pbml0Y29uc3QgPQogCUtFUk5fQ1JJVCAiTExDOiBVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIHN5c2N0bCBlbnRyaWVzXG4iOwotc3RhdGljIGNoYXIgbGxjX3NvY2tfZXJyX21zZ1tdIF9faW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IGNoYXIgbGxjX3NvY2tfZXJyX21zZ1tdIF9faW5pdGNvbnN0ID0KIAlLRVJOX0NSSVQgIkxMQzogVW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBuZXR3b3JrIGZhbWlseVxuIjsKIAogc3RhdGljIGludCBfX2luaXQgbGxjMl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb25uLmMgYi9uZXQvbGxjL2xsY19jb25uLmMKaW5kZXggNWM2ZDg5Yy4uMzQ3NzYyNCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29ubi5jCisrKyBiL25ldC9sbGMvbGxjX2Nvbm4uYwpAQCAtMzMyLDggKzMzMiw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcGR1X3BvcyAmJiBpIDwgcV9sZW47IGkrKykgewogCQlza2IgPSBza2JfZGVxdWV1ZSgmbGxjLT5wZHVfdW5hY2tfcSk7Ci0JCWlmIChza2IpCi0JCQlrZnJlZV9za2Ioc2tiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJCW5icl9hY2tlZCsrOwogCX0KIG91dDoKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2NvcmUuYyBiL25ldC9sbGMvbGxjX2NvcmUuYwppbmRleCA1MGQ1YjEwLi5mZjRjMGFiIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19jb3JlLmMKKysrIGIvbmV0L2xsYy9sbGNfY29yZS5jCkBAIC0xNDcsMTMgKzE0NywxMyBAQAogCWtmcmVlKHNhcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGxjX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDJfMiksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY19wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfODAyXzIpLAogCS5mdW5jID0gbGxjX3JjdiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgbGxjX3RyX3BhY2tldF90eXBlID0gewotCS50eXBlID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9UUl84MDJfMiksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxsY190cl9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfVFJfODAyXzIpLAogCS5mdW5jID0gbGxjX3JjdiwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZSBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQppbmRleCA3ZDQ5NzFhLi4wZTNhYjg4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUKKysrIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCkBAIC04LDEzICs4LDE1IEBACiAJd2VwLm8gXAogCXdwYS5vIFwKIAlzY2FuLm8gXAotCWh0Lm8gXAorCWh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXAorCWlic3MubyBcCiAJbWxtZS5vIFwKIAlpZmFjZS5vIFwKIAlyYXRlLm8gXAogCW1pY2hhZWwubyBcCiAJdGtpcC5vIFwKIAlhZXNfY2NtLm8gXAorCWFlc19jbWFjLm8gXAogCWNmZy5vIFwKIAlyeC5vIFwKIAlzcGVjdG1nbXQubyBcCkBAIC0zNyw2ICszOSw4IEBACiAJbWVzaF9wbGluay5vIFwKIAltZXNoX2h3bXAubwogCittYWM4MDIxMS0kKENPTkZJR19QTSkgKz0gcG0ubworCiAjIG9iamVjdHMgZm9yIFBJRCBhbGdvcml0aG0KIHJjODAyMTFfcGlkLXkgOj0gcmM4MDIxMV9waWRfYWxnby5vCiByYzgwMjExX3BpZC0kKENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTKSArPSByYzgwMjExX3BpZF9kZWJ1Z2ZzLm8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY21hYy5jIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QwOTdiMwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9hZXNfY21hYy5jCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQUVTLTEyOC1DTUFDIHdpdGggVExlbiAxNiBmb3IgSUVFRSA4MDIuMTF3IEJJUAorICogQ29weXJpZ2h0IDIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImtleS5oIgorI2luY2x1ZGUgImFlc19jbWFjLmgiCisKKyNkZWZpbmUgQUVTX0JMT0NLX1NJWkUgMTYKKyNkZWZpbmUgQUVTX0NNQUNfS0VZX0xFTiAxNgorI2RlZmluZSBDTUFDX1RMRU4gOCAvKiBDTUFDIFRMZW4gPSA2NCBiaXRzICg4IG9jdGV0cykgKi8KKyNkZWZpbmUgQUFEX0xFTiAyMAorCisKK3N0YXRpYyB2b2lkIGdmX211bHgodTggKnBhZCkKK3sKKwlpbnQgaSwgY2Fycnk7CisKKwljYXJyeSA9IHBhZFswXSAmIDB4ODA7CisJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFIC0gMTsgaSsrKQorCQlwYWRbaV0gPSAocGFkW2ldIDw8IDEpIHwgKHBhZFtpICsgMV0gPj4gNyk7CisJcGFkW0FFU19CTE9DS19TSVpFIC0gMV0gPDw9IDE7CisJaWYgKGNhcnJ5KQorCQlwYWRbQUVTX0JMT0NLX1NJWkUgLSAxXSBePSAweDg3OworfQorCisKK3N0YXRpYyB2b2lkIGFlc18xMjhfY21hY192ZWN0b3Ioc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsCisJCQkJc2l6ZV90IG51bV9lbGVtLAorCQkJCWNvbnN0IHU4ICphZGRyW10sIGNvbnN0IHNpemVfdCAqbGVuLCB1OCAqbWFjKQoreworCXU4ICpjYmMsICpwYWQ7CisJY29uc3QgdTggKnBvcywgKmVuZDsKKwlzaXplX3QgaSwgZSwgbGVmdCwgdG90YWxfbGVuOworCisJY2JjID0gc2NyYXRjaDsKKwlwYWQgPSBzY3JhdGNoICsgQUVTX0JMT0NLX1NJWkU7CisKKwltZW1zZXQoY2JjLCAwLCBBRVNfQkxPQ0tfU0laRSk7CisKKwl0b3RhbF9sZW4gPSAwOworCWZvciAoZSA9IDA7IGUgPCBudW1fZWxlbTsgZSsrKQorCQl0b3RhbF9sZW4gKz0gbGVuW2VdOworCWxlZnQgPSB0b3RhbF9sZW47CisKKwllID0gMDsKKwlwb3MgPSBhZGRyWzBdOworCWVuZCA9IHBvcyArIGxlblswXTsKKworCXdoaWxlIChsZWZ0ID49IEFFU19CTE9DS19TSVpFKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRTsgaSsrKSB7CisJCQljYmNbaV0gXj0gKnBvcysrOworCQkJaWYgKHBvcyA+PSBlbmQpIHsKKwkJCQllKys7CisJCQkJcG9zID0gYWRkcltlXTsKKwkJCQllbmQgPSBwb3MgKyBsZW5bZV07CisJCQl9CisJCX0KKwkJaWYgKGxlZnQgPiBBRVNfQkxPQ0tfU0laRSkKKwkJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBjYmMsIGNiYyk7CisJCWxlZnQgLT0gQUVTX0JMT0NLX1NJWkU7CisJfQorCisJbWVtc2V0KHBhZCwgMCwgQUVTX0JMT0NLX1NJWkUpOworCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBwYWQsIHBhZCk7CisJZ2ZfbXVseChwYWQpOworCisJaWYgKGxlZnQgfHwgdG90YWxfbGVuID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGxlZnQ7IGkrKykgeworCQkJY2JjW2ldIF49ICpwb3MrKzsKKwkJCWlmIChwb3MgPj0gZW5kKSB7CisJCQkJZSsrOworCQkJCXBvcyA9IGFkZHJbZV07CisJCQkJZW5kID0gcG9zICsgbGVuW2VdOworCQkJfQorCQl9CisJCWNiY1tsZWZ0XSBePSAweDgwOworCQlnZl9tdWx4KHBhZCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFFU19CTE9DS19TSVpFOyBpKyspCisJCXBhZFtpXSBePSBjYmNbaV07CisJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIHBhZCwgcGFkKTsKKwltZW1jcHkobWFjLCBwYWQsIENNQUNfVExFTik7Cit9CisKKwordm9pZCBpZWVlODAyMTFfYWVzX2NtYWMoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsIGNvbnN0IHU4ICphYWQsCisJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQoreworCWNvbnN0IHU4ICphZGRyWzNdOworCXNpemVfdCBsZW5bM107CisJdTggemVyb1tDTUFDX1RMRU5dOworCisJbWVtc2V0KHplcm8sIDAsIENNQUNfVExFTik7CisJYWRkclswXSA9IGFhZDsKKwlsZW5bMF0gPSBBQURfTEVOOworCWFkZHJbMV0gPSBkYXRhOworCWxlblsxXSA9IGRhdGFfbGVuIC0gQ01BQ19UTEVOOworCWFkZHJbMl0gPSB6ZXJvOworCWxlblsyXSA9IENNQUNfVExFTjsKKworCWFlc18xMjhfY21hY192ZWN0b3IodGZtLCBzY3JhdGNoLCAzLCBhZGRyLCBsZW4sIG1pYyk7Cit9CisKKworc3RydWN0IGNyeXB0b19jaXBoZXIgKiBpZWVlODAyMTFfYWVzX2NtYWNfa2V5X3NldHVwKGNvbnN0IHU4IGtleVtdKQoreworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm07CisKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfY2lwaGVyKCJhZXMiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHRmbSkpCisJCXJldHVybiBOVUxMOworCisJY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtLCBrZXksIEFFU19DTUFDX0tFWV9MRU4pOworCisJcmV0dXJuIHRmbTsKK30KKworCit2b2lkIGllZWU4MDIxMV9hZXNfY21hY19rZXlfZnJlZShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQoreworCWlmICh0Zm0pCisJCWNyeXB0b19mcmVlX2NpcGhlcih0Zm0pOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2Flc19jbWFjLmggYi9uZXQvbWFjODAyMTEvYWVzX2NtYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWI5YTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmgKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LCBKb3VuaSBNYWxpbmVuIDxqQHcxLmZpPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBBRVNfQ01BQ19ICisjZGVmaW5lIEFFU19DTUFDX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorCitzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqIGllZWU4MDIxMV9hZXNfY21hY19rZXlfc2V0dXAoY29uc3QgdTgga2V5W10pOwordm9pZCBpZWVlODAyMTFfYWVzX2NtYWMoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgdTggKnNjcmF0Y2gsIGNvbnN0IHU4ICphYWQsCisJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKTsKK3ZvaWQgaWVlZTgwMjExX2Flc19jbWFjX2tleV9mcmVlKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0pOworCisjZW5kaWYgLyogQUVTX0NNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy1yeC5jIGIvbmV0L21hYzgwMjExL2FnZy1yeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjU2ZDgzMGIKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKQEAgLTAsMCArMSwzMTAgQEAKKy8qCisgKiBIVCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+CisgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA4LCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisKK3ZvaWQgX19pZWVlODAyMTFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgICB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CisJaW50IGk7CisKKwkvKiBjaGVjayBpZiBUSUQgaXMgaW4gb3BlcmF0aW9uYWwgc3RhdGUgKi8KKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSAhPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPQorCQlIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLIHwKKwkJKGluaXRpYXRvciA8PCBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUKTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJSeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAorCSAgICAgICBzdGEtPnN0YS5hZGRyLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1JYX1NUT1AsCisJCQkJICAgICAmc3RhLT5zdGEsIHRpZCwgTlVMTCkpCisJCXByaW50ayhLRVJOX0RFQlVHICJIVyBwcm9ibGVtIC0gY2FuIG5vdCBzdG9wIHJ4ICIKKwkJCQkiYWdncmVnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKKworCS8qIHNodXRkb3duIHRpbWVyIGhhcyBub3QgZXhwaXJlZCAqLworCWlmIChpbml0aWF0b3IgIT0gV0xBTl9CQUNLX1RJTUVSKQorCQlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKKworCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBzZWxmIGdlbmVyYXRlZCBhZ2dyZWdhdGlvbiBoYWx0ICovCisJaWYgKGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfUkVDSVBJRU5UIHx8IGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfVElNRVIpCisJCWllZWU4MDIxMV9zZW5kX2RlbGJhKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsCisJCQkJICAgICB0aWQsIDAsIHJlYXNvbik7CisKKwkvKiBmcmVlIHRoZSByZW9yZGVyaW5nIGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPmJ1Zl9zaXplOyBpKyspIHsKKwkJaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0pIHsKKwkJCS8qIHJlbGVhc2UgdGhlIHJlb3JkZXJlZCBmcmFtZXMgKi8KKwkJCWRldl9rZnJlZV9za2Ioc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSk7CisJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnN0b3JlZF9tcGR1X251bS0tOworCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1ZltpXSA9IE5VTEw7CisJCX0KKwl9CisKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisJLyogZnJlZSByZXNvdXJjZXMgKi8KKwlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmKTsKKworCWlmICghc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zaHV0ZG93bikgeworCQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOworCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0gPSBOVUxMOworCX0KKworCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9IEhUX0FHR19TVEFURV9JRExFOworCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworfQorCit2b2lkIGllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsCisJCQkJCXUxNiBpbml0aWF0b3IsIHUxNiByZWFzb24pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisKKwkvKiBzdG9wIEhXIFJ4IGFnZ3JlZ2F0aW9uLiBhbXBkdV9hY3Rpb24gZXhpc3RlbmNlCisJICogYWxyZWFkeSB2ZXJpZmllZCBpbiBzZXNzaW9uIGluaXQgc28gd2UgYWRkIHRoZSBCVUdfT04gKi8KKwlCVUdfT04oIWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbik7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlpZiAoIXN0YSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCV9faWVlZTgwMjExX3N0b3BfcnhfYmFfc2Vzc2lvbihzdGEsIHRpZCwgaW5pdGlhdG9yLCByZWFzb24pOworCisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKKy8qCisgKiBBZnRlciBhY2NlcHRpbmcgdGhlIEFkZEJBIFJlcXVlc3Qgd2UgYWN0aXZhdGVkIGEgdGltZXIsCisgKiByZXNldHRpbmcgaXQgYWZ0ZXIgZWFjaCBmcmFtZSB0aGF0IGFycml2ZXMgZnJvbSB0aGUgb3JpZ2luYXRvci4KKyAqIGlmIHRoaXMgdGltZXIgZXhwaXJlcyBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbiB3aWxsIGJlIGV4ZWN1dGVkLgorICovCitzdGF0aWMgdm9pZCBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJLyogbm90IGFuIGVsZWdhbnQgZGV0b3VyLCBidXQgdGhlcmUgaXMgbm8gY2hvaWNlIGFzIHRoZSB0aW1lciBwYXNzZXMKKwkgKiBvbmx5IG9uZSBhcmd1bWVudCwgYW5kIHZhcmlvdXMgc3RhX2luZm8gYXJlIG5lZWRlZCBoZXJlLCBzbyBpbml0CisJICogZmxvdyBpbiBzdGFfaW5mb19jcmVhdGUgZ2l2ZXMgdGhlIFRJRCBhcyBkYXRhLCB3aGlsZSB0aGUgdGltZXJfdG9faWQKKwkgKiBhcnJheSBnaXZlcyB0aGUgc3RhIHRocm91Z2ggY29udGFpbmVyX29mICovCisJdTggKnB0aWQgPSAodTggKilkYXRhOworCXU4ICp0aW1lcl90b19pZCA9IHB0aWQgLSAqcHRpZDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZih0aW1lcl90b19pZCwgc3RydWN0IHN0YV9pbmZvLAorCQkJCQkgdGltZXJfdG9fdGlkWzBdKTsKKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJyeCBzZXNzaW9uIHRpbWVyIGV4cGlyZWQgb24gdGlkICVkXG4iLCAodTE2KSpwdGlkKTsKKyNlbmRpZgorCWllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsCisJCQkJCSAodTE2KSpwdGlkLCBXTEFOX0JBQ0tfVElNRVIsCisJCQkJCSBXTEFOX1JFQVNPTl9RU1RBX1RJTUVPVVQpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZGEsIHUxNiB0aWQsCisJCQkJICAgICAgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhdHVzLCB1MTYgcG9saWN5LAorCQkJCSAgICAgIHUxNiBidWZfc2l6ZSwgdTE2IHRpbWVvdXQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGNhcGFiOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCisJCSAgICAgICAiZm9yIGFkZGJhIHJlc3AgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisKKwlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3ApKTsKKwltZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfQkFDSzsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVNQOworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47CisKKwljYXBhYiA9ICh1MTYpKHBvbGljeSA8PCAxKTsJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCisJY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCisJY2FwYWIgfD0gKHUxNikoYnVmX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ3JlZ2F0aW9uICovCisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzID0gY3B1X3RvX2xlMTYoc3RhdHVzKTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVxdWVzdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgICAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgICAgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9hZ2dfcng7CisJdTE2IGNhcGFiLCB0aWQsIHRpbWVvdXQsIGJhX3BvbGljeSwgYnVmX3NpemUsIHN0YXJ0X3NlcV9udW0sIHN0YXR1czsKKwl1OCBkaWFsb2dfdG9rZW47CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJLyogZXh0cmFjdCBzZXNzaW9uIHBhcmFtZXRlcnMgZnJvbSBhZGRiYSByZXF1ZXN0IGZyYW1lICovCisJZGlhbG9nX3Rva2VuID0gbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuOworCXRpbWVvdXQgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0KTsKKwlzdGFydF9zZXFfbnVtID0KKwkJbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSkgPj4gNDsKKworCWNhcGFiID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIpOworCWJhX3BvbGljeSA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9QT0xJQ1lfTUFTSykgPj4gMTsKKwl0aWQgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fVElEX01BU0spID4+IDI7CisJYnVmX3NpemUgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fQlVGX1NJWkVfTUFTSykgPj4gNjsKKworCXN0YXR1cyA9IFdMQU5fU1RBVFVTX1JFUVVFU1RfREVDTElORUQ7CisKKwlpZiAodGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9TVVNQRU5EKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiU3VzcGVuZCBpbiBwcm9ncmVzcy4gIgorCQkgICAgICAgIkRlbnlpbmcgQUREQkEgcmVxdWVzdFxuIik7CisjZW5kaWYKKwkJZ290byBlbmRfbm9fbG9jazsKKwl9CisKKwkvKiBzYW5pdHkgY2hlY2sgZm9yIGluY29taW5nIHBhcmFtZXRlcnM6CisJICogY2hlY2sgaWYgY29uZmlndXJhdGlvbiBjYW4gc3VwcG9ydCB0aGUgQkEgcG9saWN5CisJICogYW5kIGlmIGJ1ZmZlciBzaXplIGRvZXMgbm90IGV4Y2VlZHMgbWF4IHZhbHVlICovCisJLyogWFhYOiBjaGVjayBvd24gaHQgZGVsYXllZCBCQSBjYXBhYmlsaXR5Pz8gKi8KKwlpZiAoKChiYV9wb2xpY3kgIT0gMSkKKwkJJiYgKCEoc3RhLT5zdGEuaHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfREVMQVlfQkEpKSkKKwkJfHwgKGJ1Zl9zaXplID4gSUVFRTgwMjExX01BWF9BTVBEVV9CVUYpKSB7CisJCXN0YXR1cyA9IFdMQU5fU1RBVFVTX0lOVkFMSURfUU9TX1BBUkFNOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgIkFkZEJBIFJlcSB3aXRoIGJhZCBwYXJhbXMgZnJvbSAiCisJCQkJIiVwTSBvbiB0aWQgJXUuIHBvbGljeSAlZCwgYnVmZmVyIHNpemUgJWRcbiIsCisJCQkJbWdtdC0+c2EsIHRpZCwgYmFfcG9saWN5LAorCQkJCWJ1Zl9zaXplKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKwkJZ290byBlbmRfbm9fbG9jazsKKwl9CisJLyogZGV0ZXJtaW5lIGRlZmF1bHQgYnVmZmVyIHNpemUgKi8KKwlpZiAoYnVmX3NpemUgPT0gMCkgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKworCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbY29uZi0+Y2hhbm5lbC0+YmFuZF07CisJCWJ1Zl9zaXplID0gSUVFRTgwMjExX01JTl9BTVBEVV9CVUY7CisJCWJ1Zl9zaXplID0gYnVmX3NpemUgPDwgc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3I7CisJfQorCisKKwkvKiBleGFtaW5lIHN0YXRlIG1hY2hpbmUgKi8KKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV9yeFt0aWRdICE9IEhUX0FHR19TVEFURV9JRExFKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9ERUJVRyAidW5leHBlY3RlZCBBZGRCQSBSZXEgZnJvbSAiCisJCQkJIiVwTSBvbiB0aWQgJXVcbiIsCisJCQkJbWdtdC0+c2EsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCWdvdG8gZW5kOworCX0KKworCS8qIHByZXBhcmUgQS1NUERVIE1MTUUgZm9yIFJ4IGFnZ3JlZ2F0aW9uICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0KKwkJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aWRfYW1wZHVfcngpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fRVJSICJhbGxvY2F0ZSByeCBtbG1lIHRvIHRpZCAlZCBmYWlsZWRcbiIsCisJCQkJCXRpZCk7CisjZW5kaWYKKwkJZ290byBlbmQ7CisJfQorCS8qIHJ4IHRpbWVyICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmZ1bmN0aW9uID0KKwkJCQlzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZDsKKwlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnNlc3Npb25fdGltZXIuZGF0YSA9CisJCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07CisJaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKKworCXRpZF9hZ2dfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF07CisKKwkvKiBwcmVwYXJlIHJlb3JkZXJpbmcgYnVmZmVyICovCisJdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYgPQorCQlrY2FsbG9jKGJ1Zl9zaXplLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiksIEdGUF9BVE9NSUMpOworCWlmICghdGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiY2FuIG5vdCBhbGxvY2F0ZSByZW9yZGVyaW5nIGJ1ZmZlciAiCisJCQkgICAgICAgInRvIHRpZCAlZFxuIiwgdGlkKTsKKyNlbmRpZgorCQlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pOworCQlnb3RvIGVuZDsKKwl9CisKKwlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQorCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVCwKKwkJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIlJ4IEEtTVBEVSByZXF1ZXN0IG9uIHRpZCAlZCByZXN1bHQgJWRcbiIsIHRpZCwgcmV0KTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCWlmIChyZXQpIHsKKwkJa2ZyZWUodGlkX2FnZ19yeC0+cmVvcmRlcl9idWYpOworCQlrZnJlZSh0aWRfYWdnX3J4KTsKKwkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdID0gTlVMTDsKKwkJZ290byBlbmQ7CisJfQorCisJLyogY2hhbmdlIHN0YXRlIGFuZCBzZW5kIGFkZGJhIHJlc3AgKi8KKwlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0gPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7CisJdGlkX2FnZ19yeC0+ZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOworCXRpZF9hZ2dfcngtPnNzbiA9IHN0YXJ0X3NlcV9udW07CisJdGlkX2FnZ19yeC0+aGVhZF9zZXFfbnVtID0gc3RhcnRfc2VxX251bTsKKwl0aWRfYWdnX3J4LT5idWZfc2l6ZSA9IGJ1Zl9zaXplOworCXRpZF9hZ2dfcngtPnRpbWVvdXQgPSB0aW1lb3V0OworCXRpZF9hZ2dfcngtPnN0b3JlZF9tcGR1X251bSA9IDA7CisJc3RhdHVzID0gV0xBTl9TVEFUVVNfU1VDQ0VTUzsKK2VuZDoKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworZW5kX25vX2xvY2s6CisJaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVzcChzdGEtPnNkYXRhLCBzdGEtPnN0YS5hZGRyLCB0aWQsCisJCQkJICBkaWFsb2dfdG9rZW4sIHN0YXR1cywgMSwgYnVmX3NpemUsIHRpbWVvdXQpOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0N2FhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKQEAgLTAsMCArMSw2OTUgQEAKKy8qCisgKiBIVCBoYW5kbGluZworICoKKyAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+CisgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+CisgKiBDb3B5cmlnaHQgMjAwNywgTWljaGFlbCBXdSA8ZmxhbWluZ2ljZUBzb3VybWlsay5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5LCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisjaW5jbHVkZSAid21lLmgiCisKKy8qKgorICogRE9DOiBUWCBhZ2dyZWdhdGlvbgorICoKKyAqIEFnZ3JlZ2F0aW9uIG9uIHRoZSBUWCBzaWRlIHJlcXVpcmVzIHNldHRpbmcgdGhlIGhhcmR3YXJlIGZsYWcKKyAqICVJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04gYXMgd2VsbCBhcywgaWYgcHJlc2VudCwgdGhlIEBhbXBkdV9xdWV1ZXMKKyAqIGhhcmR3YXJlIHBhcmFtZXRlciB0byB0aGUgbnVtYmVyIG9mIGhhcmR3YXJlIEFNUERVIHF1ZXVlcy4gSWYgdGhlcmUgYXJlIG5vCisgKiBoYXJkd2FyZSBxdWV1ZXMgdGhlbiB0aGUgZHJpdmVyIHdpbGwgKGN1cnJlbnRseSkgaGF2ZSB0byBkbyBhbGwgZnJhbWUKKyAqIGJ1ZmZlcmluZy4KKyAqCisgKiBXaGVuIFRYIGFnZ3JlZ2F0aW9uIGlzIHN0YXJ0ZWQgYnkgc29tZSBzdWJzeXN0ZW0gKHVzdWFsbHkgdGhlIHJhdGUgY29udHJvbAorICogYWxnb3JpdGhtIHdvdWxkIGJlIGFwcHJvcHJpYXRlKSBieSBjYWxsaW5nIHRoZQorICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oKSBmdW5jdGlvbiwgdGhlIGRyaXZlciB3aWxsIGJlIG5vdGlmaWVkIHZpYQorICogaXRzIEBhbXBkdV9hY3Rpb24gZnVuY3Rpb24sIHdpdGggdGhlICVJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQgYWN0aW9uLgorICoKKyAqIEluIHJlc3BvbnNlIHRvIHRoYXQsIHRoZSBkcml2ZXIgaXMgbGF0ZXIgcmVxdWlyZWQgdG8gY2FsbCB0aGUKKyAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYigpIChvciBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZSgpKQorICogZnVuY3Rpb24sIHdoaWNoIHdpbGwgc3RhcnQgdGhlIGFnZ3JlZ2F0aW9uIHNlc3Npb24uCisgKgorICogU2ltaWxhcmx5LCB3aGVuIHRoZSBhZ2dyZWdhdGlvbiBzZXNzaW9uIGlzIHN0b3BwZWQgYnkKKyAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oKSwgdGhlIGRyaXZlcidzIEBhbXBkdV9hY3Rpb24gZnVuY3Rpb24gd2lsbAorICogYmUgY2FsbGVkIHdpdGggdGhlIGFjdGlvbiAlSUVFRTgwMjExX0FNUERVX1RYX1NUT1AuIEluIHRoaXMgY2FzZSwgdGhlCisgKiBjYWxsIG11c3Qgbm90IGZhaWwsIGFuZCB0aGUgZHJpdmVyIG11c3QgbGF0ZXIgY2FsbCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYigpCisgKiAob3IgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSgpKS4KKyAqLworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgY29uc3QgdTggKmRhLCB1MTYgdGlkLAorCQkJCQkgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhcnRfc2VxX251bSwKKwkJCQkJIHUxNiBhZ2dfc2l6ZSwgdTE2IHRpbWVvdXQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGNhcGFiOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoKm1nbXQpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgIgorCQkJCSJmb3IgYWRkYmEgcmVxdWVzdCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CisJbWVtc2V0KG1nbXQsIDAsIDI0KTsKKwltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisKKwlza2JfcHV0KHNrYiwgMSArIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcSkpOworCisJbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7CisJbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuYWN0aW9uX2NvZGUgPSBXTEFOX0FDVElPTl9BRERCQV9SRVE7CisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47CisJY2FwYWIgPSAodTE2KSgxIDw8IDEpOwkJLyogYml0IDEgYWdncmVnYXRpb24gcG9saWN5ICovCisJY2FwYWIgfD0gKHUxNikodGlkIDw8IDIpOyAJLyogYml0IDU6MiBUSUQgbnVtYmVyICovCisJY2FwYWIgfD0gKHUxNikoYWdnX3NpemUgPDwgNik7CS8qIGJpdCAxNTo2IG1heCBzaXplIG9mIGFnZ2VyZ2F0aW9uICovCisKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5jYXBhYiA9IGNwdV90b19sZTE2KGNhcGFiKTsKKworCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnRpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KTsKKwltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5zdGFydF9zZXFfbnVtID0KKwkJCQkJY3B1X3RvX2xlMTYoc3RhcnRfc2VxX251bSA8PCA0KTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfYmFyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqcmEsIHUxNiB0aWQsIHUxNiBzc24pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2JhciAqYmFyOworCXUxNiBiYXJfY29udHJvbCA9IDA7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqYmFyKSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgorCQkJImJhciBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCWJhciA9IChzdHJ1Y3QgaWVlZTgwMjExX2JhciAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmJhcikpOworCW1lbXNldChiYXIsIDAsIHNpemVvZigqYmFyKSk7CisJYmFyLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8CisJCQkJCSBJRUVFODAyMTFfU1RZUEVfQkFDS19SRVEpOworCW1lbWNweShiYXItPnJhLCByYSwgRVRIX0FMRU4pOworCW1lbWNweShiYXItPnRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0FDS19QT0xJQ1lfTk9STUFMOworCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0NCTVRJRF9DT01QUkVTU0VEX0JBOworCWJhcl9jb250cm9sIHw9ICh1MTYpKHRpZCA8PCAxMik7CisJYmFyLT5jb250cm9sID0gY3B1X3RvX2xlMTYoYmFyX2NvbnRyb2wpOworCWJhci0+c3RhcnRfc2VxX251bSA9IGNwdV90b19sZTE2KHNzbik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQorCitzdGF0aWMgaW50IF9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCisJCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzdGEtPmxvY2FsOworCWludCByZXQ7CisJdTggKnN0YXRlOworCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJKnN0YXRlID0gSFRfQUdHX1NUQVRFX1JFUV9TVE9QX0JBX01TSyB8CisJCShpbml0aWF0b3IgPDwgSFRfQUdHX1NUQVRFX0lOSVRJQVRPUl9TSElGVCk7CisKKwlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oJmxvY2FsLT5odywgSUVFRTgwMjExX0FNUERVX1RYX1NUT1AsCisJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKKworCS8qIEhXIHNoYWxsIG5vdCBkZW55IGdvaW5nIGJhY2sgdG8gbGVnYWN5ICovCisJaWYgKFdBUk5fT04ocmV0KSkgeworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7CisJCS8qCisJCSAqIFdlIG1heSBoYXZlIHBlbmRpbmcgcGFja2V0cyBnZXQgc3R1Y2sgaW4gdGhpcyBjYXNlLi4uCisJCSAqIE5vdCBib3RoZXJpbmcgd2l0aCBhIHdvcmthcm91bmQgZm9yIG5vdy4KKwkJICovCisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEFmdGVyIHNlbmRpbmcgYWRkIEJsb2NrIEFjayByZXF1ZXN0IHdlIGFjdGl2YXRlZCBhIHRpbWVyIHVudGlsCisgKiBhZGQgQmxvY2sgQWNrIHJlc3BvbnNlIHdpbGwgYXJyaXZlIGZyb20gdGhlIHJlY2lwaWVudC4KKyAqIElmIHRoaXMgdGltZXIgZXhwaXJlcyBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkIHdpbGwgYmUgZXhlY3V0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCisJICogb25seSBvbmUgYXJndW1lbnQsIGFuZCBib3RoIHN0YV9pbmZvIGFuZCBUSUQgYXJlIG5lZWRlZCwgc28gaW5pdAorCSAqIGZsb3cgaW4gc3RhX2luZm9fY3JlYXRlIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCisJICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLworCXUxNiB0aWQgPSAqKHU4ICopZGF0YTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZigodm9pZCAqKWRhdGEsCisJCXN0cnVjdCBzdGFfaW5mbywgdGltZXJfdG9fdGlkW3RpZF0pOworCXU4ICpzdGF0ZTsKKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKworCS8qIGNoZWNrIGlmIHRoZSBUSUQgd2FpdHMgZm9yIGFkZEJBIHJlc3BvbnNlICovCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgInRpbWVyIGV4cGlyZWQgb24gdGlkICVkIGJ1dCB3ZSBhcmUgbm90ICIKKwkJCQkiZXhwZWN0aW5nIGFkZEJBIHJlc3BvbnNlIHRoZXJlIiwgdGlkKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgImFkZEJBIHJlc3BvbnNlIHRpbWVyIGV4cGlyZWQgb24gdGlkICVkXG4iLCB0aWQpOworI2VuZGlmCisKKwlfX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLCBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaWVlZTgwMjExX2FjX2Zyb21fdGlkKGludCB0aWQpCit7CisJcmV0dXJuIGllZWU4MDJfMWRfdG9fYWNbdGlkICYgN107Cit9CisKK2ludCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1MTYgdGlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXU4ICpzdGF0ZTsKKwlpbnQgcmV0ID0gMDsKKwl1MTYgc3RhcnRfc2VxX251bTsKKworCWlmIChXQVJOX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodGlkID49IFNUQV9USURfTlVNKSB8fCAhKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikpCisJCXJldHVybiAtRUlOVkFMOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIk9wZW4gQkEgc2Vzc2lvbiByZXF1ZXN0ZWQgZm9yICVwTSB0aWQgJXVcbiIsCisJICAgICAgIHJhLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCisJcmN1X3JlYWRfbG9jaygpOworCisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHRoZSBzdGF0aW9uXG4iKTsKKyNlbmRpZgorCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHVubG9jazsKKwl9CisKKwkvKgorCSAqIFRoZSBhZ2dyZWdhdGlvbiBjb2RlIGlzIG5vdCBwcmVwYXJlZCB0byBoYW5kbGUKKwkgKiBhbnl0aGluZyBidXQgU1RBL0FQIGR1ZSB0byB0aGUgQlNTSUQgaGFuZGxpbmcuCisJICogSUJTUyBjb3VsZCB3b3JrIGluIHRoZSBjb2RlIGJ1dCBpc24ndCBzdXBwb3J0ZWQKKwkgKiBieSBkcml2ZXJzIG9yIHRoZSBzdGFuZGFyZC4KKwkgKi8KKwlpZiAoc3RhLT5zZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICBzdGEtPnNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJICAgIHN0YS0+c2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX0KKworCWlmICh0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1NVU1BFTkQpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJTdXNwZW5kIGluIHByb2dyZXNzLiAiCisJCSAgICAgICAiRGVueWluZyBCQSBzZXNzaW9uIHJlcXVlc3RcbiIpOworI2VuZGlmCisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gdW5sb2NrOworCX0KKworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKwlzcGluX2xvY2soJmxvY2FsLT5hbXBkdV9sb2NrKTsKKworCXNkYXRhID0gc3RhLT5zZGF0YTsKKworCS8qIHdlIGhhdmUgdHJpZWQgdG9vIG1hbnkgdGltZXMsIHJlY2VpdmVyIGRvZXMgbm90IHdhbnQgQS1NUERVICovCisJaWYgKHN0YS0+YW1wZHVfbWxtZS5hZGRiYV9yZXFfbnVtW3RpZF0gPiBIVF9BR0dfTUFYX1JFVFJJRVMpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl91bmxvY2tfc3RhOworCX0KKworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwkvKiBjaGVjayBpZiB0aGUgVElEIGlzIG5vdCBpbiBhZ2dyZWdhdGlvbiBmbG93IGFscmVhZHkgKi8KKwlpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9JRExFKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIHNlc3Npb24gaXMgbm90ICIKKwkJCQkgImlkbGUgb24gdGlkICV1XG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIGVycl91bmxvY2tfc3RhOworCX0KKworCS8qCisJICogV2hpbGUgd2UncmUgYXNraW5nIHRoZSBkcml2ZXIgYWJvdXQgdGhlIGFnZ3JlZ2F0aW9uLAorCSAqIHN0b3AgdGhlIEFDIHF1ZXVlIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorCSAqIGFib3V0IGZyYW1lcyB0aGF0IGNhbWUgaW4gd2hpbGUgd2Ugd2VyZSBkb2luZyB0aGF0LAorCSAqIHdoaWNoIHdvdWxkIHJlcXVpcmUgdXMgdG8gcHV0IHRoZW0gdG8gdGhlIEFDIHBlbmRpbmcKKwkgKiBhZnRlcndhcmRzIHdoaWNoIGp1c3QgbWFrZXMgdGhlIGNvZGUgbW9yZSBjb21wbGV4LgorCSAqLworCWllZWU4MDIxMV9zdG9wX3F1ZXVlX2J5X3JlYXNvbigKKwkJJmxvY2FsLT5odywgaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCksCisJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7CisKKwkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBUeCBhZ2dyZWdhdGlvbiAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3R4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgdHggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAorCQkJCQl0aWQpOworI2VuZGlmCisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX3dha2VfcXVldWU7CisJfQorCisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5wZW5kaW5nKTsKKworCS8qIFR4IHRpbWVyICovCisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmZ1bmN0aW9uID0KKwkJCXN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQ7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmRhdGEgPQorCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07CisJaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKworCS8qIE9rLCB0aGUgQWRkYmEgZnJhbWUgaGFzbid0IGJlZW4gc2VudCB5ZXQsIGJ1dCBpZiB0aGUgZHJpdmVyIGNhbGxzIHRoZQorCSAqIGNhbGwgYmFjayByaWdodCBhd2F5LCBpdCBtdXN0IHNlZSB0aGF0IHRoZSBmbG93IGhhcyBiZWd1biAqLworCSpzdGF0ZSB8PSBIVF9BRERCQV9SRVFVRVNURURfTVNLOworCisJc3RhcnRfc2VxX251bSA9IHN0YS0+dGlkX3NlcVt0aWRdOworCisJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQsCisJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCAmc3RhcnRfc2VxX251bSk7CisKKwlpZiAocmV0KSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJCQSByZXF1ZXN0IGRlbmllZCAtIEhXIHVuYXZhaWxhYmxlIGZvciIKKwkJCQkJIiB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCS8qIERyaXZlciB2ZXRvZWQgb3IgT0tlZCwgYnV0IHdlIGNhbiB0YWtlIHBhY2tldHMgYWdhaW4gbm93ICovCisJaWVlZTgwMjExX3dha2VfcXVldWVfYnlfcmVhc29uKAorCQkmbG9jYWwtPmh3LCBpZWVlODAyMTFfYWNfZnJvbV90aWQodGlkKSwKKwkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0FHR1JFR0FUSU9OKTsKKworCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwkvKiBzZW5kIGFuIGFkZEJBIHJlcXVlc3QgKi8KKwlzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvcisrOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+ZGlhbG9nX3Rva2VuID0KKwkJCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+c3NuID0gc3RhcnRfc2VxX251bTsKKworCWllZWU4MDIxMV9zZW5kX2FkZGJhX3JlcXVlc3Qoc3RhLT5zZGF0YSwgcmEsIHRpZCwKKwkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbiwKKwkJCSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPnNzbiwKKwkJCSAweDQwLCA1MDAwKTsKKwkvKiBhY3RpdmF0ZSB0aGUgdGltZXIgZm9yIHRoZSByZWNpcGllbnQncyBhZGRCQSByZXNwb25zZSAqLworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lci5leHBpcmVzID0KKwkJCQlqaWZmaWVzICsgQUREQkFfUkVTUF9JTlRFUlZBTDsKKwlhZGRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgImFjdGl2YXRlZCBhZGRCQSByZXNwb25zZSB0aW1lciBvbiB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYKKwlnb3RvIHVubG9jazsKKworIGVycl9mcmVlOgorCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7CisJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0gTlVMTDsKKyBlcnJfd2FrZV9xdWV1ZToKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oCisJCSZsb2NhbC0+aHcsIGllZWU4MDIxMV9hY19mcm9tX3RpZCh0aWQpLAorCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworIGVycl91bmxvY2tfc3RhOgorCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisgdW5sb2NrOgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKTsKKworLyoKKyAqIHNwbGljZSBwYWNrZXRzIGZyb20gdGhlIFNUQSdzIHBlbmRpbmcgdG8gdGhlIGxvY2FsIHBlbmRpbmcsCisgKiByZXF1aXJlcyBhIGNhbGwgdG8gaWVlZTgwMjExX2FnZ19zcGxpY2VfZmluaXNoIGFuZCBob2xkaW5nCisgKiBsb2NhbC0+YW1wZHVfbG9jayBhY3Jvc3MgYm90aCBjYWxscy4KKyAqLworc3RhdGljIHZvaWQgaWVlZTgwMjExX2FnZ19zcGxpY2VfcGFja2V0cyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTE2IHF1ZXVlID0gaWVlZTgwMjExX2FjX2Zyb21fdGlkKHRpZCk7CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZV9ieV9yZWFzb24oCisJCSZsb2NhbC0+aHcsIHF1ZXVlLAorCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04pOworCisJaWYgKCFza2JfcXVldWVfZW1wdHkoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+cGVuZGluZykpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CisJCS8qIG1hcmsgcXVldWUgYXMgcGVuZGluZywgaXQgaXMgc3RvcHBlZCBhbHJlYWR5ICovCisJCV9fc2V0X2JpdChJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUEVORElORywKKwkJCSAgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKKwkJLyogY29weSBvdmVyIHJlbWFpbmluZyBwYWNrZXRzICovCisJCXNrYl9xdWV1ZV9zcGxpY2VfdGFpbF9pbml0KAorCQkJJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+cGVuZGluZywKKwkJCSZsb2NhbC0+cGVuZGluZ1txdWV1ZV0pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2FnZ19zcGxpY2VfZmluaXNoKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKK3sKKwl1MTYgcXVldWUgPSBpZWVlODAyMTFfYWNfZnJvbV90aWQodGlkKTsKKworCWllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbigKKwkJJmxvY2FsLT5odywgcXVldWUsCisJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9BR0dSRUdBVElPTik7Cit9CisKKy8qIGNhbGxlciBtdXN0IGhvbGQgc3RhLT5sb2NrICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYWdnX3R4X29wZXJhdGlvbmFsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQpCit7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIkFnZ3JlZ2F0aW9uIGlzIG9uIGZvciB0aWQgJWQgXG4iLCB0aWQpOworI2VuZGlmCisKKwlzcGluX2xvY2soJmxvY2FsLT5hbXBkdV9sb2NrKTsKKwlpZWVlODAyMTFfYWdnX3NwbGljZV9wYWNrZXRzKGxvY2FsLCBzdGEsIHRpZCk7CisJLyoKKwkgKiBOQjogd2UgcmVseSBvbiBzdGEtPmxvY2sgYmVpbmcgdGFrZW4gaW4gdGhlIFRYCisJICogcHJvY2Vzc2luZyBoZXJlIHdoZW4gYWRkaW5nIHRvIHRoZSBwZW5kaW5nIHF1ZXVlLAorCSAqIG90aGVyd2lzZSB3ZSBjb3VsZCBvbmx5IGNoYW5nZSB0aGUgc3RhdGUgb2YgdGhlCisJICogc2Vzc2lvbiB0byBPUEVSQVRJT05BTCBfaGVyZV8uCisJICovCisJaWVlZTgwMjExX2FnZ19zcGxpY2VfZmluaXNoKGxvY2FsLCBzdGEsIHRpZCk7CisJc3Bpbl91bmxvY2soJmxvY2FsLT5hbXBkdV9sb2NrKTsKKworCWxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbigmbG9jYWwtPmh3LCBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUwsCisJCQkJICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKK30KKwordm9pZCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwl1OCAqc3RhdGU7CisKKwlpZiAodGlkID49IFNUQV9USURfTlVNKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJCYWQgVElEIHZhbHVlOiB0aWQgPSAlZCAoPj0gJWQpXG4iLAorCQkJCXRpZCwgU1RBX1RJRF9OVU0pOworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7CisJaWYgKCFzdGEpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCBzdGF0aW9uOiAlcE1cbiIsIHJhKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKworCWlmIChXQVJOX09OKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJhZGRCQSB3YXMgbm90IHJlcXVlc3RlZCB5ZXQsIHN0YXRlIGlzICVkXG4iLAorCQkJCSpzdGF0ZSk7CisjZW5kaWYKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJaWYgKFdBUk5fT04oKnN0YXRlICYgSFRfQUREQkFfRFJWX1JFQURZX01TSykpCisJCWdvdG8gb3V0OworCisJKnN0YXRlIHw9IEhUX0FEREJBX0RSVl9SRUFEWV9NU0s7CisKKwlpZiAoKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkKKwkJaWVlZTgwMjExX2FnZ190eF9vcGVyYXRpb25hbChsb2NhbCwgc3RhLCB0aWQpOworCisgb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2IpOworCit2b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOworCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKDApOworCisJaWYgKHVubGlrZWx5KCFza2IpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnksICIKKwkJCSAgICAgICAiZHJvcHBpbmcgc3RhcnQgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKKwltZW1jcHkoJnJhX3RpZC0+cmEsIHJhLCBFVEhfQUxFTik7CisJcmFfdGlkLT50aWQgPSB0aWQ7CisKKwlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX0FEREJBX01TRzsKKwlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdGFydF90eF9iYV9jYl9pcnFzYWZlKTsKKworaW50IF9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCwKKwkJCQkgICBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQoreworCXU4ICpzdGF0ZTsKKwlpbnQgcmV0OworCisJLyogY2hlY2sgaWYgdGhlIFRJRCBpcyBpbiBhZ2dyZWdhdGlvbiAqLworCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKKwlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlpZiAoKnN0YXRlICE9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIHVubG9jazsKKwl9CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiVHggQkEgc2Vzc2lvbiBzdG9wIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKKwkgICAgICAgc3RhLT5zdGEuYWRkciwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCXJldCA9IF9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIGluaXRpYXRvcik7CisKKyB1bmxvY2s6CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHU4ICpyYSwgdTE2IHRpZCwKKwkJCQkgZW51bSBpZWVlODAyMTFfYmFja19wYXJ0aWVzIGluaXRpYXRvcikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChXQVJOX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pCisJCXJldHVybiAtRUlOVkFMOworCisJcmN1X3JlYWRfbG9jaygpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCWlmICghc3RhKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXQgPSBfX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIGluaXRpYXRvcik7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbik7CisKK3ZvaWQgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2Ioc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4ICpyYSwgdTggdGlkKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXU4ICpzdGF0ZTsKKworCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBUSUQgdmFsdWU6IHRpZCA9ICVkICg+PSAlZClcbiIsCisJCQkJdGlkLCBTVEFfVElEX05VTSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJTdG9wcGluZyBUeCBCQSBzZXNzaW9uIGZvciAlcE0gdGlkICVkXG4iLAorCSAgICAgICByYSwgdGlkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KKworCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlpZiAoIXN0YSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgc3RhdGlvbjogJXBNXG4iLCByYSk7CisjZW5kaWYKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybjsKKwl9CisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJLyogTk9URTogbm8gbmVlZCB0byB1c2Ugc3RhLT5sb2NrIGluIHRoaXMgc3RhdGUgY2hlY2ssIGFzCisJICogaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbiB3aWxsIGxldCBvbmx5IG9uZSBzdG9wIGNhbGwgdG8KKwkgKiBwYXNzIHRocm91Z2ggcGVyIHN0YS90aWQKKwkgKi8KKwlpZiAoKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0spID09IDApIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgInVuZXhwZWN0ZWQgY2FsbGJhY2sgdG8gQS1NUERVIHN0b3BcbiIpOworI2VuZGlmCisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm47CisJfQorCisJaWYgKCpzdGF0ZSAmIEhUX0FHR19TVEFURV9JTklUSUFUT1JfTVNLKQorCQlpZWVlODAyMTFfc2VuZF9kZWxiYShzdGEtPnNkYXRhLCByYSwgdGlkLAorCQkJV0xBTl9CQUNLX0lOSVRJQVRPUiwgV0xBTl9SRUFTT05fUVNUQV9OT1RfVVNFKTsKKworCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKKwlzcGluX2xvY2soJmxvY2FsLT5hbXBkdV9sb2NrKTsKKworCWllZWU4MDIxMV9hZ2dfc3BsaWNlX3BhY2tldHMobG9jYWwsIHN0YSwgdGlkKTsKKworCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOworCS8qIGZyb20gbm93IG9uIHBhY2tldHMgYXJlIG5vIGxvbmdlciBwdXQgb250byBzdGEtPnBlbmRpbmcgKi8KKwlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKKwlrZnJlZShzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pOworCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9IE5VTEw7CisKKwlpZWVlODAyMTFfYWdnX3NwbGljZV9maW5pc2gobG9jYWwsIHN0YSwgdGlkKTsKKworCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfY2IpOworCit2b2lkIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CisJc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKnJhX3RpZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKKworCWlmICh1bmxpa2VseSghc2tiKSkgeworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCisJCQkgICAgICAgImRyb3BwaW5nIHN0b3AgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCXJhX3RpZCA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqKSAmc2tiLT5jYjsKKwltZW1jcHkoJnJhX3RpZC0+cmEsIHJhLCBFVEhfQUxFTik7CisJcmFfdGlkLT50aWQgPSB0aWQ7CisKKwlza2ItPnBrdF90eXBlID0gSUVFRTgwMjExX0RFTEJBX01TRzsKKwlza2JfcXVldWVfdGFpbCgmbG9jYWwtPnNrYl9xdWV1ZSwgc2tiKTsKKwl0YXNrbGV0X3NjaGVkdWxlKCZsb2NhbC0+dGFza2xldCk7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUpOworCisKK3ZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgc2l6ZV90IGxlbikKK3sKKwl1MTYgY2FwYWIsIHRpZDsKKwl1OCAqc3RhdGU7CisKKwljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5jYXBhYik7CisJdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOworCisJc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOworCisJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCisJaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmRpYWxvZ190b2tlbiAhPQorCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmRpYWxvZ190b2tlbikgeworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIndyb25nIGFkZEJBIHJlc3BvbnNlIHRva2VuLCB0aWQgJWRcbiIsIHRpZCk7CisjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCisJCXJldHVybjsKKwl9CisKKwlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAic3dpdGNoZWQgb2ZmIGFkZEJBIHRpbWVyIGZvciB0aWQgJWQgXG4iLCB0aWQpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLworCWlmIChsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3Auc3RhdHVzKQorCQkJPT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgeworCQl1OCBjdXJzdGF0ZSA9ICpzdGF0ZTsKKworCQkqc3RhdGUgfD0gSFRfQUREQkFfUkVDRUlWRURfTVNLOworCisJCWlmICgqc3RhdGUgIT0gY3Vyc3RhdGUgJiYgKnN0YXRlID09IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTCkKKwkJCWllZWU4MDIxMV9hZ2dfdHhfb3BlcmF0aW9uYWwobG9jYWwsIHN0YSwgdGlkKTsKKworCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID0gMDsKKwl9IGVsc2UgeworCQlzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdKys7CisJCV9fX2llZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQsIFdMQU5fQkFDS19JTklUSUFUT1IpOworCX0KKwlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCA5ZDRlNGQ4Li5lNjc3Yjc1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmMKKysrIGIvbmV0L21hYzgwMjExL2NmZy5jCkBAIC0xMzMsNiArMTMzLDkgQEAKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CiAJCWFsZyA9IEFMR19DQ01QOwogCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgorCQlhbGcgPSBBTEdfQUVTX0NNQUM7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI3NSw2ICsyNzgsMTcgQEAKIAkJZWxzZQogCQkJcGFyYW1zLmNpcGhlciA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCXBhcmFtcy5jaXBoZXIgPSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzsKKwkJc2VxWzBdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzVdOworCQlzZXFbMV0gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bNF07CisJCXNlcVsyXSA9IGtleS0+dS5hZXNfY21hYy50eF9wblszXTsKKwkJc2VxWzNdID0ga2V5LT51LmFlc19jbWFjLnR4X3BuWzJdOworCQlzZXFbNF0gPSBrZXktPnUuYWVzX2NtYWMudHhfcG5bMV07CisJCXNlcVs1XSA9IGtleS0+dS5hZXNfY21hYy50eF9wblswXTsKKwkJcGFyYW1zLnNlcSA9IHNlcTsKKwkJcGFyYW1zLnNlcV9sZW4gPSA2OworCQlicmVhazsKIAl9CiAKIAlwYXJhbXMua2V5ID0ga2V5LT5jb25mLmtleTsKQEAgLTMwNCw2ICszMTgsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpZWVlODAyMTFfY29uZmlnX2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgIHU4IGtleV9pZHgpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisJaWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLCBrZXlfaWR4KTsKKworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHN0YV9zZXRfc2luZm8oc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gc3RhLT5zZGF0YTsKQEAgLTMxMSwxMSArMzQxLDE1IEBACiAJc2luZm8tPmZpbGxlZCA9IFNUQVRJT05fSU5GT19JTkFDVElWRV9USU1FIHwKIAkJCVNUQVRJT05fSU5GT19SWF9CWVRFUyB8CiAJCQlTVEFUSU9OX0lORk9fVFhfQllURVMgfAorCQkJU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMgfAorCQkJU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFMgfAogCQkJU1RBVElPTl9JTkZPX1RYX0JJVFJBVEU7CiAKIAlzaW5mby0+aW5hY3RpdmVfdGltZSA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YS0+bGFzdF9yeCk7CiAJc2luZm8tPnJ4X2J5dGVzID0gc3RhLT5yeF9ieXRlczsKIAlzaW5mby0+dHhfYnl0ZXMgPSBzdGEtPnR4X2J5dGVzOworCXNpbmZvLT5yeF9wYWNrZXRzID0gc3RhLT5yeF9wYWNrZXRzOworCXNpbmZvLT50eF9wYWNrZXRzID0gc3RhLT50eF9wYWNrZXRzOwogCiAJaWYgKHN0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pIHsKIAkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fU0lHTkFMOwpAQCAtNDE3LDcgKzQ1MSw4IEBACiAJICogVGhpcyBpcyBhIGtsdWRnZS4gYmVhY29uIGludGVydmFsIHNob3VsZCByZWFsbHkgYmUgcGFydAogCSAqIG9mIHRoZSBiZWFjb24gaW5mb3JtYXRpb24uCiAJICovCi0JaWYgKHBhcmFtcy0+aW50ZXJ2YWwpIHsKKwlpZiAocGFyYW1zLT5pbnRlcnZhbCAmJiAoc2RhdGEtPmxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgIT0KKwkJCQkgcGFyYW1zLT5pbnRlcnZhbCkpIHsKIAkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSBwYXJhbXMtPmludGVydmFsOwogCQllcnIgPSBpZWVlODAyMTFfaHdfY29uZmlnKHNkYXRhLT5sb2NhbCwKIAkJCQkJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0JFQUNPTl9JTlRFUlZBTCk7CkBAIC00OTMsNyArNTI4LDggQEAKIAogCWtmcmVlKG9sZCk7CiAKLQlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKTsKKwlyZXR1cm4gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OIHwKKwkJCQkJICBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9iZWFjb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTUwNCw5ICs1NDAsNiBAQAogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlvbGQgPSBzZGF0YS0+dS5hcC5iZWFjb247CiAKIAlpZiAob2xkKQpAQCAtNTIzLDkgKzU1Niw2IEBACiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW9sZCA9IHNkYXRhLT51LmFwLmJlYWNvbjsKIAogCWlmICghb2xkKQpAQCAtNTQxLDkgKzU3MSw2IEBACiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW9sZCA9IHNkYXRhLT51LmFwLmJlYWNvbjsKIAogCWlmICghb2xkKQpAQCAtNTUzLDcgKzU4MCw3IEBACiAJc3luY2hyb25pemVfcmN1KCk7CiAJa2ZyZWUob2xkKTsKIAotCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04pOworCXJldHVybiBpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRCk7CiB9CiAKIC8qIExheWVyIDIgVXBkYXRlIGZyYW1lICg4MDIuMiBUeXBlIDEgTExDIFhJRCBVcGRhdGUgcmVzcG9uc2UpICovCkBAIC02MzAsNiArNjU3LDEwIEBACiAJCXN0YS0+ZmxhZ3MgJj0gfldMQU5fU1RBX1dNRTsKIAkJaWYgKHBhcmFtcy0+c3RhdGlvbl9mbGFncyAmIFNUQVRJT05fRkxBR19XTUUpCiAJCQlzdGEtPmZsYWdzIHw9IFdMQU5fU1RBX1dNRTsKKworCQlzdGEtPmZsYWdzICY9IH5XTEFOX1NUQV9NRlA7CisJCWlmIChwYXJhbXMtPnN0YXRpb25fZmxhZ3MgJiBTVEFUSU9OX0ZMQUdfTUZQKQorCQkJc3RhLT5mbGFncyB8PSBXTEFOX1NUQV9NRlA7CiAJCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwogCX0KIApAQCAtNjg4LDEwICs3MTksNiBAQAogCWludCBlcnI7CiAJaW50IGxheWVyMl91cGRhdGU7CiAKLQkvKiBQcmV2ZW50IGEgcmFjZSB3aXRoIGNoYW5naW5nIHRoZSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtICovCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRU5FVERPV047Ci0KIAlpZiAocGFyYW1zLT52bGFuKSB7CiAJCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocGFyYW1zLT52bGFuKTsKIApAQCAtODIwLDE0ICs4NDcsOCBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCWludCBlcnI7CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJcmV0dXJuIC1FTkVURE9XTjsKLQogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQogCXJjdV9yZWFkX2xvY2soKTsKIAlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG5leHRfaG9wKTsKIAlpZiAoIXN0YSkgewpAQCAtODczLDE0ICs4OTQsOCBAQAogCXN0cnVjdCBtZXNoX3BhdGggKm1wYXRoOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCi0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCXJldHVybiAtRU5FVERPV047Ci0KIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCi0JCXJldHVybiAtRU5PVFNVUFA7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG5leHRfaG9wKTsKQEAgLTk0OSw5ICs5NjQsNiBAQAogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQotCQlyZXR1cm4gLUVOT1RTVVBQOwotCiAJcmN1X3JlYWRfbG9jaygpOwogCW1wYXRoID0gbWVzaF9wYXRoX2xvb2t1cChkc3QsIHNkYXRhKTsKIAlpZiAoIW1wYXRoKSB7CkBAIC05NzMsOSArOTg1LDYgQEAKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQogCXJjdV9yZWFkX2xvY2soKTsKIAltcGF0aCA9IG1lc2hfcGF0aF9sb29rdXBfYnlfaWR4KGlkeCwgc2RhdGEpOwogCWlmICghbXBhdGgpIHsKQEAgLTk5NSw4ICsxMDA0LDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCi0JCXJldHVybiAtRU5PVFNVUFA7CiAJbWVtY3B5KGNvbmYsICYoc2RhdGEtPnUubWVzaC5tc2hjZmcpLCBzaXplb2Yoc3RydWN0IG1lc2hfY29uZmlnKSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDE0LDkgKzEwMjEsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQogCS8qIFNldCB0aGUgY29uZmlnIG9wdGlvbnMgd2hpY2ggd2UgYXJlIGludGVyZXN0ZWQgaW4gc2V0dGluZyAqLwogCWNvbmYgPSAmKHNkYXRhLT51Lm1lc2gubXNoY2ZnKTsKIAlpZiAoX2NoZ19tZXNoX2F0dHIoTkw4MDIxMV9NRVNIQ09ORl9SRVRSWV9USU1FT1VULCBtYXNrKSkKQEAgLTEwNjQsOSArMTA2OCw2IEBACiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChwYXJhbXMtPnVzZV9jdHNfcHJvdCA+PSAwKSB7CiAJCXNkYXRhLT52aWYuYnNzX2NvbmYudXNlX2N0c19wcm90ID0gcGFyYW1zLT51c2VfY3RzX3Byb3Q7CiAJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UOwpAQCAtMTE0MSw2ICsxMTQyLDE1MCBAQAogCXJldHVybiBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N1c3BlbmQoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlyZXR1cm4gX19pZWVlODAyMTFfc3VzcGVuZCh3aXBoeV9wcml2KHdpcGh5KSk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3Jlc3VtZShzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXJldHVybiBfX2llZWU4MDIxMV9yZXN1bWUod2lwaHlfcHJpdih3aXBoeSkpOworfQorI2Vsc2UKKyNkZWZpbmUgaWVlZTgwMjExX3N1c3BlbmQgTlVMTAorI2RlZmluZSBpZWVlODAyMTFfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IGllZWU4MDIxMV9zY2FuKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKKwkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHNkYXRhLCByZXEpOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9hdXRoKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBjZmc4MDIxMV9hdXRoX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCXN3aXRjaCAocmVxLT5hdXRoX3R5cGUpIHsKKwljYXNlIE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU06CisJCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTjsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVk6CisJCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0FVVEhUWVBFX0ZUOgorCQlzZGF0YS0+dS5tZ2QuYXV0aF9hbGdzID0gSUVFRTgwMjExX0FVVEhfQUxHX0ZUOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVA6CisJCXNkYXRhLT51Lm1nZC5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCW1lbWNweShzZGF0YS0+dS5tZ2QuYnNzaWQsIHJlcS0+cGVlcl9hZGRyLCBFVEhfQUxFTik7CisJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKKworCS8qIFRPRE86IHJlcS0+Y2hhbiAqLworCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7CisKKwlpZiAocmVxLT5zc2lkKSB7CisJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1NTSURfU0VUOworCQltZW1jcHkoc2RhdGEtPnUubWdkLnNzaWQsIHJlcS0+c3NpZCwgcmVxLT5zc2lkX2xlbik7CisJCXNkYXRhLT51Lm1nZC5zc2lkX2xlbiA9IHJlcS0+c3NpZF9sZW47CisJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOworCX0KKworCWtmcmVlKHNkYXRhLT51Lm1nZC5zbWVfYXV0aF9pZSk7CisJc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llID0gTlVMTDsKKwlzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWVfbGVuID0gMDsKKwlpZiAocmVxLT5pZSkgeworCQlzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUgPSBrbWFsbG9jKHJlcS0+aWVfbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHNkYXRhLT51Lm1nZC5zbWVfYXV0aF9pZSA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW1lbWNweShzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUsIHJlcS0+aWUsIHJlcS0+aWVfbGVuKTsKKwkJc2RhdGEtPnUubWdkLnNtZV9hdXRoX2llX2xlbiA9IHJlcS0+aWVfbGVuOworCX0KKworCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0VYVF9TTUU7CisJc2RhdGEtPnUubWdkLnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKKwlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfYXNzb2Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBjZmc4MDIxMV9hc3NvY19yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJaW50IHJldDsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCWlmIChtZW1jbXAoc2RhdGEtPnUubWdkLmJzc2lkLCByZXEtPnBlZXJfYWRkciwgRVRIX0FMRU4pICE9IDAgfHwKKwkgICAgIShzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpKQorCQlyZXR1cm4gLUVOT0xJTks7IC8qIG5vdCBhdXRoZW50aWNhdGVkICovCisKKwlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CisJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOworCisJLyogVE9ETzogcmVxLT5jaGFuICovCisJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKKworCWlmIChyZXEtPnNzaWQpIHsKKwkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7CisJCW1lbWNweShzZGF0YS0+dS5tZ2Quc3NpZCwgcmVxLT5zc2lkLCByZXEtPnNzaWRfbGVuKTsKKwkJc2RhdGEtPnUubWdkLnNzaWRfbGVuID0gcmVxLT5zc2lkX2xlbjsKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisJfSBlbHNlCisJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUw7CisKKwlyZXQgPSBpZWVlODAyMTFfc3RhX3NldF9leHRyYV9pZShzZGF0YSwgcmVxLT5pZSwgcmVxLT5pZV9sZW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9FWFRfU01FOworCXNkYXRhLT51Lm1nZC5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEU7CisJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2RlYXV0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCisJLyogVE9ETzogcmVxLT5pZSAqLworCXJldHVybiBpZWVlODAyMTFfc3RhX2RlYXV0aGVudGljYXRlKHNkYXRhLCByZXEtPnJlYXNvbl9jb2RlKTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfZGlzYXNzb2Moc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwkvKiBUT0RPOiByZXEtPmllICovCisJcmV0dXJuIGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKHNkYXRhLCByZXEtPnJlYXNvbl9jb2RlKTsKK30KKwogc3RydWN0IGNmZzgwMjExX29wcyBtYWM4MDIxMV9jb25maWdfb3BzID0gewogCS5hZGRfdmlydHVhbF9pbnRmID0gaWVlZTgwMjExX2FkZF9pZmFjZSwKIAkuZGVsX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxMV9kZWxfaWZhY2UsCkBAIC0xMTQ5LDYgKzEyOTQsNyBAQAogCS5kZWxfa2V5ID0gaWVlZTgwMjExX2RlbF9rZXksCiAJLmdldF9rZXkgPSBpZWVlODAyMTFfZ2V0X2tleSwKIAkuc2V0X2RlZmF1bHRfa2V5ID0gaWVlZTgwMjExX2NvbmZpZ19kZWZhdWx0X2tleSwKKwkuc2V0X2RlZmF1bHRfbWdtdF9rZXkgPSBpZWVlODAyMTFfY29uZmlnX2RlZmF1bHRfbWdtdF9rZXksCiAJLmFkZF9iZWFjb24gPSBpZWVlODAyMTFfYWRkX2JlYWNvbiwKIAkuc2V0X2JlYWNvbiA9IGllZWU4MDIxMV9zZXRfYmVhY29uLAogCS5kZWxfYmVhY29uID0gaWVlZTgwMjExX2RlbF9iZWFjb24sCkBAIC0xMTY5LDQgKzEzMTUsMTEgQEAKIAkuY2hhbmdlX2JzcyA9IGllZWU4MDIxMV9jaGFuZ2VfYnNzLAogCS5zZXRfdHhxX3BhcmFtcyA9IGllZWU4MDIxMV9zZXRfdHhxX3BhcmFtcywKIAkuc2V0X2NoYW5uZWwgPSBpZWVlODAyMTFfc2V0X2NoYW5uZWwsCisJLnN1c3BlbmQgPSBpZWVlODAyMTFfc3VzcGVuZCwKKwkucmVzdW1lID0gaWVlZTgwMjExX3Jlc3VtZSwKKwkuc2NhbiA9IGllZWU4MDIxMV9zY2FuLAorCS5hdXRoID0gaWVlZTgwMjExX2F1dGgsCisJLmFzc29jID0gaWVlZTgwMjExX2Fzc29jLAorCS5kZWF1dGggPSBpZWVlODAyMTFfZGVhdXRoLAorCS5kaXNhc3NvYyA9IGllZWU4MDIxMV9kaXNhc3NvYywKIH07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuYwppbmRleCAyNjk3YTJmLi4yMTBiOWI2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKQEAgLTQwLDYgKzQwLDEwIEBACiAJbG9jYWwtPmRlYnVnZnMubmFtZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIDA0MDAsIHBoeWQsCVwKIAkJCQkJCSAgbG9jYWwsICZuYW1lIyMgX29wcyk7CiAKKyNkZWZpbmUgREVCVUdGU19BRERfTU9ERShuYW1lLCBtb2RlKQkJCQkJXAorCWxvY2FsLT5kZWJ1Z2ZzLm5hbWUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCBtb2RlLCBwaHlkLAlcCisJCQkJCQkgIGxvY2FsLCAmbmFtZSMjIF9vcHMpOworCiAjZGVmaW5lIERFQlVHRlNfREVMKG5hbWUpCQkJCQkJXAogCWRlYnVnZnNfcmVtb3ZlKGxvY2FsLT5kZWJ1Z2ZzLm5hbWUpOwkJCQlcCiAJbG9jYWwtPmRlYnVnZnMubmFtZSA9IE5VTEw7CkBAIC01NywxMSArNjEsODAgQEAKIAkJICAgICAgbG9jYWwtPmh3LmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQpOwogREVCVUdGU19SRUFET05MWV9GSUxFKHRvdGFsX3BzX2J1ZmZlcmVkLCAyMCwgIiVkIiwKIAkJICAgICAgbG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkKTsKLURFQlVHRlNfUkVBRE9OTFlfRklMRSh3ZXBfaXYsIDIwLCAiJSMwNngiLAorREVCVUdGU19SRUFET05MWV9GSUxFKHdlcF9pdiwgMjAsICIlIzA4eCIsCiAJCSAgICAgIGxvY2FsLT53ZXBfaXYgJiAweGZmZmZmZik7CiBERUJVR0ZTX1JFQURPTkxZX0ZJTEUocmF0ZV9jdHJsX2FsZywgMTAwLCAiJXMiLAogCQkgICAgICBsb2NhbC0+cmF0ZV9jdHJsID8gbG9jYWwtPnJhdGVfY3RybC0+b3BzLT5uYW1lIDogIjx1bnNldD4iKTsKIAorc3RhdGljIHNzaXplX3QgdHNmX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdTY0IHRzZiA9IDA7CisJY2hhciBidWZbMTAwXTsKKworCWlmIChsb2NhbC0+b3BzLT5nZXRfdHNmKQorCQl0c2YgPSBsb2NhbC0+b3BzLT5nZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisKKwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHglMDE2bGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSB0c2YpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCAxOSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRzZl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyBsb25nIHRzZjsKKwljaGFyIGJ1ZlsxMDBdOworCXNpemVfdCBsZW47CisKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCWJ1ZltsZW5dID0gJ1wwJzsKKworCWlmIChzdHJuY21wKGJ1ZiwgInJlc2V0IiwgNSkgPT0gMCkgeworCQlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKSB7CisJCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkZWJ1Z2ZzIHJlc2V0IFRTRlxuIiwgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKKwkJfQorCX0gZWxzZSB7CisJCXRzZiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisJCWlmIChsb2NhbC0+b3BzLT5zZXRfdHNmKSB7CisJCQlsb2NhbC0+b3BzLT5zZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSwgdHNmKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkZWJ1Z2ZzIHNldCBUU0YgdG8gJSMwMThsbHhcbiIsIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgdHNmKTsKKwkJfQorCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHNmX29wcyA9IHsKKwkucmVhZCA9IHRzZl9yZWFkLAorCS53cml0ZSA9IHRzZl93cml0ZSwKKwkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljCit9OworCitzdGF0aWMgc3NpemVfdCByZXNldF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlydG5sX2xvY2soKTsKKwlfX2llZWU4MDIxMV9zdXNwZW5kKCZsb2NhbC0+aHcpOworCV9faWVlZTgwMjExX3Jlc3VtZSgmbG9jYWwtPmh3KTsKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZXNldF9vcHMgPSB7CisJLndyaXRlID0gcmVzZXRfd3JpdGUsCisJLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYywKK307CisKIC8qIHN0YXRpc3RpY3Mgc3R1ZmYgKi8KIAogI2RlZmluZSBERUJVR0ZTX1NUQVRTX0ZJTEUobmFtZSwgYnVmbGVuLCBmbXQsIHZhbHVlLi4uKQkJCVwKQEAgLTEzNiw4ICsyMDksNiBAQAogCQkgICBsb2NhbC0+ZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQpOwogREVCVUdGU19TVEFUU19GSUxFKHRyYW5zbWl0dGVkX2ZyYW1lX2NvdW50LCAyMCwgIiV1IiwKIAkJICAgbG9jYWwtPmRvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50KTsKLURFQlVHRlNfU1RBVFNfRklMRSh3ZXBfdW5kZWNyeXB0YWJsZV9jb3VudCwgMjAsICIldSIsCi0JCSAgIGxvY2FsLT5kb3QxMVdFUFVuZGVjcnlwdGFibGVDb3VudCk7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX0NPVU5URVJTCiBERUJVR0ZTX1NUQVRTX0ZJTEUodHhfaGFuZGxlcnNfZHJvcCwgMjAsICIldSIsCiAJCSAgIGxvY2FsLT50eF9oYW5kbGVyc19kcm9wKTsKQEAgLTIwNCw2ICsyNzUsOCBAQAogCURFQlVHRlNfQUREKGxvbmdfcmV0cnlfbGltaXQpOwogCURFQlVHRlNfQUREKHRvdGFsX3BzX2J1ZmZlcmVkKTsKIAlERUJVR0ZTX0FERCh3ZXBfaXYpOworCURFQlVHRlNfQUREKHRzZik7CisJREVCVUdGU19BRERfTU9ERShyZXNldCwgMDIwMCk7CiAKIAlzdGF0c2QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInN0YXRpc3RpY3MiLCBwaHlkKTsKIAlsb2NhbC0+ZGVidWdmcy5zdGF0aXN0aWNzID0gc3RhdHNkOwpAQCAtMjIxLDcgKzI5NCw2IEBACiAJREVCVUdGU19TVEFUU19BREQocmVjZWl2ZWRfZnJhZ21lbnRfY291bnQpOwogCURFQlVHRlNfU1RBVFNfQUREKG11bHRpY2FzdF9yZWNlaXZlZF9mcmFtZV9jb3VudCk7CiAJREVCVUdGU19TVEFUU19BREQodHJhbnNtaXR0ZWRfZnJhbWVfY291bnQpOwotCURFQlVHRlNfU1RBVFNfQUREKHdlcF91bmRlY3J5cHRhYmxlX2NvdW50KTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKIAlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19kcm9wKTsKIAlERUJVR0ZTX1NUQVRTX0FERCh0eF9oYW5kbGVyc19xdWV1ZWQpOwpAQCAtMjU4LDYgKzMzMCw4IEBACiAJREVCVUdGU19ERUwobG9uZ19yZXRyeV9saW1pdCk7CiAJREVCVUdGU19ERUwodG90YWxfcHNfYnVmZmVyZWQpOwogCURFQlVHRlNfREVMKHdlcF9pdik7CisJREVCVUdGU19ERUwodHNmKTsKKwlERUJVR0ZTX0RFTChyZXNldCk7CiAKIAlERUJVR0ZTX1NUQVRTX0RFTCh0cmFuc21pdHRlZF9mcmFnbWVudF9jb3VudCk7CiAJREVCVUdGU19TVEFUU19ERUwobXVsdGljYXN0X3RyYW5zbWl0dGVkX2ZyYW1lX2NvdW50KTsKQEAgLTI2OCw3ICszNDIsNiBAQAogCURFQlVHRlNfU1RBVFNfREVMKHJlY2VpdmVkX2ZyYWdtZW50X2NvdW50KTsKIAlERUJVR0ZTX1NUQVRTX0RFTChtdWx0aWNhc3RfcmVjZWl2ZWRfZnJhbWVfY291bnQpOwogCURFQlVHRlNfU1RBVFNfREVMKHRyYW5zbWl0dGVkX2ZyYW1lX2NvdW50KTsKLQlERUJVR0ZTX1NUQVRTX0RFTCh3ZXBfdW5kZWNyeXB0YWJsZV9jb3VudCk7CiAJREVCVUdGU19TVEFUU19ERUwobnVtX3NjYW5zKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKIAlERUJVR0ZTX1NUQVRTX0RFTCh0eF9oYW5kbGVyc19kcm9wKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKaW5kZXggNjQyNGFjNS4uOTljNzUyNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMKQEAgLTc2LDYgKzc2LDkgQEAKIAljYXNlIEFMR19DQ01QOgogCQlhbGcgPSAiQ0NNUFxuIjsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCWFsZyA9ICJBRVMtMTI4LUNNQUNcbiI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTEwNSw2ICsxMDgsMTIgQEAKIAkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCiAJCQkJdHBuWzBdLCB0cG5bMV0sIHRwblsyXSwgdHBuWzNdLCB0cG5bNF0sIHRwbls1XSk7CiAJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQl0cG4gPSBrZXktPnUuYWVzX2NtYWMudHhfcG47CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJCXRwblswXSwgdHBuWzFdLCB0cG5bMl0sIHRwblszXSwgdHBuWzRdLAorCQkJCXRwbls1XSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTE0Miw2ICsxNTEsMTQgQEAKIAkJfQogCQlsZW4gPSBwIC0gYnVmOwogCQlicmVhazsKKwljYXNlIEFMR19BRVNfQ01BQzoKKwkJcnBuID0ga2V5LT51LmFlc19jbWFjLnJ4X3BuOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwKKwkJCSAgICAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJICAgICAgIHJwblswXSwgcnBuWzFdLCBycG5bMl0sCisJCQkgICAgICAgcnBuWzNdLCBycG5bNF0sIHJwbls1XSk7CisJCWxlbiA9IHAgLSBidWY7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTE1NiwxMyArMTczLDQwIEBACiAJY2hhciBidWZbMjBdOwogCWludCBsZW47CiAKLQlpZiAoa2V5LT5jb25mLmFsZyAhPSBBTEdfQ0NNUCkKKwlzd2l0Y2ggKGtleS0+Y29uZi5hbGcpIHsKKwljYXNlIEFMR19DQ01QOgorCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBrZXktPnUuY2NtcC5yZXBsYXlzKTsKKwkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsCisJCQkJa2V5LT51LmFlc19jbWFjLnJlcGxheXMpOworCQlicmVhazsKKwlkZWZhdWx0OgogCQlyZXR1cm4gMDsKLQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBrZXktPnUuY2NtcC5yZXBsYXlzKTsKKwl9CiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CiB9CiBLRVlfT1BTKHJlcGxheXMpOwogCitzdGF0aWMgc3NpemVfdCBrZXlfaWN2ZXJyb3JzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyYnVmLAorCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlsyMF07CisJaW50IGxlbjsKKworCXN3aXRjaCAoa2V5LT5jb25mLmFsZykgeworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLAorCQkJCWtleS0+dS5hZXNfY21hYy5pY3ZlcnJvcnMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7Cit9CitLRVlfT1BTKGljdmVycm9ycyk7CisKIHN0YXRpYyBzc2l6ZV90IGtleV9rZXlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC0yMjIsNiArMjY2LDcgQEAKIAlERUJVR0ZTX0FERCh0eF9zcGVjKTsKIAlERUJVR0ZTX0FERChyeF9zcGVjKTsKIAlERUJVR0ZTX0FERChyZXBsYXlzKTsKKwlERUJVR0ZTX0FERChpY3ZlcnJvcnMpOwogCURFQlVHRlNfQUREKGtleSk7CiAJREVCVUdGU19BREQoaWZpbmRleCk7CiB9OwpAQCAtMjQzLDYgKzI4OCw3IEBACiAJREVCVUdGU19ERUwodHhfc3BlYyk7CiAJREVCVUdGU19ERUwocnhfc3BlYyk7CiAJREVCVUdGU19ERUwocmVwbGF5cyk7CisJREVCVUdGU19ERUwoaWN2ZXJyb3JzKTsKIAlERUJVR0ZTX0RFTChrZXkpOwogCURFQlVHRlNfREVMKGlmaW5kZXgpOwogCkBAIC0yODAsNiArMzI2LDM1IEBACiAJc2RhdGEtPmNvbW1vbl9kZWJ1Z2ZzLmRlZmF1bHRfa2V5ID0gTlVMTDsKIH0KIAordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX21nbXRfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwljaGFyIGJ1Zls1MF07CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleTsKKworCWlmICghc2RhdGEtPmRlYnVnZnNkaXIpCisJCXJldHVybjsKKworCS8qIHRoaXMgaXMgcnVubmluZyB1bmRlciB0aGUga2V5IGxvY2sgKi8KKworCWtleSA9IHNkYXRhLT5kZWZhdWx0X21nbXRfa2V5OworCWlmIChrZXkpIHsKKwkJc3ByaW50ZihidWYsICIuLi9rZXlzLyVkIiwga2V5LT5kZWJ1Z2ZzLmNudCk7CisJCXNkYXRhLT5jb21tb25fZGVidWdmcy5kZWZhdWx0X21nbXRfa2V5ID0KKwkJCWRlYnVnZnNfY3JlYXRlX3N5bWxpbmsoImRlZmF1bHRfbWdtdF9rZXkiLAorCQkJCQkgICAgICAgc2RhdGEtPmRlYnVnZnNkaXIsIGJ1Zik7CisJfSBlbHNlCisJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KHNkYXRhKTsKK30KKwordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlpZiAoIXNkYXRhKQorCQlyZXR1cm47CisKKwlkZWJ1Z2ZzX3JlbW92ZShzZGF0YS0+Y29tbW9uX2RlYnVnZnMuZGVmYXVsdF9tZ210X2tleSk7CisJc2RhdGEtPmNvbW1vbl9kZWJ1Z2ZzLmRlZmF1bHRfbWdtdF9rZXkgPSBOVUxMOworfQorCiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfZGVsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuaCBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCmluZGV4IGIxYTM3NTQuLjU0NzE3YjQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX2tleS5oCkBAIC02LDYgKzYsMTAgQEAKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9tZ210X2RlZmF1bHQoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwordm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfZGVsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEpOwogI2Vsc2UKQEAgLTE5LDYgKzIzLDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX21nbXRfZGVmYXVsdCgKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3t9CitzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9tZ210X2RlZmF1bHQoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7fQogc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9zdGFfZGVsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJCQkgc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7fQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwppbmRleCBjNTQyMTkzLi5lMzQyMDMyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYwpAQCAtOTQsMzEgKzk0LDMxIEBACiBJRUVFODAyMTFfSUZfRklMRShmb3JjZV91bmljYXN0X3JhdGVpZHgsIGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgREVDKTsKIElFRUU4MDIxMV9JRl9GSUxFKG1heF9yYXRlY3RybF9yYXRlaWR4LCBtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgREVDKTsKIAotLyogU1RBL0lCU1MgYXR0cmlidXRlcyAqLwotSUVFRTgwMjExX0lGX0ZJTEUoc3RhdGUsIHUuc3RhLnN0YXRlLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoYnNzaWQsIHUuc3RhLmJzc2lkLCBNQUMpOwotSUVFRTgwMjExX0lGX0ZJTEUocHJldl9ic3NpZCwgdS5zdGEucHJldl9ic3NpZCwgTUFDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKHNzaWRfbGVuLCB1LnN0YS5zc2lkX2xlbiwgU0laRSk7Ci1JRUVFODAyMTFfSUZfRklMRShhaWQsIHUuc3RhLmFpZCwgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGFwX2NhcGFiLCB1LnN0YS5hcF9jYXBhYiwgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGNhcGFiLCB1LnN0YS5jYXBhYiwgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGV4dHJhX2llX2xlbiwgdS5zdGEuZXh0cmFfaWVfbGVuLCBTSVpFKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJpZXMsIHUuc3RhLmF1dGhfdHJpZXMsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhc3NvY190cmllcywgdS5zdGEuYXNzb2NfdHJpZXMsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZ3MsIHUuc3RhLmF1dGhfYWxncywgSEVYKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxnLCB1LnN0YS5hdXRoX2FsZywgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJhbnNhY3Rpb24sIHUuc3RhLmF1dGhfdHJhbnNhY3Rpb24sIERFQyk7CisvKiBTVEEgYXR0cmlidXRlcyAqLworSUVFRTgwMjExX0lGX0ZJTEUoc3RhdGUsIHUubWdkLnN0YXRlLCBERUMpOworSUVFRTgwMjExX0lGX0ZJTEUoYnNzaWQsIHUubWdkLmJzc2lkLCBNQUMpOworSUVFRTgwMjExX0lGX0ZJTEUocHJldl9ic3NpZCwgdS5tZ2QucHJldl9ic3NpZCwgTUFDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKHNzaWRfbGVuLCB1Lm1nZC5zc2lkX2xlbiwgU0laRSk7CitJRUVFODAyMTFfSUZfRklMRShhaWQsIHUubWdkLmFpZCwgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGFwX2NhcGFiLCB1Lm1nZC5hcF9jYXBhYiwgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGNhcGFiLCB1Lm1nZC5jYXBhYiwgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGV4dHJhX2llX2xlbiwgdS5tZ2QuZXh0cmFfaWVfbGVuLCBTSVpFKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJpZXMsIHUubWdkLmF1dGhfdHJpZXMsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShhc3NvY190cmllcywgdS5tZ2QuYXNzb2NfdHJpZXMsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShhdXRoX2FsZ3MsIHUubWdkLmF1dGhfYWxncywgSEVYKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfYWxnLCB1Lm1nZC5hdXRoX2FsZywgREVDKTsKK0lFRUU4MDIxMV9JRl9GSUxFKGF1dGhfdHJhbnNhY3Rpb24sIHUubWdkLmF1dGhfdHJhbnNhY3Rpb24sIERFQyk7CiAKIHN0YXRpYyBzc2l6ZV90IGllZWU4MDIxMV9pZl9mbXRfZmxhZ3MoCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKIHsKIAlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMlcyVzJXMlcyVzJXNcbiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUID8gIlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUID8gIkJTU0lEXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUID8gInByZXYgQlNTSURcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCA/ICJBVVRIXG4iIDogIiIsCi0JCSBzZGF0YS0+dS5zdGEuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQgPyAiQVNTT0NcbiIgOiAiIiwKLQkJIHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCA/ICJQUk9CRVJFUSBQT0xMXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1NTSURfU0VUID8gIlNTSURcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUID8gIkJTU0lEXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUID8gInByZXYgQlNTSURcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRCA/ICJBVVRIXG4iIDogIiIsCisJCSBzZGF0YS0+dS5tZ2QuZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQgPyAiQVNTT0NcbiIgOiAiIiwKKwkJIHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTCA/ICJQUk9CRVJFUSBQT0xMXG4iIDogIiIsCiAJCSBzZGF0YS0+dmlmLmJzc19jb25mLnVzZV9jdHNfcHJvdCA/ICJDVFMgcHJvdFxuIiA6ICIiKTsKIH0KIF9fSUVFRTgwMjExX0lGX0ZJTEUoZmxhZ3MpOwpAQCAtMjgzLDkgKzI4MywxMSBAQAogI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlhZGRfc3RhX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJLyogWFhYICovCisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWFkZF9hcF9maWxlcyhzZGF0YSk7CiAJCWJyZWFrOwpAQCAtNDE4LDkgKzQyMCwxMSBAQAogI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCQlkZWxfc3RhX2ZpbGVzKHNkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJLyogWFhYICovCisJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWRlbF9hcF9maWxlcyhzZGF0YSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwppbmRleCBhMmZiZTAxLi45MDIzMGM3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwpAQCAtNjcsMTQgKzY3LDE1IEBACiAJY2hhciBidWZbMTAwXTsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAl1MzIgc3RhZmxhZ3MgPSBnZXRfc3RhX2ZsYWdzKHN0YSk7Ci0JaW50IHJlcyA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMlcyVzJXMlcyVzJXMiLAorCWludCByZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzJXMlcyVzJXMlcyVzJXMiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX0FVVEggPyAiQVVUSFxuIiA6ICIiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX0FTU09DID8gIkFTU09DXG4iIDogIiIsCiAJCXN0YWZsYWdzICYgV0xBTl9TVEFfUFMgPyAiUFNcbiIgOiAiIiwKIAkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9BVVRIT1JJWkVEID8gIkFVVEhPUklaRURcbiIgOiAiIiwKIAkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9TSE9SVF9QUkVBTUJMRSA/ICJTSE9SVCBQUkVBTUJMRVxuIiA6ICIiLAogCQlzdGFmbGFncyAmIFdMQU5fU1RBX1dNRSA/ICJXTUVcbiIgOiAiIiwKLQkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9XRFMgPyAiV0RTXG4iIDogIiIpOworCQlzdGFmbGFncyAmIFdMQU5fU1RBX1dEUyA/ICJXRFNcbiIgOiAiIiwKKwkJc3RhZmxhZ3MgJiBXTEFOX1NUQV9NRlAgPyAiTUZQXG4iIDogIiIpOwogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOwogfQogU1RBX09QUyhmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaHQuYyBiL25ldC9tYWM4MDIxMS9odC5jCmluZGV4IGM1YzBjNTIuLjRlM2M3MmYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9odC5jCisrKyBiL25ldC9tYWM4MDIxMS9odC5jCkBAIC0xNyw4ICsxNyw3IEBACiAjaW5jbHVkZSA8bmV0L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKLSNpbmNsdWRlICJzdGFfaW5mby5oIgotI2luY2x1ZGUgIndtZS5oIgorI2luY2x1ZGUgInJhdGUuaCIKIAogdm9pZCBpZWVlODAyMTFfaHRfY2FwX2llX3RvX3N0YV9odF9jYXAoc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwICpodF9jYXBfaWUsCkBAIC05NSw3ICs5NCw5IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfaHRfY29uZiBodDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MzIgY2hhbmdlZCA9IDA7CiAJYm9vbCBlbmFibGVfaHQgPSB0cnVlLCBodF9jaGFuZ2VkOwogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlID0gTkw4MDIxMV9DSEFOX05PX0hUOwpAQCAtMTMwLDE0ICsxMzEsMjUgQEAKIAkJfQogCX0KIAotCWh0X2NoYW5nZWQgPSBsb2NhbC0+aHcuY29uZi5odC5lbmFibGVkICE9IGVuYWJsZV9odCB8fAotCQkgICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+aHcuY29uZi5odC5jaGFubmVsX3R5cGU7CisJaHRfY2hhbmdlZCA9IGNvbmZfaXNfaHQoJmxvY2FsLT5ody5jb25mKSAhPSBlbmFibGVfaHQgfHwKKwkJICAgICBjaGFubmVsX3R5cGUgIT0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbF90eXBlOwogCiAJbG9jYWwtPm9wZXJfY2hhbm5lbF90eXBlID0gY2hhbm5lbF90eXBlOwotCWxvY2FsLT5ody5jb25mLmh0LmVuYWJsZWQgPSBlbmFibGVfaHQ7CiAKLQlpZiAoaHRfY2hhbmdlZCkKLQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0hUKTsKKwlpZiAoaHRfY2hhbmdlZCkgeworICAgICAgICAgICAgICAgIC8qIGNoYW5uZWxfdHlwZSBjaGFuZ2UgYXV0b21hdGljYWxseSBkZXRlY3RlZCAqLworCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCAwKTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOworCQlpZiAoc3RhKQorCQkJcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKGxvY2FsLCBzYmFuZCwgc3RhLAorCQkJCQkJIElFRUU4MDIxMV9SQ19IVF9DSEFOR0VEKTsKKworCQlyY3VfcmVhZF91bmxvY2soKTsKKworICAgICAgICB9CiAKIAkvKiBkaXNhYmxlIEhUICovCiAJaWYgKCFlbmFibGVfaHQpCkBAIC0xNTQsMTA4ICsxNjYsMjIgQEAKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfYWRkYmFfcmVxdWVzdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKLQkJCQkJIHU4IGRpYWxvZ190b2tlbiwgdTE2IHN0YXJ0X3NlcV9udW0sCi0JCQkJCSB1MTYgYWdnX3NpemUsIHUxNiB0aW1lb3V0KQordm9pZCBpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXUxNiBjYXBhYjsKKwlpbnQgaTsKIAotCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCptZ210KSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyICIKLQkJCQkiZm9yIGFkZGJhIHJlcXVlc3QgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm47CisJZm9yIChpID0gMDsgaSA8ICBTVEFfVElEX05VTTsgaSsrKSB7CisJCV9faWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdGEsIGksIFdMQU5fQkFDS19JTklUSUFUT1IpOworCQlfX2llZWU4MDIxMV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RhLCBpLCBXTEFOX0JBQ0tfUkVDSVBJRU5ULAorCQkJCQkgICAgICAgV0xBTl9SRUFTT05fUVNUQV9MRUFWRV9RQlNTKTsKIAl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7Ci0JbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZW1jcHkobWdtdC0+ZGEsIGRhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwotCi0Jc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEpKTsKLQotCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gV0xBTl9DQVRFR09SWV9CQUNLOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVROwotCi0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOwotCWNhcGFiID0gKHUxNikoMSA8PCAxKTsJCS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLwotCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLwotCWNhcGFiIHw9ICh1MTYpKGFnZ19zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dlcmdhdGlvbiAqLwotCi0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuY2FwYWIgPSBjcHVfdG9fbGUxNihjYXBhYik7Ci0KLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEuc3RhcnRfc2VxX251bSA9Ci0JCQkJCWNwdV90b19sZTE2KHN0YXJ0X3NlcV9udW0gPDwgNCk7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1OCAqZGEsIHUxNiB0aWQsCi0JCQkJICAgICAgdTggZGlhbG9nX3Rva2VuLCB1MTYgc3RhdHVzLCB1MTYgcG9saWN5LAotCQkJCSAgICAgIHUxNiBidWZfc2l6ZSwgdTE2IHRpbWVvdXQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1MTYgY2FwYWI7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemVvZigqbWdtdCkgKyBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyICIKLQkJICAgICAgICJmb3IgYWRkYmEgcmVzcCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWVsc2UKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwotCi0Jc2tiX3B1dChza2IsIDEgKyBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwKSk7Ci0JbWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgPSBXTEFOX0NBVEVHT1JZX0JBQ0s7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmFjdGlvbl9jb2RlID0gV0xBTl9BQ1RJT05fQUREQkFfUkVTUDsKLQltZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuZGlhbG9nX3Rva2VuID0gZGlhbG9nX3Rva2VuOwotCi0JY2FwYWIgPSAodTE2KShwb2xpY3kgPDwgMSk7CS8qIGJpdCAxIGFnZ3JlZ2F0aW9uIHBvbGljeSAqLwotCWNhcGFiIHw9ICh1MTYpKHRpZCA8PCAyKTsgCS8qIGJpdCA1OjIgVElEIG51bWJlciAqLwotCWNhcGFiIHw9ICh1MTYpKGJ1Zl9zaXplIDw8IDYpOwkvKiBiaXQgMTU6NiBtYXggc2l6ZSBvZiBhZ2dyZWdhdGlvbiAqLwotCi0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLmNhcGFiID0gY3B1X3RvX2xlMTYoY2FwYWIpOwotCW1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC50aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCk7Ci0JbWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cyA9IGNwdV90b19sZTE2KHN0YXR1cyk7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9kZWxiYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgY29uc3QgdTggKmRhLCB1MTYgdGlkLAotCQkJCSB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uX2NvZGUpCit2b2lkIGllZWU4MDIxMV9zZW5kX2RlbGJhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICBjb25zdCB1OCAqZGEsIHUxNiB0aWQsCisJCQkgIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb25fY29kZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwogCXUxNiBwYXJhbXM7CkBAIC0yNzMsMTAgKzE5OSwxMiBAQAogCW1lbXNldChtZ210LCAwLCAyNCk7CiAJbWVtY3B5KG1nbXQtPmRhLCBkYSwgRVRIX0FMRU4pOwogCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCiAJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQllbHNlCi0JCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKIAltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwogCkBAIC0yOTAsNzcwICsyMTgsNyBAQAogCW1nbXQtPnUuYWN0aW9uLnUuZGVsYmEucGFyYW1zID0gY3B1X3RvX2xlMTYocGFyYW1zKTsKIAltZ210LT51LmFjdGlvbi51LmRlbGJhLnJlYXNvbl9jb2RlID0gY3B1X3RvX2xlMTYocmVhc29uX2NvZGUpOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKLX0KLQotdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfYmFyICpiYXI7Ci0JdTE2IGJhcl9jb250cm9sID0gMDsKLQotCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpiYXIpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCi0JCQkiYmFyIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0JYmFyID0gKHN0cnVjdCBpZWVlODAyMTFfYmFyICopc2tiX3B1dChza2IsIHNpemVvZigqYmFyKSk7Ci0JbWVtc2V0KGJhciwgMCwgc2l6ZW9mKCpiYXIpKTsKLQliYXItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwKLQkJCQkJIElFRUU4MDIxMV9TVFlQRV9CQUNLX1JFUSk7Ci0JbWVtY3B5KGJhci0+cmEsIHJhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KGJhci0+dGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JYmFyX2NvbnRyb2wgfD0gKHUxNilJRUVFODAyMTFfQkFSX0NUUkxfQUNLX1BPTElDWV9OT1JNQUw7Ci0JYmFyX2NvbnRyb2wgfD0gKHUxNilJRUVFODAyMTFfQkFSX0NUUkxfQ0JNVElEX0NPTVBSRVNTRURfQkE7Ci0JYmFyX2NvbnRyb2wgfD0gKHUxNikodGlkIDw8IDEyKTsKLQliYXItPmNvbnRyb2wgPSBjcHVfdG9fbGUxNihiYXJfY29udHJvbCk7Ci0JYmFyLT5zdGFydF9zZXFfbnVtID0gY3B1X3RvX2xlMTYoc3NuKTsKLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpyYSwgdTE2IHRpZCwKLQkJCQkJdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaW50IHJldCwgaTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogY2hlY2sgaWYgVElEIGlzIGluIG9wZXJhdGlvbmFsIHN0YXRlICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W3RpZF0KLQkJCQkhPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9Ci0JCUhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0sgfAotCQkoaW5pdGlhdG9yIDw8IEhUX0FHR19TVEFURV9JTklUSUFUT1JfU0hJRlQpOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JLyogc3RvcCBIVyBSeCBhZ2dyZWdhdGlvbi4gYW1wZHVfYWN0aW9uIGV4aXN0ZW5jZQotCSAqIGFscmVhZHkgdmVyaWZpZWQgaW4gc2Vzc2lvbiBpbml0IHNvIHdlIGFkZCB0aGUgQlVHX09OICovCi0JQlVHX09OKCFsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgIlJ4IEJBIHNlc3Npb24gc3RvcCByZXF1ZXN0ZWQgZm9yICVwTSB0aWQgJXVcbiIsCi0JICAgICAgIHJhLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCi0JcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUCwKLQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsIE5VTEwpOwotCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0RFQlVHICJIVyBwcm9ibGVtIC0gY2FuIG5vdCBzdG9wIHJ4ICIKLQkJCQkiYWdncmVnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKLQotCS8qIHNodXRkb3duIHRpbWVyIGhhcyBub3QgZXhwaXJlZCAqLwotCWlmIChpbml0aWF0b3IgIT0gV0xBTl9CQUNLX1RJTUVSKQotCQlkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyKTsKLQotCS8qIGNoZWNrIGlmIHRoaXMgaXMgYSBzZWxmIGdlbmVyYXRlZCBhZ2dyZWdhdGlvbiBoYWx0ICovCi0JaWYgKGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfUkVDSVBJRU5UIHx8IGluaXRpYXRvciA9PSBXTEFOX0JBQ0tfVElNRVIpCi0JCWllZWU4MDIxMV9zZW5kX2RlbGJhKHNkYXRhLCByYSwgdGlkLCAwLCByZWFzb24pOwotCi0JLyogZnJlZSB0aGUgcmVvcmRlcmluZyBidWZmZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5idWZfc2l6ZTsgaSsrKSB7Ci0JCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0tPnJlb3JkZXJfYnVmW2ldKSB7Ci0JCQkvKiByZWxlYXNlIHRoZSByZW9yZGVyZWQgZnJhbWVzICovCi0JCQlkZXZfa2ZyZWVfc2tiKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0pOwotCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zdG9yZWRfbXBkdV9udW0tLTsKLQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+cmVvcmRlcl9idWZbaV0gPSBOVUxMOwotCQl9Ci0JfQotCS8qIGZyZWUgcmVzb3VyY2VzICovCi0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5yZW9yZGVyX2J1Zik7Ci0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdKTsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0gPSBOVUxMOwotCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9IEhUX0FHR19TVEFURV9JRExFOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLQotLyoKLSAqIEFmdGVyIHNlbmRpbmcgYWRkIEJsb2NrIEFjayByZXF1ZXN0IHdlIGFjdGl2YXRlZCBhIHRpbWVyIHVudGlsCi0gKiBhZGQgQmxvY2sgQWNrIHJlc3BvbnNlIHdpbGwgYXJyaXZlIGZyb20gdGhlIHJlY2lwaWVudC4KLSAqIElmIHRoaXMgdGltZXIgZXhwaXJlcyBzdGFfYWRkYmFfcmVzcF90aW1lcl9leHBpcmVkIHdpbGwgYmUgZXhlY3V0ZWQuCi0gKi8KLXN0YXRpYyB2b2lkIHN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCS8qIG5vdCBhbiBlbGVnYW50IGRldG91ciwgYnV0IHRoZXJlIGlzIG5vIGNob2ljZSBhcyB0aGUgdGltZXIgcGFzc2VzCi0JICogb25seSBvbmUgYXJndW1lbnQsIGFuZCBib3RoIHN0YV9pbmZvIGFuZCBUSUQgYXJlIG5lZWRlZCwgc28gaW5pdAotCSAqIGZsb3cgaW4gc3RhX2luZm9fY3JlYXRlIGdpdmVzIHRoZSBUSUQgYXMgZGF0YSwgd2hpbGUgdGhlIHRpbWVyX3RvX2lkCi0JICogYXJyYXkgZ2l2ZXMgdGhlIHN0YSB0aHJvdWdoIGNvbnRhaW5lcl9vZiAqLwotCXUxNiB0aWQgPSAqKHU4ICopZGF0YTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnRlbXBfc3RhID0gY29udGFpbmVyX29mKCh2b2lkICopZGF0YSwKLQkJc3RydWN0IHN0YV9pbmZvLCB0aW1lcl90b190aWRbdGlkXSk7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHRlbXBfc3RhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTggKnN0YXRlOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCB0ZW1wX3N0YS0+c3RhLmFkZHIpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCS8qIGNoZWNrIGlmIHRoZSBUSUQgd2FpdHMgZm9yIGFkZEJBIHJlc3BvbnNlICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfSURMRTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgInRpbWVyIGV4cGlyZWQgb24gdGlkICVkIGJ1dCB3ZSBhcmUgbm90ICIKLQkJCQkiZXhwZWN0aW5nIGFkZEJBIHJlc3BvbnNlIHRoZXJlIiwgdGlkKTsKLSNlbmRpZgotCQlnb3RvIHRpbWVyX2V4cGlyZWRfZXhpdDsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiYWRkQkEgcmVzcG9uc2UgdGltZXIgZXhwaXJlZCBvbiB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYKLQotCS8qIGdvIHRocm91Z2ggdGhlIHN0YXRlIGNoZWNrIGluIHN0b3BfQkFfc2Vzc2lvbiAqLwotCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQlpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKGh3LCB0ZW1wX3N0YS0+c3RhLmFkZHIsIHRpZCwKLQkJCQkgICAgIFdMQU5fQkFDS19JTklUSUFUT1IpOwotCi10aW1lcl9leHBpcmVkX2V4aXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICphZGRyKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8ICBTVEFfVElEX05VTTsgaSsrKSB7Ci0JCWllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24oJmxvY2FsLT5odywgYWRkciwgaSwKLQkJCQkJICAgICBXTEFOX0JBQ0tfSU5JVElBVE9SKTsKLQkJaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc2RhdGEsIGFkZHIsIGksCi0JCQkJCQkgV0xBTl9CQUNLX1JFQ0lQSUVOVCwKLQkJCQkJCSBXTEFOX1JFQVNPTl9RU1RBX0xFQVZFX1FCU1MpOwotCX0KLX0KLQotaW50IGllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqcmEsIHUxNiB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0JdTE2IHN0YXJ0X3NlcV9udW07Ci0JdTggKnN0YXRlOwotCWludCByZXQgPSAwOwotCi0JaWYgKCh0aWQgPj0gU1RBX1RJRF9OVU0pIHx8ICEoaHctPmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiT3BlbiBCQSBzZXNzaW9uIHJlcXVlc3RlZCBmb3IgJXBNIHRpZCAldVxuIiwKLQkgICAgICAgcmEsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKLQlpZiAoIXN0YSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgdGhlIHN0YXRpb25cbiIpOwotI2VuZGlmCi0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQkvKiB3ZSBoYXZlIHRyaWVkIHRvbyBtYW55IHRpbWVzLCByZWNlaXZlciBkb2VzIG5vdCB3YW50IEEtTVBEVSAqLwotCWlmIChzdGEtPmFtcGR1X21sbWUuYWRkYmFfcmVxX251bVt0aWRdID4gSFRfQUdHX01BWF9SRVRSSUVTKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBlcnJfdW5sb2NrX3N0YTsKLQl9Ci0KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0JLyogY2hlY2sgaWYgdGhlIFRJRCBpcyBub3QgaW4gYWdncmVnYXRpb24gZmxvdyBhbHJlYWR5ICovCi0JaWYgKCpzdGF0ZSAhPSBIVF9BR0dfU1RBVEVfSURMRSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSBzZXNzaW9uIGlzIG5vdCAiCi0JCQkJICJpZGxlIG9uIHRpZCAldVxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJcmV0ID0gLUVBR0FJTjsKLQkJZ290byBlcnJfdW5sb2NrX3N0YTsKLQl9Ci0KLQkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBUeCBhZ2dyZWdhdGlvbiAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3R4KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0pIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgdHggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAotCQkJCQl0aWQpOwotI2VuZGlmCi0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3VubG9ja19zdGE7Ci0JfQotCS8qIFR4IHRpbWVyICovCi0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmZ1bmN0aW9uID0KLQkJCXN0YV9hZGRiYV9yZXNwX3RpbWVyX2V4cGlyZWQ7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyLmRhdGEgPQotCQkJKHVuc2lnbmVkIGxvbmcpJnN0YS0+dGltZXJfdG9fdGlkW3RpZF07Ci0JaW5pdF90aW1lcigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5hZGRiYV9yZXNwX3RpbWVyKTsKLQotCWlmIChody0+YW1wZHVfcXVldWVzKSB7Ci0JCS8qIGNyZWF0ZSBhIG5ldyBxdWV1ZSBmb3IgdGhpcyBhZ2dyZWdhdGlvbiAqLwotCQlyZXQgPSBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChsb2NhbCwgc3RhLCB0aWQpOwotCi0JCS8qIGNhc2Ugbm8gcXVldWUgaXMgYXZhaWxhYmxlIHRvIGFnZ3JlZ2F0aW9uCi0JCSAqIGRvbid0IHN3aXRjaCB0byBhZ2dyZWdhdGlvbiAqLwotCQlpZiAocmV0KSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiQkEgcmVxdWVzdCBkZW5pZWQgLSAiCi0JCQkgICAgICAgInF1ZXVlIHVuYXZhaWxhYmxlIGZvciB0aWQgJWRcbiIsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCQlnb3RvIGVycl91bmxvY2tfcXVldWU7Ci0JCX0KLQl9Ci0Jc2RhdGEgPSBzdGEtPnNkYXRhOwotCi0JLyogT2ssIHRoZSBBZGRiYSBmcmFtZSBoYXNuJ3QgYmVlbiBzZW50IHlldCwgYnV0IGlmIHRoZSBkcml2ZXIgY2FsbHMgdGhlCi0JICogY2FsbCBiYWNrIHJpZ2h0IGF3YXksIGl0IG11c3Qgc2VlIHRoYXQgdGhlIGZsb3cgaGFzIGJlZ3VuICovCi0JKnN0YXRlIHw9IEhUX0FEREJBX1JFUVVFU1RFRF9NU0s7Ci0KLQkvKiBUaGlzIGlzIHNsaWdodGx5IHJhY3kgYmVjYXVzZSB0aGUgcXVldWUgaXNuJ3Qgc3RvcHBlZCAqLwotCXN0YXJ0X3NlcV9udW0gPSBzdGEtPnRpZF9zZXFbdGlkXTsKLQotCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCi0JCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAotCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKLQotCWlmIChyZXQpIHsKLQkJLyogTm8gbmVlZCB0byByZXF1ZXVlIHRoZSBwYWNrZXRzIGluIHRoZSBhZ2cgcXVldWUsIHNpbmNlIHdlCi0JCSAqIGhlbGQgdGhlIHR4IGxvY2s6IG5vIHBhY2tldCBjb3VsZCBiZSBlbnF1ZXVlZCB0byB0aGUgbmV3bHkKLQkJICogYWxsb2NhdGVkIHF1ZXVlICovCi0JCWlmIChody0+YW1wZHVfcXVldWVzKQotCQkJaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9yZW1vdmUobG9jYWwsIHN0YSwgdGlkLCAwKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkJBIHJlcXVlc3QgZGVuaWVkIC0gSFcgdW5hdmFpbGFibGUgZm9yIgotCQkJCQkiIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7Ci0JCWdvdG8gZXJyX3VubG9ja19xdWV1ZTsKLQl9Ci0KLQkvKiBXaWxsIHB1dCBhbGwgdGhlIHBhY2tldHMgaW4gdGhlIG5ldyBTVyBxdWV1ZSAqLwotCWlmIChody0+YW1wZHVfcXVldWVzKQotCQlpZWVlODAyMTFfcmVxdWV1ZShsb2NhbCwgaWVlZTgwMl8xZF90b19hY1t0aWRdKTsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCS8qIHNlbmQgYW4gYWRkQkEgcmVxdWVzdCAqLwotCXN0YS0+YW1wZHVfbWxtZS5kaWFsb2dfdG9rZW5fYWxsb2NhdG9yKys7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4gPQotCQkJc3RhLT5hbXBkdV9tbG1lLmRpYWxvZ190b2tlbl9hbGxvY2F0b3I7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24gPSBzdGFydF9zZXFfbnVtOwotCi0KLQlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXF1ZXN0KHN0YS0+c2RhdGEsIHJhLCB0aWQsCi0JCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4sCi0JCQkgc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5zc24sCi0JCQkgMHg0MCwgNTAwMCk7Ci0JLyogYWN0aXZhdGUgdGhlIHRpbWVyIGZvciB0aGUgcmVjaXBpZW50J3MgYWRkQkEgcmVzcG9uc2UgKi8KLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIuZXhwaXJlcyA9Ci0JCQkJamlmZmllcyArIEFEREJBX1JFU1BfSU5URVJWQUw7Ci0JYWRkX3RpbWVyKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0tPmFkZGJhX3Jlc3BfdGltZXIpOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJhY3RpdmF0ZWQgYWRkQkEgcmVzcG9uc2UgdGltZXIgb24gdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmCi0JZ290byBleGl0OwotCi1lcnJfdW5sb2NrX3F1ZXVlOgotCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXSk7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdID0gTlVMTDsKLQlyZXQgPSAtRUJVU1k7Ci1lcnJfdW5sb2NrX3N0YToKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLWV4aXQ6Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24pOwotCi1pbnQgaWVlZTgwMjExX3N0b3BfdHhfYmFfc2Vzc2lvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgdTggKnJhLCB1MTYgdGlkLAotCQkJCSBlbnVtIGllZWU4MDIxMV9iYWNrX3BhcnRpZXMgaW5pdGlhdG9yKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU4ICpzdGF0ZTsKLQlpbnQgcmV0ID0gMDsKLQotCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOwotCWlmICghc3RhKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm4gLUVOT0VOVDsKLQl9Ci0KLQkvKiBjaGVjayBpZiB0aGUgVElEIGlzIGluIGFnZ3JlZ2F0aW9uICovCi0Jc3RhdGUgPSAmc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFt0aWRdOwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCWlmICgqc3RhdGUgIT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gc3RvcF9CQV9leGl0OwotCX0KLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJUeCBCQSBzZXNzaW9uIHN0b3AgcmVxdWVzdGVkIGZvciAlcE0gdGlkICV1XG4iLAotCSAgICAgICByYSwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQotCWlmIChody0+YW1wZHVfcXVldWVzKQotCQlpZWVlODAyMTFfc3RvcF9xdWV1ZShodywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKLQotCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9SRVFfU1RPUF9CQV9NU0sgfAotCQkoaW5pdGlhdG9yIDw8IEhUX0FHR19TVEFURV9JTklUSUFUT1JfU0hJRlQpOwotCi0JaWYgKGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbikKLQkJcmV0ID0gbG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKGh3LCBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUCwKLQkJCQkJICAgICAgICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKLQotCS8qIGNhc2UgSFcgZGVuaWVkIGdvaW5nIGJhY2sgdG8gbGVnYWN5ICovCi0JaWYgKHJldCkgewotCQlXQVJOX09OKHJldCAhPSAtRUJVU1kpOwotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7Ci0JCWlmIChody0+YW1wZHVfcXVldWVzKQotCQkJaWVlZTgwMjExX3dha2VfcXVldWUoaHcsIHN0YS0+dGlkX3RvX3R4X3FbdGlkXSk7Ci0JCWdvdG8gc3RvcF9CQV9leGl0OwotCX0KLQotc3RvcF9CQV9leGl0OgotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24pOwotCi12b2lkIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1MTYgdGlkKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU4ICpzdGF0ZTsKLQotCWlmICh0aWQgPj0gU1RBX1RJRF9OVU0pIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkJhZCBUSUQgdmFsdWU6IHRpZCA9ICVkICg+PSAlZClcbiIsCi0JCQkJdGlkLCBTVEFfVElEX05VTSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQotCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKLQlpZiAoIXN0YSkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHN0YXRpb246ICVwTVxuIiwgcmEpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLQlzdGF0ZSA9ICZzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W3RpZF07Ci0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JaWYgKCEoKnN0YXRlICYgSFRfQUREQkFfUkVRVUVTVEVEX01TSykpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgImFkZEJBIHdhcyBub3QgcmVxdWVzdGVkIHlldCwgc3RhdGUgaXMgJWRcbiIsCi0JCQkJKnN0YXRlKTsKLSNlbmRpZgotCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlXQVJOX09OX09OQ0UoKnN0YXRlICYgSFRfQUREQkFfRFJWX1JFQURZX01TSyk7Ci0KLQkqc3RhdGUgfD0gSFRfQUREQkFfRFJWX1JFQURZX01TSzsKLQotCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJBZ2dyZWdhdGlvbiBpcyBvbiBmb3IgdGlkICVkIFxuIiwgdGlkKTsKLSNlbmRpZgotCQlpZiAoaHctPmFtcGR1X3F1ZXVlcykKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKGh3LCBzdGEtPnRpZF90b190eF9xW3RpZF0pOwotCX0KLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiKTsKLQotdm9pZCBpZWVlODAyMTFfc3RvcF90eF9iYV9jYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggKnJhLCB1OCB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdTggKnN0YXRlOwotCWludCBhZ2dfcXVldWU7Ci0KLQlpZiAodGlkID49IFNUQV9USURfTlVNKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJCYWQgVElEIHZhbHVlOiB0aWQgPSAlZCAoPj0gJWQpXG4iLAotCQkJCXRpZCwgU1RBX1RJRF9OVU0pOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiU3RvcHBpbmcgVHggQkEgc2Vzc2lvbiBmb3IgJXBNIHRpZCAlZFxuIiwKLQkgICAgICAgcmEsIHRpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCByYSk7Ci0JaWYgKCFzdGEpIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBmaW5kIHN0YXRpb246ICVwTVxuIiwgcmEpOwotI2VuZGlmCi0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm47Ci0JfQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQotCS8qIE5PVEU6IG5vIG5lZWQgdG8gdXNlIHN0YS0+bG9jayBpbiB0aGlzIHN0YXRlIGNoZWNrLCBhcwotCSAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX3Nlc3Npb24gd2lsbCBsZXQgb25seSBvbmUgc3RvcCBjYWxsIHRvCi0JICogcGFzcyB0aHJvdWdoIHBlciBzdGEvdGlkCi0JICovCi0JaWYgKCgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLKSA9PSAwKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJ1bmV4cGVjdGVkIGNhbGxiYWNrIHRvIEEtTVBEVSBzdG9wXG4iKTsKLSNlbmRpZgotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmICgqc3RhdGUgJiBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX01TSykKLQkJaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RhLT5zZGF0YSwgcmEsIHRpZCwKLQkJCVdMQU5fQkFDS19JTklUSUFUT1IsIFdMQU5fUkVBU09OX1FTVEFfTk9UX1VTRSk7Ci0KLQlpZiAoaHctPmFtcGR1X3F1ZXVlcykgewotCQlhZ2dfcXVldWUgPSBzdGEtPnRpZF90b190eF9xW3RpZF07Ci0JCWllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKGxvY2FsLCBzdGEsIHRpZCwgMSk7Ci0KLQkJLyogV2UganVzdCByZXF1ZXVlZCB0aGUgYWxsIHRoZSBmcmFtZXMgdGhhdCB3ZXJlIGluIHRoZQotCQkgKiByZW1vdmVkIHF1ZXVlLCBhbmQgc2luY2Ugd2UgbWlnaHQgbWlzcyBhIHNvZnRpcnEgd2UgZG8KLQkJICogbmV0aWZfc2NoZWR1bGVfcXVldWUuICBpZWVlODAyMTFfd2FrZV9xdWV1ZSBpcyBub3QgdXNlZAotCQkgKiBoZXJlIGFzIHRoaXMgcXVldWUgaXMgbm90IG5lY2Vzc2FyaWx5IHN0b3BwZWQKLQkJICovCi0JCW5ldGlmX3NjaGVkdWxlX3F1ZXVlKG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsCi0JCQkJCQkJIGFnZ19xdWV1ZSkpOwotCX0KLQlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JKnN0YXRlID0gSFRfQUdHX1NUQVRFX0lETEU7Ci0Jc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7Ci0Ja2ZyZWUoc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdKTsKLQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W3RpZF0gPSBOVUxMOwotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiKTsKLQotdm9pZCBpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgICBjb25zdCB1OCAqcmEsIHUxNiB0aWQpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7Ci0Jc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKnJhX3RpZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gZGV2X2FsbG9jX3NrYigwKTsKLQotCWlmICh1bmxpa2VseSghc2tiKSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCi0JCQkgICAgICAgImRyb3BwaW5nIHN0YXJ0IEJBIHNlc3Npb24iLCBza2ItPmRldi0+bmFtZSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQlyYV90aWQgPSAoc3RydWN0IGllZWU4MDIxMV9yYV90aWQgKikgJnNrYi0+Y2I7Ci0JbWVtY3B5KCZyYV90aWQtPnJhLCByYSwgRVRIX0FMRU4pOwotCXJhX3RpZC0+dGlkID0gdGlkOwotCi0Jc2tiLT5wa3RfdHlwZSA9IElFRUU4MDIxMV9BRERCQV9NU0c7Ci0Jc2tiX3F1ZXVlX3RhaWwoJmxvY2FsLT5za2JfcXVldWUsIHNrYik7Ci0JdGFza2xldF9zY2hlZHVsZSgmbG9jYWwtPnRhc2tsZXQpOwotfQotRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfc3RhcnRfdHhfYmFfY2JfaXJxc2FmZSk7Ci0KLXZvaWQgaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgIGNvbnN0IHU4ICpyYSwgdTE2IHRpZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhX3RpZCAqcmFfdGlkOwotCXN0cnVjdCBza19idWZmICpza2IgPSBkZXZfYWxsb2Nfc2tiKDApOwotCi0JaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTm90IGVub3VnaCBtZW1vcnksICIKLQkJCSAgICAgICAiZHJvcHBpbmcgc3RvcCBCQSBzZXNzaW9uIiwgc2tiLT5kZXYtPm5hbWUpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JcmFfdGlkID0gKHN0cnVjdCBpZWVlODAyMTFfcmFfdGlkICopICZza2ItPmNiOwotCW1lbWNweSgmcmFfdGlkLT5yYSwgcmEsIEVUSF9BTEVOKTsKLQlyYV90aWQtPnRpZCA9IHRpZDsKLQotCXNrYi0+cGt0X3R5cGUgPSBJRUVFODAyMTFfREVMQkFfTVNHOwotCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+c2tiX3F1ZXVlLCBza2IpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50YXNrbGV0KTsKLX0KLUVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSk7Ci0KLS8qCi0gKiBBZnRlciBhY2NlcHRpbmcgdGhlIEFkZEJBIFJlcXVlc3Qgd2UgYWN0aXZhdGVkIGEgdGltZXIsCi0gKiByZXNldHRpbmcgaXQgYWZ0ZXIgZWFjaCBmcmFtZSB0aGF0IGFycml2ZXMgZnJvbSB0aGUgb3JpZ2luYXRvci4KLSAqIGlmIHRoaXMgdGltZXIgZXhwaXJlcyBpZWVlODAyMTFfc3RhX3N0b3BfcnhfYmFfc2Vzc2lvbiB3aWxsIGJlIGV4ZWN1dGVkLgotICovCi1zdGF0aWMgdm9pZCBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JLyogbm90IGFuIGVsZWdhbnQgZGV0b3VyLCBidXQgdGhlcmUgaXMgbm8gY2hvaWNlIGFzIHRoZSB0aW1lciBwYXNzZXMKLQkgKiBvbmx5IG9uZSBhcmd1bWVudCwgYW5kIHZhcmlvdXMgc3RhX2luZm8gYXJlIG5lZWRlZCBoZXJlLCBzbyBpbml0Ci0JICogZmxvdyBpbiBzdGFfaW5mb19jcmVhdGUgZ2l2ZXMgdGhlIFRJRCBhcyBkYXRhLCB3aGlsZSB0aGUgdGltZXJfdG9faWQKLQkgKiBhcnJheSBnaXZlcyB0aGUgc3RhIHRocm91Z2ggY29udGFpbmVyX29mICovCi0JdTggKnB0aWQgPSAodTggKilkYXRhOwotCXU4ICp0aW1lcl90b19pZCA9IHB0aWQgLSAqcHRpZDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSA9IGNvbnRhaW5lcl9vZih0aW1lcl90b19pZCwgc3RydWN0IHN0YV9pbmZvLAotCQkJCQkgdGltZXJfdG9fdGlkWzBdKTsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJyeCBzZXNzaW9uIHRpbWVyIGV4cGlyZWQgb24gdGlkICVkXG4iLCAodTE2KSpwdGlkKTsKLSNlbmRpZgotCWllZWU4MDIxMV9zdGFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsCi0JCQkJCSAodTE2KSpwdGlkLCBXTEFOX0JBQ0tfVElNRVIsCi0JCQkJCSBXTEFOX1JFQVNPTl9RU1RBX1RJTUVPVVQpOwotfQotCi12b2lkIGllZWU4MDIxMV9wcm9jZXNzX2FkZGJhX3JlcXVlc3Qoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKLQkJCQkgICAgIHNpemVfdCBsZW4pCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwotCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKLQlzdHJ1Y3QgdGlkX2FtcGR1X3J4ICp0aWRfYWdnX3J4OwotCXUxNiBjYXBhYiwgdGlkLCB0aW1lb3V0LCBiYV9wb2xpY3ksIGJ1Zl9zaXplLCBzdGFydF9zZXFfbnVtLCBzdGF0dXM7Ci0JdTggZGlhbG9nX3Rva2VuOwotCWludCByZXQgPSAtRU9QTk9UU1VQUDsKLQotCS8qIGV4dHJhY3Qgc2Vzc2lvbiBwYXJhbWV0ZXJzIGZyb20gYWRkYmEgcmVxdWVzdCBmcmFtZSAqLwotCWRpYWxvZ190b2tlbiA9IG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmRpYWxvZ190b2tlbjsKLQl0aW1lb3V0ID0gbGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEudGltZW91dCk7Ci0Jc3RhcnRfc2VxX251bSA9Ci0JCWxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLnN0YXJ0X3NlcV9udW0pID4+IDQ7Ci0KLQljYXBhYiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmNhcGFiKTsKLQliYV9wb2xpY3kgPSAoY2FwYWIgJiBJRUVFODAyMTFfQUREQkFfUEFSQU1fUE9MSUNZX01BU0spID4+IDE7Ci0JdGlkID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX1RJRF9NQVNLKSA+PiAyOwotCWJ1Zl9zaXplID0gKGNhcGFiICYgSUVFRTgwMjExX0FEREJBX1BBUkFNX0JVRl9TSVpFX01BU0spID4+IDY7Ci0KLQlzdGF0dXMgPSBXTEFOX1NUQVRVU19SRVFVRVNUX0RFQ0xJTkVEOwotCi0JLyogc2FuaXR5IGNoZWNrIGZvciBpbmNvbWluZyBwYXJhbWV0ZXJzOgotCSAqIGNoZWNrIGlmIGNvbmZpZ3VyYXRpb24gY2FuIHN1cHBvcnQgdGhlIEJBIHBvbGljeQotCSAqIGFuZCBpZiBidWZmZXIgc2l6ZSBkb2VzIG5vdCBleGNlZWRzIG1heCB2YWx1ZSAqLwotCS8qIFhYWDogY2hlY2sgb3duIGh0IGRlbGF5ZWQgQkEgY2FwYWJpbGl0eT8/ICovCi0JaWYgKCgoYmFfcG9saWN5ICE9IDEpCi0JCSYmICghKHN0YS0+c3RhLmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0RFTEFZX0JBKSkpCi0JCXx8IChidWZfc2l6ZSA+IElFRUU4MDIxMV9NQVhfQU1QRFVfQlVGKSkgewotCQlzdGF0dXMgPSBXTEFOX1NUQVRVU19JTlZBTElEX1FPU19QQVJBTTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICJBZGRCQSBSZXEgd2l0aCBiYWQgcGFyYW1zIGZyb20gIgotCQkJCSIlcE0gb24gdGlkICV1LiBwb2xpY3kgJWQsIGJ1ZmZlciBzaXplICVkXG4iLAotCQkJCW1nbXQtPnNhLCB0aWQsIGJhX3BvbGljeSwKLQkJCQlidWZfc2l6ZSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCWdvdG8gZW5kX25vX2xvY2s7Ci0JfQotCS8qIGRldGVybWluZSBkZWZhdWx0IGJ1ZmZlciBzaXplICovCi0JaWYgKGJ1Zl9zaXplID09IDApIHsKLQkJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0KLQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2NvbmYtPmNoYW5uZWwtPmJhbmRdOwotCQlidWZfc2l6ZSA9IElFRUU4MDIxMV9NSU5fQU1QRFVfQlVGOwotCQlidWZfc2l6ZSA9IGJ1Zl9zaXplIDw8IHNiYW5kLT5odF9jYXAuYW1wZHVfZmFjdG9yOwotCX0KLQotCi0JLyogZXhhbWluZSBzdGF0ZSBtYWNoaW5lICovCi0Jc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCi0JaWYgKHN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSAhPSBIVF9BR0dfU1RBVEVfSURMRSkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInVuZXhwZWN0ZWQgQWRkQkEgUmVxIGZyb20gIgotCQkJCSIlcE0gb24gdGlkICV1XG4iLAotCQkJCW1nbXQtPnNhLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBwcmVwYXJlIEEtTVBEVSBNTE1FIGZvciBSeCBhZ2dyZWdhdGlvbiAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSA9Ci0JCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGlkX2FtcGR1X3J4KSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0pIHsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiAiYWxsb2NhdGUgcnggbWxtZSB0byB0aWQgJWQgZmFpbGVkXG4iLAotCQkJCQl0aWQpOwotI2VuZGlmCi0JCWdvdG8gZW5kOwotCX0KLQkvKiByeCB0aW1lciAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lci5mdW5jdGlvbiA9Ci0JCQkJc3RhX3J4X2FnZ19zZXNzaW9uX3RpbWVyX2V4cGlyZWQ7Ci0Jc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdLT5zZXNzaW9uX3RpbWVyLmRhdGEgPQotCQkJCSh1bnNpZ25lZCBsb25nKSZzdGEtPnRpbWVyX3RvX3RpZFt0aWRdOwotCWluaXRfdGltZXIoJnN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXS0+c2Vzc2lvbl90aW1lcik7Ci0KLQl0aWRfYWdnX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFt0aWRdOwotCi0JLyogcHJlcGFyZSByZW9yZGVyaW5nIGJ1ZmZlciAqLwotCXRpZF9hZ2dfcngtPnJlb3JkZXJfYnVmID0KLQkJa21hbGxvYyhidWZfc2l6ZSAqIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCF0aWRfYWdnX3J4LT5yZW9yZGVyX2J1ZikgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSICJjYW4gbm90IGFsbG9jYXRlIHJlb3JkZXJpbmcgYnVmZmVyICIKLQkJCSAgICAgICAidG8gdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmCi0JCWtmcmVlKHN0YS0+YW1wZHVfbWxtZS50aWRfcnhbdGlkXSk7Ci0JCWdvdG8gZW5kOwotCX0KLQltZW1zZXQodGlkX2FnZ19yeC0+cmVvcmRlcl9idWYsIDAsCi0JCWJ1Zl9zaXplICogc2l6ZW9mKHN0cnVjdCBza19idWZmICopKTsKLQotCWlmIChsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24pCi0JCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbihodywgSUVFRTgwMjExX0FNUERVX1JYX1NUQVJULAotCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiUnggQS1NUERVIHJlcXVlc3Qgb24gdGlkICVkIHJlc3VsdCAlZFxuIiwgdGlkLCByZXQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCi0JaWYgKHJldCkgewotCQlrZnJlZSh0aWRfYWdnX3J4LT5yZW9yZGVyX2J1Zik7Ci0JCWtmcmVlKHRpZF9hZ2dfcngpOwotCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W3RpZF0gPSBOVUxMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBjaGFuZ2Ugc3RhdGUgYW5kIHNlbmQgYWRkYmEgcmVzcCAqLwotCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbdGlkXSA9IEhUX0FHR19TVEFURV9PUEVSQVRJT05BTDsKLQl0aWRfYWdnX3J4LT5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47Ci0JdGlkX2FnZ19yeC0+c3NuID0gc3RhcnRfc2VxX251bTsKLQl0aWRfYWdnX3J4LT5oZWFkX3NlcV9udW0gPSBzdGFydF9zZXFfbnVtOwotCXRpZF9hZ2dfcngtPmJ1Zl9zaXplID0gYnVmX3NpemU7Ci0JdGlkX2FnZ19yeC0+dGltZW91dCA9IHRpbWVvdXQ7Ci0JdGlkX2FnZ19yeC0+c3RvcmVkX21wZHVfbnVtID0gMDsKLQlzdGF0dXMgPSBXTEFOX1NUQVRVU19TVUNDRVNTOwotZW5kOgotCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCi1lbmRfbm9fbG9jazoKLQlpZWVlODAyMTFfc2VuZF9hZGRiYV9yZXNwKHN0YS0+c2RhdGEsIHN0YS0+c3RhLmFkZHIsIHRpZCwKLQkJCQkgIGRpYWxvZ190b2tlbiwgc3RhdHVzLCAxLCBidWZfc2l6ZSwgdGltZW91dCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLAotCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCSAgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9ICZsb2NhbC0+aHc7Ci0JdTE2IGNhcGFiOwotCXUxNiB0aWQsIHN0YXJ0X3NlcV9udW07Ci0JdTggKnN0YXRlOwotCi0JY2FwYWIgPSBsZTE2X3RvX2NwdShtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3AuY2FwYWIpOwotCXRpZCA9IChjYXBhYiAmIElFRUU4MDIxMV9BRERCQV9QQVJBTV9USURfTUFTSykgPj4gMjsKLQotCXN0YXRlID0gJnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQotCWlmICghKCpzdGF0ZSAmIEhUX0FEREJBX1JFUVVFU1RFRF9NU0spKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVzcC5kaWFsb2dfdG9rZW4gIT0KLQkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFt0aWRdLT5kaWFsb2dfdG9rZW4pIHsKLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJ3cm9uZyBhZGRCQSByZXNwb25zZSB0b2tlbiwgdGlkICVkXG4iLCB0aWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwotCQlyZXR1cm47Ci0JfQotCi0JZGVsX3RpbWVyX3N5bmMoJnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXS0+YWRkYmFfcmVzcF90aW1lcik7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInN3aXRjaGVkIG9mZiBhZGRCQSB0aW1lciBmb3IgdGlkICVkIFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQlpZiAobGUxNl90b19jcHUobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXNwLnN0YXR1cykKLQkJCT09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKLQkJKnN0YXRlIHw9IEhUX0FEREJBX1JFQ0VJVkVEX01TSzsKLQkJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSA9IDA7Ci0KLQkJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwgJiYKLQkJICAgIGxvY2FsLT5ody5hbXBkdV9xdWV1ZXMpCi0JCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgc3RhLT50aWRfdG9fdHhfcVt0aWRdKTsKLQotCQlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKSB7Ci0JCQkodm9pZClsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oaHcsCi0JCQkJCSAgICAgICBJRUVFODAyMTFfQU1QRFVfVFhfUkVTVU1FLAotCQkJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKLQkJfQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiUmVzdW1pbmcgVFggYWdncmVnYXRpb24gZm9yIHRpZCAlZFxuIiwgdGlkKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcgKi8KLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0JfSBlbHNlIHsKLQkJc3RhLT5hbXBkdV9tbG1lLmFkZGJhX3JlcV9udW1bdGlkXSsrOwotCQkvKiB0aGlzIHdpbGwgYWxsb3cgdGhlIHN0YXRlIGNoZWNrIGluIHN0b3BfQkFfc2Vzc2lvbiAqLwotCQkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUw7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKGh3LCBzdGEtPnN0YS5hZGRyLCB0aWQsCi0JCQkJCSAgICAgV0xBTl9CQUNLX0lOSVRJQVRPUik7Ci0JfQorCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjAxZTFmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtMCwwICsxLDkwOCBAQAorLyoKKyAqIElCU1MgbW9kZSBpbXBsZW1lbnRhdGlvbgorICogQ29weXJpZ2h0IDIwMDMtMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKyAqIENvcHlyaWdodCAyMDA0LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgorICogQ29weXJpZ2h0IDIwMDcsIE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgorICogQ29weXJpZ2h0IDIwMDksIEpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKKyNpbmNsdWRlICJyYXRlLmgiCisKKyNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUwgKDIgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVyAoMTUgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUICg3ICogSFopCisKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwgKDMwICogSFopCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX01FUkdFX0RFTEFZIDB4NDAwMDAwCisjZGVmaW5lIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQgKDYwICogSFopCisKKyNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTIDEyOAorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2F1dGhfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCQlzaXplX3QgbGVuKQoreworCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7CisKKwlpZiAobGVuIDwgMjQgKyA2KQorCQlyZXR1cm47CisKKwlhdXRoX2FsZyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX2FsZyk7CisJYXV0aF90cmFuc2FjdGlvbiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uKTsKKwlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSk7CisKKwkvKgorCSAqIElFRUUgODAyLjExIHN0YW5kYXJkIGRvZXMgbm90IHJlcXVpcmUgYXV0aGVudGljYXRpb24gaW4gSUJTUworCSAqIG5ldHdvcmtzIGFuZCBtb3N0IGltcGxlbWVudGF0aW9ucyBkbyBub3Qgc2VlbSB0byB1c2UgaXQuCisJICogSG93ZXZlciwgdHJ5IHRvIHJlcGx5IHRvIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHRzIGlmIHNvbWVvbmUKKwkgKiBoYXMgYWN0dWFsbHkgaW1wbGVtZW50ZWQgdGhpcy4KKwkgKi8KKwlpZiAoYXV0aF9hbGcgPT0gV0xBTl9BVVRIX09QRU4gJiYgYXV0aF90cmFuc2FjdGlvbiA9PSAxKQorCQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAyLCBXTEFOX0FVVEhfT1BFTiwgTlVMTCwgMCwKKwkJCQkgICAgc2RhdGEtPnUuaWJzcy5ic3NpZCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgX19pZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgIGNvbnN0IHU4ICpic3NpZCwgY29uc3QgaW50IGJlYWNvbl9pbnQsCisJCQkJICAgICBjb25zdCBpbnQgZnJlcSwKKwkJCQkgICAgIGNvbnN0IHNpemVfdCBzdXBwX3JhdGVzX2xlbiwKKwkJCQkgICAgIGNvbnN0IHU4ICpzdXBwX3JhdGVzLAorCQkJCSAgICAgY29uc3QgdTE2IGNhcGFiaWxpdHksIHU2NCB0c2YpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlpbnQgcmVzID0gMCwgcmF0ZXMsIGksIGo7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTggKnBvczsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisKKwlpZiAobG9jYWwtPm9wcy0+cmVzZXRfdHNmKSB7CisJCS8qIFJlc2V0IG93biBUU0YgdG8gYWxsb3cgdGltZSBzeW5jaHJvbml6YXRpb24gd29yay4gKi8KKwkJbG9jYWwtPm9wcy0+cmVzZXRfdHNmKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJfQorCisJaWYgKChpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpICYmCisJICAgbWVtY21wKGlmaWJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgPT0gMCkKKwkJcmV0dXJuIHJlczsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgNDAwKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKKwkJICAgICAgICJyZXNwb25zZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmICghKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVCkpIHsKKwkJLyogUmVtb3ZlIHBvc3NpYmxlIFNUQSBlbnRyaWVzIGZyb20gb3RoZXIgSUJTUyBuZXR3b3Jrcy4gKi8KKwkJc3RhX2luZm9fZmx1c2hfZGVsYXllZChzZGF0YSk7CisJfQorCisJbWVtY3B5KGlmaWJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7CisJcmVzID0gaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQlNTSUQpOworCWlmIChyZXMpCisJCXJldHVybiByZXM7CisKKwlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gYmVhY29uX2ludCA+PSAxMCA/IGJlYWNvbl9pbnQgOiAxMDsKKworCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gY2FwYWJpbGl0eSAmCisJCVdMQU5fQ0FQQUJJTElUWV9QUklWQUNZID8gMSA6IDA7CisKKwlyZXMgPSBpZWVlODAyMTFfc2V0X2ZyZXEoc2RhdGEsIGZyZXEpOworCisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCS8qIEJ1aWxkIElCU1MgcHJvYmUgcmVzcG9uc2UgKi8KKworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopCisJCXNrYl9wdXQoc2tiLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOworCW1lbXNldChtZ210LCAwLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApOworCW1lbXNldChtZ210LT5kYSwgMHhmZiwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGlmaWJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZ210LT51LmJlYWNvbi5iZWFjb25faW50ID0KKwkJY3B1X3RvX2xlMTYobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCk7CisJbWdtdC0+dS5iZWFjb24udGltZXN0YW1wID0gY3B1X3RvX2xlNjQodHNmKTsKKwltZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoY2FwYWJpbGl0eSk7CisKKwlwb3MgPSBza2JfcHV0KHNrYiwgMiArIGlmaWJzcy0+c3NpZF9sZW4pOworCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7CisJKnBvcysrID0gaWZpYnNzLT5zc2lkX2xlbjsKKwltZW1jcHkocG9zLCBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4pOworCisJcmF0ZXMgPSBzdXBwX3JhdGVzX2xlbjsKKwlpZiAocmF0ZXMgPiA4KQorCQlyYXRlcyA9IDg7CisJcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7CisJKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwkqcG9zKysgPSByYXRlczsKKwltZW1jcHkocG9zLCBzdXBwX3JhdGVzLCByYXRlcyk7CisKKwlpZiAoc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDEpOworCQkqcG9zKysgPSBXTEFOX0VJRF9EU19QQVJBTVM7CisJCSpwb3MrKyA9IDE7CisJCSpwb3MrKyA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChmcmVxKTsKKwl9CisKKwlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDIpOworCSpwb3MrKyA9IFdMQU5fRUlEX0lCU1NfUEFSQU1TOworCSpwb3MrKyA9IDI7CisJLyogRklYOiBzZXQgQVRJTSB3aW5kb3cgYmFzZWQgb24gc2NhbiByZXN1bHRzICovCisJKnBvcysrID0gMDsKKwkqcG9zKysgPSAwOworCisJaWYgKHN1cHBfcmF0ZXNfbGVuID4gOCkgeworCQlyYXRlcyA9IHN1cHBfcmF0ZXNfbGVuIC0gODsKKwkJcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7CisJCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQkqcG9zKysgPSByYXRlczsKKwkJbWVtY3B5KHBvcywgJnN1cHBfcmF0ZXNbOF0sIHJhdGVzKTsKKwl9CisKKwlpZmlic3MtPnByb2JlX3Jlc3AgPSBza2I7CisKKwlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04gfAorCQkJCSAgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKTsKKworCisJcmF0ZXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzdXBwX3JhdGVzX2xlbjsgaSsrKSB7CisJCWludCBiaXRyYXRlID0gKHN1cHBfcmF0ZXNbaV0gJiAweDdmKSAqIDU7CisJCWZvciAoaiA9IDA7IGogPCBzYmFuZC0+bl9iaXRyYXRlczsgaisrKQorCQkJaWYgKHNiYW5kLT5iaXRyYXRlc1tqXS5iaXRyYXRlID09IGJpdHJhdGUpCisJCQkJcmF0ZXMgfD0gQklUKGopOworCX0KKworCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc2RhdGEsIHN1cHBfcmF0ZXNfbGVuLCBzdXBwX3JhdGVzKTsKKworCWlmaWJzcy0+ZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQ7CisJaWZpYnNzLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEOworCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKKworCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzc2lkLCBFVEhfQUxFTik7CisJd2lyZWxlc3Nfc2VuZF9ldmVudChzZGF0YS0+ZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKK3sKKwlyZXR1cm4gX19pZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwKKwkJCQkJIGJzcy0+Y2Jzcy5ic3NpZCwKKwkJCQkJIGJzcy0+Y2Jzcy5iZWFjb25faW50ZXJ2YWwsCisJCQkJCSBic3MtPmNic3MuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJCSBic3MtPnN1cHBfcmF0ZXNfbGVuLCBic3MtPnN1cHBfcmF0ZXMsCisJCQkJCSBic3MtPmNic3MuY2FwYWJpbGl0eSwKKwkJCQkJIGJzcy0+Y2Jzcy50c2YpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfYnNzX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJICBzaXplX3QgbGVuLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cywKKwkJCQkgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKKwkJCQkgIGJvb2wgYmVhY29uKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCBmcmVxOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCXU2NCBiZWFjb25fdGltZXN0YW1wLCByeF90aW1lc3RhbXA7CisJdTMyIHN1cHBfcmF0ZXMgPSAwOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IHJ4X3N0YXR1cy0+YmFuZDsKKworCWlmIChlbGVtcy0+ZHNfcGFyYW1zICYmIGVsZW1zLT5kc19wYXJhbXNfbGVuID09IDEpCisJCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZWxlbXMtPmRzX3BhcmFtc1swXSk7CisJZWxzZQorCQlmcmVxID0gcnhfc3RhdHVzLT5mcmVxOworCisJY2hhbm5lbCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChsb2NhbC0+aHcud2lwaHksIGZyZXEpOworCisJaWYgKCFjaGFubmVsIHx8IGNoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQpCisJCXJldHVybjsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYgZWxlbXMtPnN1cHBfcmF0ZXMgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkgeworCQlzdXBwX3JhdGVzID0gaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMobG9jYWwsIGVsZW1zLCBiYW5kKTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7CisJCWlmIChzdGEpIHsKKwkJCXUzMiBwcmV2X3JhdGVzOworCisJCQlwcmV2X3JhdGVzID0gc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXTsKKwkJCS8qIG1ha2Ugc3VyZSBtYW5kYXRvcnkgcmF0ZXMgYXJlIGFsd2F5cyBhZGRlZCAqLworCQkJc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAorCQkJCWllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMobG9jYWwsIGJhbmQpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwkJCWlmIChzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdICE9IHByZXZfcmF0ZXMpCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1cGRhdGVkIHN1cHBfcmF0ZXMgc2V0ICIKKwkJCQkgICAgImZvciAlcE0gYmFzZWQgb24gYmVhY29uIGluZm8gKDB4JWxseCB8ICIKKwkJCQkgICAgIjB4JWxseCAtPiAweCVsbHgpXG4iLAorCQkJCSAgICBzZGF0YS0+ZGV2LT5uYW1lLAorCQkJCSAgICBzdGEtPnN0YS5hZGRyLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwcmV2X3JhdGVzLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdXBwX3JhdGVzLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdKTsKKyNlbmRpZgorCQl9IGVsc2UKKwkJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7CisKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCisJYnNzID0gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZShsb2NhbCwgcnhfc3RhdHVzLCBtZ210LCBsZW4sIGVsZW1zLAorCQkJCQljaGFubmVsLCBiZWFjb24pOworCWlmICghYnNzKQorCQlyZXR1cm47CisKKwkvKiB3YXMganVzdCB1cGRhdGVkIGluIGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUgKi8KKwliZWFjb25fdGltZXN0YW1wID0gYnNzLT5jYnNzLnRzZjsKKworCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gbWVyZ2UgSUJTUyAqLworCisJLyogbWVyZ2Ugb25seSBvbiBiZWFjb25zICg/Pz8pICovCisJaWYgKCFiZWFjb24pCisJCWdvdG8gcHV0X2JzczsKKworCS8qIHdlIHVzZSBhIGZpeGVkIEJTU0lEICovCisJaWYgKHNkYXRhLT51Lmlic3MuZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQpCisJCWdvdG8gcHV0X2JzczsKKworCS8qIG5vdCBhbiBJQlNTICovCisJaWYgKCEoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpCisJCWdvdG8gcHV0X2JzczsKKworCS8qIGRpZmZlcmVudCBjaGFubmVsICovCisJaWYgKGJzcy0+Y2Jzcy5jaGFubmVsICE9IGxvY2FsLT5vcGVyX2NoYW5uZWwpCisJCWdvdG8gcHV0X2JzczsKKworCS8qIGRpZmZlcmVudCBTU0lEICovCisJaWYgKGVsZW1zLT5zc2lkX2xlbiAhPSBzZGF0YS0+dS5pYnNzLnNzaWRfbGVuIHx8CisJICAgIG1lbWNtcChlbGVtcy0+c3NpZCwgc2RhdGEtPnUuaWJzcy5zc2lkLAorCQkJCXNkYXRhLT51Lmlic3Muc3NpZF9sZW4pKQorCQlnb3RvIHB1dF9ic3M7CisKKwkvKiBzYW1lIEJTU0lEICovCisJaWYgKG1lbWNtcChic3MtPmNic3MuYnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQorCQlnb3RvIHB1dF9ic3M7CisKKwlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKSB7CisJCS8qCisJCSAqIEZvciBjb3JyZWN0IElCU1MgbWVyZ2luZyB3ZSBuZWVkIG1hY3RpbWU7IHNpbmNlIG1hY3RpbWUgaXMKKwkJICogZGVmaW5lZCBhcyB0aGUgdGltZSB0aGUgZmlyc3QgZGF0YSBzeW1ib2wgb2YgdGhlIGZyYW1lIGhpdHMKKwkJICogdGhlIFBIWSwgYW5kIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJlYWNvbiBpcyBkZWZpbmVkIGFzICJ0aGUKKwkJICogdGltZSB0aGF0IHRoZSBkYXRhIHN5bWJvbCBjb250YWluaW5nIHRoZSBmaXJzdCBiaXQgb2YgdGhlCisJCSAqIHRpbWVzdGFtcCBpcyB0cmFuc21pdHRlZCB0byB0aGUgUEhZIHBsdXMgdGhlIHRyYW5zbWl0dGluZworCQkgKiBTVEEncyBkZWxheXMgdGhyb3VnaCBpdHMgbG9jYWwgUEhZIGZyb20gdGhlIE1BQy1QSFkKKwkJICogaW50ZXJmYWNlIHRvIGl0cyBpbnRlcmZhY2Ugd2l0aCB0aGUgV00iICg4MDIuMTEgMTEuMS4yKQorCQkgKiAtIGVxdWFscyB0aGUgdGltZSB0aGlzIGJpdCBhcnJpdmVzIGF0IHRoZSByZWNlaXZlciAtIHdlIGhhdmUKKwkJICogdG8gdGFrZSBpbnRvIGFjY291bnQgdGhlIG9mZnNldCBiZXR3ZWVuIHRoZSB0d28uCisJCSAqCisJCSAqIEUuZy4gYXQgMSBNQml0IHRoYXQgbWVhbnMgbWFjdGltZSBpcyAxOTIgdXNlYyBlYXJsaWVyCisJCSAqICg9MjQgYnl0ZXMgKiA4IHVzZWNzL2J5dGUpIHRoYW4gdGhlIGJlYWNvbiB0aW1lc3RhbXAuCisJCSAqLworCQlpbnQgcmF0ZTsKKworCQlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkKKwkJCXJhdGUgPSA2NTsgLyogVE9ETzogSFQgcmF0ZXMgKi8KKwkJZWxzZQorCQkJcmF0ZSA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF0tPgorCQkJCWJpdHJhdGVzW3J4X3N0YXR1cy0+cmF0ZV9pZHhdLmJpdHJhdGU7CisKKwkJcnhfdGltZXN0YW1wID0gcnhfc3RhdHVzLT5tYWN0aW1lICsgKDI0ICogOCAqIDEwIC8gcmF0ZSk7CisJfSBlbHNlIGlmIChsb2NhbCAmJiBsb2NhbC0+b3BzICYmIGxvY2FsLT5vcHMtPmdldF90c2YpCisJCS8qIHNlY29uZCBiZXN0IG9wdGlvbjogZ2V0IGN1cnJlbnQgVFNGICovCisJCXJ4X3RpbWVzdGFtcCA9IGxvY2FsLT5vcHMtPmdldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKKwllbHNlCisJCS8qIGNhbid0IG1lcmdlIHdpdGhvdXQga25vd2luZyB0aGUgVFNGICovCisJCXJ4X3RpbWVzdGFtcCA9IC0xTExVOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiUlggYmVhY29uIFNBPSVwTSBCU1NJRD0iCisJICAgICAgICIlcE0gVFNGPTB4JWxseCBCQ049MHglbGx4IGRpZmY9JWxsZCBAJWx1XG4iLAorCSAgICAgICBtZ210LT5zYSwgbWdtdC0+YnNzaWQsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcnhfdGltZXN0YW1wLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJlYWNvbl90aW1lc3RhbXAsCisJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKHJ4X3RpbWVzdGFtcCAtIGJlYWNvbl90aW1lc3RhbXApLAorCSAgICAgICBqaWZmaWVzKTsKKyNlbmRpZgorCisJLyogZ2l2ZSBzbG93IGhhcmR3YXJlIHNvbWUgdGltZSB0byBkbyB0aGUgVFNGIHN5bmMgKi8KKwlpZiAocnhfdGltZXN0YW1wIDwgSUVFRTgwMjExX0lCU1NfTUVSR0VfREVMQVkpCisJCWdvdG8gcHV0X2JzczsKKworCWlmIChiZWFjb25fdGltZXN0YW1wID4gcnhfdGltZXN0YW1wKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBiZWFjb24gVFNGIGhpZ2hlciB0aGFuICIKKwkJICAgICAgICJsb2NhbCBUU0YgLSBJQlNTIG1lcmdlIHdpdGggQlNTSUQgJXBNXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+YnNzaWQpOworI2VuZGlmCisJCWllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBic3MpOworCQlpZWVlODAyMTFfaWJzc19hZGRfc3RhKHNkYXRhLCBtZ210LT5ic3NpZCwgbWdtdC0+c2EsIHN1cHBfcmF0ZXMpOworCX0KKworIHB1dF9ic3M6CisJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Cit9CisKKy8qCisgKiBBZGQgYSBuZXcgSUJTUyBzdGF0aW9uLCB3aWxsIGFsc28gYmUgY2FsbGVkIGJ5IHRoZSBSWCBjb2RlIHdoZW4sCisgKiBpbiBJQlNTIG1vZGUsIHJlY2VpdmluZyBhIGZyYW1lIGZyb20gYSB5ZXQtdW5rbm93biBzdGF0aW9uLCBoZW5jZQorICogbXVzdCBiZSBjYWxsYWJsZSBpbiBhdG9taWMgY29udGV4dC4KKyAqLworc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQl1OCAqYnNzaWQsdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCWludCBiYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKKworCS8qIFRPRE86IENvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJ5IGFuZAorCSAqIGFsbG93IG5ldyBvbmUgdG8gYmUgYWRkZWQuICovCisJaWYgKGxvY2FsLT5udW1fc3RhID49IElFRUU4MDIxMV9JQlNTX01BWF9TVEFfRU5UUklFUykgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIHJvb20gZm9yIGEgbmV3IElCU1MgU1RBICIKKwkJCSAgICAgICAiZW50cnkgJXBNXG4iLCBzZGF0YS0+ZGV2LT5uYW1lLCBhZGRyKTsKKwkJfQorCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkLCBzZGF0YS0+dS5pYnNzLmJzc2lkKSkKKwkJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogQWRkaW5nIG5ldyBJQlNTIHN0YXRpb24gJXBNIChkZXY9JXMpXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIGFkZHIsIHNkYXRhLT5kZXYtPm5hbWUpOworI2VuZGlmCisKKwlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgR0ZQX0FUT01JQyk7CisJaWYgKCFzdGEpCisJCXJldHVybiBOVUxMOworCisJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEhPUklaRUQpOworCisJLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCisJc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAorCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7CisKKwlyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0YSk7CisKKwlpZiAoc3RhX2luZm9faW5zZXJ0KHN0YSkpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIHN0YTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCBhY3RpdmUgPSAwOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCisJcmN1X3JlYWRfbG9jaygpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisJCWlmIChzdGEtPnNkYXRhID09IHNkYXRhICYmCisJCSAgICB0aW1lX2FmdGVyKHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMLAorCQkJICAgICAgIGppZmZpZXMpKSB7CisJCQlhY3RpdmUrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gYWN0aXZlOworfQorCisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpOworCisJaWVlZTgwMjExX3N0YV9leHBpcmUoc2RhdGEsIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQpOworCWlmIChpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkKKwkJcmV0dXJuOworCisJaWYgKChpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQlNTSURfU0VUKSAmJgorCSAgICAoIShpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTCkpKQorCQlyZXR1cm47CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIGFjdGl2ZSBJQlNTIFNUQXMgLSB0cnlpbmcgdG8gc2NhbiBmb3Igb3RoZXIgIgorCSAgICAgICAiSUJTUyBuZXR3b3JrcyB3aXRoIHNhbWUgU1NJRCAobWVyZ2UpXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKworCS8qIFhYWCBtYXliZSByYWN5PyAqLworCWlmIChzZGF0YS0+bG9jYWwtPnNjYW5fcmVxKQorCQlyZXR1cm47CisKKwltZW1jcHkoc2RhdGEtPmxvY2FsLT5pbnRfc2Nhbl9yZXEuc3NpZHNbMF0uc3NpZCwKKwkgICAgICAgaWZpYnNzLT5zc2lkLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKKwlzZGF0YS0+bG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkX2xlbiA9IGlmaWJzcy0+c3NpZF9sZW47CisJaWVlZTgwMjExX3JlcXVlc3Rfc2NhbihzZGF0YSwgJnNkYXRhLT5sb2NhbC0+aW50X3NjYW5fcmVxKTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2NyZWF0ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJdTggKnBvczsKKwl1OCBic3NpZFtFVEhfQUxFTl07CisJdTggc3VwcF9yYXRlc1tJRUVFODAyMTFfTUFYX1NVUFBfUkFURVNdOworCXUxNiBjYXBhYmlsaXR5OworCWludCBpOworCisJaWYgKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQpIHsKKwkJbWVtY3B5KGJzc2lkLCBpZmlic3MtPmJzc2lkLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJLyogR2VuZXJhdGUgcmFuZG9tLCBub3QgYnJvYWRjYXN0LCBsb2NhbGx5IGFkbWluaXN0ZXJlZCBCU1NJRC4gTWl4IGluCisJCSAqIG93biBNQUMgYWRkcmVzcyB0byBtYWtlIHN1cmUgdGhhdCBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgcHJvcGVyCisJCSAqIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGdldCBkaWZmZXJlbnQgQlNTSUQuICovCisJCWdldF9yYW5kb21fYnl0ZXMoYnNzaWQsIEVUSF9BTEVOKTsKKwkJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCQlic3NpZFtpXSBePSBzZGF0YS0+ZGV2LT5kZXZfYWRkcltpXTsKKwkJYnNzaWRbMF0gJj0gfjB4MDE7CisJCWJzc2lkWzBdIHw9IDB4MDI7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDcmVhdGluZyBuZXcgSUJTUyBuZXR3b3JrLCBCU1NJRCAlcE1cbiIsCisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzc2lkKTsKKworCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKworCWlmIChsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID09IDApCisJCWxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSAxMDA7CisKKwljYXBhYmlsaXR5ID0gV0xBTl9DQVBBQklMSVRZX0lCU1M7CisKKwlpZiAoc2RhdGEtPmRlZmF1bHRfa2V5KQorCQljYXBhYmlsaXR5IHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOworCWVsc2UKKwkJc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSAwOworCisJcG9zID0gc3VwcF9yYXRlczsKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOworCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7CisJfQorCisJcmV0dXJuIF9faWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsCisJCQkJCSBic3NpZCwgbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCwKKwkJCQkJIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCQkgc2JhbmQtPm5fYml0cmF0ZXMsIHN1cHBfcmF0ZXMsCisJCQkJCSBjYXBhYmlsaXR5LCAwKTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CisJY29uc3QgdTggKmJzc2lkID0gTlVMTDsKKwlpbnQgYWN0aXZlX2lic3M7CisKKwlpZiAoaWZpYnNzLT5zc2lkX2xlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFjdGl2ZV9pYnNzID0gaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSk7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN0YV9maW5kX2lic3MgKGFjdGl2ZV9pYnNzPSVkKVxuIiwKKwkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYWN0aXZlX2lic3MpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisKKwlpZiAoYWN0aXZlX2lic3MpCisJCXJldHVybiAwOworCisJaWYgKGlmaWJzcy0+ZmxhZ3MgJiBJRUVFODAyMTFfSUJTU19CU1NJRF9TRVQpCisJCWJzc2lkID0gaWZpYnNzLT5ic3NpZDsKKwlic3MgPSAodm9pZCAqKWNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LCBOVUxMLCBic3NpZCwKKwkJCQkgICAgICAgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuLAorCQkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfSUJTUywKKwkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX0lCU1MpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlpZiAoYnNzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiICAgc3RhX2ZpbmRfaWJzczogc2VsZWN0ZWQgJXBNIGN1cnJlbnQgIgorCQkgICAgICAgIiVwTVxuIiwgYnNzLT5jYnNzLmJzc2lkLCBpZmlic3MtPmJzc2lkKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCisJaWYgKGJzcyAmJgorCSAgICAoIShpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpIHx8CisJICAgICBtZW1jbXAoaWZpYnNzLT5ic3NpZCwgYnNzLT5jYnNzLmJzc2lkLCBFVEhfQUxFTikpKSB7CisJCWludCByZXQ7CisKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZWxlY3RlZCBJQlNTIEJTU0lEICVwTSIKKwkJICAgICAgICIgYmFzZWQgb24gY29uZmlndXJlZCBTU0lEXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYnNzLT5jYnNzLmJzc2lkKTsKKworCQlyZXQgPSBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgYnNzKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJCXJldHVybiByZXQ7CisJfSBlbHNlIGlmIChic3MpCisJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiICAgZGlkIG5vdCB0cnkgdG8gam9pbiBpYnNzXG4iKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCisJLyogU2VsZWN0ZWQgSUJTUyBub3QgZm91bmQgaW4gY3VycmVudCBzY2FuIHJlc3VsdHMgLSB0cnkgdG8gc2NhbiAqLworCWlmIChpZmlic3MtPnN0YXRlID09IElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEICYmCisJICAgICFpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHNkYXRhKSkgeworCQltb2RfdGltZXIoJmlmaWJzcy0+dGltZXIsIGppZmZpZXMgKworCQkJCQkgIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKKwl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbG9jYWwtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgKworCQkJCQlJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmlnZ2VyIG5ldyBzY2FuIHRvIGZpbmQgYW4gSUJTUyB0byAiCisJCSAgICAgICAiam9pblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisKKwkJLyogWFhYIG1heWJlIHJhY3k/ICovCisJCWlmIChsb2NhbC0+c2Nhbl9yZXEpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCW1lbWNweShsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWQsCisJCSAgICAgICBpZmlic3MtPnNzaWQsIElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pOworCQlsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzWzBdLnNzaWRfbGVuID0gaWZpYnNzLT5zc2lkX2xlbjsKKwkJcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsICZsb2NhbC0+aW50X3NjYW5fcmVxKTsKKwl9IGVsc2UgaWYgKGlmaWJzcy0+c3RhdGUgIT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQpIHsKKwkJaW50IGludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUw7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZpYnNzLT5pYnNzX2pvaW5fcmVxICsKKwkJCSAgICAgICBJRUVFODAyMTFfSUJTU19KT0lOX1RJTUVPVVQpKSB7CisJCQlpZiAoIShsb2NhbC0+b3Blcl9jaGFubmVsLT5mbGFncyAmCisJCQkJCQlJRUVFODAyMTFfQ0hBTl9OT19JQlNTKSkKKwkJCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9jcmVhdGVfaWJzcyhzZGF0YSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElCU1Mgbm90IGFsbG93ZWQgb24iCisJCQkgICAgICAgIiAlZCBNSHpcbiIsIHNkYXRhLT5kZXYtPm5hbWUsCisJCQkgICAgICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEpOworCisJCQkvKiBObyBJQlNTIGZvdW5kIC0gZGVjcmVhc2Ugc2NhbiBpbnRlcnZhbCBhbmQgY29udGludWUKKwkJCSAqIHNjYW5uaW5nLiAqLworCQkJaW50ZXJ2YWwgPSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTF9TTE9XOworCQl9CisKKwkJaWZpYnNzLT5zdGF0ZSA9IElFRUU4MDIxMV9JQlNTX01MTUVfU0VBUkNIOworCQltb2RfdGltZXIoJmlmaWJzcy0+dGltZXIsIGppZmZpZXMgKyBpbnRlcnZhbCk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkJc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCB0eF9sYXN0X2JlYWNvbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcmVzcDsKKwl1OCAqcG9zLCAqZW5kOworCisJaWYgKGlmaWJzcy0+c3RhdGUgIT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQgfHwKKwkgICAgbGVuIDwgMjQgKyAyIHx8ICFpZmlic3MtPnByb2JlX3Jlc3ApCisJCXJldHVybjsKKworCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKKwkJdHhfbGFzdF9iZWFjb24gPSBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbihsb2NhbF90b19odyhsb2NhbCkpOworCWVsc2UKKwkJdHhfbGFzdF9iZWFjb24gPSAxOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIFByb2JlUmVxIFNBPSVwTSBEQT0lcE0gQlNTSUQ9JXBNIgorCSAgICAgICAiICh0eF9sYXN0X2JlYWNvbj0lZClcbiIsCisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhLCBtZ210LT5kYSwKKwkgICAgICAgbWdtdC0+YnNzaWQsIHR4X2xhc3RfYmVhY29uKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCisJaWYgKCF0eF9sYXN0X2JlYWNvbikKKwkJcmV0dXJuOworCisJaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgaWZpYnNzLT5ic3NpZCwgRVRIX0FMRU4pICE9IDAgJiYKKwkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCAiXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmIiwgRVRIX0FMRU4pICE9IDApCisJCXJldHVybjsKKworCWVuZCA9ICgodTggKikgbWdtdCkgKyBsZW47CisJcG9zID0gbWdtdC0+dS5wcm9iZV9yZXEudmFyaWFibGU7CisJaWYgKHBvc1swXSAhPSBXTEFOX0VJRF9TU0lEIHx8CisJICAgIHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpIHsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgU1NJRCBJRSBpbiBQcm9iZVJlcSAiCisJCSAgICAgICAiZnJvbSAlcE1cbiIsCisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKwlpZiAocG9zWzFdICE9IDAgJiYKKwkgICAgKHBvc1sxXSAhPSBpZmlic3MtPnNzaWRfbGVuIHx8CisJICAgICBtZW1jbXAocG9zICsgMiwgaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuKSAhPSAwKSkgeworCQkvKiBJZ25vcmUgUHJvYmVSZXEgZm9yIGZvcmVpZ24gU1NJRCAqLworCQlyZXR1cm47CisJfQorCisJLyogUmVwbHkgd2l0aCBQcm9iZVJlc3AgKi8KKwlza2IgPSBza2JfY29weShpZmlic3MtPnByb2JlX3Jlc3AsIEdGUF9LRVJORUwpOworCWlmICghc2tiKQorCQlyZXR1cm47CisKKwlyZXNwID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CisJbWVtY3B5KHJlc3AtPmRhLCBtZ210LT5zYSwgRVRIX0FMRU4pOworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZW5kaW5nIFByb2JlUmVzcCB0byAlcE1cbiIsCisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlc3AtPmRhKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCSBzaXplX3QgbGVuLAorCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKK3sKKwlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKKworCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikpCisJCXJldHVybjsgLyogaWdub3JlIFByb2JlUmVzcCB0byBmb3JlaWduIGFkZHJlc3MgKi8KKworCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CisJaWYgKGJhc2VsZW4gPiBsZW4pCisJCXJldHVybjsKKworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMobWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlLCBsZW4gLSBiYXNlbGVuLAorCQkJCSZlbGVtcyk7CisKKwlpZWVlODAyMTFfcnhfYnNzX2luZm8oc2RhdGEsIG1nbXQsIGxlbiwgcnhfc3RhdHVzLCAmZWxlbXMsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAorCQkJCSAgICAgc2l6ZV90IGxlbiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCit7CisJc2l6ZV90IGJhc2VsZW47CisJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CisKKwkvKiBQcm9jZXNzIGJlYWNvbiBmcm9tIHRoZSBjdXJyZW50IEJTUyAqLworCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5iZWFjb24udmFyaWFibGUgLSAodTggKikgbWdtdDsKKwlpZiAoYmFzZWxlbiA+IGxlbikKKwkJcmV0dXJuOworCisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJmVsZW1zKTsKKworCWllZWU4MDIxMV9yeF9ic3NfaW5mbyhzZGF0YSwgbWdtdCwgbGVuLCByeF9zdGF0dXMsICZlbGVtcywgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3J4X3F1ZXVlZF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTE2IGZjOworCisJcnhfc3RhdHVzID0gKHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICopIHNrYi0+Y2I7CisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6CisJCWllZWU4MDIxMV9yeF9tZ210X3Byb2JlX3JlcShzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgorCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwKKwkJCQkJICAgICByeF9zdGF0dXMpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9CRUFDT046CisJCWllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSByeF9zdGF0dXMpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgorCQlpZWVlODAyMTFfcnhfbWdtdF9hdXRoX2lic3Moc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJYnJlYWs7CisJfQorCisJa2ZyZWVfc2tiKHNrYik7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsIHUuaWJzcy53b3JrKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlyZXR1cm47CisKKwlpZiAobG9jYWwtPnN3X3NjYW5uaW5nIHx8IGxvY2FsLT5od19zY2FubmluZykKKwkJcmV0dXJuOworCisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKSkKKwkJcmV0dXJuOworCWlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZpYnNzLT5za2JfcXVldWUpKSkKKwkJaWVlZTgwMjExX2lic3NfcnhfcXVldWVkX21nbXQoc2RhdGEsIHNrYik7CisKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfSUJTU19SRVFfUlVOLCAmaWZpYnNzLT5yZXF1ZXN0KSkKKwkJcmV0dXJuOworCisJc3dpdGNoIChpZmlic3MtPnN0YXRlKSB7CisJY2FzZSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDoKKwkJaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVEOgorCQlpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc2RhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9pYnNzX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9CisJCShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICopIGRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCXNldF9iaXQoSUVFRTgwMjExX0lCU1NfUkVRX1JVTiwgJmlmaWJzcy0+cmVxdWVzdCk7CisJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZpYnNzLT53b3JrKTsKK30KKwordm9pZCBpZWVlODAyMTFfaWJzc19zZXR1cF9zZGF0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJSU5JVF9XT1JLKCZpZmlic3MtPndvcmssIGllZWU4MDIxMV9pYnNzX3dvcmspOworCXNldHVwX3RpbWVyKCZpZmlic3MtPnRpbWVyLCBpZWVlODAyMTFfaWJzc190aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZpYnNzLT5za2JfcXVldWUpOworCisJaWZpYnNzLT5mbGFncyB8PSBJRUVFODAyMTFfSUJTU19BVVRPX0JTU0lEX1NFTCB8CisJCQlJRUVFODAyMTFfSUJTU19BVVRPX0NIQU5ORUxfU0VMOworfQorCitpbnQgaWVlZTgwMjExX2lic3NfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisKKwlpZmlic3MtPmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19QUkVWX0JTU0lEX1NFVDsKKworCWlmIChpZmlic3MtPnNzaWRfbGVuKQorCQlpZmlic3MtPmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX1NTSURfU0VUOworCWVsc2UKKwkJaWZpYnNzLT5mbGFncyAmPSB+SUVFRTgwMjExX0lCU1NfU1NJRF9TRVQ7CisKKwlpZmlic3MtPmlic3Nfam9pbl9yZXEgPSBqaWZmaWVzOworCWlmaWJzcy0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDsKKwlzZXRfYml0KElFRUU4MDIxMV9JQlNTX1JFUV9SVU4sICZpZmlic3MtPnJlcXVlc3QpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlmaWJzcy0+c3NpZF9sZW4gIT0gbGVuIHx8IG1lbWNtcChpZmlic3MtPnNzaWQsIHNzaWQsIGxlbikgIT0gMCkgeworCQltZW1zZXQoaWZpYnNzLT5zc2lkLCAwLCBzaXplb2YoaWZpYnNzLT5zc2lkKSk7CisJCW1lbWNweShpZmlic3MtPnNzaWQsIHNzaWQsIGxlbik7CisJCWlmaWJzcy0+c3NpZF9sZW4gPSBsZW47CisJfQorCisJcmV0dXJuIGllZWU4MDIxMV9pYnNzX2NvbW1pdChzZGF0YSk7Cit9CisKK2ludCBpZWVlODAyMTFfaWJzc19nZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90ICpsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKKworCW1lbWNweShzc2lkLCBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4pOworCSpsZW4gPSBpZmlic3MtPnNzaWRfbGVuOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBpZWVlODAyMTFfaWJzc19zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOworCisJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKSB7CisJCW1lbWNweShpZmlic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCQlpZmlic3MtPmZsYWdzIHw9IElFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVDsKKwl9IGVsc2UgeworCQltZW1zZXQoaWZpYnNzLT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQlpZmlic3MtPmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19CU1NJRF9TRVQ7CisJfQorCisJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpIHsKKwkJaWYgKGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBGYWlsZWQgdG8gY29uZmlnIG5ldyBCU1NJRCB0byAiCisJCQkgICAgICAgInRoZSBsb3ctbGV2ZWwgZHJpdmVyXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJfQorCX0KKworCXJldHVybiBpZWVlODAyMTFfaWJzc19jb21taXQoc2RhdGEpOworfQorCisvKiBzY2FuIGZpbmlzaGVkIG5vdGlmaWNhdGlvbiAqLwordm9pZCBpZWVlODAyMTFfaWJzc19ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzczsKKworCWlmIChzZGF0YSAmJiBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CisJCWlmICgoIShpZmlic3MtPmZsYWdzICYgSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQpKSB8fAorCQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKQorCQkJaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEpOworCX0KK30KKworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2lic3NfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXUxNiBmYzsKKworCWlmIChza2ItPmxlbiA8IDI0KQorCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwlzd2l0Y2ggKGZjICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpIHsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgorCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKKwkJbWVtY3B5KHNrYi0+Y2IsIHJ4X3N0YXR1cywgc2l6ZW9mKCpyeF9zdGF0dXMpKTsKKwljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVE6CisJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKKwkJc2tiX3F1ZXVlX3RhaWwoJnNkYXRhLT51Lmlic3Muc2tiX3F1ZXVlLCBza2IpOworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5pYnNzLndvcmspOworCQlyZXR1cm4gUlhfUVVFVUVEOworCX0KKworCXJldHVybiBSWF9EUk9QX01PTklUT1I7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IGYzZWVjOTg5Li5lNmVkNzhjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtNDMsNyArNDMsNyBAQAogCiAvKiBSZXF1aXJlZCBlbmNyeXB0aW9uIGhlYWQgYW5kIHRhaWxyb29tICovCiAjZGVmaW5lIElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NIDgKLSNkZWZpbmUgSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT00gMTIKKyNkZWZpbmUgSUVFRTgwMjExX0VOQ1JZUFRfVEFJTFJPT00gMTgKIAogLyogSUVFRSA4MDIuMTEgKENoLiA5LjUgRGVmcmFnbWVudGF0aW9uKSByZXF1aXJlcyBzdXBwb3J0IGZvciBjb25jdXJyZW50CiAgKiByZWNlcHRpb24gb2YgYXQgbGVhc3QgdGhyZWUgZnJhZ21lbnRlZCBmcmFtZXMuIFRoaXMgbGltaXQgY2FuIGJlIGluY3JlYXNlZApAQCAtNTcsNiArNTcsOCBAQAogICovCiAjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUgKDEwICogSFopCiAKKyNkZWZpbmUgVFVfVE9fRVhQX1RJTUUoeCkJKGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKCh4KSAqIDEwMjQpKQorCiBzdHJ1Y3QgaWVlZTgwMjExX2ZyYWdtZW50X2VudHJ5IHsKIAl1bnNpZ25lZCBsb25nIGZpcnN0X2ZyYWdfdGltZTsKIAl1bnNpZ25lZCBpbnQgc2VxOwpAQCAtNzAsNDMgKzcyLDM2IEBACiAKIAogc3RydWN0IGllZWU4MDIxMV9ic3MgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqaG5leHQ7CisJLyogWWVzLCB0aGlzIGlzIGEgaGFjayAqLworCXN0cnVjdCBjZmc4MDIxMV9ic3MgY2JzczsKKworCS8qIGRvbid0IHdhbnQgdG8gbG9vayB1cCBhbGwgdGhlIHRpbWUgKi8KIAlzaXplX3Qgc3NpZF9sZW47Ci0KLQlhdG9taWNfdCB1c2VyczsKLQotCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCiAJdTggZHRpbV9wZXJpb2Q7Ci0JdTE2IGNhcGFiaWxpdHk7IC8qIGhvc3QgYnl0ZSBvcmRlciAqLwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQlpbnQgZnJlcTsKLQlpbnQgc2lnbmFsLCBub2lzZSwgcXVhbDsKLQl1OCAqaWVzOyAvKiBhbGwgaW5mb3JtYXRpb24gZWxlbWVudHMgZnJvbSB0aGUgbGFzdCBCZWFjb24gb3IgUHJvYmUKLQkJICAqIFJlc3BvbnNlIGZyYW1lczsgbm90ZSBCZWFjb24gZnJhbWUgaXMgbm90IGFsbG93ZWQgdG8KLQkJICAqIG92ZXJyaWRlIHZhbHVlcyBmcm9tIFByb2JlIFJlc3BvbnNlICovCi0Jc2l6ZV90IGllc19sZW47CisKIAlib29sIHdtbV91c2VkOworCisJdW5zaWduZWQgbG9uZyBsYXN0X3Byb2JlX3Jlc3A7CisKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAogCXU4ICptZXNoX2lkOwogCXNpemVfdCBtZXNoX2lkX2xlbjsKIAl1OCAqbWVzaF9jZmc7CiAjZW5kaWYKKwogI2RlZmluZSBJRUVFODAyMTFfTUFYX1NVUFBfUkFURVMgMzIKIAl1OCBzdXBwX3JhdGVzW0lFRUU4MDIxMV9NQVhfU1VQUF9SQVRFU107CiAJc2l6ZV90IHN1cHBfcmF0ZXNfbGVuOwotCXU2NCB0aW1lc3RhbXA7Ci0JaW50IGJlYWNvbl9pbnQ7CiAKLQl1bnNpZ25lZCBsb25nIGxhc3RfcHJvYmVfcmVzcDsKLQl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlOwotCi0JLyogZHVyaW5nIGFzc29jYXRpb24sIHdlIHNhdmUgYW4gRVJQIHZhbHVlIGZyb20gYSBwcm9iZSByZXNwb25zZSBzbworCS8qCisJICogRHVyaW5nIGFzc29jYXRpb24sIHdlIHNhdmUgYW4gRVJQIHZhbHVlIGZyb20gYSBwcm9iZSByZXNwb25zZSBzbwogCSAqIHRoYXQgd2UgY2FuIGZlZWQgRVJQIGluZm8gdG8gdGhlIGRyaXZlciB3aGVuIGhhbmRsaW5nIHRoZQogCSAqIGFzc29jaWF0aW9uIGNvbXBsZXRlcy4gdGhlc2UgZmllbGRzIHByb2JhYmx5IHdvbid0IGJlIHVwLXRvLWRhdGUKLQkgKiBvdGhlcndpc2UsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHVzZSB0aGVtLiAqLwotCWludCBoYXNfZXJwX3ZhbHVlOworCSAqIG90aGVyd2lzZSwgeW91IHByb2JhYmx5IGRvbid0IHdhbnQgdG8gdXNlIHRoZW0uCisJICovCisJYm9vbCBoYXNfZXJwX3ZhbHVlOwogCXU4IGVycF92YWx1ZTsKIH07CiAKQEAgLTE1NCwxMSArMTQ5LDYgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKIAotCS8qIEV4dHJhIGZyYWdtZW50cyAoaW4gYWRkaXRpb24gdG8gdGhlIGZpcnN0IGZyYWdtZW50Ci0JICogaW4gc2tiKSAqLwotCXN0cnVjdCBza19idWZmICoqZXh0cmFfZnJhZzsKLQlpbnQgbnVtX2V4dHJhX2ZyYWc7Ci0KIAl1MTYgZXRoZXJ0eXBlOwogCXVuc2lnbmVkIGludCBmbGFnczsKIH07CkBAIC0xOTQsMTIgKzE4NCw2IEBACiAJdTE2IHRraXBfaXYxNjsKIH07CiAKLXN0cnVjdCBpZWVlODAyMTFfdHhfc3RvcmVkX3BhY2tldCB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqKmV4dHJhX2ZyYWc7Ci0JaW50IG51bV9leHRyYV9mcmFnOwotfTsKLQogc3RydWN0IGJlYWNvbl9kYXRhIHsKIAl1OCAqaGVhZCwgKnRhaWw7CiAJaW50IGhlYWRfbGVuLCB0YWlsX2xlbjsKQEAgLTI0NCw3ICsyMjgsNyBAQAogCXU4IGZsYWdzOwogfTsKIAotLyogZmxhZ3MgdXNlZCBpbiBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YS5mbGFncyAqLworLyogZmxhZ3MgdXNlZCBpbiBzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQuZmxhZ3MgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NUQV9TU0lEX1NFVAkJQklUKDApCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfQlNTSURfU0VUCQlCSVQoMSkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVAlCSVQoMikKQEAgLTI1Miw0MyArMjM2LDQ5IEBACiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRAlCSVQoNCkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMCUJJVCg1KQogI2RlZmluZSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTCUJJVCg2KQotI2RlZmluZSBJRUVFODAyMTFfU1RBX01JWEVEX0NFTEwJQklUKDcpCisvKiBob2xlIGF0IDcsIHBsZWFzZSByZS11c2UgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRAlCSVQoOCkKKy8qIGhvbGUgYXQgOSwgcGxlYXNlIHJlLXVzZSAqLwogI2RlZmluZSBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwJQklUKDEwKQogI2RlZmluZSBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMCUJJVCgxMSkKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMCUJJVCgxMikKICNkZWZpbmUgSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQJQklUKDEzKQorI2RlZmluZSBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQJQklUKDE0KQorI2RlZmluZSBJRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRAlCSVQoMTUpCisjZGVmaW5lIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQJQklUKDE2KQorI2RlZmluZSBJRUVFODAyMTFfU1RBX0VYVF9TTUUJCUJJVCgxNykKIC8qIGZsYWdzIGZvciBNTE1FIHJlcXVlc3QgKi8KICNkZWZpbmUgSUVFRTgwMjExX1NUQV9SRVFfU0NBTiAwCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX0RJUkVDVF9QUk9CRSAxCiAjZGVmaW5lIElFRUU4MDIxMV9TVEFfUkVRX0FVVEggMgogI2RlZmluZSBJRUVFODAyMTFfU1RBX1JFUV9SVU4gIDMKIAotLyogU1RBL0lCU1MgTUxNRSBzdGF0ZXMgKi8KLWVudW0gaWVlZTgwMjExX3N0YV9tbG1lX3N0YXRlIHsKLQlJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSwKLQlJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFLAotCUlFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQsCi0JSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfU0VBUkNILAotCUlFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCwKLX07Ci0KIC8qIGJpdGZpZWxkIG9mIGFsbG93ZWQgYXV0aCBhbGdzICovCiAjZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIEJJVCgwKQogI2RlZmluZSBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSBCSVQoMSkKICNkZWZpbmUgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVAgQklUKDIpCisjZGVmaW5lIElFRUU4MDIxMV9BVVRIX0FMR19GVCBCSVQoMykKIAotc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgeworc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkIHsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBjaHN3aXRjaF90aW1lcjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hzd2l0Y2hfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX2xvc3Nfd29yazsKKwogCXU4IGJzc2lkW0VUSF9BTEVOXSwgcHJldl9ic3NpZFtFVEhfQUxFTl07CisKIAl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCWVudW0gaWVlZTgwMjExX3N0YV9tbG1lX3N0YXRlIHN0YXRlOwogCXNpemVfdCBzc2lkX2xlbjsKLQl1OCBzY2FuX3NzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0Jc2l6ZV90IHNjYW5fc3NpZF9sZW47CisKKwllbnVtIHsKKwkJSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVELAorCQlJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFLAorCQlJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFLAorCQlJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFLAorCQlJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCwKKwl9IHN0YXRlOworCiAJdTE2IGFpZDsKIAl1MTYgYXBfY2FwYWIsIGNhcGFiOwogCXU4ICpleHRyYV9pZTsgLyogdG8gYmUgYWRkZWQgdG8gdGhlIGVuZCBvZiBBc3NvY1JlcSAqLwpAQCAtMzA4LDYgKzI5OCw3IEBACiAJdW5zaWduZWQgbG9uZyByZXF1ZXN0OwogCiAJdW5zaWduZWQgbG9uZyBsYXN0X3Byb2JlOworCXVuc2lnbmVkIGxvbmcgbGFzdF9iZWFjb247CiAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKQEAgLTMxNSwxMSArMzA2LDUzIEBACiAJaW50IGF1dGhfYWxnOyAvKiBjdXJyZW50bHkgdXNlZCBJRUVFIDgwMi4xMSBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gKi8KIAlpbnQgYXV0aF90cmFuc2FjdGlvbjsKIAotCXVuc2lnbmVkIGxvbmcgaWJzc19qb2luX3JlcTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcHJvYmVfcmVzcDsgLyogUHJvYmVSZXNwIHRlbXBsYXRlIGZvciBJQlNTICovCi0JdTMyIHN1cHBfcmF0ZXNfYml0c1tJRUVFODAyMTFfTlVNX0JBTkRTXTsKKwllbnVtIHsKKwkJSUVFRTgwMjExX01GUF9ESVNBQkxFRCwKKwkJSUVFRTgwMjExX01GUF9PUFRJT05BTCwKKwkJSUVFRTgwMjExX01GUF9SRVFVSVJFRAorCX0gbWZwOyAvKiBtYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24gKi8KIAogCWludCB3bW1fbGFzdF9wYXJhbV9zZXQ7CisKKwkvKiBFeHRyYSBJRSBkYXRhIGZvciBtYW5hZ2VtZW50IGZyYW1lcyAqLworCXU4ICpzbWVfYXV0aF9pZTsKKwlzaXplX3Qgc21lX2F1dGhfaWVfbGVuOworfTsKKworZW51bSBpZWVlODAyMTFfaWJzc19mbGFncyB7CisJSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTAkJPSBCSVQoMCksCisJSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUwJCT0gQklUKDEpLAorCUlFRUU4MDIxMV9JQlNTX0JTU0lEX1NFVAkJPSBCSVQoMiksCisJSUVFRTgwMjExX0lCU1NfUFJFVl9CU1NJRF9TRVQJCT0gQklUKDMpLAorCUlFRUU4MDIxMV9JQlNTX1NTSURfU0VUCQkJPSBCSVQoNCksCit9OworCitlbnVtIGllZWU4MDIxMV9pYnNzX3JlcXVlc3QgeworCUlFRUU4MDIxMV9JQlNTX1JFUV9SVU4JPSAwLAorfTsKKworc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzIHsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKworCXN0cnVjdCBza19idWZmX2hlYWQgc2tiX3F1ZXVlOworCisJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKKwl1OCBzc2lkX2xlbjsKKworCXUzMiBmbGFnczsKKworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKworCXVuc2lnbmVkIGxvbmcgcmVxdWVzdDsKKworCXVuc2lnbmVkIGxvbmcgaWJzc19qb2luX3JlcTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHJvYmVfcmVzcDsgLyogUHJvYmVSZXNwIHRlbXBsYXRlIGZvciBJQlNTICovCisKKwllbnVtIHsKKwkJSUVFRTgwMjExX0lCU1NfTUxNRV9TRUFSQ0gsCisJCUlFRUU4MDIxMV9JQlNTX01MTUVfSk9JTkVELAorCX0gc3RhdGU7CiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggewpAQCAtMzcwLDcgKzQwMyw2IEBACiAgKgogICogQElFRUU4MDIxMV9TREFUQV9BTExNVUxUSTogaW50ZXJmYWNlIHdhbnRzIGFsbCBtdWx0aWNhc3QgcGFja2V0cwogICogQElFRUU4MDIxMV9TREFUQV9QUk9NSVNDOiBpbnRlcmZhY2UgaXMgcHJvbWlzYwotICogQElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRTogdXNlcnNwYWNlIE1MTUUgaXMgYWN0aXZlCiAgKiBASUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTogb3BlcmF0aW5nIGluIEctb25seSBtb2RlCiAgKiBASUVFRTgwMjExX1NEQVRBX0RPTlRfQlJJREdFX1BBQ0tFVFM6IGJyaWRnZSBwYWNrZXRzIGJldHdlZW4KICAqCWFzc29jaWF0ZWQgc3RhdGlvbnMgYW5kIGRlbGl2ZXIgbXVsdGljYXN0IGZyYW1lcyBib3RoCkBAIC0zNzksOSArNDExLDggQEAKIGVudW0gaWVlZTgwMjExX3N1Yl9pZl9kYXRhX2ZsYWdzIHsKIAlJRUVFODAyMTFfU0RBVEFfQUxMTVVMVEkJCT0gQklUKDApLAogCUlFRUU4MDIxMV9TREFUQV9QUk9NSVNDCQkJPSBCSVQoMSksCi0JSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FCQk9IEJJVCgyKSwKLQlJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFCQk9IEJJVCgzKSwKLQlJRUVFODAyMTFfU0RBVEFfRE9OVF9CUklER0VfUEFDS0VUUwk9IEJJVCg0KSwKKwlJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFCQk9IEJJVCgyKSwKKwlJRUVFODAyMTFfU0RBVEFfRE9OVF9CUklER0VfUEFDS0VUUwk9IEJJVCgzKSwKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgewpAQCAtNDA0LDggKzQzNSwxMCBAQAogCXVuc2lnbmVkIGludCBmcmFnbWVudF9uZXh0OwogCiAjZGVmaW5lIE5VTV9ERUZBVUxUX0tFWVMgNAotCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXlzW05VTV9ERUZBVUxUX0tFWVNdOworI2RlZmluZSBOVU1fREVGQVVMVF9NR01UX0tFWVMgMgorCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXlzW05VTV9ERUZBVUxUX0tFWVMgKyBOVU1fREVGQVVMVF9NR01UX0tFWVNdOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICpkZWZhdWx0X2tleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqZGVmYXVsdF9tZ210X2tleTsKIAogCXUxNiBzZXF1ZW5jZV9udW1iZXI7CiAKQEAgLTQyMyw3ICs0NTYsOCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2FwIGFwOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3dkcyB3ZHM7CiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfdmxhbiB2bGFuOwotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSBzdGE7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCBtZ2Q7CisJCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyBpYnNzOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCBtZXNoOwogI2VuZGlmCkBAIC00NzcsNiArNTExLDcgQEAKIAl9IGRlYnVnZnM7CiAJc3RydWN0IHsKIAkJc3RydWN0IGRlbnRyeSAqZGVmYXVsdF9rZXk7CisJCXN0cnVjdCBkZW50cnkgKmRlZmF1bHRfbWdtdF9rZXk7CiAJfSBjb21tb25fZGVidWdmczsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICkBAIC01NDEsMTEgKzU3NiwxMiBAQAogZW51bSBxdWV1ZV9zdG9wX3JlYXNvbiB7CiAJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0RSSVZFUiwKIAlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUFMsCisJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSwKKwlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQUdHUkVHQVRJT04sCisJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1NVU1BFTkQsCisJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcsCiB9OwogCi0vKiBtYXhpbXVtIG51bWJlciBvZiBoYXJkd2FyZSBxdWV1ZXMgd2Ugc3VwcG9ydC4gKi8KLSNkZWZpbmUgUURfTUFYX1FVRVVFUyAoSUVFRTgwMjExX01BWF9BTVBEVV9RVUVVRVMgKyBJRUVFODAyMTFfTUFYX1FVRVVFUykKLQogc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CiB9OwpAQCAtNTU4LDkgKzU5NCwxMCBAQAogCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wczsKIAotCXVuc2lnbmVkIGxvbmcgcXVldWVfcG9vbFtCSVRTX1RPX0xPTkdTKFFEX01BWF9RVUVVRVMpXTsKIAl1bnNpZ25lZCBsb25nIHF1ZXVlX3N0b3BfcmVhc29uc1tJRUVFODAyMTFfTUFYX1FVRVVFU107CisJLyogYWxzbyB1c2VkIHRvIHByb3RlY3QgYW1wZHVfYWNfcXVldWUgYW5kIGFtZHB1X2FjX3N0b3BfcmVmY250ICovCiAJc3BpbmxvY2tfdCBxdWV1ZV9zdG9wX3JlYXNvbl9sb2NrOworCiAJc3RydWN0IG5ldF9kZXZpY2UgKm1kZXY7IC8qIHdtYXN0ZXIjIC0gIm1hc3RlciIgODAyLjExIGRldmljZSAqLwogCWludCBvcGVuX2NvdW50OwogCWludCBtb25pdG9ycywgY29va2VkX21udHJzOwpAQCAtNTY4LDcgKzYwNSw2IEBACiAJaW50IGZpZl9mY3NmYWlsLCBmaWZfcGxjcGZhaWwsIGZpZl9jb250cm9sLCBmaWZfb3RoZXJfYnNzOwogCXVuc2lnbmVkIGludCBmaWx0ZXJfZmxhZ3M7IC8qIEZJRl8qICovCiAJc3RydWN0IGl3X3N0YXRpc3RpY3Mgd3N0YXRzOwotCXU4IHdzdGF0c19mbGFnczsKIAlib29sIHRpbV9pbl9sb2NrZWRfc2VjdGlvbjsgLyogc2VlIGllZWU4MDIxMV9iZWFjb25fZ2V0KCkgKi8KIAlpbnQgdHhfaGVhZHJvb207IC8qIHJlcXVpcmVkIGhlYWRyb29tIGZvciBoYXJkd2FyZS9yYWRpb3RhcCAqLwogCkBAIC01OTUsMTEgKzYzMSwxNyBAQAogCXN0cnVjdCBzdGFfaW5mbyAqc3RhX2hhc2hbU1RBX0hBU0hfU0laRV07CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhX2NsZWFudXA7CiAKLQl1bnNpZ25lZCBsb25nIHF1ZXVlc19wZW5kaW5nW0JJVFNfVE9fTE9OR1MoSUVFRTgwMjExX01BWF9RVUVVRVMpXTsKLQl1bnNpZ25lZCBsb25nIHF1ZXVlc19wZW5kaW5nX3J1bltCSVRTX1RPX0xPTkdTKElFRUU4MDIxMV9NQVhfUVVFVUVTKV07Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9zdG9yZWRfcGFja2V0IHBlbmRpbmdfcGFja2V0W0lFRUU4MDIxMV9NQVhfUVVFVUVTXTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHBlbmRpbmdbSUVFRTgwMjExX01BWF9RVUVVRVNdOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eF9wZW5kaW5nX3Rhc2tsZXQ7CiAKKwkvKgorCSAqIFRoaXMgbG9jayBpcyB1c2VkIHRvIHByZXZlbnQgY29uY3VycmVudCBBLU1QRFUKKwkgKiBzZXNzaW9uIHN0YXJ0L3N0b3AgcHJvY2Vzc2luZywgdGhpcyB0aHVzIGFsc28KKwkgKiBzeW5jaHJvbmlzZXMgdGhlIC0+YW1wZHVfYWN0aW9uKCkgY2FsbGJhY2sgdG8KKwkgKiBkcml2ZXJzIGFuZCBsaW1pdHMgaXQgdG8gb25lIGF0IGEgdGltZS4KKwkgKi8KKwlzcGlubG9ja190IGFtcGR1X2xvY2s7CisKIAkvKiBudW1iZXIgb2YgaW50ZXJmYWNlcyB3aXRoIGNvcnJlc3BvbmRpbmcgSUZGXyBmbGFncyAqLwogCWF0b21pY190IGlmZl9hbGxtdWx0aXMsIGlmZl9wcm9taXNjczsKIApAQCAtNjEyLDcgKzY1NCw5IEBACiAJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKndlcF9yeF90Zm07CiAJdTMyIHdlcF9pdjsKIAorCS8qIHNlZSBpZmFjZS5jICovCiAJc3RydWN0IGxpc3RfaGVhZCBpbnRlcmZhY2VzOworCXN0cnVjdCBtdXRleCBpZmxpc3RfbXR4OwogCiAJLyoKIAkgKiBLZXkgbG9jaywgcHJvdGVjdHMgc2RhdGEncyBrZXlfbGlzdCBhbmQgc3RhX2luZm8ncwpAQCAtNjIzLDIwICs2NjcsMTggQEAKIAogCS8qIFNjYW5uaW5nIGFuZCBCU1MgbGlzdCAqLwogCWJvb2wgc3dfc2Nhbm5pbmcsIGh3X3NjYW5uaW5nOworCXN0cnVjdCBjZmc4MDIxMV9zc2lkIHNjYW5fc3NpZDsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0IGludF9zY2FuX3JlcTsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKnNjYW5fY2hhbm5lbDsKIAlpbnQgc2Nhbl9jaGFubmVsX2lkeDsKLQllbnVtIGllZWU4MDIxMV9iYW5kIHNjYW5fYmFuZDsKIAogCWVudW0geyBTQ0FOX1NFVF9DSEFOTkVMLCBTQ0FOX1NFTkRfUFJPQkUgfSBzY2FuX3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9zY2FuX2NvbXBsZXRlZDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHNjYW5fd29yazsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzY2FuX3NkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqb3Blcl9jaGFubmVsLCAqc2Nhbl9jaGFubmVsOwogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgb3Blcl9jaGFubmVsX3R5cGU7Ci0JdTggc2Nhbl9zc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOwotCXNpemVfdCBzY2FuX3NzaWRfbGVuOwotCXN0cnVjdCBsaXN0X2hlYWQgYnNzX2xpc3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzc19oYXNoW1NUQV9IQVNIX1NJWkVdOwotCXNwaW5sb2NrX3QgYnNzX2xvY2s7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpvcGVyX2NoYW5uZWwsICpjc2FfY2hhbm5lbDsKIAogCS8qIFNOTVAgY291bnRlcnMgKi8KIAkvKiBkb3QxMUNvdW50ZXJzVGFibGUgKi8KQEAgLTY0OSw3ICs2OTEsNiBAQAogCXUzMiBkb3QxMVJlY2VpdmVkRnJhZ21lbnRDb3VudDsKIAl1MzIgZG90MTFNdWx0aWNhc3RSZWNlaXZlZEZyYW1lQ291bnQ7CiAJdTMyIGRvdDExVHJhbnNtaXR0ZWRGcmFtZUNvdW50OwotCXUzMiBkb3QxMVdFUFVuZGVjcnlwdGFibGVDb3VudDsKIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCiAJaW50IHR4X2xlZF9jb3VudGVyLCByeF9sZWRfY291bnRlcjsKQEAgLTY5NiwxMSArNzM3LDE0IEBACiAJdW5zaWduZWQgaW50IHdtbV9hY207IC8qIGJpdCBmaWVsZCBvZiBBQ00gYml0cyAoQklUKDgwMi4xRCB0YWcpKSAqLwogCiAJYm9vbCBwb3dlcnNhdmU7Ci0JaW50IGR5bmFtaWNfcHNfdGltZW91dDsKKwlib29sIHBzcG9sbGluZzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHluYW1pY19wc19lbmFibGVfd29yazsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZHluYW1pY19wc19kaXNhYmxlX3dvcms7CiAJc3RydWN0IHRpbWVyX2xpc3QgZHluYW1pY19wc190aW1lcjsKIAorCWludCB1c2VyX3Bvd2VyX2xldmVsOyAvKiBpbiBkQm0gKi8KKwlpbnQgcG93ZXJfY29uc3RyX2xldmVsOyAvKiBpbiBkQm0gKi8KKwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCiAJc3RydWN0IGxvY2FsX2RlYnVnZnNkZW50cmllcyB7CiAJCXN0cnVjdCBkZW50cnkgKnJjZGlyOwpAQCAtNzEyLDYgKzc1Niw4IEBACiAJCXN0cnVjdCBkZW50cnkgKmxvbmdfcmV0cnlfbGltaXQ7CiAJCXN0cnVjdCBkZW50cnkgKnRvdGFsX3BzX2J1ZmZlcmVkOwogCQlzdHJ1Y3QgZGVudHJ5ICp3ZXBfaXY7CisJCXN0cnVjdCBkZW50cnkgKnRzZjsKKwkJc3RydWN0IGRlbnRyeSAqcmVzZXQ7CiAJCXN0cnVjdCBkZW50cnkgKnN0YXRpc3RpY3M7CiAJCXN0cnVjdCBsb2NhbF9kZWJ1Z2ZzZGVudHJpZXNfc3RhdHNkZW50cmllcyB7CiAJCQlzdHJ1Y3QgZGVudHJ5ICp0cmFuc21pdHRlZF9mcmFnbWVudF9jb3VudDsKQEAgLTgwNSw2ICs4NTEsNyBAQAogCXU4ICpjb3VudHJ5X2VsZW07CiAJdTggKnB3cl9jb25zdHJfZWxlbTsKIAl1OCAqcXVpZXRfZWxlbTsgCS8qIGZpcnN0IHF1aXRlIGVsZW1lbnQgKi8KKwl1OCAqdGltZW91dF9pbnQ7CiAKIAkvKiBsZW5ndGggb2YgdGhlbSwgcmVzcGVjdGl2ZWx5ICovCiAJdTggc3NpZF9sZW47CkBAIC04MzIsNiArODc5LDcgQEAKIAl1OCBwd3JfY29uc3RyX2VsZW1fbGVuOwogCXU4IHF1aWV0X2VsZW1fbGVuOwogCXU4IG51bV9vZl9xdWlldF9lbGVtOwkvKiBjYW4gYmUgbW9yZSB0aGUgb25lICovCisJdTggdGltZW91dF9pbnRfbGVuOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpod190b19sb2NhbCgKQEAgLTg2MCwzNCArOTA4LDQzIEBACiB2b2lkIGllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgICAgIHUzMiBjaGFuZ2VkKTsKIHZvaWQgaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwordTMyIGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiAKIC8qIHdpcmVsZXNzIGV4dGVuc2lvbnMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaWVlZTgwMjExX2l3X2hhbmRsZXJfZGVmOwogCi0vKiBTVEEvSUJTUyBjb2RlICovCisvKiBTVEEgY29kZSAqLwogdm9pZCBpZWVlODAyMTFfc3RhX3NldHVwX3NkYXRhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKLXZvaWQgaWVlZTgwMjExX3NjYW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotdm9pZCBpZWVlODAyMTFfc3RhX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKTsKK2llZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cyk7CitpbnQgaWVlZTgwMjExX3N0YV9jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogaW50IGllZWU4MDIxMV9zdGFfc2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCBsZW4pOwogaW50IGllZWU4MDIxMV9zdGFfZ2V0X3NzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKnNzaWQsIHNpemVfdCAqbGVuKTsKIGludCBpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkKTsKLXZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpOwotc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQl1OCAqYnNzaWQsIHU4ICphZGRyLCB1NjQgc3VwcF9yYXRlcyk7Cit2b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogaW50IGllZWU4MDIxMV9zdGFfZGVhdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHUxNiByZWFzb24pOwogaW50IGllZWU4MDIxMV9zdGFfZGlzYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgcmVhc29uKTsKLXUzMiBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwotdTY0IGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOwotdm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkc3QsCi0JCQkgICAgICB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKTsKK3ZvaWQgaWVlZTgwMjExX3NlbmRfcHNwb2xsKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworCisvKiBJQlNTIGNvZGUgKi8KK2ludCBpZWVlODAyMTFfaWJzc19jb21taXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworaW50IGllZWU4MDIxMV9pYnNzX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKTsKK2ludCBpZWVlODAyMTFfaWJzc19nZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90ICpsZW4pOworaW50IGllZWU4MDIxMV9pYnNzX3NldF9ic3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkKTsKK3ZvaWQgaWVlZTgwMjExX2lic3Nfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX2lic3Nfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2lic3NfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOworc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQl1OCAqYnNzaWQsIHU4ICphZGRyLCB1MzIgc3VwcF9yYXRlcyk7CiAKIC8qIHNjYW4vQlNTIGhhbmRsaW5nICovCit2b2lkIGllZWU4MDIxMV9zY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIGludCBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbik7CisJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpOwogaW50IGllZWU4MDIxMV9zY2FuX3Jlc3VsdHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkJICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKQEAgLTg5NSwyOSArOTUyLDI4IEBACiBpZWVlODAyMTFfc2Nhbl9yeChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpOwotdm9pZCBpZWVlODAyMTFfcnhfYnNzX2xpc3RfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7Ci12b2lkIGllZWU4MDIxMV9yeF9ic3NfbGlzdF9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogaW50IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgICAgIGNoYXIgKmllLCBzaXplX3QgbGVuKTsKKwkJCSAgICAgICBjb25zdCBjaGFyICppZSwgc2l6ZV90IGxlbik7CiAKIHZvaWQgaWVlZTgwMjExX21sbWVfbm90aWZ5X3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX3NjYW5fZmFpbGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIGludCBpZWVlODAyMTFfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzY2FuX3NkYXRhLAotCQkJIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOworCQkJIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCiBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkgIHNpemVfdCBsZW4sCiAJCQkgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKLQkJCSAgaW50IGZyZXEsIGJvb2wgYmVhY29uKTsKLXN0cnVjdCBpZWVlODAyMTFfYnNzICoKLWllZWU4MDIxMV9yeF9ic3NfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqYnNzaWQsIGludCBmcmVxLAotCQkgICAgIHU4ICpzc2lkLCB1OCBzc2lkX2xlbik7CisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgYm9vbCBiZWFjb24pOwogc3RydWN0IGllZWU4MDIxMV9ic3MgKgogaWVlZTgwMjExX3J4X2Jzc19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICpic3NpZCwgaW50IGZyZXEsCiAJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpOwordm9pZCBpZWVlODAyMTFfcnhfYnNzX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmJzc2lkLAorCQkJICAgICBpbnQgZnJlcSwgdTggKnNzaWQsIHU4IHNzaWRfbGVuKTsKIAogLyogaW50ZXJmYWNlIGhhbmRsaW5nICovCiBpbnQgaWVlZTgwMjExX2lmX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgY29uc3QgY2hhciAqbmFtZSwKQEAgLTk0MywxMCArOTk5LDE1IEBACiAJCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0aSwKIAkJCXUxNiBhcF9odF9jYXBfZmxhZ3MpOwogdm9pZCBpZWVlODAyMTFfc2VuZF9iYXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpyYSwgdTE2IHRpZCwgdTE2IHNzbik7Cit2b2lkIGllZWU4MDIxMV9zZW5kX2RlbGJhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICBjb25zdCB1OCAqZGEsIHUxNiB0aWQsCisJCQkgIHUxNiBpbml0aWF0b3IsIHUxNiByZWFzb25fY29kZSk7CiAKIHZvaWQgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkYSwKIAkJCQl1MTYgdGlkLCB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKTsKLXZvaWQgaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICphZGRyKTsKK3ZvaWQgX19pZWVlODAyMTFfc3RvcF9yeF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgICB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKTsKK3ZvaWQgaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19kZWxiYShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbik7CkBAIC05NTksMTAgKzEwMjAsMzYgQEAKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICAgIHNpemVfdCBsZW4pOwogCitpbnQgX19pZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAorCQkJCSAgIGVudW0gaWVlZTgwMjExX2JhY2tfcGFydGllcyBpbml0aWF0b3IpOworCiAvKiBTcGVjdHJ1bSBtYW5hZ2VtZW50ICovCiB2b2lkIGllZWU4MDIxMV9wcm9jZXNzX21lYXN1cmVtZW50X3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgICBzaXplX3QgbGVuKTsKK3ZvaWQgaWVlZTgwMjExX2Noc3dpdGNoX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIGllZWU4MDIxMV9jaHN3aXRjaF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIGllZWU4MDIxMV9wcm9jZXNzX2NoYW5zd2l0Y2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dfaWUgKnN3X2VsZW0sCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKTsKK3ZvaWQgaWVlZTgwMjExX2hhbmRsZV9wd3JfY29uc3RyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSB1MTYgY2FwYWJfaW5mbywgdTggKnB3cl9jb25zdHJfZWxlbSwKKwkJCQkgdTggcHdyX2NvbnN0cl9lbGVtX2xlbik7CisKKy8qIFN1c3BlbmQvcmVzdW1lICovCisjaWZkZWYgQ09ORklHX1BNCitpbnQgX19pZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitpbnQgX19pZWVlODAyMTFfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBfX2llZWU4MDIxMV9zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgX19pZWVlODAyMTFfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXJldHVybiAwOworfQorI2VuZGlmCiAKIC8qIHV0aWxpdHkgZnVuY3Rpb25zL2NvbnN0YW50cyAqLwogZXh0ZXJuIHZvaWQgKm1hYzgwMjExX3dpcGh5X3ByaXZpZDsgLyogZm9yIHdpcGh5IHByaXZpZCAqLwpAQCAtOTgwLDE3ICsxMDY3LDQyIEBACiB2b2lkIGllZWU4MDJfMTFfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLAogCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcyk7CiBpbnQgaWVlZTgwMjExX3NldF9mcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBpbnQgZnJlcSk7Ci11NjQgaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKK3UzMiBpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKTsKIAogdm9pZCBpZWVlODAyMTFfZHluYW1pY19wc19lbmFibGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpZWVlODAyMTFfZHluYW1pY19wc19kaXNhYmxlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgaWVlZTgwMjExX2R5bmFtaWNfcHNfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICBpbnQgcG93ZXJzYXZlKTsKK3ZvaWQgaWVlZTgwMjExX3N0YV9yeF9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpOwordm9pZCBpZWVlODAyMTFfYmVhY29uX2xvc3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCiB2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7CiB2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7Cit2b2lkIGllZWU4MDIxMV93YWtlX3F1ZXVlX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLAorCQkJCSAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7Cit2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLAorCQkJCSAgICBlbnVtIHF1ZXVlX3N0b3BfcmVhc29uIHJlYXNvbik7CisKK3ZvaWQgaWVlZTgwMjExX3NlbmRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSB1MTYgdHJhbnNhY3Rpb24sIHUxNiBhdXRoX2FsZywKKwkJCSB1OCAqZXh0cmEsIHNpemVfdCBleHRyYV9sZW4sCisJCQkgY29uc3QgdTggKmJzc2lkLCBpbnQgZW5jcnlwdCk7Cit2b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKKwkJCSAgICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkgICAgICB1OCAqaWUsIHNpemVfdCBpZV9sZW4pOworCit2b2lkIGllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBjb25zdCBzaXplX3Qgc3VwcF9yYXRlc19sZW4sCisJCQkJICBjb25zdCB1OCAqc3VwcF9yYXRlcyk7Cit1MzIgaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAorCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCk7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTk9JTkxJTkUKICNkZWZpbmUgZGVidWdfbm9pbmxpbmUgbm9pbmxpbmUKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZmFjZS5jIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKaW5kZXggYjkwNzQ4Mi4uOTFlOGUxYiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2lmYWNlLmMKKysrIGIvbmV0L21hYzgwMjExL2lmYWNlLmMKQEAgLTIxLDYgKzIxLDIzIEBACiAjaW5jbHVkZSAibWVzaC5oIgogI2luY2x1ZGUgImxlZC5oIgogCisvKioKKyAqIERPQzogSW50ZXJmYWNlIGxpc3QgbG9ja2luZworICoKKyAqIFRoZSBpbnRlcmZhY2UgbGlzdCBpbiBlYWNoIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgaXMgcHJvdGVjdGVkCisgKiB0aHJlZS1mb2xkOgorICoKKyAqICgxKSBtb2RpZmljYXRpb25zIG1heSBvbmx5IGJlIGRvbmUgdW5kZXIgdGhlIFJUTkwKKyAqICgyKSBtb2RpZmljYXRpb25zIGFuZCByZWFkZXJzIGFyZSBwcm90ZWN0ZWQgYWdhaW5zdCBlYWNoIG90aGVyIGJ5CisgKiAgICAgdGhlIGlmbGlzdF9tdHguCisgKiAoMykgbW9kaWZpY2F0aW9ucyBhcmUgZG9uZSBpbiBhbiBSQ1UgbWFubmVyIHNvIGF0b21pYyByZWFkZXJzCisgKiAgICAgY2FuIHRyYXZlcnNlIHRoZSBsaXN0IGluIFJDVS1zYWZlIGJsb2Nrcy4KKyAqCisgKiBBcyBhIGNvbnNlcXVlbmNlLCByZWFkcyAodHJhdmVyc2Fscykgb2YgdGhlIGxpc3QgY2FuIGJlIHByb3RlY3RlZAorICogYnkgZWl0aGVyIHRoZSBSVE5MLCB0aGUgaWZsaXN0X210eCBvciBSQ1UuCisgKi8KKworCiBzdGF0aWMgaW50IGllZWU4MDIxMV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCWludCBtZXNoaGRybGVuOwpAQCAtMjE5LDcgKzIzNiwxMCBAQAogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BSRVZfQlNTSURfU0VUOworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CisJCWVsc2UKKwkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX1BSRVZfQlNTSURfU0VUOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAlkZWZhdWx0OgogCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOwpAQCAtMjQxLDggKzI2MSw3IEBACiAJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBjaGFuZ2VkKTsKIAkJaWVlZTgwMjExX2VuYWJsZV9rZXlzKHNkYXRhKTsKIAotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkJICAgICEoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKSkKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAkJZWxzZQogCQkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwpAQCAtMzA0LDExICszMjMsMTAgQEAKIAkgKiB5ZXQgYmUgZWZmZWN0aXZlLiBUcmlnZ2VyIGV4ZWN1dGlvbiBvZiBpZWVlODAyMTFfc3RhX3dvcmsKIAkgKiB0byBmaXggdGhpcy4KIAkgKi8KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0JCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmc3RhLT53b3JrKTsKLQl9CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5tZ2Qud29yayk7CisJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZzZGF0YS0+dS5pYnNzLndvcmspOwogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOwogCkBAIC0zNDUsMTMgKzM2MywyNCBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CiAJCWlmIChzdGEtPnNkYXRhID09IHNkYXRhKQotCQkJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc2RhdGEsCi0JCQkJCQkJICAgIHN0YS0+c3RhLmFkZHIpOworCQkJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RhKTsKIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCS8qCisJICogQW5ub3VuY2UgdGhhdCB3ZSBhcmUgbGVhdmluZyB0aGUgbmV0d29yaywgaW4gY2FzZSB3ZSBhcmUgYQorCSAqIHN0YXRpb24gaW50ZXJmYWNlIHR5cGUuIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSByZW1vdmluZworCSAqIGFsbCBzdGF0aW9ucyBhc3NvY2lhdGVkIHdpdGggc3RhX2luZm9fZmx1c2gsIG90aGVyd2lzZSBTVEEKKwkgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIGdvbmUgYW5kIG5vIGFubm91bmNlIGJlaW5nIGRvbmUuCisJICovCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWlmIChzZGF0YS0+dS5tZ2Quc3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEKQorCQkJaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzZGF0YSwKKwkJCQlXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORyk7CisJfQorCisJLyoKIAkgKiBSZW1vdmUgYWxsIHN0YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGludGVyZmFjZS4KIAkgKgogCSAqIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBjYWxsaW5nIG9wcy0+cmVtb3ZlX2ludGVyZmFjZSgpCkBAIC0zODMsNiArNDEyLDggQEAKIAkJYXRvbWljX2RlYygmbG9jYWwtPmlmZl9wcm9taXNjcyk7CiAKIAlkZXZfbWNfdW5zeW5jKGxvY2FsLT5tZGV2LCBkZXYpOworCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CisJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogCiAJLyogQVBzIG5lZWQgc3BlY2lhbCB0cmVhdG1lbnQgKi8KIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CkBAIC00MzQsMTQgKzQ2NSw5IEBACiAJCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCS8qIEFubm91bmNlIHRoYXQgd2UgYXJlIGxlYXZpbmcgdGhlIG5ldHdvcmsuICovCi0JCWlmIChzZGF0YS0+dS5zdGEuc3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEKQotCQkJaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzZGF0YSwKLQkJCQkJCVdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKLQotCQltZW1zZXQoc2RhdGEtPnUuc3RhLmJzc2lkLCAwLCBFVEhfQUxFTik7Ci0JCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5zdGEudGltZXIpOworCQltZW1zZXQoc2RhdGEtPnUubWdkLmJzc2lkLCAwLCBFVEhfQUxFTik7CisJCWRlbF90aW1lcl9zeW5jKCZzZGF0YS0+dS5tZ2QuY2hzd2l0Y2hfdGltZXIpOworCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUubWdkLnRpbWVyKTsKIAkJLyoKIAkJICogSWYgdGhlIHRpbWVyIGZpcmVkIHdoaWxlIHdlIHdhaXRlZCBmb3IgaXQsIGl0IHdpbGwgaGF2ZQogCQkgKiByZXF1ZXVlZCB0aGUgd29yay4gTm93IHRoZSB3b3JrIHdpbGwgYmUgcnVubmluZyBhZ2FpbgpAQCAtNDQ5LDcgKzQ3NSwxMSBAQAogCQkgKiB3aGV0aGVyIHRoZSBpbnRlcmZhY2UgaXMgcnVubmluZywgd2hpY2gsIGF0IHRoaXMgcG9pbnQsCiAJCSAqIGl0IG5vIGxvbmdlciBpcy4KIAkJICovCi0JCWNhbmNlbF93b3JrX3N5bmMoJnNkYXRhLT51LnN0YS53b3JrKTsKKwkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLndvcmspOworCQljYW5jZWxfd29ya19zeW5jKCZzZGF0YS0+dS5tZ2QuY2hzd2l0Y2hfd29yayk7CisKKwkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUubWdkLmJlYWNvbl9sb3NzX3dvcmspOworCiAJCS8qCiAJCSAqIFdoZW4gd2UgZ2V0IGhlcmUsIHRoZSBpbnRlcmZhY2UgaXMgbWFya2VkIGRvd24uCiAJCSAqIENhbGwgc3luY2hyb25pemVfcmN1KCkgdG8gd2FpdCBmb3IgdGhlIFJYIHBhdGgKQEAgLTQ1NywxMiArNDg3LDIyIEBACiAJCSAqIGZyYW1lcyBhdCB0aGlzIHZlcnkgdGltZSBvbiBhbm90aGVyIENQVS4KIAkJICovCiAJCXN5bmNocm9uaXplX3JjdSgpOwotCQlza2JfcXVldWVfcHVyZ2UoJnNkYXRhLT51LnN0YS5za2JfcXVldWUpOworCQlza2JfcXVldWVfcHVyZ2UoJnNkYXRhLT51Lm1nZC5za2JfcXVldWUpOwogCi0JCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7Ci0JCWtmcmVlKHNkYXRhLT51LnN0YS5leHRyYV9pZSk7Ci0JCXNkYXRhLT51LnN0YS5leHRyYV9pZSA9IE5VTEw7Ci0JCXNkYXRhLT51LnN0YS5leHRyYV9pZV9sZW4gPSAwOworCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCB8CisJCQkJCUlFRUU4MDIxMV9TVEFfVEtJUF9XRVBfVVNFRCk7CisJCWtmcmVlKHNkYXRhLT51Lm1nZC5leHRyYV9pZSk7CisJCXNkYXRhLT51Lm1nZC5leHRyYV9pZSA9IE5VTEw7CisJCXNkYXRhLT51Lm1nZC5leHRyYV9pZV9sZW4gPSAwOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCQltZW1zZXQoc2RhdGEtPnUuaWJzcy5ic3NpZCwgMCwgRVRIX0FMRU4pOworCQkJZGVsX3RpbWVyX3N5bmMoJnNkYXRhLT51Lmlic3MudGltZXIpOworCQkJY2FuY2VsX3dvcmtfc3luYygmc2RhdGEtPnUuaWJzcy53b3JrKTsKKwkJCXN5bmNocm9uaXplX3JjdSgpOworCQkJc2tiX3F1ZXVlX3B1cmdlKCZzZGF0YS0+dS5pYnNzLnNrYl9xdWV1ZSk7CisJCX0KIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgewpAQCAtNTAxLDcgKzU0MSw3IEBACiAJCQkgKiBzY2FuIGV2ZW50IHRvIHVzZXJzcGFjZSAtLSB0aGUgc2NhbiBpcyBpbmNvbXBsZXRlLgogCQkJICovCiAJCQlpZiAobG9jYWwtPnN3X3NjYW5uaW5nKQotCQkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCgmbG9jYWwtPmh3KTsKKwkJCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoJmxvY2FsLT5odywgdHJ1ZSk7CiAJCX0KIAogCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOwpAQCAtNTY5LDE5ICs2MDksNiBAQAogCWRldl9tY19zeW5jKGxvY2FsLT5tZGV2LCBkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfaWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlldGhlcl9zZXR1cChkZXYpOwotCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQ7Ci0JZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7Ci0JZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0OwotCWRldi0+Y2hhbmdlX210dSA9IGllZWU4MDIxMV9jaGFuZ2VfbXR1OwotCWRldi0+b3BlbiA9IGllZWU4MDIxMV9vcGVuOwotCWRldi0+c3RvcCA9IGllZWU4MDIxMV9zdG9wOwotCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwotCS8qIHdlIHdpbGwgdmFsaWRhdGUgdGhlIGFkZHJlc3Mgb3Vyc2VsdmVzIGluIC0+b3BlbiAqLwotCWRldi0+dmFsaWRhdGVfYWRkciA9IE5VTEw7Ci19CiAvKgogICogQ2FsbGVkIHdoZW4gdGhlIG5ldGRldiBpcyByZW1vdmVkIG9yLCBieSB0aGUgY29kZSBiZWxvdywgYmVmb3JlCiAgKiB0aGUgaW50ZXJmYWNlIHR5cGUgY2hhbmdlcy4KQEAgLTYyMSwxMiArNjQ4LDE0IEBACiAJCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQkJbWVzaF9ybWNfZnJlZShzZGF0YSk7CiAJCWJyZWFrOwotCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgotCQlrZnJlZShzZGF0YS0+dS5zdGEuZXh0cmFfaWUpOwotCQlrZnJlZShzZGF0YS0+dS5zdGEuYXNzb2NyZXFfaWVzKTsKLQkJa2ZyZWUoc2RhdGEtPnUuc3RhLmFzc29jcmVzcF9pZXMpOwotCQlrZnJlZV9za2Ioc2RhdGEtPnUuc3RhLnByb2JlX3Jlc3ApOworCQlrZnJlZV9za2Ioc2RhdGEtPnUuaWJzcy5wcm9iZV9yZXNwKTsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCQlrZnJlZShzZGF0YS0+dS5tZ2QuZXh0cmFfaWUpOworCQlrZnJlZShzZGF0YS0+dS5tZ2QuYXNzb2NyZXFfaWVzKTsKKwkJa2ZyZWUoc2RhdGEtPnUubWdkLmFzc29jcmVzcF9pZXMpOworCQlrZnJlZShzZGF0YS0+dS5tZ2Quc21lX2F1dGhfaWUpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46CkBAIC02NDIsNiArNjcxLDM0IEBACiAJV0FSTl9PTihmbHVzaGVkKTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmX29wcyA9IHsKKwkubmRvX29wZW4JCT0gaWVlZTgwMjExX29wZW4sCisJLm5kb19zdG9wCQk9IGllZWU4MDIxMV9zdG9wLAorCS5uZG9fdW5pbml0CQk9IGllZWU4MDIxMV90ZWFyZG93bl9zZGF0YSwKKwkubmRvX3N0YXJ0X3htaXQJCT0gaWVlZTgwMjExX3N1YmlmX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBpZWVlODAyMTFfc2V0X211bHRpY2FzdF9saXN0LAorCS5uZG9fY2hhbmdlX210dSAJPSBpZWVlODAyMTFfY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0geworCS5uZG9fb3BlbgkJPSBpZWVlODAyMTFfb3BlbiwKKwkubmRvX3N0b3AJCT0gaWVlZTgwMjExX3N0b3AsCisJLm5kb191bmluaXQJCT0gaWVlZTgwMjExX3RlYXJkb3duX3NkYXRhLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0LAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX2NoYW5nZV9tdHUgCT0gaWVlZTgwMjExX2NoYW5nZV9tdHUsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorfTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2lmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJZXRoZXJfc2V0dXAoZGV2KTsKKwlkZXYtPm5ldGRldl9vcHMgPSAmaWVlZTgwMjExX2RhdGFpZl9vcHM7CisJZGV2LT53aXJlbGVzc19oYW5kbGVycyA9ICZpZWVlODAyMTFfaXdfaGFuZGxlcl9kZWY7CisJZGV2LT5kZXN0cnVjdG9yID0gZnJlZV9uZXRkZXY7Cit9CisKIC8qCiAgKiBIZWxwZXIgZnVuY3Rpb24gdG8gaW5pdGlhbGlzZSBhbiBpbnRlcmZhY2UgdG8gYSBzcGVjaWZpYyB0eXBlLgogICovCkBAIC02NTMsNyArNzEwLDcgQEAKIAogCS8qIGFuZCBzZXQgc29tZSB0eXBlLWRlcGVuZGVudCB2YWx1ZXMgKi8KIAlzZGF0YS0+dmlmLnR5cGUgPSB0eXBlOwotCXNkYXRhLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9zdWJpZl9zdGFydF94bWl0OworCXNkYXRhLT5kZXYtPm5ldGRldl9vcHMgPSAmaWVlZTgwMjExX2RhdGFpZl9vcHM7CiAJc2RhdGEtPndkZXYuaWZ0eXBlID0gdHlwZTsKIAogCS8qIG9ubHkgbW9uaXRvciBkaWZmZXJzICovCkBAIC02NjUsMTYgKzcyMiwxOCBAQAogCQlJTklUX0xJU1RfSEVBRCgmc2RhdGEtPnUuYXAudmxhbnMpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJaWVlZTgwMjExX3N0YV9zZXR1cF9zZGF0YShzZGF0YSk7CiAJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWllZWU4MDIxMV9pYnNzX3NldHVwX3NkYXRhKHNkYXRhKTsKKwkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkKIAkJCWllZWU4MDIxMV9tZXNoX2luaXRfc2RhdGEoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJCXNkYXRhLT5kZXYtPnR5cGUgPSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQOwotCQlzZGF0YS0+ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBpZWVlODAyMTFfbW9uaXRvcl9zdGFydF94bWl0OworCQlzZGF0YS0+ZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9tb25pdG9yaWZfb3BzOwogCQlzZGF0YS0+dS5tbnRyX2ZsYWdzID0gTU9OSVRPUl9GTEFHX0NPTlRST0wgfAogCQkJCSAgICAgIE1PTklUT1JfRkxBR19PVEhFUl9CU1M7CiAJCWJyZWFrOwpAQCAtNzU1LDYgKzgxNCw3IEBACiAKIAltZW1jcHkobmRldi0+ZGV2X2FkZHIsIGxvY2FsLT5ody53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7CiAJU0VUX05FVERFVl9ERVYobmRldiwgd2lwaHlfZGV2KGxvY2FsLT5ody53aXBoeSkpOworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7CiAKIAkvKiBkb24ndCB1c2UgSUVFRTgwMjExX0RFVl9UT19TVUJfSUYgYmVjYXVzZSBpdCBjaGVja3MgdG9vIG11Y2ggKi8KIAlzZGF0YSA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtNzgwLDE1ICs4NDAsMTUgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWw7CiAKLQluZGV2LT51bmluaXQgPSBpZWVlODAyMTFfdGVhcmRvd25fc2RhdGE7Ci0KIAlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSAmJgogCSAgICBwYXJhbXMgJiYgcGFyYW1zLT5tZXNoX2lkX2xlbikKIAkJaWVlZTgwMjExX3NkYXRhX3NldF9tZXNoX2lkKHNkYXRhLAogCQkJCQkgICAgcGFyYW1zLT5tZXNoX2lkX2xlbiwKIAkJCQkJICAgIHBhcmFtcy0+bWVzaF9pZCk7CiAKKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJbGlzdF9hZGRfdGFpbF9yY3UoJnNkYXRhLT5saXN0LCAmbG9jYWwtPmludGVyZmFjZXMpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCiAJaWYgKG5ld19kZXYpCiAJCSpuZXdfZGV2ID0gbmRldjsKQEAgLTgwNCw3ICs4NjQsMTAgQEAKIHsKIAlBU1NFUlRfUlROTCgpOwogCisJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5pZmxpc3RfbXR4KTsKIAlsaXN0X2RlbF9yY3UoJnNkYXRhLT5saXN0KTsKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+aWZsaXN0X210eCk7CisKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZShzZGF0YS0+ZGV2KTsKIH0KQEAgLTgyMCw3ICs4ODMsMTYgQEAKIAlBU1NFUlRfUlROTCgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkYXRhLCB0bXAsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQkvKgorCQkgKiB3ZSBjYW5ub3QgaG9sZCB0aGUgaWZsaXN0X210eCBhY3Jvc3MgdW5yZWdpc3Rlcl9uZXRkZXZpY2UsCisJCSAqIGJ1dCB3ZSBvbmx5IG5lZWQgdG8gaG9sZCBpdCBmb3IgbGlzdCBtb2RpZmljYXRpb25zIHRvIGxvY2sKKwkJICogb3V0IHJlYWRlcnMgc2luY2Ugd2UncmUgdW5kZXIgdGhlIFJUTkwgaGVyZSBhcyBhbGwgb3RoZXIKKwkJICogd3JpdGVycy4KKwkJICovCisJCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAkJbGlzdF9kZWwoJnNkYXRhLT5saXN0KTsKKwkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisKIAkJdW5yZWdpc3Rlcl9uZXRkZXZpY2Uoc2RhdGEtPmRldik7CiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IDk5OWY3YWEuLjY4N2FjZjIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgogI2luY2x1ZGUgImRlYnVnZnNfa2V5LmgiCiAjaW5jbHVkZSAiYWVzX2NjbS5oIgorI2luY2x1ZGUgImFlc19jbWFjLmgiCiAKIAogLyoqCkBAIC00Nyw3ICs0OCw2IEBACiAgKi8KIAogc3RhdGljIGNvbnN0IHU4IGJjYXN0X2FkZHJbRVRIX0FMRU5dID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07Ci1zdGF0aWMgY29uc3QgdTggemVyb19hZGRyW0VUSF9BTEVOXTsKIAogLyoga2V5IG11dGV4OiB1c2VkIHRvIHN5bmNocm9uaXNlIHRvZG8gcnVubmVycyAqLwogc3RhdGljIERFRklORV9NVVRFWChrZXlfbXV0ZXgpOwpAQCAtMTA4LDI5ICsxMDgsMTggQEAKIAlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmtleV9tdXRleCkpOwogfQogCi1zdGF0aWMgY29uc3QgdTggKmdldF9tYWNfZm9yX2tleShzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5KQorc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhICpnZXRfc3RhX2Zvcl9rZXkoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHsKLQljb25zdCB1OCAqYWRkciA9IGJjYXN0X2FkZHI7Ci0KLQkvKgotCSAqIElmIHdlJ3JlIGFuIEFQIHdlIHdvbid0IGV2ZXIgcmVjZWl2ZSBmcmFtZXMgd2l0aCBhIG5vbi1XRVAKLQkgKiBncm91cCBrZXkgc28gd2UgdGVsbCB0aGUgZHJpdmVyIHRoYXQgYnkgdXNpbmcgdGhlIHplcm8gTUFDCi0JICogYWRkcmVzcyB0byBpbmRpY2F0ZSBhIHRyYW5zbWl0LW9ubHkga2V5LgotCSAqLwotCWlmIChrZXktPmNvbmYuYWxnICE9IEFMR19XRVAgJiYKLQkgICAgKGtleS0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JICAgICBrZXktPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSkKLQkJYWRkciA9IHplcm9fYWRkcjsKLQogCWlmIChrZXktPnN0YSkKLQkJYWRkciA9IGtleS0+c3RhLT5zdGEuYWRkcjsKKwkJcmV0dXJuICZrZXktPnN0YS0+c3RhOwogCi0JcmV0dXJuIGFkZHI7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9rZXlfZW5hYmxlX2h3X2FjY2VsKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiB7Ci0JY29uc3QgdTggKmFkZHI7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKIAlpbnQgcmV0OwogCiAJYXNzZXJ0X2tleV9sb2NrKCk7CkBAIC0xMzksMTEgKzEyOCwxNiBAQAogCWlmICgha2V5LT5sb2NhbC0+b3BzLT5zZXRfa2V5KQogCQlyZXR1cm47CiAKLQlhZGRyID0gZ2V0X21hY19mb3Jfa2V5KGtleSk7CisJc3RhID0gZ2V0X3N0YV9mb3Jfa2V5KGtleSk7CisKKwlzZGF0YSA9IGtleS0+c2RhdGE7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCQkgICAgIHUuYXApOwogCiAJcmV0ID0ga2V5LT5sb2NhbC0+b3BzLT5zZXRfa2V5KGxvY2FsX3RvX2h3KGtleS0+bG9jYWwpLCBTRVRfS0VZLAotCQkJCSAgICAgICBrZXktPnNkYXRhLT5kZXYtPmRldl9hZGRyLCBhZGRyLAotCQkJCSAgICAgICAma2V5LT5jb25mKTsKKwkJCQkgICAgICAgJnNkYXRhLT52aWYsIHN0YSwgJmtleS0+Y29uZik7CiAKIAlpZiAoIXJldCkgewogCQlzcGluX2xvY2soJnRvZG9fbG9jayk7CkBAIC0xNTUsMTIgKzE0OSwxMyBAQAogCQlwcmludGsoS0VSTl9FUlIgIm1hYzgwMjExLSVzOiBmYWlsZWQgdG8gc2V0IGtleSAiCiAJCSAgICAgICAiKCVkLCAlcE0pIHRvIGhhcmR3YXJlICglZClcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGtleS0+bG9jYWwtPmh3LndpcGh5KSwKLQkJICAgICAgIGtleS0+Y29uZi5rZXlpZHgsIGFkZHIsIHJldCk7CisJCSAgICAgICBrZXktPmNvbmYua2V5aWR4LCBzdGEgPyBzdGEtPmFkZHIgOiBiY2FzdF9hZGRyLCByZXQpOwogfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfa2V5X2Rpc2FibGVfaHdfYWNjZWwoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSkKIHsKLQljb25zdCB1OCAqYWRkcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOwogCWludCByZXQ7CiAKIAlhc3NlcnRfa2V5X2xvY2soKTsKQEAgLTE3NiwxNyArMTcxLDIyIEBACiAJfQogCXNwaW5fdW5sb2NrKCZ0b2RvX2xvY2spOwogCi0JYWRkciA9IGdldF9tYWNfZm9yX2tleShrZXkpOworCXN0YSA9IGdldF9zdGFfZm9yX2tleShrZXkpOworCXNkYXRhID0ga2V5LT5zZGF0YTsKKworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJICAgICB1LmFwKTsKIAogCXJldCA9IGtleS0+bG9jYWwtPm9wcy0+c2V0X2tleShsb2NhbF90b19odyhrZXktPmxvY2FsKSwgRElTQUJMRV9LRVksCi0JCQkJICAgICAgIGtleS0+c2RhdGEtPmRldi0+ZGV2X2FkZHIsIGFkZHIsCi0JCQkJICAgICAgICZrZXktPmNvbmYpOworCQkJCSAgICAgICAmc2RhdGEtPnZpZiwgc3RhLCAma2V5LT5jb25mKTsKIAogCWlmIChyZXQpCiAJCXByaW50ayhLRVJOX0VSUiAibWFjODAyMTEtJXM6IGZhaWxlZCB0byByZW1vdmUga2V5ICIKIAkJICAgICAgICIoJWQsICVwTSkgZnJvbSBoYXJkd2FyZSAoJWQpXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShrZXktPmxvY2FsLT5ody53aXBoeSksCi0JCSAgICAgICBrZXktPmNvbmYua2V5aWR4LCBhZGRyLCByZXQpOworCQkgICAgICAga2V5LT5jb25mLmtleWlkeCwgc3RhID8gc3RhLT5hZGRyIDogYmNhc3RfYWRkciwgcmV0KTsKIAogCXNwaW5fbG9jaygmdG9kb19sb2NrKTsKIAlrZXktPmZsYWdzICY9IH5LRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRTsKQEAgLTIxNiwxMyArMjE2LDM4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZAorX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBpZHgpCit7CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IE5VTEw7CisKKwlpZiAoaWR4ID49IE5VTV9ERUZBVUxUX0tFWVMgJiYKKwkgICAgaWR4IDwgTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUykKKwkJa2V5ID0gc2RhdGEtPmtleXNbaWR4XTsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSwga2V5KTsKKworCWlmIChrZXkpCisJCWFkZF90b2RvKGtleSwgS0VZX0ZMQUdfVE9ET19ERUZNR01US0VZKTsKK30KKwordm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgIGludCBpZHgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzZGF0YS0+bG9jYWwtPmtleV9sb2NrLCBmbGFncyk7CisJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc2RhdGEsIGlkeCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOworfQorCiAKIHN0YXRpYyB2b2lkIF9faWVlZTgwMjExX2tleV9yZXBsYWNlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9rZXkgKm9sZCwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9rZXkgKm5ldykKIHsKLQlpbnQgaWR4LCBkZWZrZXk7CisJaW50IGlkeCwgZGVma2V5LCBkZWZtZ210a2V5OwogCiAJaWYgKG5ldykKIAkJbGlzdF9hZGQoJm5ldy0+bGlzdCwgJnNkYXRhLT5rZXlfbGlzdCk7CkBAIC0yMzgsMTMgKzI2MywxOSBAQAogCQkJaWR4ID0gbmV3LT5jb25mLmtleWlkeDsKIAogCQlkZWZrZXkgPSBvbGQgJiYgc2RhdGEtPmRlZmF1bHRfa2V5ID09IG9sZDsKKwkJZGVmbWdtdGtleSA9IG9sZCAmJiBzZGF0YS0+ZGVmYXVsdF9tZ210X2tleSA9PSBvbGQ7CiAKIAkJaWYgKGRlZmtleSAmJiAhbmV3KQogCQkJX19pZWVlODAyMTFfc2V0X2RlZmF1bHRfa2V5KHNkYXRhLCAtMSk7CisJCWlmIChkZWZtZ210a2V5ICYmICFuZXcpCisJCQlfX2llZWU4MDIxMV9zZXRfZGVmYXVsdF9tZ210X2tleShzZGF0YSwgLTEpOwogCiAJCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+a2V5c1tpZHhdLCBuZXcpOwogCQlpZiAoZGVma2V5ICYmIG5ldykKIAkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X2tleShzZGF0YSwgbmV3LT5jb25mLmtleWlkeCk7CisJCWlmIChkZWZtZ210a2V5ICYmIG5ldykKKwkJCV9faWVlZTgwMjExX3NldF9kZWZhdWx0X21nbXRfa2V5KHNkYXRhLAorCQkJCQkJCSBuZXctPmNvbmYua2V5aWR4KTsKIAl9CiAKIAlpZiAob2xkKSB7CkBAIC0yNjMsNyArMjk0LDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwogCi0JQlVHX09OKGlkeCA8IDAgfHwgaWR4ID49IE5VTV9ERUZBVUxUX0tFWVMpOworCUJVR19PTihpZHggPCAwIHx8IGlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTKTsKIAogCWtleSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfa2V5KSArIGtleV9sZW4sIEdGUF9LRVJORUwpOwogCWlmICgha2V5KQpAQCAtMjkyLDYgKzMyMywxMCBAQAogCQlrZXktPmNvbmYuaXZfbGVuID0gQ0NNUF9IRFJfTEVOOwogCQlrZXktPmNvbmYuaWN2X2xlbiA9IENDTVBfTUlDX0xFTjsKIAkJYnJlYWs7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCWtleS0+Y29uZi5pdl9sZW4gPSAwOworCQlrZXktPmNvbmYuaWN2X2xlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21taWUpOworCQlicmVhazsKIAl9CiAJbWVtY3B5KGtleS0+Y29uZi5rZXksIGtleV9kYXRhLCBrZXlfbGVuKTsKIAlJTklUX0xJU1RfSEVBRCgma2V5LT5saXN0KTsKQEAgLTMwOSw2ICszNDQsMTkgQEAKIAkJfQogCX0KIAorCWlmIChhbGcgPT0gQUxHX0FFU19DTUFDKSB7CisJCS8qCisJCSAqIEluaXRpYWxpemUgQUVTIGtleSBzdGF0ZSBoZXJlIGFzIGFuIG9wdGltaXphdGlvbiBzbyB0aGF0CisJCSAqIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZm9yIGV2ZXJ5IHBhY2tldC4KKwkJICovCisJCWtleS0+dS5hZXNfY21hYy50Zm0gPQorCQkJaWVlZTgwMjExX2Flc19jbWFjX2tleV9zZXR1cChrZXlfZGF0YSk7CisJCWlmICgha2V5LT51LmFlc19jbWFjLnRmbSkgeworCQkJa2ZyZWUoa2V5KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCiAJcmV0dXJuIGtleTsKIH0KIApAQCAtMzUyLDcgKzQwMCw3IEBACiAJCQkgKi8KIAogCQkJLyogc2FtZSBoZXJlLCB0aGUgQVAgY291bGQgYmUgdXNpbmcgUW9TICovCi0JCQlhcCA9IHN0YV9pbmZvX2dldChrZXktPmxvY2FsLCBrZXktPnNkYXRhLT51LnN0YS5ic3NpZCk7CisJCQlhcCA9IHN0YV9pbmZvX2dldChrZXktPmxvY2FsLCBrZXktPnNkYXRhLT51Lm1nZC5ic3NpZCk7CiAJCQlpZiAoYXApIHsKIAkJCQlpZiAodGVzdF9zdGFfZmxhZ3MoYXAsIFdMQU5fU1RBX1dNRSkpCiAJCQkJCWtleS0+Y29uZi5mbGFncyB8PQpAQCAtNDYyLDYgKzUxMCw4IEBACiAKIAlpZiAoa2V5LT5jb25mLmFsZyA9PSBBTEdfQ0NNUCkKIAkJaWVlZTgwMjExX2Flc19rZXlfZnJlZShrZXktPnUuY2NtcC50Zm0pOworCWlmIChrZXktPmNvbmYuYWxnID09IEFMR19BRVNfQ01BQykKKwkJaWVlZTgwMjExX2Flc19jbWFjX2tleV9mcmVlKGtleS0+dS5hZXNfY21hYy50Zm0pOwogCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmUoa2V5KTsKIAogCWtmcmVlKGtleSk7CkBAIC00ODQsNiArNTM0LDcgQEAKIAkJbGlzdF9kZWxfaW5pdCgma2V5LT50b2RvKTsKIAkJdG9kb2ZsYWdzID0ga2V5LT5mbGFncyAmIChLRVlfRkxBR19UT0RPX0FERF9ERUJVR0ZTIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0RFRktFWSB8CisJCQkJCSAgS0VZX0ZMQUdfVE9ET19ERUZNR01US0VZIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0hXQUNDRUxfQUREIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0hXQUNDRUxfUkVNT1ZFIHwKIAkJCQkJICBLRVlfRkxBR19UT0RPX0RFTEVURSk7CkBAIC01MDEsNiArNTUyLDExIEBACiAJCQlpZWVlODAyMTFfZGVidWdmc19rZXlfYWRkX2RlZmF1bHQoa2V5LT5zZGF0YSk7CiAJCQl3b3JrX2RvbmUgPSB0cnVlOwogCQl9CisJCWlmICh0b2RvZmxhZ3MgJiBLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVkpIHsKKwkJCWllZWU4MDIxMV9kZWJ1Z2ZzX2tleV9yZW1vdmVfbWdtdF9kZWZhdWx0KGtleS0+c2RhdGEpOworCQkJaWVlZTgwMjExX2RlYnVnZnNfa2V5X2FkZF9tZ210X2RlZmF1bHQoa2V5LT5zZGF0YSk7CisJCQl3b3JrX2RvbmUgPSB0cnVlOworCQl9CiAJCWlmICh0b2RvZmxhZ3MgJiBLRVlfRkxBR19UT0RPX0hXQUNDRUxfQUREKSB7CiAJCQlpZWVlODAyMTFfa2V5X2VuYWJsZV9od19hY2NlbChrZXkpOwogCQkJd29ya19kb25lID0gdHJ1ZTsKQEAgLTUzNiw2ICs1OTIsNyBAQAogCWllZWU4MDIxMV9rZXlfbG9jaygpOwogCiAJaWVlZTgwMjExX2RlYnVnZnNfa2V5X3JlbW92ZV9kZWZhdWx0KHNkYXRhKTsKKwlpZWVlODAyMTFfZGVidWdmc19rZXlfcmVtb3ZlX21nbXRfZGVmYXVsdChzZGF0YSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShrZXksIHRtcCwgJnNkYXRhLT5rZXlfbGlzdCwgbGlzdCkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaAppbmRleCA0MjU4MTZlLi4yMTVkM2VmIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmgKKysrIGIvbmV0L21hYzgwMjExL2tleS5oCkBAIC00Niw2ICs0Niw4IEBACiAgKglhY2NlbGVyYXRpb24uCiAgKiBAS0VZX0ZMQUdfVE9ET19ERUZLRVk6IEtleSBpcyBkZWZhdWx0IGtleSBhbmQgZGVidWdmcyBuZWVkcyB0byBiZSB1cGRhdGVkLgogICogQEtFWV9GTEFHX1RPRE9fQUREX0RFQlVHRlM6IEtleSBuZWVkcyB0byBiZSBhZGRlZCB0byBkZWJ1Z2ZzLgorICogQEtFWV9GTEFHX1RPRE9fREVGTUdNVEtFWTogS2V5IGlzIGRlZmF1bHQgbWFuYWdlbWVudCBrZXkgYW5kIGRlYnVnZnMgbmVlZHMKKyAqCXRvIGJlIHVwZGF0ZWQuCiAgKi8KIGVudW0gaWVlZTgwMjExX2ludGVybmFsX2tleV9mbGFncyB7CiAJS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUJPSBCSVQoMCksCkBAIC01NCw2ICs1Niw3IEBACiAJS0VZX0ZMQUdfVE9ET19IV0FDQ0VMX1JFTU9WRQk9IEJJVCgzKSwKIAlLRVlfRkxBR19UT0RPX0RFRktFWQkJPSBCSVQoNCksCiAJS0VZX0ZMQUdfVE9ET19BRERfREVCVUdGUwk9IEJJVCg1KSwKKwlLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVkJPSBCSVQoNiksCiB9OwogCiBzdHJ1Y3QgdGtpcF9jdHggewpAQCAtOTYsNiArOTksMTYgQEAKIAkJCXU4IHR4X2NyeXB0b19idWZbNiAqIEFFU19CTE9DS19MRU5dOwogCQkJdTggcnhfY3J5cHRvX2J1Zls2ICogQUVTX0JMT0NLX0xFTl07CiAJCX0gY2NtcDsKKwkJc3RydWN0IHsKKwkJCXU4IHR4X3BuWzZdOworCQkJdTggcnhfcG5bNl07CisJCQlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtOworCQkJdTMyIHJlcGxheXM7IC8qIGRvdDExUlNOQVN0YXRzQ01BQ1JlcGxheXMgKi8KKwkJCXUzMiBpY3ZlcnJvcnM7IC8qIGRvdDExUlNOQVN0YXRzQ01BQ0lDVkVycm9ycyAqLworCQkJLyogc2NyYXRjaCBidWZmZXJzIGZvciB2aXJ0X3RvX3BhZ2UoKSAoY3J5cHRvIEFQSSkgKi8KKwkJCXU4IHR4X2NyeXB0b19idWZbMiAqIEFFU19CTE9DS19MRU5dOworCQkJdTggcnhfY3J5cHRvX2J1ZlsyICogQUVTX0JMT0NLX0xFTl07CisJCX0gYWVzX2NtYWM7CiAJfSB1OwogCiAJLyogbnVtYmVyIG9mIHRpbWVzIHRoaXMga2V5IGhhcyBiZWVuIHVzZWQgKi8KQEAgLTExNCw2ICsxMjcsNyBAQAogCQlzdHJ1Y3QgZGVudHJ5ICp0eF9zcGVjOwogCQlzdHJ1Y3QgZGVudHJ5ICpyeF9zcGVjOwogCQlzdHJ1Y3QgZGVudHJ5ICpyZXBsYXlzOworCQlzdHJ1Y3QgZGVudHJ5ICppY3ZlcnJvcnM7CiAJCXN0cnVjdCBkZW50cnkgKmtleTsKIAkJc3RydWN0IGRlbnRyeSAqaWZpbmRleDsKIAkJaW50IGNudDsKQEAgLTE0MCw2ICsxNTQsOCBAQAogCQkJc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBpZWVlODAyMTFfa2V5X2ZyZWUoc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSk7CiB2b2lkIGllZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGludCBpZHgpOwordm9pZCBpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgIGludCBpZHgpOwogdm9pZCBpZWVlODAyMTFfZnJlZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2VuYWJsZV9rZXlzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIHZvaWQgaWVlZTgwMjExX2Rpc2FibGVfa2V5cyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYwppbmRleCAyNGIxNDM2Li5hNmYxZDhhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTE2MSwzMCArMTYxLDY3IEBACiAJaWYgKFdBUk5fT04oIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpKQogCQlyZXR1cm4gMDsKIAotCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIWxvY2FsLT5vcHMtPmNvbmZpZ19pbnRlcmZhY2UpCi0JCXJldHVybiAwOwotCiAJbWVtc2V0KCZjb25mLCAwLCBzaXplb2YoY29uZikpOwotCWNvbmYuY2hhbmdlZCA9IGNoYW5nZWQ7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQljb25mLmJzc2lkID0gc2RhdGEtPnUuc3RhLmJzc2lkOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJY29uZi5ic3NpZCA9IHNkYXRhLT51Lm1nZC5ic3NpZDsKKwllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCWNvbmYuYnNzaWQgPSBzZGF0YS0+dS5pYnNzLmJzc2lkOwogCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKIAkJY29uZi5ic3NpZCA9IHNkYXRhLT5kZXYtPmRldl9hZGRyOwogCWVsc2UgaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKLQkJdTggemVyb1tFVEhfQUxFTl0gPSB7IDAgfTsKKwkJc3RhdGljIGNvbnN0IHU4IHplcm9bRVRIX0FMRU5dID0geyAwIH07CiAJCWNvbmYuYnNzaWQgPSB6ZXJvOwogCX0gZWxzZSB7CiAJCVdBUk5fT04oMSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChXQVJOX09OKCFjb25mLmJzc2lkICYmIChjaGFuZ2VkICYgSUVFRTgwMjExX0lGQ0NfQlNTSUQpKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFsb2NhbC0+b3BzLT5jb25maWdfaW50ZXJmYWNlKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZG8gbm90IHdhcm4gdG8gc2ltcGxpZnkgY2FsbGVyIGluIHNjYW4uYyAqLworCQljaGFuZ2VkICY9IH5JRUVFODAyMTFfSUZDQ19CRUFDT05fRU5BQkxFRDsKKwkJaWYgKFdBUk5fT04oY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2hhbmdlZCAmPSB+SUVFRTgwMjExX0lGQ0NfQkVBQ09OOworCQlicmVhazsKKwl9CisKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKSB7CisJCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcpIHsKKwkJCWNvbmYuZW5hYmxlX2JlYWNvbiA9IGZhbHNlOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEJlYWNvbiBzaG91bGQgYmUgZW5hYmxlZCwgYnV0IEFQIG1vZGUgbXVzdAorCQkJICogY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIGJlYWNvbiBjb25maWd1cmVkLgorCQkJICovCisJCQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgeworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPQorCQkJCQkhIXJjdV9kZXJlZmVyZW5jZShzZGF0YS0+dS5hcC5iZWFjb24pOworCQkJCWJyZWFrOworCQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPSAhIXNkYXRhLT51Lmlic3MucHJvYmVfcmVzcDsKKwkJCQlicmVhazsKKwkJCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKKwkJCQljb25mLmVuYWJsZV9iZWFjb24gPSB0cnVlOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBub3QgcmVhY2hlZCAqLworCQkJCVdBUk5fT04oMSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwljb25mLmNoYW5nZWQgPSBjaGFuZ2VkOwogCiAJcmV0dXJuIGxvY2FsLT5vcHMtPmNvbmZpZ19pbnRlcmZhY2UobG9jYWxfdG9faHcobG9jYWwpLAogCQkJCQkgICAgJnNkYXRhLT52aWYsICZjb25mKTsKQEAgLTIwOCwyNiArMjQ1LDIyIEBACiAJfQogCiAJaWYgKGNoYW4gIT0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCB8fAotCSAgICBjaGFubmVsX3R5cGUgIT0gbG9jYWwtPmh3LmNvbmYuaHQuY2hhbm5lbF90eXBlKSB7CisJICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsX3R5cGUpIHsKIAkJbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCA9IGNoYW47Ci0JCWxvY2FsLT5ody5jb25mLmh0LmNoYW5uZWxfdHlwZSA9IGNoYW5uZWxfdHlwZTsKLQkJc3dpdGNoIChjaGFubmVsX3R5cGUpIHsKLQkJY2FzZSBOTDgwMjExX0NIQU5fTk9fSFQ6Ci0JCQlsb2NhbC0+aHcuY29uZi5odC5lbmFibGVkID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJY2FzZSBOTDgwMjExX0NIQU5fSFQyMDoKLQkJY2FzZSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTOgotCQljYXNlIE5MODAyMTFfQ0hBTl9IVDQwUExVUzoKLQkJCWxvY2FsLT5ody5jb25mLmh0LmVuYWJsZWQgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCX0KKwkJbG9jYWwtPmh3LmNvbmYuY2hhbm5lbF90eXBlID0gY2hhbm5lbF90eXBlOwogCQljaGFuZ2VkIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMOwogCX0KIAotCWlmICghbG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwpCisJaWYgKGxvY2FsLT5zd19zY2FubmluZykKIAkJcG93ZXIgPSBjaGFuLT5tYXhfcG93ZXI7CiAJZWxzZQotCQlwb3dlciA9IG1pbihjaGFuLT5tYXhfcG93ZXIsIGxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsKTsKKwkJcG93ZXIgPSBsb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsID8KKwkJCShjaGFuLT5tYXhfcG93ZXIgLSBsb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsKSA6CisJCQljaGFuLT5tYXhfcG93ZXI7CisKKwlpZiAobG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwpCisJCXBvd2VyID0gbWluKHBvd2VyLCBsb2NhbC0+dXNlcl9wb3dlcl9sZXZlbCk7CisKIAlpZiAobG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgIT0gcG93ZXIpIHsKIAkJY2hhbmdlZCB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVI7CiAJCWxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsID0gcG93ZXI7CkBAIC02NjcsNyArNzAwLDcgQEAKIAkJCQkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKLQlpbnQgcHJpdl9zaXplOworCWludCBwcml2X3NpemUsIGk7CiAJc3RydWN0IHdpcGh5ICp3aXBoeTsKIAogCS8qIEVuc3VyZSAzMi1ieXRlIGFsaWdubWVudCBvZiBvdXIgcHJpdmF0ZSBkYXRhIGFuZCBodyBwcml2YXRlIGRhdGEuCkBAIC02OTUsNiArNzI4LDEwIEBACiAJCXJldHVybiBOVUxMOwogCiAJd2lwaHktPnByaXZpZCA9IG1hYzgwMjExX3dpcGh5X3ByaXZpZDsKKwl3aXBoeS0+bWF4X3NjYW5fc3NpZHMgPSA0OworCS8qIFllcywgcHV0dGluZyBjZmc4MDIxMV9ic3MgaW50byBpZWVlODAyMTFfYnNzIGlzIGEgaGFjayAqLworCXdpcGh5LT5ic3NfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzKSAtCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBjZmc4MDIxMV9ic3MpOwogCiAJbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKIAlsb2NhbC0+aHcud2lwaHkgPSB3aXBoeTsKQEAgLTcyMiw2ICs3NTksNyBAQAogCWxvY2FsLT5ody5jb25mLnJhZGlvX2VuYWJsZWQgPSB0cnVlOwogCiAJSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5pbnRlcmZhY2VzKTsKKwltdXRleF9pbml0KCZsb2NhbC0+aWZsaXN0X210eCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmbG9jYWwtPmtleV9sb2NrKTsKIApAQCAtNzM4LDYgKzc3Niw4IEBACiAKIAlzdGFfaW5mb19pbml0KGxvY2FsKTsKIAorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTUFYX1FVRVVFUzsgaSsrKQorCQlza2JfcXVldWVfaGVhZF9pbml0KCZsb2NhbC0+cGVuZGluZ1tpXSk7CiAJdGFza2xldF9pbml0KCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0LCBpZWVlODAyMTFfdHhfcGVuZGluZywKIAkJICAgICAodW5zaWduZWQgbG9uZylsb2NhbCk7CiAJdGFza2xldF9kaXNhYmxlKCZsb2NhbC0+dHhfcGVuZGluZ190YXNrbGV0KTsKQEAgLTc1MCwxMCArNzkwLDI5IEBACiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnNrYl9xdWV1ZSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbG9jYWwtPnNrYl9xdWV1ZV91bnJlbGlhYmxlKTsKIAorCXNwaW5fbG9ja19pbml0KCZsb2NhbC0+YW1wZHVfbG9jayk7CisKIAlyZXR1cm4gbG9jYWxfdG9faHcobG9jYWwpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYWxsb2NfaHcpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tYXN0ZXJfb3BzID0geworCS5uZG9fc3RhcnRfeG1pdCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RhcnRfeG1pdCwKKwkubmRvX29wZW4gPSBpZWVlODAyMTFfbWFzdGVyX29wZW4sCisJLm5kb19zdG9wID0gaWVlZTgwMjExX21hc3Rlcl9zdG9wLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gaWVlZTgwMjExX21hc3Rlcl9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zZWxlY3RfcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlLAorfTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX21hc3Rlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbWRldikKK3sKKwltZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKKwltZGV2LT5uZXRkZXZfb3BzID0gJmllZWU4MDIxMV9tYXN0ZXJfb3BzOworCW1kZXYtPmhlYWRlcl9vcHMgPSAmaWVlZTgwMjExX2hlYWRlcl9vcHM7CisJbWRldi0+dHhfcXVldWVfbGVuID0gMTAwMDsKKwltZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOworfQorCiBpbnQgaWVlZTgwMjExX3JlZ2lzdGVyX2h3KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwpAQCAtNzYxLDI1ICs4MjAsMzMgQEAKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm1kZXY7CiAJc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiAqbXByaXY7CisJaW50IGNoYW5uZWxzLCBpLCBqOwogCiAJLyoKIAkgKiBnZW5lcmljIGNvZGUgZ3VhcmFudGVlcyBhdCBsZWFzdCBvbmUgYmFuZCwKIAkgKiBzZXQgdGhpcyB2ZXJ5IGVhcmx5IGJlY2F1c2UgbXVjaCBjb2RlIGFzc3VtZXMKIAkgKiB0aGF0IGh3LmNvbmYuY2hhbm5lbCBpcyBhc3NpZ25lZAogCSAqLworCWNoYW5uZWxzID0gMDsKIAlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCiAJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKLQkJaWYgKHNiYW5kKSB7CisJCWlmIChzYmFuZCAmJiAhbG9jYWwtPm9wZXJfY2hhbm5lbCkgewogCQkJLyogaW5pdCBjaGFubmVsIHdlJ3JlIG9uICovCiAJCQlsb2NhbC0+aHcuY29uZi5jaGFubmVsID0KIAkJCWxvY2FsLT5vcGVyX2NoYW5uZWwgPQogCQkJbG9jYWwtPnNjYW5fY2hhbm5lbCA9ICZzYmFuZC0+Y2hhbm5lbHNbMF07Ci0JCQlicmVhazsKIAkJfQorCQlpZiAoc2JhbmQpCisJCQljaGFubmVscyArPSBzYmFuZC0+bl9jaGFubmVsczsKIAl9CiAKKwlsb2NhbC0+aW50X3NjYW5fcmVxLm5fY2hhbm5lbHMgPSBjaGFubmVsczsKKwlsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzID0ga3phbGxvYyhzaXplb2Yodm9pZCAqKSAqIGNoYW5uZWxzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxvY2FsLT5pbnRfc2Nhbl9yZXEuY2hhbm5lbHMpCisJCXJldHVybiAtRU5PTUVNOworCiAJLyogaWYgbG93LWxldmVsIGRyaXZlciBzdXBwb3J0cyBBUCwgd2UgYWxzbyBzdXBwb3J0IFZMQU4gKi8KIAlpZiAobG9jYWwtPmh3LndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgJiBCSVQoTkw4MDIxMV9JRlRZUEVfQVApKQogCQlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfQVBfVkxBTik7CkBAIC03ODcsOSArODU0LDE0IEBACiAJLyogbWFjODAyMTEgYWx3YXlzIHN1cHBvcnRzIG1vbml0b3IgKi8KIAlsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfTU9OSVRPUik7CiAKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCisJCWxvY2FsLT5ody53aXBoeS0+c2lnbmFsX3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk07CisJZWxzZSBpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpCisJCWxvY2FsLT5ody53aXBoeS0+c2lnbmFsX3R5cGUgPSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM7CisKIAlyZXN1bHQgPSB3aXBoeV9yZWdpc3Rlcihsb2NhbC0+aHcud2lwaHkpOwogCWlmIChyZXN1bHQgPCAwKQotCQlyZXR1cm4gcmVzdWx0OworCQlnb3RvIGZhaWxfd2lwaHlfcmVnaXN0ZXI7CiAKIAkvKgogCSAqIFdlIHVzZSB0aGUgbnVtYmVyIG9mIHF1ZXVlcyBmb3IgZmVhdHVyZSB0ZXN0cyAoUW9TLCBIVCkgaW50ZXJuYWxseQpAQCAtNzk3LDE0ICs4NjksMTAgQEAKIAkgKi8KIAlpZiAoaHctPnF1ZXVlcyA+IElFRUU4MDIxMV9NQVhfUVVFVUVTKQogCQlody0+cXVldWVzID0gSUVFRTgwMjExX01BWF9RVUVVRVM7Ci0JaWYgKGh3LT5hbXBkdV9xdWV1ZXMgPiBJRUVFODAyMTFfTUFYX0FNUERVX1FVRVVFUykKLQkJaHctPmFtcGR1X3F1ZXVlcyA9IElFRUU4MDIxMV9NQVhfQU1QRFVfUVVFVUVTOwotCWlmIChody0+cXVldWVzIDwgNCkKLQkJaHctPmFtcGR1X3F1ZXVlcyA9IDA7CiAKIAltZGV2ID0gYWxsb2NfbmV0ZGV2X21xKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21hc3Rlcl9wcml2KSwKLQkJCSAgICAgICAid21hc3RlciVkIiwgZXRoZXJfc2V0dXAsCi0JCQkgICAgICAgaWVlZTgwMjExX251bV9xdWV1ZXMoaHcpKTsKKwkJCSAgICAgICAid21hc3RlciVkIiwgaWVlZTgwMjExX21hc3Rlcl9zZXR1cCwKKwkJCSAgICAgICBody0+cXVldWVzKTsKIAlpZiAoIW1kZXYpCiAJCWdvdG8gZmFpbF9tZGV2X2FsbG9jOwogCkBAIC04MTIsMTcgKzg4MCw4IEBACiAJbXByaXYtPmxvY2FsID0gbG9jYWw7CiAJbG9jYWwtPm1kZXYgPSBtZGV2OwogCi0JaWVlZTgwMjExX3J4X2Jzc19saXN0X2luaXQobG9jYWwpOwotCi0JbWRldi0+aGFyZF9zdGFydF94bWl0ID0gaWVlZTgwMjExX21hc3Rlcl9zdGFydF94bWl0OwotCW1kZXYtPm9wZW4gPSBpZWVlODAyMTFfbWFzdGVyX29wZW47Ci0JbWRldi0+c3RvcCA9IGllZWU4MDIxMV9tYXN0ZXJfc3RvcDsKLQltZGV2LT50eXBlID0gQVJQSFJEX0lFRUU4MDIxMTsKLQltZGV2LT5oZWFkZXJfb3BzID0gJmllZWU4MDIxMV9oZWFkZXJfb3BzOwotCW1kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGllZWU4MDIxMV9tYXN0ZXJfc2V0X211bHRpY2FzdF9saXN0OwotCiAJbG9jYWwtPmh3LndvcmtxdWV1ZSA9Ci0JCWNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSh3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOworCQljcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSh3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSkpOwogCWlmICghbG9jYWwtPmh3LndvcmtxdWV1ZSkgewogCQlyZXN1bHQgPSAtRU5PTUVNOwogCQlnb3RvIGZhaWxfd29ya3F1ZXVlOwpAQCAtODQ2LDE1ICs5MDUsNiBAQAogCiAJbG9jYWwtPmh3LmNvbmYubGlzdGVuX2ludGVydmFsID0gbG9jYWwtPmh3Lm1heF9saXN0ZW5faW50ZXJ2YWw7CiAKLQlsb2NhbC0+d3N0YXRzX2ZsYWdzIHw9IGxvY2FsLT5ody5mbGFncyAmIChJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQyB8Ci0JCQkJCQkgIElFRUU4MDIxMV9IV19TSUdOQUxfREIgfAotCQkJCQkJICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkgPwotCQkJICAgICAgIElXX1FVQUxfUVVBTF9VUERBVEVEIDogSVdfUVVBTF9RVUFMX0lOVkFMSUQ7Ci0JbG9jYWwtPndzdGF0c19mbGFncyB8PSBsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNID8KLQkJCSAgICAgICBJV19RVUFMX05PSVNFX1VQREFURUQgOiBJV19RVUFMX05PSVNFX0lOVkFMSUQ7Ci0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKQotCQlsb2NhbC0+d3N0YXRzX2ZsYWdzIHw9IElXX1FVQUxfREJNOwotCiAJcmVzdWx0ID0gc3RhX2luZm9fc3RhcnQobG9jYWwpOwogCWlmIChyZXN1bHQgPCAwKQogCQlnb3RvIGZhaWxfc3RhX2luZm87CkBAIC04NjYsNiArOTE2LDcgQEAKIAogCW1lbWNweShsb2NhbC0+bWRldi0+ZGV2X2FkZHIsIGxvY2FsLT5ody53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTik7CiAJU0VUX05FVERFVl9ERVYobG9jYWwtPm1kZXYsIHdpcGh5X2Rldihsb2NhbC0+aHcud2lwaHkpKTsKKwlsb2NhbC0+bWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ORVROU19MT0NBTDsKIAogCXJlc3VsdCA9IHJlZ2lzdGVyX25ldGRldmljZShsb2NhbC0+bWRldik7CiAJaWYgKHJlc3VsdCA8IDApCkBAIC04ODcsOCArOTM4LDYgQEAKIAkJZ290byBmYWlsX3dlcDsKIAl9CiAKLQlsb2NhbC0+bWRldi0+c2VsZWN0X3F1ZXVlID0gaWVlZTgwMjExX3NlbGVjdF9xdWV1ZTsKLQogCS8qIGFkZCBvbmUgZGVmYXVsdCBTVEEgaW50ZXJmYWNlIGlmIHN1cHBvcnRlZCAqLwogCWlmIChsb2NhbC0+aHcud2lwaHktPmludGVyZmFjZV9tb2RlcyAmIEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkgewogCQlyZXN1bHQgPSBpZWVlODAyMTFfaWZfYWRkKGxvY2FsLCAid2xhbiVkIiwgTlVMTCwKQEAgLTkwMiw2ICs5NTEsMjAgQEAKIAogCWllZWU4MDIxMV9sZWRfaW5pdChsb2NhbCk7CiAKKwkvKiBhbGxvYyBpbnRlcm5hbCBzY2FuIHJlcXVlc3QgKi8KKwlpID0gMDsKKwlsb2NhbC0+aW50X3NjYW5fcmVxLnNzaWRzID0gJmxvY2FsLT5zY2FuX3NzaWQ7CisJbG9jYWwtPmludF9zY2FuX3JlcS5uX3NzaWRzID0gMTsKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCWlmICghaHctPndpcGh5LT5iYW5kc1tiYW5kXSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgaHctPndpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsgaisrKSB7CisJCQlsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzW2ldID0KKwkJCQkmaHctPndpcGh5LT5iYW5kc1tiYW5kXS0+Y2hhbm5lbHNbal07CisJCQlpKys7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIAogZmFpbF93ZXA6CkBAIC05MjAsNiArOTgzLDggQEAKIAkJZnJlZV9uZXRkZXYobG9jYWwtPm1kZXYpOwogZmFpbF9tZGV2X2FsbG9jOgogCXdpcGh5X3VucmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKK2ZhaWxfd2lwaHlfcmVnaXN0ZXI6CisJa2ZyZWUobG9jYWwtPmludF9zY2FuX3JlcS5jaGFubmVscyk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3JlZ2lzdGVyX2h3KTsKQEAgLTk0Nyw3ICsxMDEyLDYgQEAKIAogCXJ0bmxfdW5sb2NrKCk7CiAKLQlpZWVlODAyMTFfcnhfYnNzX2xpc3RfZGVpbml0KGxvY2FsKTsKIAlpZWVlODAyMTFfY2xlYXJfdHhfcGVuZGluZyhsb2NhbCk7CiAJc3RhX2luZm9fc3RvcChsb2NhbCk7CiAJcmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShsb2NhbCk7CkBAIC05NjUsNiArMTAyOSw3IEBACiAJaWVlZTgwMjExX3dlcF9mcmVlKGxvY2FsKTsKIAlpZWVlODAyMTFfbGVkX2V4aXQobG9jYWwpOwogCWZyZWVfbmV0ZGV2KGxvY2FsLT5tZGV2KTsKKwlrZnJlZShsb2NhbC0+aW50X3NjYW5fcmVxLmNoYW5uZWxzKTsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcpOwogCkBAIC05NzIsNiArMTAzNyw4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAKKwltdXRleF9kZXN0cm95KCZsb2NhbC0+aWZsaXN0X210eCk7CisKIAl3aXBoeV9mcmVlKGxvY2FsLT5ody53aXBoeSk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9mcmVlX2h3KTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmMgYi9uZXQvbWFjODAyMTEvbWVzaC5jCmluZGV4IDgyZjU2OGUuLjlhM2U1ZGUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2guYwpAQCAtMjc1LDE2ICsyNzUsNiBAQAogCQkmIHRibC0+aGFzaF9tYXNrOwogfQogCi11OCBtZXNoX2lkX2hhc2godTggKm1lc2hfaWQsIGludCBtZXNoX2lkX2xlbikKLXsKLQlpZiAoIW1lc2hfaWRfbGVuKQotCQlyZXR1cm4gMTsKLQllbHNlIGlmIChtZXNoX2lkX2xlbiA9PSAxKQotCQlyZXR1cm4gKHU4KSBtZXNoX2lkWzBdOwotCWVsc2UKLQkJcmV0dXJuICh1OCkgKG1lc2hfaWRbMF0gKyAyICogbWVzaF9pZFsxXSk7Ci19Ci0KIHN0cnVjdCBtZXNoX3RhYmxlICptZXNoX3RhYmxlX2FsbG9jKGludCBzaXplX29yZGVyKQogewogCWludCBpOwpAQCAtNDQyLDcgKzQzMiw4IEBACiAKIAlpZm1zaC0+aG91c2VrZWVwaW5nID0gdHJ1ZTsKIAlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1zaC0+d29yayk7Ci0JaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKTsKKwlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CRUFDT04gfAorCQkJCSAgIElFRUU4MDIxMV9JRkNDX0JFQUNPTl9FTkFCTEVEKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfc3RvcF9tZXNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtNDc2LDcgKzQ2Nyw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwotCXU2NCBzdXBwX3JhdGVzID0gMDsKKwl1MzIgc3VwcF9yYXRlcyA9IDA7CiAJc2l6ZV90IGJhc2VsZW47CiAJaW50IGZyZXE7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gcnhfc3RhdHVzLT5iYW5kOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2guaCBiL25ldC9tYWM4MDIxMS9tZXNoLmgKaW5kZXggYzE5N2FiNS4uZDg5MWQ3ZCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2guaAorKysgYi9uZXQvbWFjODAyMTEvbWVzaC5oCkBAIC0yNCwxNSArMjQsMTUgQEAKICAqCiAgKgogICoKLSAqIEBNRVNIX1BBVEhfQUNUSVZFOiB0aGUgbWVzaCBwYXRoIGlzIGNhbiBiZSB1c2VkIGZvciBmb3J3YXJkaW5nCi0gKiBATUVTSF9QQVRIX1JFU09MVkVEOiB0aGUgZGlzY292ZXJ5IHByb2Nlc3MgaXMgcnVubmluZyBmb3IgdGhpcyBtZXNoIHBhdGgKKyAqIEBNRVNIX1BBVEhfQUNUSVZFOiB0aGUgbWVzaCBwYXRoIGNhbiBiZSB1c2VkIGZvciBmb3J3YXJkaW5nCisgKiBATUVTSF9QQVRIX1JFU09MVklORzogdGhlIGRpc2NvdmVyeSBwcm9jZXNzIGlzIHJ1bm5pbmcgZm9yIHRoaXMgbWVzaCBwYXRoCiAgKiBATUVTSF9QQVRIX0RTTl9WQUxJRDogdGhlIG1lc2ggcGF0aCBjb250YWlucyBhIHZhbGlkIGRlc3RpbmF0aW9uIHNlcXVlbmNlCiAgKiAJbnVtYmVyCiAgKiBATUVTSF9QQVRIX0ZJWEVEOiB0aGUgbWVzaCBwYXRoIGhhcyBiZWVuIG1hbnVhbGx5IHNldCBhbmQgc2hvdWxkIG5vdCBiZQogICogCW1vZGlmaWVkCiAgKiBATUVTSF9QQVRIX1JFU09MVkVEOiB0aGUgbWVzaCBwYXRoIGNhbiBoYXMgYmVlbiByZXNvbHZlZAogICoKLSAqIE1FU0hfUEFUSF9SRVNPTFZFRCBhbmQgTUVTSF9QQVRIX0RFTEVURSBhcmUgdXNlZCBieSB0aGUgbWVzaCBwYXRoIHRpbWVyIHRvCisgKiBNRVNIX1BBVEhfUkVTT0xWRUQgaXMgdXNlZCBieSB0aGUgbWVzaCBwYXRoIHRpbWVyIHRvCiAgKiBkZWNpZGUgd2hlbiB0byBzdG9wIG9yIGNhbmNlbCB0aGUgbWVzaCBwYXRoIGRpc2NvdmVyeS4KICAqLwogZW51bSBtZXNoX3BhdGhfZmxhZ3MgewpAQCAtMTk2LDcgKzE5Niw2IEBACiAKIC8qIFB1YmxpYyBpbnRlcmZhY2VzICovCiAvKiBWYXJpb3VzICovCi11OCBtZXNoX2lkX2hhc2godTggKm1lc2hfaWQsIGludCBtZXNoX2lkX2xlbik7CiBpbnQgaWVlZTgwMjExX2dldF9tZXNoX2hkcmxlbihzdHJ1Y3QgaWVlZTgwMjExc19oZHIgKm1lc2hoZHIpOwogaW50IGllZWU4MDIxMV9uZXdfbWVzaF9oZWFkZXIoc3RydWN0IGllZWU4MDIxMXNfaGRyICptZXNoaGRyLAogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CkBAIC0yMzYsMTQgKzIzNSwxMyBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4pOwogaW50IG1lc2hfcGF0aF9hZGQodTggKmRzdCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogLyogTWVzaCBwbGlua3MgKi8KLXZvaWQgbWVzaF9uZWlnaGJvdXJfdXBkYXRlKHU4ICpod19hZGRyLCB1NjQgcmF0ZXMsCit2b2lkIG1lc2hfbmVpZ2hib3VyX3VwZGF0ZSh1OCAqaHdfYWRkciwgdTMyIHJhdGVzLAogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBhZGQpOwogYm9vbCBtZXNoX3BlZXJfYWNjZXB0c19wbGlua3Moc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmllKTsKIHZvaWQgbWVzaF9hY2NlcHRfcGxpbmtzX3VwZGF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIG1lc2hfcGxpbmtfYnJva2VuKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgbWVzaF9wbGlua19kZWFjdGl2YXRlKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIGludCBtZXNoX3BsaW5rX29wZW4oc3RydWN0IHN0YV9pbmZvICpzdGEpOwotaW50IG1lc2hfcGxpbmtfY2xvc2Uoc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBtZXNoX3BsaW5rX2Jsb2NrKHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIHZvaWQgbWVzaF9yeF9wbGlua19mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCSBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKaW5kZXggNzFmZTYwOS4uNjBiMzVhYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwpAQCAtNTgsNyArNTgsNiBAQAogI2RlZmluZSBQRVJSX0lFX0RTVF9BRERSKHgpCSh4ICsgMikKICNkZWZpbmUgUEVSUl9JRV9EU1RfRFNOKHgpCXUzMl9maWVsZF9nZXQoeCwgOCwgMCk7CiAKLSNkZWZpbmUgVFVfVE9fRVhQX1RJTUUoeCkgKGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHggKiAxMDI0IC8gMTAwMCkpCiAjZGVmaW5lIE1TRUNfVE9fVFUoeCkgKHgqMTAwMC8xMDI0KQogI2RlZmluZSBEU05fR1QoeCwgeSkgKChsb25nKSAoeSkgLSAobG9uZykgKHgpIDwgMCkKICNkZWZpbmUgRFNOX0xUKHgsIHkpICgobG9uZykgKHgpIC0gKGxvbmcpICh5KSA8IDApCkBAIC0xNDksNyArMTQ4LDcgQEAKIAlwb3MgKz0gRVRIX0FMRU47CiAJbWVtY3B5KHBvcywgJmRzdF9kc24sIDQpOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTgsNyArMTk3LDcgQEAKIAlwb3MgKz0gRVRIX0FMRU47CiAJbWVtY3B5KHBvcywgJmRzdF9kc24sIDQpOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDEpOwogCXJldHVybiAwOwogfQogCkBAIC03NTksNyArNzU4LDcgQEAKIH0KIAogLyoqCi0gKiBpZWVlODAyMTFzX2xvb2t1cF9uZXh0aG9wIC0gcHV0IHRoZSBhcHByb3ByaWF0ZSBuZXh0IGhvcCBvbiBhIG1lc2ggZnJhbWUKKyAqIG1lc2hfbmV4dGhvcF9sb29rdXAgLSBwdXQgdGhlIGFwcHJvcHJpYXRlIG5leHQgaG9wIG9uIGEgbWVzaCBmcmFtZQogICoKICAqIEBza2I6IDgwMi4xMSBmcmFtZSB0byBiZSBzZW50CiAgKiBAc2RhdGE6IG5ldHdvcmsgc3ViaWYgdGhlIGZyYW1lIHdpbGwgYmUgc2VudCB0aHJvdWdoCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jIGIvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYwppbmRleCAxMTU5YmRiLi5hOGJiZGVjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKQEAgLTkzLDcgKzkzLDcgQEAKICAqICAgICAgIG9uIGl0IGluIHRoZSBsaWZlY3ljbGUgbWFuYWdlbWVudCBzZWN0aW9uIQogICovCiBzdGF0aWMgc3RydWN0IHN0YV9pbmZvICptZXNoX3BsaW5rX2FsbG9jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgdTggKmh3X2FkZHIsIHU2NCByYXRlcykKKwkJCQkJIHU4ICpod19hZGRyLCB1MzIgcmF0ZXMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CkBAIC0yMTgsMTEgKzIxOCwxMSBAQAogCQltZW1jcHkocG9zLCAmcmVhc29uLCAyKTsKIAl9CiAKLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgbWVzaF9uZWlnaGJvdXJfdXBkYXRlKHU4ICpod19hZGRyLCB1NjQgcmF0ZXMsIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAordm9pZCBtZXNoX25laWdoYm91cl91cGRhdGUodTggKmh3X2FkZHIsIHUzMiByYXRlcywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICBib29sIHBlZXJfYWNjZXB0aW5nX3BsaW5rcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKQEAgLTM2MSwzNiArMzYxLDYgQEAKIAlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIH0KIAotaW50IG1lc2hfcGxpbmtfY2xvc2Uoc3RydWN0IHN0YV9pbmZvICpzdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwotCV9fbGUxNiBsbGlkLCBwbGlkLCByZWFzb247Ci0KLQltcGxfZGJnKCJNZXNoIHBsaW5rOiBjbG9zaW5nIGxpbmsgd2l0aCAlcE1cbiIsIHN0YS0+c3RhLmFkZHIpOwotCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQlzdGEtPnJlYXNvbiA9IGNwdV90b19sZTE2KE1FU0hfTElOS19DQU5DRUxMRUQpOwotCXJlYXNvbiA9IHN0YS0+cmVhc29uOwotCi0JaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfTElTVEVOIHx8Ci0JICAgIHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfQkxPQ0tFRCkgewotCQltZXNoX3BsaW5rX2ZzbV9yZXN0YXJ0KHN0YSk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKHN0YS0+cGxpbmtfc3RhdGUgPT0gUExJTktfRVNUQUIpIHsKLQkJX19tZXNoX3BsaW5rX2RlYWN0aXZhdGUoc3RhKTsKLQkJLyogVGhlIHRpbWVyIHNob3VsZCBub3QgYmUgcnVubmluZyAqLwotCQltb2RfcGxpbmtfdGltZXIoc3RhLCBkb3QxMU1lc2hIb2xkaW5nVGltZW91dChzZGF0YSkpOwotCX0gZWxzZSBpZiAoIW1vZF9wbGlua190aW1lcihzdGEsIGRvdDExTWVzaEhvbGRpbmdUaW1lb3V0KHNkYXRhKSkpCi0JCXN0YS0+aWdub3JlX3BsaW5rX3RpbWVyID0gdHJ1ZTsKLQotCXN0YS0+cGxpbmtfc3RhdGUgPSBQTElOS19IT0xESU5HOwotCWxsaWQgPSBzdGEtPmxsaWQ7Ci0JcGxpZCA9IHN0YS0+cGxpZDsKLQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKLQltZXNoX3BsaW5rX2ZyYW1lX3R4KHN0YS0+c2RhdGEsIFBMSU5LX0NMT1NFLCBzdGEtPnN0YS5hZGRyLCBsbGlkLAotCQkJICAgIHBsaWQsIHJlYXNvbik7Ci0JcmV0dXJuIDA7Ci19CiAKIHZvaWQgbWVzaF9yeF9wbGlua19mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJIHNpemVfdCBsZW4sIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCkBAIC00NzcsNyArNDQ3LDcgQEAKIAkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwogCX0gZWxzZSBpZiAoIXN0YSkgewogCQkvKiBmdHlwZSA9PSBQTElOS19PUEVOICovCi0JCXU2NCByYXRlczsKKwkJdTMyIHJhdGVzOwogCQlpZiAoIW1lc2hfcGxpbmtfZnJlZV9jb3VudChzZGF0YSkpIHsKIAkJCW1wbF9kYmcoIk1lc2ggcGxpbmsgZXJyb3I6IG5vIG1vcmUgZnJlZSBwbGlua3NcbiIpOwogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCAyYjg5MGFmLi43ZWNkYTlkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQlNTIGNsaWVudCBtb2RlIGltcGxlbWVudGF0aW9uCi0gKiBDb3B5cmlnaHQgMjAwMywgSm91bmkgTWFsaW5lbiA8amttYWxpbmVAY2MuaHV0LmZpPgorICogQ29weXJpZ2h0IDIwMDMtMjAwOCwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KICAqIENvcHlyaWdodCAyMDA0LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KICAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgpAQCAtMTUsMTEgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KLSNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIApAQCAtMzMsMTcgKzMwLDggQEAKICNkZWZpbmUgSUVFRTgwMjExX0FTU09DX1RJTUVPVVQgKEhaIC8gNSkKICNkZWZpbmUgSUVFRTgwMjExX0FTU09DX01BWF9UUklFUyAzCiAjZGVmaW5lIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMICgyICogSFopCi0jZGVmaW5lIElFRUU4MDIxMV9QUk9CRV9JTlRFUlZBTCAoNjAgKiBIWikKKyNkZWZpbmUgSUVFRTgwMjExX1BST0JFX0lETEVfVElNRSAoNjAgKiBIWikKICNkZWZpbmUgSUVFRTgwMjExX1JFVFJZX0FVVEhfSU5URVJWQUwgKDEgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUwgKDIgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVyAoMTUgKiBIWikKLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUICg3ICogSFopCi0KLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwgKDMwICogSFopCi0jZGVmaW5lIElFRUU4MDIxMV9JQlNTX0lOQUNUSVZJVFlfTElNSVQgKDYwICogSFopCi0KLSNkZWZpbmUgSUVFRTgwMjExX0lCU1NfTUFYX1NUQV9FTlRSSUVTIDEyOAotCiAKIC8qIHV0aWxzICovCiBzdGF0aWMgaW50IGVjdzJjdyhpbnQgZWN3KQpAQCAtNTUsMTAgKzQzLDEwIEBACiB7CiAJdTggKmVuZCwgKnBvczsKIAotCXBvcyA9IGJzcy0+aWVzOworCXBvcyA9IGJzcy0+Y2Jzcy5pbmZvcm1hdGlvbl9lbGVtZW50czsKIAlpZiAocG9zID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCWVuZCA9IHBvcyArIGJzcy0+aWVzX2xlbjsKKwllbmQgPSBwb3MgKyBic3MtPmNic3MubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOwogCiAJd2hpbGUgKHBvcyArIDEgPCBlbmQpIHsKIAkJaWYgKHBvcyArIDIgKyBwb3NbMV0gPiBlbmQpCkBAIC03Myw3ICs2MSw3IEBACiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCQkgICAgICB1NjQgKnJhdGVzKQorCQkJCSAgICAgIHUzMiAqcmF0ZXMpCiB7CiAJaW50IGksIGosIGNvdW50OwogCSpyYXRlcyA9IDA7CkBAIC05MiwxNDYgKzgwLDExIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi0vKiBhbHNvIHVzZWQgYnkgbWVzaCBjb2RlICovCi11NjQgaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAotCQkJICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKmJpdHJhdGVzOwotCXNpemVfdCBudW1fcmF0ZXM7Ci0JdTY0IHN1cHBfcmF0ZXM7Ci0JaW50IGksIGo7Ci0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2JhbmRdOwotCi0JaWYgKCFzYmFuZCkgewotCQlXQVJOX09OKDEpOwotCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0JfQotCi0JYml0cmF0ZXMgPSBzYmFuZC0+Yml0cmF0ZXM7Ci0JbnVtX3JhdGVzID0gc2JhbmQtPm5fYml0cmF0ZXM7Ci0Jc3VwcF9yYXRlcyA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGVsZW1zLT5zdXBwX3JhdGVzX2xlbiArCi0JCSAgICAgZWxlbXMtPmV4dF9zdXBwX3JhdGVzX2xlbjsgaSsrKSB7Ci0JCXU4IHJhdGUgPSAwOwotCQlpbnQgb3duX3JhdGU7Ci0JCWlmIChpIDwgZWxlbXMtPnN1cHBfcmF0ZXNfbGVuKQotCQkJcmF0ZSA9IGVsZW1zLT5zdXBwX3JhdGVzW2ldOwotCQllbHNlIGlmIChlbGVtcy0+ZXh0X3N1cHBfcmF0ZXMpCi0JCQlyYXRlID0gZWxlbXMtPmV4dF9zdXBwX3JhdGVzCi0JCQkJW2kgLSBlbGVtcy0+c3VwcF9yYXRlc19sZW5dOwotCQlvd25fcmF0ZSA9IDUgKiAocmF0ZSAmIDB4N2YpOwotCQlmb3IgKGogPSAwOyBqIDwgbnVtX3JhdGVzOyBqKyspCi0JCQlpZiAoYml0cmF0ZXNbal0uYml0cmF0ZSA9PSBvd25fcmF0ZSkKLQkJCQlzdXBwX3JhdGVzIHw9IEJJVChqKTsKLQl9Ci0JcmV0dXJuIHN1cHBfcmF0ZXM7Ci19Ci0KIC8qIGZyYW1lIHNlbmRpbmcgZnVuY3Rpb25zICovCiAKLS8qIGFsc28gdXNlZCBieSBzY2FubmluZyBjb2RlICovCi12b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKLQkJCSAgICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKLQl1OCAqcG9zLCAqc3VwcF9yYXRlcywgKmVzdXBwX3JhdGVzID0gTlVMTDsKLQlpbnQgaTsKLQotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCptZ210KSArIDIwMCk7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBwcm9iZSAiCi0JCSAgICAgICAicmVxdWVzdFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0Jc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCSAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCWlmIChkc3QpIHsKLQkJbWVtY3B5KG1nbXQtPmRhLCBkc3QsIEVUSF9BTEVOKTsKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBkc3QsIEVUSF9BTEVOKTsKLQl9IGVsc2UgewotCQltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKLQkJbWVtc2V0KG1nbXQtPmJzc2lkLCAweGZmLCBFVEhfQUxFTik7Ci0JfQotCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgc3NpZF9sZW4pOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gc3NpZF9sZW47Ci0JbWVtY3B5KHBvcywgc3NpZCwgc3NpZF9sZW4pOwotCi0Jc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAyKTsKLQlzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKLQlzdXBwX3JhdGVzWzFdID0gMDsKLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOwotCQlpZiAoZXN1cHBfcmF0ZXMpIHsKLQkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKLQkJCWVzdXBwX3JhdGVzWzFdKys7Ci0JCX0gZWxzZSBpZiAoc3VwcF9yYXRlc1sxXSA9PSA4KSB7Ci0JCQllc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAzKTsKLQkJCWVzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JCQllc3VwcF9yYXRlc1sxXSA9IDE7Ci0JCQlwb3MgPSAmZXN1cHBfcmF0ZXNbMl07Ci0JCX0gZWxzZSB7Ci0JCQlwb3MgPSBza2JfcHV0KHNrYiwgMSk7Ci0JCQlzdXBwX3JhdGVzWzFdKys7Ci0JCX0KLQkJKnBvcyA9IHJhdGUtPmJpdHJhdGUgLyA1OwotCX0KLQotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAotCQkJCWludCB0cmFuc2FjdGlvbiwgdTggKmV4dHJhLCBzaXplX3QgZXh0cmFfbGVuLAotCQkJCWludCBlbmNyeXB0KQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJICAgIHNpemVvZigqbWdtdCkgKyA2ICsgZXh0cmFfbGVuKTsKLQlpZiAoIXNrYikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGF1dGggIgotCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7Ci0KLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQgKyA2KTsKLQltZW1zZXQobWdtdCwgMCwgMjQgKyA2KTsKLQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BVVRIKTsKLQlpZiAoZW5jcnlwdCkKLQkJbWdtdC0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWdtdC0+dS5hdXRoLmF1dGhfYWxnID0gY3B1X3RvX2xlMTYoaWZzdGEtPmF1dGhfYWxnKTsKLQltZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbiA9IGNwdV90b19sZTE2KHRyYW5zYWN0aW9uKTsKLQlpZnN0YS0+YXV0aF90cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uICsgMTsKLQltZ210LT51LmF1dGguc3RhdHVzX2NvZGUgPSBjcHVfdG9fbGUxNigwKTsKLQlpZiAoZXh0cmEpCi0JCW1lbWNweShza2JfcHV0KHNrYiwgZXh0cmFfbGVuKSwgZXh0cmEsIGV4dHJhX2xlbik7Ci0KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGVuY3J5cHQpOwotfQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQoteworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwpAQCAtMjQxLDExICs5NCwxMSBAQAogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IHdtbSA9IDA7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0JdTY0IHJhdGVzID0gMDsKKwl1MzIgcmF0ZXMgPSAwOwogCiAJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJICAgIHNpemVvZigqbWdtdCkgKyAyMDAgKyBpZnN0YS0+ZXh0cmFfaWVfbGVuICsKLQkJCSAgICBpZnN0YS0+c3NpZF9sZW4pOworCQkJICAgIHNpemVvZigqbWdtdCkgKyAyMDAgKyBpZm1nZC0+ZXh0cmFfaWVfbGVuICsKKwkJCSAgICBpZm1nZC0+c3NpZF9sZW4pOwogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXNzb2MgIgogCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKQEAgLTI1NSw3ICsxMDgsNyBAQAogCiAJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwogCi0JY2FwYWIgPSBpZnN0YS0+Y2FwYWI7CisJY2FwYWIgPSBpZm1nZC0+Y2FwYWI7CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CiAJCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV18yR0haX1NIT1JUX1NMT1RfSU5DQVBBQkxFKSkKQEAgLTI2NCwxMSArMTE3LDExIEBACiAJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7CiAJfQogCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCwKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAogCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCWlmIChic3MpIHsKLQkJaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKQorCQlpZiAoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKIAkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZOwogCQlpZiAoYnNzLT53bW1fdXNlZCkKIAkJCXdtbSA9IDE7CkBAIC0yNzksNyArMTMyLDcgQEAKIAkJICogYi1vbmx5IG1vZGUpICovCiAJCXJhdGVzX2xlbiA9IGllZWU4MDIxMV9jb21wYXRpYmxlX3JhdGVzKGJzcywgc2JhbmQsICZyYXRlcyk7CiAKLQkJaWYgKChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgJiYKKwkJaWYgKChic3MtPmNic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UKSAmJgogCQkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TUEVDVFJVTV9NR01UKSkKIAkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UOwogCkBAIC0yOTEsMTggKzE0NCwxOCBAQAogCiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmRhLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOwogCi0JaWYgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQpIHsKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVCkgewogCQlza2JfcHV0KHNrYiwgMTApOwogCQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOwogCQltZ210LT51LnJlYXNzb2NfcmVxLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYik7CiAJCW1nbXQtPnUucmVhc3NvY19yZXEubGlzdGVuX2ludGVydmFsID0KIAkJCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5saXN0ZW5faW50ZXJ2YWwpOwotCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCBpZnN0YS0+cHJldl9ic3NpZCwKKwkJbWVtY3B5KG1nbXQtPnUucmVhc3NvY19yZXEuY3VycmVudF9hcCwgaWZtZ2QtPnByZXZfYnNzaWQsCiAJCSAgICAgICBFVEhfQUxFTik7CiAJfSBlbHNlIHsKIAkJc2tiX3B1dChza2IsIDQpOwpAQCAtMzE0LDEwICsxNjcsMTAgQEAKIAl9CiAKIAkvKiBTU0lEICovCi0JaWVzID0gcG9zID0gc2tiX3B1dChza2IsIDIgKyBpZnN0YS0+c3NpZF9sZW4pOworCWllcyA9IHBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZtZ2QtPnNzaWRfbGVuKTsKIAkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IGlmc3RhLT5zc2lkX2xlbjsKLQltZW1jcHkocG9zLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkqcG9zKysgPSBpZm1nZC0+c3NpZF9sZW47CisJbWVtY3B5KHBvcywgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CiAKIAkvKiBhZGQgYWxsIHJhdGVzIHdoaWNoIHdlcmUgbWFya2VkIHRvIGJlIHVzZWQgYWJvdmUgKi8KIAlzdXBwX3JhdGVzX2xlbiA9IHJhdGVzX2xlbjsKQEAgLTM3MiwxMiArMjI1LDEyIEBACiAJCX0KIAl9CiAKLQlpZiAoaWZzdGEtPmV4dHJhX2llKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCBpZnN0YS0+ZXh0cmFfaWVfbGVuKTsKLQkJbWVtY3B5KHBvcywgaWZzdGEtPmV4dHJhX2llLCBpZnN0YS0+ZXh0cmFfaWVfbGVuKTsKKwlpZiAoaWZtZ2QtPmV4dHJhX2llKSB7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKKwkJbWVtY3B5KHBvcywgaWZtZ2QtPmV4dHJhX2llLCBpZm1nZC0+ZXh0cmFfaWVfbGVuKTsKIAl9CiAKLQlpZiAod21tICYmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSkgeworCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7CiAJCXBvcyA9IHNrYl9wdXQoc2tiLCA5KTsKIAkJKnBvcysrID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOwogCQkqcG9zKysgPSA3OyAvKiBsZW4gKi8KQEAgLTM5MSwxMCArMjQ0LDE3IEBACiAJfQogCiAJLyogd21tIHN1cHBvcnQgaXMgYSBtdXN0IHRvIEhUICovCi0JaWYgKHdtbSAmJiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkgJiYKKwkvKgorCSAqIElFRUU4MDIuMTFuIGRvZXMgbm90IGFsbG93IFRLSVAvV0VQIGFzIHBhaXJ3aXNlCisJICogY2lwaGVycyBpbiBIVCBtb2RlLiBXZSBzdGlsbCBhc3NvY2lhdGUgaW4gbm9uLWh0CisJICogbW9kZSAoMTFhL2IvZykgaWYgYW55IG9uZSBvZiB0aGVzZSBjaXBoZXJzIGlzCisJICogY29uZmlndXJlZCBhcyBwYWlyd2lzZS4KKwkgKi8KKwlpZiAod21tICYmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgogCSAgICBzYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCAmJgogCSAgICAoaHRfaWUgPSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX0hUX0lORk9STUFUSU9OKSkgJiYKLQkgICAgaHRfaWVbMV0gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykpIHsKKwkgICAgaHRfaWVbMV0gPj0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbykgJiYKKwkgICAgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkpIHsKIAkJc3RydWN0IGllZWU4MDIxMV9odF9pbmZvICpodF9pbmZvID0KIAkJCShzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKikoaHRfaWUgKyAyKTsKIAkJdTE2IGNhcCA9IHNiYW5kLT5odF9jYXAuY2FwOwpAQCAtNDI5LDExICsyODksMTEgQEAKIAkJbWVtY3B5KHBvcywgJnNiYW5kLT5odF9jYXAubWNzLCBzaXplb2Yoc2JhbmQtPmh0X2NhcC5tY3MpKTsKIAl9CiAKLQlrZnJlZShpZnN0YS0+YXNzb2NyZXFfaWVzKTsKLQlpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbiA9IChza2ItPmRhdGEgKyBza2ItPmxlbikgLSBpZXM7Ci0JaWZzdGEtPmFzc29jcmVxX2llcyA9IGttYWxsb2MoaWZzdGEtPmFzc29jcmVxX2llc19sZW4sIEdGUF9LRVJORUwpOwotCWlmIChpZnN0YS0+YXNzb2NyZXFfaWVzKQotCQltZW1jcHkoaWZzdGEtPmFzc29jcmVxX2llcywgaWVzLCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbik7CisJa2ZyZWUoaWZtZ2QtPmFzc29jcmVxX2llcyk7CisJaWZtZ2QtPmFzc29jcmVxX2llc19sZW4gPSAoc2tiLT5kYXRhICsgc2tiLT5sZW4pIC0gaWVzOworCWlmbWdkLT5hc3NvY3JlcV9pZXMgPSBrbWFsbG9jKGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykKKwkJbWVtY3B5KGlmbWdkLT5hc3NvY3JlcV9pZXMsIGllcywgaWZtZ2QtPmFzc29jcmVxX2llc19sZW4pOwogCiAJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKIH0KQEAgLTQ0Myw3ICszMDMsNyBAQAogCQkJCQkgICB1MTYgc3R5cGUsIHUxNiByZWFzb24pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIApAQCAtNDU3LDQwICszMTcsNTEgQEAKIAogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CiAJbWVtc2V0KG1nbXQsIDAsIDI0KTsKLQltZW1jcHkobWdtdC0+ZGEsIGlmc3RhLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5kYSwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBzdHlwZSk7CiAJc2tiX3B1dChza2IsIDIpOwogCS8qIHUuZGVhdXRoLnJlYXNvbl9jb2RlID09IHUuZGlzYXNzb2MucmVhc29uX2NvZGUgKi8KIAltZ210LT51LmRlYXV0aC5yZWFzb25fY29kZSA9IGNwdV90b19sZTE2KHJlYXNvbik7CiAKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQpOworfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX3BzcG9sbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXN0cnVjdCBpZWVlODAyMTFfcHNwb2xsICpwc3BvbGw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgZmM7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqcHNwb2xsKSk7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCisJCSAgICAgICAicHNwb2xsIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwlwc3BvbGwgPSAoc3RydWN0IGllZWU4MDIxMV9wc3BvbGwgKikgc2tiX3B1dChza2IsIHNpemVvZigqcHNwb2xsKSk7CisJbWVtc2V0KHBzcG9sbCwgMCwgc2l6ZW9mKCpwc3BvbGwpKTsKKwlmYyA9IElFRUU4MDIxMV9GVFlQRV9DVEwgfCBJRUVFODAyMTFfU1RZUEVfUFNQT0xMIHwgSUVFRTgwMjExX0ZDVExfUE07CisJcHNwb2xsLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoZmMpOworCXBzcG9sbC0+YWlkID0gY3B1X3RvX2xlMTYoaWZtZ2QtPmFpZCk7CisKKwkvKiBhaWQgaW4gUFMtUG9sbCBoYXMgaXRzIHR3byBNU0JzIGVhY2ggc2V0IHRvIDEgKi8KKwlwc3BvbGwtPmFpZCB8PSBjcHVfdG9fbGUxNigxIDw8IDE1IHwgMSA8PCAxNCk7CisKKwltZW1jcHkocHNwb2xsLT5ic3NpZCwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KHBzcG9sbC0+dGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwogfQogCiAvKiBNTE1FICovCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX2RlZl93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlpbnQgaSwgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAwOwotCi0JLyogY2YuIElFRUUgODAyLjExIDkuMi4xMiAqLwotCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspCi0JCWlmICgoYnNzLT5zdXBwX3JhdGVzW2ldICYgMHg3ZikgKiA1ID4gMTEwKQotCQkJaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSAxOwotCi0JaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgotCSAgICBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCkKLQkJc2RhdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7Ci0JZWxzZQotCQlzZGF0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TREFUQV9PUEVSQVRJTkdfR01PREU7Ci0KLQlpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhKTsKLX0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCwKIAkJCQkgICAgIHU4ICp3bW1fcGFyYW0sIHNpemVfdCB3bW1fcGFyYW1fbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zIHBhcmFtczsKQEAgLTQ5OCw3ICszNjksNyBAQAogCWludCBjb3VudDsKIAl1OCAqcG9zOwogCi0JaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpCisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkpCiAJCXJldHVybjsKIAogCWlmICghd21tX3BhcmFtKQpAQCAtNTA3LDE4ICszNzgsMTUgQEAKIAlpZiAod21tX3BhcmFtX2xlbiA8IDggfHwgd21tX3BhcmFtWzVdIC8qIHZlcnNpb24gKi8gIT0gMSkKIAkJcmV0dXJuOwogCWNvdW50ID0gd21tX3BhcmFtWzZdICYgMHgwZjsKLQlpZiAoY291bnQgPT0gaWZzdGEtPndtbV9sYXN0X3BhcmFtX3NldCkKKwlpZiAoY291bnQgPT0gaWZtZ2QtPndtbV9sYXN0X3BhcmFtX3NldCkKIAkJcmV0dXJuOwotCWlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQgPSBjb3VudDsKKwlpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0ID0gY291bnQ7CiAKIAlwb3MgPSB3bW1fcGFyYW0gKyA4OwogCWxlZnQgPSB3bW1fcGFyYW1fbGVuIC0gODsKIAogCW1lbXNldCgmcGFyYW1zLCAwLCBzaXplb2YocGFyYW1zKSk7CiAKLQlpZiAoIWxvY2FsLT5vcHMtPmNvbmZfdHgpCi0JCXJldHVybjsKLQogCWxvY2FsLT53bW1fYWNtID0gMDsKIAlmb3IgKDsgbGVmdCA+PSA0OyBsZWZ0IC09IDQsIHBvcyArPSA0KSB7CiAJCWludCBhY2kgPSAocG9zWzBdID4+IDUpICYgMHgwMzsKQEAgLTUyNiwyNiArMzk0LDI2IEBACiAJCWludCBxdWV1ZTsKIAogCQlzd2l0Y2ggKGFjaSkgewotCQljYXNlIDE6CisJCWNhc2UgMTogLyogQUNfQksgKi8KIAkJCXF1ZXVlID0gMzsKIAkJCWlmIChhY20pCi0JCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDApIHwgQklUKDMpOworCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCgxKSB8IEJJVCgyKTsgLyogQksvLSAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMjoKKwkJY2FzZSAyOiAvKiBBQ19WSSAqLwogCQkJcXVldWUgPSAxOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNCkgfCBCSVQoNSk7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDQpIHwgQklUKDUpOyAvKiBDTC9WSSAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMzoKKwkJY2FzZSAzOiAvKiBBQ19WTyAqLwogCQkJcXVldWUgPSAwOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoNikgfCBCSVQoNyk7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDYpIHwgQklUKDcpOyAvKiBWTy9OQyAqLwogCQkJYnJlYWs7Ci0JCWNhc2UgMDoKKwkJY2FzZSAwOiAvKiBBQ19CRSAqLwogCQlkZWZhdWx0OgogCQkJcXVldWUgPSAyOwogCQkJaWYgKGFjbSkKLQkJCQlsb2NhbC0+d21tX2FjbSB8PSBCSVQoMSkgfCBCSVQoMik7CisJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDApIHwgQklUKDMpOyAvKiBCRS9FRSAqLwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNTU5LDIxICs0MjcsNDEgQEAKIAkJICAgICAgIGxvY2FsLT5tZGV2LT5uYW1lLCBxdWV1ZSwgYWNpLCBhY20sIHBhcmFtcy5haWZzLCBwYXJhbXMuY3dfbWluLAogCQkgICAgICAgcGFyYW1zLmN3X21heCwgcGFyYW1zLnR4b3ApOwogI2VuZGlmCi0JCS8qIFRPRE86IGhhbmRsZSBBQ00gKGJsb2NrIFRYLCBmYWxsYmFjayB0byBuZXh0IGxvd2VzdCBhbGxvd2VkCi0JCSAqIEFDIGZvciBub3cpICovCi0JCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7CisJCWlmIChsb2NhbC0+b3BzLT5jb25mX3R4ICYmCisJCSAgICBsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgcXVldWUsICZwYXJhbXMpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBzZXQgVFggcXVldWUgIgogCQkJICAgICAgICJwYXJhbWV0ZXJzIGZvciBxdWV1ZSAlZFxuIiwgbG9jYWwtPm1kZXYtPm5hbWUsIHF1ZXVlKTsKIAkJfQogCX0KIH0KIAorc3RhdGljIGJvb2wgaWVlZTgwMjExX2NoZWNrX3RpbShzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsIHUxNiBhaWQpCit7CisJdTggbWFzazsKKwl1OCBpbmRleCwgaW5kZXhuMSwgaW5kZXhuMjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3RpbV9pZSAqdGltID0gKHN0cnVjdCBpZWVlODAyMTFfdGltX2llICopIGVsZW1zLT50aW07CisKKwlhaWQgJj0gMHgzZmZmOworCWluZGV4ID0gYWlkIC8gODsKKwltYXNrICA9IDEgPDwgKGFpZCAmIDcpOworCisJaW5kZXhuMSA9IHRpbS0+Yml0bWFwX2N0cmwgJiAweGZlOworCWluZGV4bjIgPSBlbGVtcy0+dGltX2xlbiArIGluZGV4bjEgLSA0OworCisJaWYgKGluZGV4IDwgaW5kZXhuMSB8fCBpbmRleCA+IGluZGV4bjIpCisJCXJldHVybiBmYWxzZTsKKworCWluZGV4IC09IGluZGV4bjE7CisKKwlyZXR1cm4gISEodGltLT52aXJ0dWFsX21hcFtpbmRleF0gJiBtYXNrKTsKK30KKwogc3RhdGljIHUzMiBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQkgICB1MTYgY2FwYWIsIGJvb2wgZXJwX3ZhbGlkLCB1OCBlcnApCiB7CiAJc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYgPSAmc2RhdGEtPnZpZi5ic3NfY29uZjsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAjZW5kaWYKIAl1MzIgY2hhbmdlZCA9IDA7CiAJYm9vbCB1c2VfcHJvdGVjdGlvbjsKQEAgLTU5Niw3ICs0ODQsNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDVFMgcHJvdGVjdGlvbiAlcyAoQlNTSUQ9JXBNKVxuIiwKIAkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAogCQkJICAgICAgIHVzZV9wcm90ZWN0aW9uID8gImVuYWJsZWQiIDogImRpc2FibGVkIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX2N0c19wcm90ID0gdXNlX3Byb3RlY3Rpb247CkBAIC02MTAsNyArNDk4LDcgQEAKIAkJCSAgICAgICAiIChCU1NJRD0lcE0pXG4iLAogCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsCiAJCQkgICAgICAgdXNlX3Nob3J0X3ByZWFtYmxlID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX3Nob3J0X3ByZWFtYmxlID0gdXNlX3Nob3J0X3ByZWFtYmxlOwpAQCAtNjI0LDcgKzUxMiw3IEBACiAJCQkgICAgICAgIiAoQlNTSUQ9JXBNKVxuIiwKIAkJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLAogCQkJICAgICAgIHVzZV9zaG9ydF9zbG90ID8gInNob3J0IiA6ICJsb25nIiwKLQkJCSAgICAgICBpZnN0YS0+YnNzaWQpOworCQkJICAgICAgIGlmbWdkLT5ic3NpZCk7CiAJCX0KICNlbmRpZgogCQlic3NfY29uZi0+dXNlX3Nob3J0X3Nsb3QgPSB1c2Vfc2hvcnRfc2xvdDsKQEAgLTYzNCw1NyArNTIyLDU3IEBACiAJcmV0dXJuIGNoYW5nZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CiAJdW5pb24gaXdyZXFfZGF0YSB3cnF1OworCiAJbWVtc2V0KCZ3cnF1LCAwLCBzaXplb2Yod3JxdSkpOwotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCi0JCW1lbWNweSh3cnF1LmFwX2FkZHIuc2FfZGF0YSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJaWYgKHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkKKwkJbWVtY3B5KHdycXUuYXBfYWRkci5zYV9kYXRhLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKIAl3cnF1LmFwX2FkZHIuc2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQoc2RhdGEtPmRldiwgU0lPQ0dJV0FQLCAmd3JxdSwgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX3NlbmRfYXNzb2NpbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCWNoYXIgKmJ1ZjsKIAlzaXplX3QgbGVuOwogCWludCBpOwogCXVuaW9uIGl3cmVxX2RhdGEgd3JxdTsKIAotCWlmICghaWZzdGEtPmFzc29jcmVxX2llcyAmJiAhaWZzdGEtPmFzc29jcmVzcF9pZXMpCisJaWYgKCFpZm1nZC0+YXNzb2NyZXFfaWVzICYmICFpZm1nZC0+YXNzb2NyZXNwX2llcykKIAkJcmV0dXJuOwogCi0JYnVmID0ga21hbGxvYyg1MCArIDIgKiAoaWZzdGEtPmFzc29jcmVxX2llc19sZW4gKwotCQkJCWlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiksIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MoNTAgKyAyICogKGlmbWdkLT5hc3NvY3JlcV9pZXNfbGVuICsKKwkJCQlpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuOwogCiAJbGVuID0gc3ByaW50ZihidWYsICJBU1NPQ0lORk8oIik7Ci0JaWYgKGlmc3RhLT5hc3NvY3JlcV9pZXMpIHsKKwlpZiAoaWZtZ2QtPmFzc29jcmVxX2llcykgewogCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJSZXFJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXFfaWVzX2xlbjsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpZm1nZC0+YXNzb2NyZXFfaWVzX2xlbjsgaSsrKSB7CiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVxX2llc1tpXSk7CisJCQkJICAgICAgIGlmbWdkLT5hc3NvY3JlcV9pZXNbaV0pOwogCQl9CiAJfQotCWlmIChpZnN0YS0+YXNzb2NyZXNwX2llcykgewotCQlpZiAoaWZzdGEtPmFzc29jcmVxX2llcykKKwlpZiAoaWZtZ2QtPmFzc29jcmVzcF9pZXMpIHsKKwkJaWYgKGlmbWdkLT5hc3NvY3JlcV9pZXMpCiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIgIik7CiAJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIlJlc3BJRXM9Iik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpZnN0YS0+YXNzb2NyZXNwX2llc19sZW47IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKIAkJCWxlbiArPSBzcHJpbnRmKGJ1ZiArIGxlbiwgIiUwMngiLAotCQkJCSAgICAgICBpZnN0YS0+YXNzb2NyZXNwX2llc1tpXSk7CisJCQkJICAgICAgIGlmbWdkLT5hc3NvY3Jlc3BfaWVzW2ldKTsKIAkJfQogCX0KIAlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIpIik7CiAKIAlpZiAobGVuID4gSVdfQ1VTVE9NX01BWCkgewogCQlsZW4gPSBzcHJpbnRmKGJ1ZiwgIkFTU09DUkVTUElFPSIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGlmbWdkLT5hc3NvY3Jlc3BfaWVzX2xlbjsgaSsrKSB7CiAJCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIlMDJ4IiwKLQkJCQkgICAgICAgaWZzdGEtPmFzc29jcmVzcF9pZXNbaV0pOworCQkJCSAgICAgICBpZm1nZC0+YXNzb2NyZXNwX2llc1tpXSk7CiAJCX0KIAl9CiAKQEAgLTY5OSw0MCArNTg3LDM5IEBACiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgdTMyIGJzc19pbmZvX2NoYW5nZWQpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmxvY2FsX3RvX2h3KGxvY2FsKS0+Y29uZjsKIAogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAKIAlic3NfaW5mb19jaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FTU09DOwotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJcmV0dXJuOwotCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCwKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAogCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCWlmIChic3MpIHsKIAkJLyogc2V0IHRpbWluZyBpbmZvcm1hdGlvbiAqLwotCQlzZGF0YS0+dmlmLmJzc19jb25mLmJlYWNvbl9pbnQgPSBic3MtPmJlYWNvbl9pbnQ7Ci0JCXNkYXRhLT52aWYuYnNzX2NvbmYudGltZXN0YW1wID0gYnNzLT50aW1lc3RhbXA7CisJCXNkYXRhLT52aWYuYnNzX2NvbmYuYmVhY29uX2ludCA9IGJzcy0+Y2Jzcy5iZWFjb25faW50ZXJ2YWw7CisJCXNkYXRhLT52aWYuYnNzX2NvbmYudGltZXN0YW1wID0gYnNzLT5jYnNzLnRzZjsKIAkJc2RhdGEtPnZpZi5ic3NfY29uZi5kdGltX3BlcmlvZCA9IGJzcy0+ZHRpbV9wZXJpb2Q7CiAKIAkJYnNzX2luZm9fY2hhbmdlZCB8PSBpZWVlODAyMTFfaGFuZGxlX2Jzc19jYXBhYmlsaXR5KHNkYXRhLAotCQkJYnNzLT5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKKwkJCWJzcy0+Y2Jzcy5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKKworCQljZmc4MDIxMV9ob2xkX2JzcygmYnNzLT5jYnNzKTsKIAogCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIAl9CiAKLQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKLQltZW1jcHkoaWZzdGEtPnByZXZfYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOwotCWllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc2RhdGEsIGlmc3RhKTsKKwlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKKwltZW1jcHkoaWZtZ2QtPnByZXZfYnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCWllZWU4MDIxMV9zdGFfc2VuZF9hc3NvY2luZm8oc2RhdGEpOwogCi0JaWZzdGEtPmxhc3RfcHJvYmUgPSBqaWZmaWVzOworCWlmbWdkLT5sYXN0X3Byb2JlID0gamlmZmllczsKIAlpZWVlODAyMTFfbGVkX2Fzc29jKGxvY2FsLCAxKTsKIAogCXNkYXRhLT52aWYuYnNzX2NvbmYuYXNzb2MgPSAxOwpAQCAtNzQ1LDcyICs2MzIsMTE1IEBACiAJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGJzc19pbmZvX2NoYW5nZWQpOwogCiAJaWYgKGxvY2FsLT5wb3dlcnNhdmUpIHsKLQkJaWYgKGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQgPiAwKQorCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykgJiYKKwkJICAgIGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCA+IDApIHsKIAkJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwotCQkJCSAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0KSk7Ci0JCWVsc2UgeworCQkJCSAgbXNlY3NfdG9famlmZmllcygKKwkJCQkJbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7CisJCX0gZWxzZSB7CisJCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKQorCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CiAJCQljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKLQkJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsCi0JCQkJCSAgICBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKIAkJfQogCX0KIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vbihzZGF0YS0+ZGV2KTsKIAotCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWlmc3RhLT5kaXJlY3RfcHJvYmVfdHJpZXMrKzsKLQlpZiAoaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJaWZtZ2QtPmRpcmVjdF9wcm9iZV90cmllcysrOworCWlmIChpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSB0aW1lZCBvdXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7Ci0JCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEsIGlmc3RhKTsKKwkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSk7CisKKwkJLyoKKwkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCisJCSAqIGJzcyBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHRvIHRoZSBBUAorCQkgKi8KKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisKKwkJLyoKKwkJICogV2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgc2NhbiB3aGljaCBoYWQgbm8gY2hhbmNlIHRvIHJ1biB5ZXQKKwkJICogZHVlIHRvIHN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkUuCisJCSAqIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrIGFnYWluCisJCSAqLworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7CiAJCXJldHVybjsKIAl9CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpcmVjdCBwcm9iZSB0byBBUCAlcE0gdHJ5ICVkXG4iLAotCQkJc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkLAotCQkJaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyk7CisJCQlzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQsCisJCQlpZm1nZC0+ZGlyZWN0X3Byb2JlX3RyaWVzKTsKIAotCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7CisJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKIAotCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfRElSRUNUX1BST0JFLCAmaWZzdGEtPnJlcXVlc3QpOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfRElSRUNUX1BST0JFLCAmaWZtZ2QtPnJlcXVlc3QpOwogCiAJLyogRGlyZWN0IHByb2JlIGlzIHNlbnQgdG8gYnJvYWRjYXN0IGFkZHJlc3MgYXMgc29tZSBBUHMKIAkgKiB3aWxsIG5vdCBhbnN3ZXIgdG8gZGlyZWN0IHBhY2tldCBpbiB1bmFzc29jaWF0ZWQgc3RhdGUuCiAJICovCiAJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBOVUxMLAotCQkJCSBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKKwkJCQkgaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbiwgTlVMTCwgMCk7CiAKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQpOworCW1vZF90aW1lcigmaWZtZ2QtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7CiB9CiAKIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aGVudGljYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCWlmc3RhLT5hdXRoX3RyaWVzKys7Ci0JaWYgKGlmc3RhLT5hdXRoX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJdTggKmllczsKKwlzaXplX3QgaWVzX2xlbjsKKworCWlmbWdkLT5hdXRoX3RyaWVzKys7CisJaWYgKGlmbWdkLT5hdXRoX3RyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRpb24gd2l0aCBBUCAlcE0iCiAJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisKKwkJLyoKKwkJICogV2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgc2NhbiB3aGljaCBoYWQgbm8gY2hhbmNlIHRvIHJ1biB5ZXQKKwkJICogZHVlIHRvIHN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUuCisJCSAqIEhlbmNlLCBxdWV1ZSB0aGUgU1RBcyB3b3JrIGFnYWluCisJCSAqLworCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7CiAJCXJldHVybjsKIAl9CiAKLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOworCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEU7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGUgd2l0aCBBUCAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7CisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CiAKLQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCBpZnN0YSwgMSwgTlVMTCwgMCwgMCk7CisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgeworCQlpZXMgPSBpZm1nZC0+c21lX2F1dGhfaWU7CisJCWllc19sZW4gPSBpZm1nZC0+c21lX2F1dGhfaWVfbGVuOworCX0gZWxzZSB7CisJCWllcyA9IE5VTEw7CisJCWllc19sZW4gPSAwOworCX0KKwlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAxLCBpZm1nZC0+YXV0aF9hbGcsIGllcywgaWVzX2xlbiwKKwkJCSAgICBpZm1nZC0+YnNzaWQsIDApOworCWlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID0gMjsKIAotCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVCk7CisJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUKTsKIH0KIAogLyoKQEAgLTgxOCwzMiArNzQ4LDQ0IEBACiAgKiBpZiBzZWxmIGRpc2Nvbm5lY3RlZCBvciBhIHJlYXNvbiBjb2RlIGZyb20gdGhlIEFQLgogICovCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwgYm9vbCBkZWF1dGgsCi0JCQkJICAgYm9vbCBzZWxmX2Rpc2Nvbm5lY3RlZCwgdTE2IHJlYXNvbikKKwkJCQkgICBib29sIGRlYXV0aCwgYm9vbCBzZWxmX2Rpc2Nvbm5lY3RlZCwKKwkJCQkgICB1MTYgcmVhc29uKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZsb2NhbF90b19odyhsb2NhbCktPmNvbmY7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MzIgY2hhbmdlZCA9IDAsIGNvbmZpZ19jaGFuZ2VkID0gMDsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CiAJaWYgKCFzdGEpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoZGVhdXRoKSB7Ci0JCWlmc3RhLT5kaXJlY3RfcHJvYmVfdHJpZXMgPSAwOwotCQlpZnN0YS0+YXV0aF90cmllcyA9IDA7CisJCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMgPSAwOworCQlpZm1nZC0+YXV0aF90cmllcyA9IDA7CiAJfQotCWlmc3RhLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKLQlpZnN0YS0+YXNzb2NfdHJpZXMgPSAwOworCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKKwlpZm1nZC0+YXNzb2NfdHJpZXMgPSAwOwogCiAJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKHNkYXRhLT5kZXYpOwogCi0JaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc2RhdGEsIHN0YS0+c3RhLmFkZHIpOworCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSk7CisKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAorCQkJCSAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCisJaWYgKGJzcykgeworCQljZmc4MDIxMV91bmhvbGRfYnNzKCZic3MtPmNic3MpOworCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKwl9CiAKIAlpZiAoc2VsZl9kaXNjb25uZWN0ZWQpIHsKIAkJaWYgKGRlYXV0aCkKQEAgLTg1NCwyMyArNzk2LDI4IEBACiAJCQkJSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DLCByZWFzb24pOwogCX0KIAotCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOworCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEOwogCWNoYW5nZWQgfD0gaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHNkYXRhKTsKIAogCWllZWU4MDIxMV9sZWRfYXNzb2MobG9jYWwsIDApOwogCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfQVNTT0M7CiAJc2RhdGEtPnZpZi5ic3NfY29uZi5hc3NvYyA9IGZhbHNlOwogCi0JaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCWllZWU4MDIxMV9zdGFfc2VuZF9hcGluZm8oc2RhdGEpOwogCi0JaWYgKHNlbGZfZGlzY29ubmVjdGVkIHx8IHJlYXNvbiA9PSBXTEFOX1JFQVNPTl9ESVNBU1NPQ19TVEFfSEFTX0xFRlQpCi0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwlpZiAoc2VsZl9kaXNjb25uZWN0ZWQgfHwgcmVhc29uID09IFdMQU5fUkVBU09OX0RJU0FTU09DX1NUQV9IQVNfTEVGVCkgeworCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCWllZWU4MDIxMV9yeF9ic3NfcmVtb3ZlKHNkYXRhLCBpZm1nZC0+YnNzaWQsCisJCQkJc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCWlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JbG9jYWwtPmh3LmNvbmYuaHQuZW5hYmxlZCA9IGZhbHNlOworCS8qIGNoYW5uZWwoX3R5cGUpIGNoYW5nZXMgYXJlIGhhbmRsZWQgYnkgaWVlZTgwMjExX2h3X2NvbmZpZyAqLwogCWxvY2FsLT5vcGVyX2NoYW5uZWxfdHlwZSA9IE5MODAyMTFfQ0hBTl9OT19IVDsKLQljb25maWdfY2hhbmdlZCB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSFQ7CisKKwlsb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsID0gMDsKIAogCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CiAJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwpAQCAtODg1LDcgKzgzMiw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CkBAIC05MDYsMjcgKzg1MywyNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3ByaXZhY3lfbWlzbWF0Y2goc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlpbnQgYnNzX3ByaXZhY3k7CiAJaW50IHdlcF9wcml2YWN5OwogCWludCBwcml2YWN5X2ludm9rZWQ7CiAKLQlpZiAoIWlmc3RhIHx8IChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX01JWEVEX0NFTEwpKQorCWlmICghaWZtZ2QgfHwgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkpCiAJCXJldHVybiAwOwogCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCwKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkLAogCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAotCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOworCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOwogCWlmICghYnNzKQogCQlyZXR1cm4gMDsKIAotCWJzc19wcml2YWN5ID0gISEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpOworCWJzc19wcml2YWN5ID0gISEoYnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSk7CiAJd2VwX3ByaXZhY3kgPSAhIWllZWU4MDIxMV9zdGFfd2VwX2NvbmZpZ3VyZWQoc2RhdGEpOwotCXByaXZhY3lfaW52b2tlZCA9ICEhKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEKTsKKwlwcml2YWN5X2ludm9rZWQgPSAhIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BSSVZBQ1lfSU5WT0tFRCk7CiAKIAlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKIApAQCAtOTM2LDEwNSArODgzLDE3MyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hc3NvY2lhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JaWZzdGEtPmFzc29jX3RyaWVzKys7Ci0JaWYgKGlmc3RhLT5hc3NvY190cmllcyA+IElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMpIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCWlmbWdkLT5hc3NvY190cmllcysrOworCWlmIChpZm1nZC0+YXNzb2NfdHJpZXMgPiBJRUVFODAyMTFfQVNTT0NfTUFYX1RSSUVTKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRpb24gd2l0aCBBUCAlcE0iCiAJCSAgICAgICAiIHRpbWVkIG91dFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmc3RhLT5ic3NpZCk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKLQkJaWVlZTgwMjExX3N0YV9zZW5kX2FwaW5mbyhzZGF0YSwgaWZzdGEpOworCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOworCQlpZWVlODAyMTFfc3RhX3NlbmRfYXBpbmZvKHNkYXRhKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc2RhdGEsIGlmbWdkLT5ic3NpZCwKKwkJCQlzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCisJCQkJaWZtZ2QtPnNzaWQsIGlmbWdkLT5zc2lkX2xlbik7CisJCS8qCisJCSAqIFdlIG1pZ2h0IGhhdmUgYSBwZW5kaW5nIHNjYW4gd2hpY2ggaGFkIG5vIGNoYW5jZSB0byBydW4geWV0CisJCSAqIGR1ZSB0byBzdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFLgorCQkgKiBIZW5jZSwgcXVldWUgdGhlIFNUQXMgd29yayBhZ2FpbgorCQkgKi8KKwkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZtZ2QtPndvcmspOwogCQlyZXR1cm47CiAJfQogCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKKwlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOwogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRlIHdpdGggQVAgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZnN0YS0+YnNzaWQpOwotCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSwgaWZzdGEpKSB7CisJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlmbWdkLT5ic3NpZCk7CisJaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHNkYXRhKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG1pc21hdGNoIGluIHByaXZhY3kgY29uZmlndXJhdGlvbiBhbmQgIgogCQkgICAgICAgIm1peGVkLWNlbGwgZGlzYWJsZWQgLSBhYm9ydCBhc3NvY2lhdGlvblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOwogCQlyZXR1cm47CiAJfQogCi0JaWVlZTgwMjExX3NlbmRfYXNzb2Moc2RhdGEsIGlmc3RhKTsKKwlpZWVlODAyMTFfc2VuZF9hc3NvYyhzZGF0YSk7CiAKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKTsKKwltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9BU1NPQ19USU1FT1VUKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfYXNzb2NpYXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQordm9pZCBpZWVlODAyMTFfc3RhX3J4X25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKKwkvKgorCSAqIFdlIGNhbiBwb3N0cG9uZSB0aGUgbWdkLnRpbWVyIHdoZW5ldmVyIHJlY2VpdmluZyB1bmljYXN0IGZyYW1lcworCSAqIGZyb20gQVAgYmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlIGNvbm5lY3Rpb24gaXMgd29ya2luZyBib3RoIHdheXMKKwkgKiBhdCB0aGF0IHRpbWUuIEJ1dCBtdWx0aWNhc3QgZnJhbWVzIChhbmQgaGVuY2UgYWxzbyBiZWFjb25zKSBtdXN0CisJICogYmUgaWdub3JlZCBoZXJlLCBiZWNhdXNlIHdlIG5lZWQgdG8gdHJpZ2dlciB0aGUgdGltZXIgZHVyaW5nCisJICogZGF0YSBpZGxlIHBlcmlvZHMgZm9yIHNlbmRpbmcgdGhlIHBlcmlvZGljYWwgcHJvYmUgcmVxdWVzdCB0bworCSAqIHRoZSBBUC4KKwkgKi8KKwlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQorCQltb2RfdGltZXIoJnNkYXRhLT51Lm1nZC50aW1lciwKKwkJCSAgamlmZmllcyArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKTsKK30KKwordm9pZCBpZWVlODAyMTFfYmVhY29uX2xvc3Nfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCSAgICAgdS5tZ2QuYmVhY29uX2xvc3Nfd29yayk7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyaXZlciByZXBvcnRzIGJlYWNvbiBsb3NzIGZyb20gQVAgJXBNICIKKwkgICAgICAgIi0gc2VuZGluZyBwcm9iZSByZXF1ZXN0XG4iLCBzZGF0YS0+ZGV2LT5uYW1lLAorCSAgICAgICBzZGF0YS0+dS5tZ2QuYnNzaWQpOworCisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKKwlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmbWdkLT5ic3NpZCwgaWZtZ2QtPnNzaWQsCisJCQkJIGlmbWdkLT5zc2lkX2xlbiwgTlVMTCwgMCk7CisKKwltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKTsKK30KKwordm9pZCBpZWVlODAyMTFfYmVhY29uX2xvc3Moc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOworCisJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwKKwkJICAgJnNkYXRhLT51Lm1nZC5iZWFjb25fbG9zc193b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2JlYWNvbl9sb3NzKTsKKworc3RhdGljIHZvaWQgaWVlZTgwMjExX2Fzc29jaWF0ZWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JaW50IGRpc2Fzc29jOworCWJvb2wgZGlzYXNzb2MgPSBmYWxzZTsKIAogCS8qIFRPRE86IHN0YXJ0IG1vbml0b3JpbmcgY3VycmVudCBBUCBzaWduYWwgcXVhbGl0eSBhbmQgbnVtYmVyIG9mCiAJICogbWlzc2VkIGJlYWNvbnMuIFNjYW4gb3RoZXIgY2hhbm5lbHMgZXZlcnkgbm93IGFuZCB0aGVuIGFuZCBzZWFyY2gKIAkgKiBmb3IgYmV0dGVyIEFQcy4gKi8KIAkvKiBUT0RPOiByZW1vdmUgZXhwaXJlZCBCU1NlcyAqLwogCi0JaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQ7CisJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmc3RhLT5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZm1nZC0+YnNzaWQpOwogCWlmICghc3RhKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gU1RBIGVudHJ5IGZvciBvd24gQVAgJXBNXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKLQkJZGlzYXNzb2MgPSAxOwotCX0gZWxzZSB7Ci0JCWRpc2Fzc29jID0gMDsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJCSAgICAgICBzdGEtPmxhc3RfcnggKyBJRUVFODAyMTFfTU9OSVRPUklOR19JTlRFUlZBTCkpIHsKLQkJCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE5vIFByb2JlUmVzcCBmcm9tICIKLQkJCQkgICAgICAgImN1cnJlbnQgQVAgJXBNIC0gYXNzdW1lIG91dCBvZiAiCi0JCQkJICAgICAgICJyYW5nZVxuIiwKLQkJCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZzdGEtPmJzc2lkKTsKLQkJCQlkaXNhc3NvYyA9IDE7Ci0JCQl9IGVsc2UKLQkJCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmc3RhLT5ic3NpZCwKLQkJCQkJCQkgaWZzdGEtPnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkX2xlbik7Ci0JCQlpZnN0YS0+ZmxhZ3MgXj0gSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOwotCQl9IGVsc2UgewotCQkJaWZzdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEw7Ci0JCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZnN0YS0+bGFzdF9wcm9iZSArCi0JCQkJICAgICAgIElFRUU4MDIxMV9QUk9CRV9JTlRFUlZBTCkpIHsKLQkJCQlpZnN0YS0+bGFzdF9wcm9iZSA9IGppZmZpZXM7Ci0JCQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZnN0YS0+YnNzaWQsCi0JCQkJCQkJIGlmc3RhLT5zc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZF9sZW4pOwotCQkJfQotCQl9CisJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZm1nZC0+YnNzaWQpOworCQlkaXNhc3NvYyA9IHRydWU7CisJCWdvdG8gdW5sb2NrOwogCX0KIAorCWlmICgoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMKSAmJgorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9NT05JVE9SSU5HX0lOVEVSVkFMKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IG5vIHByb2JlIHJlc3BvbnNlIGZyb20gQVAgJXBNICIKKwkJICAgICAgICItIGRpc2Fzc29jaWF0aW5nXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJZGlzYXNzb2MgPSB0cnVlOworCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKKwkJZ290byB1bmxvY2s7CisJfQorCisJLyoKKwkgKiBCZWFjb24gZmlsdGVyaW5nIGlzIG9ubHkgZW5hYmxlZCB3aXRoIHBvd2VyIHNhdmUgYW5kIHRoZW4gdGhlCisJICogc3RhY2sgc2hvdWxkIG5vdCBjaGVjayBmb3IgYmVhY29uIGxvc3MuCisJICovCisJaWYgKCEoKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSKSAmJgorCSAgICAgIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSkgJiYKKwkgICAgdGltZV9hZnRlcihqaWZmaWVzLAorCQkgICAgICAgaWZtZ2QtPmxhc3RfYmVhY29uICsgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmVhY29uIGxvc3MgZnJvbSBBUCAlcE0gIgorCQkgICAgICAgIi0gc2VuZGluZyBwcm9iZSByZXF1ZXN0XG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgaWZtZ2QtPmJzc2lkKTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfUFJPQkVSRVFfUE9MTDsKKwkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YnNzaWQsIGlmbWdkLT5zc2lkLAorCQkJCQkgaWZtZ2QtPnNzaWRfbGVuLCBOVUxMLCAwKTsKKwkJZ290byB1bmxvY2s7CisKKwl9CisKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGEtPmxhc3RfcnggKyBJRUVFODAyMTFfUFJPQkVfSURMRV9USU1FKSkgeworCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOworCQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmbWdkLT5ic3NpZCwgaWZtZ2QtPnNzaWQsCisJCQkJCSBpZm1nZC0+c3NpZF9sZW4sIE5VTEwsIDApOworCX0KKworIHVubG9jazoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChkaXNhc3NvYykKLQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIHRydWUsCisJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsCiAJCQkJCVdMQU5fUkVBU09OX1BSRVZfQVVUSF9OT1RfVkFMSUQpOwogCWVsc2UKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKworCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwgamlmZmllcyArCiAJCQkJICAgICAgSUVFRTgwMjExX01PTklUT1JJTkdfSU5URVJWQUwpOwogfQogCiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwogCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlZFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKLQlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhLCBpZnN0YSk7CisJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKSB7CisJCS8qIFdhaXQgZm9yIFNNRSB0byByZXF1ZXN0IGFzc29jaWF0aW9uICovCisJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwl9IGVsc2UKKwkJaWVlZTgwMjExX2Fzc29jaWF0ZShzZGF0YSk7CiB9CiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgc2l6ZV90IGxlbikKIHsKQEAgLTEwNDUsNTAgKzEwNjAsMzcgQEAKIAlpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KSwgJmVsZW1zKTsKIAlpZiAoIWVsZW1zLmNoYWxsZW5nZSkKIAkJcmV0dXJuOwotCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIGlmc3RhLCAzLCBlbGVtcy5jaGFsbGVuZ2UgLSAyLAotCQkJICAgIGVsZW1zLmNoYWxsZW5nZV9sZW4gKyAyLCAxKTsKKwlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAzLCBzZGF0YS0+dS5tZ2QuYXV0aF9hbGcsCisJCQkgICAgZWxlbXMuY2hhbGxlbmdlIC0gMiwgZWxlbXMuY2hhbGxlbmdlX2xlbiArIDIsCisJCQkgICAgc2RhdGEtPnUubWdkLmJzc2lkLCAxKTsKKwlzZGF0YS0+dS5tZ2QuYXV0aF90cmFuc2FjdGlvbiA9IDQ7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9tZ210X2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCQkgICBzaXplX3QgbGVuKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7CiAKLQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUgJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCWlmIChpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSkKIAkJcmV0dXJuOwogCiAJaWYgKGxlbiA8IDI0ICsgNikKIAkJcmV0dXJuOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICBtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKIAkJcmV0dXJuOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICBtZW1jbXAoaWZzdGEtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKIAkJcmV0dXJuOwogCiAJYXV0aF9hbGcgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF9hbGcpOwogCWF1dGhfdHJhbnNhY3Rpb24gPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbik7CiAJc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguc3RhdHVzX2NvZGUpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQkvKgotCQkgKiBJRUVFIDgwMi4xMSBzdGFuZGFyZCBkb2VzIG5vdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uIGluIElCU1MKLQkJICogbmV0d29ya3MgYW5kIG1vc3QgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBzZWVtIHRvIHVzZSBpdC4KLQkJICogSG93ZXZlciwgdHJ5IHRvIHJlcGx5IHRvIGF1dGhlbnRpY2F0aW9uIGF0dGVtcHRzIGlmIHNvbWVvbmUKLQkJICogaGFzIGFjdHVhbGx5IGltcGxlbWVudGVkIHRoaXMuCi0JCSAqLwotCQlpZiAoYXV0aF9hbGcgIT0gV0xBTl9BVVRIX09QRU4gfHwgYXV0aF90cmFuc2FjdGlvbiAhPSAxKQotCQkJcmV0dXJuOwotCQlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCBpZnN0YSwgMiwgTlVMTCwgMCwgMCk7Ci0JfQotCi0JaWYgKGF1dGhfYWxnICE9IGlmc3RhLT5hdXRoX2FsZyB8fAotCSAgICBhdXRoX3RyYW5zYWN0aW9uICE9IGlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uKQorCWlmIChhdXRoX2FsZyAhPSBpZm1nZC0+YXV0aF9hbGcgfHwKKwkgICAgYXV0aF90cmFuc2FjdGlvbiAhPSBpZm1nZC0+YXV0aF90cmFuc2FjdGlvbikKIAkJcmV0dXJuOwogCiAJaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKQEAgLTEwOTcsMTUgKzEwOTksMTUgQEAKIAkJCWNvbnN0IGludCBudW1fYWxncyA9IEFSUkFZX1NJWkUoYWxncyk7CiAJCQlpbnQgaSwgcG9zOwogCQkJYWxnc1swXSA9IGFsZ3NbMV0gPSBhbGdzWzJdID0gMHhmZjsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQogCQkJCWFsZ3NbMF0gPSBXTEFOX0FVVEhfT1BFTjsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZKQogCQkJCWFsZ3NbMV0gPSBXTEFOX0FVVEhfU0hBUkVEX0tFWTsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX0xFQVApCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQogCQkJCWFsZ3NbMl0gPSBXTEFOX0FVVEhfTEVBUDsKLQkJCWlmIChpZnN0YS0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX09QRU4pCisJCQlpZiAoaWZtZ2QtPmF1dGhfYWxnID09IFdMQU5fQVVUSF9PUEVOKQogCQkJCXBvcyA9IDA7Ci0JCQllbHNlIGlmIChpZnN0YS0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkpCisJCQllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGcgPT0gV0xBTl9BVVRIX1NIQVJFRF9LRVkpCiAJCQkJcG9zID0gMTsKIAkJCWVsc2UKIAkJCQlwb3MgPSAyOwpAQCAtMTExMywxMDUgKzExMTUsMTEyIEBACiAJCQkJcG9zKys7CiAJCQkJaWYgKHBvcyA+PSBudW1fYWxncykKIAkJCQkJcG9zID0gMDsKLQkJCQlpZiAoYWxnc1twb3NdID09IGlmc3RhLT5hdXRoX2FsZyB8fAorCQkJCWlmIChhbGdzW3Bvc10gPT0gaWZtZ2QtPmF1dGhfYWxnIHx8CiAJCQkJICAgIGFsZ3NbcG9zXSA9PSAweGZmKQogCQkJCQljb250aW51ZTsKIAkJCQlpZiAoYWxnc1twb3NdID09IFdMQU5fQVVUSF9TSEFSRURfS0VZICYmCiAJCQkJICAgICFpZWVlODAyMTFfc3RhX3dlcF9jb25maWd1cmVkKHNkYXRhKSkKIAkJCQkJY29udGludWU7Ci0JCQkJaWZzdGEtPmF1dGhfYWxnID0gYWxnc1twb3NdOworCQkJCWlmbWdkLT5hdXRoX2FsZyA9IGFsZ3NbcG9zXTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoIChpZnN0YS0+YXV0aF9hbGcpIHsKKwlzd2l0Y2ggKGlmbWdkLT5hdXRoX2FsZykgewogCWNhc2UgV0xBTl9BVVRIX09QRU46CiAJY2FzZSBXTEFOX0FVVEhfTEVBUDoKLQkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhLCBpZnN0YSk7CisJY2FzZSBXTEFOX0FVVEhfRlQ6CisJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSk7CisJCWNmZzgwMjExX3NlbmRfcnhfYXV0aChzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0FVVEhfU0hBUkVEX0tFWToKLQkJaWYgKGlmc3RhLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpCi0JCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc2RhdGEsIGlmc3RhKTsKLQkJZWxzZQotCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHNkYXRhLCBpZnN0YSwgbWdtdCwgbGVuKTsKKwkJaWYgKGlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID09IDQpIHsKKwkJCWllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzZGF0YSk7CisJCQljZmc4MDIxMV9zZW5kX3J4X2F1dGgoc2RhdGEtPmRldiwgKHU4ICopIG1nbXQsIGxlbik7CisJCX0gZWxzZQorCQkJaWVlZTgwMjExX2F1dGhfY2hhbGxlbmdlKHNkYXRhLCBtZ210LCBsZW4pOwogCQlicmVhazsKIAl9CiB9CiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgICAgc2l6ZV90IGxlbikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAl1MTYgcmVhc29uX2NvZGU7CiAKIAlpZiAobGVuIDwgMjQgKyAyKQogCQlyZXR1cm47CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkKKwlpZiAobWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkKIAkJcmV0dXJuOwogCiAJcmVhc29uX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmRlYXV0aC5yZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEKQorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVEhFTlRJQ0FURUQpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVhdXRoZW50aWNhdGVkIChSZWFzb246ICV1KVxuIiwKIAkJCQlzZGF0YS0+ZGV2LT5uYW1lLCByZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BVVRIRU5USUNBVEUgfHwKLQkgICAgaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUgfHwKLQkgICAgaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKSB7Ci0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7Ci0JCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0VYVF9TTUUpICYmCisJICAgIChpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSB8fAorCSAgICAgaWZtZ2QtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUgfHwKKwkgICAgIGlmbWdkLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkpIHsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRTsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKwogCQkJCSAgICAgIElFRUU4MDIxMV9SRVRSWV9BVVRIX0lOVEVSVkFMKTsKIAl9CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgdHJ1ZSwgZmFsc2UsIDApOwotCWlmc3RhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRIRU5USUNBVEVEOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIGZhbHNlLCAwKTsKKwlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUSEVOVElDQVRFRDsKKwljZmc4MDIxMV9zZW5kX3J4X2RlYXV0aChzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICAgIHNpemVfdCBsZW4pCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJdTE2IHJlYXNvbl9jb2RlOwogCiAJaWYgKGxlbiA8IDI0ICsgMikKIAkJcmV0dXJuOwogCi0JaWYgKG1lbWNtcChpZnN0YS0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCisJaWYgKG1lbWNtcChpZm1nZC0+YnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikpCiAJCXJldHVybjsKIAogCXJlYXNvbl9jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5kaXNhc3NvYy5yZWFzb25fY29kZSk7CiAKLQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKQorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlzYXNzb2NpYXRlZCAoUmVhc29uOiAldSlcbiIsCiAJCQkJc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uX2NvZGUpOwogCi0JaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkgewotCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOwotCQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArCisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKSAmJgorCSAgICBpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKKwkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURTsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+dGltZXIsIGppZmZpZXMgKwogCQkJCSAgICAgIElFRUU4MDIxMV9SRVRSWV9BVVRIX0lOVEVSVkFMKTsKIAl9CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgZmFsc2UsIGZhbHNlLCByZWFzb25fY29kZSk7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgZmFsc2UsIGZhbHNlLCByZWFzb25fY29kZSk7CisJY2ZnODAyMTFfc2VuZF9yeF9kaXNhc3NvYyhzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhLAogCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCQkgc2l6ZV90IGxlbiwKIAkJCQkJIGludCByZWFzc29jKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCXU2NCByYXRlcywgYmFzaWNfcmF0ZXM7CisJdTMyIHJhdGVzLCBiYXNpY19yYXRlczsKIAl1MTYgY2FwYWJfaW5mbywgc3RhdHVzX2NvZGUsIGFpZDsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZzZGF0YS0+dmlmLmJzc19jb25mOwpAQCAtMTIyNCwxMyArMTIzMywxMyBAQAogCS8qIEFzc29jUmVzcCBhbmQgUmVhc3NvY1Jlc3AgaGF2ZSBpZGVudGljYWwgc3RydWN0dXJlLCBzbyBwcm9jZXNzIGJvdGgKIAkgKiBvZiB0aGVtIGluIHRoaXMgZnVuY3Rpb24uICovCiAKLQlpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEUpCisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKQogCQlyZXR1cm47CiAKIAlpZiAobGVuIDwgMjQgKyA2KQogCQlyZXR1cm47CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQorCWlmIChtZW1jbXAoaWZtZ2QtPmJzc2lkLCBtZ210LT5zYSwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsKIAogCWNhcGFiX2luZm8gPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuY2FwYWJfaW5mbyk7CkBAIC0xMjQyLDEzICsxMjUxLDMxIEBACiAJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNzb2MgPyAiUmVhIiA6ICJBIiwgbWdtdC0+c2EsCiAJICAgICAgIGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCAodTE2KShhaWQgJiB+KEJJVCgxNSkgfCBCSVQoMTQpKSkpOwogCisJcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOworCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOworCisJaWYgKHN0YXR1c19jb2RlID09IFdMQU5fU1RBVFVTX0FTU09DX1JFSkVDVEVEX1RFTVBPUkFSSUxZICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50ICYmIGVsZW1zLnRpbWVvdXRfaW50X2xlbiA9PSA1ICYmCisJICAgIGVsZW1zLnRpbWVvdXRfaW50WzBdID09IFdMQU5fVElNRU9VVF9BU1NPQ19DT01FQkFDSykgeworCQl1MzIgdHUsIG1zOworCQl0dSA9IGdldF91bmFsaWduZWRfbGUzMihlbGVtcy50aW1lb3V0X2ludCArIDEpOworCQltcyA9IHR1ICogMTAyNCAvIDEwMDA7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogQVAgcmVqZWN0ZWQgYXNzb2NpYXRpb24gdGVtcG9yYXJpbHk7ICIKKwkJICAgICAgICJjb21lYmFjayBkdXJhdGlvbiAldSBUVSAoJXUgbXMpXG4iLAorCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgdHUsIG1zKTsKKwkJaWYgKG1zID4gSUVFRTgwMjExX0FTU09DX1RJTUVPVVQpCisJCQltb2RfdGltZXIoJmlmbWdkLT50aW1lciwKKwkJCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG1zKSk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFQIGRlbmllZCBhc3NvY2lhdGlvbiAoY29kZT0lZClcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBzdGF0dXNfY29kZSk7CiAJCS8qIGlmIHRoaXMgd2FzIGEgcmVhc3NvY2lhdGlvbiwgZW5zdXJlIHdlIHRyeSBhICJmdWxsIgogCQkgKiBhc3NvY2lhdGlvbiBuZXh0IHRpbWUuIFRoaXMgd29ya3MgYXJvdW5kIHNvbWUgYnJva2VuIEFQcwogCQkgKiB3aGljaCBkbyBub3QgY29ycmVjdGx5IHJlamVjdCByZWFzc29jaWF0aW9uIHJlcXVlc3RzLiAqLwotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUkVWX0JTU0lEX1NFVDsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI1Nyw5ICsxMjg0LDYgQEAKIAkJICAgICAgICJzZXRcbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGFpZCk7CiAJYWlkICY9IH4oQklUKDE1KSB8IEJJVCgxNCkpOwogCi0JcG9zID0gbWdtdC0+dS5hc3NvY19yZXNwLnZhcmlhYmxlOwotCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOwotCiAJaWYgKCFlbGVtcy5zdXBwX3JhdGVzKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogbm8gU3VwcFJhdGVzIGVsZW1lbnQgaW4gQXNzb2NSZXNwXG4iLAogCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7CkBAIC0xMjY3LDQwICsxMjkxLDI5IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGVkXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQlpZnN0YS0+YWlkID0gYWlkOwotCWlmc3RhLT5hcF9jYXBhYiA9IGNhcGFiX2luZm87CisJaWZtZ2QtPmFpZCA9IGFpZDsKKwlpZm1nZC0+YXBfY2FwYWIgPSBjYXBhYl9pbmZvOwogCi0Ja2ZyZWUoaWZzdGEtPmFzc29jcmVzcF9pZXMpOwotCWlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiA9IGxlbiAtIChwb3MgLSAodTggKikgbWdtdCk7Ci0JaWZzdGEtPmFzc29jcmVzcF9pZXMgPSBrbWFsbG9jKGlmc3RhLT5hc3NvY3Jlc3BfaWVzX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGlmc3RhLT5hc3NvY3Jlc3BfaWVzKQotCQltZW1jcHkoaWZzdGEtPmFzc29jcmVzcF9pZXMsIHBvcywgaWZzdGEtPmFzc29jcmVzcF9pZXNfbGVuKTsKKwlrZnJlZShpZm1nZC0+YXNzb2NyZXNwX2llcyk7CisJaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuID0gbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KTsKKwlpZm1nZC0+YXNzb2NyZXNwX2llcyA9IGttYWxsb2MoaWZtZ2QtPmFzc29jcmVzcF9pZXNfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWZtZ2QtPmFzc29jcmVzcF9pZXMpCisJCW1lbWNweShpZm1nZC0+YXNzb2NyZXNwX2llcywgcG9zLCBpZm1nZC0+YXNzb2NyZXNwX2llc19sZW4pOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJLyogQWRkIFNUQSBlbnRyeSBmb3IgdGhlIEFQICovCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaWZtZ2QtPmJzc2lkKTsKIAlpZiAoIXN0YSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCiAJCW5ld3N0YSA9IHRydWU7CiAKLQkJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGlmc3RhLT5ic3NpZCwgR0ZQX0FUT01JQyk7CisJCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBpZm1nZC0+YnNzaWQsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXN0YSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2MgU1RBIGVudHJ5IGZvciIKIAkJCSAgICAgICAiIHRoZSBBUFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKIAkJfQotCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgaWZzdGEtPmJzc2lkLAotCQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSwKLQkJCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7Ci0JCWlmIChic3MpIHsKLQkJCXN0YS0+bGFzdF9zaWduYWwgPSBic3MtPnNpZ25hbDsKLQkJCXN0YS0+bGFzdF9xdWFsID0gYnNzLT5xdWFsOwotCQkJc3RhLT5sYXN0X25vaXNlID0gYnNzLT5ub2lzZTsKLQkJCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwotCQl9CiAKIAkJLyogdXBkYXRlIG5ldyBzdGEgd2l0aCBpdHMgbGFzdCByeCBhY3Rpdml0eSAqLwogCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOwpAQCAtMTM2Nyw3ICsxMzgwLDggQEAKIAllbHNlCiAJCXNkYXRhLT5mbGFncyAmPSB+SUVFRTgwMjExX1NEQVRBX09QRVJBVElOR19HTU9ERTsKIAotCWlmIChlbGVtcy5odF9jYXBfZWxlbSkKKwkvKiBJZiBUS0lQL1dFUCBpcyB1c2VkLCBubyBuZWVkIHRvIHBhcnNlIEFQJ3MgSFQgY2FwYWJpbGl0aWVzICovCisJaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmICEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEKSkKIAkJaWVlZTgwMjExX2h0X2NhcF9pZV90b19zdGFfaHRfY2FwKHNiYW5kLAogCQkJCWVsZW1zLmh0X2NhcF9lbGVtLCAmc3RhLT5zdGEuaHRfY2FwKTsKIApAQCAtMTM3NSw2ICsxMzg5LDkgQEAKIAogCXJhdGVfY29udHJvbF9yYXRlX2luaXQoc3RhKTsKIAorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEKQorCQlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfTUZQKTsKKwogCWlmIChlbGVtcy53bW1fcGFyYW0pCiAJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9XTUUpOwogCkBAIC0xMzkxLDExICsxNDA4LDEyIEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoZWxlbXMud21tX3BhcmFtKQotCQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmc3RhLCBlbGVtcy53bW1fcGFyYW0sCisJCWllZWU4MDIxMV9zdGFfd21tX3BhcmFtcyhsb2NhbCwgaWZtZ2QsIGVsZW1zLndtbV9wYXJhbSwKIAkJCQkJIGVsZW1zLndtbV9wYXJhbV9sZW4pOwogCiAJaWYgKGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYKLQkgICAgKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKQorCSAgICAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRCkgJiYKKwkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKQogCQljaGFuZ2VkIHw9IGllZWU4MDIxMV9lbmFibGVfaHQoc2RhdGEsIGVsZW1zLmh0X2luZm9fZWxlbSwKIAkJCQkJICAgICAgIGFwX2h0X2NhcF9mbGFncyk7CiAKQEAgLTE0MDMsMTM2ICsxNDIxLDE5IEBACiAJICogaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKCkgd2lsbCB0ZWxsIHRoZSBkcml2ZXIgKi8KIAlic3NfY29uZi0+YWlkID0gYWlkOwogCWJzc19jb25mLT5hc3NvY19jYXBhYmlsaXR5ID0gY2FwYWJfaW5mbzsKLQlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIGlmc3RhLCBjaGFuZ2VkKTsKKwlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIGNoYW5nZWQpOwogCi0JaWVlZTgwMjExX2Fzc29jaWF0ZWQoc2RhdGEsIGlmc3RhKTsKKwkvKgorCSAqIGluaXRpYWxpc2UgdGhlIHRpbWUgb2YgbGFzdCBiZWFjb24gdG8gYmUgdGhlIGFzc29jaWF0aW9uIHRpbWUsCisJICogb3RoZXJ3aXNlIGJlYWNvbiBsb3NzIGNoZWNrIHdpbGwgdHJpZ2dlciBpbW1lZGlhdGVseQorCSAqLworCWlmbWdkLT5sYXN0X2JlYWNvbiA9IGppZmZpZXM7CisKKwlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSk7CisJY2ZnODAyMTFfc2VuZF9yeF9hc3NvYyhzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgbGVuKTsKIH0KIAogCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfam9pbl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCByZXMsIHJhdGVzLCBpLCBqOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OwotCXU4ICpwb3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwotCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyA0MDApOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJvYmUgIgotCQkgICAgICAgInJlc3BvbnNlXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwotCi0JLyogUmVtb3ZlIHBvc3NpYmxlIFNUQSBlbnRyaWVzIGZyb20gb3RoZXIgSUJTUyBuZXR3b3Jrcy4gKi8KLQlzdGFfaW5mb19mbHVzaF9kZWxheWVkKHNkYXRhKTsKLQotCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpIHsKLQkJLyogUmVzZXQgb3duIFRTRiB0byBhbGxvdyB0aW1lIHN5bmNocm9uaXphdGlvbiB3b3JrLiAqLwotCQlsb2NhbC0+b3BzLT5yZXNldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKLQl9Ci0JbWVtY3B5KGlmc3RhLT5ic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCXJlcyA9IGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKTsKLQlpZiAocmVzKQotCQlyZXR1cm4gcmVzOwotCi0JbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9IGJzcy0+YmVhY29uX2ludCA+PSAxMCA/IGJzcy0+YmVhY29uX2ludCA6IDEwOwotCi0Jc2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQgPSBic3MtPmNhcGFiaWxpdHkgJgotCQlXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSA/IDEgOiAwOwotCi0JcmVzID0gaWVlZTgwMjExX3NldF9mcmVxKHNkYXRhLCBic3MtPmZyZXEpOwotCi0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCS8qIEJ1aWxkIElCU1MgcHJvYmUgcmVzcG9uc2UgKi8KLQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopCi0JCXNrYl9wdXQoc2tiLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOwotCW1lbXNldChtZ210LCAwLCAyNCArIHNpemVvZihtZ210LT51LmJlYWNvbikpOwotCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCQlJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7Ci0JbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTik7Ci0JbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCA9Ci0JCWNwdV90b19sZTE2KGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQpOwotCW1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCA9IGNwdV90b19sZTY0KGJzcy0+dGltZXN0YW1wKTsKLQltZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoYnNzLT5jYXBhYmlsaXR5KTsKLQotCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgaWZzdGEtPnNzaWRfbGVuKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IGlmc3RhLT5zc2lkX2xlbjsKLQltZW1jcHkocG9zLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQotCXJhdGVzID0gYnNzLT5zdXBwX3JhdGVzX2xlbjsKLQlpZiAocmF0ZXMgPiA4KQotCQlyYXRlcyA9IDg7Ci0JcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7Ci0JKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKLQkqcG9zKysgPSByYXRlczsKLQltZW1jcHkocG9zLCBic3MtPnN1cHBfcmF0ZXMsIHJhdGVzKTsKLQotCWlmIChic3MtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewotCQlwb3MgPSBza2JfcHV0KHNrYiwgMiArIDEpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9EU19QQVJBTVM7Ci0JCSpwb3MrKyA9IDE7Ci0JCSpwb3MrKyA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChic3MtPmZyZXEpOwotCX0KLQotCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgMik7Ci0JKnBvcysrID0gV0xBTl9FSURfSUJTU19QQVJBTVM7Ci0JKnBvcysrID0gMjsKLQkvKiBGSVg6IHNldCBBVElNIHdpbmRvdyBiYXNlZCBvbiBzY2FuIHJlc3VsdHMgKi8KLQkqcG9zKysgPSAwOwotCSpwb3MrKyA9IDA7Ci0KLQlpZiAoYnNzLT5zdXBwX3JhdGVzX2xlbiA+IDgpIHsKLQkJcmF0ZXMgPSBic3MtPnN1cHBfcmF0ZXNfbGVuIC0gODsKLQkJcG9zID0gc2tiX3B1dChza2IsIDIgKyByYXRlcyk7Ci0JCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOwotCQkqcG9zKysgPSByYXRlczsKLQkJbWVtY3B5KHBvcywgJmJzcy0+c3VwcF9yYXRlc1s4XSwgcmF0ZXMpOwotCX0KLQotCWlmc3RhLT5wcm9iZV9yZXNwID0gc2tiOwotCi0JaWVlZTgwMjExX2lmX2NvbmZpZyhzZGF0YSwgSUVFRTgwMjExX0lGQ0NfQkVBQ09OKTsKLQotCi0JcmF0ZXMgPSAwOwotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQlmb3IgKGkgPSAwOyBpIDwgYnNzLT5zdXBwX3JhdGVzX2xlbjsgaSsrKSB7Ci0JCWludCBiaXRyYXRlID0gKGJzcy0+c3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNTsKLQkJZm9yIChqID0gMDsgaiA8IHNiYW5kLT5uX2JpdHJhdGVzOyBqKyspCi0JCQlpZiAoc2JhbmQtPmJpdHJhdGVzW2pdLmJpdHJhdGUgPT0gYml0cmF0ZSkKLQkJCQlyYXRlcyB8PSBCSVQoaik7Ci0JfQotCWlmc3RhLT5zdXBwX3JhdGVzX2JpdHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF0gPSByYXRlczsKLQotCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc2RhdGEsIGJzcyk7Ci0KLQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQ7Ci0JbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7Ci0KLQlpZWVlODAyMTFfbGVkX2Fzc29jKGxvY2FsLCB0cnVlKTsKLQotCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKLQltZW1jcHkod3JxdS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKLQl3aXJlbGVzc19zZW5kX2V2ZW50KHNkYXRhLT5kZXYsIFNJT0NHSVdBUCwgJndycXUsIE5VTEwpOwotCi0JcmV0dXJuIHJlczsKLX0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAogCQkJCSAgc2l6ZV90IGxlbiwKQEAgLTE1NDMsMTEgKzE0NDQsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCWludCBmcmVxOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwotCXU2NCBiZWFjb25fdGltZXN0YW1wLCByeF90aW1lc3RhbXA7Ci0JdTY0IHN1cHBfcmF0ZXMgPSAwOwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IHJ4X3N0YXR1cy0+YmFuZDsKIAogCWlmIChlbGVtcy0+ZHNfcGFyYW1zICYmIGVsZW1zLT5kc19wYXJhbXNfbGVuID09IDEpCiAJCWZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koZWxlbXMtPmRzX3BhcmFtc1swXSk7CkBAIC0xNTU5LDExMiArMTQ1NiwxNiBAQAogCWlmICghY2hhbm5lbCB8fCBjaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQogCQlyZXR1cm47CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmIGVsZW1zLT5zdXBwX3JhdGVzICYmCi0JICAgIG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkgewotCQlzdXBwX3JhdGVzID0gaWVlZTgwMjExX3N0YV9nZXRfcmF0ZXMobG9jYWwsIGVsZW1zLCBiYW5kKTsKLQotCQlyY3VfcmVhZF9sb2NrKCk7Ci0KLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7Ci0JCWlmIChzdGEpIHsKLQkJCXU2NCBwcmV2X3JhdGVzOwotCi0JCQlwcmV2X3JhdGVzID0gc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXTsKLQkJCS8qIG1ha2Ugc3VyZSBtYW5kYXRvcnkgcmF0ZXMgYXJlIGFsd2F5cyBhZGRlZCAqLwotCQkJc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAotCQkJCWllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMobG9jYWwsIGJhbmQpOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQkJCWlmIChzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdICE9IHByZXZfcmF0ZXMpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB1cGRhdGVkIHN1cHBfcmF0ZXMgc2V0ICIKLQkJCQkgICAgImZvciAlcE0gYmFzZWQgb24gYmVhY29uIGluZm8gKDB4JWxseCB8ICIKLQkJCQkgICAgIjB4JWxseCAtPiAweCVsbHgpXG4iLAotCQkJCSAgICBzZGF0YS0+ZGV2LT5uYW1lLAotCQkJCSAgICBzdGEtPnN0YS5hZGRyLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwcmV2X3JhdGVzLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdXBwX3JhdGVzLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdKTsKLSNlbmRpZgotCQl9IGVsc2UgewotCQkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLCBzdXBwX3JhdGVzKTsKLQkJfQotCi0JCXJjdV9yZWFkX3VubG9jaygpOwotCX0KLQogCWJzcyA9IGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUobG9jYWwsIHJ4X3N0YXR1cywgbWdtdCwgbGVuLCBlbGVtcywKLQkJCQkJZnJlcSwgYmVhY29uKTsKKwkJCQkJY2hhbm5lbCwgYmVhY29uKTsKIAlpZiAoIWJzcykKIAkJcmV0dXJuOwogCi0JLyogd2FzIGp1c3QgdXBkYXRlZCBpbiBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlICovCi0JYmVhY29uX3RpbWVzdGFtcCA9IGJzcy0+dGltZXN0YW1wOwotCi0JLyoKLQkgKiBJbiBTVEEgbW9kZSwgdGhlIHJlbWFpbmluZyBwYXJhbWV0ZXJzIHNob3VsZCBub3QgYmUgb3ZlcnJpZGRlbgotCSAqIGJ5IGJlYWNvbnMgYmVjYXVzZSB0aGV5J3JlIG5vdCBuZWNlc3NhcmlseSBhY2N1cmF0ZSB0aGVyZS4KLQkgKi8KLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JICAgIGJzcy0+bGFzdF9wcm9iZV9yZXNwICYmIGJlYWNvbikgewotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGNoZWNrIGlmIHdlIG5lZWQgdG8gbWVyZ2UgSUJTUyAqLwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYgYmVhY29uICYmCi0JICAgIGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9JQlNTICYmCi0JICAgIGJzcy0+ZnJlcSA9PSBsb2NhbC0+b3Blcl9jaGFubmVsLT5jZW50ZXJfZnJlcSAmJgotCSAgICBlbGVtcy0+c3NpZF9sZW4gPT0gc2RhdGEtPnUuc3RhLnNzaWRfbGVuICYmCi0JICAgIG1lbWNtcChlbGVtcy0+c3NpZCwgc2RhdGEtPnUuc3RhLnNzaWQsCi0JCQkJc2RhdGEtPnUuc3RhLnNzaWRfbGVuKSA9PSAwKSB7Ci0JCWlmIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1RTRlQpIHsKLQkJCS8qIGluIG9yZGVyIGZvciBjb3JyZWN0IElCU1MgbWVyZ2luZyB3ZSBuZWVkIG1hY3RpbWUKLQkJCSAqCi0JCQkgKiBzaW5jZSBtYWN0aW1lIGlzIGRlZmluZWQgYXMgdGhlIHRpbWUgdGhlIGZpcnN0IGRhdGEKLQkJCSAqIHN5bWJvbCBvZiB0aGUgZnJhbWUgaGl0cyB0aGUgUEhZLCBhbmQgdGhlIHRpbWVzdGFtcAotCQkJICogb2YgdGhlIGJlYWNvbiBpcyBkZWZpbmVkIGFzICJ0aGUgdGltZSB0aGF0IHRoZSBkYXRhCi0JCQkgKiBzeW1ib2wgY29udGFpbmluZyB0aGUgZmlyc3QgYml0IG9mIHRoZSB0aW1lc3RhbXAgaXMKLQkJCSAqIHRyYW5zbWl0dGVkIHRvIHRoZSBQSFkgcGx1cyB0aGUgdHJhbnNtaXR0aW5nIFNUQeKAmXMKLQkJCSAqIGRlbGF5cyB0aHJvdWdoIGl0cyBsb2NhbCBQSFkgZnJvbSB0aGUgTUFDLVBIWQotCQkJICogaW50ZXJmYWNlIHRvIGl0cyBpbnRlcmZhY2Ugd2l0aCB0aGUgV00iCi0JCQkgKiAoODAyLjExIDExLjEuMikgLSBlcXVhbHMgdGhlIHRpbWUgdGhpcyBiaXQgYXJyaXZlcyBhdAotCQkJICogdGhlIHJlY2VpdmVyIC0gd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCB0aGUKLQkJCSAqIG9mZnNldCBiZXR3ZWVuIHRoZSB0d28uCi0JCQkgKiBlLmc6IGF0IDEgTUJpdCB0aGF0IG1lYW5zIG1hY3RpbWUgaXMgMTkyIHVzZWMgZWFybGllcgotCQkJICogKD0yNCBieXRlcyAqIDggdXNlY3MvYnl0ZSkgdGhhbiB0aGUgYmVhY29uIHRpbWVzdGFtcC4KLQkJCSAqLwotCQkJaW50IHJhdGU7Ci0JCQlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkgewotCQkJCXJhdGUgPSA2NTsgLyogVE9ETzogSFQgcmF0ZXMgKi8KLQkJCX0gZWxzZSB7Ci0JCQkJcmF0ZSA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF0tPgotCQkJCQliaXRyYXRlc1tyeF9zdGF0dXMtPnJhdGVfaWR4XS5iaXRyYXRlOwotCQkJfQotCQkJcnhfdGltZXN0YW1wID0gcnhfc3RhdHVzLT5tYWN0aW1lICsgKDI0ICogOCAqIDEwIC8gcmF0ZSk7Ci0JCX0gZWxzZSBpZiAobG9jYWwgJiYgbG9jYWwtPm9wcyAmJiBsb2NhbC0+b3BzLT5nZXRfdHNmKQotCQkJLyogc2Vjb25kIGJlc3Qgb3B0aW9uOiBnZXQgY3VycmVudCBUU0YgKi8KLQkJCXJ4X3RpbWVzdGFtcCA9IGxvY2FsLT5vcHMtPmdldF90c2YobG9jYWxfdG9faHcobG9jYWwpKTsKLQkJZWxzZQotCQkJLyogY2FuJ3QgbWVyZ2Ugd2l0aG91dCBrbm93aW5nIHRoZSBUU0YgKi8KLQkJCXJ4X3RpbWVzdGFtcCA9IC0xTExVOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICJSWCBiZWFjb24gU0E9JXBNIEJTU0lEPSIKLQkJICAgICAgICIlcE0gVFNGPTB4JWxseCBCQ049MHglbGx4IGRpZmY9JWxsZCBAJWx1XG4iLAotCQkgICAgICAgbWdtdC0+c2EsIG1nbXQtPmJzc2lkLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylyeF90aW1lc3RhbXAsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJlYWNvbl90aW1lc3RhbXAsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKShyeF90aW1lc3RhbXAgLSBiZWFjb25fdGltZXN0YW1wKSwKLQkJICAgICAgIGppZmZpZXMpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0JCWlmIChiZWFjb25fdGltZXN0YW1wID4gcnhfdGltZXN0YW1wKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmVhY29uIFRTRiBoaWdoZXIgdGhhbiAiCi0JCQkgICAgICAgImxvY2FsIFRTRiAtIElCU1MgbWVyZ2Ugd2l0aCBCU1NJRCAlcE1cbiIsCi0JCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+YnNzaWQpOwotI2VuZGlmCi0JCQlpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgJnNkYXRhLT51LnN0YSwgYnNzKTsKLQkJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7Ci0JCX0KKwlpZiAoZWxlbXMtPmNoX3N3aXRjaF9lbGVtICYmIChlbGVtcy0+Y2hfc3dpdGNoX2VsZW1fbGVuID09IDMpICYmCisJICAgIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pID09IDApKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqc3dfZWxlbSA9CisJCQkoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICopZWxlbXMtPmNoX3N3aXRjaF9lbGVtOworCQlpZWVlODAyMTFfcHJvY2Vzc19jaGFuc3dpdGNoKHNkYXRhLCBzd19lbGVtLCBic3MpOwogCX0KIAogCWllZWU4MDIxMV9yeF9ic3NfcHV0KGxvY2FsLCBic3MpOwpAQCAtMTY3Niw5ICsxNDc3LDExIEBACiAJCQkJCSBzaXplX3QgbGVuLAogCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCXNpemVfdCBiYXNlbGVuOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9ICZzZGF0YS0+dS5zdGE7CisKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKIAlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQogCQlyZXR1cm47IC8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCkBAIC0xNjk0LDI1ICsxNDk3LDI3IEBACiAKIAkvKiBkaXJlY3QgcHJvYmUgbWF5IGJlIHBhcnQgb2YgdGhlIGFzc29jaWF0aW9uIGZsb3cgKi8KIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX0RJUkVDVF9QUk9CRSwKLQkJCQkJCQkmaWZzdGEtPnJlcXVlc3QpKSB7CisJCQkgICAgICAgJmlmbWdkLT5yZXF1ZXN0KSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgZGlyZWN0IHByb2JlIHJlc3BvbmRlZFxuIiwKIAkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlpZWVlODAyMTFfYXV0aGVudGljYXRlKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEpOwogCX0KLX0KIAorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1BST0JFUkVRX1BPTEwpCisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUk9CRVJFUV9QT0xMOworfQogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCiAJCQkJICAgICBzaXplX3QgbGVuLAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKIAlzaXplX3QgYmFzZWxlbjsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAl1MzIgY2hhbmdlZCA9IDA7Ci0JYm9vbCBlcnBfdmFsaWQ7CisJYm9vbCBlcnBfdmFsaWQsIGRpcmVjdGVkX3RpbTsKIAl1OCBlcnBfdmFsdWUgPSAwOwogCiAJLyogUHJvY2VzcyBiZWFjb24gZnJvbSB0aGUgY3VycmVudCBCU1MgKi8KQEAgLTE3MjYsMTUgKzE1MzEsNDMgQEAKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuOwotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKIAotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgfHwKLQkgICAgbWVtY21wKGlmc3RhLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQorCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgfHwKKwkgICAgbWVtY21wKGlmbWdkLT5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQogCQlyZXR1cm47CiAKLQlpZWVlODAyMTFfc3RhX3dtbV9wYXJhbXMobG9jYWwsIGlmc3RhLCBlbGVtcy53bW1fcGFyYW0sCisJaWYgKHJ4X3N0YXR1cy0+ZnJlcSAhPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5jZW50ZXJfZnJlcSkKKwkJcmV0dXJuOworCisJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGxvY2FsLCBpZm1nZCwgZWxlbXMud21tX3BhcmFtLAogCQkJCSBlbGVtcy53bW1fcGFyYW1fbGVuKTsKIAorCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spIHsKKwkJZGlyZWN0ZWRfdGltID0gaWVlZTgwMjExX2NoZWNrX3RpbSgmZWxlbXMsIGlmbWdkLT5haWQpOworCisJCWlmIChkaXJlY3RlZF90aW0pIHsKKwkJCWlmIChsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPiAwKSB7CisJCQkJbG9jYWwtPmh3LmNvbmYuZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOworCQkJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsCisJCQkJCQkgICAgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOworCQkJfSBlbHNlIHsKKwkJCQlsb2NhbC0+cHNwb2xsaW5nID0gdHJ1ZTsKKworCQkJCS8qCisJCQkJICogSGVyZSBpcyBhc3N1bWVkIHRoYXQgdGhlIGRyaXZlciB3aWxsIGJlCisJCQkJICogYWJsZSB0byBzZW5kIHBzLXBvbGwgZnJhbWUgYW5kIHJlY2VpdmUgYQorCQkJCSAqIHJlc3BvbnNlIGV2ZW4gdGhvdWdoIHBvd2VyIHNhdmUgbW9kZSBpcworCQkJCSAqIGVuYWJsZWQsIGJ1dCBzb21lIGRyaXZlcnMgbWlnaHQgcmVxdWlyZQorCQkJCSAqIHRvIGRpc2FibGUgcG93ZXIgc2F2ZSBoZXJlLiBUaGlzIG5lZWRzCisJCQkJICogdG8gYmUgaW52ZXN0aWdhdGVkLgorCQkJCSAqLworCQkJCWllZWU4MDIxMV9zZW5kX3BzcG9sbChsb2NhbCwgc2RhdGEpOworCQkJfQorCQl9CisJfQogCiAJaWYgKGVsZW1zLmVycF9pbmZvICYmIGVsZW1zLmVycF9pbmZvX2xlbiA+PSAxKSB7CiAJCWVycF92YWxpZCA9IHRydWU7CkBAIC0xNzQ3LDE0ICsxNTgwLDE1IEBACiAJCQllcnBfdmFsaWQsIGVycF92YWx1ZSk7CiAKIAotCWlmIChlbGVtcy5odF9jYXBfZWxlbSAmJiBlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtKSB7CisJaWYgKGVsZW1zLmh0X2NhcF9lbGVtICYmIGVsZW1zLmh0X2luZm9fZWxlbSAmJiBlbGVtcy53bW1fcGFyYW0gJiYKKwkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1RLSVBfV0VQX1VTRUQpKSB7CiAJCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAkJdTE2IGFwX2h0X2NhcF9mbGFnczsKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBpZnN0YS0+YnNzaWQpOworCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGlmbWdkLT5ic3NpZCk7CiAJCWlmICghc3RhKSB7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKQEAgLTE3NzgsOTIgKzE2MTIsMjggQEAKIAkJICogZm9yIHRoZSBCU1NJRCB3ZSBhcmUgYXNzb2NpYXRlZCB0byAqLwogCQlyZWd1bGF0b3J5X2hpbnRfMTFkKGxvY2FsLT5ody53aXBoeSwKIAkJCWVsZW1zLmNvdW50cnlfZWxlbSwgZWxlbXMuY291bnRyeV9lbGVtX2xlbik7CisKKwkJLyogVE9ETzogSUJTUyBhbHNvIG5lZWRzIHRoaXMgKi8KKwkJaWYgKGVsZW1zLnB3cl9jb25zdHJfZWxlbSkKKwkJCWllZWU4MDIxMV9oYW5kbGVfcHdyX2NvbnN0cihzZGF0YSwKKwkJCQlsZTE2X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AuY2FwYWJfaW5mbyksCisJCQkJZWxlbXMucHdyX2NvbnN0cl9lbGVtLAorCQkJCWVsZW1zLnB3cl9jb25zdHJfZWxlbV9sZW4pOwogCX0KIAogCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLCBjaGFuZ2VkKTsKIH0KIAotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSwKLQkJCQkJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCQlzaXplX3QgbGVuLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQoraWVlZTgwMjExX3J4X3Jlc3VsdCBpZWVlODAyMTFfc3RhX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCB0eF9sYXN0X2JlYWNvbjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcmVzcDsKLQl1OCAqcG9zLCAqZW5kOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAotCSAgICBpZnN0YS0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEIHx8Ci0JICAgIGxlbiA8IDI0ICsgMiB8fCAhaWZzdGEtPnByb2JlX3Jlc3ApCi0JCXJldHVybjsKLQotCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKLQkJdHhfbGFzdF9iZWFjb24gPSBsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbihsb2NhbF90b19odyhsb2NhbCkpOwotCWVsc2UKLQkJdHhfbGFzdF9iZWFjb24gPSAxOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIFByb2JlUmVxIFNBPSVwTSBEQT0lcE0gQlNTSUQ9JXBNIgotCSAgICAgICAiICh0eF9sYXN0X2JlYWNvbj0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhLCBtZ210LT5kYSwKLQkgICAgICAgbWdtdC0+YnNzaWQsIHR4X2xhc3RfYmVhY29uKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwotCi0JaWYgKCF0eF9sYXN0X2JlYWNvbikKLQkJcmV0dXJuOwotCi0JaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCAmJgotCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsICJceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmYiLCBFVEhfQUxFTikgIT0gMCkKLQkJcmV0dXJuOwotCi0JZW5kID0gKCh1OCAqKSBtZ210KSArIGxlbjsKLQlwb3MgPSBtZ210LT51LnByb2JlX3JlcS52YXJpYWJsZTsKLQlpZiAocG9zWzBdICE9IFdMQU5fRUlEX1NTSUQgfHwKLQkgICAgcG9zICsgMiArIHBvc1sxXSA+IGVuZCkgewotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBTU0lEIElFIGluIFByb2JlUmVxICIKLQkJICAgICAgICJmcm9tICVwTVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCWlmIChwb3NbMV0gIT0gMCAmJgotCSAgICAocG9zWzFdICE9IGlmc3RhLT5zc2lkX2xlbiB8fAotCSAgICAgbWVtY21wKHBvcyArIDIsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pICE9IDApKSB7Ci0JCS8qIElnbm9yZSBQcm9iZVJlcSBmb3IgZm9yZWlnbiBTU0lEICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBSZXBseSB3aXRoIFByb2JlUmVzcCAqLwotCXNrYiA9IHNrYl9jb3B5KGlmc3RhLT5wcm9iZV9yZXNwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuOwotCi0JcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwotCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VuZGluZyBQcm9iZVJlc3AgdG8gJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCByZXNwLT5kYSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOwotfQotCi12b2lkIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgZmM7CiAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKLQkJZ290byBmYWlsOwotCi0JaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOwogCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CkBAIC0xODc4LDExMyArMTY0OCw2OCBAQAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfRElTQVNTT0M6Ci0JCXNrYl9xdWV1ZV90YWlsKCZpZnN0YS0+c2tiX3F1ZXVlLCBza2IpOwotCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7Ci0JCXJldHVybjsKKwkJc2tiX3F1ZXVlX3RhaWwoJnNkYXRhLT51Lm1nZC5za2JfcXVldWUsIHNrYik7CisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJnNkYXRhLT51Lm1nZC53b3JrKTsKKwkJcmV0dXJuIFJYX1FVRVVFRDsKIAl9CiAKLSBmYWlsOgotCWtmcmVlX3NrYihza2IpOworCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfcnhfcXVldWVkX21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKIAl1MTYgZmM7CiAKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0KIAlyeF9zdGF0dXMgPSAoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKikgc2tiLT5jYjsKIAltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShtZ210LT5mcmFtZV9jb250cm9sKTsKIAogCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewotCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUToKLQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVxKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sCi0JCQkJCSAgICByeF9zdGF0dXMpOwotCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgcnhfc3RhdHVzKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCisJCQkJCSAgICAgcnhfc3RhdHVzKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLCByeF9zdGF0dXMpOworCQlpZWVlODAyMTFfcnhfbWdtdF9iZWFjb24oc2RhdGEsIG1nbXQsIHNrYi0+bGVuLAorCQkJCQkgcnhfc3RhdHVzKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfYXV0aChzZGF0YSwgbWdtdCwgc2tiLT5sZW4pOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgotCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBpZnN0YSwgbWdtdCwgc2tiLT5sZW4sIDApOworCQlpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHNkYXRhLCBtZ210LCBza2ItPmxlbiwgMCk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVTUDoKLQkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuLCAxKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgbWdtdCwgc2tiLT5sZW4sIDEpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVFlQRV9ERUFVVEg6Ci0JCWllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfZGVhdXRoKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgotCQlpZWVlODAyMTFfcnhfbWdtdF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIG1nbXQsIHNrYi0+bGVuKTsKKwkJaWVlZTgwMjExX3J4X21nbXRfZGlzYXNzb2Moc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKIAkJYnJlYWs7CiAJfQogCiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKLQotc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2FjdGl2ZV9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCWludCBhY3RpdmUgPSAwOwotCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCWlmIChzdGEtPnNkYXRhID09IHNkYXRhICYmCi0JCSAgICB0aW1lX2FmdGVyKHN0YS0+bGFzdF9yeCArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMLAotCQkJICAgICAgIGppZmZpZXMpKSB7Ci0JCQlhY3RpdmUrKzsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlyZXR1cm4gYWN0aXZlOwotfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQltb2RfdGltZXIoJmlmc3RhLT50aW1lciwgamlmZmllcyArIElFRUU4MDIxMV9JQlNTX01FUkdFX0lOVEVSVkFMKTsKLQotCWllZWU4MDIxMV9zdGFfZXhwaXJlKHNkYXRhLCBJRUVFODAyMTFfSUJTU19JTkFDVElWSVRZX0xJTUlUKTsKLQlpZiAoaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSkpCi0JCXJldHVybjsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gYWN0aXZlIElCU1MgU1RBcyAtIHRyeWluZyB0byBzY2FuIGZvciBvdGhlciAiCi0JICAgICAgICJJQlNTIG5ldHdvcmtzIHdpdGggc2FtZSBTU0lEIChtZXJnZSlcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCWllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotfQotCi0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KIAkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCi0Jc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZnN0YS0+cmVxdWVzdCk7Ci0JcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZtZ2QtPnJlcXVlc3QpOworCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9yZXNldF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogeworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCiAJaWYgKGxvY2FsLT5vcHMtPnJlc2V0X3RzZikgewpAQCAtMTk5MiwyOTggKzE3MTcsMTEyIEBACiAJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZihsb2NhbF90b19odyhsb2NhbCkpOwogCX0KIAotCWlmc3RhLT53bW1fbGFzdF9wYXJhbV9zZXQgPSAtMTsgLyogYWxsb3cgYW55IFdNTSB1cGRhdGUgKi8KKwlpZm1nZC0+d21tX2xhc3RfcGFyYW1fc2V0ID0gLTE7IC8qIGFsbG93IGFueSBXTU0gdXBkYXRlICovCiAKIAotCWlmIChpZnN0YS0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX09QRU4pCi0JCWlmc3RhLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9PUEVOOwotCWVsc2UgaWYgKGlmc3RhLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfU0hBUkVEX0tFWSkKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX1NIQVJFRF9LRVk7Ci0JZWxzZSBpZiAoaWZzdGEtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19MRUFQKQotCQlpZnN0YS0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfTEVBUDsKKwlpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19PUEVOKQorCQlpZm1nZC0+YXV0aF9hbGcgPSBXTEFOX0FVVEhfT1BFTjsKKwllbHNlIGlmIChpZm1nZC0+YXV0aF9hbGdzICYgSUVFRTgwMjExX0FVVEhfQUxHX1NIQVJFRF9LRVkpCisJCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9TSEFSRURfS0VZOworCWVsc2UgaWYgKGlmbWdkLT5hdXRoX2FsZ3MgJiBJRUVFODAyMTFfQVVUSF9BTEdfTEVBUCkKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX0xFQVA7CisJZWxzZSBpZiAoaWZtZ2QtPmF1dGhfYWxncyAmIElFRUU4MDIxMV9BVVRIX0FMR19GVCkKKwkJaWZtZ2QtPmF1dGhfYWxnID0gV0xBTl9BVVRIX0ZUOwogCWVsc2UKLQkJaWZzdGEtPmF1dGhfYWxnID0gV0xBTl9BVVRIX09QRU47Ci0JaWZzdGEtPmF1dGhfdHJhbnNhY3Rpb24gPSAtMTsKLQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRDsKLQlpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcyA9IDA7Ci0JaWZzdGEtPmRpcmVjdF9wcm9iZV90cmllcyA9IDA7Ci0JaWZzdGEtPmF1dGhfdHJpZXMgPSAwOwotCWlmc3RhLT5hc3NvY190cmllcyA9IDA7CisJCWlmbWdkLT5hdXRoX2FsZyA9IFdMQU5fQVVUSF9PUEVOOworCWlmbWdkLT5hdXRoX3RyYW5zYWN0aW9uID0gLTE7CisJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FTU09DSUFURUQ7CisJaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMgPSAwOworCWlmbWdkLT5kaXJlY3RfcHJvYmVfdHJpZXMgPSAwOworCWlmbWdkLT5hdXRoX3RyaWVzID0gMDsKKwlpZm1nZC0+YXNzb2NfdHJpZXMgPSAwOwogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihzZGF0YS0+ZGV2KTsKIH0KIAotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfbWF0Y2hfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEsCi0JCQkJICAgIGNvbnN0IGNoYXIgKnNzaWQsIGludCBzc2lkX2xlbikKK3N0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlpbnQgdG1wLCBoaWRkZW5fc3NpZDsKLQotCWlmIChzc2lkX2xlbiA9PSBpZnN0YS0+c3NpZF9sZW4gJiYKLQkgICAgIW1lbWNtcChpZnN0YS0+c3NpZCwgc3NpZCwgc3NpZF9sZW4pKQotCQlyZXR1cm4gMTsKLQotCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKQotCQlyZXR1cm4gMDsKLQotCWhpZGRlbl9zc2lkID0gMTsKLQl0bXAgPSBzc2lkX2xlbjsKLQl3aGlsZSAodG1wLS0pIHsKLQkJaWYgKHNzaWRbdG1wXSAhPSAnXDAnKSB7Ci0JCQloaWRkZW5fc3NpZCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChoaWRkZW5fc3NpZCAmJiAoaWZzdGEtPnNzaWRfbGVuID09IHNzaWRfbGVuIHx8IHNzaWRfbGVuID09IDApKQotCQlyZXR1cm4gMTsKLQotCWlmIChzc2lkX2xlbiA9PSAxICYmIHNzaWRbMF0gPT0gJyAnKQotCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9zdGFfY3JlYXRlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCi17CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKLQl1OCBic3NpZFtFVEhfQUxFTl0sICpwb3M7Ci0JaW50IGk7Ci0JaW50IHJldDsKKwl1OCAqYnNzaWQgPSBpZm1nZC0+YnNzaWQsICpzc2lkID0gaWZtZ2QtPnNzaWQ7CisJdTggc3NpZF9sZW4gPSBpZm1nZC0+c3NpZF9sZW47CisJdTE2IGNhcGFfbWFzayA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7CisJdTE2IGNhcGFfdmFsID0gV0xBTl9DQVBBQklMSVRZX0VTUzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSBsb2NhbC0+b3Blcl9jaGFubmVsOwogCi0jaWYgMAotCS8qIEVhc2llciB0ZXN0aW5nLCB1c2UgZml4ZWQgQlNTSUQuICovCi0JbWVtc2V0KGJzc2lkLCAweGZlLCBFVEhfQUxFTik7Ci0jZWxzZQotCS8qIEdlbmVyYXRlIHJhbmRvbSwgbm90IGJyb2FkY2FzdCwgbG9jYWxseSBhZG1pbmlzdGVyZWQgQlNTSUQuIE1peCBpbgotCSAqIG93biBNQUMgYWRkcmVzcyB0byBtYWtlIHN1cmUgdGhhdCBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgcHJvcGVyCi0JICogcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZ2V0IGRpZmZlcmVudCBCU1NJRC4gKi8KLQlnZXRfcmFuZG9tX2J5dGVzKGJzc2lkLCBFVEhfQUxFTik7Ci0JZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCi0JCWJzc2lkW2ldIF49IHNkYXRhLT5kZXYtPmRldl9hZGRyW2ldOwotCWJzc2lkWzBdICY9IH4weDAxOwotCWJzc2lkWzBdIHw9IDB4MDI7Ci0jZW5kaWYKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogQ3JlYXRpbmcgbmV3IElCU1MgbmV0d29yaywgQlNTSUQgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCk7Ci0KLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2FkZChsb2NhbCwgYnNzaWQsCi0JCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+Y2VudGVyX2ZyZXEsCi0JCQkJICAgc2RhdGEtPnUuc3RhLnNzaWQsIHNkYXRhLT51LnN0YS5zc2lkX2xlbik7Ci0JaWYgKCFic3MpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYnNzLT5iYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKLQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYnNzLT5iYW5kXTsKLQotCWlmIChsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID09IDApCi0JCWxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQgPSAxMDA7Ci0JYnNzLT5iZWFjb25faW50ID0gbG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludDsKLQlic3MtPmxhc3RfdXBkYXRlID0gamlmZmllczsKLQlic3MtPmNhcGFiaWxpdHkgPSBXTEFOX0NBUEFCSUxJVFlfSUJTUzsKLQotCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCi0JCWJzcy0+Y2FwYWJpbGl0eSB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKLQllbHNlCi0JCXNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkID0gMDsKLQotCWJzcy0+c3VwcF9yYXRlc19sZW4gPSBzYmFuZC0+bl9iaXRyYXRlczsKLQlwb3MgPSBic3MtPnN1cHBfcmF0ZXM7Ci0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKLQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOworCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRVhUX1NNRSkgJiYKKwkgICAgaWZtZ2QtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCB8CisJCQkgICAgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8CisJCQkgICAgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKSkgeworCQljYXBhX21hc2sgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisJCWlmIChzZGF0YS0+ZGVmYXVsdF9rZXkpCisJCQljYXBhX3ZhbCB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKIAl9CiAKLQlyZXQgPSBpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgaWZzdGEsIGJzcyk7Ci0JaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7Ci0JcmV0dXJuIHJldDsKLX0KKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKQorCQljaGFuID0gTlVMTDsKIAorCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKQorCQlic3NpZCA9IE5VTEw7CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0JaW50IGZvdW5kID0gMDsKLQl1OCBic3NpZFtFVEhfQUxFTl07Ci0JaW50IGFjdGl2ZV9pYnNzOwotCi0JaWYgKGlmc3RhLT5zc2lkX2xlbiA9PSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWFjdGl2ZV9pYnNzID0gaWVlZTgwMjExX3N0YV9hY3RpdmVfaWJzcyhzZGF0YSk7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN0YV9maW5kX2lic3MgKGFjdGl2ZV9pYnNzPSVkKVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYWN0aXZlX2lic3MpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmbG9jYWwtPmJzc19saXN0LCBsaXN0KSB7Ci0JCWlmIChpZnN0YS0+c3NpZF9sZW4gIT0gYnNzLT5zc2lkX2xlbiB8fAotCQkgICAgbWVtY21wKGlmc3RhLT5zc2lkLCBic3MtPnNzaWQsIGJzcy0+c3NpZF9sZW4pICE9IDAKLQkJICAgIHx8ICEoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpKQotCQkJY29udGludWU7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgIGJzc2lkPSVwTSBmb3VuZFxuIiwgYnNzLT5ic3NpZCk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KLQkJbWVtY3B5KGJzc2lkLCBic3MtPmJzc2lkLCBFVEhfQUxFTik7Ci0JCWZvdW5kID0gMTsKLQkJaWYgKGFjdGl2ZV9pYnNzIHx8IG1lbWNtcChic3NpZCwgaWZzdGEtPmJzc2lkLCBFVEhfQUxFTikgIT0gMCkKLQkJCWJyZWFrOworCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpIHsKKwkJc3NpZCA9IE5VTEw7CisJCXNzaWRfbGVuID0gMDsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7CiAKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCWlmIChmb3VuZCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgIHN0YV9maW5kX2lic3M6IHNlbGVjdGVkICVwTSBjdXJyZW50ICIKLQkJICAgICAgICIlcE1cbiIsIGJzc2lkLCBpZnN0YS0+YnNzaWQpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCisJYnNzID0gKHZvaWQgKiljZmc4MDIxMV9nZXRfYnNzKGxvY2FsLT5ody53aXBoeSwgY2hhbiwKKwkJCQkgICAgICAgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLAorCQkJCSAgICAgICBjYXBhX21hc2ssIGNhcGFfdmFsKTsKIAotCWlmIChmb3VuZCAmJiBtZW1jbXAoaWZzdGEtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pICE9IDApIHsKLQkJaW50IHJldDsKLQkJaW50IHNlYXJjaF9mcmVxOwotCi0JCWlmIChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUwpCi0JCQlzZWFyY2hfZnJlcSA9IGJzcy0+ZnJlcTsKKwlpZiAoYnNzKSB7CisJCWllZWU4MDIxMV9zZXRfZnJlcShzZGF0YSwgYnNzLT5jYnNzLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKKwkJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9TU0lEX1NFVCkpCisJCQlpZWVlODAyMTFfc3RhX3NldF9zc2lkKHNkYXRhLCBic3MtPnNzaWQsCisJCQkJCSAgICAgICBic3MtPnNzaWRfbGVuKTsKKwkJaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc2RhdGEsIGJzcy0+Y2Jzcy5ic3NpZCk7CisJCWllZWU4MDIxMV9zdGFfZGVmX3dtbV9wYXJhbXMoc2RhdGEsIGJzcy0+c3VwcF9yYXRlc19sZW4sCisJCQkJCQkgICAgYnNzLT5zdXBwX3JhdGVzKTsKKwkJaWYgKHNkYXRhLT51Lm1nZC5tZnAgPT0gSUVFRTgwMjExX01GUF9SRVFVSVJFRCkKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyB8PSBJRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEOwogCQllbHNlCi0JCQlzZWFyY2hfZnJlcSA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOwotCi0JCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBic3NpZCwgc2VhcmNoX2ZyZXEsCi0JCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwotCQlpZiAoIWJzcykKLQkJCWdvdG8gZG9udF9qb2luOwotCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogU2VsZWN0ZWQgSUJTUyBCU1NJRCAlcE0iCi0JCSAgICAgICAiIGJhc2VkIG9uIGNvbmZpZ3VyZWQgU1NJRFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGJzc2lkKTsKLQkJcmV0ID0gaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsIGlmc3RhLCBic3MpOwotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLWRvbnRfam9pbjoKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIgICBkaWQgbm90IHRyeSB0byBqb2luIGlic3NcbiIpOwotI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCi0KLQkvKiBTZWxlY3RlZCBJQlNTIG5vdCBmb3VuZCBpbiBjdXJyZW50IHNjYW4gcmVzdWx0cyAtIHRyeSB0byBzY2FuICovCi0JaWYgKGlmc3RhLT5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQgJiYKLQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKSB7Ci0JCW1vZF90aW1lcigmaWZzdGEtPnRpbWVyLCBqaWZmaWVzICsKLQkJCQkgICAgICBJRUVFODAyMTFfSUJTU19NRVJHRV9JTlRFUlZBTCk7Ci0JfSBlbHNlIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxvY2FsLT5sYXN0X3NjYW5fY29tcGxldGVkICsKLQkJCSAgICAgIElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyaWdnZXIgbmV3IHNjYW4gdG8gZmluZCBhbiBJQlNTIHRvICIKLQkJICAgICAgICJqb2luXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsIGlmc3RhLT5zc2lkLAotCQkJCQkgICAgICBpZnN0YS0+c3NpZF9sZW4pOwotCX0gZWxzZSBpZiAoaWZzdGEtPnN0YXRlICE9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX0pPSU5FRCkgewotCQlpbnQgaW50ZXJ2YWwgPSBJRUVFODAyMTFfU0NBTl9JTlRFUlZBTDsKLQotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZnN0YS0+aWJzc19qb2luX3JlcSArCi0JCQkgICAgICAgSUVFRTgwMjExX0lCU1NfSk9JTl9USU1FT1VUKSkgewotCQkJaWYgKChpZnN0YS0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTKSAmJgotCQkJICAgICghKGxvY2FsLT5vcGVyX2NoYW5uZWwtPmZsYWdzICYKLQkJCQkJSUVFRTgwMjExX0NIQU5fTk9fSUJTUykpKQotCQkJCXJldHVybiBpZWVlODAyMTFfc3RhX2NyZWF0ZV9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JCQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUykgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSUJTUyBub3QgYWxsb3dlZCBvbiIKLQkJCQkgICAgICAgIiAlZCBNSHpcbiIsIHNkYXRhLT5kZXYtPm5hbWUsCi0JCQkJICAgICAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKLQkJCX0KLQotCQkJLyogTm8gSUJTUyBmb3VuZCAtIGRlY3JlYXNlIHNjYW4gaW50ZXJ2YWwgYW5kIGNvbnRpbnVlCi0JCQkgKiBzY2FubmluZy4gKi8KLQkJCWludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVzsKLQkJfQotCi0JCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX1NFQVJDSDsKLQkJbW9kX3RpbWVyKCZpZnN0YS0+dGltZXIsIGppZmZpZXMgKyBpbnRlcnZhbCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YV9jb25maWdfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLCAqc2VsZWN0ZWQgPSBOVUxMOwotCWludCB0b3BfcnNzaSA9IDAsIGZyZXE7Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JZnJlcSA9IGxvY2FsLT5vcGVyX2NoYW5uZWwtPmNlbnRlcl9mcmVxOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmbG9jYWwtPmJzc19saXN0LCBsaXN0KSB7Ci0JCWlmICghKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9FU1MpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKChpZnN0YS0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMIHwKLQkJCUlFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAotCQkJSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMKSkgJiYKLQkJICAgICghIShic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkgXgotCQkgICAgICEhc2RhdGEtPmRlZmF1bHRfa2V5KSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTCkgJiYKLQkJICAgIGJzcy0+ZnJlcSAhPSBmcmVxKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCkgJiYKLQkJICAgIG1lbWNtcChic3MtPmJzc2lkLCBpZnN0YS0+YnNzaWQsIEVUSF9BTEVOKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTCkgJiYKLQkJICAgICFpZWVlODAyMTFfc3RhX21hdGNoX3NzaWQoaWZzdGEsIGJzcy0+c3NpZCwgYnNzLT5zc2lkX2xlbikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIXNlbGVjdGVkIHx8IHRvcF9yc3NpIDwgYnNzLT5zaWduYWwpIHsKLQkJCXNlbGVjdGVkID0gYnNzOwotCQkJdG9wX3Jzc2kgPSBic3MtPnNpZ25hbDsKLQkJfQotCX0KLQlpZiAoc2VsZWN0ZWQpCi0JCWF0b21pY19pbmMoJnNlbGVjdGVkLT51c2Vycyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0KLQlpZiAoc2VsZWN0ZWQpIHsKLQkJaWVlZTgwMjExX3NldF9mcmVxKHNkYXRhLCBzZWxlY3RlZC0+ZnJlcSk7Ci0JCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfU1NJRF9TRVQpKQotCQkJaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzZGF0YSwgc2VsZWN0ZWQtPnNzaWQsCi0JCQkJCSAgICAgICBzZWxlY3RlZC0+c3NpZF9sZW4pOwotCQlpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzZGF0YSwgc2VsZWN0ZWQtPmJzc2lkKTsKLQkJaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzZGF0YSwgc2VsZWN0ZWQpOworCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX01GUF9FTkFCTEVEOwogCiAJCS8qIFNlbmQgb3V0IGRpcmVjdCBwcm9iZSBpZiBubyBwcm9iZSByZXNwIHdhcyByZWNlaXZlZCBvcgogCQkgKiB0aGUgb25lIHdlIGhhdmUgaXMgb3V0ZGF0ZWQKIAkJICovCi0JCWlmICghc2VsZWN0ZWQtPmxhc3RfcHJvYmVfcmVzcCB8fAotCQkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBzZWxlY3RlZC0+bGFzdF9wcm9iZV9yZXNwCisJCWlmICghYnNzLT5sYXN0X3Byb2JlX3Jlc3AgfHwKKwkJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT5sYXN0X3Byb2JlX3Jlc3AKIAkJCQkJKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKLQkJCWlmc3RhLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU7CisJCQlpZm1nZC0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFOwogCQllbHNlCi0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFOworCQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKIAotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgc2VsZWN0ZWQpOwotCQlpZWVlODAyMTFfc3RhX3Jlc2V0X2F1dGgoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJCWllZWU4MDIxMV9zdGFfcmVzZXRfYXV0aChzZGF0YSk7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7Ci0JCWlmIChpZnN0YS0+YXNzb2Nfc2Nhbl90cmllcyA8IElFRUU4MDIxMV9BU1NPQ19TQ0FOU19NQVhfVFJJRVMpIHsKLQkJCWlmc3RhLT5hc3NvY19zY2FuX3RyaWVzKys7Ci0JCQlpZiAoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKQotCQkJCWllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCBOVUxMLCAwKTsKKwkJaWYgKGlmbWdkLT5hc3NvY19zY2FuX3RyaWVzIDwgSUVFRTgwMjExX0FTU09DX1NDQU5TX01BWF9UUklFUykgeworCQkJaWZtZ2QtPmFzc29jX3NjYW5fdHJpZXMrKzsKKwkJCS8qIFhYWCBtYXliZSByYWN5PyAqLworCQkJaWYgKGxvY2FsLT5zY2FuX3JlcSkKKwkJCQlyZXR1cm4gLTE7CisJCQltZW1jcHkobG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkLAorCQkJICAgICAgIGlmbWdkLT5zc2lkLCBJRUVFODAyMTFfTUFYX1NTSURfTEVOKTsKKwkJCWlmIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FVVE9fU1NJRF9TRUwpCisJCQkJbG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkX2xlbiA9IDA7CiAJCQllbHNlCi0JCQkJaWVlZTgwMjExX3N0YXJ0X3NjYW4oc2RhdGEsIGlmc3RhLT5zc2lkLAotCQkJCQkJCSBpZnN0YS0+c3NpZF9sZW4pOwotCQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKLQkJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmc3RhLT5yZXF1ZXN0KTsKLQkJfSBlbHNlCi0JCQlpZnN0YS0+c3RhdGUgPSBJRUVFODAyMTFfU1RBX01MTUVfRElTQUJMRUQ7CisJCQkJbG9jYWwtPmludF9zY2FuX3JlcS5zc2lkc1swXS5zc2lkX2xlbiA9IGlmbWdkLT5zc2lkX2xlbjsKKworCQkJaWYgKGllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCAmbG9jYWwtPmludF9zY2FuX3JlcSkpCisJCQkJaWVlZTgwMjExX3NjYW5fZmFpbGVkKGxvY2FsKTsKKworCQkJaWZtZ2QtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURTsKKwkJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmbWdkLT5yZXF1ZXN0KTsKKwkJfSBlbHNlIHsKKwkJCWlmbWdkLT5hc3NvY19zY2FuX3RyaWVzID0gMDsKKwkJCWlmbWdkLT5zdGF0ZSA9IElFRUU4MDIxMV9TVEFfTUxNRV9ESVNBQkxFRDsKKwkJfQogCX0KIAlyZXR1cm4gLTE7CiB9CkBAIC0yMjkyLDkgKzE4MzEsOSBAQAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1LnN0YS53b3JrKTsKKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsIHUubWdkLndvcmspOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCkBAIC0yMzAzLDYxICsxODQyLDYwIEBACiAJaWYgKGxvY2FsLT5zd19zY2FubmluZyB8fCBsb2NhbC0+aHdfc2Nhbm5pbmcpCiAJCXJldHVybjsKIAotCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpKQorCWlmIChXQVJOX09OKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcmV0dXJuOwotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKLQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZpZnN0YS0+c2tiX3F1ZXVlKSkpCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaWZtZ2QtPnNrYl9xdWV1ZSkpKQogCQlpZWVlODAyMTFfc3RhX3J4X3F1ZXVlZF9tZ210KHNkYXRhLCBza2IpOwogCi0JaWYgKGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfRElSRUNUX1BST0JFICYmCi0JICAgIGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVVUSEVOVElDQVRFICYmCi0JICAgIGlmc3RhLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFICYmCi0JICAgIHRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZzdGEtPnJlcXVlc3QpKSB7Ci0JCWllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCBpZnN0YS0+c2Nhbl9zc2lkLAotCQkJCSAgICAgaWZzdGEtPnNjYW5fc3NpZF9sZW4pOworCWlmIChpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0RJUkVDVF9QUk9CRSAmJgorCSAgICBpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURSAmJgorCSAgICBpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSAmJgorCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmbWdkLT5yZXF1ZXN0KSkgeworCQkvKgorCQkgKiBUaGUgY2FsbCB0byBpZWVlODAyMTFfc3RhcnRfc2NhbiBjYW4gZmFpbCBidXQgaWVlZTgwMjExX3JlcXVlc3Rfc2NhbgorCQkgKiAod2hpY2ggcXVldWVkIGllZWU4MDIxMV9zdGFfd29yaykgZGlkIG5vdCByZXR1cm4gYW4gZXJyb3IuIFRodXMsIGNhbGwKKwkJICogaWVlZTgwMjExX3NjYW5fZmFpbGVkIGhlcmUgaWYgaWVlZTgwMjExX3N0YXJ0X3NjYW4gZmFpbHMgaW4gb3JkZXIgdG8KKwkJICogbm90aWZ5IHRoZSBzY2FuIHJlcXVlc3Rlci4KKwkJICovCisJCWlmIChpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgbG9jYWwtPnNjYW5fcmVxKSkKKwkJCWllZWU4MDIxMV9zY2FuX2ZhaWxlZChsb2NhbCk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZnN0YS0+cmVxdWVzdCkpIHsKLQkJaWYgKGllZWU4MDIxMV9zdGFfY29uZmlnX2F1dGgoc2RhdGEsIGlmc3RhKSkKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX0FVVEgsICZpZm1nZC0+cmVxdWVzdCkpIHsKKwkJaWYgKGllZWU4MDIxMV9zdGFfY29uZmlnX2F1dGgoc2RhdGEpKQogCQkJcmV0dXJuOwotCQljbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfUlVOLCAmaWZzdGEtPnJlcXVlc3QpOwotCX0gZWxzZSBpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZnN0YS0+cmVxdWVzdCkpCisJCWNsZWFyX2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZm1nZC0+cmVxdWVzdCk7CisJfSBlbHNlIGlmICghdGVzdF9hbmRfY2xlYXJfYml0KElFRUU4MDIxMV9TVEFfUkVRX1JVTiwgJmlmbWdkLT5yZXF1ZXN0KSkKIAkJcmV0dXJuOwogCi0Jc3dpdGNoIChpZnN0YS0+c3RhdGUpIHsKKwlzd2l0Y2ggKGlmbWdkLT5zdGF0ZSkgewogCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0RJU0FCTEVEOgogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9ESVJFQ1RfUFJPQkU6Ci0JCWllZWU4MDIxMV9kaXJlY3RfcHJvYmUoc2RhdGEsIGlmc3RhKTsKKwkJaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzZGF0YSk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX1NUQV9NTE1FX0FVVEhFTlRJQ0FURToKLQkJaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfYXV0aGVudGljYXRlKHNkYXRhKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFOgotCQlpZWVlODAyMTFfYXNzb2NpYXRlKHNkYXRhLCBpZnN0YSk7CisJCWllZWU4MDIxMV9hc3NvY2lhdGUoc2RhdGEpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEOgotCQlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSwgaWZzdGEpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9TVEFfTUxNRV9JQlNTX1NFQVJDSDoKLQkJaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEsIGlmc3RhKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfU1RBX01MTUVfSUJTU19KT0lORUQ6Ci0JCWllZWU4MDIxMV9zdGFfbWVyZ2VfaWJzcyhzZGF0YSwgaWZzdGEpOworCQlpZWVlODAyMTFfYXNzb2NpYXRlZChzZGF0YSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CiAJCWJyZWFrOwogCX0KIAotCWlmIChpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzZGF0YSwgaWZzdGEpKSB7CisJaWYgKGllZWU4MDIxMV9wcml2YWN5X21pc21hdGNoKHNkYXRhKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHByaXZhY3kgY29uZmlndXJhdGlvbiBtaXNtYXRjaCBhbmQgIgogCQkgICAgICAgIm1peGVkLWNlbGwgZGlzYWJsZWQgLSBkaXNhc3NvY2lhdGVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwogCi0JCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCBmYWxzZSwgdHJ1ZSwKKwkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgZmFsc2UsIHRydWUsCiAJCQkJCVdMQU5fUkVBU09OX1VOU1BFQ0lGSUVEKTsKIAl9CiB9CkBAIC0yMzY2LDIwOCArMTkwNCwxNjEgQEAKIHsKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXF1ZXVlX3dvcmsoc2RhdGEtPmxvY2FsLT5ody53b3JrcXVldWUsCi0JCQkgICAmc2RhdGEtPnUuc3RhLndvcmspOworCQkJICAgJnNkYXRhLT51Lm1nZC53b3JrKTsKIH0KIAogLyogaW50ZXJmYWNlIHNldHVwICovCiB2b2lkIGllZWU4MDIxMV9zdGFfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9zdGEgKmlmc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7CiAKLQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7Ci0JSU5JVF9XT1JLKCZpZnN0YS0+d29yaywgaWVlZTgwMjExX3N0YV93b3JrKTsKLQlzZXR1cF90aW1lcigmaWZzdGEtPnRpbWVyLCBpZWVlODAyMTFfc3RhX3RpbWVyLAorCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlJTklUX1dPUksoJmlmbWdkLT53b3JrLCBpZWVlODAyMTFfc3RhX3dvcmspOworCUlOSVRfV09SSygmaWZtZ2QtPmNoc3dpdGNoX3dvcmssIGllZWU4MDIxMV9jaHN3aXRjaF93b3JrKTsKKwlJTklUX1dPUksoJmlmbWdkLT5iZWFjb25fbG9zc193b3JrLCBpZWVlODAyMTFfYmVhY29uX2xvc3Nfd29yayk7CisJc2V0dXBfdGltZXIoJmlmbWdkLT50aW1lciwgaWVlZTgwMjExX3N0YV90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZzdGEtPnNrYl9xdWV1ZSk7CisJc2V0dXBfdGltZXIoJmlmbWdkLT5jaHN3aXRjaF90aW1lciwgaWVlZTgwMjExX2Noc3dpdGNoX3RpbWVyLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIHNkYXRhKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZpZm1nZC0+c2tiX3F1ZXVlKTsKIAotCWlmc3RhLT5jYXBhYiA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7Ci0JaWZzdGEtPmF1dGhfYWxncyA9IElFRUU4MDIxMV9BVVRIX0FMR19PUEVOIHwKKwlpZm1nZC0+Y2FwYWIgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOworCWlmbWdkLT5hdXRoX2FsZ3MgPSBJRUVFODAyMTFfQVVUSF9BTEdfT1BFTiB8CiAJCUlFRUU4MDIxMV9BVVRIX0FMR19TSEFSRURfS0VZOwotCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NSRUFURV9JQlNTIHwKKwlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9DUkVBVEVfSUJTUyB8CiAJCUlFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUwgfAogCQlJRUVFODAyMTFfU1RBX0FVVE9fQ0hBTk5FTF9TRUw7Ci0JaWYgKGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoJnNkYXRhLT5sb2NhbC0+aHcpID49IDQpCi0JCWlmc3RhLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEOwotfQotCi0vKgotICogQWRkIGEgbmV3IElCU1Mgc3RhdGlvbiwgd2lsbCBhbHNvIGJlIGNhbGxlZCBieSB0aGUgUlggY29kZSB3aGVuLAotICogaW4gSUJTUyBtb2RlLCByZWNlaXZpbmcgYSBmcmFtZSBmcm9tIGEgeWV0LXVua25vd24gc3RhdGlvbiwgaGVuY2UKLSAqIG11c3QgYmUgY2FsbGFibGUgaW4gYXRvbWljIGNvbnRleHQuCi0gKi8KLXN0cnVjdCBzdGFfaW5mbyAqaWVlZTgwMjExX2lic3NfYWRkX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJdTggKmJzc2lkLHU4ICphZGRyLCB1NjQgc3VwcF9yYXRlcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQlpbnQgYmFuZCA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQ7Ci0KLQkvKiBUT0RPOiBDb3VsZCBjb25zaWRlciByZW1vdmluZyB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyeSBhbmQKLQkgKiBhbGxvdyBuZXcgb25lIHRvIGJlIGFkZGVkLiAqLwotCWlmIChsb2NhbC0+bnVtX3N0YSA+PSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMpIHsKLQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyByb29tIGZvciBhIG5ldyBJQlNTIFNUQSAiCi0JCQkgICAgICAgImVudHJ5ICVwTVxuIiwgc2RhdGEtPmRldi0+bmFtZSwgYWRkcik7Ci0JCX0KLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgc2RhdGEtPnUuc3RhLmJzc2lkKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICIlczogQWRkaW5nIG5ldyBJQlNTIHN0YXRpb24gJXBNIChkZXY9JXMpXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIGFkZHIsIHNkYXRhLT5kZXYtPm5hbWUpOwotI2VuZGlmCi0KLQlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzdGEpCi0JCXJldHVybiBOVUxMOwotCi0Jc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEhPUklaRUQpOwotCi0JLyogbWFrZSBzdXJlIG1hbmRhdG9yeSByYXRlcyBhcmUgYWx3YXlzIGFkZGVkICovCi0Jc3RhLT5zdGEuc3VwcF9yYXRlc1tiYW5kXSA9IHN1cHBfcmF0ZXMgfAotCQkJaWVlZTgwMjExX21hbmRhdG9yeV9yYXRlcyhsb2NhbCwgYmFuZCk7Ci0KLQlyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0YSk7Ci0KLQlpZiAoc3RhX2luZm9faW5zZXJ0KHN0YSkpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIHN0YTsKKwlpZiAoc2RhdGEtPmxvY2FsLT5ody5xdWV1ZXMgPj0gNCkKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQ7CiB9CiAKIC8qIGNvbmZpZ3VyYXRpb24gaG9va3MgKi8KLXZvaWQgaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEpCit2b2lkIGllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJaWYgKFdBUk5fT04oc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQogCQlyZXR1cm47CiAKLQlpZiAoKGlmc3RhLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX0JTU0lEX1NFVCB8CisJaWYgKChpZm1nZC0+ZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQgfAogCQkJICAgICBJRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMKSkgJiYKLQkgICAgKGlmc3RhLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX1NTSURfU0VUIHwKKwkgICAgKGlmbWdkLT5mbGFncyAmIChJRUVFODAyMTFfU1RBX1NTSURfU0VUIHwKIAkJCSAgICAgSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMKSkpIHsKIAotCQlpZiAoaWZzdGEtPnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEKQotCQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgaWZzdGEsIHRydWUsIHRydWUsCisJCWlmIChpZm1nZC0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpCisJCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCB0cnVlLCB0cnVlLAogCQkJCQkgICAgICAgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcpOwogCi0JCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmc3RhLT5yZXF1ZXN0KTsKLQkJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmaWZzdGEtPndvcmspOworCQlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0VYVF9TTUUpIHx8CisJCSAgICBpZm1nZC0+c3RhdGUgIT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURSkKKwkJCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfQVVUSCwgJmlmbWdkLT5yZXF1ZXN0KTsKKwkJZWxzZSBpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9FWFRfU01FKQorCQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9SVU4sICZpZm1nZC0+cmVxdWVzdCk7CisJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT53b3JrKTsKIAl9CiB9CiAKLWludCBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgbGVuKQoraW50IGllZWU4MDIxMV9zdGFfY29tbWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCWlmIChsZW4gPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQotCWlmIChpZnN0YS0+c3NpZF9sZW4gIT0gbGVuIHx8IG1lbWNtcChpZnN0YS0+c3NpZCwgc3NpZCwgbGVuKSAhPSAwKSB7Ci0JCW1lbXNldChpZnN0YS0+c3NpZCwgMCwgc2l6ZW9mKGlmc3RhLT5zc2lkKSk7Ci0JCW1lbWNweShpZnN0YS0+c3NpZCwgc3NpZCwgbGVuKTsKLQkJaWZzdGEtPnNzaWRfbGVuID0gbGVuOwotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7Ci0JfQotCi0JaWYgKGxlbikKLQkJaWZzdGEtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7CisJaWYgKGlmbWdkLT5zc2lkX2xlbikKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7CiAJZWxzZQotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfU1NJRF9TRVQ7Ci0KLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DICYmCi0JICAgICEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQpKSB7Ci0JCWlmc3RhLT5pYnNzX2pvaW5fcmVxID0gamlmZmllczsKLQkJaWZzdGEtPnN0YXRlID0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfU0VBUkNIOwotCQlyZXR1cm4gaWVlZTgwMjExX3N0YV9maW5kX2lic3Moc2RhdGEsIGlmc3RhKTsKLQl9CisJCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9TU0lEX1NFVDsKIAogCXJldHVybiAwOwogfQogCitpbnQgaWVlZTgwMjExX3N0YV9zZXRfc3NpZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgY2hhciAqc3NpZCwgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOworCisJaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCisJCXJldHVybiAtRUlOVkFMOworCisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCisJaWYgKGlmbWdkLT5zc2lkX2xlbiAhPSBsZW4gfHwgbWVtY21wKGlmbWdkLT5zc2lkLCBzc2lkLCBsZW4pICE9IDApIHsKKwkJLyoKKwkJICogRG8gbm90IHVzZSByZWFzc29jaWF0aW9uIGlmIFNTSUQgaXMgY2hhbmdlZCAoZGlmZmVyZW50IEVTUykuCisJCSAqLworCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJFVl9CU1NJRF9TRVQ7CisJCW1lbXNldChpZm1nZC0+c3NpZCwgMCwgc2l6ZW9mKGlmbWdkLT5zc2lkKSk7CisJCW1lbWNweShpZm1nZC0+c3NpZCwgc3NpZCwgbGVuKTsKKwkJaWZtZ2QtPnNzaWRfbGVuID0gbGVuOworCX0KKworCXJldHVybiBpZWVlODAyMTFfc3RhX2NvbW1pdChzZGF0YSk7Cit9CisKIGludCBpZWVlODAyMTFfc3RhX2dldF9zc2lkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICpzc2lkLCBzaXplX3QgKmxlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCW1lbWNweShzc2lkLCBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKLQkqbGVuID0gaWZzdGEtPnNzaWRfbGVuOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCW1lbWNweShzc2lkLCBpZm1nZC0+c3NpZCwgaWZtZ2QtPnNzaWRfbGVuKTsKKwkqbGVuID0gaWZtZ2QtPnNzaWRfbGVuOwogCXJldHVybiAwOwogfQogCiBpbnQgaWVlZTgwMjExX3N0YV9zZXRfYnNzaWQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7Ci0JaW50IHJlczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKKwlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihic3NpZCkpIHsKKwkJbWVtY3B5KGlmbWdkLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQlNTSURfU0VUOworCX0gZWxzZSB7CisJCW1lbXNldChpZm1nZC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKKwkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0JTU0lEX1NFVDsKKwl9CiAKLQlpZiAobWVtY21wKGlmc3RhLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSAhPSAwKSB7Ci0JCW1lbWNweShpZnN0YS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTik7Ci0JCXJlcyA9IDA7Ci0JCS8qCi0JCSAqIEhhY2shIFNlZSBhbHNvIGllZWU4MDIxMV9zdGFfc2V0X3NzaWQuCi0JCSAqLwotCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKLQkJCXJlcyA9IGllZWU4MDIxMV9pZl9jb25maWcoc2RhdGEsIElFRUU4MDIxMV9JRkNDX0JTU0lEKTsKLQkJaWYgKHJlcykgeworCWlmIChuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7CisJCWlmIChpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBJRUVFODAyMTFfSUZDQ19CU1NJRCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogRmFpbGVkIHRvIGNvbmZpZyBuZXcgQlNTSUQgdG8gIgogCQkJICAgICAgICJ0aGUgbG93LWxldmVsIGRyaXZlclxuIiwgc2RhdGEtPmRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gcmVzOwogCQl9CiAJfQogCi0JaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoYnNzaWQpKQotCQlpZnN0YS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQ7Ci0JZWxzZQotCQlpZnN0YS0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQlNTSURfU0VUOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGllZWU4MDIxMV9zdGFfY29tbWl0KHNkYXRhKTsKIH0KIAotaW50IGllZWU4MDIxMV9zdGFfc2V0X2V4dHJhX2llKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBjaGFyICppZSwgc2l6ZV90IGxlbikKK2ludCBpZWVlODAyMTFfc3RhX3NldF9leHRyYV9pZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgICBjb25zdCBjaGFyICppZSwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCi0Ja2ZyZWUoaWZzdGEtPmV4dHJhX2llKTsKKwlrZnJlZShpZm1nZC0+ZXh0cmFfaWUpOwogCWlmIChsZW4gPT0gMCkgewotCQlpZnN0YS0+ZXh0cmFfaWUgPSBOVUxMOwotCQlpZnN0YS0+ZXh0cmFfaWVfbGVuID0gMDsKKwkJaWZtZ2QtPmV4dHJhX2llID0gTlVMTDsKKwkJaWZtZ2QtPmV4dHJhX2llX2xlbiA9IDA7CiAJCXJldHVybiAwOwogCX0KLQlpZnN0YS0+ZXh0cmFfaWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpZnN0YS0+ZXh0cmFfaWUpIHsKLQkJaWZzdGEtPmV4dHJhX2llX2xlbiA9IDA7CisJaWZtZ2QtPmV4dHJhX2llID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghaWZtZ2QtPmV4dHJhX2llKSB7CisJCWlmbWdkLT5leHRyYV9pZV9sZW4gPSAwOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtY3B5KGlmc3RhLT5leHRyYV9pZSwgaWUsIGxlbik7Ci0JaWZzdGEtPmV4dHJhX2llX2xlbiA9IGxlbjsKKwltZW1jcHkoaWZtZ2QtPmV4dHJhX2llLCBpZSwgbGVuKTsKKwlpZm1nZC0+ZXh0cmFfaWVfbGVuID0gbGVuOwogCXJldHVybiAwOwogfQogCiBpbnQgaWVlZTgwMjExX3N0YV9kZWF1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0aW5nIGJ5IGxvY2FsIGNob2ljZSAocmVhc29uPSVkKVxuIiwKIAkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVhc29uKTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGlmc3RhLCB0cnVlLCB0cnVlLCByZWFzb24pOworCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUsIHRydWUsIHJlYXNvbik7CiAJcmV0dXJuIDA7CiB9CiAKIGludCBpZWVlODAyMTFfc3RhX2Rpc2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTE2IHJlYXNvbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGluZyBieSBsb2NhbCBjaG9pY2UgKHJlYXNvbj0lZClcbiIsCiAJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlYXNvbik7CkBAIC0yNTc1LDEwICsyMDY2LDEwIEBACiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghKGlmc3RhLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCi0JCXJldHVybiAtMTsKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0FTU09DSUFURUQpKQorCQlyZXR1cm4gLUVOT0xJTks7CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBpZnN0YSwgZmFsc2UsIHRydWUsIHJlYXNvbik7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgZmFsc2UsIHRydWUsIHJlYXNvbik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1ODYsMTUgKzIwNzcsNiBAQAogdm9pZCBpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7Ci0KLQlpZiAoc2RhdGEgJiYgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7Ci0JCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQkJaWYgKCEoaWZzdGEtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9CU1NJRF9TRVQpIHx8Ci0JCSAgICAoIShpZnN0YS0+c3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEKSAmJgotCQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKSkKLQkJCWllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHNkYXRhLCBpZnN0YSk7Ci0JfQogCiAJLyogUmVzdGFydCBTVEEgdGltZXJzICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtMjYyMywxMiArMjEwNSwxNSBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsCiAJCQkgICAgIGR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykKIAkJcmV0dXJuOwogCi0JbG9jYWwtPmh3LmNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKKwkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKIAorCWxvY2FsLT5ody5jb25mLmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOwogCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CiB9CiAKQEAgLTI2MzgsMyArMjEyMywzNiBAQAogCiAJcXVldWVfd29yayhsb2NhbC0+aHcud29ya3F1ZXVlLCAmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOwogfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX251bGxmdW5jKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgaW50IHBvd2Vyc2F2ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpudWxsZnVuYzsKKwlfX2xlMTYgZmM7CisKKwlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCisJCXJldHVybjsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbGZ1bmMgIgorCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMjQpOworCW1lbXNldChudWxsZnVuYywgMCwgMjQpOworCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAorCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOworCWlmIChwb3dlcnNhdmUpCisJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKKwludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGZjOworCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIDApOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3BtLmMgYi9uZXQvbWFjODAyMTEvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjczMDIzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL3BtLmMKQEAgLTAsMCArMSwxNzkgQEAKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CisKKyNpbmNsdWRlICJpZWVlODAyMTFfaS5oIgorI2luY2x1ZGUgImxlZC5oIgorCitpbnQgX19pZWVlODAyMTFfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKGh3LAorCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1NVU1BFTkQpOworCisJZmx1c2hfd29ya3F1ZXVlKGxvY2FsLT5ody53b3JrcXVldWUpOworCisJLyogZGlzYWJsZSBrZXlzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQorCQlpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHNkYXRhKTsKKworCS8qIFRlYXIgZG93biBhZ2dyZWdhdGlvbiBzZXNzaW9ucyAqLworCisJcmN1X3JlYWRfbG9jaygpOworCisJaWYgKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9TVVNQRU5EKTsKKwkJCWllZWU4MDIxMV9zdGFfdGVhcl9kb3duX0JBX3Nlc3Npb25zKHN0YSk7CisJCX0KKwl9CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCS8qIHJlbW92ZSBTVEFzICovCisJaWYgKGxvY2FsLT5vcHMtPnN0YV9ub3RpZnkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQkJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCisJCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKKwkJCQkJICAgICB1LmFwKTsKKworCQkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeShodywgJnNkYXRhLT52aWYsCisJCQkJU1RBX05PVElGWV9SRU1PVkUsICZzdGEtPnN0YSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJfQorCisJLyogcmVtb3ZlIGFsbCBpbnRlcmZhY2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IgJiYKKwkJICAgIG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpIHsKKwkJCWNvbmYudmlmID0gJnNkYXRhLT52aWY7CisJCQljb25mLnR5cGUgPSBzZGF0YS0+dmlmLnR5cGU7CisJCQljb25mLm1hY19hZGRyID0gc2RhdGEtPmRldi0+ZGV2X2FkZHI7CisJCQlsb2NhbC0+b3BzLT5yZW1vdmVfaW50ZXJmYWNlKGh3LCAmY29uZik7CisJCX0KKwl9CisKKwkvKiBmbHVzaCBhZ2FpbiwgaW4gY2FzZSBkcml2ZXIgcXVldWVkIHdvcmsgKi8KKwlmbHVzaF93b3JrcXVldWUobG9jYWwtPmh3LndvcmtxdWV1ZSk7CisKKwkvKiBzdG9wIGhhcmR3YXJlICovCisJaWYgKGxvY2FsLT5vcGVuX2NvdW50KSB7CisJCWllZWU4MDIxMV9sZWRfcmFkaW8obG9jYWwsIGZhbHNlKTsKKwkJbG9jYWwtPm9wcy0+c3RvcChodyk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgX19pZWVlODAyMTFfcmVzdW1lKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIGNvbmY7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVzOworCisJLyogcmVzdGFydCBoYXJkd2FyZSAqLworCWlmIChsb2NhbC0+b3Blbl9jb3VudCkgeworCQlyZXMgPSBsb2NhbC0+b3BzLT5zdGFydChodyk7CisKKwkJaWVlZTgwMjExX2xlZF9yYWRpbyhsb2NhbCwgaHctPmNvbmYucmFkaW9fZW5hYmxlZCk7CisJfQorCisJLyogYWRkIGludGVyZmFjZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiAmJgorCQkgICAgbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkgeworCQkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKKwkJCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKKwkJCWNvbmYubWFjX2FkZHIgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKKwkJCXJlcyA9IGxvY2FsLT5vcHMtPmFkZF9pbnRlcmZhY2UoaHcsICZjb25mKTsKKwkJfQorCX0KKworCS8qIGFkZCBTVEFzIGJhY2sgKi8KKwlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisJCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCQkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLAorCQkJCQkgICAgIHUuYXApOworCisJCQlsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KGh3LCAmc2RhdGEtPnZpZiwKKwkJCQlTVEFfTk9USUZZX0FERCwgJnN0YS0+c3RhKTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwl9CisKKwkvKiBDbGVhciBTdXNwZW5kIHN0YXRlIHNvIHRoYXQgQUREQkEgcmVxdWVzdHMgY2FuIGJlIHByb2Nlc3NlZCAqLworCisJcmN1X3JlYWRfbG9jaygpOworCisJaWYgKGh3LT5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKKwkJCWNsZWFyX3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1NVU1BFTkQpOworCQl9CisJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkvKiBhZGQgYmFjayBrZXlzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQorCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJCWllZWU4MDIxMV9lbmFibGVfa2V5cyhzZGF0YSk7CisKKwkvKiBzZXR1cCBSVFMgdGhyZXNob2xkICovCisJaWYgKGxvY2FsLT5vcHMtPnNldF9ydHNfdGhyZXNob2xkKQorCQlsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZChodywgbG9jYWwtPnJ0c190aHJlc2hvbGQpOworCisJLyogcmVjb25maWd1cmUgaGFyZHdhcmUgKi8KKwlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCB+MCk7CisKKwluZXRpZl9hZGRyX2xvY2tfYmgobG9jYWwtPm1kZXYpOworCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKKwluZXRpZl9hZGRyX3VubG9ja19iaChsb2NhbC0+bWRldik7CisKKwkvKiBGaW5hbGx5IGFsc28gcmVjb25maWd1cmUgYWxsIHRoZSBCU1MgaW5mb3JtYXRpb24gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJdTMyIGNoYW5nZWQgPSB+MDsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJY29udGludWU7CisJCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCS8qIGRpc2FibGUgYmVhY29uIGNoYW5nZSBiaXRzICovCisJCQljaGFuZ2VkICY9IH5JRUVFODAyMTFfSUZDQ19CRUFDT047CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgorCQkJV0FSTl9PTihpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLCBjaGFuZ2VkKSk7CisJCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgfjApOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfV0RTOgorCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOgorCQkJLyogaWdub3JlIHZpcnR1YWwgKi8KKwkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOgorCQljYXNlIF9fTkw4MDIxMV9JRlRZUEVfQUZURVJfTEFTVDoKKwkJCVdBUk5fT04oMSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWllZWU4MDIxMV93YWtlX3F1ZXVlc19ieV9yZWFzb24oaHcsCisJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fU1VTUEVORCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9yYXRlLmMgYi9uZXQvbWFjODAyMTEvcmF0ZS5jCmluZGV4IDNmYTdhYjIuLjQ2NDFmMDAgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yYXRlLmMKKysrIGIvbmV0L21hYzgwMjExL3JhdGUuYwpAQCAtMjE5LDEwICsyMTksMTIgQEAKIAkJaW5mby0+Y29udHJvbC5yYXRlc1tpXS5jb3VudCA9IDE7CiAJfQogCi0JaWYgKHN0YSAmJiBzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID4gLTEpCisJaWYgKHN0YSAmJiBzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID4gLTEpIHsKIAkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPSBzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4OwotCWVsc2UKKwl9IGVsc2UgewogCQlyZWYtPm9wcy0+Z2V0X3JhdGUocmVmLT5wcml2LCBpc3RhLCBwcml2X3N0YSwgdHhyYyk7CisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9SQ0FMR087CisJfQogCiAJLyoKIAkgKiB0cnkgdG8gZW5mb3JjZSB0aGUgbWF4aW11bSByYXRlIHRoZSB1c2VyIHdhbnRlZApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuaCBiL25ldC9tYWM4MDIxMS9yYXRlLmgKaW5kZXggOTI4ZGE2Mi4uMmFiNWFkOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JhdGUuaAorKysgYi9uZXQvbWFjODAyMTEvcmF0ZS5oCkBAIC00NCw4ICs0NCwxMCBAQAogCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYgPSBsb2NhbC0+cmF0ZV9jdHJsOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICppc3RhID0gJnN0YS0+c3RhOwogCXZvaWQgKnByaXZfc3RhID0gc3RhLT5yYXRlX2N0cmxfcHJpdjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKLQlyZWYtPm9wcy0+dHhfc3RhdHVzKHJlZi0+cHJpdiwgc2JhbmQsIGlzdGEsIHByaXZfc3RhLCBza2IpOworCWlmIChsaWtlbHkoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfSU5URkxfUkNBTEdPKSkKKwkJcmVmLT5vcHMtPnR4X3N0YXR1cyhyZWYtPnByaXYsIHNiYW5kLCBpc3RhLCBwcml2X3N0YSwgc2tiKTsKIH0KIAogCkBAIC02Miw2ICs2NCwxOCBAQAogCXJlZi0+b3BzLT5yYXRlX2luaXQocmVmLT5wcml2LCBzYmFuZCwgaXN0YSwgcHJpdl9zdGEpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmF0ZV9jb250cm9sX3JhdGVfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCQkgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUzMiBjaGFuZ2VkKQoreworCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYgPSBsb2NhbC0+cmF0ZV9jdHJsOworCXN0cnVjdCBpZWVlODAyMTFfc3RhICppc3RhID0gJnN0YS0+c3RhOworCXZvaWQgKnByaXZfc3RhID0gc3RhLT5yYXRlX2N0cmxfcHJpdjsKKworCWlmIChyZWYtPm9wcy0+cmF0ZV91cGRhdGUpCisJCXJlZi0+b3BzLT5yYXRlX3VwZGF0ZShyZWYtPnByaXYsIHNiYW5kLCBpc3RhLAorCQkJCSAgICAgIHByaXZfc3RhLCBjaGFuZ2VkKTsKK30KIAogc3RhdGljIGlubGluZSB2b2lkICpyYXRlX2NvbnRyb2xfYWxsb2Nfc3RhKHN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYsCiAJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jCmluZGV4IDcxNzVhZTguLjY0ZWJlNjYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9yeC5jCkBAIC04Niw4ICs4Niw3IEBACiAKIAlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKQogCQlsZW4gKz0gODsKLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQiB8fAotCSAgICBsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pCiAJCWxlbiArPSAxOwogCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9JU0VfREJNKQogCQlsZW4gKz0gMTsKQEAgLTEwMiw3ICsxMDEsNyBAQAogCXJldHVybiBsZW47CiB9CiAKLS8qKgorLyoKICAqIGllZWU4MDIxMV9hZGRfcnhfcmFkaW90YXBfaGVhZGVyIC0gYWRkIHJhZGlvdGFwIGhlYWRlcgogICoKICAqIGFkZCBhIHJhZGlvdGFwIGhlYWRlciBjb250YWluaW5nIGFsbCB0aGUgZmllbGRzIHdoaWNoIHRoZSBoYXJkd2FyZSBwcm92aWRlZC4KQEAgLTE0Myw2ICsxNDIsOCBAQAogCS8qIElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUyAqLwogCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTKQogCQkqcG9zIHw9IElFRUU4MDIxMV9SQURJT1RBUF9GX0ZDUzsKKwlpZiAoc3RhdHVzLT5mbGFnICYgKFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkMgfCBSWF9GTEFHX0ZBSUxFRF9QTENQX0NSQykpCisJCSpwb3MgfD0gSUVFRTgwMjExX1JBRElPVEFQX0ZfQkFERkNTOwogCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1NIT1JUUFJFKQogCQkqcG9zIHw9IElFRUU4MDIxMV9SQURJT1RBUF9GX1NIT1JUUFJFOwogCXBvcysrOwpAQCAtMTU4LDcgKzE1OSw3IEBACiAJCSAqLwogCQkqcG9zID0gMDsKIAl9IGVsc2UgewotCQlydGhkci0+aXRfcHJlc2VudCB8PSAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfUkFURSk7CisJCXJ0aGRyLT5pdF9wcmVzZW50IHw9IGNwdV90b19sZTMyKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpOwogCQkqcG9zID0gcmF0ZS0+Yml0cmF0ZSAvIDU7CiAJfQogCXBvcysrOwpAQCAtMTk5LDIzICsyMDAsMTQgQEAKIAkqcG9zID0gc3RhdHVzLT5hbnRlbm5hOwogCXBvcysrOwogCi0JLyogSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTCAqLwotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCKSB7Ci0JCSpwb3MgPSBzdGF0dXMtPnNpZ25hbDsKLQkJcnRoZHItPml0X3ByZXNlbnQgfD0KLQkJCWNwdV90b19sZTMyKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTCk7Ci0JCXBvcysrOwotCX0KLQogCS8qIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlROT0lTRSBpcyBub3QgdXNlZCAqLwogCiAJLyogSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTICovCiAJLyogZW5zdXJlIDIgYnl0ZSBhbGlnbm1lbnQgZm9yIHRoZSAyIGJ5dGUgZmllbGQgYXMgcmVxdWlyZWQgKi8KIAlpZiAoKHBvcyAtICh1bnNpZ25lZCBjaGFyICopcnRoZHIpICYgMSkKIAkJcG9zKys7Ci0JLyogRklYTUU6IHdoZW4gcmFkaW90YXAgZ2V0cyBhICdiYWQgUExDUCcgZmxhZyB1c2UgaXQgaGVyZSAqLwotCWlmIChzdGF0dXMtPmZsYWcgJiAoUlhfRkxBR19GQUlMRURfRkNTX0NSQyB8IFJYX0ZMQUdfRkFJTEVEX1BMQ1BfQ1JDKSkKLQkJKihfX2xlMTYgKilwb3MgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1JBRElPVEFQX0ZfUlhfQkFERkNTKTsKKwlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19GQUlMRURfUExDUF9DUkMpCisJCSooX19sZTE2ICopcG9zIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9SQURJT1RBUF9GX1JYX0JBRFBMQ1ApOwogCXBvcyArPSAyOwogfQogCkBAIC0zNzEsMzkgKzM2Myw1MCBAQAogCXJ4LT5za2ItPnByaW9yaXR5ID0gKHRpZCA+IDcpID8gMCA6IHRpZDsKIH0KIAotc3RhdGljIHZvaWQgaWVlZTgwMjExX3ZlcmlmeV9pcF9hbGlnbm1lbnQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKKy8qKgorICogRE9DOiBQYWNrZXQgYWxpZ25tZW50CisgKgorICogRHJpdmVycyBhbHdheXMgbmVlZCB0byBwYXNzIHBhY2tldHMgdGhhdCBhcmUgYWxpZ25lZCB0byB0d28tYnl0ZSBib3VuZGFyaWVzCisgKiB0byB0aGUgc3RhY2suCisgKgorICogQWRkaXRpb25hbGx5LCBzaG91bGQsIGlmIHBvc3NpYmxlLCBhbGlnbiB0aGUgcGF5bG9hZCBkYXRhIGluIGEgd2F5IHRoYXQKKyAqIGd1YXJhbnRlZXMgdGhhdCB0aGUgY29udGFpbmVkIElQIGhlYWRlciBpcyBhbGlnbmVkIHRvIGEgZm91ci1ieXRlCisgKiBib3VuZGFyeS4gSW4gdGhlIGNhc2Ugb2YgcmVndWxhciBmcmFtZXMsIHRoaXMgc2ltcGx5IG1lYW5zIGFsaWduaW5nIHRoZQorICogcGF5bG9hZCB0byBhIGZvdXItYnl0ZSBib3VuZGFyeSAoYmVjYXVzZSBlaXRoZXIgdGhlIElQIGhlYWRlciBpcyBkaXJlY3RseQorICogY29udGFpbmVkLCBvciBJVi9SRkMxMDQyIGhlYWRlcnMgdGhhdCBoYXZlIGEgbGVuZ3RoIGRpdmlzaWJsZSBieSBmb3VyIGFyZQorICogaW4gZnJvbnQgb2YgaXQpLgorICoKKyAqIFdpdGggQS1NU0RVIGZyYW1lcywgaG93ZXZlciwgdGhlIHBheWxvYWQgZGF0YSBhZGRyZXNzIG11c3QgeWllbGQgdHdvIG1vZHVsbworICogZm91ciBiZWNhdXNlIHRoZXJlIGFyZSAxNC1ieXRlIDgwMi4zIGhlYWRlcnMgd2l0aGluIHRoZSBBLU1TRFUgZnJhbWVzIHRoYXQKKyAqIHB1c2ggdGhlIElQIGhlYWRlciBmdXJ0aGVyIGJhY2sgdG8gYSBtdWx0aXBsZSBvZiBmb3VyIGFnYWluLiBUaGFua2Z1bGx5LCB0aGUKKyAqIHNwZWNzIHdlcmUgc2FuZSBlbm91Z2ggdGhpcyB0aW1lIGFyb3VuZCB0byByZXF1aXJlIHBhZGRpbmcgZWFjaCBBLU1TRFUKKyAqIHN1YmZyYW1lIHRvIGEgbGVuZ3RoIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiBmb3VyLgorICoKKyAqIFBhZGRpbmcgbGlrZSBBdGhlcm9zIGhhcmR3YXJlIGFkZHMgd2hpY2ggaXMgaW5iZXR3ZWVuIHRoZSA4MDIuMTEgaGVhZGVyIGFuZAorICogdGhlIHBheWxvYWQgaXMgbm90IHN1cHBvcnRlZCwgdGhlIGRyaXZlciBpcyByZXF1aXJlZCB0byBtb3ZlIHRoZSA4MDIuMTEKKyAqIGhlYWRlciB0byBiZSBkaXJlY3RseSBpbiBmcm9udCBvZiB0aGUgcGF5bG9hZCBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyB2b2lkIGllZWU4MDIxMV92ZXJpZnlfYWxpZ25tZW50KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtPnNrYi0+ZGF0YTsKIAlpbnQgaGRybGVuOwogCisjaWZuZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR19QQUNLRVRfQUxJR05NRU5UCisJcmV0dXJuOworI2VuZGlmCisKKwlpZiAoV0FSTl9PTkNFKCh1bnNpZ25lZCBsb25nKXJ4LT5za2ItPmRhdGEgJiAxLAorCQkgICAgICAidW5hbGlnbmVkIHBhY2tldCBhdCAweCVwXG4iLCByeC0+c2tiLT5kYXRhKSkKKwkJcmV0dXJuOworCiAJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50KGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCXJldHVybjsKIAotCS8qCi0JICogRHJpdmVycyBhcmUgcmVxdWlyZWQgdG8gYWxpZ24gdGhlIHBheWxvYWQgZGF0YSBpbiBhIHdheSB0aGF0Ci0JICogZ3VhcmFudGVlcyB0aGF0IHRoZSBjb250YWluZWQgSVAgaGVhZGVyIGlzIGFsaWduZWQgdG8gYSBmb3VyLQotCSAqIGJ5dGUgYm91bmRhcnkuIEluIHRoZSBjYXNlIG9mIHJlZ3VsYXIgZnJhbWVzLCB0aGlzIHNpbXBseSBtZWFucwotCSAqIGFsaWduaW5nIHRoZSBwYXlsb2FkIHRvIGEgZm91ci1ieXRlIGJvdW5kYXJ5IChiZWNhdXNlIGVpdGhlcgotCSAqIHRoZSBJUCBoZWFkZXIgaXMgZGlyZWN0bHkgY29udGFpbmVkLCBvciBJVi9SRkMxMDQyIGhlYWRlcnMgdGhhdAotCSAqIGhhdmUgYSBsZW5ndGggZGl2aXNpYmxlIGJ5IGZvdXIgYXJlIGluIGZyb250IG9mIGl0LgotCSAqCi0JICogV2l0aCBBLU1TRFUgZnJhbWVzLCBob3dldmVyLCB0aGUgcGF5bG9hZCBkYXRhIGFkZHJlc3MgbXVzdAotCSAqIHlpZWxkIHR3byBtb2R1bG8gZm91ciBiZWNhdXNlIHRoZXJlIGFyZSAxNC1ieXRlIDgwMi4zIGhlYWRlcnMKLQkgKiB3aXRoaW4gdGhlIEEtTVNEVSBmcmFtZXMgdGhhdCBwdXNoIHRoZSBJUCBoZWFkZXIgZnVydGhlciBiYWNrCi0JICogdG8gYSBtdWx0aXBsZSBvZiBmb3VyIGFnYWluLiBUaGFua2Z1bGx5LCB0aGUgc3BlY3Mgd2VyZSBzYW5lCi0JICogZW5vdWdoIHRoaXMgdGltZSBhcm91bmQgdG8gcmVxdWlyZSBwYWRkaW5nIGVhY2ggQS1NU0RVIHN1YmZyYW1lCi0JICogdG8gYSBsZW5ndGggdGhhdCBpcyBhIG11bHRpcGxlIG9mIGZvdXIuCi0JICoKLQkgKiBQYWRkaW5nIGxpa2UgYXRoZXJvcyBoYXJkd2FyZSBhZGRzIHdoaWNoIGlzIGluYmV0d2VlbiB0aGUgODAyLjExCi0JICogaGVhZGVyIGFuZCB0aGUgcGF5bG9hZCBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgZHJpdmVyIGlzIHJlcXVpcmVkCi0JICogdG8gbW92ZSB0aGUgODAyLjExIGhlYWRlciBmdXJ0aGVyIGJhY2sgaW4gdGhhdCBjYXNlLgotCSAqLwogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAlpZiAocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0FNU0RVKQogCQloZHJsZW4gKz0gRVRIX0hMRU47Ci0JV0FSTl9PTl9PTkNFKCgodW5zaWduZWQgbG9uZykocngtPnNrYi0+ZGF0YSArIGhkcmxlbikpICYgMyk7Ci0jZW5kaWYKKwlXQVJOX09OQ0UoKCh1bnNpZ25lZCBsb25nKShyeC0+c2tiLT5kYXRhICsgaGRybGVuKSkgJiAzLAorCQkgICJ1bmFsaWduZWQgSVAgcGF5bG9hZCBhdCAweCVwXG4iLCByeC0+c2tiLT5kYXRhICsgaGRybGVuKTsKIH0KIAogCkBAIC00MzUsNiArNDM4LDUyIEBACiAJcmV0dXJuIFJYX0NPTlRJTlVFOwogfQogCisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2lzX3VuaWNhc3Rfcm9idXN0X21nbXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKworCWlmIChza2ItPmxlbiA8IDI0IHx8IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoaGRyKTsKK30KKworCitzdGF0aWMgaW50IGllZWU4MDIxMV9pc19tdWx0aWNhc3Rfcm9idXN0X21nbXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKworCWlmIChza2ItPmxlbiA8IDI0IHx8ICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKGhkcik7Cit9CisKKworLyogR2V0IHRoZSBCSVAga2V5IGluZGV4IGZyb20gTU1JRTsgcmV0dXJuIC0xIGlmIHRoaXMgaXMgbm90IGEgQklQIGZyYW1lICovCitzdGF0aWMgaW50IGllZWU4MDIxMV9nZXRfbW1pZV9rZXlpZHgoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbW1pZSAqbW1pZTsKKworCWlmIChza2ItPmxlbiA8IDI0ICsgc2l6ZW9mKCptbWllKSB8fAorCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5kYSkpCisJCXJldHVybiAtMTsKKworCWlmICghaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBoZHIpKQorCQlyZXR1cm4gLTE7IC8qIG5vdCBhIHJvYnVzdCBtYW5hZ2VtZW50IGZyYW1lICovCisKKwltbWllID0gKHN0cnVjdCBpZWVlODAyMTFfbW1pZSAqKQorCQkoc2tiLT5kYXRhICsgc2tiLT5sZW4gLSBzaXplb2YoKm1taWUpKTsKKwlpZiAobW1pZS0+ZWxlbWVudF9pZCAhPSBXTEFOX0VJRF9NTUlFIHx8CisJICAgIG1taWUtPmxlbmd0aCAhPSBzaXplb2YoKm1taWUpIC0gMikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIGxlMTZfdG9fY3B1KG1taWUtPmtleV9pZCk7Cit9CisKKwogc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQKIGllZWU4MDIxMV9yeF9tZXNoX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CkBAIC01NTAsMjEgKzU5OSwyMyBAQAogCWludCBoZHJsZW47CiAJaWVlZTgwMjExX3J4X3Jlc3VsdCByZXN1bHQgPSBSWF9EUk9QX1VOVVNBQkxFOwogCXN0cnVjdCBpZWVlODAyMTFfa2V5ICpzdGFrZXkgPSBOVUxMOworCWludCBtbWllX2tleWlkeCA9IC0xOwogCiAJLyoKIAkgKiBLZXkgc2VsZWN0aW9uIDEwMQogCSAqCi0JICogVGhlcmUgYXJlIHRocmVlIHR5cGVzIG9mIGtleXM6CisJICogVGhlcmUgYXJlIGZvdXIgdHlwZXMgb2Yga2V5czoKIAkgKiAgLSBHVEsgKGdyb3VwIGtleXMpCisJICogIC0gSUdUSyAoZ3JvdXAga2V5cyBmb3IgbWFuYWdlbWVudCBmcmFtZXMpCiAJICogIC0gUFRLIChwYWlyd2lzZSBrZXlzKQogCSAqICAtIFNUSyAoc3RhdGlvbi10by1zdGF0aW9uIHBhaXJ3aXNlIGtleXMpCiAJICoKIAkgKiBXaGVuIHNlbGVjdGluZyBhIGtleSwgd2UgaGF2ZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG11bHRpY2FzdAogCSAqIChpbmNsdWRpbmcgYnJvYWRjYXN0KSBhbmQgdW5pY2FzdCBmcmFtZXMsIHRoZSBsYXR0ZXIgY2FuIG9ubHkKLQkgKiB1c2UgUFRLcyBhbmQgU1RLcyB3aGlsZSB0aGUgZm9ybWVyIGFsd2F5cyB1c2UgR1RLcy4gVW5sZXNzLCBvZgotCSAqIGNvdXJzZSwgYWN0dWFsIFdFUCBrZXlzICgicHJlLVJTTkEiKSBhcmUgdXNlZCwgdGhlbiB1bmljYXN0Ci0JICogZnJhbWVzIGNhbiBhbHNvIHVzZSBrZXkgaW5kaXplcyBsaWtlIEdUS3MuIEhlbmNlLCBpZiB3ZSBkb24ndAotCSAqIGhhdmUgYSBQVEsvU1RLIHdlIGNoZWNrIHRoZSBrZXkgaW5kZXggZm9yIGEgV0VQIGtleS4KKwkgKiB1c2UgUFRLcyBhbmQgU1RLcyB3aGlsZSB0aGUgZm9ybWVyIGFsd2F5cyB1c2UgR1RLcyBhbmQgSUdUS3MuCisJICogVW5sZXNzLCBvZiBjb3Vyc2UsIGFjdHVhbCBXRVAga2V5cyAoInByZS1SU05BIikgYXJlIHVzZWQsIHRoZW4KKwkgKiB1bmljYXN0IGZyYW1lcyBjYW4gYWxzbyB1c2Uga2V5IGluZGljZXMgbGlrZSBHVEtzLiBIZW5jZSwgaWYgd2UKKwkgKiBkb24ndCBoYXZlIGEgUFRLL1NUSyB3ZSBjaGVjayB0aGUga2V5IGluZGV4IGZvciBhIFdFUCBrZXkuCiAJICoKIAkgKiBOb3RlIHRoYXQgaW4gYSByZWd1bGFyIEJTUywgbXVsdGljYXN0IGZyYW1lcyBhcmUgc2VudCBieSB0aGUKIAkgKiBBUCBvbmx5LCBhc3NvY2lhdGVkIHN0YXRpb25zIHVuaWNhc3QgdGhlIGZyYW1lIHRvIHRoZSBBUCBmaXJzdApAQCAtNTc3LDggKzYyOCwxNCBAQAogCSAqIHBvc3NpYmxlLgogCSAqLwogCi0JaWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKQotCQlyZXR1cm4gUlhfQ09OVElOVUU7CisJaWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCWlmICghaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSB8fAorCQkgICAgcngtPnN0YSA9PSBOVUxMIHx8ICF0ZXN0X3N0YV9mbGFncyhyeC0+c3RhLCBXTEFOX1NUQV9NRlApKQorCQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCQltbWllX2tleWlkeCA9IGllZWU4MDIxMV9nZXRfbW1pZV9rZXlpZHgocngtPnNrYik7CisJCWlmIChtbWllX2tleWlkeCA8IDApCisJCQlyZXR1cm4gUlhfQ09OVElOVUU7CisJfQogCiAJLyoKIAkgKiBObyBwb2ludCBpbiBmaW5kaW5nIGEga2V5IGFuZCBkZWNyeXB0aW5nIGlmIHRoZSBmcmFtZSBpcyBuZWl0aGVyCkBAIC01OTIsNiArNjQ5LDE2IEBACiAKIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmIHN0YWtleSkgewogCQlyeC0+a2V5ID0gc3Rha2V5OworCX0gZWxzZSBpZiAobW1pZV9rZXlpZHggPj0gMCkgeworCQkvKiBCcm9hZGNhc3QvbXVsdGljYXN0IHJvYnVzdCBtYW5hZ2VtZW50IGZyYW1lIC8gQklQICovCisJCWlmICgocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSAmJgorCQkgICAgKHJ4LT5zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0lWX1NUUklQUEVEKSkKKwkJCXJldHVybiBSWF9DT05USU5VRTsKKworCQlpZiAobW1pZV9rZXlpZHggPCBOVU1fREVGQVVMVF9LRVlTIHx8CisJCSAgICBtbWllX2tleWlkeCA+PSBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsgLyogdW5leHBlY3RlZCBCSVAga2V5aWR4ICovCisJCXJ4LT5rZXkgPSByY3VfZGVyZWZlcmVuY2UocngtPnNkYXRhLT5rZXlzW21taWVfa2V5aWR4XSk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogVGhlIGRldmljZSBkb2Vzbid0IGdpdmUgdXMgdGhlIElWIHNvIHdlIHdvbid0IGJlCkBAIC02NTQsNiArNzIxLDkgQEAKIAljYXNlIEFMR19DQ01QOgogCQlyZXN1bHQgPSBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZGVjcnlwdChyeCk7CiAJCWJyZWFrOworCWNhc2UgQUxHX0FFU19DTUFDOgorCQlyZXN1bHQgPSBpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2RlY3J5cHQocngpOworCQlicmVhazsKIAl9CiAKIAkvKiBlaXRoZXIgdGhlIGZyYW1lIGhhcyBiZWVuIGRlY3J5cHRlZCBvciB3aWxsIGJlIGRyb3BwZWQgKi8KQEAgLTY2Miw2ICs3MzIsMzkgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaWVlZTgwMjExX3J4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQoraWVlZTgwMjExX3J4X2hfY2hlY2tfbW9yZV9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJbG9jYWwgPSByeC0+bG9jYWw7CisJc2tiID0gcngtPnNrYjsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOworCisJaWYgKCFsb2NhbC0+cHNwb2xsaW5nKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoIWllZWU4MDIxMV9oYXNfZnJvbWRzKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCS8qIHRoaXMgaXMgbm90IGZyb20gQVAgKi8KKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gUlhfQ09OVElOVUU7CisKKwlpZiAoIWllZWU4MDIxMV9oYXNfbW9yZWRhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkvKiBBUCBoYXMgbm8gbW9yZSBmcmFtZXMgYnVmZmVyZWQgZm9yIHVzICovCisJCWxvY2FsLT5wc3BvbGxpbmcgPSBmYWxzZTsKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCX0KKworCS8qIG1vcmUgZGF0YSBiaXQgaXMgc2V0LCBsZXQncyByZXF1ZXN0IGEgbmV3IGZyYW1lIGZyb20gdGhlIEFQICovCisJaWVlZTgwMjExX3NlbmRfcHNwb2xsKGxvY2FsLCByeC0+c2RhdGEpOworCisJcmV0dXJuIFJYX0NPTlRJTlVFOworfQorCiBzdGF0aWMgdm9pZCBhcF9zdGFfcHNfc3RhcnQoc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwpAQCAtNzM2LDcgKzgzOSw3IEBACiAJaWYgKHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKIAkJdTggKmJzc2lkID0gaWVlZTgwMjExX2dldF9ic3NpZChoZHIsIHJ4LT5za2ItPmxlbiwKIAkJCQkJCU5MODAyMTFfSUZUWVBFX0FESE9DKTsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgcngtPnNkYXRhLT51LnN0YS5ic3NpZCkgPT0gMCkKKwkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZCwgcngtPnNkYXRhLT51Lmlic3MuYnNzaWQpID09IDApCiAJCQlzdGEtPmxhc3RfcnggPSBqaWZmaWVzOwogCX0gZWxzZQogCWlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgfHwKQEAgLTc0NywxMiArODUwLDE5IEBACiAJCSAqIE1lc2ggYmVhY29ucyB3aWxsIHVwZGF0ZSBsYXN0X3J4IHdoZW4gaWYgdGhleSBhcmUgZm91bmQgdG8KIAkJICogbWF0Y2ggdGhlIGN1cnJlbnQgbG9jYWwgY29uZmlndXJhdGlvbiB3aGVuIHByb2Nlc3NlZC4KIAkJICovCi0JCXN0YS0+bGFzdF9yeCA9IGppZmZpZXM7CisJCWlmIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkJICAgIGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkgeworCQkJcngtPnNkYXRhLT51Lm1nZC5sYXN0X2JlYWNvbiA9IGppZmZpZXM7CisJCX0gZWxzZQorCQkJc3RhLT5sYXN0X3J4ID0gamlmZmllczsKIAl9CiAKIAlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKKwlpZiAocngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlpZWVlODAyMTFfc3RhX3J4X25vdGlmeShyeC0+c2RhdGEsIGhkcik7CisKIAlzdGEtPnJ4X2ZyYWdtZW50cysrOwogCXN0YS0+cnhfYnl0ZXMgKz0gcngtPnNrYi0+bGVuOwogCXN0YS0+bGFzdF9zaWduYWwgPSByeC0+c3RhdHVzLT5zaWduYWw7CkBAIC0xMTAxLDYgKzEyMTEsMTUgQEAKIAkvKiBEcm9wIHVuZW5jcnlwdGVkIGZyYW1lcyBpZiBrZXkgaXMgc2V0LiAqLwogCWlmICh1bmxpa2VseSghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoZmMpICYmCiAJCSAgICAgIWllZWU4MDIxMV9pc19udWxsZnVuYyhmYykgJiYKKwkJICAgICAoIWllZWU4MDIxMV9pc19tZ210KGZjKSB8fAorCQkgICAgICAoaWVlZTgwMjExX2lzX3VuaWNhc3Rfcm9idXN0X21nbXRfZnJhbWUocngtPnNrYikgJiYKKwkJICAgICAgIHJ4LT5zdGEgJiYgdGVzdF9zdGFfZmxhZ3MocngtPnN0YSwgV0xBTl9TVEFfTUZQKSkpICYmCisJCSAgICAgKHJ4LT5rZXkgfHwgcngtPnNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkKSkpCisJCXJldHVybiAtRUFDQ0VTOworCS8qIEJJUCBkb2VzIG5vdCB1c2UgUHJvdGVjdGVkIGZpZWxkLCBzbyBuZWVkIHRvIGNoZWNrIE1NSUUgKi8KKwlpZiAodW5saWtlbHkocngtPnN0YSAmJiB0ZXN0X3N0YV9mbGFncyhyeC0+c3RhLCBXTEFOX1NUQV9NRlApICYmCisJCSAgICAgaWVlZTgwMjExX2lzX211bHRpY2FzdF9yb2J1c3RfbWdtdF9mcmFtZShyeC0+c2tiKSAmJgorCQkgICAgIGllZWU4MDIxMV9nZXRfbW1pZV9rZXlpZHgocngtPnNrYikgPCAwICYmCiAJCSAgICAgKHJ4LT5rZXkgfHwgcngtPnNkYXRhLT5kcm9wX3VuZW5jcnlwdGVkKSkpCiAJCXJldHVybiAtRUFDQ0VTOwogCkBAIC0xMTM4LDEyICsxMjU3LDEyIEBACiAKIAlzd2l0Y2ggKGhkci0+ZnJhbWVfY29udHJvbCAmCiAJCWNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMgfCBJRUVFODAyMTFfRkNUTF9GUk9NRFMpKSB7Ci0JY2FzZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1RPRFMpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyk6CiAJCWlmICh1bmxpa2VseShzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKIAkJCSAgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pKQogCQkJcmV0dXJuIC0xOwogCQlicmVhazsKLQljYXNlIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfVE9EUyB8IElFRUU4MDIxMV9GQ1RMX0ZST01EUyk6CisJY2FzZSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTIHwgSUVFRTgwMjExX0ZDVExfRlJPTURTKToKIAkJaWYgKHVubGlrZWx5KHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9XRFMgJiYKIAkJCSAgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKQogCQkJcmV0dXJuIC0xOwpAQCAtMTE1NywxMyArMTI3NiwxMyBAQAogCQkJfQogCQl9CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMpOgorCWNhc2UgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTKToKIAkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8CiAJCSAgICAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZHN0KSAmJgogCQkgICAgICFjb21wYXJlX2V0aGVyX2FkZHIoc3JjLCBkZXYtPmRldl9hZGRyKSkpCiAJCQlyZXR1cm4gLTE7CiAJCWJyZWFrOwotCWNhc2UgX19jb25zdGFudF9jcHVfdG9fbGUxNigwKToKKwljYXNlIGNwdV90b19sZTE2KDApOgogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQogCQkJcmV0dXJuIC0xOwogCQlicmVhazsKQEAgLTEyNjcsMTAgKzEzODYsMzcgQEAKIAl9CiAKIAlpZiAoc2tiKSB7Ci0JCS8qIGRlbGl2ZXIgdG8gbG9jYWwgc3RhY2sgKi8KLQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQkJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7Ci0JCW5ldGlmX3J4KHNrYik7CisJCWludCBhbGlnbiBfX21heWJlX3VudXNlZDsKKworI2lmIGRlZmluZWQoQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQpIHx8ICFkZWZpbmVkKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKQorCQkvKgorCQkgKiAnYWxpZ24nIHdpbGwgb25seSB0YWtlIHRoZSB2YWx1ZXMgMCBvciAyIGhlcmUKKwkJICogc2luY2UgYWxsIGZyYW1lcyBhcmUgcmVxdWlyZWQgdG8gYmUgYWxpZ25lZAorCQkgKiB0byAyLWJ5dGUgYm91bmRhcmllcyB3aGVuIGJlaW5nIHBhc3NlZCB0bworCQkgKiBtYWM4MDIxMS4gVGhhdCBhbHNvIGV4cGxhaW5zIHRoZSBfX3NrYl9wdXNoKCkKKwkJICogYmVsb3cuCisJCSAqLworCQlhbGlnbiA9ICh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YSAmIDQ7CisJCWlmIChhbGlnbikgeworCQkJaWYgKFdBUk5fT04oc2tiX2hlYWRyb29tKHNrYikgPCAzKSkgeworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQlza2IgPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQl1OCAqZGF0YSA9IHNrYi0+ZGF0YTsKKwkJCQlzaXplX3QgbGVuID0gc2tiLT5sZW47CisJCQkJdTggKm5ldyA9IF9fc2tiX3B1c2goc2tiLCBhbGlnbik7CisJCQkJbWVtbW92ZShuZXcsIGRhdGEsIGxlbik7CisJCQkJX19za2JfdHJpbShza2IsIGxlbik7CisJCQl9CisJCX0KKyNlbmRpZgorCisJCWlmIChza2IpIHsKKwkJCS8qIGRlbGl2ZXIgdG8gbG9jYWwgc3RhY2sgKi8KKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisJCQltZW1zZXQoc2tiLT5jYiwgMCwgc2l6ZW9mKHNrYi0+Y2IpKTsKKwkJCW5ldGlmX3J4KHNrYik7CisJCX0KIAl9CiAKIAlpZiAoeG1pdF9za2IpIHsKQEAgLTEzMzksMTQgKzE0ODUsMjAgQEAKIAkJaWYgKHJlbWFpbmluZyA8PSBzdWJmcmFtZV9sZW4gKyBwYWRkaW5nKQogCQkJZnJhbWUgPSBza2I7CiAJCWVsc2UgewotCQkJZnJhbWUgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkJCSAgICAgIHN1YmZyYW1lX2xlbik7CisJCQkvKgorCQkJICogQWxsb2NhdGUgYW5kIHJlc2VydmUgdHdvIGJ5dGVzIG1vcmUgZm9yIHBheWxvYWQKKwkJCSAqIGFsaWdubWVudCBzaW5jZSBzaXplb2Yoc3RydWN0IGV0aGhkcikgaXMgMTQuCisJCQkgKi8KKwkJCWZyYW1lID0gZGV2X2FsbG9jX3NrYigKKwkJCQlBTElHTihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20sIDQpICsKKwkJCQlzdWJmcmFtZV9sZW4gKyAyKTsKIAogCQkJaWYgKGZyYW1lID09IE5VTEwpCiAJCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAKLQkJCXNrYl9yZXNlcnZlKGZyYW1lLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKwotCQkJCSAgICBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCQkJc2tiX3Jlc2VydmUoZnJhbWUsCisJCQkJICAgIEFMSUdOKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSwgNCkgKworCQkJCSAgICBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAyKTsKIAkJCW1lbWNweShza2JfcHV0KGZyYW1lLCBudG9ocyhsZW4pKSwgc2tiLT5kYXRhLAogCQkJCW50b2hzKGxlbikpOwogCkBAIC0xNTI5LDExICsxNjgxLDkgQEAKIAkJc3RhcnRfc2VxX251bSA9IGxlMTZfdG9fY3B1KGJhci0+c3RhcnRfc2VxX251bSkgPj4gNDsKIAogCQkvKiByZXNldCBzZXNzaW9uIHRpbWVyICovCi0JCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KSB7Ci0JCQl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPQotCQkJCWppZmZpZXMgKyAodGlkX2FnZ19yeC0+dGltZW91dCAvIDEwMDApICogSFo7Ci0JCQltb2RfdGltZXIoJnRpZF9hZ2dfcngtPnNlc3Npb25fdGltZXIsIGV4cGlyZXMpOwotCQl9CisJCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KQorCQkJbW9kX3RpbWVyKCZ0aWRfYWdnX3J4LT5zZXNzaW9uX3RpbWVyLAorCQkJCSAgVFVfVE9fRVhQX1RJTUUodGlkX2FnZ19yeC0+dGltZW91dCkpOwogCiAJCS8qIG1hbmFnZSByZW9yZGVyaW5nIGJ1ZmZlciBhY2NvcmRpbmcgdG8gcmVxdWVzdGVkICovCiAJCS8qIHNlcXVlbmNlIG51bWJlciAqLwpAQCAtMTU0NywxMiArMTY5Nyw2NCBAQAogCXJldHVybiBSWF9DT05USU5VRTsKIH0KIAorc3RhdGljIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3Nfc2FfcXVlcnlfcmVxKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsCisJCQkJCSAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKnJlc3A7CisKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkcikgIT0gMCkgeworCQkvKiBOb3QgdG8gb3duIHVuaWNhc3QgYWRkcmVzcyAqLworCQlyZXR1cm47CisJfQorCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5zYSwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwIHx8CisJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkKSAhPSAwKSB7CisJCS8qIE5vdCBmcm9tIHRoZSBjdXJyZW50IEFQLiAqLworCQlyZXR1cm47CisJfQorCisJaWYgKHNkYXRhLT51Lm1nZC5zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFKSB7CisJCS8qIEFzc29jaWF0aW9uIGluIHByb2dyZXNzOyBpZ25vcmUgU0EgUXVlcnkgKi8KKwkJcmV0dXJuOworCX0KKworCWlmIChsZW4gPCAyNCArIDEgKyBzaXplb2YocmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeSkpIHsKKwkJLyogVG9vIHNob3J0IFNBIFF1ZXJ5IHJlcXVlc3QgZnJhbWUgKi8KKwkJcmV0dXJuOworCX0KKworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpyZXNwKSArIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJaWYgKHNrYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQocmVzcCwgMCwgMjQpOworCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKKwltZW1jcHkocmVzcC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHJlc3AtPmJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKwlyZXNwLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOworCXNrYl9wdXQoc2tiLCAxICsgc2l6ZW9mKHJlc3AtPnUuYWN0aW9uLnUuc2FfcXVlcnkpKTsKKwlyZXNwLT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfU0FfUVVFUlk7CisJcmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeS5hY3Rpb24gPSBXTEFOX0FDVElPTl9TQV9RVUVSWV9SRVNQT05TRTsKKwltZW1jcHkocmVzcC0+dS5hY3Rpb24udS5zYV9xdWVyeS50cmFuc19pZCwKKwkgICAgICAgbWdtdC0+dS5hY3Rpb24udS5zYV9xdWVyeS50cmFuc19pZCwKKwkgICAgICAgV0xBTl9TQV9RVUVSWV9UUl9JRF9MRU4pOworCisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKK30KKwogc3RhdGljIGllZWU4MDIxMV9yeF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV9yeF9oX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gcngtPmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYocngtPmRldik7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSByeC0+c2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IGxlbiA9IHJ4LT5za2ItPmxlbjsKIAogCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSkKQEAgLTE1NjQsMTIgKzE3NjYsMjYgQEAKIAlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpKQogCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCisJaWYgKGllZWU4MDIxMV9kcm9wX3VuZW5jcnlwdGVkKHJ4LCBtZ210LT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCS8qIGFsbCBjYXRlZ29yaWVzIHdlIGN1cnJlbnRseSBoYW5kbGUgaGF2ZSBhY3Rpb25fY29kZSAqLwogCWlmIChsZW4gPCBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsgMSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAogCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkpIHsKIAljYXNlIFdMQU5fQ0FURUdPUllfQkFDSzoKKwkJLyoKKwkJICogVGhlIGFnZ3JlZ2F0aW9uIGNvZGUgaXMgbm90IHByZXBhcmVkIHRvIGhhbmRsZQorCQkgKiBhbnl0aGluZyBidXQgU1RBL0FQIGR1ZSB0byB0aGUgQlNTSUQgaGFuZGxpbmc7CisJCSAqIElCU1MgY291bGQgd29yayBpbiB0aGUgY29kZSBidXQgaXNuJ3Qgc3VwcG9ydGVkCisJCSAqIGJ5IGRyaXZlcnMgb3IgdGhlIHN0YW5kYXJkLgorCQkgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgorCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwogCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUuYWRkYmFfcmVxLmFjdGlvbl9jb2RlKSB7CiAJCWNhc2UgV0xBTl9BQ1RJT05fQUREQkFfUkVROgogCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKQEAgLTE1OTQsNiArMTgxMCwxMCBAQAogCWNhc2UgV0xBTl9DQVRFR09SWV9TUEVDVFJVTV9NR01UOgogCQlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKQogCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKworCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCiAJCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5hY3Rpb25fY29kZSkgewogCQljYXNlIFdMQU5fQUNUSU9OX1NQQ1RfTVNSX1JFUToKIAkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCkBAIC0xNjAxLDYgKzE4MjEsNDMgQEAKIAkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCQkJaWVlZTgwMjExX3Byb2Nlc3NfbWVhc3VyZW1lbnRfcmVxKHNkYXRhLCBtZ210LCBsZW4pOwogCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9BQ1RJT05fU1BDVF9DSExfU1dJVENIOgorCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKKwkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5jaGFuX3N3aXRjaCkpKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWlmIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGxvY2FsLCBzZGF0YS0+dS5tZ2QuYnNzaWQsCisJCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCQkgICBzZGF0YS0+dS5tZ2Quc3NpZCwKKwkJCQkJICAgc2RhdGEtPnUubWdkLnNzaWRfbGVuKTsKKwkJCWlmICghYnNzKQorCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisKKwkJCWllZWU4MDIxMV9wcm9jZXNzX2NoYW5zd2l0Y2goc2RhdGEsCisJCQkJICAgICAmbWdtdC0+dS5hY3Rpb24udS5jaGFuX3N3aXRjaC5zd19lbGVtLCBic3MpOworCQkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIFdMQU5fQ0FURUdPUllfU0FfUVVFUlk6CisJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCisJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5zYV9xdWVyeSkpKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51LnNhX3F1ZXJ5LmFjdGlvbikgeworCQljYXNlIFdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFUVVFU1Q6CisJCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCWllZWU4MDIxMV9wcm9jZXNzX3NhX3F1ZXJ5X3JlcShzZGF0YSwgbWdtdCwgbGVuKTsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fQUNUSU9OX1NBX1FVRVJZX1JFU1BPTlNFOgorCQkJLyoKKwkJCSAqIFNBIFF1ZXJ5IHJlc3BvbnNlIGlzIGN1cnJlbnRseSBvbmx5IHVzZWQgaW4gQVAgbW9kZQorCQkJICogYW5kIGl0IGlzIHByb2Nlc3NlZCBpbiB1c2VyIHNwYWNlLgorCQkJICovCisJCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE2MTYsMjIgKzE4NzMsMjQgQEAKIGllZWU4MDIxMV9yeF9oX21nbXQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKHJ4LT5kZXYpOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgcngtPnNrYi0+ZGF0YTsKIAogCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKKwlpZiAoaWVlZTgwMjExX2Ryb3BfdW5lbmNyeXB0ZWQocngsIG1nbXQtPmZyYW1lX2NvbnRyb2wpKQorCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCiAJCXJldHVybiBpZWVlODAyMTFfbWVzaF9yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKIAotCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJcmV0dXJuIGllZWU4MDIxMV9pYnNzX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IsIHJ4LT5zdGF0dXMpOwogCi0JaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkKLQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybiBpZWVlODAyMTFfc3RhX3J4X21nbXQoc2RhdGEsIHJ4LT5za2IsIHJ4LT5zdGF0dXMpOwogCi0JaWVlZTgwMjExX3N0YV9yeF9tZ210KHNkYXRhLCByeC0+c2tiLCByeC0+c3RhdHVzKTsKLQlyZXR1cm4gUlhfUVVFVUVEOworCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9taWNoYWVsX21pY19yZXBvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTE3ODAsNiArMjAzOSw3IEBACiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfcGFzc2l2ZV9zY2FuKQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2NoZWNrKQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2RlY3J5cHQpCisJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfY2hlY2tfbW9yZV9kYXRhKQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX3N0YV9wcm9jZXNzKQogCUNBTExfUlhIKGllZWU4MDIxMV9yeF9oX2RlZnJhZ21lbnQpCiAJQ0FMTF9SWEgoaWVlZTgwMjExX3J4X2hfcHNfcG9sbCkKQEAgLTE4MjMsMTYgKzIwODMsMTcgQEAKIC8qIG1haW4gcmVjZWl2ZSBwYXRoICovCiAKIHN0YXRpYyBpbnQgcHJlcGFyZV9mb3JfaGFuZGxlcnMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJdTggKmJzc2lkLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4LAorCQkJCXN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCiAJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKIHsKKwl1OCAqYnNzaWQgPSBpZWVlODAyMTFfZ2V0X2Jzc2lkKGhkciwgcngtPnNrYi0+bGVuLCBzZGF0YS0+dmlmLnR5cGUpOwogCWludCBtdWx0aWNhc3QgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKTsKIAogCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlpZiAoIWJzc2lkKQogCQkJcmV0dXJuIDA7Ci0JCWlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQpKSB7CisJCWlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLCBzZGF0YS0+dS5tZ2QuYnNzaWQpKSB7CiAJCQlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfSU5fU0NBTikpCiAJCQkJcmV0dXJuIDA7CiAJCQlyeC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9SWF9SQV9NQVRDSDsKQEAgLTE4NTAsNyArMjExMSw3IEBACiAJCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJCXJldHVybiAxOwogCQl9Ci0JCWVsc2UgaWYgKCFpZWVlODAyMTFfYnNzaWRfbWF0Y2goYnNzaWQsIHNkYXRhLT51LnN0YS5ic3NpZCkpIHsKKwkJZWxzZSBpZiAoIWllZWU4MDIxMV9ic3NpZF9tYXRjaChic3NpZCwgc2RhdGEtPnUuaWJzcy5ic3NpZCkpIHsKIAkJCWlmICghKHJ4LT5mbGFncyAmIElFRUU4MDIxMV9SWF9JTl9TQ0FOKSkKIAkJCQlyZXR1cm4gMDsKIAkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX1JBX01BVENIOwpAQCAtMTkyOCw3ICsyMTg5LDYgQEAKIAlpbnQgcHJlcGFyZXM7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqcHJldiA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYl9uZXc7Ci0JdTggKmJzc2lkOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCW1lbXNldCgmcngsIDAsIHNpemVvZihyeCkpOwpAQCAtMTk1Niw3ICsyMjE2LDcgQEAKIAkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX0lOX1NDQU47CiAKIAlpZWVlODAyMTFfcGFyc2VfcW9zKCZyeCk7Ci0JaWVlZTgwMjExX3ZlcmlmeV9pcF9hbGlnbm1lbnQoJnJ4KTsKKwlpZWVlODAyMTFfdmVyaWZ5X2FsaWdubWVudCgmcngpOwogCiAJc2tiID0gcnguc2tiOwogCkBAIC0xOTY3LDkgKzIyMjcsOCBAQAogCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCiAJCQljb250aW51ZTsKIAotCQlic3NpZCA9IGllZWU4MDIxMV9nZXRfYnNzaWQoaGRyLCBza2ItPmxlbiwgc2RhdGEtPnZpZi50eXBlKTsKIAkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX1JBX01BVENIOwotCQlwcmVwYXJlcyA9IHByZXBhcmVfZm9yX2hhbmRsZXJzKHNkYXRhLCBic3NpZCwgJnJ4LCBoZHIpOworCQlwcmVwYXJlcyA9IHByZXBhcmVfZm9yX2hhbmRsZXJzKHNkYXRhLCAmcngsIGhkcik7CiAKIAkJaWYgKCFwcmVwYXJlcykKIAkJCWNvbnRpbnVlOwpAQCAtMjE3NCwxMSArMjQzMyw5IEBACiAJLyogbmV3IHVuLW9yZGVyZWQgYW1wZHUgZnJhbWUgLSBwcm9jZXNzIGl0ICovCiAKIAkvKiByZXNldCBzZXNzaW9uIHRpbWVyICovCi0JaWYgKHRpZF9hZ2dfcngtPnRpbWVvdXQpIHsKLQkJdW5zaWduZWQgbG9uZyBleHBpcmVzID0KLQkJCWppZmZpZXMgKyAodGlkX2FnZ19yeC0+dGltZW91dCAvIDEwMDApICogSFo7Ci0JCW1vZF90aW1lcigmdGlkX2FnZ19yeC0+c2Vzc2lvbl90aW1lciwgZXhwaXJlcyk7Ci0JfQorCWlmICh0aWRfYWdnX3J4LT50aW1lb3V0KQorCQltb2RfdGltZXIoJnRpZF9hZ2dfcngtPnNlc3Npb25fdGltZXIsCisJCQkgIFRVX1RPX0VYUF9USU1FKHRpZF9hZ2dfcngtPnRpbWVvdXQpKTsKIAogCS8qIGlmIHRoaXMgbXBkdSBpcyBmcmFnbWVudGVkIC0gdGVybWluYXRlIHJ4IGFnZ3JlZ2F0aW9uIHNlc3Npb24gKi8KIAlzYyA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKaW5kZXggZjVjN2MzMy4uM2JmOTgzOSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uYworKysgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCkBAIC0xMiwxNCArMTIsMTEgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLS8qIFRPRE86Ci0gKiBvcmRlciBCU1MgbGlzdCBieSBSU1NJKD8pICgicXVhbGl0eSBvZiBBUCIpCi0gKiBzY2FuIHJlc3VsdCB0YWJsZSBmaWx0ZXJpbmcgKGJ5IGNhcGFiaWxpdHkgKHByaXZhY3ksIElCU1MvQlNTLCBXUEEvUlNOIElFLAotICogICAgU1NJRCkKLSAqLworLyogVE9ETzogZmlndXJlIG91dCBob3cgdG8gYXZvaWQgdGhhdCB0aGUgImN1cnJlbnQgQlNTIiBleHBpcmVzICovCiAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAKQEAgLTMwLDE5MiArMjcsMjkgQEAKICNkZWZpbmUgSUVFRTgwMjExX0NIQU5ORUxfVElNRSAoSFogLyAzMykKICNkZWZpbmUgSUVFRTgwMjExX1BBU1NJVkVfQ0hBTk5FTF9USU1FIChIWiAvIDUpCiAKLXZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCi17Ci0Jc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5ic3NfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5ic3NfbGlzdCk7Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3J4X2Jzc19saXN0X2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJzcywgdG1wLCAmbG9jYWwtPmJzc19saXN0LCBsaXN0KQotCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKLX0KLQogc3RydWN0IGllZWU4MDIxMV9ic3MgKgogaWVlZTgwMjExX3J4X2Jzc19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICpic3NpZCwgaW50IGZyZXEsCiAJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKQogewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JYnNzID0gbG9jYWwtPmJzc19oYXNoW1NUQV9IQVNIKGJzc2lkKV07Ci0Jd2hpbGUgKGJzcykgewotCQlpZiAoIWJzc19tZXNoX2NmZyhic3MpICYmCi0JCSAgICAhbWVtY21wKGJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgJiYKLQkJICAgIGJzcy0+ZnJlcSA9PSBmcmVxICYmCi0JCSAgICBic3MtPnNzaWRfbGVuID09IHNzaWRfbGVuICYmCi0JCSAgICAoc3NpZF9sZW4gPT0gMCB8fCAhbWVtY21wKGJzcy0+c3NpZCwgc3NpZCwgc3NpZF9sZW4pKSkgewotCQkJYXRvbWljX2luYygmYnNzLT51c2Vycyk7Ci0JCQlicmVhazsKLQkJfQotCQlic3MgPSBic3MtPmhuZXh0OwotCX0KLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlyZXR1cm4gYnNzOworCXJldHVybiAodm9pZCAqKWNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LAorCQkJCQlpZWVlODAyMTFfZ2V0X2NoYW5uZWwobG9jYWwtPmh3LndpcGh5LAorCQkJCQkJCSAgICAgIGZyZXEpLAorCQkJCQlic3NpZCwgc3NpZCwgc3NpZF9sZW4sCisJCQkJCTAsIDApOwogfQogCi0vKiBDYWxsZXIgbXVzdCBob2xkIGxvY2FsLT5ic3NfbG9jayAqLwotc3RhdGljIHZvaWQgX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQorc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19mcmVlKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3MpCiB7Ci0JdTggaGFzaF9pZHg7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyA9ICh2b2lkICopY2JzczsKIAotCWlmIChic3NfbWVzaF9jZmcoYnNzKSkKLQkJaGFzaF9pZHggPSBtZXNoX2lkX2hhc2goYnNzX21lc2hfaWQoYnNzKSwKLQkJCQkJYnNzX21lc2hfaWRfbGVuKGJzcykpOwotCWVsc2UKLQkJaGFzaF9pZHggPSBTVEFfSEFTSChic3MtPmJzc2lkKTsKLQotCWJzcy0+aG5leHQgPSBsb2NhbC0+YnNzX2hhc2hbaGFzaF9pZHhdOwotCWxvY2FsLT5ic3NfaGFzaFtoYXNoX2lkeF0gPSBic3M7Ci19Ci0KLS8qIENhbGxlciBtdXN0IGhvbGQgbG9jYWwtPmJzc19sb2NrICovCi1zdGF0aWMgdm9pZCBfX2llZWU4MDIxMV9yeF9ic3NfaGFzaF9kZWwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmIsICpwcmV2ID0gTlVMTDsKLQliID0gbG9jYWwtPmJzc19oYXNoW1NUQV9IQVNIKGJzcy0+YnNzaWQpXTsKLQl3aGlsZSAoYikgewotCQlpZiAoYiA9PSBic3MpIHsKLQkJCWlmICghcHJldikKLQkJCQlsb2NhbC0+YnNzX2hhc2hbU1RBX0hBU0goYnNzLT5ic3NpZCldID0KLQkJCQkJYnNzLT5obmV4dDsKLQkJCWVsc2UKLQkJCQlwcmV2LT5obmV4dCA9IGJzcy0+aG5leHQ7Ci0JCQlicmVhazsKLQkJfQotCQlwcmV2ID0gYjsKLQkJYiA9IGItPmhuZXh0OwotCX0KLX0KLQotc3RydWN0IGllZWU4MDIxMV9ic3MgKgotaWVlZTgwMjExX3J4X2Jzc19hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICpic3NpZCwgaW50IGZyZXEsCi0JCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKQotewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KLQlic3MgPSBremFsbG9jKHNpemVvZigqYnNzKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFic3MpCi0JCXJldHVybiBOVUxMOwotCWF0b21pY19zZXQoJmJzcy0+dXNlcnMsIDIpOwotCW1lbWNweShic3MtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwotCWJzcy0+ZnJlcSA9IGZyZXE7Ci0JaWYgKHNzaWQgJiYgc3NpZF9sZW4gPD0gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgewotCQltZW1jcHkoYnNzLT5zc2lkLCBzc2lkLCBzc2lkX2xlbik7Ci0JCWJzcy0+c3NpZF9sZW4gPSBzc2lkX2xlbjsKLQl9Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JLyogVE9ETzogb3JkZXIgYnkgUlNTST8gKi8KLQlsaXN0X2FkZF90YWlsKCZic3MtPmxpc3QsICZsb2NhbC0+YnNzX2xpc3QpOwotCV9faWVlZTgwMjExX3J4X2Jzc19oYXNoX2FkZChsb2NhbCwgYnNzKTsKLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlyZXR1cm4gYnNzOwotfQotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCi1pZWVlODAyMTFfcnhfbWVzaF9ic3NfZ2V0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqbWVzaF9pZCwgaW50IG1lc2hfaWRfbGVuLAotCQkJICB1OCAqbWVzaF9jZmcsIGludCBmcmVxKQotewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KLQlzcGluX2xvY2tfYmgoJmxvY2FsLT5ic3NfbG9jayk7Ci0JYnNzID0gbG9jYWwtPmJzc19oYXNoW21lc2hfaWRfaGFzaChtZXNoX2lkLCBtZXNoX2lkX2xlbildOwotCXdoaWxlIChic3MpIHsKLQkJaWYgKGJzc19tZXNoX2NmZyhic3MpICYmCi0JCSAgICAhbWVtY21wKGJzc19tZXNoX2NmZyhic3MpLCBtZXNoX2NmZywgTUVTSF9DRkdfQ01QX0xFTikgJiYKLQkJICAgIGJzcy0+ZnJlcSA9PSBmcmVxICYmCi0JCSAgICBtZXNoX2lkX2xlbiA9PSBic3MtPm1lc2hfaWRfbGVuICYmCi0JCSAgICAobWVzaF9pZF9sZW4gPT0gMCB8fCAhbWVtY21wKGJzcy0+bWVzaF9pZCwgbWVzaF9pZCwKLQkJCQkJCSBtZXNoX2lkX2xlbikpKSB7Ci0JCQlhdG9taWNfaW5jKCZic3MtPnVzZXJzKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJzcyA9IGJzcy0+aG5leHQ7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCXJldHVybiBic3M7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCi1pZWVlODAyMTFfcnhfbWVzaF9ic3NfYWRkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCAqbWVzaF9pZCwgaW50IG1lc2hfaWRfbGVuLAotCQkJICB1OCAqbWVzaF9jZmcsIGludCBtZXNoX2NvbmZpZ19sZW4sIGludCBmcmVxKQotewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7Ci0KLQlpZiAobWVzaF9jb25maWdfbGVuICE9IElFRUU4MDIxMV9NRVNIX0NPTkZJR19MRU4pCi0JCXJldHVybiBOVUxMOwotCi0JYnNzID0ga3phbGxvYyhzaXplb2YoKmJzcyksIEdGUF9BVE9NSUMpOwotCWlmICghYnNzKQotCQlyZXR1cm4gTlVMTDsKLQotCWJzcy0+bWVzaF9jZmcgPSBrbWFsbG9jKE1FU0hfQ0ZHX0NNUF9MRU4sIEdGUF9BVE9NSUMpOwotCWlmICghYnNzLT5tZXNoX2NmZykgewotCQlrZnJlZShic3MpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAobWVzaF9pZF9sZW4gJiYgbWVzaF9pZF9sZW4gPD0gSUVFRTgwMjExX01BWF9NRVNIX0lEX0xFTikgewotCQlic3MtPm1lc2hfaWQgPSBrbWFsbG9jKG1lc2hfaWRfbGVuLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFic3MtPm1lc2hfaWQpIHsKLQkJCWtmcmVlKGJzcy0+bWVzaF9jZmcpOwotCQkJa2ZyZWUoYnNzKTsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCW1lbWNweShic3MtPm1lc2hfaWQsIG1lc2hfaWQsIG1lc2hfaWRfbGVuKTsKLQl9Ci0KLQlhdG9taWNfc2V0KCZic3MtPnVzZXJzLCAyKTsKLQltZW1jcHkoYnNzLT5tZXNoX2NmZywgbWVzaF9jZmcsIE1FU0hfQ0ZHX0NNUF9MRU4pOwotCWJzcy0+bWVzaF9pZF9sZW4gPSBtZXNoX2lkX2xlbjsKLQlic3MtPmZyZXEgPSBmcmVxOwotCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQkvKiBUT0RPOiBvcmRlciBieSBSU1NJPyAqLwotCWxpc3RfYWRkX3RhaWwoJmJzcy0+bGlzdCwgJmxvY2FsLT5ic3NfbGlzdCk7Ci0JX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfYWRkKGxvY2FsLCBic3MpOwotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCXJldHVybiBic3M7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19mcmVlKHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCi17Ci0Ja2ZyZWUoYnNzLT5pZXMpOwogCWtmcmVlKGJzc19tZXNoX2lkKGJzcykpOwogCWtmcmVlKGJzc19tZXNoX2NmZyhic3MpKTsKLQlrZnJlZShic3MpOwogfQogCiB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQogewotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoIWF0b21pY19kZWNfYW5kX2xvY2soJmJzcy0+dXNlcnMsICZsb2NhbC0+YnNzX2xvY2spKSB7Ci0JCWxvY2FsX2JoX2VuYWJsZSgpOwotCQlyZXR1cm47Ci0JfQotCi0JX19pZWVlODAyMTFfcnhfYnNzX2hhc2hfZGVsKGxvY2FsLCBic3MpOwotCWxpc3RfZGVsKCZic3MtPmxpc3QpOwotCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWllZWU4MDIxMV9yeF9ic3NfZnJlZShic3MpOworCWNmZzgwMjExX3B1dF9ic3MoKHN0cnVjdCBjZmc4MDIxMV9ic3MgKilic3MpOwogfQogCiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqCkBAIC0yMjQsMzkgKzU4LDI1IEBACiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKIAkJCSAgc2l6ZV90IGxlbiwKIAkJCSAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zLAotCQkJICBpbnQgZnJlcSwgYm9vbCBiZWFjb24pCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCSAgYm9vbCBiZWFjb24pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlpbnQgY2xlbjsKKwlzMzIgc2lnbmFsID0gMDsKIAotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICi0JaWYgKGVsZW1zLT5tZXNoX2NvbmZpZykKLQkJYnNzID0gaWVlZTgwMjExX3J4X21lc2hfYnNzX2dldChsb2NhbCwgZWxlbXMtPm1lc2hfaWQsCi0JCQkJZWxlbXMtPm1lc2hfaWRfbGVuLCBlbGVtcy0+bWVzaF9jb25maWcsIGZyZXEpOwotCWVsc2UKLSNlbmRpZgotCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChsb2NhbCwgbWdtdC0+YnNzaWQsIGZyZXEsCi0JCQkJCSAgIGVsZW1zLT5zc2lkLCBlbGVtcy0+c3NpZF9sZW4pOwotCWlmICghYnNzKSB7Ci0jaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKLQkJaWYgKGVsZW1zLT5tZXNoX2NvbmZpZykKLQkJCWJzcyA9IGllZWU4MDIxMV9yeF9tZXNoX2Jzc19hZGQobG9jYWwsIGVsZW1zLT5tZXNoX2lkLAotCQkJCWVsZW1zLT5tZXNoX2lkX2xlbiwgZWxlbXMtPm1lc2hfY29uZmlnLAotCQkJCWVsZW1zLT5tZXNoX2NvbmZpZ19sZW4sIGZyZXEpOwotCQllbHNlCi0jZW5kaWYKLQkJCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfYWRkKGxvY2FsLCBtZ210LT5ic3NpZCwgZnJlcSwKLQkJCQkJCSAgZWxlbXMtPnNzaWQsIGVsZW1zLT5zc2lkX2xlbik7Ci0JCWlmICghYnNzKQotCQkJcmV0dXJuIE5VTEw7Ci0JfSBlbHNlIHsKLSNpZiAwCi0JCS8qIFRPRE86IG9yZGVyIGJ5IFJTU0k/ICovCi0JCXNwaW5fbG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQkJbGlzdF9tb3ZlX3RhaWwoJmJzcy0+bGlzdCwgJmxvY2FsLT5ic3NfbGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotI2VuZGlmCi0JfQorCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkKKwkJc2lnbmFsID0gcnhfc3RhdHVzLT5zaWduYWwgKiAxMDA7CisJZWxzZSBpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpCisJCXNpZ25hbCA9IChyeF9zdGF0dXMtPnNpZ25hbCAqIDEwMCkgLyBsb2NhbC0+aHcubWF4X3NpZ25hbDsKKworCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZShsb2NhbC0+aHcud2lwaHksIGNoYW5uZWwsCisJCQkJCQltZ210LCBsZW4sIHNpZ25hbCwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIWJzcykKKwkJcmV0dXJuIE5VTEw7CisKKwlic3MtPmNic3MuZnJlZV9wcml2ID0gaWVlZTgwMjExX3J4X2Jzc19mcmVlOwogCiAJLyogc2F2ZSB0aGUgRVJQIHZhbHVlIHNvIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGF0IGFzc29jaWF0aW9uIHRpbWUgKi8KIAlpZiAoZWxlbXMtPmVycF9pbmZvICYmIGVsZW1zLT5lcnBfaW5mb19sZW4gPj0gMSkgewpAQCAtMjY0LDkgKzg0LDYgQEAKIAkJYnNzLT5oYXNfZXJwX3ZhbHVlID0gMTsKIAl9CiAKLQlic3MtPmJlYWNvbl9pbnQgPSBsZTE2X3RvX2NwdShtZ210LT51LmJlYWNvbi5iZWFjb25faW50KTsKLQlic3MtPmNhcGFiaWxpdHkgPSBsZTE2X3RvX2NwdShtZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvKTsKLQogCWlmIChlbGVtcy0+dGltKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfdGltX2llICp0aW1faWUgPQogCQkJKHN0cnVjdCBpZWVlODAyMTFfdGltX2llICopZWxlbXMtPnRpbTsKQEAgLTI5NSwzNyArMTEyLDI3IEBACiAJCWJzcy0+c3VwcF9yYXRlc19sZW4gKz0gY2xlbjsKIAl9CiAKLQlic3MtPmJhbmQgPSByeF9zdGF0dXMtPmJhbmQ7Ci0KLQlic3MtPnRpbWVzdGFtcCA9IGxlNjRfdG9fY3B1KG1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCk7Ci0JYnNzLT5sYXN0X3VwZGF0ZSA9IGppZmZpZXM7Ci0JYnNzLT5zaWduYWwgPSByeF9zdGF0dXMtPnNpZ25hbDsKLQlic3MtPm5vaXNlID0gcnhfc3RhdHVzLT5ub2lzZTsKLQlic3MtPnF1YWwgPSByeF9zdGF0dXMtPnF1YWw7CiAJYnNzLT53bW1fdXNlZCA9IGVsZW1zLT53bW1fcGFyYW0gfHwgZWxlbXMtPndtbV9pbmZvOwogCiAJaWYgKCFiZWFjb24pCiAJCWJzcy0+bGFzdF9wcm9iZV9yZXNwID0gamlmZmllczsKIAotCS8qCi0JICogRm9yIHByb2JlIHJlc3BvbnNlcywgb3IgaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgaW5mb3JtYXRpb24geWV0LAotCSAqIHVzZSB0aGUgSUVzIGZyb20gdGhlIGJlYWNvbi4KLQkgKi8KLQlpZiAoIWJzcy0+aWVzIHx8ICFiZWFjb24pIHsKLQkJaWYgKGJzcy0+aWVzID09IE5VTEwgfHwgYnNzLT5pZXNfbGVuIDwgZWxlbXMtPnRvdGFsX2xlbikgewotCQkJa2ZyZWUoYnNzLT5pZXMpOwotCQkJYnNzLT5pZXMgPSBrbWFsbG9jKGVsZW1zLT50b3RhbF9sZW4sIEdGUF9BVE9NSUMpOwotCQl9Ci0JCWlmIChic3MtPmllcykgewotCQkJbWVtY3B5KGJzcy0+aWVzLCBlbGVtcy0+aWVfc3RhcnQsIGVsZW1zLT50b3RhbF9sZW4pOwotCQkJYnNzLT5pZXNfbGVuID0gZWxlbXMtPnRvdGFsX2xlbjsKLQkJfSBlbHNlCi0JCQlic3MtPmllc19sZW4gPSAwOwotCX0KLQogCXJldHVybiBic3M7CiB9CiAKK3ZvaWQgaWVlZTgwMjExX3J4X2Jzc19yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpic3NpZCwKKwkJCSAgICAgaW50IGZyZXEsIHU4ICpzc2lkLCB1OCBzc2lkX2xlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQobG9jYWwsIGJzc2lkLCBmcmVxLCBzc2lkLCBzc2lkX2xlbik7CisJaWYgKGJzcykgeworCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgKHZvaWQgKilic3MpOworCQlpZWVlODAyMTFfcnhfYnNzX3B1dChsb2NhbCwgYnNzKTsKKwl9Cit9CisKIGllZWU4MDIxMV9yeF9yZXN1bHQKIGllZWU4MDIxMV9zY2FuX3J4KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXMpCkBAIC0zODcsNyArMTk0LDcgQEAKIAogCWJzcyA9IGllZWU4MDIxMV9ic3NfaW5mb191cGRhdGUoc2RhdGEtPmxvY2FsLCByeF9zdGF0dXMsCiAJCQkJCW1nbXQsIHNrYi0+bGVuLCAmZWxlbXMsCi0JCQkJCWZyZXEsIGJlYWNvbik7CisJCQkJCWNoYW5uZWwsIGJlYWNvbik7CiAJaWYgKGJzcykKIAkJaWVlZTgwMjExX3J4X2Jzc19wdXQoc2RhdGEtPmxvY2FsLCBic3MpOwogCkBAIC0zOTUsNTYgKzIwMiw5NCBAQAogCXJldHVybiBSWF9RVUVVRUQ7CiB9CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX251bGxmdW5jKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgaW50IHBvd2Vyc2F2ZSkKK3ZvaWQgaWVlZTgwMjExX3NjYW5fZmFpbGVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewotCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKm51bGxmdW5jOwotCV9fbGUxNiBmYzsKLQotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbGZ1bmMgIgotCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwlpZiAoV0FSTl9PTighbG9jYWwtPnNjYW5fcmVxKSkKIAkJcmV0dXJuOwotCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CiAKLQludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChudWxsZnVuYywgMCwgMjQpOwotCWZjID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfCBJRUVFODAyMTFfU1RZUEVfTlVMTEZVTkMgfAotCQkJIElFRUU4MDIxMV9GQ1RMX1RPRFMpOwotCWlmIChwb3dlcnNhdmUpCi0JCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKLQludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGZjOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjEsIHNkYXRhLT51LnN0YS5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShudWxsZnVuYy0+YWRkcjIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJLyogbm90aWZ5IGNmZzgwMjExIGFib3V0IHRoZSBmYWlsZWQgc2NhbiAqLworCWlmIChsb2NhbC0+c2Nhbl9yZXEgIT0gJmxvY2FsLT5pbnRfc2Nhbl9yZXEpCisJCWNmZzgwMjExX3NjYW5fZG9uZShsb2NhbC0+c2Nhbl9yZXEsIHRydWUpOwogCi0JaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAwKTsKKwlsb2NhbC0+c2Nhbl9yZXEgPSBOVUxMOwogfQogCi12b2lkIGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKKy8qCisgKiBpbmZvcm0gQVAgdGhhdCB3ZSB3aWxsIGdvIHRvIHNsZWVwIHNvIHRoYXQgaXQgd2lsbCBidWZmZXIgdGhlIGZyYW1lcworICogd2hpbGUgd2Ugc2NhbgorICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9wc19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJYm9vbCBwcyA9IGZhbHNlOworCisJLyogRklYTUU6IHdoYXQgdG8gZG8gd2hlbiBsb2NhbC0+cHNwb2xsaW5nIGlzIHRydWU/ICovCisKKwlkZWxfdGltZXJfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIpOworCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKKworCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCXBzID0gdHJ1ZTsKKwkJbG9jYWwtPmh3LmNvbmYuZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOworCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCX0KKworCWlmICghcHMgfHwgIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spKQorCQkvKgorCQkgKiBJZiBwb3dlciBzYXZlIHdhcyBlbmFibGVkLCBubyBuZWVkIHRvIHNlbmQgYSBudWxsZnVuYworCQkgKiBmcmFtZSBiZWNhdXNlIEFQIGtub3dzIHRoYXQgd2UgYXJlIHNsZWVwaW5nLiBCdXQgaWYgdGhlCisJCSAqIGhhcmR3YXJlIGlzIGNyZWF0aW5nIHRoZSBudWxsZnVuYyBmcmFtZSBmb3IgcG93ZXIgc2F2ZQorCQkgKiBzdGF0dXMgKGllLiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgaXMgbm90CisJCSAqIGVuYWJsZWQpIGFuZCBwb3dlciBzYXZlIHdhcyBlbmFibGVkLCB0aGUgZmlybXdhcmUganVzdAorCQkgKiBzZW50IGEgbnVsbCBmcmFtZSB3aXRoIHBvd2VyIHNhdmUgZGlzYWJsZWQuIFNvIHdlIG5lZWQKKwkJICogdG8gc2VuZCBhIG5ldyBudWxsZnVuYyBmcmFtZSB0byBpbmZvcm0gdGhlIEFQIHRoYXQgd2UKKwkJICogYXJlIGFnYWluIHNsZWVwaW5nLgorCQkgKi8KKwkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKK30KKworLyogaW5mb3JtIEFQIHRoYXQgd2UgYXJlIGF3YWtlIGFnYWluLCB1bmxlc3MgcG93ZXIgc2F2ZSBpcyBlbmFibGVkICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9wc19kaXNhYmxlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJaWYgKCFsb2NhbC0+cG93ZXJzYXZlKQorCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOworCWVsc2UgeworCQkvKgorCQkgKiBJbiAhSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIGNhc2UgdGhlIGhhcmR3YXJlCisJCSAqIHdpbGwgc2VuZCBhIG51bGxmdW5jIGZyYW1lIHdpdGggdGhlIHBvd2Vyc2F2ZSBiaXQgc2V0CisJCSAqIGV2ZW4gdGhvdWdoIHRoZSBBUCBhbHJlYWR5IGtub3dzIHRoYXQgd2UgYXJlIHNsZWVwaW5nLgorCQkgKiBUaGlzIGNvdWxkIGJlIGF2b2lkZWQgYnkgc2VuZGluZyBhIG51bGwgZnJhbWUgd2l0aCBwb3dlcgorCQkgKiBzYXZlIGJpdCBkaXNhYmxlZCBiZWZvcmUgZW5hYmxpbmcgdGhlIHBvd2VyIHNhdmUsIGJ1dAorCQkgKiB0aGlzIGRvZXNuJ3QgZ2FpbiBhbnl0aGluZy4KKwkJICoKKwkJICogV2hlbiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgaXMgZW5hYmxlZCwgbm8gbmVlZAorCQkgKiB0byBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgYmVjYXVzZSBBUCBhbHJlYWR5IGtub3dzIHRoYXQKKwkJICogd2UgYXJlIHNsZWVwaW5nLCBsZXQncyBqdXN0IGVuYWJsZSBwb3dlciBzYXZlIG1vZGUgaW4KKwkJICogaGFyZHdhcmUuCisJCSAqLworCQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwl9Cit9CisKK3ZvaWQgaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGFib3J0ZWQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0JdW5pb24gaXdyZXFfZGF0YSB3cnF1OwogCiAJaWYgKFdBUk5fT04oIWxvY2FsLT5od19zY2FubmluZyAmJiAhbG9jYWwtPnN3X3NjYW5uaW5nKSkKIAkJcmV0dXJuOwogCi0JbG9jYWwtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgPSBqaWZmaWVzOwotCW1lbXNldCgmd3JxdSwgMCwgc2l6ZW9mKHdycXUpKTsKKwlpZiAoV0FSTl9PTighbG9jYWwtPnNjYW5fcmVxKSkKKwkJcmV0dXJuOwogCi0JLyoKLQkgKiBsb2NhbC0+c2Nhbl9zZGF0YSBjb3VsZCBoYXZlIGJlZW4gTlVMTGVkIGJ5IHRoZSBpbnRlcmZhY2UKLQkgKiBkb3duIGNvZGUgaW4gY2FzZSB3ZSB3ZXJlIHNjYW5uaW5nIG9uIGFuIGludGVyZmFjZSB0aGF0IGlzCi0JICogYmVpbmcgdGFrZW4gZG93bi4KLQkgKi8KLQlzZGF0YSA9IGxvY2FsLT5zY2FuX3NkYXRhOwotCWlmIChzZGF0YSkKLQkJd2lyZWxlc3Nfc2VuZF9ldmVudChzZGF0YS0+ZGV2LCBTSU9DR0lXU0NBTiwgJndycXUsIE5VTEwpOworCWlmIChsb2NhbC0+c2Nhbl9yZXEgIT0gJmxvY2FsLT5pbnRfc2Nhbl9yZXEpCisJCWNmZzgwMjExX3NjYW5fZG9uZShsb2NhbC0+c2Nhbl9yZXEsIGFib3J0ZWQpOworCWxvY2FsLT5zY2FuX3JlcSA9IE5VTEw7CisKKwlsb2NhbC0+bGFzdF9zY2FuX2NvbXBsZXRlZCA9IGppZmZpZXM7CiAKIAlpZiAobG9jYWwtPmh3X3NjYW5uaW5nKSB7CiAJCWxvY2FsLT5od19zY2FubmluZyA9IGZhbHNlOwpAQCAtNDcyLDM0ICszMTcsNDYgQEAKIAluZXRpZl9hZGRyX3VubG9jayhsb2NhbC0+bWRldik7CiAJbmV0aWZfdHhfdW5sb2NrX2JoKGxvY2FsLT5tZGV2KTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUpCisJCWxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUobG9jYWxfdG9faHcobG9jYWwpKTsKKworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJY29udGludWU7CisKIAkJLyogVGVsbCBBUCB3ZSdyZSBiYWNrICovCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJaWYgKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgewotCQkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMCk7CisJCQlpZiAoc2RhdGEtPnUubWdkLmZsYWdzICYgSUVFRTgwMjExX1NUQV9BU1NPQ0lBVEVEKSB7CisJCQkJaWVlZTgwMjExX3NjYW5fcHNfZGlzYWJsZShzZGF0YSk7CiAJCQkJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCQkJfQogCQl9IGVsc2UKIAkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKKworCQkvKiByZS1lbmFibGUgYmVhY29uaW5nICovCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCisJCQlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLAorCQkJCQkgICAgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAogIGRvbmU6CiAJaWVlZTgwMjExX21sbWVfbm90aWZ5X3NjYW5fY29tcGxldGVkKGxvY2FsKTsKKwlpZWVlODAyMTFfaWJzc19ub3RpZnlfc2Nhbl9jb21wbGV0ZWQobG9jYWwpOwogCWllZWU4MDIxMV9tZXNoX25vdGlmeV9zY2FuX2NvbXBsZXRlZChsb2NhbCk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCk7CiAKLQogdm9pZCBpZWVlODAyMTFfc2Nhbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLCBzY2FuX3dvcmsud29yayk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBsb2NhbC0+c2Nhbl9zZGF0YTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47Ci0JaW50IHNraXA7CisJaW50IHNraXAsIGk7CiAJdW5zaWduZWQgbG9uZyBuZXh0X2RlbGF5ID0gMDsKIAogCS8qCkBAIC01MTAsMzMgKzM2NywxMyBAQAogCiAJc3dpdGNoIChsb2NhbC0+c2Nhbl9zdGF0ZSkgewogCWNhc2UgU0NBTl9TRVRfQ0hBTk5FTDoKLQkJLyoKLQkJICogR2V0IGN1cnJlbnQgc2NhbiBiYW5kLiBzY2FuX2JhbmQgbWF5IGJlIElFRUU4MDIxMV9OVU1fQkFORFMKLQkJICogYWZ0ZXIgd2Ugc3VjY2Vzc2Z1bGx5IHNjYW5uZWQgdGhlIGxhc3QgY2hhbm5lbCBvZiB0aGUgbGFzdAotCQkgKiBiYW5kIChhbmQgdGhlIGxhc3QgYmFuZCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGh3KQotCQkgKi8KLQkJaWYgKGxvY2FsLT5zY2FuX2JhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTKQotCQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5zY2FuX2JhbmRdOwotCQllbHNlCi0JCQlzYmFuZCA9IE5VTEw7Ci0KLQkJLyoKLQkJICogSWYgd2UgYXJlIGF0IGFuIHVuc3VwcG9ydGVkIGJhbmQgYW5kIGhhdmUgbW9yZSBiYW5kcwotCQkgKiBsZWZ0IHRvIHNjYW4sIGFkdmFuY2UgdG8gdGhlIG5leHQgc3VwcG9ydGVkIG9uZS4KLQkJICovCi0JCXdoaWxlICghc2JhbmQgJiYgbG9jYWwtPnNjYW5fYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFMgLSAxKSB7Ci0JCQlsb2NhbC0+c2Nhbl9iYW5kKys7Ci0JCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPnNjYW5fYmFuZF07Ci0JCQlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA9IDA7Ci0JCX0KLQogCQkvKiBpZiBubyBtb3JlIGJhbmRzL2NoYW5uZWxzIGxlZnQsIGNvbXBsZXRlIHNjYW4gKi8KLQkJaWYgKCFzYmFuZCB8fCBsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBzYmFuZC0+bl9jaGFubmVscykgewotCQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKGxvY2FsX3RvX2h3KGxvY2FsKSk7CisJCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA+PSBsb2NhbC0+c2Nhbl9yZXEtPm5fY2hhbm5lbHMpIHsKKwkJCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChsb2NhbF90b19odyhsb2NhbCksIGZhbHNlKTsKIAkJCXJldHVybjsKIAkJfQogCQlza2lwID0gMDsKLQkJY2hhbiA9ICZzYmFuZC0+Y2hhbm5lbHNbbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHhdOworCQljaGFuID0gbG9jYWwtPnNjYW5fcmVxLT5jaGFubmVsc1tsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeF07CiAKIAkJaWYgKGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fRElTQUJMRUQgfHwKIAkJICAgIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKQEAgLTU1MiwxNSArMzg5LDYgQEAKIAogCQkvKiBhZHZhbmNlIHN0YXRlIG1hY2hpbmUgdG8gbmV4dCBjaGFubmVsL2JhbmQgKi8KIAkJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHgrKzsKLQkJaWYgKGxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID49IHNiYW5kLT5uX2NoYW5uZWxzKSB7Ci0JCQkvKgotCQkJICogc2Nhbl9iYW5kIG1heSBlbmQgdXAgPT0gSUVFRTgwMjExX05VTV9CQU5EUywgYnV0Ci0JCQkgKiB3ZSdsbCBjYXRjaCB0aGF0IGNhc2UgYWJvdmUgYW5kIGNvbXBsZXRlIHRoZSBzY2FuCi0JCQkgKiBpZiB0aGF0IGlzIHRoZSBjYXNlLgotCQkJICovCi0JCQlsb2NhbC0+c2Nhbl9iYW5kKys7Ci0JCQlsb2NhbC0+c2Nhbl9jaGFubmVsX2lkeCA9IDA7Ci0JCX0KIAogCQlpZiAoc2tpcCkKIAkJCWJyZWFrOwpAQCAtNTczLDEwICs0MDEsMTUgQEAKIAkJbmV4dF9kZWxheSA9IElFRUU4MDIxMV9QQVNTSVZFX0NIQU5ORUxfVElNRTsKIAkJbG9jYWwtPnNjYW5fc3RhdGUgPSBTQ0FOX1NFVF9DSEFOTkVMOwogCi0JCWlmIChsb2NhbC0+c2Nhbl9jaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTikKKwkJaWYgKGxvY2FsLT5zY2FuX2NoYW5uZWwtPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUEFTU0lWRV9TQ0FOIHx8CisJCSAgICAhbG9jYWwtPnNjYW5fcmVxLT5uX3NzaWRzKQogCQkJYnJlYWs7Ci0JCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgTlVMTCwgbG9jYWwtPnNjYW5fc3NpZCwKLQkJCQkJIGxvY2FsLT5zY2FuX3NzaWRfbGVuKTsKKwkJZm9yIChpID0gMDsgaSA8IGxvY2FsLT5zY2FuX3JlcS0+bl9zc2lkczsgaSsrKQorCQkJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKAorCQkJCXNkYXRhLCBOVUxMLAorCQkJCWxvY2FsLT5zY2FuX3JlcS0+c3NpZHNbaV0uc3NpZCwKKwkJCQlsb2NhbC0+c2Nhbl9yZXEtPnNzaWRzW2ldLnNzaWRfbGVuLAorCQkJCWxvY2FsLT5zY2FuX3JlcS0+aWUsIGxvY2FsLT5zY2FuX3JlcS0+aWVfbGVuKTsKIAkJbmV4dF9kZWxheSA9IElFRUU4MDIxMV9DSEFOTkVMX1RJTUU7CiAJCWJyZWFrOwogCX0KQEAgLTU4NywxNCArNDIwLDE5IEBACiAKIAogaW50IGllZWU4MDIxMV9zdGFydF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNjYW5fc2RhdGEsCi0JCQkgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzY2FuX3NkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAotCWlmIChzc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCisJaWYgKCFyZXEpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGxvY2FsLT5zY2FuX3JlcSAmJiBsb2NhbC0+c2Nhbl9yZXEgIT0gcmVxKQorCQlyZXR1cm4gLUVCVVNZOworCisJbG9jYWwtPnNjYW5fcmVxID0gcmVxOworCiAJLyogTUxNRS1TQ0FOLnJlcXVlc3QgKHBhZ2UgMTE4KSAgcGFnZSAxNDQgKDExLjEuMy4xKQogCSAqIEJTU1R5cGU6IElORlJBU1RSVUNUVVJFLCBJTkRFUEVOREVOVCwgQU5ZX0JTUwogCSAqIEJTU0lEOiBNQUNBZGRyZXNzCkBAIC02MjIsNyArNDYwLDcgQEAKIAkJaW50IHJjOwogCiAJCWxvY2FsLT5od19zY2FubmluZyA9IHRydWU7Ci0JCXJjID0gbG9jYWwtPm9wcy0+aHdfc2Nhbihsb2NhbF90b19odyhsb2NhbCksIHNzaWQsIHNzaWRfbGVuKTsKKwkJcmMgPSBsb2NhbC0+b3BzLT5od19zY2FuKGxvY2FsX3RvX2h3KGxvY2FsKSwgcmVxKTsKIAkJaWYgKHJjKSB7CiAJCQlsb2NhbC0+aHdfc2Nhbm5pbmcgPSBmYWxzZTsKIAkJCXJldHVybiByYzsKQEAgLTYzMSwyOSArNDY5LDQ5IEBACiAJCXJldHVybiAwOwogCX0KIAorCS8qCisJICogSGFyZHdhcmUvZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBod19zY2FuLCBzbyB1c2Ugc29mdHdhcmUKKwkgKiBzY2FubmluZyBpbnN0ZWFkLiBGaXJzdCBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgd2l0aCBwb3dlciBzYXZlCisJICogYml0IG9uIHNvIHRoYXQgQVAgd2lsbCBidWZmZXIgdGhlIGZyYW1lcyBmb3IgdXMgd2hpbGUgd2UgYXJlIG5vdAorCSAqIGxpc3RlbmluZywgdGhlbiBzZW5kIHByb2JlIHJlcXVlc3RzIHRvIGVhY2ggY2hhbm5lbCBhbmQgd2FpdCBmb3IKKwkgKiB0aGUgcmVzcG9uc2VzLiBBZnRlciBhbGwgY2hhbm5lbHMgYXJlIHNjYW5uZWQsIHR1bmUgYmFjayB0byB0aGUKKwkgKiBvcmlnaW5hbCBjaGFubmVsIGFuZCBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgd2l0aCBwb3dlciBzYXZlIGJpdAorCSAqIG9mZiB0byB0cmlnZ2VyIHRoZSBBUCB0byBzZW5kIHVzIGFsbCB0aGUgYnVmZmVyZWQgZnJhbWVzLgorCSAqCisJICogTm90ZSB0aGF0IHdoaWxlIGxvY2FsLT5zd19zY2FubmluZyBpcyB0cnVlIGV2ZXJ5dGhpbmcgZWxzZSBidXQKKwkgKiBudWxsZnVuYyBmcmFtZXMgYW5kIHByb2JlIHJlcXVlc3RzIHdpbGwgYmUgZHJvcHBlZCBpbgorCSAqIGllZWU4MDIxMV90eF9oX2NoZWNrX2Fzc29jKCkuCisJICovCiAJbG9jYWwtPnN3X3NjYW5uaW5nID0gdHJ1ZTsKKwlpZiAobG9jYWwtPm9wcy0+c3dfc2Nhbl9zdGFydCkKKwkJbG9jYWwtPm9wcy0+c3dfc2Nhbl9zdGFydChsb2NhbF90b19odyhsb2NhbCkpOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIGRpc2FibGUgYmVhY29uaW5nICovCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKKwkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCisJCQlpZWVlODAyMTFfaWZfY29uZmlnKHNkYXRhLAorCQkJCQkgICAgSUVFRTgwMjExX0lGQ0NfQkVBQ09OX0VOQUJMRUQpOworCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQkJaWYgKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgeworCQkJaWYgKHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgewogCQkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKLQkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDEpOworCQkJCWllZWU4MDIxMV9zY2FuX3BzX2VuYWJsZShzZGF0YSk7CiAJCQl9CiAJCX0gZWxzZQogCQkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKHNkYXRhLT5kZXYpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAotCWlmIChzc2lkKSB7Ci0JCWxvY2FsLT5zY2FuX3NzaWRfbGVuID0gc3NpZF9sZW47Ci0JCW1lbWNweShsb2NhbC0+c2Nhbl9zc2lkLCBzc2lkLCBzc2lkX2xlbik7Ci0JfSBlbHNlCi0JCWxvY2FsLT5zY2FuX3NzaWRfbGVuID0gMDsKIAlsb2NhbC0+c2Nhbl9zdGF0ZSA9IFNDQU5fU0VUX0NIQU5ORUw7CiAJbG9jYWwtPnNjYW5fY2hhbm5lbF9pZHggPSAwOwotCWxvY2FsLT5zY2FuX2JhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCWxvY2FsLT5zY2FuX3NkYXRhID0gc2Nhbl9zZGF0YTsKKwlsb2NhbC0+c2Nhbl9yZXEgPSByZXE7CiAKIAluZXRpZl9hZGRyX2xvY2tfYmgobG9jYWwtPm1kZXYpOwogCWxvY2FsLT5maWx0ZXJfZmxhZ3MgfD0gRklGX0JDTl9QUkJSRVNQX1BST01JU0M7CkBAIC02NzMsMTMgKzUzMSwyMSBAQAogCiAKIGludCBpZWVlODAyMTFfcmVxdWVzdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJICAgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKKwkJCSAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGE7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKKworCWlmICghcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChsb2NhbC0+c2Nhbl9yZXEgJiYgbG9jYWwtPnNjYW5fcmVxICE9IHJlcSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJcmV0dXJuIGllZWU4MDIxMV9zdGFydF9zY2FuKHNkYXRhLCBzc2lkLCBzc2lkX2xlbik7CisJCXJldHVybiBpZWVlODAyMTFfc3RhcnRfc2NhbihzZGF0YSwgcmVxKTsKIAogCS8qCiAJICogU1RBIGhhcyBhIHN0YXRlIG1hY2hpbmUgdGhhdCBtaWdodCBuZWVkIHRvIGRlZmVyIHNjYW5uaW5nCkBAIC02OTMsMjQyICs1NTksOSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWlmc3RhID0gJnNkYXRhLT51LnN0YTsKLQotCWlmc3RhLT5zY2FuX3NzaWRfbGVuID0gc3NpZF9sZW47Ci0JaWYgKHNzaWRfbGVuKQotCQltZW1jcHkoaWZzdGEtPnNjYW5fc3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmc3RhLT5yZXF1ZXN0KTsKLQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZnN0YS0+d29yayk7CisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXNldF9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmbWdkLT5yZXF1ZXN0KTsKKwlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+d29yayk7CiAKIAlyZXR1cm4gMDsKIH0KLQotCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2Nhbl9hZGRfaWVzKHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywKLQkJCQkgICBjaGFyICoqY3VycmVudF9ldiwgY2hhciAqZW5kX2J1ZikKLXsKLQl1OCAqcG9zLCAqZW5kLCAqbmV4dDsKLQlzdHJ1Y3QgaXdfZXZlbnQgaXdlOwotCi0JaWYgKGJzcyA9PSBOVUxMIHx8IGJzcy0+aWVzID09IE5VTEwpCi0JCXJldHVybjsKLQotCS8qCi0JICogSWYgbmVlZGVkLCBmcmFnbWVudCB0aGUgSUVzIGJ1ZmZlciAoYXQgSUUgYm91bmRhcmllcykgaW50byBzaG9ydAotCSAqIGVub3VnaCBmcmFnbWVudHMgdG8gZml0IGludG8gSVdfR0VORVJJQ19JRV9NQVggb2N0ZXQgbWVzc2FnZXMuCi0JICovCi0JcG9zID0gYnNzLT5pZXM7Ci0JZW5kID0gcG9zICsgYnNzLT5pZXNfbGVuOwotCi0Jd2hpbGUgKGVuZCAtIHBvcyA+IElXX0dFTkVSSUNfSUVfTUFYKSB7Ci0JCW5leHQgPSBwb3MgKyAyICsgcG9zWzFdOwotCQl3aGlsZSAobmV4dCArIDIgKyBuZXh0WzFdIC0gcG9zIDwgSVdfR0VORVJJQ19JRV9NQVgpCi0JCQluZXh0ID0gbmV4dCArIDIgKyBuZXh0WzFdOwotCi0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gbmV4dCAtIHBvczsKLQkJKmN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCAqY3VycmVudF9ldiwKLQkJCQkJCSAgIGVuZF9idWYsICZpd2UsIHBvcyk7Ci0KLQkJcG9zID0gbmV4dDsKLQl9Ci0KLQlpZiAoZW5kID4gcG9zKSB7Ci0JCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCWl3ZS5jbWQgPSBJV0VWR0VOSUU7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gZW5kIC0gcG9zOwotCQkqY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sICpjdXJyZW50X2V2LAotCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwgcG9zKTsKLQl9Ci19Ci0KLQotc3RhdGljIGNoYXIgKgotaWVlZTgwMjExX3NjYW5fcmVzdWx0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzLAotCQkgICAgICBjaGFyICpjdXJyZW50X2V2LCBjaGFyICplbmRfYnVmKQotewotCXN0cnVjdCBpd19ldmVudCBpd2U7Ci0JY2hhciAqYnVmOwotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJICAgICAgIGJzcy0+bGFzdF91cGRhdGUgKyBJRUVFODAyMTFfU0NBTl9SRVNVTFRfRVhQSVJFKSkKLQkJcmV0dXJuIGN1cnJlbnRfZXY7Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBTSU9DR0lXQVA7Ci0JaXdlLnUuYXBfYWRkci5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7Ci0JbWVtY3B5KGl3ZS51LmFwX2FkZHIuc2FfZGF0YSwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgIElXX0VWX0FERFJfTEVOKTsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKLQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpIHsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBic3NfbWVzaF9pZF9sZW4oYnNzKTsKLQkJaXdlLnUuZGF0YS5mbGFncyA9IDE7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBic3NfbWVzaF9pZChic3MpKTsKLQl9IGVsc2UgewotCQlpd2UudS5kYXRhLmxlbmd0aCA9IGJzcy0+c3NpZF9sZW47Ci0JCWl3ZS51LmRhdGEuZmxhZ3MgPSAxOwotCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCSAgJml3ZSwgYnNzLT5zc2lkKTsKLQl9Ci0KLQlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykKLQkgICAgfHwgYnNzX21lc2hfY2ZnKGJzcykpIHsKLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IFNJT0NHSVdNT0RFOwotCQlpZiAoYnNzX21lc2hfY2ZnKGJzcykpCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9NRVNIOwotCQllbHNlIGlmIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQotCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOwotCQllbHNlCi0JCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCi0JCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKLQl9Ci0KLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLQlpd2UudS5mcmVxLm0gPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoYnNzLT5mcmVxKTsKLQlpd2UudS5mcmVxLmUgPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKLQotCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JaXdlLmNtZCA9IFNJT0NHSVdGUkVROwotCWl3ZS51LmZyZXEubSA9IGJzcy0+ZnJlcTsKLQlpd2UudS5mcmVxLmUgPSA2OwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAotCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKLQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCWl3ZS5jbWQgPSBJV0VWUVVBTDsKLQlpd2UudS5xdWFsLnF1YWwgPSBic3MtPnF1YWw7Ci0JaXdlLnUucXVhbC5sZXZlbCA9IGJzcy0+c2lnbmFsOwotCWl3ZS51LnF1YWwubm9pc2UgPSBic3MtPm5vaXNlOwotCWl3ZS51LnF1YWwudXBkYXRlZCA9IGxvY2FsLT53c3RhdHNfZmxhZ3M7Ci0JY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsICZpd2UsCi0JCQkJCSAgSVdfRVZfUVVBTF9MRU4pOwotCi0JbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQlpd2UuY21kID0gU0lPQ0dJV0VOQ09ERTsKLQlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRU5BQkxFRCB8IElXX0VOQ09ERV9OT0tFWTsKLQllbHNlCi0JCWl3ZS51LmRhdGEuZmxhZ3MgPSBJV19FTkNPREVfRElTQUJMRUQ7Ci0JaXdlLnUuZGF0YS5sZW5ndGggPSAwOwotCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkgICZpd2UsICIiKTsKLQotCWllZWU4MDIxMV9zY2FuX2FkZF9pZXMoaW5mbywgYnNzLCAmY3VycmVudF9ldiwgZW5kX2J1Zik7Ci0KLQlpZiAoYnNzLT5zdXBwX3JhdGVzX2xlbiA+IDApIHsKLQkJLyogZGlzcGxheSBhbGwgc3VwcG9ydGVkIHJhdGVzIGluIHJlYWRhYmxlIGZvcm1hdCAqLwotCQljaGFyICpwID0gY3VycmVudF9ldiArIGl3ZV9zdHJlYW1fbGNwX2xlbihpbmZvKTsKLQkJaW50IGk7Ci0KLQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZihpd2UpKTsKLQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOwotCQkvKiBUaG9zZSB0d28gZmxhZ3MgYXJlIGlnbm9yZWQuLi4gKi8KLQkJaXdlLnUuYml0cmF0ZS5maXhlZCA9IGl3ZS51LmJpdHJhdGUuZGlzYWJsZWQgPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBic3MtPnN1cHBfcmF0ZXNfbGVuOyBpKyspIHsKLQkJCWl3ZS51LmJpdHJhdGUudmFsdWUgPSAoKGJzcy0+c3VwcF9yYXRlc1tpXSAmCi0JCQkJCQkJMHg3ZikgKiA1MDAwMDApOwotCQkJcCA9IGl3ZV9zdHJlYW1fYWRkX3ZhbHVlKGluZm8sIGN1cnJlbnRfZXYsIHAsCi0JCQkJCWVuZF9idWYsICZpd2UsIElXX0VWX1BBUkFNX0xFTik7Ci0JCX0KLQkJY3VycmVudF9ldiA9IHA7Ci0JfQotCi0JYnVmID0ga21hbGxvYygzMCwgR0ZQX0FUT01JQyk7Ci0JaWYgKGJ1ZikgewotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJc3ByaW50ZihidWYsICJ0c2Y9JTAxNmxseCIsICh1bnNpZ25lZCBsb25nIGxvbmcpKGJzcy0+dGltZXN0YW1wKSk7Ci0JCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAotCQkJCQkJICAmaXdlLCBidWYpOwotCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOwotCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJc3ByaW50ZihidWYsICIgTGFzdCBiZWFjb246ICVkbXMgYWdvIiwKLQkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGJzcy0+bGFzdF91cGRhdGUpKTsKLQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkgIGVuZF9idWYsICZpd2UsIGJ1Zik7Ci0JCWtmcmVlKGJ1Zik7Ci0JfQotCi0JaWYgKGJzc19tZXNoX2NmZyhic3MpKSB7Ci0JCXU4ICpjZmcgPSBic3NfbWVzaF9jZmcoYnNzKTsKLQkJYnVmID0ga21hbGxvYyg1MCwgR0ZQX0FUT01JQyk7Ci0JCWlmIChidWYpIHsKLQkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7Ci0JCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJCXNwcmludGYoYnVmLCAiTWVzaCBuZXR3b3JrICh2ZXJzaW9uICVkKSIsIGNmZ1swXSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gUHJvdG9jb2wgSUQ6ICIKLQkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzFdLCBjZmdbMl0sIGNmZ1szXSwKLQkJCQkJCQljZmdbNF0pOwotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJCSAgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCQlzcHJpbnRmKGJ1ZiwgIlBhdGggU2VsZWN0aW9uIE1ldHJpYyBJRDogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbNV0sIGNmZ1s2XSwgY2ZnWzddLAotCQkJCQkJCWNmZ1s4XSk7Ci0JCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwotCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCi0JCQkJCQkJICBlbmRfYnVmLAotCQkJCQkJCSAgJml3ZSwgYnVmKTsKLQkJCXNwcmludGYoYnVmLCAiQ29uZ2VzdGlvbiBDb250cm9sIE1vZGUgSUQ6ICIKLQkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzldLCBjZmdbMTBdLAotCQkJCQkJCWNmZ1sxMV0sIGNmZ1sxMl0pOwotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJCSAgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCQlzcHJpbnRmKGJ1ZiwgIkNoYW5uZWwgUHJlY2VkZW5jZTogIgotCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbMTNdLCBjZmdbMTRdLAotCQkJCQkJCWNmZ1sxNV0sIGNmZ1sxNl0pOwotCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKLQkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAotCQkJCQkJCSAgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCQlrZnJlZShidWYpOwotCQl9Ci0JfQotCi0JcmV0dXJuIGN1cnJlbnRfZXY7Ci19Ci0KLQotaW50IGllZWU4MDIxMV9zY2FuX3Jlc3VsdHMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAotCQkJICAgY2hhciAqYnVmLCBzaXplX3QgbGVuKQotewotCWNoYXIgKmN1cnJlbnRfZXYgPSBidWY7Ci0JY2hhciAqZW5kX2J1ZiA9IGJ1ZiArIGxlbjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwotCi0Jc3Bpbl9sb2NrX2JoKCZsb2NhbC0+YnNzX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmbG9jYWwtPmJzc19saXN0LCBsaXN0KSB7Ci0JCWlmIChidWYgKyBsZW4gLSBjdXJyZW50X2V2IDw9IElXX0VWX0FERFJfTEVOKSB7Ci0JCQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQkJCXJldHVybiAtRTJCSUc7Ci0JCX0KLQkJY3VycmVudF9ldiA9IGllZWU4MDIxMV9zY2FuX3Jlc3VsdChsb2NhbCwgaW5mbywgYnNzLAotCQkJCQkJICAgICAgIGN1cnJlbnRfZXYsIGVuZF9idWYpOwotCX0KLQlzcGluX3VubG9ja19iaCgmbG9jYWwtPmJzc19sb2NrKTsKLQlyZXR1cm4gY3VycmVudF9ldiAtIGJ1ZjsKLX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYyBiL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYwppbmRleCBmNzJiYWQ2Li41ZjdhMjYyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKKysrIGIvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCkBAIC02NSw3ICs2NSw3IEBACiAJCQlJRUVFODAyMTFfU1BDVF9NU1JfUlBSVF9NT0RFX1JFRlVTRUQ7CiAJbXNyX3JlcG9ydC0+dS5hY3Rpb24udS5tZWFzdXJlbWVudC5tc3JfZWxlbS50eXBlID0gcmVxdWVzdF9pZS0+dHlwZTsKIAotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiLCAxKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfcHJvY2Vzc19tZWFzdXJlbWVudF9yZXEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC04NCwzICs4NCwxMDQgQEAKIAkJCW1nbXQtPnNhLCBtZ210LT5ic3NpZCwKIAkJCW1nbXQtPnUuYWN0aW9uLnUubWVhc3VyZW1lbnQuZGlhbG9nX3Rva2VuKTsKIH0KKwordm9pZCBpZWVlODAyMTFfY2hzd2l0Y2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwgdS5tZ2QuY2hzd2l0Y2hfd29yayk7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwkJcmV0dXJuOworCisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoc2RhdGEtPmxvY2FsLCBpZm1nZC0+YnNzaWQsCisJCQkJICAgc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCQkJCSAgIGlmbWdkLT5zc2lkLCBpZm1nZC0+c3NpZF9sZW4pOworCWlmICghYnNzKQorCQlnb3RvIGV4aXQ7CisKKwlzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbCA9IHNkYXRhLT5sb2NhbC0+Y3NhX2NoYW5uZWw7CisJLyogWFhYOiBzaG91bGRuJ3QgcmVhbGx5IG1vZGlmeSBjZmc4MDIxMS1vd25lZCBkYXRhISAqLworCWlmICghaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSkKKwkJYnNzLT5jYnNzLmNoYW5uZWwgPSBzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbDsKKworCWllZWU4MDIxMV9yeF9ic3NfcHV0KHNkYXRhLT5sb2NhbCwgYnNzKTsKK2V4aXQ6CisJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRDsKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXNfYnlfcmVhc29uKCZzZGF0YS0+bG9jYWwtPmh3LAorCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fQ1NBKTsKK30KKwordm9pZCBpZWVlODAyMTFfY2hzd2l0Y2hfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0KKwkJKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKikgZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKworCXF1ZXVlX3dvcmsoc2RhdGEtPmxvY2FsLT5ody53b3JrcXVldWUsICZpZm1nZC0+Y2hzd2l0Y2hfd29yayk7Cit9CisKK3ZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfY2hhbnN3aXRjaChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqc3dfZWxlbSwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpuZXdfY2g7CisJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CisJaW50IG5ld19mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KHN3X2VsZW0tPm5ld19jaF9udW0pOworCisJLyogRklYTUU6IEhhbmRsZSBBREhPQyBsYXRlciAqLworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuOworCisJaWYgKGlmbWdkLT5zdGF0ZSAhPSBJRUVFODAyMTFfU1RBX01MTUVfQVNTT0NJQVRFRCkKKwkJcmV0dXJuOworCisJaWYgKHNkYXRhLT5sb2NhbC0+c3dfc2Nhbm5pbmcgfHwgc2RhdGEtPmxvY2FsLT5od19zY2FubmluZykKKwkJcmV0dXJuOworCisJLyogRGlzcmVnYXJkIHN1YnNlcXVlbnQgYmVhY29ucyBpZiB3ZSBhcmUgYWxyZWFkeSBydW5uaW5nIGEgdGltZXIKKwkgICBwcm9jZXNzaW5nIGEgQ1NBICovCisKKwlpZiAoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DU0FfUkVDRUlWRUQpCisJCXJldHVybjsKKworCW5ld19jaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChzZGF0YS0+bG9jYWwtPmh3LndpcGh5LCBuZXdfZnJlcSk7CisJaWYgKCFuZXdfY2ggfHwgbmV3X2NoLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQlyZXR1cm47CisKKwlzZGF0YS0+bG9jYWwtPmNzYV9jaGFubmVsID0gbmV3X2NoOworCisJaWYgKHN3X2VsZW0tPmNvdW50IDw9IDEpIHsKKwkJcXVldWVfd29yayhzZGF0YS0+bG9jYWwtPmh3LndvcmtxdWV1ZSwgJmlmbWdkLT5jaHN3aXRjaF93b3JrKTsKKwl9IGVsc2UgeworCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKCZzZGF0YS0+bG9jYWwtPmh3LAorCQkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSk7CisJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0NTQV9SRUNFSVZFRDsKKwkJbW9kX3RpbWVyKCZpZm1nZC0+Y2hzd2l0Y2hfdGltZXIsCisJCQkgIGppZmZpZXMgKworCQkJICBtc2Vjc190b19qaWZmaWVzKHN3X2VsZW0tPmNvdW50ICoKKwkJCQkJICAgYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbCkpOworCX0KK30KKwordm9pZCBpZWVlODAyMTFfaGFuZGxlX3B3cl9jb25zdHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJIHUxNiBjYXBhYl9pbmZvLCB1OCAqcHdyX2NvbnN0cl9lbGVtLAorCQkJCSB1OCBwd3JfY29uc3RyX2VsZW1fbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZzZGF0YS0+bG9jYWwtPmh3LmNvbmY7CisKKwlpZiAoIShjYXBhYl9pbmZvICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpKQorCQlyZXR1cm47CisKKwkvKiBQb3dlciBjb25zdHJhaW50IElFIGxlbmd0aCBzaG91bGQgYmUgMSBvY3RldCAqLworCWlmIChwd3JfY29uc3RyX2VsZW1fbGVuICE9IDEpCisJCXJldHVybjsKKworCWlmICgoKnB3cl9jb25zdHJfZWxlbSA8PSBjb25mLT5jaGFubmVsLT5tYXhfcG93ZXIpICYmCisJICAgICgqcHdyX2NvbnN0cl9lbGVtICE9IHNkYXRhLT5sb2NhbC0+cG93ZXJfY29uc3RyX2xldmVsKSkgeworCQlzZGF0YS0+bG9jYWwtPnBvd2VyX2NvbnN0cl9sZXZlbCA9ICpwd3JfY29uc3RyX2VsZW07CisJCWllZWU4MDIxMV9od19jb25maWcoc2RhdGEtPmxvY2FsLCAwKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggMTBjNTUzOS4uYzVmMTRlNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTE5NCwxMiArMTk0LDQ3IEBACiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgIFNUQV9USURfTlVNOyBpKyspIHsKKwkJc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX3J4OworCQlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHg7CisKIAkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOwotCQlpZiAoc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXSkKLQkJICBkZWxfdGltZXJfc3luYygmc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXS0+c2Vzc2lvbl90aW1lcik7Ci0JCWlmIChzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldKQotCQkgIGRlbF90aW1lcl9zeW5jKCZzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5hZGRiYV9yZXNwX3RpbWVyKTsKKwkJdGlkX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXTsKKwkJLyogTWFrZSBzdXJlIHRpbWVyIHdvbid0IGZyZWUgdGhlIHRpZF9yeCBzdHJ1Y3QsIHNlZSBiZWxvdyAqLworCQlpZiAodGlkX3J4KQorCQkJdGlkX3J4LT5zaHV0ZG93biA9IHRydWU7CisKIAkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CisKKwkJLyoKKwkJICogT3V0c2lkZSBzcGlubG9jayAtIHNodXRkb3duIGlzIHRydWUgbm93IHNvIHRoYXQgdGhlIHRpbWVyCisJCSAqIHdvbid0IGZyZWUgdGlkX3J4LCB3ZSBoYXZlIHRvIGRvIHRoYXQgbm93LiBDYW4ndCBsZXQgdGhlCisJCSAqIHRpbWVyIGRvIGl0IGJlY2F1c2Ugd2UgaGF2ZSB0byBzeW5jIHRoZSB0aW1lciBvdXRzaWRlIHRoZQorCQkgKiBsb2NrIHRoYXQgaXQgdGFrZXMgaXRzZWxmLgorCQkgKi8KKwkJaWYgKHRpZF9yeCkgeworCQkJZGVsX3RpbWVyX3N5bmMoJnRpZF9yeC0+c2Vzc2lvbl90aW1lcik7CisJCQlrZnJlZSh0aWRfcngpOworCQl9CisKKwkJLyoKKwkJICogTm8gbmVlZCB0byBkbyBzdWNoIGNvbXBsaWNhdGlvbnMgZm9yIFRYIGFnZyBzZXNzaW9ucywgdGhlCisJCSAqIHBhdGggbGVhZGluZyB0byBmcmVlaW5nIHRoZSB0aWRfdHggc3RydWN0IGdvZXMgdmlhIGEgY2FsbAorCQkgKiBmcm9tIHRoZSBkcml2ZXIsIGFuZCB0aHVzIG5lZWRzIHRvIGxvb2sgdXAgdGhlIHN0YSBzdHJ1Y3QKKwkJICogYWdhaW4sIHdoaWNoIGNhbm5vdCBiZSBmb3VuZCB3aGVuIHdlIGdldCBoZXJlLiBIZW5jZSwgd2UKKwkJICoganVzdCBuZWVkIHRvIGRlbGV0ZSB0aGUgdGltZXIgYW5kIGZyZWUgdGhlIGFnZ3JlZ2F0aW9uCisJCSAqIGluZm87IHdlIHdvbid0IGJlIHRlbGxpbmcgdGhlIHBlZXIgYWJvdXQgaXQgdGhlbiBidXQgdGhhdAorCQkgKiBkb2Vzbid0IG1hdHRlciBpZiB3ZSdyZSBub3QgdGFsa2luZyB0byBpdCBhZ2FpbiBhbnl3YXkuCisJCSAqLworCQl0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldOworCQlpZiAodGlkX3R4KSB7CisJCQlkZWxfdGltZXJfc3luYygmdGlkX3R4LT5hZGRiYV9yZXNwX3RpbWVyKTsKKwkJCS8qCisJCQkgKiBTVEEgcmVtb3ZlZCB3aGlsZSBhZ2dyZWdhdGlvbiBzZXNzaW9uIGJlaW5nCisJCQkgKiBzdGFydGVkPyBCaXQgb2RkLCBidXQgcHVyZ2UgZnJhbWVzIGFueXdheS4KKwkJCSAqLworCQkJc2tiX3F1ZXVlX3B1cmdlKCZ0aWRfdHgtPnBlbmRpbmcpOworCQkJa2ZyZWUodGlkX3R4KTsKKwkJfQogCX0KIAogCV9fc3RhX2luZm9fZnJlZShsb2NhbCwgc3RhKTsKQEAgLTI0Niw4ICsyODEsNiBAQAogCQkgKiBlbmFibGUgc2Vzc2lvbl90aW1lcidzIGRhdGEgZGlmZmVyZW50aWF0aW9uLiByZWZlciB0bwogCQkgKiBzdGFfcnhfYWdnX3Nlc3Npb25fdGltZXJfZXhwaXJlZCBmb3IgdXNlYWdlICovCiAJCXN0YS0+dGltZXJfdG9fdGlkW2ldID0gaTsKLQkJLyogdGlkIHRvIHR4IHF1ZXVlOiBpbml0aWFsaXplIGFjY29yZGluZyB0byBIVyAoMCBpcyB2YWxpZCkgKi8KLQkJc3RhLT50aWRfdG9fdHhfcVtpXSA9IGllZWU4MDIxMV9udW1fcXVldWVzKCZsb2NhbC0+aHcpOwogCQkvKiByeCAqLwogCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldID0gSFRfQUdHX1NUQVRFX0lETEU7CiAJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAppbmRleCBlNDlhNWI5Li41NTM0ZDQ4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAorKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaApAQCAtMzQsNiArMzQsOSBAQAogICogQFdMQU5fU1RBX0NMRUFSX1BTX0ZJTFQ6IENsZWFyIFBTIGZpbHRlciBpbiBoYXJkd2FyZSAodXNpbmcgdGhlCiAgKglJRUVFODAyMTFfVFhfQ1RMX0NMRUFSX1BTX0ZJTFQgY29udHJvbCBmbGFnKSB3aGVuIHRoZSBuZXh0CiAgKglmcmFtZSB0byB0aGlzIHN0YXRpb24gaXMgdHJhbnNtaXR0ZWQuCisgKiBAV0xBTl9TVEFfTUZQOiBNYW5hZ2VtZW50IGZyYW1lIHByb3RlY3Rpb24gaXMgdXNlZCB3aXRoIHRoaXMgU1RBLgorICogQFdMQU5fU1RBX1NVU1BFTkQ6IFNldC9jbGVhcmVkIGR1cmluZyBhIHN1c3BlbmQvcmVzdW1lIGN5Y2xlLgorICoJVXNlZCB0byBkZW55IEFEREJBIHJlcXVlc3RzIChib3RoIFRYIGFuZCBSWCkuCiAgKi8KIGVudW0gaWVlZTgwMjExX3N0YV9pbmZvX2ZsYWdzIHsKIAlXTEFOX1NUQV9BVVRICQk9IDE8PDAsCkBAIC00Niw2ICs0OSw4IEBACiAJV0xBTl9TVEFfV0RTCQk9IDE8PDcsCiAJV0xBTl9TVEFfUFNQT0xMCQk9IDE8PDgsCiAJV0xBTl9TVEFfQ0xFQVJfUFNfRklMVAk9IDE8PDksCisJV0xBTl9TVEFfTUZQCQk9IDE8PDEwLAorCVdMQU5fU1RBX1NVU1BFTkQJPSAxPDwxMQogfTsKIAogI2RlZmluZSBTVEFfVElEX05VTSAxNgpAQCAtNjMsMTcgKzY4LDE4IEBACiAjZGVmaW5lIEhUX0FHR19TVEFURV9PUEVSQVRJT05BTAkoSFRfQUREQkFfUkVRVUVTVEVEX01TSyB8CVwKIAkJCQkJIEhUX0FEREJBX0RSVl9SRUFEWV9NU0sgfAlcCiAJCQkJCSBIVF9BRERCQV9SRUNFSVZFRF9NU0spCi0jZGVmaW5lIEhUX0FHR19TVEFURV9ERUJVR0ZTX0NUTAlCSVQoNykKIAogLyoqCiAgKiBzdHJ1Y3QgdGlkX2FtcGR1X3R4IC0gVElEIGFnZ3JlZ2F0aW9uIGluZm9ybWF0aW9uIChUeCkuCiAgKgogICogQGFkZGJhX3Jlc3BfdGltZXI6IHRpbWVyIGZvciBwZWVyJ3MgcmVzcG9uc2UgdG8gYWRkYmEgcmVxdWVzdAorICogQHBlbmRpbmc6IHBlbmRpbmcgZnJhbWVzIHF1ZXVlIC0tIHVzZSBzdGEncyBzcGlubG9jayB0byBwcm90ZWN0CiAgKiBAc3NuOiBTdGFydGluZyBTZXF1ZW5jZSBOdW1iZXIgZXhwZWN0ZWQgdG8gYmUgYWdncmVnYXRlZC4KICAqIEBkaWFsb2dfdG9rZW46IGRpYWxvZyB0b2tlbiBmb3IgYWdncmVnYXRpb24gc2Vzc2lvbgogICovCiBzdHJ1Y3QgdGlkX2FtcGR1X3R4IHsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBhZGRiYV9yZXNwX3RpbWVyOworCXN0cnVjdCBza19idWZmX2hlYWQgcGVuZGluZzsKIAl1MTYgc3NuOwogCXU4IGRpYWxvZ190b2tlbjsKIH07CkBAIC04Nyw4ICs5Myw5IEBACiAgKiBAc3RvcmVkX21wZHVfbnVtOiBudW1iZXIgb2YgTVBEVXMgaW4gcmVvcmRlcmluZyBidWZmZXIKICAqIEBzc246IFN0YXJ0aW5nIFNlcXVlbmNlIE51bWJlciBleHBlY3RlZCB0byBiZSBhZ2dyZWdhdGVkLgogICogQGJ1Zl9zaXplOiBidWZmZXIgc2l6ZSBmb3IgaW5jb21pbmcgQS1NUERVcwotICogQHRpbWVvdXQ6IHJlc2V0IHRpbWVyIHZhbHVlLgorICogQHRpbWVvdXQ6IHJlc2V0IHRpbWVyIHZhbHVlIChpbiBUVXMpLgogICogQGRpYWxvZ190b2tlbjogZGlhbG9nIHRva2VuIGZvciBhZ2dyZWdhdGlvbiBzZXNzaW9uCisgKiBAc2h1dGRvd246IHRoaXMgc2Vzc2lvbiBpcyBiZWluZyBzaHV0IGRvd24gZHVlIHRvIFNUQSByZW1vdmFsCiAgKi8KIHN0cnVjdCB0aWRfYW1wZHVfcnggewogCXN0cnVjdCBza19idWZmICoqcmVvcmRlcl9idWY7CkBAIC05OSw2ICsxMDYsNyBAQAogCXUxNiBidWZfc2l6ZTsKIAl1MTYgdGltZW91dDsKIAl1OCBkaWFsb2dfdG9rZW47CisJYm9vbCBzaHV0ZG93bjsKIH07CiAKIC8qKgpAQCAtMTk4LDcgKzIwNiw2IEBACiAgKiBAdGlkX3NlcTogcGVyLVRJRCBzZXF1ZW5jZSBudW1iZXJzIGZvciBzZW5kaW5nIHRvIHRoaXMgU1RBCiAgKiBAYW1wZHVfbWxtZTogQS1NUERVIHN0YXRlIG1hY2hpbmUgc3RhdGUKICAqIEB0aW1lcl90b190aWQ6IGlkZW50aXR5IG1hcHBpbmcgdG8gSUQgdGltZXJzCi0gKiBAdGlkX3RvX3R4X3E6IG1hcCB0aWQgdG8gdHggcXVldWUKICAqIEBsbGlkOiBMb2NhbCBsaW5rIElECiAgKiBAcGxpZDogUGVlciBsaW5rIElECiAgKiBAcmVhc29uOiBDYW5jZWwgcmVhc29uIG9uIFBMSU5LX0hPTERJTkcgc3RhdGUKQEAgLTI3Myw3ICsyODAsNiBAQAogCSAqLwogCXN0cnVjdCBzdGFfYW1wZHVfbWxtZSBhbXBkdV9tbG1lOwogCXU4IHRpbWVyX3RvX3RpZFtTVEFfVElEX05VTV07Ci0JdTggdGlkX3RvX3R4X3FbU1RBX1RJRF9OVU1dOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKIAkvKgpAQCAtMzgyLDggKzM4OCw2IEBACiB9CiAKIAotLyogTWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudGx5IHJlZ2lzdGVyZWQgc3RhdGlvbnMgKi8KLSNkZWZpbmUgTUFYX1NUQV9DT1VOVCAyMDA3CiAKICNkZWZpbmUgU1RBX0hBU0hfU0laRSAyNTYKICNkZWZpbmUgU1RBX0hBU0goc3RhKSAoc3RhWzVdKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCA5NGRlNTAzLi4zZmIwNGE4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMzQsNyArMzQsNyBAQAogCiAjZGVmaW5lIElFRUU4MDIxMV9UWF9PSwkJMAogI2RlZmluZSBJRUVFODAyMTFfVFhfQUdBSU4JMQotI2RlZmluZSBJRUVFODAyMTFfVFhfRlJBR19BR0FJTgkyCisjZGVmaW5lIElFRUU4MDIxMV9UWF9QRU5ESU5HCTIKIAogLyogbWlzYyB1dGlscyAqLwogCkBAIC0xOTIsNyArMTkyLDE5IEBACiAJCXJldHVybiBUWF9DT05USU5VRTsKIAogCWlmICh1bmxpa2VseSh0eC0+bG9jYWwtPnN3X3NjYW5uaW5nKSAmJgotCSAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItPmZyYW1lX2NvbnRyb2wpKQorCSAgICAhaWVlZTgwMjExX2lzX3Byb2JlX3JlcShoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJICAgICFpZWVlODAyMTFfaXNfbnVsbGZ1bmMoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJLyoKKwkJICogV2hlbiBzb2Z0d2FyZSBzY2FubmluZyBvbmx5IG51bGxmdW5jIGZyYW1lcyAodG8gbm90aWZ5CisJCSAqIHRoZSBzbGVlcCBzdGF0ZSB0byB0aGUgQVApIGFuZCBwcm9iZSByZXF1ZXN0cyAoZm9yIHRoZQorCQkgKiBhY3RpdmUgc2NhbikgYXJlIGFsbG93ZWQsIGFsbCBvdGhlciBmcmFtZXMgc2hvdWxkIG5vdCBiZQorCQkgKiBzZW50IGFuZCB3ZSBzaG91bGQgbm90IGdldCBoZXJlLCBidXQgaWYgd2UgZG8KKwkJICogbm9uZXRoZWxlc3MsIGRyb3AgdGhlbSB0byBhdm9pZCBzZW5kaW5nIHRoZW0KKwkJICogb2ZmLWNoYW5uZWwuIFNlZSB0aGUgbGluayBiZWxvdyBhbmQKKwkJICogaWVlZTgwMjExX3N0YXJ0X3NjYW4oKSBmb3IgbW9yZS4KKwkJICoKKwkJICogaHR0cDovL2FydGljbGUuZ21hbmUub3JnL2dtYW5lLmxpbnV4Lmtlcm5lbC53aXJlbGVzcy5nZW5lcmFsLzMwMDg5CisJCSAqLwogCQlyZXR1cm4gVFhfRFJPUDsKIAogCWlmICh0eC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCkBAIC0zMzAsNiArMzQyLDIyIEBACiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQogCitzdGF0aWMgaW50IGllZWU4MDIxMV91c2VfbWZwKF9fbGUxNiBmYywgc3RydWN0IHN0YV9pbmZvICpzdGEsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKCFpZWVlODAyMTFfaXNfbWdtdChmYykpCisJCXJldHVybiAwOworCisJaWYgKHN0YSA9PSBOVUxMIHx8ICF0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX01GUCkpCisJCXJldHVybiAwOworCisJaWYgKCFpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopCisJCQkJCSAgICBza2ItPmRhdGEpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdAogaWVlZTgwMjExX3R4X2hfdW5pY2FzdF9wc19idWYoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKQEAgLTQwOSwxMSArNDM3LDE3IEBACiAJCXR4LT5rZXkgPSBOVUxMOwogCWVsc2UgaWYgKHR4LT5zdGEgJiYgKGtleSA9IHJjdV9kZXJlZmVyZW5jZSh0eC0+c3RhLT5rZXkpKSkKIAkJdHgtPmtleSA9IGtleTsKKwllbHNlIGlmIChpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCSAoa2V5ID0gcmN1X2RlcmVmZXJlbmNlKHR4LT5zZGF0YS0+ZGVmYXVsdF9tZ210X2tleSkpKQorCQl0eC0+a2V5ID0ga2V5OwogCWVsc2UgaWYgKChrZXkgPSByY3VfZGVyZWZlcmVuY2UodHgtPnNkYXRhLT5kZWZhdWx0X2tleSkpKQogCQl0eC0+a2V5ID0ga2V5OwogCWVsc2UgaWYgKHR4LT5zZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCAmJgogCQkgKHR4LT5za2ItPnByb3RvY29sICE9IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpICYmCi0JCSAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpIHsKKwkJICEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSAmJgorCQkgKCFpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoaGRyKSB8fAorCQkgIChpZWVlODAyMTFfaXNfYWN0aW9uKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkJICAgdHgtPnN0YSAmJiB0ZXN0X3N0YV9mbGFncyh0eC0+c3RhLCBXTEFOX1NUQV9NRlApKSkpIHsKIAkJSTgwMl9ERUJVR19JTkModHgtPmxvY2FsLT50eF9oYW5kbGVyc19kcm9wX3VuZW5jcnlwdGVkKTsKIAkJcmV0dXJuIFRYX0RST1A7CiAJfSBlbHNlCkBAIC00MjgsMTAgKzQ2MiwxOSBAQAogCQkJaWYgKGllZWU4MDIxMV9pc19hdXRoKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQkJYnJlYWs7CiAJCWNhc2UgQUxHX1RLSVA6Ci0JCWNhc2UgQUxHX0NDTVA6CiAJCQlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3ByZXNlbnQoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJCQl0eC0+a2V5ID0gTlVMTDsKIAkJCWJyZWFrOworCQljYXNlIEFMR19DQ01QOgorCQkJaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9wcmVzZW50KGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkJCSAgICAhaWVlZTgwMjExX3VzZV9tZnAoaGRyLT5mcmFtZV9jb250cm9sLCB0eC0+c3RhLAorCQkJCQkgICAgICAgdHgtPnNrYikpCisJCQkJdHgtPmtleSA9IE5VTEw7CisJCQlicmVhazsKKwkJY2FzZSBBTEdfQUVTX0NNQUM6CisJCQlpZiAoIWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpCisJCQkJdHgtPmtleSA9IE5VTEw7CisJCQlicmVhazsKIAkJfQogCX0KIApAQCAtNjU4LDE3ICs3MDEsNjIgQEAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CiAKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2ZyYWdtZW50KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcmxlbiwKKwkJCSAgICAgIGludCBmcmFnX3RocmVzaG9sZCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqdGFpbCA9IHNrYiwgKnRtcDsKKwlpbnQgcGVyX2ZyYWdtID0gZnJhZ190aHJlc2hvbGQgLSBoZHJsZW4gLSBGQ1NfTEVOOworCWludCBwb3MgPSBoZHJsZW4gKyBwZXJfZnJhZ207CisJaW50IHJlbSA9IHNrYi0+bGVuIC0gaGRybGVuIC0gcGVyX2ZyYWdtOworCisJaWYgKFdBUk5fT04ocmVtIDwgMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJd2hpbGUgKHJlbSkgeworCQlpbnQgZnJhZ2xlbiA9IHBlcl9mcmFnbTsKKworCQlpZiAoZnJhZ2xlbiA+IHJlbSkKKwkJCWZyYWdsZW4gPSByZW07CisJCXJlbSAtPSBmcmFnbGVuOworCQl0bXAgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT50eF9oZWFkcm9vbSArCisJCQkJICAgIGZyYWdfdGhyZXNob2xkICsKKwkJCQkgICAgSUVFRTgwMjExX0VOQ1JZUFRfSEVBRFJPT00gKworCQkJCSAgICBJRUVFODAyMTFfRU5DUllQVF9UQUlMUk9PTSk7CisJCWlmICghdG1wKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXRhaWwtPm5leHQgPSB0bXA7CisJCXRhaWwgPSB0bXA7CisJCXNrYl9yZXNlcnZlKHRtcCwgbG9jYWwtPnR4X2hlYWRyb29tICsKKwkJCQkgSUVFRTgwMjExX0VOQ1JZUFRfSEVBRFJPT00pOworCQkvKiBjb3B5IGNvbnRyb2wgaW5mb3JtYXRpb24gKi8KKwkJbWVtY3B5KHRtcC0+Y2IsIHNrYi0+Y2IsIHNpemVvZih0bXAtPmNiKSk7CisJCXNrYl9jb3B5X3F1ZXVlX21hcHBpbmcodG1wLCBza2IpOworCQl0bXAtPnByaW9yaXR5ID0gc2tiLT5wcmlvcml0eTsKKwkJdG1wLT5kb19ub3RfZW5jcnlwdCA9IHNrYi0+ZG9fbm90X2VuY3J5cHQ7CisJCXRtcC0+ZGV2ID0gc2tiLT5kZXY7CisJCXRtcC0+aWlmID0gc2tiLT5paWY7CisKKwkJLyogY29weSBoZWFkZXIgYW5kIGRhdGEgKi8KKwkJbWVtY3B5KHNrYl9wdXQodG1wLCBoZHJsZW4pLCBza2ItPmRhdGEsIGhkcmxlbik7CisJCW1lbWNweShza2JfcHV0KHRtcCwgZnJhZ2xlbiksIHNrYi0+ZGF0YSArIHBvcywgZnJhZ2xlbik7CisKKwkJcG9zICs9IGZyYWdsZW47CisJfQorCisJc2tiLT5sZW4gPSBoZHJsZW4gKyBwZXJfZnJhZ207CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0IGRlYnVnX25vaW5saW5lCiBpZWVlODAyMTFfdHhfaF9mcmFnbWVudChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtPnNrYik7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXR4LT5za2ItPmRhdGE7Ci0Jc2l6ZV90IGhkcmxlbiwgcGVyX2ZyYWdtLCBudW1fZnJhZ20sIHBheWxvYWRfbGVuLCBsZWZ0OwotCXN0cnVjdCBza19idWZmICoqZnJhZ3MsICpmaXJzdCwgKmZyYWc7Ci0JaW50IGk7Ci0JdTE2IHNlcTsKLQl1OCAqcG9zOworCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHZvaWQgKilza2ItPmRhdGE7CiAJaW50IGZyYWdfdGhyZXNob2xkID0gdHgtPmxvY2FsLT5mcmFnbWVudGF0aW9uX3RocmVzaG9sZDsKKwlpbnQgaGRybGVuOworCWludCBmcmFnbnVtOwogCiAJaWYgKCEodHgtPmZsYWdzICYgSUVFRTgwMjExX1RYX0ZSQUdNRU5URUQpKQogCQlyZXR1cm4gVFhfQ09OVElOVUU7CkBAIC02ODEsNTggKzc2OSwzNSBAQAogCWlmIChXQVJOX09OKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkpCiAJCXJldHVybiBUWF9EUk9QOwogCi0JZmlyc3QgPSB0eC0+c2tiOwotCiAJaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwotCXBheWxvYWRfbGVuID0gZmlyc3QtPmxlbiAtIGhkcmxlbjsKLQlwZXJfZnJhZ20gPSBmcmFnX3RocmVzaG9sZCAtIGhkcmxlbiAtIEZDU19MRU47Ci0JbnVtX2ZyYWdtID0gRElWX1JPVU5EX1VQKHBheWxvYWRfbGVuLCBwZXJfZnJhZ20pOwogCi0JZnJhZ3MgPSBremFsbG9jKG51bV9mcmFnbSAqIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFmcmFncykKLQkJZ290byBmYWlsOworCS8qIGludGVybmFsIGVycm9yLCB3aHkgaXMgVFhfRlJBR01FTlRFRCBzZXQ/ICovCisJaWYgKFdBUk5fT04oc2tiLT5sZW4gPD0gZnJhZ190aHJlc2hvbGQpKQorCQlyZXR1cm4gVFhfRFJPUDsKIAotCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpOwotCXNlcSA9IGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpICYgSUVFRTgwMjExX1NDVExfU0VROwotCXBvcyA9IGZpcnN0LT5kYXRhICsgaGRybGVuICsgcGVyX2ZyYWdtOwotCWxlZnQgPSBwYXlsb2FkX2xlbiAtIHBlcl9mcmFnbTsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZyYWdtIC0gMTsgaSsrKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfaGRyICpmaGRyOwotCQlzaXplX3QgY29weWxlbjsKKwkvKgorCSAqIE5vdyBmcmFnbWVudCB0aGUgZnJhbWUuIFRoaXMgd2lsbCBhbGxvY2F0ZSBhbGwgdGhlIGZyYWdtZW50cyBhbmQKKwkgKiBjaGFpbiB0aGVtICh1c2luZyBza2IgYXMgdGhlIGZpcnN0IGZyYWdtZW50KSB0byBza2ItPm5leHQuCisJICogRHVyaW5nIHRyYW5zbWlzc2lvbiwgd2Ugd2lsbCByZW1vdmUgdGhlIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZAorCSAqIGZyYWdtZW50cyBmcm9tIHRoaXMgbGlzdC4gV2hlbiB0aGUgbG93LWxldmVsIGRyaXZlciByZWplY3RzIG9uZQorCSAqIG9mIHRoZSBmcmFnbWVudHMgdGhlbiB3ZSB3aWxsIHNpbXBseSBwcmV0ZW5kIHRvIGFjY2VwdCB0aGUgc2tiCisJICogYnV0IHN0b3JlIGl0IGF3YXkgYXMgcGVuZGluZy4KKwkgKi8KKwlpZiAoaWVlZTgwMjExX2ZyYWdtZW50KHR4LT5sb2NhbCwgc2tiLCBoZHJsZW4sIGZyYWdfdGhyZXNob2xkKSkKKwkJcmV0dXJuIFRYX0RST1A7CiAKLQkJaWYgKGxlZnQgPD0gMCkKLQkJCWdvdG8gZmFpbDsKKwkvKiB1cGRhdGUgZHVyYXRpb24vc2VxL2ZsYWdzIG9mIGZyYWdtZW50cyAqLworCWZyYWdudW0gPSAwOworCWRvIHsKKwkJaW50IG5leHRfbGVuOworCQljb25zdCBfX2xlMTYgbW9yZWZyYWdzID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfTU9SRUZSQUdTKTsKIAotCQkvKiByZXNlcnZlIGVub3VnaCBleHRyYSBoZWFkIGFuZCB0YWlsIHJvb20gZm9yIHBvc3NpYmxlCi0JCSAqIGVuY3J5cHRpb24gKi8KLQkJZnJhZyA9IGZyYWdzW2ldID0KLQkJCWRldl9hbGxvY19za2IodHgtPmxvY2FsLT50eF9oZWFkcm9vbSArCi0JCQkJICAgICAgZnJhZ190aHJlc2hvbGQgKwotCQkJCSAgICAgIElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NICsKLQkJCQkgICAgICBJRUVFODAyMTFfRU5DUllQVF9UQUlMUk9PTSk7Ci0JCWlmICghZnJhZykKLQkJCWdvdG8gZmFpbDsKKwkJaGRyID0gKHZvaWQgKilza2ItPmRhdGE7CisJCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKLQkJLyogTWFrZSBzdXJlIHRoYXQgYWxsIGZyYWdtZW50cyB1c2UgdGhlIHNhbWUgcHJpb3JpdHkgc28KLQkJICogdGhhdCB0aGV5IGVuZCB1cCB1c2luZyB0aGUgc2FtZSBUWCBxdWV1ZSAqLwotCQlmcmFnLT5wcmlvcml0eSA9IGZpcnN0LT5wcmlvcml0eTsKLQotCQlza2JfcmVzZXJ2ZShmcmFnLCB0eC0+bG9jYWwtPnR4X2hlYWRyb29tICsKLQkJCQkgIElFRUU4MDIxMV9FTkNSWVBUX0hFQURST09NKTsKLQotCQkvKiBjb3B5IFRYIGluZm9ybWF0aW9uICovCi0JCWluZm8gPSBJRUVFODAyMTFfU0tCX0NCKGZyYWcpOwotCQltZW1jcHkoaW5mbywgZmlyc3QtPmNiLCBzaXplb2YoZnJhZy0+Y2IpKTsKLQotCQkvKiBjb3B5L2ZpbGwgaW4gODAyLjExIGhlYWRlciAqLwotCQlmaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoZnJhZywgaGRybGVuKTsKLQkJbWVtY3B5KGZoZHIsIGZpcnN0LT5kYXRhLCBoZHJsZW4pOwotCQlmaGRyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KHNlcSB8ICgoaSArIDEpICYgSUVFRTgwMjExX1NDVExfRlJBRykpOwotCi0JCWlmIChpID09IG51bV9mcmFnbSAtIDIpIHsKLQkJCS8qIGNsZWFyIE1PUkVGUkFHUyBiaXQgZm9yIHRoZSBsYXN0IGZyYWdtZW50ICovCi0JCQlmaGRyLT5mcmFtZV9jb250cm9sICY9IGNwdV90b19sZTE2KH5JRUVFODAyMTFfRkNUTF9NT1JFRlJBR1MpOwotCQl9IGVsc2UgeworCQlpZiAoc2tiLT5uZXh0KSB7CisJCQloZHItPmZyYW1lX2NvbnRyb2wgfD0gbW9yZWZyYWdzOworCQkJbmV4dF9sZW4gPSBza2ItPm5leHQtPmxlbjsKIAkJCS8qCiAJCQkgKiBObyBtdWx0aS1yYXRlIHJldHJpZXMgZm9yIGZyYWdtZW50ZWQgZnJhbWVzLCB0aGF0CiAJCQkgKiB3b3VsZCBjb21wbGV0ZWx5IHRocm93IG9mZiB0aGUgTkFWIGF0IG90aGVyIFNUQXMuCkBAIC03NDMsMzUgKzgwOCwxNiBAQAogCQkJaW5mby0+Y29udHJvbC5yYXRlc1s0XS5pZHggPSAtMTsKIAkJCUJVSUxEX0JVR19PTihJRUVFODAyMTFfVFhfTUFYX1JBVEVTICE9IDUpOwogCQkJaW5mby0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9DVExfUkFURV9DVFJMX1BST0JFOworCQl9IGVsc2UgeworCQkJaGRyLT5mcmFtZV9jb250cm9sICY9IH5tb3JlZnJhZ3M7CisJCQluZXh0X2xlbiA9IDA7CiAJCX0KLQotCQkvKiBjb3B5IGRhdGEgKi8KLQkJY29weWxlbiA9IGxlZnQgPiBwZXJfZnJhZ20gPyBwZXJfZnJhZ20gOiBsZWZ0OwotCQltZW1jcHkoc2tiX3B1dChmcmFnLCBjb3B5bGVuKSwgcG9zLCBjb3B5bGVuKTsKLQotCQlza2JfY29weV9xdWV1ZV9tYXBwaW5nKGZyYWcsIGZpcnN0KTsKLQotCQlmcmFnLT5kb19ub3RfZW5jcnlwdCA9IGZpcnN0LT5kb19ub3RfZW5jcnlwdDsKLQotCQlwb3MgKz0gY29weWxlbjsKLQkJbGVmdCAtPSBjb3B5bGVuOwotCX0KLQlza2JfdHJpbShmaXJzdCwgaGRybGVuICsgcGVyX2ZyYWdtKTsKLQotCXR4LT5udW1fZXh0cmFfZnJhZyA9IG51bV9mcmFnbSAtIDE7Ci0JdHgtPmV4dHJhX2ZyYWcgPSBmcmFnczsKKwkJaGRyLT5kdXJhdGlvbl9pZCA9IGllZWU4MDIxMV9kdXJhdGlvbih0eCwgMCwgbmV4dF9sZW4pOworCQloZHItPnNlcV9jdHJsIHw9IGNwdV90b19sZTE2KGZyYWdudW0gJiBJRUVFODAyMTFfU0NUTF9GUkFHKTsKKwkJZnJhZ251bSsrOworCX0gd2hpbGUgKChza2IgPSBza2ItPm5leHQpKTsKIAogCXJldHVybiBUWF9DT05USU5VRTsKLQotIGZhaWw6Ci0JaWYgKGZyYWdzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fZnJhZ20gLSAxOyBpKyspCi0JCQlpZiAoZnJhZ3NbaV0pCi0JCQkJZGV2X2tmcmVlX3NrYihmcmFnc1tpXSk7Ci0JCWtmcmVlKGZyYWdzKTsKLQl9Ci0JSTgwMl9ERUJVR19JTkModHgtPmxvY2FsLT50eF9oYW5kbGVyc19kcm9wX2ZyYWdtZW50KTsKLQlyZXR1cm4gVFhfRFJPUDsKIH0KIAogc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKQEAgLTc4Nyw2ICs4MzMsOCBAQAogCQlyZXR1cm4gaWVlZTgwMjExX2NyeXB0b190a2lwX2VuY3J5cHQodHgpOwogCWNhc2UgQUxHX0NDTVA6CiAJCXJldHVybiBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZW5jcnlwdCh0eCk7CisJY2FzZSBBTEdfQUVTX0NNQUM6CisJCXJldHVybiBpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2VuY3J5cHQodHgpOwogCX0KIAogCS8qIG5vdCByZWFjaGVkICovCkBAIC03OTcsMjcgKzg0NSwxOSBAQAogc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV90eF9oX2NhbGN1bGF0ZV9kdXJhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0+c2tiLT5kYXRhOwotCWludCBuZXh0X2xlbiwgaTsKLQlpbnQgZ3JvdXBfYWRkciA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpOworCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJaW50IG5leHRfbGVuOworCWJvb2wgZ3JvdXBfYWRkcjsKIAotCWlmICghKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSkgewotCQloZHItPmR1cmF0aW9uX2lkID0gaWVlZTgwMjExX2R1cmF0aW9uKHR4LCBncm91cF9hZGRyLCAwKTsKLQkJcmV0dXJuIFRYX0NPTlRJTlVFOwotCX0KKwlkbyB7CisJCWhkciA9ICh2b2lkICopIHNrYi0+ZGF0YTsKKwkJbmV4dF9sZW4gPSBza2ItPm5leHQgPyBza2ItPm5leHQtPmxlbiA6IDA7CisJCWdyb3VwX2FkZHIgPSBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKTsKIAotCWhkci0+ZHVyYXRpb25faWQgPSBpZWVlODAyMTFfZHVyYXRpb24odHgsIGdyb3VwX2FkZHIsCi0JCQkJCSAgICAgIHR4LT5leHRyYV9mcmFnWzBdLT5sZW4pOwotCi0JZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKSB7Ci0JCWlmIChpICsgMSA8IHR4LT5udW1fZXh0cmFfZnJhZykKLQkJCW5leHRfbGVuID0gdHgtPmV4dHJhX2ZyYWdbaSArIDFdLT5sZW47Ci0JCWVsc2UKLQkJCW5leHRfbGVuID0gMDsKLQotCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eC0+ZXh0cmFfZnJhZ1tpXS0+ZGF0YTsKLQkJaGRyLT5kdXJhdGlvbl9pZCA9IGllZWU4MDIxMV9kdXJhdGlvbih0eCwgMCwgbmV4dF9sZW4pOwotCX0KKwkJaGRyLT5kdXJhdGlvbl9pZCA9CisJCQlpZWVlODAyMTFfZHVyYXRpb24odHgsIGdyb3VwX2FkZHIsIG5leHRfbGVuKTsKKwl9IHdoaWxlICgoc2tiID0gc2tiLT5uZXh0KSk7CiAKIAlyZXR1cm4gVFhfQ09OVElOVUU7CiB9CkBAIC04MjUsMjQgKzg2NSwyMCBAQAogc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKIGllZWU4MDIxMV90eF9oX3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7Ci0JaW50IGk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7CiAKIAlpZiAoIXR4LT5zdGEpCiAJCXJldHVybiBUWF9DT05USU5VRTsKIAogCXR4LT5zdGEtPnR4X3BhY2tldHMrKzsKLQl0eC0+c3RhLT50eF9mcmFnbWVudHMrKzsKLQl0eC0+c3RhLT50eF9ieXRlcyArPSB0eC0+c2tiLT5sZW47Ci0JaWYgKHR4LT5leHRyYV9mcmFnKSB7Ci0JCXR4LT5zdGEtPnR4X2ZyYWdtZW50cyArPSB0eC0+bnVtX2V4dHJhX2ZyYWc7Ci0JCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykKLQkJCXR4LT5zdGEtPnR4X2J5dGVzICs9IHR4LT5leHRyYV9mcmFnW2ldLT5sZW47Ci0JfQorCWRvIHsKKwkJdHgtPnN0YS0+dHhfZnJhZ21lbnRzKys7CisJCXR4LT5zdGEtPnR4X2J5dGVzICs9IHNrYi0+bGVuOworCX0gd2hpbGUgKChza2IgPSBza2ItPm5leHQpKTsKIAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAotCiAvKiBhY3R1YWwgdHJhbnNtaXQgcGF0aCAqLwogCiAvKgpAQCAtOTQ4LDkgKzk4NCw5IEBACiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7Ci0KIAlpbnQgaGRybGVuLCB0aWQ7CiAJdTggKnFjLCAqc3RhdGU7CisJYm9vbCBxdWV1ZWQgPSBmYWxzZTsKIAogCW1lbXNldCh0eCwgMCwgc2l6ZW9mKCp0eCkpOwogCXR4LT5za2IgPSBza2I7CkBAIC05NzcsMTcgKzEwMTMsNTMgQEAKIAkJICovCiAJfQogCisJLyoKKwkgKiBJZiB0aGlzIGZsYWcgaXMgc2V0IHRvIHRydWUgYW55d2hlcmUsIGFuZCB3ZSBnZXQgaGVyZSwKKwkgKiB3ZSBhcmUgZG9pbmcgdGhlIG5lZWRlZCBwcm9jZXNzaW5nLCBzbyByZW1vdmUgdGhlIGZsYWcKKwkgKiBub3cuCisJICovCisJaW5mby0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORzsKKwogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAKIAl0eC0+c3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKIAotCWlmICh0eC0+c3RhICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJaWYgKHR4LT5zdGEgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTikpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4OworCiAJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXRpZCA9ICpxYyAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOwogCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ0eC0+c3RhLT5sb2NrLCBmbGFncyk7CisJCS8qCisJCSAqIFhYWDogVGhpcyBzcGlubG9jayBjb3VsZCBiZSBmYWlybHkgZXhwZW5zaXZlLCBidXQgc2VlIHRoZQorCQkgKgljb21tZW50IGluIGFnZy10eC5jOmllZWU4MDIxMV9hZ2dfdHhfb3BlcmF0aW9uYWwoKS4KKwkJICoJT25lIHdheSB0byBzb2x2ZSB0aGlzIHdvdWxkIGJlIHRvIGRvIHNvbWV0aGluZyBSQ1UtbGlrZQorCQkgKglmb3IgbWFuYWdpbmcgdGhlIHRpZF90eCBzdHJ1Y3QgYW5kIHVzaW5nIGF0b21pYyBiaXRvcHMKKwkJICoJZm9yIHRoZSBhY3R1YWwgc3RhdGUgLS0gYnkgaW50cm9kdWNpbmcgYW4gYWN0dWFsCisJCSAqCSdvcGVyYXRpb25hbCcgYml0IHRoYXQgd291bGQgYmUgcG9zc2libGUuIEl0IHdvdWxkCisJCSAqCXJlcXVpcmUgY2hhbmdpbmcgaWVlZTgwMjExX2FnZ190eF9vcGVyYXRpb25hbCgpIHRvCisJCSAqCXNldCB0aGF0IGJpdCwgYW5kIGNoYW5naW5nIHRoZSB3YXkgdGlkX3R4IGlzIG1hbmFnZWQKKwkJICoJZXZlcnl3aGVyZSwgaW5jbHVkaW5nIHJhY2VzIGJldHdlZW4gdGhhdCBiaXQgYW5kCisJCSAqCXRpZF90eCBnb2luZyBhd2F5ICh0aWRfdHggYmVpbmcgYWRkZWQgY2FuIGJlIGVhc2lseQorCQkgKgljb21taXR0ZWQgdG8gbWVtb3J5IGJlZm9yZSB0aGUgJ29wZXJhdGlvbmFsJyBiaXQpLgorCQkgKi8KKwkJdGlkX3R4ID0gdHgtPnN0YS0+YW1wZHVfbWxtZS50aWRfdHhbdGlkXTsKIAkJc3RhdGUgPSAmdHgtPnN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfdHhbdGlkXTsKLQkJaWYgKCpzdGF0ZSA9PSBIVF9BR0dfU1RBVEVfT1BFUkFUSU9OQUwpCisJCWlmICgqc3RhdGUgPT0gSFRfQUdHX1NUQVRFX09QRVJBVElPTkFMKSB7CiAJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0FNUERVOworCQl9IGVsc2UgaWYgKCpzdGF0ZSAhPSBIVF9BR0dfU1RBVEVfSURMRSkgeworCQkJLyogaW4gcHJvZ3Jlc3MgKi8KKwkJCXF1ZXVlZCA9IHRydWU7CisJCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfTkVFRF9UWFBST0NFU1NJTkc7CisJCQlfX3NrYl9xdWV1ZV90YWlsKCZ0aWRfdHgtPnBlbmRpbmcsIHNrYik7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHgtPnN0YS0+bG9jaywgZmxhZ3MpOworCisJCWlmICh1bmxpa2VseShxdWV1ZWQpKQorCQkJcmV0dXJuIFRYX1FVRVVFRDsKIAl9CiAKIAlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpIHsKQEAgLTEwMzgsNTEgKzExMTAsNTUgQEAKIAl9CiAJaWYgKHVubGlrZWx5KCFkZXYpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQkvKiBpbml0aWFsaXNlcyB0eCB3aXRoIGNvbnRyb2wgKi8KKwkvKgorCSAqIGluaXRpYWxpc2VzIHR4IHdpdGggY29udHJvbAorCSAqCisJICogcmV0dXJuIHZhbHVlIGlzIHNhZmUgdG8gaWdub3JlIGhlcmUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uCisJICogY2FuIG9ubHkgYmUgaW52b2tlZCBmb3IgbXVsdGljYXN0IGZyYW1lcworCSAqCisJICogWFhYOiBjbGVhbiB1cAorCSAqLwogCV9faWVlZTgwMjExX3R4X3ByZXBhcmUodHgsIHNrYiwgZGV2KTsKIAlkZXZfcHV0KGRldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19pZWVlODAyMTFfdHgoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCitzdGF0aWMgaW50IF9faWVlZTgwMjExX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnAsCisJCQkgIHN0cnVjdCBzdGFfaW5mbyAqc3RhKQogeworCXN0cnVjdCBza19idWZmICpza2IgPSAqc2ticCwgKm5leHQ7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOwotCWludCByZXQsIGk7CisJaW50IHJldCwgbGVuOworCWJvb2wgZnJhZ20gPSBmYWxzZTsKIAotCWlmIChza2IpIHsKLQkJaWYgKG5ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobG9jYWwtPm1kZXYsIHNrYikpCi0JCQlyZXR1cm4gSUVFRTgwMjExX1RYX0FHQUlOOwotCQlpbmZvID0gIElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlsb2NhbC0+bWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCi0JCXJldCA9IGxvY2FsLT5vcHMtPnR4KGxvY2FsX3RvX2h3KGxvY2FsKSwgc2tiKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiBJRUVFODAyMTFfVFhfQUdBSU47Ci0JCWxvY2FsLT5tZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JCWllZWU4MDIxMV9sZWRfdHgobG9jYWwsIDEpOwotCX0KLQlpZiAodHgtPmV4dHJhX2ZyYWcpIHsKLQkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKSB7Ci0JCQlpZiAoIXR4LT5leHRyYV9mcmFnW2ldKQotCQkJCWNvbnRpbnVlOwotCQkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtPmV4dHJhX2ZyYWdbaV0pOworCXdoaWxlIChza2IpIHsKKwkJaWYgKGllZWU4MDIxMV9xdWV1ZV9zdG9wcGVkKCZsb2NhbC0+aHcsCisJCQkJCSAgICBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSkpCisJCQlyZXR1cm4gSUVFRTgwMjExX1RYX1BFTkRJTkc7CisKKwkJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKworCQlpZiAoZnJhZ20pCiAJCQlpbmZvLT5mbGFncyAmPSB+KElFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVCB8CiAJCQkJCSBJRUVFODAyMTFfVFhfQ1RMX0ZJUlNUX0ZSQUdNRU5UKTsKLQkJCWlmIChuZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LAotCQkJCQkJICAgdHgtPmV4dHJhX2ZyYWdbaV0pKQotCQkJCXJldHVybiBJRUVFODAyMTFfVFhfRlJBR19BR0FJTjsKIAotCQkJcmV0ID0gbG9jYWwtPm9wcy0+dHgobG9jYWxfdG9faHcobG9jYWwpLAotCQkJCQkgICAgdHgtPmV4dHJhX2ZyYWdbaV0pOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gSUVFRTgwMjExX1RYX0ZSQUdfQUdBSU47Ci0JCQlsb2NhbC0+bWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQkJaWVlZTgwMjExX2xlZF90eChsb2NhbCwgMSk7Ci0JCQl0eC0+ZXh0cmFfZnJhZ1tpXSA9IE5VTEw7CisJCW5leHQgPSBza2ItPm5leHQ7CisJCWxlbiA9IHNrYi0+bGVuOworCQlyZXQgPSBsb2NhbC0+b3BzLT50eChsb2NhbF90b19odyhsb2NhbCksIHNrYik7CisJCWlmIChXQVJOX09OKHJldCAhPSBORVRERVZfVFhfT0sgJiYgc2tiLT5sZW4gIT0gbGVuKSkgeworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJcmV0ID0gTkVUREVWX1RYX09LOwogCQl9Ci0JCWtmcmVlKHR4LT5leHRyYV9mcmFnKTsKLQkJdHgtPmV4dHJhX2ZyYWcgPSBOVUxMOworCQlpZiAocmV0ICE9IE5FVERFVl9UWF9PSykKKwkJCXJldHVybiBJRUVFODAyMTFfVFhfQUdBSU47CisJCSpza2JwID0gc2tiID0gbmV4dDsKKwkJaWVlZTgwMjExX2xlZF90eChsb2NhbCwgMSk7CisJCWZyYWdtID0gdHJ1ZTsKIAl9CisKIAlyZXR1cm4gSUVFRTgwMjExX1RYX09LOwogfQogCkBAIC0xMDk0LDcgKzExNzAsNiBAQAogewogCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOwogCWllZWU4MDIxMV90eF9yZXN1bHQgcmVzID0gVFhfRFJPUDsKLQlpbnQgaTsKIAogI2RlZmluZSBDQUxMX1RYSCh0eGgpCQlcCiAJcmVzID0gdHhoKHR4KTsJCVwKQEAgLTExMTgsMTEgKzExOTMsMTMgQEAKICB0eGhfZG9uZToKIAlpZiAodW5saWtlbHkocmVzID09IFRYX0RST1ApKSB7CiAJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcCk7Ci0JCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKQotCQkJaWYgKHR4LT5leHRyYV9mcmFnW2ldKQotCQkJCWRldl9rZnJlZV9za2IodHgtPmV4dHJhX2ZyYWdbaV0pOwotCQlrZnJlZSh0eC0+ZXh0cmFfZnJhZyk7CisJCXdoaWxlIChza2IpIHsKKwkJCXN0cnVjdCBza19idWZmICpuZXh0OworCisJCQluZXh0ID0gc2tiLT5uZXh0OworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJc2tiID0gbmV4dDsKKwkJfQogCQlyZXR1cm4gLTE7CiAJfSBlbHNlIGlmICh1bmxpa2VseShyZXMgPT0gVFhfUVVFVUVEKSkgewogCQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPnR4X2hhbmRsZXJzX3F1ZXVlZCk7CkBAIC0xMTMyLDIzICsxMjA5LDI2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSBib29sIHR4cGVuZGluZykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB0eDsKIAlpZWVlODAyMTFfdHhfcmVzdWx0IHJlc19wcmVwYXJlOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlpbnQgcmV0LCBpOworCXN0cnVjdCBza19idWZmICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCwgcmV0cmllczsKIAl1MTYgcXVldWU7CiAKIAlxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOwogCi0JV0FSTl9PTih0ZXN0X2JpdChxdWV1ZSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nKSk7CisJV0FSTl9PTighdHhwZW5kaW5nICYmICFza2JfcXVldWVfZW1wdHkoJmxvY2FsLT5wZW5kaW5nW3F1ZXVlXSkpOwogCiAJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgMTApKSB7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAl9CiAKIAlyY3VfcmVhZF9sb2NrKCk7CkBAIC0xMTU2LDEwICsxMjM2LDEzIEBACiAJLyogaW5pdGlhbGlzZXMgdHggKi8KIAlyZXNfcHJlcGFyZSA9IF9faWVlZTgwMjExX3R4X3ByZXBhcmUoJnR4LCBza2IsIGRldik7CiAKLQlpZiAocmVzX3ByZXBhcmUgPT0gVFhfRFJPUCkgeworCWlmICh1bmxpa2VseShyZXNfcHJlcGFyZSA9PSBUWF9EUk9QKSkgewogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAodW5saWtlbHkocmVzX3ByZXBhcmUgPT0gVFhfUVVFVUVEKSkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuOwogCX0KIAogCXN0YSA9IHR4LnN0YTsKQEAgLTExNjksMTEgKzEyNTIsMTMgQEAKIAlpZiAoaW52b2tlX3R4X2hhbmRsZXJzKCZ0eCkpCiAJCWdvdG8gb3V0OwogCi1yZXRyeToKLQlyZXQgPSBfX2llZWU4MDIxMV90eChsb2NhbCwgc2tiLCAmdHgpOwotCWlmIChyZXQpIHsKLQkJc3RydWN0IGllZWU4MDIxMV90eF9zdG9yZWRfcGFja2V0ICpzdG9yZTsKLQorCXJldHJpZXMgPSAwOworIHJldHJ5OgorCXJldCA9IF9faWVlZTgwMjExX3R4KGxvY2FsLCAmdHguc2tiLCB0eC5zdGEpOworCXN3aXRjaCAocmV0KSB7CisJY2FzZSBJRUVFODAyMTFfVFhfT0s6CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1RYX0FHQUlOOgogCQkvKgogCQkgKiBTaW5jZSB0aGVyZSBhcmUgbm8gZnJhZ21lbnRlZCBmcmFtZXMgb24gQS1NUERVCiAJCSAqIHF1ZXVlcywgdGhlcmUncyBubyByZWFzb24gZm9yIGEgZHJpdmVyIHRvIHJlamVjdApAQCAtMTE4MSw0NiArMTI2Niw1NyBAQAogCQkgKi8KIAkJaWYgKFdBUk5fT04oaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSkKIAkJCWdvdG8gZHJvcDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBJRUVFODAyMTFfVFhfUEVORElORzoKKwkJc2tiID0gdHguc2tiOwogCi0JCXN0b3JlID0gJmxvY2FsLT5wZW5kaW5nX3BhY2tldFtxdWV1ZV07CisJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwogCi0JCWlmIChyZXQgPT0gSUVFRTgwMjExX1RYX0ZSQUdfQUdBSU4pCi0JCQlza2IgPSBOVUxMOworCQlpZiAoX19uZXRpZl9zdWJxdWV1ZV9zdG9wcGVkKGxvY2FsLT5tZGV2LCBxdWV1ZSkpIHsKKwkJCWRvIHsKKwkJCQluZXh0ID0gc2tiLT5uZXh0OworCQkJCXNrYi0+bmV4dCA9IE5VTEw7CisJCQkJaWYgKHVubGlrZWx5KHR4cGVuZGluZykpCisJCQkJCXNrYl9xdWV1ZV9oZWFkKCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0sCisJCQkJCQkgICAgICAgc2tiKTsKKwkJCQllbHNlCisJCQkJCXNrYl9xdWV1ZV90YWlsKCZsb2NhbC0+cGVuZGluZ1txdWV1ZV0sCisJCQkJCQkgICAgICAgc2tiKTsKKwkJCX0gd2hpbGUgKChza2IgPSBuZXh0KSk7CiAKLQkJc2V0X2JpdChxdWV1ZSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nKTsKLQkJc21wX21iKCk7Ci0JCS8qCi0JCSAqIFdoZW4gdGhlIGRyaXZlciBnZXRzIG91dCBvZiBidWZmZXJzIGR1cmluZyBzZW5kaW5nIG9mCi0JCSAqIGZyYWdtZW50cyBhbmQgY2FsbHMgaWVlZTgwMjExX3N0b3BfcXVldWUsIHRoZSBuZXRpZgotCQkgKiBzdWJxdWV1ZSBpcyBzdG9wcGVkLiBUaGVyZSBpcywgaG93ZXZlciwgYSBzbWFsbCB3aW5kb3cKLQkJICogaW4gd2hpY2ggdGhlIFBFTkRJTkcgYml0IGlzIG5vdCB5ZXQgc2V0LiBJZiBhIGJ1ZmZlcgotCQkgKiBnZXRzIGF2YWlsYWJsZSBpbiB0aGF0IHdpbmRvdyAoaS5lLiBkcml2ZXIgY2FsbHMKLQkJICogaWVlZTgwMjExX3dha2VfcXVldWUpLCB3ZSB3b3VsZCBlbmQgdXAgd2l0aCBpZWVlODAyMTFfdHgKLQkJICogY2FsbGVkIHdpdGggdGhlIFBFTkRJTkcgYml0IHN0aWxsIHNldC4gUHJldmVudCB0aGlzIGJ5Ci0JCSAqIGNvbnRpbnVpbmcgdHJhbnNtaXR0aW5nIGhlcmUgd2hlbiB0aGF0IHNpdHVhdGlvbiBpcwotCQkgKiBwb3NzaWJsZSB0byBoYXZlIGhhcHBlbmVkLgotCQkgKi8KLQkJaWYgKCFfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobG9jYWwtPm1kZXYsIHF1ZXVlKSkgewotCQkJY2xlYXJfYml0KHF1ZXVlLCBsb2NhbC0+cXVldWVzX3BlbmRpbmcpOworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSBub2JvZHkgd2lsbCBlbmFibGUgdGhlIHF1ZXVlIG9uIHVzCisJCQkgKiAod2l0aG91dCBnb2luZyB0aHJvdWdoIHRoZSB0YXNrbGV0KSBub3IgZGlzYWJsZSB0aGUKKwkJCSAqIG5ldGRldiBxdWV1ZSB1bmRlcm5lYXRoIHRoZSBwZW5kaW5nIGhhbmRsaW5nIGNvZGUuCisJCQkgKi8KKwkJCV9fc2V0X2JpdChJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUEVORElORywKKwkJCQkgICZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSk7CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLAorCQkJCQkgICAgICAgZmxhZ3MpOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssCisJCQkJCSAgICAgICBmbGFncyk7CisKKwkJCXJldHJpZXMrKzsKKwkJCWlmIChXQVJOKHJldHJpZXMgPiAxMCwgInR4IHJlZnVzZWQgYnV0IHF1ZXVlIGFjdGl2ZSIpKQorCQkJCWdvdG8gZHJvcDsKIAkJCWdvdG8gcmV0cnk7CiAJCX0KLQkJc3RvcmUtPnNrYiA9IHNrYjsKLQkJc3RvcmUtPmV4dHJhX2ZyYWcgPSB0eC5leHRyYV9mcmFnOwotCQlzdG9yZS0+bnVtX2V4dHJhX2ZyYWcgPSB0eC5udW1fZXh0cmFfZnJhZzsKIAl9CiAgb3V0OgogCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiAwOworCXJldHVybjsKIAogIGRyb3A6Ci0JaWYgKHNrYikKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCWZvciAoaSA9IDA7IGkgPCB0eC5udW1fZXh0cmFfZnJhZzsgaSsrKQotCQlpZiAodHguZXh0cmFfZnJhZ1tpXSkKLQkJCWRldl9rZnJlZV9za2IodHguZXh0cmFfZnJhZ1tpXSk7Ci0Ja2ZyZWUodHguZXh0cmFfZnJhZyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIDA7CisKKwlza2IgPSB0eC5za2I7CisJd2hpbGUgKHNrYikgeworCQluZXh0ID0gc2tiLT5uZXh0OworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXNrYiA9IG5leHQ7CisJfQogfQogCiAvKiBkZXZpY2UgeG1pdCBoYW5kbGVycyAqLwpAQCAtMTI3OSw3ICsxMzc1LDYgQEAKIAkJRk9VTkRfU0RBVEEsCiAJCVVOS05PV05fQUREUkVTUywKIAl9IG1vbml0b3JfaWZhY2UgPSBOT1RfTU9OSVRPUjsKLQlpbnQgcmV0OwogCiAJaWYgKHNrYi0+aWlmKQogCQlvZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIHNrYi0+aWlmKTsKQEAgLTEyOTMsNyArMTM4OCwyMCBAQAogCQkgICAgICAgIm9yaWdpbmF0aW5nIGRldmljZVxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCWlmICgobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKSAmJgorCSAgICBsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPiAwKSB7CisJCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKCZsb2NhbC0+aHcsCisJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QUyk7CisJCQlxdWV1ZV93b3JrKGxvY2FsLT5ody53b3JrcXVldWUsCisJCQkJCSZsb2NhbC0+ZHluYW1pY19wc19kaXNhYmxlX3dvcmspOworCQl9CisKKwkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCisJCSAgICAgICAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKIAl9CiAKIAltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CkBAIC0xMzA5LDcgKzE0MTcsNyBAQAogCQllbHNlCiAJCQlpZiAobWVzaF9uZXh0aG9wX2xvb2t1cChza2IsIG9zZGF0YSkpIHsKIAkJCQlkZXZfcHV0KG9kZXYpOwotCQkJCXJldHVybiAwOworCQkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCQl9CiAJCWlmIChtZW1jbXAob2Rldi0+ZGV2X2FkZHIsIGhkci0+YWRkcjQsIEVUSF9BTEVOKSAhPSAwKQogCQkJSUVFRTgwMjExX0lGU1RBX01FU0hfQ1RSX0lOQygmb3NkYXRhLT51Lm1lc2gsCkBAIC0xMzcxLDcgKzE0NzksNyBAQAogCWlmIChpZWVlODAyMTFfc2tiX3Jlc2l6ZShvc2RhdGEtPmxvY2FsLCBza2IsIGhlYWRyb29tLCBtYXlfZW5jcnlwdCkpIHsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlkZXZfcHV0KG9kZXYpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKIAlpZiAob3NkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQpAQCAtMTM4MCwyMCArMTQ4OCw0MiBAQAogCQkJCSAgICAgIHUuYXApOwogCWlmIChsaWtlbHkobW9uaXRvcl9pZmFjZSAhPSBVTktOT1dOX0FERFJFU1MpKQogCQlpbmZvLT5jb250cm9sLnZpZiA9ICZvc2RhdGEtPnZpZjsKLQlyZXQgPSBpZWVlODAyMTFfdHgob2Rldiwgc2tiKTsKKworCWllZWU4MDIxMV90eChvZGV2LCBza2IsIGZhbHNlKTsKIAlkZXZfcHV0KG9kZXYpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCiBpbnQgaWVlZTgwMjExX21vbml0b3Jfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcHJ0aGRyID0KIAkJKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopc2tiLT5kYXRhOwogCXUxNiBsZW5fcnRoZHI7CiAKKwkvKgorCSAqIEZyYW1lIGluamVjdGlvbiBpcyBub3QgYWxsb3dlZCBpZiBiZWFjb25pbmcgaXMgbm90IGFsbG93ZWQKKwkgKiBvciBpZiB3ZSBuZWVkIHJhZGFyIGRldGVjdGlvbi4gQmVhY29uaW5nIGlzIHVzdWFsbHkgbm90IGFsbG93ZWQgd2hlbgorCSAqIHRoZSBtb2RlIG9yIG9wZXJhdGlvbiAoQWRob2MsIEFQLCBNZXNoKSBkb2VzIG5vdCBzdXBwb3J0IERGUy4KKwkgKiBQYXNzaXZlIHNjYW4gaXMgYWxzbyB1c2VkIGluIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWlucyB3aGVyZQorCSAqIHlvdXIgY291bnRyeSBpcyBub3Qga25vd24gYW5kIGFzIHN1Y2ggaXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMKKwkgKiBOTyBUWCB1bmxlc3MgdGhlIGNoYW5uZWwgaXMgZXhwbGljaXRseSBhbGxvd2VkIGluIHdoaWNoIGNhc2UKKwkgKiB5b3VyIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4gd291bGQgbm90IGhhdmUgdGhlIHBhc3NpdmUgc2NhbgorCSAqIGZsYWcuCisJICoKKwkgKiBTaW5jZSBBUCBtb2RlIHVzZXMgbW9uaXRvciBpbnRlcmZhY2VzIHRvIGluamVjdC9UWCBtYW5hZ2VtZW50CisJICogZnJhbWVzIHdlIGNhbiBtYWtlIEFQIG1vZGUgdGhlIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGUgb25jZSBpdAorCSAqIHN1cHBvcnRzIHJhZGFyIGRldGVjdGlvbiBhcyBpdHMgaW1wbGVtZW50YXRpb24gY2FuIGRlYWwgd2l0aAorCSAqIHJhZGFyIGRldGVjdGlvbiBieSBpdHNlbGYuIFdlIGNhbiBkbyB0aGF0IGxhdGVyIGJ5IGFkZGluZyBhCisJICogbW9uaXRvciBmbGFnIGludGVyZmFjZXMgdXNlZCBmb3IgQVAgc3VwcG9ydC4KKwkgKi8KKwlpZiAoKGNoYW4tPmZsYWdzICYgKElFRUU4MDIxMV9DSEFOX05PX0lCU1MgfCBJRUVFODAyMTFfQ0hBTl9SQURBUiB8CisJICAgICBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pKSkKKwkJZ290byBmYWlsOworCiAJLyogY2hlY2sgZm9yIG5vdCBldmVuIGhhdmluZyB0aGUgZml4ZWQgcmFkaW90YXAgaGVhZGVyIHBhcnQgKi8KIAlpZiAodW5saWtlbHkoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIpKSkKIAkJZ290byBmYWlsOyAvKiB0b28gc2hvcnQgdG8gYmUgcG9zc2libHkgdmFsaWQgKi8KQEAgLTE0NzcsMTkgKzE2MDcsNiBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PX1NUQUNLX0RZTkFNSUNfUFMpICYmCi0JICAgIGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQgPiAwKSB7Ci0JCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7Ci0JCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKCZsb2NhbC0+aHcsCi0JCQkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BTKTsKLQkJCXF1ZXVlX3dvcmsobG9jYWwtPmh3LndvcmtxdWV1ZSwKLQkJCQkgICAmbG9jYWwtPmR5bmFtaWNfcHNfZGlzYWJsZV93b3JrKTsKLQkJfQotCi0JCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwotCQkJICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQpKTsKLQl9Ci0KIAluaF9wb3MgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YTsKIAloX3BvcyA9IHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgLSBza2ItPmRhdGE7CiAKQEAgLTE1NzAsNyArMTY4Nyw3IEBACiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9UT0RTKTsKIAkJLyogQlNTSUQgU0EgREEgKi8KLQkJbWVtY3B5KGhkci5hZGRyMSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweShoZHIuYWRkcjEsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHIyLCBza2ItPmRhdGEgKyBFVEhfQUxFTiwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHIzLCBza2ItPmRhdGEsIEVUSF9BTEVOKTsKIAkJaGRybGVuID0gMjQ7CkBAIC0xNTc5LDcgKzE2OTYsNyBAQAogCQkvKiBEQSBTQSBCU1NJRCAqLwogCQltZW1jcHkoaGRyLmFkZHIxLCBza2ItPmRhdGEsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGhkci5hZGRyMiwgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKLQkJbWVtY3B5KGhkci5hZGRyMywgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7CisJCW1lbWNweShoZHIuYWRkcjMsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKTsKIAkJaGRybGVuID0gMjQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNjAxLDggKzE3MTgsNyBAQAogCX0KIAogCS8qIHJlY2VpdmVyIGFuZCB3ZSBhcmUgUW9TIGVuYWJsZWQsIHVzZSBhIFFvUyB0eXBlIGZyYW1lICovCi0JaWYgKHN0YV9mbGFncyAmIFdMQU5fU1RBX1dNRSAmJgotCSAgICBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKCZsb2NhbC0+aHcpID49IDQpIHsKKwlpZiAoKHN0YV9mbGFncyAmIFdMQU5fU1RBX1dNRSkgJiYgbG9jYWwtPmh3LnF1ZXVlcyA+PSA0KSB7CiAJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSk7CiAJCWhkcmxlbiArPSAyOwogCX0KQEAgLTE3MzQsMTkgKzE4NTAsNTggQEAKICAqLwogdm9pZCBpZWVlODAyMTFfY2xlYXJfdHhfcGVuZGluZyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKLQlpbnQgaSwgajsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0b3JlZF9wYWNrZXQgKnN0b3JlOworCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoJmxvY2FsLT5odyk7IGkrKykgewotCQlpZiAoIXRlc3RfYml0KGksIGxvY2FsLT5xdWV1ZXNfcGVuZGluZykpCi0JCQljb250aW51ZTsKLQkJc3RvcmUgPSAmbG9jYWwtPnBlbmRpbmdfcGFja2V0W2ldOwotCQlrZnJlZV9za2Ioc3RvcmUtPnNrYik7Ci0JCWZvciAoaiA9IDA7IGogPCBzdG9yZS0+bnVtX2V4dHJhX2ZyYWc7IGorKykKLQkJCWtmcmVlX3NrYihzdG9yZS0+ZXh0cmFfZnJhZ1tqXSk7Ci0JCWtmcmVlKHN0b3JlLT5leHRyYV9mcmFnKTsKLQkJY2xlYXJfYml0KGksIGxvY2FsLT5xdWV1ZXNfcGVuZGluZyk7CisJZm9yIChpID0gMDsgaSA8IGxvY2FsLT5ody5xdWV1ZXM7IGkrKykKKwkJc2tiX3F1ZXVlX3B1cmdlKCZsb2NhbC0+cGVuZGluZ1tpXSk7Cit9CisKK3N0YXRpYyBib29sIGllZWU4MDIxMV90eF9wZW5kaW5nX3NrYihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlpbnQgcmV0OworCWJvb2wgcmVzdWx0ID0gdHJ1ZTsKKworCS8qIGRvZXMgaW50ZXJmYWNlIHN0aWxsIGV4aXN0PyAqLworCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBza2ItPmlpZik7CisJaWYgKCFkZXYpIHsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gdHJ1ZTsKIAl9CisKKwkvKiB2YWxpZGF0ZSBpbmZvLT5jb250cm9sLnZpZiBhZ2FpbnN0IHNrYi0+aWlmICovCisJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJICAgICB1LmFwKTsKKworCWlmICh1bmxpa2VseShpbmZvLT5jb250cm9sLnZpZiAmJiBpbmZvLT5jb250cm9sLnZpZiAhPSAmc2RhdGEtPnZpZikpIHsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXN1bHQgPSB0cnVlOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfSU5URkxfTkVFRF9UWFBST0NFU1NJTkcpIHsKKwkJaWVlZTgwMjExX3R4KGRldiwgc2tiLCB0cnVlKTsKKwl9IGVsc2UgeworCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CisKKwkJcmV0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsICZza2IsIHN0YSk7CisJCWlmIChyZXQgIT0gSUVFRTgwMjExX1RYX09LKQorCQkJcmVzdWx0ID0gZmFsc2U7CisJfQorCisgb3V0OgorCWRldl9wdXQoZGV2KTsKKworCXJldHVybiByZXN1bHQ7CiB9CiAKIC8qCkBAIC0xNzU3LDQwICsxOTEyLDUzIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSAoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqKWRhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGxvY2FsLT5tZGV2OwotCXN0cnVjdCBpZWVlODAyMTFfdHhfc3RvcmVkX3BhY2tldCAqc3RvcmU7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9kYXRhIHR4OwotCWludCBpLCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKwlib29sIG5leHQ7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CiAJbmV0aWZfdHhfbG9ja19iaChkZXYpOwotCWZvciAoaSA9IDA7IGkgPCBpZWVlODAyMTFfbnVtX3JlZ3VsYXJfcXVldWVzKCZsb2NhbC0+aHcpOyBpKyspIHsKLQkJLyogQ2hlY2sgdGhhdCB0aGlzIHF1ZXVlIGlzIG9rICovCi0JCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobG9jYWwtPm1kZXYsIGkpICYmCi0JCSAgICAhdGVzdF9iaXQoaSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nX3J1bikpCisKKwlmb3IgKGkgPSAwOyBpIDwgbG9jYWwtPmh3LnF1ZXVlczsgaSsrKSB7CisJCS8qCisJCSAqIElmIHF1ZXVlIGlzIHN0b3BwZWQgYnkgc29tZXRoaW5nIG90aGVyIHRoYW4gZHVlIHRvIHBlbmRpbmcKKwkJICogZnJhbWVzLCBvciB3ZSBoYXZlIG5vIHBlbmRpbmcgZnJhbWVzLCBwcm9jZWVkIHRvIG5leHQgcXVldWUuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKKwkJbmV4dCA9IGZhbHNlOworCQlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1tpXSAhPQorCQkJQklUKElFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QRU5ESU5HKSB8fAorCQkgICAgc2tiX3F1ZXVlX2VtcHR5KCZsb2NhbC0+cGVuZGluZ1tpXSkpCisJCQluZXh0ID0gdHJ1ZTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKKworCQlpZiAobmV4dCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICghdGVzdF9iaXQoaSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nKSkgewotCQkJY2xlYXJfYml0KGksIGxvY2FsLT5xdWV1ZXNfcGVuZGluZ19ydW4pOwotCQkJaWVlZTgwMjExX3dha2VfcXVldWUoJmxvY2FsLT5odywgaSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWNsZWFyX2JpdChpLCBsb2NhbC0+cXVldWVzX3BlbmRpbmdfcnVuKTsKKwkJLyoKKwkJICogc3RhcnQgdGhlIHF1ZXVlIG5vdyB0byBhbGxvdyBwcm9jZXNzaW5nIG91ciBwYWNrZXRzLAorCQkgKiB3ZSdyZSB1bmRlciB0aGUgdHggbG9jayBoZXJlIGFueXdheSBzbyBub3RoaW5nIHdpbGwKKwkJICogaGFwcGVuIGFzIGEgcmVzdWx0IG9mIHRoaXMKKwkJICovCiAJCW5ldGlmX3N0YXJ0X3N1YnF1ZXVlKGxvY2FsLT5tZGV2LCBpKTsKIAotCQlzdG9yZSA9ICZsb2NhbC0+cGVuZGluZ19wYWNrZXRbaV07Ci0JCXR4LmV4dHJhX2ZyYWcgPSBzdG9yZS0+ZXh0cmFfZnJhZzsKLQkJdHgubnVtX2V4dHJhX2ZyYWcgPSBzdG9yZS0+bnVtX2V4dHJhX2ZyYWc7Ci0JCXR4LmZsYWdzID0gMDsKLQkJcmV0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsIHN0b3JlLT5za2IsICZ0eCk7Ci0JCWlmIChyZXQpIHsKLQkJCWlmIChyZXQgPT0gSUVFRTgwMjExX1RYX0ZSQUdfQUdBSU4pCi0JCQkJc3RvcmUtPnNrYiA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQljbGVhcl9iaXQoaSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nKTsKLQkJCWllZWU4MDIxMV93YWtlX3F1ZXVlKCZsb2NhbC0+aHcsIGkpOworCQl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmbG9jYWwtPnBlbmRpbmdbaV0pKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX2RlcXVldWUoJmxvY2FsLT5wZW5kaW5nW2ldKTsKKworCQkJaWYgKCFpZWVlODAyMTFfdHhfcGVuZGluZ19za2IobG9jYWwsIHNrYikpIHsKKwkJCQlza2JfcXVldWVfaGVhZCgmbG9jYWwtPnBlbmRpbmdbaV0sIHNrYik7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KKworCQkvKiBTdGFydCByZWd1bGFyIHBhY2tldCBwcm9jZXNzaW5nIGFnYWluLiAqLworCQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZsb2NhbC0+cGVuZGluZ1tpXSkpCisJCQlpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oJmxvY2FsLT5odywgaSwKKwkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1BFTkRJTkcpOwogCX0KKwogCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOworCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiAvKiBmdW5jdGlvbnMgZm9yIGRyaXZlcnMgdG8gZ2V0IGNlcnRhaW4gZnJhbWVzICovCkBAIC0xODY1LDcgKzIwMzMsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IE5VTEw7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9hcCAqYXAgPSBOVUxMOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSA9IE5VTEw7CiAJc3RydWN0IGJlYWNvbl9kYXRhICpiZWFjb247CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZDsKQEAgLTE5MTcsMTMgKzIwODQsMTMgQEAKIAkJfSBlbHNlCiAJCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2lic3MgKmlmaWJzcyA9ICZzZGF0YS0+dS5pYnNzOwogCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCQlpZnN0YSA9ICZzZGF0YS0+dS5zdGE7CiAKLQkJaWYgKCFpZnN0YS0+cHJvYmVfcmVzcCkKKwkJaWYgKCFpZmlic3MtPnByb2JlX3Jlc3ApCiAJCQlnb3RvIG91dDsKIAotCQlza2IgPSBza2JfY29weShpZnN0YS0+cHJvYmVfcmVzcCwgR0ZQX0FUT01JQyk7CisJCXNrYiA9IHNrYl9jb3B5KGlmaWJzcy0+cHJvYmVfcmVzcCwgR0ZQX0FUT01JQyk7CiAJCWlmICghc2tiKQogCQkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS91dGlsLmMgYi9uZXQvbWFjODAyMTEvdXRpbC5jCmluZGV4IGZiODllMWQuLmZkZjQzMmYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS91dGlsLmMKKysrIGIvbmV0L21hYzgwMjExL3V0aWwuYwpAQCAtNDEsNiArNDEsMTUgQEAKIGNvbnN0IHVuc2lnbmVkIGNoYXIgYnJpZGdlX3R1bm5lbF9oZWFkZXJbXSBfX2FsaWduZWQoMikgPQogCXsgMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHhmOCB9OwogCitzdHJ1Y3QgaWVlZTgwMjExX2h3ICp3aXBoeV90b19pZWVlODAyMTFfaHcoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKKwlCVUdfT04oIXdpcGh5KTsKKworCWxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CisJcmV0dXJuICZsb2NhbC0+aHc7Cit9CitFWFBPUlRfU1lNQk9MKHdpcGh5X3RvX2llZWU4MDIxMV9odyk7CiAKIHU4ICppZWVlODAyMTFfZ2V0X2Jzc2lkKHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsIHNpemVfdCBsZW4sCiAJCQllbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpCkBAIC0xNTcsMTggKzE2NiwxMyBAQAogCiB2b2lkIGllZWU4MDIxMV90eF9zZXRfcHJvdGVjdGVkKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSB0eC0+c2tiLT5kYXRhOworCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CiAKLQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKLQlpZiAodHgtPmV4dHJhX2ZyYWcpIHsKLQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmZoZHI7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspIHsKLQkJCWZoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikKLQkJCQl0eC0+ZXh0cmFfZnJhZ1tpXS0+ZGF0YTsKLQkJCWZoZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKLQkJfQotCX0KKwlkbyB7CisJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CisJCWhkci0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOworCX0gd2hpbGUgKChza2IgPSBza2ItPm5leHQpKTsKIH0KIAogaW50IGllZWU4MDIxMV9mcmFtZV9kdXJhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc2l6ZV90IGxlbiwKQEAgLTMzNSwyMSArMzM5LDIxIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAKLQkvKiB3ZSBkb24ndCBuZWVkIHRvIHRyYWNrIGFtcGR1IHF1ZXVlcyAqLwotCWlmIChxdWV1ZSA8IGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoaHcpKSB7Ci0JCV9fY2xlYXJfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKKwlpZiAoV0FSTl9PTihxdWV1ZSA+PSBody0+cXVldWVzKSkKKwkJcmV0dXJuOwogCi0JCWlmIChsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSAhPSAwKQotCQkJLyogc29tZW9uZSBzdGlsbCBoYXMgdGhpcyBxdWV1ZSBzdG9wcGVkICovCi0JCQlyZXR1cm47Ci0JfQorCV9fY2xlYXJfYml0KHJlYXNvbiwgJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKTsKIAotCWlmICh0ZXN0X2JpdChxdWV1ZSwgbG9jYWwtPnF1ZXVlc19wZW5kaW5nKSkgewotCQlzZXRfYml0KHF1ZXVlLCBsb2NhbC0+cXVldWVzX3BlbmRpbmdfcnVuKTsKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmbG9jYWwtPnBlbmRpbmdbcXVldWVdKSAmJgorCSAgICBsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25zW3F1ZXVlXSA9PQorCQkJCUJJVChJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fUEVORElORykpCiAJCXRhc2tsZXRfc2NoZWR1bGUoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQpOwotCX0gZWxzZSB7Ci0JCW5ldGlmX3dha2Vfc3VicXVldWUobG9jYWwtPm1kZXYsIHF1ZXVlKTsKLQl9CisKKwlpZiAobG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0gIT0gMCkKKwkJLyogc29tZW9uZSBzdGlsbCBoYXMgdGhpcyBxdWV1ZSBzdG9wcGVkICovCisJCXJldHVybjsKKworCW5ldGlmX3dha2Vfc3VicXVldWUobG9jYWwtPm1kZXYsIHF1ZXVlKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfd2FrZV9xdWV1ZV9ieV9yZWFzb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBxdWV1ZSwKQEAgLTM3NSwxMSArMzc5LDE4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAKLQkvKiB3ZSBkb24ndCBuZWVkIHRvIHRyYWNrIGFtcGR1IHF1ZXVlcyAqLwotCWlmIChxdWV1ZSA8IGllZWU4MDIxMV9udW1fcmVndWxhcl9xdWV1ZXMoaHcpKQotCQlfX3NldF9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOworCWlmIChXQVJOX09OKHF1ZXVlID49IGh3LT5xdWV1ZXMpKQorCQlyZXR1cm47CiAKLQluZXRpZl9zdG9wX3N1YnF1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7CisJLyoKKwkgKiBPbmx5IHN0b3AgaWYgaXQgd2FzIHByZXZpb3VzbHkgcnVubmluZywgdGhpcyBpcyBuZWNlc3NhcnkKKwkgKiBmb3IgY29ycmVjdCBwZW5kaW5nIHBhY2tldHMgaGFuZGxpbmcgYmVjYXVzZSB0aGVyZSB3ZSBtYXkKKwkgKiBzdGFydCAoYnV0IG5vdCB3YWtlKSB0aGUgcXVldWUgYW5kIHJlbHkgb24gdGhhdC4KKwkgKi8KKwlpZiAoIWxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbnNbcXVldWVdKQorCQluZXRpZl9zdG9wX3N1YnF1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7CisKKwlfX3NldF9iaXQocmVhc29uLCAmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uc1txdWV1ZV0pOwogfQogCiB2b2lkIGllZWU4MDIxMV9zdG9wX3F1ZXVlX2J5X3JlYXNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlLApAQCAtNDA5LDcgKzQyMCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKIAotCWZvciAoaSA9IDA7IGkgPCBpZWVlODAyMTFfbnVtX3F1ZXVlcyhodyk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnF1ZXVlczsgaSsrKQogCQlfX2llZWU4MDIxMV9zdG9wX3F1ZXVlKGh3LCBpLCByZWFzb24pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnF1ZXVlX3N0b3BfcmVhc29uX2xvY2ssIGZsYWdzKTsKQEAgLTQyNSw2ICs0MzYsMTAgQEAKIGludCBpZWVlODAyMTFfcXVldWVfc3RvcHBlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IHF1ZXVlKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOworCisJaWYgKFdBUk5fT04ocXVldWUgPj0gaHctPnF1ZXVlcykpCisJCXJldHVybiB0cnVlOworCiAJcmV0dXJuIF9fbmV0aWZfc3VicXVldWVfc3RvcHBlZChsb2NhbC0+bWRldiwgcXVldWUpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcXVldWVfc3RvcHBlZCk7CkBAIC00MzgsNyArNDUzLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+cXVldWVfc3RvcF9yZWFzb25fbG9jaywgZmxhZ3MpOwogCi0JZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXMgKyBody0+YW1wZHVfcXVldWVzOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGh3LT5xdWV1ZXM7IGkrKykKIAkJX19pZWVlODAyMTFfd2FrZV9xdWV1ZShodywgaSwgcmVhc29uKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5xdWV1ZV9zdG9wX3JlYXNvbl9sb2NrLCBmbGFncyk7CkBAIC00NTksNyArNDc0LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAotCXJ0bmxfbG9jaygpOworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewogCQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewpAQCAtNDgwLDcgKzQ5NSw3IEBACiAJCQkJICZzZGF0YS0+dmlmKTsKIAl9CiAKLQlydG5sX3VubG9jaygpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMpOwogCkBAIC02NTMsNiArNjY4LDEwIEBACiAJCQllbGVtcy0+cHdyX2NvbnN0cl9lbGVtID0gcG9zOwogCQkJZWxlbXMtPnB3cl9jb25zdHJfZWxlbV9sZW4gPSBlbGVuOwogCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfVElNRU9VVF9JTlRFUlZBTDoKKwkJCWVsZW1zLT50aW1lb3V0X2ludCA9IHBvczsKKwkJCWVsZW1zLT50aW1lb3V0X2ludF9sZW4gPSBlbGVuOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQpAQCAtNjg4LDYgKzcwNywyNyBAQAogCQlsb2NhbC0+b3BzLT5jb25mX3R4KGxvY2FsX3RvX2h3KGxvY2FsKSwgaSwgJnFwYXJhbSk7CiB9CiAKK3ZvaWQgaWVlZTgwMjExX3N0YV9kZWZfd21tX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgIGNvbnN0IHNpemVfdCBzdXBwX3JhdGVzX2xlbiwKKwkJCQkgIGNvbnN0IHU4ICpzdXBwX3JhdGVzKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCBpLCBoYXZlX2hpZ2hlcl90aGFuXzExbWJpdCA9IDA7CisKKwkvKiBjZi4gSUVFRSA4MDIuMTEgOS4yLjEyICovCisJZm9yIChpID0gMDsgaSA8IHN1cHBfcmF0ZXNfbGVuOyBpKyspCisJCWlmICgoc3VwcF9yYXRlc1tpXSAmIDB4N2YpICogNSA+IDExMCkKKwkJCWhhdmVfaGlnaGVyX3RoYW5fMTFtYml0ID0gMTsKKworCWlmIChsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKKwkgICAgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQpCisJCXNkYXRhLT5mbGFncyB8PSBJRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFOworCWVsc2UKKwkJc2RhdGEtPmZsYWdzICY9IH5JRUVFODAyMTFfU0RBVEFfT1BFUkFUSU5HX0dNT0RFOworCisJaWVlZTgwMjExX3NldF93bW1fZGVmYXVsdChzZGF0YSk7Cit9CisKIHZvaWQgaWVlZTgwMjExX3R4X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgICAgaW50IGVuY3J5cHQpCiB7CkBAIC03MjcsMTIgKzc2NywxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXU2NCBpZWVlODAyMTFfbWFuZGF0b3J5X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAordTMyIGllZWU4MDIxMV9tYW5kYXRvcnlfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpiaXRyYXRlczsKLQl1NjQgbWFuZGF0b3J5X3JhdGVzOworCXUzMiBtYW5kYXRvcnlfcmF0ZXM7CiAJZW51bSBpZWVlODAyMTFfcmF0ZV9mbGFncyBtYW5kYXRvcnlfZmxhZzsKIAlpbnQgaTsKIApAQCAtNzU0LDMgKzc5NCwxNDAgQEAKIAkJCW1hbmRhdG9yeV9yYXRlcyB8PSBCSVQoaSk7CiAJcmV0dXJuIG1hbmRhdG9yeV9yYXRlczsKIH0KKwordm9pZCBpZWVlODAyMTFfc2VuZF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJIHUxNiB0cmFuc2FjdGlvbiwgdTE2IGF1dGhfYWxnLAorCQkJIHU4ICpleHRyYSwgc2l6ZV90IGV4dHJhX2xlbiwKKwkJCSBjb25zdCB1OCAqYnNzaWQsIGludCBlbmNyeXB0KQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKworCQkJICAgIHNpemVvZigqbWdtdCkgKyA2ICsgZXh0cmFfbGVuKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIGF1dGggIgorCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQgKyA2KTsKKwltZW1zZXQobWdtdCwgMCwgMjQgKyA2KTsKKwltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BVVRIKTsKKwlpZiAoZW5jcnlwdCkKKwkJbWdtdC0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOworCW1lbWNweShtZ210LT5kYSwgYnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCW1nbXQtPnUuYXV0aC5hdXRoX2FsZyA9IGNwdV90b19sZTE2KGF1dGhfYWxnKTsKKwltZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbiA9IGNwdV90b19sZTE2KHRyYW5zYWN0aW9uKTsKKwltZ210LT51LmF1dGguc3RhdHVzX2NvZGUgPSBjcHVfdG9fbGUxNigwKTsKKwlpZiAoZXh0cmEpCisJCW1lbWNweShza2JfcHV0KHNrYiwgZXh0cmFfbGVuKSwgZXh0cmEsIGV4dHJhX2xlbik7CisKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IsIGVuY3J5cHQpOworfQorCit2b2lkIGllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgdTggKmRzdCwKKwkJCSAgICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkgICAgICB1OCAqaWUsIHNpemVfdCBpZV9sZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisJdTggKnBvcywgKnN1cHBfcmF0ZXMsICplc3VwcF9yYXRlcyA9IE5VTEw7CisJaW50IGk7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIHNpemVvZigqbWdtdCkgKyAyMDAgKworCQkJICAgIGllX2xlbik7CisJaWYgKCFza2IpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBwcm9iZSAiCisJCSAgICAgICAicmVxdWVzdFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQobWdtdCwgMCwgMjQpOworCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CisJCQkJCSAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCWlmIChkc3QpIHsKKwkJbWVtY3B5KG1nbXQtPmRhLCBkc3QsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KG1nbXQtPmJzc2lkLCBkc3QsIEVUSF9BTEVOKTsKKwl9IGVsc2UgeworCQltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKKwkJbWVtc2V0KG1nbXQtPmJzc2lkLCAweGZmLCBFVEhfQUxFTik7CisJfQorCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgc3NpZF9sZW4pOworCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7CisJKnBvcysrID0gc3NpZF9sZW47CisJbWVtY3B5KHBvcywgc3NpZCwgc3NpZF9sZW4pOworCisJc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAyKTsKKwlzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKKwlzdXBwX3JhdGVzWzFdID0gMDsKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZF07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOworCQlpZiAoZXN1cHBfcmF0ZXMpIHsKKwkJCXBvcyA9IHNrYl9wdXQoc2tiLCAxKTsKKwkJCWVzdXBwX3JhdGVzWzFdKys7CisJCX0gZWxzZSBpZiAoc3VwcF9yYXRlc1sxXSA9PSA4KSB7CisJCQllc3VwcF9yYXRlcyA9IHNrYl9wdXQoc2tiLCAzKTsKKwkJCWVzdXBwX3JhdGVzWzBdID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7CisJCQllc3VwcF9yYXRlc1sxXSA9IDE7CisJCQlwb3MgPSAmZXN1cHBfcmF0ZXNbMl07CisJCX0gZWxzZSB7CisJCQlwb3MgPSBza2JfcHV0KHNrYiwgMSk7CisJCQlzdXBwX3JhdGVzWzFdKys7CisJCX0KKwkJKnBvcyA9IHJhdGUtPmJpdHJhdGUgLyA1OworCX0KKworCWlmIChpZSkKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBpZV9sZW4pLCBpZSwgaWVfbGVuKTsKKworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYiwgMCk7Cit9CisKK3UzMiBpZWVlODAyMTFfc3RhX2dldF9yYXRlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyAqZWxlbXMsCisJCQkgICAgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYml0cmF0ZXM7CisJc2l6ZV90IG51bV9yYXRlczsKKwl1MzIgc3VwcF9yYXRlczsKKwlpbnQgaSwgajsKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07CisKKwlpZiAoIXNiYW5kKSB7CisJCVdBUk5fT04oMSk7CisJCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKKwl9CisKKwliaXRyYXRlcyA9IHNiYW5kLT5iaXRyYXRlczsKKwludW1fcmF0ZXMgPSBzYmFuZC0+bl9iaXRyYXRlczsKKwlzdXBwX3JhdGVzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZWxlbXMtPnN1cHBfcmF0ZXNfbGVuICsKKwkJICAgICBlbGVtcy0+ZXh0X3N1cHBfcmF0ZXNfbGVuOyBpKyspIHsKKwkJdTggcmF0ZSA9IDA7CisJCWludCBvd25fcmF0ZTsKKwkJaWYgKGkgPCBlbGVtcy0+c3VwcF9yYXRlc19sZW4pCisJCQlyYXRlID0gZWxlbXMtPnN1cHBfcmF0ZXNbaV07CisJCWVsc2UgaWYgKGVsZW1zLT5leHRfc3VwcF9yYXRlcykKKwkJCXJhdGUgPSBlbGVtcy0+ZXh0X3N1cHBfcmF0ZXMKKwkJCQlbaSAtIGVsZW1zLT5zdXBwX3JhdGVzX2xlbl07CisJCW93bl9yYXRlID0gNSAqIChyYXRlICYgMHg3Zik7CisJCWZvciAoaiA9IDA7IGogPCBudW1fcmF0ZXM7IGorKykKKwkJCWlmIChiaXRyYXRlc1tqXS5iaXRyYXRlID09IG93bl9yYXRlKQorCQkJCXN1cHBfcmF0ZXMgfD0gQklUKGopOworCX0KKwlyZXR1cm4gc3VwcF9yYXRlczsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93ZXAuYyBiL25ldC9tYWM4MDIxMS93ZXAuYwppbmRleCA3MDQzZGRjLi5lZjczMTA1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd2VwLmMKKysrIGIvbmV0L21hYzgwMjExL3dlcC5jCkBAIC0zMjksMjQgKzMyOSwxNyBAQAogaWVlZTgwMjExX3R4X3Jlc3VsdAogaWVlZTgwMjExX2NyeXB0b193ZXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewotCWludCBpOworCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlpZWVlODAyMTFfdHhfc2V0X3Byb3RlY3RlZCh0eCk7CiAKLQlpZiAod2VwX2VuY3J5cHRfc2tiKHR4LCB0eC0+c2tiKSA8IDApIHsKLQkJSTgwMl9ERUJVR19JTkModHgtPmxvY2FsLT50eF9oYW5kbGVyc19kcm9wX3dlcCk7Ci0JCXJldHVybiBUWF9EUk9QOwotCX0KLQotCWlmICh0eC0+ZXh0cmFfZnJhZykgewotCQlmb3IgKGkgPSAwOyBpIDwgdHgtPm51bV9leHRyYV9mcmFnOyBpKyspIHsKLQkJCWlmICh3ZXBfZW5jcnlwdF9za2IodHgsIHR4LT5leHRyYV9mcmFnW2ldKSkgewotCQkJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+Ci0JCQkJCSAgICAgICB0eF9oYW5kbGVyc19kcm9wX3dlcCk7Ci0JCQkJcmV0dXJuIFRYX0RST1A7Ci0JCQl9CisJc2tiID0gdHgtPnNrYjsKKwlkbyB7CisJCWlmICh3ZXBfZW5jcnlwdF9za2IodHgsIHNrYikgPCAwKSB7CisJCQlJODAyX0RFQlVHX0lOQyh0eC0+bG9jYWwtPnR4X2hhbmRsZXJzX2Ryb3Bfd2VwKTsKKwkJCXJldHVybiBUWF9EUk9QOwogCQl9Ci0JfQorCX0gd2hpbGUgKChza2IgPSBza2ItPm5leHQpKTsKIAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93ZXh0LmMgYi9uZXQvbWFjODAyMTEvd2V4dC5jCmluZGV4IDcxNjJkNTguLmRlYjRlY2UgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93ZXh0LmMKKysrIGIvbmV0L21hYzgwMjExL3dleHQuYwpAQCAtMzcsNyArMzcsMTQgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5OwogCWludCBlcnI7CiAKLQlpZiAoaWR4IDwgMCB8fCBpZHggPj0gTlVNX0RFRkFVTFRfS0VZUykgeworCWlmIChhbGcgPT0gQUxHX0FFU19DTUFDKSB7CisJCWlmIChpZHggPCBOVU1fREVGQVVMVF9LRVlTIHx8CisJCSAgICBpZHggPj0gTlVNX0RFRkFVTFRfS0VZUyArIE5VTV9ERUZBVUxUX01HTVRfS0VZUykgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzZXRfZW5jcnlwdCAtIGludmFsaWQgaWR4PSVkICIKKwkJCSAgICAgICAiKEJJUClcbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGlkeCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAoaWR4IDwgMCB8fCBpZHggPj0gTlVNX0RFRkFVTFRfS0VZUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHNldF9lbmNyeXB0IC0gaW52YWxpZCBpZHg9JWRcbiIsCiAJCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBpZHgpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwMyw2ICsxMTAsOSBAQAogCiAJCWlmIChzZXRfdHhfa2V5IHx8ICghc3RhICYmICFzZGF0YS0+ZGVmYXVsdF9rZXkgJiYga2V5KSkKIAkJCWllZWU4MDIxMV9zZXRfZGVmYXVsdF9rZXkoc2RhdGEsIGlkeCk7CisJCWlmIChhbGcgPT0gQUxHX0FFU19DTUFDICYmCisJCSAgICAoc2V0X3R4X2tleSB8fCAoIXN0YSAmJiAhc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkgJiYga2V5KSkpCisJCQlpZWVlODAyMTFfc2V0X2RlZmF1bHRfbWdtdF9rZXkoc2RhdGEsIGlkeCk7CiAJfQogCiAgb3V0X3VubG9jazoKQEAgLTExOSwxMjUgKzEyOSwzOCBAQAogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlpbnQgcmV0ID0gaWVlZTgwMjExX3N0YV9zZXRfZXh0cmFfaWUoc2RhdGEsIGV4dHJhLCBkYXRhLT5sZW5ndGgpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOwotCQlpZWVlODAyMTFfc3RhX3JlcV9hdXRoKHNkYXRhLCAmc2RhdGEtPnUuc3RhKTsKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfRVhUX1NNRTsKKwkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7CiAJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfZ2l3cmFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwotCXN0cnVjdCBpd19yYW5nZSAqcmFuZ2UgPSAoc3RydWN0IGl3X3JhbmdlICopIGV4dHJhOwotCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKLQlpbnQgYyA9IDA7Ci0KLQlkYXRhLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKLQltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKLQotCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOwotCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDIxOwotCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7Ci0JcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7Ci0JcmFuZ2UtPm1pbl9yZXRyeSA9IDA7Ci0JcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKLQlyYW5nZS0+bWluX3J0cyA9IDA7Ci0JcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OwotCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKLQlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OwotCi0JcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OwotCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7Ci0JcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7Ci0JcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSBOVU1fREVGQVVMVF9LRVlTOwotCi0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDIHx8Ci0JICAgIGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREIpCi0JCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IGxvY2FsLT5ody5tYXhfc2lnbmFsOwotCWVsc2UgaWYgIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkKLQkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gLTExMDsKLQllbHNlCi0JCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDA7Ci0KLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX05PSVNFX0RCTSkKLQkJcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gLTExMDsKLQllbHNlCi0JCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDA7Ci0KLQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsKLQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCA9IGxvY2FsLT53c3RhdHNfZmxhZ3M7Ci0KLQlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDUwOwotCS8qIG5vdCBhbHdheXMgdHJ1ZSBidXQgYmV0dGVyIHRoYW4gbm90aGluZyAqLwotCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IHJhbmdlLT5tYXhfcXVhbC5sZXZlbCAvIDI7Ci0JcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gcmFuZ2UtPm1heF9xdWFsLm5vaXNlIC8gMjsKLQlyYW5nZS0+YXZnX3F1YWwudXBkYXRlZCA9IGxvY2FsLT53c3RhdHNfZmxhZ3M7Ci0KLQlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9XUEEyIHwKLQkJCSAgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfCBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUDsKLQotCi0JZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQgKyspIHsKLQkJaW50IGk7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCi0JCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKLQotCQlpZiAoIXNiYW5kKQotCQkJY29udGludWU7Ci0KLQkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzICYmIGMgPCBJV19NQVhfRlJFUVVFTkNJRVM7IGkrKykgewotCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gJnNiYW5kLT5jaGFubmVsc1tpXTsKLQotCQkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKLQkJCQlyYW5nZS0+ZnJlcVtjXS5pID0KLQkJCQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKAotCQkJCQkJY2hhbi0+Y2VudGVyX2ZyZXEpOwotCQkJCXJhbmdlLT5mcmVxW2NdLm0gPSBjaGFuLT5jZW50ZXJfZnJlcTsKLQkJCQlyYW5nZS0+ZnJlcVtjXS5lID0gNjsKLQkJCQljKys7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmFuZ2UtPm51bV9jaGFubmVscyA9IGM7Ci0JcmFuZ2UtPm51bV9mcmVxdWVuY3kgPSBjOwotCi0JSVdfRVZFTlRfQ0FQQV9TRVRfS0VSTkVMKHJhbmdlLT5ldmVudF9jYXBhKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV0FQKTsKLQlJV19FVkVOVF9DQVBBX1NFVChyYW5nZS0+ZXZlbnRfY2FwYSwgU0lPQ0dJV1NDQU4pOwotCi0JcmFuZ2UtPnNjYW5fY2FwYSB8PSBJV19TQ0FOX0NBUEFfRVNTSUQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCiBzdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9zaXdmcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgICBzdHJ1Y3QgaXdfZnJlcSAqZnJlcSwgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCQlzZGF0YS0+dS5pYnNzLmZsYWdzICY9IH5JRUVFODAyMTFfSUJTU19BVVRPX0NIQU5ORUxfU0VMOworCWVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19DSEFOTkVMX1NFTDsKIAogCS8qIGZyZXEtPmUgPT0gMDogZnJlcS0+bSA9IGNoYW5uZWw7IG90aGVyd2lzZSBmcmVxID0gbSAqIDEwXmUgKi8KIAlpZiAoZnJlcS0+ZSA9PSAwKSB7CiAJCWlmIChmcmVxLT5tIDwgMCkgewotCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJCXNkYXRhLT51LnN0YS5mbGFncyB8PQorCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwkJCQlzZGF0YS0+dS5pYnNzLmZsYWdzIHw9CisJCQkJCUlFRUU4MDIxMV9JQlNTX0FVVE9fQ0hBTk5FTF9TRUw7CisJCQllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0KIAkJCQkJSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZQpAQCAtMjc0LDMyICsxOTcsMjggQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzaXplX3QgbGVuID0gZGF0YS0+bGVuZ3RoOworCWludCByZXQ7CiAKIAkvKiBpd2NvbmZpZyB1c2VzIG51bCB0ZXJtaW5hdGlvbiBpbiBTU0lELi4gKi8KIAlpZiAobGVuID4gMCAmJiBzc2lkW2xlbiAtIDFdID09ICdcMCcpCiAJCWxlbi0tOwogCiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKLQkJaW50IHJldDsKLQkJaWYgKHNkYXRhLT5mbGFncyAmIElFRUU4MDIxMV9TREFUQV9VU0VSU1BBQ0VfTUxNRSkgewotCQkJaWYgKGxlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1jcHkoc2RhdGEtPnUuc3RhLnNzaWQsIHNzaWQsIGxlbik7Ci0JCQlzZGF0YS0+dS5zdGEuc3NpZF9sZW4gPSBsZW47Ci0JCQlyZXR1cm4gMDsKLQkJfQorCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlpZiAoZGF0YS0+ZmxhZ3MpCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOwogCQllbHNlCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX1NTSURfU0VMOworCQkJc2RhdGEtPnUubWdkLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19TU0lEX1NFTDsKKwogCQlyZXQgPSBpZWVlODAyMTFfc3RhX3NldF9zc2lkKHNkYXRhLCBzc2lkLCBsZW4pOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSwgJnNkYXRhLT51LnN0YSk7CisKKwkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0VYVF9TTUU7CisJCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEpOwogCQlyZXR1cm4gMDsKLQl9CisJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCisJCXJldHVybiBpZWVlODAyMTFfaWJzc19zZXRfc3NpZChzZGF0YSwgc3NpZCwgbGVuKTsKIAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KQEAgLTMxMyw4ICsyMzIsNyBAQAogCiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKIAkJaW50IHJlcyA9IGllZWU4MDIxMV9zdGFfZ2V0X3NzaWQoc2RhdGEsIHNzaWQsICZsZW4pOwogCQlpZiAocmVzID09IDApIHsKIAkJCWRhdGEtPmxlbmd0aCA9IGxlbjsKQEAgLTMyMiw2ICsyNDAsMTQgQEAKIAkJfSBlbHNlCiAJCQlkYXRhLT5mbGFncyA9IDA7CiAJCXJldHVybiByZXM7CisJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHsKKwkJaW50IHJlcyA9IGllZWU4MDIxMV9pYnNzX2dldF9zc2lkKHNkYXRhLCBzc2lkLCAmbGVuKTsKKwkJaWYgKHJlcyA9PSAwKSB7CisJCQlkYXRhLT5sZW5ndGggPSBsZW47CisJCQlkYXRhLT5mbGFncyA9IDE7CisJCX0gZWxzZQorCQkJZGF0YS0+ZmxhZ3MgPSAwOworCQlyZXR1cm4gcmVzOwogCX0KIAogCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTMzNSwyNiArMjYxLDMyIEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewogCQlpbnQgcmV0OwotCQlpZiAoc2RhdGEtPmZsYWdzICYgSUVFRTgwMjExX1NEQVRBX1VTRVJTUEFDRV9NTE1FKSB7Ci0JCQltZW1jcHkoc2RhdGEtPnUuc3RhLmJzc2lkLCAodTggKikgJmFwX2FkZHItPnNhX2RhdGEsCi0JCQkgICAgICAgRVRIX0FMRU4pOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwogCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKCh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSkpCi0JCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTCB8CiAJCQkJSUVFRTgwMjExX1NUQV9BVVRPX0NIQU5ORUxfU0VMOwogCQllbHNlIGlmIChpc19icm9hZGNhc3RfZXRoZXJfYWRkcigodTggKikgJmFwX2FkZHItPnNhX2RhdGEpKQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfQVVUT19CU1NJRF9TRUw7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9BVVRPX0JTU0lEX1NFTDsKIAkJZWxzZQotCQkJc2RhdGEtPnUuc3RhLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOworCQkJc2RhdGEtPnUubWdkLmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0FVVE9fQlNTSURfU0VMOwogCQlyZXQgPSBpZWVlODAyMTFfc3RhX3NldF9ic3NpZChzZGF0YSwgKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCWllZWU4MDIxMV9zdGFfcmVxX2F1dGgoc2RhdGEsICZzZGF0YS0+dS5zdGEpOworCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfRVhUX1NNRTsKKwkJaWVlZTgwMjExX3N0YV9yZXFfYXV0aChzZGF0YSk7CiAJCXJldHVybiAwOworCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB7CisJCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKKwkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUwgfAorCQkJCQkgICAgICAgSUVFRTgwMjExX0lCU1NfQVVUT19DSEFOTkVMX1NFTDsKKwkJZWxzZSBpZiAoaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoKHU4ICopICZhcF9hZGRyLT5zYV9kYXRhKSkKKwkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgfD0gSUVFRTgwMjExX0lCU1NfQVVUT19CU1NJRF9TRUw7CisJCWVsc2UKKwkJCXNkYXRhLT51Lmlic3MuZmxhZ3MgJj0gfklFRUU4MDIxMV9JQlNTX0FVVE9fQlNTSURfU0VMOworCisJCXJldHVybiBpZWVlODAyMTFfaWJzc19zZXRfYnNzaWQoc2RhdGEsICh1OCAqKSAmYXBfYWRkci0+c2FfZGF0YSk7CiAJfSBlbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfV0RTKSB7CiAJCS8qCiAJCSAqIElmIGl0IGlzIG5lY2Vzc2FyeSB0byB1cGRhdGUgdGhlIFdEUyBwZWVyIGFkZHJlc3MKQEAgLTM4MywxNyArMzE1LDIwIEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewotCQlpZiAoc2RhdGEtPnUuc3RhLnN0YXRlID09IElFRUU4MDIxMV9TVEFfTUxNRV9BU1NPQ0lBVEVEIHx8Ci0JCSAgICBzZGF0YS0+dS5zdGEuc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0lCU1NfSk9JTkVEKSB7CisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWlmIChzZGF0YS0+dS5tZ2Quc3RhdGUgPT0gSUVFRTgwMjExX1NUQV9NTE1FX0FTU09DSUFURUQpIHsKIAkJCWFwX2FkZHItPnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKLQkJCW1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgc2RhdGEtPnUuc3RhLmJzc2lkLCBFVEhfQUxFTik7Ci0JCQlyZXR1cm4gMDsKLQkJfSBlbHNlIHsKKwkJCW1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CisJCX0gZWxzZQogCQkJbWVtc2V0KCZhcF9hZGRyLT5zYV9kYXRhLCAwLCBFVEhfQUxFTik7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlpZiAoc2RhdGEtPnUuaWJzcy5zdGF0ZSA9PSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCkgeworCQkJYXBfYWRkci0+c2FfZmFtaWx5ID0gQVJQSFJEX0VUSEVSOworCQkJbWVtY3B5KCZhcF9hZGRyLT5zYV9kYXRhLCBzZGF0YS0+dS5pYnNzLmJzc2lkLCBFVEhfQUxFTik7CisJCX0gZWxzZQorCQkJbWVtc2V0KCZhcF9hZGRyLT5zYV9kYXRhLCAwLCBFVEhfQUxFTik7CisJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1dEUykgewogCQlhcF9hZGRyLT5zYV9mYW1pbHkgPSBBUlBIUkRfRVRIRVI7CiAJCW1lbWNweSgmYXBfYWRkci0+c2FfZGF0YSwgc2RhdGEtPnUud2RzLnJlbW90ZV9hZGRyLCBFVEhfQUxFTik7CkBAIC00MDQsNTggKzMzOSw2IEBACiB9CiAKIAotc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgdW5pb24gaXdyZXFfZGF0YSAqd3JxdSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwotCXN0cnVjdCBpd19zY2FuX3JlcSAqcmVxID0gTlVMTDsKLQl1OCAqc3NpZCA9IE5VTEw7Ci0Jc2l6ZV90IHNzaWRfbGVuID0gMDsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlyZXR1cm4gLUVORVRET1dOOwotCi0JaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQyAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JLyogaWYgU1NJRCB3YXMgc3BlY2lmaWVkIGV4cGxpY2l0bHkgdGhlbiB1c2UgdGhhdCAqLwotCWlmICh3cnF1LT5kYXRhLmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSAmJgotCSAgICB3cnF1LT5kYXRhLmZsYWdzICYgSVdfU0NBTl9USElTX0VTU0lEKSB7Ci0JCXJlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKLQkJc3NpZCA9IHJlcS0+ZXNzaWQ7Ci0JCXNzaWRfbGVuID0gcmVxLT5lc3NpZF9sZW47Ci0JfQotCi0JcmV0dXJuIGllZWU4MDIxMV9yZXF1ZXN0X3NjYW4oc2RhdGEsIHNzaWQsIHNzaWRfbGVuKTsKLX0KLQotCi1zdGF0aWMgaW50IGllZWU4MDIxMV9pb2N0bF9naXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgICBzdHJ1Y3QgaXdfcG9pbnQgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCWludCByZXM7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3ZGV2X3ByaXYoZGV2LT5pZWVlODAyMTFfcHRyKTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQotCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQotCWlmIChsb2NhbC0+c3dfc2Nhbm5pbmcgfHwgbG9jYWwtPmh3X3NjYW5uaW5nKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCXJlcyA9IGllZWU4MDIxMV9zY2FuX3Jlc3VsdHMobG9jYWwsIGluZm8sIGV4dHJhLCBkYXRhLT5sZW5ndGgpOwotCWlmIChyZXMgPj0gMCkgewotCQlkYXRhLT5sZW5ndGggPSByZXM7Ci0JCXJldHVybiAwOwotCX0KLQlkYXRhLT5sZW5ndGggPSAwOwotCXJldHVybiByZXM7Ci19Ci0KLQogc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3cmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCQkgIHN0cnVjdCBpd19wYXJhbSAqcmF0ZSwgY2hhciAqZXh0cmEpCkBAIC01MTEsNyArMzk0LDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2RhdGEtPnUuc3RhLmJzc2lkKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHNkYXRhLT51Lm1nZC5ic3NpZCk7CiAKIAlpZiAoc3RhICYmICEoc3RhLT5sYXN0X3R4X3JhdGUuZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSkKIAkJcmF0ZS0+dmFsdWUgPSBzYmFuZC0+Yml0cmF0ZXNbc3RhLT5sYXN0X3R4X3JhdGUuaWR4XS5iaXRyYXRlOwpAQCAtNTQ5LDEwICs0MzIsOSBAQAogCWVsc2UgLyogQXV0b21hdGljIHBvd2VyIGxldmVsIHNldHRpbmcgKi8KIAkJbmV3X3Bvd2VyX2xldmVsID0gY2hhbi0+bWF4X3Bvd2VyOwogCi0JaWYgKGxvY2FsLT5ody5jb25mLnBvd2VyX2xldmVsICE9IG5ld19wb3dlcl9sZXZlbCkgewotCQlsb2NhbC0+aHcuY29uZi5wb3dlcl9sZXZlbCA9IG5ld19wb3dlcl9sZXZlbDsKKwlsb2NhbC0+dXNlcl9wb3dlcl9sZXZlbCA9IG5ld19wb3dlcl9sZXZlbDsKKwlpZiAobG9jYWwtPmh3LmNvbmYucG93ZXJfbGV2ZWwgIT0gbmV3X3Bvd2VyX2xldmVsKQogCQlyZWNvbmZfZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BPV0VSOwotCX0KIAogCWlmIChsb2NhbC0+aHcuY29uZi5yYWRpb19lbmFibGVkICE9ICEoZGF0YS0+dHhwb3dlci5kaXNhYmxlZCkpIHsKIAkJbG9jYWwtPmh3LmNvbmYucmFkaW9fZW5hYmxlZCA9ICEoZGF0YS0+dHhwb3dlci5kaXNhYmxlZCk7CkBAIC03MTMsOCArNTk1LDcgQEAKIAlzdHJ1Y3QgaXdfbWxtZSAqbWxtZSA9IChzdHJ1Y3QgaXdfbWxtZSAqKSBleHRyYTsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKLQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCWlmICghKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzd2l0Y2ggKG1sbWUtPmNtZCkgewpAQCAtNzM3LDcgKzYxOCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJaW50IGlkeCwgaSwgYWxnID0gQUxHX1dFUDsKIAl1OCBiY2FkZHJbRVRIX0FMRU5dID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07Ci0JaW50IHJlbW92ZSA9IDA7CisJaW50IHJlbW92ZSA9IDAsIHJldDsKIAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIApAQCAtNzYzLDExICs2NDQsMjAgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JcmV0dXJuIGllZWU4MDIxMV9zZXRfZW5jcnlwdGlvbigKKwlyZXQgPSBpZWVlODAyMTFfc2V0X2VuY3J5cHRpb24oCiAJCXNkYXRhLCBiY2FkZHIsCiAJCWlkeCwgYWxnLCByZW1vdmUsCiAJCSFzZGF0YS0+ZGVmYXVsdF9rZXksCiAJCWtleWJ1ZiwgZXJxLT5sZW5ndGgpOworCisJaWYgKCFyZXQpIHsKKwkJaWYgKHJlbW92ZSkKKwkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOworCQllbHNlCisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOworCX0KKworCXJldHVybiByZXQ7CiB9CiAKIApAQCAtODEwLDggKzcwMCw3IEBACiAJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKIAogCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX3N0YSAqaWZzdGEgPSAmc2RhdGEtPnUuc3RhOwotCQlzd2l0Y2ggKGlmc3RhLT5hdXRoX2FsZykgeworCQlzd2l0Y2ggKHNkYXRhLT51Lm1nZC5hdXRoX2FsZykgewogCQljYXNlIFdMQU5fQVVUSF9PUEVOOgogCQljYXNlIFdMQU5fQVVUSF9MRUFQOgogCQkJZXJxLT5mbGFncyB8PSBJV19FTkNPREVfT1BFTjsKQEAgLTgzNiw2ICs3MjUsOSBAQAogCWludCByZXQgPSAwLCB0aW1lb3V0ID0gMDsKIAlib29sIHBzOwogCisJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODUyLDMxICs3NDQsNDkgQEAKIAkJcHMgPSB0cnVlOwogCQlicmVhazsKIAlkZWZhdWx0OiAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2Ugd2UgaWdub3JlICovCi0JCWJyZWFrOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAod3JxLT5mbGFncyAmIH4oSVdfUE9XRVJfTU9ERSB8IElXX1BPV0VSX1RJTUVPVVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmICh3cnEtPmZsYWdzICYgSVdfUE9XRVJfVElNRU9VVCkKIAkJdGltZW91dCA9IHdycS0+dmFsdWUgLyAxMDAwOwogCi1zZXQ6Ci0JaWYgKHBzID09IGxvY2FsLT5wb3dlcnNhdmUgJiYgdGltZW91dCA9PSBsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0KQorIHNldDoKKwlpZiAocHMgPT0gbG9jYWwtPnBvd2Vyc2F2ZSAmJiB0aW1lb3V0ID09IGNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCkKIAkJcmV0dXJuIHJldDsKIAogCWxvY2FsLT5wb3dlcnNhdmUgPSBwczsKLQlsb2NhbC0+ZHluYW1pY19wc190aW1lb3V0ID0gdGltZW91dDsKKwljb25mLT5keW5hbWljX3BzX3RpbWVvdXQgPSB0aW1lb3V0OwogCi0JaWYgKHNkYXRhLT51LnN0YS5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkgewotCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfTk9fU1RBQ0tfRFlOQU1JQ19QUykgJiYKLQkJICAgIGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQgPiAwKQotCQkJbW9kX3RpbWVyKCZsb2NhbC0+ZHluYW1pY19wc190aW1lciwgamlmZmllcyArCi0JCQkJICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5keW5hbWljX3BzX3RpbWVvdXQpKTsKLQkJZWxzZSB7Ci0JCQlpZiAobG9jYWwtPnBvd2Vyc2F2ZSkKLQkJCQljb25mLT5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKLQkJCWVsc2UKLQkJCQljb25mLT5mbGFncyAmPSB+SUVFRTgwMjExX0NPTkZfUFM7CisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKQorCQlyZXQgPSBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLAorCQkJCQkgIElFRUU4MDIxMV9DT05GX0NIQU5HRV9EWU5QU19USU1FT1VUKTsKKworCWlmICghKHNkYXRhLT51Lm1nZC5mbGFncyAmIElFRUU4MDIxMV9TVEFfQVNTT0NJQVRFRCkpCisJCXJldHVybiByZXQ7CisKKwlpZiAoY29uZi0+ZHluYW1pY19wc190aW1lb3V0ID4gMCAmJgorCSAgICAhKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKSkgeworCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKKwkJCSAgbXNlY3NfdG9famlmZmllcyhjb25mLT5keW5hbWljX3BzX3RpbWVvdXQpKTsKKwl9IGVsc2UgeworCQlpZiAobG9jYWwtPnBvd2Vyc2F2ZSkgeworCQkJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykKKwkJCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDEpOworCQkJY29uZi0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7CisJCQlyZXQgPSBpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLAorCQkJCQlJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCQl9IGVsc2UgeworCQkJY29uZi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOworCQkJcmV0ID0gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwKKwkJCQkJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwkJCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spCisJCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAwKTsKKwkJCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CisJCQljYW5jZWxfd29ya19zeW5jKCZsb2NhbC0+ZHluYW1pY19wc19lbmFibGVfd29yayk7CiAJCX0KLQkJcmV0ID0gaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtOTAzLDExICs4MTMsMjIgQEAKIAogCXN3aXRjaCAoZGF0YS0+ZmxhZ3MgJiBJV19BVVRIX0lOREVYKSB7CiAJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgotCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CiAJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKIAljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CiAJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgogCWNhc2UgSVdfQVVUSF9LRVlfTUdNVDoKKwljYXNlIElXX0FVVEhfQ0lQSEVSX0dST1VQX01HTVQ6CisJCWJyZWFrOworCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQkJaWYgKGRhdGEtPnZhbHVlICYgKElXX0FVVEhfQ0lQSEVSX1dFUDQwIHwKKwkJCSAgICBJV19BVVRIX0NJUEhFUl9XRVAxMDQgfCBJV19BVVRIX0NJUEhFUl9US0lQKSkKKwkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0KKwkJCQkJSUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOworCQkJZWxzZQorCQkJCXNkYXRhLT51Lm1nZC5mbGFncyAmPQorCQkJCQl+SUVFRTgwMjExX1NUQV9US0lQX1dFUF9VU0VEOworCQl9CiAJCWJyZWFrOwogCWNhc2UgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEOgogCQlzZGF0YS0+ZHJvcF91bmVuY3J5cHRlZCA9ICEhZGF0YS0+dmFsdWU7CkBAIC05MTYsMjQgKzgzNyw0NSBAQAogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCQlyZXQgPSAtRUlOVkFMOwogCQllbHNlIHsKLQkJCXNkYXRhLT51LnN0YS5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7CisJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfUFJJVkFDWV9JTlZPS0VEOwogCQkJLyoKIAkJCSAqIFByaXZhY3kgaW52b2tlZCBieSB3cGFfc3VwcGxpY2FudCwgc3RvcmUgdGhlCiAJCQkgKiB2YWx1ZSBhbmQgYWxsb3cgYXNzb2NpYXRpbmcgdG8gYSBwcm90ZWN0ZWQKIAkJCSAqIG5ldHdvcmsgd2l0aG91dCBoYXZpbmcgYSBrZXkgdXAgZnJvbnQuCiAJCQkgKi8KIAkJCWlmIChkYXRhLT52YWx1ZSkKLQkJCQlzZGF0YS0+dS5zdGEuZmxhZ3MgfD0KKwkJCQlzZGF0YS0+dS5tZ2QuZmxhZ3MgfD0KIAkJCQkJSUVFRTgwMjExX1NUQV9QUklWQUNZX0lOVk9LRUQ7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJCXNkYXRhLT51LnN0YS5hdXRoX2FsZ3MgPSBkYXRhLT52YWx1ZTsKKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJc2RhdGEtPnUubWdkLmF1dGhfYWxncyA9IGRhdGEtPnZhbHVlOwogCQllbHNlCiAJCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJYnJlYWs7CisJY2FzZSBJV19BVVRIX01GUDoKKwkJaWYgKCEoc2RhdGEtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRSkpIHsKKwkJCXJldCA9IC1FT1BOT1RTVVBQOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCQlzd2l0Y2ggKGRhdGEtPnZhbHVlKSB7CisJCQljYXNlIElXX0FVVEhfTUZQX0RJU0FCTEVEOgorCQkJCXNkYXRhLT51Lm1nZC5tZnAgPSBJRUVFODAyMTFfTUZQX0RJU0FCTEVEOworCQkJCWJyZWFrOworCQkJY2FzZSBJV19BVVRIX01GUF9PUFRJT05BTDoKKwkJCQlzZGF0YS0+dS5tZ2QubWZwID0gSUVFRTgwMjExX01GUF9PUFRJT05BTDsKKwkJCQlicmVhazsKKwkJCWNhc2UgSVdfQVVUSF9NRlBfUkVRVUlSRUQ6CisJCQkJc2RhdGEtPnUubWdkLm1mcCA9IElFRUU4MDIxMV9NRlBfUkVRVUlSRUQ7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXJldCA9IC1FSU5WQUw7CisJCQl9CisJCX0gZWxzZQorCQkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FT1BOT1RTVVBQOwogCQlicmVhazsKQEAgLTk1MSw5ICs4OTMsOSBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OIHx8Ci0JICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzZGF0YS0+dS5zdGEuYnNzaWQpOworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBzZGF0YS0+dS5tZ2QuYnNzaWQpOworCiAJaWYgKCFzdGEpIHsKIAkJd3N0YXRzLT5kaXNjYXJkLmZyYWdtZW50ID0gMDsKIAkJd3N0YXRzLT5kaXNjYXJkLm1pc2MgPSAwOwpAQCAtOTYyLDEwICs5MDQsNDUgQEAKIAkJd3N0YXRzLT5xdWFsLm5vaXNlID0gMDsKIAkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX0FMTF9JTlZBTElEOwogCX0gZWxzZSB7Ci0JCXdzdGF0cy0+cXVhbC5sZXZlbCA9IHN0YS0+bGFzdF9zaWduYWw7Ci0JCXdzdGF0cy0+cXVhbC5xdWFsID0gc3RhLT5sYXN0X3F1YWw7Ci0JCXdzdGF0cy0+cXVhbC5ub2lzZSA9IHN0YS0+bGFzdF9ub2lzZTsKLQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBsb2NhbC0+d3N0YXRzX2ZsYWdzOworCQl3c3RhdHMtPnF1YWwudXBkYXRlZCA9IDA7CisJCS8qCisJCSAqIG1pcnJvciB3aGF0IGNmZzgwMjExIGRvZXMgZm9yIGl3cmFuZ2Uvc2NhbiByZXN1bHRzLAorCQkgKiBvdGhlcndpc2UgdXNlcnNwYWNlIGdldHMgY29uZnVzZWQuCisJCSAqLworCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgKElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDIHwKKwkJCQkgICAgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0pKSB7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKKwkJfSBlbHNlIHsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfSU5WQUxJRDsKKwkJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9JTlZBTElEOworCQl9CisKKwkJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfVU5TUEVDKSB7CisJCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBzdGEtPmxhc3Rfc2lnbmFsOworCQkJd3N0YXRzLT5xdWFsLnF1YWwgPSBzdGEtPmxhc3Rfc2lnbmFsOworCQl9IGVsc2UgaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TSUdOQUxfREJNKSB7CisJCQlpbnQgc2lnID0gc3RhLT5sYXN0X3NpZ25hbDsKKworCQkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9EQk07CisJCQl3c3RhdHMtPnF1YWwubGV2ZWwgPSBzaWc7CisJCQlpZiAoc2lnIDwgLTExMCkKKwkJCQlzaWcgPSAtMTEwOworCQkJZWxzZSBpZiAoc2lnID4gLTQwKQorCQkJCXNpZyA9IC00MDsKKwkJCXdzdGF0cy0+cXVhbC5xdWFsID0gc2lnICsgMTEwOworCQl9CisKKwkJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19OT0lTRV9EQk0pIHsKKwkJCS8qCisJCQkgKiBUaGlzIGFzc3VtZXMgdGhhdCBpZiBkcml2ZXIgcmVwb3J0cyBub2lzZSwgaXQgYWxzbworCQkJICogcmVwb3J0cyBzaWduYWwgaW4gZEJtLgorCQkJICovCisJCQl3c3RhdHMtPnF1YWwubm9pc2UgPSBzdGEtPmxhc3Rfbm9pc2U7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX1VQREFURUQ7CisJCX0gZWxzZSB7CisJCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisJCX0KIAl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTk4Miw5ICs5NTksOCBAQAogCiAJc3dpdGNoIChkYXRhLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKIAljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiB8fAotCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQotCQkJZGF0YS0+dmFsdWUgPSBzZGF0YS0+dS5zdGEuYXV0aF9hbGdzOworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCQlkYXRhLT52YWx1ZSA9IHNkYXRhLT51Lm1nZC5hdXRoX2FsZ3M7CiAJCWVsc2UKIAkJCXJldCA9IC1FT1BOT1RTVVBQOwogCQlicmVhazsKQEAgLTEwMTcsNiArOTkzLDkgQEAKIAljYXNlIElXX0VOQ09ERV9BTEdfQ0NNUDoKIAkJYWxnID0gQUxHX0NDTVA7CiAJCWJyZWFrOworCWNhc2UgSVdfRU5DT0RFX0FMR19BRVNfQ01BQzoKKwkJYWxnID0gQUxHX0FFU19DTUFDOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQpAQCAtMTAyNSwyMCArMTAwNCw0MSBAQAogCQlyZW1vdmUgPSAxOwogCiAJaWR4ID0gZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWDsKLQlpZiAoaWR4IDwgMSB8fCBpZHggPiA0KSB7Ci0JCWlkeCA9IC0xOwotCQlpZiAoIXNkYXRhLT5kZWZhdWx0X2tleSkKLQkJCWlkeCA9IDA7Ci0JCWVsc2UgZm9yIChpID0gMDsgaSA8IE5VTV9ERUZBVUxUX0tFWVM7IGkrKykgewotCQkJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSA9PSBzZGF0YS0+a2V5c1tpXSkgewotCQkJCWlkeCA9IGk7Ci0JCQkJYnJlYWs7CisJaWYgKGFsZyA9PSBBTEdfQUVTX0NNQUMpIHsKKwkJaWYgKGlkeCA8IE5VTV9ERUZBVUxUX0tFWVMgKyAxIHx8CisJCSAgICBpZHggPiBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTKSB7CisJCQlpZHggPSAtMTsKKwkJCWlmICghc2RhdGEtPmRlZmF1bHRfbWdtdF9rZXkpCisJCQkJaWR4ID0gMDsKKwkJCWVsc2UgZm9yIChpID0gTlVNX0RFRkFVTFRfS0VZUzsKKwkJCQkgIGkgPCBOVU1fREVGQVVMVF9LRVlTICsgTlVNX0RFRkFVTFRfTUdNVF9LRVlTOworCQkJCSAgaSsrKSB7CisJCQkJaWYgKHNkYXRhLT5kZWZhdWx0X21nbXRfa2V5ID09IHNkYXRhLT5rZXlzW2ldKQorCQkJCXsKKwkJCQkJaWR4ID0gaTsKKwkJCQkJYnJlYWs7CisJCQkJfQogCQkJfQotCQl9Ci0JCWlmIChpZHggPCAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlCi0JCWlkeC0tOworCQkJaWYgKGlkeCA8IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0gZWxzZQorCQkJaWR4LS07CisJfSBlbHNlIHsKKwkJaWYgKGlkeCA8IDEgfHwgaWR4ID4gNCkgeworCQkJaWR4ID0gLTE7CisJCQlpZiAoIXNkYXRhLT5kZWZhdWx0X2tleSkKKwkJCQlpZHggPSAwOworCQkJZWxzZSBmb3IgKGkgPSAwOyBpIDwgTlVNX0RFRkFVTFRfS0VZUzsgaSsrKSB7CisJCQkJaWYgKHNkYXRhLT5kZWZhdWx0X2tleSA9PSBzZGF0YS0+a2V5c1tpXSkgeworCQkJCQlpZHggPSBpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaWR4IDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlCisJCQlpZHgtLTsKKwl9CiAKIAlyZXR1cm4gaWVlZTgwMjExX3NldF9lbmNyeXB0aW9uKHNkYXRhLCBleHQtPmFkZHIuc2FfZGF0YSwgaWR4LCBhbGcsCiAJCQkJCXJlbW92ZSwKQEAgLTEwNjMsNyArMTA2Myw3IEBACiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdTRU5TICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NHSVdTRU5TICovCiAJKGl3X2hhbmRsZXIpIE5VTEwgLyogbm90IHVzZWQgKi8sCQkvKiBTSU9DU0lXUkFOR0UgKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd3JhbmdlLAkJLyogU0lPQ0dJV1JBTkdFICovCisJKGl3X2hhbmRsZXIpIGNmZzgwMjExX3dleHRfZ2l3cmFuZ2UsCQkvKiBTSU9DR0lXUkFOR0UgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCAvKiBub3QgdXNlZCAqLywJCS8qIFNJT0NTSVdQUklWICovCiAJKGl3X2hhbmRsZXIpIE5VTEwgLyoga2VybmVsIGNvZGUgKi8sCQkvKiBTSU9DR0lXUFJJViAqLwogCShpd19oYW5kbGVyKSBOVUxMIC8qIG5vdCB1c2VkICovLAkJLyogU0lPQ1NJV1NUQVRTICovCkBAIC0xMDc2LDggKzEwNzYsOCBAQAogCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfZ2l3YXAsCQkvKiBTSU9DR0lXQVAgKi8KIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX3Npd21sbWUsCQkvKiBTSU9DU0lXTUxNRSAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJCQkvKiBTSU9DR0lXQVBMSVNUICovCi0JKGl3X2hhbmRsZXIpIGllZWU4MDIxMV9pb2N0bF9zaXdzY2FuLAkJLyogU0lPQ1NJV1NDQU4gKi8KLQkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd3NjYW4sCQkvKiBTSU9DR0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X3Npd3NjYW4sCQkvKiBTSU9DU0lXU0NBTiAqLworCShpd19oYW5kbGVyKSBjZmc4MDIxMV93ZXh0X2dpd3NjYW4sCQkvKiBTSU9DR0lXU0NBTiAqLwogCShpd19oYW5kbGVyKSBpZWVlODAyMTFfaW9jdGxfc2l3ZXNzaWQsCQkvKiBTSU9DU0lXRVNTSUQgKi8KIAkoaXdfaGFuZGxlcikgaWVlZTgwMjExX2lvY3RsX2dpd2Vzc2lkLAkJLyogU0lPQ0dJV0VTU0lEICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkJCS8qIFNJT0NTSVdOSUNLTiAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dtZS5jIGIvbmV0L21hYzgwMjExL3dtZS5jCmluZGV4IGFjNzFiMzguLjBiOGFkMWY0IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd21lLmMKKysrIGIvbmV0L21hYzgwMjExL3dtZS5jCkBAIC05OSwxMCArOTksMTMgQEAKIAkvKiBpbiBjYXNlIHdlIGFyZSBhIGNsaWVudCB2ZXJpZnkgYWNtIGlzIG5vdCBzZXQgZm9yIHRoaXMgYWMgKi8KIAl3aGlsZSAodW5saWtlbHkobG9jYWwtPndtbV9hY20gJiBCSVQoc2tiLT5wcmlvcml0eSkpKSB7CiAJCWlmICh3bWVfZG93bmdyYWRlX2FjKHNrYikpIHsKLQkJCS8qIFRoZSBvbGQgY29kZSB3b3VsZCBkcm9wIHRoZSBwYWNrZXQgaW4gdGhpcwotCQkJICogY2FzZS4KKwkJCS8qCisJCQkgKiBUaGlzIHNob3VsZCBub3QgcmVhbGx5IGhhcHBlbi4gVGhlIEFQIGhhcyBtYXJrZWQgYWxsCisJCQkgKiBsb3dlciBBQ3MgdG8gcmVxdWlyZSBhZG1pc3Npb24gY29udHJvbCB3aGljaCBpcyBub3QKKwkJCSAqIGEgcmVhc29uYWJsZSBjb25maWd1cmF0aW9uLiBBbGxvdyB0aGUgZnJhbWUgdG8gYmUKKwkJCSAqIHRyYW5zbWl0dGVkIHVzaW5nIEFDX0JLIGFzIGEgd29ya2Fyb3VuZC4KIAkJCSAqLwotCQkJcmV0dXJuIDA7CisJCQlicmVhazsKIAkJfQogCX0KIApAQCAtMTE0LDkgKzExNyw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9tYXN0ZXJfcHJpdiAqbXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gbXByaXYtPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKLQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAl1MTYgcXVldWU7CiAJdTggdGlkOwogCkBAIC0xMjQsMjkgKzEyNSwxMSBAQAogCWlmICh1bmxpa2VseShxdWV1ZSA+PSBsb2NhbC0+aHcucXVldWVzKSkKIAkJcXVldWUgPSBsb2NhbC0+aHcucXVldWVzIC0gMTsKIAotCWlmIChza2ItPnJlcXVldWUpIHsKLQkJaWYgKCFody0+YW1wZHVfcXVldWVzKQotCQkJcmV0dXJuIHF1ZXVlOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKLQkJdGlkID0gc2tiLT5wcmlvcml0eSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RBRzFEX01BU0s7Ci0JCWlmIChzdGEpIHsKLQkJCWludCBhbXBkdV9xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKLQotCQkJaWYgKChhbXBkdV9xdWV1ZSA8IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KSkgJiYKLQkJCSAgICB0ZXN0X2JpdChhbXBkdV9xdWV1ZSwgbG9jYWwtPnF1ZXVlX3Bvb2wpKQotCQkJCXF1ZXVlID0gYW1wZHVfcXVldWU7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQkJcmV0dXJuIHF1ZXVlOwotCX0KLQotCS8qIE5vdyB3ZSBrbm93IHRoZSAxZCBwcmlvcml0eSwgZmlsbCBpbiB0aGUgUW9TIGhlYWRlciBpZgotCSAqIHRoZXJlIGlzIG9uZS4KKwkvKgorCSAqIE5vdyB3ZSBrbm93IHRoZSAxZCBwcmlvcml0eSwgZmlsbCBpbiB0aGUgUW9TIGhlYWRlciBpZgorCSAqIHRoZXJlIGlzIG9uZSAoYW5kIHdlIGhhdmVuJ3QgZG9uZSB0aGlzIGJlZm9yZSkuCiAJICovCi0JaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJaWYgKCFza2ItPnJlcXVldWUgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKIAkJdTggKnAgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAkJdTggYWNrX3BvbGljeSA9IDA7CiAJCXRpZCA9IHNrYi0+cHJpb3JpdHkgJiBJRUVFODAyMTFfUU9TX0NUTF9UQUcxRF9NQVNLOwpAQCAtMTU2LDE0MCArMTM5LDcgQEAKIAkJLyogcW9zIGhlYWRlciBpcyAyIGJ5dGVzLCBzZWNvbmQgcmVzZXJ2ZWQgKi8KIAkJKnArKyA9IGFja19wb2xpY3kgfCB0aWQ7CiAJCSpwID0gMDsKLQotCQlpZiAoIWh3LT5hbXBkdV9xdWV1ZXMpCi0JCQlyZXR1cm4gcXVldWU7Ci0KLQkJcmN1X3JlYWRfbG9jaygpOwotCi0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7Ci0JCWlmIChzdGEpIHsKLQkJCWludCBhbXBkdV9xdWV1ZSA9IHN0YS0+dGlkX3RvX3R4X3FbdGlkXTsKLQotCQkJaWYgKChhbXBkdV9xdWV1ZSA8IGllZWU4MDIxMV9udW1fcXVldWVzKGh3KSkgJiYKLQkJCSAgICB0ZXN0X2JpdChhbXBkdV9xdWV1ZSwgbG9jYWwtPnF1ZXVlX3Bvb2wpKQotCQkJCXF1ZXVlID0gYW1wZHVfcXVldWU7Ci0JCX0KLQotCQlyY3VfcmVhZF91bmxvY2soKTsKIAl9CiAKIAlyZXR1cm4gcXVldWU7CiB9Ci0KLWludCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCkKLXsKLQlpbnQgaTsKLQotCS8qIFhYWDogY3VycmVudGx5IGJyb2tlbiBkdWUgdG8gY2IvcmVxdWV1ZSB1c2UgKi8KLQlyZXR1cm4gLUVQRVJNOwotCi0JLyogcHJlcGFyZSB0aGUgZmlsdGVyIGFuZCBzYXZlIGl0IGZvciB0aGUgU1cgcXVldWUKLQkgKiBtYXRjaGluZyB0aGUgcmVjZWl2ZWQgSFcgcXVldWUgKi8KLQotCWlmICghbG9jYWwtPmh3LmFtcGR1X3F1ZXVlcykKLQkJcmV0dXJuIC1FUEVSTTsKLQotCS8qIHRyeSB0byBnZXQgYSBRZGlzYyBmcm9tIHRoZSBwb29sICovCi0JZm9yIChpID0gbG9jYWwtPmh3LnF1ZXVlczsgaSA8IGllZWU4MDIxMV9udW1fcXVldWVzKCZsb2NhbC0+aHcpOyBpKyspCi0JCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCBsb2NhbC0+cXVldWVfcG9vbCkpIHsKLQkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlKGxvY2FsX3RvX2h3KGxvY2FsKSwgaSk7Ci0JCQlzdGEtPnRpZF90b190eF9xW3RpZF0gPSBpOwotCi0JCQkvKiBJRiB0aGVyZSBhcmUgYWxyZWFkeSBwZW5kaW5nIHBhY2tldHMKLQkJCSAqIG9uIHRoaXMgdGlkIGZpcnN0IHdlIG5lZWQgdG8gZHJhaW4gdGhlbQotCQkJICogb24gdGhlIHByZXZpb3VzIHF1ZXVlCi0JCQkgKiBzaW5jZSBIVCBpcyBzdHJpY3QgaW4gb3JkZXIgKi8KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKLQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgImFsbG9jYXRlZCBhZ2dyZWdhdGlvbiBxdWV1ZSIKLQkJCQkJIiAlZCB0aWQgJWQgYWRkciAlcE0gcG9vbD0weCVsWFxuIiwKLQkJCQkJaSwgdGlkLCBzdGEtPnN0YS5hZGRyLAotCQkJCQlsb2NhbC0+cXVldWVfcG9vbFswXSk7Ci0jZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0hUX0RFQlVHICovCi0JCQlyZXR1cm4gMDsKLQkJfQotCi0JcmV0dXJuIC1FQUdBSU47Ci19Ci0KLS8qKgotICogdGhlIGNhbGxlciBuZWVkcyB0byBob2xkIG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsIFgpLT5sb2NrCi0gKi8KLXZvaWQgaWVlZTgwMjExX2h0X2FnZ19xdWV1ZV9yZW1vdmUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUxNiB0aWQsCi0JCQkJICAgdTggcmVxdWV1ZSkKLXsKLQlpbnQgYWdnX3F1ZXVlID0gc3RhLT50aWRfdG9fdHhfcVt0aWRdOwotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gJmxvY2FsLT5odzsKLQotCS8qIHJldHVybiB0aGUgcWRpc2MgdG8gdGhlIHBvb2wgKi8KLQljbGVhcl9iaXQoYWdnX3F1ZXVlLCBsb2NhbC0+cXVldWVfcG9vbCk7Ci0Jc3RhLT50aWRfdG9fdHhfcVt0aWRdID0gaWVlZTgwMjExX251bV9xdWV1ZXMoaHcpOwotCi0JaWYgKHJlcXVldWUpIHsKLQkJaWVlZTgwMjExX3JlcXVldWUobG9jYWwsIGFnZ19xdWV1ZSk7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxOwotCQlzcGlubG9ja190ICpyb290X2xvY2s7Ci0JCXN0cnVjdCBRZGlzYyAqcTsKLQotCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBhZ2dfcXVldWUpOwotCQlxID0gcmN1X2RlcmVmZXJlbmNlKHR4cS0+cWRpc2MpOwotCQlyb290X2xvY2sgPSBxZGlzY19sb2NrKHEpOwotCi0JCXNwaW5fbG9ja19iaChyb290X2xvY2spOwotCQlxZGlzY19yZXNldChxKTsKLQkJc3Bpbl91bmxvY2tfYmgocm9vdF9sb2NrKTsKLQl9Ci19Ci0KLXZvaWQgaWVlZTgwMjExX3JlcXVldWUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCBxdWV1ZSkKLXsKLQlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGxvY2FsLT5tZGV2LCBxdWV1ZSk7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBsaXN0OwotCXNwaW5sb2NrX3QgKnJvb3RfbG9jazsKLQlzdHJ1Y3QgUWRpc2MgKnFkaXNjOwotCXUzMiBsZW47Ci0KLQlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0KLQlxZGlzYyA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKLQlpZiAoIXFkaXNjIHx8ICFxZGlzYy0+ZGVxdWV1ZSkKLQkJZ290byBvdXRfdW5sb2NrOwotCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbGlzdCk7Ci0KLQlyb290X2xvY2sgPSBxZGlzY19yb290X2xvY2socWRpc2MpOwotCXNwaW5fbG9jayhyb290X2xvY2spOwotCWZvciAobGVuID0gcWRpc2MtPnEucWxlbjsgbGVuID4gMDsgbGVuLS0pIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHFkaXNjLT5kZXF1ZXVlKHFkaXNjKTsKLQotCQlpZiAoc2tiKQotCQkJX19za2JfcXVldWVfdGFpbCgmbGlzdCwgc2tiKTsKLQl9Ci0Jc3Bpbl91bmxvY2socm9vdF9sb2NrKTsKLQotCWZvciAobGVuID0gbGlzdC5xbGVuOyBsZW4gPiAwOyBsZW4tLSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19za2JfZGVxdWV1ZSgmbGlzdCk7Ci0JCXUxNiBuZXdfcXVldWU7Ci0KLQkJQlVHX09OKCFza2IpOwotCQluZXdfcXVldWUgPSBpZWVlODAyMTFfc2VsZWN0X3F1ZXVlKGxvY2FsLT5tZGV2LCBza2IpOwotCQlza2Jfc2V0X3F1ZXVlX21hcHBpbmcoc2tiLCBuZXdfcXVldWUpOwotCi0JCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobG9jYWwtPm1kZXYsIG5ld19xdWV1ZSk7Ci0KLQotCQlxZGlzYyA9IHJjdV9kZXJlZmVyZW5jZSh0eHEtPnFkaXNjKTsKLQkJcm9vdF9sb2NrID0gcWRpc2Nfcm9vdF9sb2NrKHFkaXNjKTsKLQotCQlzcGluX2xvY2socm9vdF9sb2NrKTsKLQkJcWRpc2NfZW5xdWV1ZV9yb290KHNrYiwgcWRpc2MpOwotCQlzcGluX3VubG9jayhyb290X2xvY2spOwotCX0KLQotb3V0X3VubG9jazoKLQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKLX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93bWUuaCBiL25ldC9tYWM4MDIxMS93bWUuaAppbmRleCBiYzYyZjI4Li43NTIwZDJlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd21lLmgKKysrIGIvbmV0L21hYzgwMjExL3dtZS5oCkBAIC0yMSwxMSArMjEsNSBAQAogZXh0ZXJuIGNvbnN0IGludCBpZWVlODAyXzFkX3RvX2FjWzhdOwogCiB1MTYgaWVlZTgwMjExX3NlbGVjdF9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBpZWVlODAyMTFfaHRfYWdnX3F1ZXVlX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgdTE2IHRpZCk7Ci12b2lkIGllZWU4MDIxMV9odF9hZ2dfcXVldWVfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgIHN0cnVjdCBzdGFfaW5mbyAqc3RhLCB1MTYgdGlkLAotCQkJCSAgIHU4IHJlcXVldWUpOwotdm9pZCBpZWVlODAyMTFfcmVxdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgaW50IHF1ZXVlKTsKIAogI2VuZGlmIC8qIF9XTUVfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dwYS5jIGIvbmV0L21hYzgwMjExL3dwYS5jCmluZGV4IDdhYTYzY2EuLjRmOGJmZWEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93cGEuYworKysgYi9uZXQvbWFjODAyMTEvd3BhLmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IDIwMDItMjAwNCwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xOSw2ICsyMCw3IEBACiAjaW5jbHVkZSAibWljaGFlbC5oIgogI2luY2x1ZGUgInRraXAuaCIKICNpbmNsdWRlICJhZXNfY2NtLmgiCisjaW5jbHVkZSAiYWVzX2NtYWMuaCIKICNpbmNsdWRlICJ3cGEuaCIKIAogaWVlZTgwMjExX3R4X3Jlc3VsdApAQCAtMTk0LDE5ICsxOTYsMTMgQEAKIGllZWU4MDIxMV9jcnlwdG9fdGtpcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7Ci0JaW50IGk7CiAKIAlpZWVlODAyMTFfdHhfc2V0X3Byb3RlY3RlZCh0eCk7CiAKLQlpZiAodGtpcF9lbmNyeXB0X3NrYih0eCwgc2tiKSA8IDApCi0JCXJldHVybiBUWF9EUk9QOwotCi0JaWYgKHR4LT5leHRyYV9mcmFnKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCB0eC0+bnVtX2V4dHJhX2ZyYWc7IGkrKykgewotCQkJaWYgKHRraXBfZW5jcnlwdF9za2IodHgsIHR4LT5leHRyYV9mcmFnW2ldKSkKLQkJCQlyZXR1cm4gVFhfRFJPUDsKLQkJfQotCX0KKwlkbyB7CisJCWlmICh0a2lwX2VuY3J5cHRfc2tiKHR4LCBza2IpIDwgMCkKKwkJCXJldHVybiBUWF9EUk9QOworCX0gd2hpbGUgKChza2IgPSBza2ItPm5leHQpKTsKIAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KQEAgLTI2Niw3ICsyNjIsNyBAQAogCQkJCWludCBlbmNyeXB0ZWQpCiB7CiAJX19sZTE2IG1hc2tfZmM7Ci0JaW50IGE0X2luY2x1ZGVkOworCWludCBhNF9pbmNsdWRlZCwgbWdtdDsKIAl1OCBxb3NfdGlkOwogCXU4ICpiXzAsICphYWQ7CiAJdTE2IGRhdGFfbGVuLCBsZW5fYTsKQEAgLTI3NywxMiArMjczLDE1IEBACiAJYWFkID0gc2NyYXRjaCArIDQgKiBBRVNfQkxPQ0tfTEVOOwogCiAJLyoKLQkgKiBNYXNrIEZDOiB6ZXJvIHN1YnR5cGUgYjQgYjUgYjYKKwkgKiBNYXNrIEZDOiB6ZXJvIHN1YnR5cGUgYjQgYjUgYjYgKGlmIG5vdCBtZ210KQogCSAqIFJldHJ5LCBQd3JNZ3QsIE1vcmVEYXRhOyBzZXQgUHJvdGVjdGVkCiAJICovCisJbWdtdCA9IGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJbWFza19mYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQltYXNrX2ZjICY9IH5jcHVfdG9fbGUxNigweDAwNzAgfCBJRUVFODAyMTFfRkNUTF9SRVRSWSB8CisJbWFza19mYyAmPSB+Y3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUkVUUlkgfAogCQkJCUlFRUU4MDIxMV9GQ1RMX1BNIHwgSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpOworCWlmICghbWdtdCkKKwkJbWFza19mYyAmPSB+Y3B1X3RvX2xlMTYoMHgwMDcwKTsKIAltYXNrX2ZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRCk7CiAKIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CkBAIC0zMDAsOCArMjk5LDEwIEBACiAKIAkvKiBGaXJzdCBibG9jaywgYl8wICovCiAJYl8wWzBdID0gMHg1OTsgLyogZmxhZ3M6IEFkYXRhOiAxLCBNOiAwMTEsIEw6IDAwMSAqLwotCS8qIE5vbmNlOiBRb1MgUHJpb3JpdHkgfCBBMiB8IFBOICovCi0JYl8wWzFdID0gcW9zX3RpZDsKKwkvKiBOb25jZTogTm9uY2UgRmxhZ3MgfCBBMiB8IFBOCisJICogTm9uY2UgRmxhZ3M6IFByaW9yaXR5IChiMC4uYjMpIHwgTWFuYWdlbWVudCAoYjQpIHwgUmVzZXJ2ZWQgKGI1Li5iNykKKwkgKi8KKwliXzBbMV0gPSBxb3NfdGlkIHwgKG1nbXQgPDwgNCk7CiAJbWVtY3B5KCZiXzBbMl0sIGhkci0+YWRkcjIsIEVUSF9BTEVOKTsKIAltZW1jcHkoJmJfMFs4XSwgcG4sIENDTVBfUE5fTEVOKTsKIAkvKiBsKG0pICovCkBAIC0zNjAsOSArMzYxLDE0IEBACiAJaW50IGhkcmxlbiwgbGVuLCB0YWlsOwogCXU4ICpwb3MsICpwbjsKIAlpbnQgaTsKKwlib29sIHNraXBfaHc7CisKKwlza2lwX2h3ID0gKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVCkgJiYKKwkJaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKTsKIAogCWlmICgodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgJiYKLQkgICAgISh0eC0+a2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSkgeworCSAgICAhKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpICYmCisJICAgICFza2lwX2h3KSB7CiAJCS8qIGh3YWNjZWwgLSB3aXRoIG5vIG5lZWQgZm9yIHByZWFsbG9jYXRlZCByb29tIGZvciBDQ01QCiAJCSAqIGhlYWRlciBvciBNSUMgZmllbGRzICovCiAJCWluZm8tPmNvbnRyb2wuaHdfa2V5ID0gJnR4LT5rZXktPmNvbmY7CkBAIC0zOTcsNyArNDAzLDcgQEAKIAogCWNjbXBfcG4yaGRyKHBvcywgcG4sIGtleS0+Y29uZi5rZXlpZHgpOwogCi0JaWYgKGtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgeworCWlmICgoa2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJiAhc2tpcF9odykgewogCQkvKiBod2FjY2VsIC0gd2l0aCBwcmVhbGxvY2F0ZWQgcm9vbSBmb3IgQ0NNUCBoZWFkZXIgKi8KIAkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKIAkJcmV0dXJuIDA7CkBAIC00MTYsMTkgKzQyMiwxMyBAQAogaWVlZTgwMjExX2NyeXB0b19jY21wX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdHgtPnNrYjsKLQlpbnQgaTsKIAogCWllZWU4MDIxMV90eF9zZXRfcHJvdGVjdGVkKHR4KTsKIAotCWlmIChjY21wX2VuY3J5cHRfc2tiKHR4LCBza2IpIDwgMCkKLQkJcmV0dXJuIFRYX0RST1A7Ci0KLQlpZiAodHgtPmV4dHJhX2ZyYWcpIHsKLQkJZm9yIChpID0gMDsgaSA8IHR4LT5udW1fZXh0cmFfZnJhZzsgaSsrKSB7Ci0JCQlpZiAoY2NtcF9lbmNyeXB0X3NrYih0eCwgdHgtPmV4dHJhX2ZyYWdbaV0pKQotCQkJCXJldHVybiBUWF9EUk9QOwotCQl9Ci0JfQorCWRvIHsKKwkJaWYgKGNjbXBfZW5jcnlwdF9za2IodHgsIHNrYikgPCAwKQorCQkJcmV0dXJuIFRYX0RST1A7CisJfSB3aGlsZSAoKHNrYiA9IHNrYi0+bmV4dCkpOwogCiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQpAQCAtNDQ2LDcgKzQ0Niw4IEBACiAKIAloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAKLQlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpCisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJICAgICFpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoaGRyKSkKIAkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJZGF0YV9sZW4gPSBza2ItPmxlbiAtIGhkcmxlbiAtIENDTVBfSERSX0xFTiAtIENDTVBfTUlDX0xFTjsKQEAgLTQ4NSwzICs0ODYsMTI2IEBACiAKIAlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CisKKworc3RhdGljIHZvaWQgYmlwX2FhZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqYWFkKQoreworCS8qIEJJUCBBQUQ6IEZDKG1hc2tlZCkgfHwgQTEgfHwgQTIgfHwgQTMgKi8KKworCS8qIEZDIHR5cGUvc3VidHlwZSAqLworCWFhZFswXSA9IHNrYi0+ZGF0YVswXTsKKwkvKiBNYXNrIEZDIFJldHJ5LCBQd3JNZ3QsIE1vcmVEYXRhIGZsYWdzIHRvIHplcm8gKi8KKwlhYWRbMV0gPSBza2ItPmRhdGFbMV0gJiB+KEJJVCg0KSB8IEJJVCg1KSB8IEJJVCg2KSk7CisJLyogQTEgfHwgQTIgfHwgQTMgKi8KKwltZW1jcHkoYWFkICsgMiwgc2tiLT5kYXRhICsgNCwgMyAqIEVUSF9BTEVOKTsKK30KKworCitzdGF0aWMgaW5saW5lIHZvaWQgYmlwX2lwbl9zd2FwKHU4ICpkLCBjb25zdCB1OCAqcykKK3sKKwkqZCsrID0gc1s1XTsKKwkqZCsrID0gc1s0XTsKKwkqZCsrID0gc1szXTsKKwkqZCsrID0gc1syXTsKKwkqZCsrID0gc1sxXTsKKwkqZCA9IHNbMF07Cit9CisKKworaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkgPSB0eC0+a2V5OworCXN0cnVjdCBpZWVlODAyMTFfbW1pZSAqbW1pZTsKKwl1OCAqcG4sIGFhZFsyMF07CisJaW50IGk7CisKKwlpZiAodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgeworCQkvKiBod2FjY2VsICovCisJCWluZm8tPmNvbnRyb2wuaHdfa2V5ID0gJnR4LT5rZXktPmNvbmY7CisJCXJldHVybiAwOworCX0KKworCWlmIChXQVJOX09OKHNrYl90YWlscm9vbShza2IpIDwgc2l6ZW9mKCptbWllKSkpCisJCXJldHVybiBUWF9EUk9QOworCisJbW1pZSA9IChzdHJ1Y3QgaWVlZTgwMjExX21taWUgKikgc2tiX3B1dChza2IsIHNpemVvZigqbW1pZSkpOworCW1taWUtPmVsZW1lbnRfaWQgPSBXTEFOX0VJRF9NTUlFOworCW1taWUtPmxlbmd0aCA9IHNpemVvZigqbW1pZSkgLSAyOworCW1taWUtPmtleV9pZCA9IGNwdV90b19sZTE2KGtleS0+Y29uZi5rZXlpZHgpOworCisJLyogUE4gPSBQTiArIDEgKi8KKwlwbiA9IGtleS0+dS5hZXNfY21hYy50eF9wbjsKKworCWZvciAoaSA9IHNpemVvZihrZXktPnUuYWVzX2NtYWMudHhfcG4pIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJcG5baV0rKzsKKwkJaWYgKHBuW2ldKQorCQkJYnJlYWs7CisJfQorCWJpcF9pcG5fc3dhcChtbWllLT5zZXF1ZW5jZV9udW1iZXIsIHBuKTsKKworCWJpcF9hYWQoc2tiLCBhYWQpOworCisJLyoKKwkgKiBNSUMgPSBBRVMtMTI4LUNNQUMoSUdUSywgQUFEIHx8IE1hbmFnZW1lbnQgRnJhbWUgQm9keSB8fCBNTUlFLCA2NCkKKwkgKi8KKwlpZWVlODAyMTFfYWVzX2NtYWMoa2V5LT51LmFlc19jbWFjLnRmbSwga2V5LT51LmFlc19jbWFjLnR4X2NyeXB0b19idWYsCisJCQkgICBhYWQsIHNrYi0+ZGF0YSArIDI0LCBza2ItPmxlbiAtIDI0LCBtbWllLT5taWMpOworCisJcmV0dXJuIFRYX0NPTlRJTlVFOworfQorCisKK2llZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSByeC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkgPSByeC0+a2V5OworCXN0cnVjdCBpZWVlODAyMTFfbW1pZSAqbW1pZTsKKwl1OCBhYWRbMjBdLCBtaWNbOF0sIGlwbls2XTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsKKworCWlmICghaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJaWYgKChyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19ERUNSWVBURUQpICYmCisJICAgIChyeC0+c3RhdHVzLT5mbGFnICYgUlhfRkxBR19JVl9TVFJJUFBFRCkpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWlmIChza2ItPmxlbiA8IDI0ICsgc2l6ZW9mKCptbWllKSkKKwkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CisKKwltbWllID0gKHN0cnVjdCBpZWVlODAyMTFfbW1pZSAqKQorCQkoc2tiLT5kYXRhICsgc2tiLT5sZW4gLSBzaXplb2YoKm1taWUpKTsKKwlpZiAobW1pZS0+ZWxlbWVudF9pZCAhPSBXTEFOX0VJRF9NTUlFIHx8CisJICAgIG1taWUtPmxlbmd0aCAhPSBzaXplb2YoKm1taWUpIC0gMikKKwkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7IC8qIEludmFsaWQgTU1JRSAqLworCisJYmlwX2lwbl9zd2FwKGlwbiwgbW1pZS0+c2VxdWVuY2VfbnVtYmVyKTsKKworCWlmIChtZW1jbXAoaXBuLCBrZXktPnUuYWVzX2NtYWMucnhfcG4sIDYpIDw9IDApIHsKKwkJa2V5LT51LmFlc19jbWFjLnJlcGxheXMrKzsKKwkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CisJfQorCisJaWYgKCEocngtPnN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSkgeworCQkvKiBoYXJkd2FyZSBkaWRuJ3QgZGVjcnlwdC92ZXJpZnkgTUlDICovCisJCWJpcF9hYWQoc2tiLCBhYWQpOworCQlpZWVlODAyMTFfYWVzX2NtYWMoa2V5LT51LmFlc19jbWFjLnRmbSwKKwkJCQkgICBrZXktPnUuYWVzX2NtYWMucnhfY3J5cHRvX2J1ZiwgYWFkLAorCQkJCSAgIHNrYi0+ZGF0YSArIDI0LCBza2ItPmxlbiAtIDI0LCBtaWMpOworCQlpZiAobWVtY21wKG1pYywgbW1pZS0+bWljLCBzaXplb2YobW1pZS0+bWljKSkgIT0gMCkgeworCQkJa2V5LT51LmFlc19jbWFjLmljdmVycm9ycysrOworCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CisJCX0KKwl9CisKKwltZW1jcHkoa2V5LT51LmFlc19jbWFjLnJ4X3BuLCBpcG4sIDYpOworCisJLyogUmVtb3ZlIE1NSUUgKi8KKwlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gc2l6ZW9mKCptbWllKSk7CisKKwlyZXR1cm4gUlhfQ09OVElOVUU7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd3BhLmggYi9uZXQvbWFjODAyMTEvd3BhLmgKaW5kZXggZDQyZDIyMS4uYmFiYTA2MCAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3dwYS5oCisrKyBiL25ldC9tYWM4MDIxMS93cGEuaApAQCAtMjgsNCArMjgsOSBAQAogaWVlZTgwMjExX3J4X3Jlc3VsdAogaWVlZTgwMjExX2NyeXB0b19jY21wX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCk7CiAKK2llZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KTsKK2llZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KTsKKwogI2VuZGlmIC8qIFdQQV9IICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL0tjb25maWcgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKaW5kZXggYzJiYWM5Yy4uMmM5NjdlNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvS2NvbmZpZwpAQCAtMzU3LDYgKzM1Nyw0NSBAQAogCiAJICBUbyBjb21waWxlIGl0IGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfSEwKKwl0cmlzdGF0ZSAnIkhMIiBob3BsaW1pdCB0YXJnZXQgc3VwcG9ydCcKKwlkZXBlbmRzIG9uIElQX05GX01BTkdMRSB8fCBJUDZfTkZfTUFOR0xFCisJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKKwktLS1oZWxwLS0tCisJVGhpcyBvcHRpb24gYWRkcyB0aGUgIkhMIiAoZm9yIElQdjYpIGFuZCAiVFRMIiAoZm9yIElQdjQpCisJdGFyZ2V0cywgd2hpY2ggZW5hYmxlIHRoZSB1c2VyIHRvIGNoYW5nZSB0aGUKKwlob3BsaW1pdC90aW1lLXRvLWxpdmUgdmFsdWUgb2YgdGhlIElQIGhlYWRlci4KKworCVdoaWxlIGl0IGlzIHNhZmUgdG8gZGVjcmVtZW50IHRoZSBob3BsaW1pdC9UVEwgdmFsdWUsIHRoZQorCW1vZHVsZXMgYWxzbyBhbGxvdyB0byBpbmNyZW1lbnQgYW5kIHNldCB0aGUgaG9wbGltaXQgdmFsdWUgb2YKKwl0aGUgaGVhZGVyIHRvIGFyYml0cmFyeSB2YWx1ZXMuIFRoaXMgaXMgRVhUUkVNRUxZIERBTkdFUk9VUworCXNpbmNlIHlvdSBjYW4gZWFzaWx5IGNyZWF0ZSBpbW1vcnRhbCBwYWNrZXRzIHRoYXQgbG9vcAorCWZvcmV2ZXIgb24gdGhlIG5ldHdvcmsuCisKK2NvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0xFRAorCXRyaXN0YXRlICciTEVEIiB0YXJnZXQgc3VwcG9ydCcKKwlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgTEVEX1RSSUdHRVJTCisJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGEgYExFRCcgdGFyZ2V0LCB3aGljaCBhbGxvd3MgeW91IHRvIGJsaW5rIExFRHMgaW4KKwkgIHJlc3BvbnNlIHRvIHBhcnRpY3VsYXIgcGFja2V0cyBwYXNzaW5nIHRocm91Z2ggeW91ciBtYWNoaW5lLgorCisJICBUaGlzIGNhbiBiZSB1c2VkIHRvIHR1cm4gYSBzcGFyZSBMRUQgaW50byBhIG5ldHdvcmsgYWN0aXZpdHkgTEVELAorCSAgd2hpY2ggb25seSBmbGFzaGVzIGluIHJlc3BvbnNlIHRvIEZUUCB0cmFuc2ZlcnMsIGZvciBleGFtcGxlLiAgT3IKKwkgIHlvdSBjb3VsZCBoYXZlIGFuIExFRCB3aGljaCBsaWdodHMgdXAgZm9yIGEgbWludXRlIG9yIHR3byBldmVyeSB0aW1lCisJICBzb21lYm9keSBjb25uZWN0cyB0byB5b3VyIG1hY2hpbmUgdmlhIFNTSC4KKworCSAgWW91IHdpbGwgbmVlZCBzdXBwb3J0IGZvciB0aGUgImxlZCIgY2xhc3MgdG8gbWFrZSB0aGlzIHdvcmsuCisKKwkgIFRvIGNyZWF0ZSBhbiBMRUQgdHJpZ2dlciBmb3IgaW5jb21pbmcgU1NIIHRyYWZmaWM6CisJICAgIGlwdGFibGVzIC1BIElOUFVUIC1wIHRjcCAtLWRwb3J0IDIyIC1qIExFRCAtLWxlZC10cmlnZ2VyLWlkIHNzaCAtLWxlZC1kZWxheSAxMDAwCisKKwkgIFRoZW4gYXR0YWNoIHRoZSBuZXcgdHJpZ2dlciB0byBhbiBMRUQgb24geW91ciBzeXN0ZW06CisJICAgIGVjaG8gbmV0ZmlsdGVyLXNzaCA+IC9zeXMvY2xhc3MvbGVkcy88bGVkbmFtZT4vdHJpZ2dlcgorCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgTEVEcyBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0sIHNlZQorCSAgRG9jdW1lbnRhdGlvbi9sZWRzLWNsYXNzLnR4dAorCiBjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLCiAJdHJpc3RhdGUgJyJNQVJLIiB0YXJnZXQgc3VwcG9ydCcKIAlkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW4KQEAgLTQ4OCw2ICs1MjcsMjIgQEAKIAkgIFRoaXMgb3B0aW9uIGFkZHMgYSAiVENQT1BUU1RSSVAiIHRhcmdldCwgd2hpY2ggYWxsb3dzIHlvdSB0byBzdHJpcAogCSAgVENQIG9wdGlvbnMgZnJvbSBUQ1AgcGFja2V0cy4KIAorY29uZmlnIE5FVEZJTFRFUl9YVF9NQVRDSF9DTFVTVEVSCisJdHJpc3RhdGUgJyJjbHVzdGVyIiBtYXRjaCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkZfQ09OTlRSQUNLCisJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGJ1aWxkIHdvcmstbG9hZC1zaGFyaW5nIGNsdXN0ZXJzIG9mCisJICBuZXR3b3JrIHNlcnZlcnMvc3RhdGVmdWwgZmlyZXdhbGxzIHdpdGhvdXQgaGF2aW5nIGEgZGVkaWNhdGVkCisJICBsb2FkLWJhbGFuY2luZyByb3V0ZXIvc2VydmVyL3N3aXRjaC4gQmFzaWNhbGx5LCB0aGlzIG1hdGNoIHJldHVybnMKKwkgIHRydWUgd2hlbiB0aGUgcGFja2V0IG11c3QgYmUgaGFuZGxlZCBieSB0aGlzIGNsdXN0ZXIgbm9kZS4gVGh1cywKKwkgIGFsbCBub2RlcyBzZWUgYWxsIHBhY2tldHMgYW5kIHRoaXMgbWF0Y2ggZGVjaWRlcyB3aGljaCBub2RlIGhhbmRsZXMKKwkgIHdoYXQgcGFja2V0cy4gVGhlIHdvcmstbG9hZCBzaGFyaW5nIGFsZ29yaXRobSBpcyBiYXNlZCBvbiBzb3VyY2UKKwkgIGFkZHJlc3MgaGFzaGluZy4KKworCSAgSWYgeW91IHNheSBZIG9yIE0gaGVyZSwgdHJ5IGBpcHRhYmxlcyAtbSBjbHVzdGVyIC0taGVscGAgZm9yCisJICBtb3JlIGluZm9ybWF0aW9uLgorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQKIAl0cmlzdGF0ZSAgJyJjb21tZW50IiBtYXRjaCBzdXBwb3J0JwogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECkBAIC02MDUsNiArNjYwLDE0IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBZLgogCitjb25maWcgTkVURklMVEVSX1hUX01BVENIX0hMCisJdHJpc3RhdGUgJyJobCIgaG9wbGltaXQvVFRMIG1hdGNoIHN1cHBvcnQnCisJZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRUQKKwktLS1oZWxwLS0tCisJSEwgbWF0Y2hpbmcgYWxsb3dzIHlvdSB0byBtYXRjaCBwYWNrZXRzIGJhc2VkIG9uIHRoZSBob3BsaW1pdAorCWluIHRoZSBJUHY2IGhlYWRlciwgb3IgdGhlIHRpbWUtdG8tbGl2ZSBmaWVsZCBpbiB0aGUgSVB2NAorCWhlYWRlciBvZiB0aGUgcGFja2V0LgorCiBjb25maWcgTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UKIAl0cmlzdGF0ZSAnImlwcmFuZ2UiIGFkZHJlc3MgcmFuZ2UgbWF0Y2ggc3VwcG9ydCcKIAlkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZSBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKaW5kZXggZGEzZDkwOS4uNjI4MjA2MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9NYWtlZmlsZQorKysgYi9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCkBAIC00NSw2ICs0NSw4IEBACiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSykgKz0geHRfQ09OTk1BUksubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUkspICs9IHh0X0NPTk5TRUNNQVJLLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1ApICs9IHh0X0RTQ1Aubworb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEwpICs9IHh0X0hMLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0xFRCkgKz0geHRfTEVELm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUkspICs9IHh0X01BUksubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cpICs9IHh0X05GTE9HLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05GUVVFVUUpICs9IHh0X05GUVVFVUUubwpAQCAtNTcsNiArNTksNyBAQAogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UpICs9IHh0X1RSQUNFLm8KIAogIyBtYXRjaGVzCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NMVVNURVIpICs9IHh0X2NsdXN0ZXIubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UKSArPSB4dF9jb21tZW50Lm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTKSArPSB4dF9jb25uYnl0ZXMubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTElNSVQpICs9IHh0X2Nvbm5saW1pdC5vCkBAIC02Nyw2ICs3MCw3IEBACiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCkgKz0geHRfZXNwLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUKSArPSB4dF9oYXNobGltaXQubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVIpICs9IHh0X2hlbHBlci5vCitvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMKSArPSB4dF9obC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0lQUkFOR0UpICs9IHh0X2lwcmFuZ2Uubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEgpICs9IHh0X2xlbmd0aC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUKSArPSB4dF9saW1pdC5vCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IGE5MGFjODMuLjViYjM0NzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0xNzQsNyArMTc0LDYgQEAKIAkJCSAgICAgb3V0ZGV2LCAmZWxlbSwgb2tmbiwgaG9va190aHJlc2gpOwogCWlmICh2ZXJkaWN0ID09IE5GX0FDQ0VQVCB8fCB2ZXJkaWN0ID09IE5GX1NUT1ApIHsKIAkJcmV0ID0gMTsKLQkJZ290byB1bmxvY2s7CiAJfSBlbHNlIGlmICh2ZXJkaWN0ID09IE5GX0RST1ApIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldCA9IC1FUEVSTTsKQEAgLTE4Myw3ICsxODIsNiBAQAogCQkJICAgICAgdmVyZGljdCA+PiBORl9WRVJESUNUX0JJVFMpKQogCQkJZ290byBuZXh0X2hvb2s7CiAJfQotdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwppbmRleCA2YmU1ZDRlLi41YzQ4Mzc4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKQEAgLTE0OSw4ICsxNDksOCBAQAogLyogbXVsdGljYXN0IGFkZHIgKi8KIHN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW4gbWNhc3RfYWRkciA9IHsKIAkuc2luX2ZhbWlseQkJPSBBRl9JTkVULAotCS5zaW5fcG9ydAkJPSBfX2NvbnN0YW50X2h0b25zKElQX1ZTX1NZTkNfUE9SVCksCi0JLnNpbl9hZGRyLnNfYWRkcgk9IF9fY29uc3RhbnRfaHRvbmwoSVBfVlNfU1lOQ19HUk9VUCksCisJLnNpbl9wb3J0CQk9IGNwdV90b19iZTE2KElQX1ZTX1NZTkNfUE9SVCksCisJLnNpbl9hZGRyLnNfYWRkcgk9IGNwdV90b19iZTMyKElQX1ZTX1NZTkNfR1JPVVApLAogfTsKIAogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hbWFuZGEuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCmluZGV4IDRmOGZjZjQuLjA3ZDlkODggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2FtYW5kYS5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLmhlbHAJCQk9IGFtYW5kYV9oZWxwLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucygxMDA4MCksCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KDEwMDgwKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmYW1hbmRhX2V4cF9wb2xpY3ksCiAJfSwKQEAgLTE4Niw3ICsxODYsNyBAQAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkuaGVscAkJCT0gYW1hbmRhX2hlbHAsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVUNiwKLQkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucygxMDA4MCksCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KDEwMDgwKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmYW1hbmRhX2V4cF9wb2xpY3ksCiAJfSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCA5MGNlOWRkLi44MDIwZGI2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0X251bGxzLmg+CiAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG8uaD4KQEAgLTU0LDcgKzU1LDcgQEAKIHVuc2lnbmVkIGludCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemUgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19odGFibGVfc2l6ZSk7CiAKLWludCBuZl9jb25udHJhY2tfbWF4IF9fcmVhZF9tb3N0bHk7Cit1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX21heCBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfY29ubnRyYWNrX21heCk7CiAKIHN0cnVjdCBuZl9jb25uIG5mX2Nvbm50cmFja191bnRyYWNrZWQgX19yZWFkX21vc3RseTsKQEAgLTE2Myw4ICsxNjQsOCBAQAogY2xlYW5fZnJvbV9saXN0cyhzdHJ1Y3QgbmZfY29ubiAqY3QpCiB7CiAJcHJfZGVidWcoImNsZWFuX2Zyb21fbGlzdHMoJXApXG4iLCBjdCk7Ci0JaGxpc3RfZGVsX3JjdSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhub2RlKTsKLQlobGlzdF9kZWxfcmN1KCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0uaG5vZGUpOworCWhsaXN0X251bGxzX2RlbF9yY3UoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm5vZGUpOworCWhsaXN0X251bGxzX2RlbF9yY3UoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS5obm5vZGUpOwogCiAJLyogRGVzdHJveSBhbGwgcGVuZGluZyBleHBlY3RhdGlvbnMgKi8KIAluZl9jdF9yZW1vdmVfZXhwZWN0YXRpb25zKGN0KTsKQEAgLTIwNCw4ICsyMDUsOCBAQAogCiAJLyogV2Ugb3ZlcmxvYWQgZmlyc3QgdHVwbGUgdG8gbGluayBpbnRvIHVuY29uZmlybWVkIGxpc3QuICovCiAJaWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKSB7Ci0JCUJVR19PTihobGlzdF91bmhhc2hlZCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhub2RlKSk7Ci0JCWhsaXN0X2RlbCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhub2RlKTsKKwkJQlVHX09OKGhsaXN0X251bGxzX3VuaGFzaGVkKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5ub2RlKSk7CisJCWhsaXN0X251bGxzX2RlbF9yY3UoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm5vZGUpOwogCX0KIAogCU5GX0NUX1NUQVRfSU5DKG5ldCwgZGVsZXRlKTsKQEAgLTI0MiwxOCArMjQzLDI2IEBACiAJbmZfY3RfcHV0KGN0KTsKIH0KIAorLyoKKyAqIFdhcm5pbmcgOgorICogLSBDYWxsZXIgbXVzdCB0YWtlIGEgcmVmZXJlbmNlIG9uIHJldHVybmVkIG9iamVjdAorICogICBhbmQgcmVjaGVjayBuZl9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmgtPnR1cGxlKQorICogT1IKKyAqIC0gQ2FsbGVyIG11c3QgbG9jayBuZl9jb25udHJhY2tfbG9jayBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgKi8KIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCiBfX25mX2Nvbm50cmFja19maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sodHVwbGUpOwogCiAJLyogRGlzYWJsZSBCSHMgdGhlIGVudGlyZSB0aW1lIHNpbmNlIHdlIG5vcm1hbGx5IG5lZWQgdG8gZGlzYWJsZSB0aGVtCiAJICogYXQgbGVhc3Qgb25jZSBmb3IgdGhlIHN0YXRzIGFueXdheS4KIAkgKi8KIAlsb2NhbF9iaF9kaXNhYmxlKCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZuZXQtPmN0Lmhhc2hbaGFzaF0sIGhub2RlKSB7CitiZWdpbjoKKwlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UoaCwgbiwgJm5ldC0+Y3QuaGFzaFtoYXNoXSwgaG5ub2RlKSB7CiAJCWlmIChuZl9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmgtPnR1cGxlKSkgewogCQkJTkZfQ1RfU1RBVF9JTkMobmV0LCBmb3VuZCk7CiAJCQlsb2NhbF9iaF9lbmFibGUoKTsKQEAgLTI2MSw2ICsyNzAsMTMgQEAKIAkJfQogCQlORl9DVF9TVEFUX0lOQyhuZXQsIHNlYXJjaGVkKTsKIAl9CisJLyoKKwkgKiBpZiB0aGUgbnVsbHMgdmFsdWUgd2UgZ290IGF0IHRoZSBlbmQgb2YgdGhpcyBsb29rdXAgaXMKKwkgKiBub3QgdGhlIGV4cGVjdGVkIG9uZSwgd2UgbXVzdCByZXN0YXJ0IGxvb2t1cC4KKwkgKiBXZSBwcm9iYWJseSBtZXQgYW4gaXRlbSB0aGF0IHdhcyBtb3ZlZCB0byBhbm90aGVyIGNoYWluLgorCSAqLworCWlmIChnZXRfbnVsbHNfdmFsdWUobikgIT0gaGFzaCkKKwkJZ290byBiZWdpbjsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIAogCXJldHVybiBOVUxMOwpAQCAtMjc1LDExICsyOTEsMTggQEAKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CitiZWdpbjoKIAloID0gX19uZl9jb25udHJhY2tfZmluZChuZXQsIHR1cGxlKTsKIAlpZiAoaCkgewogCQljdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CiAJCWlmICh1bmxpa2VseSghYXRvbWljX2luY19ub3RfemVybygmY3QtPmN0X2dlbmVyYWwudXNlKSkpCiAJCQloID0gTlVMTDsKKwkJZWxzZSB7CisJCQlpZiAodW5saWtlbHkoIW5mX2N0X3R1cGxlX2VxdWFsKHR1cGxlLCAmaC0+dHVwbGUpKSkgeworCQkJCW5mX2N0X3B1dChjdCk7CisJCQkJZ290byBiZWdpbjsKKwkJCX0KKwkJfQogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIApAQCAtMjkzLDkgKzMxNiw5IEBACiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKIAotCWhsaXN0X2FkZF9oZWFkX3JjdSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhub2RlLAorCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLmhubm9kZSwKIAkJCSAgICZuZXQtPmN0Lmhhc2hbaGFzaF0pOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLmhub2RlLAorCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLmhubm9kZSwKIAkJCSAgICZuZXQtPmN0Lmhhc2hbcmVwbF9oYXNoXSk7CiB9CiAKQEAgLTMxOCw3ICszNDEsNyBAQAogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKQEAgLTM1MCwxNyArMzczLDE3IEBACiAJLyogU2VlIGlmIHRoZXJlJ3Mgb25lIGluIHRoZSBsaXN0IGFscmVhZHksIGluY2x1ZGluZyByZXZlcnNlOgogCSAgIE5BVCBjb3VsZCBoYXZlIGdyYWJiZWQgaXQgd2l0aG91dCByZWFsaXppbmcsIHNpbmNlIHdlJ3JlCiAJICAgbm90IGluIHRoZSBoYXNoLiAgSWYgdGhlcmUgaXMsIHdlIGxvc3QgcmFjZS4gKi8KLQlobGlzdF9mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLCBobm9kZSkKKwlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLCBobm5vZGUpCiAJCWlmIChuZl9jdF90dXBsZV9lcXVhbCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfT1JJR0lOQUxdLnR1cGxlLAogCQkJCSAgICAgICZoLT50dXBsZSkpCiAJCQlnb3RvIG91dDsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC5oYXNoW3JlcGxfaGFzaF0sIGhub2RlKQorCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0Lmhhc2hbcmVwbF9oYXNoXSwgaG5ub2RlKQogCQlpZiAobmZfY3RfdHVwbGVfZXF1YWwoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSwKIAkJCQkgICAgICAmaC0+dHVwbGUpKQogCQkJZ290byBvdXQ7CiAKIAkvKiBSZW1vdmUgZnJvbSB1bmNvbmZpcm1lZCBsaXN0ICovCi0JaGxpc3RfZGVsKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0uaG5vZGUpOworCWhsaXN0X251bGxzX2RlbF9yY3UoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm5vZGUpOwogCiAJX19uZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoY3QsIGhhc2gsIHJlcGxfaGFzaCk7CiAJLyogVGltZXIgcmVsYXRpdmUgdG8gY29uZmlybWF0aW9uIHRpbWUsIG5vdCBvcmlnaW5hbApAQCAtMzk5LDE0ICs0MjIsMTQgQEAKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoaWdub3JlZF9jb25udHJhY2spOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKHR1cGxlKTsKIAogCS8qIERpc2FibGUgQkhzIHRoZSBlbnRpcmUgdGltZSBzaW5jZSB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlbSBhdAogCSAqIGxlYXN0IG9uY2UgZm9yIHRoZSBzdGF0cyBhbnl3YXkuCiAJICovCiAJcmN1X3JlYWRfbG9ja19iaCgpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLCBobm9kZSkgeworCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLCBobm5vZGUpIHsKIAkJaWYgKG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCkgIT0gaWdub3JlZF9jb25udHJhY2sgJiYKIAkJICAgIG5mX2N0X3R1cGxlX2VxdWFsKHR1cGxlLCAmaC0+dHVwbGUpKSB7CiAJCQlORl9DVF9TVEFUX0lOQyhuZXQsIGZvdW5kKTsKQEAgLTQzMCwxNCArNDUzLDE0IEBACiAJLyogVXNlIG9sZGVzdCBlbnRyeSwgd2hpY2ggaXMgcm91Z2hseSBMUlUgKi8KIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IG5mX2Nvbm4gKmN0ID0gTlVMTCwgKnRtcDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAl1bnNpZ25lZCBpbnQgaSwgY250ID0gMDsKIAlpbnQgZHJvcHBlZCA9IDA7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSA8IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsgaSsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2hhc2hdLAotCQkJCQkgaG5vZGUpIHsKKwkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZuZXQtPmN0Lmhhc2hbaGFzaF0sCisJCQkJCSBobm5vZGUpIHsKIAkJCXRtcCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CiAJCQlpZiAoIXRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJnRtcC0+c3RhdHVzKSkKIAkJCQljdCA9IHRtcDsKQEAgLTQ3Miw3ICs0OTUsOCBAQAogCXN0cnVjdCBuZl9jb25uICpjdDsKIAogCWlmICh1bmxpa2VseSghbmZfY29ubnRyYWNrX2hhc2hfcm5kX2luaXR0ZWQpKSB7Ci0JCWdldF9yYW5kb21fYnl0ZXMoJm5mX2Nvbm50cmFja19oYXNoX3JuZCwgNCk7CisJCWdldF9yYW5kb21fYnl0ZXMoJm5mX2Nvbm50cmFja19oYXNoX3JuZCwKKwkJCQlzaXplb2YobmZfY29ubnRyYWNrX2hhc2hfcm5kKSk7CiAJCW5mX2Nvbm50cmFja19oYXNoX3JuZF9pbml0dGVkID0gMTsKIAl9CiAKQEAgLTUwNywyNiArNTMxLDE5IEBACiAjaWZkZWYgQ09ORklHX05FVF9OUwogCWN0LT5jdF9uZXQgPSBuZXQ7CiAjZW5kaWYKLQlJTklUX1JDVV9IRUFEKCZjdC0+cmN1KTsKIAogCXJldHVybiBjdDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19hbGxvYyk7CiAKLXN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCi17Ci0Jc3RydWN0IG5mX2Nvbm4gKmN0ID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBuZl9jb25uLCByY3UpOwotCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7Ci0KLQluZl9jdF9leHRfZnJlZShjdCk7Ci0Ja21lbV9jYWNoZV9mcmVlKG5mX2Nvbm50cmFja19jYWNoZXAsIGN0KTsKLQlhdG9taWNfZGVjKCZuZXQtPmN0LmNvdW50KTsKLX0KLQogdm9pZCBuZl9jb25udHJhY2tfZnJlZShzdHJ1Y3QgbmZfY29ubiAqY3QpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKKwogCW5mX2N0X2V4dF9kZXN0cm95KGN0KTsKLQljYWxsX3JjdSgmY3QtPnJjdSwgbmZfY29ubnRyYWNrX2ZyZWVfcmN1KTsKKwlhdG9taWNfZGVjKCZuZXQtPmN0LmNvdW50KTsKKwluZl9jdF9leHRfZnJlZShjdCk7CisJa21lbV9jYWNoZV9mcmVlKG5mX2Nvbm50cmFja19jYWNoZXAsIGN0KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19mcmVlKTsKIApAQCAtNTkyLDcgKzYwOSw3IEBACiAJfQogCiAJLyogT3ZlcmxvYWQgdHVwbGUgbGlua2VkIGxpc3QgdG8gcHV0IHVzIGluIHVuY29uZmlybWVkIGxpc3QuICovCi0JaGxpc3RfYWRkX2hlYWQoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm9kZSwKKwlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS5obm5vZGUsCiAJCSAgICAgICAmbmV0LT5jdC51bmNvbmZpcm1lZCk7CiAKIAlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwpAQCAtNzI2LDEzICs3NDMsMTUgQEAKIAlORl9DVF9BU1NFUlQoc2tiLT5uZmN0KTsKIAogCXJldCA9IGw0cHJvdG8tPnBhY2tldChjdCwgc2tiLCBkYXRhb2ZmLCBjdGluZm8sIHBmLCBob29rbnVtKTsKLQlpZiAocmV0IDwgMCkgeworCWlmIChyZXQgPD0gMCkgewogCQkvKiBJbnZhbGlkOiBpbnZlcnNlIG9mIHRoZSByZXR1cm4gY29kZSB0ZWxscwogCQkgKiB0aGUgbmV0ZmlsdGVyIGNvcmUgd2hhdCB0byBkbyAqLwogCQlwcl9kZWJ1ZygibmZfY29ubnRyYWNrX2luOiBDYW4ndCB0cmFjayB3aXRoIHByb3RvIG1vZHVsZVxuIik7CiAJCW5mX2Nvbm50cmFja19wdXQoc2tiLT5uZmN0KTsKIAkJc2tiLT5uZmN0ID0gTlVMTDsKIAkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgaW52YWxpZCk7CisJCWlmIChyZXQgPT0gLU5GX0RST1ApCisJCQlORl9DVF9TVEFUX0lOQ19BVE9NSUMobmV0LCBkcm9wKTsKIAkJcmV0dXJuIC1yZXQ7CiAJfQogCkBAIC05MDIsNiArOTIxLDEyIEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSk7CisKK2ludCBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV9wb2xpY3lfbGVuKG5mX2N0X3BvcnRfbmxhX3BvbGljeSwgQ1RBX1BST1RPX01BWCArIDEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfcG9ydF9ubGF0dHJfdHVwbGVfc2l6ZSk7CiAjZW5kaWYKIAogLyogVXNlZCBieSBpcHRfUkVKRUNUIGFuZCBpcDZ0X1JFSkVDVC4gKi8KQEAgLTkzMCwxNyArOTU1LDE3IEBACiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBuZl9jb25uICpjdDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAogCXNwaW5fbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwogCWZvciAoOyAqYnVja2V0IDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOyAoKmJ1Y2tldCkrKykgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC5oYXNoWypidWNrZXRdLCBobm9kZSkgeworCQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShoLCBuLCAmbmV0LT5jdC5oYXNoWypidWNrZXRdLCBobm5vZGUpIHsKIAkJCWN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAkJCWlmIChpdGVyKGN0LCBkYXRhKSkKIAkJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0LnVuY29uZmlybWVkLCBobm9kZSkgeworCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0LnVuY29uZmlybWVkLCBobm5vZGUpIHsKIAkJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwogCQlpZiAoaXRlcihjdCwgZGF0YSkpCiAJCQlzZXRfYml0KElQU19EWUlOR19CSVQsICZjdC0+c3RhdHVzKTsKQEAgLTk4OCw3ICsxMDEzLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotdm9pZCBuZl9jdF9mcmVlX2hhc2h0YWJsZShzdHJ1Y3QgaGxpc3RfaGVhZCAqaGFzaCwgaW50IHZtYWxsb2NlZCwgdW5zaWduZWQgaW50IHNpemUpCit2b2lkIG5mX2N0X2ZyZWVfaGFzaHRhYmxlKHZvaWQgKmhhc2gsIGludCB2bWFsbG9jZWQsIHVuc2lnbmVkIGludCBzaXplKQogewogCWlmICh2bWFsbG9jZWQpCiAJCXZmcmVlKGhhc2gpOwpAQCAtMTA1NiwyNiArMTA4MSwyOCBAQAogCX0KIH0KIAotc3RydWN0IGhsaXN0X2hlYWQgKm5mX2N0X2FsbG9jX2hhc2h0YWJsZSh1bnNpZ25lZCBpbnQgKnNpemVwLCBpbnQgKnZtYWxsb2NlZCkKK3ZvaWQgKm5mX2N0X2FsbG9jX2hhc2h0YWJsZSh1bnNpZ25lZCBpbnQgKnNpemVwLCBpbnQgKnZtYWxsb2NlZCwgaW50IG51bGxzKQogewotCXN0cnVjdCBobGlzdF9oZWFkICpoYXNoOwotCXVuc2lnbmVkIGludCBzaXplLCBpOworCXN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoYXNoOworCXVuc2lnbmVkIGludCBucl9zbG90cywgaTsKKwlzaXplX3Qgc3o7CiAKIAkqdm1hbGxvY2VkID0gMDsKIAotCXNpemUgPSAqc2l6ZXAgPSByb3VuZHVwKCpzaXplcCwgUEFHRV9TSVpFIC8gc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSk7Ci0JaGFzaCA9ICh2b2lkKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUx8X19HRlBfTk9XQVJOLAotCQkJCSAgICAgICBnZXRfb3JkZXIoc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKQotCQkJCQkJICogc2l6ZSkpOworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGhsaXN0X251bGxzX2hlYWQpICE9IHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkpOworCW5yX3Nsb3RzID0gKnNpemVwID0gcm91bmR1cCgqc2l6ZXAsIFBBR0VfU0laRSAvIHNpemVvZihzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCkpOworCXN6ID0gbnJfc2xvdHMgKiBzaXplb2Yoc3RydWN0IGhsaXN0X251bGxzX2hlYWQpOworCWhhc2ggPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8sCisJCQkJCWdldF9vcmRlcihzeikpOwogCWlmICghaGFzaCkgewogCQkqdm1hbGxvY2VkID0gMTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibmZfY29ubnRyYWNrOiBmYWxsaW5nIGJhY2sgdG8gdm1hbGxvYy5cbiIpOwotCQloYXNoID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpICogc2l6ZSk7CisJCWhhc2ggPSBfX3ZtYWxsb2Moc3osIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLCBQQUdFX0tFUk5FTCk7CiAJfQogCi0JaWYgKGhhc2gpCi0JCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCi0JCQlJTklUX0hMSVNUX0hFQUQoJmhhc2hbaV0pOworCWlmIChoYXNoICYmIG51bGxzKQorCQlmb3IgKGkgPSAwOyBpIDwgbnJfc2xvdHM7IGkrKykKKwkJCUlOSVRfSExJU1RfTlVMTFNfSEVBRCgmaGFzaFtpXSwgaSk7CiAKIAlyZXR1cm4gaGFzaDsKIH0KQEAgLTEwODYsNyArMTExMyw3IEBACiAJaW50IGksIGJ1Y2tldCwgdm1hbGxvY2VkLCBvbGRfdm1hbGxvY2VkOwogCXVuc2lnbmVkIGludCBoYXNoc2l6ZSwgb2xkX3NpemU7CiAJaW50IHJuZDsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGFzaCwgKm9sZF9oYXNoOworCXN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoYXNoLCAqb2xkX2hhc2g7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCiAJLyogT24gYm9vdCwgd2UgY2FuIHNldCB0aGlzIHdpdGhvdXQgYW55IGZhbmN5IGxvY2tpbmcuICovCkBAIC0xMDk3LDEzICsxMTI0LDEzIEBACiAJaWYgKCFoYXNoc2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQloYXNoID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZoYXNoc2l6ZSwgJnZtYWxsb2NlZCk7CisJaGFzaCA9IG5mX2N0X2FsbG9jX2hhc2h0YWJsZSgmaGFzaHNpemUsICZ2bWFsbG9jZWQsIDEpOwogCWlmICghaGFzaCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBXZSBoYXZlIHRvIHJlaGFocyBmb3IgdGhlIG5ldyB0YWJsZSBhbnl3YXksIHNvIHdlIGFsc28gY2FuCiAJICogdXNlIGEgbmV3cmFuZG9tIHNlZWQgKi8KLQlnZXRfcmFuZG9tX2J5dGVzKCZybmQsIDQpOworCWdldF9yYW5kb21fYnl0ZXMoJnJuZCwgc2l6ZW9mKHJuZCkpOwogCiAJLyogTG9va3VwcyBpbiB0aGUgb2xkIGhhc2ggbWlnaHQgaGFwcGVuIGluIHBhcmFsbGVsLCB3aGljaCBtZWFucyB3ZQogCSAqIG1pZ2h0IGdldCBmYWxzZSBuZWdhdGl2ZXMgZHVyaW5nIGNvbm5lY3Rpb24gbG9va3VwLiBOZXcgY29ubmVjdGlvbnMKQEAgLTExMTIsMTIgKzExMzksMTIgQEAKIAkgKi8KIAlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBpKyspIHsKLQkJd2hpbGUgKCFobGlzdF9lbXB0eSgmaW5pdF9uZXQuY3QuaGFzaFtpXSkpIHsKLQkJCWggPSBobGlzdF9lbnRyeShpbml0X25ldC5jdC5oYXNoW2ldLmZpcnN0LAotCQkJCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2gsIGhub2RlKTsKLQkJCWhsaXN0X2RlbF9yY3UoJmgtPmhub2RlKTsKKwkJd2hpbGUgKCFobGlzdF9udWxsc19lbXB0eSgmaW5pdF9uZXQuY3QuaGFzaFtpXSkpIHsKKwkJCWggPSBobGlzdF9udWxsc19lbnRyeShpbml0X25ldC5jdC5oYXNoW2ldLmZpcnN0LAorCQkJCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2gsIGhubm9kZSk7CisJCQlobGlzdF9udWxsc19kZWxfcmN1KCZoLT5obm5vZGUpOwogCQkJYnVja2V0ID0gX19oYXNoX2Nvbm50cmFjaygmaC0+dHVwbGUsIGhhc2hzaXplLCBybmQpOwotCQkJaGxpc3RfYWRkX2hlYWQoJmgtPmhub2RlLCAmaGFzaFtidWNrZXRdKTsKKwkJCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmaC0+aG5ub2RlLCAmaGFzaFtidWNrZXRdKTsKIAkJfQogCX0KIAlvbGRfc2l6ZSA9IG5mX2Nvbm50cmFja19odGFibGVfc2l6ZTsKQEAgLTExNjgsNyArMTE5NSw3IEBACiAKIAluZl9jb25udHJhY2tfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoIm5mX2Nvbm50cmFjayIsCiAJCQkJCQlzaXplb2Yoc3RydWN0IG5mX2Nvbm4pLAotCQkJCQkJMCwgMCwgTlVMTCk7CisJCQkJCQkwLCBTTEFCX0RFU1RST1lfQllfUkNVLCBOVUxMKTsKIAlpZiAoIW5mX2Nvbm50cmFja19jYWNoZXApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gY3JlYXRlIG5mX2Nvbm4gc2xhYiBjYWNoZVxuIik7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0xMTk4LDcgKzEyMjUsNyBAQAogCWludCByZXQ7CiAKIAlhdG9taWNfc2V0KCZuZXQtPmN0LmNvdW50LCAwKTsKLQlJTklUX0hMSVNUX0hFQUQoJm5ldC0+Y3QudW5jb25maXJtZWQpOworCUlOSVRfSExJU1RfTlVMTFNfSEVBRCgmbmV0LT5jdC51bmNvbmZpcm1lZCwgMCk7CiAJbmV0LT5jdC5zdGF0ID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBpcF9jb25udHJhY2tfc3RhdCk7CiAJaWYgKCFuZXQtPmN0LnN0YXQpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTEyMDgsNyArMTIzNSw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2VjYWNoZTsKIAluZXQtPmN0Lmhhc2ggPSBuZl9jdF9hbGxvY19oYXNodGFibGUoJm5mX2Nvbm50cmFja19odGFibGVfc2l6ZSwKLQkJCQkJCSAgJm5ldC0+Y3QuaGFzaF92bWFsbG9jKTsKKwkJCQkJICAgICAmbmV0LT5jdC5oYXNoX3ZtYWxsb2MsIDEpOwogCWlmICghbmV0LT5jdC5oYXNoKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGNyZWF0ZSBuZl9jb25udHJhY2tfaGFzaFxuIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCmluZGV4IDNhOGEzNGEuLjM5NDBmOTkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jCkBAIC03Miw3ICs3Miw4IEBACiAJdW5zaWduZWQgaW50IGhhc2g7CiAKIAlpZiAodW5saWtlbHkoIW5mX2N0X2V4cGVjdF9oYXNoX3JuZF9pbml0dGVkKSkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jdF9leHBlY3RfaGFzaF9ybmQsIDQpOworCQlnZXRfcmFuZG9tX2J5dGVzKCZuZl9jdF9leHBlY3RfaGFzaF9ybmQsCisJCQkJIHNpemVvZihuZl9jdF9leHBlY3RfaGFzaF9ybmQpKTsKIAkJbmZfY3RfZXhwZWN0X2hhc2hfcm5kX2luaXR0ZWQgPSAxOwogCX0KIApAQCAtNjAzLDcgKzYwNCw3IEBACiAKIAluZXQtPmN0LmV4cGVjdF9jb3VudCA9IDA7CiAJbmV0LT5jdC5leHBlY3RfaGFzaCA9IG5mX2N0X2FsbG9jX2hhc2h0YWJsZSgmbmZfY3RfZXhwZWN0X2hzaXplLAotCQkJCQkJICAmbmV0LT5jdC5leHBlY3Rfdm1hbGxvYyk7CisJCQkJCQkgICZuZXQtPmN0LmV4cGVjdF92bWFsbG9jLCAwKTsKIAlpZiAobmV0LT5jdC5leHBlY3RfaGFzaCA9PSBOVUxMKQogCQlnb3RvIGVycjE7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMKaW5kZXggNjg3YmQ2My4uNjYzNjk0OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaDMyM19tYWluLmMKQEAgLTExNjcsNyArMTE2Nyw3IEBACiAJCS5uYW1lCQkJPSAiUS45MzEiLAogCQkubWUJCQk9IFRISVNfTU9EVUxFLAogCQkudHVwbGUuc3JjLmwzbnVtCT0gQUZfSU5FVCwKLQkJLnR1cGxlLnNyYy51LnRjcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhROTMxX1BPUlQpLAorCQkudHVwbGUuc3JjLnUudGNwLnBvcnQJPSBjcHVfdG9fYmUxNihROTMxX1BPUlQpLAogCQkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19UQ1AsCiAJCS5oZWxwCQkJPSBxOTMxX2hlbHAsCiAJCS5leHBlY3RfcG9saWN5CQk9ICZxOTMxX2V4cF9wb2xpY3ksCkBAIC0xMTc2LDcgKzExNzYsNyBAQAogCQkubmFtZQkJCT0gIlEuOTMxIiwKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQ2LAotCQkudHVwbGUuc3JjLnUudGNwLnBvcnQJPSBfX2NvbnN0YW50X2h0b25zKFE5MzFfUE9SVCksCisJCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IGNwdV90b19iZTE2KFE5MzFfUE9SVCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1RDUCwKIAkJLmhlbHAJCQk9IHE5MzFfaGVscCwKIAkJLmV4cGVjdF9wb2xpY3kJCT0gJnE5MzFfZXhwX3BvbGljeSwKQEAgLTE3NDEsNyArMTc0MSw3IEBACiAJCS5uYW1lCQkJPSAiUkFTIiwKIAkJLm1lCQkJPSBUSElTX01PRFVMRSwKIAkJLnR1cGxlLnNyYy5sM251bQk9IEFGX0lORVQsCi0JCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUkFTX1BPUlQpLAorCQkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNihSQVNfUE9SVCksCiAJCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIAkJLmhlbHAJCQk9IHJhc19oZWxwLAogCQkuZXhwZWN0X3BvbGljeQkJPSAmcmFzX2V4cF9wb2xpY3ksCkBAIC0xNzUwLDcgKzE3NTAsNyBAQAogCQkubmFtZQkJCT0gIlJBUyIsCiAJCS5tZQkJCT0gVEhJU19NT0RVTEUsCiAJCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVUNiwKLQkJLnR1cGxlLnNyYy51LnVkcC5wb3J0CT0gX19jb25zdGFudF9odG9ucyhSQVNfUE9SVCksCisJCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IGNwdV90b19iZTE2KFJBU19QT1JUKSwKIAkJLnR1cGxlLmRzdC5wcm90b251bQk9IElQUFJPVE9fVURQLAogCQkuaGVscAkJCT0gcmFzX2hlbHAsCiAJCS5leHBlY3RfcG9saWN5CQk9ICZyYXNfZXhwX3BvbGljeSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKaW5kZXggYTUxYmRhYy4uMzBiOGU5MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKQEAgLTE0Miw2ICsxNDIsNyBAQAogCiAJQlVHX09OKG1lLT5leHBlY3RfcG9saWN5ID09IE5VTEwpOwogCUJVR19PTihtZS0+ZXhwZWN0X2NsYXNzX21heCA+PSBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMpOworCUJVR19PTihzdHJsZW4obWUtPm5hbWUpID4gTkZfQ1RfSEVMUEVSX05BTUVfTEVOIC0gMSk7CiAKIAltdXRleF9sb2NrKCZuZl9jdF9oZWxwZXJfbXV0ZXgpOwogCWhsaXN0X2FkZF9oZWFkX3JjdSgmbWUtPmhub2RlLCAmbmZfY3RfaGVscGVyX2hhc2hbaF0pOwpAQCAtMTU4LDYgKzE1OSw3IEBACiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiAJY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm4sICpuZXh0OworCWNvbnN0IHN0cnVjdCBobGlzdF9udWxsc19ub2RlICpubjsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCS8qIEdldCByaWQgb2YgZXhwZWN0YXRpb25zICovCkBAIC0xNzQsMTAgKzE3NiwxMCBAQAogCX0KIAogCS8qIEdldCByaWQgb2YgZXhwZWN0ZWRzLCBzZXQgaGVscGVycyB0byBOVUxMLiAqLwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0LnVuY29uZmlybWVkLCBobm9kZSkKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShoLCBubiwgJm5ldC0+Y3QudW5jb25maXJtZWQsIGhubm9kZSkKIAkJdW5oZWxwKGgsIG1lKTsKIAlmb3IgKGkgPSAwOyBpIDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOyBpKyspIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QuaGFzaFtpXSwgaG5vZGUpCisJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGgsIG5uLCAmbmV0LT5jdC5oYXNoW2ldLCBobm5vZGUpCiAJCQl1bmhlbHAoaCwgbWUpOwogCX0KIH0KQEAgLTIxNyw3ICsyMTksNyBAQAogCiAJbmZfY3RfaGVscGVyX2hzaXplID0gMTsgLyogZ2V0cyByb3VuZGVkIHVwIHRvIHVzZSBvbmUgcGFnZSAqLwogCW5mX2N0X2hlbHBlcl9oYXNoID0gbmZfY3RfYWxsb2NfaGFzaHRhYmxlKCZuZl9jdF9oZWxwZXJfaHNpemUsCi0JCQkJCQkgICZuZl9jdF9oZWxwZXJfdm1hbGxvYyk7CisJCQkJCQkgICZuZl9jdF9oZWxwZXJfdm1hbGxvYywgMCk7CiAJaWYgKCFuZl9jdF9oZWxwZXJfaGFzaCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGJpb3NfbnMuYwppbmRleCA1YWY0MjczLi44YTM4NzVlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRiaW9zX25zLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0Ymlvc19ucy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBoZWxwZXIgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJCT0gIm5ldGJpb3MtbnMiLAogCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCS50dXBsZS5zcmMudS51ZHAucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoTk1CRF9QT1JUKSwKKwkudHVwbGUuc3JjLnUudWRwLnBvcnQJPSBjcHVfdG9fYmUxNihOTUJEX1BPUlQpLAogCS50dXBsZS5kc3QucHJvdG9udW0JPSBJUFBST1RPX1VEUCwKIAkubWUJCQk9IFRISVNfTU9EVUxFLAogCS5oZWxwCQkJPSBoZWxwLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IGNiNzhhYTAuLmM2NDM5YzcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdF9udWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTQwNCw2ICs0MDUsNzggQEAKIH0KIAogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTCisvKgorICogVGhlIGdlbmVyYWwgc3RydWN0dXJlIG9mIGEgY3RuZXRsaW5rIGV2ZW50IGlzCisgKgorICogIENUQV9UVVBMRV9PUklHCisgKiAgICA8bDMvbDQtcHJvdG8tYXR0cmlidXRlcz4KKyAqICBDVEFfVFVQTEVfUkVQTFkKKyAqICAgIDxsMy9sNC1wcm90by1hdHRyaWJ1dGVzPgorICogIENUQV9JRAorICogIC4uLgorICogIENUQV9QUk9UT0lORk8KKyAqICAgIDxsNC1wcm90by1hdHRyaWJ1dGVzPgorICogIENUQV9UVVBMRV9NQVNURVIKKyAqICAgIDxsMy9sNC1wcm90by1hdHRyaWJ1dGVzPgorICoKKyAqIFRoZXJlZm9yZSB0aGUgZm9ybXVsYXIgaXMKKyAqCisgKiAgIHNpemUgPSBzaXplb2YoaGVhZGVycykgKyBzaXplb2YoZ2VuZXJpY19ubGFzKSArIDMgKiBzaXplb2YodHVwbGVfbmxhcykKKyAqCQkrIHNpemVvZihwcm90b2luZm9fbmxhcykKKyAqLworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2N0bmV0bGlua19hbGxvY19za2IoY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG87CisJc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvOworCWludCBsZW47CisKKyNkZWZpbmUgTkxBX1RZUEVfU0laRSh0eXBlKQkJbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHR5cGUpKQorCisJLyogcHJvdG8gaW5kZXBlbmRhbnQgcGFydCAqLworCWxlbiA9IE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgbmZnZW5tc2cpKQorCQkrIDMgKiBubGFfdG90YWxfc2l6ZSgwKQkJLyogQ1RBX1RVUExFX09SSUd8UkVQTHxNQVNURVIgKi8KKwkJKyAzICogbmxhX3RvdGFsX3NpemUoMCkJCS8qIENUQV9UVVBMRV9JUCAqLworCQkrIDMgKiBubGFfdG90YWxfc2l6ZSgwKQkJLyogQ1RBX1RVUExFX1BST1RPICovCisJCSsgMyAqIE5MQV9UWVBFX1NJWkUodV9pbnQ4X3QpCS8qIENUQV9QUk9UT19OVU0gKi8KKwkJKyBOTEFfVFlQRV9TSVpFKHVfaW50MzJfdCkJLyogQ1RBX0lEICovCisJCSsgTkxBX1RZUEVfU0laRSh1X2ludDMyX3QpCS8qIENUQV9TVEFUVVMgKi8KKyNpZmRlZiBDT05GSUdfTkZfQ1RfQUNDVAorCQkrIDIgKiBubGFfdG90YWxfc2l6ZSgwKQkJLyogQ1RBX0NPVU5URVJTX09SSUd8UkVQTCAqLworCQkrIDIgKiBOTEFfVFlQRV9TSVpFKHVpbnQ2NF90KQkvKiBDVEFfQ09VTlRFUlNfUEFDS0VUUyAqLworCQkrIDIgKiBOTEFfVFlQRV9TSVpFKHVpbnQ2NF90KQkvKiBDVEFfQ09VTlRFUlNfQllURVMgKi8KKyNlbmRpZgorCQkrIE5MQV9UWVBFX1NJWkUodV9pbnQzMl90KQkvKiBDVEFfVElNRU9VVCAqLworCQkrIG5sYV90b3RhbF9zaXplKDApCQkvKiBDVEFfUFJPVE9JTkZPICovCisJCSsgbmxhX3RvdGFsX3NpemUoMCkJCS8qIENUQV9IRUxQICovCisJCSsgbmxhX3RvdGFsX3NpemUoTkZfQ1RfSEVMUEVSX05BTUVfTEVOKQkvKiBDVEFfSEVMUF9OQU1FICovCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19TRUNNQVJLCisJCSsgTkxBX1RZUEVfU0laRSh1X2ludDMyX3QpCS8qIENUQV9TRUNNQVJLICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAorCQkrIDIgKiBubGFfdG90YWxfc2l6ZSgwKQkJLyogQ1RBX05BVF9TRVFfQURKX09SSUd8UkVQTCAqLworCQkrIDIgKiBOTEFfVFlQRV9TSVpFKHVfaW50MzJfdCkJLyogQ1RBX05BVF9TRVFfQ09SUkVDVElPTl9QT1MgKi8KKwkJKyAyICogTkxBX1RZUEVfU0laRSh1X2ludDMyX3QpCS8qIENUQV9OQVRfU0VRX0NPUlJFQ1RJT05fQkVGT1JFICovCisJCSsgMiAqIE5MQV9UWVBFX1NJWkUodV9pbnQzMl90KQkvKiBDVEFfTkFUX1NFUV9DT1JSRUNUSU9OX0FGVEVSICovCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksKKwkJKyBOTEFfVFlQRV9TSVpFKHVfaW50MzJfdCkJLyogQ1RBX01BUksgKi8KKyNlbmRpZgorCQk7CisKKyN1bmRlZiBOTEFfVFlQRV9TSVpFCisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbDNwcm90byA9IF9fbmZfY3RfbDNwcm90b19maW5kKHR1cGxlLT5zcmMubDNudW0pOworCWxlbiArPSBsM3Byb3RvLT5ubGFfc2l6ZTsKKworCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZCh0dXBsZS0+c3JjLmwzbnVtLCB0dXBsZS0+ZHN0LnByb3RvbnVtKTsKKwlsZW4gKz0gbDRwcm90by0+bmxhX3NpemU7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gYWxsb2Nfc2tiKGxlbiwgZ2ZwKTsKK30KKwogc3RhdGljIGludCBjdG5ldGxpbmtfY29ubnRyYWNrX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnRzLCB2b2lkICpwdHIpCiB7CkBAIC00MzcsNyArNTEwLDcgQEAKIAlpZiAoIWl0ZW0tPnJlcG9ydCAmJiAhbmZuZXRsaW5rX2hhc19saXN0ZW5lcnMoZ3JvdXApKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKLQlza2IgPSBhbGxvY19za2IoTkxNU0dfR09PRFNJWkUsIEdGUF9BVE9NSUMpOworCXNrYiA9IGN0bmV0bGlua19hbGxvY19za2IodHVwbGUoY3QsIElQX0NUX0RJUl9PUklHSU5BTCksIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CiAKQEAgLTUxOCw2ICs1OTEsNyBAQAogbmxhX3B1dF9mYWlsdXJlOgogCXJjdV9yZWFkX3VubG9jaygpOwogbmxtc2dfZmFpbHVyZToKKwluZm5ldGxpbmtfc2V0X2VycigwLCBncm91cCwgLUVOT0JVRlMpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KQEAgLTUzNSw3ICs2MDksNyBAQAogewogCXN0cnVjdCBuZl9jb25uICpjdCwgKmxhc3Q7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOworCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCXN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBOTE1TR19EQVRBKGNiLT5ubGgpOwogCXVfaW50OF90IGwzcHJvdG8gPSBuZm1zZy0+bmZnZW5fZmFtaWx5OwogCkBAIC01NDMsMjcgKzYxNywyNyBAQAogCWxhc3QgPSAoc3RydWN0IG5mX2Nvbm4gKiljYi0+YXJnc1sxXTsKIAlmb3IgKDsgY2ItPmFyZ3NbMF0gPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGNiLT5hcmdzWzBdKyspIHsKIHJlc3RhcnQ6Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmaW5pdF9uZXQuY3QuaGFzaFtjYi0+YXJnc1swXV0sCi0JCQkJCSBobm9kZSkgeworCQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UoaCwgbiwgJmluaXRfbmV0LmN0Lmhhc2hbY2ItPmFyZ3NbMF1dLAorCQkJCQkgaG5ub2RlKSB7CiAJCQlpZiAoTkZfQ1RfRElSRUNUSU9OKGgpICE9IElQX0NUX0RJUl9PUklHSU5BTCkKIAkJCQljb250aW51ZTsKIAkJCWN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKKwkJCWlmICghYXRvbWljX2luY19ub3RfemVybygmY3QtPmN0X2dlbmVyYWwudXNlKSkKKwkJCQljb250aW51ZTsKIAkJCS8qIER1bXAgZW50cmllcyBvZiBhIGdpdmVuIEwzIHByb3RvY29sIG51bWJlci4KIAkJCSAqIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQsIGllLiBsM3Byb3RvID09IDAsCiAJCQkgKiB0aGVuIGR1bXAgZXZlcnl0aGluZy4gKi8KIAkJCWlmIChsM3Byb3RvICYmIG5mX2N0X2wzbnVtKGN0KSAhPSBsM3Byb3RvKQotCQkJCWNvbnRpbnVlOworCQkJCWdvdG8gcmVsZWFzZWN0OwogCQkJaWYgKGNiLT5hcmdzWzFdKSB7CiAJCQkJaWYgKGN0ICE9IGxhc3QpCi0JCQkJCWNvbnRpbnVlOworCQkJCQlnb3RvIHJlbGVhc2VjdDsKIAkJCQljYi0+YXJnc1sxXSA9IDA7CiAJCQl9CiAJCQlpZiAoY3RuZXRsaW5rX2ZpbGxfaW5mbyhza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucGlkLAogCQkJCQkJY2ItPm5saC0+bmxtc2dfc2VxLAogCQkJCQkJSVBDVE5MX01TR19DVF9ORVcsCiAJCQkJCQkxLCBjdCkgPCAwKSB7Ci0JCQkJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZjdC0+Y3RfZ2VuZXJhbC51c2UpKQotCQkJCQljb250aW51ZTsKIAkJCQljYi0+YXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKWN0OwogCQkJCWdvdG8gb3V0OwogCQkJfQpAQCAtNTc2LDYgKzY1MCw4IEBACiAJCQkJaWYgKGFjY3QpCiAJCQkJCW1lbXNldChhY2N0LCAwLCBzaXplb2Yoc3RydWN0IG5mX2Nvbm5fY291bnRlcltJUF9DVF9ESVJfTUFYXSkpOwogCQkJfQorcmVsZWFzZWN0OgorCQluZl9jdF9wdXQoY3QpOwogCQl9CiAJCWlmIChjYi0+YXJnc1sxXSkgewogCQkJY2ItPmFyZ3NbMV0gPSAwOwpAQCAtNTk5LDcgKzY3NSw4IEBACiAKIAlubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfSVBfTUFYLCBhdHRyLCBOVUxMKTsKIAotCWwzcHJvdG8gPSBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KHR1cGxlLT5zcmMubDNudW0pOworCXJjdV9yZWFkX2xvY2soKTsKKwlsM3Byb3RvID0gX19uZl9jdF9sM3Byb3RvX2ZpbmQodHVwbGUtPnNyYy5sM251bSk7CiAKIAlpZiAobGlrZWx5KGwzcHJvdG8tPm5sYXR0cl90b190dXBsZSkpIHsKIAkJcmV0ID0gbmxhX3ZhbGlkYXRlX25lc3RlZChhdHRyLCBDVEFfSVBfTUFYLApAQCAtNjA4LDcgKzY4NSw3IEBACiAJCQlyZXQgPSBsM3Byb3RvLT5ubGF0dHJfdG9fdHVwbGUodGIsIHR1cGxlKTsKIAl9CiAKLQluZl9jdF9sM3Byb3RvX3B1dChsM3Byb3RvKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC02MzMsNyArNzEwLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJdHVwbGUtPmRzdC5wcm90b251bSA9IG5sYV9nZXRfdTgodGJbQ1RBX1BST1RPX05VTV0pOwogCi0JbDRwcm90byA9IG5mX2N0X2w0cHJvdG9fZmluZF9nZXQodHVwbGUtPnNyYy5sM251bSwgdHVwbGUtPmRzdC5wcm90b251bSk7CisJcmN1X3JlYWRfbG9jaygpOworCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZCh0dXBsZS0+c3JjLmwzbnVtLCB0dXBsZS0+ZHN0LnByb3RvbnVtKTsKIAogCWlmIChsaWtlbHkobDRwcm90by0+bmxhdHRyX3RvX3R1cGxlKSkgewogCQlyZXQgPSBubGFfdmFsaWRhdGVfbmVzdGVkKGF0dHIsIENUQV9QUk9UT19NQVgsCkBAIC02NDIsNyArNzIwLDcgQEAKIAkJCXJldCA9IGw0cHJvdG8tPm5sYXR0cl90b190dXBsZSh0YiwgdHVwbGUpOwogCX0KIAotCW5mX2N0X2w0cHJvdG9fcHV0KGw0cHJvdG8pOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk4OSwxMCArMTA2NywxMSBAQAogCiAJbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1BST1RPSU5GT19NQVgsIGF0dHIsIE5VTEwpOwogCi0JbDRwcm90byA9IG5mX2N0X2w0cHJvdG9fZmluZF9nZXQobmZfY3RfbDNudW0oY3QpLCBuZl9jdF9wcm90b251bShjdCkpOworCXJjdV9yZWFkX2xvY2soKTsKKwlsNHByb3RvID0gX19uZl9jdF9sNHByb3RvX2ZpbmQobmZfY3RfbDNudW0oY3QpLCBuZl9jdF9wcm90b251bShjdCkpOwogCWlmIChsNHByb3RvLT5mcm9tX25sYXR0cikKIAkJZXJyID0gbDRwcm90by0+ZnJvbV9ubGF0dHIodGIsIGN0KTsKLQluZl9jdF9sNHByb3RvX3B1dChsNHByb3RvKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xMDYyLDYgKzExNDEsMTAgQEAKIHsKIAlpbnQgZXJyOwogCisJLyogb25seSBhbGxvdyBOQVQgY2hhbmdlcyBhbmQgbWFzdGVyIGFzc2lnbmF0aW9uIGZvciBuZXcgY29ubnRyYWNrcyAqLworCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0gfHwgY2RhW0NUQV9UVVBMRV9NQVNURVJdKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAoY2RhW0NUQV9IRUxQXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX2hlbHBlcihjdCwgY2RhKTsKIAkJaWYgKGVyciA8IDApCkBAIC0xMTI0LDEzICsxMjA3LDExIEBACiAJCQkJICByZXBvcnQpOwogfQogCi1zdGF0aWMgaW50CitzdGF0aWMgc3RydWN0IG5mX2Nvbm4gKgogY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soc3RydWN0IG5sYXR0ciAqY2RhW10sCiAJCQkgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvdHVwbGUsCiAJCQkgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpydHVwbGUsCi0JCQkgICBzdHJ1Y3QgbmZfY29ubiAqbWFzdGVyX2N0LAotCQkJICAgdTMyIHBpZCwKLQkJCSAgIGludCByZXBvcnQpCisJCQkgICB1OCB1MykKIHsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJaW50IGVyciA9IC1FSU5WQUw7CkBAIC0xMTM4LDEwICsxMjE5LDEwIEBACiAKIAljdCA9IG5mX2Nvbm50cmFja19hbGxvYygmaW5pdF9uZXQsIG90dXBsZSwgcnR1cGxlLCBHRlBfQVRPTUlDKTsKIAlpZiAoSVNfRVJSKGN0KSkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJaWYgKCFjZGFbQ1RBX1RJTUVPVVRdKQotCQlnb3RvIGVycjsKKwkJZ290byBlcnIxOwogCWN0LT50aW1lb3V0LmV4cGlyZXMgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9USU1FT1VUXSkpOwogCiAJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBjdC0+dGltZW91dC5leHBpcmVzICogSFo7CkBAIC0xMTUyLDEwICsxMjMzLDggQEAKICAJCWNoYXIgKmhlbHBuYW1lOwogIAogIAkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX2hlbHAoY2RhW0NUQV9IRUxQXSwgJmhlbHBuYW1lKTsKLSAJCWlmIChlcnIgPCAwKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gZXJyOwotCQl9CisgCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAogCQloZWxwZXIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUoaGVscG5hbWUpOwogCQlpZiAoaGVscGVyID09IE5VTEwpIHsKQEAgLTExNjMsMjggKzEyNDIsMjYgQEAKICNpZmRlZiBDT05GSUdfTU9EVUxFUwogCQkJaWYgKHJlcXVlc3RfbW9kdWxlKCJuZmN0LWhlbHBlci0lcyIsIGhlbHBuYW1lKSA8IDApIHsKIAkJCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCQlnb3RvIGVycjsKKwkJCQlnb3RvIGVycjE7CiAJCQl9CiAKIAkJCXJjdV9yZWFkX2xvY2soKTsKIAkJCWhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kX2J5bmFtZShoZWxwbmFtZSk7CiAJCQlpZiAoaGVscGVyKSB7Ci0JCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJZXJyID0gLUVBR0FJTjsKLQkJCQlnb3RvIGVycjsKKwkJCQlnb3RvIGVycjI7CiAJCQl9CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKICNlbmRpZgogCQkJZXJyID0gLUVPUE5PVFNVUFA7Ci0JCQlnb3RvIGVycjsKKwkJCWdvdG8gZXJyMTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHA7CiAKIAkJCWhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoaGVscCA9PSBOVUxMKSB7Ci0JCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIGVycjsKKwkJCQlnb3RvIGVycjI7CiAJCQl9CiAKIAkJCS8qIG5vdCBpbiBoYXNoIHRhYmxlIHlldCBzbyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5ICovCkBAIC0xMTkzLDQ0ICsxMjcwLDM0IEBACiAJfSBlbHNlIHsKIAkJLyogdHJ5IGFuIGltcGxpY2l0IGhlbHBlciBhc3NpZ25hdGlvbiAqLwogCQllcnIgPSBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCBHRlBfQVRPTUlDKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogCiAJaWYgKGNkYVtDVEFfU1RBVFVTXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhjdCwgY2RhKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogCiAJaWYgKGNkYVtDVEFfTkFUX1NSQ10gfHwgY2RhW0NUQV9OQVRfRFNUXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX25hdChjdCwgY2RhKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJZ290byBlcnI7Ci0JCX0KKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CiAJfQogCiAjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKIAlpZiAoY2RhW0NUQV9OQVRfU0VRX0FESl9PUklHXSB8fCBjZGFbQ1RBX05BVF9TRVFfQURKX1JFUExZXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX25hdF9zZXFfYWRqKGN0LCBjZGEpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQlnb3RvIGVycjsKLQkJfQorCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gZXJyMjsKIAl9CiAjZW5kaWYKIAogCWlmIChjZGFbQ1RBX1BST1RPSU5GT10pIHsKIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9wcm90b2luZm8oY3QsIGNkYSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCWdvdG8gZXJyOwotCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOwogCX0KIAogCW5mX2N0X2FjY3RfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7CkBAIC0xMjQxLDIzICsxMzA4LDM2IEBACiAjZW5kaWYKIAogCS8qIHNldHVwIG1hc3RlciBjb25udHJhY2s6IHRoaXMgaXMgYSBjb25maXJtZWQgZXhwZWN0YXRpb24gKi8KLQlpZiAobWFzdGVyX2N0KSB7CisJaWYgKGNkYVtDVEFfVFVQTEVfTUFTVEVSXSkgeworCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIG1hc3RlcjsKKwkJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICptYXN0ZXJfaDsKKwkJc3RydWN0IG5mX2Nvbm4gKm1hc3Rlcl9jdDsKKworCQllcnIgPSBjdG5ldGxpbmtfcGFyc2VfdHVwbGUoY2RhLCAmbWFzdGVyLCBDVEFfVFVQTEVfTUFTVEVSLCB1Myk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnIyOworCisJCW1hc3Rlcl9oID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KCZpbml0X25ldCwgJm1hc3Rlcik7CisJCWlmIChtYXN0ZXJfaCA9PSBOVUxMKSB7CisJCQllcnIgPSAtRU5PRU5UOworCQkJZ290byBlcnIyOworCQl9CisJCW1hc3Rlcl9jdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2sobWFzdGVyX2gpOwogCQlfX3NldF9iaXQoSVBTX0VYUEVDVEVEX0JJVCwgJmN0LT5zdGF0dXMpOwogCQljdC0+bWFzdGVyID0gbWFzdGVyX2N0OwogCX0KIAotCW5mX2Nvbm50cmFja19nZXQoJmN0LT5jdF9nZW5lcmFsKTsKIAlhZGRfdGltZXIoJmN0LT50aW1lb3V0KTsKIAluZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoY3QpOwogCXJjdV9yZWFkX3VubG9jaygpOwotCWN0bmV0bGlua19ldmVudF9yZXBvcnQoY3QsIHBpZCwgcmVwb3J0KTsKLQluZl9jdF9wdXQoY3QpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGN0OwogCi1lcnI6CitlcnIyOgorCXJjdV9yZWFkX3VubG9jaygpOworZXJyMToKIAluZl9jb25udHJhY2tfZnJlZShjdCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjg5LDM4ICsxMzY5LDI1IEBACiAJCWggPSBfX25mX2Nvbm50cmFja19maW5kKCZpbml0X25ldCwgJnJ0dXBsZSk7CiAKIAlpZiAoaCA9PSBOVUxMKSB7Ci0JCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgbWFzdGVyOwotCQlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKm1hc3Rlcl9oID0gTlVMTDsKLQkJc3RydWN0IG5mX2Nvbm4gKm1hc3Rlcl9jdCA9IE5VTEw7CisJCWVyciA9IC1FTk9FTlQ7CisJCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQ1JFQVRFKSB7CisJCQlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKLQkJaWYgKGNkYVtDVEFfVFVQTEVfTUFTVEVSXSkgewotCQkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwKLQkJCQkJCSAgICAmbWFzdGVyLAotCQkJCQkJICAgIENUQV9UVVBMRV9NQVNURVIsCi0JCQkJCQkgICAgdTMpOwotCQkJaWYgKGVyciA8IDApCi0JCQkJZ290byBvdXRfdW5sb2NrOwotCi0JCQltYXN0ZXJfaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQoJmluaXRfbmV0LCAmbWFzdGVyKTsKLQkJCWlmIChtYXN0ZXJfaCA9PSBOVUxMKSB7Ci0JCQkJZXJyID0gLUVOT0VOVDsKKwkJCWN0ID0gY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2soY2RhLCAmb3R1cGxlLAorCQkJCQkJCSZydHVwbGUsIHUzKTsKKwkJCWlmIChJU19FUlIoY3QpKSB7CisJCQkJZXJyID0gUFRSX0VSUihjdCk7CiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJfQotCQkJbWFzdGVyX2N0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhtYXN0ZXJfaCk7Ci0JCQluZl9jb25udHJhY2tfZ2V0KCZtYXN0ZXJfY3QtPmN0X2dlbmVyYWwpOwotCQl9Ci0KLQkJZXJyID0gLUVOT0VOVDsKLQkJaWYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9DUkVBVEUpCi0JCQllcnIgPSBjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhjZGEsCi0JCQkJCQkJICZvdHVwbGUsCi0JCQkJCQkJICZydHVwbGUsCi0JCQkJCQkJIG1hc3Rlcl9jdCwKLQkJCQkJCQkgTkVUTElOS19DQihza2IpLnBpZCwKLQkJCQkJCQkgbmxtc2dfcmVwb3J0KG5saCkpOwotCQlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotCQlpZiAoZXJyIDwgMCAmJiBtYXN0ZXJfY3QpCi0JCQluZl9jdF9wdXQobWFzdGVyX2N0KTsKKwkJCWVyciA9IDA7CisJCQluZl9jb25udHJhY2tfZ2V0KCZjdC0+Y3RfZ2VuZXJhbCk7CisJCQlzcGluX3VubG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCQkJY3RuZXRsaW5rX2V2ZW50X3JlcG9ydChjdCwKKwkJCQkJICAgICAgIE5FVExJTktfQ0Ioc2tiKS5waWQsCisJCQkJCSAgICAgICBubG1zZ19yZXBvcnQobmxoKSk7CisJCQluZl9jdF9wdXQoY3QpOworCQl9IGVsc2UKKwkJCXNwaW5fdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAKIAkJcmV0dXJuIGVycjsKIAl9CkBAIC0xMzMyLDE3ICsxMzk5LDYgQEAKIAlpZiAoIShubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRVhDTCkpIHsKIAkJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAotCQkvKiB3ZSBvbmx5IGFsbG93IG5hdCBjb25maWcgZm9yIG5ldyBjb25udHJhY2tzICovCi0JCWlmIChjZGFbQ1RBX05BVF9TUkNdIHx8IGNkYVtDVEFfTkFUX0RTVF0pIHsKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0JCS8qIGNhbid0IGxpbmsgYW4gZXhpc3RpbmcgY29ubnRyYWNrIHRvIGEgbWFzdGVyICovCi0JCWlmIChjZGFbQ1RBX1RVUExFX01BU1RFUl0pIHsKLQkJCWVyciA9IC1FT1BOT1RTVVBQOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0KIAkJZXJyID0gY3RuZXRsaW5rX2NoYW5nZV9jb25udHJhY2soY3QsIGNkYSk7CiAJCWlmIChlcnIgPT0gMCkgewogCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOwpAQCAtMTUzMyw2ICsxNTg5LDcgQEAKIG5sYV9wdXRfZmFpbHVyZToKIAlyY3VfcmVhZF91bmxvY2soKTsKIG5sbXNnX2ZhaWx1cmU6CisJbmZuZXRsaW5rX3NldF9lcnIoMCwgMCwgLUVOT0JVRlMpOwogCWtmcmVlX3NrYihza2IpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KQEAgLTE3ODAsNiArMTgzNyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWV4cC0+Y2xhc3MgPSAwOwogCWV4cC0+ZXhwZWN0Zm4gPSBOVUxMOwogCWV4cC0+ZmxhZ3MgPSAwOwogCWV4cC0+bWFzdGVyID0gY3Q7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKaW5kZXggOWUxNjllZi4uMzgwN2FjNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwpAQCAtNjYsNyArNjYsNyBAQAogCQkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwKSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3BwdHBfaG9va19leHBlY3Rmbik7CiAKLSNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRykKKyNpZiBkZWZpbmVkKERFQlVHKSB8fCBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0RFQlVHKQogLyogUHB0cENvbnRyb2xNZXNzYWdlVHlwZSBuYW1lcyAqLwogY29uc3QgY2hhciAqY29uc3QgcHB0cF9tc2dfbmFtZVtdID0gewogCSJVTktOT1dOX01FU1NBR0UiLApAQCAtNTkxLDcgKzU5MSw3IEBACiAJLm5hbWUJCQk9ICJwcHRwIiwKIAkubWUJCQk9IFRISVNfTU9EVUxFLAogCS50dXBsZS5zcmMubDNudW0JPSBBRl9JTkVULAotCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IF9fY29uc3RhbnRfaHRvbnMoUFBUUF9DT05UUk9MX1BPUlQpLAorCS50dXBsZS5zcmMudS50Y3AucG9ydAk9IGNwdV90b19iZTE2KFBQVFBfQ09OVFJPTF9QT1JUKSwKIAkudHVwbGUuZHN0LnByb3RvbnVtCT0gSVBQUk9UT19UQ1AsCiAJLmhlbHAJCQk9IGNvbm50cmFja19wcHRwX2hlbHAsCiAJLmRlc3Ryb3kJCT0gcHB0cF9kZXN0cm95X3NpYmxpbmdzLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvLmMKaW5kZXggNTkyZDczMy4uMWE0NTY4YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG8uYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90by5jCkBAIC03NCwyNyArNzQsNiBAQAogCiAvKiB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gYWx3YXlzIHJldHVybiBhIHZhbGlkIHByb3RvY29sIGhlbHBlciwgc2luY2UKICAqIGl0IGZhbGxzIGJhY2sgdG8gZ2VuZXJpY19wcm90b2NvbCAqLwotc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICoKLW5mX2N0X2w0cHJvdG9fZmluZF9nZXQodV9pbnQxNl90IGwzcHJvdG8sIHVfaW50OF90IGw0cHJvdG8pCi17Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpwOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXAgPSBfX25mX2N0X2w0cHJvdG9fZmluZChsM3Byb3RvLCBsNHByb3RvKTsKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHAtPm1lKSkKLQkJcCA9ICZuZl9jb25udHJhY2tfbDRwcm90b19nZW5lcmljOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIHA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX2ZpbmRfZ2V0KTsKLQotdm9pZCBuZl9jdF9sNHByb3RvX3B1dChzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKnApCi17Ci0JbW9kdWxlX3B1dChwLT5tZSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9sNHByb3RvX3B1dCk7Ci0KIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqCiBuZl9jdF9sM3Byb3RvX2ZpbmRfZ2V0KHVfaW50MTZfdCBsM3Byb3RvKQogewpAQCAtMTg4LDYgKzE2Nyw5IEBACiAJaWYgKHByb3RvLT5sM3Byb3RvID49IEFGX01BWCkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWlmIChwcm90by0+dHVwbGVfdG9fbmxhdHRyICYmICFwcm90by0+bmxhdHRyX3R1cGxlX3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCiAJbXV0ZXhfbG9jaygmbmZfY3RfcHJvdG9fbXV0ZXgpOwogCWlmIChuZl9jdF9sM3Byb3Rvc1twcm90by0+bDNwcm90b10gIT0gJm5mX2Nvbm50cmFja19sM3Byb3RvX2dlbmVyaWMpIHsKIAkJcmV0ID0gLUVCVVNZOwpAQCAtMTk4LDYgKzE4MCw5IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCWlmIChwcm90by0+bmxhdHRyX3R1cGxlX3NpemUpCisJCXByb3RvLT5ubGFfc2l6ZSA9IDMgKiBwcm90by0+bmxhdHRyX3R1cGxlX3NpemUoKTsKKwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9jdF9sM3Byb3Rvc1twcm90by0+bDNwcm90b10sIHByb3RvKTsKIAogb3V0X3VubG9jazoKQEAgLTI4NCw2ICsyNjksMTAgQEAKIAlpZiAobDRwcm90by0+bDNwcm90byA+PSBQRl9NQVgpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlpZiAoKGw0cHJvdG8tPnRvX25sYXR0ciAmJiAhbDRwcm90by0+bmxhdHRyX3NpemUpCisJCXx8IChsNHByb3RvLT50dXBsZV90b19ubGF0dHIgJiYgIWw0cHJvdG8tPm5sYXR0cl90dXBsZV9zaXplKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltdXRleF9sb2NrKCZuZl9jdF9wcm90b19tdXRleCk7CiAJaWYgKCFuZl9jdF9wcm90b3NbbDRwcm90by0+bDNwcm90b10pIHsKIAkJLyogbDNwcm90byBtYXkgYmUgbG9hZGVkIGxhdHRlci4gKi8KQEAgLTMxMSw2ICszMDAsMTIgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfdW5sb2NrOwogCisJbDRwcm90by0+bmxhX3NpemUgPSAwOworCWlmIChsNHByb3RvLT5ubGF0dHJfc2l6ZSkKKwkJbDRwcm90by0+bmxhX3NpemUgKz0gbDRwcm90by0+bmxhdHRyX3NpemUoKTsKKwlpZiAobDRwcm90by0+bmxhdHRyX3R1cGxlX3NpemUpCisJCWw0cHJvdG8tPm5sYV9zaXplICs9IDMgKiBsNHByb3RvLT5ubGF0dHJfdHVwbGVfc2l6ZSgpOworCiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2N0X3Byb3Rvc1tsNHByb3RvLT5sM3Byb3RvXVtsNHByb3RvLT5sNHByb3RvXSwKIAkJCSAgIGw0cHJvdG8pOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKaW5kZXggOGZjZjE3Ni4uNTBkYWM4ZGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKQEAgLTE2LDYgKzE2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kY2NwLmg+CiAKKyNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CisKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgpAQCAtMjMsOCArMjYsNiBAQAogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhkY2NwX2xvY2spOwogCi1zdGF0aWMgaW50IG5mX2N0X2RjY3BfbG9vc2UgX19yZWFkX21vc3RseSA9IDE7Ci0KIC8qIFRpbWVvdXRzIGFyZSBiYXNlZCBvbiB2YWx1ZXMgZnJvbSBSRkM0MzQwOgogICoKICAqIC0gUkVRVUVTVDoKQEAgLTcyLDE2ICs3Myw2IEBACiAKICNkZWZpbmUgRENDUF9NU0wgKDIgKiA2MCAqIEhaKQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRjY3BfdGltZW91dFtDVF9EQ0NQX01BWCArIDFdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JW0NUX0RDQ1BfUkVRVUVTVF0JPSAyICogRENDUF9NU0wsCi0JW0NUX0RDQ1BfUkVTUE9ORF0JPSA0ICogRENDUF9NU0wsCi0JW0NUX0RDQ1BfUEFSVE9QRU5dCT0gNCAqIERDQ1BfTVNMLAotCVtDVF9EQ0NQX09QRU5dCQk9IDEyICogMzYwMCAqIEhaLAotCVtDVF9EQ0NQX0NMT1NFUkVRXQk9IDY0ICogSFosCi0JW0NUX0RDQ1BfQ0xPU0lOR10JPSA2NCAqIEhaLAotCVtDVF9EQ0NQX1RJTUVXQUlUXQk9IDIgKiBEQ0NQX01TTCwKLX07Ci0KIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGNjcF9zdGF0ZV9uYW1lc1tdID0gewogCVtDVF9EQ0NQX05PTkVdCQk9ICJOT05FIiwKIAlbQ1RfRENDUF9SRVFVRVNUXQk9ICJSRVFVRVNUIiwKQEAgLTM5Myw2ICszODQsMjIgQEAKIAl9LAogfTsKIAorLyogdGhpcyBtb2R1bGUgcGVyLW5ldCBzcGVjaWZpY3MgKi8KK3N0YXRpYyBpbnQgZGNjcF9uZXRfaWQ7CitzdHJ1Y3QgZGNjcF9uZXQgeworCWludCBkY2NwX2xvb3NlOworCXVuc2lnbmVkIGludCBkY2NwX3RpbWVvdXRbQ1RfRENDUF9NQVggKyAxXTsKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnN5c2N0bF9oZWFkZXI7CisJc3RydWN0IGN0bF90YWJsZSAqc3lzY3RsX3RhYmxlOworI2VuZGlmCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkY2NwX25ldCAqZGNjcF9wZXJuZXQoc3RydWN0IG5ldCAqbmV0KQoreworCXJldHVybiBuZXRfZ2VuZXJpYyhuZXQsIGRjY3BfbmV0X2lkKTsKK30KKwogc3RhdGljIGJvb2wgZGNjcF9wa3RfdG9fdHVwbGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKQEAgLTQxOSw2ICs0MjYsNyBAQAogCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CisJc3RydWN0IGRjY3BfbmV0ICpkbjsKIAlzdHJ1Y3QgZGNjcF9oZHIgX2RoLCAqZGg7CiAJY29uc3QgY2hhciAqbXNnOwogCXVfaW50OF90IHN0YXRlOwpAQCAtNDI5LDcgKzQzNyw4IEBACiAJc3RhdGUgPSBkY2NwX3N0YXRlX3RhYmxlW0NUX0RDQ1BfUk9MRV9DTElFTlRdW2RoLT5kY2NwaF90eXBlXVtDVF9EQ0NQX05PTkVdOwogCXN3aXRjaCAoc3RhdGUpIHsKIAlkZWZhdWx0OgotCQlpZiAobmZfY3RfZGNjcF9sb29zZSA9PSAwKSB7CisJCWRuID0gZGNjcF9wZXJuZXQobmV0KTsKKwkJaWYgKGRuLT5kY2NwX2xvb3NlID09IDApIHsKIAkJCW1zZyA9ICJuZl9jdF9kY2NwOiBub3QgcGlja2luZyB1cCBleGlzdGluZyBjb25uZWN0aW9uICI7CiAJCQlnb3RvIG91dF9pbnZhbGlkOwogCQl9CkBAIC00NjUsNiArNDc0LDcgQEAKIAkJICAgICAgIHVfaW50OF90IHBmLCB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOworCXN0cnVjdCBkY2NwX25ldCAqZG47CiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlzdHJ1Y3QgZGNjcF9oZHIgX2RoLCAqZGg7CiAJdV9pbnQ4X3QgdHlwZSwgb2xkX3N0YXRlLCBuZXdfc3RhdGU7CkBAIC01NDIsNyArNTUyLDkgQEAKIAljdC0+cHJvdG8uZGNjcC5sYXN0X3BrdCA9IHR5cGU7CiAJY3QtPnByb3RvLmRjY3Auc3RhdGUgPSBuZXdfc3RhdGU7CiAJd3JpdGVfdW5sb2NrX2JoKCZkY2NwX2xvY2spOwotCW5mX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBza2IsIGRjY3BfdGltZW91dFtuZXdfc3RhdGVdKTsKKworCWRuID0gZGNjcF9wZXJuZXQobmV0KTsKKwluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLCBkbi0+ZGNjcF90aW1lb3V0W25ld19zdGF0ZV0pOwogCiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KQEAgLTY1NywxNiArNjY5LDIwIEBACiAJd3JpdGVfdW5sb2NrX2JoKCZkY2NwX2xvY2spOwogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IGRjY3BfbmxhdHRyX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gbmxhX3RvdGFsX3NpemUoMCkJLyogQ1RBX1BST1RPSU5GT19EQ0NQICovCisJCSsgbmxhX3BvbGljeV9sZW4oZGNjcF9ubGFfcG9saWN5LCBDVEFfUFJPVE9JTkZPX0RDQ1BfTUFYICsgMSk7Cit9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGNjcF9zeXNjdGxfdGFibGVfdXNlcnM7Ci1zdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmRjY3Bfc3lzY3RsX2hlYWRlcjsKLXN0YXRpYyBjdGxfdGFibGUgZGNjcF9zeXNjdGxfdGFibGVbXSA9IHsKKy8qIHRlbXBsYXRlLCBkYXRhIGFzc2lnbmVkIGxhdGVyICovCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBkY2NwX3N5c2N0bF90YWJsZVtdID0gewogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X3JlcXVlc3QiLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVRVUVTVF0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC02NzQsNyArNjkwLDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF9yZXNwb25kIiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFU1BPTkRdLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNjgyLDcgKzY5Nyw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfcGFydG9wZW4iLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfUEFSVE9QRU5dLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19qaWZmaWVzLApAQCAtNjkwLDcgKzcwNCw2IEBACiAJewogCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19kY2NwX3RpbWVvdXRfb3BlbiIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTY5OCw3ICs3MTEsNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X2Nsb3NlcmVxIiwKLQkJLmRhdGEJCT0gJmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NFUkVRXSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKQEAgLTcwNiw3ICs3MTgsNiBAQAogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZGNjcF90aW1lb3V0X2Nsb3NpbmciLAotCQkuZGF0YQkJPSAmZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0lOR10sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC03MTQsNyArNzI1LDYgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfdGltZW91dF90aW1ld2FpdCIsCi0JCS5kYXRhCQk9ICZkY2NwX3RpbWVvdXRbQ1RfRENDUF9USU1FV0FJVF0sCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCkBAIC03MjIsOCArNzMyLDcgQEAKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2RjY3BfbG9vc2UiLAotCQkuZGF0YQkJPSAmbmZfY3RfZGNjcF9sb29zZSwKLQkJLm1heGxlbgkJPSBzaXplb2YobmZfY3RfZGNjcF9sb29zZSksCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAogCX0sCkBAIC03NDYsMTYgKzc1NSwxMyBAQAogCS5wcmludF9jb25udHJhY2sJPSBkY2NwX3ByaW50X2Nvbm50cmFjaywKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudG9fbmxhdHRyCQk9IGRjY3BfdG9fbmxhdHRyLAorCS5ubGF0dHJfc2l6ZQkJPSBkY2NwX25sYXR0cl9zaXplLAogCS5mcm9tX25sYXR0cgkJPSBubGF0dHJfdG9fZGNjcCwKIAkudHVwbGVfdG9fbmxhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19ubGF0dHIsCisJLm5sYXR0cl90dXBsZV9zaXplCT0gbmZfY3RfcG9ydF9ubGF0dHJfdHVwbGVfc2l6ZSwKIAkubmxhdHRyX3RvX3R1cGxlCT0gbmZfY3RfcG9ydF9ubGF0dHJfdG9fdHVwbGUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NZU0NUTAotCS5jdGxfdGFibGVfdXNlcnMJPSAmZGNjcF9zeXNjdGxfdGFibGVfdXNlcnMsCi0JLmN0bF90YWJsZV9oZWFkZXIJPSAmZGNjcF9zeXNjdGxfaGVhZGVyLAotCS5jdGxfdGFibGUJCT0gZGNjcF9zeXNjdGxfdGFibGUsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gZGNjcF9wcm90bzYgX19yZWFkX21vc3RseSA9IHsKQEAgLTc3MywzNyArNzc5LDExMSBAQAogCS50b19ubGF0dHIJCT0gZGNjcF90b19ubGF0dHIsCiAJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b19kY2NwLAogCS50dXBsZV90b19ubGF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkJPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKK307CisKK3N0YXRpYyBfX25ldF9pbml0IGludCBkY2NwX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgZGNjcF9uZXQgKmRuOworCWludCBlcnI7CisKKwlkbiA9IGttYWxsb2Moc2l6ZW9mKCpkbiksIEdGUF9LRVJORUwpOworCWlmICghZG4pCisJCXJldHVybiAtRU5PTUVNOworCisJLyogZGVmYXVsdCB2YWx1ZXMgKi8KKwlkbi0+ZGNjcF9sb29zZSA9IDE7CisJZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFUVVFU1RdCT0gMiAqIERDQ1BfTVNMOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9SRVNQT05EXQk9IDQgKiBEQ0NQX01TTDsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUEFSVE9QRU5dCT0gNCAqIERDQ1BfTVNMOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXQkJPSAxMiAqIDM2MDAgKiBIWjsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0VSRVFdCT0gNjQgKiBIWjsKKwlkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfQ0xPU0lOR10JPSA2NCAqIEhaOworCWRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9USU1FV0FJVF0JPSAyICogRENDUF9NU0w7CisKKwllcnIgPSBuZXRfYXNzaWduX2dlbmVyaWMobmV0LCBkY2NwX25ldF9pZCwgZG4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCiAjaWZkZWYgQ09ORklHX1NZU0NUTAotCS5jdGxfdGFibGVfdXNlcnMJPSAmZGNjcF9zeXNjdGxfdGFibGVfdXNlcnMsCi0JLmN0bF90YWJsZV9oZWFkZXIJPSAmZGNjcF9zeXNjdGxfaGVhZGVyLAotCS5jdGxfdGFibGUJCT0gZGNjcF9zeXNjdGxfdGFibGUsCisJZXJyID0gLUVOT01FTTsKKwlkbi0+c3lzY3RsX3RhYmxlID0ga21lbWR1cChkY2NwX3N5c2N0bF90YWJsZSwKKwkJCXNpemVvZihkY2NwX3N5c2N0bF90YWJsZSksIEdGUF9LRVJORUwpOworCWlmICghZG4tPnN5c2N0bF90YWJsZSkKKwkJZ290byBvdXQ7CisKKwlkbi0+c3lzY3RsX3RhYmxlWzBdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX1JFUVVFU1RdOworCWRuLT5zeXNjdGxfdGFibGVbMV0uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfUkVTUE9ORF07CisJZG4tPnN5c2N0bF90YWJsZVsyXS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9QQVJUT1BFTl07CisJZG4tPnN5c2N0bF90YWJsZVszXS5kYXRhID0gJmRuLT5kY2NwX3RpbWVvdXRbQ1RfRENDUF9PUEVOXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzRdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NFUkVRXTsKKwlkbi0+c3lzY3RsX3RhYmxlWzVdLmRhdGEgPSAmZG4tPmRjY3BfdGltZW91dFtDVF9EQ0NQX0NMT1NJTkddOworCWRuLT5zeXNjdGxfdGFibGVbNl0uZGF0YSA9ICZkbi0+ZGNjcF90aW1lb3V0W0NUX0RDQ1BfVElNRVdBSVRdOworCWRuLT5zeXNjdGxfdGFibGVbN10uZGF0YSA9ICZkbi0+ZGNjcF9sb29zZTsKKworCWRuLT5zeXNjdGxfaGVhZGVyID0gcmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShuZXQsCisJCQluZl9uZXRfbmV0ZmlsdGVyX3N5c2N0bF9wYXRoLCBkbi0+c3lzY3RsX3RhYmxlKTsKKwlpZiAoIWRuLT5zeXNjdGxfaGVhZGVyKSB7CisJCWtmcmVlKGRuLT5zeXNjdGxfdGFibGUpOworCQlnb3RvIG91dDsKKwl9CiAjZW5kaWYKKworCXJldHVybiAwOworCitvdXQ6CisJa2ZyZWUoZG4pOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBfX25ldF9leGl0IHZvaWQgZGNjcF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGRjY3BfbmV0ICpkbiA9IGRjY3BfcGVybmV0KG5ldCk7CisjaWZkZWYgQ09ORklHX1NZU0NUTAorCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZShkbi0+c3lzY3RsX2hlYWRlcik7CisJa2ZyZWUoZG4tPnN5c2N0bF90YWJsZSk7CisjZW5kaWYKKwlrZnJlZShkbik7CisKKwluZXRfYXNzaWduX2dlbmVyaWMobmV0LCBkY2NwX25ldF9pZCwgTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgZGNjcF9uZXRfb3BzID0geworCS5pbml0ID0gZGNjcF9uZXRfaW5pdCwKKwkuZXhpdCA9IGRjY3BfbmV0X2V4aXQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWVyciA9IG5mX2Nvbm50cmFja19sNHByb3RvX3JlZ2lzdGVyKCZkY2NwX3Byb3RvNCk7CisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9zdWJzeXMoJmRjY3BfbmV0X2lkLCAmZGNjcF9uZXRfb3BzKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnIxOwogCi0JZXJyID0gbmZfY29ubnRyYWNrX2w0cHJvdG9fcmVnaXN0ZXIoJmRjY3BfcHJvdG82KTsKKwllcnIgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmZGNjcF9wcm90bzQpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycjI7CisKKwllcnIgPSBuZl9jb25udHJhY2tfbDRwcm90b19yZWdpc3RlcigmZGNjcF9wcm90bzYpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycjM7CiAJcmV0dXJuIDA7CiAKLWVycjI6CitlcnIzOgogCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKK2VycjI6CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX3N1YnN5cyhkY2NwX25ldF9pZCwgJmRjY3BfbmV0X29wcyk7CiBlcnIxOgogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuZl9jb25udHJhY2tfcHJvdG9fZGNjcF9maW5pKHZvaWQpCiB7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZ2VuX3N1YnN5cyhkY2NwX25ldF9pZCwgJmRjY3BfbmV0X29wcyk7CiAJbmZfY29ubnRyYWNrX2w0cHJvdG9fdW5yZWdpc3RlcigmZGNjcF9wcm90bzYpOwogCW5mX2Nvbm50cmFja19sNHByb3RvX3VucmVnaXN0ZXIoJmRjY3BfcHJvdG80KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwppbmRleCA0YmU4MGQ3Li44MjkzNzRmNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwpAQCAtOTIsNyArOTIsNyBAQAogc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvIG5mX2Nvbm50cmFja19sNHByb3RvX2dlbmVyaWMgX19yZWFkX21vc3RseSA9CiB7CiAJLmwzcHJvdG8JCT0gUEZfVU5TUEVDLAotCS5sNHByb3RvCQk9IDAsCisJLmw0cHJvdG8JCT0gMjU1LAogCS5uYW1lCQkJPSAidW5rbm93biIsCiAJLnBrdF90b190dXBsZQkJPSBnZW5lcmljX3BrdF90b190dXBsZSwKIAkuaW52ZXJ0X3R1cGxlCQk9IGdlbmVyaWNfaW52ZXJ0X3R1cGxlLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYwppbmRleCAxYjI3OWY5ZC4uMTE3YjgwMSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMKQEAgLTI5Myw2ICsyOTMsNyBAQAogCS5tZSAJCSA9IFRISVNfTU9EVUxFLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50dXBsZV90b19ubGF0dHIgPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUgPSBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGF0dHJfdG9fdHVwbGUgPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkgPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCA3NGUwMzc5Li4xMDFiNGFkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCkBAIC01MzcsNiArNTM3LDEyIEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBzY3RwX25sYXR0cl9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV90b3RhbF9zaXplKDApCS8qIENUQV9QUk9UT0lORk9fU0NUUCAqLworCQkrIG5sYV9wb2xpY3lfbGVuKHNjdHBfbmxhX3BvbGljeSwgQ1RBX1BST1RPSU5GT19TQ1RQX01BWCArIDEpOworfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU1lTQ1RMCkBAIC02NjgsOCArNjc0LDEwIEBACiAJLm1lIAkJCT0gVEhJU19NT0RVTEUsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnRvX25sYXR0cgkJPSBzY3RwX3RvX25sYXR0ciwKKwkubmxhdHRyX3NpemUJCT0gc2N0cF9ubGF0dHJfc2l6ZSwKIAkuZnJvbV9ubGF0dHIJCT0gbmxhdHRyX3RvX3NjdHAsCiAJLnR1cGxlX3RvX25sYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmxhdHRyLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAogCS5ubGFfcG9saWN5CQk9IG5mX2N0X3BvcnRfbmxhX3BvbGljeSwKICNlbmRpZgpAQCAtNjk2LDggKzcwNCwxMCBAQAogCS5tZSAJCQk9IFRISVNfTU9EVUxFLAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTkspIHx8IGRlZmluZWQoQ09ORklHX05GX0NUX05FVExJTktfTU9EVUxFKQogCS50b19ubGF0dHIJCT0gc2N0cF90b19ubGF0dHIsCisJLm5sYXR0cl9zaXplCQk9IHNjdHBfbmxhdHRyX3NpemUsCiAJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b19zY3RwLAogCS50dXBsZV90b19ubGF0dHIJPSBuZl9jdF9wb3J0X3R1cGxlX3RvX25sYXR0ciwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKIAkubmxhX3BvbGljeQkJPSBuZl9jdF9wb3J0X25sYV9wb2xpY3ksCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggYTFlZGI5Yy4uYjVjY2YyYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgPG5ldC90Y3AuaD4KIApAQCAtMjUsNiArMjYsOCBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgogCiAvKiBQcm90ZWN0cyBjdC0+cHJvdG8udGNwICovCiBzdGF0aWMgREVGSU5FX1JXTE9DSyh0Y3BfbG9jayk7CkBAIC00NjYsNyArNDY5LDcgQEAKIAkJCQlmb3IgKGkgPSAwOwogCQkJCSAgICAgaSA8IChvcHNpemUgLSBUQ1BPTEVOX1NBQ0tfQkFTRSk7CiAJCQkJICAgICBpICs9IFRDUE9MRU5fU0FDS19QRVJCTE9DSykgewotCQkJCQl0bXAgPSBudG9obCgqKChfX2JlMzIgKikocHRyK2kpKzEpKTsKKwkJCQkJdG1wID0gZ2V0X3VuYWxpZ25lZF9iZTMyKChfX2JlMzIgKikocHRyK2kpKzEpOwogCiAJCQkJCWlmIChhZnRlcih0bXAsICpzYWNrKSkKIAkJCQkJCSpzYWNrID0gdG1wOwpAQCAtODU5LDcgKzg2Miw3IEBACiAJCQkgKi8KIAkJCWlmIChuZl9jdF9raWxsKGN0KSkKIAkJCQlyZXR1cm4gLU5GX1JFUEVBVDsKLQkJCXJldHVybiAtTkZfRFJPUDsKKwkJCXJldHVybiBORl9EUk9QOwogCQl9CiAJCS8qIEZhbGwgdGhyb3VnaCAqLwogCWNhc2UgVENQX0NPTk5UUkFDS19JR05PUkU6CkBAIC04OTIsNyArODk1LDcgQEAKIAkJCQluZl9sb2dfcGFja2V0KHBmLCAwLCBza2IsIE5VTEwsIE5VTEwsIE5VTEwsCiAJCQkJCSAgIm5mX2N0X3RjcDoga2lsbGluZyBvdXQgb2Ygc3luYyBzZXNzaW9uICIpOwogCQkJbmZfY3Rfa2lsbChjdCk7Ci0JCQlyZXR1cm4gLU5GX0RST1A7CisJCQlyZXR1cm4gTkZfRFJPUDsKIAkJfQogCQljdC0+cHJvdG8udGNwLmxhc3RfaW5kZXggPSBpbmRleDsKIAkJY3QtPnByb3RvLnRjcC5sYXN0X2RpciA9IGRpcjsKQEAgLTExODEsNiArMTE4NCwxNyBAQAogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgdGNwX25sYXR0cl9zaXplKHZvaWQpCit7CisJcmV0dXJuIG5sYV90b3RhbF9zaXplKDApCSAgIC8qIENUQV9QUk9UT0lORk9fVENQICovCisJCSsgbmxhX3BvbGljeV9sZW4odGNwX25sYV9wb2xpY3ksIENUQV9QUk9UT0lORk9fVENQX01BWCArIDEpOworfQorCitzdGF0aWMgaW50IHRjcF9ubGF0dHJfdHVwbGVfc2l6ZSh2b2lkKQoreworCXJldHVybiBubGFfcG9saWN5X2xlbihuZl9jdF9wb3J0X25sYV9wb2xpY3ksIENUQV9QUk9UT19NQVggKyAxKTsKK30KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NZU0NUTApAQCAtMTM5Niw5ICsxNDEwLDExIEBACiAJLmVycm9yCQkJPSB0Y3BfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnRvX25sYXR0cgkJPSB0Y3BfdG9fbmxhdHRyLAorCS5ubGF0dHJfc2l6ZQkJPSB0Y3BfbmxhdHRyX3NpemUsCiAJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b190Y3AsCiAJLnR1cGxlX3RvX25sYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmxhdHRyLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSB0Y3BfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NZU0NUTApAQCAtMTQyNiw5ICsxNDQyLDExIEBACiAJLmVycm9yCQkJPSB0Y3BfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnRvX25sYXR0cgkJPSB0Y3BfdG9fbmxhdHRyLAorCS5ubGF0dHJfc2l6ZQkJPSB0Y3BfbmxhdHRyX3NpemUsCiAJLmZyb21fbmxhdHRyCQk9IG5sYXR0cl90b190Y3AsCiAJLnR1cGxlX3RvX25sYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmxhdHRyLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSB0Y3BfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NZU0NUTApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwppbmRleCAyYjhiMWY1Li43MDgwOWQxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYwpAQCAtMjIsNiArMjIsOCBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2NC9uZl9jb25udHJhY2tfaXB2NC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9jb25udHJhY2tfaXB2Ni5oPgogCiBzdGF0aWMgdW5zaWduZWQgaW50IG5mX2N0X3VkcF90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMCpIWjsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfdWRwX3RpbWVvdXRfc3RyZWFtIF9fcmVhZF9tb3N0bHkgPSAxODAqSFo7CkBAIC0xOTMsNiArMTk1LDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAkudHVwbGVfdG9fbmxhdHRyCT0gbmZfY3RfcG9ydF90dXBsZV90b19ubGF0dHIsCiAJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYV9wb2xpY3kJCT0gbmZfY3RfcG9ydF9ubGFfcG9saWN5LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1NZU0NUTApAQCAtMjIwLDYgKzIyMyw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnR1cGxlX3RvX25sYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmxhdHRyLAogCS5ubGF0dHJfdG9fdHVwbGUJPSBuZl9jdF9wb3J0X25sYXR0cl90b190dXBsZSwKKwkubmxhdHRyX3R1cGxlX3NpemUJPSBuZl9jdF9wb3J0X25sYXR0cl90dXBsZV9zaXplLAogCS5ubGFfcG9saWN5CQk9IG5mX2N0X3BvcnRfbmxhX3BvbGljeSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19TWVNDVEwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcGxpdGUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcGxpdGUuYwppbmRleCA0NTc5ZDhkLi40NjE0Njk2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHBsaXRlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5jCkBAIC0xODAsNiArMTgwLDcgQEAKIAkuZXJyb3IJCQk9IHVkcGxpdGVfZXJyb3IsCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCiAJLnR1cGxlX3RvX25sYXR0cgk9IG5mX2N0X3BvcnRfdHVwbGVfdG9fbmxhdHRyLAorCS5ubGF0dHJfdHVwbGVfc2l6ZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3R1cGxlX3NpemUsCiAJLm5sYXR0cl90b190dXBsZQk9IG5mX2N0X3BvcnRfbmxhdHRyX3RvX3R1cGxlLAogCS5ubGFfcG9saWN5CQk9IG5mX2N0X3BvcnRfbmxhX3BvbGljeSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCmluZGV4IDRkYTU0YjAuLjE5MzUxNTMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKQEAgLTQ0LDQwICs0NCw0MiBAQAogCXVuc2lnbmVkIGludCBidWNrZXQ7CiB9OwogCi1zdGF0aWMgc3RydWN0IGhsaXN0X25vZGUgKmN0X2dldF9maXJzdChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqY3RfZ2V0X2ZpcnN0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwogCXN0cnVjdCBjdF9pdGVyX3N0YXRlICpzdCA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAogCWZvciAoc3QtPmJ1Y2tldCA9IDA7CiAJICAgICBzdC0+YnVja2V0IDwgbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplOwogCSAgICAgc3QtPmJ1Y2tldCsrKSB7CiAJCW4gPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKLQkJaWYgKG4pCisJCWlmICghaXNfYV9udWxscyhuKSkKIAkJCXJldHVybiBuOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBobGlzdF9ub2RlICpjdF9nZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKLQkJCQkgICAgICBzdHJ1Y3QgaGxpc3Rfbm9kZSAqaGVhZCkKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqY3RfZ2V0X25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsCisJCQkJICAgICAgc3RydWN0IGhsaXN0X251bGxzX25vZGUgKmhlYWQpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7CiAJc3RydWN0IGN0X2l0ZXJfc3RhdGUgKnN0ID0gc2VxLT5wcml2YXRlOwogCiAJaGVhZCA9IHJjdV9kZXJlZmVyZW5jZShoZWFkLT5uZXh0KTsKLQl3aGlsZSAoaGVhZCA9PSBOVUxMKSB7Ci0JCWlmICgrK3N0LT5idWNrZXQgPj0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQotCQkJcmV0dXJuIE5VTEw7CisJd2hpbGUgKGlzX2FfbnVsbHMoaGVhZCkpIHsKKwkJaWYgKGxpa2VseShnZXRfbnVsbHNfdmFsdWUoaGVhZCkgPT0gc3QtPmJ1Y2tldCkpIHsKKwkJCWlmICgrK3N0LT5idWNrZXQgPj0gbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKQorCQkJCXJldHVybiBOVUxMOworCQl9CiAJCWhlYWQgPSByY3VfZGVyZWZlcmVuY2UobmV0LT5jdC5oYXNoW3N0LT5idWNrZXRdLmZpcnN0KTsKIAl9CiAJcmV0dXJuIGhlYWQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGxpc3Rfbm9kZSAqY3RfZ2V0X2lkeChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90IHBvcykKK3N0YXRpYyBzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqY3RfZ2V0X2lkeChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90IHBvcykKIHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaGVhZCA9IGN0X2dldF9maXJzdChzZXEpOworCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpoZWFkID0gY3RfZ2V0X2ZpcnN0KHNlcSk7CiAKIAlpZiAoaGVhZCkKIAkJd2hpbGUgKHBvcyAmJiAoaGVhZCA9IGN0X2dldF9uZXh0KHNlcSwgaGVhZCkpKQpAQCAtMTA3LDY3ICsxMDksNzQgQEAKIC8qIHJldHVybiAwIG9uIHN1Y2Nlc3MsIDEgaW4gY2FzZSBvZiBlcnJvciAqLwogc3RhdGljIGludCBjdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7Ci0JY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoYXNoID0gdjsKLQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGhhc2gpOworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaGFzaCA9IHY7CisJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoYXNoKTsKIAljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG87CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvOworCWludCByZXQgPSAwOwogCiAJTkZfQ1RfQVNTRVJUKGN0KTsKKwlpZiAodW5saWtlbHkoIWF0b21pY19pbmNfbm90X3plcm8oJmN0LT5jdF9nZW5lcmFsLnVzZSkpKQorCQlyZXR1cm4gMDsKIAogCS8qIHdlIG9ubHkgd2FudCB0byBwcmludCBESVJfT1JJR0lOQUwgKi8KIAlpZiAoTkZfQ1RfRElSRUNUSU9OKGhhc2gpKQotCQlyZXR1cm4gMDsKKwkJZ290byByZWxlYXNlOwogCiAJbDNwcm90byA9IF9fbmZfY3RfbDNwcm90b19maW5kKG5mX2N0X2wzbnVtKGN0KSk7CiAJTkZfQ1RfQVNTRVJUKGwzcHJvdG8pOwogCWw0cHJvdG8gPSBfX25mX2N0X2w0cHJvdG9fZmluZChuZl9jdF9sM251bShjdCksIG5mX2N0X3Byb3RvbnVtKGN0KSk7CiAJTkZfQ1RfQVNTRVJUKGw0cHJvdG8pOwogCisJcmV0ID0gLUVOT1NQQzsKIAlpZiAoc2VxX3ByaW50ZihzLCAiJS04cyAldSAlLThzICV1ICVsZCAiLAogCQkgICAgICAgbDNwcm90by0+bmFtZSwgbmZfY3RfbDNudW0oY3QpLAogCQkgICAgICAgbDRwcm90by0+bmFtZSwgbmZfY3RfcHJvdG9udW0oY3QpLAogCQkgICAgICAgdGltZXJfcGVuZGluZygmY3QtPnRpbWVvdXQpCiAJCSAgICAgICA/IChsb25nKShjdC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykvSFogOiAwKSAhPSAwKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKGw0cHJvdG8tPnByaW50X2Nvbm50cmFjayAmJiBsNHByb3RvLT5wcmludF9jb25udHJhY2socywgY3QpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHByaW50X3R1cGxlKHMsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUsCiAJCQlsM3Byb3RvLCBsNHByb3RvKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKIAogCWlmIChzZXFfcHJpbnRfYWNjdChzLCBjdCwgSVBfQ1RfRElSX09SSUdJTkFMKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKIAogCWlmICghKHRlc3RfYml0KElQU19TRUVOX1JFUExZX0JJVCwgJmN0LT5zdGF0dXMpKSkKIAkJaWYgKHNlcV9wcmludGYocywgIltVTlJFUExJRURdICIpKQotCQkJcmV0dXJuIC1FTk9TUEM7CisJCQlnb3RvIHJlbGVhc2U7CiAKIAlpZiAocHJpbnRfdHVwbGUocywgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSwKIAkJCWwzcHJvdG8sIGw0cHJvdG8pKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHNlcV9wcmludF9hY2N0KHMsIGN0LCBJUF9DVF9ESVJfUkVQTFkpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCiAJaWYgKHRlc3RfYml0KElQU19BU1NVUkVEX0JJVCwgJmN0LT5zdGF0dXMpKQogCQlpZiAoc2VxX3ByaW50ZihzLCAiW0FTU1VSRURdICIpKQotCQkJcmV0dXJuIC1FTk9TUEM7CisJCQlnb3RvIHJlbGVhc2U7CiAKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSykKIAlpZiAoc2VxX3ByaW50ZihzLCAibWFyaz0ldSAiLCBjdC0+bWFyaykpCi0JCXJldHVybiAtRU5PU1BDOworCQlnb3RvIHJlbGVhc2U7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfU0VDTUFSSwogCWlmIChzZXFfcHJpbnRmKHMsICJzZWNtYXJrPSV1ICIsIGN0LT5zZWNtYXJrKSkKLQkJcmV0dXJuIC1FTk9TUEM7CisJCWdvdG8gcmVsZWFzZTsKICNlbmRpZgogCiAJaWYgKHNlcV9wcmludGYocywgInVzZT0ldVxuIiwgYXRvbWljX3JlYWQoJmN0LT5jdF9nZW5lcmFsLnVzZSkpKQotCQlyZXR1cm4gLUVOT1NQQzsKKwkJZ290byByZWxlYXNlOwogCisJcmV0ID0gMDsKK3JlbGVhc2U6CisJbmZfY3RfcHV0KGN0KTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKaW5kZXggZmE4YWU1ZC4uOGJiOTk4ZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCkBAIC0xNCw1OCArMTQsNjMgQEAKICAgIExPRyB0YXJnZXQgbW9kdWxlcyAqLwogCiAjZGVmaW5lIE5GX0xPR19QUkVGSVhMRU4JCTEyOAorI2RlZmluZSBORkxPR0dFUl9OQU1FX0xFTgkJNjQKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKm5mX2xvZ2dlcnNbTkZQUk9UT19OVU1QUk9UT10gX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIG5mX2xvZ2dlcnNfbFtORlBST1RPX05VTVBST1RPXSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIERFRklORV9NVVRFWChuZl9sb2dfbXV0ZXgpOwogCi0vKiByZXR1cm4gRUJVU1kgaWYgc29tZWJvZHkgZWxzZSBpcyByZWdpc3RlcmVkLCBFRVhJU1QgaWYgdGhlIHNhbWUgbG9nZ2VyCi0gKiBpcyByZWdpc3RyZWQsIDAgb24gc3VjY2Vzcy4gKi8KLWludCBuZl9sb2dfcmVnaXN0ZXIodV9pbnQ4X3QgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcikKK3N0YXRpYyBzdHJ1Y3QgbmZfbG9nZ2VyICpfX2ZpbmRfbG9nZ2VyKGludCBwZiwgY29uc3QgY2hhciAqc3RyX2xvZ2dlcikKIHsKLQlpbnQgcmV0OworCXN0cnVjdCBuZl9sb2dnZXIgKnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZuZl9sb2dnZXJzX2xbcGZdLCBsaXN0W3BmXSkgeworCQlpZiAoIXN0cm5pY21wKHN0cl9sb2dnZXIsIHQtPm5hbWUsIHN0cmxlbih0LT5uYW1lKSkpCisJCQlyZXR1cm4gdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyogcmV0dXJuIEVFWElTVCBpZiB0aGUgc2FtZSBsb2dnZXIgaXMgcmVnaXN0cmVkLCAwIG9uIHN1Y2Nlc3MuICovCitpbnQgbmZfbG9nX3JlZ2lzdGVyKHVfaW50OF90IHBmLCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCit7CisJY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbGxvZzsKIAogCWlmIChwZiA+PSBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEFueSBzZXR1cCBvZiBsb2dnaW5nIG1lbWJlcnMgbXVzdCBiZSBkb25lIGJlZm9yZQotCSAqIHN1YnN0aXR1dGluZyBwb2ludGVyLiAqLwotCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmbmZfbG9nX211dGV4KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKKwltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCi0JaWYgKCFuZl9sb2dnZXJzW3BmXSkKLQkJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbcGZdLCBsb2dnZXIpOwotCWVsc2UgaWYgKG5mX2xvZ2dlcnNbcGZdID09IGxvZ2dlcikKLQkJcmV0ID0gLUVFWElTVDsKLQllbHNlCi0JCXJldCA9IC1FQlVTWTsKKwlpZiAocGYgPT0gTkZQUk9UT19VTlNQRUMpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IE5GUFJPVE9fVU5TUEVDOyBpIDwgTkZQUk9UT19OVU1QUk9UTzsgaSsrKQorCQkJbGlzdF9hZGRfdGFpbCgmKGxvZ2dlci0+bGlzdFtpXSksICYobmZfbG9nZ2Vyc19sW2ldKSk7CisJfSBlbHNlIHsKKwkJLyogcmVnaXN0ZXIgYXQgZW5kIG9mIGxpc3QgdG8gaG9ub3IgZmlyc3QgcmVnaXN0ZXIgd2luICovCisJCWxpc3RfYWRkX3RhaWwoJmxvZ2dlci0+bGlzdFtwZl0sICZuZl9sb2dnZXJzX2xbcGZdKTsKKwkJbGxvZyA9IHJjdV9kZXJlZmVyZW5jZShuZl9sb2dnZXJzW3BmXSk7CisJCWlmIChsbG9nID09IE5VTEwpCisJCQlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIGxvZ2dlcik7CisJfQogCiAJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwotCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wobmZfbG9nX3JlZ2lzdGVyKTsKIAotdm9pZCBuZl9sb2dfdW5yZWdpc3Rlcl9wZih1X2ludDhfdCBwZikKK3ZvaWQgbmZfbG9nX3VucmVnaXN0ZXIoc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKQogewotCWlmIChwZiA+PSBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpKQotCQlyZXR1cm47Ci0JbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKLQlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIE5VTEwpOwotCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKLQotCS8qIEdpdmUgdGltZSB0byBjb25jdXJyZW50IHJlYWRlcnMuICovCi0Jc3luY2hyb25pemVfcmN1KCk7Ci19Ci1FWFBPUlRfU1lNQk9MKG5mX2xvZ191bnJlZ2lzdGVyX3BmKTsKLQotdm9pZCBuZl9sb2dfdW5yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXIpCi17CisJY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqY19sb2dnZXI7CiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpOyBpKyspIHsKLQkJaWYgKG5mX2xvZ2dlcnNbaV0gPT0gbG9nZ2VyKQorCQljX2xvZ2dlciA9IHJjdV9kZXJlZmVyZW5jZShuZl9sb2dnZXJzW2ldKTsKKwkJaWYgKGNfbG9nZ2VyID09IGxvZ2dlcikKIAkJCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9sb2dnZXJzW2ldLCBOVUxMKTsKKwkJbGlzdF9kZWwoJmxvZ2dlci0+bGlzdFtpXSk7CiAJfQogCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKIApAQCAtNzMsNiArNzgsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0wobmZfbG9nX3VucmVnaXN0ZXIpOwogCitpbnQgbmZfbG9nX2JpbmRfcGYodV9pbnQ4X3QgcGYsIGNvbnN0IHN0cnVjdCBuZl9sb2dnZXIgKmxvZ2dlcikKK3sKKwltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOworCWlmIChfX2ZpbmRfbG9nZ2VyKHBmLCBsb2dnZXItPm5hbWUpID09IE5VTEwpIHsKKwkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbcGZdLCBsb2dnZXIpOworCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobmZfbG9nX2JpbmRfcGYpOworCit2b2lkIG5mX2xvZ191bmJpbmRfcGYodV9pbnQ4X3QgcGYpCit7CisJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIE5VTEwpOworCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0wobmZfbG9nX3VuYmluZF9wZik7CisKIHZvaWQgbmZfbG9nX3BhY2tldCh1X2ludDhfdCBwZiwKIAkJICAgdW5zaWduZWQgaW50IGhvb2tudW0sCiAJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCkBAIC0xMjksMTMgKzE1NSwzNyBAQAogewogCWxvZmZfdCAqcG9zID0gdjsKIAljb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXI7CisJc3RydWN0IG5mX2xvZ2dlciAqdDsKKwlpbnQgcmV0OwogCiAJbG9nZ2VyID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbKnBvc10pOwogCiAJaWYgKCFsb2dnZXIpCi0JCXJldHVybiBzZXFfcHJpbnRmKHMsICIlMmxsZCBOT05FXG4iLCAqcG9zKTsKKwkJcmV0ID0gc2VxX3ByaW50ZihzLCAiJTJsbGQgTk9ORSAoIiwgKnBvcyk7CisJZWxzZQorCQlyZXQgPSBzZXFfcHJpbnRmKHMsICIlMmxsZCAlcyAoIiwgKnBvcywgbG9nZ2VyLT5uYW1lKTsKIAotCXJldHVybiBzZXFfcHJpbnRmKHMsICIlMmxsZCAlc1xuIiwgKnBvcywgbG9nZ2VyLT5uYW1lKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJm5mX2xvZ19tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmbmZfbG9nZ2Vyc19sWypwb3NdLCBsaXN0Wypwb3NdKSB7CisJCXJldCA9IHNlcV9wcmludGYocywgIiVzIiwgdC0+bmFtZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWlmICgmdC0+bGlzdFsqcG9zXSAhPSBuZl9sb2dnZXJzX2xbKnBvc10ucHJldikgeworCQkJcmV0ID0gc2VxX3ByaW50ZihzLCAiLCIpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisJCQkJcmV0dXJuIHJldDsKKwkJCX0KKwkJfQorCX0KKwltdXRleF91bmxvY2soJm5mX2xvZ19tdXRleCk7CisKKwlyZXR1cm4gc2VxX3ByaW50ZihzLCAiKVxuIik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbmZsb2dfc2VxX29wcyA9IHsKQEAgLTE1OCwxNSArMjA4LDEwMiBAQAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCiB9OwogCisKICNlbmRpZiAvKiBQUk9DX0ZTICovCiAKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCitzdHJ1Y3QgY3RsX3BhdGggbmZfbG9nX3N5c2N0bF9wYXRoW10gPSB7CisJeyAucHJvY25hbWUgPSAibmV0IiwgLmN0bF9uYW1lID0gQ1RMX05FVCwgfSwKKwl7IC5wcm9jbmFtZSA9ICJuZXRmaWx0ZXIiLCAuY3RsX25hbWUgPSBORVRfTkVURklMVEVSLCB9LAorCXsgLnByb2NuYW1lID0gIm5mX2xvZyIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgfQorfTsKKworc3RhdGljIGNoYXIgbmZfbG9nX3N5c2N0bF9mbmFtZXNbTkZQUk9UT19OVU1QUk9UTy1ORlBST1RPX1VOU1BFQ11bM107CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBuZl9sb2dfc3lzY3RsX3RhYmxlW05GUFJPVE9fTlVNUFJPVE8rMV07CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKm5mX2xvZ19kaXJfaGVhZGVyOworCitzdGF0aWMgaW50IG5mX2xvZ19wcm9jX2Rvc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgdm9pZCAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKK3sKKwljb25zdCBzdHJ1Y3QgbmZfbG9nZ2VyICpsb2dnZXI7CisJaW50IHIgPSAwOworCWludCB0aW5kZXggPSAodW5zaWduZWQgbG9uZyl0YWJsZS0+ZXh0cmExOworCisJaWYgKHdyaXRlKSB7CisJCWlmICghc3RyY21wKGJ1ZmZlciwgIk5PTkUiKSkgeworCQkJbmZfbG9nX3VuYmluZF9wZih0aW5kZXgpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKKwkJbG9nZ2VyID0gX19maW5kX2xvZ2dlcih0aW5kZXgsIGJ1ZmZlcik7CisJCWlmIChsb2dnZXIgPT0gTlVMTCkgeworCQkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX2xvZ2dlcnNbdGluZGV4XSwgbG9nZ2VyKTsKKwkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOworCX0gZWxzZSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJbG9nZ2VyID0gcmN1X2RlcmVmZXJlbmNlKG5mX2xvZ2dlcnNbdGluZGV4XSk7CisJCWlmICghbG9nZ2VyKQorCQkJdGFibGUtPmRhdGEgPSAiTk9ORSI7CisJCWVsc2UKKwkJCXRhYmxlLT5kYXRhID0gbG9nZ2VyLT5uYW1lOworCQlyID0gcHJvY19kb3N0cmluZyh0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCXJldHVybiByOworfQorCitzdGF0aWMgX19pbml0IGludCBuZXRmaWx0ZXJfbG9nX3N5c2N0bF9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSBORlBST1RPX1VOU1BFQzsgaSA8IE5GUFJPVE9fTlVNUFJPVE87IGkrKykgeworCQlzbnByaW50ZihuZl9sb2dfc3lzY3RsX2ZuYW1lc1tpLU5GUFJPVE9fVU5TUEVDXSwgMywgIiVkIiwgaSk7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0uY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRDsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5wcm9jbmFtZQk9CisJCQluZl9sb2dfc3lzY3RsX2ZuYW1lc1tpLU5GUFJPVE9fVU5TUEVDXTsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5kYXRhID0gTlVMTDsKKwkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5tYXhsZW4gPQorCQkJTkZMT0dHRVJfTkFNRV9MRU4gKiBzaXplb2YoY2hhcik7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0ubW9kZSA9IDA2NDQ7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0ucHJvY19oYW5kbGVyID0gbmZfbG9nX3Byb2NfZG9zdHJpbmc7CisJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0uZXh0cmExID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykgaTsKKwl9CisKKwluZl9sb2dfZGlyX2hlYWRlciA9IHJlZ2lzdGVyX3N5c2N0bF9wYXRocyhuZl9sb2dfc3lzY3RsX3BhdGgsCisJCQkJICAgICAgIG5mX2xvZ19zeXNjdGxfdGFibGUpOworCWlmICghbmZfbG9nX2Rpcl9oZWFkZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorc3RhdGljIF9faW5pdCBpbnQgbmV0ZmlsdGVyX2xvZ19zeXNjdGxfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KIAogaW50IF9faW5pdCBuZXRmaWx0ZXJfbG9nX2luaXQodm9pZCkKIHsKKwlpbnQgaSwgcjsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWlmICghcHJvY19jcmVhdGUoIm5mX2xvZyIsIFNfSVJVR08sCiAJCQkgcHJvY19uZXRfbmV0ZmlsdGVyLCAmbmZsb2dfZmlsZV9vcHMpKQogCQlyZXR1cm4gLTE7CiAjZW5kaWYKKworCS8qIEVycm9ycyB3aWxsIHRyaWdnZXIgcGFuaWMsIHVucm9sbCBvbiBlcnJvciBpcyB1bm5lY2Vzc2FyeS4gKi8KKwlyID0gbmV0ZmlsdGVyX2xvZ19zeXNjdGxfaW5pdCgpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlmb3IgKGkgPSBORlBST1RPX1VOU1BFQzsgaSA8IE5GUFJPVE9fTlVNUFJPVE87IGkrKykKKwkJSU5JVF9MSVNUX0hFQUQoJihuZl9sb2dnZXJzX2xbaV0pKTsKKwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCmluZGV4IGNkYzk3ZjMuLjU0OTBmYzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKQEAgLTcxLDYgKzcxLDcgQEAKIG5mX3Rwcm94eV9hc3NpZ25fc29jayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaWYgKGluZXRfc2soc2spLT50cmFuc3BhcmVudCkgeworCQlza2Jfb3JwaGFuKHNrYik7CiAJCXNrYi0+c2sgPSBzazsKIAkJc2tiLT5kZXN0cnVjdG9yID0gbmZfdHByb3h5X2Rlc3RydWN0b3I7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKaW5kZXggOWMwYmExNy4uMjc4NWQ2NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCkBAIC0xMTMsNiArMTEzLDEyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZm5ldGxpbmtfc2VuZCk7CiAKK3ZvaWQgbmZuZXRsaW5rX3NldF9lcnIodTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpCit7CisJbmV0bGlua19zZXRfZXJyKG5mbmwsIHBpZCwgZ3JvdXAsIGVycm9yKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua19zZXRfZXJyKTsKKwogaW50IG5mbmV0bGlua191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHVfaW50MzJfdCBwaWQsIGludCBmbGFncykKIHsKIAlyZXR1cm4gbmV0bGlua191bmljYXN0KG5mbmwsIHNrYiwgcGlkLCBmbGFncyk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCmluZGV4IGM3MTJlOWYuLmZkMzI2YWMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCkBAIC02OTMsNyArNjkzLDcgQEAKIAlyZXR1cm4gLUVOT1RTVVBQOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciBuZnVsbmxfbG9nZ2VyID0geworc3RhdGljIHN0cnVjdCBuZl9sb2dnZXIgbmZ1bG5sX2xvZ2dlciBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCT0gIm5mbmV0bGlua19sb2ciLAogCS5sb2dmbgk9ICZuZnVsbmxfbG9nX3BhY2tldCwKIAkubWUJPSBUSElTX01PRFVMRSwKQEAgLTcyNSw5ICs3MjUsOSBAQAogCQkvKiBDb21tYW5kcyB3aXRob3V0IHF1ZXVlIGNvbnRleHQgKi8KIAkJc3dpdGNoIChjbWQtPmNvbW1hbmQpIHsKIAkJY2FzZSBORlVMTkxfQ0ZHX0NNRF9QRl9CSU5EOgotCQkJcmV0dXJuIG5mX2xvZ19yZWdpc3RlcihwZiwgJm5mdWxubF9sb2dnZXIpOworCQkJcmV0dXJuIG5mX2xvZ19iaW5kX3BmKHBmLCAmbmZ1bG5sX2xvZ2dlcik7CiAJCWNhc2UgTkZVTE5MX0NGR19DTURfUEZfVU5CSU5EOgotCQkJbmZfbG9nX3VucmVnaXN0ZXJfcGYocGYpOworCQkJbmZfbG9nX3VuYmluZF9wZihwZik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTk1MiwxNyArOTUyLDI1IEBACiAJCWdvdG8gY2xlYW51cF9uZXRsaW5rX25vdGlmaWVyOwogCX0KIAorCXN0YXR1cyA9IG5mX2xvZ19yZWdpc3RlcihORlBST1RPX1VOU1BFQywgJm5mdWxubF9sb2dnZXIpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibG9nOiBmYWlsZWQgdG8gcmVnaXN0ZXIgbG9nZ2VyXG4iKTsKKwkJZ290byBjbGVhbnVwX3N1YnN5czsKKwl9CisKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWlmICghcHJvY19jcmVhdGUoIm5mbmV0bGlua19sb2ciLCAwNDQwLAogCQkJIHByb2NfbmV0X25ldGZpbHRlciwgJm5mdWxfZmlsZV9vcHMpKQotCQlnb3RvIGNsZWFudXBfc3Vic3lzOworCQlnb3RvIGNsZWFudXBfbG9nZ2VyOwogI2VuZGlmCiAJcmV0dXJuIHN0YXR1czsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCitjbGVhbnVwX2xvZ2dlcjoKKwluZl9sb2dfdW5yZWdpc3RlcigmbmZ1bG5sX2xvZ2dlcik7CisjZW5kaWYKIGNsZWFudXBfc3Vic3lzOgogCW5mbmV0bGlua19zdWJzeXNfdW5yZWdpc3RlcigmbmZ1bG5sX3N1YnN5cyk7Ci0jZW5kaWYKIGNsZWFudXBfbmV0bGlua19ub3RpZmllcjoKIAluZXRsaW5rX3VucmVnaXN0ZXJfbm90aWZpZXIoJm5mdWxubF9ydG5sX25vdGlmaWVyKTsKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IDViYWNjZmEuLjUwOWE5NTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTYyNSw2ICs2MjUsMjAgQEAKIH0KIEVYUE9SVF9TWU1CT0woeHRfZnJlZV90YWJsZV9pbmZvKTsKIAordm9pZCB4dF90YWJsZV9lbnRyeV9zd2FwX3JjdShzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqb2xkaW5mbywKKwkJCSAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCit7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJdm9pZCAqcCA9IG9sZGluZm8tPmVudHJpZXNbY3B1XTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG9sZGluZm8tPmVudHJpZXNbY3B1XSwgbmV3aW5mby0+ZW50cmllc1tjcHVdKTsKKwkJbmV3aW5mby0+ZW50cmllc1tjcHVdID0gcDsKKwl9CisKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHh0X3RhYmxlX2VudHJ5X3N3YXBfcmN1KTsKKwogLyogRmluZCB0YWJsZSBieSBuYW1lLCBncmFicyBtdXRleCAmIHJlZi4gIFJldHVybnMgRVJSX1BUUigpIG9uIGVycm9yLiAqLwogc3RydWN0IHh0X3RhYmxlICp4dF9maW5kX3RhYmxlX2xvY2soc3RydWN0IG5ldCAqbmV0LCB1X2ludDhfdCBhZiwKIAkJCQkgICAgY29uc3QgY2hhciAqbmFtZSkKQEAgLTY3MSwyMSArNjg1LDIyIEBACiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKm9sZGluZm8sICpwcml2YXRlOwogCiAJLyogRG8gdGhlIHN1YnN0aXR1dGlvbi4gKi8KLQl3cml0ZV9sb2NrX2JoKCZ0YWJsZS0+bG9jayk7CisJbXV0ZXhfbG9jaygmdGFibGUtPmxvY2spOwogCXByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKIAkvKiBDaGVjayBpbnNpZGUgbG9jazogaXMgdGhlIG9sZCBudW1iZXIgY29ycmVjdD8gKi8KIAlpZiAobnVtX2NvdW50ZXJzICE9IHByaXZhdGUtPm51bWJlcikgewogCQlkdXByaW50ZigibnVtX2NvdW50ZXJzICE9IHRhYmxlLT5wcml2YXRlLT5udW1iZXIgKCV1LyV1KVxuIiwKIAkJCSBudW1fY291bnRlcnMsIHByaXZhdGUtPm51bWJlcik7Ci0JCXdyaXRlX3VubG9ja19iaCgmdGFibGUtPmxvY2spOworCQltdXRleF91bmxvY2soJnRhYmxlLT5sb2NrKTsKIAkJKmVycm9yID0gLUVBR0FJTjsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW9sZGluZm8gPSBwcml2YXRlOwotCXRhYmxlLT5wcml2YXRlID0gbmV3aW5mbzsKKwlyY3VfYXNzaWduX3BvaW50ZXIodGFibGUtPnByaXZhdGUsIG5ld2luZm8pOwogCW5ld2luZm8tPmluaXRpYWxfZW50cmllcyA9IG9sZGluZm8tPmluaXRpYWxfZW50cmllczsKLQl3cml0ZV91bmxvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwltdXRleF91bmxvY2soJnRhYmxlLT5sb2NrKTsKIAorCXN5bmNocm9uaXplX25ldCgpOwogCXJldHVybiBvbGRpbmZvOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfcmVwbGFjZV90YWJsZSk7CkBAIC03MTksNyArNzM0LDggQEAKIAogCS8qIFNpbXBsaWZpZXMgcmVwbGFjZV90YWJsZSBjb2RlLiAqLwogCXRhYmxlLT5wcml2YXRlID0gYm9vdHN0cmFwOwotCXJ3bG9ja19pbml0KCZ0YWJsZS0+bG9jayk7CisJbXV0ZXhfaW5pdCgmdGFibGUtPmxvY2spOworCiAJaWYgKCF4dF9yZXBsYWNlX3RhYmxlKHRhYmxlLCAwLCBuZXdpbmZvLCAmcmV0KSkKIAkJZ290byB1bmxvY2s7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfSEwuYyBiL25ldC9uZXRmaWx0ZXIveHRfSEwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGU3ODllCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9ITC5jCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogVFRMIG1vZGlmaWNhdGlvbiB0YXJnZXQgZm9yIElQIHRhYmxlcworICogKEMpIDIwMDAsMjAwNSBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KKyAqCisgKiBIb3AgTGltaXQgbW9kaWZpY2F0aW9uIHRhcmdldCBmb3IgaXA2dGFibGVzCisgKiBNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RUTC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfSEwuaD4KKworTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7CitNT0RVTEVfQVVUSE9SKCJNYWNpZWogU29sdHlzaWFrIDxzb2x0QGRucy50b3hpY2ZpbG1zLnR2PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiBIb3BsaW1pdC9UVEwgTGltaXQgZmllbGQgbW9kaWZpY2F0aW9uIHRhcmdldCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgdW5zaWduZWQgaW50Cit0dGxfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQoreworCXN0cnVjdCBpcGhkciAqaXBoOworCWNvbnN0IHN0cnVjdCBpcHRfVFRMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCWludCBuZXdfdHRsOworCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNrYi0+bGVuKSkKKwkJcmV0dXJuIE5GX0RST1A7CisKKwlpcGggPSBpcF9oZHIoc2tiKTsKKworCXN3aXRjaCAoaW5mby0+bW9kZSkgeworCQljYXNlIElQVF9UVExfU0VUOgorCQkJbmV3X3R0bCA9IGluZm8tPnR0bDsKKwkJCWJyZWFrOworCQljYXNlIElQVF9UVExfSU5DOgorCQkJbmV3X3R0bCA9IGlwaC0+dHRsICsgaW5mby0+dHRsOworCQkJaWYgKG5ld190dGwgPiAyNTUpCisJCQkJbmV3X3R0bCA9IDI1NTsKKwkJCWJyZWFrOworCQljYXNlIElQVF9UVExfREVDOgorCQkJbmV3X3R0bCA9IGlwaC0+dHRsIC0gaW5mby0+dHRsOworCQkJaWYgKG5ld190dGwgPCAwKQorCQkJCW5ld190dGwgPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQluZXdfdHRsID0gaXBoLT50dGw7CisJCQlicmVhazsKKwl9CisKKwlpZiAobmV3X3R0bCAhPSBpcGgtPnR0bCkgeworCQljc3VtX3JlcGxhY2UyKCZpcGgtPmNoZWNrLCBodG9ucyhpcGgtPnR0bCA8PCA4KSwKKwkJCQkJICAgaHRvbnMobmV3X3R0bCA8PCA4KSk7CisJCWlwaC0+dHRsID0gbmV3X3R0bDsKKwl9CisKKwlyZXR1cm4gWFRfQ09OVElOVUU7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2hsX3RnNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCit7CisJc3RydWN0IGlwdjZoZHIgKmlwNmg7CisJY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisJaW50IG5ld19obDsKKworCWlmICghc2tiX21ha2Vfd3JpdGFibGUoc2tiLCBza2ItPmxlbikpCisJCXJldHVybiBORl9EUk9QOworCisJaXA2aCA9IGlwdjZfaGRyKHNrYik7CisKKwlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKKwkJY2FzZSBJUDZUX0hMX1NFVDoKKwkJCW5ld19obCA9IGluZm8tPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCQljYXNlIElQNlRfSExfSU5DOgorCQkJbmV3X2hsID0gaXA2aC0+aG9wX2xpbWl0ICsgaW5mby0+aG9wX2xpbWl0OworCQkJaWYgKG5ld19obCA+IDI1NSkKKwkJCQluZXdfaGwgPSAyNTU7CisJCQlicmVhazsKKwkJY2FzZSBJUDZUX0hMX0RFQzoKKwkJCW5ld19obCA9IGlwNmgtPmhvcF9saW1pdCAtIGluZm8tPmhvcF9saW1pdDsKKwkJCWlmIChuZXdfaGwgPCAwKQorCQkJCW5ld19obCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW5ld19obCA9IGlwNmgtPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCX0KKworCWlwNmgtPmhvcF9saW1pdCA9IG5ld19obDsKKworCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIGJvb2wgdHRsX3RnX2NoZWNrKGNvbnN0IHN0cnVjdCB4dF90Z2Noa19wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCBpcHRfVFRMX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCisJaWYgKGluZm8tPm1vZGUgPiBJUFRfVFRMX01BWE1PREUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXB0X1RUTDogaW52YWxpZCBvciB1bmtub3duIE1vZGUgJXVcbiIsCisJCQlpbmZvLT5tb2RlKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpZiAoaW5mby0+bW9kZSAhPSBJUFRfVFRMX1NFVCAmJiBpbmZvLT50dGwgPT0gMCkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBobF90ZzZfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IGlwNnRfSExfaW5mbyAqaW5mbyA9IHBhci0+dGFyZ2luZm87CisKKwlpZiAoaW5mby0+bW9kZSA+IElQNlRfSExfTUFYTU9ERSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpcDZ0X0hMOiBpbnZhbGlkIG9yIHVua25vd24gTW9kZSAldVxuIiwKKwkJCWluZm8tPm1vZGUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChpbmZvLT5tb2RlICE9IElQNlRfSExfU0VUICYmIGluZm8tPmhvcF9saW1pdCA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwNnRfSEw6IGluY3JlbWVudC9kZWNyZW1lbnQgZG9lc24ndCAiCisJCQkibWFrZSBzZW5zZSB3aXRoIHZhbHVlIDBcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBobF90Z19yZWdbXSBfX3JlYWRfbW9zdGx5ID0geworCXsKKwkJLm5hbWUgICAgICAgPSAiVFRMIiwKKwkJLnJldmlzaW9uICAgPSAwLAorCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNCwKKwkJLnRhcmdldCAgICAgPSB0dGxfdGcsCisJCS50YXJnZXRzaXplID0gc2l6ZW9mKHN0cnVjdCBpcHRfVFRMX2luZm8pLAorCQkudGFibGUgICAgICA9ICJtYW5nbGUiLAorCQkuY2hlY2tlbnRyeSA9IHR0bF90Z19jaGVjaywKKwkJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgPSAiSEwiLAorCQkucmV2aXNpb24gICA9IDAsCisJCS5mYW1pbHkgICAgID0gTkZQUk9UT19JUFY2LAorCQkudGFyZ2V0ICAgICA9IGhsX3RnNiwKKwkJLnRhcmdldHNpemUgPSBzaXplb2Yoc3RydWN0IGlwNnRfSExfaW5mbyksCisJCS50YWJsZSAgICAgID0gIm1hbmdsZSIsCisJCS5jaGVja2VudHJ5ID0gaGxfdGc2X2NoZWNrLAorCQkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBobF90Z19pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldHMoaGxfdGdfcmVnLCBBUlJBWV9TSVpFKGhsX3RnX3JlZykpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaGxfdGdfZXhpdCh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0cyhobF90Z19yZWcsIEFSUkFZX1NJWkUoaGxfdGdfcmVnKSk7Cit9CisKK21vZHVsZV9pbml0KGhsX3RnX2luaXQpOworbW9kdWxlX2V4aXQoaGxfdGdfZXhpdCk7CitNT0RVTEVfQUxJQVMoImlwdF9UVEwiKTsKK01PRFVMRV9BTElBUygiaXA2dF9ITCIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9MRUQuYyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmNzg0MwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTEVELmMKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiB4dF9MRUQuYyAtIG5ldGZpbHRlciB0YXJnZXQgdG8gbWFrZSBMRURzIGJsaW5rIHVwb24gcGFja2V0IG1hdGNoZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQWRhbSBOaWVsc2VuIDxhLm5pZWxzZW5Ac2hpa2FkaS5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfTEVELmg+CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFkYW0gTmllbHNlbiA8YS5uaWVsc2VuQHNoaWthZGkubmV0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYdGFibGVzOiB0cmlnZ2VyIExFRCBkZXZpY2VzIG9uIHBhY2tldCBtYXRjaCIpOworCisvKgorICogVGhpcyBpcyBkZWNsYXJlZCBpbiBoZXJlICh0aGUga2VybmVsIG1vZHVsZSkgb25seSwgdG8gYXZvaWQgaGF2aW5nIHRoZXNlCisgKiBkZXBlbmRlbmNpZXMgaW4gdXNlcnNwYWNlIGNvZGUuICBUaGlzIGlzIHdoYXQgeHRfbGVkX2luZm8uaW50ZXJuYWxfZGF0YQorICogcG9pbnRzIHRvLgorICovCitzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwgeworCXN0cnVjdCBsZWRfdHJpZ2dlciBuZXRmaWx0ZXJfbGVkX3RyaWdnZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50CitsZWRfdGcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X3RhcmdldF9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9sZWRfaW5mbyAqbGVkaW5mbyA9IHBhci0+dGFyZ2luZm87CisJc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsICpsZWRpbnRlcm5hbCA9IGxlZGluZm8tPmludGVybmFsX2RhdGE7CisKKwkvKgorCSAqIElmICJhbHdheXMgYmxpbmsiIGlzIGVuYWJsZWQsIGFuZCB0aGVyZSdzIHN0aWxsIHNvbWUgdGltZSB1bnRpbCB0aGUKKwkgKiBMRUQgd2lsbCBzd2l0Y2ggb2ZmLCBicmllZmx5IHN3aXRjaCBpdCBvZmYgbm93LgorCSAqLworCWlmICgobGVkaW5mby0+ZGVsYXkgPiAwKSAmJiBsZWRpbmZvLT5hbHdheXNfYmxpbmsgJiYKKwkgICAgdGltZXJfcGVuZGluZygmbGVkaW50ZXJuYWwtPnRpbWVyKSkKKwkJbGVkX3RyaWdnZXJfZXZlbnQoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIsTEVEX09GRik7CisKKwlsZWRfdHJpZ2dlcl9ldmVudCgmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlciwgTEVEX0ZVTEwpOworCisJLyogSWYgdGhlcmUncyBhIHBvc2l0aXZlIGRlbGF5LCBzdGFydC91cGRhdGUgdGhlIHRpbWVyICovCisJaWYgKGxlZGluZm8tPmRlbGF5ID4gMCkgeworCQltb2RfdGltZXIoJmxlZGludGVybmFsLT50aW1lciwKKwkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobGVkaW5mby0+ZGVsYXkpKTsKKworCS8qIE90aGVyd2lzZSBpZiB0aGVyZSB3YXMgbm8gZGVsYXkgZ2l2ZW4sIGJsaW5rIGFzIGZhc3QgYXMgcG9zc2libGUgKi8KKwl9IGVsc2UgaWYgKGxlZGluZm8tPmRlbGF5ID09IDApIHsKKwkJbGVkX3RyaWdnZXJfZXZlbnQoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIsIExFRF9PRkYpOworCX0KKworCS8qIGVsc2UgdGhlIGRlbGF5IGlzIG5lZ2F0aXZlLCB3aGljaCBtZWFucyBzd2l0Y2ggb24gYW5kIHN0YXkgb24gKi8KKworCXJldHVybiBYVF9DT05USU5VRTsKK30KKworc3RhdGljIHZvaWQgbGVkX3RpbWVvdXRfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCB4dF9sZWRfaW5mbyAqbGVkaW5mbyA9IChzdHJ1Y3QgeHRfbGVkX2luZm8gKilkYXRhOworCXN0cnVjdCB4dF9sZWRfaW5mb19pbnRlcm5hbCAqbGVkaW50ZXJuYWwgPSBsZWRpbmZvLT5pbnRlcm5hbF9kYXRhOworCisJbGVkX3RyaWdnZXJfZXZlbnQoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIsIExFRF9PRkYpOworfQorCitzdGF0aWMgYm9vbCBsZWRfdGdfY2hlY2soY29uc3Qgc3RydWN0IHh0X3RnY2hrX3BhcmFtICpwYXIpCit7CisJc3RydWN0IHh0X2xlZF9pbmZvICpsZWRpbmZvID0gcGFyLT50YXJnaW5mbzsKKwlzdHJ1Y3QgeHRfbGVkX2luZm9faW50ZXJuYWwgKmxlZGludGVybmFsOworCWludCBlcnI7CisKKwlpZiAobGVkaW5mby0+aWRbMF0gPT0gJ1wwJykgeworCQlwcmludGsoS0VSTl9FUlIgS0JVSUxEX01PRE5BTUUgIjogTm8gJ2lkJyBwYXJhbWV0ZXIgZ2l2ZW4uXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWxlZGludGVybmFsID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsZWRpbnRlcm5hbCkgeworCQlwcmludGsoS0VSTl9DUklUIEtCVUlMRF9NT0ROQU1FICI6IG91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlci5uYW1lID0gbGVkaW5mby0+aWQ7CisKKwllcnIgPSBsZWRfdHJpZ2dlcl9yZWdpc3RlcigmbGVkaW50ZXJuYWwtPm5ldGZpbHRlcl9sZWRfdHJpZ2dlcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9DUklUIEtCVUlMRF9NT0ROQU1FCisJCQkiOiBsZWRfdHJpZ2dlcl9yZWdpc3RlcigpIGZhaWxlZFxuIik7CisJCWlmIChlcnIgPT0gLUVFWElTVCkKKwkJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQorCQkJCSI6IFRyaWdnZXIgbmFtZSBpcyBhbHJlYWR5IGluIHVzZS5cbiIpOworCQlnb3RvIGV4aXRfYWxsb2M7CisJfQorCisJLyogU2VlIGlmIHdlIG5lZWQgdG8gc2V0IHVwIGEgdGltZXIgKi8KKwlpZiAobGVkaW5mby0+ZGVsYXkgPiAwKQorCQlzZXR1cF90aW1lcigmbGVkaW50ZXJuYWwtPnRpbWVyLCBsZWRfdGltZW91dF9jYWxsYmFjaywKKwkJCSAgICAodW5zaWduZWQgbG9uZylsZWRpbmZvKTsKKworCWxlZGluZm8tPmludGVybmFsX2RhdGEgPSBsZWRpbnRlcm5hbDsKKworCXJldHVybiB0cnVlOworCitleGl0X2FsbG9jOgorCWtmcmVlKGxlZGludGVybmFsKTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgbGVkX3RnX2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9sZWRfaW5mbyAqbGVkaW5mbyA9IHBhci0+dGFyZ2luZm87CisJc3RydWN0IHh0X2xlZF9pbmZvX2ludGVybmFsICpsZWRpbnRlcm5hbCA9IGxlZGluZm8tPmludGVybmFsX2RhdGE7CisKKwlpZiAobGVkaW5mby0+ZGVsYXkgPiAwKQorCQlkZWxfdGltZXJfc3luYygmbGVkaW50ZXJuYWwtPnRpbWVyKTsKKworCWxlZF90cmlnZ2VyX3VucmVnaXN0ZXIoJmxlZGludGVybmFsLT5uZXRmaWx0ZXJfbGVkX3RyaWdnZXIpOworCWtmcmVlKGxlZGludGVybmFsKTsKK30KKworc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgbGVkX3RnX3JlZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJMRUQiLAorCS5yZXZpc2lvbgk9IDAsCisJLmZhbWlseQkJPSBORlBST1RPX1VOU1BFQywKKwkudGFyZ2V0CQk9IGxlZF90ZywKKwkudGFyZ2V0c2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfbGVkX2luZm8pKSwKKwkuY2hlY2tlbnRyeQk9IGxlZF90Z19jaGVjaywKKwkuZGVzdHJveQk9IGxlZF90Z19kZXN0cm95LAorCS5tZQkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxlZF90Z19pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldCgmbGVkX3RnX3JlZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsZWRfdGdfZXhpdCh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfdGFyZ2V0KCZsZWRfdGdfcmVnKTsKK30KKworbW9kdWxlX2luaXQobGVkX3RnX2luaXQpOworbW9kdWxlX2V4aXQobGVkX3RnX2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jbHVzdGVyLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDViZDg5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9jbHVzdGVyLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiAoQykgMjAwOC0yMDA5IFBhYmxvIE5laXJhIEF5dXNvIDxwYWJsb0BuZXRmaWx0ZXIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2NsdXN0ZXIuaD4KKworc3RhdGljIGlubGluZSB1X2ludDMyX3QgbmZfY3Rfb3JpZ19pcHY0X3NyYyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJcmV0dXJuIGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMudTMuaXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqbmZfY3Rfb3JpZ19pcHY2X3NyYyhjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJcmV0dXJuIGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZS5zcmMudTMuaXA2OworfQorCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdAoreHRfY2x1c3Rlcl9oYXNoX2lwdjQodV9pbnQzMl90IGlwLCBjb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvKQoreworCXJldHVybiBqaGFzaF8xd29yZChpcCwgaW5mby0+aGFzaF9zZWVkKTsKK30KKworc3RhdGljIGlubGluZSB1X2ludDMyX3QKK3h0X2NsdXN0ZXJfaGFzaF9pcHY2KGNvbnN0IHZvaWQgKmlwLCBjb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvKQoreworCXJldHVybiBqaGFzaDIoaXAsIE5GX0NUX1RVUExFX0wzU0laRSAvIHNpemVvZihfX3UzMiksIGluZm8tPmhhc2hfc2VlZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90Cit4dF9jbHVzdGVyX2hhc2goY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQljb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvKQoreworCXVfaW50MzJfdCBoYXNoID0gMDsKKworCXN3aXRjaChuZl9jdF9sM251bShjdCkpIHsKKwljYXNlIEFGX0lORVQ6CisJCWhhc2ggPSB4dF9jbHVzdGVyX2hhc2hfaXB2NChuZl9jdF9vcmlnX2lwdjRfc3JjKGN0KSwgaW5mbyk7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCWhhc2ggPSB4dF9jbHVzdGVyX2hhc2hfaXB2NihuZl9jdF9vcmlnX2lwdjZfc3JjKGN0KSwgaW5mbyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKCgodTY0KWhhc2ggKiBpbmZvLT50b3RhbF9ub2RlcykgPj4gMzIpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK3h0X2NsdXN0ZXJfaXNfbXVsdGljYXN0X2FkZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdV9pbnQ4X3QgZmFtaWx5KQoreworCWJvb2wgaXNfbXVsdGljYXN0ID0gZmFsc2U7CisKKwlzd2l0Y2goZmFtaWx5KSB7CisJY2FzZSBORlBST1RPX0lQVjQ6CisJCWlzX211bHRpY2FzdCA9IGlwdjRfaXNfbXVsdGljYXN0KGlwX2hkcihza2IpLT5kYWRkcik7CisJCWJyZWFrOworCWNhc2UgTkZQUk9UT19JUFY2OgorCQlpc19tdWx0aWNhc3QgPSBpcHY2X2FkZHJfdHlwZSgmaXB2Nl9oZHIoc2tiKS0+ZGFkZHIpICYKKwkJCQkJCUlQVjZfQUREUl9NVUxUSUNBU1Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gaXNfbXVsdGljYXN0OworfQorCitzdGF0aWMgYm9vbAoreHRfY2x1c3Rlcl9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqcHNrYiA9IChzdHJ1Y3Qgc2tfYnVmZiAqKXNrYjsKKwljb25zdCBzdHJ1Y3QgeHRfY2x1c3Rlcl9tYXRjaF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CisJY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0OworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCXVuc2lnbmVkIGxvbmcgaGFzaDsKKworCS8qIFRoaXMgbWF0Y2ggYXNzdW1lcyB0aGF0IGFsbCBub2RlcyBzZWUgdGhlIHNhbWUgcGFja2V0cy4gVGhpcyBjYW4gYmUKKwkgKiBhY2hpZXZlZCBpZiB0aGUgc3dpdGNoIHRoYXQgY29ubmVjdHMgdGhlIGNsdXN0ZXIgbm9kZXMgc3VwcG9ydCBzb21lCisJICogc29ydCBvZiAncG9ydCBtaXJyb3JpbmcnLiBIb3dldmVyLCBpZiB5b3VyIHN3aXRjaCBkb2VzIG5vdCBzdXBwb3J0CisJICogdGhpcywgeW91ciBjbHVzdGVyIG5vZGVzIGNhbiByZXBseSBBUlAgcmVxdWVzdCB1c2luZyBhIG11bHRpY2FzdCBNQUMKKwkgKiBhZGRyZXNzLiBUaHVzLCB5b3VyIHN3aXRjaCB3aWxsIGZsb29kIHRoZSBzYW1lIHBhY2tldHMgdG8gdGhlCisJICogY2x1c3RlciBub2RlcyB3aXRoIHRoZSBzYW1lIG11bHRpY2FzdCBNQUMgYWRkcmVzcy4gVXNpbmcgYSBtdWx0aWNhc3QKKwkgKiBsaW5rIGFkZHJlc3MgaXMgYSBSRkMgMTgxMiAoc2VjdGlvbiAzLjMuMikgdmlvbGF0aW9uLCBidXQgdGhpcyB3b3JrcworCSAqIGZpbmUgaW4gcHJhY3Rpc2UuCisJICoKKwkgKiBVbmZvcnR1bmF0ZWx5LCBpZiB5b3UgdXNlIHRoZSBtdWx0aWNhc3QgTUFDIGFkZHJlc3MsIHRoZSBsaW5rIGxheWVyCisJICogc2V0cyBza2J1ZmYncyBwa3RfdHlwZSB0byBQQUNLRVRfTVVMVElDQVNULCB3aGljaCBpcyBub3QgYWNjZXB0ZWQKKwkgKiBieSBUQ1AgYW5kIG90aGVycyBmb3IgcGFja2V0cyBjb21pbmcgdG8gdGhpcyBub2RlLiBGb3IgdGhhdCByZWFzb24sCisJICogdGhpcyBtYXRjaCBtYW5nbGVzIHNrYnVmZidzIHBrdF90eXBlIGlmIGl0IGRldGVjdHMgYSBwYWNrZXQKKwkgKiBhZGRyZXNzZWQgdG8gYSB1bmljYXN0IGFkZHJlc3MgYnV0IHVzaW5nIFBBQ0tFVF9NVUxUSUNBU1QuIFllcywgSQorCSAqIGtub3csIG1hdGNoZXMgc2hvdWxkIG5vdCBhbHRlciBwYWNrZXRzLCBidXQgd2UgYXJlIGRvaW5nIHRoaXMgaGVyZQorCSAqIGJlY2F1c2Ugd2Ugd291bGQgbmVlZCB0byBhZGQgYSBQS1RUWVBFIHRhcmdldCBmb3IgdGhpcyBzb2xlIHB1cnBvc2UuCisJICovCisJaWYgKCF4dF9jbHVzdGVyX2lzX211bHRpY2FzdF9hZGRyKHNrYiwgcGFyLT5mYW1pbHkpICYmCisJICAgIHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX01VTFRJQ0FTVCkgeworCSAgICAJcHNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKKwl9CisKKwljdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworCWlmIChjdCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoY3QgPT0gJm5mX2Nvbm50cmFja191bnRyYWNrZWQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChjdC0+bWFzdGVyKQorCQloYXNoID0geHRfY2x1c3Rlcl9oYXNoKGN0LT5tYXN0ZXIsIGluZm8pOworCWVsc2UKKwkJaGFzaCA9IHh0X2NsdXN0ZXJfaGFzaChjdCwgaW5mbyk7CisKKwlyZXR1cm4gISEoKDEgPDwgaGFzaCkgJiBpbmZvLT5ub2RlX21hc2spIF4KKwkgICAgICAgISEoaW5mby0+ZmxhZ3MgJiBYVF9DTFVTVEVSX0ZfSU5WKTsKK30KKworc3RhdGljIGJvb2wgeHRfY2x1c3Rlcl9tdF9jaGVja2VudHJ5KGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQoreworCXN0cnVjdCB4dF9jbHVzdGVyX21hdGNoX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKworCWlmIChpbmZvLT5ub2RlX21hc2sgPj0gKDEgPDwgaW5mby0+dG90YWxfbm9kZXMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAieHRfY2x1c3RlcjogdGhpcyBub2RlIG1hc2sgY2Fubm90IGJlICIKKwkJCQkiaGlnaGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBub2Rlc1xuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggeHRfY2x1c3Rlcl9tYXRjaCBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJjbHVzdGVyIiwKKwkuZmFtaWx5CQk9IE5GUFJPVE9fVU5TUEVDLAorCS5tYXRjaAkJPSB4dF9jbHVzdGVyX210LAorCS5jaGVja2VudHJ5CT0geHRfY2x1c3Rlcl9tdF9jaGVja2VudHJ5LAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IHh0X2NsdXN0ZXJfbWF0Y2hfaW5mbyksCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHRfY2x1c3Rlcl9tdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHh0X3JlZ2lzdGVyX21hdGNoKCZ4dF9jbHVzdGVyX21hdGNoKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHh0X2NsdXN0ZXJfbXRfZmluaSh2b2lkKQoreworCXh0X3VucmVnaXN0ZXJfbWF0Y2goJnh0X2NsdXN0ZXJfbWF0Y2gpOworfQorCitNT0RVTEVfQVVUSE9SKCJQYWJsbyBOZWlyYSBBeXVzbyA8cGFibG9AbmV0ZmlsdGVyLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogaGFzaC1iYXNlZCBjbHVzdGVyIG1hdGNoIik7CitNT0RVTEVfQUxJQVMoImlwdF9jbHVzdGVyIik7CitNT0RVTEVfQUxJQVMoImlwNnRfY2x1c3RlciIpOworbW9kdWxlX2luaXQoeHRfY2x1c3Rlcl9tdF9pbml0KTsKK21vZHVsZV9leGl0KHh0X2NsdXN0ZXJfbXRfZmluaSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9jb25ubGltaXQuYwppbmRleCA3ZjQwNGNjLi42ODA5ODA5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqZm91bmQ7CiAJc3RydWN0IHh0X2Nvbm5saW1pdF9jb25uICpjb25uOwogCXN0cnVjdCB4dF9jb25ubGltaXRfY29ubiAqdG1wOwotCWNvbnN0IHN0cnVjdCBuZl9jb25uICpmb3VuZF9jdDsKKwlzdHJ1Y3QgbmZfY29ubiAqZm91bmRfY3Q7CiAJc3RydWN0IGxpc3RfaGVhZCAqaGFzaDsKIAlib29sIGFkZGl0ID0gdHJ1ZTsKIAlpbnQgbWF0Y2hlcyA9IDA7CkBAIC0xMjMsNyArMTIzLDcgQEAKIAogCS8qIGNoZWNrIHRoZSBzYXZlZCBjb25uZWN0aW9ucyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCB0bXAsIGhhc2gsIGxpc3QpIHsKLQkJZm91bmQgICAgPSBfX25mX2Nvbm50cmFja19maW5kKCZpbml0X25ldCwgJmNvbm4tPnR1cGxlKTsKKwkJZm91bmQgICAgPSBuZl9jb25udHJhY2tfZmluZF9nZXQoJmluaXRfbmV0LCAmY29ubi0+dHVwbGUpOwogCQlmb3VuZF9jdCA9IE5VTEw7CiAKIAkJaWYgKGZvdW5kICE9IE5VTEwpCkBAIC0xNTEsNiArMTUxLDcgQEAKIAkJCSAqIHdlIGRvIG5vdCBjYXJlIGFib3V0IGNvbm5lY3Rpb25zIHdoaWNoIGFyZQogCQkJICogY2xvc2VkIGFscmVhZHkgLT4gZGl0Y2ggaXQKIAkJCSAqLworCQkJbmZfY3RfcHV0KGZvdW5kX2N0KTsKIAkJCWxpc3RfZGVsKCZjb25uLT5saXN0KTsKIAkJCWtmcmVlKGNvbm4pOwogCQkJY29udGludWU7CkBAIC0xNjAsNiArMTYxLDcgQEAKIAkJICAgIG1hdGNoLT5mYW1pbHkpKQogCQkJLyogc2FtZSBzb3VyY2UgbmV0d29yayAtPiBiZSBjb3VudGVkISAqLwogCQkJKyttYXRjaGVzOworCQluZl9jdF9wdXQoZm91bmRfY3QpOwogCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKaW5kZXggZjk3ZmRlZC4uYTViNTM2OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAkvKiBpbml0aWFsaXplIGhhc2ggd2l0aCByYW5kb20gdmFsIGF0IHRoZSB0aW1lIHdlIGFsbG9jYXRlCiAJICogdGhlIGZpcnN0IGhhc2h0YWJsZSBlbnRyeSAqLwogCWlmICghaHQtPnJuZF9pbml0aWFsaXplZCkgewotCQlnZXRfcmFuZG9tX2J5dGVzKCZodC0+cm5kLCA0KTsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmaHQtPnJuZCwgc2l6ZW9mKGh0LT5ybmQpKTsKIAkJaHQtPnJuZF9pbml0aWFsaXplZCA9IDE7CiAJfQogCkBAIC01NjUsOCArNTY1LDcgQEAKIHN0YXRpYyBib29sCiBoYXNobGltaXRfbXRfdjAoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0JY29uc3Qgc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICpyID0KLQkJKChjb25zdCBzdHJ1Y3QgeHRfaGFzaGxpbWl0X2luZm8gKilwYXItPm1hdGNoaW5mbyktPnUubWFzdGVyOworCWNvbnN0IHN0cnVjdCB4dF9oYXNobGltaXRfaW5mbyAqciA9IHBhci0+bWF0Y2hpbmZvOwogCXN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpoaW5mbyA9IHItPmhpbmZvOwogCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKIAlzdHJ1Y3QgZHN0aGFzaF9lbnQgKmRoOwpAQCAtNzAyLDggKzcwMSw2IEBACiAJfQogCW11dGV4X3VubG9jaygmaGxpbWl0X211dGV4KTsKIAotCS8qIFVnbHkgaGFjazogRm9yIFNNUCwgd2Ugb25seSB3YW50IHRvIHVzZSBvbmUgc2V0ICovCi0Jci0+dS5tYXN0ZXIgPSByOwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hsLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2hsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcyNjE1NAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGwuYwpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIElQIHRhYmxlcyBtb2R1bGUgZm9yIG1hdGNoaW5nIHRoZSB2YWx1ZSBvZiB0aGUgVFRMCisgKiAoQykgMjAwMCwyMDAxIGJ5IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBuZXRmaWx0ZXIub3JnPgorICoKKyAqIEhvcCBMaW1pdCBtYXRjaGluZyBtb2R1bGUKKyAqIChDKSAyMDAxLTIwMDIgTWFjaWVqIFNvbHR5c2lhayA8c29sdEBkbnMudG94aWNmaWxtcy50dj4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90dGwuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2hsLmg+CisKK01PRFVMRV9BVVRIT1IoIk1hY2llaiBTb2x0eXNpYWsgPHNvbHRAZG5zLnRveGljZmlsbXMudHY+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IEhvcGxpbWl0L1RUTCBmaWVsZCBtYXRjaCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJpcHRfdHRsIik7CitNT0RVTEVfQUxJQVMoImlwNnRfaGwiKTsKKworc3RhdGljIGJvb2wgdHRsX210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCBpcHRfdHRsX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKwljb25zdCB1OCB0dGwgPSBpcF9oZHIoc2tiKS0+dHRsOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJCWNhc2UgSVBUX1RUTF9FUToKKwkJCXJldHVybiB0dGwgPT0gaW5mby0+dHRsOworCQljYXNlIElQVF9UVExfTkU6CisJCQlyZXR1cm4gdHRsICE9IGluZm8tPnR0bDsKKwkJY2FzZSBJUFRfVFRMX0xUOgorCQkJcmV0dXJuIHR0bCA8IGluZm8tPnR0bDsKKwkJY2FzZSBJUFRfVFRMX0dUOgorCQkJcmV0dXJuIHR0bCA+IGluZm8tPnR0bDsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImlwdF90dGw6IHVua25vd24gbW9kZSAlZFxuIiwKKwkJCQlpbmZvLT5tb2RlKTsKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGhsX210Nihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgaXA2dF9obF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CisJY29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwNmggPSBpcHY2X2hkcihza2IpOworCisJc3dpdGNoIChpbmZvLT5tb2RlKSB7CisJCWNhc2UgSVA2VF9ITF9FUToKKwkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgPT0gaW5mby0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJCWNhc2UgSVA2VF9ITF9ORToKKwkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgIT0gaW5mby0+aG9wX2xpbWl0OworCQkJYnJlYWs7CisJCWNhc2UgSVA2VF9ITF9MVDoKKwkJCXJldHVybiBpcDZoLT5ob3BfbGltaXQgPCBpbmZvLT5ob3BfbGltaXQ7CisJCQlicmVhazsKKwkJY2FzZSBJUDZUX0hMX0dUOgorCQkJcmV0dXJuIGlwNmgtPmhvcF9saW1pdCA+IGluZm8tPmhvcF9saW1pdDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXA2dF9obDogdW5rbm93biBtb2RlICVkXG4iLAorCQkJCWluZm8tPm1vZGUpOworCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBobF9tdF9yZWdbXSBfX3JlYWRfbW9zdGx5ID0geworCXsKKwkJLm5hbWUgICAgICAgPSAidHRsIiwKKwkJLnJldmlzaW9uICAgPSAwLAorCQkuZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNCwKKwkJLm1hdGNoICAgICAgPSB0dGxfbXQsCisJCS5tYXRjaHNpemUgID0gc2l6ZW9mKHN0cnVjdCBpcHRfdHRsX2luZm8pLAorCQkubWUgICAgICAgICA9IFRISVNfTU9EVUxFLAorCX0sCisJeworCQkubmFtZSAgICAgICA9ICJobCIsCisJCS5yZXZpc2lvbiAgID0gMCwKKwkJLmZhbWlseSAgICAgPSBORlBST1RPX0lQVjYsCisJCS5tYXRjaCAgICAgID0gaGxfbXQ2LAorCQkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgaXA2dF9obF9pbmZvKSwKKwkJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaGxfbXRfaW5pdCh2b2lkKQoreworCXJldHVybiB4dF9yZWdpc3Rlcl9tYXRjaGVzKGhsX210X3JlZywgQVJSQVlfU0laRShobF9tdF9yZWcpKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhsX210X2V4aXQodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX21hdGNoZXMoaGxfbXRfcmVnLCBBUlJBWV9TSVpFKGhsX210X3JlZykpOworfQorCittb2R1bGVfaW5pdChobF9tdF9pbml0KTsKK21vZHVsZV9leGl0KGhsX210X2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCmluZGV4IGM5MDhkNjkuLjJlODA4OWUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKQEAgLTE0LDYgKzE0LDExIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0Lmg+CiAKK3N0cnVjdCB4dF9saW1pdF9wcml2IHsKKwl1bnNpZ25lZCBsb25nIHByZXY7CisJdWludDMyX3QgY3JlZGl0OworfTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiSGVydmUgRXljaGVubmUgPHJ2QHdhbGxmaXJlLm9yZz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogcmF0ZS1saW1pdCBtYXRjaCIpOwpAQCAtNjAsMTggKzY1LDE4IEBACiBzdGF0aWMgYm9vbAogbGltaXRfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0Jc3RydWN0IHh0X3JhdGVpbmZvICpyID0KLQkJKChjb25zdCBzdHJ1Y3QgeHRfcmF0ZWluZm8gKilwYXItPm1hdGNoaW5mbyktPm1hc3RlcjsKKwljb25zdCBzdHJ1Y3QgeHRfcmF0ZWluZm8gKnIgPSBwYXItPm1hdGNoaW5mbzsKKwlzdHJ1Y3QgeHRfbGltaXRfcHJpdiAqcHJpdiA9IHItPm1hc3RlcjsKIAl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7CiAKIAlzcGluX2xvY2tfYmgoJmxpbWl0X2xvY2spOwotCXItPmNyZWRpdCArPSAobm93IC0geGNoZygmci0+cHJldiwgbm93KSkgKiBDUkVESVRTX1BFUl9KSUZGWTsKLQlpZiAoci0+Y3JlZGl0ID4gci0+Y3JlZGl0X2NhcCkKLQkJci0+Y3JlZGl0ID0gci0+Y3JlZGl0X2NhcDsKKwlwcml2LT5jcmVkaXQgKz0gKG5vdyAtIHhjaGcoJnByaXYtPnByZXYsIG5vdykpICogQ1JFRElUU19QRVJfSklGRlk7CisJaWYgKHByaXYtPmNyZWRpdCA+IHItPmNyZWRpdF9jYXApCisJCXByaXYtPmNyZWRpdCA9IHItPmNyZWRpdF9jYXA7CiAKLQlpZiAoci0+Y3JlZGl0ID49IHItPmNvc3QpIHsKKwlpZiAocHJpdi0+Y3JlZGl0ID49IHItPmNvc3QpIHsKIAkJLyogV2UncmUgbm90IGxpbWl0ZWQuICovCi0JCXItPmNyZWRpdCAtPSByLT5jb3N0OworCQlwcml2LT5jcmVkaXQgLT0gci0+Y29zdDsKIAkJc3Bpbl91bmxvY2tfYmgoJmxpbWl0X2xvY2spOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC05NSw2ICsxMDAsNyBAQAogc3RhdGljIGJvb2wgbGltaXRfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiB7CiAJc3RydWN0IHh0X3JhdGVpbmZvICpyID0gcGFyLT5tYXRjaGluZm87CisJc3RydWN0IHh0X2xpbWl0X3ByaXYgKnByaXY7CiAKIAkvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovCiAJaWYgKHItPmJ1cnN0ID09IDAKQEAgLTEwNCwxOSArMTEwLDMwIEBACiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBGb3IgU01QLCB3ZSBvbmx5IHdhbnQgdG8gdXNlIG9uZSBzZXQgb2YgY291bnRlcnMuICovCi0Jci0+bWFzdGVyID0gcjsKKwlwcml2ID0ga21hbGxvYyhzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEZvciBTTVAsIHdlIG9ubHkgd2FudCB0byB1c2Ugb25lIHNldCBvZiBzdGF0ZS4gKi8KKwlyLT5tYXN0ZXIgPSBwcml2OwogCWlmIChyLT5jb3N0ID09IDApIHsKIAkJLyogVXNlciBhdmcgaW4gc2Vjb25kcyAqIFhUX0xJTUlUX1NDQUxFOiBjb252ZXJ0IHRvIGppZmZpZXMgKgogCQkgICAxMjguICovCi0JCXItPnByZXYgPSBqaWZmaWVzOwotCQlyLT5jcmVkaXQgPSB1c2VyMmNyZWRpdHMoci0+YXZnICogci0+YnVyc3QpOwkgLyogQ3JlZGl0cyBmdWxsLiAqLworCQlwcml2LT5wcmV2ID0gamlmZmllczsKKwkJcHJpdi0+Y3JlZGl0ID0gdXNlcjJjcmVkaXRzKHItPmF2ZyAqIHItPmJ1cnN0KTsgLyogQ3JlZGl0cyBmdWxsLiAqLwogCQlyLT5jcmVkaXRfY2FwID0gdXNlcjJjcmVkaXRzKHItPmF2ZyAqIHItPmJ1cnN0KTsgLyogQ3JlZGl0cyBmdWxsLiAqLwogCQlyLT5jb3N0ID0gdXNlcjJjcmVkaXRzKHItPmF2Zyk7CiAJfQogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBsaW1pdF9tdF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfcmF0ZWluZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKKworCWtmcmVlKGluZm8tPm1hc3Rlcik7Cit9CisKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBzdHJ1Y3QgY29tcGF0X3h0X3JhdGVpbmZvIHsKIAl1X2ludDMyX3QgYXZnOwpAQCAtMTY3LDYgKzE4NCw3IEBACiAJLmZhbWlseSAgICAgICAgICAgPSBORlBST1RPX1VOU1BFQywKIAkubWF0Y2ggICAgICAgICAgICA9IGxpbWl0X210LAogCS5jaGVja2VudHJ5ICAgICAgID0gbGltaXRfbXRfY2hlY2ssCisJLmRlc3Ryb3kgICAgICAgICAgPSBsaW1pdF9tdF9kZXN0cm95LAogCS5tYXRjaHNpemUgICAgICAgID0gc2l6ZW9mKHN0cnVjdCB4dF9yYXRlaW5mbyksCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRzaXplICAgICAgID0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8pLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYwppbmRleCAxYmNkZmMxLi44ZDI4Y2E1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYwpAQCAtMjAsMTMgKzIwLDEzIEBACiBNT0RVTEVfQUxJQVMoImlwdF9waHlzZGV2Iik7CiBNT0RVTEVfQUxJQVMoImlwNnRfcGh5c2RldiIpOwogCisKIHN0YXRpYyBib29sCiBwaHlzZGV2X210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewotCWludCBpOwotCXN0YXRpYyBjb25zdCBjaGFyIG51bGxkZXZuYW1lW0lGTkFNU0laXTsKKwlzdGF0aWMgY29uc3QgY2hhciBudWxsZGV2bmFtZVtJRk5BTVNJWl0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YobG9uZykpKSk7CiAJY29uc3Qgc3RydWN0IHh0X3BoeXNkZXZfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwotCWJvb2wgcmV0OworCXVuc2lnbmVkIGxvbmcgcmV0OwogCWNvbnN0IGNoYXIgKmluZGV2LCAqb3V0ZGV2OwogCWNvbnN0IHN0cnVjdCBuZl9icmlkZ2VfaW5mbyAqbmZfYnJpZGdlOwogCkBAIC02OCwxMSArNjgsNyBAQAogCWlmICghKGluZm8tPmJpdG1hc2sgJiBYVF9QSFlTREVWX09QX0lOKSkKIAkJZ290byBtYXRjaF9vdXRkZXY7CiAJaW5kZXYgPSBuZl9icmlkZ2UtPnBoeXNpbmRldiA/IG5mX2JyaWRnZS0+cGh5c2luZGV2LT5uYW1lIDogbnVsbGRldm5hbWU7Ci0JZm9yIChpID0gMCwgcmV0ID0gZmFsc2U7IGkgPCBJRk5BTVNJWi9zaXplb2YodW5zaWduZWQgaW50KTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBpbnQgKilpbmRldilbaV0KLQkJCV4gKChjb25zdCB1bnNpZ25lZCBpbnQgKilpbmZvLT5waHlzaW5kZXYpW2ldKQotCQkJJiAoKGNvbnN0IHVuc2lnbmVkIGludCAqKWluZm8tPmluX21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZV9hbGlnbmVkKGluZGV2LCBpbmZvLT5waHlzaW5kZXYsIGluZm8tPmluX21hc2spOwogCiAJaWYgKCFyZXQgXiAhKGluZm8tPmludmVydCAmIFhUX1BIWVNERVZfT1BfSU4pKQogCQlyZXR1cm4gZmFsc2U7CkBAIC04MiwxMyArNzgsOSBAQAogCQlyZXR1cm4gdHJ1ZTsKIAlvdXRkZXYgPSBuZl9icmlkZ2UtPnBoeXNvdXRkZXYgPwogCQkgbmZfYnJpZGdlLT5waHlzb3V0ZGV2LT5uYW1lIDogbnVsbGRldm5hbWU7Ci0JZm9yIChpID0gMCwgcmV0ID0gZmFsc2U7IGkgPCBJRk5BTVNJWi9zaXplb2YodW5zaWduZWQgaW50KTsgaSsrKSB7Ci0JCXJldCB8PSAoKChjb25zdCB1bnNpZ25lZCBpbnQgKilvdXRkZXYpW2ldCi0JCQleICgoY29uc3QgdW5zaWduZWQgaW50ICopaW5mby0+cGh5c291dGRldilbaV0pCi0JCQkmICgoY29uc3QgdW5zaWduZWQgaW50ICopaW5mby0+b3V0X21hc2spW2ldOwotCX0KKwlyZXQgPSBpZm5hbWVfY29tcGFyZV9hbGlnbmVkKG91dGRldiwgaW5mby0+cGh5c291dGRldiwgaW5mby0+b3V0X21hc2spOwogCi0JcmV0dXJuIHJldCBeICEoaW5mby0+aW52ZXJ0ICYgWFRfUEhZU0RFVl9PUF9PVVQpOworCXJldHVybiAoISFyZXQgXiAhKGluZm8tPmludmVydCAmIFhUX1BIWVNERVZfT1BfT1VUKSk7CiB9CiAKIHN0YXRpYyBib29sIHBoeXNkZXZfbXRfY2hlY2soY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMKaW5kZXggYzg0ZmNlNS4uMDFkZDA3YiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYwpAQCAtOSw2ICs5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmg+CiAKK3N0cnVjdCB4dF9xdW90YV9wcml2IHsKKwl1aW50NjRfdCBxdW90YTsKK307CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlNhbSBKb2huc3RvbiA8c2FtakBzYW1qLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiWHRhYmxlczogY291bnRkb3duIHF1b3RhIG1hdGNoIik7CkBAIC0yMCwxOCArMjQsMjAgQEAKIHN0YXRpYyBib29sCiBxdW90YV9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKIHsKLQlzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqcSA9Ci0JCSgoY29uc3Qgc3RydWN0IHh0X3F1b3RhX2luZm8gKilwYXItPm1hdGNoaW5mbyktPm1hc3RlcjsKKwlzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqcSA9ICh2b2lkICopcGFyLT5tYXRjaGluZm87CisJc3RydWN0IHh0X3F1b3RhX3ByaXYgKnByaXYgPSBxLT5tYXN0ZXI7CiAJYm9vbCByZXQgPSBxLT5mbGFncyAmIFhUX1FVT1RBX0lOVkVSVDsKIAogCXNwaW5fbG9ja19iaCgmcXVvdGFfbG9jayk7Ci0JaWYgKHEtPnF1b3RhID49IHNrYi0+bGVuKSB7Ci0JCXEtPnF1b3RhIC09IHNrYi0+bGVuOworCWlmIChwcml2LT5xdW90YSA+PSBza2ItPmxlbikgeworCQlwcml2LT5xdW90YSAtPSBza2ItPmxlbjsKIAkJcmV0ID0gIXJldDsKIAl9IGVsc2UgewogCQkvKiB3ZSBkbyBub3QgYWxsb3cgZXZlbiBzbWFsbCBwYWNrZXRzIGZyb20gbm93IG9uICovCi0JCXEtPnF1b3RhID0gMDsKKwkJcHJpdi0+cXVvdGEgPSAwOwogCX0KKwkvKiBDb3B5IHF1b3RhIGJhY2sgdG8gbWF0Y2hpbmZvIHNvIHRoYXQgaXB0YWJsZXMgY2FuIGRpc3BsYXkgaXQgKi8KKwlxLT5xdW90YSA9IHByaXYtPnF1b3RhOwogCXNwaW5fdW5sb2NrX2JoKCZxdW90YV9sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC00MywxNyArNDksMjggQEAKIAogCWlmIChxLT5mbGFncyAmIH5YVF9RVU9UQV9NQVNLKQogCQlyZXR1cm4gZmFsc2U7Ci0JLyogRm9yIFNNUCwgd2Ugb25seSB3YW50IHRvIHVzZSBvbmUgc2V0IG9mIGNvdW50ZXJzLiAqLwotCXEtPm1hc3RlciA9IHE7CisKKwlxLT5tYXN0ZXIgPSBrbWFsbG9jKHNpemVvZigqcS0+bWFzdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHEtPm1hc3RlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBxdW90YV9tdF9kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gKnBhcikKK3sKKwljb25zdCBzdHJ1Y3QgeHRfcXVvdGFfaW5mbyAqcSA9IHBhci0+bWF0Y2hpbmZvOworCisJa2ZyZWUocS0+bWFzdGVyKTsKK30KKwogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCBxdW90YV9tdF9yZWcgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZSAgICAgICA9ICJxdW90YSIsCiAJLnJldmlzaW9uICAgPSAwLAogCS5mYW1pbHkgICAgID0gTkZQUk9UT19VTlNQRUMsCiAJLm1hdGNoICAgICAgPSBxdW90YV9tdCwKIAkuY2hlY2tlbnRyeSA9IHF1b3RhX210X2NoZWNrLAorCS5kZXN0cm95ICAgID0gcXVvdGFfbXRfZGVzdHJveSwKIAkubWF0Y2hzaXplICA9IHNpemVvZihzdHJ1Y3QgeHRfcXVvdGFfaW5mbyksCiAJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jIGIvbmV0L25ldGZpbHRlci94dF9zdGF0aXN0aWMuYwppbmRleCAwZDc1MTQxLi5kOGMwZjhmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmMKQEAgLTE2LDYgKzE2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogCitzdHJ1Y3QgeHRfc3RhdGlzdGljX3ByaXYgeworCXVpbnQzMl90IGNvdW50OworfTsKKwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IHN0YXRpc3RpY3MtYmFzZWQgbWF0Y2hpbmcgKFwiTnRoXCIsIHJhbmRvbSkiKTsKQEAgLTI3LDcgKzMxLDcgQEAKIHN0YXRpYyBib29sCiBzdGF0aXN0aWNfbXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7Ci0Jc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvICppbmZvID0gKHZvaWQgKilwYXItPm1hdGNoaW5mbzsKKwljb25zdCBzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKIAlib29sIHJldCA9IGluZm8tPmZsYWdzICYgWFRfU1RBVElTVElDX0lOVkVSVDsKIAogCXN3aXRjaCAoaW5mby0+bW9kZSkgewpAQCAtMzYsMTAgKzQwLDkgQEAKIAkJCXJldCA9ICFyZXQ7CiAJCWJyZWFrOwogCWNhc2UgWFRfU1RBVElTVElDX01PREVfTlRIOgotCQlpbmZvID0gaW5mby0+bWFzdGVyOwogCQlzcGluX2xvY2tfYmgoJm50aF9sb2NrKTsKLQkJaWYgKGluZm8tPnUubnRoLmNvdW50KysgPT0gaW5mby0+dS5udGguZXZlcnkpIHsKLQkJCWluZm8tPnUubnRoLmNvdW50ID0gMDsKKwkJaWYgKGluZm8tPm1hc3Rlci0+Y291bnQrKyA9PSBpbmZvLT51Lm50aC5ldmVyeSkgeworCQkJaW5mby0+bWFzdGVyLT5jb3VudCA9IDA7CiAJCQlyZXQgPSAhcmV0OwogCQl9CiAJCXNwaW5fdW5sb2NrX2JoKCZudGhfbG9jayk7CkBAIC01NiwxNiArNTksMzEgQEAKIAlpZiAoaW5mby0+bW9kZSA+IFhUX1NUQVRJU1RJQ19NT0RFX01BWCB8fAogCSAgICBpbmZvLT5mbGFncyAmIH5YVF9TVEFUSVNUSUNfTUFTSykKIAkJcmV0dXJuIGZhbHNlOwotCWluZm8tPm1hc3RlciA9IGluZm87CisKKwlpbmZvLT5tYXN0ZXIgPSBremFsbG9jKHNpemVvZigqaW5mby0+bWFzdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGluZm8tPm1hc3RlciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRSAiOiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlpbmZvLT5tYXN0ZXItPmNvdW50ID0gaW5mby0+dS5udGguY291bnQ7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgc3RhdGlzdGljX210X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKQoreworCWNvbnN0IHN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOworCisJa2ZyZWUoaW5mby0+bWFzdGVyKTsKK30KKwogc3RhdGljIHN0cnVjdCB4dF9tYXRjaCB4dF9zdGF0aXN0aWNfbXRfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUgICAgICAgPSAic3RhdGlzdGljIiwKIAkucmV2aXNpb24gICA9IDAsCiAJLmZhbWlseSAgICAgPSBORlBST1RPX1VOU1BFQywKIAkubWF0Y2ggICAgICA9IHN0YXRpc3RpY19tdCwKIAkuY2hlY2tlbnRyeSA9IHN0YXRpc3RpY19tdF9jaGVjaywKKwkuZGVzdHJveSAgICA9IHN0YXRpc3RpY19tdF9kZXN0cm95LAogCS5tYXRjaHNpemUgID0gc2l6ZW9mKHN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyksCiAJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKIH07CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9NYWtlZmlsZSBiL25ldC9uZXRsaW5rL01ha2VmaWxlCmluZGV4IGUzNTg5YzIuLmJkZDZkZGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL01ha2VmaWxlCisrKyBiL25ldC9uZXRsaW5rL01ha2VmaWxlCkBAIC0yLDQgKzIsNCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIG5ldGxpbmsgZHJpdmVyLgogIwogCi1vYmoteSAgCQkJCTo9IGFmX25ldGxpbmsubyBhdHRyLm8gZ2VuZXRsaW5rLm8KK29iai15ICAJCQkJOj0gYWZfbmV0bGluay5vIGdlbmV0bGluay5vCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggM2FlM2NiOC4uOGI2YmJiMyAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtODUsNiArODUsOCBAQAogCiAjZGVmaW5lIE5FVExJTktfS0VSTkVMX1NPQ0tFVAkweDEKICNkZWZpbmUgTkVUTElOS19SRUNWX1BLVElORk8JMHgyCisjZGVmaW5lIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IJMHg0CisjZGVmaW5lIE5FVExJTktfUkVDVl9OT19FTk9CVUZTCTB4OAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sa19zayhzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC03MTYsMTAgKzcxOCwxNSBAQAogCiBzdGF0aWMgdm9pZCBuZXRsaW5rX292ZXJydW4oc3RydWN0IHNvY2sgKnNrKQogewotCWlmICghdGVzdF9hbmRfc2V0X2JpdCgwLCAmbmxrX3NrKHNrKS0+c3RhdGUpKSB7Ci0JCXNrLT5za19lcnIgPSBFTk9CVUZTOwotCQlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKKwlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2soc2spOworCisJaWYgKCEobmxrLT5mbGFncyAmIE5FVExJTktfUkVDVl9OT19FTk9CVUZTKSkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJm5sa19zayhzayktPnN0YXRlKSkgeworCQkJc2stPnNrX2VyciA9IEVOT0JVRlM7CisJCQlzay0+c2tfZXJyb3JfcmVwb3J0KHNrKTsKKwkJfQogCX0KKwlhdG9taWNfaW5jKCZzay0+c2tfZHJvcHMpOwogfQogCiBzdGF0aWMgc3RydWN0IHNvY2sgKm5ldGxpbmtfZ2V0c29ja2J5cGlkKHN0cnVjdCBzb2NrICpzc2ssIHUzMiBwaWQpCkBAIC05NTAsNiArOTU3LDcgQEAKIAl1MzIgcGlkOwogCXUzMiBncm91cDsKIAlpbnQgZmFpbHVyZTsKKwlpbnQgZGVsaXZlcnlfZmFpbHVyZTsKIAlpbnQgY29uZ2VzdGVkOwogCWludCBkZWxpdmVyZWQ7CiAJZ2ZwX3QgYWxsb2NhdGlvbjsKQEAgLTk5NCwxMSArMTAwMiwxNSBAQAogCQluZXRsaW5rX292ZXJydW4oc2spOwogCQkvKiBDbG9uZSBmYWlsZWQuIE5vdGlmeSBBTEwgbGlzdGVuZXJzLiAqLwogCQlwLT5mYWlsdXJlID0gMTsKKwkJaWYgKG5say0+ZmxhZ3MgJiBORVRMSU5LX0JST0FEQ0FTVF9TRU5EX0VSUk9SKQorCQkJcC0+ZGVsaXZlcnlfZmFpbHVyZSA9IDE7CiAJfSBlbHNlIGlmIChza19maWx0ZXIoc2ssIHAtPnNrYjIpKSB7CiAJCWtmcmVlX3NrYihwLT5za2IyKTsKIAkJcC0+c2tiMiA9IE5VTEw7CiAJfSBlbHNlIGlmICgodmFsID0gbmV0bGlua19icm9hZGNhc3RfZGVsaXZlcihzaywgcC0+c2tiMikpIDwgMCkgewogCQluZXRsaW5rX292ZXJydW4oc2spOworCQlpZiAobmxrLT5mbGFncyAmIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IpCisJCQlwLT5kZWxpdmVyeV9mYWlsdXJlID0gMTsKIAl9IGVsc2UgewogCQlwLT5jb25nZXN0ZWQgfD0gdmFsOwogCQlwLT5kZWxpdmVyZWQgPSAxOwpAQCAtMTAyNSw2ICsxMDM3LDcgQEAKIAlpbmZvLnBpZCA9IHBpZDsKIAlpbmZvLmdyb3VwID0gZ3JvdXA7CiAJaW5mby5mYWlsdXJlID0gMDsKKwlpbmZvLmRlbGl2ZXJ5X2ZhaWx1cmUgPSAwOwogCWluZm8uY29uZ2VzdGVkID0gMDsKIAlpbmZvLmRlbGl2ZXJlZCA9IDA7CiAJaW5mby5hbGxvY2F0aW9uID0gYWxsb2NhdGlvbjsKQEAgLTEwNDIsMTYgKzEwNTUsMTYgQEAKIAogCW5ldGxpbmtfdW5sb2NrX3RhYmxlKCk7CiAKLQlpZiAoaW5mby5za2IyKQotCQlrZnJlZV9za2IoaW5mby5za2IyKTsKKwlrZnJlZV9za2IoaW5mby5za2IyKTsKKworCWlmIChpbmZvLmRlbGl2ZXJ5X2ZhaWx1cmUpCisJCXJldHVybiAtRU5PQlVGUzsKIAogCWlmIChpbmZvLmRlbGl2ZXJlZCkgewogCQlpZiAoaW5mby5jb25nZXN0ZWQgJiYgKGFsbG9jYXRpb24gJiBfX0dGUF9XQUlUKSkKIAkJCXlpZWxkKCk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoaW5mby5mYWlsdXJlKQotCQlyZXR1cm4gLUVOT0JVRlM7CiAJcmV0dXJuIC1FU1JDSDsKIH0KIEVYUE9SVF9TWU1CT0wobmV0bGlua19icm9hZGNhc3QpOwpAQCAtMTExMCw2ICsxMTIzLDcgQEAKIAogCXJlYWRfdW5sb2NrKCZubF90YWJsZV9sb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0wobmV0bGlua19zZXRfZXJyKTsKIAogLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBuZXRsaW5rIHRhYmxlIGdyYWJiZWQgKi8KIHN0YXRpYyB2b2lkIG5ldGxpbmtfdXBkYXRlX3NvY2tldF9tYyhzdHJ1Y3QgbmV0bGlua19zb2NrICpubGssCkBAIC0xMTY3LDYgKzExODEsMjIgQEAKIAkJZXJyID0gMDsKIAkJYnJlYWs7CiAJfQorCWNhc2UgTkVUTElOS19CUk9BRENBU1RfRVJST1I6CisJCWlmICh2YWwpCisJCQlubGstPmZsYWdzIHw9IE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1I7CisJCWVsc2UKKwkJCW5say0+ZmxhZ3MgJj0gfk5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1I7CisJCWVyciA9IDA7CisJCWJyZWFrOworCWNhc2UgTkVUTElOS19OT19FTk9CVUZTOgorCQlpZiAodmFsKSB7CisJCQlubGstPmZsYWdzIHw9IE5FVExJTktfUkVDVl9OT19FTk9CVUZTOworCQkJY2xlYXJfYml0KDAsICZubGstPnN0YXRlKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmbmxrLT53YWl0KTsKKwkJfSBlbHNlCisJCQlubGstPmZsYWdzICY9IH5ORVRMSU5LX1JFQ1ZfTk9fRU5PQlVGUzsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCX0KQEAgLTExOTksNiArMTIyOSwyNiBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWVyciA9IDA7CiAJCWJyZWFrOworCWNhc2UgTkVUTElOS19CUk9BRENBU1RfRVJST1I6CisJCWlmIChsZW4gPCBzaXplb2YoaW50KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlsZW4gPSBzaXplb2YoaW50KTsKKwkJdmFsID0gbmxrLT5mbGFncyAmIE5FVExJTktfQlJPQURDQVNUX1NFTkRfRVJST1IgPyAxIDogMDsKKwkJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSB8fAorCQkgICAgcHV0X3VzZXIodmFsLCBvcHR2YWwpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWVyciA9IDA7CisJCWJyZWFrOworCWNhc2UgTkVUTElOS19OT19FTk9CVUZTOgorCQlpZiAobGVuIDwgc2l6ZW9mKGludCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJbGVuID0gc2l6ZW9mKGludCk7CisJCXZhbCA9IG5say0+ZmxhZ3MgJiBORVRMSU5LX1JFQ1ZfTk9fRU5PQlVGUyA/IDEgOiAwOworCQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pIHx8CisJCSAgICBwdXRfdXNlcih2YWwsIG9wdHZhbCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJZXJyID0gMDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVOT1BST1RPT1BUOwogCX0KQEAgLTE1MjUsOCArMTU3NSw3IEBACiAKIHN0YXRpYyB2b2lkIG5ldGxpbmtfZGVzdHJveV9jYWxsYmFjayhzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0JaWYgKGNiLT5za2IpCi0JCWtmcmVlX3NrYihjYi0+c2tiKTsKKwlrZnJlZV9za2IoY2ItPnNrYik7CiAJa2ZyZWUoY2IpOwogfQogCkBAIC0xNzQzLDEyICsxNzkyLDE4IEBACiAJCQlleGNsdWRlX3BpZCA9IHBpZDsKIAkJfQogCi0JCS8qIGVycm9ycyByZXBvcnRlZCB2aWEgZGVzdGluYXRpb24gc2stPnNrX2VyciAqLwotCQlubG1zZ19tdWx0aWNhc3Qoc2ssIHNrYiwgZXhjbHVkZV9waWQsIGdyb3VwLCBmbGFncyk7CisJCS8qIGVycm9ycyByZXBvcnRlZCB2aWEgZGVzdGluYXRpb24gc2stPnNrX2VyciwgYnV0IHByb3BhZ2F0ZQorCQkgKiBkZWxpdmVyeSBlcnJvcnMgaWYgTkVUTElOS19CUk9BRENBU1RfRVJST1IgZmxhZyBpcyBzZXQgKi8KKwkJZXJyID0gbmxtc2dfbXVsdGljYXN0KHNrLCBza2IsIGV4Y2x1ZGVfcGlkLCBncm91cCwgZmxhZ3MpOwogCX0KIAotCWlmIChyZXBvcnQpCi0JCWVyciA9IG5sbXNnX3VuaWNhc3Qoc2ssIHNrYiwgcGlkKTsKKwlpZiAocmVwb3J0KSB7CisJCWludCBlcnIyOworCisJCWVycjIgPSBubG1zZ191bmljYXN0KHNrLCBza2IsIHBpZCk7CisJCWlmICghZXJyIHx8IGVyciA9PSAtRVNSQ0gpCisJCQllcnIgPSBlcnIyOworCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC0xODQ5LDEyICsxOTA0LDEyIEBACiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzZXFfcHV0cyhzZXEsCiAJCQkgInNrICAgICAgIEV0aCBQaWQgICAgR3JvdXBzICAgIgotCQkJICJSbWVtICAgICBXbWVtICAgICBEdW1wICAgICBMb2Nrc1xuIik7CisJCQkgIlJtZW0gICAgIFdtZW0gICAgIER1bXAgICAgIExvY2tzICAgICBEcm9wc1xuIik7CiAJZWxzZSB7CiAJCXN0cnVjdCBzb2NrICpzID0gdjsKIAkJc3RydWN0IG5ldGxpbmtfc29jayAqbmxrID0gbmxrX3NrKHMpOwogCi0JCXNlcV9wcmludGYoc2VxLCAiJXAgJS0zZCAlLTZkICUwOHggJS04ZCAlLThkICVwICVkXG4iLAorCQlzZXFfcHJpbnRmKHNlcSwgIiVwICUtM2QgJS02ZCAlMDh4ICUtOGQgJS04ZCAlcCAlLThkICUtOGRcbiIsCiAJCQkgICBzLAogCQkJICAgcy0+c2tfcHJvdG9jb2wsCiAJCQkgICBubGstPnBpZCwKQEAgLTE4NjIsNyArMTkxNyw4IEBACiAJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfcm1lbV9hbGxvYyksCiAJCQkgICBhdG9taWNfcmVhZCgmcy0+c2tfd21lbV9hbGxvYyksCiAJCQkgICBubGstPmNiLAotCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX3JlZmNudCkKKwkJCSAgIGF0b21pY19yZWFkKCZzLT5za19yZWZjbnQpLAorCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX2Ryb3BzKQogCQkJKTsKIAogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2F0dHIuYyBiL25ldC9uZXRsaW5rL2F0dHIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZjM2NlNy4uMDAwMDAwMAotLS0gYS9uZXQvbmV0bGluay9hdHRyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzMgKzAsMCBAQAotLyoKLSAqIE5FVExJTksgICAgICBOZXRsaW5rIGF0dHJpYnV0ZXMKLSAqCi0gKiAJCUF1dGhvcnM6CVRob21hcyBHcmFmIDx0Z3JhZkBzdXVnLmNoPgotICogCQkJCUFsZXhleSBLdXpuZXRzb3YgPGt1em5ldEBtczIuaW5yLmFjLnJ1PgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+Ci0KLXN0YXRpYyB1MTYgbmxhX2F0dHJfbWlubGVuW05MQV9UWVBFX01BWCsxXSBfX3JlYWRfbW9zdGx5ID0gewotCVtOTEFfVThdCT0gc2l6ZW9mKHU4KSwKLQlbTkxBX1UxNl0JPSBzaXplb2YodTE2KSwKLQlbTkxBX1UzMl0JPSBzaXplb2YodTMyKSwKLQlbTkxBX1U2NF0JPSBzaXplb2YodTY0KSwKLQlbTkxBX05FU1RFRF0JPSBOTEFfSERSTEVOLAotfTsKLQotc3RhdGljIGludCB2YWxpZGF0ZV9ubGEoc3RydWN0IG5sYXR0ciAqbmxhLCBpbnQgbWF4dHlwZSwKLQkJCWNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3kpCi17Ci0JY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgKnB0OwotCWludCBtaW5sZW4gPSAwLCBhdHRybGVuID0gbmxhX2xlbihubGEpLCB0eXBlID0gbmxhX3R5cGUobmxhKTsKLQotCWlmICh0eXBlIDw9IDAgfHwgdHlwZSA+IG1heHR5cGUpCi0JCXJldHVybiAwOwotCi0JcHQgPSAmcG9saWN5W3R5cGVdOwotCi0JQlVHX09OKHB0LT50eXBlID4gTkxBX1RZUEVfTUFYKTsKLQotCXN3aXRjaCAocHQtPnR5cGUpIHsKLQljYXNlIE5MQV9GTEFHOgotCQlpZiAoYXR0cmxlbiA+IDApCi0JCQlyZXR1cm4gLUVSQU5HRTsKLQkJYnJlYWs7Ci0KLQljYXNlIE5MQV9OVUxfU1RSSU5HOgotCQlpZiAocHQtPmxlbikKLQkJCW1pbmxlbiA9IG1pbl90KGludCwgYXR0cmxlbiwgcHQtPmxlbiArIDEpOwotCQllbHNlCi0JCQltaW5sZW4gPSBhdHRybGVuOwotCi0JCWlmICghbWlubGVuIHx8IG1lbWNocihubGFfZGF0YShubGEpLCAnXDAnLCBtaW5sZW4pID09IE5VTEwpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0KLQljYXNlIE5MQV9TVFJJTkc6Ci0JCWlmIChhdHRybGVuIDwgMSkKLQkJCXJldHVybiAtRVJBTkdFOwotCi0JCWlmIChwdC0+bGVuKSB7Ci0JCQljaGFyICpidWYgPSBubGFfZGF0YShubGEpOwotCi0JCQlpZiAoYnVmW2F0dHJsZW4gLSAxXSA9PSAnXDAnKQotCQkJCWF0dHJsZW4tLTsKLQotCQkJaWYgKGF0dHJsZW4gPiBwdC0+bGVuKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBOTEFfQklOQVJZOgotCQlpZiAocHQtPmxlbiAmJiBhdHRybGVuID4gcHQtPmxlbikKLQkJCXJldHVybiAtRVJBTkdFOwotCQlicmVhazsKLQotCWNhc2UgTkxBX05FU1RFRF9DT01QQVQ6Ci0JCWlmIChhdHRybGVuIDwgcHQtPmxlbikKLQkJCXJldHVybiAtRVJBTkdFOwotCQlpZiAoYXR0cmxlbiA8IE5MQV9BTElHTihwdC0+bGVuKSkKLQkJCWJyZWFrOwotCQlpZiAoYXR0cmxlbiA8IE5MQV9BTElHTihwdC0+bGVuKSArIE5MQV9IRFJMRU4pCi0JCQlyZXR1cm4gLUVSQU5HRTsKLQkJbmxhID0gbmxhX2RhdGEobmxhKSArIE5MQV9BTElHTihwdC0+bGVuKTsKLQkJaWYgKGF0dHJsZW4gPCBOTEFfQUxJR04ocHQtPmxlbikgKyBOTEFfSERSTEVOICsgbmxhX2xlbihubGEpKQotCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCWJyZWFrOwotCWNhc2UgTkxBX05FU1RFRDoKLQkJLyogYSBuZXN0ZWQgYXR0cmlidXRlcyBpcyBhbGxvd2VkIHRvIGJlIGVtcHR5OyBpZiBpdHMgbm90LAotCQkgKiBpdCBtdXN0IGhhdmUgYSBzaXplIG9mIGF0IGxlYXN0IE5MQV9IRFJMRU4uCi0JCSAqLwotCQlpZiAoYXR0cmxlbiA9PSAwKQotCQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJaWYgKHB0LT5sZW4pCi0JCQltaW5sZW4gPSBwdC0+bGVuOwotCQllbHNlIGlmIChwdC0+dHlwZSAhPSBOTEFfVU5TUEVDKQotCQkJbWlubGVuID0gbmxhX2F0dHJfbWlubGVuW3B0LT50eXBlXTsKLQotCQlpZiAoYXR0cmxlbiA8IG1pbmxlbikKLQkJCXJldHVybiAtRVJBTkdFOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG5sYV92YWxpZGF0ZSAtIFZhbGlkYXRlIGEgc3RyZWFtIG9mIGF0dHJpYnV0ZXMKLSAqIEBoZWFkOiBoZWFkIG9mIGF0dHJpYnV0ZSBzdHJlYW0KLSAqIEBsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgc3RyZWFtCi0gKiBAbWF4dHlwZTogbWF4aW11bSBhdHRyaWJ1dGUgdHlwZSB0byBiZSBleHBlY3RlZAotICogQHBvbGljeTogdmFsaWRhdGlvbiBwb2xpY3kKLSAqCi0gKiBWYWxpZGF0ZXMgYWxsIGF0dHJpYnV0ZXMgaW4gdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUgc3RyZWFtIGFnYWluc3QgdGhlCi0gKiBzcGVjaWZpZWQgcG9saWN5LiBBdHRyaWJ1dGVzIHdpdGggYSB0eXBlIGV4Y2VlZGluZyBtYXh0eXBlIHdpbGwgYmUKLSAqIGlnbm9yZWQuIFNlZSBkb2N1bWVuYXRpb24gb2Ygc3RydWN0IG5sYV9wb2xpY3kgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCi0gKi8KLWludCBubGFfdmFsaWRhdGUoc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IG1heHR5cGUsCi0JCSBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSAqcG9saWN5KQotewotCXN0cnVjdCBubGF0dHIgKm5sYTsKLQlpbnQgcmVtLCBlcnI7Ci0KLQlubGFfZm9yX2VhY2hfYXR0cihubGEsIGhlYWQsIGxlbiwgcmVtKSB7Ci0JCWVyciA9IHZhbGlkYXRlX25sYShubGEsIG1heHR5cGUsIHBvbGljeSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBlcnJvdXQ7Ci0JfQotCi0JZXJyID0gMDsKLWVycm91dDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKioKLSAqIG5sYV9wYXJzZSAtIFBhcnNlIGEgc3RyZWFtIG9mIGF0dHJpYnV0ZXMgaW50byBhIHRiIGJ1ZmZlcgotICogQHRiOiBkZXN0aW5hdGlvbiBhcnJheSB3aXRoIG1heHR5cGUrMSBlbGVtZW50cwotICogQG1heHR5cGU6IG1heGltdW0gYXR0cmlidXRlIHR5cGUgdG8gYmUgZXhwZWN0ZWQKLSAqIEBoZWFkOiBoZWFkIG9mIGF0dHJpYnV0ZSBzdHJlYW0KLSAqIEBsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgc3RyZWFtCi0gKiBAcG9saWN5OiB2YWxpZGF0aW9uIHBvbGljeQotICoKLSAqIFBhcnNlcyBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzIGFuZCBzdG9yZXMgYSBwb2ludGVyIHRvIGVhY2ggYXR0cmlidXRlIGluCi0gKiB0aGUgdGIgYXJyYXkgYWNjZXNzYWJsZSB2aWEgdGhlIGF0dHJpYnV0ZSB0eXBlLiBBdHRyaWJ1dGVzIHdpdGggYSB0eXBlCi0gKiBleGNlZWRpbmcgbWF4dHlwZSB3aWxsIGJlIHNpbGVudGx5IGlnbm9yZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci0gKiByZWFzb25zLiBwb2xpY3kgbWF5IGJlIHNldCB0byBOVUxMIGlmIG5vIHZhbGlkYXRpb24gaXMgcmVxdWlyZWQuCi0gKgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgotICovCi1pbnQgbmxhX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLCBzdHJ1Y3QgbmxhdHRyICpoZWFkLCBpbnQgbGVuLAotCSAgICAgIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3kpCi17Ci0Jc3RydWN0IG5sYXR0ciAqbmxhOwotCWludCByZW0sIGVycjsKLQotCW1lbXNldCh0YiwgMCwgc2l6ZW9mKHN0cnVjdCBubGF0dHIgKikgKiAobWF4dHlwZSArIDEpKTsKLQotCW5sYV9mb3JfZWFjaF9hdHRyKG5sYSwgaGVhZCwgbGVuLCByZW0pIHsKLQkJdTE2IHR5cGUgPSBubGFfdHlwZShubGEpOwotCi0JCWlmICh0eXBlID4gMCAmJiB0eXBlIDw9IG1heHR5cGUpIHsKLQkJCWlmIChwb2xpY3kpIHsKLQkJCQllcnIgPSB2YWxpZGF0ZV9ubGEobmxhLCBtYXh0eXBlLCBwb2xpY3kpOwotCQkJCWlmIChlcnIgPCAwKQotCQkJCQlnb3RvIGVycm91dDsKLQkJCX0KLQotCQkJdGJbdHlwZV0gPSBubGE7Ci0JCX0KLQl9Ci0KLQlpZiAodW5saWtlbHkocmVtID4gMCkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm5ldGxpbms6ICVkIGJ5dGVzIGxlZnRvdmVyIGFmdGVyIHBhcnNpbmcgIgotCQkgICAgICAgImF0dHJpYnV0ZXMuXG4iLCByZW0pOwotCi0JZXJyID0gMDsKLWVycm91dDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKioKLSAqIG5sYV9maW5kIC0gRmluZCBhIHNwZWNpZmljIGF0dHJpYnV0ZSBpbiBhIHN0cmVhbSBvZiBhdHRyaWJ1dGVzCi0gKiBAaGVhZDogaGVhZCBvZiBhdHRyaWJ1dGUgc3RyZWFtCi0gKiBAbGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHN0cmVhbQotICogQGF0dHJ0eXBlOiB0eXBlIG9mIGF0dHJpYnV0ZSB0byBsb29rIGZvcgotICoKLSAqIFJldHVybnMgdGhlIGZpcnN0IGF0dHJpYnV0ZSBpbiB0aGUgc3RyZWFtIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgdHlwZS4KLSAqLwotc3RydWN0IG5sYXR0ciAqbmxhX2ZpbmQoc3RydWN0IG5sYXR0ciAqaGVhZCwgaW50IGxlbiwgaW50IGF0dHJ0eXBlKQotewotCXN0cnVjdCBubGF0dHIgKm5sYTsKLQlpbnQgcmVtOwotCi0JbmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBoZWFkLCBsZW4sIHJlbSkKLQkJaWYgKG5sYV90eXBlKG5sYSkgPT0gYXR0cnR5cGUpCi0JCQlyZXR1cm4gbmxhOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qKgotICogbmxhX3N0cmxjcHkgLSBDb3B5IHN0cmluZyBhdHRyaWJ1dGUgcGF5bG9hZCBpbnRvIGEgc2l6ZWQgYnVmZmVyCi0gKiBAZHN0OiB3aGVyZSB0byBjb3B5IHRoZSBzdHJpbmcgdG8KLSAqIEBubGE6IGF0dHJpYnV0ZSB0byBjb3B5IHRoZSBzdHJpbmcgZnJvbQotICogQGRzdHNpemU6IHNpemUgb2YgZGVzdGluYXRpb24gYnVmZmVyCi0gKgotICogQ29waWVzIGF0IG1vc3QgZHN0c2l6ZSAtIDEgYnl0ZXMgaW50byB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgotICogVGhlIHJlc3VsdCBpcyBhbHdheXMgYSB2YWxpZCBOVUwtdGVybWluYXRlZCBzdHJpbmcuIFVubGlrZQotICogc3RybGNweSB0aGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIGFsd2F5cyBwYWRkZWQgb3V0LgotICoKLSAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4KLSAqLwotc2l6ZV90IG5sYV9zdHJsY3B5KGNoYXIgKmRzdCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhLCBzaXplX3QgZHN0c2l6ZSkKLXsKLQlzaXplX3Qgc3JjbGVuID0gbmxhX2xlbihubGEpOwotCWNoYXIgKnNyYyA9IG5sYV9kYXRhKG5sYSk7Ci0KLQlpZiAoc3JjbGVuID4gMCAmJiBzcmNbc3JjbGVuIC0gMV0gPT0gJ1wwJykKLQkJc3JjbGVuLS07Ci0KLQlpZiAoZHN0c2l6ZSA+IDApIHsKLQkJc2l6ZV90IGxlbiA9IChzcmNsZW4gPj0gZHN0c2l6ZSkgPyBkc3RzaXplIC0gMSA6IHNyY2xlbjsKLQotCQltZW1zZXQoZHN0LCAwLCBkc3RzaXplKTsKLQkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwotCX0KLQotCXJldHVybiBzcmNsZW47Ci19Ci0KLS8qKgotICogbmxhX21lbWNweSAtIENvcHkgYSBuZXRsaW5rIGF0dHJpYnV0ZSBpbnRvIGFub3RoZXIgbWVtb3J5IGFyZWEKLSAqIEBkZXN0OiB3aGVyZSB0byBjb3B5IHRvIG1lbWNweQotICogQHNyYzogbmV0bGluayBhdHRyaWJ1dGUgdG8gY29weSBmcm9tCi0gKiBAY291bnQ6IHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGFyZWEKLSAqCi0gKiBOb3RlOiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCBpcyBsaW1pdGVkIGJ5IHRoZSBsZW5ndGggb2YKLSAqICAgICAgIGF0dHJpYnV0ZSdzIHBheWxvYWQuIG1lbWNweQotICoKLSAqIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCi0gKi8KLWludCBubGFfbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHN0cnVjdCBubGF0dHIgKnNyYywgaW50IGNvdW50KQotewotCWludCBtaW5sZW4gPSBtaW5fdChpbnQsIGNvdW50LCBubGFfbGVuKHNyYykpOwotCi0JbWVtY3B5KGRlc3QsIG5sYV9kYXRhKHNyYyksIG1pbmxlbik7Ci0KLQlyZXR1cm4gbWlubGVuOwotfQotCi0vKioKLSAqIG5sYV9tZW1jbXAgLSBDb21wYXJlIGFuIGF0dHJpYnV0ZSB3aXRoIHNpemVkIG1lbW9yeSBhcmVhCi0gKiBAbmxhOiBuZXRsaW5rIGF0dHJpYnV0ZQotICogQGRhdGE6IG1lbW9yeSBhcmVhCi0gKiBAc2l6ZTogc2l6ZSBvZiBtZW1vcnkgYXJlYQotICovCi1pbnQgbmxhX21lbWNtcChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGNvbnN0IHZvaWQgKmRhdGEsCi0JCQkgICAgIHNpemVfdCBzaXplKQotewotCWludCBkID0gbmxhX2xlbihubGEpIC0gc2l6ZTsKLQotCWlmIChkID09IDApCi0JCWQgPSBtZW1jbXAobmxhX2RhdGEobmxhKSwgZGF0YSwgc2l6ZSk7Ci0KLQlyZXR1cm4gZDsKLX0KLQotLyoqCi0gKiBubGFfc3RyY21wIC0gQ29tcGFyZSBhIHN0cmluZyBhdHRyaWJ1dGUgYWdhaW5zdCBhIHN0cmluZwotICogQG5sYTogbmV0bGluayBzdHJpbmcgYXR0cmlidXRlCi0gKiBAc3RyOiBhbm90aGVyIHN0cmluZwotICovCi1pbnQgbmxhX3N0cmNtcChjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEsIGNvbnN0IGNoYXIgKnN0cikKLXsKLQlpbnQgbGVuID0gc3RybGVuKHN0cikgKyAxOwotCWludCBkID0gbmxhX2xlbihubGEpIC0gbGVuOwotCi0JaWYgKGQgPT0gMCkKLQkJZCA9IG1lbWNtcChubGFfZGF0YShubGEpLCBzdHIsIGxlbik7Ci0KLQlyZXR1cm4gZDsKLX0KLQotLyoqCi0gKiBfX25sYV9yZXNlcnZlIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgb24gdGhlIHNrYgotICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byByZXNlcnZlIHJvb20gb24KLSAqIEBhdHRydHlwZTogYXR0cmlidXRlIHR5cGUKLSAqIEBhdHRybGVuOiBsZW5ndGggb2YgYXR0cmlidXRlIHBheWxvYWQKLSAqCi0gKiBBZGRzIGEgbmV0bGluayBhdHRyaWJ1dGUgaGVhZGVyIHRvIGEgc29ja2V0IGJ1ZmZlciBhbmQgcmVzZXJ2ZXMKLSAqIHJvb20gZm9yIHRoZSBwYXlsb2FkIGJ1dCBkb2VzIG5vdCBjb3B5IGl0LgotICoKLSAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8gZW5zdXJlIHRoYXQgdGhlIHNrYiBwcm92aWRlcyBlbm91Z2gKLSAqIHRhaWxyb29tIGZvciB0aGUgYXR0cmlidXRlIGhlYWRlciBhbmQgcGF5bG9hZC4KLSAqLwotc3RydWN0IG5sYXR0ciAqX19ubGFfcmVzZXJ2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUsIGludCBhdHRybGVuKQotewotCXN0cnVjdCBubGF0dHIgKm5sYTsKLQotCW5sYSA9IChzdHJ1Y3QgbmxhdHRyICopIHNrYl9wdXQoc2tiLCBubGFfdG90YWxfc2l6ZShhdHRybGVuKSk7Ci0JbmxhLT5ubGFfdHlwZSA9IGF0dHJ0eXBlOwotCW5sYS0+bmxhX2xlbiA9IG5sYV9hdHRyX3NpemUoYXR0cmxlbik7Ci0KLQltZW1zZXQoKHVuc2lnbmVkIGNoYXIgKikgbmxhICsgbmxhLT5ubGFfbGVuLCAwLCBubGFfcGFkbGVuKGF0dHJsZW4pKTsKLQotCXJldHVybiBubGE7Ci19Ci0KLS8qKgotICogX19ubGFfcmVzZXJ2ZV9ub2hkciAtIHJlc2VydmUgcm9vbSBmb3IgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyCi0gKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvbgotICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAotICoKLSAqIFJlc2VydmVzIHJvb20gZm9yIGF0dHJpYnV0ZSBwYXlsb2FkIHdpdGhvdXQgYSBoZWFkZXIuCi0gKgotICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBlbnN1cmUgdGhhdCB0aGUgc2tiIHByb3ZpZGVzIGVub3VnaAotICogdGFpbHJvb20gZm9yIHRoZSBwYXlsb2FkLgotICovCi12b2lkICpfX25sYV9yZXNlcnZlX25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuKQotewotCXZvaWQgKnN0YXJ0OwotCi0Jc3RhcnQgPSBza2JfcHV0KHNrYiwgTkxBX0FMSUdOKGF0dHJsZW4pKTsKLQltZW1zZXQoc3RhcnQsIDAsIE5MQV9BTElHTihhdHRybGVuKSk7Ci0KLQlyZXR1cm4gc3RhcnQ7Ci19Ci0KLS8qKgotICogbmxhX3Jlc2VydmUgLSByZXNlcnZlIHJvb20gZm9yIGF0dHJpYnV0ZSBvbiB0aGUgc2tiCi0gKiBAc2tiOiBzb2NrZXQgYnVmZmVyIHRvIHJlc2VydmUgcm9vbSBvbgotICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQotICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAotICoKLSAqIEFkZHMgYSBuZXRsaW5rIGF0dHJpYnV0ZSBoZWFkZXIgdG8gYSBzb2NrZXQgYnVmZmVyIGFuZCByZXNlcnZlcwotICogcm9vbSBmb3IgdGhlIHBheWxvYWQgYnV0IGRvZXMgbm90IGNvcHkgaXQuCi0gKgotICogUmV0dXJucyBOVUxMIGlmIHRoZSB0YWlscm9vbSBvZiB0aGUgc2tiIGlzIGluc3VmZmljaWVudCB0byBzdG9yZQotICogdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuCi0gKi8KLXN0cnVjdCBubGF0dHIgKm5sYV9yZXNlcnZlKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4pCi17Ci0JaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgbmxhX3RvdGFsX3NpemUoYXR0cmxlbikpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBfX25sYV9yZXNlcnZlKHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4pOwotfQotCi0vKioKLSAqIG5sYV9yZXNlcnZlX25vaGRyIC0gcmVzZXJ2ZSByb29tIGZvciBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKLSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gcmVzZXJ2ZSByb29tIG9uCi0gKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCi0gKgotICogUmVzZXJ2ZXMgcm9vbSBmb3IgYXR0cmlidXRlIHBheWxvYWQgd2l0aG91dCBhIGhlYWRlci4KLSAqCi0gKiBSZXR1cm5zIE5VTEwgaWYgdGhlIHRhaWxyb29tIG9mIHRoZSBza2IgaXMgaW5zdWZmaWNpZW50IHRvIHN0b3JlCi0gKiB0aGUgYXR0cmlidXRlIHBheWxvYWQuCi0gKi8KLXZvaWQgKm5sYV9yZXNlcnZlX25vaGRyKHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRybGVuKQotewotCWlmICh1bmxpa2VseShza2JfdGFpbHJvb20oc2tiKSA8IE5MQV9BTElHTihhdHRybGVuKSkpCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuIF9fbmxhX3Jlc2VydmVfbm9oZHIoc2tiLCBhdHRybGVuKTsKLX0KLQotLyoqCi0gKiBfX25sYV9wdXQgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB0byBhIHNvY2tldCBidWZmZXIKLSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0bwotICogQGF0dHJ0eXBlOiBhdHRyaWJ1dGUgdHlwZQotICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAotICogQGRhdGE6IGhlYWQgb2YgYXR0cmlidXRlIHBheWxvYWQKLSAqCi0gKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBza2IgcHJvdmlkZXMgZW5vdWdoCi0gKiB0YWlscm9vbSBmb3IgdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuCi0gKi8KLXZvaWQgX19ubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sCi0JCQkgICAgIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IG5sYXR0ciAqbmxhOwotCi0JbmxhID0gX19ubGFfcmVzZXJ2ZShza2IsIGF0dHJ0eXBlLCBhdHRybGVuKTsKLQltZW1jcHkobmxhX2RhdGEobmxhKSwgZGF0YSwgYXR0cmxlbik7Ci19Ci0KLS8qKgotICogX19ubGFfcHV0X25vaGRyIC0gQWRkIGEgbmV0bGluayBhdHRyaWJ1dGUgd2l0aG91dCBoZWFkZXIKLSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0bwotICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAotICogQGRhdGE6IGhlYWQgb2YgYXR0cmlidXRlIHBheWxvYWQKLSAqCi0gKiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVuc3VyZSB0aGF0IHRoZSBza2IgcHJvdmlkZXMgZW5vdWdoCi0gKiB0YWlscm9vbSBmb3IgdGhlIGF0dHJpYnV0ZSBwYXlsb2FkLgotICovCi12b2lkIF9fbmxhX3B1dF9ub2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLQl2b2lkICpzdGFydDsKLQotCXN0YXJ0ID0gX19ubGFfcmVzZXJ2ZV9ub2hkcihza2IsIGF0dHJsZW4pOwotCW1lbWNweShzdGFydCwgZGF0YSwgYXR0cmxlbik7Ci19Ci0KLS8qKgotICogbmxhX3B1dCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHRvIGEgc29ja2V0IGJ1ZmZlcgotICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvCi0gKiBAYXR0cnR5cGU6IGF0dHJpYnV0ZSB0eXBlCi0gKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCi0gKiBAZGF0YTogaGVhZCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAotICoKLSAqIFJldHVybnMgLUVNU0dTSVpFIGlmIHRoZSB0YWlscm9vbSBvZiB0aGUgc2tiIGlzIGluc3VmZmljaWVudCB0byBzdG9yZQotICogdGhlIGF0dHJpYnV0ZSBoZWFkZXIgYW5kIHBheWxvYWQuCi0gKi8KLWludCBubGFfcHV0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0JaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgbmxhX3RvdGFsX3NpemUoYXR0cmxlbikpKQotCQlyZXR1cm4gLUVNU0dTSVpFOwotCi0JX19ubGFfcHV0KHNrYiwgYXR0cnR5cGUsIGF0dHJsZW4sIGRhdGEpOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIG5sYV9wdXRfbm9oZHIgLSBBZGQgYSBuZXRsaW5rIGF0dHJpYnV0ZSB3aXRob3V0IGhlYWRlcgotICogQHNrYjogc29ja2V0IGJ1ZmZlciB0byBhZGQgYXR0cmlidXRlIHRvCi0gKiBAYXR0cmxlbjogbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCi0gKiBAZGF0YTogaGVhZCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAotICoKLSAqIFJldHVybnMgLUVNU0dTSVpFIGlmIHRoZSB0YWlscm9vbSBvZiB0aGUgc2tiIGlzIGluc3VmZmljaWVudCB0byBzdG9yZQotICogdGhlIGF0dHJpYnV0ZSBwYXlsb2FkLgotICovCi1pbnQgbmxhX3B1dF9ub2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cmxlbiwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLQlpZiAodW5saWtlbHkoc2tiX3RhaWxyb29tKHNrYikgPCBOTEFfQUxJR04oYXR0cmxlbikpKQotCQlyZXR1cm4gLUVNU0dTSVpFOwotCi0JX19ubGFfcHV0X25vaGRyKHNrYiwgYXR0cmxlbiwgZGF0YSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogbmxhX2FwcGVuZCAtIEFkZCBhIG5ldGxpbmsgYXR0cmlidXRlIHdpdGhvdXQgaGVhZGVyIG9yIHBhZGRpbmcKLSAqIEBza2I6IHNvY2tldCBidWZmZXIgdG8gYWRkIGF0dHJpYnV0ZSB0bwotICogQGF0dHJsZW46IGxlbmd0aCBvZiBhdHRyaWJ1dGUgcGF5bG9hZAotICogQGRhdGE6IGhlYWQgb2YgYXR0cmlidXRlIHBheWxvYWQKLSAqCi0gKiBSZXR1cm5zIC1FTVNHU0laRSBpZiB0aGUgdGFpbHJvb20gb2YgdGhlIHNrYiBpcyBpbnN1ZmZpY2llbnQgdG8gc3RvcmUKLSAqIHRoZSBhdHRyaWJ1dGUgcGF5bG9hZC4KLSAqLwotaW50IG5sYV9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGF0dHJsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0JaWYgKHVubGlrZWx5KHNrYl90YWlscm9vbShza2IpIDwgTkxBX0FMSUdOKGF0dHJsZW4pKSkKLQkJcmV0dXJuIC1FTVNHU0laRTsKLQotCW1lbWNweShza2JfcHV0KHNrYiwgYXR0cmxlbiksIGRhdGEsIGF0dHJsZW4pOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKG5sYV92YWxpZGF0ZSk7Ci1FWFBPUlRfU1lNQk9MKG5sYV9wYXJzZSk7Ci1FWFBPUlRfU1lNQk9MKG5sYV9maW5kKTsKLUVYUE9SVF9TWU1CT0wobmxhX3N0cmxjcHkpOwotRVhQT1JUX1NZTUJPTChfX25sYV9yZXNlcnZlKTsKLUVYUE9SVF9TWU1CT0woX19ubGFfcmVzZXJ2ZV9ub2hkcik7Ci1FWFBPUlRfU1lNQk9MKG5sYV9yZXNlcnZlKTsKLUVYUE9SVF9TWU1CT0wobmxhX3Jlc2VydmVfbm9oZHIpOwotRVhQT1JUX1NZTUJPTChfX25sYV9wdXQpOwotRVhQT1JUX1NZTUJPTChfX25sYV9wdXRfbm9oZHIpOwotRVhQT1JUX1NZTUJPTChubGFfcHV0KTsKLUVYUE9SVF9TWU1CT0wobmxhX3B1dF9ub2hkcik7Ci1FWFBPUlRfU1lNQk9MKG5sYV9tZW1jcHkpOwotRVhQT1JUX1NZTUJPTChubGFfbWVtY21wKTsKLUVYUE9SVF9TWU1CT0wobmxhX3N0cmNtcCk7Ci1FWFBPUlRfU1lNQk9MKG5sYV9hcHBlbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldHJvbS9hZl9uZXRyb20uYyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKaW5kZXggZTljMDViOGYuLjRlNzA1ZjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKKysrIGIvbmV0L25ldHJvbS9hZl9uZXRyb20uYwpAQCAtMTA4Miw3ICsxMDgyLDExIEBACiAKIAlTT0NLX0RFQlVHKHNrLCAiTkVUL1JPTTogc2VuZHRvOiBBZGRyZXNzZXMgYnVpbHQuXG4iKTsKIAotCS8qIEJ1aWxkIGEgcGFja2V0ICovCisJLyogQnVpbGQgYSBwYWNrZXQgLSB0aGUgY29udmVudGlvbmFsIHVzZXIgbGltaXQgaXMgMjM2IGJ5dGVzLiBXZSBjYW4KKwkgICBkbyBsdWRpY3JvdXNseSBsYXJnZSBOZXRST00gZnJhbWVzIGJ1dCBtdXN0IG5vdCBvdmVyZmxvdyAqLworCWlmIChsZW4gPiA2NTUzNikKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwogCVNPQ0tfREVCVUcoc2ssICJORVQvUk9NOiBzZW5kdG86IGJ1aWxkaW5nIHBhY2tldC5cbiIpOwogCXNpemUgPSBsZW4gKyBOUl9ORVRXT1JLX0xFTiArIE5SX1RSQU5TUE9SVF9MRU47CiAKQEAgLTE0MzIsNyArMTQzNiw3IEBACiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKIAkJc3ByaW50ZihuYW1lLCAibnIlZCIsIGkpOwotCQlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBucl9wcml2YXRlKSwgbmFtZSwgbnJfc2V0dXApOworCQlkZXYgPSBhbGxvY19uZXRkZXYoMCwgbmFtZSwgbnJfc2V0dXApOwogCQlpZiAoIWRldikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJORVQvUk9NOiBucl9wcm90b19pbml0IC0gdW5hYmxlIHRvIGFsbG9jYXRlIGRldmljZSBzdHJ1Y3R1cmVcbiIpOwogCQkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvbmV0L25ldHJvbS9ucl9kZXYuYyBiL25ldC9uZXRyb20vbnJfZGV2LmMKaW5kZXggNmNhZjQ1OS4uMzUxMzcyNCAxMDA2NDQKLS0tIGEvbmV0L25ldHJvbS9ucl9kZXYuYworKysgYi9uZXQvbmV0cm9tL25yX2Rldi5jCkBAIC00Miw3ICs0Miw3IEBACiAKIGludCBucl9yeF9pcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlzdGF0cy0+cnhfZHJvcHBlZCsrOwpAQCAtMTcxLDggKzE3MSw3IEBACiAKIHN0YXRpYyBpbnQgbnJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBucl9wcml2YXRlICpuciA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJm5yLT5zdGF0czsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAl1bnNpZ25lZCBpbnQgbGVuID0gc2tiLT5sZW47CiAKIAlpZiAoIW5yX3JvdXRlX2ZyYW1lKHNrYiwgTlVMTCkpIHsKQEAgLTE4NywzNCArMTg2LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbnJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5yX3ByaXZhdGUgKm5yID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCXJldHVybiAmbnItPnN0YXRzOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgbnJfaGVhZGVyX29wcyA9IHsKIAkuY3JlYXRlCT0gbnJfaGVhZGVyLAogCS5yZWJ1aWxkPSBucl9yZWJ1aWxkX2hlYWRlciwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbnJfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4JCT0gbnJfb3BlbiwKKwkubmRvX3N0b3AJCT0gbnJfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IG5yX3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgICAgPSBucl9zZXRfbWFjX2FkZHJlc3MsCit9OwogCiB2b2lkIG5yX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5tdHUJCT0gTlJfTUFYX1BBQ0tFVF9TSVpFOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gbnJfeG1pdDsKLQlkZXYtPm9wZW4JCT0gbnJfb3BlbjsKLQlkZXYtPnN0b3AJCT0gbnJfY2xvc2U7Ci0KKwlkZXYtPm5ldGRldl9vcHMJCT0gJm5yX25ldGRldl9vcHM7CiAJZGV2LT5oZWFkZXJfb3BzCQk9ICZucl9oZWFkZXJfb3BzOwogCWRldi0+aGFyZF9oZWFkZXJfbGVuCT0gTlJfTkVUV09SS19MRU4gKyBOUl9UUkFOU1BPUlRfTEVOOwogCWRldi0+YWRkcl9sZW4JCT0gQVgyNV9BRERSX0xFTjsKIAlkZXYtPnR5cGUJCT0gQVJQSFJEX05FVFJPTTsKLQlkZXYtPnNldF9tYWNfYWRkcmVzcyAgICA9IG5yX3NldF9tYWNfYWRkcmVzczsKIAogCS8qIE5ldy1zdHlsZSBmbGFncy4gKi8KIAlkZXYtPmZsYWdzCQk9IElGRl9OT0FSUDsKLQotCWRldi0+Z2V0X3N0YXRzIAkJPSBucl9nZXRfc3RhdHM7CiB9CmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCAxZmM0YTc4Li43NDc3NmRlIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTU4NCw3ICs1ODQsNyBAQAogCQlza2ItPmxlbiA9IHNrYl9sZW47CiAJfQogZHJvcDoKLQlrZnJlZV9za2Ioc2tiKTsKKwljb25zdW1lX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCkBAIC03NTYsOCArNzU2LDcgQEAKIAlzcGluX3VubG9jaygmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CiAKIAlzay0+c2tfZGF0YV9yZWFkeShzaywgMCk7Ci0JaWYgKGNvcHlfc2tiKQotCQlrZnJlZV9za2IoY29weV9za2IpOworCWtmcmVlX3NrYihjb3B5X3NrYik7CiAJZ290byBkcm9wX25fcmVzdG9yZTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9hZl9waG9uZXQuYyBiL25ldC9waG9uZXQvYWZfcGhvbmV0LmMKaW5kZXggMTNjYjMyMy4uYTY2MmU2MiAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9hZl9waG9uZXQuYworKysgYi9uZXQvcGhvbmV0L2FmX3Bob25ldC5jCkBAIC0yNzUsOCArMjc1LDYgQEAKIAkJcmV0dXJuIDA7CiAKIAlwaCA9IHBuX2hkcihza2IpOwotCWlmIChwaG9uZXRfYWRkcmVzc19nZXQoc2tiLT5kZXYsIHBoLT5wbl9yZGV2KSAhPSBwaC0+cG5fcmRldikKLQkJcmV0dXJuIDA7IC8qIHdlIGFyZSBub3QgdGhlIGRlc3RpbmF0aW9uICovCiAJaWYgKHBoLT5wbl9yZXMgPT0gUE5fUFJFRklYICYmICFwc2tiX21heV9wdWxsKHNrYiwgNSkpCiAJCXJldHVybiAwOwogCWlmIChwaC0+cG5fcmVzID09IFBOX0NPTU1HUikgLyogaW5kaWNhdGlvbnMgKi8KQEAgLTM0NCw4ICszNDIsOCBAQAogCQkJc3RydWN0IHBhY2tldF90eXBlICpwa3R0eXBlLAogCQkJc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKIAlzdHJ1Y3QgcGhvbmV0aGRyICpwaDsKLQlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHNvY2thZGRyX3BuIHNhOwogCXUxNiBsZW47CiAKQEAgLTM2NCwyOSArMzYyLDI4IEBACiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAogCXBuX3NrYl9nZXRfZHN0X3NvY2thZGRyKHNrYiwgJnNhKTsKLQlpZiAocG5fc29ja2FkZHJfZ2V0X2FkZHIoJnNhKSA9PSAwKQotCQlnb3RvIG91dDsgLyogY3VycmVudGx5LCB3ZSBjYW5ub3QgYmUgZGV2aWNlIDAgKi8KIAotCXNrID0gcG5fZmluZF9zb2NrX2J5X3NhKGRldl9uZXQoZGV2KSwgJnNhKTsKLQlpZiAoc2sgPT0gTlVMTCkgeworCS8qIGNoZWNrIGlmIHdlIGFyZSB0aGUgZGVzdGluYXRpb24gKi8KKwlpZiAocGhvbmV0X2FkZHJlc3NfbG9va3VwKG5ldCwgcG5fc29ja2FkZHJfZ2V0X2FkZHIoJnNhKSkgPT0gMCkgeworCQkvKiBQaG9uZXQgcGFja2V0IGlucHV0ICovCisJCXN0cnVjdCBzb2NrICpzayA9IHBuX2ZpbmRfc29ja19ieV9zYShuZXQsICZzYSk7CisKKwkJaWYgKHNrKQorCQkJcmV0dXJuIHNrX3JlY2VpdmVfc2tiKHNrLCBza2IsIDApOworCiAJCWlmIChjYW5fcmVzcG9uZChza2IpKSB7CiAJCQlzZW5kX29ial91bnJlYWNoYWJsZShza2IpOwogCQkJc2VuZF9yZXNldF9pbmRpY2F0aW9ucyhza2IpOwogCQl9Ci0JCWdvdG8gb3V0OwogCX0KIAotCS8qIFB1c2ggZGF0YSB0byB0aGUgc29ja2V0IChvciBvdGhlciBzb2NrZXRzIGNvbm5lY3RlZCB0byBpdCkuICovCi0JcmV0dXJuIHNrX3JlY2VpdmVfc2tiKHNrLCBza2IsIDApOwotCiBvdXQ6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHBob25ldF9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfUEhPTkVUKSwKLQkuZGV2ID0gTlVMTCwKK3N0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgcGhvbmV0X3BhY2tldF90eXBlIF9fcmVhZF9tb3N0bHkgPSB7CisJLnR5cGUgPSBjcHVfdG9fYmUxNihFVEhfUF9QSE9ORVQpLAogCS5mdW5jID0gcGhvbmV0X3JjdiwKIH07CiAKQEAgLTQyOCwxNiArNDI1LDE4IEBACiB7CiAJaW50IGVycjsKIAorCWVyciA9IHBob25ldF9kZXZpY2VfaW5pdCgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAllcnIgPSBzb2NrX3JlZ2lzdGVyKCZwaG9uZXRfcHJvdG9fZmFtaWx5KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0FMRVJUCiAJCQkicGhvbmV0IHByb3RvY29sIGZhbWlseSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycl9zb2NrOwogCX0KIAotCXBob25ldF9kZXZpY2VfaW5pdCgpOwogCWRldl9hZGRfcGFjaygmcGhvbmV0X3BhY2tldF90eXBlKTsKLQlwaG9uZXRfbmV0bGlua19yZWdpc3RlcigpOwogCXBob25ldF9zeXNjdGxfaW5pdCgpOwogCiAJZXJyID0gaXNpX3JlZ2lzdGVyKCk7CkBAIC00NDksNiArNDQ4LDcgQEAKIAlwaG9uZXRfc3lzY3RsX2V4aXQoKTsKIAlzb2NrX3VucmVnaXN0ZXIoUEZfUEhPTkVUKTsKIAlkZXZfcmVtb3ZlX3BhY2soJnBob25ldF9wYWNrZXRfdHlwZSk7CitlcnJfc29jazoKIAlwaG9uZXRfZGV2aWNlX2V4aXQoKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wbl9kZXYuYyBiL25ldC9waG9uZXQvcG5fZGV2LmMKaW5kZXggNTQ5MWJmNS4uODBhMzIyZCAxMDA2NDQKLS0tIGEvbmV0L3Bob25ldC9wbl9kZXYuYworKysgYi9uZXQvcGhvbmV0L3BuX2Rldi5jCkBAIC0yOCwzMiArMjgsNDEgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9waG9uZXQuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAjaW5jbHVkZSA8bmV0L3Bob25ldC9wbl9kZXYuaD4KIAotLyogd2hlbiBhY2Nlc3NpbmcsIHJlbWVtYmVyIHRvIGxvY2sgd2l0aCBzcGluX2xvY2soJnBuZGV2cy5sb2NrKTsgKi8KLXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgcG5kZXZzID0gewotCS5saXN0ID0gTElTVF9IRUFEX0lOSVQocG5kZXZzLmxpc3QpLAotCS5sb2NrID0gX19TUElOX0xPQ0tfVU5MT0NLRUQocG5kZXZzLmxvY2spLAorc3RydWN0IHBob25ldF9uZXQgeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgcG5kZXZzOwogfTsKIAoraW50IHBob25ldF9uZXRfaWQ7CisKK3N0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBob25ldF9kZXZpY2VfbGlzdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHBob25ldF9uZXQgKnBubiA9IG5ldF9nZW5lcmljKG5ldCwgcGhvbmV0X25ldF9pZCk7CisJcmV0dXJuICZwbm4tPnBuZGV2czsKK30KKwogLyogQWxsb2NhdGUgbmV3IFBob25ldCBkZXZpY2UuICovCiBzdGF0aWMgc3RydWN0IHBob25ldF9kZXZpY2UgKl9fcGhvbmV0X2RldmljZV9hbGxvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQgPSBrbWFsbG9jKHNpemVvZigqcG5kKSwgR0ZQX0FUT01JQyk7CiAJaWYgKHBuZCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAlwbmQtPm5ldGRldiA9IGRldjsKIAliaXRtYXBfemVybyhwbmQtPmFkZHJzLCA2NCk7CiAKLQlsaXN0X2FkZCgmcG5kLT5saXN0LCAmcG5kZXZzLmxpc3QpOworCWxpc3RfYWRkKCZwbmQtPmxpc3QsICZwbmRldnMtPmxpc3QpOwogCXJldHVybiBwbmQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGhvbmV0X2RldmljZSAqX19waG9uZXRfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLmxpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy0+bGlzdCwgbGlzdCkgewogCQlpZiAocG5kLT5uZXRkZXYgPT0gZGV2KQogCQkJcmV0dXJuIHBuZDsKIAl9CkBAIC02OCwzMiArNzcsMzMgQEAKIAogc3RydWN0IG5ldF9kZXZpY2UgKnBob25ldF9kZXZpY2VfZ2V0KHN0cnVjdCBuZXQgKm5ldCkKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QobmV0KTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKLQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy5saXN0LCBsaXN0KSB7CisJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLT5saXN0LCBsaXN0KSB7CiAJCWRldiA9IHBuZC0+bmV0ZGV2OwogCQlCVUdfT04oIWRldik7CiAKLQkJaWYgKG5ldF9lcShkZXZfbmV0KGRldiksIG5ldCkgJiYKLQkJCShkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkgJiYKKwkJaWYgKChkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkgJiYKIAkJCSgocG5kLT5uZXRkZXYtPmZsYWdzICYgSUZGX1VQKSkgPT0gSUZGX1VQKQogCQkJYnJlYWs7CiAJCWRldiA9IE5VTEw7CiAJfQogCWlmIChkZXYpCiAJCWRldl9ob2xkKGRldik7Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAlyZXR1cm4gZGV2OwogfQogCiBpbnQgcGhvbmV0X2FkZHJlc3NfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IGFkZHIpCiB7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CiAJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAlpbnQgZXJyID0gMDsKIAotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAkvKiBGaW5kIG9yIGNyZWF0ZSBQaG9uZXQtc3BlY2lmaWMgZGV2aWNlIGRhdGEgKi8KIAlwbmQgPSBfX3Bob25ldF9nZXQoZGV2KTsKIAlpZiAocG5kID09IE5VTEwpCkBAIC0xMDIsMzEgKzExMiwzMyBAQAogCQllcnIgPSAtRU5PTUVNOwogCWVsc2UgaWYgKHRlc3RfYW5kX3NldF9iaXQoYWRkciA+PiAyLCBwbmQtPmFkZHJzKSkKIAkJZXJyID0gLUVFWElTVDsKLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKIGludCBwaG9uZXRfYWRkcmVzc19kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRkcikKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QoZGV2X25ldChkZXYpKTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOwogCWludCBlcnIgPSAwOwogCi0Jc3Bpbl9sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCXBuZCA9IF9fcGhvbmV0X2dldChkZXYpOwogCWlmICghcG5kIHx8ICF0ZXN0X2FuZF9jbGVhcl9iaXQoYWRkciA+PiAyLCBwbmQtPmFkZHJzKSkKIAkJZXJyID0gLUVBRERSTk9UQVZBSUw7CiAJZWxzZSBpZiAoYml0bWFwX2VtcHR5KHBuZC0+YWRkcnMsIDY0KSkKIAkJX19waG9uZXRfZGV2aWNlX2ZyZWUocG5kKTsKLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKIC8qIEdldHMgYSBzb3VyY2UgYWRkcmVzcyB0b3dhcmQgYSBkZXN0aW5hdGlvbiwgdGhyb3VnaCBhIGludGVyZmFjZS4gKi8KIHU4IHBob25ldF9hZGRyZXNzX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBhZGRyKQogeworCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2cyA9IHBob25ldF9kZXZpY2VfbGlzdChkZXZfbmV0KGRldikpOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CiAKLQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJcG5kID0gX19waG9uZXRfZ2V0KGRldik7CiAJaWYgKHBuZCkgewogCQlCVUdfT04oYml0bWFwX2VtcHR5KHBuZC0+YWRkcnMsIDY0KSk7CkBAIC0xMzYsMzAgKzE0OCwzMSBAQAogCQkJYWRkciA9IGZpbmRfZmlyc3RfYml0KHBuZC0+YWRkcnMsIDY0KSA8PCAyOwogCX0gZWxzZQogCQlhZGRyID0gUE5fTk9fQUREUjsKLQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMtPmxvY2spOwogCXJldHVybiBhZGRyOwogfQogCiBpbnQgcGhvbmV0X2FkZHJlc3NfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTggYWRkcikKIHsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZV9saXN0ICpwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3QobmV0KTsKIAlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kOworCWludCBlcnIgPSAtRUFERFJOT1RBVkFJTDsKIAotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLmxpc3QsIGxpc3QpIHsKLQkJaWYgKCFuZXRfZXEoZGV2X25ldChwbmQtPm5ldGRldiksIG5ldCkpCi0JCQljb250aW51ZTsKKwlzcGluX2xvY2tfYmgoJnBuZGV2cy0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwbmQsICZwbmRldnMtPmxpc3QsIGxpc3QpIHsKIAkJLyogRG9uJ3QgYWxsb3cgdW5yZWdpc3RlcmluZyBkZXZpY2VzISAqLwogCQlpZiAoKHBuZC0+bmV0ZGV2LT5yZWdfc3RhdGUgIT0gTkVUUkVHX1JFR0lTVEVSRUQpIHx8CiAJCQkJKChwbmQtPm5ldGRldi0+ZmxhZ3MgJiBJRkZfVVApKSAhPSBJRkZfVVApCiAJCQljb250aW51ZTsKIAogCQlpZiAodGVzdF9iaXQoYWRkciA+PiAyLCBwbmQtPmFkZHJzKSkgewotCQkJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKLQkJCXJldHVybiAwOworCQkJZXJyID0gMDsKKwkJCWdvdG8gZm91bmQ7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKLQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7Citmb3VuZDoKKwlzcGluX3VubG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKiBub3RpZnkgUGhvbmV0IG9mIGRldmljZSBldmVudHMgKi8KQEAgLTE2OSwxNCArMTgyLDE2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFyZzsKIAogCWlmICh3aGF0ID09IE5FVERFVl9VTlJFR0lTVEVSKSB7CisJCXN0cnVjdCBwaG9uZXRfZGV2aWNlX2xpc3QgKnBuZGV2czsKIAkJc3RydWN0IHBob25ldF9kZXZpY2UgKnBuZDsKIAogCQkvKiBEZXN0cm95IHBob25ldC1zcGVjaWZpYyBkZXZpY2UgZGF0YSAqLwotCQlzcGluX2xvY2tfYmgoJnBuZGV2cy5sb2NrKTsKKwkJcG5kZXZzID0gcGhvbmV0X2RldmljZV9saXN0KGRldl9uZXQoZGV2KSk7CisJCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAkJcG5kID0gX19waG9uZXRfZ2V0KGRldik7CiAJCWlmIChwbmQpCiAJCQlfX3Bob25ldF9kZXZpY2VfZnJlZShwbmQpOwotCQlzcGluX3VubG9ja19iaCgmcG5kZXZzLmxvY2spOworCQlzcGluX3VubG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTE4NywyNCArMjAyLDUyIEBACiAJLnByaW9yaXR5ID0gMCwKIH07CiAKLS8qIEluaXRpYWxpemUgUGhvbmV0IGRldmljZXMgbGlzdCAqLwotdm9pZCBwaG9uZXRfZGV2aWNlX2luaXQodm9pZCkKKy8qIFBlci1uYW1lc3BhY2UgUGhvbmV0IGRldmljZXMgaGFuZGxpbmcgKi8KK3N0YXRpYyBpbnQgcGhvbmV0X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKKwlzdHJ1Y3QgcGhvbmV0X25ldCAqcG5uID0ga21hbGxvYyhzaXplb2YoKnBubiksIEdGUF9LRVJORUwpOworCWlmICghcG5uKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZwbm4tPnBuZGV2cy5saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmcG5uLT5wbmRldnMubG9jayk7CisJbmV0X2Fzc2lnbl9nZW5lcmljKG5ldCwgcGhvbmV0X25ldF9pZCwgcG5uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGhvbmV0X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcGhvbmV0X25ldCAqcG5uID0gbmV0X2dlbmVyaWMobmV0LCBwaG9uZXRfbmV0X2lkKTsKKwlzdHJ1Y3QgcGhvbmV0X2RldmljZSAqcG5kLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwbmQsIG4sICZwbm4tPnBuZGV2cy5saXN0LCBsaXN0KQorCQlfX3Bob25ldF9kZXZpY2VfZnJlZShwbmQpOworCisJa2ZyZWUocG5uKTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBwaG9uZXRfbmV0X29wcyA9IHsKKwkuaW5pdCA9IHBob25ldF9pbml0X25ldCwKKwkuZXhpdCA9IHBob25ldF9leGl0X25ldCwKK307CisKKy8qIEluaXRpYWxpemUgUGhvbmV0IGRldmljZXMgbGlzdCAqLworaW50IF9faW5pdCBwaG9uZXRfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyID0gcmVnaXN0ZXJfcGVybmV0X2dlbl9kZXZpY2UoJnBob25ldF9uZXRfaWQsICZwaG9uZXRfbmV0X29wcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcGhvbmV0X2RldmljZV9ub3RpZmllcik7CisJZXJyID0gcGhvbmV0X25ldGxpbmtfcmVnaXN0ZXIoKTsKKwlpZiAoZXJyKQorCQlwaG9uZXRfZGV2aWNlX2V4aXQoKTsKKwlyZXR1cm4gZXJyOwogfQogCiB2b2lkIHBob25ldF9kZXZpY2VfZXhpdCh2b2lkKQogewotCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQsICpuOwotCiAJcnRubF91bnJlZ2lzdGVyX2FsbChQRl9QSE9ORVQpOwotCXJ0bmxfbG9jaygpOwotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBuZCwgbiwgJnBuZGV2cy5saXN0LCBsaXN0KQotCQlfX3Bob25ldF9kZXZpY2VfZnJlZShwbmQpOwotCi0Jc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy5sb2NrKTsKLQlydG5sX3VubG9jaygpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZwaG9uZXRfZGV2aWNlX25vdGlmaWVyKTsKKwl1bnJlZ2lzdGVyX3Blcm5ldF9nZW5fZGV2aWNlKHBob25ldF9uZXRfaWQsICZwaG9uZXRfbmV0X29wcyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYyBiL25ldC9waG9uZXQvcG5fbmV0bGluay5jCmluZGV4IDI0MmZlOGYuLmNlYzRlNTkgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvcG5fbmV0bGluay5jCisrKyBiL25ldC9waG9uZXQvcG5fbmV0bGluay5jCkBAIC00Nyw4ICs0Nyw5IEBACiAJCWtmcmVlX3NrYihza2IpOwogCQlnb3RvIGVycm91dDsKIAl9Ci0JZXJyID0gcnRubF9ub3RpZnkoc2tiLCBkZXZfbmV0KGRldiksIDAsCi0JCQkgIFJUTkxHUlBfUEhPTkVUX0lGQUREUiwgTlVMTCwgR0ZQX0tFUk5FTCk7CisJcnRubF9ub3RpZnkoc2tiLCBkZXZfbmV0KGRldiksIDAsCisJCSAgICBSVE5MR1JQX1BIT05FVF9JRkFERFIsIE5VTEwsIEdGUF9LRVJORUwpOworCXJldHVybjsKIGVycm91dDoKIAlpZiAoZXJyIDwgMCkKIAkJcnRubF9zZXRfc2tfZXJyKGRldl9uZXQoZGV2KSwgUlROTEdSUF9QSE9ORVRfSUZBRERSLCBlcnIpOwpAQCAtMTIzLDE3ICsxMjQsMTYgQEAKIAogc3RhdGljIGludCBnZXRhZGRyX2R1bXBpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CisJc3RydWN0IHBob25ldF9kZXZpY2VfbGlzdCAqcG5kZXZzOwogCXN0cnVjdCBwaG9uZXRfZGV2aWNlICpwbmQ7CiAJaW50IGRldl9pZHggPSAwLCBkZXZfc3RhcnRfaWR4ID0gY2ItPmFyZ3NbMF07CiAJaW50IGFkZHJfaWR4ID0gMCwgYWRkcl9zdGFydF9pZHggPSBjYi0+YXJnc1sxXTsKIAotCXNwaW5fbG9ja19iaCgmcG5kZXZzLmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocG5kLCAmcG5kZXZzLmxpc3QsIGxpc3QpIHsKKwlwbmRldnMgPSBwaG9uZXRfZGV2aWNlX2xpc3Qoc29ja19uZXQoc2tiLT5zaykpOworCXNwaW5fbG9ja19iaCgmcG5kZXZzLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBuZCwgJnBuZGV2cy0+bGlzdCwgbGlzdCkgewogCQl1OCBhZGRyOwogCi0JCWlmICghbmV0X2VxKGRldl9uZXQocG5kLT5uZXRkZXYpLCBuZXQpKQotCQkJY29udGludWU7CiAJCWlmIChkZXZfaWR4ID4gZGV2X3N0YXJ0X2lkeCkKIAkJCWFkZHJfc3RhcnRfaWR4ID0gMDsKIAkJaWYgKGRldl9pZHgrKyA8IGRldl9zdGFydF9pZHgpCkBAIC0xNTMsMTYgKzE1MywyMSBAQAogCX0KIAogb3V0OgotCXNwaW5fdW5sb2NrX2JoKCZwbmRldnMubG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBuZGV2cy0+bG9jayk7CiAJY2ItPmFyZ3NbMF0gPSBkZXZfaWR4OwogCWNiLT5hcmdzWzFdID0gYWRkcl9pZHg7CiAKIAlyZXR1cm4gc2tiLT5sZW47CiB9CiAKLXZvaWQgX19pbml0IHBob25ldF9uZXRsaW5rX3JlZ2lzdGVyKHZvaWQpCitpbnQgX19pbml0IHBob25ldF9uZXRsaW5rX3JlZ2lzdGVyKHZvaWQpCiB7Ci0JcnRubF9yZWdpc3RlcihQRl9QSE9ORVQsIFJUTV9ORVdBRERSLCBhZGRyX2RvaXQsIE5VTEwpOwotCXJ0bmxfcmVnaXN0ZXIoUEZfUEhPTkVULCBSVE1fREVMQUREUiwgYWRkcl9kb2l0LCBOVUxMKTsKLQlydG5sX3JlZ2lzdGVyKFBGX1BIT05FVCwgUlRNX0dFVEFERFIsIE5VTEwsIGdldGFkZHJfZHVtcGl0KTsKKwlpbnQgZXJyID0gX19ydG5sX3JlZ2lzdGVyKFBGX1BIT05FVCwgUlRNX05FV0FERFIsIGFkZHJfZG9pdCwgTlVMTCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIEZ1cnRoZXIgX19ydG5sX3JlZ2lzdGVyKCkgY2Fubm90IGZhaWwgKi8KKwlfX3J0bmxfcmVnaXN0ZXIoUEZfUEhPTkVULCBSVE1fREVMQUREUiwgYWRkcl9kb2l0LCBOVUxMKTsKKwlfX3J0bmxfcmVnaXN0ZXIoUEZfUEhPTkVULCBSVE1fR0VUQUREUiwgTlVMTCwgZ2V0YWRkcl9kdW1waXQpOworCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9LY29uZmlnIGIvbmV0L3Jkcy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5Njc3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL0tjb25maWcKQEAgLTAsMCArMSwxNCBAQAorCitjb25maWcgUkRTCisJdHJpc3RhdGUgIlJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMgKFJEUykgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBJTkVUICYmIElORklOSUJBTkRfSVBPSUIgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBJTkZJTklCQU5EICYmIElORklOSUJBTkRfQUREUl9UUkFOUworCS0tLWhlbHAtLS0KKwkgIFJEUyBwcm92aWRlcyByZWxpYWJsZSwgc2VxdWVuY2VkIGRlbGl2ZXJ5IG9mIGRhdGFncmFtcworCSAgb3ZlciBJbmZpbmliYW5kLgorCitjb25maWcgUkRTX0RFQlVHCisgICAgICAgIGJvb2wgIkRlYnVnZ2luZyBtZXNzYWdlcyIKKwlkZXBlbmRzIG9uIFJEUworICAgICAgICBkZWZhdWx0IG4KKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9NYWtlZmlsZSBiL25ldC9yZHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmMjc1OAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvTWFrZWZpbGUKQEAgLTAsMCArMSwxNCBAQAorb2JqLSQoQ09ORklHX1JEUykgKz0gcmRzLm8KK3Jkcy15IDo9CWFmX3Jkcy5vIGJpbmQubyBjb25nLm8gY29ubmVjdGlvbi5vIGluZm8ubyBtZXNzYWdlLm8gICBcCisJCQlyZWN2Lm8gc2VuZC5vIHN0YXRzLm8gc3lzY3RsLm8gdGhyZWFkcy5vIHRyYW5zcG9ydC5vIFwKKwkJCWxvb3AubyBwYWdlLm8gcmRtYS5vIFwKKwkJCXJkbWFfdHJhbnNwb3J0Lm8gXAorCQkJaWIubyBpYl9jbS5vIGliX3JlY3YubyBpYl9yaW5nLm8gaWJfc2VuZC5vIGliX3N0YXRzLm8gXAorCQkJaWJfc3lzY3RsLm8gaWJfcmRtYS5vIFwKKwkJCWl3Lm8gaXdfY20ubyBpd19yZWN2Lm8gaXdfcmluZy5vIGl3X3NlbmQubyBpd19zdGF0cy5vIFwKKwkJCWl3X3N5c2N0bC5vIGl3X3JkbWEubworCitpZmVxICgkKENPTkZJR19SRFNfREVCVUcpLCB5KQorRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKK2VuZGlmCisKZGlmZiAtLWdpdCBhL25ldC9yZHMvYWZfcmRzLmMgYi9uZXQvcmRzL2FmX3Jkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwY2YxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2FmX3Jkcy5jCkBAIC0wLDAgKzEsNTg2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorI2luY2x1ZGUgInJkbWFfdHJhbnNwb3J0LmgiCisKKy8qIHRoaXMgaXMganVzdCB1c2VkIGZvciBzdGF0cyBnYXRoZXJpbmcgOi8gKi8KK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX3NvY2tfbG9jayk7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfc29ja19jb3VudDsKK3N0YXRpYyBMSVNUX0hFQUQocmRzX3NvY2tfbGlzdCk7CitERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZHNfcG9sbF93YWl0cSk7CisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCBhcyB0aGUgZmluYWwgZGVzY3JpcHRvciByZWZlcmVuY2luZyB0aGlzIHNvY2tldCBpcyBjbG9zZWQuCisgKiBXZSBoYXZlIHRvIHVuYmluZCB0aGUgc29ja2V0IHNvIHRoYXQgYW5vdGhlciBzb2NrZXQgY2FuIGJlIGJvdW5kIHRvIHRoZQorICogYWRkcmVzcyBpdCB3YXMgdXNpbmcuCisgKgorICogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIGFib3V0IHJhY2luZyB3aXRoIHRoZSBpbmNvbWluZyBwYXRoLiAgc29ja19vcnBoYW4oKQorICogc2V0cyBTT0NLX0RFQUQgYW5kIHdlIHVzZSB0aGF0IGFzIGFuIGluZGljYXRvciB0byB0aGUgcnggcGF0aCB0aGF0IG5ldworICogbWVzc2FnZXMgc2hvdWxkbid0IGJlIHF1ZXVlZC4KKyAqLworc3RhdGljIGludCByZHNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCByZHNfc29jayAqcnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChzayA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKworCXNvY2tfb3JwaGFuKHNrKTsKKwkvKiBOb3RlIC0gcmRzX2NsZWFyX3JlY3ZfcXVldWUgZ3JhYnMgcnNfcmVjdl9sb2NrLCBzbworCSAqIHRoYXQgZW5zdXJlcyB0aGUgcmVjdiBwYXRoIGhhcyBjb21wbGV0ZWQgbWVzc2luZworCSAqIHdpdGggdGhlIHNvY2tldC4gKi8KKwlyZHNfY2xlYXJfcmVjdl9xdWV1ZShycyk7CisJcmRzX2NvbmdfcmVtb3ZlX3NvY2tldChycyk7CisJcmRzX3JlbW92ZV9ib3VuZChycyk7CisJcmRzX3NlbmRfZHJvcF90byhycywgTlVMTCk7CisJcmRzX3JkbWFfZHJvcF9rZXlzKHJzKTsKKwlyZHNfbm90aWZ5X3F1ZXVlX2dldChycywgTlVMTCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsX2luaXQoJnJzLT5yc19pdGVtKTsKKwlyZHNfc29ja19jb3VudC0tOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKworCXNvY2stPnNrID0gTlVMTDsKKwlzb2NrX3B1dChzayk7CitvdXQ6CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYXJlZnVsIG5vdCB0byByYWNlIHdpdGggcmRzX3JlbGVhc2UgLT4gc29ja19vcnBoYW4gd2hpY2ggY2xlYXJzIHNrX3NsZWVwLgorICogX2JoKCkgaXNuJ3QgT0sgaGVyZSwgd2UncmUgY2FsbGVkIGZyb20gaW50ZXJydXB0IGhhbmRsZXJzLiAgSXQncyBwcm9iYWJseSBPSworICogdG8gd2FrZSB0aGUgd2FpdHF1ZXVlIGFmdGVyIHNrX3NsZWVwIGlzIGNsZWFyIGFzIHdlIGhvbGQgYSBzb2NrIHJlZiwgYnV0CisgKiB0aGlzIHNlZW1zIG1vcmUgY29uc2VydmF0aXZlLgorICogTkIgLSBub3JtYWxseSwgb25lIHdvdWxkIHVzZSBza19jYWxsYmFja19sb2NrIGZvciB0aGlzLCBidXQgd2UgY2FuCisgKiBnZXQgaGVyZSBmcm9tIGludGVycnVwdHMsIHdoZXJlYXMgdGhlIG5ldHdvcmsgY29kZSBncmFicyBza19jYWxsYmFja19sb2NrCisgKiB3aXRoIF9sb2NrX2JoIG9ubHkgLSBzbyByZWx5aW5nIG9uIHNrX2NhbGxiYWNrX2xvY2sgaW50cm9kdWNlcyBsaXZlbG9ja3MuCisgKi8KK3ZvaWQgcmRzX3dha2Vfc2tfc2xlZXAoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcmVhZF9sb2NrX2lycXNhdmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwlfX3Jkc193YWtlX3NrX3NsZWVwKHJkc19yc190b19zayhycykpOworCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCByZHNfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAorCQkgICAgICAgaW50ICp1YWRkcl9sZW4sIGludCBwZWVyKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXVhZGRyOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc29jay0+c2spOworCisJbWVtc2V0KHNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7CisKKwkvKiByYWNleSwgZG9uJ3QgY2FyZSAqLworCWlmIChwZWVyKSB7CisJCWlmICghcnMtPnJzX2Nvbm5fYWRkcikKKwkJCXJldHVybiAtRU5PVENPTk47CisKKwkJc2luLT5zaW5fcG9ydCA9IHJzLT5yc19jb25uX3BvcnQ7CisJCXNpbi0+c2luX2FkZHIuc19hZGRyID0gcnMtPnJzX2Nvbm5fYWRkcjsKKwl9IGVsc2UgeworCQlzaW4tPnNpbl9wb3J0ID0gcnMtPnJzX2JvdW5kX3BvcnQ7CisJCXNpbi0+c2luX2FkZHIuc19hZGRyID0gcnMtPnJzX2JvdW5kX2FkZHI7CisJfQorCisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworCSp1YWRkcl9sZW4gPSBzaXplb2YoKnNpbik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSRFMnIHBvbGwgaXMgd2l0aG91dCBhIGRvdWJ0IHRoZSBsZWFzdCBpbnR1aXRpdmUgcGFydCBvZiB0aGUgaW50ZXJmYWNlLAorICogYXMgUE9MTElOIGFuZCBQT0xMT1VUIGRvIG5vdCBiZWhhdmUgZW50aXJlbHkgYXMgeW91IHdvdWxkIGV4cGVjdCBmcm9tCisgKiBhIG5ldHdvcmsgcHJvdG9jb2wuCisgKgorICogUE9MTElOIGlzIGFzc2VydGVkIGlmCisgKiAgLQl0aGVyZSBpcyBkYXRhIG9uIHRoZSByZWNlaXZlIHF1ZXVlLgorICogIC0JdG8gc2lnbmFsIHRoYXQgYSBwcmV2aW91c2x5IGNvbmdlc3RlZCBkZXN0aW5hdGlvbiBtYXkgaGF2ZSBiZWNvbWUKKyAqCXVuY29uZ2VzdGVkCisgKiAgLQlBIG5vdGlmaWNhdGlvbiBoYXMgYmVlbiBxdWV1ZWQgdG8gdGhlIHNvY2tldCAodGhpcyBjYW4gYmUgYSBjb25nZXN0aW9uCisgKgl1cGRhdGUsIG9yIGEgUkRNQSBjb21wbGV0aW9uKS4KKyAqCisgKiBQT0xMT1VUIGlzIGFzc2VydGVkIGlmIHRoZXJlIGlzIHJvb20gb24gdGhlIHNlbmQgcXVldWUuIFRoaXMgZG9lcyBub3QgbWVhbgorICogaG93ZXZlciwgdGhhdCB0aGUgbmV4dCBzZW5kbXNnKCkgY2FsbCB3aWxsIHN1Y2NlZWQuIElmIHRoZSBhcHBsaWNhdGlvbiB0cmllcworICogdG8gc2VuZCB0byBhIGNvbmdlc3RlZCBkZXN0aW5hdGlvbiwgdGhlIHN5c3RlbSBjYWxsIG1heSBzdGlsbCBmYWlsIChhbmQKKyAqIHJldHVybiBFTk9CVUZTKS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCByZHNfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCSAgICAgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXBvbGxfd2FpdChmaWxlLCBzay0+c2tfc2xlZXAsIHdhaXQpOworCisJcG9sbF93YWl0KGZpbGUsICZyZHNfcG9sbF93YWl0cSwgd2FpdCk7CisKKwlyZWFkX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCWlmICghcnMtPnJzX2NvbmdfbW9uaXRvcikgeworCQkvKiBXaGVuIGEgY29uZ2VzdGlvbiBtYXAgd2FzIHVwZGF0ZWQsIHdlIHNpZ25hbCBQT0xMSU4gZm9yCisJCSAqICJoaXN0b3JpY2FsIiByZWFzb25zLiBBcHBsaWNhdGlvbnMgY2FuIGFsc28gcG9sbCBmb3IKKwkJICogV1JCQU5EIGluc3RlYWQuICovCisJCWlmIChyZHNfY29uZ191cGRhdGVkX3NpbmNlKCZycy0+cnNfY29uZ190cmFjaykpCisJCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFdSQkFORCk7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrKCZycy0+cnNfbG9jayk7CisJCWlmIChycy0+cnNfY29uZ19ub3RpZnkpCisJCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKTsKKwkJc3Bpbl91bmxvY2soJnJzLT5yc19sb2NrKTsKKwl9CisJaWYgKCFsaXN0X2VtcHR5KCZycy0+cnNfcmVjdl9xdWV1ZSkKKwkgfHwgIWxpc3RfZW1wdHkoJnJzLT5yc19ub3RpZnlfcXVldWUpKQorCQltYXNrIHw9IChQT0xMSU4gfCBQT0xMUkROT1JNKTsKKwlpZiAocnMtPnJzX3NuZF9ieXRlcyA8IHJkc19za19zbmRidWYocnMpKQorCQltYXNrIHw9IChQT0xMT1VUIHwgUE9MTFdSTk9STSk7CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2NhbmNlbF9zZW50X3RvKHN0cnVjdCByZHNfc29jayAqcnMsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkgICAgICBpbnQgbGVuKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJaW50IHJldCA9IDA7CisKKwkvKiByYWNpbmcgd2l0aCBhbm90aGVyIHRocmVhZCBiaW5kaW5nIHNlZW1zIG9rIGhlcmUgKi8KKwlpZiAocnMtPnJzX2JvdW5kX2FkZHIgPT0gMCkgeworCQlyZXQgPSAtRU5PVENPTk47IC8qIFhYWCBub3QgYSBncmVhdCBlcnJubyAqLworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKCZzaW4sIG9wdHZhbCwgc2l6ZW9mKHNpbikpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19zZW5kX2Ryb3BfdG8ocnMsICZzaW4pOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX3NldF9ib29sX29wdGlvbih1bnNpZ25lZCBjaGFyICpvcHR2YXIsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQkgICAgICAgaW50IG9wdGxlbikKK3sKKwlpbnQgdmFsdWU7CisKKwlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChnZXRfdXNlcih2YWx1ZSwgKGludCBfX3VzZXIgKikgb3B0dmFsKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJKm9wdHZhciA9ICEhdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2NvbmdfbW9uaXRvcihzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJICAgIGludCBvcHRsZW4pCit7CisJaW50IHJldDsKKworCXJldCA9IHJkc19zZXRfYm9vbF9vcHRpb24oJnJzLT5yc19jb25nX21vbml0b3IsIG9wdHZhbCwgb3B0bGVuKTsKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKHJzLT5yc19jb25nX21vbml0b3IpIHsKKwkJCXJkc19jb25nX2FkZF9zb2NrZXQocnMpOworCQl9IGVsc2UgeworCQkJcmRzX2NvbmdfcmVtb3ZlX3NvY2tldChycyk7CisJCQlycy0+cnNfY29uZ19tYXNrID0gMDsKKwkJCXJzLT5yc19jb25nX25vdGlmeSA9IDA7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQoreworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc29jay0+c2spOworCWludCByZXQ7CisKKwlpZiAobGV2ZWwgIT0gU09MX1JEUykgeworCQlyZXQgPSAtRU5PUFJPVE9PUFQ7CisJCWdvdG8gb3V0OworCX0KKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgUkRTX0NBTkNFTF9TRU5UX1RPOgorCQlyZXQgPSByZHNfY2FuY2VsX3NlbnRfdG8ocnMsIG9wdHZhbCwgb3B0bGVuKTsKKwkJYnJlYWs7CisJY2FzZSBSRFNfR0VUX01SOgorCQlyZXQgPSByZHNfZ2V0X21yKHJzLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOworCWNhc2UgUkRTX0ZSRUVfTVI6CisJCXJldCA9IHJkc19mcmVlX21yKHJzLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOworCWNhc2UgUkRTX1JFQ1ZFUlI6CisJCXJldCA9IHJkc19zZXRfYm9vbF9vcHRpb24oJnJzLT5yc19yZWN2ZXJyLCBvcHR2YWwsIG9wdGxlbik7CisJCWJyZWFrOworCWNhc2UgUkRTX0NPTkdfTU9OSVRPUjoKKwkJcmV0ID0gcmRzX2NvbmdfbW9uaXRvcihycywgb3B0dmFsLCBvcHRsZW4pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PUFJPVE9PUFQ7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc29jay0+c2spOworCWludCByZXQgPSAtRU5PUFJPVE9PUFQsIGxlbjsKKworCWlmIChsZXZlbCAhPSBTT0xfUkRTKQorCQlnb3RvIG91dDsKKworCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBSRFNfSU5GT19GSVJTVCAuLi4gUkRTX0lORk9fTEFTVDoKKwkJcmV0ID0gcmRzX2luZm9fZ2V0c29ja29wdChzb2NrLCBvcHRuYW1lLCBvcHR2YWwsCisJCQkJCSAgb3B0bGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIFJEU19SRUNWRVJSOgorCQlpZiAobGVuIDwgc2l6ZW9mKGludCkpCisJCQlyZXQgPSAtRUlOVkFMOworCQllbHNlCisJCWlmIChwdXRfdXNlcihycy0+cnNfcmVjdmVyciwgKGludCBfX3VzZXIgKikgb3B0dmFsKQorCQkgfHwgcHV0X3VzZXIoc2l6ZW9mKGludCksIG9wdGxlbikpCisJCQlyZXQgPSAtRUZBVUxUOworCQllbHNlCisJCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworCit9CisKK3N0YXRpYyBpbnQgcmRzX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKKwkJICAgICAgIGludCBhZGRyX2xlbiwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXVhZGRyOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc2spOworCWludCByZXQgPSAwOworCisJbG9ja19zb2NrKHNrKTsKKworCWlmIChhZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoc2luLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpIHsKKwkJcmV0ID0gLUVBRk5PU1VQUE9SVDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IGh0b25sKElOQUREUl9BTlkpKSB7CisJCXJldCA9IC1FREVTVEFERFJSRVE7CisJCWdvdG8gb3V0OworCX0KKworCXJzLT5yc19jb25uX2FkZHIgPSBzaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwlycy0+cnNfY29ubl9wb3J0ID0gc2luLT5zaW5fcG9ydDsKKworb3V0OgorCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwcm90byByZHNfcHJvdG8gPSB7CisJLm5hbWUJICA9ICJSRFMiLAorCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCisJLm9ial9zaXplID0gc2l6ZW9mKHN0cnVjdCByZHNfc29jayksCit9OworCitzdGF0aWMgc3RydWN0IHByb3RvX29wcyByZHNfcHJvdG9fb3BzID0geworCS5mYW1pbHkgPQlBRl9SRFMsCisJLm93bmVyID0JVEhJU19NT0RVTEUsCisJLnJlbGVhc2UgPQlyZHNfcmVsZWFzZSwKKwkuYmluZCA9CQlyZHNfYmluZCwKKwkuY29ubmVjdCA9CXJkc19jb25uZWN0LAorCS5zb2NrZXRwYWlyID0Jc29ja19ub19zb2NrZXRwYWlyLAorCS5hY2NlcHQgPQlzb2NrX25vX2FjY2VwdCwKKwkuZ2V0bmFtZSA9CXJkc19nZXRuYW1lLAorCS5wb2xsID0JCXJkc19wb2xsLAorCS5pb2N0bCA9CXJkc19pb2N0bCwKKwkubGlzdGVuID0Jc29ja19ub19saXN0ZW4sCisJLnNodXRkb3duID0Jc29ja19ub19zaHV0ZG93biwKKwkuc2V0c29ja29wdCA9CXJkc19zZXRzb2Nrb3B0LAorCS5nZXRzb2Nrb3B0ID0JcmRzX2dldHNvY2tvcHQsCisJLnNlbmRtc2cgPQlyZHNfc2VuZG1zZywKKwkucmVjdm1zZyA9CXJkc19yZWN2bXNnLAorCS5tbWFwID0JCXNvY2tfbm9fbW1hcCwKKwkuc2VuZHBhZ2UgPQlzb2NrX25vX3NlbmRwYWdlLAorfTsKKworc3RhdGljIGludCBfX3Jkc19jcmVhdGUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2sgKnNrLCBpbnQgcHJvdG9jb2wpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCisJc29ja19pbml0X2RhdGEoc29jaywgc2spOworCXNvY2stPm9wcwkJPSAmcmRzX3Byb3RvX29wczsKKwlzay0+c2tfcHJvdG9jb2wJCT0gcHJvdG9jb2w7CisKKwlycyA9IHJkc19za190b19ycyhzayk7CisJc3Bpbl9sb2NrX2luaXQoJnJzLT5yc19sb2NrKTsKKwlyd2xvY2tfaW5pdCgmcnMtPnJzX3JlY3ZfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnJzLT5yc19zZW5kX3F1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmcnMtPnJzX3JlY3ZfcXVldWUpOworCUlOSVRfTElTVF9IRUFEKCZycy0+cnNfbm90aWZ5X3F1ZXVlKTsKKwlJTklUX0xJU1RfSEVBRCgmcnMtPnJzX2NvbmdfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJnJzLT5yc19yZG1hX2xvY2spOworCXJzLT5yc19yZG1hX2tleXMgPSBSQl9ST09UOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZycy0+cnNfaXRlbSwgJnJkc19zb2NrX2xpc3QpOworCXJkc19zb2NrX2NvdW50Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX3NvY2tfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCkKK3sKKwlzdHJ1Y3Qgc29jayAqc2s7CisKKwlpZiAoc29jay0+dHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCB8fCBwcm90b2NvbCkKKwkJcmV0dXJuIC1FU09DS1ROT1NVUFBPUlQ7CisKKwlzayA9IHNrX2FsbG9jKG5ldCwgQUZfUkRTLCBHRlBfQVRPTUlDLCAmcmRzX3Byb3RvKTsKKwlpZiAoIXNrKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiBfX3Jkc19jcmVhdGUoc29jaywgc2ssIHByb3RvY29sKTsKK30KKwordm9pZCByZHNfc29ja19hZGRyZWYoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlzb2NrX2hvbGQocmRzX3JzX3RvX3NrKHJzKSk7Cit9CisKK3ZvaWQgcmRzX3NvY2tfcHV0KHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJc29ja19wdXQocmRzX3JzX3RvX3NrKHJzKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSByZHNfZmFtaWx5X29wcyA9IHsKKwkuZmFtaWx5ID0JQUZfUkRTLAorCS5jcmVhdGUgPQlyZHNfY3JlYXRlLAorCS5vd25lcgk9CVRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIHZvaWQgcmRzX3NvY2tfaW5jX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgICAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgICAgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXN0cnVjdCByZHNfc29jayAqcnM7CisJc3RydWN0IHNvY2sgKnNrOworCXN0cnVjdCByZHNfaW5jb21pbmcgKmluYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCB0b3RhbCA9IDA7CisKKwlsZW4gLz0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19tZXNzYWdlKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJzLCAmcmRzX3NvY2tfbGlzdCwgcnNfaXRlbSkgeworCQlzayA9IHJkc19yc190b19zayhycyk7CisJCXJlYWRfbG9jaygmcnMtPnJzX3JlY3ZfbG9jayk7CisKKwkJLyogWFhYIHRvbyBsYXp5IHRvIG1haW50YWluIGNvdW50cy4uICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5jLCAmcnMtPnJzX3JlY3ZfcXVldWUsIGlfaXRlbSkgeworCQkJdG90YWwrKzsKKwkJCWlmICh0b3RhbCA8PSBsZW4pCisJCQkJcmRzX2luY19pbmZvX2NvcHkoaW5jLCBpdGVyLCBpbmMtPmlfc2FkZHIsCisJCQkJCQkgIHJzLT5yc19ib3VuZF9hZGRyLCAxKTsKKwkJfQorCisJCXJlYWRfdW5sb2NrKCZycy0+cnNfcmVjdl9sb2NrKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfc29ja19sb2NrLCBmbGFncyk7CisKKwlsZW5zLT5uciA9IHRvdGFsOworCWxlbnMtPmVhY2ggPSBzaXplb2Yoc3RydWN0IHJkc19pbmZvX21lc3NhZ2UpOworfQorCitzdGF0aWMgdm9pZCByZHNfc29ja19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJc3RydWN0IHJkc19pbmZvX3NvY2tldCBzaW5mbzsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsZW4gLz0gc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19zb2NrZXQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKKworCWlmIChsZW4gPCByZHNfc29ja19jb3VudCkKKwkJZ290byBvdXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJzLCAmcmRzX3NvY2tfbGlzdCwgcnNfaXRlbSkgeworCQlzaW5mby5zbmRidWYgPSByZHNfc2tfc25kYnVmKHJzKTsKKwkJc2luZm8ucmN2YnVmID0gcmRzX3NrX3JjdmJ1Zihycyk7CisJCXNpbmZvLmJvdW5kX2FkZHIgPSBycy0+cnNfYm91bmRfYWRkcjsKKwkJc2luZm8uY29ubmVjdGVkX2FkZHIgPSBycy0+cnNfY29ubl9hZGRyOworCQlzaW5mby5ib3VuZF9wb3J0ID0gcnMtPnJzX2JvdW5kX3BvcnQ7CisJCXNpbmZvLmNvbm5lY3RlZF9wb3J0ID0gcnMtPnJzX2Nvbm5fcG9ydDsKKwkJc2luZm8uaW51bSA9IHNvY2tfaV9pbm8ocmRzX3JzX3RvX3NrKHJzKSk7CisKKwkJcmRzX2luZm9fY29weShpdGVyLCAmc2luZm8sIHNpemVvZihzaW5mbykpOworCX0KKworb3V0OgorCWxlbnMtPm5yID0gcmRzX3NvY2tfY291bnQ7CisJbGVucy0+ZWFjaCA9IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fc29ja2V0KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19zb2NrX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHJkc19leGl0KHZvaWQpCit7CisJcmRzX3JkbWFfZXhpdCgpOworCXNvY2tfdW5yZWdpc3RlcihyZHNfZmFtaWx5X29wcy5mYW1pbHkpOworCXByb3RvX3VucmVnaXN0ZXIoJnJkc19wcm90byk7CisJcmRzX2Nvbm5fZXhpdCgpOworCXJkc19jb25nX2V4aXQoKTsKKwlyZHNfc3lzY3RsX2V4aXQoKTsKKwlyZHNfdGhyZWFkc19leGl0KCk7CisJcmRzX3N0YXRzX2V4aXQoKTsKKwlyZHNfcGFnZV9leGl0KCk7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1NPQ0tFVFMsIHJkc19zb2NrX2luZm8pOworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19SRUNWX01FU1NBR0VTLCByZHNfc29ja19pbmNfaW5mbyk7Cit9Cittb2R1bGVfZXhpdChyZHNfZXhpdCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHJkc19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJkc19jb25uX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwlyZXQgPSByZHNfdGhyZWFkc19pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfY29ubjsKKwlyZXQgPSByZHNfc3lzY3RsX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF90aHJlYWRzOworCXJldCA9IHJkc19zdGF0c19pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfc3lzY3RsOworCXJldCA9IHByb3RvX3JlZ2lzdGVyKCZyZHNfcHJvdG8sIDEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3N0YXRzOworCXJldCA9IHNvY2tfcmVnaXN0ZXIoJnJkc19mYW1pbHlfb3BzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9wcm90bzsKKworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fU09DS0VUUywgcmRzX3NvY2tfaW5mbyk7CisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19SRUNWX01FU1NBR0VTLCByZHNfc29ja19pbmNfaW5mbyk7CisKKwkvKiBpYi9pd2FycCB0cmFuc3BvcnRzIGN1cnJlbnRseSBjb21waWxlZC1pbiAqLworCXJldCA9IHJkc19yZG1hX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9zb2NrOworCWdvdG8gb3V0OworCitvdXRfc29jazoKKwlzb2NrX3VucmVnaXN0ZXIocmRzX2ZhbWlseV9vcHMuZmFtaWx5KTsKK291dF9wcm90bzoKKwlwcm90b191bnJlZ2lzdGVyKCZyZHNfcHJvdG8pOworb3V0X3N0YXRzOgorCXJkc19zdGF0c19leGl0KCk7CitvdXRfc3lzY3RsOgorCXJkc19zeXNjdGxfZXhpdCgpOworb3V0X3RocmVhZHM6CisJcmRzX3RocmVhZHNfZXhpdCgpOworb3V0X2Nvbm46CisJcmRzX2Nvbm5fZXhpdCgpOworCXJkc19jb25nX2V4aXQoKTsKKwlyZHNfcGFnZV9leGl0KCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KK21vZHVsZV9pbml0KHJkc19pbml0KTsKKworI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgIjQuMCIKKyNkZWZpbmUgRFJWX1JFTERBVEUgICAgICJGZWIgMTIsIDIwMDkiCisKK01PRFVMRV9BVVRIT1IoIk9yYWNsZSBDb3Jwb3JhdGlvbiA8cmRzLWRldmVsQG9zcy5vcmFjbGUuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSRFM6IFJlbGlhYmxlIERhdGFncmFtIFNvY2tldHMiCisJCSAgICIgdiIgRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKSIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworTU9EVUxFX0FMSUFTX05FVFBST1RPKFBGX1JEUyk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL2JpbmQuYyBiL25ldC9yZHMvYmluZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxN2NjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2JpbmQuYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgInJkcy5oIgorCisvKgorICogWFhYIHRoaXMgcHJvYmFibHkgc3RpbGwgbmVlZHMgbW9yZSB3b3JrLi4gbm8gSU5BRERSX0FOWSwgYW5kIHJidHJlZXMgYXJlbid0CisgKiBwYXJ0aWN1bGFybHkgemlwcHkuCisgKgorICogVGhpcyBpcyBub3cgY2FsbGVkIGZvciBldmVyeSBpbmNvbWluZyBmcmFtZSBzbyB3ZSBhcmd1YWJseSBjYXJlIG11Y2ggbW9yZQorICogYWJvdXQgaXQgdGhhbiB3ZSB1c2VkIHRvLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19iaW5kX2xvY2spOworc3RhdGljIHN0cnVjdCByYl9yb290IHJkc19iaW5kX3RyZWUgPSBSQl9ST09UOworCitzdGF0aWMgc3RydWN0IHJkc19zb2NrICpyZHNfYmluZF90cmVlX3dhbGsoX19iZTMyIGFkZHIsIF9fYmUxNiBwb3J0LAorCQkJCQkgICBzdHJ1Y3QgcmRzX3NvY2sgKmluc2VydCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmcmRzX2JpbmRfdHJlZS5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCByZHNfc29jayAqcnM7CisJdTY0IGNtcDsKKwl1NjQgbmVlZGxlID0gKCh1NjQpYmUzMl90b19jcHUoYWRkcikgPDwgMzIpIHwgYmUxNl90b19jcHUocG9ydCk7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCXJzID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgcmRzX3NvY2ssIHJzX2JvdW5kX25vZGUpOworCisJCWNtcCA9ICgodTY0KWJlMzJfdG9fY3B1KHJzLT5yc19ib3VuZF9hZGRyKSA8PCAzMikgfAorCQkgICAgICBiZTE2X3RvX2NwdShycy0+cnNfYm91bmRfcG9ydCk7CisKKwkJaWYgKG5lZWRsZSA8IGNtcCkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAobmVlZGxlID4gY21wKQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIHJzOworCX0KKworCWlmIChpbnNlcnQpIHsKKwkJcmJfbGlua19ub2RlKCZpbnNlcnQtPnJzX2JvdW5kX25vZGUsIHBhcmVudCwgcCk7CisJCXJiX2luc2VydF9jb2xvcigmaW5zZXJ0LT5yc19ib3VuZF9ub2RlLCAmcmRzX2JpbmRfdHJlZSk7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogUmV0dXJuIHRoZSByZHNfc29jayBib3VuZCBhdCB0aGUgZ2l2ZW4gbG9jYWwgYWRkcmVzcy4KKyAqCisgKiBUaGUgcnggcGF0aCBjYW4gcmFjZSB3aXRoIHJkc19yZWxlYXNlLiAgV2Ugbm90aWNlIGlmIHJkc19yZWxlYXNlKCkgaGFzCisgKiBtYXJrZWQgdGhpcyBzb2NrZXQgYW5kIGRvbid0IHJldHVybiBhIHJzIHJlZiB0byB0aGUgcnggcGF0aC4KKyAqLworc3RydWN0IHJkc19zb2NrICpyZHNfZmluZF9ib3VuZChfX2JlMzIgYWRkciwgX19iZTE2IHBvcnQpCit7CisJc3RydWN0IHJkc19zb2NrICpyczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKKwlycyA9IHJkc19iaW5kX3RyZWVfd2FsayhhZGRyLCBwb3J0LCBOVUxMKTsKKwlpZiAocnMgJiYgIXNvY2tfZmxhZyhyZHNfcnNfdG9fc2socnMpLCBTT0NLX0RFQUQpKQorCQlyZHNfc29ja19hZGRyZWYocnMpOworCWVsc2UKKwkJcnMgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKKworCXJkc2RlYnVnKCJyZXR1cm5pbmcgcnMgJXAgZm9yICVwSTQ6JXVcbiIsIHJzLCAmYWRkciwKKwkJbnRvaHMocG9ydCkpOworCXJldHVybiByczsKK30KKworLyogcmV0dXJucyAtdmUgZXJybm8gb3IgK3ZlIHBvcnQgKi8KK3N0YXRpYyBpbnQgcmRzX2FkZF9ib3VuZChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBfX2JlMzIgYWRkciwgX19iZTE2ICpwb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IC1FQUREUklOVVNFOworCXUxNiByb3ZlciwgbGFzdDsKKworCWlmICgqcG9ydCAhPSAwKSB7CisJCXJvdmVyID0gYmUxNl90b19jcHUoKnBvcnQpOworCQlsYXN0ID0gcm92ZXI7CisJfSBlbHNlIHsKKwkJcm92ZXIgPSBtYXhfdCh1MTYsIG5ldF9yYW5kb20oKSwgMik7CisJCWxhc3QgPSByb3ZlciAtIDE7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19iaW5kX2xvY2ssIGZsYWdzKTsKKworCWRvIHsKKwkJaWYgKHJvdmVyID09IDApCisJCQlyb3ZlcisrOworCQlpZiAocmRzX2JpbmRfdHJlZV93YWxrKGFkZHIsIGNwdV90b19iZTE2KHJvdmVyKSwgcnMpID09IE5VTEwpIHsKKwkJCSpwb3J0ID0gY3B1X3RvX2JlMTYocm92ZXIpOworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAocm92ZXIrKyAhPSBsYXN0KTsKKworCWlmIChyZXQgPT0gMCkgIHsKKwkJcnMtPnJzX2JvdW5kX2FkZHIgPSBhZGRyOworCQlycy0+cnNfYm91bmRfcG9ydCA9ICpwb3J0OworCQlyZHNfc29ja19hZGRyZWYocnMpOworCisJCXJkc2RlYnVnKCJycyAlcCBiaW5kaW5nIHRvICVwSTQ6JWRcbiIsCisJCSAgcnMsICZhZGRyLCAoaW50KW50b2hzKCpwb3J0KSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfcmVtb3ZlX2JvdW5kKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfYmluZF9sb2NrLCBmbGFncyk7CisKKwlpZiAocnMtPnJzX2JvdW5kX2FkZHIpIHsKKwkJcmRzZGVidWcoInJzICVwIHVuYmluZGluZyBmcm9tICVwSTQ6JWRcbiIsCisJCSAgcnMsICZycy0+cnNfYm91bmRfYWRkciwKKwkJICBudG9ocyhycy0+cnNfYm91bmRfcG9ydCkpOworCisJCXJiX2VyYXNlKCZycy0+cnNfYm91bmRfbm9kZSwgJnJkc19iaW5kX3RyZWUpOworCQlyZHNfc29ja19wdXQocnMpOworCQlycy0+cnNfYm91bmRfYWRkciA9IDA7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2JpbmRfbG9jaywgZmxhZ3MpOworfQorCitpbnQgcmRzX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXVhZGRyOworCXN0cnVjdCByZHNfc29jayAqcnMgPSByZHNfc2tfdG9fcnMoc2spOworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFuczsKKwlpbnQgcmV0ID0gMDsKKworCWxvY2tfc29jayhzayk7CisKKwlpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikgfHwKKwkgICAgc2luLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQgfHwKKwkgICAgcnMtPnJzX2JvdW5kX2FkZHIgfHwKKwkgICAgc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gaHRvbmwoSU5BRERSX0FOWSkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gcmRzX2FkZF9ib3VuZChycywgc2luLT5zaW5fYWRkci5zX2FkZHIsICZzaW4tPnNpbl9wb3J0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXRyYW5zID0gcmRzX3RyYW5zX2dldF9wcmVmZXJyZWQoc2luLT5zaW5fYWRkci5zX2FkZHIpOworCWlmICh0cmFucyA9PSBOVUxMKSB7CisJCXJldCA9IC1FQUREUk5PVEFWQUlMOworCQlyZHNfcmVtb3ZlX2JvdW5kKHJzKTsKKwkJZ290byBvdXQ7CisJfQorCisJcnMtPnJzX3RyYW5zcG9ydCA9IHRyYW5zOworCXJldCA9IDA7CisKK291dDoKKwlyZWxlYXNlX3NvY2soc2spOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2NvbmcuYyBiL25ldC9yZHMvY29uZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMGU0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2NvbmcuYwpAQCAtMCwwICsxLDQwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sZS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKKy8qCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgcmVjZWl2ZSBzaWRlIG9mIHRoZSB1bmNvbnZlbnRpb25hbCBjb25nZXN0aW9uCisgKiBtYW5hZ2VtZW50IGluIFJEUy4KKyAqCisgKiBNZXNzYWdlcyB3YWl0aW5nIGluIHRoZSByZWNlaXZlIHF1ZXVlIG9uIHRoZSByZWNlaXZpbmcgc29ja2V0IGFyZSBhY2NvdW50ZWQKKyAqIGFnYWluc3QgdGhlIHNvY2tldHMgU09fUkNWQlVGIG9wdGlvbiB2YWx1ZS4gIE9ubHkgdGhlIHBheWxvYWQgYnl0ZXMgaW4gdGhlCisgKiBtZXNzYWdlIGFyZSBhY2NvdW50ZWQgZm9yLiAgSWYgdGhlIG51bWJlciBvZiBieXRlcyBxdWV1ZWQgZXF1YWxzIG9yIGV4Y2VlZHMKKyAqIHJjdmJ1ZiB0aGVuIHRoZSBzb2NrZXQgaXMgY29uZ2VzdGVkLiAgQWxsIHNlbmRzIGF0dGVtcHRlZCB0byB0aGlzIHNvY2tldCdzCisgKiBhZGRyZXNzIHNob3VsZCByZXR1cm4gYmxvY2sgb3IgcmV0dXJuIC1FV09VTERCTE9DSy4KKyAqCisgKiBBcHBsaWNhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlIHJlYXNvbmFibHkgdHVuZWQgc3VjaCB0aGF0IHRoaXMgc2l0dWF0aW9uCisgKiB2ZXJ5IHJhcmVseSBvY2N1cnMuICBBbiBhcHBsaWNhdGlvbiBlbmNvdW50ZXJpbmcgdGhpcyAiYmFjay1wcmVzc3VyZSIgaXMKKyAqIGNvbnNpZGVyZWQgYSBidWcuCisgKgorICogVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBoYXZpbmcgZWFjaCBub2RlIG1haW50YWluIGJpdG1hcHMgd2hpY2ggaW5kaWNhdGUKKyAqIHdoaWNoIHBvcnRzIG9uIGJvdW5kIGFkZHJlc3NlcyBhcmUgY29uZ2VzdGVkLiAgQXMgdGhlIGJpdG1hcCBjaGFuZ2VzIGl0IGlzCisgKiBzZW50IHRocm91Z2ggYWxsIHRoZSBjb25uZWN0aW9ucyB3aGljaCB0ZXJtaW5hdGUgaW4gdGhlIGxvY2FsIGFkZHJlc3Mgb2YgdGhlCisgKiBiaXRtYXAgd2hpY2ggY2hhbmdlZC4KKyAqCisgKiBUaGUgYml0bWFwcyBhcmUgYWxsb2NhdGVkIGFzIGNvbm5lY3Rpb25zIGFyZSBicm91Z2h0IHVwLiAgVGhpcyBhdm9pZHMKKyAqIGFsbG9jYXRpb24gaW4gdGhlIGludGVycnVwdCBoYW5kbGluZyBwYXRoIHdoaWNoIHF1ZXVlcyBtZXNzYWdlcyBvbiBzb2NrZXRzLgorICogVGhlIGRlbnNlIGJpdG1hcHMgbGV0IHRyYW5zcG9ydHMgc2VuZCB0aGUgZW50aXJlIGJpdG1hcCBvbiBhbnkgYml0bWFwIGNoYW5nZQorICogcmVhc29uYWJseSBlZmZpY2llbnRseS4gIFRoaXMgaXMgbXVjaCBlYXNpZXIgdG8gaW1wbGVtZW50IHRoYW4gc29tZQorICogZmluZXItZ3JhaW5lZCBjb21tdW5pY2F0aW9uIG9mIHBlci1wb3J0IGNvbmdlc3Rpb24uICBUaGUgc2VuZGVyIGRvZXMgYSB2ZXJ5CisgKiBpbmV4cGVuc2l2ZSBiaXQgdGVzdCB0byB0ZXN0IGlmIHRoZSBwb3J0IGl0J3MgYWJvdXQgdG8gc2VuZCB0byBpcyBjb25nZXN0ZWQKKyAqIG9yIG5vdC4KKyAqLworCisvKgorICogSW50ZXJhY3Rpb24gd2l0aCBwb2xsIGlzIGEgdGFkIHRyaWNreS4gV2Ugd2FudCBhbGwgcHJvY2Vzc2VzIHN0dWNrIGluCisgKiBwb2xsIHRvIHdha2UgdXAgYW5kIGNoZWNrIHdoZXRoZXIgYSBjb25nZXN0ZWQgZGVzdGluYXRpb24gYmVjYW1lIHVuY29uZ2VzdGVkLgorICogVGhlIHJlYWxseSBzYWQgdGhpbmcgaXMgd2UgaGF2ZSBubyBpZGVhIHdoaWNoIGRlc3RpbmF0aW9ucyB0aGUgYXBwbGljYXRpb24KKyAqIHdhbnRzIHRvIHNlbmQgdG8gLSB3ZSBkb24ndCBldmVuIGtub3cgd2hpY2ggcmRzX2Nvbm5lY3Rpb25zIGFyZSBpbnZvbHZlZC4KKyAqIFNvIHVudGlsIHdlIGltcGxlbWVudCBhIG1vcmUgZmxleGlibGUgcmRzIHBvbGwgaW50ZXJmYWNlLCB3ZSBoYXZlIHRvIG1ha2UKKyAqIGRvIHdpdGggdGhpczoKKyAqIFdlIG1haW50YWluIGEgZ2xvYmFsIGNvdW50ZXIgdGhhdCBpcyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYSBjb25nZXN0aW9uIG1hcAorICogdXBkYXRlIGlzIHJlY2VpdmVkLiBFYWNoIHJkcyBzb2NrZXQgdHJhY2tzIHRoaXMgdmFsdWUsIGFuZCBpZiByZHNfcG9sbAorICogZmluZHMgdGhhdCB0aGUgc2F2ZWQgZ2VuZXJhdGlvbiBudW1iZXIgaXMgc21hbGxlciB0aGFuIHRoZSBnbG9iYWwgZ2VuZXJhdGlvbgorICogbnVtYmVyLCBpdCB3YWtlcyB1cCB0aGUgcHJvY2Vzcy4KKyAqLworc3RhdGljIGF0b21pY190CQlyZHNfY29uZ19nZW5lcmF0aW9uID0gQVRPTUlDX0lOSVQoMCk7CisKKy8qCisgKiBDb25nZXN0aW9uIG1vbml0b3JpbmcKKyAqLworc3RhdGljIExJU1RfSEVBRChyZHNfY29uZ19tb25pdG9yKTsKK3N0YXRpYyBERUZJTkVfUldMT0NLKHJkc19jb25nX21vbml0b3JfbG9jayk7CisKKy8qCisgKiBZZXMsIGEgZ2xvYmFsIGxvY2suICBJdCdzIHVzZWQgc28gaW5mcmVxdWVudGx5IHRoYXQgaXQncyB3b3J0aCBrZWVwaW5nIGl0CisgKiBnbG9iYWwgdG8gc2ltcGxpZnkgdGhlIGxvY2tpbmcuICBJdCdzIG9ubHkgdXNlZCBpbiB0aGUgZm9sbG93aW5nCisgKiBjaXJjdW1zdGFuY2VzOgorICoKKyAqICAtIG9uIGNvbm5lY3Rpb24gYnVpbGR1cCB0byBhc3NvY2lhdGUgYSBjb25uIHdpdGggaXRzIG1hcHMKKyAqICAtIG9uIG1hcCBjaGFuZ2VzIHRvIGluZm9ybSBjb25ucyBvZiBhIG5ldyBtYXAgdG8gc2VuZAorICoKKyAqICBJdCdzIHNhZGx5IG9yZGVyZWQgdW5kZXIgdGhlIHNvY2tldCBjYWxsYmFjayBsb2NrIGFuZCB0aGUgY29ubmVjdGlvbiBsb2NrLgorICogIFJlY2VpdmUgcGF0aHMgY2FuIG1hcmsgcG9ydHMgY29uZ2VzdGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgc28gdGhlCisgKiAgbG9jayBtYXNrcyBpbnRlcnJ1cHRzLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJkc19jb25nX2xvY2spOworc3RhdGljIHN0cnVjdCByYl9yb290IHJkc19jb25nX3RyZWUgPSBSQl9ST09UOworCitzdGF0aWMgc3RydWN0IHJkc19jb25nX21hcCAqcmRzX2NvbmdfdHJlZV93YWxrKF9fYmUzMiBhZGRyLAorCQkJCQkgICAgICAgc3RydWN0IHJkc19jb25nX21hcCAqaW5zZXJ0KQoreworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZyZHNfY29uZ190cmVlLnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwOworCisJd2hpbGUgKCpwKSB7CisJCXBhcmVudCA9ICpwOworCQltYXAgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCByZHNfY29uZ19tYXAsIG1fcmJfbm9kZSk7CisKKwkJaWYgKGFkZHIgPCBtYXAtPm1fYWRkcikKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoYWRkciA+IG1hcC0+bV9hZGRyKQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIG1hcDsKKwl9CisKKwlpZiAoaW5zZXJ0KSB7CisJCXJiX2xpbmtfbm9kZSgmaW5zZXJ0LT5tX3JiX25vZGUsIHBhcmVudCwgcCk7CisJCXJiX2luc2VydF9jb2xvcigmaW5zZXJ0LT5tX3JiX25vZGUsICZyZHNfY29uZ190cmVlKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBUaGVyZSBpcyBvbmx5IGV2ZXIgb25lIGJpdG1hcCBmb3IgYW55IGFkZHJlc3MuICBDb25uZWN0aW9ucyB0cnkgYW5kIGFsbG9jYXRlCisgKiB0aGVzZSBiaXRtYXBzIGluIHRoZSBwcm9jZXNzIGdldHRpbmcgcG9pbnRlcnMgdG8gdGhlbS4gIFRoZSBiaXRtYXBzIGFyZSBvbmx5CisgKiBldmVyIGZyZWVkIGFzIHRoZSBtb2R1bGUgaXMgcmVtb3ZlZCBhZnRlciBhbGwgY29ubmVjdGlvbnMgaGF2ZSBiZWVuIGZyZWVkLgorICovCitzdGF0aWMgc3RydWN0IHJkc19jb25nX21hcCAqcmRzX2NvbmdfZnJvbV9hZGRyKF9fYmUzMiBhZGRyKQoreworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICpyZXQgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgenA7CisJdW5zaWduZWQgbG9uZyBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX2NvbmdfbWFwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1hcCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW1hcC0+bV9hZGRyID0gYWRkcjsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtYXAtPm1fd2FpdHEpOworCUlOSVRfTElTVF9IRUFEKCZtYXAtPm1fY29ubl9saXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBSRFNfQ09OR19NQVBfUEFHRVM7IGkrKykgeworCQl6cCA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwkJaWYgKHpwID09IDApCisJCQlnb3RvIG91dDsKKwkJbWFwLT5tX3BhZ2VfYWRkcnNbaV0gPSB6cDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCXJldCA9IHJkc19jb25nX3RyZWVfd2FsayhhZGRyLCBtYXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKworCWlmIChyZXQgPT0gTlVMTCkgeworCQlyZXQgPSBtYXA7CisJCW1hcCA9IE5VTEw7CisJfQorCitvdXQ6CisJaWYgKG1hcCkgeworCQlmb3IgKGkgPSAwOyBpIDwgUkRTX0NPTkdfTUFQX1BBR0VTICYmIG1hcC0+bV9wYWdlX2FkZHJzW2ldOyBpKyspCisJCQlmcmVlX3BhZ2UobWFwLT5tX3BhZ2VfYWRkcnNbaV0pOworCQlrZnJlZShtYXApOworCX0KKworCXJkc2RlYnVnKCJtYXAgJXAgZm9yIGFkZHIgJXhcbiIsIHJldCwgYmUzMl90b19jcHUoYWRkcikpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFB1dCB0aGUgY29ubiBvbiBpdHMgbG9jYWwgbWFwJ3MgbGlzdC4gIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIGNvbm4gaXMKKyAqIHJlYWxseSBhZGRlZCB0byB0aGUgaGFzaC4gIEl0J3MgbmVzdGVkIHVuZGVyIHRoZSByZHNfY29ubl9sb2NrLCBzYWRseS4KKyAqLwordm9pZCByZHNfY29uZ19hZGRfY29ubihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJkc2RlYnVnKCJjb25uICVwIG5vdyBvbiBtYXAgJXBcbiIsIGNvbm4sIGNvbm4tPmNfbGNvbmcpOworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmY29ubi0+Y19tYXBfaXRlbSwgJmNvbm4tPmNfbGNvbmctPm1fY29ubl9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfcmVtb3ZlX2Nvbm4oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZHNkZWJ1ZygicmVtb3ZpbmcgY29ubiAlcCBmcm9tIG1hcCAlcFxuIiwgY29ubiwgY29ubi0+Y19sY29uZyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2RlbF9pbml0KCZjb25uLT5jX21hcF9pdGVtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29uZ19sb2NrLCBmbGFncyk7Cit9CisKK2ludCByZHNfY29uZ19nZXRfbWFwcyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJY29ubi0+Y19sY29uZyA9IHJkc19jb25nX2Zyb21fYWRkcihjb25uLT5jX2xhZGRyKTsKKwljb25uLT5jX2Zjb25nID0gcmRzX2NvbmdfZnJvbV9hZGRyKGNvbm4tPmNfZmFkZHIpOworCisJaWYgKGNvbm4tPmNfbGNvbmcgPT0gTlVMTCB8fCBjb25uLT5jX2Zjb25nID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXApCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCAmbWFwLT5tX2Nvbm5fbGlzdCwgY19tYXBfaXRlbSkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCkpIHsKKwkJCXJkc19zdGF0c19pbmMoc19jb25nX3VwZGF0ZV9xdWV1ZWQpOworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfc2VuZF93LCAwKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCByZHNfY29uZ19tYXBfdXBkYXRlZChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIHVpbnQ2NF90IHBvcnRtYXNrKQoreworCXJkc2RlYnVnKCJ3YWtpbmcgbWFwICVwIGZvciAlcEk0XG4iLAorCSAgbWFwLCAmbWFwLT5tX2FkZHIpOworCXJkc19zdGF0c19pbmMoc19jb25nX3VwZGF0ZV9yZWNlaXZlZCk7CisJYXRvbWljX2luYygmcmRzX2NvbmdfZ2VuZXJhdGlvbik7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJm1hcC0+bV93YWl0cSkpCisJCXdha2VfdXAoJm1hcC0+bV93YWl0cSk7CisJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnJkc19wb2xsX3dhaXRxKSkKKwkJd2FrZV91cF9hbGwoJnJkc19wb2xsX3dhaXRxKTsKKworCWlmIChwb3J0bWFzayAmJiAhbGlzdF9lbXB0eSgmcmRzX2NvbmdfbW9uaXRvcikpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3RydWN0IHJkc19zb2NrICpyczsKKworCQlyZWFkX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocnMsICZyZHNfY29uZ19tb25pdG9yLCByc19jb25nX2xpc3QpIHsKKwkJCXNwaW5fbG9jaygmcnMtPnJzX2xvY2spOworCQkJcnMtPnJzX2Nvbmdfbm90aWZ5IHw9IChycy0+cnNfY29uZ19tYXNrICYgcG9ydG1hc2spOworCQkJcnMtPnJzX2NvbmdfbWFzayAmPSB+cG9ydG1hc2s7CisJCQlzcGluX3VubG9jaygmcnMtPnJzX2xvY2spOworCQkJaWYgKHJzLT5yc19jb25nX25vdGlmeSkKKwkJCQlyZHNfd2FrZV9za19zbGVlcChycyk7CisJCX0KKwkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7CisJfQorfQorCitpbnQgcmRzX2NvbmdfdXBkYXRlZF9zaW5jZSh1bnNpZ25lZCBsb25nICpyZWNlbnQpCit7CisJdW5zaWduZWQgbG9uZyBnZW4gPSBhdG9taWNfcmVhZCgmcmRzX2NvbmdfZ2VuZXJhdGlvbik7CisKKwlpZiAobGlrZWx5KCpyZWNlbnQgPT0gZ2VuKSkKKwkJcmV0dXJuIDA7CisJKnJlY2VudCA9IGdlbjsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIFdlJ3JlIGNhbGxlZCB1bmRlciB0aGUgbG9ja2luZyB0aGF0IHByb3RlY3RzIHRoZSBzb2NrZXRzIHJlY2VpdmUgYnVmZmVyCisgKiBjb25zdW1wdGlvbi4gIFRoaXMgbWFrZXMgaXQgYSBsb3QgZWFzaWVyIGZvciB0aGUgY2FsbGVyIHRvIG9ubHkgY2FsbCB1cworICogd2hlbiBpdCBrbm93cyB0aGF0IGFuIGV4aXN0aW5nIHNldCBiaXQgbmVlZHMgdG8gYmUgY2xlYXJlZCwgYW5kIHZpY2UgdmVyc2EuCisgKiBXZSBjYW4ndCBibG9jayBhbmQgd2UgbmVlZCB0byBkZWFsIHdpdGggY29uY3VycmVudCBzb2NrZXRzIHdvcmtpbmcgYWdhaW5zdAorICogdGhlIHNhbWUgcGVyLWFkZHJlc3MgbWFwLgorICovCit2b2lkIHJkc19jb25nX3NldF9iaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisJdW5zaWduZWQgbG9uZyBvZmY7CisKKwlyZHNkZWJ1Zygic2V0dGluZyBjb25nZXN0aW9uIGZvciAlcEk0OiV1IGluIG1hcCAlcFxuIiwKKwkgICZtYXAtPm1fYWRkciwgbnRvaHMocG9ydCksIG1hcCk7CisKKwlpID0gYmUxNl90b19jcHUocG9ydCkgLyBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCW9mZiA9IGJlMTZfdG9fY3B1KHBvcnQpICUgUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKworCWdlbmVyaWNfX19zZXRfbGVfYml0KG9mZiwgKHZvaWQgKiltYXAtPm1fcGFnZV9hZGRyc1tpXSk7Cit9CisKK3ZvaWQgcmRzX2NvbmdfY2xlYXJfYml0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBpOworCXVuc2lnbmVkIGxvbmcgb2ZmOworCisJcmRzZGVidWcoImNsZWFyaW5nIGNvbmdlc3Rpb24gZm9yICVwSTQ6JXUgaW4gbWFwICVwXG4iLAorCSAgJm1hcC0+bV9hZGRyLCBudG9ocyhwb3J0KSwgbWFwKTsKKworCWkgPSBiZTE2X3RvX2NwdShwb3J0KSAvIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisJb2ZmID0gYmUxNl90b19jcHUocG9ydCkgJSBSRFNfQ09OR19NQVBfUEFHRV9CSVRTOworCisJZ2VuZXJpY19fX2NsZWFyX2xlX2JpdChvZmYsICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbaV0pOworfQorCitzdGF0aWMgaW50IHJkc19jb25nX3Rlc3RfYml0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBpOworCXVuc2lnbmVkIGxvbmcgb2ZmOworCisJaSA9IGJlMTZfdG9fY3B1KHBvcnQpIC8gUkRTX0NPTkdfTUFQX1BBR0VfQklUUzsKKwlvZmYgPSBiZTE2X3RvX2NwdShwb3J0KSAlIFJEU19DT05HX01BUF9QQUdFX0JJVFM7CisKKwlyZXR1cm4gZ2VuZXJpY190ZXN0X2xlX2JpdChvZmYsICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbaV0pOworfQorCit2b2lkIHJkc19jb25nX2FkZF9zb2NrZXQoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfbG9ja19pcnFzYXZlKCZyZHNfY29uZ19tb25pdG9yX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmcnMtPnJzX2NvbmdfbGlzdCkpCisJCWxpc3RfYWRkKCZycy0+cnNfY29uZ19saXN0LCAmcmRzX2NvbmdfbW9uaXRvcik7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHJkc19jb25nX3JlbW92ZV9zb2NrZXQoc3RydWN0IHJkc19zb2NrICpycykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbW9uaXRvcl9sb2NrLCBmbGFncyk7CisJbGlzdF9kZWxfaW5pdCgmcnMtPnJzX2NvbmdfbGlzdCk7CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25nX21vbml0b3JfbG9jaywgZmxhZ3MpOworCisJLyogdXBkYXRlIGNvbmdlc3Rpb24gbWFwIGZvciBub3ctY2xvc2VkIHBvcnQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCW1hcCA9IHJkc19jb25nX3RyZWVfd2Fsayhycy0+cnNfYm91bmRfYWRkciwgTlVMTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2NvbmdfbG9jaywgZmxhZ3MpOworCisJaWYgKG1hcCAmJiByZHNfY29uZ190ZXN0X2JpdChtYXAsIHJzLT5yc19ib3VuZF9wb3J0KSkgeworCQlyZHNfY29uZ19jbGVhcl9iaXQobWFwLCBycy0+cnNfYm91bmRfcG9ydCk7CisJCXJkc19jb25nX3F1ZXVlX3VwZGF0ZXMobWFwKTsKKwl9Cit9CisKK2ludCByZHNfY29uZ193YWl0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQsIGludCBub25ibG9jaywKKwkJICBzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCWlmICghcmRzX2NvbmdfdGVzdF9iaXQobWFwLCBwb3J0KSkKKwkJcmV0dXJuIDA7CisJaWYgKG5vbmJsb2NrKSB7CisJCWlmIChycyAmJiBycy0+cnNfY29uZ19tb25pdG9yKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQkvKiBJdCB3b3VsZCBoYXZlIGJlZW4gbmljZSB0byBoYXZlIGFuIGF0b21pYyBzZXRfYml0IG9uCisJCQkgKiBhIHVpbnQ2NF90LiAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisJCQlycy0+cnNfY29uZ19tYXNrIHw9IFJEU19DT05HX01PTklUT1JfTUFTSyhudG9ocyhwb3J0KSk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCisJCQkvKiBUZXN0IGFnYWluIC0gYSBjb25nZXN0aW9uIHVwZGF0ZSBtYXkgaGF2ZSBhcnJpdmVkIGluCisJCQkgKiB0aGUgbWVhbnRpbWUuICovCisJCQlpZiAoIXJkc19jb25nX3Rlc3RfYml0KG1hcCwgcG9ydCkpCisJCQkJcmV0dXJuIDA7CisJCX0KKwkJcmRzX3N0YXRzX2luYyhzX2Nvbmdfc2VuZF9lcnJvcik7CisJCXJldHVybiAtRU5PQlVGUzsKKwl9CisKKwlyZHNfc3RhdHNfaW5jKHNfY29uZ19zZW5kX2Jsb2NrZWQpOworCXJkc2RlYnVnKCJ3YWl0aW5nIG9uIG1hcCAlcCBmb3IgcG9ydCAldVxuIiwgbWFwLCBiZTE2X3RvX2NwdShwb3J0KSk7CisKKwlyZXR1cm4gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKG1hcC0+bV93YWl0cSwKKwkJCQkJIXJkc19jb25nX3Rlc3RfYml0KG1hcCwgcG9ydCkpOworfQorCit2b2lkIHJkc19jb25nX2V4aXQodm9pZCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXA7CisJdW5zaWduZWQgbG9uZyBpOworCisJd2hpbGUgKChub2RlID0gcmJfZmlyc3QoJnJkc19jb25nX3RyZWUpKSkgeworCQltYXAgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgcmRzX2NvbmdfbWFwLCBtX3JiX25vZGUpOworCQlyZHNkZWJ1ZygiZnJlZWluZyBtYXAgJXBcbiIsIG1hcCk7CisJCXJiX2VyYXNlKCZtYXAtPm1fcmJfbm9kZSwgJnJkc19jb25nX3RyZWUpOworCQlmb3IgKGkgPSAwOyBpIDwgUkRTX0NPTkdfTUFQX1BBR0VTICYmIG1hcC0+bV9wYWdlX2FkZHJzW2ldOyBpKyspCisJCQlmcmVlX3BhZ2UobWFwLT5tX3BhZ2VfYWRkcnNbaV0pOworCQlrZnJlZShtYXApOworCX0KK30KKworLyoKKyAqIEFsbG9jYXRlIGEgUkRTIG1lc3NhZ2UgY29udGFpbmluZyBhIGNvbmdlc3Rpb24gdXBkYXRlLgorICovCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19jb25nX3VwZGF0ZV9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19jb25nX21hcCAqbWFwID0gY29ubi0+Y19sY29uZzsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJcm0gPSByZHNfbWVzc2FnZV9tYXBfcGFnZXMobWFwLT5tX3BhZ2VfYWRkcnMsIFJEU19DT05HX01BUF9CWVRFUyk7CisJaWYgKCFJU19FUlIocm0pKQorCQlybS0+bV9pbmMuaV9oZHIuaF9mbGFncyA9IFJEU19GTEFHX0NPTkdfQklUTUFQOworCisJcmV0dXJuIHJtOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9jb25uZWN0aW9uLmMgYi9uZXQvcmRzL2Nvbm5lY3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzNmMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9jb25uZWN0aW9uLmMKQEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxuZXQvaW5ldF9oYXNodGFibGVzLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJsb29wLmgiCisjaW5jbHVkZSAicmRtYS5oIgorCisjZGVmaW5lIFJEU19DT05ORUNUSU9OX0hBU0hfQklUUyAxMgorI2RlZmluZSBSRFNfQ09OTkVDVElPTl9IQVNIX0VOVFJJRVMgKDEgPDwgUkRTX0NPTk5FQ1RJT05fSEFTSF9CSVRTKQorI2RlZmluZSBSRFNfQ09OTkVDVElPTl9IQVNIX01BU0sgKFJEU19DT05ORUNUSU9OX0hBU0hfRU5UUklFUyAtIDEpCisKKy8qIGNvbnZlcnRpbmcgdGhpcyB0byBSQ1UgaXMgYSBjaG9yZSBmb3IgYW5vdGhlciBkYXkuLiAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhyZHNfY29ubl9sb2NrKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19jb25uX2NvdW50Oworc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIHJkc19jb25uX2hhc2hbUkRTX0NPTk5FQ1RJT05fSEFTSF9FTlRSSUVTXTsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2Nvbm5fc2xhYjsKKworc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkICpyZHNfY29ubl9idWNrZXQoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIpCit7CisJLyogUGFzcyBOVUxMLCBkb24ndCBuZWVkIHN0cnVjdCBuZXQgZm9yIGhhc2ggKi8KKwl1bnNpZ25lZCBsb25nIGhhc2ggPSBpbmV0X2VoYXNoZm4oTlVMTCwKKwkJCQkJICBiZTMyX3RvX2NwdShsYWRkciksIDAsCisJCQkJCSAgYmUzMl90b19jcHUoZmFkZHIpLCAwKTsKKwlyZXR1cm4gJnJkc19jb25uX2hhc2hbaGFzaCAmIFJEU19DT05ORUNUSU9OX0hBU0hfTUFTS107Cit9CisKKyNkZWZpbmUgcmRzX2Nvbm5faW5mb19zZXQodmFyLCB0ZXN0LCBzdWZmaXgpIGRvIHsJCVwKKwlpZiAodGVzdCkJCQkJCQlcCisJCXZhciB8PSBSRFNfSU5GT19DT05ORUNUSU9OX0ZMQUdfIyNzdWZmaXg7CVwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgaW50IHJkc19jb25uX2lzX3NlbmRpbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCWludCByZXQgPSAwOworCisJaWYgKCFtdXRleF90cnlsb2NrKCZjb25uLT5jX3NlbmRfbG9jaykpCisJCXJldCA9IDE7CisJZWxzZQorCQltdXRleF91bmxvY2soJmNvbm4tPmNfc2VuZF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKnJkc19jb25uX2xvb2t1cChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJICAgICAgX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkJCSAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucykKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sICpyZXQgPSBOVUxMOworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShjb25uLCBwb3MsIGhlYWQsIGNfaGFzaF9ub2RlKSB7CisJCWlmIChjb25uLT5jX2ZhZGRyID09IGZhZGRyICYmIGNvbm4tPmNfbGFkZHIgPT0gbGFkZHIgJiYKKwkJCQljb25uLT5jX3RyYW5zID09IHRyYW5zKSB7CisJCQlyZXQgPSBjb25uOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmRzZGVidWcoInJldHVybmluZyBjb25uICVwIGZvciAlcEk0IC0+ICVwSTRcbiIsIHJldCwKKwkJICZsYWRkciwgJmZhZGRyKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgdHJhbnNwb3J0cyBhcyB0aGV5J3JlIGJyaW5naW5nIGRvd24gYSBjb25uZWN0aW9uLgorICogSXQgY2xlYXJzIHBhcnRpYWwgbWVzc2FnZSBzdGF0ZSBzbyB0aGF0IHRoZSB0cmFuc3BvcnQgY2FuIHN0YXJ0IHNlbmRpbmcKKyAqIGFuZCByZWNlaXZpbmcgb3ZlciB0aGlzIGNvbm5lY3Rpb24gYWdhaW4gaW4gdGhlIGZ1dHVyZS4gIEl0IGlzIHVwIHRvCisgKiB0aGUgdHJhbnNwb3J0IHRvIGhhdmUgc2VyaWFsaXplZCB0aGlzIGNhbGwgd2l0aCBpdHMgc2VuZCBhbmQgcmVjdi4KKyAqLwordm9pZCByZHNfY29ubl9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmRzZGVidWcoImNvbm5lY3Rpb24gJXBJNCB0byAlcEk0IHJlc2V0XG4iLAorCSAgJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyKTsKKworCXJkc19zdGF0c19pbmMoc19jb25uX3Jlc2V0KTsKKwlyZHNfc2VuZF9yZXNldChjb25uKTsKKwljb25uLT5jX2ZsYWdzID0gMDsKKworCS8qIERvIG5vdCBjbGVhciBuZXh0X3J4X3NlcSBoZXJlLCBlbHNlIHdlIGNhbm5vdCBkaXN0aW5ndWlzaAorCSAqIHJldHJhbnNtaXR0ZWQgcGFja2V0cyBmcm9tIG5ldyBwYWNrZXRzLCBhbmQgd2lsbCBoYW5kIGFsbAorCSAqIG9mIHRoZW0gdG8gdGhlIGFwcGxpY2F0aW9uLiBUaGF0IGlzIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlCisJICogcmVsaWFiaWxpdHkgZ3VhcmFudGVlcyBvZiBSRFMuICovCit9CisKKy8qCisgKiBUaGVyZSBpcyBvbmx5IGV2ZXJ5IG9uZSAnY29ubicgZm9yIGEgZ2l2ZW4gcGFpciBvZiBhZGRyZXNzZXMgaW4gdGhlCisgKiBzeXN0ZW0gYXQgYSB0aW1lLiAgVGhleSBjb250YWluIG1lc3NhZ2VzIHRvIGJlIHJldHJhbnNtaXR0ZWQgYW5kIHNvCisgKiBzcGFuIHRoZSBsaWZldGltZSBvZiB0aGUgYWN0dWFsIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25zLgorICoKKyAqIEZvciBub3cgdGhleSBhcmUgbm90IGdhcmJhZ2UgY29sbGVjdGVkIG9uY2UgdGhleSdyZSBjcmVhdGVkLiAgVGhleQorICogYXJlIHRvcm4gZG93biBhcyB0aGUgbW9kdWxlIGlzIHJlbW92ZWQsIGlmIGV2ZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKl9fcmRzX2Nvbm5fY3JlYXRlKF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMsIGdmcF90IGdmcCwKKwkJCQkgICAgICAgaW50IGlzX291dGdvaW5nKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgKnRtcCwgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSByZHNfY29ubl9idWNrZXQobGFkZHIsIGZhZGRyKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCWNvbm4gPSByZHNfY29ubl9sb29rdXAoaGVhZCwgbGFkZHIsIGZhZGRyLCB0cmFucyk7CisJaWYgKGNvbm4KKwkgJiYgY29ubi0+Y19sb29wYmFjaworCSAmJiBjb25uLT5jX3RyYW5zICE9ICZyZHNfbG9vcF90cmFuc3BvcnQKKwkgJiYgIWlzX291dGdvaW5nKSB7CisJCS8qIFRoaXMgaXMgYSBsb29wZWQgYmFjayBJQiBjb25uZWN0aW9uLCBhbmQgd2UncmUKKwkJICogY2FsbGVkIGJ5IHRoZSBjb2RlIGhhbmRsaW5nIHRoZSBpbmNvbWluZyBjb25uZWN0LgorCQkgKiBXZSBuZWVkIGEgc2Vjb25kIGNvbm5lY3Rpb24gb2JqZWN0IGludG8gd2hpY2ggd2UKKwkJICogY2FuIHN0aWNrIHRoZSBvdGhlciBRUC4gKi8KKwkJcGFyZW50ID0gY29ubjsKKwkJY29ubiA9IHBhcmVudC0+Y19wYXNzaXZlOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisJaWYgKGNvbm4pCisJCWdvdG8gb3V0OworCisJY29ubiA9IGttZW1fY2FjaGVfYWxsb2MocmRzX2Nvbm5fc2xhYiwgZ2ZwKTsKKwlpZiAoY29ubiA9PSBOVUxMKSB7CisJCWNvbm4gPSBFUlJfUFRSKC1FTk9NRU0pOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1zZXQoY29ubiwgMCwgc2l6ZW9mKCpjb25uKSk7CisKKwlJTklUX0hMSVNUX05PREUoJmNvbm4tPmNfaGFzaF9ub2RlKTsKKwljb25uLT5jX3ZlcnNpb24gPSBSRFNfUFJPVE9DT0xfM18wOworCWNvbm4tPmNfbGFkZHIgPSBsYWRkcjsKKwljb25uLT5jX2ZhZGRyID0gZmFkZHI7CisJc3Bpbl9sb2NrX2luaXQoJmNvbm4tPmNfbG9jayk7CisJY29ubi0+Y19uZXh0X3R4X3NlcSA9IDE7CisKKwltdXRleF9pbml0KCZjb25uLT5jX3NlbmRfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNvbm4tPmNfc2VuZF9xdWV1ZSk7CisJSU5JVF9MSVNUX0hFQUQoJmNvbm4tPmNfcmV0cmFucyk7CisKKwlyZXQgPSByZHNfY29uZ19nZXRfbWFwcyhjb25uKTsKKwlpZiAocmV0KSB7CisJCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKKwkJY29ubiA9IEVSUl9QVFIocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBUaGlzIGlzIHdoZXJlIGEgY29ubmVjdGlvbiBiZWNvbWVzIGxvb3BiYWNrLiAgSWYgKmFueSogUkRTIHNvY2tldHMKKwkgKiBjYW4gYmluZCB0byB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyB0aGVuIHdlJ2QgcmF0aGVyIHRoZSBtZXNzYWdlcworCSAqIGZsb3cgdGhyb3VnaCBsb29wYmFjayByYXRoZXIgdGhhbiBlaXRoZXIgdHJhbnNwb3J0LgorCSAqLworCWlmIChyZHNfdHJhbnNfZ2V0X3ByZWZlcnJlZChmYWRkcikpIHsKKwkJY29ubi0+Y19sb29wYmFjayA9IDE7CisJCWlmIChpc19vdXRnb2luZyAmJiB0cmFucy0+dF9wcmVmZXJfbG9vcGJhY2spIHsKKwkJCS8qICJvdXRnb2luZyIgY29ubmVjdGlvbiAtIGFuZCB0aGUgdHJhbnNwb3J0CisJCQkgKiBzYXlzIGl0IHdhbnRzIHRoZSBjb25uZWN0aW9uIGhhbmRsZWQgYnkgdGhlCisJCQkgKiBsb29wYmFjayB0cmFuc3BvcnQuIFRoaXMgaXMgd2hhdCBUQ1AgZG9lcy4KKwkJCSAqLworCQkJdHJhbnMgPSAmcmRzX2xvb3BfdHJhbnNwb3J0OworCQl9CisJfQorCisJY29ubi0+Y190cmFucyA9IHRyYW5zOworCisJcmV0ID0gdHJhbnMtPmNvbm5fYWxsb2MoY29ubiwgZ2ZwKTsKKwlpZiAocmV0KSB7CisJCWttZW1fY2FjaGVfZnJlZShyZHNfY29ubl9zbGFiLCBjb25uKTsKKwkJY29ubiA9IEVSUl9QVFIocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJYXRvbWljX3NldCgmY29ubi0+Y19zdGF0ZSwgUkRTX0NPTk5fRE9XTik7CisJY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyA9IDA7CisJSU5JVF9ERUxBWUVEX1dPUksoJmNvbm4tPmNfc2VuZF93LCByZHNfc2VuZF93b3JrZXIpOworCUlOSVRfREVMQVlFRF9XT1JLKCZjb25uLT5jX3JlY3ZfdywgcmRzX3JlY3Zfd29ya2VyKTsKKwlJTklUX0RFTEFZRURfV09SSygmY29ubi0+Y19jb25uX3csIHJkc19jb25uZWN0X3dvcmtlcik7CisJSU5JVF9XT1JLKCZjb25uLT5jX2Rvd25fdywgcmRzX3NodXRkb3duX3dvcmtlcik7CisJbXV0ZXhfaW5pdCgmY29ubi0+Y19jbV9sb2NrKTsKKwljb25uLT5jX2ZsYWdzID0gMDsKKworCXJkc2RlYnVnKCJhbGxvY2F0ZWQgY29ubiAlcCBmb3IgJXBJNCAtPiAlcEk0IG92ZXIgJXMgJXNcbiIsCisJICBjb25uLCAmbGFkZHIsICZmYWRkciwKKwkgIHRyYW5zLT50X25hbWUgPyB0cmFucy0+dF9uYW1lIDogIlt1bmtub3duXSIsCisJICBpc19vdXRnb2luZyA/ICIob3V0Z29pbmcpIiA6ICIiKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisJaWYgKHBhcmVudCA9PSBOVUxMKSB7CisJCXRtcCA9IHJkc19jb25uX2xvb2t1cChoZWFkLCBsYWRkciwgZmFkZHIsIHRyYW5zKTsKKwkJaWYgKHRtcCA9PSBOVUxMKQorCQkJaGxpc3RfYWRkX2hlYWQoJmNvbm4tPmNfaGFzaF9ub2RlLCBoZWFkKTsKKwl9IGVsc2UgeworCQl0bXAgPSBwYXJlbnQtPmNfcGFzc2l2ZTsKKwkJaWYgKCF0bXApCisJCQlwYXJlbnQtPmNfcGFzc2l2ZSA9IGNvbm47CisJfQorCisJaWYgKHRtcCkgeworCQl0cmFucy0+Y29ubl9mcmVlKGNvbm4tPmNfdHJhbnNwb3J0X2RhdGEpOworCQlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CisJCWNvbm4gPSB0bXA7CisJfSBlbHNlIHsKKwkJcmRzX2NvbmdfYWRkX2Nvbm4oY29ubik7CisJCXJkc19jb25uX2NvdW50Kys7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCitvdXQ6CisJcmV0dXJuIGNvbm47Cit9CisKK3N0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlKF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnMsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gX19yZHNfY29ubl9jcmVhdGUobGFkZHIsIGZhZGRyLCB0cmFucywgZ2ZwLCAwKTsKK30KKworc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGVfb3V0Z29pbmcoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkJICAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucywgZ2ZwX3QgZ2ZwKQoreworCXJldHVybiBfX3Jkc19jb25uX2NyZWF0ZShsYWRkciwgZmFkZHIsIHRyYW5zLCBnZnAsIDEpOworfQorCit2b2lkIHJkc19jb25uX2Rlc3Ryb3koc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICpydG1wOworCisJcmRzZGVidWcoImZyZWVpbmcgY29ubiAlcCBmb3IgJXBJNCAtPiAiCisJCSAiJXBJNFxuIiwgY29ubiwgJmNvbm4tPmNfbGFkZHIsCisJCSAmY29ubi0+Y19mYWRkcik7CisKKwlobGlzdF9kZWxfaW5pdCgmY29ubi0+Y19oYXNoX25vZGUpOworCisJLyogd2FpdCBmb3IgdGhlIHJkcyB0aHJlYWQgdG8gc2h1dCBpdCBkb3duICovCisJYXRvbWljX3NldCgmY29ubi0+Y19zdGF0ZSwgUkRTX0NPTk5fRVJST1IpOworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNvbm4tPmNfY29ubl93KTsKKwlxdWV1ZV93b3JrKHJkc193cSwgJmNvbm4tPmNfZG93bl93KTsKKwlmbHVzaF93b3JrcXVldWUocmRzX3dxKTsKKworCS8qIHRlYXIgZG93biBxdWV1ZWQgbWVzc2FnZXMgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHJ0bXAsCisJCQkJICZjb25uLT5jX3NlbmRfcXVldWUsCisJCQkJIG1fY29ubl9pdGVtKSB7CisJCWxpc3RfZGVsX2luaXQoJnJtLT5tX2Nvbm5faXRlbSk7CisJCUJVR19PTighbGlzdF9lbXB0eSgmcm0tPm1fc29ja19pdGVtKSk7CisJCXJkc19tZXNzYWdlX3B1dChybSk7CisJfQorCWlmIChjb25uLT5jX3htaXRfcm0pCisJCXJkc19tZXNzYWdlX3B1dChjb25uLT5jX3htaXRfcm0pOworCisJY29ubi0+Y190cmFucy0+Y29ubl9mcmVlKGNvbm4tPmNfdHJhbnNwb3J0X2RhdGEpOworCisJLyoKKwkgKiBUaGUgY29uZ2VzdGlvbiBtYXBzIGFyZW4ndCBmcmVlZCB1cCBoZXJlLiAgVGhleSdyZQorCSAqIGZyZWVkIGJ5IHJkc19jb25nX2V4aXQoKSBhZnRlciBhbGwgdGhlIGNvbm5lY3Rpb25zCisJICogaGF2ZSBiZWVuIGZyZWVkLgorCSAqLworCXJkc19jb25nX3JlbW92ZV9jb25uKGNvbm4pOworCisJQlVHX09OKCFsaXN0X2VtcHR5KCZjb25uLT5jX3JldHJhbnMpKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2Nvbm5fc2xhYiwgY29ubik7CisKKwlyZHNfY29ubl9jb3VudC0tOworfQorCitzdGF0aWMgdm9pZCByZHNfY29ubl9tZXNzYWdlX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zLAorCQkJCSAgaW50IHdhbnRfc2VuZCkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uOworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdG90YWwgPSAwOworCXNpemVfdCBpOworCisJbGVuIC89IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fbWVzc2FnZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworCisJZm9yIChpID0gMCwgaGVhZCA9IHJkc19jb25uX2hhc2g7IGkgPCBBUlJBWV9TSVpFKHJkc19jb25uX2hhc2gpOworCSAgICAgaSsrLCBoZWFkKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoY29ubiwgcG9zLCBoZWFkLCBjX2hhc2hfbm9kZSkgeworCQkJaWYgKHdhbnRfc2VuZCkKKwkJCQlsaXN0ID0gJmNvbm4tPmNfc2VuZF9xdWV1ZTsKKwkJCWVsc2UKKwkJCQlsaXN0ID0gJmNvbm4tPmNfcmV0cmFuczsKKworCQkJc3Bpbl9sb2NrKCZjb25uLT5jX2xvY2spOworCisJCQkvKiBYWFggdG9vIGxhenkgdG8gbWFpbnRhaW4gY291bnRzLi4gKi8KKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkocm0sIGxpc3QsIG1fY29ubl9pdGVtKSB7CisJCQkJdG90YWwrKzsKKwkJCQlpZiAodG90YWwgPD0gbGVuKQorCQkJCQlyZHNfaW5jX2luZm9fY29weSgmcm0tPm1faW5jLCBpdGVyLAorCQkJCQkJCSAgY29ubi0+Y19sYWRkciwKKwkJCQkJCQkgIGNvbm4tPmNfZmFkZHIsIDApOworCQkJfQorCisJCQlzcGluX3VubG9jaygmY29ubi0+Y19sb2NrKTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJkc19jb25uX2xvY2ssIGZsYWdzKTsKKworCWxlbnMtPm5yID0gdG90YWw7CisJbGVucy0+ZWFjaCA9IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fbWVzc2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19jb25uX21lc3NhZ2VfaW5mb19zZW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICAgICAgIHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCQkgICAgICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJcmRzX2Nvbm5fbWVzc2FnZV9pbmZvKHNvY2ssIGxlbiwgaXRlciwgbGVucywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19jb25uX21lc3NhZ2VfaW5mb19yZXRyYW5zKHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkJCSAgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJCSAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJcmRzX2Nvbm5fbWVzc2FnZV9pbmZvKHNvY2ssIGxlbiwgaXRlciwgbGVucywgMCk7Cit9CisKK3ZvaWQgcmRzX2Zvcl9lYWNoX2Nvbm5faW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zLAorCQkJICBpbnQgKCp2aXNpdG9yKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKiwgdm9pZCAqKSwKKwkJCSAgc2l6ZV90IGl0ZW1fbGVuKQoreworCXVpbnQ2NF90IGJ1ZmZlclsoaXRlbV9sZW4gKyA3KSAvIDhdOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CisJc3RydWN0IGhsaXN0X25vZGUgKnRtcDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzaXplX3QgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZyZHNfY29ubl9sb2NrLCBmbGFncyk7CisKKwlsZW5zLT5uciA9IDA7CisJbGVucy0+ZWFjaCA9IGl0ZW1fbGVuOworCisJZm9yIChpID0gMCwgaGVhZCA9IHJkc19jb25uX2hhc2g7IGkgPCBBUlJBWV9TSVpFKHJkc19jb25uX2hhc2gpOworCSAgICAgaSsrLCBoZWFkKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCBwb3MsIHRtcCwgaGVhZCwgY19oYXNoX25vZGUpIHsKKworCQkJLyogWFhYIG5vIGNfbG9jayB1c2FnZS4uICovCisJCQlpZiAoIXZpc2l0b3IoY29ubiwgYnVmZmVyKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogV2UgY29weSBhcyBtdWNoIGFzIHdlIGNhbiBmaXQgaW4gdGhlIGJ1ZmZlciwKKwkJCSAqIGJ1dCB3ZSBjb3VudCBhbGwgaXRlbXMgc28gdGhhdCB0aGUgY2FsbGVyCisJCQkgKiBjYW4gcmVzaXplIHRoZSBidWZmZXIuICovCisJCQlpZiAobGVuID49IGl0ZW1fbGVuKSB7CisJCQkJcmRzX2luZm9fY29weShpdGVyLCBidWZmZXIsIGl0ZW1fbGVuKTsKKwkJCQlsZW4gLT0gaXRlbV9sZW47CisJCQl9CisJCQlsZW5zLT5ucisrOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmRzX2Nvbm5fbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHJkc19jb25uX2luZm9fdmlzaXRvcihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJICB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IHJkc19pbmZvX2Nvbm5lY3Rpb24gKmNpbmZvID0gYnVmZmVyOworCisJY2luZm8tPm5leHRfdHhfc2VxID0gY29ubi0+Y19uZXh0X3R4X3NlcTsKKwljaW5mby0+bmV4dF9yeF9zZXEgPSBjb25uLT5jX25leHRfcnhfc2VxOworCWNpbmZvLT5sYWRkciA9IGNvbm4tPmNfbGFkZHI7CisJY2luZm8tPmZhZGRyID0gY29ubi0+Y19mYWRkcjsKKwlzdHJuY3B5KGNpbmZvLT50cmFuc3BvcnQsIGNvbm4tPmNfdHJhbnMtPnRfbmFtZSwKKwkJc2l6ZW9mKGNpbmZvLT50cmFuc3BvcnQpKTsKKwljaW5mby0+ZmxhZ3MgPSAwOworCisJcmRzX2Nvbm5faW5mb19zZXQoY2luZm8tPmZsYWdzLAorCQkJICByZHNfY29ubl9pc19zZW5kaW5nKGNvbm4pLCBTRU5ESU5HKTsKKwkvKiBYWFggRnV0dXJlOiByZXR1cm4gdGhlIHN0YXRlIHJhdGhlciB0aGFuIHRoZXNlIGZ1bmt5IGJpdHMgKi8KKwlyZHNfY29ubl9pbmZvX3NldChjaW5mby0+ZmxhZ3MsCisJCQkgIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSA9PSBSRFNfQ09OTl9DT05ORUNUSU5HLAorCQkJICBDT05ORUNUSU5HKTsKKwlyZHNfY29ubl9pbmZvX3NldChjaW5mby0+ZmxhZ3MsCisJCQkgIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSA9PSBSRFNfQ09OTl9VUCwKKwkJCSAgQ09OTkVDVEVEKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgcmRzX2Nvbm5faW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgIHN0cnVjdCByZHNfaW5mb19sZW5ndGhzICpsZW5zKQoreworCXJkc19mb3JfZWFjaF9jb25uX2luZm8oc29jaywgbGVuLCBpdGVyLCBsZW5zLAorCQkJCXJkc19jb25uX2luZm9fdmlzaXRvciwKKwkJCQlzaXplb2Yoc3RydWN0IHJkc19pbmZvX2Nvbm5lY3Rpb24pKTsKK30KKworaW50IF9faW5pdCByZHNfY29ubl9pbml0KHZvaWQpCit7CisJcmRzX2Nvbm5fc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZHNfY29ubmVjdGlvbiIsCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCByZHNfY29ubmVjdGlvbiksCisJCQkJCSAgMCwgMCwgTlVMTCk7CisJaWYgKHJkc19jb25uX3NsYWIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0NPTk5FQ1RJT05TLCByZHNfY29ubl9pbmZvKTsKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX1NFTkRfTUVTU0FHRVMsCisJCQkgICAgICAgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3NlbmQpOworCXJkc19pbmZvX3JlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fUkVUUkFOU19NRVNTQUdFUywKKwkJCSAgICAgICByZHNfY29ubl9tZXNzYWdlX2luZm9fcmV0cmFucyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfY29ubl9leGl0KHZvaWQpCit7CisJcmRzX2xvb3BfZXhpdCgpOworCisJV0FSTl9PTighaGxpc3RfZW1wdHkocmRzX2Nvbm5faGFzaCkpOworCisJa21lbV9jYWNoZV9kZXN0cm95KHJkc19jb25uX3NsYWIpOworCisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0NPTk5FQ1RJT05TLCByZHNfY29ubl9pbmZvKTsKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fU0VORF9NRVNTQUdFUywKKwkJCQkgcmRzX2Nvbm5fbWVzc2FnZV9pbmZvX3NlbmQpOworCXJkc19pbmZvX2RlcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19SRVRSQU5TX01FU1NBR0VTLAorCQkJCSByZHNfY29ubl9tZXNzYWdlX2luZm9fcmV0cmFucyk7Cit9CisKKy8qCisgKiBGb3JjZSBhIGRpc2Nvbm5lY3QKKyAqLwordm9pZCByZHNfY29ubl9kcm9wKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlhdG9taWNfc2V0KCZjb25uLT5jX3N0YXRlLCBSRFNfQ09OTl9FUlJPUik7CisJcXVldWVfd29yayhyZHNfd3EsICZjb25uLT5jX2Rvd25fdyk7Cit9CisKKy8qCisgKiBBbiBlcnJvciBvY2N1cnJlZCBvbiB0aGUgY29ubmVjdGlvbgorICovCit2b2lkCitfX3Jkc19jb25uX2Vycm9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZwcmludGsoZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCXJkc19jb25uX2Ryb3AoY29ubik7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liLmMgYi9uZXQvcmRzL2liLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhN2I3OQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWIuYwpAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaWIuaCIKKwordW5zaWduZWQgaW50IGZtcl9wb29sX3NpemUgPSBSRFNfRk1SX1BPT0xfU0laRTsKK3Vuc2lnbmVkIGludCBmbXJfbWVzc2FnZV9zaXplID0gUkRTX0ZNUl9TSVpFICsgMTsgLyogKzEgYWxsb3dzIGZvciB1bmFsaWduZWQgTVJzICovCisKK21vZHVsZV9wYXJhbShmbXJfcG9vbF9zaXplLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmbXJfcG9vbF9zaXplLCAiIE1heCBudW1iZXIgb2YgZm1yIHBlciBIQ0EiKTsKK21vZHVsZV9wYXJhbShmbXJfbWVzc2FnZV9zaXplLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmbXJfbWVzc2FnZV9zaXplLCAiIE1heCBzaXplIG9mIGEgUkRNQSB0cmFuc2ZlciIpOworCitzdHJ1Y3QgbGlzdF9oZWFkIHJkc19pYl9kZXZpY2VzOworCitERUZJTkVfU1BJTkxPQ0soaWJfbm9kZXZfY29ubnNfbG9jayk7CitMSVNUX0hFQUQoaWJfbm9kZXZfY29ubnMpOworCit2b2lkIHJkc19pYl9hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqZGV2X2F0dHI7CisKKwkvKiBPbmx5IGhhbmRsZSBJQiAobm8gaVdBUlApIGRldmljZXMgKi8KKwlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgIT0gUkRNQV9OT0RFX0lCX0NBKQorCQlyZXR1cm47CisKKwlkZXZfYXR0ciA9IGttYWxsb2Moc2l6ZW9mICpkZXZfYXR0ciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXZfYXR0cikKKwkJcmV0dXJuOworCisJaWYgKGliX3F1ZXJ5X2RldmljZShkZXZpY2UsIGRldl9hdHRyKSkgeworCQlyZHNkZWJ1ZygiUXVlcnkgZGV2aWNlIGZhaWxlZCBmb3IgJXNcbiIsIGRldmljZS0+bmFtZSk7CisJCWdvdG8gZnJlZV9hdHRyOworCX0KKworCXJkc19pYmRldiA9IGttYWxsb2Moc2l6ZW9mICpyZHNfaWJkZXYsIEdGUF9LRVJORUwpOworCWlmICghcmRzX2liZGV2KQorCQlnb3RvIGZyZWVfYXR0cjsKKworCXNwaW5fbG9ja19pbml0KCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKworCXJkc19pYmRldi0+bWF4X3dycyA9IGRldl9hdHRyLT5tYXhfcXBfd3I7CisJcmRzX2liZGV2LT5tYXhfc2dlID0gbWluKGRldl9hdHRyLT5tYXhfc2dlLCBSRFNfSUJfTUFYX1NHRSk7CisKKwlyZHNfaWJkZXYtPmZtcl9wYWdlX3NoaWZ0ID0gbWF4KDksIGZmcyhkZXZfYXR0ci0+cGFnZV9zaXplX2NhcCkgLSAxKTsKKwlyZHNfaWJkZXYtPmZtcl9wYWdlX3NpemUgID0gMSA8PCByZHNfaWJkZXYtPmZtcl9wYWdlX3NoaWZ0OworCXJkc19pYmRldi0+Zm1yX3BhZ2VfbWFzayAgPSB+KCh1NjQpIHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2l6ZSAtIDEpOworCXJkc19pYmRldi0+Zm1yX21heF9yZW1hcHMgPSBkZXZfYXR0ci0+bWF4X21hcF9wZXJfZm1yPzogMzI7CisJcmRzX2liZGV2LT5tYXhfZm1ycyA9IGRldl9hdHRyLT5tYXhfZm1yID8KKwkJCW1pbl90KHVuc2lnbmVkIGludCwgZGV2X2F0dHItPm1heF9mbXIsIGZtcl9wb29sX3NpemUpIDoKKwkJCWZtcl9wb29sX3NpemU7CisKKwlyZHNfaWJkZXYtPmRldiA9IGRldmljZTsKKwlyZHNfaWJkZXYtPnBkID0gaWJfYWxsb2NfcGQoZGV2aWNlKTsKKwlpZiAoSVNfRVJSKHJkc19pYmRldi0+cGQpKQorCQlnb3RvIGZyZWVfZGV2OworCisJcmRzX2liZGV2LT5tciA9IGliX2dldF9kbWFfbXIocmRzX2liZGV2LT5wZCwKKwkJCQkgICAgICBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpOworCWlmIChJU19FUlIocmRzX2liZGV2LT5tcikpCisJCWdvdG8gZXJyX3BkOworCisJcmRzX2liZGV2LT5tcl9wb29sID0gcmRzX2liX2NyZWF0ZV9tcl9wb29sKHJkc19pYmRldik7CisJaWYgKElTX0VSUihyZHNfaWJkZXYtPm1yX3Bvb2wpKSB7CisJCXJkc19pYmRldi0+bXJfcG9vbCA9IE5VTEw7CisJCWdvdG8gZXJyX21yOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZyZHNfaWJkZXYtPmlwYWRkcl9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2liZGV2LT5jb25uX2xpc3QpOworCWxpc3RfYWRkX3RhaWwoJnJkc19pYmRldi0+bGlzdCwgJnJkc19pYl9kZXZpY2VzKTsKKworCWliX3NldF9jbGllbnRfZGF0YShkZXZpY2UsICZyZHNfaWJfY2xpZW50LCByZHNfaWJkZXYpOworCisJZ290byBmcmVlX2F0dHI7CisKK2Vycl9tcjoKKwlpYl9kZXJlZ19tcihyZHNfaWJkZXYtPm1yKTsKK2Vycl9wZDoKKwlpYl9kZWFsbG9jX3BkKHJkc19pYmRldi0+cGQpOworZnJlZV9kZXY6CisJa2ZyZWUocmRzX2liZGV2KTsKK2ZyZWVfYXR0cjoKKwlrZnJlZShkZXZfYXR0cik7Cit9CisKK3ZvaWQgcmRzX2liX3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IHJkc19pYl9pcGFkZHIgKmlfaXBhZGRyLCAqaV9uZXh0OworCisJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldmljZSwgJnJkc19pYl9jbGllbnQpOworCWlmICghcmRzX2liZGV2KQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaV9pcGFkZHIsIGlfbmV4dCwgJnJkc19pYmRldi0+aXBhZGRyX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmlfaXBhZGRyLT5saXN0KTsKKwkJa2ZyZWUoaV9pcGFkZHIpOworCX0KKworCXJkc19pYl9yZW1vdmVfY29ubnMocmRzX2liZGV2KTsKKworCWlmIChyZHNfaWJkZXYtPm1yX3Bvb2wpCisJCXJkc19pYl9kZXN0cm95X21yX3Bvb2wocmRzX2liZGV2LT5tcl9wb29sKTsKKworCWliX2RlcmVnX21yKHJkc19pYmRldi0+bXIpOworCisJd2hpbGUgKGliX2RlYWxsb2NfcGQocmRzX2liZGV2LT5wZCkpIHsKKwkJcmRzZGVidWcoIkZhaWxlZCB0byBkZWFsbG9jIHBkICVwXG4iLCByZHNfaWJkZXYtPnBkKTsKKwkJbXNsZWVwKDEpOworCX0KKworCWxpc3RfZGVsKCZyZHNfaWJkZXYtPmxpc3QpOworCWtmcmVlKHJkc19pYmRldik7Cit9CisKK3N0cnVjdCBpYl9jbGllbnQgcmRzX2liX2NsaWVudCA9IHsKKwkubmFtZSAgID0gInJkc19pYiIsCisJLmFkZCAgICA9IHJkc19pYl9hZGRfb25lLAorCS5yZW1vdmUgPSByZHNfaWJfcmVtb3ZlX29uZQorfTsKKworc3RhdGljIGludCByZHNfaWJfY29ubl9pbmZvX3Zpc2l0b3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgICB2b2lkICpidWZmZXIpCit7CisJc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8gPSBidWZmZXI7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYzsKKworCS8qIFdlIHdpbGwgb25seSBldmVyIGxvb2sgYXQgSUIgdHJhbnNwb3J0cyAqLworCWlmIChjb25uLT5jX3RyYW5zICE9ICZyZHNfaWJfdHJhbnNwb3J0KQorCQlyZXR1cm4gMDsKKworCWlpbmZvLT5zcmNfYWRkciA9IGNvbm4tPmNfbGFkZHI7CisJaWluZm8tPmRzdF9hZGRyID0gY29ubi0+Y19mYWRkcjsKKworCW1lbXNldCgmaWluZm8tPnNyY19naWQsIDAsIHNpemVvZihpaW5mby0+c3JjX2dpZCkpOworCW1lbXNldCgmaWluZm8tPmRzdF9naWQsIDAsIHNpemVvZihpaW5mby0+ZHN0X2dpZCkpOworCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9VUCkgeworCQlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCQlzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHI7CisKKwkJaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCQlkZXZfYWRkciA9ICZpYy0+aV9jbV9pZC0+cm91dGUuYWRkci5kZXZfYWRkcjsKKworCQlpYl9hZGRyX2dldF9zZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZpaW5mby0+c3JjX2dpZCk7CisJCWliX2FkZHJfZ2V0X2RnaWQoZGV2X2FkZHIsICh1bmlvbiBpYl9naWQgKikgJmlpbmZvLT5kc3RfZ2lkKTsKKworCQlyZHNfaWJkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pYl9jbGllbnQpOworCQlpaW5mby0+bWF4X3NlbmRfd3IgPSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwkJaWluZm8tPm1heF9yZWN2X3dyID0gaWMtPmlfcmVjdl9yaW5nLndfbnI7CisJCWlpbmZvLT5tYXhfc2VuZF9zZ2UgPSByZHNfaWJkZXYtPm1heF9zZ2U7CisJCXJkc19pYl9nZXRfbXJfaW5mbyhyZHNfaWJkZXYsIGlpbmZvKTsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9pY19pbmZvKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucykKK3sKKwlyZHNfZm9yX2VhY2hfY29ubl9pbmZvKHNvY2ssIGxlbiwgaXRlciwgbGVucywKKwkJCQlyZHNfaWJfY29ubl9pbmZvX3Zpc2l0b3IsCisJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24pKTsKK30KKworCisvKgorICogRWFybHkgUkRTL0lCIHdhcyBidWlsdCB0byBvbmx5IGJpbmQgdG8gYW4gYWRkcmVzcyBpZiB0aGVyZSBpcyBhbiBJUG9JQgorICogZGV2aWNlIHdpdGggdGhhdCBhZGRyZXNzIHNldC4KKyAqCisgKiBJZiBpdCB3ZXJlIG1lLCBJJ2QgYWR2b2NhdGUgZm9yIHNvbWV0aGluZyBtb3JlIGZsZXhpYmxlLiAgU2VuZGluZyBhbmQKKyAqIHJlY2VpdmluZyBzaG91bGQgYmUgZGV2aWNlLWFnbm9zdGljLiAgVHJhbnNwb3J0cyB3b3VsZCB0cnkgYW5kIG1haW50YWluCisgKiBjb25uZWN0aW9ucyBiZXR3ZWVuIHBlZXJzIHdobyBoYXZlIG1lc3NhZ2VzIHF1ZXVlZC4gIFVzZXJzcGFjZSB3b3VsZCBiZQorICogYWxsb3dlZCB0byBpbmZsdWVuY2Ugd2hpY2ggcGF0aHMgaGF2ZSBwcmlvcml0eS4gIFdlIGNvdWxkIGNhbGwgdXNlcnNwYWNlCisgKiBhc3NlcnRpbmcgdGhpcyBwb2xpY3kgInJvdXRpbmciLgorICovCitzdGF0aWMgaW50IHJkc19pYl9sYWRkcl9jaGVjayhfX2JlMzIgYWRkcikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCByZG1hX2NtX2lkICpjbV9pZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworCisJLyogQ3JlYXRlIGEgQ01BIElEIGFuZCB0cnkgdG8gYmluZCBpdC4gVGhpcyBjYXRjaGVzIGJvdGgKKwkgKiBJQiBhbmQgaVdBUlAgY2FwYWJsZSBOSUNzLgorCSAqLworCWNtX2lkID0gcmRtYV9jcmVhdGVfaWQoTlVMTCwgTlVMTCwgUkRNQV9QU19UQ1ApOworCWlmICghY21faWQpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc2luKSk7CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBhZGRyOworCisJLyogcmRtYV9iaW5kX2FkZHIgd2lsbCBvbmx5IHN1Y2NlZWQgZm9yIElCICYgaVdBUlAgZGV2aWNlcyAqLworCXJldCA9IHJkbWFfYmluZF9hZGRyKGNtX2lkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbik7CisJLyogZHVlIHRvIHRoaXMsIHdlIHdpbGwgY2xhaW0gdG8gc3VwcG9ydCBpV0FSUCBkZXZpY2VzIHVubGVzcyB3ZQorCSAgIGNoZWNrIG5vZGVfdHlwZS4gKi8KKwlpZiAocmV0IHx8IGNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSAhPSBSRE1BX05PREVfSUJfQ0EpCisJCXJldCA9IC1FQUREUk5PVEFWQUlMOworCisJcmRzZGVidWcoImFkZHIgJXBJNCByZXQgJWQgbm9kZSB0eXBlICVkXG4iLAorCQkmYWRkciwgcmV0LAorCQljbV9pZC0+ZGV2aWNlID8gY21faWQtPmRldmljZS0+bm9kZV90eXBlIDogLTEpOworCisJcmRtYV9kZXN0cm95X2lkKGNtX2lkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX2V4aXQodm9pZCkKK3sKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fSUJfQ09OTkVDVElPTlMsIHJkc19pYl9pY19pbmZvKTsKKwlyZHNfaWJfcmVtb3ZlX25vZGV2X2Nvbm5zKCk7CisJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnJkc19pYl9jbGllbnQpOworCXJkc19pYl9zeXNjdGxfZXhpdCgpOworCXJkc19pYl9yZWN2X2V4aXQoKTsKKwlyZHNfdHJhbnNfdW5yZWdpc3RlcigmcmRzX2liX3RyYW5zcG9ydCk7Cit9CisKK3N0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pYl90cmFuc3BvcnQgPSB7CisJLmxhZGRyX2NoZWNrCQk9IHJkc19pYl9sYWRkcl9jaGVjaywKKwkueG1pdF9jb21wbGV0ZQkJPSByZHNfaWJfeG1pdF9jb21wbGV0ZSwKKwkueG1pdAkJCT0gcmRzX2liX3htaXQsCisJLnhtaXRfY29uZ19tYXAJCT0gTlVMTCwKKwkueG1pdF9yZG1hCQk9IHJkc19pYl94bWl0X3JkbWEsCisJLnJlY3YJCQk9IHJkc19pYl9yZWN2LAorCS5jb25uX2FsbG9jCQk9IHJkc19pYl9jb25uX2FsbG9jLAorCS5jb25uX2ZyZWUJCT0gcmRzX2liX2Nvbm5fZnJlZSwKKwkuY29ubl9jb25uZWN0CQk9IHJkc19pYl9jb25uX2Nvbm5lY3QsCisJLmNvbm5fc2h1dGRvd24JCT0gcmRzX2liX2Nvbm5fc2h1dGRvd24sCisJLmluY19jb3B5X3RvX3VzZXIJPSByZHNfaWJfaW5jX2NvcHlfdG9fdXNlciwKKwkuaW5jX3B1cmdlCQk9IHJkc19pYl9pbmNfcHVyZ2UsCisJLmluY19mcmVlCQk9IHJkc19pYl9pbmNfZnJlZSwKKwkuY21faW5pdGlhdGVfY29ubmVjdAk9IHJkc19pYl9jbV9pbml0aWF0ZV9jb25uZWN0LAorCS5jbV9oYW5kbGVfY29ubmVjdAk9IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdCwKKwkuY21fY29ubmVjdF9jb21wbGV0ZQk9IHJkc19pYl9jbV9jb25uZWN0X2NvbXBsZXRlLAorCS5zdGF0c19pbmZvX2NvcHkJPSByZHNfaWJfc3RhdHNfaW5mb19jb3B5LAorCS5leGl0CQkJPSByZHNfaWJfZXhpdCwKKwkuZ2V0X21yCQkJPSByZHNfaWJfZ2V0X21yLAorCS5zeW5jX21yCQk9IHJkc19pYl9zeW5jX21yLAorCS5mcmVlX21yCQk9IHJkc19pYl9mcmVlX21yLAorCS5mbHVzaF9tcnMJCT0gcmRzX2liX2ZsdXNoX21ycywKKwkudF9vd25lcgkJPSBUSElTX01PRFVMRSwKKwkudF9uYW1lCQkJPSAiaW5maW5pYmFuZCIsCit9OworCitpbnQgX19pbml0IHJkc19pYl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCUlOSVRfTElTVF9IRUFEKCZyZHNfaWJfZGV2aWNlcyk7CisKKwlyZXQgPSBpYl9yZWdpc3Rlcl9jbGllbnQoJnJkc19pYl9jbGllbnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gcmRzX2liX3N5c2N0bF9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfaWJyZWc7CisKKwlyZXQgPSByZHNfaWJfcmVjdl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfc3lzY3RsOworCisJcmV0ID0gcmRzX3RyYW5zX3JlZ2lzdGVyKCZyZHNfaWJfdHJhbnNwb3J0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZWN2OworCisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19JQl9DT05ORUNUSU9OUywgcmRzX2liX2ljX2luZm8pOworCisJZ290byBvdXQ7CisKK291dF9yZWN2OgorCXJkc19pYl9yZWN2X2V4aXQoKTsKK291dF9zeXNjdGw6CisJcmRzX2liX3N5c2N0bF9leGl0KCk7CitvdXRfaWJyZWc6CisJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnJkc19pYl9jbGllbnQpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYi5oIGIvbmV0L3Jkcy9pYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTU2M2EKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liLmgKQEAgLTAsMCArMSwzNjcgQEAKKyNpZm5kZWYgX1JEU19JQl9ICisjZGVmaW5lIF9SRFNfSUJfSAorCisjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWFfdHJhbnNwb3J0LmgiCisKKyNkZWZpbmUgUkRTX0ZNUl9TSVpFCQkJMjU2CisjZGVmaW5lIFJEU19GTVJfUE9PTF9TSVpFCQk0MDk2CisKKyNkZWZpbmUgUkRTX0lCX01BWF9TR0UJCQk4CisjZGVmaW5lIFJEU19JQl9SRUNWX1NHRSAJCTIKKworI2RlZmluZSBSRFNfSUJfREVGQVVMVF9SRUNWX1dSCQkxMDI0CisjZGVmaW5lIFJEU19JQl9ERUZBVUxUX1NFTkRfV1IJCTI1NgorCisjZGVmaW5lIFJEU19JQl9TVVBQT1JURURfUFJPVE9DT0xTCTB4MDAwMDAwMDMJLyogbWlub3IgdmVyc2lvbnMgc3VwcG9ydGVkICovCisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHJkc19pYl9kZXZpY2VzOworCisvKgorICogSUIgcG9zdHMgUkRTX0ZSQUdfU0laRSBmcmFnbWVudHMgb2YgcGFnZXMgdG8gdGhlIHJlY2VpdmUgcXVldWVzIHRvCisgKiB0cnkgYW5kIG1pbmltaXplIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRpZWQgdXAgYm90aCB0aGUgZGV2aWNlIGFuZAorICogc29ja2V0IHJlY2VpdmUgcXVldWVzLgorICovCisvKiBwYWdlIG9mZnNldCBvZiB0aGUgZmluYWwgZnVsbCBmcmFnIHRoYXQgZml0cyBpbiB0aGUgcGFnZSAqLworI2RlZmluZSBSRFNfUEFHRV9MQVNUX09GRiAoKChQQUdFX1NJWkUgIC8gUkRTX0ZSQUdfU0laRSkgLSAxKSAqIFJEU19GUkFHX1NJWkUpCitzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyB7CisJc3RydWN0IGxpc3RfaGVhZAlmX2l0ZW07CisJc3RydWN0IHBhZ2UJCSpmX3BhZ2U7CisJdW5zaWduZWQgbG9uZwkJZl9vZmZzZXQ7CisJZG1hX2FkZHJfdCAJCWZfbWFwcGVkOworfTsKKworc3RydWN0IHJkc19pYl9pbmNvbWluZyB7CisJc3RydWN0IGxpc3RfaGVhZAlpaV9mcmFnczsKKwlzdHJ1Y3QgcmRzX2luY29taW5nCWlpX2luYzsKK307CisKK3N0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlIHsKKwkvKiBBZGQgbmV3IGZpZWxkcyBhdCB0aGUgZW5kLCBhbmQgZG9uJ3QgcGVybXV0ZSBleGlzdGluZyBmaWVsZHMuICovCisJX19iZTMyCQkJZHBfc2FkZHI7CisJX19iZTMyCQkJZHBfZGFkZHI7CisJdTgJCQlkcF9wcm90b2NvbF9tYWpvcjsKKwl1OAkJCWRwX3Byb3RvY29sX21pbm9yOworCV9fYmUxNgkJCWRwX3Byb3RvY29sX21pbm9yX21hc2s7IC8qIGJpdG1hc2sgKi8KKwlfX2JlMzIJCQlkcF9yZXNlcnZlZDE7CisJX19iZTY0CQkJZHBfYWNrX3NlcTsKKwlfX2JlMzIJCQlkcF9jcmVkaXQ7CQkvKiBub24temVybyBlbmFibGVzIGZsb3cgY3RsICovCit9OworCitzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayB7CisJc3RydWN0IHJkc19tZXNzYWdlCSpzX3JtOworCXN0cnVjdCByZHNfcmRtYV9vcAkqc19vcDsKKwlzdHJ1Y3QgaWJfc2VuZF93cglzX3dyOworCXN0cnVjdCBpYl9zZ2UJCXNfc2dlW1JEU19JQl9NQVhfU0dFXTsKKwl1bnNpZ25lZCBsb25nCQlzX3F1ZXVlZDsKK307CisKK3N0cnVjdCByZHNfaWJfcmVjdl93b3JrIHsKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nIAkqcl9pYmluYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZwkqcl9mcmFnOworCXN0cnVjdCBpYl9yZWN2X3dyCXJfd3I7CisJc3RydWN0IGliX3NnZQkJcl9zZ2VbMl07Cit9OworCitzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyB7CisJdTMyCQl3X25yOworCXUzMgkJd19hbGxvY19wdHI7CisJdTMyCQl3X2FsbG9jX2N0cjsKKwl1MzIJCXdfZnJlZV9wdHI7CisJYXRvbWljX3QJd19mcmVlX2N0cjsKK307CisKK3N0cnVjdCByZHNfaWJfZGV2aWNlOworCitzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24geworCisJc3RydWN0IGxpc3RfaGVhZAlpYl9ub2RlOworCXN0cnVjdCByZHNfaWJfZGV2aWNlCSpyZHNfaWJkZXY7CisJc3RydWN0IHJkc19jb25uZWN0aW9uCSpjb25uOworCisJLyogYWxwaGFiZXQgc291cCwgSUJUQSBzdHlsZSAqLworCXN0cnVjdCByZG1hX2NtX2lkCSppX2NtX2lkOworCXN0cnVjdCBpYl9wZAkJKmlfcGQ7CisJc3RydWN0IGliX21yCQkqaV9tcjsKKwlzdHJ1Y3QgaWJfY3EJCSppX3NlbmRfY3E7CisJc3RydWN0IGliX2NxCQkqaV9yZWN2X2NxOworCisJLyogdHggKi8KKwlzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZwlpX3NlbmRfcmluZzsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKmlfcm07CisJc3RydWN0IHJkc19oZWFkZXIJKmlfc2VuZF9oZHJzOworCXU2NAkJCWlfc2VuZF9oZHJzX2RtYTsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqaV9zZW5kczsKKworCS8qIHJ4ICovCisJc3RydWN0IG11dGV4CQlpX3JlY3ZfbXV0ZXg7CisJc3RydWN0IHJkc19pYl93b3JrX3JpbmcJaV9yZWN2X3Jpbmc7CisJc3RydWN0IHJkc19pYl9pbmNvbWluZwkqaV9pYmluYzsKKwl1MzIJCQlpX3JlY3ZfZGF0YV9yZW07CisJc3RydWN0IHJkc19oZWFkZXIJKmlfcmVjdl9oZHJzOworCXU2NAkJCWlfcmVjdl9oZHJzX2RtYTsKKwlzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqaV9yZWN2czsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZwlpX2ZyYWc7CisJdTY0CQkJaV9hY2tfcmVjdjsJLyogbGFzdCBBQ0sgcmVjZWl2ZWQgKi8KKworCS8qIHNlbmRpbmcgYWNrcyAqLworCXVuc2lnbmVkIGxvbmcJCWlfYWNrX2ZsYWdzOworCXU2NAkJCWlfYWNrX25leHQ7CS8qIG5leHQgQUNLIHRvIHNlbmQgKi8KKwlzdHJ1Y3QgcmRzX2hlYWRlcgkqaV9hY2s7CisJc3RydWN0IGliX3NlbmRfd3IJaV9hY2tfd3I7CisJc3RydWN0IGliX3NnZQkJaV9hY2tfc2dlOworCXU2NAkJCWlfYWNrX2RtYTsKKwl1bnNpZ25lZCBsb25nCQlpX2Fja19xdWV1ZWQ7CisKKwkvKiBGbG93IGNvbnRyb2wgcmVsYXRlZCBpbmZvcm1hdGlvbgorCSAqCisJICogT3VyIGFsZ29yaXRobSB1c2VzIGEgcGFpciB2YXJpYWJsZXMgdGhhdCB3ZSBuZWVkIHRvIGFjY2VzcworCSAqIGF0b21pY2FsbHkgLSBvbmUgZm9yIHRoZSBzZW5kIGNyZWRpdHMsIGFuZCBvbmUgcG9zdGVkCisJICogcmVjdiBjcmVkaXRzIHdlIG5lZWQgdG8gdHJhbnNmZXIgdG8gcmVtb3RlLgorCSAqIFJhdGhlciB0aGFuIHByb3RlY3QgdGhlbSB1c2luZyBhIHNsb3cgc3BpbmxvY2ssIHdlIHB1dCBib3RoIGludG8KKwkgKiBhIHNpbmdsZSBhdG9taWNfdCBhbmQgdXBkYXRlIGl0IHVzaW5nIGNtcHhjaGcKKwkgKi8KKwlhdG9taWNfdAkJaV9jcmVkaXRzOworCisJLyogUHJvdG9jb2wgdmVyc2lvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworCXVuc2lnbmVkIGludAkJaV9mbG93Y3RsOjE7CS8qIGVuYWJsZS9kaXNhYmxlIGZsb3cgY3RsICovCisKKwkvKiBCYXRjaGVkIGNvbXBsZXRpb25zICovCisJdW5zaWduZWQgaW50CQlpX3Vuc2lnbmFsZWRfd3JzOworCWxvbmcJCQlpX3Vuc2lnbmFsZWRfYnl0ZXM7Cit9OworCisvKiBUaGlzIGFzc3VtZXMgdGhhdCBhdG9taWNfdCBpcyBhdCBsZWFzdCAzMiBiaXRzICovCisjZGVmaW5lIElCX0dFVF9TRU5EX0NSRURJVFModikJKCh2KSAmIDB4ZmZmZikKKyNkZWZpbmUgSUJfR0VUX1BPU1RfQ1JFRElUUyh2KQkoKHYpID4+IDE2KQorI2RlZmluZSBJQl9TRVRfU0VORF9DUkVESVRTKHYpCSgodikgJiAweGZmZmYpCisjZGVmaW5lIElCX1NFVF9QT1NUX0NSRURJVFModikJKCh2KSA8PCAxNikKKworc3RydWN0IHJkc19pYl9pcGFkZHIgeworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlfX2JlMzIJCQlpcGFkZHI7Cit9OworCitzdHJ1Y3QgcmRzX2liX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBsaXN0X2hlYWQJaXBhZGRyX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAljb25uX2xpc3Q7CisJc3RydWN0IGliX2RldmljZQkqZGV2OworCXN0cnVjdCBpYl9wZAkJKnBkOworCXN0cnVjdCBpYl9tcgkJKm1yOworCXN0cnVjdCByZHNfaWJfbXJfcG9vbAkqbXJfcG9vbDsKKwlpbnQJCQlmbXJfcGFnZV9zaGlmdDsKKwlpbnQJCQlmbXJfcGFnZV9zaXplOworCXU2NAkJCWZtcl9wYWdlX21hc2s7CisJdW5zaWduZWQgaW50CQlmbXJfbWF4X3JlbWFwczsKKwl1bnNpZ25lZCBpbnQJCW1heF9mbXJzOworCWludAkJCW1heF9zZ2U7CisJdW5zaWduZWQgaW50CQltYXhfd3JzOworCXNwaW5sb2NrX3QJCXNwaW5sb2NrOwkvKiBwcm90ZWN0IHRoZSBhYm92ZSAqLworfTsKKworLyogYml0cyBmb3IgaV9hY2tfZmxhZ3MgKi8KKyNkZWZpbmUgSUJfQUNLX0lOX0ZMSUdIVAkwCisjZGVmaW5lIElCX0FDS19SRVFVRVNURUQJMQorCisvKiBNYWdpYyBXUl9JRCBmb3IgQUNLcyAqLworI2RlZmluZSBSRFNfSUJfQUNLX1dSX0lECSh+KHU2NCkgMCkKKworc3RydWN0IHJkc19pYl9zdGF0aXN0aWNzIHsKKwl1aW50NjRfdAlzX2liX2Nvbm5lY3RfcmFjZWQ7CisJdWludDY0X3QJc19pYl9saXN0ZW5fY2xvc2VkX3N0YWxlOworCXVpbnQ2NF90CXNfaWJfdHhfY3FfY2FsbDsKKwl1aW50NjRfdAlzX2liX3R4X2NxX2V2ZW50OworCXVpbnQ2NF90CXNfaWJfdHhfcmluZ19mdWxsOworCXVpbnQ2NF90CXNfaWJfdHhfdGhyb3R0bGU7CisJdWludDY0X3QJc19pYl90eF9zZ19tYXBwaW5nX2ZhaWx1cmU7CisJdWludDY0X3QJc19pYl90eF9zdGFsbGVkOworCXVpbnQ2NF90CXNfaWJfdHhfY3JlZGl0X3VwZGF0ZXM7CisJdWludDY0X3QJc19pYl9yeF9jcV9jYWxsOworCXVpbnQ2NF90CXNfaWJfcnhfY3FfZXZlbnQ7CisJdWludDY0X3QJc19pYl9yeF9yaW5nX2VtcHR5OworCXVpbnQ2NF90CXNfaWJfcnhfcmVmaWxsX2Zyb21fY3E7CisJdWludDY0X3QJc19pYl9yeF9yZWZpbGxfZnJvbV90aHJlYWQ7CisJdWludDY0X3QJc19pYl9yeF9hbGxvY19saW1pdDsKKwl1aW50NjRfdAlzX2liX3J4X2NyZWRpdF91cGRhdGVzOworCXVpbnQ2NF90CXNfaWJfYWNrX3NlbnQ7CisJdWludDY0X3QJc19pYl9hY2tfc2VuZF9mYWlsdXJlOworCXVpbnQ2NF90CXNfaWJfYWNrX3NlbmRfZGVsYXllZDsKKwl1aW50NjRfdAlzX2liX2Fja19zZW5kX3BpZ2d5YmFja2VkOworCXVpbnQ2NF90CXNfaWJfYWNrX3JlY2VpdmVkOworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl9hbGxvYzsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfZnJlZTsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfdXNlZDsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfcG9vbF9mbHVzaDsKKwl1aW50NjRfdAlzX2liX3JkbWFfbXJfcG9vbF93YWl0OworCXVpbnQ2NF90CXNfaWJfcmRtYV9tcl9wb29sX2RlcGxldGVkOworfTsKKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZHNfaWJfd3E7CisKKy8qCisgKiBGYWtlIGliX2RtYV9zeW5jX3NnX2Zvcl97Y3B1LGRldmljZX0gYXMgbG9uZyBhcyBpYl92ZXJicy5oCisgKiBkb2Vzbid0IGRlZmluZSBpdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJkc19pYl9kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnX2RtYV9sZW4sIGludCBkaXJlY3Rpb24pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZ1tpXSksCisJCQkJaWJfc2dfZG1hX2xlbihkZXYsICZzZ1tpXSksCisJCQkJZGlyZWN0aW9uKTsKKwl9Cit9CisjZGVmaW5lIGliX2RtYV9zeW5jX3NnX2Zvcl9jcHUJcmRzX2liX2RtYV9zeW5jX3NnX2Zvcl9jcHUKKworc3RhdGljIGlubGluZSB2b2lkIHJkc19pYl9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnX2RtYV9sZW4sIGludCBkaXJlY3Rpb24pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZ1tpXSksCisJCQkJaWJfc2dfZG1hX2xlbihkZXYsICZzZ1tpXSksCisJCQkJZGlyZWN0aW9uKTsKKwl9Cit9CisjZGVmaW5lIGliX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJcmRzX2liX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UKKworCisvKiBpYi5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2liX3RyYW5zcG9ydDsKK2V4dGVybiB2b2lkIHJkc19pYl9hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CitleHRlcm4gdm9pZCByZHNfaWJfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIHN0cnVjdCBpYl9jbGllbnQgcmRzX2liX2NsaWVudDsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBmbXJfcG9vbF9zaXplOworZXh0ZXJuIHVuc2lnbmVkIGludCBmbXJfbWVzc2FnZV9zaXplOworCitleHRlcm4gc3BpbmxvY2tfdCBpYl9ub2Rldl9jb25uc19sb2NrOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaWJfbm9kZXZfY29ubnM7CisKKy8qIGliX2NtLmMgKi8KK2ludCByZHNfaWJfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCk7Cit2b2lkIHJkc19pYl9jb25uX2ZyZWUodm9pZCAqYXJnKTsKK2ludCByZHNfaWJfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pYl9jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pYl9zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKTsKK2ludCBfX2luaXQgcmRzX2liX2xpc3Rlbl9pbml0KHZvaWQpOwordm9pZCByZHNfaWJfbGlzdGVuX3N0b3Aodm9pZCk7Cit2b2lkIF9fcmRzX2liX2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICosIC4uLik7CitpbnQgcmRzX2liX2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCSAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKK2ludCByZHNfaWJfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpOwordm9pZCByZHNfaWJfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKKworCisjZGVmaW5lIHJkc19pYl9jb25uX2Vycm9yKGNvbm4sIGZtdC4uLikgXAorCV9fcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgS0VSTl9XQVJOSU5HICJSRFMvSUI6ICIgZm10KQorCisvKiBpYl9yZG1hLmMgKi8KK2ludCByZHNfaWJfdXBkYXRlX2lwYWRkcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBfX2JlMzIgaXBhZGRyKTsKK2ludCByZHNfaWJfYWRkX2Nvbm4oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2liX3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKTsKK3ZvaWQgcmRzX2liX3JlbW92ZV9jb25ucyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2KTsKK3N0cnVjdCByZHNfaWJfbXJfcG9vbCAqcmRzX2liX2NyZWF0ZV9tcl9wb29sKHN0cnVjdCByZHNfaWJfZGV2aWNlICopOwordm9pZCByZHNfaWJfZ2V0X21yX2luZm8oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8pOwordm9pZCByZHNfaWJfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqKTsKK3ZvaWQgKnJkc19pYl9nZXRfbXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgbG9uZyBuZW50cywKKwkJICAgIHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiAqa2V5X3JldCk7Cit2b2lkIHJkc19pYl9zeW5jX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXIpOwordm9pZCByZHNfaWJfZnJlZV9tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgaW52YWxpZGF0ZSk7Cit2b2lkIHJkc19pYl9mbHVzaF9tcnModm9pZCk7CisKKy8qIGliX3JlY3YuYyAqLworaW50IF9faW5pdCByZHNfaWJfcmVjdl9pbml0KHZvaWQpOwordm9pZCByZHNfaWJfcmVjdl9leGl0KHZvaWQpOworaW50IHJkc19pYl9yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX2liX3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3Qga3B0cl9nZnAsCisJCSAgICAgICBnZnBfdCBwYWdlX2dmcCwgaW50IHByZWZpbGwpOwordm9pZCByZHNfaWJfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19pYl9pbmNfZnJlZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOworaW50IHJkc19pYl9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICAgIHNpemVfdCBzaXplKTsKK3ZvaWQgcmRzX2liX3JlY3ZfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpOwordm9pZCByZHNfaWJfcmVjdl9pbml0X3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pYl9yZWN2X2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pYl9yZWN2X2luaXRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaWJfYXR0ZW1wdF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pYl9hY2tfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKK3U2NCByZHNfaWJfcGlnZ3liX2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKTsKKworLyogaWJfcmluZy5jICovCit2b2lkIHJkc19pYl9yaW5nX2luaXQoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiBucik7Cit2b2lkIHJkc19pYl9yaW5nX3Jlc2l6ZShzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIG5yKTsKK3UzMiByZHNfaWJfcmluZ19hbGxvYyhzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCwgdTMyICpwb3MpOwordm9pZCByZHNfaWJfcmluZ19mcmVlKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKTsKK3ZvaWQgcmRzX2liX3JpbmdfdW5hbGxvYyhzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCk7CitpbnQgcmRzX2liX3JpbmdfZW1wdHkoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpOworaW50IHJkc19pYl9yaW5nX2xvdyhzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZyk7Cit1MzIgcmRzX2liX3Jpbmdfb2xkZXN0KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKTsKK3UzMiByZHNfaWJfcmluZ19jb21wbGV0ZWQoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiB3cl9pZCwgdTMyIG9sZGVzdCk7CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgcmRzX2liX3JpbmdfZW1wdHlfd2FpdDsKKworLyogaWJfc2VuZC5jICovCit2b2lkIHJkc19pYl94bWl0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX2liX3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQl1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLCB1bnNpZ25lZCBpbnQgb2ZmKTsKK3ZvaWQgcmRzX2liX3NlbmRfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpOwordm9pZCByZHNfaWJfc2VuZF9pbml0X3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pYl9zZW5kX2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyk7CitpbnQgcmRzX2liX3htaXRfcmRtYShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApOwordm9pZCByZHNfaWJfc2VuZF9hZGRfY3JlZGl0cyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCBjcmVkaXRzKTsKK3ZvaWQgcmRzX2liX2FkdmVydGlzZV9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHBvc3RlZCk7CitpbnQgcmRzX2liX3NlbmRfZ3JhYl9jcmVkaXRzKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHUzMiB3YW50ZWQsCisJCQkgICAgIHUzMiAqYWR2X2NyZWRpdHMsIGludCBuZWVkX3Bvc3RlZCk7CisKKy8qIGliX3N0YXRzLmMgKi8KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmRzX2liX3N0YXRpc3RpY3MsIHJkc19pYl9zdGF0cyk7CisjZGVmaW5lIHJkc19pYl9zdGF0c19pbmMobWVtYmVyKSByZHNfc3RhdHNfaW5jX3doaWNoKHJkc19pYl9zdGF0cywgbWVtYmVyKQordW5zaWduZWQgaW50IHJkc19pYl9zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgYXZhaWwpOworCisvKiBpYl9zeXNjdGwuYyAqLworaW50IF9faW5pdCByZHNfaWJfc3lzY3RsX2luaXQodm9pZCk7Cit2b2lkIHJkc19pYl9zeXNjdGxfZXhpdCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3NlbmRfd3I7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb247CitleHRlcm4gdW5zaWduZWQgaW50IHJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sOworZXh0ZXJuIGN0bF90YWJsZSByZHNfaWJfc3lzY3RsX3RhYmxlW107CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBnZXR0aW5nL3NldHRpbmcgdGhlIGhlYWRlciBhbmQgZGF0YSBTR0VzIGluCisgKiBSRFMgcGFja2V0cyAobm90IFJETUEpCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGliX3NnZSAqCityZHNfaWJfaGVhZGVyX3NnZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfc2dlICpzZ2UpCit7CisJcmV0dXJuICZzZ2VbMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGliX3NnZSAqCityZHNfaWJfZGF0YV9zZ2Uoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgc3RydWN0IGliX3NnZSAqc2dlKQoreworCXJldHVybiAmc2dlWzFdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2liX3NldF82NGJpdCh1NjQgKnB0ciwgdTY0IHZhbCkKK3sKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJKnB0ciA9IHZhbDsKKyNlbHNlCisJc2V0XzY0Yml0KHB0ciwgdmFsKTsKKyNlbmRpZgorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfY20uYyBiL25ldC9yZHMvaWJfY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTMyMjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9jbS5jCkBAIC0wLDAgKzEsNzI2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImliLmgiCisKKy8qCisgKiBTZXQgdGhlIHNlbGVjdGVkIHByb3RvY29sIHZlcnNpb24KKyAqLworc3RhdGljIHZvaWQgcmRzX2liX3NldF9wcm90b2NvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCB2ZXJzaW9uKQoreworCWNvbm4tPmNfdmVyc2lvbiA9IHZlcnNpb247Cit9CisKKy8qCisgKiBTZXQgdXAgZmxvdyBjb250cm9sCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pYl9zZXRfZmxvd19jb250cm9sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTMyIGNyZWRpdHMpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlpZiAocmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wgJiYgY3JlZGl0cyAhPSAwKSB7CisJCS8qIFdlJ3JlIGRvaW5nIGZsb3cgY29udHJvbCAqLworCQlpYy0+aV9mbG93Y3RsID0gMTsKKwkJcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgY3JlZGl0cyk7CisJfSBlbHNlIHsKKwkJaWMtPmlfZmxvd2N0bCA9IDA7CisJfQorfQorCisvKgorICogVHVuZSBSTlIgYmVoYXZpb3IuIFdpdGhvdXQgZmxvdyBjb250cm9sLCB3ZSB1c2UgYSByYXRoZXIKKyAqIGxvdyB0aW1lb3V0LCBidXQgbm90IHRoZSBhYnNvbHV0ZSBtaW5pbXVtIC0gdGhpcyBzaG91bGQKKyAqIGJlIHR1bmFibGUuCisgKgorICogV2UgYWxyZWFkeSBzZXQgdGhlIFJOUiByZXRyeSBjb3VudCB0byA3ICh3aGljaCBpcyB0aGUKKyAqIHNtYWxsZXN0IGluZmluaXRlIG51bWJlciA6LSkgYWJvdmUuCisgKiBJZiBmbG93IGNvbnRyb2wgaXMgb2ZmLCB3ZSB3YW50IHRvIGNoYW5nZSB0aGlzIGJhY2sgdG8gMAorICogc28gdGhhdCB3ZSBsZWFybiBxdWlja2x5IHdoZW4gb3VyIGNyZWRpdCBhY2NvdW50aW5nIGlzCisgKiBidWdneS4KKyAqCisgKiBDYWxsZXIgcGFzc2VzIGluIGEgcXBfYXR0ciBwb2ludGVyIC0gZG9uJ3Qgd2FzdGUgc3RhY2sgc3BhY3YKKyAqIGJ5IGFsbG9jYXRpb24gdGhpcyB0d2ljZS4KKyAqLworc3RhdGljIHZvaWQKK3Jkc19pYl90dW5lX3JucihzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0cikKK3sKKwlpbnQgcmV0OworCisJYXR0ci0+bWluX3Jucl90aW1lciA9IElCX1JOUl9USU1FUl8wMDBfMzI7CisJcmV0ID0gaWJfbW9kaWZ5X3FwKGljLT5pX2NtX2lkLT5xcCwgYXR0ciwgSUJfUVBfTUlOX1JOUl9USU1FUik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJpYl9tb2RpZnlfcXAoSUJfUVBfTUlOX1JOUl9USU1FUik6IGVycj0lZFxuIiwgLXJldCk7Cit9CisKKy8qCisgKiBDb25uZWN0aW9uIGVzdGFibGlzaGVkLgorICogV2UgZ2V0IGhlcmUgZm9yIGJvdGggb3V0Z29pbmcgYW5kIGluY29taW5nIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2liX2NtX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCit7CisJY29uc3Qgc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgKmRwID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2OworCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CisJaW50IGVycjsKKworCWlmIChldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGFfbGVuKSB7CisJCWRwID0gZXZlbnQtPnBhcmFtLmNvbm4ucHJpdmF0ZV9kYXRhOworCisJCXJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwKKwkJCQlSRFNfUFJPVE9DT0woZHAtPmRwX3Byb3RvY29sX21ham9yLAorCQkJCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IpKTsKKwkJcmRzX2liX3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoZHAtPmRwX2NyZWRpdCkpOworCX0KKworCXByaW50ayhLRVJOX05PVElDRSAiUkRTL0lCOiBjb25uZWN0ZWQgdG8gJXBJNCB2ZXJzaW9uICV1LiV1JXNcbiIsCisJCQkmY29ubi0+Y19sYWRkciwKKwkJCVJEU19QUk9UT0NPTF9NQUpPUihjb25uLT5jX3ZlcnNpb24pLAorCQkJUkRTX1BST1RPQ09MX01JTk9SKGNvbm4tPmNfdmVyc2lvbiksCisJCQlpYy0+aV9mbG93Y3RsID8gIiwgZmxvdyBjb250cm9sIiA6ICIiKTsKKworCS8qIFR1bmUgUk5SIGJlaGF2aW9yICovCisJcmRzX2liX3R1bmVfcm5yKGljLCAmcXBfYXR0cik7CisKKwlxcF9hdHRyLnFwX3N0YXRlID0gSUJfUVBTX1JUUzsKKwllcnIgPSBpYl9tb2RpZnlfcXAoaWMtPmlfY21faWQtPnFwLCAmcXBfYXR0ciwgSUJfUVBfU1RBVEUpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX05PVElDRSAiaWJfbW9kaWZ5X3FwKElCX1FQX1NUQVRFLCBSVFMpOiBlcnI9JWRcbiIsIGVycik7CisKKwkvKiB1cGRhdGUgaWJfZGV2aWNlIHdpdGggdGhpcyBsb2NhbCBpcGFkZHIgJiBjb25uICovCisJcmRzX2liZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaWJfY2xpZW50KTsKKwllcnIgPSByZHNfaWJfdXBkYXRlX2lwYWRkcihyZHNfaWJkZXYsIGNvbm4tPmNfbGFkZHIpOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAicmRzX2liX3VwZGF0ZV9pcGFkZHIgZmFpbGVkICglZClcbiIsIGVycik7CisJZXJyID0gcmRzX2liX2FkZF9jb25uKHJkc19pYmRldiwgY29ubik7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fRVJSICJyZHNfaWJfYWRkX2Nvbm4gZmFpbGVkICglZClcbiIsIGVycik7CisKKwkvKiBJZiB0aGUgcGVlciBnYXZlIHVzIHRoZSBsYXN0IHBhY2tldCBpdCBzYXcsIHByb2Nlc3MgdGhpcyBhcyBpZgorCSAqIHdlIGhhZCByZWNlaXZlZCBhIHJlZ3VsYXIgQUNLLiAqLworCWlmIChkcCAmJiBkcC0+ZHBfYWNrX3NlcSkKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBiZTY0X3RvX2NwdShkcC0+ZHBfYWNrX3NlcSksIE5VTEwpOworCisJcmRzX2Nvbm5lY3RfY29tcGxldGUoY29ubik7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9jbV9maWxsX2Nvbm5fcGFyYW0oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJc3RydWN0IHJkbWFfY29ubl9wYXJhbSAqY29ubl9wYXJhbSwKKwkJCXN0cnVjdCByZHNfaWJfY29ubmVjdF9wcml2YXRlICpkcCwKKwkJCXUzMiBwcm90b2NvbF92ZXJzaW9uKQoreworCW1lbXNldChjb25uX3BhcmFtLCAwLCBzaXplb2Yoc3RydWN0IHJkbWFfY29ubl9wYXJhbSkpOworCS8qIFhYWCB0dW5lIHRoZXNlPyAqLworCWNvbm5fcGFyYW0tPnJlc3BvbmRlcl9yZXNvdXJjZXMgPSAxOworCWNvbm5fcGFyYW0tPmluaXRpYXRvcl9kZXB0aCA9IDE7CisJY29ubl9wYXJhbS0+cmV0cnlfY291bnQgPSA3OworCWNvbm5fcGFyYW0tPnJucl9yZXRyeV9jb3VudCA9IDc7CisKKwlpZiAoZHApIHsKKwkJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkJbWVtc2V0KGRwLCAwLCBzaXplb2YoKmRwKSk7CisJCWRwLT5kcF9zYWRkciA9IGNvbm4tPmNfbGFkZHI7CisJCWRwLT5kcF9kYWRkciA9IGNvbm4tPmNfZmFkZHI7CisJCWRwLT5kcF9wcm90b2NvbF9tYWpvciA9IFJEU19QUk9UT0NPTF9NQUpPUihwcm90b2NvbF92ZXJzaW9uKTsKKwkJZHAtPmRwX3Byb3RvY29sX21pbm9yID0gUkRTX1BST1RPQ09MX01JTk9SKHByb3RvY29sX3ZlcnNpb24pOworCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3JfbWFzayA9IGNwdV90b19iZTE2KFJEU19JQl9TVVBQT1JURURfUFJPVE9DT0xTKTsKKwkJZHAtPmRwX2Fja19zZXEgPSByZHNfaWJfcGlnZ3liX2FjayhpYyk7CisKKwkJLyogQWR2ZXJ0aXNlIGZsb3cgY29udHJvbCAqLworCQlpZiAoaWMtPmlfZmxvd2N0bCkgeworCQkJdW5zaWduZWQgaW50IGNyZWRpdHM7CisKKwkJCWNyZWRpdHMgPSBJQl9HRVRfUE9TVF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSk7CisJCQlkcC0+ZHBfY3JlZGl0ID0gY3B1X3RvX2JlMzIoY3JlZGl0cyk7CisJCQlhdG9taWNfc3ViKElCX1NFVF9QT1NUX0NSRURJVFMoY3JlZGl0cyksICZpYy0+aV9jcmVkaXRzKTsKKwkJfQorCisJCWNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YSA9IGRwOworCQljb25uX3BhcmFtLT5wcml2YXRlX2RhdGFfbGVuID0gc2l6ZW9mKCpkcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaWJfY3FfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQoreworCXJkc2RlYnVnKCJldmVudCAldSBkYXRhICVwXG4iLCBldmVudC0+ZXZlbnQsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCByZHNfaWJfcXBfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgaWJfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGRhdGE7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBpYyAlcCBldmVudCAldVxuIiwgY29ubiwgaWMsIGV2ZW50LT5ldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50LT5ldmVudCkgeworCWNhc2UgSUJfRVZFTlRfQ09NTV9FU1Q6CisJCXJkbWFfbm90aWZ5KGljLT5pX2NtX2lkLCBJQl9FVkVOVF9DT01NX0VTVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9pYjogdW5oYW5kbGVkIFFQIGV2ZW50ICV1ICIKKwkJICAgICAgICJvbiBjb25uZWN0aW9uIHRvICVwSTRcbiIsIGV2ZW50LT5ldmVudCwKKwkJICAgICAgICZjb25uLT5jX2ZhZGRyKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogVGhpcyBuZWVkcyB0byBiZSB2ZXJ5IGNhcmVmdWwgdG8gbm90IGxlYXZlIElTX0VSUiBwb2ludGVycyBhcm91bmQgZm9yCisgKiBjbGVhbnVwIHRvIHRyaXAgb3Zlci4KKyAqLworc3RhdGljIGludCByZHNfaWJfc2V0dXBfcXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGljLT5pX2NtX2lkLT5kZXZpY2U7CisJc3RydWN0IGliX3FwX2luaXRfYXR0ciBhdHRyOworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJaW50IHJldDsKKworCS8qIHJkc19pYl9hZGRfb25lIGNyZWF0ZXMgYSByZHNfaWJfZGV2aWNlIG9iamVjdCBwZXIgSUIgZGV2aWNlLAorCSAqIGFuZCBhbGxvY2F0ZXMgYSBwcm90ZWN0aW9uIGRvbWFpbiwgbWVtb3J5IHJhbmdlIGFuZCBGTVIgcG9vbAorCSAqIGZvciBlYWNoLiAgSWYgdGhhdCBmYWlscyBmb3IgYW55IHJlYXNvbiwgaXQgd2lsbCBub3QgcmVnaXN0ZXIKKwkgKiB0aGUgcmRzX2liZGV2IGF0IGFsbC4KKwkgKi8KKwlyZHNfaWJkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoZGV2LCAmcmRzX2liX2NsaWVudCk7CisJaWYgKHJkc19pYmRldiA9PSBOVUxMKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJEUy9JQjogTm8gY2xpZW50X2RhdGEgZm9yIGRldmljZSAlc1xuIiwKKwkJCQkJZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWlmIChyZHNfaWJkZXYtPm1heF93cnMgPCBpYy0+aV9zZW5kX3Jpbmcud19uciArIDEpCisJCXJkc19pYl9yaW5nX3Jlc2l6ZSgmaWMtPmlfc2VuZF9yaW5nLCByZHNfaWJkZXYtPm1heF93cnMgLSAxKTsKKwlpZiAocmRzX2liZGV2LT5tYXhfd3JzIDwgaWMtPmlfcmVjdl9yaW5nLndfbnIgKyAxKQorCQlyZHNfaWJfcmluZ19yZXNpemUoJmljLT5pX3JlY3ZfcmluZywgcmRzX2liZGV2LT5tYXhfd3JzIC0gMSk7CisKKwkvKiBQcm90ZWN0aW9uIGRvbWFpbiBhbmQgbWVtb3J5IHJhbmdlICovCisJaWMtPmlfcGQgPSByZHNfaWJkZXYtPnBkOworCWljLT5pX21yID0gcmRzX2liZGV2LT5tcjsKKworCWljLT5pX3NlbmRfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LCByZHNfaWJfc2VuZF9jcV9jb21wX2hhbmRsZXIsCisJCQkJICAgICByZHNfaWJfY3FfZXZlbnRfaGFuZGxlciwgY29ubiwKKwkJCQkgICAgIGljLT5pX3NlbmRfcmluZy53X25yICsgMSwgMCk7CisJaWYgKElTX0VSUihpYy0+aV9zZW5kX2NxKSkgeworCQlyZXQgPSBQVFJfRVJSKGljLT5pX3NlbmRfY3EpOworCQlpYy0+aV9zZW5kX2NxID0gTlVMTDsKKwkJcmRzZGVidWcoImliX2NyZWF0ZV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3JlY3ZfY3EgPSBpYl9jcmVhdGVfY3EoZGV2LCByZHNfaWJfcmVjdl9jcV9jb21wX2hhbmRsZXIsCisJCQkJICAgICByZHNfaWJfY3FfZXZlbnRfaGFuZGxlciwgY29ubiwKKwkJCQkgICAgIGljLT5pX3JlY3ZfcmluZy53X25yLCAwKTsKKwlpZiAoSVNfRVJSKGljLT5pX3JlY3ZfY3EpKSB7CisJCXJldCA9IFBUUl9FUlIoaWMtPmlfcmVjdl9jcSk7CisJCWljLT5pX3JlY3ZfY3EgPSBOVUxMOworCQlyZHNkZWJ1ZygiaWJfY3JlYXRlX2NxIHJlY3YgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShpYy0+aV9zZW5kX2NxLCBJQl9DUV9ORVhUX0NPTVApOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImliX3JlcV9ub3RpZnlfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGljLT5pX3JlY3ZfY3EsIElCX0NRX1NPTElDSVRFRCk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSByZWN2IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFhYWCBuZWdvdGlhdGUgbWF4IHNlbmQvcmVjdiB3aXRoIHJlbW90ZT8gKi8KKwltZW1zZXQoJmF0dHIsIDAsIHNpemVvZihhdHRyKSk7CisJYXR0ci5ldmVudF9oYW5kbGVyID0gcmRzX2liX3FwX2V2ZW50X2hhbmRsZXI7CisJYXR0ci5xcF9jb250ZXh0ID0gY29ubjsKKwkvKiArIDEgdG8gYWxsb3cgZm9yIHRoZSBzaW5nbGUgYWNrIG1lc3NhZ2UgKi8KKwlhdHRyLmNhcC5tYXhfc2VuZF93ciA9IGljLT5pX3NlbmRfcmluZy53X25yICsgMTsKKwlhdHRyLmNhcC5tYXhfcmVjdl93ciA9IGljLT5pX3JlY3ZfcmluZy53X25yICsgMTsKKwlhdHRyLmNhcC5tYXhfc2VuZF9zZ2UgPSByZHNfaWJkZXYtPm1heF9zZ2U7CisJYXR0ci5jYXAubWF4X3JlY3Zfc2dlID0gUkRTX0lCX1JFQ1ZfU0dFOworCWF0dHIuc3Ffc2lnX3R5cGUgPSBJQl9TSUdOQUxfUkVRX1dSOworCWF0dHIucXBfdHlwZSA9IElCX1FQVF9SQzsKKwlhdHRyLnNlbmRfY3EgPSBpYy0+aV9zZW5kX2NxOworCWF0dHIucmVjdl9jcSA9IGljLT5pX3JlY3ZfY3E7CisKKwkvKgorCSAqIFhYWCB0aGlzIGNhbiBmYWlsIGlmIG1heF8qX3dyIGlzIHRvbyBsYXJnZT8gIEFyZSB3ZSBzdXBwb3NlZAorCSAqIHRvIGJhY2sgb2ZmIHVudGlsIHdlIGdldCBhIHZhbHVlIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBzdXBwb3J0PworCSAqLworCXJldCA9IHJkbWFfY3JlYXRlX3FwKGljLT5pX2NtX2lkLCBpYy0+aV9wZCwgJmF0dHIpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoInJkbWFfY3JlYXRlX3FwIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3NlbmRfaGRycyA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3NlbmRfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICZpYy0+aV9zZW5kX2hkcnNfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfc2VuZF9oZHJzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCBzZW5kIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3JlY3ZfaGRycyA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3JlY3ZfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICZpYy0+aV9yZWN2X2hkcnNfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfcmVjdl9oZHJzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCByZWN2IGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX2FjayA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJICAgICAgICZpYy0+aV9hY2tfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfYWNrID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCBhY2sgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfc2VuZHMgPSB2bWFsbG9jKGljLT5pX3NlbmRfcmluZy53X25yICogc2l6ZW9mKHN0cnVjdCByZHNfaWJfc2VuZF93b3JrKSk7CisJaWYgKGljLT5pX3NlbmRzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoInNlbmQgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisJcmRzX2liX3NlbmRfaW5pdF9yaW5nKGljKTsKKworCWljLT5pX3JlY3ZzID0gdm1hbGxvYyhpYy0+aV9yZWN2X3Jpbmcud19uciAqIHNpemVvZihzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yaykpOworCWlmIChpYy0+aV9yZWN2cyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJyZWN2IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2liX3JlY3ZfaW5pdF9yaW5nKGljKTsKKwlyZHNfaWJfcmVjdl9pbml0X2FjayhpYyk7CisKKwkvKiBQb3N0IHJlY2VpdmUgYnVmZmVycyAtIGFzIGEgc2lkZSBlZmZlY3QsIHRoaXMgd2lsbCB1cGRhdGUKKwkgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi8KKwlyZHNfaWJfcmVjdl9yZWZpbGwoY29ubiwgR0ZQX0tFUk5FTCwgR0ZQX0hJR0hVU0VSLCAxKTsKKworCXJkc2RlYnVnKCJjb25uICVwIHBkICVwIG1yICVwIGNxICVwICVwXG4iLCBjb25uLCBpYy0+aV9wZCwgaWMtPmlfbXIsCisJCSBpYy0+aV9zZW5kX2NxLCBpYy0+aV9yZWN2X2NxKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgcmRzX2liX3Byb3RvY29sX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgKmRwKQoreworCXUxNiBjb21tb247CisJdTMyIHZlcnNpb24gPSAwOworCisJLyogcmRtYV9jbSBwcml2YXRlIGRhdGEgaXMgb2RkIC0gd2hlbiB0aGVyZSBpcyBhbnkgcHJpdmF0ZSBkYXRhIGluIHRoZQorCSAqIHJlcXVlc3QsIHdlIHdpbGwgYmUgZ2l2ZW4gYSBwcmV0dHkgbGFyZ2UgYnVmZmVyIHdpdGhvdXQgdGVsbGluZyB1cyB0aGUKKwkgKiBvcmlnaW5hbCBzaXplLiBUaGUgb25seSB3YXkgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSBpcyBieSBsb29raW5nIGF0CisJICogdGhlIGNvbnRlbnRzLCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4KKwkgKiBJZiB0aGUgcHJvdG9jb2wgdmVyc2lvbiBmaWVsZHMgYXJlbid0IHNldCwgdGhpcyBpcyBhIGNvbm5lY3Rpb24gYXR0ZW1wdAorCSAqIGZyb20gYW4gb2xkZXIgdmVyc2lvbi4gVGhpcyBjb3VsZCBjb3VsZCBiZSAzLjAgb3IgMi4wIC0gd2UgY2FuJ3QgdGVsbC4KKwkgKiBXZSByZWFsbHkgc2hvdWxkIGhhdmUgY2hhbmdlZCB0aGlzIGZvciBPRkVEIDEuMyA6LSggKi8KKwlpZiAoZHAtPmRwX3Byb3RvY29sX21ham9yID09IDApCisJCXJldHVybiBSRFNfUFJPVE9DT0xfM18wOworCisJY29tbW9uID0gYmUxNl90b19jcHUoZHAtPmRwX3Byb3RvY29sX21pbm9yX21hc2spICYgUkRTX0lCX1NVUFBPUlRFRF9QUk9UT0NPTFM7CisJaWYgKGRwLT5kcF9wcm90b2NvbF9tYWpvciA9PSAzICYmIGNvbW1vbikgeworCQl2ZXJzaW9uID0gUkRTX1BST1RPQ09MXzNfMDsKKwkJd2hpbGUgKChjb21tb24gPj49IDEpICE9IDApCisJCQl2ZXJzaW9uKys7CisJfSBlbHNlIGlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJSRFM6IENvbm5lY3Rpb24gZnJvbSAlcEk0IHVzaW5nICIKKwkJCSJpbmNvbXBhdGlibGUgcHJvdG9jb2wgdmVyc2lvbiAldS4ldVxuIiwKKwkJCSZkcC0+ZHBfc2FkZHIsCisJCQlkcC0+ZHBfcHJvdG9jb2xfbWFqb3IsCisJCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IpOworCX0KKwlyZXR1cm4gdmVyc2lvbjsKK30KKworaW50IHJkc19pYl9jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkJICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCkKK3sKKwlfX2JlNjQgbGd1aWQgPSBjbV9pZC0+cm91dGUucGF0aF9yZWMtPnNnaWQuZ2xvYmFsLmludGVyZmFjZV9pZDsKKwlfX2JlNjQgZmd1aWQgPSBjbV9pZC0+cm91dGUucGF0aF9yZWMtPmRnaWQuZ2xvYmFsLmludGVyZmFjZV9pZDsKKwljb25zdCBzdHJ1Y3QgcmRzX2liX2Nvbm5lY3RfcHJpdmF0ZSAqZHAgPSBldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGE7CisJc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgZHBfcmVwOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IE5VTEw7CisJc3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtOworCXUzMiB2ZXJzaW9uOworCWludCBlcnIsIGRlc3Ryb3kgPSAxOworCisJLyogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIHByb3RvY29sIHZlcnNpb24gbWF0Y2hlcyBvdXJzLiAqLworCXZlcnNpb24gPSByZHNfaWJfcHJvdG9jb2xfY29tcGF0aWJsZShkcCk7CisJaWYgKCF2ZXJzaW9uKQorCQlnb3RvIG91dDsKKworCXJkc2RlYnVnKCJzYWRkciAlcEk0IGRhZGRyICVwSTQgUkRTdiV1LiV1IGxndWlkIDB4JWxseCBmZ3VpZCAiCisJCSAiMHglbGx4XG4iLCAmZHAtPmRwX3NhZGRyLCAmZHAtPmRwX2RhZGRyLAorCQkgUkRTX1BST1RPQ09MX01BSk9SKHZlcnNpb24pLCBSRFNfUFJPVE9DT0xfTUlOT1IodmVyc2lvbiksCisJCSAodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KGxndWlkKSwKKwkJICh1bnNpZ25lZCBsb25nIGxvbmcpYmU2NF90b19jcHUoZmd1aWQpKTsKKworCWNvbm4gPSByZHNfY29ubl9jcmVhdGUoZHAtPmRwX2RhZGRyLCBkcC0+ZHBfc2FkZHIsICZyZHNfaWJfdHJhbnNwb3J0LAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmIChJU19FUlIoY29ubikpIHsKKwkJcmRzZGVidWcoInJkc19jb25uX2NyZWF0ZSBmYWlsZWQgKCVsZClcbiIsIFBUUl9FUlIoY29ubikpOworCQljb25uID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBUaGUgY29ubmVjdGlvbiByZXF1ZXN0IG1heSBvY2N1ciB3aGlsZSB0aGUKKwkgKiBwcmV2aW91cyBjb25uZWN0aW9uIGV4aXN0LCBlLmcuIGluIGNhc2Ugb2YgZmFpbG92ZXIuCisJICogQnV0IGFzIGNvbm5lY3Rpb25zIG1heSBiZSBpbml0aWF0ZWQgc2ltdWx0YW5lb3VzbHkKKwkgKiBieSBib3RoIGhvc3RzLCB3ZSBoYXZlIGEgcmFuZG9tIGJhY2tvZmYgbWVjaGFuaXNtIC0KKwkgKiBzZWUgdGhlIGNvbW1lbnQgYWJvdmUgcmRzX3F1ZXVlX3JlY29ubmVjdCgpCisJICovCisJbXV0ZXhfbG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwlpZiAoIXJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRE9XTiwgUkRTX0NPTk5fQ09OTkVDVElORykpIHsKKwkJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX1VQKSB7CisJCQlyZHNkZWJ1ZygiaW5jb21pbmcgY29ubmVjdCB3aGlsZSBjb25uZWN0aW5nXG4iKTsKKwkJCXJkc19jb25uX2Ryb3AoY29ubik7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfbGlzdGVuX2Nsb3NlZF9zdGFsZSk7CisJCX0gZWxzZQorCQlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fQ09OTkVDVElORykgeworCQkJLyogV2FpdCBhbmQgc2VlIC0gb3VyIGNvbm5lY3QgbWF5IHN0aWxsIGJlIHN1Y2NlZWRpbmcgKi8KKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl9jb25uZWN0X3JhY2VkKTsKKwkJfQorCQltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisJCWdvdG8gb3V0OworCX0KKworCWljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCXJkc19pYl9zZXRfcHJvdG9jb2woY29ubiwgdmVyc2lvbik7CisJcmRzX2liX3NldF9mbG93X2NvbnRyb2woY29ubiwgYmUzMl90b19jcHUoZHAtPmRwX2NyZWRpdCkpOworCisJLyogSWYgdGhlIHBlZXIgZ2F2ZSB1cyB0aGUgbGFzdCBwYWNrZXQgaXQgc2F3LCBwcm9jZXNzIHRoaXMgYXMgaWYKKwkgKiB3ZSBoYWQgcmVjZWl2ZWQgYSByZWd1bGFyIEFDSy4gKi8KKwlpZiAoZHAtPmRwX2Fja19zZXEpCisJCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgYmU2NF90b19jcHUoZHAtPmRwX2Fja19zZXEpLCBOVUxMKTsKKworCUJVR19PTihjbV9pZC0+Y29udGV4dCk7CisJQlVHX09OKGljLT5pX2NtX2lkKTsKKworCWljLT5pX2NtX2lkID0gY21faWQ7CisJY21faWQtPmNvbnRleHQgPSBjb25uOworCisJLyogV2UgZ290IGhhbGZ3YXkgdGhyb3VnaCBzZXR0aW5nIHVwIHRoZSBpYl9jb25uZWN0aW9uLCBpZiB3ZQorCSAqIGZhaWwgbm93LCB3ZSBoYXZlIHRvIHRha2UgdGhlIGxvbmcgcm91dGUgb3V0IG9mIHRoaXMgbWVzcy4gKi8KKwlkZXN0cm95ID0gMDsKKworCWVyciA9IHJkc19pYl9zZXR1cF9xcChjb25uKTsKKwlpZiAoZXJyKSB7CisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJyZHNfaWJfc2V0dXBfcXAgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pYl9jbV9maWxsX2Nvbm5fcGFyYW0oY29ubiwgJmNvbm5fcGFyYW0sICZkcF9yZXAsIHZlcnNpb24pOworCisJLyogcmRtYV9hY2NlcHQoKSBjYWxscyByZG1hX3JlamVjdCgpIGludGVybmFsbHkgaWYgaXQgZmFpbHMgKi8KKwllcnIgPSByZG1hX2FjY2VwdChjbV9pZCwgJmNvbm5fcGFyYW0pOworCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwlpZiAoZXJyKSB7CisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJyZG1hX2FjY2VwdCBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0dXJuIDA7CisKK291dDoKKwlyZG1hX3JlamVjdChjbV9pZCwgTlVMTCwgMCk7CisJcmV0dXJuIGRlc3Ryb3k7Cit9CisKKworaW50IHJkc19pYl9jbV9pbml0aWF0ZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjbV9pZC0+Y29udGV4dDsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtIGNvbm5fcGFyYW07CisJc3RydWN0IHJkc19pYl9jb25uZWN0X3ByaXZhdGUgZHA7CisJaW50IHJldDsKKworCS8qIElmIHRoZSBwZWVyIGRvZXNuJ3QgZG8gcHJvdG9jb2wgbmVnb3RpYXRpb24sIHdlIG11c3QKKwkgKiBkZWZhdWx0IHRvIFJEU3YzLjAgKi8KKwlyZHNfaWJfc2V0X3Byb3RvY29sKGNvbm4sIFJEU19QUk9UT0NPTF8zXzApOworCWljLT5pX2Zsb3djdGwgPSByZHNfaWJfc3lzY3RsX2Zsb3dfY29udHJvbDsJLyogYWR2ZXJ0aXNlIGZsb3cgY29udHJvbCAqLworCisJcmV0ID0gcmRzX2liX3NldHVwX3FwKGNvbm4pOworCWlmIChyZXQpIHsKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJkc19pYl9zZXR1cF9xcCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2liX2NtX2ZpbGxfY29ubl9wYXJhbShjb25uLCAmY29ubl9wYXJhbSwgJmRwLCBSRFNfUFJPVE9DT0xfVkVSU0lPTik7CisKKwlyZXQgPSByZG1hX2Nvbm5lY3QoY21faWQsICZjb25uX3BhcmFtKTsKKwlpZiAocmV0KQorCQlyZHNfaWJfY29ubl9lcnJvcihjb25uLCAicmRtYV9jb25uZWN0IGZhaWxlZCAoJWQpXG4iLCByZXQpOworCitvdXQ6CisJLyogQmV3YXJlIC0gcmV0dXJuaW5nIG5vbi16ZXJvIHRlbGxzIHRoZSByZG1hX2NtIHRvIGRlc3Ryb3kKKwkgKiB0aGUgY21faWQuIFdlIHNob3VsZCBjZXJ0YWlubHkgbm90IGRvIGl0IGFzIGxvbmcgYXMgd2Ugc3RpbGwKKwkgKiAib3duIiB0aGUgY21faWQuICovCisJaWYgKHJldCkgeworCQlpZiAoaWMtPmlfY21faWQgPT0gY21faWQpCisJCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRzX2liX2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHNvY2thZGRyX2luIHNyYywgZGVzdDsKKwlpbnQgcmV0OworCisJLyogWFhYIEkgd29uZGVyIHdoYXQgYWZmZWN0IHRoZSBwb3J0IHNwYWNlIGhhcyAqLworCS8qIGRlbGVnYXRlIGNtIGV2ZW50IGhhbmRsZXIgdG8gcmRtYV90cmFuc3BvcnQgKi8KKwlpYy0+aV9jbV9pZCA9IHJkbWFfY3JlYXRlX2lkKHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIsIGNvbm4sCisJCQkJICAgICBSRE1BX1BTX1RDUCk7CisJaWYgKElTX0VSUihpYy0+aV9jbV9pZCkpIHsKKwkJcmV0ID0gUFRSX0VSUihpYy0+aV9jbV9pZCk7CisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJcmRzZGVidWcoInJkbWFfY3JlYXRlX2lkKCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzZGVidWcoImNyZWF0ZWQgY20gaWQgJXAgZm9yIGNvbm4gJXBcbiIsIGljLT5pX2NtX2lkLCBjb25uKTsKKworCXNyYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzcmMuc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWNvbm4tPmNfbGFkZHI7CisJc3JjLnNpbl9wb3J0ID0gKF9fZm9yY2UgdTE2KWh0b25zKDApOworCisJZGVzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlkZXN0LnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMiljb25uLT5jX2ZhZGRyOworCWRlc3Quc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoUkRTX1BPUlQpOworCisJcmV0ID0gcmRtYV9yZXNvbHZlX2FkZHIoaWMtPmlfY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAorCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikmZGVzdCwKKwkJCQlSRFNfUkRNQV9SRVNPTFZFX1RJTUVPVVRfTVMpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImFkZHIgcmVzb2x2ZSBmYWlsZWQgZm9yIGNtIGlkICVwOiAlZFxuIiwgaWMtPmlfY21faWQsCisJCQkgcmV0KTsKKwkJcmRtYV9kZXN0cm95X2lkKGljLT5pX2NtX2lkKTsKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIHNvIGNhcmVmdWwgYWJvdXQgb25seSBjbGVhbmluZyB1cCByZXNvdXJjZXMgdGhhdCB3ZXJlIGJ1aWx0IHVwCisgKiBzbyB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgYXQgYW55IHBvaW50IGR1cmluZyBzdGFydHVwLiAgSW4gZmFjdCBpdAorICogY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiBjb25uZWN0aW9uLgorICovCit2b2lkIHJkc19pYl9jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlpbnQgZXJyID0gMDsKKworCXJkc2RlYnVnKCJjbSAlcCBwZCAlcCBjcSAlcCAlcCBxcCAlcFxuIiwgaWMtPmlfY21faWQsCisJCSBpYy0+aV9wZCwgaWMtPmlfc2VuZF9jcSwgaWMtPmlfcmVjdl9jcSwKKwkJIGljLT5pX2NtX2lkID8gaWMtPmlfY21faWQtPnFwIDogTlVMTCk7CisKKwlpZiAoaWMtPmlfY21faWQpIHsKKwkJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKworCQlyZHNkZWJ1ZygiZGlzY29ubmVjdGluZyBjbSAlcFxuIiwgaWMtPmlfY21faWQpOworCQllcnIgPSByZG1hX2Rpc2Nvbm5lY3QoaWMtPmlfY21faWQpOworCQlpZiAoZXJyKSB7CisJCQkvKiBBY3R1YWxseSB0aGlzIG1heSBoYXBwZW4gcXVpdGUgZnJlcXVlbnRseSwgd2hlbgorCQkJICogYW4gb3V0Z29pbmcgY29ubmVjdCByYWNlZCB3aXRoIGFuIGluY29taW5nIGNvbm5lY3QuCisJCQkgKi8KKwkJCXJkc2RlYnVnKCJmYWlsZWQgdG8gZGlzY29ubmVjdCwgY206ICVwIGVyciAlZFxuIiwKKwkJCQlpYy0+aV9jbV9pZCwgZXJyKTsKKwkJfQorCisJCXdhaXRfZXZlbnQocmRzX2liX3JpbmdfZW1wdHlfd2FpdCwKKwkJCXJkc19pYl9yaW5nX2VtcHR5KCZpYy0+aV9zZW5kX3JpbmcpICYmCisJCQlyZHNfaWJfcmluZ19lbXB0eSgmaWMtPmlfcmVjdl9yaW5nKSk7CisKKwkJaWYgKGljLT5pX3NlbmRfaGRycykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfc2VuZF9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgaWMtPmlfc2VuZF9oZHJzLAorCQkJCQkgICBpYy0+aV9zZW5kX2hkcnNfZG1hKTsKKworCQlpZiAoaWMtPmlfcmVjdl9oZHJzKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9yZWN2X3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICBpYy0+aV9yZWN2X2hkcnMsCisJCQkJCSAgIGljLT5pX3JlY3ZfaGRyc19kbWEpOworCisJCWlmIChpYy0+aV9hY2spCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICAgaWMtPmlfYWNrLCBpYy0+aV9hY2tfZG1hKTsKKworCQlpZiAoaWMtPmlfc2VuZHMpCisJCQlyZHNfaWJfc2VuZF9jbGVhcl9yaW5nKGljKTsKKwkJaWYgKGljLT5pX3JlY3ZzKQorCQkJcmRzX2liX3JlY3ZfY2xlYXJfcmluZyhpYyk7CisKKwkJaWYgKGljLT5pX2NtX2lkLT5xcCkKKwkJCXJkbWFfZGVzdHJveV9xcChpYy0+aV9jbV9pZCk7CisJCWlmIChpYy0+aV9zZW5kX2NxKQorCQkJaWJfZGVzdHJveV9jcShpYy0+aV9zZW5kX2NxKTsKKwkJaWYgKGljLT5pX3JlY3ZfY3EpCisJCQlpYl9kZXN0cm95X2NxKGljLT5pX3JlY3ZfY3EpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCisJCS8qCisJCSAqIE1vdmUgY29ubmVjdGlvbiBiYWNrIHRvIHRoZSBub2RldiBsaXN0LgorCQkgKi8KKwkJaWYgKGljLT5yZHNfaWJkZXYpIHsKKworCQkJc3Bpbl9sb2NrX2lycSgmaWMtPnJkc19pYmRldi0+c3BpbmxvY2spOworCQkJQlVHX09OKGxpc3RfZW1wdHkoJmljLT5pYl9ub2RlKSk7CisJCQlsaXN0X2RlbCgmaWMtPmliX25vZGUpOworCQkJc3Bpbl91bmxvY2tfaXJxKCZpYy0+cmRzX2liZGV2LT5zcGlubG9jayk7CisKKwkJCXNwaW5fbG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCQkJbGlzdF9hZGRfdGFpbCgmaWMtPmliX25vZGUsICZpYl9ub2Rldl9jb25ucyk7CisJCQlzcGluX3VubG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCQkJaWMtPnJkc19pYmRldiA9IE5VTEw7CisJCX0KKworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJCWljLT5pX3BkID0gTlVMTDsKKwkJaWMtPmlfbXIgPSBOVUxMOworCQlpYy0+aV9zZW5kX2NxID0gTlVMTDsKKwkJaWMtPmlfcmVjdl9jcSA9IE5VTEw7CisJCWljLT5pX3NlbmRfaGRycyA9IE5VTEw7CisJCWljLT5pX3JlY3ZfaGRycyA9IE5VTEw7CisJCWljLT5pX2FjayA9IE5VTEw7CisJfQorCUJVR19PTihpYy0+cmRzX2liZGV2KTsKKworCS8qIENsZWFyIHBlbmRpbmcgdHJhbnNtaXQgKi8KKwlpZiAoaWMtPmlfcm0pIHsKKwkJcmRzX21lc3NhZ2VfcHV0KGljLT5pX3JtKTsKKwkJaWMtPmlfcm0gPSBOVUxMOworCX0KKworCS8qIENsZWFyIHRoZSBBQ0sgc3RhdGUgKi8KKwljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJcmRzX2liX3NldF82NGJpdCgmaWMtPmlfYWNrX25leHQsIDApOworCWljLT5pX2Fja19yZWN2ID0gMDsKKworCS8qIENsZWFyIGZsb3cgY29udHJvbCBzdGF0ZSAqLworCWljLT5pX2Zsb3djdGwgPSAwOworCWF0b21pY19zZXQoJmljLT5pX2NyZWRpdHMsIDApOworCisJcmRzX2liX3JpbmdfaW5pdCgmaWMtPmlfc2VuZF9yaW5nLCByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyKTsKKwlyZHNfaWJfcmluZ19pbml0KCZpYy0+aV9yZWN2X3JpbmcsIHJkc19pYl9zeXNjdGxfbWF4X3JlY3Zfd3IpOworCisJaWYgKGljLT5pX2liaW5jKSB7CisJCXJkc19pbmNfcHV0KCZpYy0+aV9pYmluYy0+aWlfaW5jKTsKKwkJaWMtPmlfaWJpbmMgPSBOVUxMOworCX0KKworCXZmcmVlKGljLT5pX3NlbmRzKTsKKwlpYy0+aV9zZW5kcyA9IE5VTEw7CisJdmZyZWUoaWMtPmlfcmVjdnMpOworCWljLT5pX3JlY3ZzID0gTlVMTDsKK30KKworaW50IHJkc19pYl9jb25uX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFhYWCB0b28gbGF6eT8gKi8KKwlpYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiksIEdGUF9LRVJORUwpOworCWlmIChpYyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCUlOSVRfTElTVF9IRUFEKCZpYy0+aWJfbm9kZSk7CisJbXV0ZXhfaW5pdCgmaWMtPmlfcmVjdl9tdXRleCk7CisKKwkvKgorCSAqIHJkc19pYl9jb25uX3NodXRkb3duKCkgd2FpdHMgZm9yIHRoZXNlIHRvIGJlIGVtcHRpZWQgc28gdGhleQorCSAqIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0IGNhbiBiZSBjYWxsZWQuCisJICovCisJcmRzX2liX3JpbmdfaW5pdCgmaWMtPmlfc2VuZF9yaW5nLCByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyKTsKKwlyZHNfaWJfcmluZ19pbml0KCZpYy0+aV9yZWN2X3JpbmcsIHJkc19pYl9zeXNjdGxfbWF4X3JlY3Zfd3IpOworCisJaWMtPmNvbm4gPSBjb25uOworCWNvbm4tPmNfdHJhbnNwb3J0X2RhdGEgPSBpYzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpYl9ub2Rldl9jb25uc19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmaWMtPmliX25vZGUsICZpYl9ub2Rldl9jb25ucyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWJfbm9kZXZfY29ubnNfbG9jaywgZmxhZ3MpOworCisKKwlyZHNkZWJ1ZygiY29ubiAlcCBjb25uIGljICVwXG4iLCBjb25uLCBjb25uLT5jX3RyYW5zcG9ydF9kYXRhKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCByZHNfaWJfY29ubl9mcmVlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gYXJnOworCXJkc2RlYnVnKCJpYyAlcFxuIiwgaWMpOworCWxpc3RfZGVsKCZpYy0+aWJfbm9kZSk7CisJa2ZyZWUoaWMpOworfQorCisKKy8qCisgKiBBbiBlcnJvciBvY2N1cnJlZCBvbiB0aGUgY29ubmVjdGlvbgorICovCit2b2lkCitfX3Jkc19pYl9jb25uX2Vycm9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXJkc19jb25uX2Ryb3AoY29ubik7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2cHJpbnRrKGZtdCwgYXApOworCXZhX2VuZChhcCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3JkbWEuYyBiL25ldC9yZHMvaWJfcmRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YTYyODkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2liX3JkbWEuYwpAQCAtMCwwICsxLDY0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisjaW5jbHVkZSAiaWIuaCIKKworCisvKgorICogVGhpcyBpcyBzdG9yZWQgYXMgbXItPnJfdHJhbnNfcHJpdmF0ZS4KKyAqLworc3RydWN0IHJkc19pYl9tciB7CisJc3RydWN0IHJkc19pYl9kZXZpY2UJKmRldmljZTsKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wJKnBvb2w7CisJc3RydWN0IGliX2ZtcgkJKmZtcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJdW5zaWduZWQgaW50CQlyZW1hcF9jb3VudDsKKworCXN0cnVjdCBzY2F0dGVybGlzdAkqc2c7CisJdW5zaWduZWQgaW50CQlzZ19sZW47CisJdTY0CQkJKmRtYTsKKwlpbnQJCQlzZ19kbWFfbGVuOworfTsKKworLyoKKyAqIE91ciBvd24gbGl0dGxlIEZNUiBwb29sCisgKi8KK3N0cnVjdCByZHNfaWJfbXJfcG9vbCB7CisJc3RydWN0IG11dGV4CQlmbHVzaF9sb2NrOwkJLyogc2VyaWFsaXplIGZtciBpbnZhbGlkYXRlICovCisJc3RydWN0IHdvcmtfc3RydWN0CWZsdXNoX3dvcmtlcjsJCS8qIGZsdXNoIHdvcmtlciAqLworCisJc3BpbmxvY2tfdAkJbGlzdF9sb2NrOwkJLyogcHJvdGVjdCB2YXJpYWJsZXMgYmVsb3cgKi8KKwlhdG9taWNfdAkJaXRlbV9jb3VudDsJCS8qIHRvdGFsICMgb2YgTVJzICovCisJYXRvbWljX3QJCWRpcnR5X2NvdW50OwkJLyogIyBkaXJ0eSBvZiBNUnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWRyb3BfbGlzdDsJCS8qIE1ScyB0aGF0IGhhdmUgcmVhY2hlZCB0aGVpciBtYXhfbWFwcyBsaW1pdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV9saXN0OwkJLyogdW51c2VkIE1ScyAqLworCXN0cnVjdCBsaXN0X2hlYWQJY2xlYW5fbGlzdDsJCS8qIHVudXNlZCAmIHVuYW1hcHBlZCBNUnMgKi8KKwlhdG9taWNfdAkJZnJlZV9waW5uZWQ7CQkvKiBtZW1vcnkgcGlubmVkIGJ5IGZyZWUgTVJzICovCisJdW5zaWduZWQgbG9uZwkJbWF4X2l0ZW1zOworCXVuc2lnbmVkIGxvbmcJCW1heF9pdGVtc19zb2Z0OworCXVuc2lnbmVkIGxvbmcJCW1heF9mcmVlX3Bpbm5lZDsKKwlzdHJ1Y3QgaWJfZm1yX2F0dHIJZm1yX2F0dHI7Cit9OworCitzdGF0aWMgaW50IHJkc19pYl9mbHVzaF9tcl9wb29sKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCwgaW50IGZyZWVfYWxsKTsKK3N0YXRpYyB2b2lkIHJkc19pYl90ZWFyZG93bl9tcihzdHJ1Y3QgcmRzX2liX21yICppYm1yKTsKK3N0YXRpYyB2b2lkIHJkc19pYl9tcl9wb29sX2ZsdXNoX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCitzdGF0aWMgc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYl9nZXRfZGV2aWNlKF9fYmUzMiBpcGFkZHIpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3QgcmRzX2liX2lwYWRkciAqaV9pcGFkZHI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkc19pYmRldiwgJnJkc19pYl9kZXZpY2VzLCBsaXN0KSB7CisJCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlfaXBhZGRyLCAmcmRzX2liZGV2LT5pcGFkZHJfbGlzdCwgbGlzdCkgeworCQkJaWYgKGlfaXBhZGRyLT5pcGFkZHIgPT0gaXBhZGRyKSB7CisJCQkJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKKwkJCQlyZXR1cm4gcmRzX2liZGV2OworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2liX2FkZF9pcGFkZHIoc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgX19iZTMyIGlwYWRkcikKK3sKKwlzdHJ1Y3QgcmRzX2liX2lwYWRkciAqaV9pcGFkZHI7CisKKwlpX2lwYWRkciA9IGttYWxsb2Moc2l6ZW9mICppX2lwYWRkciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpX2lwYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpX2lwYWRkci0+aXBhZGRyID0gaXBhZGRyOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmaV9pcGFkZHItPmxpc3QsICZyZHNfaWJkZXYtPmlwYWRkcl9saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9yZW1vdmVfaXBhZGRyKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIF9fYmUzMiBpcGFkZHIpCit7CisJc3RydWN0IHJkc19pYl9pcGFkZHIgKmlfaXBhZGRyLCAqbmV4dDsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpX2lwYWRkciwgbmV4dCwgJnJkc19pYmRldi0+aXBhZGRyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGlfaXBhZGRyLT5pcGFkZHIgPT0gaXBhZGRyKSB7CisJCQlsaXN0X2RlbCgmaV9pcGFkZHItPmxpc3QpOworCQkJa2ZyZWUoaV9pcGFkZHIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaWJkZXYtPnNwaW5sb2NrKTsKK30KKworaW50IHJkc19pYl91cGRhdGVfaXBhZGRyKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIF9fYmUzMiBpcGFkZHIpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldl9vbGQ7CisKKwlyZHNfaWJkZXZfb2xkID0gcmRzX2liX2dldF9kZXZpY2UoaXBhZGRyKTsKKwlpZiAocmRzX2liZGV2X29sZCkKKwkJcmRzX2liX3JlbW92ZV9pcGFkZHIocmRzX2liZGV2X29sZCwgaXBhZGRyKTsKKworCXJldHVybiByZHNfaWJfYWRkX2lwYWRkcihyZHNfaWJkZXYsIGlwYWRkcik7Cit9CisKK2ludCByZHNfaWJfYWRkX2Nvbm4oc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJLyogY29ubiB3YXMgcHJldmlvdXNseSBvbiB0aGUgbm9kZXZfY29ubnNfbGlzdCAqLworCXNwaW5fbG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCUJVR19PTihsaXN0X2VtcHR5KCZpYl9ub2Rldl9jb25ucykpOworCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aWJfbm9kZSkpOworCWxpc3RfZGVsKCZpYy0+aWJfbm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmljLT5pYl9ub2RlLCAmcmRzX2liZGV2LT5jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisKKwlpYy0+cmRzX2liZGV2ID0gcmRzX2liZGV2OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2liX3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsICpfaWM7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KKwlzcGluX2xvY2tfaXJxKCZpYl9ub2Rldl9jb25uc19sb2NrKTsKKwlsaXN0X3NwbGljZSgmaWJfbm9kZXZfY29ubnMsICZ0bXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmliX25vZGV2X2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnEoJmliX25vZGV2X2Nvbm5zX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGljLCBfaWMsICZ0bXBfbGlzdCwgaWJfbm9kZSkgeworCQlpZiAoaWMtPmNvbm4tPmNfcGFzc2l2ZSkKKwkJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4tPmNfcGFzc2l2ZSk7CisJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4pOworCX0KK30KKwordm9pZCByZHNfaWJfcmVtb3ZlX2Nvbm5zKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYywgKl9pYzsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLworCXNwaW5fbG9ja19pcnEoJnJkc19pYmRldi0+c3BpbmxvY2spOworCWxpc3Rfc3BsaWNlKCZyZHNfaWJkZXYtPmNvbm5fbGlzdCwgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2liZGV2LT5jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2liZGV2LT5zcGlubG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpYl9ub2RlKSB7CisJCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQorCQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubik7CisJfQorfQorCitzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnJkc19pYl9jcmVhdGVfbXJfcG9vbChzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2KQoreworCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbDsKKworCXBvb2wgPSBremFsbG9jKHNpemVvZigqcG9vbCksIEdGUF9LRVJORUwpOworCWlmICghcG9vbCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlJTklUX0xJU1RfSEVBRCgmcG9vbC0+ZnJlZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcG9vbC0+ZHJvcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcG9vbC0+Y2xlYW5fbGlzdCk7CisJbXV0ZXhfaW5pdCgmcG9vbC0+Zmx1c2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnBvb2wtPmxpc3RfbG9jayk7CisJSU5JVF9XT1JLKCZwb29sLT5mbHVzaF93b3JrZXIsIHJkc19pYl9tcl9wb29sX2ZsdXNoX3dvcmtlcik7CisKKwlwb29sLT5mbXJfYXR0ci5tYXhfcGFnZXMgPSBmbXJfbWVzc2FnZV9zaXplOworCXBvb2wtPmZtcl9hdHRyLm1heF9tYXBzID0gcmRzX2liZGV2LT5mbXJfbWF4X3JlbWFwczsKKwlwb29sLT5mbXJfYXR0ci5wYWdlX3NoaWZ0ID0gcmRzX2liZGV2LT5mbXJfcGFnZV9zaGlmdDsKKwlwb29sLT5tYXhfZnJlZV9waW5uZWQgPSByZHNfaWJkZXYtPm1heF9mbXJzICogZm1yX21lc3NhZ2Vfc2l6ZSAvIDQ7CisKKwkvKiBXZSBuZXZlciBhbGxvdyBtb3JlIHRoYW4gbWF4X2l0ZW1zIE1ScyB0byBiZSBhbGxvY2F0ZWQuCisJICogV2hlbiB3ZSBleGNlZWQgbW9yZSB0aGFuIG1heF9pdGVtc19zb2Z0LCB3ZSBzdGFydCBmcmVlaW5nCisJICogaXRlbXMgbW9yZSBhZ2dyZXNzaXZlbHkuCisJICogTWFrZSBzdXJlIHRoYXQgbWF4X2l0ZW1zID4gbWF4X2l0ZW1zX3NvZnQgPiBtYXhfaXRlbXMgLyAyCisJICovCisJcG9vbC0+bWF4X2l0ZW1zX3NvZnQgPSByZHNfaWJkZXYtPm1heF9mbXJzICogMyAvIDQ7CisJcG9vbC0+bWF4X2l0ZW1zID0gcmRzX2liZGV2LT5tYXhfZm1yczsKKworCXJldHVybiBwb29sOworfQorCit2b2lkIHJkc19pYl9nZXRfbXJfaW5mbyhzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2LCBzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uICppaW5mbykKK3sKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSByZHNfaWJkZXYtPm1yX3Bvb2w7CisKKwlpaW5mby0+cmRtYV9tcl9tYXggPSBwb29sLT5tYXhfaXRlbXM7CisJaWluZm8tPnJkbWFfbXJfc2l6ZSA9IHBvb2wtPmZtcl9hdHRyLm1heF9wYWdlczsKK30KKwordm9pZCByZHNfaWJfZGVzdHJveV9tcl9wb29sKHN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCkKK3sKKwlmbHVzaF93b3JrcXVldWUocmRzX3dxKTsKKwlyZHNfaWJfZmx1c2hfbXJfcG9vbChwb29sLCAxKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnBvb2wtPml0ZW1fY291bnQpKTsKKwlCVUdfT04oYXRvbWljX3JlYWQoJnBvb2wtPmZyZWVfcGlubmVkKSk7CisJa2ZyZWUocG9vbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJkc19pYl9tciAqcmRzX2liX3JldXNlX2ZtcihzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wpCit7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnBvb2wtPmNsZWFuX2xpc3QpKSB7CisJCWlibXIgPSBsaXN0X2VudHJ5KHBvb2wtPmNsZWFuX2xpc3QubmV4dCwgc3RydWN0IHJkc19pYl9tciwgbGlzdCk7CisJCWxpc3RfZGVsX2luaXQoJmlibXItPmxpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBpYm1yOworfQorCitzdGF0aWMgc3RydWN0IHJkc19pYl9tciAqcmRzX2liX2FsbG9jX2ZtcihzdHJ1Y3QgcmRzX2liX2RldmljZSAqcmRzX2liZGV2KQoreworCXN0cnVjdCByZHNfaWJfbXJfcG9vbCAqcG9vbCA9IHJkc19pYmRldi0+bXJfcG9vbDsKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yID0gTlVMTDsKKwlpbnQgZXJyID0gMCwgaXRlciA9IDA7CisKKwl3aGlsZSAoMSkgeworCQlpYm1yID0gcmRzX2liX3JldXNlX2Ztcihwb29sKTsKKwkJaWYgKGlibXIpCisJCQlyZXR1cm4gaWJtcjsKKworCQkvKiBObyBjbGVhbiBNUnMgLSBub3cgd2UgaGF2ZSB0aGUgY2hvaWNlIG9mIGVpdGhlcgorCQkgKiBhbGxvY2F0aW5nIGEgZnJlc2ggTVIgdXAgdG8gdGhlIGxpbWl0IGltcG9zZWQgYnkgdGhlCisJCSAqIGRyaXZlciwgb3IgZmx1c2ggYW55IGRpcnR5IHVudXNlZCBNUnMuCisJCSAqIFdlIHRyeSB0byBhdm9pZCBzdGFsbGluZyBpbiB0aGUgc2VuZCBwYXRoIGlmIHBvc3NpYmxlLAorCQkgKiBzbyB3ZSBhbGxvY2F0ZSBhcyBsb25nIGFzIHdlJ3JlIGFsbG93ZWQgdG8uCisJCSAqCisJCSAqIFdlJ3JlIGZ1c3N5IHdpdGggZW5mb3JjaW5nIHRoZSBGTVIgbGltaXQsIHRob3VnaC4gSWYgdGhlIGRyaXZlcgorCQkgKiB0ZWxscyB1cyB3ZSBjYW4ndCB1c2UgbW9yZSB0aGFuIE4gZm1ycywgd2Ugc2hvdWxkbid0IHN0YXJ0CisJCSAqIGFyZ3Vpbmcgd2l0aCBpdCAqLworCQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBvb2wtPml0ZW1fY291bnQpIDw9IHBvb2wtPm1heF9pdGVtcykKKwkJCWJyZWFrOworCisJCWF0b21pY19kZWMoJnBvb2wtPml0ZW1fY291bnQpOworCisJCWlmICgrK2l0ZXIgPiAyKSB7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl9wb29sX2RlcGxldGVkKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FQUdBSU4pOworCQl9CisKKwkJLyogV2UgZG8gaGF2ZSBzb21lIGVtcHR5IE1Scy4gRmx1c2ggdGhlbSBvdXQuICovCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yZG1hX21yX3Bvb2xfd2FpdCk7CisJCXJkc19pYl9mbHVzaF9tcl9wb29sKHBvb2wsIDApOworCX0KKworCWlibXIgPSBremFsbG9jKHNpemVvZigqaWJtciksIEdGUF9LRVJORUwpOworCWlmICghaWJtcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9ub19jaWdhcjsKKwl9CisKKwlpYm1yLT5mbXIgPSBpYl9hbGxvY19mbXIocmRzX2liZGV2LT5wZCwKKwkJCShJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgfAorCQkJIElCX0FDQ0VTU19SRU1PVEVfUkVBRCB8CisJCQkgSUJfQUNDRVNTX1JFTU9URV9XUklURSksCisJCQkmcG9vbC0+Zm1yX2F0dHIpOworCWlmIChJU19FUlIoaWJtci0+Zm1yKSkgeworCQllcnIgPSBQVFJfRVJSKGlibXItPmZtcik7CisJCWlibXItPmZtciA9IE5VTEw7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogaWJfYWxsb2NfZm1yIGZhaWxlZCAoZXJyPSVkKVxuIiwgZXJyKTsKKwkJZ290byBvdXRfbm9fY2lnYXI7CisJfQorCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfYWxsb2MpOworCXJldHVybiBpYm1yOworCitvdXRfbm9fY2lnYXI6CisJaWYgKGlibXIpIHsKKwkJaWYgKGlibXItPmZtcikKKwkJCWliX2RlYWxsb2NfZm1yKGlibXItPmZtcik7CisJCWtmcmVlKGlibXIpOworCX0KKwlhdG9taWNfZGVjKCZwb29sLT5pdGVtX2NvdW50KTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCitzdGF0aWMgaW50IHJkc19pYl9tYXBfZm1yKHN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXYsIHN0cnVjdCByZHNfaWJfbXIgKmlibXIsCisJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuZW50cykKK3sKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSByZHNfaWJkZXYtPmRldjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQgPSBzZzsKKwl1NjQgaW9fYWRkciA9IDA7CisJdTY0ICpkbWFfcGFnZXM7CisJdTMyIGxlbjsKKwlpbnQgcGFnZV9jbnQsIHNnX2RtYV9sZW47CisJaW50IGksIGo7CisJaW50IHJldDsKKworCXNnX2RtYV9sZW4gPSBpYl9kbWFfbWFwX3NnKGRldiwgc2csIG5lbnRzLAorCQkJCSBETUFfQklESVJFQ1RJT05BTCk7CisJaWYgKHVubGlrZWx5KCFzZ19kbWFfbGVuKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IGRtYV9tYXBfc2cgZmFpbGVkIVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJbGVuID0gMDsKKwlwYWdlX2NudCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCXVuc2lnbmVkIGludCBkbWFfbGVuID0gaWJfc2dfZG1hX2xlbihkZXYsICZzY2F0W2ldKTsKKwkJdTY0IGRtYV9hZGRyID0gaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2NhdFtpXSk7CisKKwkJaWYgKGRtYV9hZGRyICYgfnJkc19pYmRldi0+Zm1yX3BhZ2VfbWFzaykgeworCQkJaWYgKGkgPiAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJZWxzZQorCQkJCSsrcGFnZV9jbnQ7CisJCX0KKwkJaWYgKChkbWFfYWRkciArIGRtYV9sZW4pICYgfnJkc19pYmRldi0+Zm1yX3BhZ2VfbWFzaykgeworCQkJaWYgKGkgPCBzZ19kbWFfbGVuIC0gMSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWVsc2UKKwkJCQkrK3BhZ2VfY250OworCQl9CisKKwkJbGVuICs9IGRtYV9sZW47CisJfQorCisJcGFnZV9jbnQgKz0gbGVuID4+IHJkc19pYmRldi0+Zm1yX3BhZ2Vfc2hpZnQ7CisJaWYgKHBhZ2VfY250ID4gZm1yX21lc3NhZ2Vfc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkbWFfcGFnZXMgPSBrbWFsbG9jKHNpemVvZih1NjQpICogcGFnZV9jbnQsIEdGUF9BVE9NSUMpOworCWlmICghZG1hX3BhZ2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhZ2VfY250ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCXVuc2lnbmVkIGludCBkbWFfbGVuID0gaWJfc2dfZG1hX2xlbihkZXYsICZzY2F0W2ldKTsKKwkJdTY0IGRtYV9hZGRyID0gaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2NhdFtpXSk7CisKKwkJZm9yIChqID0gMDsgaiA8IGRtYV9sZW47IGogKz0gcmRzX2liZGV2LT5mbXJfcGFnZV9zaXplKQorCQkJZG1hX3BhZ2VzW3BhZ2VfY250KytdID0KKwkJCQkoZG1hX2FkZHIgJiByZHNfaWJkZXYtPmZtcl9wYWdlX21hc2spICsgajsKKwl9CisKKwlyZXQgPSBpYl9tYXBfcGh5c19mbXIoaWJtci0+Zm1yLAorCQkJCSAgIGRtYV9wYWdlcywgcGFnZV9jbnQsIGlvX2FkZHIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogU3VjY2VzcyAtIHdlIHN1Y2Nlc3NmdWxseSByZW1hcHBlZCB0aGUgTVIsIHNvIHdlIGNhbgorCSAqIHNhZmVseSB0ZWFyIGRvd24gdGhlIG9sZCBtYXBwaW5nLiAqLworCXJkc19pYl90ZWFyZG93bl9tcihpYm1yKTsKKworCWlibXItPnNnID0gc2NhdDsKKwlpYm1yLT5zZ19sZW4gPSBuZW50czsKKwlpYm1yLT5zZ19kbWFfbGVuID0gc2dfZG1hX2xlbjsKKwlpYm1yLT5yZW1hcF9jb3VudCsrOworCisJcmRzX2liX3N0YXRzX2luYyhzX2liX3JkbWFfbXJfdXNlZCk7CisJcmV0ID0gMDsKKworb3V0OgorCWtmcmVlKGRtYV9wYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pYl9zeW5jX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciA9IHRyYW5zX3ByaXZhdGU7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiA9IGlibXItPmRldmljZTsKKworCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCWliX2RtYV9zeW5jX3NnX2Zvcl9jcHUocmRzX2liZGV2LT5kZXYsIGlibXItPnNnLAorCQkJaWJtci0+c2dfZG1hX2xlbiwgRE1BX0JJRElSRUNUSU9OQUwpOworCQlicmVhazsKKwljYXNlIERNQV9UT19ERVZJQ0U6CisJCWliX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UocmRzX2liZGV2LT5kZXYsIGlibXItPnNnLAorCQkJaWJtci0+c2dfZG1hX2xlbiwgRE1BX0JJRElSRUNUSU9OQUwpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKmlibXIpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiA9IGlibXItPmRldmljZTsKKworCWlmIChpYm1yLT5zZ19kbWFfbGVuKSB7CisJCWliX2RtYV91bm1hcF9zZyhyZHNfaWJkZXYtPmRldiwKKwkJCQlpYm1yLT5zZywgaWJtci0+c2dfbGVuLAorCQkJCURNQV9CSURJUkVDVElPTkFMKTsKKwkJaWJtci0+c2dfZG1hX2xlbiA9IDA7CisJfQorCisJLyogUmVsZWFzZSB0aGUgcy9nIGxpc3QgKi8KKwlpZiAoaWJtci0+c2dfbGVuKSB7CisJCXVuc2lnbmVkIGludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBpYm1yLT5zZ19sZW47ICsraSkgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKCZpYm1yLT5zZ1tpXSk7CisKKwkJCS8qIEZJWE1FIHdlIG5lZWQgYSB3YXkgdG8gdGVsbCBhIHIvdyBNUgorCQkJICogZnJvbSBhIHIvbyBNUiAqLworCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CisJCQlwdXRfcGFnZShwYWdlKTsKKwkJfQorCQlrZnJlZShpYm1yLT5zZyk7CisKKwkJaWJtci0+c2cgPSBOVUxMOworCQlpYm1yLT5zZ19sZW4gPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2liX3RlYXJkb3duX21yKHN0cnVjdCByZHNfaWJfbXIgKmlibXIpCit7CisJdW5zaWduZWQgaW50IHBpbm5lZCA9IGlibXItPnNnX2xlbjsKKworCV9fcmRzX2liX3RlYXJkb3duX21yKGlibXIpOworCWlmIChwaW5uZWQpIHsKKwkJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiA9IGlibXItPmRldmljZTsKKwkJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gcmRzX2liZGV2LT5tcl9wb29sOworCisJCWF0b21pY19zdWIocGlubmVkLCAmcG9vbC0+ZnJlZV9waW5uZWQpOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmRzX2liX2ZsdXNoX2dvYWwoc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sLCBpbnQgZnJlZV9hbGwpCit7CisJdW5zaWduZWQgaW50IGl0ZW1fY291bnQ7CisKKwlpdGVtX2NvdW50ID0gYXRvbWljX3JlYWQoJnBvb2wtPml0ZW1fY291bnQpOworCWlmIChmcmVlX2FsbCkKKwkJcmV0dXJuIGl0ZW1fY291bnQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZsdXNoIG91ciBwb29sIG9mIE1Scy4KKyAqIEF0IGEgbWluaW11bSwgYWxsIGN1cnJlbnRseSB1bnVzZWQgTVJzIGFyZSB1bm1hcHBlZC4KKyAqIElmIHRoZSBudW1iZXIgb2YgTVJzIGFsbG9jYXRlZCBleGNlZWRzIHRoZSBsaW1pdCwgd2UgYWxzbyB0cnkKKyAqIHRvIGZyZWUgYXMgbWFueSBNUnMgYXMgbmVlZGVkIHRvIGdldCBiYWNrIHRvIHRoaXMgbGltaXQuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2liX2ZsdXNoX21yX3Bvb2woc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sLCBpbnQgZnJlZV9hbGwpCit7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciwgKm5leHQ7CisJTElTVF9IRUFEKHVubWFwX2xpc3QpOworCUxJU1RfSEVBRChmbXJfbGlzdCk7CisJdW5zaWduZWQgbG9uZyB1bnBpbm5lZCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgbmZyZWVkID0gMCwgbmNsZWFuZWQgPSAwLCBmcmVlX2dvYWw7CisJaW50IHJldCA9IDA7CisKKwlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl9wb29sX2ZsdXNoKTsKKworCW11dGV4X2xvY2soJnBvb2wtPmZsdXNoX2xvY2spOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCS8qIEdldCB0aGUgbGlzdCBvZiBhbGwgTVJzIHRvIGJlIGRyb3BwZWQuIE9yZGVyaW5nIG1hdHRlcnMgLQorCSAqIHdlIHdhbnQgdG8gcHV0IGRyb3BfbGlzdCBhaGVhZCBvZiBmcmVlX2xpc3QuICovCisJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+ZnJlZV9saXN0LCAmdW5tYXBfbGlzdCk7CisJbGlzdF9zcGxpY2VfaW5pdCgmcG9vbC0+ZHJvcF9saXN0LCAmdW5tYXBfbGlzdCk7CisJaWYgKGZyZWVfYWxsKQorCQlsaXN0X3NwbGljZV9pbml0KCZwb29sLT5jbGVhbl9saXN0LCAmdW5tYXBfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwlmcmVlX2dvYWwgPSByZHNfaWJfZmx1c2hfZ29hbChwb29sLCBmcmVlX2FsbCk7CisKKwlpZiAobGlzdF9lbXB0eSgmdW5tYXBfbGlzdCkpCisJCWdvdG8gb3V0OworCisJLyogU3RyaW5nIGFsbCBpYl9tcidzIG9udG8gb25lIGxpc3QgYW5kIGhhbmQgdGhlbSB0byBpYl91bm1hcF9mbXIgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlibXIsICZ1bm1hcF9saXN0LCBsaXN0KQorCQlsaXN0X2FkZCgmaWJtci0+Zm1yLT5saXN0LCAmZm1yX2xpc3QpOworCXJldCA9IGliX3VubWFwX2ZtcigmZm1yX2xpc3QpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogaWJfdW5tYXBfZm1yIGZhaWxlZCAoZXJyPSVkKVxuIiwgcmV0KTsKKworCS8qIE5vdyB3ZSBjYW4gZGVzdHJveSB0aGUgRE1BIG1hcHBpbmcgYW5kIHVucGluIGFueSBwYWdlcyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYm1yLCBuZXh0LCAmdW5tYXBfbGlzdCwgbGlzdCkgeworCQl1bnBpbm5lZCArPSBpYm1yLT5zZ19sZW47CisJCV9fcmRzX2liX3RlYXJkb3duX21yKGlibXIpOworCQlpZiAobmZyZWVkIDwgZnJlZV9nb2FsIHx8IGlibXItPnJlbWFwX2NvdW50ID49IHBvb2wtPmZtcl9hdHRyLm1heF9tYXBzKSB7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcmRtYV9tcl9mcmVlKTsKKwkJCWxpc3RfZGVsKCZpYm1yLT5saXN0KTsKKwkJCWliX2RlYWxsb2NfZm1yKGlibXItPmZtcik7CisJCQlrZnJlZShpYm1yKTsKKwkJCW5mcmVlZCsrOworCQl9CisJCW5jbGVhbmVkKys7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCWxpc3Rfc3BsaWNlKCZ1bm1hcF9saXN0LCAmcG9vbC0+Y2xlYW5fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwlhdG9taWNfc3ViKHVucGlubmVkLCAmcG9vbC0+ZnJlZV9waW5uZWQpOworCWF0b21pY19zdWIobmNsZWFuZWQsICZwb29sLT5kaXJ0eV9jb3VudCk7CisJYXRvbWljX3N1YihuZnJlZWQsICZwb29sLT5pdGVtX2NvdW50KTsKKworb3V0OgorCW11dGV4X3VubG9jaygmcG9vbC0+Zmx1c2hfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX21yX3Bvb2xfZmx1c2hfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19pYl9tcl9wb29sLCBmbHVzaF93b3JrZXIpOworCisJcmRzX2liX2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7Cit9CisKK3ZvaWQgcmRzX2liX2ZyZWVfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpCit7CisJc3RydWN0IHJkc19pYl9tciAqaWJtciA9IHRyYW5zX3ByaXZhdGU7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldiA9IGlibXItPmRldmljZTsKKwlzdHJ1Y3QgcmRzX2liX21yX3Bvb2wgKnBvb2wgPSByZHNfaWJkZXYtPm1yX3Bvb2w7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJkc2RlYnVnKCJSRFMvSUI6IGZyZWVfbXIgbmVudHMgJXVcbiIsIGlibXItPnNnX2xlbik7CisKKwkvKiBSZXR1cm4gaXQgdG8gdGhlIHBvb2wncyBmcmVlIGxpc3QgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKGlibXItPnJlbWFwX2NvdW50ID49IHBvb2wtPmZtcl9hdHRyLm1heF9tYXBzKQorCQlsaXN0X2FkZCgmaWJtci0+bGlzdCwgJnBvb2wtPmRyb3BfbGlzdCk7CisJZWxzZQorCQlsaXN0X2FkZCgmaWJtci0+bGlzdCwgJnBvb2wtPmZyZWVfbGlzdCk7CisKKwlhdG9taWNfYWRkKGlibXItPnNnX2xlbiwgJnBvb2wtPmZyZWVfcGlubmVkKTsKKwlhdG9taWNfaW5jKCZwb29sLT5kaXJ0eV9jb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisKKwkvKiBJZiB3ZSd2ZSBwaW5uZWQgdG9vIG1hbnkgcGFnZXMsIHJlcXVlc3QgYSBmbHVzaCAqLworCWlmIChhdG9taWNfcmVhZCgmcG9vbC0+ZnJlZV9waW5uZWQpID49IHBvb2wtPm1heF9mcmVlX3Bpbm5lZAorCSB8fCBhdG9taWNfcmVhZCgmcG9vbC0+ZGlydHlfY291bnQpID49IHBvb2wtPm1heF9pdGVtcyAvIDEwKQorCQlxdWV1ZV93b3JrKHJkc193cSwgJnBvb2wtPmZsdXNoX3dvcmtlcik7CisKKwlpZiAoaW52YWxpZGF0ZSkgeworCQlpZiAobGlrZWx5KCFpbl9pbnRlcnJ1cHQoKSkpIHsKKwkJCXJkc19pYl9mbHVzaF9tcl9wb29sKHBvb2wsIDApOworCQl9IGVsc2UgeworCQkJLyogV2UgZ2V0IGhlcmUgaWYgdGhlIHVzZXIgY3JlYXRlZCBhIE1SIG1hcmtlZAorCQkJICogYXMgdXNlX29uY2UgYW5kIGludmFsaWRhdGUgYXQgdGhlIHNhbWUgdGltZS4gKi8KKwkJCXF1ZXVlX3dvcmsocmRzX3dxLCAmcG9vbC0+Zmx1c2hfd29ya2VyKTsKKwkJfQorCX0KK30KKwordm9pZCByZHNfaWJfZmx1c2hfbXJzKHZvaWQpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmRzX2liZGV2LCAmcmRzX2liX2RldmljZXMsIGxpc3QpIHsKKwkJc3RydWN0IHJkc19pYl9tcl9wb29sICpwb29sID0gcmRzX2liZGV2LT5tcl9wb29sOworCisJCWlmIChwb29sKQorCQkJcmRzX2liX2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7CisJfQorfQorCit2b2lkICpyZHNfaWJfZ2V0X21yKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgbmVudHMsCisJCSAgICBzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgKmtleV9yZXQpCit7CisJc3RydWN0IHJkc19pYl9kZXZpY2UgKnJkc19pYmRldjsKKwlzdHJ1Y3QgcmRzX2liX21yICppYm1yID0gTlVMTDsKKwlpbnQgcmV0OworCisJcmRzX2liZGV2ID0gcmRzX2liX2dldF9kZXZpY2UocnMtPnJzX2JvdW5kX2FkZHIpOworCWlmICghcmRzX2liZGV2KSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghcmRzX2liZGV2LT5tcl9wb29sKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlibXIgPSByZHNfaWJfYWxsb2NfZm1yKHJkc19pYmRldik7CisJaWYgKElTX0VSUihpYm1yKSkKKwkJcmV0dXJuIGlibXI7CisKKwlyZXQgPSByZHNfaWJfbWFwX2ZtcihyZHNfaWJkZXYsIGlibXIsIHNnLCBuZW50cyk7CisJaWYgKHJldCA9PSAwKQorCQkqa2V5X3JldCA9IGlibXItPmZtci0+cmtleTsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogbWFwX2ZtciBmYWlsZWQgKGVycm5vPSVkKVxuIiwgcmV0KTsKKworCWlibXItPmRldmljZSA9IHJkc19pYmRldjsKKworIG91dDoKKwlpZiAocmV0KSB7CisJCWlmIChpYm1yKQorCQkJcmRzX2liX2ZyZWVfbXIoaWJtciwgMCk7CisJCWlibXIgPSBFUlJfUFRSKHJldCk7CisJfQorCXJldHVybiBpYm1yOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pYl9yZWN2LmMgYi9uZXQvcmRzL2liX3JlY3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDYxYjU1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9yZWN2LmMKQEAgLTAsMCArMSw4NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8cmRtYS9yZG1hX2NtLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpYi5oIgorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19pYl9pbmNvbWluZ19zbGFiOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpyZHNfaWJfZnJhZ19zbGFiOworc3RhdGljIGF0b21pY190CXJkc19pYl9hbGxvY2F0aW9uID0gQVRPTUlDX0lOSVQoMCk7CisKK3N0YXRpYyB2b2lkIHJkc19pYl9mcmFnX2Ryb3BfcGFnZShzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZykKK3sKKwlyZHNkZWJ1ZygiZnJhZyAlcCBwYWdlICVwXG4iLCBmcmFnLCBmcmFnLT5mX3BhZ2UpOworCV9fZnJlZV9wYWdlKGZyYWctPmZfcGFnZSk7CisJZnJhZy0+Zl9wYWdlID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX2ZyYWdfZnJlZShzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZykKK3sKKwlyZHNkZWJ1ZygiZnJhZyAlcCBwYWdlICVwXG4iLCBmcmFnLCBmcmFnLT5mX3BhZ2UpOworCUJVR19PTihmcmFnLT5mX3BhZ2UgIT0gTlVMTCk7CisJa21lbV9jYWNoZV9mcmVlKHJkc19pYl9mcmFnX3NsYWIsIGZyYWcpOworfQorCisvKgorICogV2UgbWFwIGEgcGFnZSBhdCBhIHRpbWUuICBJdHMgZnJhZ21lbnRzIGFyZSBwb3N0ZWQgaW4gb3JkZXIuICBUaGlzCisgKiBpcyBjYWxsZWQgaW4gZnJhZ21lbnQgb3JkZXIgYXMgdGhlIGZyYWdtZW50cyBnZXQgc2VuZCBjb21wbGV0aW9uIGV2ZW50cy4KKyAqIE9ubHkgdGhlIGxhc3QgZnJhZyBpbiB0aGUgcGFnZSBwZXJmb3JtcyB0aGUgdW5tYXBwaW5nLgorICoKKyAqIEl0J3MgT0sgZm9yIHJpbmcgY2xlYW51cCB0byBjYWxsIHRoaXMgaW4gd2hhdGV2ZXIgb3JkZXIgaXQgbGlrZXMgYmVjYXVzZQorICogRE1BIGlzIG5vdCBpbiBmbGlnaHQgYW5kIHNvIHdlIGNhbiB1bm1hcCB3aGlsZSBvdGhlciByaW5nIGVudHJpZXMgc3RpbGwKKyAqIGhvbGQgcGFnZSByZWZlcmVuY2VzIGluIHRoZWlyIGZyYWdzLgorICovCitzdGF0aWMgdm9pZCByZHNfaWJfcmVjdl91bm1hcF9wYWdlKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkJICAgc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3YpCit7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWcgPSByZWN2LT5yX2ZyYWc7CisKKwlyZHNkZWJ1ZygicmVjdiAlcCBmcmFnICVwIHBhZ2UgJXBcbiIsIHJlY3YsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJaWYgKGZyYWctPmZfbWFwcGVkKQorCQlpYl9kbWFfdW5tYXBfcGFnZShpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJICAgICAgIGZyYWctPmZfbWFwcGVkLAorCQkJICAgICAgIFJEU19GUkFHX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJZnJhZy0+Zl9tYXBwZWQgPSAwOworfQorCit2b2lkIHJkc19pYl9yZWN2X2luaXRfcmluZyhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2OworCXUzMiBpOworCisJZm9yIChpID0gMCwgcmVjdiA9IGljLT5pX3JlY3ZzOyBpIDwgaWMtPmlfcmVjdl9yaW5nLndfbnI7IGkrKywgcmVjdisrKSB7CisJCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKworCQlyZWN2LT5yX2liaW5jID0gTlVMTDsKKwkJcmVjdi0+cl9mcmFnID0gTlVMTDsKKworCQlyZWN2LT5yX3dyLm5leHQgPSBOVUxMOworCQlyZWN2LT5yX3dyLndyX2lkID0gaTsKKwkJcmVjdi0+cl93ci5zZ19saXN0ID0gcmVjdi0+cl9zZ2U7CisJCXJlY3YtPnJfd3IubnVtX3NnZSA9IFJEU19JQl9SRUNWX1NHRTsKKworCQlzZ2UgPSByZHNfaWJfZGF0YV9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwkJc2dlLT5hZGRyID0gMDsKKwkJc2dlLT5sZW5ndGggPSBSRFNfRlJBR19TSVpFOworCQlzZ2UtPmxrZXkgPSBpYy0+aV9tci0+bGtleTsKKworCQlzZ2UgPSByZHNfaWJfaGVhZGVyX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCQlzZ2UtPmFkZHIgPSBpYy0+aV9yZWN2X2hkcnNfZG1hICsgKGkgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKwkJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCQlzZ2UtPmxrZXkgPSBpYy0+aV9tci0+bGtleTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pYl9yZWN2X2NsZWFyX29uZShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3YpCit7CisJaWYgKHJlY3YtPnJfaWJpbmMpIHsKKwkJcmRzX2luY19wdXQoJnJlY3YtPnJfaWJpbmMtPmlpX2luYyk7CisJCXJlY3YtPnJfaWJpbmMgPSBOVUxMOworCX0KKwlpZiAocmVjdi0+cl9mcmFnKSB7CisJCXJkc19pYl9yZWN2X3VubWFwX3BhZ2UoaWMsIHJlY3YpOworCQlpZiAocmVjdi0+cl9mcmFnLT5mX3BhZ2UpCisJCQlyZHNfaWJfZnJhZ19kcm9wX3BhZ2UocmVjdi0+cl9mcmFnKTsKKwkJcmRzX2liX2ZyYWdfZnJlZShyZWN2LT5yX2ZyYWcpOworCQlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCX0KK30KKwordm9pZCByZHNfaWJfcmVjdl9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaWMtPmlfcmVjdl9yaW5nLndfbnI7IGkrKykKKwkJcmRzX2liX3JlY3ZfY2xlYXJfb25lKGljLCAmaWMtPmlfcmVjdnNbaV0pOworCisJaWYgKGljLT5pX2ZyYWcuZl9wYWdlKQorCQlyZHNfaWJfZnJhZ19kcm9wX3BhZ2UoJmljLT5pX2ZyYWcpOworfQorCitzdGF0aWMgaW50IHJkc19pYl9yZWN2X3JlZmlsbF9vbmUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgc3RydWN0IHJkc19pYl9yZWN2X3dvcmsgKnJlY3YsCisJCQkJICBnZnBfdCBrcHRyX2dmcCwgZ2ZwX3QgcGFnZV9nZnApCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlpZiAocmVjdi0+cl9pYmluYyA9PSBOVUxMKSB7CisJCWlmIChhdG9taWNfcmVhZCgmcmRzX2liX2FsbG9jYXRpb24pID49IHJkc19pYl9zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbikgeworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X2FsbG9jX2xpbWl0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJlY3YtPnJfaWJpbmMgPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19pYl9pbmNvbWluZ19zbGFiLAorCQkJCQkJIGtwdHJfZ2ZwKTsKKwkJaWYgKHJlY3YtPnJfaWJpbmMgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlhdG9taWNfaW5jKCZyZHNfaWJfYWxsb2NhdGlvbik7CisJCUlOSVRfTElTVF9IRUFEKCZyZWN2LT5yX2liaW5jLT5paV9mcmFncyk7CisJCXJkc19pbmNfaW5pdCgmcmVjdi0+cl9pYmluYy0+aWlfaW5jLCBjb25uLCBjb25uLT5jX2ZhZGRyKTsKKwl9CisKKwlpZiAocmVjdi0+cl9mcmFnID09IE5VTEwpIHsKKwkJcmVjdi0+cl9mcmFnID0ga21lbV9jYWNoZV9hbGxvYyhyZHNfaWJfZnJhZ19zbGFiLCBrcHRyX2dmcCk7CisJCWlmIChyZWN2LT5yX2ZyYWcgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlJTklUX0xJU1RfSEVBRCgmcmVjdi0+cl9mcmFnLT5mX2l0ZW0pOworCQlyZWN2LT5yX2ZyYWctPmZfcGFnZSA9IE5VTEw7CisJfQorCisJaWYgKGljLT5pX2ZyYWcuZl9wYWdlID09IE5VTEwpIHsKKwkJaWMtPmlfZnJhZy5mX3BhZ2UgPSBhbGxvY19wYWdlKHBhZ2VfZ2ZwKTsKKwkJaWYgKGljLT5pX2ZyYWcuZl9wYWdlID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCA9IDA7CisJfQorCisJZG1hX2FkZHIgPSBpYl9kbWFfbWFwX3BhZ2UoaWMtPmlfY21faWQtPmRldmljZSwKKwkJCQkgIGljLT5pX2ZyYWcuZl9wYWdlLAorCQkJCSAgaWMtPmlfZnJhZy5mX29mZnNldCwKKwkJCQkgIFJEU19GUkFHX1NJWkUsCisJCQkJICBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcihpYy0+aV9jbV9pZC0+ZGV2aWNlLCBkbWFfYWRkcikpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBPbmNlIHdlIGdldCB0aGUgUkRTX1BBR0VfTEFTVF9PRkYgZnJhZyB0aGVuIHJkc19pYl9mcmFnX3VubWFwKCkKKwkgKiBtdXN0IGJlIGNhbGxlZCBvbiB0aGlzIHJlY3YuICBUaGlzIGhhcHBlbnMgYXMgY29tcGxldGlvbnMgaGl0CisJICogaW4gb3JkZXIgb3Igb24gY29ubmVjdGlvbiBzaHV0ZG93bi4KKwkgKi8KKwlyZWN2LT5yX2ZyYWctPmZfcGFnZSA9IGljLT5pX2ZyYWcuZl9wYWdlOworCXJlY3YtPnJfZnJhZy0+Zl9vZmZzZXQgPSBpYy0+aV9mcmFnLmZfb2Zmc2V0OworCXJlY3YtPnJfZnJhZy0+Zl9tYXBwZWQgPSBkbWFfYWRkcjsKKworCXNnZSA9IHJkc19pYl9kYXRhX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCXNnZS0+YWRkciA9IGRtYV9hZGRyOworCXNnZS0+bGVuZ3RoID0gUkRTX0ZSQUdfU0laRTsKKworCXNnZSA9IHJkc19pYl9oZWFkZXJfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJc2dlLT5hZGRyID0gaWMtPmlfcmVjdl9oZHJzX2RtYSArIChyZWN2IC0gaWMtPmlfcmVjdnMpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwlnZXRfcGFnZShyZWN2LT5yX2ZyYWctPmZfcGFnZSk7CisKKwlpZiAoaWMtPmlfZnJhZy5mX29mZnNldCA8IFJEU19QQUdFX0xBU1RfT0ZGKSB7CisJCWljLT5pX2ZyYWcuZl9vZmZzZXQgKz0gUkRTX0ZSQUdfU0laRTsKKwl9IGVsc2UgeworCQlwdXRfcGFnZShpYy0+aV9mcmFnLmZfcGFnZSk7CisJCWljLT5pX2ZyYWcuZl9wYWdlID0gTlVMTDsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCA9IDA7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyB0cmllcyB0byBhbGxvY2F0ZSBhbmQgcG9zdCB1bnVzZWQgd29yayByZXF1ZXN0cyBhZnRlciBtYWtpbmcgc3VyZSB0aGF0CisgKiB0aGV5IGhhdmUgYWxsIHRoZSBhbGxvY2F0aW9ucyB0aGV5IG5lZWQgdG8gcXVldWUgcmVjZWl2ZWQgZnJhZ21lbnRzIGludG8KKyAqIHNvY2tldHMuICBUaGUgaV9yZWN2X211dGV4IGlzIGhlbGQgaGVyZSBzbyB0aGF0IHJpbmdfYWxsb2MgYW5kIF91bmFsbG9jCisgKiBwYWlycyBkb24ndCBnbyB1bm1hdGNoZWQuCisgKgorICogLTEgaXMgcmV0dXJuZWQgaWYgcG9zdGluZyBmYWlscyBkdWUgdG8gdGVtcG9yYXJ5IHJlc291cmNlIGV4aGF1c3Rpb24uCisgKi8KK2ludCByZHNfaWJfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBrcHRyX2dmcCwKKwkJICAgICAgIGdmcF90IHBhZ2VfZ2ZwLCBpbnQgcHJlZmlsbCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdjsKKwlzdHJ1Y3QgaWJfcmVjdl93ciAqZmFpbGVkX3dyOworCXVuc2lnbmVkIGludCBwb3N0ZWQgPSAwOworCWludCByZXQgPSAwOworCXUzMiBwb3M7CisKKwl3aGlsZSAoKHByZWZpbGwgfHwgcmRzX2Nvbm5fdXAoY29ubikpCisJCQkmJiByZHNfaWJfcmluZ19hbGxvYygmaWMtPmlfcmVjdl9yaW5nLCAxLCAmcG9zKSkgeworCQlpZiAocG9zID49IGljLT5pX3JlY3ZfcmluZy53X25yKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFyZ2ggLSByaW5nIGFsbG9jIHJldHVybmVkIHBvcz0ldVxuIiwKKwkJCQkJcG9zKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXJlY3YgPSAmaWMtPmlfcmVjdnNbcG9zXTsKKwkJcmV0ID0gcmRzX2liX3JlY3ZfcmVmaWxsX29uZShjb25uLCByZWN2LCBrcHRyX2dmcCwgcGFnZV9nZnApOworCQlpZiAocmV0KSB7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogWFhYIHdoZW4gY2FuIHRoaXMgZmFpbD8gKi8KKwkJcmV0ID0gaWJfcG9zdF9yZWN2KGljLT5pX2NtX2lkLT5xcCwgJnJlY3YtPnJfd3IsICZmYWlsZWRfd3IpOworCQlyZHNkZWJ1ZygicmVjdiAlcCBpYmluYyAlcCBwYWdlICVwIGFkZHIgJWx1IHJldCAlZFxuIiwgcmVjdiwKKwkJCSByZWN2LT5yX2liaW5jLCByZWN2LT5yX2ZyYWctPmZfcGFnZSwKKwkJCSAobG9uZykgcmVjdi0+cl9mcmFnLT5mX21hcHBlZCwgcmV0KTsKKwkJaWYgKHJldCkgeworCQkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJlY3YgcG9zdCBvbiAiCisJCQkgICAgICAgIiVwSTQgcmV0dXJuZWQgJWQsIGRpc2Nvbm5lY3RpbmcgYW5kICIKKwkJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLCAmY29ubi0+Y19mYWRkciwKKwkJCSAgICAgICByZXQpOworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCisJCXBvc3RlZCsrOworCX0KKworCS8qIFdlJ3JlIGRvaW5nIGZsb3cgY29udHJvbCAtIHVwZGF0ZSB0aGUgd2luZG93LiAqLworCWlmIChpYy0+aV9mbG93Y3RsICYmIHBvc3RlZCkKKwkJcmRzX2liX2FkdmVydGlzZV9jcmVkaXRzKGNvbm4sIHBvc3RlZCk7CisKKwlpZiAocmV0KQorCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9yZWN2X3JpbmcsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX2luY19wdXJnZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJc3RydWN0IHJkc19pYl9pbmNvbWluZyAqaWJpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKnBvczsKKworCWliaW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pYl9pbmNvbWluZywgaWlfaW5jKTsKKwlyZHNkZWJ1ZygicHVyZ2luZyBpYmluYyAlcCBpbmMgJXBcbiIsIGliaW5jLCBpbmMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZyYWcsIHBvcywgJmliaW5jLT5paV9mcmFncywgZl9pdGVtKSB7CisJCWxpc3RfZGVsX2luaXQoJmZyYWctPmZfaXRlbSk7CisJCXJkc19pYl9mcmFnX2Ryb3BfcGFnZShmcmFnKTsKKwkJcmRzX2liX2ZyYWdfZnJlZShmcmFnKTsKKwl9Cit9CisKK3ZvaWQgcmRzX2liX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nICppYmluYzsKKworCWliaW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pYl9pbmNvbWluZywgaWlfaW5jKTsKKworCXJkc19pYl9pbmNfcHVyZ2UoaW5jKTsKKwlyZHNkZWJ1ZygiZnJlZWluZyBpYmluYyAlcCBpbmMgJXBcbiIsIGliaW5jLCBpbmMpOworCUJVR19PTighbGlzdF9lbXB0eSgmaWJpbmMtPmlpX2ZyYWdzKSk7CisJa21lbV9jYWNoZV9mcmVlKHJkc19pYl9pbmNvbWluZ19zbGFiLCBpYmluYyk7CisJYXRvbWljX2RlYygmcmRzX2liX2FsbG9jYXRpb24pOworCUJVR19PTihhdG9taWNfcmVhZCgmcmRzX2liX2FsbG9jYXRpb24pIDwgMCk7Cit9CisKK2ludCByZHNfaWJfaW5jX2NvcHlfdG9fdXNlcihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCBpb3ZlYyAqZmlyc3RfaW92LAorCQkJICAgIHNpemVfdCBzaXplKQoreworCXN0cnVjdCByZHNfaWJfaW5jb21pbmcgKmliaW5jOworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnOworCXN0cnVjdCBpb3ZlYyAqaW92ID0gZmlyc3RfaW92OworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGZyYWdfb2ZmID0gMDsKKwl1bnNpZ25lZCBsb25nIGlvdl9vZmYgPSAwOworCWludCBjb3BpZWQgPSAwOworCWludCByZXQ7CisJdTMyIGxlbjsKKworCWliaW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pYl9pbmNvbWluZywgaWlfaW5jKTsKKwlmcmFnID0gbGlzdF9lbnRyeShpYmluYy0+aWlfZnJhZ3MubmV4dCwgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJbGVuID0gYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbik7CisKKwl3aGlsZSAoY29waWVkIDwgc2l6ZSAmJiBjb3BpZWQgPCBsZW4pIHsKKwkJaWYgKGZyYWdfb2ZmID09IFJEU19GUkFHX1NJWkUpIHsKKwkJCWZyYWcgPSBsaXN0X2VudHJ5KGZyYWctPmZfaXRlbS5uZXh0LAorCQkJCQkgIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCQkJZnJhZ19vZmYgPSAwOworCQl9CisJCXdoaWxlIChpb3Zfb2ZmID09IGlvdi0+aW92X2xlbikgeworCQkJaW92X29mZiA9IDA7CisJCQlpb3YrKzsKKwkJfQorCisJCXRvX2NvcHkgPSBtaW4oaW92LT5pb3ZfbGVuIC0gaW92X29mZiwgUkRTX0ZSQUdfU0laRSAtIGZyYWdfb2ZmKTsKKwkJdG9fY29weSA9IG1pbl90KHNpemVfdCwgdG9fY29weSwgc2l6ZSAtIGNvcGllZCk7CisJCXRvX2NvcHkgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB0b19jb3B5LCBsZW4gLSBjb3BpZWQpOworCisJCXJkc2RlYnVnKCIlbHUgYnl0ZXMgdG8gdXNlciBbJXAsICV6dV0gKyAlbHUgZnJvbSBmcmFnICIKKwkJCSAiWyVwLCAlbHVdICsgJWx1XG4iLAorCQkJIHRvX2NvcHksIGlvdi0+aW92X2Jhc2UsIGlvdi0+aW92X2xlbiwgaW92X29mZiwKKwkJCSBmcmFnLT5mX3BhZ2UsIGZyYWctPmZfb2Zmc2V0LCBmcmFnX29mZik7CisKKwkJLyogWFhYIG5lZWRzICsgb2Zmc2V0IGZvciBtdWx0aXBsZSByZWN2cyBwZXIgcGFnZSAqLworCQlyZXQgPSByZHNfcGFnZV9jb3B5X3RvX3VzZXIoZnJhZy0+Zl9wYWdlLAorCQkJCQkgICAgZnJhZy0+Zl9vZmZzZXQgKyBmcmFnX29mZiwKKwkJCQkJICAgIGlvdi0+aW92X2Jhc2UgKyBpb3Zfb2ZmLAorCQkJCQkgICAgdG9fY29weSk7CisJCWlmIChyZXQpIHsKKwkJCWNvcGllZCA9IHJldDsKKwkJCWJyZWFrOworCQl9CisKKwkJaW92X29mZiArPSB0b19jb3B5OworCQlmcmFnX29mZiArPSB0b19jb3B5OworCQljb3BpZWQgKz0gdG9fY29weTsKKwl9CisKKwlyZXR1cm4gY29waWVkOworfQorCisvKiBpYyBzdGFydHMgb3V0IGt6YWxsb2MoKWVkICovCit2b2lkIHJkc19pYl9yZWN2X2luaXRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IGliX3NlbmRfd3IgKndyID0gJmljLT5pX2Fja193cjsKKwlzdHJ1Y3QgaWJfc2dlICpzZ2UgPSAmaWMtPmlfYWNrX3NnZTsKKworCXNnZS0+YWRkciA9IGljLT5pX2Fja19kbWE7CisJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCisJd3ItPnNnX2xpc3QgPSBzZ2U7CisJd3ItPm51bV9zZ2UgPSAxOworCXdyLT5vcGNvZGUgPSBJQl9XUl9TRU5EOworCXdyLT53cl9pZCA9IFJEU19JQl9BQ0tfV1JfSUQ7CisJd3ItPnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7Cit9CisKKy8qCisgKiBZb3UnZCB0aGluayB0aGF0IHdpdGggcmVsaWFibGUgSUIgY29ubmVjdGlvbnMgeW91IHdvdWxkbid0IG5lZWQgdG8gYWNrCisgKiBtZXNzYWdlcyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgSUIgaGFyZHdhcmUgZ2VuZXJhdGVzCisgKiBhbiBhY2sgbWVzc2FnZSBiZWZvcmUgaXQgaGFzIERNQWVkIHRoZSBtZXNzYWdlIGludG8gbWVtb3J5LiAgVGhpcyBjcmVhdGVzIGEKKyAqIHBvdGVudGlhbCBtZXNzYWdlIGxvc3MgaWYgdGhlIEhDQSBpcyBkaXNhYmxlZCBmb3IgYW55IHJlYXNvbiBiZXR3ZWVuIHdoZW4gaXQKKyAqIHNlbmRzIHRoZSBhY2sgYW5kIGJlZm9yZSB0aGUgbWVzc2FnZSBpcyBETUFlZCBhbmQgcHJvY2Vzc2VkLiAgVGhpcyBpcyBvbmx5IGEKKyAqIHBvdGVudGlhbCBpc3N1ZSBpZiBhbm90aGVyIEhDQSBpcyBhdmFpbGFibGUgZm9yIGZhaWwtb3Zlci4KKyAqCisgKiBXaGVuIHRoZSByZW1vdGUgaG9zdCByZWNlaXZlcyBvdXIgYWNrIHRoZXknbGwgZnJlZSB0aGUgc2VudCBtZXNzYWdlIGZyb20KKyAqIHRoZWlyIHNlbmQgcXVldWUuICBUbyBkZWNyZWFzZSB0aGUgbGF0ZW5jeSBvZiB0aGlzIHdlIGFsd2F5cyBzZW5kIGFuIGFjaworICogaW1tZWRpYXRlbHkgYWZ0ZXIgd2UndmUgcmVjZWl2ZWQgbWVzc2FnZXMuCisgKgorICogRm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgaGF2ZSBvbmUgYWNrIGluIGZsaWdodCBhdCBhIHRpbWUuICBUaGlzIHB1dHMKKyAqIHByZXNzdXJlIG9uIHNlbmRlcnMgdG8gaGF2ZSBkZWVwIGVub3VnaCBzZW5kIHF1ZXVlcyB0byBhYnNvcmIgdGhlIGxhdGVuY3kgb2YKKyAqIGEgc2luZ2xlIGFjayBmcmFtZSBiZWluZyBpbiBmbGlnaHQuICBUaGlzIG1pZ2h0IG5vdCBiZSBnb29kIGVub3VnaC4KKyAqCisgKiBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IGhhdmUgYSBsb25nLWxpdmVkIHNlbmRfd3IgYW5kIHNnZSB3aGljaCBwb2ludCB0byBhCisgKiBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhY2sgZnJhbWUuICBUaGlzIGFjayB3ciBkb2VzIG5vdCBmYWxsIHVuZGVyIHRoZSByaW5nCisgKiBhY2NvdW50aW5nIHRoYXQgdGhlIHR4IGFuZCByeCB3cnMgZG8uICBUaGUgUVAgYXR0cmlidXRlIHNwZWNpZmljYWxseSBtYWtlcworICogcm9vbSBmb3IgaXQgYmV5b25kIHRoZSByaW5nIHNpemUuICBTZW5kIGNvbXBsZXRpb24gbm90aWNlcyBpdHMgc3BlY2lhbAorICogd3JfaWQgYW5kIGF2b2lkcyB3b3JraW5nIHdpdGggdGhlIHJpbmcgaW4gdGhhdCBjYXNlLgorICovCitzdGF0aWMgdm9pZCByZHNfaWJfc2V0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLCB1NjQgc2VxLAorCQkJCWludCBhY2tfcmVxdWlyZWQpCit7CisJcmRzX2liX3NldF82NGJpdCgmaWMtPmlfYWNrX25leHQsIHNlcSk7CisJaWYgKGFja19yZXF1aXJlZCkgeworCQlzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsKKwkJc2V0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwl9Cit9CisKK3N0YXRpYyB1NjQgcmRzX2liX2dldF9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwljbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKworCXJldHVybiBpYy0+aV9hY2tfbmV4dDsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX3NlbmRfYWNrKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsIHVuc2lnbmVkIGludCBhZHZfY3JlZGl0cykKK3sKKwlzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyID0gaWMtPmlfYWNrOworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJdTY0IHNlcTsKKwlpbnQgcmV0OworCisJc2VxID0gcmRzX2liX2dldF9hY2soaWMpOworCisJcmRzZGVidWcoInNlbmRfYWNrOiBpYyAlcCBhY2sgJWxsdVxuIiwgaWMsICh1bnNpZ25lZCBsb25nIGxvbmcpIHNlcSk7CisJcmRzX21lc3NhZ2VfcG9wdWxhdGVfaGVhZGVyKGhkciwgMCwgMCwgMCk7CisJaGRyLT5oX2FjayA9IGNwdV90b19iZTY0KHNlcSk7CisJaGRyLT5oX2NyZWRpdCA9IGFkdl9jcmVkaXRzOworCXJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oaGRyKTsKKwlpYy0+aV9hY2tfcXVldWVkID0gamlmZmllczsKKworCXJldCA9IGliX3Bvc3Rfc2VuZChpYy0+aV9jbV9pZC0+cXAsICZpYy0+aV9hY2tfd3IsICZmYWlsZWRfd3IpOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCS8qIEZhaWxlZCB0byBzZW5kLiBSZWxlYXNlIHRoZSBXUiwgYW5kCisJCSAqIGZvcmNlIGFub3RoZXIgQUNLLgorCQkgKi8KKwkJY2xlYXJfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpOworCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9hY2tfc2VuZF9mYWlsdXJlKTsKKwkJLyogTmVlZCB0byBmaW5lc3NlIHRoaXMgbGF0ZXIuICovCisJCUJVRygpOworCX0gZWxzZQorCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfYWNrX3NlbnQpOworfQorCisvKgorICogVGhlcmUgYXJlIDMgd2F5cyBvZiBnZXR0aW5nIGFja25vd2xlZGdlbWVudHMgdG8gdGhlIHBlZXI6CisgKiAgMS4JV2UgY2FsbCByZHNfaWJfYXR0ZW1wdF9hY2sgZnJvbSB0aGUgcmVjdiBjb21wbGV0aW9uIGhhbmRsZXIKKyAqCXRvIHNlbmQgYW4gQUNLLW9ubHkgZnJhbWUuCisgKglIb3dldmVyLCB0aGVyZSBjYW4gYmUgb25seSBvbmUgc3VjaCBmcmFtZSBpbiB0aGUgc2VuZCBxdWV1ZQorICoJYXQgYW55IHRpbWUsIHNvIHdlIG1heSBoYXZlIHRvIHBvc3Rwb25lIGl0LgorICogIDIuCVdoZW4gYW5vdGhlciAoZGF0YSkgcGFja2V0IGlzIHRyYW5zbWl0dGVkIHdoaWxlIHRoZXJlJ3MKKyAqCWFuIEFDSyBpbiB0aGUgcXVldWUsIHdlIHBpZ2d5YmFjayB0aGUgQUNLIHNlcXVlbmNlIG51bWJlcgorICoJb24gdGhlIGRhdGEgcGFja2V0LgorICogIDMuCUlmIHRoZSBBQ0sgV1IgaXMgZG9uZSBzZW5kaW5nLCB3ZSBnZXQgY2FsbGVkIGZyb20gdGhlCisgKglzZW5kIHF1ZXVlIGNvbXBsZXRpb24gaGFuZGxlciwgYW5kIGNoZWNrIHdoZXRoZXIgdGhlcmUncworICoJYW5vdGhlciBBQ0sgcGVuZGluZyAocG9zdHBvbmVkIGJlY2F1c2UgdGhlIFdSIHdhcyBvbiB0aGUKKyAqCXF1ZXVlKS4gSWYgc28sIHdlIHRyYW5zbWl0IGl0LgorICoKKyAqIFdlIG1haW50YWluIDIgdmFyaWFibGVzOgorICogIC0JaV9hY2tfZmxhZ3MsIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHdoZXRoZXIgdGhlIEFDSyBXUgorICoJaXMgY3VycmVudGx5IGluIHRoZSBzZW5kIHF1ZXVlIG9yIG5vdCAoSUJfQUNLX0lOX0ZMSUdIVCkKKyAqICAtCWlfYWNrX25leHQsIHdoaWNoIGlzIHRoZSBsYXN0IHNlcXVlbmNlIG51bWJlciB3ZSByZWNlaXZlZAorICoKKyAqIFBvdGVudGlhbGx5LCBzZW5kIHF1ZXVlIGFuZCByZWNlaXZlIHF1ZXVlIGhhbmRsZXJzIGNhbiBydW4gY29uY3VycmVudGx5LgorICoKKyAqIFJlY29ubmVjdGluZyBjb21wbGljYXRlcyB0aGlzIHBpY3R1cmUganVzdCBzbGlnaHRseS4gV2hlbiB3ZQorICogcmVjb25uZWN0LCB3ZSBtYXkgYmUgc2VlaW5nIGR1cGxpY2F0ZSBwYWNrZXRzLiBUaGUgcGVlcgorICogaXMgcmV0cmFuc21pdHRpbmcgdGhlbSwgYmVjYXVzZSBpdCBoYXNuJ3Qgc2VlbiBhbiBBQ0sgZm9yCisgKiB0aGVtLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCB3ZSBBQ0sgdGhlc2UuCisgKgorICogQUNLIG1pdGlnYXRpb24gYWRkcyBhIGhlYWRlciBmbGFnICJBQ0tfUkVRVUlSRUQiOyBhbnkgcGFja2V0IHdpdGgKKyAqIHRoaXMgZmxhZyBzZXQgKk1VU1QqIGJlIGFja25vd2xlZGdlZCBpbW1lZGlhdGVseS4KKyAqLworCisvKgorICogV2hlbiB3ZSBnZXQgaGVyZSwgd2UncmUgY2FsbGVkIGZyb20gdGhlIHJlY3YgcXVldWUgaGFuZGxlci4KKyAqIENoZWNrIHdoZXRoZXIgd2Ugb3VnaHQgdG8gdHJhbnNtaXQgYW4gQUNLLgorICovCit2b2lkIHJkc19pYl9hdHRlbXB0X2FjayhzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljKQoreworCXVuc2lnbmVkIGludCBhZHZfY3JlZGl0czsKKworCWlmICghdGVzdF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncykpCisJCXJldHVybjsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KElCX0FDS19JTl9GTElHSFQsICZpYy0+aV9hY2tfZmxhZ3MpKSB7CisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9hY2tfc2VuZF9kZWxheWVkKTsKKwkJcmV0dXJuOworCX0KKworCS8qIENhbiB3ZSBnZXQgYSBzZW5kIGNyZWRpdD8gKi8KKwlpZiAoIXJkc19pYl9zZW5kX2dyYWJfY3JlZGl0cyhpYywgMSwgJmFkdl9jcmVkaXRzLCAwKSkgeworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfdGhyb3R0bGUpOworCQljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJCXJldHVybjsKKwl9CisKKwljbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisJcmRzX2liX3NlbmRfYWNrKGljLCBhZHZfY3JlZGl0cyk7Cit9CisKKy8qCisgKiBXZSBnZXQgaGVyZSBmcm9tIHRoZSBzZW5kIGNvbXBsZXRpb24gaGFuZGxlciwgd2hlbiB0aGUKKyAqIGFkYXB0ZXIgdGVsbHMgdXMgdGhlIEFDSyBmcmFtZSB3YXMgc2VudC4KKyAqLwordm9pZCByZHNfaWJfYWNrX3NlbmRfY29tcGxldGUoc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJcmRzX2liX2F0dGVtcHRfYWNrKGljKTsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGJ5IHRoZSByZWd1bGFyIHhtaXQgY29kZSB3aGVuIGl0IHdhbnRzIHRvIHBpZ2d5YmFjaworICogYW4gQUNLIG9uIGFuIG91dGdvaW5nIGZyYW1lLgorICovCit1NjQgcmRzX2liX3BpZ2d5Yl9hY2soc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYykKK3sKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpKQorCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfYWNrX3NlbmRfcGlnZ3liYWNrZWQpOworCXJldHVybiByZHNfaWJfZ2V0X2FjayhpYyk7Cit9CisKKy8qCisgKiBJdCdzIGtpbmQgb2YgbGFtZSB0aGF0IHdlJ3JlIGNvcHlpbmcgZnJvbSB0aGUgcG9zdGVkIHJlY2VpdmUgcGFnZXMgaW50bworICogbG9uZy1saXZlZCBiaXRtYXBzLiAgV2UgY291bGQgaGF2ZSBwb3N0ZWQgdGhlIGJpdG1hcHMgYW5kIHJkbWEgd3JpdHRlbiBpbnRvCisgKiB0aGVtLiAgQnV0IHJlY2VpdmluZyBuZXcgY29uZ2VzdGlvbiBiaXRtYXBzIHNob3VsZCBiZSBhICpyYXJlKiBldmVudCwgc28KKyAqIGhvcGVmdWxseSB3ZSB3b24ndCBuZWVkIHRvIGludmVzdCB0aGF0IGNvbXBsZXhpdHkgaW4gbWFraW5nIGl0IG1vcmUKKyAqIGVmZmljaWVudC4gIEJ5IGNvcHlpbmcgd2UgY2FuIHNoYXJlIGEgc2ltcGxlciBjb3JlIHdpdGggVENQIHdoaWNoIGhhcyB0bworICogY29weS4KKyAqLworc3RhdGljIHZvaWQgcmRzX2liX2NvbmdfcmVjdihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkgICAgICBzdHJ1Y3QgcmRzX2liX2luY29taW5nICppYmluYykKK3sKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXA7CisJdW5zaWduZWQgaW50IG1hcF9vZmY7CisJdW5zaWduZWQgaW50IG1hcF9wYWdlOworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnOworCXVuc2lnbmVkIGxvbmcgZnJhZ19vZmY7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5OworCXVuc2lnbmVkIGxvbmcgY29waWVkOworCXVpbnQ2NF90IHVuY29uZ2VzdGVkID0gMDsKKwl2b2lkICphZGRyOworCisJLyogY2F0Y2ggY29tcGxldGVseSBjb3JydXB0IHBhY2tldHMgKi8KKwlpZiAoYmUzMl90b19jcHUoaWJpbmMtPmlpX2luYy5pX2hkci5oX2xlbikgIT0gUkRTX0NPTkdfTUFQX0JZVEVTKQorCQlyZXR1cm47CisKKwltYXAgPSBjb25uLT5jX2Zjb25nOworCW1hcF9wYWdlID0gMDsKKwltYXBfb2ZmID0gMDsKKworCWZyYWcgPSBsaXN0X2VudHJ5KGliaW5jLT5paV9mcmFncy5uZXh0LCBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwlmcmFnX29mZiA9IDA7CisKKwljb3BpZWQgPSAwOworCisJd2hpbGUgKGNvcGllZCA8IFJEU19DT05HX01BUF9CWVRFUykgeworCQl1aW50NjRfdCAqc3JjLCAqZHN0OworCQl1bnNpZ25lZCBpbnQgazsKKworCQl0b19jb3B5ID0gbWluKFJEU19GUkFHX1NJWkUgLSBmcmFnX29mZiwgUEFHRV9TSVpFIC0gbWFwX29mZik7CisJCUJVR19PTih0b19jb3B5ICYgNyk7IC8qIE11c3QgYmUgNjRiaXQgYWxpZ25lZC4gKi8KKworCQlhZGRyID0ga21hcF9hdG9taWMoZnJhZy0+Zl9wYWdlLCBLTV9TT0ZUSVJRMCk7CisKKwkJc3JjID0gYWRkciArIGZyYWdfb2ZmOworCQlkc3QgPSAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW21hcF9wYWdlXSArIG1hcF9vZmY7CisJCWZvciAoayA9IDA7IGsgPCB0b19jb3B5OyBrICs9IDgpIHsKKwkJCS8qIFJlY29yZCBwb3J0cyB0aGF0IGJlY2FtZSB1bmNvbmdlc3RlZCwgaWUKKwkJCSAqIGJpdHMgdGhhdCBjaGFuZ2VkIGZyb20gMCB0byAxLiAqLworCQkJdW5jb25nZXN0ZWQgfD0gfigqc3JjKSAmICpkc3Q7CisJCQkqZHN0KysgPSAqc3JjKys7CisJCX0KKwkJa3VubWFwX2F0b21pYyhhZGRyLCBLTV9TT0ZUSVJRMCk7CisKKwkJY29waWVkICs9IHRvX2NvcHk7CisKKwkJbWFwX29mZiArPSB0b19jb3B5OworCQlpZiAobWFwX29mZiA9PSBQQUdFX1NJWkUpIHsKKwkJCW1hcF9vZmYgPSAwOworCQkJbWFwX3BhZ2UrKzsKKwkJfQorCisJCWZyYWdfb2ZmICs9IHRvX2NvcHk7CisJCWlmIChmcmFnX29mZiA9PSBSRFNfRlJBR19TSVpFKSB7CisJCQlmcmFnID0gbGlzdF9lbnRyeShmcmFnLT5mX2l0ZW0ubmV4dCwKKwkJCQkJICBzdHJ1Y3QgcmRzX3BhZ2VfZnJhZywgZl9pdGVtKTsKKwkJCWZyYWdfb2ZmID0gMDsKKwkJfQorCX0KKworCS8qIHRoZSBjb25nZXN0aW9uIG1hcCBpcyBpbiBsaXR0bGUgZW5kaWFuIG9yZGVyICovCisJdW5jb25nZXN0ZWQgPSBsZTY0X3RvX2NwdSh1bmNvbmdlc3RlZCk7CisKKwlyZHNfY29uZ19tYXBfdXBkYXRlZChtYXAsIHVuY29uZ2VzdGVkKTsKK30KKworLyoKKyAqIFJpbmdzIGFyZSBwb3N0ZWQgd2l0aCBhbGwgdGhlIGFsbG9jYXRpb25zIHRoZXknbGwgbmVlZCB0byBxdWV1ZSB0aGUKKyAqIGluY29taW5nIG1lc3NhZ2UgdG8gdGhlIHJlY2VpdmluZyBzb2NrZXQgc28gdGhpcyBjYW4ndCBmYWlsLgorICogQWxsIGZyYWdtZW50cyBzdGFydCB3aXRoIGEgaGVhZGVyLCBzbyB3ZSBjYW4gbWFrZSBzdXJlIHdlJ3JlIG5vdCByZWNlaXZpbmcKKyAqIGdhcmJhZ2UsIGFuZCB3ZSBjYW4gdGVsbCBhIHNtYWxsIDggYnl0ZSBmcmFnbWVudCBmcm9tIGFuIEFDSyBmcmFtZS4KKyAqLworc3RydWN0IHJkc19pYl9hY2tfc3RhdGUgeworCXU2NAkJYWNrX25leHQ7CisJdTY0CQlhY2tfcmVjdjsKKwl1bnNpZ25lZCBpbnQJYWNrX3JlcXVpcmVkOjE7CisJdW5zaWduZWQgaW50CWFja19uZXh0X3ZhbGlkOjE7CisJdW5zaWduZWQgaW50CWFja19yZWN2X3ZhbGlkOjE7Cit9OworCitzdGF0aWMgdm9pZCByZHNfaWJfcHJvY2Vzc19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQlzdHJ1Y3QgcmRzX2liX3JlY3Zfd29yayAqcmVjdiwgdTMyIGJ5dGVfbGVuLAorCQkJCXN0cnVjdCByZHNfaWJfYWNrX3N0YXRlICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2liX2luY29taW5nICppYmluYyA9IGljLT5pX2liaW5jOworCXN0cnVjdCByZHNfaGVhZGVyICppaGRyLCAqaGRyOworCisJLyogWFhYIHNodXQgZG93biB0aGUgY29ubmVjdGlvbiBpZiBwb3J0IDAsMCBhcmUgc2Vlbj8gKi8KKworCXJkc2RlYnVnKCJpYyAlcCBpYmluYyAlcCByZWN2ICVwIGJ5dGUgbGVuICV1XG4iLCBpYywgaWJpbmMsIHJlY3YsCisJCSBieXRlX2xlbik7CisKKwlpZiAoYnl0ZV9sZW4gPCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKSB7CisJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sICJpbmNvbWluZyBtZXNzYWdlICIKKwkJICAgICAgICJmcm9tICVwSTQgZGlkbid0IGluY2x1ZSBhICIKKwkJICAgICAgICJoZWFkZXIsIGRpc2Nvbm5lY3RpbmcgYW5kICIKKwkJICAgICAgICJyZWNvbm5lY3RpbmdcbiIsCisJCSAgICAgICAmY29ubi0+Y19mYWRkcik7CisJCXJldHVybjsKKwl9CisJYnl0ZV9sZW4gLT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKworCWloZHIgPSAmaWMtPmlfcmVjdl9oZHJzW3JlY3YgLSBpYy0+aV9yZWN2c107CisKKwkvKiBWYWxpZGF0ZSB0aGUgY2hlY2tzdW0uICovCisJaWYgKCFyZHNfbWVzc2FnZV92ZXJpZnlfY2hlY2tzdW0oaWhkcikpIHsKKwkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgImluY29taW5nIG1lc3NhZ2UgIgorCQkgICAgICAgImZyb20gJXBJNCBoYXMgY29ycnVwdGVkIGhlYWRlciAtICIKKwkJICAgICAgICJmb3JjaW5nIGEgcmVjb25uZWN0XG4iLAorCQkgICAgICAgJmNvbm4tPmNfZmFkZHIpOworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kcm9wX2JhZF9jaGVja3N1bSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBQcm9jZXNzIHRoZSBBQ0sgc2VxdWVuY2Ugd2hpY2ggY29tZXMgd2l0aCBldmVyeSBwYWNrZXQgKi8KKwlzdGF0ZS0+YWNrX3JlY3YgPSBiZTY0X3RvX2NwdShpaGRyLT5oX2Fjayk7CisJc3RhdGUtPmFja19yZWN2X3ZhbGlkID0gMTsKKworCS8qIFByb2Nlc3MgdGhlIGNyZWRpdHMgdXBkYXRlIGlmIHRoZXJlIHdhcyBvbmUgKi8KKwlpZiAoaWhkci0+aF9jcmVkaXQpCisJCXJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKGNvbm4sIGloZHItPmhfY3JlZGl0KTsKKworCWlmIChpaGRyLT5oX3Nwb3J0ID09IDAgJiYgaWhkci0+aF9kcG9ydCA9PSAwICYmIGJ5dGVfbGVuID09IDApIHsKKwkJLyogVGhpcyBpcyBhbiBBQ0stb25seSBwYWNrZXQuIFRoZSBmYWN0IHRoYXQgaXQgZ2V0cworCQkgKiBzcGVjaWFsIHRyZWF0bWVudCBoZXJlIGlzIHRoYXQgaGlzdG9yaWNhbGx5LCBBQ0tzCisJCSAqIHdlcmUgcmF0aGVyIHNwZWNpYWwgYmVhc3RzLgorCQkgKi8KKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX2Fja19yZWNlaXZlZCk7CisKKwkJLyoKKwkJICogVXN1YWxseSB0aGUgZnJhZ3MgbWFrZSB0aGVpciB3YXkgb24gdG8gaW5jcyBhbmQgYXJlIHRoZW4gZnJlZWQgYXMKKwkJICogdGhlIGluYyBpcyBmcmVlZC4gIFdlIGRvbid0IGdvIHRoYXQgcm91dGUsIHNvIHdlIGhhdmUgdG8gZHJvcCB0aGUKKwkJICogcGFnZSByZWYgb3Vyc2VsdmVzLiAgV2UgY2FuJ3QganVzdCBsZWF2ZSB0aGUgcGFnZSBvbiB0aGUgcmVjdgorCQkgKiBiZWNhdXNlIHRoYXQgY29uZnVzZXMgdGhlIGRtYSBtYXBwaW5nIG9mIHBhZ2VzIGFuZCBlYWNoIHJlY3YncyB1c2UKKwkJICogb2YgYSBwYXJ0aWFsIHBhZ2UuICBXZSBjYW4gbGVhdmUgdGhlIGZyYWcsIHRob3VnaCwgaXQgd2lsbCBiZQorCQkgKiByZXVzZWQuCisJCSAqCisJCSAqIEZJWE1FOiBGb2xkIHRoaXMgaW50byB0aGUgY29kZSBwYXRoIGJlbG93LgorCQkgKi8KKwkJcmRzX2liX2ZyYWdfZHJvcF9wYWdlKHJlY3YtPnJfZnJhZyk7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBhbiBpbmMgb24gdGhlIGNvbm5lY3Rpb24gdGhlbiB0aGlzCisJICogZnJhZ21lbnQgaGFzIGEgaGVhZGVyIGFuZCBzdGFydHMgYSBtZXNzYWdlLi4gY29weSBpdHMgaGVhZGVyCisJICogaW50byB0aGUgaW5jIGFuZCBzYXZlIHRoZSBpbmMgc28gd2UgY2FuIGhhbmcgdXBjb21pbmcgZnJhZ21lbnRzCisJICogb2ZmIGl0cyBsaXN0LgorCSAqLworCWlmIChpYmluYyA9PSBOVUxMKSB7CisJCWliaW5jID0gcmVjdi0+cl9pYmluYzsKKwkJcmVjdi0+cl9pYmluYyA9IE5VTEw7CisJCWljLT5pX2liaW5jID0gaWJpbmM7CisKKwkJaGRyID0gJmliaW5jLT5paV9pbmMuaV9oZHI7CisJCW1lbWNweShoZHIsIGloZHIsIHNpemVvZigqaGRyKSk7CisJCWljLT5pX3JlY3ZfZGF0YV9yZW0gPSBiZTMyX3RvX2NwdShoZHItPmhfbGVuKTsKKworCQlyZHNkZWJ1ZygiaWMgJXAgaWJpbmMgJXAgcmVtICV1IGZsYWcgMHgleFxuIiwgaWMsIGliaW5jLAorCQkJIGljLT5pX3JlY3ZfZGF0YV9yZW0sIGhkci0+aF9mbGFncyk7CisJfSBlbHNlIHsKKwkJaGRyID0gJmliaW5jLT5paV9pbmMuaV9oZHI7CisJCS8qIFdlIGNhbid0IGp1c3QgdXNlIG1lbWNtcCBoZXJlOyBmcmFnbWVudHMgb2YgYQorCQkgKiBzaW5nbGUgbWVzc2FnZSBtYXkgY2FycnkgZGlmZmVyZW50IEFDS3MgKi8KKwkJaWYgKGhkci0+aF9zZXF1ZW5jZSAhPSBpaGRyLT5oX3NlcXVlbmNlCisJCSB8fCBoZHItPmhfbGVuICE9IGloZHItPmhfbGVuCisJCSB8fCBoZHItPmhfc3BvcnQgIT0gaWhkci0+aF9zcG9ydAorCQkgfHwgaGRyLT5oX2Rwb3J0ICE9IGloZHItPmhfZHBvcnQpIHsKKwkJCXJkc19pYl9jb25uX2Vycm9yKGNvbm4sCisJCQkJImZyYWdtZW50IGhlYWRlciBtaXNtYXRjaDsgZm9yY2luZyByZWNvbm5lY3RcbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJbGlzdF9hZGRfdGFpbCgmcmVjdi0+cl9mcmFnLT5mX2l0ZW0sICZpYmluYy0+aWlfZnJhZ3MpOworCXJlY3YtPnJfZnJhZyA9IE5VTEw7CisKKwlpZiAoaWMtPmlfcmVjdl9kYXRhX3JlbSA+IFJEU19GUkFHX1NJWkUpCisJCWljLT5pX3JlY3ZfZGF0YV9yZW0gLT0gUkRTX0ZSQUdfU0laRTsKKwllbHNlIHsKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSA9IDA7CisJCWljLT5pX2liaW5jID0gTlVMTDsKKworCQlpZiAoaWJpbmMtPmlpX2luYy5pX2hkci5oX2ZsYWdzID09IFJEU19GTEFHX0NPTkdfQklUTUFQKQorCQkJcmRzX2liX2NvbmdfcmVjdihjb25uLCBpYmluYyk7CisJCWVsc2UgeworCQkJcmRzX3JlY3ZfaW5jb21pbmcoY29ubiwgY29ubi0+Y19mYWRkciwgY29ubi0+Y19sYWRkciwKKwkJCQkJICAmaWJpbmMtPmlpX2luYywgR0ZQX0FUT01JQywKKwkJCQkJICBLTV9TT0ZUSVJRMCk7CisJCQlzdGF0ZS0+YWNrX25leHQgPSBiZTY0X3RvX2NwdShoZHItPmhfc2VxdWVuY2UpOworCQkJc3RhdGUtPmFja19uZXh0X3ZhbGlkID0gMTsKKwkJfQorCisJCS8qIEV2YWx1YXRlIHRoZSBBQ0tfUkVRVUlSRUQgZmxhZyAqYWZ0ZXIqIHdlIHJlY2VpdmVkCisJCSAqIHRoZSBjb21wbGV0ZSBmcmFtZSwgYW5kIGFmdGVyIGJ1bXBpbmcgdGhlIG5leHRfcngKKwkJICogc2VxdWVuY2UuICovCisJCWlmIChoZHItPmhfZmxhZ3MgJiBSRFNfRkxBR19BQ0tfUkVRVUlSRUQpIHsKKwkJCXJkc19zdGF0c19pbmMoc19yZWN2X2Fja19yZXF1aXJlZCk7CisJCQlzdGF0ZS0+YWNrX3JlcXVpcmVkID0gMTsKKwkJfQorCisJCXJkc19pbmNfcHV0KCZpYmluYy0+aWlfaW5jKTsKKwl9Cit9CisKKy8qCisgKiBQbHVja2luZyB0aGUgb2xkZXN0IGVudHJ5IGZyb20gdGhlIHJpbmcgY2FuIGJlIGRvbmUgY29uY3VycmVudGx5IHdpdGgKKyAqIHRoZSB0aHJlYWQgcmVmaWxsaW5nIHRoZSByaW5nLiAgRWFjaCByaW5nIG9wZXJhdGlvbiBpcyBwcm90ZWN0ZWQgYnkKKyAqIHNwaW5sb2NrcyBhbmQgdGhlIHRyYW5zaWVudCBzdGF0ZSBvZiByZWZpbGxpbmcgZG9lc24ndCBjaGFuZ2UgdGhlCisgKiByZWNvcmRpbmcgb2Ygd2hpY2ggZW50cnkgaXMgb2xkZXN0LgorICoKKyAqIFRoaXMgcmVsaWVzIG9uIElCIG9ubHkgY2FsbGluZyBvbmUgY3EgY29tcF9oYW5kbGVyIGZvciBlYWNoIGNxIHNvIHRoYXQKKyAqIHRoZXJlIHdpbGwgb25seSBiZSBvbmUgY2FsbGVyIG9mIHJkc19yZWN2X2luY29taW5nKCkgcGVyIFJEUyBjb25uZWN0aW9uLgorICovCit2b2lkIHJkc19pYl9yZWN2X2NxX2NvbXBfaGFuZGxlcihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRleHQ7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX3djIHdjOworCXN0cnVjdCByZHNfaWJfYWNrX3N0YXRlIHN0YXRlID0geyAwLCB9OworCXN0cnVjdCByZHNfaWJfcmVjdl93b3JrICpyZWN2OworCisJcmRzZGVidWcoImNvbm4gJXAgY3EgJXBcbiIsIGNvbm4sIGNxKTsKKworCXJkc19pYl9zdGF0c19pbmMoc19pYl9yeF9jcV9jYWxsKTsKKworCWliX3JlcV9ub3RpZnlfY3EoY3EsIElCX0NRX1NPTElDSVRFRCk7CisKKwl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKKwkJcmRzZGVidWcoIndjIHdyX2lkIDB4JWxseCBzdGF0dXMgJXUgYnl0ZV9sZW4gJXUgaW1tX2RhdGEgJXVcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl3Yy53cl9pZCwgd2Muc3RhdHVzLCB3Yy5ieXRlX2xlbiwKKwkJCSBiZTMyX3RvX2NwdSh3Yy5leC5pbW1fZGF0YSkpOworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfcnhfY3FfZXZlbnQpOworCisJCXJlY3YgPSAmaWMtPmlfcmVjdnNbcmRzX2liX3Jpbmdfb2xkZXN0KCZpYy0+aV9yZWN2X3JpbmcpXTsKKworCQlyZHNfaWJfcmVjdl91bm1hcF9wYWdlKGljLCByZWN2KTsKKworCQkvKgorCQkgKiBBbHNvIHByb2Nlc3MgcmVjdnMgaW4gY29ubmVjdGluZyBzdGF0ZSBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlCisJCSAqIHRvIGdldCBhIHJlY3YgY29tcGxldGlvbiBfYmVmb3JlXyB0aGUgcmRtYWNtIEVTVEFCTElTSEVECisJCSAqIGV2ZW50IGlzIHByb2Nlc3NlZC4KKwkJICovCisJCWlmIChyZHNfY29ubl91cChjb25uKSB8fCByZHNfY29ubl9jb25uZWN0aW5nKGNvbm4pKSB7CisJCQkvKiBXZSBleHBlY3QgZXJyb3JzIGFzIHRoZSBxcCBpcyBkcmFpbmVkIGR1cmluZyBzaHV0ZG93biAqLworCQkJaWYgKHdjLnN0YXR1cyA9PSBJQl9XQ19TVUNDRVNTKSB7CisJCQkJcmRzX2liX3Byb2Nlc3NfcmVjdihjb25uLCByZWN2LCB3Yy5ieXRlX2xlbiwgJnN0YXRlKTsKKwkJCX0gZWxzZSB7CisJCQkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwgInJlY3YgY29tcGxldGlvbiBvbiAiCisJCQkJICAgICAgICIlcEk0IGhhZCBzdGF0dXMgJXUsIGRpc2Nvbm5lY3RpbmcgYW5kICIKKwkJCQkgICAgICAgInJlY29ubmVjdGluZ1xuIiwgJmNvbm4tPmNfZmFkZHIsCisJCQkJICAgICAgIHdjLnN0YXR1cyk7CisJCQl9CisJCX0KKworCQlyZHNfaWJfcmluZ19mcmVlKCZpYy0+aV9yZWN2X3JpbmcsIDEpOworCX0KKworCWlmIChzdGF0ZS5hY2tfbmV4dF92YWxpZCkKKwkJcmRzX2liX3NldF9hY2soaWMsIHN0YXRlLmFja19uZXh0LCBzdGF0ZS5hY2tfcmVxdWlyZWQpOworCWlmIChzdGF0ZS5hY2tfcmVjdl92YWxpZCAmJiBzdGF0ZS5hY2tfcmVjdiA+IGljLT5pX2Fja19yZWN2KSB7CisJCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgc3RhdGUuYWNrX3JlY3YsIE5VTEwpOworCQlpYy0+aV9hY2tfcmVjdiA9IHN0YXRlLmFja19yZWN2OworCX0KKwlpZiAocmRzX2Nvbm5fdXAoY29ubikpCisJCXJkc19pYl9hdHRlbXB0X2FjayhpYyk7CisKKwkvKiBJZiB3ZSBldmVyIGVuZCB1cCB3aXRoIGEgcmVhbGx5IGVtcHR5IHJlY2VpdmUgcmluZywgd2UncmUKKwkgKiBpbiBkZWVwIHRyb3VibGUsIGFzIHRoZSBzZW5kZXIgd2lsbCBkZWZpbml0ZWx5IHNlZSBSTlIKKwkgKiB0aW1lb3V0cy4gKi8KKwlpZiAocmRzX2liX3JpbmdfZW1wdHkoJmljLT5pX3JlY3ZfcmluZykpCisJCXJkc19pYl9zdGF0c19pbmMoc19pYl9yeF9yaW5nX2VtcHR5KTsKKworCS8qCisJICogSWYgdGhlIHJpbmcgaXMgcnVubmluZyBsb3csIHRoZW4gc2NoZWR1bGUgdGhlIHRocmVhZCB0byByZWZpbGwuCisJICovCisJaWYgKHJkc19pYl9yaW5nX2xvdygmaWMtPmlfcmVjdl9yaW5nKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfcmVjdl93LCAwKTsKK30KKworaW50IHJkc19pYl9yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCXJkc2RlYnVnKCJjb25uICVwXG4iLCBjb25uKTsKKworCS8qCisJICogSWYgd2UgZ2V0IGEgdGVtcG9yYXJ5IHBvc3RpbmcgZmFpbHVyZSBpbiB0aGlzIGNvbnRleHQgdGhlbgorCSAqIHdlJ3JlIHJlYWxseSBsb3cgYW5kIHdlIHdhbnQgdGhlIGNhbGxlciB0byBiYWNrIG9mZiBmb3IgYSBiaXQuCisJICovCisJbXV0ZXhfbG9jaygmaWMtPmlfcmVjdl9tdXRleCk7CisJaWYgKHJkc19pYl9yZWN2X3JlZmlsbChjb25uLCBHRlBfS0VSTkVMLCBHRlBfSElHSFVTRVIsIDApKQorCQlyZXQgPSAtRU5PTUVNOworCWVsc2UKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3J4X3JlZmlsbF9mcm9tX3RocmVhZCk7CisJbXV0ZXhfdW5sb2NrKCZpYy0+aV9yZWN2X211dGV4KTsKKworCWlmIChyZHNfY29ubl91cChjb25uKSkKKwkJcmRzX2liX2F0dGVtcHRfYWNrKGljKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2luaXQgcmRzX2liX3JlY3ZfaW5pdCh2b2lkKQoreworCXN0cnVjdCBzeXNpbmZvIHNpOworCWludCByZXQgPSAtRU5PTUVNOworCisJLyogRGVmYXVsdCB0byAzMCUgb2YgYWxsIGF2YWlsYWJsZSBSQU0gZm9yIHJlY3YgbWVtb3J5ICovCisJc2lfbWVtaW5mbygmc2kpOworCXJkc19pYl9zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbiA9IHNpLnRvdGFscmFtIC8gMyAqIFBBR0VfU0laRSAvIFJEU19GUkFHX1NJWkU7CisKKwlyZHNfaWJfaW5jb21pbmdfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZHNfaWJfaW5jb21pbmciLAorCQkJCQlzaXplb2Yoc3RydWN0IHJkc19pYl9pbmNvbWluZyksCisJCQkJCTAsIDAsIE5VTEwpOworCWlmIChyZHNfaWJfaW5jb21pbmdfc2xhYiA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJkc19pYl9mcmFnX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgicmRzX2liX2ZyYWciLAorCQkJCQlzaXplb2Yoc3RydWN0IHJkc19wYWdlX2ZyYWcpLAorCQkJCQkwLCAwLCBOVUxMKTsKKwlpZiAocmRzX2liX2ZyYWdfc2xhYiA9PSBOVUxMKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2liX2luY29taW5nX3NsYWIpOworCWVsc2UKKwkJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pYl9yZWN2X2V4aXQodm9pZCkKK3sKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kocmRzX2liX2luY29taW5nX3NsYWIpOworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaWJfZnJhZ19zbGFiKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfcmluZy5jIGIvbmV0L3Jkcy9pYl9yaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlhNmNjYQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfcmluZy5jCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImliLmgiCisKKy8qCisgKiBMb2NraW5nIGZvciBJQiByaW5ncy4KKyAqIFdlIGFzc3VtZSB0aGF0IGFsbG9jYXRpb24gaXMgYWx3YXlzIHByb3RlY3RlZCBieSBhIG11dGV4CisgKiBpbiB0aGUgY2FsbGVyICh0aGlzIGlzIGEgdmFsaWQgYXNzdW1wdGlvbiBmb3IgdGhlIGN1cnJlbnQKKyAqIGltcGxlbWVudGF0aW9uKS4KKyAqCisgKiBGcmVlaW5nIGFsd2F5cyBoYXBwZW5zIGluIGFuIGludGVycnVwdCwgYW5kIGhlbmNlIG9ubHkKKyAqIHJhY2VzIHdpdGggYWxsb2NhdGlvbnMsIGJ1dCBub3Qgd2l0aCBvdGhlciBmcmVlKClzLgorICoKKyAqIFRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgaXMgdGhhdAorICogdGhlIGFsbG9jIGNvZGUgaGFzIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGZyZWUgZW50cmllcy4KKyAqIFRvIHRoaXMgZW5kLCB3ZSBtYWludGFpbiB0d28gY291bnRlcnM7IGFuIGFsbG9jYXRpb24gY291bnRlcgorICogYW5kIGEgZnJlZSBjb3VudGVyLiBCb3RoIGFyZSBhbGxvd2VkIHRvIHJ1biBmcmVlbHksIGFuZCB3cmFwCisgKiBhcm91bmQuCisgKiBUaGUgbnVtYmVyIG9mIHVzZWQgZW50cmllcyBpcyBhbHdheXMgKGFsbG9jX2N0ciAtIGZyZWVfY3RyKSAlIE5SLgorICoKKyAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG1ha2VzIGZyZWVfY3RyIGF0b21pYy4gV2hlbiB0aGUKKyAqIGNhbGxlciBmaW5kcyBhbiBhbGxvY2F0aW9uIGZhaWxzLCBpdCBzaG91bGQgc2V0IGFuICJhbGxvYyBmYWlsIgorICogYml0IGFuZCByZXRyeSB0aGUgYWxsb2NhdGlvbi4gVGhlICJhbGxvYyBmYWlsIiBiaXQgZXNzZW50aWFsbHkgdGVsbHMKKyAqIHRoZSBDUSBjb21wbGV0aW9uIGhhbmRsZXJzIHRvIHdha2UgaXQgdXAgYWZ0ZXIgZnJlZWluZyBzb21lCisgKiBtb3JlIGVudHJpZXMuCisgKi8KKworLyoKKyAqIFRoaXMgb25seSBoYXBwZW5zIG9uIHNodXRkb3duLgorICovCitERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChyZHNfaWJfcmluZ19lbXB0eV93YWl0KTsKKwordm9pZCByZHNfaWJfcmluZ19pbml0KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgbnIpCit7CisJbWVtc2V0KHJpbmcsIDAsIHNpemVvZigqcmluZykpOworCXJpbmctPndfbnIgPSBucjsKKwlyZHNkZWJ1ZygicmluZyAlcCBuciAldVxuIiwgcmluZywgcmluZy0+d19ucik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIF9fcmRzX2liX3JpbmdfdXNlZChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZykKK3sKKwl1MzIgZGlmZjsKKworCS8qIFRoaXMgYXNzdW1lcyB0aGF0IGF0b21pY190IGhhcyBhdCBsZWFzdCBhcyBtYW55IGJpdHMgYXMgdTMyICovCisJZGlmZiA9IHJpbmctPndfYWxsb2NfY3RyIC0gKHUzMikgYXRvbWljX3JlYWQoJnJpbmctPndfZnJlZV9jdHIpOworCUJVR19PTihkaWZmID4gcmluZy0+d19ucik7CisKKwlyZXR1cm4gZGlmZjsKK30KKwordm9pZCByZHNfaWJfcmluZ19yZXNpemUoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcsIHUzMiBucikKK3sKKwkvKiBXZSBvbmx5IGV2ZXIgZ2V0IGNhbGxlZCBmcm9tIHRoZSBjb25uZWN0aW9uIHNldHVwIGNvZGUsCisJICogcHJpb3IgdG8gY3JlYXRpbmcgdGhlIFFQLiAqLworCUJVR19PTihfX3Jkc19pYl9yaW5nX3VzZWQocmluZykpOworCXJpbmctPndfbnIgPSBucjsKK30KKworc3RhdGljIGludCBfX3Jkc19pYl9yaW5nX2VtcHR5KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiBfX3Jkc19pYl9yaW5nX3VzZWQocmluZykgPT0gMDsKK30KKwordTMyIHJkc19pYl9yaW5nX2FsbG9jKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsLCB1MzIgKnBvcykKK3sKKwl1MzIgcmV0ID0gMCwgYXZhaWw7CisKKwlhdmFpbCA9IHJpbmctPndfbnIgLSBfX3Jkc19pYl9yaW5nX3VzZWQocmluZyk7CisKKwlyZHNkZWJ1ZygicmluZyAlcCB2YWwgJXUgbmV4dCAldSBmcmVlICV1XG4iLCByaW5nLCB2YWwsCisJCSByaW5nLT53X2FsbG9jX3B0ciwgYXZhaWwpOworCisJaWYgKHZhbCAmJiBhdmFpbCkgeworCQlyZXQgPSBtaW4odmFsLCBhdmFpbCk7CisJCSpwb3MgPSByaW5nLT53X2FsbG9jX3B0cjsKKworCQlyaW5nLT53X2FsbG9jX3B0ciA9IChyaW5nLT53X2FsbG9jX3B0ciArIHJldCkgJSByaW5nLT53X25yOworCQlyaW5nLT53X2FsbG9jX2N0ciArPSByZXQ7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfaWJfcmluZ19mcmVlKHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKQoreworCXJpbmctPndfZnJlZV9wdHIgPSAocmluZy0+d19mcmVlX3B0ciArIHZhbCkgJSByaW5nLT53X25yOworCWF0b21pY19hZGQodmFsLCAmcmluZy0+d19mcmVlX2N0cik7CisKKwlpZiAoX19yZHNfaWJfcmluZ19lbXB0eShyaW5nKSAmJgorCSAgICB3YWl0cXVldWVfYWN0aXZlKCZyZHNfaWJfcmluZ19lbXB0eV93YWl0KSkKKwkJd2FrZV91cCgmcmRzX2liX3JpbmdfZW1wdHlfd2FpdCk7Cit9CisKK3ZvaWQgcmRzX2liX3JpbmdfdW5hbGxvYyhzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCkKK3sKKwlyaW5nLT53X2FsbG9jX3B0ciA9IChyaW5nLT53X2FsbG9jX3B0ciAtIHZhbCkgJSByaW5nLT53X25yOworCXJpbmctPndfYWxsb2NfY3RyIC09IHZhbDsKK30KKworaW50IHJkc19pYl9yaW5nX2VtcHR5KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiBfX3Jkc19pYl9yaW5nX2VtcHR5KHJpbmcpOworfQorCitpbnQgcmRzX2liX3JpbmdfbG93KHN0cnVjdCByZHNfaWJfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiBfX3Jkc19pYl9yaW5nX3VzZWQocmluZykgPD0gKHJpbmctPndfbnIgPj4gMik7Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSBvbGRlc3QgYWxsb2NlZCByaW5nIGVudHJ5LiAgVGhpcyB3aWxsIGJlIHRoZSBuZXh0IG9uZQorICogZnJlZWQuICBUaGlzIGNhbid0IGJlIGNhbGxlZCBpZiB0aGVyZSBhcmUgbm9uZSBhbGxvY2F0ZWQuCisgKi8KK3UzMiByZHNfaWJfcmluZ19vbGRlc3Qoc3RydWN0IHJkc19pYl93b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIHJpbmctPndfZnJlZV9wdHI7Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIHdvcmsgcmVxdWVzdHMuCisgKi8KKwordTMyIHJkc19pYl9yaW5nX2NvbXBsZXRlZChzdHJ1Y3QgcmRzX2liX3dvcmtfcmluZyAqcmluZywgdTMyIHdyX2lkLCB1MzIgb2xkZXN0KQoreworCXUzMiByZXQ7CisKKwlpZiAob2xkZXN0IDw9ICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQpCisJCXJldCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQgLSBvbGRlc3QgKyAxOworCWVsc2UKKwkJcmV0ID0gcmluZy0+d19uciAtIG9sZGVzdCArICh1bnNpZ25lZCBsb25nIGxvbmcpd3JfaWQgKyAxOworCisJcmRzZGVidWcoInJpbmcgJXAgcmV0ICV1IHdyX2lkICV1IG9sZGVzdCAldVxuIiwgcmluZywgcmV0LAorCQkgd3JfaWQsIG9sZGVzdCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvaWJfc2VuZC5jIGIvbmV0L3Jkcy9pYl9zZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2YzUyYwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfc2VuZC5jCkBAIC0wLDAgKzEsODc0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKyNpbmNsdWRlICJpYi5oIgorCitzdGF0aWMgdm9pZCByZHNfaWJfc2VuZF9yZG1hX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkJICAgICAgaW50IHdjX3N0YXR1cykKK3sKKwlpbnQgbm90aWZ5X3N0YXR1czsKKworCXN3aXRjaCAod2Nfc3RhdHVzKSB7CisJY2FzZSBJQl9XQ19XUl9GTFVTSF9FUlI6CisJCXJldHVybjsKKworCWNhc2UgSUJfV0NfU1VDQ0VTUzoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX1NVQ0NFU1M7CisJCWJyZWFrOworCisJY2FzZSBJQl9XQ19SRU1fQUNDRVNTX0VSUjoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX1JFTU9URV9FUlJPUjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlub3RpZnlfc3RhdHVzID0gUkRTX1JETUFfT1RIRVJfRVJST1I7CisJCWJyZWFrOworCX0KKwlyZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHJtLCBub3RpZnlfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgcmRzX2liX3NlbmRfdW5tYXBfcmRtYShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApCit7CisJaWYgKG9wLT5yX21hcHBlZCkgeworCQlpYl9kbWFfdW5tYXBfc2coaWMtPmlfY21faWQtPmRldmljZSwKKwkJCW9wLT5yX3NnLCBvcC0+cl9uZW50cywKKwkJCW9wLT5yX3dyaXRlID8gRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CisJCW9wLT5yX21hcHBlZCA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaWJfc2VuZF91bm1hcF9ybShzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljLAorCQkJICBzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZCwKKwkJCSAgaW50IHdjX3N0YXR1cykKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gc2VuZC0+c19ybTsKKworCXJkc2RlYnVnKCJpYyAlcCBzZW5kICVwIHJtICVwXG4iLCBpYywgc2VuZCwgcm0pOworCisJaWJfZG1hX3VubWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCSAgICAgcm0tPm1fc2csIHJtLT5tX25lbnRzLAorCQkgICAgIERNQV9UT19ERVZJQ0UpOworCisJaWYgKHJtLT5tX3JkbWFfb3AgIT0gTlVMTCkgeworCQlyZHNfaWJfc2VuZF91bm1hcF9yZG1hKGljLCBybS0+bV9yZG1hX29wKTsKKworCQkvKiBJZiB0aGUgdXNlciBhc2tlZCBmb3IgYSBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbiBvbiB0aGlzCisJCSAqIG1lc3NhZ2UsIHdlIGNhbiBpbXBsZW1lbnQgdGhyZWUgZGlmZmVyZW50IHNlbWFudGljczoKKwkJICogIDEuCU5vdGlmeSB3aGVuIHdlIHJlY2VpdmVkIHRoZSBBQ0sgb24gdGhlIFJEUyBtZXNzYWdlCisJCSAqCXRoYXQgd2FzIHF1ZXVlZCB3aXRoIHRoZSBSRE1BLiBUaGlzIHByb3ZpZGVzIHJlbGlhYmxlCisJCSAqCW5vdGlmaWNhdGlvbiBvZiBSRE1BIHN0YXR1cyBhdCB0aGUgZXhwZW5zZSBvZiBhIG9uZS13YXkKKwkJICoJcGFja2V0IGRlbGF5LgorCQkgKiAgMi4JTm90aWZ5IHdoZW4gdGhlIElCIHN0YWNrIGdpdmVzIHVzIHRoZSBjb21wbGV0aW9uIGV2ZW50IGZvcgorCQkgKgl0aGUgUkRNQSBvcGVyYXRpb24uCisJCSAqICAzLglOb3RpZnkgd2hlbiB0aGUgSUIgc3RhY2sgZ2l2ZXMgdXMgdGhlIGNvbXBsZXRpb24gZXZlbnQgZm9yCisJCSAqCXRoZSBhY2NvbXBhbnlpbmcgUkRTIG1lc3NhZ2VzLgorCQkgKiBIZXJlLCB3ZSBpbXBsZW1lbnQgYXBwcm9hY2ggIzMuIFRvIGltcGxlbWVudCBhcHByb2FjaCAjMiwKKwkJICogY2FsbCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGZyb20gdGhlIGNxX2hhbmRsZXIuIFRvIGltcGxlbWVudCAjMSwKKwkJICogZG9uJ3QgY2FsbCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlIGF0IGFsbCwgYW5kIGZhbGwgYmFjayB0byB0aGUgbm90aWZ5CisJCSAqIGhhbmRsaW5nIGluIHRoZSBBQ0sgcHJvY2Vzc2luZyBjb2RlLgorCQkgKgorCQkgKiBOb3RlOiBUaGVyZSdzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBzeW5jIGFueSBSRE1BIGJ1ZmZlcnMgdXNpbmcKKwkJICogaWJfZG1hX3N5bmNfc2dfZm9yX2NwdSAtIHRoZSBjb21wbGV0aW9uIGZvciB0aGUgUkRNQQorCQkgKiBvcGVyYXRpb24gaXRzZWxmIHVubWFwcGVkIHRoZSBSRE1BIGJ1ZmZlcnMsIHdoaWNoIHRha2VzIGNhcmUKKwkJICogb2Ygc3luY2hpbmcuCisJCSAqLworCQlyZHNfaWJfc2VuZF9yZG1hX2NvbXBsZXRlKHJtLCB3Y19zdGF0dXMpOworCisJCWlmIChybS0+bV9yZG1hX29wLT5yX3dyaXRlKQorCQkJcmRzX3N0YXRzX2FkZChzX3NlbmRfcmRtYV9ieXRlcywgcm0tPm1fcmRtYV9vcC0+cl9ieXRlcyk7CisJCWVsc2UKKwkJCXJkc19zdGF0c19hZGQoc19yZWN2X3JkbWFfYnl0ZXMsIHJtLT5tX3JkbWFfb3AtPnJfYnl0ZXMpOworCX0KKworCS8qIElmIGFueW9uZSB3YWl0ZWQgZm9yIHRoaXMgbWVzc2FnZSB0byBnZXQgZmx1c2hlZCBvdXQsIHdha2UKKwkgKiB0aGVtIHVwIG5vdyAqLworCXJkc19tZXNzYWdlX3VubWFwcGVkKHJtKTsKKworCXJkc19tZXNzYWdlX3B1dChybSk7CisJc2VuZC0+c19ybSA9IE5VTEw7Cit9CisKK3ZvaWQgcmRzX2liX3NlbmRfaW5pdF9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCBzZW5kID0gaWMtPmlfc2VuZHM7IGkgPCBpYy0+aV9zZW5kX3Jpbmcud19ucjsgaSsrLCBzZW5kKyspIHsKKwkJc3RydWN0IGliX3NnZSAqc2dlOworCisJCXNlbmQtPnNfcm0gPSBOVUxMOworCQlzZW5kLT5zX29wID0gTlVMTDsKKworCQlzZW5kLT5zX3dyLndyX2lkID0gaTsKKwkJc2VuZC0+c193ci5zZ19saXN0ID0gc2VuZC0+c19zZ2U7CisJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfU0VORDsKKwkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gMDsKKwkJc2VuZC0+c193ci5leC5pbW1fZGF0YSA9IDA7CisKKwkJc2dlID0gcmRzX2liX2RhdGFfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCisJCXNnZSA9IHJkc19pYl9oZWFkZXJfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+YWRkciA9IGljLT5pX3NlbmRfaGRyc19kbWEgKyAoaSAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCQlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCX0KK30KKwordm9pZCByZHNfaWJfc2VuZF9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCBzZW5kID0gaWMtPmlfc2VuZHM7IGkgPCBpYy0+aV9zZW5kX3Jpbmcud19ucjsgaSsrLCBzZW5kKyspIHsKKwkJaWYgKHNlbmQtPnNfd3Iub3Bjb2RlID09IDB4ZGVhZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2VuZC0+c19ybSkKKwkJCXJkc19pYl9zZW5kX3VubWFwX3JtKGljLCBzZW5kLCBJQl9XQ19XUl9GTFVTSF9FUlIpOworCQlpZiAoc2VuZC0+c19vcCkKKwkJCXJkc19pYl9zZW5kX3VubWFwX3JkbWEoaWMsIHNlbmQtPnNfb3ApOworCX0KK30KKworLyoKKyAqIFRoZSBfb2xkZXN0L19mcmVlIHJpbmcgb3BlcmF0aW9ucyBoZXJlIHJhY2UgY2xlYW5seSB3aXRoIHRoZSBhbGxvYy91bmFsbG9jCisgKiBvcGVyYXRpb25zIHBlcmZvcm1lZCBpbiB0aGUgc2VuZCBwYXRoLiAgQXMgdGhlIHNlbmRlciBhbGxvY3MgYW5kIHBvdGVudGlhbGx5CisgKiB1bmFsbG9jcyB0aGUgbmV4dCBmcmVlIGVudHJ5IGluIHRoZSByaW5nIGl0IGRvZXNuJ3QgYWx0ZXIgd2hpY2ggaXMKKyAqIHRoZSBuZXh0IHRvIGJlIGZyZWVkLCB3aGljaCBpcyB3aGF0IHRoaXMgaXMgY29uY2VybmVkIHdpdGguCisgKi8KK3ZvaWQgcmRzX2liX3NlbmRfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDsKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQ7CisJdTMyIGNvbXBsZXRlZDsKKwl1MzIgb2xkZXN0OworCXUzMiBpID0gMDsKKwlpbnQgcmV0OworCisJcmRzZGVidWcoImNxICVwIGNvbm4gJXBcbiIsIGNxLCBjb25uKTsKKwlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfY3FfY2FsbCk7CisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShjcSwgSUJfQ1FfTkVYVF9DT01QKTsKKwlpZiAocmV0KQorCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSBzZW5kIGZhaWxlZDogJWRcbiIsIHJldCk7CisKKwl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKKwkJcmRzZGVidWcoIndjIHdyX2lkIDB4JWxseCBzdGF0dXMgJXUgYnl0ZV9sZW4gJXUgaW1tX2RhdGEgJXVcbiIsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyl3Yy53cl9pZCwgd2Muc3RhdHVzLCB3Yy5ieXRlX2xlbiwKKwkJCSBiZTMyX3RvX2NwdSh3Yy5leC5pbW1fZGF0YSkpOworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfY3FfZXZlbnQpOworCisJCWlmICh3Yy53cl9pZCA9PSBSRFNfSUJfQUNLX1dSX0lEKSB7CisJCQlpZiAoaWMtPmlfYWNrX3F1ZXVlZCArIEhaLzIgPCBqaWZmaWVzKQorCQkJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9zdGFsbGVkKTsKKwkJCXJkc19pYl9hY2tfc2VuZF9jb21wbGV0ZShpYyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW9sZGVzdCA9IHJkc19pYl9yaW5nX29sZGVzdCgmaWMtPmlfc2VuZF9yaW5nKTsKKworCQljb21wbGV0ZWQgPSByZHNfaWJfcmluZ19jb21wbGV0ZWQoJmljLT5pX3NlbmRfcmluZywgd2Mud3JfaWQsIG9sZGVzdCk7CisKKwkJZm9yIChpID0gMDsgaSA8IGNvbXBsZXRlZDsgaSsrKSB7CisJCQlzZW5kID0gJmljLT5pX3NlbmRzW29sZGVzdF07CisKKwkJCS8qIEluIHRoZSBlcnJvciBjYXNlLCB3Yy5vcGNvZGUgc29tZXRpbWVzIGNvbnRhaW5zIGdhcmJhZ2UgKi8KKwkJCXN3aXRjaCAoc2VuZC0+c193ci5vcGNvZGUpIHsKKwkJCWNhc2UgSUJfV1JfU0VORDoKKwkJCQlpZiAoc2VuZC0+c19ybSkKKwkJCQkJcmRzX2liX3NlbmRfdW5tYXBfcm0oaWMsIHNlbmQsIHdjLnN0YXR1cyk7CisJCQkJYnJlYWs7CisJCQljYXNlIElCX1dSX1JETUFfV1JJVEU6CisJCQljYXNlIElCX1dSX1JETUFfUkVBRDoKKwkJCQkvKiBOb3RoaW5nIHRvIGJlIGRvbmUgLSB0aGUgU0cgbGlzdCB3aWxsIGJlIHVubWFwcGVkCisJCQkJICogd2hlbiB0aGUgU0VORCBjb21wbGV0ZXMuICovCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJCXByaW50ayhLRVJOX05PVElDRQorCQkJCQkJIlJEUy9JQjogJXM6IHVuZXhwZWN0ZWQgb3Bjb2RlIDB4JXggaW4gV1IhXG4iLAorCQkJCQkJX19mdW5jX18sIHNlbmQtPnNfd3Iub3Bjb2RlKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc2VuZC0+c193ci5vcGNvZGUgPSAweGRlYWQ7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQkJaWYgKHNlbmQtPnNfcXVldWVkICsgSFovMiA8IGppZmZpZXMpCisJCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3N0YWxsZWQpOworCisJCQkvKiBJZiBhIFJETUEgb3BlcmF0aW9uIHByb2R1Y2VkIGFuIGVycm9yLCBzaWduYWwgdGhpcyByaWdodAorCQkJICogYXdheS4gSWYgd2UgZG9uJ3QsIHRoZSBzdWJzZXF1ZW50IFNFTkQgdGhhdCBnb2VzIHdpdGggdGhpcworCQkJICogUkRNQSB3aWxsIGJlIGNhbmNlbGVkIHdpdGggRVJSX1dGTFVTSCwgYW5kIHRoZSBhcHBsaWNhdGlvbgorCQkJICogbmV2ZXIgbGVhcm4gdGhhdCB0aGUgUkRNQSBmYWlsZWQuICovCisJCQlpZiAodW5saWtlbHkod2Muc3RhdHVzID09IElCX1dDX1JFTV9BQ0NFU1NfRVJSICYmIHNlbmQtPnNfb3ApKSB7CisJCQkJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKworCQkJCXJtID0gcmRzX3NlbmRfZ2V0X21lc3NhZ2UoY29ubiwgc2VuZC0+c19vcCk7CisJCQkJaWYgKHJtKQorCQkJCQlyZHNfaWJfc2VuZF9yZG1hX2NvbXBsZXRlKHJtLCB3Yy5zdGF0dXMpOworCQkJfQorCisJCQlvbGRlc3QgPSAob2xkZXN0ICsgMSkgJSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwkJfQorCisJCXJkc19pYl9yaW5nX2ZyZWUoJmljLT5pX3NlbmRfcmluZywgY29tcGxldGVkKTsKKworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKQorCQkgfHwgdGVzdF9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCkpCisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCisJCS8qIFdlIGV4cGVjdCBlcnJvcnMgYXMgdGhlIHFwIGlzIGRyYWluZWQgZHVyaW5nIHNodXRkb3duICovCisJCWlmICh3Yy5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUyAmJiByZHNfY29ubl91cChjb25uKSkgeworCQkJcmRzX2liX2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkic2VuZCBjb21wbGV0aW9uIG9uICVwSTQgIgorCQkJCSJoYWQgc3RhdHVzICV1LCBkaXNjb25uZWN0aW5nIGFuZCByZWNvbm5lY3RpbmdcbiIsCisJCQkJJmNvbm4tPmNfZmFkZHIsIHdjLnN0YXR1cyk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBhbGxvY2F0aW5nIGNyZWRpdHMgd2hlbiBzZW5kaW5nCisgKiBtZXNzYWdlcy4KKyAqCisgKiBDb25jZXB0dWFsbHksIHdlIGhhdmUgdHdvIGNvdW50ZXJzOgorICogIC0Jc2VuZCBjcmVkaXRzOiB0aGlzIHRlbGxzIHVzIGhvdyBtYW55IFdScyB3ZSdyZSBhbGxvd2VkCisgKgl0byBzdWJtaXQgd2l0aG91dCBvdmVycnVuaW5nIHRoZSByZWNpZXZlcidzIHF1ZXVlLiBGb3IKKyAqCWVhY2ggU0VORCBXUiB3ZSBwb3N0LCB3ZSBkZWNyZW1lbnQgdGhpcyBieSBvbmUuCisgKgorICogIC0JcG9zdGVkIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlIHJlY2VudGx5CisgKglwb3N0ZWQgdG8gdGhlIHJlY2VpdmUgcXVldWUuIFRoaXMgdmFsdWUgaXMgdHJhbnNmZXJyZWQKKyAqCXRvIHRoZSBwZWVyIGFzIGEgImNyZWRpdCB1cGRhdGUiIGluIGEgUkRTIGhlYWRlciBmaWVsZC4KKyAqCUV2ZXJ5IHRpbWUgd2UgdHJhbnNtaXQgY3JlZGl0cyB0byB0aGUgcGVlciwgd2Ugc3VidHJhY3QKKyAqCXRoZSBhbW91bnQgb2YgdHJhbnNmZXJyZWQgY3JlZGl0cyBmcm9tIHRoaXMgY291bnRlci4KKyAqCisgKiBJdCBpcyBlc3NlbnRpYWwgdGhhdCB3ZSBhdm9pZCBzaXR1YXRpb25zIHdoZXJlIGJvdGggc2lkZXMgaGF2ZQorICogZXhoYXVzdGVkIHRoZWlyIHNlbmQgY3JlZGl0cywgYW5kIGFyZSB1bmFibGUgdG8gc2VuZCBuZXcgY3JlZGl0cworICogdG8gdGhlIHBlZXIuIFdlIGFjaGlldmUgdGhpcyBieSByZXF1aXJpbmcgdGhhdCB3ZSBzZW5kIGF0IGxlYXN0CisgKiBvbmUgY3JlZGl0IHVwZGF0ZSB0byB0aGUgcGVlciBiZWZvcmUgZXhoYXVzdGluZyBvdXIgY3JlZGl0cy4KKyAqIFdoZW4gbmV3IGNyZWRpdHMgYXJyaXZlLCB3ZSBzdWJ0cmFjdCBvbmUgY3JlZGl0IHRoYXQgaXMgd2l0aGhlbGQKKyAqIHVudGlsIHdlJ3ZlIHBvc3RlZCBuZXcgYnVmZmVycyBhbmQgYXJlIHJlYWR5IHRvIHRyYW5zbWl0IHRoZXNlCisgKiBjcmVkaXRzIChzZWUgcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMgYmVsb3cpLgorICoKKyAqIFRoZSBSRFMgc2VuZCBjb2RlIGlzIGVzc2VudGlhbGx5IHNpbmdsZS10aHJlYWRlZDsgcmRzX3NlbmRfeG1pdAorICogZ3JhYnMgY19zZW5kX2xvY2sgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHNlbmQgcmluZy4KKyAqIEhvd2V2ZXIsIHRoZSBBQ0sgc2VuZGluZyBjb2RlIGlzIGluZGVwZW5kZW50IGFuZCBjYW4gcmFjZSB3aXRoCisgKiBtZXNzYWdlIFNFTkRzLgorICoKKyAqIEluIHRoZSBzZW5kIHBhdGgsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb3VudGVycyBmb3Igc2VuZCBjcmVkaXRzCisgKiBhbmQgdGhlIGNvdW50ZXIgb2YgcG9zdGVkIGJ1ZmZlcnMgYXRvbWljYWxseSAtIHdoZW4gd2UgdXNlIHRoZQorICogbGFzdCBhdmFpbGFibGUgY3JlZGl0LCB3ZSBjYW5ub3QgYWxsb3cgYW5vdGhlciB0aHJlYWQgdG8gcmFjZSB1cworICogYW5kIGdyYWIgdGhlIHBvc3RlZCBjcmVkaXRzIGNvdW50ZXIuICBIZW5jZSwgd2UgaGF2ZSB0byB1c2UgYQorICogc3BpbmxvY2sgdG8gcHJvdGVjdCB0aGUgY3JlZGl0IGNvdW50ZXIsIG9yIHVzZSBhdG9taWNzLgorICoKKyAqIFNwaW5sb2NrcyBzaGFyZWQgYmV0d2VlbiB0aGUgc2VuZCBhbmQgdGhlIHJlY2VpdmUgcGF0aCBhcmUgYmFkLAorICogYmVjYXVzZSB0aGV5IGNyZWF0ZSB1bm5lY2Vzc2FyeSBkZWxheXMuIEFuIGVhcmx5IGltcGxlbWVudGF0aW9uCisgKiB1c2luZyBhIHNwaW5sb2NrIHNob3dlZCBhIDUlIGRlZ3JhZGF0aW9uIGluIHRocm91Z2hwdXQgYXQgc29tZQorICogbG9hZHMuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhdm9pZHMgc3BpbmxvY2tzIGNvbXBsZXRlbHksIHB1dHRpbmcgYm90aAorICogY291bnRlcnMgaW50byBhIHNpbmdsZSBhdG9taWMsIGFuZCB1cGRhdGluZyB0aGF0IGF0b21pYyB1c2luZworICogYXRvbWljX2FkZCAoaW4gdGhlIHJlY2VpdmUgcGF0aCwgd2hlbiByZWNlaXZpbmcgZnJlc2ggY3JlZGl0cyksCisgKiBhbmQgdXNpbmcgYXRvbWljX2NtcHhjaGcgd2hlbiB1cGRhdGluZyB0aGUgdHdvIGNvdW50ZXJzLgorICovCitpbnQgcmRzX2liX3NlbmRfZ3JhYl9jcmVkaXRzKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCQkgICAgIHUzMiB3YW50ZWQsIHUzMiAqYWR2X2NyZWRpdHMsIGludCBuZWVkX3Bvc3RlZCkKK3sKKwl1bnNpZ25lZCBpbnQgYXZhaWwsIHBvc3RlZCwgZ290ID0gMCwgYWR2ZXJ0aXNlOworCWxvbmcgb2xkdmFsLCBuZXd2YWw7CisKKwkqYWR2X2NyZWRpdHMgPSAwOworCWlmICghaWMtPmlfZmxvd2N0bCkKKwkJcmV0dXJuIHdhbnRlZDsKKwordHJ5X2FnYWluOgorCWFkdmVydGlzZSA9IDA7CisJb2xkdmFsID0gbmV3dmFsID0gYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpOworCXBvc3RlZCA9IElCX0dFVF9QT1NUX0NSRURJVFMob2xkdmFsKTsKKwlhdmFpbCA9IElCX0dFVF9TRU5EX0NSRURJVFMob2xkdmFsKTsKKworCXJkc2RlYnVnKCJyZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoJXUpOiBjcmVkaXRzPSV1IHBvc3RlZD0ldVxuIiwKKwkJCXdhbnRlZCwgYXZhaWwsIHBvc3RlZCk7CisKKwkvKiBUaGUgbGFzdCBjcmVkaXQgbXVzdCBiZSB1c2VkIHRvIHNlbmQgYSBjcmVkaXQgdXBkYXRlLiAqLworCWlmIChhdmFpbCAmJiAhcG9zdGVkKQorCQlhdmFpbC0tOworCisJaWYgKGF2YWlsIDwgd2FudGVkKSB7CisJCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGljLT5pX2NtX2lkLT5jb250ZXh0OworCisJCS8qIE9vcHMsIHRoZXJlIGFyZW4ndCB0aGF0IG1hbnkgY3JlZGl0cyBsZWZ0ISAqLworCQlzZXRfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKTsKKwkJZ290ID0gYXZhaWw7CisJfSBlbHNlIHsKKwkJLyogU29tZXRpbWVzIHlvdSBnZXQgd2hhdCB5b3Ugd2FudCwgbGFsYWxhLiAqLworCQlnb3QgPSB3YW50ZWQ7CisJfQorCW5ld3ZhbCAtPSBJQl9TRVRfU0VORF9DUkVESVRTKGdvdCk7CisKKwkvKgorCSAqIElmIG5lZWRfcG9zdGVkIGlzIG5vbi16ZXJvLCB0aGVuIHRoZSBjYWxsZXIgd2FudHMKKwkgKiB0aGUgcG9zdGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhbnkgc2VuZCBjcmVkaXRzIGFyZQorCSAqIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAocG9zdGVkICYmIChnb3QgfHwgbmVlZF9wb3N0ZWQpKSB7CisJCWFkdmVydGlzZSA9IG1pbl90KHVuc2lnbmVkIGludCwgcG9zdGVkLCBSRFNfTUFYX0FEVl9DUkVESVQpOworCQluZXd2YWwgLT0gSUJfU0VUX1BPU1RfQ1JFRElUUyhhZHZlcnRpc2UpOworCX0KKworCS8qIEZpbmFsbHkgYmlsbCBldmVyeXRoaW5nICovCisJaWYgKGF0b21pY19jbXB4Y2hnKCZpYy0+aV9jcmVkaXRzLCBvbGR2YWwsIG5ld3ZhbCkgIT0gb2xkdmFsKQorCQlnb3RvIHRyeV9hZ2FpbjsKKworCSphZHZfY3JlZGl0cyA9IGFkdmVydGlzZTsKKwlyZXR1cm4gZ290OworfQorCit2b2lkIHJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IGNyZWRpdHMpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlpZiAoY3JlZGl0cyA9PSAwKQorCQlyZXR1cm47CisKKwlyZHNkZWJ1ZygicmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoJXUpOiBjdXJyZW50PSV1JXNcbiIsCisJCQljcmVkaXRzLAorCQkJSUJfR0VUX1NFTkRfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpLAorCQkJdGVzdF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpID8gIiwgbGxfc2VuZF9mdWxsIiA6ICIiKTsKKworCWF0b21pY19hZGQoSUJfU0VUX1NFTkRfQ1JFRElUUyhjcmVkaXRzKSwgJmljLT5pX2NyZWRpdHMpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCisJV0FSTl9PTihJQl9HRVRfU0VORF9DUkVESVRTKGNyZWRpdHMpID49IDE2Mzg0KTsKKworCXJkc19pYl9zdGF0c19pbmMoc19pYl9yeF9jcmVkaXRfdXBkYXRlcyk7Cit9CisKK3ZvaWQgcmRzX2liX2FkdmVydGlzZV9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHBvc3RlZCkKK3sKKwlzdHJ1Y3QgcmRzX2liX2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChwb3N0ZWQgPT0gMCkKKwkJcmV0dXJuOworCisJYXRvbWljX2FkZChJQl9TRVRfUE9TVF9DUkVESVRTKHBvc3RlZCksICZpYy0+aV9jcmVkaXRzKTsKKworCS8qIERlY2lkZSB3aGV0aGVyIHRvIHNlbmQgYW4gdXBkYXRlIHRvIHRoZSBwZWVyIG5vdy4KKwkgKiBJZiB3ZSB3b3VsZCBzZW5kIGEgY3JlZGl0IHVwZGF0ZSBmb3IgZXZlcnkgc2luZ2xlIGJ1ZmZlciB3ZQorCSAqIHBvc3QsIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGFuIEFDSyBzdG9ybSAoQUNLIGFycml2ZXMsCisJICogY29uc3VtZXMgYnVmZmVyLCB3ZSByZWZpbGwgdGhlIHJpbmcsIHNlbmQgQUNLIHRvIHJlbW90ZQorCSAqIGFkdmVydGlzaW5nIHRoZSBuZXdseSBwb3N0ZWQgYnVmZmVyLi4uIGFkIGluZikKKwkgKgorCSAqIFBlcmZvcm1hbmNlIHByZXR0eSBtdWNoIGRlcGVuZHMgb24gaG93IG9mdGVuIHdlIHNlbmQKKwkgKiBjcmVkaXQgdXBkYXRlcyAtIHRvbyBmcmVxdWVudCB1cGRhdGVzIG1lYW4gbG90cyBvZiBBQ0tzLgorCSAqIFRvbyBpbmZyZXF1ZW50IHVwZGF0ZXMsIGFuZCB0aGUgcGVlciB3aWxsIHJ1biBvdXQgb2YKKwkgKiBjcmVkaXRzIGFuZCBoYXMgdG8gdGhyb3R0bGUuCisJICogRm9yIHRoZSB0aW1lIGJlaW5nLCAxNiBzZWVtcyB0byBiZSBhIGdvb2QgY29tcHJvbWlzZS4KKwkgKi8KKwlpZiAoSUJfR0VUX1BPU1RfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpID49IDE2KQorCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3Jkc19pYl94bWl0X3BvcHVsYXRlX3dyKHN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMsCisJCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpzZW5kLCB1bnNpZ25lZCBpbnQgcG9zLAorCQl1bnNpZ25lZCBsb25nIGJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbmd0aCwKKwkJaW50IHNlbmRfZmxhZ3MpCit7CisJc3RydWN0IGliX3NnZSAqc2dlOworCisJV0FSTl9PTihwb3MgIT0gc2VuZCAtIGljLT5pX3NlbmRzKTsKKworCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IHNlbmRfZmxhZ3M7CisJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9TRU5EOworCXNlbmQtPnNfd3IubnVtX3NnZSA9IDI7CisJc2VuZC0+c193ci5uZXh0ID0gTlVMTDsKKwlzZW5kLT5zX3F1ZXVlZCA9IGppZmZpZXM7CisJc2VuZC0+c19vcCA9IE5VTEw7CisKKwlpZiAobGVuZ3RoICE9IDApIHsKKwkJc2dlID0gcmRzX2liX2RhdGFfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+YWRkciA9IGJ1ZmZlcjsKKwkJc2dlLT5sZW5ndGggPSBsZW5ndGg7CisJCXNnZS0+bGtleSA9IGljLT5pX21yLT5sa2V5OworCisJCXNnZSA9IHJkc19pYl9oZWFkZXJfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJfSBlbHNlIHsKKwkJLyogV2UncmUgc2VuZGluZyBhIHBhY2tldCB3aXRoIG5vIHBheWxvYWQuIFRoZXJlIGlzIG9ubHkKKwkJICogb25lIFNHRSAqLworCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQlzZ2UgPSAmc2VuZC0+c19zZ2VbMF07CisJfQorCisJc2dlLT5hZGRyID0gaWMtPmlfc2VuZF9oZHJzX2RtYSArIChwb3MgKiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJc2dlLT5sa2V5ID0gaWMtPmlfbXItPmxrZXk7Cit9CisKKy8qCisgKiBUaGlzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yIGEgZ2l2ZW4gbWVzc2FnZS4gIFRoZSBmaXJzdCB0aW1lCisgKiB3ZSBzZWUgYSBtZXNzYWdlIHdlIG1hcCBpdHMgc2NhdHRlcmxpc3QgaW50byB0aGUgSUIgZGV2aWNlIHNvIHRoYXQKKyAqIHdlIGNhbiBwcm92aWRlIHRoYXQgbWFwcGVkIGFkZHJlc3MgdG8gdGhlIElCIHNjYXR0ZXIgZ2F0aGVyIGVudHJpZXMKKyAqIGluIHRoZSBJQiB3b3JrIHJlcXVlc3RzLiAgV2UgdHJhbnNsYXRlIHRoZSBzY2F0dGVybGlzdCBpbnRvIGEgc2VyaWVzCisgKiBvZiB3b3JrIHJlcXVlc3RzIHRoYXQgZnJhZ21lbnQgdGhlIG1lc3NhZ2UuICBUaGVzZSB3b3JrIHJlcXVlc3RzIGNvbXBsZXRlCisgKiBpbiBvcmRlciBzbyB3ZSBwYXNzIG93bmVyc2hpcCBvZiB0aGUgbWVzc2FnZSB0byB0aGUgY29tcGxldGlvbiBoYW5kbGVyCisgKiBvbmNlIHdlIHNlbmQgdGhlIGZpbmFsIGZyYWdtZW50LgorICoKKyAqIFRoZSBSRFMgY29yZSB1c2VzIHRoZSBjX3NlbmRfbG9jayB0byBvbmx5IGVudGVyIHRoaXMgZnVuY3Rpb24gb25jZQorICogcGVyIGNvbm5lY3Rpb24uICBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgdHggcmluZyBhbGxvYy91bmFsbG9jIHBhaXJzCisgKiBkb24ndCBnZXQgb3V0IG9mIHN5bmMgYW5kIGNvbmZ1c2UgdGhlIHJpbmcuCisgKi8KK2ludCByZHNfaWJfeG1pdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCXVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csIHVuc2lnbmVkIGludCBvZmYpCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqc2VuZCA9IE5VTEw7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKmZpcnN0OworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpwcmV2OworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OworCXUzMiBwb3M7CisJdTMyIGk7CisJdTMyIHdvcmtfYWxsb2M7CisJdTMyIGNyZWRpdF9hbGxvYzsKKwl1MzIgcG9zdGVkOworCXUzMiBhZHZfY3JlZGl0cyA9IDA7CisJaW50IHNlbmRfZmxhZ3MgPSAwOworCWludCBzZW50OworCWludCByZXQ7CisJaW50IGZsb3dfY29udHJvbGxlZCA9IDA7CisKKwlCVUdfT04ob2ZmICUgUkRTX0ZSQUdfU0laRSk7CisJQlVHX09OKGhkcl9vZmYgIT0gMCAmJiBoZHJfb2ZmICE9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCisJLyogRklYTUUgd2UgbWF5IG92ZXJhbGxvY2F0ZSBoZXJlICovCisJaWYgKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgPT0gMCkKKwkJaSA9IDE7CisJZWxzZQorCQlpID0gY2VpbChiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pLCBSRFNfRlJBR19TSVpFKTsKKworCXdvcmtfYWxsb2MgPSByZHNfaWJfcmluZ19hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCBpLCAmcG9zKTsKKwlpZiAod29ya19hbGxvYyA9PSAwKSB7CisJCXNldF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpOworCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfcmluZ19mdWxsKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY3JlZGl0X2FsbG9jID0gd29ya19hbGxvYzsKKwlpZiAoaWMtPmlfZmxvd2N0bCkgeworCQljcmVkaXRfYWxsb2MgPSByZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIHdvcmtfYWxsb2MsICZwb3N0ZWQsIDApOworCQlhZHZfY3JlZGl0cyArPSBwb3N0ZWQ7CisJCWlmIChjcmVkaXRfYWxsb2MgPCB3b3JrX2FsbG9jKSB7CisJCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MgLSBjcmVkaXRfYWxsb2MpOworCQkJd29ya19hbGxvYyA9IGNyZWRpdF9hbGxvYzsKKwkJCWZsb3dfY29udHJvbGxlZCsrOworCQl9CisJCWlmICh3b3JrX2FsbG9jID09IDApIHsKKwkJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCQlyZHNfaWJfc3RhdHNfaW5jKHNfaWJfdHhfdGhyb3R0bGUpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogbWFwIHRoZSBtZXNzYWdlIHRoZSBmaXJzdCB0aW1lIHdlIHNlZSBpdCAqLworCWlmIChpYy0+aV9ybSA9PSBOVUxMKSB7CisJCS8qCisJCXByaW50ayhLRVJOX05PVElDRSAicmRzX2liX3htaXQgcHJlcCBtc2cgZHBvcnQ9JXUgZmxhZ3M9MHgleCBsZW49JWRcbiIsCisJCQkJYmUxNl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfZHBvcnQpLAorCQkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzLAorCQkJCWJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikpOworCQkgICAqLworCQlpZiAocm0tPm1fbmVudHMpIHsKKwkJCXJtLT5tX2NvdW50ID0gaWJfZG1hX21hcF9zZyhkZXYsCisJCQkJCSBybS0+bV9zZywgcm0tPm1fbmVudHMsIERNQV9UT19ERVZJQ0UpOworCQkJcmRzZGVidWcoImljICVwIG1hcHBpbmcgcm0gJXA6ICVkXG4iLCBpYywgcm0sIHJtLT5tX2NvdW50KTsKKwkJCWlmIChybS0+bV9jb3VudCA9PSAwKSB7CisJCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3NnX21hcHBpbmdfZmFpbHVyZSk7CisJCQkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCQlyZXQgPSAtRU5PTUVNOyAvKiBYWFggPyAqLworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJcm0tPm1fY291bnQgPSAwOworCQl9CisKKwkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnM7CisJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPSByZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlczsKKwkJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKwkJaWMtPmlfcm0gPSBybTsKKworCQkvKiBGaW5hbGl6ZSB0aGUgaGVhZGVyICovCisJCWlmICh0ZXN0X2JpdChSRFNfTVNHX0FDS19SRVFVSVJFRCwgJnJtLT5tX2ZsYWdzKSkKKwkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzIHw9IFJEU19GTEFHX0FDS19SRVFVSVJFRDsKKwkJaWYgKHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgJnJtLT5tX2ZsYWdzKSkKKwkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzIHw9IFJEU19GTEFHX1JFVFJBTlNNSVRURUQ7CisKKwkJLyogSWYgaXQgaGFzIGEgUkRNQSBvcCwgdGVsbCB0aGUgcGVlciB3ZSBkaWQgaXQuIFRoaXMgaXMKKwkJICogdXNlZCBieSB0aGUgcGVlciB0byByZWxlYXNlIHVzZS1vbmNlIFJETUEgTVJzLiAqLworCQlpZiAocm0tPm1fcmRtYV9vcCkgeworCQkJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWEgZXh0X2hkcjsKKworCQkJZXh0X2hkci5oX3JkbWFfcmtleSA9IGNwdV90b19iZTMyKHJtLT5tX3JkbWFfb3AtPnJfa2V5KTsKKwkJCXJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oJnJtLT5tX2luYy5pX2hkciwKKwkJCQkJUkRTX0VYVEhEUl9SRE1BLCAmZXh0X2hkciwgc2l6ZW9mKGV4dF9oZHIpKTsKKwkJfQorCQlpZiAocm0tPm1fcmRtYV9jb29raWUpIHsKKwkJCXJkc19tZXNzYWdlX2FkZF9yZG1hX2Rlc3RfZXh0ZW5zaW9uKCZybS0+bV9pbmMuaV9oZHIsCisJCQkJCXJkc19yZG1hX2Nvb2tpZV9rZXkocm0tPm1fcmRtYV9jb29raWUpLAorCQkJCQlyZHNfcmRtYV9jb29raWVfb2Zmc2V0KHJtLT5tX3JkbWFfY29va2llKSk7CisJCX0KKworCQkvKiBOb3RlIC0gcmRzX2liX3BpZ2d5Yl9hY2sgY2xlYXJzIHRoZSBBQ0tfUkVRVUlSRUQgYml0LCBzbworCQkgKiB3ZSBzaG91bGQgbm90IGRvIHRoaXMgdW5sZXNzIHdlIGhhdmUgYSBjaGFuY2Ugb2YgYXQgbGVhc3QKKwkJICogc3RpY2tpbmcgdGhlIGhlYWRlciBpbnRvIHRoZSBzZW5kIHJpbmcuIFdoaWNoIGlzIHdoeSB3ZQorCQkgKiBzaG91bGQgY2FsbCByZHNfaWJfcmluZ19hbGxvYyBmaXJzdC4gKi8KKwkJcm0tPm1faW5jLmlfaGRyLmhfYWNrID0gY3B1X3RvX2JlNjQocmRzX2liX3BpZ2d5Yl9hY2soaWMpKTsKKwkJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bSgmcm0tPm1faW5jLmlfaGRyKTsKKworCQkvKgorCQkgKiBVcGRhdGUgYWR2X2NyZWRpdHMgc2luY2Ugd2UgcmVzZXQgdGhlIEFDS19SRVFVSVJFRCBiaXQuCisJCSAqLworCQlyZHNfaWJfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIDAsICZwb3N0ZWQsIDEpOworCQlhZHZfY3JlZGl0cyArPSBwb3N0ZWQ7CisJCUJVR19PTihhZHZfY3JlZGl0cyA+IDI1NSk7CisJfSBlbHNlIGlmIChpYy0+aV9ybSAhPSBybSkKKwkJQlVHKCk7CisKKwlzZW5kID0gJmljLT5pX3NlbmRzW3Bvc107CisJZmlyc3QgPSBzZW5kOworCXByZXYgPSBOVUxMOworCXNjYXQgPSAmcm0tPm1fc2dbc2ddOworCXNlbnQgPSAwOworCWkgPSAwOworCisJLyogU29tZXRpbWVzIHlvdSB3YW50IHRvIHB1dCBhIGZlbmNlIGJldHdlZW4gYW4gUkRNQQorCSAqIFJFQUQgYW5kIHRoZSBmb2xsb3dpbmcgU0VORC4KKwkgKiBXZSBjb3VsZCBlaXRoZXIgZG8gdGhpcyBhbGwgdGhlIHRpbWUKKwkgKiBvciB3aGVuIHJlcXVlc3RlZCBieSB0aGUgdXNlci4gUmlnaHQgbm93LCB3ZSBsZXQKKwkgKiB0aGUgYXBwbGljYXRpb24gY2hvb3NlLgorCSAqLworCWlmIChybS0+bV9yZG1hX29wICYmIHJtLT5tX3JkbWFfb3AtPnJfZmVuY2UpCisJCXNlbmRfZmxhZ3MgPSBJQl9TRU5EX0ZFTkNFOworCisJLyoKKwkgKiBXZSBjb3VsZCBiZSBjb3B5aW5nIHRoZSBoZWFkZXIgaW50byB0aGUgdW51c2VkIHRhaWwgb2YgdGhlIHBhZ2UuCisJICogVGhhdCB3b3VsZCBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSB3aGVuIHRob3NlIHBhZ2VzIG1pZ2h0CisJICogYmUgbWFwcGVkIHVzZXJzcGFjZSBwYWdlcyBvciBwYWdlIGNhY2hlIHBhZ2VzLiAgU28gaW5zdGVhZCB3ZSBhbHdheXMKKwkgKiB1c2UgYSBzZWNvbmQgc2dlIGFuZCBvdXIgbG9uZy1saXZlZCByaW5nIG9mIG1hcHBlZCBoZWFkZXJzLiAgV2Ugc2VuZAorCSAqIHRoZSBoZWFkZXIgYWZ0ZXIgdGhlIGRhdGEgc28gdGhhdCB0aGUgZGF0YSBwYXlsb2FkIGNhbiBiZSBhbGlnbmVkIG9uCisJICogdGhlIHJlY2VpdmVyLgorCSAqLworCisJLyogaGFuZGxlIGEgMC1sZW4gbWVzc2FnZSAqLworCWlmIChiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pID09IDApIHsKKwkJcmRzX2liX3htaXRfcG9wdWxhdGVfd3IoaWMsIHNlbmQsIHBvcywgMCwgMCwgc2VuZF9mbGFncyk7CisJCWdvdG8gYWRkX2hlYWRlcjsKKwl9CisKKwkvKiBpZiB0aGVyZSdzIGRhdGEgcmVmZXJlbmNlIGl0IHdpdGggYSBjaGFpbiBvZiB3b3JrIHJlcXMgKi8KKwlmb3IgKDsgaSA8IHdvcmtfYWxsb2MgJiYgc2NhdCAhPSAmcm0tPm1fc2dbcm0tPm1fY291bnRdOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGxlbjsKKworCQlzZW5kID0gJmljLT5pX3NlbmRzW3Bvc107CisKKwkJbGVuID0gbWluKFJEU19GUkFHX1NJWkUsIGliX3NnX2RtYV9sZW4oZGV2LCBzY2F0KSAtIG9mZik7CisJCXJkc19pYl94bWl0X3BvcHVsYXRlX3dyKGljLCBzZW5kLCBwb3MsCisJCQkJaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCBzY2F0KSArIG9mZiwgbGVuLAorCQkJCXNlbmRfZmxhZ3MpOworCisJCS8qCisJCSAqIFdlIHdhbnQgdG8gZGVsYXkgc2lnbmFsaW5nIGNvbXBsZXRpb25zIGp1c3QgZW5vdWdoIHRvIGdldAorCQkgKiB0aGUgYmF0Y2hpbmcgYmVuZWZpdHMgYnV0IG5vdCBzbyBtdWNoIHRoYXQgd2UgY3JlYXRlIGRlYWQgdGltZQorCQkgKiBvbiB0aGUgd2lyZS4KKwkJICovCisJCWlmIChpYy0+aV91bnNpZ25hbGVkX3dycy0tID09IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfd3JzID0gcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JzOworCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKwkJfQorCisJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgLT0gbGVuOworCQlpZiAoaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA8PSAwKSB7CisJCQlpYy0+aV91bnNpZ25hbGVkX2J5dGVzID0gcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQl9CisKKwkJLyoKKwkJICogQWx3YXlzIHNpZ25hbCB0aGUgbGFzdCBvbmUgaWYgd2UncmUgc3RvcHBpbmcgZHVlIHRvIGZsb3cgY29udHJvbC4KKwkJICovCisJCWlmIChmbG93X2NvbnRyb2xsZWQgJiYgaSA9PSAod29ya19hbGxvYy0xKSkKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisKKwkJcmRzZGVidWcoInNlbmQgJXAgd3IgJXAgbnVtX3NnZSAldSBuZXh0ICVwXG4iLCBzZW5kLAorCQkJICZzZW5kLT5zX3dyLCBzZW5kLT5zX3dyLm51bV9zZ2UsIHNlbmQtPnNfd3IubmV4dCk7CisKKwkJc2VudCArPSBsZW47CisJCW9mZiArPSBsZW47CisJCWlmIChvZmYgPT0gaWJfc2dfZG1hX2xlbihkZXYsIHNjYXQpKSB7CisJCQlzY2F0Kys7CisJCQlvZmYgPSAwOworCQl9CisKK2FkZF9oZWFkZXI6CisJCS8qIFRhY2sgb24gdGhlIGhlYWRlciBhZnRlciB0aGUgZGF0YS4gVGhlIGhlYWRlciBTR0Ugc2hvdWxkIGFscmVhZHkKKwkJICogaGF2ZSBiZWVuIHNldCB1cCB0byBwb2ludCB0byB0aGUgcmlnaHQgaGVhZGVyIGJ1ZmZlci4gKi8KKwkJbWVtY3B5KCZpYy0+aV9zZW5kX2hkcnNbcG9zXSwgJnJtLT5tX2luYy5pX2hkciwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisKKwkJaWYgKDApIHsKKwkJCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaWMtPmlfc2VuZF9oZHJzW3Bvc107CisKKwkJCXByaW50ayhLRVJOX05PVElDRSAic2VuZCBXUiBkcG9ydD0ldSBmbGFncz0weCV4IGxlbj0lZFxuIiwKKwkJCQliZTE2X3RvX2NwdShoZHItPmhfZHBvcnQpLAorCQkJCWhkci0+aF9mbGFncywKKwkJCQliZTMyX3RvX2NwdShoZHItPmhfbGVuKSk7CisJCX0KKwkJaWYgKGFkdl9jcmVkaXRzKSB7CisJCQlzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyID0gJmljLT5pX3NlbmRfaGRyc1twb3NdOworCisJCQkvKiBhZGQgY3JlZGl0IGFuZCByZWRvIHRoZSBoZWFkZXIgY2hlY2tzdW0gKi8KKwkJCWhkci0+aF9jcmVkaXQgPSBhZHZfY3JlZGl0czsKKwkJCXJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oaGRyKTsKKwkJCWFkdl9jcmVkaXRzID0gMDsKKwkJCXJkc19pYl9zdGF0c19pbmMoc19pYl90eF9jcmVkaXRfdXBkYXRlcyk7CisJCX0KKworCQlpZiAocHJldikKKwkJCXByZXYtPnNfd3IubmV4dCA9ICZzZW5kLT5zX3dyOworCQlwcmV2ID0gc2VuZDsKKworCQlwb3MgPSAocG9zICsgMSkgJSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwl9CisKKwkvKiBBY2NvdW50IHRoZSBSRFMgaGVhZGVyIGluIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2Ugc2VudCwgYnV0IGp1c3Qgb25jZS4KKwkgKiBUaGUgY2FsbGVyIGhhcyBubyBjb25jZXB0IG9mIGZyYWdtZW50YXRpb24uICovCisJaWYgKGhkcl9vZmYgPT0gMCkKKwkJc2VudCArPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCisJLyogaWYgd2UgZmluaXNoZWQgdGhlIG1lc3NhZ2UgdGhlbiBzZW5kIGNvbXBsZXRpb24gb3ducyBpdCAqLworCWlmIChzY2F0ID09ICZybS0+bV9zZ1tybS0+bV9jb3VudF0pIHsKKwkJcHJldi0+c19ybSA9IGljLT5pX3JtOworCQlwcmV2LT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQlpYy0+aV9ybSA9IE5VTEw7CisJfQorCisJaWYgKGkgPCB3b3JrX2FsbG9jKSB7CisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGkpOworCQl3b3JrX2FsbG9jID0gaTsKKwl9CisJaWYgKGljLT5pX2Zsb3djdGwgJiYgaSA8IGNyZWRpdF9hbGxvYykKKwkJcmRzX2liX3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgY3JlZGl0X2FsbG9jIC0gaSk7CisKKwkvKiBYWFggbmVlZCB0byB3b3JyeSBhYm91dCBmYWlsZWRfd3IgYW5kIHBhcnRpYWwgc2VuZHMuICovCisJZmFpbGVkX3dyID0gJmZpcnN0LT5zX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYy0+aV9jbV9pZC0+cXAsICZmaXJzdC0+c193ciwgJmZhaWxlZF93cik7CisJcmRzZGVidWcoImljICVwIGZpcnN0ICVwICh3ciAlcCkgcmV0ICVkIHdyICVwXG4iLCBpYywKKwkJIGZpcnN0LCAmZmlyc3QtPnNfd3IsIHJldCwgZmFpbGVkX3dyKTsKKwlCVUdfT04oZmFpbGVkX3dyICE9ICZmaXJzdC0+c193cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSUI6IGliX3Bvc3Rfc2VuZCB0byAlcEk0ICIKKwkJICAgICAgICJyZXR1cm5lZCAlZFxuIiwgJmNvbm4tPmNfZmFkZHIsIHJldCk7CisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCWlmIChwcmV2LT5zX3JtKSB7CisJCQlpYy0+aV9ybSA9IHByZXYtPnNfcm07CisJCQlwcmV2LT5zX3JtID0gTlVMTDsKKwkJfQorCQkvKiBGaW5lc3NlIHRoaXMgbGF0ZXIgKi8KKwkJQlVHKCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHNlbnQ7CitvdXQ6CisJQlVHX09OKGFkdl9jcmVkaXRzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgcmRzX2liX3htaXRfcmRtYShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApCit7CisJc3RydWN0IHJkc19pYl9jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pYl9zZW5kX3dvcmsgKnNlbmQgPSBOVUxMOworCXN0cnVjdCByZHNfaWJfc2VuZF93b3JrICpmaXJzdDsKKwlzdHJ1Y3QgcmRzX2liX3NlbmRfd29yayAqcHJldjsKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqZmFpbGVkX3dyOworCXN0cnVjdCByZHNfaWJfZGV2aWNlICpyZHNfaWJkZXY7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0OworCXVuc2lnbmVkIGxvbmcgbGVuOworCXU2NCByZW1vdGVfYWRkciA9IG9wLT5yX3JlbW90ZV9hZGRyOworCXUzMiBwb3M7CisJdTMyIHdvcmtfYWxsb2M7CisJdTMyIGk7CisJdTMyIGo7CisJaW50IHNlbnQ7CisJaW50IHJldDsKKwlpbnQgbnVtX3NnZTsKKworCXJkc19pYmRldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2liX2NsaWVudCk7CisKKwkvKiBtYXAgdGhlIG1lc3NhZ2UgdGhlIGZpcnN0IHRpbWUgd2Ugc2VlIGl0ICovCisJaWYgKCFvcC0+cl9tYXBwZWQpIHsKKwkJb3AtPnJfY291bnQgPSBpYl9kbWFfbWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkJCW9wLT5yX3NnLCBvcC0+cl9uZW50cywgKG9wLT5yX3dyaXRlKSA/CisJCQkJCURNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQlyZHNkZWJ1ZygiaWMgJXAgbWFwcGluZyBvcCAlcDogJWRcbiIsIGljLCBvcCwgb3AtPnJfY291bnQpOworCQlpZiAob3AtPnJfY291bnQgPT0gMCkgeworCQkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3NnX21hcHBpbmdfZmFpbHVyZSk7CisJCQlyZXQgPSAtRU5PTUVNOyAvKiBYWFggPyAqLworCQkJZ290byBvdXQ7CisJCX0KKworCQlvcC0+cl9tYXBwZWQgPSAxOworCX0KKworCS8qCisJICogSW5zdGVhZCBvZiBrbm93aW5nIGhvdyB0byByZXR1cm4gYSBwYXJ0aWFsIHJkbWEgcmVhZC93cml0ZSB3ZSBpbnNpc3QgdGhhdCB0aGVyZQorCSAqIGJlIGVub3VnaCB3b3JrIHJlcXVlc3RzIHRvIHNlbmQgdGhlIGVudGlyZSBtZXNzYWdlLgorCSAqLworCWkgPSBjZWlsKG9wLT5yX2NvdW50LCByZHNfaWJkZXYtPm1heF9zZ2UpOworCisJd29ya19hbGxvYyA9IHJkc19pYl9yaW5nX2FsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIGksICZwb3MpOworCWlmICh3b3JrX2FsbG9jICE9IGkpIHsKKwkJcmRzX2liX3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJcmRzX2liX3N0YXRzX2luYyhzX2liX3R4X3JpbmdfZnVsbCk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKwlmaXJzdCA9IHNlbmQ7CisJcHJldiA9IE5VTEw7CisJc2NhdCA9ICZvcC0+cl9zZ1swXTsKKwlzZW50ID0gMDsKKwludW1fc2dlID0gb3AtPnJfY291bnQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgd29ya19hbGxvYyAmJiBzY2F0ICE9ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF07IGkrKykgeworCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgPSAwOworCQlzZW5kLT5zX3F1ZXVlZCA9IGppZmZpZXM7CisJCS8qCisJCSAqIFdlIHdhbnQgdG8gZGVsYXkgc2lnbmFsaW5nIGNvbXBsZXRpb25zIGp1c3QgZW5vdWdoIHRvIGdldAorCQkgKiB0aGUgYmF0Y2hpbmcgYmVuZWZpdHMgYnV0IG5vdCBzbyBtdWNoIHRoYXQgd2UgY3JlYXRlIGRlYWQgdGltZSBvbiB0aGUgd2lyZS4KKwkJICovCisJCWlmIChpYy0+aV91bnNpZ25hbGVkX3dycy0tID09IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfd3JzID0gcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JzOworCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKwkJfQorCisJCXNlbmQtPnNfd3Iub3Bjb2RlID0gb3AtPnJfd3JpdGUgPyBJQl9XUl9SRE1BX1dSSVRFIDogSUJfV1JfUkRNQV9SRUFEOworCQlzZW5kLT5zX3dyLndyLnJkbWEucmVtb3RlX2FkZHIgPSByZW1vdGVfYWRkcjsKKwkJc2VuZC0+c193ci53ci5yZG1hLnJrZXkgPSBvcC0+cl9rZXk7CisJCXNlbmQtPnNfb3AgPSBvcDsKKworCQlpZiAobnVtX3NnZSA+IHJkc19pYmRldi0+bWF4X3NnZSkgeworCQkJc2VuZC0+c193ci5udW1fc2dlID0gcmRzX2liZGV2LT5tYXhfc2dlOworCQkJbnVtX3NnZSAtPSByZHNfaWJkZXYtPm1heF9zZ2U7CisJCX0gZWxzZSB7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSBudW1fc2dlOworCQl9CisKKwkJc2VuZC0+c193ci5uZXh0ID0gTlVMTDsKKworCQlpZiAocHJldikKKwkJCXByZXYtPnNfd3IubmV4dCA9ICZzZW5kLT5zX3dyOworCisJCWZvciAoaiA9IDA7IGogPCBzZW5kLT5zX3dyLm51bV9zZ2UgJiYgc2NhdCAhPSAmb3AtPnJfc2dbb3AtPnJfY291bnRdOyBqKyspIHsKKwkJCWxlbiA9IGliX3NnX2RtYV9sZW4oaWMtPmlfY21faWQtPmRldmljZSwgc2NhdCk7CisJCQlzZW5kLT5zX3NnZVtqXS5hZGRyID0KKwkJCQkgaWJfc2dfZG1hX2FkZHJlc3MoaWMtPmlfY21faWQtPmRldmljZSwgc2NhdCk7CisJCQlzZW5kLT5zX3NnZVtqXS5sZW5ndGggPSBsZW47CisJCQlzZW5kLT5zX3NnZVtqXS5sa2V5ID0gaWMtPmlfbXItPmxrZXk7CisKKwkJCXNlbnQgKz0gbGVuOworCQkJcmRzZGVidWcoImljICVwIHNlbnQgJWQgcmVtb3RlX2FkZHIgJWxsdVxuIiwgaWMsIHNlbnQsIHJlbW90ZV9hZGRyKTsKKworCQkJcmVtb3RlX2FkZHIgKz0gbGVuOworCQkJc2NhdCsrOworCQl9CisKKwkJcmRzZGVidWcoInNlbmQgJXAgd3IgJXAgbnVtX3NnZSAldSBuZXh0ICVwXG4iLCBzZW5kLAorCQkJJnNlbmQtPnNfd3IsIHNlbmQtPnNfd3IubnVtX3NnZSwgc2VuZC0+c193ci5uZXh0KTsKKworCQlwcmV2ID0gc2VuZDsKKwkJaWYgKCsrc2VuZCA9PSAmaWMtPmlfc2VuZHNbaWMtPmlfc2VuZF9yaW5nLndfbnJdKQorCQkJc2VuZCA9IGljLT5pX3NlbmRzOworCX0KKworCS8qIGlmIHdlIGZpbmlzaGVkIHRoZSBtZXNzYWdlIHRoZW4gc2VuZCBjb21wbGV0aW9uIG93bnMgaXQgKi8KKwlpZiAoc2NhdCA9PSAmb3AtPnJfc2dbb3AtPnJfY291bnRdKQorCQlwcmV2LT5zX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCisJaWYgKGkgPCB3b3JrX2FsbG9jKSB7CisJCXJkc19pYl9yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGkpOworCQl3b3JrX2FsbG9jID0gaTsKKwl9CisKKwlmYWlsZWRfd3IgPSAmZmlyc3QtPnNfd3I7CisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmZpcnN0LT5zX3dyLCAmZmFpbGVkX3dyKTsKKwlyZHNkZWJ1ZygiaWMgJXAgZmlyc3QgJXAgKHdyICVwKSByZXQgJWQgd3IgJXBcbiIsIGljLAorCQkgZmlyc3QsICZmaXJzdC0+c193ciwgcmV0LCBmYWlsZWRfd3IpOworCUJVR19PTihmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JQjogcmRtYSBpYl9wb3N0X3NlbmQgdG8gJXBJNCAiCisJCSAgICAgICAicmV0dXJuZWQgJWRcbiIsICZjb25uLT5jX2ZhZGRyLCByZXQpOworCQlyZHNfaWJfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAodW5saWtlbHkoZmFpbGVkX3dyICE9ICZmaXJzdC0+c193cikpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lCOiBpYl9wb3N0X3NlbmQoKSByYz0lZCwgYnV0IGZhaWxlZF93cWUgdXBkYXRlZCFcbiIsIHJldCk7CisJCUJVR19PTihmYWlsZWRfd3IgIT0gJmZpcnN0LT5zX3dyKTsKKwl9CisKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2liX3htaXRfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaWJfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJLyogV2UgbWF5IGhhdmUgYSBwZW5kaW5nIEFDSyBvciB3aW5kb3cgdXBkYXRlIHdlIHdlcmUgdW5hYmxlCisJICogdG8gc2VuZCBwcmV2aW91c2x5IChkdWUgdG8gZmxvdyBjb250cm9sKS4gVHJ5IGFnYWluLiAqLworCXJkc19pYl9hdHRlbXB0X2FjayhpYyk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3N0YXRzLmMgYi9uZXQvcmRzL2liX3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJlM2UzZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaWJfc3RhdHMuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgImliLmgiCisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCByZHNfaWJfc3RhdGlzdGljcywgcmRzX2liX3N0YXRzKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKK3N0YXRpYyBjaGFyICpyZHNfaWJfc3RhdF9uYW1lc1tdID0geworCSJpYl9jb25uZWN0X3JhY2VkIiwKKwkiaWJfbGlzdGVuX2Nsb3NlZF9zdGFsZSIsCisJImliX3R4X2NxX2NhbGwiLAorCSJpYl90eF9jcV9ldmVudCIsCisJImliX3R4X3JpbmdfZnVsbCIsCisJImliX3R4X3Rocm90dGxlIiwKKwkiaWJfdHhfc2dfbWFwcGluZ19mYWlsdXJlIiwKKwkiaWJfdHhfc3RhbGxlZCIsCisJImliX3R4X2NyZWRpdF91cGRhdGVzIiwKKwkiaWJfcnhfY3FfY2FsbCIsCisJImliX3J4X2NxX2V2ZW50IiwKKwkiaWJfcnhfcmluZ19lbXB0eSIsCisJImliX3J4X3JlZmlsbF9mcm9tX2NxIiwKKwkiaWJfcnhfcmVmaWxsX2Zyb21fdGhyZWFkIiwKKwkiaWJfcnhfYWxsb2NfbGltaXQiLAorCSJpYl9yeF9jcmVkaXRfdXBkYXRlcyIsCisJImliX2Fja19zZW50IiwKKwkiaWJfYWNrX3NlbmRfZmFpbHVyZSIsCisJImliX2Fja19zZW5kX2RlbGF5ZWQiLAorCSJpYl9hY2tfc2VuZF9waWdneWJhY2tlZCIsCisJImliX2Fja19yZWNlaXZlZCIsCisJImliX3JkbWFfbXJfYWxsb2MiLAorCSJpYl9yZG1hX21yX2ZyZWUiLAorCSJpYl9yZG1hX21yX3VzZWQiLAorCSJpYl9yZG1hX21yX3Bvb2xfZmx1c2giLAorCSJpYl9yZG1hX21yX3Bvb2xfd2FpdCIsCisJImliX3JkbWFfbXJfcG9vbF9kZXBsZXRlZCIsCit9OworCit1bnNpZ25lZCBpbnQgcmRzX2liX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgIHVuc2lnbmVkIGludCBhdmFpbCkKK3sKKwlzdHJ1Y3QgcmRzX2liX3N0YXRpc3RpY3Mgc3RhdHMgPSB7MCwgfTsKKwl1aW50NjRfdCAqc3JjOworCXVpbnQ2NF90ICpzdW07CisJc2l6ZV90IGk7CisJaW50IGNwdTsKKworCWlmIChhdmFpbCA8IEFSUkFZX1NJWkUocmRzX2liX3N0YXRfbmFtZXMpKQorCQlnb3RvIG91dDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXNyYyA9ICh1aW50NjRfdCAqKSYocGVyX2NwdShyZHNfaWJfc3RhdHMsIGNwdSkpOworCQlzdW0gPSAodWludDY0X3QgKikmc3RhdHM7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RhdHMpIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaSsrKQorCQkJKihzdW0rKykgKz0gKihzcmMrKyk7CisJfQorCisJcmRzX3N0YXRzX2luZm9fY29weShpdGVyLCAodWludDY0X3QgKikmc3RhdHMsIHJkc19pYl9zdGF0X25hbWVzLAorCQkJICAgIEFSUkFZX1NJWkUocmRzX2liX3N0YXRfbmFtZXMpKTsKK291dDoKKwlyZXR1cm4gQVJSQVlfU0laRShyZHNfaWJfc3RhdF9uYW1lcyk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3N5c2N0bC5jIGIvbmV0L3Jkcy9pYl9zeXNjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODc4MzBkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pYl9zeXNjdGwuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAiaWIuaCIKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZHNfaWJfc3lzY3RsX2hkcjsKKwordW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyID0gUkRTX0lCX0RFRkFVTFRfU0VORF9XUjsKK3Vuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfcmVjdl93ciA9IFJEU19JQl9ERUZBVUxUX1JFQ1ZfV1I7Cit1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbiA9ICgxMjggKiAxMDI0ICogMTAyNCkgLyBSRFNfRlJBR19TSVpFOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfd3JfbWluID0gMTsKKy8qIGhhcmR3YXJlIHdpbGwgZmFpbCBDUSBjcmVhdGlvbiBsb25nIGJlZm9yZSB0aGlzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF93cl9tYXggPSAodTMyKX4wOworCit1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dycyA9IDE2Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyX21heCA9IDY0OworCit1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzID0gKDE2IDw8IDIwKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21pbiA9IDE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlc19tYXggPSB+MFVMOworCit1bnNpZ25lZCBpbnQgcmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wgPSAxOworCitjdGxfdGFibGUgcmRzX2liX3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfc2VuZF93ciIsCisJCS5kYXRhCQk9ICZyZHNfaWJfc3lzY3RsX21heF9zZW5kX3dyLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaWJfc3lzY3RsX21heF93cl9taW4sCisJCS5leHRyYTIJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3dyX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfcmVjdl93ciIsCisJCS5kYXRhCQk9ICZyZHNfaWJfc3lzY3RsX21heF9yZWN2X3dyLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaWJfc3lzY3RsX21heF93cl9taW4sCisJCS5leHRyYTIJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3dyX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfdW5zaWduYWxlZF93ciIsCisJCS5kYXRhCQk9ICZyZHNfaWJfc3lzY3RsX21heF91bnNpZ193cnMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2liX3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF91bnNpZ25hbGVkX2J5dGVzIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaWJfc3lzY3RsX21heF91bnNpZ19ieXRlc19taW4sCisJCS5leHRyYTIJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfcmVjdl9hbGxvY2F0aW9uIiwKKwkJLmRhdGEJCT0gJnJkc19pYl9zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbiwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJmbG93X2NvbnRyb2wiLAorCQkuZGF0YQkJPSAmcmRzX2liX3N5c2N0bF9mbG93X2NvbnRyb2wsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHJkc19pYl9zeXNjdGxfZmxvd19jb250cm9sKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeyAuY3RsX25hbWUgPSAwfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfcGF0aCByZHNfaWJfc3lzY3RsX3BhdGhbXSA9IHsKKwl7IC5wcm9jbmFtZSA9ICJuZXQiLCAuY3RsX25hbWUgPSBDVExfTkVULCB9LAorCXsgLnByb2NuYW1lID0gInJkcyIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgLnByb2NuYW1lID0gImliIiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyB9Cit9OworCit2b2lkIHJkc19pYl9zeXNjdGxfZXhpdCh2b2lkKQoreworCWlmIChyZHNfaWJfc3lzY3RsX2hkcikKKwkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUocmRzX2liX3N5c2N0bF9oZHIpOworfQorCitpbnQgX19pbml0IHJkc19pYl9zeXNjdGxfaW5pdCh2b2lkKQoreworCXJkc19pYl9zeXNjdGxfaGRyID0gcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKHJkc19pYl9zeXNjdGxfcGF0aCwgcmRzX2liX3N5c2N0bF90YWJsZSk7CisJaWYgKHJkc19pYl9zeXNjdGxfaGRyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pbmZvLmMgYi9uZXQvcmRzL2luZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDg4NTUzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pbmZvLmMKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKKy8qCisgKiBUaGlzIGZpbGUgaW1wbGVtZW50cyBhIGdldHNvY2tvcHQoKSBjYWxsIHdoaWNoIGNvcGllcyBhIHNldCBvZiBmaXhlZAorICogc2l6ZWQgc3RydWN0cyBpbnRvIGEgdXNlci1zcGVjaWZpZWQgYnVmZmVyIGFzIGEgbWVhbnMgb2YgcHJvdmlkaW5nCisgKiByZWFkLW9ubHkgaW5mb3JtYXRpb24gYWJvdXQgUkRTLgorICoKKyAqIEZvciBhIGdpdmVuIGluZm9ybWF0aW9uIHNvdXJjZSB0aGVyZSBhcmUgYSBnaXZlbiBudW1iZXIgb2YgZml4ZWQgc2l6ZWQKKyAqIHN0cnVjdHMgYXQgYSBnaXZlbiB0aW1lLiAgVGhlIHN0cnVjdHMgYXJlIG9ubHkgY29waWVkIGlmIHRoZSB1c2VyLXNwZWNpZmllZAorICogYnVmZmVyIGlzIGJpZyBlbm91Z2guICBUaGUgZGVzdGluYXRpb24gcGFnZXMgdGhhdCBtYWtlIHVwIHRoZSBidWZmZXIKKyAqIGFyZSBwaW5uZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY29weS4KKyAqCisgKiBUaGlzIGdpdmVzIHVzIHRoZSBmb2xsb3dpbmcgYmVuZWZpdHM6CisgKgorICogLSBzaW1wbGUgaW1wbGVtZW50YXRpb24sIG5vIGNvcHkgInBvc2l0aW9uIiBhY3Jvc3MgbXVsdGlwbGUgY2FsbHMKKyAqIC0gY29uc2lzdGVudCBzbmFwc2hvdCBvZiBhbiBpbmZvIHNvdXJjZQorICogLSBhdG9taWMgY29weSB3b3JrcyB3ZWxsIHdpdGggd2hhdGV2ZXIgbG9ja2luZyBpbmZvIHNvdXJjZSBoYXMKKyAqIC0gb25lIHBvcnRhYmxlIHRvb2wgdG8gZ2V0IHJkcyBpbmZvIGFjcm9zcyBpbXBsZW1lbnRhdGlvbnMKKyAqIC0gbG9uZy1saXZlZCB0b29sIGNhbiBnZXQgaW5mbyB3aXRob3V0IGFsbG9jYXRpbmcKKyAqCisgKiBhdCB0aGUgZm9sbG93aW5nIGNvc3RzOgorICoKKyAqIC0gaW5mbyBzb3VyY2UgY29weSBtdXN0IGJlIHBpbm5lZCwgbWF5IGJlICJsYXJnZSIKKyAqLworCitzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgeworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJdm9pZCAqYWRkcjsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKK307CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmRzX2luZm9fbG9jayk7CitzdGF0aWMgcmRzX2luZm9fZnVuYyByZHNfaW5mb19mdW5jc1tSRFNfSU5GT19MQVNUIC0gUkRTX0lORk9fRklSU1QgKyAxXTsKKwordm9pZCByZHNfaW5mb19yZWdpc3Rlcl9mdW5jKGludCBvcHRuYW1lLCByZHNfaW5mb19mdW5jIGZ1bmMpCit7CisJaW50IG9mZnNldCA9IG9wdG5hbWUgLSBSRFNfSU5GT19GSVJTVDsKKworCUJVR19PTihvcHRuYW1lIDwgUkRTX0lORk9fRklSU1QgfHwgb3B0bmFtZSA+IFJEU19JTkZPX0xBU1QpOworCisJc3Bpbl9sb2NrKCZyZHNfaW5mb19sb2NrKTsKKwlCVUdfT04ocmRzX2luZm9fZnVuY3Nbb2Zmc2V0XSAhPSBOVUxMKTsKKwlyZHNfaW5mb19mdW5jc1tvZmZzZXRdID0gZnVuYzsKKwlzcGluX3VubG9jaygmcmRzX2luZm9fbG9jayk7Cit9CisKK3ZvaWQgcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKGludCBvcHRuYW1lLCByZHNfaW5mb19mdW5jIGZ1bmMpCit7CisJaW50IG9mZnNldCA9IG9wdG5hbWUgLSBSRFNfSU5GT19GSVJTVDsKKworCUJVR19PTihvcHRuYW1lIDwgUkRTX0lORk9fRklSU1QgfHwgb3B0bmFtZSA+IFJEU19JTkZPX0xBU1QpOworCisJc3Bpbl9sb2NrKCZyZHNfaW5mb19sb2NrKTsKKwlCVUdfT04ocmRzX2luZm9fZnVuY3Nbb2Zmc2V0XSAhPSBmdW5jKTsKKwlyZHNfaW5mb19mdW5jc1tvZmZzZXRdID0gTlVMTDsKKwlzcGluX3VubG9jaygmcmRzX2luZm9fbG9jayk7Cit9CisKKy8qCisgKiBUeXBpY2FsbHkgd2UgaG9sZCBhbiBhdG9taWMga21hcCBhY3Jvc3MgbXVsdGlwbGUgcmRzX2luZm9fY29weSgpIGNhbGxzCisgKiBiZWNhdXNlIHRoZSBrbWFwIGlzIHNvIGV4cGVuc2l2ZS4gIFRoaXMgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIGJsb2NraW5nCisgKiBvcGVyYXRpb25zIHdoaWxlIGhvbGRpbmcgdGhlIG1hcHBpbmcgYW5kIGFzIHRoZSBpdGVyYXRvciBpcyB0b3JuIGRvd24uCisgKi8KK3ZvaWQgcmRzX2luZm9faXRlcl91bm1hcChzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIpCit7CisJaWYgKGl0ZXItPmFkZHIgIT0gTlVMTCkgeworCQlrdW5tYXBfYXRvbWljKGl0ZXItPmFkZHIsIEtNX1VTRVIwKTsKKwkJaXRlci0+YWRkciA9IE5VTEw7CisJfQorfQorCisvKgorICogZ2V0X3VzZXJfcGFnZXMoKSBjYWxsZWQgZmx1c2hfZGNhY2hlX3BhZ2UoKSBvbiB0aGUgcGFnZXMgZm9yIHVzLgorICovCit2b2lkIHJkc19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLCB2b2lkICpkYXRhLAorCQkgICB1bnNpZ25lZCBsb25nIGJ5dGVzKQoreworCXVuc2lnbmVkIGxvbmcgdGhpczsKKworCXdoaWxlIChieXRlcykgeworCQlpZiAoaXRlci0+YWRkciA9PSBOVUxMKQorCQkJaXRlci0+YWRkciA9IGttYXBfYXRvbWljKCppdGVyLT5wYWdlcywgS01fVVNFUjApOworCisJCXRoaXMgPSBtaW4oYnl0ZXMsIFBBR0VfU0laRSAtIGl0ZXItPm9mZnNldCk7CisKKwkJcmRzZGVidWcoInBhZ2UgJXAgYWRkciAlcCBvZmZzZXQgJWx1IHRoaXMgJWx1IGRhdGEgJXAgIgorCQkJICAiYnl0ZXMgJWx1XG4iLCAqaXRlci0+cGFnZXMsIGl0ZXItPmFkZHIsCisJCQkgIGl0ZXItPm9mZnNldCwgdGhpcywgZGF0YSwgYnl0ZXMpOworCisJCW1lbWNweShpdGVyLT5hZGRyICsgaXRlci0+b2Zmc2V0LCBkYXRhLCB0aGlzKTsKKworCQlkYXRhICs9IHRoaXM7CisJCWJ5dGVzIC09IHRoaXM7CisJCWl0ZXItPm9mZnNldCArPSB0aGlzOworCisJCWlmIChpdGVyLT5vZmZzZXQgPT0gUEFHRV9TSVpFKSB7CisJCQlrdW5tYXBfYXRvbWljKGl0ZXItPmFkZHIsIEtNX1VTRVIwKTsKKwkJCWl0ZXItPmFkZHIgPSBOVUxMOworCQkJaXRlci0+b2Zmc2V0ID0gMDsKKwkJCWl0ZXItPnBhZ2VzKys7CisJCX0KKwl9Cit9CisKKy8qCisgKiBAb3B0dmFsIHBvaW50cyB0byB0aGUgdXNlcnNwYWNlIGJ1ZmZlciB0aGF0IHRoZSBpbmZvcm1hdGlvbiBzbmFwc2hvdAorICogd2lsbCBiZSBjb3BpZWQgaW50by4KKyAqCisgKiBAb3B0bGVuIG9uIGlucHV0IGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaW4gdXNlcnNwYWNlLiAgQG9wdGxlbgorICogb24gb3V0cHV0IGlzIHRoZSBzaXplIG9mIHRoZSByZXF1ZXN0ZWQgc25hcHNob3QgaW4gYnl0ZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIC1lcnJubyBpZiB0aGVyZSBpcyBhIGZhaWx1cmUsIHBhcnRpY3VsYXJseSAtRU5PU1BDCisgKiBpZiB0aGUgZ2l2ZW4gdXNlcnNwYWNlIGJ1ZmZlciB3YXMgbm90IGxhcmdlIGVub3VnaCB0byBmaXQgdGhlIHNuYXBzaG90LgorICogT24gc3VjY2VzcyBpdCByZXR1cm5zIHRoZSBwb3NpdGl2ZSBudW1iZXIgb2YgYnl0ZXMgb2YgZWFjaCBhcnJheSBlbGVtZW50CisgKiBpbiB0aGUgc25hcHNob3QuCisgKi8KK2ludCByZHNfaW5mb19nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLAorCQkJaW50IF9fdXNlciAqb3B0bGVuKQoreworCXN0cnVjdCByZHNfaW5mb19pdGVyYXRvciBpdGVyOworCXN0cnVjdCByZHNfaW5mb19sZW5ndGhzIGxlbnM7CisJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDA7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGk7CisJcmRzX2luZm9fZnVuYyBmdW5jOworCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOworCWludCByZXQ7CisJaW50IGxlbjsKKwlpbnQgdG90YWw7CisKKwlpZiAoZ2V0X3VzZXIobGVuLCBvcHRsZW4pKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNoZWNrIGZvciBhbGwga2luZHMgb2Ygd3JhcHBpbmcgYW5kIHRoZSBsaWtlICovCisJc3RhcnQgPSAodW5zaWduZWQgbG9uZylvcHR2YWw7CisJaWYgKGxlbiA8IDAgfHwgbGVuICsgUEFHRV9TSVpFIC0gMSA8IGxlbiB8fCBzdGFydCArIGxlbiA8IHN0YXJ0KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGEgMCBsZW4gY2FsbCBpcyBqdXN0IHRyeWluZyB0byBwcm9iZSBpdHMgbGVuZ3RoICovCisJaWYgKGxlbiA9PSAwKQorCQlnb3RvIGNhbGxfZnVuYzsKKworCW5yX3BhZ2VzID0gKFBBR0VfQUxJR04oc3RhcnQgKyBsZW4pIC0gKHN0YXJ0ICYgUEFHRV9NQVNLKSkKKwkJCT4+IFBBR0VfU0hJRlQ7CisKKwlwYWdlcyA9IGttYWxsb2MobnJfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmIChwYWdlcyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIHN0YXJ0LCBucl9wYWdlcywgMSwgMCwKKwkJCSAgICAgcGFnZXMsIE5VTEwpOworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJaWYgKHJldCAhPSBucl9wYWdlcykgeworCQlpZiAocmV0ID4gMCkKKwkJCW5yX3BhZ2VzID0gcmV0OworCQllbHNlCisJCQlucl9wYWdlcyA9IDA7CisJCXJldCA9IC1FQUdBSU47IC8qIFhYWCA/ICovCisJCWdvdG8gb3V0OworCX0KKworCXJkc2RlYnVnKCJsZW4gJWQgbnJfcGFnZXMgJWx1XG4iLCBsZW4sIG5yX3BhZ2VzKTsKKworY2FsbF9mdW5jOgorCWZ1bmMgPSByZHNfaW5mb19mdW5jc1tvcHRuYW1lIC0gUkRTX0lORk9fRklSU1RdOworCWlmIChmdW5jID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT1BST1RPT1BUOworCQlnb3RvIG91dDsKKwl9CisKKwlpdGVyLnBhZ2VzID0gcGFnZXM7CisJaXRlci5hZGRyID0gTlVMTDsKKwlpdGVyLm9mZnNldCA9IHN0YXJ0ICYgKFBBR0VfU0laRSAtIDEpOworCisJZnVuYyhzb2NrLCBsZW4sICZpdGVyLCAmbGVucyk7CisJQlVHX09OKGxlbnMuZWFjaCA9PSAwKTsKKworCXRvdGFsID0gbGVucy5uciAqIGxlbnMuZWFjaDsKKworCXJkc19pbmZvX2l0ZXJfdW5tYXAoJml0ZXIpOworCisJaWYgKHRvdGFsID4gbGVuKSB7CisJCWxlbiA9IHRvdGFsOworCQlyZXQgPSAtRU5PU1BDOworCX0gZWxzZSB7CisJCWxlbiA9IHRvdGFsOworCQlyZXQgPSBsZW5zLmVhY2g7CisJfQorCisJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0ID0gLUVGQVVMVDsKKworb3V0OgorCWZvciAoaSA9IDA7IHBhZ2VzICE9IE5VTEwgJiYgaSA8IG5yX3BhZ2VzOyBpKyspCisJCXB1dF9wYWdlKHBhZ2VzW2ldKTsKKwlrZnJlZShwYWdlcyk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pbmZvLmggYi9uZXQvcmRzL2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmMwNTJjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pbmZvLmgKQEAgLTAsMCArMSwzMCBAQAorI2lmbmRlZiBfUkRTX0lORk9fSAorI2RlZmluZSBfUkRTX0lORk9fSAorCitzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyB7CisJdW5zaWduZWQgaW50CW5yOworCXVuc2lnbmVkIGludAllYWNoOworfTsKKworc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yOworCisvKgorICogVGhlc2UgZnVuY3Rpb25zIG11c3QgZmlsbCBpbiB0aGUgZmllbGRzIG9mIEBsZW5zIHRvIHJlZmxlY3QgdGhlIHNpemUKKyAqIG9mIHRoZSBhdmFpbGFibGUgaW5mbyBzb3VyY2UuICBJZiB0aGUgc25hcHNob3QgZml0cyBpbiBAbGVuIHRoZW4gaXQKKyAqIHNob3VsZCBiZSBjb3BpZWQgdXNpbmcgQGl0ZXIuICBUaGUgY2FsbGVyIHdpbGwgZGVkdWNlIGlmIGl0IHdhcyBjb3BpZWQKKyAqIG9yIG5vdCBieSBjb21wYXJpbmcgdGhlIGxlbmd0aHMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKnJkc19pbmZvX2Z1bmMpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBsZW4sCisJCQkgICAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkgICAgICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucyk7CisKK3ZvaWQgcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhpbnQgb3B0bmFtZSwgcmRzX2luZm9fZnVuYyBmdW5jKTsKK3ZvaWQgcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKGludCBvcHRuYW1lLCByZHNfaW5mb19mdW5jIGZ1bmMpOworaW50IHJkc19pbmZvX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsCisJCQlpbnQgX191c2VyICpvcHRsZW4pOwordm9pZCByZHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwgdm9pZCAqZGF0YSwKKwkJICAgdW5zaWduZWQgbG9uZyBieXRlcyk7Cit2b2lkIHJkc19pbmZvX2l0ZXJfdW5tYXAoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyKTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXcuYyBiL25ldC9yZHMvaXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjU2OTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pdy5jCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJpdy5oIgorCit1bnNpZ25lZCBpbnQgZmFzdHJlZ19wb29sX3NpemUgPSBSRFNfRkFTVFJFR19QT09MX1NJWkU7Cit1bnNpZ25lZCBpbnQgZmFzdHJlZ19tZXNzYWdlX3NpemUgPSBSRFNfRkFTVFJFR19TSVpFICsgMTsgLyogKzEgYWxsb3dzIGZvciB1bmFsaWduZWQgTVJzICovCisKK21vZHVsZV9wYXJhbShmYXN0cmVnX3Bvb2xfc2l6ZSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZmFzdHJlZ19wb29sX3NpemUsICIgTWF4IG51bWJlciBvZiBmYXN0cmVnIE1ScyBwZXIgZGV2aWNlIik7Cittb2R1bGVfcGFyYW0oZmFzdHJlZ19tZXNzYWdlX3NpemUsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGZhc3RyZWdfbWVzc2FnZV9zaXplLCAiIE1heCBzaXplIG9mIGEgUkRNQSB0cmFuc2ZlciAoZmFzdHJlZyBNUnMpIik7CisKK3N0cnVjdCBsaXN0X2hlYWQgcmRzX2l3X2RldmljZXM7CisKK0RFRklORV9TUElOTE9DSyhpd19ub2Rldl9jb25uc19sb2NrKTsKK0xJU1RfSEVBRChpd19ub2Rldl9jb25ucyk7CisKK3ZvaWQgcmRzX2l3X2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJc3RydWN0IGliX2RldmljZV9hdHRyICpkZXZfYXR0cjsKKworCS8qIE9ubHkgaGFuZGxlIGl3YXJwIGRldmljZXMgKi8KKwlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgIT0gUkRNQV9OT0RFX1JOSUMpCisJCXJldHVybjsKKworCWRldl9hdHRyID0ga21hbGxvYyhzaXplb2YgKmRldl9hdHRyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldl9hdHRyKQorCQlyZXR1cm47CisKKwlpZiAoaWJfcXVlcnlfZGV2aWNlKGRldmljZSwgZGV2X2F0dHIpKSB7CisJCXJkc2RlYnVnKCJRdWVyeSBkZXZpY2UgZmFpbGVkIGZvciAlc1xuIiwgZGV2aWNlLT5uYW1lKTsKKwkJZ290byBmcmVlX2F0dHI7CisJfQorCisJcmRzX2l3ZGV2ID0ga21hbGxvYyhzaXplb2YgKnJkc19pd2RldiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZHNfaXdkZXYpCisJCWdvdG8gZnJlZV9hdHRyOworCisJc3Bpbl9sb2NrX2luaXQoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCisJcmRzX2l3ZGV2LT5kbWFfbG9jYWxfbGtleSA9ICEhKGRldl9hdHRyLT5kZXZpY2VfY2FwX2ZsYWdzICYgSUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKTsKKwlyZHNfaXdkZXYtPm1heF93cnMgPSBkZXZfYXR0ci0+bWF4X3FwX3dyOworCXJkc19pd2Rldi0+bWF4X3NnZSA9IG1pbihkZXZfYXR0ci0+bWF4X3NnZSwgUkRTX0lXX01BWF9TR0UpOworCisJcmRzX2l3ZGV2LT5wYWdlX3NoaWZ0ID0gbWF4KFBBR0VfU0hJRlQsIGZmcyhkZXZfYXR0ci0+cGFnZV9zaXplX2NhcCkgLSAxKTsKKworCXJkc19pd2Rldi0+ZGV2ID0gZGV2aWNlOworCXJkc19pd2Rldi0+cGQgPSBpYl9hbGxvY19wZChkZXZpY2UpOworCWlmIChJU19FUlIocmRzX2l3ZGV2LT5wZCkpCisJCWdvdG8gZnJlZV9kZXY7CisKKwlpZiAoIXJkc19pd2Rldi0+ZG1hX2xvY2FsX2xrZXkpIHsKKwkJaWYgKGRldmljZS0+bm9kZV90eXBlICE9IFJETUFfTk9ERV9STklDKSB7CisJCQlyZHNfaXdkZXYtPm1yID0gaWJfZ2V0X2RtYV9tcihyZHNfaXdkZXYtPnBkLAorCQkJCQkJSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKKwkJfSBlbHNlIHsKKwkJCXJkc19pd2Rldi0+bXIgPSBpYl9nZXRfZG1hX21yKHJkc19pd2Rldi0+cGQsCisJCQkJCQlJQl9BQ0NFU1NfUkVNT1RFX1JFQUQgfAorCQkJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURSB8CisJCQkJCQlJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpOworCQl9CisJCWlmIChJU19FUlIocmRzX2l3ZGV2LT5tcikpCisJCQlnb3RvIGVycl9wZDsKKwl9IGVsc2UKKwkJcmRzX2l3ZGV2LT5tciA9IE5VTEw7CisKKwlyZHNfaXdkZXYtPm1yX3Bvb2wgPSByZHNfaXdfY3JlYXRlX21yX3Bvb2wocmRzX2l3ZGV2KTsKKwlpZiAoSVNfRVJSKHJkc19pd2Rldi0+bXJfcG9vbCkpIHsKKwkJcmRzX2l3ZGV2LT5tcl9wb29sID0gTlVMTDsKKwkJZ290byBlcnJfbXI7CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnJkc19pd2Rldi0+Y21faWRfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnJkc19pd2Rldi0+Y29ubl9saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZyZHNfaXdkZXYtPmxpc3QsICZyZHNfaXdfZGV2aWNlcyk7CisKKwlpYl9zZXRfY2xpZW50X2RhdGEoZGV2aWNlLCAmcmRzX2l3X2NsaWVudCwgcmRzX2l3ZGV2KTsKKworCWdvdG8gZnJlZV9hdHRyOworCitlcnJfbXI6CisJaWYgKHJkc19pd2Rldi0+bXIpCisJCWliX2RlcmVnX21yKHJkc19pd2Rldi0+bXIpOworZXJyX3BkOgorCWliX2RlYWxsb2NfcGQocmRzX2l3ZGV2LT5wZCk7CitmcmVlX2RldjoKKwlrZnJlZShyZHNfaXdkZXYpOworZnJlZV9hdHRyOgorCWtmcmVlKGRldl9hdHRyKTsKK30KKwordm9pZCByZHNfaXdfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlzdHJ1Y3QgcmRzX2l3X2NtX2lkICppX2NtX2lkLCAqbmV4dDsKKworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShkZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKwlpZiAoIXJkc19pd2RldikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlfY21faWQsIG5leHQsICZyZHNfaXdkZXYtPmNtX2lkX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmlfY21faWQtPmxpc3QpOworCQlrZnJlZShpX2NtX2lkKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCXJkc19pd19yZW1vdmVfY29ubnMocmRzX2l3ZGV2KTsKKworCWlmIChyZHNfaXdkZXYtPm1yX3Bvb2wpCisJCXJkc19pd19kZXN0cm95X21yX3Bvb2wocmRzX2l3ZGV2LT5tcl9wb29sKTsKKworCWlmIChyZHNfaXdkZXYtPm1yKQorCQlpYl9kZXJlZ19tcihyZHNfaXdkZXYtPm1yKTsKKworCXdoaWxlIChpYl9kZWFsbG9jX3BkKHJkc19pd2Rldi0+cGQpKSB7CisJCXJkc2RlYnVnKCJGYWlsZWQgdG8gZGVhbGxvYyBwZCAlcFxuIiwgcmRzX2l3ZGV2LT5wZCk7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlsaXN0X2RlbCgmcmRzX2l3ZGV2LT5saXN0KTsKKwlrZnJlZShyZHNfaXdkZXYpOworfQorCitzdHJ1Y3QgaWJfY2xpZW50IHJkc19pd19jbGllbnQgPSB7CisJLm5hbWUgICA9ICJyZHNfaXciLAorCS5hZGQgICAgPSByZHNfaXdfYWRkX29uZSwKKwkucmVtb3ZlID0gcmRzX2l3X3JlbW92ZV9vbmUKK307CisKK3N0YXRpYyBpbnQgcmRzX2l3X2Nvbm5faW5mb192aXNpdG9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkgICAgdm9pZCAqYnVmZmVyKQoreworCXN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvID0gYnVmZmVyOworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWM7CisKKwkvKiBXZSB3aWxsIG9ubHkgZXZlciBsb29rIGF0IElCIHRyYW5zcG9ydHMgKi8KKwlpZiAoY29ubi0+Y190cmFucyAhPSAmcmRzX2l3X3RyYW5zcG9ydCkKKwkJcmV0dXJuIDA7CisKKwlpaW5mby0+c3JjX2FkZHIgPSBjb25uLT5jX2xhZGRyOworCWlpbmZvLT5kc3RfYWRkciA9IGNvbm4tPmNfZmFkZHI7CisKKwltZW1zZXQoJmlpbmZvLT5zcmNfZ2lkLCAwLCBzaXplb2YoaWluZm8tPnNyY19naWQpKTsKKwltZW1zZXQoJmlpbmZvLT5kc3RfZ2lkLCAwLCBzaXplb2YoaWluZm8tPmRzdF9naWQpKTsKKwlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwkJc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyOworCisJCWljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwkJZGV2X2FkZHIgPSAmaWMtPmlfY21faWQtPnJvdXRlLmFkZHIuZGV2X2FkZHI7CisKKwkJaWJfYWRkcl9nZXRfc2dpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmaWluZm8tPnNyY19naWQpOworCQlpYl9hZGRyX2dldF9kZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZpaW5mby0+ZHN0X2dpZCk7CisKKwkJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGljLT5pX2NtX2lkLT5kZXZpY2UsICZyZHNfaXdfY2xpZW50KTsKKwkJaWluZm8tPm1heF9zZW5kX3dyID0gaWMtPmlfc2VuZF9yaW5nLndfbnI7CisJCWlpbmZvLT5tYXhfcmVjdl93ciA9IGljLT5pX3JlY3ZfcmluZy53X25yOworCQlpaW5mby0+bWF4X3NlbmRfc2dlID0gcmRzX2l3ZGV2LT5tYXhfc2dlOworCQlyZHNfaXdfZ2V0X21yX2luZm8ocmRzX2l3ZGV2LCBpaW5mbyk7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfaWNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJcmRzX2Zvcl9lYWNoX2Nvbm5faW5mbyhzb2NrLCBsZW4sIGl0ZXIsIGxlbnMsCisJCQkJcmRzX2l3X2Nvbm5faW5mb192aXNpdG9yLAorCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2luZm9fcmRtYV9jb25uZWN0aW9uKSk7Cit9CisKKworLyoKKyAqIEVhcmx5IFJEUy9JQiB3YXMgYnVpbHQgdG8gb25seSBiaW5kIHRvIGFuIGFkZHJlc3MgaWYgdGhlcmUgaXMgYW4gSVBvSUIKKyAqIGRldmljZSB3aXRoIHRoYXQgYWRkcmVzcyBzZXQuCisgKgorICogSWYgaXQgd2VyZSBtZSwgSSdkIGFkdm9jYXRlIGZvciBzb21ldGhpbmcgbW9yZSBmbGV4aWJsZS4gIFNlbmRpbmcgYW5kCisgKiByZWNlaXZpbmcgc2hvdWxkIGJlIGRldmljZS1hZ25vc3RpYy4gIFRyYW5zcG9ydHMgd291bGQgdHJ5IGFuZCBtYWludGFpbgorICogY29ubmVjdGlvbnMgYmV0d2VlbiBwZWVycyB3aG8gaGF2ZSBtZXNzYWdlcyBxdWV1ZWQuICBVc2Vyc3BhY2Ugd291bGQgYmUKKyAqIGFsbG93ZWQgdG8gaW5mbHVlbmNlIHdoaWNoIHBhdGhzIGhhdmUgcHJpb3JpdHkuICBXZSBjb3VsZCBjYWxsIHVzZXJzcGFjZQorICogYXNzZXJ0aW5nIHRoaXMgcG9saWN5ICJyb3V0aW5nIi4KKyAqLworc3RhdGljIGludCByZHNfaXdfbGFkZHJfY2hlY2soX19iZTMyIGFkZHIpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQ7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKworCS8qIENyZWF0ZSBhIENNQSBJRCBhbmQgdHJ5IHRvIGJpbmQgaXQuIFRoaXMgY2F0Y2hlcyBib3RoCisJICogSUIgYW5kIGlXQVJQIGNhcGFibGUgTklDcy4KKwkgKi8KKwljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKE5VTEwsIE5VTEwsIFJETUFfUFNfVENQKTsKKwlpZiAoIWNtX2lkKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHNpbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzaW4uc2luX2FkZHIuc19hZGRyID0gYWRkcjsKKworCS8qIHJkbWFfYmluZF9hZGRyIHdpbGwgb25seSBzdWNjZWVkIGZvciBJQiAmIGlXQVJQIGRldmljZXMgKi8KKwlyZXQgPSByZG1hX2JpbmRfYWRkcihjbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4pOworCS8qIGR1ZSB0byB0aGlzLCB3ZSB3aWxsIGNsYWltIHRvIHN1cHBvcnQgSUIgZGV2aWNlcyB1bmxlc3Mgd2UKKwkgICBjaGVjayBub2RlX3R5cGUuICovCisJaWYgKHJldCB8fCBjbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUgIT0gUkRNQV9OT0RFX1JOSUMpCisJCXJldCA9IC1FQUREUk5PVEFWQUlMOworCisJcmRzZGVidWcoImFkZHIgJXBJNCByZXQgJWQgbm9kZSB0eXBlICVkXG4iLAorCQkmYWRkciwgcmV0LAorCQljbV9pZC0+ZGV2aWNlID8gY21faWQtPmRldmljZS0+bm9kZV90eXBlIDogLTEpOworCisJcmRtYV9kZXN0cm95X2lkKGNtX2lkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2l3X2V4aXQodm9pZCkKK3sKKwlyZHNfaW5mb19kZXJlZ2lzdGVyX2Z1bmMoUkRTX0lORk9fSVdBUlBfQ09OTkVDVElPTlMsIHJkc19pd19pY19pbmZvKTsKKwlyZHNfaXdfcmVtb3ZlX25vZGV2X2Nvbm5zKCk7CisJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnJkc19pd19jbGllbnQpOworCXJkc19pd19zeXNjdGxfZXhpdCgpOworCXJkc19pd19yZWN2X2V4aXQoKTsKKwlyZHNfdHJhbnNfdW5yZWdpc3RlcigmcmRzX2l3X3RyYW5zcG9ydCk7Cit9CisKK3N0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pd190cmFuc3BvcnQgPSB7CisJLmxhZGRyX2NoZWNrCQk9IHJkc19pd19sYWRkcl9jaGVjaywKKwkueG1pdF9jb21wbGV0ZQkJPSByZHNfaXdfeG1pdF9jb21wbGV0ZSwKKwkueG1pdAkJCT0gcmRzX2l3X3htaXQsCisJLnhtaXRfY29uZ19tYXAJCT0gTlVMTCwKKwkueG1pdF9yZG1hCQk9IHJkc19pd194bWl0X3JkbWEsCisJLnJlY3YJCQk9IHJkc19pd19yZWN2LAorCS5jb25uX2FsbG9jCQk9IHJkc19pd19jb25uX2FsbG9jLAorCS5jb25uX2ZyZWUJCT0gcmRzX2l3X2Nvbm5fZnJlZSwKKwkuY29ubl9jb25uZWN0CQk9IHJkc19pd19jb25uX2Nvbm5lY3QsCisJLmNvbm5fc2h1dGRvd24JCT0gcmRzX2l3X2Nvbm5fc2h1dGRvd24sCisJLmluY19jb3B5X3RvX3VzZXIJPSByZHNfaXdfaW5jX2NvcHlfdG9fdXNlciwKKwkuaW5jX3B1cmdlCQk9IHJkc19pd19pbmNfcHVyZ2UsCisJLmluY19mcmVlCQk9IHJkc19pd19pbmNfZnJlZSwKKwkuY21faW5pdGlhdGVfY29ubmVjdAk9IHJkc19pd19jbV9pbml0aWF0ZV9jb25uZWN0LAorCS5jbV9oYW5kbGVfY29ubmVjdAk9IHJkc19pd19jbV9oYW5kbGVfY29ubmVjdCwKKwkuY21fY29ubmVjdF9jb21wbGV0ZQk9IHJkc19pd19jbV9jb25uZWN0X2NvbXBsZXRlLAorCS5zdGF0c19pbmZvX2NvcHkJPSByZHNfaXdfc3RhdHNfaW5mb19jb3B5LAorCS5leGl0CQkJPSByZHNfaXdfZXhpdCwKKwkuZ2V0X21yCQkJPSByZHNfaXdfZ2V0X21yLAorCS5zeW5jX21yCQk9IHJkc19pd19zeW5jX21yLAorCS5mcmVlX21yCQk9IHJkc19pd19mcmVlX21yLAorCS5mbHVzaF9tcnMJCT0gcmRzX2l3X2ZsdXNoX21ycywKKwkudF9vd25lcgkJPSBUSElTX01PRFVMRSwKKwkudF9uYW1lCQkJPSAiaXdhcnAiLAorCS50X3ByZWZlcl9sb29wYmFjawk9IDEsCit9OworCitpbnQgX19pbml0IHJkc19pd19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCUlOSVRfTElTVF9IRUFEKCZyZHNfaXdfZGV2aWNlcyk7CisKKwlyZXQgPSBpYl9yZWdpc3Rlcl9jbGllbnQoJnJkc19pd19jbGllbnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gcmRzX2l3X3N5c2N0bF9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfaWJyZWc7CisKKwlyZXQgPSByZHNfaXdfcmVjdl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfc3lzY3RsOworCisJcmV0ID0gcmRzX3RyYW5zX3JlZ2lzdGVyKCZyZHNfaXdfdHJhbnNwb3J0KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9yZWN2OworCisJcmRzX2luZm9fcmVnaXN0ZXJfZnVuYyhSRFNfSU5GT19JV0FSUF9DT05ORUNUSU9OUywgcmRzX2l3X2ljX2luZm8pOworCisJZ290byBvdXQ7CisKK291dF9yZWN2OgorCXJkc19pd19yZWN2X2V4aXQoKTsKK291dF9zeXNjdGw6CisJcmRzX2l3X3N5c2N0bF9leGl0KCk7CitvdXRfaWJyZWc6CisJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnJkc19pd19jbGllbnQpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pdy5oIGIvbmV0L3Jkcy9pdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZGRhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3LmgKQEAgLTAsMCArMSwzOTUgQEAKKyNpZm5kZWYgX1JEU19JV19ICisjZGVmaW5lIF9SRFNfSVdfSAorCisjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgorI2luY2x1ZGUgPHJkbWEvcmRtYV9jbS5oPgorI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWFfdHJhbnNwb3J0LmgiCisKKyNkZWZpbmUgUkRTX0ZBU1RSRUdfU0laRQkJMjAKKyNkZWZpbmUgUkRTX0ZBU1RSRUdfUE9PTF9TSVpFCQkyMDQ4CisKKyNkZWZpbmUgUkRTX0lXX01BWF9TR0UJCQk4CisjZGVmaW5lIFJEU19JV19SRUNWX1NHRSAJCTIKKworI2RlZmluZSBSRFNfSVdfREVGQVVMVF9SRUNWX1dSCQkxMDI0CisjZGVmaW5lIFJEU19JV19ERUZBVUxUX1NFTkRfV1IJCTI1NgorCisjZGVmaW5lIFJEU19JV19TVVBQT1JURURfUFJPVE9DT0xTCTB4MDAwMDAwMDMJLyogbWlub3IgdmVyc2lvbnMgc3VwcG9ydGVkICovCisKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHJkc19pd19kZXZpY2VzOworCisvKgorICogSUIgcG9zdHMgUkRTX0ZSQUdfU0laRSBmcmFnbWVudHMgb2YgcGFnZXMgdG8gdGhlIHJlY2VpdmUgcXVldWVzIHRvCisgKiB0cnkgYW5kIG1pbmltaXplIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRpZWQgdXAgYm90aCB0aGUgZGV2aWNlIGFuZAorICogc29ja2V0IHJlY2VpdmUgcXVldWVzLgorICovCisvKiBwYWdlIG9mZnNldCBvZiB0aGUgZmluYWwgZnVsbCBmcmFnIHRoYXQgZml0cyBpbiB0aGUgcGFnZSAqLworI2RlZmluZSBSRFNfUEFHRV9MQVNUX09GRiAoKChQQUdFX1NJWkUgIC8gUkRTX0ZSQUdfU0laRSkgLSAxKSAqIFJEU19GUkFHX1NJWkUpCitzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyB7CisJc3RydWN0IGxpc3RfaGVhZAlmX2l0ZW07CisJc3RydWN0IHBhZ2UJCSpmX3BhZ2U7CisJdW5zaWduZWQgbG9uZwkJZl9vZmZzZXQ7CisJZG1hX2FkZHJfdCAJCWZfbWFwcGVkOworfTsKKworc3RydWN0IHJkc19pd19pbmNvbWluZyB7CisJc3RydWN0IGxpc3RfaGVhZAlpaV9mcmFnczsKKwlzdHJ1Y3QgcmRzX2luY29taW5nCWlpX2luYzsKK307CisKK3N0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlIHsKKwkvKiBBZGQgbmV3IGZpZWxkcyBhdCB0aGUgZW5kLCBhbmQgZG9uJ3QgcGVybXV0ZSBleGlzdGluZyBmaWVsZHMuICovCisJX19iZTMyCQkJZHBfc2FkZHI7CisJX19iZTMyCQkJZHBfZGFkZHI7CisJdTgJCQlkcF9wcm90b2NvbF9tYWpvcjsKKwl1OAkJCWRwX3Byb3RvY29sX21pbm9yOworCV9fYmUxNgkJCWRwX3Byb3RvY29sX21pbm9yX21hc2s7IC8qIGJpdG1hc2sgKi8KKwlfX2JlMzIJCQlkcF9yZXNlcnZlZDE7CisJX19iZTY0CQkJZHBfYWNrX3NlcTsKKwlfX2JlMzIJCQlkcF9jcmVkaXQ7CQkvKiBub24temVybyBlbmFibGVzIGZsb3cgY3RsICovCit9OworCitzdHJ1Y3QgcmRzX2l3X3NjYXR0ZXJsaXN0IHsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKmxpc3Q7CisJdW5zaWduZWQgaW50CQlsZW47CisJaW50CQkJZG1hX2xlbjsKKwl1bnNpZ25lZCBpbnQJCWRtYV9ucGFnZXM7CisJdW5zaWduZWQgaW50CQlieXRlczsKK307CisKK3N0cnVjdCByZHNfaXdfbWFwcGluZyB7CisJc3BpbmxvY2tfdAkJbV9sb2NrOwkvKiBwcm90ZWN0IHRoZSBtYXBwaW5nIHN0cnVjdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJbV9saXN0OworCXN0cnVjdCByZHNfaXdfbXIJKm1fbXI7CisJdWludDMyX3QJCW1fcmtleTsKKwlzdHJ1Y3QgcmRzX2l3X3NjYXR0ZXJsaXN0IG1fc2c7Cit9OworCitzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayB7CisJc3RydWN0IHJkc19tZXNzYWdlCSpzX3JtOworCisJLyogV2Ugc2hvdWxkIHJlYWxseSBwdXQgdGhlc2UgaW50byBhIHVuaW9uOiAqLworCXN0cnVjdCByZHNfcmRtYV9vcAkqc19vcDsKKwlzdHJ1Y3QgcmRzX2l3X21hcHBpbmcJKnNfbWFwcGluZzsKKwlzdHJ1Y3QgaWJfbXIJCSpzX21yOworCXN0cnVjdCBpYl9mYXN0X3JlZ19wYWdlX2xpc3QgKnNfcGFnZV9saXN0OworCXVuc2lnbmVkIGNoYXIJCXNfcmVtYXBfY291bnQ7CisKKwlzdHJ1Y3QgaWJfc2VuZF93cglzX3dyOworCXN0cnVjdCBpYl9zZ2UJCXNfc2dlW1JEU19JV19NQVhfU0dFXTsKKwl1bnNpZ25lZCBsb25nCQlzX3F1ZXVlZDsKK307CisKK3N0cnVjdCByZHNfaXdfcmVjdl93b3JrIHsKKwlzdHJ1Y3QgcmRzX2l3X2luY29taW5nIAkqcl9pd2luYzsKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZwkqcl9mcmFnOworCXN0cnVjdCBpYl9yZWN2X3dyCXJfd3I7CisJc3RydWN0IGliX3NnZQkJcl9zZ2VbMl07Cit9OworCitzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyB7CisJdTMyCQl3X25yOworCXUzMgkJd19hbGxvY19wdHI7CisJdTMyCQl3X2FsbG9jX2N0cjsKKwl1MzIJCXdfZnJlZV9wdHI7CisJYXRvbWljX3QJd19mcmVlX2N0cjsKK307CisKK3N0cnVjdCByZHNfaXdfZGV2aWNlOworCitzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24geworCisJc3RydWN0IGxpc3RfaGVhZAlpd19ub2RlOworCXN0cnVjdCByZHNfaXdfZGV2aWNlIAkqcmRzX2l3ZGV2OworCXN0cnVjdCByZHNfY29ubmVjdGlvbgkqY29ubjsKKworCS8qIGFscGhhYmV0IHNvdXAsIElCVEEgc3R5bGUgKi8KKwlzdHJ1Y3QgcmRtYV9jbV9pZAkqaV9jbV9pZDsKKwlzdHJ1Y3QgaWJfcGQJCSppX3BkOworCXN0cnVjdCBpYl9tcgkJKmlfbXI7CisJc3RydWN0IGliX2NxCQkqaV9zZW5kX2NxOworCXN0cnVjdCBpYl9jcQkJKmlfcmVjdl9jcTsKKworCS8qIHR4ICovCisJc3RydWN0IHJkc19pd193b3JrX3JpbmcJaV9zZW5kX3Jpbmc7CisJc3RydWN0IHJkc19tZXNzYWdlCSppX3JtOworCXN0cnVjdCByZHNfaGVhZGVyCSppX3NlbmRfaGRyczsKKwl1NjQJCQlpX3NlbmRfaGRyc19kbWE7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKmlfc2VuZHM7CisKKwkvKiByeCAqLworCXN0cnVjdCBtdXRleAkJaV9yZWN2X211dGV4OworCXN0cnVjdCByZHNfaXdfd29ya19yaW5nCWlfcmVjdl9yaW5nOworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcJKmlfaXdpbmM7CisJdTMyCQkJaV9yZWN2X2RhdGFfcmVtOworCXN0cnVjdCByZHNfaGVhZGVyCSppX3JlY3ZfaGRyczsKKwl1NjQJCQlpX3JlY3ZfaGRyc19kbWE7CisJc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKmlfcmVjdnM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcJaV9mcmFnOworCXU2NAkJCWlfYWNrX3JlY3Y7CS8qIGxhc3QgQUNLIHJlY2VpdmVkICovCisKKwkvKiBzZW5kaW5nIGFja3MgKi8KKwl1bnNpZ25lZCBsb25nCQlpX2Fja19mbGFnczsKKwl1NjQJCQlpX2Fja19uZXh0OwkvKiBuZXh0IEFDSyB0byBzZW5kICovCisJc3RydWN0IHJkc19oZWFkZXIJKmlfYWNrOworCXN0cnVjdCBpYl9zZW5kX3dyCWlfYWNrX3dyOworCXN0cnVjdCBpYl9zZ2UJCWlfYWNrX3NnZTsKKwl1NjQJCQlpX2Fja19kbWE7CisJdW5zaWduZWQgbG9uZwkJaV9hY2tfcXVldWVkOworCisJLyogRmxvdyBjb250cm9sIHJlbGF0ZWQgaW5mb3JtYXRpb24KKwkgKgorCSAqIE91ciBhbGdvcml0aG0gdXNlcyBhIHBhaXIgdmFyaWFibGVzIHRoYXQgd2UgbmVlZCB0byBhY2Nlc3MKKwkgKiBhdG9taWNhbGx5IC0gb25lIGZvciB0aGUgc2VuZCBjcmVkaXRzLCBhbmQgb25lIHBvc3RlZAorCSAqIHJlY3YgY3JlZGl0cyB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRvIHJlbW90ZS4KKwkgKiBSYXRoZXIgdGhhbiBwcm90ZWN0IHRoZW0gdXNpbmcgYSBzbG93IHNwaW5sb2NrLCB3ZSBwdXQgYm90aCBpbnRvCisJICogYSBzaW5nbGUgYXRvbWljX3QgYW5kIHVwZGF0ZSBpdCB1c2luZyBjbXB4Y2hnCisJICovCisJYXRvbWljX3QJCWlfY3JlZGl0czsKKworCS8qIFByb3RvY29sIHZlcnNpb24gc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKwl1bnNpZ25lZCBpbnQJCWlfZmxvd2N0bDoxOwkvKiBlbmFibGUvZGlzYWJsZSBmbG93IGN0bCAqLworCXVuc2lnbmVkIGludAkJaV9kbWFfbG9jYWxfbGtleToxOworCXVuc2lnbmVkIGludAkJaV9mYXN0cmVnX3Bvc3RlZDoxOyAvKiBmYXN0cmVnIHBvc3RlZCBvbiB0aGlzIGNvbm5lY3Rpb24gKi8KKwkvKiBCYXRjaGVkIGNvbXBsZXRpb25zICovCisJdW5zaWduZWQgaW50CQlpX3Vuc2lnbmFsZWRfd3JzOworCWxvbmcJCQlpX3Vuc2lnbmFsZWRfYnl0ZXM7Cit9OworCisvKiBUaGlzIGFzc3VtZXMgdGhhdCBhdG9taWNfdCBpcyBhdCBsZWFzdCAzMiBiaXRzICovCisjZGVmaW5lIElCX0dFVF9TRU5EX0NSRURJVFModikJKCh2KSAmIDB4ZmZmZikKKyNkZWZpbmUgSUJfR0VUX1BPU1RfQ1JFRElUUyh2KQkoKHYpID4+IDE2KQorI2RlZmluZSBJQl9TRVRfU0VORF9DUkVESVRTKHYpCSgodikgJiAweGZmZmYpCisjZGVmaW5lIElCX1NFVF9QT1NUX0NSRURJVFModikJKCh2KSA8PCAxNikKKworc3RydWN0IHJkc19pd19jbV9pZCB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCByZG1hX2NtX2lkCSpjbV9pZDsKK307CisKK3N0cnVjdCByZHNfaXdfZGV2aWNlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAljbV9pZF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJY29ubl9saXN0OworCXN0cnVjdCBpYl9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgaWJfcGQJCSpwZDsKKwlzdHJ1Y3QgaWJfbXIJCSptcjsKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wJKm1yX3Bvb2w7CisJaW50CQkJcGFnZV9zaGlmdDsKKwlpbnQJCQltYXhfc2dlOworCXVuc2lnbmVkIGludAkJbWF4X3dyczsKKwl1bnNpZ25lZCBpbnQJCWRtYV9sb2NhbF9sa2V5OjE7CisJc3BpbmxvY2tfdAkJc3BpbmxvY2s7CS8qIHByb3RlY3QgdGhlIGFib3ZlICovCit9OworCisvKiBiaXRzIGZvciBpX2Fja19mbGFncyAqLworI2RlZmluZSBJQl9BQ0tfSU5fRkxJR0hUCTAKKyNkZWZpbmUgSUJfQUNLX1JFUVVFU1RFRAkxCisKKy8qIE1hZ2ljIFdSX0lEIGZvciBBQ0tzICovCisjZGVmaW5lIFJEU19JV19BQ0tfV1JfSUQJKCh1NjQpMHhmZmZmZmZmZmZmZmZmZmZmVUxMKQorI2RlZmluZSBSRFNfSVdfRkFTVF9SRUdfV1JfSUQJKCh1NjQpMHhlZmVmZWZlZmVmZWZlZmVmVUxMKQorI2RlZmluZSBSRFNfSVdfTE9DQUxfSU5WX1dSX0lECSgodTY0KTB4ZGZkZmRmZGZkZmRmZGZkZlVMTCkKKworc3RydWN0IHJkc19pd19zdGF0aXN0aWNzIHsKKwl1aW50NjRfdAlzX2l3X2Nvbm5lY3RfcmFjZWQ7CisJdWludDY0X3QJc19pd19saXN0ZW5fY2xvc2VkX3N0YWxlOworCXVpbnQ2NF90CXNfaXdfdHhfY3FfY2FsbDsKKwl1aW50NjRfdAlzX2l3X3R4X2NxX2V2ZW50OworCXVpbnQ2NF90CXNfaXdfdHhfcmluZ19mdWxsOworCXVpbnQ2NF90CXNfaXdfdHhfdGhyb3R0bGU7CisJdWludDY0X3QJc19pd190eF9zZ19tYXBwaW5nX2ZhaWx1cmU7CisJdWludDY0X3QJc19pd190eF9zdGFsbGVkOworCXVpbnQ2NF90CXNfaXdfdHhfY3JlZGl0X3VwZGF0ZXM7CisJdWludDY0X3QJc19pd19yeF9jcV9jYWxsOworCXVpbnQ2NF90CXNfaXdfcnhfY3FfZXZlbnQ7CisJdWludDY0X3QJc19pd19yeF9yaW5nX2VtcHR5OworCXVpbnQ2NF90CXNfaXdfcnhfcmVmaWxsX2Zyb21fY3E7CisJdWludDY0X3QJc19pd19yeF9yZWZpbGxfZnJvbV90aHJlYWQ7CisJdWludDY0X3QJc19pd19yeF9hbGxvY19saW1pdDsKKwl1aW50NjRfdAlzX2l3X3J4X2NyZWRpdF91cGRhdGVzOworCXVpbnQ2NF90CXNfaXdfYWNrX3NlbnQ7CisJdWludDY0X3QJc19pd19hY2tfc2VuZF9mYWlsdXJlOworCXVpbnQ2NF90CXNfaXdfYWNrX3NlbmRfZGVsYXllZDsKKwl1aW50NjRfdAlzX2l3X2Fja19zZW5kX3BpZ2d5YmFja2VkOworCXVpbnQ2NF90CXNfaXdfYWNrX3JlY2VpdmVkOworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9hbGxvYzsKKwl1aW50NjRfdAlzX2l3X3JkbWFfbXJfZnJlZTsKKwl1aW50NjRfdAlzX2l3X3JkbWFfbXJfdXNlZDsKKwl1aW50NjRfdAlzX2l3X3JkbWFfbXJfcG9vbF9mbHVzaDsKKwl1aW50NjRfdAlzX2l3X3JkbWFfbXJfcG9vbF93YWl0OworCXVpbnQ2NF90CXNfaXdfcmRtYV9tcl9wb29sX2RlcGxldGVkOworfTsKKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZHNfaXdfd3E7CisKKy8qCisgKiBGYWtlIGliX2RtYV9zeW5jX3NnX2Zvcl97Y3B1LGRldmljZX0gYXMgbG9uZyBhcyBpYl92ZXJicy5oCisgKiBkb2Vzbid0IGRlZmluZSBpdC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHJkc19pd19kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnX2RtYV9sZW4sIGludCBkaXJlY3Rpb24pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZ1tpXSksCisJCQkJaWJfc2dfZG1hX2xlbihkZXYsICZzZ1tpXSksCisJCQkJZGlyZWN0aW9uKTsKKwl9Cit9CisjZGVmaW5lIGliX2RtYV9zeW5jX3NnX2Zvcl9jcHUJcmRzX2l3X2RtYV9zeW5jX3NnX2Zvcl9jcHUKKworc3RhdGljIGlubGluZSB2b2lkIHJkc19pd19kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBpYl9kZXZpY2UgKmRldiwKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IHNnX2RtYV9sZW4sIGludCBkaXJlY3Rpb24pCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2dfZG1hX2xlbjsgKytpKSB7CisJCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwKKwkJCQlpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZ1tpXSksCisJCQkJaWJfc2dfZG1hX2xlbihkZXYsICZzZ1tpXSksCisJCQkJZGlyZWN0aW9uKTsKKwl9Cit9CisjZGVmaW5lIGliX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJcmRzX2l3X2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UKKworc3RhdGljIGlubGluZSB1MzIgcmRzX2l3X2xvY2FsX2RtYV9sa2V5KHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJcmV0dXJuIGljLT5pX2RtYV9sb2NhbF9sa2V5ID8gaWMtPmlfY21faWQtPmRldmljZS0+bG9jYWxfZG1hX2xrZXkgOiBpYy0+aV9tci0+bGtleTsKK30KKworLyogaWIuYyAqLworZXh0ZXJuIHN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pd190cmFuc3BvcnQ7CitleHRlcm4gdm9pZCByZHNfaXdfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOworZXh0ZXJuIHZvaWQgcmRzX2l3X3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKK2V4dGVybiBzdHJ1Y3QgaWJfY2xpZW50IHJkc19pd19jbGllbnQ7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgZmFzdHJlZ19wb29sX3NpemU7CitleHRlcm4gdW5zaWduZWQgaW50IGZhc3RyZWdfbWVzc2FnZV9zaXplOworCitleHRlcm4gc3BpbmxvY2tfdCBpd19ub2Rldl9jb25uc19sb2NrOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaXdfbm9kZXZfY29ubnM7CisKKy8qIGliX2NtLmMgKi8KK2ludCByZHNfaXdfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCk7Cit2b2lkIHJkc19pd19jb25uX2ZyZWUodm9pZCAqYXJnKTsKK2ludCByZHNfaXdfY29ubl9jb25uZWN0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pd19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pd19zdGF0ZV9jaGFuZ2Uoc3RydWN0IHNvY2sgKnNrKTsKK2ludCBfX2luaXQgcmRzX2l3X2xpc3Rlbl9pbml0KHZvaWQpOwordm9pZCByZHNfaXdfbGlzdGVuX3N0b3Aodm9pZCk7Cit2b2lkIF9fcmRzX2l3X2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICosIC4uLik7CitpbnQgcmRzX2l3X2NtX2hhbmRsZV9jb25uZWN0KHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCwKKwkJCSAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKK2ludCByZHNfaXdfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpOwordm9pZCByZHNfaXdfY21fY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sCisJCQkJc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKKworCisjZGVmaW5lIHJkc19pd19jb25uX2Vycm9yKGNvbm4sIGZtdC4uLikgXAorCV9fcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgS0VSTl9XQVJOSU5HICJSRFMvSVc6ICIgZm10KQorCisvKiBpYl9yZG1hLmMgKi8KK2ludCByZHNfaXdfdXBkYXRlX2NtX2lkKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCk7CitpbnQgcmRzX2l3X2FkZF9jb25uKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19pd19yZW1vdmVfbm9kZXZfY29ubnModm9pZCk7Cit2b2lkIHJkc19pd19yZW1vdmVfY29ubnMoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldik7CitzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnJkc19pd19jcmVhdGVfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqKTsKK3ZvaWQgcmRzX2l3X2dldF9tcl9pbmZvKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZHNfaW5mb19yZG1hX2Nvbm5lY3Rpb24gKmlpbmZvKTsKK3ZvaWQgcmRzX2l3X2Rlc3Ryb3lfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKik7Cit2b2lkICpyZHNfaXdfZ2V0X21yKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGxvbmcgbmVudHMsCisJCSAgICBzdHJ1Y3QgcmRzX3NvY2sgKnJzLCB1MzIgKmtleV9yZXQpOwordm9pZCByZHNfaXdfc3luY19tcih2b2lkICp0cmFuc19wcml2YXRlLCBpbnQgZGlyKTsKK3ZvaWQgcmRzX2l3X2ZyZWVfbXIodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGludmFsaWRhdGUpOwordm9pZCByZHNfaXdfZmx1c2hfbXJzKHZvaWQpOwordm9pZCByZHNfaXdfcmVtb3ZlX2NtX2lkKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsIHN0cnVjdCByZG1hX2NtX2lkICpjbV9pZCk7CisKKy8qIGliX3JlY3YuYyAqLworaW50IF9faW5pdCByZHNfaXdfcmVjdl9pbml0KHZvaWQpOwordm9pZCByZHNfaXdfcmVjdl9leGl0KHZvaWQpOworaW50IHJkc19pd19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX2l3X3JlY3ZfcmVmaWxsKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgZ2ZwX3Qga3B0cl9nZnAsCisJCSAgICAgICBnZnBfdCBwYWdlX2dmcCwgaW50IHByZWZpbGwpOwordm9pZCByZHNfaXdfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19pd19pbmNfZnJlZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOworaW50IHJkc19pd19pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IGlvdmVjICppb3YsCisJCQkgICAgIHNpemVfdCBzaXplKTsKK3ZvaWQgcmRzX2l3X3JlY3ZfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpOwordm9pZCByZHNfaXdfcmVjdl9pbml0X3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pd19yZWN2X2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pd19yZWN2X2luaXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpOwordm9pZCByZHNfaXdfYXR0ZW1wdF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pd19hY2tfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKK3U2NCByZHNfaXdfcGlnZ3liX2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKTsKKworLyogaWJfcmluZy5jICovCit2b2lkIHJkc19pd19yaW5nX2luaXQoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiBucik7Cit2b2lkIHJkc19pd19yaW5nX3Jlc2l6ZShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIG5yKTsKK3UzMiByZHNfaXdfcmluZ19hbGxvYyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCwgdTMyICpwb3MpOwordm9pZCByZHNfaXdfcmluZ19mcmVlKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKTsKK3ZvaWQgcmRzX2l3X3JpbmdfdW5hbGxvYyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIHZhbCk7CitpbnQgcmRzX2l3X3JpbmdfZW1wdHkoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpOworaW50IHJkc19pd19yaW5nX2xvdyhzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZyk7Cit1MzIgcmRzX2l3X3Jpbmdfb2xkZXN0KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKTsKK3UzMiByZHNfaXdfcmluZ19jb21wbGV0ZWQoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB3cl9pZCwgdTMyIG9sZGVzdCk7CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgcmRzX2l3X3JpbmdfZW1wdHlfd2FpdDsKKworLyogaWJfc2VuZC5jICovCit2b2lkIHJkc19pd194bWl0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitpbnQgcmRzX2l3X3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQl1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLCB1bnNpZ25lZCBpbnQgb2ZmKTsKK3ZvaWQgcmRzX2l3X3NlbmRfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpOwordm9pZCByZHNfaXdfc2VuZF9pbml0X3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7Cit2b2lkIHJkc19pd19zZW5kX2NsZWFyX3Jpbmcoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyk7CitpbnQgcmRzX2l3X3htaXRfcmRtYShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApOwordm9pZCByZHNfaXdfc2VuZF9hZGRfY3JlZGl0cyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCBjcmVkaXRzKTsKK3ZvaWQgcmRzX2l3X2FkdmVydGlzZV9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHBvc3RlZCk7CitpbnQgcmRzX2l3X3NlbmRfZ3JhYl9jcmVkaXRzKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHUzMiB3YW50ZWQsCisJCQkgICAgIHUzMiAqYWR2X2NyZWRpdHMsIGludCBuZWVkX3Bvc3RlZCk7CisKKy8qIGliX3N0YXRzLmMgKi8KK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgcmRzX2l3X3N0YXRpc3RpY3MsIHJkc19pd19zdGF0cyk7CisjZGVmaW5lIHJkc19pd19zdGF0c19pbmMobWVtYmVyKSByZHNfc3RhdHNfaW5jX3doaWNoKHJkc19pd19zdGF0cywgbWVtYmVyKQordW5zaWduZWQgaW50IHJkc19pd19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgYXZhaWwpOworCisvKiBpYl9zeXNjdGwuYyAqLworaW50IF9faW5pdCByZHNfaXdfc3lzY3RsX2luaXQodm9pZCk7Cit2b2lkIHJkc19pd19zeXNjdGxfZXhpdCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3I7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXM7CitleHRlcm4gdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF9yZWN2X2FsbG9jYXRpb247CitleHRlcm4gdW5zaWduZWQgaW50IHJkc19pd19zeXNjdGxfZmxvd19jb250cm9sOworZXh0ZXJuIGN0bF90YWJsZSByZHNfaXdfc3lzY3RsX3RhYmxlW107CisKKy8qCisgKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBnZXR0aW5nL3NldHRpbmcgdGhlIGhlYWRlciBhbmQgZGF0YSBTR0VzIGluCisgKiBSRFMgcGFja2V0cyAobm90IFJETUEpCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGliX3NnZSAqCityZHNfaXdfaGVhZGVyX3NnZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgaWJfc2dlICpzZ2UpCit7CisJcmV0dXJuICZzZ2VbMF07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGliX3NnZSAqCityZHNfaXdfZGF0YV9zZ2Uoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgc3RydWN0IGliX3NnZSAqc2dlKQoreworCXJldHVybiAmc2dlWzFdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX2l3X3NldF82NGJpdCh1NjQgKnB0ciwgdTY0IHZhbCkKK3sKKyNpZiBCSVRTX1BFUl9MT05HID09IDY0CisJKnB0ciA9IHZhbDsKKyNlbHNlCisJc2V0XzY0Yml0KHB0ciwgdmFsKTsKKyNlbmRpZgorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfY20uYyBiL25ldC9yZHMvaXdfY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2VjYjNkCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19jbS5jCkBAIC0wLDAgKzEsNzUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgIml3LmgiCisKKy8qCisgKiBTZXQgdGhlIHNlbGVjdGVkIHByb3RvY29sIHZlcnNpb24KKyAqLworc3RhdGljIHZvaWQgcmRzX2l3X3NldF9wcm90b2NvbChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHVuc2lnbmVkIGludCB2ZXJzaW9uKQoreworCWNvbm4tPmNfdmVyc2lvbiA9IHZlcnNpb247Cit9CisKKy8qCisgKiBTZXQgdXAgZmxvdyBjb250cm9sCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19zZXRfZmxvd19jb250cm9sKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTMyIGNyZWRpdHMpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlpZiAocmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2wgJiYgY3JlZGl0cyAhPSAwKSB7CisJCS8qIFdlJ3JlIGRvaW5nIGZsb3cgY29udHJvbCAqLworCQlpYy0+aV9mbG93Y3RsID0gMTsKKwkJcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgY3JlZGl0cyk7CisJfSBlbHNlIHsKKwkJaWMtPmlfZmxvd2N0bCA9IDA7CisJfQorfQorCisvKgorICogQ29ubmVjdGlvbiBlc3RhYmxpc2hlZC4KKyAqIFdlIGdldCBoZXJlIGZvciBib3RoIG91dGdvaW5nIGFuZCBpbmNvbWluZyBjb25uZWN0aW9uLgorICovCit2b2lkIHJkc19pd19jbV9jb25uZWN0X2NvbXBsZXRlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCWNvbnN0IHN0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlICpkcCA9IE5VTEw7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlpbnQgZXJyOworCisJaWYgKGV2ZW50LT5wYXJhbS5jb25uLnByaXZhdGVfZGF0YV9sZW4pIHsKKwkJZHAgPSBldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGE7CisKKwkJcmRzX2l3X3NldF9wcm90b2NvbChjb25uLAorCQkJCVJEU19QUk9UT0NPTChkcC0+ZHBfcHJvdG9jb2xfbWFqb3IsCisJCQkJCWRwLT5kcF9wcm90b2NvbF9taW5vcikpOworCQlyZHNfaXdfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcC0+ZHBfY3JlZGl0KSk7CisJfQorCisJLyogdXBkYXRlIGliX2RldmljZSB3aXRoIHRoaXMgbG9jYWwgaXBhZGRyICYgY29ubiAqLworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisJZXJyID0gcmRzX2l3X3VwZGF0ZV9jbV9pZChyZHNfaXdkZXYsIGljLT5pX2NtX2lkKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9FUlIgInJkc19pd191cGRhdGVfaXBhZGRyIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCWVyciA9IHJkc19pd19hZGRfY29ubihyZHNfaXdkZXYsIGNvbm4pOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX0VSUiAicmRzX2l3X2FkZF9jb25uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCisJLyogSWYgdGhlIHBlZXIgZ2F2ZSB1cyB0aGUgbGFzdCBwYWNrZXQgaXQgc2F3LCBwcm9jZXNzIHRoaXMgYXMgaWYKKwkgKiB3ZSBoYWQgcmVjZWl2ZWQgYSByZWd1bGFyIEFDSy4gKi8KKwlpZiAoZHAgJiYgZHAtPmRwX2Fja19zZXEpCisJCXJkc19zZW5kX2Ryb3BfYWNrZWQoY29ubiwgYmU2NF90b19jcHUoZHAtPmRwX2Fja19zZXEpLCBOVUxMKTsKKworCXByaW50ayhLRVJOX05PVElDRSAiUkRTL0lXOiBjb25uZWN0ZWQgdG8gJXBJNDwtPiVwSTQgdmVyc2lvbiAldS4ldSVzXG4iLAorCQkJJmNvbm4tPmNfbGFkZHIsICZjb25uLT5jX2ZhZGRyLAorCQkJUkRTX1BST1RPQ09MX01BSk9SKGNvbm4tPmNfdmVyc2lvbiksCisJCQlSRFNfUFJPVE9DT0xfTUlOT1IoY29ubi0+Y192ZXJzaW9uKSwKKwkJCWljLT5pX2Zsb3djdGwgPyAiLCBmbG93IGNvbnRyb2wiIDogIiIpOworCisJcmRzX2Nvbm5lY3RfY29tcGxldGUoY29ubik7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19jbV9maWxsX2Nvbm5fcGFyYW0oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJc3RydWN0IHJkbWFfY29ubl9wYXJhbSAqY29ubl9wYXJhbSwKKwkJCXN0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlICpkcCwKKwkJCXUzMiBwcm90b2NvbF92ZXJzaW9uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJbWVtc2V0KGNvbm5fcGFyYW0sIDAsIHNpemVvZihzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtKSk7CisJLyogWFhYIHR1bmUgdGhlc2U/ICovCisJY29ubl9wYXJhbS0+cmVzcG9uZGVyX3Jlc291cmNlcyA9IDE7CisJY29ubl9wYXJhbS0+aW5pdGlhdG9yX2RlcHRoID0gMTsKKworCWlmIChkcCkgeworCQltZW1zZXQoZHAsIDAsIHNpemVvZigqZHApKTsKKwkJZHAtPmRwX3NhZGRyID0gY29ubi0+Y19sYWRkcjsKKwkJZHAtPmRwX2RhZGRyID0gY29ubi0+Y19mYWRkcjsKKwkJZHAtPmRwX3Byb3RvY29sX21ham9yID0gUkRTX1BST1RPQ09MX01BSk9SKHByb3RvY29sX3ZlcnNpb24pOworCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IgPSBSRFNfUFJPVE9DT0xfTUlOT1IocHJvdG9jb2xfdmVyc2lvbik7CisJCWRwLT5kcF9wcm90b2NvbF9taW5vcl9tYXNrID0gY3B1X3RvX2JlMTYoUkRTX0lXX1NVUFBPUlRFRF9QUk9UT0NPTFMpOworCQlkcC0+ZHBfYWNrX3NlcSA9IHJkc19pd19waWdneWJfYWNrKGljKTsKKworCQkvKiBBZHZlcnRpc2UgZmxvdyBjb250cm9sICovCisJCWlmIChpYy0+aV9mbG93Y3RsKSB7CisJCQl1bnNpZ25lZCBpbnQgY3JlZGl0czsKKworCQkJY3JlZGl0cyA9IElCX0dFVF9QT1NUX0NSRURJVFMoYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpKTsKKwkJCWRwLT5kcF9jcmVkaXQgPSBjcHVfdG9fYmUzMihjcmVkaXRzKTsKKwkJCWF0b21pY19zdWIoSUJfU0VUX1BPU1RfQ1JFRElUUyhjcmVkaXRzKSwgJmljLT5pX2NyZWRpdHMpOworCQl9CisKKwkJY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhID0gZHA7CisJCWNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4gPSBzaXplb2YoKmRwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19jcV9ldmVudF9oYW5kbGVyKHN0cnVjdCBpYl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJcmRzZGVidWcoImV2ZW50ICV1IGRhdGEgJXBcbiIsIGV2ZW50LT5ldmVudCwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19xcF9ldmVudF9oYW5kbGVyKHN0cnVjdCBpYl9ldmVudCAqZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCXJkc2RlYnVnKCJjb25uICVwIGljICVwIGV2ZW50ICV1XG4iLCBjb25uLCBpYywgZXZlbnQtPmV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQtPmV2ZW50KSB7CisJY2FzZSBJQl9FVkVOVF9DT01NX0VTVDoKKwkJcmRtYV9ub3RpZnkoaWMtPmlfY21faWQsIElCX0VWRU5UX0NPTU1fRVNUKTsKKwkJYnJlYWs7CisJY2FzZSBJQl9FVkVOVF9RUF9SRVFfRVJSOgorCWNhc2UgSUJfRVZFTlRfUVBfRkFUQUw6CisJZGVmYXVsdDoKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgIlJEUy9JVzogRmF0YWwgUVAgRXZlbnQgJXUgLSBjb25uZWN0aW9uICVwSTQtPiVwSTQuLi5yZWNvbm5lY3RpbmdcbiIsCisJCQlldmVudC0+ZXZlbnQsICZjb25uLT5jX2xhZGRyLAorCQkJJmNvbm4tPmNfZmFkZHIpOworCQlicmVhazsKKwl9Cit9CisKKy8qCisgKiBDcmVhdGUgYSBRUAorICovCitzdGF0aWMgaW50IHJkc19pd19pbml0X3FwX2F0dHJzKHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKmF0dHIsCisJCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsCisJCXN0cnVjdCByZHNfaXdfd29ya19yaW5nICpzZW5kX3JpbmcsCisJCXZvaWQgKCpzZW5kX2NxX2hhbmRsZXIpKHN0cnVjdCBpYl9jcSAqLCB2b2lkICopLAorCQlzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmVjdl9yaW5nLAorCQl2b2lkICgqcmVjdl9jcV9oYW5kbGVyKShzdHJ1Y3QgaWJfY3EgKiwgdm9pZCAqKSwKKwkJdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSByZHNfaXdkZXYtPmRldjsKKwl1bnNpZ25lZCBpbnQgc2VuZF9zaXplLCByZWN2X3NpemU7CisJaW50IHJldDsKKworCS8qIFRoZSBvZmZzZXQgb2YgMSBpcyB0byBhY2NvbW9kYXRlIHRoZSBhZGRpdGlvbmFsIEFDSyBXUi4gKi8KKwlzZW5kX3NpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHJkc19pd2Rldi0+bWF4X3dycywgcmRzX2l3X3N5c2N0bF9tYXhfc2VuZF93ciArIDEpOworCXJlY3Zfc2l6ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgcmRzX2l3ZGV2LT5tYXhfd3JzLCByZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyICsgMSk7CisJcmRzX2l3X3JpbmdfcmVzaXplKHNlbmRfcmluZywgc2VuZF9zaXplIC0gMSk7CisJcmRzX2l3X3JpbmdfcmVzaXplKHJlY3ZfcmluZywgcmVjdl9zaXplIC0gMSk7CisKKwltZW1zZXQoYXR0ciwgMCwgc2l6ZW9mKCphdHRyKSk7CisJYXR0ci0+ZXZlbnRfaGFuZGxlciA9IHJkc19pd19xcF9ldmVudF9oYW5kbGVyOworCWF0dHItPnFwX2NvbnRleHQgPSBjb250ZXh0OworCWF0dHItPmNhcC5tYXhfc2VuZF93ciA9IHNlbmRfc2l6ZTsKKwlhdHRyLT5jYXAubWF4X3JlY3Zfd3IgPSByZWN2X3NpemU7CisJYXR0ci0+Y2FwLm1heF9zZW5kX3NnZSA9IHJkc19pd2Rldi0+bWF4X3NnZTsKKwlhdHRyLT5jYXAubWF4X3JlY3Zfc2dlID0gUkRTX0lXX1JFQ1ZfU0dFOworCWF0dHItPnNxX3NpZ190eXBlID0gSUJfU0lHTkFMX1JFUV9XUjsKKwlhdHRyLT5xcF90eXBlID0gSUJfUVBUX1JDOworCisJYXR0ci0+c2VuZF9jcSA9IGliX2NyZWF0ZV9jcShkZXYsIHNlbmRfY3FfaGFuZGxlciwKKwkJCQkgICAgIHJkc19pd19jcV9ldmVudF9oYW5kbGVyLAorCQkJCSAgICAgY29udGV4dCwgc2VuZF9zaXplLCAwKTsKKwlpZiAoSVNfRVJSKGF0dHItPnNlbmRfY3EpKSB7CisJCXJldCA9IFBUUl9FUlIoYXR0ci0+c2VuZF9jcSk7CisJCWF0dHItPnNlbmRfY3EgPSBOVUxMOworCQlyZHNkZWJ1ZygiaWJfY3JlYXRlX2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJYXR0ci0+cmVjdl9jcSA9IGliX2NyZWF0ZV9jcShkZXYsIHJlY3ZfY3FfaGFuZGxlciwKKwkJCQkgICAgIHJkc19pd19jcV9ldmVudF9oYW5kbGVyLAorCQkJCSAgICAgY29udGV4dCwgcmVjdl9zaXplLCAwKTsKKwlpZiAoSVNfRVJSKGF0dHItPnJlY3ZfY3EpKSB7CisJCXJldCA9IFBUUl9FUlIoYXR0ci0+cmVjdl9jcSk7CisJCWF0dHItPnJlY3ZfY3EgPSBOVUxMOworCQlyZHNkZWJ1ZygiaWJfY3JlYXRlX2NxIHNlbmQgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gaWJfcmVxX25vdGlmeV9jcShhdHRyLT5zZW5kX2NxLCBJQl9DUV9ORVhUX0NPTVApOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImliX3JlcV9ub3RpZnlfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBpYl9yZXFfbm90aWZ5X2NxKGF0dHItPnJlY3ZfY3EsIElCX0NRX1NPTElDSVRFRCk7CisJaWYgKHJldCkgeworCQlyZHNkZWJ1ZygiaWJfcmVxX25vdGlmeV9jcSByZWN2IGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWlmIChyZXQpIHsKKwkJaWYgKGF0dHItPnNlbmRfY3EpCisJCQlpYl9kZXN0cm95X2NxKGF0dHItPnNlbmRfY3EpOworCQlpZiAoYXR0ci0+cmVjdl9jcSkKKwkJCWliX2Rlc3Ryb3lfY3EoYXR0ci0+cmVjdl9jcSk7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIG5lZWRzIHRvIGJlIHZlcnkgY2FyZWZ1bCB0byBub3QgbGVhdmUgSVNfRVJSIHBvaW50ZXJzIGFyb3VuZCBmb3IKKyAqIGNsZWFudXAgdG8gdHJpcCBvdmVyLgorICovCitzdGF0aWMgaW50IHJkc19pd19zZXR1cF9xcChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IGliX2RldmljZSAqZGV2ID0gaWMtPmlfY21faWQtPmRldmljZTsKKwlzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyIGF0dHI7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlpbnQgcmV0OworCisJLyogcmRzX2l3X2FkZF9vbmUgY3JlYXRlcyBhIHJkc19pd19kZXZpY2Ugb2JqZWN0IHBlciBJQiBkZXZpY2UsCisJICogYW5kIGFsbG9jYXRlcyBhIHByb3RlY3Rpb24gZG9tYWluLCBtZW1vcnkgcmFuZ2UgYW5kIE1SIHBvb2wKKwkgKiBmb3IgZWFjaC4gIElmIHRoYXQgZmFpbHMgZm9yIGFueSByZWFzb24sIGl0IHdpbGwgbm90IHJlZ2lzdGVyCisJICogdGhlIHJkc19pd2RldiBhdCBhbGwuCisJICovCisJcmRzX2l3ZGV2ID0gaWJfZ2V0X2NsaWVudF9kYXRhKGRldiwgJnJkc19pd19jbGllbnQpOworCWlmIChyZHNfaXdkZXYgPT0gTlVMTCkgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fTk9USUNFICJSRFMvSVc6IE5vIGNsaWVudF9kYXRhIGZvciBkZXZpY2UgJXNcbiIsCisJCQkJCWRldi0+bmFtZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwkvKiBQcm90ZWN0aW9uIGRvbWFpbiBhbmQgbWVtb3J5IHJhbmdlICovCisJaWMtPmlfcGQgPSByZHNfaXdkZXYtPnBkOworCWljLT5pX21yID0gcmRzX2l3ZGV2LT5tcjsKKworCXJldCA9IHJkc19pd19pbml0X3FwX2F0dHJzKCZhdHRyLCByZHNfaXdkZXYsCisJCQkmaWMtPmlfc2VuZF9yaW5nLCByZHNfaXdfc2VuZF9jcV9jb21wX2hhbmRsZXIsCisJCQkmaWMtPmlfcmVjdl9yaW5nLCByZHNfaXdfcmVjdl9jcV9jb21wX2hhbmRsZXIsCisJCQljb25uKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpYy0+aV9zZW5kX2NxID0gYXR0ci5zZW5kX2NxOworCWljLT5pX3JlY3ZfY3EgPSBhdHRyLnJlY3ZfY3E7CisKKwkvKgorCSAqIFhYWCB0aGlzIGNhbiBmYWlsIGlmIG1heF8qX3dyIGlzIHRvbyBsYXJnZT8gIEFyZSB3ZSBzdXBwb3NlZAorCSAqIHRvIGJhY2sgb2ZmIHVudGlsIHdlIGdldCBhIHZhbHVlIHRoYXQgdGhlIGhhcmR3YXJlIGNhbiBzdXBwb3J0PworCSAqLworCXJldCA9IHJkbWFfY3JlYXRlX3FwKGljLT5pX2NtX2lkLCBpYy0+aV9wZCwgJmF0dHIpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoInJkbWFfY3JlYXRlX3FwIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3NlbmRfaGRycyA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3NlbmRfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICZpYy0+aV9zZW5kX2hkcnNfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfc2VuZF9oZHJzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCBzZW5kIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX3JlY3ZfaGRycyA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsCisJCQkJCSAgIGljLT5pX3JlY3ZfcmluZy53X25yICoKKwkJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICZpYy0+aV9yZWN2X2hkcnNfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfcmVjdl9oZHJzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCByZWN2IGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWljLT5pX2FjayA9IGliX2RtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJICAgICAgICZpYy0+aV9hY2tfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoaWMtPmlfYWNrID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoImliX2RtYV9hbGxvY19jb2hlcmVudCBhY2sgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMtPmlfc2VuZHMgPSB2bWFsbG9jKGljLT5pX3NlbmRfcmluZy53X25yICogc2l6ZW9mKHN0cnVjdCByZHNfaXdfc2VuZF93b3JrKSk7CisJaWYgKGljLT5pX3NlbmRzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJcmRzZGVidWcoInNlbmQgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisJcmRzX2l3X3NlbmRfaW5pdF9yaW5nKGljKTsKKworCWljLT5pX3JlY3ZzID0gdm1hbGxvYyhpYy0+aV9yZWN2X3Jpbmcud19uciAqIHNpemVvZihzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yaykpOworCWlmIChpYy0+aV9yZWN2cyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCXJkc2RlYnVnKCJyZWN2IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzX2l3X3JlY3ZfaW5pdF9yaW5nKGljKTsKKwlyZHNfaXdfcmVjdl9pbml0X2FjayhpYyk7CisKKwkvKiBQb3N0IHJlY2VpdmUgYnVmZmVycyAtIGFzIGEgc2lkZSBlZmZlY3QsIHRoaXMgd2lsbCB1cGRhdGUKKwkgKiB0aGUgcG9zdGVkIGNyZWRpdCBjb3VudC4gKi8KKwlyZHNfaXdfcmVjdl9yZWZpbGwoY29ubiwgR0ZQX0tFUk5FTCwgR0ZQX0hJR0hVU0VSLCAxKTsKKworCXJkc2RlYnVnKCJjb25uICVwIHBkICVwIG1yICVwIGNxICVwICVwXG4iLCBjb25uLCBpYy0+aV9wZCwgaWMtPmlfbXIsCisJCSBpYy0+aV9zZW5kX2NxLCBpYy0+aV9yZWN2X2NxKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgcmRzX2l3X3Byb3RvY29sX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgKmRwKQoreworCXUxNiBjb21tb247CisJdTMyIHZlcnNpb24gPSAwOworCisJLyogcmRtYV9jbSBwcml2YXRlIGRhdGEgaXMgb2RkIC0gd2hlbiB0aGVyZSBpcyBhbnkgcHJpdmF0ZSBkYXRhIGluIHRoZQorCSAqIHJlcXVlc3QsIHdlIHdpbGwgYmUgZ2l2ZW4gYSBwcmV0dHkgbGFyZ2UgYnVmZmVyIHdpdGhvdXQgdGVsbGluZyB1cyB0aGUKKwkgKiBvcmlnaW5hbCBzaXplLiBUaGUgb25seSB3YXkgdG8gdGVsbCB0aGUgZGlmZmVyZW5jZSBpcyBieSBsb29raW5nIGF0CisJICogdGhlIGNvbnRlbnRzLCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4KKwkgKiBJZiB0aGUgcHJvdG9jb2wgdmVyc2lvbiBmaWVsZHMgYXJlbid0IHNldCwgdGhpcyBpcyBhIGNvbm5lY3Rpb24gYXR0ZW1wdAorCSAqIGZyb20gYW4gb2xkZXIgdmVyc2lvbi4gVGhpcyBjb3VsZCBjb3VsZCBiZSAzLjAgb3IgMi4wIC0gd2UgY2FuJ3QgdGVsbC4KKwkgKiBXZSByZWFsbHkgc2hvdWxkIGhhdmUgY2hhbmdlZCB0aGlzIGZvciBPRkVEIDEuMyA6LSggKi8KKwlpZiAoZHAtPmRwX3Byb3RvY29sX21ham9yID09IDApCisJCXJldHVybiBSRFNfUFJPVE9DT0xfM18wOworCisJY29tbW9uID0gYmUxNl90b19jcHUoZHAtPmRwX3Byb3RvY29sX21pbm9yX21hc2spICYgUkRTX0lXX1NVUFBPUlRFRF9QUk9UT0NPTFM7CisJaWYgKGRwLT5kcF9wcm90b2NvbF9tYWpvciA9PSAzICYmIGNvbW1vbikgeworCQl2ZXJzaW9uID0gUkRTX1BST1RPQ09MXzNfMDsKKwkJd2hpbGUgKChjb21tb24gPj49IDEpICE9IDApCisJCQl2ZXJzaW9uKys7CisJfSBlbHNlIGlmIChwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJSRFM6IENvbm5lY3Rpb24gZnJvbSAlcEk0IHVzaW5nICIKKwkJCSJpbmNvbXBhdGlibGUgcHJvdG9jb2wgdmVyc2lvbiAldS4ldVxuIiwKKwkJCSZkcC0+ZHBfc2FkZHIsCisJCQlkcC0+ZHBfcHJvdG9jb2xfbWFqb3IsCisJCQlkcC0+ZHBfcHJvdG9jb2xfbWlub3IpOworCX0KKwlyZXR1cm4gdmVyc2lvbjsKK30KKworaW50IHJkc19pd19jbV9oYW5kbGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkJICAgIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCkKK3sKKwljb25zdCBzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3RfcHJpdmF0ZSAqZHAgPSBldmVudC0+cGFyYW0uY29ubi5wcml2YXRlX2RhdGE7CisJc3RydWN0IHJkc19pd19jb25uZWN0X3ByaXZhdGUgZHBfcmVwOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IE5VTEw7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IE5VTEw7CisJc3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtOworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJdTMyIHZlcnNpb247CisJaW50IGVyciwgZGVzdHJveSA9IDE7CisKKwkvKiBDaGVjayB3aGV0aGVyIHRoZSByZW1vdGUgcHJvdG9jb2wgdmVyc2lvbiBtYXRjaGVzIG91cnMuICovCisJdmVyc2lvbiA9IHJkc19pd19wcm90b2NvbF9jb21wYXRpYmxlKGRwKTsKKwlpZiAoIXZlcnNpb24pCisJCWdvdG8gb3V0OworCisJcmRzZGVidWcoInNhZGRyICVwSTQgZGFkZHIgJXBJNCBSRFN2JXUuJXVcbiIsCisJCSAmZHAtPmRwX3NhZGRyLCAmZHAtPmRwX2RhZGRyLAorCQkgUkRTX1BST1RPQ09MX01BSk9SKHZlcnNpb24pLCBSRFNfUFJPVE9DT0xfTUlOT1IodmVyc2lvbikpOworCisJY29ubiA9IHJkc19jb25uX2NyZWF0ZShkcC0+ZHBfZGFkZHIsIGRwLT5kcF9zYWRkciwgJnJkc19pd190cmFuc3BvcnQsCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihjb25uKSkgeworCQlyZHNkZWJ1ZygicmRzX2Nvbm5fY3JlYXRlIGZhaWxlZCAoJWxkKVxuIiwgUFRSX0VSUihjb25uKSk7CisJCWNvbm4gPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIFRoZSBjb25uZWN0aW9uIHJlcXVlc3QgbWF5IG9jY3VyIHdoaWxlIHRoZQorCSAqIHByZXZpb3VzIGNvbm5lY3Rpb24gZXhpc3QsIGUuZy4gaW4gY2FzZSBvZiBmYWlsb3Zlci4KKwkgKiBCdXQgYXMgY29ubmVjdGlvbnMgbWF5IGJlIGluaXRpYXRlZCBzaW11bHRhbmVvdXNseQorCSAqIGJ5IGJvdGggaG9zdHMsIHdlIGhhdmUgYSByYW5kb20gYmFja29mZiBtZWNoYW5pc20gLQorCSAqIHNlZSB0aGUgY29tbWVudCBhYm92ZSByZHNfcXVldWVfcmVjb25uZWN0KCkKKwkgKi8KKwltdXRleF9sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCWlmICghcmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9ET1dOLCBSRFNfQ09OTl9DT05ORUNUSU5HKSkgeworCQlpZiAocmRzX2Nvbm5fc3RhdGUoY29ubikgPT0gUkRTX0NPTk5fVVApIHsKKwkJCXJkc2RlYnVnKCJpbmNvbWluZyBjb25uZWN0IHdoaWxlIGNvbm5lY3RpbmdcbiIpOworCQkJcmRzX2Nvbm5fZHJvcChjb25uKTsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd19saXN0ZW5fY2xvc2VkX3N0YWxlKTsKKwkJfSBlbHNlCisJCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9DT05ORUNUSU5HKSB7CisJCQkvKiBXYWl0IGFuZCBzZWUgLSBvdXIgY29ubmVjdCBtYXkgc3RpbGwgYmUgc3VjY2VlZGluZyAqLworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Nvbm5lY3RfcmFjZWQpOworCQl9CisJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJcmRzX2l3X3NldF9wcm90b2NvbChjb25uLCB2ZXJzaW9uKTsKKwlyZHNfaXdfc2V0X2Zsb3dfY29udHJvbChjb25uLCBiZTMyX3RvX2NwdShkcC0+ZHBfY3JlZGl0KSk7CisKKwkvKiBJZiB0aGUgcGVlciBnYXZlIHVzIHRoZSBsYXN0IHBhY2tldCBpdCBzYXcsIHByb2Nlc3MgdGhpcyBhcyBpZgorCSAqIHdlIGhhZCByZWNlaXZlZCBhIHJlZ3VsYXIgQUNLLiAqLworCWlmIChkcC0+ZHBfYWNrX3NlcSkKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBiZTY0X3RvX2NwdShkcC0+ZHBfYWNrX3NlcSksIE5VTEwpOworCisJQlVHX09OKGNtX2lkLT5jb250ZXh0KTsKKwlCVUdfT04oaWMtPmlfY21faWQpOworCisJaWMtPmlfY21faWQgPSBjbV9pZDsKKwljbV9pZC0+Y29udGV4dCA9IGNvbm47CisKKwlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoY21faWQtPmRldmljZSwgJnJkc19pd19jbGllbnQpOworCWljLT5pX2RtYV9sb2NhbF9sa2V5ID0gcmRzX2l3ZGV2LT5kbWFfbG9jYWxfbGtleTsKKworCS8qIFdlIGdvdCBoYWxmd2F5IHRocm91Z2ggc2V0dGluZyB1cCB0aGUgaWJfY29ubmVjdGlvbiwgaWYgd2UKKwkgKiBmYWlsIG5vdywgd2UgaGF2ZSB0byB0YWtlIHRoZSBsb25nIHJvdXRlIG91dCBvZiB0aGlzIG1lc3MuICovCisJZGVzdHJveSA9IDA7CisKKwllcnIgPSByZHNfaXdfc2V0dXBfcXAoY29ubik7CisJaWYgKGVycikgeworCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmRzX2l3X3NldHVwX3FwIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZHNfaXdfY21fZmlsbF9jb25uX3BhcmFtKGNvbm4sICZjb25uX3BhcmFtLCAmZHBfcmVwLCB2ZXJzaW9uKTsKKworCS8qIHJkbWFfYWNjZXB0KCkgY2FsbHMgcmRtYV9yZWplY3QoKSBpbnRlcm5hbGx5IGlmIGl0IGZhaWxzICovCisJZXJyID0gcmRtYV9hY2NlcHQoY21faWQsICZjb25uX3BhcmFtKTsKKwltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisJaWYgKGVycikgeworCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmRtYV9hY2NlcHQgZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCXJldHVybiAwOworCitvdXQ6CisJcmRtYV9yZWplY3QoY21faWQsIE5VTEwsIDApOworCXJldHVybiBkZXN0cm95OworfQorCisKK2ludCByZHNfaXdfY21faW5pdGlhdGVfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY21faWQtPmNvbnRleHQ7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJc3RydWN0IHJkbWFfY29ubl9wYXJhbSBjb25uX3BhcmFtOworCXN0cnVjdCByZHNfaXdfY29ubmVjdF9wcml2YXRlIGRwOworCWludCByZXQ7CisKKwkvKiBJZiB0aGUgcGVlciBkb2Vzbid0IGRvIHByb3RvY29sIG5lZ290aWF0aW9uLCB3ZSBtdXN0CisJICogZGVmYXVsdCB0byBSRFN2My4wICovCisJcmRzX2l3X3NldF9wcm90b2NvbChjb25uLCBSRFNfUFJPVE9DT0xfM18wKTsKKwlpYy0+aV9mbG93Y3RsID0gcmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2w7CS8qIGFkdmVydGlzZSBmbG93IGNvbnRyb2wgKi8KKworCXJldCA9IHJkc19pd19zZXR1cF9xcChjb25uKTsKKwlpZiAocmV0KSB7CisJCXJkc19pd19jb25uX2Vycm9yKGNvbm4sICJyZHNfaXdfc2V0dXBfcXAgZmFpbGVkICglZClcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pd19jbV9maWxsX2Nvbm5fcGFyYW0oY29ubiwgJmNvbm5fcGFyYW0sICZkcCwgUkRTX1BST1RPQ09MX1ZFUlNJT04pOworCisJcmV0ID0gcmRtYV9jb25uZWN0KGNtX2lkLCAmY29ubl9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgInJkbWFfY29ubmVjdCBmYWlsZWQgKCVkKVxuIiwgcmV0KTsKKworb3V0OgorCS8qIEJld2FyZSAtIHJldHVybmluZyBub24temVybyB0ZWxscyB0aGUgcmRtYV9jbSB0byBkZXN0cm95CisJICogdGhlIGNtX2lkLiBXZSBzaG91bGQgY2VydGFpbmx5IG5vdCBkbyBpdCBhcyBsb25nIGFzIHdlIHN0aWxsCisJICogIm93biIgdGhlIGNtX2lkLiAqLworCWlmIChyZXQpIHsKKwkJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwkJaWYgKGljLT5pX2NtX2lkID09IGNtX2lkKQorCQkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworaW50IHJkc19pd19jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXY7CisJc3RydWN0IHNvY2thZGRyX2luIHNyYywgZGVzdDsKKwlpbnQgcmV0OworCisJLyogWFhYIEkgd29uZGVyIHdoYXQgYWZmZWN0IHRoZSBwb3J0IHNwYWNlIGhhcyAqLworCS8qIGRlbGVnYXRlIGNtIGV2ZW50IGhhbmRsZXIgdG8gcmRtYV90cmFuc3BvcnQgKi8KKwlpYy0+aV9jbV9pZCA9IHJkbWFfY3JlYXRlX2lkKHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIsIGNvbm4sCisJCQkJICAgICBSRE1BX1BTX1RDUCk7CisJaWYgKElTX0VSUihpYy0+aV9jbV9pZCkpIHsKKwkJcmV0ID0gUFRSX0VSUihpYy0+aV9jbV9pZCk7CisJCWljLT5pX2NtX2lkID0gTlVMTDsKKwkJcmRzZGVidWcoInJkbWFfY3JlYXRlX2lkKCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzZGVidWcoImNyZWF0ZWQgY20gaWQgJXAgZm9yIGNvbm4gJXBcbiIsIGljLT5pX2NtX2lkLCBjb25uKTsKKworCXNyYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlzcmMuc2luX2FkZHIuc19hZGRyID0gKF9fZm9yY2UgdTMyKWNvbm4tPmNfbGFkZHI7CisJc3JjLnNpbl9wb3J0ID0gKF9fZm9yY2UgdTE2KWh0b25zKDApOworCisJLyogRmlyc3QsIGJpbmQgdG8gdGhlIGxvY2FsIGFkZHJlc3MgYW5kIGRldmljZS4gKi8KKwlyZXQgPSByZG1hX2JpbmRfYWRkcihpYy0+aV9jbV9pZCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmc3JjKTsKKwlpZiAocmV0KSB7CisJCXJkc2RlYnVnKCJyZG1hX2JpbmRfYWRkciglcEk0KSBmYWlsZWQ6ICVkXG4iLAorCQkJCSZjb25uLT5jX2xhZGRyLCByZXQpOworCQlyZG1hX2Rlc3Ryb3lfaWQoaWMtPmlfY21faWQpOworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCXJkc19pd2RldiA9IGliX2dldF9jbGllbnRfZGF0YShpYy0+aV9jbV9pZC0+ZGV2aWNlLCAmcmRzX2l3X2NsaWVudCk7CisJaWMtPmlfZG1hX2xvY2FsX2xrZXkgPSByZHNfaXdkZXYtPmRtYV9sb2NhbF9sa2V5OworCisJZGVzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKwlkZXN0LnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMiljb25uLT5jX2ZhZGRyOworCWRlc3Quc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoUkRTX1BPUlQpOworCisJcmV0ID0gcmRtYV9yZXNvbHZlX2FkZHIoaWMtPmlfY21faWQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAorCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikmZGVzdCwKKwkJCQlSRFNfUkRNQV9SRVNPTFZFX1RJTUVPVVRfTVMpOworCWlmIChyZXQpIHsKKwkJcmRzZGVidWcoImFkZHIgcmVzb2x2ZSBmYWlsZWQgZm9yIGNtIGlkICVwOiAlZFxuIiwgaWMtPmlfY21faWQsCisJCQkgcmV0KTsKKwkJcmRtYV9kZXN0cm95X2lkKGljLT5pX2NtX2lkKTsKKwkJaWMtPmlfY21faWQgPSBOVUxMOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIGlzIHNvIGNhcmVmdWwgYWJvdXQgb25seSBjbGVhbmluZyB1cCByZXNvdXJjZXMgdGhhdCB3ZXJlIGJ1aWx0IHVwCisgKiBzbyB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgYXQgYW55IHBvaW50IGR1cmluZyBzdGFydHVwLiAgSW4gZmFjdCBpdAorICogY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBnaXZlbiBjb25uZWN0aW9uLgorICovCit2b2lkIHJkc19pd19jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOworCisJcmRzZGVidWcoImNtICVwIHBkICVwIGNxICVwICVwIHFwICVwXG4iLCBpYy0+aV9jbV9pZCwKKwkJIGljLT5pX3BkLCBpYy0+aV9zZW5kX2NxLCBpYy0+aV9yZWN2X2NxLAorCQkgaWMtPmlfY21faWQgPyBpYy0+aV9jbV9pZC0+cXAgOiBOVUxMKTsKKworCWlmIChpYy0+aV9jbV9pZCkgeworCQlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSBpYy0+aV9jbV9pZC0+ZGV2aWNlOworCisJCXJkc2RlYnVnKCJkaXNjb25uZWN0aW5nIGNtICVwXG4iLCBpYy0+aV9jbV9pZCk7CisJCWVyciA9IHJkbWFfZGlzY29ubmVjdChpYy0+aV9jbV9pZCk7CisJCWlmIChlcnIpIHsKKwkJCS8qIEFjdHVhbGx5IHRoaXMgbWF5IGhhcHBlbiBxdWl0ZSBmcmVxdWVudGx5LCB3aGVuCisJCQkgKiBhbiBvdXRnb2luZyBjb25uZWN0IHJhY2VkIHdpdGggYW4gaW5jb21pbmcgY29ubmVjdC4KKwkJCSAqLworCQkJcmRzZGVidWcoInJkc19pd19jb25uX3NodXRkb3duOiBmYWlsZWQgdG8gZGlzY29ubmVjdCwiCisJCQkJICAgIiBjbTogJXAgZXJyICVkXG4iLCBpYy0+aV9jbV9pZCwgZXJyKTsKKwkJfQorCisJCWlmIChpYy0+aV9jbV9pZC0+cXApIHsKKwkJCXFwX2F0dHIucXBfc3RhdGUgPSBJQl9RUFNfRVJSOworCQkJaWJfbW9kaWZ5X3FwKGljLT5pX2NtX2lkLT5xcCwgJnFwX2F0dHIsIElCX1FQX1NUQVRFKTsKKwkJfQorCisJCXdhaXRfZXZlbnQocmRzX2l3X3JpbmdfZW1wdHlfd2FpdCwKKwkJCXJkc19pd19yaW5nX2VtcHR5KCZpYy0+aV9zZW5kX3JpbmcpICYmCisJCQlyZHNfaXdfcmluZ19lbXB0eSgmaWMtPmlfcmVjdl9yaW5nKSk7CisKKwkJaWYgKGljLT5pX3NlbmRfaGRycykKKwkJCWliX2RtYV9mcmVlX2NvaGVyZW50KGRldiwKKwkJCQkJICAgaWMtPmlfc2VuZF9yaW5nLndfbnIgKgorCQkJCQkJc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSwKKwkJCQkJICAgaWMtPmlfc2VuZF9oZHJzLAorCQkJCQkgICBpYy0+aV9zZW5kX2hkcnNfZG1hKTsKKworCQlpZiAoaWMtPmlfcmVjdl9oZHJzKQorCQkJaWJfZG1hX2ZyZWVfY29oZXJlbnQoZGV2LAorCQkJCQkgICBpYy0+aV9yZWN2X3Jpbmcud19uciAqCisJCQkJCQlzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpLAorCQkJCQkgICBpYy0+aV9yZWN2X2hkcnMsCisJCQkJCSAgIGljLT5pX3JlY3ZfaGRyc19kbWEpOworCisJCWlmIChpYy0+aV9hY2spCisJCQlpYl9kbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlciksCisJCQkJCSAgICAgaWMtPmlfYWNrLCBpYy0+aV9hY2tfZG1hKTsKKworCQlpZiAoaWMtPmlfc2VuZHMpCisJCQlyZHNfaXdfc2VuZF9jbGVhcl9yaW5nKGljKTsKKwkJaWYgKGljLT5pX3JlY3ZzKQorCQkJcmRzX2l3X3JlY3ZfY2xlYXJfcmluZyhpYyk7CisKKwkJaWYgKGljLT5pX2NtX2lkLT5xcCkKKwkJCXJkbWFfZGVzdHJveV9xcChpYy0+aV9jbV9pZCk7CisJCWlmIChpYy0+aV9zZW5kX2NxKQorCQkJaWJfZGVzdHJveV9jcShpYy0+aV9zZW5kX2NxKTsKKwkJaWYgKGljLT5pX3JlY3ZfY3EpCisJCQlpYl9kZXN0cm95X2NxKGljLT5pX3JlY3ZfY3EpOworCisJCS8qCisJCSAqIElmIGFzc29jaWF0ZWQgd2l0aCBhbiByZHNfaXdfZGV2aWNlOgorCQkgKiAJTW92ZSBjb25uZWN0aW9uIGJhY2sgdG8gdGhlIG5vZGV2IGxpc3QuCisJCSAqIAlSZW1vdmUgY21faWQgZnJvbSB0aGUgZGV2aWNlIGNtX2lkIGxpc3QuCisJCSAqLworCQlpZiAoaWMtPnJkc19pd2RldikgeworCisJCQlzcGluX2xvY2tfaXJxKCZpYy0+cmRzX2l3ZGV2LT5zcGlubG9jayk7CisJCQlCVUdfT04obGlzdF9lbXB0eSgmaWMtPml3X25vZGUpKTsKKwkJCWxpc3RfZGVsKCZpYy0+aXdfbm9kZSk7CisJCQlzcGluX3VubG9ja19pcnEoJmljLT5yZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCQkJc3Bpbl9sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisJCQlsaXN0X2FkZF90YWlsKCZpYy0+aXdfbm9kZSwgJml3X25vZGV2X2Nvbm5zKTsKKwkJCXNwaW5fdW5sb2NrX2lycSgmaXdfbm9kZXZfY29ubnNfbG9jayk7CisJCQlyZHNfaXdfcmVtb3ZlX2NtX2lkKGljLT5yZHNfaXdkZXYsIGljLT5pX2NtX2lkKTsKKwkJCWljLT5yZHNfaXdkZXYgPSBOVUxMOworCQl9CisKKwkJcmRtYV9kZXN0cm95X2lkKGljLT5pX2NtX2lkKTsKKworCQlpYy0+aV9jbV9pZCA9IE5VTEw7CisJCWljLT5pX3BkID0gTlVMTDsKKwkJaWMtPmlfbXIgPSBOVUxMOworCQlpYy0+aV9zZW5kX2NxID0gTlVMTDsKKwkJaWMtPmlfcmVjdl9jcSA9IE5VTEw7CisJCWljLT5pX3NlbmRfaGRycyA9IE5VTEw7CisJCWljLT5pX3JlY3ZfaGRycyA9IE5VTEw7CisJCWljLT5pX2FjayA9IE5VTEw7CisJfQorCUJVR19PTihpYy0+cmRzX2l3ZGV2KTsKKworCS8qIENsZWFyIHBlbmRpbmcgdHJhbnNtaXQgKi8KKwlpZiAoaWMtPmlfcm0pIHsKKwkJcmRzX21lc3NhZ2VfcHV0KGljLT5pX3JtKTsKKwkJaWMtPmlfcm0gPSBOVUxMOworCX0KKworCS8qIENsZWFyIHRoZSBBQ0sgc3RhdGUgKi8KKwljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJcmRzX2l3X3NldF82NGJpdCgmaWMtPmlfYWNrX25leHQsIDApOworCWljLT5pX2Fja19yZWN2ID0gMDsKKworCS8qIENsZWFyIGZsb3cgY29udHJvbCBzdGF0ZSAqLworCWljLT5pX2Zsb3djdGwgPSAwOworCWF0b21pY19zZXQoJmljLT5pX2NyZWRpdHMsIDApOworCisJcmRzX2l3X3JpbmdfaW5pdCgmaWMtPmlfc2VuZF9yaW5nLCByZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyKTsKKwlyZHNfaXdfcmluZ19pbml0KCZpYy0+aV9yZWN2X3JpbmcsIHJkc19pd19zeXNjdGxfbWF4X3JlY3Zfd3IpOworCisJaWYgKGljLT5pX2l3aW5jKSB7CisJCXJkc19pbmNfcHV0KCZpYy0+aV9pd2luYy0+aWlfaW5jKTsKKwkJaWMtPmlfaXdpbmMgPSBOVUxMOworCX0KKworCXZmcmVlKGljLT5pX3NlbmRzKTsKKwlpYy0+aV9zZW5kcyA9IE5VTEw7CisJdmZyZWUoaWMtPmlfcmVjdnMpOworCWljLT5pX3JlY3ZzID0gTlVMTDsKKwlyZHNkZWJ1Zygic2h1dGRvd24gY29tcGxldGVcbiIpOworfQorCitpbnQgcmRzX2l3X2Nvbm5fYWxsb2Moc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogWFhYIHRvbyBsYXp5PyAqLworCWljID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJkc19pd19jb25uZWN0aW9uKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGljID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJmljLT5pd19ub2RlKTsKKwltdXRleF9pbml0KCZpYy0+aV9yZWN2X211dGV4KTsKKworCS8qCisJICogcmRzX2l3X2Nvbm5fc2h1dGRvd24oKSB3YWl0cyBmb3IgdGhlc2UgdG8gYmUgZW1wdGllZCBzbyB0aGV5CisJICogbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgaXQgY2FuIGJlIGNhbGxlZC4KKwkgKi8KKwlyZHNfaXdfcmluZ19pbml0KCZpYy0+aV9zZW5kX3JpbmcsIHJkc19pd19zeXNjdGxfbWF4X3NlbmRfd3IpOworCXJkc19pd19yaW5nX2luaXQoJmljLT5pX3JlY3ZfcmluZywgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl93cik7CisKKwlpYy0+Y29ubiA9IGNvbm47CisJY29ubi0+Y190cmFuc3BvcnRfZGF0YSA9IGljOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJml3X25vZGV2X2Nvbm5zX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZpYy0+aXdfbm9kZSwgJml3X25vZGV2X2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpd19ub2Rldl9jb25uc19sb2NrLCBmbGFncyk7CisKKworCXJkc2RlYnVnKCJjb25uICVwIGNvbm4gaWMgJXBcbiIsIGNvbm4sIGNvbm4tPmNfdHJhbnNwb3J0X2RhdGEpOworCXJldHVybiAwOworfQorCit2b2lkIHJkc19pd19jb25uX2ZyZWUodm9pZCAqYXJnKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBhcmc7CisJcmRzZGVidWcoImljICVwXG4iLCBpYyk7CisJbGlzdF9kZWwoJmljLT5pd19ub2RlKTsKKwlrZnJlZShpYyk7Cit9CisKKy8qCisgKiBBbiBlcnJvciBvY2N1cnJlZCBvbiB0aGUgY29ubmVjdGlvbgorICovCit2b2lkCitfX3Jkc19pd19jb25uX2Vycm9yKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXJkc19jb25uX2Ryb3AoY29ubik7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2cHJpbnRrKGZtdCwgYXApOworCXZhX2VuZChhcCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3JkbWEuYyBiL25ldC9yZHMvaXdfcmRtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMDJhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3JkbWEuYwpAQCAtMCwwICsxLDg4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisjaW5jbHVkZSAiaXcuaCIKKworCisvKgorICogVGhpcyBpcyBzdG9yZWQgYXMgbXItPnJfdHJhbnNfcHJpdmF0ZS4KKyAqLworc3RydWN0IHJkc19pd19tciB7CisJc3RydWN0IHJkc19pd19kZXZpY2UJKmRldmljZTsKKwlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wJKnBvb2w7CisJc3RydWN0IHJkbWFfY21faWQJKmNtX2lkOworCisJc3RydWN0IGliX21yCSptcjsKKwlzdHJ1Y3QgaWJfZmFzdF9yZWdfcGFnZV9saXN0ICpwYWdlX2xpc3Q7CisKKwlzdHJ1Y3QgcmRzX2l3X21hcHBpbmcJbWFwcGluZzsKKwl1bnNpZ25lZCBjaGFyCQlyZW1hcF9jb3VudDsKK307CisKKy8qCisgKiBPdXIgb3duIGxpdHRsZSBNUiBwb29sCisgKi8KK3N0cnVjdCByZHNfaXdfbXJfcG9vbCB7CisJc3RydWN0IHJkc19pd19kZXZpY2UJKmRldmljZTsJCS8qIGJhY2sgcHRyIHRvIHRoZSBkZXZpY2UgdGhhdCBvd25zIHVzICovCisKKwlzdHJ1Y3QgbXV0ZXgJCWZsdXNoX2xvY2s7CQkvKiBzZXJpYWxpemUgZm1yIGludmFsaWRhdGUgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJZmx1c2hfd29ya2VyOwkJLyogZmx1c2ggd29ya2VyICovCisKKwlzcGlubG9ja190CQlsaXN0X2xvY2s7CQkvKiBwcm90ZWN0IHZhcmlhYmxlcyBiZWxvdyAqLworCWF0b21pY190CQlpdGVtX2NvdW50OwkJLyogdG90YWwgIyBvZiBNUnMgKi8KKwlhdG9taWNfdAkJZGlydHlfY291bnQ7CQkvKiAjIGRpcnR5IG9mIE1ScyAqLworCXN0cnVjdCBsaXN0X2hlYWQJZGlydHlfbGlzdDsJCS8qIGRpcnR5IG1hcHBpbmdzICovCisJc3RydWN0IGxpc3RfaGVhZAljbGVhbl9saXN0OwkJLyogdW51c2VkICYgdW5hbWFwcGVkIE1ScyAqLworCWF0b21pY190CQlmcmVlX3Bpbm5lZDsJCS8qIG1lbW9yeSBwaW5uZWQgYnkgZnJlZSBNUnMgKi8KKwl1bnNpZ25lZCBsb25nCQltYXhfbWVzc2FnZV9zaXplOwkvKiBpbiBwYWdlcyAqLworCXVuc2lnbmVkIGxvbmcJCW1heF9pdGVtczsKKwl1bnNpZ25lZCBsb25nCQltYXhfaXRlbXNfc29mdDsKKwl1bnNpZ25lZCBsb25nCQltYXhfZnJlZV9waW5uZWQ7CisJaW50CQkJbWF4X3BhZ2VzOworfTsKKworc3RhdGljIGludCByZHNfaXdfZmx1c2hfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIGludCBmcmVlX2FsbCk7CitzdGF0aWMgdm9pZCByZHNfaXdfbXJfcG9vbF9mbHVzaF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBpbnQgcmRzX2l3X2luaXRfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIHN0cnVjdCByZHNfaXdfbXIgKmlibXIpOworc3RhdGljIGludCByZHNfaXdfbWFwX2Zhc3RyZWcoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQkJICBzdHJ1Y3QgcmRzX2l3X21yICppYm1yLAorCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbmVudHMpOworc3RhdGljIHZvaWQgcmRzX2l3X2ZyZWVfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIHN0cnVjdCByZHNfaXdfbXIgKmlibXIpOworc3RhdGljIHVuc2lnbmVkIGludCByZHNfaXdfdW5tYXBfZmFzdHJlZ19saXN0KHN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKnVubWFwX2xpc3QsCisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpraWxsX2xpc3QpOworc3RhdGljIHZvaWQgcmRzX2l3X2Rlc3Ryb3lfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsIHN0cnVjdCByZHNfaXdfbXIgKmlibXIpOworCitzdGF0aWMgaW50IHJkc19pd19nZXRfZGV2aWNlKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfaXdfZGV2aWNlICoqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRtYV9jbV9pZCAqKmNtX2lkKQoreworCXN0cnVjdCByZHNfaXdfZGV2aWNlICppd2RldjsKKwlzdHJ1Y3QgcmRzX2l3X2NtX2lkICppX2NtX2lkOworCisJKnJkc19pd2RldiA9IE5VTEw7CisJKmNtX2lkID0gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXdkZXYsICZyZHNfaXdfZGV2aWNlcywgbGlzdCkgeworCQlzcGluX2xvY2tfaXJxKCZpd2Rldi0+c3BpbmxvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlfY21faWQsICZpd2Rldi0+Y21faWRfbGlzdCwgbGlzdCkgeworCQkJc3RydWN0IHNvY2thZGRyX2luICpzcmNfYWRkciwgKmRzdF9hZGRyOworCisJCQlzcmNfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaV9jbV9pZC0+Y21faWQtPnJvdXRlLmFkZHIuc3JjX2FkZHI7CisJCQlkc3RfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmaV9jbV9pZC0+Y21faWQtPnJvdXRlLmFkZHIuZHN0X2FkZHI7CisKKwkJCXJkc2RlYnVnKCJsb2NhbCBpcGFkZHIgPSAleCBwb3J0ICVkLCAiCisJCQkJICJyZW1vdGUgaXBhZGRyID0gJXggcG9ydCAlZCIKKwkJCQkgIi4ubG9va2luZyBmb3IgJXggcG9ydCAlZCwgIgorCQkJCSAicmVtb3RlIGlwYWRkciA9ICV4IHBvcnQgJWRcbiIsCisJCQkJc3JjX2FkZHItPnNpbl9hZGRyLnNfYWRkciwKKwkJCQlzcmNfYWRkci0+c2luX3BvcnQsCisJCQkJZHN0X2FkZHItPnNpbl9hZGRyLnNfYWRkciwKKwkJCQlkc3RfYWRkci0+c2luX3BvcnQsCisJCQkJcnMtPnJzX2JvdW5kX2FkZHIsCisJCQkJcnMtPnJzX2JvdW5kX3BvcnQsCisJCQkJcnMtPnJzX2Nvbm5fYWRkciwKKwkJCQlycy0+cnNfY29ubl9wb3J0KTsKKyNpZmRlZiBXT1JLSU5HX1RVUExFX0RFVEVDVElPTgorCQkJaWYgKHNyY19hZGRyLT5zaW5fYWRkci5zX2FkZHIgPT0gcnMtPnJzX2JvdW5kX2FkZHIgJiYKKwkJCSAgICBzcmNfYWRkci0+c2luX3BvcnQgPT0gcnMtPnJzX2JvdW5kX3BvcnQgJiYKKwkJCSAgICBkc3RfYWRkci0+c2luX2FkZHIuc19hZGRyID09IHJzLT5yc19jb25uX2FkZHIgJiYKKwkJCSAgICBkc3RfYWRkci0+c2luX3BvcnQgPT0gcnMtPnJzX2Nvbm5fcG9ydCkgeworI2Vsc2UKKwkJCS8qIEZJWE1FIC0gbmVlZHMgdG8gY29tcGFyZSB0aGUgbG9jYWwgYW5kIHJlbW90ZQorCQkJICogaXBhZGRyL3BvcnQgdHVwbGUsIGJ1dCB0aGUgaXBhZGRyIGlzIHRoZSBvbmx5CisJCQkgKiBhdmFpbGFibGUgaW5mb21hdGlvbiBpbiB0aGUgcmRzX3NvY2sgKGFzIHRoZSByZXN0IGFyZQorCQkJICogemVybydlZC4gIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHByb3Blcmx5IHBvcHVsYXRlZAorCQkJICogZHVyaW5nIGNvbm5lY3Rpb24gc2V0dXAuLi4KKwkJCSAqLworCQkJaWYgKHNyY19hZGRyLT5zaW5fYWRkci5zX2FkZHIgPT0gcnMtPnJzX2JvdW5kX2FkZHIpIHsKKyNlbmRpZgorCQkJCXNwaW5fdW5sb2NrX2lycSgmaXdkZXYtPnNwaW5sb2NrKTsKKwkJCQkqcmRzX2l3ZGV2ID0gaXdkZXY7CisJCQkJKmNtX2lkID0gaV9jbV9pZC0+Y21faWQ7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZpd2Rldi0+c3BpbmxvY2spOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHJkc19pd19hZGRfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKQoreworCXN0cnVjdCByZHNfaXdfY21faWQgKmlfY21faWQ7CisKKwlpX2NtX2lkID0ga21hbGxvYyhzaXplb2YgKmlfY21faWQsIEdGUF9LRVJORUwpOworCWlmICghaV9jbV9pZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpX2NtX2lkLT5jbV9pZCA9IGNtX2lkOworCisJc3Bpbl9sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisJbGlzdF9hZGRfdGFpbCgmaV9jbV9pZC0+bGlzdCwgJnJkc19pd2Rldi0+Y21faWRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJkc19pd19yZW1vdmVfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKQoreworCXN0cnVjdCByZHNfaXdfY21faWQgKmlfY21faWQ7CisKKwlzcGluX2xvY2tfaXJxKCZyZHNfaXdkZXYtPnNwaW5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlfY21faWQsICZyZHNfaXdkZXYtPmNtX2lkX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGlfY21faWQtPmNtX2lkID09IGNtX2lkKSB7CisJCQlsaXN0X2RlbCgmaV9jbV9pZC0+bGlzdCk7CisJCQlrZnJlZShpX2NtX2lkKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7Cit9CisKKworaW50IHJkc19pd191cGRhdGVfY21faWQoc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc3JjX2FkZHIsICpkc3RfYWRkcjsKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2X29sZDsKKwlzdHJ1Y3QgcmRzX3NvY2sgcnM7CisJc3RydWN0IHJkbWFfY21faWQgKnBjbV9pZDsKKwlpbnQgcmM7CisKKwlzcmNfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmY21faWQtPnJvdXRlLmFkZHIuc3JjX2FkZHI7CisJZHN0X2FkZHIgPSAoc3RydWN0IHNvY2thZGRyX2luICopJmNtX2lkLT5yb3V0ZS5hZGRyLmRzdF9hZGRyOworCisJcnMucnNfYm91bmRfYWRkciA9IHNyY19hZGRyLT5zaW5fYWRkci5zX2FkZHI7CisJcnMucnNfYm91bmRfcG9ydCA9IHNyY19hZGRyLT5zaW5fcG9ydDsKKwlycy5yc19jb25uX2FkZHIgPSBkc3RfYWRkci0+c2luX2FkZHIuc19hZGRyOworCXJzLnJzX2Nvbm5fcG9ydCA9IGRzdF9hZGRyLT5zaW5fcG9ydDsKKworCXJjID0gcmRzX2l3X2dldF9kZXZpY2UoJnJzLCAmcmRzX2l3ZGV2X29sZCwgJnBjbV9pZCk7CisJaWYgKHJjKQorCQlyZHNfaXdfcmVtb3ZlX2NtX2lkKHJkc19pd2RldiwgY21faWQpOworCisJcmV0dXJuIHJkc19pd19hZGRfY21faWQocmRzX2l3ZGV2LCBjbV9pZCk7Cit9CisKK2ludCByZHNfaXdfYWRkX2Nvbm4oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJLyogY29ubiB3YXMgcHJldmlvdXNseSBvbiB0aGUgbm9kZXZfY29ubnNfbGlzdCAqLworCXNwaW5fbG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCUJVR19PTihsaXN0X2VtcHR5KCZpd19ub2Rldl9jb25ucykpOworCUJVR19PTihsaXN0X2VtcHR5KCZpYy0+aXdfbm9kZSkpOworCWxpc3RfZGVsKCZpYy0+aXdfbm9kZSk7CisJc3Bpbl91bmxvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKworCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmljLT5pd19ub2RlLCAmcmRzX2l3ZGV2LT5jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisKKwlpYy0+cmRzX2l3ZGV2ID0gcmRzX2l3ZGV2OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX2l3X3JlbW92ZV9ub2Rldl9jb25ucyh2b2lkKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsICpfaWM7CisJTElTVF9IRUFEKHRtcF9saXN0KTsKKworCS8qIGF2b2lkIGNhbGxpbmcgY29ubl9kZXN0cm95IHdpdGggaXJxcyBvZmYgKi8KKwlzcGluX2xvY2tfaXJxKCZpd19ub2Rldl9jb25uc19sb2NrKTsKKwlsaXN0X3NwbGljZSgmaXdfbm9kZXZfY29ubnMsICZ0bXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJml3X25vZGV2X2Nvbm5zKTsKKwlzcGluX3VubG9ja19pcnEoJml3X25vZGV2X2Nvbm5zX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGljLCBfaWMsICZ0bXBfbGlzdCwgaXdfbm9kZSkgeworCQlpZiAoaWMtPmNvbm4tPmNfcGFzc2l2ZSkKKwkJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4tPmNfcGFzc2l2ZSk7CisJCXJkc19jb25uX2Rlc3Ryb3koaWMtPmNvbm4pOworCX0KK30KKwordm9pZCByZHNfaXdfcmVtb3ZlX2Nvbm5zKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgKl9pYzsKKwlMSVNUX0hFQUQodG1wX2xpc3QpOworCisJLyogYXZvaWQgY2FsbGluZyBjb25uX2Rlc3Ryb3kgd2l0aCBpcnFzIG9mZiAqLworCXNwaW5fbG9ja19pcnEoJnJkc19pd2Rldi0+c3BpbmxvY2spOworCWxpc3Rfc3BsaWNlKCZyZHNfaXdkZXYtPmNvbm5fbGlzdCwgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmRzX2l3ZGV2LT5jb25uX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcmRzX2l3ZGV2LT5zcGlubG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaWMsIF9pYywgJnRtcF9saXN0LCBpd19ub2RlKSB7CisJCWlmIChpYy0+Y29ubi0+Y19wYXNzaXZlKQorCQkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubi0+Y19wYXNzaXZlKTsKKwkJcmRzX2Nvbm5fZGVzdHJveShpYy0+Y29ubik7CisJfQorfQorCitzdGF0aWMgdm9pZCByZHNfaXdfc2V0X3NjYXR0ZXJsaXN0KHN0cnVjdCByZHNfaXdfc2NhdHRlcmxpc3QgKnNnLAorCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmxpc3QsIHVuc2lnbmVkIGludCBzZ19sZW4pCit7CisJc2ctPmxpc3QgPSBsaXN0OworCXNnLT5sZW4gPSBzZ19sZW47CisJc2ctPmRtYV9sZW4gPSAwOworCXNnLT5kbWFfbnBhZ2VzID0gMDsKKwlzZy0+Ynl0ZXMgPSAwOworfQorCitzdGF0aWMgdTY0ICpyZHNfaXdfbWFwX3NjYXR0ZXJsaXN0KHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYsCisJCQlzdHJ1Y3QgcmRzX2l3X3NjYXR0ZXJsaXN0ICpzZywKKwkJCXVuc2lnbmVkIGludCBkbWFfcGFnZV9zaGlmdCkKK3sKKwlzdHJ1Y3QgaWJfZGV2aWNlICpkZXYgPSByZHNfaXdkZXYtPmRldjsKKwl1NjQgKmRtYV9wYWdlcyA9IE5VTEw7CisJdTY0IGRtYV9tYXNrOworCXVuc2lnbmVkIGludCBkbWFfcGFnZV9zaXplOworCWludCBpLCBqLCByZXQ7CisKKwlkbWFfcGFnZV9zaXplID0gMSA8PCBkbWFfcGFnZV9zaGlmdDsKKwlkbWFfbWFzayA9IGRtYV9wYWdlX3NpemUgLSAxOworCisJV0FSTl9PTihzZy0+ZG1hX2xlbik7CisKKwlzZy0+ZG1hX2xlbiA9IGliX2RtYV9tYXBfc2coZGV2LCBzZy0+bGlzdCwgc2ctPmxlbiwgRE1BX0JJRElSRUNUSU9OQUwpOworCWlmICh1bmxpa2VseSghc2ctPmRtYV9sZW4pKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogZG1hX21hcF9zZyBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVCVVNZKTsKKwl9CisKKwlzZy0+Ynl0ZXMgPSAwOworCXNnLT5kbWFfbnBhZ2VzID0gMDsKKworCXJldCA9IC1FSU5WQUw7CisJZm9yIChpID0gMDsgaSA8IHNnLT5kbWFfbGVuOyArK2kpIHsKKwkJdW5zaWduZWQgaW50IGRtYV9sZW4gPSBpYl9zZ19kbWFfbGVuKGRldiwgJnNnLT5saXN0W2ldKTsKKwkJdTY0IGRtYV9hZGRyID0gaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCAmc2ctPmxpc3RbaV0pOworCQl1NjQgZW5kX2FkZHI7CisKKwkJc2ctPmJ5dGVzICs9IGRtYV9sZW47CisKKwkJZW5kX2FkZHIgPSBkbWFfYWRkciArIGRtYV9sZW47CisJCWlmIChkbWFfYWRkciAmIGRtYV9tYXNrKSB7CisJCQlpZiAoaSA+IDApCisJCQkJZ290byBvdXRfdW5tYXA7CisJCQlkbWFfYWRkciAmPSB+ZG1hX21hc2s7CisJCX0KKwkJaWYgKGVuZF9hZGRyICYgZG1hX21hc2spIHsKKwkJCWlmIChpIDwgc2ctPmRtYV9sZW4gLSAxKQorCQkJCWdvdG8gb3V0X3VubWFwOworCQkJZW5kX2FkZHIgPSAoZW5kX2FkZHIgKyBkbWFfbWFzaykgJiB+ZG1hX21hc2s7CisJCX0KKworCQlzZy0+ZG1hX25wYWdlcyArPSAoZW5kX2FkZHIgLSBkbWFfYWRkcikgPj4gZG1hX3BhZ2Vfc2hpZnQ7CisJfQorCisJLyogTm93IGdhdGhlciB0aGUgZG1hIGFkZHJzIGludG8gb25lIGxpc3QgKi8KKwlpZiAoc2ctPmRtYV9ucGFnZXMgPiBmYXN0cmVnX21lc3NhZ2Vfc2l6ZSkKKwkJZ290byBvdXRfdW5tYXA7CisKKwlkbWFfcGFnZXMgPSBrbWFsbG9jKHNpemVvZih1NjQpICogc2ctPmRtYV9ucGFnZXMsIEdGUF9BVE9NSUMpOworCWlmICghZG1hX3BhZ2VzKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubWFwOworCX0KKworCWZvciAoaSA9IGogPSAwOyBpIDwgc2ctPmRtYV9sZW47ICsraSkgeworCQl1bnNpZ25lZCBpbnQgZG1hX2xlbiA9IGliX3NnX2RtYV9sZW4oZGV2LCAmc2ctPmxpc3RbaV0pOworCQl1NjQgZG1hX2FkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhkZXYsICZzZy0+bGlzdFtpXSk7CisJCXU2NCBlbmRfYWRkcjsKKworCQllbmRfYWRkciA9IGRtYV9hZGRyICsgZG1hX2xlbjsKKwkJZG1hX2FkZHIgJj0gfmRtYV9tYXNrOworCQlmb3IgKDsgZG1hX2FkZHIgPCBlbmRfYWRkcjsgZG1hX2FkZHIgKz0gZG1hX3BhZ2Vfc2l6ZSkKKwkJCWRtYV9wYWdlc1tqKytdID0gZG1hX2FkZHI7CisJCUJVR19PTihqID4gc2ctPmRtYV9ucGFnZXMpOworCX0KKworCXJldHVybiBkbWFfcGFnZXM7CisKK291dF91bm1hcDoKKwlpYl9kbWFfdW5tYXBfc2cocmRzX2l3ZGV2LT5kZXYsIHNnLT5saXN0LCBzZy0+bGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJc2ctPmRtYV9sZW4gPSAwOworCWtmcmVlKGRtYV9wYWdlcyk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKK30KKworCitzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnJkc19pd19jcmVhdGVfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2KQoreworCXN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbDsKKworCXBvb2wgPSBremFsbG9jKHNpemVvZigqcG9vbCksIEdGUF9LRVJORUwpOworCWlmICghcG9vbCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IHJkc19pd19jcmVhdGVfbXJfcG9vbCBhbGxvYyBlcnJvclxuIik7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCXBvb2wtPmRldmljZSA9IHJkc19pd2RldjsKKwlJTklUX0xJU1RfSEVBRCgmcG9vbC0+ZGlydHlfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJnBvb2wtPmNsZWFuX2xpc3QpOworCW11dGV4X2luaXQoJnBvb2wtPmZsdXNoX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwb29sLT5saXN0X2xvY2spOworCUlOSVRfV09SSygmcG9vbC0+Zmx1c2hfd29ya2VyLCByZHNfaXdfbXJfcG9vbF9mbHVzaF93b3JrZXIpOworCisJcG9vbC0+bWF4X21lc3NhZ2Vfc2l6ZSA9IGZhc3RyZWdfbWVzc2FnZV9zaXplOworCXBvb2wtPm1heF9pdGVtcyA9IGZhc3RyZWdfcG9vbF9zaXplOworCXBvb2wtPm1heF9mcmVlX3Bpbm5lZCA9IHBvb2wtPm1heF9pdGVtcyAqIHBvb2wtPm1heF9tZXNzYWdlX3NpemUgLyA0OworCXBvb2wtPm1heF9wYWdlcyA9IGZhc3RyZWdfbWVzc2FnZV9zaXplOworCisJLyogV2UgbmV2ZXIgYWxsb3cgbW9yZSB0aGFuIG1heF9pdGVtcyBNUnMgdG8gYmUgYWxsb2NhdGVkLgorCSAqIFdoZW4gd2UgZXhjZWVkIG1vcmUgdGhhbiBtYXhfaXRlbXNfc29mdCwgd2Ugc3RhcnQgZnJlZWluZworCSAqIGl0ZW1zIG1vcmUgYWdncmVzc2l2ZWx5LgorCSAqIE1ha2Ugc3VyZSB0aGF0IG1heF9pdGVtcyA+IG1heF9pdGVtc19zb2Z0ID4gbWF4X2l0ZW1zIC8gMgorCSAqLworCXBvb2wtPm1heF9pdGVtc19zb2Z0ID0gcG9vbC0+bWF4X2l0ZW1zICogMyAvIDQ7CisKKwlyZXR1cm4gcG9vbDsKK30KKwordm9pZCByZHNfaXdfZ2V0X21yX2luZm8oc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2Rldiwgc3RydWN0IHJkc19pbmZvX3JkbWFfY29ubmVjdGlvbiAqaWluZm8pCit7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sID0gcmRzX2l3ZGV2LT5tcl9wb29sOworCisJaWluZm8tPnJkbWFfbXJfbWF4ID0gcG9vbC0+bWF4X2l0ZW1zOworCWlpbmZvLT5yZG1hX21yX3NpemUgPSBwb29sLT5tYXhfcGFnZXM7Cit9CisKK3ZvaWQgcmRzX2l3X2Rlc3Ryb3lfbXJfcG9vbChzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wpCit7CisJZmx1c2hfd29ya3F1ZXVlKHJkc193cSk7CisJcmRzX2l3X2ZsdXNoX21yX3Bvb2wocG9vbCwgMSk7CisJQlVHX09OKGF0b21pY19yZWFkKCZwb29sLT5pdGVtX2NvdW50KSk7CisJQlVHX09OKGF0b21pY19yZWFkKCZwb29sLT5mcmVlX3Bpbm5lZCkpOworCWtmcmVlKHBvb2wpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZHNfaXdfbXIgKnJkc19pd19yZXVzZV9mbXIoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sKQoreworCXN0cnVjdCByZHNfaXdfbXIgKmlibXIgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZwb29sLT5jbGVhbl9saXN0KSkgeworCQlpYm1yID0gbGlzdF9lbnRyeShwb29sLT5jbGVhbl9saXN0Lm5leHQsIHN0cnVjdCByZHNfaXdfbXIsIG1hcHBpbmcubV9saXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmaWJtci0+bWFwcGluZy5tX2xpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiBpYm1yOworfQorCitzdGF0aWMgc3RydWN0IHJkc19pd19tciAqcmRzX2l3X2FsbG9jX21yKHN0cnVjdCByZHNfaXdfZGV2aWNlICpyZHNfaXdkZXYpCit7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sID0gcmRzX2l3ZGV2LT5tcl9wb29sOworCXN0cnVjdCByZHNfaXdfbXIgKmlibXIgPSBOVUxMOworCWludCBlcnIgPSAwLCBpdGVyID0gMDsKKworCXdoaWxlICgxKSB7CisJCWlibXIgPSByZHNfaXdfcmV1c2VfZm1yKHBvb2wpOworCQlpZiAoaWJtcikKKwkJCXJldHVybiBpYm1yOworCisJCS8qIE5vIGNsZWFuIE1ScyAtIG5vdyB3ZSBoYXZlIHRoZSBjaG9pY2Ugb2YgZWl0aGVyCisJCSAqIGFsbG9jYXRpbmcgYSBmcmVzaCBNUiB1cCB0byB0aGUgbGltaXQgaW1wb3NlZCBieSB0aGUKKwkJICogZHJpdmVyLCBvciBmbHVzaCBhbnkgZGlydHkgdW51c2VkIE1Scy4KKwkJICogV2UgdHJ5IHRvIGF2b2lkIHN0YWxsaW5nIGluIHRoZSBzZW5kIHBhdGggaWYgcG9zc2libGUsCisJCSAqIHNvIHdlIGFsbG9jYXRlIGFzIGxvbmcgYXMgd2UncmUgYWxsb3dlZCB0by4KKwkJICoKKwkJICogV2UncmUgZnVzc3kgd2l0aCBlbmZvcmNpbmcgdGhlIEZNUiBsaW1pdCwgdGhvdWdoLiBJZiB0aGUgZHJpdmVyCisJCSAqIHRlbGxzIHVzIHdlIGNhbid0IHVzZSBtb3JlIHRoYW4gTiBmbXJzLCB3ZSBzaG91bGRuJ3Qgc3RhcnQKKwkJICogYXJndWluZyB3aXRoIGl0ICovCisJCWlmIChhdG9taWNfaW5jX3JldHVybigmcG9vbC0+aXRlbV9jb3VudCkgPD0gcG9vbC0+bWF4X2l0ZW1zKQorCQkJYnJlYWs7CisKKwkJYXRvbWljX2RlYygmcG9vbC0+aXRlbV9jb3VudCk7CisKKwkJaWYgKCsraXRlciA+IDIpIHsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd19yZG1hX21yX3Bvb2xfZGVwbGV0ZWQpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVBR0FJTik7CisJCX0KKworCQkvKiBXZSBkbyBoYXZlIHNvbWUgZW1wdHkgTVJzLiBGbHVzaCB0aGVtIG91dC4gKi8KKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfcG9vbF93YWl0KTsKKwkJcmRzX2l3X2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7CisJfQorCisJaWJtciA9IGt6YWxsb2Moc2l6ZW9mKCppYm1yKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpYm1yKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X25vX2NpZ2FyOworCX0KKworCXNwaW5fbG9ja19pbml0KCZpYm1yLT5tYXBwaW5nLm1fbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmlibXItPm1hcHBpbmcubV9saXN0KTsKKwlpYm1yLT5tYXBwaW5nLm1fbXIgPSBpYm1yOworCisJZXJyID0gcmRzX2l3X2luaXRfZmFzdHJlZyhwb29sLCBpYm1yKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9ub19jaWdhcjsKKworCXJkc19pd19zdGF0c19pbmMoc19pd19yZG1hX21yX2FsbG9jKTsKKwlyZXR1cm4gaWJtcjsKKworb3V0X25vX2NpZ2FyOgorCWlmIChpYm1yKSB7CisJCXJkc19pd19kZXN0cm95X2Zhc3RyZWcocG9vbCwgaWJtcik7CisJCWtmcmVlKGlibXIpOworCX0KKwlhdG9taWNfZGVjKCZwb29sLT5pdGVtX2NvdW50KTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCit2b2lkIHJkc19pd19zeW5jX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBkaXJlY3Rpb24pCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IHRyYW5zX3ByaXZhdGU7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldiA9IGlibXItPmRldmljZTsKKworCXN3aXRjaCAoZGlyZWN0aW9uKSB7CisJY2FzZSBETUFfRlJPTV9ERVZJQ0U6CisJCWliX2RtYV9zeW5jX3NnX2Zvcl9jcHUocmRzX2l3ZGV2LT5kZXYsIGlibXItPm1hcHBpbmcubV9zZy5saXN0LAorCQkJaWJtci0+bWFwcGluZy5tX3NnLmRtYV9sZW4sIERNQV9CSURJUkVDVElPTkFMKTsKKwkJYnJlYWs7CisJY2FzZSBETUFfVE9fREVWSUNFOgorCQlpYl9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHJkc19pd2Rldi0+ZGV2LCBpYm1yLT5tYXBwaW5nLm1fc2cubGlzdCwKKwkJCWlibXItPm1hcHBpbmcubV9zZy5kbWFfbGVuLCBETUFfQklESVJFQ1RJT05BTCk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmRzX2l3X2ZsdXNoX2dvYWwoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLCBpbnQgZnJlZV9hbGwpCit7CisJdW5zaWduZWQgaW50IGl0ZW1fY291bnQ7CisKKwlpdGVtX2NvdW50ID0gYXRvbWljX3JlYWQoJnBvb2wtPml0ZW1fY291bnQpOworCWlmIChmcmVlX2FsbCkKKwkJcmV0dXJuIGl0ZW1fY291bnQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZsdXNoIG91ciBwb29sIG9mIE1Scy4KKyAqIEF0IGEgbWluaW11bSwgYWxsIGN1cnJlbnRseSB1bnVzZWQgTVJzIGFyZSB1bm1hcHBlZC4KKyAqIElmIHRoZSBudW1iZXIgb2YgTVJzIGFsbG9jYXRlZCBleGNlZWRzIHRoZSBsaW1pdCwgd2UgYWxzbyB0cnkKKyAqIHRvIGZyZWUgYXMgbWFueSBNUnMgYXMgbmVlZGVkIHRvIGdldCBiYWNrIHRvIHRoaXMgbGltaXQuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2l3X2ZsdXNoX21yX3Bvb2woc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLCBpbnQgZnJlZV9hbGwpCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciwgKm5leHQ7CisJTElTVF9IRUFEKHVubWFwX2xpc3QpOworCUxJU1RfSEVBRChraWxsX2xpc3QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IG5mcmVlZCA9IDAsIG5jbGVhbmVkID0gMCwgZnJlZV9nb2FsOworCWludCByZXQgPSAwOworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfcG9vbF9mbHVzaCk7CisKKwltdXRleF9sb2NrKCZwb29sLT5mbHVzaF9sb2NrKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwkvKiBHZXQgdGhlIGxpc3Qgb2YgYWxsIG1hcHBpbmdzIHRvIGJlIGRlc3Ryb3llZCAqLworCWxpc3Rfc3BsaWNlX2luaXQoJnBvb2wtPmRpcnR5X2xpc3QsICZ1bm1hcF9saXN0KTsKKwlpZiAoZnJlZV9hbGwpCisJCWxpc3Rfc3BsaWNlX2luaXQoJnBvb2wtPmNsZWFuX2xpc3QsICZraWxsX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCisJZnJlZV9nb2FsID0gcmRzX2l3X2ZsdXNoX2dvYWwocG9vbCwgZnJlZV9hbGwpOworCisJLyogQmF0Y2hlZCBpbnZhbGlkYXRlIG9mIGRpcnR5IE1Scy4KKwkgKiBGb3IgRk1SIGJhc2VkIE1ScywgdGhlIG1hcHBpbmdzIG9uIHRoZSB1bm1hcCBsaXN0IGFyZQorCSAqIGFjdHVhbGx5IG1lbWJlcnMgb2YgYW4gaWJtciAoaWJtci0+bWFwcGluZykuIFRoZXkgZWl0aGVyCisJICogbWlncmF0ZSB0byB0aGUga2lsbF9saXN0LCBvciBoYXZlIGJlZW4gY2xlYW5lZCBhbmQgc2hvdWxkIGJlCisJICogbW92ZWQgdG8gdGhlIGNsZWFuX2xpc3QuCisJICogRm9yIGZhc3RyZWdzLCB0aGV5IHdpbGwgYmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkLCBhbmQKKwkgKiB3aWxsIGJlIGRlc3Ryb3llZCBieSB0aGUgdW5tYXAgZnVuY3Rpb24uCisJICovCisJaWYgKCFsaXN0X2VtcHR5KCZ1bm1hcF9saXN0KSkgeworCQluY2xlYW5lZCA9IHJkc19pd191bm1hcF9mYXN0cmVnX2xpc3QocG9vbCwgJnVubWFwX2xpc3QsICZraWxsX2xpc3QpOworCQkvKiBJZiB3ZSd2ZSBiZWVuIGFza2VkIHRvIGRlc3Ryb3kgYWxsIE1ScywgbW92ZSB0aG9zZQorCQkgKiB0aGF0IHdlcmUgc2ltcGx5IGNsZWFuZWQgdG8gdGhlIGtpbGwgbGlzdCAqLworCQlpZiAoZnJlZV9hbGwpCisJCQlsaXN0X3NwbGljZV9pbml0KCZ1bm1hcF9saXN0LCAma2lsbF9saXN0KTsKKwl9CisKKwkvKiBEZXN0cm95IGFueSBNUnMgdGhhdCBhcmUgcGFzdCB0aGVpciBiZXN0IGJlZm9yZSBkYXRlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlibXIsIG5leHQsICZraWxsX2xpc3QsIG1hcHBpbmcubV9saXN0KSB7CisJCXJkc19pd19zdGF0c19pbmMoc19pd19yZG1hX21yX2ZyZWUpOworCQlsaXN0X2RlbCgmaWJtci0+bWFwcGluZy5tX2xpc3QpOworCQlyZHNfaXdfZGVzdHJveV9mYXN0cmVnKHBvb2wsIGlibXIpOworCQlrZnJlZShpYm1yKTsKKwkJbmZyZWVkKys7CisJfQorCisJLyogQW55dGhpbmcgdGhhdCByZW1haW5zIGFyZSBsYXVuZGVyZWQgaWJtcnMsIHdoaWNoIHdlIGNhbiBhZGQKKwkgKiBiYWNrIHRvIHRoZSBjbGVhbiBsaXN0LiAqLworCWlmICghbGlzdF9lbXB0eSgmdW5tYXBfbGlzdCkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworCQlsaXN0X3NwbGljZSgmdW5tYXBfbGlzdCwgJnBvb2wtPmNsZWFuX2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKwl9CisKKwlhdG9taWNfc3ViKG5jbGVhbmVkLCAmcG9vbC0+ZGlydHlfY291bnQpOworCWF0b21pY19zdWIobmZyZWVkLCAmcG9vbC0+aXRlbV9jb3VudCk7CisKKwltdXRleF91bmxvY2soJnBvb2wtPmZsdXNoX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19tcl9wb29sX2ZsdXNoX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByZHNfaXdfbXJfcG9vbCwgZmx1c2hfd29ya2VyKTsKKworCXJkc19pd19mbHVzaF9tcl9wb29sKHBvb2wsIDApOworfQorCit2b2lkIHJkc19pd19mcmVlX21yKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBpbnZhbGlkYXRlKQoreworCXN0cnVjdCByZHNfaXdfbXIgKmlibXIgPSB0cmFuc19wcml2YXRlOworCXN0cnVjdCByZHNfaXdfbXJfcG9vbCAqcG9vbCA9IGlibXItPmRldmljZS0+bXJfcG9vbDsKKworCXJkc2RlYnVnKCJSRFMvSVc6IGZyZWVfbXIgbmVudHMgJXVcbiIsIGlibXItPm1hcHBpbmcubV9zZy5sZW4pOworCWlmICghcG9vbCkKKwkJcmV0dXJuOworCisJLyogUmV0dXJuIGl0IHRvIHRoZSBwb29sJ3MgZnJlZSBsaXN0ICovCisJcmRzX2l3X2ZyZWVfZmFzdHJlZyhwb29sLCBpYm1yKTsKKworCS8qIElmIHdlJ3ZlIHBpbm5lZCB0b28gbWFueSBwYWdlcywgcmVxdWVzdCBhIGZsdXNoICovCisJaWYgKGF0b21pY19yZWFkKCZwb29sLT5mcmVlX3Bpbm5lZCkgPj0gcG9vbC0+bWF4X2ZyZWVfcGlubmVkCisJIHx8IGF0b21pY19yZWFkKCZwb29sLT5kaXJ0eV9jb3VudCkgPj0gcG9vbC0+bWF4X2l0ZW1zIC8gMTApCisJCXF1ZXVlX3dvcmsocmRzX3dxLCAmcG9vbC0+Zmx1c2hfd29ya2VyKTsKKworCWlmIChpbnZhbGlkYXRlKSB7CisJCWlmIChsaWtlbHkoIWluX2ludGVycnVwdCgpKSkgeworCQkJcmRzX2l3X2ZsdXNoX21yX3Bvb2wocG9vbCwgMCk7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBnZXQgaGVyZSBpZiB0aGUgdXNlciBjcmVhdGVkIGEgTVIgbWFya2VkCisJCQkgKiBhcyB1c2Vfb25jZSBhbmQgaW52YWxpZGF0ZSBhdCB0aGUgc2FtZSB0aW1lLiAqLworCQkJcXVldWVfd29yayhyZHNfd3EsICZwb29sLT5mbHVzaF93b3JrZXIpOworCQl9CisJfQorfQorCit2b2lkIHJkc19pd19mbHVzaF9tcnModm9pZCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZHNfaXdkZXYsICZyZHNfaXdfZGV2aWNlcywgbGlzdCkgeworCQlzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wgPSByZHNfaXdkZXYtPm1yX3Bvb2w7CisKKwkJaWYgKHBvb2wpCisJCQlyZHNfaXdfZmx1c2hfbXJfcG9vbChwb29sLCAwKTsKKwl9Cit9CisKK3ZvaWQgKnJkc19pd19nZXRfbXIoc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgbG9uZyBuZW50cywKKwkJICAgIHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiAqa2V5X3JldCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2OworCXN0cnVjdCByZHNfaXdfbXIgKmlibXIgPSBOVUxMOworCXN0cnVjdCByZG1hX2NtX2lkICpjbV9pZDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmRzX2l3X2dldF9kZXZpY2UocnMsICZyZHNfaXdkZXYsICZjbV9pZCk7CisJaWYgKHJldCB8fCAhY21faWQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFyZHNfaXdkZXYtPm1yX3Bvb2wpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJaWJtciA9IHJkc19pd19hbGxvY19tcihyZHNfaXdkZXYpOworCWlmIChJU19FUlIoaWJtcikpCisJCXJldHVybiBpYm1yOworCisJaWJtci0+Y21faWQgPSBjbV9pZDsKKwlpYm1yLT5kZXZpY2UgPSByZHNfaXdkZXY7CisKKwlyZXQgPSByZHNfaXdfbWFwX2Zhc3RyZWcocmRzX2l3ZGV2LT5tcl9wb29sLCBpYm1yLCBzZywgbmVudHMpOworCWlmIChyZXQgPT0gMCkKKwkJKmtleV9yZXQgPSBpYm1yLT5tci0+cmtleTsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogZmFpbGVkIHRvIG1hcCBtciAoZXJybm89JWQpXG4iLCByZXQpOworCitvdXQ6CisJaWYgKHJldCkgeworCQlpZiAoaWJtcikKKwkJCXJkc19pd19mcmVlX21yKGlibXIsIDApOworCQlpYm1yID0gRVJSX1BUUihyZXQpOworCX0KKwlyZXR1cm4gaWJtcjsKK30KKworLyoKKyAqIGlXQVJQIGZhc3RyZWcgaGFuZGxpbmcKKyAqCisgKiBUaGUgbGlmZSBjeWNsZSBvZiBhIGZhc3RyZWcgcmVnaXN0cmF0aW9uIGlzIGEgYml0IGRpZmZlcmVudCBmcm9tCisgKiBGTVJzLgorICogVGhlIGlkZWEgYmVoaW5kIGZhc3RyZWcgaXMgdG8gaGF2ZSBvbmUgTVIsIHRvIHdoaWNoIHdlIGJpbmQgZGlmZmVyZW50CisgKiBtYXBwaW5ncyBvdmVyIHRpbWUuIFRvIGF2b2lkIHN0YWxsaW5nIG9uIHRoZSBleHBlbnNpdmUgbWFwIGFuZCBpbnZhbGlkYXRlCisgKiBvcGVyYXRpb25zLCB0aGVzZSBvcGVyYXRpb25zIGFyZSBwaXBlbGluZWQgb24gdGhlIHNhbWUgc2VuZCBxdWV1ZSBvbgorICogd2hpY2ggd2Ugd2FudCB0byBzZW5kIHRoZSBtZXNzYWdlIGNvbnRhaW5pbmcgdGhlIHJfa2V5LgorICoKKyAqIFRoaXMgY3JlYXRlcyBhIGJpdCBvZiBhIHByb2JsZW0gZm9yIHVzLCBhcyB3ZSBkbyBub3QgaGF2ZSB0aGUgZGVzdGluYXRpb24KKyAqIElQIGluIEdFVF9NUiwgc28gdGhlIGNvbm5lY3Rpb24gbXVzdCBiZSBzZXR1cCBwcmlvciB0byB0aGUgR0VUX01SIGNhbGwgZm9yCisgKiBSRE1BIHRvIGJlIGNvcnJlY3RseSBzZXR1cC4gIElmIGEgZmFzdHJlZyByZXF1ZXN0IGlzIHByZXNlbnQsIHJkc19pd194bWl0CisgKiB3aWxsIHRyeSB0byBxdWV1ZSBhIExPQ0FMX0lOViAoaWYgbmVlZGVkKSBhbmQgYSBGQVNUX1JFR19NUiB3b3JrIHJlcXVlc3QKKyAqIGJlZm9yZSBxdWV1aW5nIHRoZSBTRU5ELiBXaGVuIGNvbXBsZXRpb25zIGZvciB0aGVzZSBhcnJpdmUsIHRoZXkgYXJlCisgKiBkaXNwYXRjaGVkIHRvIHRoZSBNUiBoYXMgYSBiaXQgc2V0IHNob3dpbmcgdGhhdCBSRE1hIGNhbiBiZSBwZXJmb3JtZWQuCisgKgorICogVGhlcmUgaXMgYW5vdGhlciBpbnRlcmVzdGluZyBhc3BlY3QgdGhhdCdzIHJlbGF0ZWQgdG8gaW52YWxpZGF0aW9uLgorICogVGhlIGFwcGxpY2F0aW9uIGNhbiByZXF1ZXN0IHRoYXQgYSBtYXBwaW5nIGlzIGludmFsaWRhdGVkIGluIEZSRUVfTVIuCisgKiBUaGUgZXhwZWN0YXRpb24gdGhlcmUgaXMgdGhhdCB0aGlzIGludmFsaWRhdGlvbiBzdGVwIGluY2x1ZGVzIEFMTAorICogUFJFVklPVVNMWSBGUkVFRCBNUnMuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2l3X2luaXRfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCQkJc3RydWN0IHJkc19pd19tciAqaWJtcikKK3sKKwlzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2ID0gcG9vbC0+ZGV2aWNlOworCXN0cnVjdCBpYl9mYXN0X3JlZ19wYWdlX2xpc3QgKnBhZ2VfbGlzdCA9IE5VTEw7CisJc3RydWN0IGliX21yICptcjsKKwlpbnQgZXJyOworCisJbXIgPSBpYl9hbGxvY19mYXN0X3JlZ19tcihyZHNfaXdkZXYtPnBkLCBwb29sLT5tYXhfbWVzc2FnZV9zaXplKTsKKwlpZiAoSVNfRVJSKG1yKSkgeworCQllcnIgPSBQVFJfRVJSKG1yKTsKKworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGliX2FsbG9jX2Zhc3RfcmVnX21yIGZhaWxlZCAoZXJyPSVkKVxuIiwgZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBGSVhNRSAtIHRoaXMgaXMgb3ZlcmtpbGwsIGJ1dCBtYXBwaW5nLT5tX3NnLmRtYV9sZW4vbWFwcGluZy0+bV9zZy5kbWFfbnBhZ2VzCisJICogaXMgbm90IGZpbGxlZCBpbi4KKwkgKi8KKwlwYWdlX2xpc3QgPSBpYl9hbGxvY19mYXN0X3JlZ19wYWdlX2xpc3QocmRzX2l3ZGV2LT5kZXYsIHBvb2wtPm1heF9tZXNzYWdlX3NpemUpOworCWlmIChJU19FUlIocGFnZV9saXN0KSkgeworCQllcnIgPSBQVFJfRVJSKHBhZ2VfbGlzdCk7CisKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiBpYl9hbGxvY19mYXN0X3JlZ19wYWdlX2xpc3QgZmFpbGVkIChlcnI9JWQpXG4iLCBlcnIpOworCQlpYl9kZXJlZ19tcihtcik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWJtci0+cGFnZV9saXN0ID0gcGFnZV9saXN0OworCWlibXItPm1yID0gbXI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X3JkbWFfYnVpbGRfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21hcHBpbmcgKm1hcHBpbmcpCit7CisJc3RydWN0IHJkc19pd19tciAqaWJtciA9IG1hcHBpbmctPm1fbXI7CisJc3RydWN0IGliX3NlbmRfd3IgZl93ciwgKmZhaWxlZF93cjsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBQZXJmb3JtIGEgV1IgZm9yIHRoZSBmYXN0X3JlZ19tci4gRWFjaCBpbmRpdmlkdWFsIHBhZ2UKKwkgKiBpbiB0aGUgc2cgbGlzdCBpcyBhZGRlZCB0byB0aGUgZmFzdCByZWcgcGFnZSBsaXN0IGFuZCBwbGFjZWQKKwkgKiBpbnNpZGUgdGhlIGZhc3RfcmVnX21yIFdSLiAgVGhlIGtleSB1c2VkIGlzIGEgcm9sbGluZyA4Yml0CisJICogY291bnRlciwgd2hpY2ggc2hvdWxkIGd1YXJhbnRlZSB1bmlxdWVuZXNzLgorCSAqLworCWliX3VwZGF0ZV9mYXN0X3JlZ19rZXkoaWJtci0+bXIsIGlibXItPnJlbWFwX2NvdW50KyspOworCW1hcHBpbmctPm1fcmtleSA9IGlibXItPm1yLT5ya2V5OworCisJbWVtc2V0KCZmX3dyLCAwLCBzaXplb2YoZl93cikpOworCWZfd3Iud3JfaWQgPSBSRFNfSVdfRkFTVF9SRUdfV1JfSUQ7CisJZl93ci5vcGNvZGUgPSBJQl9XUl9GQVNUX1JFR19NUjsKKwlmX3dyLndyLmZhc3RfcmVnLmxlbmd0aCA9IG1hcHBpbmctPm1fc2cuYnl0ZXM7CisJZl93ci53ci5mYXN0X3JlZy5ya2V5ID0gbWFwcGluZy0+bV9ya2V5OworCWZfd3Iud3IuZmFzdF9yZWcucGFnZV9saXN0ID0gaWJtci0+cGFnZV9saXN0OworCWZfd3Iud3IuZmFzdF9yZWcucGFnZV9saXN0X2xlbiA9IG1hcHBpbmctPm1fc2cuZG1hX2xlbjsKKwlmX3dyLndyLmZhc3RfcmVnLnBhZ2Vfc2hpZnQgPSBpYm1yLT5kZXZpY2UtPnBhZ2Vfc2hpZnQ7CisJZl93ci53ci5mYXN0X3JlZy5hY2Nlc3NfZmxhZ3MgPSBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgfAorCQkJCUlCX0FDQ0VTU19SRU1PVEVfUkVBRCB8CisJCQkJSUJfQUNDRVNTX1JFTU9URV9XUklURTsKKwlmX3dyLndyLmZhc3RfcmVnLmlvdmFfc3RhcnQgPSAwOworCWZfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisKKwlmYWlsZWRfd3IgPSAmZl93cjsKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWJtci0+Y21faWQtPnFwLCAmZl93ciwgJmZhaWxlZF93cik7CisJQlVHX09OKGZhaWxlZF93ciAhPSAmZl93cik7CisJaWYgKHJldCAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogJXM6JWQgaWJfcG9zdF9zZW5kIHJldHVybmVkICVkXG4iLAorCQkJX19mdW5jX18sIF9fTElORV9fLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2l3X3JkbWFfZmFzdHJlZ19pbnYoc3RydWN0IHJkc19pd19tciAqaWJtcikKK3sKKwlzdHJ1Y3QgaWJfc2VuZF93ciBzX3dyLCAqZmFpbGVkX3dyOworCWludCByZXQgPSAwOworCisJaWYgKCFpYm1yLT5jbV9pZC0+cXAgfHwgIWlibXItPm1yKQorCQlnb3RvIG91dDsKKworCW1lbXNldCgmc193ciwgMCwgc2l6ZW9mKHNfd3IpKTsKKwlzX3dyLndyX2lkID0gUkRTX0lXX0xPQ0FMX0lOVl9XUl9JRDsKKwlzX3dyLm9wY29kZSA9IElCX1dSX0xPQ0FMX0lOVjsKKwlzX3dyLmV4LmludmFsaWRhdGVfcmtleSA9IGlibXItPm1yLT5ya2V5OworCXNfd3Iuc2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQ7CisKKwlmYWlsZWRfd3IgPSAmc193cjsKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWJtci0+Y21faWQtPnFwLCAmc193ciwgJmZhaWxlZF93cik7CisJaWYgKHJldCAmJiBwcmludGtfcmF0ZWxpbWl0KCkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiAlczolZCBpYl9wb3N0X3NlbmQgcmV0dXJuZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywgX19MSU5FX18sIHJldCk7CisJCWdvdG8gb3V0OworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJkc19pd19tYXBfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X21yX3Bvb2wgKnBvb2wsCisJCQlzdHJ1Y3QgcmRzX2l3X21yICppYm1yLAorCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCXVuc2lnbmVkIGludCBzZ19sZW4pCit7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldiA9IHBvb2wtPmRldmljZTsKKwlzdHJ1Y3QgcmRzX2l3X21hcHBpbmcgKm1hcHBpbmcgPSAmaWJtci0+bWFwcGluZzsKKwl1NjQgKmRtYV9wYWdlczsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXJkc19pd19zZXRfc2NhdHRlcmxpc3QoJm1hcHBpbmctPm1fc2csIHNnLCBzZ19sZW4pOworCisJZG1hX3BhZ2VzID0gcmRzX2l3X21hcF9zY2F0dGVybGlzdChyZHNfaXdkZXYsCisJCQkJJm1hcHBpbmctPm1fc2csCisJCQkJcmRzX2l3ZGV2LT5wYWdlX3NoaWZ0KTsKKwlpZiAoSVNfRVJSKGRtYV9wYWdlcykpIHsKKwkJcmV0ID0gUFRSX0VSUihkbWFfcGFnZXMpOworCQlkbWFfcGFnZXMgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobWFwcGluZy0+bV9zZy5kbWFfbGVuID4gcG9vbC0+bWF4X21lc3NhZ2Vfc2l6ZSkgeworCQlyZXQgPSAtRU1TR1NJWkU7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBtYXBwaW5nLT5tX3NnLmRtYV9ucGFnZXM7ICsraSkKKwkJaWJtci0+cGFnZV9saXN0LT5wYWdlX2xpc3RbaV0gPSBkbWFfcGFnZXNbaV07CisKKwlyZXQgPSByZHNfaXdfcmRtYV9idWlsZF9mYXN0cmVnKG1hcHBpbmcpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3JkbWFfbXJfdXNlZCk7CisKK291dDoKKwlrZnJlZShkbWFfcGFnZXMpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICJGcmVlIiBhIGZhc3RyZWcgTVIuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19mcmVlX2Zhc3RyZWcoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQlzdHJ1Y3QgcmRzX2l3X21yICppYm1yKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCWlmICghaWJtci0+bWFwcGluZy5tX3NnLmRtYV9sZW4pCisJCXJldHVybjsKKworCXJldCA9IHJkc19pd19yZG1hX2Zhc3RyZWdfaW52KGlibXIpOworCWlmIChyZXQpCisJCXJldHVybjsKKworCS8qIFRyeSB0byBwb3N0IHRoZSBMT0NBTF9JTlYgV1IgdG8gdGhlIHF1ZXVlLiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwb29sLT5saXN0X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfYWRkX3RhaWwoJmlibXItPm1hcHBpbmcubV9saXN0LCAmcG9vbC0+ZGlydHlfbGlzdCk7CisJYXRvbWljX2FkZChpYm1yLT5tYXBwaW5nLm1fc2cubGVuLCAmcG9vbC0+ZnJlZV9waW5uZWQpOworCWF0b21pY19pbmMoJnBvb2wtPmRpcnR5X2NvdW50KTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxpc3RfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHJkc19pd191bm1hcF9mYXN0cmVnX2xpc3Qoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKnVubWFwX2xpc3QsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqa2lsbF9saXN0KQoreworCXN0cnVjdCByZHNfaXdfbWFwcGluZyAqbWFwcGluZywgKm5leHQ7CisJdW5zaWduZWQgaW50IG5jbGVhbmVkID0gMDsKKwlMSVNUX0hFQUQobGF1bmRlcmVkKTsKKworCS8qIEJhdGNoZWQgaW52YWxpZGF0aW9uIG9mIGZhc3RyZWcgTVJzLgorCSAqIFdoeSBkbyB3ZSBkbyBpdCB0aGlzIHdheSwgZXZlbiB0aG91Z2ggd2UgY291bGQgcGlwZWxpbmUgdW5tYXAKKwkgKiBhbmQgcmVtYXA/IFRoZSByZWFzb24gaXMgdGhlIGFwcGxpY2F0aW9uIHNlbWFudGljcyAtIHdoZW4gdGhlCisJICogYXBwbGljYXRpb24gcmVxdWVzdHMgYW4gaW52YWxpZGF0aW9uIG9mIE1ScywgaXQgZXhwZWN0cyBhbGwKKwkgKiBwcmV2aW91c2x5IHJlbGVhc2VkIFJfS2V5cyB0byBiZWNvbWUgaW52YWxpZC4KKwkgKgorCSAqIElmIHdlIGltcGxlbWVudCBNUiByZXVzZSBuYWl2ZWx5LCB3ZSByaXNrIG1lbW9yeSBjb3JydXB0aW9uCisJICogKHRoaXMgaGFzIGFjdHVhbGx5IGJlZW4gb2JzZXJ2ZWQpLiBTbyB0aGUgZGVmYXVsdCBiZWhhdmlvcgorCSAqIHJlcXVpcmVzIHRoYXQgYSBNUiBnb2VzIHRocm91Z2ggYW4gZXhwbGljaXQgdW5tYXAgb3BlcmF0aW9uIGJlZm9yZQorCSAqIHdlIGNhbiByZXVzZSBpdCBhZ2Fpbi4KKwkgKgorCSAqIFdlIGNvdWxkIHByb2JhYmx5IGltcHJvdmUgb24gdGhpcyBhIGxpdHRsZSwgYnkgYWxsb3dpbmcgaW1tZWRpYXRlCisJICogcmV1c2Ugb2YgYSBNUiBvbiB0aGUgc2FtZSBzb2NrZXQgKGVnIHlvdSBjb3VsZCBhZGQgc21hbGwKKwkgKiBjYWNoZSBvZiB1bnVzZWQgTVJzIHRvIHN0cmN0IHJkc19zb2NrZXQgLSBHRVRfTVIgY291bGQgZ3JhYiBvbmUKKwkgKiBvZiB0aGVzZSB3aXRob3V0IHJlcXVpcmluZyBhbiBleHBsaWNpdCBpbnZhbGlkYXRlKS4KKwkgKi8KKwl3aGlsZSAoIWxpc3RfZW1wdHkodW5tYXBfbGlzdCkpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYXBwaW5nLCBuZXh0LCB1bm1hcF9saXN0LCBtX2xpc3QpIHsKKwkJCWxpc3RfbW92ZSgmbWFwcGluZy0+bV9saXN0LCAmbGF1bmRlcmVkKTsKKwkJCW5jbGVhbmVkKys7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9vbC0+bGlzdF9sb2NrLCBmbGFncyk7CisJfQorCisJLyogTW92ZSBhbGwgbGF1bmRlcmVkIG1hcHBpbmdzIGJhY2sgdG8gdGhlIHVubWFwIGxpc3QuCisJICogV2UgZG8gbm90IGtpbGwgYW55IFdScyByaWdodCBub3cgLSBpdCBkb2Vzbid0IHNlZW0gdGhlCisJICogZmFzdHJlZyBBUEkgaGFzIGEgbWF4X3JlbWFwIGxpbWl0LiAqLworCWxpc3Rfc3BsaWNlX2luaXQoJmxhdW5kZXJlZCwgdW5tYXBfbGlzdCk7CisKKwlyZXR1cm4gbmNsZWFuZWQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19kZXN0cm95X2Zhc3RyZWcoc3RydWN0IHJkc19pd19tcl9wb29sICpwb29sLAorCQlzdHJ1Y3QgcmRzX2l3X21yICppYm1yKQoreworCWlmIChpYm1yLT5wYWdlX2xpc3QpCisJCWliX2ZyZWVfZmFzdF9yZWdfcGFnZV9saXN0KGlibXItPnBhZ2VfbGlzdCk7CisJaWYgKGlibXItPm1yKQorCQlpYl9kZXJlZ19tcihpYm1yLT5tcik7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3JlY3YuYyBiL25ldC9yZHMvaXdfcmVjdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOTMxZjAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3JlY3YuYwpAQCAtMCwwICsxLDg2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgIml3LmgiCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcmRzX2l3X2luY29taW5nX3NsYWI7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJkc19pd19mcmFnX3NsYWI7CitzdGF0aWMgYXRvbWljX3QJcmRzX2l3X2FsbG9jYXRpb24gPSBBVE9NSUNfSU5JVCgwKTsKKworc3RhdGljIHZvaWQgcmRzX2l3X2ZyYWdfZHJvcF9wYWdlKHN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnKQoreworCXJkc2RlYnVnKCJmcmFnICVwIHBhZ2UgJXBcbiIsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJX19mcmVlX3BhZ2UoZnJhZy0+Zl9wYWdlKTsKKwlmcmFnLT5mX3BhZ2UgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfZnJhZ19mcmVlKHN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnKQoreworCXJkc2RlYnVnKCJmcmFnICVwIHBhZ2UgJXBcbiIsIGZyYWcsIGZyYWctPmZfcGFnZSk7CisJQlVHX09OKGZyYWctPmZfcGFnZSAhPSBOVUxMKTsKKwlrbWVtX2NhY2hlX2ZyZWUocmRzX2l3X2ZyYWdfc2xhYiwgZnJhZyk7Cit9CisKKy8qCisgKiBXZSBtYXAgYSBwYWdlIGF0IGEgdGltZS4gIEl0cyBmcmFnbWVudHMgYXJlIHBvc3RlZCBpbiBvcmRlci4gIFRoaXMKKyAqIGlzIGNhbGxlZCBpbiBmcmFnbWVudCBvcmRlciBhcyB0aGUgZnJhZ21lbnRzIGdldCBzZW5kIGNvbXBsZXRpb24gZXZlbnRzLgorICogT25seSB0aGUgbGFzdCBmcmFnIGluIHRoZSBwYWdlIHBlcmZvcm1zIHRoZSB1bm1hcHBpbmcuCisgKgorICogSXQncyBPSyBmb3IgcmluZyBjbGVhbnVwIHRvIGNhbGwgdGhpcyBpbiB3aGF0ZXZlciBvcmRlciBpdCBsaWtlcyBiZWNhdXNlCisgKiBETUEgaXMgbm90IGluIGZsaWdodCBhbmQgc28gd2UgY2FuIHVubWFwIHdoaWxlIG90aGVyIHJpbmcgZW50cmllcyBzdGlsbAorICogaG9sZCBwYWdlIHJlZmVyZW5jZXMgaW4gdGhlaXIgZnJhZ3MuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19yZWN2X3VubWFwX3BhZ2Uoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJCQkgICBzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdikKK3sKKwlzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyAqZnJhZyA9IHJlY3YtPnJfZnJhZzsKKworCXJkc2RlYnVnKCJyZWN2ICVwIGZyYWcgJXAgcGFnZSAlcFxuIiwgcmVjdiwgZnJhZywgZnJhZy0+Zl9wYWdlKTsKKwlpZiAoZnJhZy0+Zl9tYXBwZWQpCisJCWliX2RtYV91bm1hcF9wYWdlKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQkgICAgICAgZnJhZy0+Zl9tYXBwZWQsCisJCQkgICAgICAgUkRTX0ZSQUdfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlmcmFnLT5mX21hcHBlZCA9IDA7Cit9CisKK3ZvaWQgcmRzX2l3X3JlY3ZfaW5pdF9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3Y7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwLCByZWN2ID0gaWMtPmlfcmVjdnM7IGkgPCBpYy0+aV9yZWN2X3Jpbmcud19ucjsgaSsrLCByZWN2KyspIHsKKwkJc3RydWN0IGliX3NnZSAqc2dlOworCisJCXJlY3YtPnJfaXdpbmMgPSBOVUxMOworCQlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCisJCXJlY3YtPnJfd3IubmV4dCA9IE5VTEw7CisJCXJlY3YtPnJfd3Iud3JfaWQgPSBpOworCQlyZWN2LT5yX3dyLnNnX2xpc3QgPSByZWN2LT5yX3NnZTsKKwkJcmVjdi0+cl93ci5udW1fc2dlID0gUkRTX0lXX1JFQ1ZfU0dFOworCisJCXNnZSA9IHJkc19pd19kYXRhX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCQlzZ2UtPmFkZHIgPSAwOworCQlzZ2UtPmxlbmd0aCA9IFJEU19GUkFHX1NJWkU7CisJCXNnZS0+bGtleSA9IDA7CisKKwkJc2dlID0gcmRzX2l3X2hlYWRlcl9zZ2UoaWMsIHJlY3YtPnJfc2dlKTsKKwkJc2dlLT5hZGRyID0gaWMtPmlfcmVjdl9oZHJzX2RtYSArIChpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisJCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwkJc2dlLT5sa2V5ID0gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19yZWN2X2NsZWFyX29uZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLAorCQkJCSAgc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3YpCit7CisJaWYgKHJlY3YtPnJfaXdpbmMpIHsKKwkJcmRzX2luY19wdXQoJnJlY3YtPnJfaXdpbmMtPmlpX2luYyk7CisJCXJlY3YtPnJfaXdpbmMgPSBOVUxMOworCX0KKwlpZiAocmVjdi0+cl9mcmFnKSB7CisJCXJkc19pd19yZWN2X3VubWFwX3BhZ2UoaWMsIHJlY3YpOworCQlpZiAocmVjdi0+cl9mcmFnLT5mX3BhZ2UpCisJCQlyZHNfaXdfZnJhZ19kcm9wX3BhZ2UocmVjdi0+cl9mcmFnKTsKKwkJcmRzX2l3X2ZyYWdfZnJlZShyZWN2LT5yX2ZyYWcpOworCQlyZWN2LT5yX2ZyYWcgPSBOVUxMOworCX0KK30KKwordm9pZCByZHNfaXdfcmVjdl9jbGVhcl9yaW5nKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJdTMyIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaWMtPmlfcmVjdl9yaW5nLndfbnI7IGkrKykKKwkJcmRzX2l3X3JlY3ZfY2xlYXJfb25lKGljLCAmaWMtPmlfcmVjdnNbaV0pOworCisJaWYgKGljLT5pX2ZyYWcuZl9wYWdlKQorCQlyZHNfaXdfZnJhZ19kcm9wX3BhZ2UoJmljLT5pX2ZyYWcpOworfQorCitzdGF0aWMgaW50IHJkc19pd19yZWN2X3JlZmlsbF9vbmUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3YsCisJCQkJICBnZnBfdCBrcHRyX2dmcCwgZ2ZwX3QgcGFnZV9nZnApCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlzdHJ1Y3QgaWJfc2dlICpzZ2U7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwlpZiAocmVjdi0+cl9pd2luYyA9PSBOVUxMKSB7CisJCWlmIChhdG9taWNfcmVhZCgmcmRzX2l3X2FsbG9jYXRpb24pID49IHJkc19pd19zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbikgeworCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X2FsbG9jX2xpbWl0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXJlY3YtPnJfaXdpbmMgPSBrbWVtX2NhY2hlX2FsbG9jKHJkc19pd19pbmNvbWluZ19zbGFiLAorCQkJCQkJIGtwdHJfZ2ZwKTsKKwkJaWYgKHJlY3YtPnJfaXdpbmMgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlhdG9taWNfaW5jKCZyZHNfaXdfYWxsb2NhdGlvbik7CisJCUlOSVRfTElTVF9IRUFEKCZyZWN2LT5yX2l3aW5jLT5paV9mcmFncyk7CisJCXJkc19pbmNfaW5pdCgmcmVjdi0+cl9pd2luYy0+aWlfaW5jLCBjb25uLCBjb25uLT5jX2ZhZGRyKTsKKwl9CisKKwlpZiAocmVjdi0+cl9mcmFnID09IE5VTEwpIHsKKwkJcmVjdi0+cl9mcmFnID0ga21lbV9jYWNoZV9hbGxvYyhyZHNfaXdfZnJhZ19zbGFiLCBrcHRyX2dmcCk7CisJCWlmIChyZWN2LT5yX2ZyYWcgPT0gTlVMTCkKKwkJCWdvdG8gb3V0OworCQlJTklUX0xJU1RfSEVBRCgmcmVjdi0+cl9mcmFnLT5mX2l0ZW0pOworCQlyZWN2LT5yX2ZyYWctPmZfcGFnZSA9IE5VTEw7CisJfQorCisJaWYgKGljLT5pX2ZyYWcuZl9wYWdlID09IE5VTEwpIHsKKwkJaWMtPmlfZnJhZy5mX3BhZ2UgPSBhbGxvY19wYWdlKHBhZ2VfZ2ZwKTsKKwkJaWYgKGljLT5pX2ZyYWcuZl9wYWdlID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCA9IDA7CisJfQorCisJZG1hX2FkZHIgPSBpYl9kbWFfbWFwX3BhZ2UoaWMtPmlfY21faWQtPmRldmljZSwKKwkJCQkgIGljLT5pX2ZyYWcuZl9wYWdlLAorCQkJCSAgaWMtPmlfZnJhZy5mX29mZnNldCwKKwkJCQkgIFJEU19GUkFHX1NJWkUsCisJCQkJICBETUFfRlJPTV9ERVZJQ0UpOworCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcihpYy0+aV9jbV9pZC0+ZGV2aWNlLCBkbWFfYWRkcikpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBPbmNlIHdlIGdldCB0aGUgUkRTX1BBR0VfTEFTVF9PRkYgZnJhZyB0aGVuIHJkc19pd19mcmFnX3VubWFwKCkKKwkgKiBtdXN0IGJlIGNhbGxlZCBvbiB0aGlzIHJlY3YuICBUaGlzIGhhcHBlbnMgYXMgY29tcGxldGlvbnMgaGl0CisJICogaW4gb3JkZXIgb3Igb24gY29ubmVjdGlvbiBzaHV0ZG93bi4KKwkgKi8KKwlyZWN2LT5yX2ZyYWctPmZfcGFnZSA9IGljLT5pX2ZyYWcuZl9wYWdlOworCXJlY3YtPnJfZnJhZy0+Zl9vZmZzZXQgPSBpYy0+aV9mcmFnLmZfb2Zmc2V0OworCXJlY3YtPnJfZnJhZy0+Zl9tYXBwZWQgPSBkbWFfYWRkcjsKKworCXNnZSA9IHJkc19pd19kYXRhX3NnZShpYywgcmVjdi0+cl9zZ2UpOworCXNnZS0+YWRkciA9IGRtYV9hZGRyOworCXNnZS0+bGVuZ3RoID0gUkRTX0ZSQUdfU0laRTsKKworCXNnZSA9IHJkc19pd19oZWFkZXJfc2dlKGljLCByZWN2LT5yX3NnZSk7CisJc2dlLT5hZGRyID0gaWMtPmlfcmVjdl9oZHJzX2RtYSArIChyZWN2IC0gaWMtPmlfcmVjdnMpICogc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisKKwlnZXRfcGFnZShyZWN2LT5yX2ZyYWctPmZfcGFnZSk7CisKKwlpZiAoaWMtPmlfZnJhZy5mX29mZnNldCA8IFJEU19QQUdFX0xBU1RfT0ZGKSB7CisJCWljLT5pX2ZyYWcuZl9vZmZzZXQgKz0gUkRTX0ZSQUdfU0laRTsKKwl9IGVsc2UgeworCQlwdXRfcGFnZShpYy0+aV9mcmFnLmZfcGFnZSk7CisJCWljLT5pX2ZyYWcuZl9wYWdlID0gTlVMTDsKKwkJaWMtPmlfZnJhZy5mX29mZnNldCA9IDA7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhpcyB0cmllcyB0byBhbGxvY2F0ZSBhbmQgcG9zdCB1bnVzZWQgd29yayByZXF1ZXN0cyBhZnRlciBtYWtpbmcgc3VyZSB0aGF0CisgKiB0aGV5IGhhdmUgYWxsIHRoZSBhbGxvY2F0aW9ucyB0aGV5IG5lZWQgdG8gcXVldWUgcmVjZWl2ZWQgZnJhZ21lbnRzIGludG8KKyAqIHNvY2tldHMuICBUaGUgaV9yZWN2X211dGV4IGlzIGhlbGQgaGVyZSBzbyB0aGF0IHJpbmdfYWxsb2MgYW5kIF91bmFsbG9jCisgKiBwYWlycyBkb24ndCBnbyB1bm1hdGNoZWQuCisgKgorICogLTEgaXMgcmV0dXJuZWQgaWYgcG9zdGluZyBmYWlscyBkdWUgdG8gdGVtcG9yYXJ5IHJlc291cmNlIGV4aGF1c3Rpb24uCisgKi8KK2ludCByZHNfaXdfcmVjdl9yZWZpbGwoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBnZnBfdCBrcHRyX2dmcCwKKwkJICAgICAgIGdmcF90IHBhZ2VfZ2ZwLCBpbnQgcHJlZmlsbCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X3JlY3Zfd29yayAqcmVjdjsKKwlzdHJ1Y3QgaWJfcmVjdl93ciAqZmFpbGVkX3dyOworCXVuc2lnbmVkIGludCBwb3N0ZWQgPSAwOworCWludCByZXQgPSAwOworCXUzMiBwb3M7CisKKwl3aGlsZSAoKHByZWZpbGwgfHwgcmRzX2Nvbm5fdXAoY29ubikpCisJCQkmJiByZHNfaXdfcmluZ19hbGxvYygmaWMtPmlfcmVjdl9yaW5nLCAxLCAmcG9zKSkgeworCQlpZiAocG9zID49IGljLT5pX3JlY3ZfcmluZy53X25yKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkFyZ2ggLSByaW5nIGFsbG9jIHJldHVybmVkIHBvcz0ldVxuIiwKKwkJCQkJcG9zKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCXJlY3YgPSAmaWMtPmlfcmVjdnNbcG9zXTsKKwkJcmV0ID0gcmRzX2l3X3JlY3ZfcmVmaWxsX29uZShjb25uLCByZWN2LCBrcHRyX2dmcCwgcGFnZV9nZnApOworCQlpZiAocmV0KSB7CisJCQlyZXQgPSAtMTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogWFhYIHdoZW4gY2FuIHRoaXMgZmFpbD8gKi8KKwkJcmV0ID0gaWJfcG9zdF9yZWN2KGljLT5pX2NtX2lkLT5xcCwgJnJlY3YtPnJfd3IsICZmYWlsZWRfd3IpOworCQlyZHNkZWJ1ZygicmVjdiAlcCBpd2luYyAlcCBwYWdlICVwIGFkZHIgJWx1IHJldCAlZFxuIiwgcmVjdiwKKwkJCSByZWN2LT5yX2l3aW5jLCByZWN2LT5yX2ZyYWctPmZfcGFnZSwKKwkJCSAobG9uZykgcmVjdi0+cl9mcmFnLT5mX21hcHBlZCwgcmV0KTsKKwkJaWYgKHJldCkgeworCQkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgInJlY3YgcG9zdCBvbiAiCisJCQkgICAgICAgIiVwSTQgcmV0dXJuZWQgJWQsIGRpc2Nvbm5lY3RpbmcgYW5kICIKKwkJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLCAmY29ubi0+Y19mYWRkciwKKwkJCSAgICAgICByZXQpOworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCisJCXBvc3RlZCsrOworCX0KKworCS8qIFdlJ3JlIGRvaW5nIGZsb3cgY29udHJvbCAtIHVwZGF0ZSB0aGUgd2luZG93LiAqLworCWlmIChpYy0+aV9mbG93Y3RsICYmIHBvc3RlZCkKKwkJcmRzX2l3X2FkdmVydGlzZV9jcmVkaXRzKGNvbm4sIHBvc3RlZCk7CisKKwlpZiAocmV0KQorCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9yZWN2X3JpbmcsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2l3X2luY19wdXJnZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpCit7CisJc3RydWN0IHJkc19pd19pbmNvbWluZyAqaXdpbmM7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKnBvczsKKworCWl3aW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pd19pbmNvbWluZywgaWlfaW5jKTsKKwlyZHNkZWJ1ZygicHVyZ2luZyBpd2luYyAlcCBpbmMgJXBcbiIsIGl3aW5jLCBpbmMpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZyYWcsIHBvcywgJml3aW5jLT5paV9mcmFncywgZl9pdGVtKSB7CisJCWxpc3RfZGVsX2luaXQoJmZyYWctPmZfaXRlbSk7CisJCXJkc19pd19mcmFnX2Ryb3BfcGFnZShmcmFnKTsKKwkJcmRzX2l3X2ZyYWdfZnJlZShmcmFnKTsKKwl9Cit9CisKK3ZvaWQgcmRzX2l3X2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX2l3X2luY29taW5nICppd2luYzsKKworCWl3aW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pd19pbmNvbWluZywgaWlfaW5jKTsKKworCXJkc19pd19pbmNfcHVyZ2UoaW5jKTsKKwlyZHNkZWJ1ZygiZnJlZWluZyBpd2luYyAlcCBpbmMgJXBcbiIsIGl3aW5jLCBpbmMpOworCUJVR19PTighbGlzdF9lbXB0eSgmaXdpbmMtPmlpX2ZyYWdzKSk7CisJa21lbV9jYWNoZV9mcmVlKHJkc19pd19pbmNvbWluZ19zbGFiLCBpd2luYyk7CisJYXRvbWljX2RlYygmcmRzX2l3X2FsbG9jYXRpb24pOworCUJVR19PTihhdG9taWNfcmVhZCgmcmRzX2l3X2FsbG9jYXRpb24pIDwgMCk7Cit9CisKK2ludCByZHNfaXdfaW5jX2NvcHlfdG9fdXNlcihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCBpb3ZlYyAqZmlyc3RfaW92LAorCQkJICAgIHNpemVfdCBzaXplKQoreworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcgKml3aW5jOworCXN0cnVjdCByZHNfcGFnZV9mcmFnICpmcmFnOworCXN0cnVjdCBpb3ZlYyAqaW92ID0gZmlyc3RfaW92OworCXVuc2lnbmVkIGxvbmcgdG9fY29weTsKKwl1bnNpZ25lZCBsb25nIGZyYWdfb2ZmID0gMDsKKwl1bnNpZ25lZCBsb25nIGlvdl9vZmYgPSAwOworCWludCBjb3BpZWQgPSAwOworCWludCByZXQ7CisJdTMyIGxlbjsKKworCWl3aW5jID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19pd19pbmNvbWluZywgaWlfaW5jKTsKKwlmcmFnID0gbGlzdF9lbnRyeShpd2luYy0+aWlfZnJhZ3MubmV4dCwgc3RydWN0IHJkc19wYWdlX2ZyYWcsIGZfaXRlbSk7CisJbGVuID0gYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbik7CisKKwl3aGlsZSAoY29waWVkIDwgc2l6ZSAmJiBjb3BpZWQgPCBsZW4pIHsKKwkJaWYgKGZyYWdfb2ZmID09IFJEU19GUkFHX1NJWkUpIHsKKwkJCWZyYWcgPSBsaXN0X2VudHJ5KGZyYWctPmZfaXRlbS5uZXh0LAorCQkJCQkgIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCQkJZnJhZ19vZmYgPSAwOworCQl9CisJCXdoaWxlIChpb3Zfb2ZmID09IGlvdi0+aW92X2xlbikgeworCQkJaW92X29mZiA9IDA7CisJCQlpb3YrKzsKKwkJfQorCisJCXRvX2NvcHkgPSBtaW4oaW92LT5pb3ZfbGVuIC0gaW92X29mZiwgUkRTX0ZSQUdfU0laRSAtIGZyYWdfb2ZmKTsKKwkJdG9fY29weSA9IG1pbl90KHNpemVfdCwgdG9fY29weSwgc2l6ZSAtIGNvcGllZCk7CisJCXRvX2NvcHkgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB0b19jb3B5LCBsZW4gLSBjb3BpZWQpOworCisJCXJkc2RlYnVnKCIlbHUgYnl0ZXMgdG8gdXNlciBbJXAsICV6dV0gKyAlbHUgZnJvbSBmcmFnICIKKwkJCSAiWyVwLCAlbHVdICsgJWx1XG4iLAorCQkJIHRvX2NvcHksIGlvdi0+aW92X2Jhc2UsIGlvdi0+aW92X2xlbiwgaW92X29mZiwKKwkJCSBmcmFnLT5mX3BhZ2UsIGZyYWctPmZfb2Zmc2V0LCBmcmFnX29mZik7CisKKwkJLyogWFhYIG5lZWRzICsgb2Zmc2V0IGZvciBtdWx0aXBsZSByZWN2cyBwZXIgcGFnZSAqLworCQlyZXQgPSByZHNfcGFnZV9jb3B5X3RvX3VzZXIoZnJhZy0+Zl9wYWdlLAorCQkJCQkgICAgZnJhZy0+Zl9vZmZzZXQgKyBmcmFnX29mZiwKKwkJCQkJICAgIGlvdi0+aW92X2Jhc2UgKyBpb3Zfb2ZmLAorCQkJCQkgICAgdG9fY29weSk7CisJCWlmIChyZXQpIHsKKwkJCWNvcGllZCA9IHJldDsKKwkJCWJyZWFrOworCQl9CisKKwkJaW92X29mZiArPSB0b19jb3B5OworCQlmcmFnX29mZiArPSB0b19jb3B5OworCQljb3BpZWQgKz0gdG9fY29weTsKKwl9CisKKwlyZXR1cm4gY29waWVkOworfQorCisvKiBpYyBzdGFydHMgb3V0IGt6YWxsb2MoKWVkICovCit2b2lkIHJkc19pd19yZWN2X2luaXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJc3RydWN0IGliX3NlbmRfd3IgKndyID0gJmljLT5pX2Fja193cjsKKwlzdHJ1Y3QgaWJfc2dlICpzZ2UgPSAmaWMtPmlfYWNrX3NnZTsKKworCXNnZS0+YWRkciA9IGljLT5pX2Fja19kbWE7CisJc2dlLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCXNnZS0+bGtleSA9IHJkc19pd19sb2NhbF9kbWFfbGtleShpYyk7CisKKwl3ci0+c2dfbGlzdCA9IHNnZTsKKwl3ci0+bnVtX3NnZSA9IDE7CisJd3ItPm9wY29kZSA9IElCX1dSX1NFTkQ7CisJd3ItPndyX2lkID0gUkRTX0lXX0FDS19XUl9JRDsKKwl3ci0+c2VuZF9mbGFncyA9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKK30KKworLyoKKyAqIFlvdSdkIHRoaW5rIHRoYXQgd2l0aCByZWxpYWJsZSBJQiBjb25uZWN0aW9ucyB5b3Ugd291bGRuJ3QgbmVlZCB0byBhY2sKKyAqIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkLiAgVGhlIHByb2JsZW0gaXMgdGhhdCBJQiBoYXJkd2FyZSBnZW5lcmF0ZXMKKyAqIGFuIGFjayBtZXNzYWdlIGJlZm9yZSBpdCBoYXMgRE1BZWQgdGhlIG1lc3NhZ2UgaW50byBtZW1vcnkuICBUaGlzIGNyZWF0ZXMgYQorICogcG90ZW50aWFsIG1lc3NhZ2UgbG9zcyBpZiB0aGUgSENBIGlzIGRpc2FibGVkIGZvciBhbnkgcmVhc29uIGJldHdlZW4gd2hlbiBpdAorICogc2VuZHMgdGhlIGFjayBhbmQgYmVmb3JlIHRoZSBtZXNzYWdlIGlzIERNQWVkIGFuZCBwcm9jZXNzZWQuICBUaGlzIGlzIG9ubHkgYQorICogcG90ZW50aWFsIGlzc3VlIGlmIGFub3RoZXIgSENBIGlzIGF2YWlsYWJsZSBmb3IgZmFpbC1vdmVyLgorICoKKyAqIFdoZW4gdGhlIHJlbW90ZSBob3N0IHJlY2VpdmVzIG91ciBhY2sgdGhleSdsbCBmcmVlIHRoZSBzZW50IG1lc3NhZ2UgZnJvbQorICogdGhlaXIgc2VuZCBxdWV1ZS4gIFRvIGRlY3JlYXNlIHRoZSBsYXRlbmN5IG9mIHRoaXMgd2UgYWx3YXlzIHNlbmQgYW4gYWNrCisgKiBpbW1lZGlhdGVseSBhZnRlciB3ZSd2ZSByZWNlaXZlZCBtZXNzYWdlcy4KKyAqCisgKiBGb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBoYXZlIG9uZSBhY2sgaW4gZmxpZ2h0IGF0IGEgdGltZS4gIFRoaXMgcHV0cworICogcHJlc3N1cmUgb24gc2VuZGVycyB0byBoYXZlIGRlZXAgZW5vdWdoIHNlbmQgcXVldWVzIHRvIGFic29yYiB0aGUgbGF0ZW5jeSBvZgorICogYSBzaW5nbGUgYWNrIGZyYW1lIGJlaW5nIGluIGZsaWdodC4gIFRoaXMgbWlnaHQgbm90IGJlIGdvb2QgZW5vdWdoLgorICoKKyAqIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgaGF2ZSBhIGxvbmctbGl2ZWQgc2VuZF93ciBhbmQgc2dlIHdoaWNoIHBvaW50IHRvIGEKKyAqIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFjayBmcmFtZS4gIFRoaXMgYWNrIHdyIGRvZXMgbm90IGZhbGwgdW5kZXIgdGhlIHJpbmcKKyAqIGFjY291bnRpbmcgdGhhdCB0aGUgdHggYW5kIHJ4IHdycyBkby4gIFRoZSBRUCBhdHRyaWJ1dGUgc3BlY2lmaWNhbGx5IG1ha2VzCisgKiByb29tIGZvciBpdCBiZXlvbmQgdGhlIHJpbmcgc2l6ZS4gIFNlbmQgY29tcGxldGlvbiBub3RpY2VzIGl0cyBzcGVjaWFsCisgKiB3cl9pZCBhbmQgYXZvaWRzIHdvcmtpbmcgd2l0aCB0aGUgcmluZyBpbiB0aGF0IGNhc2UuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19pd19zZXRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsIHU2NCBzZXEsCisJCQkJaW50IGFja19yZXF1aXJlZCkKK3sKKwlyZHNfaXdfc2V0XzY0Yml0KCZpYy0+aV9hY2tfbmV4dCwgc2VxKTsKKwlpZiAoYWNrX3JlcXVpcmVkKSB7CisJCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworCX0KK30KKworc3RhdGljIHU2NCByZHNfaXdfZ2V0X2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCisJcmV0dXJuIGljLT5pX2Fja19uZXh0OworfQorCitzdGF0aWMgdm9pZCByZHNfaXdfc2VuZF9hY2soc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywgdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzKQoreworCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSBpYy0+aV9hY2s7CisJc3RydWN0IGliX3NlbmRfd3IgKmZhaWxlZF93cjsKKwl1NjQgc2VxOworCWludCByZXQ7CisKKwlzZXEgPSByZHNfaXdfZ2V0X2FjayhpYyk7CisKKwlyZHNkZWJ1Zygic2VuZF9hY2s6IGljICVwIGFjayAlbGx1XG4iLCBpYywgKHVuc2lnbmVkIGxvbmcgbG9uZykgc2VxKTsKKwlyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoaGRyLCAwLCAwLCAwKTsKKwloZHItPmhfYWNrID0gY3B1X3RvX2JlNjQoc2VxKTsKKwloZHItPmhfY3JlZGl0ID0gYWR2X2NyZWRpdHM7CisJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bShoZHIpOworCWljLT5pX2Fja19xdWV1ZWQgPSBqaWZmaWVzOworCisJcmV0ID0gaWJfcG9zdF9zZW5kKGljLT5pX2NtX2lkLT5xcCwgJmljLT5pX2Fja193ciwgJmZhaWxlZF93cik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJLyogRmFpbGVkIHRvIHNlbmQuIFJlbGVhc2UgdGhlIFdSLCBhbmQKKwkJICogZm9yY2UgYW5vdGhlciBBQ0suCisJCSAqLworCQljbGVhcl9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncyk7CisJCXNldF9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncyk7CisKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Fja19zZW5kX2ZhaWx1cmUpOworCQkvKiBOZWVkIHRvIGZpbmVzc2UgdGhpcyBsYXRlci4gKi8KKwkJQlVHKCk7CisJfSBlbHNlCisJCXJkc19pd19zdGF0c19pbmMoc19pd19hY2tfc2VudCk7Cit9CisKKy8qCisgKiBUaGVyZSBhcmUgMyB3YXlzIG9mIGdldHRpbmcgYWNrbm93bGVkZ2VtZW50cyB0byB0aGUgcGVlcjoKKyAqICAxLglXZSBjYWxsIHJkc19pd19hdHRlbXB0X2FjayBmcm9tIHRoZSByZWN2IGNvbXBsZXRpb24gaGFuZGxlcgorICoJdG8gc2VuZCBhbiBBQ0stb25seSBmcmFtZS4KKyAqCUhvd2V2ZXIsIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBzdWNoIGZyYW1lIGluIHRoZSBzZW5kIHF1ZXVlCisgKglhdCBhbnkgdGltZSwgc28gd2UgbWF5IGhhdmUgdG8gcG9zdHBvbmUgaXQuCisgKiAgMi4JV2hlbiBhbm90aGVyIChkYXRhKSBwYWNrZXQgaXMgdHJhbnNtaXR0ZWQgd2hpbGUgdGhlcmUncworICoJYW4gQUNLIGluIHRoZSBxdWV1ZSwgd2UgcGlnZ3liYWNrIHRoZSBBQ0sgc2VxdWVuY2UgbnVtYmVyCisgKglvbiB0aGUgZGF0YSBwYWNrZXQuCisgKiAgMy4JSWYgdGhlIEFDSyBXUiBpcyBkb25lIHNlbmRpbmcsIHdlIGdldCBjYWxsZWQgZnJvbSB0aGUKKyAqCXNlbmQgcXVldWUgY29tcGxldGlvbiBoYW5kbGVyLCBhbmQgY2hlY2sgd2hldGhlciB0aGVyZSdzCisgKglhbm90aGVyIEFDSyBwZW5kaW5nIChwb3N0cG9uZWQgYmVjYXVzZSB0aGUgV1Igd2FzIG9uIHRoZQorICoJcXVldWUpLiBJZiBzbywgd2UgdHJhbnNtaXQgaXQuCisgKgorICogV2UgbWFpbnRhaW4gMiB2YXJpYWJsZXM6CisgKiAgLQlpX2Fja19mbGFncywgd2hpY2gga2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgQUNLIFdSCisgKglpcyBjdXJyZW50bHkgaW4gdGhlIHNlbmQgcXVldWUgb3Igbm90IChJQl9BQ0tfSU5fRkxJR0hUKQorICogIC0JaV9hY2tfbmV4dCwgd2hpY2ggaXMgdGhlIGxhc3Qgc2VxdWVuY2UgbnVtYmVyIHdlIHJlY2VpdmVkCisgKgorICogUG90ZW50aWFsbHksIHNlbmQgcXVldWUgYW5kIHJlY2VpdmUgcXVldWUgaGFuZGxlcnMgY2FuIHJ1biBjb25jdXJyZW50bHkuCisgKgorICogUmVjb25uZWN0aW5nIGNvbXBsaWNhdGVzIHRoaXMgcGljdHVyZSBqdXN0IHNsaWdodGx5LiBXaGVuIHdlCisgKiByZWNvbm5lY3QsIHdlIG1heSBiZSBzZWVpbmcgZHVwbGljYXRlIHBhY2tldHMuIFRoZSBwZWVyCisgKiBpcyByZXRyYW5zbWl0dGluZyB0aGVtLCBiZWNhdXNlIGl0IGhhc24ndCBzZWVuIGFuIEFDSyBmb3IKKyAqIHRoZW0uIEl0IGlzIGltcG9ydGFudCB0aGF0IHdlIEFDSyB0aGVzZS4KKyAqCisgKiBBQ0sgbWl0aWdhdGlvbiBhZGRzIGEgaGVhZGVyIGZsYWcgIkFDS19SRVFVSVJFRCI7IGFueSBwYWNrZXQgd2l0aAorICogdGhpcyBmbGFnIHNldCAqTVVTVCogYmUgYWNrbm93bGVkZ2VkIGltbWVkaWF0ZWx5LgorICovCisKKy8qCisgKiBXaGVuIHdlIGdldCBoZXJlLCB3ZSdyZSBjYWxsZWQgZnJvbSB0aGUgcmVjdiBxdWV1ZSBoYW5kbGVyLgorICogQ2hlY2sgd2hldGhlciB3ZSBvdWdodCB0byB0cmFuc21pdCBhbiBBQ0suCisgKi8KK3ZvaWQgcmRzX2l3X2F0dGVtcHRfYWNrKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMpCit7CisJdW5zaWduZWQgaW50IGFkdl9jcmVkaXRzOworCisJaWYgKCF0ZXN0X2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKSkKKwkJcmV0dXJuOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoSUJfQUNLX0lOX0ZMSUdIVCwgJmljLT5pX2Fja19mbGFncykpIHsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X2Fja19zZW5kX2RlbGF5ZWQpOworCQlyZXR1cm47CisJfQorCisJLyogQ2FuIHdlIGdldCBhIHNlbmQgY3JlZGl0PyAqLworCWlmICghcmRzX2l3X3NlbmRfZ3JhYl9jcmVkaXRzKGljLCAxLCAmYWR2X2NyZWRpdHMsIDApKSB7CisJCXJkc19pd19zdGF0c19pbmMoc19pd190eF90aHJvdHRsZSk7CisJCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCWNsZWFyX2JpdChJQl9BQ0tfUkVRVUVTVEVELCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaXdfc2VuZF9hY2soaWMsIGFkdl9jcmVkaXRzKTsKK30KKworLyoKKyAqIFdlIGdldCBoZXJlIGZyb20gdGhlIHNlbmQgY29tcGxldGlvbiBoYW5kbGVyLCB3aGVuIHRoZQorICogYWRhcHRlciB0ZWxscyB1cyB0aGUgQUNLIGZyYW1lIHdhcyBzZW50LgorICovCit2b2lkIHJkc19pd19hY2tfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCWNsZWFyX2JpdChJQl9BQ0tfSU5fRkxJR0hULCAmaWMtPmlfYWNrX2ZsYWdzKTsKKwlyZHNfaXdfYXR0ZW1wdF9hY2soaWMpOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIHJlZ3VsYXIgeG1pdCBjb2RlIHdoZW4gaXQgd2FudHMgdG8gcGlnZ3liYWNrCisgKiBhbiBBQ0sgb24gYW4gb3V0Z29pbmcgZnJhbWUuCisgKi8KK3U2NCByZHNfaXdfcGlnZ3liX2FjayhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUJfQUNLX1JFUVVFU1RFRCwgJmljLT5pX2Fja19mbGFncykpCisJCXJkc19pd19zdGF0c19pbmMoc19pd19hY2tfc2VuZF9waWdneWJhY2tlZCk7CisJcmV0dXJuIHJkc19pd19nZXRfYWNrKGljKTsKK30KKworLyoKKyAqIEl0J3Mga2luZCBvZiBsYW1lIHRoYXQgd2UncmUgY29weWluZyBmcm9tIHRoZSBwb3N0ZWQgcmVjZWl2ZSBwYWdlcyBpbnRvCisgKiBsb25nLWxpdmVkIGJpdG1hcHMuICBXZSBjb3VsZCBoYXZlIHBvc3RlZCB0aGUgYml0bWFwcyBhbmQgcmRtYSB3cml0dGVuIGludG8KKyAqIHRoZW0uICBCdXQgcmVjZWl2aW5nIG5ldyBjb25nZXN0aW9uIGJpdG1hcHMgc2hvdWxkIGJlIGEgKnJhcmUqIGV2ZW50LCBzbworICogaG9wZWZ1bGx5IHdlIHdvbid0IG5lZWQgdG8gaW52ZXN0IHRoYXQgY29tcGxleGl0eSBpbiBtYWtpbmcgaXQgbW9yZQorICogZWZmaWNpZW50LiAgQnkgY29weWluZyB3ZSBjYW4gc2hhcmUgYSBzaW1wbGVyIGNvcmUgd2l0aCBUQ1Agd2hpY2ggaGFzIHRvCisgKiBjb3B5LgorICovCitzdGF0aWMgdm9pZCByZHNfaXdfY29uZ19yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCSAgICAgIHN0cnVjdCByZHNfaXdfaW5jb21pbmcgKml3aW5jKQoreworCXN0cnVjdCByZHNfY29uZ19tYXAgKm1hcDsKKwl1bnNpZ25lZCBpbnQgbWFwX29mZjsKKwl1bnNpZ25lZCBpbnQgbWFwX3BhZ2U7CisJc3RydWN0IHJkc19wYWdlX2ZyYWcgKmZyYWc7CisJdW5zaWduZWQgbG9uZyBmcmFnX29mZjsKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyBjb3BpZWQ7CisJdWludDY0X3QgdW5jb25nZXN0ZWQgPSAwOworCXZvaWQgKmFkZHI7CisKKwkvKiBjYXRjaCBjb21wbGV0ZWx5IGNvcnJ1cHQgcGFja2V0cyAqLworCWlmIChiZTMyX3RvX2NwdShpd2luYy0+aWlfaW5jLmlfaGRyLmhfbGVuKSAhPSBSRFNfQ09OR19NQVBfQllURVMpCisJCXJldHVybjsKKworCW1hcCA9IGNvbm4tPmNfZmNvbmc7CisJbWFwX3BhZ2UgPSAwOworCW1hcF9vZmYgPSAwOworCisJZnJhZyA9IGxpc3RfZW50cnkoaXdpbmMtPmlpX2ZyYWdzLm5leHQsIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCWZyYWdfb2ZmID0gMDsKKworCWNvcGllZCA9IDA7CisKKwl3aGlsZSAoY29waWVkIDwgUkRTX0NPTkdfTUFQX0JZVEVTKSB7CisJCXVpbnQ2NF90ICpzcmMsICpkc3Q7CisJCXVuc2lnbmVkIGludCBrOworCisJCXRvX2NvcHkgPSBtaW4oUkRTX0ZSQUdfU0laRSAtIGZyYWdfb2ZmLCBQQUdFX1NJWkUgLSBtYXBfb2ZmKTsKKwkJQlVHX09OKHRvX2NvcHkgJiA3KTsgLyogTXVzdCBiZSA2NGJpdCBhbGlnbmVkLiAqLworCisJCWFkZHIgPSBrbWFwX2F0b21pYyhmcmFnLT5mX3BhZ2UsIEtNX1NPRlRJUlEwKTsKKworCQlzcmMgPSBhZGRyICsgZnJhZ19vZmY7CisJCWRzdCA9ICh2b2lkICopbWFwLT5tX3BhZ2VfYWRkcnNbbWFwX3BhZ2VdICsgbWFwX29mZjsKKwkJZm9yIChrID0gMDsgayA8IHRvX2NvcHk7IGsgKz0gOCkgeworCQkJLyogUmVjb3JkIHBvcnRzIHRoYXQgYmVjYW1lIHVuY29uZ2VzdGVkLCBpZQorCQkJICogYml0cyB0aGF0IGNoYW5nZWQgZnJvbSAwIHRvIDEuICovCisJCQl1bmNvbmdlc3RlZCB8PSB+KCpzcmMpICYgKmRzdDsKKwkJCSpkc3QrKyA9ICpzcmMrKzsKKwkJfQorCQlrdW5tYXBfYXRvbWljKGFkZHIsIEtNX1NPRlRJUlEwKTsKKworCQljb3BpZWQgKz0gdG9fY29weTsKKworCQltYXBfb2ZmICs9IHRvX2NvcHk7CisJCWlmIChtYXBfb2ZmID09IFBBR0VfU0laRSkgeworCQkJbWFwX29mZiA9IDA7CisJCQltYXBfcGFnZSsrOworCQl9CisKKwkJZnJhZ19vZmYgKz0gdG9fY29weTsKKwkJaWYgKGZyYWdfb2ZmID09IFJEU19GUkFHX1NJWkUpIHsKKwkJCWZyYWcgPSBsaXN0X2VudHJ5KGZyYWctPmZfaXRlbS5uZXh0LAorCQkJCQkgIHN0cnVjdCByZHNfcGFnZV9mcmFnLCBmX2l0ZW0pOworCQkJZnJhZ19vZmYgPSAwOworCQl9CisJfQorCisJLyogdGhlIGNvbmdlc3Rpb24gbWFwIGlzIGluIGxpdHRsZSBlbmRpYW4gb3JkZXIgKi8KKwl1bmNvbmdlc3RlZCA9IGxlNjRfdG9fY3B1KHVuY29uZ2VzdGVkKTsKKworCXJkc19jb25nX21hcF91cGRhdGVkKG1hcCwgdW5jb25nZXN0ZWQpOworfQorCisvKgorICogUmluZ3MgYXJlIHBvc3RlZCB3aXRoIGFsbCB0aGUgYWxsb2NhdGlvbnMgdGhleSdsbCBuZWVkIHRvIHF1ZXVlIHRoZQorICogaW5jb21pbmcgbWVzc2FnZSB0byB0aGUgcmVjZWl2aW5nIHNvY2tldCBzbyB0aGlzIGNhbid0IGZhaWwuCisgKiBBbGwgZnJhZ21lbnRzIHN0YXJ0IHdpdGggYSBoZWFkZXIsIHNvIHdlIGNhbiBtYWtlIHN1cmUgd2UncmUgbm90IHJlY2VpdmluZworICogZ2FyYmFnZSwgYW5kIHdlIGNhbiB0ZWxsIGEgc21hbGwgOCBieXRlIGZyYWdtZW50IGZyb20gYW4gQUNLIGZyYW1lLgorICovCitzdHJ1Y3QgcmRzX2l3X2Fja19zdGF0ZSB7CisJdTY0CQlhY2tfbmV4dDsKKwl1NjQJCWFja19yZWN2OworCXVuc2lnbmVkIGludAlhY2tfcmVxdWlyZWQ6MTsKKwl1bnNpZ25lZCBpbnQJYWNrX25leHRfdmFsaWQ6MTsKKwl1bnNpZ25lZCBpbnQJYWNrX3JlY3ZfdmFsaWQ6MTsKK307CisKK3N0YXRpYyB2b2lkIHJkc19pd19wcm9jZXNzX3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCXN0cnVjdCByZHNfaXdfcmVjdl93b3JrICpyZWN2LCB1MzIgYnl0ZV9sZW4sCisJCQkJc3RydWN0IHJkc19pd19hY2tfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCByZHNfaXdfaW5jb21pbmcgKml3aW5jID0gaWMtPmlfaXdpbmM7CisJc3RydWN0IHJkc19oZWFkZXIgKmloZHIsICpoZHI7CisKKwkvKiBYWFggc2h1dCBkb3duIHRoZSBjb25uZWN0aW9uIGlmIHBvcnQgMCwwIGFyZSBzZWVuPyAqLworCisJcmRzZGVidWcoImljICVwIGl3aW5jICVwIHJlY3YgJXAgYnl0ZSBsZW4gJXVcbiIsIGljLCBpd2luYywgcmVjdiwKKwkJIGJ5dGVfbGVuKTsKKworCWlmIChieXRlX2xlbiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpIHsKKwkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwgImluY29taW5nIG1lc3NhZ2UgIgorCQkgICAgICAgImZyb20gJXBJNCBkaWRuJ3QgaW5jbHVlIGEgIgorCQkgICAgICAgImhlYWRlciwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkgICAgICAgInJlY29ubmVjdGluZ1xuIiwKKwkJICAgICAgICZjb25uLT5jX2ZhZGRyKTsKKwkJcmV0dXJuOworCX0KKwlieXRlX2xlbiAtPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCisJaWhkciA9ICZpYy0+aV9yZWN2X2hkcnNbcmVjdiAtIGljLT5pX3JlY3ZzXTsKKworCS8qIFZhbGlkYXRlIHRoZSBjaGVja3N1bS4gKi8KKwlpZiAoIXJkc19tZXNzYWdlX3ZlcmlmeV9jaGVja3N1bShpaGRyKSkgeworCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAiaW5jb21pbmcgbWVzc2FnZSAiCisJCSAgICAgICAiZnJvbSAlcEk0IGhhcyBjb3JydXB0ZWQgaGVhZGVyIC0gIgorCQkgICAgICAgImZvcmNpbmcgYSByZWNvbm5lY3RcbiIsCisJCSAgICAgICAmY29ubi0+Y19mYWRkcik7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X2Ryb3BfYmFkX2NoZWNrc3VtKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFByb2Nlc3MgdGhlIEFDSyBzZXF1ZW5jZSB3aGljaCBjb21lcyB3aXRoIGV2ZXJ5IHBhY2tldCAqLworCXN0YXRlLT5hY2tfcmVjdiA9IGJlNjRfdG9fY3B1KGloZHItPmhfYWNrKTsKKwlzdGF0ZS0+YWNrX3JlY3ZfdmFsaWQgPSAxOworCisJLyogUHJvY2VzcyB0aGUgY3JlZGl0cyB1cGRhdGUgaWYgdGhlcmUgd2FzIG9uZSAqLworCWlmIChpaGRyLT5oX2NyZWRpdCkKKwkJcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgaWhkci0+aF9jcmVkaXQpOworCisJaWYgKGloZHItPmhfc3BvcnQgPT0gMCAmJiBpaGRyLT5oX2Rwb3J0ID09IDAgJiYgYnl0ZV9sZW4gPT0gMCkgeworCQkvKiBUaGlzIGlzIGFuIEFDSy1vbmx5IHBhY2tldC4gVGhlIGZhY3QgdGhhdCBpdCBnZXRzCisJCSAqIHNwZWNpYWwgdHJlYXRtZW50IGhlcmUgaXMgdGhhdCBoaXN0b3JpY2FsbHksIEFDS3MKKwkJICogd2VyZSByYXRoZXIgc3BlY2lhbCBiZWFzdHMuCisJCSAqLworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfYWNrX3JlY2VpdmVkKTsKKworCQkvKgorCQkgKiBVc3VhbGx5IHRoZSBmcmFncyBtYWtlIHRoZWlyIHdheSBvbiB0byBpbmNzIGFuZCBhcmUgdGhlbiBmcmVlZCBhcworCQkgKiB0aGUgaW5jIGlzIGZyZWVkLiAgV2UgZG9uJ3QgZ28gdGhhdCByb3V0ZSwgc28gd2UgaGF2ZSB0byBkcm9wIHRoZQorCQkgKiBwYWdlIHJlZiBvdXJzZWx2ZXMuICBXZSBjYW4ndCBqdXN0IGxlYXZlIHRoZSBwYWdlIG9uIHRoZSByZWN2CisJCSAqIGJlY2F1c2UgdGhhdCBjb25mdXNlcyB0aGUgZG1hIG1hcHBpbmcgb2YgcGFnZXMgYW5kIGVhY2ggcmVjdidzIHVzZQorCQkgKiBvZiBhIHBhcnRpYWwgcGFnZS4gIFdlIGNhbiBsZWF2ZSB0aGUgZnJhZywgdGhvdWdoLCBpdCB3aWxsIGJlCisJCSAqIHJldXNlZC4KKwkJICoKKwkJICogRklYTUU6IEZvbGQgdGhpcyBpbnRvIHRoZSBjb2RlIHBhdGggYmVsb3cuCisJCSAqLworCQlyZHNfaXdfZnJhZ19kcm9wX3BhZ2UocmVjdi0+cl9mcmFnKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGluYyBvbiB0aGUgY29ubmVjdGlvbiB0aGVuIHRoaXMKKwkgKiBmcmFnbWVudCBoYXMgYSBoZWFkZXIgYW5kIHN0YXJ0cyBhIG1lc3NhZ2UuLiBjb3B5IGl0cyBoZWFkZXIKKwkgKiBpbnRvIHRoZSBpbmMgYW5kIHNhdmUgdGhlIGluYyBzbyB3ZSBjYW4gaGFuZyB1cGNvbWluZyBmcmFnbWVudHMKKwkgKiBvZmYgaXRzIGxpc3QuCisJICovCisJaWYgKGl3aW5jID09IE5VTEwpIHsKKwkJaXdpbmMgPSByZWN2LT5yX2l3aW5jOworCQlyZWN2LT5yX2l3aW5jID0gTlVMTDsKKwkJaWMtPmlfaXdpbmMgPSBpd2luYzsKKworCQloZHIgPSAmaXdpbmMtPmlpX2luYy5pX2hkcjsKKwkJbWVtY3B5KGhkciwgaWhkciwgc2l6ZW9mKCpoZHIpKTsKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSA9IGJlMzJfdG9fY3B1KGhkci0+aF9sZW4pOworCisJCXJkc2RlYnVnKCJpYyAlcCBpd2luYyAlcCByZW0gJXUgZmxhZyAweCV4XG4iLCBpYywgaXdpbmMsCisJCQkgaWMtPmlfcmVjdl9kYXRhX3JlbSwgaGRyLT5oX2ZsYWdzKTsKKwl9IGVsc2UgeworCQloZHIgPSAmaXdpbmMtPmlpX2luYy5pX2hkcjsKKwkJLyogV2UgY2FuJ3QganVzdCB1c2UgbWVtY21wIGhlcmU7IGZyYWdtZW50cyBvZiBhCisJCSAqIHNpbmdsZSBtZXNzYWdlIG1heSBjYXJyeSBkaWZmZXJlbnQgQUNLcyAqLworCQlpZiAoaGRyLT5oX3NlcXVlbmNlICE9IGloZHItPmhfc2VxdWVuY2UKKwkJIHx8IGhkci0+aF9sZW4gIT0gaWhkci0+aF9sZW4KKwkJIHx8IGhkci0+aF9zcG9ydCAhPSBpaGRyLT5oX3Nwb3J0CisJCSB8fCBoZHItPmhfZHBvcnQgIT0gaWhkci0+aF9kcG9ydCkgeworCQkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkiZnJhZ21lbnQgaGVhZGVyIG1pc21hdGNoOyBmb3JjaW5nIHJlY29ubmVjdFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlsaXN0X2FkZF90YWlsKCZyZWN2LT5yX2ZyYWctPmZfaXRlbSwgJml3aW5jLT5paV9mcmFncyk7CisJcmVjdi0+cl9mcmFnID0gTlVMTDsKKworCWlmIChpYy0+aV9yZWN2X2RhdGFfcmVtID4gUkRTX0ZSQUdfU0laRSkKKwkJaWMtPmlfcmVjdl9kYXRhX3JlbSAtPSBSRFNfRlJBR19TSVpFOworCWVsc2UgeworCQlpYy0+aV9yZWN2X2RhdGFfcmVtID0gMDsKKwkJaWMtPmlfaXdpbmMgPSBOVUxMOworCisJCWlmIChpd2luYy0+aWlfaW5jLmlfaGRyLmhfZmxhZ3MgPT0gUkRTX0ZMQUdfQ09OR19CSVRNQVApCisJCQlyZHNfaXdfY29uZ19yZWN2KGNvbm4sIGl3aW5jKTsKKwkJZWxzZSB7CisJCQlyZHNfcmVjdl9pbmNvbWluZyhjb25uLCBjb25uLT5jX2ZhZGRyLCBjb25uLT5jX2xhZGRyLAorCQkJCQkgICZpd2luYy0+aWlfaW5jLCBHRlBfQVRPTUlDLAorCQkJCQkgIEtNX1NPRlRJUlEwKTsKKwkJCXN0YXRlLT5hY2tfbmV4dCA9IGJlNjRfdG9fY3B1KGhkci0+aF9zZXF1ZW5jZSk7CisJCQlzdGF0ZS0+YWNrX25leHRfdmFsaWQgPSAxOworCQl9CisKKwkJLyogRXZhbHVhdGUgdGhlIEFDS19SRVFVSVJFRCBmbGFnICphZnRlciogd2UgcmVjZWl2ZWQKKwkJICogdGhlIGNvbXBsZXRlIGZyYW1lLCBhbmQgYWZ0ZXIgYnVtcGluZyB0aGUgbmV4dF9yeAorCQkgKiBzZXF1ZW5jZS4gKi8KKwkJaWYgKGhkci0+aF9mbGFncyAmIFJEU19GTEFHX0FDS19SRVFVSVJFRCkgeworCQkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfYWNrX3JlcXVpcmVkKTsKKwkJCXN0YXRlLT5hY2tfcmVxdWlyZWQgPSAxOworCQl9CisKKwkJcmRzX2luY19wdXQoJml3aW5jLT5paV9pbmMpOworCX0KK30KKworLyoKKyAqIFBsdWNraW5nIHRoZSBvbGRlc3QgZW50cnkgZnJvbSB0aGUgcmluZyBjYW4gYmUgZG9uZSBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIHRocmVhZCByZWZpbGxpbmcgdGhlIHJpbmcuICBFYWNoIHJpbmcgb3BlcmF0aW9uIGlzIHByb3RlY3RlZCBieQorICogc3BpbmxvY2tzIGFuZCB0aGUgdHJhbnNpZW50IHN0YXRlIG9mIHJlZmlsbGluZyBkb2Vzbid0IGNoYW5nZSB0aGUKKyAqIHJlY29yZGluZyBvZiB3aGljaCBlbnRyeSBpcyBvbGRlc3QuCisgKgorICogVGhpcyByZWxpZXMgb24gSUIgb25seSBjYWxsaW5nIG9uZSBjcSBjb21wX2hhbmRsZXIgZm9yIGVhY2ggY3Egc28gdGhhdAorICogdGhlcmUgd2lsbCBvbmx5IGJlIG9uZSBjYWxsZXIgb2YgcmRzX3JlY3ZfaW5jb21pbmcoKSBwZXIgUkRTIGNvbm5lY3Rpb24uCisgKi8KK3ZvaWQgcmRzX2l3X3JlY3ZfY3FfY29tcF9oYW5kbGVyKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY29udGV4dDsKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgaWJfd2Mgd2M7CisJc3RydWN0IHJkc19pd19hY2tfc3RhdGUgc3RhdGUgPSB7IDAsIH07CisJc3RydWN0IHJkc19pd19yZWN2X3dvcmsgKnJlY3Y7CisKKwlyZHNkZWJ1ZygiY29ubiAlcCBjcSAlcFxuIiwgY29ubiwgY3EpOworCisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X2NxX2NhbGwpOworCisJaWJfcmVxX25vdGlmeV9jcShjcSwgSUJfQ1FfU09MSUNJVEVEKTsKKworCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgeworCQlyZHNkZWJ1Zygid2Mgd3JfaWQgMHglbGx4IHN0YXR1cyAldSBieXRlX2xlbiAldSBpbW1fZGF0YSAldVxuIiwKKwkJCSAodW5zaWduZWQgbG9uZyBsb25nKXdjLndyX2lkLCB3Yy5zdGF0dXMsIHdjLmJ5dGVfbGVuLAorCQkJIGJlMzJfdG9fY3B1KHdjLmV4LmltbV9kYXRhKSk7CisJCXJkc19pd19zdGF0c19pbmMoc19pd19yeF9jcV9ldmVudCk7CisKKwkJcmVjdiA9ICZpYy0+aV9yZWN2c1tyZHNfaXdfcmluZ19vbGRlc3QoJmljLT5pX3JlY3ZfcmluZyldOworCisJCXJkc19pd19yZWN2X3VubWFwX3BhZ2UoaWMsIHJlY3YpOworCisJCS8qCisJCSAqIEFsc28gcHJvY2VzcyByZWN2cyBpbiBjb25uZWN0aW5nIHN0YXRlIGJlY2F1c2UgaXQgaXMgcG9zc2libGUKKwkJICogdG8gZ2V0IGEgcmVjdiBjb21wbGV0aW9uIF9iZWZvcmVfIHRoZSByZG1hY20gRVNUQUJMSVNIRUQKKwkJICogZXZlbnQgaXMgcHJvY2Vzc2VkLgorCQkgKi8KKwkJaWYgKHJkc19jb25uX3VwKGNvbm4pIHx8IHJkc19jb25uX2Nvbm5lY3RpbmcoY29ubikpIHsKKwkJCS8qIFdlIGV4cGVjdCBlcnJvcnMgYXMgdGhlIHFwIGlzIGRyYWluZWQgZHVyaW5nIHNodXRkb3duICovCisJCQlpZiAod2Muc3RhdHVzID09IElCX1dDX1NVQ0NFU1MpIHsKKwkJCQlyZHNfaXdfcHJvY2Vzc19yZWN2KGNvbm4sIHJlY3YsIHdjLmJ5dGVfbGVuLCAmc3RhdGUpOworCQkJfSBlbHNlIHsKKwkJCQlyZHNfaXdfY29ubl9lcnJvcihjb25uLCAicmVjdiBjb21wbGV0aW9uIG9uICIKKwkJCQkgICAgICAgIiVwSTQgaGFkIHN0YXR1cyAldSwgZGlzY29ubmVjdGluZyBhbmQgIgorCQkJCSAgICAgICAicmVjb25uZWN0aW5nXG4iLCAmY29ubi0+Y19mYWRkciwKKwkJCQkgICAgICAgd2Muc3RhdHVzKTsKKwkJCX0KKwkJfQorCisJCXJkc19pd19yaW5nX2ZyZWUoJmljLT5pX3JlY3ZfcmluZywgMSk7CisJfQorCisJaWYgKHN0YXRlLmFja19uZXh0X3ZhbGlkKQorCQlyZHNfaXdfc2V0X2FjayhpYywgc3RhdGUuYWNrX25leHQsIHN0YXRlLmFja19yZXF1aXJlZCk7CisJaWYgKHN0YXRlLmFja19yZWN2X3ZhbGlkICYmIHN0YXRlLmFja19yZWN2ID4gaWMtPmlfYWNrX3JlY3YpIHsKKwkJcmRzX3NlbmRfZHJvcF9hY2tlZChjb25uLCBzdGF0ZS5hY2tfcmVjdiwgTlVMTCk7CisJCWljLT5pX2Fja19yZWN2ID0gc3RhdGUuYWNrX3JlY3Y7CisJfQorCWlmIChyZHNfY29ubl91cChjb25uKSkKKwkJcmRzX2l3X2F0dGVtcHRfYWNrKGljKTsKKworCS8qIElmIHdlIGV2ZXIgZW5kIHVwIHdpdGggYSByZWFsbHkgZW1wdHkgcmVjZWl2ZSByaW5nLCB3ZSdyZQorCSAqIGluIGRlZXAgdHJvdWJsZSwgYXMgdGhlIHNlbmRlciB3aWxsIGRlZmluaXRlbHkgc2VlIFJOUgorCSAqIHRpbWVvdXRzLiAqLworCWlmIChyZHNfaXdfcmluZ19lbXB0eSgmaWMtPmlfcmVjdl9yaW5nKSkKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3J4X3JpbmdfZW1wdHkpOworCisJLyoKKwkgKiBJZiB0aGUgcmluZyBpcyBydW5uaW5nIGxvdywgdGhlbiBzY2hlZHVsZSB0aGUgdGhyZWFkIHRvIHJlZmlsbC4KKwkgKi8KKwlpZiAocmRzX2l3X3JpbmdfbG93KCZpYy0+aV9yZWN2X3JpbmcpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDApOworfQorCitpbnQgcmRzX2l3X3JlY3Yoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCWludCByZXQgPSAwOworCisJcmRzZGVidWcoImNvbm4gJXBcbiIsIGNvbm4pOworCisJLyoKKwkgKiBJZiB3ZSBnZXQgYSB0ZW1wb3JhcnkgcG9zdGluZyBmYWlsdXJlIGluIHRoaXMgY29udGV4dCB0aGVuCisJICogd2UncmUgcmVhbGx5IGxvdyBhbmQgd2Ugd2FudCB0aGUgY2FsbGVyIHRvIGJhY2sgb2ZmIGZvciBhIGJpdC4KKwkgKi8KKwltdXRleF9sb2NrKCZpYy0+aV9yZWN2X211dGV4KTsKKwlpZiAocmRzX2l3X3JlY3ZfcmVmaWxsKGNvbm4sIEdGUF9LRVJORUwsIEdGUF9ISUdIVVNFUiwgMCkpCisJCXJldCA9IC1FTk9NRU07CisJZWxzZQorCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfcnhfcmVmaWxsX2Zyb21fdGhyZWFkKTsKKwltdXRleF91bmxvY2soJmljLT5pX3JlY3ZfbXV0ZXgpOworCisJaWYgKHJkc19jb25uX3VwKGNvbm4pKQorCQlyZHNfaXdfYXR0ZW1wdF9hY2soaWMpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IF9faW5pdCByZHNfaXdfcmVjdl9pbml0KHZvaWQpCit7CisJc3RydWN0IHN5c2luZm8gc2k7CisJaW50IHJldCA9IC1FTk9NRU07CisKKwkvKiBEZWZhdWx0IHRvIDMwJSBvZiBhbGwgYXZhaWxhYmxlIFJBTSBmb3IgcmVjdiBtZW1vcnkgKi8KKwlzaV9tZW1pbmZvKCZzaSk7CisJcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl9hbGxvY2F0aW9uID0gc2kudG90YWxyYW0gLyAzICogUEFHRV9TSVpFIC8gUkRTX0ZSQUdfU0laRTsKKworCXJkc19pd19pbmNvbWluZ19zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoInJkc19pd19pbmNvbWluZyIsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX2l3X2luY29taW5nKSwKKwkJCQkJMCwgMCwgTlVMTCk7CisJaWYgKHJkc19pd19pbmNvbWluZ19zbGFiID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmRzX2l3X2ZyYWdfc2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKCJyZHNfaXdfZnJhZyIsCisJCQkJCXNpemVvZihzdHJ1Y3QgcmRzX3BhZ2VfZnJhZyksCisJCQkJCTAsIDAsIE5VTEwpOworCWlmIChyZHNfaXdfZnJhZ19zbGFiID09IE5VTEwpCisJCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaXdfaW5jb21pbmdfc2xhYik7CisJZWxzZQorCQlyZXQgPSAwOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2l3X3JlY3ZfZXhpdCh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShyZHNfaXdfaW5jb21pbmdfc2xhYik7CisJa21lbV9jYWNoZV9kZXN0cm95KHJkc19pd19mcmFnX3NsYWIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19yaW5nLmMgYi9uZXQvcmRzL2l3X3JpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDIyZDRiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19yaW5nLmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAiaXcuaCIKKworLyoKKyAqIExvY2tpbmcgZm9yIElCIHJpbmdzLgorICogV2UgYXNzdW1lIHRoYXQgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvdGVjdGVkIGJ5IGEgbXV0ZXgKKyAqIGluIHRoZSBjYWxsZXIgKHRoaXMgaXMgYSB2YWxpZCBhc3N1bXB0aW9uIGZvciB0aGUgY3VycmVudAorICogaW1wbGVtZW50YXRpb24pLgorICoKKyAqIEZyZWVpbmcgYWx3YXlzIGhhcHBlbnMgaW4gYW4gaW50ZXJydXB0LCBhbmQgaGVuY2Ugb25seQorICogcmFjZXMgd2l0aCBhbGxvY2F0aW9ucywgYnV0IG5vdCB3aXRoIG90aGVyIGZyZWUoKXMuCisgKgorICogVGhlIGludGVyYWN0aW9uIGJldHdlZW4gYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBpcyB0aGF0CisgKiB0aGUgYWxsb2MgY29kZSBoYXMgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZnJlZSBlbnRyaWVzLgorICogVG8gdGhpcyBlbmQsIHdlIG1haW50YWluIHR3byBjb3VudGVyczsgYW4gYWxsb2NhdGlvbiBjb3VudGVyCisgKiBhbmQgYSBmcmVlIGNvdW50ZXIuIEJvdGggYXJlIGFsbG93ZWQgdG8gcnVuIGZyZWVseSwgYW5kIHdyYXAKKyAqIGFyb3VuZC4KKyAqIFRoZSBudW1iZXIgb2YgdXNlZCBlbnRyaWVzIGlzIGFsd2F5cyAoYWxsb2NfY3RyIC0gZnJlZV9jdHIpICUgTlIuCisgKgorICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gbWFrZXMgZnJlZV9jdHIgYXRvbWljLiBXaGVuIHRoZQorICogY2FsbGVyIGZpbmRzIGFuIGFsbG9jYXRpb24gZmFpbHMsIGl0IHNob3VsZCBzZXQgYW4gImFsbG9jIGZhaWwiCisgKiBiaXQgYW5kIHJldHJ5IHRoZSBhbGxvY2F0aW9uLiBUaGUgImFsbG9jIGZhaWwiIGJpdCBlc3NlbnRpYWxseSB0ZWxscworICogdGhlIENRIGNvbXBsZXRpb24gaGFuZGxlcnMgdG8gd2FrZSBpdCB1cCBhZnRlciBmcmVlaW5nIHNvbWUKKyAqIG1vcmUgZW50cmllcy4KKyAqLworCisvKgorICogVGhpcyBvbmx5IGhhcHBlbnMgb24gc2h1dGRvd24uCisgKi8KK0RFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJkc19pd19yaW5nX2VtcHR5X3dhaXQpOworCit2b2lkIHJkc19pd19yaW5nX2luaXQoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiBucikKK3sKKwltZW1zZXQocmluZywgMCwgc2l6ZW9mKCpyaW5nKSk7CisJcmluZy0+d19uciA9IG5yOworCXJkc2RlYnVnKCJyaW5nICVwIG5yICV1XG4iLCByaW5nLCByaW5nLT53X25yKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgX19yZHNfaXdfcmluZ191c2VkKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKQoreworCXUzMiBkaWZmOworCisJLyogVGhpcyBhc3N1bWVzIHRoYXQgYXRvbWljX3QgaGFzIGF0IGxlYXN0IGFzIG1hbnkgYml0cyBhcyB1MzIgKi8KKwlkaWZmID0gcmluZy0+d19hbGxvY19jdHIgLSAodTMyKSBhdG9taWNfcmVhZCgmcmluZy0+d19mcmVlX2N0cik7CisJQlVHX09OKGRpZmYgPiByaW5nLT53X25yKTsKKworCXJldHVybiBkaWZmOworfQorCit2b2lkIHJkc19pd19yaW5nX3Jlc2l6ZShzdHJ1Y3QgcmRzX2l3X3dvcmtfcmluZyAqcmluZywgdTMyIG5yKQoreworCS8qIFdlIG9ubHkgZXZlciBnZXQgY2FsbGVkIGZyb20gdGhlIGNvbm5lY3Rpb24gc2V0dXAgY29kZSwKKwkgKiBwcmlvciB0byBjcmVhdGluZyB0aGUgUVAuICovCisJQlVHX09OKF9fcmRzX2l3X3JpbmdfdXNlZChyaW5nKSk7CisJcmluZy0+d19uciA9IG5yOworfQorCitzdGF0aWMgaW50IF9fcmRzX2l3X3JpbmdfZW1wdHkoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2l3X3JpbmdfdXNlZChyaW5nKSA9PSAwOworfQorCit1MzIgcmRzX2l3X3JpbmdfYWxsb2Moc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwsIHUzMiAqcG9zKQoreworCXUzMiByZXQgPSAwLCBhdmFpbDsKKworCWF2YWlsID0gcmluZy0+d19uciAtIF9fcmRzX2l3X3JpbmdfdXNlZChyaW5nKTsKKworCXJkc2RlYnVnKCJyaW5nICVwIHZhbCAldSBuZXh0ICV1IGZyZWUgJXVcbiIsIHJpbmcsIHZhbCwKKwkJIHJpbmctPndfYWxsb2NfcHRyLCBhdmFpbCk7CisKKwlpZiAodmFsICYmIGF2YWlsKSB7CisJCXJldCA9IG1pbih2YWwsIGF2YWlsKTsKKwkJKnBvcyA9IHJpbmctPndfYWxsb2NfcHRyOworCisJCXJpbmctPndfYWxsb2NfcHRyID0gKHJpbmctPndfYWxsb2NfcHRyICsgcmV0KSAlIHJpbmctPndfbnI7CisJCXJpbmctPndfYWxsb2NfY3RyICs9IHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHJkc19pd19yaW5nX2ZyZWUoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB2YWwpCit7CisJcmluZy0+d19mcmVlX3B0ciA9IChyaW5nLT53X2ZyZWVfcHRyICsgdmFsKSAlIHJpbmctPndfbnI7CisJYXRvbWljX2FkZCh2YWwsICZyaW5nLT53X2ZyZWVfY3RyKTsKKworCWlmIChfX3Jkc19pd19yaW5nX2VtcHR5KHJpbmcpICYmCisJICAgIHdhaXRxdWV1ZV9hY3RpdmUoJnJkc19pd19yaW5nX2VtcHR5X3dhaXQpKQorCQl3YWtlX3VwKCZyZHNfaXdfcmluZ19lbXB0eV93YWl0KTsKK30KKwordm9pZCByZHNfaXdfcmluZ191bmFsbG9jKHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nLCB1MzIgdmFsKQoreworCXJpbmctPndfYWxsb2NfcHRyID0gKHJpbmctPndfYWxsb2NfcHRyIC0gdmFsKSAlIHJpbmctPndfbnI7CisJcmluZy0+d19hbGxvY19jdHIgLT0gdmFsOworfQorCitpbnQgcmRzX2l3X3JpbmdfZW1wdHkoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2l3X3JpbmdfZW1wdHkocmluZyk7Cit9CisKK2ludCByZHNfaXdfcmluZ19sb3coc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcpCit7CisJcmV0dXJuIF9fcmRzX2l3X3JpbmdfdXNlZChyaW5nKSA8PSAocmluZy0+d19uciA+PiAyKTsKK30KKworCisvKgorICogcmV0dXJucyB0aGUgb2xkZXN0IGFsbG9jZWQgcmluZyBlbnRyeS4gIFRoaXMgd2lsbCBiZSB0aGUgbmV4dCBvbmUKKyAqIGZyZWVkLiAgVGhpcyBjYW4ndCBiZSBjYWxsZWQgaWYgdGhlcmUgYXJlIG5vbmUgYWxsb2NhdGVkLgorICovCit1MzIgcmRzX2l3X3Jpbmdfb2xkZXN0KHN0cnVjdCByZHNfaXdfd29ya19yaW5nICpyaW5nKQoreworCXJldHVybiByaW5nLT53X2ZyZWVfcHRyOworfQorCisvKgorICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB3b3JrIHJlcXVlc3RzLgorICovCisKK3UzMiByZHNfaXdfcmluZ19jb21wbGV0ZWQoc3RydWN0IHJkc19pd193b3JrX3JpbmcgKnJpbmcsIHUzMiB3cl9pZCwgdTMyIG9sZGVzdCkKK3sKKwl1MzIgcmV0OworCisJaWYgKG9sZGVzdCA8PSAodW5zaWduZWQgbG9uZyBsb25nKXdyX2lkKQorCQlyZXQgPSAodW5zaWduZWQgbG9uZyBsb25nKXdyX2lkIC0gb2xkZXN0ICsgMTsKKwllbHNlCisJCXJldCA9IHJpbmctPndfbnIgLSBvbGRlc3QgKyAodW5zaWduZWQgbG9uZyBsb25nKXdyX2lkICsgMTsKKworCXJkc2RlYnVnKCJyaW5nICVwIHJldCAldSB3cl9pZCAldSBvbGRlc3QgJXVcbiIsIHJpbmcsIHJldCwKKwkJIHdyX2lkLCBvbGRlc3QpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3NlbmQuYyBiL25ldC9yZHMvaXdfc2VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZGQzOGYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL2l3X3NlbmQuYwpAQCAtMCwwICsxLDk3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJyZG1hLmgiCisjaW5jbHVkZSAiaXcuaCIKKworc3RhdGljIHZvaWQgcmRzX2l3X3NlbmRfcmRtYV9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJCSAgICAgIGludCB3Y19zdGF0dXMpCit7CisJaW50IG5vdGlmeV9zdGF0dXM7CisKKwlzd2l0Y2ggKHdjX3N0YXR1cykgeworCWNhc2UgSUJfV0NfV1JfRkxVU0hfRVJSOgorCQlyZXR1cm47CisKKwljYXNlIElCX1dDX1NVQ0NFU1M6CisJCW5vdGlmeV9zdGF0dXMgPSBSRFNfUkRNQV9TVUNDRVNTOworCQlicmVhazsKKworCWNhc2UgSUJfV0NfUkVNX0FDQ0VTU19FUlI6CisJCW5vdGlmeV9zdGF0dXMgPSBSRFNfUkRNQV9SRU1PVEVfRVJST1I7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJbm90aWZ5X3N0YXR1cyA9IFJEU19SRE1BX09USEVSX0VSUk9SOworCQlicmVhazsKKwl9CisJcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShybSwgbm90aWZ5X3N0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19pd19zZW5kX3VubWFwX3JkbWEoc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJCQkgICBzdHJ1Y3QgcmRzX3JkbWFfb3AgKm9wKQoreworCWlmIChvcC0+cl9tYXBwZWQpIHsKKwkJaWJfZG1hX3VubWFwX3NnKGljLT5pX2NtX2lkLT5kZXZpY2UsCisJCQlvcC0+cl9zZywgb3AtPnJfbmVudHMsCisJCQlvcC0+cl93cml0ZSA/IERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQlvcC0+cl9tYXBwZWQgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX2l3X3NlbmRfdW5tYXBfcm0oc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYywKKwkJCSAgc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQsCisJCQkgIGludCB3Y19zdGF0dXMpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSA9IHNlbmQtPnNfcm07CisKKwlyZHNkZWJ1ZygiaWMgJXAgc2VuZCAlcCBybSAlcFxuIiwgaWMsIHNlbmQsIHJtKTsKKworCWliX2RtYV91bm1hcF9zZyhpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkgICAgIHJtLT5tX3NnLCBybS0+bV9uZW50cywKKwkJICAgICBETUFfVE9fREVWSUNFKTsKKworCWlmIChybS0+bV9yZG1hX29wICE9IE5VTEwpIHsKKwkJcmRzX2l3X3NlbmRfdW5tYXBfcmRtYShpYywgcm0tPm1fcmRtYV9vcCk7CisKKwkJLyogSWYgdGhlIHVzZXIgYXNrZWQgZm9yIGEgY29tcGxldGlvbiBub3RpZmljYXRpb24gb24gdGhpcworCQkgKiBtZXNzYWdlLCB3ZSBjYW4gaW1wbGVtZW50IHRocmVlIGRpZmZlcmVudCBzZW1hbnRpY3M6CisJCSAqICAxLglOb3RpZnkgd2hlbiB3ZSByZWNlaXZlZCB0aGUgQUNLIG9uIHRoZSBSRFMgbWVzc2FnZQorCQkgKgl0aGF0IHdhcyBxdWV1ZWQgd2l0aCB0aGUgUkRNQS4gVGhpcyBwcm92aWRlcyByZWxpYWJsZQorCQkgKglub3RpZmljYXRpb24gb2YgUkRNQSBzdGF0dXMgYXQgdGhlIGV4cGVuc2Ugb2YgYSBvbmUtd2F5CisJCSAqCXBhY2tldCBkZWxheS4KKwkJICogIDIuCU5vdGlmeSB3aGVuIHRoZSBJQiBzdGFjayBnaXZlcyB1cyB0aGUgY29tcGxldGlvbiBldmVudCBmb3IKKwkJICoJdGhlIFJETUEgb3BlcmF0aW9uLgorCQkgKiAgMy4JTm90aWZ5IHdoZW4gdGhlIElCIHN0YWNrIGdpdmVzIHVzIHRoZSBjb21wbGV0aW9uIGV2ZW50IGZvcgorCQkgKgl0aGUgYWNjb21wYW55aW5nIFJEUyBtZXNzYWdlcy4KKwkJICogSGVyZSwgd2UgaW1wbGVtZW50IGFwcHJvYWNoICMzLiBUbyBpbXBsZW1lbnQgYXBwcm9hY2ggIzIsCisJCSAqIGNhbGwgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZSBmcm9tIHRoZSBjcV9oYW5kbGVyLiBUbyBpbXBsZW1lbnQgIzEsCisJCSAqIGRvbid0IGNhbGwgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZSBhdCBhbGwsIGFuZCBmYWxsIGJhY2sgdG8gdGhlIG5vdGlmeQorCQkgKiBoYW5kbGluZyBpbiB0aGUgQUNLIHByb2Nlc3NpbmcgY29kZS4KKwkJICoKKwkJICogTm90ZTogVGhlcmUncyBubyBuZWVkIHRvIGV4cGxpY2l0bHkgc3luYyBhbnkgUkRNQSBidWZmZXJzIHVzaW5nCisJCSAqIGliX2RtYV9zeW5jX3NnX2Zvcl9jcHUgLSB0aGUgY29tcGxldGlvbiBmb3IgdGhlIFJETUEKKwkJICogb3BlcmF0aW9uIGl0c2VsZiB1bm1hcHBlZCB0aGUgUkRNQSBidWZmZXJzLCB3aGljaCB0YWtlcyBjYXJlCisJCSAqIG9mIHN5bmNoaW5nLgorCQkgKi8KKwkJcmRzX2l3X3NlbmRfcmRtYV9jb21wbGV0ZShybSwgd2Nfc3RhdHVzKTsKKworCQlpZiAocm0tPm1fcmRtYV9vcC0+cl93cml0ZSkKKwkJCXJkc19zdGF0c19hZGQoc19zZW5kX3JkbWFfYnl0ZXMsIHJtLT5tX3JkbWFfb3AtPnJfYnl0ZXMpOworCQllbHNlCisJCQlyZHNfc3RhdHNfYWRkKHNfcmVjdl9yZG1hX2J5dGVzLCBybS0+bV9yZG1hX29wLT5yX2J5dGVzKTsKKwl9CisKKwkvKiBJZiBhbnlvbmUgd2FpdGVkIGZvciB0aGlzIG1lc3NhZ2UgdG8gZ2V0IGZsdXNoZWQgb3V0LCB3YWtlCisJICogdGhlbSB1cCBub3cgKi8KKwlyZHNfbWVzc2FnZV91bm1hcHBlZChybSk7CisKKwlyZHNfbWVzc2FnZV9wdXQocm0pOworCXNlbmQtPnNfcm0gPSBOVUxMOworfQorCit2b2lkIHJkc19pd19zZW5kX2luaXRfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kOworCXUzMiBpOworCisJZm9yIChpID0gMCwgc2VuZCA9IGljLT5pX3NlbmRzOyBpIDwgaWMtPmlfc2VuZF9yaW5nLndfbnI7IGkrKywgc2VuZCsrKSB7CisJCXN0cnVjdCBpYl9zZ2UgKnNnZTsKKworCQlzZW5kLT5zX3JtID0gTlVMTDsKKwkJc2VuZC0+c19vcCA9IE5VTEw7CisJCXNlbmQtPnNfbWFwcGluZyA9IE5VTEw7CisKKwkJc2VuZC0+c193ci5uZXh0ID0gTlVMTDsKKwkJc2VuZC0+c193ci53cl9pZCA9IGk7CisJCXNlbmQtPnNfd3Iuc2dfbGlzdCA9IHNlbmQtPnNfc2dlOworCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1NFTkQ7CisJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IDA7CisJCXNlbmQtPnNfd3IuZXguaW1tX2RhdGEgPSAwOworCisJCXNnZSA9IHJkc19pd19kYXRhX3NnZShpYywgc2VuZC0+c19zZ2UpOworCQlzZ2UtPmxrZXkgPSAwOworCisJCXNnZSA9IHJkc19pd19oZWFkZXJfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+YWRkciA9IGljLT5pX3NlbmRfaGRyc19kbWEgKyAoaSAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCQlzZ2UtPmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcik7CisJCXNnZS0+bGtleSA9IDA7CisKKwkJc2VuZC0+c19tciA9IGliX2FsbG9jX2Zhc3RfcmVnX21yKGljLT5pX3BkLCBmYXN0cmVnX21lc3NhZ2Vfc2l6ZSk7CisJCWlmIChJU19FUlIoc2VuZC0+c19tcikpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlJEUy9JVzogaWJfYWxsb2NfZmFzdF9yZWdfbXIgZmFpbGVkXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJc2VuZC0+c19wYWdlX2xpc3QgPSBpYl9hbGxvY19mYXN0X3JlZ19wYWdlX2xpc3QoCisJCQlpYy0+aV9jbV9pZC0+ZGV2aWNlLCBmYXN0cmVnX21lc3NhZ2Vfc2l6ZSk7CisJCWlmIChJU19FUlIoc2VuZC0+c19wYWdlX2xpc3QpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGliX2FsbG9jX2Zhc3RfcmVnX3BhZ2VfbGlzdCBmYWlsZWRcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX2l3X3NlbmRfY2xlYXJfcmluZyhzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljKQoreworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kOworCXUzMiBpOworCisJZm9yIChpID0gMCwgc2VuZCA9IGljLT5pX3NlbmRzOyBpIDwgaWMtPmlfc2VuZF9yaW5nLndfbnI7IGkrKywgc2VuZCsrKSB7CisJCUJVR19PTighc2VuZC0+c19tcik7CisJCWliX2RlcmVnX21yKHNlbmQtPnNfbXIpOworCQlCVUdfT04oIXNlbmQtPnNfcGFnZV9saXN0KTsKKwkJaWJfZnJlZV9mYXN0X3JlZ19wYWdlX2xpc3Qoc2VuZC0+c19wYWdlX2xpc3QpOworCQlpZiAoc2VuZC0+c193ci5vcGNvZGUgPT0gMHhkZWFkKQorCQkJY29udGludWU7CisJCWlmIChzZW5kLT5zX3JtKQorCQkJcmRzX2l3X3NlbmRfdW5tYXBfcm0oaWMsIHNlbmQsIElCX1dDX1dSX0ZMVVNIX0VSUik7CisJCWlmIChzZW5kLT5zX29wKQorCQkJcmRzX2l3X3NlbmRfdW5tYXBfcmRtYShpYywgc2VuZC0+c19vcCk7CisJfQorfQorCisvKgorICogVGhlIF9vbGRlc3QvX2ZyZWUgcmluZyBvcGVyYXRpb25zIGhlcmUgcmFjZSBjbGVhbmx5IHdpdGggdGhlIGFsbG9jL3VuYWxsb2MKKyAqIG9wZXJhdGlvbnMgcGVyZm9ybWVkIGluIHRoZSBzZW5kIHBhdGguICBBcyB0aGUgc2VuZGVyIGFsbG9jcyBhbmQgcG90ZW50aWFsbHkKKyAqIHVuYWxsb2NzIHRoZSBuZXh0IGZyZWUgZW50cnkgaW4gdGhlIHJpbmcgaXQgZG9lc24ndCBhbHRlciB3aGljaCBpcworICogdGhlIG5leHQgdG8gYmUgZnJlZWQsIHdoaWNoIGlzIHdoYXQgdGhpcyBpcyBjb25jZXJuZWQgd2l0aC4KKyAqLwordm9pZCByZHNfaXdfc2VuZF9jcV9jb21wX2hhbmRsZXIoc3RydWN0IGliX2NxICpjcSwgdm9pZCAqY29udGV4dCkKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250ZXh0OworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl93YyB3YzsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZDsKKwl1MzIgY29tcGxldGVkOworCXUzMiBvbGRlc3Q7CisJdTMyIGk7CisJaW50IHJldDsKKworCXJkc2RlYnVnKCJjcSAlcCBjb25uICVwXG4iLCBjcSwgY29ubik7CisJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X2NxX2NhbGwpOworCXJldCA9IGliX3JlcV9ub3RpZnlfY3EoY3EsIElCX0NRX05FWFRfQ09NUCk7CisJaWYgKHJldCkKKwkJcmRzZGVidWcoImliX3JlcV9ub3RpZnlfY3Egc2VuZCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCisJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPiAwKSB7CisJCXJkc2RlYnVnKCJ3YyB3cl9pZCAweCVsbHggc3RhdHVzICV1IGJ5dGVfbGVuICV1IGltbV9kYXRhICV1XG4iLAorCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpd2Mud3JfaWQsIHdjLnN0YXR1cywgd2MuYnl0ZV9sZW4sCisJCQkgYmUzMl90b19jcHUod2MuZXguaW1tX2RhdGEpKTsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X2NxX2V2ZW50KTsKKworCQlpZiAod2Muc3RhdHVzICE9IElCX1dDX1NVQ0NFU1MpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiV0MgRXJyb3I6ICBzdGF0dXMgPSAlZCBvcGNvZGUgPSAlZFxuIiwgd2Muc3RhdHVzLCB3Yy5vcGNvZGUpOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAod2Mub3Bjb2RlID09IElCX1dDX0xPQ0FMX0lOViAmJiB3Yy53cl9pZCA9PSBSRFNfSVdfTE9DQUxfSU5WX1dSX0lEKSB7CisJCQlpYy0+aV9mYXN0cmVnX3Bvc3RlZCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh3Yy5vcGNvZGUgPT0gSUJfV0NfRkFTVF9SRUdfTVIgJiYgd2Mud3JfaWQgPT0gUkRTX0lXX0ZBU1RfUkVHX1dSX0lEKSB7CisJCQlpYy0+aV9mYXN0cmVnX3Bvc3RlZCA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICh3Yy53cl9pZCA9PSBSRFNfSVdfQUNLX1dSX0lEKSB7CisJCQlpZiAoaWMtPmlfYWNrX3F1ZXVlZCArIEhaLzIgPCBqaWZmaWVzKQorCQkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9zdGFsbGVkKTsKKwkJCXJkc19pd19hY2tfc2VuZF9jb21wbGV0ZShpYyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCW9sZGVzdCA9IHJkc19pd19yaW5nX29sZGVzdCgmaWMtPmlfc2VuZF9yaW5nKTsKKworCQljb21wbGV0ZWQgPSByZHNfaXdfcmluZ19jb21wbGV0ZWQoJmljLT5pX3NlbmRfcmluZywgd2Mud3JfaWQsIG9sZGVzdCk7CisKKwkJZm9yIChpID0gMDsgaSA8IGNvbXBsZXRlZDsgaSsrKSB7CisJCQlzZW5kID0gJmljLT5pX3NlbmRzW29sZGVzdF07CisKKwkJCS8qIEluIHRoZSBlcnJvciBjYXNlLCB3Yy5vcGNvZGUgc29tZXRpbWVzIGNvbnRhaW5zIGdhcmJhZ2UgKi8KKwkJCXN3aXRjaCAoc2VuZC0+c193ci5vcGNvZGUpIHsKKwkJCWNhc2UgSUJfV1JfU0VORDoKKwkJCQlpZiAoc2VuZC0+c19ybSkKKwkJCQkJcmRzX2l3X3NlbmRfdW5tYXBfcm0oaWMsIHNlbmQsIHdjLnN0YXR1cyk7CisJCQkJYnJlYWs7CisJCQljYXNlIElCX1dSX0ZBU1RfUkVHX01SOgorCQkJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgorCQkJY2FzZSBJQl9XUl9SRE1BX1JFQUQ6CisJCQljYXNlIElCX1dSX1JETUFfUkVBRF9XSVRIX0lOVjoKKwkJCQkvKiBOb3RoaW5nIHRvIGJlIGRvbmUgLSB0aGUgU0cgbGlzdCB3aWxsIGJlIHVubWFwcGVkCisJCQkJICogd2hlbiB0aGUgU0VORCBjb21wbGV0ZXMuICovCisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQkJCXByaW50ayhLRVJOX05PVElDRQorCQkJCQkJIlJEUy9JVzogJXM6IHVuZXhwZWN0ZWQgb3Bjb2RlIDB4JXggaW4gV1IhXG4iLAorCQkJCQkJX19mdW5jX18sIHNlbmQtPnNfd3Iub3Bjb2RlKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJc2VuZC0+c193ci5vcGNvZGUgPSAweGRlYWQ7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSAxOworCQkJaWYgKHNlbmQtPnNfcXVldWVkICsgSFovMiA8IGppZmZpZXMpCisJCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3N0YWxsZWQpOworCisJCQkvKiBJZiBhIFJETUEgb3BlcmF0aW9uIHByb2R1Y2VkIGFuIGVycm9yLCBzaWduYWwgdGhpcyByaWdodAorCQkJICogYXdheS4gSWYgd2UgZG9uJ3QsIHRoZSBzdWJzZXF1ZW50IFNFTkQgdGhhdCBnb2VzIHdpdGggdGhpcworCQkJICogUkRNQSB3aWxsIGJlIGNhbmNlbGVkIHdpdGggRVJSX1dGTFVTSCwgYW5kIHRoZSBhcHBsaWNhdGlvbgorCQkJICogbmV2ZXIgbGVhcm4gdGhhdCB0aGUgUkRNQSBmYWlsZWQuICovCisJCQlpZiAodW5saWtlbHkod2Muc3RhdHVzID09IElCX1dDX1JFTV9BQ0NFU1NfRVJSICYmIHNlbmQtPnNfb3ApKSB7CisJCQkJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKworCQkJCXJtID0gcmRzX3NlbmRfZ2V0X21lc3NhZ2UoY29ubiwgc2VuZC0+c19vcCk7CisJCQkJaWYgKHJtKQorCQkJCQlyZHNfaXdfc2VuZF9yZG1hX2NvbXBsZXRlKHJtLCB3Yy5zdGF0dXMpOworCQkJfQorCisJCQlvbGRlc3QgPSAob2xkZXN0ICsgMSkgJSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwkJfQorCisJCXJkc19pd19yaW5nX2ZyZWUoJmljLT5pX3NlbmRfcmluZywgY29tcGxldGVkKTsKKworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKQorCQkgfHwgdGVzdF9iaXQoMCwgJmNvbm4tPmNfbWFwX3F1ZXVlZCkpCisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCisJCS8qIFdlIGV4cGVjdCBlcnJvcnMgYXMgdGhlIHFwIGlzIGRyYWluZWQgZHVyaW5nIHNodXRkb3duICovCisJCWlmICh3Yy5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUyAmJiByZHNfY29ubl91cChjb25uKSkgeworCQkJcmRzX2l3X2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkic2VuZCBjb21wbGV0aW9uIG9uICVwSTQgIgorCQkJCSJoYWQgc3RhdHVzICV1LCBkaXNjb25uZWN0aW5nIGFuZCByZWNvbm5lY3RpbmdcbiIsCisJCQkJJmNvbm4tPmNfZmFkZHIsIHdjLnN0YXR1cyk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBUaGlzIGlzIHRoZSBtYWluIGZ1bmN0aW9uIGZvciBhbGxvY2F0aW5nIGNyZWRpdHMgd2hlbiBzZW5kaW5nCisgKiBtZXNzYWdlcy4KKyAqCisgKiBDb25jZXB0dWFsbHksIHdlIGhhdmUgdHdvIGNvdW50ZXJzOgorICogIC0Jc2VuZCBjcmVkaXRzOiB0aGlzIHRlbGxzIHVzIGhvdyBtYW55IFdScyB3ZSdyZSBhbGxvd2VkCisgKgl0byBzdWJtaXQgd2l0aG91dCBvdmVycnVuaW5nIHRoZSByZWNpZXZlcidzIHF1ZXVlLiBGb3IKKyAqCWVhY2ggU0VORCBXUiB3ZSBwb3N0LCB3ZSBkZWNyZW1lbnQgdGhpcyBieSBvbmUuCisgKgorICogIC0JcG9zdGVkIGNyZWRpdHM6IHRoaXMgdGVsbHMgdXMgaG93IG1hbnkgV1JzIHdlIHJlY2VudGx5CisgKglwb3N0ZWQgdG8gdGhlIHJlY2VpdmUgcXVldWUuIFRoaXMgdmFsdWUgaXMgdHJhbnNmZXJyZWQKKyAqCXRvIHRoZSBwZWVyIGFzIGEgImNyZWRpdCB1cGRhdGUiIGluIGEgUkRTIGhlYWRlciBmaWVsZC4KKyAqCUV2ZXJ5IHRpbWUgd2UgdHJhbnNtaXQgY3JlZGl0cyB0byB0aGUgcGVlciwgd2Ugc3VidHJhY3QKKyAqCXRoZSBhbW91bnQgb2YgdHJhbnNmZXJyZWQgY3JlZGl0cyBmcm9tIHRoaXMgY291bnRlci4KKyAqCisgKiBJdCBpcyBlc3NlbnRpYWwgdGhhdCB3ZSBhdm9pZCBzaXR1YXRpb25zIHdoZXJlIGJvdGggc2lkZXMgaGF2ZQorICogZXhoYXVzdGVkIHRoZWlyIHNlbmQgY3JlZGl0cywgYW5kIGFyZSB1bmFibGUgdG8gc2VuZCBuZXcgY3JlZGl0cworICogdG8gdGhlIHBlZXIuIFdlIGFjaGlldmUgdGhpcyBieSByZXF1aXJpbmcgdGhhdCB3ZSBzZW5kIGF0IGxlYXN0CisgKiBvbmUgY3JlZGl0IHVwZGF0ZSB0byB0aGUgcGVlciBiZWZvcmUgZXhoYXVzdGluZyBvdXIgY3JlZGl0cy4KKyAqIFdoZW4gbmV3IGNyZWRpdHMgYXJyaXZlLCB3ZSBzdWJ0cmFjdCBvbmUgY3JlZGl0IHRoYXQgaXMgd2l0aGhlbGQKKyAqIHVudGlsIHdlJ3ZlIHBvc3RlZCBuZXcgYnVmZmVycyBhbmQgYXJlIHJlYWR5IHRvIHRyYW5zbWl0IHRoZXNlCisgKiBjcmVkaXRzIChzZWUgcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMgYmVsb3cpLgorICoKKyAqIFRoZSBSRFMgc2VuZCBjb2RlIGlzIGVzc2VudGlhbGx5IHNpbmdsZS10aHJlYWRlZDsgcmRzX3NlbmRfeG1pdAorICogZ3JhYnMgY19zZW5kX2xvY2sgdG8gZW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIHNlbmQgcmluZy4KKyAqIEhvd2V2ZXIsIHRoZSBBQ0sgc2VuZGluZyBjb2RlIGlzIGluZGVwZW5kZW50IGFuZCBjYW4gcmFjZSB3aXRoCisgKiBtZXNzYWdlIFNFTkRzLgorICoKKyAqIEluIHRoZSBzZW5kIHBhdGgsIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjb3VudGVycyBmb3Igc2VuZCBjcmVkaXRzCisgKiBhbmQgdGhlIGNvdW50ZXIgb2YgcG9zdGVkIGJ1ZmZlcnMgYXRvbWljYWxseSAtIHdoZW4gd2UgdXNlIHRoZQorICogbGFzdCBhdmFpbGFibGUgY3JlZGl0LCB3ZSBjYW5ub3QgYWxsb3cgYW5vdGhlciB0aHJlYWQgdG8gcmFjZSB1cworICogYW5kIGdyYWIgdGhlIHBvc3RlZCBjcmVkaXRzIGNvdW50ZXIuICBIZW5jZSwgd2UgaGF2ZSB0byB1c2UgYQorICogc3BpbmxvY2sgdG8gcHJvdGVjdCB0aGUgY3JlZGl0IGNvdW50ZXIsIG9yIHVzZSBhdG9taWNzLgorICoKKyAqIFNwaW5sb2NrcyBzaGFyZWQgYmV0d2VlbiB0aGUgc2VuZCBhbmQgdGhlIHJlY2VpdmUgcGF0aCBhcmUgYmFkLAorICogYmVjYXVzZSB0aGV5IGNyZWF0ZSB1bm5lY2Vzc2FyeSBkZWxheXMuIEFuIGVhcmx5IGltcGxlbWVudGF0aW9uCisgKiB1c2luZyBhIHNwaW5sb2NrIHNob3dlZCBhIDUlIGRlZ3JhZGF0aW9uIGluIHRocm91Z2hwdXQgYXQgc29tZQorICogbG9hZHMuCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhdm9pZHMgc3BpbmxvY2tzIGNvbXBsZXRlbHksIHB1dHRpbmcgYm90aAorICogY291bnRlcnMgaW50byBhIHNpbmdsZSBhdG9taWMsIGFuZCB1cGRhdGluZyB0aGF0IGF0b21pYyB1c2luZworICogYXRvbWljX2FkZCAoaW4gdGhlIHJlY2VpdmUgcGF0aCwgd2hlbiByZWNlaXZpbmcgZnJlc2ggY3JlZGl0cyksCisgKiBhbmQgdXNpbmcgYXRvbWljX2NtcHhjaGcgd2hlbiB1cGRhdGluZyB0aGUgdHdvIGNvdW50ZXJzLgorICovCitpbnQgcmRzX2l3X3NlbmRfZ3JhYl9jcmVkaXRzKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsCisJCQkgICAgIHUzMiB3YW50ZWQsIHUzMiAqYWR2X2NyZWRpdHMsIGludCBuZWVkX3Bvc3RlZCkKK3sKKwl1bnNpZ25lZCBpbnQgYXZhaWwsIHBvc3RlZCwgZ290ID0gMCwgYWR2ZXJ0aXNlOworCWxvbmcgb2xkdmFsLCBuZXd2YWw7CisKKwkqYWR2X2NyZWRpdHMgPSAwOworCWlmICghaWMtPmlfZmxvd2N0bCkKKwkJcmV0dXJuIHdhbnRlZDsKKwordHJ5X2FnYWluOgorCWFkdmVydGlzZSA9IDA7CisJb2xkdmFsID0gbmV3dmFsID0gYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpOworCXBvc3RlZCA9IElCX0dFVF9QT1NUX0NSRURJVFMob2xkdmFsKTsKKwlhdmFpbCA9IElCX0dFVF9TRU5EX0NSRURJVFMob2xkdmFsKTsKKworCXJkc2RlYnVnKCJyZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoJXUpOiBjcmVkaXRzPSV1IHBvc3RlZD0ldVxuIiwKKwkJCXdhbnRlZCwgYXZhaWwsIHBvc3RlZCk7CisKKwkvKiBUaGUgbGFzdCBjcmVkaXQgbXVzdCBiZSB1c2VkIHRvIHNlbmQgYSBjcmVkaXQgdXBkYXRlLiAqLworCWlmIChhdmFpbCAmJiAhcG9zdGVkKQorCQlhdmFpbC0tOworCisJaWYgKGF2YWlsIDwgd2FudGVkKSB7CisJCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGljLT5pX2NtX2lkLT5jb250ZXh0OworCisJCS8qIE9vcHMsIHRoZXJlIGFyZW4ndCB0aGF0IG1hbnkgY3JlZGl0cyBsZWZ0ISAqLworCQlzZXRfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKTsKKwkJZ290ID0gYXZhaWw7CisJfSBlbHNlIHsKKwkJLyogU29tZXRpbWVzIHlvdSBnZXQgd2hhdCB5b3Ugd2FudCwgbGFsYWxhLiAqLworCQlnb3QgPSB3YW50ZWQ7CisJfQorCW5ld3ZhbCAtPSBJQl9TRVRfU0VORF9DUkVESVRTKGdvdCk7CisKKwkvKgorCSAqIElmIG5lZWRfcG9zdGVkIGlzIG5vbi16ZXJvLCB0aGVuIHRoZSBjYWxsZXIgd2FudHMKKwkgKiB0aGUgcG9zdGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhbnkgc2VuZCBjcmVkaXRzIGFyZQorCSAqIGF2YWlsYWJsZS4KKwkgKi8KKwlpZiAocG9zdGVkICYmIChnb3QgfHwgbmVlZF9wb3N0ZWQpKSB7CisJCWFkdmVydGlzZSA9IG1pbl90KHVuc2lnbmVkIGludCwgcG9zdGVkLCBSRFNfTUFYX0FEVl9DUkVESVQpOworCQluZXd2YWwgLT0gSUJfU0VUX1BPU1RfQ1JFRElUUyhhZHZlcnRpc2UpOworCX0KKworCS8qIEZpbmFsbHkgYmlsbCBldmVyeXRoaW5nICovCisJaWYgKGF0b21pY19jbXB4Y2hnKCZpYy0+aV9jcmVkaXRzLCBvbGR2YWwsIG5ld3ZhbCkgIT0gb2xkdmFsKQorCQlnb3RvIHRyeV9hZ2FpbjsKKworCSphZHZfY3JlZGl0cyA9IGFkdmVydGlzZTsKKwlyZXR1cm4gZ290OworfQorCit2b2lkIHJkc19pd19zZW5kX2FkZF9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IGNyZWRpdHMpCit7CisJc3RydWN0IHJkc19pd19jb25uZWN0aW9uICppYyA9IGNvbm4tPmNfdHJhbnNwb3J0X2RhdGE7CisKKwlpZiAoY3JlZGl0cyA9PSAwKQorCQlyZXR1cm47CisKKwlyZHNkZWJ1ZygicmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoJXUpOiBjdXJyZW50PSV1JXNcbiIsCisJCQljcmVkaXRzLAorCQkJSUJfR0VUX1NFTkRfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpLAorCQkJdGVzdF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpID8gIiwgbGxfc2VuZF9mdWxsIiA6ICIiKTsKKworCWF0b21pY19hZGQoSUJfU0VUX1NFTkRfQ1JFRElUUyhjcmVkaXRzKSwgJmljLT5pX2NyZWRpdHMpOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCisJV0FSTl9PTihJQl9HRVRfU0VORF9DUkVESVRTKGNyZWRpdHMpID49IDE2Mzg0KTsKKworCXJkc19pd19zdGF0c19pbmMoc19pd19yeF9jcmVkaXRfdXBkYXRlcyk7Cit9CisKK3ZvaWQgcmRzX2l3X2FkdmVydGlzZV9jcmVkaXRzKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdW5zaWduZWQgaW50IHBvc3RlZCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKworCWlmIChwb3N0ZWQgPT0gMCkKKwkJcmV0dXJuOworCisJYXRvbWljX2FkZChJQl9TRVRfUE9TVF9DUkVESVRTKHBvc3RlZCksICZpYy0+aV9jcmVkaXRzKTsKKworCS8qIERlY2lkZSB3aGV0aGVyIHRvIHNlbmQgYW4gdXBkYXRlIHRvIHRoZSBwZWVyIG5vdy4KKwkgKiBJZiB3ZSB3b3VsZCBzZW5kIGEgY3JlZGl0IHVwZGF0ZSBmb3IgZXZlcnkgc2luZ2xlIGJ1ZmZlciB3ZQorCSAqIHBvc3QsIHdlIHdvdWxkIGVuZCB1cCB3aXRoIGFuIEFDSyBzdG9ybSAoQUNLIGFycml2ZXMsCisJICogY29uc3VtZXMgYnVmZmVyLCB3ZSByZWZpbGwgdGhlIHJpbmcsIHNlbmQgQUNLIHRvIHJlbW90ZQorCSAqIGFkdmVydGlzaW5nIHRoZSBuZXdseSBwb3N0ZWQgYnVmZmVyLi4uIGFkIGluZikKKwkgKgorCSAqIFBlcmZvcm1hbmNlIHByZXR0eSBtdWNoIGRlcGVuZHMgb24gaG93IG9mdGVuIHdlIHNlbmQKKwkgKiBjcmVkaXQgdXBkYXRlcyAtIHRvbyBmcmVxdWVudCB1cGRhdGVzIG1lYW4gbG90cyBvZiBBQ0tzLgorCSAqIFRvbyBpbmZyZXF1ZW50IHVwZGF0ZXMsIGFuZCB0aGUgcGVlciB3aWxsIHJ1biBvdXQgb2YKKwkgKiBjcmVkaXRzIGFuZCBoYXMgdG8gdGhyb3R0bGUuCisJICogRm9yIHRoZSB0aW1lIGJlaW5nLCAxNiBzZWVtcyB0byBiZSBhIGdvb2QgY29tcHJvbWlzZS4KKwkgKi8KKwlpZiAoSUJfR0VUX1BPU1RfQ1JFRElUUyhhdG9taWNfcmVhZCgmaWMtPmlfY3JlZGl0cykpID49IDE2KQorCQlzZXRfYml0KElCX0FDS19SRVFVRVNURUQsICZpYy0+aV9hY2tfZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3Jkc19pd194bWl0X3BvcHVsYXRlX3dyKHN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMsCisJCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpzZW5kLCB1bnNpZ25lZCBpbnQgcG9zLAorCQl1bnNpZ25lZCBsb25nIGJ1ZmZlciwgdW5zaWduZWQgaW50IGxlbmd0aCwKKwkJaW50IHNlbmRfZmxhZ3MpCit7CisJc3RydWN0IGliX3NnZSAqc2dlOworCisJV0FSTl9PTihwb3MgIT0gc2VuZCAtIGljLT5pX3NlbmRzKTsKKworCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyA9IHNlbmRfZmxhZ3M7CisJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9TRU5EOworCXNlbmQtPnNfd3IubnVtX3NnZSA9IDI7CisJc2VuZC0+c193ci5uZXh0ID0gTlVMTDsKKwlzZW5kLT5zX3F1ZXVlZCA9IGppZmZpZXM7CisJc2VuZC0+c19vcCA9IE5VTEw7CisKKwlpZiAobGVuZ3RoICE9IDApIHsKKwkJc2dlID0gcmRzX2l3X2RhdGFfc2dlKGljLCBzZW5kLT5zX3NnZSk7CisJCXNnZS0+YWRkciA9IGJ1ZmZlcjsKKwkJc2dlLT5sZW5ndGggPSBsZW5ndGg7CisJCXNnZS0+bGtleSA9IHJkc19pd19sb2NhbF9kbWFfbGtleShpYyk7CisKKwkJc2dlID0gcmRzX2l3X2hlYWRlcl9zZ2UoaWMsIHNlbmQtPnNfc2dlKTsKKwl9IGVsc2UgeworCQkvKiBXZSdyZSBzZW5kaW5nIGEgcGFja2V0IHdpdGggbm8gcGF5bG9hZC4gVGhlcmUgaXMgb25seQorCQkgKiBvbmUgU0dFICovCisJCXNlbmQtPnNfd3IubnVtX3NnZSA9IDE7CisJCXNnZSA9ICZzZW5kLT5zX3NnZVswXTsKKwl9CisKKwlzZ2UtPmFkZHIgPSBpYy0+aV9zZW5kX2hkcnNfZG1hICsgKHBvcyAqIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikpOworCXNnZS0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKTsKKwlzZ2UtPmxrZXkgPSByZHNfaXdfbG9jYWxfZG1hX2xrZXkoaWMpOworfQorCisvKgorICogVGhpcyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGZvciBhIGdpdmVuIG1lc3NhZ2UuICBUaGUgZmlyc3QgdGltZQorICogd2Ugc2VlIGEgbWVzc2FnZSB3ZSBtYXAgaXRzIHNjYXR0ZXJsaXN0IGludG8gdGhlIElCIGRldmljZSBzbyB0aGF0CisgKiB3ZSBjYW4gcHJvdmlkZSB0aGF0IG1hcHBlZCBhZGRyZXNzIHRvIHRoZSBJQiBzY2F0dGVyIGdhdGhlciBlbnRyaWVzCisgKiBpbiB0aGUgSUIgd29yayByZXF1ZXN0cy4gIFdlIHRyYW5zbGF0ZSB0aGUgc2NhdHRlcmxpc3QgaW50byBhIHNlcmllcworICogb2Ygd29yayByZXF1ZXN0cyB0aGF0IGZyYWdtZW50IHRoZSBtZXNzYWdlLiAgVGhlc2Ugd29yayByZXF1ZXN0cyBjb21wbGV0ZQorICogaW4gb3JkZXIgc28gd2UgcGFzcyBvd25lcnNoaXAgb2YgdGhlIG1lc3NhZ2UgdG8gdGhlIGNvbXBsZXRpb24gaGFuZGxlcgorICogb25jZSB3ZSBzZW5kIHRoZSBmaW5hbCBmcmFnbWVudC4KKyAqCisgKiBUaGUgUkRTIGNvcmUgdXNlcyB0aGUgY19zZW5kX2xvY2sgdG8gb25seSBlbnRlciB0aGlzIGZ1bmN0aW9uIG9uY2UKKyAqIHBlciBjb25uZWN0aW9uLiAgVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHR4IHJpbmcgYWxsb2MvdW5hbGxvYyBwYWlycworICogZG9uJ3QgZ2V0IG91dCBvZiBzeW5jIGFuZCBjb25mdXNlIHRoZSByaW5nLgorICovCitpbnQgcmRzX2l3X3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQl1bnNpZ25lZCBpbnQgaGRyX29mZiwgdW5zaWduZWQgaW50IHNnLCB1bnNpZ25lZCBpbnQgb2ZmKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCXN0cnVjdCBpYl9kZXZpY2UgKmRldiA9IGljLT5pX2NtX2lkLT5kZXZpY2U7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKnNlbmQgPSBOVUxMOworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpmaXJzdDsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqcHJldjsKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqZmFpbGVkX3dyOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdDsKKwl1MzIgcG9zOworCXUzMiBpOworCXUzMiB3b3JrX2FsbG9jOworCXUzMiBjcmVkaXRfYWxsb2M7CisJdTMyIHBvc3RlZDsKKwl1MzIgYWR2X2NyZWRpdHMgPSAwOworCWludCBzZW5kX2ZsYWdzID0gMDsKKwlpbnQgc2VudDsKKwlpbnQgcmV0OworCWludCBmbG93X2NvbnRyb2xsZWQgPSAwOworCisJQlVHX09OKG9mZiAlIFJEU19GUkFHX1NJWkUpOworCUJVR19PTihoZHJfb2ZmICE9IDAgJiYgaGRyX29mZiAhPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKTsKKworCS8qIEZhc3RyZWcgc3VwcG9ydCAqLworCWlmIChyZHNfcmRtYV9jb29raWVfa2V5KHJtLT5tX3JkbWFfY29va2llKQorCSAmJiAhaWMtPmlfZmFzdHJlZ19wb3N0ZWQpIHsKKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRklYTUUgd2UgbWF5IG92ZXJhbGxvY2F0ZSBoZXJlICovCisJaWYgKGJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikgPT0gMCkKKwkJaSA9IDE7CisJZWxzZQorCQlpID0gY2VpbChiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pLCBSRFNfRlJBR19TSVpFKTsKKworCXdvcmtfYWxsb2MgPSByZHNfaXdfcmluZ19hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCBpLCAmcG9zKTsKKwlpZiAod29ya19hbGxvYyA9PSAwKSB7CisJCXNldF9iaXQoUkRTX0xMX1NFTkRfRlVMTCwgJmNvbm4tPmNfZmxhZ3MpOworCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfcmluZ19mdWxsKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJY3JlZGl0X2FsbG9jID0gd29ya19hbGxvYzsKKwlpZiAoaWMtPmlfZmxvd2N0bCkgeworCQljcmVkaXRfYWxsb2MgPSByZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIHdvcmtfYWxsb2MsICZwb3N0ZWQsIDApOworCQlhZHZfY3JlZGl0cyArPSBwb3N0ZWQ7CisJCWlmIChjcmVkaXRfYWxsb2MgPCB3b3JrX2FsbG9jKSB7CisJCQlyZHNfaXdfcmluZ191bmFsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIHdvcmtfYWxsb2MgLSBjcmVkaXRfYWxsb2MpOworCQkJd29ya19hbGxvYyA9IGNyZWRpdF9hbGxvYzsKKwkJCWZsb3dfY29udHJvbGxlZCsrOworCQl9CisJCWlmICh3b3JrX2FsbG9jID09IDApIHsKKwkJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfdGhyb3R0bGUpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogbWFwIHRoZSBtZXNzYWdlIHRoZSBmaXJzdCB0aW1lIHdlIHNlZSBpdCAqLworCWlmIChpYy0+aV9ybSA9PSBOVUxMKSB7CisJCS8qCisJCXByaW50ayhLRVJOX05PVElDRSAicmRzX2l3X3htaXQgcHJlcCBtc2cgZHBvcnQ9JXUgZmxhZ3M9MHgleCBsZW49JWRcbiIsCisJCQkJYmUxNl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfZHBvcnQpLAorCQkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzLAorCQkJCWJlMzJfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX2xlbikpOworCQkgICAqLworCQlpZiAocm0tPm1fbmVudHMpIHsKKwkJCXJtLT5tX2NvdW50ID0gaWJfZG1hX21hcF9zZyhkZXYsCisJCQkJCSBybS0+bV9zZywgcm0tPm1fbmVudHMsIERNQV9UT19ERVZJQ0UpOworCQkJcmRzZGVidWcoImljICVwIG1hcHBpbmcgcm0gJXA6ICVkXG4iLCBpYywgcm0sIHJtLT5tX2NvdW50KTsKKwkJCWlmIChybS0+bV9jb3VudCA9PSAwKSB7CisJCQkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3NnX21hcHBpbmdfZmFpbHVyZSk7CisJCQkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJCQlyZXQgPSAtRU5PTUVNOyAvKiBYWFggPyAqLworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJcm0tPm1fY291bnQgPSAwOworCQl9CisKKwkJaWMtPmlfdW5zaWduYWxlZF93cnMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnM7CisJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgPSByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlczsKKwkJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKwkJaWMtPmlfcm0gPSBybTsKKworCQkvKiBGaW5hbGl6ZSB0aGUgaGVhZGVyICovCisJCWlmICh0ZXN0X2JpdChSRFNfTVNHX0FDS19SRVFVSVJFRCwgJnJtLT5tX2ZsYWdzKSkKKwkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzIHw9IFJEU19GTEFHX0FDS19SRVFVSVJFRDsKKwkJaWYgKHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgJnJtLT5tX2ZsYWdzKSkKKwkJCXJtLT5tX2luYy5pX2hkci5oX2ZsYWdzIHw9IFJEU19GTEFHX1JFVFJBTlNNSVRURUQ7CisKKwkJLyogSWYgaXQgaGFzIGEgUkRNQSBvcCwgdGVsbCB0aGUgcGVlciB3ZSBkaWQgaXQuIFRoaXMgaXMKKwkJICogdXNlZCBieSB0aGUgcGVlciB0byByZWxlYXNlIHVzZS1vbmNlIFJETUEgTVJzLiAqLworCQlpZiAocm0tPm1fcmRtYV9vcCkgeworCQkJc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWEgZXh0X2hkcjsKKworCQkJZXh0X2hkci5oX3JkbWFfcmtleSA9IGNwdV90b19iZTMyKHJtLT5tX3JkbWFfb3AtPnJfa2V5KTsKKwkJCXJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oJnJtLT5tX2luYy5pX2hkciwKKwkJCQkJUkRTX0VYVEhEUl9SRE1BLCAmZXh0X2hkciwgc2l6ZW9mKGV4dF9oZHIpKTsKKwkJfQorCQlpZiAocm0tPm1fcmRtYV9jb29raWUpIHsKKwkJCXJkc19tZXNzYWdlX2FkZF9yZG1hX2Rlc3RfZXh0ZW5zaW9uKCZybS0+bV9pbmMuaV9oZHIsCisJCQkJCXJkc19yZG1hX2Nvb2tpZV9rZXkocm0tPm1fcmRtYV9jb29raWUpLAorCQkJCQlyZHNfcmRtYV9jb29raWVfb2Zmc2V0KHJtLT5tX3JkbWFfY29va2llKSk7CisJCX0KKworCQkvKiBOb3RlIC0gcmRzX2l3X3BpZ2d5Yl9hY2sgY2xlYXJzIHRoZSBBQ0tfUkVRVUlSRUQgYml0LCBzbworCQkgKiB3ZSBzaG91bGQgbm90IGRvIHRoaXMgdW5sZXNzIHdlIGhhdmUgYSBjaGFuY2Ugb2YgYXQgbGVhc3QKKwkJICogc3RpY2tpbmcgdGhlIGhlYWRlciBpbnRvIHRoZSBzZW5kIHJpbmcuIFdoaWNoIGlzIHdoeSB3ZQorCQkgKiBzaG91bGQgY2FsbCByZHNfaXdfcmluZ19hbGxvYyBmaXJzdC4gKi8KKwkJcm0tPm1faW5jLmlfaGRyLmhfYWNrID0gY3B1X3RvX2JlNjQocmRzX2l3X3BpZ2d5Yl9hY2soaWMpKTsKKwkJcmRzX21lc3NhZ2VfbWFrZV9jaGVja3N1bSgmcm0tPm1faW5jLmlfaGRyKTsKKworCQkvKgorCQkgKiBVcGRhdGUgYWR2X2NyZWRpdHMgc2luY2Ugd2UgcmVzZXQgdGhlIEFDS19SRVFVSVJFRCBiaXQuCisJCSAqLworCQlyZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoaWMsIDAsICZwb3N0ZWQsIDEpOworCQlhZHZfY3JlZGl0cyArPSBwb3N0ZWQ7CisJCUJVR19PTihhZHZfY3JlZGl0cyA+IDI1NSk7CisJfSBlbHNlIGlmIChpYy0+aV9ybSAhPSBybSkKKwkJQlVHKCk7CisKKwlzZW5kID0gJmljLT5pX3NlbmRzW3Bvc107CisJZmlyc3QgPSBzZW5kOworCXByZXYgPSBOVUxMOworCXNjYXQgPSAmcm0tPm1fc2dbc2ddOworCXNlbnQgPSAwOworCWkgPSAwOworCisJLyogU29tZXRpbWVzIHlvdSB3YW50IHRvIHB1dCBhIGZlbmNlIGJldHdlZW4gYW4gUkRNQQorCSAqIFJFQUQgYW5kIHRoZSBmb2xsb3dpbmcgU0VORC4KKwkgKiBXZSBjb3VsZCBlaXRoZXIgZG8gdGhpcyBhbGwgdGhlIHRpbWUKKwkgKiBvciB3aGVuIHJlcXVlc3RlZCBieSB0aGUgdXNlci4gUmlnaHQgbm93LCB3ZSBsZXQKKwkgKiB0aGUgYXBwbGljYXRpb24gY2hvb3NlLgorCSAqLworCWlmIChybS0+bV9yZG1hX29wICYmIHJtLT5tX3JkbWFfb3AtPnJfZmVuY2UpCisJCXNlbmRfZmxhZ3MgPSBJQl9TRU5EX0ZFTkNFOworCisJLyoKKwkgKiBXZSBjb3VsZCBiZSBjb3B5aW5nIHRoZSBoZWFkZXIgaW50byB0aGUgdW51c2VkIHRhaWwgb2YgdGhlIHBhZ2UuCisJICogVGhhdCB3b3VsZCBuZWVkIHRvIGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZSB3aGVuIHRob3NlIHBhZ2VzIG1pZ2h0CisJICogYmUgbWFwcGVkIHVzZXJzcGFjZSBwYWdlcyBvciBwYWdlIGNhY2hlIHBhZ2VzLiAgU28gaW5zdGVhZCB3ZSBhbHdheXMKKwkgKiB1c2UgYSBzZWNvbmQgc2dlIGFuZCBvdXIgbG9uZy1saXZlZCByaW5nIG9mIG1hcHBlZCBoZWFkZXJzLiAgV2Ugc2VuZAorCSAqIHRoZSBoZWFkZXIgYWZ0ZXIgdGhlIGRhdGEgc28gdGhhdCB0aGUgZGF0YSBwYXlsb2FkIGNhbiBiZSBhbGlnbmVkIG9uCisJICogdGhlIHJlY2VpdmVyLgorCSAqLworCisJLyogaGFuZGxlIGEgMC1sZW4gbWVzc2FnZSAqLworCWlmIChiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pID09IDApIHsKKwkJcmRzX2l3X3htaXRfcG9wdWxhdGVfd3IoaWMsIHNlbmQsIHBvcywgMCwgMCwgc2VuZF9mbGFncyk7CisJCWdvdG8gYWRkX2hlYWRlcjsKKwl9CisKKwkvKiBpZiB0aGVyZSdzIGRhdGEgcmVmZXJlbmNlIGl0IHdpdGggYSBjaGFpbiBvZiB3b3JrIHJlcXMgKi8KKwlmb3IgKDsgaSA8IHdvcmtfYWxsb2MgJiYgc2NhdCAhPSAmcm0tPm1fc2dbcm0tPm1fY291bnRdOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IGxlbjsKKworCQlzZW5kID0gJmljLT5pX3NlbmRzW3Bvc107CisKKwkJbGVuID0gbWluKFJEU19GUkFHX1NJWkUsIGliX3NnX2RtYV9sZW4oZGV2LCBzY2F0KSAtIG9mZik7CisJCXJkc19pd194bWl0X3BvcHVsYXRlX3dyKGljLCBzZW5kLCBwb3MsCisJCQkJaWJfc2dfZG1hX2FkZHJlc3MoZGV2LCBzY2F0KSArIG9mZiwgbGVuLAorCQkJCXNlbmRfZmxhZ3MpOworCisJCS8qCisJCSAqIFdlIHdhbnQgdG8gZGVsYXkgc2lnbmFsaW5nIGNvbXBsZXRpb25zIGp1c3QgZW5vdWdoIHRvIGdldAorCQkgKiB0aGUgYmF0Y2hpbmcgYmVuZWZpdHMgYnV0IG5vdCBzbyBtdWNoIHRoYXQgd2UgY3JlYXRlIGRlYWQgdGltZQorCQkgKiBvbiB0aGUgd2lyZS4KKwkJICovCisJCWlmIChpYy0+aV91bnNpZ25hbGVkX3dycy0tID09IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfd3JzID0gcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JzOworCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzIHw9IElCX1NFTkRfU0lHTkFMRUQgfCBJQl9TRU5EX1NPTElDSVRFRDsKKwkJfQorCisJCWljLT5pX3Vuc2lnbmFsZWRfYnl0ZXMgLT0gbGVuOworCQlpZiAoaWMtPmlfdW5zaWduYWxlZF9ieXRlcyA8PSAwKSB7CisJCQlpYy0+aV91bnNpZ25hbGVkX2J5dGVzID0gcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfYnl0ZXM7CisJCQlzZW5kLT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQl9CisKKwkJLyoKKwkJICogQWx3YXlzIHNpZ25hbCB0aGUgbGFzdCBvbmUgaWYgd2UncmUgc3RvcHBpbmcgZHVlIHRvIGZsb3cgY29udHJvbC4KKwkJICovCisJCWlmIChmbG93X2NvbnRyb2xsZWQgJiYgaSA9PSAod29ya19hbGxvYy0xKSkKKwkJCXNlbmQtPnNfd3Iuc2VuZF9mbGFncyB8PSBJQl9TRU5EX1NJR05BTEVEIHwgSUJfU0VORF9TT0xJQ0lURUQ7CisKKwkJcmRzZGVidWcoInNlbmQgJXAgd3IgJXAgbnVtX3NnZSAldSBuZXh0ICVwXG4iLCBzZW5kLAorCQkJICZzZW5kLT5zX3dyLCBzZW5kLT5zX3dyLm51bV9zZ2UsIHNlbmQtPnNfd3IubmV4dCk7CisKKwkJc2VudCArPSBsZW47CisJCW9mZiArPSBsZW47CisJCWlmIChvZmYgPT0gaWJfc2dfZG1hX2xlbihkZXYsIHNjYXQpKSB7CisJCQlzY2F0Kys7CisJCQlvZmYgPSAwOworCQl9CisKK2FkZF9oZWFkZXI6CisJCS8qIFRhY2sgb24gdGhlIGhlYWRlciBhZnRlciB0aGUgZGF0YS4gVGhlIGhlYWRlciBTR0Ugc2hvdWxkIGFscmVhZHkKKwkJICogaGF2ZSBiZWVuIHNldCB1cCB0byBwb2ludCB0byB0aGUgcmlnaHQgaGVhZGVyIGJ1ZmZlci4gKi8KKwkJbWVtY3B5KCZpYy0+aV9zZW5kX2hkcnNbcG9zXSwgJnJtLT5tX2luYy5pX2hkciwgc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSk7CisKKwkJaWYgKDApIHsKKwkJCXN0cnVjdCByZHNfaGVhZGVyICpoZHIgPSAmaWMtPmlfc2VuZF9oZHJzW3Bvc107CisKKwkJCXByaW50ayhLRVJOX05PVElDRSAic2VuZCBXUiBkcG9ydD0ldSBmbGFncz0weCV4IGxlbj0lZFxuIiwKKwkJCQliZTE2X3RvX2NwdShoZHItPmhfZHBvcnQpLAorCQkJCWhkci0+aF9mbGFncywKKwkJCQliZTMyX3RvX2NwdShoZHItPmhfbGVuKSk7CisJCX0KKwkJaWYgKGFkdl9jcmVkaXRzKSB7CisJCQlzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyID0gJmljLT5pX3NlbmRfaGRyc1twb3NdOworCisJCQkvKiBhZGQgY3JlZGl0IGFuZCByZWRvIHRoZSBoZWFkZXIgY2hlY2tzdW0gKi8KKwkJCWhkci0+aF9jcmVkaXQgPSBhZHZfY3JlZGl0czsKKwkJCXJkc19tZXNzYWdlX21ha2VfY2hlY2tzdW0oaGRyKTsKKwkJCWFkdl9jcmVkaXRzID0gMDsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9jcmVkaXRfdXBkYXRlcyk7CisJCX0KKworCQlpZiAocHJldikKKwkJCXByZXYtPnNfd3IubmV4dCA9ICZzZW5kLT5zX3dyOworCQlwcmV2ID0gc2VuZDsKKworCQlwb3MgPSAocG9zICsgMSkgJSBpYy0+aV9zZW5kX3Jpbmcud19ucjsKKwl9CisKKwkvKiBBY2NvdW50IHRoZSBSRFMgaGVhZGVyIGluIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2Ugc2VudCwgYnV0IGp1c3Qgb25jZS4KKwkgKiBUaGUgY2FsbGVyIGhhcyBubyBjb25jZXB0IG9mIGZyYWdtZW50YXRpb24uICovCisJaWYgKGhkcl9vZmYgPT0gMCkKKwkJc2VudCArPSBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpOworCisJLyogaWYgd2UgZmluaXNoZWQgdGhlIG1lc3NhZ2UgdGhlbiBzZW5kIGNvbXBsZXRpb24gb3ducyBpdCAqLworCWlmIChzY2F0ID09ICZybS0+bV9zZ1tybS0+bV9jb3VudF0pIHsKKwkJcHJldi0+c19ybSA9IGljLT5pX3JtOworCQlwcmV2LT5zX3dyLnNlbmRfZmxhZ3MgfD0gSUJfU0VORF9TSUdOQUxFRCB8IElCX1NFTkRfU09MSUNJVEVEOworCQlpYy0+aV9ybSA9IE5VTEw7CisJfQorCisJaWYgKGkgPCB3b3JrX2FsbG9jKSB7CisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGkpOworCQl3b3JrX2FsbG9jID0gaTsKKwl9CisJaWYgKGljLT5pX2Zsb3djdGwgJiYgaSA8IGNyZWRpdF9hbGxvYykKKwkJcmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoY29ubiwgY3JlZGl0X2FsbG9jIC0gaSk7CisKKwkvKiBYWFggbmVlZCB0byB3b3JyeSBhYm91dCBmYWlsZWRfd3IgYW5kIHBhcnRpYWwgc2VuZHMuICovCisJZmFpbGVkX3dyID0gJmZpcnN0LT5zX3dyOworCXJldCA9IGliX3Bvc3Rfc2VuZChpYy0+aV9jbV9pZC0+cXAsICZmaXJzdC0+c193ciwgJmZhaWxlZF93cik7CisJcmRzZGVidWcoImljICVwIGZpcnN0ICVwICh3ciAlcCkgcmV0ICVkIHdyICVwXG4iLCBpYywKKwkJIGZpcnN0LCAmZmlyc3QtPnNfd3IsIHJldCwgZmFpbGVkX3dyKTsKKwlCVUdfT04oZmFpbGVkX3dyICE9ICZmaXJzdC0+c193cik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IGliX3Bvc3Rfc2VuZCB0byAlcEk0ICIKKwkJICAgICAgICJyZXR1cm5lZCAlZFxuIiwgJmNvbm4tPmNfZmFkZHIsIHJldCk7CisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCWlmIChwcmV2LT5zX3JtKSB7CisJCQlpYy0+aV9ybSA9IHByZXYtPnNfcm07CisJCQlwcmV2LT5zX3JtID0gTlVMTDsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBzZW50Oworb3V0OgorCUJVR19PTihhZHZfY3JlZGl0cyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX2l3X2J1aWxkX3NlbmRfZmFzdHJlZyhzdHJ1Y3QgcmRzX2l3X2RldmljZSAqcmRzX2l3ZGV2LCBzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljLCBzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZCwgaW50IG5lbnQsIGludCBsZW4sIHU2NCBzZ19hZGRyKQoreworCUJVR19PTihuZW50ID4gc2VuZC0+c19wYWdlX2xpc3QtPm1heF9wYWdlX2xpc3RfbGVuKTsKKwkvKgorCSAqIFBlcmZvcm0gYSBXUiBmb3IgdGhlIGZhc3RfcmVnX21yLiBFYWNoIGluZGl2aWR1YWwgcGFnZQorCSAqIGluIHRoZSBzZyBsaXN0IGlzIGFkZGVkIHRvIHRoZSBmYXN0IHJlZyBwYWdlIGxpc3QgYW5kIHBsYWNlZAorCSAqIGluc2lkZSB0aGUgZmFzdF9yZWdfbXIgV1IuCisJICovCisJc2VuZC0+c193ci5vcGNvZGUgPSBJQl9XUl9GQVNUX1JFR19NUjsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLmxlbmd0aCA9IGxlbjsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnJrZXkgPSBzZW5kLT5zX21yLT5ya2V5OworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcucGFnZV9saXN0ID0gc2VuZC0+c19wYWdlX2xpc3Q7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5wYWdlX2xpc3RfbGVuID0gbmVudDsKKwlzZW5kLT5zX3dyLndyLmZhc3RfcmVnLnBhZ2Vfc2hpZnQgPSByZHNfaXdkZXYtPnBhZ2Vfc2hpZnQ7CisJc2VuZC0+c193ci53ci5mYXN0X3JlZy5hY2Nlc3NfZmxhZ3MgPSBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOworCXNlbmQtPnNfd3Iud3IuZmFzdF9yZWcuaW92YV9zdGFydCA9IHNnX2FkZHI7CisKKwlpYl91cGRhdGVfZmFzdF9yZWdfa2V5KHNlbmQtPnNfbXIsIHNlbmQtPnNfcmVtYXBfY291bnQrKyk7Cit9CisKK2ludCByZHNfaXdfeG1pdF9yZG1hKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X2Nvbm5lY3Rpb24gKmljID0gY29ubi0+Y190cmFuc3BvcnRfZGF0YTsKKwlzdHJ1Y3QgcmRzX2l3X3NlbmRfd29yayAqc2VuZCA9IE5VTEw7CisJc3RydWN0IHJkc19pd19zZW5kX3dvcmsgKmZpcnN0OworCXN0cnVjdCByZHNfaXdfc2VuZF93b3JrICpwcmV2OworCXN0cnVjdCBpYl9zZW5kX3dyICpmYWlsZWRfd3I7CisJc3RydWN0IHJkc19pd19kZXZpY2UgKnJkc19pd2RldjsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQ7CisJdW5zaWduZWQgbG9uZyBsZW47CisJdTY0IHJlbW90ZV9hZGRyID0gb3AtPnJfcmVtb3RlX2FkZHI7CisJdTMyIHBvcywgZnJfcG9zOworCXUzMiB3b3JrX2FsbG9jOworCXUzMiBpOworCXUzMiBqOworCWludCBzZW50OworCWludCByZXQ7CisJaW50IG51bV9zZ2U7CisKKwlyZHNfaXdkZXYgPSBpYl9nZXRfY2xpZW50X2RhdGEoaWMtPmlfY21faWQtPmRldmljZSwgJnJkc19pd19jbGllbnQpOworCisJLyogbWFwIHRoZSBtZXNzYWdlIHRoZSBmaXJzdCB0aW1lIHdlIHNlZSBpdCAqLworCWlmICghb3AtPnJfbWFwcGVkKSB7CisJCW9wLT5yX2NvdW50ID0gaWJfZG1hX21hcF9zZyhpYy0+aV9jbV9pZC0+ZGV2aWNlLAorCQkJCQlvcC0+cl9zZywgb3AtPnJfbmVudHMsIChvcC0+cl93cml0ZSkgPworCQkJCQlETUFfVE9fREVWSUNFIDogRE1BX0ZST01fREVWSUNFKTsKKwkJcmRzZGVidWcoImljICVwIG1hcHBpbmcgb3AgJXA6ICVkXG4iLCBpYywgb3AsIG9wLT5yX2NvdW50KTsKKwkJaWYgKG9wLT5yX2NvdW50ID09IDApIHsKKwkJCXJkc19pd19zdGF0c19pbmMoc19pd190eF9zZ19tYXBwaW5nX2ZhaWx1cmUpOworCQkJcmV0ID0gLUVOT01FTTsgLyogWFhYID8gKi8KKwkJCWdvdG8gb3V0OworCQl9CisKKwkJb3AtPnJfbWFwcGVkID0gMTsKKwl9CisKKwlpZiAoIW9wLT5yX3dyaXRlKSB7CisJCS8qIEFsbG9jIHNwYWNlIG9uIHRoZSBzZW5kIHF1ZXVlIGZvciB0aGUgZmFzdHJlZyAqLworCQl3b3JrX2FsbG9jID0gcmRzX2l3X3JpbmdfYWxsb2MoJmljLT5pX3NlbmRfcmluZywgMSwgJmZyX3Bvcyk7CisJCWlmICh3b3JrX2FsbG9jICE9IDEpIHsKKwkJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCQlyZHNfaXdfc3RhdHNfaW5jKHNfaXdfdHhfcmluZ19mdWxsKTsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qCisJICogSW5zdGVhZCBvZiBrbm93aW5nIGhvdyB0byByZXR1cm4gYSBwYXJ0aWFsIHJkbWEgcmVhZC93cml0ZSB3ZSBpbnNpc3QgdGhhdCB0aGVyZQorCSAqIGJlIGVub3VnaCB3b3JrIHJlcXVlc3RzIHRvIHNlbmQgdGhlIGVudGlyZSBtZXNzYWdlLgorCSAqLworCWkgPSBjZWlsKG9wLT5yX2NvdW50LCByZHNfaXdkZXYtPm1heF9zZ2UpOworCisJd29ya19hbGxvYyA9IHJkc19pd19yaW5nX2FsbG9jKCZpYy0+aV9zZW5kX3JpbmcsIGksICZwb3MpOworCWlmICh3b3JrX2FsbG9jICE9IGkpIHsKKwkJcmRzX2l3X3JpbmdfdW5hbGxvYygmaWMtPmlfc2VuZF9yaW5nLCB3b3JrX2FsbG9jKTsKKwkJcmRzX2l3X3N0YXRzX2luYyhzX2l3X3R4X3JpbmdfZnVsbCk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXNlbmQgPSAmaWMtPmlfc2VuZHNbcG9zXTsKKwlpZiAoIW9wLT5yX3dyaXRlKSB7CisJCWZpcnN0ID0gcHJldiA9ICZpYy0+aV9zZW5kc1tmcl9wb3NdOworCX0gZWxzZSB7CisJCWZpcnN0ID0gc2VuZDsKKwkJcHJldiA9IE5VTEw7CisJfQorCXNjYXQgPSAmb3AtPnJfc2dbMF07CisJc2VudCA9IDA7CisJbnVtX3NnZSA9IG9wLT5yX2NvdW50OworCisJZm9yIChpID0gMDsgaSA8IHdvcmtfYWxsb2MgJiYgc2NhdCAhPSAmb3AtPnJfc2dbb3AtPnJfY291bnRdOyBpKyspIHsKKwkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gMDsKKwkJc2VuZC0+c19xdWV1ZWQgPSBqaWZmaWVzOworCisJCS8qCisJCSAqIFdlIHdhbnQgdG8gZGVsYXkgc2lnbmFsaW5nIGNvbXBsZXRpb25zIGp1c3QgZW5vdWdoIHRvIGdldAorCQkgKiB0aGUgYmF0Y2hpbmcgYmVuZWZpdHMgYnV0IG5vdCBzbyBtdWNoIHRoYXQgd2UgY3JlYXRlIGRlYWQgdGltZSBvbiB0aGUgd2lyZS4KKwkJICovCisJCWlmIChpYy0+aV91bnNpZ25hbGVkX3dycy0tID09IDApIHsKKwkJCWljLT5pX3Vuc2lnbmFsZWRfd3JzID0gcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JzOworCQkJc2VuZC0+c193ci5zZW5kX2ZsYWdzID0gSUJfU0VORF9TSUdOQUxFRDsKKwkJfQorCisJCS8qIFRvIGF2b2lkIHRoZSBuZWVkIHRvIGhhdmUgdGhlIHBsdW1iaW5nIHRvIGludmFsaWRhdGUgdGhlIGZhc3RyZWdfbXIgdXNlZAorCQkgKiBmb3IgbG9jYWwgYWNjZXNzIGFmdGVyIFJEUyBpcyBmaW5pc2hlZCB3aXRoIGl0LCB1c2luZworCQkgKiBJQl9XUl9SRE1BX1JFQURfV0lUSF9JTlYgd2lsbCBpbnZhbGlkYXRlIGl0IGFmdGVyIHRoZSByZWFkIGhhcyBjb21wbGV0ZWQuCisJCSAqLworCQlpZiAob3AtPnJfd3JpdGUpCisJCQlzZW5kLT5zX3dyLm9wY29kZSA9IElCX1dSX1JETUFfV1JJVEU7CisJCWVsc2UKKwkJCXNlbmQtPnNfd3Iub3Bjb2RlID0gSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WOworCisJCXNlbmQtPnNfd3Iud3IucmRtYS5yZW1vdGVfYWRkciA9IHJlbW90ZV9hZGRyOworCQlzZW5kLT5zX3dyLndyLnJkbWEucmtleSA9IG9wLT5yX2tleTsKKwkJc2VuZC0+c19vcCA9IG9wOworCisJCWlmIChudW1fc2dlID4gcmRzX2l3ZGV2LT5tYXhfc2dlKSB7CisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSByZHNfaXdkZXYtPm1heF9zZ2U7CisJCQludW1fc2dlIC09IHJkc19pd2Rldi0+bWF4X3NnZTsKKwkJfSBlbHNlCisJCQlzZW5kLT5zX3dyLm51bV9zZ2UgPSBudW1fc2dlOworCisJCXNlbmQtPnNfd3IubmV4dCA9IE5VTEw7CisKKwkJaWYgKHByZXYpCisJCQlwcmV2LT5zX3dyLm5leHQgPSAmc2VuZC0+c193cjsKKworCQlmb3IgKGogPSAwOyBqIDwgc2VuZC0+c193ci5udW1fc2dlICYmIHNjYXQgIT0gJm9wLT5yX3NnW29wLT5yX2NvdW50XTsgaisrKSB7CisJCQlsZW4gPSBpYl9zZ19kbWFfbGVuKGljLT5pX2NtX2lkLT5kZXZpY2UsIHNjYXQpOworCisJCQlpZiAoc2VuZC0+c193ci5vcGNvZGUgPT0gSUJfV1JfUkRNQV9SRUFEX1dJVEhfSU5WKQorCQkJCXNlbmQtPnNfcGFnZV9saXN0LT5wYWdlX2xpc3Rbal0gPSBpYl9zZ19kbWFfYWRkcmVzcyhpYy0+aV9jbV9pZC0+ZGV2aWNlLCBzY2F0KTsKKwkJCWVsc2UgeworCQkJCXNlbmQtPnNfc2dlW2pdLmFkZHIgPSBpYl9zZ19kbWFfYWRkcmVzcyhpYy0+aV9jbV9pZC0+ZGV2aWNlLCBzY2F0KTsKKwkJCQlzZW5kLT5zX3NnZVtqXS5sZW5ndGggPSBsZW47CisJCQkJc2VuZC0+c19zZ2Vbal0ubGtleSA9IHJkc19pd19sb2NhbF9kbWFfbGtleShpYyk7CisJCQl9CisKKwkJCXNlbnQgKz0gbGVuOworCQkJcmRzZGVidWcoImljICVwIHNlbnQgJWQgcmVtb3RlX2FkZHIgJWxsdVxuIiwgaWMsIHNlbnQsIHJlbW90ZV9hZGRyKTsKKwkJCXJlbW90ZV9hZGRyICs9IGxlbjsKKworCQkJc2NhdCsrOworCQl9CisKKwkJaWYgKHNlbmQtPnNfd3Iub3Bjb2RlID09IElCX1dSX1JETUFfUkVBRF9XSVRIX0lOVikgeworCQkJc2VuZC0+c193ci5udW1fc2dlID0gMTsKKwkJCXNlbmQtPnNfc2dlWzBdLmFkZHIgPSBjb25uLT5jX3htaXRfcm0tPm1fcnMtPnJzX3VzZXJfYWRkcjsKKwkJCXNlbmQtPnNfc2dlWzBdLmxlbmd0aCA9IGNvbm4tPmNfeG1pdF9ybS0+bV9ycy0+cnNfdXNlcl9ieXRlczsKKwkJCXNlbmQtPnNfc2dlWzBdLmxrZXkgPSBpYy0+aV9zZW5kc1tmcl9wb3NdLnNfbXItPmxrZXk7CisJCX0KKworCQlyZHNkZWJ1Zygic2VuZCAlcCB3ciAlcCBudW1fc2dlICV1IG5leHQgJXBcbiIsIHNlbmQsCisJCQkmc2VuZC0+c193ciwgc2VuZC0+c193ci5udW1fc2dlLCBzZW5kLT5zX3dyLm5leHQpOworCisJCXByZXYgPSBzZW5kOworCQlpZiAoKytzZW5kID09ICZpYy0+aV9zZW5kc1tpYy0+aV9zZW5kX3Jpbmcud19ucl0pCisJCQlzZW5kID0gaWMtPmlfc2VuZHM7CisJfQorCisJLyogaWYgd2UgZmluaXNoZWQgdGhlIG1lc3NhZ2UgdGhlbiBzZW5kIGNvbXBsZXRpb24gb3ducyBpdCAqLworCWlmIChzY2F0ID09ICZvcC0+cl9zZ1tvcC0+cl9jb3VudF0pCisJCWZpcnN0LT5zX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOworCisJaWYgKGkgPCB3b3JrX2FsbG9jKSB7CisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyAtIGkpOworCQl3b3JrX2FsbG9jID0gaTsKKwl9CisKKwkvKiBPbiBpV0FSUCwgbG9jYWwgbWVtb3J5IGFjY2VzcyBieSBhIHJlbW90ZSBzeXN0ZW0gKGllLCBSRE1BIFJlYWQpIGlzIG5vdAorCSAqIHJlY29tbWVuZGVkLiAgUHV0dGluZyB0aGUgbGtleSBvbiB0aGUgd2lyZSBpcyBhIHNlY3VyaXR5IGhvbGUsIGFzIGl0IGNhbgorCSAqIGFsbG93IGZvciBtZW1vcnkgYWNjZXNzIHRvIGFsbCBvZiBtZW1vcnkgb24gdGhlIHJlbW90ZSBzeXN0ZW0uICBTb21lCisJICogYWRhcHRlcnMgZG8gbm90IGFsbG93IHVzaW5nIHRoZSBsa2V5IGZvciB0aGlzIGF0IGFsbC4gIFRvIGJ5cGFzcyB0aGlzIHVzZSBhCisJICogZmFzdHJlZ19tciAob3IgcG9zc2libHkgYSBkbWFfbXIpCisJICovCisJaWYgKCFvcC0+cl93cml0ZSkgeworCQlyZHNfaXdfYnVpbGRfc2VuZF9mYXN0cmVnKHJkc19pd2RldiwgaWMsICZpYy0+aV9zZW5kc1tmcl9wb3NdLAorCQkJb3AtPnJfY291bnQsIHNlbnQsIGNvbm4tPmNfeG1pdF9ybS0+bV9ycy0+cnNfdXNlcl9hZGRyKTsKKwkJd29ya19hbGxvYysrOworCX0KKworCWZhaWxlZF93ciA9ICZmaXJzdC0+c193cjsKKwlyZXQgPSBpYl9wb3N0X3NlbmQoaWMtPmlfY21faWQtPnFwLCAmZmlyc3QtPnNfd3IsICZmYWlsZWRfd3IpOworCXJkc2RlYnVnKCJpYyAlcCBmaXJzdCAlcCAod3IgJXApIHJldCAlZCB3ciAlcFxuIiwgaWMsCisJCSBmaXJzdCwgJmZpcnN0LT5zX3dyLCByZXQsIGZhaWxlZF93cik7CisJQlVHX09OKGZhaWxlZF93ciAhPSAmZmlyc3QtPnNfd3IpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL0lXOiByZG1hIGliX3Bvc3Rfc2VuZCB0byAlcEk0ICIKKwkJICAgICAgICJyZXR1cm5lZCAlZFxuIiwgJmNvbm4tPmNfZmFkZHIsIHJldCk7CisJCXJkc19pd19yaW5nX3VuYWxsb2MoJmljLT5pX3NlbmRfcmluZywgd29ya19hbGxvYyk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgcmRzX2l3X3htaXRfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfaXdfY29ubmVjdGlvbiAqaWMgPSBjb25uLT5jX3RyYW5zcG9ydF9kYXRhOworCisJLyogV2UgbWF5IGhhdmUgYSBwZW5kaW5nIEFDSyBvciB3aW5kb3cgdXBkYXRlIHdlIHdlcmUgdW5hYmxlCisJICogdG8gc2VuZCBwcmV2aW91c2x5IChkdWUgdG8gZmxvdyBjb250cm9sKS4gVHJ5IGFnYWluLiAqLworCXJkc19pd19hdHRlbXB0X2FjayhpYyk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3N0YXRzLmMgYi9uZXQvcmRzL2l3X3N0YXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjN2U4ZgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvaXdfc3RhdHMuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgIml3LmgiCisKK0RFRklORV9QRVJfQ1BVKHN0cnVjdCByZHNfaXdfc3RhdGlzdGljcywgcmRzX2l3X3N0YXRzKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKK3N0YXRpYyBjaGFyICpyZHNfaXdfc3RhdF9uYW1lc1tdID0geworCSJpd19jb25uZWN0X3JhY2VkIiwKKwkiaXdfbGlzdGVuX2Nsb3NlZF9zdGFsZSIsCisJIml3X3R4X2NxX2NhbGwiLAorCSJpd190eF9jcV9ldmVudCIsCisJIml3X3R4X3JpbmdfZnVsbCIsCisJIml3X3R4X3Rocm90dGxlIiwKKwkiaXdfdHhfc2dfbWFwcGluZ19mYWlsdXJlIiwKKwkiaXdfdHhfc3RhbGxlZCIsCisJIml3X3R4X2NyZWRpdF91cGRhdGVzIiwKKwkiaXdfcnhfY3FfY2FsbCIsCisJIml3X3J4X2NxX2V2ZW50IiwKKwkiaXdfcnhfcmluZ19lbXB0eSIsCisJIml3X3J4X3JlZmlsbF9mcm9tX2NxIiwKKwkiaXdfcnhfcmVmaWxsX2Zyb21fdGhyZWFkIiwKKwkiaXdfcnhfYWxsb2NfbGltaXQiLAorCSJpd19yeF9jcmVkaXRfdXBkYXRlcyIsCisJIml3X2Fja19zZW50IiwKKwkiaXdfYWNrX3NlbmRfZmFpbHVyZSIsCisJIml3X2Fja19zZW5kX2RlbGF5ZWQiLAorCSJpd19hY2tfc2VuZF9waWdneWJhY2tlZCIsCisJIml3X2Fja19yZWNlaXZlZCIsCisJIml3X3JkbWFfbXJfYWxsb2MiLAorCSJpd19yZG1hX21yX2ZyZWUiLAorCSJpd19yZG1hX21yX3VzZWQiLAorCSJpd19yZG1hX21yX3Bvb2xfZmx1c2giLAorCSJpd19yZG1hX21yX3Bvb2xfd2FpdCIsCisJIml3X3JkbWFfbXJfcG9vbF9kZXBsZXRlZCIsCit9OworCit1bnNpZ25lZCBpbnQgcmRzX2l3X3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgIHVuc2lnbmVkIGludCBhdmFpbCkKK3sKKwlzdHJ1Y3QgcmRzX2l3X3N0YXRpc3RpY3Mgc3RhdHMgPSB7MCwgfTsKKwl1aW50NjRfdCAqc3JjOworCXVpbnQ2NF90ICpzdW07CisJc2l6ZV90IGk7CisJaW50IGNwdTsKKworCWlmIChhdmFpbCA8IEFSUkFZX1NJWkUocmRzX2l3X3N0YXRfbmFtZXMpKQorCQlnb3RvIG91dDsKKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXNyYyA9ICh1aW50NjRfdCAqKSYocGVyX2NwdShyZHNfaXdfc3RhdHMsIGNwdSkpOworCQlzdW0gPSAodWludDY0X3QgKikmc3RhdHM7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RhdHMpIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaSsrKQorCQkJKihzdW0rKykgKz0gKihzcmMrKyk7CisJfQorCisJcmRzX3N0YXRzX2luZm9fY29weShpdGVyLCAodWludDY0X3QgKikmc3RhdHMsIHJkc19pd19zdGF0X25hbWVzLAorCQkJICAgIEFSUkFZX1NJWkUocmRzX2l3X3N0YXRfbmFtZXMpKTsKK291dDoKKwlyZXR1cm4gQVJSQVlfU0laRShyZHNfaXdfc3RhdF9uYW1lcyk7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2l3X3N5c2N0bC5jIGIvbmV0L3Jkcy9pd19zeXNjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTkwNjc4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9pd19zeXNjdGwuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAiaXcuaCIKKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZHNfaXdfc3lzY3RsX2hkcjsKKwordW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyID0gUkRTX0lXX0RFRkFVTFRfU0VORF9XUjsKK3Vuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfcmVjdl93ciA9IFJEU19JV19ERUZBVUxUX1JFQ1ZfV1I7Cit1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbiA9ICgxMjggKiAxMDI0ICogMTAyNCkgLyBSRFNfRlJBR19TSVpFOworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfd3JfbWluID0gMTsKKy8qIGhhcmR3YXJlIHdpbGwgZmFpbCBDUSBjcmVhdGlvbiBsb25nIGJlZm9yZSB0aGlzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF93cl9tYXggPSAodTMyKX4wOworCit1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dycyA9IDE2Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JfbWluID0gMTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyX21heCA9IDY0OworCit1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzID0gKDE2IDw8IDIwKTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21pbiA9IDE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlc19tYXggPSB+MFVMOworCit1bnNpZ25lZCBpbnQgcmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2wgPSAxOworCitjdGxfdGFibGUgcmRzX2l3X3N5c2N0bF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfc2VuZF93ciIsCisJCS5kYXRhCQk9ICZyZHNfaXdfc3lzY3RsX21heF9zZW5kX3dyLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaXdfc3lzY3RsX21heF93cl9taW4sCisJCS5leHRyYTIJCT0gJnJkc19pd19zeXNjdGxfbWF4X3dyX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfcmVjdl93ciIsCisJCS5kYXRhCQk9ICZyZHNfaXdfc3lzY3RsX21heF9yZWN2X3dyLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaXdfc3lzY3RsX21heF93cl9taW4sCisJCS5leHRyYTIJCT0gJnJkc19pd19zeXNjdGxfbWF4X3dyX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfdW5zaWduYWxlZF93ciIsCisJCS5kYXRhCQk9ICZyZHNfaXdfc3lzY3RsX21heF91bnNpZ193cnMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX3dyX21pbiwKKwkJLmV4dHJhMgkJPSAmcmRzX2l3X3N5c2N0bF9tYXhfdW5zaWdfd3JfbWF4LAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gIm1heF91bnNpZ25hbGVkX2J5dGVzIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvdWxvbmd2ZWNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfaXdfc3lzY3RsX21heF91bnNpZ19ieXRlc19taW4sCisJCS5leHRyYTIJCT0gJnJkc19pd19zeXNjdGxfbWF4X3Vuc2lnX2J5dGVzX21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lICAgICAgID0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZSAgICAgICA9ICJtYXhfcmVjdl9hbGxvY2F0aW9uIiwKKwkJLmRhdGEJCT0gJnJkc19pd19zeXNjdGxfbWF4X3JlY3ZfYWxsb2NhdGlvbiwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21pbm1heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJmbG93X2NvbnRyb2wiLAorCQkuZGF0YQkJPSAmcmRzX2l3X3N5c2N0bF9mbG93X2NvbnRyb2wsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKHJkc19pd19zeXNjdGxfZmxvd19jb250cm9sKSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeyAuY3RsX25hbWUgPSAwfQorfTsKKworc3RhdGljIHN0cnVjdCBjdGxfcGF0aCByZHNfaXdfc3lzY3RsX3BhdGhbXSA9IHsKKwl7IC5wcm9jbmFtZSA9ICJuZXQiLCAuY3RsX25hbWUgPSBDVExfTkVULCB9LAorCXsgLnByb2NuYW1lID0gInJkcyIsIC5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVELCB9LAorCXsgLnByb2NuYW1lID0gIml3IiwgLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQsIH0sCisJeyB9Cit9OworCit2b2lkIHJkc19pd19zeXNjdGxfZXhpdCh2b2lkKQoreworCWlmIChyZHNfaXdfc3lzY3RsX2hkcikKKwkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUocmRzX2l3X3N5c2N0bF9oZHIpOworfQorCitpbnQgX19pbml0IHJkc19pd19zeXNjdGxfaW5pdCh2b2lkKQoreworCXJkc19pd19zeXNjdGxfaGRyID0gcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKHJkc19pd19zeXNjdGxfcGF0aCwgcmRzX2l3X3N5c2N0bF90YWJsZSk7CisJaWYgKHJkc19pd19zeXNjdGxfaGRyID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9sb29wLmMgYi9uZXQvcmRzL2xvb3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTYxOTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9sb29wLmMKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKyNpbmNsdWRlICJsb29wLmgiCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9vcF9jb25uc19sb2NrKTsKK3N0YXRpYyBMSVNUX0hFQUQobG9vcF9jb25ucyk7CisKKy8qCisgKiBUaGlzICdsb29wYmFjaycgdHJhbnNwb3J0IGlzIGEgc3BlY2lhbCBjYXNlIGZvciBmbG93cyB0aGF0IG9yaWdpbmF0ZQorICogYW5kIHRlcm1pbmF0ZSBvbiB0aGUgc2FtZSBtYWNoaW5lLgorICoKKyAqIENvbm5lY3Rpb24gYnVpbGQtdXAgbm90aWNlcyBpZiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBpcyB0aG91Z2h0IG9mCisgKiBhcyBhIGxvY2FsIGFkZHJlc3MgYnkgYSB0cmFuc3BvcnQuICBBdCB0aGF0IHRpbWUgaXQgZGVjaWRlcyB0byB1c2UgdGhlCisgKiBsb29wYmFjayB0cmFuc3BvcnQgaW5zdGVhZCBvZiB0aGUgYm91bmQgdHJhbnNwb3J0IG9mIHRoZSBzZW5kaW5nIHNvY2tldC4KKyAqCisgKiBUaGUgbG9vcGJhY2sgdHJhbnNwb3J0J3Mgc2VuZGluZyBwYXRoIGp1c3QgaGFuZHMgdGhlIHNlbnQgcmRzX21lc3NhZ2UKKyAqIHN0cmFpZ2h0IHRvIHRoZSByZWNlaXZpbmcgcGF0aCB2aWEgYW4gZW1iZWRkZWQgcmRzX2luY29taW5nLgorICovCisKKy8qCisgKiBVc3VhbGx5IGEgbWVzc2FnZSB0cmFuc2l0cyBib3RoIHRoZSBzZW5kZXIgYW5kIHJlY2VpdmVyJ3MgY29ubnMgYXMgaXQKKyAqIGZsb3dzIHRvIHRoZSByZWNlaXZlci4gIEluIHRoZSBsb29wYmFjayBjYXNlLCB0aG91Z2gsIHRoZSByZWNlaXZlIHBhdGgKKyAqIGlzIGhhbmRlZCB0aGUgc2VuZGluZyBjb25uIHNvIHRoZSBzZW5zZSBvZiB0aGUgYWRkcmVzc2VzIGlzIHJldmVyc2VkLgorICovCitzdGF0aWMgaW50IHJkc19sb29wX3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJIHVuc2lnbmVkIGludCBoZHJfb2ZmLCB1bnNpZ25lZCBpbnQgc2csCisJCQkgdW5zaWduZWQgaW50IG9mZikKK3sKKwlCVUdfT04oaGRyX29mZiB8fCBzZyB8fCBvZmYpOworCisJcmRzX2luY19pbml0KCZybS0+bV9pbmMsIGNvbm4sIGNvbm4tPmNfbGFkZHIpOworCXJkc19tZXNzYWdlX2FkZHJlZihybSk7IC8qIGZvciB0aGUgaW5jICovCisKKwlyZHNfcmVjdl9pbmNvbWluZyhjb25uLCBjb25uLT5jX2xhZGRyLCBjb25uLT5jX2ZhZGRyLCAmcm0tPm1faW5jLAorCQkJICBHRlBfS0VSTkVMLCBLTV9VU0VSMCk7CisKKwlyZHNfc2VuZF9kcm9wX2Fja2VkKGNvbm4sIGJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSwKKwkJCSAgICBOVUxMKTsKKworCXJkc19pbmNfcHV0KCZybS0+bV9pbmMpOworCisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgKyBiZTMyX3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9sZW4pOworfQorCitzdGF0aWMgaW50IHJkc19sb29wX3htaXRfY29uZ19tYXAoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgc3RydWN0IHJkc19jb25nX21hcCAqbWFwLAorCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJQlVHX09OKG9mZnNldCk7CisJQlVHX09OKG1hcCAhPSBjb25uLT5jX2xjb25nKTsKKworCWZvciAoaSA9IDA7IGkgPCBSRFNfQ09OR19NQVBfUEFHRVM7IGkrKykgeworCQltZW1jcHkoKHZvaWQgKiljb25uLT5jX2Zjb25nLT5tX3BhZ2VfYWRkcnNbaV0sCisJCSAgICAgICAodm9pZCAqKW1hcC0+bV9wYWdlX2FkZHJzW2ldLCBQQUdFX1NJWkUpOworCX0KKworCXJkc19jb25nX21hcF91cGRhdGVkKGNvbm4tPmNfZmNvbmcsIH4odTY0KSAwKTsKKworCXJldHVybiBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpICsgUkRTX0NPTkdfTUFQX0JZVEVTOworfQorCisvKiB3ZSBuZWVkIHRvIGF0IGxlYXN0IGdpdmUgdGhlIHRocmVhZCBzb21ldGhpbmcgdG8gc3VjY2VlZCAqLworc3RhdGljIGludCByZHNfbG9vcF9yZWN2KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHJkc19sb29wX2Nvbm5lY3Rpb24geworCXN0cnVjdCBsaXN0X2hlYWQgbG9vcF9ub2RlOworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubjsKK307CisKKy8qCisgKiBFdmVuIHRoZSBsb29wYmFjayB0cmFuc3BvcnQgbmVlZHMgdG8ga2VlcCB0cmFjayBvZiBpdHMgY29ubmVjdGlvbnMsCisgKiBzbyBpdCBjYW4gY2FsbCByZHNfY29ubl9kZXN0cm95KCkgb24gdGhlbSBvbiBleGl0LiBOLkIuIHRoZXJlIGFyZQorICogMSsgbG9vcGJhY2sgYWRkcmVzc2VzICgxMjcuKi4qLiopIHNvIGl0J3Mgbm90IGEgYnVnIHRvIGhhdmUKKyAqIG11bHRpcGxlIGxvb3BiYWNrIGNvbm5zIGFsbG9jYXRlZCwgYWx0aG91Z2ggcmF0aGVyIHVzZWxlc3MuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2xvb3BfY29ubl9hbGxvYyhzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiAqbGM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJkc19sb29wX2Nvbm5lY3Rpb24pLCBHRlBfS0VSTkVMKTsKKwlpZiAobGMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX0xJU1RfSEVBRCgmbGMtPmxvb3Bfbm9kZSk7CisJbGMtPmNvbm4gPSBjb25uOworCWNvbm4tPmNfdHJhbnNwb3J0X2RhdGEgPSBsYzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsb29wX2Nvbm5zX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZsYy0+bG9vcF9ub2RlLCAmbG9vcF9jb25ucyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9vcF9jb25uc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmRzX2xvb3BfY29ubl9mcmVlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcmRzX2xvb3BfY29ubmVjdGlvbiAqbGMgPSBhcmc7CisJcmRzZGVidWcoImxjICVwXG4iLCBsYyk7CisJbGlzdF9kZWwoJmxjLT5sb29wX25vZGUpOworCWtmcmVlKGxjKTsKK30KKworc3RhdGljIGludCByZHNfbG9vcF9jb25uX2Nvbm5lY3Qoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJkc19jb25uZWN0X2NvbXBsZXRlKGNvbm4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZHNfbG9vcF9jb25uX3NodXRkb3duKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubikKK3sKK30KKwordm9pZCByZHNfbG9vcF9leGl0KHZvaWQpCit7CisJc3RydWN0IHJkc19sb29wX2Nvbm5lY3Rpb24gKmxjLCAqX2xjOworCUxJU1RfSEVBRCh0bXBfbGlzdCk7CisKKwkvKiBhdm9pZCBjYWxsaW5nIGNvbm5fZGVzdHJveSB3aXRoIGlycXMgb2ZmICovCisJc3Bpbl9sb2NrX2lycSgmbG9vcF9jb25uc19sb2NrKTsKKwlsaXN0X3NwbGljZSgmbG9vcF9jb25ucywgJnRtcF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmbG9vcF9jb25ucyk7CisJc3Bpbl91bmxvY2tfaXJxKCZsb29wX2Nvbm5zX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxjLCBfbGMsICZ0bXBfbGlzdCwgbG9vcF9ub2RlKSB7CisJCVdBUk5fT04obGMtPmNvbm4tPmNfcGFzc2l2ZSk7CisJCXJkc19jb25uX2Rlc3Ryb3kobGMtPmNvbm4pOworCX0KK30KKworLyoKKyAqIFRoaXMgaXMgbWlzc2luZyAueG1pdF8qIGJlY2F1c2UgbG9vcCBkb2Vzbid0IGdvIHRocm91Z2ggZ2VuZXJpYworICogcmRzX3NlbmRfeG1pdCgpIGFuZCBkb2Vzbid0IGNhbGwgcmRzX3JlY3ZfaW5jb21pbmcoKS4gIC5saXN0ZW5fc3RvcCBhbmQKKyAqIC5sYWRkcl9jaGVjayBhcmUgbWlzc2luZyBiZWNhdXNlIHRyYW5zcG9ydC5jIGRvZXNuJ3QgaXRlcmF0ZSBvdmVyCisgKiByZHNfbG9vcF90cmFuc3BvcnQuCisgKi8KK3N0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19sb29wX3RyYW5zcG9ydCA9IHsKKwkueG1pdAkJCT0gcmRzX2xvb3BfeG1pdCwKKwkueG1pdF9jb25nX21hcAkJPSByZHNfbG9vcF94bWl0X2NvbmdfbWFwLAorCS5yZWN2CQkJPSByZHNfbG9vcF9yZWN2LAorCS5jb25uX2FsbG9jCQk9IHJkc19sb29wX2Nvbm5fYWxsb2MsCisJLmNvbm5fZnJlZQkJPSByZHNfbG9vcF9jb25uX2ZyZWUsCisJLmNvbm5fY29ubmVjdAkJPSByZHNfbG9vcF9jb25uX2Nvbm5lY3QsCisJLmNvbm5fc2h1dGRvd24JCT0gcmRzX2xvb3BfY29ubl9zaHV0ZG93biwKKwkuaW5jX2NvcHlfdG9fdXNlcgk9IHJkc19tZXNzYWdlX2luY19jb3B5X3RvX3VzZXIsCisJLmluY19wdXJnZQkJPSByZHNfbWVzc2FnZV9pbmNfcHVyZ2UsCisJLmluY19mcmVlCQk9IHJkc19tZXNzYWdlX2luY19mcmVlLAorCS50X25hbWUJCQk9ICJsb29wYmFjayIsCit9OwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9sb29wLmggYi9uZXQvcmRzL2xvb3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzJiMDkzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9sb29wLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9SRFNfTE9PUF9ICisjZGVmaW5lIF9SRFNfTE9PUF9ICisKKy8qIGxvb3AuYyAqLworZXh0ZXJuIHN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19sb29wX3RyYW5zcG9ydDsKKwordm9pZCByZHNfbG9vcF9leGl0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvbWVzc2FnZS5jIGIvbmV0L3Jkcy9tZXNzYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExNWRjOAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvbWVzc2FnZS5jCkBAIC0wLDAgKzEsNDAyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInJkcy5oIgorI2luY2x1ZGUgInJkbWEuaCIKKworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHJkc19tZXNzYWdlX2ZsdXNoX3dhaXRxKTsKKworc3RhdGljIHVuc2lnbmVkIGludAlyZHNfZXh0aGRyX3NpemVbX19SRFNfRVhUSERSX01BWF0gPSB7CitbUkRTX0VYVEhEUl9OT05FXQk9IDAsCitbUkRTX0VYVEhEUl9WRVJTSU9OXQk9IHNpemVvZihzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfdmVyc2lvbiksCitbUkRTX0VYVEhEUl9SRE1BXQk9IHNpemVvZihzdHJ1Y3QgcmRzX2V4dF9oZWFkZXJfcmRtYSksCitbUkRTX0VYVEhEUl9SRE1BX0RFU1RdCT0gc2l6ZW9mKHN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hX2Rlc3QpLAorfTsKKworCit2b2lkIHJkc19tZXNzYWdlX2FkZHJlZihzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCXJkc2RlYnVnKCJhZGRyZWYgcm0gJXAgcmVmICVkXG4iLCBybSwgYXRvbWljX3JlYWQoJnJtLT5tX3JlZmNvdW50KSk7CisJYXRvbWljX2luYygmcm0tPm1fcmVmY291bnQpOworfQorCisvKgorICogVGhpcyByZWxpZXMgb24gZG1hX21hcF9zZygpIG5vdCB0b3VjaGluZyBzZ1tdLnBhZ2UgZHVyaW5nIG1lcmdpbmcuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19tZXNzYWdlX3B1cmdlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0pCit7CisJdW5zaWduZWQgbG9uZyBpOworCisJaWYgKHVubGlrZWx5KHRlc3RfYml0KFJEU19NU0dfUEFHRVZFQywgJnJtLT5tX2ZsYWdzKSkpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBybS0+bV9uZW50czsgaSsrKSB7CisJCXJkc2RlYnVnKCJwdXR0aW5nIGRhdGEgcGFnZSAlcFxuIiwgKHZvaWQgKilzZ19wYWdlKCZybS0+bV9zZ1tpXSkpOworCQkvKiBYWFggd2lsbCBoYXZlIHRvIHB1dF9wYWdlIGZvciBwYWdlIHJlZnMgKi8KKwkJX19mcmVlX3BhZ2Uoc2dfcGFnZSgmcm0tPm1fc2dbaV0pKTsKKwl9CisJcm0tPm1fbmVudHMgPSAwOworCisJaWYgKHJtLT5tX3JkbWFfb3ApCisJCXJkc19yZG1hX2ZyZWVfb3Aocm0tPm1fcmRtYV9vcCk7CisJaWYgKHJtLT5tX3JkbWFfbXIpCisJCXJkc19tcl9wdXQocm0tPm1fcmRtYV9tcik7Cit9CisKK3ZvaWQgcmRzX21lc3NhZ2VfaW5jX3B1cmdlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19tZXNzYWdlLCBtX2luYyk7CisJcmRzX21lc3NhZ2VfcHVyZ2Uocm0pOworfQorCit2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCXJkc2RlYnVnKCJwdXQgcm0gJXAgcmVmICVkXG4iLCBybSwgYXRvbWljX3JlYWQoJnJtLT5tX3JlZmNvdW50KSk7CisKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcm0tPm1fcmVmY291bnQpKSB7CisJCUJVR19PTighbGlzdF9lbXB0eSgmcm0tPm1fc29ja19pdGVtKSk7CisJCUJVR19PTighbGlzdF9lbXB0eSgmcm0tPm1fY29ubl9pdGVtKSk7CisJCXJkc19tZXNzYWdlX3B1cmdlKHJtKTsKKworCQlrZnJlZShybSk7CisJfQorfQorCit2b2lkIHJkc19tZXNzYWdlX2luY19mcmVlKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19tZXNzYWdlLCBtX2luYyk7CisJcmRzX21lc3NhZ2VfcHV0KHJtKTsKK30KKwordm9pZCByZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoc3RydWN0IHJkc19oZWFkZXIgKmhkciwgX19iZTE2IHNwb3J0LAorCQkJCSBfX2JlMTYgZHBvcnQsIHU2NCBzZXEpCit7CisJaGRyLT5oX2ZsYWdzID0gMDsKKwloZHItPmhfc3BvcnQgPSBzcG9ydDsKKwloZHItPmhfZHBvcnQgPSBkcG9ydDsKKwloZHItPmhfc2VxdWVuY2UgPSBjcHVfdG9fYmU2NChzZXEpOworCWhkci0+aF9leHRoZHJbMF0gPSBSRFNfRVhUSERSX05PTkU7Cit9CisKK2ludCByZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsCisJCXVuc2lnbmVkIGludCB0eXBlLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGludCBleHRfbGVuID0gc2l6ZW9mKHU4KSArIGxlbjsKKwl1bnNpZ25lZCBjaGFyICpkc3Q7CisKKwkvKiBGb3Igbm93LCByZWZ1c2UgdG8gYWRkIG1vcmUgdGhhbiBvbmUgZXh0ZW5zaW9uIGhlYWRlciAqLworCWlmIChoZHItPmhfZXh0aGRyWzBdICE9IFJEU19FWFRIRFJfTk9ORSkKKwkJcmV0dXJuIDA7CisKKwlpZiAodHlwZSA+PSBfX1JEU19FWFRIRFJfTUFYCisJIHx8IGxlbiAhPSByZHNfZXh0aGRyX3NpemVbdHlwZV0pCisJCXJldHVybiAwOworCisJaWYgKGV4dF9sZW4gPj0gUkRTX0hFQURFUl9FWFRfU1BBQ0UpCisJCXJldHVybiAwOworCWRzdCA9IGhkci0+aF9leHRoZHI7CisKKwkqZHN0KysgPSB0eXBlOworCW1lbWNweShkc3QsIGRhdGEsIGxlbik7CisKKwlkc3RbbGVuXSA9IFJEU19FWFRIRFJfTk9ORTsKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIElmIGEgbWVzc2FnZSBoYXMgZXh0ZW5zaW9uIGhlYWRlcnMsIHJldHJpZXZlIHRoZW0gaGVyZS4KKyAqIENhbGwgbGlrZSB0aGlzOgorICoKKyAqIHVuc2lnbmVkIGludCBwb3MgPSAwOworICoKKyAqIHdoaWxlICgxKSB7CisgKglidWZsZW4gPSBzaXplb2YoYnVmZmVyKTsKKyAqCXR5cGUgPSByZHNfbWVzc2FnZV9uZXh0X2V4dGVuc2lvbihoZHIsICZwb3MsIGJ1ZmZlciwgJmJ1Zmxlbik7CisgKglpZiAodHlwZSA9PSBSRFNfRVhUSERSX05PTkUpCisgKgkJYnJlYWs7CisgKgkuLi4KKyAqIH0KKyAqLworaW50IHJkc19tZXNzYWdlX25leHRfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsCisJCXVuc2lnbmVkIGludCAqcG9zLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCAqYnVmbGVuKQoreworCXVuc2lnbmVkIGludCBvZmZzZXQsIGV4dF90eXBlLCBleHRfbGVuOworCXU4ICpzcmMgPSBoZHItPmhfZXh0aGRyOworCisJb2Zmc2V0ID0gKnBvczsKKwlpZiAob2Zmc2V0ID49IFJEU19IRUFERVJfRVhUX1NQQUNFKQorCQlnb3RvIG5vbmU7CisKKwkvKiBHZXQgdGhlIGV4dGVuc2lvbiB0eXBlIGFuZCBsZW5ndGguIEZvciBub3csIHRoZQorCSAqIGxlbmd0aCBpcyBpbXBsaWVkIGJ5IHRoZSBleHRlbnNpb24gdHlwZS4gKi8KKwlleHRfdHlwZSA9IHNyY1tvZmZzZXQrK107CisKKwlpZiAoZXh0X3R5cGUgPT0gUkRTX0VYVEhEUl9OT05FIHx8IGV4dF90eXBlID49IF9fUkRTX0VYVEhEUl9NQVgpCisJCWdvdG8gbm9uZTsKKwlleHRfbGVuID0gcmRzX2V4dGhkcl9zaXplW2V4dF90eXBlXTsKKwlpZiAob2Zmc2V0ICsgZXh0X2xlbiA+IFJEU19IRUFERVJfRVhUX1NQQUNFKQorCQlnb3RvIG5vbmU7CisKKwkqcG9zID0gb2Zmc2V0ICsgZXh0X2xlbjsKKwlpZiAoZXh0X2xlbiA8ICpidWZsZW4pCisJCSpidWZsZW4gPSBleHRfbGVuOworCW1lbWNweShidWYsIHNyYyArIG9mZnNldCwgKmJ1Zmxlbik7CisJcmV0dXJuIGV4dF90eXBlOworCitub25lOgorCSpwb3MgPSBSRFNfSEVBREVSX0VYVF9TUEFDRTsKKwkqYnVmbGVuID0gMDsKKwlyZXR1cm4gUkRTX0VYVEhEUl9OT05FOworfQorCitpbnQgcmRzX21lc3NhZ2VfYWRkX3ZlcnNpb25fZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHVuc2lnbmVkIGludCB2ZXJzaW9uKQoreworCXN0cnVjdCByZHNfZXh0X2hlYWRlcl92ZXJzaW9uIGV4dF9oZHI7CisKKwlleHRfaGRyLmhfdmVyc2lvbiA9IGNwdV90b19iZTMyKHZlcnNpb24pOworCXJldHVybiByZHNfbWVzc2FnZV9hZGRfZXh0ZW5zaW9uKGhkciwgUkRTX0VYVEhEUl9WRVJTSU9OLCAmZXh0X2hkciwgc2l6ZW9mKGV4dF9oZHIpKTsKK30KKworaW50IHJkc19tZXNzYWdlX2dldF92ZXJzaW9uX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1bnNpZ25lZCBpbnQgKnZlcnNpb24pCit7CisJc3RydWN0IHJkc19leHRfaGVhZGVyX3ZlcnNpb24gZXh0X2hkcjsKKwl1bnNpZ25lZCBpbnQgcG9zID0gMCwgbGVuID0gc2l6ZW9mKGV4dF9oZHIpOworCisJLyogV2UgYXNzdW1lIHRoZSB2ZXJzaW9uIGV4dGVuc2lvbiBpcyB0aGUgb25seSBvbmUgcHJlc2VudCAqLworCWlmIChyZHNfbWVzc2FnZV9uZXh0X2V4dGVuc2lvbihoZHIsICZwb3MsICZleHRfaGRyLCAmbGVuKSAhPSBSRFNfRVhUSERSX1ZFUlNJT04pCisJCXJldHVybiAwOworCSp2ZXJzaW9uID0gYmUzMl90b19jcHUoZXh0X2hkci5oX3ZlcnNpb24pOworCXJldHVybiAxOworfQorCitpbnQgcmRzX21lc3NhZ2VfYWRkX3JkbWFfZGVzdF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdTMyIHJfa2V5LCB1MzIgb2Zmc2V0KQoreworCXN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hX2Rlc3QgZXh0X2hkcjsKKworCWV4dF9oZHIuaF9yZG1hX3JrZXkgPSBjcHVfdG9fYmUzMihyX2tleSk7CisJZXh0X2hkci5oX3JkbWFfb2Zmc2V0ID0gY3B1X3RvX2JlMzIob2Zmc2V0KTsKKwlyZXR1cm4gcmRzX21lc3NhZ2VfYWRkX2V4dGVuc2lvbihoZHIsIFJEU19FWFRIRFJfUkRNQV9ERVNULCAmZXh0X2hkciwgc2l6ZW9mKGV4dF9oZHIpKTsKK30KKworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfbWVzc2FnZV9hbGxvYyh1bnNpZ25lZCBpbnQgbmVudHMsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJcm0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmRzX21lc3NhZ2UpICsKKwkJICAgICAobmVudHMgKiBzaXplb2Yoc3RydWN0IHNjYXR0ZXJsaXN0KSksIGdmcCk7CisJaWYgKCFybSkKKwkJZ290byBvdXQ7CisKKwlpZiAobmVudHMpCisJCXNnX2luaXRfdGFibGUocm0tPm1fc2csIG5lbnRzKTsKKwlhdG9taWNfc2V0KCZybS0+bV9yZWZjb3VudCwgMSk7CisJSU5JVF9MSVNUX0hFQUQoJnJtLT5tX3NvY2tfaXRlbSk7CisJSU5JVF9MSVNUX0hFQUQoJnJtLT5tX2Nvbm5faXRlbSk7CisJc3Bpbl9sb2NrX2luaXQoJnJtLT5tX3JzX2xvY2spOworCitvdXQ6CisJcmV0dXJuIHJtOworfQorCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX21hcF9wYWdlcyh1bnNpZ25lZCBsb25nICpwYWdlX2FkZHJzLCB1bnNpZ25lZCBpbnQgdG90YWxfbGVuKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisJdW5zaWduZWQgaW50IGk7CisKKwlybSA9IHJkc19tZXNzYWdlX2FsbG9jKGNlaWwodG90YWxfbGVuLCBQQUdFX1NJWkUpLCBHRlBfS0VSTkVMKTsKKwlpZiAocm0gPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzZXRfYml0KFJEU19NU0dfUEFHRVZFQywgJnJtLT5tX2ZsYWdzKTsKKwlybS0+bV9pbmMuaV9oZHIuaF9sZW4gPSBjcHVfdG9fYmUzMih0b3RhbF9sZW4pOworCXJtLT5tX25lbnRzID0gY2VpbCh0b3RhbF9sZW4sIFBBR0VfU0laRSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcm0tPm1fbmVudHM7ICsraSkgeworCQlzZ19zZXRfcGFnZSgmcm0tPm1fc2dbaV0sCisJCQkJdmlydF90b19wYWdlKHBhZ2VfYWRkcnNbaV0pLAorCQkJCVBBR0VfU0laRSwgMCk7CisJfQorCisJcmV0dXJuIHJtOworfQorCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX2NvcHlfZnJvbV91c2VyKHN0cnVjdCBpb3ZlYyAqZmlyc3RfaW92LAorCQkJCQkgICAgICAgc2l6ZV90IHRvdGFsX2xlbikKK3sKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyBpb3Zfb2ZmOworCXVuc2lnbmVkIGxvbmcgc2dfb2ZmOworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisJc3RydWN0IGlvdmVjICppb3Y7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgcmV0OworCisJcm0gPSByZHNfbWVzc2FnZV9hbGxvYyhjZWlsKHRvdGFsX2xlbiwgUEFHRV9TSVpFKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJtID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcm0tPm1faW5jLmlfaGRyLmhfbGVuID0gY3B1X3RvX2JlMzIodG90YWxfbGVuKTsKKworCS8qCisJICogbm93IGFsbG9jYXRlIGFuZCBjb3B5IGluIHRoZSBkYXRhIHBheWxvYWQuCisJICovCisJc2cgPSBybS0+bV9zZzsKKwlpb3YgPSBmaXJzdF9pb3Y7CisJaW92X29mZiA9IDA7CisJc2dfb2ZmID0gMDsgLyogRGVhciBnY2MsIHNnLT5wYWdlIHdpbGwgYmUgbnVsbCBmcm9tIGt6YWxsb2MuICovCisKKwl3aGlsZSAodG90YWxfbGVuKSB7CisJCWlmIChzZ19wYWdlKHNnKSA9PSBOVUxMKSB7CisJCQlyZXQgPSByZHNfcGFnZV9yZW1haW5kZXJfYWxsb2Moc2csIHRvdGFsX2xlbiwKKwkJCQkJCSAgICAgICBHRlBfSElHSFVTRVIpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dDsKKwkJCXJtLT5tX25lbnRzKys7CisJCQlzZ19vZmYgPSAwOworCQl9CisKKwkJd2hpbGUgKGlvdl9vZmYgPT0gaW92LT5pb3ZfbGVuKSB7CisJCQlpb3Zfb2ZmID0gMDsKKwkJCWlvdisrOworCQl9CisKKwkJdG9fY29weSA9IG1pbihpb3YtPmlvdl9sZW4gLSBpb3Zfb2ZmLCBzZy0+bGVuZ3RoIC0gc2dfb2ZmKTsKKwkJdG9fY29weSA9IG1pbl90KHNpemVfdCwgdG9fY29weSwgdG90YWxfbGVuKTsKKworCQlyZHNkZWJ1ZygiY29weWluZyAlbHUgYnl0ZXMgZnJvbSB1c2VyIGlvdiBbJXAsICV6dV0gKyAlbHUgdG8gIgorCQkJICJzZyBbJXAsICV1LCAldV0gKyAlbHVcbiIsCisJCQkgdG9fY29weSwgaW92LT5pb3ZfYmFzZSwgaW92LT5pb3ZfbGVuLCBpb3Zfb2ZmLAorCQkJICh2b2lkICopc2dfcGFnZShzZyksIHNnLT5vZmZzZXQsIHNnLT5sZW5ndGgsIHNnX29mZik7CisKKwkJcmV0ID0gcmRzX3BhZ2VfY29weV9mcm9tX3VzZXIoc2dfcGFnZShzZyksIHNnLT5vZmZzZXQgKyBzZ19vZmYsCisJCQkJCSAgICAgIGlvdi0+aW92X2Jhc2UgKyBpb3Zfb2ZmLAorCQkJCQkgICAgICB0b19jb3B5KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCisJCWlvdl9vZmYgKz0gdG9fY29weTsKKwkJdG90YWxfbGVuIC09IHRvX2NvcHk7CisJCXNnX29mZiArPSB0b19jb3B5OworCisJCWlmIChzZ19vZmYgPT0gc2ctPmxlbmd0aCkKKwkJCXNnKys7CisJfQorCisJcmV0ID0gMDsKK291dDoKKwlpZiAocmV0KSB7CisJCWlmIChybSkKKwkJCXJkc19tZXNzYWdlX3B1dChybSk7CisJCXJtID0gRVJSX1BUUihyZXQpOworCX0KKwlyZXR1cm4gcm07Cit9CisKK2ludCByZHNfbWVzc2FnZV9pbmNfY29weV90b191c2VyKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywKKwkJCQkgc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisJc3RydWN0IGlvdmVjICppb3Y7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyBpb3Zfb2ZmOworCXVuc2lnbmVkIGxvbmcgdmVjX29mZjsKKwlpbnQgY29waWVkOworCWludCByZXQ7CisJdTMyIGxlbjsKKworCXJtID0gY29udGFpbmVyX29mKGluYywgc3RydWN0IHJkc19tZXNzYWdlLCBtX2luYyk7CisJbGVuID0gYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKTsKKworCWlvdiA9IGZpcnN0X2lvdjsKKwlpb3Zfb2ZmID0gMDsKKwlzZyA9IHJtLT5tX3NnOworCXZlY19vZmYgPSAwOworCWNvcGllZCA9IDA7CisKKwl3aGlsZSAoY29waWVkIDwgc2l6ZSAmJiBjb3BpZWQgPCBsZW4pIHsKKwkJd2hpbGUgKGlvdl9vZmYgPT0gaW92LT5pb3ZfbGVuKSB7CisJCQlpb3Zfb2ZmID0gMDsKKwkJCWlvdisrOworCQl9CisKKwkJdG9fY29weSA9IG1pbihpb3YtPmlvdl9sZW4gLSBpb3Zfb2ZmLCBzZy0+bGVuZ3RoIC0gdmVjX29mZik7CisJCXRvX2NvcHkgPSBtaW5fdChzaXplX3QsIHRvX2NvcHksIHNpemUgLSBjb3BpZWQpOworCQl0b19jb3B5ID0gbWluX3QodW5zaWduZWQgbG9uZywgdG9fY29weSwgbGVuIC0gY29waWVkKTsKKworCQlyZHNkZWJ1ZygiY29weWluZyAlbHUgYnl0ZXMgdG8gdXNlciBpb3YgWyVwLCAlenVdICsgJWx1IHRvICIKKwkJCSAic2cgWyVwLCAldSwgJXVdICsgJWx1XG4iLAorCQkJIHRvX2NvcHksIGlvdi0+aW92X2Jhc2UsIGlvdi0+aW92X2xlbiwgaW92X29mZiwKKwkJCSBzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCwgc2ctPmxlbmd0aCwgdmVjX29mZik7CisKKwkJcmV0ID0gcmRzX3BhZ2VfY29weV90b191c2VyKHNnX3BhZ2Uoc2cpLCBzZy0+b2Zmc2V0ICsgdmVjX29mZiwKKwkJCQkJICAgIGlvdi0+aW92X2Jhc2UgKyBpb3Zfb2ZmLAorCQkJCQkgICAgdG9fY29weSk7CisJCWlmIChyZXQpIHsKKwkJCWNvcGllZCA9IHJldDsKKwkJCWJyZWFrOworCQl9CisKKwkJaW92X29mZiArPSB0b19jb3B5OworCQl2ZWNfb2ZmICs9IHRvX2NvcHk7CisJCWNvcGllZCArPSB0b19jb3B5OworCisJCWlmICh2ZWNfb2ZmID09IHNnLT5sZW5ndGgpIHsKKwkJCXZlY19vZmYgPSAwOworCQkJc2crKzsKKwkJfQorCX0KKworCXJldHVybiBjb3BpZWQ7Cit9CisKKy8qCisgKiBJZiB0aGUgbWVzc2FnZSBpcyBzdGlsbCBvbiB0aGUgc2VuZCBxdWV1ZSwgd2FpdCB1bnRpbCB0aGUgdHJhbnNwb3J0CisgKiBpcyBkb25lIHdpdGggaXQuIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgUkRNQSBvcGVyYXRpb25zLgorICovCit2b2lkIHJkc19tZXNzYWdlX3dhaXQoc3RydWN0IHJkc19tZXNzYWdlICpybSkKK3sKKwl3YWl0X2V2ZW50KHJkc19tZXNzYWdlX2ZsdXNoX3dhaXRxLAorCQkJIXRlc3RfYml0KFJEU19NU0dfTUFQUEVELCAmcm0tPm1fZmxhZ3MpKTsKK30KKwordm9pZCByZHNfbWVzc2FnZV91bm1hcHBlZChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKQoreworCWNsZWFyX2JpdChSRFNfTVNHX01BUFBFRCwgJnJtLT5tX2ZsYWdzKTsKKwlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcmRzX21lc3NhZ2VfZmx1c2hfd2FpdHEpKQorCQl3YWtlX3VwKCZyZHNfbWVzc2FnZV9mbHVzaF93YWl0cSk7Cit9CisKZGlmZiAtLWdpdCBhL25ldC9yZHMvcGFnZS5jIGIvbmV0L3Jkcy9wYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ2MDc0MwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcGFnZS5jCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKKyNpbmNsdWRlICJyZHMuaCIKKworc3RydWN0IHJkc19wYWdlX3JlbWFpbmRlciB7CisJc3RydWN0IHBhZ2UJKnJfcGFnZTsKKwl1bnNpZ25lZCBsb25nCXJfb2Zmc2V0OworfTsKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IHJkc19wYWdlX3JlbWFpbmRlciwgcmRzX3BhZ2VfcmVtYWluZGVycykgX19fX2NhY2hlbGluZV9hbGlnbmVkOworCisvKgorICogcmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLWVycm5vIG9uIGZhaWx1cmUuCisgKgorICogV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBmbHVzaF9kY2FjaGVfcGFnZSgpIGFzIHRoaXMgb25seSB3b3JrcworICogd2l0aCBwcml2YXRlIHBhZ2VzLiAgSWYsIHNheSwgd2Ugd2VyZSB0byBkbyBkaXJlY3RlZCByZWNlaXZlIHRvIHBpbm5lZAorICogdXNlciBwYWdlcyB3ZSdkIGhhdmUgdG8gd29ycnkgbW9yZSBhYm91dCBjYWNoZSBjb2hlcmVuY2UuICAoVGhvdWdoCisgKiB0aGUgZmx1c2hfZGNhY2hlX3BhZ2UoKSBpbiBnZXRfdXNlcl9wYWdlcygpIHdvdWxkIHByb2JhYmx5IGJlIGVub3VnaCkuCisgKi8KK2ludCByZHNfcGFnZV9jb3B5X3VzZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkgICAgICAgdm9pZCBfX3VzZXIgKnB0ciwgdW5zaWduZWQgbG9uZyBieXRlcywKKwkJICAgICAgIGludCB0b191c2VyKQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCXZvaWQgKmFkZHI7CisKKwlpZiAodG9fdXNlcikKKwkJcmRzX3N0YXRzX2FkZChzX2NvcHlfdG9fdXNlciwgYnl0ZXMpOworCWVsc2UKKwkJcmRzX3N0YXRzX2FkZChzX2NvcHlfZnJvbV91c2VyLCBieXRlcyk7CisKKwlhZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWlmICh0b191c2VyKQorCQlyZXQgPSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyhwdHIsIGFkZHIgKyBvZmZzZXQsIGJ5dGVzKTsKKwllbHNlCisJCXJldCA9IF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMoYWRkciArIG9mZnNldCwgcHRyLCBieXRlcyk7CisJa3VubWFwX2F0b21pYyhhZGRyLCBLTV9VU0VSMCk7CisKKwlpZiAocmV0KSB7CisJCWFkZHIgPSBrbWFwKHBhZ2UpOworCQlpZiAodG9fdXNlcikKKwkJCXJldCA9IGNvcHlfdG9fdXNlcihwdHIsIGFkZHIgKyBvZmZzZXQsIGJ5dGVzKTsKKwkJZWxzZQorCQkJcmV0ID0gY29weV9mcm9tX3VzZXIoYWRkciArIG9mZnNldCwgcHRyLCBieXRlcyk7CisJCWt1bm1hcChwYWdlKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogTWVzc2FnZSBhbGxvY2F0aW9uIHVzZXMgdGhpcyB0byBidWlsZCB1cCByZWdpb25zIG9mIGEgbWVzc2FnZS4KKyAqCisgKiBAYnl0ZXMgLSB0aGUgbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZC4KKyAqIEBnZnAgLSB0aGUgd2FpdGluZyBiZWhhdmlvdXIgb2YgdGhlIGFsbG9jYXRpb24KKyAqCisgKiBAZ2ZwIGlzIGFsd2F5cyBvcmVkIHdpdGggX19HRlBfSElHSE1FTS4gIENhbGxlcnMgbXVzdCBiZSBwcmVwYXJlZCB0bworICoga21hcCB0aGUgcGFnZXMsIGV0Yy4KKyAqCisgKiBJZiBAYnl0ZXMgaXMgYXQgbGVhc3QgYSBmdWxsIHBhZ2UgdGhlbiB0aGlzIGp1c3QgcmV0dXJucyBhIHBhZ2UgZnJvbQorICogYWxsb2NfcGFnZSgpLgorICoKKyAqIElmIEBieXRlcyBpcyBhIHBhcnRpYWwgcGFnZSB0aGVuIHRoaXMgc3RvcmVzIHRoZSB1bnVzZWQgcmVnaW9uIG9mIHRoZQorICogcGFnZSBpbiBhIHBlci1jcHUgc3RydWN0dXJlLiAgRnV0dXJlIHBhcnRpYWwtcGFnZSBhbGxvY2F0aW9ucyBtYXkgYmUKKyAqIHNhdGlzZmllZCBmcm9tIHRoYXQgY2FjaGVkIHJlZ2lvbi4gIFRoaXMgbGV0cyB1cyB3YXN0ZSBsZXNzIG1lbW9yeSBvbgorICogc21hbGwgYWxsb2NhdGlvbnMgd2l0aCBtaW5pbWFsIGNvbXBsZXhpdHkuICBJdCB3b3JrcyBiZWNhdXNlIHRoZSB0cmFuc21pdAorICogcGF0aCBwYXNzZXMgcmVhZC1vbmx5IHBhZ2UgcmVnaW9ucyBkb3duIHRvIGRldmljZXMuICBUaGV5IGhvbGQgYSBwYWdlCisgKiByZWZlcmVuY2UgdW50aWwgdGhleSBhcmUgZG9uZSB3aXRoIHRoZSByZWdpb24uCisgKi8KK2ludCByZHNfcGFnZV9yZW1haW5kZXJfYWxsb2Moc3RydWN0IHNjYXR0ZXJsaXN0ICpzY2F0LCB1bnNpZ25lZCBsb25nIGJ5dGVzLAorCQkJICAgICBnZnBfdCBnZnApCit7CisJc3RydWN0IHJkc19wYWdlX3JlbWFpbmRlciAqcmVtOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IHJldDsKKworCWdmcCB8PSBfX0dGUF9ISUdITUVNOworCisJLyoganVtcCBzdHJhaWdodCB0byBhbGxvY2F0aW9uIGlmIHdlJ3JlIHRyeWluZyBmb3IgYSBodWdlIHBhZ2UgKi8KKwlpZiAoYnl0ZXMgPj0gUEFHRV9TSVpFKSB7CisJCXBhZ2UgPSBhbGxvY19wYWdlKGdmcCk7CisJCWlmIChwYWdlID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCX0gZWxzZSB7CisJCQlzZ19zZXRfcGFnZShzY2F0LCBwYWdlLCBQQUdFX1NJWkUsIDApOworCQkJcmV0ID0gMDsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwlyZW0gPSAmcGVyX2NwdShyZHNfcGFnZV9yZW1haW5kZXJzLCBnZXRfY3B1KCkpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXdoaWxlICgxKSB7CisJCS8qIGF2b2lkIGEgdGlueSByZWdpb24gZ2V0dGluZyBzdHVjayBieSB0b3NzaW5nIGl0ICovCisJCWlmIChyZW0tPnJfcGFnZSAmJiBieXRlcyA+IChQQUdFX1NJWkUgLSByZW0tPnJfb2Zmc2V0KSkgeworCQkJcmRzX3N0YXRzX2luYyhzX3BhZ2VfcmVtYWluZGVyX21pc3MpOworCQkJX19mcmVlX3BhZ2UocmVtLT5yX3BhZ2UpOworCQkJcmVtLT5yX3BhZ2UgPSBOVUxMOworCQl9CisKKwkJLyogaGFuZCBvdXQgYSBmcmFnbWVudCBmcm9tIHRoZSBjYWNoZWQgcGFnZSAqLworCQlpZiAocmVtLT5yX3BhZ2UgJiYgYnl0ZXMgPD0gKFBBR0VfU0laRSAtIHJlbS0+cl9vZmZzZXQpKSB7CisJCQlzZ19zZXRfcGFnZShzY2F0LCByZW0tPnJfcGFnZSwgYnl0ZXMsIHJlbS0+cl9vZmZzZXQpOworCQkJZ2V0X3BhZ2Uoc2dfcGFnZShzY2F0KSk7CisKKwkJCWlmIChyZW0tPnJfb2Zmc2V0ICE9IDApCisJCQkJcmRzX3N0YXRzX2luYyhzX3BhZ2VfcmVtYWluZGVyX2hpdCk7CisKKwkJCXJlbS0+cl9vZmZzZXQgKz0gYnl0ZXM7CisJCQlpZiAocmVtLT5yX29mZnNldCA9PSBQQUdFX1NJWkUpIHsKKwkJCQlfX2ZyZWVfcGFnZShyZW0tPnJfcGFnZSk7CisJCQkJcmVtLT5yX3BhZ2UgPSBOVUxMOworCQkJfQorCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogYWxsb2MgaWYgdGhlcmUgaXMgbm90aGluZyBmb3IgdXMgdG8gdXNlICovCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcHV0X2NwdSgpOworCisJCXBhZ2UgPSBhbGxvY19wYWdlKGdmcCk7CisKKwkJcmVtID0gJnBlcl9jcHUocmRzX3BhZ2VfcmVtYWluZGVycywgZ2V0X2NwdSgpKTsKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJCWlmIChwYWdlID09IE5VTEwpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlicmVhazsKKwkJfQorCisJCS8qIGRpZCBzb21lb25lIHJhY2UgdG8gZmlsbCB0aGUgcmVtYWluZGVyIGJlZm9yZSB1cz8gKi8KKwkJaWYgKHJlbS0+cl9wYWdlKSB7CisJCQlfX2ZyZWVfcGFnZShwYWdlKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogb3RoZXJ3aXNlIGluc3RhbGwgb3VyIHBhZ2UgYW5kIGxvb3AgYXJvdW5kIHRvIGFsbG9jICovCisJCXJlbS0+cl9wYWdlID0gcGFnZTsKKwkJcmVtLT5yX29mZnNldCA9IDA7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXB1dF9jcHUoKTsKK291dDoKKwlyZHNkZWJ1ZygiYnl0ZXMgJWx1IHJldCAlZCAlcCAldSAldVxuIiwgYnl0ZXMsIHJldCwKKwkJIHJldCA/IE5VTEwgOiBzZ19wYWdlKHNjYXQpLCByZXQgPyAwIDogc2NhdC0+b2Zmc2V0LAorCQkgcmV0ID8gMCA6IHNjYXQtPmxlbmd0aCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByZHNfcGFnZV9yZW1haW5kZXJfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJCSB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwlzdHJ1Y3QgcmRzX3BhZ2VfcmVtYWluZGVyICpyZW07CisJbG9uZyBjcHUgPSAobG9uZyloY3B1OworCisJcmVtID0gJnBlcl9jcHUocmRzX3BhZ2VfcmVtYWluZGVycywgY3B1KTsKKworCXJkc2RlYnVnKCJjcHUgJWxkIGFjdGlvbiAweCVseFxuIiwgY3B1LCBhY3Rpb24pOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9ERUFEOgorCQlpZiAocmVtLT5yX3BhZ2UpCisJCQlfX2ZyZWVfcGFnZShyZW0tPnJfcGFnZSk7CisJCXJlbS0+cl9wYWdlID0gTlVMTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcmRzX3BhZ2VfcmVtYWluZGVyX25iID0geworCS5ub3RpZmllcl9jYWxsID0gcmRzX3BhZ2VfcmVtYWluZGVyX2NwdV9ub3RpZnksCit9OworCit2b2lkIHJkc19wYWdlX2V4aXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQlyZHNfcGFnZV9yZW1haW5kZXJfY3B1X25vdGlmeSgmcmRzX3BhZ2VfcmVtYWluZGVyX25iLAorCQkJCQkgICAgICAodW5zaWduZWQgbG9uZylDUFVfREVBRCwKKwkJCQkJICAgICAgKHZvaWQgKikobG9uZylpKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYS5jIGIvbmV0L3Jkcy9yZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFlZWI5MQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmRtYS5jCkBAIC0wLDAgKzEsNjc5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA3IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4gLyogZm9yIERNQV8qX0RFVklDRSAqLworCisjaW5jbHVkZSAicmRtYS5oIgorCisvKgorICogWFhYCisgKiAgLSBidWlsZCB3aXRoIHNwYXJzZQorICogIC0gc2hvdWxkIHdlIGxpbWl0IHRoZSBzaXplIG9mIGEgbXIgcmVnaW9uPyAgbGV0IHRyYW5zcG9ydCByZXR1cm4gZmFpbHVyZT8KKyAqICAtIHNob3VsZCB3ZSBkZXRlY3QgZHVwbGljYXRlIGtleXMgb24gYSBzb2NrZXQ/ICBobW0uCisgKiAgLSBhbiByZG1hIGlzIGFuIG1sb2NrLCBhcHBseSBybGltaXQ/CisgKi8KKworLyoKKyAqIGdldCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IGxvb2tpbmcgYXQgdGhlIHBhZ2UgaW5kaWNlcyB0aGF0IHRoZSBzdGFydCBhbmQKKyAqIGVuZCBhZGRyZXNzZXMgZmFsbCBpbi4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIHZlYyBpcyBpbnZhbGlkLiAgSXQgaXMgaW52YWxpZCBpZiB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgKiBjYXVzZXMgdGhlIGFkZHJlc3MgdG8gd3JhcCBvciBvdmVyZmxvd3MgYW4gdW5zaWduZWQgaW50LiAgVGhpcyBjb21lcworICogZnJvbSBiZWluZyBzdG9yZWQgaW4gdGhlICdsZW5ndGgnIG1lbWJlciBvZiAnc3RydWN0IHNjYXR0ZXJsaXN0Jy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCByZHNfcGFnZXNfaW5fdmVjKHN0cnVjdCByZHNfaW92ZWMgKnZlYykKK3sKKwlpZiAoKHZlYy0+YWRkciArIHZlYy0+Ynl0ZXMgPD0gdmVjLT5hZGRyKSB8fAorCSAgICAodmVjLT5ieXRlcyA+ICh1NjQpVUlOVF9NQVgpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAoKHZlYy0+YWRkciArIHZlYy0+Ynl0ZXMgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUKSAtCisJCSh2ZWMtPmFkZHIgPj4gUEFHRV9TSElGVCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmRzX21yICpyZHNfbXJfdHJlZV93YWxrKHN0cnVjdCByYl9yb290ICpyb290LCB1NjQga2V5LAorCQkJCSAgICAgICBzdHJ1Y3QgcmRzX21yICppbnNlcnQpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnJvb3QtPnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHJkc19tciAqbXI7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCW1yID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgcmRzX21yLCByX3JiX25vZGUpOworCisJCWlmIChrZXkgPCBtci0+cl9rZXkpCisJCQlwID0gJigqcCktPnJiX2xlZnQ7CisJCWVsc2UgaWYgKGtleSA+IG1yLT5yX2tleSkKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBtcjsKKwl9CisKKwlpZiAoaW5zZXJ0KSB7CisJCXJiX2xpbmtfbm9kZSgmaW5zZXJ0LT5yX3JiX25vZGUsIHBhcmVudCwgcCk7CisJCXJiX2luc2VydF9jb2xvcigmaW5zZXJ0LT5yX3JiX25vZGUsIHJvb3QpOworCQlhdG9taWNfaW5jKCZpbnNlcnQtPnJfcmVmY291bnQpOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIERlc3Ryb3kgdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBwYXJ0IG9mIGEgTVIuCisgKi8KK3N0YXRpYyB2b2lkIHJkc19kZXN0cm95X21yKHN0cnVjdCByZHNfbXIgKm1yKQoreworCXN0cnVjdCByZHNfc29jayAqcnMgPSBtci0+cl9zb2NrOworCXZvaWQgKnRyYW5zX3ByaXZhdGUgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyZHNkZWJ1ZygiUkRTOiBkZXN0cm95IG1yIGtleSBpcyAleCByZWZjbnQgJXVcbiIsCisJCQltci0+cl9rZXksIGF0b21pY19yZWFkKCZtci0+cl9yZWZjb3VudCkpOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoUkRTX01SX0RFQUQsICZtci0+cl9zdGF0ZSkpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisJaWYgKCFSQl9FTVBUWV9OT0RFKCZtci0+cl9yYl9ub2RlKSkKKwkJcmJfZXJhc2UoJm1yLT5yX3JiX25vZGUsICZycy0+cnNfcmRtYV9rZXlzKTsKKwl0cmFuc19wcml2YXRlID0gbXItPnJfdHJhbnNfcHJpdmF0ZTsKKwltci0+cl90cmFuc19wcml2YXRlID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisKKwlpZiAodHJhbnNfcHJpdmF0ZSkKKwkJbXItPnJfdHJhbnMtPmZyZWVfbXIodHJhbnNfcHJpdmF0ZSwgbXItPnJfaW52YWxpZGF0ZSk7Cit9CisKK3ZvaWQgX19yZHNfcHV0X21yX2ZpbmFsKHN0cnVjdCByZHNfbXIgKm1yKQoreworCXJkc19kZXN0cm95X21yKG1yKTsKKwlrZnJlZShtcik7Cit9CisKKy8qCisgKiBCeSB0aGUgdGltZSB0aGlzIGlzIGNhbGxlZCB3ZSBjYW4ndCBoYXZlIGFueSBtb3JlIGlvY3RscyBjYWxsZWQgb24KKyAqIHRoZSBzb2NrZXQgc28gd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCByYWNpbmcgd2l0aCBvdGhlcnMuCisgKi8KK3ZvaWQgcmRzX3JkbWFfZHJvcF9rZXlzKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJc3RydWN0IHJkc19tciAqbXI7CisJc3RydWN0IHJiX25vZGUgKm5vZGU7CisKKwkvKiBSZWxlYXNlIGFueSBNUnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc29ja2V0ICovCisJd2hpbGUgKChub2RlID0gcmJfZmlyc3QoJnJzLT5yc19yZG1hX2tleXMpKSkgeworCQltciA9IGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgcmRzX21yLCByX3JiX25vZGUpOworCQlpZiAobXItPnJfdHJhbnMgPT0gcnMtPnJzX3RyYW5zcG9ydCkKKwkJCW1yLT5yX2ludmFsaWRhdGUgPSAwOworCQlyZHNfbXJfcHV0KG1yKTsKKwl9CisKKwlpZiAocnMtPnJzX3RyYW5zcG9ydCAmJiBycy0+cnNfdHJhbnNwb3J0LT5mbHVzaF9tcnMpCisJCXJzLT5yc190cmFuc3BvcnQtPmZsdXNoX21ycygpOworfQorCisvKgorICogSGVscGVyIGZ1bmN0aW9uIHRvIHBpbiB1c2VyIHBhZ2VzLgorICovCitzdGF0aWMgaW50IHJkc19waW5fcGFnZXModW5zaWduZWQgbG9uZyB1c2VyX2FkZHIsIHVuc2lnbmVkIGludCBucl9wYWdlcywKKwkJCXN0cnVjdCBwYWdlICoqcGFnZXMsIGludCB3cml0ZSkKK3sKKwlpbnQgcmV0OworCisJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCB1c2VyX2FkZHIsCisJCQkgICAgIG5yX3BhZ2VzLCB3cml0ZSwgMCwgcGFnZXMsIE5VTEwpOworCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlpZiAoMCA8PSByZXQgJiYgKHVuc2lnbmVkKSByZXQgPCBucl9wYWdlcykgeworCQl3aGlsZSAocmV0LS0pCisJCQlwdXRfcGFnZShwYWdlc1tyZXRdKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fcmRzX3JkbWFfbWFwKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MgKmFyZ3MsCisJCQkJdTY0ICpjb29raWVfcmV0LCBzdHJ1Y3QgcmRzX21yICoqbXJfcmV0KQoreworCXN0cnVjdCByZHNfbXIgKm1yID0gTlVMTCwgKmZvdW5kOworCXVuc2lnbmVkIGludCBucl9wYWdlczsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCXZvaWQgKnRyYW5zX3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlyZHNfcmRtYV9jb29raWVfdCBjb29raWU7CisJdW5zaWduZWQgaW50IG5lbnRzOworCWxvbmcgaTsKKwlpbnQgcmV0OworCisJaWYgKHJzLT5yc19ib3VuZF9hZGRyID09IDApIHsKKwkJcmV0ID0gLUVOT1RDT05OOyAvKiBYWFggbm90IGEgZ3JlYXQgZXJybm8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJzLT5yc190cmFuc3BvcnQtPmdldF9tciA9PSBOVUxMKSB7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlucl9wYWdlcyA9IHJkc19wYWdlc19pbl92ZWMoJmFyZ3MtPnZlYyk7CisJaWYgKG5yX3BhZ2VzID09IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzZGVidWcoIlJEUzogZ2V0X21yIGFkZHIgJWxseCBsZW4gJWxsdSBucl9wYWdlcyAldVxuIiwKKwkJYXJncy0+dmVjLmFkZHIsIGFyZ3MtPnZlYy5ieXRlcywgbnJfcGFnZXMpOworCisJLyogWFhYIGNsYW1wIG5yX3BhZ2VzIHRvIGxpbWl0IHRoZSBzaXplIG9mIHRoaXMgYWxsb2M/ICovCisJcGFnZXMgPSBrY2FsbG9jKG5yX3BhZ2VzLCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOworCWlmIChwYWdlcyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCW1yID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJkc19tciksIEdGUF9LRVJORUwpOworCWlmIChtciA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWF0b21pY19zZXQoJm1yLT5yX3JlZmNvdW50LCAxKTsKKwlSQl9DTEVBUl9OT0RFKCZtci0+cl9yYl9ub2RlKTsKKwltci0+cl90cmFucyA9IHJzLT5yc190cmFuc3BvcnQ7CisJbXItPnJfc29jayA9IHJzOworCisJaWYgKGFyZ3MtPmZsYWdzICYgUkRTX1JETUFfVVNFX09OQ0UpCisJCW1yLT5yX3VzZV9vbmNlID0gMTsKKwlpZiAoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9JTlZBTElEQVRFKQorCQltci0+cl9pbnZhbGlkYXRlID0gMTsKKwlpZiAoYXJncy0+ZmxhZ3MgJiBSRFNfUkRNQV9SRUFEV1JJVEUpCisJCW1yLT5yX3dyaXRlID0gMTsKKworCS8qCisJICogUGluIHRoZSBwYWdlcyB0aGF0IG1ha2UgdXAgdGhlIHVzZXIgYnVmZmVyIGFuZCB0cmFuc2ZlciB0aGUgcGFnZQorCSAqIHBvaW50ZXJzIHRvIHRoZSBtcidzIHNnIGFycmF5LiAgV2UgY2hlY2sgdG8gc2VlIGlmIHdlJ3ZlIG1hcHBlZAorCSAqIHRoZSB3aG9sZSByZWdpb24gYWZ0ZXIgdHJhbnNmZXJyaW5nIHRoZSBwYXJ0aWFsIHBhZ2UgcmVmZXJlbmNlcworCSAqIHRvIHRoZSBzZyBhcnJheSBzbyB0aGF0IHdlIGNhbiBoYXZlIG9uZSBwYWdlIHJlZiBjbGVhbnVwIHBhdGguCisJICoKKwkgKiBGb3Igbm93IHdlIGhhdmUgbm8gZmxhZyB0aGF0IHRlbGxzIHVzIHdoZXRoZXIgdGhlIG1hcHBpbmcgaXMKKwkgKiByL28gb3Igci93LiBXZSBuZWVkIHRvIGFzc3VtZSByL3csIG9yIHdlJ2xsIGRvIGEgbG90IG9mIFJETUEgdG8KKwkgKiB0aGUgemVybyBwYWdlLgorCSAqLworCXJldCA9IHJkc19waW5fcGFnZXMoYXJncy0+dmVjLmFkZHIgJiBQQUdFX01BU0ssIG5yX3BhZ2VzLCBwYWdlcywgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJbmVudHMgPSByZXQ7CisJc2cgPSBrY2FsbG9jKG5lbnRzLCBzaXplb2YoKnNnKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNnID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCVdBUk5fT04oIW5lbnRzKTsKKwlzZ19pbml0X3RhYmxlKHNnLCBuZW50cyk7CisKKwkvKiBTdGljayBhbGwgcGFnZXMgaW50byB0aGUgc2NhdHRlcmxpc3QgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IG5lbnRzOyBpKyspCisJCXNnX3NldF9wYWdlKCZzZ1tpXSwgcGFnZXNbaV0sIFBBR0VfU0laRSwgMCk7CisKKwlyZHNkZWJ1ZygiUkRTOiB0cmFuc19wcml2YXRlIG5lbnRzIGlzICV1XG4iLCBuZW50cyk7CisKKwkvKiBPYnRhaW4gYSB0cmFuc3BvcnQgc3BlY2lmaWMgTVIuIElmIHRoaXMgc3VjY2VlZHMsIHRoZQorCSAqIHMvZyBsaXN0IGlzIG5vdyBvd25lZCBieSB0aGUgTVIuCisJICogTm90ZSB0aGF0IGRtYV9tYXAoKSBpbXBsaWVzIHRoYXQgcGVuZGluZyB3cml0ZXMgYXJlCisJICogZmx1c2hlZCB0byBSQU0sIHNvIG5vIGRtYV9zeW5jIGlzIG5lZWRlZCBoZXJlLiAqLworCXRyYW5zX3ByaXZhdGUgPSBycy0+cnNfdHJhbnNwb3J0LT5nZXRfbXIoc2csIG5lbnRzLCBycywKKwkJCQkJCSAmbXItPnJfa2V5KTsKKworCWlmIChJU19FUlIodHJhbnNfcHJpdmF0ZSkpIHsKKwkJZm9yIChpID0gMCA7IGkgPCBuZW50czsgaSsrKQorCQkJcHV0X3BhZ2Uoc2dfcGFnZSgmc2dbaV0pKTsKKwkJa2ZyZWUoc2cpOworCQlyZXQgPSBQVFJfRVJSKHRyYW5zX3ByaXZhdGUpOworCQlnb3RvIG91dDsKKwl9CisKKwltci0+cl90cmFuc19wcml2YXRlID0gdHJhbnNfcHJpdmF0ZTsKKworCXJkc2RlYnVnKCJSRFM6IGdldF9tciBwdXRfdXNlciBrZXkgaXMgJXggY29va2llX2FkZHIgJXBcbiIsCisJICAgICAgIG1yLT5yX2tleSwgKHZvaWQgKikodW5zaWduZWQgbG9uZykgYXJncy0+Y29va2llX2FkZHIpOworCisJLyogVGhlIHVzZXIgbWF5IHBhc3MgdXMgYW4gdW5hbGlnbmVkIGFkZHJlc3MsIGJ1dCB3ZSBjYW4gb25seQorCSAqIG1hcCBwYWdlIGFsaWduZWQgcmVnaW9ucy4gU28gd2Uga2VlcCB0aGUgb2Zmc2V0LCBhbmQgYnVpbGQKKwkgKiBhIDY0Yml0IGNvb2tpZSBjb250YWluaW5nIDxSX0tleSwgb2Zmc2V0PiBhbmQgcGFzcyB0aGF0CisJICogYXJvdW5kLiAqLworCWNvb2tpZSA9IHJkc19yZG1hX21ha2VfY29va2llKG1yLT5yX2tleSwgYXJncy0+dmVjLmFkZHIgJiB+UEFHRV9NQVNLKTsKKwlpZiAoY29va2llX3JldCkKKwkJKmNvb2tpZV9yZXQgPSBjb29raWU7CisKKwlpZiAoYXJncy0+Y29va2llX2FkZHIgJiYgcHV0X3VzZXIoY29va2llLCAodTY0IF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKSBhcmdzLT5jb29raWVfYWRkcikpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogSW5zZXJ0aW5nIHRoZSBuZXcgTVIgaW50byB0aGUgcmJ0cmVlIGJ1bXBzIGl0cworCSAqIHJlZmVyZW5jZSBjb3VudC4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCWZvdW5kID0gcmRzX21yX3RyZWVfd2FsaygmcnMtPnJzX3JkbWFfa2V5cywgbXItPnJfa2V5LCBtcik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCisJQlVHX09OKGZvdW5kICYmIGZvdW5kICE9IG1yKTsKKworCXJkc2RlYnVnKCJSRFM6IGdldF9tciBrZXkgaXMgJXhcbiIsIG1yLT5yX2tleSk7CisJaWYgKG1yX3JldCkgeworCQlhdG9taWNfaW5jKCZtci0+cl9yZWZjb3VudCk7CisJCSptcl9yZXQgPSBtcjsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCWtmcmVlKHBhZ2VzKTsKKwlpZiAobXIpCisJCXJkc19tcl9wdXQobXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCByZHNfZ2V0X21yKHN0cnVjdCByZHNfc29jayAqcnMsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pCit7CisJc3RydWN0IHJkc19nZXRfbXJfYXJncyBhcmdzOworCisJaWYgKG9wdGxlbiAhPSBzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCAoc3RydWN0IHJkc19nZXRfbXJfYXJncyBfX3VzZXIgKilvcHR2YWwsCisJCQkgICBzaXplb2Yoc3RydWN0IHJkc19nZXRfbXJfYXJncykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBfX3Jkc19yZG1hX21hcChycywgJmFyZ3MsIE5VTEwsIE5VTEwpOworfQorCisvKgorICogRnJlZSB0aGUgTVIgaW5kaWNhdGVkIGJ5IHRoZSBnaXZlbiBSX0tleQorICovCitpbnQgcmRzX2ZyZWVfbXIoc3RydWN0IHJkc19zb2NrICpycywgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IG9wdGxlbikKK3sKKwlzdHJ1Y3QgcmRzX2ZyZWVfbXJfYXJncyBhcmdzOworCXN0cnVjdCByZHNfbXIgKm1yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAob3B0bGVuICE9IHNpemVvZihzdHJ1Y3QgcmRzX2ZyZWVfbXJfYXJncykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhcmdzLCAoc3RydWN0IHJkc19mcmVlX21yX2FyZ3MgX191c2VyICopb3B0dmFsLAorCQkJICAgc2l6ZW9mKHN0cnVjdCByZHNfZnJlZV9tcl9hcmdzKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogU3BlY2lhbCBjYXNlIC0gYSBudWxsIGNvb2tpZSBtZWFucyBmbHVzaCBhbGwgdW51c2VkIE1ScyAqLworCWlmIChhcmdzLmNvb2tpZSA9PSAwKSB7CisJCWlmICghcnMtPnJzX3RyYW5zcG9ydCB8fCAhcnMtPnJzX3RyYW5zcG9ydC0+Zmx1c2hfbXJzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJzLT5yc190cmFuc3BvcnQtPmZsdXNoX21ycygpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBMb29rIHVwIHRoZSBNUiBnaXZlbiBpdHMgUl9rZXkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSByYnRyZWUKKwkgKiBzbyBub2JvZHkgZWxzZSBmaW5kcyBpdC4KKwkgKiBUaGlzIHNob3VsZCBhbHNvIHByZXZlbnQgcmFjZXMgd2l0aCByZHNfcmRtYV91bnVzZS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCW1yID0gcmRzX21yX3RyZWVfd2FsaygmcnMtPnJzX3JkbWFfa2V5cywgcmRzX3JkbWFfY29va2llX2tleShhcmdzLmNvb2tpZSksIE5VTEwpOworCWlmIChtcikgeworCQlyYl9lcmFzZSgmbXItPnJfcmJfbm9kZSwgJnJzLT5yc19yZG1hX2tleXMpOworCQlSQl9DTEVBUl9OT0RFKCZtci0+cl9yYl9ub2RlKTsKKwkJaWYgKGFyZ3MuZmxhZ3MgJiBSRFNfUkRNQV9JTlZBTElEQVRFKQorCQkJbXItPnJfaW52YWxpZGF0ZSA9IDE7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZG1hX2xvY2ssIGZsYWdzKTsKKworCWlmICghbXIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBjYWxsIHJkc19kZXN0cm95X21yKCkgb3Vyc2VsdmVzIHNvIHRoYXQgd2UncmUgc3VyZSBpdCdzIGRvbmUgYnkgdGhlIHRpbWUKKwkgKiB3ZSByZXR1cm4uICBJZiB3ZSBsZXQgcmRzX21yX3B1dCgpIGRvIGl0IGl0IG1pZ2h0IG5vdCBoYXBwZW4gdW50aWwKKwkgKiBzb21lb25lIGVsc2UgZHJvcHMgdGhlaXIgcmVmLgorCSAqLworCXJkc19kZXN0cm95X21yKG1yKTsKKwlyZHNfbXJfcHV0KG1yKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UgcmVjZWl2ZSBhbiBleHRlbnNpb24gaGVhZGVyIHRoYXQKKyAqIHRlbGxzIHVzIHRoaXMgTVIgd2FzIHVzZWQuIEl0IGFsbG93cyB1cyB0byBpbXBsZW1lbnQKKyAqIHVzZV9vbmNlIHNlbWFudGljcworICovCit2b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKQoreworCXN0cnVjdCByZHNfbXIgKm1yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHpvdF9tZSA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCW1yID0gcmRzX21yX3RyZWVfd2FsaygmcnMtPnJzX3JkbWFfa2V5cywgcl9rZXksIE5VTEwpOworCWlmIChtciAmJiAobXItPnJfdXNlX29uY2UgfHwgZm9yY2UpKSB7CisJCXJiX2VyYXNlKCZtci0+cl9yYl9ub2RlLCAmcnMtPnJzX3JkbWFfa2V5cyk7CisJCVJCX0NMRUFSX05PREUoJm1yLT5yX3JiX25vZGUpOworCQl6b3RfbWUgPSAxOworCX0gZWxzZSBpZiAobXIpCisJCWF0b21pY19pbmMoJm1yLT5yX3JlZmNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmRtYV9sb2NrLCBmbGFncyk7CisKKwkvKiBNYXkgaGF2ZSB0byBpc3N1ZSBhIGRtYV9zeW5jIG9uIHRoaXMgbWVtb3J5IHJlZ2lvbi4KKwkgKiBOb3RlIHdlIGNvdWxkIGF2b2lkIHRoaXMgaWYgdGhlIG9wZXJhdGlvbiB3YXMgYSBSRE1BIFJFQUQsCisJICogYnV0IGF0IHRoaXMgcG9pbnQgd2UgY2FuJ3QgdGVsbC4gKi8KKwlpZiAobXIgIT0gTlVMTCkgeworCQlpZiAobXItPnJfdHJhbnMtPnN5bmNfbXIpCisJCQltci0+cl90cmFucy0+c3luY19tcihtci0+cl90cmFuc19wcml2YXRlLCBETUFfRlJPTV9ERVZJQ0UpOworCisJCS8qIElmIHRoZSBNUiB3YXMgbWFya2VkIGFzIGludmFsaWRhdGUsIHRoaXMgd2lsbAorCQkgKiB0cmlnZ2VyIGFuIGFzeW5jIGZsdXNoLiAqLworCQlpZiAoem90X21lKQorCQkJcmRzX2Rlc3Ryb3lfbXIobXIpOworCQlyZHNfbXJfcHV0KG1yKTsKKwl9Cit9CisKK3ZvaWQgcmRzX3JkbWFfZnJlZV9vcChzdHJ1Y3QgcmRzX3JkbWFfb3AgKnJvKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHJvLT5yX25lbnRzOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzZ19wYWdlKCZyby0+cl9zZ1tpXSk7CisKKwkJLyogTWFyayBwYWdlIGRpcnR5IGlmIGl0IHdhcyBwb3NzaWJseSBtb2RpZmllZCwgd2hpY2gKKwkJICogaXMgdGhlIGNhc2UgZm9yIGEgUkRNQV9SRUFEIHdoaWNoIGNvcGllcyBmcm9tIHJlbW90ZQorCQkgKiB0byBsb2NhbCBtZW1vcnkgKi8KKwkJaWYgKCFyby0+cl93cml0ZSkKKwkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCQlwdXRfcGFnZShwYWdlKTsKKwl9CisKKwlrZnJlZShyby0+cl9ub3RpZmllcik7CisJa2ZyZWUocm8pOworfQorCisvKgorICogYXJncyBpcyBhIHBvaW50ZXIgdG8gYW4gaW4ta2VybmVsIGNvcHkgaW4gdGhlIHNlbmRtc2cgY21zZy4KKyAqLworc3RhdGljIHN0cnVjdCByZHNfcmRtYV9vcCAqcmRzX3JkbWFfcHJlcGFyZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLAorCQkJCQkgICAgc3RydWN0IHJkc19yZG1hX2FyZ3MgKmFyZ3MpCit7CisJc3RydWN0IHJkc19pb3ZlYyB2ZWM7CisJc3RydWN0IHJkc19yZG1hX29wICpvcCA9IE5VTEw7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzOworCXVuc2lnbmVkIGludCBtYXhfcGFnZXM7CisJdW5zaWduZWQgaW50IG5yX2J5dGVzOworCXN0cnVjdCBwYWdlICoqcGFnZXMgPSBOVUxMOworCXN0cnVjdCByZHNfaW92ZWMgX191c2VyICpsb2NhbF92ZWM7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgbnI7CisJdW5zaWduZWQgaW50IGksIGo7CisJaW50IHJldDsKKworCisJaWYgKHJzLT5yc19ib3VuZF9hZGRyID09IDApIHsKKwkJcmV0ID0gLUVOT1RDT05OOyAvKiBYWFggbm90IGEgZ3JlYXQgZXJybm8gKi8KKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGFyZ3MtPm5yX2xvY2FsID4gKHU2NClVSU5UX01BWCkgeworCQlyZXQgPSAtRU1TR1NJWkU7CisJCWdvdG8gb3V0OworCX0KKworCW5yX3BhZ2VzID0gMDsKKwltYXhfcGFnZXMgPSAwOworCisJbG9jYWxfdmVjID0gKHN0cnVjdCByZHNfaW92ZWMgX191c2VyICopKHVuc2lnbmVkIGxvbmcpIGFyZ3MtPmxvY2FsX3ZlY19hZGRyOworCisJLyogZmlndXJlIG91dCB0aGUgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSB2ZWN0b3IgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+bnJfbG9jYWw7IGkrKykgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZlYywgJmxvY2FsX3ZlY1tpXSwKKwkJCQkgICBzaXplb2Yoc3RydWN0IHJkc19pb3ZlYykpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKworCQluciA9IHJkc19wYWdlc19pbl92ZWMoJnZlYyk7CisJCWlmIChuciA9PSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQltYXhfcGFnZXMgPSBtYXgobnIsIG1heF9wYWdlcyk7CisJCW5yX3BhZ2VzICs9IG5yOworCX0KKworCXBhZ2VzID0ga2NhbGxvYyhtYXhfcGFnZXMsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBhZ2VzID09IE5VTEwpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJb3AgPSBremFsbG9jKG9mZnNldG9mKHN0cnVjdCByZHNfcmRtYV9vcCwgcl9zZ1tucl9wYWdlc10pLCBHRlBfS0VSTkVMKTsKKwlpZiAob3AgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlvcC0+cl93cml0ZSA9ICEhKGFyZ3MtPmZsYWdzICYgUkRTX1JETUFfUkVBRFdSSVRFKTsKKwlvcC0+cl9mZW5jZSA9ICEhKGFyZ3MtPmZsYWdzICYgUkRTX1JETUFfRkVOQ0UpOworCW9wLT5yX25vdGlmeSA9ICEhKGFyZ3MtPmZsYWdzICYgUkRTX1JETUFfTk9USUZZX01FKTsKKwlvcC0+cl9yZWN2ZXJyID0gcnMtPnJzX3JlY3ZlcnI7CisJV0FSTl9PTighbnJfcGFnZXMpOworCXNnX2luaXRfdGFibGUob3AtPnJfc2csIG5yX3BhZ2VzKTsKKworCWlmIChvcC0+cl9ub3RpZnkgfHwgb3AtPnJfcmVjdmVycikgeworCQkvKiBXZSBhbGxvY2F0ZSBhbiB1bmluaXRpYWxpemVkIG5vdGlmaWVyIGhlcmUsIGJlY2F1c2UKKwkJICogd2UgZG9uJ3Qgd2FudCB0byBkbyB0aGF0IGluIHRoZSBjb21wbGV0aW9uIGhhbmRsZXIuIFdlCisJCSAqIHdvdWxkIGhhdmUgdG8gdXNlIEdGUF9BVE9NSUMgdGhlcmUsIGFuZCBkb24ndCB3YW50IHRvIGRlYWwKKwkJICogd2l0aCBmYWlsZWQgYWxsb2NhdGlvbnMuCisJCSAqLworCQlvcC0+cl9ub3RpZmllciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZHNfbm90aWZpZXIpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFvcC0+cl9ub3RpZmllcikgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCW9wLT5yX25vdGlmaWVyLT5uX3VzZXJfdG9rZW4gPSBhcmdzLT51c2VyX3Rva2VuOworCQlvcC0+cl9ub3RpZmllci0+bl9zdGF0dXMgPSBSRFNfUkRNQV9TVUNDRVNTOworCX0KKworCS8qIFRoZSBjb29raWUgY29udGFpbnMgdGhlIFJfS2V5IG9mIHRoZSByZW1vdGUgbWVtb3J5IHJlZ2lvbiwgYW5kCisJICogb3B0aW9uYWxseSBhbiBvZmZzZXQgaW50byBpdC4gVGhpcyBpcyBob3cgd2UgaW1wbGVtZW50IFJETUEgaW50bworCSAqIHVuYWxpZ25lZCBtZW1vcnkuCisJICogV2hlbiBzZXR0aW5nIHVwIHRoZSBSRE1BLCB3ZSBuZWVkIHRvIGFkZCB0aGF0IG9mZnNldCB0byB0aGUKKwkgKiBkZXN0aW5hdGlvbiBhZGRyZXNzICh3aGljaCBpcyByZWFsbHkgYW4gb2Zmc2V0IGludG8gdGhlIE1SKQorCSAqIEZJWE1FOiBXZSBtYXkgd2FudCB0byBtb3ZlIHRoaXMgaW50byBpYl9yZG1hLmMKKwkgKi8KKwlvcC0+cl9rZXkgPSByZHNfcmRtYV9jb29raWVfa2V5KGFyZ3MtPmNvb2tpZSk7CisJb3AtPnJfcmVtb3RlX2FkZHIgPSBhcmdzLT5yZW1vdGVfdmVjLmFkZHIgKyByZHNfcmRtYV9jb29raWVfb2Zmc2V0KGFyZ3MtPmNvb2tpZSk7CisKKwlucl9ieXRlcyA9IDA7CisKKwlyZHNkZWJ1ZygiUkRTOiByZG1hIHByZXBhcmUgbnJfbG9jYWwgJWxsdSBydmEgJWxseCBya2V5ICV4XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFyZ3MtPm5yX2xvY2FsLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWFyZ3MtPnJlbW90ZV92ZWMuYWRkciwKKwkgICAgICAgb3AtPnJfa2V5KTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5ucl9sb2NhbDsgaSsrKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmVjLCAmbG9jYWxfdmVjW2ldLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgcmRzX2lvdmVjKSkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCW5yID0gcmRzX3BhZ2VzX2luX3ZlYygmdmVjKTsKKwkJaWYgKG5yID09IDApIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXJzLT5yc191c2VyX2FkZHIgPSB2ZWMuYWRkcjsKKwkJcnMtPnJzX3VzZXJfYnl0ZXMgPSB2ZWMuYnl0ZXM7CisKKwkJLyogZGlkIHRoZSB1c2VyIGNoYW5nZSB0aGUgdmVjIHVuZGVyIHVzPyAqLworCQlpZiAobnIgPiBtYXhfcGFnZXMgfHwgb3AtPnJfbmVudHMgKyBuciA+IG5yX3BhZ2VzKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJLyogSWYgaXQncyBhIFdSSVRFIG9wZXJhdGlvbiwgd2Ugd2FudCB0byBwaW4gdGhlIHBhZ2VzIGZvciByZWFkaW5nLgorCQkgKiBJZiBpdCdzIGEgUkVBRCBvcGVyYXRpb24sIHdlIG5lZWQgdG8gcGluIHRoZSBwYWdlcyBmb3Igd3JpdGluZy4KKwkJICovCisJCXJldCA9IHJkc19waW5fcGFnZXModmVjLmFkZHIgJiBQQUdFX01BU0ssIG5yLCBwYWdlcywgIW9wLT5yX3dyaXRlKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQlyZHNkZWJ1ZygiUkRTOiBucl9ieXRlcyAldSBuciAldSB2ZWMuYnl0ZXMgJWxsdSB2ZWMuYWRkciAlbGx4XG4iLAorCQkgICAgICAgbnJfYnl0ZXMsIG5yLCB2ZWMuYnl0ZXMsIHZlYy5hZGRyKTsKKworCQlucl9ieXRlcyArPSB2ZWMuYnl0ZXM7CisKKwkJZm9yIChqID0gMDsgaiA8IG5yOyBqKyspIHsKKwkJCXVuc2lnbmVkIGludCBvZmZzZXQgPSB2ZWMuYWRkciAmIH5QQUdFX01BU0s7CisKKwkJCXNnID0gJm9wLT5yX3NnW29wLT5yX25lbnRzICsgal07CisJCQlzZ19zZXRfcGFnZShzZywgcGFnZXNbal0sCisJCQkJCW1pbl90KHVuc2lnbmVkIGludCwgdmVjLmJ5dGVzLCBQQUdFX1NJWkUgLSBvZmZzZXQpLAorCQkJCQlvZmZzZXQpOworCisJCQlyZHNkZWJ1ZygiUkRTOiBzZy0+b2Zmc2V0ICV4IHNnLT5sZW4gJXggdmVjLmFkZHIgJWxseCB2ZWMuYnl0ZXMgJWxsdVxuIiwKKwkJCSAgICAgICBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCB2ZWMuYWRkciwgdmVjLmJ5dGVzKTsKKworCQkJdmVjLmFkZHIgKz0gc2ctPmxlbmd0aDsKKwkJCXZlYy5ieXRlcyAtPSBzZy0+bGVuZ3RoOworCQl9CisKKwkJb3AtPnJfbmVudHMgKz0gbnI7CisJfQorCisKKwlpZiAobnJfYnl0ZXMgPiBhcmdzLT5yZW1vdGVfdmVjLmJ5dGVzKSB7CisJCXJkc2RlYnVnKCJSRFMgbnJfYnl0ZXMgJXUgcmVtb3RlX2J5dGVzICV1IGRvIG5vdCBtYXRjaFxuIiwKKwkJCQlucl9ieXRlcywKKwkJCQkodW5zaWduZWQgaW50KSBhcmdzLT5yZW1vdGVfdmVjLmJ5dGVzKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCW9wLT5yX2J5dGVzID0gbnJfYnl0ZXM7CisKKwlyZXQgPSAwOworb3V0OgorCWtmcmVlKHBhZ2VzKTsKKwlpZiAocmV0KSB7CisJCWlmIChvcCkKKwkJCXJkc19yZG1hX2ZyZWVfb3Aob3ApOworCQlvcCA9IEVSUl9QVFIocmV0KTsKKwl9CisJcmV0dXJuIG9wOworfQorCisvKgorICogVGhlIGFwcGxpY2F0aW9uIGFza3MgZm9yIGEgUkRNQSB0cmFuc2Zlci4KKyAqIEV4dHJhY3QgYWxsIGFyZ3VtZW50cyBhbmQgc2V0IHVwIHRoZSByZG1hX29wCisgKi8KK2ludCByZHNfY21zZ19yZG1hX2FyZ3Moc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpCit7CisJc3RydWN0IHJkc19yZG1hX29wICpvcDsKKworCWlmIChjbXNnLT5jbXNnX2xlbiA8IENNU0dfTEVOKHNpemVvZihzdHJ1Y3QgcmRzX3JkbWFfYXJncykpCisJIHx8IHJtLT5tX3JkbWFfb3AgIT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvcCA9IHJkc19yZG1hX3ByZXBhcmUocnMsIENNU0dfREFUQShjbXNnKSk7CisJaWYgKElTX0VSUihvcCkpCisJCXJldHVybiBQVFJfRVJSKG9wKTsKKwlyZHNfc3RhdHNfaW5jKHNfc2VuZF9yZG1hKTsKKwlybS0+bV9yZG1hX29wID0gb3A7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgYXBwbGljYXRpb24gd2FudHMgdXMgdG8gcGFzcyBhbiBSRE1BIGRlc3RpbmF0aW9uIChha2EgTVIpCisgKiB0byB0aGUgcmVtb3RlCisgKi8KK2ludCByZHNfY21zZ19yZG1hX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcmRzX21yICptcjsKKwl1MzIgcl9rZXk7CisJaW50IGVyciA9IDA7CisKKwlpZiAoY21zZy0+Y21zZ19sZW4gPCBDTVNHX0xFTihzaXplb2YocmRzX3JkbWFfY29va2llX3QpKQorCSB8fCBybS0+bV9yZG1hX2Nvb2tpZSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweSgmcm0tPm1fcmRtYV9jb29raWUsIENNU0dfREFUQShjbXNnKSwgc2l6ZW9mKHJtLT5tX3JkbWFfY29va2llKSk7CisKKwkvKiBXZSBhcmUgcmV1c2luZyBhIHByZXZpb3VzbHkgbWFwcGVkIE1SIGhlcmUuIE1vc3QgbGlrZWx5LCB0aGUKKwkgKiBhcHBsaWNhdGlvbiBoYXMgd3JpdHRlbiB0byB0aGUgYnVmZmVyLCBzbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkKKwkgKiBmbHVzaCB0aG9zZSB3cml0ZXMgdG8gUkFNLiBPdGhlcndpc2UgdGhlIEhDQSBtYXkgbm90IHNlZSB0aGVtCisJICogd2hlbiBkb2luZyBhIERNQSBmcm9tIHRoYXQgYnVmZmVyLgorCSAqLworCXJfa2V5ID0gcmRzX3JkbWFfY29va2llX2tleShybS0+bV9yZG1hX2Nvb2tpZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCW1yID0gcmRzX21yX3RyZWVfd2FsaygmcnMtPnJzX3JkbWFfa2V5cywgcl9rZXksIE5VTEwpOworCWlmIChtciA9PSBOVUxMKQorCQllcnIgPSAtRUlOVkFMOwkvKiBpbnZhbGlkIHJfa2V5ICovCisJZWxzZQorCQlhdG9taWNfaW5jKCZtci0+cl9yZWZjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JkbWFfbG9jaywgZmxhZ3MpOworCisJaWYgKG1yKSB7CisJCW1yLT5yX3RyYW5zLT5zeW5jX21yKG1yLT5yX3RyYW5zX3ByaXZhdGUsIERNQV9UT19ERVZJQ0UpOworCQlybS0+bV9yZG1hX21yID0gbXI7CisJfQorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBUaGUgYXBwbGljYXRpb24gcGFzc2VzIHVzIGFuIGFkZHJlc3MgcmFuZ2UgaXQgd2FudHMgdG8gZW5hYmxlIFJETUEKKyAqIHRvL2Zyb20uIFdlIG1hcCB0aGUgYXJlYSwgYW5kIHNhdmUgdGhlIDxSX0tleSxvZmZzZXQ+IHBhaXIKKyAqIGluIHJtLT5tX3JkbWFfY29va2llLiBUaGlzIGNhdXNlcyBpdCB0byBiZSBzZW50IGFsb25nIHRvIHRoZSBwZWVyCisgKiBpbiBhbiBleHRlbnNpb24gaGVhZGVyLgorICovCitpbnQgcmRzX2Ntc2dfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpCit7CisJaWYgKGNtc2ctPmNtc2dfbGVuIDwgQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCByZHNfZ2V0X21yX2FyZ3MpKQorCSB8fCBybS0+bV9yZG1hX2Nvb2tpZSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBfX3Jkc19yZG1hX21hcChycywgQ01TR19EQVRBKGNtc2cpLCAmcm0tPm1fcmRtYV9jb29raWUsICZybS0+bV9yZG1hX21yKTsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYS5oIGIvbmV0L3Jkcy9yZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1NTEyMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9yZHMvcmRtYS5oCkBAIC0wLDAgKzEsODQgQEAKKyNpZm5kZWYgX1JEU19SRE1BX0gKKyNkZWZpbmUgX1JEU19SRE1BX0gKKworI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKworI2luY2x1ZGUgInJkcy5oIgorCitzdHJ1Y3QgcmRzX21yIHsKKwlzdHJ1Y3QgcmJfbm9kZQkJcl9yYl9ub2RlOworCWF0b21pY190CQlyX3JlZmNvdW50OworCXUzMgkJCXJfa2V5OworCisJLyogQSBjb3B5IG9mIHRoZSBjcmVhdGlvbiBmbGFncyAqLworCXVuc2lnbmVkIGludAkJcl91c2Vfb25jZToxOworCXVuc2lnbmVkIGludAkJcl9pbnZhbGlkYXRlOjE7CisJdW5zaWduZWQgaW50CQlyX3dyaXRlOjE7CisKKwkvKiBUaGlzIGlzIGZvciBSRFNfTVJfREVBRC4KKwkgKiBJdCB3b3VsZCBiZSBuaWNlICYgY29uc2lzdGVudCB0byBtYWtlIHRoaXMgcGFydCBvZiB0aGUgYWJvdmUKKwkgKiBiaXQgZmllbGQgaGVyZSwgYnV0IHdlIG5lZWQgdG8gdXNlIHRlc3RfYW5kX3NldF9iaXQuCisJICovCisJdW5zaWduZWQgbG9uZwkJcl9zdGF0ZTsKKwlzdHJ1Y3QgcmRzX3NvY2sJCSpyX3NvY2s7IC8qIGJhY2sgcG9pbnRlciB0byB0aGUgc29ja2V0IHRoYXQgb3ducyB1cyAqLworCXN0cnVjdCByZHNfdHJhbnNwb3J0CSpyX3RyYW5zOworCXZvaWQJCQkqcl90cmFuc19wcml2YXRlOworfTsKKworLyogRmxhZ3MgZm9yIG1yLT5yX3N0YXRlICovCisjZGVmaW5lIFJEU19NUl9ERUFECQkwCisKK3N0cnVjdCByZHNfcmRtYV9vcCB7CisJdTMyCQkJcl9rZXk7CisJdTY0CQkJcl9yZW1vdGVfYWRkcjsKKwl1bnNpZ25lZCBpbnQJCXJfd3JpdGU6MTsKKwl1bnNpZ25lZCBpbnQJCXJfZmVuY2U6MTsKKwl1bnNpZ25lZCBpbnQJCXJfbm90aWZ5OjE7CisJdW5zaWduZWQgaW50CQlyX3JlY3ZlcnI6MTsKKwl1bnNpZ25lZCBpbnQJCXJfbWFwcGVkOjE7CisJc3RydWN0IHJkc19ub3RpZmllcgkqcl9ub3RpZmllcjsKKwl1bnNpZ25lZCBpbnQJCXJfYnl0ZXM7CisJdW5zaWduZWQgaW50CQlyX25lbnRzOworCXVuc2lnbmVkIGludAkJcl9jb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJcl9zZ1swXTsKK307CisKK3N0YXRpYyBpbmxpbmUgcmRzX3JkbWFfY29va2llX3QgcmRzX3JkbWFfbWFrZV9jb29raWUodTMyIHJfa2V5LCB1MzIgb2Zmc2V0KQoreworCXJldHVybiByX2tleSB8ICgoKHU2NCkgb2Zmc2V0KSA8PCAzMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHJkc19yZG1hX2Nvb2tpZV9rZXkocmRzX3JkbWFfY29va2llX3QgY29va2llKQoreworCXJldHVybiBjb29raWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHJkc19yZG1hX2Nvb2tpZV9vZmZzZXQocmRzX3JkbWFfY29va2llX3QgY29va2llKQoreworCXJldHVybiBjb29raWUgPj4gMzI7Cit9CisKK2ludCByZHNfZ2V0X21yKHN0cnVjdCByZHNfc29jayAqcnMsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOworaW50IHJkc19mcmVlX21yKHN0cnVjdCByZHNfc29jayAqcnMsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBvcHRsZW4pOwordm9pZCByZHNfcmRtYV9kcm9wX2tleXMoc3RydWN0IHJkc19zb2NrICpycyk7CitpbnQgcmRzX2Ntc2dfcmRtYV9hcmdzKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sCisJCQkgIHN0cnVjdCBjbXNnaGRyICpjbXNnKTsKK2ludCByZHNfY21zZ19yZG1hX2Rlc3Qoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpOworaW50IHJkc19jbXNnX3JkbWFfYXJncyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJICBzdHJ1Y3QgY21zZ2hkciAqY21zZyk7CitpbnQgcmRzX2Ntc2dfcmRtYV9tYXAoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSwKKwkJCSAgc3RydWN0IGNtc2doZHIgKmNtc2cpOwordm9pZCByZHNfcmRtYV9mcmVlX29wKHN0cnVjdCByZHNfcmRtYV9vcCAqcm8pOwordm9pZCByZHNfcmRtYV9zZW5kX2NvbXBsZXRlKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIGludCk7CisKK2V4dGVybiB2b2lkIF9fcmRzX3B1dF9tcl9maW5hbChzdHJ1Y3QgcmRzX21yICptcik7CitzdGF0aWMgaW5saW5lIHZvaWQgcmRzX21yX3B1dChzdHJ1Y3QgcmRzX21yICptcikKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmbXItPnJfcmVmY291bnQpKQorCQlfX3Jkc19wdXRfbXJfZmluYWwobXIpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuYyBiL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjE5MDI0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5jCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKworI2luY2x1ZGUgInJkbWFfdHJhbnNwb3J0LmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmRtYV9jbV9pZCAqcmRzX2l3X2xpc3Rlbl9pZDsKKworaW50IHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJICAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KQoreworCS8qIHRoaXMgY2FuIGJlIG51bGwgaW4gdGhlIGxpc3RlbmluZyBwYXRoICovCisJc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uID0gY21faWQtPmNvbnRleHQ7CisJc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zOworCWludCByZXQgPSAwOworCisJcmRzZGVidWcoImNvbm4gJXAgaWQgJXAgaGFuZGxpbmcgZXZlbnQgJXVcbiIsIGNvbm4sIGNtX2lkLAorCQkgZXZlbnQtPmV2ZW50KTsKKworCWlmIChjbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUgPT0gUkRNQV9OT0RFX1JOSUMpCisJCXRyYW5zID0gJnJkc19pd190cmFuc3BvcnQ7CisJZWxzZQorCQl0cmFucyA9ICZyZHNfaWJfdHJhbnNwb3J0OworCisJLyogUHJldmVudCBzaHV0ZG93biBmcm9tIHRlYXJpbmcgZG93biB0aGUgY29ubmVjdGlvbgorCSAqIHdoaWxlIHdlJ3JlIGV4ZWN1dGluZy4gKi8KKwlpZiAoY29ubikgeworCQltdXRleF9sb2NrKCZjb25uLT5jX2NtX2xvY2spOworCisJCS8qIElmIHRoZSBjb25uZWN0aW9uIGlzIGJlaW5nIHNodXQgZG93biwgYmFpbCBvdXQKKwkJICogcmlnaHQgYXdheS4gV2UgcmV0dXJuIDAgc28gY21faWQgZG9lc24ndCBnZXQKKwkJICogZGVzdHJveWVkIHByZW1hdHVyZWx5ICovCisJCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9ESVNDT05ORUNUSU5HKSB7CisJCQkvKiBSZWplY3QgaW5jb21pbmcgY29ubmVjdGlvbnMgd2hpbGUgd2UncmUgdGVhcmluZworCQkJICogZG93biBhbiBleGlzdGluZyBvbmUuICovCisJCQlpZiAoZXZlbnQtPmV2ZW50ID09IFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNUKQorCQkJCXJldCA9IDE7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXN3aXRjaCAoZXZlbnQtPmV2ZW50KSB7CisJY2FzZSBSRE1BX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVDoKKwkJcmV0ID0gdHJhbnMtPmNtX2hhbmRsZV9jb25uZWN0KGNtX2lkLCBldmVudCk7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX0FERFJfUkVTT0xWRUQ6CisJCS8qIFhYWCBkbyB3ZSBuZWVkIHRvIGNsZWFuIHVwIGlmIHRoaXMgZmFpbHM/ICovCisJCXJldCA9IHJkbWFfcmVzb2x2ZV9yb3V0ZShjbV9pZCwKKwkJCQkJIFJEU19SRE1BX1JFU09MVkVfVElNRU9VVF9NUyk7CisJCWJyZWFrOworCisJY2FzZSBSRE1BX0NNX0VWRU5UX1JPVVRFX1JFU09MVkVEOgorCQkvKiBYWFggd29ycnkgYWJvdXQgcmFjaW5nIHdpdGggbGlzdGVuIGFjY2VwdGFuY2UgKi8KKwkJcmV0ID0gdHJhbnMtPmNtX2luaXRpYXRlX2Nvbm5lY3QoY21faWQpOworCQlicmVhazsKKworCWNhc2UgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDoKKwkJdHJhbnMtPmNtX2Nvbm5lY3RfY29tcGxldGUoY29ubiwgZXZlbnQpOworCQlicmVhazsKKworCWNhc2UgUkRNQV9DTV9FVkVOVF9BRERSX0VSUk9SOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9ST1VURV9FUlJPUjoKKwljYXNlIFJETUFfQ01fRVZFTlRfQ09OTkVDVF9FUlJPUjoKKwljYXNlIFJETUFfQ01fRVZFTlRfVU5SRUFDSEFCTEU6CisJY2FzZSBSRE1BX0NNX0VWRU5UX1JFSkVDVEVEOgorCWNhc2UgUkRNQV9DTV9FVkVOVF9ERVZJQ0VfUkVNT1ZBTDoKKwljYXNlIFJETUFfQ01fRVZFTlRfQUREUl9DSEFOR0U6CisJCWlmIChjb25uKQorCQkJcmRzX2Nvbm5fZHJvcChjb25uKTsKKwkJYnJlYWs7CisKKwljYXNlIFJETUFfQ01fRVZFTlRfRElTQ09OTkVDVEVEOgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvSVc6IERJU0NPTk5FQ1QgZXZlbnQgLSBkcm9wcGluZyBjb25uZWN0aW9uICIKKwkJCSIlcEk0LT4lcEk0XG4iLCAmY29ubi0+Y19sYWRkciwKKwkJCSAmY29ubi0+Y19mYWRkcik7CisJCXJkc19jb25uX2Ryb3AoY29ubik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJLyogdGhpbmdzIGxpa2UgZGV2aWNlIGRpc2Nvbm5lY3Q/ICovCisJCXByaW50ayhLRVJOX0VSUiAidW5rbm93biBldmVudCAldVxuIiwgZXZlbnQtPmV2ZW50KTsKKwkJQlVHKCk7CisJCWJyZWFrOworCX0KKworb3V0OgorCWlmIChjb25uKQorCQltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisKKwlyZHNkZWJ1ZygiaWQgJXAgZXZlbnQgJXUgaGFuZGxpbmcgcmV0ICVkXG4iLCBjbV9pZCwgZXZlbnQtPmV2ZW50LCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2luaXQgcmRzX3JkbWFfbGlzdGVuX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworCXN0cnVjdCByZG1hX2NtX2lkICpjbV9pZDsKKwlpbnQgcmV0OworCisJY21faWQgPSByZG1hX2NyZWF0ZV9pZChyZHNfcmRtYV9jbV9ldmVudF9oYW5kbGVyLCBOVUxMLCBSRE1BX1BTX1RDUCk7CisJaWYgKElTX0VSUihjbV9pZCkpIHsKKwkJcmV0ID0gUFRSX0VSUihjbV9pZCk7CisJCXByaW50ayhLRVJOX0VSUiAiUkRTL0lXOiBmYWlsZWQgdG8gc2V0dXAgbGlzdGVuZXIsICIKKwkJICAgICAgICJyZG1hX2NyZWF0ZV9pZCgpIHJldHVybmVkICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlzaW4uc2luX2ZhbWlseSA9IFBGX0lORVQsCisJc2luLnNpbl9hZGRyLnNfYWRkciA9IChfX2ZvcmNlIHUzMilodG9ubChJTkFERFJfQU5ZKTsKKwlzaW4uc2luX3BvcnQgPSAoX19mb3JjZSB1MTYpaHRvbnMoUkRTX1BPUlQpOworCisJLyoKKwkgKiBYWFggSSBiZXQgdGhpcyBiaW5kcyB0aGUgY21faWQgdG8gYSBkZXZpY2UuICBJZiB3ZSB3YW50IHRvIHN1cHBvcnQKKwkgKiBmYWlsLW92ZXIgd2UnbGwgaGF2ZSB0byB0YWtlIHRoaXMgaW50byBjb25zaWRlcmF0aW9uLgorCSAqLworCXJldCA9IHJkbWFfYmluZF9hZGRyKGNtX2lkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIlJEUy9JVzogZmFpbGVkIHRvIHNldHVwIGxpc3RlbmVyLCAiCisJCSAgICAgICAicmRtYV9iaW5kX2FkZHIoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gcmRtYV9saXN0ZW4oY21faWQsIDEyOCk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgIlJEUy9JVzogZmFpbGVkIHRvIHNldHVwIGxpc3RlbmVyLCAiCisJCSAgICAgICAicmRtYV9saXN0ZW4oKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmRzZGVidWcoImNtICVwIGxpc3RlbmluZyBvbiBwb3J0ICV1XG4iLCBjbV9pZCwgUkRTX1BPUlQpOworCisJcmRzX2l3X2xpc3Rlbl9pZCA9IGNtX2lkOworCWNtX2lkID0gTlVMTDsKK291dDoKKwlpZiAoY21faWQpCisJCXJkbWFfZGVzdHJveV9pZChjbV9pZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcmRzX3JkbWFfbGlzdGVuX3N0b3Aodm9pZCkKK3sKKwlpZiAocmRzX2l3X2xpc3Rlbl9pZCkgeworCQlyZHNkZWJ1ZygiY20gJXBcbiIsIHJkc19pd19saXN0ZW5faWQpOworCQlyZG1hX2Rlc3Ryb3lfaWQocmRzX2l3X2xpc3Rlbl9pZCk7CisJCXJkc19pd19saXN0ZW5faWQgPSBOVUxMOworCX0KK30KKworaW50IF9faW5pdCByZHNfcmRtYV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHJkc19yZG1hX2xpc3Rlbl9pbml0KCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSByZHNfaXdfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2l3X2luaXQ7CisKKwlyZXQgPSByZHNfaWJfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2liX2luaXQ7CisKKwlnb3RvIG91dDsKKworZXJyX2liX2luaXQ6CisJcmRzX2l3X2V4aXQoKTsKK2Vycl9pd19pbml0OgorCXJkc19yZG1hX2xpc3Rlbl9zdG9wKCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCByZHNfcmRtYV9leGl0KHZvaWQpCit7CisJLyogc3RvcCBsaXN0ZW5pbmcgZmlyc3QgdG8gZW5zdXJlIG5vIG5ldyBjb25uZWN0aW9ucyBhcmUgYXR0ZW1wdGVkICovCisJcmRzX3JkbWFfbGlzdGVuX3N0b3AoKTsKKwlyZHNfaWJfZXhpdCgpOworCXJkc19pd19leGl0KCk7Cit9CisKZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuaCBiL25ldC9yZHMvcmRtYV90cmFuc3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjJjN2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9yZG1hX3RyYW5zcG9ydC5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX1JETUFfVFJBTlNQT1JUX0gKKyNkZWZpbmUgX1JETUFfVFJBTlNQT1JUX0gKKworI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKyNpbmNsdWRlICJyZHMuaCIKKworI2RlZmluZSBSRFNfUkRNQV9SRVNPTFZFX1RJTUVPVVRfTVMgICAgIDUwMDAKKworaW50IHJkc19yZG1hX2Nvbm5fY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworaW50IHJkc19yZG1hX2NtX2V2ZW50X2hhbmRsZXIoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkLAorCQkJICAgICAgc3RydWN0IHJkbWFfY21fZXZlbnQgKmV2ZW50KTsKKworLyogZnJvbSByZG1hX3RyYW5zcG9ydC5jICovCitpbnQgcmRzX3JkbWFfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3JkbWFfZXhpdCh2b2lkKTsKKworLyogZnJvbSBpYi5jICovCitleHRlcm4gc3RydWN0IHJkc190cmFuc3BvcnQgcmRzX2liX3RyYW5zcG9ydDsKK2ludCByZHNfaWJfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX2liX2V4aXQodm9pZCk7CisKKy8qIGZyb20gaXcuYyAqLworZXh0ZXJuIHN0cnVjdCByZHNfdHJhbnNwb3J0IHJkc19pd190cmFuc3BvcnQ7CitpbnQgcmRzX2l3X2luaXQodm9pZCk7Cit2b2lkIHJkc19pd19leGl0KHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yZHMvcmRzLmggYi9uZXQvcmRzL3Jkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MDQwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3Jkcy5oCkBAIC0wLDAgKzEsNjg2IEBACisjaWZuZGVmIF9SRFNfUkRTX0gKKyNkZWZpbmUgX1JEU19SRFNfSAorCisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxyZG1hL3JkbWFfY20uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jkcy5oPgorCisjaW5jbHVkZSAiaW5mby5oIgorCisvKgorICogUkRTIE5ldHdvcmsgcHJvdG9jb2wgdmVyc2lvbgorICovCisjZGVmaW5lIFJEU19QUk9UT0NPTF8zXzAJMHgwMzAwCisjZGVmaW5lIFJEU19QUk9UT0NPTF8zXzEJMHgwMzAxCisjZGVmaW5lIFJEU19QUk9UT0NPTF9WRVJTSU9OCVJEU19QUk9UT0NPTF8zXzEKKyNkZWZpbmUgUkRTX1BST1RPQ09MX01BSk9SKHYpCSgodikgPj4gOCkKKyNkZWZpbmUgUkRTX1BST1RPQ09MX01JTk9SKHYpCSgodikgJiAyNTUpCisjZGVmaW5lIFJEU19QUk9UT0NPTChtYWosIG1pbikJKCgobWFqKSA8PCA4KSB8IG1pbikKKworLyoKKyAqIFhYWCByYW5kb21seSBjaG9zZW4sIGJ1dCBhdCBsZWFzdCBzZWVtcyB0byBiZSB1bnVzZWQ6CisgKiAjICAgICAgICAgICAgICAgMTg0NjQtMTg3NjggVW5hc3NpZ25lZAorICogV2Ugc2hvdWxkIGRvIGJldHRlci4gIFdlIHdhbnQgYSByZXNlcnZlZCBwb3J0IHRvIGRpc2NvdXJhZ2UgdW5wcml2J2VkCisgKiB1c2Vyc3BhY2UgZnJvbSBsaXN0ZW5pbmcuCisgKi8KKyNkZWZpbmUgUkRTX1BPUlQJMTg2MzQKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIHJkc2RlYnVnKGZtdCwgYXJncy4uLikgcHJfZGVidWcoIiVzKCk6ICIgZm10LCBfX2Z1bmNfXyAsICMjYXJncykKKyNlbHNlCisvKiBzaWdoLCBwcl9kZWJ1ZygpIGNhdXNlcyB1bnVzZWQgdmFyaWFibGUgd2FybmluZ3MgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKK3Jkc2RlYnVnKGNoYXIgKmZtdCwgLi4uKQoreworfQorI2VuZGlmCisKKy8qIFhYWCBpcyB0aGVyZSBvbmUgb2YgdGhlc2Ugc29tZXdoZXJlPyAqLworI2RlZmluZSBjZWlsKHgsIHkpIFwKKwkoeyB1bnNpZ25lZCBsb25nIF9feCA9ICh4KSwgX195ID0gKHkpOyAoX194ICsgX195IC0gMSkgLyBfX3k7IH0pCisKKyNkZWZpbmUgUkRTX0ZSQUdfU0hJRlQJMTIKKyNkZWZpbmUgUkRTX0ZSQUdfU0laRQkoKHVuc2lnbmVkIGludCkoMSA8PCBSRFNfRlJBR19TSElGVCkpCisKKyNkZWZpbmUgUkRTX0NPTkdfTUFQX0JZVEVTCSg2NTUzNiAvIDgpCisjZGVmaW5lIFJEU19DT05HX01BUF9MT05HUwkoUkRTX0NPTkdfTUFQX0JZVEVTIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorI2RlZmluZSBSRFNfQ09OR19NQVBfUEFHRVMJKFBBR0VfQUxJR04oUkRTX0NPTkdfTUFQX0JZVEVTKSAvIFBBR0VfU0laRSkKKyNkZWZpbmUgUkRTX0NPTkdfTUFQX1BBR0VfQklUUwkoUEFHRV9TSVpFICogOCkKKworc3RydWN0IHJkc19jb25nX21hcCB7CisJc3RydWN0IHJiX25vZGUJCW1fcmJfbm9kZTsKKwlfX2JlMzIJCQltX2FkZHI7CisJd2FpdF9xdWV1ZV9oZWFkX3QJbV93YWl0cTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW1fY29ubl9saXN0OworCXVuc2lnbmVkIGxvbmcJCW1fcGFnZV9hZGRyc1tSRFNfQ09OR19NQVBfUEFHRVNdOworfTsKKworCisvKgorICogVGhpcyBpcyBob3cgd2Ugd2lsbCB0cmFjayB0aGUgY29ubmVjdGlvbiBzdGF0ZToKKyAqIEEgY29ubmVjdGlvbiBpcyBhbHdheXMgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAqIHN0YXRlcy4gVXBkYXRlcyB0byB0aGUgc3RhdGUgYXJlIGF0b21pYyBhbmQgaW1wbHkKKyAqIGEgbWVtb3J5IGJhcnJpZXIuCisgKi8KK2VudW0geworCVJEU19DT05OX0RPV04gPSAwLAorCVJEU19DT05OX0NPTk5FQ1RJTkcsCisJUkRTX0NPTk5fRElTQ09OTkVDVElORywKKwlSRFNfQ09OTl9VUCwKKwlSRFNfQ09OTl9FUlJPUiwKK307CisKKy8qIEJpdHMgZm9yIGNfZmxhZ3MgKi8KKyNkZWZpbmUgUkRTX0xMX1NFTkRfRlVMTAkwCisjZGVmaW5lIFJEU19SRUNPTk5FQ1RfUEVORElORwkxCisKK3N0cnVjdCByZHNfY29ubmVjdGlvbiB7CisJc3RydWN0IGhsaXN0X25vZGUJY19oYXNoX25vZGU7CisJX19iZTMyCQkJY19sYWRkcjsKKwlfX2JlMzIJCQljX2ZhZGRyOworCXVuc2lnbmVkIGludAkJY19sb29wYmFjazoxOworCXN0cnVjdCByZHNfY29ubmVjdGlvbgkqY19wYXNzaXZlOworCisJc3RydWN0IHJkc19jb25nX21hcAkqY19sY29uZzsKKwlzdHJ1Y3QgcmRzX2NvbmdfbWFwCSpjX2Zjb25nOworCisJc3RydWN0IG11dGV4CQljX3NlbmRfbG9jazsJLyogcHJvdGVjdCBzZW5kIHJpbmcgKi8KKwlzdHJ1Y3QgcmRzX21lc3NhZ2UJKmNfeG1pdF9ybTsKKwl1bnNpZ25lZCBsb25nCQljX3htaXRfc2c7CisJdW5zaWduZWQgaW50CQljX3htaXRfaGRyX29mZjsKKwl1bnNpZ25lZCBpbnQJCWNfeG1pdF9kYXRhX29mZjsKKwl1bnNpZ25lZCBpbnQJCWNfeG1pdF9yZG1hX3NlbnQ7CisKKwlzcGlubG9ja190CQljX2xvY2s7CQkvKiBwcm90ZWN0IG1zZyBxdWV1ZXMgKi8KKwl1NjQJCQljX25leHRfdHhfc2VxOworCXN0cnVjdCBsaXN0X2hlYWQJY19zZW5kX3F1ZXVlOworCXN0cnVjdCBsaXN0X2hlYWQJY19yZXRyYW5zOworCisJdTY0CQkJY19uZXh0X3J4X3NlcTsKKworCXN0cnVjdCByZHNfdHJhbnNwb3J0CSpjX3RyYW5zOworCXZvaWQJCQkqY190cmFuc3BvcnRfZGF0YTsKKworCWF0b21pY190CQljX3N0YXRlOworCXVuc2lnbmVkIGxvbmcJCWNfZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkJY19yZWNvbm5lY3RfamlmZmllczsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWNfc2VuZF93OworCXN0cnVjdCBkZWxheWVkX3dvcmsJY19yZWN2X3c7CisJc3RydWN0IGRlbGF5ZWRfd29yawljX2Nvbm5fdzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJY19kb3duX3c7CisJc3RydWN0IG11dGV4CQljX2NtX2xvY2s7CS8qIHByb3RlY3QgY29ubiBzdGF0ZSAmIGNtICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkCWNfbWFwX2l0ZW07CisJdW5zaWduZWQgbG9uZwkJY19tYXBfcXVldWVkOworCXVuc2lnbmVkIGxvbmcJCWNfbWFwX29mZnNldDsKKwl1bnNpZ25lZCBsb25nCQljX21hcF9ieXRlczsKKworCXVuc2lnbmVkIGludAkJY191bmFja2VkX3BhY2tldHM7CisJdW5zaWduZWQgaW50CQljX3VuYWNrZWRfYnl0ZXM7CisKKwkvKiBQcm90b2NvbCB2ZXJzaW9uICovCisJdW5zaWduZWQgaW50CQljX3ZlcnNpb247Cit9OworCisjZGVmaW5lIFJEU19GTEFHX0NPTkdfQklUTUFQCTB4MDEKKyNkZWZpbmUgUkRTX0ZMQUdfQUNLX1JFUVVJUkVECTB4MDIKKyNkZWZpbmUgUkRTX0ZMQUdfUkVUUkFOU01JVFRFRAkweDA0CisjZGVmaW5lIFJEU19NQVhfQURWX0NSRURJVAkxMjcKKworLyoKKyAqIE1heGltdW0gc3BhY2UgYXZhaWxhYmxlIGZvciBleHRlbnNpb24gaGVhZGVycy4KKyAqLworI2RlZmluZSBSRFNfSEVBREVSX0VYVF9TUEFDRQkxNgorCitzdHJ1Y3QgcmRzX2hlYWRlciB7CisJX19iZTY0CWhfc2VxdWVuY2U7CisJX19iZTY0CWhfYWNrOworCV9fYmUzMgloX2xlbjsKKwlfX2JlMTYJaF9zcG9ydDsKKwlfX2JlMTYJaF9kcG9ydDsKKwl1OAloX2ZsYWdzOworCXU4CWhfY3JlZGl0OworCXU4CWhfcGFkZGluZ1s0XTsKKwlfX3N1bTE2CWhfY3N1bTsKKworCXU4CWhfZXh0aGRyW1JEU19IRUFERVJfRVhUX1NQQUNFXTsKK307CisKKy8qCisgKiBSZXNlcnZlZCAtIGluZGljYXRlcyBlbmQgb2YgZXh0ZW5zaW9ucworICovCisjZGVmaW5lIFJEU19FWFRIRFJfTk9ORQkJMAorCisvKgorICogVGhpcyBleHRlbnNpb24gaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSB2ZXJ5CisgKiBmaXJzdCBtZXNzYWdlIHRoYXQgaXMgc2VudCBvbiBhIG5ldyBjb25uZWN0aW9uLAorICogYW5kIGlkZW50aWZpZXMgdGhlIHByb3RvY29sIGxldmVsLiBUaGlzIHdpbGwgaGVscAorICogcm9sbGluZyB1cGRhdGVzIGlmIGEgZnV0dXJlIGNoYW5nZSByZXF1aXJlcyBicmVha2luZworICogdGhlIHByb3RvY29sLgorICogTkI6IFRoaXMgaXMgbm8gbG9uZ2VyIHRydWUgZm9yIElCLCB3aGVyZSB3ZSBkbyBhIHZlcnNpb24KKyAqIG5lZ290aWF0aW9uIGR1cmluZyB0aGUgY29ubmVjdGlvbiBzZXR1cCBwaGFzZSAocHJvdG9jb2wKKyAqIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgaW5jbHVkZWQgaW4gdGhlIFJETUEgQ00gcHJpdmF0ZSBkYXRhKS4KKyAqLworI2RlZmluZSBSRFNfRVhUSERSX1ZFUlNJT04JMQorc3RydWN0IHJkc19leHRfaGVhZGVyX3ZlcnNpb24geworCV9fYmUzMgkJCWhfdmVyc2lvbjsKK307CisKKy8qCisgKiBUaGlzIGV4dGVuc2lvbiBoZWFkZXIgaXMgaW5jbHVkZWQgaW4gdGhlIFJEUyBtZXNzYWdlCisgKiBjaGFzaW5nIGFuIFJETUEgb3BlcmF0aW9uLgorICovCisjZGVmaW5lIFJEU19FWFRIRFJfUkRNQQkJMgorc3RydWN0IHJkc19leHRfaGVhZGVyX3JkbWEgeworCV9fYmUzMgkJCWhfcmRtYV9ya2V5OworfTsKKworLyoKKyAqIFRoaXMgZXh0ZW5zaW9uIGhlYWRlciB0ZWxscyB0aGUgcGVlciBhYm91dCB0aGUKKyAqIGRlc3RpbmF0aW9uIDxSX0tleSxvZmZzZXQ+IG9mIHRoZSByZXF1ZXN0ZWQgUkRNQQorICogb3BlcmF0aW9uLgorICovCisjZGVmaW5lIFJEU19FWFRIRFJfUkRNQV9ERVNUCTMKK3N0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hX2Rlc3QgeworCV9fYmUzMgkJCWhfcmRtYV9ya2V5OworCV9fYmUzMgkJCWhfcmRtYV9vZmZzZXQ7Cit9OworCisjZGVmaW5lIF9fUkRTX0VYVEhEUl9NQVgJMTYgLyogZm9yIG5vdyAqLworCitzdHJ1Y3QgcmRzX2luY29taW5nIHsKKwlhdG9taWNfdAkJaV9yZWZjb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlfaXRlbTsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24JKmlfY29ubjsKKwlzdHJ1Y3QgcmRzX2hlYWRlcglpX2hkcjsKKwl1bnNpZ25lZCBsb25nCQlpX3J4X2ppZmZpZXM7CisJX19iZTMyCQkJaV9zYWRkcjsKKworCXJkc19yZG1hX2Nvb2tpZV90CWlfcmRtYV9jb29raWU7Cit9OworCisvKgorICogbV9zb2NrX2l0ZW0gYW5kIG1fY29ubl9pdGVtIGFyZSBvbiBsaXN0cyB0aGF0IGFyZSBzZXJpYWxpemVkIHVuZGVyCisgKiBjb25uLT5jX2xvY2suICBtX3NvY2tfaXRlbSBoYXMgYWRkaXRpb25hbCBtZWFuaW5nIGluIHRoYXQgb25jZSBpdCBpcyBlbXB0eQorICogdGhlIG1lc3NhZ2Ugd2lsbCBub3QgYmUgcHV0IGJhY2sgb24gdGhlIHJldHJhbnNtaXQgbGlzdCBhZnRlciBiZWluZyBzZW50LgorICogbWVzc2FnZXMgdGhhdCBhcmUgY2FuY2VsZWQgd2hpbGUgYmVpbmcgc2VudCByZWx5IG9uIHRoaXMuCisgKgorICogbV9pbmMgaXMgdXNlZCBieSBsb29wYmFjayBzbyB0aGF0IGl0IGNhbiBwYXNzIGFuIGluY29taW5nIG1lc3NhZ2Ugc3RyYWlnaHQKKyAqIGJhY2sgdXAgaW50byB0aGUgcnggcGF0aC4gIEl0IGVtYmVkcyBhIHdpcmUgaGVhZGVyIHdoaWNoIGlzIGFsc28gdXNlZCBieQorICogdGhlIHNlbmQgcGF0aCwgd2hpY2ggaXMga2luZCBvZiBhd2t3YXJkLgorICoKKyAqIG1fc29ja19pdGVtIGluZGljYXRlcyB0aGUgbWVzc2FnZSdzIHByZXNlbmNlIG9uIGEgc29ja2V0J3Mgc2VuZCBvciByZWNlaXZlCisgKiBxdWV1ZS4gIG1fcnMgd2lsbCBwb2ludCB0byB0aGF0IHNvY2tldC4KKyAqCisgKiBtX2RhZGRyIGlzIHVzZWQgYnkgY2FuY2VsbGF0aW9uIHRvIHBydW5lIG1lc3NhZ2VzIHRvIGEgZ2l2ZW4gZGVzdGluYXRpb24uCisgKgorICogVGhlIFJEU19NU0dfT05fU09DSyBhbmQgUkRTX01TR19PTl9DT05OIGZsYWdzIGFyZSB1c2VkIHRvIGF2b2lkIGxvY2sKKyAqIG5lc3RpbmcuICBBcyBwYXRocyBpdGVyYXRlIG92ZXIgbWVzc2FnZXMgb24gYSBzb2NrLCBvciBjb25uLCB0aGV5IG11c3QKKyAqIGFsc28gbG9jayB0aGUgY29ubiwgb3Igc29jaywgdG8gcmVtb3ZlIHRoZSBtZXNzYWdlIGZyb20gdGhvc2UgbGlzdHMgdG9vLgorICogVGVzdGluZyB0aGUgZmxhZyB0byBkZXRlcm1pbmUgaWYgdGhlIG1lc3NhZ2UgaXMgc3RpbGwgb24gdGhlIGxpc3RzIGxldHMKKyAqIHVzIGF2b2lkIHRlc3RpbmcgdGhlIGxpc3RfaGVhZCBkaXJlY3RseS4gIFRoYXQgbWVhbnMgZWFjaCBwYXRoIGNhbiB1c2UKKyAqIHRoZSBtZXNzYWdlJ3MgbGlzdF9oZWFkIHRvIGtlZXAgaXQgb24gYSBsb2NhbCBsaXN0IHdoaWxlIGp1Z2dsaW5nIGxvY2tzCisgKiB3aXRob3V0IGNvbmZ1c2luZyB0aGUgb3RoZXIgcGF0aC4KKyAqCisgKiBtX2Fja19zZXEgaXMgYW4gb3B0aW9uYWwgZmllbGQgc2V0IGJ5IHRyYW5zcG9ydHMgd2hvIG5lZWQgYSBkaWZmZXJlbnQKKyAqIHNlcXVlbmNlIG51bWJlciByYW5nZSB0byBpbnZhbGlkYXRlLiAgVGhleSBjYW4gdXNlIHRoaXMgaW4gYSBjYWxsYmFjaworICogdGhhdCB0aGV5IHBhc3MgdG8gcmRzX3NlbmRfZHJvcF9hY2tlZCgpIHRvIHNlZSBpZiBlYWNoIG1lc3NhZ2UgaGFzIGJlZW4KKyAqIGFja2VkLiAgVGhlIEhBU19BQ0tfU0VRIGZsYWcgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IG1lc3NhZ2VzIHdoaWNoIGhhdmVuJ3QKKyAqIGhhZCBhY2tfc2VxIHNldCB5ZXQuCisgKi8KKyNkZWZpbmUgUkRTX01TR19PTl9TT0NLCQkxCisjZGVmaW5lIFJEU19NU0dfT05fQ09OTgkJMgorI2RlZmluZSBSRFNfTVNHX0hBU19BQ0tfU0VRCTMKKyNkZWZpbmUgUkRTX01TR19BQ0tfUkVRVUlSRUQJNAorI2RlZmluZSBSRFNfTVNHX1JFVFJBTlNNSVRURUQJNQorI2RlZmluZSBSRFNfTVNHX01BUFBFRAkJNgorI2RlZmluZSBSRFNfTVNHX1BBR0VWRUMJCTcKKworc3RydWN0IHJkc19tZXNzYWdlIHsKKwlhdG9taWNfdAkJbV9yZWZjb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW1fc29ja19pdGVtOworCXN0cnVjdCBsaXN0X2hlYWQJbV9jb25uX2l0ZW07CisJc3RydWN0IHJkc19pbmNvbWluZwltX2luYzsKKwl1NjQJCQltX2Fja19zZXE7CisJX19iZTMyCQkJbV9kYWRkcjsKKwl1bnNpZ25lZCBsb25nCQltX2ZsYWdzOworCisJLyogTmV2ZXIgYWNjZXNzIG1fcnMgd2l0aG91dCBob2xkaW5nIG1fcnNfbG9jay4KKwkgKiBMb2NrIG5lc3RpbmcgaXMKKwkgKiAgcm0tPm1fcnNfbG9jaworCSAqICAgLT4gcnMtPnJzX2xvY2sKKwkgKi8KKwlzcGlubG9ja190CQltX3JzX2xvY2s7CisJc3RydWN0IHJkc19zb2NrCQkqbV9yczsKKwlzdHJ1Y3QgcmRzX3JkbWFfb3AJKm1fcmRtYV9vcDsKKwlyZHNfcmRtYV9jb29raWVfdAltX3JkbWFfY29va2llOworCXN0cnVjdCByZHNfbXIJCSptX3JkbWFfbXI7CisJdW5zaWduZWQgaW50CQltX25lbnRzOworCXVuc2lnbmVkIGludAkJbV9jb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJbV9zZ1swXTsKK307CisKKy8qCisgKiBUaGUgUkRTIG5vdGlmaWVyIGlzIHVzZWQgKG9wdGlvbmFsbHkpIHRvIHRlbGwgdGhlIGFwcGxpY2F0aW9uIGFib3V0CisgKiBjb21wbGV0ZWQgUkRNQSBvcGVyYXRpb25zLiBSYXRoZXIgdGhhbiBrZWVwaW5nIHRoZSB3aG9sZSByZHMgbWVzc2FnZQorICogYXJvdW5kIG9uIHRoZSBxdWV1ZSwgd2UgYWxsb2NhdGUgYSBzbWFsbCBub3RpZmllciB0aGF0IGlzIHB1dCBvbiB0aGUKKyAqIHNvY2tldCdzIG5vdGlmaWVyX2xpc3QuIE5vdGlmaWNhdGlvbnMgYXJlIGRlbGl2ZXJlZCB0byB0aGUgYXBwbGljYXRpb24KKyAqIHRocm91Z2ggY29udHJvbCBtZXNzYWdlcy4KKyAqLworc3RydWN0IHJkc19ub3RpZmllciB7CisJc3RydWN0IGxpc3RfaGVhZAluX2xpc3Q7CisJdWludDY0X3QJCW5fdXNlcl90b2tlbjsKKwlpbnQJCQluX3N0YXR1czsKK307CisKKy8qKgorICogc3RydWN0IHJkc190cmFuc3BvcnQgLSAgdHJhbnNwb3J0IHNwZWNpZmljIGJlaGF2aW91cmFsIGhvb2tzCisgKgorICogQHhtaXQ6IC54bWl0IGlzIGNhbGxlZCBieSByZHNfc2VuZF94bWl0KCkgdG8gdGVsbCB0aGUgdHJhbnNwb3J0IHRvIHNlbmQKKyAqICAgICAgICBwYXJ0IG9mIGEgbWVzc2FnZS4gIFRoZSBjYWxsZXIgc2VyaWFsaXplcyBvbiB0aGUgc2VuZF9zZW0gc28gdGhpcworICogICAgICAgIGRvZXNuJ3QgbmVlZCB0byBiZSByZWVudHJhbnQgZm9yIGEgZ2l2ZW4gY29ubi4gIFRoZSBoZWFkZXIgbXVzdCBiZQorICogICAgICAgIHNlbnQgYmVmb3JlIHRoZSBkYXRhIHBheWxvYWQuICAueG1pdCBtdXN0IGJlIHByZXBhcmVkIHRvIHNlbmQgYQorICogICAgICAgIG1lc3NhZ2Ugd2l0aCBubyBkYXRhIHBheWxvYWQuICAueG1pdCBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YKKyAqICAgICAgICBieXRlcyB0aGF0IHdlcmUgc2VudCBkb3duIHRoZSBjb25uZWN0aW9uLCBpbmNsdWRpbmcgaGVhZGVyIGJ5dGVzLgorICogICAgICAgIFJldHVybmluZyAwIHRlbGxzIHRoZSBjYWxsZXIgdGhhdCBpdCBkb2Vzbid0IG5lZWQgdG8gcGVyZm9ybSBhbnkKKyAqICAgICAgICBhZGRpdGlvbmFsIHdvcmsgbm93LiAgVGhpcyBpcyB1c3VhbGx5IHRoZSBjYXNlIHdoZW4gdGhlIHRyYW5zcG9ydCBoYXMKKyAqICAgICAgICBmaWxsZWQgdGhlIHNlbmRpbmcgcXVldWUgZm9yIGl0cyBjb25uZWN0aW9uIGFuZCB3aWxsIGhhbmRsZQorICogICAgICAgIHRyaWdnZXJpbmcgdGhlIHJkcyB0aHJlYWQgdG8gY29udGludWUgdGhlIHNlbmQgd2hlbiBzcGFjZSBiZWNvbWVzCisgKiAgICAgICAgYXZhaWxhYmxlLiAgUmV0dXJuaW5nIC1FQUdBSU4gdGVsbHMgdGhlIGNhbGxlciB0byByZXRyeSB0aGUgc2VuZAorICogICAgICAgIGltbWVkaWF0ZWx5LiAgUmV0dXJuaW5nIC1FTk9NRU0gdGVsbHMgdGhlIGNhbGxlciB0byByZXRyeSB0aGUgc2VuZCBhdAorICogICAgICAgIHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KKyAqCisgKiBAY29ubl9zaHV0ZG93bjogY29ubl9zaHV0ZG93biBzdG9wcyB0cmFmZmljIG9uIHRoZSBnaXZlbiBjb25uZWN0aW9uLiAgT25jZQorICogICAgICAgICAgICAgICAgIGl0IHJldHVybnMgdGhlIGNvbm5lY3Rpb24gY2FuIG5vdCBjYWxsIHJkc19yZWN2X2luY29taW5nKCkuCisgKiAgICAgICAgICAgICAgICAgVGhpcyB3aWxsIG9ubHkgYmUgY2FsbGVkIG9uY2UgYWZ0ZXIgY29ubl9jb25uZWN0IHJldHVybnMKKyAqICAgICAgICAgICAgICAgICBub24temVybyBzdWNjZXNzIGFuZCB3aWxsIFRoZSBjYWxsZXIgc2VyaWFsaXplcyB0aGlzIHdpdGgKKyAqICAgICAgICAgICAgICAgICB0aGUgc2VuZCBhbmQgY29ubmVjdGluZyBwYXRocyAoeG1pdF8qIGFuZCBjb25uXyopLiAgVGhlCisgKiAgICAgICAgICAgICAgICAgdHJhbnNwb3J0IGlzIHJlc3BvbnNpYmxlIGZvciBvdGhlciBzZXJpYWxpemF0aW9uLCBpbmNsdWRpbmcKKyAqICAgICAgICAgICAgICAgICByZHNfcmVjdl9pbmNvbWluZygpLiAgVGhpcyBpcyBjYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0IGJ1dAorICogICAgICAgICAgICAgICAgIHNob3VsZCB0cnkgaGFyZCBub3QgdG8gYmxvY2suCisgKgorICogQHhtaXRfY29uZ19tYXA6IFRoaXMgYXNrcyB0aGUgdHJhbnNwb3J0IHRvIHNlbmQgdGhlIGxvY2FsIGJpdG1hcCBkb3duIHRoZQorICogCQkgICBnaXZlbiBjb25uZWN0aW9uLiAgWFhYIGdldCBhIGJldHRlciBzdG9yeSBhYm91dCB0aGUgYml0bWFwCisgKiAJCSAgIGZsYWcgYW5kIGhlYWRlci4KKyAqLworCitzdHJ1Y3QgcmRzX3RyYW5zcG9ydCB7CisJY2hhcgkJCXRfbmFtZVtUUkFOU05BTVNJWl07CisJc3RydWN0IGxpc3RfaGVhZAl0X2l0ZW07CisJc3RydWN0IG1vZHVsZQkJKnRfb3duZXI7CisJdW5zaWduZWQgaW50CQl0X3ByZWZlcl9sb29wYmFjazoxOworCisJaW50ICgqbGFkZHJfY2hlY2spKF9fYmUzMiBhZGRyKTsKKwlpbnQgKCpjb25uX2FsbG9jKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGdmcF90IGdmcCk7CisJdm9pZCAoKmNvbm5fZnJlZSkodm9pZCAqZGF0YSk7CisJaW50ICgqY29ubl9jb25uZWN0KShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCXZvaWQgKCpjb25uX3NodXRkb3duKShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOworCXZvaWQgKCp4bWl0X3ByZXBhcmUpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisJdm9pZCAoKnhtaXRfY29tcGxldGUpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisJaW50ICgqeG1pdCkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkgICAgdW5zaWduZWQgaW50IGhkcl9vZmYsIHVuc2lnbmVkIGludCBzZywgdW5zaWduZWQgaW50IG9mZik7CisJaW50ICgqeG1pdF9jb25nX21hcCkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJICAgICBzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKwlpbnQgKCp4bWl0X3JkbWEpKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgc3RydWN0IHJkc19yZG1hX29wICpvcCk7CisJaW50ICgqcmVjdikoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKwlpbnQgKCppbmNfY29weV90b191c2VyKShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCXNpemVfdCBzaXplKTsKKwl2b2lkICgqaW5jX3B1cmdlKShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOworCXZvaWQgKCppbmNfZnJlZSkoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKTsKKworCWludCAoKmNtX2hhbmRsZV9jb25uZWN0KShzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQsCisJCQkJIHN0cnVjdCByZG1hX2NtX2V2ZW50ICpldmVudCk7CisJaW50ICgqY21faW5pdGlhdGVfY29ubmVjdCkoc3RydWN0IHJkbWFfY21faWQgKmNtX2lkKTsKKwl2b2lkICgqY21fY29ubmVjdF9jb21wbGV0ZSkoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJCSAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpOworCisJdW5zaWduZWQgaW50ICgqc3RhdHNfaW5mb19jb3B5KShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJCXVuc2lnbmVkIGludCBhdmFpbCk7CisJdm9pZCAoKmV4aXQpKHZvaWQpOworCXZvaWQgKigqZ2V0X21yKShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBsb25nIG5yX3NnLAorCQkJc3RydWN0IHJkc19zb2NrICpycywgdTMyICprZXlfcmV0KTsKKwl2b2lkICgqc3luY19tcikodm9pZCAqdHJhbnNfcHJpdmF0ZSwgaW50IGRpcmVjdGlvbik7CisJdm9pZCAoKmZyZWVfbXIpKHZvaWQgKnRyYW5zX3ByaXZhdGUsIGludCBpbnZhbGlkYXRlKTsKKwl2b2lkICgqZmx1c2hfbXJzKSh2b2lkKTsKK307CisKK3N0cnVjdCByZHNfc29jayB7CisJc3RydWN0IHNvY2sJCXJzX3NrOworCisJdTY0CQkJcnNfdXNlcl9hZGRyOworCXU2NAkJCXJzX3VzZXJfYnl0ZXM7CisKKwkvKgorCSAqIGJvdW5kX2FkZHIgdXNlZCBmb3IgYm90aCBpbmNvbWluZyBhbmQgb3V0Z29pbmcsIG5vIElOQUREUl9BTlkKKwkgKiBzdXBwb3J0LgorCSAqLworCXN0cnVjdCByYl9ub2RlCQlyc19ib3VuZF9ub2RlOworCV9fYmUzMgkJCXJzX2JvdW5kX2FkZHI7CisJX19iZTMyCQkJcnNfY29ubl9hZGRyOworCV9fYmUxNgkJCXJzX2JvdW5kX3BvcnQ7CisJX19iZTE2CQkJcnNfY29ubl9wb3J0OworCisJLyoKKwkgKiBUaGlzIGlzIG9ubHkgdXNlZCB0byBjb21tdW5pY2F0ZSB0aGUgdHJhbnNwb3J0IGJldHdlZW4gYmluZCBhbmQKKwkgKiBpbml0aWF0aW5nIGNvbm5lY3Rpb25zLiAgQWxsIG90aGVyIHRyYW5zIHVzZSBpcyByZWZlcmVuY2VkIHRocm91Z2gKKwkgKiB0aGUgY29ubmVjdGlvbi4KKwkgKi8KKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAgICAqcnNfdHJhbnNwb3J0OworCisJLyoKKwkgKiByZHNfc2VuZG1zZyBjYWNoZXMgdGhlIGNvbm4gaXQgdXNlZCB0aGUgbGFzdCB0aW1lIGFyb3VuZC4KKwkgKiBUaGlzIGhlbHBzIGF2b2lkIGNvc3RseSBsb29rdXBzLgorCSAqLworCXN0cnVjdCByZHNfY29ubmVjdGlvbgkqcnNfY29ubjsKKworCS8qIGZsYWcgaW5kaWNhdGluZyB3ZSB3ZXJlIGNvbmdlc3RlZCBvciBub3QgKi8KKwlpbnQJCQlyc19jb25nZXN0ZWQ7CisKKwkvKiByc19sb2NrIHByb3RlY3RzIGFsbCB0aGVzZSBhZGphY2VudCBtZW1iZXJzIGJlZm9yZSB0aGUgbmV3bGluZSAqLworCXNwaW5sb2NrX3QJCXJzX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlyc19zZW5kX3F1ZXVlOworCXUzMgkJCXJzX3NuZF9ieXRlczsKKwlpbnQJCQlyc19yY3ZfYnl0ZXM7CisJc3RydWN0IGxpc3RfaGVhZAlyc19ub3RpZnlfcXVldWU7CS8qIGN1cnJlbnRseSB1c2VkIGZvciBmYWlsZWQgUkRNQXMgKi8KKworCS8qIENvbmdlc3Rpb24gd2FrZV91cC4gSWYgcnNfY29uZ19tb25pdG9yIGlzIHNldCwgd2UgdXNlIGNvbmdfbWFzaworCSAqIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgd29rZW4gdXAuCisJICogSWYgbm90IHNldCwgd2UgdXNlIHJzX2NvbmdfdHJhY2sgdG8gZmluZCBvdXQgd2hldGhlciBhIGNvbmcgbWFwCisJICogdXBkYXRlIGFycml2ZWQuCisJICovCisJdWludDY0X3QJCXJzX2NvbmdfbWFzazsKKwl1aW50NjRfdAkJcnNfY29uZ19ub3RpZnk7CisJc3RydWN0IGxpc3RfaGVhZAlyc19jb25nX2xpc3Q7CisJdW5zaWduZWQgbG9uZwkJcnNfY29uZ190cmFjazsKKworCS8qCisJICogcnNfcmVjdl9sb2NrIHByb3RlY3RzIHRoZSByZWNlaXZlIHF1ZXVlLCBhbmQgaXMKKwkgKiB1c2VkIHRvIHNlcmlhbGl6ZSB3aXRoIHJkc19yZWxlYXNlLgorCSAqLworCXJ3bG9ja190CQlyc19yZWN2X2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAlyc19yZWN2X3F1ZXVlOworCisJLyoganVzdCBmb3Igc3RhdHMgcmVwb3J0aW5nICovCisJc3RydWN0IGxpc3RfaGVhZAlyc19pdGVtOworCisJLyogdGhlc2UgaGF2ZSB0aGVpciBvd24gbG9jayAqLworCXNwaW5sb2NrX3QJCXJzX3JkbWFfbG9jazsKKwlzdHJ1Y3QgcmJfcm9vdAkJcnNfcmRtYV9rZXlzOworCisJLyogU29ja2V0IG9wdGlvbnMgLSBpbiBjYXNlIHRoZXJlIHdpbGwgYmUgbW9yZSAqLworCXVuc2lnbmVkIGNoYXIJCXJzX3JlY3ZlcnIsCisJCQkJcnNfY29uZ19tb25pdG9yOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcmRzX3NvY2sgKnJkc19za190b19ycyhjb25zdCBzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzaywgc3RydWN0IHJkc19zb2NrLCByc19zayk7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpyZHNfcnNfdG9fc2soc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlyZXR1cm4gJnJzLT5yc19zazsKK30KKworLyoKKyAqIFRoZSBzdGFjayBhc3NpZ25zIHNrX3NuZGJ1ZiBhbmQgc2tfcmN2YnVmIHRvIHR3aWNlIHRoZSBzcGVjaWZpZWQgdmFsdWUKKyAqIHRvIGFjY291bnQgZm9yIG92ZXJoZWFkLiAgV2UgZG9uJ3QgYWNjb3VudCBmb3Igb3ZlcmhlYWQsIHdlIGp1c3QgYXBwbHkKKyAqIHRoZSBudW1iZXIgb2YgcGF5bG9hZCBieXRlcyB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIGludCByZHNfc2tfc25kYnVmKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJcmV0dXJuIHJkc19yc190b19zayhycyktPnNrX3NuZGJ1ZiAvIDI7Cit9CitzdGF0aWMgaW5saW5lIGludCByZHNfc2tfcmN2YnVmKHN0cnVjdCByZHNfc29jayAqcnMpCit7CisJcmV0dXJuIHJkc19yc190b19zayhycyktPnNrX3JjdmJ1ZiAvIDI7Cit9CisKK3N0cnVjdCByZHNfc3RhdGlzdGljcyB7CisJdWludDY0X3QJc19jb25uX3Jlc2V0OworCXVpbnQ2NF90CXNfcmVjdl9kcm9wX2JhZF9jaGVja3N1bTsKKwl1aW50NjRfdAlzX3JlY3ZfZHJvcF9vbGRfc2VxOworCXVpbnQ2NF90CXNfcmVjdl9kcm9wX25vX3NvY2s7CisJdWludDY0X3QJc19yZWN2X2Ryb3BfZGVhZF9zb2NrOworCXVpbnQ2NF90CXNfcmVjdl9kZWxpdmVyX3JhY2VkOworCXVpbnQ2NF90CXNfcmVjdl9kZWxpdmVyZWQ7CisJdWludDY0X3QJc19yZWN2X3F1ZXVlZDsKKwl1aW50NjRfdAlzX3JlY3ZfaW1tZWRpYXRlX3JldHJ5OworCXVpbnQ2NF90CXNfcmVjdl9kZWxheWVkX3JldHJ5OworCXVpbnQ2NF90CXNfcmVjdl9hY2tfcmVxdWlyZWQ7CisJdWludDY0X3QJc19yZWN2X3JkbWFfYnl0ZXM7CisJdWludDY0X3QJc19yZWN2X3Bpbmc7CisJdWludDY0X3QJc19zZW5kX3F1ZXVlX2VtcHR5OworCXVpbnQ2NF90CXNfc2VuZF9xdWV1ZV9mdWxsOworCXVpbnQ2NF90CXNfc2VuZF9zZW1fY29udGVudGlvbjsKKwl1aW50NjRfdAlzX3NlbmRfc2VtX3F1ZXVlX3JhY2VkOworCXVpbnQ2NF90CXNfc2VuZF9pbW1lZGlhdGVfcmV0cnk7CisJdWludDY0X3QJc19zZW5kX2RlbGF5ZWRfcmV0cnk7CisJdWludDY0X3QJc19zZW5kX2Ryb3BfYWNrZWQ7CisJdWludDY0X3QJc19zZW5kX2Fja19yZXF1aXJlZDsKKwl1aW50NjRfdAlzX3NlbmRfcXVldWVkOworCXVpbnQ2NF90CXNfc2VuZF9yZG1hOworCXVpbnQ2NF90CXNfc2VuZF9yZG1hX2J5dGVzOworCXVpbnQ2NF90CXNfc2VuZF9wb25nOworCXVpbnQ2NF90CXNfcGFnZV9yZW1haW5kZXJfaGl0OworCXVpbnQ2NF90CXNfcGFnZV9yZW1haW5kZXJfbWlzczsKKwl1aW50NjRfdAlzX2NvcHlfdG9fdXNlcjsKKwl1aW50NjRfdAlzX2NvcHlfZnJvbV91c2VyOworCXVpbnQ2NF90CXNfY29uZ191cGRhdGVfcXVldWVkOworCXVpbnQ2NF90CXNfY29uZ191cGRhdGVfcmVjZWl2ZWQ7CisJdWludDY0X3QJc19jb25nX3NlbmRfZXJyb3I7CisJdWludDY0X3QJc19jb25nX3NlbmRfYmxvY2tlZDsKK307CisKKy8qIGFmX3Jkcy5jICovCit2b2lkIHJkc19zb2NrX2FkZHJlZihzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK3ZvaWQgcmRzX3NvY2tfcHV0KHN0cnVjdCByZHNfc29jayAqcnMpOwordm9pZCByZHNfd2FrZV9za19zbGVlcChzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jkc193YWtlX3NrX3NsZWVwKHN0cnVjdCBzb2NrICpzaykKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd2FpdHEgPSBzay0+c2tfc2xlZXA7CisKKwlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19ERUFEKSAmJiB3YWl0cSkKKwkJd2FrZV91cCh3YWl0cSk7Cit9CitleHRlcm4gd2FpdF9xdWV1ZV9oZWFkX3QgcmRzX3BvbGxfd2FpdHE7CisKKworLyogYmluZC5jICovCitpbnQgcmRzX2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwgaW50IGFkZHJfbGVuKTsKK3ZvaWQgcmRzX3JlbW92ZV9ib3VuZChzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK3N0cnVjdCByZHNfc29jayAqcmRzX2ZpbmRfYm91bmQoX19iZTMyIGFkZHIsIF9fYmUxNiBwb3J0KTsKKworLyogY29uZy5jICovCitpbnQgcmRzX2NvbmdfZ2V0X21hcHMoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2NvbmdfYWRkX2Nvbm4oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2NvbmdfcmVtb3ZlX2Nvbm4oc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgcmRzX2Nvbmdfc2V0X2JpdChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIF9fYmUxNiBwb3J0KTsKK3ZvaWQgcmRzX2NvbmdfY2xlYXJfYml0KHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwgX19iZTE2IHBvcnQpOworaW50IHJkc19jb25nX3dhaXQoc3RydWN0IHJkc19jb25nX21hcCAqbWFwLCBfX2JlMTYgcG9ydCwgaW50IG5vbmJsb2NrLCBzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK3ZvaWQgcmRzX2NvbmdfcXVldWVfdXBkYXRlcyhzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXApOwordm9pZCByZHNfY29uZ19tYXBfdXBkYXRlZChzdHJ1Y3QgcmRzX2NvbmdfbWFwICptYXAsIHVpbnQ2NF90KTsKK2ludCByZHNfY29uZ191cGRhdGVkX3NpbmNlKHVuc2lnbmVkIGxvbmcgKnJlY2VudCk7Cit2b2lkIHJkc19jb25nX2FkZF9zb2NrZXQoc3RydWN0IHJkc19zb2NrICopOwordm9pZCByZHNfY29uZ19yZW1vdmVfc29ja2V0KHN0cnVjdCByZHNfc29jayAqKTsKK3ZvaWQgcmRzX2NvbmdfZXhpdCh2b2lkKTsKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX2NvbmdfdXBkYXRlX2FsbG9jKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CisKKy8qIGNvbm4uYyAqLworaW50IF9faW5pdCByZHNfY29ubl9pbml0KHZvaWQpOwordm9pZCByZHNfY29ubl9leGl0KHZvaWQpOworc3RydWN0IHJkc19jb25uZWN0aW9uICpyZHNfY29ubl9jcmVhdGUoX19iZTMyIGxhZGRyLCBfX2JlMzIgZmFkZHIsCisJCQkJICAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucywgZ2ZwX3QgZ2ZwKTsKK3N0cnVjdCByZHNfY29ubmVjdGlvbiAqcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKF9fYmUzMiBsYWRkciwgX19iZTMyIGZhZGRyLAorCQkJICAgICAgIHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucywgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgcmRzX2Nvbm5fZGVzdHJveShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29ubl9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pOwordm9pZCByZHNfY29ubl9kcm9wKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7Cit2b2lkIHJkc19mb3JfZWFjaF9jb25uX2luZm8oc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGxlbiwKKwkJCSAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICBzdHJ1Y3QgcmRzX2luZm9fbGVuZ3RocyAqbGVucywKKwkJCSAgaW50ICgqdmlzaXRvcikoc3RydWN0IHJkc19jb25uZWN0aW9uICosIHZvaWQgKiksCisJCQkgIHNpemVfdCBpdGVtX2xlbik7Cit2b2lkIF9fcmRzX2Nvbm5fZXJyb3Ioc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBjb25zdCBjaGFyICosIC4uLikKKwkJCQlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSk7CisjZGVmaW5lIHJkc19jb25uX2Vycm9yKGNvbm4sIGZtdC4uLikgXAorCV9fcmRzX2Nvbm5fZXJyb3IoY29ubiwgS0VSTl9XQVJOSU5HICJSRFM6ICIgZm10KQorCitzdGF0aWMgaW5saW5lIGludAorcmRzX2Nvbm5fdHJhbnNpdGlvbihzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIGludCBvbGQsIGludCBuZXcpCit7CisJcmV0dXJuIGF0b21pY19jbXB4Y2hnKCZjb25uLT5jX3N0YXRlLCBvbGQsIG5ldykgPT0gb2xkOworfQorCitzdGF0aWMgaW5saW5lIGludAorcmRzX2Nvbm5fc3RhdGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CityZHNfY29ubl91cChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZjb25uLT5jX3N0YXRlKSA9PSBSRFNfQ09OTl9VUDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3Jkc19jb25uX2Nvbm5lY3Rpbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXJldHVybiBhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkgPT0gUkRTX0NPTk5fQ09OTkVDVElORzsKK30KKworLyogbWVzc2FnZS5jICovCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19tZXNzYWdlX2FsbG9jKHVuc2lnbmVkIGludCBuZW50cywgZ2ZwX3QgZ2ZwKTsKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfY29weV9mcm9tX3VzZXIoc3RydWN0IGlvdmVjICpmaXJzdF9pb3YsCisJCQkJCSAgICAgICBzaXplX3QgdG90YWxfbGVuKTsKK3N0cnVjdCByZHNfbWVzc2FnZSAqcmRzX21lc3NhZ2VfbWFwX3BhZ2VzKHVuc2lnbmVkIGxvbmcgKnBhZ2VfYWRkcnMsIHVuc2lnbmVkIGludCB0b3RhbF9sZW4pOwordm9pZCByZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoc3RydWN0IHJkc19oZWFkZXIgKmhkciwgX19iZTE2IHNwb3J0LAorCQkJCSBfX2JlMTYgZHBvcnQsIHU2NCBzZXEpOworaW50IHJkc19tZXNzYWdlX2FkZF9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB0eXBlLCBjb25zdCB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2ludCByZHNfbWVzc2FnZV9uZXh0X2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLAorCQkJICAgICAgIHVuc2lnbmVkIGludCAqcG9zLCB2b2lkICpidWYsIHVuc2lnbmVkIGludCAqYnVmbGVuKTsKK2ludCByZHNfbWVzc2FnZV9hZGRfdmVyc2lvbl9leHRlbnNpb24oc3RydWN0IHJkc19oZWFkZXIgKmhkciwgdW5zaWduZWQgaW50IHZlcnNpb24pOworaW50IHJkc19tZXNzYWdlX2dldF92ZXJzaW9uX2V4dGVuc2lvbihzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyLCB1bnNpZ25lZCBpbnQgKnZlcnNpb24pOworaW50IHJkc19tZXNzYWdlX2FkZF9yZG1hX2Rlc3RfZXh0ZW5zaW9uKHN0cnVjdCByZHNfaGVhZGVyICpoZHIsIHUzMiByX2tleSwgdTMyIG9mZnNldCk7CitpbnQgcmRzX21lc3NhZ2VfaW5jX2NvcHlfdG9fdXNlcihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsCisJCQkJIHN0cnVjdCBpb3ZlYyAqZmlyc3RfaW92LCBzaXplX3Qgc2l6ZSk7Cit2b2lkIHJkc19tZXNzYWdlX2luY19wdXJnZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOwordm9pZCByZHNfbWVzc2FnZV9pbmNfZnJlZShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMpOwordm9pZCByZHNfbWVzc2FnZV9hZGRyZWYoc3RydWN0IHJkc19tZXNzYWdlICpybSk7Cit2b2lkIHJkc19tZXNzYWdlX3B1dChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTsKK3ZvaWQgcmRzX21lc3NhZ2Vfd2FpdChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtKTsKK3ZvaWQgcmRzX21lc3NhZ2VfdW5tYXBwZWQoc3RydWN0IHJkc19tZXNzYWdlICpybSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZHNfbWVzc2FnZV9tYWtlX2NoZWNrc3VtKHN0cnVjdCByZHNfaGVhZGVyICpoZHIpCit7CisJaGRyLT5oX2NzdW0gPSAwOworCWhkci0+aF9jc3VtID0gaXBfZmFzdF9jc3VtKCh2b2lkICopIGhkciwgc2l6ZW9mKCpoZHIpID4+IDIpOworfQorCitzdGF0aWMgaW5saW5lIGludCByZHNfbWVzc2FnZV92ZXJpZnlfY2hlY2tzdW0oY29uc3Qgc3RydWN0IHJkc19oZWFkZXIgKmhkcikKK3sKKwlyZXR1cm4gIWhkci0+aF9jc3VtIHx8IGlwX2Zhc3RfY3N1bSgodm9pZCAqKSBoZHIsIHNpemVvZigqaGRyKSA+PiAyKSA9PSAwOworfQorCisKKy8qIHBhZ2UuYyAqLworaW50IHJkc19wYWdlX3JlbWFpbmRlcl9hbGxvYyhzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsCisJCQkgICAgIGdmcF90IGdmcCk7CitpbnQgcmRzX3BhZ2VfY29weV91c2VyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJICAgICAgIHZvaWQgX191c2VyICpwdHIsIHVuc2lnbmVkIGxvbmcgYnl0ZXMsCisJCSAgICAgICBpbnQgdG9fdXNlcik7CisjZGVmaW5lIHJkc19wYWdlX2NvcHlfdG9fdXNlcihwYWdlLCBvZmZzZXQsIHB0ciwgYnl0ZXMpIFwKKwlyZHNfcGFnZV9jb3B5X3VzZXIocGFnZSwgb2Zmc2V0LCBwdHIsIGJ5dGVzLCAxKQorI2RlZmluZSByZHNfcGFnZV9jb3B5X2Zyb21fdXNlcihwYWdlLCBvZmZzZXQsIHB0ciwgYnl0ZXMpIFwKKwlyZHNfcGFnZV9jb3B5X3VzZXIocGFnZSwgb2Zmc2V0LCBwdHIsIGJ5dGVzLCAwKQordm9pZCByZHNfcGFnZV9leGl0KHZvaWQpOworCisvKiByZWN2LmMgKi8KK3ZvaWQgcmRzX2luY19pbml0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkgIF9fYmUzMiBzYWRkcik7Cit2b2lkIHJkc19pbmNfYWRkcmVmKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19pbmNfcHV0KHN0cnVjdCByZHNfaW5jb21pbmcgKmluYyk7Cit2b2lkIHJkc19yZWN2X2luY29taW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCSAgICAgICBzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIGdmcF90IGdmcCwgZW51bSBrbV90eXBlIGttKTsKK2ludCByZHNfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKKwkJc2l6ZV90IHNpemUsIGludCBtc2dfZmxhZ3MpOwordm9pZCByZHNfY2xlYXJfcmVjdl9xdWV1ZShzdHJ1Y3QgcmRzX3NvY2sgKnJzKTsKK2ludCByZHNfbm90aWZ5X3F1ZXVlX2dldChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgbXNnaGRyICptc2cpOwordm9pZCByZHNfaW5jX2luZm9fY29weShzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsCisJCSAgICAgICBzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCSAgICAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwgaW50IGZsaXApOworCisvKiBzZW5kLmMgKi8KK2ludCByZHNfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKKwkJc2l6ZV90IHBheWxvYWRfbGVuKTsKK3ZvaWQgcmRzX3NlbmRfcmVzZXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKK2ludCByZHNfc2VuZF94bWl0KHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubik7CitzdHJ1Y3Qgc29ja2FkZHJfaW47Cit2b2lkIHJkc19zZW5kX2Ryb3BfdG8oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHNvY2thZGRyX2luICpkZXN0KTsKK3R5cGVkZWYgaW50ICgqaXNfYWNrZWRfZnVuYykoc3RydWN0IHJkc19tZXNzYWdlICpybSwgdWludDY0X3QgYWNrKTsKK3ZvaWQgcmRzX3NlbmRfZHJvcF9hY2tlZChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4sIHU2NCBhY2ssCisJCQkgaXNfYWNrZWRfZnVuYyBpc19hY2tlZCk7CitpbnQgcmRzX3NlbmRfYWNrZWRfYmVmb3JlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTY0IHNlcSk7Cit2b2lkIHJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soc3RydWN0IGxpc3RfaGVhZCAqbWVzc2FnZXMsIGludCBzdGF0dXMpOworaW50IHJkc19zZW5kX3Bvbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBfX2JlMTYgZHBvcnQpOworc3RydWN0IHJkc19tZXNzYWdlICpyZHNfc2VuZF9nZXRfbWVzc2FnZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKiwKKwkJCQkJIHN0cnVjdCByZHNfcmRtYV9vcCAqKTsKKworLyogcmRtYS5jICovCit2b2lkIHJkc19yZG1hX3VudXNlKHN0cnVjdCByZHNfc29jayAqcnMsIHUzMiByX2tleSwgaW50IGZvcmNlKTsKKworLyogc3RhdHMuYyAqLworREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCByZHNfc3RhdGlzdGljcywgcmRzX3N0YXRzKTsKKyNkZWZpbmUgcmRzX3N0YXRzX2luY193aGljaCh3aGljaCwgbWVtYmVyKSBkbyB7CQlcCisJcGVyX2NwdSh3aGljaCwgZ2V0X2NwdSgpKS5tZW1iZXIrKzsJCVwKKwlwdXRfY3B1KCk7CQkJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZSByZHNfc3RhdHNfaW5jKG1lbWJlcikgcmRzX3N0YXRzX2luY193aGljaChyZHNfc3RhdHMsIG1lbWJlcikKKyNkZWZpbmUgcmRzX3N0YXRzX2FkZF93aGljaCh3aGljaCwgbWVtYmVyLCBjb3VudCkgZG8gewkJXAorCXBlcl9jcHUod2hpY2gsIGdldF9jcHUoKSkubWVtYmVyICs9IGNvdW50OwlcCisJcHV0X2NwdSgpOwkJCQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgcmRzX3N0YXRzX2FkZChtZW1iZXIsIGNvdW50KSByZHNfc3RhdHNfYWRkX3doaWNoKHJkc19zdGF0cywgbWVtYmVyLCBjb3VudCkKK2ludCBfX2luaXQgcmRzX3N0YXRzX2luaXQodm9pZCk7Cit2b2lkIHJkc19zdGF0c19leGl0KHZvaWQpOwordm9pZCByZHNfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSB1aW50NjRfdCAqdmFsdWVzLCBjaGFyICoqbmFtZXMsIHNpemVfdCBucik7CisKKy8qIHN5c2N0bC5jICovCitpbnQgX19pbml0IHJkc19zeXNjdGxfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3N5c2N0bF9leGl0KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9zbmRidWZfbWluOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9zbmRidWZfZGVmYXVsdDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfc25kYnVmX21heDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4X2ppZmZpZXM7CitleHRlcm4gdW5zaWduZWQgaW50ICByZHNfc3lzY3RsX21heF91bmFja2VkX3BhY2tldHM7CitleHRlcm4gdW5zaWduZWQgaW50ICByZHNfc3lzY3RsX21heF91bmFja2VkX2J5dGVzOworZXh0ZXJuIHVuc2lnbmVkIGludCAgcmRzX3N5c2N0bF9waW5nX2VuYWJsZTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfdHJhY2VfZmxhZ3M7CitleHRlcm4gdW5zaWduZWQgaW50ICByZHNfc3lzY3RsX3RyYWNlX2xldmVsOworCisvKiB0aHJlYWRzLmMgKi8KK2ludCBfX2luaXQgcmRzX3RocmVhZHNfaW5pdCh2b2lkKTsKK3ZvaWQgcmRzX3RocmVhZHNfZXhpdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmRzX3dxOwordm9pZCByZHNfY29ubmVjdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICopOwordm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3ZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3ZvaWQgcmRzX3JlY3Zfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqKTsKK3ZvaWQgcmRzX2Nvbm5lY3RfY29tcGxldGUoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKTsKKworLyogdHJhbnNwb3J0LmMgKi8KK2ludCByZHNfdHJhbnNfcmVnaXN0ZXIoc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKTsKK3ZvaWQgcmRzX3RyYW5zX3VucmVnaXN0ZXIoc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKTsKK3N0cnVjdCByZHNfdHJhbnNwb3J0ICpyZHNfdHJhbnNfZ2V0X3ByZWZlcnJlZChfX2JlMzIgYWRkcik7Cit1bnNpZ25lZCBpbnQgcmRzX3RyYW5zX3N0YXRzX2luZm9fY29weShzdHJ1Y3QgcmRzX2luZm9faXRlcmF0b3IgKml0ZXIsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBhdmFpbCk7CitpbnQgX19pbml0IHJkc190cmFuc19pbml0KHZvaWQpOwordm9pZCByZHNfdHJhbnNfZXhpdCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvcmRzL3JlY3YuYyBiL25ldC9yZHMvcmVjdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMTE4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3JlY3YuYwpAQCAtMCwwICsxLDU0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorCit2b2lkIHJkc19pbmNfaW5pdChzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJICBfX2JlMzIgc2FkZHIpCit7CisJYXRvbWljX3NldCgmaW5jLT5pX3JlZmNvdW50LCAxKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5jLT5pX2l0ZW0pOworCWluYy0+aV9jb25uID0gY29ubjsKKwlpbmMtPmlfc2FkZHIgPSBzYWRkcjsKKwlpbmMtPmlfcmRtYV9jb29raWUgPSAwOworfQorCit2b2lkIHJkc19pbmNfYWRkcmVmKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYykKK3sKKwlyZHNkZWJ1ZygiYWRkcmVmIGluYyAlcCByZWYgJWRcbiIsIGluYywgYXRvbWljX3JlYWQoJmluYy0+aV9yZWZjb3VudCkpOworCWF0b21pY19pbmMoJmluYy0+aV9yZWZjb3VudCk7Cit9CisKK3ZvaWQgcmRzX2luY19wdXQoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jKQoreworCXJkc2RlYnVnKCJwdXQgaW5jICVwIHJlZiAlZFxuIiwgaW5jLCBhdG9taWNfcmVhZCgmaW5jLT5pX3JlZmNvdW50KSk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmluYy0+aV9yZWZjb3VudCkpIHsKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZpbmMtPmlfaXRlbSkpOworCisJCWluYy0+aV9jb25uLT5jX3RyYW5zLT5pbmNfZnJlZShpbmMpOworCX0KK30KKworc3RhdGljIHZvaWQgcmRzX3JlY3ZfcmN2YnVmX2RlbHRhKHN0cnVjdCByZHNfc29jayAqcnMsIHN0cnVjdCBzb2NrICpzaywKKwkJCQkgIHN0cnVjdCByZHNfY29uZ19tYXAgKm1hcCwKKwkJCQkgIGludCBkZWx0YSwgX19iZTE2IHBvcnQpCit7CisJaW50IG5vd19jb25nZXN0ZWQ7CisKKwlpZiAoZGVsdGEgPT0gMCkKKwkJcmV0dXJuOworCisJcnMtPnJzX3Jjdl9ieXRlcyArPSBkZWx0YTsKKwlub3dfY29uZ2VzdGVkID0gcnMtPnJzX3Jjdl9ieXRlcyA+IHJkc19za19yY3ZidWYocnMpOworCisJcmRzZGVidWcoInJzICVwICglcEk0OiV1KSByZWN2IGJ5dGVzICVkIGJ1ZiAlZCAiCisJICAibm93X2NvbmcgJWQgZGVsdGEgJWRcbiIsCisJICBycywgJnJzLT5yc19ib3VuZF9hZGRyLAorCSAgbnRvaHMocnMtPnJzX2JvdW5kX3BvcnQpLCBycy0+cnNfcmN2X2J5dGVzLAorCSAgcmRzX3NrX3JjdmJ1ZihycyksIG5vd19jb25nZXN0ZWQsIGRlbHRhKTsKKworCS8qIHdhc24ndCAtPiBhbSBjb25nZXN0ZWQgKi8KKwlpZiAoIXJzLT5yc19jb25nZXN0ZWQgJiYgbm93X2Nvbmdlc3RlZCkgeworCQlycy0+cnNfY29uZ2VzdGVkID0gMTsKKwkJcmRzX2Nvbmdfc2V0X2JpdChtYXAsIHBvcnQpOworCQlyZHNfY29uZ19xdWV1ZV91cGRhdGVzKG1hcCk7CisJfQorCS8qIHdhcyAtPiBhcmVuJ3QgY29uZ2VzdGVkICovCisJLyogUmVxdWlyZSBtb3JlIGZyZWUgc3BhY2UgYmVmb3JlIHJlcG9ydGluZyB1bmNvbmdlc3RlZCB0byBwcmV2ZW50CisJICAgYm91bmNpbmcgY29uZy91bmNvbmcgc3RhdGUgdG9vIG9mdGVuICovCisJZWxzZSBpZiAocnMtPnJzX2Nvbmdlc3RlZCAmJiAocnMtPnJzX3Jjdl9ieXRlcyA8IChyZHNfc2tfcmN2YnVmKHJzKS8yKSkpIHsKKwkJcnMtPnJzX2Nvbmdlc3RlZCA9IDA7CisJCXJkc19jb25nX2NsZWFyX2JpdChtYXAsIHBvcnQpOworCQlyZHNfY29uZ19xdWV1ZV91cGRhdGVzKG1hcCk7CisJfQorCisJLyogZG8gbm90aGluZyBpZiBubyBjaGFuZ2UgaW4gY29uZyBzdGF0ZSAqLworfQorCisvKgorICogUHJvY2VzcyBhbGwgZXh0ZW5zaW9uIGhlYWRlcnMgdGhhdCBjb21lIHdpdGggdGhpcyBtZXNzYWdlLgorICovCitzdGF0aWMgdm9pZCByZHNfcmVjdl9pbmNvbWluZ19leHRoZHJzKHN0cnVjdCByZHNfaW5jb21pbmcgKmluYywgc3RydWN0IHJkc19zb2NrICpycykKK3sKKwlzdHJ1Y3QgcmRzX2hlYWRlciAqaGRyID0gJmluYy0+aV9oZHI7CisJdW5zaWduZWQgaW50IHBvcyA9IDAsIHR5cGUsIGxlbjsKKwl1bmlvbiB7CisJCXN0cnVjdCByZHNfZXh0X2hlYWRlcl92ZXJzaW9uIHZlcnNpb247CisJCXN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hIHJkbWE7CisJCXN0cnVjdCByZHNfZXh0X2hlYWRlcl9yZG1hX2Rlc3QgcmRtYV9kZXN0OworCX0gYnVmZmVyOworCisJd2hpbGUgKDEpIHsKKwkJbGVuID0gc2l6ZW9mKGJ1ZmZlcik7CisJCXR5cGUgPSByZHNfbWVzc2FnZV9uZXh0X2V4dGVuc2lvbihoZHIsICZwb3MsICZidWZmZXIsICZsZW4pOworCQlpZiAodHlwZSA9PSBSRFNfRVhUSERSX05PTkUpCisJCQlicmVhazsKKwkJLyogUHJvY2VzcyBleHRlbnNpb24gaGVhZGVyIGhlcmUgKi8KKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgUkRTX0VYVEhEUl9SRE1BOgorCQkJcmRzX3JkbWFfdW51c2UocnMsIGJlMzJfdG9fY3B1KGJ1ZmZlci5yZG1hLmhfcmRtYV9ya2V5KSwgMCk7CisJCQlicmVhazsKKworCQljYXNlIFJEU19FWFRIRFJfUkRNQV9ERVNUOgorCQkJLyogV2UgaWdub3JlIHRoZSBzaXplIGZvciBub3cuIFdlIGNvdWxkIHN0YXNoIGl0CisJCQkgKiBzb21ld2hlcmUgYW5kIHVzZSBpdCBmb3IgZXJyb3IgY2hlY2tpbmcuICovCisJCQlpbmMtPmlfcmRtYV9jb29raWUgPSByZHNfcmRtYV9tYWtlX2Nvb2tpZSgKKwkJCQkJYmUzMl90b19jcHUoYnVmZmVyLnJkbWFfZGVzdC5oX3JkbWFfcmtleSksCisJCQkJCWJlMzJfdG9fY3B1KGJ1ZmZlci5yZG1hX2Rlc3QuaF9yZG1hX29mZnNldCkpOworCisJCQlicmVhazsKKwkJfQorCX0KK30KKworLyoKKyAqIFRoZSB0cmFuc3BvcnQgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGlzIGlzIHNlcmlhbGl6ZWQgYWdhaW5zdCBvdGhlcgorICogcnggYW5kIGNvbm4gcmVzZXQgb24gdGhpcyBzcGVjaWZpYyBjb25uLgorICoKKyAqIFdlIGN1cnJlbnRseSBhc3NlcnQgdGhhdCBvbmx5IG9uZSBmcmFnbWVudGVkIG1lc3NhZ2Ugd2lsbCBiZSBzZW50CisgKiBkb3duIGEgY29ubmVjdGlvbiBhdCBhIHRpbWUuICBUaGlzIGxldHMgdXMgcmVhc3NlbWJsZSBpbiB0aGUgY29ubgorICogaW5zdGVhZCBvZiBwZXItZmxvdyB3aGljaCBtZWFucyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZ28gZGlnZ2luZyB0aHJvdWdoCisgKiBmbG93cyB0byB0ZWFyIGRvd24gcGFydGlhbCByZWFzc2VtYmx5IHByb2dyZXNzIG9uIGNvbm4gZmFpbHVyZSBhbmQKKyAqIHdlIHNhdmUgZmxvdyBsb29rdXAgYW5kIGxvY2tpbmcgZm9yIGVhY2ggZnJhZyBhcnJpdmFsLiAgSXQgZG9lcyBtZWFuCisgKiB0aGF0IHNtYWxsIG1lc3NhZ2VzIHdpbGwgd2FpdCBiZWhpbmQgbGFyZ2Ugb25lcy4gIEZyYWdtZW50aW5nIGF0IGFsbAorICogaXMgb25seSB0byByZWR1Y2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBwcmUtcG9zdGVkIGJ1ZmZlcnMuCisgKgorICogVGhlIGNhbGxlciBwYXNzZXMgaW4gc2FkZHIgYW5kIGRhZGRyIGluc3RlYWQgb2YgdXMgZ2V0dGluZyBpdCBmcm9tIHRoZQorICogY29ubi4gIFRoaXMgbGV0cyBsb29wYmFjaywgd2hvIG9ubHkgaGFzIG9uZSBjb25uIGZvciBib3RoIGRpcmVjdGlvbnMsCisgKiB0ZWxsIHVzIHdoaWNoIHJvbGVzIHRoZSBhZGRycyBpbiB0aGUgY29ubiBhcmUgcGxheWluZyBmb3IgdGhpcyBtZXNzYWdlLgorICovCit2b2lkIHJkc19yZWN2X2luY29taW5nKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCisJCSAgICAgICBzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIGdmcF90IGdmcCwgZW51bSBrbV90eXBlIGttKQoreworCXN0cnVjdCByZHNfc29jayAqcnMgPSBOVUxMOworCXN0cnVjdCBzb2NrICpzazsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaW5jLT5pX2Nvbm4gPSBjb25uOworCWluYy0+aV9yeF9qaWZmaWVzID0gamlmZmllczsKKworCXJkc2RlYnVnKCJjb25uICVwIG5leHQgJWxsdSBpbmMgJXAgc2VxICVsbHUgbGVuICV1IHNwb3J0ICV1IGRwb3J0ICV1ICIKKwkJICJmbGFncyAweCV4IHJ4X2ppZmZpZXMgJWx1XG4iLCBjb25uLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyljb25uLT5jX25leHRfcnhfc2VxLAorCQkgaW5jLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliZTY0X3RvX2NwdShpbmMtPmlfaGRyLmhfc2VxdWVuY2UpLAorCQkgYmUzMl90b19jcHUoaW5jLT5pX2hkci5oX2xlbiksCisJCSBiZTE2X3RvX2NwdShpbmMtPmlfaGRyLmhfc3BvcnQpLAorCQkgYmUxNl90b19jcHUoaW5jLT5pX2hkci5oX2Rwb3J0KSwKKwkJIGluYy0+aV9oZHIuaF9mbGFncywKKwkJIGluYy0+aV9yeF9qaWZmaWVzKTsKKworCS8qCisJICogU2VxdWVuY2UgbnVtYmVycyBzaG91bGQgb25seSBpbmNyZWFzZS4gIE1lc3NhZ2VzIGdldCB0aGVpcgorCSAqIHNlcXVlbmNlIG51bWJlciBhcyB0aGV5J3JlIHF1ZXVlZCBpbiBhIHNlbmRpbmcgY29ubi4gIFRoZXkKKwkgKiBjYW4gYmUgZHJvcHBlZCwgdGhvdWdoLCBpZiB0aGUgc2VuZGluZyBzb2NrZXQgaXMgY2xvc2VkIGJlZm9yZQorCSAqIHRoZXkgaGl0IHRoZSB3aXJlLiAgU28gc2VxdWVuY2UgbnVtYmVycyBjYW4gc2tpcCBmb3J3YXJkCisJICogdW5kZXIgbm9ybWFsIG9wZXJhdGlvbi4gIFRoZXkgY2FuIGFsc28gZHJvcCBiYWNrIGluIHRoZSBjb25uCisJICogZmFpbG92ZXIgY2FzZSBhcyBwcmV2aW91c2x5IHNlbnQgbWVzc2FnZXMgYXJlIHJlc2VudCBkb3duIHRoZQorCSAqIG5ldyBpbnN0YW5jZSBvZiBhIGNvbm4uICBXZSBkcm9wIHRob3NlLCBvdGhlcndpc2Ugd2UgaGF2ZQorCSAqIHRvIGFzc3VtZSB0aGF0IHRoZSBuZXh0IHZhbGlkIHNlcSBkb2VzIG5vdCBjb21lIGFmdGVyIGEKKwkgKiBob2xlIGluIHRoZSBmcmFnbWVudCBzdHJlYW0uCisJICoKKwkgKiBUaGUgaGVhZGVycyBkb24ndCBnaXZlIHVzIGEgd2F5IHRvIHJlYWxpemUgaWYgZnJhZ21lbnRzIG9mCisJICogYSBtZXNzYWdlIGhhdmUgYmVlbiBkcm9wcGVkLiAgV2UgYXNzdW1lIHRoYXQgZnJhZ3MgdGhhdCBhcnJpdmUKKwkgKiB0byBhIGZsb3cgYXJlIHBhcnQgb2YgdGhlIGN1cnJlbnQgbWVzc2FnZSBvbiB0aGUgZmxvdyB0aGF0IGlzCisJICogYmVpbmcgcmVhc3NlbWJsZWQuICBUaGlzIG1lYW5zIHRoYXQgc2VuZGVycyBjYW4ndCBkcm9wIG1lc3NhZ2VzCisJICogZnJvbSB0aGUgc2VuZGluZyBjb25uIHVudGlsIGFsbCB0aGVpciBmcmFncyBhcmUgc2VudC4KKwkgKgorCSAqIFhYWCB3ZSBjb3VsZCBzcGVuZCBtb3JlIG9uIHRoZSB3aXJlIHRvIGdldCBtb3JlIHJvYnVzdCBmYWlsdXJlCisJICogZGV0ZWN0aW9uLCBhcmd1YWJseSB3b3J0aCBpdCB0byBhdm9pZCBkYXRhIGNvcnJ1cHRpb24uCisJICovCisJaWYgKGJlNjRfdG9fY3B1KGluYy0+aV9oZHIuaF9zZXF1ZW5jZSkgPCBjb25uLT5jX25leHRfcnhfc2VxCisJICYmIChpbmMtPmlfaGRyLmhfZmxhZ3MgJiBSRFNfRkxBR19SRVRSQU5TTUlUVEVEKSkgeworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kcm9wX29sZF9zZXEpOworCQlnb3RvIG91dDsKKwl9CisJY29ubi0+Y19uZXh0X3J4X3NlcSA9IGJlNjRfdG9fY3B1KGluYy0+aV9oZHIuaF9zZXF1ZW5jZSkgKyAxOworCisJaWYgKHJkc19zeXNjdGxfcGluZ19lbmFibGUgJiYgaW5jLT5pX2hkci5oX2Rwb3J0ID09IDApIHsKKwkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfcGluZyk7CisJCXJkc19zZW5kX3BvbmcoY29ubiwgaW5jLT5pX2hkci5oX3Nwb3J0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcnMgPSByZHNfZmluZF9ib3VuZChkYWRkciwgaW5jLT5pX2hkci5oX2Rwb3J0KTsKKwlpZiAocnMgPT0gTlVMTCkgeworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kcm9wX25vX3NvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBQcm9jZXNzIGV4dGVuc2lvbiBoZWFkZXJzICovCisJcmRzX3JlY3ZfaW5jb21pbmdfZXh0aGRycyhpbmMsIHJzKTsKKworCS8qIFdlIGNhbiBiZSByYWNpbmcgd2l0aCByZHNfcmVsZWFzZSgpIHdoaWNoIG1hcmtzIHRoZSBzb2NrZXQgZGVhZC4gKi8KKwlzayA9IHJkc19yc190b19zayhycyk7CisKKwkvKiBzZXJpYWxpemUgd2l0aCByZHNfcmVsZWFzZSAtPiBzb2NrX29ycGhhbiAqLworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCWlmICghc29ja19mbGFnKHNrLCBTT0NLX0RFQUQpKSB7CisJCXJkc2RlYnVnKCJhZGRpbmcgaW5jICVwIHRvIHJzICVwJ3MgcmVjdiBxdWV1ZVxuIiwgaW5jLCBycyk7CisJCXJkc19zdGF0c19pbmMoc19yZWN2X3F1ZXVlZCk7CisJCXJkc19yZWN2X3JjdmJ1Zl9kZWx0YShycywgc2ssIGluYy0+aV9jb25uLT5jX2xjb25nLAorCQkJCSAgICAgIGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pLAorCQkJCSAgICAgIGluYy0+aV9oZHIuaF9kcG9ydCk7CisJCXJkc19pbmNfYWRkcmVmKGluYyk7CisJCWxpc3RfYWRkX3RhaWwoJmluYy0+aV9pdGVtLCAmcnMtPnJzX3JlY3ZfcXVldWUpOworCQlfX3Jkc193YWtlX3NrX3NsZWVwKHNrKTsKKwl9IGVsc2UgeworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kcm9wX2RlYWRfc29jayk7CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisKK291dDoKKwlpZiAocnMpCisJCXJkc19zb2NrX3B1dChycyk7Cit9CisKKy8qCisgKiBiZSB2ZXJ5IGNhcmVmdWwgaGVyZS4gIFRoaXMgaXMgYmVpbmcgY2FsbGVkIGFzIHRoZSBjb25kaXRpb24gaW4KKyAqIHdhaXRfZXZlbnRfKigpIG5lZWRzIHRvIGNvcGUgd2l0aCBiZWluZyBjYWxsZWQgbWFueSB0aW1lcy4KKyAqLworc3RhdGljIGludCByZHNfbmV4dF9pbmNvbWluZyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX2luY29taW5nICoqaW5jKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoKmluYyA9PSBOVUxMKSB7CisJCXJlYWRfbG9ja19pcnFzYXZlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7CisJCWlmICghbGlzdF9lbXB0eSgmcnMtPnJzX3JlY3ZfcXVldWUpKSB7CisJCQkqaW5jID0gbGlzdF9lbnRyeShycy0+cnNfcmVjdl9xdWV1ZS5uZXh0LAorCQkJCQkgIHN0cnVjdCByZHNfaW5jb21pbmcsCisJCQkJCSAgaV9pdGVtKTsKKwkJCXJkc19pbmNfYWRkcmVmKCppbmMpOworCQl9CisJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gKmluYyAhPSBOVUxMOworfQorCitzdGF0aWMgaW50IHJkc19zdGlsbF9xdWV1ZWQoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLAorCQkJICAgIGludCBkcm9wKQoreworCXN0cnVjdCBzb2NrICpzayA9IHJkc19yc190b19zayhycyk7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmaW5jLT5pX2l0ZW0pKSB7CisJCXJldCA9IDE7CisJCWlmIChkcm9wKSB7CisJCQkvKiBYWFggbWFrZSBzdXJlIHRoaXMgaV9jb25uIGlzIHJlbGlhYmxlICovCisJCQlyZHNfcmVjdl9yY3ZidWZfZGVsdGEocnMsIHNrLCBpbmMtPmlfY29ubi0+Y19sY29uZywKKwkJCQkJICAgICAgLWJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pLAorCQkJCQkgICAgICBpbmMtPmlfaGRyLmhfZHBvcnQpOworCQkJbGlzdF9kZWxfaW5pdCgmaW5jLT5pX2l0ZW0pOworCQkJcmRzX2luY19wdXQoaW5jKTsKKwkJfQorCX0KKwl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX3JlY3ZfbG9jaywgZmxhZ3MpOworCisJcmRzZGVidWcoImluYyAlcCBycyAlcCBzdGlsbCAlZCBkcm9wcGVkICVkXG4iLCBpbmMsIHJzLCByZXQsIGRyb3ApOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBQdWxsIGVycm9ycyBvZmYgdGhlIGVycm9yIHF1ZXVlLgorICogSWYgbXNnaGRyIGlzIE5VTEwsIHdlIHdpbGwganVzdCBwdXJnZSB0aGUgZXJyb3IgcXVldWUuCisgKi8KK2ludCByZHNfbm90aWZ5X3F1ZXVlX2dldChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgbXNnaGRyICptc2doZHIpCit7CisJc3RydWN0IHJkc19ub3RpZmllciAqbm90aWZpZXI7CisJc3RydWN0IHJkc19yZG1hX25vdGlmeSBjbXNnOworCXVuc2lnbmVkIGludCBjb3VudCA9IDAsIG1heF9tZXNzYWdlcyA9IH4wVTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChjb3B5KTsKKwlpbnQgZXJyID0gMDsKKworCisJLyogcHV0X2Ntc2cgY29waWVzIHRvIHVzZXIgc3BhY2UgYW5kIHRodXMgbWF5IHNsZWVwLiBXZSBjYW4ndCBkbyB0aGlzCisJICogd2l0aCByc19sb2NrIGhlbGQsIHNvIGZpcnN0IGdyYWIgYXMgbWFueSBub3RpZmljYXRpb25zIGFzIHdlIGNhbiBzdHVmZgorCSAqIGluIHRoZSB1c2VyIHByb3ZpZGVkIGNtc2cgYnVmZmVyLiBXZSBkb24ndCB0cnkgdG8gY29weSBtb3JlLCB0byBhdm9pZAorCSAqIGxvc2luZyBub3RpZmljYXRpb25zIC0gZXhjZXB0IHdoZW4gdGhlIGJ1ZmZlciBpcyBzbyBzbWFsbCB0aGF0IGl0IHdvdWxkbid0CisJICogZXZlbiBob2xkIGEgc2luZ2xlIG5vdGlmaWNhdGlvbi4gVGhlbiB3ZSBnaXZlIGhpbSBhcyBtdWNoIG9mIHRoaXMgc2luZ2xlCisJICogbXNnIGFzIHdlIGNhbiBzcXVlZXplIGluLCBhbmQgc2V0IE1TR19DVFJVTkMuCisJICovCisJaWYgKG1zZ2hkcikgeworCQltYXhfbWVzc2FnZXMgPSBtc2doZHItPm1zZ19jb250cm9sbGVuIC8gQ01TR19TUEFDRShzaXplb2YoY21zZykpOworCQlpZiAoIW1heF9tZXNzYWdlcykKKwkJCW1heF9tZXNzYWdlcyA9IDE7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZycy0+cnNfbm90aWZ5X3F1ZXVlKSAmJiBjb3VudCA8IG1heF9tZXNzYWdlcykgeworCQlub3RpZmllciA9IGxpc3RfZW50cnkocnMtPnJzX25vdGlmeV9xdWV1ZS5uZXh0LAorCQkJCXN0cnVjdCByZHNfbm90aWZpZXIsIG5fbGlzdCk7CisJCWxpc3RfbW92ZSgmbm90aWZpZXItPm5fbGlzdCwgJmNvcHkpOworCQljb3VudCsrOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmNvcHkpKSB7CisJCW5vdGlmaWVyID0gbGlzdF9lbnRyeShjb3B5Lm5leHQsIHN0cnVjdCByZHNfbm90aWZpZXIsIG5fbGlzdCk7CisKKwkJaWYgKG1zZ2hkcikgeworCQkJY21zZy51c2VyX3Rva2VuID0gbm90aWZpZXItPm5fdXNlcl90b2tlbjsKKwkJCWNtc2cuc3RhdHVzICA9IG5vdGlmaWVyLT5uX3N0YXR1czsKKworCQkJZXJyID0gcHV0X2Ntc2cobXNnaGRyLCBTT0xfUkRTLCBSRFNfQ01TR19SRE1BX1NUQVRVUywKKwkJCQkJc2l6ZW9mKGNtc2cpLCAmY21zZyk7CisJCQlpZiAoZXJyKQorCQkJCWJyZWFrOworCQl9CisKKwkJbGlzdF9kZWxfaW5pdCgmbm90aWZpZXItPm5fbGlzdCk7CisJCWtmcmVlKG5vdGlmaWVyKTsKKwl9CisKKwkvKiBJZiB3ZSBiYWlsZWQgb3V0IGJlY2F1c2Ugb2YgYW4gZXJyb3IgaW4gcHV0X2Ntc2csCisJICogd2UgbWF5IGJlIGxlZnQgd2l0aCBvbmUgb3IgbW9yZSBub3RpZmljYXRpb25zIHRoYXQgd2UKKwkgKiBkaWRuJ3QgcHJvY2Vzcy4gUmV0dXJuIHRoZW0gdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuICovCisJaWYgKCFsaXN0X2VtcHR5KCZjb3B5KSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9zcGxpY2UoJmNvcHksICZycy0+cnNfbm90aWZ5X3F1ZXVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogUXVldWUgYSBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbgorICovCitzdGF0aWMgaW50IHJkc19ub3RpZnlfY29uZyhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgbXNnaGRyICptc2doZHIpCit7CisJdWludDY0X3Qgbm90aWZ5ID0gcnMtPnJzX2Nvbmdfbm90aWZ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCWVyciA9IHB1dF9jbXNnKG1zZ2hkciwgU09MX1JEUywgUkRTX0NNU0dfQ09OR19VUERBVEUsCisJCQlzaXplb2Yobm90aWZ5KSwgJm5vdGlmeSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCXJzLT5yc19jb25nX25vdGlmeSAmPSB+bm90aWZ5OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlY2VpdmUgYW55IGNvbnRyb2wgbWVzc2FnZXMuCisgKi8KK3N0YXRpYyBpbnQgcmRzX2Ntc2dfcmVjdihzdHJ1Y3QgcmRzX2luY29taW5nICppbmMsIHN0cnVjdCBtc2doZHIgKm1zZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChpbmMtPmlfcmRtYV9jb29raWUpIHsKKwkJcmV0ID0gcHV0X2Ntc2cobXNnLCBTT0xfUkRTLCBSRFNfQ01TR19SRE1BX0RFU1QsCisJCQkJc2l6ZW9mKGluYy0+aV9yZG1hX2Nvb2tpZSksICZpbmMtPmlfcmRtYV9jb29raWUpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHJkc19yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQlzaXplX3Qgc2l6ZSwgaW50IG1zZ19mbGFncykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gcmRzX3NrX3RvX3JzKHNrKTsKKwlsb25nIHRpbWVvOworCWludCByZXQgPSAwLCBub25ibG9jayA9IG1zZ19mbGFncyAmIE1TR19ET05UV0FJVDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3QgcmRzX2luY29taW5nICppbmMgPSBOVUxMOworCisJLyogdWRwX3JlY3Ztc2coKS0+c29ja19yZWN2dGltZW8oKSBnZXRzIGF3YXkgd2l0aG91dCBsb2NraW5nIHRvby4uICovCisJdGltZW8gPSBzb2NrX3JjdnRpbWVvKHNrLCBub25ibG9jayk7CisKKwlyZHNkZWJ1Zygic2l6ZSAlenUgZmxhZ3MgMHgleCB0aW1lbyAlbGRcbiIsIHNpemUsIG1zZ19mbGFncywgdGltZW8pOworCisJaWYgKG1zZ19mbGFncyAmIE1TR19PT0IpCisJCWdvdG8gb3V0OworCisJLyogSWYgdGhlcmUgYXJlIHBlbmRpbmcgbm90aWZpY2F0aW9ucywgZG8gdGhvc2UgLSBhbmQgbm90aGluZyBlbHNlICovCisJaWYgKCFsaXN0X2VtcHR5KCZycy0+cnNfbm90aWZ5X3F1ZXVlKSkgeworCQlyZXQgPSByZHNfbm90aWZ5X3F1ZXVlX2dldChycywgbXNnKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJzLT5yc19jb25nX25vdGlmeSkgeworCQlyZXQgPSByZHNfbm90aWZ5X2NvbmcocnMsIG1zZyk7CisJCWdvdG8gb3V0OworCX0KKworCXdoaWxlICgxKSB7CisJCWlmICghcmRzX25leHRfaW5jb21pbmcocnMsICZpbmMpKSB7CisJCQlpZiAobm9uYmxvY2spIHsKKwkJCQlyZXQgPSAtRUFHQUlOOworCQkJCWJyZWFrOworCQkJfQorCisJCQl0aW1lbyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KCpzay0+c2tfc2xlZXAsCisJCQkJCQlyZHNfbmV4dF9pbmNvbWluZyhycywgJmluYyksCisJCQkJCQl0aW1lbyk7CisJCQlyZHNkZWJ1ZygicmVjdm1zZyB3b2tlIGluYyAlcCB0aW1lbyAlbGRcbiIsIGluYywKKwkJCQkgdGltZW8pOworCQkJaWYgKHRpbWVvID4gMCB8fCB0aW1lbyA9PSBNQVhfU0NIRURVTEVfVElNRU9VVCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gdGltZW87CisJCQlpZiAocmV0ID09IDApCisJCQkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmRzZGVidWcoImNvcHlpbmcgaW5jICVwIGZyb20gJXBJNDoldSB0byB1c2VyXG4iLCBpbmMsCisJCQkgJmluYy0+aV9jb25uLT5jX2ZhZGRyLAorCQkJIG50b2hzKGluYy0+aV9oZHIuaF9zcG9ydCkpOworCQlyZXQgPSBpbmMtPmlfY29ubi0+Y190cmFucy0+aW5jX2NvcHlfdG9fdXNlcihpbmMsIG1zZy0+bXNnX2lvdiwKKwkJCQkJCQkgICAgIHNpemUpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIGlmIHRoZSBtZXNzYWdlIHdlIGp1c3QgY29waWVkIGlzbid0IGF0IHRoZSBoZWFkIG9mIHRoZQorCQkgKiByZWN2IHF1ZXVlIHRoZW4gc29tZW9uZSBlbHNlIHJhY2VkIHVzIHRvIHJldHVybiBpdCwgdHJ5CisJCSAqIHRvIGdldCB0aGUgbmV4dCBtZXNzYWdlLgorCQkgKi8KKwkJaWYgKCFyZHNfc3RpbGxfcXVldWVkKHJzLCBpbmMsICEobXNnX2ZsYWdzICYgTVNHX1BFRUspKSkgeworCQkJcmRzX2luY19wdXQoaW5jKTsKKwkJCWluYyA9IE5VTEw7CisJCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kZWxpdmVyX3JhY2VkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJldCA8IGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pKSB7CisJCQlpZiAobXNnX2ZsYWdzICYgTVNHX1RSVU5DKQorCQkJCXJldCA9IGJlMzJfdG9fY3B1KGluYy0+aV9oZHIuaF9sZW4pOworCQkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOworCQl9CisKKwkJaWYgKHJkc19jbXNnX3JlY3YoaW5jLCBtc2cpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZHNfc3RhdHNfaW5jKHNfcmVjdl9kZWxpdmVyZWQpOworCisJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiltc2ctPm1zZ19uYW1lOworCQlpZiAoc2luKSB7CisJCQlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCQkJc2luLT5zaW5fcG9ydCA9IGluYy0+aV9oZHIuaF9zcG9ydDsKKwkJCXNpbi0+c2luX2FkZHIuc19hZGRyID0gaW5jLT5pX3NhZGRyOworCQkJbWVtc2V0KHNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJaWYgKGluYykKKwkJcmRzX2luY19wdXQoaW5jKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGUgc29ja2V0IGlzIGJlaW5nIHNodXQgZG93biBhbmQgd2UncmUgYXNrZWQgdG8gZHJvcCBtZXNzYWdlcyB0aGF0IHdlcmUKKyAqIHF1ZXVlZCBmb3IgcmVjdm1zZy4gIFRoZSBjYWxsZXIgaGFzIHVuYm91bmQgdGhlIHNvY2tldCBzbyB0aGUgcmVjZWl2ZSBwYXRoCisgKiB3b24ndCBxdWV1ZSBhbnkgbW9yZSBpbmNvbWluZyBmcmFnbWVudHMgb3IgbWVzc2FnZXMgb24gdGhlIHNvY2tldC4KKyAqLwordm9pZCByZHNfY2xlYXJfcmVjdl9xdWV1ZShzdHJ1Y3QgcmRzX3NvY2sgKnJzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHJkc19yc190b19zayhycyk7CisJc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl3cml0ZV9sb2NrX2lycXNhdmUoJnJzLT5yc19yZWN2X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW5jLCB0bXAsICZycy0+cnNfcmVjdl9xdWV1ZSwgaV9pdGVtKSB7CisJCXJkc19yZWN2X3JjdmJ1Zl9kZWx0YShycywgc2ssIGluYy0+aV9jb25uLT5jX2xjb25nLAorCQkJCSAgICAgIC1iZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKSwKKwkJCQkgICAgICBpbmMtPmlfaGRyLmhfZHBvcnQpOworCQlsaXN0X2RlbF9pbml0KCZpbmMtPmlfaXRlbSk7CisJCXJkc19pbmNfcHV0KGluYyk7CisJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZycy0+cnNfcmVjdl9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBpbmMtPmlfc2FkZHIgaXNuJ3QgdXNlZCBoZXJlIGJlY2F1c2UgaXQgaXMgb25seSBzZXQgaW4gdGhlIHJlY2VpdmUKKyAqIHBhdGguCisgKi8KK3ZvaWQgcmRzX2luY19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmNvbWluZyAqaW5jLAorCQkgICAgICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkgICAgICAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIGludCBmbGlwKQoreworCXN0cnVjdCByZHNfaW5mb19tZXNzYWdlIG1pbmZvOworCisJbWluZm8uc2VxID0gYmU2NF90b19jcHUoaW5jLT5pX2hkci5oX3NlcXVlbmNlKTsKKwltaW5mby5sZW4gPSBiZTMyX3RvX2NwdShpbmMtPmlfaGRyLmhfbGVuKTsKKworCWlmIChmbGlwKSB7CisJCW1pbmZvLmxhZGRyID0gZGFkZHI7CisJCW1pbmZvLmZhZGRyID0gc2FkZHI7CisJCW1pbmZvLmxwb3J0ID0gaW5jLT5pX2hkci5oX2Rwb3J0OworCQltaW5mby5mcG9ydCA9IGluYy0+aV9oZHIuaF9zcG9ydDsKKwl9IGVsc2UgeworCQltaW5mby5sYWRkciA9IHNhZGRyOworCQltaW5mby5mYWRkciA9IGRhZGRyOworCQltaW5mby5scG9ydCA9IGluYy0+aV9oZHIuaF9zcG9ydDsKKwkJbWluZm8uZnBvcnQgPSBpbmMtPmlfaGRyLmhfZHBvcnQ7CisJfQorCisJcmRzX2luZm9fY29weShpdGVyLCAmbWluZm8sIHNpemVvZihtaW5mbykpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9zZW5kLmMgYi9uZXQvcmRzL3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjM3MzY0Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9zZW5kLmMKQEAgLTAsMCArMSwxMDAzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAicmRtYS5oIgorCisvKiBXaGVuIHRyYW5zbWl0dGluZyBtZXNzYWdlcyBpbiByZHNfc2VuZF94bWl0LCB3ZSBuZWVkIHRvIGVtZXJnZSBmcm9tCisgKiB0aW1lIHRvIHRpbWUgYW5kIGJyaWVmbHkgcmVsZWFzZSB0aGUgQ1BVLiBPdGhlcndpc2UgdGhlIHNvZnRsb2NrIHdhdGNoZG9nCisgKiB3aWxsIGtpY2sgb3VyIHNoaW4uCisgKiBBbHNvLCBpdCBzZWVtcyBmYWlyZXIgdG8gbm90IGxldCBvbmUgYnVzeSBjb25uZWN0aW9uIHN0YWxsIGFsbCB0aGUKKyAqIG90aGVycy4KKyAqCisgKiBzZW5kX2JhdGNoX2NvdW50IGlzIHRoZSBudW1iZXIgb2YgdGltZXMgd2UnbGwgbG9vcCBpbiBzZW5kX3htaXQuIFNldHRpbmcKKyAqIGl0IHRvIDAgd2lsbCByZXN0b3JlIHRoZSBvbGQgYmVoYXZpb3IgKHdoZXJlIHdlIGxvb3BlZCB1bnRpbCB3ZSBoYWQKKyAqIGRyYWluZWQgdGhlIHF1ZXVlKS4KKyAqLworc3RhdGljIGludCBzZW5kX2JhdGNoX2NvdW50ID0gNjQ7Cittb2R1bGVfcGFyYW0oc2VuZF9iYXRjaF9jb3VudCwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0Moc2VuZF9iYXRjaF9jb3VudCwgIiBiYXRjaCBmYWN0b3Igd2hlbiB3b3JraW5nIHRoZSBzZW5kIHF1ZXVlIik7CisKKy8qCisgKiBSZXNldCB0aGUgc2VuZCBzdGF0ZS4gQ2FsbGVyIG11c3QgaG9sZCBjX3NlbmRfbG9jayB3aGVuIGNhbGxpbmcgaGVyZS4KKyAqLwordm9pZCByZHNfc2VuZF9yZXNldChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGNvbm4tPmNfeG1pdF9ybSkgeworCQkvKiBUZWxsIHRoZSB1c2VyIHRoZSBSRE1BIG9wIGlzIG5vIGxvbmdlciBtYXBwZWQgYnkgdGhlCisJCSAqIHRyYW5zcG9ydC4gVGhpcyBpc24ndCBlbnRpcmVseSB0cnVlIChpdCdzIGZsdXNoZWQgb3V0CisJCSAqIGluZGVwZW5kZW50bHkpIGJ1dCBhcyB0aGUgY29ubmVjdGlvbiBpcyBkb3duLCB0aGVyZSdzCisJCSAqIG5vIG9uZ29pbmcgUkRNQSB0by9mcm9tIHRoYXQgbWVtb3J5ICovCisJCXJkc19tZXNzYWdlX3VubWFwcGVkKGNvbm4tPmNfeG1pdF9ybSk7CisJCXJkc19tZXNzYWdlX3B1dChjb25uLT5jX3htaXRfcm0pOworCQljb25uLT5jX3htaXRfcm0gPSBOVUxMOworCX0KKwljb25uLT5jX3htaXRfc2cgPSAwOworCWNvbm4tPmNfeG1pdF9oZHJfb2ZmID0gMDsKKwljb25uLT5jX3htaXRfZGF0YV9vZmYgPSAwOworCWNvbm4tPmNfeG1pdF9yZG1hX3NlbnQgPSAwOworCisJY29ubi0+Y19tYXBfcXVldWVkID0gMDsKKworCWNvbm4tPmNfdW5hY2tlZF9wYWNrZXRzID0gcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9wYWNrZXRzOworCWNvbm4tPmNfdW5hY2tlZF9ieXRlcyA9IHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXM7CisKKwkvKiBNYXJrIG1lc3NhZ2VzIGFzIHJldHJhbnNtaXNzaW9ucywgYW5kIG1vdmUgdGhlbSB0byB0aGUgc2VuZCBxICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmY29ubi0+Y19yZXRyYW5zLCBtX2Nvbm5faXRlbSkgeworCQlzZXRfYml0KFJEU19NU0dfQUNLX1JFUVVJUkVELCAmcm0tPm1fZmxhZ3MpOworCQlzZXRfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgJnJtLT5tX2ZsYWdzKTsKKwl9CisJbGlzdF9zcGxpY2VfaW5pdCgmY29ubi0+Y19yZXRyYW5zLCAmY29ubi0+Y19zZW5kX3F1ZXVlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIFdlJ3JlIG1ha2luZyB0aGUgY29uY2lvdXMgdHJhZGUtb2ZmIGhlcmUgdG8gb25seSBzZW5kIG9uZSBtZXNzYWdlCisgKiBkb3duIHRoZSBjb25uZWN0aW9uIGF0IGEgdGltZS4KKyAqICAgUHJvOgorICogICAgICAtIHR4IHF1ZXVlaW5nIGlzIGEgc2ltcGxlIGZpZm8gbGlzdAorICogICAJLSByZWFzc2VtYmx5IGlzIG9wdGlvbmFsIGFuZCBlYXNpbHkgZG9uZSBieSB0cmFuc3BvcnRzIHBlciBjb25uCisgKiAgICAgIC0gbm8gcGVyIGZsb3cgcnggbG9va3VwIGF0IGFsbCwgc3RyYWlnaHQgdG8gdGhlIHNvY2tldAorICogICAJLSBsZXNzIHBlci1mcmFnIG1lbW9yeSBhbmQgd2lyZSBvdmVyaGVhZAorICogICBDb246CisgKiAgICAgIC0gcXVldWVkIGFja3MgY2FuIGJlIGRlbGF5ZWQgYmVoaW5kIGxhcmdlIG1lc3NhZ2VzCisgKiAgIERlcGVuZHM6CisgKiAgICAgIC0gc21hbGwgbWVzc2FnZSBsYXRlbmN5IGlzIGhpZ2hlciBiZWhpbmQgcXVldWVkIGxhcmdlIG1lc3NhZ2VzCisgKiAgICAgIC0gbGFyZ2UgbWVzc2FnZSBsYXRlbmN5IGlzbid0IHN0YXJ2ZWQgYnkgaW50ZXJ2ZW5pbmcgc21hbGwgc2VuZHMKKyAqLworaW50IHJkc19zZW5kX3htaXQoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdG1wOworCXVuc2lnbmVkIGludCBzZW5kX3F1b3RhID0gc2VuZF9iYXRjaF9jb3VudDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCWludCByZXQgPSAwOworCWludCB3YXNfZW1wdHkgPSAwOworCUxJU1RfSEVBRCh0b19iZV9kcm9wcGVkKTsKKworCS8qCisJICogc2VuZG1zZyBjYWxscyBoZXJlIGFmdGVyIGhhdmluZyBxdWV1ZWQgaXRzIG1lc3NhZ2Ugb24gdGhlIHNlbmQKKwkgKiBxdWV1ZS4gIFdlIG9ubHkgaGF2ZSBvbmUgdGFzayBmZWVkaW5nIHRoZSBjb25uZWN0aW9uIGF0IGEgdGltZS4gIElmCisJICogYW5vdGhlciB0aHJlYWQgaXMgYWxyZWFkeSBmZWVkaW5nIHRoZSBxdWV1ZSB0aGVuIHdlIGJhY2sgb2ZmLiAgVGhpcworCSAqIGF2b2lkcyBibG9ja2luZyB0aGUgY2FsbGVyIGFuZCB0cmFkaW5nIHBlci1jb25uZWN0aW9uIGRhdGEgYmV0d2VlbgorCSAqIGNhY2hlcyBwZXIgbWVzc2FnZS4KKwkgKgorCSAqIFRoZSBzZW0gaG9sZGVyIHdpbGwgaXNzdWUgYSByZXRyeSBpZiB0aGV5IG5vdGljZSB0aGF0IHNvbWVvbmUgcXVldWVkCisJICogYSBtZXNzYWdlIGFmdGVyIHRoZXkgc3RvcHBlZCB3YWxraW5nIHRoZSBzZW5kIHF1ZXVlIGJ1dCBiZWZvcmUgdGhleQorCSAqIGRyb3BwZWQgdGhlIHNlbS4KKwkgKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJmNvbm4tPmNfc2VuZF9sb2NrKSkgeworCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9zZW1fY29udGVudGlvbik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWlmIChjb25uLT5jX3RyYW5zLT54bWl0X3ByZXBhcmUpCisJCWNvbm4tPmNfdHJhbnMtPnhtaXRfcHJlcGFyZShjb25uKTsKKworCS8qCisJICogc3BpbiB0cnlpbmcgdG8gcHVzaCBoZWFkZXJzIGFuZCBkYXRhIGRvd24gdGhlIGNvbm5lY3Rpb24gdW50aWwKKwkgKiB0aGUgY29ubmVjdGlvbiBkb2Vucyd0IG1ha2UgZm9yd2FyZCBwcm9ncmVzcy4KKwkgKi8KKwl3aGlsZSAoLS1zZW5kX3F1b3RhKSB7CisJCS8qCisJCSAqIFNlZSBpZiBuZWVkIHRvIHNlbmQgYSBjb25nZXN0aW9uIG1hcCB1cGRhdGUgaWYgd2UncmUKKwkJICogYmV0d2VlbiBzZW5kaW5nIG1lc3NhZ2VzLiAgVGhlIHNlbmRfc2VtIHByb3RlY3RzIG91ciBzb2xlCisJCSAqIHVzZSBvZiBjX21hcF9vZmZzZXQgYW5kIF9ieXRlcy4KKwkJICogTm90ZSB0aGlzIGlzIHVzZWQgb25seSBieSB0cmFuc3BvcnRzIHRoYXQgZGVmaW5lIGEgc3BlY2lhbAorCQkgKiB4bWl0X2NvbmdfbWFwIGZ1bmN0aW9uLiBGb3IgYWxsIG90aGVycywgd2UgY3JlYXRlIGFsbG9jYXRlCisJCSAqIGEgY29uZ19tYXAgbWVzc2FnZSBhbmQgdHJlYXQgaXQganVzdCBsaWtlIGFueSBvdGhlciBzZW5kLgorCQkgKi8KKwkJaWYgKGNvbm4tPmNfbWFwX2J5dGVzKSB7CisJCQlyZXQgPSBjb25uLT5jX3RyYW5zLT54bWl0X2NvbmdfbWFwKGNvbm4sIGNvbm4tPmNfbGNvbmcsCisJCQkJCQljb25uLT5jX21hcF9vZmZzZXQpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCisJCQljb25uLT5jX21hcF9vZmZzZXQgKz0gcmV0OworCQkJY29ubi0+Y19tYXBfYnl0ZXMgLT0gcmV0OworCQkJaWYgKGNvbm4tPmNfbWFwX2J5dGVzKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogSWYgd2UncmUgZG9uZSBzZW5kaW5nIHRoZSBjdXJyZW50IG1lc3NhZ2UsIGNsZWFyIHRoZQorCQkgKiBvZmZzZXQgYW5kIFMvRyB0ZW1wb3Jhcmllcy4KKwkJICovCisJCXJtID0gY29ubi0+Y194bWl0X3JtOworCQlpZiAocm0gIT0gTlVMTCAmJgorCQkgICAgY29ubi0+Y194bWl0X2hkcl9vZmYgPT0gc2l6ZW9mKHN0cnVjdCByZHNfaGVhZGVyKSAmJgorCQkgICAgY29ubi0+Y194bWl0X3NnID09IHJtLT5tX25lbnRzKSB7CisJCQljb25uLT5jX3htaXRfcm0gPSBOVUxMOworCQkJY29ubi0+Y194bWl0X3NnID0gMDsKKwkJCWNvbm4tPmNfeG1pdF9oZHJfb2ZmID0gMDsKKwkJCWNvbm4tPmNfeG1pdF9kYXRhX29mZiA9IDA7CisJCQljb25uLT5jX3htaXRfcmRtYV9zZW50ID0gMDsKKworCQkJLyogUmVsZWFzZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBwcmV2aW91cyBtZXNzYWdlLiAqLworCQkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwkJCXJtID0gTlVMTDsKKwkJfQorCisJCS8qIElmIHdlJ3JlIGFza2VkIHRvIHNlbmQgYSBjb25nIG1hcCB1cGRhdGUsIGRvIHNvLgorCQkgKi8KKwkJaWYgKHJtID09IE5VTEwgJiYgdGVzdF9hbmRfY2xlYXJfYml0KDAsICZjb25uLT5jX21hcF9xdWV1ZWQpKSB7CisJCQlpZiAoY29ubi0+Y190cmFucy0+eG1pdF9jb25nX21hcCAhPSBOVUxMKSB7CisJCQkJY29ubi0+Y19tYXBfb2Zmc2V0ID0gMDsKKwkJCQljb25uLT5jX21hcF9ieXRlcyA9IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgKworCQkJCQlSRFNfQ09OR19NQVBfQllURVM7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCXJtID0gcmRzX2NvbmdfdXBkYXRlX2FsbG9jKGNvbm4pOworCQkJaWYgKElTX0VSUihybSkpIHsKKwkJCQlyZXQgPSBQVFJfRVJSKHJtKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJY29ubi0+Y194bWl0X3JtID0gcm07CisJCX0KKworCQkvKgorCQkgKiBHcmFiIHRoZSBuZXh0IG1lc3NhZ2UgZnJvbSB0aGUgc2VuZCBxdWV1ZSwgaWYgdGhlcmUgaXMgb25lLgorCQkgKgorCQkgKiBjX3htaXRfcm0gaG9sZHMgYSByZWYgd2hpbGUgd2UncmUgc2VuZGluZyB0aGlzIG1lc3NhZ2UgZG93bgorCQkgKiB0aGUgY29ubmN0aW9uLiAgV2UgY2FuIHVzZSB0aGlzIHJlZiB3aGlsZSBob2xkaW5nIHRoZQorCQkgKiBzZW5kX3NlbS4uIHJkc19zZW5kX3Jlc2V0KCkgaXMgc2VyaWFsaXplZCB3aXRoIGl0LgorCQkgKi8KKwkJaWYgKHJtID09IE5VTEwpIHsKKwkJCXVuc2lnbmVkIGludCBsZW47CisKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCQkJaWYgKCFsaXN0X2VtcHR5KCZjb25uLT5jX3NlbmRfcXVldWUpKSB7CisJCQkJcm0gPSBsaXN0X2VudHJ5KGNvbm4tPmNfc2VuZF9xdWV1ZS5uZXh0LAorCQkJCQkJc3RydWN0IHJkc19tZXNzYWdlLAorCQkJCQkJbV9jb25uX2l0ZW0pOworCQkJCXJkc19tZXNzYWdlX2FkZHJlZihybSk7CisKKwkJCQkvKgorCQkJCSAqIE1vdmUgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgc2VuZCBxdWV1ZSB0byB0aGUgcmV0cmFuc21pdAorCQkJCSAqIGxpc3QgcmlnaHQgYXdheS4KKwkJCQkgKi8KKwkJCQlsaXN0X21vdmVfdGFpbCgmcm0tPm1fY29ubl9pdGVtLCAmY29ubi0+Y19yZXRyYW5zKTsKKwkJCX0KKworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwkJCWlmIChybSA9PSBOVUxMKSB7CisJCQkJd2FzX2VtcHR5ID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogVW5mb3J0dW5hdGVseSwgdGhlIHdheSBJbmZpbmliYW5kIGRlYWxzIHdpdGgKKwkJCSAqIFJETUEgdG8gYSBiYWQgTVIga2V5IGlzIGJ5IG1vdmluZyB0aGUgZW50aXJlCisJCQkgKiBxdWV1ZSBwYWlyIHRvIGVycm9yIHN0YXRlLiBXZSBjb2xkIHBvc3NpYmx5CisJCQkgKiByZWNvdmVyIGZyb20gdGhhdCwgYnV0IHJpZ2h0IG5vdyB3ZSBkcm9wIHRoZQorCQkJICogY29ubmVjdGlvbi4KKwkJCSAqIFRoZXJlZm9yZSwgd2UgbmV2ZXIgcmV0cmFuc21pdCBtZXNzYWdlcyB3aXRoIFJETUEgb3BzLgorCQkJICovCisJCQlpZiAocm0tPm1fcmRtYV9vcAorCQkJICYmIHRlc3RfYml0KFJEU19NU0dfUkVUUkFOU01JVFRFRCwgJnJtLT5tX2ZsYWdzKSkgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFJEU19NU0dfT05fQ09OTiwgJnJtLT5tX2ZsYWdzKSkKKwkJCQkJbGlzdF9tb3ZlKCZybS0+bV9jb25uX2l0ZW0sICZ0b19iZV9kcm9wcGVkKTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwkJCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBSZXF1aXJlIGFuIEFDSyBldmVyeSBvbmNlIGluIGEgd2hpbGUgKi8KKwkJCWxlbiA9IG50b2hsKHJtLT5tX2luYy5pX2hkci5oX2xlbik7CisJCQlpZiAoY29ubi0+Y191bmFja2VkX3BhY2tldHMgPT0gMAorCQkJIHx8IGNvbm4tPmNfdW5hY2tlZF9ieXRlcyA8IGxlbikgeworCQkJCV9fc2V0X2JpdChSRFNfTVNHX0FDS19SRVFVSVJFRCwgJnJtLT5tX2ZsYWdzKTsKKworCQkJCWNvbm4tPmNfdW5hY2tlZF9wYWNrZXRzID0gcmRzX3N5c2N0bF9tYXhfdW5hY2tlZF9wYWNrZXRzOworCQkJCWNvbm4tPmNfdW5hY2tlZF9ieXRlcyA9IHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXM7CisJCQkJcmRzX3N0YXRzX2luYyhzX3NlbmRfYWNrX3JlcXVpcmVkKTsKKwkJCX0gZWxzZSB7CisJCQkJY29ubi0+Y191bmFja2VkX2J5dGVzIC09IGxlbjsKKwkJCQljb25uLT5jX3VuYWNrZWRfcGFja2V0cy0tOworCQkJfQorCisJCQljb25uLT5jX3htaXRfcm0gPSBybTsKKwkJfQorCisJCS8qCisJCSAqIFRyeSBhbmQgc2VuZCBhbiByZG1hIG1lc3NhZ2UuICBMZXQncyBzZWUgaWYgd2UgY2FuCisJCSAqIGtlZXAgdGhpcyBzaW1wbGUgYW5kIHJlcXVpcmUgdGhhdCB0aGUgdHJhbnNwb3J0IGVpdGhlcgorCQkgKiBzZW5kIHRoZSB3aG9sZSByZG1hIG9yIG5vbmUgb2YgaXQuCisJCSAqLworCQlpZiAocm0tPm1fcmRtYV9vcCAmJiAhY29ubi0+Y194bWl0X3JkbWFfc2VudCkgeworCQkJcmV0ID0gY29ubi0+Y190cmFucy0+eG1pdF9yZG1hKGNvbm4sIHJtLT5tX3JkbWFfb3ApOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKKwkJCWNvbm4tPmNfeG1pdF9yZG1hX3NlbnQgPSAxOworCQkJLyogVGhlIHRyYW5zcG9ydCBvd25zIHRoZSBtYXBwZWQgbWVtb3J5IGZvciBub3cuCisJCQkgKiBZb3UgY2FuJ3QgdW5tYXAgaXQgd2hpbGUgaXQncyBvbiB0aGUgc2VuZCBxdWV1ZSAqLworCQkJc2V0X2JpdChSRFNfTVNHX01BUFBFRCwgJnJtLT5tX2ZsYWdzKTsKKwkJfQorCisJCWlmIChjb25uLT5jX3htaXRfaGRyX29mZiA8IHNpemVvZihzdHJ1Y3QgcmRzX2hlYWRlcikgfHwKKwkJICAgIGNvbm4tPmNfeG1pdF9zZyA8IHJtLT5tX25lbnRzKSB7CisJCQlyZXQgPSBjb25uLT5jX3RyYW5zLT54bWl0KGNvbm4sIHJtLAorCQkJCQkJICBjb25uLT5jX3htaXRfaGRyX29mZiwKKwkJCQkJCSAgY29ubi0+Y194bWl0X3NnLAorCQkJCQkJICBjb25uLT5jX3htaXRfZGF0YV9vZmYpOworCQkJaWYgKHJldCA8PSAwKQorCQkJCWJyZWFrOworCisJCQlpZiAoY29ubi0+Y194bWl0X2hkcl9vZmYgPCBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpKSB7CisJCQkJdG1wID0gbWluX3QoaW50LCByZXQsCisJCQkJCSAgICBzaXplb2Yoc3RydWN0IHJkc19oZWFkZXIpIC0KKwkJCQkJICAgIGNvbm4tPmNfeG1pdF9oZHJfb2ZmKTsKKwkJCQljb25uLT5jX3htaXRfaGRyX29mZiArPSB0bXA7CisJCQkJcmV0IC09IHRtcDsKKwkJCX0KKworCQkJc2cgPSAmcm0tPm1fc2dbY29ubi0+Y194bWl0X3NnXTsKKwkJCXdoaWxlIChyZXQpIHsKKwkJCQl0bXAgPSBtaW5fdChpbnQsIHJldCwgc2ctPmxlbmd0aCAtCisJCQkJCQkgICAgICBjb25uLT5jX3htaXRfZGF0YV9vZmYpOworCQkJCWNvbm4tPmNfeG1pdF9kYXRhX29mZiArPSB0bXA7CisJCQkJcmV0IC09IHRtcDsKKwkJCQlpZiAoY29ubi0+Y194bWl0X2RhdGFfb2ZmID09IHNnLT5sZW5ndGgpIHsKKwkJCQkJY29ubi0+Y194bWl0X2RhdGFfb2ZmID0gMDsKKwkJCQkJc2crKzsKKwkJCQkJY29ubi0+Y194bWl0X3NnKys7CisJCQkJCUJVR19PTihyZXQgIT0gMCAmJgorCQkJCQkgICAgICAgY29ubi0+Y194bWl0X3NnID09IHJtLT5tX25lbnRzKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKiBOdWtlIGFueSBtZXNzYWdlcyB3ZSBkZWNpZGVkIG5vdCB0byByZXRyYW5zbWl0LiAqLworCWlmICghbGlzdF9lbXB0eSgmdG9fYmVfZHJvcHBlZCkpCisJCXJkc19zZW5kX3JlbW92ZV9mcm9tX3NvY2soJnRvX2JlX2Ryb3BwZWQsIFJEU19SRE1BX0RST1BQRUQpOworCisJaWYgKGNvbm4tPmNfdHJhbnMtPnhtaXRfY29tcGxldGUpCisJCWNvbm4tPmNfdHJhbnMtPnhtaXRfY29tcGxldGUoY29ubik7CisKKwkvKgorCSAqIFdlIG1pZ2h0IGJlIHJhY2luZyB3aXRoIGFub3RoZXIgc2VuZGVyIHdobyBxdWV1ZWQgYSBtZXNzYWdlIGJ1dAorCSAqIGJhY2tlZCBvZmYgb24gbm90aWNpbmcgdGhhdCB3ZSBoZWxkIHRoZSBjX3NlbmRfbG9jay4gIElmIHdlIGNoZWNrCisJICogZm9yIHF1ZXVlZCBtZXNzYWdlcyBhZnRlciBkcm9wcGluZyB0aGUgc2VtIHRoZW4gZWl0aGVyIHdlJ2xsCisJICogc2VlIHRoZSBxdWV1ZWQgbWVzc2FnZSBvciB0aGUgcXVldWVyIHdpbGwgZ2V0IHRoZSBzZW0uICBJZiB3ZQorCSAqIG5vdGljZSB0aGUgcXVldWVkIG1lc3NhZ2UgdGhlbiB3ZSB0cmlnZ2VyIGFuIGltbWVkaWF0ZSByZXRyeS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBvbmx5IHRvIGRvIHRoaXMgd2hlbiB3ZSBzdG9wcGVkIHByb2Nlc3NpbmcKKwkgKiB0aGUgc2VuZCBxdWV1ZSBiZWNhdXNlIGl0IHdhcyBlbXB0eS4gIEl0J3MgdGhlIG9ubHkgd2F5IHdlCisJICogc3RvcCBwcm9jZXNzaW5nIHRoZSBsb29wIHdoZW4gdGhlIHRyYW5zcG9ydCBoYXNuJ3QgdGFrZW4KKwkgKiByZXNwb25zaWJpbGl0eSBmb3IgZm9yd2FyZCBwcm9ncmVzcy4KKwkgKi8KKwltdXRleF91bmxvY2soJmNvbm4tPmNfc2VuZF9sb2NrKTsKKworCWlmIChjb25uLT5jX21hcF9ieXRlcyB8fCAoc2VuZF9xdW90YSA9PSAwICYmICF3YXNfZW1wdHkpKSB7CisJCS8qIFdlIGV4aGF1c3RlZCB0aGUgc2VuZCBxdW90YSwgYnV0IHRoZXJlJ3Mgd29yayBsZWZ0IHRvCisJCSAqIGRvLiBSZXR1cm4gYW5kIChyZS0pc2NoZWR1bGUgdGhlIHNlbmQgd29ya2VyLgorCQkgKi8KKwkJcmV0ID0gLUVBR0FJTjsKKwl9CisKKwlpZiAocmV0ID09IDAgJiYgd2FzX2VtcHR5KSB7CisJCS8qIEEgc2ltcGxlIGJpdCB0ZXN0IHdvdWxkIGJlIHdheSBmYXN0ZXIgdGhhbiB0YWtpbmcgdGhlCisJCSAqIHNwaW4gbG9jayAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJCWlmICghbGlzdF9lbXB0eSgmY29ubi0+Y19zZW5kX3F1ZXVlKSkgeworCQkJcmRzX3N0YXRzX2luYyhzX3NlbmRfc2VtX3F1ZXVlX3JhY2VkKTsKKwkJCXJldCA9IC1FQUdBSU47CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHJkc19zZW5kX3NuZGJ1Zl9yZW1vdmUoc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19tZXNzYWdlICpybSkKK3sKKwl1MzIgbGVuID0gYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKTsKKworCWFzc2VydF9zcGluX2xvY2tlZCgmcnMtPnJzX2xvY2spOworCisJQlVHX09OKHJzLT5yc19zbmRfYnl0ZXMgPCBsZW4pOworCXJzLT5yc19zbmRfYnl0ZXMgLT0gbGVuOworCisJaWYgKHJzLT5yc19zbmRfYnl0ZXMgPT0gMCkKKwkJcmRzX3N0YXRzX2luYyhzX3NlbmRfcXVldWVfZW1wdHkpOworfQorCitzdGF0aWMgaW5saW5lIGludCByZHNfc2VuZF9pc19hY2tlZChzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCB1NjQgYWNrLAorCQkJCSAgICBpc19hY2tlZF9mdW5jIGlzX2Fja2VkKQoreworCWlmIChpc19hY2tlZCkKKwkJcmV0dXJuIGlzX2Fja2VkKHJtLCBhY2spOworCXJldHVybiBiZTY0X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9zZXF1ZW5jZSkgPD0gYWNrOworfQorCisvKgorICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGFyZSBubyBtZXNzYWdlcyBvbiB0aGUgc2VuZCBhbmQgcmV0cmFuc21pdCBxdWV1ZXMKKyAqIHdoaWNoIGhhdmUgYSBzZXF1ZW5jZSBudW1iZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiBzZXF1ZW5jZQorICogbnVtYmVyLgorICovCitpbnQgcmRzX3NlbmRfYWNrZWRfYmVmb3JlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTY0IHNlcSkKK3sKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCAqdG1wOworCWludCByZXQgPSAxOworCisJc3Bpbl9sb2NrKCZjb25uLT5jX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZjb25uLT5jX3JldHJhbnMsIG1fY29ubl9pdGVtKSB7CisJCWlmIChiZTY0X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9zZXF1ZW5jZSkgPCBzZXEpCisJCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfc2VuZF9xdWV1ZSwgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKGJlNjRfdG9fY3B1KHJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlKSA8IHNlcSkKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCX0KKworCXNwaW5fdW5sb2NrKCZjb25uLT5jX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgaXMgcHJldHR5IHNpbWlsYXIgdG8gd2hhdCBoYXBwZW5zIGJlbG93IGluIHRoZSBBQ0sKKyAqIGhhbmRsaW5nIGNvZGUgLSBleGNlcHQgdGhhdCB3ZSBjYWxsIGhlcmUgYXMgc29vbiBhcyB3ZSBnZXQKKyAqIHRoZSBJQiBzZW5kIGNvbXBsZXRpb24gb24gdGhlIFJETUEgb3AgYW5kIHRoZSBhY2NvbXBhbnlpbmcKKyAqIG1lc3NhZ2UuCisgKi8KK3ZvaWQgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCByZHNfc29jayAqcnMgPSBOVUxMOworCXN0cnVjdCByZHNfcmRtYV9vcCAqcm87CisJc3RydWN0IHJkc19ub3RpZmllciAqbm90aWZpZXI7CisKKwlzcGluX2xvY2soJnJtLT5tX3JzX2xvY2spOworCisJcm8gPSBybS0+bV9yZG1hX29wOworCWlmICh0ZXN0X2JpdChSRFNfTVNHX09OX1NPQ0ssICZybS0+bV9mbGFncykKKwkgJiYgcm8gJiYgcm8tPnJfbm90aWZ5ICYmIHJvLT5yX25vdGlmaWVyKSB7CisJCW5vdGlmaWVyID0gcm8tPnJfbm90aWZpZXI7CisJCXJzID0gcm0tPm1fcnM7CisJCXNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTsKKworCQlub3RpZmllci0+bl9zdGF0dXMgPSBzdGF0dXM7CisJCXNwaW5fbG9jaygmcnMtPnJzX2xvY2spOworCQlsaXN0X2FkZF90YWlsKCZub3RpZmllci0+bl9saXN0LCAmcnMtPnJzX25vdGlmeV9xdWV1ZSk7CisJCXNwaW5fdW5sb2NrKCZycy0+cnNfbG9jayk7CisKKwkJcm8tPnJfbm90aWZpZXIgPSBOVUxMOworCX0KKworCXNwaW5fdW5sb2NrKCZybS0+bV9yc19sb2NrKTsKKworCWlmIChycykgeworCQlyZHNfd2FrZV9za19zbGVlcChycyk7CisJCXNvY2tfcHV0KHJkc19yc190b19zayhycykpOworCX0KK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHNhbWUgYXMgcmRzX3JkbWFfc2VuZF9jb21wbGV0ZSBleGNlcHQgd2UKKyAqIGRvbid0IGRvIGFueSBsb2NraW5nIC0gd2UgaGF2ZSBhbGwgdGhlIGluZ3JlZGllbnRzIChtZXNzYWdlLAorICogc29ja2V0LCBzb2NrZXQgbG9jaykgYW5kIGNhbiBqdXN0IG1vdmUgdGhlIG5vdGlmaWVyLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19fcmRzX3JkbWFfc2VuZF9jb21wbGV0ZShzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCByZHNfcmRtYV9vcCAqcm87CisKKwlybyA9IHJtLT5tX3JkbWFfb3A7CisJaWYgKHJvICYmIHJvLT5yX25vdGlmeSAmJiByby0+cl9ub3RpZmllcikgeworCQlyby0+cl9ub3RpZmllci0+bl9zdGF0dXMgPSBzdGF0dXM7CisJCWxpc3RfYWRkX3RhaWwoJnJvLT5yX25vdGlmaWVyLT5uX2xpc3QsICZycy0+cnNfbm90aWZ5X3F1ZXVlKTsKKwkJcm8tPnJfbm90aWZpZXIgPSBOVUxMOworCX0KKworCS8qIE5vIG5lZWQgdG8gd2FrZSB0aGUgYXBwIC0gY2FsbGVyIGRvZXMgdGhpcyAqLworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgSUIgc2VuZCBjb21wbGV0aW9uIHdoZW4gd2UgZGV0ZWN0CisgKiBhIFJETUEgb3BlcmF0aW9uIHRoYXQgZmFpbGVkIHdpdGggcmVtb3RlIGFjY2VzcyBlcnJvci4KKyAqIFNvIHNwZWVkIGlzIG5vdCBhbiBpc3N1ZSBoZXJlLgorICovCitzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJkc19zZW5kX2dldF9tZXNzYWdlKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwKKwkJCQkJIHN0cnVjdCByZHNfcmRtYV9vcCAqb3ApCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnRtcCwgKmZvdW5kID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJtLCB0bXAsICZjb25uLT5jX3JldHJhbnMsIG1fY29ubl9pdGVtKSB7CisJCWlmIChybS0+bV9yZG1hX29wID09IG9wKSB7CisJCQlhdG9taWNfaW5jKCZybS0+bV9yZWZjb3VudCk7CisJCQlmb3VuZCA9IHJtOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfc2VuZF9xdWV1ZSwgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKHJtLT5tX3JkbWFfb3AgPT0gb3ApIHsKKwkJCWF0b21pY19pbmMoJnJtLT5tX3JlZmNvdW50KTsKKwkJCWZvdW5kID0gcm07CisJCQlicmVhazsKKwkJfQorCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGZvdW5kOworfQorCisvKgorICogVGhpcyByZW1vdmVzIG1lc3NhZ2VzIGZyb20gdGhlIHNvY2tldCdzIGxpc3QgaWYgdGhleSdyZSBvbiBpdC4gIFRoZSBsaXN0CisgKiBhcmd1bWVudCBtdXN0IGJlIHByaXZhdGUgdG8gdGhlIGNhbGxlciwgd2UgbXVzdCBiZSBhYmxlIHRvIG1vZGlmeSBpdAorICogd2l0aG91dCBsb2Nrcy4gIFRoZSBtZXNzYWdlcyBtdXN0IGhhdmUgYSByZWZlcmVuY2UgaGVsZCBmb3IgdGhlaXIKKyAqIHBvc2l0aW9uIG9uIHRoZSBsaXN0LiAgVGhpcyBmdW5jdGlvbiB3aWxsIGRyb3AgdGhhdCByZWZlcmVuY2UgYWZ0ZXIKKyAqIHJlbW92aW5nIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSAnbWVzc2FnZXMnIGxpc3QgcmVnYXJkbGVzcyBvZiBpZiBpdCBmb3VuZAorICogdGhlIG1lc3NhZ2VzIG9uIHRoZSBzb2NrZXQgbGlzdCBvciBub3QuCisgKi8KK3ZvaWQgcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jayhzdHJ1Y3QgbGlzdF9oZWFkICptZXNzYWdlcywgaW50IHN0YXR1cykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsgLyogc2lsZW5jZSBnY2MgOlAgKi8KKwlzdHJ1Y3QgcmRzX3NvY2sgKnJzID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXdoaWxlICghbGlzdF9lbXB0eShtZXNzYWdlcykpIHsKKwkJcm0gPSBsaXN0X2VudHJ5KG1lc3NhZ2VzLT5uZXh0LCBzdHJ1Y3QgcmRzX21lc3NhZ2UsCisJCQkJbV9jb25uX2l0ZW0pOworCQlsaXN0X2RlbF9pbml0KCZybS0+bV9jb25uX2l0ZW0pOworCisJCS8qCisJCSAqIElmIHdlIHNlZSB0aGlzIGZsYWcgY2xlYXJlZCB0aGVuIHdlJ3JlICpzdXJlKiB0aGF0IHNvbWVvbmUKKwkJICogZWxzZSBiZWF0IHVzIHRvIHJlbW92aW5nIGl0IGZyb20gdGhlIHNvY2suICBJZiB3ZSByYWNlCisJCSAqIHdpdGggdGhlaXIgZmxhZyB1cGRhdGUgd2UnbGwgZ2V0IHRoZSBsb2NrIGFuZCB0aGVuIHJlYWxseQorCQkgKiBzZWUgdGhhdCB0aGUgZmxhZyBoYXMgYmVlbiBjbGVhcmVkLgorCQkgKgorCQkgKiBUaGUgbWVzc2FnZSBzcGlubG9jayBtYWtlcyBzdXJlIG5vYm9keSBjbGVhcnMgcm0tPm1fcnMKKwkJICogd2hpbGUgd2UncmUgbWVzc2luZyB3aXRoIGl0LiBJdCBkb2VzIG5vdCBwcmV2ZW50IHRoZQorCQkgKiBtZXNzYWdlIGZyb20gYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBzb2NrZXQsIHRob3VnaC4KKwkJICovCisJCXNwaW5fbG9jaygmcm0tPm1fcnNfbG9jayk7CisJCWlmICghdGVzdF9iaXQoUkRTX01TR19PTl9TT0NLLCAmcm0tPm1fZmxhZ3MpKQorCQkJZ290byB1bmxvY2tfYW5kX2Ryb3A7CisKKwkJaWYgKHJzICE9IHJtLT5tX3JzKSB7CisJCQlpZiAocnMpIHsKKwkJCQlzcGluX3VubG9jaygmcnMtPnJzX2xvY2spOworCQkJCXJkc193YWtlX3NrX3NsZWVwKHJzKTsKKwkJCQlzb2NrX3B1dChyZHNfcnNfdG9fc2socnMpKTsKKwkJCX0KKwkJCXJzID0gcm0tPm1fcnM7CisJCQlzcGluX2xvY2soJnJzLT5yc19sb2NrKTsKKwkJCXNvY2tfaG9sZChyZHNfcnNfdG9fc2socnMpKTsKKwkJfQorCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoUkRTX01TR19PTl9TT0NLLCAmcm0tPm1fZmxhZ3MpKSB7CisJCQlzdHJ1Y3QgcmRzX3JkbWFfb3AgKnJvID0gcm0tPm1fcmRtYV9vcDsKKwkJCXN0cnVjdCByZHNfbm90aWZpZXIgKm5vdGlmaWVyOworCisJCQlsaXN0X2RlbF9pbml0KCZybS0+bV9zb2NrX2l0ZW0pOworCQkJcmRzX3NlbmRfc25kYnVmX3JlbW92ZShycywgcm0pOworCisJCQlpZiAocm8gJiYgcm8tPnJfbm90aWZpZXIKKwkJCSAgICYmIChzdGF0dXMgfHwgcm8tPnJfbm90aWZ5KSkgeworCQkJCW5vdGlmaWVyID0gcm8tPnJfbm90aWZpZXI7CisJCQkJbGlzdF9hZGRfdGFpbCgmbm90aWZpZXItPm5fbGlzdCwKKwkJCQkJCSZycy0+cnNfbm90aWZ5X3F1ZXVlKTsKKwkJCQlpZiAoIW5vdGlmaWVyLT5uX3N0YXR1cykKKwkJCQkJbm90aWZpZXItPm5fc3RhdHVzID0gc3RhdHVzOworCQkJCXJtLT5tX3JkbWFfb3AtPnJfbm90aWZpZXIgPSBOVUxMOworCQkJfQorCQkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwkJCXJtLT5tX3JzID0gTlVMTDsKKwkJfQorCit1bmxvY2tfYW5kX2Ryb3A6CisJCXNwaW5fdW5sb2NrKCZybS0+bV9yc19sb2NrKTsKKwkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwl9CisKKwlpZiAocnMpIHsKKwkJc3Bpbl91bmxvY2soJnJzLT5yc19sb2NrKTsKKwkJcmRzX3dha2Vfc2tfc2xlZXAocnMpOworCQlzb2NrX3B1dChyZHNfcnNfdG9fc2socnMpKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogVHJhbnNwb3J0cyBjYWxsIGhlcmUgd2hlbiB0aGV5J3ZlIGRldGVybWluZWQgdGhhdCB0aGUgcmVjZWl2ZXIgcXVldWVkCisgKiBtZXNzYWdlcyB1cCB0bywgYW5kIGluY2x1ZGluZywgdGhlIGdpdmVuIHNlcXVlbmNlIG51bWJlci4gIE1lc3NhZ2VzIGFyZQorICogbW92ZWQgdG8gdGhlIHJldHJhbnMgcXVldWUgd2hlbiByZHNfc2VuZF94bWl0IHBpY2tzIHRoZW0gb2ZmIHRoZSBzZW5kCisgKiBxdWV1ZS4gVGhpcyBtZWFucyB0aGF0IGluIHRoZSBUQ1AgY2FzZSwgdGhlIG1lc3NhZ2UgbWF5IG5vdCBoYXZlIGJlZW4KKyAqIGFzc2lnbmVkIHRoZSBtX2Fja19zZXEgeWV0IC0gYnV0IHRoYXQncyBmaW5lIGFzIGxvbmcgYXMgdGNwX2lzX2Fja2VkCisgKiBjaGVja3MgdGhlIFJEU19NU0dfSEFTX0FDS19TRVEgYml0LgorICoKKyAqIFhYWCBJdCdzIG5vdCBjbGVhciB0byBtZSBob3cgdGhpcyBpcyBzYWZlbHkgc2VyaWFsaXplZCB3aXRoIHNvY2tldAorICogZGVzdHJ1Y3Rpb24uICBNYXliZSBpdCBzaG91bGQgYmFpbCBpZiBpdCBzZWVzIFNPQ0tfREVBRC4KKyAqLwordm9pZCByZHNfc2VuZF9kcm9wX2Fja2VkKHN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiwgdTY0IGFjaywKKwkJCSBpc19hY2tlZF9mdW5jIGlzX2Fja2VkKQoreworCXN0cnVjdCByZHNfbWVzc2FnZSAqcm0sICp0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlMSVNUX0hFQUQobGlzdCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocm0sIHRtcCwgJmNvbm4tPmNfcmV0cmFucywgbV9jb25uX2l0ZW0pIHsKKwkJaWYgKCFyZHNfc2VuZF9pc19hY2tlZChybSwgYWNrLCBpc19hY2tlZCkpCisJCQlicmVhazsKKworCQlsaXN0X21vdmUoJnJtLT5tX2Nvbm5faXRlbSwgJmxpc3QpOworCQljbGVhcl9iaXQoUkRTX01TR19PTl9DT05OLCAmcm0tPm1fZmxhZ3MpOworCX0KKworCS8qIG9yZGVyIGZsYWcgdXBkYXRlcyB3aXRoIHNwaW4gbG9ja3MgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJmxpc3QpKQorCQlzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29ubi0+Y19sb2NrLCBmbGFncyk7CisKKwkvKiBub3cgcmVtb3ZlIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSBzb2NrIGxpc3QgYXMgbmVlZGVkICovCisJcmRzX3NlbmRfcmVtb3ZlX2Zyb21fc29jaygmbGlzdCwgUkRTX1JETUFfU1VDQ0VTUyk7Cit9CisKK3ZvaWQgcmRzX3NlbmRfZHJvcF90byhzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRlc3QpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybSwgKnRtcDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlMSVNUX0hFQUQobGlzdCk7CisJaW50IHdha2UgPSAwOworCisJLyogZ2V0IGFsbCB0aGUgbWVzc2FnZXMgd2UncmUgZHJvcHBpbmcgdW5kZXIgdGhlIHJzIGxvY2sgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnMtPnJzX2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShybSwgdG1wLCAmcnMtPnJzX3NlbmRfcXVldWUsIG1fc29ja19pdGVtKSB7CisJCWlmIChkZXN0ICYmIChkZXN0LT5zaW5fYWRkci5zX2FkZHIgIT0gcm0tPm1fZGFkZHIgfHwKKwkJCSAgICAgZGVzdC0+c2luX3BvcnQgIT0gcm0tPm1faW5jLmlfaGRyLmhfZHBvcnQpKQorCQkJY29udGludWU7CisKKwkJd2FrZSA9IDE7CisJCWxpc3RfbW92ZSgmcm0tPm1fc29ja19pdGVtLCAmbGlzdCk7CisJCXJkc19zZW5kX3NuZGJ1Zl9yZW1vdmUocnMsIHJtKTsKKwkJY2xlYXJfYml0KFJEU19NU0dfT05fU09DSywgJnJtLT5tX2ZsYWdzKTsKKworCQkvKiBJZiB0aGlzIGlzIGEgUkRNQSBvcGVyYXRpb24sIG5vdGlmeSB0aGUgYXBwLiAqLworCQlfX3Jkc19yZG1hX3NlbmRfY29tcGxldGUocnMsIHJtLCBSRFNfUkRNQV9DQU5DRUxFRCk7CisJfQorCisJLyogb3JkZXIgZmxhZyB1cGRhdGVzIHdpdGggdGhlIHJzIGxvY2sgKi8KKwlpZiAod2FrZSkKKwkJc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CisKKwlpZiAod2FrZSkKKwkJcmRzX3dha2Vfc2tfc2xlZXAocnMpOworCisJY29ubiA9IE5VTEw7CisKKwkvKiBub3cgcmVtb3ZlIHRoZSBtZXNzYWdlcyBmcm9tIHRoZSBjb25uIGxpc3QgYXMgbmVlZGVkICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShybSwgJmxpc3QsIG1fc29ja19pdGVtKSB7CisJCS8qIFdlIGRvIHRoaXMgaGVyZSByYXRoZXIgdGhhbiBpbiB0aGUgbG9vcCBhYm92ZSwgc28gdGhhdAorCQkgKiB3ZSBkb24ndCBoYXZlIHRvIG5lc3QgbV9yc19sb2NrIHVuZGVyIHJzLT5yc19sb2NrICovCisJCXNwaW5fbG9jaygmcm0tPm1fcnNfbG9jayk7CisJCXJtLT5tX3JzID0gTlVMTDsKKwkJc3Bpbl91bmxvY2soJnJtLT5tX3JzX2xvY2spOworCisJCS8qCisJCSAqIElmIHdlIHNlZSB0aGlzIGZsYWcgY2xlYXJlZCB0aGVuIHdlJ3JlICpzdXJlKiB0aGF0IHNvbWVvbmUKKwkJICogZWxzZSBiZWF0IHVzIHRvIHJlbW92aW5nIGl0IGZyb20gdGhlIGNvbm4uICBJZiB3ZSByYWNlCisJCSAqIHdpdGggdGhlaXIgZmxhZyB1cGRhdGUgd2UnbGwgZ2V0IHRoZSBsb2NrIGFuZCB0aGVuIHJlYWxseQorCQkgKiBzZWUgdGhhdCB0aGUgZmxhZyBoYXMgYmVlbiBjbGVhcmVkLgorCQkgKi8KKwkJaWYgKCF0ZXN0X2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncykpCisJCQljb250aW51ZTsKKworCQlpZiAoY29ubiAhPSBybS0+bV9pbmMuaV9jb25uKSB7CisJCQlpZiAoY29ubikKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwkJCWNvbm4gPSBybS0+bV9pbmMuaV9jb25uOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCQl9CisKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncykpIHsKKwkJCWxpc3RfZGVsX2luaXQoJnJtLT5tX2Nvbm5faXRlbSk7CisJCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCQl9CisJfQorCisJaWYgKGNvbm4pCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbm4tPmNfbG9jaywgZmxhZ3MpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZsaXN0KSkgeworCQlybSA9IGxpc3RfZW50cnkobGlzdC5uZXh0LCBzdHJ1Y3QgcmRzX21lc3NhZ2UsIG1fc29ja19pdGVtKTsKKwkJbGlzdF9kZWxfaW5pdCgmcm0tPm1fc29ja19pdGVtKTsKKworCQlyZHNfbWVzc2FnZV93YWl0KHJtKTsKKwkJcmRzX21lc3NhZ2VfcHV0KHJtKTsKKwl9Cit9CisKKy8qCisgKiB3ZSBvbmx5IHdhbnQgdGhpcyB0byBmaXJlIG9uY2Ugc28gd2UgdXNlIHRoZSBjYWxsZXJzICdxdWV1ZWQnLiAgSXQncworICogcG9zc2libGUgdGhhdCBhbm90aGVyIHRocmVhZCBjYW4gcmFjZSB3aXRoIHVzIGFuZCByZW1vdmUgdGhlCisgKiBtZXNzYWdlIGZyb20gdGhlIGZsb3cgd2l0aCBSRFNfQ0FOQ0VMX1NFTlRfVE8uCisgKi8KK3N0YXRpYyBpbnQgcmRzX3NlbmRfcXVldWVfcm0oc3RydWN0IHJkc19zb2NrICpycywgc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLAorCQkJICAgICBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLCBfX2JlMTYgc3BvcnQsCisJCQkgICAgIF9fYmUxNiBkcG9ydCwgaW50ICpxdWV1ZWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgbGVuOworCisJaWYgKCpxdWV1ZWQpCisJCWdvdG8gb3V0OworCisJbGVuID0gYmUzMl90b19jcHUocm0tPm1faW5jLmlfaGRyLmhfbGVuKTsKKworCS8qIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2hpY2ggaG9sZHMgYm90aCB0aGUgc29ja2V0J3MgcnNfbG9jaworCSAqIGFuZCB0aGUgY29ubmVjdGlvbidzIGNfbG9jayAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+cnNfbG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhIGxpdHRsZSBzcGFjZSBpbiBzbmRidWYsIHdlIGRvbid0IHF1ZXVlIGFueXRoaW5nLAorCSAqIGFuZCB1c2Vyc3BhY2UgZ2V0cyAtRUFHQUlOLiBCdXQgcG9sbCgpIGluZGljYXRlcyB0aGVyZSdzIHNlbmQKKwkgKiByb29tLiBUaGlzIGNhbiBsZWFkIHRvIGJhZCBiZWhhdmlvciAoc3Bpbm5pbmcpIGlmIHNuZF9ieXRlcyBpc24ndAorCSAqIGZyZWVkIHVwIGJ5IGluY29taW5nIGFja3MuIFNvIHdlIGNoZWNrIHRoZSAqb2xkKiB2YWx1ZSBvZgorCSAqIHJzX3NuZF9ieXRlcyBoZXJlIHRvIGFsbG93IHRoZSBsYXN0IG1zZyB0byBleGNlZWQgdGhlIGJ1ZmZlciwKKwkgKiBhbmQgcG9sbCgpIG5vdyBrbm93cyBubyBtb3JlIGRhdGEgY2FuIGJlIHNlbnQuCisJICovCisJaWYgKHJzLT5yc19zbmRfYnl0ZXMgPCByZHNfc2tfc25kYnVmKHJzKSkgeworCQlycy0+cnNfc25kX2J5dGVzICs9IGxlbjsKKworCQkvKiBsZXQgcmVjdiBzaWRlIGtub3cgd2UgYXJlIGNsb3NlIHRvIHNlbmQgc3BhY2UgZXhoYXVzdGlvbi4KKwkJICogVGhpcyBpcyBwcm9iYWJseSBub3QgdGhlIG9wdGltYWwgd2F5IHRvIGRvIGl0LCBhcyB0aGlzCisJCSAqIG1lYW5zIHdlIHNldCB0aGUgZmxhZyBvbiAqYWxsKiBtZXNzYWdlcyBhcyBzb29uIGFzIG91cgorCQkgKiB0aHJvdWdocHV0IGhpdHMgYSBjZXJ0YWluIHRocmVzaG9sZC4KKwkJICovCisJCWlmIChycy0+cnNfc25kX2J5dGVzID49IHJkc19za19zbmRidWYocnMpIC8gMikKKwkJCV9fc2V0X2JpdChSRFNfTVNHX0FDS19SRVFVSVJFRCwgJnJtLT5tX2ZsYWdzKTsKKworCQlsaXN0X2FkZF90YWlsKCZybS0+bV9zb2NrX2l0ZW0sICZycy0+cnNfc2VuZF9xdWV1ZSk7CisJCXNldF9iaXQoUkRTX01TR19PTl9TT0NLLCAmcm0tPm1fZmxhZ3MpOworCQlyZHNfbWVzc2FnZV9hZGRyZWYocm0pOworCQlybS0+bV9ycyA9IHJzOworCisJCS8qIFRoZSBjb2RlIG9yZGVyaW5nIGlzIGEgbGl0dGxlIHdlaXJkLCBidXQgd2UncmUKKwkJICAgdHJ5aW5nIHRvIG1pbmltaXplIHRoZSB0aW1lIHdlIGhvbGQgY19sb2NrICovCisJCXJkc19tZXNzYWdlX3BvcHVsYXRlX2hlYWRlcigmcm0tPm1faW5jLmlfaGRyLCBzcG9ydCwgZHBvcnQsIDApOworCQlybS0+bV9pbmMuaV9jb25uID0gY29ubjsKKwkJcmRzX21lc3NhZ2VfYWRkcmVmKHJtKTsKKworCQlzcGluX2xvY2soJmNvbm4tPmNfbG9jayk7CisJCXJtLT5tX2luYy5pX2hkci5oX3NlcXVlbmNlID0gY3B1X3RvX2JlNjQoY29ubi0+Y19uZXh0X3R4X3NlcSsrKTsKKwkJbGlzdF9hZGRfdGFpbCgmcm0tPm1fY29ubl9pdGVtLCAmY29ubi0+Y19zZW5kX3F1ZXVlKTsKKwkJc2V0X2JpdChSRFNfTVNHX09OX0NPTk4sICZybS0+bV9mbGFncyk7CisJCXNwaW5fdW5sb2NrKCZjb25uLT5jX2xvY2spOworCisJCXJkc2RlYnVnKCJxdWV1ZWQgbXNnICVwIGxlbiAlZCwgcnMgJXAgYnl0ZXMgJWQgc2VxICVsbHVcbiIsCisJCQkgcm0sIGxlbiwgcnMsIHJzLT5yc19zbmRfYnl0ZXMsCisJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliZTY0X3RvX2NwdShybS0+bV9pbmMuaV9oZHIuaF9zZXF1ZW5jZSkpOworCisJCSpxdWV1ZWQgPSAxOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5yc19sb2NrLCBmbGFncyk7CitvdXQ6CisJcmV0dXJuICpxdWV1ZWQ7Cit9CisKK3N0YXRpYyBpbnQgcmRzX2Ntc2dfc2VuZChzdHJ1Y3QgcmRzX3NvY2sgKnJzLCBzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtLAorCQkJIHN0cnVjdCBtc2doZHIgKm1zZywgaW50ICphbGxvY2F0ZWRfbXIpCit7CisJc3RydWN0IGNtc2doZHIgKmNtc2c7CisJaW50IHJldCA9IDA7CisKKwlmb3IgKGNtc2cgPSBDTVNHX0ZJUlNUSERSKG1zZyk7IGNtc2c7IGNtc2cgPSBDTVNHX05YVEhEUihtc2csIGNtc2cpKSB7CisJCWlmICghQ01TR19PSyhtc2csIGNtc2cpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKGNtc2ctPmNtc2dfbGV2ZWwgIT0gU09MX1JEUykKKwkJCWNvbnRpbnVlOworCisJCS8qIEFzIGEgc2lkZSBlZmZlY3QsIFJETUFfREVTVCBhbmQgUkRNQV9NQVAgd2lsbCBzZXQKKwkJICogcm0tPm1fcmRtYV9jb29raWUgYW5kIHJtLT5tX3JkbWFfbXIuCisJCSAqLworCQlzd2l0Y2ggKGNtc2ctPmNtc2dfdHlwZSkgeworCQljYXNlIFJEU19DTVNHX1JETUFfQVJHUzoKKwkJCXJldCA9IHJkc19jbXNnX3JkbWFfYXJncyhycywgcm0sIGNtc2cpOworCQkJYnJlYWs7CisKKwkJY2FzZSBSRFNfQ01TR19SRE1BX0RFU1Q6CisJCQlyZXQgPSByZHNfY21zZ19yZG1hX2Rlc3QocnMsIHJtLCBjbXNnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUkRTX0NNU0dfUkRNQV9NQVA6CisJCQlyZXQgPSByZHNfY21zZ19yZG1hX21hcChycywgcm0sIGNtc2cpOworCQkJaWYgKCFyZXQpCisJCQkJKmFsbG9jYXRlZF9tciA9IDE7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IHJkc19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQlzaXplX3QgcGF5bG9hZF9sZW4pCit7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CisJc3RydWN0IHJkc19zb2NrICpycyA9IHJkc19za190b19ycyhzayk7CisJc3RydWN0IHNvY2thZGRyX2luICp1c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW1zZy0+bXNnX25hbWU7CisJX19iZTMyIGRhZGRyOworCV9fYmUxNiBkcG9ydDsKKwlzdHJ1Y3QgcmRzX21lc3NhZ2UgKnJtID0gTlVMTDsKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm47CisJaW50IHJldCA9IDA7CisJaW50IHF1ZXVlZCA9IDAsIGFsbG9jYXRlZF9tciA9IDA7CisJaW50IG5vbmJsb2NrID0gbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQ7CisJbG9uZyB0aW1lbyA9IHNvY2tfcmN2dGltZW8oc2ssIG5vbmJsb2NrKTsKKworCS8qIE1pcnJvciBMaW51eCBVRFAgbWlycm9yIG9mIEJTRCBlcnJvciBtZXNzYWdlIGNvbXBhdGliaWxpdHkgKi8KKwkvKiBYWFg6IFBlcmhhcHMgTVNHX01PUkUgc29tZWRheSAqLworCWlmIChtc2ctPm1zZ19mbGFncyAmIH4oTVNHX0RPTlRXQUlUIHwgTVNHX0NNU0dfQ09NUEFUKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJtc2dfZmxhZ3MgMHglMDhYXG4iLCBtc2ctPm1zZ19mbGFncyk7CisJCXJldCA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobXNnLT5tc2dfbmFtZWxlbikgeworCQkvKiBYWFggZmFpbCBub24tdW5pY2FzdCBkZXN0aW5hdGlvbiBJUHM/ICovCisJCWlmIChtc2ctPm1zZ19uYW1lbGVuIDwgc2l6ZW9mKCp1c2luKSB8fCB1c2luLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlkYWRkciA9IHVzaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwkJZHBvcnQgPSB1c2luLT5zaW5fcG9ydDsKKwl9IGVsc2UgeworCQkvKiBXZSBvbmx5IGNhcmUgYWJvdXQgY29uc2lzdGVuY3kgd2l0aCAtPmNvbm5lY3QoKSAqLworCQlsb2NrX3NvY2soc2spOworCQlkYWRkciA9IHJzLT5yc19jb25uX2FkZHI7CisJCWRwb3J0ID0gcnMtPnJzX2Nvbm5fcG9ydDsKKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwl9CisKKwkvKiByYWNpbmcgd2l0aCBhbm90aGVyIHRocmVhZCBiaW5kaW5nIHNlZW1zIG9rIGhlcmUgKi8KKwlpZiAoZGFkZHIgPT0gMCB8fCBycy0+cnNfYm91bmRfYWRkciA9PSAwKSB7CisJCXJldCA9IC1FTk9UQ09OTjsgLyogWFhYIG5vdCBhIGdyZWF0IGVycm5vICovCisJCWdvdG8gb3V0OworCX0KKworCXJtID0gcmRzX21lc3NhZ2VfY29weV9mcm9tX3VzZXIobXNnLT5tc2dfaW92LCBwYXlsb2FkX2xlbik7CisJaWYgKElTX0VSUihybSkpIHsKKwkJcmV0ID0gUFRSX0VSUihybSk7CisJCXJtID0gTlVMTDsKKwkJZ290byBvdXQ7CisJfQorCisJcm0tPm1fZGFkZHIgPSBkYWRkcjsKKworCS8qIFBhcnNlIGFueSBjb250cm9sIG1lc3NhZ2VzIHRoZSB1c2VyIG1heSBoYXZlIGluY2x1ZGVkLiAqLworCXJldCA9IHJkc19jbXNnX3NlbmQocnMsIHJtLCBtc2csICZhbGxvY2F0ZWRfbXIpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogcmRzX2Nvbm5fY3JlYXRlIGhhcyBhIHNwaW5sb2NrIHRoYXQgcnVucyB3aXRoIElSUSBvZmYuCisJICogQ2FjaGluZyB0aGUgY29ubiBpbiB0aGUgc29ja2V0IGhlbHBzIGEgbG90LiAqLworCWlmIChycy0+cnNfY29ubiAmJiBycy0+cnNfY29ubi0+Y19mYWRkciA9PSBkYWRkcikKKwkJY29ubiA9IHJzLT5yc19jb25uOworCWVsc2UgeworCQljb25uID0gcmRzX2Nvbm5fY3JlYXRlX291dGdvaW5nKHJzLT5yc19ib3VuZF9hZGRyLCBkYWRkciwKKwkJCQkJcnMtPnJzX3RyYW5zcG9ydCwKKwkJCQkJc29jay0+c2stPnNrX2FsbG9jYXRpb24pOworCQlpZiAoSVNfRVJSKGNvbm4pKSB7CisJCQlyZXQgPSBQVFJfRVJSKGNvbm4pOworCQkJZ290byBvdXQ7CisJCX0KKwkJcnMtPnJzX2Nvbm4gPSBjb25uOworCX0KKworCWlmICgocm0tPm1fcmRtYV9jb29raWUgfHwgcm0tPm1fcmRtYV9vcCkKKwkgJiYgY29ubi0+Y190cmFucy0+eG1pdF9yZG1hID09IE5VTEwpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCXByaW50ayhLRVJOX05PVElDRSAicmRtYV9vcCAlcCBjb25uIHhtaXRfcmRtYSAlcFxuIiwKKwkJCQlybS0+bV9yZG1hX29wLCBjb25uLT5jX3RyYW5zLT54bWl0X3JkbWEpOworCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJLyogSWYgdGhlIGNvbm5lY3Rpb24gaXMgZG93biwgdHJpZ2dlciBhIGNvbm5lY3QuIFdlIG1heQorCSAqIGhhdmUgc2NoZWR1bGVkIGEgZGVsYXllZCByZWNvbm5lY3QgaG93ZXZlciAtIGluIHRoaXMgY2FzZQorCSAqIHdlIHNob3VsZCBub3QgaW50ZXJmZXJlLgorCSAqLworCWlmIChyZHNfY29ubl9zdGF0ZShjb25uKSA9PSBSRFNfQ09OTl9ET1dOCisJICYmICF0ZXN0X2FuZF9zZXRfYml0KFJEU19SRUNPTk5FQ1RfUEVORElORywgJmNvbm4tPmNfZmxhZ3MpKQorCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19jb25uX3csIDApOworCisJcmV0ID0gcmRzX2Nvbmdfd2FpdChjb25uLT5jX2Zjb25nLCBkcG9ydCwgbm9uYmxvY2ssIHJzKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXdoaWxlICghcmRzX3NlbmRfcXVldWVfcm0ocnMsIGNvbm4sIHJtLCBycy0+cnNfYm91bmRfcG9ydCwKKwkJCQkgIGRwb3J0LCAmcXVldWVkKSkgeworCQlyZHNfc3RhdHNfaW5jKHNfc2VuZF9xdWV1ZV9mdWxsKTsKKwkJLyogWFhYIG1ha2Ugc3VyZSB0aGlzIGlzIHJlYXNvbmFibGUgKi8KKwkJaWYgKHBheWxvYWRfbGVuID4gcmRzX3NrX3NuZGJ1ZihycykpIHsKKwkJCXJldCA9IC1FTVNHU0laRTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChub25ibG9jaykgeworCQkJcmV0ID0gLUVBR0FJTjsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJdGltZW8gPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgqc2stPnNrX3NsZWVwLAorCQkJCQlyZHNfc2VuZF9xdWV1ZV9ybShycywgY29ubiwgcm0sCisJCQkJCQkJICBycy0+cnNfYm91bmRfcG9ydCwKKwkJCQkJCQkgIGRwb3J0LAorCQkJCQkJCSAgJnF1ZXVlZCksCisJCQkJCXRpbWVvKTsKKwkJcmRzZGVidWcoInNlbmRtc2cgd29rZSBxdWV1ZWQgJWQgdGltZW8gJWxkXG4iLCBxdWV1ZWQsIHRpbWVvKTsKKwkJaWYgKHRpbWVvID4gMCB8fCB0aW1lbyA9PSBNQVhfU0NIRURVTEVfVElNRU9VVCkKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IHRpbWVvOworCQlpZiAocmV0ID09IDApCisJCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIEJ5IG5vdyB3ZSd2ZSBjb21taXR0ZWQgdG8gdGhlIHNlbmQuICBXZSByZXVzZSByZHNfc2VuZF93b3JrZXIoKQorCSAqIHRvIHJldHJ5IHNlbmRzIGluIHRoZSByZHMgdGhyZWFkIGlmIHRoZSB0cmFuc3BvcnQgYXNrcyB1cyB0by4KKwkgKi8KKwlyZHNfc3RhdHNfaW5jKHNfc2VuZF9xdWV1ZWQpOworCisJaWYgKCF0ZXN0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykpCisJCXJkc19zZW5kX3dvcmtlcigmY29ubi0+Y19zZW5kX3cud29yayk7CisKKwlyZHNfbWVzc2FnZV9wdXQocm0pOworCXJldHVybiBwYXlsb2FkX2xlbjsKKworb3V0OgorCS8qIElmIHRoZSB1c2VyIGluY2x1ZGVkIGEgUkRNQV9NQVAgY21zZywgd2UgYWxsb2NhdGVkIGEgTVIgb24gdGhlIGZseS4KKwkgKiBJZiB0aGUgc2VuZG1zZyBnb2VzIHRocm91Z2gsIHdlIGtlZXAgdGhlIE1SLiBJZiBpdCBmYWlscyB3aXRoIEVBR0FJTgorCSAqIG9yIGluIGFueSBvdGhlciB3YXksIHdlIG5lZWQgdG8gZGVzdHJveSB0aGUgTVIgYWdhaW4gKi8KKwlpZiAoYWxsb2NhdGVkX21yKQorCQlyZHNfcmRtYV91bnVzZShycywgcmRzX3JkbWFfY29va2llX2tleShybS0+bV9yZG1hX2Nvb2tpZSksIDEpOworCisJaWYgKHJtKQorCQlyZHNfbWVzc2FnZV9wdXQocm0pOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZXBseSB0byBhIHBpbmcgcGFja2V0LgorICovCitpbnQKK3Jkc19zZW5kX3Bvbmcoc3RydWN0IHJkc19jb25uZWN0aW9uICpjb25uLCBfX2JlMTYgZHBvcnQpCit7CisJc3RydWN0IHJkc19tZXNzYWdlICpybTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCisJcm0gPSByZHNfbWVzc2FnZV9hbGxvYygwLCBHRlBfQVRPTUlDKTsKKwlpZiAocm0gPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlybS0+bV9kYWRkciA9IGNvbm4tPmNfZmFkZHI7CisKKwkvKiBJZiB0aGUgY29ubmVjdGlvbiBpcyBkb3duLCB0cmlnZ2VyIGEgY29ubmVjdC4gV2UgbWF5CisJICogaGF2ZSBzY2hlZHVsZWQgYSBkZWxheWVkIHJlY29ubmVjdCBob3dldmVyIC0gaW4gdGhpcyBjYXNlCisJICogd2Ugc2hvdWxkIG5vdCBpbnRlcmZlcmUuCisJICovCisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX0RPV04KKwkgJiYgIXRlc3RfYW5kX3NldF9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmY29ubi0+Y19mbGFncykpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX2Nvbm5fdywgMCk7CisKKwlyZXQgPSByZHNfY29uZ193YWl0KGNvbm4tPmNfZmNvbmcsIGRwb3J0LCAxLCBOVUxMKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZybS0+bV9jb25uX2l0ZW0sICZjb25uLT5jX3NlbmRfcXVldWUpOworCXNldF9iaXQoUkRTX01TR19PTl9DT05OLCAmcm0tPm1fZmxhZ3MpOworCXJkc19tZXNzYWdlX2FkZHJlZihybSk7CisJcm0tPm1faW5jLmlfY29ubiA9IGNvbm47CisKKwlyZHNfbWVzc2FnZV9wb3B1bGF0ZV9oZWFkZXIoJnJtLT5tX2luYy5pX2hkciwgMCwgZHBvcnQsCisJCQkJICAgIGNvbm4tPmNfbmV4dF90eF9zZXEpOworCWNvbm4tPmNfbmV4dF90eF9zZXErKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25uLT5jX2xvY2ssIGZsYWdzKTsKKworCXJkc19zdGF0c19pbmMoc19zZW5kX3F1ZXVlZCk7CisJcmRzX3N0YXRzX2luYyhzX3NlbmRfcG9uZyk7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDApOworCXJkc19tZXNzYWdlX3B1dChybSk7CisJcmV0dXJuIDA7CisKK291dDoKKwlpZiAocm0pCisJCXJkc19tZXNzYWdlX3B1dChybSk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvc3RhdHMuYyBiL25ldC9yZHMvc3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzcxNDY4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9zdGF0cy5jCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworI2luY2x1ZGUgInJkcy5oIgorCitERUZJTkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRChzdHJ1Y3QgcmRzX3N0YXRpc3RpY3MsIHJkc19zdGF0cyk7CisKKy8qIDouLCRzL3Vuc2lnbmVkIGxvbmdcPi4qXDxzX1woLipcKTsvIlwxIiwvZyAqLworCitzdGF0aWMgY2hhciAqcmRzX3N0YXRfbmFtZXNbXSA9IHsKKwkiY29ubl9yZXNldCIsCisJInJlY3ZfZHJvcF9iYWRfY2hlY2tzdW0iLAorCSJyZWN2X2Ryb3Bfb2xkX3NlcSIsCisJInJlY3ZfZHJvcF9ub19zb2NrIiwKKwkicmVjdl9kcm9wX2RlYWRfc29jayIsCisJInJlY3ZfZGVsaXZlcl9yYWNlZCIsCisJInJlY3ZfZGVsaXZlcmVkIiwKKwkicmVjdl9xdWV1ZWQiLAorCSJyZWN2X2ltbWVkaWF0ZV9yZXRyeSIsCisJInJlY3ZfZGVsYXllZF9yZXRyeSIsCisJInJlY3ZfYWNrX3JlcXVpcmVkIiwKKwkicmVjdl9yZG1hX2J5dGVzIiwKKwkicmVjdl9waW5nIiwKKwkic2VuZF9xdWV1ZV9lbXB0eSIsCisJInNlbmRfcXVldWVfZnVsbCIsCisJInNlbmRfc2VtX2NvbnRlbnRpb24iLAorCSJzZW5kX3NlbV9xdWV1ZV9yYWNlZCIsCisJInNlbmRfaW1tZWRpYXRlX3JldHJ5IiwKKwkic2VuZF9kZWxheWVkX3JldHJ5IiwKKwkic2VuZF9kcm9wX2Fja2VkIiwKKwkic2VuZF9hY2tfcmVxdWlyZWQiLAorCSJzZW5kX3F1ZXVlZCIsCisJInNlbmRfcmRtYSIsCisJInNlbmRfcmRtYV9ieXRlcyIsCisJInNlbmRfcG9uZyIsCisJInBhZ2VfcmVtYWluZGVyX2hpdCIsCisJInBhZ2VfcmVtYWluZGVyX21pc3MiLAorCSJjb3B5X3RvX3VzZXIiLAorCSJjb3B5X2Zyb21fdXNlciIsCisJImNvbmdfdXBkYXRlX3F1ZXVlZCIsCisJImNvbmdfdXBkYXRlX3JlY2VpdmVkIiwKKwkiY29uZ19zZW5kX2Vycm9yIiwKKwkiY29uZ19zZW5kX2Jsb2NrZWQiLAorfTsKKwordm9pZCByZHNfc3RhdHNfaW5mb19jb3B5KHN0cnVjdCByZHNfaW5mb19pdGVyYXRvciAqaXRlciwKKwkJCSB1aW50NjRfdCAqdmFsdWVzLCBjaGFyICoqbmFtZXMsIHNpemVfdCBucikKK3sKKwlzdHJ1Y3QgcmRzX2luZm9fY291bnRlciBjdHI7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykgeworCQlCVUdfT04oc3RybGVuKG5hbWVzW2ldKSA+PSBzaXplb2YoY3RyLm5hbWUpKTsKKwkJc3RybmNweShjdHIubmFtZSwgbmFtZXNbaV0sIHNpemVvZihjdHIubmFtZSkgLSAxKTsKKwkJY3RyLnZhbHVlID0gdmFsdWVzW2ldOworCisJCXJkc19pbmZvX2NvcHkoaXRlciwgJmN0ciwgc2l6ZW9mKGN0cikpOworCX0KK30KKworLyoKKyAqIFRoaXMgZ2l2ZXMgZ2xvYmFsIGNvdW50ZXJzIGFjcm9zcyBhbGwgdGhlIHRyYW5zcG9ydHMuICBUaGUgc3RyaW5ncworICogYXJlIGNvcGllZCBpbiBzbyB0aGF0IHRoZSB0b29sIGRvZXNuJ3QgbmVlZCBrbm93bGVkZ2Ugb2YgdGhlIHNwZWNpZmljCisgKiBzdGF0cyB0aGF0IHdlJ3JlIGV4cG9ydGluZy4gIFNvbWUgYXJlIHByZXR0eSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQKKyAqIGFuZCBtYXkgY2hhbmdlIG92ZXIgdGltZS4gIFRoYXQgZG9lc24ndCBzdG9wIHRoZW0gZnJvbSBiZWluZyB1c2VmdWwuCisgKgorICogVGhpcyBpcyB0aGUgb25seSBmdW5jdGlvbiBpbiB0aGUgY2hhaW4gdGhhdCBrbm93cyBhYm91dCB0aGUgYnl0ZSBncmFudWxhcgorICogbGVuZ3RoIGluIHVzZXJzcGFjZS4gIEl0IGNvbnZlcnRzIGl0IHRvIG51bWJlciBvZiBzdGF0IGVudHJpZXMgdGhhdCB0aGUKKyAqIHJlc3Qgb2YgdGhlIGZ1bmN0aW9ucyBvcGVyYXRlIGluLgorICovCitzdGF0aWMgdm9pZCByZHNfc3RhdHNfaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgbGVuLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJICAgc3RydWN0IHJkc19pbmZvX2xlbmd0aHMgKmxlbnMpCit7CisJc3RydWN0IHJkc19zdGF0aXN0aWNzIHN0YXRzID0gezAsIH07CisJdWludDY0X3QgKnNyYzsKKwl1aW50NjRfdCAqc3VtOworCXNpemVfdCBpOworCWludCBjcHU7CisJdW5zaWduZWQgaW50IGF2YWlsOworCisJYXZhaWwgPSBsZW4gLyBzaXplb2Yoc3RydWN0IHJkc19pbmZvX2NvdW50ZXIpOworCisJaWYgKGF2YWlsIDwgQVJSQVlfU0laRShyZHNfc3RhdF9uYW1lcykpIHsKKwkJYXZhaWwgPSAwOworCQlnb3RvIHRyYW5zOworCX0KKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXNyYyA9ICh1aW50NjRfdCAqKSYocGVyX2NwdShyZHNfc3RhdHMsIGNwdSkpOworCQlzdW0gPSAodWludDY0X3QgKikmc3RhdHM7CisJCWZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc3RhdHMpIC8gc2l6ZW9mKHVpbnQ2NF90KTsgaSsrKQorCQkJKihzdW0rKykgKz0gKihzcmMrKyk7CisJfQorCisJcmRzX3N0YXRzX2luZm9fY29weShpdGVyLCAodWludDY0X3QgKikmc3RhdHMsIHJkc19zdGF0X25hbWVzLAorCQkJICAgIEFSUkFZX1NJWkUocmRzX3N0YXRfbmFtZXMpKTsKKwlhdmFpbCAtPSBBUlJBWV9TSVpFKHJkc19zdGF0X25hbWVzKTsKKwordHJhbnM6CisJbGVucy0+ZWFjaCA9IHNpemVvZihzdHJ1Y3QgcmRzX2luZm9fY291bnRlcik7CisJbGVucy0+bnIgPSByZHNfdHJhbnNfc3RhdHNfaW5mb19jb3B5KGl0ZXIsIGF2YWlsKSArCisJCSAgIEFSUkFZX1NJWkUocmRzX3N0YXRfbmFtZXMpOworfQorCit2b2lkIHJkc19zdGF0c19leGl0KHZvaWQpCit7CisJcmRzX2luZm9fZGVyZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0NPVU5URVJTLCByZHNfc3RhdHNfaW5mbyk7Cit9CisKK2ludCBfX2luaXQgcmRzX3N0YXRzX2luaXQodm9pZCkKK3sKKwlyZHNfaW5mb19yZWdpc3Rlcl9mdW5jKFJEU19JTkZPX0NPVU5URVJTLCByZHNfc3RhdHNfaW5mbyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9uZXQvcmRzL3N5c2N0bC5jIGIvbmV0L3Jkcy9zeXNjdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDdkYzVjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy9zeXNjdGwuYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmRzX3N5c2N0bF9yZWdfdGFibGU7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21pbiA9IDE7CitzdGF0aWMgdW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3JlY29ubmVjdF9tYXggPSB+MFVMOworCit1bnNpZ25lZCBsb25nIHJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzOwordW5zaWduZWQgbG9uZyByZHNfc3lzY3RsX3JlY29ubmVjdF9tYXhfamlmZmllcyA9IEhaOworCit1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfcGFja2V0cyA9IDg7Cit1bnNpZ25lZCBpbnQgIHJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXMgPSAoMTYgPDwgMjApOworCit1bnNpZ25lZCBpbnQgcmRzX3N5c2N0bF9waW5nX2VuYWJsZSA9IDE7CisKK3N0YXRpYyBjdGxfdGFibGUgcmRzX3N5c2N0bF9yZHNfdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZSAgICAgICA9IENUTF9VTk5VTUJFUkVELAorCQkucHJvY25hbWUgICAgICAgPSAicmVjb25uZWN0X21pbl9kZWxheV9tcyIsCisJCS5kYXRhCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9taW5famlmZmllcywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4LAorCQkuZXh0cmExCQk9ICZyZHNfc3lzY3RsX3JlY29ubmVjdF9taW4sCisJCS5leHRyYTIJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21heF9qaWZmaWVzLAorCX0sCisJeworCQkuY3RsX25hbWUgICAgICAgPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lICAgICAgID0gInJlY29ubmVjdF9tYXhfZGVsYXlfbXMiLAorCQkuZGF0YQkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWF4X2ppZmZpZXMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKKwkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCwKKwkJLmV4dHJhMQkJPSAmcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXMsCisJCS5leHRyYTIJCT0gJnJkc19zeXNjdGxfcmVjb25uZWN0X21heCwKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJtYXhfdW5hY2tlZF9wYWNrZXRzIiwKKwkJLmRhdGEJCT0gJnJkc19zeXNjdGxfbWF4X3VuYWNrZWRfcGFja2V0cywKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX1VOTlVNQkVSRUQsCisJCS5wcm9jbmFtZQk9ICJtYXhfdW5hY2tlZF9ieXRlcyIsCisJCS5kYXRhCQk9ICZyZHNfc3lzY3RsX21heF91bmFja2VkX2J5dGVzLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YodW5zaWduZWQgbG9uZyksCisJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIgICA9ICZwcm9jX2RvaW50dmVjLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBDVExfVU5OVU1CRVJFRCwKKwkJLnByb2NuYW1lCT0gInBpbmdfZW5hYmxlIiwKKwkJLmRhdGEJCT0gJnJkc19zeXNjdGxfcGluZ19lbmFibGUsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZihpbnQpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSAmcHJvY19kb2ludHZlYywKKwl9LAorCXsgLmN0bF9uYW1lID0gMH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3BhdGggcmRzX3N5c2N0bF9wYXRoW10gPSB7CisJeyAucHJvY25hbWUgPSAibmV0IiwgLmN0bF9uYW1lID0gQ1RMX05FVCwgfSwKKwl7IC5wcm9jbmFtZSA9ICJyZHMiLCAuY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRCwgfSwKKwl7IH0KK307CisKKwordm9pZCByZHNfc3lzY3RsX2V4aXQodm9pZCkKK3sKKwlpZiAocmRzX3N5c2N0bF9yZWdfdGFibGUpCisJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHJkc19zeXNjdGxfcmVnX3RhYmxlKTsKK30KKworaW50IF9faW5pdCByZHNfc3lzY3RsX2luaXQodm9pZCkKK3sKKwlyZHNfc3lzY3RsX3JlY29ubmVjdF9taW4gPSBtc2Vjc190b19qaWZmaWVzKDEpOworCXJkc19zeXNjdGxfcmVjb25uZWN0X21pbl9qaWZmaWVzID0gcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluOworCisJcmRzX3N5c2N0bF9yZWdfdGFibGUgPSByZWdpc3Rlcl9zeXNjdGxfcGF0aHMocmRzX3N5c2N0bF9wYXRoLCByZHNfc3lzY3RsX3Jkc190YWJsZSk7CisJaWYgKHJkc19zeXNjdGxfcmVnX3RhYmxlID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy90aHJlYWRzLmMgYi9uZXQvcmRzL3RocmVhZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjhhMWJmCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3Jkcy90aHJlYWRzLmMKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorCisjaW5jbHVkZSAicmRzLmgiCisKKy8qCisgKiBBbGwgb2YgY29ubmVjdGlvbiBtYW5hZ2VtZW50IGlzIHNpbXBsaWZpZWQgYnkgc2VyaWFsaXppbmcgaXQgdGhyb3VnaAorICogd29yayBxdWV1ZXMgdGhhdCBleGVjdXRlIGluIGEgY29ubmVjdGlvbiBtYW5hZ2luZyB0aHJlYWQuCisgKgorICogVENQIHdhbnRzIHRvIHNlbmQgYWNrcyB0aHJvdWdoIHNlbmRwYWdlKCkgaW4gcmVzcG9uc2UgdG8gZGF0YV9yZWFkeSgpLAorICogYnV0IGl0IG5lZWRzIGEgcHJvY2VzcyBjb250ZXh0IHRvIGRvIHNvLgorICoKKyAqIFRoZSByZWNlaXZlIHBhdGhzIG5lZWQgdG8gYWxsb2NhdGUgYnV0IGNhbid0IGRyb3AgcGFja2V0cyAoISkgc28gd2UgaGF2ZQorICogYSB0aHJlYWQgYXJvdW5kIHRvIGJsb2NrIGFsbG9jYXRpbmcgaWYgdGhlIHJlY2VpdmUgZmFzdCBwYXRoIHNlZXMgYW4KKyAqIGFsbG9jYXRpb24gZmFpbHVyZS4KKyAqLworCisvKiBHcmFuZCBVbmlmaWVkIFRoZW9yeSBvZiBjb25uZWN0aW9uIGxpZmUgY3ljbGU6CisgKiBBdCBhbnkgcG9pbnQgaW4gdGltZSwgdGhlIGNvbm5lY3Rpb24gY2FuIGJlIGluIG9uZSBvZiB0aGVzZSBzdGF0ZXM6CisgKiBET1dOLCBDT05ORUNUSU5HLCBVUCwgRElTQ09OTkVDVElORywgRVJST1IKKyAqCisgKiBUaGUgZm9sbG93aW5nIHRyYW5zaXRpb25zIGFyZSBwb3NzaWJsZToKKyAqICBBTlkJCSAgLT4gRVJST1IKKyAqICBVUAkJICAtPiBESVNDT05ORUNUSU5HCisgKiAgRVJST1IJICAtPiBESVNDT05ORUNUSU5HCisgKiAgRElTQ09OTkVDVElORyAtPiBET1dOCisgKiAgRE9XTgkgIC0+IENPTk5FQ1RJTkcKKyAqICBDT05ORUNUSU5HCSAgLT4gVVAKKyAqCisgKiBUcmFuc2l0aW9uIHRvIHN0YXRlIERJU0NPTk5FQ1RJTkcvRE9XTjoKKyAqICAtCUluc2lkZSB0aGUgc2h1dGRvd24gd29ya2VyOyBzeW5jaHJvbml6ZXMgd2l0aCB4bWl0IHBhdGgKKyAqCXRocm91Z2ggY19zZW5kX2xvY2ssIGFuZCB3aXRoIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBjYWxsYmFja3MKKyAqCXZpYSBjX2NtX2xvY2suCisgKgorICoJRm9yIHJlY2VpdmUgY2FsbGJhY2tzLCB3ZSByZWx5IG9uIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydAorICoJKFRDUCwgSUIvUkRNQSkgdG8gcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IHN5bmNocm9uaXNhdGlvbi4KKyAqLworc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnJkc193cTsKKwordm9pZCByZHNfY29ubmVjdF9jb21wbGV0ZShzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0NPTk5FQ1RJTkcsIFJEU19DT05OX1VQKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2Fubm90IHRyYW5zaXRpb24gdG8gc3RhdGUgVVAsICIKKwkJCQkiY3VycmVudCBzdGF0ZSBpcyAlZFxuIiwKKwkJCQlfX2Z1bmNfXywKKwkJCQlhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkpOworCQlhdG9taWNfc2V0KCZjb25uLT5jX3N0YXRlLCBSRFNfQ09OTl9FUlJPUik7CisJCXF1ZXVlX3dvcmsocmRzX3dxLCAmY29ubi0+Y19kb3duX3cpOworCQlyZXR1cm47CisJfQorCisJcmRzZGVidWcoImNvbm4gJXAgZm9yICVwSTQgdG8gJXBJNCBjb21wbGV0ZVxuIiwKKwkgIGNvbm4sICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkcik7CisKKwljb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzID0gMDsKKwlzZXRfYml0KDAsICZjb25uLT5jX21hcF9xdWV1ZWQpOworCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisJcXVldWVfZGVsYXllZF93b3JrKHJkc193cSwgJmNvbm4tPmNfcmVjdl93LCAwKTsKK30KKworLyoKKyAqIFRoaXMgcmFuZG9tIGV4cG9uZW50aWFsIGJhY2tvZmYgaXMgcmVsaWVkIG9uIHRvIGV2ZW50dWFsbHkgcmVzb2x2ZSByYWNpbmcKKyAqIGNvbm5lY3RzLgorICoKKyAqIElmIGNvbm5lY3QgYXR0ZW1wdHMgcmFjZSB0aGVuIGJvdGggcGFydGllcyBkcm9wIGJvdGggY29ubmVjdGlvbnMgYW5kIGNvbWUKKyAqIGhlcmUgdG8gd2FpdCBmb3IgYSByYW5kb20gYW1vdW50IG9mIHRpbWUgYmVmb3JlIHRyeWluZyBhZ2Fpbi4gIEV2ZW50dWFsbHkKKyAqIHRoZSBiYWNrb2ZmIHJhbmdlIHdpbGwgYmUgc28gbXVjaCBncmVhdGVyIHRoYW4gdGhlIHRpbWUgaXQgdGFrZXMgdG8KKyAqIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gdGhhdCBvbmUgb2YgdGhlIHBhaXIgd2lsbCBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24KKyAqIGJlZm9yZSB0aGUgb3RoZXIncyByYW5kb20gZGVsYXkgZmlyZXMuCisgKgorICogQ29ubmVjdGlvbiBhdHRlbXB0cyB0aGF0IGFycml2ZSB3aGlsZSBhIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBlc3RhYmxpc2hlZAorICogYXJlIGFsc28gY29uc2lkZXJlZCB0byBiZSByYWNpbmcgY29ubmVjdHMuICBUaGlzIGxldHMgYSBjb25uZWN0aW9uIGZyb20KKyAqIGEgcmVib290ZWQgbWFjaGluZSByZXBsYWNlIGFuIGV4aXN0aW5nIHN0YWxlIGNvbm5lY3Rpb24gYmVmb3JlIHRoZSB0cmFuc3BvcnQKKyAqIG5vdGljZXMgdGhhdCB0aGUgY29ubmVjdGlvbiBoYXMgZmFpbGVkLgorICoKKyAqIFdlIHNob3VsZCAqYWx3YXlzKiBzdGFydCB3aXRoIGEgcmFuZG9tIGJhY2tvZmY7IG90aGVyd2lzZSBhIGJyb2tlbiBjb25uZWN0aW9uCisgKiB3aWxsIGFsd2F5cyB0YWtlIHNldmVyYWwgaXRlcmF0aW9ucyB0byBiZSByZS1lc3RhYmxpc2hlZC4KKyAqLworc3RhdGljIHZvaWQgcmRzX3F1ZXVlX3JlY29ubmVjdChzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4pCit7CisJdW5zaWduZWQgbG9uZyByYW5kOworCisJcmRzZGVidWcoImNvbm4gJXAgZm9yICVwSTQgdG8gJXBJNCByZWNvbm5lY3QgamlmZmllcyAlbHVcbiIsCisJICBjb25uLCAmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIsCisJICBjb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzKTsKKworCXNldF9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmY29ubi0+Y19mbGFncyk7CisJaWYgKGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPT0gMCkgeworCQljb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzID0gcmRzX3N5c2N0bF9yZWNvbm5lY3RfbWluX2ppZmZpZXM7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX2Nvbm5fdywgMCk7CisJCXJldHVybjsKKwl9CisKKwlnZXRfcmFuZG9tX2J5dGVzKCZyYW5kLCBzaXplb2YocmFuZCkpOworCXJkc2RlYnVnKCIlbHUgZGVsYXkgJWx1IGNlaWwgY29ubiAlcCBmb3IgJXBJNCAtPiAlcEk0XG4iLAorCQkgcmFuZCAlIGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMsIGNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMsCisJCSBjb25uLCAmY29ubi0+Y19sYWRkciwgJmNvbm4tPmNfZmFkZHIpOworCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX2Nvbm5fdywKKwkJCSAgIHJhbmQgJSBjb25uLT5jX3JlY29ubmVjdF9qaWZmaWVzKTsKKworCWNvbm4tPmNfcmVjb25uZWN0X2ppZmZpZXMgPSBtaW4oY29ubi0+Y19yZWNvbm5lY3RfamlmZmllcyAqIDIsCisJCQkJCXJkc19zeXNjdGxfcmVjb25uZWN0X21heF9qaWZmaWVzKTsKK30KKwordm9pZCByZHNfY29ubmVjdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZHNfY29ubmVjdGlvbiAqY29ubiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24sIGNfY29ubl93LndvcmspOworCWludCByZXQ7CisKKwljbGVhcl9iaXQoUkRTX1JFQ09OTkVDVF9QRU5ESU5HLCAmY29ubi0+Y19mbGFncyk7CisJaWYgKHJkc19jb25uX3RyYW5zaXRpb24oY29ubiwgUkRTX0NPTk5fRE9XTiwgUkRTX0NPTk5fQ09OTkVDVElORykpIHsKKwkJcmV0ID0gY29ubi0+Y190cmFucy0+Y29ubl9jb25uZWN0KGNvbm4pOworCQlyZHNkZWJ1ZygiY29ubiAlcCBmb3IgJXBJNCB0byAlcEk0IGRpc3BhdGNoZWQsIHJldCAlZFxuIiwKKwkJCWNvbm4sICZjb25uLT5jX2xhZGRyLCAmY29ubi0+Y19mYWRkciwgcmV0KTsKKworCQlpZiAocmV0KSB7CisJCQlpZiAocmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9DT05ORUNUSU5HLCBSRFNfQ09OTl9ET1dOKSkKKwkJCQlyZHNfcXVldWVfcmVjb25uZWN0KGNvbm4pOworCQkJZWxzZQorCQkJCXJkc19jb25uX2Vycm9yKGNvbm4sICJSRFM6IGNvbm5lY3QgZmFpbGVkXG4iKTsKKwkJfQorCX0KK30KKwordm9pZCByZHNfc2h1dGRvd25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19jb25uZWN0aW9uLCBjX2Rvd25fdyk7CisKKwkvKiBzaHV0IGl0IGRvd24gdW5sZXNzIGl0J3MgZG93biBhbHJlYWR5ICovCisJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0RPV04sIFJEU19DT05OX0RPV04pKSB7CisJCS8qCisJCSAqIFF1aWVzY2UgdGhlIGNvbm5lY3Rpb24gbWdtdCBoYW5kbGVycyBiZWZvcmUgd2Ugc3RhcnQgdGVhcmluZworCQkgKiB0aGluZ3MgZG93bi4gV2UgZG9uJ3QgaG9sZCB0aGUgbXV0ZXggZm9yIHRoZSBlbnRpcmUKKwkJICogZHVyYXRpb24gb2YgdGhlIHNodXRkb3duIG9wZXJhdGlvbiwgZWxzZSB3ZSBtYXkgYmUKKwkJICogZGVhZGxvY2tpbmcgd2l0aCB0aGUgQ00gaGFuZGxlci4gSW5zdGVhZCwgdGhlIENNIGV2ZW50CisJCSAqIGhhbmRsZXIgaXMgc3VwcG9zZWQgdG8gY2hlY2sgZm9yIHN0YXRlIERJU0NPTk5FQ1RJTkcKKwkJICovCisJCW11dGV4X2xvY2soJmNvbm4tPmNfY21fbG9jayk7CisJCWlmICghcmRzX2Nvbm5fdHJhbnNpdGlvbihjb25uLCBSRFNfQ09OTl9VUCwgUkRTX0NPTk5fRElTQ09OTkVDVElORykKKwkJICYmICFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0VSUk9SLCBSRFNfQ09OTl9ESVNDT05ORUNUSU5HKSkgeworCQkJcmRzX2Nvbm5fZXJyb3IoY29ubiwgInNodXRkb3duIGNhbGxlZCBpbiBzdGF0ZSAlZFxuIiwKKwkJCQkJYXRvbWljX3JlYWQoJmNvbm4tPmNfc3RhdGUpKTsKKwkJCW11dGV4X3VubG9jaygmY29ubi0+Y19jbV9sb2NrKTsKKwkJCXJldHVybjsKKwkJfQorCQltdXRleF91bmxvY2soJmNvbm4tPmNfY21fbG9jayk7CisKKwkJbXV0ZXhfbG9jaygmY29ubi0+Y19zZW5kX2xvY2spOworCQljb25uLT5jX3RyYW5zLT5jb25uX3NodXRkb3duKGNvbm4pOworCQlyZHNfY29ubl9yZXNldChjb25uKTsKKwkJbXV0ZXhfdW5sb2NrKCZjb25uLT5jX3NlbmRfbG9jayk7CisKKwkJaWYgKCFyZHNfY29ubl90cmFuc2l0aW9uKGNvbm4sIFJEU19DT05OX0RJU0NPTk5FQ1RJTkcsIFJEU19DT05OX0RPV04pKSB7CisJCQkvKiBUaGlzIGNhbiBoYXBwZW4gLSBlZyB3aGVuIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgdGVhcmluZworCQkJICogZG93biB0aGUgY29ubmVjdGlvbiwgYW5kIHNvbWVvbmUgdW5sb2FkcyB0aGUgcmRzIG1vZHVsZS4KKwkJCSAqIFF1aXRlIHJlcHJvZHVjZWFibGUgd2l0aCBsb29wYmFjayBjb25uZWN0aW9ucy4KKwkJCSAqIE1vc3RseSBoYXJtbGVzcy4KKwkJCSAqLworCQkJcmRzX2Nvbm5fZXJyb3IoY29ubiwKKwkJCQkiJXM6IGZhaWxlZCB0byB0cmFuc2l0aW9uIHRvIHN0YXRlIERPV04sICIKKwkJCQkiY3VycmVudCBzdGF0ZSBpcyAlZFxuIiwKKwkJCQlfX2Z1bmNfXywKKwkJCQlhdG9taWNfcmVhZCgmY29ubi0+Y19zdGF0ZSkpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogVGhlbiByZWNvbm5lY3QgaWYgaXQncyBzdGlsbCBsaXZlLgorCSAqIFRoZSBwYXNzaXZlIHNpZGUgb2YgYW4gSUIgbG9vcGJhY2sgY29ubmVjdGlvbiBpcyBuZXZlciBhZGRlZAorCSAqIHRvIHRoZSBjb25uIGhhc2gsIHNvIHdlIG5ldmVyIHRyaWdnZXIgYSByZWNvbm5lY3Qgb24gdGhpcworCSAqIGNvbm4gLSB0aGUgcmVjb25uZWN0IGlzIGFsd2F5cyB0cmlnZ2VyZWQgYnkgdGhlIGFjdGl2ZSBwZWVyLiAqLworCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNvbm4tPmNfY29ubl93KTsKKwlpZiAoIWhsaXN0X3VuaGFzaGVkKCZjb25uLT5jX2hhc2hfbm9kZSkpCisJCXJkc19xdWV1ZV9yZWNvbm5lY3QoY29ubik7Cit9CisKK3ZvaWQgcmRzX3NlbmRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19jb25uZWN0aW9uLCBjX3NlbmRfdy53b3JrKTsKKwlpbnQgcmV0OworCisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX1VQKSB7CisJCXJldCA9IHJkc19zZW5kX3htaXQoY29ubik7CisJCXJkc2RlYnVnKCJjb25uICVwIHJldCAlZFxuIiwgY29ubiwgcmV0KTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAtRUFHQUlOOgorCQkJcmRzX3N0YXRzX2luYyhzX3NlbmRfaW1tZWRpYXRlX3JldHJ5KTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3NlbmRfdywgMCk7CisJCQlicmVhazsKKwkJY2FzZSAtRU5PTUVNOgorCQkJcmRzX3N0YXRzX2luYyhzX3NlbmRfZGVsYXllZF9yZXRyeSk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19zZW5kX3csIDIpOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX3JlY3Zfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmRzX2Nvbm5lY3Rpb24gKmNvbm4gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJkc19jb25uZWN0aW9uLCBjX3JlY3Zfdy53b3JrKTsKKwlpbnQgcmV0OworCisJaWYgKHJkc19jb25uX3N0YXRlKGNvbm4pID09IFJEU19DT05OX1VQKSB7CisJCXJldCA9IGNvbm4tPmNfdHJhbnMtPnJlY3YoY29ubik7CisJCXJkc2RlYnVnKCJjb25uICVwIHJldCAlZFxuIiwgY29ubiwgcmV0KTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAtRUFHQUlOOgorCQkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfaW1tZWRpYXRlX3JldHJ5KTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZHNfd3EsICZjb25uLT5jX3JlY3ZfdywgMCk7CisJCQlicmVhazsKKwkJY2FzZSAtRU5PTUVNOgorCQkJcmRzX3N0YXRzX2luYyhzX3JlY3ZfZGVsYXllZF9yZXRyeSk7CisJCQlxdWV1ZV9kZWxheWVkX3dvcmsocmRzX3dxLCAmY29ubi0+Y19yZWN2X3csIDIpOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgcmRzX3RocmVhZHNfZXhpdCh2b2lkKQoreworCWRlc3Ryb3lfd29ya3F1ZXVlKHJkc193cSk7Cit9CisKK2ludCBfX2luaXQgcmRzX3RocmVhZHNfaW5pdCh2b2lkKQoreworCXJkc193cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrcmRzZCIpOworCWlmIChyZHNfd3EgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9yZHMvdHJhbnNwb3J0LmMgYi9uZXQvcmRzL3RyYW5zcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2N2RhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvcmRzL3RyYW5zcG9ydC5jCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorCisjaW5jbHVkZSAicmRzLmgiCisjaW5jbHVkZSAibG9vcC5oIgorCitzdGF0aWMgTElTVF9IRUFEKHJkc190cmFuc3BvcnRzKTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHJkc190cmFuc19zZW0pOworCitpbnQgcmRzX3RyYW5zX3JlZ2lzdGVyKHN0cnVjdCByZHNfdHJhbnNwb3J0ICp0cmFucykKK3sKKwlCVUdfT04oc3RybGVuKHRyYW5zLT50X25hbWUpICsgMSA+IFRSQU5TTkFNU0laKTsKKworCWRvd25fd3JpdGUoJnJkc190cmFuc19zZW0pOworCisJbGlzdF9hZGRfdGFpbCgmdHJhbnMtPnRfaXRlbSwgJnJkc190cmFuc3BvcnRzKTsKKwlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmVkIFJEUy8lcyB0cmFuc3BvcnRcbiIsIHRyYW5zLT50X25hbWUpOworCisJdXBfd3JpdGUoJnJkc190cmFuc19zZW0pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmRzX3RyYW5zX3VucmVnaXN0ZXIoc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zKQoreworCWRvd25fd3JpdGUoJnJkc190cmFuc19zZW0pOworCisJbGlzdF9kZWxfaW5pdCgmdHJhbnMtPnRfaXRlbSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiVW5yZWdpc3RlcmVkIFJEUy8lcyB0cmFuc3BvcnRcbiIsIHRyYW5zLT50X25hbWUpOworCisJdXBfd3JpdGUoJnJkc190cmFuc19zZW0pOworfQorCitzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqcmRzX3RyYW5zX2dldF9wcmVmZXJyZWQoX19iZTMyIGFkZHIpCit7CisJc3RydWN0IHJkc190cmFuc3BvcnQgKnRyYW5zOworCXN0cnVjdCByZHNfdHJhbnNwb3J0ICpyZXQgPSBOVUxMOworCisJaWYgKElOX0xPT1BCQUNLKG50b2hsKGFkZHIpKSkKKwkJcmV0dXJuICZyZHNfbG9vcF90cmFuc3BvcnQ7CisKKwlkb3duX3JlYWQoJnJkc190cmFuc19zZW0pOworCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnMsICZyZHNfdHJhbnNwb3J0cywgdF9pdGVtKSB7CisJCWlmICh0cmFucy0+bGFkZHJfY2hlY2soYWRkcikgPT0gMCkgeworCQkJcmV0ID0gdHJhbnM7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZyZHNfdHJhbnNfc2VtKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBUaGlzIHJldHVybnMgdGhlIG51bWJlciBvZiBzdGF0cyBlbnRyaWVzIGluIHRoZSBzbmFwc2hvdCBhbmQgb25seQorICogY29waWVzIHRoZW0gdXNpbmcgdGhlIGl0ZXIgaWYgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciB0aGVtLiAgVGhlCisgKiBjYWxsZXIgcGFzc2VzIGluIHRoZSBnbG9iYWwgc3RhdHMgc28gdGhhdCB3ZSBjYW4gc2l6ZSBhbmQgY29weSB3aGlsZQorICogaG9sZGluZyB0aGUgbG9jay4KKyAqLwordW5zaWduZWQgaW50IHJkc190cmFuc19zdGF0c19pbmZvX2NvcHkoc3RydWN0IHJkc19pbmZvX2l0ZXJhdG9yICppdGVyLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYXZhaWwpCisKK3sKKwlzdHJ1Y3QgcmRzX3RyYW5zcG9ydCAqdHJhbnM7CisJdW5zaWduZWQgaW50IHRvdGFsID0gMDsKKwl1bnNpZ25lZCBpbnQgcGFydDsKKworCXJkc19pbmZvX2l0ZXJfdW5tYXAoaXRlcik7CisJZG93bl9yZWFkKCZyZHNfdHJhbnNfc2VtKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnMsICZyZHNfdHJhbnNwb3J0cywgdF9pdGVtKSB7CisJCWlmICh0cmFucy0+c3RhdHNfaW5mb19jb3B5ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlwYXJ0ID0gdHJhbnMtPnN0YXRzX2luZm9fY29weShpdGVyLCBhdmFpbCk7CisJCWF2YWlsIC09IG1pbihhdmFpbCwgcGFydCk7CisJCXRvdGFsICs9IHBhcnQ7CisJfQorCisJdXBfcmVhZCgmcmRzX3RyYW5zX3NlbSk7CisKKwlyZXR1cm4gdG90YWw7Cit9CisKZGlmZiAtLWdpdCBhL25ldC9yb3NlL2FmX3Jvc2UuYyBiL25ldC9yb3NlL2FmX3Jvc2UuYwppbmRleCAwMTM5MjY0Li4wZjM2ZThkIDEwMDY0NAotLS0gYS9uZXQvcm9zZS9hZl9yb3NlLmMKKysrIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCkBAIC0xMTI0LDYgKzExMjQsMTAgQEAKIAogCS8qIEJ1aWxkIGEgcGFja2V0ICovCiAJU09DS19ERUJVRyhzaywgIlJPU0U6IHNlbmR0bzogYnVpbGRpbmcgcGFja2V0LlxuIik7CisJLyogU2FuaXR5IGNoZWNrIHRoZSBwYWNrZXQgc2l6ZSAqLworCWlmIChsZW4gPiA2NTUzNSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwogCXNpemUgPSBsZW4gKyBBWDI1X0JQUV9IRUFERVJfTEVOICsgQVgyNV9NQVhfSEVBREVSX0xFTiArIFJPU0VfTUlOX0xFTjsKIAogCWlmICgoc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgc2l6ZSwgbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpKSA9PSBOVUxMKQpAQCAtMTU4Nyw4ICsxNTkxLDcgQEAKIAkJY2hhciBuYW1lW0lGTkFNU0laXTsKIAogCQlzcHJpbnRmKG5hbWUsICJyb3NlJWQiLCBpKTsKLQkJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyksCi0JCQkJICAgbmFtZSwgcm9zZV9zZXR1cCk7CisJCWRldiA9IGFsbG9jX25ldGRldigwLCBuYW1lLCByb3NlX3NldHVwKTsKIAkJaWYgKCFkZXYpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiUk9TRTogcm9zZV9wcm90b19pbml0IC0gdW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CiAJCQlyYyA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9uZXQvcm9zZS9yb3NlX2Rldi5jIGIvbmV0L3Jvc2Uvcm9zZV9kZXYuYwppbmRleCAxMmNmY2YwLi43ZGNmMjU2IDEwMDY0NAotLS0gYS9uZXQvcm9zZS9yb3NlX2Rldi5jCisrKyBiL25ldC9yb3NlL3Jvc2VfZGV2LmMKQEAgLTU3LDcgKzU3LDcgQEAKIHsKICNpZmRlZiBDT05GSUdfSU5FVAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkZXYtPnN0YXRzOwogCXVuc2lnbmVkIGNoYXIgKmJwID0gKHVuc2lnbmVkIGNoYXIgKilza2ItPmRhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYm47CiAJdW5zaWduZWQgaW50IGxlbjsKQEAgLTEzMyw3ICsxMzMsNyBAQAogCiBzdGF0aWMgaW50IHJvc2VfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIlJPU0U6IHJvc2VfeG1pdCAtIGNhbGxlZCB3aGVuIGlmYWNlIGlzIGRvd25cbiIpOwpAQCAtMTQ0LDMwICsxNDQsMjggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpyb3NlX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXJldHVybiBuZXRkZXZfcHJpdihkZXYpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgcm9zZV9oZWFkZXJfb3BzID0gewogCS5jcmVhdGUJPSByb3NlX2hlYWRlciwKIAkucmVidWlsZD0gcm9zZV9yZWJ1aWxkX2hlYWRlciwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcm9zZV9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbgkJPSByb3NlX29wZW4sCisJLm5kb19zdG9wCQk9IHJvc2VfY2xvc2UsCisJLm5kb19zdGFydF94bWl0CQk9IHJvc2VfeG1pdCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAgICA9IHJvc2Vfc2V0X21hY19hZGRyZXNzLAorfTsKKwogdm9pZCByb3NlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5tdHUJCT0gUk9TRV9NQVhfUEFDS0VUX1NJWkUgLSAyOwotCWRldi0+aGFyZF9zdGFydF94bWl0CT0gcm9zZV94bWl0OwotCWRldi0+b3BlbgkJPSByb3NlX29wZW47Ci0JZGV2LT5zdG9wCQk9IHJvc2VfY2xvc2U7CisJZGV2LT5uZXRkZXZfb3BzCQk9ICZyb3NlX25ldGRldl9vcHM7CiAKIAlkZXYtPmhlYWRlcl9vcHMJCT0gJnJvc2VfaGVhZGVyX29wczsKIAlkZXYtPmhhcmRfaGVhZGVyX2xlbgk9IEFYMjVfQlBRX0hFQURFUl9MRU4gKyBBWDI1X01BWF9IRUFERVJfTEVOICsgUk9TRV9NSU5fTEVOOwogCWRldi0+YWRkcl9sZW4JCT0gUk9TRV9BRERSX0xFTjsKIAlkZXYtPnR5cGUJCT0gQVJQSFJEX1JPU0U7Ci0JZGV2LT5zZXRfbWFjX2FkZHJlc3MgICAgPSByb3NlX3NldF9tYWNfYWRkcmVzczsKIAogCS8qIE5ldy1zdHlsZSBmbGFncy4gKi8KIAlkZXYtPmZsYWdzCQk9IElGRl9OT0FSUDsKLQlkZXYtPmdldF9zdGF0cyA9IHJvc2VfZ2V0X3N0YXRzOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKaW5kZXggMGZjNGExOC4uMzIwMDk3OSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuYworKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCkBAIC00NDQsNiArNDQ0LDE3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHFkaXNjX2NhbGN1bGF0ZV9wa3RfbGVuKTsKIAordm9pZCBxZGlzY193YXJuX25vbndjKGNoYXIgKnR4dCwgc3RydWN0IFFkaXNjICpxZGlzYykKK3sKKwlpZiAoIShxZGlzYy0+ZmxhZ3MgJiBUQ1FfRl9XQVJOX05PTldDKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAiJXM6ICVzIHFkaXNjICVYOiBpcyBub24td29yay1jb25zZXJ2aW5nP1xuIiwKKwkJICAgICAgIHR4dCwgcWRpc2MtPm9wcy0+aWQsIHFkaXNjLT5oYW5kbGUgPj4gMTYpOworCQlxZGlzYy0+ZmxhZ3MgfD0gVENRX0ZfV0FSTl9OT05XQzsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHFkaXNjX3dhcm5fbm9ud2MpOworCiBzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgcWRpc2Nfd2F0Y2hkb2coc3RydWN0IGhydGltZXIgKnRpbWVyKQogewogCXN0cnVjdCBxZGlzY193YXRjaGRvZyAqd2QgPSBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBxZGlzY193YXRjaGRvZywKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfY2JxLmMgYi9uZXQvc2NoZWQvc2NoX2NicS5jCmluZGV4IDllNDNlZDkuLmQ3MjhkODEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfY2JxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9jYnEuYwpAQCAtMTk2MCw4ICsxOTYwLDExIEBACiAJY2JxX3JtcHJpbyhxLCBjbCk7CiAJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CiAKLQlpZiAoLS1jbC0+cmVmY250ID09IDApCi0JCWNicV9kZXN0cm95X2NsYXNzKHNjaCwgY2wpOworCUJVR19PTigtLWNsLT5yZWZjbnQgPT0gMCk7CisJLyoKKwkgKiBUaGlzIHNob3VsZG4ndCBoYXBwZW46IHdlICJob2xkIiBvbmUgY29wcy0+Z2V0KCkgd2hlbiBjYWxsZWQKKwkgKiBmcm9tIHRjX2N0bF90Y2xhc3M7IHRoZSBkZXN0cm95IG1ldGhvZCBpcyBkb25lIGZyb20gY29wcy0+cHV0KCkuCisJICovCiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHJyLmMgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCmluZGV4IGUzNmU5NGEuLjc1OTdmZTEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZHJyLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9kcnIuYwpAQCAtMTU1LDggKzE1NSwxMSBAQAogCWRycl9wdXJnZV9xdWV1ZShjbCk7CiAJcWRpc2NfY2xhc3NfaGFzaF9yZW1vdmUoJnEtPmNsaGFzaCwgJmNsLT5jb21tb24pOwogCi0JaWYgKC0tY2wtPnJlZmNudCA9PSAwKQotCQlkcnJfZGVzdHJveV9jbGFzcyhzY2gsIGNsKTsKKwlCVUdfT04oLS1jbC0+cmVmY250ID09IDApOworCS8qCisJICogVGhpcyBzaG91bGRuJ3QgaGFwcGVuOiB3ZSAiaG9sZCIgb25lIGNvcHMtPmdldCgpIHdoZW4gY2FsbGVkCisJICogZnJvbSB0Y19jdGxfdGNsYXNzOyB0aGUgZGVzdHJveSBtZXRob2QgaXMgZG9uZSBmcm9tIGNvcHMtPnB1dCgpLgorCSAqLwogCiAJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IDQ1YzMxYjEuLjUwMjJmOWMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaGZzYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCkBAIC04ODcsOCArODg3LDcgQEAKIAogCXNrYiA9IHNjaC0+b3BzLT5wZWVrKHNjaCk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoInFkaXNjX3BlZWtfbGVuOiBub24gd29yay1jb25zZXJ2aW5nIHFkaXNjID9cbiIpOworCQlxZGlzY193YXJuX25vbndjKCJxZGlzY19wZWVrX2xlbiIsIHNjaCk7CiAJCXJldHVybiAwOwogCX0KIAlsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7CkBAIC0xMTQwLDggKzExMzksMTEgQEAKIAloZnNjX3B1cmdlX3F1ZXVlKHNjaCwgY2wpOwogCXFkaXNjX2NsYXNzX2hhc2hfcmVtb3ZlKCZxLT5jbGhhc2gsICZjbC0+Y2xfY29tbW9uKTsKIAotCWlmICgtLWNsLT5yZWZjbnQgPT0gMCkKLQkJaGZzY19kZXN0cm95X2NsYXNzKHNjaCwgY2wpOworCUJVR19PTigtLWNsLT5yZWZjbnQgPT0gMCk7CisJLyoKKwkgKiBUaGlzIHNob3VsZG4ndCBoYXBwZW46IHdlICJob2xkIiBvbmUgY29wcy0+Z2V0KCkgd2hlbiBjYWxsZWQKKwkgKiBmcm9tIHRjX2N0bF90Y2xhc3M7IHRoZSBkZXN0cm95IG1ldGhvZCBpcyBkb25lIGZyb20gY29wcy0+cHV0KCkuCisJICovCiAKIAlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAlyZXR1cm4gMDsKQEAgLTE2NDIsOCArMTY0NCw3IEBACiAKIAlza2IgPSBxZGlzY19kZXF1ZXVlX3BlZWtlZChjbC0+cWRpc2MpOwogCWlmIChza2IgPT0gTlVMTCkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKCJIRlNDOiBOb24td29yay1jb25zZXJ2aW5nIHFkaXNjID9cbiIpOworCQlxZGlzY193YXJuX25vbndjKCJIRlNDIiwgY2wtPnFkaXNjKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuYwppbmRleCAyZjBmMGIwLi44OGNkMDI2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCisrKyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KIApAQCAtMTE0LDggKzExNSw2IEBACiAJc3RydWN0IHRjZl9wcm90byAqZmlsdGVyX2xpc3Q7CiAJaW50IGZpbHRlcl9jbnQ7CiAKLQlpbnQgd2FybmVkOwkJLyogb25seSBvbmUgd2FybmluZyBhYm91dCBub24gd29yayBjb25zZXJ2aW5nIC4uICovCi0KIAkvKiB0b2tlbiBidWNrZXQgcGFyYW1ldGVycyAqLwogCXN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICpyYXRlOwkvKiByYXRlIHRhYmxlIG9mIHRoZSBjbGFzcyBpdHNlbGYgKi8KIAlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqY2VpbDsJLyogY2VpbGluZyByYXRlIChsaW1pdHMgYm9ycm93cyB0b28pICovCkBAIC0xNTUsNiArMTU0LDEwIEBACiAJaW50IGRpcmVjdF9xbGVuOwkvKiBtYXggcWxlbiBvZiBhYm92ZSAqLwogCiAJbG9uZyBkaXJlY3RfcGt0czsKKworI2RlZmluZSBIVEJfV0FSTl9UT09NQU5ZRVZFTlRTCTB4MQorCXVuc2lnbmVkIGludCB3YXJuZWQ7CS8qIG9ubHkgb25lIHdhcm5pbmcgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIH07CiAKIC8qIGZpbmQgY2xhc3MgaW4gZ2xvYmFsIGhhc2ggdGFibGUgdXNpbmcgZ2l2ZW4gaGFuZGxlICovCkBAIC02NTgsNyArNjYxLDcgQEAKICAqIGh0Yl9kb19ldmVudHMgLSBtYWtlIG1vZGUgY2hhbmdlcyB0byBjbGFzc2VzIGF0IHRoZSBsZXZlbAogICoKICAqIFNjYW5zIGV2ZW50IHF1ZXVlIGZvciBwZW5kaW5nIGV2ZW50cyBhbmQgYXBwbGllcyB0aGVtLiBSZXR1cm5zIHRpbWUgb2YKLSAqIG5leHQgcGVuZGluZyBldmVudCAoMCBmb3Igbm8gZXZlbnQgaW4gcHEpLgorICogbmV4dCBwZW5kaW5nIGV2ZW50ICgwIGZvciBubyBldmVudCBpbiBwcSwgcS0+bm93IGZvciB0b28gbWFueSBldmVudHMpLgogICogTm90ZTogQXBwbGllZCBhcmUgZXZlbnRzIHdob3NlIGhhdmUgY2wtPnBxX2tleSA8PSBxLT5ub3cuCiAgKi8KIHN0YXRpYyBwc2NoZWRfdGltZV90IGh0Yl9kb19ldmVudHMoc3RydWN0IGh0Yl9zY2hlZCAqcSwgaW50IGxldmVsLApAQCAtNjg2LDggKzY4OSwxNCBAQAogCQlpZiAoY2wtPmNtb2RlICE9IEhUQl9DQU5fU0VORCkKIAkJCWh0Yl9hZGRfdG9fd2FpdF90cmVlKHEsIGNsLCBkaWZmKTsKIAl9Ci0JLyogdG9vIG11Y2ggbG9hZCAtIGxldCdzIGNvbnRpbnVlIG9uIG5leHQgamlmZmllIChpbmNsdWRpbmcgYWJvdmUpICovCi0JcmV0dXJuIHEtPm5vdyArIDIgKiBQU0NIRURfVElDS1NfUEVSX1NFQyAvIEhaOworCisJLyogdG9vIG11Y2ggbG9hZCAtIGxldCdzIGNvbnRpbnVlIGFmdGVyIGEgYnJlYWsgZm9yIHNjaGVkdWxpbmcgKi8KKwlpZiAoIShxLT53YXJuZWQgJiBIVEJfV0FSTl9UT09NQU5ZRVZFTlRTKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJodGI6IHRvbyBtYW55IGV2ZW50cyFcbiIpOworCQlxLT53YXJuZWQgfD0gSFRCX1dBUk5fVE9PTUFOWUVWRU5UUzsKKwl9CisKKwlyZXR1cm4gcS0+bm93OwogfQogCiAvKiBSZXR1cm5zIGNsYXNzLT5ub2RlK3ByaW8gZnJvbSBpZC10cmVlIHdoZXJlIGNsYXNzZSdzIGlkIGlzID49IGlkLiBOVUxMCkBAIC04MDksMTMgKzgxOCw4IEBACiAJCXNrYiA9IGNsLT51bi5sZWFmLnEtPmRlcXVldWUoY2wtPnVuLmxlYWYucSk7CiAJCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKQogCQkJYnJlYWs7Ci0JCWlmICghY2wtPndhcm5lZCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJodGI6IGNsYXNzICVYIGlzbid0IHdvcmsgY29uc2VydmluZyA/IVxuIiwKLQkJCSAgICAgICBjbC0+Y29tbW9uLmNsYXNzaWQpOwotCQkJY2wtPndhcm5lZCA9IDE7Ci0JCX0KIAorCQlxZGlzY193YXJuX25vbndjKCJodGIiLCBjbC0+dW4ubGVhZi5xKTsKIAkJaHRiX25leHRfcmJfbm9kZSgobGV2ZWwgPyBjbC0+cGFyZW50LT51bi5pbm5lci5wdHIgOiBxLT4KIAkJCQkgIHB0clswXSkgKyBwcmlvKTsKIAkJY2wgPSBodGJfbG9va3VwX2xlYWYocS0+cm93W2xldmVsXSArIHByaW8sIHByaW8sCkBAIC04OTIsNyArODk2LDEwIEBACiAJCX0KIAl9CiAJc2NoLT5xc3RhdHMub3ZlcmxpbWl0cysrOwotCXFkaXNjX3dhdGNoZG9nX3NjaGVkdWxlKCZxLT53YXRjaGRvZywgbmV4dF9ldmVudCk7CisJaWYgKGxpa2VseShuZXh0X2V2ZW50ID4gcS0+bm93KSkKKwkJcWRpc2Nfd2F0Y2hkb2dfc2NoZWR1bGUoJnEtPndhdGNoZG9nLCBuZXh0X2V2ZW50KTsKKwllbHNlCisJCXNjaGVkdWxlX3dvcmsoJnEtPndvcmspOwogZmluOgogCXJldHVybiBza2I7CiB9CkBAIC05NjIsNiArOTY5LDE0IEBACiAJW1RDQV9IVEJfUlRBQl0JPSB7IC50eXBlID0gTkxBX0JJTkFSWSwgLmxlbiA9IFRDX1JUQUJfU0laRSB9LAogfTsKIAorc3RhdGljIHZvaWQgaHRiX3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGh0Yl9zY2hlZCAqcSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaHRiX3NjaGVkLCB3b3JrKTsKKwlzdHJ1Y3QgUWRpc2MgKnNjaCA9IHEtPndhdGNoZG9nLnFkaXNjOworCisJX19uZXRpZl9zY2hlZHVsZShxZGlzY19yb290KHNjaCkpOworfQorCiBzdGF0aWMgaW50IGh0Yl9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQpCiB7CiAJc3RydWN0IGh0Yl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKQEAgLTk5Niw2ICsxMDExLDcgQEAKIAkJSU5JVF9MSVNUX0hFQUQocS0+ZHJvcHMgKyBpKTsKIAogCXFkaXNjX3dhdGNoZG9nX2luaXQoJnEtPndhdGNoZG9nLCBzY2gpOworCUlOSVRfV09SSygmcS0+d29yaywgaHRiX3dvcmtfZnVuYyk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcS0+ZGlyZWN0X3F1ZXVlKTsKIAogCXEtPmRpcmVjdF9xbGVuID0gcWRpc2NfZGV2KHNjaCktPnR4X3F1ZXVlX2xlbjsKQEAgLTExODgsNyArMTIwNCw2IEBACiAJa2ZyZWUoY2wpOwogfQogCi0vKiBhbHdheXMgY2FsZWQgdW5kZXIgQkggJiBxdWV1ZSBsb2NrICovCiBzdGF0aWMgdm9pZCBodGJfZGVzdHJveShzdHJ1Y3QgUWRpc2MgKnNjaCkKIHsKIAlzdHJ1Y3QgaHRiX3NjaGVkICpxID0gcWRpc2NfcHJpdihzY2gpOwpAQCAtMTE5Niw2ICsxMjExLDcgQEAKIAlzdHJ1Y3QgaHRiX2NsYXNzICpjbDsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWNhbmNlbF93b3JrX3N5bmMoJnEtPndvcmspOwogCXFkaXNjX3dhdGNoZG9nX2NhbmNlbCgmcS0+d2F0Y2hkb2cpOwogCS8qIFRoaXMgbGluZSB1c2VkIHRvIGJlIGFmdGVyIGh0Yl9kZXN0cm95X2NsYXNzIGNhbGwgYmVsb3cKIAkgICBhbmQgc3VycHJpc2luZ2x5IGl0IHdvcmtlZCBpbiAyLjQuIEJ1dCBpdCBtdXN0IHByZWNlZGUgaXQKQEAgLTEyNTksOCArMTI3NSwxMSBAQAogCWlmIChsYXN0X2NoaWxkKQogCQlodGJfcGFyZW50X3RvX2xlYWYocSwgY2wsIG5ld19xKTsKIAotCWlmICgtLWNsLT5yZWZjbnQgPT0gMCkKLQkJaHRiX2Rlc3Ryb3lfY2xhc3Moc2NoLCBjbCk7CisJQlVHX09OKC0tY2wtPnJlZmNudCA9PSAwKTsKKwkvKgorCSAqIFRoaXMgc2hvdWxkbid0IGhhcHBlbjogd2UgImhvbGQiIG9uZSBjb3BzLT5nZXQoKSB3aGVuIGNhbGxlZAorCSAqIGZyb20gdGNfY3RsX3RjbGFzczsgdGhlIGRlc3Ryb3kgbWV0aG9kIGlzIGRvbmUgZnJvbSBjb3BzLT5wdXQoKS4KKwkgKi8KIAogCXNjaF90cmVlX3VubG9jayhzY2gpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYyBiL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKaW5kZXggN2UxNTE4Ni4uOTEyNzMxMiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYworKysgYi9uZXQvc2NoZWQvc2NoX211bHRpcS5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAlpbnQgaTsKIAogCWlmICghbmV0aWZfaXNfbXVsdGlxdWV1ZShxZGlzY19kZXYoc2NoKSkpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKG5sYV9sZW4ob3B0KSA8IHNpemVvZigqcW9wdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RiZi5jIGIvbmV0L3NjaGVkL3NjaF90YmYuYwppbmRleCBhMmY5M2MwLi5lMjJkZmU4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RiZi5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGJmLmMKQEAgLTIzNiw3ICsyMzYsNiBAQAogCXN0cnVjdCB0Y190YmZfcW9wdCAqcW9wdDsKIAlzdHJ1Y3QgcWRpc2NfcmF0ZV90YWJsZSAqcnRhYiA9IE5VTEw7CiAJc3RydWN0IHFkaXNjX3JhdGVfdGFibGUgKnB0YWIgPSBOVUxMOwotCXN0cnVjdCBxZGlzY19yYXRlX3RhYmxlICp0bXA7CiAJc3RydWN0IFFkaXNjICpjaGlsZCA9IE5VTEw7CiAJaW50IG1heF9zaXplLG47CiAKQEAgLTI5NSwxMyArMjk0LDkgQEAKIAlxLT50b2tlbnMgPSBxLT5idWZmZXI7CiAJcS0+cHRva2VucyA9IHEtPm10dTsKIAotCXRtcCA9IHEtPlJfdGFiOwotCXEtPlJfdGFiID0gcnRhYjsKLQlydGFiID0gdG1wOworCXN3YXAocS0+Ul90YWIsIHJ0YWIpOworCXN3YXAocS0+UF90YWIsIHB0YWIpOwogCi0JdG1wID0gcS0+UF90YWI7Ci0JcS0+UF90YWIgPSBwdGFiOwotCXB0YWIgPSB0bXA7CiAJc2NoX3RyZWVfdW5sb2NrKHNjaCk7CiAJZXJyID0gMDsKIGRvbmU6CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9kZWJ1Zy5jIGIvbmV0L3NjdHAvZGVidWcuYwppbmRleCA2NzcxNWY0Li43ZmY1NDhhIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9kZWJ1Zy5jCisrKyBiL25ldC9zY3RwL2RlYnVnLmMKQEAgLTg2LDYgKzg2LDkgQEAKIAljYXNlIFNDVFBfQ0lEX0ZXRF9UU046CiAJCXJldHVybiAiRldEX1RTTiI7CiAKKwljYXNlIFNDVFBfQ0lEX0FVVEg6CisJCXJldHVybiAiQVVUSCI7CisKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CkBAIC0xMzUsNiArMTM4LDcgQEAKIAkiUFJJTUlUSVZFX0FCT1JUIiwKIAkiUFJJTUlUSVZFX1NFTkQiLAogCSJQUklNSVRJVkVfUkVRVUVTVEhFQVJUQkVBVCIsCisJIlBSSU1JVElWRV9BU0NPTkYiLAogfTsKIAogLyogTG9va3VwIHByaW1pdGl2ZSBkZWJ1ZyBuYW1lLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYyBiL25ldC9zY3RwL2VuZHBvaW50b2xhLmMKaW5kZXggNGM4ZDlmNC4uOTA1ZmRhNSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYworKysgYi9uZXQvc2N0cC9lbmRwb2ludG9sYS5jCkBAIC0xMTEsNyArMTExLDggQEAKIAkJaWYgKHNjdHBfYWRkaXBfZW5hYmxlKSB7CiAJCQlhdXRoX2NodW5rcy0+Y2h1bmtzWzBdID0gU0NUUF9DSURfQVNDT05GOwogCQkJYXV0aF9jaHVua3MtPmNodW5rc1sxXSA9IFNDVFBfQ0lEX0FTQ09ORl9BQ0s7Ci0JCQlhdXRoX2NodW5rcy0+cGFyYW1faGRyLmxlbmd0aCArPSBodG9ucygyKTsKKwkJCWF1dGhfY2h1bmtzLT5wYXJhbV9oZHIubGVuZ3RoID0KKwkJCQkJaHRvbnMoc2l6ZW9mKHNjdHBfcGFyYW1oZHJfdCkgKyAyKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5wdXQuYyBiL25ldC9zY3RwL2lucHV0LmMKaW5kZXggMmU0YTg2NC4uZDJlOTg4MCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaW5wdXQuYworKysgYi9uZXQvc2N0cC9pbnB1dC5jCkBAIC04MywxNCArODMsMTUgQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbGlzdCA9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0OwogCXN0cnVjdCBzY3RwaGRyICpzaCA9IHNjdHBfaGRyKHNrYik7Ci0JX19iZTMyIGNtcCA9IHNoLT5jaGVja3N1bTsKLQlfX2JlMzIgdmFsID0gc2N0cF9zdGFydF9ja3N1bSgoX191OCAqKXNoLCBza2JfaGVhZGxlbihza2IpKTsKKwlfX2xlMzIgY21wID0gc2gtPmNoZWNrc3VtOworCV9fbGUzMiB2YWw7CisJX191MzIgdG1wID0gc2N0cF9zdGFydF9ja3N1bSgoX191OCAqKXNoLCBza2JfaGVhZGxlbihza2IpKTsKIAogCWZvciAoOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkKLQkJdmFsID0gc2N0cF91cGRhdGVfY2tzdW0oKF9fdTggKilsaXN0LT5kYXRhLCBza2JfaGVhZGxlbihsaXN0KSwKLQkJCQkJdmFsKTsKKwkJdG1wID0gc2N0cF91cGRhdGVfY2tzdW0oKF9fdTggKilsaXN0LT5kYXRhLCBza2JfaGVhZGxlbihsaXN0KSwKKwkJCQkJdG1wKTsKIAotCXZhbCA9IHNjdHBfZW5kX2Nrc3VtKHZhbCk7CisJdmFsID0gc2N0cF9lbmRfY2tzdW0odG1wKTsKIAogCWlmICh2YWwgIT0gY21wKSB7CiAJCS8qIENSQyBmYWlsdXJlLCBkdW1wIGl0LiAqLwpAQCAtMTQyLDcgKzE0Myw4IEBACiAJX19za2JfcHVsbChza2IsIHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikpOwogCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpCiAJCWdvdG8gZGlzY2FyZF9pdDsKLQlpZiAoIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgJiYgc2N0cF9yY3ZfY2hlY2tzdW0oc2tiKSA8IDApCisJaWYgKCFzY3RwX2NoZWNrc3VtX2Rpc2FibGUgJiYgIXNrYl9jc3VtX3VubmVjZXNzYXJ5KHNrYikgJiYKKwkJICBzY3RwX3Jjdl9jaGVja3N1bShza2IpIDwgMCkKIAkJZ290byBkaXNjYXJkX2l0OwogCiAJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2lwdjYuYyBiL25ldC9zY3RwL2lwdjYuYwppbmRleCBjZWFhNGFhLi5hNjNkZTNmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9pcHY2LmMKKysrIGIvbmV0L3NjdHAvaXB2Ni5jCkBAIC05Nyw4ICs5Nyw3IEBACiAJCWlmIChhZGRyKSB7CiAJCQlhZGRyLT5hLnY2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CiAJCQlhZGRyLT5hLnY2LnNpbjZfcG9ydCA9IDA7Ci0JCQltZW1jcHkoJmFkZHItPmEudjYuc2luNl9hZGRyLCAmaWZhLT5hZGRyLAotCQkJCSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCQlpcHY2X2FkZHJfY29weSgmYWRkci0+YS52Ni5zaW42X2FkZHIsICZpZmEtPmFkZHIpOwogCQkJYWRkci0+YS52Ni5zaW42X3Njb3BlX2lkID0gaWZhLT5pZGV2LT5kZXYtPmlmaW5kZXg7CiAJCQlhZGRyLT52YWxpZCA9IDE7CiAJCQlzcGluX2xvY2tfYmgoJnNjdHBfbG9jYWxfYWRkcl9sb2NrKTsKQEAgLTYyOCw5ICs2MjcsNyBAQAogc3RhdGljIHN0cnVjdCBzb2NrICpzY3RwX3Y2X2NyZWF0ZV9hY2NlcHRfc2soc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogewotCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3Qgc29jayAqbmV3c2s7Ci0Jc3RydWN0IGluZXRfc29jayAqbmV3aW5ldDsKIAlzdHJ1Y3QgaXB2Nl9waW5mbyAqbmV3bnAsICpucCA9IGluZXQ2X3NrKHNrKTsKIAlzdHJ1Y3Qgc2N0cDZfc29jayAqbmV3c2N0cDZzazsKIApAQCAtNjQwLDE3ICs2MzcsNyBAQAogCiAJc29ja19pbml0X2RhdGEoTlVMTCwgbmV3c2spOwogCi0JbmV3c2stPnNrX3R5cGUgPSBTT0NLX1NUUkVBTTsKLQotCW5ld3NrLT5za19wcm90ID0gc2stPnNrX3Byb3Q7Ci0JbmV3c2stPnNrX25vX2NoZWNrID0gc2stPnNrX25vX2NoZWNrOwotCW5ld3NrLT5za19yZXVzZSA9IHNrLT5za19yZXVzZTsKLQotCW5ld3NrLT5za19kZXN0cnVjdCA9IGluZXRfc29ja19kZXN0cnVjdDsKLQluZXdzay0+c2tfZmFtaWx5ID0gUEZfSU5FVDY7Ci0JbmV3c2stPnNrX3Byb3RvY29sID0gSVBQUk9UT19TQ1RQOwotCW5ld3NrLT5za19iYWNrbG9nX3JjdiA9IHNrLT5za19wcm90LT5iYWNrbG9nX3JjdjsKLQluZXdzay0+c2tfc2h1dGRvd24gPSBzay0+c2tfc2h1dGRvd247CisJc2N0cF9jb3B5X3NvY2sobmV3c2ssIHNrLCBhc29jKTsKIAlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTsKIAogCW5ld3NjdHA2c2sgPSAoc3RydWN0IHNjdHA2X3NvY2sgKiluZXdzazsKQEAgLTY1OCw3ICs2NDUsNiBAQAogCiAJc2N0cF9zayhuZXdzayktPnY0bWFwcGVkID0gc2N0cF9zayhzayktPnY0bWFwcGVkOwogCi0JbmV3aW5ldCA9IGluZXRfc2sobmV3c2spOwogCW5ld25wID0gaW5ldDZfc2sobmV3c2spOwogCiAJbWVtY3B5KG5ld25wLCBucCwgc2l6ZW9mKHN0cnVjdCBpcHY2X3BpbmZvKSk7CkBAIC02NjYsMjYgKzY1Miw4IEBACiAJLyogSW5pdGlhbGl6ZSBzaydzIHNwb3J0LCBkcG9ydCwgcmN2X3NhZGRyIGFuZCBkYWRkciBmb3IgZ2V0c29ja25hbWUoKQogCSAqIGFuZCBnZXRwZWVybmFtZSgpLgogCSAqLwotCW5ld2luZXQtPnNwb3J0ID0gaW5ldC0+c3BvcnQ7Ci0JbmV3bnAtPnNhZGRyID0gbnAtPnNhZGRyOwotCW5ld25wLT5yY3Zfc2FkZHIgPSBucC0+cmN2X3NhZGRyOwotCW5ld2luZXQtPmRwb3J0ID0gaHRvbnMoYXNvYy0+cGVlci5wb3J0KTsKIAlzY3RwX3Y2X3RvX3NrX2RhZGRyKCZhc29jLT5wZWVyLnByaW1hcnlfYWRkciwgbmV3c2spOwogCi0JLyogSW5pdCB0aGUgaXB2NCBwYXJ0IG9mIHRoZSBzb2NrZXQgc2luY2Ugd2UgY2FuIGhhdmUgc29ja2V0cwotCSAqIHVzaW5nIHY2IEFQSSBmb3IgaXB2NC4KLQkgKi8KLQluZXdpbmV0LT51Y190dGwgPSAtMTsKLQluZXdpbmV0LT5tY19sb29wID0gMTsKLQluZXdpbmV0LT5tY190dGwgPSAxOwotCW5ld2luZXQtPm1jX2luZGV4ID0gMDsKLQluZXdpbmV0LT5tY19saXN0ID0gTlVMTDsKLQotCWlmIChpcHY0X2NvbmZpZy5ub19wbXR1X2Rpc2MpCi0JCW5ld2luZXQtPnBtdHVkaXNjID0gSVBfUE1UVURJU0NfRE9OVDsKLQllbHNlCi0JCW5ld2luZXQtPnBtdHVkaXNjID0gSVBfUE1UVURJU0NfV0FOVDsKLQogCXNrX3JlZmNudF9kZWJ1Z19pbmMobmV3c2spOwogCiAJaWYgKG5ld3NrLT5za19wcm90LT5pbml0KG5ld3NrKSkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cHV0LmMgYi9uZXQvc2N0cC9vdXRwdXQuYwppbmRleCA3MzYzOTM1Li43ZDA4ZjUyIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9vdXRwdXQuYworKysgYi9uZXQvc2N0cC9vdXRwdXQuYwpAQCAtNDksMTMgKzQ5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9lY24uaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQvaWNtcC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAKLSNpZm5kZWYgVEVTVF9GUkFNRQotI2luY2x1ZGUgPG5ldC90Y3AuaD4KLSNlbmRpZiAvKiBURVNUX0ZSQU1FIChub3QgZGVmaW5lZCkgKi8KLQogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPiAvKiBmb3Igc2FfZmFtaWx5X3QgKi8KICNpbmNsdWRlIDxuZXQvc29jay5oPgogCkBAIC0zNjcsNyArMzY0LDYgQEAKIAlzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRwID0gcGFja2V0LT50cmFuc3BvcnQ7CiAJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSB0cC0+YXNvYzsKIAlzdHJ1Y3Qgc2N0cGhkciAqc2g7Ci0JX19iZTMyIGNyYzMyID0gX19jb25zdGFudF9jcHVfdG9fYmUzMigwKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmssICp0bXA7CiAJc3RydWN0IHNvY2sgKnNrOwpAQCAtNTMxLDE3ICs1MjcsMTYgQEAKIAkgKiBOb3RlOiBBZGxlci0zMiBpcyBubyBsb25nZXIgYXBwbGljYWJsZSwgYXMgaGFzIGJlZW4gcmVwbGFjZWQKIAkgKiBieSBDUkMzMi1DIGFzIGRlc2NyaWJlZCBpbiA8ZHJhZnQtaWV0Zi10c3Z3Zy1zY3RwY3N1bS0wMi50eHQ+LgogCSAqLwotCWlmICghKGRzdC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkpIHsKLQkJY3JjMzIgPSBzY3RwX3N0YXJ0X2Nrc3VtKChfX3U4ICopc2gsIGNrc3VtX2J1Zl9sZW4pOwotCQljcmMzMiA9IHNjdHBfZW5kX2Nrc3VtKGNyYzMyKTsKKwlpZiAoIXNjdHBfY2hlY2tzdW1fZGlzYWJsZSAmJiAhKGRzdC0+ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkpIHsKKwkJX191MzIgY3JjMzIgPSBzY3RwX3N0YXJ0X2Nrc3VtKChfX3U4ICopc2gsIGNrc3VtX2J1Zl9sZW4pOworCisJCS8qIDMpIFB1dCB0aGUgcmVzdWx0YW50IHZhbHVlIGludG8gdGhlIGNoZWNrc3VtIGZpZWxkIGluIHRoZQorCQkgKiAgICBjb21tb24gaGVhZGVyLCBhbmQgbGVhdmUgdGhlIHJlc3Qgb2YgdGhlIGJpdHMgdW5jaGFuZ2VkLgorCQkgKi8KKwkJc2gtPmNoZWNrc3VtID0gc2N0cF9lbmRfY2tzdW0oY3JjMzIpOwogCX0gZWxzZQogCQluc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAotCS8qIDMpIFB1dCB0aGUgcmVzdWx0YW50IHZhbHVlIGludG8gdGhlIGNoZWNrc3VtIGZpZWxkIGluIHRoZQotCSAqICAgIGNvbW1vbiBoZWFkZXIsIGFuZCBsZWF2ZSB0aGUgcmVzdCBvZiB0aGUgYml0cyB1bmNoYW5nZWQuCi0JICovCi0Jc2gtPmNoZWNrc3VtID0gY3JjMzI7Ci0KIAkvKiBJUCBsYXllciBFQ04gc3VwcG9ydAogCSAqIEZyb20gUkZDIDI0ODEKIAkgKiAgIlRoZSBFQ04tQ2FwYWJsZSBUcmFuc3BvcnQgKEVDVCkgYml0IHdvdWxkIGJlIHNldCBieSB0aGUKZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHF1ZXVlLmMgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCmluZGV4IGJjNDExYzguLmQ3NjVmYzUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL291dHF1ZXVlLmMKKysrIGIvbmV0L3NjdHAvb3V0cXVldWUuYwpAQCAtNDI4LDcgKzQyOCw4IEBACiAJCQkgKiByZXRyYW5zbWl0dGluZyBkdWUgdG8gVDMgdGltZW91dC4KIAkJCSAqLwogCQkJaWYgKHJlYXNvbiA9PSBTQ1RQX1JUWFJfVDNfUlRYICYmCi0JCQkgICAgKGppZmZpZXMgLSBjaHVuay0+c2VudF9hdCkgPCB0cmFuc3BvcnQtPmxhc3RfcnRvKQorCQkJICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIGNodW5rLT5zZW50X2F0ICsKKwkJCQkJCSB0cmFuc3BvcnQtPmxhc3RfcnRvKSkKIAkJCQljb250aW51ZTsKIAogCQkJLyogUkZDIDI5NjAgNi4yLjEgUHJvY2Vzc2luZyBhIFJlY2VpdmVkIFNBQ0sKQEAgLTE3NTcsNiArMTc1OCw5IEBACiAJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxjaHVuaywgKnRlbXA7CiAKKwlpZiAoIWFzb2MtPnBlZXIucHJzY3RwX2NhcGFibGUpCisJCXJldHVybjsKKwogCS8qIFBSLVNDVFAgQzEpIExldCBTYWNrQ3VtQWNrIGJlIHRoZSBDdW11bGF0aXZlIFRTTiBBQ0sgY2FycmllZCBpbiB0aGUKIAkgKiByZWNlaXZlZCBTQUNLLgogCSAqCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9wcm90b2NvbC5jIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwppbmRleCBjNDk4NmQwLi5jYjE5OGFmIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm90b2NvbC5jCisrKyBiL25ldC9zY3RwL3Byb3RvY29sLmMKQEAgLTU4OSw0NiArNTg5LDIxIEBACiBzdGF0aWMgc3RydWN0IHNvY2sgKnNjdHBfdjRfY3JlYXRlX2FjY2VwdF9zayhzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCiB7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwotCXN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQ7CiAJc3RydWN0IHNvY2sgKm5ld3NrID0gc2tfYWxsb2Moc29ja19uZXQoc2spLCBQRl9JTkVULCBHRlBfS0VSTkVMLAogCQkJc2stPnNrX3Byb3QpOworCXN0cnVjdCBpbmV0X3NvY2sgKm5ld2luZXQ7CiAKIAlpZiAoIW5ld3NrKQogCQlnb3RvIG91dDsKIAogCXNvY2tfaW5pdF9kYXRhKE5VTEwsIG5ld3NrKTsKIAotCW5ld3NrLT5za190eXBlID0gU09DS19TVFJFQU07Ci0KLQluZXdzay0+c2tfbm9fY2hlY2sgPSBzay0+c2tfbm9fY2hlY2s7Ci0JbmV3c2stPnNrX3JldXNlID0gc2stPnNrX3JldXNlOwotCW5ld3NrLT5za19zaHV0ZG93biA9IHNrLT5za19zaHV0ZG93bjsKLQotCW5ld3NrLT5za19kZXN0cnVjdCA9IGluZXRfc29ja19kZXN0cnVjdDsKLQluZXdzay0+c2tfZmFtaWx5ID0gUEZfSU5FVDsKLQluZXdzay0+c2tfcHJvdG9jb2wgPSBJUFBST1RPX1NDVFA7Ci0JbmV3c2stPnNrX2JhY2tsb2dfcmN2ID0gc2stPnNrX3Byb3QtPmJhY2tsb2dfcmN2OworCXNjdHBfY29weV9zb2NrKG5ld3NrLCBzaywgYXNvYyk7CiAJc29ja19yZXNldF9mbGFnKG5ld3NrLCBTT0NLX1pBUFBFRCk7CiAKIAluZXdpbmV0ID0gaW5ldF9zayhuZXdzayk7CiAKLQkvKiBJbml0aWFsaXplIHNrJ3Mgc3BvcnQsIGRwb3J0LCByY3Zfc2FkZHIgYW5kIGRhZGRyIGZvcgotCSAqIGdldHNvY2tuYW1lKCkgYW5kIGdldHBlZXJuYW1lKCkKLQkgKi8KLQluZXdpbmV0LT5zcG9ydCA9IGluZXQtPnNwb3J0OwotCW5ld2luZXQtPnNhZGRyID0gaW5ldC0+c2FkZHI7Ci0JbmV3aW5ldC0+cmN2X3NhZGRyID0gaW5ldC0+cmN2X3NhZGRyOwotCW5ld2luZXQtPmRwb3J0ID0gaHRvbnMoYXNvYy0+cGVlci5wb3J0KTsKIAluZXdpbmV0LT5kYWRkciA9IGFzb2MtPnBlZXIucHJpbWFyeV9hZGRyLnY0LnNpbl9hZGRyLnNfYWRkcjsKLQluZXdpbmV0LT5wbXR1ZGlzYyA9IGluZXQtPnBtdHVkaXNjOwotCW5ld2luZXQtPmlkID0gYXNvYy0+bmV4dF90c24gXiBqaWZmaWVzOwotCi0JbmV3aW5ldC0+dWNfdHRsID0gLTE7Ci0JbmV3aW5ldC0+bWNfbG9vcCA9IDE7Ci0JbmV3aW5ldC0+bWNfdHRsID0gMTsKLQluZXdpbmV0LT5tY19pbmRleCA9IDA7Ci0JbmV3aW5ldC0+bWNfbGlzdCA9IE5VTEw7CiAKIAlza19yZWZjbnRfZGVidWdfaW5jKG5ld3NrKTsKIApAQCAtMTQxMyw0ICsxMzg4LDYgQEAKIE1PRFVMRV9BTElBUygibmV0LXBmLSIgX19zdHJpbmdpZnkoUEZfSU5FVDYpICItcHJvdG8tMTMyIik7CiBNT0RVTEVfQVVUSE9SKCJMaW51eCBLZXJuZWwgU0NUUCBkZXZlbG9wZXJzIDxsa3NjdHAtZGV2ZWxvcGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIHRoZSBTQ1RQIHByb3RvY29sIChSRkMyOTYwKSIpOworbW9kdWxlX3BhcmFtX25hbWVkKG5vX2NoZWNrc3Vtcywgc2N0cF9jaGVja3N1bV9kaXNhYmxlLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0Mobm9fY2hlY2tzdW1zLCAiRGlzYWJsZSBjaGVja3N1bXMgY29tcHV0aW5nIGFuZCB2ZXJpZmljYXRpb24iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwppbmRleCBmZDhhY2I0Li42ODUxZWU5IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKKysrIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCkBAIC0xMDAsMTEgKzEwMCwxMSBAQAogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNjdHBfcGFyYW1oZHIgZWNhcF9wYXJhbSA9IHsKIAlTQ1RQX1BBUkFNX0VDTl9DQVBBQkxFLAotCV9fY29uc3RhbnRfaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSksCisJY3B1X3RvX2JlMTYoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSksCiB9Owogc3RhdGljIGNvbnN0IHN0cnVjdCBzY3RwX3BhcmFtaGRyIHByc2N0cF9wYXJhbSA9IHsKIAlTQ1RQX1BBUkFNX0ZXRF9UU05fU1VQUE9SVCwKLQlfX2NvbnN0YW50X2h0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpLAorCWNwdV90b19iZTE2KHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpLAogfTsKIAogLyogQSBoZWxwZXIgdG8gaW5pdGlhbGl6ZSB0byBpbml0aWFsaXplIGFuIG9wIGVycm9yIGluc2lkZSBhCkBAIC0yMjQsNyArMjI0LDkgQEAKIAkJbnVtX2V4dCArPSAyOwogCX0KIAotCWNodW5rc2l6ZSArPSBzaXplb2YoYWlwYXJhbSk7CisJaWYgKHNwLT5hZGFwdGF0aW9uX2luZCkKKwkJY2h1bmtzaXplICs9IHNpemVvZihhaXBhcmFtKTsKKwogCWNodW5rc2l6ZSArPSB2cGFyYW1fbGVuOwogCiAJLyogQWNjb3VudCBmb3IgQVVUSCByZWxhdGVkIHBhcmFtZXRlcnMgKi8KQEAgLTMwNCwxMCArMzA2LDEyIEBACiAJaWYgKHNjdHBfcHJzY3RwX2VuYWJsZSkKIAkJc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihwcnNjdHBfcGFyYW0pLCAmcHJzY3RwX3BhcmFtKTsKIAotCWFpcGFyYW0ucGFyYW1faGRyLnR5cGUgPSBTQ1RQX1BBUkFNX0FEQVBUQVRJT05fTEFZRVJfSU5EOwotCWFpcGFyYW0ucGFyYW1faGRyLmxlbmd0aCA9IGh0b25zKHNpemVvZihhaXBhcmFtKSk7Ci0JYWlwYXJhbS5hZGFwdGF0aW9uX2luZCA9IGh0b25sKHNwLT5hZGFwdGF0aW9uX2luZCk7Ci0Jc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihhaXBhcmFtKSwgJmFpcGFyYW0pOworCWlmIChzcC0+YWRhcHRhdGlvbl9pbmQpIHsKKwkJYWlwYXJhbS5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ7CisJCWFpcGFyYW0ucGFyYW1faGRyLmxlbmd0aCA9IGh0b25zKHNpemVvZihhaXBhcmFtKSk7CisJCWFpcGFyYW0uYWRhcHRhdGlvbl9pbmQgPSBodG9ubChzcC0+YWRhcHRhdGlvbl9pbmQpOworCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKGFpcGFyYW0pLCAmYWlwYXJhbSk7CisJfQogCiAJLyogQWRkIFNDVFAtQVVUSCBjaHVua3MgdG8gdGhlIHBhcmFtZXRlciBsaXN0ICovCiAJaWYgKHNjdHBfYXV0aF9lbmFibGUpIHsKQEAgLTMzMiw2ICszMzYsNyBAQAogCXNjdHBfaW5pdGhkcl90IGluaXRhY2s7CiAJc3RydWN0IHNjdHBfY2h1bmsgKnJldHZhbDsKIAl1bmlvbiBzY3RwX3BhcmFtcyBhZGRyczsKKwlzdHJ1Y3Qgc2N0cF9zb2NrICpzcDsKIAlpbnQgYWRkcnNfbGVuOwogCXNjdHBfY29va2llX3BhcmFtX3QgKmNvb2tpZTsKIAlpbnQgY29va2llX2xlbjsKQEAgLTM2NiwyMiArMzcxLDI0IEBACiAJLyogQ2FsY3VsYXRlIHRoZSB0b3RhbCBzaXplIG9mIGFsbG9jYXRpb24sIGluY2x1ZGUgdGhlIHJlc2VydmVkCiAJICogc3BhY2UgZm9yIHJlcG9ydGluZyB1bmtub3duIHBhcmFtZXRlcnMgaWYgaXQgaXMgc3BlY2lmaWVkLgogCSAqLworCXNwID0gc2N0cF9zayhhc29jLT5iYXNlLnNrKTsKIAljaHVua3NpemUgPSBzaXplb2YoaW5pdGFjaykgKyBhZGRyc19sZW4gKyBjb29raWVfbGVuICsgdW5rcGFyYW1fbGVuOwogCiAJLyogVGVsbCBwZWVyIHRoYXQgd2UnbGwgZG8gRUNOIG9ubHkgaWYgcGVlciBhZHZlcnRpc2VkIHN1Y2ggY2FwLiAgKi8KIAlpZiAoYXNvYy0+cGVlci5lY25fY2FwYWJsZSkKIAkJY2h1bmtzaXplICs9IHNpemVvZihlY2FwX3BhcmFtKTsKIAotCWlmIChzY3RwX3Byc2N0cF9lbmFibGUpCisJaWYgKGFzb2MtPnBlZXIucHJzY3RwX2NhcGFibGUpCiAJCWNodW5rc2l6ZSArPSBzaXplb2YocHJzY3RwX3BhcmFtKTsKIAotCWlmIChzY3RwX2FkZGlwX2VuYWJsZSkgeworCWlmIChhc29jLT5wZWVyLmFzY29uZl9jYXBhYmxlKSB7CiAJCWV4dGVuc2lvbnNbbnVtX2V4dF0gPSBTQ1RQX0NJRF9BU0NPTkY7CiAJCWV4dGVuc2lvbnNbbnVtX2V4dCsxXSA9IFNDVFBfQ0lEX0FTQ09ORl9BQ0s7CiAJCW51bV9leHQgKz0gMjsKIAl9CiAKLQljaHVua3NpemUgKz0gc2l6ZW9mKGFpcGFyYW0pOworCWlmIChzcC0+YWRhcHRhdGlvbl9pbmQpCisJCWNodW5rc2l6ZSArPSBzaXplb2YoYWlwYXJhbSk7CiAKIAlpZiAoYXNvYy0+cGVlci5hdXRoX2NhcGFibGUpIHsKIAkJYXV0aF9yYW5kb20gPSAoc2N0cF9wYXJhbWhkcl90ICopYXNvYy0+Yy5hdXRoX3JhbmRvbTsKQEAgLTQzMiwxMCArNDM5LDEyIEBACiAJaWYgKGFzb2MtPnBlZXIucHJzY3RwX2NhcGFibGUpCiAJCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBzaXplb2YocHJzY3RwX3BhcmFtKSwgJnByc2N0cF9wYXJhbSk7CiAKLQlhaXBhcmFtLnBhcmFtX2hkci50eXBlID0gU0NUUF9QQVJBTV9BREFQVEFUSU9OX0xBWUVSX0lORDsKLQlhaXBhcmFtLnBhcmFtX2hkci5sZW5ndGggPSBodG9ucyhzaXplb2YoYWlwYXJhbSkpOwotCWFpcGFyYW0uYWRhcHRhdGlvbl9pbmQgPSBodG9ubChzY3RwX3NrKGFzb2MtPmJhc2Uuc2spLT5hZGFwdGF0aW9uX2luZCk7Ci0Jc2N0cF9hZGR0b19jaHVuayhyZXR2YWwsIHNpemVvZihhaXBhcmFtKSwgJmFpcGFyYW0pOworCWlmIChzcC0+YWRhcHRhdGlvbl9pbmQpIHsKKwkJYWlwYXJhbS5wYXJhbV9oZHIudHlwZSA9IFNDVFBfUEFSQU1fQURBUFRBVElPTl9MQVlFUl9JTkQ7CisJCWFpcGFyYW0ucGFyYW1faGRyLmxlbmd0aCA9IGh0b25zKHNpemVvZihhaXBhcmFtKSk7CisJCWFpcGFyYW0uYWRhcHRhdGlvbl9pbmQgPSBodG9ubChzcC0+YWRhcHRhdGlvbl9pbmQpOworCQlzY3RwX2FkZHRvX2NodW5rKHJldHZhbCwgc2l6ZW9mKGFpcGFyYW0pLCAmYWlwYXJhbSk7CisJfQogCiAJaWYgKGFzb2MtPnBlZXIuYXV0aF9jYXBhYmxlKSB7CiAJCXNjdHBfYWRkdG9fY2h1bmsocmV0dmFsLCBudG9ocyhhdXRoX3JhbmRvbS0+bGVuZ3RoKSwKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwppbmRleCBiNTQ5NWFlLi5lMjAyMGViIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKKysrIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCkBAIC00MzQsNyArNDM0LDggQEAKICAqCiAgKi8KIHN0YXRpYyB2b2lkIHNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2Uoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkJCSBzdHJ1Y3Qgc2N0cF90cmFuc3BvcnQgKnRyYW5zcG9ydCkKKwkJCQkJIHN0cnVjdCBzY3RwX3RyYW5zcG9ydCAqdHJhbnNwb3J0LAorCQkJCQkgaW50IGlzX2hiKQogewogCS8qIFRoZSBjaGVjayBmb3IgYXNzb2NpYXRpb24ncyBvdmVyYWxsIGVycm9yIGNvdW50ZXIgZXhjZWVkaW5nIHRoZQogCSAqIHRocmVzaG9sZCBpcyBkb25lIGluIHRoZSBzdGF0ZSBmdW5jdGlvbi4KQEAgLTQ2MSw5ICs0NjIsMTUgQEAKIAkgKiBleHBpcmVzLCBzZXQgUlRPIDwtIFJUTyAqIDIgKCJiYWNrIG9mZiB0aGUgdGltZXIiKS4gIFRoZQogCSAqIG1heGltdW0gdmFsdWUgZGlzY3Vzc2VkIGluIHJ1bGUgQzcgYWJvdmUgKFJUTy5tYXgpIG1heSBiZQogCSAqIHVzZWQgdG8gcHJvdmlkZSBhbiB1cHBlciBib3VuZCB0byB0aGlzIGRvdWJsaW5nIG9wZXJhdGlvbi4KKwkgKgorCSAqIFNwZWNpYWwgQ2FzZTogIHRoZSBmaXJzdCBIQiBkb2Vzbid0IHRyaWdnZXIgZXhwb25lbnRpYWwgYmFja29mZi4KKwkgKiBUaGUgZmlyc3QgdW5hY2tub3dsZWdlZCBIQiB0cmlnZ2VycyBpdC4gIFdlIGRvIHRoaXMgd2l0aCBhIGZsYWcKKwkgKiB0aGF0IGluZGljYXRlcyB0aGF0IHdlIGhhdmUgYW4gb3V0c3RhbmRpbmcgSEIuCiAJICovCi0JdHJhbnNwb3J0LT5sYXN0X3J0byA9IHRyYW5zcG9ydC0+cnRvOwotCXRyYW5zcG9ydC0+cnRvID0gbWluKCh0cmFuc3BvcnQtPnJ0byAqIDIpLCB0cmFuc3BvcnQtPmFzb2MtPnJ0b19tYXgpOworCWlmICghaXNfaGIgfHwgdHJhbnNwb3J0LT5oYl9zZW50KSB7CisJCXRyYW5zcG9ydC0+bGFzdF9ydG8gPSB0cmFuc3BvcnQtPnJ0bzsKKwkJdHJhbnNwb3J0LT5ydG8gPSBtaW4oKHRyYW5zcG9ydC0+cnRvICogMiksIHRyYW5zcG9ydC0+YXNvYy0+cnRvX21heCk7CisJfQogfQogCiAvKiBXb3JrZXIgcm91dGluZSB0byBoYW5kbGUgSU5JVCBjb21tYW5kIGZhaWx1cmUuICAqLwpAQCAtNjIxLDYgKzYyOCwxMSBAQAogCXQtPmVycm9yX2NvdW50ID0gMDsKIAl0LT5hc29jLT5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKIAorCS8qIENsZWFyIHRoZSBoYl9zZW50IGZsYWcgdG8gc2lnbmFsIHRoYXQgd2UgaGFkIGEgZ29vZAorCSAqIGFja25vd2xlZGdlbWVudC4KKwkgKi8KKwl0LT5oYl9zZW50ID0gMDsKKwogCS8qIE1hcmsgdGhlIGRlc3RpbmF0aW9uIHRyYW5zcG9ydCBhZGRyZXNzIGFzIGFjdGl2ZSBpZiBpdCBpcyBub3Qgc28KIAkgKiBtYXJrZWQuCiAJICovCkBAIC02NDYsMTggKzY1OCw2IEBACiAJCXNjdHBfdHJhbnNwb3J0X2hvbGQodCk7CiB9CiAKLS8qIEhlbHBlciBmdW5jdGlvbiB0byBkbyBhIHRyYW5zcG9ydCByZXNldCBhdCB0aGUgZXhwaXJ5IG9mIHRoZSBoZWFyYmVhdAotICogdGltZXIuCi0gKi8KLXN0YXRpYyB2b2lkIHNjdHBfY21kX3RyYW5zcG9ydF9yZXNldChzY3RwX2NtZF9zZXFfdCAqY21kcywKLQkJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJCSAgICAgc3RydWN0IHNjdHBfdHJhbnNwb3J0ICp0KQotewotCXNjdHBfdHJhbnNwb3J0X2xvd2VyX2N3bmQodCwgU0NUUF9MT1dFUl9DV05EX0lOQUNUSVZFKTsKLQotCS8qIE1hcmsgb25lIHN0cmlrZSBhZ2FpbnN0IGEgdHJhbnNwb3J0LiAgKi8KLQlzY3RwX2RvXzhfMl90cmFuc3BvcnRfc3RyaWtlKGFzb2MsIHQpOwotfQogCiAvKiBIZWxwZXIgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgcHJvY2VzcyBTQUNLIGNvbW1hbmQuICAqLwogc3RhdGljIGludCBzY3RwX2NtZF9wcm9jZXNzX3NhY2soc2N0cF9jbWRfc2VxX3QgKmNtZHMsCkBAIC0xNDU4LDEyICsxNDU4LDE5IEBACiAKIAkJY2FzZSBTQ1RQX0NNRF9TVFJJS0U6CiAJCQkvKiBNYXJrIG9uZSBzdHJpa2UgYWdhaW5zdCBhIHRyYW5zcG9ydC4gICovCi0JCQlzY3RwX2RvXzhfMl90cmFuc3BvcnRfc3RyaWtlKGFzb2MsIGNtZC0+b2JqLnRyYW5zcG9ydCk7CisJCQlzY3RwX2RvXzhfMl90cmFuc3BvcnRfc3RyaWtlKGFzb2MsIGNtZC0+b2JqLnRyYW5zcG9ydCwKKwkJCQkJCSAgICAwKTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgU0NUUF9DTURfVFJBTlNQT1JUX1JFU0VUOgorCQljYXNlIFNDVFBfQ01EX1RSQU5TUE9SVF9JRExFOgogCQkJdCA9IGNtZC0+b2JqLnRyYW5zcG9ydDsKLQkJCXNjdHBfY21kX3RyYW5zcG9ydF9yZXNldChjb21tYW5kcywgYXNvYywgdCk7CisJCQlzY3RwX3RyYW5zcG9ydF9sb3dlcl9jd25kKHQsIFNDVFBfTE9XRVJfQ1dORF9JTkFDVElWRSk7CisJCQlicmVhazsKKworCQljYXNlIFNDVFBfQ01EX1RSQU5TUE9SVF9IQl9TRU5UOgorCQkJdCA9IGNtZC0+b2JqLnRyYW5zcG9ydDsKKwkJCXNjdHBfZG9fOF8yX3RyYW5zcG9ydF9zdHJpa2UoYXNvYywgdCwgMSk7CisJCQl0LT5oYl9zZW50ID0gMTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgU0NUUF9DTURfVFJBTlNQT1JUX09OOgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwppbmRleCBmODhkZmRlLi41NWE2MWFhIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYworKysgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwpAQCAtOTg4LDcgKzk4OCw5IEBACiAJCS8qIFNldCB0cmFuc3BvcnQgZXJyb3IgY291bnRlciBhbmQgYXNzb2NpYXRpb24gZXJyb3IgY291bnRlcgogCQkgKiB3aGVuIHNlbmRpbmcgaGVhcnRiZWF0LgogCQkgKi8KLQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9UUkFOU1BPUlRfUkVTRVQsCisJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVFJBTlNQT1JUX0lETEUsCisJCQkJU0NUUF9UUkFOU1BPUlQodHJhbnNwb3J0KSk7CisJCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfVFJBTlNQT1JUX0hCX1NFTlQsCiAJCQkJU0NUUF9UUkFOU1BPUlQodHJhbnNwb3J0KSk7CiAJfQogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfSEJfVElNRVJfVVBEQVRFLApAQCAtNDk1NSw3ICs0OTU3LDcgQEAKIAkgKiAgICB0byB0aGF0IGFkZHJlc3MgYW5kIG5vdCBhY2tub3dsZWRnZWQgd2l0aGluIG9uZSBSVE8uCiAJICoKIAkgKi8KLQlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RSQU5TUE9SVF9SRVNFVCwKKwlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1RSQU5TUE9SVF9IQl9TRU5ULAogCQkJU0NUUF9UUkFOU1BPUlQoYXJnKSk7CiAJcmV0dXJuIFNDVFBfRElTUE9TSVRJT05fQ09OU1VNRTsKIH0KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NvY2tldC5jIGIvbmV0L3NjdHAvc29ja2V0LmMKaW5kZXggZmYwYThmOC4uNWZiM2E4YyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc29ja2V0LmMKKysrIGIvbmV0L3NjdHAvc29ja2V0LmMKQEAgLTMwNjksOSArMzA2OSw2IEBACiAJaW50IHZhbDsKIAlpbnQgYXNzb2NfaWQgPSAwOwogCi0JaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChvcHRsZW4gPT0gc2l6ZW9mKGludCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAiU0NUUDogVXNlIG9mIGludCBpbiBtYXhfYnVyc3Qgc29ja2V0IG9wdGlvbiBkZXByZWNhdGVkXG4iKTsKQEAgLTM5MzksNyArMzkzNiw2IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrID0gYXNvYy0+YmFzZS5zazsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCXN0cnVjdCBpbmV0X3NvY2sgKmluZXRzazsKIAlzdHJ1Y3Qgc2N0cF9hZiAqYWY7CiAJaW50IGVyciA9IDA7CiAKQEAgLTM5NTQsMTggKzM5NTAsMTggQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIFBvcHVsYXRlIHRoZSBmaWVsZHMgb2YgdGhlIG5ld3NrIGZyb20gdGhlIG9sZHNrIGFuZCBtaWdyYXRlIHRoZQotCSAqIGFzb2MgdG8gdGhlIG5ld3NrLgotCSAqLwotCXNjdHBfc29ja19taWdyYXRlKHNrLCBzb2NrLT5zaywgYXNvYywgU0NUUF9TT0NLRVRfVURQX0hJR0hfQkFORFdJRFRIKTsKKwlzY3RwX2NvcHlfc29jayhzb2NrLT5zaywgc2ssIGFzb2MpOwogCiAJLyogTWFrZSBwZWVsZWQtb2ZmIHNvY2tldHMgbW9yZSBsaWtlIDEtMSBhY2NlcHRlZCBzb2NrZXRzLgogCSAqIFNldCB0aGUgZGFkZHIgYW5kIGluaXRpYWxpemUgaWQgdG8gc29tZXRoaW5nIG1vcmUgcmFuZG9tCiAJICovCiAJYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhhc29jLT5wZWVyLnByaW1hcnlfYWRkci5zYS5zYV9mYW1pbHkpOwogCWFmLT50b19za19kYWRkcigmYXNvYy0+cGVlci5wcmltYXJ5X2FkZHIsIHNrKTsKLQlpbmV0c2sgPSBpbmV0X3NrKHNvY2stPnNrKTsKLQlpbmV0c2stPmlkID0gYXNvYy0+bmV4dF90c24gXiBqaWZmaWVzOworCisJLyogUG9wdWxhdGUgdGhlIGZpZWxkcyBvZiB0aGUgbmV3c2sgZnJvbSB0aGUgb2xkc2sgYW5kIG1pZ3JhdGUgdGhlCisJICogYXNvYyB0byB0aGUgbmV3c2suCisJICovCisJc2N0cF9zb2NrX21pZ3JhdGUoc2ssIHNvY2stPnNrLCBhc29jLCBTQ1RQX1NPQ0tFVF9VRFBfSElHSF9CQU5EV0lEVEgpOwogCiAJKnNvY2twID0gc29jazsKIApAQCAtNTI4NCwxNiArNTI4MCwxNCBAQAogCXN0cnVjdCBzY3RwX3NvY2sgKnNwOwogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwogCi0JaWYgKGxlbiA8IHNpemVvZihpbnQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChsZW4gPT0gc2l6ZW9mKGludCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAiU0NUUDogVXNlIG9mIGludCBpbiBtYXhfYnVyc3Qgc29ja2V0IG9wdGlvbiBkZXByZWNhdGVkXG4iKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAiU0NUUDogVXNlIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGluc3RlYWRcbiIpOwogCQlwYXJhbXMuYXNzb2NfaWQgPSAwOwotCX0gZWxzZSBpZiAobGVuID09IHNpemVvZiAoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSB7CisJfSBlbHNlIGlmIChsZW4gPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkgeworCQlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJnBhcmFtcywgb3B0dmFsLCBsZW4pKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfSBlbHNlCkBAIC01ODQ5LDEyNyArNTg0MywxMyBAQAogfQogCiAvKgotICogMy4xLjMgbGlzdGVuKCkgLSBVRFAgU3R5bGUgU3ludGF4Ci0gKgotICogICBCeSBkZWZhdWx0LCBuZXcgYXNzb2NpYXRpb25zIGFyZSBub3QgYWNjZXB0ZWQgZm9yIFVEUCBzdHlsZSBzb2NrZXRzLgotICogICBBbiBhcHBsaWNhdGlvbiB1c2VzIGxpc3RlbigpIHRvIG1hcmsgYSBzb2NrZXQgYXMgYmVpbmcgYWJsZSB0bwotICogICBhY2NlcHQgbmV3IGFzc29jaWF0aW9ucy4KLSAqLwotU0NUUF9TVEFUSUMgaW50IHNjdHBfc2VxcGFja2V0X2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKQotewotCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhzayk7Ci0Jc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc3AtPmVwOwotCi0JLyogT25seSBVRFAgc3R5bGUgc29ja2V0cyB0aGF0IGFyZSBub3QgcGVlbGVkIG9mZiBhcmUgYWxsb3dlZCB0bwotCSAqIGxpc3RlbigpLgotCSAqLwotCWlmICghc2N0cF9zdHlsZShzaywgVURQKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBJZiBiYWNrbG9nIGlzIHplcm8sIGRpc2FibGUgbGlzdGVuaW5nLiAqLwotCWlmICghYmFja2xvZykgewotCQlpZiAoc2N0cF9zc3RhdGUoc2ssIENMT1NFRCkpCi0JCQlyZXR1cm4gMDsKLQotCQlzY3RwX3VuaGFzaF9lbmRwb2ludChlcCk7Ci0JCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBSZXR1cm4gaWYgd2UgYXJlIGFscmVhZHkgbGlzdGVuaW5nLiAqLwotCWlmIChzY3RwX3NzdGF0ZShzaywgTElTVEVOSU5HKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIElmIGEgYmluZCgpIG9yIHNjdHBfYmluZHgoKSBpcyBub3QgY2FsbGVkIHByaW9yIHRvIGEgbGlzdGVuKCkKLQkgKiBjYWxsIHRoYXQgYWxsb3dzIG5ldyBhc3NvY2lhdGlvbnMgdG8gYmUgYWNjZXB0ZWQsIHRoZSBzeXN0ZW0KLQkgKiBwaWNrcyBhbiBlcGhlbWVyYWwgcG9ydCBhbmQgd2lsbCBjaG9vc2UgYW4gYWRkcmVzcyBzZXQgZXF1aXZhbGVudAotCSAqIHRvIGJpbmRpbmcgd2l0aCBhIHdpbGRjYXJkIGFkZHJlc3MuCi0JICoKLQkgKiBUaGlzIGlzIG5vdCBjdXJyZW50bHkgc3BlbGxlZCBvdXQgaW4gdGhlIFNDVFAgc29ja2V0cwotCSAqIGV4dGVuc2lvbnMgZHJhZnQsIGJ1dCBmb2xsb3dzIHRoZSBwcmFjdGljZSBhcyBzZWVuIGluIFRDUAotCSAqIHNvY2tldHMuCi0JICoKLQkgKiBBZGRpdGlvbmFsbHksIHR1cm4gb2ZmIGZhc3RyZXVzZSBmbGFnIHNpbmNlIHdlIGFyZSBub3QgbGlzdGVuaW5nCi0JICovCi0Jc2stPnNrX3N0YXRlID0gU0NUUF9TU19MSVNURU5JTkc7Ci0JaWYgKCFlcC0+YmFzZS5iaW5kX2FkZHIucG9ydCkgewotCQlpZiAoc2N0cF9hdXRvYmluZChzaykpCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQl9IGVsc2UgewotCQlpZiAoc2N0cF9nZXRfcG9ydChzaywgaW5ldF9zayhzayktPm51bSkpIHsKLQkJCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfQ0xPU0VEOwotCQkJcmV0dXJuIC1FQUREUklOVVNFOwotCQl9Ci0JCXNjdHBfc2soc2spLT5iaW5kX2hhc2gtPmZhc3RyZXVzZSA9IDA7Ci0JfQotCi0Jc2N0cF9oYXNoX2VuZHBvaW50KGVwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIDQuMS4zIGxpc3RlbigpIC0gVENQIFN0eWxlIFN5bnRheAotICoKLSAqICAgQXBwbGljYXRpb25zIHVzZXMgbGlzdGVuKCkgdG8gcmVhZHkgdGhlIFNDVFAgZW5kcG9pbnQgZm9yIGFjY2VwdGluZwotICogICBpbmJvdW5kIGFzc29jaWF0aW9ucy4KLSAqLwotU0NUUF9TVEFUSUMgaW50IHNjdHBfc3RyZWFtX2xpc3RlbihzdHJ1Y3Qgc29jayAqc2ssIGludCBiYWNrbG9nKQotewotCXN0cnVjdCBzY3RwX3NvY2sgKnNwID0gc2N0cF9zayhzayk7Ci0Jc3RydWN0IHNjdHBfZW5kcG9pbnQgKmVwID0gc3AtPmVwOwotCi0JLyogSWYgYmFja2xvZyBpcyB6ZXJvLCBkaXNhYmxlIGxpc3RlbmluZy4gKi8KLQlpZiAoIWJhY2tsb2cpIHsKLQkJaWYgKHNjdHBfc3N0YXRlKHNrLCBDTE9TRUQpKQotCQkJcmV0dXJuIDA7Ci0KLQkJc2N0cF91bmhhc2hfZW5kcG9pbnQoZXApOwotCQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0NMT1NFRDsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JaWYgKHNjdHBfc3N0YXRlKHNrLCBMSVNURU5JTkcpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogSWYgYSBiaW5kKCkgb3Igc2N0cF9iaW5keCgpIGlzIG5vdCBjYWxsZWQgcHJpb3IgdG8gYSBsaXN0ZW4oKQotCSAqIGNhbGwgdGhhdCBhbGxvd3MgbmV3IGFzc29jaWF0aW9ucyB0byBiZSBhY2NlcHRlZCwgdGhlIHN5c3RlbQotCSAqIHBpY2tzIGFuIGVwaGVtZXJhbCBwb3J0IGFuZCB3aWxsIGNob29zZSBhbiBhZGRyZXNzIHNldCBlcXVpdmFsZW50Ci0JICogdG8gYmluZGluZyB3aXRoIGEgd2lsZGNhcmQgYWRkcmVzcy4KLQkgKgotCSAqIFRoaXMgaXMgbm90IGN1cnJlbnRseSBzcGVsbGVkIG91dCBpbiB0aGUgU0NUUCBzb2NrZXRzCi0JICogZXh0ZW5zaW9ucyBkcmFmdCwgYnV0IGZvbGxvd3MgdGhlIHByYWN0aWNlIGFzIHNlZW4gaW4gVENQCi0JICogc29ja2V0cy4KLQkgKi8KLQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0xJU1RFTklORzsKLQlpZiAoIWVwLT5iYXNlLmJpbmRfYWRkci5wb3J0KSB7Ci0JCWlmIChzY3RwX2F1dG9iaW5kKHNrKSkKLQkJCXJldHVybiAtRUFHQUlOOwotCX0gZWxzZQotCQlzY3RwX3NrKHNrKS0+YmluZF9oYXNoLT5mYXN0cmV1c2UgPSAwOwotCi0Jc2stPnNrX21heF9hY2tfYmFja2xvZyA9IGJhY2tsb2c7Ci0Jc2N0cF9oYXNoX2VuZHBvaW50KGVwKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqICBNb3ZlIGEgc29ja2V0IHRvIExJU1RFTklORyBzdGF0ZS4KICAqLwotaW50IHNjdHBfaW5ldF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpCitTQ1RQX1NUQVRJQyBpbnQgc2N0cF9saXN0ZW5fc3RhcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgYmFja2xvZykKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3Qgc2N0cF9zb2NrICpzcCA9IHNjdHBfc2soc2spOworCXN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCA9IHNwLT5lcDsKIAlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbSA9IE5VTEw7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0KLQlpZiAodW5saWtlbHkoYmFja2xvZyA8IDApKQotCQlnb3RvIG91dDsKLQotCXNjdHBfbG9ja19zb2NrKHNrKTsKLQotCWlmIChzb2NrLT5zdGF0ZSAhPSBTU19VTkNPTk5FQ1RFRCkKLQkJZ290byBvdXQ7CiAKIAkvKiBBbGxvY2F0ZSBITUFDIGZvciBnZW5lcmF0aW5nIGNvb2tpZS4gKi8KIAlpZiAoIXNjdHBfc2soc2spLT5obWFjICYmIHNjdHBfaG1hY19hbGcpIHsKQEAgLTU5ODAsMzQgKzU4NjAsOTYgQEAKIAkJCQkgICAgICAgIlNDVFA6IGZhaWxlZCB0byBsb2FkIHRyYW5zZm9ybSBmb3IgJXM6ICVsZFxuIiwKIAkJCQkJc2N0cF9obWFjX2FsZywgUFRSX0VSUih0Zm0pKTsKIAkJCX0KLQkJCWVyciA9IC1FTk9TWVM7Ci0JCQlnb3RvIG91dDsKKwkJCXJldHVybiAtRU5PU1lTOworCQl9CisJCXNjdHBfc2soc2spLT5obWFjID0gdGZtOworCX0KKworCS8qCisJICogSWYgYSBiaW5kKCkgb3Igc2N0cF9iaW5keCgpIGlzIG5vdCBjYWxsZWQgcHJpb3IgdG8gYSBsaXN0ZW4oKQorCSAqIGNhbGwgdGhhdCBhbGxvd3MgbmV3IGFzc29jaWF0aW9ucyB0byBiZSBhY2NlcHRlZCwgdGhlIHN5c3RlbQorCSAqIHBpY2tzIGFuIGVwaGVtZXJhbCBwb3J0IGFuZCB3aWxsIGNob29zZSBhbiBhZGRyZXNzIHNldCBlcXVpdmFsZW50CisJICogdG8gYmluZGluZyB3aXRoIGEgd2lsZGNhcmQgYWRkcmVzcy4KKwkgKgorCSAqIFRoaXMgaXMgbm90IGN1cnJlbnRseSBzcGVsbGVkIG91dCBpbiB0aGUgU0NUUCBzb2NrZXRzCisJICogZXh0ZW5zaW9ucyBkcmFmdCwgYnV0IGZvbGxvd3MgdGhlIHByYWN0aWNlIGFzIHNlZW4gaW4gVENQCisJICogc29ja2V0cy4KKwkgKgorCSAqLworCXNrLT5za19zdGF0ZSA9IFNDVFBfU1NfTElTVEVOSU5HOworCWlmICghZXAtPmJhc2UuYmluZF9hZGRyLnBvcnQpIHsKKwkJaWYgKHNjdHBfYXV0b2JpbmQoc2spKQorCQkJcmV0dXJuIC1FQUdBSU47CisJfSBlbHNlIHsKKwkJaWYgKHNjdHBfZ2V0X3BvcnQoc2ssIGluZXRfc2soc2spLT5udW0pKSB7CisJCQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0NMT1NFRDsKKwkJCXJldHVybiAtRUFERFJJTlVTRTsKIAkJfQogCX0KIAotCXN3aXRjaCAoc29jay0+dHlwZSkgewotCWNhc2UgU09DS19TRVFQQUNLRVQ6Ci0JCWVyciA9IHNjdHBfc2VxcGFja2V0X2xpc3RlbihzaywgYmFja2xvZyk7Ci0JCWJyZWFrOwotCWNhc2UgU09DS19TVFJFQU06Ci0JCWVyciA9IHNjdHBfc3RyZWFtX2xpc3RlbihzaywgYmFja2xvZyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOworCXNrLT5za19tYXhfYWNrX2JhY2tsb2cgPSBiYWNrbG9nOworCXNjdHBfaGFzaF9lbmRwb2ludChlcCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiA0LjEuMyAvIDUuMS4zIGxpc3RlbigpCisgKgorICogICBCeSBkZWZhdWx0LCBuZXcgYXNzb2NpYXRpb25zIGFyZSBub3QgYWNjZXB0ZWQgZm9yIFVEUCBzdHlsZSBzb2NrZXRzLgorICogICBBbiBhcHBsaWNhdGlvbiB1c2VzIGxpc3RlbigpIHRvIG1hcmsgYSBzb2NrZXQgYXMgYmVpbmcgYWJsZSB0bworICogICBhY2NlcHQgbmV3IGFzc29jaWF0aW9ucy4KKyAqCisgKiAgIE9uIFRDUCBzdHlsZSBzb2NrZXRzLCBhcHBsaWNhdGlvbnMgdXNlIGxpc3RlbigpIHRvIHJlYWR5IHRoZSBTQ1RQCisgKiAgIGVuZHBvaW50IGZvciBhY2NlcHRpbmcgaW5ib3VuZCBhc3NvY2lhdGlvbnMuCisgKgorICogICBPbiBib3RoIHR5cGVzIG9mIGVuZHBvaW50cyBhIGJhY2tsb2cgb2YgJzAnIGRpc2FibGVzIGxpc3RlbmluZy4KKyAqCisgKiAgTW92ZSBhIHNvY2tldCB0byBMSVNURU5JTkcgc3RhdGUuCisgKi8KK2ludCBzY3RwX2luZXRfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBiYWNrbG9nKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBzY3RwX2VuZHBvaW50ICplcCA9IHNjdHBfc2soc2spLT5lcDsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWlmICh1bmxpa2VseShiYWNrbG9nIDwgMCkpCisJCXJldHVybiBlcnI7CisKKwlzY3RwX2xvY2tfc29jayhzayk7CisKKwkvKiBQZWVsZWQtb2ZmIHNvY2tldHMgYXJlIG5vdCBhbGxvd2VkIHRvIGxpc3RlbigpLiAgKi8KKwlpZiAoc2N0cF9zdHlsZShzaywgVURQX0hJR0hfQkFORFdJRFRIKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoc29jay0+c3RhdGUgIT0gU1NfVU5DT05ORUNURUQpCisJCWdvdG8gb3V0OworCisJLyogSWYgYmFja2xvZyBpcyB6ZXJvLCBkaXNhYmxlIGxpc3RlbmluZy4gKi8KKwlpZiAoIWJhY2tsb2cpIHsKKwkJaWYgKHNjdHBfc3N0YXRlKHNrLCBDTE9TRUQpKQorCQkJZ290byBvdXQ7CisKKwkJZXJyID0gMDsKKwkJc2N0cF91bmhhc2hfZW5kcG9pbnQoZXApOworCQlzay0+c2tfc3RhdGUgPSBTQ1RQX1NTX0NMT1NFRDsKKwkJaWYgKHNrLT5za19yZXVzZSkKKwkJCXNjdHBfc2soc2spLT5iaW5kX2hhc2gtPmZhc3RyZXVzZSA9IDE7CisJCWdvdG8gb3V0OwogCX0KIAotCWlmIChlcnIpCi0JCWdvdG8gY2xlYW51cDsKKwkvKiBJZiB3ZSBhcmUgYWxyZWFkeSBsaXN0ZW5pbmcsIGp1c3QgdXBkYXRlIHRoZSBiYWNrbG9nICovCisJaWYgKHNjdHBfc3N0YXRlKHNrLCBMSVNURU5JTkcpKQorCQlzay0+c2tfbWF4X2Fja19iYWNrbG9nID0gYmFja2xvZzsKKwllbHNlIHsKKwkJZXJyID0gc2N0cF9saXN0ZW5fc3RhcnQoc2ssIGJhY2tsb2cpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJfQogCi0JLyogU3RvcmUgYXdheSB0aGUgdHJhbnNmb3JtIHJlZmVyZW5jZS4gKi8KLQlpZiAoIXNjdHBfc2soc2spLT5obWFjKQotCQlzY3RwX3NrKHNrKS0+aG1hYyA9IHRmbTsKKwllcnIgPSAwOwogb3V0OgogCXNjdHBfcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gZXJyOwotY2xlYW51cDoKLQljcnlwdG9fZnJlZV9oYXNoKHRmbSk7Ci0JZ290byBvdXQ7CiB9CiAKIC8qCkBAIC02NzAwLDYgKzY2NDIsNDggQEAKIAlzY3RwX3NrYl9zZXRfb3duZXJfcihza2IsIHNrKTsKIH0KIAordm9pZCBzY3RwX2NvcHlfc29jayhzdHJ1Y3Qgc29jayAqbmV3c2ssIHN0cnVjdCBzb2NrICpzaywKKwkJICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKKwlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0ID0gaW5ldF9zayhuZXdzayk7CisKKwluZXdzay0+c2tfdHlwZSA9IHNrLT5za190eXBlOworCW5ld3NrLT5za19ib3VuZF9kZXZfaWYgPSBzay0+c2tfYm91bmRfZGV2X2lmOworCW5ld3NrLT5za19mbGFncyA9IHNrLT5za19mbGFnczsKKwluZXdzay0+c2tfbm9fY2hlY2sgPSBzay0+c2tfbm9fY2hlY2s7CisJbmV3c2stPnNrX3JldXNlID0gc2stPnNrX3JldXNlOworCisJbmV3c2stPnNrX3NodXRkb3duID0gc2stPnNrX3NodXRkb3duOworCW5ld3NrLT5za19kZXN0cnVjdCA9IGluZXRfc29ja19kZXN0cnVjdDsKKwluZXdzay0+c2tfZmFtaWx5ID0gc2stPnNrX2ZhbWlseTsKKwluZXdzay0+c2tfcHJvdG9jb2wgPSBJUFBST1RPX1NDVFA7CisJbmV3c2stPnNrX2JhY2tsb2dfcmN2ID0gc2stPnNrX3Byb3QtPmJhY2tsb2dfcmN2OworCW5ld3NrLT5za19zbmRidWYgPSBzay0+c2tfc25kYnVmOworCW5ld3NrLT5za19yY3ZidWYgPSBzay0+c2tfcmN2YnVmOworCW5ld3NrLT5za19saW5nZXJ0aW1lID0gc2stPnNrX2xpbmdlcnRpbWU7CisJbmV3c2stPnNrX3JjdnRpbWVvID0gc2stPnNrX3JjdnRpbWVvOworCW5ld3NrLT5za19zbmR0aW1lbyA9IHNrLT5za19zbmR0aW1lbzsKKworCW5ld2luZXQgPSBpbmV0X3NrKG5ld3NrKTsKKworCS8qIEluaXRpYWxpemUgc2sncyBzcG9ydCwgZHBvcnQsIHJjdl9zYWRkciBhbmQgZGFkZHIgZm9yCisJICogZ2V0c29ja25hbWUoKSBhbmQgZ2V0cGVlcm5hbWUoKQorCSAqLworCW5ld2luZXQtPnNwb3J0ID0gaW5ldC0+c3BvcnQ7CisJbmV3aW5ldC0+c2FkZHIgPSBpbmV0LT5zYWRkcjsKKwluZXdpbmV0LT5yY3Zfc2FkZHIgPSBpbmV0LT5yY3Zfc2FkZHI7CisJbmV3aW5ldC0+ZHBvcnQgPSBodG9ucyhhc29jLT5wZWVyLnBvcnQpOworCW5ld2luZXQtPnBtdHVkaXNjID0gaW5ldC0+cG10dWRpc2M7CisJbmV3aW5ldC0+aWQgPSBhc29jLT5uZXh0X3RzbiBeIGppZmZpZXM7CisKKwluZXdpbmV0LT51Y190dGwgPSBpbmV0LT51Y190dGw7CisJbmV3aW5ldC0+bWNfbG9vcCA9IDE7CisJbmV3aW5ldC0+bWNfdHRsID0gMTsKKwluZXdpbmV0LT5tY19pbmRleCA9IDA7CisJbmV3aW5ldC0+bWNfbGlzdCA9IE5VTEw7Cit9CisKIC8qIFBvcHVsYXRlIHRoZSBmaWVsZHMgb2YgdGhlIG5ld3NrIGZyb20gdGhlIG9sZHNrIGFuZCBtaWdyYXRlIHRoZSBhc3NvYwogICogYW5kIGl0cyBtZXNzYWdlcyB0byB0aGUgbmV3c2suCiAgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3RyYW5zcG9ydC5jIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKaW5kZXggZTc0NWMxMS4uZTVkZGU0NSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3NjdHAvdHJhbnNwb3J0LmMKQEAgLTc5LDYgKzc5LDcgQEAKIAlwZWVyLT5ydHR2YXIgPSAwOwogCXBlZXItPnNydHQgPSAwOwogCXBlZXItPnJ0b19wZW5kaW5nID0gMDsKKwlwZWVyLT5oYl9zZW50ID0gMDsKIAlwZWVyLT5mYXN0X3JlY292ZXJ5ID0gMDsKIAogCXBlZXItPmxhc3RfdGltZV9oZWFyZCA9IGppZmZpZXM7CkBAIC01NDIsOCArNTQzLDggQEAKIAkJICogY29uZ2VzdGlvbiBpbmRpY2F0aW9ucyBtb3JlIHRoYW4gb25jZSBldmVyeSB3aW5kb3cgb2YKIAkJICogZGF0YSAob3IgbW9yZSBsb29zZWx5IG1vcmUgdGhhbiBvbmNlIGV2ZXJ5IHJvdW5kLXRyaXAgdGltZSkuCiAJCSAqLwotCQlpZiAoKGppZmZpZXMgLSB0cmFuc3BvcnQtPmxhc3RfdGltZV9lY25lX3JlZHVjZWQpID4KLQkJICAgIHRyYW5zcG9ydC0+cnR0KSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRyYW5zcG9ydC0+bGFzdF90aW1lX2VjbmVfcmVkdWNlZCArCisJCQkJCXRyYW5zcG9ydC0+cnR0KSkgewogCQkJdHJhbnNwb3J0LT5zc3RocmVzaCA9IG1heCh0cmFuc3BvcnQtPmN3bmQvMiwKIAkJCQkJCSAgNCp0cmFuc3BvcnQtPmFzb2MtPnBhdGhtdHUpOwogCQkJdHJhbnNwb3J0LT5jd25kID0gdHJhbnNwb3J0LT5zc3RocmVzaDsKQEAgLTU2MCw3ICs1NjEsOCBAQAogCQkgKiB0byBiZSBkb25lIGV2ZXJ5IFJUTyBpbnRlcnZhbCwgd2UgZG8gaXQgZXZlcnkgaGVhcmJlYXQKIAkJICogaW50ZXJ2YWwuCiAJCSAqLwotCQlpZiAoKGppZmZpZXMgLSB0cmFuc3BvcnQtPmxhc3RfdGltZV91c2VkKSA+IHRyYW5zcG9ydC0+cnRvKQorCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0cmFuc3BvcnQtPmxhc3RfdGltZV91c2VkICsKKwkJCQkJdHJhbnNwb3J0LT5ydG8pKQogCQkJdHJhbnNwb3J0LT5jd25kID0gbWF4KHRyYW5zcG9ydC0+Y3duZC8yLAogCQkJCQkJIDQqdHJhbnNwb3J0LT5hc29jLT5wYXRobXR1KTsKIAkJYnJlYWs7CkBAIC02MDgsNiArNjEwLDcgQEAKIAl0LT5mbGlnaHRfc2l6ZSA9IDA7CiAJdC0+ZXJyb3JfY291bnQgPSAwOwogCXQtPnJ0b19wZW5kaW5nID0gMDsKKwl0LT5oYl9zZW50ID0gMDsKIAl0LT5mYXN0X3JlY292ZXJ5ID0gMDsKIAogCS8qIEluaXRpYWxpemUgdGhlIHN0YXRlIGluZm9ybWF0aW9uIGZvciBTRlItQ0FDQyAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDM1ZGQ3MzcuLjBiMTRiNzkgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYworKysgYi9uZXQvc29ja2V0LmMKQEAgLTMyOCw3ICszMjgsNyBAQAogCQkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9pbm8pOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHNvY2tmc19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgc29ja2ZzX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZSA9IHNvY2tmc19kZWxldGVfZGVudHJ5LAogCS5kX2RuYW1lICA9IHNvY2tmc19kbmFtZSwKIH07CkBAIC01NDUsNiArNTQ1LDE4IEBACiAJc29jay0+ZmlsZSA9IE5VTEw7CiB9CiAKK2ludCBzb2NrX3R4X3RpbWVzdGFtcChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaywKKwkJICAgICAgdW5pb24gc2tiX3NoYXJlZF90eCAqc2h0eCkKK3sKKwlzaHR4LT5mbGFncyA9IDA7CisJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUpKQorCQlzaHR4LT5oYXJkd2FyZSA9IDE7CisJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfVFhfU09GVFdBUkUpKQorCQlzaHR4LT5zb2Z0d2FyZSA9IDE7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHNvY2tfdHhfdGltZXN0YW1wKTsKKwogc3RhdGljIGlubGluZSBpbnQgX19zb2NrX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJCSBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogewpAQCAtNTk1LDMzICs2MDcsNjUgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50IGt0aW1lMnRzKGt0aW1lX3Qga3QsIHN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJaWYgKGt0LnR2NjQpIHsKKwkJKnRzID0ga3RpbWVfdG9fdGltZXNwZWMoa3QpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisKIC8qCiAgKiBjYWxsZWQgZnJvbSBzb2NrX3JlY3ZfdGltZXN0YW1wKCkgaWYgc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCkKICAqLwogdm9pZCBfX3NvY2tfcmVjdl90aW1lc3RhbXAoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc29jayAqc2ssCiAJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlrdGltZV90IGt0ID0gc2tiLT50c3RhbXA7CisJaW50IG5lZWRfc29mdHdhcmVfdHN0YW1wID0gc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUCk7CisJc3RydWN0IHRpbWVzcGVjIHRzWzNdOworCWludCBlbXB0eSA9IDE7CisJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpzaGh3dHN0YW1wcyA9CisJCXNrYl9od3RzdGFtcHMoc2tiKTsKIAotCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1JDVlRTVEFNUE5TKSkgewotCQlzdHJ1Y3QgdGltZXZhbCB0djsKLQkJLyogUmFjZSBvY2N1cnJlZCBiZXR3ZWVuIHRpbWVzdGFtcCBlbmFibGluZyBhbmQgcGFja2V0Ci0JCSAgIHJlY2VpdmluZy4gIEZpbGwgaW4gdGhlIGN1cnJlbnQgdGltZSBmb3Igbm93LiAqLwotCQlpZiAoa3QudHY2NCA9PSAwKQotCQkJa3QgPSBrdGltZV9nZXRfcmVhbCgpOwotCQlza2ItPnRzdGFtcCA9IGt0OwotCQl0diA9IGt0aW1lX3RvX3RpbWV2YWwoa3QpOwotCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9USU1FU1RBTVAsIHNpemVvZih0diksICZ0dik7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHRpbWVzcGVjIHRzOwotCQkvKiBSYWNlIG9jY3VycmVkIGJldHdlZW4gdGltZXN0YW1wIGVuYWJsaW5nIGFuZCBwYWNrZXQKLQkJICAgcmVjZWl2aW5nLiAgRmlsbCBpbiB0aGUgY3VycmVudCB0aW1lIGZvciBub3cuICovCi0JCWlmIChrdC50djY0ID09IDApCi0JCQlrdCA9IGt0aW1lX2dldF9yZWFsKCk7Ci0JCXNrYi0+dHN0YW1wID0ga3Q7Ci0JCXRzID0ga3RpbWVfdG9fdGltZXNwZWMoa3QpOwotCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9USU1FU1RBTVBOUywgc2l6ZW9mKHRzKSwgJnRzKTsKKwkvKiBSYWNlIG9jY3VycmVkIGJldHdlZW4gdGltZXN0YW1wIGVuYWJsaW5nIGFuZCBwYWNrZXQKKwkgICByZWNlaXZpbmcuICBGaWxsIGluIHRoZSBjdXJyZW50IHRpbWUgZm9yIG5vdy4gKi8KKwlpZiAobmVlZF9zb2Z0d2FyZV90c3RhbXAgJiYgc2tiLT50c3RhbXAudHY2NCA9PSAwKQorCQlfX25ldF90aW1lc3RhbXAoc2tiKTsKKworCWlmIChuZWVkX3NvZnR3YXJlX3RzdGFtcCkgeworCQlpZiAoIXNvY2tfZmxhZyhzaywgU09DS19SQ1ZUU1RBTVBOUykpIHsKKwkJCXN0cnVjdCB0aW1ldmFsIHR2OworCQkJc2tiX2dldF90aW1lc3RhbXAoc2tiLCAmdHYpOworCQkJcHV0X2Ntc2cobXNnLCBTT0xfU09DS0VULCBTQ01fVElNRVNUQU1QLAorCQkJCSBzaXplb2YodHYpLCAmdHYpOworCQl9IGVsc2UgeworCQkJc3RydWN0IHRpbWVzcGVjIHRzOworCQkJc2tiX2dldF90aW1lc3RhbXBucyhza2IsICZ0cyk7CisJCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9USU1FU1RBTVBOUywKKwkJCQkgc2l6ZW9mKHRzKSwgJnRzKTsKKwkJfQogCX0KKworCisJbWVtc2V0KHRzLCAwLCBzaXplb2YodHMpKTsKKwlpZiAoc2tiLT50c3RhbXAudHY2NCAmJgorCSAgICBzb2NrX2ZsYWcoc2ssIFNPQ0tfVElNRVNUQU1QSU5HX1NPRlRXQVJFKSkgeworCQlza2JfZ2V0X3RpbWVzdGFtcG5zKHNrYiwgdHMgKyAwKTsKKwkJZW1wdHkgPSAwOworCX0KKwlpZiAoc2hod3RzdGFtcHMpIHsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfU1lTX0hBUkRXQVJFKSAmJgorCQkgICAga3RpbWUydHMoc2hod3RzdGFtcHMtPnN5c3RzdGFtcCwgdHMgKyAxKSkKKwkJCWVtcHR5ID0gMDsKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFKSAmJgorCQkgICAga3RpbWUydHMoc2hod3RzdGFtcHMtPmh3dHN0YW1wLCB0cyArIDIpKQorCQkJZW1wdHkgPSAwOworCX0KKwlpZiAoIWVtcHR5KQorCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsCisJCQkgU0NNX1RJTUVTVEFNUElORywgc2l6ZW9mKHRzKSwgJnRzKTsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoX19zb2NrX3JlY3ZfdGltZXN0YW1wKTsKQEAgLTEwMzAsNiArMTA3NCwxMyBAQAogCiAJbG9ja19zb2NrKHNrKTsKIAorCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKKwlpZiAob24pCisJCWZpbHAtPmZfZmxhZ3MgfD0gRkFTWU5DOworCWVsc2UKKwkJZmlscC0+Zl9mbGFncyAmPSB+RkFTWU5DOworCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOworCiAJcHJldiA9ICYoc29jay0+ZmFzeW5jX2xpc3QpOwogCiAJZm9yIChmYSA9ICpwcmV2OyBmYSAhPSBOVUxMOyBwcmV2ID0gJmZhLT5mYV9uZXh0LCBmYSA9ICpwcmV2KQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCmluZGV4IDU3NzM4NWEuLjljZWQwNjIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYworKysgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIHJwY19kZW50cnlfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgcnBjX2RlbnRyeV9vcGVyYXRpb25zID0gewogCS5kX2RlbGV0ZSA9IHJwY19kZWxldGVfZGVudHJ5LAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDI5YzcxZTYuLjU2ODMzMGUgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTEyMjUsNiArMTIyNSwyMyBAQAogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIHhzX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBycGNfeHBydCAqeHBydDsKKworCWlmICh1bmxpa2VseSghKHNvY2sgPSBzay0+c2tfc29ja2V0KSkpCisJCXJldHVybjsKKwljbGVhcl9iaXQoU09DS19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KCEoeHBydCA9IHhwcnRfZnJvbV9zb2NrKHNrKSkpKQorCQlyZXR1cm47CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncykgPT0gMCkKKwkJcmV0dXJuOworCisJeHBydF93cml0ZV9zcGFjZSh4cHJ0KTsKK30KKwogLyoqCiAgKiB4c191ZHBfd3JpdGVfc3BhY2UgLSBjYWxsYmFjayBpbnZva2VkIHdoZW4gc29ja2V0IGJ1ZmZlciBzcGFjZQogICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY29tZXMgYXZhaWxhYmxlCkBAIC0xMjQwLDIzICsxMjU3LDkgQEAKIAlyZWFkX2xvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIAogCS8qIGZyb20gbmV0L2NvcmUvc29jay5jOnNvY2tfZGVmX3dyaXRlX3NwYWNlICovCi0JaWYgKHNvY2tfd3JpdGVhYmxlKHNrKSkgewotCQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCQlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQ7CisJaWYgKHNvY2tfd3JpdGVhYmxlKHNrKSkKKwkJeHNfd3JpdGVfc3BhY2Uoc2spOwogCi0JCWlmICh1bmxpa2VseSghKHNvY2sgPSBzay0+c2tfc29ja2V0KSkpCi0JCQlnb3RvIG91dDsKLQkJY2xlYXJfYml0KFNPQ0tfTk9TUEFDRSwgJnNvY2stPmZsYWdzKTsKLQotCQlpZiAodW5saWtlbHkoISh4cHJ0ID0geHBydF9mcm9tX3NvY2soc2spKSkpCi0JCQlnb3RvIG91dDsKLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncykgPT0gMCkKLQkJCWdvdG8gb3V0OwotCi0JCXhwcnRfd3JpdGVfc3BhY2UoeHBydCk7Ci0JfQotCi0gb3V0OgogCXJlYWRfdW5sb2NrKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CiB9CiAKQEAgLTEyNzUsMjMgKzEyNzgsOSBAQAogCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogCiAJLyogZnJvbSBuZXQvY29yZS9zdHJlYW0uYzpza19zdHJlYW1fd3JpdGVfc3BhY2UgKi8KLQlpZiAoc2tfc3RyZWFtX3dzcGFjZShzaykgPj0gc2tfc3RyZWFtX21pbl93c3BhY2Uoc2spKSB7Ci0JCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0JCXN0cnVjdCBycGNfeHBydCAqeHBydDsKKwlpZiAoc2tfc3RyZWFtX3dzcGFjZShzaykgPj0gc2tfc3RyZWFtX21pbl93c3BhY2Uoc2spKQorCQl4c193cml0ZV9zcGFjZShzayk7CiAKLQkJaWYgKHVubGlrZWx5KCEoc29jayA9IHNrLT5za19zb2NrZXQpKSkKLQkJCWdvdG8gb3V0OwotCQljbGVhcl9iaXQoU09DS19OT1NQQUNFLCAmc29jay0+ZmxhZ3MpOwotCi0JCWlmICh1bmxpa2VseSghKHhwcnQgPSB4cHJ0X2Zyb21fc29jayhzaykpKSkKLQkJCWdvdG8gb3V0OwotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNvY2stPmZsYWdzKSA9PSAwKQotCQkJZ290byBvdXQ7Ci0KLQkJeHBydF93cml0ZV9zcGFjZSh4cHJ0KTsKLQl9Ci0KLSBvdXQ6CiAJcmVhZF91bmxvY2soJnNrLT5za19jYWxsYmFja19sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3N5c2N0bF9uZXQuYyBiL25ldC9zeXNjdGxfbmV0LmMKaW5kZXggOTcyMjAxYy4uMGIxNWQ3MiAxMDA2NDQKLS0tIGEvbmV0L3N5c2N0bF9uZXQuYworKysgYi9uZXQvc3lzY3RsX25ldC5jCkBAIC02MSw3ICs2MSw3IEBACiBzdGF0aWMgaW50IG5ldF9jdGxfcm9faGVhZGVyX3Blcm1zKHN0cnVjdCBjdGxfdGFibGVfcm9vdCAqcm9vdCwKIAkJc3RydWN0IG5zcHJveHkgKm5hbWVzcGFjZXMsIHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQogewotCWlmIChuYW1lc3BhY2VzLT5uZXRfbnMgPT0gJmluaXRfbmV0KQorCWlmIChuZXRfZXEobmFtZXNwYWNlcy0+bmV0X25zLCAmaW5pdF9uZXQpKQogCQlyZXR1cm4gdGFibGUtPm1vZGU7CiAJZWxzZQogCQlyZXR1cm4gdGFibGUtPm1vZGUgJiB+MDIyMjsKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JjYXN0LmMgYi9uZXQvdGlwYy9iY2FzdC5jCmluZGV4IDNkZGFmZjQuLmEzYmZkNDAgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JjYXN0LmMKKysrIGIvbmV0L3RpcGMvYmNhc3QuYwpAQCAtMTE5LDcgKzExOSw3IEBACiBzdGF0aWMgc3RydWN0IGxpbmsgKmJjbCA9IE5VTEw7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJjX2xvY2spOwogCi1jaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJtdWx0aWNhc3QtbGluayI7Citjb25zdCBjaGFyIHRpcGNfYmNsaW5rX25hbWVbXSA9ICJtdWx0aWNhc3QtbGluayI7CiAKIAogc3RhdGljIHUzMiBidWZfc2Vxbm8oc3RydWN0IHNrX2J1ZmYgKmJ1ZikKQEAgLTgwMCw3ICs4MDAsNyBAQAogCXRpcGNfbGlua19zZXRfcXVldWVfbGltaXRzKGJjbCwgQkNMSU5LX1dJTl9ERUZBVUxUKTsKIAliY2wtPmJfcHRyID0gJmJjYmVhcmVyLT5iZWFyZXI7CiAJYmNsLT5zdGF0ZSA9IFdPUktJTkdfV09SS0lORzsKLQlzcHJpbnRmKGJjbC0+bmFtZSwgdGlwY19iY2xpbmtfbmFtZSk7CisJc3RybGNweShiY2wtPm5hbWUsIHRpcGNfYmNsaW5rX25hbWUsIFRJUENfTUFYX0xJTktfTkFNRSk7CiAKIAlpZiAoQkNMSU5LX0xPR19CVUZfU0laRSkgewogCQljaGFyICpwYiA9IGttYWxsb2MoQkNMSU5LX0xPR19CVUZfU0laRSwgR0ZQX0FUT01JQyk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5oIGIvbmV0L3RpcGMvYmNhc3QuaAppbmRleCAyZjJkNzMxLi40YzE3NzFlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5oCisrKyBiL25ldC90aXBjL2JjYXN0LmgKQEAgLTcwLDcgKzcwLDcgQEAKIAogc3RydWN0IHRpcGNfbm9kZTsKIAotZXh0ZXJuIGNoYXIgdGlwY19iY2xpbmtfbmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgdGlwY19iY2xpbmtfbmFtZVtdOwogCiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZGJnLmMgYi9uZXQvdGlwYy9kYmcuYwppbmRleCAyOWVjYWU4Li4xODg1YTdlIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9kYmcuYworKysgYi9uZXQvdGlwYy9kYmcuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJfQogCiAJaWYgKHBiLT5lY2hvKQotCQlwcmludGsocHJpbnRfc3RyaW5nKTsKKwkJcHJpbnRrKCIlcyIsIHByaW50X3N0cmluZyk7CiAKIAlzcGluX3VubG9ja19iaCgmcHJpbnRfbG9jayk7CiB9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9ub2RlLmMgYi9uZXQvdGlwYy9ub2RlLmMKaW5kZXggMjBkOThjNS4uMmMyNGU3ZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbm9kZS5jCisrKyBiL25ldC90aXBjL25vZGUuYwpAQCAtNzAzLDcgKzcwMyw3IEBACiAKIAlsaW5rX2luZm8uZGVzdCA9IGh0b25sKHRpcGNfb3duX2FkZHIgJiAweGZmZmZmMDApOwogCWxpbmtfaW5mby51cCA9IGh0b25sKDEpOwotCXNwcmludGYobGlua19pbmZvLnN0ciwgdGlwY19iY2xpbmtfbmFtZSk7CisJc3RybGNweShsaW5rX2luZm8uc3RyLCB0aXBjX2JjbGlua19uYW1lLCBUSVBDX01BWF9MSU5LX05BTUUpOwogCXRpcGNfY2ZnX2FwcGVuZF90bHYoYnVmLCBUSVBDX1RMVl9MSU5LX0lORk8sICZsaW5rX2luZm8sIHNpemVvZihsaW5rX2luZm8pKTsKIAogCS8qIEFkZCBUTFZzIGZvciBhbnkgb3RoZXIgbGlua3MgaW4gc2NvcGUgKi8KZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCBkMWI4OTgyLi5iYWFjOTEwIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xMTc4LDggKzExNzgsNyBAQAogCQl1bml4X3N0YXRlX3VubG9jayhvdGhlcik7CiAKIG91dDoKLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIAlpZiAobmV3c2spCiAJCXVuaXhfcmVsZWFzZV9zb2NrKG5ld3NrLCAwKTsKIAlpZiAob3RoZXIpCmRpZmYgLS1naXQgYS9uZXQvd2Fucm91dGVyL3dhbm1haW4uYyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCmluZGV4IDM5NzAxZGUuLjQ2NmUyZDIgMTAwNjQ0Ci0tLSBhL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCisrKyBiL25ldC93YW5yb3V0ZXIvd2FubWFpbi5jCkBAIC04Niw4ICs4NiwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHdhbl9kZXZpY2UgKndhbnJvdXRlcl9maW5kX2RldmljZShjaGFyICpuYW1lKTsKIHN0YXRpYyBpbnQgd2Fucm91dGVyX2RlbGV0ZV9pbnRlcmZhY2Uoc3RydWN0IHdhbl9kZXZpY2UgKndhbmRldiwgY2hhciAqbmFtZSk7Ci1zdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncyk7Ci1zdGF0aWMgdm9pZCB1bmxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKTsKK3N0YXRpYyB2b2lkIGxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQorCV9fYWNxdWlyZXMobG9jayk7CitzdGF0aWMgdm9pZCB1bmxvY2tfYWRhcHRlcl9pcnEoc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyAqc21wX2ZsYWdzKQorCV9fcmVsZWFzZXMobG9jayk7CiAKIAogCkBAIC03NjMsMTIgKzc2NSwxNCBAQAogfQogCiBzdGF0aWMgdm9pZCBsb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX2FjcXVpcmVzKGxvY2spCiB7CiAJc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgKnNtcF9mbGFncyk7CiB9CiAKIAogc3RhdGljIHZvaWQgdW5sb2NrX2FkYXB0ZXJfaXJxKHNwaW5sb2NrX3QgKmxvY2ssIHVuc2lnbmVkIGxvbmcgKnNtcF9mbGFncykKKwlfX3JlbGVhc2VzKGxvY2spCiB7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCAqc21wX2ZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC93YW5yb3V0ZXIvd2FucHJvYy5jIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKaW5kZXggMjY3ZjdmZi4uYzQ0ZDk2YiAxMDA2NDQKLS0tIGEvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKKysrIGIvbmV0L3dhbnJvdXRlci93YW5wcm9jLmMKQEAgLTgwLDYgKzgwLDcgQEAKICAqCUl0ZXJhdG9yCiAgKi8KIHN0YXRpYyB2b2lkICpyX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCisJX19hY3F1aXJlcyhrZXJuZWxfbG9jaykKIHsKIAlzdHJ1Y3Qgd2FuX2RldmljZSAqd2FuZGV2OwogCWxvZmZfdCBsID0gKnBvczsKQEAgLTEwMSw2ICsxMDIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQorCV9fcmVsZWFzZXMoa2VybmVsX2xvY2spCiB7CiAJdW5sb2NrX2tlcm5lbCgpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3dpbWF4L29wLW1zZy5jIGIvbmV0L3dpbWF4L29wLW1zZy5jCmluZGV4IGNiM2I0YWQuLjVkMTQ5YzEgMTAwNjQ0Ci0tLSBhL25ldC93aW1heC9vcC1tc2cuYworKysgYi9uZXQvd2ltYXgvb3AtbXNnLmMKQEAgLTI1OCw3ICsyNTgsNiBAQAogICovCiBpbnQgd2ltYXhfbXNnX3NlbmQoc3RydWN0IHdpbWF4X2RldiAqd2ltYXhfZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCByZXN1bHQ7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gd2ltYXhfZGV2LT5uZXRfZGV2LT5kZXYucGFyZW50OwogCXZvaWQgKm1zZyA9IHNrYi0+ZGF0YTsKIAlzaXplX3Qgc2l6ZSA9IHNrYi0+bGVuOwpAQCAtMjY2LDExICsyNjUsOSBAQAogCiAJZF9wcmludGYoMSwgZGV2LCAiQ1RYOiB3aW1heCBtc2csICV6dSBieXRlc1xuIiwgc2l6ZSk7CiAJZF9kdW1wKDIsIGRldiwgbXNnLCBzaXplKTsKLQlyZXN1bHQgPSBnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHdpbWF4X2dubF9tY2cuaWQsIEdGUF9LRVJORUwpOwotCWRfcHJpbnRmKDEsIGRldiwgIkNUWDogZ2VubCBtdWx0aWNhc3QgcmVzdWx0ICVkXG4iLCByZXN1bHQpOwotCWlmIChyZXN1bHQgPT0gLUVTUkNIKQkvKiBOb2JvZHkgY29ubmVjdGVkLCBpZ25vcmUgaXQgKi8KLQkJcmVzdWx0ID0gMDsJLyogYnR3LCB0aGUgc2tiIGlzIGZyZWVkIGFscmVhZHkgKi8KLQlyZXR1cm4gcmVzdWx0OworCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgd2ltYXhfZ25sX21jZy5pZCwgR0ZQX0tFUk5FTCk7CisJZF9wcmludGYoMSwgZGV2LCAiQ1RYOiBnZW5sIG11bHRpY2FzdCBkb25lXG4iKTsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdpbWF4X21zZ19zZW5kKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3dpbWF4L3N0YWNrLmMgYi9uZXQvd2ltYXgvc3RhY2suYwppbmRleCAzODY5YzAzLi5hMGVlNzZiIDEwMDY0NAotLS0gYS9uZXQvd2ltYXgvc3RhY2suYworKysgYi9uZXQvd2ltYXgvc3RhY2suYwpAQCAtMTYzLDE2ICsxNjMsMTIgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB3aW1heF9kZXZfdG9fZGV2KHdpbWF4X2Rldik7CiAJZF9mbnN0YXJ0KDMsIGRldiwgIih3aW1heF9kZXYgJXAgcmVwb3J0X3NrYiAlcClcbiIsCiAJCSAgd2ltYXhfZGV2LCByZXBvcnRfc2tiKTsKLQlpZiAocmVwb3J0X3NrYiA9PSBOVUxMKQorCWlmIChyZXBvcnRfc2tiID09IE5VTEwpIHsKKwkJcmVzdWx0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7Ci0JZ2VubG1zZ19lbmQocmVwb3J0X3NrYiwgaGVhZGVyKTsKLQlyZXN1bHQgPSBnZW5sbXNnX211bHRpY2FzdChyZXBvcnRfc2tiLCAwLCB3aW1heF9nbmxfbWNnLmlkLCBHRlBfS0VSTkVMKTsKLQlpZiAocmVzdWx0ID09IC1FU1JDSCkJLyogTm9ib2R5IGNvbm5lY3RlZCwgaWdub3JlIGl0ICovCi0JCXJlc3VsdCA9IDA7CS8qIGJ0dywgdGhlIHNrYiBpcyBmcmVlZCBhbHJlYWR5ICovCi0JaWYgKHJlc3VsdCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJSRV9TVENIOiBFcnJvciBzZW5kaW5nOiAlZFxuIiwgcmVzdWx0KTsKLQkJbmxtc2dfZnJlZShyZXBvcnRfc2tiKTsKIAl9CisJZ2VubG1zZ19lbmQocmVwb3J0X3NrYiwgaGVhZGVyKTsKKwlnZW5sbXNnX211bHRpY2FzdChyZXBvcnRfc2tiLCAwLCB3aW1heF9nbmxfbWNnLmlkLCBHRlBfS0VSTkVMKTsKIG91dDoKIAlkX2ZuZW5kKDMsIGRldiwgIih3aW1heF9kZXYgJXAgcmVwb3J0X3NrYiAlcCkgPSAlZFxuIiwKIAkJd2ltYXhfZGV2LCByZXBvcnRfc2tiLCByZXN1bHQpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCBlMjhlMmI4Li4zYzNiYzllIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtMTAsNTEgKzEwLDE5IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBOTDgwMjExCi0JYm9vbCAibmw4MDIxMSBuZXcgbmV0bGluayBpbnRlcmZhY2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIENGRzgwMjExCi0JZGVmYXVsdCB5Ci0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gdHVybnMgb24gdGhlIG5ldyBuZXRsaW5rIGludGVyZmFjZQotCSAgKG5sODAyMTEpIHN1cHBvcnQgaW4gY2ZnODAyMTEuCi0KLQkgIElmID1uLCBkcml2ZXJzIHVzaW5nIG1hYzgwMjExIHdpbGwgYmUgY29uZmlndXJlZCB2aWEKLQkgIHdpcmVsZXNzIGV4dGVuc2lvbiBzdXBwb3J0IHByb3ZpZGVkIGJ5IHRoYXQgc3Vic3lzdGVtLgotCi0JICBJZiB1bnN1cmUsIHNheSBZLgotCiBjb25maWcgV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkKIAlib29sICJPbGQgd2lyZWxlc3Mgc3RhdGljIHJlZ3VsYXRvcnkgZGVmaW5pdGlvbnMiCi0JZGVmYXVsdCB5CisJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgb2xkIHN0YXRpYyByZWd1bGF0b3J5IGluZm9ybWF0aW9uCi0JICBhbmQgdXNlcyBpdCB3aXRoaW4gdGhlIG5ldyBmcmFtZXdvcmsuIFRoaXMgaXMgYXZhaWxhYmxlCi0JICB0ZW1wb3JhcmlseSBhcyBhbiBvcHRpb24gdG8gaGVscCBwcmV2ZW50IGltbWVkaWF0ZSBpc3N1ZXMKLQkgIGR1ZSB0byB0aGUgc3dpdGNoIHRvIHRoZSBuZXcgcmVndWxhdG9yeSBmcmFtZXdvcmsgd2hpY2gKLQkgIGRvZXMgcmVxdWlyZSBhIG5ldyB1c2Vyc3BhY2UgYXBwbGljYXRpb24gd2hpY2ggaGFzIHRoZQotCSAgZGF0YWJhc2Ugb2YgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiAoQ1JEQSkgYW5kIGFub3RoZXIgZm9yCi0JICBzZXR0aW5nIHJlZ3VsYXRvcnkgZG9tYWlucyAoaXcpLgorCSAgYW5kIHVzZXMgaXQgd2l0aGluIHRoZSBuZXcgZnJhbWV3b3JrLiBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUKKwkgIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMgYW5kIGl0IGlzIGFkdmlzZWQgdG8gbGVhdmUgaXQgb2ZmLgogCi0JICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6CisJICBGb3IgZGV0YWlscyBzZWU6CiAKLQkgIGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvUmVndWxhdG9yeS9DUkRBCi0JICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Eb2N1bWVudGF0aW9uL2l3CisJICBodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi9kZXZlbG9wZXJzL1JlZ3VsYXRvcnkKIAotCSAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhvdWdoIHRoYXQgaWYgeW91ICpkbyogaGF2ZSBDUkRBIHByZXNlbnQKLQkgIGFuZCBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIENSREEgKndpbGwqIGJlIGNhbGxlZCB0byB1cGRhdGUgdGhlCi0JICByZWd1bGF0b3J5IGRvbWFpbiAoZm9yIFVTIGFuZCBKUCBvbmx5KS4gU3VwcG9ydCBmb3IgbGV0dGluZyB0aGUgdXNlcgotCSAgc2V0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiB0aHJvdWdoIGl3IGlzIGFsc28gc3VwcG9ydGVkLiBUaGlzIG9wdGlvbgotCSAgbWFpbmx5IGV4aXN0cyB0byBsZWF2ZSBhcm91bmQgZm9yIGEga2VybmVsIHJlbGVhc2Ugc29tZSBvbGQgc3RhdGljCi0JICByZWd1bGF0b3J5IGRvbWFpbnMgdGhhdCB3ZXJlIGRlZmluZWQgYW5kIHRvIGtlZXAgYXJvdW5kIHRoZSBvbGQKLQkgIGllZWU4MDIxMV9yZWdkb20gbW9kdWxlIHBhcmFtZXRlci4gVGhpcyBpcyBiZWluZyBwaGFzZWQgb3V0IGFuZCB5b3UKLQkgIHNob3VsZCBzdG9wIHVzaW5nIHRoZW0gQVNBUC4KLQotCSAgTm90ZTogWW91IHdpbGwgbmVlZCBDUkRBIGlmIHlvdSB3YW50IDgwMi4xMWQgc3VwcG9ydAotCi0JICBTYXkgWSB1bmxlc3MgeW91IGhhdmUgaW5zdGFsbGVkIGEgbmV3IHVzZXJzcGFjZSBhcHBsaWNhdGlvbi4KLQkgIEFsc28gc2F5IFkgaWYgaGF2ZSBvbmUgY3VycmVudGx5IGRlcGVuZGluZyBvbiB0aGUgaWVlZTgwMjExX3JlZ2RvbQotCSAgbW9kdWxlIHBhcmFtZXRlciBhbmQgY2Fubm90IHBvcnQgaXQgdG8gdXNlIHRoZSBuZXcgdXNlcnNwYWNlCi0JICBpbnRlcmZhY2VzLgorCSAgU2F5IE4gYW5kIGlmIHlvdSBzYXkgWSwgcGxlYXNlIHRlbGwgdXMgd2h5LiBUaGUgZGVmYXVsdCBpcyBOLgogCiBjb25maWcgV0lSRUxFU1NfRVhUCiAJYm9vbCAiV2lyZWxlc3MgZXh0ZW5zaW9ucyIKQEAgLTEwMiwzICs3MCwxMyBAQAogCiBjb25maWcgTElCODAyMTFfQ1JZUFRfVEtJUAogCXRyaXN0YXRlCisKK2NvbmZpZyBMSUI4MDIxMV9ERUJVRworCWJvb2wgImxpYjgwMjExIGRlYnVnZ2luZyBtZXNzYWdlcyIKKwlkZXBlbmRzIG9uIExJQjgwMjExCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCSAgWW91IGNhbiBlbmFibGUgdGhpcyBpZiB5b3Ugd2FudCB2ZXJib3NlIGRlYnVnZ2luZyBtZXNzYWdlcworCSAgZnJvbSBsaWI4MDIxMS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9NYWtlZmlsZSBiL25ldC93aXJlbGVzcy9NYWtlZmlsZQppbmRleCA5MzhhMzM0Li42ZDFlN2IyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKKysrIGIvbmV0L3dpcmVsZXNzL01ha2VmaWxlCkBAIC01LDggKzUsNyBAQAogb2JqLSQoQ09ORklHX0xJQjgwMjExX0NSWVBUX0NDTVApICs9IGxpYjgwMjExX2NyeXB0X2NjbXAubwogb2JqLSQoQ09ORklHX0xJQjgwMjExX0NSWVBUX1RLSVApICs9IGxpYjgwMjExX2NyeXB0X3RraXAubwogCi1jZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vCitjZmc4MDIxMS15ICs9IGNvcmUubyBzeXNmcy5vIHJhZGlvdGFwLm8gdXRpbC5vIHJlZy5vIHNjYW4ubyBubDgwMjExLm8gbWxtZS5vCiBjZmc4MDIxMS0kKENPTkZJR19XSVJFTEVTU19FWFQpICs9IHdleHQtY29tcGF0Lm8KLWNmZzgwMjExLSQoQ09ORklHX05MODAyMTEpICs9IG5sODAyMTEubwogCiBjY2ZsYWdzLXkgKz0gLURfX0NIRUNLX0VORElBTl9fCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCBiOTZmYzBjLi5kMWY1NTY1IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTcsNyArNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgpAQCAtMzEsMTggKzMwLDI5IEBACiAgKiBvbmx5IHJlYWQgdGhlIGxpc3QsIGFuZCB0aGF0IGNhbiBoYXBwZW4gcXVpdGUKICAqIG9mdGVuIGJlY2F1c2Ugd2UgbmVlZCB0byBkbyBpdCBmb3IgZWFjaCBjb21tYW5kICovCiBMSVNUX0hFQUQoY2ZnODAyMTFfZHJ2X2xpc3QpOwotREVGSU5FX01VVEVYKGNmZzgwMjExX2Rydl9tdXRleCk7CisKKy8qCisgKiBUaGlzIGlzIHVzZWQgdG8gcHJvdGVjdCB0aGUgY2ZnODAyMTFfZHJ2X2xpc3QsIGNmZzgwMjExX3JlZ2RvbWFpbiwKKyAqIGNvdW50cnlfaWVfcmVnZG9tYWluLCB0aGUgcmVnX2JlYWNvbl9saXN0IGFuZCB0aGUgdGhlIGxhc3QgcmVndWxhdG9yeQorICogcmVxdWVzdCByZWNlaXB0IChsYXN0X3JlcXVlc3QpLgorICovCitERUZJTkVfTVVURVgoY2ZnODAyMTFfbXV0ZXgpOwogCiAvKiBmb3IgZGVidWdmcyAqLwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmllZWU4MDIxMV9kZWJ1Z2ZzX2RpcjsKIAotLyogcmVxdWlyZXMgY2ZnODAyMTFfZHJ2X211dGV4IHRvIGJlIGhlbGQhICovCi1zdGF0aWMgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpjZmc4MDIxMV9kcnZfYnlfd2lwaHkoaW50IHdpcGh5KQorLyogcmVxdWlyZXMgY2ZnODAyMTFfbXV0ZXggdG8gYmUgaGVsZCEgKi8KK3N0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChpbnQgd2lwaHlfaWR4KQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmVzdWx0ID0gTlVMTCwgKmRydjsKIAorCWlmICghd2lwaHlfaWR4X3ZhbGlkKHdpcGh5X2lkeCkpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGRydi0+aWR4ID09IHdpcGh5KSB7CisJCWlmIChkcnYtPndpcGh5X2lkeCA9PSB3aXBoeV9pZHgpIHsKIAkJCXJlc3VsdCA9IGRydjsKIAkJCWJyZWFrOwogCQl9CkBAIC01MSwxNyArNjEsNDQgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCitpbnQgZ2V0X3dpcGh5X2lkeChzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCWlmICghd2lwaHkpCisJCXJldHVybiBXSVBIWV9JRFhfU1RBTEU7CisJZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlyZXR1cm4gZHJ2LT53aXBoeV9pZHg7Cit9CisKIC8qIHJlcXVpcmVzIGNmZzgwMjExX2Rydl9tdXRleCB0byBiZSBoZWxkISAqLwotc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqCitzdHJ1Y3Qgd2lwaHkgKndpcGh5X2lkeF90b193aXBoeShpbnQgd2lwaHlfaWR4KQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OworCisJaWYgKCF3aXBoeV9pZHhfdmFsaWQod2lwaHlfaWR4KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCisJZHJ2ID0gY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeCh3aXBoeV9pZHgpOworCWlmICghZHJ2KQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gJmRydi0+d2lwaHk7Cit9CisKKy8qIHJlcXVpcmVzIGNmZzgwMjExX211dGV4IHRvIGJlIGhlbGQhICovCitzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgogX19jZmc4MDIxMV9kcnZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJaW50IGlmaW5kZXg7Ci0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpieXdpcGh5ID0gTlVMTCwgKmJ5aWZpZHggPSBOVUxMOworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqYnl3aXBoeWlkeCA9IE5VTEwsICpieWlmaWR4ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBlcnIgPSAtRUlOVkFMOwogCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFldKSB7Ci0JCWJ5d2lwaHkgPSBjZmc4MDIxMV9kcnZfYnlfd2lwaHkoCisJCWJ5d2lwaHlpZHggPSBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KAogCQkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV0pKTsKIAkJZXJyID0gLUVOT0RFVjsKIAl9CkBAIC03OCwxNCArMTE1LDE0IEBACiAJCWVyciA9IC1FTk9ERVY7CiAJfQogCi0JaWYgKGJ5d2lwaHkgJiYgYnlpZmlkeCkgewotCQlpZiAoYnl3aXBoeSAhPSBieWlmaWR4KQorCWlmIChieXdpcGh5aWR4ICYmIGJ5aWZpZHgpIHsKKwkJaWYgKGJ5d2lwaHlpZHggIT0gYnlpZmlkeCkKIAkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCQllbHNlCi0JCQlyZXR1cm4gYnl3aXBoeTsgLyogPT0gYnlpZmlkeCAqLworCQkJcmV0dXJuIGJ5d2lwaHlpZHg7IC8qID09IGJ5aWZpZHggKi8KIAl9Ci0JaWYgKGJ5d2lwaHkpCi0JCXJldHVybiBieXdpcGh5OworCWlmIChieXdpcGh5aWR4KQorCQlyZXR1cm4gYnl3aXBoeWlkeDsKIAogCWlmIChieWlmaWR4KQogCQlyZXR1cm4gYnlpZmlkeDsKQEAgLTk4LDcgKzEzNSw3IEBACiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlkcnYgPSBfX2NmZzgwMjExX2Rydl9mcm9tX2luZm8oaW5mbyk7CiAKIAkvKiBpZiBpdCBpcyBub3QgYW4gZXJyb3Igd2UgZ3JhYiB0aGUgbG9jayBvbgpAQCAtMTA3LDcgKzE0NCw3IEBACiAJaWYgKCFJU19FUlIoZHJ2KSkKIAkJbXV0ZXhfbG9jaygmZHJ2LT5tdHgpOwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCiAJcmV0dXJuIGRydjsKIH0KQEAgLTExOCw3ICsxNTUsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2ID0gRVJSX1BUUigtRU5PREVWKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaW5kZXgpOwogCWlmICghZGV2KQogCQlnb3RvIG91dDsKQEAgLTEyOSw3ICsxNjYsNyBAQAogCQlkcnYgPSBFUlJfUFRSKC1FTk9ERVYpOwogCWRldl9wdXQoZGV2KTsKICBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCXJldHVybiBkcnY7CiB9CiAKQEAgLTEzOSw0OSArMTc2LDQzIEBACiAJbXV0ZXhfdW5sb2NrKCZkcnYtPm10eCk7CiB9CiAKKy8qIHJlcXVpcmVzIGNmZzgwMjExX211dGV4IHRvIGJlIGhlbGQgKi8KIGludCBjZmc4MDIxMV9kZXZfcmVuYW1lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJCWNoYXIgKm5ld25hbWUpCiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7Ci0JaW50IGlkeCwgdGFrZW4gPSAtMSwgcmVzdWx0LCBkaWdpdHM7CisJaW50IHdpcGh5X2lkeCwgdGFrZW4gPSAtMSwgcmVzdWx0LCBkaWdpdHM7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CiAKIAkvKiBwcm9oaWJpdCBjYWxsaW5nIHRoZSB0aGluZyBwaHklZCB3aGVuICVkIGlzIG5vdCBpdHMgbnVtYmVyICovCi0Jc3NjYW5mKG5ld25hbWUsIFBIWV9OQU1FICIlZCVuIiwgJmlkeCwgJnRha2VuKTsKLQlpZiAodGFrZW4gPT0gc3RybGVuKG5ld25hbWUpICYmIGlkeCAhPSByZGV2LT5pZHgpIHsKLQkJLyogY291bnQgbnVtYmVyIG9mIHBsYWNlcyBuZWVkZWQgdG8gcHJpbnQgaWR4ICovCisJc3NjYW5mKG5ld25hbWUsIFBIWV9OQU1FICIlZCVuIiwgJndpcGh5X2lkeCwgJnRha2VuKTsKKwlpZiAodGFrZW4gPT0gc3RybGVuKG5ld25hbWUpICYmIHdpcGh5X2lkeCAhPSByZGV2LT53aXBoeV9pZHgpIHsKKwkJLyogY291bnQgbnVtYmVyIG9mIHBsYWNlcyBuZWVkZWQgdG8gcHJpbnQgd2lwaHlfaWR4ICovCiAJCWRpZ2l0cyA9IDE7Ci0JCXdoaWxlIChpZHggLz0gMTApCisJCXdoaWxlICh3aXBoeV9pZHggLz0gMTApCiAJCQlkaWdpdHMrKzsKIAkJLyoKIAkJICogZGVueSB0aGUgbmFtZSBpZiBpdCBpcyBwaHk8aWR4PiB3aGVyZSA8aWR4PiBpcyBwcmludGVkCiAJCSAqIHdpdGhvdXQgbGVhZGluZyB6ZXJvZXMuIHRha2VuID09IHN0cmxlbihuZXduYW1lKSBoZXJlCiAJCSAqLwotCQlyZXN1bHQgPSAtRUlOVkFMOwogCQlpZiAodGFrZW4gPT0gc3RybGVuKFBIWV9OQU1FKSArIGRpZ2l0cykKLQkJCWdvdG8gb3V0X3VubG9jazsKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCiAJLyogSWdub3JlIG5vcCByZW5hbWVzICovCi0JcmVzdWx0ID0gMDsKIAlpZiAoc3RyY21wKG5ld25hbWUsIGRldl9uYW1lKCZyZGV2LT53aXBoeS5kZXYpKSA9PSAwKQotCQlnb3RvIG91dF91bmxvY2s7CisJCXJldHVybiAwOwogCiAJLyogRW5zdXJlIGFub3RoZXIgZGV2aWNlIGRvZXMgbm90IGFscmVhZHkgaGF2ZSB0aGlzIG5hbWUuICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkgewotCQlyZXN1bHQgPSAtRUlOVkFMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZHJ2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpCiAJCWlmIChzdHJjbXAobmV3bmFtZSwgZGV2X25hbWUoJmRydi0+d2lwaHkuZGV2KSkgPT0gMCkKLQkJCWdvdG8gb3V0X3VubG9jazsKLQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIHRoaXMgd2lsbCBvbmx5IGNoZWNrIGZvciBjb2xsaXNpb25zIGluIHN5c2ZzCi0JICogd2hpY2ggaXMgbm90IGV2ZW4gYWx3YXlzIGNvbXBpbGVkIGluLgotCSAqLwogCXJlc3VsdCA9IGRldmljZV9yZW5hbWUoJnJkZXYtPndpcGh5LmRldiwgbmV3bmFtZSk7CiAJaWYgKHJlc3VsdCkKLQkJZ290byBvdXRfdW5sb2NrOworCQlyZXR1cm4gcmVzdWx0OwogCiAJaWYgKHJkZXYtPndpcGh5LmRlYnVnZnNkaXIgJiYKIAkgICAgIWRlYnVnZnNfcmVuYW1lKHJkZXYtPndpcGh5LmRlYnVnZnNkaXItPmRfcGFyZW50LApAQCAtMTkxLDEzICsyMjIsOSBAQAogCQlwcmludGsoS0VSTl9FUlIgImNmZzgwMjExOiBmYWlsZWQgdG8gcmVuYW1lIGRlYnVnZnMgZGlyIHRvICVzIVxuIiwKIAkJICAgICAgIG5ld25hbWUpOwogCi0JcmVzdWx0ID0gMDsKLW91dF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOwotCWlmIChyZXN1bHQgPT0gMCkKLQkJbmw4MDIxMV9ub3RpZnlfZGV2X3JlbmFtZShyZGV2KTsKKwlubDgwMjExX25vdGlmeV9kZXZfcmVuYW1lKHJkZXYpOwogCi0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gMDsKIH0KIAogLyogZXhwb3J0ZWQgZnVuY3Rpb25zICovCkBAIC0yMjAsMjYgKzI0NywyOCBAQAogCiAJZHJ2LT5vcHMgPSBvcHM7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAotCWRydi0+aWR4ID0gd2lwaHlfY291bnRlcisrOworCWRydi0+d2lwaHlfaWR4ID0gd2lwaHlfY291bnRlcisrOwogCi0JaWYgKHVubGlrZWx5KGRydi0+aWR4IDwgMCkpIHsKKwlpZiAodW5saWtlbHkoIXdpcGh5X2lkeF92YWxpZChkcnYtPndpcGh5X2lkeCkpKSB7CiAJCXdpcGh5X2NvdW50ZXItLTsKLQkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAkJLyogdWdoLCB3cmFwcGVkISAqLwogCQlrZnJlZShkcnYpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAkvKiBnaXZlIGl0IGEgcHJvcGVyIG5hbWUgKi8KLQlkZXZfc2V0X25hbWUoJmRydi0+d2lwaHkuZGV2LCBQSFlfTkFNRSAiJWQiLCBkcnYtPmlkeCk7CisJZGV2X3NldF9uYW1lKCZkcnYtPndpcGh5LmRldiwgUEhZX05BTUUgIiVkIiwgZHJ2LT53aXBoeV9pZHgpOwogCiAJbXV0ZXhfaW5pdCgmZHJ2LT5tdHgpOwogCW11dGV4X2luaXQoJmRydi0+ZGV2bGlzdF9tdHgpOwogCUlOSVRfTElTVF9IRUFEKCZkcnYtPm5ldGRldl9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmZHJ2LT5ic3NfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmRydi0+YnNzX2xpc3QpOwogCiAJZGV2aWNlX2luaXRpYWxpemUoJmRydi0+d2lwaHkuZGV2KTsKIAlkcnYtPndpcGh5LmRldi5jbGFzcyA9ICZpZWVlODAyMTFfY2xhc3M7CkBAIC0yNTksNiArMjg4LDkgQEAKIAlpbnQgaTsKIAl1MTYgaWZtb2RlcyA9IHdpcGh5LT5pbnRlcmZhY2VfbW9kZXM7CiAKKwlpZiAoV0FSTl9PTih3aXBoeS0+bWF4X3NjYW5fc3NpZHMgPCAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAkvKiBzYW5pdHkgY2hlY2sgaWZtb2RlcyAqLwogCVdBUk5fT04oIWlmbW9kZXMpOwogCWlmbW9kZXMgJj0gKCgxIDw8IF9fTkw4MDIxMV9JRlRZUEVfQUZURVJfTEFTVCkgLSAxKSAmIH4xOwpAQCAtMjczLDEwICszMDUsMTYgQEAKIAogCQlzYmFuZC0+YmFuZCA9IGJhbmQ7CiAKLQkJaWYgKCFzYmFuZC0+bl9jaGFubmVscyB8fCAhc2JhbmQtPm5fYml0cmF0ZXMpIHsKLQkJCVdBUk5fT04oMSk7CisJCWlmIChXQVJOX09OKCFzYmFuZC0+bl9jaGFubmVscyB8fCAhc2JhbmQtPm5fYml0cmF0ZXMpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKworCQkvKgorCQkgKiBTaW5jZSB3ZSB1c2UgYSB1MzIgZm9yIHJhdGUgYml0bWFwcyBpbgorCQkgKiBpZWVlODAyMTFfZ2V0X3Jlc3BvbnNlX3JhdGUsIHdlIGNhbm5vdAorCQkgKiBoYXZlIG1vcmUgdGhhbiAzMiBsZWdhY3kgcmF0ZXMuCisJCSAqLworCQlpZiAoV0FSTl9PTihzYmFuZC0+bl9iaXRyYXRlcyA+IDMyKSkKKwkJCXJldHVybiAtRUlOVkFMOwogCiAJCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7CiAJCQlzYmFuZC0+Y2hhbm5lbHNbaV0ub3JpZ19mbGFncyA9CkBAIC0yOTksMTAgKzMzNywxMCBAQAogCS8qIGNoZWNrIGFuZCBzZXQgdXAgYml0cmF0ZXMgKi8KIAlpZWVlODAyMTFfc2V0X2JpdHJhdGVfZmxhZ3Mod2lwaHkpOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAkvKiBzZXQgdXAgcmVndWxhdG9yeSBpbmZvICovCi0Jd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkod2lwaHksIFJFR0RPTV9TRVRfQllfQ09SRSk7CisJd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkod2lwaHksIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1JFKTsKIAogCXJlcyA9IGRldmljZV9hZGQoJmRydi0+d2lwaHkuZGV2KTsKIAlpZiAocmVzKQpAQCAtMzE3LDkgKzM1NSwyMCBAQAogCWlmIChJU19FUlIoZHJ2LT53aXBoeS5kZWJ1Z2ZzZGlyKSkKIAkJZHJ2LT53aXBoeS5kZWJ1Z2ZzZGlyID0gTlVMTDsKIAorCWlmICh3aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkpIHsKKwkJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCByZXF1ZXN0OworCisJCXJlcXVlc3Qud2lwaHlfaWR4ID0gZ2V0X3dpcGh5X2lkeCh3aXBoeSk7CisJCXJlcXVlc3QuaW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjsKKwkJcmVxdWVzdC5hbHBoYTJbMF0gPSAnOSc7CisJCXJlcXVlc3QuYWxwaGEyWzFdID0gJzknOworCisJCW5sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KCZyZXF1ZXN0KTsKKwl9CisKIAlyZXMgPSAwOwogb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfcmVnaXN0ZXIpOwpAQCAtMzI5LDcgKzM3OCw3IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSB3aXBoeV90b19kZXYod2lwaHkpOwogCiAJLyogcHJvdGVjdCB0aGUgZGV2aWNlIGxpc3QgKi8KLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCUJVR19PTighbGlzdF9lbXB0eSgmZHJ2LT5uZXRkZXZfbGlzdCkpOwogCkBAIC0zNTUsMTQgKzQwNCwxNyBAQAogCWRldmljZV9kZWwoJmRydi0+d2lwaHkuZGV2KTsKIAlkZWJ1Z2ZzX3JlbW92ZShkcnYtPndpcGh5LmRlYnVnZnNkaXIpOwogCi0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTCh3aXBoeV91bnJlZ2lzdGVyKTsKIAogdm9pZCBjZmc4MDIxMV9kZXZfZnJlZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydikKIHsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpzY2FuLCAqdG1wOwogCW11dGV4X2Rlc3Ryb3koJmRydi0+bXR4KTsKIAltdXRleF9kZXN0cm95KCZkcnYtPmRldmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2NhbiwgdG1wLCAmZHJ2LT5ic3NfbGlzdCwgbGlzdCkKKwkJY2ZnODAyMTFfcHV0X2Jzcygmc2Nhbi0+cHViKTsKIAlrZnJlZShkcnYpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaAppbmRleCBmN2ZiOWY0Li5kNDNkYWEyIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmgKQEAgLTgsNiArOCw5IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgpAQCAtMzUsMTIgKzM4LDIwIEBACiAJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52OwogCiAJLyogd2lwaHkgaW5kZXgsIGludGVybmFsIG9ubHkgKi8KLQlpbnQgaWR4OworCWludCB3aXBoeV9pZHg7CiAKIAkvKiBhc3NvY2lhdGUgbmV0ZGV2IGxpc3QgKi8KIAlzdHJ1Y3QgbXV0ZXggZGV2bGlzdF9tdHg7CiAJc3RydWN0IGxpc3RfaGVhZCBuZXRkZXZfbGlzdDsKIAorCS8qIEJTU2VzL3NjYW5uaW5nICovCisJc3BpbmxvY2tfdCBic3NfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGJzc19saXN0OworCXN0cnVjdCByYl9yb290IGJzc190cmVlOworCXUzMiBic3NfZ2VuZXJhdGlvbjsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcTsgLyogcHJvdGVjdGVkIGJ5IFJUTkwgKi8KKwl1bnNpZ25lZCBsb25nIHN1c3BlbmRfYXQ7CisKIAkvKiBtdXN0IGJlIGxhc3QgYmVjYXVzZSBvZiB0aGUgd2F5IHdlIGRvIHdpcGh5X3ByaXYoKSwKIAkgKiBhbmQgaXQgc2hvdWxkIGF0IGxlYXN0IGJlIGFsaWduZWQgdG8gTkVUREVWX0FMSUdOICovCiAJc3RydWN0IHdpcGh5IHdpcGh5IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKE5FVERFVl9BTElHTikpKTsKQEAgLTUzLDkgKzY0LDQ0IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZih3aXBoeSwgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlLCB3aXBoeSk7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgbXV0ZXggY2ZnODAyMTFfZHJ2X211dGV4OworLyogTm90ZSAwIGlzIHZhbGlkLCBoZW5jZSBwaHkwICovCitzdGF0aWMgaW5saW5lCitib29sIHdpcGh5X2lkeF92YWxpZChpbnQgd2lwaHlfaWR4KQoreworCXJldHVybiAod2lwaHlfaWR4ID49IDApOworfQorCitleHRlcm4gc3RydWN0IG11dGV4IGNmZzgwMjExX211dGV4OwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgY2ZnODAyMTFfZHJ2X2xpc3Q7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3NlcnRfY2ZnODAyMTFfbG9jayh2b2lkKQoreworCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmY2ZnODAyMTFfbXV0ZXgpKTsKK30KKworLyoKKyAqIFlvdSBjYW4gdXNlIHRoaXMgdG8gbWFyayBhIHdpcGh5X2lkeCBhcyBub3QgaGF2aW5nIGFuIGFzc29jaWF0ZWQgd2lwaHkuCisgKiBJdCBndWFyYW50ZWVzIGNmZzgwMjExX2Rydl9ieV93aXBoeV9pZHgod2lwaHlfaWR4KSB3aWxsIHJldHVybiBOVUxMCisgKi8KKyNkZWZpbmUgV0lQSFlfSURYX1NUQUxFIC0xCisKK3N0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgcmJfbm9kZSByYm47CisJdW5zaWduZWQgbG9uZyB0czsKKwlzdHJ1Y3Qga3JlZiByZWY7CisJYm9vbCBob2xkOworCisJLyogbXVzdCBiZSBsYXN0IGJlY2F1c2Ugb2YgcHJpdiBtZW1iZXIgKi8KKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzIHB1YjsKK307CisKK3N0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqY2ZnODAyMTFfZHJ2X2J5X3dpcGh5X2lkeChpbnQgd2lwaHlfaWR4KTsKK2ludCBnZXRfd2lwaHlfaWR4KHN0cnVjdCB3aXBoeSAqd2lwaHkpOworCitzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgorX19jZmc4MDIxMV9kcnZfZnJvbV9pbmZvKHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOworCiAvKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZHJpdmVyCiAgKiB0aGF0IHRoZSBnZW5sX2luZm8gaXRlbSB0aGF0IGlzIHBhc3NlZCByZWZlcnMgdG8uCkBAIC02MywxMyArMTA5LDEzIEBACiAgKiB0aGUgZHJpdmVyJ3MgbXV0ZXghCiAgKgogICogVGhpcyBtZWFucyB0aGF0IHlvdSBuZWVkIHRvIGNhbGwgY2ZnODAyMTFfcHV0X2RldigpCi0gKiBiZWZvcmUgYmVpbmcgYWxsb3dlZCB0byBhY3F1aXJlICZjZmc4MDIxMV9kcnZfbXV0ZXghCisgKiBiZWZvcmUgYmVpbmcgYWxsb3dlZCB0byBhY3F1aXJlICZjZmc4MDIxMV9tdXRleCEKICAqCiAgKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIG5lZWQgdG8gbG9jayB0aGUgZ2xvYmFsCiAgKiBtdXRleCB0byBnZXQgYW4gaXRlbSBvZmYgdGhlIGxpc3Qgc2FmZWx5LCBhbmQgdGhlbgogICogd2UgbG9jayB0aGUgZHJ2IG11dGV4IHNvIGl0IGRvZXNuJ3QgZ28gYXdheSB1bmRlciB1cy4KICAqCi0gKiBXZSBkb24ndCB3YW50IHRvIGtlZXAgY2ZnODAyMTFfZHJ2X211dGV4IGxvY2tlZAorICogV2UgZG9uJ3Qgd2FudCB0byBrZWVwIGNmZzgwMjExX211dGV4IGxvY2tlZAogICogZm9yIGFsbCB0aGUgdGltZSBpbiBvcmRlciB0byBhbGxvdyByZXF1ZXN0cyBvbgogICogb3RoZXIgaW50ZXJmYWNlcyB0byBnbyB0aHJvdWdoIGF0IHRoZSBzYW1lIHRpbWUuCiAgKgpAQCAtNzksNiArMTI1LDkgQEAKIGV4dGVybiBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgogY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CiAKKy8qIHJlcXVpcmVzIGNmZzgwMjExX2Rydl9tdXRleCB0byBiZSBoZWxkISAqLworc3RydWN0IHdpcGh5ICp3aXBoeV9pZHhfdG9fd2lwaHkoaW50IHdpcGh5X2lkeCk7CisKIC8qIGlkZW50aWNhbCB0byBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faW5mbyBidXQgb25seSBvcGVyYXRlIG9uIGlmaW5kZXggKi8KIGV4dGVybiBzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKgogY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2lmaW5kZXgoaW50IGlmaW5kZXgpOwpAQCAtOTIsNiArMTQxLDExIEBACiAJCQkgICAgICAgY2hhciAqbmV3bmFtZSk7CiAKIHZvaWQgaWVlZTgwMjExX3NldF9iaXRyYXRlX2ZsYWdzKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwotdm9pZCB3aXBoeV91cGRhdGVfcmVndWxhdG9yeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0YnkpOwordm9pZCB3aXBoeV91cGRhdGVfcmVndWxhdG9yeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBzZXRieSk7CisKK3ZvaWQgY2ZnODAyMTFfYnNzX2V4cGlyZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldik7Cit2b2lkIGNmZzgwMjExX2Jzc19hZ2Uoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhZ2Vfc2Vjcyk7CiAKICNlbmRpZiAvKiBfX05FVF9XSVJFTEVTU19DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF9jY21wLmMgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfY2NtcC5jCmluZGV4IGRiNDI4MTkuLjIzMDFkYzEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF9jY21wLmMKKysrIGIvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X2NjbXAuYwpAQCAtMzM3LDYgKzMzNyw3IEBACiAJcG9zICs9IDg7CiAKIAlpZiAoY2NtcF9yZXBsYXlfY2hlY2socG4sIGtleS0+cnhfcG4pKSB7CisjaWZkZWYgQ09ORklHX0xJQjgwMjExX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0lcE0gIgogCQkJCSAicHJldmlvdXMgUE4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKQEAgLTM0Niw2ICszNDcsNyBAQAogCQkJCSBrZXktPnJ4X3BuWzNdLCBrZXktPnJ4X3BuWzRdLCBrZXktPnJ4X3BuWzVdLAogCQkJCSBwblswXSwgcG5bMV0sIHBuWzJdLCBwblszXSwgcG5bNF0sIHBuWzVdKTsKIAkJfQorI2VuZGlmCiAJCWtleS0+ZG90MTFSU05BU3RhdHNDQ01QUmVwbGF5cysrOwogCQlyZXR1cm4gLTQ7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3RraXAuYyBiL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF90a2lwLmMKaW5kZXggN2U4ZTIyYi4uYzM2Mjg3MyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3RraXAuYworKysgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfdGtpcC5jCkBAIC00NjUsMTIgKzQ2NSwxNCBAQAogCXBvcyArPSA4OwogCiAJaWYgKHRraXBfcmVwbGF5X2NoZWNrKGl2MzIsIGl2MTYsIHRrZXktPnJ4X2l2MzIsIHRrZXktPnJ4X2l2MTYpKSB7CisjaWZkZWYgQ09ORklHX0xJQjgwMjExX0RFQlVHCiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0lcE0iCiAJCQkgICAgICAgIiBwcmV2aW91cyBUU0MgJTA4eCUwNHggcmVjZWl2ZWQgVFNDICIKIAkJCSAgICAgICAiJTA4eCUwNHhcbiIsIGhkci0+YWRkcjIsCiAJCQkgICAgICAgdGtleS0+cnhfaXYzMiwgdGtleS0+cnhfaXYxNiwgaXYzMiwgaXYxNik7CiAJCX0KKyNlbmRpZgogCQl0a2V5LT5kb3QxMVJTTkFTdGF0c1RLSVBSZXBsYXlzKys7CiAJCXJldHVybiAtNDsKIAl9CkBAIC01MDUsMTAgKzUwNywxMiBAQAogCQkJICogaXQgbmVlZHMgdG8gYmUgcmVjYWxjdWxhdGVkIGZvciB0aGUgbmV4dCBwYWNrZXQuICovCiAJCQl0a2V5LT5yeF9waGFzZTFfZG9uZSA9IDA7CiAJCX0KKyNpZmRlZiBDT05GSUdfTElCODAyMTFfREVCVUcKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IElDViBlcnJvciBkZXRlY3RlZDogU1RBPSIKIAkJCSAgICAgICAiJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJfQorI2VuZGlmCiAJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUElDVkVycm9ycysrOwogCQlyZXR1cm4gLTU7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL21sbWUuYyBiL25ldC93aXJlbGVzcy9tbG1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjNTcyMQotLS0gL2Rldi9udWxsCisrKyBiL25ldC93aXJlbGVzcy9tbG1lLmMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIGNmZzgwMjExIE1MTUUgU0FQIGludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSwgSm91bmkgTWFsaW5lbiA8akB3MS5maT4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbmw4MDIxMS5oPgorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJubDgwMjExLmgiCisKK3ZvaWQgY2ZnODAyMTFfc2VuZF9yeF9hdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlubDgwMjExX3NlbmRfcnhfYXV0aChyZGV2LCBkZXYsIGJ1ZiwgbGVuKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfc2VuZF9yeF9hdXRoKTsKKwordm9pZCBjZmc4MDIxMV9zZW5kX3J4X2Fzc29jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlubDgwMjExX3NlbmRfcnhfYXNzb2MocmRldiwgZGV2LCBidWYsIGxlbik7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NlbmRfcnhfYXNzb2MpOworCit2b2lkIGNmZzgwMjExX3NlbmRfcnhfZGVhdXRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlubDgwMjExX3NlbmRfcnhfZGVhdXRoKHJkZXYsIGRldiwgYnVmLCBsZW4pOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9zZW5kX3J4X2RlYXV0aCk7CisKK3ZvaWQgY2ZnODAyMTFfc2VuZF9yeF9kaXNhc3NvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqYnVmLAorCQkJICAgICAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlubDgwMjExX3NlbmRfcnhfZGlzYXNzb2MocmRldiwgZGV2LCBidWYsIGxlbik7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NlbmRfcnhfZGlzYXNzb2MpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggMWU3MjhmZi4uMzUzZTFhNCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYworKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC03LDEzICs3LDEzIEBACiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogI2luY2x1ZGUgPGxpbnV4L25sODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAjaW5jbHVkZSAiY29yZS5oIgpAQCAtMTA1LDYgKzEwNSwxNyBAQAogCiAJW05MODAyMTFfQVRUUl9IVF9DQVBBQklMSVRZXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAogCQkJCQkgLmxlbiA9IE5MODAyMTFfSFRfQ0FQQUJJTElUWV9MRU4gfSwKKworCVtOTDgwMjExX0FUVFJfTUdNVF9TVUJUWVBFXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKKwlbTkw4MDIxMV9BVFRSX0lFXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAorCQkJICAgICAgLmxlbiA9IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gfSwKKwlbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdID0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKworCVtOTDgwMjExX0FUVFJfU1NJRF0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKKwkJCQkubGVuID0gSUVFRTgwMjExX01BWF9TU0lEX0xFTiB9LAorCVtOTDgwMjExX0FUVFJfQVVUSF9UWVBFXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW05MODAyMTFfQVRUUl9SRUFTT05fQ09ERV0gPSB7IC50eXBlID0gTkxBX1UxNiB9LAogfTsKIAogLyogbWVzc2FnZSBidWlsZGluZyBoZWxwZXIgKi8KQEAgLTEyNSw2ICsxMzYsNyBAQAogCXN0cnVjdCBubGF0dHIgKm5sX2ZyZXFzLCAqbmxfZnJlcTsKIAlzdHJ1Y3QgbmxhdHRyICpubF9yYXRlcywgKm5sX3JhdGU7CiAJc3RydWN0IG5sYXR0ciAqbmxfbW9kZXM7CisJc3RydWN0IG5sYXR0ciAqbmxfY21kczsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOwogCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqcmF0ZTsKQEAgLTEzNSw4ICsxNDcsMTAgQEAKIAlpZiAoIWhkcikKIAkJcmV0dXJuIC0xOwogCi0JTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIGRldi0+aWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgZGV2LT53aXBoeV9pZHgpOwogCU5MQV9QVVRfU1RSSU5HKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZX05BTUUsIHdpcGh5X25hbWUoJmRldi0+d2lwaHkpKTsKKwlOTEFfUFVUX1U4KG1zZywgTkw4MDIxMV9BVFRSX01BWF9OVU1fU0NBTl9TU0lEUywKKwkJICAgZGV2LT53aXBoeS5tYXhfc2Nhbl9zc2lkcyk7CiAKIAlubF9tb2RlcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX1NVUFBPUlRFRF9JRlRZUEVTKTsKIAlpZiAoIW5sX21vZGVzKQpAQCAtMjM0LDYgKzI0OCwzNSBAQAogCX0KIAlubGFfbmVzdF9lbmQobXNnLCBubF9iYW5kcyk7CiAKKwlubF9jbWRzID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX0FUVFJfU1VQUE9SVEVEX0NPTU1BTkRTKTsKKwlpZiAoIW5sX2NtZHMpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJaSA9IDA7CisjZGVmaW5lIENNRChvcCwgbikJCQkJCQlcCisJIGRvIHsJCQkJCQkJXAorCQlpZiAoZGV2LT5vcHMtPm9wKSB7CQkJCVwKKwkJCWkrKzsJCQkJCVwKKwkJCU5MQV9QVVRfVTMyKG1zZywgaSwgTkw4MDIxMV9DTURfICMjIG4pOwlcCisJCX0JCQkJCQlcCisJfSB3aGlsZSAoMCkKKworCUNNRChhZGRfdmlydHVhbF9pbnRmLCBORVdfSU5URVJGQUNFKTsKKwlDTUQoY2hhbmdlX3ZpcnR1YWxfaW50ZiwgU0VUX0lOVEVSRkFDRSk7CisJQ01EKGFkZF9rZXksIE5FV19LRVkpOworCUNNRChhZGRfYmVhY29uLCBORVdfQkVBQ09OKTsKKwlDTUQoYWRkX3N0YXRpb24sIE5FV19TVEFUSU9OKTsKKwlDTUQoYWRkX21wYXRoLCBORVdfTVBBVEgpOworCUNNRChzZXRfbWVzaF9wYXJhbXMsIFNFVF9NRVNIX1BBUkFNUyk7CisJQ01EKGNoYW5nZV9ic3MsIFNFVF9CU1MpOworCUNNRChhdXRoLCBBVVRIRU5USUNBVEUpOworCUNNRChhc3NvYywgQVNTT0NJQVRFKTsKKwlDTUQoZGVhdXRoLCBERUFVVEhFTlRJQ0FURSk7CisJQ01EKGRpc2Fzc29jLCBESVNBU1NPQ0lBVEUpOworCisjdW5kZWYgQ01ECisJbmxhX25lc3RfZW5kKG1zZywgbmxfY21kcyk7CisKIAlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOwogCiAgbmxhX3B1dF9mYWlsdXJlOgpAQCAtMjQ3LDcgKzI5MCw3IEBACiAJaW50IHN0YXJ0ID0gY2ItPmFyZ3NbMF07CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXY7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNmZzgwMjExX2Rydl9saXN0LCBsaXN0KSB7CiAJCWlmICgrK2lkeCA8PSBzdGFydCkKIAkJCWNvbnRpbnVlOwpAQCAtMjU4LDcgKzMwMSw3IEBACiAJCQlicmVhazsKIAkJfQogCX0KLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAKIAljYi0+YXJnc1swXSA9IGlkeDsKIApAQCAtMzIzLDE2ICszNjYsMjYgQEAKIAlpbnQgcmVzdWx0ID0gMCwgcmVtX3R4cV9wYXJhbXMgPSAwOwogCXN0cnVjdCBubGF0dHIgKm5sX3R4cV9wYXJhbXM7CiAKLQlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oaW5mbyk7Ci0JaWYgKElTX0VSUihyZGV2KSkKLQkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJcnRubF9sb2NrKCk7CiAKLQlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX05BTUVdKSB7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJcmRldiA9IF9fY2ZnODAyMTFfZHJ2X2Zyb21faW5mbyhpbmZvKTsKKwlpZiAoSVNfRVJSKHJkZXYpKSB7CisJCXJlc3VsdCA9IFBUUl9FUlIocmRldik7CisJCWdvdG8gdW5sb2NrOworCX0KKworCW11dGV4X2xvY2soJnJkZXYtPm10eCk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX05BTUVdKQogCQlyZXN1bHQgPSBjZmc4MDIxMV9kZXZfcmVuYW1lKAogCQkJcmRldiwgbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX05BTUVdKSk7Ci0JCWlmIChyZXN1bHQpCi0JCQlnb3RvIGJhZF9yZXM7Ci0JfQorCisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwlpZiAocmVzdWx0KQorCQlnb3RvIGJhZF9yZXM7CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX1RYUV9QQVJBTVNdKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfdHhxX3BhcmFtcyB0eHFfcGFyYW1zOwpAQCAtNDI4LDcgKzQ4MSw5IEBACiAKIAogIGJhZF9yZXM6Ci0JY2ZnODAyMTFfcHV0X2RldihyZGV2KTsKKwltdXRleF91bmxvY2soJnJkZXYtPm10eCk7CisgdW5sb2NrOgorCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDYxLDcgKzUxNiw3IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXY7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKIAotCW11dGV4X2xvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmY2ZnODAyMTFfZHJ2X2xpc3QsIGxpc3QpIHsKIAkJaWYgKHdwX2lkeCA8IHdwX3N0YXJ0KSB7CiAJCQl3cF9pZHgrKzsKQEAgLTQ4OCw3ICs1NDMsNyBAQAogCQl3cF9pZHgrKzsKIAl9CiAgb3V0OgotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAogCWNiLT5hcmdzWzBdID0gd3BfaWR4OwogCWNiLT5hcmdzWzFdID0gaWZfaWR4OwpAQCAtNTY0LDIxICs2MTksMzEgQEAKIAllbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGU7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1MzIgX2ZsYWdzLCAqZmxhZ3MgPSBOVUxMOworCWJvb2wgY2hhbmdlID0gZmFsc2U7CiAKIAltZW1zZXQoJnBhcmFtcywgMCwgc2l6ZW9mKHBhcmFtcykpOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gdW5sb2NrX3J0bmw7CisKIAlpZmluZGV4ID0gZGV2LT5pZmluZGV4OwogCXR5cGUgPSBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZTsKIAlkZXZfcHV0KGRldik7CiAKLQllcnIgPSAtRUlOVkFMOwogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUZUWVBFXSkgewotCQl0eXBlID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lGVFlQRV0pOwotCQlpZiAodHlwZSA+IE5MODAyMTFfSUZUWVBFX01BWCkKKwkJZW51bSBubDgwMjExX2lmdHlwZSBudHlwZTsKKworCQludHlwZSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRlRZUEVdKTsKKwkJaWYgKHR5cGUgIT0gbnR5cGUpCisJCQljaGFuZ2UgPSB0cnVlOworCQl0eXBlID0gbnR5cGU7CisJCWlmICh0eXBlID4gTkw4MDIxMV9JRlRZUEVfTUFYKSB7CisJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byB1bmxvY2s7CisJCX0KIAl9CiAKIAlpZiAoIWRydi0+b3BzLT5jaGFuZ2VfdmlydHVhbF9pbnRmIHx8CkBAIC01OTQsNiArNjU5LDcgQEAKIAkJfQogCQlwYXJhbXMubWVzaF9pZCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NRVNIX0lEXSk7CiAJCXBhcmFtcy5tZXNoX2lkX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01FU0hfSURdKTsKKwkJY2hhbmdlID0gdHJ1ZTsKIAl9CiAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01OVFJfRkxBR1NdKSB7CkBAIC02MDMsMjAgKzY2OSwyNiBAQAogCQl9CiAJCWVyciA9IHBhcnNlX21vbml0b3JfZmxhZ3MoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01OVFJfRkxBR1NdLAogCQkJCQkgICZfZmxhZ3MpOwotCQlpZiAoIWVycikKLQkJCWZsYWdzID0gJl9mbGFnczsKKwkJaWYgKGVycikKKwkJCWdvdG8gdW5sb2NrOworCisJCWZsYWdzID0gJl9mbGFnczsKKwkJY2hhbmdlID0gdHJ1ZTsKIAl9Ci0JcnRubF9sb2NrKCk7Ci0JZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV92aXJ0dWFsX2ludGYoJmRydi0+d2lwaHksIGlmaW5kZXgsCi0JCQkJCSAgICB0eXBlLCBmbGFncywgJnBhcmFtcyk7CisKKwlpZiAoY2hhbmdlKQorCQllcnIgPSBkcnYtPm9wcy0+Y2hhbmdlX3ZpcnR1YWxfaW50ZigmZHJ2LT53aXBoeSwgaWZpbmRleCwKKwkJCQkJCSAgICB0eXBlLCBmbGFncywgJnBhcmFtcyk7CisJZWxzZQorCQllcnIgPSAwOwogCiAJZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpbmRleCk7CiAJV0FSTl9PTighZGV2IHx8ICghZXJyICYmIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IHR5cGUpKTsKIAotCXJ0bmxfdW5sb2NrKCk7Ci0KICB1bmxvY2s6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjM5LDkgKzcxMSwxMyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJcnRubF9sb2NrKCk7CisKIAlkcnYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faW5mbyhpbmZvKTsKLQlpZiAoSVNfRVJSKGRydikpCi0JCXJldHVybiBQVFJfRVJSKGRydik7CisJaWYgKElTX0VSUihkcnYpKSB7CisJCWVyciA9IFBUUl9FUlIoZHJ2KTsKKwkJZ290byB1bmxvY2tfcnRubDsKKwl9CiAKIAlpZiAoIWRydi0+b3BzLT5hZGRfdmlydHVhbF9pbnRmIHx8CiAJICAgICEoZHJ2LT53aXBoeS5pbnRlcmZhY2VfbW9kZXMgJiAoMSA8PCB0eXBlKSkpIHsKQEAgLTY1NSwxOCArNzMxLDE3IEBACiAJCXBhcmFtcy5tZXNoX2lkX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01FU0hfSURdKTsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBwYXJzZV9tb25pdG9yX2ZsYWdzKHR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiA/CiAJCQkJICBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTU5UUl9GTEFHU10gOiBOVUxMLAogCQkJCSAgJmZsYWdzKTsKIAllcnIgPSBkcnYtPm9wcy0+YWRkX3ZpcnR1YWxfaW50ZigmZHJ2LT53aXBoeSwKIAkJbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lGTkFNRV0pLAogCQl0eXBlLCBlcnIgPyBOVUxMIDogJmZsYWdzLCAmcGFyYW1zKTsKLQlydG5sX3VubG9jaygpOwotCiAKICB1bmxvY2s6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjc2LDkgKzc1MSwxMSBAQAogCWludCBpZmluZGV4LCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIHVubG9ja19ydG5sOwogCWlmaW5kZXggPSBkZXYtPmlmaW5kZXg7CiAJZGV2X3B1dChkZXYpOwogCkBAIC02ODcsMTIgKzc2NCwxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+ZGVsX3ZpcnR1YWxfaW50ZigmZHJ2LT53aXBoeSwgaWZpbmRleCk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CisgdW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC03MzgsMTUgKzgxNSwxNyBAQAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pCiAJCWtleV9pZHggPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSk7CiAKLQlpZiAoa2V5X2lkeCA+IDMpCisJaWYgKGtleV9pZHggPiA1KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkKIAkJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byB1bmxvY2tfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmdldF9rZXkpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CkBAIC03NzQsMTAgKzg1Myw4IEBACiAJaWYgKG1hY19hZGRyKQogCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9BVFRSX01BQywgRVRIX0FMRU4sIG1hY19hZGRyKTsKIAotCXJ0bmxfbG9jaygpOwogCWVyciA9IGRydi0+b3BzLT5nZXRfa2V5KCZkcnYtPndpcGh5LCBkZXYsIGtleV9pZHgsIG1hY19hZGRyLAogCQkJCSZjb29raWUsIGdldF9rZXlfY2FsbGJhY2spOwotCXJ0bmxfdW5sb2NrKCk7CiAKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKQEAgLTc5NSw2ICs4NzIsOSBAQAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04MDQsMzUgKzg4NCw1MCBAQAogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1OCBrZXlfaWR4OworCWludCAoKmZ1bmMpKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCSAgICB1OCBrZXlfaW5kZXgpOwogCiAJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pCiAJCXJldHVybiAtRUlOVkFMOwogCiAJa2V5X2lkeCA9IG5sYV9nZXRfdTgoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9JRFhdKTsKIAotCWlmIChrZXlfaWR4ID4gMykKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUX01HTVRdKSB7CisJCWlmIChrZXlfaWR4IDwgNCB8fCBrZXlfaWR4ID4gNSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSBpZiAoa2V5X2lkeCA+IDMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogY3VycmVudGx5IG9ubHkgc3VwcG9ydCBzZXR0aW5nIGRlZmF1bHQga2V5ICovCi0JaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0RFRkFVTFRdKQorCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUXSAmJgorCSAgICAhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0tFWV9ERUZBVUxUX01HTVRdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIHVubG9ja19ydG5sOwogCi0JaWYgKCFkcnYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5KSB7CisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfREVGQVVMVF0pCisJCWZ1bmMgPSBkcnYtPm9wcy0+c2V0X2RlZmF1bHRfa2V5OworCWVsc2UKKwkJZnVuYyA9IGRydi0+b3BzLT5zZXRfZGVmYXVsdF9tZ210X2tleTsKKworCWlmICghZnVuYykgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7Ci0JZXJyID0gZHJ2LT5vcHMtPnNldF9kZWZhdWx0X2tleSgmZHJ2LT53aXBoeSwgZGV2LCBrZXlfaWR4KTsKLQlydG5sX3VubG9jaygpOworCWVyciA9IGZ1bmMoJmRydi0+d2lwaHksIGRldiwga2V5X2lkeCk7CiAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04NjMsNyArOTU4LDcgQEAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCiAJCW1hY19hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCi0JaWYgKGtleV9pZHggPiAzKQorCWlmIChrZXlfaWR4ID4gNSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKgpAQCAtODk0LDI2ICs5ODksMzMgQEAKIAkJaWYgKHBhcmFtcy5rZXlfbGVuICE9IDEzKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CisJCWlmIChwYXJhbXMua2V5X2xlbiAhPSAxNikKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byB1bmxvY2tfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmFkZF9rZXkpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOwogCWVyciA9IGRydi0+b3BzLT5hZGRfa2V5KCZkcnYtPndpcGh5LCBkZXYsIGtleV9pZHgsIG1hY19hZGRyLCAmcGFyYW1zKTsKLQlydG5sX3VubG9jaygpOwogCiAgb3V0OgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7CisgdW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTkyOCwyOCArMTAzMCwzMiBAQAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfS0VZX0lEWF0pCiAJCWtleV9pZHggPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9LRVlfSURYXSk7CiAKLQlpZiAoa2V5X2lkeCA+IDMpCisJaWYgKGtleV9pZHggPiA1KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkKIAkJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byB1bmxvY2tfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmRlbF9rZXkpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOwogCWVyciA9IGRydi0+b3BzLT5kZWxfa2V5KCZkcnYtPndpcGh5LCBkZXYsIGtleV9pZHgsIG1hY19hZGRyKTsKLQlydG5sX3VubG9jaygpOwogCiAgb3V0OgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7CisKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtOTYzLDkgKzEwNjksMTYgQEAKIAlzdHJ1Y3QgYmVhY29uX3BhcmFtZXRlcnMgcGFyYW1zOwogCWludCBoYXZlaW5mbyA9IDA7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byB1bmxvY2tfcnRubDsKKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQogCiAJc3dpdGNoIChpbmZvLT5nZW5saGRyLT5jbWQpIHsKIAljYXNlIE5MODAyMTFfQ01EX05FV19CRUFDT046CkBAIC0xMDI2LDEzICsxMTM5LDE0IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOwogCWVyciA9IGNhbGwoJmRydi0+d2lwaHksIGRldiwgJnBhcmFtcyk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMDQyLDIyICsxMTU2LDI5IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gdW5sb2NrX3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5kZWxfYmVhY29uKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KIAllcnIgPSBkcnYtPm9wcy0+ZGVsX2JlYWNvbigmZHJ2LT53aXBoeSwgZGV2KTsKLQlydG5sX3VubG9jaygpOwogCiAgb3V0OgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7CisgdW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTExODIsNiArMTMwMywxMiBAQAogCiAJCW5sYV9uZXN0X2VuZChtc2csIHR4cmF0ZSk7CiAJfQorCWlmIChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMpCisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9TVEFfSU5GT19SWF9QQUNLRVRTLAorCQkJICAgIHNpbmZvLT5yeF9wYWNrZXRzKTsKKwlpZiAoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19UWF9QQUNLRVRTKQorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fVFhfUEFDS0VUUywKKwkJCSAgICBzaW5mby0+dHhfcGFja2V0cyk7CiAJbmxhX25lc3RfZW5kKG1zZywgc2luZm9hdHRyKTsKIAogCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CkBAIC0xMjE3LDMwICsxMzQ0LDMyIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQluZXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpZHgpOwotCWlmICghbmV0ZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKKwlydG5sX2xvY2soKTsKKworCW5ldGRldiA9IF9fZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaWR4KTsKKwlpZiAoIW5ldGRldikgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dF9ydG5sOworCX0KIAogCWRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGlmaWR4KTsKIAlpZiAoSVNfRVJSKGRldikpIHsKIAkJZXJyID0gUFRSX0VSUihkZXYpOwotCQlnb3RvIG91dF9wdXRfbmV0ZGV2OworCQlnb3RvIG91dF9ydG5sOwogCX0KIAogCWlmICghZGV2LT5vcHMtPmR1bXBfc3RhdGlvbikgewotCQllcnIgPSAtRU5PU1lTOworCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXRfZXJyOwogCX0KIAotCXJ0bmxfbG9jaygpOwotCiAJd2hpbGUgKDEpIHsKIAkJZXJyID0gZGV2LT5vcHMtPmR1bXBfc3RhdGlvbigmZGV2LT53aXBoeSwgbmV0ZGV2LCBzdGFfaWR4LAogCQkJCQkgICAgIG1hY19hZGRyLCAmc2luZm8pOwogCQlpZiAoZXJyID09IC1FTk9FTlQpCiAJCQlicmVhazsKIAkJaWYgKGVycikKLQkJCWdvdG8gb3V0X2Vycl9ydG5sOworCQkJZ290byBvdXRfZXJyOwogCiAJCWlmIChubDgwMjExX3NlbmRfc3RhdGlvbihza2IsCiAJCQkJTkVUTElOS19DQihjYi0+c2tiKS5waWQsCkBAIC0xMjU2LDEyICsxMzg1LDEwIEBACiAgb3V0OgogCWNiLT5hcmdzWzFdID0gc3RhX2lkeDsKIAllcnIgPSBza2ItPmxlbjsKLSBvdXRfZXJyX3J0bmw6Ci0JcnRubF91bmxvY2soKTsKICBvdXRfZXJyOgogCWNmZzgwMjExX3B1dF9kZXYoZGV2KTsKLSBvdXRfcHV0X25ldGRldjoKLQlkZXZfcHV0KG5ldGRldik7Cisgb3V0X3J0bmw6CisJcnRubF91bmxvY2soKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xMjgyLDE5ICsxNDA5LDE4IEBACiAKIAltYWNfYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dF9ydG5sOwogCiAJaWYgKCFkcnYtPm9wcy0+Z2V0X3N0YXRpb24pIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOwogCWVyciA9IGRydi0+b3BzLT5nZXRfc3RhdGlvbigmZHJ2LT53aXBoeSwgZGV2LCBtYWNfYWRkciwgJnNpbmZvKTsKLQlydG5sX3VubG9jaygpOwotCiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTEzMTEsMTAgKzE0MzcsMTIgQEAKIAogIG91dF9mcmVlOgogCW5sbXNnX2ZyZWUobXNnKTsKLQogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMzgyLDkgKzE1MTAsMTEgQEAKIAkJcGFyYW1zLnBsaW5rX2FjdGlvbiA9CiAJCSAgICBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfUExJTktfQUNUSU9OXSk7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWVyciA9IGdldF92bGFuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfVkxBTl0sIGRydiwgJnBhcmFtcy52bGFuKTsKIAlpZiAoZXJyKQpAQCAtMTM5NSwxNSArMTUyNSwxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+Y2hhbmdlX3N0YXRpb24oJmRydi0+d2lwaHksIGRldiwgbWFjX2FkZHIsICZwYXJhbXMpOwotCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CiAJaWYgKHBhcmFtcy52bGFuKQogCQlkZXZfcHV0KHBhcmFtcy52bGFuKTsKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNDQ1LDkgKzE1NzYsMTEgQEAKIAkJCQkmcGFyYW1zLnN0YXRpb25fZmxhZ3MpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dF9ydG5sOwogCiAJZXJyID0gZ2V0X3ZsYW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9WTEFOXSwgZHJ2LCAmcGFyYW1zLnZsYW4pOwogCWlmIChlcnIpCkBAIC0xNDU4LDE1ICsxNTkxLDIxIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCiAJZXJyID0gZHJ2LT5vcHMtPmFkZF9zdGF0aW9uKCZkcnYtPndpcGh5LCBkZXYsIG1hY19hZGRyLCAmcGFyYW1zKTsKLQlydG5sX3VubG9jaygpOwogCiAgb3V0OgogCWlmIChwYXJhbXMudmxhbikKIAkJZGV2X3B1dChwYXJhbXMudmxhbik7CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTQ4MCwyMiArMTYxOSwyNSBAQAogCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkKIAkJbWFjX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmRlbF9zdGF0aW9uKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+ZGVsX3N0YXRpb24oJmRydi0+d2lwaHksIGRldiwgbWFjX2FkZHIpOwotCXJ0bmxfdW5sb2NrKCk7CiAKICBvdXQ6CiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTU3NiwyMiArMTcxOCwyOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbmV0ZGV2ID0gZGV2X2dldF9ieV9pbmRleCgmaW5pdF9uZXQsIGlmaWR4KTsKLQlpZiAoIW5ldGRldikKLQkJcmV0dXJuIC1FTk9ERVY7CisJcnRubF9sb2NrKCk7CisKKwluZXRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCBpZmlkeCk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXRfcnRubDsKKwl9CiAKIAlkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChpZmlkeCk7CiAJaWYgKElTX0VSUihkZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGV2KTsKLQkJZ290byBvdXRfcHV0X25ldGRldjsKKwkJZ290byBvdXRfcnRubDsKIAl9CiAKIAlpZiAoIWRldi0+b3BzLT5kdW1wX21wYXRoKSB7Ci0JCWVyciA9IC1FTk9TWVM7CisJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dF9lcnI7CiAJfQogCi0JcnRubF9sb2NrKCk7CisJaWYgKG5ldGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KIAogCXdoaWxlICgxKSB7CiAJCWVyciA9IGRldi0+b3BzLT5kdW1wX21wYXRoKCZkZXYtPndpcGh5LCBuZXRkZXYsIHBhdGhfaWR4LApAQCAtMTU5OSw3ICsxNzQ4LDcgQEAKIAkJaWYgKGVyciA9PSAtRU5PRU5UKQogCQkJYnJlYWs7CiAJCWlmIChlcnIpCi0JCQlnb3RvIG91dF9lcnJfcnRubDsKKwkJCWdvdG8gb3V0X2VycjsKIAogCQlpZiAobmw4MDIxMV9zZW5kX21wYXRoKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCiAJCQkJICAgICAgIGNiLT5ubGgtPm5sbXNnX3NlcSwgTkxNX0ZfTVVMVEksCkBAIC0xNjE0LDEyICsxNzYzLDEwIEBACiAgb3V0OgogCWNiLT5hcmdzWzFdID0gcGF0aF9pZHg7CiAJZXJyID0gc2tiLT5sZW47Ci0gb3V0X2Vycl9ydG5sOgotCXJ0bmxfdW5sb2NrKCk7CiAgb3V0X2VycjoKIAljZmc4MDIxMV9wdXRfZGV2KGRldik7Ci0gb3V0X3B1dF9uZXRkZXY6Ci0JZGV2X3B1dChuZXRkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTY0MSwxOSArMTc4OCwyMyBAQAogCiAJZHN0ID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCisJcnRubF9sb2NrKCk7CisKIAllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0X3J0bmw7CiAKIAlpZiAoIWRydi0+b3BzLT5nZXRfbXBhdGgpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOwotCWVyciA9IGRydi0+b3BzLT5nZXRfbXBhdGgoJmRydi0+d2lwaHksIGRldiwgZHN0LCBuZXh0X2hvcCwgJnBpbmZvKTsKLQlydG5sX3VubG9jaygpOworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CiAKKwllcnIgPSBkcnYtPm9wcy0+Z2V0X21wYXRoKCZkcnYtPndpcGh5LCBkZXYsIGRzdCwgbmV4dF9ob3AsICZwaW5mbyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTE2NzAsMTAgKzE4MjEsMTIgQEAKIAogIG91dF9mcmVlOgogCW5sbXNnX2ZyZWUobXNnKTsKLQogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNjk0LDIyICsxODQ3LDM1IEBACiAJZHN0ID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCW5leHRfaG9wID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01QQVRIX05FWFRfSE9QXSk7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmNoYW5nZV9tcGF0aCkgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCiAJZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV9tcGF0aCgmZHJ2LT53aXBoeSwgZGV2LCBkc3QsIG5leHRfaG9wKTsKLQlydG5sX3VubG9jaygpOwogCiAgb3V0OgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7Cisgb3V0X3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiBzdGF0aWMgaW50IG5sODAyMTFfbmV3X21wYXRoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCkBAIC0xNzI5LDIyICsxODk1LDM1IEBACiAJZHN0ID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCW5leHRfaG9wID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01QQVRIX05FWFRfSE9QXSk7CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmFkZF9tcGF0aCkgewogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQogCi0JcnRubF9sb2NrKCk7CisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCiAJZXJyID0gZHJ2LT5vcHMtPmFkZF9tcGF0aCgmZHJ2LT53aXBoeSwgZGV2LCBkc3QsIG5leHRfaG9wKTsKLQlydG5sX3VubG9jaygpOwogCiAgb3V0OgogCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKIAlkZXZfcHV0KGRldik7Cisgb3V0X3J0bmw6CisJcnRubF91bmxvY2soKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE3NTgsMjIgKzE5MzcsMjUgQEAKIAlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pCiAJCWRzdCA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dF9ydG5sOwogCiAJaWYgKCFkcnYtPm9wcy0+ZGVsX21wYXRoKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKIAl9CiAKLQlydG5sX2xvY2soKTsKIAllcnIgPSBkcnYtPm9wcy0+ZGVsX21wYXRoKCZkcnYtPndpcGh5LCBkZXYsIGRzdCk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xODA2LDIyICsxOTg4LDMwIEBACiAJCQlubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9CU1NfQkFTSUNfUkFURVNdKTsKIAl9CiAKKwlydG5sX2xvY2soKTsKKwogCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBvdXRfcnRubDsKIAogCWlmICghZHJ2LT5vcHMtPmNoYW5nZV9ic3MpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gb3V0OwogCX0KIAotCXJ0bmxfbG9jaygpOworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCiAJZXJyID0gZHJ2LT5vcHMtPmNoYW5nZV9ic3MoJmRydi0+d2lwaHksIGRldiwgJnBhcmFtcyk7Ci0JcnRubF91bmxvY2soKTsKIAogIG91dDoKIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xODc2LDYgKzIwNjYsMTkgQEAKIAlpbnQgcjsKIAljaGFyICpkYXRhID0gTlVMTDsKIAorCS8qCisJICogWW91IHNob3VsZCBvbmx5IGdldCB0aGlzIHdoZW4gY2ZnODAyMTEgaGFzbid0IHlldCBpbml0aWFsaXplZAorCSAqIGNvbXBsZXRlbHkgd2hlbiBidWlsdC1pbiB0byB0aGUga2VybmVsIHJpZ2h0IGJldHdlZW4gdGhlIHRpbWUKKwkgKiB3aW5kb3cgYmV0d2VlbiBubDgwMjExX2luaXQoKSBhbmQgcmVndWxhdG9yeV9pbml0KCksIGlmIHRoYXQgaXMKKwkgKiBldmVuIHBvc3NpYmxlLgorCSAqLworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKwlpZiAodW5saWtlbHkoIWNmZzgwMjExX3JlZ2RvbWFpbikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisJCXJldHVybiAtRUlOUFJPR1JFU1M7CisJfQorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCiAJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUkVHX0FMUEhBMl0pCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xODg2LDkgKzIwODksOSBAQAogCWlmIChpc193b3JsZF9yZWdkb20oZGF0YSkpCiAJCXJldHVybiAtRUlOVkFMOwogI2VuZGlmCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKLQlyID0gX19yZWd1bGF0b3J5X2hpbnQoTlVMTCwgUkVHRE9NX1NFVF9CWV9VU0VSLCBkYXRhLCAwLCBFTlZJUk9OX0FOWSk7Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCisJciA9IHJlZ3VsYXRvcnlfaGludF91c2VyKGRhdGEpOworCiAJcmV0dXJuIHI7CiB9CiAKQEAgLTE5MDMsMTUgKzIxMDYsMjAgQEAKIAlzdHJ1Y3QgbmxhdHRyICpwaW5mb2F0dHI7CiAJc3RydWN0IHNrX2J1ZmYgKm1zZzsKIAorCXJ0bmxfbG9jaygpOworCiAJLyogTG9vayB1cCBvdXIgZGV2aWNlICovCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dF9ydG5sOworCisJaWYgKCFkcnYtPm9wcy0+Z2V0X21lc2hfcGFyYW1zKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBHZXQgdGhlIG1lc2ggcGFyYW1zICovCi0JcnRubF9sb2NrKCk7CiAJZXJyID0gZHJ2LT5vcHMtPmdldF9tZXNoX3BhcmFtcygmZHJ2LT53aXBoeSwgZGV2LCAmY3VyX3BhcmFtcyk7Ci0JcnRubF91bmxvY2soKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIApAQCAtMTk2MCwxMyArMjE2OCwxNiBAQAogCWVyciA9IGdlbmxtc2dfdW5pY2FzdChtc2csIGluZm8tPnNuZF9waWQpOwogCWdvdG8gb3V0OwogCi1ubGFfcHV0X2ZhaWx1cmU6CisgbmxhX3B1dF9mYWlsdXJlOgogCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKIAllcnIgPSAtRU1TR1NJWkU7Ci1vdXQ6Cisgb3V0OgogCS8qIENsZWFudXAgKi8KIAljZmc4MDIxMV9wdXRfZGV2KGRydik7CiAJZGV2X3B1dChkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMDEzLDkgKzIyMjQsMTYgQEAKIAkJCXBhcmVudF9hdHRyLCBubDgwMjExX21lc2hjb25mX3BhcmFtc19wb2xpY3kpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXJ0bmxfbG9jaygpOworCiAJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dF9ydG5sOworCisJaWYgKCFkcnYtPm9wcy0+c2V0X21lc2hfcGFyYW1zKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGVyZSBhcmVuJ3QgbW9yZSB0aGFuIDMyIG1lc2ggY29uZmlnCiAJICogcGFyYW1ldGVycyAob3RoZXJ3aXNlIG91ciBiaXRmaWVsZCBzY2hlbWUgd291bGQgbm90IHdvcmsuKSAqLwpAQCAtMjA1NywxOCArMjI3NSw5NSBAQAogCQkJbmxhX2dldF91MTYpOwogCiAJLyogQXBwbHkgY2hhbmdlcyAqLwotCXJ0bmxfbG9jaygpOwogCWVyciA9IGRydi0+b3BzLT5zZXRfbWVzaF9wYXJhbXMoJmRydi0+d2lwaHksIGRldiwgJmNmZywgbWFzayk7Ci0JcnRubF91bmxvY2soKTsKIAorIG91dDoKIAkvKiBjbGVhbnVwICovCiAJY2ZnODAyMTFfcHV0X2RldihkcnYpOwogCWRldl9wdXQoZGV2KTsKKyBvdXRfcnRubDoKKwlydG5sX3VubG9jaygpOworCiAJcmV0dXJuIGVycjsKIH0KIAogI3VuZGVmIEZJTExfSU5fTUVTSF9QQVJBTV9JRl9TRVQKIAorc3RhdGljIGludCBubDgwMjExX2dldF9yZWcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKmhkciA9IE5VTEw7CisJc3RydWN0IG5sYXR0ciAqbmxfcmVnX3J1bGVzOworCXVuc2lnbmVkIGludCBpOworCWludCBlcnIgPSAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJaWYgKCFjZmc4MDIxMV9yZWdkb21haW4pCisJCWdvdG8gb3V0OworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykgeworCQllcnIgPSAtRU5PQlVGUzsKKwkJZ290byBvdXQ7CisJfQorCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBpbmZvLT5zbmRfcGlkLCBpbmZvLT5zbmRfc2VxLCAwLAorCQkJICAgICBOTDgwMjExX0NNRF9HRVRfUkVHKTsKKwlpZiAoIWhkcikKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlOTEFfUFVUX1NUUklORyhtc2csIE5MODAyMTFfQVRUUl9SRUdfQUxQSEEyLAorCQljZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMik7CisKKwlubF9yZWdfcnVsZXMgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9SRUdfUlVMRVMpOworCWlmICghbmxfcmVnX3J1bGVzKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCWZvciAoaSA9IDA7IGkgPCBjZmc4MDIxMV9yZWdkb21haW4tPm5fcmVnX3J1bGVzOyBpKyspIHsKKwkJc3RydWN0IG5sYXR0ciAqbmxfcmVnX3J1bGU7CisJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJlZ19ydWxlOworCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgKmZyZXFfcmFuZ2U7CisJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcG93ZXJfcnVsZTsKKworCQlyZWdfcnVsZSA9ICZjZmc4MDIxMV9yZWdkb21haW4tPnJlZ19ydWxlc1tpXTsKKwkJZnJlcV9yYW5nZSA9ICZyZWdfcnVsZS0+ZnJlcV9yYW5nZTsKKwkJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKKworCQlubF9yZWdfcnVsZSA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgaSk7CisJCWlmICghbmxfcmVnX3J1bGUpCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9SRUdfUlVMRV9GTEFHUywKKwkJCXJlZ19ydWxlLT5mbGFncyk7CisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfU1RBUlQsCisJCQlmcmVxX3JhbmdlLT5zdGFydF9mcmVxX2toeik7CisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfRU5ELAorCQkJZnJlcV9yYW5nZS0+ZW5kX2ZyZXFfa2h6KTsKKwkJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfRlJFUV9SQU5HRV9NQVhfQlcsCisJCQlmcmVxX3JhbmdlLT5tYXhfYmFuZHdpZHRoX2toeik7CisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1BPV0VSX1JVTEVfTUFYX0FOVF9HQUlOLAorCQkJcG93ZXJfcnVsZS0+bWF4X2FudGVubmFfZ2Fpbik7CisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1BPV0VSX1JVTEVfTUFYX0VJUlAsCisJCQlwb3dlcl9ydWxlLT5tYXhfZWlycCk7CisKKwkJbmxhX25lc3RfZW5kKG1zZywgbmxfcmVnX3J1bGUpOworCX0KKworCW5sYV9uZXN0X2VuZChtc2csIG5sX3JlZ19ydWxlcyk7CisKKwlnZW5sbXNnX2VuZChtc2csIGhkcik7CisJZXJyID0gZ2VubG1zZ191bmljYXN0KG1zZywgaW5mby0+c25kX3BpZCk7CisJZ290byBvdXQ7CisKK25sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJZXJyID0gLUVNU0dTSVpFOworb3V0OgorCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcmVnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG5sYXR0ciAqdGJbTkw4MDIxMV9SRUdfUlVMRV9BVFRSX01BWCArIDFdOwpAQCAtMjEyNCw5ICsyNDE5LDkgQEAKIAogCUJVR19PTihydWxlX2lkeCAhPSBudW1fcnVsZXMpOwogCi0JbXV0ZXhfbG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CiAJciA9IHNldF9yZWdkb20ocmQpOwotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIAlyZXR1cm4gcjsKIAogIGJhZF9yZWc6CkBAIC0yMTM0LDYgKzI0MjksNTUzIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgbmw4MDIxMV90cmlnZ2VyX3NjYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3Q7CisJc3RydWN0IGNmZzgwMjExX3NzaWQgKnNzaWQ7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOworCXN0cnVjdCBubGF0dHIgKmF0dHI7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlpbnQgZXJyLCB0bXAsIG5fc3NpZHMgPSAwLCBuX2NoYW5uZWxzID0gMCwgaTsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJc2l6ZV90IGllX2xlbjsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9ydG5sOworCisJd2lwaHkgPSAmZHJ2LT53aXBoeTsKKworCWlmICghZHJ2LT5vcHMtPnNjYW4pIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRydi0+c2Nhbl9yZXEpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdKSB7CisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdLCB0bXApCisJCQluX2NoYW5uZWxzKys7CisJCWlmICghbl9jaGFubmVscykgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykKKwkJCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQkJbl9jaGFubmVscyArPSB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSkKKwkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10sIHRtcCkKKwkJCW5fc3NpZHMrKzsKKworCWlmIChuX3NzaWRzID4gd2lwaHktPm1heF9zY2FuX3NzaWRzKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKQorCQlpZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCWVsc2UKKwkJaWVfbGVuID0gMDsKKworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZigqcmVxdWVzdCkKKwkJCSsgc2l6ZW9mKCpzc2lkKSAqIG5fc3NpZHMKKwkJCSsgc2l6ZW9mKGNoYW5uZWwpICogbl9jaGFubmVscworCQkJKyBpZV9sZW4sIEdGUF9LRVJORUwpOworCWlmICghcmVxdWVzdCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXF1ZXN0LT5jaGFubmVscyA9ICh2b2lkICopKChjaGFyICopcmVxdWVzdCArIHNpemVvZigqcmVxdWVzdCkpOworCXJlcXVlc3QtPm5fY2hhbm5lbHMgPSBuX2NoYW5uZWxzOworCWlmIChuX3NzaWRzKQorCQlyZXF1ZXN0LT5zc2lkcyA9ICh2b2lkICopKHJlcXVlc3QtPmNoYW5uZWxzICsgbl9jaGFubmVscyk7CisJcmVxdWVzdC0+bl9zc2lkcyA9IG5fc3NpZHM7CisJaWYgKGllX2xlbikgeworCQlpZiAocmVxdWVzdC0+c3NpZHMpCisJCQlyZXF1ZXN0LT5pZSA9ICh2b2lkICopKHJlcXVlc3QtPnNzaWRzICsgbl9zc2lkcyk7CisJCWVsc2UKKwkJCXJlcXVlc3QtPmllID0gKHZvaWQgKikocmVxdWVzdC0+Y2hhbm5lbHMgKyBuX2NoYW5uZWxzKTsKKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdKSB7CisJCS8qIHVzZXIgc3BlY2lmaWVkLCBiYWlsIG91dCBpZiBjaGFubmVsIG5vdCBmb3VuZCAqLworCQlyZXF1ZXN0LT5uX2NoYW5uZWxzID0gbl9jaGFubmVsczsKKwkJaSA9IDA7CisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fRlJFUVVFTkNJRVNdLCB0bXApIHsKKwkJCXJlcXVlc3QtPmNoYW5uZWxzW2ldID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHdpcGh5LCBubGFfZ2V0X3UzMihhdHRyKSk7CisJCQlpZiAoIXJlcXVlc3QtPmNoYW5uZWxzW2ldKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dF9mcmVlOworCQkJfQorCQkJaSsrOworCQl9CisJfSBlbHNlIHsKKwkJLyogYWxsIGNoYW5uZWxzICovCisJCWkgPSAwOworCQlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCQlpbnQgajsKKwkJCWlmICghd2lwaHktPmJhbmRzW2JhbmRdKQorCQkJCWNvbnRpbnVlOworCQkJZm9yIChqID0gMDsgaiA8IHdpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsgaisrKSB7CisJCQkJcmVxdWVzdC0+Y2hhbm5lbHNbaV0gPSAmd2lwaHktPmJhbmRzW2JhbmRdLT5jaGFubmVsc1tqXTsKKwkJCQlpKys7CisJCQl9CisJCX0KKwl9CisKKwlpID0gMDsKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdKSB7CisJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLCB0bXApIHsKKwkJCWlmIChyZXF1ZXN0LT5zc2lkc1tpXS5zc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQl9CisJCQltZW1jcHkocmVxdWVzdC0+c3NpZHNbaV0uc3NpZCwgbmxhX2RhdGEoYXR0ciksIG5sYV9sZW4oYXR0cikpOworCQkJcmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4gPSBubGFfbGVuKGF0dHIpOworCQkJaSsrOworCQl9CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKKwkJcmVxdWVzdC0+aWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwkJbWVtY3B5KHJlcXVlc3QtPmllLCBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSwKKwkJICAgICAgIHJlcXVlc3QtPmllX2xlbik7CisJfQorCisJcmVxdWVzdC0+aWZpZHggPSBkZXYtPmlmaW5kZXg7CisJcmVxdWVzdC0+d2lwaHkgPSAmZHJ2LT53aXBoeTsKKworCWRydi0+c2Nhbl9yZXEgPSByZXF1ZXN0OworCWVyciA9IGRydi0+b3BzLT5zY2FuKCZkcnYtPndpcGh5LCBkZXYsIHJlcXVlc3QpOworCisgb3V0X2ZyZWU6CisJaWYgKGVycikgeworCQlkcnYtPnNjYW5fcmVxID0gTlVMTDsKKwkJa2ZyZWUocmVxdWVzdCk7CisJfQorIG91dDoKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOworIG91dF9ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfc2VuZF9ic3Moc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGZsYWdzLAorCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBjZmc4MDIxMV9ic3MgKnJlcykKK3sKKwl2b2lkICpoZHI7CisJc3RydWN0IG5sYXR0ciAqYnNzOworCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBwaWQsIHNlcSwgZmxhZ3MsCisJCQkgICAgIE5MODAyMTFfQ01EX05FV19TQ0FOX1JFU1VMVFMpOworCWlmICghaGRyKQorCQlyZXR1cm4gLTE7CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9TQ0FOX0dFTkVSQVRJT04sCisJCSAgICByZGV2LT5ic3NfZ2VuZXJhdGlvbik7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgZGV2LT5pZmluZGV4KTsKKworCWJzcyA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9BVFRSX0JTUyk7CisJaWYgKCFic3MpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCWlmICghaXNfemVyb19ldGhlcl9hZGRyKHJlcy0+YnNzaWQpKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9CU1NfQlNTSUQsIEVUSF9BTEVOLCByZXMtPmJzc2lkKTsKKwlpZiAocmVzLT5pbmZvcm1hdGlvbl9lbGVtZW50cyAmJiByZXMtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cykKKwkJTkxBX1BVVChtc2csIE5MODAyMTFfQlNTX0lORk9STUFUSU9OX0VMRU1FTlRTLAorCQkJcmVzLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQlyZXMtPmluZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZiAocmVzLT50c2YpCisJCU5MQV9QVVRfVTY0KG1zZywgTkw4MDIxMV9CU1NfVFNGLCByZXMtPnRzZik7CisJaWYgKHJlcy0+YmVhY29uX2ludGVydmFsKQorCQlOTEFfUFVUX1UxNihtc2csIE5MODAyMTFfQlNTX0JFQUNPTl9JTlRFUlZBTCwgcmVzLT5iZWFjb25faW50ZXJ2YWwpOworCU5MQV9QVVRfVTE2KG1zZywgTkw4MDIxMV9CU1NfQ0FQQUJJTElUWSwgcmVzLT5jYXBhYmlsaXR5KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQlNTX0ZSRVFVRU5DWSwgcmVzLT5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisKKwlzd2l0Y2ggKHJkZXYtPndpcGh5LnNpZ25hbF90eXBlKSB7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06CisJCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9CU1NfU0lHTkFMX01CTSwgcmVzLT5zaWduYWwpOworCQlicmVhazsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzoKKwkJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQlNTX1NJR05BTF9VTlNQRUMsIHJlcy0+c2lnbmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbmxhX25lc3RfZW5kKG1zZywgYnNzKTsKKworCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9kdW1wX3NjYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqc2NhbjsKKwlpbnQgaWZpZHggPSBjYi0+YXJnc1swXTsKKwlpbnQgc3RhcnQgPSBjYi0+YXJnc1sxXSwgaWR4ID0gMDsKKwlpbnQgZXJyOworCisJaWYgKCFpZmlkeCkgeworCQllcnIgPSBubG1zZ19wYXJzZShjYi0+bmxoLCBHRU5MX0hEUkxFTiArIG5sODAyMTFfZmFtLmhkcnNpemUsCisJCQkJICBubDgwMjExX2ZhbS5hdHRyYnVmLCBubDgwMjExX2ZhbS5tYXhhdHRyLAorCQkJCSAgbmw4MDIxMV9wb2xpY3kpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlpZiAoIW5sODAyMTFfZmFtLmF0dHJidWZbTkw4MDIxMV9BVFRSX0lGSU5ERVhdKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWZpZHggPSBubGFfZ2V0X3UzMihubDgwMjExX2ZhbS5hdHRyYnVmW05MODAyMTFfQVRUUl9JRklOREVYXSk7CisJCWlmICghaWZpZHgpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY2ItPmFyZ3NbMF0gPSBpZmlkeDsKKwl9CisKKwluZXRkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgaWZpZHgpOworCWlmICghbmV0ZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGlmaWR4KTsKKwlpZiAoSVNfRVJSKGRldikpIHsKKwkJZXJyID0gUFRSX0VSUihkZXYpOworCQlnb3RvIG91dF9wdXRfbmV0ZGV2OworCX0KKworCXNwaW5fbG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisJY2ZnODAyMTFfYnNzX2V4cGlyZShkZXYpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShzY2FuLCAmZGV2LT5ic3NfbGlzdCwgbGlzdCkgeworCQlpZiAoKytpZHggPD0gc3RhcnQpCisJCQljb250aW51ZTsKKwkJaWYgKG5sODAyMTFfc2VuZF9ic3Moc2tiLAorCQkJCU5FVExJTktfQ0IoY2ItPnNrYikucGlkLAorCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwgTkxNX0ZfTVVMVEksCisJCQkJZGV2LCBuZXRkZXYsICZzY2FuLT5wdWIpIDwgMCkgeworCQkJaWR4LS07CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworIG91dDoKKwlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisKKwljYi0+YXJnc1sxXSA9IGlkeDsKKwllcnIgPSBza2ItPmxlbjsKKwljZmc4MDIxMV9wdXRfZGV2KGRldik7Cisgb3V0X3B1dF9uZXRkZXY6CisJZGV2X3B1dChuZXRkZXYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGJvb2wgbmw4MDIxMV92YWxpZF9hdXRoX3R5cGUoZW51bSBubDgwMjExX2F1dGhfdHlwZSBhdXRoX3R5cGUpCit7CisJcmV0dXJuIGF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNIHx8CisJCWF1dGhfdHlwZSA9PSBOTDgwMjExX0FVVEhUWVBFX1NIQVJFRF9LRVkgfHwKKwkJYXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfRlQgfHwKKwkJYXV0aF90eXBlID09IE5MODAyMTFfQVVUSFRZUEVfTkVUV09SS19FQVA7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBjZmc4MDIxMV9hdXRoX3JlcXVlc3QgcmVxOworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJaW50IGVycjsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X2Rydl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8tPmF0dHJzLCAmZHJ2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19ydG5sOworCisJaWYgKCFkcnYtPm9wcy0+YXV0aCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwl3aXBoeSA9ICZkcnYtPndpcGh5OworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisKKwlyZXEucGVlcl9hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSkgeworCQlyZXEuY2hhbiA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbCgKKwkJCXdpcGh5LAorCQkJbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSk7CisJCWlmICghcmVxLmNoYW4pIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pIHsKKwkJcmVxLnNzaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOworCQlyZXEuc3NpZF9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TU0lEXSk7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKKwkJcmVxLmllID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCXJlcS5pZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQVVUSF9UWVBFXSkgeworCQlyZXEuYXV0aF90eXBlID0KKwkJCW5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9BVVRIX1RZUEVdKTsKKwkJaWYgKCFubDgwMjExX3ZhbGlkX2F1dGhfdHlwZShyZXEuYXV0aF90eXBlKSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJZXJyID0gZHJ2LT5vcHMtPmF1dGgoJmRydi0+d2lwaHksIGRldiwgJnJlcSk7CisKK291dDoKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOwordW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfYXNzb2NfcmVxdWVzdCByZXE7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlpbnQgZXJyOworCisJcnRubF9sb2NrKCk7CisKKwllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwlpZiAoIWRydi0+b3BzLT5hc3NvYykgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSB8fAorCSAgICAhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXdpcGh5ID0gJmRydi0+d2lwaHk7CisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKworCXJlcS5wZWVyX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKSB7CisJCXJlcS5jaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKAorCQkJd2lwaHksCisJCQlubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pKTsKKwkJaWYgKCFyZXEuY2hhbikgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJcmVxLnNzaWQgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1NJRF0pOworCXJlcS5zc2lkX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NTSURdKTsKKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKSB7CisJCXJlcS5pZSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCQlyZXEuaWVfbGVuID0gbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwl9CisKKwllcnIgPSBkcnYtPm9wcy0+YXNzb2MoJmRydi0+d2lwaHksIGRldiwgJnJlcSk7CisKK291dDoKKwljZmc4MDIxMV9wdXRfZGV2KGRydik7CisJZGV2X3B1dChkZXYpOwordW5sb2NrX3J0bmw6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfZGVhdXRoZW50aWNhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCByZXE7CisJc3RydWN0IHdpcGh5ICp3aXBoeTsKKwlpbnQgZXJyOworCisJcnRubF9sb2NrKCk7CisKKwllcnIgPSBnZXRfZHJ2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mby0+YXR0cnMsICZkcnYsICZkZXYpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwlpZiAoIWRydi0+b3BzLT5kZWF1dGgpIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJd2lwaHkgPSAmZHJ2LT53aXBoeTsKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworCisJcmVxLnBlZXJfYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKTsKKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUkVBU09OX0NPREVdKSB7CisJCXJlcS5yZWFzb25fY29kZSA9CisJCQlubGFfZ2V0X3UxNihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUkVBU09OX0NPREVdKTsKKwkJaWYgKHJlcS5yZWFzb25fY29kZSA9PSAwKSB7CisJCQkvKiBSZWFzb24gQ29kZSAwIGlzIHJlc2VydmVkICovCisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSkgeworCQlyZXEuaWUgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfSUVdKTsKKwkJcmVxLmllX2xlbiA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJfQorCisJZXJyID0gZHJ2LT5vcHMtPmRlYXV0aCgmZHJ2LT53aXBoeSwgZGV2LCAmcmVxKTsKKworb3V0OgorCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwlkZXZfcHV0KGRldik7Cit1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9kaXNhc3NvY2lhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBjZmc4MDIxMV9kaXNhc3NvY19yZXF1ZXN0IHJlcTsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCWludCBlcnI7CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9kcnZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLT5hdHRycywgJmRydiwgJmRldik7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2tfcnRubDsKKworCWlmICghZHJ2LT5vcHMtPmRpc2Fzc29jKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJZXJyID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9NQUNdKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXdpcGh5ID0gJmRydi0+d2lwaHk7CisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKworCXJlcS5wZWVyX2FkZHIgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTUFDXSk7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFXSkgeworCQlyZXEucmVhc29uX2NvZGUgPQorCQkJbmxhX2dldF91MTYoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1JFQVNPTl9DT0RFXSk7CisJCWlmIChyZXEucmVhc29uX2NvZGUgPT0gMCkgeworCQkJLyogUmVhc29uIENvZGUgMCBpcyByZXNlcnZlZCAqLworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pIHsKKwkJcmVxLmllID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0lFXSk7CisJCXJlcS5pZV9sZW4gPSBubGFfbGVuKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9JRV0pOworCX0KKworCWVyciA9IGRydi0+b3BzLT5kaXNhc3NvYygmZHJ2LT53aXBoeSwgZGV2LCAmcmVxKTsKKworb3V0OgorCWNmZzgwMjExX3B1dF9kZXYoZHJ2KTsKKwlkZXZfcHV0KGRldik7Cit1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgbmw4MDIxMV9vcHNbXSA9IHsKIAl7CiAJCS5jbWQgPSBOTDgwMjExX0NNRF9HRVRfV0lQSFksCkBAIC0yMjIwLDcgKzMwNjIsNiBAQAogCQkuZG9pdCA9IG5sODAyMTFfZ2V0X3N0YXRpb24sCiAJCS5kdW1waXQgPSBubDgwMjExX2R1bXBfc3RhdGlvbiwKIAkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAotCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCiAJfSwKIAl7CiAJCS5jbWQgPSBOTDgwMjExX0NNRF9TRVRfU1RBVElPTiwKQEAgLTIyNzIsNiArMzExMywxMiBAQAogCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCiAJfSwKIAl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9HRVRfUkVHLAorCQkuZG9pdCA9IG5sODAyMTFfZ2V0X3JlZywKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkvKiBjYW4gYmUgcmV0cmlldmVkIGJ5IHVucHJpdmlsZWdlZCB1c2VycyAqLworCX0sCisJewogCQkuY21kID0gTkw4MDIxMV9DTURfU0VUX1JFRywKIAkJLmRvaXQgPSBubDgwMjExX3NldF9yZWcsCiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKQEAgLTIyOTUsMTIgKzMxNDIsNTYgQEAKIAkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAogCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCiAJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9UUklHR0VSX1NDQU4sCisJCS5kb2l0ID0gbmw4MDIxMV90cmlnZ2VyX3NjYW4sCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1NDQU4sCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmR1bXBpdCA9IG5sODAyMTFfZHVtcF9zY2FuLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfQVVUSEVOVElDQVRFLAorCQkuZG9pdCA9IG5sODAyMTFfYXV0aGVudGljYXRlLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0FTU09DSUFURSwKKwkJLmRvaXQgPSBubDgwMjExX2Fzc29jaWF0ZSwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9ERUFVVEhFTlRJQ0FURSwKKwkJLmRvaXQgPSBubDgwMjExX2RlYXV0aGVudGljYXRlLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0RJU0FTU09DSUFURSwKKwkJLmRvaXQgPSBubDgwMjExX2Rpc2Fzc29jaWF0ZSwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKK307CitzdGF0aWMgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfbWxtZV9tY2dycCA9IHsKKwkubmFtZSA9ICJtbG1lIiwKIH07CiAKIC8qIG11bHRpY2FzdCBncm91cHMgKi8KIHN0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgbmw4MDIxMV9jb25maWdfbWNncnAgPSB7CiAJLm5hbWUgPSAiY29uZmlnIiwKIH07CitzdGF0aWMgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfc2Nhbl9tY2dycCA9IHsKKwkubmFtZSA9ICJzY2FuIiwKK307CitzdGF0aWMgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfcmVndWxhdG9yeV9tY2dycCA9IHsKKwkubmFtZSA9ICJyZWd1bGF0b3J5IiwKK307CiAKIC8qIG5vdGlmaWNhdGlvbiBmdW5jdGlvbnMgKi8KIApAQCAtMjMyMCw2ICszMjExLDE4NiBAQAogCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9jb25maWdfbWNncnAuaWQsIEdGUF9LRVJORUwpOwogfQogCitzdGF0aWMgaW50IG5sODAyMTFfc2VuZF9zY2FuX2RvbmVtc2coc3RydWN0IHNrX2J1ZmYgKm1zZywKKwkJCQkgICAgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgICB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgZmxhZ3MsCisJCQkJICAgIHUzMiBjbWQpCit7CisJdm9pZCAqaGRyOworCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBwaWQsIHNlcSwgZmxhZ3MsIGNtZCk7CisJaWYgKCFoZHIpCisJCXJldHVybiAtMTsKKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZGV2LT53aXBoeV9pZHgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIG5ldGRldi0+aWZpbmRleCk7CisKKwkvKiBYWFg6IHdlIHNob3VsZCBwcm9iYWJseSBib3VuY2UgYmFjayB0aGUgcmVxdWVzdD8gKi8KKworCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3NjYW5fZG9uZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaWYgKG5sODAyMTFfc2VuZF9zY2FuX2RvbmVtc2cobXNnLCByZGV2LCBuZXRkZXYsIDAsIDAsIDAsCisJCQkJICAgICAgTkw4MDIxMV9DTURfTkVXX1NDQU5fUkVTVUxUUykgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9zY2FuX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfc2Nhbl9hYm9ydGVkKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBza19idWZmICptc2c7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwlpZiAobmw4MDIxMV9zZW5kX3NjYW5fZG9uZW1zZyhtc2csIHJkZXYsIG5ldGRldiwgMCwgMCwgMCwKKwkJCQkgICAgICBOTDgwMjExX0NNRF9TQ0FOX0FCT1JURUQpIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdChtc2csIDAsIG5sODAyMTFfc2Nhbl9tY2dycC5pZCwgR0ZQX0tFUk5FTCk7Cit9CisKKy8qCisgKiBUaGlzIGNhbiBoYXBwZW4gb24gZ2xvYmFsIHJlZ3VsYXRvcnkgY2hhbmdlcyBvciBkZXZpY2Ugc3BlY2lmaWMgc2V0dGluZ3MKKyAqIGJhc2VkIG9uIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbnMuCisgKi8KK3ZvaWQgbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKmhkcjsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgMCwgMCwgMCwgTkw4MDIxMV9DTURfUkVHX0NIQU5HRSk7CisJaWYgKCFoZHIpIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJLyogVXNlcnNwYWNlIGNhbiBhbHdheXMgY291bnQgdGhpcyBvbmUgYWx3YXlzIGJlaW5nIHNldCAqLworCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfUkVHX0lOSVRJQVRPUiwgcmVxdWVzdC0+aW5pdGlhdG9yKTsKKworCWlmIChyZXF1ZXN0LT5hbHBoYTJbMF0gPT0gJzAnICYmIHJlcXVlc3QtPmFscGhhMlsxXSA9PSAnMCcpCisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfUkVHX1RZUEUsCisJCQkgICBOTDgwMjExX1JFR0RPTV9UWVBFX1dPUkxEKTsKKwllbHNlIGlmIChyZXF1ZXN0LT5hbHBoYTJbMF0gPT0gJzknICYmIHJlcXVlc3QtPmFscGhhMlsxXSA9PSAnOScpCisJCU5MQV9QVVRfVTgobXNnLCBOTDgwMjExX0FUVFJfUkVHX1RZUEUsCisJCQkgICBOTDgwMjExX1JFR0RPTV9UWVBFX0NVU1RPTV9XT1JMRCk7CisJZWxzZSBpZiAoKHJlcXVlc3QtPmFscGhhMlswXSA9PSAnOScgJiYgcmVxdWVzdC0+YWxwaGEyWzFdID09ICc4JykgfHwKKwkJIHJlcXVlc3QtPmludGVyc2VjdCkKKwkJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9SRUdfVFlQRSwKKwkJCSAgIE5MODAyMTFfUkVHRE9NX1RZUEVfSU5URVJTRUNUSU9OKTsKKwllbHNlIHsKKwkJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9SRUdfVFlQRSwKKwkJCSAgIE5MODAyMTFfUkVHRE9NX1RZUEVfQ09VTlRSWSk7CisJCU5MQV9QVVRfU1RSSU5HKG1zZywgTkw4MDIxMV9BVFRSX1JFR19BTFBIQTIsIHJlcXVlc3QtPmFscGhhMik7CisJfQorCisJaWYgKHdpcGh5X2lkeF92YWxpZChyZXF1ZXN0LT53aXBoeV9pZHgpKQorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgcmVxdWVzdC0+d2lwaHlfaWR4KTsKKworCWlmIChnZW5sbXNnX2VuZChtc2csIGhkcikgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9yZWd1bGF0b3J5X21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKKworCXJldHVybjsKKworbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlubG1zZ19mcmVlKG1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIG5sODAyMTFfc2VuZF9tbG1lX2V2ZW50KHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJCQkgICAgZW51bSBubDgwMjExX2NvbW1hbmRzIGNtZCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKmhkcjsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybjsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgMCwgMCwgMCwgY21kKTsKKwlpZiAoIWhkcikgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgcmRldi0+d2lwaHlfaWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBuZXRkZXYtPmlmaW5kZXgpOworCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfRlJBTUUsIGxlbiwgYnVmKTsKKworCWlmIChnZW5sbXNnX2VuZChtc2csIGhkcikgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBHRlBfS0VSTkVMKTsKKwlyZXR1cm47CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOworCW5sbXNnX2ZyZWUobXNnKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfcnhfYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pCit7CisJbmw4MDIxMV9zZW5kX21sbWVfZXZlbnQocmRldiwgbmV0ZGV2LCBidWYsIGxlbiwKKwkJCQlOTDgwMjExX0NNRF9BVVRIRU5USUNBVEUpOworfQorCit2b2lkIG5sODAyMTFfc2VuZF9yeF9hc3NvYyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYnVmLAorCQkJICAgc2l6ZV90IGxlbikKK3sKKwlubDgwMjExX3NlbmRfbWxtZV9ldmVudChyZGV2LCBuZXRkZXYsIGJ1ZiwgbGVuLCBOTDgwMjExX0NNRF9BU1NPQ0lBVEUpOworfQorCit2b2lkIG5sODAyMTFfc2VuZF9yeF9kZWF1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGNvbnN0IHU4ICpidWYsCisJCQkgICAgc2l6ZV90IGxlbikKK3sKKwlubDgwMjExX3NlbmRfbWxtZV9ldmVudChyZGV2LCBuZXRkZXYsIGJ1ZiwgbGVuLAorCQkJCU5MODAyMTFfQ01EX0RFQVVUSEVOVElDQVRFKTsKK30KKwordm9pZCBubDgwMjExX3NlbmRfcnhfZGlzYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3QgdTggKmJ1ZiwKKwkJCSAgICAgIHNpemVfdCBsZW4pCit7CisJbmw4MDIxMV9zZW5kX21sbWVfZXZlbnQocmRldiwgbmV0ZGV2LCBidWYsIGxlbiwKKwkJCQlOTDgwMjExX0NNRF9ESVNBU1NPQ0lBVEUpOworfQorCiAvKiBpbml0aWFsaXNhdGlvbi9leGl0IGZ1bmN0aW9ucyAqLwogCiBpbnQgbmw4MDIxMV9pbml0KHZvaWQpCkBAIC0yMzQwLDYgKzM0MTEsMTggQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7CiAKKwllcnIgPSBnZW5sX3JlZ2lzdGVyX21jX2dyb3VwKCZubDgwMjExX2ZhbSwgJm5sODAyMTFfc2Nhbl9tY2dycCk7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJZXJyID0gZ2VubF9yZWdpc3Rlcl9tY19ncm91cCgmbmw4MDIxMV9mYW0sICZubDgwMjExX3JlZ3VsYXRvcnlfbWNncnApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCWVyciA9IGdlbmxfcmVnaXN0ZXJfbWNfZ3JvdXAoJm5sODAyMTFfZmFtLCAmbmw4MDIxMV9tbG1lX21jZ3JwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ7CisKIAlyZXR1cm4gMDsKICBlcnJfb3V0OgogCWdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoJm5sODAyMTFfZmFtKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9ubDgwMjExLmggYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCmluZGV4IGYzZWE1YzAuLmI3N2FmNGEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9ubDgwMjExLmgKKysrIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuaApAQCAtMywyMiArMywyNSBAQAogCiAjaW5jbHVkZSAiY29yZS5oIgogCi0jaWZkZWYgQ09ORklHX05MODAyMTEKIGV4dGVybiBpbnQgbmw4MDIxMV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbmw4MDIxMV9leGl0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbmw4MDIxMV9ub3RpZnlfZGV2X3JlbmFtZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG5sODAyMTFfaW5pdCh2b2lkKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSB2b2lkIG5sODAyMTFfZXhpdCh2b2lkKQotewotfQotc3RhdGljIGlubGluZSB2b2lkIG5sODAyMTFfbm90aWZ5X2Rldl9yZW5hbWUoCi0Jc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2KQotewotfQotI2VuZGlmIC8qIENPTkZJR19OTDgwMjExICovCitleHRlcm4gdm9pZCBubDgwMjExX3NlbmRfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2V4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9zY2FuX2Fib3J0ZWQoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCk7CitleHRlcm4gdm9pZCBubDgwMjExX3NlbmRfcnhfYXV0aChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOworZXh0ZXJuIHZvaWQgbmw4MDIxMV9zZW5kX3J4X2Fzc29jKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuKTsKK2V4dGVybiB2b2lkIG5sODAyMTFfc2VuZF9yeF9kZWF1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbik7CitleHRlcm4gdm9pZCBubDgwMjExX3NlbmRfcnhfZGlzYXNzb2Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4pOwogCiAjZW5kaWYgLyogX19ORVRfV0lSRUxFU1NfTkw4MDIxMV9IICovCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmMgYi9uZXQvd2lyZWxlc3MvcmVnLmMKaW5kZXggYmQwYTE2Yy4uNjMyN2UxNiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3JlZy5jCisrKyBiL25ldC93aXJlbGVzcy9yZWcuYwpAQCAtNDEsMzggKzQxLDcgQEAKICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAicmVnLmgiCi0KLS8qKgotICogc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAtIHJlY2VpcHQgb2YgbGFzdCByZWd1bGF0b3J5IHJlcXVlc3QKLSAqCi0gKiBAd2lwaHk6IHRoaXMgaXMgc2V0IGlmIHRoaXMgcmVxdWVzdCdzIGluaXRpYXRvciBpcwotICogCSVSRUdET01fU0VUX0JZX0NPVU5UUllfSUUgb3IgJVJFR0RPTV9TRVRfQllfRFJJVkVSLiBUaGlzCi0gKiAJY2FuIGJlIHVzZWQgYnkgdGhlIHdpcmVsZXNzIGNvcmUgdG8gZGVhbCB3aXRoIGNvbmZsaWN0cwotICogCWFuZCBwb3RlbnRpYWxseSBpbmZvcm0gdXNlcnMgb2Ygd2hpY2ggZGV2aWNlcyBzcGVjaWZpY2FsbHkKLSAqIAljYXNlZCB0aGUgY29uZmxpY3RzLgotICogQGluaXRpYXRvcjogaW5kaWNhdGVzIHdobyBzZW50IHRoaXMgcmVxdWVzdCwgY291bGQgYmUgYW55IG9mCi0gKiAJb2YgdGhvc2Ugc2V0IGluIHJlZ19zZXRfYnksICVSRUdET01fU0VUX0JZXyoKLSAqIEBhbHBoYTI6IHRoZSBJU08gLyBJRUMgMzE2NiBhbHBoYTIgY291bnRyeSBjb2RlIG9mIHRoZSByZXF1ZXN0ZWQKLSAqIAlyZWd1bGF0b3J5IGRvbWFpbi4gV2UgaGF2ZSBhIGZldyBzcGVjaWFsIGNvZGVzOgotICogCTAwIC0gV29ybGQgcmVndWxhdG9yeSBkb21haW4KLSAqIAk5OSAtIGJ1aWx0IGJ5IGRyaXZlciBidXQgYSBzcGVjaWZpYyBhbHBoYTIgY2Fubm90IGJlIGRldGVybWluZWQKLSAqIAk5OCAtIHJlc3VsdCBvZiBhbiBpbnRlcnNlY3Rpb24gYmV0d2VlbiB0d28gcmVndWxhdG9yeSBkb21haW5zCi0gKiBAaW50ZXJzZWN0OiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgd2lyZWxlc3MgY29yZSBzaG91bGQgaW50ZXJzZWN0Ci0gKiAJdGhlIHJlcXVlc3RlZCByZWd1bGF0b3J5IGRvbWFpbiB3aXRoIHRoZSBwcmVzZW50bHkgc2V0IHJlZ3VsYXRvcnkKLSAqIAlkb21haW4uCi0gKiBAY291bnRyeV9pZV9jaGVja3N1bTogY2hlY2tzdW0gb2YgdGhlIGxhc3QgcHJvY2Vzc2VkIGFuZCBhY2NlcHRlZAotICogCWNvdW50cnkgSUUKLSAqIEBjb3VudHJ5X2llX2VudjogbGV0cyB1cyBrbm93IGlmIHRoZSBBUCBpcyB0ZWxsaW5nIHVzIHdlIGFyZSBvdXRkb29yLAotICogCWluZG9vciwgb3IgaWYgaXQgZG9lc24ndCBtYXR0ZXIKLSAqLwotc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCB7Ci0Jc3RydWN0IHdpcGh5ICp3aXBoeTsKLQllbnVtIHJlZ19zZXRfYnkgaW5pdGlhdG9yOwotCWNoYXIgYWxwaGEyWzJdOwotCWJvb2wgaW50ZXJzZWN0OwotCXUzMiBjb3VudHJ5X2llX2NoZWNrc3VtOwotCWVudW0gZW52aXJvbm1lbnRfY2FwIGNvdW50cnlfaWVfZW52OwotfTsKKyNpbmNsdWRlICJubDgwMjExLmgiCiAKIC8qIFJlY2VpcHQgb2YgaW5mb3JtYXRpb24gZnJvbSBsYXN0IHJlZ3VsYXRvcnkgcmVxdWVzdCAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxhc3RfcmVxdWVzdDsKQEAgLTg2LDIyICs1NSw2MyBAQAogCU1IWl9UT19LSFooMjApLAogfTsKIAotLyogQ2VudHJhbCB3aXJlbGVzcyBjb3JlIHJlZ3VsYXRvcnkgZG9tYWlucywgd2Ugb25seSBuZWVkIHR3bywKKy8qCisgKiBDZW50cmFsIHdpcmVsZXNzIGNvcmUgcmVndWxhdG9yeSBkb21haW5zLCB3ZSBvbmx5IG5lZWQgdHdvLAogICogdGhlIGN1cnJlbnQgb25lIGFuZCBhIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGluIGNhc2Ugd2UgaGF2ZSBubwotICogaW5mb3JtYXRpb24gdG8gZ2l2ZSB1cyBhbiBhbHBoYTIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY2ZnODAyMTFfcmVnZG9tYWluOworICogaW5mb3JtYXRpb24gdG8gZ2l2ZSB1cyBhbiBhbHBoYTIKKyAqLworY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNmZzgwMjExX3JlZ2RvbWFpbjsKIAotLyogV2UgdXNlIHRoaXMgYXMgYSBwbGFjZSBmb3IgdGhlIHJkIHN0cnVjdHVyZSBidWlsdCBmcm9tIHRoZQorLyoKKyAqIFdlIHVzZSB0aGlzIGFzIGEgcGxhY2UgZm9yIHRoZSByZCBzdHJ1Y3R1cmUgYnVpbHQgZnJvbSB0aGUKICAqIGxhc3QgcGFyc2VkIGNvdW50cnkgSUUgdG8gcmVzdCB1bnRpbCBDUkRBIGdldHMgYmFjayB0byB1cyB3aXRoCi0gKiB3aGF0IGl0IHRoaW5rcyBzaG91bGQgYXBwbHkgZm9yIHRoZSBzYW1lIGNvdW50cnkgKi8KKyAqIHdoYXQgaXQgdGhpbmtzIHNob3VsZCBhcHBseSBmb3IgdGhlIHNhbWUgY291bnRyeQorICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmNvdW50cnlfaWVfcmVnZG9tYWluOwogCisvKiBVc2VkIHRvIHF1ZXVlIHVwIHJlZ3VsYXRvcnkgaGludHMgKi8KK3N0YXRpYyBMSVNUX0hFQUQocmVnX3JlcXVlc3RzX2xpc3QpOworc3RhdGljIHNwaW5sb2NrX3QgcmVnX3JlcXVlc3RzX2xvY2s7CisKKy8qIFVzZWQgdG8gcXVldWUgdXAgYmVhY29uIGhpbnRzIGZvciByZXZpZXcgKi8KK3N0YXRpYyBMSVNUX0hFQUQocmVnX3BlbmRpbmdfYmVhY29ucyk7CitzdGF0aWMgc3BpbmxvY2tfdCByZWdfcGVuZGluZ19iZWFjb25zX2xvY2s7CisKKy8qIFVzZWQgdG8ga2VlcCB0cmFjayBvZiBwcm9jZXNzZWQgYmVhY29uIGhpbnRzICovCitzdGF0aWMgTElTVF9IRUFEKHJlZ19iZWFjb25fbGlzdCk7CisKK3N0cnVjdCByZWdfYmVhY29uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW47Cit9OworCiAvKiBXZSBrZWVwIGEgc3RhdGljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGluIGNhc2Ugb2YgdGhlIGFic2VuY2Ugb2YgQ1JEQSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHdvcmxkX3JlZ2RvbSA9IHsKLQkubl9yZWdfcnVsZXMgPSAxLAorCS5uX3JlZ19ydWxlcyA9IDUsCiAJLmFscGhhMiA9ICAiMDAiLAogCS5yZWdfcnVsZXMgPSB7Ci0JCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCA2LCAyMCwKKwkJLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEuLjExICovCisJCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCA2LCAyMCwgMCksCisJCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxMi4uMTMuIE5vIEhUNDAKKwkJICogY2hhbm5lbCBmaXRzIGhlcmUuICovCisJCVJFR19SVUxFKDI0NjctMTAsIDI0NzIrMTAsIDIwLCA2LCAyMCwKKwkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8CisJCQlOTDgwMjExX1JSRl9OT19JQlNTKSwKKwkJLyogSUVFRSA4MDIuMTEgY2hhbm5lbCAxNCAtIE9ubHkgSlAgZW5hYmxlcworCQkgKiB0aGlzIGFuZCBmb3IgODAyLjExYiBvbmx5ICovCisJCVJFR19SVUxFKDI0ODQtMTAsIDI0ODQrMTAsIDIwLCA2LCAyMCwKKwkJCU5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8CisJCQlOTDgwMjExX1JSRl9OT19JQlNTIHwKKwkJCU5MODAyMTFfUlJGX05PX09GRE0pLAorCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWwgMzYuLjQ4ICovCisJCVJFR19SVUxFKDUxODAtMTAsIDUyNDArMTAsIDQwLCA2LCAyMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5MODAyMTFfUlJGX1BBU1NJVkVfU0NBTiB8CisgICAgICAgICAgICAgICAgICAgICAgICBOTDgwMjExX1JSRl9OT19JQlNTKSwKKworCQkvKiBOQjogNTI2MCBNSHogLSA1NzAwIE1IeiByZXF1aWVzIERGUyAqLworCisJCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbCAxNDkuLjE2NSAqLworCQlSRUdfUlVMRSg1NzQ1LTEwLCA1ODI1KzEwLCA0MCwgNiwgMjAsCiAJCQlOTDgwMjExX1JSRl9QQVNTSVZFX1NDQU4gfAogCQkJTkw4MDIxMV9SUkZfTk9fSUJTUyksCiAJfQpAQCAtMTEyLDEyICsxMjIsMTkgQEAKIAogI2lmZGVmIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWQogc3RhdGljIGNoYXIgKmllZWU4MDIxMV9yZWdkb20gPSAiVVMiOworI2Vsc2UKK3N0YXRpYyBjaGFyICppZWVlODAyMTFfcmVnZG9tID0gIjAwIjsKKyNlbmRpZgorCiBtb2R1bGVfcGFyYW0oaWVlZTgwMjExX3JlZ2RvbSwgY2hhcnAsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfcmVnZG9tLCAiSUVFRSA4MDIuMTEgcmVndWxhdG9yeSBkb21haW4gY29kZSIpOwogCi0vKiBXZSBhc3N1bWUgNDAgTUh6IGJhbmR3aWR0aCBmb3IgdGhlIG9sZCByZWd1bGF0b3J5IHdvcmsuCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZCisvKgorICogV2UgYXNzdW1lIDQwIE1IeiBiYW5kd2lkdGggZm9yIHRoZSBvbGQgcmVndWxhdG9yeSB3b3JrLgogICogV2UgbWFrZSBlbXBoYXNpcyB3ZSBhcmUgdXNpbmcgdGhlIGV4YWN0IHNhbWUgZnJlcXVlbmNpZXMKLSAqIGFzIGJlZm9yZSAqLworICogYXMgYmVmb3JlCisgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluIHVzX3JlZ2RvbSA9IHsKIAkubl9yZWdfcnVsZXMgPSA2LApAQCAtMTU2LDggKzE3MywxMCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gZXVfcmVnZG9tID0gewogCS5uX3JlZ19ydWxlcyA9IDYsCi0JLyogVGhpcyBhbHBoYTIgaXMgYm9ndXMsIHdlIGxlYXZlIGl0IGhlcmUganVzdCBmb3Igc3R1cGlkCi0JICogYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworCS8qCisJICogVGhpcyBhbHBoYTIgaXMgYm9ndXMsIHdlIGxlYXZlIGl0IGhlcmUganVzdCBmb3Igc3R1cGlkCisJICogYmFja3dhcmQgY29tcGF0aWJpbGl0eQorCSAqLwogCS5hbHBoYTIgPSAgIkVVIiwKIAkucmVnX3J1bGVzID0gewogCQkvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbHMgMS4uMTMgKi8KQEAgLTIyNiw4ICsyNDUsMTAgQEAKIAljZmc4MDIxMV9yZWdkb21haW4gPSBOVUxMOwogfQogCi0vKiBEeW5hbWljIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIHJlcXVlc3RlZCBieSB0aGUgd2lyZWxlc3MKLSAqIGNvcmUgdXBvbiBpbml0aWFsaXphdGlvbiAqLworLyoKKyAqIER5bmFtaWMgd29ybGQgcmVndWxhdG9yeSBkb21haW4gcmVxdWVzdGVkIGJ5IHRoZSB3aXJlbGVzcworICogY29yZSB1cG9uIGluaXRpYWxpemF0aW9uCisgKi8KIHN0YXRpYyB2b2lkIHVwZGF0ZV93b3JsZF9yZWdkb21haW4oY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQogewogCUJVR19PTighbGFzdF9yZXF1ZXN0KTsKQEAgLTI2OCw4ICsyODksMTAgQEAKIHsKIAlpZiAoIWFscGhhMikKIAkJcmV0dXJuIGZhbHNlOwotCS8qIFNwZWNpYWwgY2FzZSB3aGVyZSByZWd1bGF0b3J5IGRvbWFpbiB3YXMgYnVpbHQgYnkgZHJpdmVyCi0JICogYnV0IGEgc3BlY2lmaWMgYWxwaGEyIGNhbm5vdCBiZSBkZXRlcm1pbmVkICovCisJLyoKKwkgKiBTcGVjaWFsIGNhc2Ugd2hlcmUgcmVndWxhdG9yeSBkb21haW4gd2FzIGJ1aWx0IGJ5IGRyaXZlcgorCSAqIGJ1dCBhIHNwZWNpZmljIGFscGhhMiBjYW5ub3QgYmUgZGV0ZXJtaW5lZAorCSAqLwogCWlmIChhbHBoYTJbMF0gPT0gJzknICYmIGFscGhhMlsxXSA9PSAnOScpCiAJCXJldHVybiB0cnVlOwogCXJldHVybiBmYWxzZTsKQEAgLTI3OSw5ICszMDIsMTEgQEAKIHsKIAlpZiAoIWFscGhhMikKIAkJcmV0dXJuIGZhbHNlOwotCS8qIFNwZWNpYWwgY2FzZSB3aGVyZSByZWd1bGF0b3J5IGRvbWFpbiBpcyB0aGUKKwkvKgorCSAqIFNwZWNpYWwgY2FzZSB3aGVyZSByZWd1bGF0b3J5IGRvbWFpbiBpcyB0aGUKIAkgKiByZXN1bHQgb2YgYW4gaW50ZXJzZWN0aW9uIGJldHdlZW4gdHdvIHJlZ3VsYXRvcnkgZG9tYWluCi0JICogc3RydWN0dXJlcyAqLworCSAqIHN0cnVjdHVyZXMKKwkgKi8KIAlpZiAoYWxwaGEyWzBdID09ICc5JyAmJiBhbHBoYTJbMV0gPT0gJzgnKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CkBAIC0zMDYsOCArMzMxLDEwIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgYm9vbCByZWdkb21fY2hhbmdlZChjb25zdCBjaGFyICphbHBoYTIpCitzdGF0aWMgYm9vbCByZWdkb21fY2hhbmdlcyhjb25zdCBjaGFyICphbHBoYTIpCiB7CisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKwogCWlmICghY2ZnODAyMTFfcmVnZG9tYWluKQogCQlyZXR1cm4gdHJ1ZTsKIAlpZiAoYWxwaGEyX2VxdWFsKGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyLCBhbHBoYTIpKQpAQCAtMzM0LDggKzM2MSwxMCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotLyogVGhpcyBsZXRzIHVzIGtlZXAgcmVndWxhdG9yeSBjb2RlIHdoaWNoIGlzIHVwZGF0ZWQgb24gYSByZWd1bGF0b3J5Ci0gKiBiYXNpcyBpbiB1c2Vyc3BhY2UuICovCisvKgorICogVGhpcyBsZXRzIHVzIGtlZXAgcmVndWxhdG9yeSBjb2RlIHdoaWNoIGlzIHVwZGF0ZWQgb24gYSByZWd1bGF0b3J5CisgKiBiYXNpcyBpbiB1c2Vyc3BhY2UuCisgKi8KIHN0YXRpYyBpbnQgY2FsbF9jcmRhKGNvbnN0IGNoYXIgKmFscGhhMikKIHsKIAljaGFyIGNvdW50cnlfZW52WzkgKyAyXSA9ICJDT1VOVFJZPSI7CkBAIC00NDcsMTAgKzQ3NiwxMiBAQAogI3VuZGVmIE9ORV9HSFpfSU5fS0haCiB9CiAKLS8qIENvbnZlcnRzIGEgY291bnRyeSBJRSB0byBhIHJlZ3VsYXRvcnkgZG9tYWluLiBBIHJlZ3VsYXRvcnkgZG9tYWluCisvKgorICogQ29udmVydHMgYSBjb3VudHJ5IElFIHRvIGEgcmVndWxhdG9yeSBkb21haW4uIEEgcmVndWxhdG9yeSBkb21haW4KICAqIHN0cnVjdHVyZSBoYXMgYSBsb3Qgb2YgaW5mb3JtYXRpb24gd2hpY2ggdGhlIElFIGRvZXNuJ3QgeWV0IGhhdmUsCiAgKiBzbyBmb3IgdGhlIG90aGVyIHZhbHVlcyB3ZSB1c2UgdXBwZXIgbWF4IHZhbHVlcyBhcyB3ZSB3aWxsIGludGVyc2VjdAotICogd2l0aCBvdXIgdXNlcnNwYWNlIHJlZ3VsYXRvcnkgYWdlbnQgdG8gZ2V0IGxvd2VyIGJvdW5kcy4gKi8KKyAqIHdpdGggb3VyIHVzZXJzcGFjZSByZWd1bGF0b3J5IGFnZW50IHRvIGdldCBsb3dlciBib3VuZHMuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY291bnRyeV9pZV8yX3JkKAogCQkJCXU4ICpjb3VudHJ5X2llLAogCQkJCXU4IGNvdW50cnlfaWVfbGVuLApAQCAtNDk1LDkgKzUyNiwxMSBAQAogCiAJKmNoZWNrc3VtIF49ICgoZmxhZ3MgXiBhbHBoYTJbMF0gXiBhbHBoYTJbMV0pIDw8IDgpOwogCi0JLyogV2UgbmVlZCB0byBidWlsZCBhIHJlZyBydWxlIGZvciBlYWNoIHRyaXBsZXQsIGJ1dCBmaXJzdCB3ZSBtdXN0CisJLyoKKwkgKiBXZSBuZWVkIHRvIGJ1aWxkIGEgcmVnIHJ1bGUgZm9yIGVhY2ggdHJpcGxldCwgYnV0IGZpcnN0IHdlIG11c3QKIAkgKiBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiByZWcgcnVsZXMgd2Ugd2lsbCBuZWVkLiBXZSB3aWxsIG5lZWQgb25lCi0JICogZm9yIGVhY2ggY2hhbm5lbCBzdWJiYW5kICovCisJICogZm9yIGVhY2ggY2hhbm5lbCBzdWJiYW5kCisJICovCiAJd2hpbGUgKGNvdW50cnlfaWVfbGVuID49IDMpIHsKIAkJaW50IGVuZF9jaGFubmVsID0gMDsKIAkJc3RydWN0IGllZWU4MDIxMV9jb3VudHJ5X2llX3RyaXBsZXQgKnRyaXBsZXQgPQpAQCAtNTM1LDkgKzU2OCwxMSBAQAogCQlpZiAoY3VyX3N1Yl9tYXhfY2hhbm5lbCA8IGN1cl9jaGFubmVsKQogCQkJcmV0dXJuIE5VTEw7CiAKLQkJLyogRG8gbm90IGFsbG93IG92ZXJsYXBwaW5nIGNoYW5uZWxzLiBBbHNvIGNoYW5uZWxzCisJCS8qCisJCSAqIERvIG5vdCBhbGxvdyBvdmVybGFwcGluZyBjaGFubmVscy4gQWxzbyBjaGFubmVscwogCQkgKiBwYXNzZWQgaW4gZWFjaCBzdWJiYW5kIG11c3QgYmUgbW9ub3RvbmljYWxseQotCQkgKiBpbmNyZWFzaW5nICovCisJCSAqIGluY3JlYXNpbmcKKwkJICovCiAJCWlmIChsYXN0X3N1Yl9tYXhfY2hhbm5lbCkgewogCQkJaWYgKGN1cl9jaGFubmVsIDw9IGxhc3Rfc3ViX21heF9jaGFubmVsKQogCQkJCXJldHVybiBOVUxMOwpAQCAtNTQ1LDEwICs1ODAsMTIgQEAKIAkJCQlyZXR1cm4gTlVMTDsKIAkJfQogCi0JCS8qIFdoZW4gZG90MTFSZWd1bGF0b3J5Q2xhc3Nlc1JlcXVpcmVkIGlzIHN1cHBvcnRlZAorCQkvKgorCQkgKiBXaGVuIGRvdDExUmVndWxhdG9yeUNsYXNzZXNSZXF1aXJlZCBpcyBzdXBwb3J0ZWQKIAkJICogd2UgY2FuIHRocm93IGV4dCB0cmlwbGV0cyBhcyBwYXJ0IG9mIHRoaXMgc291cCwKIAkJICogZm9yIG5vdyB3ZSBkb24ndCBjYXJlIHdoZW4gdGhvc2UgY2hhbmdlIGFzIHdlCi0JCSAqIGRvbid0IHN1cHBvcnQgdGhlbSAqLworCQkgKiBkb24ndCBzdXBwb3J0IHRoZW0KKwkJICovCiAJCSpjaGVja3N1bSBePSAoKGN1cl9jaGFubmVsIF4gY3VyX3N1Yl9tYXhfY2hhbm5lbCkgPDwgOCkgfAogCQkgICgoY3VyX3N1Yl9tYXhfY2hhbm5lbCBeIGN1cl9zdWJfbWF4X2NoYW5uZWwpIDw8IDE2KSB8CiAJCSAgKCh0cmlwbGV0LT5jaGFucy5tYXhfcG93ZXIgXiBjdXJfc3ViX21heF9jaGFubmVsKSA8PCAyNCk7CkBAIC01NTksOCArNTk2LDEwIEBACiAJCWNvdW50cnlfaWVfbGVuIC09IDM7CiAJCW51bV9ydWxlcysrOwogCi0JCS8qIE5vdGU6IHRoaXMgaXMgbm90IGEgSUVFRSByZXF1aXJlbWVudCBidXQKLQkJICogc2ltcGx5IGEgbWVtb3J5IHJlcXVpcmVtZW50ICovCisJCS8qCisJCSAqIE5vdGU6IHRoaXMgaXMgbm90IGEgSUVFRSByZXF1aXJlbWVudCBidXQKKwkJICogc2ltcGx5IGEgbWVtb3J5IHJlcXVpcmVtZW50CisJCSAqLwogCQlpZiAobnVtX3J1bGVzID4gTkw4MDIxMV9NQVhfU1VQUF9SRUdfUlVMRVMpCiAJCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC01ODgsOCArNjI3LDEwIEBACiAJCXN0cnVjdCBpZWVlODAyMTFfZnJlcV9yYW5nZSAqZnJlcV9yYW5nZSA9IE5VTEw7CiAJCXN0cnVjdCBpZWVlODAyMTFfcG93ZXJfcnVsZSAqcG93ZXJfcnVsZSA9IE5VTEw7CiAKLQkJLyogTXVzdCBwYXJzZSBpZiBkb3QxMVJlZ3VsYXRvcnlDbGFzc2VzUmVxdWlyZWQgaXMgdHJ1ZSwKLQkJICogd2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIHlldCAqLworCQkvKgorCQkgKiBNdXN0IHBhcnNlIGlmIGRvdDExUmVndWxhdG9yeUNsYXNzZXNSZXF1aXJlZCBpcyB0cnVlLAorCQkgKiB3ZSBkb24ndCBzdXBwb3J0IHRoaXMgeWV0CisJCSAqLwogCQlpZiAodHJpcGxldC0+ZXh0LnJlZ19leHRlbnNpb25faWQgPj0KIAkJCQlJRUVFODAyMTFfQ09VTlRSWV9FWFRFTlNJT05fSUQpIHsKIAkJCWNvdW50cnlfaWUgKz0gMzsKQEAgLTYxMSwxMCArNjUyLDEyIEBACiAJCQllbmRfY2hhbm5lbCA9ICB0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsICsKIAkJCQkoNCAqICh0cmlwbGV0LT5jaGFucy5udW1fY2hhbm5lbHMgLSAxKSk7CiAKLQkJLyogVGhlICsxMCBpcyBzaW5jZSB0aGUgcmVndWxhdG9yeSBkb21haW4gZXhwZWN0cworCQkvKgorCQkgKiBUaGUgKzEwIGlzIHNpbmNlIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBleHBlY3RzCiAJCSAqIHRoZSBhY3R1YWwgYmFuZCBlZGdlLCBub3QgdGhlIGNlbnRlciBvZiBmcmVxIGZvcgogCQkgKiBpdHMgc3RhcnQgYW5kIGVuZCBmcmVxcywgYXNzdW1pbmcgMjAgTUh6IGJhbmR3aWR0aCBvbgotCQkgKiB0aGUgY2hhbm5lbHMgcGFzc2VkICovCisJCSAqIHRoZSBjaGFubmVscyBwYXNzZWQKKwkJICovCiAJCWZyZXFfcmFuZ2UtPnN0YXJ0X2ZyZXFfa2h6ID0KIAkJCU1IWl9UT19LSFooaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KAogCQkJCXRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwpIC0gMTApOwpAQCAtNjIyLDkgKzY2NSwxMSBAQAogCQkJTUhaX1RPX0tIWihpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koCiAJCQkJZW5kX2NoYW5uZWwpICsgMTApOwogCi0JCS8qIExhcmdlIGFyYml0cmFyeSB2YWx1ZXMsIHdlIGludGVyc2VjdCBsYXRlciAqLwotCQkvKiBJbmNyZW1lbnQgdGhpcyBpZiB3ZSBldmVyIHN1cHBvcnQgPj0gNDAgTUh6IGNoYW5uZWxzCi0JCSAqIGluIElFRUUgODAyLjExICovCisJCS8qCisJCSAqIFRoZXNlIGFyZSBsYXJnZSBhcmJpdHJhcnkgdmFsdWVzIHdlIHVzZSB0byBpbnRlcnNlY3QgbGF0ZXIuCisJCSAqIEluY3JlbWVudCB0aGlzIGlmIHdlIGV2ZXIgc3VwcG9ydCA+PSA0MCBNSHogY2hhbm5lbHMKKwkJICogaW4gSUVFRSA4MDIuMTEKKwkJICovCiAJCWZyZXFfcmFuZ2UtPm1heF9iYW5kd2lkdGhfa2h6ID0gTUhaX1RPX0tIWig0MCk7CiAJCXBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4gPSBEQklfVE9fTUJJKDEwMCk7CiAJCXBvd2VyX3J1bGUtPm1heF9laXJwID0gREJNX1RPX01CTSgxMDApOwpAQCAtNjQwLDggKzY4NSwxMCBAQAogfQogCiAKLS8qIEhlbHBlciBmb3IgcmVnZG9tX2ludGVyc2VjdCgpLCB0aGlzIGRvZXMgdGhlIHJlYWwKLSAqIG1hdGhlbWF0aWNhbCBpbnRlcnNlY3Rpb24gZnVuICovCisvKgorICogSGVscGVyIGZvciByZWdkb21faW50ZXJzZWN0KCksIHRoaXMgZG9lcyB0aGUgcmVhbAorICogbWF0aGVtYXRpY2FsIGludGVyc2VjdGlvbiBmdW4KKyAqLwogc3RhdGljIGludCByZWdfcnVsZXNfaW50ZXJzZWN0KAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJ1bGUxLAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKnJ1bGUyLApAQCAtNzE5LDExICs3NjYsMTMgQEAKIAlpZiAoIXJkMSB8fCAhcmQyKQogCQlyZXR1cm4gTlVMTDsKIAotCS8qIEZpcnN0IHdlIGdldCBhIGNvdW50IG9mIHRoZSBydWxlcyB3ZSdsbCBuZWVkLCB0aGVuIHdlIGFjdHVhbGx5CisJLyoKKwkgKiBGaXJzdCB3ZSBnZXQgYSBjb3VudCBvZiB0aGUgcnVsZXMgd2UnbGwgbmVlZCwgdGhlbiB3ZSBhY3R1YWxseQogCSAqIGJ1aWxkIHRoZW0uIFRoaXMgaXMgdG8gc28gd2UgY2FuIG1hbGxvYygpIGFuZCBmcmVlKCkgYQogCSAqIHJlZ2RvbWFpbiBvbmNlLiBUaGUgcmVhc29uIHdlIHVzZSByZWdfcnVsZXNfaW50ZXJzZWN0KCkgaGVyZQogCSAqIGlzIGl0IHdpbGwgcmV0dXJuIC1FSU5WQUwgaWYgdGhlIHJ1bGUgY29tcHV0ZWQgbWFrZXMgbm8gc2Vuc2UuCi0JICogQWxsIHJ1bGVzIHRoYXQgZG8gY2hlY2sgb3V0IE9LIGFyZSB2YWxpZC4gKi8KKwkgKiBBbGwgcnVsZXMgdGhhdCBkbyBjaGVjayBvdXQgT0sgYXJlIHZhbGlkLgorCSAqLwogCiAJZm9yICh4ID0gMDsgeCA8IHJkMS0+bl9yZWdfcnVsZXM7IHgrKykgewogCQlydWxlMSA9ICZyZDEtPnJlZ19ydWxlc1t4XTsKQEAgLTc1MSwxNCArODAwLDE4IEBACiAJCXJ1bGUxID0gJnJkMS0+cmVnX3J1bGVzW3hdOwogCQlmb3IgKHkgPSAwOyB5IDwgcmQyLT5uX3JlZ19ydWxlczsgeSsrKSB7CiAJCQlydWxlMiA9ICZyZDItPnJlZ19ydWxlc1t5XTsKLQkJCS8qIFRoaXMgdGltZSBhcm91bmQgaW5zdGVhZCBvZiB1c2luZyB0aGUgc3RhY2sgbGV0cworCQkJLyoKKwkJCSAqIFRoaXMgdGltZSBhcm91bmQgaW5zdGVhZCBvZiB1c2luZyB0aGUgc3RhY2sgbGV0cwogCQkJICogd3JpdGUgdG8gdGhlIHRhcmdldCBydWxlIGRpcmVjdGx5IHNhdmluZyBvdXJzZWx2ZXMKLQkJCSAqIGEgbWVtY3B5KCkgKi8KKwkJCSAqIGEgbWVtY3B5KCkKKwkJCSAqLwogCQkJaW50ZXJzZWN0ZWRfcnVsZSA9ICZyZC0+cmVnX3J1bGVzW3J1bGVfaWR4XTsKIAkJCXIgPSByZWdfcnVsZXNfaW50ZXJzZWN0KHJ1bGUxLCBydWxlMiwKIAkJCQlpbnRlcnNlY3RlZF9ydWxlKTsKLQkJCS8qIE5vIG5lZWQgdG8gbWVtc2V0IGhlcmUgdGhlIGludGVyc2VjdGVkIHJ1bGUgaGVyZSBhcwotCQkJICogd2UncmUgbm90IHVzaW5nIHRoZSBzdGFjayBhbnltb3JlICovCisJCQkvKgorCQkJICogTm8gbmVlZCB0byBtZW1zZXQgaGVyZSB0aGUgaW50ZXJzZWN0ZWQgcnVsZSBoZXJlIGFzCisJCQkgKiB3ZSdyZSBub3QgdXNpbmcgdGhlIHN0YWNrIGFueW1vcmUKKwkJCSAqLwogCQkJaWYgKHIpCiAJCQkJY29udGludWU7CiAJCQlydWxlX2lkeCsrOwpAQCAtNzc3LDggKzgzMCwxMCBAQAogCXJldHVybiByZDsKIH0KIAotLyogWFhYOiBhZGQgc3VwcG9ydCBmb3IgdGhlIHJlc3Qgb2YgZW51bSBubDgwMjExX3JlZ19ydWxlX2ZsYWdzLCB3ZSBtYXkKLSAqIHdhbnQgdG8ganVzdCBoYXZlIHRoZSBjaGFubmVsIHN0cnVjdHVyZSB1c2UgdGhlc2UgKi8KKy8qCisgKiBYWFg6IGFkZCBzdXBwb3J0IGZvciB0aGUgcmVzdCBvZiBlbnVtIG5sODAyMTFfcmVnX3J1bGVfZmxhZ3MsIHdlIG1heQorICogd2FudCB0byBqdXN0IGhhdmUgdGhlIGNoYW5uZWwgc3RydWN0dXJlIHVzZSB0aGVzZQorICovCiBzdGF0aWMgdTMyIG1hcF9yZWdkb21fZmxhZ3ModTMyIHJkX2ZsYWdzKQogewogCXUzMiBjaGFubmVsX2ZsYWdzID0gMDsKQEAgLTc5MSw0OCArODQ2LDQ1IEBACiAJcmV0dXJuIGNoYW5uZWxfZmxhZ3M7CiB9CiAKLS8qKgotICogZnJlcV9yZWdfaW5mbyAtIGdldCByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGZvciB0aGUgZ2l2ZW4gZnJlcXVlbmN5Ci0gKiBAY2VudGVyX2ZyZXE6IEZyZXF1ZW5jeSBpbiBLSHogZm9yIHdoaWNoIHdlIHdhbnQgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBmb3IKLSAqIEBiYW5kd2lkdGg6IHRoZSBiYW5kd2lkdGggcmVxdWlyZW1lbnQgeW91IGhhdmUgaW4gS0h6LCBpZiB5b3UgZG8gbm90IGhhdmUgb25lCi0gKiAJeW91IGNhbiBzZXQgdGhpcyB0byAwLiBJZiB0aGlzIGZyZXF1ZW5jeSBpcyBhbGxvd2VkIHdlIHRoZW4gc2V0Ci0gKiAJdGhpcyB2YWx1ZSB0byB0aGUgbWF4aW11bSBhbGxvd2VkIGJhbmR3aWR0aC4KLSAqIEByZWdfcnVsZTogdGhlIHJlZ3VsYXRvcnkgcnVsZSB3aGljaCB3ZSBoYXZlIGZvciB0aGlzIGZyZXF1ZW5jeQotICoKLSAqIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIGdldCB0aGUgcmVndWxhdG9yeSBydWxlIGZvciBhIHNwZWNpZmljIGZyZXF1ZW5jeSBvbgotICogYSBnaXZlbiB3aXJlbGVzcyBkZXZpY2UuIElmIHRoZSBkZXZpY2UgaGFzIGEgc3BlY2lmaWMgcmVndWxhdG9yeSBkb21haW4KLSAqIGl0IHdhbnRzIHRvIGZvbGxvdyB3ZSByZXNwZWN0IHRoYXQgdW5sZXNzIGEgY291bnRyeSBJRSBoYXMgYmVlbiByZWNlaXZlZAotICogYW5kIHByb2Nlc3NlZCBhbHJlYWR5LgotICoKLSAqIFJldHVybnMgMCBpZiBpdCB3YXMgYWJsZSB0byBmaW5kIGEgdmFsaWQgcmVndWxhdG9yeSBydWxlIHdoaWNoIGRvZXMKLSAqIGFwcGx5IHRvIHRoZSBnaXZlbiBjZW50ZXJfZnJlcSBvdGhlcndpc2UgaXQgcmV0dXJucyBub24temVyby4gSXQgd2lsbAotICogYWxzbyByZXR1cm4gLUVSQU5HRSBpZiB3ZSBkZXRlcm1pbmUgdGhlIGdpdmVuIGNlbnRlcl9mcmVxIGRvZXMgbm90IGV2ZW4gaGF2ZQotICogYSByZWd1bGF0b3J5IHJ1bGUgZm9yIGEgZnJlcXVlbmN5IHJhbmdlIGluIHRoZSBjZW50ZXJfZnJlcSdzIGJhbmQuIFNlZQotICogZnJlcV9pbl9ydWxlX2JhbmQoKSBmb3Igb3VyIGN1cnJlbnQgZGVmaW5pdGlvbiBvZiBhIGJhbmQgLS0gdGhpcyBpcyBwdXJlbHkKLSAqIHN1YmplY3RpdmUgYW5kIHJpZ2h0IG5vdyBpdHMgODAyLjExIHNwZWNpZmljLgotICovCi1zdGF0aWMgaW50IGZyZXFfcmVnX2luZm8odTMyIGNlbnRlcl9mcmVxLCB1MzIgKmJhbmR3aWR0aCwKLQkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICoqcmVnX3J1bGUpCitzdGF0aWMgaW50IGZyZXFfcmVnX2luZm9fcmVnZChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICAgdTMyIGNlbnRlcl9mcmVxLAorCQkJICAgICAgdTMyICpiYW5kd2lkdGgsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICoqcmVnX3J1bGUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY3VzdG9tX3JlZ2QpCiB7CiAJaW50IGk7CiAJYm9vbCBiYW5kX3J1bGVfZm91bmQgPSBmYWxzZTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZDsKIAl1MzIgbWF4X2JhbmR3aWR0aCA9IDA7CiAKLQlpZiAoIWNmZzgwMjExX3JlZ2RvbWFpbikKKwlyZWdkID0gY3VzdG9tX3JlZ2QgPyBjdXN0b21fcmVnZCA6IGNmZzgwMjExX3JlZ2RvbWFpbjsKKworCS8qCisJICogRm9sbG93IHRoZSBkcml2ZXIncyByZWd1bGF0b3J5IGRvbWFpbiwgaWYgcHJlc2VudCwgdW5sZXNzIGEgY291bnRyeQorCSAqIElFIGhhcyBiZWVuIHByb2Nlc3NlZCBvciBhIHVzZXIgd2FudHMgdG8gaGVscCBjb21wbGFpbmNlIGZ1cnRoZXIKKwkgKi8KKwlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUgJiYKKwkgICAgbGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIgJiYKKwkgICAgd2lwaHktPnJlZ2QpCisJCXJlZ2QgPSB3aXBoeS0+cmVnZDsKKworCWlmICghcmVnZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2ZnODAyMTFfcmVnZG9tYWluLT5uX3JlZ19ydWxlczsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHJlZ2QtPm5fcmVnX3J1bGVzOyBpKyspIHsKIAkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSAqcnI7CiAJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZnJlcV9yYW5nZSAqZnIgPSBOVUxMOwogCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnByID0gTlVMTDsKIAotCQlyciA9ICZjZmc4MDIxMV9yZWdkb21haW4tPnJlZ19ydWxlc1tpXTsKKwkJcnIgPSAmcmVnZC0+cmVnX3J1bGVzW2ldOwogCQlmciA9ICZyci0+ZnJlcV9yYW5nZTsKIAkJcHIgPSAmcnItPnBvd2VyX3J1bGU7CiAKLQkJLyogV2Ugb25seSBuZWVkIHRvIGtub3cgaWYgb25lIGZyZXF1ZW5jeSBydWxlIHdhcworCQkvKgorCQkgKiBXZSBvbmx5IG5lZWQgdG8ga25vdyBpZiBvbmUgZnJlcXVlbmN5IHJ1bGUgd2FzCiAJCSAqIHdhcyBpbiBjZW50ZXJfZnJlcSdzIGJhbmQsIHRoYXQncyBlbm91Z2gsIHNvIGxldHMKLQkJICogbm90IG92ZXJ3cml0ZSBpdCBvbmNlIGZvdW5kICovCisJCSAqIG5vdCBvdmVyd3JpdGUgaXQgb25jZSBmb3VuZAorCQkgKi8KIAkJaWYgKCFiYW5kX3J1bGVfZm91bmQpCiAJCQliYW5kX3J1bGVfZm91bmQgPSBmcmVxX2luX3J1bGVfYmFuZChmciwgY2VudGVyX2ZyZXEpOwogCkBAIC04NTAsNiArOTAyLDE0IEBACiAKIAlyZXR1cm4gIW1heF9iYW5kd2lkdGg7CiB9CitFWFBPUlRfU1lNQk9MKGZyZXFfcmVnX2luZm8pOworCitpbnQgZnJlcV9yZWdfaW5mbyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LCB1MzIgY2VudGVyX2ZyZXEsIHUzMiAqYmFuZHdpZHRoLAorCQkJIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUgKipyZWdfcnVsZSkKK3sKKwlyZXR1cm4gZnJlcV9yZWdfaW5mb19yZWdkKHdpcGh5LCBjZW50ZXJfZnJlcSwKKwkJYmFuZHdpZHRoLCByZWdfcnVsZSwgTlVMTCk7Cit9CiAKIHN0YXRpYyB2b2lkIGhhbmRsZV9jaGFubmVsKHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKIAkJCSAgIHVuc2lnbmVkIGludCBjaGFuX2lkeCkKQEAgLTg2MSw2ICs5MjEsMTEgQEAKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3Bvd2VyX3J1bGUgKnBvd2VyX3J1bGUgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwlzdHJ1Y3Qgd2lwaHkgKnJlcXVlc3Rfd2lwaHkgPSBOVUxMOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCXJlcXVlc3Rfd2lwaHkgPSB3aXBoeV9pZHhfdG9fd2lwaHkobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpOwogCiAJc2JhbmQgPSB3aXBoeS0+YmFuZHNbYmFuZF07CiAJQlVHX09OKGNoYW5faWR4ID49IHNiYW5kLT5uX2NoYW5uZWxzKTsKQEAgLTg2OCwxMSArOTMzLDEyIEBACiAKIAlmbGFncyA9IGNoYW4tPm9yaWdfZmxhZ3M7CiAKLQlyID0gZnJlcV9yZWdfaW5mbyhNSFpfVE9fS0haKGNoYW4tPmNlbnRlcl9mcmVxKSwKKwlyID0gZnJlcV9yZWdfaW5mbyh3aXBoeSwgTUhaX1RPX0tIWihjaGFuLT5jZW50ZXJfZnJlcSksCiAJCSZtYXhfYmFuZHdpZHRoLCAmcmVnX3J1bGUpOwogCiAJaWYgKHIpIHsKLQkJLyogVGhpcyBtZWFucyBubyByZWd1bGF0b3J5IHJ1bGUgd2FzIGZvdW5kIGluIHRoZSBjb3VudHJ5IElFCisJCS8qCisJCSAqIFRoaXMgbWVhbnMgbm8gcmVndWxhdG9yeSBydWxlIHdhcyBmb3VuZCBpbiB0aGUgY291bnRyeSBJRQogCQkgKiB3aXRoIGEgZnJlcXVlbmN5IHJhbmdlIG9uIHRoZSBjZW50ZXJfZnJlcSdzIGJhbmQsIHNpbmNlCiAJCSAqIElFRUUtODAyLjExIGFsbG93cyBmb3IgYSBjb3VudHJ5IElFIHRvIGhhdmUgYSBzdWJzZXQgb2YgdGhlCiAJCSAqIHJlZ3VsYXRvcnkgaW5mb3JtYXRpb24gcHJvdmlkZWQgaW4gYSBjb3VudHJ5IHdlIGlnbm9yZQpAQCAtODgzLDcgKzk0OSw4IEBACiAJCSAqIGh0dHA6Ly90aW55dXJsLmNvbS8xMWQtY2xhcmlmaWNhdGlvbgogCQkgKi8KIAkJaWYgKHIgPT0gLUVSQU5HRSAmJgotCQkgICAgbGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJCSAgICBsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiY2ZnODAyMTE6IExlYXZpbmcgY2hhbm5lbCAlZCBNSHogIgogCQkJCSJpbnRhY3Qgb24gJXMgLSBubyBydWxlIGZvdW5kIGluIGJhbmQgb24gIgpAQCAtODkxLDEwICs5NTgsMTMgQEAKIAkJCQljaGFuLT5jZW50ZXJfZnJlcSwgd2lwaHlfbmFtZSh3aXBoeSkpOwogI2VuZGlmCiAJCX0gZWxzZSB7Ci0JCS8qIEluIHRoaXMgY2FzZSB3ZSBrbm93IHRoZSBjb3VudHJ5IElFIGhhcyBhdCBsZWFzdCBvbmUgcmVnIHJ1bGUKLQkJICogZm9yIHRoZSBiYW5kIHNvIHdlIHJlc3BlY3QgaXRzIGJhbmQgZGVmaW5pdGlvbnMgKi8KKwkJLyoKKwkJICogSW4gdGhpcyBjYXNlIHdlIGtub3cgdGhlIGNvdW50cnkgSUUgaGFzIGF0IGxlYXN0IG9uZSByZWcgcnVsZQorCQkgKiBmb3IgdGhlIGJhbmQgc28gd2UgcmVzcGVjdCBpdHMgYmFuZCBkZWZpbml0aW9ucworCQkgKi8KICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCi0JCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQorCQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBEaXNhYmxpbmcgIgogCQkJCQkiY2hhbm5lbCAlZCBNSHogb24gJXMgZHVlIHRvICIKIAkJCQkJIkNvdW50cnkgSUVcbiIsCkBAIC05MDgsNiArOTc4LDI0IEBACiAKIAlwb3dlcl9ydWxlID0gJnJlZ19ydWxlLT5wb3dlcl9ydWxlOwogCisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgJiYKKwkgICAgcmVxdWVzdF93aXBoeSAmJiByZXF1ZXN0X3dpcGh5ID09IHdpcGh5ICYmCisJICAgIHJlcXVlc3Rfd2lwaHktPnN0cmljdF9yZWd1bGF0b3J5KSB7CisJCS8qCisJCSAqIFRoaXMgZ2F1cmFudGVlcyB0aGUgZHJpdmVyJ3MgcmVxdWVzdGVkIHJlZ3VsYXRvcnkgZG9tYWluCisJCSAqIHdpbGwgYWx3YXlzIGJlIHVzZWQgYXMgYSBiYXNlIGZvciBmdXJ0aGVyIHJlZ3VsYXRvcnkKKwkJICogc2V0dGluZ3MKKwkJICovCisJCWNoYW4tPmZsYWdzID0gY2hhbi0+b3JpZ19mbGFncyA9CisJCQltYXBfcmVnZG9tX2ZsYWdzKHJlZ19ydWxlLT5mbGFncyk7CisJCWNoYW4tPm1heF9hbnRlbm5hX2dhaW4gPSBjaGFuLT5vcmlnX21hZyA9CisJCQkoaW50KSBNQklfVE9fREJJKHBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4pOworCQljaGFuLT5tYXhfYmFuZHdpZHRoID0gS0haX1RPX01IWihtYXhfYmFuZHdpZHRoKTsKKwkJY2hhbi0+bWF4X3Bvd2VyID0gY2hhbi0+b3JpZ19tcHdyID0KKwkJCShpbnQpIE1CTV9UT19EQk0ocG93ZXJfcnVsZS0+bWF4X2VpcnApOworCQlyZXR1cm47CisJfQorCiAJY2hhbi0+ZmxhZ3MgPSBmbGFncyB8IG1hcF9yZWdkb21fZmxhZ3MocmVnX3J1bGUtPmZsYWdzKTsKIAljaGFuLT5tYXhfYW50ZW5uYV9nYWluID0gbWluKGNoYW4tPm9yaWdfbWFnLAogCQkoaW50KSBNQklfVE9fREJJKHBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4pKTsKQEAgLTkzMSwxMTYgKzEwMTksNTEzIEBACiAJCWhhbmRsZV9jaGFubmVsKHdpcGh5LCBiYW5kLCBpKTsKIH0KIAotc3RhdGljIGJvb2wgaWdub3JlX3JlZ191cGRhdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldGJ5KQorc3RhdGljIGJvb2wgaWdub3JlX3JlZ191cGRhdGUoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgIGVudW0gbmw4MDIxMV9yZWdfaW5pdGlhdG9yIGluaXRpYXRvcikKIHsKIAlpZiAoIWxhc3RfcmVxdWVzdCkKIAkJcmV0dXJuIHRydWU7Ci0JaWYgKHNldGJ5ID09IFJFR0RPTV9TRVRfQllfQ09SRSAmJgotCQkgIHdpcGh5LT5md19oYW5kbGVzX3JlZ3VsYXRvcnkpCisJaWYgKGluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSAmJgorCQkgIHdpcGh5LT5jdXN0b21fcmVndWxhdG9yeSkKKwkJcmV0dXJuIHRydWU7CisJLyoKKwkgKiB3aXBoeS0+cmVnZCB3aWxsIGJlIHNldCBvbmNlIHRoZSBkZXZpY2UgaGFzIGl0cyBvd24KKwkgKiBkZXNpcmVkIHJlZ3VsYXRvcnkgZG9tYWluIHNldAorCSAqLworCWlmICh3aXBoeS0+c3RyaWN0X3JlZ3VsYXRvcnkgJiYgIXdpcGh5LT5yZWdkICYmCisJICAgICFpc193b3JsZF9yZWdkb20obGFzdF9yZXF1ZXN0LT5hbHBoYTIpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9hbGxfd2lwaHlfcmVndWxhdG9yeShlbnVtIHJlZ19zZXRfYnkgc2V0YnkpCitzdGF0aWMgdm9pZCB1cGRhdGVfYWxsX3dpcGh5X3JlZ3VsYXRvcnkoZW51bSBubDgwMjExX3JlZ19pbml0aWF0b3IgaW5pdGlhdG9yKQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZHJ2OwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkKLQkJaWYgKCFpZ25vcmVfcmVnX3VwZGF0ZSgmZHJ2LT53aXBoeSwgc2V0YnkpKQotCQkJd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoJmRydi0+d2lwaHksIHNldGJ5KTsKKwkJd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoJmRydi0+d2lwaHksIGluaXRpYXRvcik7CiB9CiAKLXZvaWQgd2lwaHlfdXBkYXRlX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSByZWdfc2V0X2J5IHNldGJ5KQorc3RhdGljIHZvaWQgaGFuZGxlX3JlZ19iZWFjb24oc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBjaGFuX2lkeCwKKwkJCSAgICAgIHN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uKQoreworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKKyNkZWZpbmUgUkVHX0RFQlVHX0JFQUNPTl9GTEFHKGRlc2MpIFwKKwlwcmludGsoS0VSTl9ERUJVRyAiY2ZnODAyMTE6IEVuYWJsaW5nICIgZGVzYyAiIG9uICIgXAorCQkiZnJlcXVlbmN5OiAlZCBNSHogKENoICVkKSBvbiAlc1xuIiwgXAorCQlyZWdfYmVhY29uLT5jaGFuLmNlbnRlcl9mcmVxLCBcCisJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChyZWdfYmVhY29uLT5jaGFuLmNlbnRlcl9mcmVxKSwgXAorCQl3aXBoeV9uYW1lKHdpcGh5KSk7CisjZWxzZQorI2RlZmluZSBSRUdfREVCVUdfQkVBQ09OX0ZMQUcoZGVzYykgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbcmVnX2JlYWNvbi0+Y2hhbi5iYW5kXTsKKwljaGFuID0gJnNiYW5kLT5jaGFubmVsc1tjaGFuX2lkeF07CisKKwlpZiAobGlrZWx5KGNoYW4tPmNlbnRlcl9mcmVxICE9IHJlZ19iZWFjb24tPmNoYW4uY2VudGVyX2ZyZXEpKQorCQlyZXR1cm47CisKKwlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9QQVNTSVZFX1NDQU4pIHsKKwkJY2hhbi0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9DSEFOX1BBU1NJVkVfU0NBTjsKKwkJUkVHX0RFQlVHX0JFQUNPTl9GTEFHKCJhY3RpdmUgc2Nhbm5pbmciKTsKKwl9CisKKwlpZiAoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JQlNTKSB7CisJCWNoYW4tPmZsYWdzICY9IH5JRUVFODAyMTFfQ0hBTl9OT19JQlNTOworCQlSRUdfREVCVUdfQkVBQ09OX0ZMQUcoImJlYWNvbmluZyIpOworCX0KKworCWNoYW4tPmJlYWNvbl9mb3VuZCA9IHRydWU7CisjdW5kZWYgUkVHX0RFQlVHX0JFQUNPTl9GTEFHCit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBhIHNjYW4gb24gYSB3aXBoeSBmaW5kcyBhIGJlYWNvbiBvbgorICogbmV3IGNoYW5uZWwKKyAqLworc3RhdGljIHZvaWQgd2lwaHlfdXBkYXRlX25ld19iZWFjb24oc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgc3RydWN0IHJlZ19iZWFjb24gKnJlZ19iZWFjb24pCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCisJaWYgKCF3aXBoeS0+YmFuZHNbcmVnX2JlYWNvbi0+Y2hhbi5iYW5kXSkKKwkJcmV0dXJuOworCisJc2JhbmQgPSB3aXBoeS0+YmFuZHNbcmVnX2JlYWNvbi0+Y2hhbi5iYW5kXTsKKworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKQorCQloYW5kbGVfcmVnX2JlYWNvbih3aXBoeSwgaSwgcmVnX2JlYWNvbik7Cit9CisKKy8qCisgKiBDYWxsZWQgdXBvbiByZWcgY2hhbmdlcyBvciBhIG5ldyB3aXBoeSBpcyBhZGRlZAorICovCitzdGF0aWMgdm9pZCB3aXBoeV91cGRhdGVfYmVhY29uX3JlZyhzdHJ1Y3Qgd2lwaHkgKndpcGh5KQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uOworCisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKKworCWlmIChsaXN0X2VtcHR5KCZyZWdfYmVhY29uX2xpc3QpKQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZ19iZWFjb24sICZyZWdfYmVhY29uX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCF3aXBoeS0+YmFuZHNbcmVnX2JlYWNvbi0+Y2hhbi5iYW5kXSkKKwkJCWNvbnRpbnVlOworCQlzYmFuZCA9IHdpcGh5LT5iYW5kc1tyZWdfYmVhY29uLT5jaGFuLmJhbmRdOworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykKKwkJCWhhbmRsZV9yZWdfYmVhY29uKHdpcGh5LCBpLCByZWdfYmVhY29uKTsKKwl9Cit9CisKK3N0YXRpYyBib29sIHJlZ19pc193b3JsZF9yb2FtaW5nKHN0cnVjdCB3aXBoeSAqd2lwaHkpCit7CisJaWYgKGlzX3dvcmxkX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4tPmFscGhhMikgfHwKKwkgICAgKHdpcGh5LT5yZWdkICYmIGlzX3dvcmxkX3JlZ2RvbSh3aXBoeS0+cmVnZC0+YWxwaGEyKSkpCisJCXJldHVybiB0cnVlOworCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSAmJgorCSAgICB3aXBoeS0+Y3VzdG9tX3JlZ3VsYXRvcnkpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworLyogUmVhcCB0aGUgYWR2YW50YWdlcyBvZiBwcmV2aW91c2x5IGZvdW5kIGJlYWNvbnMgKi8KK3N0YXRpYyB2b2lkIHJlZ19wcm9jZXNzX2JlYWNvbnMoc3RydWN0IHdpcGh5ICp3aXBoeSkKK3sKKwlpZiAoIXJlZ19pc193b3JsZF9yb2FtaW5nKHdpcGh5KSkKKwkJcmV0dXJuOworCXdpcGh5X3VwZGF0ZV9iZWFjb25fcmVnKHdpcGh5KTsKK30KKwordm9pZCB3aXBoeV91cGRhdGVfcmVndWxhdG9yeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICBlbnVtIG5sODAyMTFfcmVnX2luaXRpYXRvciBpbml0aWF0b3IpCit7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCisJaWYgKGlnbm9yZV9yZWdfdXBkYXRlKHdpcGh5LCBpbml0aWF0b3IpKQorCQlnb3RvIG91dDsKKwlmb3IgKGJhbmQgPSAwOyBiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgYmFuZCsrKSB7CisJCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQloYW5kbGVfYmFuZCh3aXBoeSwgYmFuZCk7CisJfQorb3V0OgorCXJlZ19wcm9jZXNzX2JlYWNvbnMod2lwaHkpOworCWlmICh3aXBoeS0+cmVnX25vdGlmaWVyKQorCQl3aXBoeS0+cmVnX25vdGlmaWVyKHdpcGh5LCBsYXN0X3JlcXVlc3QpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfY2hhbm5lbF9jdXN0b20oc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCQkgIHVuc2lnbmVkIGludCBjaGFuX2lkeCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkKQoreworCWludCByOworCXUzMiBtYXhfYmFuZHdpZHRoID0gMDsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpyZWdfcnVsZSA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9wb3dlcl9ydWxlICpwb3dlcl9ydWxlID0gTlVMTDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisKKwlzYmFuZCA9IHdpcGh5LT5iYW5kc1tiYW5kXTsKKwlCVUdfT04oY2hhbl9pZHggPj0gc2JhbmQtPm5fY2hhbm5lbHMpOworCWNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2NoYW5faWR4XTsKKworCXIgPSBmcmVxX3JlZ19pbmZvX3JlZ2Qod2lwaHksIE1IWl9UT19LSFooY2hhbi0+Y2VudGVyX2ZyZXEpLAorCQkmbWF4X2JhbmR3aWR0aCwgJnJlZ19ydWxlLCByZWdkKTsKKworCWlmIChyKSB7CisJCWNoYW4tPmZsYWdzID0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7CisJCXJldHVybjsKKwl9CisKKwlwb3dlcl9ydWxlID0gJnJlZ19ydWxlLT5wb3dlcl9ydWxlOworCisJY2hhbi0+ZmxhZ3MgfD0gbWFwX3JlZ2RvbV9mbGFncyhyZWdfcnVsZS0+ZmxhZ3MpOworCWNoYW4tPm1heF9hbnRlbm5hX2dhaW4gPSAoaW50KSBNQklfVE9fREJJKHBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4pOworCWNoYW4tPm1heF9iYW5kd2lkdGggPSBLSFpfVE9fTUhaKG1heF9iYW5kd2lkdGgpOworCWNoYW4tPm1heF9wb3dlciA9IChpbnQpIE1CTV9UT19EQk0ocG93ZXJfcnVsZS0+bWF4X2VpcnApOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYmFuZF9jdXN0b20oc3RydWN0IHdpcGh5ICp3aXBoeSwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkKQoreworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJQlVHX09OKCF3aXBoeS0+YmFuZHNbYmFuZF0pOworCXNiYW5kID0gd2lwaHktPmJhbmRzW2JhbmRdOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspCisJCWhhbmRsZV9jaGFubmVsX2N1c3RvbSh3aXBoeSwgYmFuZCwgaSwgcmVnZCk7Cit9CisKKy8qIFVzZWQgYnkgZHJpdmVycyBwcmlvciB0byB3aXBoeSByZWdpc3RyYXRpb24gKi8KK3ZvaWQgd2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZCkKIHsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CiAJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQrKykgewogCQlpZiAod2lwaHktPmJhbmRzW2JhbmRdKQotCQkJaGFuZGxlX2JhbmQod2lwaHksIGJhbmQpOwotCQlpZiAod2lwaHktPnJlZ19ub3RpZmllcikKLQkJCXdpcGh5LT5yZWdfbm90aWZpZXIod2lwaHksIHNldGJ5KTsKKwkJCWhhbmRsZV9iYW5kX2N1c3RvbSh3aXBoeSwgYmFuZCwgcmVnZCk7CiAJfQogfQorRVhQT1JUX1NZTUJPTCh3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSk7CiAKLS8qIFJldHVybiB2YWx1ZSB3aGljaCBjYW4gYmUgdXNlZCBieSBpZ25vcmVfcmVxdWVzdCgpIHRvIGluZGljYXRlCi0gKiBpdCBoYXMgYmVlbiBkZXRlcm1pbmVkIHdlIHNob3VsZCBpbnRlcnNlY3QgdHdvIHJlZ3VsYXRvcnkgZG9tYWlucyAqLworc3RhdGljIGludCByZWdfY29weV9yZWdkKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICoqZHN0X3JlZ2QsCisJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnNyY19yZWdkKQoreworCXN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOworCWludCBzaXplX29mX3JlZ2QgPSAwOworCXVuc2lnbmVkIGludCBpOworCisJc2l6ZV9vZl9yZWdkID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluKSArCisJICAoKHNyY19yZWdkLT5uX3JlZ19ydWxlcyArIDEpICogc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUpKTsKKworCXJlZ2QgPSBremFsbG9jKHNpemVfb2ZfcmVnZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZWdkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShyZWdkLCBzcmNfcmVnZCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3JjX3JlZ2QtPm5fcmVnX3J1bGVzOyBpKyspCisJCW1lbWNweSgmcmVnZC0+cmVnX3J1bGVzW2ldLCAmc3JjX3JlZ2QtPnJlZ19ydWxlc1tpXSwKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlKSk7CisKKwkqZHN0X3JlZ2QgPSByZWdkOworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIHZhbHVlIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IGlnbm9yZV9yZXF1ZXN0KCkgdG8gaW5kaWNhdGUKKyAqIGl0IGhhcyBiZWVuIGRldGVybWluZWQgd2Ugc2hvdWxkIGludGVyc2VjdCB0d28gcmVndWxhdG9yeSBkb21haW5zCisgKi8KICNkZWZpbmUgUkVHX0lOVEVSU0VDVAkxCiAKIC8qIFRoaXMgaGFzIHRoZSBsb2dpYyB3aGljaCBkZXRlcm1pbmVzIHdoZW4gYSBuZXcgcmVxdWVzdAogICogc2hvdWxkIGJlIGlnbm9yZWQuICovCi1zdGF0aWMgaW50IGlnbm9yZV9yZXF1ZXN0KHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRfYnksCi0JCQkgIGNvbnN0IGNoYXIgKmFscGhhMikKK3N0YXRpYyBpbnQgaWdub3JlX3JlcXVlc3Qoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcGVuZGluZ19yZXF1ZXN0KQogeworCXN0cnVjdCB3aXBoeSAqbGFzdF93aXBoeSA9IE5VTEw7CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCiAJLyogQWxsIGluaXRpYWwgcmVxdWVzdHMgYXJlIHJlc3BlY3RlZCAqLwogCWlmICghbGFzdF9yZXF1ZXN0KQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAoc2V0X2J5KSB7Ci0JY2FzZSBSRUdET01fU0VUX0JZX0lOSVQ6CisJc3dpdGNoIChwZW5kaW5nX3JlcXVlc3QtPmluaXRpYXRvcikgeworCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU6CiAJCXJldHVybiAtRUlOVkFMOwotCWNhc2UgUkVHRE9NX1NFVF9CWV9DT1JFOgotCQkvKgotCQkgKiBBbHdheXMgcmVzcGVjdCBuZXcgd2lyZWxlc3MgY29yZSBoaW50cywgc2hvdWxkIG9ubHkgaGFwcGVuCi0JCSAqIHdoZW4gdXBkYXRpbmcgdGhlIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluIGF0IGluaXQuCi0JCSAqLwotCQlyZXR1cm4gMDsKLQljYXNlIFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRToKLQkJaWYgKHVubGlrZWx5KCFpc19hbl9hbHBoYTIoYWxwaGEyKSkpCisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRToKKworCQlsYXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKworCQlpZiAodW5saWtlbHkoIWlzX2FuX2FscGhhMihwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKLQkJCWlmIChsYXN0X3JlcXVlc3QtPndpcGh5ICE9IHdpcGh5KSB7CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCQkgICAgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJCWlmIChsYXN0X3dpcGh5ICE9IHdpcGh5KSB7CiAJCQkJLyoKIAkJCQkgKiBUd28gY2FyZHMgd2l0aCB0d28gQVBzIGNsYWltaW5nIGRpZmZlcmVudAogCQkJCSAqIGRpZmZlcmVudCBDb3VudHJ5IElFIGFscGhhMnMuIFdlIGNvdWxkCiAJCQkJICogaW50ZXJzZWN0IHRoZW0sIGJ1dCB0aGF0IHNlZW1zIHVubGlrZWx5CiAJCQkJICogdG8gYmUgY29ycmVjdC4gUmVqZWN0IHNlY29uZCBvbmUgZm9yIG5vdy4KIAkJCQkgKi8KLQkJCQlpZiAoIWFscGhhMl9lcXVhbChhbHBoYTIsCi0JCQkJCQkgIGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyKSkKKwkJCQlpZiAocmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQogCQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCQkJcmV0dXJuIC1FQUxSRUFEWTsKIAkJCX0KLQkJCS8qIFR3byBjb25zZWN1dGl2ZSBDb3VudHJ5IElFIGhpbnRzIG9uIHRoZSBzYW1lIHdpcGh5LgotCQkJICogVGhpcyBzaG91bGQgYmUgcGlja2VkIHVwIGVhcmx5IGJ5IHRoZSBkcml2ZXIvc3RhY2sgKi8KLQkJCWlmIChXQVJOX09OKCFhbHBoYTJfZXF1YWwoY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIsCi0JCQkJICBhbHBoYTIpKSkKKwkJCS8qCisJCQkgKiBUd28gY29uc2VjdXRpdmUgQ291bnRyeSBJRSBoaW50cyBvbiB0aGUgc2FtZSB3aXBoeS4KKwkJCSAqIFRoaXMgc2hvdWxkIGJlIHBpY2tlZCB1cCBlYXJseSBieSB0aGUgZHJpdmVyL3N0YWNrCisJCQkgKi8KKwkJCWlmIChXQVJOX09OKHJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkpCiAJCQkJcmV0dXJuIDA7CiAJCQlyZXR1cm4gLUVBTFJFQURZOwogCQl9CiAJCXJldHVybiBSRUdfSU5URVJTRUNUOwotCWNhc2UgUkVHRE9NX1NFVF9CWV9EUklWRVI6Ci0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0RSSVZFUikKKwljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI6CisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSkgeworCQkJaWYgKGlzX29sZF9zdGF0aWNfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbikpCisJCQkJcmV0dXJuIDA7CisJCQlpZiAocmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQorCQkJCXJldHVybiAwOwogCQkJcmV0dXJuIC1FQUxSRUFEWTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBSRUdET01fU0VUX0JZX1VTRVI6Ci0JCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUpCisJCX0KKworCQkvKgorCQkgKiBUaGlzIHdvdWxkIGhhcHBlbiBpZiB5b3UgdW5wbHVnIGFuZCBwbHVnIHlvdXIgY2FyZAorCQkgKiBiYWNrIGluIG9yIGlmIHlvdSBhZGQgYSBuZXcgZGV2aWNlIGZvciB3aGljaCB0aGUgcHJldmlvdXNseQorCQkgKiBsb2FkZWQgY2FyZCBhbHNvIGFncmVlcyBvbiB0aGUgcmVndWxhdG9yeSBkb21haW4uCisJCSAqLworCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiAmJgorCQkgICAgIXJlZ2RvbV9jaGFuZ2VzKHBlbmRpbmdfcmVxdWVzdC0+YWxwaGEyKSkKKwkJCXJldHVybiAtRUFMUkVBRFk7CisKKwkJcmV0dXJuIFJFR19JTlRFUlNFQ1Q7CisJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUjoKKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKQogCQkJcmV0dXJuIFJFR19JTlRFUlNFQ1Q7Ci0JCS8qIElmIHRoZSB1c2VyIGtub3dzIGJldHRlciB0aGUgdXNlciBzaG91bGQgc2V0IHRoZSByZWdkb20KLQkJICogdG8gdGhlaXIgY291bnRyeSBiZWZvcmUgdGhlIElFIGlzIHBpY2tlZCB1cCAqLwotCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gUkVHRE9NX1NFVF9CWV9VU0VSICYmCisJCS8qCisJCSAqIElmIHRoZSB1c2VyIGtub3dzIGJldHRlciB0aGUgdXNlciBzaG91bGQgc2V0IHRoZSByZWdkb20KKwkJICogdG8gdGhlaXIgY291bnRyeSBiZWZvcmUgdGhlIElFIGlzIHBpY2tlZCB1cAorCQkgKi8KKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSICYmCiAJCQkgIGxhc3RfcmVxdWVzdC0+aW50ZXJzZWN0KQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQkvKgorCQkgKiBQcm9jZXNzIHVzZXIgcmVxdWVzdHMgb25seSBhZnRlciBwcmV2aW91cyB1c2VyL2RyaXZlci9jb3JlCisJCSAqIHJlcXVlc3RzIGhhdmUgYmVlbiBwcm9jZXNzZWQKKwkJICovCisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSB8fAorCQkgICAgbGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUiB8fAorCQkgICAgbGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIpIHsKKwkJCWlmIChyZWdkb21fY2hhbmdlcyhsYXN0X3JlcXVlc3QtPmFscGhhMikpCisJCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKworCQlpZiAoIWlzX29sZF9zdGF0aWNfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbikgJiYKKwkJICAgICFyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCisJCQlyZXR1cm4gLUVBTFJFQURZOworCiAJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRUlOVkFMOwogfQogCi0vKiBDYWxsZXIgbXVzdCBob2xkICZjZmc4MDIxMV9kcnZfbXV0ZXggKi8KLWludCBfX3JlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBlbnVtIHJlZ19zZXRfYnkgc2V0X2J5LAotCQkJY29uc3QgY2hhciAqYWxwaGEyLAotCQkJdTMyIGNvdW50cnlfaWVfY2hlY2tzdW0sCi0JCQllbnVtIGVudmlyb25tZW50X2NhcCBlbnYpCisvKioKKyAqIF9fcmVndWxhdG9yeV9oaW50IC0gaGludCB0byB0aGUgd2lyZWxlc3MgY29yZSBhIHJlZ3VsYXRvcnkgZG9tYWluCisgKiBAd2lwaHk6IGlmIHRoZSBoaW50IGNvbWVzIGZyb20gY291bnRyeSBpbmZvcm1hdGlvbiBmcm9tIGFuIEFQLCB0aGlzCisgKglpcyByZXF1aXJlZCB0byBiZSBzZXQgdG8gdGhlIHdpcGh5IHRoYXQgcmVjZWl2ZWQgdGhlIGluZm9ybWF0aW9uCisgKiBAcGVuZGluZ19yZXF1ZXN0OiB0aGUgcmVndWxhdG9yeSByZXF1ZXN0IGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQKKyAqCisgKiBUaGUgV2lyZWxlc3Mgc3Vic3lzdGVtIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBoaW50IHRvIHRoZSB3aXJlbGVzcyBjb3JlCisgKiB3aGF0IGl0IGJlbGlldmVzIHNob3VsZCBiZSB0aGUgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbi4KKyAqCisgKiBSZXR1cm5zIHplcm8gaWYgYWxsIHdlbnQgZmluZSwgJS1FQUxSRUFEWSBpZiBhIHJlZ3VsYXRvcnkgZG9tYWluIGhhZAorICogYWxyZWFkeSBiZWVuIHNldCBvciBvdGhlciBzdGFuZGFyZCBlcnJvciBjb2Rlcy4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkICZjZmc4MDIxMV9tdXRleAorICovCitzdGF0aWMgaW50IF9fcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnBlbmRpbmdfcmVxdWVzdCkKIHsKLQlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OwogCWJvb2wgaW50ZXJzZWN0ID0gZmFsc2U7CiAJaW50IHIgPSAwOwogCi0JciA9IGlnbm9yZV9yZXF1ZXN0KHdpcGh5LCBzZXRfYnksIGFscGhhMik7CisJYXNzZXJ0X2NmZzgwMjExX2xvY2soKTsKIAotCWlmIChyID09IFJFR19JTlRFUlNFQ1QpCisJciA9IGlnbm9yZV9yZXF1ZXN0KHdpcGh5LCBwZW5kaW5nX3JlcXVlc3QpOworCisJaWYgKHIgPT0gUkVHX0lOVEVSU0VDVCkgeworCQlpZiAocGVuZGluZ19yZXF1ZXN0LT5pbml0aWF0b3IgPT0KKwkJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIpIHsKKwkJCXIgPSByZWdfY29weV9yZWdkKCZ3aXBoeS0+cmVnZCwgY2ZnODAyMTFfcmVnZG9tYWluKTsKKwkJCWlmIChyKSB7CisJCQkJa2ZyZWUocGVuZGluZ19yZXF1ZXN0KTsKKwkJCQlyZXR1cm4gcjsKKwkJCX0KKwkJfQogCQlpbnRlcnNlY3QgPSB0cnVlOwotCWVsc2UgaWYgKHIpCisJfSBlbHNlIGlmIChyKSB7CisJCS8qCisJCSAqIElmIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBiZWluZyByZXF1ZXN0ZWQgYnkgdGhlCisJCSAqIGRyaXZlciBoYXMgYWxyZWFkeSBiZWVuIHNldCBqdXN0IGNvcHkgaXQgdG8gdGhlCisJCSAqIHdpcGh5CisJCSAqLworCQlpZiAociA9PSAtRUFMUkVBRFkgJiYKKwkJICAgIHBlbmRpbmdfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSKSB7CisJCQlyID0gcmVnX2NvcHlfcmVnZCgmd2lwaHktPnJlZ2QsIGNmZzgwMjExX3JlZ2RvbWFpbik7CisJCQlpZiAocikgeworCQkJCWtmcmVlKHBlbmRpbmdfcmVxdWVzdCk7CisJCQkJcmV0dXJuIHI7CisJCQl9CisJCQlyID0gLUVBTFJFQURZOworCQkJZ290byBuZXdfcmVxdWVzdDsKKwkJfQorCQlrZnJlZShwZW5kaW5nX3JlcXVlc3QpOwogCQlyZXR1cm4gcjsKKwl9CisKK25ld19yZXF1ZXN0OgorCWtmcmVlKGxhc3RfcmVxdWVzdCk7CisKKwlsYXN0X3JlcXVlc3QgPSBwZW5kaW5nX3JlcXVlc3Q7CisJbGFzdF9yZXF1ZXN0LT5pbnRlcnNlY3QgPSBpbnRlcnNlY3Q7CisKKwlwZW5kaW5nX3JlcXVlc3QgPSBOVUxMOworCisJLyogV2hlbiByID09IFJFR19JTlRFUlNFQ1Qgd2UgZG8gbmVlZCB0byBjYWxsIENSREEgKi8KKwlpZiAociA8IDApIHsKKwkJLyoKKwkJICogU2luY2UgQ1JEQSB3aWxsIG5vdCBiZSBjYWxsZWQgaW4gdGhpcyBjYXNlIGFzIHdlIGFscmVhZHkKKwkJICogaGF2ZSBhcHBsaWVkIHRoZSByZXF1ZXN0ZWQgcmVndWxhdG9yeSBkb21haW4gYmVmb3JlIHdlIGp1c3QKKwkJICogaW5mb3JtIHVzZXJzcGFjZSB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUgcmVxdWVzdAorCQkgKi8KKwkJaWYgKHIgPT0gLUVBTFJFQURZKQorCQkJbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQobGFzdF9yZXF1ZXN0KTsKKwkJcmV0dXJuIHI7CisJfQorCisJcmV0dXJuIGNhbGxfY3JkYShsYXN0X3JlcXVlc3QtPmFscGhhMik7Cit9CisKKy8qIFRoaXMgY3VycmVudGx5IG9ubHkgcHJvY2Vzc2VzIHVzZXIgYW5kIGRyaXZlciByZWd1bGF0b3J5IGhpbnRzICovCitzdGF0aWMgdm9pZCByZWdfcHJvY2Vzc19oaW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0KQoreworCWludCByID0gMDsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gTlVMTDsKKworCUJVR19PTighcmVnX3JlcXVlc3QtPmFscGhhMik7CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwlpZiAod2lwaHlfaWR4X3ZhbGlkKHJlZ19yZXF1ZXN0LT53aXBoeV9pZHgpKQorCQl3aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShyZWdfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKworCWlmIChyZWdfcmVxdWVzdC0+aW5pdGlhdG9yID09IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVIgJiYKKwkgICAgIXdpcGh5KSB7CisJCWtmcmVlKHJlZ19yZXF1ZXN0KTsKKwkJZ290byBvdXQ7CisJfQorCisJciA9IF9fcmVndWxhdG9yeV9oaW50KHdpcGh5LCByZWdfcmVxdWVzdCk7CisJLyogVGhpcyBpcyByZXF1aXJlZCBzbyB0aGF0IHRoZSBvcmlnXyogcGFyYW1ldGVycyBhcmUgc2F2ZWQgKi8KKwlpZiAociA9PSAtRUFMUkVBRFkgJiYgd2lwaHkgJiYgd2lwaHktPnN0cmljdF9yZWd1bGF0b3J5KQorCQl3aXBoeV91cGRhdGVfcmVndWxhdG9yeSh3aXBoeSwgcmVnX3JlcXVlc3QtPmluaXRpYXRvcik7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7Cit9CisKKy8qIFByb2Nlc3NlcyByZWd1bGF0b3J5IGhpbnRzLCB0aGlzIGlzIGFsbCB0aGUgTkw4MDIxMV9SRUdET01fU0VUX0JZXyogKi8KK3N0YXRpYyB2b2lkIHJlZ19wcm9jZXNzX3BlbmRpbmdfaGludHModm9pZCkKKwl7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVnX3JlcXVlc3Q7CisKKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJlZ19yZXF1ZXN0c19saXN0KSkgeworCQlyZWdfcmVxdWVzdCA9IGxpc3RfZmlyc3RfZW50cnkoJnJlZ19yZXF1ZXN0c19saXN0LAorCQkJCQkgICAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCwKKwkJCQkJICAgICAgIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZyZWdfcmVxdWVzdC0+bGlzdCk7CisKKwkJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwkJcmVnX3Byb2Nlc3NfaGludChyZWdfcmVxdWVzdCk7CisJCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCX0KKwlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworfQorCisvKiBQcm9jZXNzZXMgYmVhY29uIGhpbnRzIC0tIHRoaXMgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCBjb3VudHJ5IElFcyAqLworc3RhdGljIHZvaWQgcmVnX3Byb2Nlc3NfcGVuZGluZ19iZWFjb25faGludHModm9pZCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydjsKKwlzdHJ1Y3QgcmVnX2JlYWNvbiAqcGVuZGluZ19iZWFjb24sICp0bXA7CisKKwltdXRleF9sb2NrKCZjZmc4MDIxMV9tdXRleCk7CisKKwkvKiBUaGlzIGdvZXMgdGhyb3VnaCB0aGUgX3BlbmRpbmdfIGJlYWNvbiBsaXN0ICovCisJc3Bpbl9sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCisJaWYgKGxpc3RfZW1wdHkoJnJlZ19wZW5kaW5nX2JlYWNvbnMpKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCQlnb3RvIG91dDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGVuZGluZ19iZWFjb24sIHRtcCwKKwkJCQkgJnJlZ19wZW5kaW5nX2JlYWNvbnMsIGxpc3QpIHsKKworCQlsaXN0X2RlbF9pbml0KCZwZW5kaW5nX2JlYWNvbi0+bGlzdCk7CisKKwkJLyogQXBwbGllcyB0aGUgYmVhY29uIGhpbnQgdG8gY3VycmVudCB3aXBoeXMgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjZmc4MDIxMV9kcnZfbGlzdCwgbGlzdCkKKwkJCXdpcGh5X3VwZGF0ZV9uZXdfYmVhY29uKCZkcnYtPndpcGh5LCBwZW5kaW5nX2JlYWNvbik7CisKKwkJLyogUmVtZW1iZXJzIHRoZSBiZWFjb24gaGludCBmb3IgbmV3IHdpcGh5cyBvciByZWcgY2hhbmdlcyAqLworCQlsaXN0X2FkZF90YWlsKCZwZW5kaW5nX2JlYWNvbi0+bGlzdCwgJnJlZ19iZWFjb25fbGlzdCk7CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ190b2RvKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlyZWdfcHJvY2Vzc19wZW5kaW5nX2hpbnRzKCk7CisJcmVnX3Byb2Nlc3NfcGVuZGluZ19iZWFjb25faGludHMoKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhyZWdfd29yaywgcmVnX3RvZG8pOworCitzdGF0aWMgdm9pZCBxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3Qoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3sKKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZyZXF1ZXN0LT5saXN0LCAmcmVnX3JlcXVlc3RzX2xpc3QpOworCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZyZWdfd29yayk7Cit9CisKKy8qIENvcmUgcmVndWxhdG9yeSBoaW50IC0tIGhhcHBlbnMgb25jZSBkdXJpbmcgY2ZnODAyMTFfaW5pdCgpICovCitzdGF0aWMgaW50IHJlZ3VsYXRvcnlfaGludF9jb3JlKGNvbnN0IGNoYXIgKmFscGhhMikKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJQlVHX09OKGxhc3RfcmVxdWVzdCk7CiAKIAlyZXF1ZXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCksCiAJCQkgIEdGUF9LRVJORUwpOwpAQCAtMTA0OSw0NyArMTUzNCw4NCBAQAogCiAJcmVxdWVzdC0+YWxwaGEyWzBdID0gYWxwaGEyWzBdOwogCXJlcXVlc3QtPmFscGhhMlsxXSA9IGFscGhhMlsxXTsKLQlyZXF1ZXN0LT5pbml0aWF0b3IgPSBzZXRfYnk7Ci0JcmVxdWVzdC0+d2lwaHkgPSB3aXBoeTsKLQlyZXF1ZXN0LT5pbnRlcnNlY3QgPSBpbnRlcnNlY3Q7Ci0JcmVxdWVzdC0+Y291bnRyeV9pZV9jaGVja3N1bSA9IGNvdW50cnlfaWVfY2hlY2tzdW07Ci0JcmVxdWVzdC0+Y291bnRyeV9pZV9lbnYgPSBlbnY7CisJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU7CiAKLQlrZnJlZShsYXN0X3JlcXVlc3QpOwotCWxhc3RfcmVxdWVzdCA9IHJlcXVlc3Q7Ci0JLyoKLQkgKiBOb3RlOiBXaGVuIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBlbmFibGVkCi0JICogQU5EIGlmIENSREEgaXMgTk9UIHByZXNlbnQgbm90aGluZyB3aWxsIGhhcHBlbiwgaWYgc29tZW9uZQotCSAqIHdhbnRzIHRvIGJvdGhlciB3aXRoIDExZCB3aXRoIE9MRF9SRUcgeW91IGNhbiBhZGQgYSB0aW1lci4KLQkgKiBJZiBhZnRlciB4IGFtb3VudCBvZiB0aW1lIG5vdGhpbmcgaGFwcGVucyB5b3UgY2FuIGNhbGw6Ci0JICoKLQkgKiByZXR1cm4gc2V0X3JlZ2RvbShjb3VudHJ5X2llX3JlZ2RvbWFpbik7Ci0JICoKLQkgKiB0byBpbnRlcnNlY3Qgd2l0aCB0aGUgc3RhdGljIHJkCi0JICovCi0JcmV0dXJuIGNhbGxfY3JkYShhbHBoYTIpOworCXF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChyZXF1ZXN0KTsKKworCXJldHVybiAwOwogfQogCi12b2lkIHJlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjb25zdCBjaGFyICphbHBoYTIpCisvKiBVc2VyIGhpbnRzICovCitpbnQgcmVndWxhdG9yeV9oaW50X3VzZXIoY29uc3QgY2hhciAqYWxwaGEyKQogeworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3Q7CisKIAlCVUdfT04oIWFscGhhMik7CiAKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOwotCV9fcmVndWxhdG9yeV9oaW50KHdpcGh5LCBSRUdET01fU0VUX0JZX0RSSVZFUiwgYWxwaGEyLCAwLCBFTlZJUk9OX0FOWSk7Ci0JbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcXVlc3QtPndpcGh5X2lkeCA9IFdJUEhZX0lEWF9TVEFMRTsKKwlyZXF1ZXN0LT5hbHBoYTJbMF0gPSBhbHBoYTJbMF07CisJcmVxdWVzdC0+YWxwaGEyWzFdID0gYWxwaGEyWzFdOworCXJlcXVlc3QtPmluaXRpYXRvciA9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSLAorCisJcXVldWVfcmVndWxhdG9yeV9yZXF1ZXN0KHJlcXVlc3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIERyaXZlciBoaW50cyAqLworaW50IHJlZ3VsYXRvcnlfaGludChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBjb25zdCBjaGFyICphbHBoYTIpCit7CisJc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdDsKKworCUJVR19PTighYWxwaGEyKTsKKwlCVUdfT04oIXdpcGh5KTsKKworCXJlcXVlc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXF1ZXN0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcXVlc3QtPndpcGh5X2lkeCA9IGdldF93aXBoeV9pZHgod2lwaHkpOworCisJLyogTXVzdCBoYXZlIHJlZ2lzdGVyZWQgd2lwaHkgZmlyc3QgKi8KKwlCVUdfT04oIXdpcGh5X2lkeF92YWxpZChyZXF1ZXN0LT53aXBoeV9pZHgpKTsKKworCXJlcXVlc3QtPmFscGhhMlswXSA9IGFscGhhMlswXTsKKwlyZXF1ZXN0LT5hbHBoYTJbMV0gPSBhbHBoYTJbMV07CisJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0RSSVZFUjsKKworCXF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChyZXF1ZXN0KTsKKworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChyZWd1bGF0b3J5X2hpbnQpOwogCiBzdGF0aWMgYm9vbCByZWdfc2FtZV9jb3VudHJ5X2llX2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCXUzMiBjb3VudHJ5X2llX2NoZWNrc3VtKQogewotCWlmICghbGFzdF9yZXF1ZXN0LT53aXBoeSkKKwlzdHJ1Y3Qgd2lwaHkgKnJlcXVlc3Rfd2lwaHk7CisKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCisJaWYgKHVubGlrZWx5KGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9CisJICAgIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSkKIAkJcmV0dXJuIGZhbHNlOwotCWlmIChsaWtlbHkobGFzdF9yZXF1ZXN0LT53aXBoeSAhPSB3aXBoeSkpCisKKwlyZXF1ZXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKworCWlmICghcmVxdWVzdF93aXBoeSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGxpa2VseShyZXF1ZXN0X3dpcGh5ICE9IHdpcGh5KSkKIAkJcmV0dXJuICFjb3VudHJ5X2llX2ludGVncml0eV9jaGFuZ2VzKGNvdW50cnlfaWVfY2hlY2tzdW0pOwotCS8qIFdlIHNob3VsZCBub3QgaGF2ZSBsZXQgdGhlc2UgdGhyb3VnaCBhdCB0aGlzIHBvaW50LCB0aGV5CisJLyoKKwkgKiBXZSBzaG91bGQgbm90IGhhdmUgbGV0IHRoZXNlIHRocm91Z2ggYXQgdGhpcyBwb2ludCwgdGhleQogCSAqIHNob3VsZCBoYXZlIGJlZW4gcGlja2VkIHVwIGVhcmxpZXIgYnkgdGhlIGZpcnN0IGFscGhhMiBjaGVjawotCSAqIG9uIHRoZSBkZXZpY2UgKi8KKwkgKiBvbiB0aGUgZGV2aWNlCisJICovCiAJaWYgKFdBUk5fT04oIWNvdW50cnlfaWVfaW50ZWdyaXR5X2NoYW5nZXMoY291bnRyeV9pZV9jaGVja3N1bSkpKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CkBAIC0xMTAzLDExICsxNjI1LDE0IEBACiAJY2hhciBhbHBoYTJbMl07CiAJdTMyIGNoZWNrc3VtID0gMDsKIAllbnVtIGVudmlyb25tZW50X2NhcCBlbnYgPSBFTlZJUk9OX0FOWTsKKwlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OwogCi0JaWYgKCFsYXN0X3JlcXVlc3QpCisJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJaWYgKHVubGlrZWx5KCFsYXN0X3JlcXVlc3QpKSB7CisJCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOwogCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCX0KIAogCS8qIElFIGxlbiBtdXN0IGJlIGV2ZW5seSBkaXZpc2libGUgYnkgMiAqLwogCWlmIChjb3VudHJ5X2llX2xlbiAmIDB4MDEpCkBAIC0xMTE2LDkgKzE2NDEsMTEgQEAKIAlpZiAoY291bnRyeV9pZV9sZW4gPCBJRUVFODAyMTFfQ09VTlRSWV9JRV9NSU5fTEVOKQogCQlnb3RvIG91dDsKIAotCS8qIFBlbmRpbmcgY291bnRyeSBJRSBwcm9jZXNzaW5nLCB0aGlzIGNhbiBoYXBwZW4gYWZ0ZXIgd2UKKwkvKgorCSAqIFBlbmRpbmcgY291bnRyeSBJRSBwcm9jZXNzaW5nLCB0aGlzIGNhbiBoYXBwZW4gYWZ0ZXIgd2UKIAkgKiBjYWxsIENSREEgYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UgaWYgYSBiZWFjb24gd2FzIHJlY2VpdmVkIGJlZm9yZQotCSAqIHdlIHdlcmUgYWJsZSB0byBwcm9jZXNzIHRoZSBsYXN0IHJlZ3VsYXRvcnlfaGludF8xMWQoKSBjYWxsICovCisJICogd2Ugd2VyZSBhYmxlIHRvIHByb2Nlc3MgdGhlIGxhc3QgcmVndWxhdG9yeV9oaW50XzExZCgpIGNhbGwKKwkgKi8KIAlpZiAoY291bnRyeV9pZV9yZWdkb21haW4pCiAJCWdvdG8gb3V0OwogCkBAIC0xMTMwLDMzICsxNjU3LDQ2IEBACiAJZWxzZSBpZiAoY291bnRyeV9pZVsyXSA9PSAnTycpCiAJCWVudiA9IEVOVklST05fT1VURE9PUjsKIAotCS8qIFdlIHdpbGwgcnVuIHRoaXMgZm9yICpldmVyeSogYmVhY29uIHByb2Nlc3NlZCBmb3IgdGhlIEJTU0lELCBzbworCS8qCisJICogV2Ugd2lsbCBydW4gdGhpcyBmb3IgKmV2ZXJ5KiBiZWFjb24gcHJvY2Vzc2VkIGZvciB0aGUgQlNTSUQsIHNvCiAJICogd2Ugb3B0aW1pemUgYW4gZWFybHkgY2hlY2sgdG8gZXhpdCBvdXQgZWFybHkgaWYgd2UgZG9uJ3QgaGF2ZSB0bwotCSAqIGRvIGFueXRoaW5nICovCi0JaWYgKGxpa2VseShsYXN0X3JlcXVlc3QtPndpcGh5KSkgeworCSAqIGRvIGFueXRoaW5nCisJICovCisJaWYgKGxpa2VseShsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PQorCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSAmJgorCSAgICB3aXBoeV9pZHhfdmFsaWQobGFzdF9yZXF1ZXN0LT53aXBoeV9pZHgpKSkgewogCQlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRydl9sYXN0X2llOwogCi0JCWRydl9sYXN0X2llID0gd2lwaHlfdG9fZGV2KGxhc3RfcmVxdWVzdC0+d2lwaHkpOworCQlkcnZfbGFzdF9pZSA9CisJCQljZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKIAotCQkvKiBMZXRzIGtlZXAgdGhpcyBzaW1wbGUgLS0gd2UgdHJ1c3QgdGhlIGZpcnN0IEFQCi0JCSAqIGFmdGVyIHdlIGludGVyc2VjdCB3aXRoIENSREEgKi8KLQkJaWYgKGxpa2VseShsYXN0X3JlcXVlc3QtPndpcGh5ID09IHdpcGh5KSkgewotCQkJLyogSWdub3JlIElFcyBjb21pbmcgaW4gb24gdGhpcyB3aXBoeSB3aXRoCi0JCQkgKiB0aGUgc2FtZSBhbHBoYTIgYW5kIGVudmlyb25tZW50IGNhcCAqLworCQkvKgorCQkgKiBMZXRzIGtlZXAgdGhpcyBzaW1wbGUgLS0gd2UgdHJ1c3QgdGhlIGZpcnN0IEFQCisJCSAqIGFmdGVyIHdlIGludGVyc2VjdCB3aXRoIENSREEKKwkJICovCisJCWlmIChsaWtlbHkoJmRydl9sYXN0X2llLT53aXBoeSA9PSB3aXBoeSkpIHsKKwkJCS8qCisJCQkgKiBJZ25vcmUgSUVzIGNvbWluZyBpbiBvbiB0aGlzIHdpcGh5IHdpdGgKKwkJCSAqIHRoZSBzYW1lIGFscGhhMiBhbmQgZW52aXJvbm1lbnQgY2FwCisJCQkgKi8KIAkJCWlmIChsaWtlbHkoYWxwaGEyX2VxdWFsKGRydl9sYXN0X2llLT5jb3VudHJ5X2llX2FscGhhMiwKIAkJCQkgIGFscGhhMikgJiYKIAkJCQkgIGVudiA9PSBkcnZfbGFzdF9pZS0+ZW52KSkgewogCQkJCWdvdG8gb3V0OwogCQkJfQotCQkJLyogdGhlIHdpcGh5IG1vdmVkIG9uIHRvIGFub3RoZXIgQlNTSUQgb3IgdGhlIEFQCisJCQkvKgorCQkJICogdGhlIHdpcGh5IG1vdmVkIG9uIHRvIGFub3RoZXIgQlNTSUQgb3IgdGhlIEFQCiAJCQkgKiB3YXMgcmVjb25maWd1cmVkLiBYWFg6IFdlIG5lZWQgdG8gZGVhbCB3aXRoIHRoZQogCQkJICogY2FzZSB3aGVyZSB0aGUgdXNlciBzdXNwZW5kcyBhbmQgZ29lcyB0byBnb2VzCiAJCQkgKiB0byBhbm90aGVyIGNvdW50cnksIGFuZCB0aGVuIGdldHMgSUVzIGZyb20gYW4KLQkJCSAqIEFQIHdpdGggZGlmZmVyZW50IHNldHRpbmdzICovCisJCQkgKiBBUCB3aXRoIGRpZmZlcmVudCBzZXR0aW5ncworCQkJICovCiAJCQlnb3RvIG91dDsKIAkJfSBlbHNlIHsKLQkJCS8qIElnbm9yZSBJRXMgY29taW5nIGluIG9uIHR3byBzZXBhcmF0ZSB3aXBoeXMgd2l0aAotCQkJICogdGhlIHNhbWUgYWxwaGEyIGFuZCBlbnZpcm9ubWVudCBjYXAgKi8KKwkJCS8qCisJCQkgKiBJZ25vcmUgSUVzIGNvbWluZyBpbiBvbiB0d28gc2VwYXJhdGUgd2lwaHlzIHdpdGgKKwkJCSAqIHRoZSBzYW1lIGFscGhhMiBhbmQgZW52aXJvbm1lbnQgY2FwCisJCQkgKi8KIAkJCWlmIChsaWtlbHkoYWxwaGEyX2VxdWFsKGRydl9sYXN0X2llLT5jb3VudHJ5X2llX2FscGhhMiwKIAkJCQkgIGFscGhhMikgJiYKIAkJCQkgIGVudiA9PSBkcnZfbGFzdF9pZS0+ZW52KSkgewpAQCAtMTE3MSwyOCArMTcxMSw5NyBAQAogCWlmICghcmQpCiAJCWdvdG8gb3V0OwogCi0JLyogVGhpcyB3aWxsIG5vdCBoYXBwZW4gcmlnaHQgbm93IGJ1dCB3ZSBsZWF2ZSBpdCBoZXJlIGZvciB0aGUKKwkvKgorCSAqIFRoaXMgd2lsbCBub3QgaGFwcGVuIHJpZ2h0IG5vdyBidXQgd2UgbGVhdmUgaXQgaGVyZSBmb3IgdGhlCiAJICogdGhlIGZ1dHVyZSB3aGVuIHdlIHdhbnQgdG8gYWRkIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQgYW5kIGhhdmluZwogCSAqIHRoZSB1c2VyIG1vdmUgdG8gYW5vdGhlciBjb3VudHJ5IGFmdGVyIGRvaW5nIHNvLCBvciBoYXZpbmcgdGhlIHVzZXIKLQkgKiBtb3ZlIHRvIGFub3RoZXIgQVAuIFJpZ2h0IG5vdyB3ZSBqdXN0IHRydXN0IHRoZSBmaXJzdCBBUC4gVGhpcyBpcyB3aHkKLQkgKiB0aGlzIGlzIG1hcmtlZCBhcyBsaWtsZXkoKS4gSWYgd2UgaGl0IHRoaXMgYmVmb3JlIHdlIGFkZCB0aGlzIHN1cHBvcnQKLQkgKiB3ZSB3YW50IHRvIGJlIGluZm9ybWVkIG9mIGl0IGFzIGl0IHdvdWxkIGluZGljYXRlIGEgbWlzdGFrZSBpbiB0aGUKLQkgKiBjdXJyZW50IGRlc2lnbiAgKi8KLQlpZiAobGlrZWx5KFdBUk5fT04ocmVnX3NhbWVfY291bnRyeV9pZV9oaW50KHdpcGh5LCBjaGVja3N1bSkpKSkKLQkJZ290byBvdXQ7CisJICogbW92ZSB0byBhbm90aGVyIEFQLiBSaWdodCBub3cgd2UganVzdCB0cnVzdCB0aGUgZmlyc3QgQVAuCisJICoKKwkgKiBJZiB3ZSBoaXQgdGhpcyBiZWZvcmUgd2UgYWRkIHRoaXMgc3VwcG9ydCB3ZSB3YW50IHRvIGJlIGluZm9ybWVkIG9mCisJICogaXQgYXMgaXQgd291bGQgaW5kaWNhdGUgYSBtaXN0YWtlIGluIHRoZSBjdXJyZW50IGRlc2lnbgorCSAqLworCWlmIChXQVJOX09OKHJlZ19zYW1lX2NvdW50cnlfaWVfaGludCh3aXBoeSwgY2hlY2tzdW0pKSkKKwkJZ290byBmcmVlX3JkX291dDsKIAotCS8qIFdlIGtlZXAgdGhpcyBhcm91bmQgZm9yIHdoZW4gQ1JEQSBjb21lcyBiYWNrIHdpdGggYSByZXNwb25zZSBzbwotCSAqIHdlIGNhbiBpbnRlcnNlY3Qgd2l0aCB0aGF0ICovCisJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcXVlc3QpCisJCWdvdG8gZnJlZV9yZF9vdXQ7CisKKwkvKgorCSAqIFdlIGtlZXAgdGhpcyBhcm91bmQgZm9yIHdoZW4gQ1JEQSBjb21lcyBiYWNrIHdpdGggYSByZXNwb25zZSBzbworCSAqIHdlIGNhbiBpbnRlcnNlY3Qgd2l0aCB0aGF0CisJICovCiAJY291bnRyeV9pZV9yZWdkb21haW4gPSByZDsKIAotCV9fcmVndWxhdG9yeV9oaW50KHdpcGh5LCBSRUdET01fU0VUX0JZX0NPVU5UUllfSUUsCi0JCWNvdW50cnlfaWVfcmVnZG9tYWluLT5hbHBoYTIsIGNoZWNrc3VtLCBlbnYpOworCXJlcXVlc3QtPndpcGh5X2lkeCA9IGdldF93aXBoeV9pZHgod2lwaHkpOworCXJlcXVlc3QtPmFscGhhMlswXSA9IHJkLT5hbHBoYTJbMF07CisJcmVxdWVzdC0+YWxwaGEyWzFdID0gcmQtPmFscGhhMlsxXTsKKwlyZXF1ZXN0LT5pbml0aWF0b3IgPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRTsKKwlyZXF1ZXN0LT5jb3VudHJ5X2llX2NoZWNrc3VtID0gY2hlY2tzdW07CisJcmVxdWVzdC0+Y291bnRyeV9pZV9lbnYgPSBlbnY7CiAKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKworCXF1ZXVlX3JlZ3VsYXRvcnlfcmVxdWVzdChyZXF1ZXN0KTsKKworCXJldHVybjsKKworZnJlZV9yZF9vdXQ6CisJa2ZyZWUocmQpOwogb3V0OgotCW11dGV4X3VubG9jaygmY2ZnODAyMTFfZHJ2X211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIH0KIEVYUE9SVF9TWU1CT0wocmVndWxhdG9yeV9oaW50XzExZCk7CiAKK3N0YXRpYyBib29sIGZyZXFfaXNfY2hhbl8xMl8xM18xNCh1MTYgZnJlcSkKK3sKKwlpZiAoZnJlcSA9PSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koMTIpIHx8CisJICAgIGZyZXEgPT0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KDEzKSB8fAorCSAgICBmcmVxID09IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeSgxNCkpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworaW50IHJlZ3VsYXRvcnlfaGludF9mb3VuZF9iZWFjb24oc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpiZWFjb25fY2hhbiwKKwkJCQkgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uOworCisJaWYgKGxpa2VseSgoYmVhY29uX2NoYW4tPmJlYWNvbl9mb3VuZCB8fAorCSAgICAoYmVhY29uX2NoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fUkFEQVIpIHx8CisJICAgIChiZWFjb25fY2hhbi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haICYmCisJICAgICAhZnJlcV9pc19jaGFuXzEyXzEzXzE0KGJlYWNvbl9jaGFuLT5jZW50ZXJfZnJlcSkpKSkpCisJCXJldHVybiAwOworCisJcmVnX2JlYWNvbiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWdfYmVhY29uKSwgZ2ZwKTsKKwlpZiAoIXJlZ19iZWFjb24pCisJCXJldHVybiAtRU5PTUVNOworCisjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICJjZmc4MDIxMTogRm91bmQgbmV3IGJlYWNvbiBvbiAiCisJCSJmcmVxdWVuY3k6ICVkIE1IeiAoQ2ggJWQpIG9uICVzXG4iLAorCQliZWFjb25fY2hhbi0+Y2VudGVyX2ZyZXEsCisJCWllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChiZWFjb25fY2hhbi0+Y2VudGVyX2ZyZXEpLAorCQl3aXBoeV9uYW1lKHdpcGh5KSk7CisjZW5kaWYKKwltZW1jcHkoJnJlZ19iZWFjb24tPmNoYW4sIGJlYWNvbl9jaGFuLAorCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9jaGFubmVsKSk7CisKKworCS8qCisJICogU2luY2Ugd2UgY2FuIGJlIGNhbGxlZCBmcm9tIEJIIG9yIGFuZCBub24tQkggY29udGV4dAorCSAqIHdlIG11c3QgdXNlIHNwaW5fbG9ja19iaCgpCisJICovCisJc3Bpbl9sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJnJlZ19iZWFjb24tPmxpc3QsICZyZWdfcGVuZGluZ19iZWFjb25zKTsKKwlzcGluX3VubG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKworCXNjaGVkdWxlX3dvcmsoJnJlZ193b3JrKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBwcmludF9yZF9ydWxlcyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0xMjA4LDggKzE4MTcsMTAgQEAKIAkJZnJlcV9yYW5nZSA9ICZyZWdfcnVsZS0+ZnJlcV9yYW5nZTsKIAkJcG93ZXJfcnVsZSA9ICZyZWdfcnVsZS0+cG93ZXJfcnVsZTsKIAotCQkvKiBUaGVyZSBtYXkgbm90IGJlIGRvY3VtZW50YXRpb24gZm9yIG1heCBhbnRlbm5hIGdhaW4KLQkJICogaW4gY2VydGFpbiByZWdpb25zICovCisJCS8qCisJCSAqIFRoZXJlIG1heSBub3QgYmUgZG9jdW1lbnRhdGlvbiBmb3IgbWF4IGFudGVubmEgZ2FpbgorCQkgKiBpbiBjZXJ0YWluIHJlZ2lvbnMKKwkJICovCiAJCWlmIChwb3dlcl9ydWxlLT5tYXhfYW50ZW5uYV9nYWluKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiXHQoJWQgS0h6IC0gJWQgS0h6IEAgJWQgS0h6KSwgIgogCQkJCSIoJWQgbUJpLCAlZCBtQm0pXG4iLApAQCAtMTIzMiwxMyArMTg0MywxMyBAQAogewogCiAJaWYgKGlzX2ludGVyc2VjdGVkX2FscGhhMihyZC0+YWxwaGEyKSkgewotCQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gTlVMTDsKLQkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CiAKLQkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgewotCQkJaWYgKGxhc3RfcmVxdWVzdC0+d2lwaHkpIHsKLQkJCQl3aXBoeSA9IGxhc3RfcmVxdWVzdC0+d2lwaHk7Ci0JCQkJZHJ2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwkJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09CisJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgeworCQkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnY7CisJCQlkcnYgPSBjZmc4MDIxMV9kcnZfYnlfd2lwaHlfaWR4KAorCQkJCWxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKwkJCWlmIChkcnYpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogQ3VycmVudCByZWd1bGF0b3J5ICIKIAkJCQkJImRvbWFpbiB1cGRhdGVkIGJ5IEFQIHRvOiAlYyVjXG4iLAogCQkJCQlkcnYtPmNvdW50cnlfaWVfYWxwaGEyWzBdLApAQCAtMTI0OCw3ICsxODU5LDcgQEAKIAkJCQkJImRvbWFpbiBpbnRlcnNlY3RlZDogXG4iKTsKIAkJfSBlbHNlCiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IEN1cnJlbnQgcmVndWxhdG9yeSAiCi0JCQkJCSJpbnRlcnNlY3RlZDogXG4iKTsKKwkJCQkJImRvbWFpbiBpbnRlcnNlY3RlZDogXG4iKTsKIAl9IGVsc2UgaWYgKGlzX3dvcmxkX3JlZ2RvbShyZC0+YWxwaGEyKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiY2ZnODAyMTE6IFdvcmxkIHJlZ3VsYXRvcnkgIgogCQkJImRvbWFpbiB1cGRhdGVkOlxuIik7CkBAIC0xMzA0LDcgKzE5MTUsNyBAQAogewogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICppbnRlcnNlY3RlZF9yZCA9IE5VTEw7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkcnYgPSBOVUxMOwotCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBOVUxMOworCXN0cnVjdCB3aXBoeSAqcmVxdWVzdF93aXBoeTsKIAkvKiBTb21lIGJhc2ljIHNhbml0eSBjaGVja3MgZmlyc3QgKi8KIAogCWlmIChpc193b3JsZF9yZWdkb20ocmQtPmFscGhhMikpIHsKQEAgLTEzMjEsMjMgKzE5MzIsMjcgQEAKIAlpZiAoIWxhc3RfcmVxdWVzdCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBMZXRzIG9ubHkgYm90aGVyIHByb2NlZWRpbmcgb24gdGhlIHNhbWUgYWxwaGEyIGlmIHRoZSBjdXJyZW50CisJLyoKKwkgKiBMZXRzIG9ubHkgYm90aGVyIHByb2NlZWRpbmcgb24gdGhlIHNhbWUgYWxwaGEyIGlmIHRoZSBjdXJyZW50CiAJICogcmQgaXMgbm9uIHN0YXRpYyAoaXQgbWVhbnMgQ1JEQSB3YXMgcHJlc2VudCBhbmQgd2FzIHVzZWQgbGFzdCkKLQkgKiBhbmQgdGhlIHBlbmRpbmcgcmVxdWVzdCBjYW1lIGluIGZyb20gYSBjb3VudHJ5IElFICovCi0JaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IFJFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgewotCQkvKiBJZiBzb21lb25lIGVsc2UgYXNrZWQgdXMgdG8gY2hhbmdlIHRoZSByZCBsZXRzIG9ubHkgYm90aGVyCi0JCSAqIGNoZWNraW5nIGlmIHRoZSBhbHBoYTIgY2hhbmdlcyBpZiBDUkRBIHdhcyBhbHJlYWR5IGNhbGxlZCAqLworCSAqIGFuZCB0aGUgcGVuZGluZyByZXF1ZXN0IGNhbWUgaW4gZnJvbSBhIGNvdW50cnkgSUUKKwkgKi8KKwlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUUpIHsKKwkJLyoKKwkJICogSWYgc29tZW9uZSBlbHNlIGFza2VkIHVzIHRvIGNoYW5nZSB0aGUgcmQgbGV0cyBvbmx5IGJvdGhlcgorCQkgKiBjaGVja2luZyBpZiB0aGUgYWxwaGEyIGNoYW5nZXMgaWYgQ1JEQSB3YXMgYWxyZWFkeSBjYWxsZWQKKwkJICovCiAJCWlmICghaXNfb2xkX3N0YXRpY19yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluKSAmJgotCQkgICAgIXJlZ2RvbV9jaGFuZ2VkKHJkLT5hbHBoYTIpKQorCQkgICAgIXJlZ2RvbV9jaGFuZ2VzKHJkLT5hbHBoYTIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jd2lwaHkgPSBsYXN0X3JlcXVlc3QtPndpcGh5OwotCi0JLyogTm93IGxldHMgc2V0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiwgdXBkYXRlIGFsbCBkcml2ZXIgY2hhbm5lbHMKKwkvKgorCSAqIE5vdyBsZXRzIHNldCB0aGUgcmVndWxhdG9yeSBkb21haW4sIHVwZGF0ZSBhbGwgZHJpdmVyIGNoYW5uZWxzCiAJICogYW5kIGZpbmFsbHkgaW5mb3JtIHRoZW0gb2Ygd2hhdCB3ZSBoYXZlIGRvbmUsIGluIGNhc2UgdGhleSB3YW50CiAJICogdG8gcmV2aWV3IG9yIGFkanVzdCB0aGVpciBvd24gc2V0dGluZ3MgYmFzZWQgb24gdGhlaXIgb3duCi0JICogaW50ZXJuYWwgRUVQUk9NIGRhdGEgKi8KKwkgKiBpbnRlcm5hbCBFRVBST00gZGF0YQorCSAqLwogCiAJaWYgKFdBUk5fT04oIXJlZ19pc192YWxpZF9yZXF1ZXN0KHJkLT5hbHBoYTIpKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzQ5LDcgKzE5NjQsMjggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJcmVxdWVzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CisKIAlpZiAoIWxhc3RfcmVxdWVzdC0+aW50ZXJzZWN0KSB7CisJCWludCByOworCisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciAhPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSKSB7CisJCQlyZXNldF9yZWdkb21haW5zKCk7CisJCQljZmc4MDIxMV9yZWdkb21haW4gPSByZDsKKwkJCXJldHVybiAwOworCQl9CisKKwkJLyoKKwkJICogRm9yIGEgZHJpdmVyIGhpbnQsIGxldHMgY29weSB0aGUgcmVndWxhdG9yeSBkb21haW4gdGhlCisJCSAqIGRyaXZlciB3YW50ZWQgdG8gdGhlIHdpcGh5IHRvIGRlYWwgd2l0aCBjb25mbGljdHMKKwkJICovCisKKwkJQlVHX09OKHJlcXVlc3Rfd2lwaHktPnJlZ2QpOworCisJCXIgPSByZWdfY29weV9yZWdkKCZyZXF1ZXN0X3dpcGh5LT5yZWdkLCByZCk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisKIAkJcmVzZXRfcmVnZG9tYWlucygpOwogCQljZmc4MDIxMV9yZWdkb21haW4gPSByZDsKIAkJcmV0dXJuIDA7CkBAIC0xMzU3LDE0ICsxOTkzLDIyIEBACiAKIAkvKiBJbnRlcnNlY3Rpb24gcmVxdWlyZXMgYSBiaXQgbW9yZSB3b3JrICovCiAKLQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgIT0gUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CisJaWYgKGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yICE9IE5MODAyMTFfUkVHRE9NX1NFVF9CWV9DT1VOVFJZX0lFKSB7CiAKIAkJaW50ZXJzZWN0ZWRfcmQgPSByZWdkb21faW50ZXJzZWN0KHJkLCBjZmc4MDIxMV9yZWdkb21haW4pOwogCQlpZiAoIWludGVyc2VjdGVkX3JkKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJLyogV2UgY2FuIHRyYXNoIHdoYXQgQ1JEQSBwcm92aWRlZCBub3cgKi8KLQkJa2ZyZWUocmQpOworCQkvKgorCQkgKiBXZSBjYW4gdHJhc2ggd2hhdCBDUkRBIHByb3ZpZGVkIG5vdy4KKwkJICogSG93ZXZlciBpZiBhIGRyaXZlciByZXF1ZXN0ZWQgdGhpcyBzcGVjaWZpYyByZWd1bGF0b3J5CisJCSAqIGRvbWFpbiB3ZSBrZWVwIGl0IGZvciBpdHMgcHJpdmF0ZSB1c2UKKwkJICovCisJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSKQorCQkJcmVxdWVzdF93aXBoeS0+cmVnZCA9IHJkOworCQllbHNlCisJCQlrZnJlZShyZCk7CisKIAkJcmQgPSBOVUxMOwogCiAJCXJlc2V0X3JlZ2RvbWFpbnMoKTsKQEAgLTEzNzksMjkgKzIwMjMsMjYgQEAKIAkgKi8KIAogCUJVR19PTighY291bnRyeV9pZV9yZWdkb21haW4pOworCUJVR19PTihyZCA9PSBjb3VudHJ5X2llX3JlZ2RvbWFpbik7CiAKLQlpZiAocmQgIT0gY291bnRyeV9pZV9yZWdkb21haW4pIHsKLQkJLyogSW50ZXJzZWN0IHdoYXQgQ1JEQSByZXR1cm5lZCBhbmQgb3VyIHdoYXQgd2UKLQkJICogaGFkIGJ1aWx0IGZyb20gdGhlIENvdW50cnkgSUUgcmVjZWl2ZWQgKi8KKwkvKgorCSAqIEludGVyc2VjdCB3aGF0IENSREEgcmV0dXJuZWQgYW5kIG91ciB3aGF0IHdlCisJICogaGFkIGJ1aWx0IGZyb20gdGhlIENvdW50cnkgSUUgcmVjZWl2ZWQKKwkgKi8KIAotCQlpbnRlcnNlY3RlZF9yZCA9IHJlZ2RvbV9pbnRlcnNlY3QocmQsIGNvdW50cnlfaWVfcmVnZG9tYWluKTsKKwlpbnRlcnNlY3RlZF9yZCA9IHJlZ2RvbV9pbnRlcnNlY3QocmQsIGNvdW50cnlfaWVfcmVnZG9tYWluKTsKIAotCQlyZWdfY291bnRyeV9pZV9wcm9jZXNzX2RlYnVnKHJkLCBjb3VudHJ5X2llX3JlZ2RvbWFpbiwKLQkJCWludGVyc2VjdGVkX3JkKTsKKwlyZWdfY291bnRyeV9pZV9wcm9jZXNzX2RlYnVnKHJkLAorCQkJCSAgICAgY291bnRyeV9pZV9yZWdkb21haW4sCisJCQkJICAgICBpbnRlcnNlY3RlZF9yZCk7CiAKLQkJa2ZyZWUoY291bnRyeV9pZV9yZWdkb21haW4pOwotCQljb3VudHJ5X2llX3JlZ2RvbWFpbiA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJLyogVGhpcyB3b3VsZCBoYXBwZW4gd2hlbiBDUkRBIHdhcyBub3QgcHJlc2VudCBhbmQKLQkJICogT0xEX1JFR1VMQVRPUlkgd2FzIGVuYWJsZWQuIFdlIGludGVyc2VjdCBvdXIgQ291bnRyeQotCQkgKiBJRSByZCBhbmQgd2hhdCB3YXMgc2V0IG9uIGNmZzgwMjExIG9yaWdpbmFsbHkgKi8KLQkJaW50ZXJzZWN0ZWRfcmQgPSByZWdkb21faW50ZXJzZWN0KHJkLCBjZmc4MDIxMV9yZWdkb21haW4pOwotCX0KKwlrZnJlZShjb3VudHJ5X2llX3JlZ2RvbWFpbik7CisJY291bnRyeV9pZV9yZWdkb21haW4gPSBOVUxMOwogCiAJaWYgKCFpbnRlcnNlY3RlZF9yZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkcnYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCWRydiA9IHdpcGh5X3RvX2RldihyZXF1ZXN0X3dpcGh5KTsKIAogCWRydi0+Y291bnRyeV9pZV9hbHBoYTJbMF0gPSByZC0+YWxwaGEyWzBdOwogCWRydi0+Y291bnRyeV9pZV9hbHBoYTJbMV0gPSByZC0+YWxwaGEyWzFdOwpAQCAtMTQxOSwxMyArMjA2MCwxNyBAQAogfQogCiAKLS8qIFVzZSB0aGlzIGNhbGwgdG8gc2V0IHRoZSBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluLiBDb25mbGljdHMgd2l0aAorLyoKKyAqIFVzZSB0aGlzIGNhbGwgdG8gc2V0IHRoZSBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluLiBDb25mbGljdHMgd2l0aAogICogbXVsdGlwbGUgZHJpdmVycyBjYW4gYmUgaXJvbmVkIG91dCBsYXRlci4gQ2FsbGVyIG11c3QndmUgYWxyZWFkeQotICoga21hbGxvYydkIHRoZSByZCBzdHJ1Y3R1cmUuIENhbGxlciBtdXN0IGhvbGQgY2ZnODAyMTFfZHJ2X211dGV4ICovCisgKiBrbWFsbG9jJ2QgdGhlIHJkIHN0cnVjdHVyZS4gQ2FsbGVyIG11c3QgaG9sZCBjZmc4MDIxMV9tdXRleAorICovCiBpbnQgc2V0X3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCiB7CiAJaW50IHI7CiAKKwlhc3NlcnRfY2ZnODAyMTFfbG9jaygpOworCiAJLyogTm90ZSB0aGF0IHRoaXMgZG9lc24ndCB1cGRhdGUgdGhlIHdpcGh5cywgdGhpcyBpcyBkb25lIGJlbG93ICovCiAJciA9IF9fc2V0X3JlZ2RvbShyZCk7CiAJaWYgKHIpIHsKQEAgLTE0NDIsNTYgKzIwODcsOTAgQEAKIAogCXByaW50X3JlZ2RvbWFpbihjZmc4MDIxMV9yZWdkb21haW4pOwogCisJbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQobGFzdF9yZXF1ZXN0KTsKKwogCXJldHVybiByOwogfQogCi0vKiBDYWxsZXIgbXVzdCBob2xkIGNmZzgwMjExX2Rydl9tdXRleCAqLworLyogQ2FsbGVyIG11c3QgaG9sZCBjZmc4MDIxMV9tdXRleCAqLwogdm9pZCByZWdfZGV2aWNlX3JlbW92ZShzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogewotCWlmICghbGFzdF9yZXF1ZXN0IHx8ICFsYXN0X3JlcXVlc3QtPndpcGh5KQorCXN0cnVjdCB3aXBoeSAqcmVxdWVzdF93aXBoeTsKKworCWFzc2VydF9jZmc4MDIxMV9sb2NrKCk7CisKKwlyZXF1ZXN0X3dpcGh5ID0gd2lwaHlfaWR4X3RvX3dpcGh5KGxhc3RfcmVxdWVzdC0+d2lwaHlfaWR4KTsKKworCWtmcmVlKHdpcGh5LT5yZWdkKTsKKwlpZiAoIWxhc3RfcmVxdWVzdCB8fCAhcmVxdWVzdF93aXBoeSkKIAkJcmV0dXJuOwotCWlmIChsYXN0X3JlcXVlc3QtPndpcGh5ICE9IHdpcGh5KQorCWlmIChyZXF1ZXN0X3dpcGh5ICE9IHdpcGh5KQogCQlyZXR1cm47Ci0JbGFzdF9yZXF1ZXN0LT53aXBoeSA9IE5VTEw7CisJbGFzdF9yZXF1ZXN0LT53aXBoeV9pZHggPSBXSVBIWV9JRFhfU1RBTEU7CiAJbGFzdF9yZXF1ZXN0LT5jb3VudHJ5X2llX2VudiA9IEVOVklST05fQU5ZOwogfQogCiBpbnQgcmVndWxhdG9yeV9pbml0KHZvaWQpCiB7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCXJlZ19wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgicmVndWxhdG9yeSIsIDAsIE5VTEwsIDApOwogCWlmIChJU19FUlIocmVnX3BkZXYpKQogCQlyZXR1cm4gUFRSX0VSUihyZWdfcGRldik7CiAKKwlzcGluX2xvY2tfaW5pdCgmcmVnX3JlcXVlc3RzX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCiAjaWZkZWYgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZCiAJY2ZnODAyMTFfcmVnZG9tYWluID0gc3RhdGljX3JlZ2RvbShpZWVlODAyMTFfcmVnZG9tKTsKIAogCXByaW50ayhLRVJOX0lORk8gImNmZzgwMjExOiBVc2luZyBzdGF0aWMgcmVndWxhdG9yeSBkb21haW4gaW5mb1xuIik7CiAJcHJpbnRfcmVnZG9tYWluX2luZm8oY2ZnODAyMTFfcmVnZG9tYWluKTsKLQkvKiBUaGUgb2xkIGNvZGUgc3RpbGwgcmVxdWVzdHMgZm9yIGEgbmV3IHJlZ2RvbWFpbiBhbmQgaWYKKwkvKgorCSAqIFRoZSBvbGQgY29kZSBzdGlsbCByZXF1ZXN0cyBmb3IgYSBuZXcgcmVnZG9tYWluIGFuZCBpZgogCSAqIHlvdSBoYXZlIENSREEgeW91IGdldCBpdCB1cGRhdGVkLCBvdGhlcndpc2UgeW91IGdldAotCSAqIHN0dWNrIHdpdGggdGhlIHN0YXRpYyB2YWx1ZXMuIFdlIGlnbm9yZSAiRVUiIGNvZGUgYXMKLQkgKiB0aGF0IGlzIG5vdCBhIHZhbGlkIElTTyAvIElFQyAzMTY2IGFscGhhMiAqLwotCWlmIChpZWVlODAyMTFfcmVnZG9tWzBdICE9ICdFJyB8fCBpZWVlODAyMTFfcmVnZG9tWzFdICE9ICdVJykKLQkJZXJyID0gX19yZWd1bGF0b3J5X2hpbnQoTlVMTCwgUkVHRE9NX1NFVF9CWV9DT1JFLAotCQkJCQlpZWVlODAyMTFfcmVnZG9tLCAwLCBFTlZJUk9OX0FOWSk7CisJICogc3R1Y2sgd2l0aCB0aGUgc3RhdGljIHZhbHVlcy4gU2luY2UgIkVVIiBpcyBub3QgYSB2YWxpZAorCSAqIElTTyAvIElFQyAzMTY2IGFscGhhMiBjb2RlIHdlIGNhbid0IGV4cGVjdCB1c2VycGFjZSB0bworCSAqIGdpdmUgdXMgYSByZWd1bGF0b3J5IGRvbWFpbiBmb3IgaXQuIFdlIG5lZWQgbGFzdF9yZXF1ZXN0CisJICogaW5paXRhbGl6ZWQgdGhvdWdoIHNvIGxldHMganVzdCBzZW5kIGEgcmVxdWVzdCB3aGljaCB3ZQorCSAqIGtub3cgd2lsbCBiZSBpZ25vcmVkLi4uIHRoaXMgY3JhcCB3aWxsIGJlIHJlbW92ZWQgb25jZQorCSAqIE9MRF9SRUcgZGllcy4KKwkgKi8KKwllcnIgPSByZWd1bGF0b3J5X2hpbnRfY29yZShpZWVlODAyMTFfcmVnZG9tKTsKICNlbHNlCiAJY2ZnODAyMTFfcmVnZG9tYWluID0gY2ZnODAyMTFfd29ybGRfcmVnZG9tOwogCi0JZXJyID0gX19yZWd1bGF0b3J5X2hpbnQoTlVMTCwgUkVHRE9NX1NFVF9CWV9DT1JFLCAiMDAiLCAwLCBFTlZJUk9OX0FOWSk7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fRVJSICJjZmc4MDIxMTogY2FsbGluZyBDUkRBIGZhaWxlZCAtICIKLQkJICAgICAgICJ1bmFibGUgdG8gdXBkYXRlIHdvcmxkIHJlZ3VsYXRvcnkgZG9tYWluLCAiCi0JCSAgICAgICAidXNpbmcgc3RhdGljIGRlZmluaXRpb25cbiIpOworCWVyciA9IHJlZ3VsYXRvcnlfaGludF9jb3JlKGllZWU4MDIxMV9yZWdkb20pOwogI2VuZGlmCisJaWYgKGVycikgeworCQlpZiAoZXJyID09IC1FTk9NRU0pCisJCQlyZXR1cm4gZXJyOworCQkvKgorCQkgKiBOLkIuIGtvYmplY3RfdWV2ZW50X2VudigpIGNhbiBmYWlsIG1haW5seSBmb3Igd2hlbiB3ZSdyZSBvdXQKKwkJICogbWVtb3J5IHdoaWNoIGlzIGhhbmRsZWQgYW5kIHByb3BhZ2F0ZWQgYXBwcm9wcmlhdGVseSBhYm92ZQorCQkgKiBidXQgaXQgY2FuIGFsc28gZmFpbCBkdXJpbmcgYSBuZXRsaW5rX2Jyb2FkY2FzdCgpIG9yIGR1cmluZworCQkgKiBlYXJseSBib290IGZvciBjYWxsX3VzZXJtb2RlaGVscGVyKCkuIEZvciBub3cgdHJlYXQgdGhlc2UKKwkJICogZXJyb3JzIGFzIG5vbi1mYXRhbC4KKwkJICovCisJCXByaW50ayhLRVJOX0VSUiAiY2ZnODAyMTE6IGtvYmplY3RfdWV2ZW50X2VudigpIHdhcyB1bmFibGUgIgorCQkJInRvIGNhbGwgQ1JEQSBkdXJpbmcgaW5pdCIpOworI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKKwkJLyogV2Ugd2FudCB0byBmaW5kIG91dCBleGFjdGx5IHdoeSB3aGVuIGRlYnVnZ2luZyAqLworCQlXQVJOX09OKGVycik7CisjZW5kaWYKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCByZWd1bGF0b3J5X2V4aXQodm9pZCkKIHsKLQltdXRleF9sb2NrKCZjZmc4MDIxMV9kcnZfbXV0ZXgpOworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlZ19yZXF1ZXN0LCAqdG1wOworCXN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uLCAqYnRtcDsKKworCWNhbmNlbF93b3JrX3N5bmMoJnJlZ193b3JrKTsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKIAogCXJlc2V0X3JlZ2RvbWFpbnMoKTsKIApAQCAtMTUwMiw1ICsyMTgxLDMzIEBACiAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihyZWdfcGRldik7CiAKLQltdXRleF91bmxvY2soJmNmZzgwMjExX2Rydl9tdXRleCk7CisJc3Bpbl9sb2NrX2JoKCZyZWdfcGVuZGluZ19iZWFjb25zX2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmcmVnX3BlbmRpbmdfYmVhY29ucykpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZ19iZWFjb24sIGJ0bXAsCisJCQkJCSAmcmVnX3BlbmRpbmdfYmVhY29ucywgbGlzdCkgeworCQkJbGlzdF9kZWwoJnJlZ19iZWFjb24tPmxpc3QpOworCQkJa2ZyZWUocmVnX2JlYWNvbik7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnJlZ19iZWFjb25fbGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlZ19iZWFjb24sIGJ0bXAsCisJCQkJCSAmcmVnX2JlYWNvbl9saXN0LCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmcmVnX2JlYWNvbi0+bGlzdCk7CisJCQlrZnJlZShyZWdfYmVhY29uKTsKKwkJfQorCX0KKworCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCWlmICghbGlzdF9lbXB0eSgmcmVnX3JlcXVlc3RzX2xpc3QpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWdfcmVxdWVzdCwgdG1wLAorCQkJCQkgJnJlZ19yZXF1ZXN0c19saXN0LCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmcmVnX3JlcXVlc3QtPmxpc3QpOworCQkJa2ZyZWUocmVnX3JlcXVlc3QpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZyZWdfcmVxdWVzdHNfbG9jayk7CisKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKIH0KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaAppbmRleCBhNzZlYTNmLi5lMzc4MjlhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmgKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5oCkBAIC0xLDkgKzEsMTMgQEAKICNpZm5kZWYgX19ORVRfV0lSRUxFU1NfUkVHX0gKICNkZWZpbmUgX19ORVRfV0lSRUxFU1NfUkVHX0gKIAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpjZmc4MDIxMV9yZWdkb21haW47CisKIGJvb2wgaXNfd29ybGRfcmVnZG9tKGNvbnN0IGNoYXIgKmFscGhhMik7CiBib29sIHJlZ19pc192YWxpZF9yZXF1ZXN0KGNvbnN0IGNoYXIgKmFscGhhMik7CiAKK2ludCByZWd1bGF0b3J5X2hpbnRfdXNlcihjb25zdCBjaGFyICphbHBoYTIpOworCiB2b2lkIHJlZ19kZXZpY2VfcmVtb3ZlKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwogCiBpbnQgcmVndWxhdG9yeV9pbml0KHZvaWQpOwpAQCAtMTEsMzQgKzE1LDI1IEBACiAKIGludCBzZXRfcmVnZG9tKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZCk7CiAKLWVudW0gZW52aXJvbm1lbnRfY2FwIHsKLQlFTlZJUk9OX0FOWSwKLQlFTlZJUk9OX0lORE9PUiwKLQlFTlZJUk9OX09VVERPT1IsCi19OwotCi0KIC8qKgotICogX19yZWd1bGF0b3J5X2hpbnQgLSBoaW50IHRvIHRoZSB3aXJlbGVzcyBjb3JlIGEgcmVndWxhdG9yeSBkb21haW4KLSAqIEB3aXBoeTogaWYgdGhlIGhpbnQgY29tZXMgZnJvbSBjb3VudHJ5IGluZm9ybWF0aW9uIGZyb20gYW4gQVAsIHRoaXMKLSAqCWlzIHJlcXVpcmVkIHRvIGJlIHNldCB0byB0aGUgd2lwaHkgdGhhdCByZWNlaXZlZCB0aGUgaW5mb3JtYXRpb24KLSAqIEBhbHBoYTI6IHRoZSBJU08vSUVDIDMxNjYgYWxwaGEyIGJlaW5nIGNsYWltZWQgdGhlIHJlZ3VsYXRvcnkgZG9tYWluCi0gKglzaG91bGQgYmUgaW4uCi0gKiBAY291bnRyeV9pZV9jaGVja3N1bTogY2hlY2tzdW0gb2YgcHJvY2Vzc2VkIGNvdW50cnkgSUUsIHNldCB0aGlzIHRvIDAKLSAqIAlpZiB0aGUgaGludCBkaWQgbm90IGNvbWUgZnJvbSBhIGNvdW50cnkgSUUKLSAqIEBjb3VudHJ5X2llX2VudjogdGhlIGVudmlyb25tZW50IHRoZSBJRSB0b2xkIHVzIHdlIGFyZSBpbiwgJUVOVklST05fKgorICogcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbiAtIGhpbnRzIGEgYmVhY29uIHdhcyBmb3VuZCBvbiBhIGNoYW5uZWwKKyAqIEB3aXBoeTogdGhlIHdpcmVsZXNzIGRldmljZSB3aGVyZSB0aGUgYmVhY29uIHdhcyBmb3VuZCBvbgorICogQGJlYWNvbl9jaGFuOiB0aGUgY2hhbm5lbCBvbiB3aGljaCB0aGUgYmVhY29uIHdhcyBmb3VuZCBvbgorICogQGdmcDogY29udGV4dCBmbGFncwogICoKLSAqIFRoZSBXaXJlbGVzcyBzdWJzeXN0ZW0gY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGhpbnQgdG8gdGhlIHdpcmVsZXNzIGNvcmUKLSAqIHdoYXQgaXQgYmVsaWV2ZXMgc2hvdWxkIGJlIHRoZSBjdXJyZW50IHJlZ3VsYXRvcnkgZG9tYWluIGJ5IGdpdmluZyBpdCBhbgotICogSVNPL0lFQyAzMTY2IGFscGhhMiBjb3VudHJ5IGNvZGUgaXQga25vd3MgaXRzIHJlZ3VsYXRvcnkgZG9tYWluIHNob3VsZCBiZQotICogaW4uCisgKiBUaGlzIGluZm9ybXMgdGhlIHdpcmVsZXNzIGNvcmUgdGhhdCBhIGJlYWNvbiBmcm9tIGFuIEFQIHdhcyBmb3VuZCBvbgorICogdGhlIGNoYW5uZWwgcHJvdmlkZWQuIFRoaXMgYWxsb3dzIHRoZSB3aXJlbGVzcyBjb3JlIHRvIG1ha2UgZWR1Y2F0ZWQKKyAqIGd1ZXNzZXMgb24gcmVndWxhdG9yeSB0byBoZWxwIHdpdGggd29ybGQgcm9hbWluZy4gVGhpcyBpcyBvbmx5IHVzZWQgZm9yCisgKiB3b3JsZCByb2FtaW5nIC0tIHdoZW4gd2UgZG8gbm90IGtub3cgb3VyIGN1cnJlbnQgbG9jYXRpb24uIFRoaXMgaXMKKyAqIG9ubHkgdXNlZnVsIG9uIGNoYW5uZWxzIDEyLCAxMyBhbmQgMTQgb24gdGhlIDIgR0h6IGJhbmQgYXMgY2hhbm5lbHMKKyAqIDEtMTEgYXJlIGFscmVhZHkgZW5hYmxlZCBieSB0aGUgd29ybGQgcmVndWxhdG9yeSBkb21haW47IGFuZCBvbgorICogbm9uLXJhZGFyIDUgR0h6IGNoYW5uZWxzLgogICoKLSAqIFJldHVybnMgemVybyBpZiBhbGwgd2VudCBmaW5lLCAlLUVBTFJFQURZIGlmIGEgcmVndWxhdG9yeSBkb21haW4gaGFkCi0gKiBhbHJlYWR5IGJlZW4gc2V0IG9yIG90aGVyIHN0YW5kYXJkIGVycm9yIGNvZGVzLgotICoKKyAqIERyaXZlcnMgZG8gbm90IG5lZWQgdG8gY2FsbCB0aGlzLCBjZmc4MDIxMSB3aWxsIGRvIGl0IGZvciBhZnRlciBhIHNjYW4KKyAqIG9uIGEgbmV3bHkgZm91bmQgQlNTLgogICovCi1leHRlcm4gaW50IF9fcmVndWxhdG9yeV9oaW50KHN0cnVjdCB3aXBoeSAqd2lwaHksIGVudW0gcmVnX3NldF9ieSBzZXRfYnksCi0JCQkgICAgIGNvbnN0IGNoYXIgKmFscGhhMiwgdTMyIGNvdW50cnlfaWVfY2hlY2tzdW0sCi0JCQkgICAgIGVudW0gZW52aXJvbm1lbnRfY2FwIGNvdW50cnlfaWVfZW52KTsKK2ludCByZWd1bGF0b3J5X2hpbnRfZm91bmRfYmVhY29uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqYmVhY29uX2NoYW4sCisJCQkJCWdmcF90IGdmcCk7CiAKICNlbmRpZiAgLyogX19ORVRfV0lSRUxFU1NfUkVHX0ggKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMDBlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCkBAIC0wLDAgKzEsODkxIEBACisvKgorICogY2ZnODAyMTEgc2NhbiByZXN1bHQgaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvYXJwLmg+CisjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CisjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAibmw4MDIxMS5oIgorCisjZGVmaW5lIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUJKDEwICogSFopCisKK3ZvaWQgY2ZnODAyMTFfc2Nhbl9kb25lKHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcXVlc3QsIGJvb2wgYWJvcnRlZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworI2lmZGVmIENPTkZJR19XSVJFTEVTU19FWFQKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisjZW5kaWYKKworCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoJmluaXRfbmV0LCByZXF1ZXN0LT5pZmlkeCk7CisJaWYgKCFkZXYpCisJCWdvdG8gb3V0OworCisJV0FSTl9PTihyZXF1ZXN0ICE9IHdpcGh5X3RvX2RldihyZXF1ZXN0LT53aXBoeSktPnNjYW5fcmVxKTsKKwl3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLT5zY2FuX3JlcSA9IE5VTEw7CisKKwlpZiAoYWJvcnRlZCkKKwkJbmw4MDIxMV9zZW5kX3NjYW5fYWJvcnRlZCh3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLCBkZXYpOworCWVsc2UKKwkJbmw4MDIxMV9zZW5kX3NjYW5fZG9uZSh3aXBoeV90b19kZXYocmVxdWVzdC0+d2lwaHkpLCBkZXYpOworCisjaWZkZWYgQ09ORklHX1dJUkVMRVNTX0VYVAorCWlmICghYWJvcnRlZCkgeworCQltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CisKKwkJd2lyZWxlc3Nfc2VuZF9ldmVudChkZXYsIFNJT0NHSVdTQ0FOLCAmd3JxdSwgTlVMTCk7CisJfQorI2VuZGlmCisKKwlkZXZfcHV0KGRldik7CisKKyBvdXQ6CisJa2ZyZWUocmVxdWVzdCk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3NjYW5fZG9uZSk7CisKK3N0YXRpYyB2b2lkIGJzc19yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCisJYnNzID0gY29udGFpbmVyX29mKHJlZiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcmVmKTsKKwlpZiAoYnNzLT5wdWIuZnJlZV9wcml2KQorCQlic3MtPnB1Yi5mcmVlX3ByaXYoJmJzcy0+cHViKTsKKwlrZnJlZShic3MpOworfQorCisvKiBtdXN0IGhvbGQgZGV2LT5ic3NfbG9jayEgKi8KK3ZvaWQgY2ZnODAyMTFfYnNzX2FnZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGFnZV9zZWNzKQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKwl1bnNpZ25lZCBsb25nIGFnZV9qaWZmaWVzID0gbXNlY3NfdG9famlmZmllcyhhZ2Vfc2VjcyAqIE1TRUNfUEVSX1NFQyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJzcywgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJYnNzLT50cyAtPSBhZ2VfamlmZmllczsKKwl9Cit9CisKKy8qIG11c3QgaG9sZCBkZXYtPmJzc19sb2NrISAqLwordm9pZCBjZmc4MDIxMV9ic3NfZXhwaXJlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgKnRtcDsKKwlib29sIGV4cGlyZWQgPSBmYWxzZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShic3MsIHRtcCwgJmRldi0+YnNzX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGJzcy0+aG9sZCB8fAorCQkgICAgIXRpbWVfYWZ0ZXIoamlmZmllcywgYnNzLT50cyArIElFRUU4MDIxMV9TQ0FOX1JFU1VMVF9FWFBJUkUpKQorCQkJY29udGludWU7CisJCWxpc3RfZGVsKCZic3MtPmxpc3QpOworCQlyYl9lcmFzZSgmYnNzLT5yYm4sICZkZXYtPmJzc190cmVlKTsKKwkJa3JlZl9wdXQoJmJzcy0+cmVmLCBic3NfcmVsZWFzZSk7CisJCWV4cGlyZWQgPSB0cnVlOworCX0KKworCWlmIChleHBpcmVkKQorCQlkZXYtPmJzc19nZW5lcmF0aW9uKys7Cit9CisKK3N0YXRpYyB1OCAqZmluZF9pZSh1OCBudW0sIHU4ICppZXMsIHNpemVfdCBsZW4pCit7CisJd2hpbGUgKGxlbiA+IDIgJiYgaWVzWzBdICE9IG51bSkgeworCQlsZW4gLT0gaWVzWzFdICsgMjsKKwkJaWVzICs9IGllc1sxXSArIDI7CisJfQorCWlmIChsZW4gPCAyKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAobGVuIDwgMiArIGllc1sxXSkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIGllczsKK30KKworc3RhdGljIGludCBjbXBfaWVzKHU4IG51bSwgdTggKmllczEsIHNpemVfdCBsZW4xLCB1OCAqaWVzMiwgc2l6ZV90IGxlbjIpCit7CisJY29uc3QgdTggKmllMSA9IGZpbmRfaWUobnVtLCBpZXMxLCBsZW4xKTsKKwljb25zdCB1OCAqaWUyID0gZmluZF9pZShudW0sIGllczIsIGxlbjIpOworCWludCByOworCisJaWYgKCFpZTEgJiYgIWllMikKKwkJcmV0dXJuIDA7CisJaWYgKCFpZTEpCisJCXJldHVybiAtMTsKKworCXIgPSBtZW1jbXAoaWUxICsgMiwgaWUyICsgMiwgbWluKGllMVsxXSwgaWUyWzFdKSk7CisJaWYgKHIgPT0gMCAmJiBpZTFbMV0gIT0gaWUyWzFdKQorCQlyZXR1cm4gaWUyWzFdIC0gaWUxWzFdOworCXJldHVybiByOworfQorCitzdGF0aWMgYm9vbCBpc19ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqYSwKKwkJICAgY29uc3QgdTggKmJzc2lkLAorCQkgICBjb25zdCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuKQoreworCWNvbnN0IHU4ICpzc2lkaWU7CisKKwlpZiAoYnNzaWQgJiYgY29tcGFyZV9ldGhlcl9hZGRyKGEtPmJzc2lkLCBic3NpZCkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghc3NpZCkKKwkJcmV0dXJuIHRydWU7CisKKwlzc2lkaWUgPSBmaW5kX2llKFdMQU5fRUlEX1NTSUQsCisJCQkgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZiAoIXNzaWRpZSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChzc2lkaWVbMV0gIT0gc3NpZF9sZW4pCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gbWVtY21wKHNzaWRpZSArIDIsIHNzaWQsIHNzaWRfbGVuKSA9PSAwOworfQorCitzdGF0aWMgYm9vbCBpc19tZXNoKHN0cnVjdCBjZmc4MDIxMV9ic3MgKmEsCisJCSAgICBjb25zdCB1OCAqbWVzaGlkLCBzaXplX3QgbWVzaGlkbGVuLAorCQkgICAgY29uc3QgdTggKm1lc2hjZmcpCit7CisJY29uc3QgdTggKmllOworCisJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoYS0+YnNzaWQpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZSA9IGZpbmRfaWUoV0xBTl9FSURfTUVTSF9JRCwKKwkJICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCWlmICghaWUpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoaWVbMV0gIT0gbWVzaGlkbGVuKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKG1lbWNtcChpZSArIDIsIG1lc2hpZCwgbWVzaGlkbGVuKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWUgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfQ09ORklHLAorCQkgICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkgICAgIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJaWYgKGllWzFdICE9IElFRUU4MDIxMV9NRVNIX0NPTkZJR19MRU4pCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogSWdub3JlIG1lc2ggY2FwYWJpbGl0eSAobGFzdCB0d28gYnl0ZXMgb2YgdGhlIElFKSB3aGVuCisJICogY29tcGFyaW5nIHNpbmNlIHRoYXQgbWF5IGRpZmZlciBiZXR3ZWVuIHN0YXRpb25zIHRha2luZworCSAqIHBhcnQgaW4gdGhlIHNhbWUgbWVzaC4KKwkgKi8KKwlyZXR1cm4gbWVtY21wKGllICsgMiwgbWVzaGNmZywgSUVFRTgwMjExX01FU0hfQ09ORklHX0xFTiAtIDIpID09IDA7Cit9CisKK3N0YXRpYyBpbnQgY21wX2JzcyhzdHJ1Y3QgY2ZnODAyMTFfYnNzICphLAorCQkgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpiKQoreworCWludCByOworCisJaWYgKGEtPmNoYW5uZWwgIT0gYi0+Y2hhbm5lbCkKKwkJcmV0dXJuIGItPmNoYW5uZWwtPmNlbnRlcl9mcmVxIC0gYS0+Y2hhbm5lbC0+Y2VudGVyX2ZyZXE7CisKKwlyID0gbWVtY21wKGEtPmJzc2lkLCBiLT5ic3NpZCwgRVRIX0FMRU4pOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWlmIChpc196ZXJvX2V0aGVyX2FkZHIoYS0+YnNzaWQpKSB7CisJCXIgPSBjbXBfaWVzKFdMQU5fRUlEX01FU0hfSUQsCisJCQkgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgIGItPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgIGItPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCXJldHVybiBjbXBfaWVzKFdMQU5fRUlEX01FU0hfQ09ORklHLAorCQkJICAgICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgICAgIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICAgICBiLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCSAgICAgICBiLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCX0KKworCXJldHVybiBjbXBfaWVzKFdMQU5fRUlEX1NTSUQsCisJCSAgICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJICAgICAgIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJICAgICAgIGItPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkgICAgICAgYi0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKK30KKworc3RydWN0IGNmZzgwMjExX2JzcyAqY2ZnODAyMTFfZ2V0X2JzcyhzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQkgICAgICBjb25zdCB1OCAqYnNzaWQsCisJCQkJICAgICAgY29uc3QgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbiwKKwkJCQkgICAgICB1MTYgY2FwYV9tYXNrLCB1MTYgY2FwYV92YWwpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcywgKnJlcyA9IE5VTEw7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShic3MsICZkZXYtPmJzc19saXN0LCBsaXN0KSB7CisJCWlmICgoYnNzLT5wdWIuY2FwYWJpbGl0eSAmIGNhcGFfbWFzaykgIT0gY2FwYV92YWwpCisJCQljb250aW51ZTsKKwkJaWYgKGNoYW5uZWwgJiYgYnNzLT5wdWIuY2hhbm5lbCAhPSBjaGFubmVsKQorCQkJY29udGludWU7CisJCWlmIChpc19ic3MoJmJzcy0+cHViLCBic3NpZCwgc3NpZCwgc3NpZF9sZW4pKSB7CisJCQlyZXMgPSBic3M7CisJCQlrcmVmX2dldCgmcmVzLT5yZWYpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisJaWYgKCFyZXMpCisJCXJldHVybiBOVUxMOworCXJldHVybiAmcmVzLT5wdWI7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2dldF9ic3MpOworCitzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjZmc4MDIxMV9nZXRfbWVzaChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJICAgICAgIGNvbnN0IHU4ICptZXNoaWQsIHNpemVfdCBtZXNoaWRsZW4sCisJCQkJICAgICAgIGNvbnN0IHU4ICptZXNoY2ZnKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3MsICpyZXMgPSBOVUxMOworCisJc3Bpbl9sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmZGV2LT5ic3NfbGlzdCwgbGlzdCkgeworCQlpZiAoY2hhbm5lbCAmJiBic3MtPnB1Yi5jaGFubmVsICE9IGNoYW5uZWwpCisJCQljb250aW51ZTsKKwkJaWYgKGlzX21lc2goJmJzcy0+cHViLCBtZXNoaWQsIG1lc2hpZGxlbiwgbWVzaGNmZykpIHsKKwkJCXJlcyA9IGJzczsKKwkJCWtyZWZfZ2V0KCZyZXMtPnJlZik7CisJCQlicmVhazsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2JoKCZkZXYtPmJzc19sb2NrKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuICZyZXMtPnB1YjsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfZ2V0X21lc2gpOworCisKK3N0YXRpYyB2b2lkIHJiX2luc2VydF9ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzcykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmZGV2LT5ic3NfdHJlZS5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnRic3M7CisJaW50IGNtcDsKKworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKwkJdGJzcyA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcmJuKTsKKworCQljbXAgPSBjbXBfYnNzKCZic3MtPnB1YiwgJnRic3MtPnB1Yik7CisKKwkJaWYgKFdBUk5fT04oIWNtcCkpIHsKKwkJCS8qIHdpbGwgc29ydCBvZiBsZWFrIHRoaXMgQlNTICovCisJCQlyZXR1cm47CisJCX0KKworCQlpZiAoY21wIDwgMCkKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZQorCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKKwl9CisKKwlyYl9saW5rX25vZGUoJmJzcy0+cmJuLCBwYXJlbnQsIHApOworCXJiX2luc2VydF9jb2xvcigmYnNzLT5yYm4sICZkZXYtPmJzc190cmVlKTsKK30KKworc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKgorcmJfZmluZF9ic3Moc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisJICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnJlcykKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IGRldi0+YnNzX3RyZWUucmJfbm9kZTsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisJaW50IHI7CisKKwl3aGlsZSAobikgeworCQlic3MgPSByYl9lbnRyeShuLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCByYm4pOworCQlyID0gY21wX2JzcygmcmVzLT5wdWIsICZic3MtPnB1Yik7CisKKwkJaWYgKHIgPT0gMCkKKwkJCXJldHVybiBic3M7CisJCWVsc2UgaWYgKHIgPCAwKQorCQkJbiA9IG4tPnJiX2xlZnQ7CisJCWVsc2UKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKgorY2ZnODAyMTFfYnNzX3VwZGF0ZShzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiwKKwkJICAgIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnJlcywKKwkJICAgIGJvb2wgb3ZlcndyaXRlKQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmZvdW5kID0gTlVMTDsKKwljb25zdCB1OCAqbWVzaGlkLCAqbWVzaGNmZzsKKworCS8qCisJICogVGhlIHJlZmVyZW5jZSB0byAicmVzIiBpcyBkb25hdGVkIHRvIHRoaXMgZnVuY3Rpb24uCisJICovCisKKwlpZiAoV0FSTl9PTighcmVzLT5wdWIuY2hhbm5lbCkpIHsKKwkJa3JlZl9wdXQoJnJlcy0+cmVmLCBic3NfcmVsZWFzZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJlcy0+dHMgPSBqaWZmaWVzOworCisJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihyZXMtPnB1Yi5ic3NpZCkpIHsKKwkJLyogbXVzdCBiZSBtZXNoLCB2ZXJpZnkgKi8KKwkJbWVzaGlkID0gZmluZF9pZShXTEFOX0VJRF9NRVNIX0lELCByZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCQkgcmVzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwkJbWVzaGNmZyA9IGZpbmRfaWUoV0xBTl9FSURfTUVTSF9DT05GSUcsCisJCQkJICByZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cywKKwkJCQkgIHJlcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJCWlmICghbWVzaGlkIHx8ICFtZXNoY2ZnIHx8CisJCSAgICBtZXNoY2ZnWzFdICE9IElFRUU4MDIxMV9NRVNIX0NPTkZJR19MRU4pIHsKKwkJCS8qIGJvZ3VzIG1lc2ggKi8KKwkJCWtyZWZfcHV0KCZyZXMtPnJlZiwgYnNzX3JlbGVhc2UpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlzcGluX2xvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJZm91bmQgPSByYl9maW5kX2JzcyhkZXYsIHJlcyk7CisKKwlpZiAoZm91bmQgJiYgb3ZlcndyaXRlKSB7CisJCWxpc3RfcmVwbGFjZSgmZm91bmQtPmxpc3QsICZyZXMtPmxpc3QpOworCQlyYl9yZXBsYWNlX25vZGUoJmZvdW5kLT5yYm4sICZyZXMtPnJibiwKKwkJCQkmZGV2LT5ic3NfdHJlZSk7CisJCWtyZWZfcHV0KCZmb3VuZC0+cmVmLCBic3NfcmVsZWFzZSk7CisJCWZvdW5kID0gcmVzOworCX0gZWxzZSBpZiAoZm91bmQpIHsKKwkJa3JlZl9nZXQoJmZvdW5kLT5yZWYpOworCQlmb3VuZC0+cHViLmJlYWNvbl9pbnRlcnZhbCA9IHJlcy0+cHViLmJlYWNvbl9pbnRlcnZhbDsKKwkJZm91bmQtPnB1Yi50c2YgPSByZXMtPnB1Yi50c2Y7CisJCWZvdW5kLT5wdWIuc2lnbmFsID0gcmVzLT5wdWIuc2lnbmFsOworCQlmb3VuZC0+cHViLmNhcGFiaWxpdHkgPSByZXMtPnB1Yi5jYXBhYmlsaXR5OworCQlmb3VuZC0+dHMgPSByZXMtPnRzOworCQlrcmVmX3B1dCgmcmVzLT5yZWYsIGJzc19yZWxlYXNlKTsKKwl9IGVsc2UgeworCQkvKiB0aGlzICJjb25zdW1lcyIgdGhlIHJlZmVyZW5jZSAqLworCQlsaXN0X2FkZF90YWlsKCZyZXMtPmxpc3QsICZkZXYtPmJzc19saXN0KTsKKwkJcmJfaW5zZXJ0X2JzcyhkZXYsIHJlcyk7CisJCWZvdW5kID0gcmVzOworCX0KKworCWRldi0+YnNzX2dlbmVyYXRpb24rKzsKKwlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisKKwlrcmVmX2dldCgmZm91bmQtPnJlZik7CisJcmV0dXJuIGZvdW5kOworfQorCitzdHJ1Y3QgY2ZnODAyMTFfYnNzICoKK2NmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sCisJCQkgIHMzMiBzaWduYWwsIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpyZXM7CisJc2l6ZV90IGllbGVuID0gbGVuIC0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LAorCQkJCSAgICAgIHUucHJvYmVfcmVzcC52YXJpYWJsZSk7CisJYm9vbCBvdmVyd3JpdGU7CisJc2l6ZV90IHByaXZzeiA9IHdpcGh5LT5ic3NfcHJpdl9zaXplOworCisJaWYgKFdBUk5fT04od2lwaHktPnNpZ25hbF90eXBlID09IE5MODAyMTFfQlNTX1NJR05BTF9VTlNQRUMgJiYKKwkgICAgICAgICAgICAoc2lnbmFsIDwgMCB8fCBzaWduYWwgPiAxMDApKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoV0FSTl9PTighbWdtdCB8fCAhd2lwaHkgfHwKKwkJICAgIGxlbiA8IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5wcm9iZV9yZXNwLnZhcmlhYmxlKSkpCisJCXJldHVybiBOVUxMOworCisJcmVzID0ga3phbGxvYyhzaXplb2YoKnJlcykgKyBwcml2c3ogKyBpZWxlbiwgZ2ZwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIE5VTEw7CisKKwltZW1jcHkocmVzLT5wdWIuYnNzaWQsIG1nbXQtPmJzc2lkLCBFVEhfQUxFTik7CisJcmVzLT5wdWIuY2hhbm5lbCA9IGNoYW5uZWw7CisJcmVzLT5wdWIuc2lnbmFsID0gc2lnbmFsOworCXJlcy0+cHViLnRzZiA9IGxlNjRfdG9fY3B1KG1nbXQtPnUucHJvYmVfcmVzcC50aW1lc3RhbXApOworCXJlcy0+cHViLmJlYWNvbl9pbnRlcnZhbCA9IGxlMTZfdG9fY3B1KG1nbXQtPnUucHJvYmVfcmVzcC5iZWFjb25faW50KTsKKwlyZXMtPnB1Yi5jYXBhYmlsaXR5ID0gbGUxNl90b19jcHUobWdtdC0+dS5wcm9iZV9yZXNwLmNhcGFiX2luZm8pOworCS8qIHBvaW50IHRvIGFmdGVyIHRoZSBwcml2YXRlIGFyZWEgKi8KKwlyZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cyA9ICh1OCAqKXJlcyArIHNpemVvZigqcmVzKSArIHByaXZzejsKKwltZW1jcHkocmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsIG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSwgaWVsZW4pOworCXJlcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyA9IGllbGVuOworCisJa3JlZl9pbml0KCZyZXMtPnJlZik7CisKKwlvdmVyd3JpdGUgPSBpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChtZ210LT5mcmFtZV9jb250cm9sKTsKKworCXJlcyA9IGNmZzgwMjExX2Jzc191cGRhdGUod2lwaHlfdG9fZGV2KHdpcGh5KSwgcmVzLCBvdmVyd3JpdGUpOworCWlmICghcmVzKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChyZXMtPnB1Yi5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0VTUykKKwkJcmVndWxhdG9yeV9oaW50X2ZvdW5kX2JlYWNvbih3aXBoeSwgY2hhbm5lbCwgZ2ZwKTsKKworCS8qIGNmZzgwMjExX2Jzc191cGRhdGUgZ2l2ZXMgdXMgYSByZWZlcmVuY2VkIHJlc3VsdCAqLworCXJldHVybiAmcmVzLT5wdWI7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2luZm9ybV9ic3NfZnJhbWUpOworCit2b2lkIGNmZzgwMjExX3B1dF9ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqcHViKQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKworCWlmICghcHViKQorCQlyZXR1cm47CisKKwlic3MgPSBjb250YWluZXJfb2YocHViLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpOworCWtyZWZfcHV0KCZic3MtPnJlZiwgYnNzX3JlbGVhc2UpOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9wdXRfYnNzKTsKKwordm9pZCBjZmc4MDIxMV91bmxpbmtfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBjZmc4MDIxMV9ic3MgKnB1YikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzOworCisJaWYgKFdBUk5fT04oIXB1YikpCisJCXJldHVybjsKKworCWJzcyA9IGNvbnRhaW5lcl9vZihwdWIsIHN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MsIHB1Yik7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCisJbGlzdF9kZWwoJmJzcy0+bGlzdCk7CisJcmJfZXJhc2UoJmJzcy0+cmJuLCAmZGV2LT5ic3NfdHJlZSk7CisKKwlzcGluX3VubG9ja19iaCgmZGV2LT5ic3NfbG9jayk7CisKKwlrcmVmX3B1dCgmYnNzLT5yZWYsIGJzc19yZWxlYXNlKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfdW5saW5rX2Jzcyk7CisKK3ZvaWQgY2ZnODAyMTFfaG9sZF9ic3Moc3RydWN0IGNmZzgwMjExX2JzcyAqcHViKQoreworCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKmJzczsKKworCWlmICghcHViKQorCQlyZXR1cm47CisKKwlic3MgPSBjb250YWluZXJfb2YocHViLCBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzLCBwdWIpOworCWJzcy0+aG9sZCA9IHRydWU7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2hvbGRfYnNzKTsKKwordm9pZCBjZmc4MDIxMV91bmhvbGRfYnNzKHN0cnVjdCBjZmc4MDIxMV9ic3MgKnB1YikKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisKKwlpZiAoIXB1YikKKwkJcmV0dXJuOworCisJYnNzID0gY29udGFpbmVyX29mKHB1Yiwgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcywgcHViKTsKKwlic3MtPmhvbGQgPSBmYWxzZTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfdW5ob2xkX2Jzcyk7CisKKyNpZmRlZiBDT05GSUdfV0lSRUxFU1NfRVhUCitpbnQgY2ZnODAyMTFfd2V4dF9zaXdzY2FuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCXN0cnVjdCBpd19zY2FuX3JlcSAqd3JlcSA9IE5VTEw7CisJc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqY3JlcTsKKwlpbnQgaSwgZXJyLCBuX2NoYW5uZWxzID0gMDsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FTkVURE9XTjsKKworCXJkZXYgPSBjZmc4MDIxMV9nZXRfZGV2X2Zyb21faWZpbmRleChkZXYtPmlmaW5kZXgpOworCisJaWYgKElTX0VSUihyZGV2KSkKKwkJcmV0dXJuIFBUUl9FUlIocmRldik7CisKKwlpZiAocmRldi0+c2Nhbl9yZXEpIHsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwl3aXBoeSA9ICZyZGV2LT53aXBoeTsKKworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspCisJCWlmICh3aXBoeS0+YmFuZHNbYmFuZF0pCisJCQluX2NoYW5uZWxzICs9IHdpcGh5LT5iYW5kc1tiYW5kXS0+bl9jaGFubmVsczsKKworCWNyZXEgPSBremFsbG9jKHNpemVvZigqY3JlcSkgKyBzaXplb2Yoc3RydWN0IGNmZzgwMjExX3NzaWQpICsKKwkJICAgICAgIG5fY2hhbm5lbHMgKiBzaXplb2Yodm9pZCAqKSwKKwkJICAgICAgIEdGUF9BVE9NSUMpOworCWlmICghY3JlcSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwljcmVxLT53aXBoeSA9IHdpcGh5OworCWNyZXEtPmlmaWR4ID0gZGV2LT5pZmluZGV4OworCWNyZXEtPnNzaWRzID0gKHZvaWQgKikoY3JlcSArIDEpOworCWNyZXEtPmNoYW5uZWxzID0gKHZvaWQgKikoY3JlcS0+c3NpZHMgKyAxKTsKKwljcmVxLT5uX2NoYW5uZWxzID0gbl9jaGFubmVsczsKKwljcmVxLT5uX3NzaWRzID0gMTsKKworCS8qIGFsbCBjaGFubmVscyAqLworCWkgPSAwOworCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJaW50IGo7CisJCWlmICghd2lwaHktPmJhbmRzW2JhbmRdKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IDA7IGogPCB3aXBoeS0+YmFuZHNbYmFuZF0tPm5fY2hhbm5lbHM7IGorKykgeworCQkJY3JlcS0+Y2hhbm5lbHNbaV0gPSAmd2lwaHktPmJhbmRzW2JhbmRdLT5jaGFubmVsc1tqXTsKKwkJCWkrKzsKKwkJfQorCX0KKworCS8qIHRyYW5zbGF0ZSBzY2FuIHJlcXVlc3QgKi8KKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBpd19zY2FuX3JlcSkpIHsKKwkJd3JlcSA9IChzdHJ1Y3QgaXdfc2Nhbl9yZXEgKilleHRyYTsKKworCQlpZiAod3JxdS0+ZGF0YS5mbGFncyAmIElXX1NDQU5fVEhJU19FU1NJRCkgeworCQkJaWYgKHdyZXEtPmVzc2lkX2xlbiA+IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQltZW1jcHkoY3JlcS0+c3NpZHNbMF0uc3NpZCwgd3JlcS0+ZXNzaWQsIHdyZXEtPmVzc2lkX2xlbik7CisJCQljcmVxLT5zc2lkc1swXS5zc2lkX2xlbiA9IHdyZXEtPmVzc2lkX2xlbjsKKwkJfQorCQlpZiAod3JlcS0+c2Nhbl90eXBlID09IElXX1NDQU5fVFlQRV9QQVNTSVZFKQorCQkJY3JlcS0+bl9zc2lkcyA9IDA7CisJfQorCisJcmRldi0+c2Nhbl9yZXEgPSBjcmVxOworCWVyciA9IHJkZXYtPm9wcy0+c2Nhbih3aXBoeSwgZGV2LCBjcmVxKTsKKwlpZiAoZXJyKSB7CisJCXJkZXYtPnNjYW5fcmVxID0gTlVMTDsKKwkJa2ZyZWUoY3JlcSk7CisJfQorIG91dDoKKwljZmc4MDIxMV9wdXRfZGV2KHJkZXYpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX3dleHRfc2l3c2Nhbik7CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zY2FuX2FkZF9pZXMoc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3MsCisJCQkJICAgY2hhciAqKmN1cnJlbnRfZXYsIGNoYXIgKmVuZF9idWYpCit7CisJdTggKnBvcywgKmVuZCwgKm5leHQ7CisJc3RydWN0IGl3X2V2ZW50IGl3ZTsKKworCWlmICghYnNzLT5pbmZvcm1hdGlvbl9lbGVtZW50cyB8fAorCSAgICAhYnNzLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpCisJCXJldHVybjsKKworCS8qCisJICogSWYgbmVlZGVkLCBmcmFnbWVudCB0aGUgSUVzIGJ1ZmZlciAoYXQgSUUgYm91bmRhcmllcykgaW50byBzaG9ydAorCSAqIGVub3VnaCBmcmFnbWVudHMgdG8gZml0IGludG8gSVdfR0VORVJJQ19JRV9NQVggb2N0ZXQgbWVzc2FnZXMuCisJICovCisJcG9zID0gYnNzLT5pbmZvcm1hdGlvbl9lbGVtZW50czsKKwllbmQgPSBwb3MgKyBic3MtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50czsKKworCXdoaWxlIChlbmQgLSBwb3MgPiBJV19HRU5FUklDX0lFX01BWCkgeworCQluZXh0ID0gcG9zICsgMiArIHBvc1sxXTsKKwkJd2hpbGUgKG5leHQgKyAyICsgbmV4dFsxXSAtIHBvcyA8IElXX0dFTkVSSUNfSUVfTUFYKQorCQkJbmV4dCA9IG5leHQgKyAyICsgbmV4dFsxXTsKKworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gSVdFVkdFTklFOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IG5leHQgLSBwb3M7CisJCSpjdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoaW5mbywgKmN1cnJlbnRfZXYsCisJCQkJCQkgICBlbmRfYnVmLCAmaXdlLCBwb3MpOworCisJCXBvcyA9IG5leHQ7CisJfQorCisJaWYgKGVuZCA+IHBvcykgeworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gSVdFVkdFTklFOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IGVuZCAtIHBvczsKKwkJKmN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCAqY3VycmVudF9ldiwKKwkJCQkJCSAgIGVuZF9idWYsICZpd2UsIHBvcyk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBlbGFwc2VkX2ppZmZpZXNfbXNlY3ModW5zaWduZWQgbG9uZyBzdGFydCkKK3sKKwl1bnNpZ25lZCBsb25nIGVuZCA9IGppZmZpZXM7CisKKwlpZiAoZW5kID49IHN0YXJ0KQorCQlyZXR1cm4gamlmZmllc190b19tc2VjcyhlbmQgLSBzdGFydCk7CisKKwlyZXR1cm4gamlmZmllc190b19tc2VjcyhlbmQgKyAoTUFYX0pJRkZZX09GRlNFVCAtIHN0YXJ0KSArIDEpOworfQorCitzdGF0aWMgY2hhciAqCitpZWVlODAyMTFfYnNzKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJICAgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqYnNzLCBjaGFyICpjdXJyZW50X2V2LAorCSAgICAgIGNoYXIgKmVuZF9idWYpCit7CisJc3RydWN0IGl3X2V2ZW50IGl3ZTsKKwl1OCAqYnVmLCAqY2ZnLCAqcDsKKwl1OCAqaWUgPSBic3MtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50czsKKwlpbnQgcmVtID0gYnNzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzLCBpLCBzaWc7CisJYm9vbCBpc21lc2ggPSBmYWxzZTsKKworCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJaXdlLmNtZCA9IFNJT0NHSVdBUDsKKwlpd2UudS5hcF9hZGRyLnNhX2ZhbWlseSA9IEFSUEhSRF9FVEhFUjsKKwltZW1jcHkoaXdlLnUuYXBfYWRkci5zYV9kYXRhLCBic3MtPnB1Yi5ic3NpZCwgRVRIX0FMRU4pOworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCQkgIElXX0VWX0FERFJfTEVOKTsKKworCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJaXdlLmNtZCA9IFNJT0NHSVdGUkVROworCWl3ZS51LmZyZXEubSA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChic3MtPnB1Yi5jaGFubmVsLT5jZW50ZXJfZnJlcSk7CisJaXdlLnUuZnJlcS5lID0gMDsKKwljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJICBJV19FVl9GUkVRX0xFTik7CisKKwltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKKwlpd2UudS5mcmVxLm0gPSBic3MtPnB1Yi5jaGFubmVsLT5jZW50ZXJfZnJlcTsKKwlpd2UudS5mcmVxLmUgPSA2OworCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9ldmVudChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLAorCQkJCQkgIElXX0VWX0ZSRVFfTEVOKTsKKworCWlmICh3aXBoeS0+c2lnbmFsX3R5cGUgIT0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTk9ORSkgeworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gSVdFVlFVQUw7CisJCWl3ZS51LnF1YWwudXBkYXRlZCA9IElXX1FVQUxfTEVWRUxfVVBEQVRFRCB8CisJCQkJICAgICBJV19RVUFMX05PSVNFX0lOVkFMSUQgfAorCQkJCSAgICAgSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCXN3aXRjaCAod2lwaHktPnNpZ25hbF90eXBlKSB7CisJCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOgorCQkJc2lnID0gYnNzLT5wdWIuc2lnbmFsIC8gMTAwOworCQkJaXdlLnUucXVhbC5sZXZlbCA9IHNpZzsKKwkJCWl3ZS51LnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0RCTTsKKwkJCWlmIChzaWcgPCAtMTEwKQkJLyogcmF0aGVyIGJhZCAqLworCQkJCXNpZyA9IC0xMTA7CisJCQllbHNlIGlmIChzaWcgPiAtNDApCS8qIHBlcmZlY3QgKi8KKwkJCQlzaWcgPSAtNDA7CisJCQkvKiB3aWxsIGdpdmUgYSByYW5nZSBvZiAwIC4uIDcwICovCisJCQlpd2UudS5xdWFsLnF1YWwgPSBzaWcgKyAxMTA7CisJCQlicmVhazsKKwkJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9VTlNQRUM6CisJCQlpd2UudS5xdWFsLmxldmVsID0gYnNzLT5wdWIuc2lnbmFsOworCQkJLyogd2lsbCBnaXZlIHJhbmdlIDAgLi4gMTAwICovCisJCQlpd2UudS5xdWFsLnF1YWwgPSBic3MtPnB1Yi5zaWduYWw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIG5vdCByZWFjaGVkICovCisJCQlicmVhazsKKwkJfQorCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfZXZlbnQoaW5mbywgY3VycmVudF9ldiwgZW5kX2J1ZiwKKwkJCQkJCSAgJml3ZSwgSVdfRVZfUVVBTF9MRU4pOworCX0KKworCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJaXdlLmNtZCA9IFNJT0NHSVdFTkNPREU7CisJaWYgKGJzcy0+cHViLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9FTkFCTEVEIHwgSVdfRU5DT0RFX05PS0VZOworCWVsc2UKKwkJaXdlLnUuZGF0YS5mbGFncyA9IElXX0VOQ09ERV9ESVNBQkxFRDsKKwlpd2UudS5kYXRhLmxlbmd0aCA9IDA7CisJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCSAgJml3ZSwgIiIpOworCisJd2hpbGUgKHJlbSA+PSAyKSB7CisJCS8qIGludmFsaWQgZGF0YSAqLworCQlpZiAoaWVbMV0gPiByZW0gLSAyKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChpZVswXSkgeworCQljYXNlIFdMQU5fRUlEX1NTSUQ6CisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV07CisJCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJCSAgJml3ZSwgaWUgKyAyKTsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX01FU0hfSUQ6CisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJaXdlLmNtZCA9IFNJT0NHSVdFU1NJRDsKKwkJCWl3ZS51LmRhdGEubGVuZ3RoID0gaWVbMV07CisJCQlpd2UudS5kYXRhLmZsYWdzID0gMTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJCSAgJml3ZSwgaWUgKyAyKTsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fRUlEX01FU0hfQ09ORklHOgorCQkJaXNtZXNoID0gdHJ1ZTsKKwkJCWlmIChpZVsxXSAhPSBJRUVFODAyMTFfTUVTSF9DT05GSUdfTEVOKQorCQkJCWJyZWFrOworCQkJYnVmID0ga21hbGxvYyg1MCwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIWJ1ZikKKwkJCQlicmVhazsKKwkJCWNmZyA9IGllICsgMjsKKwkJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwkJCXNwcmludGYoYnVmLCAiTWVzaCBuZXR3b3JrICh2ZXJzaW9uICVkKSIsIGNmZ1swXSk7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICBlbmRfYnVmLAorCQkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJCXNwcmludGYoYnVmLCAiUGF0aCBTZWxlY3Rpb24gUHJvdG9jb2wgSUQ6ICIKKwkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzFdLCBjZmdbMl0sIGNmZ1szXSwKKwkJCQkJCQljZmdbNF0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQlzcHJpbnRmKGJ1ZiwgIlBhdGggU2VsZWN0aW9uIE1ldHJpYyBJRDogIgorCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbNV0sIGNmZ1s2XSwgY2ZnWzddLAorCQkJCQkJCWNmZ1s4XSk7CisJCQlpd2UudS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOworCQkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGluZm8sIGN1cnJlbnRfZXYsCisJCQkJCQkJICBlbmRfYnVmLAorCQkJCQkJCSAgJml3ZSwgYnVmKTsKKwkJCXNwcmludGYoYnVmLCAiQ29uZ2VzdGlvbiBDb250cm9sIE1vZGUgSUQ6ICIKKwkJCQkiMHglMDJYJTAyWCUwMlglMDJYIiwgY2ZnWzldLCBjZmdbMTBdLAorCQkJCQkJCWNmZ1sxMV0sIGNmZ1sxMl0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQlzcHJpbnRmKGJ1ZiwgIkNoYW5uZWwgUHJlY2VkZW5jZTogIgorCQkJCSIweCUwMlglMDJYJTAyWCUwMlgiLCBjZmdbMTNdLCBjZmdbMTRdLAorCQkJCQkJCWNmZ1sxNV0sIGNmZ1sxNl0pOworCQkJaXdlLnUuZGF0YS5sZW5ndGggPSBzdHJsZW4oYnVmKTsKKwkJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJCSAgZW5kX2J1ZiwKKwkJCQkJCQkgICZpd2UsIGJ1Zik7CisJCQlrZnJlZShidWYpOworCQkJYnJlYWs7CisJCWNhc2UgV0xBTl9FSURfU1VQUF9SQVRFUzoKKwkJY2FzZSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzoKKwkJCS8qIGRpc3BsYXkgYWxsIHN1cHBvcnRlZCByYXRlcyBpbiByZWFkYWJsZSBmb3JtYXQgKi8KKwkJCXAgPSBjdXJyZW50X2V2ICsgaXdlX3N0cmVhbV9sY3BfbGVuKGluZm8pOworCisJCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQkJaXdlLmNtZCA9IFNJT0NHSVdSQVRFOworCQkJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCisJCQlpd2UudS5iaXRyYXRlLmZpeGVkID0gaXdlLnUuYml0cmF0ZS5kaXNhYmxlZCA9IDA7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBpZVsxXTsgaSsrKSB7CisJCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9CisJCQkJCSgoaWVbaSArIDJdICYgMHg3ZikgKiA1MDAwMDApOworCQkJCXAgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShpbmZvLCBjdXJyZW50X2V2LCBwLAorCQkJCQkJZW5kX2J1ZiwgJml3ZSwgSVdfRVZfUEFSQU1fTEVOKTsKKwkJCX0KKwkJCWN1cnJlbnRfZXYgPSBwOworCQkJYnJlYWs7CisJCX0KKwkJcmVtIC09IGllWzFdICsgMjsKKwkJaWUgKz0gaWVbMV0gKyAyOworCX0KKworCWlmIChic3MtPnB1Yi5jYXBhYmlsaXR5ICYgKFdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfSUJTUykKKwkgICAgfHwgaXNtZXNoKSB7CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBTSU9DR0lXTU9ERTsKKwkJaWYgKGlzbWVzaCkKKwkJCWl3ZS51Lm1vZGUgPSBJV19NT0RFX01FU0g7CisJCWVsc2UgaWYgKGJzcy0+cHViLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfRVNTKQorCQkJaXdlLnUubW9kZSA9IElXX01PREVfTUFTVEVSOworCQllbHNlCisJCQlpd2UudS5tb2RlID0gSVdfTU9ERV9BREhPQzsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX2V2ZW50KGluZm8sIGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJCQkgICZpd2UsIElXX0VWX1VJTlRfTEVOKTsKKwl9CisKKwlidWYgPSBrbWFsbG9jKDMwLCBHRlBfQVRPTUlDKTsKKwlpZiAoYnVmKSB7CisJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CisJCWl3ZS5jbWQgPSBJV0VWQ1VTVE9NOworCQlzcHJpbnRmKGJ1ZiwgInRzZj0lMDE2bGx4IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykoYnNzLT5wdWIudHNmKSk7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LCBlbmRfYnVmLAorCQkJCQkJICAmaXdlLCBidWYpOworCQltZW1zZXQoJml3ZSwgMCwgc2l6ZW9mKGl3ZSkpOworCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKKwkJc3ByaW50ZihidWYsICIgTGFzdCBiZWFjb246ICV1bXMgYWdvIiwKKwkJCWVsYXBzZWRfamlmZmllc19tc2Vjcyhic3MtPnRzKSk7CisJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7CisJCWN1cnJlbnRfZXYgPSBpd2Vfc3RyZWFtX2FkZF9wb2ludChpbmZvLCBjdXJyZW50X2V2LAorCQkJCQkJICBlbmRfYnVmLCAmaXdlLCBidWYpOworCQlrZnJlZShidWYpOworCX0KKworCWllZWU4MDIxMV9zY2FuX2FkZF9pZXMoaW5mbywgJmJzcy0+cHViLCAmY3VycmVudF9ldiwgZW5kX2J1Zik7CisKKwlyZXR1cm4gY3VycmVudF9ldjsKK30KKworCitzdGF0aWMgaW50IGllZWU4MDIxMV9zY2FuX3Jlc3VsdHMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSAgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCWNoYXIgKmN1cnJlbnRfZXYgPSBidWY7CisJY2hhciAqZW5kX2J1ZiA9IGJ1ZiArIGxlbjsKKwlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpic3M7CisKKwlzcGluX2xvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCWNmZzgwMjExX2Jzc19leHBpcmUoZGV2KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnNzLCAmZGV2LT5ic3NfbGlzdCwgbGlzdCkgeworCQlpZiAoYnVmICsgbGVuIC0gY3VycmVudF9ldiA8PSBJV19FVl9BRERSX0xFTikgeworCQkJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCQkJcmV0dXJuIC1FMkJJRzsKKwkJfQorCQljdXJyZW50X2V2ID0gaWVlZTgwMjExX2JzcygmZGV2LT53aXBoeSwgaW5mbywgYnNzLAorCQkJCQkgICBjdXJyZW50X2V2LCBlbmRfYnVmKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRldi0+YnNzX2xvY2spOworCXJldHVybiBjdXJyZW50X2V2IC0gYnVmOworfQorCisKK2ludCBjZmc4MDIxMV93ZXh0X2dpd3NjYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJaW50IHJlczsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gLUVORVRET1dOOworCisJcmRldiA9IGNmZzgwMjExX2dldF9kZXZfZnJvbV9pZmluZGV4KGRldi0+aWZpbmRleCk7CisKKwlpZiAoSVNfRVJSKHJkZXYpKQorCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKworCWlmIChyZGV2LT5zY2FuX3JlcSkgeworCQlyZXMgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXMgPSBpZWVlODAyMTFfc2Nhbl9yZXN1bHRzKHJkZXYsIGluZm8sIGV4dHJhLCBkYXRhLT5sZW5ndGgpOworCWRhdGEtPmxlbmd0aCA9IDA7CisJaWYgKHJlcyA+PSAwKSB7CisJCWRhdGEtPmxlbmd0aCA9IHJlczsKKwkJcmVzID0gMDsKKwl9CisKKyBvdXQ6CisJY2ZnODAyMTFfcHV0X2RldihyZGV2KTsKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV93ZXh0X2dpd3NjYW4pOworI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc3lzZnMuYyBiL25ldC93aXJlbGVzcy9zeXNmcy5jCmluZGV4IDc5YTM4MjguLmVmZTNjNWMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zeXNmcy5jCisrKyBiL25ldC93aXJlbGVzcy9zeXNmcy5jCkBAIC0zMSw3ICszMSw3IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCBmbXQgIlxuIiwgZGV2X3RvX3JkZXYoZGV2KS0+bWVtYmVyKTsJXAogfQogCi1TSE9XX0ZNVChpbmRleCwgIiVkIiwgaWR4KTsKK1NIT1dfRk1UKGluZGV4LCAiJWQiLCB3aXBoeV9pZHgpOwogU0hPV19GTVQobWFjYWRkcmVzcywgIiVwTSIsIHdpcGh5LnBlcm1fYWRkcik7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBpZWVlODAyMTFfZGV2X2F0dHJzW10gPSB7CkBAIC01NSw2ICs1NSw0MSBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgd2lwaHlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBkZXZfdG9fcmRldihkZXYpOworCWludCByZXQgPSAwOworCisJcmRldi0+c3VzcGVuZF9hdCA9IGdldF9zZWNvbmRzKCk7CisKKwlpZiAocmRldi0+b3BzLT5zdXNwZW5kKSB7CisJCXJ0bmxfbG9jaygpOworCQlyZXQgPSByZGV2LT5vcHMtPnN1c3BlbmQoJnJkZXYtPndpcGh5KTsKKwkJcnRubF91bmxvY2soKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdpcGh5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gZGV2X3RvX3JkZXYoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCS8qIEFnZSBzY2FuIHJlc3VsdHMgd2l0aCB0aW1lIHNwZW50IGluIHN1c3BlbmQgKi8KKwlzcGluX2xvY2tfYmgoJnJkZXYtPmJzc19sb2NrKTsKKwljZmc4MDIxMV9ic3NfYWdlKHJkZXYsIGdldF9zZWNvbmRzKCkgLSByZGV2LT5zdXNwZW5kX2F0KTsKKwlzcGluX3VubG9ja19iaCgmcmRldi0+YnNzX2xvY2spOworCisJaWYgKHJkZXYtPm9wcy0+cmVzdW1lKSB7CisJCXJ0bmxfbG9jaygpOworCQlyZXQgPSByZGV2LT5vcHMtPnJlc3VtZSgmcmRldi0+d2lwaHkpOworCQlydG5sX3VubG9jaygpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0cnVjdCBjbGFzcyBpZWVlODAyMTFfY2xhc3MgPSB7CiAJLm5hbWUgPSAiaWVlZTgwMjExIiwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKQEAgLTYzLDYgKzk4LDggQEAKICNpZmRlZiBDT05GSUdfSE9UUExVRwogCS5kZXZfdWV2ZW50ID0gd2lwaHlfdWV2ZW50LAogI2VuZGlmCisJLnN1c3BlbmQgPSB3aXBoeV9zdXNwZW5kLAorCS5yZXN1bWUgPSB3aXBoeV9yZXN1bWUsCiB9OwogCiBpbnQgd2lwaHlfc3lzZnNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmMKaW5kZXggZTc2Y2MyOC4uNDg3Y2RkOSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3V0aWwuYworKysgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCkBAIC05LDcgKzksNyBAQAogCiBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKgogaWVlZTgwMjExX2dldF9yZXNwb25zZV9yYXRlKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAotCQkJICAgIHU2NCBiYXNpY19yYXRlcywgaW50IGJpdHJhdGUpCisJCQkgICAgdTMyIGJhc2ljX3JhdGVzLCBpbnQgYml0cmF0ZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJlc3VsdCA9ICZzYmFuZC0+Yml0cmF0ZXNbMF07CiAJaW50IGk7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCmluZGV4IDU4ZTQ4OWYuLjBmZDFkYjYgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCisrKyBiL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jCkBAIC02Niw2ICs2Niw3IEBACiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCB2aWZfcGFyYW1zIHZpZnBhcmFtczsKIAllbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGU7CisJaW50IHJldDsKIAogCWlmICghd2RldikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtOTYsMTAgKzk3LDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmICh0eXBlID09IHdkZXYtPmlmdHlwZSkKKwkJcmV0dXJuIDA7CisKIAltZW1zZXQoJnZpZnBhcmFtcywgMCwgc2l6ZW9mKHZpZnBhcmFtcykpOwogCi0JcmV0dXJuIHJkZXYtPm9wcy0+Y2hhbmdlX3ZpcnR1YWxfaW50Zih3ZGV2LT53aXBoeSwgZGV2LT5pZmluZGV4LCB0eXBlLAotCQkJCQkgICAgICBOVUxMLCAmdmlmcGFyYW1zKTsKKwlyZXQgPSByZGV2LT5vcHMtPmNoYW5nZV92aXJ0dWFsX2ludGYod2Rldi0+d2lwaHksIGRldi0+aWZpbmRleCwgdHlwZSwKKwkJCQkJICAgICBOVUxMLCAmdmlmcGFyYW1zKTsKKwlXQVJOX09OKCFyZXQgJiYgd2Rldi0+aWZ0eXBlICE9IHR5cGUpOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9zaXdtb2RlKTsKIApAQCAtMTM3LDMgKzE0NCwxMDAgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2ZnODAyMTFfd2V4dF9naXdtb2RlKTsKKworCitpbnQgY2ZnODAyMTFfd2V4dF9naXdyYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKSBleHRyYTsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisJaW50IGMgPSAwOworCisJaWYgKCF3ZGV2KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlkYXRhLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGl3X3JhbmdlKTsKKwltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihzdHJ1Y3QgaXdfcmFuZ2UpKTsKKworCXJhbmdlLT53ZV92ZXJzaW9uX2NvbXBpbGVkID0gV0lSRUxFU1NfRVhUOworCXJhbmdlLT53ZV92ZXJzaW9uX3NvdXJjZSA9IDIxOworCXJhbmdlLT5yZXRyeV9jYXBhID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPnJldHJ5X2ZsYWdzID0gSVdfUkVUUllfTElNSVQ7CisJcmFuZ2UtPm1pbl9yZXRyeSA9IDA7CisJcmFuZ2UtPm1heF9yZXRyeSA9IDI1NTsKKwlyYW5nZS0+bWluX3J0cyA9IDA7CisJcmFuZ2UtPm1heF9ydHMgPSAyMzQ3OworCXJhbmdlLT5taW5fZnJhZyA9IDI1NjsKKwlyYW5nZS0+bWF4X2ZyYWcgPSAyMzQ2OworCisJcmFuZ2UtPmVuY29kaW5nX3NpemVbMF0gPSA1OworCXJhbmdlLT5lbmNvZGluZ19zaXplWzFdID0gMTM7CisJcmFuZ2UtPm51bV9lbmNvZGluZ19zaXplcyA9IDI7CisJcmFuZ2UtPm1heF9lbmNvZGluZ190b2tlbnMgPSA0OworCisJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisKKwlzd2l0Y2ggKHdkZXYtPndpcGh5LT5zaWduYWxfdHlwZSkgeworCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTk9ORToKKwkJYnJlYWs7CisJY2FzZSBDRkc4MDIxMV9TSUdOQUxfVFlQRV9NQk06CisJCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IC0xMTA7CisJCXJhbmdlLT5tYXhfcXVhbC5xdWFsID0gNzA7CisJCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gMzU7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfREJNOworCQlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKKwkJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOworCQlicmVhazsKKwljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzoKKwkJcmFuZ2UtPm1heF9xdWFsLmxldmVsID0gMTAwOworCQlyYW5nZS0+bWF4X3F1YWwucXVhbCA9IDEwMDsKKwkJcmFuZ2UtPmF2Z19xdWFsLnF1YWwgPSA1MDsKKwkJcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9RVUFMX1VQREFURUQ7CisJCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkIHw9IElXX1FVQUxfTEVWRUxfVVBEQVRFRDsKKwkJYnJlYWs7CisJfQorCisJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gcmFuZ2UtPm1heF9xdWFsLmxldmVsIC8gMjsKKwlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSByYW5nZS0+bWF4X3F1YWwubm9pc2UgLyAyOworCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gcmFuZ2UtPm1heF9xdWFsLnVwZGF0ZWQ7CisKKwlyYW5nZS0+ZW5jX2NhcGEgPSBJV19FTkNfQ0FQQV9XUEEgfCBJV19FTkNfQ0FQQV9XUEEyIHwKKwkJCSAgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfCBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUDsKKworCisJZm9yIChiYW5kID0gMDsgYmFuZCA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGJhbmQgKyspIHsKKwkJaW50IGk7CisJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJCXNiYW5kID0gd2Rldi0+d2lwaHktPmJhbmRzW2JhbmRdOworCisJCWlmICghc2JhbmQpCisJCQljb250aW51ZTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHMgJiYgYyA8IElXX01BWF9GUkVRVUVOQ0lFUzsgaSsrKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4gPSAmc2JhbmQtPmNoYW5uZWxzW2ldOworCisJCQlpZiAoIShjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSkgeworCQkJCXJhbmdlLT5mcmVxW2NdLmkgPQorCQkJCQlpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCisJCQkJCQljaGFuLT5jZW50ZXJfZnJlcSk7CisJCQkJcmFuZ2UtPmZyZXFbY10ubSA9IGNoYW4tPmNlbnRlcl9mcmVxOworCQkJCXJhbmdlLT5mcmVxW2NdLmUgPSA2OworCQkJCWMrKzsKKwkJCX0KKwkJfQorCX0KKwlyYW5nZS0+bnVtX2NoYW5uZWxzID0gYzsKKwlyYW5nZS0+bnVtX2ZyZXF1ZW5jeSA9IGM7CisKKwlJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwocmFuZ2UtPmV2ZW50X2NhcGEpOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXQVApOworCUlXX0VWRU5UX0NBUEFfU0VUKHJhbmdlLT5ldmVudF9jYXBhLCBTSU9DR0lXU0NBTik7CisKKwlyYW5nZS0+c2Nhbl9jYXBhIHw9IElXX1NDQU5fQ0FQQV9FU1NJRDsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV93ZXh0X2dpd3JhbmdlKTsKZGlmZiAtLWdpdCBhL25ldC94MjUvYWZfeDI1LmMgYi9uZXQveDI1L2FmX3gyNS5jCmluZGV4IDlmYzViMDIuLmVkODBhZjggMTAwNjQ0Ci0tLSBhL25ldC94MjUvYWZfeDI1LmMKKysrIGIvbmV0L3gyNS9hZl94MjUuYwpAQCAtOTUxLDEwICs5NTEsOCBAQAogCS8qCiAJICoJSW5jb21pbmcgQ2FsbCBVc2VyIERhdGEuCiAJICovCi0JaWYgKHNrYi0+bGVuID49IDApIHsKLQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIG1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRkYXRhLCBza2ItPmxlbik7Ci0JCW1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRsZW5ndGggPSBza2ItPmxlbjsKLQl9CisJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIG1ha2V4MjUtPmNhbGx1c2VyZGF0YS5jdWRkYXRhLCBza2ItPmxlbik7CisJbWFrZXgyNS0+Y2FsbHVzZXJkYXRhLmN1ZGxlbmd0aCA9IHNrYi0+bGVuOwogCiAJc2stPnNrX2Fja19iYWNrbG9nKys7CiAKQEAgLTEwMzcsNiArMTAzNSwxMiBAQAogCQlzeDI1LnN4MjVfYWRkciAgID0geDI1LT5kZXN0X2FkZHI7CiAJfQogCisJLyogU2FuaXR5IGNoZWNrIHRoZSBwYWNrZXQgc2l6ZSAqLworCWlmIChsZW4gPiA2NTUzNSkgeworCQlyYyA9IC1FTVNHU0laRTsKKwkJZ290byBvdXQ7CisJfQorCiAJU09DS19ERUJVRyhzaywgIngyNV9zZW5kbXNnOiBzZW5kdG86IEFkZHJlc3NlcyBidWlsdC5cbiIpOwogCiAJLyogQnVpbGQgYSBwYWNrZXQgKi8KQEAgLTExMjIsOCArMTEyNiw5IEBACiAJaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX09PQikKIAkJc2tiX3F1ZXVlX3RhaWwoJngyNS0+aW50ZXJydXB0X291dF9xdWV1ZSwgc2tiKTsKIAllbHNlIHsKLQkJbGVuID0geDI1X291dHB1dChzaywgc2tiKTsKLQkJaWYgKGxlbiA8IDApCisJCXJjID0geDI1X291dHB1dChzaywgc2tiKTsKKwkJbGVuID0gcmM7CisJCWlmIChyYyA8IDApCiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJZWxzZSBpZiAoeDI1LT5xYml0aW5jbCkKIAkJCWxlbisrOwpAQCAtMTYwOCw4ICsxNjEzLDggQEAKIAogU09DS09QU19XUkFQKHgyNV9wcm90bywgQUZfWDI1KTsKIAotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSB4MjVfcGFja2V0X3R5cGUgPSB7Ci0JLnR5cGUgPQlfX2NvbnN0YW50X2h0b25zKEVUSF9QX1gyNSksCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIHgyNV9wYWNrZXRfdHlwZSBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0JY3B1X3RvX2JlMTYoRVRIX1BfWDI1KSwKIAkuZnVuYyA9CXgyNV9sYXBiX3JlY2VpdmVfZnJhbWUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKaW5kZXggNjJhNTQyNS4uODIyNzE3MiAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jCisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwpAQCAtMTYxNSw3ICsxNjE1LDcgQEAKIAogCXNwaW5fbG9ja19iaCgmeGZybV9zdGF0ZV9sb2NrKTsKIAlsaXN0X2RlbCgmd2Fsay0+YWxsKTsKLQlzcGluX2xvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfd2Fsa19kb25lKTsKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5saWIgYi9zY3JpcHRzL01ha2VmaWxlLmxpYgppbmRleCBlMDYzNjU3Ny4uYzE4ZmExNSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5saWIKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5saWIKQEAgLTk3LDcgKzk3LDcgQEAKICAgICAgICAgICAgICAgICAgLUQiS0JVSUxEX01PRE5BTUU9S0JVSUxEX1NUUigkKGNhbGwgbmFtZS1maXgsJChtb2RuYW1lKSkpIikKIAogI2hhc2ggdmFsdWVzCi1pZmRlZiBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcKK2lmZGVmIENPTkZJR19EWU5BTUlDX0RFQlVHCiBkZWJ1Z19mbGFncyA9IC1EIkRFQlVHX0hBU0g9JChzaGVsbCAuL3NjcmlwdHMvYmFzaWMvaGFzaCBkamIyICQoQEQpJChtb2RuYW1lKSkiXAogICAgICAgICAgICAgICAtRCJERUJVR19IQVNIMj0kKHNoZWxsIC4vc2NyaXB0cy9iYXNpYy9oYXNoIHI1ICQoQEQpJChtb2RuYW1lKSkiCiBlbHNlCmRpZmYgLS1naXQgYS9zY3JpcHRzL2hlYWRlcnNfY2hlY2sucGwgYi9zY3JpcHRzL2hlYWRlcnNfY2hlY2sucGwKaW5kZXggZGIzMGZhYy4uNTZmOTBhNCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9oZWFkZXJzX2NoZWNrLnBsCisrKyBiL3NjcmlwdHMvaGVhZGVyc19jaGVjay5wbApAQCAtMzgsNyArMzgsNyBAQAogCQkmY2hlY2tfYXNtX3R5cGVzKCk7CiAJCSZjaGVja19zaXpldHlwZXMoKTsKIAkJJmNoZWNrX3Byb3RvdHlwZXMoKTsKLQkJJmNoZWNrX2NvbmZpZygpOworCQkjIERyb3BwZWQgZm9yIG5vdy4gVG9vIG11Y2ggbm9pc2UgJmNoZWNrX2NvbmZpZygpOwogCX0KIAljbG9zZSBGSDsKIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IDNlMTA1N2YuLmQxOTAwOTIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAKICNkZWZpbmUgTEtDX0RJUkVDVF9MSU5LCiAjaW5jbHVkZSAibGtjLmgiCkBAIC00NjQsOSArNDY1LDIyIEBACiAJCQlpbnB1dF9tb2RlID0gc2V0X3llczsKIAkJCWJyZWFrOwogCQljYXNlICdyJzoKKwkJeworCQkJc3RydWN0IHRpbWV2YWwgbm93OworCQkJdW5zaWduZWQgaW50IHNlZWQ7CisKKwkJCS8qCisJCQkgKiBVc2UgbWljcm9zZWNvbmRzIGRlcml2ZWQgc2VlZCwKKwkJCSAqIGNvbXBlbnNhdGUgZm9yIHN5c3RlbXMgd2hlcmUgaXQgbWF5IGJlIHplcm8KKwkJCSAqLworCQkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCisJCQlzZWVkID0gKHVuc2lnbmVkIGludCkoKG5vdy50dl9zZWMgKyAxKSAqIChub3cudHZfdXNlYyArIDEpKTsKKwkJCXNyYW5kKHNlZWQpOworCiAJCQlpbnB1dF9tb2RlID0gc2V0X3JhbmRvbTsKLQkJCXNyYW5kKHRpbWUoTlVMTCkpOwogCQkJYnJlYWs7CisJCX0KIAkJY2FzZSAnaCc6CiAJCQlwcmludGYoXygiU2VlIFJFQURNRSBmb3IgdXNhZ2UgaW5mb1xuIikpOwogCQkJZXhpdCgwKTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKaW5kZXggODMwZDllYS4uMjczZDczOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmZkYXRhLmMKQEAgLTg0Myw3ICs4NDMsNyBAQAogCQkJZGVmYXVsdDoKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmICghc3ltX2lzX2Nob2ljZShzeW0pIHx8IG1vZGUgIT0gZGVmX3JhbmRvbSkKKwkJCWlmICghKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBtb2RlID09IGRlZl9yYW5kb20pKQogCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC04NTYsMjggKzg1Niw0OSBAQAogCiAJaWYgKG1vZGUgIT0gZGVmX3JhbmRvbSkKIAkJcmV0dXJuOwotCisJLyoKKwkgKiBXZSBoYXZlIGRpZmZlcmVudCB0eXBlIG9mIGNob2ljZSBibG9ja3MuCisJICogSWYgY3Vyci50cmkgZXF1YWwgdG8gbW9kIHRoZW4gd2UgY2FuIHNlbGVjdCBzZXZlcmFsCisJICogY2hvaWNlIHN5bWJvbHMgaW4gb25lIGJsb2NrLgorCSAqIEluIHRoaXMgY2FzZSB3ZSBkbyBub3RoaW5nLgorCSAqIElmIGN1cnIudHJpIGVxdWFsIHllcyB0aGVuIG9ubHkgb25lIHN5bWJvbCBjYW4gYmUKKwkgKiBzZWxlY3RlZCBpbiBhIGNob2ljZSBibG9jayBhbmQgd2Ugc2V0IGl0IHRvIHllcywKKwkgKiBhbmQgdGhlIHJlc3QgdG8gbm8uCisJICovCiAJZm9yX2FsbF9zeW1ib2xzKGksIGNzeW0pIHsKIAkJaWYgKHN5bV9oYXNfdmFsdWUoY3N5bSkgfHwgIXN5bV9pc19jaG9pY2UoY3N5bSkpCiAJCQljb250aW51ZTsKIAogCQlzeW1fY2FsY192YWx1ZShjc3ltKTsKKworCQlpZiAoY3N5bS0+Y3Vyci50cmkgIT0geWVzKQorCQkJY29udGludWU7CisKIAkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY3N5bSk7Ci0JCWRlZiA9IC0xOwotCQl3aGlsZSAoMSkgewotCQkJY250ID0gMDsKLQkJCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7Ci0JCQkJaWYgKHN5bS0+dmlzaWJsZSA9PSBubykKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKGRlZiA9PSBjbnQrKykgewotCQkJCQljc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0gc3ltOwotCQkJCQlicmVhazsKLQkJCQl9CisKKwkJLyogY291bnQgZW50cmllcyBpbiBjaG9pY2UgYmxvY2sgKi8KKwkJY250ID0gMDsKKwkJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pCisJCQljbnQrKzsKKworCQkvKgorCQkgKiBmaW5kIGEgcmFuZG9tIHZhbHVlIGFuZCBzZXQgaXQgdG8geWVzLAorCQkgKiBzZXQgdGhlIHJlc3QgdG8gbm8gc28gd2UgaGF2ZSBvbmx5IG9uZSBzZXQKKwkJICovCisJCWRlZiA9IChyYW5kKCkgJSBjbnQpOworCisJCWNudCA9IDA7CisJCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCQlpZiAoZGVmID09IGNudCsrKSB7CisJCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0geWVzOworCQkJCWNzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwgPSBzeW07CiAJCQl9Ci0JCQlpZiAoZGVmID49IDAgfHwgY250IDwgMikKLQkJCQlicmVhazsKLQkJCWRlZiA9IChyYW5kKCkgJSBjbnQpICsgMTsKKwkJCWVsc2UgeworCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG5vOworCQkJfQogCQl9CiAJCWNzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJLyogY2xlYXIgVkFMSUQgdG8gZ2V0IHZhbHVlIGNhbGN1bGF0ZWQgKi8KKwkJY3N5bS0+ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwppbmRleCA0ZWVhNjBiLi5hMzM0NDI4IDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKKysrIGIvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCkBAIC03MTAsNiArNzEwLDE0IEBACiAJc3RyY2F0KGFsaWFzLCAiOiIpOwogCXJldHVybiAxOwogfQorCitzdGF0aWMgaW50IGRvX3BsYXRmb3JtX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICppZCwgY2hhciAqYWxpYXMpCit7CisJc3ByaW50ZihhbGlhcywgUExBVEZPUk1fTU9EVUxFX1BSRUZJWCAiJXMiLCBpZC0+bmFtZSk7CisJcmV0dXJuIDE7Cit9CisKIC8qIElnbm9yZSBhbnkgcHJlZml4LCBlZy4gc29tZSBhcmNoaXRlY3R1cmVzIHByZXBlbmQgXyAqLwogc3RhdGljIGlubGluZSBpbnQgc3ltX2lzKGNvbnN0IGNoYXIgKnN5bWJvbCwgY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTg0OSw2ICs4NTcsMTAgQEAKIAkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCiAJCQkgc2l6ZW9mKHN0cnVjdCBkbWlfc3lzdGVtX2lkKSwgImRtaSIsCiAJCQkgZG9fZG1pX2VudHJ5LCBtb2QpOworCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfcGxhdGZvcm1fZGV2aWNlX3RhYmxlIikpCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkKSwgInBsYXRmb3JtIiwKKwkJCSBkb19wbGF0Zm9ybV9lbnRyeSwgbW9kKTsKIAlmcmVlKHplcm9zKTsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvS2NvbmZpZyBiL3NlY3VyaXR5L0tjb25maWcKaW5kZXggOTQzODUzNS4uYmIyNDQ3NyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvS2NvbmZpZworKysgYi9zZWN1cml0eS9LY29uZmlnCkBAIC01NSw3ICs1NSw4IEBACiAJYm9vbCAiRW5hYmxlIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW0iCiAJaGVscAogCSAgVGhpcyB3aWxsIGJ1aWxkIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW0uICBJdCBpcyBjdXJyZW50bHkgdXNlZCBieQotCSAgdGhlIFRQTSBiaW9zIGNoYXJhY3RlciBkcml2ZXIuICBJdCBpcyBub3QgdXNlZCBieSBTRUxpbnV4IG9yIFNNQUNLLgorCSAgdGhlIFRQTSBiaW9zIGNoYXJhY3RlciBkcml2ZXIgYW5kIElNQSwgYW4gaW50ZWdyaXR5IHByb3ZpZGVyLiAgSXQgaXMKKwkgIG5vdCB1c2VkIGJ5IFNFTGludXggb3IgU01BQ0suCiAKIAkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCiAKQEAgLTEzNCw2ICsxMzUsOSBAQAogCiBzb3VyY2Ugc2VjdXJpdHkvc2VsaW51eC9LY29uZmlnCiBzb3VyY2Ugc2VjdXJpdHkvc21hY2svS2NvbmZpZworc291cmNlIHNlY3VyaXR5L3RvbW95by9LY29uZmlnCisKK3NvdXJjZSBzZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcKIAogZW5kbWVudQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9NYWtlZmlsZSBiL3NlY3VyaXR5L01ha2VmaWxlCmluZGV4IGMwNWMxMjcuLmZhNzcwMjEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L01ha2VmaWxlCisrKyBiL3NlY3VyaXR5L01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogb2JqLSQoQ09ORklHX0tFWVMpCQkJKz0ga2V5cy8KIHN1YmRpci0kKENPTkZJR19TRUNVUklUWV9TRUxJTlVYKQkrPSBzZWxpbnV4CiBzdWJkaXItJChDT05GSUdfU0VDVVJJVFlfU01BQ0spCQkrPSBzbWFjaworc3ViZGlyLSQoQ09ORklHX1NFQ1VSSVRZX1RPTU9ZTykgICAgICAgICs9IHRvbW95bwogCiAjIGFsd2F5cyBlbmFibGUgZGVmYXVsdCBjYXBhYmlsaXRpZXMKIG9iai15CQkrPSBjb21tb25jYXAubwpAQCAtMTUsNSArMTYsMTAgQEAKICMgTXVzdCBwcmVjZWRlIGNhcGFiaWxpdHkubyBpbiBvcmRlciB0byBzdGFjayBwcm9wZXJseS4KIG9iai0kKENPTkZJR19TRUNVUklUWV9TRUxJTlVYKQkJKz0gc2VsaW51eC9idWlsdC1pbi5vCiBvYmotJChDT05GSUdfU0VDVVJJVFlfU01BQ0spCQkrPSBzbWFjay9idWlsdC1pbi5vCitvYmotJChDT05GSUdfU0VDVVJJVFlfVE9NT1lPKQkJKz0gdG9tb3lvL2J1aWx0LWluLm8KIG9iai0kKENPTkZJR19TRUNVUklUWV9ST09UUExVRykJCSs9IHJvb3RfcGx1Zy5vCiBvYmotJChDT05GSUdfQ0dST1VQX0RFVklDRSkJCSs9IGRldmljZV9jZ3JvdXAubworCisjIE9iamVjdCBpbnRlZ3JpdHkgZmlsZSBsaXN0cworc3ViZGlyLSQoQ09ORklHX0lNQSkJCQkrPSBpbnRlZ3JpdHkvaW1hCitvYmotJChDT05GSUdfSU1BKQkJCSs9IGludGVncml0eS9pbWEvYnVpbHQtaW4ubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW5vZGUuYyBiL3NlY3VyaXR5L2lub2RlLmMKaW5kZXggMDA3ZWYyNS4uZjNiOTFiZiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvaW5vZGUuYworKysgYi9zZWN1cml0eS9pbm9kZS5jCkBAIC0yMDIsMTIgKzIwMiwxMSBAQAogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhIGRlbnRyeSBpZiBpdCBzdWNjZWVkcy4gIFRoaXMKICAqIHBvaW50ZXIgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIHNlY3VyaXR5ZnNfcmVtb3ZlKCkgZnVuY3Rpb24gd2hlbiB0aGUgZmlsZSBpcwogICogdG8gYmUgcmVtb3ZlZCAobm8gYXV0b21hdGljIGNsZWFudXAgaGFwcGVucyBpZiB5b3VyIG1vZHVsZSBpcyB1bmxvYWRlZCwKLSAqIHlvdSBhcmUgcmVzcG9uc2libGUgaGVyZSkuICBJZiBhbiBlcnJvciBvY2N1cnMsICVOVUxMIGlzIHJldHVybmVkLgorICogeW91IGFyZSByZXNwb25zaWJsZSBoZXJlKS4gIElmIGFuIGVycm9yIG9jY3VycywgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuCisgKiB0aGUgZXJvcnIgdmFsdWUgKHZpYSBFUlJfUFRSKS4KICAqCiAgKiBJZiBzZWN1cml0eWZzIGlzIG5vdCBlbmFibGVkIGluIHRoZSBrZXJuZWwsIHRoZSB2YWx1ZSAlLUVOT0RFViBpcwotICogcmV0dXJuZWQuICBJdCBpcyBub3Qgd2lzZSB0byBjaGVjayBmb3IgdGhpcyB2YWx1ZSwgYnV0IHJhdGhlciwgY2hlY2sgZm9yCi0gKiAlTlVMTCBvciAhJU5VTEwgaW5zdGVhZCBhcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yICNpZmRlZiBpbiB0aGUgY2FsbGluZwotICogY29kZS4KKyAqIHJldHVybmVkLgogICovCiBzdHJ1Y3QgZGVudHJ5ICpzZWN1cml0eWZzX2NyZWF0ZV9maWxlKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAogCQkJCSAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwgdm9pZCAqZGF0YSwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2Q5NzY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnCkBAIC0wLDAgKzEsNTUgQEAKKyMgSUJNIEludGVncml0eSBNZWFzdXJlbWVudCBBcmNoaXRlY3R1cmUKKyMKK2NvbmZpZyBJTUEKKwlib29sICJJbnRlZ3JpdHkgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkiCisJZGVwZW5kcyBvbiBBQ1BJCisJc2VsZWN0IFNFQ1VSSVRZRlMKKwlzZWxlY3QgQ1JZUFRPCisJc2VsZWN0IENSWVBUT19ITUFDCisJc2VsZWN0IENSWVBUT19NRDUKKwlzZWxlY3QgQ1JZUFRPX1NIQTEKKwlzZWxlY3QgVENHX1RQTQorCXNlbGVjdCBUQ0dfVElTCisJaGVscAorCSAgVGhlIFRydXN0ZWQgQ29tcHV0aW5nIEdyb3VwKFRDRykgcnVudGltZSBJbnRlZ3JpdHkKKwkgIE1lYXN1cmVtZW50IEFyY2hpdGVjdHVyZShJTUEpIG1haW50YWlucyBhIGxpc3Qgb2YgaGFzaAorCSAgdmFsdWVzIG9mIGV4ZWN1dGFibGVzIGFuZCBvdGhlciBzZW5zaXRpdmUgc3lzdGVtIGZpbGVzLAorCSAgYXMgdGhleSBhcmUgcmVhZCBvciBleGVjdXRlZC4gSWYgYW4gYXR0YWNrZXIgbWFuYWdlcworCSAgdG8gY2hhbmdlIHRoZSBjb250ZW50cyBvZiBhbiBpbXBvcnRhbnQgc3lzdGVtIGZpbGUKKwkgIGJlaW5nIG1lYXN1cmVkLCB3ZSBjYW4gdGVsbC4KKworCSAgSWYgeW91ciBzeXN0ZW0gaGFzIGEgVFBNIGNoaXAsIHRoZW4gSU1BIGFsc28gbWFpbnRhaW5zCisJICBhbiBhZ2dyZWdhdGUgaW50ZWdyaXR5IHZhbHVlIG92ZXIgdGhpcyBsaXN0IGluc2lkZSB0aGUKKwkgIFRQTSBoYXJkd2FyZSwgc28gdGhhdCB0aGUgVFBNIGNhbiBwcm92ZSB0byBhIHRoaXJkIHBhcnR5CisJICB3aGV0aGVyIG9yIG5vdCBjcml0aWNhbCBzeXN0ZW0gZmlsZXMgaGF2ZSBiZWVuIG1vZGlmaWVkLgorCSAgUmVhZCA8aHR0cDovL3d3dy51c2VuaXgub3JnL2V2ZW50cy9zZWMwNC90ZWNoL3NhaWxlci5odG1sPgorCSAgdG8gbGVhcm4gbW9yZSBhYm91dCBJTUEuCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSU1BX01FQVNVUkVfUENSX0lEWAorCWludAorCWRlcGVuZHMgb24gSU1BCisJcmFuZ2UgOCAxNAorCWRlZmF1bHQgMTAKKwloZWxwCisJICBJTUFfTUVBU1VSRV9QQ1JfSURYIGRldGVybWluZXMgdGhlIFRQTSBQQ1IgcmVnaXN0ZXIgaW5kZXgKKwkgIHRoYXQgSU1BIHVzZXMgdG8gbWFpbnRhaW4gdGhlIGludGVncml0eSBhZ2dyZWdhdGUgb2YgdGhlCisJICBtZWFzdXJlbWVudCBsaXN0LiAgSWYgdW5zdXJlLCB1c2UgdGhlIGRlZmF1bHQgMTAuCisKK2NvbmZpZyBJTUFfQVVESVQKKwlib29sCisJZGVwZW5kcyBvbiBJTUEKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIG9wdGlvbiBhZGRzIGEga2VybmVsIHBhcmFtZXRlciAnaW1hX2F1ZGl0Jywgd2hpY2gKKwkgIGFsbG93cyBpbmZvcm1hdGlvbmFsIGF1ZGl0aW5nIG1lc3NhZ2VzIHRvIGJlIGVuYWJsZWQKKwkgIGF0IGJvb3QuICBJZiB0aGlzIG9wdGlvbiBpcyBzZWxlY3RlZCwgaW5mb3JtYXRpb25hbCBpbnRlZ3JpdHkKKwkgIGF1ZGl0aW5nIG1lc3NhZ2VzIGNhbiBiZSBlbmFibGVkIHdpdGggJ2ltYV9hdWRpdD0xJyBvbgorCSAgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCisKK2NvbmZpZyBJTUFfTFNNX1JVTEVTCisJYm9vbAorCWRlcGVuZHMgb24gSU1BICYmIEFVRElUICYmIChTRUNVUklUWV9TRUxJTlVYIHx8IFNFQ1VSSVRZX1NNQUNLKQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIERpc2FibGluZyB0aGlzIG9wdGlvbiB3aWxsIGRpc3JlZ2FyZCBMU00gYmFzZWQgcG9saWN5IHJ1bGVzLgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9NYWtlZmlsZSBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3YzRjYgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACisjCisjIE1ha2VmaWxlIGZvciBidWlsZGluZyBUcnVzdGVkIENvbXB1dGluZyBHcm91cCdzKFRDRykgcnVudGltZSBJbnRlZ3JpdHkKKyMgTWVhc3VyZW1lbnQgQXJjaGl0ZWN0dXJlKElNQSkuCisjCisKK29iai0kKENPTkZJR19JTUEpICs9IGltYS5vCisKK2ltYS15IDo9IGltYV9mcy5vIGltYV9xdWV1ZS5vIGltYV9pbml0Lm8gaW1hX21haW4ubyBpbWFfY3J5cHRvLm8gaW1hX2FwaS5vIFwKKwkgaW1hX3BvbGljeS5vIGltYV9paW50Lm8gaW1hX2F1ZGl0Lm8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvaW1hLmggYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2NWViNTMKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL2ltYS5oCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LDIwMDYsMjAwNywyMDA4IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBSZWluZXIgU2FpbGVyIDxzYWlsZXJAd2F0c29uLmlibS5jb20+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+aV9zZWN1cml0eTsKIAlvdGhlcl9pc2VjID0gU09DS19JTk9ERShvdGhlciktPmlfc2VjdXJpdHk7CiAKQEAgLTQ4NDQsNyArNDc2NCw3IEBACiB7CiAJaW50IGVycjsKIAotCWVyciA9IHNlY29uZGFyeV9vcHMtPm5ldGxpbmtfc2VuZChzaywgc2tiKTsKKwllcnIgPSBjYXBfbmV0bGlua19zZW5kKHNrLCBza2IpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTQ4NTksNyArNDc3OSw3IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgYXZjX2F1ZGl0X2RhdGEgYWQ7CiAKLQllcnIgPSBzZWNvbmRhcnlfb3BzLT5uZXRsaW5rX3JlY3Yoc2tiLCBjYXBhYmlsaXR5KTsKKwllcnIgPSBjYXBfbmV0bGlua19yZWN2KHNrYiwgY2FwYWJpbGl0eSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNTE2NywxMSArNTA4Nyw2IEBACiAJCQkgICAgIGNoYXIgX191c2VyICpzaG1hZGRyLCBpbnQgc2htZmxnKQogewogCXUzMiBwZXJtczsKLQlpbnQgcmM7Ci0KLQlyYyA9IHNlY29uZGFyeV9vcHMtPnNobV9zaG1hdChzaHAsIHNobWFkZHIsIHNobWZsZyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlpZiAoc2htZmxnICYgU0hNX1JET05MWSkKIAkJcGVybXMgPSBTSE1fX1JFQUQ7CkBAIC01NTgxLDcgKzU0OTYsNiBAQAogCS5uZXRsaW5rX3JlY3YgPQkJCXNlbGludXhfbmV0bGlua19yZWN2LAogCiAJLmJwcm1fc2V0X2NyZWRzID0JCXNlbGludXhfYnBybV9zZXRfY3JlZHMsCi0JLmJwcm1fY2hlY2tfc2VjdXJpdHkgPQkJc2VsaW51eF9icHJtX2NoZWNrX3NlY3VyaXR5LAogCS5icHJtX2NvbW1pdHRpbmdfY3JlZHMgPQlzZWxpbnV4X2Jwcm1fY29tbWl0dGluZ19jcmVkcywKIAkuYnBybV9jb21taXR0ZWRfY3JlZHMgPQkJc2VsaW51eF9icHJtX2NvbW1pdHRlZF9jcmVkcywKIAkuYnBybV9zZWN1cmVleGVjID0JCXNlbGludXhfYnBybV9zZWN1cmVleGVjLApAQCAtNTYyMyw4ICs1NTM3LDYgQEAKIAkuaW5vZGVfZ2V0c2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9nZXRzZWN1cml0eSwKIAkuaW5vZGVfc2V0c2VjdXJpdHkgPQkJc2VsaW51eF9pbm9kZV9zZXRzZWN1cml0eSwKIAkuaW5vZGVfbGlzdHNlY3VyaXR5ID0JCXNlbGludXhfaW5vZGVfbGlzdHNlY3VyaXR5LAotCS5pbm9kZV9uZWVkX2tpbGxwcml2ID0JCXNlbGludXhfaW5vZGVfbmVlZF9raWxscHJpdiwKLQkuaW5vZGVfa2lsbHByaXYgPQkJc2VsaW51eF9pbm9kZV9raWxscHJpdiwKIAkuaW5vZGVfZ2V0c2VjaWQgPQkJc2VsaW51eF9pbm9kZV9nZXRzZWNpZCwKIAogCS5maWxlX3Blcm1pc3Npb24gPQkJc2VsaW51eF9maWxlX3Blcm1pc3Npb24sCkBAIC01NjQ0LDE3ICs1NTU2LDEyIEBACiAJLnRhc2tfY3JlYXRlID0JCQlzZWxpbnV4X3Rhc2tfY3JlYXRlLAogCS5jcmVkX2ZyZWUgPQkJCXNlbGludXhfY3JlZF9mcmVlLAogCS5jcmVkX3ByZXBhcmUgPQkJCXNlbGludXhfY3JlZF9wcmVwYXJlLAotCS5jcmVkX2NvbW1pdCA9CQkJc2VsaW51eF9jcmVkX2NvbW1pdCwKIAkua2VybmVsX2FjdF9hcyA9CQlzZWxpbnV4X2tlcm5lbF9hY3RfYXMsCiAJLmtlcm5lbF9jcmVhdGVfZmlsZXNfYXMgPQlzZWxpbnV4X2tlcm5lbF9jcmVhdGVfZmlsZXNfYXMsCi0JLnRhc2tfc2V0dWlkID0JCQlzZWxpbnV4X3Rhc2tfc2V0dWlkLAotCS50YXNrX2ZpeF9zZXR1aWQgPQkJc2VsaW51eF90YXNrX2ZpeF9zZXR1aWQsCi0JLnRhc2tfc2V0Z2lkID0JCQlzZWxpbnV4X3Rhc2tfc2V0Z2lkLAogCS50YXNrX3NldHBnaWQgPQkJCXNlbGludXhfdGFza19zZXRwZ2lkLAogCS50YXNrX2dldHBnaWQgPQkJCXNlbGludXhfdGFza19nZXRwZ2lkLAogCS50YXNrX2dldHNpZCA9CQkJc2VsaW51eF90YXNrX2dldHNpZCwKIAkudGFza19nZXRzZWNpZCA9CQlzZWxpbnV4X3Rhc2tfZ2V0c2VjaWQsCi0JLnRhc2tfc2V0Z3JvdXBzID0JCXNlbGludXhfdGFza19zZXRncm91cHMsCiAJLnRhc2tfc2V0bmljZSA9CQkJc2VsaW51eF90YXNrX3NldG5pY2UsCiAJLnRhc2tfc2V0aW9wcmlvID0JCXNlbGludXhfdGFza19zZXRpb3ByaW8sCiAJLnRhc2tfZ2V0aW9wcmlvID0JCXNlbGludXhfdGFza19nZXRpb3ByaW8sCkBAIC01NjY0LDcgKzU1NzEsNiBAQAogCS50YXNrX21vdmVtZW1vcnkgPQkJc2VsaW51eF90YXNrX21vdmVtZW1vcnksCiAJLnRhc2tfa2lsbCA9CQkJc2VsaW51eF90YXNrX2tpbGwsCiAJLnRhc2tfd2FpdCA9CQkJc2VsaW51eF90YXNrX3dhaXQsCi0JLnRhc2tfcHJjdGwgPQkJCXNlbGludXhfdGFza19wcmN0bCwKIAkudGFza190b19pbm9kZSA9CQlzZWxpbnV4X3Rhc2tfdG9faW5vZGUsCiAKIAkuaXBjX3Blcm1pc3Npb24gPQkJc2VsaW51eF9pcGNfcGVybWlzc2lvbiwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdl9wZXJtX3RvX3N0cmluZy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKaW5kZXggYzBjODg1NC4uMzFkZjFkNyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1fdG9fc3RyaW5nLmgKQEAgLTI0LDYgKzI0LDcgQEAKICAgIFNfKFNFQ0NMQVNTX0NIUl9GSUxFLCBDSFJfRklMRV9fRVhFQ01PRCwgImV4ZWNtb2QiKQogICAgU18oU0VDQ0xBU1NfQ0hSX0ZJTEUsIENIUl9GSUxFX19PUEVOLCAib3BlbiIpCiAgICBTXyhTRUNDTEFTU19CTEtfRklMRSwgQkxLX0ZJTEVfX09QRU4sICJvcGVuIikKKyAgIFNfKFNFQ0NMQVNTX1NPQ0tfRklMRSwgU09DS19GSUxFX19PUEVOLCAib3BlbiIpCiAgICBTXyhTRUNDTEFTU19GSUZPX0ZJTEUsIEZJRk9fRklMRV9fT1BFTiwgIm9wZW4iKQogICAgU18oU0VDQ0xBU1NfRkQsIEZEX19VU0UsICJ1c2UiKQogICAgU18oU0VDQ0xBU1NfVENQX1NPQ0tFVCwgVENQX1NPQ0tFVF9fQ09OTkVDVFRPLCAiY29ubmVjdHRvIikKQEAgLTE1Miw2ICsxNTMsNyBAQAogICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSwgIm5sbXNnX3dyaXRlIikKICAgIFNfKFNFQ0NMQVNTX05FVExJTktfQVVESVRfU09DS0VULCBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVMQVksICJubG1zZ19yZWxheSIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0FVRElUX1NPQ0tFVCwgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQURQUklWLCAibmxtc2dfcmVhZHByaXYiKQorICAgU18oU0VDQ0xBU1NfTkVUTElOS19BVURJVF9TT0NLRVQsIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQsICJubG1zZ190dHlfYXVkaXQiKQogICAgU18oU0VDQ0xBU1NfTkVUTElOS19JUDZGV19TT0NLRVQsIE5FVExJTktfSVA2RldfU09DS0VUX19OTE1TR19SRUFELCAibmxtc2dfcmVhZCIpCiAgICBTXyhTRUNDTEFTU19ORVRMSU5LX0lQNkZXX1NPQ0tFVCwgTkVUTElOS19JUDZGV19TT0NLRVRfX05MTVNHX1dSSVRFLCAibmxtc2dfd3JpdGUiKQogICAgU18oU0VDQ0xBU1NfQVNTT0NJQVRJT04sIEFTU09DSUFUSU9OX19TRU5EVE8sICJzZW5kdG8iKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2X3Blcm1pc3Npb25zLmggYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAppbmRleCAwYmE3OWZlLi5kNjQ1MTkyIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZfcGVybWlzc2lvbnMuaApAQCAtMTc0LDYgKzE3NCw3IEBACiAjZGVmaW5lIFNPQ0tfRklMRV9fU1dBUE9OICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDQwMDBVTAogI2RlZmluZSBTT0NLX0ZJTEVfX1FVT1RBT04gICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwVUwKICNkZWZpbmUgU09DS19GSUxFX19NT1VOVE9OICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMFVMCisjZGVmaW5lIFNPQ0tfRklMRV9fT1BFTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBVTAogI2RlZmluZSBGSUZPX0ZJTEVfX0lPQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgRklGT19GSUxFX19SRUFEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCiAjZGVmaW5lIEZJRk9fRklMRV9fV1JJVEUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTApAQCAtNzA3LDYgKzcwOCw3IEBACiAjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19XUklURSAgICAgICAgIDB4MDA4MDAwMDBVTAogI2RlZmluZSBORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVMQVkgICAgICAgICAweDAxMDAwMDAwVUwKICNkZWZpbmUgTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1JFQURQUklWICAgICAgMHgwMjAwMDAwMFVMCisjZGVmaW5lIE5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19UVFlfQVVESVQgICAgIDB4MDQwMDAwMDBVTAogI2RlZmluZSBORVRMSU5LX0lQNkZXX1NPQ0tFVF9fSU9DVEwgICAgICAgICAgICAgICAweDAwMDAwMDAxVUwKICNkZWZpbmUgTkVUTElOS19JUDZGV19TT0NLRVRfX1JFQUQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMlVMCiAjZGVmaW5lIE5FVExJTktfSVA2RldfU09DS0VUX19XUklURSAgICAgICAgICAgICAgIDB4MDAwMDAwMDRVTApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL29ianNlYy5oCmluZGV4IDNjYzQ1MTYuLmM0ZTA2MjMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9vYmpzZWMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvb2Jqc2VjLmgKQEAgLTYwLDkgKzYwLDcgQEAKIAl1MzIgZGVmX3NpZDsJCQkvKiBkZWZhdWx0IFNJRCBmb3IgbGFiZWxpbmcgKi8KIAl1MzIgbW50cG9pbnRfc2lkOwkJLyogU0VDVVJJVFlfRlNfVVNFX01OVFBPSU5UIGNvbnRleHQgZm9yIGZpbGVzICovCiAJdW5zaWduZWQgaW50IGJlaGF2aW9yOwkJLyogbGFiZWxpbmcgYmVoYXZpb3IgKi8KLQl1bnNpZ25lZCBjaGFyIGluaXRpYWxpemVkOwkvKiBpbml0aWFsaXphdGlvbiBmbGFnICovCiAJdW5zaWduZWQgY2hhciBmbGFnczsJCS8qIHdoaWNoIG1vdW50IG9wdGlvbnMgd2VyZSBzcGVjaWZpZWQgKi8KLQl1bnNpZ25lZCBjaGFyIHByb2M7CQkvKiBwcm9jIGZzICovCiAJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IGxpc3RfaGVhZCBpc2VjX2hlYWQ7CiAJc3BpbmxvY2tfdCBpc2VjX2xvY2s7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvc2VjdXJpdHkuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCmluZGV4IDcyNDQ3MzcuLjVjMzQzNGYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oCkBAIC0zNywxNSArMzcsMjMgQEAKICNkZWZpbmUgUE9MSUNZREJfVkVSU0lPTl9NQVgJUE9MSUNZREJfVkVSU0lPTl9CT1VOREFSWQogI2VuZGlmCiAKKy8qIE1hc2sgZm9yIGp1c3QgdGhlIG1vdW50IHJlbGF0ZWQgZmxhZ3MgKi8KKyNkZWZpbmUgU0VfTU5UTUFTSwkweDBmCisvKiBTdXBlciBibG9jayBzZWN1cml0eSBzdHJ1Y3QgZmxhZ3MgZm9yIG1vdW50IG9wdGlvbnMgKi8KICNkZWZpbmUgQ09OVEVYVF9NTlQJMHgwMQogI2RlZmluZSBGU0NPTlRFWFRfTU5UCTB4MDIKICNkZWZpbmUgUk9PVENPTlRFWFRfTU5UCTB4MDQKICNkZWZpbmUgREVGQ09OVEVYVF9NTlQJMHgwOAorLyogTm9uLW1vdW50IHJlbGF0ZWQgZmxhZ3MgKi8KKyNkZWZpbmUgU0VfU0JJTklUSUFMSVpFRAkweDEwCisjZGVmaW5lIFNFX1NCUFJPQwkJMHgyMAorI2RlZmluZSBTRV9TQkxBQkVMU1VQUAkweDQwCiAKICNkZWZpbmUgQ09OVEVYVF9TVFIJImNvbnRleHQ9IgogI2RlZmluZSBGU0NPTlRFWFRfU1RSCSJmc2NvbnRleHQ9IgogI2RlZmluZSBST09UQ09OVEVYVF9TVFIJInJvb3Rjb250ZXh0PSIKICNkZWZpbmUgREVGQ09OVEVYVF9TVFIJImRlZmNvbnRleHQ9IgorI2RlZmluZSBMQUJFTFNVUFBfU1RSICJzZWNsYWJlbCIKIAogc3RydWN0IG5ldGxibF9sc21fc2VjYXR0cjsKIApAQCAtODAsNyArODgsNiBAQAogI2RlZmluZSBTRUxfVkVDX01BWCAzMgogc3RydWN0IGF2X2RlY2lzaW9uIHsKIAl1MzIgYWxsb3dlZDsKLQl1MzIgZGVjaWRlZDsKIAl1MzIgYXVkaXRhbGxvdzsKIAl1MzIgYXVkaXRkZW55OwogCXUzMiBzZXFubzsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYyBiL3NlY3VyaXR5L3NlbGludXgvbmxtc2d0YWIuYwppbmRleCA0ZWQ3YmFiLi5jNjg3NWZkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L25sbXNndGFiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ubG1zZ3RhYi5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAl7IEFVRElUX1VTRVIsCQlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVMQVkgICAgfSwKIAl7IEFVRElUX1NJR05BTF9JTkZPLAlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfUkVBRCAgICAgfSwKIAl7IEFVRElUX1RUWV9HRVQsCU5FVExJTktfQVVESVRfU09DS0VUX19OTE1TR19SRUFEICAgICB9LAotCXsgQVVESVRfVFRZX1NFVCwJTkVUTElOS19BVURJVF9TT0NLRVRfX05MTVNHX1dSSVRFICAgIH0sCisJeyBBVURJVF9UVFlfU0VULAlORVRMSU5LX0FVRElUX1NPQ0tFVF9fTkxNU0dfVFRZX0FVRElUCX0sCiB9OwogCiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCmluZGV4IDAxZWM2ZDIuLmQzYzhiOTggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYwpAQCAtNTk1LDcgKzU5NSw3IEBACiAKIAlsZW5ndGggPSBzY25wcmludGYoYnVmLCBTSU1QTEVfVFJBTlNBQ1RJT05fTElNSVQsCiAJCQkgICIleCAleCAleCAleCAldSIsCi0JCQkgIGF2ZC5hbGxvd2VkLCBhdmQuZGVjaWRlZCwKKwkJCSAgYXZkLmFsbG93ZWQsIDB4ZmZmZmZmZmYsCiAJCQkgIGF2ZC5hdWRpdGFsbG93LCBhdmQuYXVkaXRkZW55LAogCQkJICBhdmQuc2Vxbm8pOwogb3V0MjoKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwppbmRleCBjNjVlNGZlLi5kZWVlYzZjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCkBAIC00MDcsNyArNDA3LDYgQEAKIAkgKiBJbml0aWFsaXplIHRoZSBhY2Nlc3MgdmVjdG9ycyB0byB0aGUgZGVmYXVsdCB2YWx1ZXMuCiAJICovCiAJYXZkLT5hbGxvd2VkID0gMDsKLQlhdmQtPmRlY2lkZWQgPSAweGZmZmZmZmZmOwogCWF2ZC0+YXVkaXRhbGxvdyA9IDA7CiAJYXZkLT5hdWRpdGRlbnkgPSAweGZmZmZmZmZmOwogCWF2ZC0+c2Vxbm8gPSBsYXRlc3RfZ3JhbnRpbmc7CkBAIC03NDMsNyArNzQyLDYgQEAKIAogCWlmICghc3NfaW5pdGlhbGl6ZWQpIHsKIAkJYXZkLT5hbGxvd2VkID0gMHhmZmZmZmZmZjsKLQkJYXZkLT5kZWNpZGVkID0gMHhmZmZmZmZmZjsKIAkJYXZkLT5hdWRpdGFsbG93ID0gMDsKIAkJYXZkLT5hdWRpdGRlbnkgPSAweGZmZmZmZmZmOwogCQlhdmQtPnNlcW5vID0gbGF0ZXN0X2dyYW50aW5nOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfYWNjZXNzLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYwppbmRleCAyZTBiODNlLi5jZmExOWNhIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19hY2Nlc3MuYwpAQCAtMTYyLDggKzE2Miw4IEBACiAKIC8qKgogICogc21rX2N1cmFjYyAtIGRldGVybWluZSBpZiBjdXJyZW50IGhhcyBhIHNwZWNpZmljIGFjY2VzcyB0byBhbiBvYmplY3QKLSAqIEBvYmplY3RfbGFiZWw6IGEgcG9pbnRlciB0byB0aGUgb2JqZWN0J3MgU21hY2sgbGFiZWwKLSAqIEByZXF1ZXN0OiB0aGUgYWNjZXNzIHJlcXVlc3RlZCwgaW4gIk1BWSIgZm9ybWF0CisgKiBAb2JqX2xhYmVsOiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCdzIFNtYWNrIGxhYmVsCisgKiBAbW9kZTogdGhlIGFjY2VzcyByZXF1ZXN0ZWQsIGluICJNQVkiIGZvcm1hdAogICoKICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBjdXJyZW50IHN1YmplY3QgbGFiZWwvb2JqZWN0IGxhYmVsIHBhaXIKICAqIGluIHRoZSBhY2Nlc3MgcnVsZSBsaXN0IGFuZCByZXR1cm5zIDAgaWYgdGhlIGFjY2VzcyBpcyBwZXJtaXR0ZWQsCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IGU3ZGVkMTMuLjg0YjYyYjUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC05MSw2ICs5MSw3IEBACiAvKioKICAqIHNtYWNrX3B0cmFjZV9tYXlfYWNjZXNzIC0gU21hY2sgYXBwcm92YWwgb24gUFRSQUNFX0FUVEFDSAogICogQGN0cDogY2hpbGQgdGFzayBwb2ludGVyCisgKiBAbW9kZTogcHRyYWNlIGF0dGFjaG1lbnQgbW9kZQogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgT0ssIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKgpAQCAtMjAzLDkgKzIwNCw4IEBACiAKIC8qKgogICogc21hY2tfc2JfY29weV9kYXRhIC0gY29weSBtb3VudCBvcHRpb25zIGRhdGEgZm9yIHByb2Nlc3NpbmcKLSAqIEB0eXBlOiBmaWxlIHN5c3RlbSB0eXBlCiAgKiBAb3JpZzogd2hlcmUgdG8gc3RhcnQKLSAqIEBzbWFja29wdHMKKyAqIEBzbWFja29wdHM6IG1vdW50IG9wdGlvbnMgc3RyaW5nCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVOT01FTSBvbiBlcnJvci4KICAqCkBAIC0zMzEsNyArMzMxLDcgQEAKIC8qKgogICogc21hY2tfc2JfbW91bnQgLSBTbWFjayBjaGVjayBmb3IgbW91bnRpbmcKICAqIEBkZXZfbmFtZTogdW51c2VkCi0gKiBAbmQ6IG1vdW50IHBvaW50CisgKiBAcGF0aDogbW91bnQgcG9pbnQKICAqIEB0eXBlOiB1bnVzZWQKICAqIEBmbGFnczogdW51c2VkCiAgKiBAZGF0YTogdW51c2VkCkBAIC0zNzAsNyArMzcwLDcgQEAKIAogLyoqCiAgKiBzbWFja19pbm9kZV9hbGxvY19zZWN1cml0eSAtIGFsbG9jYXRlIGFuIGlub2RlIGJsb2IKLSAqIEBpbm9kZSAtIHRoZSBpbm9kZSBpbiBuZWVkIG9mIGEgYmxvYgorICogQGlub2RlOiB0aGUgaW5vZGUgaW4gbmVlZCBvZiBhIGJsb2IKICAqCiAgKiBSZXR1cm5zIDAgaWYgaXQgZ2V0cyBhIGJsb2IsIC1FTk9NRU0gb3RoZXJ3aXNlCiAgKi8KQEAgLTM4NCw3ICszODQsNyBAQAogCiAvKioKICAqIHNtYWNrX2lub2RlX2ZyZWVfc2VjdXJpdHkgLSBmcmVlIGFuIGlub2RlIGJsb2IKLSAqIEBpbm9kZSAtIHRoZSBpbm9kZSB3aXRoIGEgYmxvYgorICogQGlub2RlOiB0aGUgaW5vZGUgd2l0aCBhIGJsb2IKICAqCiAgKiBDbGVhcnMgdGhlIGJsb2IgcG9pbnRlciBpbiBpbm9kZQogICovCkBAIC01MzgsNyArNTM4LDYgQEAKICAqIHNtYWNrX2lub2RlX3Blcm1pc3Npb24gLSBTbWFjayB2ZXJzaW9uIG9mIHBlcm1pc3Npb24oKQogICogQGlub2RlOiB0aGUgaW5vZGUgaW4gcXVlc3Rpb24KICAqIEBtYXNrOiB0aGUgYWNjZXNzIHJlcXVlc3RlZAotICogQG5kOiB1bnVzZWQKICAqCiAgKiBUaGlzIGlzIHRoZSBpbXBvcnRhbnQgU21hY2sgaG9vay4KICAqCkBAIC03MDEsOCArNzAwLDcgQEAKICAqIEBpbm9kZTogdGhlIG9iamVjdAogICogQG5hbWU6IGF0dHJpYnV0ZSBuYW1lCiAgKiBAYnVmZmVyOiB3aGVyZSB0byBwdXQgdGhlIHJlc3VsdAotICogQHNpemU6IHNpemUgb2YgdGhlIGJ1ZmZlcgotICogQGVycjogdW51c2VkCisgKiBAYWxsb2M6IHVudXNlZAogICoKICAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSBvciBhbiBlcnJvciBjb2RlCiAgKi8KQEAgLTg2NCw3ICs4NjIsNyBAQAogLyoqCiAgKiBzbWFja19maWxlX2xvY2sgLSBTbWFjayBjaGVjayBvbiBmaWxlIGxvY2tpbmcKICAqIEBmaWxlOiB0aGUgb2JqZWN0Ci0gKiBAY21kIHVudXNlZAorICogQGNtZDogdW51c2VkCiAgKgogICogUmV0dXJucyAwIGlmIGN1cnJlbnQgaGFzIHdyaXRlIGFjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKICAqLwpAQCAtMTAwMyw4ICsxMDAxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIGNvbW1pdCBuZXcgY3JlZGVudGlhbHMKKy8qKgorICogc21hY2tfY3JlZF9jb21taXQgLSBjb21taXQgbmV3IGNyZWRlbnRpYWxzCiAgKiBAbmV3OiB0aGUgbmV3IGNyZWRlbnRpYWxzCiAgKiBAb2xkOiB0aGUgb3JpZ2luYWwgY3JlZGVudGlhbHMKICAqLwpAQCAtMTAxNCw4ICsxMDEyLDggQEAKIAogLyoqCiAgKiBzbWFja19rZXJuZWxfYWN0X2FzIC0gU2V0IHRoZSBzdWJqZWN0aXZlIGNvbnRleHQgaW4gYSBzZXQgb2YgY3JlZGVudGlhbHMKLSAqIEBuZXcgcG9pbnRzIHRvIHRoZSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gYmUgbW9kaWZpZWQuCi0gKiBAc2VjaWQgc3BlY2lmaWVzIHRoZSBzZWN1cml0eSBJRCB0byBiZSBzZXQKKyAqIEBuZXc6IHBvaW50cyB0byB0aGUgc2V0IG9mIGNyZWRlbnRpYWxzIHRvIGJlIG1vZGlmaWVkLgorICogQHNlY2lkOiBzcGVjaWZpZXMgdGhlIHNlY3VyaXR5IElEIHRvIGJlIHNldAogICoKICAqIFNldCB0aGUgc2VjdXJpdHkgZGF0YSBmb3IgYSBrZXJuZWwgc2VydmljZS4KICAqLwpAQCAtMTAzMiw4ICsxMDMwLDggQEAKIAogLyoqCiAgKiBzbWFja19rZXJuZWxfY3JlYXRlX2ZpbGVzX2FzIC0gU2V0IHRoZSBmaWxlIGNyZWF0aW9uIGxhYmVsIGluIGEgc2V0IG9mIGNyZWRzCi0gKiBAbmV3IHBvaW50cyB0byB0aGUgc2V0IG9mIGNyZWRlbnRpYWxzIHRvIGJlIG1vZGlmaWVkCi0gKiBAaW5vZGUgcG9pbnRzIHRvIHRoZSBpbm9kZSB0byB1c2UgYXMgYSByZWZlcmVuY2UKKyAqIEBuZXc6IHBvaW50cyB0byB0aGUgc2V0IG9mIGNyZWRlbnRpYWxzIHRvIGJlIG1vZGlmaWVkCisgKiBAaW5vZGU6IHBvaW50cyB0byB0aGUgaW5vZGUgdG8gdXNlIGFzIGEgcmVmZXJlbmNlCiAgKgogICogU2V0IHRoZSBmaWxlIGNyZWF0aW9uIGNvbnRleHQgaW4gYSBzZXQgb2YgY3JlZGVudGlhbHMgdG8gdGhlIHNhbWUKICAqIGFzIHRoZSBvYmplY3RpdmUgY29udGV4dCBvZiB0aGUgc3BlY2lmaWVkIGlub2RlCkBAIC0xMjQyLDcgKzEyNDAsNyBAQAogLyoqCiAgKiBzbWFja190YXNrX3RvX2lub2RlIC0gY29weSB0YXNrIHNtYWNrIGludG8gdGhlIGlub2RlIGJsb2IKICAqIEBwOiB0YXNrIHRvIGNvcHkgZnJvbQotICogaW5vZGU6IGlub2RlIHRvIGNvcHkgdG8KKyAqIEBpbm9kZTogaW5vZGUgdG8gY29weSB0bwogICoKICAqIFNldHMgdGhlIHNtYWNrIHBvaW50ZXIgaW4gdGhlIGlub2RlIHNlY3VyaXR5IGJsb2IKICAqLwpAQCAtMTI2MCw3ICsxMjU4LDcgQEAKICAqIHNtYWNrX3NrX2FsbG9jX3NlY3VyaXR5IC0gQWxsb2NhdGUgYSBzb2NrZXQgYmxvYgogICogQHNrOiB0aGUgc29ja2V0CiAgKiBAZmFtaWx5OiB1bnVzZWQKLSAqIEBwcmlvcml0eTogbWVtb3J5IGFsbG9jYXRpb24gcHJpb3JpdHkKKyAqIEBnZnBfZmxhZ3M6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKgogICogQXNzaWduIFNtYWNrIHBvaW50ZXJzIHRvIGN1cnJlbnQKICAqCkBAIC0xOTc0LDcgKzE5NzIsNyBAQAogCiAvKioKICAqIHNtYWNrX2lwY19nZXRzZWNpZCAtIEV4dHJhY3Qgc21hY2sgc2VjdXJpdHkgaWQKLSAqIEBpcGNwOiB0aGUgb2JqZWN0IHBlcm1pc3Npb25zCisgKiBAaXBwOiB0aGUgb2JqZWN0IHBlcm1pc3Npb25zCiAgKiBAc2VjaWQ6IHdoZXJlIHJlc3VsdCB3aWxsIGJlIHNhdmVkCiAgKi8KIHN0YXRpYyB2b2lkIHNtYWNrX2lwY19nZXRzZWNpZChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBwLCB1MzIgKnNlY2lkKQpAQCAtMjI1MSw3ICsyMjQ5LDcgQEAKIC8qKgogICogc21hY2tfc29ja2V0X3NlbmRtc2cgLSBTbWFjayBjaGVjayBiYXNlZCBvbiBkZXN0aW5hdGlvbiBob3N0CiAgKiBAc29jazogdGhlIHNvY2tldAotICogQG1zZ2hkcjogdGhlIG1lc3NhZ2UKKyAqIEBtc2c6IHRoZSBtZXNzYWdlCiAgKiBAc2l6ZTogdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UKICAqCiAgKiBSZXR1cm4gMCBpZiB0aGUgY3VycmVudCBzdWJqZWN0IGNhbiB3cml0ZSB0byB0aGUgZGVzdGluYXRpb24KQEAgLTIyOTIsOCArMjI5MCw3IEBACiAKIAogLyoqCi0gKiBzbWFja19mcm9tX3NlY2F0dHIgLSBDb252ZXJ0IGEgbmV0bGFiZWwgYXR0ci5tbHMubHZsL2F0dHIubWxzLmNhdAotICogCXBhaXIgdG8gc21hY2sKKyAqIHNtYWNrX2Zyb21fc2VjYXR0ciAtIENvbnZlcnQgYSBuZXRsYWJlbCBhdHRyLm1scy5sdmwvYXR0ci5tbHMuY2F0IHBhaXIgdG8gc21hY2sKICAqIEBzYXA6IG5ldGxhYmVsIHNlY2F0dHIKICAqIEBzaXA6IHdoZXJlIHRvIHB1dCB0aGUgcmVzdWx0CiAgKgpAQCAtMjQxNCw3ICsyNDExLDcgQEAKICAqIEBzb2NrOiB0aGUgc29ja2V0CiAgKiBAb3B0dmFsOiB1c2VyJ3MgZGVzdGluYXRpb24KICAqIEBvcHRsZW46IHNpemUgdGhlcmVvZgotICogQGxlbjogbWF4IHRoZXJlb2UKKyAqIEBsZW46IG1heCB0aGVyZW9mCiAgKgogICogcmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCiAgKi8KQEAgLTI3NDksNyArMjc0Niw3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KIAotLyoKKy8qKgogICogc21hY2tfc2VjaWRfdG9fc2VjY3R4IC0gcmV0dXJuIHRoZSBzbWFjayBsYWJlbCBmb3IgYSBzZWNpZAogICogQHNlY2lkOiBpbmNvbWluZyBpbnRlZ2VyCiAgKiBAc2VjZGF0YTogZGVzdGluYXRpb24KQEAgLTI3NjYsNyArMjc2Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCisvKioKICAqIHNtYWNrX3NlY2N0eF90b19zZWNpZCAtIHJldHVybiB0aGUgc2VjaWQgZm9yIGEgc21hY2sgbGFiZWwKICAqIEBzZWNkYXRhOiBzbWFjayBsYWJlbAogICogQHNlY2xlbjogaG93IGxvbmcgcmVzdWx0IGlzCkBAIC0yNzgwLDExICsyNzc3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCisvKioKICAqIHNtYWNrX3JlbGVhc2Vfc2VjY3R4IC0gZG9uJ3QgZG8gYW55dGhpbmcuCi0gKiBAa2V5X3JlZjogdW51c2VkCi0gKiBAY29udGV4dDogdW51c2VkCi0gKiBAcGVybTogdW51c2VkCisgKiBAc2VjZGF0YTogdW51c2VkCisgKiBAc2VjbGVuOiB1bnVzZWQKICAqCiAgKiBFeGlzdHMgdG8gbWFrZSBzdXJlIG5vdGhpbmcgZ2V0cyBkb25lLCBhbmQgcHJvcGVybHkKICAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tmcy5jCmluZGV4IDUxZjBlZmMuLmExYjU3ZTQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrZnMuYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja2ZzLmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9sb2FkIC0gd3JpdGUoKSBmb3IgL3NtYWNrL2xvYWQKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0IC0gbXVzdCBiZSAwCkBAIC00MDIsNiArNDAyLDcgQEAKIAogLyoqCiAgKiBzbWtfdW5sYmxfYW1iaWVudCAtIGluaXRpYWxpemUgdGhlIHVubGFiZWxlZCBkb21haW4KKyAqIEBvbGRhbWJpZW50OiBwcmV2aW91cyBkb21haW4gc3RyaW5nCiAgKi8KIHN0YXRpYyB2b2lkIHNta191bmxibF9hbWJpZW50KGNoYXIgKm9sZGFtYmllbnQpCiB7CkBAIC01MTMsNyArNTE0LDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfY2lwc28gLSB3cml0ZSgpIGZvciAvc21hY2svY2lwc28KLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC03MzMsNyArNzM0LDcgQEAKIAogLyoqCiAgKiBzbWtfd3JpdGVfbmV0bGJsYWRkciAtIHdyaXRlKCkgZm9yIC9zbWFjay9uZXRsYWJlbAotICogQGZpbHA6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKKyAqIEBmaWxlOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCiAgKiBAYnVmOiB3aGVyZSB0byBnZXQgdGhlIGRhdGEgZnJvbQogICogQGNvdW50OiBieXRlcyBzZW50CiAgKiBAcHBvczogd2hlcmUgdG8gc3RhcnQKQEAgLTg4NCw3ICs4ODUsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9kb2kgLSB3cml0ZSgpIGZvciAvc21hY2svZG9pCi0gKiBAZmlscDogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAorICogQGZpbGU6IGZpbGUgcG9pbnRlciwgbm90IGFjdHVhbGx5IHVzZWQKICAqIEBidWY6IHdoZXJlIHRvIGdldCB0aGUgZGF0YSBmcm9tCiAgKiBAY291bnQ6IGJ5dGVzIHNlbnQKICAqIEBwcG9zOiB3aGVyZSB0byBzdGFydApAQCAtOTQ5LDcgKzk1MCw3IEBACiAKIC8qKgogICogc21rX3dyaXRlX2RpcmVjdCAtIHdyaXRlKCkgZm9yIC9zbWFjay9kaXJlY3QKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC0xMDI0LDcgKzEwMjUsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9hbWJpZW50IC0gd3JpdGUoKSBmb3IgL3NtYWNrL2FtYmllbnQKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CkBAIC0xMDk5LDcgKzExMDAsNyBAQAogCiAvKioKICAqIHNta193cml0ZV9vbmx5Y2FwIC0gd3JpdGUoKSBmb3IgL3NtYWNrL29ubHljYXAKLSAqIEBmaWxwOiBmaWxlIHBvaW50ZXIsIG5vdCBhY3R1YWxseSB1c2VkCisgKiBAZmlsZTogZmlsZSBwb2ludGVyLCBub3QgYWN0dWFsbHkgdXNlZAogICogQGJ1Zjogd2hlcmUgdG8gZ2V0IHRoZSBkYXRhIGZyb20KICAqIEBjb3VudDogYnl0ZXMgc2VudAogICogQHBwb3M6IHdoZXJlIHRvIHN0YXJ0CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vS2NvbmZpZyBiL3NlY3VyaXR5L3RvbW95by9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZjM4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vS2NvbmZpZwpAQCAtMCwwICsxLDExIEBACitjb25maWcgU0VDVVJJVFlfVE9NT1lPCisJYm9vbCAiVE9NT1lPIExpbnV4IFN1cHBvcnQiCisJZGVwZW5kcyBvbiBTRUNVUklUWQorCXNlbGVjdCBTRUNVUklUWUZTCisJc2VsZWN0IFNFQ1VSSVRZX1BBVEgKKwlkZWZhdWx0IG4KKwloZWxwCisJICBUaGlzIHNlbGVjdHMgVE9NT1lPIExpbnV4LCBwYXRobmFtZS1iYXNlZCBhY2Nlc3MgY29udHJvbC4KKwkgIFJlcXVpcmVkIHVzZXJzcGFjZSB0b29scyBhbmQgZnVydGhlciBpbmZvcm1hdGlvbiBtYXkgYmUKKwkgIGZvdW5kIGF0IDxodHRwOi8vdG9tb3lvLnNvdXJjZWZvcmdlLmpwLz4uCisJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL01ha2VmaWxlIGIvc2VjdXJpdHkvdG9tb3lvL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwY2NkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkgPSBjb21tb24ubyByZWFscGF0aC5vIHRvbW95by5vIGRvbWFpbi5vIGZpbGUubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyY2VhNjUKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKQEAgLTAsMCArMSwyMjA2IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jCisgKgorICogQ29tbW9uIGZ1bmN0aW9ucyBmb3IgVE9NT1lPLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgorICoKKyAqIFZlcnNpb246IDIuMi4wLXByZSAgIDIwMDkvMDIvMDEKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlICJyZWFscGF0aC5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInRvbW95by5oIgorCisvKiBIYXMgbG9hZGluZyBwb2xpY3kgZG9uZT8gKi8KK2Jvb2wgdG9tb3lvX3BvbGljeV9sb2FkZWQ7CisKKy8qIFN0cmluZyB0YWJsZSBmb3IgZnVuY3Rpb25hbGl0eSB0aGF0IHRha2VzIDQgbW9kZXMuICovCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX21vZGVfNFs0XSA9IHsKKwkiZGlzYWJsZWQiLCAibGVhcm5pbmciLCAicGVybWlzc2l2ZSIsICJlbmZvcmNpbmciCit9OworLyogU3RyaW5nIHRhYmxlIGZvciBmdW5jdGlvbmFsaXR5IHRoYXQgdGFrZXMgMiBtb2Rlcy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fbW9kZV8yWzRdID0geworCSJkaXNhYmxlZCIsICJlbmFibGVkIiwgImVuYWJsZWQiLCAiZW5hYmxlZCIKK307CisKKy8qIFRhYmxlIGZvciBwcm9maWxlLiAqLworc3RhdGljIHN0cnVjdCB7CisJY29uc3QgY2hhciAqa2V5d29yZDsKKwl1bnNpZ25lZCBpbnQgY3VycmVudF92YWx1ZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgbWF4X3ZhbHVlOworfSB0b21veW9fY29udHJvbF9hcnJheVtUT01PWU9fTUFYX0NPTlRST0xfSU5ERVhdID0geworCVtUT01PWU9fTUFDX0ZPUl9GSUxFXSAgICAgPSB7ICJNQUNfRk9SX0ZJTEUiLCAgICAgICAgMCwgICAgICAgMyB9LAorCVtUT01PWU9fTUFYX0FDQ0VQVF9FTlRSWV0gPSB7ICJNQVhfQUNDRVBUX0VOVFJZIiwgMjA0OCwgSU5UX01BWCB9LAorCVtUT01PWU9fVkVSQk9TRV0gICAgICAgICAgPSB7ICJUT01PWU9fVkVSQk9TRSIsICAgICAgMSwgICAgICAgMSB9LAorfTsKKworLyogUHJvZmlsZSB0YWJsZS4gTWVtb3J5IGlzIGFsbG9jYXRlZCBhcyBuZWVkZWQuICovCitzdGF0aWMgc3RydWN0IHRvbW95b19wcm9maWxlIHsKKwl1bnNpZ25lZCBpbnQgdmFsdWVbVE9NT1lPX01BWF9DT05UUk9MX0lOREVYXTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqY29tbWVudDsKK30gKnRvbW95b19wcm9maWxlX3B0cltUT01PWU9fTUFYX1BST0ZJTEVTXTsKKworLyogUGVybWl0IHBvbGljeSBtYW5hZ2VtZW50IGJ5IG5vbi1yb290IHVzZXI/ICovCitzdGF0aWMgYm9vbCB0b21veW9fbWFuYWdlX2J5X25vbl9yb290OworCisvKiBVdGlsaXR5IGZ1bmN0aW9ucy4gKi8KKworLyogT3BlbiBvcGVyYXRpb24gZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLworc3RhdGljIGludCB0b21veW9fb3Blbl9jb250cm9sKGNvbnN0IHU4IHR5cGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKKy8qIENsb3NlIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLiAqLworc3RhdGljIGludCB0b21veW9fY2xvc2VfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSk7CisvKiBSZWFkIG9wZXJhdGlvbiBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgICAgICAgY29uc3QgaW50IGJ1ZmZlcl9sZW4pOworLyogV3JpdGUgb3BlcmF0aW9uIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJY29uc3QgaW50IGJ1ZmZlcl9sZW4pOworCisvKioKKyAqIHRvbW95b19pc19ieXRlX3JhbmdlIC0gQ2hlY2sgd2hldGhlciB0aGUgc3RyaW5nIGlzYSBcb29vIHN0eWxlIG9jdGFsIHZhbHVlLgorICoKKyAqIEBzdHI6IFBvaW50ZXIgdG8gdGhlIHN0cmluZy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQHN0ciBpcyBhIFxvb28gc3R5bGUgb2N0YWwgdmFsdWUsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUT01PWU8gdXNlcyBcb29vIHN0eWxlIHJlcHJlc2VudGF0aW9uIGZvciAweDAxIC0gMHgyMCBhbmQgMHg3RiAtIDB4RkYuCisgKiBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoYXQgXG9vbyBpcyBpbiB2YWxpZCByYW5nZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc19ieXRlX3JhbmdlKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlyZXR1cm4gKnN0ciA+PSAnMCcgJiYgKnN0cisrIDw9ICczJyAmJgorCQkqc3RyID49ICcwJyAmJiAqc3RyKysgPD0gJzcnICYmCisJCSpzdHIgPj0gJzAnICYmICpzdHIgPD0gJzcnOworfQorCisvKioKKyAqIHRvbW95b19pc19hbHBoYWJldF9jaGFyIC0gQ2hlY2sgd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIGFuIGFscGhhYmV0LgorICoKKyAqIEBjOiBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAYyBpcyBhbiBhbHBoYWJldCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIHRvbW95b19pc19hbHBoYWJldF9jaGFyKGNvbnN0IGNoYXIgYykKK3sKKwlyZXR1cm4gKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnYScgJiYgYyA8PSAneicpOworfQorCisvKioKKyAqIHRvbW95b19tYWtlX2J5dGUgLSBNYWtlIGJ5dGUgdmFsdWUgZnJvbSB0aHJlZSBvY3RhbCBjaGFyYWN0ZXJzLgorICoKKyAqIEBjMTogVGhlIGZpcnN0IGNoYXJhY3Rlci4KKyAqIEBjMjogVGhlIHNlY29uZCBjaGFyYWN0ZXIuCisgKiBAYzM6IFRoZSB0aGlyZCBjaGFyYWN0ZXIuCisgKgorICogUmV0dXJucyBieXRlIHZhbHVlLgorICovCitzdGF0aWMgaW5saW5lIHU4IHRvbW95b19tYWtlX2J5dGUoY29uc3QgdTggYzEsIGNvbnN0IHU4IGMyLCBjb25zdCB1OCBjMykKK3sKKwlyZXR1cm4gKChjMSAtICcwJykgPDwgNikgKyAoKGMyIC0gJzAnKSA8PCAzKSArIChjMyAtICcwJyk7Cit9CisKKy8qKgorICogdG9tb3lvX3N0cl9zdGFydHMgLSBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIGtleXdvcmQuCisgKgorICogQHNyYzogIFBvaW50ZXIgdG8gcG9pbnRlciB0byB0aGUgc3RyaW5nLgorICogQGZpbmQ6IFBvaW50ZXIgdG8gdGhlIGtleXdvcmQuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBzcmMgc3RhcnRzIHdpdGggQGZpbmQsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBUaGUgQHNyYyBpcyB1cGRhdGVkIHRvIHBvaW50IHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIEBmaW5kCisgKiBpZiBAc3JjIHN0YXJ0cyB3aXRoIEBmaW5kLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fc3RyX3N0YXJ0cyhjaGFyICoqc3JjLCBjb25zdCBjaGFyICpmaW5kKQoreworCWNvbnN0IGludCBsZW4gPSBzdHJsZW4oZmluZCk7CisJY2hhciAqdG1wID0gKnNyYzsKKworCWlmIChzdHJuY21wKHRtcCwgZmluZCwgbGVuKSkKKwkJcmV0dXJuIGZhbHNlOworCXRtcCArPSBsZW47CisJKnNyYyA9IHRtcDsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiB0b21veW9fbm9ybWFsaXplX2xpbmUgLSBGb3JtYXQgc3RyaW5nLgorICoKKyAqIEBidWZmZXI6IFRoZSBsaW5lIHRvIG5vcm1hbGl6ZS4KKyAqCisgKiBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlcyBhcmUgcmVtb3ZlZC4KKyAqIE11bHRpcGxlIHdoaXRlc3BhY2VzIGFyZSBwYWNrZWQgaW50byBzaW5nbGUgc3BhY2UuCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCitzdGF0aWMgdm9pZCB0b21veW9fbm9ybWFsaXplX2xpbmUodW5zaWduZWQgY2hhciAqYnVmZmVyKQoreworCXVuc2lnbmVkIGNoYXIgKnNwID0gYnVmZmVyOworCXVuc2lnbmVkIGNoYXIgKmRwID0gYnVmZmVyOworCWJvb2wgZmlyc3QgPSB0cnVlOworCisJd2hpbGUgKHRvbW95b19pc19pbnZhbGlkKCpzcCkpCisJCXNwKys7CisJd2hpbGUgKCpzcCkgeworCQlpZiAoIWZpcnN0KQorCQkJKmRwKysgPSAnICc7CisJCWZpcnN0ID0gZmFsc2U7CisJCXdoaWxlICh0b21veW9faXNfdmFsaWQoKnNwKSkKKwkJCSpkcCsrID0gKnNwKys7CisJCXdoaWxlICh0b21veW9faXNfaW52YWxpZCgqc3ApKQorCQkJc3ArKzsKKwl9CisJKmRwID0gJ1wwJzsKK30KKworLyoqCisgKiB0b21veW9faXNfY29ycmVjdF9wYXRoIC0gVmFsaWRhdGUgYSBwYXRobmFtZS4KKyAqIEBmaWxlbmFtZTogICAgIFRoZSBwYXRobmFtZSB0byBjaGVjay4KKyAqIEBzdGFydF90eXBlOiAgIFNob3VsZCB0aGUgcGF0aG5hbWUgc3RhcnQgd2l0aCAnLyc/CisgKiAgICAgICAgICAgICAgICAxID0gbXVzdCAvIC0xID0gbXVzdCBub3QgLyAwID0gZG9uJ3QgY2FyZQorICogQHBhdHRlcm5fdHlwZTogQ2FuIHRoZSBwYXRobmFtZSBjb250YWluIGEgd2lsZGNhcmQ/CisgKiAgICAgICAgICAgICAgICAxID0gbXVzdCAvIC0xID0gbXVzdCBub3QgLyAwID0gZG9uJ3QgY2FyZQorICogQGVuZF90eXBlOiAgICAgU2hvdWxkIHRoZSBwYXRobmFtZSBlbmQgd2l0aCAnLyc/CisgKiAgICAgICAgICAgICAgICAxID0gbXVzdCAvIC0xID0gbXVzdCBub3QgLyAwID0gZG9uJ3QgY2FyZQorICogQGZ1bmN0aW9uOiAgICAgVGhlIG5hbWUgb2YgZnVuY3Rpb24gY2FsbGluZyBtZS4KKyAqCisgKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlbmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMuCisgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19pc19jb3JyZWN0X3BhdGgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHM4IHN0YXJ0X3R5cGUsCisJCQkgICAgY29uc3QgczggcGF0dGVybl90eXBlLCBjb25zdCBzOCBlbmRfdHlwZSwKKwkJCSAgICBjb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwlib29sIGNvbnRhaW5zX3BhdHRlcm4gPSBmYWxzZTsKKwl1bnNpZ25lZCBjaGFyIGM7CisJdW5zaWduZWQgY2hhciBkOworCXVuc2lnbmVkIGNoYXIgZTsKKwljb25zdCBjaGFyICpvcmlnaW5hbF9maWxlbmFtZSA9IGZpbGVuYW1lOworCisJaWYgKCFmaWxlbmFtZSkKKwkJZ290byBvdXQ7CisJYyA9ICpmaWxlbmFtZTsKKwlpZiAoc3RhcnRfdHlwZSA9PSAxKSB7IC8qIE11c3Qgc3RhcnQgd2l0aCAnLycgKi8KKwkJaWYgKGMgIT0gJy8nKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChzdGFydF90eXBlID09IC0xKSB7IC8qIE11c3Qgbm90IHN0YXJ0IHdpdGggJy8nICovCisJCWlmIChjID09ICcvJykKKwkJCWdvdG8gb3V0OworCX0KKwlpZiAoYykKKwkJYyA9ICooZmlsZW5hbWUgKyBzdHJsZW4oZmlsZW5hbWUpIC0gMSk7CisJaWYgKGVuZF90eXBlID09IDEpIHsgLyogTXVzdCBlbmQgd2l0aCAnLycgKi8KKwkJaWYgKGMgIT0gJy8nKQorCQkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChlbmRfdHlwZSA9PSAtMSkgeyAvKiBNdXN0IG5vdCBlbmQgd2l0aCAnLycgKi8KKwkJaWYgKGMgPT0gJy8nKQorCQkJZ290byBvdXQ7CisJfQorCXdoaWxlICgoYyA9ICpmaWxlbmFtZSsrKSAhPSAnXDAnKSB7CisJCWlmIChjID09ICdcXCcpIHsKKwkJCXN3aXRjaCAoKGMgPSAqZmlsZW5hbWUrKykpIHsKKwkJCWNhc2UgJ1xcJzogIC8qICJcXCIgKi8KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyQnOiAgIC8qICJcJCIgKi8KKwkJCWNhc2UgJysnOiAgIC8qICJcKyIgKi8KKwkJCWNhc2UgJz8nOiAgIC8qICJcPyIgKi8KKwkJCWNhc2UgJyonOiAgIC8qICJcKiIgKi8KKwkJCWNhc2UgJ0AnOiAgIC8qICJcQCIgKi8KKwkJCWNhc2UgJ3gnOiAgIC8qICJceCIgKi8KKwkJCWNhc2UgJ1gnOiAgIC8qICJcWCIgKi8KKwkJCWNhc2UgJ2EnOiAgIC8qICJcYSIgKi8KKwkJCWNhc2UgJ0EnOiAgIC8qICJcQSIgKi8KKwkJCWNhc2UgJy0nOiAgIC8qICJcLSIgKi8KKwkJCQlpZiAocGF0dGVybl90eXBlID09IC0xKQorCQkJCQlicmVhazsgLyogTXVzdCBub3QgY29udGFpbiBwYXR0ZXJuICovCisJCQkJY29udGFpbnNfcGF0dGVybiA9IHRydWU7CisJCQkJY29udGludWU7CisJCQljYXNlICcwJzogICAvKiAiXG9vbyIgKi8KKwkJCWNhc2UgJzEnOgorCQkJY2FzZSAnMic6CisJCQljYXNlICczJzoKKwkJCQlkID0gKmZpbGVuYW1lKys7CisJCQkJaWYgKGQgPCAnMCcgfHwgZCA+ICc3JykKKwkJCQkJYnJlYWs7CisJCQkJZSA9ICpmaWxlbmFtZSsrOworCQkJCWlmIChlIDwgJzAnIHx8IGUgPiAnNycpCisJCQkJCWJyZWFrOworCQkJCWMgPSB0b21veW9fbWFrZV9ieXRlKGMsIGQsIGUpOworCQkJCWlmICh0b21veW9faXNfaW52YWxpZChjKSkKKwkJCQkJY29udGludWU7IC8qIHBhdHRlcm4gaXMgbm90IFwwMDAgKi8KKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKSB7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlpZiAocGF0dGVybl90eXBlID09IDEpIHsgLyogTXVzdCBjb250YWluIHBhdHRlcm4gKi8KKwkJaWYgKCFjb250YWluc19wYXR0ZXJuKQorCQkJZ290byBvdXQ7CisJfQorCXJldHVybiB0cnVlOworIG91dDoKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgcGF0aG5hbWUgJyVzJ1xuIiwgZnVuY3Rpb24sCisJICAgICAgIG9yaWdpbmFsX2ZpbGVuYW1lKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZG9tYWlubmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMuCisgKiBAZG9tYWlubmFtZTogICBUaGUgZG9tYWlubmFtZSB0byBjaGVjay4KKyAqIEBmdW5jdGlvbjogICAgIFRoZSBuYW1lIG9mIGZ1bmN0aW9uIGNhbGxpbmcgbWUuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBkb21haW5uYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19pc19jb3JyZWN0X2RvbWFpbihjb25zdCB1bnNpZ25lZCBjaGFyICpkb21haW5uYW1lLAorCQkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24pCit7CisJdW5zaWduZWQgY2hhciBjOworCXVuc2lnbmVkIGNoYXIgZDsKKwl1bnNpZ25lZCBjaGFyIGU7CisJY29uc3QgY2hhciAqb3JnX2RvbWFpbm5hbWUgPSBkb21haW5uYW1lOworCisJaWYgKCFkb21haW5uYW1lIHx8IHN0cm5jbXAoZG9tYWlubmFtZSwgVE9NT1lPX1JPT1RfTkFNRSwKKwkJCQkgICBUT01PWU9fUk9PVF9OQU1FX0xFTikpCisJCWdvdG8gb3V0OworCWRvbWFpbm5hbWUgKz0gVE9NT1lPX1JPT1RfTkFNRV9MRU47CisJaWYgKCEqZG9tYWlubmFtZSkKKwkJcmV0dXJuIHRydWU7CisJZG8geworCQlpZiAoKmRvbWFpbm5hbWUrKyAhPSAnICcpCisJCQlnb3RvIG91dDsKKwkJaWYgKCpkb21haW5uYW1lKysgIT0gJy8nKQorCQkJZ290byBvdXQ7CisJCXdoaWxlICgoYyA9ICpkb21haW5uYW1lKSAhPSAnXDAnICYmIGMgIT0gJyAnKSB7CisJCQlkb21haW5uYW1lKys7CisJCQlpZiAoYyA9PSAnXFwnKSB7CisJCQkJYyA9ICpkb21haW5uYW1lKys7CisJCQkJc3dpdGNoICgoYykpIHsKKwkJCQljYXNlICdcXCc6ICAvKiAiXFwiICovCisJCQkJCWNvbnRpbnVlOworCQkJCWNhc2UgJzAnOiAgIC8qICJcb29vIiAqLworCQkJCWNhc2UgJzEnOgorCQkJCWNhc2UgJzInOgorCQkJCWNhc2UgJzMnOgorCQkJCQlkID0gKmRvbWFpbm5hbWUrKzsKKwkJCQkJaWYgKGQgPCAnMCcgfHwgZCA+ICc3JykKKwkJCQkJCWJyZWFrOworCQkJCQllID0gKmRvbWFpbm5hbWUrKzsKKwkJCQkJaWYgKGUgPCAnMCcgfHwgZSA+ICc3JykKKwkJCQkJCWJyZWFrOworCQkJCQljID0gdG9tb3lvX21ha2VfYnl0ZShjLCBkLCBlKTsKKwkJCQkJaWYgKHRvbW95b19pc19pbnZhbGlkKGMpKQorCQkJCQkJLyogcGF0dGVybiBpcyBub3QgXDAwMCAqLworCQkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWdvdG8gb3V0OworCQkJfSBlbHNlIGlmICh0b21veW9faXNfaW52YWxpZChjKSkgeworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfSB3aGlsZSAoKmRvbWFpbm5hbWUpOworCXJldHVybiB0cnVlOworIG91dDoKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgZG9tYWlubmFtZSAnJXMnXG4iLCBmdW5jdGlvbiwKKwkgICAgICAgb3JnX2RvbWFpbm5hbWUpOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9faXNfZG9tYWluX2RlZiAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHRva2VuIGNhbiBiZSBhIGRvbWFpbm5hbWUuCisgKgorICogQGJ1ZmZlcjogVGhlIHRva2VuIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAYnVmZmVyIHBvc3NpYmx5IGJlIGEgZG9tYWlubmFtZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19pc19kb21haW5fZGVmKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcikKK3sKKwlyZXR1cm4gIXN0cm5jbXAoYnVmZmVyLCBUT01PWU9fUk9PVF9OQU1FLCBUT01PWU9fUk9PVF9OQU1FX0xFTik7Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbmRfZG9tYWluIC0gRmluZCBhIGRvbWFpbiBieSB0aGUgZ2l2ZW4gbmFtZS4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIGRvbWFpbm5hbWUgdG8gZmluZC4KKyAqCisgKiBDYWxsZXIgbXVzdCBjYWxsIGRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOyBvcgorICogZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOyAuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIiBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19maW5kX2RvbWFpbihjb25zdCBjaGFyICpkb21haW5uYW1lKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBuYW1lOworCisJbmFtZS5uYW1lID0gZG9tYWlubmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJm5hbWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWlmICghZG9tYWluLT5pc19kZWxldGVkICYmCisJCSAgICAhdG9tb3lvX3BhdGhjbXAoJm5hbWUsIGRvbWFpbi0+ZG9tYWlubmFtZSkpCisJCQlyZXR1cm4gZG9tYWluOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fcGF0aF9kZXB0aCAtIEV2YWx1YXRlIHRoZSBudW1iZXIgb2YgJy8nIGluIGEgc3RyaW5nLgorICoKKyAqIEBwYXRobmFtZTogVGhlIHN0cmluZyB0byBldmFsdWF0ZS4KKyAqCisgKiBSZXR1cm5zIHBhdGggZGVwdGggb2YgdGhlIHN0cmluZy4KKyAqCisgKiBJIHNjb3JlIDIgZm9yIGVhY2ggb2YgdGhlICcvJyBpbiB0aGUgQHBhdGhuYW1lCisgKiBhbmQgc2NvcmUgMSBpZiB0aGUgQHBhdGhuYW1lIGVuZHMgd2l0aCAnLycuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfZGVwdGgoY29uc3QgY2hhciAqcGF0aG5hbWUpCit7CisJaW50IGkgPSAwOworCisJaWYgKHBhdGhuYW1lKSB7CisJCWNvbnN0IGNoYXIgKmVwID0gcGF0aG5hbWUgKyBzdHJsZW4ocGF0aG5hbWUpOworCQlpZiAocGF0aG5hbWUgPCBlcC0tKSB7CisJCQlpZiAoKmVwICE9ICcvJykKKwkJCQlpKys7CisJCQl3aGlsZSAocGF0aG5hbWUgPD0gZXApCisJCQkJaWYgKCplcC0tID09ICcvJykKKwkJCQkJaSArPSAyOworCQl9CisJfQorCXJldHVybiBpOworfQorCisvKioKKyAqIHRvbW95b19jb25zdF9wYXJ0X2xlbmd0aCAtIEV2YWx1YXRlIHRoZSBpbml0aWFsIGxlbmd0aCB3aXRob3V0IGEgcGF0dGVybiBpbiBhIHRva2VuLgorICoKKyAqIEBmaWxlbmFtZTogVGhlIHN0cmluZyB0byBldmFsdWF0ZS4KKyAqCisgKiBSZXR1cm5zIHRoZSBpbml0aWFsIGxlbmd0aCB3aXRob3V0IGEgcGF0dGVybiBpbiBAZmlsZW5hbWUuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2NvbnN0X3BhcnRfbGVuZ3RoKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNoYXIgYzsKKwlpbnQgbGVuID0gMDsKKworCWlmICghZmlsZW5hbWUpCisJCXJldHVybiAwOworCXdoaWxlICgoYyA9ICpmaWxlbmFtZSsrKSAhPSAnXDAnKSB7CisJCWlmIChjICE9ICdcXCcpIHsKKwkJCWxlbisrOworCQkJY29udGludWU7CisJCX0KKwkJYyA9ICpmaWxlbmFtZSsrOworCQlzd2l0Y2ggKGMpIHsKKwkJY2FzZSAnXFwnOiAgLyogIlxcIiAqLworCQkJbGVuICs9IDI7CisJCQljb250aW51ZTsKKwkJY2FzZSAnMCc6ICAgLyogIlxvb28iICovCisJCWNhc2UgJzEnOgorCQljYXNlICcyJzoKKwkJY2FzZSAnMyc6CisJCQljID0gKmZpbGVuYW1lKys7CisJCQlpZiAoYyA8ICcwJyB8fCBjID4gJzcnKQorCQkJCWJyZWFrOworCQkJYyA9ICpmaWxlbmFtZSsrOworCQkJaWYgKGMgPCAnMCcgfHwgYyA+ICc3JykKKwkJCQlicmVhazsKKwkJCWxlbiArPSA0OworCQkJY29udGludWU7CisJCX0KKwkJYnJlYWs7CisJfQorCXJldHVybiBsZW47Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbGxfcGF0aF9pbmZvIC0gRmlsbCBpbiAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIG1lbWJlcnMuCisgKgorICogQHB0cjogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIHRvIGZpbGwgaW4uCisgKgorICogVGhlIGNhbGxlciBzZXRzICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyItPm5hbWUuCisgKi8KK3ZvaWQgdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwdHIpCit7CisJY29uc3QgY2hhciAqbmFtZSA9IHB0ci0+bmFtZTsKKwljb25zdCBpbnQgbGVuID0gc3RybGVuKG5hbWUpOworCisJcHRyLT50b3RhbF9sZW4gPSBsZW47CisJcHRyLT5jb25zdF9sZW4gPSB0b21veW9fY29uc3RfcGFydF9sZW5ndGgobmFtZSk7CisJcHRyLT5pc19kaXIgPSBsZW4gJiYgKG5hbWVbbGVuIC0gMV0gPT0gJy8nKTsKKwlwdHItPmlzX3BhdHRlcm5lZCA9IChwdHItPmNvbnN0X2xlbiA8IGxlbik7CisJcHRyLT5oYXNoID0gZnVsbF9uYW1lX2hhc2gobmFtZSwgbGVuKTsKKwlwdHItPmRlcHRoID0gdG9tb3lvX3BhdGhfZGVwdGgobmFtZSk7Cit9CisKKy8qKgorICogdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMiAtIFBhdHRlcm4gbWF0Y2hpbmcgd2l0aG91dCAnLycgY2hhcmFjdGVyCisgKiBhbmQgIlwtIiBwYXR0ZXJuLgorICoKKyAqIEBmaWxlbmFtZTogICAgIFRoZSBzdGFydCBvZiBzdHJpbmcgdG8gY2hlY2suCisgKiBAZmlsZW5hbWVfZW5kOiBUaGUgZW5kIG9mIHN0cmluZyB0byBjaGVjay4KKyAqIEBwYXR0ZXJuOiAgICAgIFRoZSBzdGFydCBvZiBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKiBAcGF0dGVybl9lbmQ6ICBUaGUgZW5kIG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIG1hdGNoZXMgQHBhdHRlcm4sIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMihjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX2VuZCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQkJCSAgICBjb25zdCBjaGFyICpwYXR0ZXJuX2VuZCkKK3sKKwl3aGlsZSAoZmlsZW5hbWUgPCBmaWxlbmFtZV9lbmQgJiYgcGF0dGVybiA8IHBhdHRlcm5fZW5kKSB7CisJCWNoYXIgYzsKKwkJaWYgKCpwYXR0ZXJuICE9ICdcXCcpIHsKKwkJCWlmICgqZmlsZW5hbWUrKyAhPSAqcGF0dGVybisrKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWMgPSAqZmlsZW5hbWU7CisJCXBhdHRlcm4rKzsKKwkJc3dpdGNoICgqcGF0dGVybikgeworCQkJaW50IGk7CisJCQlpbnQgajsKKwkJY2FzZSAnPyc6CisJCQlpZiAoYyA9PSAnLycpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9IGVsc2UgaWYgKGMgPT0gJ1xcJykgeworCQkJCWlmIChmaWxlbmFtZVsxXSA9PSAnXFwnKQorCQkJCQlmaWxlbmFtZSsrOworCQkJCWVsc2UgaWYgKHRvbW95b19pc19ieXRlX3JhbmdlKGZpbGVuYW1lICsgMSkpCisJCQkJCWZpbGVuYW1lICs9IDM7CisJCQkJZWxzZQorCQkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnXFwnOgorCQkJaWYgKGMgIT0gJ1xcJykKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlpZiAoKisrZmlsZW5hbWUgIT0gJ1xcJykKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSAnKyc6CisJCQlpZiAoIWlzZGlnaXQoYykpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJaWYgKCFpc3hkaWdpdChjKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQlicmVhazsKKwkJY2FzZSAnYSc6CisJCQlpZiAoIXRvbW95b19pc19hbHBoYWJldF9jaGFyKGMpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJCWJyZWFrOworCQljYXNlICcwJzoKKwkJY2FzZSAnMSc6CisJCWNhc2UgJzInOgorCQljYXNlICczJzoKKwkJCWlmIChjID09ICdcXCcgJiYgdG9tb3lvX2lzX2J5dGVfcmFuZ2UoZmlsZW5hbWUgKyAxKQorCQkJICAgICYmIHN0cm5jbXAoZmlsZW5hbWUgKyAxLCBwYXR0ZXJuLCAzKSA9PSAwKSB7CisJCQkJZmlsZW5hbWUgKz0gMzsKKwkJCQlwYXR0ZXJuICs9IDI7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7IC8qIE5vdCBtYXRjaGVkLiAqLworCQljYXNlICcqJzoKKwkJY2FzZSAnQCc6CisJCQlmb3IgKGkgPSAwOyBpIDw9IGZpbGVuYW1lX2VuZCAtIGZpbGVuYW1lOyBpKyspIHsKKwkJCQlpZiAodG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMigKKwkJCQkJCSAgICBmaWxlbmFtZSArIGksIGZpbGVuYW1lX2VuZCwKKwkJCQkJCSAgICBwYXR0ZXJuICsgMSwgcGF0dGVybl9lbmQpKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQljID0gZmlsZW5hbWVbaV07CisJCQkJaWYgKGMgPT0gJy4nICYmICpwYXR0ZXJuID09ICdAJykKKwkJCQkJYnJlYWs7CisJCQkJaWYgKGMgIT0gJ1xcJykKKwkJCQkJY29udGludWU7CisJCQkJaWYgKGZpbGVuYW1lW2kgKyAxXSA9PSAnXFwnKQorCQkJCQlpKys7CisJCQkJZWxzZSBpZiAodG9tb3lvX2lzX2J5dGVfcmFuZ2UoZmlsZW5hbWUgKyBpICsgMSkpCisJCQkJCWkgKz0gMzsKKwkJCQllbHNlCisJCQkJCWJyZWFrOyAvKiBCYWQgcGF0dGVybi4gKi8KKwkJCX0KKwkJCXJldHVybiBmYWxzZTsgLyogTm90IG1hdGNoZWQuICovCisJCWRlZmF1bHQ6CisJCQlqID0gMDsKKwkJCWMgPSAqcGF0dGVybjsKKwkJCWlmIChjID09ICckJykgeworCQkJCXdoaWxlIChpc2RpZ2l0KGZpbGVuYW1lW2pdKSkKKwkJCQkJaisrOworCQkJfSBlbHNlIGlmIChjID09ICdYJykgeworCQkJCXdoaWxlIChpc3hkaWdpdChmaWxlbmFtZVtqXSkpCisJCQkJCWorKzsKKwkJCX0gZWxzZSBpZiAoYyA9PSAnQScpIHsKKwkJCQl3aGlsZSAodG9tb3lvX2lzX2FscGhhYmV0X2NoYXIoZmlsZW5hbWVbal0pKQorCQkJCQlqKys7CisJCQl9CisJCQlmb3IgKGkgPSAxOyBpIDw9IGo7IGkrKykgeworCQkJCWlmICh0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4yKAorCQkJCQkJICAgIGZpbGVuYW1lICsgaSwgZmlsZW5hbWVfZW5kLAorCQkJCQkJICAgIHBhdHRlcm4gKyAxLCBwYXR0ZXJuX2VuZCkpCisJCQkJCXJldHVybiB0cnVlOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOyAvKiBOb3QgbWF0Y2hlZCBvciBiYWQgcGF0dGVybi4gKi8KKwkJfQorCQlmaWxlbmFtZSsrOworCQlwYXR0ZXJuKys7CisJfQorCXdoaWxlICgqcGF0dGVybiA9PSAnXFwnICYmCisJICAgICAgICgqKHBhdHRlcm4gKyAxKSA9PSAnKicgfHwgKihwYXR0ZXJuICsgMSkgPT0gJ0AnKSkKKwkJcGF0dGVybiArPSAyOworCXJldHVybiBmaWxlbmFtZSA9PSBmaWxlbmFtZV9lbmQgJiYgcGF0dGVybiA9PSBwYXR0ZXJuX2VuZDsKK30KKworLyoqCisgKiB0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4gLSBQYXR0ZXJuIG1hdGNoaW5nIHdpdGhvdXQgd2l0aG91dCAnLycgY2hhcmFjdGVyLgorICoKKyAqIEBmaWxlbmFtZTogICAgIFRoZSBzdGFydCBvZiBzdHJpbmcgdG8gY2hlY2suCisgKiBAZmlsZW5hbWVfZW5kOiBUaGUgZW5kIG9mIHN0cmluZyB0byBjaGVjay4KKyAqIEBwYXR0ZXJuOiAgICAgIFRoZSBzdGFydCBvZiBwYXR0ZXJuIHRvIGNvbXBhcmUuCisgKiBAcGF0dGVybl9lbmQ6ICBUaGUgZW5kIG9mIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIG1hdGNoZXMgQHBhdHRlcm4sIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgICBjb25zdCBjaGFyICpmaWxlbmFtZV9lbmQsCisJCQkJCSAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sCisJCQkJCSAgIGNvbnN0IGNoYXIgKnBhdHRlcm5fZW5kKQoreworCWNvbnN0IGNoYXIgKnBhdHRlcm5fc3RhcnQgPSBwYXR0ZXJuOworCWJvb2wgZmlyc3QgPSB0cnVlOworCWJvb2wgcmVzdWx0OworCisJd2hpbGUgKHBhdHRlcm4gPCBwYXR0ZXJuX2VuZCAtIDEpIHsKKwkJLyogU3BsaXQgYXQgIlwtIiBwYXR0ZXJuLiAqLworCQlpZiAoKnBhdHRlcm4rKyAhPSAnXFwnIHx8ICpwYXR0ZXJuKysgIT0gJy0nKQorCQkJY29udGludWU7CisJCXJlc3VsdCA9IHRvbW95b19maWxlX21hdGNoZXNfdG9fcGF0dGVybjIoZmlsZW5hbWUsCisJCQkJCQkJIGZpbGVuYW1lX2VuZCwKKwkJCQkJCQkgcGF0dGVybl9zdGFydCwKKwkJCQkJCQkgcGF0dGVybiAtIDIpOworCQlpZiAoZmlyc3QpCisJCQlyZXN1bHQgPSAhcmVzdWx0OworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIGZhbHNlOworCQlmaXJzdCA9IGZhbHNlOworCQlwYXR0ZXJuX3N0YXJ0ID0gcGF0dGVybjsKKwl9CisJcmVzdWx0ID0gdG9tb3lvX2ZpbGVfbWF0Y2hlc190b19wYXR0ZXJuMihmaWxlbmFtZSwgZmlsZW5hbWVfZW5kLAorCQkJCQkJIHBhdHRlcm5fc3RhcnQsIHBhdHRlcm5fZW5kKTsKKwlyZXR1cm4gZmlyc3QgPyByZXN1bHQgOiAhcmVzdWx0OworfQorCisvKioKKyAqIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybiAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uCisgKiBAZmlsZW5hbWU6IFRoZSBmaWxlbmFtZSB0byBjaGVjay4KKyAqIEBwYXR0ZXJuOiAgVGhlIHBhdHRlcm4gdG8gY29tcGFyZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgbWF0Y2hlcywgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgcGF0dGVybnMgYXJlIGF2YWlsYWJsZS4KKyAqICAgXFwgICAgIFwgaXRzZWxmLgorICogICBcb29vICAgT2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYSBieXRlLgorICogICBcKiAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAwIGNoYXJhY3RlciBvdGhlciB0aGFuICcvJy4KKyAqICAgXEAgICAgIE1vcmUgdGhhbiBvciBlcXVhbHMgdG8gMCBjaGFyYWN0ZXIgb3RoZXIgdGhhbiAnLycgb3IgJy4nLgorICogICBcPyAgICAgMSBieXRlIGNoYXJhY3RlciBvdGhlciB0aGFuICcvJy4KKyAqICAgXCQgICAgIE1vcmUgdGhhbiBvciBlcXVhbHMgdG8gMSBkZWNpbWFsIGRpZ2l0LgorICogICBcKyAgICAgMSBkZWNpbWFsIGRpZ2l0LgorICogICBcWCAgICAgTW9yZSB0aGFuIG9yIGVxdWFscyB0byAxIGhleGFkZWNpbWFsIGRpZ2l0LgorICogICBceCAgICAgMSBoZXhhZGVjaW1hbCBkaWdpdC4KKyAqICAgXEEgICAgIE1vcmUgdGhhbiBvciBlcXVhbHMgdG8gMSBhbHBoYWJldCBjaGFyYWN0ZXIuCisgKiAgIFxhICAgICAxIGFscGhhYmV0IGNoYXJhY3Rlci4KKyAqICAgXC0gICAgIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgorICovCitib29sIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkJIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuKQoreworCS8qCisJICBpZiAoIWZpbGVuYW1lIHx8ICFwYXR0ZXJuKQorCSAgcmV0dXJuIGZhbHNlOworCSovCisJY29uc3QgY2hhciAqZiA9IGZpbGVuYW1lLT5uYW1lOworCWNvbnN0IGNoYXIgKnAgPSBwYXR0ZXJuLT5uYW1lOworCWNvbnN0IGludCBsZW4gPSBwYXR0ZXJuLT5jb25zdF9sZW47CisKKwkvKiBJZiBAcGF0dGVybiBkb2Vzbid0IGNvbnRhaW4gcGF0dGVybiwgSSBjYW4gdXNlIHN0cmNtcCgpLiAqLworCWlmICghcGF0dGVybi0+aXNfcGF0dGVybmVkKQorCQlyZXR1cm4gIXRvbW95b19wYXRoY21wKGZpbGVuYW1lLCBwYXR0ZXJuKTsKKwkvKiBEb250IGNvbXBhcmUgaWYgdGhlIG51bWJlciBvZiAnLycgZGlmZmVycy4gKi8KKwlpZiAoZmlsZW5hbWUtPmRlcHRoICE9IHBhdHRlcm4tPmRlcHRoKQorCQlyZXR1cm4gZmFsc2U7CisJLyogQ29tcGFyZSB0aGUgaW5pdGlhbCBsZW5ndGggd2l0aG91dCBwYXR0ZXJucy4gKi8KKwlpZiAoc3RybmNtcChmLCBwLCBsZW4pKQorCQlyZXR1cm4gZmFsc2U7CisJZiArPSBsZW47CisJcCArPSBsZW47CisJLyogTWFpbiBsb29wLiBDb21wYXJlIGVhY2ggZGlyZWN0b3J5IGNvbXBvbmVudC4gKi8KKwl3aGlsZSAoKmYgJiYgKnApIHsKKwkJY29uc3QgY2hhciAqZl9kZWxpbWl0ZXIgPSBzdHJjaHIoZiwgJy8nKTsKKwkJY29uc3QgY2hhciAqcF9kZWxpbWl0ZXIgPSBzdHJjaHIocCwgJy8nKTsKKwkJaWYgKCFmX2RlbGltaXRlcikKKwkJCWZfZGVsaW1pdGVyID0gZiArIHN0cmxlbihmKTsKKwkJaWYgKCFwX2RlbGltaXRlcikKKwkJCXBfZGVsaW1pdGVyID0gcCArIHN0cmxlbihwKTsKKwkJaWYgKCF0b21veW9fZmlsZV9tYXRjaGVzX3RvX3BhdHRlcm4oZiwgZl9kZWxpbWl0ZXIsCisJCQkJCQkgICAgcCwgcF9kZWxpbWl0ZXIpKQorCQkJcmV0dXJuIGZhbHNlOworCQlmID0gZl9kZWxpbWl0ZXI7CisJCWlmICgqZikKKwkJCWYrKzsKKwkJcCA9IHBfZGVsaW1pdGVyOworCQlpZiAoKnApCisJCQlwKys7CisJfQorCS8qIElnbm9yZSB0cmFpbGluZyAiXCoiIGFuZCAiXEAiIGluIEBwYXR0ZXJuLiAqLworCXdoaWxlICgqcCA9PSAnXFwnICYmCisJICAgICAgICgqKHAgKyAxKSA9PSAnKicgfHwgKihwICsgMSkgPT0gJ0AnKSkKKwkJcCArPSAyOworCXJldHVybiAhKmYgJiYgISpwOworfQorCisvKioKKyAqIHRvbW95b19pb19wcmludGYgLSBUcmFuc2FjdGlvbmFsIHByaW50ZigpIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIgc3RydWN0dXJlLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKiBAZm10OiAgVGhlIHByaW50ZigpJ3MgZm9ybWF0IHN0cmluZywgZm9sbG93ZWQgYnkgcGFyYW1ldGVycy4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgb3V0cHV0IHdhcyB3cml0dGVuLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogVGhlIHNucHJpbnRmKCkgd2lsbCB0cnVuY2F0ZSwgYnV0IHRvbW95b19pb19wcmludGYoKSB3b24ndC4KKyAqLworYm9vbCB0b21veW9faW9fcHJpbnRmKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IGxlbjsKKwlpbnQgcG9zID0gaGVhZC0+cmVhZF9hdmFpbDsKKwlpbnQgc2l6ZSA9IGhlYWQtPnJlYWRidWZfc2l6ZSAtIHBvczsKKworCWlmIChzaXplIDw9IDApCisJCXJldHVybiBmYWxzZTsKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCWxlbiA9IHZzbnByaW50ZihoZWFkLT5yZWFkX2J1ZiArIHBvcywgc2l6ZSwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisJaWYgKHBvcyArIGxlbiA+PSBoZWFkLT5yZWFkYnVmX3NpemUpCisJCXJldHVybiBmYWxzZTsKKwloZWFkLT5yZWFkX2F2YWlsICs9IGxlbjsKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiB0b21veW9fZ2V0X2V4ZSAtIEdldCB0b21veW9fcmVhbHBhdGgoKSBvZiBjdXJyZW50IHByb2Nlc3MuCisgKgorICogUmV0dXJucyB0aGUgdG9tb3lvX3JlYWxwYXRoKCkgb2YgY3VycmVudCBwcm9jZXNzIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0b21veW9fYWxsb2MoKSwgc28gdGhlIGNhbGxlciBtdXN0IGNhbGwgdG9tb3lvX2ZyZWUoKQorICogaWYgdGhpcyBmdW5jdGlvbiBkaWRuJ3QgcmV0dXJuIE5VTEwuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fZ2V0X2V4ZSh2b2lkKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJY29uc3QgY2hhciAqY3AgPSBOVUxMOworCisJaWYgKCFtbSkKKwkJcmV0dXJuIE5VTEw7CisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWZvciAodm1hID0gbW0tPm1tYXA7IHZtYTsgdm1hID0gdm1hLT52bV9uZXh0KSB7CisJCWlmICgodm1hLT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpICYmIHZtYS0+dm1fZmlsZSkgeworCQkJY3AgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKCZ2bWEtPnZtX2ZpbGUtPmZfcGF0aCk7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiBjcDsKK30KKworLyoqCisgKiB0b21veW9fZ2V0X21zZyAtIEdldCB3YXJuaW5nIG1lc3NhZ2UuCisgKgorICogQGlzX2VuZm9yY2U6IElzIGl0IGVuZm9yY2luZyBtb2RlPworICoKKyAqIFJldHVybnMgIkVSUk9SIiBvciAiV0FSTklORyIuCisgKi8KK2NvbnN0IGNoYXIgKnRvbW95b19nZXRfbXNnKGNvbnN0IGJvb2wgaXNfZW5mb3JjZSkKK3sKKwlpZiAoaXNfZW5mb3JjZSkKKwkJcmV0dXJuICJFUlJPUiI7CisJZWxzZQorCQlyZXR1cm4gIldBUk5JTkciOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19mbGFncyAtIENoZWNrIG1vZGUgZm9yIHNwZWNpZmllZCBmdW5jdGlvbmFsaXR5LgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGluZGV4OiAgVGhlIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgbW9kZS4KKyAqCisgKiBUT01PWU8gY2hlY2tzIG9ubHkgcHJvY2VzcyBjb250ZXh0LgorICogVGhpcyBjb2RlIGRpc2FibGVzIFRPTU9ZTydzIGVuZm9yY2VtZW50IGluIGNhc2UgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tCisgKiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLwordW5zaWduZWQgaW50IHRvbW95b19jaGVja19mbGFncyhjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJY29uc3QgdTggaW5kZXgpCit7CisJY29uc3QgdTggcHJvZmlsZSA9IGRvbWFpbi0+cHJvZmlsZTsKKworCWlmIChXQVJOX09OKGluX2ludGVycnVwdCgpKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHRvbW95b19wb2xpY3lfbG9hZGVkICYmIGluZGV4IDwgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYCisjaWYgVE9NT1lPX01BWF9QUk9GSUxFUyAhPSAyNTYKKwkJJiYgcHJvZmlsZSA8IFRPTU9ZT19NQVhfUFJPRklMRVMKKyNlbmRpZgorCQkmJiB0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0gPworCQl0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0tPnZhbHVlW2luZGV4XSA6IDA7Cit9CisKKy8qKgorICogdG9tb3lvX3ZlcmJvc2VfbW9kZSAtIENoZWNrIHdoZXRoZXIgVE9NT1lPIGlzIHZlcmJvc2UgbW9kZS4KKyAqCisgKiBAZG9tYWluOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgZG9tYWluIHBvbGljeSB2aW9sYXRpb24gd2FybmluZyBzaG91bGQgYmUgcHJpbnRlZCB0bworICogY29uc29sZS4KKyAqLworYm9vbCB0b21veW9fdmVyYm9zZV9tb2RlKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbikKK3sKKwlyZXR1cm4gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX1ZFUkJPU0UpICE9IDA7Cit9CisKKy8qKgorICogdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayAtIENoZWNrIGZvciBkb21haW4ncyBxdW90YS4KKyAqCisgKiBAZG9tYWluOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGRvbWFpbiBpcyBub3QgZXhjZWVkZWQgcXVvdGEsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworYm9vbCB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4pCit7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisKKwlpZiAoIWRvbWFpbikKKwkJcmV0dXJuIHRydWU7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+dHlwZSAmIFRPTU9ZT19BQ0xfREVMRVRFRCkKKwkJCWNvbnRpbnVlOworCQlzd2l0Y2ggKHRvbW95b19hY2xfdHlwZTIocHRyKSkgeworCQkJc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICphY2wxOworCQkJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2wyOworCQkJdTE2IHBlcm07CisJCWNhc2UgVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMOgorCQkJYWNsMSA9IGNvbnRhaW5lcl9vZihwdHIsCisJCQkJICAgIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkJICAgIGhlYWQpOworCQkJcGVybSA9IGFjbDEtPnBlcm07CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJgorCQkJICAgICgoMSA8PCBUT01PWU9fVFlQRV9SRUFEX0FDTCkgfAorCQkJICAgICAoMSA8PCBUT01PWU9fVFlQRV9XUklURV9BQ0wpKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9DUkVBVEVfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9VTkxJTktfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS0RJUl9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JNRElSX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtGSUZPX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtTT0NLX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtCTE9DS19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LQ0hBUl9BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCkpCisJCQkJY291bnQrKzsKKwkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfU1lNTElOS19BQ0wpKQorCQkJCWNvdW50Kys7CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMKSkKKwkJCQljb3VudCsrOworCQkJYnJlYWs7CisJCWNhc2UgVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMOgorCQkJYWNsMiA9IGNvbnRhaW5lcl9vZihwdHIsCisJCQkJICAgIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkJICAgIGhlYWQpOworCQkJcGVybSA9IGFjbDItPnBlcm07CisJCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX0xJTktfQUNMKSkKKwkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRU5BTUVfQUNMKSkKKwkJCQljb3VudCsrOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWlmIChjb3VudCA8IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQVhfQUNDRVBUX0VOVFJZKSkKKwkJcmV0dXJuIHRydWU7CisJaWYgKCFkb21haW4tPnF1b3RhX3dhcm5lZCkgeworCQlkb21haW4tPnF1b3RhX3dhcm5lZCA9IHRydWU7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy1XQVJOSU5HOiAiCisJCSAgICAgICAiRG9tYWluICclcycgaGFzIHNvIG1hbnkgQUNMcyB0byBob2xkLiAiCisJCSAgICAgICAiU3RvcHBlZCBsZWFybmluZyBtb2RlLlxuIiwgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfcHJvZmlsZSAtIENyZWF0ZSBhIG5ldyBwcm9maWxlLgorICoKKyAqIEBwcm9maWxlOiBQcm9maWxlIG51bWJlciB0byBjcmVhdGUuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUiIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3RydWN0IHRvbW95b19wcm9maWxlICp0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X3Byb2ZpbGUoY29uc3QgdW5zaWduZWQKKwkJCQkJCQkJaW50IHByb2ZpbGUpCit7CisJc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKKwlzdHJ1Y3QgdG9tb3lvX3Byb2ZpbGUgKnB0ciA9IE5VTEw7CisJaW50IGk7CisKKwlpZiAocHJvZmlsZSA+PSBUT01PWU9fTUFYX1BST0ZJTEVTKQorCQlyZXR1cm4gTlVMTDsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJbXV0ZXhfbG9jaygmbG9jayk7CisJcHRyID0gdG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdOworCWlmIChwdHIpCisJCWdvdG8gb2s7CisJcHRyID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpwdHIpKTsKKwlpZiAoIXB0cikKKwkJZ290byBvazsKKwlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYOyBpKyspCisJCXB0ci0+dmFsdWVbaV0gPSB0b21veW9fY29udHJvbF9hcnJheVtpXS5jdXJyZW50X3ZhbHVlOworCW1iKCk7IC8qIEF2b2lkIG91dC1vZi1vcmRlciBleGVjdXRpb24uICovCisJdG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdID0gcHRyOworIG9rOgorCW11dGV4X3VubG9jaygmbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gcHRyOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9wcm9maWxlIC0gV3JpdGUgdG8gcHJvZmlsZSB0YWJsZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX3Byb2ZpbGUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJY2hhciAqY3A7CisJc3RydWN0IHRvbW95b19wcm9maWxlICpwcm9maWxlOworCXVuc2lnbmVkIGxvbmcgbnVtOworCisJY3AgPSBzdHJjaHIoZGF0YSwgJy0nKTsKKwlpZiAoY3ApCisJCSpjcCA9ICdcMCc7CisJaWYgKHN0cmljdF9zdHJ0b3VsKGRhdGEsIDEwLCAmbnVtKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNwKQorCQlkYXRhID0gY3AgKyAxOworCXByb2ZpbGUgPSB0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X3Byb2ZpbGUobnVtKTsKKwlpZiAoIXByb2ZpbGUpCisJCXJldHVybiAtRUlOVkFMOworCWNwID0gc3RyY2hyKGRhdGEsICc9Jyk7CisJaWYgKCFjcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmNwID0gJ1wwJzsKKwlpZiAoIXN0cmNtcChkYXRhLCAiQ09NTUVOVCIpKSB7CisJCXByb2ZpbGUtPmNvbW1lbnQgPSB0b21veW9fc2F2ZV9uYW1lKGNwICsgMSk7CisJCXJldHVybiAwOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYOyBpKyspIHsKKwkJaWYgKHN0cmNtcChkYXRhLCB0b21veW9fY29udHJvbF9hcnJheVtpXS5rZXl3b3JkKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3NjYW5mKGNwICsgMSwgIiV1IiwgJnZhbHVlKSAhPSAxKSB7CisJCQlpbnQgajsKKwkJCWNvbnN0IGNoYXIgKiptb2RlczsKKwkJCXN3aXRjaCAoaSkgeworCQkJY2FzZSBUT01PWU9fVkVSQk9TRToKKwkJCQltb2RlcyA9IHRvbW95b19tb2RlXzI7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfNDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKwkJCQlpZiAoc3RyY21wKGNwICsgMSwgbW9kZXNbal0pKQorCQkJCQljb250aW51ZTsKKwkJCQl2YWx1ZSA9IGo7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoaiA9PSA0KQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgaWYgKHZhbHVlID4gdG9tb3lvX2NvbnRyb2xfYXJyYXlbaV0ubWF4X3ZhbHVlKSB7CisJCQl2YWx1ZSA9IHRvbW95b19jb250cm9sX2FycmF5W2ldLm1heF92YWx1ZTsKKwkJfQorCQlwcm9maWxlLT52YWx1ZVtpXSA9IHZhbHVlOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfcHJvZmlsZSAtIFJlYWQgZnJvbSBwcm9maWxlIHRhYmxlLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX3Byb2ZpbGUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RhdGljIGNvbnN0IGludCB0b3RhbCA9IFRPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWCArIDE7CisJaW50IHN0ZXA7CisKKwlpZiAoaGVhZC0+cmVhZF9lb2YpCisJCXJldHVybiAwOworCWZvciAoc3RlcCA9IGhlYWQtPnJlYWRfc3RlcDsgc3RlcCA8IFRPTU9ZT19NQVhfUFJPRklMRVMgKiB0b3RhbDsKKwkgICAgIHN0ZXArKykgeworCQljb25zdCB1OCBpbmRleCA9IHN0ZXAgLyB0b3RhbDsKKwkJdTggdHlwZSA9IHN0ZXAgJSB0b3RhbDsKKwkJY29uc3Qgc3RydWN0IHRvbW95b19wcm9maWxlICpwcm9maWxlCisJCQk9IHRvbW95b19wcm9maWxlX3B0cltpbmRleF07CisJCWhlYWQtPnJlYWRfc3RlcCA9IHN0ZXA7CisJCWlmICghcHJvZmlsZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXR5cGUpIHsgLyogUHJpbnQgcHJvZmlsZScgY29tbWVudCB0YWcuICovCisJCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1LUNPTU1FTlQ9JXNcbiIsCisJCQkJCSAgICAgIGluZGV4LCBwcm9maWxlLT5jb21tZW50ID8KKwkJCQkJICAgICAgcHJvZmlsZS0+Y29tbWVudC0+bmFtZSA6ICIiKSkKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQl9CisJCXR5cGUtLTsKKwkJaWYgKHR5cGUgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVgpIHsKKwkJCWNvbnN0IHVuc2lnbmVkIGludCB2YWx1ZSA9IHByb2ZpbGUtPnZhbHVlW3R5cGVdOworCQkJY29uc3QgY2hhciAqKm1vZGVzID0gTlVMTDsKKwkJCWNvbnN0IGNoYXIgKmtleXdvcmQKKwkJCQk9IHRvbW95b19jb250cm9sX2FycmF5W3R5cGVdLmtleXdvcmQ7CisJCQlzd2l0Y2ggKHRvbW95b19jb250cm9sX2FycmF5W3R5cGVdLm1heF92YWx1ZSkgeworCQkJY2FzZSAzOgorCQkJCW1vZGVzID0gdG9tb3lvX21vZGVfNDsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQltb2RlcyA9IHRvbW95b19tb2RlXzI7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAobW9kZXMpIHsKKwkJCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1LSVzPSVzXG4iLCBpbmRleCwKKwkJCQkJCSAgICAgIGtleXdvcmQsIG1vZGVzW3ZhbHVlXSkpCisJCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIiV1LSVzPSV1XG4iLCBpbmRleCwKKwkJCQkJCSAgICAgIGtleXdvcmQsIHZhbHVlKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKHN0ZXAgPT0gVE9NT1lPX01BWF9QUk9GSUxFUyAqIHRvdGFsKQorCQloZWFkLT5yZWFkX2VvZiA9IHRydWU7CisJcmV0dXJuIDA7Cit9CisKKy8qIFN0cnVjdHVyZSBmb3IgcG9saWN5IG1hbmFnZXIuICovCitzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyogQSBwYXRoIHRvIHByb2dyYW0gb3IgYSBkb21haW5uYW1lLiAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICptYW5hZ2VyOworCWJvb2wgaXNfZG9tYWluOyAgLyogVHJ1ZSBpZiBtYW5hZ2VyIGlzIGEgZG9tYWlubmFtZS4gKi8KKwlib29sIGlzX2RlbGV0ZWQ7IC8qIFRydWUgaWYgdGhpcyBlbnRyeSBpcyBkZWxldGVkLiAqLworfTsKKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpOworc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9tYW5hZ2VyX2VudHJ5IC0gQWRkIGEgbWFuYWdlciBlbnRyeS4KKyAqCisgKiBAbWFuYWdlcjogICBUaGUgcGF0aCB0byBtYW5hZ2VyIG9yIHRoZSBkb21haW5uYW1tZS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfbWFuYWdlcl9lbnRyeShjb25zdCBjaGFyICptYW5hZ2VyLAorCQkJCSAgICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9tYW5hZ2VyOworCWludCBlcnJvciA9IC1FTk9NRU07CisJYm9vbCBpc19kb21haW4gPSBmYWxzZTsKKworCWlmICh0b21veW9faXNfZG9tYWluX2RlZihtYW5hZ2VyKSkgeworCQlpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihtYW5hZ2VyLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaXNfZG9tYWluID0gdHJ1ZTsKKwl9IGVsc2UgeworCQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgobWFuYWdlciwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc2F2ZWRfbWFuYWdlciA9IHRvbW95b19zYXZlX25hbWUobWFuYWdlcik7CisJaWYgKCFzYXZlZF9tYW5hZ2VyKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5tYW5hZ2VyICE9IHNhdmVkX21hbmFnZXIpCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+bWFuYWdlciA9IHNhdmVkX21hbmFnZXI7CisJbmV3X2VudHJ5LT5pc19kb21haW4gPSBpc19kb21haW47CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpOworCWVycm9yID0gMDsKKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9tYW5hZ2VyX3BvbGljeSAtIFdyaXRlIG1hbmFnZXIgcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfbWFuYWdlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJY2hhciAqZGF0YSA9IGhlYWQtPndyaXRlX2J1ZjsKKwlib29sIGlzX2RlbGV0ZSA9IHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9ERUxFVEUpOworCisJaWYgKCFzdHJjbXAoZGF0YSwgIm1hbmFnZV9ieV9ub25fcm9vdCIpKSB7CisJCXRvbW95b19tYW5hZ2VfYnlfbm9uX3Jvb3QgPSAhaXNfZGVsZXRlOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHRvbW95b191cGRhdGVfbWFuYWdlcl9lbnRyeShkYXRhLCBpc19kZWxldGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX21hbmFnZXJfcG9saWN5IC0gUmVhZCBtYW5hZ2VyIHBvbGljeS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9tYW5hZ2VyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWlmIChoZWFkLT5yZWFkX2VvZikKKwkJcmV0dXJuIDA7CisJZG93bl9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwKKwkJCSAgICAgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKnB0cjsKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnksCisJCQkJIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJXNcbiIsIHB0ci0+bWFuYWdlci0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9faXNfcG9saWN5X21hbmFnZXIgLSBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgYSBwb2xpY3kgbWFuYWdlci4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBwZXJtaXR0ZWQgdG8gbW9kaWZ5IHBvbGljeQorICogdmlhIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9faXNfcG9saWN5X21hbmFnZXIodm9pZCkKK3sKKwlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpwdHI7CisJY29uc3QgY2hhciAqZXhlOworCWNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN1cnJlbnQ7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWUgPSB0b21veW9fZG9tYWluKCktPmRvbWFpbm5hbWU7CisJYm9vbCBmb3VuZCA9IGZhbHNlOworCisJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKKwkJcmV0dXJuIHRydWU7CisJaWYgKCF0b21veW9fbWFuYWdlX2J5X25vbl9yb290ICYmICh0YXNrLT5jcmVkLT51aWQgfHwgdGFzay0+Y3JlZC0+ZXVpZCkpCisJCXJldHVybiBmYWxzZTsKKwlkb3duX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFwdHItPmlzX2RlbGV0ZWQgJiYgcHRyLT5pc19kb21haW4KKwkJICAgICYmICF0b21veW9fcGF0aGNtcChkb21haW5uYW1lLCBwdHItPm1hbmFnZXIpKSB7CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdF9sb2NrKTsKKwlpZiAoZm91bmQpCisJCXJldHVybiB0cnVlOworCWV4ZSA9IHRvbW95b19nZXRfZXhlKCk7CisJaWYgKCFleGUpCisJCXJldHVybiBmYWxzZTsKKwlkb3duX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFwdHItPmlzX2RlbGV0ZWQgJiYgIXB0ci0+aXNfZG9tYWluCisJCSAgICAmJiAhc3RyY21wKGV4ZSwgcHRyLT5tYW5hZ2VyLT5uYW1lKSkgeworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisJdXBfcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJaWYgKCFmb3VuZCkgeyAvKiBSZWR1Y2UgZXJyb3IgbWVzc2FnZXMuICovCisJCXN0YXRpYyBwaWRfdCBsYXN0X3BpZDsKKwkJY29uc3QgcGlkX3QgcGlkID0gY3VycmVudC0+cGlkOworCQlpZiAobGFzdF9waWQgIT0gcGlkKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyAoICVzICkgaXMgbm90IHBlcm1pdHRlZCB0byAiCisJCQkgICAgICAgInVwZGF0ZSBwb2xpY2llcy5cbiIsIGRvbWFpbm5hbWUtPm5hbWUsIGV4ZSk7CisJCQlsYXN0X3BpZCA9IHBpZDsKKwkJfQorCX0KKwl0b21veW9fZnJlZShleGUpOworCXJldHVybiBmb3VuZDsKK30KKworLyoqCisgKiB0b21veW9faXNfc2VsZWN0X29uZSAtIFBhcnNlIHNlbGVjdCBjb21tYW5kLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKiBAZGF0YTogU3RyaW5nIHRvIHBhcnNlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19pc19zZWxlY3Rfb25lKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAorCQkJCSBjb25zdCBjaGFyICpkYXRhKQoreworCXVuc2lnbmVkIGludCBwaWQ7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKKworCWlmIChzc2NhbmYoZGF0YSwgInBpZD0ldSIsICZwaWQpID09IDEpIHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCQkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBTVEFSVCAqKioqKi8KKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CisJCWlmIChwKQorCQkJZG9tYWluID0gdG9tb3lvX3JlYWxfZG9tYWluKHApOworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIEVORCAqKioqKi8KKwl9IGVsc2UgaWYgKCFzdHJuY21wKGRhdGEsICJkb21haW49IiwgNykpIHsKKwkJaWYgKHRvbW95b19pc19kb21haW5fZGVmKGRhdGEgKyA3KSkgeworCQkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCQlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oZGF0YSArIDcpOworCQkJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCQl9CisJfSBlbHNlCisJCXJldHVybiBmYWxzZTsKKwloZWFkLT53cml0ZV92YXIxID0gZG9tYWluOworCS8qIEFjY2Vzc2luZyByZWFkX2J1ZiBpcyBzYWZlIGJlY2F1c2UgaGVhZC0+aW9fc2VtIGlzIGhlbGQuICovCisJaWYgKCFoZWFkLT5yZWFkX2J1ZikKKwkJcmV0dXJuIHRydWU7IC8qIERvIG5vdGhpbmcgaWYgb3BlbihPX1dST05MWSkuICovCisJaGVhZC0+cmVhZF9hdmFpbCA9IDA7CisJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiIyBzZWxlY3QgJXNcbiIsIGRhdGEpOworCWhlYWQtPnJlYWRfc2luZ2xlX2RvbWFpbiA9IHRydWU7CisJaGVhZC0+cmVhZF9lb2YgPSAhZG9tYWluOworCWlmIChkb21haW4pIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZDsKKwkJaGVhZC0+cmVhZF92YXIxID0gTlVMTDsKKwkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZCwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQkJaWYgKGQgPT0gZG9tYWluKQorCQkJCWJyZWFrOworCQkJaGVhZC0+cmVhZF92YXIxID0gJmQtPmxpc3Q7CisJCX0KKwkJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQloZWFkLT5yZWFkX2JpdCA9IDA7CisJCWhlYWQtPnJlYWRfc3RlcCA9IDA7CisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQpCisJCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIjIFRoaXMgaXMgYSBkZWxldGVkIGRvbWFpbi5cbiIpOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZG9tYWluX3BvbGljeSAtIFdyaXRlIGRvbWFpbiBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9kb21haW5fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gaGVhZC0+d3JpdGVfdmFyMTsKKwlib29sIGlzX2RlbGV0ZSA9IGZhbHNlOworCWJvb2wgaXNfc2VsZWN0ID0gZmFsc2U7CisJYm9vbCBpc191bmRlbGV0ZSA9IGZhbHNlOworCXVuc2lnbmVkIGludCBwcm9maWxlOworCisJaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9ERUxFVEUpKQorCQlpc19kZWxldGUgPSB0cnVlOworCWVsc2UgaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9TRUxFQ1QpKQorCQlpc19zZWxlY3QgPSB0cnVlOworCWVsc2UgaWYgKHRvbW95b19zdHJfc3RhcnRzKCZkYXRhLCBUT01PWU9fS0VZV09SRF9VTkRFTEVURSkpCisJCWlzX3VuZGVsZXRlID0gdHJ1ZTsKKwlpZiAoaXNfc2VsZWN0ICYmIHRvbW95b19pc19zZWxlY3Rfb25lKGhlYWQsIGRhdGEpKQorCQlyZXR1cm4gMDsKKwkvKiBEb24ndCBhbGxvdyB1cGRhdGluZyBwb2xpY2llcyBieSBub24gbWFuYWdlciBwcm9ncmFtcy4gKi8KKwlpZiAoIXRvbW95b19pc19wb2xpY3lfbWFuYWdlcigpKQorCQlyZXR1cm4gLUVQRVJNOworCWlmICh0b21veW9faXNfZG9tYWluX2RlZihkYXRhKSkgeworCQlkb21haW4gPSBOVUxMOworCQlpZiAoaXNfZGVsZXRlKQorCQkJdG9tb3lvX2RlbGV0ZV9kb21haW4oZGF0YSk7CisJCWVsc2UgaWYgKGlzX3NlbGVjdCkgeworCQkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCQlkb21haW4gPSB0b21veW9fZmluZF9kb21haW4oZGF0YSk7CisJCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJCX0gZWxzZSBpZiAoaXNfdW5kZWxldGUpCisJCQlkb21haW4gPSB0b21veW9fdW5kZWxldGVfZG9tYWluKGRhdGEpOworCQllbHNlCisJCQlkb21haW4gPSB0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X2RvbWFpbihkYXRhLCAwKTsKKwkJaGVhZC0+d3JpdGVfdmFyMSA9IGRvbWFpbjsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghZG9tYWluKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzc2NhbmYoZGF0YSwgVE9NT1lPX0tFWVdPUkRfVVNFX1BST0ZJTEUgIiV1IiwgJnByb2ZpbGUpID09IDEKKwkgICAgJiYgcHJvZmlsZSA8IFRPTU9ZT19NQVhfUFJPRklMRVMpIHsKKwkJaWYgKHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSB8fCAhdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCQlkb21haW4tPnByb2ZpbGUgPSAodTgpIHByb2ZpbGU7CisJCXJldHVybiAwOworCX0KKwlpZiAoIXN0cmNtcChkYXRhLCBUT01PWU9fS0VZV09SRF9JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQpKSB7CisJCXRvbW95b19zZXRfZG9tYWluX2ZsYWcoZG9tYWluLCBpc19kZWxldGUsCisJCQkgICAgICAgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHRvbW95b193cml0ZV9maWxlX3BvbGljeShkYXRhLCBkb21haW4sIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3ByaW50X3NpbmdsZV9wYXRoX2FjbCAtIFByaW50IGEgc2luZ2xlIHBhdGggQUNMIGVudHJ5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKiBAcHRyOiAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fcHJpbnRfc2luZ2xlX3BhdGhfYWNsKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAorCQkJCQkgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICoKKwkJCQkJIHB0cikKK3sKKwlpbnQgcG9zOworCXU4IGJpdDsKKwljb25zdCBjaGFyICphdG1hcmsgPSAiIjsKKwljb25zdCBjaGFyICpmaWxlbmFtZTsKKwljb25zdCB1MTYgcGVybSA9IHB0ci0+cGVybTsKKworCWZpbGVuYW1lID0gcHRyLT5maWxlbmFtZS0+bmFtZTsKKwlmb3IgKGJpdCA9IGhlYWQtPnJlYWRfYml0OyBiaXQgPCBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTjsKKwkgICAgIGJpdCsrKSB7CisJCWNvbnN0IGNoYXIgKm1zZzsKKwkJaWYgKCEocGVybSAmICgxIDw8IGJpdCkpKQorCQkJY29udGludWU7CisJCS8qIFByaW50ICJyZWFkL3dyaXRlIiBpbnN0ZWFkIG9mICJyZWFkIiBhbmQgIndyaXRlIi4gKi8KKwkJaWYgKChiaXQgPT0gVE9NT1lPX1RZUEVfUkVBRF9BQ0wgfHwKKwkJICAgICBiaXQgPT0gVE9NT1lPX1RZUEVfV1JJVEVfQUNMKQorCQkgICAgJiYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCkpKQorCQkJY29udGludWU7CisJCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKGJpdCk7CisJCXBvcyA9IGhlYWQtPnJlYWRfYXZhaWw7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiYWxsb3dfJXMgJXMlc1xuIiwgbXNnLAorCQkJCSAgICAgIGF0bWFyaywgZmlsZW5hbWUpKQorCQkJZ290byBvdXQ7CisJfQorCWhlYWQtPnJlYWRfYml0ID0gMDsKKwlyZXR1cm4gdHJ1ZTsKKyBvdXQ6CisJaGVhZC0+cmVhZF9iaXQgPSBiaXQ7CisJaGVhZC0+cmVhZF9hdmFpbCA9IHBvczsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgorICogdG9tb3lvX3ByaW50X2RvdWJsZV9wYXRoX2FjbCAtIFByaW50IGEgZG91YmxlIHBhdGggQUNMIGVudHJ5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKiBAcHRyOiAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fcHJpbnRfZG91YmxlX3BhdGhfYWNsKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAorCQkJCQkgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICoKKwkJCQkJIHB0cikKK3sKKwlpbnQgcG9zOworCWNvbnN0IGNoYXIgKmF0bWFyazEgPSAiIjsKKwljb25zdCBjaGFyICphdG1hcmsyID0gIiI7CisJY29uc3QgY2hhciAqZmlsZW5hbWUxOworCWNvbnN0IGNoYXIgKmZpbGVuYW1lMjsKKwljb25zdCB1OCBwZXJtID0gcHRyLT5wZXJtOworCXU4IGJpdDsKKworCWZpbGVuYW1lMSA9IHB0ci0+ZmlsZW5hbWUxLT5uYW1lOworCWZpbGVuYW1lMiA9IHB0ci0+ZmlsZW5hbWUyLT5uYW1lOworCWZvciAoYml0ID0gaGVhZC0+cmVhZF9iaXQ7IGJpdCA8IFRPTU9ZT19NQVhfRE9VQkxFX1BBVEhfT1BFUkFUSU9OOworCSAgICAgYml0KyspIHsKKwkJY29uc3QgY2hhciAqbXNnOworCQlpZiAoIShwZXJtICYgKDEgPDwgYml0KSkpCisJCQljb250aW51ZTsKKwkJbXNnID0gdG9tb3lvX2RwMmtleXdvcmQoYml0KTsKKwkJcG9zID0gaGVhZC0+cmVhZF9hdmFpbDsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICJhbGxvd18lcyAlcyVzICVzJXNcbiIsIG1zZywKKwkJCQkgICAgICBhdG1hcmsxLCBmaWxlbmFtZTEsIGF0bWFyazIsIGZpbGVuYW1lMikpCisJCQlnb3RvIG91dDsKKwl9CisJaGVhZC0+cmVhZF9iaXQgPSAwOworCXJldHVybiB0cnVlOworIG91dDoKKwloZWFkLT5yZWFkX2JpdCA9IGJpdDsKKwloZWFkLT5yZWFkX2F2YWlsID0gcG9zOworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9fcHJpbnRfZW50cnkgLSBQcmludCBhbiBBQ0wgZW50cnkuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqIEBwdHI6ICBQb2ludGVyIHRvIGFuIEFDTCBlbnRyeS4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fcHJpbnRfZW50cnkoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCisJCQkgICAgICAgc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyKQoreworCWNvbnN0IHU4IGFjbF90eXBlID0gdG9tb3lvX2FjbF90eXBlMihwdHIpOworCisJaWYgKGFjbF90eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQorCQlyZXR1cm4gdHJ1ZTsKKwlpZiAoYWNsX3R5cGUgPT0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMKSB7CisJCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsCisJCQk9IGNvbnRhaW5lcl9vZihwdHIsCisJCQkJICAgICAgIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKKwkJCQkgICAgICAgaGVhZCk7CisJCXJldHVybiB0b21veW9fcHJpbnRfc2luZ2xlX3BhdGhfYWNsKGhlYWQsIGFjbCk7CisJfQorCWlmIChhY2xfdHlwZSA9PSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpIHsKKwkJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2wKKwkJCT0gY29udGFpbmVyX29mKHB0ciwKKwkJCQkgICAgICAgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgICAgICBoZWFkKTsKKwkJcmV0dXJuIHRvbW95b19wcmludF9kb3VibGVfcGF0aF9hY2woaGVhZCwgYWNsKTsKKwl9CisJQlVHKCk7IC8qIFRoaXMgbXVzdCBub3QgaGFwcGVuLiAqLworCXJldHVybiBmYWxzZTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9kb21haW5fcG9saWN5IC0gUmVhZCBkb21haW4gcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX2RvbWFpbl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqZHBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICphcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlpZiAoaGVhZC0+cmVhZF9lb2YpCisJCXJldHVybiAwOworCWlmIChoZWFkLT5yZWFkX3N0ZXAgPT0gMCkKKwkJaGVhZC0+cmVhZF9zdGVwID0gMTsKKwlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShkcG9zLCBoZWFkLT5yZWFkX3ZhcjEsICZ0b21veW9fZG9tYWluX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCQljb25zdCBjaGFyICpxdW90YV9leGNlZWRlZCA9ICIiOworCQljb25zdCBjaGFyICp0cmFuc2l0aW9uX2ZhaWxlZCA9ICIiOworCQljb25zdCBjaGFyICppZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQgPSAiIjsKKwkJZG9tYWluID0gbGlzdF9lbnRyeShkcG9zLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvLCBsaXN0KTsKKwkJaWYgKGhlYWQtPnJlYWRfc3RlcCAhPSAxKQorCQkJZ290byBhY2xfbG9vcDsKKwkJaWYgKGRvbWFpbi0+aXNfZGVsZXRlZCAmJiAhaGVhZC0+cmVhZF9zaW5nbGVfZG9tYWluKQorCQkJY29udGludWU7CisJCS8qIFByaW50IGRvbWFpbm5hbWUgYW5kIGZsYWdzLiAqLworCQlpZiAoZG9tYWluLT5xdW90YV93YXJuZWQpCisJCQlxdW90YV9leGNlZWRlZCA9ICJxdW90YV9leGNlZWRlZFxuIjsKKwkJaWYgKGRvbWFpbi0+ZmxhZ3MgJiBUT01PWU9fRE9NQUlOX0ZMQUdTX1RSQU5TSVRJT05fRkFJTEVEKQorCQkJdHJhbnNpdGlvbl9mYWlsZWQgPSAidHJhbnNpdGlvbl9mYWlsZWRcbiI7CisJCWlmIChkb21haW4tPmZsYWdzICYKKwkJICAgIFRPTU9ZT19ET01BSU5fRkxBR1NfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEKQorCQkJaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkCisJCQkJPSBUT01PWU9fS0VZV09SRF9JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQgIlxuIjsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsCisJCQkJICAgICAgIiVzXG4iIFRPTU9ZT19LRVlXT1JEX1VTRV9QUk9GSUxFICIldVxuIgorCQkJCSAgICAgICIlcyVzJXNcbiIsIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSwKKwkJCQkgICAgICBkb21haW4tPnByb2ZpbGUsIHF1b3RhX2V4Y2VlZGVkLAorCQkJCSAgICAgIHRyYW5zaXRpb25fZmFpbGVkLAorCQkJCSAgICAgIGlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJCWhlYWQtPnJlYWRfc3RlcCA9IDI7CithY2xfbG9vcDoKKwkJaWYgKGhlYWQtPnJlYWRfc3RlcCA9PSAzKQorCQkJZ290byB0YWlsX21hcms7CisJCS8qIFByaW50IEFDTCBlbnRyaWVzIGluIHRoZSBkb21haW4uICovCisJCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShhcG9zLCBoZWFkLT5yZWFkX3ZhcjIsCisJCQkJICAgICAgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCkgeworCQkJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyCisJCQkJPSBsaXN0X2VudHJ5KGFwb3MsIHN0cnVjdCB0b21veW9fYWNsX2luZm8sCisJCQkJCSAgICAgIGxpc3QpOworCQkJaWYgKCF0b21veW9fcHJpbnRfZW50cnkoaGVhZCwgcHRyKSkgeworCQkJCWRvbmUgPSBmYWxzZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJCWlmICghZG9uZSkKKwkJCWJyZWFrOworCQloZWFkLT5yZWFkX3N0ZXAgPSAzOwordGFpbF9tYXJrOgorCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgIlxuIikpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJCWhlYWQtPnJlYWRfc3RlcCA9IDE7CisJCWlmIChoZWFkLT5yZWFkX3NpbmdsZV9kb21haW4pCisJCQlicmVhazsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZG9tYWluX3Byb2ZpbGUgLSBBc3NpZ24gcHJvZmlsZSBmb3Igc3BlY2lmaWVkIGRvbWFpbi4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRUlOVkFMIG90aGVyd2lzZS4KKyAqCisgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gZG9pbmcKKyAqCisgKiAgICAgKCBlY2hvICJzZWxlY3QgIiAkZG9tYWlubmFtZTsgZWNobyAidXNlX3Byb2ZpbGUgIiAkcHJvZmlsZSApIHwKKyAqICAgICAvdXNyL2xpYi9jY3MvbG9hZHBvbGljeSAtZAorICovCitzdGF0aWMgaW50IHRvbW95b193cml0ZV9kb21haW5fcHJvZmlsZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCWNoYXIgKmNwID0gc3RyY2hyKGRhdGEsICcgJyk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCXVuc2lnbmVkIGxvbmcgcHJvZmlsZTsKKworCWlmICghY3ApCisJCXJldHVybiAtRUlOVkFMOworCSpjcCA9ICdcMCc7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJZG9tYWluID0gdG9tb3lvX2ZpbmRfZG9tYWluKGNwICsgMSk7CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWlmIChzdHJpY3Rfc3RydG91bChkYXRhLCAxMCwgJnByb2ZpbGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZG9tYWluICYmIHByb2ZpbGUgPCBUT01PWU9fTUFYX1BST0ZJTEVTCisJICAgICYmICh0b21veW9fcHJvZmlsZV9wdHJbcHJvZmlsZV0gfHwgIXRvbW95b19wb2xpY3lfbG9hZGVkKSkKKwkJZG9tYWluLT5wcm9maWxlID0gKHU4KSBwcm9maWxlOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2RvbWFpbl9wcm9maWxlIC0gUmVhZCBvbmx5IGRvbWFpbm5hbWUgYW5kIHByb2ZpbGUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIGxpc3Qgb2YgcHJvZmlsZSBudW1iZXIgYW5kIGRvbWFpbm5hbWUgcGFpcnMuCisgKgorICogVGhpcyBpcyBlcXVpdmFsZW50IHRvIGRvaW5nCisgKgorICogICAgIGdyZXAgLUEgMSAnXjxrZXJuZWw+JyAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vZG9tYWluX3BvbGljeSB8CisgKiAgICAgYXdrICcgeyBpZiAoIGRvbWFpbm5hbWUgPT0gIiIgKSB7IGlmICggJDEgPT0gIjxrZXJuZWw+IiApCisgKiAgICAgZG9tYWlubmFtZSA9ICQwOyB9IGVsc2UgaWYgKCAkMSA9PSAidXNlX3Byb2ZpbGUiICkgeworICogICAgIHByaW50ICQyICIgIiBkb21haW5uYW1lOyBkb21haW5uYW1lID0gIiI7IH0gfSA7ICcKKyAqLworc3RhdGljIGludCB0b21veW9fcmVhZF9kb21haW5fcHJvZmlsZShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWlmIChoZWFkLT5yZWFkX2VvZikKKwkJcmV0dXJuIDA7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjEsICZ0b21veW9fZG9tYWluX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCQlkb21haW4gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19kb21haW5faW5mbywgbGlzdCk7CisJCWlmIChkb21haW4tPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsICIldSAlc1xuIiwgZG9tYWluLT5wcm9maWxlLAorCQkJCSAgICAgIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwloZWFkLT5yZWFkX2VvZiA9IGRvbmU7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX3BpZDogU3BlY2lmeSBQSUQgdG8gb2J0YWluIGRvbWFpbm5hbWUuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX3BpZChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBpZDsKKwkvKiBObyBlcnJvciBjaGVjay4gKi8KKwlzdHJpY3Rfc3RydG91bChoZWFkLT53cml0ZV9idWYsIDEwLCAmcGlkKTsKKwloZWFkLT5yZWFkX3N0ZXAgPSAoaW50KSBwaWQ7CisJaGVhZC0+cmVhZF9lb2YgPSBmYWxzZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9waWQgLSBHZXQgZG9tYWlubmFtZSBvZiB0aGUgc3BlY2lmaWVkIFBJRC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdGhlIGRvbWFpbm5hbWUgd2hpY2ggdGhlIHNwZWNpZmllZCBQSUQgaXMgaW4gb24gc3VjY2VzcywKKyAqIGVtcHR5IHN0cmluZyBvdGhlcndpc2UuCisgKiBUaGUgUElEIGlzIHNwZWNpZmllZCBieSB0b21veW9fd3JpdGVfcGlkKCkgc28gdGhhdCB0aGUgdXNlciBjYW4gb2J0YWluCisgKiB1c2luZyByZWFkKCkvd3JpdGUoKSBpbnRlcmZhY2UgcmF0aGVyIHRoYW4gc3lzY3RsKCkgaW50ZXJmYWNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX3BpZChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoaGVhZC0+cmVhZF9hdmFpbCA9PSAwICYmICFoZWFkLT5yZWFkX2VvZikgeworCQljb25zdCBpbnQgcGlkID0gaGVhZC0+cmVhZF9zdGVwOworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IE5VTEw7CisJCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIFNUQVJUICoqKioqLworCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlwID0gZmluZF90YXNrX2J5X3ZwaWQocGlkKTsKKwkJaWYgKHApCisJCQlkb21haW4gPSB0b21veW9fcmVhbF9kb21haW4ocCk7CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gRU5EICoqKioqLworCQlpZiAoZG9tYWluKQorCQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJWQgJXUgJXMiLCBwaWQsIGRvbWFpbi0+cHJvZmlsZSwKKwkJCQkJIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7CisJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2V4Y2VwdGlvbl9wb2xpY3kgLSBXcml0ZSBleGNlcHRpb24gcG9saWN5LgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fd3JpdGVfZXhjZXB0aW9uX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOworCWJvb2wgaXNfZGVsZXRlID0gdG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0RFTEVURSk7CisKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0tFRVBfRE9NQUlOKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeShkYXRhLCBmYWxzZSwKKwkJCQkJCQkgaXNfZGVsZXRlKTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX05PX0tFRVBfRE9NQUlOKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeShkYXRhLCB0cnVlLCBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4pKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koZGF0YSwgZmFsc2UsCisJCQkJCQkJICAgICAgaXNfZGVsZXRlKTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX05PX0lOSVRJQUxJWkVfRE9NQUlOKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KGRhdGEsIHRydWUsCisJCQkJCQkJICAgICAgaXNfZGVsZXRlKTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0FMSUFTKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9hbGlhc19wb2xpY3koZGF0YSwgaXNfZGVsZXRlKTsKKwlpZiAodG9tb3lvX3N0cl9zdGFydHMoJmRhdGEsIFRPTU9ZT19LRVlXT1JEX0FMTE9XX1JFQUQpKQorCQlyZXR1cm4gdG9tb3lvX3dyaXRlX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShkYXRhLCBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfRklMRV9QQVRURVJOKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9wYXR0ZXJuX3BvbGljeShkYXRhLCBpc19kZWxldGUpOworCWlmICh0b21veW9fc3RyX3N0YXJ0cygmZGF0YSwgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFKSkKKwkJcmV0dXJuIHRvbW95b193cml0ZV9ub19yZXdyaXRlX3BvbGljeShkYXRhLCBpc19kZWxldGUpOworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2V4Y2VwdGlvbl9wb2xpY3kgLSBSZWFkIGV4Y2VwdGlvbiBwb2xpY3kuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVJTlZBTCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfZXhjZXB0aW9uX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7CisJCXN3aXRjaCAoaGVhZC0+cmVhZF9zdGVwKSB7CisJCWNhc2UgMDoKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSAxOworCQljYXNlIDE6CisJCQlpZiAoIXRvbW95b19yZWFkX2RvbWFpbl9rZWVwZXJfcG9saWN5KGhlYWQpKQorCQkJCWJyZWFrOworCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDI7CisJCWNhc2UgMjoKKwkJCWlmICghdG9tb3lvX3JlYWRfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KGhlYWQpKQorCQkJCWJyZWFrOworCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDM7CisJCWNhc2UgMzoKKwkJCWhlYWQtPnJlYWRfdmFyMiA9IE5VTEw7CisJCQloZWFkLT5yZWFkX3N0ZXAgPSA0OworCQljYXNlIDQ6CisJCQlpZiAoIXRvbW95b19yZWFkX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gNTsKKwkJY2FzZSA1OgorCQkJaWYgKCF0b21veW9fcmVhZF9hbGlhc19wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gNjsKKwkJY2FzZSA2OgorCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDc7CisJCWNhc2UgNzoKKwkJCWlmICghdG9tb3lvX3JlYWRfZmlsZV9wYXR0ZXJuKGhlYWQpKQorCQkJCWJyZWFrOworCQkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKKwkJCWhlYWQtPnJlYWRfc3RlcCA9IDg7CisJCWNhc2UgODoKKwkJCWlmICghdG9tb3lvX3JlYWRfbm9fcmV3cml0ZV9wb2xpY3koaGVhZCkpCisJCQkJYnJlYWs7CisJCQloZWFkLT5yZWFkX3ZhcjIgPSBOVUxMOworCQkJaGVhZC0+cmVhZF9zdGVwID0gOTsKKwkJY2FzZSA5OgorCQkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogcGF0aCB0byBwb2xpY3kgbG9hZGVyICovCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX2xvYWRlciA9ICIvc2Jpbi90b21veW8taW5pdCI7CisKKy8qKgorICogdG9tb3lvX3BvbGljeV9sb2FkZXJfZXhpc3RzIC0gQ2hlY2sgd2hldGhlciAvc2Jpbi90b21veW8taW5pdCBleGlzdHMuCisgKgorICogUmV0dXJucyB0cnVlIGlmIC9zYmluL3RvbW95by1pbml0IGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fcG9saWN5X2xvYWRlcl9leGlzdHModm9pZCkKK3sKKwkvKgorCSAqIERvbid0IGFjdGl2YXRlIE1BQyBpZiB0aGUgcG9saWN5IGxvYWRlciBkb2Vzbid0IGV4aXN0LgorCSAqIElmIHRoZSBpbml0cmQgaW5jbHVkZXMgL3NiaW4vaW5pdCBidXQgcmVhbC1yb290LWRldiBoYXMgbm90CisJICogbW91bnRlZCBvbiAvIHlldCwgYWN0aXZhdGluZyBNQUMgd2lsbCBibG9jayB0aGUgc3lzdGVtIHNpbmNlCisJICogcG9saWNpZXMgYXJlIG5vdCBsb2FkZWQgeWV0LgorCSAqIFRodXMsIGxldCBkb19leGVjdmUoKSBjYWxsIHRoaXMgZnVuY3Rpb24gZXZlcnl0aW1lLgorCSAqLworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisKKwlpZiAocGF0aF9sb29rdXAodG9tb3lvX2xvYWRlciwgTE9PS1VQX0ZPTExPVywgJm5kKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJOb3QgYWN0aXZhdGluZyBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wgbm93ICIKKwkJICAgICAgICJzaW5jZSAlcyBkb2Vzbid0IGV4aXN0LlxuIiwgdG9tb3lvX2xvYWRlcik7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcGF0aF9wdXQoJm5kLnBhdGgpOworCXJldHVybiB0cnVlOworfQorCisvKioKKyAqIHRvbW95b19sb2FkX3BvbGljeSAtIFJ1biBleHRlcm5hbCBwb2xpY3kgbG9hZGVyIHRvIGxvYWQgcG9saWN5LgorICoKKyAqIEBmaWxlbmFtZTogVGhlIHByb2dyYW0gYWJvdXQgdG8gc3RhcnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBAZmlsZW5hbWUgaXMgL3NiaW4vaW5pdCAsIGFuZCBpZiBzbworICogaW52b2tlIC9zYmluL3RvbW95by1pbml0IGFuZCB3YWl0IGZvciB0aGUgdGVybWluYXRpb24gb2YgL3NiaW4vdG9tb3lvLWluaXQKKyAqIGFuZCB0aGVuIGNvbnRpbnVlcyBpbnZvY2F0aW9uIG9mIC9zYmluL2luaXQuCisgKiAvc2Jpbi90b21veW8taW5pdCByZWFkcyBwb2xpY3kgZmlsZXMgaW4gL2V0Yy90b21veW8vIGRpcmVjdG9yeSBhbmQKKyAqIHdyaXRlcyB0byAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZXMuCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCit2b2lkIHRvbW95b19sb2FkX3BvbGljeShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwljaGFyICphcmd2WzJdOworCWNoYXIgKmVudnBbM107CisKKwlpZiAodG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCXJldHVybjsKKwkvKgorCSAqIENoZWNrIGZpbGVuYW1lIGlzIC9zYmluL2luaXQgb3IgL3NiaW4vdG9tb3lvLXN0YXJ0LgorCSAqIC9zYmluL3RvbW95by1zdGFydCBpcyBhIGR1bW15IGZpbGVuYW1lIGluIGNhc2Ugd2hlcmUgL3NiaW4vaW5pdCBjYW4ndAorCSAqIGJlIHBhc3NlZC4KKwkgKiBZb3UgY2FuIGNyZWF0ZSAvc2Jpbi90b21veW8tc3RhcnQgYnkKKwkgKiAibG4gLXMgL2Jpbi90cnVlIC9zYmluL3RvbW95by1zdGFydCIuCisJICovCisJaWYgKHN0cmNtcChmaWxlbmFtZSwgIi9zYmluL2luaXQiKSAmJgorCSAgICBzdHJjbXAoZmlsZW5hbWUsICIvc2Jpbi90b21veW8tc3RhcnQiKSkKKwkJcmV0dXJuOworCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZXJfZXhpc3RzKCkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0lORk8gIkNhbGxpbmcgJXMgdG8gbG9hZCBwb2xpY3kuIFBsZWFzZSB3YWl0LlxuIiwKKwkgICAgICAgdG9tb3lvX2xvYWRlcik7CisJYXJndlswXSA9IChjaGFyICopIHRvbW95b19sb2FkZXI7CisJYXJndlsxXSA9IE5VTEw7CisJZW52cFswXSA9ICJIT01FPS8iOworCWVudnBbMV0gPSAiUEFUSD0vc2JpbjovYmluOi91c3Ivc2JpbjovdXNyL2JpbiI7CisJZW52cFsyXSA9IE5VTEw7CisJY2FsbF91c2VybW9kZWhlbHBlcihhcmd2WzBdLCBhcmd2LCBlbnZwLCAxKTsKKworCXByaW50ayhLRVJOX0lORk8gIlRPTU9ZTzogMi4yLjAtcHJlICAgMjAwOS8wMi8wMVxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sIGFjdGl2YXRlZC5cbiIpOworCXRvbW95b19wb2xpY3lfbG9hZGVkID0gdHJ1ZTsKKwl7IC8qIENoZWNrIGFsbCBwcm9maWxlcyBjdXJyZW50bHkgYXNzaWduZWQgdG8gZG9tYWlucyBhcmUgZGVmaW5lZC4gKi8KKwkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJCWNvbnN0IHU4IHByb2ZpbGUgPSBkb21haW4tPnByb2ZpbGU7CisJCQlpZiAodG9tb3lvX3Byb2ZpbGVfcHRyW3Byb2ZpbGVdKQorCQkJCWNvbnRpbnVlOworCQkJcGFuaWMoIlByb2ZpbGUgJXUgKHVzZWQgYnkgJyVzJykgbm90IGRlZmluZWQuXG4iLAorCQkJICAgICAgcHJvZmlsZSwgZG9tYWluLT5kb21haW5uYW1lLT5uYW1lKTsKKwkJfQorCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJfQorfQorCisvKioKKyAqIHRvbW95b19yZWFkX3ZlcnNpb246IEdldCB2ZXJzaW9uLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyB2ZXJzaW9uIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX3ZlcnNpb24oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJaWYgKCFoZWFkLT5yZWFkX2VvZikgeworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIyLjIuMC1wcmUiKTsKKwkJaGVhZC0+cmVhZF9lb2YgPSB0cnVlOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9zZWxmX2RvbWFpbiAtIEdldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZG9tYWlubmFtZS4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgcHJvY2VzcydzIGRvbWFpbm5hbWUuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3JlYWRfc2VsZl9kb21haW4oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJaWYgKCFoZWFkLT5yZWFkX2VvZikgeworCQkvKgorCQkgKiB0b21veW9fZG9tYWluKCktPmRvbWFpbm5hbWUgIT0gTlVMTAorCQkgKiBiZWNhdXNlIGV2ZXJ5IHByb2Nlc3MgYmVsb25ncyB0byBhIGRvbWFpbiBhbmQKKwkJICogdGhlIGRvbWFpbidzIG5hbWUgY2Fubm90IGJlIE5VTEwuCisJCSAqLworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICIlcyIsIHRvbW95b19kb21haW4oKS0+ZG9tYWlubmFtZS0+bmFtZSk7CisJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX29wZW5fY29udHJvbCAtIG9wZW4oKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQHR5cGU6IFR5cGUgb2YgaW50ZXJmYWNlLgorICogQGZpbGU6IFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBBc3NvY2lhdGVzIHBvbGljeSBoYW5kbGVyIGFuZCByZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX29wZW5fY29udHJvbChjb25zdCB1OCB0eXBlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCA9IHRvbW95b19hbGxvYyhzaXplb2YoKmhlYWQpKTsKKworCWlmICghaGVhZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbXV0ZXhfaW5pdCgmaGVhZC0+aW9fc2VtKTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFRPTU9ZT19ET01BSU5QT0xJQ1k6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9kb21haW5fcG9saWN5ICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX2RvbWFpbl9wb2xpY3k7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9kb21haW5fcG9saWN5OworCQlicmVhazsKKwljYXNlIFRPTU9ZT19FWENFUFRJT05QT0xJQ1k6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9leGNlcHRpb25fcG9saWN5ICovCisJCWhlYWQtPndyaXRlID0gdG9tb3lvX3dyaXRlX2V4Y2VwdGlvbl9wb2xpY3k7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9leGNlcHRpb25fcG9saWN5OworCQlicmVhazsKKwljYXNlIFRPTU9ZT19TRUxGRE9NQUlOOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vc2VsZl9kb21haW4gKi8KKwkJaGVhZC0+cmVhZCA9IHRvbW95b19yZWFkX3NlbGZfZG9tYWluOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19ET01BSU5fU1RBVFVTOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vLmRvbWFpbl9zdGF0dXMgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfZG9tYWluX3Byb2ZpbGU7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9kb21haW5fcHJvZmlsZTsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fUFJPQ0VTU19TVEFUVVM6CisJCS8qIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8ucHJvY2Vzc19zdGF0dXMgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfcGlkOworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfcGlkOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19WRVJTSU9OOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vdmVyc2lvbiAqLworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfdmVyc2lvbjsKKwkJaGVhZC0+cmVhZGJ1Zl9zaXplID0gMTI4OworCQlicmVhazsKKwljYXNlIFRPTU9ZT19NRU1JTkZPOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vbWVtaW5mbyAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGE7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9tZW1vcnlfY291bnRlcjsKKwkJaGVhZC0+cmVhZGJ1Zl9zaXplID0gNTEyOworCQlicmVhazsKKwljYXNlIFRPTU9ZT19QUk9GSUxFOgorCQkvKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vcHJvZmlsZSAqLworCQloZWFkLT53cml0ZSA9IHRvbW95b193cml0ZV9wcm9maWxlOworCQloZWFkLT5yZWFkID0gdG9tb3lvX3JlYWRfcHJvZmlsZTsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fTUFOQUdFUjoKKwkJLyogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL21hbmFnZXIgKi8KKwkJaGVhZC0+d3JpdGUgPSB0b21veW9fd3JpdGVfbWFuYWdlcl9wb2xpY3k7CisJCWhlYWQtPnJlYWQgPSB0b21veW9fcmVhZF9tYW5hZ2VyX3BvbGljeTsKKwkJYnJlYWs7CisJfQorCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKSB7CisJCS8qCisJCSAqIE5vIG5lZWQgdG8gYWxsb2NhdGUgcmVhZF9idWYgc2luY2UgaXQgaXMgbm90IG9wZW5lZAorCQkgKiBmb3IgcmVhZGluZy4KKwkJICovCisJCWhlYWQtPnJlYWQgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmICghaGVhZC0+cmVhZGJ1Zl9zaXplKQorCQkJaGVhZC0+cmVhZGJ1Zl9zaXplID0gNDA5NiAqIDI7CisJCWhlYWQtPnJlYWRfYnVmID0gdG9tb3lvX2FsbG9jKGhlYWQtPnJlYWRidWZfc2l6ZSk7CisJCWlmICghaGVhZC0+cmVhZF9idWYpIHsKKwkJCXRvbW95b19mcmVlKGhlYWQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKSB7CisJCS8qCisJCSAqIE5vIG5lZWQgdG8gYWxsb2NhdGUgd3JpdGVfYnVmIHNpbmNlIGl0IGlzIG5vdCBvcGVuZWQKKwkJICogZm9yIHdyaXRpbmcuCisJCSAqLworCQloZWFkLT53cml0ZSA9IE5VTEw7CisJfSBlbHNlIGlmIChoZWFkLT53cml0ZSkgeworCQloZWFkLT53cml0ZWJ1Zl9zaXplID0gNDA5NiAqIDI7CisJCWhlYWQtPndyaXRlX2J1ZiA9IHRvbW95b19hbGxvYyhoZWFkLT53cml0ZWJ1Zl9zaXplKTsKKwkJaWYgKCFoZWFkLT53cml0ZV9idWYpIHsKKwkJCXRvbW95b19mcmVlKGhlYWQtPnJlYWRfYnVmKTsKKwkJCXRvbW95b19mcmVlKGhlYWQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaGVhZDsKKwkvKgorCSAqIENhbGwgdGhlIGhhbmRsZXIgbm93IGlmIHRoZSBmaWxlIGlzCisJICogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL3NlbGZfZG9tYWluCisJICogc28gdGhhdCB0aGUgdXNlciBjYW4gdXNlCisJICogY2F0IDwgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvL3NlbGZfZG9tYWluIgorCSAqIHRvIGtub3cgdGhlIGN1cnJlbnQgcHJvY2VzcydzIGRvbWFpbm5hbWUuCisJICovCisJaWYgKHR5cGUgPT0gVE9NT1lPX1NFTEZET01BSU4pCisJCXRvbW95b19yZWFkX2NvbnRyb2woZmlsZSwgTlVMTCwgMCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfY29udHJvbCAtIHJlYWQoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGZpbGU6ICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqIEBidWZmZXI6ICAgICBQb2luZXIgdG8gYnVmZmVyIHRvIHdyaXRlIHRvLgorICogQGJ1ZmZlcl9sZW46IFNpemUgb2YgQGJ1ZmZlci4KKyAqCisgKiBSZXR1cm5zIGJ5dGVzIHJlYWQgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b19yZWFkX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgICAgICAgY29uc3QgaW50IGJ1ZmZlcl9sZW4pCit7CisJaW50IGxlbiA9IDA7CisJc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciAqY3A7CisKKwlpZiAoIWhlYWQtPnJlYWQpCisJCXJldHVybiAtRU5PU1lTOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmhlYWQtPmlvX3NlbSkpCisJCXJldHVybiAtRUlOVFI7CisJLyogQ2FsbCB0aGUgcG9saWN5IGhhbmRsZXIuICovCisJbGVuID0gaGVhZC0+cmVhZChoZWFkKTsKKwlpZiAobGVuIDwgMCkKKwkJZ290byBvdXQ7CisJLyogV3JpdGUgdG8gYnVmZmVyLiAqLworCWxlbiA9IGhlYWQtPnJlYWRfYXZhaWw7CisJaWYgKGxlbiA+IGJ1ZmZlcl9sZW4pCisJCWxlbiA9IGJ1ZmZlcl9sZW47CisJaWYgKCFsZW4pCisJCWdvdG8gb3V0OworCS8qIGhlYWQtPnJlYWRfYnVmIGNoYW5nZXMgYnkgc29tZSBmdW5jdGlvbnMuICovCisJY3AgPSBoZWFkLT5yZWFkX2J1ZjsKKwlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgY3AsIGxlbikpIHsKKwkJbGVuID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCWhlYWQtPnJlYWRfYXZhaWwgLT0gbGVuOworCW1lbW1vdmUoY3AsIGNwICsgbGVuLCBoZWFkLT5yZWFkX2F2YWlsKTsKKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZoZWFkLT5pb19zZW0pOworCXJldHVybiBsZW47Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2NvbnRyb2wgLSB3cml0ZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogICAgICAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQGJ1ZmZlcjogICAgIFBvaW50ZXIgdG8gYnVmZmVyIHRvIHJlYWQgZnJvbS4KKyAqIEBidWZmZXJfbGVuOiBTaXplIG9mIEBidWZmZXIuCisgKgorICogUmV0dXJucyBAYnVmZmVyX2xlbiBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJY29uc3QgaW50IGJ1ZmZlcl9sZW4pCit7CisJc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IGVycm9yID0gYnVmZmVyX2xlbjsKKwlpbnQgYXZhaWxfbGVuID0gYnVmZmVyX2xlbjsKKwljaGFyICpjcDAgPSBoZWFkLT53cml0ZV9idWY7CisKKwlpZiAoIWhlYWQtPndyaXRlKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmZmVyLCBidWZmZXJfbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJLyogRG9uJ3QgYWxsb3cgdXBkYXRpbmcgcG9saWNpZXMgYnkgbm9uIG1hbmFnZXIgcHJvZ3JhbXMuICovCisJaWYgKGhlYWQtPndyaXRlICE9IHRvbW95b193cml0ZV9waWQgJiYKKwkgICAgaGVhZC0+d3JpdGUgIT0gdG9tb3lvX3dyaXRlX2RvbWFpbl9wb2xpY3kgJiYKKwkgICAgIXRvbW95b19pc19wb2xpY3lfbWFuYWdlcigpKQorCQlyZXR1cm4gLUVQRVJNOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmhlYWQtPmlvX3NlbSkpCisJCXJldHVybiAtRUlOVFI7CisJLyogUmVhZCBhIGxpbmUgYW5kIGRpc3BhdGNoIGl0IHRvIHRoZSBwb2xpY3kgaGFuZGxlci4gKi8KKwl3aGlsZSAoYXZhaWxfbGVuID4gMCkgeworCQljaGFyIGM7CisJCWlmIChoZWFkLT53cml0ZV9hdmFpbCA+PSBoZWFkLT53cml0ZWJ1Zl9zaXplIC0gMSkgeworCQkJZXJyb3IgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoZ2V0X3VzZXIoYywgYnVmZmVyKSkgeworCQkJZXJyb3IgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJYnVmZmVyKys7CisJCWF2YWlsX2xlbi0tOworCQljcDBbaGVhZC0+d3JpdGVfYXZhaWwrK10gPSBjOworCQlpZiAoYyAhPSAnXG4nKQorCQkJY29udGludWU7CisJCWNwMFtoZWFkLT53cml0ZV9hdmFpbCAtIDFdID0gJ1wwJzsKKwkJaGVhZC0+d3JpdGVfYXZhaWwgPSAwOworCQl0b21veW9fbm9ybWFsaXplX2xpbmUoY3AwKTsKKwkJaGVhZC0+d3JpdGUoaGVhZCk7CisJfQorCW11dGV4X3VubG9jaygmaGVhZC0+aW9fc2VtKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2Nsb3NlX2NvbnRyb2wgLSBjbG9zZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICoKKyAqIFJlbGVhc2VzIG1lbW9yeSBhbmQgcmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IHRvbW95b19jbG9zZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJLyogUmVsZWFzZSBtZW1vcnkgdXNlZCBmb3IgcG9saWN5IEkvTy4gKi8KKwl0b21veW9fZnJlZShoZWFkLT5yZWFkX2J1Zik7CisJaGVhZC0+cmVhZF9idWYgPSBOVUxMOworCXRvbW95b19mcmVlKGhlYWQtPndyaXRlX2J1Zik7CisJaGVhZC0+d3JpdGVfYnVmID0gTlVMTDsKKwl0b21veW9fZnJlZShoZWFkKTsKKwloZWFkID0gTlVMTDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19hbGxvY19hY2xfZWxlbWVudCAtIEFsbG9jYXRlIHBlcm1hbmVudCBtZW1vcnkgZm9yIEFDTCBlbnRyeS4KKyAqCisgKiBAYWNsX3R5cGU6ICBUeXBlIG9mIEFDTCBlbnRyeS4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gdGhlIEFDTCBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLwordm9pZCAqdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50KGNvbnN0IHU4IGFjbF90eXBlKQoreworCWludCBsZW47CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCisJc3dpdGNoIChhY2xfdHlwZSkgeworCWNhc2UgVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMOgorCQlsZW4gPSBzaXplb2Yoc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkKTsKKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0w6CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsKKwl9CisJcHRyID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQobGVuKTsKKwlpZiAoIXB0cikKKwkJcmV0dXJuIE5VTEw7CisJcHRyLT50eXBlID0gYWNsX3R5cGU7CisJcmV0dXJuIHB0cjsKK30KKworLyoqCisgKiB0b21veW9fb3BlbiAtIG9wZW4oKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGlub2RlOiBQb2ludGVyIHRvICJzdHJ1Y3QgaW5vZGUiLgorICogQGZpbGU6ICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwljb25zdCBpbnQga2V5ID0gKCh1OCAqKSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGUpCisJCS0gKCh1OCAqKSBOVUxMKTsKKwlyZXR1cm4gdG9tb3lvX29wZW5fY29udHJvbChrZXksIGZpbGUpOworfQorCisvKioKKyAqIHRvbW95b19yZWxlYXNlIC0gY2xvc2UoKSBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKgorICogQGlub2RlOiBQb2ludGVyIHRvICJzdHJ1Y3QgaW5vZGUiLgorICogQGZpbGU6ICBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gdG9tb3lvX2Nsb3NlX2NvbnRyb2woZmlsZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWQgLSByZWFkKCkgZm9yIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIEBmaWxlOiAgUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgorICogQGJ1ZjogICBQb2ludGVyIHRvIGJ1ZmZlci4KKyAqIEBjb3VudDogU2l6ZSBvZiBAYnVmLgorICogQHBwb3M6ICBVbnVzZWQuCisgKgorICogUmV0dXJucyBieXRlcyByZWFkIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHNzaXplX3QgdG9tb3lvX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSAgIGxvZmZfdCAqcHBvcykKK3sKKwlyZXR1cm4gdG9tb3lvX3JlYWRfY29udHJvbChmaWxlLCBidWYsIGNvdW50KTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGUgLSB3cml0ZSgpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBAZmlsZTogIFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqIEBidWY6ICAgUG9pbnRlciB0byBidWZmZXIuCisgKiBAY291bnQ6IFNpemUgb2YgQGJ1Zi4KKyAqIEBwcG9zOiAgVW51c2VkLgorICoKKyAqIFJldHVybnMgQGNvdW50IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIHNzaXplX3QgdG9tb3lvX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXJldHVybiB0b21veW9fd3JpdGVfY29udHJvbChmaWxlLCBidWYsIGNvdW50KTsKK30KKworLyogT3BlcmF0aW9ucyBmb3IgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0b21veW9fb3BlcmF0aW9ucyA9IHsKKwkub3BlbiAgICA9IHRvbW95b19vcGVuLAorCS5yZWxlYXNlID0gdG9tb3lvX3JlbGVhc2UsCisJLnJlYWQgICAgPSB0b21veW9fcmVhZCwKKwkud3JpdGUgICA9IHRvbW95b193cml0ZSwKK307CisKKy8qKgorICogdG9tb3lvX2NyZWF0ZV9lbnRyeSAtIENyZWF0ZSBpbnRlcmZhY2UgZmlsZXMgdW5kZXIgL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBkaXJlY3RvcnkuCisgKgorICogQG5hbWU6ICAgVGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSBmaWxlLgorICogQG1vZGU6ICAgVGhlIHBlcm1pc3Npb24gb2YgdGhlIGludGVyZmFjZSBmaWxlLgorICogQHBhcmVudDogVGhlIHBhcmVudCBkaXJlY3RvcnkuCisgKiBAa2V5OiAgICBUeXBlIG9mIGludGVyZmFjZS4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCB0b21veW9fY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IG1vZGVfdCBtb2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IHU4IGtleSkKK3sKKwlzZWN1cml0eWZzX2NyZWF0ZV9maWxlKG5hbWUsIG1vZGUsIHBhcmVudCwgKCh1OCAqKSBOVUxMKSArIGtleSwKKwkJCSAgICAgICAmdG9tb3lvX29wZXJhdGlvbnMpOworfQorCisvKioKKyAqIHRvbW95b19pbml0ZXJmYWNlX2luaXQgLSBJbml0aWFsaXplIC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by8gaW50ZXJmYWNlLgorICoKKyAqIFJldHVybnMgMC4KKyAqLworc3RhdGljIGludCBfX2luaXQgdG9tb3lvX2luaXRlcmZhY2VfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKnRvbW95b19kaXI7CisKKwkvKiBEb24ndCBjcmVhdGUgc2VjdXJpdHlmcyBlbnRyaWVzIHVubGVzcyByZWdpc3RlcmVkLiAqLworCWlmIChjdXJyZW50X2NyZWQoKS0+c2VjdXJpdHkgIT0gJnRvbW95b19rZXJuZWxfZG9tYWluKQorCQlyZXR1cm4gMDsKKworCXRvbW95b19kaXIgPSBzZWN1cml0eWZzX2NyZWF0ZV9kaXIoInRvbW95byIsIE5VTEwpOworCXRvbW95b19jcmVhdGVfZW50cnkoImRvbWFpbl9wb2xpY3kiLCAgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19ET01BSU5QT0xJQ1kpOworCXRvbW95b19jcmVhdGVfZW50cnkoImV4Y2VwdGlvbl9wb2xpY3kiLCAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19FWENFUFRJT05QT0xJQ1kpOworCXRvbW95b19jcmVhdGVfZW50cnkoInNlbGZfZG9tYWluIiwgICAgICAwNDAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19TRUxGRE9NQUlOKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCIuZG9tYWluX3N0YXR1cyIsICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fRE9NQUlOX1NUQVRVUyk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgiLnByb2Nlc3Nfc3RhdHVzIiwgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX1BST0NFU1NfU1RBVFVTKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJtZW1pbmZvIiwgICAgICAgICAgMDYwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fTUVNSU5GTyk7CisJdG9tb3lvX2NyZWF0ZV9lbnRyeSgicHJvZmlsZSIsICAgICAgICAgIDA2MDAsIHRvbW95b19kaXIsCisJCQkgICAgVE9NT1lPX1BST0ZJTEUpOworCXRvbW95b19jcmVhdGVfZW50cnkoIm1hbmFnZXIiLCAgICAgICAgICAwNjAwLCB0b21veW9fZGlyLAorCQkJICAgIFRPTU9ZT19NQU5BR0VSKTsKKwl0b21veW9fY3JlYXRlX2VudHJ5KCJ2ZXJzaW9uIiwgICAgICAgICAgMDQwMCwgdG9tb3lvX2RpciwKKwkJCSAgICBUT01PWU9fVkVSU0lPTik7CisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsKHRvbW95b19pbml0ZXJmYWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oIGIvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkY2I3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKQEAgLTAsMCArMSwzNTkgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vY29tbW9uLmgKKyAqCisgKiBDb21tb24gZnVuY3Rpb25zIGZvciBUT01PWU8uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaWZuZGVmIF9TRUNVUklUWV9UT01PWU9fQ09NTU9OX0gKKyNkZWZpbmUgX1NFQ1VSSVRZX1RPTU9ZT19DT01NT05fSAorCisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKK3N0cnVjdCBkZW50cnk7CitzdHJ1Y3QgdmZzbW91bnQ7CisKKy8qIFRlbXBvcmFyeSBidWZmZXIgZm9yIGhvbGRpbmcgcGF0aG5hbWVzLiAqLworc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlciB7CisJY2hhciBidWZmZXJbNDA5Nl07Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgYSB0b2tlbi4gKi8KK3N0cnVjdCB0b21veW9fcGF0aF9pbmZvIHsKKwljb25zdCBjaGFyICpuYW1lOworCXUzMiBoYXNoOyAgICAgICAgICAvKiA9IGZ1bGxfbmFtZV9oYXNoKG5hbWUsIHN0cmxlbihuYW1lKSkgKi8KKwl1MTYgdG90YWxfbGVuOyAgICAgLyogPSBzdHJsZW4obmFtZSkgICAgICAgICAgICAgICAgICAgICAgICovCisJdTE2IGNvbnN0X2xlbjsgICAgIC8qID0gdG9tb3lvX2NvbnN0X3BhcnRfbGVuZ3RoKG5hbWUpICAgICAqLworCWJvb2wgaXNfZGlyOyAgICAgICAvKiA9IHRvbW95b19zdHJlbmRzd2l0aChuYW1lLCAiLyIpICAgICAgKi8KKwlib29sIGlzX3BhdHRlcm5lZDsgLyogPSB0b21veW9fcGF0aF9jb250YWluc19wYXR0ZXJuKG5hbWUpICovCisJdTE2IGRlcHRoOyAgICAgICAgIC8qID0gdG9tb3lvX3BhdGhfZGVwdGgobmFtZSkgICAgICAgICAgICAqLworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIG1heCBsZW5ndGggb2YgYSB0b2tlbi4KKyAqCisgKiBBIHRva2VuIGNvbnNpc3RzIG9mIG9ubHkgQVNDSUkgcHJpbnRhYmxlIGNoYXJhY3RlcnMuCisgKiBOb24gcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gYSB0b2tlbiBpcyByZXByZXNlbnRlZCBpbiBcb29vIHN0eWxlCisgKiBvY3RhbCBzdHJpbmcuIFRodXMsIFwgaXRzZWxmIGlzIHJlcHJlc2VudGVkIGFzIFxcLgorICovCisjZGVmaW5lIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIDQwMDAKKworLyogU3RydWN0dXJlIGZvciBob2xkaW5nIHJlcXVlc3RlZCBwYXRobmFtZS4gKi8KK3N0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSB7CisJLyogS2VlcCAiaGVhZCIgZmlyc3QsIGZvciB0aGlzIHBvaW50ZXIgaXMgcGFzc2VkIHRvIHRvbW95b19mcmVlKCkuICovCisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gaGVhZDsKKwljaGFyIGJhcmlpZXIxWzE2XTsgLyogU2FmZWd1YXJkIGZvciBvdmVycnVuLiAqLworCWNoYXIgYm9keVtUT01PWU9fTUFYX1BBVEhOQU1FX0xFTl07CisJY2hhciBiYXJyaWVyMlsxNl07IC8qIFNhZmVndWFyZCBmb3Igb3ZlcnJ1bi4gKi8KK307CisKKy8qCisgKiBDb21tb24gaGVhZGVyIGZvciBob2xkaW5nIEFDTCBlbnRyaWVzLgorICoKKyAqIFBhY2tpbmcgInN0cnVjdCB0b21veW9fYWNsX2luZm8iIGFsbG93cworICogInN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCIgdG8gZW1iZWQgInUxNiIgYW5kCisgKiAic3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkIiB0byBlbWJlZCAidTgiCisgKiB3aXRob3V0IGVubGFyZ2luZyB0aGVpciBzdHJ1Y3R1cmUgc2l6ZS4KKyAqLworc3RydWN0IHRvbW95b19hY2xfaW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCS8qCisJICogVHlwZSBvZiB0aGlzIEFDTCBlbnRyeS4KKwkgKgorCSAqIE1TQiBpcyBpc19kZWxldGVkIGZsYWcuCisJICovCisJdTggdHlwZTsKK30gX19wYWNrZWQ7CisKKy8qIFRoaXMgQUNMIGVudHJ5IGlzIGRlbGV0ZWQuICAgICAgICAgICAqLworI2RlZmluZSBUT01PWU9fQUNMX0RFTEVURUQgICAgICAgIDB4ODAKKworLyogU3RydWN0dXJlIGZvciBkb21haW4gaW5mb3JtYXRpb24uICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBhY2xfaW5mb19saXN0OworCS8qIE5hbWUgb2YgdGhpcyBkb21haW4uIE5ldmVyIE5VTEwuICAgICAgICAgICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWU7CisJdTggcHJvZmlsZTsgICAgICAgIC8qIFByb2ZpbGUgbnVtYmVyIHRvIHVzZS4gKi8KKwl1OCBpc19kZWxldGVkOyAgICAgLyogRGVsZXRlIGZsYWcuCisJCQkgICAgICAwID0gYWN0aXZlLgorCQkJICAgICAgMSA9IGRlbGV0ZWQgYnV0IHVuZGVsZXRhYmxlLgorCQkJICAgICAgMjU1ID0gZGVsZXRlZCBhbmQgbm8gbG9uZ2VyIHVuZGVsZXRhYmxlLiAqLworCWJvb2wgcXVvdGFfd2FybmVkOyAvKiBRdW90YSB3YXJubmluZyBmbGFnLiAgICovCisJLyogRE9NQUlOX0ZMQUdTXyouIFVzZSB0b21veW9fc2V0X2RvbWFpbl9mbGFnKCkgdG8gbW9kaWZ5LiAqLworCXU4IGZsYWdzOworfTsKKworLyogUHJvZmlsZSBudW1iZXIgaXMgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NS4gKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9QUk9GSUxFUyAyNTYKKworLyogSWdub3JlICJhbGxvd19yZWFkIiBkaXJlY3RpdmUgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KKyNkZWZpbmUgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQgMQorLyoKKyAqIFRoaXMgZG9tYWluIHdhcyB1bmFibGUgdG8gY3JlYXRlIGEgbmV3IGRvbWFpbiBhdCB0b21veW9fZmluZF9uZXh0X2RvbWFpbigpCisgKiBiZWNhdXNlIHRoZSBuYW1lIG9mIHRoZSBkb21haW4gdG8gYmUgY3JlYXRlZCB3YXMgdG9vIGxvbmcgb3IKKyAqIGl0IGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkuCisgKiBNb3JlIHRoYW4gb25lIHByb2Nlc3MgY29udGludWVkIGV4ZWN2ZSgpIHdpdGhvdXQgZG9tYWluIHRyYW5zaXRpb24uCisgKi8KKyNkZWZpbmUgVE9NT1lPX0RPTUFJTl9GTEFHU19UUkFOU0lUSU9OX0ZBSUxFRCAgICAgICAgMgorCisvKgorICogU3RydWN0dXJlIGZvciAiYWxsb3dfcmVhZC93cml0ZSIsICJhbGxvd19leGVjdXRlIiwgImFsbG93X3JlYWQiLAorICogImFsbG93X3dyaXRlIiwgImFsbG93X2NyZWF0ZSIsICJhbGxvd191bmxpbmsiLCAiYWxsb3dfbWtkaXIiLCAiYWxsb3dfcm1kaXIiLAorICogImFsbG93X21rZmlmbyIsICJhbGxvd19ta3NvY2siLCAiYWxsb3dfbWtibG9jayIsICJhbGxvd19ta2NoYXIiLAorICogImFsbG93X3RydW5jYXRlIiwgImFsbG93X3N5bWxpbmsiIGFuZCAiYWxsb3dfcmV3cml0ZSIgZGlyZWN0aXZlLgorICovCitzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgeworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gaGVhZDsgLyogdHlwZSA9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCAqLworCXUxNiBwZXJtOworCS8qIFBvaW50ZXIgdG8gc2luZ2xlIHBhdGhuYW1lLiAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImFsbG93X3JlbmFtZSIgYW5kICJhbGxvd19saW5rIiBkaXJlY3RpdmUuICovCitzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgeworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gaGVhZDsgLyogdHlwZSA9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCAqLworCXU4IHBlcm07CisJLyogUG9pbnRlciB0byBzaW5nbGUgcGF0aG5hbWUuICovCisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lMTsKKwkvKiBQb2ludGVyIHRvIHNpbmdsZSBwYXRobmFtZS4gKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUyOworfTsKKworLyogS2V5d29yZHMgZm9yIEFDTHMuICovCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0FMSUFTICAgICAgICAgICAgICAgICAgICAgImFsaWFzICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfQUxMT1dfUkVBRCAgICAgICAgICAgICAgICAiYWxsb3dfcmVhZCAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0RFTEVURSAgICAgICAgICAgICAgICAgICAgImRlbGV0ZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0RFTllfUkVXUklURSAgICAgICAgICAgICAgImRlbnlfcmV3cml0ZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0ZJTEVfUEFUVEVSTiAgICAgICAgICAgICAgImZpbGVfcGF0dGVybiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0lOSVRJQUxJWkVfRE9NQUlOICAgICAgICAgImluaXRpYWxpemVfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfS0VFUF9ET01BSU4gICAgICAgICAgICAgICAia2VlcF9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9OT19JTklUSUFMSVpFX0RPTUFJTiAgICAgICJub19pbml0aWFsaXplX2RvbWFpbiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX05PX0tFRVBfRE9NQUlOICAgICAgICAgICAgIm5vX2tlZXBfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfU0VMRUNUICAgICAgICAgICAgICAgICAgICAic2VsZWN0ICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfVU5ERUxFVEUgICAgICAgICAgICAgICAgICAidW5kZWxldGUgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9VU0VfUFJPRklMRSAgICAgICAgICAgICAgICJ1c2VfcHJvZmlsZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCAgImlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCIKKy8qIEEgZG9tYWluIGRlZmluaXRpb24gc3RhcnRzIHdpdGggPGtlcm5lbD4uICovCisjZGVmaW5lIFRPTU9ZT19ST09UX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAgIjxrZXJuZWw+IgorI2RlZmluZSBUT01PWU9fUk9PVF9OQU1FX0xFTiAgICAgICAgICAgICAgICAgICAgIChzaXplb2YoVE9NT1lPX1JPT1RfTkFNRSkgLSAxKQorCisvKiBJbmRleCBudW1iZXJzIGZvciBBY2Nlc3MgQ29udHJvbHMuICovCisjZGVmaW5lIFRPTU9ZT19NQUNfRk9SX0ZJTEUgICAgICAgICAgICAgICAgICAwICAvKiBkb21haW5fcG9saWN5LmNvbmYgKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9BQ0NFUFRfRU5UUlkgICAgICAgICAgICAgIDEKKyNkZWZpbmUgVE9NT1lPX1ZFUkJPU0UgICAgICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYICAgICAgICAgICAgIDMKKworLyogU3RydWN0dXJlIGZvciByZWFkaW5nL3dyaXRpbmcgcG9saWN5IHZpYSBzZWN1cml0eWZzIGludGVyZmFjZXMuICovCitzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciB7CisJaW50ICgqcmVhZCkgKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICopOworCWludCAoKndyaXRlKSAoc3RydWN0IHRvbW95b19pb19idWZmZXIgKik7CisJLyogRXhjbHVzaXZlIGxvY2sgZm9yIHRoaXMgc3RydWN0dXJlLiAgICovCisJc3RydWN0IG11dGV4IGlvX3NlbTsKKwkvKiBUaGUgcG9zaXRpb24gY3VycmVudGx5IHJlYWRpbmcgZnJvbS4gKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkICpyZWFkX3ZhcjE7CisJLyogRXh0cmEgdmFyaWFibGVzIGZvciByZWFkaW5nLiAgICAgICAgICovCisJc3RydWN0IGxpc3RfaGVhZCAqcmVhZF92YXIyOworCS8qIFRoZSBwb3NpdGlvbiBjdXJyZW50bHkgd3JpdGluZyB0by4gICAqLworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKndyaXRlX3ZhcjE7CisJLyogVGhlIHN0ZXAgZm9yIHJlYWRpbmcuICAgICAgICAgICAgICAgICovCisJaW50IHJlYWRfc3RlcDsKKwkvKiBCdWZmZXIgZm9yIHJlYWRpbmcuICAgICAgICAgICAgICAgICAgKi8KKwljaGFyICpyZWFkX2J1ZjsKKwkvKiBFT0YgZmxhZyBmb3IgcmVhZGluZy4gICAgICAgICAgICAgICAgKi8KKwlib29sIHJlYWRfZW9mOworCS8qIFJlYWQgZG9tYWluIEFDTCBvZiBzcGVjaWZpZWQgUElEPyAgICAqLworCWJvb2wgcmVhZF9zaW5nbGVfZG9tYWluOworCS8qIEV4dHJhIHZhcmlhYmxlIGZvciByZWFkaW5nLiAgICAgICAgICAqLworCXU4IHJlYWRfYml0OworCS8qIEJ5dGVzIGF2YWlsYWJsZSBmb3IgcmVhZGluZy4gICAgICAgICAqLworCWludCByZWFkX2F2YWlsOworCS8qIFNpemUgb2YgcmVhZCBidWZmZXIuICAgICAgICAgICAgICAgICAqLworCWludCByZWFkYnVmX3NpemU7CisJLyogQnVmZmVyIGZvciB3cml0aW5nLiAgICAgICAgICAgICAgICAgICovCisJY2hhciAqd3JpdGVfYnVmOworCS8qIEJ5dGVzIGF2YWlsYWJsZSBmb3Igd3JpdGluZy4gICAgICAgICAqLworCWludCB3cml0ZV9hdmFpbDsKKwkvKiBTaXplIG9mIHdyaXRlIGJ1ZmZlci4gICAgICAgICAgICAgICAgKi8KKwlpbnQgd3JpdGVidWZfc2l6ZTsKK307CisKKy8qIENoZWNrIHdoZXRoZXIgdGhlIGRvbWFpbiBoYXMgdG9vIG1hbnkgQUNMIGVudHJpZXMgdG8gaG9sZC4gKi8KK2Jvb2wgdG9tb3lvX2RvbWFpbl9xdW90YV9pc19vayhzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluKTsKKy8qIFRyYW5zYWN0aW9uYWwgc3ByaW50ZigpIGZvciBwb2xpY3kgZHVtcC4gKi8KK2Jvb2wgdG9tb3lvX2lvX3ByaW50ZihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwgY29uc3QgY2hhciAqZm10LCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CisvKiBDaGVjayB3aGV0aGVyIHRoZSBkb21haW5uYW1lIGlzIGNvcnJlY3QuICovCitib29sIHRvbW95b19pc19jb3JyZWN0X2RvbWFpbihjb25zdCB1bnNpZ25lZCBjaGFyICpkb21haW5uYW1lLAorCQkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24pOworLyogQ2hlY2sgd2hldGhlciB0aGUgdG9rZW4gaXMgY29ycmVjdC4gKi8KK2Jvb2wgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qgczggc3RhcnRfdHlwZSwKKwkJCSAgICBjb25zdCBzOCBwYXR0ZXJuX3R5cGUsIGNvbnN0IHM4IGVuZF90eXBlLAorCQkJICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKTsKKy8qIENoZWNrIHdoZXRoZXIgdGhlIHRva2VuIGNhbiBiZSBhIGRvbWFpbm5hbWUuICovCitib29sIHRvbW95b19pc19kb21haW5fZGVmKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcik7CisvKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlbmFtZSBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLiAqLworYm9vbCB0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAorCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybik7CisvKiBSZWFkICJhbGlhcyIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2Jvb2wgdG9tb3lvX3JlYWRfYWxpYXNfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKy8qCisgKiBSZWFkICJpbml0aWFsaXplX2RvbWFpbiIgYW5kICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkKKyAqIGluIGV4Y2VwdGlvbiBwb2xpY3kuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCk7CisvKiBSZWFkICJrZWVwX2RvbWFpbiIgYW5kICJub19rZWVwX2RvbWFpbiIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyogUmVhZCAiZmlsZV9wYXR0ZXJuIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworYm9vbCB0b21veW9fcmVhZF9maWxlX3BhdHRlcm4oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyogUmVhZCAiYWxsb3dfcmVhZCIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKy8qIFJlYWQgImRlbnlfcmV3cml0ZSIgZW50cnkgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KK2Jvb2wgdG9tb3lvX3JlYWRfbm9fcmV3cml0ZV9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworLyogV3JpdGUgZG9tYWluIHBvbGljeSB2aW9sYXRpb24gd2FybmluZyBtZXNzYWdlIHRvIGNvbnNvbGU/ICovCitib29sIHRvbW95b192ZXJib3NlX21vZGUoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKTsKKy8qIENvbnZlcnQgZG91YmxlIHBhdGggb3BlcmF0aW9uIHRvIG9wZXJhdGlvbiBuYW1lLiAqLworY29uc3QgY2hhciAqdG9tb3lvX2RwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKTsKKy8qIEdldCB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIGdpdmVuIGRvbWFpbm5hbWUuICovCitjb25zdCBjaGFyICp0b21veW9fZ2V0X2xhc3RfbmFtZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pOworLyogR2V0IHdhcm5pbmcgbWVzc2FnZS4gKi8KK2NvbnN0IGNoYXIgKnRvbW95b19nZXRfbXNnKGNvbnN0IGJvb2wgaXNfZW5mb3JjZSk7CisvKiBDb252ZXJ0IHNpbmdsZSBwYXRoIG9wZXJhdGlvbiB0byBvcGVyYXRpb24gbmFtZS4gKi8KK2NvbnN0IGNoYXIgKnRvbW95b19zcDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbik7CisvKiBEZWxldGUgYSBkb21haW4uICovCitpbnQgdG9tb3lvX2RlbGV0ZV9kb21haW4oY2hhciAqZGF0YSk7CisvKiBDcmVhdGUgImFsaWFzIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworaW50IHRvbW95b193cml0ZV9hbGlhc19wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyoKKyAqIENyZWF0ZSAiaW5pdGlhbGl6ZV9kb21haW4iIGFuZCAibm9faW5pdGlhbGl6ZV9kb21haW4iIGVudHJ5CisgKiBpbiBleGNlcHRpb24gcG9saWN5LgorICovCitpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJCSAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qIENyZWF0ZSAia2VlcF9kb21haW4iIGFuZCAibm9fa2VlcF9kb21haW4iIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9rZWVwZXJfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfbm90LAorCQkJCSAgICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qCisgKiBDcmVhdGUgImFsbG93X3JlYWQvd3JpdGUiLCAiYWxsb3dfZXhlY3V0ZSIsICJhbGxvd19yZWFkIiwgImFsbG93X3dyaXRlIiwKKyAqICJhbGxvd19jcmVhdGUiLCAiYWxsb3dfdW5saW5rIiwgImFsbG93X21rZGlyIiwgImFsbG93X3JtZGlyIiwKKyAqICJhbGxvd19ta2ZpZm8iLCAiYWxsb3dfbWtzb2NrIiwgImFsbG93X21rYmxvY2siLCAiYWxsb3dfbWtjaGFyIiwKKyAqICJhbGxvd190cnVuY2F0ZSIsICJhbGxvd19zeW1saW5rIiwgImFsbG93X3Jld3JpdGUiLCAiYWxsb3dfcmVuYW1lIiBhbmQKKyAqICJhbGxvd19saW5rIiBlbnRyeSBpbiBkb21haW4gcG9saWN5LgorICovCitpbnQgdG9tb3lvX3dyaXRlX2ZpbGVfcG9saWN5KGNoYXIgKmRhdGEsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogQ3JlYXRlICJhbGxvd19yZWFkIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworaW50IHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOworLyogQ3JlYXRlICJkZW55X3Jld3JpdGUiIGVudHJ5IGluIGV4Y2VwdGlvbiBwb2xpY3kuICovCitpbnQgdG9tb3lvX3dyaXRlX25vX3Jld3JpdGVfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKy8qIENyZWF0ZSAiZmlsZV9wYXR0ZXJuIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLworaW50IHRvbW95b193cml0ZV9wYXR0ZXJuX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CisvKiBGaW5kIGEgZG9tYWluIGJ5IHRoZSBnaXZlbiBuYW1lLiAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2ZpbmRfZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpOworLyogRmluZCBvciBjcmVhdGUgYSBkb21haW4gYnkgdGhlIGdpdmVuIG5hbWUuICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9vcl9hc3NpZ25fbmV3X2RvbWFpbihjb25zdCBjaGFyICoKKwkJCQkJCQkgICAgZG9tYWlubmFtZSwKKwkJCQkJCQkgICAgY29uc3QgdTggcHJvZmlsZSk7CisvKiBVbmRlbGV0ZSBhIGRvbWFpbi4gKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b191bmRlbGV0ZV9kb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSk7CisvKiBDaGVjayBtb2RlIGZvciBzcGVjaWZpZWQgZnVuY3Rpb25hbGl0eS4gKi8KK3Vuc2lnbmVkIGludCB0b21veW9fY2hlY2tfZmxhZ3MoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCWNvbnN0IHU4IGluZGV4KTsKKy8qIEFsbG9jYXRlIG1lbW9yeSBmb3Igc3RydWN0dXJlcy4gKi8KK3ZvaWQgKnRvbW95b19hbGxvY19hY2xfZWxlbWVudChjb25zdCB1OCBhY2xfdHlwZSk7CisvKiBGaWxsIGluICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgbWVtYmVycy4gKi8KK3ZvaWQgdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwdHIpOworLyogUnVuIHBvbGljeSBsb2FkZXIgd2hlbiAvc2Jpbi9pbml0IHN0YXJ0cy4gKi8KK3ZvaWQgdG9tb3lvX2xvYWRfcG9saWN5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKKy8qIENoYW5nZSAic3RydWN0IHRvbW95b19kb21haW5faW5mbyItPmZsYWdzLiAqLwordm9pZCB0b21veW9fc2V0X2RvbWFpbl9mbGFnKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICBjb25zdCBib29sIGlzX2RlbGV0ZSwgY29uc3QgdTggZmxhZ3MpOworCisvKiBzdHJjbXAoKSBmb3IgInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBzdHJ1Y3R1cmUuICovCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX3BhdGhjbXAoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmEsCisJCQkJICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYikKK3sKKwlyZXR1cm4gYS0+aGFzaCAhPSBiLT5oYXNoIHx8IHN0cmNtcChhLT5uYW1lLCBiLT5uYW1lKTsKK30KKworLyogR2V0IHR5cGUgb2YgYW4gQUNMIGVudHJ5LiAqLworc3RhdGljIGlubGluZSB1OCB0b21veW9fYWNsX3R5cGUxKHN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cikKK3sKKwlyZXR1cm4gcHRyLT50eXBlICYgflRPTU9ZT19BQ0xfREVMRVRFRDsKK30KKworLyogR2V0IHR5cGUgb2YgYW4gQUNMIGVudHJ5LiAqLworc3RhdGljIGlubGluZSB1OCB0b21veW9fYWNsX3R5cGUyKHN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cikKK3sKKwlyZXR1cm4gcHRyLT50eXBlOworfQorCisvKioKKyAqIHRvbW95b19pc192YWxpZCAtIENoZWNrIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBhIHZhbGlkIGNoYXIuCisgKgorICogQGM6IFRoZSBjaGFyYWN0ZXIgdG8gY2hlY2suCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBjIGlzIGEgdmFsaWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCB0b21veW9faXNfdmFsaWQoY29uc3QgdW5zaWduZWQgY2hhciBjKQoreworCXJldHVybiBjID4gJyAnICYmIGMgPCAxMjc7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2ludmFsaWQgLSBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYW4gaW52YWxpZCBjaGFyLgorICoKKyAqIEBjOiBUaGUgY2hhcmFjdGVyIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBAYyBpcyBhbiBpbnZhbGlkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX2lzX2ludmFsaWQoY29uc3QgdW5zaWduZWQgY2hhciBjKQoreworCXJldHVybiBjICYmIChjIDw9ICcgJyB8fCBjID49IDEyNyk7Cit9CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuICovCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0b21veW9fZG9tYWluX2xpc3Q7CitleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSB0b21veW9fZG9tYWluX2xpc3RfbG9jazsKKworLyogTG9jayBmb3IgZG9tYWluLT5hY2xfaW5mb19saXN0LiAqLworZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2s7CisKKy8qIEhhcyAvc2Jpbi9pbml0IHN0YXJ0ZWQ/ICovCitleHRlcm4gYm9vbCB0b21veW9fcG9saWN5X2xvYWRlZDsKKworLyogVGhlIGtlcm5lbCdzIGRvbWFpbi4gKi8KK2V4dGVybiBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIHRvbW95b19rZXJuZWxfZG9tYWluOworCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfY29va2llIC0gaXRlcmF0ZSBvdmVyIGEgbGlzdCB3aXRoIGNvb2tpZS4KKyAqIEBwb3M6ICAgICAgICB0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAY29va2llOiAgICAgdGhlICZzdHJ1Y3QgbGlzdF9oZWFkIHRvIHVzZSBhcyBhIGNvb2tpZS4KKyAqIEBoZWFkOiAgICAgICB0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICoKKyAqIFNhbWUgd2l0aCBsaXN0X2Zvcl9lYWNoKCkgZXhjZXB0IHRoYXQgdGhpcyBwcmltaXRpdmUgdXNlcyBAY29va2llCisgKiBzbyB0aGF0IHdlIGNhbiBjb250aW51ZSBpdGVyYXRpb24uCisgKiBAY29va2llIG11c3QgYmUgTlVMTCB3aGVuIGl0ZXJhdGlvbiBzdGFydHMsIGFuZCBAY29va2llIHdpbGwgYmVjb21lCisgKiBOVUxMIHdoZW4gaXRlcmF0aW9uIGZpbmlzaGVzLgorICovCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgY29va2llLCBoZWFkKSAgICAgICAgICAgICAgICAgICAgICAgXAorCWZvciAoKHsgaWYgKCFjb29raWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCSAgICAgY29va2llID0gaGVhZDsgfSksICAgICAgICAgICAgICAgXAorCSAgICAgcG9zID0gKGNvb2tpZSktPm5leHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgcHJlZmV0Y2gocG9zLT5uZXh0KSwgcG9zICE9IChoZWFkKSB8fCAoKGNvb2tpZSkgPSBOVUxMKTsgXAorCSAgICAgKGNvb2tpZSkgPSBwb3MsIHBvcyA9IHBvcy0+bmV4dCkKKworI2VuZGlmIC8qICFkZWZpbmVkKF9TRUNVUklUWV9UT01PWU9fQ09NTU9OX0gpICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vZG9tYWluLmMgYi9zZWN1cml0eS90b21veW8vZG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkzYTc1NgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9kb21haW4uYwpAQCAtMCwwICsxLDg3OCBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9kb21haW4uYworICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBEb21haW4tQmFzZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgorICoKKyAqIFZlcnNpb246IDIuMi4wLXByZSAgIDIwMDkvMDIvMDEKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgInRvbW95by5oIgorI2luY2x1ZGUgInJlYWxwYXRoLmgiCisjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgorCisvKiBWYXJpYWJsZXMgZGVmaW5pdGlvbnMuKi8KKworLyogVGhlIGluaXRpYWwgZG9tYWluLiAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyB0b21veW9fa2VybmVsX2RvbWFpbjsKKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4gKi8KK0xJU1RfSEVBRCh0b21veW9fZG9tYWluX2xpc3QpOworREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisKKy8qIFN0cnVjdHVyZSBmb3IgImluaXRpYWxpemVfZG9tYWluIiBhbmQgIm5vX2luaXRpYWxpemVfZG9tYWluIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZTsgICAgLyogVGhpcyBtYXkgYmUgTlVMTCAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwcm9ncmFtOworCWJvb2wgaXNfZGVsZXRlZDsKKwlib29sIGlzX25vdDsgICAgICAgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzICJub19pbml0aWFsaXplX2RvbWFpbiIuICAqLworCS8qIFRydWUgaWYgdGhlIGRvbWFpbm5hbWUgaXMgdG9tb3lvX2dldF9sYXN0X25hbWUoKS4gKi8KKwlib29sIGlzX2xhc3RfbmFtZTsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgImtlZXBfZG9tYWluIiBhbmQgIm5vX2tlZXBfZG9tYWluIiBrZXl3b3JkLiAqLworc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWU7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW07ICAgICAgIC8qIFRoaXMgbWF5IGJlIE5VTEwgKi8KKwlib29sIGlzX2RlbGV0ZWQ7CisJYm9vbCBpc19ub3Q7ICAgICAgIC8qIFRydWUgaWYgdGhpcyBlbnRyeSBpcyAibm9fa2VlcF9kb21haW4iLiAgICAgICAgKi8KKwkvKiBUcnVlIGlmIHRoZSBkb21haW5uYW1lIGlzIHRvbW95b19nZXRfbGFzdF9uYW1lKCkuICovCisJYm9vbCBpc19sYXN0X25hbWU7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yICJhbGlhcyIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqb3JpZ2luYWxfbmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYWxpYXNlZF9uYW1lOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qKgorICogdG9tb3lvX3NldF9kb21haW5fZmxhZyAtIFNldCBvciBjbGVhciBkb21haW4ncyBhdHRyaWJ1dGUgZmxhZ3MuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKiBAZmxhZ3M6ICAgICBGbGFncyB0byBzZXQgb3IgY2xlYXIuCisgKgorICogUmV0dXJucyBub3RoaW5nLgorICovCit2b2lkIHRvbW95b19zZXRfZG9tYWluX2ZsYWcoc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlLCBjb25zdCB1OCBmbGFncykKK3sKKwkvKiBXZSBuZWVkIHRvIHNlcmlhbGl6ZSBiZWNhdXNlIHRoaXMgaXMgYml0ZmllbGQgb3BlcmF0aW9uLiAqLworCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9jayk7CisJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gU1RBUlQgKioqKiovCisJc3Bpbl9sb2NrKCZsb2NrKTsKKwlpZiAoIWlzX2RlbGV0ZSkKKwkJZG9tYWluLT5mbGFncyB8PSBmbGFnczsKKwllbHNlCisJCWRvbWFpbi0+ZmxhZ3MgJj0gfmZsYWdzOworCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwkvKioqKiogQ1JJVElDQUwgU0VDVElPTiBFTkQgKioqKiovCit9CisKKy8qKgorICogdG9tb3lvX2dldF9sYXN0X25hbWUgLSBHZXQgbGFzdCBjb21wb25lbnQgb2YgYSBkb21haW5uYW1lLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICoKKyAqIFJldHVybnMgdGhlIGxhc3QgY29tcG9uZW50IG9mIHRoZSBkb21haW5uYW1lLgorICovCitjb25zdCBjaGFyICp0b21veW9fZ2V0X2xhc3RfbmFtZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pCit7CisJY29uc3QgY2hhciAqY3AwID0gZG9tYWluLT5kb21haW5uYW1lLT5uYW1lOworCWNvbnN0IGNoYXIgKmNwMSA9IHN0cnJjaHIoY3AwLCAnICcpOworCisJaWYgKGNwMSkKKwkJcmV0dXJuIGNwMSArIDE7CisJcmV0dXJuIGNwMDsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uIE1heSBiZSBOVUxMLgorICogQHByb2dyYW06ICAgIFRoZSBuYW1lIG9mIHByb2dyYW0uCisgKiBAaXNfbm90OiAgICAgVHJ1ZSBpZiBpdCBpcyAibm9faW5pdGlhbGl6ZV9kb21haW4iIGVudHJ5LgorICogQGlzX2RlbGV0ZTogIFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCisJCQkJCQkgIGNvbnN0IGNoYXIgKnByb2dyYW0sCisJCQkJCQkgIGNvbnN0IGJvb2wgaXNfbm90LAorCQkJCQkJICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3Byb2dyYW07CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2RvbWFpbm5hbWUgPSBOVUxMOworCWludCBlcnJvciA9IC1FTk9NRU07CisJYm9vbCBpc19sYXN0X25hbWUgPSBmYWxzZTsKKworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwcm9ncmFtLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIE5vIHBhdHRlcm5zIGFsbG93ZWQuICovCisJaWYgKGRvbWFpbm5hbWUpIHsKKwkJaWYgKCF0b21veW9faXNfZG9tYWluX2RlZihkb21haW5uYW1lKSAmJgorCQkgICAgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChkb21haW5uYW1lLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJCWlzX2xhc3RfbmFtZSA9IHRydWU7CisJCWVsc2UgaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSwgX19mdW5jX18pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXNhdmVkX2RvbWFpbm5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGRvbWFpbm5hbWUpOworCQlpZiAoIXNhdmVkX2RvbWFpbm5hbWUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc2F2ZWRfcHJvZ3JhbSA9IHRvbW95b19zYXZlX25hbWUocHJvZ3JhbSk7CisJaWYgKCFzYXZlZF9wcm9ncmFtKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX25vdCAhPSBpc19ub3QgfHwKKwkJICAgIHB0ci0+ZG9tYWlubmFtZSAhPSBzYXZlZF9kb21haW5uYW1lIHx8CisJCSAgICBwdHItPnByb2dyYW0gIT0gc2F2ZWRfcHJvZ3JhbSkKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5kb21haW5uYW1lID0gc2F2ZWRfZG9tYWlubmFtZTsKKwluZXdfZW50cnktPnByb2dyYW0gPSBzYXZlZF9wcm9ncmFtOworCW5ld19lbnRyeS0+aXNfbm90ID0gaXNfbm90OworCW5ld19lbnRyeS0+aXNfbGFzdF9uYW1lID0gaXNfbGFzdF9uYW1lOworCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19yZWFkX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAorCQkJICAgICAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KSB7CisJCWNvbnN0IGNoYXIgKm5vOworCQljb25zdCBjaGFyICpmcm9tID0gIiI7CisJCWNvbnN0IGNoYXIgKmRvbWFpbiA9ICIiOworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqcHRyOworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnksCisJCQkJICBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlubyA9IHB0ci0+aXNfbm90ID8gIm5vXyIgOiAiIjsKKwkJaWYgKHB0ci0+ZG9tYWlubmFtZSkgeworCQkJZnJvbSA9ICIgZnJvbSAiOworCQkJZG9tYWluID0gcHRyLT5kb21haW5uYW1lLT5uYW1lOworCQl9CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLAorCQkJCSAgICAgICIlcyIgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4KKwkJCQkgICAgICAiJXMlcyVzXG4iLCBubywgcHRyLT5wcm9ncmFtLT5uYW1lLCBmcm9tLAorCQkJCSAgICAgIGRvbWFpbikpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZG9uZTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZG9tYWluX2luaXRpYWxpemVyX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfbm90OiAgICBUcnVlIGlmIGl0IGlzICJub19pbml0aWFsaXplX2RvbWFpbiIgZW50cnkuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfbm90LAorCQkJCQkgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwljaGFyICpjcCA9IHN0cnN0cihkYXRhLCAiIGZyb20gIik7CisKKwlpZiAoY3ApIHsKKwkJKmNwID0gJ1wwJzsKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KGNwICsgNiwgZGF0YSwKKwkJCQkJCQkgICAgICBpc19ub3QsCisJCQkJCQkJICAgICAgaXNfZGVsZXRlKTsKKwl9CisJcmV0dXJuIHRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5KE5VTEwsIGRhdGEsIGlzX25vdCwKKwkJCQkJCSAgICAgIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX2lzX2RvbWFpbl9pbml0aWFsaXplciAtIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIHByb2dyYW0gY2F1c2VzIGRvbWFpbm5hbWUgcmVpbml0aWFsaXphdGlvbi4KKyAqCisgKiBAZG9tYWlubmFtZTogVGhlIG5hbWUgb2YgZG9tYWluLgorICogQHByb2dyYW06ICAgIFRoZSBuYW1lIG9mIHByb2dyYW0uCisgKiBAbGFzdF9uYW1lOiAgVGhlIGxhc3QgY29tcG9uZW50IG9mIEBkb21haW5uYW1lLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBleGVjdXRpbmcgQHByb2dyYW0gcmVpbml0aWFsaXplcyBkb21haW4gdHJhbnNpdGlvbiwKKyAqIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX2RvbWFpbl9pbml0aWFsaXplcihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCSBkb21haW5uYW1lLAorCQkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW0sCisJCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCSBsYXN0X25hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnB0cjsKKwlib29sIGZsYWcgPSBmYWxzZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAgJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmIChwdHItPmRvbWFpbm5hbWUpIHsKKwkJCWlmICghcHRyLT5pc19sYXN0X25hbWUpIHsKKwkJCQlpZiAocHRyLT5kb21haW5uYW1lICE9IGRvbWFpbm5hbWUpCisJCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlpZiAodG9tb3lvX3BhdGhjbXAocHRyLT5kb21haW5uYW1lLCBsYXN0X25hbWUpKQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlpZiAodG9tb3lvX3BhdGhjbXAocHRyLT5wcm9ncmFtLCBwcm9ncmFtKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHRyLT5pc19ub3QpIHsKKwkJCWZsYWcgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJCWZsYWcgPSB0cnVlOworCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CisJcmV0dXJuIGZsYWc7Cit9CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfZG9tYWluX2tlZXBlcl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKiBAcHJvZ3JhbTogICAgVGhlIG5hbWUgb2YgcHJvZ3JhbS4gTWF5IGJlIE5VTEwuCisgKiBAaXNfbm90OiAgICAgVHJ1ZSBpZiBpdCBpcyAibm9fa2VlcF9kb21haW4iIGVudHJ5LgorICogQGlzX2RlbGV0ZTogIFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG9tYWluX2tlZXBlcl9lbnRyeShjb25zdCBjaGFyICpkb21haW5uYW1lLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnByb2dyYW0sCisJCQkJCSAgICAgY29uc3QgYm9vbCBpc19ub3QsCisJCQkJCSAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpwdHI7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2RvbWFpbm5hbWU7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3Byb2dyYW0gPSBOVUxMOworCXN0YXRpYyBERUZJTkVfTVVURVgobG9jayk7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlib29sIGlzX2xhc3RfbmFtZSA9IGZhbHNlOworCisJaWYgKCF0b21veW9faXNfZG9tYWluX2RlZihkb21haW5uYW1lKSAmJgorCSAgICB0b21veW9faXNfY29ycmVjdF9wYXRoKGRvbWFpbm5hbWUsIDEsIC0xLCAtMSwgX19mdW5jX18pKQorCQlpc19sYXN0X25hbWUgPSB0cnVlOworCWVsc2UgaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocHJvZ3JhbSkgeworCQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocHJvZ3JhbSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJc2F2ZWRfcHJvZ3JhbSA9IHRvbW95b19zYXZlX25hbWUocHJvZ3JhbSk7CisJCWlmICghc2F2ZWRfcHJvZ3JhbSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlzYXZlZF9kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShkb21haW5uYW1lKTsKKwlpZiAoIXNhdmVkX2RvbWFpbm5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5pc19ub3QgIT0gaXNfbm90IHx8CisJCSAgICBwdHItPmRvbWFpbm5hbWUgIT0gc2F2ZWRfZG9tYWlubmFtZSB8fAorCQkgICAgcHRyLT5wcm9ncmFtICE9IHNhdmVkX3Byb2dyYW0pCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+ZG9tYWlubmFtZSA9IHNhdmVkX2RvbWFpbm5hbWU7CisJbmV3X2VudHJ5LT5wcm9ncmFtID0gc2F2ZWRfcHJvZ3JhbTsKKwluZXdfZW50cnktPmlzX25vdCA9IGlzX25vdDsKKwluZXdfZW50cnktPmlzX2xhc3RfbmFtZSA9IGlzX2xhc3RfbmFtZTsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KTsKKwllcnJvciA9IDA7Cisgb3V0OgorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeSAtIFdyaXRlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGlzX25vdDogICAgVHJ1ZSBpZiBpdCBpcyAibm9fa2VlcF9kb21haW4iIGVudHJ5LgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqLworaW50IHRvbW95b193cml0ZV9kb21haW5fa2VlcGVyX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX25vdCwKKwkJCQkgICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwljaGFyICpjcCA9IHN0cnN0cihkYXRhLCAiIGZyb20gIik7CisKKwlpZiAoY3ApIHsKKwkJKmNwID0gJ1wwJzsKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfZG9tYWluX2tlZXBlcl9lbnRyeShjcCArIDYsIGRhdGEsIGlzX25vdCwKKwkJCQkJCQkgaXNfZGVsZXRlKTsKKwl9CisJcmV0dXJuIHRvbW95b191cGRhdGVfZG9tYWluX2tlZXBlcl9lbnRyeShkYXRhLCBOVUxMLCBpc19ub3QsIGlzX2RlbGV0ZSk7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiIGxpc3QuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19yZWFkX2RvbWFpbl9rZWVwZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAorCQkJICAgICAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKKwkJY29uc3QgY2hhciAqbm87CisJCWNvbnN0IGNoYXIgKmZyb20gPSAiIjsKKwkJY29uc3QgY2hhciAqcHJvZ3JhbSA9ICIiOworCisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnksIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCW5vID0gcHRyLT5pc19ub3QgPyAibm9fIiA6ICIiOworCQlpZiAocHRyLT5wcm9ncmFtKSB7CisJCQlmcm9tID0gIiBmcm9tICI7CisJCQlwcm9ncmFtID0gcHRyLT5wcm9ncmFtLT5uYW1lOworCQl9CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLAorCQkJCSAgICAgICIlcyIgVE9NT1lPX0tFWVdPUkRfS0VFUF9ET01BSU4KKwkJCQkgICAgICAiJXMlcyVzXG4iLCBubywgcHJvZ3JhbSwgZnJvbSwKKwkJCQkgICAgICBwdHItPmRvbWFpbm5hbWUtPm5hbWUpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKioKKyAqIHRvbW95b19pc19kb21haW5fa2VlcGVyIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gcHJvZ3JhbSBjYXVzZXMgZG9tYWluIHRyYW5zaXRpb24gc3VwcHJlc3Npb24uCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqIEBwcm9ncmFtOiAgICBUaGUgbmFtZSBvZiBwcm9ncmFtLgorICogQGxhc3RfbmFtZTogIFRoZSBsYXN0IGNvbXBvbmVudCBvZiBAZG9tYWlubmFtZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgZXhlY3V0aW5nIEBwcm9ncmFtIHN1cHJlc3NlcyBkb21haW4gdHJhbnNpdGlvbiwKKyAqIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX2RvbWFpbl9rZWVwZXIoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWUsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwcm9ncmFtLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqbGFzdF9uYW1lKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqcHRyOworCWJvb2wgZmxhZyA9IGZhbHNlOworCisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghcHRyLT5pc19sYXN0X25hbWUpIHsKKwkJCWlmIChwdHItPmRvbWFpbm5hbWUgIT0gZG9tYWlubmFtZSkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmICh0b21veW9fcGF0aGNtcChwdHItPmRvbWFpbm5hbWUsIGxhc3RfbmFtZSkpCisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKHB0ci0+cHJvZ3JhbSAmJiB0b21veW9fcGF0aGNtcChwdHItPnByb2dyYW0sIHByb2dyYW0pKQorCQkJY29udGludWU7CisJCWlmIChwdHItPmlzX25vdCkgeworCQkJZmxhZyA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJZmxhZyA9IHRydWU7CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CisJcmV0dXJuIGZsYWc7Cit9CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19hbGlhc19lbnRyeSIuICovCitzdGF0aWMgTElTVF9IRUFEKHRvbW95b19hbGlhc19saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19hbGlhc19saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfYWxpYXNfZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkiIGxpc3QuCisgKgorICogQG9yaWdpbmFsX25hbWU6IFRoZSBvcmlnaW5hbCBwcm9ncmFtJ3MgcmVhbCBuYW1lLgorICogQGFsaWFzZWRfbmFtZTogIFRoZSBzeW1ib2xpYyBwcm9ncmFtJ3Mgc3ltYm9saWMgbGluaydzIG5hbWUuCisgKiBAaXNfZGVsZXRlOiAgICAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9hbGlhc19lbnRyeShjb25zdCBjaGFyICpvcmlnaW5hbF9uYW1lLAorCQkJCSAgICAgY29uc3QgY2hhciAqYWxpYXNlZF9uYW1lLAorCQkJCSAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfb3JpZ2luYWxfbmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfYWxpYXNlZF9uYW1lOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgob3JpZ2luYWxfbmFtZSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykgfHwKKwkgICAgIXRvbW95b19pc19jb3JyZWN0X3BhdGgoYWxpYXNlZF9uYW1lLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIE5vIHBhdHRlcm5zIGFsbG93ZWQuICovCisJc2F2ZWRfb3JpZ2luYWxfbmFtZSA9IHRvbW95b19zYXZlX25hbWUob3JpZ2luYWxfbmFtZSk7CisJc2F2ZWRfYWxpYXNlZF9uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShhbGlhc2VkX25hbWUpOworCWlmICghc2F2ZWRfb3JpZ2luYWxfbmFtZSB8fCAhc2F2ZWRfYWxpYXNlZF9uYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fYWxpYXNfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5vcmlnaW5hbF9uYW1lICE9IHNhdmVkX29yaWdpbmFsX25hbWUgfHwKKwkJICAgIHB0ci0+YWxpYXNlZF9uYW1lICE9IHNhdmVkX2FsaWFzZWRfbmFtZSkKKwkJCWNvbnRpbnVlOworCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpc19kZWxldGUpIHsKKwkJZXJyb3IgPSAtRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKKwlpZiAoIW5ld19lbnRyeSkKKwkJZ290byBvdXQ7CisJbmV3X2VudHJ5LT5vcmlnaW5hbF9uYW1lID0gc2F2ZWRfb3JpZ2luYWxfbmFtZTsKKwluZXdfZW50cnktPmFsaWFzZWRfbmFtZSA9IHNhdmVkX2FsaWFzZWRfbmFtZTsKKwlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fYWxpYXNfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfYWxpYXNfcG9saWN5IC0gUmVhZCAic3RydWN0IHRvbW95b19hbGlhc19lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfYWxpYXNfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlib29sIGRvbmUgPSB0cnVlOworCisJZG93bl9yZWFkKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwgJnRvbW95b19hbGlhc19saXN0KSB7CisJCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnB0cjsKKworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSwgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsIFRPTU9ZT19LRVlXT1JEX0FMSUFTICIlcyAlc1xuIiwKKwkJCQkgICAgICBwdHItPm9yaWdpbmFsX25hbWUtPm5hbWUsCisJCQkJICAgICAgcHRyLT5hbGlhc2VkX25hbWUtPm5hbWUpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZG9uZTsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfYWxpYXNfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkiIGxpc3QuCisgKgorICogQGRhdGE6ICAgICAgU3RyaW5nIHRvIHBhcnNlLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fd3JpdGVfYWxpYXNfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCWNoYXIgKmNwID0gc3RyY2hyKGRhdGEsICcgJyk7CisKKwlpZiAoIWNwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqY3ArKyA9ICdcMCc7CisJcmV0dXJuIHRvbW95b191cGRhdGVfYWxpYXNfZW50cnkoZGF0YSwgY3AsIGlzX2RlbGV0ZSk7Cit9CisKKy8qIERvbWFpbiBjcmVhdGUvZGVsZXRlL3VuZGVsZXRlIGhhbmRsZXIuICovCisKKy8qICNkZWZpbmUgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURSAqLworCisvKioKKyAqIHRvbW95b19kZWxldGVfZG9tYWluIC0gRGVsZXRlIGEgZG9tYWluLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKgorICogUmV0dXJucyAwLgorICovCitpbnQgdG9tb3lvX2RlbGV0ZV9kb21haW4oY2hhciAqZG9tYWlubmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gbmFtZTsKKworCW5hbWUubmFtZSA9IGRvbWFpbm5hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZuYW1lKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwlwcmludGsoS0VSTl9ERUJVRyAidG9tb3lvX2RlbGV0ZV9kb21haW4gJXNcbiIsIGRvbWFpbm5hbWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fcGF0aGNtcChkb21haW4tPmRvbWFpbm5hbWUsICZuYW1lKSkKKwkJCWNvbnRpbnVlOworCQlwcmludGsoS0VSTl9ERUJVRyAiTGlzdDogJXAgJXVcbiIsIGRvbWFpbiwgZG9tYWluLT5pc19kZWxldGVkKTsKKwl9CisjZW5kaWYKKwkvKiBJcyB0aGVyZSBhbiBhY3RpdmUgZG9tYWluPyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbjI7CisJCS8qIE5ldmVyIGRlbGV0ZSB0b21veW9fa2VybmVsX2RvbWFpbiAqLworCQlpZiAoZG9tYWluID09ICZ0b21veW9fa2VybmVsX2RvbWFpbikKKwkJCWNvbnRpbnVlOworCQlpZiAoZG9tYWluLT5pc19kZWxldGVkIHx8CisJCSAgICB0b21veW9fcGF0aGNtcChkb21haW4tPmRvbWFpbm5hbWUsICZuYW1lKSkKKwkJCWNvbnRpbnVlOworCQkvKiBNYXJrIGFscmVhZHkgZGVsZXRlZCBkb21haW5zIGFzIG5vbiB1bmRlbGV0YWJsZS4gKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4yLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCQlpZiAoIWRvbWFpbjItPmlzX2RlbGV0ZWQgfHwKKwkJCSAgICB0b21veW9fcGF0aGNtcChkb21haW4yLT5kb21haW5uYW1lLCAmbmFtZSkpCisJCQkJY29udGludWU7CisjaWZkZWYgVE9NT1lPX0RFQlVHX0RPTUFJTl9VTkRFTEVURQorCQkJaWYgKGRvbWFpbjItPmlzX2RlbGV0ZWQgIT0gMjU1KQorCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJNYXJrZWQgJXAgYXMgbm9uIHVuZGVsZXRhYmxlXG4iLAorCQkJCSAgICAgICBkb21haW4yKTsKKyNlbmRpZgorCQkJZG9tYWluMi0+aXNfZGVsZXRlZCA9IDI1NTsKKwkJfQorCQkvKiBEZWxldGUgYW5kIG1hcmsgYWN0aXZlIGRvbWFpbiBhcyB1bmRlbGV0YWJsZS4gKi8KKwkJZG9tYWluLT5pc19kZWxldGVkID0gMTsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJCXByaW50ayhLRVJOX0RFQlVHICJNYXJrZWQgJXAgYXMgdW5kZWxldGFibGVcbiIsIGRvbWFpbik7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIEVORCAqKioqKi8KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fdW5kZWxldGVfZG9tYWluIC0gVW5kZWxldGUgYSBkb21haW4uCisgKgorICogQGRvbWFpbm5hbWU6IFRoZSBuYW1lIG9mIGRvbWFpbi4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fdW5kZWxldGVfZG9tYWluKGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmNhbmRpZGF0ZV9kb21haW4gPSBOVUxMOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIG5hbWU7CisKKwluYW1lLm5hbWUgPSBkb21haW5uYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJcHJpbnRrKEtFUk5fREVCVUcgInRvbW95b191bmRlbGV0ZV9kb21haW4gJXNcbiIsIGRvbWFpbm5hbWUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWlmICh0b21veW9fcGF0aGNtcChkb21haW4tPmRvbWFpbm5hbWUsICZuYW1lKSkKKwkJCWNvbnRpbnVlOworCQlwcmludGsoS0VSTl9ERUJVRyAiTGlzdDogJXAgJXVcbiIsIGRvbWFpbiwgZG9tYWluLT5pc19kZWxldGVkKTsKKwl9CisjZW5kaWYKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX3BhdGhjbXAoJm5hbWUsIGRvbWFpbi0+ZG9tYWlubmFtZSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFkb21haW4tPmlzX2RlbGV0ZWQpIHsKKwkJCS8qIFRoaXMgZG9tYWluIGlzIGFjdGl2ZS4gSSBjYW4ndCB1bmRlbGV0ZS4gKi8KKwkJCWNhbmRpZGF0ZV9kb21haW4gPSBOVUxMOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlcCBpcyBhY3RpdmUuIEkgY2FuJ3QgdW5kZWxldGUuXG4iLAorCQkJICAgICAgIGRvbWFpbik7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisJCS8qIElzIHRoaXMgZG9tYWluIHVuZGVsZXRhYmxlPyAqLworCQlpZiAoZG9tYWluLT5pc19kZWxldGVkID09IDEpCisJCQljYW5kaWRhdGVfZG9tYWluID0gZG9tYWluOworCX0KKwlpZiAoY2FuZGlkYXRlX2RvbWFpbikgeworCQljYW5kaWRhdGVfZG9tYWluLT5pc19kZWxldGVkID0gMDsKKyNpZmRlZiBUT01PWU9fREVCVUdfRE9NQUlOX1VOREVMRVRFCisJCXByaW50ayhLRVJOX0RFQlVHICIlcCB3YXMgdW5kZWxldGVkLlxuIiwgY2FuZGlkYXRlX2RvbWFpbik7CisjZW5kaWYKKwl9CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBjYW5kaWRhdGVfZG9tYWluOworfQorCisvKioKKyAqIHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluIC0gQ3JlYXRlIGEgZG9tYWluLgorICoKKyAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCisgKiBAcHJvZmlsZTogICAgUHJvZmlsZSBudW1iZXIgdG8gYXNzaWduIGlmIHRoZSBkb21haW4gd2FzIG5ld2x5IGNyZWF0ZWQuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIiBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4oY29uc3QgY2hhciAqCisJCQkJCQkJICAgIGRvbWFpbm5hbWUsCisJCQkJCQkJICAgIGNvbnN0IHU4IHByb2ZpbGUpCit7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZG9tYWlubmFtZTsKKworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJZG9tYWluID0gdG9tb3lvX2ZpbmRfZG9tYWluKGRvbWFpbm5hbWUpOworCWlmIChkb21haW4pCisJCWdvdG8gb3V0OworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGRvbWFpbm5hbWUsIF9fZnVuY19fKSkKKwkJZ290byBvdXQ7CisJc2F2ZWRfZG9tYWlubmFtZSA9IHRvbW95b19zYXZlX25hbWUoZG9tYWlubmFtZSk7CisJaWYgKCFzYXZlZF9kb21haW5uYW1lKQorCQlnb3RvIG91dDsKKwkvKiBDYW4gSSByZXVzZSBtZW1vcnkgb2YgZGVsZXRlZCBkb21haW4/ICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCQlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CisJCWJvb2wgZmxhZzsKKwkJaWYgKCFkb21haW4tPmlzX2RlbGV0ZWQgfHwKKwkJICAgIGRvbWFpbi0+ZG9tYWlubmFtZSAhPSBzYXZlZF9kb21haW5uYW1lKQorCQkJY29udGludWU7CisJCWZsYWcgPSBmYWxzZTsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gU1RBUlQgKioqKiovCisJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJCWZvcl9lYWNoX3Byb2Nlc3MocCkgeworCQkJaWYgKHRvbW95b19yZWFsX2RvbWFpbihwKSAhPSBkb21haW4pCisJCQkJY29udGludWU7CisJCQlmbGFnID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gRU5EICoqKioqLworCQlpZiAoZmxhZykKKwkJCWNvbnRpbnVlOworI2lmZGVmIFRPTU9ZT19ERUJVR19ET01BSU5fVU5ERUxFVEUKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlJldXNpbmcgJXAgJXNcbiIsIGRvbWFpbiwKKwkJICAgICAgIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7CisjZW5kaWYKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJCXB0ci0+dHlwZSB8PSBUT01PWU9fQUNMX0RFTEVURUQ7CisJCX0KKwkJdG9tb3lvX3NldF9kb21haW5fZmxhZyhkb21haW4sIHRydWUsIGRvbWFpbi0+ZmxhZ3MpOworCQlkb21haW4tPnByb2ZpbGUgPSBwcm9maWxlOworCQlkb21haW4tPnF1b3RhX3dhcm5lZCA9IGZhbHNlOworCQltYigpOyAvKiBBdm9pZCBvdXQtb2Ytb3JkZXIgZXhlY3V0aW9uLiAqLworCQlkb21haW4tPmlzX2RlbGV0ZWQgPSAwOworCQlnb3RvIG91dDsKKwl9CisJLyogTm8gbWVtb3J5IHJldXNhYmxlLiBDcmVhdGUgdXNpbmcgbmV3IG1lbW9yeS4gKi8KKwlkb21haW4gPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKmRvbWFpbikpOworCWlmIChkb21haW4pIHsKKwkJSU5JVF9MSVNUX0hFQUQoJmRvbWFpbi0+YWNsX2luZm9fbGlzdCk7CisJCWRvbWFpbi0+ZG9tYWlubmFtZSA9IHNhdmVkX2RvbWFpbm5hbWU7CisJCWRvbWFpbi0+cHJvZmlsZSA9IHByb2ZpbGU7CisJCWxpc3RfYWRkX3RhaWwoJmRvbWFpbi0+bGlzdCwgJnRvbW95b19kb21haW5fbGlzdCk7CisJfQorIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGRvbWFpbjsKK30KKworLyoqCisgKiB0b21veW9fZmluZF9uZXh0X2RvbWFpbiAtIEZpbmQgYSBkb21haW4uCisgKgorICogQGJwcm06ICAgICAgICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgbGludXhfYmlucHJtIi4KKyAqIEBuZXh0X2RvbWFpbjogICAgUG9pbnRlciB0byBwb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKwkJCSAgICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoqbmV4dF9kb21haW4pCit7CisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgc2l6ZSBvZiBidWZmZXIgcmV0dXJuZWQgYnkKKwkgKiB0b21veW9fcmVhbHBhdGgoKSA9IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOLgorCSAqLworCXN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIgKnRtcCA9IHRvbW95b19hbGxvYyhzaXplb2YoKnRtcCkpOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKm9sZF9kb21haW4gPSB0b21veW9fZG9tYWluKCk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKKwljb25zdCBjaGFyICpvbGRfZG9tYWluX25hbWUgPSBvbGRfZG9tYWluLT5kb21haW5uYW1lLT5uYW1lOworCWNvbnN0IGNoYXIgKm9yaWdpbmFsX25hbWUgPSBicHJtLT5maWxlbmFtZTsKKwljaGFyICpuZXdfZG9tYWluX25hbWUgPSBOVUxMOworCWNoYXIgKnJlYWxfcHJvZ3JhbV9uYW1lID0gTlVMTDsKKwljaGFyICpzeW1saW5rX3Byb2dyYW1fbmFtZSA9IE5VTEw7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhvbGRfZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyByOyAvKiByZWFsIG5hbWUgKi8KKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBzOyAvKiBzeW1saW5rIG5hbWUgKi8KKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBsOyAvKiBsYXN0IG5hbWUgKi8KKwlzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKKworCWlmICghdG1wKQorCQlnb3RvIG91dDsKKworCWlmICghaW5pdGlhbGl6ZWQpIHsKKwkJLyoKKwkJICogQnVpbHQtaW4gaW5pdGlhbGl6ZXJzLiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHBvbGljaWVzIGFyZQorCQkgKiBub3QgbG9hZGVkIHVudGlsIHN0YXJ0aW5nIC9zYmluL2luaXQuCisJCSAqLworCQl0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeShOVUxMLCAiL3NiaW4vaG90cGx1ZyIsCisJCQkJCQkgICAgICAgZmFsc2UsIGZhbHNlKTsKKwkJdG9tb3lvX3VwZGF0ZV9kb21haW5faW5pdGlhbGl6ZXJfZW50cnkoTlVMTCwgIi9zYmluL21vZHByb2JlIiwKKwkJCQkJCSAgICAgICBmYWxzZSwgZmFsc2UpOworCQlpbml0aWFsaXplZCA9IHRydWU7CisJfQorCisJLyogR2V0IHRvbW95b19yZWFscGF0aCBvZiBwcm9ncmFtLiAqLworCXJldHZhbCA9IC1FTk9FTlQ7CisJLyogSSBob3BlIHRvbW95b19yZWFscGF0aCgpIHdvbid0IGZhaWwgd2l0aCAtRU5PTUVNLiAqLworCXJlYWxfcHJvZ3JhbV9uYW1lID0gdG9tb3lvX3JlYWxwYXRoKG9yaWdpbmFsX25hbWUpOworCWlmICghcmVhbF9wcm9ncmFtX25hbWUpCisJCWdvdG8gb3V0OworCS8qIEdldCB0b21veW9fcmVhbHBhdGggb2Ygc3ltYm9saWMgbGluay4gKi8KKwlzeW1saW5rX3Byb2dyYW1fbmFtZSA9IHRvbW95b19yZWFscGF0aF9ub2ZvbGxvdyhvcmlnaW5hbF9uYW1lKTsKKwlpZiAoIXN5bWxpbmtfcHJvZ3JhbV9uYW1lKQorCQlnb3RvIG91dDsKKworCXIubmFtZSA9IHJlYWxfcHJvZ3JhbV9uYW1lOworCXRvbW95b19maWxsX3BhdGhfaW5mbygmcik7CisJcy5uYW1lID0gc3ltbGlua19wcm9ncmFtX25hbWU7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZzKTsKKwlsLm5hbWUgPSB0b21veW9fZ2V0X2xhc3RfbmFtZShvbGRfZG9tYWluKTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJmwpOworCisJLyogQ2hlY2sgJ2FsaWFzJyBkaXJlY3RpdmUuICovCisJaWYgKHRvbW95b19wYXRoY21wKCZyLCAmcykpIHsKKwkJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcHRyOworCQkvKiBJcyB0aGlzIHByb2dyYW0gYWxsb3dlZCB0byBiZSBjYWxsZWQgdmlhIHN5bWJvbGljIGxpbmtzPyAqLworCQlkb3duX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19hbGlhc19saXN0LCBsaXN0KSB7CisJCQlpZiAocHRyLT5pc19kZWxldGVkIHx8CisJCQkgICAgdG9tb3lvX3BhdGhjbXAoJnIsIHB0ci0+b3JpZ2luYWxfbmFtZSkgfHwKKwkJCSAgICB0b21veW9fcGF0aGNtcCgmcywgcHRyLT5hbGlhc2VkX25hbWUpKQorCQkJCWNvbnRpbnVlOworCQkJbWVtc2V0KHJlYWxfcHJvZ3JhbV9uYW1lLCAwLCBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTik7CisJCQlzdHJuY3B5KHJlYWxfcHJvZ3JhbV9uYW1lLCBwdHItPmFsaWFzZWRfbmFtZS0+bmFtZSwKKwkJCQlUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiAtIDEpOworCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZyKTsKKwkJCWJyZWFrOworCQl9CisJCXVwX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOworCX0KKworCS8qIENoZWNrIGV4ZWN1dGUgcGVybWlzc2lvbi4gKi8KKwlyZXR2YWwgPSB0b21veW9fY2hlY2tfZXhlY19wZXJtKG9sZF9kb21haW4sICZyLCB0bXApOworCWlmIChyZXR2YWwgPCAwKQorCQlnb3RvIG91dDsKKworCW5ld19kb21haW5fbmFtZSA9IHRtcC0+YnVmZmVyOworCWlmICh0b21veW9faXNfZG9tYWluX2luaXRpYWxpemVyKG9sZF9kb21haW4tPmRvbWFpbm5hbWUsICZyLCAmbCkpIHsKKwkJLyogVHJhbnNpdCB0byB0aGUgY2hpbGQgb2YgdG9tb3lvX2tlcm5lbF9kb21haW4gZG9tYWluLiAqLworCQlzbnByaW50ZihuZXdfZG9tYWluX25hbWUsIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOICsgMSwKKwkJCSBUT01PWU9fUk9PVF9OQU1FICIgIiAiJXMiLCByZWFsX3Byb2dyYW1fbmFtZSk7CisJfSBlbHNlIGlmIChvbGRfZG9tYWluID09ICZ0b21veW9fa2VybmVsX2RvbWFpbiAmJgorCQkgICAhdG9tb3lvX3BvbGljeV9sb2FkZWQpIHsKKwkJLyoKKwkJICogTmVlZG4ndCB0byB0cmFuc2l0IGZyb20ga2VybmVsIGRvbWFpbiBiZWZvcmUgc3RhcnRpbmcKKwkJICogL3NiaW4vaW5pdC4gQnV0IHRyYW5zaXQgZnJvbSBrZXJuZWwgZG9tYWluIGlmIGV4ZWN1dGluZworCQkgKiBpbml0aWFsaXplcnMgYmVjYXVzZSB0aGV5IG1pZ2h0IHN0YXJ0IGJlZm9yZSAvc2Jpbi9pbml0LgorCQkgKi8KKwkJZG9tYWluID0gb2xkX2RvbWFpbjsKKwl9IGVsc2UgaWYgKHRvbW95b19pc19kb21haW5fa2VlcGVyKG9sZF9kb21haW4tPmRvbWFpbm5hbWUsICZyLCAmbCkpIHsKKwkJLyogS2VlcCBjdXJyZW50IGRvbWFpbi4gKi8KKwkJZG9tYWluID0gb2xkX2RvbWFpbjsKKwl9IGVsc2UgeworCQkvKiBOb3JtYWwgZG9tYWluIHRyYW5zaXRpb24uICovCisJCXNucHJpbnRmKG5ld19kb21haW5fbmFtZSwgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gKyAxLAorCQkJICIlcyAlcyIsIG9sZF9kb21haW5fbmFtZSwgcmVhbF9wcm9ncmFtX25hbWUpOworCX0KKwlpZiAoZG9tYWluIHx8IHN0cmxlbihuZXdfZG9tYWluX25hbWUpID49IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOKQorCQlnb3RvIGRvbmU7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJZG9tYWluID0gdG9tb3lvX2ZpbmRfZG9tYWluKG5ld19kb21haW5fbmFtZSk7CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCWlmIChkb21haW4pCisJCWdvdG8gZG9uZTsKKwlpZiAoaXNfZW5mb3JjZSkKKwkJZ290byBkb25lOworCWRvbWFpbiA9IHRvbW95b19maW5kX29yX2Fzc2lnbl9uZXdfZG9tYWluKG5ld19kb21haW5fbmFtZSwKKwkJCQkJCSAgb2xkX2RvbWFpbi0+cHJvZmlsZSk7CisgZG9uZToKKwlpZiAoZG9tYWluKQorCQlnb3RvIG91dDsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJUT01PWU8tRVJST1I6IERvbWFpbiAnJXMnIG5vdCBkZWZpbmVkLlxuIiwKKwkgICAgICAgbmV3X2RvbWFpbl9uYW1lKTsKKwlpZiAoaXNfZW5mb3JjZSkKKwkJcmV0dmFsID0gLUVQRVJNOworCWVsc2UKKwkJdG9tb3lvX3NldF9kb21haW5fZmxhZyhvbGRfZG9tYWluLCBmYWxzZSwKKwkJCQkgICAgICAgVE9NT1lPX0RPTUFJTl9GTEFHU19UUkFOU0lUSU9OX0ZBSUxFRCk7Cisgb3V0OgorCXRvbW95b19mcmVlKHJlYWxfcHJvZ3JhbV9uYW1lKTsKKwl0b21veW9fZnJlZShzeW1saW5rX3Byb2dyYW1fbmFtZSk7CisJKm5leHRfZG9tYWluID0gZG9tYWluID8gZG9tYWluIDogb2xkX2RvbWFpbjsKKwl0b21veW9fZnJlZSh0bXApOworCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vZmlsZS5jIGIvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWY1MGMxCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYwpAQCAtMCwwICsxLDEyNDEgQEAKKy8qCisgKiBzZWN1cml0eS90b21veW8vZmlsZS5jCisgKgorICogSW1wbGVtZW50YXRpb24gb2YgdGhlIERvbWFpbi1CYXNlZCBNYW5kYXRvcnkgQWNjZXNzIENvbnRyb2wuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAidG9tb3lvLmgiCisjaW5jbHVkZSAicmVhbHBhdGguaCIKKyNkZWZpbmUgQUNDX01PREUoeCkgKCJcMDAwXDAwNFwwMDJcMDA2IlsoeCkmT19BQ0NNT0RFXSkKKworLyogU3RydWN0dXJlIGZvciAiYWxsb3dfcmVhZCIga2V5d29yZC4gKi8KK3N0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTsKKwlib29sIGlzX2RlbGV0ZWQ7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yICJmaWxlX3BhdHRlcm4iIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybjsKKwlib29sIGlzX2RlbGV0ZWQ7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yICJkZW55X3Jld3JpdGUiIGtleXdvcmQuICovCitzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybjsKKwlib29sIGlzX2RlbGV0ZWQ7Cit9OworCisvKiBLZXl3b3JkIGFycmF5IGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb25zLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19zcF9rZXl3b3JkW1RPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OXSA9IHsKKwlbVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0xdID0gInJlYWQvd3JpdGUiLAorCVtUT01PWU9fVFlQRV9FWEVDVVRFX0FDTF0gICAgPSAiZXhlY3V0ZSIsCisJW1RPTU9ZT19UWVBFX1JFQURfQUNMXSAgICAgICA9ICJyZWFkIiwKKwlbVE9NT1lPX1RZUEVfV1JJVEVfQUNMXSAgICAgID0gIndyaXRlIiwKKwlbVE9NT1lPX1RZUEVfQ1JFQVRFX0FDTF0gICAgID0gImNyZWF0ZSIsCisJW1RPTU9ZT19UWVBFX1VOTElOS19BQ0xdICAgICA9ICJ1bmxpbmsiLAorCVtUT01PWU9fVFlQRV9NS0RJUl9BQ0xdICAgICAgPSAibWtkaXIiLAorCVtUT01PWU9fVFlQRV9STURJUl9BQ0xdICAgICAgPSAicm1kaXIiLAorCVtUT01PWU9fVFlQRV9NS0ZJRk9fQUNMXSAgICAgPSAibWtmaWZvIiwKKwlbVE9NT1lPX1RZUEVfTUtTT0NLX0FDTF0gICAgID0gIm1rc29jayIsCisJW1RPTU9ZT19UWVBFX01LQkxPQ0tfQUNMXSAgICA9ICJta2Jsb2NrIiwKKwlbVE9NT1lPX1RZUEVfTUtDSEFSX0FDTF0gICAgID0gIm1rY2hhciIsCisJW1RPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTF0gICA9ICJ0cnVuY2F0ZSIsCisJW1RPTU9ZT19UWVBFX1NZTUxJTktfQUNMXSAgICA9ICJzeW1saW5rIiwKKwlbVE9NT1lPX1RZUEVfUkVXUklURV9BQ0xdICAgID0gInJld3JpdGUiLAorfTsKKworLyogS2V5d29yZCBhcnJheSBmb3IgZG91YmxlIHBhdGggb3BlcmF0aW9ucy4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICp0b21veW9fZHBfa2V5d29yZFtUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTl0gPSB7CisJW1RPTU9ZT19UWVBFX0xJTktfQUNMXSAgICA9ICJsaW5rIiwKKwlbVE9NT1lPX1RZUEVfUkVOQU1FX0FDTF0gID0gInJlbmFtZSIsCit9OworCisvKioKKyAqIHRvbW95b19zcDJrZXl3b3JkIC0gR2V0IHRoZSBuYW1lIG9mIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqCisgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqCisgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqLworY29uc3QgY2hhciAqdG9tb3lvX3NwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKQoreworCXJldHVybiAob3BlcmF0aW9uIDwgVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT04pCisJCT8gdG9tb3lvX3NwX2tleXdvcmRbb3BlcmF0aW9uXSA6IE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX2RwMmtleXdvcmQgLSBHZXQgdGhlIG5hbWUgb2YgZG91YmxlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgorICoKKyAqIFJldHVybnMgdGhlIG5hbWUgb2YgZG91YmxlIHBhdGggb3BlcmF0aW9uLgorICovCitjb25zdCBjaGFyICp0b21veW9fZHAya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pCit7CisJcmV0dXJuIChvcGVyYXRpb24gPCBUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTikKKwkJPyB0b21veW9fZHBfa2V5d29yZFtvcGVyYXRpb25dIDogTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fc3RyZW5kc3dpdGggLSBDaGVjayB3aGV0aGVyIHRoZSB0b2tlbiBlbmRzIHdpdGggdGhlIGdpdmVuIHRva2VuLgorICoKKyAqIEBuYW1lOiBUaGUgdG9rZW4gdG8gY2hlY2suCisgKiBAdGFpbDogVGhlIHRva2VuIHRvIGZpbmQuCisgKgorICogUmV0dXJucyB0cnVlIGlmIEBuYW1lIGVuZHMgd2l0aCBAdGFpbCwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgYm9vbCB0b21veW9fc3RyZW5kc3dpdGgoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdGFpbCkKK3sKKwlpbnQgbGVuOworCisJaWYgKCFuYW1lIHx8ICF0YWlsKQorCQlyZXR1cm4gZmFsc2U7CisJbGVuID0gc3RybGVuKG5hbWUpIC0gc3RybGVuKHRhaWwpOworCXJldHVybiBsZW4gPj0gMCAmJiAhc3RyY21wKG5hbWUgKyBsZW4sIHRhaWwpOworfQorCisvKioKKyAqIHRvbW95b19nZXRfcGF0aCAtIEdldCByZWFscGF0aC4KKyAqCisgKiBAcGF0aDogUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnRvbW95b19nZXRfcGF0aChzdHJ1Y3QgcGF0aCAqcGF0aCkKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhICpidWYgPSB0b21veW9fYWxsb2Moc2l6ZW9mKCpidWYpKTsKKworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKKwkvKiBSZXNlcnZlIG9uZSBieXRlIGZvciBhcHBlbmRpbmcgIi8iLiAqLworCWVycm9yID0gdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aDIocGF0aCwgYnVmLT5ib2R5LAorCQkJCQkgICBzaXplb2YoYnVmLT5ib2R5KSAtIDIpOworCWlmICghZXJyb3IpIHsKKwkJYnVmLT5oZWFkLm5hbWUgPSBidWYtPmJvZHk7CisJCXRvbW95b19maWxsX3BhdGhfaW5mbygmYnVmLT5oZWFkKTsKKwkJcmV0dXJuICZidWYtPmhlYWQ7CisJfQorCXRvbW95b19mcmVlKGJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIExvY2sgZm9yIGRvbWFpbi0+YWNsX2luZm9fbGlzdC4gKi8KK0RFQ0xBUkVfUldTRU0odG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwKKwkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lMiwKKwkJCQkJIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgorCQkJCQkgY29uc3QgZG9tYWluLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7CitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKworLyoqCisgKiB0b21veW9fdXBkYXRlX2dsb2JhbGx5X3JlYWRhYmxlX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkiIGxpc3QuCisgKgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdW5jb25kaXRpb25hbGx5IHBlcm1pdHRlZCB0byBvcGVuKCkgZm9yIHJlYWRpbmcuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fdXBkYXRlX2dsb2JhbGx5X3JlYWRhYmxlX2VudHJ5KGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkJIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9maWxlbmFtZTsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKGZpbGVuYW1lLCAxLCAwLCAtMSwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzYXZlZF9maWxlbmFtZSA9IHRvbW95b19zYXZlX25hbWUoZmlsZW5hbWUpOworCWlmICghc2F2ZWRfZmlsZW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmZpbGVuYW1lICE9IHNhdmVkX2ZpbGVuYW1lKQorCQkJY29udGludWU7CisJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJaWYgKGlzX2RlbGV0ZSkgeworCQllcnJvciA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwluZXdfZW50cnkgPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKm5ld19lbnRyeSkpOworCWlmICghbmV3X2VudHJ5KQorCQlnb3RvIG91dDsKKwluZXdfZW50cnktPmZpbGVuYW1lID0gc2F2ZWRfZmlsZW5hbWU7CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QpOworCWVycm9yID0gMDsKKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19pc19nbG9iYWxseV9yZWFkYWJsZV9maWxlIC0gQ2hlY2sgaWYgdGhlIGZpbGUgaXMgdW5jb25kaXRpb25uYWx5IHBlcm1pdHRlZCB0byBiZSBvcGVuKCllZCBmb3IgcmVhZGluZy4KKyAqCisgKiBAZmlsZW5hbWU6IFRoZSBmaWxlbmFtZSB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYW55IGRvbWFpbiBjYW4gb3BlbiBAZmlsZW5hbWUgZm9yIHJlYWRpbmcsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGJvb2wgdG9tb3lvX2lzX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGUoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQkgICAgIGZpbGVuYW1lKQoreworCXN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSAqcHRyOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKwlkb3duX3JlYWQoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFwdHItPmlzX2RlbGV0ZWQgJiYKKwkJICAgIHRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5maWxlbmFtZSkpIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0X2xvY2spOworCXJldHVybiBmb3VuZDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJcmV0dXJuIHRvbW95b191cGRhdGVfZ2xvYmFsbHlfcmVhZGFibGVfZW50cnkoZGF0YSwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9nbG9iYWxseV9yZWFkYWJsZV9wb2xpY3kgLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkiIGxpc3QuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19yZWFkX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCisJCQkgICAgICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKnB0cjsKKwkJcHRyID0gbGlzdF9lbnRyeShwb3MsCisJCQkJIHN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSwKKwkJCQkgbGlzdCk7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9faW9fcHJpbnRmKGhlYWQsIFRPTU9ZT19LRVlXT1JEX0FMTE9XX1JFQUQgIiVzXG4iLAorCQkJCSAgICAgIHB0ci0+ZmlsZW5hbWUtPm5hbWUpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKKwlyZXR1cm4gZG9uZTsKK30KKworLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkiLiAqLworc3RhdGljIExJU1RfSEVBRCh0b21veW9fcGF0dGVybl9saXN0KTsKK3N0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisKKy8qKgorICogdG9tb3lvX3VwZGF0ZV9maWxlX3BhdHRlcm5fZW50cnkgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAcGF0dGVybjogICBQYXRobmFtZSBwYXR0ZXJuLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9maWxlX3BhdHRlcm5fZW50cnkoY29uc3QgY2hhciAqcGF0dGVybiwKKwkJCQkJICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9wYXR0ZXJuOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocGF0dGVybiwgMCwgMSwgMCwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzYXZlZF9wYXR0ZXJuID0gdG9tb3lvX3NhdmVfbmFtZShwYXR0ZXJuKTsKKwlpZiAoIXNhdmVkX3BhdHRlcm4pCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BhdHRlcm5fbGlzdCwgbGlzdCkgeworCQlpZiAoc2F2ZWRfcGF0dGVybiAhPSBwdHItPnBhdHRlcm4pCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+cGF0dGVybiA9IHNhdmVkX3BhdHRlcm47CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX3BhdHRlcm5fbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fZ2V0X2ZpbGVfcGF0dGVybiAtIEdldCBwYXR0ZXJuZWQgcGF0aG5hbWUuCisgKgorICogQGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8gZmluZCBwYXR0ZXJuZWQgcGF0aG5hbWUuCisgKgorICogUmV0dXJucyBwb2ludGVyIHRvIHBhdGhuYW1lIHBhdHRlcm4gaWYgbWF0Y2hlZCwgQGZpbGVuYW1lIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKK3RvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgKnB0cjsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybiA9IE5VTEw7CisKKwlkb3duX3JlYWQoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcGF0dGVybl9saXN0LCBsaXN0KSB7CisJCWlmIChwdHItPmlzX2RlbGV0ZWQpCisJCQljb250aW51ZTsKKwkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUsIHB0ci0+cGF0dGVybikpCisJCQljb250aW51ZTsKKwkJcGF0dGVybiA9IHB0ci0+cGF0dGVybjsKKwkJaWYgKHRvbW95b19zdHJlbmRzd2l0aChwYXR0ZXJuLT5uYW1lLCAiL1xcKiIpKSB7CisJCQkvKiBEbyBub3RoaW5nLiBUcnkgdG8gZmluZCB0aGUgYmV0dGVyIG1hdGNoLiAqLworCQl9IGVsc2UgeworCQkJLyogVGhpcyB3b3VsZCBiZSB0aGUgYmV0dGVyIG1hdGNoLiBVc2UgdGhpcy4gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJaWYgKHBhdHRlcm4pCisJCWZpbGVuYW1lID0gcGF0dGVybjsKKwlyZXR1cm4gZmlsZW5hbWU7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX3BhdHRlcm5fcG9saWN5IC0gV3JpdGUgInN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSIgbGlzdC4KKyAqCisgKiBAZGF0YTogICAgICBTdHJpbmcgdG8gcGFyc2UuCisgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b193cml0ZV9wYXR0ZXJuX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9maWxlX3BhdHRlcm5fZW50cnkoZGF0YSwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9maWxlX3BhdHRlcm4gLSBSZWFkICJzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkiIGxpc3QuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitib29sIHRvbW95b19yZWFkX2ZpbGVfcGF0dGVybihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJYm9vbCBkb25lID0gdHJ1ZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMiwgJnRvbW95b19wYXR0ZXJuX2xpc3QpIHsKKwkJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpwdHI7CisJCXB0ciA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnksIGxpc3QpOworCQlpZiAocHRyLT5pc19kZWxldGVkKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCBUT01PWU9fS0VZV09SRF9GSUxFX1BBVFRFUk4gIiVzXG4iLAorCQkJCSAgICAgIHB0ci0+cGF0dGVybi0+bmFtZSkpIHsKKwkJCWRvbmUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJfQorCXVwX3JlYWQoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJcmV0dXJuIGRvbmU7Cit9CisKKy8qIFRoZSBsaXN0IGZvciAic3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5Ii4gKi8KK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX25vX3Jld3JpdGVfbGlzdCk7CitzdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCisvKioKKyAqIHRvbW95b191cGRhdGVfbm9fcmV3cml0ZV9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBwYXR0ZXJuOiAgIFBhdGhuYW1lIHBhdHRlcm4gdGhhdCBhcmUgbm90IHJld3JpdGFibGUgYnkgZGVmYXVsdC4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfbm9fcmV3cml0ZV9lbnRyeShjb25zdCBjaGFyICpwYXR0ZXJuLAorCQkJCQkgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqbmV3X2VudHJ5LCAqcHRyOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9wYXR0ZXJuOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocGF0dGVybiwgMCwgMCwgMCwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzYXZlZF9wYXR0ZXJuID0gdG9tb3lvX3NhdmVfbmFtZShwYXR0ZXJuKTsKKwlpZiAoIXNhdmVkX3BhdHRlcm4pCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCwgbGlzdCkgeworCQlpZiAocHRyLT5wYXR0ZXJuICE9IHNhdmVkX3BhdHRlcm4pCisJCQljb250aW51ZTsKKwkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoaXNfZGVsZXRlKSB7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJZ290byBvdXQ7CisJfQorCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7CisJaWYgKCFuZXdfZW50cnkpCisJCWdvdG8gb3V0OworCW5ld19lbnRyeS0+cGF0dGVybiA9IHNhdmVkX3BhdHRlcm47CisJbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCk7CisJZXJyb3IgPSAwOworIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9faXNfbm9fcmV3cml0ZV9maWxlIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHBhdGhuYW1lIGlzIG5vdCBwZXJtaXR0ZWQgdG8gYmUgcmV3cml0ZWQuCisgKgorICogQGZpbGVuYW1lOiBGaWxlbmFtZSB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIGlzIHNwZWNpZmllZCBieSAiZGVueV9yZXdyaXRlIiBkaXJlY3RpdmUsCisgKiBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBib29sIHRvbW95b19pc19ub19yZXdyaXRlX2ZpbGUoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQoreworCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqcHRyOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKworCWRvd25fcmVhZCgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5wYXR0ZXJuKSkKKwkJCWNvbnRpbnVlOworCQlmb3VuZCA9IHRydWU7CisJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCXJldHVybiBmb3VuZDsKK30KKworLyoqCisgKiB0b21veW9fd3JpdGVfbm9fcmV3cml0ZV9wb2xpY3kgLSBXcml0ZSAic3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IiBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX3dyaXRlX25vX3Jld3JpdGVfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXJldHVybiB0b21veW9fdXBkYXRlX25vX3Jld3JpdGVfZW50cnkoZGF0YSwgaXNfZGVsZXRlKTsKK30KKworLyoqCisgKiB0b21veW9fcmVhZF9ub19yZXdyaXRlX3BvbGljeSAtIFJlYWQgInN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSIgbGlzdC4KKyAqCisgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgorICoKKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgdG9tb3lvX3JlYWRfbm9fcmV3cml0ZV9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcG9zOworCWJvb2wgZG9uZSA9IHRydWU7CisKKwlkb3duX3JlYWQoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0KSB7CisJCXN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSAqcHRyOworCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5LCBsaXN0KTsKKwkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFICIlc1xuIiwKKwkJCQkgICAgICBwdHItPnBhdHRlcm4tPm5hbWUpKSB7CisJCQlkb25lID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cF9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCXJldHVybiBkb25lOworfQorCisvKioKKyAqIHRvbW95b191cGRhdGVfZmlsZV9hY2wgLSBVcGRhdGUgZmlsZSdzIHJlYWQvd3JpdGUvZXhlY3V0ZSBBQ0wuCisgKgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUuCisgKiBAcGVybTogICAgICBQZXJtaXNzaW9uIChiZXR3ZWVuIDEgdG8gNykuCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIFRoaXMgaXMgbGVnYWN5IHN1cHBvcnQgaW50ZXJmYWNlIGZvciBvbGRlciBwb2xpY3kgc3ludGF4LgorICogQ3VycmVudCBwb2xpY3kgc3ludGF4IHVzZXMgImFsbG93X3JlYWQvd3JpdGUiIGluc3RlYWQgb2YgIjYiLAorICogImFsbG93X3JlYWQiIGluc3RlYWQgb2YgIjQiLCAiYWxsb3dfd3JpdGUiIGluc3RlYWQgb2YgIjIiLAorICogImFsbG93X2V4ZWN1dGUiIGluc3RlYWQgb2YgIjEiLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZmlsZV9hY2woY29uc3QgY2hhciAqZmlsZW5hbWUsIHU4IHBlcm0sCisJCQkJICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAorCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCit7CisJaWYgKHBlcm0gPiA3IHx8ICFwZXJtKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW52YWxpZCBwZXJtaXNzaW9uICclZCAlcydcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgcGVybSwgZmlsZW5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKGZpbGVuYW1lWzBdICE9ICdAJyAmJiB0b21veW9fc3RyZW5kc3dpdGgoZmlsZW5hbWUsICIvIikpCisJCS8qCisJCSAqIE9ubHkgJ2FsbG93X21rZGlyJyBhbmQgJ2FsbG93X3JtZGlyJyBhcmUgdmFsaWQgZm9yCisJCSAqIGRpcmVjdG9yeSBwZXJtaXNzaW9ucy4KKwkJICovCisJCXJldHVybiAwOworCWlmIChwZXJtICYgNCkKKwkJdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woVE9NT1lPX1RZUEVfUkVBRF9BQ0wsIGZpbGVuYW1lLAorCQkJCQkgICAgICBkb21haW4sIGlzX2RlbGV0ZSk7CisJaWYgKHBlcm0gJiAyKQorCQl0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChUT01PWU9fVFlQRV9XUklURV9BQ0wsIGZpbGVuYW1lLAorCQkJCQkgICAgICBkb21haW4sIGlzX2RlbGV0ZSk7CisJaWYgKHBlcm0gJiAxKQorCQl0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChUT01PWU9fVFlQRV9FWEVDVVRFX0FDTCwKKwkJCQkJICAgICAgZmlsZW5hbWUsIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMiAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqCisgKiBAZG9tYWluOiAgICAgICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBmaWxlbmFtZTogICAgICAgIEZpbGVuYW1lIHRvIGNoZWNrLgorICogQHBlcm06ICAgICAgICAgICAgUGVybWlzc2lvbi4KKyAqIEBtYXlfdXNlX3BhdHRlcm46IFRydWUgaWYgcGF0dGVybmVkIEFDTCBpcyBwZXJtaXR0ZWQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUEVSTSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbDIoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBkb21haW4sCisJCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCisJCQkJCSBmaWxlbmFtZSwKKwkJCQkJIGNvbnN0IHUxNiBwZXJtLAorCQkJCQkgY29uc3QgYm9vbCBtYXlfdXNlX3BhdHRlcm4pCit7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCWludCBlcnJvciA9IC1FUEVSTTsKKworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsOworCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmICghKGFjbC0+cGVybSAmIHBlcm0pKQorCQkJY29udGludWU7CisJCWlmIChtYXlfdXNlX3BhdHRlcm4gfHwgIWFjbC0+ZmlsZW5hbWUtPmlzX3BhdHRlcm5lZCkgeworCQkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUsCisJCQkJCQkJIGFjbC0+ZmlsZW5hbWUpKQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJY29udGludWU7CisJCX0KKwkJZXJyb3IgPSAwOworCQlicmVhazsKKwl9CisJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfZmlsZV9hY2wgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBvcGVuaW5nIGZpbGVzLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUgdG8gY2hlY2suCisgKiBAb3BlcmF0aW9uOiBNb2RlICgicmVhZCIgb3IgIndyaXRlIiBvciAicmVhZC93cml0ZSIgb3IgImV4ZWN1dGUiKS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVQRVJNIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfZmlsZV9hY2woY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkJIGNvbnN0IHU4IG9wZXJhdGlvbikKK3sKKwl1MTYgcGVybSA9IDA7CisKKwlpZiAoIXRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpKQorCQlyZXR1cm4gMDsKKwlpZiAob3BlcmF0aW9uID09IDYpCisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMOworCWVsc2UgaWYgKG9wZXJhdGlvbiA9PSA0KQorCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9SRUFEX0FDTDsKKwllbHNlIGlmIChvcGVyYXRpb24gPT0gMikKKwkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfV1JJVEVfQUNMOworCWVsc2UgaWYgKG9wZXJhdGlvbiA9PSAxKQorCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9FWEVDVVRFX0FDTDsKKwllbHNlCisJCUJVRygpOworCXJldHVybiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMihkb21haW4sIGZpbGVuYW1lLCBwZXJtLAorCQkJCQkgICAgIG9wZXJhdGlvbiAhPSAxKTsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfZmlsZV9wZXJtMiAtIENoZWNrIHBlcm1pc3Npb24gZm9yIG9wZW5pbmcgZmlsZXMuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZSB0byBjaGVjay4KKyAqIEBwZXJtOiAgICAgIE1vZGUgKCJyZWFkIiBvciAid3JpdGUiIG9yICJyZWFkL3dyaXRlIiBvciAiZXhlY3V0ZSIpLgorICogQG9wZXJhdGlvbjogT3BlcmF0aW9uIG5hbWUgcGFzc2VkIHVzZWQgZm9yIHZlcmJvc2UgbW9kZS4KKyAqIEBtb2RlOiAgICAgIEFjY2VzcyBjb250cm9sIG1vZGUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfZmlsZV9wZXJtMihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCQkgICBjb25zdCB1OCBwZXJtLCBjb25zdCBjaGFyICpvcGVyYXRpb24sCisJCQkJICAgY29uc3QgdTggbW9kZSkKK3sKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKwljb25zdCBjaGFyICptc2cgPSAiPHVua25vd24+IjsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKCFmaWxlbmFtZSkKKwkJcmV0dXJuIDA7CisJZXJyb3IgPSB0b21veW9fY2hlY2tfZmlsZV9hY2woZG9tYWluLCBmaWxlbmFtZSwgcGVybSk7CisJaWYgKGVycm9yICYmIHBlcm0gPT0gNCAmJgorCSAgICAoZG9tYWluLT5mbGFncyAmIFRPTU9ZT19ET01BSU5fRkxBR1NfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEKSA9PSAwCisJICAgICYmIHRvbW95b19pc19nbG9iYWxseV9yZWFkYWJsZV9maWxlKGZpbGVuYW1lKSkKKwkJZXJyb3IgPSAwOworCWlmIChwZXJtID09IDYpCisJCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKTsKKwllbHNlIGlmIChwZXJtID09IDQpCisJCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX1JFQURfQUNMKTsKKwllbHNlIGlmIChwZXJtID09IDIpCisJCW1zZyA9IHRvbW95b19zcDJrZXl3b3JkKFRPTU9ZT19UWVBFX1dSSVRFX0FDTCk7CisJZWxzZSBpZiAocGVybSA9PSAxKQorCQltc2cgPSB0b21veW9fc3Aya2V5d29yZChUT01PWU9fVFlQRV9FWEVDVVRFX0FDTCk7CisJZWxzZQorCQlCVUcoKTsKKwlpZiAoIWVycm9yKQorCQlyZXR1cm4gMDsKKwlpZiAodG9tb3lvX3ZlcmJvc2VfbW9kZShkb21haW4pKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJUT01PWU8tJXM6IEFjY2VzcyAnJXMoJXMpICVzJyBkZW5pZWQgIgorCQkgICAgICAgImZvciAlc1xuIiwgdG9tb3lvX2dldF9tc2coaXNfZW5mb3JjZSksIG1zZywgb3BlcmF0aW9uLAorCQkgICAgICAgZmlsZW5hbWUtPm5hbWUsIHRvbW95b19nZXRfbGFzdF9uYW1lKGRvbWFpbikpOworCWlmIChpc19lbmZvcmNlKQorCQlyZXR1cm4gZXJyb3I7CisJaWYgKG1vZGUgPT0gMSAmJiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKGRvbWFpbikpIHsKKwkJLyogRG9uJ3QgdXNlIHBhdHRlcm5zIGZvciBleGVjdXRlIHBlcm1pc3Npb24uICovCisJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwYXR0ZXJuZWRfZmlsZSA9IChwZXJtICE9IDEpID8KKwkJCXRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGZpbGVuYW1lKSA6IGZpbGVuYW1lOworCQl0b21veW9fdXBkYXRlX2ZpbGVfYWNsKHBhdHRlcm5lZF9maWxlLT5uYW1lLCBwZXJtLAorCQkJCSAgICAgICBkb21haW4sIGZhbHNlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX2ZpbGVfcG9saWN5IC0gVXBkYXRlIGZpbGUgcmVsYXRlZCBsaXN0LgorICoKKyAqIEBkYXRhOiAgICAgIFN0cmluZyB0byBwYXJzZS4KKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fd3JpdGVfZmlsZV9wb2xpY3koY2hhciAqZGF0YSwgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwljaGFyICpmaWxlbmFtZSA9IHN0cmNocihkYXRhLCAnICcpOworCWNoYXIgKmZpbGVuYW1lMjsKKwl1bnNpZ25lZCBpbnQgcGVybTsKKwl1OCB0eXBlOworCisJaWYgKCFmaWxlbmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJKmZpbGVuYW1lKysgPSAnXDAnOworCWlmIChzc2NhbmYoZGF0YSwgIiV1IiwgJnBlcm0pID09IDEpCisJCXJldHVybiB0b21veW9fdXBkYXRlX2ZpbGVfYWNsKGZpbGVuYW1lLCAodTgpIHBlcm0sIGRvbWFpbiwKKwkJCQkJICAgICAgaXNfZGVsZXRlKTsKKwlpZiAoc3RybmNtcChkYXRhLCAiYWxsb3dfIiwgNikpCisJCWdvdG8gb3V0OworCWRhdGEgKz0gNjsKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgVE9NT1lPX01BWF9TSU5HTEVfUEFUSF9PUEVSQVRJT047IHR5cGUrKykgeworCQlpZiAoc3RyY21wKGRhdGEsIHRvbW95b19zcF9rZXl3b3JkW3R5cGVdKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2wodHlwZSwgZmlsZW5hbWUsCisJCQkJCQkgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwl9CisJZmlsZW5hbWUyID0gc3RyY2hyKGZpbGVuYW1lLCAnICcpOworCWlmICghZmlsZW5hbWUyKQorCQlnb3RvIG91dDsKKwkqZmlsZW5hbWUyKysgPSAnXDAnOworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTjsgdHlwZSsrKSB7CisJCWlmIChzdHJjbXAoZGF0YSwgdG9tb3lvX2RwX2tleXdvcmRbdHlwZV0pKQorCQkJY29udGludWU7CisJCXJldHVybiB0b21veW9fdXBkYXRlX2RvdWJsZV9wYXRoX2FjbCh0eXBlLCBmaWxlbmFtZSwgZmlsZW5hbWUyLAorCQkJCQkJICAgICBkb21haW4sIGlzX2RlbGV0ZSk7CisJfQorIG91dDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiB0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbCAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIiBsaXN0LgorICoKKyAqIEB0eXBlOiAgICAgIFR5cGUgb2Ygb3BlcmF0aW9uLgorICogQGZpbGVuYW1lOiAgRmlsZW5hbWUuCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQoreworCXN0YXRpYyBjb25zdCB1MTYgcndfbWFzayA9CisJCSgxIDw8IFRPTU9ZT19UWVBFX1JFQURfQUNMKSB8ICgxIDw8IFRPTU9ZT19UWVBFX1dSSVRFX0FDTCk7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2ZpbGVuYW1lOworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKwlzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKmFjbDsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWNvbnN0IHUxNiBwZXJtID0gMSA8PCB0eXBlOworCisJaWYgKCFkb21haW4pCisJCXJldHVybiAtRUlOVkFMOworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZSwgMCwgMCwgMCwgX19mdW5jX18pKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzYXZlZF9maWxlbmFtZSA9IHRvbW95b19zYXZlX25hbWUoZmlsZW5hbWUpOworCWlmICghc2F2ZWRfZmlsZW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBTVEFSVCAqKioqKi8KKwlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CisJaWYgKGlzX2RlbGV0ZSkKKwkJZ290byBkZWxldGU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19hY2xfdHlwZTEocHRyKSAhPSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpCisJCQljb250aW51ZTsKKwkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgIGhlYWQpOworCQlpZiAoYWNsLT5maWxlbmFtZSAhPSBzYXZlZF9maWxlbmFtZSkKKwkJCWNvbnRpbnVlOworCQkvKiBTcGVjaWFsIGNhc2UuIENsZWFyIGFsbCBiaXRzIGlmIG1hcmtlZCBhcyBkZWxldGVkLiAqLworCQlpZiAocHRyLT50eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQorCQkJYWNsLT5wZXJtID0gMDsKKwkJYWNsLT5wZXJtIHw9IHBlcm07CisJCWlmICgoYWNsLT5wZXJtICYgcndfbWFzaykgPT0gcndfbWFzaykKKwkJCWFjbC0+cGVybSB8PSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMOworCQllbHNlIGlmIChhY2wtPnBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCkpCisJCQlhY2wtPnBlcm0gfD0gcndfbWFzazsKKwkJcHRyLT50eXBlICY9IH5UT01PWU9fQUNMX0RFTEVURUQ7CisJCWVycm9yID0gMDsKKwkJZ290byBvdXQ7CisJfQorCS8qIE5vdCBmb3VuZC4gQXBwZW5kIGl0IHRvIHRoZSB0YWlsLiAqLworCWFjbCA9IHRvbW95b19hbGxvY19hY2xfZWxlbWVudChUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpOworCWlmICghYWNsKQorCQlnb3RvIG91dDsKKwlhY2wtPnBlcm0gPSBwZXJtOworCWlmIChwZXJtID09ICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkKKwkJYWNsLT5wZXJtIHw9IHJ3X21hc2s7CisJYWNsLT5maWxlbmFtZSA9IHNhdmVkX2ZpbGVuYW1lOworCWxpc3RfYWRkX3RhaWwoJmFjbC0+aGVhZC5saXN0LCAmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKKwllcnJvciA9IDA7CisJZ290byBvdXQ7CisgZGVsZXRlOgorCWVycm9yID0gLUVOT0VOVDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmIChhY2wtPmZpbGVuYW1lICE9IHNhdmVkX2ZpbGVuYW1lKQorCQkJY29udGludWU7CisJCWFjbC0+cGVybSAmPSB+cGVybTsKKwkJaWYgKChhY2wtPnBlcm0gJiByd19tYXNrKSAhPSByd19tYXNrKQorCQkJYWNsLT5wZXJtICY9IH4oMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCk7CisJCWVsc2UgaWYgKCEoYWNsLT5wZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpKSkKKwkJCWFjbC0+cGVybSAmPSB+cndfbWFzazsKKwkJaWYgKCFhY2wtPnBlcm0pCisJCQlwdHItPnR5cGUgfD0gVE9NT1lPX0FDTF9ERUxFVEVEOworCQllcnJvciA9IDA7CisJCWJyZWFrOworCX0KKyBvdXQ6CisJdXBfd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fdXBkYXRlX2RvdWJsZV9wYXRoX2FjbCAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkIiBsaXN0LgorICoKKyAqIEB0eXBlOiAgICAgIFR5cGUgb2Ygb3BlcmF0aW9uLgorICogQGZpbGVuYW1lMTogRmlyc3QgZmlsZW5hbWUuCisgKiBAZmlsZW5hbWUyOiBTZWNvbmQgZmlsZW5hbWUuCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitzdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwKKwkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lMiwKKwkJCQkJIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgorCQkJCQkgY29uc3QgZG9tYWluLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZmlsZW5hbWUxOworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9maWxlbmFtZTI7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOworCXN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCAqYWNsOworCWludCBlcnJvciA9IC1FTk9NRU07CisJY29uc3QgdTggcGVybSA9IDEgPDwgdHlwZTsKKworCWlmICghZG9tYWluKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUxLCAwLCAwLCAwLCBfX2Z1bmNfXykgfHwKKwkgICAgIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUyLCAwLCAwLCAwLCBfX2Z1bmNfXykpCisJCXJldHVybiAtRUlOVkFMOworCXNhdmVkX2ZpbGVuYW1lMSA9IHRvbW95b19zYXZlX25hbWUoZmlsZW5hbWUxKTsKKwlzYXZlZF9maWxlbmFtZTIgPSB0b21veW9fc2F2ZV9uYW1lKGZpbGVuYW1lMik7CisJaWYgKCFzYXZlZF9maWxlbmFtZTEgfHwgIXNhdmVkX2ZpbGVuYW1lMikKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlpZiAoaXNfZGVsZXRlKQorCQlnb3RvIGRlbGV0ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAodG9tb3lvX2FjbF90eXBlMShwdHIpICE9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmIChhY2wtPmZpbGVuYW1lMSAhPSBzYXZlZF9maWxlbmFtZTEgfHwKKwkJICAgIGFjbC0+ZmlsZW5hbWUyICE9IHNhdmVkX2ZpbGVuYW1lMikKKwkJCWNvbnRpbnVlOworCQkvKiBTcGVjaWFsIGNhc2UuIENsZWFyIGFsbCBiaXRzIGlmIG1hcmtlZCBhcyBkZWxldGVkLiAqLworCQlpZiAocHRyLT50eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQorCQkJYWNsLT5wZXJtID0gMDsKKwkJYWNsLT5wZXJtIHw9IHBlcm07CisJCXB0ci0+dHlwZSAmPSB+VE9NT1lPX0FDTF9ERUxFVEVEOworCQllcnJvciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwkvKiBOb3QgZm91bmQuIEFwcGVuZCBpdCB0byB0aGUgdGFpbC4gKi8KKwlhY2wgPSB0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKTsKKwlpZiAoIWFjbCkKKwkJZ290byBvdXQ7CisJYWNsLT5wZXJtID0gcGVybTsKKwlhY2wtPmZpbGVuYW1lMSA9IHNhdmVkX2ZpbGVuYW1lMTsKKwlhY2wtPmZpbGVuYW1lMiA9IHNhdmVkX2ZpbGVuYW1lMjsKKwlsaXN0X2FkZF90YWlsKCZhY2wtPmhlYWQubGlzdCwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCk7CisJZXJyb3IgPSAwOworCWdvdG8gb3V0OworIGRlbGV0ZToKKwllcnJvciA9IC1FTk9FTlQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHRvbW95b19hY2xfdHlwZTIocHRyKSAhPSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpCisJCQljb250aW51ZTsKKwkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAorCQkJCSAgIGhlYWQpOworCQlpZiAoYWNsLT5maWxlbmFtZTEgIT0gc2F2ZWRfZmlsZW5hbWUxIHx8CisJCSAgICBhY2wtPmZpbGVuYW1lMiAhPSBzYXZlZF9maWxlbmFtZTIpCisJCQljb250aW51ZTsKKwkJYWNsLT5wZXJtICY9IH5wZXJtOworCQlpZiAoIWFjbC0+cGVybSkKKwkJCXB0ci0+dHlwZSB8PSBUT01PWU9fQUNMX0RFTEVURUQ7CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisJfQorIG91dDoKKwl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCS8qKioqKiBFWENMVVNJVkUgU0VDVElPTiBFTkQgKioqKiovCisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKgorICogQGRvbWFpbjogICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEB0eXBlOiAgICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWU6IEZpbGVuYW1lIHRvIGNoZWNrLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbChzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJCWNvbnN0IHU4IHR5cGUsCisJCQkJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSkKK3sKKwlpZiAoIXRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbDIoZG9tYWluLCBmaWxlbmFtZSwgMSA8PCB0eXBlLCAxKTsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfZG91YmxlX3BhdGhfYWNsIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgZG91YmxlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQHR5cGU6ICAgICAgVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWUxOiBGaXJzdCBmaWxlbmFtZSB0byBjaGVjay4KKyAqIEBmaWxlbmFtZTI6IFNlY29uZCBmaWxlbmFtZSB0byBjaGVjay4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVQRVJNIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfZG91YmxlX3BhdGhfYWNsKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkJY29uc3QgdTggdHlwZSwKKwkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgorCQkJCQlmaWxlbmFtZTEsCisJCQkJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJZmlsZW5hbWUyKQoreworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cjsKKwljb25zdCB1OCBwZXJtID0gMSA8PCB0eXBlOworCWludCBlcnJvciA9IC1FUEVSTTsKKworCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCisJCXJldHVybiAwOworCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCXN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCAqYWNsOworCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkKKwkJCWNvbnRpbnVlOworCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCisJCQkJICAgaGVhZCk7CisJCWlmICghKGFjbC0+cGVybSAmIHBlcm0pKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lMSwgYWNsLT5maWxlbmFtZTEpKQorCQkJY29udGludWU7CisJCWlmICghdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lMiwgYWNsLT5maWxlbmFtZTIpKQorCQkJY29udGludWU7CisJCWVycm9yID0gMDsKKwkJYnJlYWs7CisJfQorCXVwX3JlYWQoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3Igc2luZ2xlIHBhdGggb3BlcmF0aW9uLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZSB0byBjaGVjay4KKyAqIEBtb2RlOiAgICAgIEFjY2VzcyBjb250cm9sIG1vZGUuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIoc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCisJCQkJCQljb25zdCBkb21haW4sIHU4IG9wZXJhdGlvbiwKKwkJCQkJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKKwkJCQkJCWZpbGVuYW1lLCBjb25zdCB1OCBtb2RlKQoreworCWNvbnN0IGNoYXIgKm1zZzsKKwlpbnQgZXJyb3I7CisJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisKKwlpZiAoIW1vZGUpCisJCXJldHVybiAwOworIG5leHQ6CisJZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsKGRvbWFpbiwgb3BlcmF0aW9uLCBmaWxlbmFtZSk7CisJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQob3BlcmF0aW9uKTsKKwlpZiAoIWVycm9yKQorCQlnb3RvIG9rOworCWlmICh0b21veW9fdmVyYm9zZV9tb2RlKGRvbWFpbikpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlRPTU9ZTy0lczogQWNjZXNzICclcyAlcycgZGVuaWVkIGZvciAlc1xuIiwKKwkJICAgICAgIHRvbW95b19nZXRfbXNnKGlzX2VuZm9yY2UpLCBtc2csIGZpbGVuYW1lLT5uYW1lLAorCQkgICAgICAgdG9tb3lvX2dldF9sYXN0X25hbWUoZG9tYWluKSk7CisJaWYgKG1vZGUgPT0gMSAmJiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKGRvbWFpbikpIHsKKwkJY29uc3QgY2hhciAqbmFtZSA9IHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGZpbGVuYW1lKS0+bmFtZTsKKwkJdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2wob3BlcmF0aW9uLCBuYW1lLCBkb21haW4sIGZhbHNlKTsKKwl9CisJaWYgKCFpc19lbmZvcmNlKQorCQllcnJvciA9IDA7Cisgb2s6CisJLyoKKwkgKiBTaW5jZSAiYWxsb3dfdHJ1bmNhdGUiIGRvZXNuJ3QgaW1wbHkgImFsbG93X3Jld3JpdGUiIHBlcm1pc3Npb24sCisJICogd2UgbmVlZCB0byBjaGVjayAiYWxsb3dfcmV3cml0ZSIgcGVybWlzc2lvbiBpZiB0aGUgZmlsZW5hbWUgaXMKKwkgKiBzcGVjaWZpZWQgYnkgImRlbnlfcmV3cml0ZSIga2V5d29yZC4KKwkgKi8KKwlpZiAoIWVycm9yICYmIG9wZXJhdGlvbiA9PSBUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0wgJiYKKwkgICAgdG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShmaWxlbmFtZSkpIHsKKwkJb3BlcmF0aW9uID0gVE9NT1lPX1RZUEVfUkVXUklURV9BQ0w7CisJCWdvdG8gbmV4dDsKKwl9CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19jaGVja19maWxlX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzeXNjdGwoKSdzICJyZWFkIiBhbmQgIndyaXRlIi4KKyAqCisgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBmaWxlbmFtZTogIEZpbGVuYW1lIHRvIGNoZWNrLgorICogQHBlcm06ICAgICAgTW9kZSAoInJlYWQiIG9yICJ3cml0ZSIgb3IgInJlYWQvd3JpdGUiKS4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfZmlsZV9wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCB1OCBwZXJtKQoreworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvIG5hbWU7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCisJaWYgKCFtb2RlKQorCQlyZXR1cm4gMDsKKwluYW1lLm5hbWUgPSBmaWxlbmFtZTsKKwl0b21veW9fZmlsbF9wYXRoX2luZm8oJm5hbWUpOworCXJldHVybiB0b21veW9fY2hlY2tfZmlsZV9wZXJtMihkb21haW4sICZuYW1lLCBwZXJtLCAic3lzY3RsIiwgbW9kZSk7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX2V4ZWNfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJleGVjdXRlIi4KKyAqCisgKiBAZG9tYWluOiAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbGVuYW1lOiBDaGVjayBwZXJtaXNzaW9uIGZvciAiZXhlY3V0ZSIuCisgKiBAdG1wOiAgICAgIEJ1ZmZlciBmb3IgdGVtcG9yYXJ5IHVzZS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmV2YWx1ZSBvdGhlcndpc2UuCisgKi8KK2ludCB0b21veW9fY2hlY2tfZXhlY19wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCSAgIHN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIgKnRtcCkKK3sKKwljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CisKKwlpZiAoIW1vZGUpCisJCXJldHVybiAwOworCXJldHVybiB0b21veW9fY2hlY2tfZmlsZV9wZXJtMihkb21haW4sIGZpbGVuYW1lLCAxLCAiZG9fZXhlY3ZlIiwgbW9kZSk7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbiAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJyZWFkIiBhbmQgIndyaXRlIi4KKyAqCisgKiBAZG9tYWluOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KKyAqIEBwYXRoOiAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqIEBmbGFnOiAgIEZsYWdzIGZvciBvcGVuKCkuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCSBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3QgaW50IGZsYWcpCit7CisJY29uc3QgdTggYWNjX21vZGUgPSBBQ0NfTU9ERShmbGFnKTsKKwlpbnQgZXJyb3IgPSAtRU5PTUVNOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWY7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCisJaWYgKCFtb2RlIHx8ICFwYXRoLT5tbnQpCisJCXJldHVybiAwOworCWlmIChhY2NfbW9kZSA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAocGF0aC0+ZGVudHJ5LT5kX2lub2RlICYmIFNfSVNESVIocGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQkvKgorCQkgKiBJIGRvbid0IGNoZWNrIGRpcmVjdG9yaWVzIGhlcmUgYmVjYXVzZSBta2RpcigpIGFuZCBybWRpcigpCisJCSAqIGRvbid0IGNhbGwgbWUuCisJCSAqLworCQlyZXR1cm4gMDsKKwlidWYgPSB0b21veW9fZ2V0X3BhdGgocGF0aCk7CisJaWYgKCFidWYpCisJCWdvdG8gb3V0OworCWVycm9yID0gMDsKKwkvKgorCSAqIElmIHRoZSBmaWxlbmFtZSBpcyBzcGVjaWZpZWQgYnkgImRlbnlfcmV3cml0ZSIga2V5d29yZCwKKwkgKiB3ZSBuZWVkIHRvIGNoZWNrICJhbGxvd19yZXdyaXRlIiBwZXJtaXNzaW9uIHdoZW4gdGhlIGZpbGVuYW1lIGlzIG5vdAorCSAqIG9wZW5lZCBmb3IgYXBwZW5kIG1vZGUgb3IgdGhlIGZpbGVuYW1lIGlzIHRydW5jYXRlZCBhdCBvcGVuIHRpbWUuCisJICovCisJaWYgKChhY2NfbW9kZSAmIE1BWV9XUklURSkgJiYKKwkgICAgKChmbGFnICYgT19UUlVOQykgfHwgIShmbGFnICYgT19BUFBFTkQpKSAmJgorCSAgICAodG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShidWYpKSkgeworCQllcnJvciA9IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9wZXJtaXNzaW9uMihkb21haW4sCisJCQkJCQkgICAgIFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMLAorCQkJCQkJCSAgICAgYnVmLCBtb2RlKTsKKwl9CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSB0b21veW9fY2hlY2tfZmlsZV9wZXJtMihkb21haW4sIGJ1ZiwgYWNjX21vZGUsICJvcGVuIiwKKwkJCQkJCW1vZGUpOworCWlmICghZXJyb3IgJiYgKGZsYWcgJiBPX1RSVU5DKSkKKwkJZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLAorCQkJCQkJICAgICBUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0wsCisJCQkJCQkJICAgICBidWYsIG1vZGUpOworIG91dDoKKwl0b21veW9fZnJlZShidWYpOworCWlmICghaXNfZW5mb3JjZSkKKwkJZXJyb3IgPSAwOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJjcmVhdGUiLCAidW5saW5rIiwgIm1rZGlyIiwgInJtZGlyIiwgIm1rZmlmbyIsICJta3NvY2siLCAibWtibG9jayIsICJta2NoYXIiLCAidHJ1bmNhdGUiIGFuZCAic3ltbGluayIuCisgKgorICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCisgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KKyAqIEBwYXRoOiAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgpCit7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYnVmOworCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKKwljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKKworCWlmICghbW9kZSB8fCAhcGF0aC0+bW50KQorCQlyZXR1cm4gMDsKKwlidWYgPSB0b21veW9fZ2V0X3BhdGgocGF0aCk7CisJaWYgKCFidWYpCisJCWdvdG8gb3V0OworCXN3aXRjaCAob3BlcmF0aW9uKSB7CisJY2FzZSBUT01PWU9fVFlQRV9NS0RJUl9BQ0w6CisJY2FzZSBUT01PWU9fVFlQRV9STURJUl9BQ0w6CisJCWlmICghYnVmLT5pc19kaXIpIHsKKwkJCS8qCisJCQkgKiB0b21veW9fZ2V0X3BhdGgoKSByZXNlcnZlcyBzcGFjZSBmb3IgYXBwZW5kaW5nICIvLiIKKwkJCSAqLworCQkJc3RyY2F0KChjaGFyICopIGJ1Zi0+bmFtZSwgIi8iKTsKKwkJCXRvbW95b19maWxsX3BhdGhfaW5mbyhidWYpOworCQl9CisJfQorCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwgb3BlcmF0aW9uLCBidWYsCisJCQkJCQkgICAgIG1vZGUpOworIG91dDoKKwl0b21veW9fZnJlZShidWYpOworCWlmICghaXNfZW5mb3JjZSkKKwkJZXJyb3IgPSAwOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiB0b21veW9fY2hlY2tfcmV3cml0ZV9wZXJtaXNzaW9uIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgInJld3JpdGUiLgorICoKKyAqIEBkb21haW46IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQGZpbHA6IFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJICAgIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCBlcnJvciA9IC1FTk9NRU07CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpidWY7CisKKwlpZiAoIW1vZGUgfHwgIWZpbHAtPmZfcGF0aC5tbnQpCisJCXJldHVybiAwOworCWJ1ZiA9IHRvbW95b19nZXRfcGF0aCgmZmlscC0+Zl9wYXRoKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQ7CisJaWYgKCF0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGJ1ZikpIHsKKwkJZXJyb3IgPSAwOworCQlnb3RvIG91dDsKKwl9CisJZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLAorCQkJCQkJICAgICBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTCwKKwkJCQkJCSAgICAgYnVmLCBtb2RlKTsKKyBvdXQ6CisJdG9tb3lvX2ZyZWUoYnVmKTsKKwlpZiAoIWlzX2VuZm9yY2UpCisJCWVycm9yID0gMDsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAicmVuYW1lIiBhbmQgImxpbmsiLgorICoKKyAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgorICogQG9wZXJhdGlvbjogVHlwZSBvZiBvcGVyYXRpb24uCisgKiBAcGF0aDE6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICogQHBhdGgyOiAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICovCitpbnQgdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbiwKKwkJCSAgICBjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoMSwKKwkJCSAgICBzdHJ1Y3QgcGF0aCAqcGF0aDIpCit7CisJaW50IGVycm9yID0gLUVOT01FTTsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYnVmMSwgKmJ1ZjI7CisJY29uc3QgdTggbW9kZSA9IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQUNfRk9SX0ZJTEUpOworCWNvbnN0IGJvb2wgaXNfZW5mb3JjZSA9IChtb2RlID09IDMpOworCWNvbnN0IGNoYXIgKm1zZzsKKworCWlmICghbW9kZSB8fCAhcGF0aDEtPm1udCB8fCAhcGF0aDItPm1udCkKKwkJcmV0dXJuIDA7CisJYnVmMSA9IHRvbW95b19nZXRfcGF0aChwYXRoMSk7CisJYnVmMiA9IHRvbW95b19nZXRfcGF0aChwYXRoMik7CisJaWYgKCFidWYxIHx8ICFidWYyKQorCQlnb3RvIG91dDsKKwl7CisJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IHBhdGgxLT5kZW50cnk7CisJCWlmIChkZW50cnktPmRfaW5vZGUgJiYgU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpIHsKKwkJCS8qCisJCQkgKiB0b21veW9fZ2V0X3BhdGgoKSByZXNlcnZlcyBzcGFjZSBmb3IgYXBwZW5kaW5nICIvLiIKKwkJCSAqLworCQkJaWYgKCFidWYxLT5pc19kaXIpIHsKKwkJCQlzdHJjYXQoKGNoYXIgKikgYnVmMS0+bmFtZSwgIi8iKTsKKwkJCQl0b21veW9fZmlsbF9wYXRoX2luZm8oYnVmMSk7CisJCQl9CisJCQlpZiAoIWJ1ZjItPmlzX2RpcikgeworCQkJCXN0cmNhdCgoY2hhciAqKSBidWYyLT5uYW1lLCAiLyIpOworCQkJCXRvbW95b19maWxsX3BhdGhfaW5mbyhidWYyKTsKKwkJCX0KKwkJfQorCX0KKwllcnJvciA9IHRvbW95b19jaGVja19kb3VibGVfcGF0aF9hY2woZG9tYWluLCBvcGVyYXRpb24sIGJ1ZjEsIGJ1ZjIpOworCW1zZyA9IHRvbW95b19kcDJrZXl3b3JkKG9wZXJhdGlvbik7CisJaWYgKCFlcnJvcikKKwkJZ290byBvdXQ7CisJaWYgKHRvbW95b192ZXJib3NlX21vZGUoZG9tYWluKSkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVE9NT1lPLSVzOiBBY2Nlc3MgJyVzICVzICVzJyAiCisJCSAgICAgICAiZGVuaWVkIGZvciAlc1xuIiwgdG9tb3lvX2dldF9tc2coaXNfZW5mb3JjZSksCisJCSAgICAgICBtc2csIGJ1ZjEtPm5hbWUsIGJ1ZjItPm5hbWUsCisJCSAgICAgICB0b21veW9fZ2V0X2xhc3RfbmFtZShkb21haW4pKTsKKwlpZiAobW9kZSA9PSAxICYmIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soZG9tYWluKSkgeworCQljb25zdCBjaGFyICpuYW1lMSA9IHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGJ1ZjEpLT5uYW1lOworCQljb25zdCBjaGFyICpuYW1lMiA9IHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGJ1ZjIpLT5uYW1lOworCQl0b21veW9fdXBkYXRlX2RvdWJsZV9wYXRoX2FjbChvcGVyYXRpb24sIG5hbWUxLCBuYW1lMiwgZG9tYWluLAorCQkJCQkgICAgICBmYWxzZSk7CisJfQorIG91dDoKKwl0b21veW9fZnJlZShidWYxKTsKKwl0b21veW9fZnJlZShidWYyKTsKKwlpZiAoIWlzX2VuZm9yY2UpCisJCWVycm9yID0gMDsKKwlyZXR1cm4gZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYyBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0N2YxNmIKLS0tIC9kZXYvbnVsbAorKysgYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguYwpAQCAtMCwwICsxLDQ4MiBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCisgKgorICogR2V0IHRoZSBjYW5vbmljYWxpemVkIGFic29sdXRlIHBhdGhuYW1lcy4gVGhlIGJhc2lzIGZvciBUT01PWU8uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L21udF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJyZWFscGF0aC5oIgorCisvKioKKyAqIHRvbW95b19lbmNvZGU6IENvbnZlcnQgYmluYXJ5IHN0cmluZyB0byBhc2NpaSBzdHJpbmcuCisgKgorICogQGJ1ZmZlcjogIEJ1ZmZlciBmb3IgQVNDSUkgc3RyaW5nLgorICogQGJ1ZmxlbjogIFNpemUgb2YgQGJ1ZmZlci4KKyAqIEBzdHI6ICAgICBCaW5hcnkgc3RyaW5nLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRU5PTUVNIG90aGVyd2lzZS4KKyAqLworaW50IHRvbW95b19lbmNvZGUoY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLCBjb25zdCBjaGFyICpzdHIpCit7CisJd2hpbGUgKDEpIHsKKwkJY29uc3QgdW5zaWduZWQgY2hhciBjID0gKih1bnNpZ25lZCBjaGFyICopIHN0cisrOworCisJCWlmICh0b21veW9faXNfdmFsaWQoYykpIHsKKwkJCWlmICgtLWJ1ZmxlbiA8PSAwKQorCQkJCWJyZWFrOworCQkJKmJ1ZmZlcisrID0gKGNoYXIpIGM7CisJCQlpZiAoYyAhPSAnXFwnKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKC0tYnVmbGVuIDw9IDApCisJCQkJYnJlYWs7CisJCQkqYnVmZmVyKysgPSAoY2hhcikgYzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghYykgeworCQkJaWYgKC0tYnVmbGVuIDw9IDApCisJCQkJYnJlYWs7CisJCQkqYnVmZmVyID0gJ1wwJzsKKwkJCXJldHVybiAwOworCQl9CisJCWJ1ZmxlbiAtPSA0OworCQlpZiAoYnVmbGVuIDw9IDApCisJCQlicmVhazsKKwkJKmJ1ZmZlcisrID0gJ1xcJzsKKwkJKmJ1ZmZlcisrID0gKGMgPj4gNikgKyAnMCc7CisJCSpidWZmZXIrKyA9ICgoYyA+PiAzKSAmIDcpICsgJzAnOworCQkqYnVmZmVyKysgPSAoYyAmIDcpICsgJzAnOworCX0KKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoqCisgKiB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMiAtIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIGRlbnRyeSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4KKyAqCisgKiBAcGF0aDogICAgICAgIFBvaW50ZXIgdG8gInN0cnVjdCBwYXRoIi4KKyAqIEBuZXduYW1lOiAgICAgUG9pbnRlciB0byBidWZmZXIgdG8gcmV0dXJuIHZhbHVlIGluLgorICogQG5ld25hbWVfbGVuOiBTaXplIG9mIEBuZXduYW1lLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogSWYgZGVudHJ5IGlzIGEgZGlyZWN0b3J5LCB0cmFpbGluZyAnLycgaXMgYXBwZW5kZWQuCisgKiBDaGFyYWN0ZXJzIG91dCBvZiAweDIwIDwgYyA8IDB4N0YgcmFuZ2UgYXJlIGNvbnZlcnRlZCB0bworICogXG9vbyBzdHlsZSBvY3RhbCBzdHJpbmcuCisgKiBDaGFyYWN0ZXIgXCBpcyBjb252ZXJ0ZWQgdG8gXFwgc3RyaW5nLgorICovCitpbnQgdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aDIoc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKm5ld25hbWUsCisJCQkgICAgICAgaW50IG5ld25hbWVfbGVuKQoreworCWludCBlcnJvciA9IC1FTk9NRU07CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gcGF0aC0+ZGVudHJ5OworCWNoYXIgKnNwOworCisJaWYgKCFkZW50cnkgfHwgIXBhdGgtPm1udCB8fCAhbmV3bmFtZSB8fCBuZXduYW1lX2xlbiA8PSAyMDQ4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9kbmFtZSkgeworCQkvKiBGb3IgInNvY2tldDpbXCRdIiBhbmQgInBpcGU6W1wkXSIuICovCisJCXN0YXRpYyBjb25zdCBpbnQgb2Zmc2V0ID0gMTUzNjsKKwkJc3AgPSBkZW50cnktPmRfb3AtPmRfZG5hbWUoZGVudHJ5LCBuZXduYW1lICsgb2Zmc2V0LAorCQkJCQkgICBuZXduYW1lX2xlbiAtIG9mZnNldCk7CisJfSBlbHNlIHsKKwkJLyogVGFrZW4gZnJvbSBkX25hbWVzcGFjZV9wYXRoKCkuICovCisJCXN0cnVjdCBwYXRoIHJvb3Q7CisJCXN0cnVjdCBwYXRoIG5zX3Jvb3QgPSB7IH07CisJCXN0cnVjdCBwYXRoIHRtcDsKKworCQlyZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwkJcm9vdCA9IGN1cnJlbnQtPmZzLT5yb290OworCQlwYXRoX2dldCgmcm9vdCk7CisJCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7CisJCWlmIChyb290Lm1udCAmJiByb290Lm1udC0+bW50X25zKQorCQkJbnNfcm9vdC5tbnQgPSBtbnRnZXQocm9vdC5tbnQtPm1udF9ucy0+cm9vdCk7CisJCWlmIChuc19yb290Lm1udCkKKwkJCW5zX3Jvb3QuZGVudHJ5ID0gZGdldChuc19yb290Lm1udC0+bW50X3Jvb3QpOworCQlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7CisJCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCQl0bXAgPSBuc19yb290OworCQlzcCA9IF9fZF9wYXRoKHBhdGgsICZ0bXAsIG5ld25hbWUsIG5ld25hbWVfbGVuKTsKKwkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJcGF0aF9wdXQoJnJvb3QpOworCQlwYXRoX3B1dCgmbnNfcm9vdCk7CisJfQorCWlmIChJU19FUlIoc3ApKQorCQllcnJvciA9IFBUUl9FUlIoc3ApOworCWVsc2UKKwkJZXJyb3IgPSB0b21veW9fZW5jb2RlKG5ld25hbWUsIHNwIC0gbmV3bmFtZSwgc3ApOworCS8qIEFwcGVuZCB0cmFpbGluZyAnLycgaWYgZGVudHJ5IGlzIGEgZGlyZWN0b3J5LiAqLworCWlmICghZXJyb3IgJiYgZGVudHJ5LT5kX2lub2RlICYmIFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpCisJICAgICYmICpuZXduYW1lKSB7CisJCXNwID0gbmV3bmFtZSArIHN0cmxlbihuZXduYW1lKTsKKwkJaWYgKCooc3AgLSAxKSAhPSAnLycpIHsKKwkJCWlmIChzcCA8IG5ld25hbWUgKyBuZXduYW1lX2xlbiAtIDQpIHsKKwkJCQkqc3ArKyA9ICcvJzsKKwkJCQkqc3AgPSAnXDAnOworCQkJfSBlbHNlIHsKKwkJCQllcnJvciA9IC1FTk9NRU07CisJCQl9CisJCX0KKwl9CisJaWYgKGVycm9yKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0b21veW9fcmVhbHBhdGg6IFBhdGhuYW1lIHRvbyBsb25nLlxuIik7CisJcmV0dXJuIGVycm9yOworfQorCisvKioKKyAqIHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGggLSBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4KKyAqCisgKiBAcGF0aDogUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgorICoKKyAqIFJldHVybnMgdGhlIHJlYWxwYXRoIG9mIHRoZSBnaXZlbiBAcGF0aCBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgdXNlIHRvbW95b19hbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCB0b21veW9fZnJlZSgpCisgKiBpZiB0aGVzZSBmdW5jdGlvbnMgZGlkbid0IHJldHVybiBOVUxMLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKQoreworCWNoYXIgKmJ1ZiA9IHRvbW95b19hbGxvYyhzaXplb2Yoc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlcikpOworCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgdG9tb3lvX3BhZ2VfYnVmZmVyKQorCQkgICAgIDw9IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIC0gMSk7CisJaWYgKCFidWYpCisJCXJldHVybiBOVUxMOworCWlmICh0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihwYXRoLCBidWYsCisJCQkJICAgICAgIFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOIC0gMSkgPT0gMCkKKwkJcmV0dXJuIGJ1ZjsKKwl0b21veW9fZnJlZShidWYpOworCXJldHVybiBOVUxMOworfQorCisvKioKKyAqIHRvbW95b19yZWFscGF0aCAtIEdldCByZWFscGF0aCBvZiBhIHBhdGhuYW1lLgorICoKKyAqIEBwYXRobmFtZTogVGhlIHBhdGhuYW1lIHRvIHNvbHZlLgorICoKKyAqIFJldHVybnMgdGhlIHJlYWxwYXRoIG9mIEBwYXRobmFtZSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLworY2hhciAqdG9tb3lvX3JlYWxwYXRoKGNvbnN0IGNoYXIgKnBhdGhuYW1lKQoreworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisKKwlpZiAocGF0aG5hbWUgJiYgcGF0aF9sb29rdXAocGF0aG5hbWUsIExPT0tVUF9GT0xMT1csICZuZCkgPT0gMCkgeworCQljaGFyICpidWYgPSB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKCZuZC5wYXRoKTsKKwkJcGF0aF9wdXQoJm5kLnBhdGgpOworCQlyZXR1cm4gYnVmOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyoqCisgKiB0b21veW9fcmVhbHBhdGhfbm9mb2xsb3cgLSBHZXQgcmVhbHBhdGggb2YgYSBwYXRobmFtZS4KKyAqCisgKiBAcGF0aG5hbWU6IFRoZSBwYXRobmFtZSB0byBzb2x2ZS4KKyAqCisgKiBSZXR1cm5zIHRoZSByZWFscGF0aCBvZiBAcGF0aG5hbWUgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aF9ub2ZvbGxvdyhjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCisJaWYgKHBhdGhuYW1lICYmIHBhdGhfbG9va3VwKHBhdGhuYW1lLCAwLCAmbmQpID09IDApIHsKKwkJY2hhciAqYnVmID0gdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aCgmbmQucGF0aCk7CisJCXBhdGhfcHV0KCZuZC5wYXRoKTsKKwkJcmV0dXJuIGJ1ZjsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIG5vbi1zdHJpbmcgZGF0YS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX2VsZW1lbnRzOworLyogUXVvdGEgZm9yIGhvbGRpbmcgbm9uLXN0cmluZyBkYXRhLiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzOworCisvKioKKyAqIHRvbW95b19hbGxvY19lbGVtZW50IC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3Igc3RydWN0dXJlcy4KKyAqCisgKiBAc2l6ZTogU2l6ZSBpbiBieXRlcy4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqCisgKiBNZW1vcnkgaGFzIHRvIGJlIHplcm9lZC4KKyAqIFRoZSBSQU0gaXMgY2h1bmtlZCwgc28gTkVWRVIgdHJ5IHRvIGtmcmVlKCkgdGhlIHJldHVybmVkIHBvaW50ZXIuCisgKi8KK3ZvaWQgKnRvbW95b19hbGxvY19lbGVtZW50KGNvbnN0IHVuc2lnbmVkIGludCBzaXplKQoreworCXN0YXRpYyBjaGFyICpidWY7CisJc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKKwlzdGF0aWMgdW5zaWduZWQgaW50IGJ1Zl91c2VkX2xlbiA9IFBBVEhfTUFYOworCWNoYXIgKnB0ciA9IE5VTEw7CisJLypBc3N1bWVzIHNpemVvZih2b2lkICopID49IHNpemVvZihsb25nKSBpcyB0cnVlLiAqLworCWNvbnN0IHVuc2lnbmVkIGludCB3b3JkX2FsaWduZWRfc2l6ZQorCQk9IHJvdW5kdXAoc2l6ZSwgbWF4KHNpemVvZih2b2lkICopLCBzaXplb2YobG9uZykpKTsKKwlpZiAod29yZF9hbGlnbmVkX3NpemUgPiBQQVRIX01BWCkKKwkJcmV0dXJuIE5VTEw7CisJLyoqKioqIEVYQ0xVU0lWRSBTRUNUSU9OIFNUQVJUICoqKioqLworCW11dGV4X2xvY2soJmxvY2spOworCWlmIChidWZfdXNlZF9sZW4gKyB3b3JkX2FsaWduZWRfc2l6ZSA+IFBBVEhfTUFYKSB7CisJCWlmICghdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cyB8fAorCQkgICAgdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX2VsZW1lbnRzCisJCSAgICArIFBBVEhfTUFYIDw9IHRvbW95b19xdW90YV9mb3JfZWxlbWVudHMpCisJCQlwdHIgPSBremFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwdHIpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVSUk9SOiBPdXQgb2YgbWVtb3J5ICIKKwkJCSAgICAgICAiZm9yIHRvbW95b19hbGxvY19lbGVtZW50KCkuXG4iKTsKKwkJCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCQkJcGFuaWMoIk1BQyBJbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKKwkJfSBlbHNlIHsKKwkJCWJ1ZiA9IHB0cjsKKwkJCXRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9lbGVtZW50cyArPSBQQVRIX01BWDsKKwkJCWJ1Zl91c2VkX2xlbiA9IHdvcmRfYWxpZ25lZF9zaXplOworCQkJcHRyID0gYnVmOworCQl9CisJfSBlbHNlIGlmICh3b3JkX2FsaWduZWRfc2l6ZSkgeworCQlpbnQgaTsKKwkJcHRyID0gYnVmICsgYnVmX3VzZWRfbGVuOworCQlidWZfdXNlZF9sZW4gKz0gd29yZF9hbGlnbmVkX3NpemU7CisJCWZvciAoaSA9IDA7IGkgPCB3b3JkX2FsaWduZWRfc2l6ZTsgaSsrKSB7CisJCQlpZiAoIXB0cltpXSkKKwkJCQljb250aW51ZTsKKwkJCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogUmVzZXJ2ZWQgbWVtb3J5IHdhcyB0YWludGVkISAiCisJCQkgICAgICAgIlRoZSBzeXN0ZW0gbWlnaHQgZ28gd3JvbmcuXG4iKTsKKwkJCXB0cltpXSA9ICdcMCc7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBwdHI7Cit9CisKKy8qIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHN0cmluZyBkYXRhIGluIGJ5dGVzLiAqLworc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWU7CisvKiBRdW90YSBmb3IgaG9sZGluZyBzdHJpbmcgZGF0YSBpbiBieXRlcy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZTsKKworLyoKKyAqIFRPTU9ZTyB1c2VzIHRoaXMgaGFzaCBvbmx5IHdoZW4gYXBwZW5kaW5nIGEgc3RyaW5nIGludG8gdGhlIHN0cmluZworICogdGFibGUuIEZyZXF1ZW5jeSBvZiBhcHBlbmRpbmcgc3RyaW5ncyBpcyB2ZXJ5IGxvdy4gU28gd2UgZG9uJ3QgbmVlZAorICogbGFyZ2UgKGUuZy4gNjRrKSBoYXNoIHNpemUuIDI1NiB3aWxsIGJlIHN1ZmZpY2llbnQuCisgKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9IQVNIIDI1NgorCisvKiBTdHJ1Y3R1cmUgZm9yIHN0cmluZyBkYXRhLiAqLworc3RydWN0IHRvbW95b19uYW1lX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm8gZW50cnk7Cit9OworCisvKiBTdHJ1Y3R1cmUgZm9yIGF2YWlsYWJsZSBtZW1vcnkgcmVnaW9uLiAqLworc3RydWN0IHRvbW95b19mcmVlX21lbW9yeV9ibG9ja19saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY2hhciAqcHRyOyAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGEgZnJlZSBhcmVhLiAqLworCWludCBsZW47ICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoZSBhcmVhLiAgICAgKi8KK307CisKKy8qCisgKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fbmFtZV9lbnRyeSIuCisgKgorICogVGhpcyBsaXN0IGlzIHVwZGF0ZWQgb25seSBpbnNpZGUgdG9tb3lvX3NhdmVfbmFtZSgpLCB0aHVzCisgKiBubyBnbG9iYWwgbXV0ZXggZXhpc3RzLgorICovCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCB0b21veW9fbmFtZV9saXN0W1RPTU9ZT19NQVhfSEFTSF07CisKKy8qKgorICogdG9tb3lvX3NhdmVfbmFtZSAtIEFsbG9jYXRlIHBlcm1hbmVudCBtZW1vcnkgZm9yIHN0cmluZyBkYXRhLgorICoKKyAqIEBuYW1lOiBUaGUgc3RyaW5nIHRvIHN0b3JlIGludG8gdGhlIHBlcm1lcm5lbnQgbWVtb3J5LgorICoKKyAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBSQU0gaXMgc2hhcmVkLCBzbyBORVZFUiB0cnkgdG8gbW9kaWZ5IG9yIGtmcmVlKCkgdGhlIHJldHVybmVkIG5hbWUuCisgKi8KK2NvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICp0b21veW9fc2F2ZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RhdGljIExJU1RfSEVBRChmbWJfbGlzdCk7CisJc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKKwlzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgKnB0cjsKKwl1bnNpZ25lZCBpbnQgaGFzaDsKKwkvKiBmbWIgY29udGFpbnMgYXZhaWxhYmxlIHNpemUgaW4gYnl0ZXMuCisJICAgZm1iIGlzIHJlbW92ZWQgZnJvbSB0aGUgZm1iX2xpc3Qgd2hlbiBmbWItPmxlbiBiZWNvbWVzIDAuICovCisJc3RydWN0IHRvbW95b19mcmVlX21lbW9yeV9ibG9ja19saXN0ICpmbWI7CisJaW50IGxlbjsKKwljaGFyICpjcDsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisJbGVuID0gc3RybGVuKG5hbWUpICsgMTsKKwlpZiAobGVuID4gVE9NT1lPX01BWF9QQVRITkFNRV9MRU4pIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVJST1I6IE5hbWUgdG9vIGxvbmcgIgorCQkgICAgICAgImZvciB0b21veW9fc2F2ZV9uYW1lKCkuXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWhhc2ggPSBmdWxsX25hbWVfaGFzaCgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBuYW1lLCBsZW4gLSAxKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gU1RBUlQgKioqKiovCisJbXV0ZXhfbG9jaygmbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fbmFtZV9saXN0W2hhc2ggJSBUT01PWU9fTUFYX0hBU0hdLAorCQkJICAgICBsaXN0KSB7CisJCWlmIChoYXNoID09IHB0ci0+ZW50cnkuaGFzaCAmJiAhc3RyY21wKG5hbWUsIHB0ci0+ZW50cnkubmFtZSkpCisJCQlnb3RvIG91dDsKKwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmbWIsICZmbWJfbGlzdCwgbGlzdCkgeworCQlpZiAobGVuIDw9IGZtYi0+bGVuKQorCQkJZ290byByZWFkeTsKKwl9CisJaWYgKCF0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lIHx8CisJICAgIHRvbW95b19hbGxvY2F0ZWRfbWVtb3J5X2Zvcl9zYXZlbmFtZSArIFBBVEhfTUFYCisJICAgIDw9IHRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUpCisJCWNwID0ga3phbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7CisJZWxzZQorCQljcCA9IE5VTEw7CisJZm1iID0ga3phbGxvYyhzaXplb2YoKmZtYiksIEdGUF9LRVJORUwpOworCWlmICghY3AgfHwgIWZtYikgeworCQlrZnJlZShjcCk7CisJCWtmcmVlKGZtYik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVSUk9SOiBPdXQgb2YgbWVtb3J5ICIKKwkJICAgICAgICJmb3IgdG9tb3lvX3NhdmVfbmFtZSgpLlxuIik7CisJCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCQlwYW5pYygiTUFDIEluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCQlwdHIgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisJdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX3NhdmVuYW1lICs9IFBBVEhfTUFYOworCWxpc3RfYWRkKCZmbWItPmxpc3QsICZmbWJfbGlzdCk7CisJZm1iLT5wdHIgPSBjcDsKKwlmbWItPmxlbiA9IFBBVEhfTUFYOworIHJlYWR5OgorCXB0ciA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqcHRyKSk7CisJaWYgKCFwdHIpCisJCWdvdG8gb3V0OworCXB0ci0+ZW50cnkubmFtZSA9IGZtYi0+cHRyOworCW1lbW1vdmUoZm1iLT5wdHIsIG5hbWUsIGxlbik7CisJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZwdHItPmVudHJ5KTsKKwlmbWItPnB0ciArPSBsZW47CisJZm1iLT5sZW4gLT0gbGVuOworCWxpc3RfYWRkX3RhaWwoJnB0ci0+bGlzdCwgJnRvbW95b19uYW1lX2xpc3RbaGFzaCAlIFRPTU9ZT19NQVhfSEFTSF0pOworCWlmIChmbWItPmxlbiA9PSAwKSB7CisJCWxpc3RfZGVsKCZmbWItPmxpc3QpOworCQlrZnJlZShmbWIpOworCX0KKyBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkvKioqKiogRVhDTFVTSVZFIFNFQ1RJT04gRU5EICoqKioqLworCXJldHVybiBwdHIgPyAmcHRyLT5lbnRyeSA6IE5VTEw7Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWxwYXRoX2luaXQgLSBJbml0aWFsaXplIHJlYWxwYXRoIHJlbGF0ZWQgY29kZS4KKyAqLwordm9pZCBfX2luaXQgdG9tb3lvX3JlYWxwYXRoX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCUJVSUxEX0JVR19PTihUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiA+IFBBVEhfTUFYKTsKKwlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9IQVNIOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZ0b21veW9fbmFtZV9saXN0W2ldKTsKKwlJTklUX0xJU1RfSEVBRCgmdG9tb3lvX2tlcm5lbF9kb21haW4uYWNsX2luZm9fbGlzdCk7CisJdG9tb3lvX2tlcm5lbF9kb21haW4uZG9tYWlubmFtZSA9IHRvbW95b19zYXZlX25hbWUoVE9NT1lPX1JPT1RfTkFNRSk7CisJbGlzdF9hZGRfdGFpbCgmdG9tb3lvX2tlcm5lbF9kb21haW4ubGlzdCwgJnRvbW95b19kb21haW5fbGlzdCk7CisJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CisJaWYgKHRvbW95b19maW5kX2RvbWFpbihUT01PWU9fUk9PVF9OQU1FKSAhPSAmdG9tb3lvX2tlcm5lbF9kb21haW4pCisJCXBhbmljKCJDYW4ndCByZWdpc3RlciB0b21veW9fa2VybmVsX2RvbWFpbiIpOworCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKK30KKworLyogTWVtb3J5IGFsbG9jYXRlZCBmb3IgdGVtcG9yYXJ5IHB1cnBvc2UuICovCitzdGF0aWMgYXRvbWljX3QgdG9tb3lvX2R5bmFtaWNfbWVtb3J5X3NpemU7CisKKy8qKgorICogdG9tb3lvX2FsbG9jIC0gQWxsb2NhdGUgbWVtb3J5IGZvciB0ZW1wb3JhcnkgcHVycG9zZS4KKyAqCisgKiBAc2l6ZTogU2l6ZSBpbiBieXRlcy4KKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqLwordm9pZCAqdG9tb3lvX2FsbG9jKGNvbnN0IHNpemVfdCBzaXplKQoreworCXZvaWQgKnAgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmIChwKQorCQlhdG9taWNfYWRkKGtzaXplKHApLCAmdG9tb3lvX2R5bmFtaWNfbWVtb3J5X3NpemUpOworCXJldHVybiBwOworfQorCisvKioKKyAqIHRvbW95b19mcmVlIC0gUmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRvbW95b19hbGxvYygpLgorICoKKyAqIEBwOiBQb2ludGVyIHJldHVybmVkIGJ5IHRvbW95b19hbGxvYygpLiBNYXkgYmUgTlVMTC4KKyAqCisgKiBSZXR1cm5zIG5vdGhpbmcuCisgKi8KK3ZvaWQgdG9tb3lvX2ZyZWUoY29uc3Qgdm9pZCAqcCkKK3sKKwlpZiAocCkgeworCQlhdG9taWNfc3ViKGtzaXplKHApLCAmdG9tb3lvX2R5bmFtaWNfbWVtb3J5X3NpemUpOworCQlrZnJlZShwKTsKKwl9Cit9CisKKy8qKgorICogdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIgLSBDaGVjayBmb3IgbWVtb3J5IHVzYWdlIGluIGJ5dGVzLgorICoKKyAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCisgKgorICogUmV0dXJucyBtZW1vcnkgdXNhZ2UuCisgKi8KK2ludCB0b21veW9fcmVhZF9tZW1vcnlfY291bnRlcihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKK3sKKwlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7CisJCWNvbnN0IHVuc2lnbmVkIGludCBzaGFyZWQKKwkJCT0gdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX3NhdmVuYW1lOworCQljb25zdCB1bnNpZ25lZCBpbnQgcHJpdmF0ZQorCQkJPSB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHM7CisJCWNvbnN0IHVuc2lnbmVkIGludCBkeW5hbWljCisJCQk9IGF0b21pY19yZWFkKCZ0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZSk7CisJCWNoYXIgYnVmZmVyWzY0XTsKKworCQltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisJCWlmICh0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lKQorCQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsCisJCQkJICIgICAoUXVvdGE6ICUxMHUpIiwKKwkJCQkgdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSk7CisJCWVsc2UKKwkJCWJ1ZmZlclswXSA9ICdcMCc7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIlNoYXJlZDogICUxMHUlc1xuIiwgc2hhcmVkLCBidWZmZXIpOworCQlpZiAodG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cykKKwkJCXNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlcikgLSAxLAorCQkJCSAiICAgKFF1b3RhOiAlMTB1KSIsCisJCQkJIHRvbW95b19xdW90YV9mb3JfZWxlbWVudHMpOworCQllbHNlCisJCQlidWZmZXJbMF0gPSAnXDAnOworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICJQcml2YXRlOiAlMTB1JXNcbiIsIHByaXZhdGUsIGJ1ZmZlcik7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIkR5bmFtaWM6ICUxMHVcbiIsIGR5bmFtaWMpOworCQl0b21veW9faW9fcHJpbnRmKGhlYWQsICJUb3RhbDogICAlMTB1XG4iLAorCQkJCSBzaGFyZWQgKyBwcml2YXRlICsgZHluYW1pYyk7CisJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdG9tb3lvX3dyaXRlX21lbW9yeV9xdW90YSAtIFNldCBtZW1vcnkgcXVvdGEuCisgKgorICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KKyAqCisgKiBSZXR1cm5zIDAuCisgKi8KK2ludCB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQoreworCWNoYXIgKmRhdGEgPSBoZWFkLT53cml0ZV9idWY7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwlpZiAoc3NjYW5mKGRhdGEsICJTaGFyZWQ6ICV1IiwgJnNpemUpID09IDEpCisJCXRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWUgPSBzaXplOworCWVsc2UgaWYgKHNzY2FuZihkYXRhLCAiUHJpdmF0ZTogJXUiLCAmc2l6ZSkgPT0gMSkKKwkJdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cyA9IHNpemU7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vcmVhbHBhdGguaCBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzlmYzljCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by9yZWFscGF0aC5oCisgKgorICogR2V0IHRoZSBjYW5vbmljYWxpemVkIGFic29sdXRlIHBhdGhuYW1lcy4gVGhlIGJhc2lzIGZvciBUT01PWU8uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaWZuZGVmIF9TRUNVUklUWV9UT01PWU9fUkVBTFBBVEhfSAorI2RlZmluZSBfU0VDVVJJVFlfVE9NT1lPX1JFQUxQQVRIX0gKKworc3RydWN0IHBhdGg7CitzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbzsKK3N0cnVjdCB0b21veW9faW9fYnVmZmVyOworCisvKiBDb252ZXJ0IGJpbmFyeSBzdHJpbmcgdG8gYXNjaWkgc3RyaW5nLiAqLworaW50IHRvbW95b19lbmNvZGUoY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLCBjb25zdCBjaGFyICpzdHIpOworCisvKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4gKi8KK2ludCB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqbmV3bmFtZSwKKwkJCSAgICAgICBpbnQgbmV3bmFtZV9sZW4pOworCisvKgorICogUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgZ2l2ZW4gcGF0aG5hbWUgYnV0IGlnbm9yZXMgY2hyb290J2VkIHJvb3QuCisgKiBUaGVzZSBmdW5jdGlvbnMgdXNlIHRvbW95b19hbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCB0b21veW9fZnJlZSgpCisgKiBpZiB0aGVzZSBmdW5jdGlvbnMgZGlkbid0IHJldHVybiBOVUxMLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGgoY29uc3QgY2hhciAqcGF0aG5hbWUpOworLyoKKyAqIFNhbWUgd2l0aCB0b21veW9fcmVhbHBhdGgoKSBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGZvbGxvdyB0aGUgZmluYWwgc3ltbGluay4KKyAqLworY2hhciAqdG9tb3lvX3JlYWxwYXRoX25vZm9sbG93KGNvbnN0IGNoYXIgKnBhdGhuYW1lKTsKKy8qIFNhbWUgd2l0aCB0b21veW9fcmVhbHBhdGgoKSBleGNlcHQgdGhhdCB0aGUgcGF0aG5hbWUgaXMgYWxyZWFkeSBzb2x2ZWQuICovCitjaGFyICp0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKTsKKworLyoKKyAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgQUNMIGVudHJ5LgorICogVGhlIFJBTSBpcyBjaHVua2VkLCBzbyBORVZFUiB0cnkgdG8ga2ZyZWUoKSB0aGUgcmV0dXJuZWQgcG9pbnRlci4KKyAqLwordm9pZCAqdG9tb3lvX2FsbG9jX2VsZW1lbnQoY29uc3QgdW5zaWduZWQgaW50IHNpemUpOworCisvKgorICogS2VlcCB0aGUgZ2l2ZW4gbmFtZSBvbiB0aGUgUkFNLgorICogVGhlIFJBTSBpcyBzaGFyZWQsIHNvIE5FVkVSIHRyeSB0byBtb2RpZnkgb3Iga2ZyZWUoKSB0aGUgcmV0dXJuZWQgbmFtZS4KKyAqLworY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnRvbW95b19zYXZlX25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGVtcG9yYXJ5IHVzZSAoZS5nLiBwZXJtaXNzaW9uIGNoZWNrcykuICovCit2b2lkICp0b21veW9fYWxsb2MoY29uc3Qgc2l6ZV90IHNpemUpOworCisvKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdG9tb3lvX2FsbG9jKCkuICovCit2b2lkIHRvbW95b19mcmVlKGNvbnN0IHZvaWQgKnApOworCisvKiBDaGVjayBmb3IgbWVtb3J5IHVzYWdlLiAqLworaW50IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKworLyogU2V0IG1lbW9yeSBxdW90YS4gKi8KK2ludCB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKKworLyogSW5pdGlhbGl6ZSByZWFscGF0aCByZWxhdGVkIGNvZGUuICovCit2b2lkIF9faW5pdCB0b21veW9fcmVhbHBhdGhfaW5pdCh2b2lkKTsKKworI2VuZGlmIC8qICFkZWZpbmVkKF9TRUNVUklUWV9UT01PWU9fUkVBTFBBVEhfSCkgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by90b21veW8uYyBiL3NlY3VyaXR5L3RvbW95by90b21veW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWVlYWUxCi0tLSAvZGV2L251bGwKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jCisgKgorICogTFNNIGhvb2tzIGZvciBUT01PWU8gTGludXguCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgIE5UVCBEQVRBIENPUlBPUkFUSU9OCisgKgorICogVmVyc2lvbjogMi4yLjAtcHJlICAgMjAwOS8wMi8wMQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJ0b21veW8uaCIKKyNpbmNsdWRlICJyZWFscGF0aC5oIgorCitzdGF0aWMgaW50IHRvbW95b19jcmVkX3ByZXBhcmUoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKKwkJCSAgICAgICBnZnBfdCBnZnApCit7CisJLyoKKwkgKiBTaW5jZSAic3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIiBpcyBhIHNoYXJhYmxlIHBvaW50ZXIsCisJICogd2UgZG9uJ3QgbmVlZCB0byBkdXBsaWNhdGUuCisJICovCisJbmV3LT5zZWN1cml0eSA9IG9sZC0+c2VjdXJpdHk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX2Jwcm1fc2V0X2NyZWRzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJLyoKKwkgKiBEbyBvbmx5IGlmIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSBvZiBhbiBleGVjdmUKKwkgKiBvcGVyYXRpb24uCisJICovCisJaWYgKGJwcm0tPmNyZWRfcHJlcGFyZWQpCisJCXJldHVybiAwOworCS8qCisJICogTG9hZCBwb2xpY3kgaWYgL3NiaW4vdG9tb3lvLWluaXQgZXhpc3RzIGFuZCAvc2Jpbi9pbml0IGlzIHJlcXVlc3RlZAorCSAqIGZvciB0aGUgZmlyc3QgdGltZS4KKwkgKi8KKwlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVkKQorCQl0b21veW9fbG9hZF9wb2xpY3koYnBybS0+ZmlsZW5hbWUpOworCS8qCisJICogVGVsbCB0b21veW9fYnBybV9jaGVja19zZWN1cml0eSgpIGlzIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUgb2YgYW4KKwkgKiBleGVjdmUgb3BlcmF0aW9uLgorCSAqLworCWJwcm0tPmNyZWQtPnNlY3VyaXR5ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b21veW9fYnBybV9jaGVja19zZWN1cml0eShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IGJwcm0tPmNyZWQtPnNlY3VyaXR5OworCisJLyoKKwkgKiBFeGVjdXRlIHBlcm1pc3Npb24gaXMgY2hlY2tlZCBhZ2FpbnN0IHBhdGhuYW1lIHBhc3NlZCB0byBkb19leGVjdmUoKQorCSAqIHVzaW5nIGN1cnJlbnQgZG9tYWluLgorCSAqLworCWlmICghZG9tYWluKSB7CisJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKm5leHRfZG9tYWluID0gTlVMTDsKKwkJaW50IHJldHZhbCA9IHRvbW95b19maW5kX25leHRfZG9tYWluKGJwcm0sICZuZXh0X2RvbWFpbik7CisKKwkJaWYgKCFyZXR2YWwpCisJCQlicHJtLT5jcmVkLT5zZWN1cml0eSA9IG5leHRfZG9tYWluOworCQlyZXR1cm4gcmV0dmFsOworCX0KKwkvKgorCSAqIFJlYWQgcGVybWlzc2lvbiBpcyBjaGVja2VkIGFnYWluc3QgaW50ZXJwcmV0ZXJzIHVzaW5nIG5leHQgZG9tYWluLgorCSAqICcxJyBpcyB0aGUgcmVzdWx0IG9mIG9wZW5fdG9fbmFtZWlfZmxhZ3MoT19SRE9OTFkpLgorCSAqLworCXJldHVybiB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uKGRvbWFpbiwgJmJwcm0tPmZpbGUtPmZfcGF0aCwgMSk7Cit9CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisKK3N0YXRpYyBpbnQgdG9tb3lvX3ByZXBlbmQoY2hhciAqKmJ1ZmZlciwgaW50ICpidWZsZW4sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpbnQgbmFtZWxlbiA9IHN0cmxlbihzdHIpOworCisJaWYgKCpidWZsZW4gPCBuYW1lbGVuKQorCQlyZXR1cm4gLUVOT01FTTsKKwkqYnVmbGVuIC09IG5hbWVsZW47CisJKmJ1ZmZlciAtPSBuYW1lbGVuOworCW1lbWNweSgqYnVmZmVyLCBzdHIsIG5hbWVsZW4pOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRvbW95b19zeXNjdGxfcGF0aCAtIHJldHVybiB0aGUgcmVhbHBhdGggb2YgYSBjdGxfdGFibGUuCisgKiBAdGFibGU6IHBvaW50ZXIgdG8gInN0cnVjdCBjdGxfdGFibGUiLgorICoKKyAqIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIEB0YWJsZSBvbiBzdWNjZXNzLgorICogUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiB1c2VzIHRvbW95b19hbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCB0b21veW9fZnJlZSgpCisgKiBpZiB0aGlzIGZ1bmN0aW9uIGRpZG4ndCByZXR1cm4gTlVMTC4KKyAqLworc3RhdGljIGNoYXIgKnRvbW95b19zeXNjdGxfcGF0aChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSkKK3sKKwlpbnQgYnVmbGVuID0gVE9NT1lPX01BWF9QQVRITkFNRV9MRU47CisJY2hhciAqYnVmID0gdG9tb3lvX2FsbG9jKGJ1Zmxlbik7CisJY2hhciAqZW5kID0gYnVmICsgYnVmbGVuOworCWludCBlcnJvciA9IC1FTk9NRU07CisKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisKKwkqLS1lbmQgPSAnXDAnOworCWJ1Zmxlbi0tOworCXdoaWxlICh0YWJsZSkgeworCQljaGFyIG51bVszMl07CisJCWNvbnN0IGNoYXIgKnNwID0gdGFibGUtPnByb2NuYW1lOworCisJCWlmICghc3ApIHsKKwkJCW1lbXNldChudW0sIDAsIHNpemVvZihudW0pKTsKKwkJCXNucHJpbnRmKG51bSwgc2l6ZW9mKG51bSkgLSAxLCAiPSVkPSIsIHRhYmxlLT5jdGxfbmFtZSk7CisJCQlzcCA9IG51bTsKKwkJfQorCQlpZiAodG9tb3lvX3ByZXBlbmQoJmVuZCwgJmJ1Zmxlbiwgc3ApIHx8CisJCSAgICB0b21veW9fcHJlcGVuZCgmZW5kLCAmYnVmbGVuLCAiLyIpKQorCQkJZ290byBvdXQ7CisJCXRhYmxlID0gdGFibGUtPnBhcmVudDsKKwl9CisJaWYgKHRvbW95b19wcmVwZW5kKCZlbmQsICZidWZsZW4sICIvcHJvYy9zeXMiKSkKKwkJZ290byBvdXQ7CisJZXJyb3IgPSB0b21veW9fZW5jb2RlKGJ1ZiwgZW5kIC0gYnVmLCBlbmQpOworIG91dDoKKwlpZiAoIWVycm9yKQorCQlyZXR1cm4gYnVmOworCXRvbW95b19mcmVlKGJ1Zik7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3N5c2N0bChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IG9wKQoreworCWludCBlcnJvcjsKKwljaGFyICpuYW1lOworCisJb3AgJj0gTUFZX1JFQUQgfCBNQVlfV1JJVEU7CisJaWYgKCFvcCkKKwkJcmV0dXJuIDA7CisJbmFtZSA9IHRvbW95b19zeXNjdGxfcGF0aCh0YWJsZSk7CisJaWYgKCFuYW1lKQorCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHRvbW95b19jaGVja19maWxlX3Blcm0odG9tb3lvX2RvbWFpbigpLCBuYW1lLCBvcCk7CisJdG9tb3lvX2ZyZWUobmFtZSk7CisJcmV0dXJuIGVycm9yOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfdHJ1bmNhdGUoc3RydWN0IHBhdGggKnBhdGgsIGxvZmZfdCBsZW5ndGgsCisJCQkJdW5zaWduZWQgaW50IHRpbWVfYXR0cnMpCit7CisJcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMLAorCQkJCSAgICAgICBwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF91bmxpbmsoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9VTkxJTktfQUNMLAorCQkJCSAgICAgICAmcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfbWtkaXIoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJICAgICBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoID0geyBwYXJlbnQtPm1udCwgZGVudHJ5IH07CisJcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfTUtESVJfQUNMLAorCQkJCSAgICAgICAmcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfcm1kaXIoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICBUT01PWU9fVFlQRV9STURJUl9BQ0wsCisJCQkJICAgICAgICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9zeW1saW5rKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpvbGRfbmFtZSkKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoID0geyBwYXJlbnQtPm1udCwgZGVudHJ5IH07CisJcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfU1lNTElOS19BQ0wsCisJCQkJICAgICAgICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9ta25vZChzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkgICAgIGludCBtb2RlLCB1bnNpZ25lZCBpbnQgZGV2KQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKKwlpbnQgdHlwZSA9IFRPTU9ZT19UWVBFX0NSRUFURV9BQ0w7CisKKwlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKKwljYXNlIFNfSUZDSFI6CisJCXR5cGUgPSBUT01PWU9fVFlQRV9NS0NIQVJfQUNMOworCQlicmVhazsKKwljYXNlIFNfSUZCTEs6CisJCXR5cGUgPSBUT01PWU9fVFlQRV9NS0JMT0NLX0FDTDsKKwkJYnJlYWs7CisJY2FzZSBTX0lGSUZPOgorCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtGSUZPX0FDTDsKKwkJYnJlYWs7CisJY2FzZSBTX0lGU09DSzoKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LU09DS19BQ0w7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAorCQkJCSAgICAgICB0eXBlLCAmcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgcGF0aCAqbmV3X2RpciwKKwkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreworCXN0cnVjdCBwYXRoIHBhdGgxID0geyBuZXdfZGlyLT5tbnQsIG9sZF9kZW50cnkgfTsKKwlzdHJ1Y3QgcGF0aCBwYXRoMiA9IHsgbmV3X2Rpci0+bW50LCBuZXdfZGVudHJ5IH07CisJcmV0dXJuIHRvbW95b19jaGVja18ycGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfTElOS19BQ0wsCisJCQkJICAgICAgICZwYXRoMSwgJnBhdGgyKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9yZW5hbWUoc3RydWN0IHBhdGggKm9sZF9wYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAorCQkJICAgICAgc3RydWN0IHBhdGggKm5ld19wYXJlbnQsCisJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreworCXN0cnVjdCBwYXRoIHBhdGgxID0geyBvbGRfcGFyZW50LT5tbnQsIG9sZF9kZW50cnkgfTsKKwlzdHJ1Y3QgcGF0aCBwYXRoMiA9IHsgbmV3X3BhcmVudC0+bW50LCBuZXdfZGVudHJ5IH07CisJcmV0dXJuIHRvbW95b19jaGVja18ycGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKKwkJCQkgICAgICAgVE9NT1lPX1RZUEVfUkVOQU1FX0FDTCwKKwkJCQkgICAgICAgJnBhdGgxLCAmcGF0aDIpOworfQorCitzdGF0aWMgaW50IHRvbW95b19maWxlX2ZjbnRsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpZiAoY21kID09IEZfU0VURkwgJiYgKChhcmcgXiBmaWxlLT5mX2ZsYWdzKSAmIE9fQVBQRU5EKSkKKwkJcmV0dXJuIHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24odG9tb3lvX2RvbWFpbigpLCBmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0b21veW9fZGVudHJ5X29wZW4oc3RydWN0IGZpbGUgKmYsIGNvbnN0IHN0cnVjdCBjcmVkICpjcmVkKQoreworCWludCBmbGFncyA9IGYtPmZfZmxhZ3M7CisKKwlpZiAoKGZsYWdzICsgMSkgJiBPX0FDQ01PREUpCisJCWZsYWdzKys7CisJZmxhZ3MgfD0gZi0+Zl9mbGFncyAmIChPX0FQUEVORCB8IE9fVFJVTkMpOworCS8qIERvbid0IGNoZWNrIHJlYWQgcGVybWlzc2lvbiBoZXJlIGlmIGNhbGxlZCBmcm9tIGRvX2V4ZWN2ZSgpLiAqLworCWlmIChjdXJyZW50LT5pbl9leGVjdmUpCisJCXJldHVybiAwOworCXJldHVybiB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uKHRvbW95b19kb21haW4oKSwgJmYtPmZfcGF0aCwgZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgdG9tb3lvX3NlY3VyaXR5X29wcyA9IHsKKwkubmFtZSAgICAgICAgICAgICAgICA9ICJ0b21veW8iLAorCS5jcmVkX3ByZXBhcmUgICAgICAgID0gdG9tb3lvX2NyZWRfcHJlcGFyZSwKKwkuYnBybV9zZXRfY3JlZHMgICAgICA9IHRvbW95b19icHJtX3NldF9jcmVkcywKKwkuYnBybV9jaGVja19zZWN1cml0eSA9IHRvbW95b19icHJtX2NoZWNrX3NlY3VyaXR5LAorI2lmZGVmIENPTkZJR19TWVNDVEwKKwkuc3lzY3RsICAgICAgICAgICAgICA9IHRvbW95b19zeXNjdGwsCisjZW5kaWYKKwkuZmlsZV9mY250bCAgICAgICAgICA9IHRvbW95b19maWxlX2ZjbnRsLAorCS5kZW50cnlfb3BlbiAgICAgICAgID0gdG9tb3lvX2RlbnRyeV9vcGVuLAorCS5wYXRoX3RydW5jYXRlICAgICAgID0gdG9tb3lvX3BhdGhfdHJ1bmNhdGUsCisJLnBhdGhfdW5saW5rICAgICAgICAgPSB0b21veW9fcGF0aF91bmxpbmssCisJLnBhdGhfbWtkaXIgICAgICAgICAgPSB0b21veW9fcGF0aF9ta2RpciwKKwkucGF0aF9ybWRpciAgICAgICAgICA9IHRvbW95b19wYXRoX3JtZGlyLAorCS5wYXRoX3N5bWxpbmsgICAgICAgID0gdG9tb3lvX3BhdGhfc3ltbGluaywKKwkucGF0aF9ta25vZCAgICAgICAgICA9IHRvbW95b19wYXRoX21rbm9kLAorCS5wYXRoX2xpbmsgICAgICAgICAgID0gdG9tb3lvX3BhdGhfbGluaywKKwkucGF0aF9yZW5hbWUgICAgICAgICA9IHRvbW95b19wYXRoX3JlbmFtZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHRvbW95b19pbml0KHZvaWQpCit7CisJc3RydWN0IGNyZWQgKmNyZWQgPSAoc3RydWN0IGNyZWQgKikgY3VycmVudF9jcmVkKCk7CisKKwlpZiAoIXNlY3VyaXR5X21vZHVsZV9lbmFibGUoJnRvbW95b19zZWN1cml0eV9vcHMpKQorCQlyZXR1cm4gMDsKKwkvKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgc2VjdXJpdHkgZnJhbWV3b3JrICovCisJaWYgKHJlZ2lzdGVyX3NlY3VyaXR5KCZ0b21veW9fc2VjdXJpdHlfb3BzKSkKKwkJcGFuaWMoIkZhaWx1cmUgcmVnaXN0ZXJpbmcgVE9NT1lPIExpbnV4Iik7CisJcHJpbnRrKEtFUk5fSU5GTyAiVE9NT1lPIExpbnV4IGluaXRpYWxpemVkXG4iKTsKKwljcmVkLT5zZWN1cml0eSA9ICZ0b21veW9fa2VybmVsX2RvbWFpbjsKKwl0b21veW9fcmVhbHBhdGhfaW5pdCgpOworCXJldHVybiAwOworfQorCitzZWN1cml0eV9pbml0Y2FsbCh0b21veW9faW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vdG9tb3lvLmggYi9zZWN1cml0eS90b21veW8vdG9tb3lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBjOGY2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by90b21veW8uaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIHNlY3VyaXR5L3RvbW95by90b21veW8uaAorICoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBEb21haW4tQmFzZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgorICoKKyAqIFZlcnNpb246IDIuMi4wLXByZSAgIDIwMDkvMDIvMDEKKyAqCisgKi8KKworI2lmbmRlZiBfU0VDVVJJVFlfVE9NT1lPX1RPTU9ZT19ICisjZGVmaW5lIF9TRUNVUklUWV9UT01PWU9fVE9NT1lPX0gKKworc3RydWN0IHRvbW95b19wYXRoX2luZm87CitzdHJ1Y3QgcGF0aDsKK3N0cnVjdCBpbm9kZTsKK3N0cnVjdCBsaW51eF9iaW5wcm07CitzdHJ1Y3QgcHRfcmVnczsKK3N0cnVjdCB0b21veW9fcGFnZV9idWZmZXI7CisKK2ludCB0b21veW9fY2hlY2tfZmlsZV9wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCB1OCBwZXJtKTsKK2ludCB0b21veW9fY2hlY2tfZXhlY19wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCSAgIHN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIgKmJ1Zik7CitpbnQgdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCisJCQkJIHN0cnVjdCBwYXRoICpwYXRoLCBjb25zdCBpbnQgZmxhZyk7CitpbnQgdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgpOworaW50IHRvbW95b19jaGVja18ycGF0aF9wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICBjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoMSwKKwkJCSAgICBzdHJ1Y3QgcGF0aCAqcGF0aDIpOworaW50IHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlscCk7CitpbnQgdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKwkJCSAgICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICoqbmV4dF9kb21haW4pOworCisvKiBJbmRleCBudW1iZXJzIGZvciBBY2Nlc3MgQ29udHJvbHMuICovCisKKyNkZWZpbmUgVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCAgICAgICAgICAgICAgICAgMQorCisvKiBJbmRleCBudW1iZXJzIGZvciBGaWxlIENvbnRyb2xzLiAqLworCisvKgorICogVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBzcGVjaWFsLiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIGF1dG9tYXRpY2FsbHkgc2V0CisgKiBpZiBib3RoIFRZUEVfUkVBRF9BQ0wgYW5kIFRZUEVfV1JJVEVfQUNMIGFyZSBzZXQuIEJvdGggVFlQRV9SRUFEX0FDTCBhbmQKKyAqIFRZUEVfV1JJVEVfQUNMIGFyZSBhdXRvbWF0aWNhbGx5IHNldCBpZiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIHNldC4KKyAqIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGVpdGhlciBUWVBFX1JFQURfQUNMIG9yCisgKiBUWVBFX1dSSVRFX0FDTCBpcyBjbGVhcmVkLiBCb3RoIFRZUEVfUkVBRF9BQ0wgYW5kIFRZUEVfV1JJVEVfQUNMIGFyZQorICogYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgY2xlYXJlZC4KKyAqLworCisjZGVmaW5lIFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMICAgIDAKKyNkZWZpbmUgVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0wgICAgICAgMQorI2RlZmluZSBUT01PWU9fVFlQRV9SRUFEX0FDTCAgICAgICAgICAyCisjZGVmaW5lIFRPTU9ZT19UWVBFX1dSSVRFX0FDTCAgICAgICAgIDMKKyNkZWZpbmUgVE9NT1lPX1RZUEVfQ1JFQVRFX0FDTCAgICAgICAgNAorI2RlZmluZSBUT01PWU9fVFlQRV9VTkxJTktfQUNMICAgICAgICA1CisjZGVmaW5lIFRPTU9ZT19UWVBFX01LRElSX0FDTCAgICAgICAgIDYKKyNkZWZpbmUgVE9NT1lPX1RZUEVfUk1ESVJfQUNMICAgICAgICAgNworI2RlZmluZSBUT01PWU9fVFlQRV9NS0ZJRk9fQUNMICAgICAgICA4CisjZGVmaW5lIFRPTU9ZT19UWVBFX01LU09DS19BQ0wgICAgICAgIDkKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTUtCTE9DS19BQ0wgICAgICAxMAorI2RlZmluZSBUT01PWU9fVFlQRV9NS0NIQVJfQUNMICAgICAgIDExCisjZGVmaW5lIFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCAgICAgMTIKKyNkZWZpbmUgVE9NT1lPX1RZUEVfU1lNTElOS19BQ0wgICAgICAxMworI2RlZmluZSBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTCAgICAgIDE0CisjZGVmaW5lIFRPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OIDE1CisKKyNkZWZpbmUgVE9NT1lPX1RZUEVfTElOS19BQ0wgICAgICAgICAwCisjZGVmaW5lIFRPTU9ZT19UWVBFX1JFTkFNRV9BQ0wgICAgICAgMQorI2RlZmluZSBUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTiAyCisKKyNkZWZpbmUgVE9NT1lPX0RPTUFJTlBPTElDWSAgICAgICAgICAwCisjZGVmaW5lIFRPTU9ZT19FWENFUFRJT05QT0xJQ1kgICAgICAgMQorI2RlZmluZSBUT01PWU9fRE9NQUlOX1NUQVRVUyAgICAgICAgIDIKKyNkZWZpbmUgVE9NT1lPX1BST0NFU1NfU1RBVFVTICAgICAgICAzCisjZGVmaW5lIFRPTU9ZT19NRU1JTkZPICAgICAgICAgICAgICAgNAorI2RlZmluZSBUT01PWU9fU0VMRkRPTUFJTiAgICAgICAgICAgIDUKKyNkZWZpbmUgVE9NT1lPX1ZFUlNJT04gICAgICAgICAgICAgICA2CisjZGVmaW5lIFRPTU9ZT19QUk9GSUxFICAgICAgICAgICAgICAgNworI2RlZmluZSBUT01PWU9fTUFOQUdFUiAgICAgICAgICAgICAgIDgKKworZXh0ZXJuIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gdG9tb3lvX2tlcm5lbF9kb21haW47CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2RvbWFpbih2b2lkKQoreworCXJldHVybiBjdXJyZW50X2NyZWQoKS0+c2VjdXJpdHk7Cit9CisKKy8qIENhbGxlciBob2xkcyB0YXNrbGlzdF9sb2NrIHNwaW5sb2NrLiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fcmVhbF9kb21haW4oc3RydWN0IHRhc2tfc3RydWN0CisJCQkJCQkJICAgICp0YXNrKQoreworCS8qKioqKiBDUklUSUNBTCBTRUNUSU9OIFNUQVJUICoqKioqLworCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gZ2V0X3Rhc2tfY3JlZCh0YXNrKTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4gPSBjcmVkLT5zZWN1cml0eTsKKworCXB1dF9jcmVkKGNyZWQpOworCXJldHVybiBkb21haW47CisJLyoqKioqIENSSVRJQ0FMIFNFQ1RJT04gRU5EICoqKioqLworfQorCisjZW5kaWYgLyogIWRlZmluZWQoX1NFQ1VSSVRZX1RPTU9ZT19UT01PWU9fSCkgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL0tjb25maWcgYi9zb3VuZC9LY29uZmlnCmluZGV4IDIwMGFjYTEuLjFlY2ViODUgMTAwNjQ0Ci0tLSBhL3NvdW5kL0tjb25maWcKKysrIGIvc291bmQvS2NvbmZpZwpAQCAtNjAsNiArNjAsOCBAQAogCiBzb3VyY2UgInNvdW5kL2FybS9LY29uZmlnIgogCitzb3VyY2UgInNvdW5kL2F0bWVsL0tjb25maWciCisKIHNvdXJjZSAic291bmQvc3BpL0tjb25maWciCiAKIHNvdXJjZSAic291bmQvbWlwcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvc291bmQvTWFrZWZpbGUgYi9zb3VuZC9NYWtlZmlsZQppbmRleCBjNzZkNzA3Li5lYzQ2N2RlIDEwMDY0NAotLS0gYS9zb3VuZC9NYWtlZmlsZQorKysgYi9zb3VuZC9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIG9iai0kKENPTkZJR19TT1VORF9QUklNRSkgKz0gb3NzLwogb2JqLSQoQ09ORklHX0RNQVNPVU5EKSArPSBvc3MvCiBvYmotJChDT05GSUdfU05EKSArPSBjb3JlLyBpMmMvIGRyaXZlcnMvIGlzYS8gcGNpLyBwcGMvIGFybS8gc2gvIHN5bnRoLyB1c2IvIFwKLQlzcGFyYy8gc3BpLyBwYXJpc2MvIHBjbWNpYS8gbWlwcy8gc29jLworCXNwYXJjLyBzcGkvIHBhcmlzYy8gcGNtY2lhLyBtaXBzLyBzb2MvIGF0bWVsLwogb2JqLSQoQ09ORklHX1NORF9BT0EpICs9IGFvYS8KIAogIyBUaGlzIG9uZSBtdXN0IGJlIGNvbXBpbGFibGUgZXZlbiBpZiBzb3VuZCBpcyBjb25maWd1cmVkIG91dApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2FvYS1ncGlvLmggYi9zb3VuZC9hb2EvYW9hLWdwaW8uaAppbmRleCBlZTY0ZjVkLi42MDY1YjAzIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvYW9hLWdwaW8uaAorKysgYi9zb3VuZC9hb2EvYW9hLWdwaW8uaApAQCAtMzQsMTAgKzM0LDEyIEBACiAJdm9pZCAoKnNldF9oZWFkcGhvbmUpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0LCBpbnQgb24pOwogCXZvaWQgKCpzZXRfc3BlYWtlcnMpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0LCBpbnQgb24pOwogCXZvaWQgKCpzZXRfbGluZW91dCkoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CisJdm9pZCAoKnNldF9tYXN0ZXIpKHN0cnVjdCBncGlvX3J1bnRpbWUgKnJ0LCBpbnQgb24pOwogCiAJaW50ICgqZ2V0X2hlYWRwaG9uZSkoc3RydWN0IGdwaW9fcnVudGltZSAqcnQpOwogCWludCAoKmdldF9zcGVha2Vycykoc3RydWN0IGdwaW9fcnVudGltZSAqcnQpOwogCWludCAoKmdldF9saW5lb3V0KShzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCk7CisJaW50ICgqZ2V0X21hc3Rlcikoc3RydWN0IGdwaW9fcnVudGltZSAqcnQpOwogCiAJdm9pZCAoKnNldF9od19yZXNldCkoc3RydWN0IGdwaW9fcnVudGltZSAqcnQsIGludCBvbik7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb3JlL2Fsc2EuYyBiL3NvdW5kL2FvYS9jb3JlL2Fsc2EuYwppbmRleCA2MTc4NTA0Li4wZmEzODU1IDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvY29yZS9hbHNhLmMKKysrIGIvc291bmQvYW9hL2NvcmUvYWxzYS5jCkBAIC0yMyw5ICsyMywxMCBAQAogCQkvKiBjYW5ub3QgYmUgRUVYSVNUIGR1ZSB0byB1c2FnZSBpbiBhb2FfZmFicmljX3JlZ2lzdGVyICovCiAJCXJldHVybiAtRUJVU1k7CiAKLQlhbHNhX2NhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIG5hbWUsIG1vZCwgc2l6ZW9mKHN0cnVjdCBhb2FfY2FyZCkpOwotCWlmICghYWxzYV9jYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIG5hbWUsIG1vZCwgc2l6ZW9mKHN0cnVjdCBhb2FfY2FyZCksCisJCQkgICAgICAmYWxzYV9jYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlhb2FfY2FyZCA9IGFsc2FfY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWFvYV9jYXJkLT5hbHNhX2NhcmQgPSBhbHNhX2NhcmQ7CiAJYWxzYV9jYXJkLT5kZXYgPSBkZXY7CmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvY29yZS9ncGlvLWZlYXR1cmUuYyBiL3NvdW5kL2FvYS9jb3JlL2dwaW8tZmVhdHVyZS5jCmluZGV4IGM5M2FkNWQuLmRlOGUwM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb3JlL2dwaW8tZmVhdHVyZS5jCisrKyBiL3NvdW5kL2FvYS9jb3JlL2dwaW8tZmVhdHVyZS5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSAiLi4vYW9hLmgiCiAKLS8qIFRPRE86IHRoZXNlIGFyZSAyMCBnbG9iYWwgdmFyaWFibGVzCisvKiBUT0RPOiB0aGVzZSBhcmUgbG90cyBvZiBnbG9iYWwgdmFyaWFibGVzCiAgKiB0aGF0IGFyZW4ndCB1c2VkIG9uIG1vc3QgbWFjaGluZXMuLi4KICAqIE1vdmUgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkCiAgKiBzdHJ1Y3R1cmUgYW5kIHVzZSB0aGF0LgpAQCAtMjMsNiArMjMsNyBAQAogLyogdGhlc2UgYXJlIHRoZSBHUElPIG51bWJlcnMgKHJlZ2lzdGVyIGFkZHJlc3NlcyBhcyBvZmZzZXRzIGludG8KICAqIHRoZSBHUElPIHNwYWNlKSAqLwogc3RhdGljIGludCBoZWFkcGhvbmVfbXV0ZV9ncGlvOworc3RhdGljIGludCBtYXN0ZXJfbXV0ZV9ncGlvOwogc3RhdGljIGludCBhbXBfbXV0ZV9ncGlvOwogc3RhdGljIGludCBsaW5lb3V0X211dGVfZ3BpbzsKIHN0YXRpYyBpbnQgaHdfcmVzZXRfZ3BpbzsKQEAgLTMyLDYgKzMzLDcgQEAKIAogLyogc2VlIHRoZSBTV0lUQ0hfR1BJTyBtYWNybyAqLwogc3RhdGljIGludCBoZWFkcGhvbmVfbXV0ZV9ncGlvX2FjdGl2ZXN0YXRlOworc3RhdGljIGludCBtYXN0ZXJfbXV0ZV9ncGlvX2FjdGl2ZXN0YXRlOwogc3RhdGljIGludCBhbXBfbXV0ZV9ncGlvX2FjdGl2ZXN0YXRlOwogc3RhdGljIGludCBsaW5lb3V0X211dGVfZ3Bpb19hY3RpdmVzdGF0ZTsKIHN0YXRpYyBpbnQgaHdfcmVzZXRfZ3Bpb19hY3RpdmVzdGF0ZTsKQEAgLTE1Niw2ICsxNTgsNyBAQAogRlRSX0dQSU8oaGVhZHBob25lLCAwKTsKIEZUUl9HUElPKGFtcCwgMSk7CiBGVFJfR1BJTyhsaW5lb3V0LCAyKTsKK0ZUUl9HUElPKG1hc3RlciwgMyk7CiAKIHN0YXRpYyB2b2lkIGZ0cl9ncGlvX3NldF9od19yZXNldChzdHJ1Y3QgZ3Bpb19ydW50aW1lICpydCwgaW50IG9uKQogewpAQCAtMTcyLDYgKzE3NSw4IEBACiAJCQkgIGh3X3Jlc2V0X2dwaW8sIHYpOwogfQogCitzdGF0aWMgc3RydWN0IGdwaW9fbWV0aG9kcyBtZXRob2RzOworCiBzdGF0aWMgdm9pZCBmdHJfZ3Bpb19hbGxfYW1wc19vZmYoc3RydWN0IGdwaW9fcnVudGltZSAqcnQpCiB7CiAJaW50IHNhdmVkOwpAQCAtMTgxLDYgKzE4Niw4IEBACiAJZnRyX2dwaW9fc2V0X2hlYWRwaG9uZShydCwgMCk7CiAJZnRyX2dwaW9fc2V0X2FtcChydCwgMCk7CiAJZnRyX2dwaW9fc2V0X2xpbmVvdXQocnQsIDApOworCWlmIChtZXRob2RzLnNldF9tYXN0ZXIpCisJCWZ0cl9ncGlvX3NldF9tYXN0ZXIocnQsIDApOwogCXJ0LT5pbXBsZW1lbnRhdGlvbl9wcml2YXRlID0gc2F2ZWQ7CiB9CiAKQEAgLTE5Myw2ICsyMDAsOCBAQAogCWZ0cl9ncGlvX3NldF9oZWFkcGhvbmUocnQsIChzPj4wKSYxKTsKIAlmdHJfZ3Bpb19zZXRfYW1wKHJ0LCAocz4+MSkmMSk7CiAJZnRyX2dwaW9fc2V0X2xpbmVvdXQocnQsIChzPj4yKSYxKTsKKwlpZiAobWV0aG9kcy5zZXRfbWFzdGVyKQorCQlmdHJfZ3Bpb19zZXRfbWFzdGVyKHJ0LCAocz4+MykmMSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0cl9oYW5kbGVfbm90aWZ5KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTIzMSw2ICsyNDAsMTIgQEAKIAlnZXRfZ3BpbygiaHctcmVzZXQiLCAiYXVkaW8taHctcmVzZXQiLAogCQkgJmh3X3Jlc2V0X2dwaW8sCiAJCSAmaHdfcmVzZXRfZ3Bpb19hY3RpdmVzdGF0ZSk7CisJaWYgKGdldF9ncGlvKCJtYXN0ZXItbXV0ZSIsIE5VTEwsCisJCSAgICAgJm1hc3Rlcl9tdXRlX2dwaW8sCisJCSAgICAgJm1hc3Rlcl9tdXRlX2dwaW9fYWN0aXZlc3RhdGUpKSB7CisJCW1ldGhvZHMuc2V0X21hc3RlciA9IGZ0cl9ncGlvX3NldF9tYXN0ZXI7CisJCW1ldGhvZHMuZ2V0X21hc3RlciA9IGZ0cl9ncGlvX2dldF9tYXN0ZXI7CisJfQogCiAJaGVhZHBob25lX2RldGVjdF9ub2RlID0gZ2V0X2dwaW8oImhlYWRwaG9uZS1kZXRlY3QiLCBOVUxMLAogCQkJCQkgJmhlYWRwaG9uZV9kZXRlY3RfZ3BpbywKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9mYWJyaWNzL2xheW91dC5jIGIvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMKaW5kZXggYWQ2MGY1ZC4uZmJmNWM5MyAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMKKysrIGIvc291bmQvYW9hL2ZhYnJpY3MvbGF5b3V0LmMKQEAgLTEsMTYgKzEsMTQgQEAKIC8qCi0gKiBBcHBsZSBPbmJvYXJkIEF1ZGlvIGRyaXZlciAtLSBsYXlvdXQgZmFicmljCisgKiBBcHBsZSBPbmJvYXJkIEF1ZGlvIGRyaXZlciAtLSBsYXlvdXQvbWFjaGluZSBpZCBmYWJyaWMKICAqCi0gKiBDb3B5cmlnaHQgMjAwNiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIEdQTCB2MiwgY2FuIGJlIGZvdW5kIGluIENPUFlJTkcuCiAgKgogICoKLSAqIFRoaXMgZmFicmljIG1vZHVsZSBsb29rcyBmb3Igc291bmQgY29kZWNzCi0gKiBiYXNlZCBvbiB0aGUgbGF5b3V0LWlkIHByb3BlcnR5IGluIHRoZSBkZXZpY2UgdHJlZS4KLSAqCisgKiBUaGlzIGZhYnJpYyBtb2R1bGUgbG9va3MgZm9yIHNvdW5kIGNvZGVjcyBiYXNlZCBvbiB0aGUKKyAqIGxheW91dC1pZCBvciBkZXZpY2UtaWQgcHJvcGVydHkgaW4gdGhlIGRldmljZSB0cmVlLgogICovCi0KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTYzLDcgKzYxLDcgQEAKICNkZWZpbmUgTEFZT1VUX0ZMQUdfQ09NQk9fTElORU9VVF9TUERJRgkoMTw8MCkKIAogc3RydWN0IGxheW91dCB7Ci0JdW5zaWduZWQgaW50IGxheW91dF9pZDsKKwl1bnNpZ25lZCBpbnQgbGF5b3V0X2lkLCBkZXZpY2VfaWQ7CiAJc3RydWN0IGNvZGVjX2Nvbm5lY3RfaW5mbyBjb2RlY3NbTUFYX0NPREVDU19QRVJfQlVTXTsKIAlpbnQgZmxhZ3M7CiAKQEAgLTExMSw2ICsxMDksMTAgQEAKIE1PRFVMRV9BTElBUygic291bmQtbGF5b3V0LTk4Iik7CiBNT0RVTEVfQUxJQVMoInNvdW5kLWxheW91dC0xMDAiKTsKIAorTU9EVUxFX0FMSUFTKCJhb2EtZGV2aWNlLWlkLTE0Iik7CitNT0RVTEVfQUxJQVMoImFvYS1kZXZpY2UtaWQtMjIiKTsKK01PRFVMRV9BTElBUygiYW9hLWRldmljZS1pZC0zNSIpOworCiAvKiBvbnl4IHdpdGggYWxsIGJ1dCBtaWNyb3Bob25lIGNvbm5lY3RlZCAqLwogc3RhdGljIHN0cnVjdCBjb2RlY19jb25uZWN0aW9uIG9ueXhfY29ubmVjdGlvbnNfbm9taWNbXSA9IHsKIAl7CkBAIC01MTgsNiArNTIwLDI3IEBACiAJCS5jb25uZWN0aW9ucyA9IG9ueXhfY29ubmVjdGlvbnNfbm9oZWFkcGhvbmVzLAogCSAgfSwKIAl9LAorCS8qIFBvd2VyTWFjMyw0ICovCisJeyAuZGV2aWNlX2lkID0gMTQsCisJICAuY29kZWNzWzBdID0geworCQkubmFtZSA9ICJ0YXMiLAorCQkuY29ubmVjdGlvbnMgPSB0YXNfY29ubmVjdGlvbnNfbm9saW5lLAorCSAgfSwKKwl9LAorCS8qIFBvd2VyTWFjMyw2ICovCisJeyAuZGV2aWNlX2lkID0gMjIsCisJICAuY29kZWNzWzBdID0geworCQkubmFtZSA9ICJ0YXMiLAorCQkuY29ubmVjdGlvbnMgPSB0YXNfY29ubmVjdGlvbnNfYWxsLAorCSAgfSwKKwl9LAorCS8qIFBvd2VyQm9vazUsMiAqLworCXsgLmRldmljZV9pZCA9IDM1LAorCSAgLmNvZGVjc1swXSA9IHsKKwkJLm5hbWUgPSAidGFzIiwKKwkJLmNvbm5lY3Rpb25zID0gdGFzX2Nvbm5lY3Rpb25zX2FsbCwKKwkgIH0sCisJfSwKIAl7fQogfTsKIApAQCAtNTI2LDcgKzU0OSw3IEBACiAJc3RydWN0IGxheW91dCAqbDsKIAogCWwgPSBsYXlvdXRzOwotCXdoaWxlIChsLT5sYXlvdXRfaWQpIHsKKwl3aGlsZSAobC0+Y29kZWNzWzBdLm5hbWUpIHsKIAkJaWYgKGwtPmxheW91dF9pZCA9PSBpZCkKIAkJCXJldHVybiBsOwogCQlsKys7CkBAIC01MzQsNiArNTU3LDE5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbGF5b3V0ICpmaW5kX2xheW91dF9ieV9kZXZpY2UodW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBsYXlvdXQgKmw7CisKKwlsID0gbGF5b3V0czsKKwl3aGlsZSAobC0+Y29kZWNzWzBdLm5hbWUpIHsKKwkJaWYgKGwtPmRldmljZV9pZCA9PSBpZCkKKwkJCXJldHVybiBsOworCQlsKys7CisJfQorCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgdm9pZCB1c2VfbGF5b3V0KHN0cnVjdCBsYXlvdXQgKmwpCiB7CiAJaW50IGk7CkBAIC01NjQsNiArNjAwLDcgQEAKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpoZWFkcGhvbmVfY3RybDsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpsaW5lb3V0X2N0cmw7CiAJc3RydWN0IHNuZF9rY29udHJvbCAqc3BlYWtlcl9jdHJsOworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlcl9jdHJsOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmhlYWRwaG9uZV9kZXRlY3RlZF9jdHJsOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmxpbmVvdXRfZGV0ZWN0ZWRfY3RybDsKIApAQCAtNjE1LDYgKzY1Miw3IEBACiBBTVBfQ09OVFJPTChoZWFkcGhvbmUsICJIZWFkcGhvbmUgU3dpdGNoIik7CiBBTVBfQ09OVFJPTChzcGVha2VycywgIlNwZWFrZXJzIFN3aXRjaCIpOwogQU1QX0NPTlRST0wobGluZW91dCwgIkxpbmUtT3V0IFN3aXRjaCIpOworQU1QX0NPTlRST0wobWFzdGVyLCAiTWFzdGVyIFN3aXRjaCIpOwogCiBzdGF0aWMgaW50IGRldGVjdF9jaG9pY2VfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKQEAgLTg1NSw2ICs4OTMsMTEgQEAKICAJbGluZW91dCA9IGNvZGVjLT5ncGlvLT5tZXRob2RzLT5nZXRfZGV0ZWN0KGNvZGVjLT5ncGlvLAogCQkJCQkJICAgQU9BX05PVElGWV9MSU5FX09VVCk7CiAKKwlpZiAoY29kZWMtPmdwaW8tPm1ldGhvZHMtPnNldF9tYXN0ZXIpIHsKKwkJY3RsID0gc25kX2N0bF9uZXcxKCZtYXN0ZXJfY3RsLCBjb2RlYy0+Z3Bpbyk7CisJCWxkZXYtPm1hc3Rlcl9jdHJsID0gY3RsOworCQlhb2Ffc25kX2N0bF9hZGQoY3RsKTsKKwl9CiAJd2hpbGUgKGNjLT5jb25uZWN0ZWQpIHsKIAkJaWYgKGNjLT5jb25uZWN0ZWQgJiBDQ19TUEVBS0VSUykgewogCQkJaWYgKGhlYWRwaG9uZXMgPD0gMCAmJiBsaW5lb3V0IDw9IDApCkBAIC05MzgsOCArOTgxLDggQEAKIHN0YXRpYyBpbnQgYW9hX2ZhYnJpY19sYXlvdXRfcHJvYmUoc3RydWN0IHNvdW5kYnVzX2RldiAqc2RldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNvdW5kID0gTlVMTDsKLQljb25zdCB1bnNpZ25lZCBpbnQgKmxheW91dF9pZDsKLQlzdHJ1Y3QgbGF5b3V0ICpsYXlvdXQ7CisJY29uc3QgdW5zaWduZWQgaW50ICppZDsKKwlzdHJ1Y3QgbGF5b3V0ICpsYXlvdXQgPSBOVUxMOwogCXN0cnVjdCBsYXlvdXRfZGV2ICpsZGV2ID0gTlVMTDsKIAlpbnQgZXJyOwogCkBAIC05NTIsMTUgKzk5NSwxOCBAQAogCQlpZiAoc291bmQtPnR5cGUgJiYgc3RyY2FzZWNtcChzb3VuZC0+dHlwZSwgInNvdW5kY2hpcCIpID09IDApCiAJCQlicmVhazsKIAl9Ci0JaWYgKCFzb3VuZCkgcmV0dXJuIC1FTk9ERVY7CisJaWYgKCFzb3VuZCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlsYXlvdXRfaWQgPSBvZl9nZXRfcHJvcGVydHkoc291bmQsICJsYXlvdXQtaWQiLCBOVUxMKTsKLQlpZiAoIWxheW91dF9pZCkKLQkJZ290byBvdXRub2RldjsKLQlwcmludGsoS0VSTl9JTkZPICJzbmQtYW9hLWZhYnJpYy1sYXlvdXQ6IGZvdW5kIGJ1cyB3aXRoIGxheW91dCAlZFxuIiwKLQkgICAgICAgKmxheW91dF9pZCk7CisJaWQgPSBvZl9nZXRfcHJvcGVydHkoc291bmQsICJsYXlvdXQtaWQiLCBOVUxMKTsKKwlpZiAoaWQpIHsKKwkJbGF5b3V0ID0gZmluZF9sYXlvdXRfYnlfaWQoKmlkKTsKKwl9IGVsc2UgeworCQlpZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImRldmljZS1pZCIsIE5VTEwpOworCQlpZiAoaWQpCisJCQlsYXlvdXQgPSBmaW5kX2xheW91dF9ieV9kZXZpY2UoKmlkKTsKKwl9CiAKLQlsYXlvdXQgPSBmaW5kX2xheW91dF9ieV9pZCgqbGF5b3V0X2lkKTsKIAlpZiAoIWxheW91dCkgewogCQlwcmludGsoS0VSTl9FUlIgInNuZC1hb2EtZmFicmljLWxheW91dDogdW5rbm93biBsYXlvdXRcbiIpOwogCQlnb3RvIG91dG5vZGV2OwpAQCAtOTc2LDYgKzEwMjIsNyBAQAogCWxkZXYtPmxheW91dCA9IGxheW91dDsKIAlsZGV2LT5ncGlvLm5vZGUgPSBzb3VuZC0+cGFyZW50OwogCXN3aXRjaCAobGF5b3V0LT5sYXlvdXRfaWQpIHsKKwljYXNlIDA6ICAvKiBhbnl0aGluZyB3aXRoIGRldmljZV9pZCwgbm90IGxheW91dF9pZCAqLwogCWNhc2UgNDE6IC8qIHRoYXQgdW5rbm93biBtYWNoaW5lIG5vIG9uZSBzZWVtcyB0byBoYXZlICovCiAJY2FzZSA1MTogLyogUG93ZXJCb29rNSw0ICovCiAJY2FzZSA1ODogLyogTWFjIE1pbmkgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvY29yZS5jIGIvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb3JlLmMKaW5kZXggYmU0NjhlZGYuLjQxOGM4NGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvY29yZS5jCisrKyBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvY29yZS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGkyc2J1cyBkcml2ZXIKICAqCi0gKiBDb3B5cmlnaHQgMjAwNiBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIEdQTCB2MiwgY2FuIGJlIGZvdW5kIGluIENPUFlJTkcuCiAgKi8KQEAgLTE4NiwxMyArMTg2LDI1IEBACiAJCX0KIAl9CiAJaWYgKGkgPT0gMSkgewotCQljb25zdCB1MzIgKmxheW91dF9pZCA9Ci0JCQlvZl9nZXRfcHJvcGVydHkoc291bmQsICJsYXlvdXQtaWQiLCBOVUxMKTsKLQkJaWYgKGxheW91dF9pZCkgewotCQkJbGF5b3V0ID0gKmxheW91dF9pZDsKKwkJY29uc3QgdTMyICppZCA9IG9mX2dldF9wcm9wZXJ0eShzb3VuZCwgImxheW91dC1pZCIsIE5VTEwpOworCisJCWlmIChpZCkgeworCQkJbGF5b3V0ID0gKmlkOwogCQkJc25wcmludGYoZGV2LT5zb3VuZC5tb2RhbGlhcywgMzIsCiAJCQkJICJzb3VuZC1sYXlvdXQtJWQiLCBsYXlvdXQpOwogCQkJb2sgPSAxOworCQl9IGVsc2UgeworCQkJaWQgPSBvZl9nZXRfcHJvcGVydHkoc291bmQsICJkZXZpY2UtaWQiLCBOVUxMKTsKKwkJCS8qCisJCQkgKiBXZSBwcm9iYWJseSBjYW5ub3QgaGFuZGxlIGFsbCBkZXZpY2UtaWQgbWFjaGluZXMsCisJCQkgKiBzbyByZXN0cmljdCB0byB0aG9zZSB3ZSBkbyBoYW5kbGUgZm9yIG5vdy4KKwkJCSAqLworCQkJaWYgKGlkICYmICgqaWQgPT0gMjIgfHwgKmlkID09IDE0IHx8ICppZCA9PSAzNSkpIHsKKwkJCQlzbnByaW50ZihkZXYtPnNvdW5kLm1vZGFsaWFzLCAzMiwKKwkJCQkJICJhb2EtZGV2aWNlLWlkLSVkIiwgKmlkKTsKKwkJCQlvayA9IDE7CisJCQkJbGF5b3V0ID0gLTE7CisJCQl9CiAJCX0KIAl9CiAJLyogZm9yIHRoZSB0aW1lIGJlaW5nLCB1bnRpbCB3ZSBjYW4gaGFuZGxlIG5vbi1sYXlvdXQtaWQKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9LY29uZmlnIGIvc291bmQvYXJtL0tjb25maWcKaW5kZXggZjhlNmRlNC4uODg1NjgzYSAxMDA2NDQKLS0tIGEvc291bmQvYXJtL0tjb25maWcKKysrIGIvc291bmQvYXJtL0tjb25maWcKQEAgLTExLDE3ICsxMSw2IEBACiAKIGlmIFNORF9BUk0KIAotY29uZmlnIFNORF9TQTExWFhfVURBMTM0MQotCXRyaXN0YXRlICJTQTExeHggVURBMTM0MVRTIGRyaXZlciAoaVBhcSBIMzYwMCkiCi0JZGVwZW5kcyBvbiBBUkNIX1NBMTEwMCAmJiBMMwotCXNlbGVjdCBTTkRfUENNCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIENvbXBhcSBpUGFxIEgzeDAwIGhhbmRoZWxkIGNvbXB1dGVyCi0JICBhbmQgd2FudCB0byB1c2UgaXRzIFBoaWxpcHMgVURBIDEzNDEgYXVkaW8gY2hpcC4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgc25kLXNhMTF4eC11ZGExMzQxLgotCiBjb25maWcgU05EX0FSTUFBQ0kKIAl0cmlzdGF0ZSAiQVJNIFByaW1lQ2VsbCBQTDA0MSBBQyBMaW5rIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBUk1fQU1CQQpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL01ha2VmaWxlIGIvc291bmQvYXJtL01ha2VmaWxlCmluZGV4IDIwNTRkZTEuLjVhNTQ5ZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9NYWtlZmlsZQorKysgYi9zb3VuZC9hcm0vTWFrZWZpbGUKQEAgLTIsOSArMiw2IEBACiAjIE1ha2VmaWxlIGZvciBBTFNBCiAjCiAKLW9iai0kKENPTkZJR19TTkRfU0ExMVhYX1VEQTEzNDEpICs9IHNuZC1zYTExeHgtdWRhMTM0MS5vIAotc25kLXNhMTF4eC11ZGExMzQxLW9ianMJCTo9IHNhMTF4eC11ZGExMzQxLm8KLQogb2JqLSQoQ09ORklHX1NORF9BUk1BQUNJKQkrPSBzbmQtYWFjaS5vCiBzbmQtYWFjaS1vYmpzCQkJOj0gYWFjaS5vIGRldmRtYS5vCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9hYWNpLmMgYi9zb3VuZC9hcm0vYWFjaS5jCmluZGV4IDc3MjkwMWUuLjdmYmQ2OGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9hYWNpLmMKKysrIGIvc291bmQvYXJtL2FhY2kuYwpAQCAtOTk1LDEwICs5OTUsMTEgQEAKIHsKIAlzdHJ1Y3QgYWFjaSAqYWFjaTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCi0JCQkgICAgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgYWFjaSkpOwotCWlmIChjYXJkID09IE5VTEwpCisJZXJyID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJICAgICAgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3QgYWFjaSksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIE5VTEw7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBhYWNpX2ZyZWVfY2FyZDsKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYwppbmRleCAzNWFmZDBjLi43NzkzZDJhIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKKysrIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8c291bmQvcHhhMnh4LWxpYi5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtYWM5Ny5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CkBAIC0zMSw2ICszMCw3IEBACiBzdGF0aWMgdm9sYXRpbGUgbG9uZyBnc3JfYml0czsKIHN0YXRpYyBzdHJ1Y3QgY2xrICphYzk3X2NsazsKIHN0YXRpYyBzdHJ1Y3QgY2xrICphYzk3Y29uZl9jbGs7CitzdGF0aWMgaW50IHJlc2V0X2dwaW87CiAKIC8qCiAgKiBCZXdhcmUgUFhBMjd4IGJ1Z3M6CkBAIC00Miw2ICs0Miw0NSBAQAogICogMSBqaWZmeSB0aW1lb3V0IGlmIGludGVycnVwdCBuZXZlciBjb21lcykuCiAgKi8KIAorZW51bSB7CisJUkVTRVRHUElPX0ZPUkNFX0hJR0gsCisJUkVTRVRHUElPX0ZPUkNFX0xPVywKKwlSRVNFVEdQSU9fTk9STUFMX0FMVEZVTkMKK307CisKKy8qKgorICogc2V0X3Jlc2V0Z3Bpb19tb2RlIC0gY29tcHV0ZXMgYW5kIHNldHMgdGhlIEFDOTdfUkVTRVQgZ3BpbyBtb2RlIG9uIFBYQQorICogQG1vZGU6IGNob3NlbiBhY3Rpb24KKyAqCisgKiBBcyB0aGUgUFhBMjd4IENQVXMgc3VmZmVyIGZyb20gYSBBQzk3IGJ1ZywgYSBtYW51YWwgY29udHJvbCBvZiB0aGUgcmVzZXQgbGluZQorICogbXVzdCBiZSBkb25lIHRvIGluc3VyZSBwcm9wZXIgd29yayBvZiBBQzk3IHJlc2V0IGxpbmUuICBUaGlzIGZ1bmN0aW9uCisgKiBjb21wdXRlcyB0aGUgY29ycmVjdCBncGlvX21vZGUgZm9yIGZ1cnRoZXIgdXNlIGJ5IHJlc2V0IGZ1bmN0aW9ucywgYW5kCisgKiBhcHBsaWVkIHRoZSBjaGFuZ2UgdGhyb3VnaCBweGFfZ3Bpb19tb2RlLgorICovCitzdGF0aWMgdm9pZCBzZXRfcmVzZXRncGlvX21vZGUoaW50IHJlc2V0Z3Bpb19hY3Rpb24pCit7CisJaW50IG1vZGUgPSAwOworCisJaWYgKHJlc2V0X2dwaW8pCisJCXN3aXRjaCAocmVzZXRncGlvX2FjdGlvbikgeworCQljYXNlIFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQzoKKwkJCWlmIChyZXNldF9ncGlvID09IDExMykKKwkJCQltb2RlID0gMTEzIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfTE9XOworCQkJaWYgKHJlc2V0X2dwaW8gPT0gOTUpCisJCQkJbW9kZSA9IDk1IHwgR1BJT19BTFRfRk5fMV9PVVQ7CisJCQlicmVhazsKKwkJY2FzZSBSRVNFVEdQSU9fRk9SQ0VfTE9XOgorCQkJbW9kZSA9IHJlc2V0X2dwaW8gfCBHUElPX09VVCB8IEdQSU9fREZMVF9MT1c7CisJCQlicmVhazsKKwkJY2FzZSBSRVNFVEdQSU9fRk9SQ0VfSElHSDoKKwkJCW1vZGUgPSByZXNldF9ncGlvIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfSElHSDsKKwkJCWJyZWFrOworCQl9OworCisJaWYgKG1vZGUpCisJCXB4YV9ncGlvX21vZGUobW9kZSk7Cit9CisKIHVuc2lnbmVkIHNob3J0IHB4YTJ4eF9hYzk3X3JlYWQoc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcpCiB7CiAJdW5zaWduZWQgc2hvcnQgdmFsID0gLTE7CkBAIC0xMzcsMTAgKzE3NiwxMCBAQAogCiAJLyogd2FybSByZXNldCBicm9rZW4gb24gQnVsdmVyZGUsCiAJICAgc28gbWFudWFsbHkga2VlcCBBQzk3IHJlc2V0IGhpZ2ggKi8KLQlweGFfZ3Bpb19tb2RlKDExMyB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0hJR0gpOworCXNldF9yZXNldGdwaW9fbW9kZShSRVNFVEdQSU9fRk9SQ0VfSElHSCk7CiAJdWRlbGF5KDEwKTsKIAlHQ1IgfD0gR0NSX1dBUk1fUlNUOwotCXB4YV9ncGlvX21vZGUoMTEzIHwgR1BJT19BTFRfRk5fMl9PVVQpOworCXNldF9yZXNldGdwaW9fbW9kZShSRVNFVEdQSU9fTk9STUFMX0FMVEZVTkMpOwogCXVkZWxheSg1MDApOwogfQogCkBAIC0zMDgsOCArMzQ3LDggQEAKIAkJcHhhX2dwaW9fbW9kZShHUElPMjlfU0RBVEFfSU5fQUM5N19NRCk7CiAJfQogCWlmIChjcHVfaXNfcHhhMjd4KCkpIHsKLQkJLyogVXNlIEdQSU8gMTEzIGFzIEFDOTcgUmVzZXQgb24gQnVsdmVyZGUgKi8KLQkJcHhhX2dwaW9fbW9kZSgxMTMgfCBHUElPX0FMVF9GTl8yX09VVCk7CisJCS8qIFVzZSBHUElPIDExMyBvciA5NSBhcyBBQzk3IFJlc2V0IG9uIEJ1bHZlcmRlICovCisJCXNldF9yZXNldGdwaW9fbW9kZShSRVNFVEdQSU9fTk9STUFMX0FMVEZVTkMpOwogCX0KIAljbGtfZW5hYmxlKGFjOTdfY2xrKTsKIAlyZXR1cm4gMDsKQEAgLTMyMCw2ICszNTksMjcgQEAKIGludCBfX2RldmluaXQgcHhhMnh4X2FjOTdfaHdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CisJc3RydWN0IHB4YTJ4eF9hYzk3X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChwZGF0YSkgeworCQlzd2l0Y2ggKHBkYXRhLT5yZXNldF9ncGlvKSB7CisJCWNhc2UgOTU6CisJCWNhc2UgMTEzOgorCQkJcmVzZXRfZ3BpbyA9IHBkYXRhLT5yZXNldF9ncGlvOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCXJlc2V0X2dwaW8gPSAxMTM7CisJCQlicmVhazsKKwkJY2FzZSAtMToKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2VycigmZGV2LT5kZXYsICJJbnZhbGlkIHJlc2V0IEdQSU8gJWRcbiIsCisJCQkJcGRhdGEtPnJlc2V0X2dwaW8pOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNwdV9pc19weGEyN3goKSkKKwkJCXJlc2V0X2dwaW8gPSAxMTM7CisJfQogCiAJaWYgKGNwdV9pc19weGEyNXgoKSB8fCBjcHVfaXNfcHhhMjd4KCkpIHsKIAkJcHhhX2dwaW9fbW9kZShHUElPMzFfU1lOQ19BQzk3X01EKTsKQEAgLTMzMCw3ICszOTAsNyBAQAogCiAJaWYgKGNwdV9pc19weGEyN3goKSkgewogCQkvKiBVc2UgR1BJTyAxMTMgYXMgQUM5NyBSZXNldCBvbiBCdWx2ZXJkZSAqLwotCQlweGFfZ3Bpb19tb2RlKDExMyB8IEdQSU9fQUxUX0ZOXzJfT1VUKTsKKwkJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQyk7CiAJCWFjOTdjb25mX2NsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiQUM5N0NPTkZDTEsiKTsKIAkJaWYgKElTX0VSUihhYzk3Y29uZl9jbGspKSB7CiAJCQlyZXQgPSBQVFJfRVJSKGFjOTdjb25mX2Nsayk7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LWFjOTcuYyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCmluZGV4IDg1Y2Y1OTEuLmM1NzBlYmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCisrKyBiL3NvdW5kL2FybS9weGEyeHgtYWM5Ny5jCkBAIC0yMCw4ICsyMCw2IEBACiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3B4YTJ4eC1saWIuaD4KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+CiAjaW5jbHVkZSA8bWFjaC9yZWdzLWFjOTcuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKQEAgLTE3MywxMCArMTcxLDkgQEAKIAlzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgYWM5N190ZW1wbGF0ZTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gLUVOT01FTTsKLQljYXJkID0gc25kX2NhcmRfbmV3KFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAotCQkJICAgIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCisJcmV0ID0gc25kX2NhcmRfY3JlYXRlKFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJICAgICAgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7CiAKIAljYXJkLT5kZXYgPSAmZGV2LT5kZXY7CmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vcHhhMnh4LXBjbS1saWIuYyBiL3NvdW5kL2FybS9weGEyeHgtcGNtLWxpYi5jCmluZGV4IDc1YTBkNzQuLjEwOGI2NDMyIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vcHhhMnh4LXBjbS1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LXBjbS1saWIuYwpAQCAtMTIsOCArMTIsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9weGEyeHgtbGliLmg+CiAKLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAKICNpbmNsdWRlICJweGEyeHgtcGNtLmgiCiAKZGlmZiAtLWdpdCBhL3NvdW5kL2FybS9zYTExeHgtdWRhMTM0MS5jIGIvc291bmQvYXJtL3NhMTF4eC11ZGExMzQxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkY2Q1MWQuLjAwMDAwMDAKLS0tIGEvc291bmQvYXJtL3NhMTF4eC11ZGExMzQxLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5ODMgKzAsMCBAQAotLyoKLSAqICBEcml2ZXIgZm9yIFBoaWxpcHMgVURBMTM0MVRTIG9uIENvbXBhcSBpUEFRIEgzNjAwIHNvdW5kY2FyZAotICogIENvcHlyaWdodCAoQykgMjAwMiBUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PgotICoKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAqIAotICogSGlzdG9yeToKLSAqCi0gKiAyMDAyLTAzLTEzICAgVG9tYXMgS2FzcGFyZWsgIGluaXRpYWwgcmVsZWFzZSAtIGJhc2VkIG9uIGgzNjAwLXVkYTEzNDEuYyBmcm9tIE9TUwotICogMjAwMi0wMy0yMCAgIFRvbWFzIEthc3BhcmVrICBwbGF5YmFjayBvdmVyIEFMU0EgaXMgd29ya2luZwotICogMjAwMi0wMy0yOCAgIFRvbWFzIEthc3BhcmVrICBwbGF5YmFjayBvdmVyIE9TUyBlbXVsYXRpb24gaXMgd29ya2luZwotICogMjAwMi0wMy0yOSAgIFRvbWFzIEthc3BhcmVrICBiYXNpYyBjYXB0dXJlIGlzIHdvcmtpbmcgKG5hdGl2ZSBBTFNBKQotICogMjAwMi0wMy0yOSAgIFRvbWFzIEthc3BhcmVrICBjYXB0dXJlIGlzIHdvcmtpbmcgKE9TUyBlbXVsYXRpb24pCi0gKiAyMDAyLTA0LTA0ICAgVG9tYXMgS2FzcGFyZWsgIGJldHRlciByYXRlcyBoYW5kbGluZyAoYWxsb3cgbm9uLXN0YW5kYXJkIHJhdGVzKQotICogMjAwMy0wMi0xNCAgIEJyaWFuIEF2ZXJ5ICAgICBmaXhlZCBmdWxsIGR1cGxleCBtb2RlLCBvdGhlciB1cGRhdGVzCi0gKiAyMDAzLTAyLTIwICAgVG9tYXMgS2FzcGFyZWsgIG1lcmdlZCB1cGRhdGVzIGJ5IEJyaWFuIChleGNlcHQgSEFMKQotICogMjAwMy0wNC0xOSAgIEphcm9zbGF2IEt5c2VsYSByZWNvZGVkIERNQSBzdHVmZiB0byBmb2xsb3cgMi40LjE4cm1rMy1oaDI0IGtlcm5lbAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nIHN1c3BlbmQgYW5kIHJlc3VtZQotICogMjAwMy0wNC0yOCAgIFRvbWFzIEthc3BhcmVrICB1cGRhdGVkIHdvcmsgYnkgSmFyb3NsYXYgdG8gY29tcGlsZSBpdCB1bmRlciAyLjUueCBhZ2FpbgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWQgSEFMIGxheWVyIChwYXRjaGVzIGZyb20gQnJpYW4pCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiBUbyB1bmRlcnN0YW5kIHdoYXQgQWxzYSBEcml2ZXJzIHNob3VsZCBiZSBkb2luZyBsb29rIGF0ICJXcml0aW5nIGFuIEFsc2EgRHJpdmVyIiBieSBUYWthc2hpIEl3YWkKLSogYXZhaWxhYmxlIGluIHRoZSBBbHNhIGRvYyBzZWN0aW9uIG9uIHRoZSB3ZWJzaXRlCQkKLSogCi0qIEEgZmV3IG5vdGVzIHRvIG1ha2UgdGhpbmdzIGNsZWFyZXIuIFRoZSBVREExMzQxIGlzIGhvb2tlZCB1cCB0byBTZXJpYWwgcG9ydCA0IG9uIHRoZSBTQTExMDAuCi0qIFdlIGFyZSB1c2luZyAgU1NQIG1vZGUgdG8gdGFsayB0byB0aGUgVURBMTM0MS4gVGhlIFVEQTEzNDEgYml0ICYgd29yZHNlbGVjdCBjbG9ja3MgYXJlIGdlbmVyYXRlZAotKiBieSB0aGlzIFVBUlQuIFVuZm9ydHVuYXRlbHksIHRoZSBjbG9jayBvbmx5IHJ1bnMgaWYgdGhlIHRyYW5zbWl0IGJ1ZmZlciBoYXMgc29tZXRoaW5nIGluIGl0LgotKiBTbywgaWYgd2UgYXJlIGp1c3QgcmVjb3JkaW5nLCB3ZSBmZWVkIHRoZSB0cmFuc21pdCBETUEgc3RyZWFtIGEgYnVuY2ggb2YgMHgwMDAwIHNvIHRoYXQgdGhlCi0qIHRyYW5zbWl0IGJ1ZmZlciBpcyBmdWxsIGFuZCB0aGUgY2xvY2sga2VlcHMgZ29pbmcuIFRoZSB6ZXJvZXMgY29tZSBmcm9tIEZMVVNIX0JBU0VfUEhZUyB3aGljaAotKiBpcyBhIG1lbSBsb2MgdGhhdCBhbHdheXMgZGVjb2RlcyB0byAwJ3Mgdy8gbm8gb2ZmIGNoaXAgYWNjZXNzLgotKgotKiBTb21lIGFsc2EgdGVybWlub2xvZ3k6Ci0qCWZyYW1lID0+IG51bV9jaGFubmVscyAqIHNhbXBsZV9zaXplICBlLmcgc3RlcmVvIDE2IGJpdCBpcyAyICogMTYgPSAzMiBieXRlcwotKglwZXJpb2QgPT4gdGhlIGxlYXN0IG51bWJlciBvZiBieXRlcyB0aGF0IHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGUuZy4gd2UgaGF2ZSBhIDEwMjQgYnl0ZQotKiAgICAgICAgICAgICBidWZmZXIgYW5kIDQgcGVyaW9kcyBpbiB0aGUgcnVudGltZSBzdHJ1Y3R1cmUgdGhpcyBtZWFucyB3ZSdsbCBnZXQgYW4gaW50IGV2ZXJ5IDI1NgotKiAgICAgICAgICAgICBieXRlcyBvciA0IHRpbWVzIHBlciBidWZmZXIuCi0qICAgICAgICAgICAgIEEgbnVtYmVyIG9mIHRoZSBzaXplcyBhcmUgaW4gZnJhbWVzIHJhdGhlciB0aGFuIGJ5dGVzLCB1c2UgZnJhbWVzX3RvX2J5dGVzIGFuZAotKiAgICAgICAgICAgICBieXRlc190b19mcmFtZXMgdG8gY29udmVydC4gIFRoZSBlYXNpZXN0IHdheSB0byB0ZWxsIHRoZSB1bml0cyBpcyB0byBsb29rIGF0IHRoZQotKiAgICAgICAgICAgICB0eXBlIGkuZS4gcnVudGltZS0+IGJ1ZmZlcl9zaXplIGlzIGluIGZyYW1lcyBhbmQgaXRzIHR5cGUgaXMgc25kX3BjbV91ZnJhbWVzX3QKLSogICAgICAgICAgICAgCi0qCU5vdGVzIGFib3V0IHRoZSBwb2ludGVyIGZ4bjoKLSoJVGhlIHBvaW50ZXIgZnhuIG5lZWRzIHRvIHJldHVybiB0aGUgb2Zmc2V0IGludG8gdGhlIGRtYSBidWZmZXIgaW4gZnJhbWVzLgotKglJbnRlcnJ1cHRzIG11c3QgYmUgYmxvY2tlZCBiZWZvcmUgY2FsbGluZyB0aGUgZG1hX2dldF9wb3MgZnhuIHRvIGF2b2lkIHJhY2Ugd2l0aCBpbnRlcnJ1cHRzLgotKgotKglOb3RlcyBhYm91dCBwYXVzZS9yZXN1bWUKLSoJSW1wbGVtZW50aW5nIHRoaXMgd291bGQgYmUgY29tcGxpY2F0ZWQgc28gaXQncyBza2lwcGVkLiAgVGhlIHByb2JsZW0gY2FzZSBpczoKLSoJQSBmdWxsIGR1cGxleCBjb25uZWN0aW9uIGlzIGdvaW5nLCB0aGVuIHBsYXkgaXMgcGF1c2VkLiBBdCB0aGlzIHBvaW50IHlvdSBuZWVkIHRvIHN0YXJ0IHhtaXR0aW5nCi0qCTAncyB0byBrZWVwIHRoZSByZWNvcmQgYWN0aXZlIHdoaWNoIG1lYW5zIHlvdSBjYW50IGp1c3QgZnJlZXplIHRoZSBkbWEgYW5kIHJlc3VtZSBpdCBsYXRlciB5b3UnZAotKgluZWVkIHRvCXNhdmUgb2ZmIHRoZSBkbWEgaW5mbywgYW5kIHJlc3RvcmUgaXQgcHJvcGVybHkgb24gYSByZXN1bWUuICBZZWFjaCEKLSoKLSoJTm90ZXMgYWJvdXQgdHJhbnNmZXIgbWV0aG9kczoKLSoJVGhlIGFzeW5jIHdyaXRlIGNhbGxzIGZhaWwuICBJIHByb2JhYmx5IG5lZWQgdG8gaW1wbGVtZW50IHNvbWV0aGluZyBlbHNlIHRvIHN1cHBvcnQgdGhlbT8KLSogCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KLSNpZmRlZiBDT05GSUdfUE0KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9oMzYwMC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS5oPgotCi0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLQotI2luY2x1ZGUgPGxpbnV4L2wzL2wzLmg+Ci0KLSN1bmRlZiBERUJVR19NT0RFCi0jdW5kZWYgREVCVUdfRlVOQ1RJT05fTkFNRVMKLSNpbmNsdWRlIDxzb3VuZC91ZGExMzQxLmg+Ci0KLS8qCi0gKiBGSVhNRTogSXMgdGhpcyBlbm91Z2ggYXMgYXV0b2RldGVjdGlvbiBvZiAyLjQuWC1ybWtZLWhoWiBrZXJuZWxzPwotICogV2UgdXNlIERNQSBzdHVmZiBmcm9tIDIuNC4xOC1ybWszLWhoMjQgaGVyZSB0byBiZSBhYmxlIHRvIGNvbXBpbGUgdGhpcwotICogbW9kdWxlIGZvciBGYW1pbGlhciAwLjYuMQotICovCi0KLS8qIHt7eyBUeXBlIGRlZmluaXRpb25zICovCi0KLU1PRFVMRV9BVVRIT1IoIlRvbWFzIEthc3BhcmVrIDx0b21hcy5rYXNwYXJla0BzZXpuYW0uY3o+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlNBMTEwMC9TQTExMTEgKyBVREExMzQxVFMgZHJpdmVyIGZvciBBTFNBIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tVREExMzQxLGlQQVEgSDM2MDAgVURBMTM0MVRTfX0iKTsKLQotc3RhdGljIGNoYXIgKmlkOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCi0KLW1vZHVsZV9wYXJhbShpZCwgY2hhcnAsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhpZCwgIklEIHN0cmluZyBmb3IgU0ExMTAwL1NBMTExMSArIFVEQTEzNDFUUyBzb3VuZGNhcmQuIik7Ci0KLXN0cnVjdCBhdWRpb19zdHJlYW0gewotCWNoYXIgKmlkOwkJLyogaWRlbnRpZmljYXRpb24gc3RyaW5nICovCi0JaW50IHN0cmVhbV9pZDsJCS8qIG51bWVyaWMgaWRlbnRpZmljYXRpb24gKi8JCi0JZG1hX2RldmljZV90IGRtYV9kZXY7CS8qIGRldmljZSBpZGVudGlmaWVyIGZvciBETUEgKi8KLSNpZmRlZiBISF9WRVJTSU9OCi0JZG1hY2hfdCBkbWFjaDsJCS8qIGRtYSBjaGFubmVsIGlkZW50aWZpY2F0aW9uICovCi0jZWxzZQotCWRtYV9yZWdzX3QgKmRtYV9yZWdzOwkvKiBwb2ludHMgdG8gb3VyIERNQSByZWdpc3RlcnMgKi8KLSNlbmRpZgotCXVuc2lnbmVkIGludCBhY3RpdmU6MTsJLyogd2UgYXJlIHVzaW5nIHRoaXMgc3RyZWFtIGZvciB0cmFuc2ZlciBub3cgKi8KLQlpbnQgcGVyaW9kOwkJLyogY3VycmVudCB0cmFuc2ZlciBwZXJpb2QgKi8KLQlpbnQgcGVyaW9kczsJCS8qIGN1cnJlbnQgY291bnQgb2YgcGVyaW9kcyByZWdpc3RlcmQgaW4gdGhlIERNQSBlbmdpbmUgKi8KLQlpbnQgdHhfc3BpbjsJCS8qIGFyZSB3ZSByZWNvZGluZyAtIGZsYWcgdXNlZCB0byBkbyBETUEgdHJhbnMuIGZvciBzeW5jICovCi0JdW5zaWduZWQgaW50IG9sZF9vZmZzZXQ7Ci0Jc3BpbmxvY2tfdCBkbWFfbG9jazsJLyogZm9yIGxvY2tpbmcgaW4gRE1BIG9wZXJhdGlvbnMgKHNlZSBkbWEtc2ExMTAwLmMgaW4gdGhlIGtlcm5lbCkgKi8KLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN0cmVhbTsKLX07Ci0KLXN0cnVjdCBzYTExeHhfdWRhMTM0MSB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBsM19jbGllbnQgKnVkYTEzNDE7Ci0Jc3RydWN0IHNuZF9wY20gKnBjbTsKLQlsb25nIHNhbXBsZXJhdGU7Ci0Jc3RydWN0IGF1ZGlvX3N0cmVhbSBzWzJdOwkvKiBwbGF5YmFjayAmIGNhcHR1cmUgKi8KLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNbXSA9IHsKLQk4MDAwLCAgMTA2NjYsIDEwOTg1LCAxNDY0NywKLQkxNjAwMCwgMjE5NzAsIDIyMDUwLCAyNDAwMCwKLQkyOTQwMCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgaHdfY29uc3RyYWludHNfcmF0ZXMgPSB7Ci0JLmNvdW50CT0gQVJSQVlfU0laRShyYXRlcyksCi0JLmxpc3QJPSByYXRlcywKLQkubWFzawk9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlOwotCi0vKiB9fX0gKi8KLQotLyoge3t7IENsb2NrIGFuZCBzYW1wbGUgcmF0ZSBzdHVmZiAqLwotCi0vKgotICogU3RvcC1nYXAgc29sdXRpb24gdW50aWwgcmVzdCBvZiBoaC5vcmcgSEFMIHN0dWZmIGlzIG1lcmdlZC4KLSAqLwotI2RlZmluZSBHUElPX0gzNjAwX0NMS19TRVQwCQlHUElPX0dQSU8gKDEyKQotI2RlZmluZSBHUElPX0gzNjAwX0NMS19TRVQxCQlHUElPX0dQSU8gKDEzKQotCi0jaWZkZWYgQ09ORklHX1NBMTEwMF9IM1hYWAotI2RlZmluZQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oeCkJY2xyX2gzNjAwX2VncGlvKHgpCi0jZGVmaW5lIHNldF9zYTExeHhfdWRhMTM0MV9lZ3Bpbyh4KQlzZXRfaDM2MDBfZWdwaW8oeCkKLSNlbHNlCi0jZXJyb3IgVGhpcyBkcml2ZXIgY291bGQgc2VydmUgSDN4MDAgaGFuZGhlbGRzIG9ubHkhCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgc2ExMXh4X3VkYTEzNDFfc2V0X2F1ZGlvX2Nsb2NrKGxvbmcgdmFsKQotewotCXN3aXRjaCAodmFsKSB7Ci0JY2FzZSAyNDAwMDogY2FzZSAzMjAwMDogY2FzZSA0ODAwMDoJLyogMDA6IDEyLjI4OCBNSHogKi8KLQkJR1BDUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDAgfCBHUElPX0gzNjAwX0NMS19TRVQxOwotCQlicmVhazsKLQotCWNhc2UgMjIwNTA6IGNhc2UgMjk0MDA6IGNhc2UgNDQxMDA6CS8qIDAxOiAxMS4yODk2IE1IeiAqLwotCQlHUFNSID0gR1BJT19IMzYwMF9DTEtfU0VUMDsKLQkJR1BDUiA9IEdQSU9fSDM2MDBfQ0xLX1NFVDE7Ci0JCWJyZWFrOwotCi0JY2FzZSA4MDAwOiBjYXNlIDEwNjY2OiBjYXNlIDE2MDAwOgkvKiAxMDogNC4wOTYgTUh6ICovCi0JCUdQQ1IgPSBHUElPX0gzNjAwX0NMS19TRVQwOwotCQlHUFNSID0gR1BJT19IMzYwMF9DTEtfU0VUMTsKLQkJYnJlYWs7Ci0KLQljYXNlIDEwOTg1OiBjYXNlIDE0NjQ3OiBjYXNlIDIxOTcwOgkvKiAxMTogNS42MjQ1IE1IeiAqLwotCQlHUFNSID0gR1BJT19IMzYwMF9DTEtfU0VUMCB8IEdQSU9fSDM2MDBfQ0xLX1NFVDE7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgc2ExMXh4X3VkYTEzNDFfc2V0X3NhbXBsZXJhdGUoc3RydWN0IHNhMTF4eF91ZGExMzQxICpzYTExeHhfdWRhMTM0MSwgbG9uZyByYXRlKQotewotCWludCBjbGtfZGl2ID0gMDsKLQlpbnQgY2xrPTA7Ci0KLQkvKiBXZSBkb24ndCB3YW50IHRvIG1lc3Mgd2l0aCBjbG9ja3Mgd2hlbiBmcmFtZXMgYXJlIGluIGZsaWdodCAqLwotCVNlcjRTU0NSMCAmPSB+U1NDUjBfU1NFOwotCS8qIHdhaXQgZm9yIGFueSBmcmFtZSB0byBjb21wbGV0ZSAqLwotCXVkZWxheSgxMjUpOwotCi0JLyoKLQkgKiBXZSBoYXZlIHRoZSBmb2xsb3dpbmcgY2xvY2sgc291cmNlczoKLQkgKiA0LjA5NiBNSHosIDUuNjI0NSBNSHosIDExLjI4OTYgTUh6LCAxMi4yODggTUh6Ci0JICogVGhvc2UgY2FuIGJlIGRpdmlkZWQgZWl0aGVyIGJ5IDI1NiwgMzg0IG9yIDUxMi4KLQkgKiBUaGlzIG1ha2VzIHVwIDEyIGNvbWJpbmF0aW9ucyBmb3IgdGhlIGZvbGxvd2luZyBzYW1wbGVyYXRlcy4uLgotCSAqLwotCWlmIChyYXRlID49IDQ4MDAwKQotCQlyYXRlID0gNDgwMDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSA0NDEwMCkKLQkJcmF0ZSA9IDQ0MTAwOwotCWVsc2UgaWYgKHJhdGUgPj0gMzIwMDApCi0JCXJhdGUgPSAzMjAwMDsKLQllbHNlIGlmIChyYXRlID49IDI5NDAwKQotCQlyYXRlID0gMjk0MDA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAyNDAwMCkKLQkJcmF0ZSA9IDI0MDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gMjIwNTApCi0JCXJhdGUgPSAyMjA1MDsKLQllbHNlIGlmIChyYXRlID49IDIxOTcwKQotCQlyYXRlID0gMjE5NzA7Ci0JZWxzZSBpZiAocmF0ZSA+PSAxNjAwMCkKLQkJcmF0ZSA9IDE2MDAwOwotCWVsc2UgaWYgKHJhdGUgPj0gMTQ2NDcpCi0JCXJhdGUgPSAxNDY0NzsKLQllbHNlIGlmIChyYXRlID49IDEwOTg1KQotCQlyYXRlID0gMTA5ODU7Ci0JZWxzZSBpZiAocmF0ZSA+PSAxMDY2NikKLQkJcmF0ZSA9IDEwNjY2OwotCWVsc2UKLQkJcmF0ZSA9IDgwMDA7Ci0KLQkvKiBTZXQgdGhlIGV4dGVybmFsIGNsb2NrIGdlbmVyYXRvciAqLwotCQotCXNhMTF4eF91ZGExMzQxX3NldF9hdWRpb19jbG9jayhyYXRlKTsKLQotCS8qIFNlbGVjdCB0aGUgY2xvY2sgZGl2aXNvciAqLwotCXN3aXRjaCAocmF0ZSkgewotCWNhc2UgODAwMDoKLQljYXNlIDEwOTg1OgotCWNhc2UgMjIwNTA6Ci0JY2FzZSAyNDAwMDoKLQkJY2xrID0gRjUxMjsKLQkJY2xrX2RpdiA9IFNTQ1IwX1NlckNsa0RpdigxNik7Ci0JCWJyZWFrOwotCWNhc2UgMTYwMDA6Ci0JY2FzZSAyMTk3MDoKLQljYXNlIDQ0MTAwOgotCWNhc2UgNDgwMDA6Ci0JCWNsayA9IEYyNTY7Ci0JCWNsa19kaXYgPSBTU0NSMF9TZXJDbGtEaXYoOCk7Ci0JCWJyZWFrOwotCWNhc2UgMTA2NjY6Ci0JY2FzZSAxNDY0NzoKLQljYXNlIDI5NDAwOgotCWNhc2UgMzIwMDA6Ci0JCWNsayA9IEYzODQ7Ci0JCWNsa19kaXYgPSBTU0NSMF9TZXJDbGtEaXYoMTIpOwotCQlicmVhazsKLQl9Ci0KLQkvKiBGTVQgc2V0dGluZyBzaG91bGQgYmUgbW92ZWQgYXdheSB3aGVuIG90aGVyIEZNVHMgYXJlIGFkZGVkIChGSVhNRSkgKi8KLQlsM19jb21tYW5kKHNhMTF4eF91ZGExMzQxLT51ZGExMzQxLCBDTURfRk9STUFULCAodm9pZCAqKUxTQjE2KTsKLQkKLQlsM19jb21tYW5kKHNhMTF4eF91ZGExMzQxLT51ZGExMzQxLCBDTURfRlMsICh2b2lkICopY2xrKTsgICAgICAgIAotCVNlcjRTU0NSMCA9IChTZXI0U1NDUjAgJiB+MHhmZjAwKSArIGNsa19kaXYgKyBTU0NSMF9TU0U7Ci0Jc2ExMXh4X3VkYTEzNDEtPnNhbXBsZXJhdGUgPSByYXRlOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IEhXIGluaXQgYW5kIHNodXRkb3duICovCi0KLXN0YXRpYyB2b2lkIHNhMTF4eF91ZGExMzQxX2F1ZGlvX2luaXQoc3RydWN0IHNhMTF4eF91ZGExMzQxICpzYTExeHhfdWRhMTM0MSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogU2V0dXAgRE1BIHN0dWZmICovCi0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uaWQgPSAiVURBMTM0MSBvdXQiOwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLnN0cmVhbV9pZCA9IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s7Ci0Jc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uZG1hX2RldiA9IERNQV9TZXI0U1NQV3I7Ci0KLQlzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmlkID0gIlVEQTEzNDEgaW4iOwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3RyZWFtX2lkID0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFOwotCXNhMTF4eF91ZGExMzQxLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uZG1hX2RldiA9IERNQV9TZXI0U1NQUmQ7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBVREExMzQxIGludGVybmFsIHN0YXRlICovCi0gICAgICAgCi0JLyogU2V0dXAgdGhlIHVhcnRzICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCUdBRlIgfD0gKEdQSU9fU1NQX0NMSyk7Ci0JR1BEUiAmPSB+KEdQSU9fU1NQX0NMSyk7Ci0JU2VyNFNTQ1IwID0gMDsKLQlTZXI0U1NDUjAgPSBTU0NSMF9EYXRhU2l6ZSgxNikgKyBTU0NSMF9USSArIFNTQ1IwX1NlckNsa0Rpdig4KTsKLQlTZXI0U1NDUjEgPSBTU0NSMV9TQ2xrSWFjdEwgKyBTU0NSMV9TQ2xrMVAgKyBTU0NSMV9FeHRDbGs7Ci0JU2VyNFNTQ1IwIHw9IFNTQ1IwX1NTRTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkvKiBFbmFibGUgdGhlIGF1ZGlvIHBvd2VyICovCi0KLQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19DT0RFQ19OUkVTRVQpOwotCXNldF9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX0FVRElPX09OKTsKLQlzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19RTVVURSk7Ci0gCi0JLyogV2FpdCBmb3IgdGhlIFVEQTEzNDEgdG8gd2FrZSB1cCAqLwotCW1kZWxheSgxKTsgLy9GSVhNRSAtIHdhcyByZW1vdmVkIGJ5IFBlcmV4IC0gV2h5PwotCi0JLyogSW5pdGlhbGl6ZSB0aGUgVURBMTM0MSBpbnRlcm5hbCBzdGF0ZSAqLwotCWwzX29wZW4oc2ExMXh4X3VkYTEzNDEtPnVkYTEzNDEpOwotCQotCS8qIGV4dGVybmFsIGNsb2NrIGNvbmZpZ3VyYXRpb24gKGFmdGVyIGwzX29wZW4gLSByZWdzIG11c3QgYmUgaW5pdGlhbGl6ZWQgKi8KLQlzYTExeHhfdWRhMTM0MV9zZXRfc2FtcGxlcmF0ZShzYTExeHhfdWRhMTM0MSwgc2ExMXh4X3VkYTEzNDEtPnNhbXBsZXJhdGUpOwotCi0JLyogV2FpdCBmb3IgdGhlIFVEQTEzNDEgdG8gd2FrZSB1cCAqLwotCXNldF9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX0NPREVDX05SRVNFVCk7Ci0JbWRlbGF5KDEpOwkKLQotCS8qIG1ha2UgdGhlIGxlZnQgYW5kIHJpZ2h0IGNoYW5uZWxzIHVuc3dhcHBlZCAoZmxpcCB0aGUgV1MgbGF0Y2gpICovCi0JU2VyNFNTRFIgPSAwOwotCi0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fUU1VVEUpOwotfQotCi1zdGF0aWMgdm9pZCBzYTExeHhfdWRhMTM0MV9hdWRpb19zaHV0ZG93bihzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKnNhMTF4eF91ZGExMzQxKQotewotCS8qIG11dGUgb24gKi8KLQlzZXRfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19RTVVURSk7Ci0JCi0JLyogZGlzYWJsZSB0aGUgYXVkaW8gcG93ZXIgYW5kIGFsbCBzaWduYWxzIGxlYWRpbmcgdG8gdGhlIGF1ZGlvIGNoaXAgKi8KLQlsM19jbG9zZShzYTExeHhfdWRhMTM0MS0+dWRhMTM0MSk7Ci0JU2VyNFNTQ1IwID0gMDsKLQljbHJfc2ExMXh4X3VkYTEzNDFfZWdwaW8oSVBBUV9FR1BJT19DT0RFQ19OUkVTRVQpOwotCi0JLyogcG93ZXIgb2ZmIGFuZCBtdXRlIG9mZiAqLwotCS8qIEZJWE1FIC0gaXMgbXV0aW5nIG9mZiBuZWNlc2FyeT8/PyAqLwotCi0JY2xyX3NhMTF4eF91ZGExMzQxX2VncGlvKElQQVFfRUdQSU9fQVVESU9fT04pOwotCWNscl9zYTExeHhfdWRhMTM0MV9lZ3BpbyhJUEFRX0VHUElPX1FNVVRFKTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBETUEgc3RhZmYgKi8KLQotLyoKLSAqIHRoZXNlIGFyZSB0aGUgYWRkcmVzcyBhbmQgc2l6ZXMgdXNlZCB0byBmaWxsIHRoZSB4bWl0IGJ1ZmZlcgotICogc28gd2UgY2FuIGdldCBhIGNsb2NrIGluIHJlY29yZCBvbmx5IG1vZGUKLSAqLwotI2RlZmluZSBGT1JDRV9DTE9DS19BRERSCQkoZG1hX2FkZHJfdClGTFVTSF9CQVNFX1BIWVMKLSNkZWZpbmUgRk9SQ0VfQ0xPQ0tfU0laRQkJNDA5NiAvLyB3YXMgMjA0OAotCi0vLyBGSVhNRSBXaHkgdGhpcyB2YWx1ZSBleGFjdGx5IC0gd3JvdGUgY29tbWVudAotI2RlZmluZSBETUFfQlVGX1NJWkUJODE3NgkvKiA8PSBNQVhfRE1BX1NJWkUgZnJvbSBhc20vYXJjaC1zYTExMDAvZG1hLmggKi8KLQotI2lmZGVmIEhIX1ZFUlNJT04KLQotc3RhdGljIGludCBhdWRpb19kbWFfcmVxdWVzdChzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzLCB2b2lkICgqY2FsbGJhY2spKHZvaWQgKiwgaW50KSkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc2ExMTAwX3JlcXVlc3RfZG1hKCZzLT5kbWFjaCwgcy0+aWQsIHMtPmRtYV9kZXYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGdyYWIgYXVkaW8gZG1hIDB4JXhcbiIsIHMtPmRtYV9kZXYpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlzYTExMDBfZG1hX3NldF9jYWxsYmFjayhzLT5kbWFjaCwgY2FsbGJhY2spOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXVkaW9fZG1hX2ZyZWUoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQlzYTExMDBfZnJlZV9kbWEocy0+ZG1hY2gpOwotCXMtPmRtYWNoID0gLTE7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbnQgYXVkaW9fZG1hX3JlcXVlc3Qoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcywgdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBzYTExMDBfcmVxdWVzdF9kbWEocy0+ZG1hX2Rldiwgcy0+aWQsIGNhbGxiYWNrLCBzLCAmcy0+ZG1hX3JlZ3MpOwotCWlmIChyZXQgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBncmFiIGF1ZGlvIGRtYSAweCV4XG4iLCBzLT5kbWFfZGV2KTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBhdWRpb19kbWFfZnJlZShzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzKQotewotCXNhMTEwMF9mcmVlX2RtYShzLT5kbWFfcmVncyk7Ci0Jcy0+ZG1hX3JlZ3MgPSAwOwotfQotCi0jZW5kaWYKLQotc3RhdGljIHVfaW50IGF1ZGlvX2dldF9kbWFfcG9zKHN0cnVjdCBhdWRpb19zdHJlYW0gKnMpCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBzLT5zdHJlYW07Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JZG1hX2FkZHJfdCBhZGRyOwotCQotCS8vIHRoaXMgbXVzdCBiZSBjYWxsZWQgdy8gaW50ZXJydXB0cyBsb2NrZWQgb3V0IHNlZSBkbWEtc2ExMTAwLmMgaW4gdGhlIGtlcm5lbAotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5kbWFfbG9jaywgZmxhZ3MpOwotI2lmZGVmIEhIX1ZFUlNJT04JCi0Jc2ExMTAwX2RtYV9nZXRfY3VycmVudChzLT5kbWFjaCwgTlVMTCwgJmFkZHIpOwotI2Vsc2UKLQlhZGRyID0gc2ExMTAwX2dldF9kbWFfcG9zKChzKS0+ZG1hX3JlZ3MpOwotI2VuZGlmCi0Jb2Zmc2V0ID0gYWRkciAtIHJ1bnRpbWUtPmRtYV9hZGRyOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmRtYV9sb2NrLCBmbGFncyk7Ci0JCi0Jb2Zmc2V0ID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsb2Zmc2V0KTsKLQlpZiAob2Zmc2V0ID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQotCQlvZmZzZXQgPSAwOwotCi0JcmV0dXJuIG9mZnNldDsKLX0KLQotLyoKLSAqIHRoaXMgc3RvcHMgdGhlIGRtYSBhbmQgY2xlYXJzIHRoZSBkbWEgcHRycwotICovCi1zdGF0aWMgdm9pZCBhdWRpb19zdG9wX2RtYShzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+ZG1hX2xvY2ssIGZsYWdzKTsJCi0Jcy0+YWN0aXZlID0gMDsKLQlzLT5wZXJpb2QgPSAwOwotCS8qIHRoaXMgc3RvcHMgdGhlIGRtYSBjaGFubmVsIGFuZCBjbGVhcnMgdGhlIGJ1ZmZlciBwdHJzICovCi0jaWZkZWYgSEhfVkVSU0lPTgotCXNhMTEwMF9kbWFfZmx1c2hfYWxsKHMtPmRtYWNoKTsKLSNlbHNlCi0Jc2ExMTAwX2NsZWFyX2RtYShzLT5kbWFfcmVncyk7CQotI2VuZGlmCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+ZG1hX2xvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgYXVkaW9fcHJvY2Vzc19kbWEoc3RydWN0IGF1ZGlvX3N0cmVhbSAqcykKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHMtPnN0cmVhbTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXVuc2lnbmVkIGludCBkbWFfc2l6ZTsJCQotCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0JaW50IHJldDsKLSAgICAgICAgICAgICAgICAKLQkvKiB3ZSBhcmUgcmVxdWVzdGVkIHRvIHByb2Nlc3Mgc3luY2hyb25pemF0aW9uIERNQSB0cmFuc2ZlciAqLwotCWlmIChzLT50eF9zcGluKSB7Ci0JCWlmIChzbmRfQlVHX09OKHMtPnN0cmVhbV9pZCAhPSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSkKLQkJCXJldHVybjsKLQkJLyogZmlsbCB0aGUgeG1pdCBkbWEgYnVmZmVycyBhbmQgcmV0dXJuICovCi0jaWZkZWYgSEhfVkVSU0lPTgotCQlzYTExMDBfZG1hX3NldF9zcGluKHMtPmRtYWNoLCBGT1JDRV9DTE9DS19BRERSLCBGT1JDRV9DTE9DS19TSVpFKTsKLSNlbHNlCi0JCXdoaWxlICgxKSB7Ci0JCQlyZXQgPSBzYTExMDBfc3RhcnRfZG1hKHMtPmRtYV9yZWdzLCBGT1JDRV9DTE9DS19BRERSLCBGT1JDRV9DTE9DS19TSVpFKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuOyAgIAotCQl9Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQotCS8qIG11c3QgYmUgc2V0IGhlcmUgLSBvbmx5IHZhbGlkIGZvciBydW5uaW5nIHN0cmVhbXMsIG5vdCBmb3IgZm9yY2VkX2Nsb2NrIGRtYSBmaWxscyAgKi8KLQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXdoaWxlIChzLT5hY3RpdmUgJiYgcy0+cGVyaW9kcyA8IHJ1bnRpbWUtPnBlcmlvZHMpIHsKLQkJZG1hX3NpemUgPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOwotCQlpZiAocy0+b2xkX29mZnNldCkgewotCQkJLyogYSBsaXR0bGUgdHJpY2ssIHdlIG5lZWQgcmVzdW1lIGZyb20gb2xkIHBvc2l0aW9uICovCi0JCQlvZmZzZXQgPSBmcmFtZXNfdG9fYnl0ZXMocnVudGltZSwgcy0+b2xkX29mZnNldCAtIDEpOwotCQkJcy0+b2xkX29mZnNldCA9IDA7Ci0JCQlzLT5wZXJpb2RzID0gMDsKLQkJCXMtPnBlcmlvZCA9IG9mZnNldCAvIGRtYV9zaXplOwotCQkJb2Zmc2V0ICU9IGRtYV9zaXplOwotCQkJZG1hX3NpemUgPSBkbWFfc2l6ZSAtIG9mZnNldDsKLQkJCWlmICghZG1hX3NpemUpCi0JCQkJY29udGludWU7CQkvKiBzcGVjaWFsIGNhc2UgKi8KLQkJfSBlbHNlIHsKLQkJCW9mZnNldCA9IGRtYV9zaXplICogcy0+cGVyaW9kOwotCQkJc25kX0JVR19PTihkbWFfc2l6ZSA+IERNQV9CVUZfU0laRSk7Ci0JCX0KLSNpZmRlZiBISF9WRVJTSU9OCi0JCXJldCA9IHNhMTEwMF9kbWFfcXVldWVfYnVmZmVyKHMtPmRtYWNoLCBzLCBydW50aW1lLT5kbWFfYWRkciArIG9mZnNldCwgZG1hX3NpemUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuOyAvL0ZJWE1FCi0jZWxzZQotCQlyZXQgPSBzYTExMDBfc3RhcnRfZG1hKChzKS0+ZG1hX3JlZ3MsIHJ1bnRpbWUtPmRtYV9hZGRyICsgb2Zmc2V0LCBkbWFfc2l6ZSk7Ci0JCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiYXVkaW9fcHJvY2Vzc19kbWE6IGNhbm5vdCBxdWV1ZSBETUEgYnVmZmVyICglaSlcbiIsIHJldCk7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRpZgotCi0JCXMtPnBlcmlvZCsrOwotCQlzLT5wZXJpb2QgJT0gcnVudGltZS0+cGVyaW9kczsKLQkJcy0+cGVyaW9kcysrOwotCX0KLX0KLQotI2lmZGVmIEhIX1ZFUlNJT04KLXN0YXRpYyB2b2lkIGF1ZGlvX2RtYV9jYWxsYmFjayh2b2lkICpkYXRhLCBpbnQgc2l6ZSkKLSNlbHNlCi1zdGF0aWMgdm9pZCBhdWRpb19kbWFfY2FsbGJhY2sodm9pZCAqZGF0YSkKLSNlbmRpZgotewotCXN0cnVjdCBhdWRpb19zdHJlYW0gKnMgPSBkYXRhOwotICAgICAgICAKLQkvKiAKLQkgKiBJZiB3ZSBhcmUgZ2V0dGluZyBhIGNhbGxiYWNrIGZvciBhbiBhY3RpdmUgc3RyZWFtIHRoZW4gd2UgaW5mb3JtCi0JICogdGhlIFBDTSBtaWRkbGUgbGF5ZXIgd2UndmUgZmluaXNoZWQgYSBwZXJpb2QKLQkgKi8KLSAJaWYgKHMtPmFjdGl2ZSkKLQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzLT5zdHJlYW0pOwotCi0Jc3Bpbl9sb2NrKCZzLT5kbWFfbG9jayk7Ci0JaWYgKCFzLT50eF9zcGluICYmIHMtPnBlcmlvZHMgPiAwKQotCQlzLT5wZXJpb2RzLS07Ci0JYXVkaW9fcHJvY2Vzc19kbWEocyk7Ci0Jc3Bpbl91bmxvY2soJnMtPmRtYV9sb2NrKTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBQQ00gc2V0dGluZyAqLwotCi0vKiB7e3sgdHJpZ2dlciAmIHRpbWVyICovCi0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCWludCBzdHJlYW1faWQgPSBzdWJzdHJlYW0tPnBzdHItPnN0cmVhbTsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzID0gJmNoaXAtPnNbc3RyZWFtX2lkXTsKLQlzdHJ1Y3QgYXVkaW9fc3RyZWFtICpzMSA9ICZjaGlwLT5zW3N0cmVhbV9pZCBeIDFdOwotCWludCBlcnIgPSAwOwotCi0JLyogbm90ZSBsb2NhbCBpbnRlcnJ1cHRzIGFyZSBhbHJlYWR5IGRpc2FibGVkIGluIHRoZSBtaWRsZXZlbCBjb2RlICovCi0Jc3Bpbl9sb2NrKCZzLT5kbWFfbG9jayk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCQkvKiBub3cgd2UgbmVlZCB0byBtYWtlIHN1cmUgYSByZWNvcmQgb25seSBzdHJlYW0gaGFzIGEgY2xvY2sgKi8KLQkJaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUgJiYgIXMxLT5hY3RpdmUpIHsKLQkJCS8qIHdlIG5lZWQgdG8gZm9yY2UgZmlsbCB0aGUgeG1pdCBETUEgd2l0aCB6ZXJvcyAqLwotCQkJczEtPnR4X3NwaW4gPSAxOwotCQkJYXVkaW9fcHJvY2Vzc19kbWEoczEpOwotCQl9Ci0JCS8qIHRoaXMgY2FzZSBpcyB3aGVuIHlvdSB3ZXJlIHJlY29yZGluZyB0aGVuIHlvdSB0dXJuIG9uIGEKLQkJICogcGxheWJhY2sgc3RyZWFtIHNvIHdlIHN0b3AgKGFsc28gY2xlYXJzIGl0KSB0aGUgZG1hIGZpcnN0LAotCQkgKiBjbGVhciB0aGUgc3luYyBmbGFnIGFuZCB0aGVuIHdlIGxldCBpdCB0dXJuZWQgb24KLQkJICovCQkKLQkJZWxzZSB7Ci0gCQkJcy0+dHhfc3BpbiA9IDA7Ci0gCQl9Ci0KLQkJLyogcmVxdWVzdGVkIHN0cmVhbSBzdGFydHVwICovCi0JCXMtPmFjdGl2ZSA9IDE7Ci0JCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JCS8qIHJlcXVlc3RlZCBzdHJlYW0gc2h1dGRvd24gKi8KLQkJYXVkaW9fc3RvcF9kbWEocyk7Ci0JCQotCQkvKgotCQkgKiBub3cgd2UgbmVlZCB0byBtYWtlIHN1cmUgYSByZWNvcmQgb25seSBzdHJlYW0gaGFzIGEgY2xvY2sKLQkJICogc28gaWYgd2UncmUgc3RvcHBpbmcgYSBwbGF5YmFjayB3aXRoIGFuIGFjdGl2ZSBjYXB0dXJlCi0JCSAqIHdlIG5lZWQgdG8gdHVybiB0aGUgMCBmaWxsIGRtYSBvbiBmb3IgdGhlIHhtaXQgc2lkZQotCQkgKi8KLQkJaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLICYmIHMxLT5hY3RpdmUpIHsKLQkJCS8qIHdlIG5lZWQgdG8gZm9yY2UgZmlsbCB0aGUgeG1pdCBETUEgd2l0aCB6ZXJvcyAqLwotCQkJcy0+dHhfc3BpbiA9IDE7Ci0JCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJfQotCQkvKgotCQkgKiB3ZSBraWxsZWQgYSBjYXB0dXJlIG9ubHkgc3RyZWFtLCBzbyB3ZSBzaG91bGQgYWxzbyBraWxsCi0JCSAqIHRoZSB6ZXJvIGZpbGwgdHJhbnNtaXQKLQkJICovCi0JCWVsc2UgewotCQkJaWYgKHMxLT50eF9zcGluKSB7Ci0JCQkJczEtPnR4X3NwaW4gPSAwOwotCQkJCWF1ZGlvX3N0b3BfZG1hKHMxKTsKLQkJCX0KLQkJfQotCQkKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotCQlzLT5hY3RpdmUgPSAwOwotI2lmZGVmIEhIX1ZFUlNJT04JCQotCQlzYTExMDBfZG1hX3N0b3Aocy0+ZG1hY2gpOwotI2Vsc2UKLQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgkJCi0JCXMtPm9sZF9vZmZzZXQgPSBhdWRpb19nZXRfZG1hX3BvcyhzKSArIDE7Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCi0JCXNhMTEwMF9kbWFfZmx1c2hfYWxsKHMtPmRtYWNoKTsKLSNlbHNlCi0JCS8vRklYTUUgLSBETUEgQVBJCi0jZW5kaWYJCQotCQlzLT5wZXJpb2RzID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JCXMtPmFjdGl2ZSA9IDE7Ci0JCXMtPnR4X3NwaW4gPSAwOwotCQlhdWRpb19wcm9jZXNzX2RtYShzKTsKLQkJaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUgJiYgIXMxLT5hY3RpdmUpIHsKLQkJCXMxLT50eF9zcGluID0gMTsKLQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMxKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6Ci0jaWZkZWYgSEhfVkVSU0lPTgkJCi0JCXNhMTEwMF9kbWFfc3RvcChzLT5kbWFjaCk7Ci0jZWxzZQotCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCi0JCXMtPmFjdGl2ZSA9IDA7Ci0JCWlmIChzdHJlYW1faWQgPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewotCQkJaWYgKHMxLT5hY3RpdmUpIHsKLQkJCQlzLT50eF9zcGluID0gMTsKLQkJCQlzLT5vbGRfb2Zmc2V0ID0gYXVkaW9fZ2V0X2RtYV9wb3MocykgKyAxOwotI2lmZGVmIEhIX1ZFUlNJT04JCQkJCi0JCQkJc2ExMTAwX2RtYV9mbHVzaF9hbGwocy0+ZG1hY2gpOwotI2Vsc2UKLQkJCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCQkJCQotCQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKHMxLT50eF9zcGluKSB7Ci0JCQkJczEtPnR4X3NwaW4gPSAwOwotI2lmZGVmIEhIX1ZFUlNJT04JCQkJCi0JCQkJc2ExMTAwX2RtYV9mbHVzaF9hbGwoczEtPmRtYWNoKTsKLSNlbHNlCi0JCQkJLy9GSVhNRSAtIERNQSBBUEkKLSNlbmRpZgkJCQkKLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6Ci0JCXMtPmFjdGl2ZSA9IDE7Ci0JCWlmIChzLT5vbGRfb2Zmc2V0KSB7Ci0JCQlzLT50eF9zcGluID0gMDsKLQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUgJiYgIXMxLT5hY3RpdmUpIHsKLQkJCXMxLT50eF9zcGluID0gMTsKLQkJCWF1ZGlvX3Byb2Nlc3NfZG1hKHMxKTsKLQkJfQotI2lmZGVmIEhIX1ZFUlNJT04JCQotCQlzYTExMDBfZG1hX3Jlc3VtZShzLT5kbWFjaCk7Ci0jZWxzZQotCQkvL0ZJWE1FIC0gRE1BIEFQSQotI2VuZGlmCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQlzcGluX3VubG9jaygmcy0+ZG1hX2xvY2spOwkKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV9wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXN0cnVjdCBhdWRpb19zdHJlYW0gKnMgPSAmY2hpcC0+c1tzdWJzdHJlYW0tPnBzdHItPnN0cmVhbV07Ci0gICAgICAgIAotCS8qIHNldCByZXF1ZXN0ZWQgc2FtcGxlcmF0ZSAqLwotCXNhMTF4eF91ZGExMzQxX3NldF9zYW1wbGVyYXRlKGNoaXAsIHJ1bnRpbWUtPnJhdGUpOwotCi0JLyogc2V0IHJlcXVlc3RkIGZvcm1hdCB3aGVuIGF2YWlsYWJsZSAqLwotCS8qIHNldCBGTVQgaGVyZSAhISEgRklYTUUgKi8KLQotCXMtPnBlcmlvZCA9IDA7Ci0Jcy0+cGVyaW9kcyA9IDA7Ci0gICAgICAgIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc25kX3BjbV91ZnJhbWVzX3Qgc25kX3NhMTF4eF91ZGExMzQxX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXJldHVybiBhdWRpb19nZXRfZG1hX3BvcygmY2hpcC0+c1tzdWJzdHJlYW0tPnBzdHItPnN0cmVhbV0pOwotfQotCi0vKiB9fX0gKi8KLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9zYTExeHhfdWRhMTM0MV9jYXB0dXJlID0KLXsKLQkuaW5mbwkJCT0gKFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fTU1BUCB8IFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwgU05EUlZfUENNX0lORk9fUkVTVU1FKSwKLQkuZm9ybWF0cwkJPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLQkucmF0ZXMJCQk9IChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTYwMDAgfFwKLQkJCQkgICBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzMyMDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfNDQxMDAgfCBTTkRSVl9QQ01fUkFURV80ODAwMCB8XAotCQkJCSAgIFNORFJWX1BDTV9SQVRFX0tOT1QpLAotCS5yYXRlX21pbgkJPSA4MDAwLAotCS5yYXRlX21heAkJPSA0ODAwMCwKLQkuY2hhbm5lbHNfbWluCQk9IDIsCi0JLmNoYW5uZWxzX21heAkJPSAyLAotCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQqMTAyNCwKLQkucGVyaW9kX2J5dGVzX21pbgk9IDY0LAotCS5wZXJpb2RfYnl0ZXNfbWF4CT0gRE1BX0JVRl9TSVpFLAotCS5wZXJpb2RzX21pbgkJPSAyLAotCS5wZXJpb2RzX21heAkJPSAyNTUsCi0JLmZpZm9fc2l6ZQkJPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9zYTExeHhfdWRhMTM0MV9wbGF5YmFjayA9Ci17Ci0JLmluZm8JCQk9IChTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8Ci0JCQkJICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotCQkJCSAgIFNORFJWX1BDTV9JTkZPX01NQVAgfCBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKLQkJCQkgICBTTkRSVl9QQ01fSU5GT19QQVVTRSB8IFNORFJWX1BDTV9JTkZPX1JFU1VNRSksCi0JLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCi0JLnJhdGVzCQkJPSAoU05EUlZfUENNX1JBVEVfODAwMCB8IFNORFJWX1BDTV9SQVRFXzE2MDAwIHxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9SQVRFXzIyMDUwIHwgU05EUlZfUENNX1JBVEVfMzIwMDAgfFwKLQkJCQkgICBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFNORFJWX1BDTV9SQVRFXzQ4MDAwIHxcCi0JCQkJICAgU05EUlZfUENNX1JBVEVfS05PVCksCi0JLnJhdGVfbWluCQk9IDgwMDAsCi0JLnJhdGVfbWF4CQk9IDQ4MDAwLAotCS5jaGFubmVsc19taW4JCT0gMiwKLQkuY2hhbm5lbHNfbWF4CQk9IDIsCi0JLmJ1ZmZlcl9ieXRlc19tYXgJPSA2NCoxMDI0LAotCS5wZXJpb2RfYnl0ZXNfbWluCT0gNjQsCi0JLnBlcmlvZF9ieXRlc19tYXgJPSBETUFfQlVGX1NJWkUsCi0JLnBlcmlvZHNfbWluCQk9IDIsCi0JLnBlcmlvZHNfbWF4CQk9IDI1NSwKLQkuZmlmb19zaXplCQk9IDAsCi19OwotCi1zdGF0aWMgaW50IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JaW50IHN0cmVhbV9pZCA9IHN1YnN0cmVhbS0+cHN0ci0+c3RyZWFtOwotCWludCBlcnI7Ci0KLQljaGlwLT5zW3N0cmVhbV9pZF0uc3RyZWFtID0gc3Vic3RyZWFtOwotCi0JaWYgKHN0cmVhbV9pZCA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQotCQlydW50aW1lLT5odyA9IHNuZF9zYTExeHhfdWRhMTM0MV9wbGF5YmFjazsKLQllbHNlCi0JCXJ1bnRpbWUtPmh3ID0gc25kX3NhMTF4eF91ZGExMzQxX2NhcHR1cmU7Ci0JaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUykpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlpZiAoKGVyciA9IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0KHJ1bnRpbWUsIDAsIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLCAmaHdfY29uc3RyYWludHNfcmF0ZXMpKSA8IDApCi0JCXJldHVybiBlcnI7Ci0gICAgICAgIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQotCWNoaXAtPnNbc3Vic3RyZWFtLT5wc3RyLT5zdHJlYW1dLnN0cmVhbSA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIHt7eyBIVyBwYXJhbXMgJiBmcmVlICovCi0KLXN0YXRpYyBpbnQgc25kX3NhMTF4eF91ZGExMzQxX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCi17Ci0gICAgICAgIAotCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLCBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwotfQotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Ci19Ci0KLS8qIH19fSAqLwotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX3BsYXliYWNrX29wcyA9IHsKLQkub3BlbgkJCT0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfb3BlbiwKLQkuY2xvc2UJCQk9IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX2Nsb3NlLAotCS5pb2N0bAkJCT0gc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcwkgICAgICAgID0gc25kX3NhMTF4eF91ZGExMzQxX2h3X3BhcmFtcywKLQkuaHdfZnJlZQkgICAgICAgID0gc25kX3NhMTF4eF91ZGExMzQxX2h3X2ZyZWUsCi0JLnByZXBhcmUJCT0gc25kX3NhMTF4eF91ZGExMzQxX3ByZXBhcmUsCi0JLnRyaWdnZXIJCT0gc25kX3NhMTF4eF91ZGExMzQxX3RyaWdnZXIsCi0JLnBvaW50ZXIJCT0gc25kX3NhMTF4eF91ZGExMzQxX3BvaW50ZXIsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX2NhcHR1cmVfb3BzID0gewotCS5vcGVuCQkJPSBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9vcGVuLAotCS5jbG9zZQkJCT0gc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfY2xvc2UsCi0JLmlvY3RsCQkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKLQkuaHdfcGFyYW1zCSAgICAgICAgPSBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfcGFyYW1zLAotCS5od19mcmVlCSAgICAgICAgPSBzbmRfc2ExMXh4X3VkYTEzNDFfaHdfZnJlZSwKLQkucHJlcGFyZQkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfcHJlcGFyZSwKLQkudHJpZ2dlcgkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfdHJpZ2dlciwKLQkucG9pbnRlcgkJPSBzbmRfc2ExMXh4X3VkYTEzNDFfcG9pbnRlciwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNuZF9jYXJkX3NhMTF4eF91ZGExMzQxX3BjbShzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKnNhMTF4eF91ZGExMzQxLCBpbnQgZGV2aWNlKQotewotCXN0cnVjdCBzbmRfcGNtICpwY207Ci0JaW50IGVycjsKLQotCWlmICgoZXJyID0gc25kX3BjbV9uZXcoc2ExMXh4X3VkYTEzNDEtPmNhcmQsICJVREExMzQxIFBDTSIsIGRldmljZSwgMSwgMSwgJnBjbSkpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCS8qCi0JICogdGhpcyBzZXRzIHVwIG91ciBpbml0aWFsIGJ1ZmZlcnMgYW5kIHNldHMgdGhlIGRtYV90eXBlIHRvIGlzYS4KLQkgKiBpc2Egd29ya3MgYnV0IEknbSBub3Qgc3VyZSB3aHkgKG9yIGlmKSBpdCdzIHRoZSByaWdodCBjaG9pY2UKLQkgKiB0aGlzIG1heSBiZSB0b28gbGFyZ2UsIHRyeWluZyBpdCBmb3Igbm93Ci0JICovCi0Jc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwgCi0JCQkJCSAgICAgIHNuZF9kbWFfaXNhX2RhdGEoKSwKLQkJCQkJICAgICAgNjQqMTAyNCwgNjQqMTAyNCk7Ci0KLQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLCAmc25kX2NhcmRfc2ExMXh4X3VkYTEzNDFfcGxheWJhY2tfb3BzKTsKLQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9jYXB0dXJlX29wcyk7Ci0JcGNtLT5wcml2YXRlX2RhdGEgPSBzYTExeHhfdWRhMTM0MTsKLQlwY20tPmluZm9fZmxhZ3MgPSAwOwotCXN0cmNweShwY20tPm5hbWUsICJVREExMzQxIFBDTSIpOwotCi0Jc2ExMXh4X3VkYTEzNDFfYXVkaW9faW5pdChzYTExeHhfdWRhMTM0MSk7Ci0KLQkvKiBzZXR1cCBETUEgY29udHJvbGxlciAqLwotCWF1ZGlvX2RtYV9yZXF1ZXN0KCZzYTExeHhfdWRhMTM0MS0+c1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXSwgYXVkaW9fZG1hX2NhbGxiYWNrKTsKLQlhdWRpb19kbWFfcmVxdWVzdCgmc2ExMXh4X3VkYTEzNDEtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSwgYXVkaW9fZG1hX2NhbGxiYWNrKTsKLQotCXNhMTF4eF91ZGExMzQxLT5wY20gPSBwY207Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBtb2R1bGUgaW5pdCAmIGV4aXQgKi8KLQotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgaW50IHNuZF9zYTExeHhfdWRhMTM0MV9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0ciwKLQkJCQkgICAgICBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKTsKLQlzdHJ1Y3Qgc2ExMXh4X3VkYTEzNDEgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7Ci0KLQlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7Ci0Jc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOwotI2lmZGVmIEhIX1ZFUlNJT04KLQlzYTExMDBfZG1hX3NsZWVwKGNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uZG1hY2gpOwotCXNhMTEwMF9kbWFfc2xlZXAoY2hpcC0+c1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLmRtYWNoKTsKLSNlbHNlCi0JLy9GSVhNRQotI2VuZGlmCi0JbDNfY29tbWFuZChjaGlwLT51ZGExMzQxLCBDTURfU1VTUEVORCwgTlVMTCk7Ci0Jc2ExMXh4X3VkYTEzNDFfYXVkaW9fc2h1dGRvd24oY2hpcCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfc2ExMXh4X3VkYTEzNDFfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldnB0cikKLXsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXZwdHIpOwotCXN0cnVjdCBzYTExeHhfdWRhMTM0MSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQotCXNhMTF4eF91ZGExMzQxX2F1ZGlvX2luaXQoY2hpcCk7Ci0JbDNfY29tbWFuZChjaGlwLT51ZGExMzQxLCBDTURfUkVTVU1FLCBOVUxMKTsKLSNpZmRlZiBISF9WRVJTSU9OCQotCXNhMTEwMF9kbWFfd2FrZXVwKGNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uZG1hY2gpOwotCXNhMTEwMF9kbWFfd2FrZXVwKGNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5kbWFjaCk7Ci0jZWxzZQotCS8vRklYTUUKLSNlbmRpZgotCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUoY2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZiAvKiBDT01GSUdfUE0gKi8KLQotdm9pZCBzbmRfc2ExMXh4X3VkYTEzNDFfZnJlZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCi17Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCi0JYXVkaW9fZG1hX2ZyZWUoJmNoaXAtPnNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10pOwotCWF1ZGlvX2RtYV9mcmVlKCZjaGlwLT5zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0pOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzYTExeHhfdWRhMTM0MV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZwdHIpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IHNhMTF4eF91ZGExMzQxICpjaGlwOwotCi0JLyogcmVnaXN0ZXIgdGhlIHNvdW5kY2FyZCAqLwotCWNhcmQgPSBzbmRfY2FyZF9uZXcoLTEsIGlkLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBzYTExeHhfdWRhMTM0MSkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKLQlzcGluX2xvY2tfaW5pdCgmY2hpcC0+c1swXS5kbWFfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnNbMV0uZG1hX2xvY2spOwotCi0JY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3NhMTF4eF91ZGExMzQxX2ZyZWU7Ci0JY2hpcC0+Y2FyZCA9IGNhcmQ7Ci0JY2hpcC0+c2FtcGxlcmF0ZSA9IEFVRElPX1JBVEVfREVGQVVMVDsKLQotCS8vIG1peGVyCi0JaWYgKChlcnIgPSBzbmRfY2hpcF91ZGExMzQxX21peGVyX25ldyhjYXJkLCAmY2hpcC0+dWRhMTM0MSkpKQotCQlnb3RvIG5vZGV2OwotCi0JLy8gUENNCi0JaWYgKChlcnIgPSBzbmRfY2FyZF9zYTExeHhfdWRhMTM0MV9wY20oY2hpcCwgMCkpIDwgMCkKLQkJZ290byBub2RldjsKLSAgICAgICAgCi0Jc3RyY3B5KGNhcmQtPmRyaXZlciwgIlVEQTEzNDEiKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiSDM2MDAgVURBMTM0MVRTIik7Ci0Jc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIkNvbXBhcSBpUEFRIEgzNjAwIHdpdGggUGhpbGlwcyBVREExMzQxVFMiKTsKLSAgICAgICAgCi0Jc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2cHRyLT5kZXYpOwotCi0JaWYgKChlcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKSkgPT0gMCkgewotCQlwcmludGsoIEtFUk5fSU5GTyAiaVBBUSBhdWRpbyBzdXBwb3J0IGluaXRpYWxpemVkXG4iICk7Ci0JCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldnB0ciwgY2FyZCk7Ci0JCXJldHVybiAwOwotCX0KLSAgICAgICAgCi0gbm9kZXY6Ci0Jc25kX2NhcmRfZnJlZShjYXJkKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9fZGV2ZXhpdCBzYTExeHhfdWRhMTM0MV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2cHRyKQotewotCXNuZF9jYXJkX2ZyZWUocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2cHRyKSk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2cHRyLCBOVUxMKTsKLQlyZXR1cm4gMDsKLX0KLQotI2RlZmluZSBTQTExWFhfVURBMTM0MV9EUklWRVIJInNhMTF4eF91ZGExMzQxIgotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzYTExeHhfdWRhMTM0MV9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHNhMTF4eF91ZGExMzQxX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2ExMXh4X3VkYTEzNDFfcmVtb3ZlKSwKLSNpZmRlZiBDT05GSUdfUE0KLQkuc3VzcGVuZAk9IHNuZF9zYTExeHhfdWRhMTM0MV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc25kX3NhMTF4eF91ZGExMzQxX3Jlc3VtZSwKLSNlbmRpZgotCS5kcml2ZXIJCT0gewotCQkubmFtZQk9IFNBMTFYWF9VREExMzQxX0RSSVZFUiwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc2ExMXh4X3VkYTEzNDFfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0KLQlpZiAoIW1hY2hpbmVfaXNfaDN4eHgoKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKChlcnIgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNhMTF4eF91ZGExMzQxX2RyaXZlcikpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlkZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKFNBMTFYWF9VREExMzQxX0RSSVZFUiwgLTEsIE5VTEwsIDApOwotCWlmICghSVNfRVJSKGRldmljZSkpIHsKLQkJaWYgKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldmljZSkpCi0JCQlyZXR1cm4gMDsKLQkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKLQkJZXJyID0gLUVOT0RFVjsKLQl9IGVsc2UKLQkJZXJyID0gUFRSX0VSUihkZXZpY2UpOwotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzYTExeHhfdWRhMTM0MV9kcml2ZXIpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzYTExeHhfdWRhMTM0MV9leGl0KHZvaWQpCi17Ci0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc2ExMXh4X3VkYTEzNDFfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoc2ExMXh4X3VkYTEzNDFfaW5pdCk7Ci1tb2R1bGVfZXhpdChzYTExeHhfdWRhMTM0MV9leGl0KTsKLQotLyogfX19ICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBpbmRlbnQtdGFicy1tb2RlOiB0Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL0tjb25maWcgYi9zb3VuZC9hdG1lbC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMjI4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9hdG1lbC9LY29uZmlnCkBAIC0wLDAgKzEsMTkgQEAKK21lbnUgIkF0bWVsIGRldmljZXMgKEFWUjMyIGFuZCBBVDkxKSIKKwlkZXBlbmRzIG9uIEFWUjMyIHx8IEFSQ0hfQVQ5MQorCitjb25maWcgU05EX0FUTUVMX0FCREFDCisJdHJpc3RhdGUgIkF0bWVsIEF1ZGlvIEJpdHN0cmVhbSBEQUMgKEFCREFDKSBkcml2ZXIiCisJc2VsZWN0IFNORF9QQ00KKwlkZXBlbmRzIG9uIERXX0RNQUMgJiYgQVZSMzIKKwloZWxwCisJICBBTFNBIHNvdW5kIGRyaXZlciBmb3IgdGhlIEF0bWVsIEF1ZGlvIEJpdHN0cmVhbSBEQUMgKEFCREFDKS4KKworY29uZmlnIFNORF9BVE1FTF9BQzk3QworCXRyaXN0YXRlICJBdG1lbCBBQzk3IENvbnRyb2xsZXIgKEFDOTdDKSBkcml2ZXIiCisJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgU05EX0FDOTdfQ09ERUMKKwlkZXBlbmRzIG9uIERXX0RNQUMgJiYgQVZSMzIKKwloZWxwCisJICBBTFNBIHNvdW5kIGRyaXZlciBmb3IgdGhlIEF0bWVsIEFDOTcgY29udHJvbGxlci4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvTWFrZWZpbGUgYi9zb3VuZC9hdG1lbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTlkY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvYXRtZWwvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACitzbmQtYXRtZWwtYWJkYWMtb2JqcwkJOj0gYWJkYWMubworc25kLWF0bWVsLWFjOTdjLW9ianMJCTo9IGFjOTdjLm8KKworb2JqLSQoQ09ORklHX1NORF9BVE1FTF9BQkRBQykJKz0gc25kLWF0bWVsLWFiZGFjLm8KK29iai0kKENPTkZJR19TTkRfQVRNRUxfQUM5N0MpCSs9IHNuZC1hdG1lbC1hYzk3Yy5vCmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9hYmRhYy5jIGIvc291bmQvYXRtZWwvYWJkYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGIzYzdmCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvYXRtZWwvYWJkYWMuYwpAQCAtMCwwICsxLDYwMiBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIEF0bWVsIG9uLWNoaXAgQXVkaW8gQml0c3RyZWFtIERBQyAoQUJEQUMpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgQXRtZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hdG1lbC1hYmRhYy5oPgorCisvKiBEQUMgcmVnaXN0ZXIgb2Zmc2V0cyAqLworI2RlZmluZSBEQUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIERBQ19DVFJMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKyNkZWZpbmUgREFDX0lOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwYworI2RlZmluZSBEQUNfSU5UX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIERBQ19JTlRfRElTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTQKKyNkZWZpbmUgREFDX0lOVF9DTFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxOAorI2RlZmluZSBEQUNfSU5UX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDFjCisKKy8qIEJpdGZpZWxkcyBpbiBDVFJMICovCisjZGVmaW5lIERBQ19TV0FQX09GRlNFVCAgICAgICAgICAgICAgICAgICAgICAgICAzMAorI2RlZmluZSBEQUNfU1dBUF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBEQUNfRU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgICAgICAgMzEKKyNkZWZpbmUgREFDX0VOX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKworLyogQml0ZmllbGRzIGluIElOVF9NQVNLL0lOVF9FTi9JTlRfRElTL0lOVF9TVEFUVVMvSU5UX0NMUiAqLworI2RlZmluZSBEQUNfVU5ERVJSVU5fT0ZGU0VUICAgICAgICAgICAgICAgICAgICAgMjgKKyNkZWZpbmUgREFDX1VOREVSUlVOX1NJWkUgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgREFDX1RYX1JFQURZX09GRlNFVCAgICAgICAgICAgICAgICAgICAgIDI5CisjZGVmaW5lIERBQ19UWF9SRUFEWV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAxCisKKy8qIEJpdCBtYW5pcHVsYXRpb24gbWFjcm9zICovCisjZGVmaW5lIERBQ19CSVQobmFtZSkJCQkJCVwKKwkoMSA8PCBEQUNfIyNuYW1lIyNfT0ZGU0VUKQorI2RlZmluZSBEQUNfQkYobmFtZSwgdmFsdWUpCQkJCVwKKwkoKCh2YWx1ZSkgJiAoKDEgPDwgREFDXyMjbmFtZSMjX1NJWkUpIC0gMSkpCVwKKwkgPDwgREFDXyMjbmFtZSMjX09GRlNFVCkKKyNkZWZpbmUgREFDX0JGRVhUKG5hbWUsIHZhbHVlKQkJCQlcCisJKCgodmFsdWUpID4+IERBQ18jI25hbWUjI19PRkZTRVQpCQlcCisJICYgKCgxIDw8IERBQ18jI25hbWUjI19TSVpFKSAtIDEpKQorI2RlZmluZSBEQUNfQkZJTlMobmFtZSwgdmFsdWUsIG9sZCkJCQlcCisJKCgob2xkKSAmIH4oKCgxIDw8IERBQ18jI25hbWUjI19TSVpFKSAtIDEpCVwKKwkJICAgIDw8IERBQ18jI25hbWUjI19PRkZTRVQpKQkJXAorCSB8IERBQ19CRihuYW1lLCB2YWx1ZSkpCisKKy8qIFJlZ2lzdGVyIGFjY2VzcyBtYWNyb3MgKi8KKyNkZWZpbmUgZGFjX3JlYWRsKHBvcnQsIHJlZykJCQkJXAorCV9fcmF3X3JlYWRsKChwb3J0KS0+cmVncyArIERBQ18jI3JlZykKKyNkZWZpbmUgZGFjX3dyaXRlbChwb3J0LCByZWcsIHZhbHVlKQkJCVwKKwlfX3Jhd193cml0ZWwoKHZhbHVlKSwgKHBvcnQpLT5yZWdzICsgREFDXyMjcmVnKQorCisvKgorICogQUJEQUMgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDYgZGlmZmVyZW50IHJhdGVzIGZyb20gYSBnZW5lcmljIGNsb2NrLiBUaGUKKyAqIGdlbmVyaWMgY2xvY2sgaGFzIGEgcG93ZXIgb2YgdHdvIGRpdmlkZXIsIHdoaWNoIGdpdmVzIDYgc3RlcHMgZnJvbSAxOTIga0h6CisgKiB0byA1MTEyIEh6LgorICovCisjZGVmaW5lIE1BWF9OVU1fUkFURVMJNgorLyogQUxTQSBzZWVtcyB0byB1c2UgcmF0ZXMgYmV0d2VlbiAxOTIwMDAgSHogYW5kIDUxMTIgSHouICovCisjZGVmaW5lIFJBVEVfTUFYCTE5MjAwMAorI2RlZmluZSBSQVRFX01JTgk1MTEyCisKK2VudW0geworCURNQV9SRUFEWSA9IDAsCit9OworCitzdHJ1Y3QgYXRtZWxfYWJkYWNfZG1hIHsKKwlzdHJ1Y3QgZG1hX2NoYW4JCSpjaGFuOworCXN0cnVjdCBkd19jeWNsaWNfZGVzYwkqY2Rlc2M7Cit9OworCitzdHJ1Y3QgYXRtZWxfYWJkYWMgeworCXN0cnVjdCBjbGsJCQkJKnBjbGs7CisJc3RydWN0IGNsawkJCQkqc2FtcGxlX2NsazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkJKnBkZXY7CisJc3RydWN0IGF0bWVsX2FiZGFjX2RtYQkJCWRtYTsKKworCXN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdAljb25zdHJhaW50c19yYXRlczsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0JCSpzdWJzdHJlYW07CisJc3RydWN0IHNuZF9jYXJkCQkJCSpjYXJkOworCXN0cnVjdCBzbmRfcGNtCQkJCSpwY207CisKKwl2b2lkIF9faW9tZW0JCQkJKnJlZ3M7CisJdW5zaWduZWQgbG9uZwkJCQlmbGFnczsKKwl1bnNpZ25lZCBpbnQJCQkJcmF0ZXNbTUFYX05VTV9SQVRFU107CisJdW5zaWduZWQgaW50CQkJCXJhdGVzX251bTsKKwlpbnQJCQkJCWlycTsKK307CisKKyNkZWZpbmUgZ2V0X2RhYyhjYXJkKSAoKHN0cnVjdCBhdG1lbF9hYmRhYyAqKShjYXJkKS0+cHJpdmF0ZV9kYXRhKQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgRE1BIGRyaXZlci4gKi8KK3N0YXRpYyB2b2lkIGF0bWVsX2FiZGFjX2RtYV9wZXJpb2RfZG9uZSh2b2lkICphcmcpCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBhcmc7CisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChkYWMtPnN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfcHJlcGFyZV9kbWEoc3RydWN0IGF0bWVsX2FiZGFjICpkYWMsCisJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisJc3RydWN0IGRtYV9jaGFuCQkJKmNoYW4gPSBkYWMtPmRtYS5jaGFuOworCXN0cnVjdCBkd19jeWNsaWNfZGVzYwkJKmNkZXNjOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUJCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGxvbmcJCQlidWZmZXJfbGVuLCBwZXJpb2RfbGVuOworCisJLyoKKwkgKiBXZSBkb24ndCBkbyBETUEgb24gImNvbXBsZXgiIHRyYW5zZmVycywgaS5lLiB3aXRoCisJICogbm9uLWhhbGZ3b3JkLWFsaWduZWQgYnVmZmVycyBvciBsZW5ndGhzLgorCSAqLworCWlmIChydW50aW1lLT5kbWFfYWRkciAmIDEgfHwgcnVudGltZS0+YnVmZmVyX3NpemUgJiAxKSB7CisJCWRldl9kYmcoJmRhYy0+cGRldi0+ZGV2LCAidG9vIGNvbXBsZXggdHJhbnNmZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlidWZmZXJfbGVuID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKKwlwZXJpb2RfbGVuID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKworCWNkZXNjID0gZHdfZG1hX2N5Y2xpY19wcmVwKGNoYW4sIHJ1bnRpbWUtPmRtYV9hZGRyLCBidWZmZXJfbGVuLAorCQkJcGVyaW9kX2xlbiwgRE1BX1RPX0RFVklDRSk7CisJaWYgKElTX0VSUihjZGVzYykpIHsKKwkJZGV2X2RiZygmZGFjLT5wZGV2LT5kZXYsICJjb3VsZCBub3QgcHJlcGFyZSBjeWNsaWMgRE1BXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2Rlc2MpOworCX0KKworCWNkZXNjLT5wZXJpb2RfY2FsbGJhY2sgPSBhdG1lbF9hYmRhY19kbWFfcGVyaW9kX2RvbmU7CisJY2Rlc2MtPnBlcmlvZF9jYWxsYmFja19wYXJhbSA9IGRhYzsKKworCWRhYy0+ZG1hLmNkZXNjID0gY2Rlc2M7CisKKwlzZXRfYml0KERNQV9SRUFEWSwgJmRhYy0+ZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBhdG1lbF9hYmRhY19odyA9IHsKKwkuaW5mbwkJCT0gKFNORFJWX1BDTV9JTkZPX01NQVAKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUgorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19SRVNVTUUKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fUEFVU0UpLAorCS5mb3JtYXRzCQk9IChTTkRSVl9QQ01fRk1UQklUX1MxNl9CRSksCisJLnJhdGVzCQkJPSAoU05EUlZfUENNX1JBVEVfS05PVCksCisJLnJhdGVfbWluCQk9IFJBVEVfTUlOLAorCS5yYXRlX21heAkJPSBSQVRFX01BWCwKKwkuY2hhbm5lbHNfbWluCQk9IDIsCisJLmNoYW5uZWxzX21heAkJPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQgKiA0MDk2LAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gNDA5NiwKKwkucGVyaW9kX2J5dGVzX21heAk9IDQwOTYsCisJLnBlcmlvZHNfbWluCQk9IDQsCisJLnBlcmlvZHNfbWF4CQk9IDY0LAorfTsKKworc3RhdGljIGludCBhdG1lbF9hYmRhY19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJZGFjLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJYXRtZWxfYWJkYWNfaHcucmF0ZV9tYXggPSBkYWMtPnJhdGVzW2RhYy0+cmF0ZXNfbnVtIC0gMV07CisJYXRtZWxfYWJkYWNfaHcucmF0ZV9taW4gPSBkYWMtPnJhdGVzWzBdOworCXN1YnN0cmVhbS0+cnVudGltZS0+aHcgPSBhdG1lbF9hYmRhY19odzsKKworCXJldHVybiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSwgJmRhYy0+Y29uc3RyYWludHNfcmF0ZXMpOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWRhYy0+c3Vic3RyZWFtID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJcmV0dXJuIHJldHZhbDsKKwkvKiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMgcmV0dXJucyAxIGlmIGJ1ZmZlciBpcyBjaGFuZ2VkLiAqLworCWlmIChyZXR2YWwgPT0gMSkKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfUkVBRFksICZkYWMtPmZsYWdzKSkKKwkJCWR3X2RtYV9jeWNsaWNfZnJlZShkYWMtPmRtYS5jaGFuKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWJkYWNfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9SRUFEWSwgJmRhYy0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX2ZyZWUoZGFjLT5kbWEuY2hhbik7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYyAqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBjbGtfc2V0X3JhdGUoZGFjLT5zYW1wbGVfY2xrLCAyNTYgKiBzdWJzdHJlYW0tPnJ1bnRpbWUtPnJhdGUpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpZiAoIXRlc3RfYml0KERNQV9SRUFEWSwgJmRhYy0+ZmxhZ3MpKQorCQlyZXR2YWwgPSBhdG1lbF9hYmRhY19wcmVwYXJlX2RtYShkYWMsIHN1YnN0cmVhbSwgRE1BX1RPX0RFVklDRSk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCit7CisJc3RydWN0IGF0bWVsX2FiZGFjICpkYWMgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IHJldHZhbCA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCWNsa19lbmFibGUoZGFjLT5zYW1wbGVfY2xrKTsKKwkJcmV0dmFsID0gZHdfZG1hX2N5Y2xpY19zdGFydChkYWMtPmRtYS5jaGFuKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gb3V0OworCQlkYWNfd3JpdGVsKGRhYywgQ1RSTCwgREFDX0JJVChFTikpOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlkd19kbWFfY3ljbGljX3N0b3AoZGFjLT5kbWEuY2hhbik7CisJCWRhY193cml0ZWwoZGFjLCBEQVRBLCAwKTsKKwkJZGFjX3dyaXRlbChkYWMsIENUUkwsIDApOworCQljbGtfZGlzYWJsZShkYWMtPnNhbXBsZV9jbGspOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CitvdXQ6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CithdG1lbF9hYmRhY19wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYmRhYwkqZGFjID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUJKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc25kX3BjbV91ZnJhbWVzX3QJZnJhbWVzOworCXVuc2lnbmVkIGxvbmcJCWJ5dGVzOworCisJYnl0ZXMgPSBkd19kbWFfZ2V0X3NyY19hZGRyKGRhYy0+ZG1hLmNoYW4pOworCWJ5dGVzIC09IHJ1bnRpbWUtPmRtYV9hZGRyOworCisJZnJhbWVzID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGJ5dGVzKTsKKwlpZiAoZnJhbWVzID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlmcmFtZXMgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisKKwlyZXR1cm4gZnJhbWVzOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYWJkYWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IGRldl9pZDsKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gZGFjX3JlYWRsKGRhYywgSU5UX1NUQVRVUyk7CisJaWYgKHN0YXR1cyAmIERBQ19CSVQoVU5ERVJSVU4pKSB7CisJCWRldl9lcnIoJmRhYy0+cGRldi0+ZGV2LCAidW5kZXJydW4gZGV0ZWN0ZWRcbiIpOworCQlkYWNfd3JpdGVsKGRhYywgSU5UX0NMUiwgREFDX0JJVChVTkRFUlJVTikpOworCX0gZWxzZSB7CisJCWRldl9lcnIoJmRhYy0+cGRldi0+ZGV2LCAic3B1cmlvdXMgaW50ZXJydXB0IChzdGF0dXM9MHgleClcbiIsCisJCQlzdGF0dXMpOworCQlkYWNfd3JpdGVsKGRhYywgSU5UX0NMUiwgc3RhdHVzKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXRtZWxfYWJkYWNfb3BzID0geworCS5vcGVuCQk9IGF0bWVsX2FiZGFjX29wZW4sCisJLmNsb3NlCQk9IGF0bWVsX2FiZGFjX2Nsb3NlLAorCS5pb2N0bAkJPSBzbmRfcGNtX2xpYl9pb2N0bCwKKwkuaHdfcGFyYW1zCT0gYXRtZWxfYWJkYWNfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gYXRtZWxfYWJkYWNfaHdfZnJlZSwKKwkucHJlcGFyZQk9IGF0bWVsX2FiZGFjX3ByZXBhcmUsCisJLnRyaWdnZXIJPSBhdG1lbF9hYmRhY190cmlnZ2VyLAorCS5wb2ludGVyCT0gYXRtZWxfYWJkYWNfcG9pbnRlciwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bWVsX2FiZGFjX3BjbV9uZXcoc3RydWN0IGF0bWVsX2FiZGFjICpkYWMpCit7CisJc3RydWN0IHNuZF9wY21faGFyZHdhcmUgaHcgPSBhdG1lbF9hYmRhY19odzsKKwlzdHJ1Y3Qgc25kX3BjbSAqcGNtOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBzbmRfcGNtX25ldyhkYWMtPmNhcmQsIGRhYy0+Y2FyZC0+c2hvcnRuYW1lLAorCQkJZGFjLT5wZGV2LT5pZCwgMSwgMCwgJnBjbSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXN0cmNweShwY20tPm5hbWUsIGRhYy0+Y2FyZC0+c2hvcnRuYW1lKTsKKwlwY20tPnByaXZhdGVfZGF0YSA9IGRhYzsKKwlwY20tPmluZm9fZmxhZ3MgPSAwOworCWRhYy0+cGNtID0gcGNtOworCisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJmF0bWVsX2FiZGFjX29wcyk7CisKKwlyZXR2YWwgPSBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAorCQkJJmRhYy0+cGRldi0+ZGV2LCBody5wZXJpb2RzX21pbiAqIGh3LnBlcmlvZF9ieXRlc19taW4sCisJCQlody5idWZmZXJfYnl0ZXNfbWF4KTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBib29sIGZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnNsYXZlKQoreworCXN0cnVjdCBkd19kbWFfc2xhdmUgKmR3cyA9IHNsYXZlOworCisJaWYgKGR3cy0+ZG1hX2RldiA9PSBjaGFuLT5kZXZpY2UtPmRldikgeworCQljaGFuLT5wcml2YXRlID0gZHdzOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IHNldF9zYW1wbGVfcmF0ZXMoc3RydWN0IGF0bWVsX2FiZGFjICpkYWMpCit7CisJbG9uZyBuZXdfcmF0ZSA9IFJBVEVfTUFYOworCWludCByZXR2YWwgPSAtRUlOVkFMOworCWludCBpbmRleCA9IDA7CisKKwkvKiB3ZSBzdGFydCBhdCAxOTIga0h6IGFuZCB3b3JrIG91ciB3YXkgZG93biB0byA1MTEyIEh6ICovCisJd2hpbGUgKG5ld19yYXRlID49IFJBVEVfTUlOICYmIGluZGV4IDwgKE1BWF9OVU1fUkFURVMgKyAxKSkgeworCQluZXdfcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGRhYy0+c2FtcGxlX2NsaywgMjU2ICogbmV3X3JhdGUpOworCQlpZiAobmV3X3JhdGUgPCAwKQorCQkJYnJlYWs7CisJCS8qIG1ha2Ugc3VyZSB3ZSBhcmUgYmVsb3cgdGhlIEFCREFDIGNsb2NrICovCisJCWlmIChuZXdfcmF0ZSA8PSBjbGtfZ2V0X3JhdGUoZGFjLT5wY2xrKSkgeworCQkJZGFjLT5yYXRlc1tpbmRleF0gPSBuZXdfcmF0ZSAvIDI1NjsKKwkJCWluZGV4Kys7CisJCX0KKwkJLyogZGl2aWRlIGJ5IDI1NiBhbmQgdGhlbiBieSB0d28gdG8gZ2V0IG5leHQgcmF0ZSAqLworCQluZXdfcmF0ZSAvPSAyNTYgKiAyOworCX0KKworCWlmIChpbmRleCkgeworCQlpbnQgaTsKKworCQkvKiByZXZlcnNlIGFycmF5LCBzbWFsbGVzdCBnbyBmaXJzdCAqLworCQlmb3IgKGkgPSAwOyBpIDwgKGluZGV4IC8gMik7IGkrKykgeworCQkJdW5zaWduZWQgaW50IHRtcCA9IGRhYy0+cmF0ZXNbaW5kZXggLSAxIC0gaV07CisJCQlkYWMtPnJhdGVzW2luZGV4IC0gMSAtIGldID0gZGFjLT5yYXRlc1tpXTsKKwkJCWRhYy0+cmF0ZXNbaV0gPSB0bXA7CisJCX0KKworCQlkYWMtPmNvbnN0cmFpbnRzX3JhdGVzLmNvdW50ID0gaW5kZXg7CisJCWRhYy0+Y29uc3RyYWludHNfcmF0ZXMubGlzdCA9IGRhYy0+cmF0ZXM7CisJCWRhYy0+Y29uc3RyYWludHNfcmF0ZXMubWFzayA9IDA7CisJCWRhYy0+cmF0ZXNfbnVtID0gaW5kZXg7CisKKwkJcmV0dmFsID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhdG1lbF9hYmRhY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzbmRfY2FyZAkJKmNhcmQ7CisJc3RydWN0IGF0bWVsX2FiZGFjCSpkYWM7CisJc3RydWN0IHJlc291cmNlCQkqcmVnczsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWNfcGRhdGEJKnBkYXRhOworCXN0cnVjdCBjbGsJCSpwY2xrOworCXN0cnVjdCBjbGsJCSpzYW1wbGVfY2xrOworCWludAkJCXJldHZhbDsKKwlpbnQJCQlpcnE7CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlZ3MpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibm8gbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBnZXQgSVJRIG51bWJlclxuIik7CisJCXJldHVybiBpcnE7CisJfQorCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXBjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihwY2xrKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBwZXJpcGhlcmFsIGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGNsayk7CisJfQorCXNhbXBsZV9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJzYW1wbGVfY2xrIik7CisJaWYgKElTX0VSUihwY2xrKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBzYW1wbGUgY2xvY2tcbiIpOworCQlyZXR2YWwgPSBQVFJfRVJSKHBjbGspOworCQlnb3RvIG91dF9wdXRfcGNsazsKKwl9CisJY2xrX2VuYWJsZShwY2xrKTsKKworCXJldHZhbCA9IHNuZF9jYXJkX2NyZWF0ZShTTkRSVl9ERUZBVUxUX0lEWDEsIFNORFJWX0RFRkFVTFRfU1RSMSwKKwkJCVRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IGF0bWVsX2FiZGFjKSwgJmNhcmQpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IGNyZWF0ZSBzb3VuZCBjYXJkIGRldmljZVxuIik7CisJCWdvdG8gb3V0X3B1dF9zYW1wbGVfY2xrOworCX0KKworCWRhYyA9IGdldF9kYWMoY2FyZCk7CisKKwlkYWMtPmlycSA9IGlycTsKKwlkYWMtPmNhcmQgPSBjYXJkOworCWRhYy0+cGNsayA9IHBjbGs7CisJZGFjLT5zYW1wbGVfY2xrID0gc2FtcGxlX2NsazsKKwlkYWMtPnBkZXYgPSBwZGV2OworCisJcmV0dmFsID0gc2V0X3NhbXBsZV9yYXRlcyhkYWMpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBzZXQgc3VwcG9ydGVkIHJhdGVzXG4iKTsKKwkJZ290byBvdXRfZnJlZV9jYXJkOworCX0KKworCWRhYy0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CisJaWYgKCFkYWMtPnJlZ3MpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlbWFwIHJlZ2lzdGVyIG1lbW9yeVxuIik7CisJCWdvdG8gb3V0X2ZyZWVfY2FyZDsKKwl9CisKKwkvKiBtYWtlIHN1cmUgdGhlIERBQyBpcyBzaWxlbnQgYW5kIGRpc2FibGVkICovCisJZGFjX3dyaXRlbChkYWMsIERBVEEsIDApOworCWRhY193cml0ZWwoZGFjLCBDVFJMLCAwKTsKKworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGlycSwgYWJkYWNfaW50ZXJydXB0LCAwLCAiYWJkYWMiLCBkYWMpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlcXVlc3QgaXJxXG4iKTsKKwkJZ290byBvdXRfdW5tYXBfcmVnczsKKwl9CisKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwZGV2LT5kZXYpOworCisJaWYgKHBkYXRhLT5kd3MuZG1hX2RldikgeworCQlzdHJ1Y3QgZHdfZG1hX3NsYXZlICpkd3MgPSAmcGRhdGEtPmR3czsKKwkJZG1hX2NhcF9tYXNrX3QgbWFzazsKKworCQlkd3MtPnR4X3JlZyA9IHJlZ3MtPnN0YXJ0ICsgREFDX0RBVEE7CisKKwkJZG1hX2NhcF96ZXJvKG1hc2spOworCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJCWRhYy0+ZG1hLmNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgZHdzKTsKKwl9CisJaWYgKCFwZGF0YS0+ZHdzLmRtYV9kZXYgfHwgIWRhYy0+ZG1hLmNoYW4pIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiRE1BIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIG91dF91bnNldF9jYXJkX2RldjsKKwl9CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQXRtZWwgQUJEQUMiKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQXRtZWwgQUJEQUMiKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiQXRtZWwgQXVkaW8gQml0c3RyZWFtIERBQyIpOworCisJcmV0dmFsID0gYXRtZWxfYWJkYWNfcGNtX25ldyhkYWMpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIEFCREFDIHBjbSBkZXZpY2VcbiIpOworCQlnb3RvIG91dF9yZWxlYXNlX2RtYTsKKwl9CisKKwlyZXR2YWwgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBzb3VuZCBjYXJkXG4iKTsKKwkJZ290byBvdXRfcmVsZWFzZV9kbWE7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQXRtZWwgQUJEQUMgYXQgMHglcCB1c2luZyAlc1xuIiwKKwkJCWRhYy0+cmVncywgZGFjLT5kbWEuY2hhbi0+ZGV2LT5kZXZpY2UuYnVzX2lkKTsKKworCXJldHVybiByZXR2YWw7CisKK291dF9yZWxlYXNlX2RtYToKKwlkbWFfcmVsZWFzZV9jaGFubmVsKGRhYy0+ZG1hLmNoYW4pOworCWRhYy0+ZG1hLmNoYW4gPSBOVUxMOworb3V0X3Vuc2V0X2NhcmRfZGV2OgorCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgTlVMTCk7CisJZnJlZV9pcnEoaXJxLCBkYWMpOworb3V0X3VubWFwX3JlZ3M6CisJaW91bm1hcChkYWMtPnJlZ3MpOworb3V0X2ZyZWVfY2FyZDoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworb3V0X3B1dF9zYW1wbGVfY2xrOgorCWNsa19wdXQoc2FtcGxlX2Nsayk7CisJY2xrX2Rpc2FibGUocGNsayk7CitvdXRfcHV0X3BjbGs6CisJY2xrX3B1dChwY2xrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGF0bWVsX2FiZGFjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCWR3X2RtYV9jeWNsaWNfc3RvcChkYWMtPmRtYS5jaGFuKTsKKwljbGtfZGlzYWJsZShkYWMtPnNhbXBsZV9jbGspOworCWNsa19kaXNhYmxlKGRhYy0+cGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYmRhY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKworCWNsa19lbmFibGUoZGFjLT5wY2xrKTsKKwljbGtfZW5hYmxlKGRhYy0+c2FtcGxlX2Nsayk7CisJaWYgKHRlc3RfYml0KERNQV9SRUFEWSwgJmRhYy0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0YXJ0KGRhYy0+ZG1hLmNoYW4pOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBhdG1lbF9hYmRhY19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgYXRtZWxfYWJkYWNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhdG1lbF9hYmRhY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWJkYWMgKmRhYyA9IGdldF9kYWMoY2FyZCk7CisKKwljbGtfcHV0KGRhYy0+c2FtcGxlX2Nsayk7CisJY2xrX2Rpc2FibGUoZGFjLT5wY2xrKTsKKwljbGtfcHV0KGRhYy0+cGNsayk7CisKKwlkbWFfcmVsZWFzZV9jaGFubmVsKGRhYy0+ZG1hLmNoYW4pOworCWRhYy0+ZG1hLmNoYW4gPSBOVUxMOworCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgTlVMTCk7CisJaW91bm1hcChkYWMtPnJlZ3MpOworCWZyZWVfaXJxKGRhYy0+aXJxLCBkYWMpOworCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhdG1lbF9hYmRhY19kcml2ZXIgPSB7CisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhdG1lbF9hYmRhY19yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJhdG1lbF9hYmRhYyIsCisJfSwKKwkuc3VzcGVuZAk9IGF0bWVsX2FiZGFjX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBhdG1lbF9hYmRhY19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhdG1lbF9hYmRhY19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmYXRtZWxfYWJkYWNfZHJpdmVyLAorCQkJYXRtZWxfYWJkYWNfcHJvYmUpOworfQorbW9kdWxlX2luaXQoYXRtZWxfYWJkYWNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdG1lbF9hYmRhY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmF0bWVsX2FiZGFjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChhdG1lbF9hYmRhY19leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEF0bWVsIEF1ZGlvIEJpdHN0cmVhbSBEQUMgKEFCREFDKSIpOworTU9EVUxFX0FVVEhPUigiSGFucy1DaHJpc3RpYW4gRWd0dmVkdCA8aGFucy1jaHJpc3RpYW4uZWd0dmVkdEBhdG1lbC5jb20+Iik7CmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9hYzk3Yy5jIGIvc291bmQvYXRtZWwvYWM5N2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDcyZTAwCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvYXRtZWwvYWM5N2MuYwpAQCAtMCwwICsxLDkzMiBAQAorLyoKKyAqIERyaXZlciBmb3IgdGhlIEF0bWVsIEFDOTdDIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBBdG1lbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CisjaW5jbHVkZSA8c291bmQvYXRtZWwtYWM5N2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9tZW1hbGxvYy5oPgorCisjaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgorCisjaW5jbHVkZSAiYWM5N2MuaCIKKworZW51bSB7CisJRE1BX1RYX1JFQURZID0gMCwKKwlETUFfUlhfUkVBRFksCisJRE1BX1RYX0NIQU5fUFJFU0VOVCwKKwlETUFfUlhfQ0hBTl9QUkVTRU5ULAorfTsKKworLyogU2VyaWFsaXplIGFjY2VzcyB0byBvcGVuZWQgdmFyaWFibGUgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgob3BlbmVkX211dGV4KTsKKworc3RydWN0IGF0bWVsX2FjOTdjX2RtYSB7CisJc3RydWN0IGRtYV9jaGFuCQkJKnJ4X2NoYW47CisJc3RydWN0IGRtYV9jaGFuCQkJKnR4X2NoYW47Cit9OworCitzdHJ1Y3QgYXRtZWxfYWM5N2MgeworCXN0cnVjdCBjbGsJCQkqcGNsazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKKwlzdHJ1Y3QgYXRtZWxfYWM5N2NfZG1hCQlkbWE7CisKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0JKnBsYXliYWNrX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0JKmNhcHR1cmVfc3Vic3RyZWFtOworCXN0cnVjdCBzbmRfY2FyZAkJCSpjYXJkOworCXN0cnVjdCBzbmRfcGNtCQkJKnBjbTsKKwlzdHJ1Y3Qgc25kX2FjOTcJCQkqYWM5NzsKKwlzdHJ1Y3Qgc25kX2FjOTdfYnVzCQkqYWM5N19idXM7CisKKwl1NjQJCQkJY3VyX2Zvcm1hdDsKKwl1bnNpZ25lZCBpbnQJCQljdXJfcmF0ZTsKKwl1bnNpZ25lZCBsb25nCQkJZmxhZ3M7CisJLyogU2VyaWFsaXplIGFjY2VzcyB0byBvcGVuZWQgdmFyaWFibGUgKi8KKwlzcGlubG9ja190CQkJbG9jazsKKwl2b2lkIF9faW9tZW0JCQkqcmVnczsKKwlpbnQJCQkJb3BlbmVkOworCWludAkJCQlyZXNldF9waW47Cit9OworCisjZGVmaW5lIGdldF9jaGlwKGNhcmQpICgoc3RydWN0IGF0bWVsX2FjOTdjICopKGNhcmQpLT5wcml2YXRlX2RhdGEpCisKKyNkZWZpbmUgYWM5N2Nfd3JpdGVsKGNoaXAsIHJlZywgdmFsKQkJCVwKKwlfX3Jhd193cml0ZWwoKHZhbCksIChjaGlwKS0+cmVncyArIEFDOTdDXyMjcmVnKQorI2RlZmluZSBhYzk3Y19yZWFkbChjaGlwLCByZWcpCQkJCVwKKwlfX3Jhd19yZWFkbCgoY2hpcCktPnJlZ3MgKyBBQzk3Q18jI3JlZykKKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIERNQSBkcml2ZXIuICovCitzdGF0aWMgdm9pZCBhdG1lbF9hYzk3Y19kbWFfcGxheWJhY2tfcGVyaW9kX2RvbmUodm9pZCAqYXJnKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGFyZzsKKwlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkIGF0bWVsX2FjOTdjX2RtYV9jYXB0dXJlX3BlcmlvZF9kb25lKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBhcmc7CisJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChjaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcHJlcGFyZV9kbWEoc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwLAorCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCXN0cnVjdCBkbWFfY2hhbgkJCSpjaGFuOworCXN0cnVjdCBkd19jeWNsaWNfZGVzYwkJKmNkZXNjOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUJCSpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGxvbmcJCQlidWZmZXJfbGVuLCBwZXJpb2RfbGVuOworCisJLyoKKwkgKiBXZSBkb24ndCBkbyBETUEgb24gImNvbXBsZXgiIHRyYW5zZmVycywgaS5lLiB3aXRoCisJICogbm9uLWhhbGZ3b3JkLWFsaWduZWQgYnVmZmVycyBvciBsZW5ndGhzLgorCSAqLworCWlmIChydW50aW1lLT5kbWFfYWRkciAmIDEgfHwgcnVudGltZS0+YnVmZmVyX3NpemUgJiAxKSB7CisJCWRldl9kYmcoJmNoaXAtPnBkZXYtPmRldiwgInRvbyBjb21wbGV4IHRyYW5zZmVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGRpcmVjdGlvbiA9PSBETUFfVE9fREVWSUNFKQorCQljaGFuID0gY2hpcC0+ZG1hLnR4X2NoYW47CisJZWxzZQorCQljaGFuID0gY2hpcC0+ZG1hLnJ4X2NoYW47CisKKwlidWZmZXJfbGVuID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTsKKwlwZXJpb2RfbGVuID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKworCWNkZXNjID0gZHdfZG1hX2N5Y2xpY19wcmVwKGNoYW4sIHJ1bnRpbWUtPmRtYV9hZGRyLCBidWZmZXJfbGVuLAorCQkJcGVyaW9kX2xlbiwgZGlyZWN0aW9uKTsKKwlpZiAoSVNfRVJSKGNkZXNjKSkgeworCQlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJjb3VsZCBub3QgcHJlcGFyZSBjeWNsaWMgRE1BXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2Rlc2MpOworCX0KKworCWlmIChkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgeworCQljZGVzYy0+cGVyaW9kX2NhbGxiYWNrID0gYXRtZWxfYWM5N2NfZG1hX3BsYXliYWNrX3BlcmlvZF9kb25lOworCQlzZXRfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKTsKKwl9IGVsc2UgeworCQljZGVzYy0+cGVyaW9kX2NhbGxiYWNrID0gYXRtZWxfYWM5N2NfZG1hX2NhcHR1cmVfcGVyaW9kX2RvbmU7CisJCXNldF9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpOworCX0KKworCWNkZXNjLT5wZXJpb2RfY2FsbGJhY2tfcGFyYW0gPSBjaGlwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBhdG1lbF9hYzk3Y19odyA9IHsKKwkuaW5mbwkJCT0gKFNORFJWX1BDTV9JTkZPX01NQVAKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRAorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUgorCQkJCSAgfCBTTkRSVl9QQ01fSU5GT19KT0lOVF9EVVBMRVgKKwkJCQkgIHwgU05EUlZfUENNX0lORk9fUkVTVU1FCisJCQkJICB8IFNORFJWX1BDTV9JTkZPX1BBVVNFKSwKKwkuZm9ybWF0cwkJPSAoU05EUlZfUENNX0ZNVEJJVF9TMTZfQkUKKwkJCQkgIHwgU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUpLAorCS5yYXRlcwkJCT0gKFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMpLAorCS5yYXRlX21pbgkJPSA0MDAwLAorCS5yYXRlX21heAkJPSA0ODAwMCwKKwkuY2hhbm5lbHNfbWluCQk9IDEsCisJLmNoYW5uZWxzX21heAkJPSAyLAorCS5idWZmZXJfYnl0ZXNfbWF4CT0gNjQgKiA0MDk2LAorCS5wZXJpb2RfYnl0ZXNfbWluCT0gNDA5NiwKKwkucGVyaW9kX2J5dGVzX21heAk9IDQwOTYsCisJLnBlcmlvZHNfbWluCQk9IDQsCisJLnBlcmlvZHNfbWF4CQk9IDY0LAorfTsKKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5vcGVuZWQrKzsKKwlydW50aW1lLT5odyA9IGF0bWVsX2FjOTdjX2h3OworCWlmIChjaGlwLT5jdXJfcmF0ZSkgeworCQlydW50aW1lLT5ody5yYXRlX21pbiA9IGNoaXAtPmN1cl9yYXRlOworCQlydW50aW1lLT5ody5yYXRlX21heCA9IGNoaXAtPmN1cl9yYXRlOworCX0KKwlpZiAoY2hpcC0+Y3VyX2Zvcm1hdCkKKwkJcnVudGltZS0+aHcuZm9ybWF0cyA9ICgxVUxMIDw8IGNoaXAtPmN1cl9mb3JtYXQpOworCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5wbGF5YmFja19zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJbXV0ZXhfbG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5vcGVuZWQrKzsKKwlydW50aW1lLT5odyA9IGF0bWVsX2FjOTdjX2h3OworCWlmIChjaGlwLT5jdXJfcmF0ZSkgeworCQlydW50aW1lLT5ody5yYXRlX21pbiA9IGNoaXAtPmN1cl9yYXRlOworCQlydW50aW1lLT5ody5yYXRlX21heCA9IGNoaXAtPmN1cl9yYXRlOworCX0KKwlpZiAoY2hpcC0+Y3VyX2Zvcm1hdCkKKwkJcnVudGltZS0+aHcuZm9ybWF0cyA9ICgxVUxMIDw8IGNoaXAtPmN1cl9mb3JtYXQpOworCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKwljaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19wbGF5YmFja19jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPm9wZW5lZC0tOworCWlmICghY2hpcC0+b3BlbmVkKSB7CisJCWNoaXAtPmN1cl9yYXRlID0gMDsKKwkJY2hpcC0+Y3VyX2Zvcm1hdCA9IDA7CisJfQorCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKworCWNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+b3BlbmVkLS07CisJaWYgKCFjaGlwLT5vcGVuZWQpIHsKKwkJY2hpcC0+Y3VyX3JhdGUgPSAwOworCQljaGlwLT5jdXJfZm9ybWF0ID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCisJY2hpcC0+Y2FwdHVyZV9zdWJzdHJlYW0gPSBOVUxMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJCXBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldHZhbCA8IDApCisJCXJldHVybiByZXR2YWw7CisJLyogc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzIHJldHVybnMgMSBpZiBidWZmZXIgaXMgY2hhbmdlZC4gKi8KKwlpZiAocmV0dmFsID09IDEpCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1RYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQkJZHdfZG1hX2N5Y2xpY19mcmVlKGNoaXAtPmRtYS50eF9jaGFuKTsKKworCS8qIFNldCByZXN0cmljdGlvbnMgdG8gcGFyYW1zLiAqLworCW11dGV4X2xvY2soJm9wZW5lZF9tdXRleCk7CisJY2hpcC0+Y3VyX3JhdGUgPSBwYXJhbXNfcmF0ZShod19wYXJhbXMpOworCWNoaXAtPmN1cl9mb3JtYXQgPSBwYXJhbXNfZm9ybWF0KGh3X3BhcmFtcyk7CisJbXV0ZXhfdW5sb2NrKCZvcGVuZWRfbXV0ZXgpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19jYXB0dXJlX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWludCByZXR2YWw7CisKKwlyZXR2YWwgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAorCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOworCWlmIChyZXR2YWwgPCAwKQorCQlyZXR1cm4gcmV0dmFsOworCS8qIHNuZF9wY21fbGliX21hbGxvY19wYWdlcyByZXR1cm5zIDEgaWYgYnVmZmVyIGlzIGNoYW5nZWQuICovCisJaWYgKHJldHZhbCA9PSAxKQorCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KERNQV9SWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJCWR3X2RtYV9jeWNsaWNfZnJlZShjaGlwLT5kbWEucnhfY2hhbik7CisKKwkvKiBTZXQgcmVzdHJpY3Rpb25zIHRvIHBhcmFtcy4gKi8KKwltdXRleF9sb2NrKCZvcGVuZWRfbXV0ZXgpOworCWNoaXAtPmN1cl9yYXRlID0gcGFyYW1zX3JhdGUoaHdfcGFyYW1zKTsKKwljaGlwLT5jdXJfZm9ybWF0ID0gcGFyYW1zX2Zvcm1hdChod19wYXJhbXMpOworCW11dGV4X3VubG9jaygmb3BlbmVkX211dGV4KTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfZnJlZShjaGlwLT5kbWEudHhfY2hhbik7CisJcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19jYXB0dXJlX2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX2ZyZWUoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcGxheWJhY2tfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwl1bnNpZ25lZCBsb25nIHdvcmQgPSAwOworCWludCByZXR2YWw7CisKKwkvKiBhc3NpZ24gY2hhbm5lbHMgdG8gQUM5N0MgY2hhbm5lbCBBICovCisJc3dpdGNoIChydW50aW1lLT5jaGFubmVscykgeworCWNhc2UgMToKKwkJd29yZCB8PSBBQzk3Q19DSF9BU1NJR04oUENNX0xFRlQsIEEpOworCQlicmVhazsKKwljYXNlIDI6CisJCXdvcmQgfD0gQUM5N0NfQ0hfQVNTSUdOKFBDTV9MRUZULCBBKQorCQkJfCBBQzk3Q19DSF9BU1NJR04oUENNX1JJR0hULCBBKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogVE9ETzogc3VwcG9ydCBtb3JlIHRoYW4gdHdvIGNoYW5uZWxzICovCisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJYWM5N2Nfd3JpdGVsKGNoaXAsIE9DQSwgd29yZCk7CisKKwkvKiBjb25maWd1cmUgc2FtcGxlIGZvcm1hdCBhbmQgc2l6ZSAqLworCXdvcmQgPSBBQzk3Q19DTVJfRE1BRU4gfCBBQzk3Q19DTVJfU0laRV8xNjsKKworCXN3aXRjaCAocnVudGltZS0+Zm9ybWF0KSB7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKKwkJd29yZCB8PSBBQzk3Q19DTVJfQ0VNX0xJVFRMRTsKKwkJYnJlYWs7CisJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9CRTogLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJd29yZCAmPSB+KEFDOTdDX0NNUl9DRU1fTElUVExFKTsKKwkJYnJlYWs7CisJfQorCisJYWM5N2Nfd3JpdGVsKGNoaXAsIENBTVIsIHdvcmQpOworCisJLyogc2V0IHZhcmlhYmxlIHJhdGUgaWYgbmVlZGVkICovCisJaWYgKHJ1bnRpbWUtPnJhdGUgIT0gNDgwMDApIHsKKwkJd29yZCA9IGFjOTdjX3JlYWRsKGNoaXAsIE1SKTsKKwkJd29yZCB8PSBBQzk3Q19NUl9WUkE7CisJCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgd29yZCk7CisJfSBlbHNlIHsKKwkJd29yZCA9IGFjOTdjX3JlYWRsKGNoaXAsIE1SKTsKKwkJd29yZCAmPSB+KEFDOTdDX01SX1ZSQSk7CisJCWFjOTdjX3dyaXRlbChjaGlwLCBNUiwgd29yZCk7CisJfQorCisJcmV0dmFsID0gc25kX2FjOTdfc2V0X3JhdGUoY2hpcC0+YWM5NywgQUM5N19QQ01fRlJPTlRfREFDX1JBVEUsCisJCQlydW50aW1lLT5yYXRlKTsKKwlpZiAocmV0dmFsKQorCQlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJjb3VsZCBub3Qgc2V0IHJhdGUgJWQgSHpcbiIsCisJCQkJcnVudGltZS0+cmF0ZSk7CisKKwlpZiAoIXRlc3RfYml0KERNQV9UWF9SRUFEWSwgJmNoaXAtPmZsYWdzKSkKKwkJcmV0dmFsID0gYXRtZWxfYWM5N2NfcHJlcGFyZV9kbWEoY2hpcCwgc3Vic3RyZWFtLAorCQkJCURNQV9UT19ERVZJQ0UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19jYXB0dXJlX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJdW5zaWduZWQgbG9uZyB3b3JkID0gMDsKKwlpbnQgcmV0dmFsOworCisJLyogYXNzaWduIGNoYW5uZWxzIHRvIEFDOTdDIGNoYW5uZWwgQSAqLworCXN3aXRjaCAocnVudGltZS0+Y2hhbm5lbHMpIHsKKwljYXNlIDE6CisJCXdvcmQgfD0gQUM5N0NfQ0hfQVNTSUdOKFBDTV9MRUZULCBBKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl3b3JkIHw9IEFDOTdDX0NIX0FTU0lHTihQQ01fTEVGVCwgQSkKKwkJCXwgQUM5N0NfQ0hfQVNTSUdOKFBDTV9SSUdIVCwgQSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFRPRE86IHN1cHBvcnQgbW9yZSB0aGFuIHR3byBjaGFubmVscyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCWFjOTdjX3dyaXRlbChjaGlwLCBJQ0EsIHdvcmQpOworCisJLyogY29uZmlndXJlIHNhbXBsZSBmb3JtYXQgYW5kIHNpemUgKi8KKwl3b3JkID0gQUM5N0NfQ01SX0RNQUVOIHwgQUM5N0NfQ01SX1NJWkVfMTY7CisKKwlzd2l0Y2ggKHJ1bnRpbWUtPmZvcm1hdCkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCXdvcmQgfD0gQUM5N0NfQ01SX0NFTV9MSVRUTEU7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfQkU6IC8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCXdvcmQgJj0gfihBQzk3Q19DTVJfQ0VNX0xJVFRMRSk7CisJCWJyZWFrOworCX0KKworCWFjOTdjX3dyaXRlbChjaGlwLCBDQU1SLCB3b3JkKTsKKworCS8qIHNldCB2YXJpYWJsZSByYXRlIGlmIG5lZWRlZCAqLworCWlmIChydW50aW1lLT5yYXRlICE9IDQ4MDAwKSB7CisJCXdvcmQgPSBhYzk3Y19yZWFkbChjaGlwLCBNUik7CisJCXdvcmQgfD0gQUM5N0NfTVJfVlJBOworCQlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIHdvcmQpOworCX0gZWxzZSB7CisJCXdvcmQgPSBhYzk3Y19yZWFkbChjaGlwLCBNUik7CisJCXdvcmQgJj0gfihBQzk3Q19NUl9WUkEpOworCQlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIHdvcmQpOworCX0KKworCXJldHZhbCA9IHNuZF9hYzk3X3NldF9yYXRlKGNoaXAtPmFjOTcsIEFDOTdfUENNX0xSX0FEQ19SQVRFLAorCQkJcnVudGltZS0+cmF0ZSk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY291bGQgbm90IHNldCByYXRlICVkIEh6XG4iLAorCQkJCXJ1bnRpbWUtPnJhdGUpOworCisJaWYgKCF0ZXN0X2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCXJldHZhbCA9IGF0bWVsX2FjOTdjX3ByZXBhcmVfZG1hKGNoaXAsIHN1YnN0cmVhbSwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludAorYXRtZWxfYWM5N2NfcGxheWJhY2tfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgbG9uZyBjYW1yOworCWludCByZXR2YWwgPSAwOworCisJY2FtciA9IGFjOTdjX3JlYWRsKGNoaXAsIENBTVIpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlyZXR2YWwgPSBkd19kbWFfY3ljbGljX3N0YXJ0KGNoaXAtPmRtYS50eF9jaGFuKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gb3V0OworCQljYW1yIHw9IEFDOTdDX0NNUl9DRU5BOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlkd19kbWFfY3ljbGljX3N0b3AoY2hpcC0+ZG1hLnR4X2NoYW4pOworCQlpZiAoY2hpcC0+b3BlbmVkIDw9IDEpCisJCQljYW1yICY9IH5BQzk3Q19DTVJfQ0VOQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJYWM5N2Nfd3JpdGVsKGNoaXAsIENBTVIsIGNhbXIpOworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQKK2F0bWVsX2FjOTdjX2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgbG9uZyBjYW1yOworCWludCByZXR2YWwgPSAwOworCisJY2FtciA9IGFjOTdjX3JlYWRsKGNoaXAsIENBTVIpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQlyZXR2YWwgPSBkd19kbWFfY3ljbGljX3N0YXJ0KGNoaXAtPmRtYS5yeF9jaGFuKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gb3V0OworCQljYW1yIHw9IEFDOTdDX0NNUl9DRU5BOworCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgorCQlkd19kbWFfY3ljbGljX3N0b3AoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCQlpZiAoY2hpcC0+b3BlbmVkIDw9IDEpCisJCQljYW1yICY9IH5BQzk3Q19DTVJfQ0VOQTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJYWM5N2Nfd3JpdGVsKGNoaXAsIENBTVIsIGNhbXIpOworb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAorYXRtZWxfYWM5N2NfcGxheWJhY2tfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MJKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZQkqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzbmRfcGNtX3VmcmFtZXNfdAlmcmFtZXM7CisJdW5zaWduZWQgbG9uZwkJYnl0ZXM7CisKKwlieXRlcyA9IGR3X2RtYV9nZXRfc3JjX2FkZHIoY2hpcC0+ZG1hLnR4X2NoYW4pOworCWJ5dGVzIC09IHJ1bnRpbWUtPmRtYV9hZGRyOworCisJZnJhbWVzID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGJ5dGVzKTsKKwlpZiAoZnJhbWVzID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQorCQlmcmFtZXMgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJcmV0dXJuIGZyYW1lczsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CithdG1lbF9hYzk3Y19jYXB0dXJlX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGF0bWVsX2FjOTdjCSpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUJKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc25kX3BjbV91ZnJhbWVzX3QJZnJhbWVzOworCXVuc2lnbmVkIGxvbmcJCWJ5dGVzOworCisJYnl0ZXMgPSBkd19kbWFfZ2V0X2RzdF9hZGRyKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlieXRlcyAtPSBydW50aW1lLT5kbWFfYWRkcjsKKworCWZyYW1lcyA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBieXRlcyk7CisJaWYgKGZyYW1lcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJZnJhbWVzIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCXJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgYXRtZWxfYWM5N19wbGF5YmFja19vcHMgPSB7CisJLm9wZW4JCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfb3BlbiwKKwkuY2xvc2UJCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19od19wYXJhbXMsCisJLmh3X2ZyZWUJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19od19mcmVlLAorCS5wcmVwYXJlCT0gYXRtZWxfYWM5N2NfcGxheWJhY2tfcHJlcGFyZSwKKwkudHJpZ2dlcgk9IGF0bWVsX2FjOTdjX3BsYXliYWNrX3RyaWdnZXIsCisJLnBvaW50ZXIJPSBhdG1lbF9hYzk3Y19wbGF5YmFja19wb2ludGVyLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBhdG1lbF9hYzk3X2NhcHR1cmVfb3BzID0geworCS5vcGVuCQk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfb3BlbiwKKwkuY2xvc2UJCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9jbG9zZSwKKwkuaW9jdGwJCT0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcwk9IGF0bWVsX2FjOTdjX2NhcHR1cmVfaHdfcGFyYW1zLAorCS5od19mcmVlCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9od19mcmVlLAorCS5wcmVwYXJlCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9wcmVwYXJlLAorCS50cmlnZ2VyCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV90cmlnZ2VyLAorCS5wb2ludGVyCT0gYXRtZWxfYWM5N2NfY2FwdHVyZV9wb2ludGVyLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgYXRtZWxfYWM5N2NfcGNtX25ldyhzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXApCit7CisJc3RydWN0IHNuZF9wY20JCSpwY207CisJc3RydWN0IHNuZF9wY21faGFyZHdhcmUJaHcgPSBhdG1lbF9hYzk3Y19odzsKKwlpbnQJCQljYXB0dXJlLCBwbGF5YmFjaywgcmV0dmFsOworCisJY2FwdHVyZSA9IHRlc3RfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJcGxheWJhY2sgPSB0ZXN0X2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpOworCisJcmV0dmFsID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgY2hpcC0+Y2FyZC0+c2hvcnRuYW1lLAorCQkJY2hpcC0+cGRldi0+aWQsIHBsYXliYWNrLCBjYXB0dXJlLCAmcGNtKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKGNhcHR1cmUpCisJCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwKKwkJCQkmYXRtZWxfYWM5N19jYXB0dXJlX29wcyk7CisJaWYgKHBsYXliYWNrKQorCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAorCQkJCSZhdG1lbF9hYzk3X3BsYXliYWNrX29wcyk7CisKKwlyZXR2YWwgPSBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAorCQkJJmNoaXAtPnBkZXYtPmRldiwgaHcucGVyaW9kc19taW4gKiBody5wZXJpb2RfYnl0ZXNfbWluLAorCQkJaHcuYnVmZmVyX2J5dGVzX21heCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlwY20tPmluZm9fZmxhZ3MgPSAwOworCXN0cmNweShwY20tPm5hbWUsIGNoaXAtPmNhcmQtPnNob3J0bmFtZSk7CisJY2hpcC0+cGNtID0gcGNtOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRtZWxfYWM5N2NfbWl4ZXJfbmV3KHN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc25kX2FjOTdfdGVtcGxhdGUgdGVtcGxhdGU7CisJbWVtc2V0KCZ0ZW1wbGF0ZSwgMCwgc2l6ZW9mKHRlbXBsYXRlKSk7CisJdGVtcGxhdGUucHJpdmF0ZV9kYXRhID0gY2hpcDsKKwlyZXR1cm4gc25kX2FjOTdfbWl4ZXIoY2hpcC0+YWM5N19idXMsICZ0ZW1wbGF0ZSwgJmNoaXAtPmFjOTcpOworfQorCitzdGF0aWMgdm9pZCBhdG1lbF9hYzk3Y193cml0ZShzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJdW5zaWduZWQgc2hvcnQgdmFsKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGdldF9jaGlwKGFjOTcpOworCXVuc2lnbmVkIGxvbmcgd29yZDsKKwlpbnQgdGltZW91dCA9IDQwOworCisJd29yZCA9IChyZWcgJiAweDdmKSA8PCAxNiB8IHZhbDsKKworCWRvIHsKKwkJaWYgKGFjOTdjX3JlYWRsKGNoaXAsIENPU1IpICYgQUM5N0NfQ1NSX1RYUkRZKSB7CisJCQlhYzk3Y193cml0ZWwoY2hpcCwgQ09USFIsIHdvcmQpOworCQkJcmV0dXJuOworCQl9CisJCXVkZWxheSgxKTsKKwl9IHdoaWxlICgtLXRpbWVvdXQpOworCisJZGV2X2RiZygmY2hpcC0+cGRldi0+ZGV2LCAiY29kZWMgd3JpdGUgdGltZW91dFxuIik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBhdG1lbF9hYzk3Y19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywKKwkJdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXN0cnVjdCBhdG1lbF9hYzk3YyAqY2hpcCA9IGdldF9jaGlwKGFjOTcpOworCXVuc2lnbmVkIGxvbmcgd29yZDsKKwlpbnQgdGltZW91dCA9IDQwOworCWludCB3cml0ZSA9IDEwOworCisJd29yZCA9ICgweDgwIHwgKHJlZyAmIDB4N2YpKSA8PCAxNjsKKworCWlmICgoYWM5N2NfcmVhZGwoY2hpcCwgQ09TUikgJiBBQzk3Q19DU1JfUlhSRFkpICE9IDApCisJCWFjOTdjX3JlYWRsKGNoaXAsIENPUkhSKTsKKworcmV0cnlfd3JpdGU6CisJdGltZW91dCA9IDQwOworCisJZG8geworCQlpZiAoKGFjOTdjX3JlYWRsKGNoaXAsIENPU1IpICYgQUM5N0NfQ1NSX1RYUkRZKSAhPSAwKSB7CisJCQlhYzk3Y193cml0ZWwoY2hpcCwgQ09USFIsIHdvcmQpOworCQkJZ290byByZWFkX3JlZzsKKwkJfQorCQl1ZGVsYXkoMTApOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlpZiAoIS0td3JpdGUpCisJCWdvdG8gdGltZWRfb3V0OworCWdvdG8gcmV0cnlfd3JpdGU7CisKK3JlYWRfcmVnOgorCWRvIHsKKwkJaWYgKChhYzk3Y19yZWFkbChjaGlwLCBDT1NSKSAmIEFDOTdDX0NTUl9SWFJEWSkgIT0gMCkgeworCQkJdW5zaWduZWQgc2hvcnQgdmFsID0gYWM5N2NfcmVhZGwoY2hpcCwgQ09SSFIpOworCQkJcmV0dXJuIHZhbDsKKwkJfQorCQl1ZGVsYXkoMTApOworCX0gd2hpbGUgKC0tdGltZW91dCk7CisKKwlpZiAoIS0td3JpdGUpCisJCWdvdG8gdGltZWRfb3V0OworCWdvdG8gcmV0cnlfd3JpdGU7CisKK3RpbWVkX291dDoKKwlkZXZfZGJnKCZjaGlwLT5wZGV2LT5kZXYsICJjb2RlYyByZWFkIHRpbWVvdXRcbiIpOworCXJldHVybiAweGZmZmY7Cit9CisKK3N0YXRpYyBib29sIGZpbHRlcihzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKnNsYXZlKQoreworCXN0cnVjdCBkd19kbWFfc2xhdmUgKmR3cyA9IHNsYXZlOworCisJaWYgKGR3cy0+ZG1hX2RldiA9PSBjaGFuLT5kZXZpY2UtPmRldikgeworCQljaGFuLT5wcml2YXRlID0gZHdzOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UKKwkJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBhdG1lbF9hYzk3Y19yZXNldChzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXApCit7CisJYWM5N2Nfd3JpdGVsKGNoaXAsIE1SLCBBQzk3Q19NUl9XUlNUKTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGNoaXAtPnJlc2V0X3BpbikpIHsKKwkJZ3Bpb19zZXRfdmFsdWUoY2hpcC0+cmVzZXRfcGluLCAwKTsKKwkJLyogQUM5NyB2Mi4yIHNwZWNpZmljYXRpb25zIHNheXMgbWluaW11bSAxIHVzLiAqLworCQl1ZGVsYXkoMTApOworCQlncGlvX3NldF92YWx1ZShjaGlwLT5yZXNldF9waW4sIDEpOworCX0KKworCXVkZWxheSgxKTsKKwlhYzk3Y193cml0ZWwoY2hpcCwgTVIsIEFDOTdDX01SX0VOQSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bWVsX2FjOTdjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNuZF9jYXJkCQkJKmNhcmQ7CisJc3RydWN0IGF0bWVsX2FjOTdjCQkqY2hpcDsKKwlzdHJ1Y3QgcmVzb3VyY2UJCQkqcmVnczsKKwlzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YQkqcGRhdGE7CisJc3RydWN0IGNsawkJCSpwY2xrOworCXN0YXRpYyBzdHJ1Y3Qgc25kX2FjOTdfYnVzX29wcwlvcHMgPSB7CisJCS53cml0ZQk9IGF0bWVsX2FjOTdjX3dyaXRlLAorCQkucmVhZAk9IGF0bWVsX2FjOTdjX3JlYWQsCisJfTsKKwlpbnQJCQkJcmV0dmFsOworCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZWdzKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIG1lbW9yeSByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCXBjbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJwY2xrIik7CisJaWYgKElTX0VSUihwY2xrKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBwZXJpcGhlcmFsIGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGNsayk7CisJfQorCWNsa19lbmFibGUocGNsayk7CisKKwlyZXR2YWwgPSBzbmRfY2FyZF9jcmVhdGUoU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCisJCQlUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCBhdG1lbF9hYzk3YyksICZjYXJkKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCBjcmVhdGUgc291bmQgY2FyZCBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9zbmRfY2FyZF9uZXc7CisJfQorCisJY2hpcCA9IGdldF9jaGlwKGNhcmQpOworCisJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOworCisJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkF0bWVsIEFDOTdDIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkF0bWVsIEFDOTdDIik7CisJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIkF0bWVsIEFDOTcgY29udHJvbGxlciIpOworCisJY2hpcC0+Y2FyZCA9IGNhcmQ7CisJY2hpcC0+cGNsayA9IHBjbGs7CisJY2hpcC0+cGRldiA9IHBkZXY7CisJY2hpcC0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CisKKwlpZiAoIWNoaXAtPnJlZ3MpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlbWFwIHJlZ2lzdGVyIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnJlc2V0X3BpbikpIHsKKwkJaWYgKGdwaW9fcmVxdWVzdChwZGF0YS0+cmVzZXRfcGluLCAicmVzZXRfcGluIikpIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlc2V0IHBpbiBub3QgYXZhaWxhYmxlXG4iKTsKKwkJCWNoaXAtPnJlc2V0X3BpbiA9IC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQocGRhdGEtPnJlc2V0X3BpbiwgMSk7CisJCQljaGlwLT5yZXNldF9waW4gPSBwZGF0YS0+cmVzZXRfcGluOworCQl9CisJfQorCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGRldi0+ZGV2KTsKKworCXJldHZhbCA9IHNuZF9hYzk3X2J1cyhjYXJkLCAwLCAmb3BzLCBjaGlwLCAmY2hpcC0+YWM5N19idXMpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIG9uIGFjOTcgYnVzXG4iKTsKKwkJZ290byBlcnJfYWM5N19idXM7CisJfQorCisJYXRtZWxfYWM5N2NfcmVzZXQoY2hpcCk7CisKKwlyZXR2YWwgPSBhdG1lbF9hYzk3Y19taXhlcl9uZXcoY2hpcCk7CisJaWYgKHJldHZhbCkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgYWM5NyBtaXhlclxuIik7CisJCWdvdG8gZXJyX2FjOTdfYnVzOworCX0KKworCWlmIChwZGF0YS0+cnhfZHdzLmRtYV9kZXYpIHsKKwkJc3RydWN0IGR3X2RtYV9zbGF2ZSAqZHdzID0gJnBkYXRhLT5yeF9kd3M7CisJCWRtYV9jYXBfbWFza190IG1hc2s7CisKKwkJZHdzLT5yeF9yZWcgPSByZWdzLT5zdGFydCArIEFDOTdDX0NBUkhSICsgMjsKKworCQlkbWFfY2FwX3plcm8obWFzayk7CisJCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgbWFzayk7CisKKwkJY2hpcC0+ZG1hLnJ4X2NoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgZHdzKTsKKworCQlkZXZfaW5mbygmY2hpcC0+cGRldi0+ZGV2LCAidXNpbmcgJXMgZm9yIERNQSBSWFxuIiwKKwkJCQkJY2hpcC0+ZG1hLnJ4X2NoYW4tPmRldi0+ZGV2aWNlLmJ1c19pZCk7CisJCXNldF9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwl9CisKKwlpZiAocGRhdGEtPnR4X2R3cy5kbWFfZGV2KSB7CisJCXN0cnVjdCBkd19kbWFfc2xhdmUgKmR3cyA9ICZwZGF0YS0+dHhfZHdzOworCQlkbWFfY2FwX21hc2tfdCBtYXNrOworCisJCWR3cy0+dHhfcmVnID0gcmVncy0+c3RhcnQgKyBBQzk3Q19DQVRIUiArIDI7CisKKwkJZG1hX2NhcF96ZXJvKG1hc2spOworCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJCWNoaXAtPmRtYS50eF9jaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIGR3cyk7CisKKwkJZGV2X2luZm8oJmNoaXAtPnBkZXYtPmRldiwgInVzaW5nICVzIGZvciBETUEgVFhcbiIsCisJCQkJCWNoaXAtPmRtYS50eF9jaGFuLT5kZXYtPmRldmljZS5idXNfaWQpOworCQlzZXRfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJfQorCisJaWYgKCF0ZXN0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpICYmCisJCQkhdGVzdF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJETUEgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2RtYTsKKwl9CisKKwlyZXR2YWwgPSBhdG1lbF9hYzk3Y19wY21fbmV3KGNoaXApOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIGFjOTcgcGNtIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2RtYTsKKwl9CisKKwlyZXR2YWwgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgImNvdWxkIG5vdCByZWdpc3RlciBzb3VuZCBjYXJkXG4iKTsKKwkJZ290byBlcnJfYWM5N19idXM7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQXRtZWwgQUM5NyBjb250cm9sbGVyIGF0IDB4JXBcbiIsCisJCQljaGlwLT5yZWdzKTsKKworCXJldHVybiAwOworCitlcnJfZG1hOgorCWlmICh0ZXN0X2JpdChETUFfUlhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoaXAtPmRtYS5yeF9jaGFuKTsKKwlpZiAodGVzdF9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKSkKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGlwLT5kbWEudHhfY2hhbik7CisJY2xlYXJfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJY2xlYXJfYml0KERNQV9UWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncyk7CisJY2hpcC0+ZG1hLnJ4X2NoYW4gPSBOVUxMOworCWNoaXAtPmRtYS50eF9jaGFuID0gTlVMTDsKK2Vycl9hYzk3X2J1czoKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIE5VTEwpOworCisJaWYgKGdwaW9faXNfdmFsaWQoY2hpcC0+cmVzZXRfcGluKSkKKwkJZ3Bpb19mcmVlKGNoaXAtPnJlc2V0X3Bpbik7CisKKwlpb3VubWFwKGNoaXAtPnJlZ3MpOworZXJyX2lvcmVtYXA6CisJc25kX2NhcmRfZnJlZShjYXJkKTsKK2Vycl9zbmRfY2FyZF9uZXc6CisJY2xrX2Rpc2FibGUocGNsayk7CisJY2xrX3B1dChwY2xrKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IGF0bWVsX2FjOTdjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwlpZiAodGVzdF9iaXQoRE1BX1JYX1JFQURZLCAmY2hpcC0+ZmxhZ3MpKQorCQlkd19kbWFfY3ljbGljX3N0b3AoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCWlmICh0ZXN0X2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfc3RvcChjaGlwLT5kbWEudHhfY2hhbik7CisJY2xrX2Rpc2FibGUoY2hpcC0+cGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdG1lbF9hYzk3Y19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwljbGtfZW5hYmxlKGNoaXAtPnBjbGspOworCWlmICh0ZXN0X2JpdChETUFfUlhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfc3RhcnQoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCWlmICh0ZXN0X2JpdChETUFfVFhfUkVBRFksICZjaGlwLT5mbGFncykpCisJCWR3X2RtYV9jeWNsaWNfc3RhcnQoY2hpcC0+ZG1hLnR4X2NoYW4pOworCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSBhdG1lbF9hYzk3Y19zdXNwZW5kIE5VTEwKKyNkZWZpbmUgYXRtZWxfYWM5N2NfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhdG1lbF9hYzk3Y19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgYXRtZWxfYWM5N2MgKmNoaXAgPSBnZXRfY2hpcChjYXJkKTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGNoaXAtPnJlc2V0X3BpbikpCisJCWdwaW9fZnJlZShjaGlwLT5yZXNldF9waW4pOworCisJY2xrX2Rpc2FibGUoY2hpcC0+cGNsayk7CisJY2xrX3B1dChjaGlwLT5wY2xrKTsKKwlpb3VubWFwKGNoaXAtPnJlZ3MpOworCisJaWYgKHRlc3RfYml0KERNQV9SWF9DSEFOX1BSRVNFTlQsICZjaGlwLT5mbGFncykpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoY2hpcC0+ZG1hLnJ4X2NoYW4pOworCWlmICh0ZXN0X2JpdChETUFfVFhfQ0hBTl9QUkVTRU5ULCAmY2hpcC0+ZmxhZ3MpKQorCQlkbWFfcmVsZWFzZV9jaGFubmVsKGNoaXAtPmRtYS50eF9jaGFuKTsKKwljbGVhcl9iaXQoRE1BX1JYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwljbGVhcl9iaXQoRE1BX1RYX0NIQU5fUFJFU0VOVCwgJmNoaXAtPmZsYWdzKTsKKwljaGlwLT5kbWEucnhfY2hhbiA9IE5VTEw7CisJY2hpcC0+ZG1hLnR4X2NoYW4gPSBOVUxMOworCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBOVUxMKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtZWxfYWM5N2NfZHJpdmVyID0geworCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYXRtZWxfYWM5N2NfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiYXRtZWxfYWM5N2MiLAorCX0sCisJLnN1c3BlbmQJPSBhdG1lbF9hYzk3Y19zdXNwZW5kLAorCS5yZXN1bWUJCT0gYXRtZWxfYWM5N2NfcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgYXRtZWxfYWM5N2NfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmF0bWVsX2FjOTdjX2RyaXZlciwKKwkJCWF0bWVsX2FjOTdjX3Byb2JlKTsKK30KK21vZHVsZV9pbml0KGF0bWVsX2FjOTdjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgYXRtZWxfYWM5N2NfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhdG1lbF9hYzk3Y19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoYXRtZWxfYWM5N2NfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBBdG1lbCBBQzk3IGNvbnRyb2xsZXIiKTsKK01PRFVMRV9BVVRIT1IoIkhhbnMtQ2hyaXN0aWFuIEVndHZlZHQgPGhhbnMtY2hyaXN0aWFuLmVndHZlZHRAYXRtZWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvYXRtZWwvYWM5N2MuaCBiL3NvdW5kL2F0bWVsL2FjOTdjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE3YmQ1OAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2F0bWVsL2FjOTdjLmgKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciB0aGUgQXRtZWwgQUM5N0MgY29udHJvbGxlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5IEF0bWVsIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX1NPVU5EX0FUTUVMX0FDOTdDX0gKKyNkZWZpbmUgX19TT1VORF9BVE1FTF9BQzk3Q19ICisKKyNkZWZpbmUgQUM5N0NfTVIJCTB4MDgKKyNkZWZpbmUgQUM5N0NfSUNBCQkweDEwCisjZGVmaW5lIEFDOTdDX09DQQkJMHgxNAorI2RlZmluZSBBQzk3Q19DQVJIUgkJMHgyMAorI2RlZmluZSBBQzk3Q19DQVRIUgkJMHgyNAorI2RlZmluZSBBQzk3Q19DQVNSCQkweDI4CisjZGVmaW5lIEFDOTdDX0NBTVIJCTB4MmMKKyNkZWZpbmUgQUM5N0NfQ0JSSFIJCTB4MzAKKyNkZWZpbmUgQUM5N0NfQ0JUSFIJCTB4MzQKKyNkZWZpbmUgQUM5N0NfQ0JTUgkJMHgzOAorI2RlZmluZSBBQzk3Q19DQk1SCQkweDNjCisjZGVmaW5lIEFDOTdDX0NPUkhSCQkweDQwCisjZGVmaW5lIEFDOTdDX0NPVEhSCQkweDQ0CisjZGVmaW5lIEFDOTdDX0NPU1IJCTB4NDgKKyNkZWZpbmUgQUM5N0NfQ09NUgkJMHg0YworI2RlZmluZSBBQzk3Q19TUgkJMHg1MAorI2RlZmluZSBBQzk3Q19JRVIJCTB4NTQKKyNkZWZpbmUgQUM5N0NfSURSCQkweDU4CisjZGVmaW5lIEFDOTdDX0lNUgkJMHg1YworI2RlZmluZSBBQzk3Q19WRVJTSU9OCQkweGZjCisKKyNkZWZpbmUgQUM5N0NfQ0FUUFIJCVBEQ19UUFIKKyNkZWZpbmUgQUM5N0NfQ0FUQ1IJCVBEQ19UQ1IKKyNkZWZpbmUgQUM5N0NfQ0FUTlBSCQlQRENfVE5QUgorI2RlZmluZSBBQzk3Q19DQVROQ1IJCVBEQ19UTkNSCisjZGVmaW5lIEFDOTdDX0NBUlBSCQlQRENfUlBSCisjZGVmaW5lIEFDOTdDX0NBUkNSCQlQRENfUkNSCisjZGVmaW5lIEFDOTdDX0NBUk5QUgkJUERDX1JOUFIKKyNkZWZpbmUgQUM5N0NfQ0FSTkNSCQlQRENfUk5DUgorI2RlZmluZSBBQzk3Q19QVENSCQlQRENfUFRDUgorCisjZGVmaW5lIEFDOTdDX01SX0VOQQkJKDEgPDwgMCkKKyNkZWZpbmUgQUM5N0NfTVJfV1JTVAkJKDEgPDwgMSkKKyNkZWZpbmUgQUM5N0NfTVJfVlJBCQkoMSA8PCAyKQorCisjZGVmaW5lIEFDOTdDX0NTUl9UWFJEWQkJKDEgPDwgMCkKKyNkZWZpbmUgQUM5N0NfQ1NSX1VOUlVOCQkoMSA8PCAyKQorI2RlZmluZSBBQzk3Q19DU1JfUlhSRFkJCSgxIDw8IDQpCisjZGVmaW5lIEFDOTdDX0NTUl9FTkRUWAkJKDEgPDwgMTApCisjZGVmaW5lIEFDOTdDX0NTUl9FTkRSWAkJKDEgPDwgMTQpCisKKyNkZWZpbmUgQUM5N0NfQ01SX1NJWkVfMjAJKDAgPDwgMTYpCisjZGVmaW5lIEFDOTdDX0NNUl9TSVpFXzE4CSgxIDw8IDE2KQorI2RlZmluZSBBQzk3Q19DTVJfU0laRV8xNgkoMiA8PCAxNikKKyNkZWZpbmUgQUM5N0NfQ01SX1NJWkVfMTAJKDMgPDwgMTYpCisjZGVmaW5lIEFDOTdDX0NNUl9DRU1fTElUVExFCSgxIDw8IDE4KQorI2RlZmluZSBBQzk3Q19DTVJfQ0VNX0JJRwkoMCA8PCAxOCkKKyNkZWZpbmUgQUM5N0NfQ01SX0NFTkEJCSgxIDw8IDIxKQorI2RlZmluZSBBQzk3Q19DTVJfRE1BRU4JCSgxIDw8IDIyKQorCisjZGVmaW5lIEFDOTdDX1NSX0NBRVZUCQkoMSA8PCAzKQorCisjZGVmaW5lIEFDOTdDX0NIX0FTU0lHTihzbG90LCBjaGFubmVsKQkJCQkJXAorCShBQzk3Q19DSEFOTkVMXyMjY2hhbm5lbCA8PCAoMyAqIChBQzk3X1NMT1RfIyNzbG90IC0gMykpKQorI2RlZmluZSBBQzk3Q19DSEFOTkVMX05PTkUJMHgwCisjZGVmaW5lIEFDOTdDX0NIQU5ORUxfQQkJMHgxCisjZGVmaW5lIEFDOTdDX0NIQU5ORUxfQgkJMHgyCisKKyNlbmRpZiAvKiBfX1NPVU5EX0FUTUVMX0FDOTdDX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvY29udHJvbC5jIGIvc291bmQvY29yZS9jb250cm9sLmMKaW5kZXggNjM2YjNiNS4uNGIyMGZhMiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9jb250cm9sLmMKKysrIGIvc291bmQvY29yZS9jb250cm9sLmMKQEAgLTEzNzMsMTIgKzEzNzMsOSBAQAogc3RhdGljIGludCBzbmRfY3RsX2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlsZSwgaW50IG9uKQogewogCXN0cnVjdCBzbmRfY3RsX2ZpbGUgKmN0bDsKLQlpbnQgZXJyOworCiAJY3RsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWVyciA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY3RsLT5mYXN5bmMpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOworCXJldHVybiBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJmN0bC0+ZmFzeW5jKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaHdkZXAuYyBiL3NvdW5kL2NvcmUvaHdkZXAuYwppbmRleCAxOTVjYWZjLi5hNzBlZTdmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2h3ZGVwLmMKKysrIGIvc291bmQvY29yZS9od2RlcC5jCkBAIC05OSw5ICs5OSw2IEBACiAJaWYgKGh3ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCFody0+b3BzLm9wZW4pCi0JCXJldHVybiAtRU5YSU87Ci0KIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGh3LT5jYXJkLT5tb2R1bGUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIApAQCAtMTEzLDYgKzExMCwxMCBAQAogCQkJZXJyID0gLUVCVVNZOwogCQkJYnJlYWs7CiAJCX0KKwkJaWYgKCFody0+b3BzLm9wZW4pIHsKKwkJCWVyciA9IDA7CisJCQlicmVhazsKKwkJfQogCQllcnIgPSBody0+b3BzLm9wZW4oaHcsIGZpbGUpOwogCQlpZiAoZXJyID49IDApCiAJCQlicmVhazsKQEAgLTE1MSw3ICsxNTIsNyBAQAogCiBzdGF0aWMgaW50IHNuZF9od2RlcF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkKIHsKLQlpbnQgZXJyID0gLUVOWElPOworCWludCBlcnIgPSAwOwogCXN0cnVjdCBzbmRfaHdkZXAgKmh3ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBtb2R1bGUgKm1vZCA9IGh3LT5jYXJkLT5tb2R1bGU7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaW5pdC5jIGIvc291bmQvY29yZS9pbml0LmMKaW5kZXggMGQ1NTIwYy4uZmQ1NmFmZSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9pbml0LmMKKysrIGIvc291bmQvY29yZS9pbml0LmMKQEAgLTEyMSwzMSArMTIxLDQ0IEBACiAjZW5kaWYKIAogLyoqCi0gKiAgc25kX2NhcmRfbmV3IC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGEgc291bmRjYXJkIHN0cnVjdHVyZQorICogIHNuZF9jYXJkX2NyZWF0ZSAtIGNyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIHNvdW5kY2FyZCBzdHJ1Y3R1cmUKICAqICBAaWR4OiBjYXJkIGluZGV4IChhZGRyZXNzKSBbMCAuLi4gKFNORFJWX0NBUkRTLTEpXQogICogIEB4aWQ6IGNhcmQgaWRlbnRpZmljYXRpb24gKEFTQ0lJIHN0cmluZykKICAqICBAbW9kdWxlOiB0b3AgbGV2ZWwgbW9kdWxlIGZvciBsb2NraW5nCiAgKiAgQGV4dHJhX3NpemU6IGFsbG9jYXRlIHRoaXMgZXh0cmEgc2l6ZSBhZnRlciB0aGUgbWFpbiBzb3VuZGNhcmQgc3RydWN0dXJlCisgKiAgQGNhcmRfcmV0OiB0aGUgcG9pbnRlciB0byBzdG9yZSB0aGUgY3JlYXRlZCBjYXJkIGluc3RhbmNlCiAgKgogICogIENyZWF0ZXMgYW5kIGluaXRpYWxpemVzIGEgc291bmRjYXJkIHN0cnVjdHVyZS4KICAqCi0gKiAgUmV0dXJucyBrbWFsbG9jYXRlZCBzbmRfY2FyZCBzdHJ1Y3R1cmUuIENyZWF0ZXMgdGhlIEFMU0EgY29udHJvbCBpbnRlcmZhY2UKLSAqICAod2hpY2ggaXMgYmxvY2tlZCB1bnRpbCBzbmRfY2FyZF9yZWdpc3RlciBmdW5jdGlvbiBpcyBjYWxsZWQpLgorICogIFRoZSBmdW5jdGlvbiBhbGxvY2F0ZXMgc25kX2NhcmQgaW5zdGFuY2UgdmlhIGt6YWxsb2Mgd2l0aCB0aGUgZ2l2ZW4KKyAqICBzcGFjZSBmb3IgdGhlIGRyaXZlciB0byB1c2UgZnJlZWx5LiAgVGhlIGFsbG9jYXRlZCBzdHJ1Y3QgaXMgc3RvcmVkCisgKiAgaW4gdGhlIGdpdmVuIGNhcmRfcmV0IHBvaW50ZXIuCisgKgorICogIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqLwotc3RydWN0IHNuZF9jYXJkICpzbmRfY2FyZF9uZXcoaW50IGlkeCwgY29uc3QgY2hhciAqeGlkLAotCQkJIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgaW50IGV4dHJhX3NpemUpCitpbnQgc25kX2NhcmRfY3JlYXRlKGludCBpZHgsIGNvbnN0IGNoYXIgKnhpZCwKKwkJICAgIHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgaW50IGV4dHJhX3NpemUsCisJCSAgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkX3JldCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVyciwgaWR4MjsKIAorCWlmIChzbmRfQlVHX09OKCFjYXJkX3JldCkpCisJCXJldHVybiAtRUlOVkFMOworCSpjYXJkX3JldCA9IE5VTEw7CisKIAlpZiAoZXh0cmFfc2l6ZSA8IDApCiAJCWV4dHJhX3NpemUgPSAwOwogCWNhcmQgPSBremFsbG9jKHNpemVvZigqY2FyZCkgKyBleHRyYV9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRU5PTUVNOwogCWlmICh4aWQpIHsKLQkJaWYgKCFzbmRfaW5mb19jaGVja19yZXNlcnZlZF93b3Jkcyh4aWQpKQorCQlpZiAoIXNuZF9pbmZvX2NoZWNrX3Jlc2VydmVkX3dvcmRzKHhpZCkpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCQkgICAiZ2l2ZW4gaWQgc3RyaW5nICclcycgaXMgcmVzZXJ2ZWQuXG4iLCB4aWQpOworCQkJZXJyID0gLUVCVVNZOwogCQkJZ290byBfX2Vycm9yOworCQl9CiAJCXN0cmxjcHkoY2FyZC0+aWQsIHhpZCwgc2l6ZW9mKGNhcmQtPmlkKSk7CiAJfQogCWVyciA9IDA7CkBAIC0xOTUsNiArMjA4LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmY2FyZC0+Y29udHJvbHMpOwogCUlOSVRfTElTVF9IRUFEKCZjYXJkLT5jdGxfZmlsZXMpOwogCXNwaW5fbG9ja19pbml0KCZjYXJkLT5maWxlc19sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmY2FyZC0+ZmlsZXNfbGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+c2h1dGRvd25fc2xlZXApOwogI2lmZGVmIENPTkZJR19QTQogCW11dGV4X2luaXQoJmNhcmQtPnBvd2VyX2xvY2spOwpAQCAtMjAyLDI2ICsyMTYsMjggQEAKICNlbmRpZgogCS8qIHRoZSBjb250cm9sIGludGVyZmFjZSBjYW5ub3QgYmUgYWNjZXNzZWQgZnJvbSB0aGUgdXNlciBzcGFjZSB1bnRpbCAqLwogCS8qIHNuZF9jYXJkc19iaXRtYXNrIGFuZCBzbmRfY2FyZHMgYXJlIHNldCB3aXRoIHNuZF9jYXJkX3JlZ2lzdGVyICovCi0JaWYgKChlcnIgPSBzbmRfY3RsX2NyZWF0ZShjYXJkKSkgPCAwKSB7Ci0JCXNuZF9wcmludGQoInVuYWJsZSB0byByZWdpc3RlciBjb250cm9sIG1pbm9yc1xuIik7CisJZXJyID0gc25kX2N0bF9jcmVhdGUoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHJlZ2lzdGVyIGNvbnRyb2wgbWlub3JzXG4iKTsKIAkJZ290byBfX2Vycm9yOwogCX0KLQlpZiAoKGVyciA9IHNuZF9pbmZvX2NhcmRfY3JlYXRlKGNhcmQpKSA8IDApIHsKLQkJc25kX3ByaW50ZCgidW5hYmxlIHRvIGNyZWF0ZSBjYXJkIGluZm9cbiIpOworCWVyciA9IHNuZF9pbmZvX2NhcmRfY3JlYXRlKGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBjcmVhdGUgY2FyZCBpbmZvXG4iKTsKIAkJZ290byBfX2Vycm9yX2N0bDsKIAl9CiAJaWYgKGV4dHJhX3NpemUgPiAwKQogCQljYXJkLT5wcml2YXRlX2RhdGEgPSAoY2hhciAqKWNhcmQgKyBzaXplb2Yoc3RydWN0IHNuZF9jYXJkKTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZF9yZXQgPSBjYXJkOworCXJldHVybiAwOwogCiAgICAgICBfX2Vycm9yX2N0bDoKIAlzbmRfZGV2aWNlX2ZyZWVfYWxsKGNhcmQsIFNORFJWX0RFVl9DTURfUFJFKTsKICAgICAgIF9fZXJyb3I6CiAJa2ZyZWUoY2FyZCk7Ci0gICAgICAJcmV0dXJuIE5VTEw7CisgIAlyZXR1cm4gZXJyOwogfQotCi1FWFBPUlRfU1lNQk9MKHNuZF9jYXJkX25ldyk7CitFWFBPUlRfU1lNQk9MKHNuZF9jYXJkX2NyZWF0ZSk7CiAKIC8qIHJldHVybiBub24temVybyBpZiBhIGNhcmQgaXMgYWxyZWFkeSBsb2NrZWQgKi8KIGludCBzbmRfY2FyZF9sb2NrZWQoaW50IGNhcmQpCkBAIC0yNTksNiArMjc1LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9kZiwgJnNodXRkb3duX2ZpbGVzLCBzaHV0ZG93bl9saXN0KSB7CiAJCWlmIChfZGYtPmZpbGUgPT0gZmlsZSkgewogCQkJZGYgPSBfZGY7CisJCQlsaXN0X2RlbF9pbml0KCZkZi0+c2h1dGRvd25fbGlzdCk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTM0Nyw4ICszNjQsNyBAQAogCS8qIHBoYXNlIDI6IHJlcGxhY2UgZmlsZS0+Zl9vcCB3aXRoIHNwZWNpYWwgZHVtbXkgb3BlcmF0aW9ucyAqLwogCQogCXNwaW5fbG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7Ci0JbWZpbGUgPSBjYXJkLT5maWxlczsKLQl3aGlsZSAobWZpbGUpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1maWxlLCAmY2FyZC0+ZmlsZXNfbGlzdCwgbGlzdCkgewogCQlmaWxlID0gbWZpbGUtPmZpbGU7CiAKIAkJLyogaXQncyBjcml0aWNhbCBwYXJ0LCB1c2UgZW5kbGVzcyBsb29wICovCkBAIC0zNjEsOCArMzc3LDYgQEAKIAogCQltZmlsZS0+ZmlsZS0+Zl9vcCA9ICZzbmRfc2h1dGRvd25fZl9vcHM7CiAJCWZvcHNfZ2V0KG1maWxlLT5maWxlLT5mX29wKTsKLQkJCi0JCW1maWxlID0gbWZpbGUtPm5leHQ7CiAJfQogCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsJCiAKQEAgLTQ0Miw3ICs0NTYsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKLQlpZiAoY2FyZC0+ZmlsZXMgPT0gTlVMTCkKKwlpZiAobGlzdF9lbXB0eSgmY2FyZC0+ZmlsZXNfbGlzdCkpCiAJCWZyZWVfbm93ID0gMTsKIAllbHNlCiAJCWNhcmQtPmZyZWVfb25fbGFzdF9jbG9zZSA9IDE7CkBAIC00NjIsNyArNDc2LDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIHdhaXQsIHVudGlsIGFsbCBkZXZpY2VzIGFyZSByZWFkeSBmb3IgdGhlIGZyZWUgb3BlcmF0aW9uICovCi0Jd2FpdF9ldmVudChjYXJkLT5zaHV0ZG93bl9zbGVlcCwgY2FyZC0+ZmlsZXMgPT0gTlVMTCk7CisJd2FpdF9ldmVudChjYXJkLT5zaHV0ZG93bl9zbGVlcCwgbGlzdF9lbXB0eSgmY2FyZC0+ZmlsZXNfbGlzdCkpOwogCXNuZF9jYXJkX2RvX2ZyZWUoY2FyZCk7CiAJcmV0dXJuIDA7CiB9CkBAIC04MDksMTUgKzgyMywxMyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAltZmlsZS0+ZmlsZSA9IGZpbGU7CiAJbWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wID0gTlVMTDsKLQltZmlsZS0+bmV4dCA9IE5VTEw7CiAJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKIAlpZiAoY2FyZC0+c2h1dGRvd24pIHsKIAkJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOwogCQlrZnJlZShtZmlsZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQltZmlsZS0+bmV4dCA9IGNhcmQtPmZpbGVzOwotCWNhcmQtPmZpbGVzID0gbWZpbGU7CisJbGlzdF9hZGQoJm1maWxlLT5saXN0LCAmY2FyZC0+ZmlsZXNfbGlzdCk7CiAJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOwogCXJldHVybiAwOwogfQpAQCAtODM5LDI5ICs4NTEsMjAgQEAKICAqLwogaW50IHNuZF9jYXJkX2ZpbGVfcmVtb3ZlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHNuZF9tb25pdG9yX2ZpbGUgKm1maWxlLCAqcGZpbGUgPSBOVUxMOworCXN0cnVjdCBzbmRfbW9uaXRvcl9maWxlICptZmlsZSwgKmZvdW5kID0gTlVMTDsKIAlpbnQgbGFzdF9jbG9zZSA9IDA7CiAKIAlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOwotCW1maWxlID0gY2FyZC0+ZmlsZXM7Ci0Jd2hpbGUgKG1maWxlKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtZmlsZSwgJmNhcmQtPmZpbGVzX2xpc3QsIGxpc3QpIHsKIAkJaWYgKG1maWxlLT5maWxlID09IGZpbGUpIHsKLQkJCWlmIChwZmlsZSkKLQkJCQlwZmlsZS0+bmV4dCA9IG1maWxlLT5uZXh0OwotCQkJZWxzZQotCQkJCWNhcmQtPmZpbGVzID0gbWZpbGUtPm5leHQ7CisJCQlsaXN0X2RlbCgmbWZpbGUtPmxpc3QpOworCQkJaWYgKG1maWxlLT5kaXNjb25uZWN0ZWRfZl9vcCkKKwkJCQlmb3BzX3B1dChtZmlsZS0+ZGlzY29ubmVjdGVkX2Zfb3ApOworCQkJZm91bmQgPSBtZmlsZTsKIAkJCWJyZWFrOwogCQl9Ci0JCXBmaWxlID0gbWZpbGU7Ci0JCW1maWxlID0gbWZpbGUtPm5leHQ7CiAJfQotCWlmIChtZmlsZSAmJiBtZmlsZS0+ZGlzY29ubmVjdGVkX2Zfb3ApIHsKLQkJZm9wc19wdXQobWZpbGUtPmRpc2Nvbm5lY3RlZF9mX29wKTsKLQkJc3Bpbl9sb2NrKCZzaHV0ZG93bl9sb2NrKTsKLQkJbGlzdF9kZWwoJm1maWxlLT5zaHV0ZG93bl9saXN0KTsKLQkJc3Bpbl91bmxvY2soJnNodXRkb3duX2xvY2spOwotCX0KLQlpZiAoY2FyZC0+ZmlsZXMgPT0gTlVMTCkKKwlpZiAobGlzdF9lbXB0eSgmY2FyZC0+ZmlsZXNfbGlzdCkpCiAJCWxhc3RfY2xvc2UgPSAxOwogCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKIAlpZiAobGFzdF9jbG9zZSkgewpAQCAtODY5LDExICs4NzIsMTEgQEAKIAkJaWYgKGNhcmQtPmZyZWVfb25fbGFzdF9jbG9zZSkKIAkJCXNuZF9jYXJkX2RvX2ZyZWUoY2FyZCk7CiAJfQotCWlmICghbWZpbGUpIHsKKwlpZiAoIWZvdW5kKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgIkFMU0EgY2FyZCBmaWxlIHJlbW92ZSBwcm9ibGVtICglcClcbiIsIGZpbGUpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0Ja2ZyZWUobWZpbGUpOworCWtmcmVlKGZvdW5kKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9qYWNrLmMgYi9zb3VuZC9jb3JlL2phY2suYwppbmRleCAwNzdhODUyLi5jODI1NGM2IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2phY2suYworKysgYi9zb3VuZC9jb3JlL2phY2suYwpAQCAtMjMsNiArMjMsMTQgQEAKICNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogCitzdGF0aWMgaW50IGphY2tfdHlwZXNbXSA9IHsKKwlTV19IRUFEUEhPTkVfSU5TRVJULAorCVNXX01JQ1JPUEhPTkVfSU5TRVJULAorCVNXX0xJTkVPVVRfSU5TRVJULAorCVNXX0pBQ0tfUEhZU0lDQUxfSU5TRVJULAorCVNXX1ZJREVPT1VUX0lOU0VSVCwKK307CisKIHN0YXRpYyBpbnQgc25kX2phY2tfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX2phY2sgKmphY2sgPSBkZXZpY2UtPmRldmljZV9kYXRhOwpAQCAtNzksNiArODcsNyBAQAogewogCXN0cnVjdCBzbmRfamFjayAqamFjazsKIAlpbnQgZXJyOworCWludCBpOwogCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0gewogCQkuZGV2X2ZyZWUgPSBzbmRfamFja19kZXZfZnJlZSwKIAkJLmRldl9yZWdpc3RlciA9IHNuZF9qYWNrX2Rldl9yZWdpc3RlciwKQEAgLTEwMCwxOCArMTA5LDEwIEBACiAKIAlqYWNrLT50eXBlID0gdHlwZTsKIAotCWlmICh0eXBlICYgU05EX0pBQ0tfSEVBRFBIT05FKQotCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAotCQkJCSAgICAgU1dfSEVBRFBIT05FX0lOU0VSVCk7Ci0JaWYgKHR5cGUgJiBTTkRfSkFDS19MSU5FT1VUKQotCQlpbnB1dF9zZXRfY2FwYWJpbGl0eShqYWNrLT5pbnB1dF9kZXYsIEVWX1NXLAotCQkJCSAgICAgU1dfTElORU9VVF9JTlNFUlQpOwotCWlmICh0eXBlICYgU05EX0pBQ0tfTUlDUk9QSE9ORSkKLQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoamFjay0+aW5wdXRfZGV2LCBFVl9TVywKLQkJCQkgICAgIFNXX01JQ1JPUEhPTkVfSU5TRVJUKTsKLQlpZiAodHlwZSAmIFNORF9KQUNLX01FQ0hBTklDQUwpCi0JCWlucHV0X3NldF9jYXBhYmlsaXR5KGphY2stPmlucHV0X2RldiwgRVZfU1csCi0JCQkJICAgICBTV19KQUNLX1BIWVNJQ0FMX0lOU0VSVCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoamFja190eXBlcyk7IGkrKykKKwkJaWYgKHR5cGUgJiAoMSA8PCBpKSkKKwkJCWlucHV0X3NldF9jYXBhYmlsaXR5KGphY2stPmlucHV0X2RldiwgRVZfU1csCisJCQkJCSAgICAgamFja190eXBlc1tpXSk7CiAKIAllcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfSkFDSywgamFjaywgJm9wcyk7CiAJaWYgKGVyciA8IDApCkBAIC0xNTQsMjEgKzE1NSwxNyBAQAogICovCiB2b2lkIHNuZF9qYWNrX3JlcG9ydChzdHJ1Y3Qgc25kX2phY2sgKmphY2ssIGludCBzdGF0dXMpCiB7CisJaW50IGk7CisKIAlpZiAoIWphY2spCiAJCXJldHVybjsKIAotCWlmIChqYWNrLT50eXBlICYgU05EX0pBQ0tfSEVBRFBIT05FKQotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgU1dfSEVBRFBIT05FX0lOU0VSVCwKLQkJCQkgICAgc3RhdHVzICYgU05EX0pBQ0tfSEVBRFBIT05FKTsKLQlpZiAoamFjay0+dHlwZSAmIFNORF9KQUNLX0xJTkVPVVQpCi0JCWlucHV0X3JlcG9ydF9zd2l0Y2goamFjay0+aW5wdXRfZGV2LCBTV19MSU5FT1VUX0lOU0VSVCwKLQkJCQkgICAgc3RhdHVzICYgU05EX0pBQ0tfTElORU9VVCk7Ci0JaWYgKGphY2stPnR5cGUgJiBTTkRfSkFDS19NSUNST1BIT05FKQotCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgU1dfTUlDUk9QSE9ORV9JTlNFUlQsCi0JCQkJICAgIHN0YXR1cyAmIFNORF9KQUNLX01JQ1JPUEhPTkUpOwotCWlmIChqYWNrLT50eXBlICYgU05EX0pBQ0tfTUVDSEFOSUNBTCkKLQkJaW5wdXRfcmVwb3J0X3N3aXRjaChqYWNrLT5pbnB1dF9kZXYsIFNXX0pBQ0tfUEhZU0lDQUxfSU5TRVJULAotCQkJCSAgICBzdGF0dXMgJiBTTkRfSkFDS19NRUNIQU5JQ0FMKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShqYWNrX3R5cGVzKTsgaSsrKSB7CisJCWludCB0ZXN0Yml0ID0gMSA8PCBpOworCQlpZiAoamFjay0+dHlwZSAmIHRlc3RiaXQpCisJCQlpbnB1dF9yZXBvcnRfc3dpdGNoKGphY2stPmlucHV0X2RldiwgamFja190eXBlc1tpXSwKKwkJCQkJICAgIHN0YXR1cyAmIHRlc3RiaXQpOworCX0KIAogCWlucHV0X3N5bmMoamFjay0+aW5wdXRfZGV2KTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWlzYy5jIGIvc291bmQvY29yZS9taXNjLmMKaW5kZXggMzg1MjRmNi4uYTk3MTBlMCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9taXNjLmMKKysrIGIvc291bmQvY29yZS9taXNjLmMKQEAgLTk1LDEyICs5NSwxNCBAQAogewogCWNvbnN0IHN0cnVjdCBzbmRfcGNpX3F1aXJrICpxOwogCi0JZm9yIChxID0gbGlzdDsgcS0+c3VidmVuZG9yOyBxKyspCi0JCWlmIChxLT5zdWJ2ZW5kb3IgPT0gcGNpLT5zdWJzeXN0ZW1fdmVuZG9yICYmCi0JCSAgICAoIXEtPnN1YmRldmljZSB8fCBxLT5zdWJkZXZpY2UgPT0gcGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSkKKwlmb3IgKHEgPSBsaXN0OyBxLT5zdWJ2ZW5kb3I7IHErKykgeworCQlpZiAocS0+c3VidmVuZG9yICE9IHBjaS0+c3Vic3lzdGVtX3ZlbmRvcikKKwkJCWNvbnRpbnVlOworCQlpZiAoIXEtPnN1YmRldmljZSB8fAorCQkgICAgKHBjaS0+c3Vic3lzdGVtX2RldmljZSAmIHEtPnN1YmRldmljZV9tYXNrKSA9PSBxLT5zdWJkZXZpY2UpCiAJCQlyZXR1cm4gcTsKKwl9CiAJcmV0dXJuIE5VTEw7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc25kX3BjaV9xdWlya19sb29rdXApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKaW5kZXggNjk5ZDI4OS4uZGRhMDAwYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwpAQCAtMTE2MCw5ICsxMTYwLDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogd3JpdGU6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGU6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHdyaXRlOiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHdyaXRlOiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fb3NzX3ByZXBhcmUoc3Vic3RyZWFtKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTE5Niw5ICsxMTk4LDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogcmVhZDogcmVjb3ZlcmluZyBmcm9tIFhSVU5cbiIpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkOiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CiAJCQllbHNlCi0JCQkJcHJpbnRrKCJwY21fb3NzOiByZWFkOiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWQ6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKICNlbmRpZgogCQkJcmV0ID0gc25kX3BjbV9rZXJuZWxfaW9jdGwoc3Vic3RyZWFtLCBTTkRSVl9QQ01fSU9DVExfRFJBSU4sIE5VTEwpOwogCQkJaWYgKHJldCA8IDApCkBAIC0xMjQyLDkgKzEyNDYsMTEgQEAKIAkJICAgIHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1NVU1BFTkRFRCkgewogI2lmZGVmIE9TU19ERUJVRwogCQkJaWYgKHJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPT0gU05EUlZfUENNX1NUQVRFX1hSVU4pCi0JCQkJcHJpbnRrKCJwY21fb3NzOiB3cml0ZXY6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGV2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gWFJVTlxuIik7CiAJCQllbHNlCi0JCQkJcHJpbnRrKCJwY21fb3NzOiB3cml0ZXY6IHJlY292ZXJpbmcgZnJvbSBTVVNQRU5EXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogd3JpdGV2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fb3NzX3ByZXBhcmUoc3Vic3RyZWFtKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTI3OCw5ICsxMjg0LDExIEBACiAJCSAgICBydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQpIHsKICNpZmRlZiBPU1NfREVCVUcKIAkJCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9YUlVOKQotCQkJCXByaW50aygicGNtX29zczogcmVhZHY6IHJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogcmVhZHY6ICIKKwkJCQkgICAgICAgInJlY292ZXJpbmcgZnJvbSBYUlVOXG4iKTsKIAkJCWVsc2UKLQkJCQlwcmludGsoInBjbV9vc3M6IHJlYWR2OiByZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHJlYWR2OiAiCisJCQkJICAgICAgICJyZWNvdmVyaW5nIGZyb20gU1VTUEVORFxuIik7CiAjZW5kaWYKIAkJCXJldCA9IHNuZF9wY21fa2VybmVsX2lvY3RsKHN1YnN0cmVhbSwgU05EUlZfUENNX0lPQ1RMX0RSQUlOLCBOVUxMKTsKIAkJCWlmIChyZXQgPCAwKQpAQCAtMTUzMyw3ICsxNTQxLDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CiAJYWRkX3dhaXRfcXVldWUoJnJ1bnRpbWUtPnNsZWVwLCAmd2FpdCk7CiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJzeW5jMTogc2l6ZSA9ICVsaVxuIiwgc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInN5bmMxOiBzaXplID0gJWxpXG4iLCBzaXplKTsKICNlbmRpZgogCXdoaWxlICgxKSB7CiAJCXJlc3VsdCA9IHNuZF9wY21fb3NzX3dyaXRlMihzdWJzdHJlYW0sIHJ1bnRpbWUtPm9zcy5idWZmZXIsIHNpemUsIDEpOwpAQCAtMTU5MCw3ICsxNTk4LDcgQEAKIAkJbXV0ZXhfbG9jaygmcnVudGltZS0+b3NzLnBhcmFtc19sb2NrKTsKIAkJaWYgKHJ1bnRpbWUtPm9zcy5idWZmZXJfdXNlZCA+IDApIHsKICNpZmRlZiBPU1NfREVCVUcKLQkJCXByaW50aygic3luYzogYnVmZmVyX3VzZWRcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInN5bmM6IGJ1ZmZlcl91c2VkXG4iKTsKICNlbmRpZgogCQkJc2l6ZSA9ICg4ICogKHJ1bnRpbWUtPm9zcy5wZXJpb2RfYnl0ZXMgLSBydW50aW1lLT5vc3MuYnVmZmVyX3VzZWQpICsgNykgLyB3aWR0aDsKIAkJCXNuZF9wY21fZm9ybWF0X3NldF9zaWxlbmNlKGZvcm1hdCwKQEAgLTE2MDMsNyArMTYxMSw3IEBACiAJCQl9CiAJCX0gZWxzZSBpZiAocnVudGltZS0+b3NzLnBlcmlvZF9wdHIgPiAwKSB7CiAjaWZkZWYgT1NTX0RFQlVHCi0JCQlwcmludGsoInN5bmM6IHBlcmlvZF9wdHJcbiIpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInN5bmM6IHBlcmlvZF9wdHJcbiIpOwogI2VuZGlmCiAJCQlzaXplID0gcnVudGltZS0+b3NzLnBlcmlvZF9ieXRlcyAtIHJ1bnRpbWUtPm9zcy5wZXJpb2RfcHRyOwogCQkJc25kX3BjbV9mb3JtYXRfc2V0X3NpbGVuY2UoZm9ybWF0LApAQCAtMTg5NSw3ICsxOTAzLDkgQEAKIAogc3RhdGljIGludCBzbmRfcGNtX29zc19ub25ibG9jayhzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7CisJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCWZpbGUtPmZfZmxhZ3MgfD0gT19OT05CTE9DSzsKKwlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk1Miw3ICsxOTYyLDcgQEAKIAlpbnQgZXJyLCBjbWQ7CiAKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IHRyaWdnZXIgPSAweCV4XG4iLCB0cmlnZ2VyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogdHJpZ2dlciA9IDB4JXhcbiIsIHRyaWdnZXIpOwogI2VuZGlmCiAJCiAJcHN1YnN0cmVhbSA9IHBjbV9vc3NfZmlsZS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXTsKQEAgLTIxNzAsNyArMjE4MCw5IEBACiAJfQogCiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBzcGFjZTogYnl0ZXMgPSAlaSwgZnJhZ21lbnRzID0gJWksIGZyYWdzdG90YWwgPSAlaSwgZnJhZ3NpemUgPSAlaVxuIiwgaW5mby5ieXRlcywgaW5mby5mcmFnbWVudHMsIGluZm8uZnJhZ3N0b3RhbCwgaW5mby5mcmFnc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHNwYWNlOiBieXRlcyA9ICVpLCBmcmFnbWVudHMgPSAlaSwgIgorCSAgICAgICAiZnJhZ3N0b3RhbCA9ICVpLCBmcmFnc2l6ZSA9ICVpXG4iLAorCSAgICAgICBpbmZvLmJ5dGVzLCBpbmZvLmZyYWdtZW50cywgaW5mby5mcmFnc3RvdGFsLCBpbmZvLmZyYWdzaXplKTsKICNlbmRpZgogCWlmIChjb3B5X3RvX3VzZXIoX2luZm8sICZpbmZvLCBzaXplb2YoaW5mbykpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI0NzMsNyArMjQ4NSw3IEBACiAJaWYgKCgoY21kID4+IDgpICYgMHhmZikgIT0gJ1AnKQogCQlyZXR1cm4gLUVJTlZBTDsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IGlvY3RsID0gMHgleFxuIiwgY21kKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogaW9jdGwgPSAweCV4XG4iLCBjbWQpOwogI2VuZGlmCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORENUTF9EU1BfUkVTRVQ6CkBAIC0yNjI3LDcgKzI2MzksOCBAQAogI2Vsc2UKIAl7CiAJCXNzaXplX3QgcmVzID0gc25kX3BjbV9vc3NfcmVhZDEoc3Vic3RyZWFtLCBidWYsIGNvdW50KTsKLQkJcHJpbnRrKCJwY21fb3NzOiByZWFkICVsaSBieXRlcyAocmV0dXJuZWQgJWxpIGJ5dGVzKVxuIiwgKGxvbmcpY291bnQsIChsb25nKXJlcyk7CisJCXByaW50ayhLRVJOX0RFQlVHICJwY21fb3NzOiByZWFkICVsaSBieXRlcyAiCisJCSAgICAgICAiKHJldHVybmVkICVsaSBieXRlcylcbiIsIChsb25nKWNvdW50LCAobG9uZylyZXMpOwogCQlyZXR1cm4gcmVzOwogCX0KICNlbmRpZgpAQCAtMjY0Niw3ICsyNjU5LDggQEAKIAlzdWJzdHJlYW0tPmZfZmxhZ3MgPSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKIAlyZXN1bHQgPSBzbmRfcGNtX29zc193cml0ZTEoc3Vic3RyZWFtLCBidWYsIGNvdW50KTsKICNpZmRlZiBPU1NfREVCVUcKLQlwcmludGsoInBjbV9vc3M6IHdyaXRlICVsaSBieXRlcyAod3JvdGUgJWxpIGJ5dGVzKVxuIiwgKGxvbmcpY291bnQsIChsb25nKXJlc3VsdCk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBjbV9vc3M6IHdyaXRlICVsaSBieXRlcyAod3JvdGUgJWxpIGJ5dGVzKVxuIiwKKwkgICAgICAgKGxvbmcpY291bnQsIChsb25nKXJlc3VsdCk7CiAjZW5kaWYKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMjcyMCw3ICsyNzM0LDcgQEAKIAlpbnQgZXJyOwogCiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBtbWFwIGJlZ2luXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogbW1hcCBiZWdpblxuIik7CiAjZW5kaWYKIAlwY21fb3NzX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3dpdGNoICgoYXJlYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFKSkpIHsKQEAgLTI3NzAsNyArMjc4NCw4IEBACiAJcnVudGltZS0+c2lsZW5jZV90aHJlc2hvbGQgPSAwOwogCXJ1bnRpbWUtPnNpbGVuY2Vfc2l6ZSA9IDA7CiAjaWZkZWYgT1NTX0RFQlVHCi0JcHJpbnRrKCJwY21fb3NzOiBtbWFwIG9rLCBieXRlcyA9IDB4JXhcbiIsIHJ1bnRpbWUtPm9zcy5tbWFwX2J5dGVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGNtX29zczogbW1hcCBvaywgYnl0ZXMgPSAweCV4XG4iLAorCSAgICAgICBydW50aW1lLT5vc3MubW1hcF9ieXRlcyk7CiAjZW5kaWYKIAkvKiBJbiBtbWFwIG1vZGUgd2UgbmV2ZXIgc3RvcCAqLwogCXJ1bnRpbWUtPnN0b3BfdGhyZXNob2xkID0gcnVudGltZS0+Ym91bmRhcnk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmggYi9zb3VuZC9jb3JlL29zcy9wY21fcGx1Z2luLmgKaW5kZXggY2EyZjRjMy4uYjlhZmFiNiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX3BsdWdpbi5oCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9wbHVnaW4uaApAQCAtMTc2LDkgKzE3Niw5IEBACiAjZW5kaWYKIAogI2lmZGVmIFBMVUdJTl9ERUJVRwotI2RlZmluZSBwZHByaW50ZiggZm10LCBhcmdzLi4uICkgcHJpbnRrKCAicGx1Z2luOiAiIGZtdCwgIyNhcmdzKQorI2RlZmluZSBwZHByaW50ZihmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHICJwbHVnaW46ICIgZm10LCAjI2FyZ3MpCiAjZWxzZQotI2RlZmluZSBwZHByaW50ZiggZm10LCBhcmdzLi4uICkgCisjZGVmaW5lIHBkcHJpbnRmKGZtdCwgYXJncy4uLikKICNlbmRpZgogCiAjZW5kaWYJCQkJLyogX19QQ01fUExVR0lOX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtLmMgYi9zb3VuZC9jb3JlL3BjbS5jCmluZGV4IDE5MmE0MzMuLjE0NTkzMWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtNjY3LDcgKzY2Nyw2IEBACiAJCXNwaW5fbG9ja19pbml0KCZzdWJzdHJlYW0tPnNlbGZfZ3JvdXAubG9jayk7CiAJCUlOSVRfTElTVF9IRUFEKCZzdWJzdHJlYW0tPnNlbGZfZ3JvdXAuc3Vic3RyZWFtcyk7CiAJCWxpc3RfYWRkX3RhaWwoJnN1YnN0cmVhbS0+bGlua19saXN0LCAmc3Vic3RyZWFtLT5zZWxmX2dyb3VwLnN1YnN0cmVhbXMpOwotCQlzcGluX2xvY2tfaW5pdCgmc3Vic3RyZWFtLT50aW1lcl9sb2NrKTsKIAkJYXRvbWljX3NldCgmc3Vic3RyZWFtLT5tbWFwX2NvdW50LCAwKTsKIAkJcHJldiA9IHN1YnN0cmVhbTsKIAl9CkBAIC02OTIsNyArNjkxLDcgQEAKICAqCiAgKiBSZXR1cm5zIHplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiAgKi8KLWludCBzbmRfcGNtX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNoYXIgKmlkLCBpbnQgZGV2aWNlLAoraW50IHNuZF9wY21fbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgY29uc3QgY2hhciAqaWQsIGludCBkZXZpY2UsCiAJCWludCBwbGF5YmFja19jb3VudCwgaW50IGNhcHR1cmVfY291bnQsCiAJICAgICAgICBzdHJ1Y3Qgc25kX3BjbSAqKiBycGNtKQogewpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbGliLmMgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwppbmRleCA5MjE2OTEwLi5mYmIyZTM5IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9saWIuYworKysgYi9zb3VuZC9jb3JlL3BjbV9saWIuYwpAQCAtMTI1LDIzICsxMjUsMzIgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfU05EX1BDTV9YUlVOX0RFQlVHCisjZGVmaW5lIHhydW5fZGVidWcoc3Vic3RyZWFtKQkoKHN1YnN0cmVhbSktPnBzdHItPnhydW5fZGVidWcpCisjZWxzZQorI2RlZmluZSB4cnVuX2RlYnVnKHN1YnN0cmVhbSkJMAorI2VuZGlmCisKKyNkZWZpbmUgZHVtcF9zdGFja19vbl94cnVuKHN1YnN0cmVhbSkgZG8gewlcCisJCWlmICh4cnVuX2RlYnVnKHN1YnN0cmVhbSkgPiAxKQlcCisJCQlkdW1wX3N0YWNrKCk7CQlcCisJfSB3aGlsZSAoMCkKKwogc3RhdGljIHZvaWQgeHJ1bihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzbmRfcGNtX3N0b3Aoc3Vic3RyZWFtLCBTTkRSVl9QQ01fU1RBVEVfWFJVTik7Ci0jaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRwotCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcpIHsKKwlpZiAoeHJ1bl9kZWJ1ZyhzdWJzdHJlYW0pKSB7CiAJCXNuZF9wcmludGQoS0VSTl9ERUJVRyAiWFJVTjogcGNtQyVkRCVkJWNcbiIsCiAJCQkgICBzdWJzdHJlYW0tPnBjbS0+Y2FyZC0+bnVtYmVyLAogCQkJICAgc3Vic3RyZWFtLT5wY20tPmRldmljZSwKIAkJCSAgIHN1YnN0cmVhbS0+c3RyZWFtID8gJ2MnIDogJ3AnKTsKLQkJaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZyA+IDEpCi0JCQlkdW1wX3N0YWNrKCk7CisJCWR1bXBfc3RhY2tfb25feHJ1bihzdWJzdHJlYW0pOwogCX0KLSNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIHNuZF9wY21fdWZyYW1lc190IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3Moc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkJCQkJICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQorc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQogewogCXNuZF9wY21fdWZyYW1lc190IHBvczsKIApAQCAtMTUwLDE3ICsxNTksMjEgQEAKIAlwb3MgPSBzdWJzdHJlYW0tPm9wcy0+cG9pbnRlcihzdWJzdHJlYW0pOwogCWlmIChwb3MgPT0gU05EUlZfUENNX1BPU19YUlVOKQogCQlyZXR1cm4gcG9zOyAvKiBYUlVOICovCi0jaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmIChwb3MgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAgIkJVRzogc3RyZWFtID0gJWksIHBvcyA9IDB4JWx4LCBidWZmZXIgc2l6ZSA9IDB4JWx4LCBwZXJpb2Qgc2l6ZSA9IDB4JWx4XG4iLCBzdWJzdHJlYW0tPnN0cmVhbSwgcG9zLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUpOworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICAiQlVHOiBzdHJlYW0gPSAlaSwgcG9zID0gMHglbHgsICIKKwkJCQkgICAiYnVmZmVyIHNpemUgPSAweCVseCwgcGVyaW9kIHNpemUgPSAweCVseFxuIiwKKwkJCQkgICBzdWJzdHJlYW0tPnN0cmVhbSwgcG9zLCBydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkJCQkgICBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCX0KKwkJcG9zID0gMDsKIAl9Ci0jZW5kaWYKIAlwb3MgLT0gcG9zICUgcnVudGltZS0+bWluX2FsaWduOwogCXJldHVybiBwb3M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQkgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCitzdGF0aWMgaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCiB7CiAJc25kX3BjbV91ZnJhbWVzX3QgYXZhaWw7CiAKQEAgLTE4MiwxMSArMTk1LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNuZF9wY21fdXBkYXRlX2h3X3B0cl9pbnRlcnJ1cHQoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCisjZGVmaW5lIGh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIGZtdCwgYXJncy4uLikJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJaWYgKHhydW5fZGVidWcoc3Vic3RyZWFtKSkgewkJCQlcCisJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CQkJXAorCQkJCXNuZF9wcmludGQoIlBDTTogIiBmbXQsICMjYXJncyk7CVwKKwkJCX0JCQkJCQlcCisJCQlkdW1wX3N0YWNrX29uX3hydW4oc3Vic3RyZWFtKTsJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgc25kX3BjbV91cGRhdGVfaHdfcHRyX2ludGVycnVwdChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXNuZF9wY21fdWZyYW1lc190IHBvczsKLQlzbmRfcGNtX3VmcmFtZXNfdCBuZXdfaHdfcHRyLCBod19wdHJfaW50ZXJydXB0OworCXNuZF9wY21fdWZyYW1lc190IG5ld19od19wdHIsIGh3X3B0cl9pbnRlcnJ1cHQsIGh3X2Jhc2U7CiAJc25kX3BjbV9zZnJhbWVzX3QgZGVsdGE7CiAKIAlwb3MgPSBzbmRfcGNtX3VwZGF0ZV9od19wdHJfcG9zKHN1YnN0cmVhbSwgcnVudGltZSk7CkBAIC0xOTQsMzYgKzIxNyw1MyBAQAogCQl4cnVuKHN1YnN0cmVhbSk7CiAJCXJldHVybiAtRVBJUEU7CiAJfQotCWlmIChydW50aW1lLT5wZXJpb2Rfc2l6ZSA9PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJZ290byBfX25leHRfYnVmOwotCW5ld19od19wdHIgPSBydW50aW1lLT5od19wdHJfYmFzZSArIHBvczsKKwlod19iYXNlID0gcnVudGltZS0+aHdfcHRyX2Jhc2U7CisJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7CiAJaHdfcHRyX2ludGVycnVwdCA9IHJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgKyBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKLQotCWRlbHRhID0gaHdfcHRyX2ludGVycnVwdCAtIG5ld19od19wdHI7Ci0JaWYgKGRlbHRhID4gMCkgewotCQlpZiAoKHNuZF9wY21fdWZyYW1lc190KWRlbHRhIDwgcnVudGltZS0+YnVmZmVyX3NpemUgLyAyKSB7Ci0jaWZkZWYgQ09ORklHX1NORF9QQ01fWFJVTl9ERUJVRwotCQkJaWYgKHJ1bnRpbWUtPnBlcmlvZHMgPiAxICYmIHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZykgewotCQkJCXNuZF9wcmludGQoS0VSTl9FUlIgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSBbMV0gKHN0cmVhbSA9ICVpLCBkZWx0YTogLSVsZCwgbWF4IGppdHRlciA9ICVsZCk6IHdyb25nIGludGVycnVwdCBhY2tub3dsZWRnZT9cbiIsIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZykgZGVsdGEsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC8gMik7Ci0JCQkJaWYgKHN1YnN0cmVhbS0+cHN0ci0+eHJ1bl9kZWJ1ZyA+IDEpCi0JCQkJCWR1bXBfc3RhY2soKTsKLQkJCX0KLSNlbmRpZgotCQkJcmV0dXJuIDA7Ci0JCX0KLQkgICAgICBfX25leHRfYnVmOgotCQlydW50aW1lLT5od19wdHJfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkJaWYgKHJ1bnRpbWUtPmh3X3B0cl9iYXNlID09IHJ1bnRpbWUtPmJvdW5kYXJ5KQotCQkJcnVudGltZS0+aHdfcHRyX2Jhc2UgPSAwOwotCQluZXdfaHdfcHRyID0gcnVudGltZS0+aHdfcHRyX2Jhc2UgKyBwb3M7CisJZGVsdGEgPSBuZXdfaHdfcHRyIC0gaHdfcHRyX2ludGVycnVwdDsKKwlpZiAoaHdfcHRyX2ludGVycnVwdCA+PSBydW50aW1lLT5ib3VuZGFyeSkgeworCQlod19wdHJfaW50ZXJydXB0IC09IHJ1bnRpbWUtPmJvdW5kYXJ5OworCQlpZiAoaHdfYmFzZSA8IHJ1bnRpbWUtPmJvdW5kYXJ5IC8gMikKKwkJCS8qIGh3X2Jhc2Ugd2FzIGFscmVhZHkgbGFwcGVkOyByZWNhbGMgZGVsdGEgKi8KKwkJCWRlbHRhID0gbmV3X2h3X3B0ciAtIGh3X3B0cl9pbnRlcnJ1cHQ7CiAJfQotCisJaWYgKGRlbHRhIDwgMCkgeworCQlkZWx0YSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJaWYgKGRlbHRhIDwgMCkgeworCQkJaHdfcHRyX2Vycm9yKHN1YnN0cmVhbSwgCisJCQkJICAgICAiVW5leHBlY3RlZCBod19wb2ludGVyIHZhbHVlICIKKwkJCQkgICAgICIoc3RyZWFtPSVpLCBwb3M9JWxkLCBpbnRyX3B0cj0lbGQpXG4iLAorCQkJCSAgICAgc3Vic3RyZWFtLT5zdHJlYW0sIChsb25nKXBvcywKKwkJCQkgICAgIChsb25nKWh3X3B0cl9pbnRlcnJ1cHQpOworCQkJLyogcmViYXNlIHRvIGludGVycnVwdCBwb3NpdGlvbiAqLworCQkJaHdfYmFzZSA9IG5ld19od19wdHIgPSBod19wdHJfaW50ZXJydXB0OworCQkJLyogYWxpZ24gaHdfYmFzZSB0byBidWZmZXJfc2l6ZSAqLworCQkJaHdfYmFzZSAtPSBod19iYXNlICUgcnVudGltZS0+YnVmZmVyX3NpemU7CisJCQlkZWx0YSA9IDA7CisJCX0gZWxzZSB7CisJCQlod19iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQkJaWYgKGh3X2Jhc2UgPj0gcnVudGltZS0+Ym91bmRhcnkpCisJCQkJaHdfYmFzZSA9IDA7CisJCQluZXdfaHdfcHRyID0gaHdfYmFzZSArIHBvczsKKwkJfQorCX0KKwlpZiAoZGVsdGEgPiBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgeworCQlod19wdHJfZXJyb3Ioc3Vic3RyZWFtLAorCQkJICAgICAiTG9zdCBpbnRlcnJ1cHRzPyAiCisJCQkgICAgICIoc3RyZWFtPSVpLCBkZWx0YT0lbGQsIGludHJfcHRyPSVsZClcbiIsCisJCQkgICAgIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZylkZWx0YSwKKwkJCSAgICAgKGxvbmcpaHdfcHRyX2ludGVycnVwdCk7CisJCS8qIHJlYmFzZSBod19wdHJfaW50ZXJydXB0ICovCisJCWh3X3B0cl9pbnRlcnJ1cHQgPQorCQkJbmV3X2h3X3B0ciAtIG5ld19od19wdHIgJSBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwl9CiAJaWYgKHN1YnN0cmVhbS0+c3RyZWFtID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0sgJiYKIAkgICAgcnVudGltZS0+c2lsZW5jZV9zaXplID4gMCkKIAkJc25kX3BjbV9wbGF5YmFja19zaWxlbmNlKHN1YnN0cmVhbSwgbmV3X2h3X3B0cik7CiAKKwlydW50aW1lLT5od19wdHJfYmFzZSA9IGh3X2Jhc2U7CiAJcnVudGltZS0+c3RhdHVzLT5od19wdHIgPSBuZXdfaHdfcHRyOwotCXJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgPSBuZXdfaHdfcHRyIC0gbmV3X2h3X3B0ciAlIHJ1bnRpbWUtPnBlcmlvZF9zaXplOworCXJ1bnRpbWUtPmh3X3B0cl9pbnRlcnJ1cHQgPSBod19wdHJfaW50ZXJydXB0OwogCiAJcmV0dXJuIHNuZF9wY21fdXBkYXRlX2h3X3B0cl9wb3N0KHN1YnN0cmVhbSwgcnVudGltZSk7CiB9CkBAIC0yMzMsNyArMjczLDcgQEAKIHsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCXNuZF9wY21fdWZyYW1lc190IHBvczsKLQlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfaHdfcHRyLCBuZXdfaHdfcHRyOworCXNuZF9wY21fdWZyYW1lc190IG9sZF9od19wdHIsIG5ld19od19wdHIsIGh3X2Jhc2U7CiAJc25kX3BjbV9zZnJhbWVzX3QgZGVsdGE7CiAKIAlvbGRfaHdfcHRyID0gcnVudGltZS0+c3RhdHVzLT5od19wdHI7CkBAIC0yNDIsMjkgKzI4MiwzOCBAQAogCQl4cnVuKHN1YnN0cmVhbSk7CiAJCXJldHVybiAtRVBJUEU7CiAJfQotCW5ld19od19wdHIgPSBydW50aW1lLT5od19wdHJfYmFzZSArIHBvczsKKwlod19iYXNlID0gcnVudGltZS0+aHdfcHRyX2Jhc2U7CisJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7CiAKLQlkZWx0YSA9IG9sZF9od19wdHIgLSBuZXdfaHdfcHRyOwotCWlmIChkZWx0YSA+IDApIHsKLQkJaWYgKChzbmRfcGNtX3VmcmFtZXNfdClkZWx0YSA8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC8gMikgewotI2lmZGVmIENPTkZJR19TTkRfUENNX1hSVU5fREVCVUcKLQkJCWlmIChydW50aW1lLT5wZXJpb2RzID4gMiAmJiBzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcpIHsKLQkJCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJVbmV4cGVjdGVkIGh3X3BvaW50ZXIgdmFsdWUgWzJdIChzdHJlYW0gPSAlaSwgZGVsdGE6IC0lbGQsIG1heCBqaXR0ZXIgPSAlbGQpOiB3cm9uZyBpbnRlcnJ1cHQgYWNrbm93bGVkZ2U/XG4iLCBzdWJzdHJlYW0tPnN0cmVhbSwgKGxvbmcpIGRlbHRhLCBydW50aW1lLT5idWZmZXJfc2l6ZSAvIDIpOwotCQkJCWlmIChzdWJzdHJlYW0tPnBzdHItPnhydW5fZGVidWcgPiAxKQotCQkJCQlkdW1wX3N0YWNrKCk7Ci0JCQl9Ci0jZW5kaWYKKwlkZWx0YSA9IG5ld19od19wdHIgLSBvbGRfaHdfcHRyOworCWlmIChkZWx0YSA8IDApIHsKKwkJZGVsdGEgKz0gcnVudGltZS0+YnVmZmVyX3NpemU7CisJCWlmIChkZWx0YSA8IDApIHsKKwkJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sIAorCQkJCSAgICAgIlVuZXhwZWN0ZWQgaHdfcG9pbnRlciB2YWx1ZSBbMl0gIgorCQkJCSAgICAgIihzdHJlYW09JWksIHBvcz0lbGQsIG9sZF9wdHI9JWxkKVxuIiwKKwkJCQkgICAgIHN1YnN0cmVhbS0+c3RyZWFtLCAobG9uZylwb3MsCisJCQkJICAgICAobG9uZylvbGRfaHdfcHRyKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCXJ1bnRpbWUtPmh3X3B0cl9iYXNlICs9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCQlpZiAocnVudGltZS0+aHdfcHRyX2Jhc2UgPT0gcnVudGltZS0+Ym91bmRhcnkpCi0JCQlydW50aW1lLT5od19wdHJfYmFzZSA9IDA7Ci0JCW5ld19od19wdHIgPSBydW50aW1lLT5od19wdHJfYmFzZSArIHBvczsKKwkJaHdfYmFzZSArPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKKwkJaWYgKGh3X2Jhc2UgPj0gcnVudGltZS0+Ym91bmRhcnkpCisJCQlod19iYXNlID0gMDsKKwkJbmV3X2h3X3B0ciA9IGh3X2Jhc2UgKyBwb3M7CisJfQorCWlmIChkZWx0YSA+IHJ1bnRpbWUtPnBlcmlvZF9zaXplICYmIHJ1bnRpbWUtPnBlcmlvZHMgPiAxKSB7CisJCWh3X3B0cl9lcnJvcihzdWJzdHJlYW0sCisJCQkgICAgICJod19wdHIgc2tpcHBpbmchICIKKwkJCSAgICAgIihwb3M9JWxkLCBkZWx0YT0lbGQsIHBlcmlvZD0lbGQpXG4iLAorCQkJICAgICAobG9uZylwb3MsIChsb25nKWRlbHRhLAorCQkJICAgICAobG9uZylydW50aW1lLT5wZXJpb2Rfc2l6ZSk7CisJCXJldHVybiAwOwogCX0KIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyAmJgogCSAgICBydW50aW1lLT5zaWxlbmNlX3NpemUgPiAwKQogCQlzbmRfcGNtX3BsYXliYWNrX3NpbGVuY2Uoc3Vic3RyZWFtLCBuZXdfaHdfcHRyKTsKIAorCXJ1bnRpbWUtPmh3X3B0cl9iYXNlID0gaHdfYmFzZTsKIAlydW50aW1lLT5zdGF0dXMtPmh3X3B0ciA9IG5ld19od19wdHI7CiAKIAlyZXR1cm4gc25kX3BjbV91cGRhdGVfaHdfcHRyX3Bvc3Qoc3Vic3RyZWFtLCBydW50aW1lKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKaW5kZXggYTc4OWVmYy4uYTE1MWZiMCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMKKysrIGIvc291bmQvY29yZS9wY21fbmF0aXZlLmMKQEAgLTE4Niw3ICsxODYsNyBAQAogCQlpZiAoIShwYXJhbXMtPnJtYXNrICYgKDEgPDwgaykpKQogCQkJY29udGludWU7CiAjaWZkZWYgUlVMRVNfREVCVUcKLQkJcHJpbnRrKCIlcyA9ICIsIHNuZF9wY21faHdfcGFyYW1fbmFtZXNba10pOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW2tdKTsKIAkJcHJpbnRrKCIlMDR4JTA0eCUwNHglMDR4IC0+ICIsIG0tPmJpdHNbM10sIG0tPmJpdHNbMl0sIG0tPmJpdHNbMV0sIG0tPmJpdHNbMF0pOwogI2VuZGlmCiAJCWNoYW5nZWQgPSBzbmRfbWFza19yZWZpbmUobSwgY29uc3Ryc19tYXNrKGNvbnN0cnMsIGspKTsKQEAgLTIwNiw3ICsyMDYsNyBAQAogCQlpZiAoIShwYXJhbXMtPnJtYXNrICYgKDEgPDwgaykpKQogCQkJY29udGludWU7CiAjaWZkZWYgUlVMRVNfREVCVUcKLQkJcHJpbnRrKCIlcyA9ICIsIHNuZF9wY21faHdfcGFyYW1fbmFtZXNba10pOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgPSAiLCBzbmRfcGNtX2h3X3BhcmFtX25hbWVzW2tdKTsKIAkJaWYgKGktPmVtcHR5KQogCQkJcHJpbnRrKCJlbXB0eSIpOwogCQllbHNlCkBAIC0yNTEsNyArMjUxLDcgQEAKIAkJCWlmICghZG9pdCkKIAkJCQljb250aW51ZTsKICNpZmRlZiBSVUxFU19ERUJVRwotCQkJcHJpbnRrKCJSdWxlICVkIFslcF06ICIsIGssIHItPmZ1bmMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIlJ1bGUgJWQgWyVwXTogIiwgaywgci0+ZnVuYyk7CiAJCQlpZiAoci0+dmFyID49IDApIHsKIAkJCQlwcmludGsoIiVzID0gIiwgc25kX3BjbV9od19wYXJhbV9uYW1lc1tyLT52YXJdKTsKIAkJCQlpZiAoaHdfaXNfbWFzayhyLT52YXIpKSB7CkBAIC0zMjQ2LDkgKzMyNDYsNyBAQAogCWVyciA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmcnVudGltZS0+ZmFzeW5jKTsKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMgYi9zb3VuZC9jb3JlL3BjbV90aW1lci5jCmluZGV4IDJjODljMDQuLmNhODA2OGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX3RpbWVyLmMKKysrIGIvc291bmQvY29yZS9wY21fdGltZXIuYwpAQCAtODUsMjUgKzg1LDE5IEBACiAKIHN0YXRpYyBpbnQgc25kX3BjbV90aW1lcl9zdGFydChzdHJ1Y3Qgc25kX3RpbWVyICogdGltZXIpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAkKIAlzdWJzdHJlYW0gPSBzbmRfdGltZXJfY2hpcCh0aW1lcik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnN0cmVhbS0+dGltZXJfbG9jaywgZmxhZ3MpOwogCXN1YnN0cmVhbS0+dGltZXJfcnVubmluZyA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3Vic3RyZWFtLT50aW1lcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3BjbV90aW1lcl9zdG9wKHN0cnVjdCBzbmRfdGltZXIgKiB0aW1lcikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCQogCXN1YnN0cmVhbSA9IHNuZF90aW1lcl9jaGlwKHRpbWVyKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3Vic3RyZWFtLT50aW1lcl9sb2NrLCBmbGFncyk7CiAJc3Vic3RyZWFtLT50aW1lcl9ydW5uaW5nID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJzdHJlYW0tPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9yYXdtaWRpLmMgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwppbmRleCAwMDI3NzdiLi40NzMyNDdjIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3Jhd21pZGkuYworKysgYi9zb3VuZC9jb3JlL3Jhd21pZGkuYwpAQCAtMjI0LDE1NiArMjI0LDE0MyBAQAogCXJldHVybiAwOwogfQogCisvKiBsb29rIGZvciBhbiBhdmFpbGFibGUgc3Vic3RyZWFtIGZvciB0aGUgZ2l2ZW4gc3RyZWFtIGRpcmVjdGlvbjsKKyAqIGlmIGEgc3BlY2lmaWMgc3ViZGV2aWNlIGlzIGdpdmVuLCB0cnkgdG8gYXNzaWduIGl0CisgKi8KK3N0YXRpYyBpbnQgYXNzaWduX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpLCBpbnQgc3ViZGV2aWNlLAorCQkJICAgIGludCBzdHJlYW0sIGludCBtb2RlLAorCQkJICAgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKipzdWJfcmV0KQoreworCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3RyICpzID0gJnJtaWRpLT5zdHJlYW1zW3N0cmVhbV07CisJc3RhdGljIHVuc2lnbmVkIGludCBpbmZvX2ZsYWdzWzJdID0geworCQlbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXSA9IFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQsCisJCVtTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0gPSBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQsCisJfTsKKworCWlmICghKHJtaWRpLT5pbmZvX2ZsYWdzICYgaW5mb19mbGFnc1tzdHJlYW1dKSkKKwkJcmV0dXJuIC1FTlhJTzsKKwlpZiAoc3ViZGV2aWNlID49IDAgJiYgc3ViZGV2aWNlID49IHMtPnN1YnN0cmVhbV9jb3VudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJaWYgKHMtPnN1YnN0cmVhbV9vcGVuZWQgPj0gcy0+c3Vic3RyZWFtX2NvdW50KQorCQlyZXR1cm4gLUVBR0FJTjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3Vic3RyZWFtLCAmcy0+c3Vic3RyZWFtcywgbGlzdCkgeworCQlpZiAoc3Vic3RyZWFtLT5vcGVuZWQpIHsKKwkJCWlmIChzdHJlYW0gPT0gU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQgfHwKKwkJCSAgICAhKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKSkKKwkJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3ViZGV2aWNlIDwgMCB8fCBzdWJkZXZpY2UgPT0gc3Vic3RyZWFtLT5udW1iZXIpIHsKKwkJCSpzdWJfcmV0ID0gc3Vic3RyZWFtOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FQUdBSU47Cit9CisKKy8qIG9wZW4gYW5kIGRvIHJlZi1jb3VudGluZyBmb3IgdGhlIGdpdmVuIHN1YnN0cmVhbSAqLworc3RhdGljIGludCBvcGVuX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpLAorCQkJICBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgIGludCBtb2RlKQoreworCWludCBlcnI7CisKKwllcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzdWJzdHJlYW0pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHN1YnN0cmVhbS0+b3BzLT5vcGVuKHN1YnN0cmVhbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJc3Vic3RyZWFtLT5vcGVuZWQgPSAxOworCWlmIChzdWJzdHJlYW0tPnVzZV9jb3VudCsrID09IDApCisJCXN1YnN0cmVhbS0+YWN0aXZlX3NlbnNpbmcgPSAxOworCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkKKwkJc3Vic3RyZWFtLT5hcHBlbmQgPSAxOworCXJtaWRpLT5zdHJlYW1zW3N1YnN0cmVhbS0+c3RyZWFtXS5zdWJzdHJlYW1fb3BlbmVkKys7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsb3NlX3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpLAorCQkJICAgIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBpbnQgY2xlYW51cCk7CisKK3N0YXRpYyBpbnQgcmF3bWlkaV9vcGVuX3ByaXYoc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSwgaW50IHN1YmRldmljZSwgaW50IG1vZGUsCisJCQkgICAgIHN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyZmlsZSkKK3sKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzaW5wdXQgPSBOVUxMLCAqc291dHB1dCA9IE5VTEw7CisJaW50IGVycjsKKworCXJmaWxlLT5pbnB1dCA9IHJmaWxlLT5vdXRwdXQgPSBOVUxMOworCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSB7CisJCWVyciA9IGFzc2lnbl9zdWJzdHJlYW0ocm1pZGksIHN1YmRldmljZSwKKwkJCQkgICAgICAgU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCisJCQkJICAgICAgIG1vZGUsICZzaW5wdXQpOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gX19lcnJvcjsKKwl9CisJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfT1VUUFVUKSB7CisJCWVyciA9IGFzc2lnbl9zdWJzdHJlYW0ocm1pZGksIHN1YmRldmljZSwKKwkJCQkgICAgICAgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULAorCQkJCSAgICAgICBtb2RlLCAmc291dHB1dCk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBfX2Vycm9yOworCX0KKworCWlmIChzaW5wdXQpIHsKKwkJZXJyID0gb3Blbl9zdWJzdHJlYW0ocm1pZGksIHNpbnB1dCwgbW9kZSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBfX2Vycm9yOworCX0KKwlpZiAoc291dHB1dCkgeworCQllcnIgPSBvcGVuX3N1YnN0cmVhbShybWlkaSwgc291dHB1dCwgbW9kZSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlpZiAoc2lucHV0KQorCQkJCWNsb3NlX3N1YnN0cmVhbShybWlkaSwgc2lucHV0LCAwKTsKKwkJCWdvdG8gX19lcnJvcjsKKwkJfQorCX0KKworCXJmaWxlLT5ybWlkaSA9IHJtaWRpOworCXJmaWxlLT5pbnB1dCA9IHNpbnB1dDsKKwlyZmlsZS0+b3V0cHV0ID0gc291dHB1dDsKKwlyZXR1cm4gMDsKKworICAgICAgX19lcnJvcjoKKwlpZiAoc2lucHV0ICYmIHNpbnB1dC0+cnVudGltZSkKKwkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNpbnB1dCk7CisJaWYgKHNvdXRwdXQgJiYgc291dHB1dC0+cnVudGltZSkKKwkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHNvdXRwdXQpOworCXJldHVybiBlcnI7Cit9CisKKy8qIGNhbGxlZCBmcm9tIHNvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMgKi8KIGludCBzbmRfcmF3bWlkaV9rZXJuZWxfb3BlbihzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UsIGludCBzdWJkZXZpY2UsCiAJCQkgICAgaW50IG1vZGUsIHN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICogcmZpbGUpCiB7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0MSwgKmxpc3QyOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnNpbnB1dCA9IE5VTEwsICpzb3V0cHV0ID0gTlVMTDsKLQlzdHJ1Y3Qgc25kX3Jhd21pZGlfcnVudGltZSAqaW5wdXQgPSBOVUxMLCAqb3V0cHV0ID0gTlVMTDsKIAlpbnQgZXJyOwogCi0JaWYgKHJmaWxlKQotCQlyZmlsZS0+aW5wdXQgPSByZmlsZS0+b3V0cHV0ID0gTlVMTDsKKwlpZiAoc25kX0JVR19PTighcmZpbGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW11dGV4X2xvY2soJnJlZ2lzdGVyX211dGV4KTsKIAlybWlkaSA9IHNuZF9yYXdtaWRpX3NlYXJjaChjYXJkLCBkZXZpY2UpOwotCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWlmIChybWlkaSA9PSBOVUxMKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gX19lcnJvcjE7CisJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKCF0cnlfbW9kdWxlX2dldChybWlkaS0+Y2FyZC0+bW9kdWxlKSkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIF9fZXJyb3IxOworCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKKwkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0JaWYgKCEobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19OT09QRU5MT0NLKSkKLQkJbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwotCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSB7Ci0JCWlmICghKHJtaWRpLT5pbmZvX2ZsYWdzICYgU05EUlZfUkFXTUlESV9JTkZPX0lOUFVUKSkgewotCQkJZXJyID0gLUVOWElPOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JCWlmIChzdWJkZXZpY2UgPj0gMCAmJiAodW5zaWduZWQgaW50KXN1YmRldmljZSA+PSBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtX2NvdW50KSB7Ci0JCQllcnIgPSAtRU5PREVWOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JCWlmIChybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtX29wZW5lZCA+PQotCQkgICAgcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLnN1YnN0cmVhbV9jb3VudCkgewotCQkJZXJyID0gLUVBR0FJTjsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCX0KLQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKLQkJaWYgKCEocm1pZGktPmluZm9fZmxhZ3MgJiBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUKSkgewotCQkJZXJyID0gLUVOWElPOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JCWlmIChzdWJkZXZpY2UgPj0gMCAmJiAodW5zaWduZWQgaW50KXN1YmRldmljZSA+PSBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbV9jb3VudCkgewotCQkJZXJyID0gLUVOT0RFVjsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCQlpZiAocm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fb3BlbmVkID49Ci0JCSAgICBybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9PVVRQVVRdLnN1YnN0cmVhbV9jb3VudCkgewotCQkJZXJyID0gLUVBR0FJTjsKLQkJCWdvdG8gX19lcnJvcjsKLQkJfQotCX0KLQlsaXN0MSA9IHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX0lOUFVUXS5zdWJzdHJlYW1zLm5leHQ7Ci0Jd2hpbGUgKDEpIHsKLQkJaWYgKGxpc3QxID09ICZybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtcykgewotCQkJc2lucHV0ID0gTlVMTDsKLQkJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSB7Ci0JCQkJZXJyID0gLUVBR0FJTjsKLQkJCQlnb3RvIF9fZXJyb3I7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQlzaW5wdXQgPSBsaXN0X2VudHJ5KGxpc3QxLCBzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtLCBsaXN0KTsKLQkJaWYgKChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKSAmJiBzaW5wdXQtPm9wZW5lZCkKLQkJCWdvdG8gX19uZXh0aTsKLQkJaWYgKHN1YmRldmljZSA8IDAgfHwgKHN1YmRldmljZSA+PSAwICYmIHN1YmRldmljZSA9PSBzaW5wdXQtPm51bWJlcikpCi0JCQlicmVhazsKLQkgICAgICBfX25leHRpOgotCQlsaXN0MSA9IGxpc3QxLT5uZXh0OwotCX0KLQlsaXN0MiA9IHJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtcy5uZXh0OwotCXdoaWxlICgxKSB7Ci0JCWlmIChsaXN0MiA9PSAmcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1zKSB7Ci0JCQlzb3V0cHV0ID0gTlVMTDsKLQkJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgewotCQkJCWVyciA9IC1FQUdBSU47Ci0JCQkJZ290byBfX2Vycm9yOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJc291dHB1dCA9IGxpc3RfZW50cnkobGlzdDIsIHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0sIGxpc3QpOwotCQlpZiAobW9kZSAmIFNORFJWX1JBV01JRElfTEZMR19PVVRQVVQpIHsKLQkJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0FQUEVORCkgewotCQkJCWlmIChzb3V0cHV0LT5vcGVuZWQgJiYgIXNvdXRwdXQtPmFwcGVuZCkKLQkJCQkJZ290byBfX25leHRvOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoc291dHB1dC0+b3BlbmVkKQotCQkJCQlnb3RvIF9fbmV4dG87Ci0JCQl9Ci0JCX0KLQkJaWYgKHN1YmRldmljZSA8IDAgfHwgKHN1YmRldmljZSA+PSAwICYmIHN1YmRldmljZSA9PSBzb3V0cHV0LT5udW1iZXIpKQotCQkJYnJlYWs7Ci0JICAgICAgX19uZXh0bzoKLQkJbGlzdDIgPSBsaXN0Mi0+bmV4dDsKLQl9Ci0JaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfSU5QVVQpIHsKLQkJaWYgKChlcnIgPSBzbmRfcmF3bWlkaV9ydW50aW1lX2NyZWF0ZShzaW5wdXQpKSA8IDApCi0JCQlnb3RvIF9fZXJyb3I7Ci0JCWlucHV0ID0gc2lucHV0LT5ydW50aW1lOwotCQlpZiAoKGVyciA9IHNpbnB1dC0+b3BzLT5vcGVuKHNpbnB1dCkpIDwgMCkKLQkJCWdvdG8gX19lcnJvcjsKLQkJc2lucHV0LT5vcGVuZWQgPSAxOwotCQlybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtX29wZW5lZCsrOwotCX0gZWxzZSB7Ci0JCXNpbnB1dCA9IE5VTEw7Ci0JfQotCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX09VVFBVVCkgewotCQlpZiAoc291dHB1dC0+b3BlbmVkKQotCQkJZ290byBfX3NraXBfb3V0cHV0OwotCQlpZiAoKGVyciA9IHNuZF9yYXdtaWRpX3J1bnRpbWVfY3JlYXRlKHNvdXRwdXQpKSA8IDApIHsKLQkJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKQotCQkJCXNpbnB1dC0+b3BzLT5jbG9zZShzaW5wdXQpOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JCW91dHB1dCA9IHNvdXRwdXQtPnJ1bnRpbWU7Ci0JCWlmICgoZXJyID0gc291dHB1dC0+b3BzLT5vcGVuKHNvdXRwdXQpKSA8IDApIHsKLQkJCWlmIChtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX0lOUFVUKQotCQkJCXNpbnB1dC0+b3BzLT5jbG9zZShzaW5wdXQpOwotCQkJZ290byBfX2Vycm9yOwotCQl9Ci0JICAgICAgX19za2lwX291dHB1dDoKLQkJc291dHB1dC0+b3BlbmVkID0gMTsKLQkJaWYgKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EKQotCQkJc291dHB1dC0+YXBwZW5kID0gMTsKLQkgICAgICAJaWYgKHNvdXRwdXQtPnVzZV9jb3VudCsrID09IDApCi0JCQlzb3V0cHV0LT5hY3RpdmVfc2Vuc2luZyA9IDE7Ci0JCXJtaWRpLT5zdHJlYW1zW1NORFJWX1JBV01JRElfU1RSRUFNX09VVFBVVF0uc3Vic3RyZWFtX29wZW5lZCsrOwotCX0gZWxzZSB7Ci0JCXNvdXRwdXQgPSBOVUxMOwotCX0KLQlpZiAoIShtb2RlICYgU05EUlZfUkFXTUlESV9MRkxHX05PT1BFTkxPQ0spKQotCQltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKLQlpZiAocmZpbGUpIHsKLQkJcmZpbGUtPnJtaWRpID0gcm1pZGk7Ci0JCXJmaWxlLT5pbnB1dCA9IHNpbnB1dDsKLQkJcmZpbGUtPm91dHB1dCA9IHNvdXRwdXQ7Ci0JfQotCXJldHVybiAwOworCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCi0gICAgICBfX2Vycm9yOgotCWlmIChpbnB1dCAhPSBOVUxMKQotCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc2lucHV0KTsKLQlpZiAob3V0cHV0ICE9IE5VTEwpCi0JCXNuZF9yYXdtaWRpX3J1bnRpbWVfZnJlZShzb3V0cHV0KTsKLQltb2R1bGVfcHV0KHJtaWRpLT5jYXJkLT5tb2R1bGUpOwotCWlmICghKG1vZGUgJiBTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSykpCi0JCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwotICAgICAgX19lcnJvcjE6CisJbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOworCWVyciA9IHJhd21pZGlfb3Blbl9wcml2KHJtaWRpLCBzdWJkZXZpY2UsIG1vZGUsIHJmaWxlKTsKKwltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwlpZiAoZXJyIDwgMCkKKwkJbW9kdWxlX3B1dChybWlkaS0+Y2FyZC0+bW9kdWxlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zODUsMTAgKzM3MiwxMyBAQAogCXVuc2lnbmVkIHNob3J0IGZmbGFnczsKIAlpbnQgZXJyOwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7Ci0Jc3RydWN0IHNuZF9yYXdtaWRpX2ZpbGUgKnJhd21pZGlfZmlsZTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmF3bWlkaV9maWxlID0gTlVMTDsKIAl3YWl0X3F1ZXVlX3Qgd2FpdDsKIAlzdHJ1Y3Qgc25kX2N0bF9maWxlICprY3RsOwogCisJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmICEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSAKKwkJcmV0dXJuIC1FSU5WQUw7CQkvKiBpbnZhbGlkIGNvbWJpbmF0aW9uICovCisKIAlpZiAobWFqID09IHNuZF9tYWpvcikgewogCQlybWlkaSA9IHNuZF9sb29rdXBfbWlub3JfZGF0YShpbWlub3IoaW5vZGUpLAogCQkJCQkgICAgICBTTkRSVl9ERVZJQ0VfVFlQRV9SQVdNSURJKTsKQEAgLTQwMiwyNCArMzkyLDI1IEBACiAKIAlpZiAocm1pZGkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmICEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSAKLQkJcmV0dXJuIC1FSU5WQUw7CQkvKiBpbnZhbGlkIGNvbWJpbmF0aW9uICovCisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHJtaWRpLT5jYXJkLT5tb2R1bGUpKQorCQlyZXR1cm4gLUVOWElPOworCisJbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwogCWNhcmQgPSBybWlkaS0+Y2FyZDsKIAllcnIgPSBzbmRfY2FyZF9maWxlX2FkZChjYXJkLCBmaWxlKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWdvdG8gX19lcnJvcl9jYXJkOwogCWZmbGFncyA9IHNuZF9yYXdtaWRpX2ZpbGVfZmxhZ3MoZmlsZSk7CiAJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpIHx8IG1haiA9PSBTT1VORF9NQUpPUikgLyogT1NTIGVtdWw/ICovCiAJCWZmbGFncyB8PSBTTkRSVl9SQVdNSURJX0xGTEdfQVBQRU5EOwotCWZmbGFncyB8PSBTTkRSVl9SQVdNSURJX0xGTEdfTk9PUEVOTE9DSzsKIAlyYXdtaWRpX2ZpbGUgPSBrbWFsbG9jKHNpemVvZigqcmF3bWlkaV9maWxlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJhd21pZGlfZmlsZSA9PSBOVUxMKSB7Ci0JCXNuZF9jYXJkX2ZpbGVfcmVtb3ZlKGNhcmQsIGZpbGUpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBfX2Vycm9yOwogCX0KIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CiAJYWRkX3dhaXRfcXVldWUoJnJtaWRpLT5vcGVuX3dhaXQsICZ3YWl0KTsKLQltdXRleF9sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CiAJd2hpbGUgKDEpIHsKIAkJc3ViZGV2aWNlID0gLTE7CiAJCXJlYWRfbG9jaygmY2FyZC0+Y3RsX2ZpbGVzX3J3bG9jayk7CkBAIC00MzEsOCArNDIyLDcgQEAKIAkJCX0KIAkJfQogCQlyZWFkX3VubG9jaygmY2FyZC0+Y3RsX2ZpbGVzX3J3bG9jayk7Ci0JCWVyciA9IHNuZF9yYXdtaWRpX2tlcm5lbF9vcGVuKHJtaWRpLT5jYXJkLCBybWlkaS0+ZGV2aWNlLAotCQkJCQkgICAgICBzdWJkZXZpY2UsIGZmbGFncywgcmF3bWlkaV9maWxlKTsKKwkJZXJyID0gcmF3bWlkaV9vcGVuX3ByaXYocm1pZGksIHN1YmRldmljZSwgZmZsYWdzLCByYXdtaWRpX2ZpbGUpOwogCQlpZiAoZXJyID49IDApCiAJCQlicmVhazsKIAkJaWYgKGVyciA9PSAtRUFHQUlOKSB7CkBAIC00NTEsNjcgKzQ0MSw4OSBAQAogCQkJYnJlYWs7CiAJCX0KIAl9CisJcmVtb3ZlX3dhaXRfcXVldWUoJnJtaWRpLT5vcGVuX3dhaXQsICZ3YWl0KTsKKwlpZiAoZXJyIDwgMCkgeworCQlrZnJlZShyYXdtaWRpX2ZpbGUpOworCQlnb3RvIF9fZXJyb3I7CisJfQogI2lmZGVmIENPTkZJR19TTkRfT1NTRU1VTAogCWlmIChyYXdtaWRpX2ZpbGUtPmlucHV0ICYmIHJhd21pZGlfZmlsZS0+aW5wdXQtPnJ1bnRpbWUpCiAJCXJhd21pZGlfZmlsZS0+aW5wdXQtPnJ1bnRpbWUtPm9zcyA9IChtYWogPT0gU09VTkRfTUFKT1IpOwogCWlmIChyYXdtaWRpX2ZpbGUtPm91dHB1dCAmJiByYXdtaWRpX2ZpbGUtPm91dHB1dC0+cnVudGltZSkKIAkJcmF3bWlkaV9maWxlLT5vdXRwdXQtPnJ1bnRpbWUtPm9zcyA9IChtYWogPT0gU09VTkRfTUFKT1IpOwogI2VuZGlmCi0JcmVtb3ZlX3dhaXRfcXVldWUoJnJtaWRpLT5vcGVuX3dhaXQsICZ3YWl0KTsKLQlpZiAoZXJyID49IDApIHsKLQkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcmF3bWlkaV9maWxlOwotCX0gZWxzZSB7Ci0JCXNuZF9jYXJkX2ZpbGVfcmVtb3ZlKGNhcmQsIGZpbGUpOwotCQlrZnJlZShyYXdtaWRpX2ZpbGUpOwotCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSByYXdtaWRpX2ZpbGU7CiAJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJcmV0dXJuIDA7CisKKyBfX2Vycm9yOgorCXNuZF9jYXJkX2ZpbGVfcmVtb3ZlKGNhcmQsIGZpbGUpOworIF9fZXJyb3JfY2FyZDoKKwltdXRleF91bmxvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwltb2R1bGVfcHV0KHJtaWRpLT5jYXJkLT5tb2R1bGUpOwogCXJldHVybiBlcnI7CiB9CiAKLWludCBzbmRfcmF3bWlkaV9rZXJuZWxfcmVsZWFzZShzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqIHJmaWxlKQorc3RhdGljIHZvaWQgY2xvc2Vfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGksCisJCQkgICAgc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgIGludCBjbGVhbnVwKQogewotCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7Ci0Jc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotCXN0cnVjdCBzbmRfcmF3bWlkaV9ydW50aW1lICpydW50aW1lOworCXJtaWRpLT5zdHJlYW1zW3N1YnN0cmVhbS0+c3RyZWFtXS5zdWJzdHJlYW1fb3BlbmVkLS07CisJaWYgKC0tc3Vic3RyZWFtLT51c2VfY291bnQpCisJCXJldHVybjsKIAotCWlmIChzbmRfQlVHX09OKCFyZmlsZSkpCi0JCXJldHVybiAtRU5YSU87Ci0Jcm1pZGkgPSByZmlsZS0+cm1pZGk7Ci0JbXV0ZXhfbG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwotCWlmIChyZmlsZS0+aW5wdXQgIT0gTlVMTCkgewotCQlzdWJzdHJlYW0gPSByZmlsZS0+aW5wdXQ7Ci0JCXJmaWxlLT5pbnB1dCA9IE5VTEw7Ci0JCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0JCXNuZF9yYXdtaWRpX2lucHV0X3RyaWdnZXIoc3Vic3RyZWFtLCAwKTsKLQkJc3Vic3RyZWFtLT5vcHMtPmNsb3NlKHN1YnN0cmVhbSk7Ci0JCWlmIChydW50aW1lLT5wcml2YXRlX2ZyZWUgIT0gTlVMTCkKLQkJCXJ1bnRpbWUtPnByaXZhdGVfZnJlZShzdWJzdHJlYW0pOwotCQlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc3Vic3RyZWFtKTsKLQkJc3Vic3RyZWFtLT5vcGVuZWQgPSAwOwotCQlybWlkaS0+c3RyZWFtc1tTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVF0uc3Vic3RyZWFtX29wZW5lZC0tOwotCX0KLQlpZiAocmZpbGUtPm91dHB1dCAhPSBOVUxMKSB7Ci0JCXN1YnN0cmVhbSA9IHJmaWxlLT5vdXRwdXQ7Ci0JCXJmaWxlLT5vdXRwdXQgPSBOVUxMOwotCQlpZiAoLS1zdWJzdHJlYW0tPnVzZV9jb3VudCA9PSAwKSB7Ci0JCQlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCWlmIChjbGVhbnVwKSB7CisJCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCkKKwkJCXNuZF9yYXdtaWRpX2lucHV0X3RyaWdnZXIoc3Vic3RyZWFtLCAwKTsKKwkJZWxzZSB7CiAJCQlpZiAoc3Vic3RyZWFtLT5hY3RpdmVfc2Vuc2luZykgewogCQkJCXVuc2lnbmVkIGNoYXIgYnVmID0gMHhmZTsKLQkJCQkvKiBzZW5kaW5nIHNpbmdsZSBhY3RpdmUgc2Vuc2luZyBtZXNzYWdlIHRvIHNodXQgdGhlIGRldmljZSB1cCAqLworCQkJCS8qIHNlbmRpbmcgc2luZ2xlIGFjdGl2ZSBzZW5zaW5nIG1lc3NhZ2UKKwkJCQkgKiB0byBzaHV0IHRoZSBkZXZpY2UgdXAKKwkJCQkgKi8KIAkJCQlzbmRfcmF3bWlkaV9rZXJuZWxfd3JpdGUoc3Vic3RyZWFtLCAmYnVmLCAxKTsKIAkJCX0KIAkJCWlmIChzbmRfcmF3bWlkaV9kcmFpbl9vdXRwdXQoc3Vic3RyZWFtKSA9PSAtRVJFU1RBUlRTWVMpCiAJCQkJc25kX3Jhd21pZGlfb3V0cHV0X3RyaWdnZXIoc3Vic3RyZWFtLCAwKTsKLQkJCXN1YnN0cmVhbS0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOwotCQkJaWYgKHJ1bnRpbWUtPnByaXZhdGVfZnJlZSAhPSBOVUxMKQotCQkJCXJ1bnRpbWUtPnByaXZhdGVfZnJlZShzdWJzdHJlYW0pOwotCQkJc25kX3Jhd21pZGlfcnVudGltZV9mcmVlKHN1YnN0cmVhbSk7Ci0JCQlzdWJzdHJlYW0tPm9wZW5lZCA9IDA7Ci0JCQlzdWJzdHJlYW0tPmFwcGVuZCA9IDA7CiAJCX0KLQkJcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXS5zdWJzdHJlYW1fb3BlbmVkLS07CiAJfQorCXN1YnN0cmVhbS0+b3BzLT5jbG9zZShzdWJzdHJlYW0pOworCWlmIChzdWJzdHJlYW0tPnJ1bnRpbWUtPnByaXZhdGVfZnJlZSkKKwkJc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2ZyZWUoc3Vic3RyZWFtKTsKKwlzbmRfcmF3bWlkaV9ydW50aW1lX2ZyZWUoc3Vic3RyZWFtKTsKKwlzdWJzdHJlYW0tPm9wZW5lZCA9IDA7CisJc3Vic3RyZWFtLT5hcHBlbmQgPSAwOworfQorCitzdGF0aWMgdm9pZCByYXdtaWRpX3JlbGVhc2VfcHJpdihzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmZpbGUpCit7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKworCXJtaWRpID0gcmZpbGUtPnJtaWRpOworCW11dGV4X2xvY2soJnJtaWRpLT5vcGVuX211dGV4KTsKKwlpZiAocmZpbGUtPmlucHV0KSB7CisJCWNsb3NlX3N1YnN0cmVhbShybWlkaSwgcmZpbGUtPmlucHV0LCAxKTsKKwkJcmZpbGUtPmlucHV0ID0gTlVMTDsKKwl9CisJaWYgKHJmaWxlLT5vdXRwdXQpIHsKKwkJY2xvc2Vfc3Vic3RyZWFtKHJtaWRpLCByZmlsZS0+b3V0cHV0LCAxKTsKKwkJcmZpbGUtPm91dHB1dCA9IE5VTEw7CisJfQorCXJmaWxlLT5ybWlkaSA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZybWlkaS0+b3Blbl9tdXRleCk7CisJd2FrZV91cCgmcm1pZGktPm9wZW5fd2FpdCk7Cit9CisKKy8qIGNhbGxlZCBmcm9tIHNvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMgKi8KK2ludCBzbmRfcmF3bWlkaV9rZXJuZWxfcmVsZWFzZShzdHJ1Y3Qgc25kX3Jhd21pZGlfZmlsZSAqcmZpbGUpCit7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKworCWlmIChzbmRfQlVHX09OKCFyZmlsZSkpCisJCXJldHVybiAtRU5YSU87CisJCisJcm1pZGkgPSByZmlsZS0+cm1pZGk7CisJcmF3bWlkaV9yZWxlYXNlX3ByaXYocmZpbGUpOwogCW1vZHVsZV9wdXQocm1pZGktPmNhcmQtPm1vZHVsZSk7CiAJcmV0dXJuIDA7CiB9CkBAIC01MjAsMTUgKzUzMiwxNCBAQAogewogCXN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyZmlsZTsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwotCWludCBlcnI7CiAKIAlyZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQllcnIgPSBzbmRfcmF3bWlkaV9rZXJuZWxfcmVsZWFzZShyZmlsZSk7CiAJcm1pZGkgPSByZmlsZS0+cm1pZGk7Ci0Jd2FrZV91cCgmcm1pZGktPm9wZW5fd2FpdCk7CisJcmF3bWlkaV9yZWxlYXNlX3ByaXYocmZpbGUpOwogCWtmcmVlKHJmaWxlKTsKIAlzbmRfY2FyZF9maWxlX3JlbW92ZShybWlkaS0+Y2FyZCwgZmlsZSk7Ci0JcmV0dXJuIGVycjsKKwltb2R1bGVfcHV0KHJtaWRpLT5jYXJkLT5tb2R1bGUpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9yYXdtaWRpX2luZm8oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtLApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfZGV2aWNlLmggYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19kZXZpY2UuaAppbmRleCBiZjhkMmI0Li5jMDE1NGE5IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19kZXZpY2UuaAorKysgYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19kZXZpY2UuaApAQCAtMTgxLDcgKzE4MSw3IEBACiAvKiBmb3IgZGVidWcgKi8KICNpZmRlZiBTTkRSVl9TRVFfT1NTX0RFQlVHCiBleHRlcm4gaW50IHNlcV9vc3NfZGVidWc7Ci0jZGVmaW5lIGRlYnVnX3ByaW50ayh4KQlkbyB7IGlmIChzZXFfb3NzX2RlYnVnID4gMCkgc25kX3ByaW50ayB4OyB9IHdoaWxlICgwKQorI2RlZmluZSBkZWJ1Z19wcmludGsoeCkJZG8geyBpZiAoc2VxX29zc19kZWJ1ZyA+IDApIHNuZF9wcmludGQgeDsgfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIGRlYnVnX3ByaW50ayh4KQkvKiovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9wcmlvcS5jIGIvc291bmQvY29yZS9zZXEvc2VxX3ByaW9xLmMKaW5kZXggMDEwMWE4Yi4uMjk4OTZhYiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX3ByaW9xLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX3ByaW9xLmMKQEAgLTMyMSw3ICszMjEsOCBAQAogCQkJZnJlZXByZXYgPSBjZWxsOwogCQl9IGVsc2UgewogI2lmIDAKLQkJCXByaW50aygidHlwZSA9ICVpLCBzb3VyY2UgPSAlaSwgZGVzdCA9ICVpLCBjbGllbnQgPSAlaVxuIiwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJ0eXBlID0gJWksIHNvdXJjZSA9ICVpLCBkZXN0ID0gJWksICIKKwkJCSAgICAgICAiY2xpZW50ID0gJWlcbiIsCiAJCQkJY2VsbC0+ZXZlbnQudHlwZSwKIAkJCQljZWxsLT5ldmVudC5zb3VyY2UuY2xpZW50LAogCQkJCWNlbGwtPmV2ZW50LmRlc3QuY2xpZW50LApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS90aW1lci5jIGIvc291bmQvY29yZS90aW1lci5jCmluZGV4IDc5NjUzMjAuLjNmMDA1MGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvdGltZXIuYworKysgYi9zb3VuZC9jb3JlL3RpbWVyLmMKQEAgLTE4MjUsMTMgKzE4MjUsOSBAQAogc3RhdGljIGludCBzbmRfdGltZXJfdXNlcl9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqIGZpbGUsIGludCBvbikKIHsKIAlzdHJ1Y3Qgc25kX3RpbWVyX3VzZXIgKnR1OwotCWludCBlcnI7CiAKIAl0dSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQllcnIgPSBmYXN5bmNfaGVscGVyKGZkLCBmaWxlLCBvbiwgJnR1LT5mYXN5bmMpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZ0dS0+ZmFzeW5jKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc25kX3RpbWVyX3VzZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvdm1hc3Rlci5jIGIvc291bmQvY29yZS92bWFzdGVyLmMKaW5kZXggNGNjNTdmOS4uMjU3NjI0YiAxMDA2NDQKLS0tIGEvc291bmQvY29yZS92bWFzdGVyLmMKKysrIGIvc291bmQvY29yZS92bWFzdGVyLmMKQEAgLTUwLDE4ICs1MCwzOCBAQAogCXN0cnVjdCBsaW5rX21hc3RlciAqbWFzdGVyOwogCXN0cnVjdCBsaW5rX2N0bF9pbmZvIGluZm87CiAJaW50IHZhbHNbMl07CQkvKiBjdXJyZW50IHZhbHVlcyAqLworCXVuc2lnbmVkIGludCBmbGFnczsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sIHNsYXZlOyAvKiB0aGUgY29weSBvZiBvcmlnaW5hbCBjb250cm9sIGVudHJ5ICovCiB9OwogCitzdGF0aWMgaW50IHNsYXZlX3VwZGF0ZShzdHJ1Y3QgbGlua19zbGF2ZSAqc2xhdmUpCit7CisJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWN0bDsKKwlpbnQgZXJyLCBjaDsKKworCXVjdGwgPSBrbWFsbG9jKHNpemVvZigqdWN0bCksIEdGUF9LRVJORUwpOworCWlmICghdWN0bCkKKwkJcmV0dXJuIC1FTk9NRU07CisJdWN0bC0+aWQgPSBzbGF2ZS0+c2xhdmUuaWQ7CisJZXJyID0gc2xhdmUtPnNsYXZlLmdldCgmc2xhdmUtPnNsYXZlLCB1Y3RsKTsKKwlmb3IgKGNoID0gMDsgY2ggPCBzbGF2ZS0+aW5mby5jb3VudDsgY2grKykKKwkJc2xhdmUtPnZhbHNbY2hdID0gdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjaF07CisJa2ZyZWUodWN0bCk7CisJcmV0dXJuIDA7Cit9CisKIC8qIGdldCB0aGUgc2xhdmUgY3RsIGluZm8gYW5kIHNhdmUgdGhlIGluaXRpYWwgdmFsdWVzICovCiBzdGF0aWMgaW50IHNsYXZlX2luaXQoc3RydWN0IGxpbmtfc2xhdmUgKnNsYXZlKQogewogCXN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm87Ci0Jc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWN0bDsKLQlpbnQgZXJyLCBjaDsKKwlpbnQgZXJyOwogCi0JaWYgKHNsYXZlLT5pbmZvLmNvdW50KQotCQlyZXR1cm4gMDsgLyogYWxyZWFkeSBpbml0aWFsaXplZCAqLworCWlmIChzbGF2ZS0+aW5mby5jb3VudCkgeworCQkvKiBhbHJlYWR5IGluaXRpYWxpemVkICovCisJCWlmIChzbGF2ZS0+ZmxhZ3MgJiBTTkRfQ1RMX1NMQVZFX05FRURfVVBEQVRFKQorCQkJcmV0dXJuIHNsYXZlX3VwZGF0ZShzbGF2ZSk7CisJCXJldHVybiAwOworCX0KIAogCXVpbmZvID0ga21hbGxvYyhzaXplb2YoKnVpbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1aW5mbykKQEAgLTg1LDE1ICsxMDUsNyBAQAogCXNsYXZlLT5pbmZvLm1heF92YWwgPSB1aW5mby0+dmFsdWUuaW50ZWdlci5tYXg7CiAJa2ZyZWUodWluZm8pOwogCi0JdWN0bCA9IGttYWxsb2Moc2l6ZW9mKCp1Y3RsKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1Y3RsKQotCQlyZXR1cm4gLUVOT01FTTsKLQl1Y3RsLT5pZCA9IHNsYXZlLT5zbGF2ZS5pZDsKLQllcnIgPSBzbGF2ZS0+c2xhdmUuZ2V0KCZzbGF2ZS0+c2xhdmUsIHVjdGwpOwotCWZvciAoY2ggPSAwOyBjaCA8IHNsYXZlLT5pbmZvLmNvdW50OyBjaCsrKQotCQlzbGF2ZS0+dmFsc1tjaF0gPSB1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NoXTsKLQlrZnJlZSh1Y3RsKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2xhdmVfdXBkYXRlKHNsYXZlKTsKIH0KIAogLyogaW5pdGlhbGl6ZSBtYXN0ZXIgdm9sdW1lICovCkBAIC0yMjksNyArMjQxLDggQEAKICAqIC0gbG9nYXJpdGhtaWMgdm9sdW1lIGNvbnRyb2wgKGRCIGxldmVsKSwgbm8gbGluZWFyIHZvbHVtZQogICogLSBtYXN0ZXIgY2FuIG9ubHkgYXR0ZW51YXRlIHRoZSB2b2x1bWUsIG5vIGdhaW4KICAqLwotaW50IHNuZF9jdGxfYWRkX3NsYXZlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlciwgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUpCitpbnQgX3NuZF9jdGxfYWRkX3NsYXZlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKm1hc3Rlciwgc3RydWN0IHNuZF9rY29udHJvbCAqc2xhdmUsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGxpbmtfbWFzdGVyICptYXN0ZXJfbGluayA9IHNuZF9rY29udHJvbF9jaGlwKG1hc3Rlcik7CiAJc3RydWN0IGxpbmtfc2xhdmUgKnNyZWM7CkBAIC0yNDEsNiArMjU0LDcgQEAKIAlzcmVjLT5zbGF2ZSA9ICpzbGF2ZTsKIAltZW1jcHkoc3JlYy0+c2xhdmUudmQsIHNsYXZlLT52ZCwgc2xhdmUtPmNvdW50ICogc2l6ZW9mKCpzbGF2ZS0+dmQpKTsKIAlzcmVjLT5tYXN0ZXIgPSBtYXN0ZXJfbGluazsKKwlzcmVjLT5mbGFncyA9IGZsYWdzOwogCiAJLyogb3ZlcnJpZGUgY2FsbGJhY2tzICovCiAJc2xhdmUtPmluZm8gPSBzbGF2ZV9pbmZvOwpAQCAtMjU0LDggKzI2OCw3IEBACiAJbGlzdF9hZGRfdGFpbCgmc3JlYy0+bGlzdCwgJm1hc3Rlcl9saW5rLT5zbGF2ZXMpOwogCXJldHVybiAwOwogfQotCi1FWFBPUlRfU1lNQk9MKHNuZF9jdGxfYWRkX3NsYXZlKTsKK0VYUE9SVF9TWU1CT0woX3NuZF9jdGxfYWRkX3NsYXZlKTsKIAogLyoKICAqIGN0bCBjYWxsYmFja3MgZm9yIG1hc3RlciBjb250cm9scwpAQCAtMzI3LDggKzM0MCwyMCBAQAogfQogCiAKLS8qCi0gKiBDcmVhdGUgYSB2aXJ0dWFsIG1hc3RlciBjb250cm9sIHdpdGggdGhlIGdpdmVuIG5hbWUKKy8qKgorICogc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyIC0gQ3JlYXRlIGEgdmlydHVhbCBtYXN0ZXIgY29udHJvbAorICogQG5hbWU6IG5hbWUgc3RyaW5nIG9mIHRoZSBjb250cm9sIGVsZW1lbnQgdG8gY3JlYXRlCisgKiBAdGx2OiBvcHRpb25hbCBUTFYgaW50IGFycmF5IGZvciBkQiBpbmZvcm1hdGlvbgorICoKKyAqIENyZWF0ZXMgYSB2aXJ0dWFsIG1hdHN0ZXIgY29udHJvbCB3aXRoIHRoZSBnaXZlbiBuYW1lIHN0cmluZy4KKyAqIFJldHVybnMgdGhlIGNyZWF0ZWQgY29udHJvbCBlbGVtZW50LCBvciBOVUxMIGZvciBlcnJvcnMgKEVOT01FTSkuCisgKgorICogQWZ0ZXIgY3JlYXRpbmcgYSB2bWFzdGVyIGVsZW1lbnQsIHlvdSBjYW4gYWRkIHRoZSBzbGF2ZSBjb250cm9scworICogdmlhIHNuZF9jdGxfYWRkX3NsYXZlKCkgb3Igc25kX2N0bF9hZGRfc2xhdmVfdW5jYWNoZWQoKS4KKyAqCisgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgQHRsdiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBUTFYgaW5mb3JtYXRpb24KKyAqIGZvciBkQiBzY2FsZSBvZiB0aGUgbWFzdGVyIGNvbnRyb2wuICBJdCBzaG91bGQgYmUgYSBzaW5nbGUgZWxlbWVudAorICogd2l0aCAjU05EUlZfQ1RMX1RMVlRfREJfU0NBTEUgdHlwZSwgYW5kIHNob3VsZCBiZSB0aGUgbWF4IDBkQi4KICAqLwogc3RydWN0IHNuZF9rY29udHJvbCAqc25kX2N0bF9tYWtlX3ZpcnR1YWxfbWFzdGVyKGNoYXIgKm5hbWUsCiAJCQkJCQkgY29uc3QgdW5zaWduZWQgaW50ICp0bHYpCkBAIC0zNjcsNSArMzkyLDQgQEAKIAogCXJldHVybiBrY3RsOwogfQotCiBFWFBPUlRfU1lNQk9MKHNuZF9jdGxfbWFrZV92aXJ0dWFsX21hc3Rlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL2R1bW15LmMgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKaW5kZXggNzNiZTdlMS4uNTQyMzlkMiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9kdW1teS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvZHVtbXkuYwpAQCAtNTg4LDEwICs1ODgsMTAgQEAKIAlpbnQgaWR4LCBlcnI7CiAJaW50IGRldiA9IGRldnB0ci0+aWQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2R1bW15KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfZHVtbXkpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJZHVtbXkgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJZHVtbXktPmNhcmQgPSBjYXJkOwogCWZvciAoaWR4ID0gMDsgaWR4IDwgTUFYX1BDTV9ERVZJQ0VTICYmIGlkeCA8IHBjbV9kZXZzW2Rldl07IGlkeCsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jIGIvc291bmQvZHJpdmVycy9tbDQwMy1hYzk3Y3IuYwppbmRleCA3NzgzODQzLi4xOTUwZmZjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMKQEAgLTEyNzksOSArMTI3OSw5IEBACiAJaWYgKCFlbmFibGVbZGV2XSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAllcnIgPSBzbmRfbWw0MDNfYWM5N2NyX2NyZWF0ZShjYXJkLCBwZmRldiwgJm1sNDAzX2FjOTdjcik7CiAJaWYgKGVyciA8IDApIHsKIAkJUERFQlVHKElOSVRfRkFJTFVSRSwgInByb2JlKCk6IGNyZWF0ZSBmYWlsZWQhXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMS5jIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKaW5kZXggNWI5OTZmMy4uMTQ5ZDA1YSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKKysrIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxLmMKQEAgLTczLDkgKzczLDkgQEAKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAidGhlIHVhcnRfZW50ZXIgb3B0aW9uIGlzIG9ic29sZXRlOyByZW1vdmUgaXRcbiIpOwogCiAJKnJjYXJkID0gTlVMTDsKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiTVBVLTQwMSBVQVJUIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgY2FyZC0+ZHJpdmVyKTsKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgJSNseCwgIiwgY2FyZC0+c2hvcnRuYW1lLCBwb3J0W2Rldl0pOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tdHBhdi5jIGIvc291bmQvZHJpdmVycy9tdHBhdi5jCmluZGV4IDQ4YjY0ZTYuLjJmOGYyOTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXRwYXYuYworKysgYi9zb3VuZC9kcml2ZXJzL210cGF2LmMKQEAgLTMwMyw4ICszMDMsMTAgQEAKIAogCQlzbmRfbXRwYXZfc2VuZF9ieXRlKG10cF9jYXJkLCAweGY1KTsKIAkJc25kX210cGF2X3NlbmRfYnl0ZShtdHBfY2FyZCwgcG9ydHAtPmh3cG9ydCk7Ci0JCS8vc25kX3ByaW50aygibmV3IG91dHBvcnQ6IDB4JXhcbiIsICh1bnNpZ25lZCBpbnQpIHBvcnRwLT5od3BvcnQpOwotCisJCS8qCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAibmV3IG91dHBvcnQ6IDB4JXhcbiIsCisJCQkgICAodW5zaWduZWQgaW50KSBwb3J0cC0+aHdwb3J0KTsKKwkJKi8KIAkJaWYgKCEob3V0Ynl0ZSAmIDB4ODApICYmIHBvcnRwLT5ydW5uaW5nX3N0YXR1cykKIAkJCXNuZF9tdHBhdl9zZW5kX2J5dGUobXRwX2NhcmQsIHBvcnRwLT5ydW5uaW5nX3N0YXR1cyk7CiAJfQpAQCAtNTQwLDcgKzU0Miw3IEBACiAKIAl1OCBzYnl0ID0gc25kX210cGF2X2dldHJlZyhtY3JkLCBTUkVHKTsKIAotCS8vcHJpbnRrKCJzbmRfbXRwYXZfcmVhZF9ieXRlcygpIHNieXQ6IDB4JXhcbiIsIHNieXQpOworCS8qIHByaW50ayhLRVJOX0RFQlVHICJzbmRfbXRwYXZfcmVhZF9ieXRlcygpIHNieXQ6IDB4JXhcbiIsIHNieXQpOyAqLwogCiAJaWYgKCEoc2J5dCAmIFNJR1NfQllURSkpCiAJCXJldHVybjsKQEAgLTU4NSwxMiArNTg3LDEyIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXRwYXZfZ2V0X0lTQShzdHJ1Y3QgbXRwYXYgKiBtY2FyZCkKIHsKIAlpZiAoKG1jYXJkLT5yZXNfcG9ydCA9IHJlcXVlc3RfcmVnaW9uKHBvcnQsIDMsICJNb3R1TVRQQVYgTUlESSIpKSA9PSBOVUxMKSB7Ci0JCXNuZF9wcmludGsoIk1UVkFQIHBvcnQgMHglbHggaXMgYnVzeVxuIiwgcG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIk1UVkFQIHBvcnQgMHglbHggaXMgYnVzeVxuIiwgcG9ydCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCW1jYXJkLT5wb3J0ID0gcG9ydDsKIAlpZiAocmVxdWVzdF9pcnEoaXJxLCBzbmRfbXRwYXZfaXJxaCwgSVJRRl9ESVNBQkxFRCwgIk1PVFUgTVRQQVYiLCBtY2FyZCkpIHsKLQkJc25kX3ByaW50aygiTVRWQVAgSVJRICVkIGJ1c3lcbiIsIGlycSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgIk1UVkFQIElSUSAlZCBidXN5XG4iLCBpcnEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAltY2FyZC0+aXJxID0gaXJxOwpAQCAtNjk2LDkgKzY5OCw5IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgbXRwYXYgKm10cF9jYXJkOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCBzaXplb2YoKm10cF9jYXJkKSk7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIHNpemVvZigqbXRwX2NhcmQpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAltdHBfY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzcGluX2xvY2tfaW5pdCgmbXRwX2NhcmQtPnNwaW5sb2NrKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXRzNjQuYyBiL3NvdW5kL2RyaXZlcnMvbXRzNjQuYwppbmRleCA4N2JhMWRkLi45Mjg0ODI5IDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL210czY0LmMKKysrIGIvc291bmQvZHJpdmVycy9tdHM2NC5jCkBAIC05NTcsMTAgKzk1NywxMCBAQAogCWlmICgoZXJyID0gc25kX210czY0X3Byb2JlX3BvcnQocCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpIHsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRkKCJDYW5ub3QgY3JlYXRlIGNhcmRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgRFJJVkVSX05BTUUpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJFU0kgIiBDQVJEX05BTUUpOwpAQCAtMTAxNSw3ICsxMDE1LDcgQEAKIAkJZ290byBfX2VycjsKIAl9CiAKLQlzbmRfcHJpbnRrKCJFU0kgTWlkaXRlcm1pbmFsIDQxNDAgb24gMHglbHhcbiIsIHAtPmJhc2UpOworCXNuZF9wcmludGsoS0VSTl9JTkZPICJFU0kgTWlkaXRlcm1pbmFsIDQxNDAgb24gMHglbHhcbiIsIHAtPmJhc2UpOwogCXJldHVybiAwOwogCiBfX2VycjoKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX2xpYi5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKaW5kZXggNzgwNTgyMy4uNmUzMWU0NiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogCW9wbDMgPSBody0+cHJpdmF0ZV9kYXRhOwogCXN0YXR1cyA9IGluYihvcGwzLT5sX3BvcnQpOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJBZExpYiBJUlEgc3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkFkTGliIElSUSBzdGF0dXMgPSAweCV4XG4iLCBzdGF0dXMpOwogI2VuZGlmCiAJaWYgKCEoc3RhdHVzICYgMHg4MCkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYwppbmRleCAxNmZlYWZhLi42ZTdkMDlhIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlpbnQgaTsKIAljaGFyICpzdHIgPSAieC4yNCI7CiAKLQlwcmludGsoInRpbWUgJS41aTogJXMgWyUuMmldOiAiLCBvcGwzLT51c2VfdGltZSwgcywgdm9pY2UpOworCXByaW50ayhLRVJOX0RFQlVHICJ0aW1lICUuNWk6ICVzIFslLjJpXTogIiwgb3BsMy0+dXNlX3RpbWUsIHMsIHZvaWNlKTsKIAlmb3IgKGkgPSAwOyBpIDwgb3BsMy0+bWF4X3ZvaWNlczsgaSsrKQogCQlwcmludGsoIiVjIiwgKihzdHIgKyBvcGwzLT52b2ljZXNbaV0uc3RhdGUgKyAxKSk7CiAJcHJpbnRrKCJcbiIpOwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJZm9yIChpID0gMDsgaSA8IEVORDsgaSsrKSB7CiAJCWlmIChiZXN0W2ldLnZvaWNlID49IDApIHsKICNpZmRlZiBERUJVR19BTExPQwotCQkJcHJpbnRrKCIlcyAlaW9wIGFsbG9jYXRpb24gb24gdm9pY2UgJWlcbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgJWlvcCBhbGxvY2F0aW9uIG9uIHZvaWNlICVpXG4iLAogCQkJICAgICAgIGFsbG9jX3R5cGVbaV0sIGluc3RyXzRvcCA/IDQgOiAyLAogCQkJICAgICAgIGJlc3RbaV0udm9pY2UpOwogI2VuZGlmCkBAIC0zMTcsNyArMzE3LDcgQEAKIAlvcGwzID0gcDsKIAogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJOb3RlIG9uLCBjaCAlaSwgaW5zdCAlaSwgbm90ZSAlaSwgdmVsICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiTm90ZSBvbiwgY2ggJWksIGluc3QgJWksIG5vdGUgJWksIHZlbCAlaVxuIiwKIAkJICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5taWRpX3Byb2dyYW0sIG5vdGUsIHZlbCk7CiAjZW5kaWYKIApAQCAtMzcyLDcgKzM3Miw3IEBACiAJCXJldHVybjsKIAl9CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIiAgLS0+IE9QTCVpIGluc3RydW1lbnQ6ICVzXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiICAtLT4gT1BMJWkgaW5zdHJ1bWVudDogJXNcbiIsCiAJCSAgIGluc3RyXzRvcCA/IDMgOiAyLCBwYXRjaC0+bmFtZSk7CiAjZW5kaWYKIAkvKiBpbiBTWU5USCBtb2RlLCBhcHBsaWNhdGlvbiB0YWtlcyBjYXJlIG9mIHZvaWNlcyAqLwpAQCAtNDMxLDcgKzQzMSw3IEBACiAJfQogCiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIiAgLS0+IHNldHRpbmcgT1BMMyBjb25uZWN0aW9uOiAweCV4XG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiICAtLT4gc2V0dGluZyBPUEwzIGNvbm5lY3Rpb246IDB4JXhcbiIsCiAJCSAgIG9wbDMtPmNvbm5lY3Rpb25fcmVnKTsKICNlbmRpZgogCS8qCkBAIC00NjYsNyArNDY2LDcgQEAKIAkvKiBQcm9ncmFtIHRoZSBGTSB2b2ljZSBjaGFyYWN0ZXJpc3RpY3MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgKGluc3RyXzRvcCA/IDQgOiAyKTsgaSsrKSB7CiAjaWZkZWYgREVCVUdfTUlESQotCQlzbmRfcHJpbnRrKCIgIC0tPiBwcm9ncmFtbWluZyBvcGVyYXRvciAlaVxuIiwgaSk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiICAtLT4gcHJvZ3JhbW1pbmcgb3BlcmF0b3IgJWlcbiIsIGkpOwogI2VuZGlmCiAJCW9wX29mZnNldCA9IHNuZF9vcGwzX3JlZ21hcFt2b2ljZV9vZmZzZXRdW2ldOwogCkBAIC01NDYsNyArNTQ2LDcgQEAKIAlibG9ja251bSB8PSBPUEwzX0tFWU9OX0JJVDsKIAogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCIgIC0tPiB0cmlnZ2VyIHZvaWNlICVpXG4iLCB2b2ljZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgIC0tPiB0cmlnZ2VyIHZvaWNlICVpXG4iLCB2b2ljZSk7CiAjZW5kaWYKIAkvKiBTZXQgT1BMMyBLRVlPTl9CTE9DSyByZWdpc3RlciBvZiByZXF1ZXN0ZWQgdm9pY2UgKi8gCiAJb3BsM19yZWcgPSByZWdfc2lkZSB8IChPUEwzX1JFR19LRVlPTl9CTE9DSyArIHZvaWNlX29mZnNldCk7CkBAIC02MDIsNyArNjAyLDcgQEAKIAkJCXByZyA9IGV4dHJhX3ByZyAtIDE7CiAJCX0KICNpZmRlZiBERUJVR19NSURJCi0JCXNuZF9wcmludGsoIiAqKiogYWxsb2NhdGluZyBleHRyYSBwcm9ncmFtXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICIgKioqIGFsbG9jYXRpbmcgZXh0cmEgcHJvZ3JhbVxuIik7CiAjZW5kaWYKIAkJZ290byBfX2V4dHJhX3ByZzsKIAl9CkBAIC02MzMsNyArNjMzLDcgQEAKIAogCS8qIGtpbGwgdm9pY2UgKi8KICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiICAtLT4ga2lsbCB2b2ljZSAlaVxuIiwgdm9pY2UpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiICAtLT4ga2lsbCB2b2ljZSAlaVxuIiwgdm9pY2UpOwogI2VuZGlmCiAJb3BsM19yZWcgPSByZWdfc2lkZSB8IChPUEwzX1JFR19LRVlPTl9CTE9DSyArIHZvaWNlX29mZnNldCk7CiAJLyogY2xlYXIgS2V5IE9OIGJpdCAqLwpAQCAtNjcwLDcgKzY3MCw3IEBACiAJb3BsMyA9IHA7CiAKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiTm90ZSBvZmYsIGNoICVpLCBpbnN0ICVpLCBub3RlICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiTm90ZSBvZmYsIGNoICVpLCBpbnN0ICVpLCBub3RlICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSwgbm90ZSk7CiAjZW5kaWYKIApAQCAtNzA5LDcgKzcwOSw3IEBACiAKIAlvcGwzID0gcDsKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiS2V5IHByZXNzdXJlLCBjaCM6ICVpLCBpbnN0IzogJWlcbiIsCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJLZXkgcHJlc3N1cmUsIGNoIzogJWksIGluc3QjOiAlaVxuIiwKIAkJICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5taWRpX3Byb2dyYW0pOwogI2VuZGlmCiB9CkBAIC03MjMsNyArNzIzLDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJUZXJtaW5hdGUgbm90ZSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiVGVybWluYXRlIG5vdGUsIGNoIzogJWksIGluc3QjOiAlaVxuIiwKIAkJICAgY2hhbi0+bnVtYmVyLCBjaGFuLT5taWRpX3Byb2dyYW0pOwogI2VuZGlmCiB9CkBAIC04MTIsNyArODEyLDcgQEAKIAogCW9wbDMgPSBwOwogI2lmZGVmIERFQlVHX01JREkKLQlzbmRfcHJpbnRrKCJDb250cm9sbGVyLCBUWVBFID0gJWksIGNoIzogJWksIGluc3QjOiAlaVxuIiwKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIkNvbnRyb2xsZXIsIFRZUEUgPSAlaSwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICB0eXBlLCBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIApAQCAtODQ5LDcgKzg0OSw3IEBACiAKIAlvcGwzID0gcDsKICNpZmRlZiBERUJVR19NSURJCi0Jc25kX3ByaW50aygiTlJQTiwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiTlJQTiwgY2gjOiAlaSwgaW5zdCM6ICVpXG4iLAogCQkgICBjaGFuLT5udW1iZXIsIGNoYW4tPm1pZGlfcHJvZ3JhbSk7CiAjZW5kaWYKIH0KQEAgLTg2NCw2ICs4NjQsNiBAQAogCiAJb3BsMyA9IHA7CiAjaWZkZWYgREVCVUdfTUlESQotCXNuZF9wcmludGsoIlNZU0VYXG4iKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIlNZU0VYXG4iKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfb3NzLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19vc3MuYwppbmRleCA5YTIyNzFkLi5hNTRiMWRjIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19vc3MuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19vc3MuYwpAQCAtMjIwLDE0ICsyMjAsMTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoY291bnQgPCAoaW50KXNpemVvZihzYmkpKSB7Ci0JCXNuZF9wcmludGsoIkZNIEVycm9yOiBQYXRjaCByZWNvcmQgdG9vIHNob3J0XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiRk0gRXJyb3I6IFBhdGNoIHJlY29yZCB0b28gc2hvcnRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZzYmksIGJ1Ziwgc2l6ZW9mKHNiaSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAogCWlmIChzYmkuY2hhbm5lbCA8IDAgfHwgc2JpLmNoYW5uZWwgPj0gU0JGTV9NQVhJTlNUUikgewotCQlzbmRfcHJpbnRrKCJGTSBFcnJvcjogSW52YWxpZCBpbnN0cnVtZW50IG51bWJlciAlZFxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiRk0gRXJyb3I6IEludmFsaWQgaW5zdHJ1bWVudCBudW1iZXIgJWRcbiIsCiAJCQkgICBzYmkuY2hhbm5lbCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI1NCw3ICsyNTQsOSBAQAogCW9wbDMgPSBhcmctPnByaXZhdGVfZGF0YTsKIAlzd2l0Y2ggKGNtZCkgewogCQljYXNlIFNORENUTF9GTV9MT0FEX0lOU1RSOgotCQkJc25kX3ByaW50aygiT1BMMzogT2Jzb2xldGUgaW9jdGwoU05EQ1RMX0ZNX0xPQURfSU5TVFIpIHVzZWQuIEZpeCB0aGUgcHJvZ3JhbS5cbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiT1BMMzogIgorCQkJCSAgICJPYnNvbGV0ZSBpb2N0bChTTkRDVExfRk1fTE9BRF9JTlNUUikgdXNlZC4gIgorCQkJCSAgICJGaXggdGhlIHByb2dyYW0uXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWNhc2UgU05EQ1RMX1NZTlRIX01FTUFWTDoKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3N5bnRoLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19zeW50aC5jCmluZGV4IDk2MmJiOWMuLjZkNTdiNjQ0MSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc3ludGguYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19zeW50aC5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJ1bmtub3duIElPQ1RMOiAweCV4XG4iLCBjbWQpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAidW5rbm93biBJT0NUTDogMHgleFxuIiwgY21kKTsKICNlbmRpZgogCX0KIAlyZXR1cm4gLUVOT1RUWTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jCmluZGV4IGE0MDQ5ZWIuLmI2MGNlZjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMKKysrIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYwpAQCAtNTcsNyArNTcsNyBAQAogCWVsc2UKIAkJbWluX2RpdiA9IE1BWF9ESVY7CiAjaWYgUENTUF9ERUJVRwotCXByaW50aygiUENTUDogbHBqPSVsaSwgbWluX2Rpdj0laSwgcmVzPSVsaVxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiUENTUDogbHBqPSVsaSwgbWluX2Rpdj0laSwgcmVzPSVsaVxuIiwKIAkgICAgICAgbG9vcHNfcGVyX2ppZmZ5LCBtaW5fZGl2LCB0cC50dl9uc2VjKTsKICNlbmRpZgogCkBAIC05OCw5ICs5OCw5IEBACiAJaHJ0aW1lcl9pbml0KCZwY3NwX2NoaXAudGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CiAJcGNzcF9jaGlwLnRpbWVyLmZ1bmN0aW9uID0gcGNzcF9kb190aW1lcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX3Bjc3BfY3JlYXRlKGNhcmQpOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3BvcnRtYW4yeDQuYyBiL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCmluZGV4IGIxYzA0N2UuLjYwMTU4ZTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcG9ydG1hbjJ4NC5jCkBAIC03NDYsMTAgKzc0NiwxMCBAQAogCWlmICgoZXJyID0gc25kX3BvcnRtYW5fcHJvYmVfcG9ydChwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGQoIkNhbm5vdCBjcmVhdGUgY2FyZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBEUklWRVJfTkFNRSk7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgQ0FSRF9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jIGIvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKaW5kZXggZDhhYWI5ZC4uYjJiNmQ1MCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKKysrIGIvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKQEAgLTI0MSw3ICsyNDEsOCBAQAogCQkJc25kX3Jhd21pZGlfcmVjZWl2ZSh1YXJ0LT5taWRpX2lucHV0W3N1YnN0cmVhbV0sICZjLCAxKTsKIAogCQlpZiAoc3RhdHVzICYgVUFSVF9MU1JfT0UpCi0JCQlzbmRfcHJpbnRrKCIlczogT3ZlcnJ1biBvbiBkZXZpY2UgYXQgMHglbHhcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICIlczogT3ZlcnJ1biBvbiBkZXZpY2UgYXQgMHglbHhcbiIsCiAJCQkgICAgICAgdWFydC0+cm1pZGktPm5hbWUsIHVhcnQtPmJhc2UpOwogCX0KIApAQCAtNjM2LDcgKzYzNyw4IEBACiAJCX0KIAl9IGVsc2UgewogCQlpZiAoIXNuZF91YXJ0MTY1NTBfd3JpdGVfYnVmZmVyKHVhcnQsIG1pZGlfYnl0ZSkpIHsKLQkJCXNuZF9wcmludGsoIiVzOiBCdWZmZXIgb3ZlcnJ1biBvbiBkZXZpY2UgYXQgMHglbHhcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICIlczogQnVmZmVyIG92ZXJydW4gb24gZGV2aWNlIGF0IDB4JWx4XG4iLAogCQkJCSAgIHVhcnQtPnJtaWRpLT5uYW1lLCB1YXJ0LT5iYXNlKTsKIAkJCXJldHVybiAwOwogCQl9CkBAIC04MTUsNyArODE3LDggQEAKIAlpZiAoaXJxID49IDAgJiYgaXJxICE9IFNORFJWX0FVVE9fSVJRKSB7CiAJCWlmIChyZXF1ZXN0X2lycShpcnEsIHNuZF91YXJ0MTY1NTBfaW50ZXJydXB0LAogCQkJCUlSUUZfRElTQUJMRUQsICJTZXJpYWwgTUlESSIsIHVhcnQpKSB7Ci0JCQlzbmRfcHJpbnRrKCJpcnEgJWQgYnVzeS4gVXNpbmcgUG9sbGluZy5cbiIsIGlycSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICJpcnEgJWQgYnVzeS4gVXNpbmcgUG9sbGluZy5cbiIsIGlycSk7CiAJCX0gZWxzZSB7CiAJCQl1YXJ0LT5pcnEgPSBpcnE7CiAJCX0KQEAgLTkxOSwyNiArOTIyLDI5IEBACiAJY2FzZSBTTkRSVl9TRVJJQUxfR0VORVJJQzoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiQWRhcHRvciB0eXBlIGlzIG91dCBvZiByYW5nZSAwLSVkICglZClcbiIsCisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJBZGFwdG9yIHR5cGUgaXMgb3V0IG9mIHJhbmdlIDAtJWQgKCVkKVxuIiwKIAkJCSAgIFNORFJWX1NFUklBTF9NQVhfQURBUFRPUiwgYWRhcHRvcltkZXZdKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKG91dHNbZGV2XSA8IDEgfHwgb3V0c1tkZXZdID4gU05EUlZfU0VSSUFMX01BWF9PVVRTKSB7Ci0JCXNuZF9wcmludGsoIkNvdW50IG9mIG91dHB1dHMgaXMgb3V0IG9mIHJhbmdlIDEtJWQgKCVkKVxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIkNvdW50IG9mIG91dHB1dHMgaXMgb3V0IG9mIHJhbmdlIDEtJWQgKCVkKVxuIiwKIAkJCSAgIFNORFJWX1NFUklBTF9NQVhfT1VUUywgb3V0c1tkZXZdKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKGluc1tkZXZdIDwgMSB8fCBpbnNbZGV2XSA+IFNORFJWX1NFUklBTF9NQVhfSU5TKSB7Ci0JCXNuZF9wcmludGsoIkNvdW50IG9mIGlucHV0cyBpcyBvdXQgb2YgcmFuZ2UgMS0lZCAoJWQpXG4iLAorCQlzbmRfcHJpbnRrKEtFUk5fRVJSCisJCQkgICAiQ291bnQgb2YgaW5wdXRzIGlzIG91dCBvZiByYW5nZSAxLSVkICglZClcbiIsCiAJCQkgICBTTkRSVl9TRVJJQUxfTUFYX0lOUywgaW5zW2Rldl0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQljYXJkICA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyICA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIlNlcmlhbCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJTZXJpYWwgTUlESSAoVUFSVDE2NTUwQSkiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdmlybWlkaS5jIGIvc291bmQvZHJpdmVycy92aXJtaWRpLmMKaW5kZXggZjc5ZTM2MS4uMGU2MzFjMyAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92aXJtaWRpLmMKKysrIGIvc291bmQvZHJpdmVycy92aXJtaWRpLmMKQEAgLTkwLDE1ICs5MCwxNyBAQAogCWludCBpZHgsIGVycjsKIAlpbnQgZGV2ID0gZGV2cHRyLT5pZDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF92aXJtaWRpKSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF92aXJtaWRpKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXZtaWRpID0gKHN0cnVjdCBzbmRfY2FyZF92aXJtaWRpICopY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXZtaWRpLT5jYXJkID0gY2FyZDsKIAogCWlmIChtaWRpX2RldnNbZGV2XSA+IE1BWF9NSURJX0RFVklDRVMpIHsKLQkJc25kX3ByaW50aygidG9vIG11Y2ggbWlkaSBkZXZpY2VzIGZvciB2aXJtaWRpICVkOiBmb3JjZSB0byB1c2UgJWRcbiIsIGRldiwgTUFYX01JRElfREVWSUNFUyk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAidG9vIG11Y2ggbWlkaSBkZXZpY2VzIGZvciB2aXJtaWRpICVkOiAiCisJCQkgICAiZm9yY2UgdG8gdXNlICVkXG4iLCBkZXYsIE1BWF9NSURJX0RFVklDRVMpOwogCQltaWRpX2RldnNbZGV2XSA9IE1BWF9NSURJX0RFVklDRVM7CiAJfQogCWZvciAoaWR4ID0gMDsgaWR4IDwgbWlkaV9kZXZzW2Rldl07IGlkeCsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2NvcmUuYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfY29yZS5jCmluZGV4IDE0ZTMzNTQuLjE5YzZlMzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdngvdnhfY29yZS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfY29yZS5jCkBAIC02ODgsNyArNjg4LDggQEAKIAkJaW1hZ2UgPSBkc3AtPmRhdGEgKyBpOwogCQkvKiBXYWl0IERTUCByZWFkeSBmb3IgYSBuZXcgcmVhZCAqLwogCQlpZiAoKGVyciA9IHZ4X3dhaXRfaXNyX2JpdChjaGlwLCBJU1JfVFhfRU1QVFkpKSA8IDApIHsKLQkJCXByaW50aygiZHNwIGxvYWRpbmcgZXJyb3IgYXQgcG9zaXRpb24gJWRcbiIsIGkpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgImRzcCBsb2FkaW5nIGVycm9yIGF0IHBvc2l0aW9uICVkXG4iLCBpKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJY3B0ciA9IGltYWdlOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jIGIvc291bmQvZHJpdmVycy92eC92eF9od2RlcC5jCmluZGV4IDhkNjM2MmUuLjQ2ZGY4ODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdngvdnhfaHdkZXAuYworKysgYi9zb3VuZC9kcml2ZXJzL3Z4L3Z4X2h3ZGVwLmMKQEAgLTExOSwxNiArMTE5LDYgQEAKIAogI2Vsc2UgLyogb2xkIHN0eWxlIGZpcm13YXJlIGxvYWRpbmcgKi8KIAotc3RhdGljIGludCB2eF9od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2eF9od2RlcF9yZWxlYXNlKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2eF9od2RlcF9kc3Bfc3RhdHVzKHN0cnVjdCBzbmRfaHdkZXAgKmh3LAogCQkJICAgICAgIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyAqaW5mbykKIHsKQEAgLTI0Myw4ICsyMzMsNiBAQAogCiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfVlg7CiAJaHctPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0JaHctPm9wcy5vcGVuID0gdnhfaHdkZXBfb3BlbjsKLQlody0+b3BzLnJlbGVhc2UgPSB2eF9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuZHNwX3N0YXR1cyA9IHZ4X2h3ZGVwX2RzcF9zdGF0dXM7CiAJaHctPm9wcy5kc3BfbG9hZCA9IHZ4X2h3ZGVwX2RzcF9sb2FkOwogCWh3LT5leGNsdXNpdmUgPSAxOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy92eC92eF91ZXIuYyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfdWVyLmMKaW5kZXggMGUxYmE5Yi4uYjA1NjBmZWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvdngvdnhfdWVyLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF91ZXIuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAgKiByZXR1cm5zIHRoZSBmcmVxdWVuY3kgb2YgVUVSLCBvciAwIGlmIG5vdCBzeW5jLAogICogb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCi1zdGF0aWMgaW50IHZ4X3JlYWRfdWVyX3N0YXR1cyhzdHJ1Y3QgdnhfY29yZSAqY2hpcCwgaW50ICptb2RlKQorc3RhdGljIGludCB2eF9yZWFkX3Vlcl9zdGF0dXMoc3RydWN0IHZ4X2NvcmUgKmNoaXAsIHVuc2lnbmVkIGludCAqbW9kZSkKIHsKIAlpbnQgdmFsLCBmcmVxOwogCmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvTWFrZWZpbGUgYi9zb3VuZC9pMmMvTWFrZWZpbGUKaW5kZXggMzc5NzA2NjYuLjM2ODc5YmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2kyYy9NYWtlZmlsZQorKysgYi9zb3VuZC9pMmMvTWFrZWZpbGUKQEAgLTcsOCArNyw2IEBACiBzbmQtY3M4NDI3LW9ianMgOj0gY3M4NDI3Lm8KIHNuZC10ZWE2MzMwdC1vYmpzIDo9IHRlYTYzMzB0Lm8KIAotb2JqLSQoQ09ORklHX0wzKSArPSBsMy8KLQogb2JqLSQoQ09ORklHX1NORCkgKz0gb3RoZXIvCiAKICMgVG9wbGV2ZWwgTW9kdWxlIERlcGVuZGVuY3kKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9sMy9NYWtlZmlsZSBiL3NvdW5kL2kyYy9sMy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk0NTViOC4uMDAwMDAwMAotLS0gYS9zb3VuZC9pMmMvbDMvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIEFMU0EKLSMKLQotc25kLXVkYTEzNDEtb2JqcyA6PSB1ZGExMzQxLm8KLQotIyBNb2R1bGUgRGVwZW5kZW5jeQotb2JqLSQoQ09ORklHX1NORF9TQTExWFhfVURBMTM0MSkgKz0gc25kLXVkYTEzNDEubwpkaWZmIC0tZ2l0IGEvc291bmQvaTJjL2wzL3VkYTEzNDEuYyBiL3NvdW5kL2kyYy9sMy91ZGExMzQxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NDBlYjQuLjAwMDAwMDAKLS0tIGEvc291bmQvaTJjL2wzL3VkYTEzNDEuYworKysgL2Rldi9udWxsCkBAIC0xLDkzNSArMCwwIEBACi0vKgotICogUGhpbGlwcyBVREExMzQxIG1peGVyIGRldmljZSBkcml2ZXIKLSAqIENvcHlyaWdodCAoYykgMjAwMiBUb21hcyBLYXNwYXJlayA8dG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6PgotICoKLSAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDAgTGVybm91dCAmIEhhdXNwaWUgU3BlZWNoIFByb2R1Y3RzLCBOLlYuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCi0gKgotICogSGlzdG9yeToKLSAqCi0gKiAyMDAyLTAzLTEzICAgVG9tYXMgS2FzcGFyZWsgIGluaXRpYWwgcmVsZWFzZSAtIGJhc2VkIG9uIHVkYTEzNDEuYyBmcm9tIE9TUwotICogMjAwMi0wMy0yOCAgIFRvbWFzIEthc3BhcmVrICBiYXNpYyBtaXhlciBpcyB3b3JraW5nICh2b2x1bWUsIGJhc3MsIHRyZWJsZSkKLSAqIDIwMDItMDMtMzAgICBUb21hcyBLYXNwYXJlayAgcHJvYyBmaWxlc3lzdGVtIHN1cHBvcnQsIGNvbXBsZXRlIG1peGVyIGFuZCBEU1AKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMgc3VwcG9ydAotICogMjAwMi0wNC0xMglUb21hcyBLYXNwYXJlawlwcm9jIGludGVyZmFjZSB1cGRhdGUsIGNvZGUgY2xlYW51cAotICogMjAwMi0wNS0xMiAgIFRvbWFzIEthc3BhcmVrICBhbm90aGVyIGNvZGUgY2xlYW51cAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L2wzL2wzLmg+Ci0KLSNpbmNsdWRlIDxzb3VuZC91ZGExMzQxLmg+Ci0KLS8qIHt7eyBIVyByZWdzIGRlZmluaXRpb24gKi8KLQotI2RlZmluZSBTVEFUMCAgICAgICAgICAgICAgICAgICAweDAwCi0jZGVmaW5lIFNUQVQxCQkJMHg4MAotI2RlZmluZSBTVEFUX01BU0sgICAgICAgICAgICAgICAweDgwCi0KLSNkZWZpbmUgREFUQTBfMAkJCTB4MDAKLSNkZWZpbmUgREFUQTBfMQkJCTB4NDAKLSNkZWZpbmUgREFUQTBfMgkJCTB4ODAKLSNkZWZpbmUgREFUQV9NQVNLICAgICAgICAgICAgICAgMHhjMAotCi0jZGVmaW5lIElTX0RBVEEwKHgpICAgICAoKHgpID49IGRhdGEwXzAgJiYgKHgpIDw9IGRhdGEwXzIpCi0jZGVmaW5lIElTX0RBVEExKHgpICAgICAoKHgpID09IGRhdGExKQotI2RlZmluZSBJU19TVEFUVVMoeCkgICAgKCh4KSA9PSBzdGF0MCB8fCAoeCkgPT0gc3RhdDEpCi0jZGVmaW5lIElTX0VYVEVORCh4KSAgICgoeCkgPj0gZXh0MCAmJiAoeCkgPD0gZXh0NikKLQotLyogfX19ICovCi0KLQotc3RhdGljIGNvbnN0IGNoYXIgKnBlYWtfbmFtZXNbXSA9IHsKLQkiYmVmb3JlIiwKLQkiYWZ0ZXIiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKmZpbHRlcl9uYW1lc1tdID0gewotCSJmbGF0IiwKLQkibWluIiwKLQkibWluIiwKLQkibWF4IiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICptaXhlcl9uYW1lc1tdID0gewotCSJkb3VibGUgZGlmZmVyZW50aWFsIiwKLQkiaW5wdXQgY2hhbm5lbCAxIChsaW5lIGluKSIsCi0JImlucHV0IGNoYW5uZWwgMiAobWljcm9waG9uZSkiLAotCSJkaWdpdGFsIG1peGVyIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkZWVtcF9uYW1lc1tdID0gewotCSJub25lIiwKLQkiMzIga0h6IiwKLQkiNDQuMSBrSHoiLAotCSI0OCBrSHoiLCAgICAgICAgCi19OwotCi1lbnVtIHVkYTEzNDFfcmVnc19uYW1lcyB7Ci0Jc3RhdDAsCi0Jc3RhdDEsCi0JZGF0YTBfMCwKLQlkYXRhMF8xLAotCWRhdGEwXzIsCi0JZGF0YTEsCi0JZXh0MCwKLQlleHQxLAotCWV4dDIsCi0JZW1wdHksCi0JZXh0NCwKLQlleHQ1LAotCWV4dDYsCi0JdWRhMTM0MV9yZWdfbGFzdCwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICp1ZGExMzQxX3JlZ19uYW1lc1tdID0gewotCSJzdGF0IDAgIiwKLQkic3RhdCAxICIsCi0JImRhdGEgMDAiLAotCSJkYXRhIDAxIiwKLQkiZGF0YSAwMiIsCi0JImRhdGEgMSAiLAotCSJleHQgMCIsCi0JImV4dCAxIiwKLQkiZXh0IDIiLAotCSJlbXB0eSIsCi0JImV4dCA0IiwKLQkiZXh0IDUiLAotCSJleHQgNiIsCi19OwotCi1zdGF0aWMgY29uc3QgaW50IHVkYTEzNDFfZW51bV9pdGVtc1tdID0gewotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0JMiwgLy9wZWFrIC0gYmVmb3JlL2FmdGVyCi0JNCwgLy9kZWVtcCAtIG5vbmUvMzIvNDQuMS80OAotCTAsCi0JNCwgLy9maWx0ZXIgLSBmbGF0L21pbi9taW4vbWF4Ci0JMCwgMCwgMCwKLQk0LCAvL21peGVyIC0gZGlmZmVyL2xpbmUvbWljL21peGVyCi0JMCwgMCwgMCwgMCwgMCwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICoqIHVkYTEzNDFfZW51bV9uYW1lc1tdID0gewotCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0JcGVha19uYW1lcywgLy9wZWFrIC0gYmVmb3JlL2FmdGVyCi0JZGVlbXBfbmFtZXMsIC8vZGVlbXAgLSBub25lLzMyLzQ0LjEvNDgKLQlOVUxMLAotCWZpbHRlcl9uYW1lcywgLy9maWx0ZXIgLSBmbGF0L21pbi9taW4vbWF4Ci0JTlVMTCwgTlVMTCwgTlVMTCwKLQltaXhlcl9uYW1lcywgLy9taXhlciAtIGRpZmZlci9saW5lL21pYy9taXhlcgotCU5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi19OwotCi10eXBlZGVmIGludCB1ZGExMzQxX2NmZ1tDTURfTEFTVF07Ci0KLXN0cnVjdCB1ZGExMzQxIHsKLQlpbnQgKCp3cml0ZSkgKHN0cnVjdCBsM19jbGllbnQgKnVkYTEzNDEsIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKTsKLQlpbnQgKCpyZWFkKSAoc3RydWN0IGwzX2NsaWVudCAqdWRhMTM0MSwgdW5zaWduZWQgc2hvcnQgcmVnKTsgICAgICAgIAotCXVuc2lnbmVkIGNoYXIgcmVnc1t1ZGExMzQxX3JlZ19sYXN0XTsKLQlpbnQgYWN0aXZlOwotCXNwaW5sb2NrX3QgcmVnX2xvY2s7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCXVkYTEzNDFfY2ZnIGNmZzsKLSNpZmRlZiBDT05GSUdfUE0KLQl1bnNpZ25lZCBjaGFyIHN1c3BlbmRfcmVnc1t1ZGExMzQxX3JlZ19sYXN0XTsKLQl1ZGExMzQxX2NmZyBzdXNwZW5kX2NmZzsKLSNlbmRpZgotfTsKLQotLyogdHJhbnNmZXIgOGJpdCBpbnRlZ2VyIGludG8gc3RyaW5nIHdpdGggYmluYXJ5IHJlcHJlc2VudGF0aW9uICovCi1zdGF0aWMgdm9pZCBpbnQyc3RyX2JpbjgodWludDhfdCB2YWwsIGNoYXIgKmJ1ZikKLXsKLQljb25zdCBpbnQgc2l6ZSA9IHNpemVvZih2YWwpICogODsKLQlpbnQgaTsKLQotCWZvciAoaT0gMDsgaSA8IHNpemU7IGkrKyl7Ci0JCSooYnVmKyspID0gKHZhbCA+PiAoc2l6ZSAtIDEpKSA/ICcxJyA6ICcwJzsKLQkJdmFsIDw8PSAxOwotCX0KLQkqYnVmID0gJ1wwJzsgLy9lbmQgdGhlIHN0cmluZyB3aXRoIHplcm8KLX0KLQotLyoge3t7IEhXIG1hbmlwdWxhdGlvbiByb3V0aW5lcyAqLwotCi1zdGF0aWMgaW50IHNuZF91ZGExMzQxX2NvZGVjX3dyaXRlKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIHVuc2lnbmVkIHNob3J0IHJlZywgdW5zaWduZWQgc2hvcnQgdmFsKQotewotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQl1bnNpZ25lZCBjaGFyIGJ1ZlsyXSA9IHsgMHhjMCwgMHhlMCB9OyAvLyBmb3IgRVhUIGFkZHJlc3NpbmcKLQlpbnQgZXJyID0gMDsKLQotCXVkYS0+cmVnc1tyZWddID0gdmFsOwotCi0JaWYgKHVkYS0+YWN0aXZlKSB7Ci0JCWlmIChJU19EQVRBMChyZWcpKSB7Ci0JCQllcnIgPSBsM193cml0ZShjbG50LCBVREExMzQxX0RBVEEwLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSZ2YWwsIDEpOwotCQl9IGVsc2UgaWYgKElTX0RBVEExKHJlZykpIHsKLQkJCWVyciA9IGwzX3dyaXRlKGNsbnQsIFVEQTEzNDFfREFUQTEsIChjb25zdCB1bnNpZ25lZCBjaGFyICopJnZhbCwgMSk7Ci0JCX0gZWxzZSBpZiAoSVNfU1RBVFVTKHJlZykpIHsKLQkJCWVyciA9IGwzX3dyaXRlKGNsbnQsIFVEQTEzNDFfU1RBVFVTLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSZ2YWwsIDEpOwotCQl9IGVsc2UgaWYgKElTX0VYVEVORChyZWcpKSB7Ci0JCQlidWZbMF0gfD0gKHJlZyAtIGV4dDApICYgMHg3OyAgIC8vRVhUIGFkZHJlc3MKLQkJCWJ1ZlsxXSB8PSB2YWw7ICAgICAgICAgICAgICAgICAgLy9FWFQgZGF0YQotCQkJZXJyID0gbDNfd3JpdGUoY2xudCwgVURBMTM0MV9EQVRBMCwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilidWYsIDIpOwotCQl9Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0VSUiAiVURBMTM0MSBjb2RlYyBub3QgYWN0aXZlIVxuIik7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9jb2RlY19yZWFkKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIHVuc2lnbmVkIHNob3J0IHJlZykKLXsKLQl1bnNpZ25lZCBjaGFyIHZhbDsKLQlpbnQgZXJyOwotCi0JZXJyID0gbDNfcmVhZChjbG50LCByZWcsICZ2YWwsIDEpOwotCWlmIChlcnIgPT0gMSkKLQkJLy8gdXNlIGp1c3QgNmJpdHMgLSB0aGUgcmVzdCBpcyBhZGRyZXNzIG9mIHRoZSByZWcKLQkJcmV0dXJuIHZhbCAmIDYzOwotCXJldHVybiBlcnIgPCAwID8gZXJyIDogLUVJTzsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc25kX3VkYTEzNDFfdmFsaWRfcmVnKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIHVuc2lnbmVkIHNob3J0IHJlZykKLXsKLQlyZXR1cm4gcmVnIDwgdWRhMTM0MV9yZWdfbGFzdDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhzdHJ1Y3QgbDNfY2xpZW50ICpjbG50LCB1bnNpZ25lZCBzaG9ydCByZWcsCi0JCQkJICAgdW5zaWduZWQgc2hvcnQgbWFzaywgdW5zaWduZWQgc2hvcnQgc2hpZnQsCi0JCQkJICAgdW5zaWduZWQgc2hvcnQgdmFsdWUsIGludCBmbHVzaCkKLXsKLQlpbnQgY2hhbmdlOwotCXVuc2lnbmVkIHNob3J0IG9sZCwgbmV3OwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQotI2lmIDAKLQlwcmludGsoS0VSTl9ERUJVRyAidXBkYXRlX2JpdHM6IHJlZzogJXMgbWFzazogJWQgc2hpZnQ6ICVkIHZhbDogJWRcbiIsCi0JICAgICAgIHVkYTEzNDFfcmVnX25hbWVzW3JlZ10sIG1hc2ssIHNoaWZ0LCB2YWx1ZSk7Ci0jZW5kaWYKLSAgICAgICAgCi0JaWYgKCFzbmRfdWRhMTM0MV92YWxpZF9yZWcoY2xudCwgcmVnKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3Bpbl9sb2NrKCZ1ZGEtPnJlZ19sb2NrKTsKLQlvbGQgPSB1ZGEtPnJlZ3NbcmVnXTsKLQluZXcgPSAob2xkICYgfihtYXNrIDw8IHNoaWZ0KSkgfCAodmFsdWUgPDwgc2hpZnQpOwotCWNoYW5nZSA9IG9sZCAhPSBuZXc7Ci0JaWYgKGNoYW5nZSkgewotCQlpZiAoZmx1c2gpIHVkYS0+d3JpdGUoY2xudCwgcmVnLCBuZXcpOwotCQl1ZGEtPnJlZ3NbcmVnXSA9IG5ldzsKLQl9Ci0Jc3Bpbl91bmxvY2soJnVkYS0+cmVnX2xvY2spOwotCXJldHVybiBjaGFuZ2U7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfY2ZnX3dyaXRlKHN0cnVjdCBsM19jbGllbnQgKmNsbnQsIHVuc2lnbmVkIHNob3J0IHdoYXQsCi0JCQkJIHVuc2lnbmVkIHNob3J0IHZhbHVlLCBpbnQgZmx1c2gpCi17Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCByZXQgPSAwOwotI2lmZGVmIENPTkZJR19QTQotCWludCByZWc7Ci0jZW5kaWYKLQotI2lmIDAKLQlwcmludGsoS0VSTl9ERUJVRyAiY2ZnX3dyaXRlIHdoYXQ6ICVkIHZhbHVlOiAlZFxuIiwgd2hhdCwgdmFsdWUpOwotI2VuZGlmCi0KLQl1ZGEtPmNmZ1t3aGF0XSA9IHZhbHVlOwotICAgICAgICAKLQlzd2l0Y2god2hhdCkgewotCWNhc2UgQ01EX1JFU0VUOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAxLCAyLCAxLCBmbHVzaCk7CS8vIE1VVEUKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDAsIDEsIDYsIDEsIGZsdXNoKTsJLy8gUkVTRVQKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDAsIDEsIDYsIDAsIGZsdXNoKTsJLy8gUkVTVE9SRQotCQl1ZGEtPmNmZ1tDTURfUkVTRVRdPTA7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0ZTOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MCwgMywgNCwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfRk9STUFUOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBzdGF0MCwgNywgMSwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfT0dBSU46Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHN0YXQxLCAxLCA2LCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9JR0FJTjoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDEsIDEsIDUsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0RBQzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDEsIDEsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0FEQzoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgc3RhdDEsIDEsIDEsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX1ZPTFVNRToKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMCwgNjMsIDAsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0JBU1M6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGRhdGEwXzEsIDE1LCAyLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9UUkVCQkxFOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8xLCAzLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9QRUFLOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAxLCA1LCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9ERUVNUDoKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMiwgMywgMywgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfTVVURToKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZGF0YTBfMiwgMSwgMiwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfRklMVEVSOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBkYXRhMF8yLCAzLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9DSDE6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDAsIDMxLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9DSDI6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDEsIDMxLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9NSUM6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDIsIDcsIDIsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX01JWEVSOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQyLCAzLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9BR0M6Ci0JCXJldCA9IHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIGV4dDQsIDEsIDQsIHZhbHVlLCBmbHVzaCk7Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0lHOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQ0LCAzLCAwLCB2YWx1ZSAmIDB4MywgZmx1c2gpOwotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQ1LCAzMSwgMCwgdmFsdWUgPj4gMiwgZmx1c2gpOwotCQlicmVhazsKLQljYXNlIENNRF9BR0NfVElNRToKLQkJcmV0ID0gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgZXh0NiwgNywgMiwgdmFsdWUsIGZsdXNoKTsKLQkJYnJlYWs7Ci0JY2FzZSBDTURfQUdDX0xFVkVMOgotCQlyZXQgPSBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCBleHQ2LCAzLCAwLCB2YWx1ZSwgZmx1c2gpOwotCQlicmVhazsKLSNpZmRlZiBDT05GSUdfUE0JCQotCWNhc2UgQ01EX1NVU1BFTkQ6Ci0JCWZvciAocmVnID0gc3RhdDA7IHJlZyA8IHVkYTEzNDFfcmVnX2xhc3Q7IHJlZysrKQotCQkJdWRhLT5zdXNwZW5kX3JlZ3NbcmVnXSA9IHVkYS0+cmVnc1tyZWddOwotCQlmb3IgKHJlZyA9IDA7IHJlZyA8IENNRF9MQVNUOyByZWcrKykKLQkJCXVkYS0+c3VzcGVuZF9jZmdbcmVnXSA9IHVkYS0+Y2ZnW3JlZ107Ci0JCWJyZWFrOwotCWNhc2UgQ01EX1JFU1VNRToKLQkJZm9yIChyZWcgPSBzdGF0MDsgcmVnIDwgdWRhMTM0MV9yZWdfbGFzdDsgcmVnKyspCi0JCQlzbmRfdWRhMTM0MV9jb2RlY193cml0ZShjbG50LCByZWcsIHVkYS0+c3VzcGVuZF9yZWdzW3JlZ10pOwotCQlmb3IgKHJlZyA9IDA7IHJlZyA8IENNRF9MQVNUOyByZWcrKykKLQkJCXVkYS0+Y2ZnW3JlZ10gPSB1ZGEtPnN1c3BlbmRfY2ZnW3JlZ107Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotICAgICAgICAgICAgICAgIAotCWlmICghdWRhLT5hY3RpdmUpCi0JCXByaW50ayhLRVJOX0VSUiAiVURBMTM0MSBjb2RlYyBub3QgYWN0aXZlIVxuIik7ICAgICAgICAgICAgICAgIAotCXJldHVybiByZXQ7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgUHJvYyBpbnRlcmZhY2UgKi8KLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotCi1zdGF0aWMgY29uc3QgY2hhciAqZm9ybWF0X25hbWVzW10gPSB7Ci0JIkkyUy1idXMiLAotCSJMU0IgMTZiaXRzIiwKLQkiTFNCIDE4Yml0cyIsCi0JIkxTQiAyMGJpdHMiLAotCSJNU0IiLAotCSJpbiBMU0IgMTZiaXRzL291dCBNU0IiLAotCSJpbiBMU0IgMThiaXRzL291dCBNU0IiLAotCSJpbiBMU0IgMjBiaXRzL291dCBNU0IiLCAgICAgICAgCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqZnNfbmFtZXNbXSA9IHsKLQkiNTEyKmZzIiwKLQkiMzg0KmZzIiwKLQkiMjU2KmZzIiwKLQkiVW51c2VkIC0gYmFkIHZhbHVlISIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciogYmFzc192YWx1ZXNbXVsxNl0gPSB7Ci0JeyIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLAotCSAiMCBkQiIsICIwIGRCIiwgIjAgZEIiLCAiMCBkQiIsICJ1bmRlZmluZWQiLCB9LCAvL2ZsYXQKLQl7IjAgZEIiLCAiMiBkQiIsICI0IGRCIiwgIjYgZEIiLCAiOCBkQiIsICIxMCBkQiIsICIxMiBkQiIsICIxNCBkQiIsICIxNiBkQiIsICIxOCBkQiIsICIxOCBkQiIsCi0JICIxOCBkQiIsICIxOCBkQiIsICIxOCBkQiIsICIxOCBkQiIsICJ1bmRlZmluZWQiLH0sIC8vIG1pbgotCXsiMCBkQiIsICIyIGRCIiwgIjQgZEIiLCAiNiBkQiIsICI4IGRCIiwgIjEwIGRCIiwgIjEyIGRCIiwgIjE0IGRCIiwgIjE2IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwKLQkgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgIjE4IGRCIiwgInVuZGVmaW5lZCIsfSwgLy8gbWluCi0JeyIwIGRCIiwgIjIgZEIiLCAiNCBkQiIsICI2IGRCIiwgIjggZEIiLCAiMTAgZEIiLCAiMTIgZEIiLCAiMTQgZEIiLCAiMTYgZEIiLCAiMTggZEIiLCAiMjAgZEIiLAotCSAiMjIgZEIiLCAiMjQgZEIiLCAiMjQgZEIiLCAiMjQgZEIiLCAidW5kZWZpbmVkIix9LCAvLyBtYXgKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICptaWNfc2Vuc192YWx1ZVtdID0gewotCSItMyBkQiIsICIwIGRCIiwgIjMgZEIiLCAiOSBkQiIsICIxNSBkQiIsICIyMSBkQiIsICIyNyBkQiIsICJub3QgdXNlZCIsCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgQUdDX2F0aW1lW10gPSB7Ci0JMTEsIDE2LCAxMSwgMTYsIDIxLCAxMSwgMTYsIDIxLAotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IEFHQ19kdGltZVtdID0gewotCTEwMCwgMTAwLCAyMDAsIDIwMCwgMjAwLCA0MDAsIDQwMCwgNDAwLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKkFHQ19sZXZlbFtdID0gewotCSItOS4wIiwgIi0xMS41IiwgIi0xNS4wIiwgIi0xNy41IiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICppZ19zbWFsbF92YWx1ZVtdID0gewotCSItMy4wIiwgIi0yLjUiLCAiLTIuMCIsICItMS41IiwgIi0xLjAiLCAiLTAuNSIsCi19OwotCi0vKgotICogdGhpcyB3YXMgY29tcHV0ZWQgYXMgcGVha192YWx1ZVtpXSA9IHBvdygoNjMtaSkqMS40MiwxLjAxMykKLSAqCi0gKiBVREExMzQxIGRhdGFzaGVldCBvbiBwYWdlIDIxOiBQZWFrIHZhbHVlIChkQikgPSAoUGVhayBsZXZlbCAtIDYzLjUpKjUqbG9nMgotICogVGhlcmUgaXMgYW4gdGFibGUgd2l0aCB0aGVzZSB2YWx1ZXMgW2xldmVsXT12YWx1ZTogWzNdPS05MC4zMSwgWzddPS04NC4yOQotICogWzYxXT0tMi43OCwgWzYyXSA9IC0xLjQ4LCBbNjNdID0gMC4wCi0gKiBJIHRyaWVkIHRvIGNvbXB1dGUgaXQsIGJ1dCB1c2luZyBidXQgZXZlbiB1c2luZyBsb2dhcml0aG0gd2l0aCBiYXNlIGVpdGhlciAxMCBvciAyCi0gKiBpIHdhcyduIGFibGUgdG8gZ2V0IHZhbHVlcyBpbiB0aGUgdGFibGUgZnJvbSB0aGUgZm9ybXVsYS4gU28gSSBjb25zdHJ1Y3RlZCBhbm90aGVyCi0gKiBmb3JtdWxhIChzZWUgYWJvdmUpIHRvIGludGVycG9sYXRlIHRoZSB2YWx1ZXMgYXMgZ29vZCBhcyBwb3NzaWJsZS4gSWYgdGhlcmUgaXMgc29tZQotICogbWlzdGFrZSwgcGxlYXNlIGNvbnRhY3QgbWUgb24gdG9tYXMua2FzcGFyZWtAc2V6bmFtLmN6LiBUaGFua3MuCi0gKiBVREExMzQxVFMgZGF0YXNoZWV0IGlzIGF2YWlsYWJsZSBhdDoKLSAqICAgaHR0cDovL3d3dy11czkuc2VtaWNvbmR1Y3RvcnMuY29tL2Fjcm9iYXQvZGF0YXNoZWV0cy9VREExMzQxVFNfMy5wZGYgCi0gKi8KLXN0YXRpYyBjb25zdCBjaGFyICpwZWFrX3ZhbHVlW10gPSB7Ci0JIi1JTkYgZEIiLCAiTi5BLiIsICJOLkEiLCAiOTAuMzEgZEIiLCAiTi5BLiIsICJOLkEuIiwgIk4uQS4iLCAiLTg0LjI5IGRCIiwKLQkiLTgyLjY1IGRCIiwgIi04MS4xMyBkQiIsICItNzkuNjEgZEIiLCAiLTc4LjA5IGRCIiwgIi03Ni41NyBkQiIsICItNzUuMDUgZEIiLCAiLTczLjUzIGRCIiwKLQkiLTcyLjAxIGRCIiwgIi03MC40OSBkQiIsICItNjguOTcgZEIiLCAiLTY3LjQ1IGRCIiwgIi02NS45MyBkQiIsICItNjQuNDEgZEIiLCAiLTYyLjkwIGRCIiwKLQkiLTYxLjM4IGRCIiwgIi01OS44NiBkQiIsICItNTguMzUgZEIiLCAiLTU2LjgzIGRCIiwgIi01NS4zMiBkQiIsICItNTMuODAgZEIiLCAiLTUyLjI5IGRCIiwKLQkiLTUwLjc4IGRCIiwgIi00OS4yNiBkQiIsICItNDcuNzUgZEIiLCAiLTQ2LjI0IGRCIiwgIi00NC43MyBkQiIsICItNDMuMjIgZEIiLCAiLTQxLjcxIGRCIiwKLQkiLTQwLjIwIGRCIiwgIi0zOC42OSBkQiIsICItMzcuMTkgZEIiLCAiLTM1LjY4IGRCIiwgIi0zNC4xNyBkQiIsICItMzIuNjcgZEIiLCAiLTMxLjE3IGRCIiwKLQkiLTI5LjY2IGRCIiwgIi0yOC4xNiBkQiIsICItMjYuNjYgZEIiLCAiLTI1LjE2IGRCIiwgIi0yMy42NiBkQiIsICItMjIuMTYgZEIiLCAiLTIwLjY3IGRCIiwKLQkiLTE5LjE3IGRCIiwgIi0xNy42OCBkQiIsICItMTYuMTkgZEIiLCAiLTE0LjcwIGRCIiwgIi0xMy4yMSBkQiIsICItMTEuNzIgZEIiLCAiLTEwLjI0IGRCIiwKLQkiLTguNzYgZEIiLCAiLTcuMjggZEIiLCAiLTUuODEgZEIiLCAiLTQuMzQgZEIiLCAiLTIuODggZEIiLCAiLTEuNDMgZEIiLCAiMC4wMCBkQiIsCi19OwotCi1zdGF0aWMgdm9pZCBzbmRfdWRhMTM0MV9wcm9jX3JlYWQoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwgCi0JCQkJICBzdHJ1Y3Qgc25kX2luZm9fYnVmZmVyICpidWZmZXIpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IGVudHJ5LT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCBwZWFrOwotCi0JcGVhayA9IHNuZF91ZGExMzQxX2NvZGVjX3JlYWQoY2xudCwgVURBMTM0MV9EQVRBMSk7Ci0JaWYgKHBlYWsgPCAwKQotCQlwZWFrID0gMDsKLQkKLQlzbmRfaXByaW50ZihidWZmZXIsICIlc1xuXG4iLCB1ZGEtPmNhcmQtPmxvbmduYW1lKTsKLQotCS8vIGZvciBpbmZvcm1hdGlvbiBhYm91dCBjb21wdXRlZCB2YWx1ZXMgc2VlIFVEQTEzNDFUUyBkYXRhc2hlZXQgcGFnZXMgMTUgLSAyMQotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRBQyBwb3dlciAgICAgICAgICAgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX0RBQ10gPyAib24iIDogIm9mZiIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFEQyBwb3dlciAgICAgICAgICAgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX0FEQ10gPyAib24iIDogIm9mZiIpOwotIAlzbmRfaXByaW50ZihidWZmZXIsICJDbG9jayBmcmVxdWVuY3kgICAgIDogJXNcbiIsIGZzX25hbWVzW3VkYS0+Y2ZnW0NNRF9GU11dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJEYXRhIGZvcm1hdCAgICAgICAgIDogJXNcblxuIiwgZm9ybWF0X25hbWVzW3VkYS0+Y2ZnW0NNRF9GT1JNQVRdXSk7Ci0KLQlzbmRfaXByaW50ZihidWZmZXIsICJGaWx0ZXIgbW9kZSAgICAgICAgIDogJXNcbiIsIGZpbHRlcl9uYW1lc1t1ZGEtPmNmZ1tDTURfRklMVEVSXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIk1peGVyIG1vZGUgICAgICAgICAgOiAlc1xuIiwgbWl4ZXJfbmFtZXNbdWRhLT5jZmdbQ01EX01JWEVSXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkRlLWVtcGhhc2lzICAgICAgICAgOiAlc1xuIiwgZGVlbXBfbmFtZXNbdWRhLT5jZmdbQ01EX0RFRU1QXV0pOwkKLQlzbmRfaXByaW50ZihidWZmZXIsICJQZWFrIGRldGVjdGlvbiBwb3MuIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9QRUFLXSA/ICJhZnRlciIgOiAiYmVmb3JlIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiUGVhayB2YWx1ZSAgICAgICAgICA6ICVzXG5cbiIsIHBlYWtfdmFsdWVbcGVha10pOwkJCi0JCi0Jc25kX2lwcmludGYoYnVmZmVyLCAiQXV0b21hdGljIEdhaW4gQ3RybCA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfQUdDXSA/ICJvbiIgOiAib2ZmIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiQUdDIGF0dGFjayB0aW1lICAgICA6ICVkIG1zXG4iLCBBR0NfYXRpbWVbdWRhLT5jZmdbQ01EX0FHQ19USU1FXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFHQyBkZWNheSB0aW1lICAgICAgOiAlZCBtc1xuIiwgQUdDX2R0aW1lW3VkYS0+Y2ZnW0NNRF9BR0NfVElNRV1dKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJBR0Mgb3V0cHV0IGxldmVsICAgIDogJXMgZEJcblxuIiwgQUdDX2xldmVsW3VkYS0+Y2ZnW0NNRF9BR0NfTEVWRUxdXSk7Ci0KLQlzbmRfaXByaW50ZihidWZmZXIsICJNdXRlICAgICAgICAgICAgICAgIDogJXNcbiIsIHVkYS0+Y2ZnW0NNRF9NVVRFXSA/ICJvbiIgOiAib2ZmIik7Ci0KLQlpZiAodWRhLT5jZmdbQ01EX1ZPTFVNRV0gPT0gMCkKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiVm9sdW1lICAgICAgICAgICAgICA6IDAgZEJcbiIpOwotCWVsc2UgaWYgKHVkYS0+Y2ZnW0NNRF9WT0xVTUVdIDwgNjIpCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlZvbHVtZSAgICAgICAgICAgICAgOiAlZCBkQlxuIiwgLTEqdWRhLT5jZmdbQ01EX1ZPTFVNRV0gKzEpOwotCWVsc2UKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiVm9sdW1lICAgICAgICAgICAgICA6IC1JTkYgZEJcbiIpOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkJhc3MgICAgICAgICAgICAgICAgOiAlc1xuIiwgYmFzc192YWx1ZXNbdWRhLT5jZmdbQ01EX0ZJTFRFUl1dW3VkYS0+Y2ZnW0NNRF9CQVNTXV0pOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlRyZWJibGUgICAgICAgICAgICAgOiAlZCBkQlxuIiwgdWRhLT5jZmdbQ01EX0ZJTFRFUl0gPyAyKnVkYS0+Y2ZnW0NNRF9UUkVCQkxFXSA6IDApOwotCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklucHV0IEdhaW4gKDZkQikgICAgOiAlc1xuIiwgdWRhLT5jZmdbQ01EX0lHQUlOXSA/ICJvbiIgOiAib2ZmIik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiT3V0cHV0IEdhaW4gKDZkQikgICA6ICVzXG4iLCB1ZGEtPmNmZ1tDTURfT0dBSU5dID8gIm9uIiA6ICJvZmYiKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJNaWMgc2Vuc2l0aXZpdHkgICAgIDogJXNcbiIsIG1pY19zZW5zX3ZhbHVlW3VkYS0+Y2ZnW0NNRF9NSUNdXSk7Ci0KLQkKLQlpZih1ZGEtPmNmZ1tDTURfQ0gxXSA8IDMxKQotCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBnYWluIGNoYW5uZWwgMTogLSVkLiVjIGRCXG4iLAotCQkJICAgICgodWRhLT5jZmdbQ01EX0NIMV0gPj4gMSkgKiAzKSArICh1ZGEtPmNmZ1tDTURfQ0gxXSAmIDEpLAotCQkJICAgIHVkYS0+Y2ZnW0NNRF9DSDFdICYgMSA/ICc1JyA6ICcwJyk7Ci0JZWxzZQotCQlzbmRfaXByaW50ZihidWZmZXIsICJNaXhlciBnYWluIGNoYW5uZWwgMTogLUlORiBkQlxuIik7Ci0JaWYodWRhLT5jZmdbQ01EX0NIMl0gPCAzMSkKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiTWl4ZXIgZ2FpbiBjaGFubmVsIDI6IC0lZC4lYyBkQlxuIiwKLQkJCSAgICAoKHVkYS0+Y2ZnW0NNRF9DSDJdID4+IDEpICogMykgKyAodWRhLT5jZmdbQ01EX0NIMl0gJiAxKSwKLQkJCSAgICB1ZGEtPmNmZ1tDTURfQ0gyXSAmIDEgPyAnNScgOiAnMCcpOwotCWVsc2UKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiTWl4ZXIgZ2FpbiBjaGFubmVsIDI6IC1JTkYgZEJcbiIpOwotCi0JaWYodWRhLT5jZmdbQ01EX0lHXSA+IDUpCi0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIklucHV0IEFtcC4gR2FpbiBjaCAyOiAlZC4lYyBkQlxuIiwKLQkJCSAgICAodWRhLT5jZmdbQ01EX0lHXSA+PiAxKSAtMywgdWRhLT5jZmdbQ01EX0lHXSAmIDEgPyAnNScgOiAnMCcpOwotCWVsc2UKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiSW5wdXQgQW1wLiBHYWluIGNoIDI6ICVzIGRCXG4iLCAgaWdfc21hbGxfdmFsdWVbdWRhLT5jZmdbQ01EX0lHXV0pOwotfQotCi1zdGF0aWMgdm9pZCBzbmRfdWRhMTM0MV9wcm9jX3JlZ3NfcmVhZChzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5LCAKLQkJCQkgICAgICAgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsJCQotCWludCByZWc7Ci0JY2hhciBidWZbMTJdOwotCi0JZm9yIChyZWcgPSAwOyByZWcgPCB1ZGExMzQxX3JlZ19sYXN0OyByZWcgKyspIHsKLQkJaWYgKHJlZyA9PSBlbXB0eSkKLQkJCWNvbnRpbnVlOwotCQlpbnQyc3RyX2JpbjgodWRhLT5yZWdzW3JlZ10sIGJ1Zik7Ci0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzID0gJXNcbiIsIHVkYTEzNDFfcmVnX25hbWVzW3JlZ10sIGJ1Zik7Ci0JfQotCi0JaW50MnN0cl9iaW44KHNuZF91ZGExMzQxX2NvZGVjX3JlYWQoY2xudCwgVURBMTM0MV9EQVRBMSksIGJ1Zik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiREFUQTEgPSAlc1xuIiwgYnVmKTsKLX0KLSNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwotCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgc25kX3VkYTEzNDFfcHJvY19pbml0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwotCi0JaWYgKCEgc25kX2NhcmRfcHJvY19uZXcoY2FyZCwgInVkYTEzNDEiLCAmZW50cnkpKQotCQlzbmRfaW5mb19zZXRfdGV4dF9vcHMoZW50cnksIGNsbnQsIHNuZF91ZGExMzQxX3Byb2NfcmVhZCk7Ci0JaWYgKCEgc25kX2NhcmRfcHJvY19uZXcoY2FyZCwgInVkYTEzNDEtcmVncyIsICZlbnRyeSkpCi0JCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2xudCwgc25kX3VkYTEzNDFfcHJvY19yZWdzX3JlYWQpOwotfQotCi0vKiB9fX0gKi8KLQotLyoge3t7IE1peGVyIGNvbnRyb2xzIHNldHRpbmcgKi8KLQotLyoge3t7IFVEQTEzNDEgc2luZ2xlIGZ1bmN0aW9ucyAqLwotCi0jZGVmaW5lIFVEQTEzNDFfU0lOR0xFKHhuYW1lLCB3aGVyZSwgcmVnLCBzaGlmdCwgbWFzaywgaW52ZXJ0KSBcCi17IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5mbyA9IHNuZF91ZGExMzQxX2luZm9fc2luZ2xlLCBcCi0gIC5nZXQgPSBzbmRfdWRhMTM0MV9nZXRfc2luZ2xlLCAucHV0ID0gc25kX3VkYTEzNDFfcHV0X3NpbmdsZSwgXAotICAucHJpdmF0ZV92YWx1ZSA9IHdoZXJlIHwgKHJlZyA8PCA1KSB8IChzaGlmdCA8PCA5KSB8IChtYXNrIDw8IDEyKSB8IChpbnZlcnQgPDwgMTgpIFwKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9pbmZvX3NpbmdsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotewotCWludCBtYXNrID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDEyKSAmIDYzOwotCi0JdWluZm8tPnR5cGUgPSBtYXNrID09IDEgPyBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU4gOiBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7Ci0JdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IG1hc2s7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfZ2V0X3NpbmdsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7ICAgICAgICAKLQlpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiA2MzsKLQlpbnQgaW52ZXJ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE4KSAmIDE7Ci0gICAgICAgIAotCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gdWRhLT5jZmdbd2hlcmVdOwotCWlmIChpbnZlcnQpCi0JCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbWFzayAtIHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfcHV0X3NpbmdsZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7ICAgICAgICAKLQlpbnQgcmVnID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDUpICYgMTU7Ci0JaW50IHNoaWZ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDkpICYgNzsKLQlpbnQgbWFzayA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxMikgJiA2MzsKLQlpbnQgaW52ZXJ0ID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDE4KSAmIDE7Ci0JdW5zaWduZWQgc2hvcnQgdmFsOwotCi0JdmFsID0gKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdICYgbWFzayk7Ci0JaWYgKGludmVydCkKLQkJdmFsID0gbWFzayAtIHZhbDsKLQotCXVkYS0+Y2ZnW3doZXJlXSA9IHZhbDsKLQlyZXR1cm4gc25kX3VkYTEzNDFfdXBkYXRlX2JpdHMoY2xudCwgcmVnLCBtYXNrLCBzaGlmdCwgdmFsLCBGTFVTSCk7Ci19Ci0KLS8qIH19fSAqLwotCi0vKiB7e3sgVURBMTM0MSBlbnVtIGZ1bmN0aW9ucyAqLwotCi0jZGVmaW5lIFVEQTEzNDFfRU5VTSh4bmFtZSwgd2hlcmUsIHJlZywgc2hpZnQsIG1hc2ssIGludmVydCkgXAoteyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZm8gPSBzbmRfdWRhMTM0MV9pbmZvX2VudW0sIFwKLSAgLmdldCA9IHNuZF91ZGExMzQxX2dldF9lbnVtLCAucHV0ID0gc25kX3VkYTEzNDFfcHV0X2VudW0sIFwKLSAgLnByaXZhdGVfdmFsdWUgPSB3aGVyZSB8IChyZWcgPDwgNSkgfCAoc2hpZnQgPDwgOSkgfCAobWFzayA8PCAxMikgfCAoaW52ZXJ0IDw8IDE4KSBcCi19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfaW5mb19lbnVtKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQotewotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7Ci0JY29uc3QgY2hhciAqKnRleHRzOwotCQotCS8vIHRoaXMgcmVnaXN0ZXIgd2UgZG9uJ3QgaGFuZGxlIHRoaXMgd2F5Ci0JaWYgKCF1ZGExMzQxX2VudW1faXRlbXNbd2hlcmVdKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSB1ZGExMzQxX2VudW1faXRlbXNbd2hlcmVdOwotCi0JaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gdWRhMTM0MV9lbnVtX2l0ZW1zW3doZXJlXSkKLQkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHVkYTEzNDFfZW51bV9pdGVtc1t3aGVyZV0gLSAxOwotCi0JdGV4dHMgPSB1ZGExMzQxX2VudW1fbmFtZXNbd2hlcmVdOwotCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLCB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfZ2V0X2VudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhID0gY2xudC0+ZHJpdmVyX2RhdGE7Ci0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotICAgICAgICAKLQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gdWRhLT5jZmdbd2hlcmVdOwkKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9wdXRfZW51bShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgbDNfY2xpZW50ICpjbG50ID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQlpbnQgd2hlcmUgPSBrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSAmIDMxOyAgICAgICAgCi0JaW50IHJlZyA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA1KSAmIDE1OwotCWludCBzaGlmdCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA5KSAmIDc7Ci0JaW50IG1hc2sgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTIpICYgNjM7Ci0KLQl1ZGEtPmNmZ1t3aGVyZV0gPSAodWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSAmIG1hc2spOwotCQotCXJldHVybiBzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCByZWcsIG1hc2ssIHNoaWZ0LCB1ZGEtPmNmZ1t3aGVyZV0sIEZMVVNIKTsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBVREExMzQxIDJyZWdzIGZ1bmN0aW9ucyAqLwotCi0jZGVmaW5lIFVEQTEzNDFfMlJFR1MoeG5hbWUsIHdoZXJlLCByZWdfMSwgcmVnXzIsIHNoaWZ0XzEsIHNoaWZ0XzIsIG1hc2tfMSwgbWFza18yLCBpbnZlcnQpIFwKLXsgLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0gKHhuYW1lKSwgLmluZm8gPSBzbmRfdWRhMTM0MV9pbmZvXzJyZWdzLCBcCi0gIC5nZXQgPSBzbmRfdWRhMTM0MV9nZXRfMnJlZ3MsIC5wdXQgPSBzbmRfdWRhMTM0MV9wdXRfMnJlZ3MsIFwKLSAgLnByaXZhdGVfdmFsdWUgPSB3aGVyZSB8IChyZWdfMSA8PCA1KSB8IChyZWdfMiA8PCA5KSB8IChzaGlmdF8xIDw8IDEzKSB8IChzaGlmdF8yIDw8IDE2KSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAobWFza18xIDw8IDE5KSB8IChtYXNrXzIgPDwgMjUpIHwgKGludmVydCA8PCAzMSkgXAotfQotCi0KLXN0YXRpYyBpbnQgc25kX3VkYTEzNDFfaW5mb18ycmVncyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0JaW50IG1hc2tfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxOSkgJiA2MzsKLQlpbnQgbWFza18yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDI1KSAmIDYzOwotCWludCBtYXNrOwotICAgICAgICAKLQltYXNrID0gKG1hc2tfMiArIDEpICogKG1hc2tfMSArIDEpIC0gMTsKLQl1aW5mby0+dHlwZSA9IG1hc2sgPT0gMSA/IFNORFJWX0NUTF9FTEVNX1RZUEVfQk9PTEVBTiA6IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKLQl1aW5mby0+Y291bnQgPSAxOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7Ci0JdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gbWFzazsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9nZXRfMnJlZ3Moc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOwotCWludCB3aGVyZSA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMzE7Ci0JaW50IG1hc2tfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxOSkgJiA2MzsKLQlpbnQgbWFza18yID0gKGtjb250cm9sLT5wcml2YXRlX3ZhbHVlID4+IDI1KSAmIDYzOyAgICAgICAgCi0JaW50IGludmVydCA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAzMSkgJiAxOwotCWludCBtYXNrOwotCi0JbWFzayA9IChtYXNrXzIgKyAxKSAqIChtYXNrXzEgKyAxKSAtIDE7Ci0KLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHVkYS0+Y2ZnW3doZXJlXTsKLQlpZiAoaW52ZXJ0KQotCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IG1hc2sgLSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdWRhMTM0MV9wdXRfMnJlZ3Moc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IHVkYTEzNDEgKnVkYSA9IGNsbnQtPmRyaXZlcl9kYXRhOyAgICAgICAgCi0JaW50IHdoZXJlID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAzMTsgICAgICAgIAotCWludCByZWdfMSA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA1KSAmIDE1OwotCWludCByZWdfMiA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiA5KSAmIDE1OyAgICAgICAgCi0JaW50IHNoaWZ0XzEgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTMpICYgNzsKLQlpbnQgc2hpZnRfMiA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiA3OwotCWludCBtYXNrXzEgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTkpICYgNjM7Ci0JaW50IG1hc2tfMiA9IChrY29udHJvbC0+cHJpdmF0ZV92YWx1ZSA+PiAyNSkgJiA2MzsgICAgICAgIAotCWludCBpbnZlcnQgPSAoa2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMzEpICYgMTsKLQlpbnQgbWFzazsKLQl1bnNpZ25lZCBzaG9ydCB2YWwxLCB2YWwyLCB2YWw7Ci0KLQl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKLSAgICAgICAgIAotCW1hc2sgPSAobWFza18yICsgMSkgKiAobWFza18xICsgMSkgLSAxOwotCi0JdmFsMSA9IHZhbCAmIG1hc2tfMTsKLQl2YWwyID0gKHZhbCAvIChtYXNrXzEgKyAxKSkgJiBtYXNrXzI7ICAgICAgICAKLQotCWlmIChpbnZlcnQpIHsKLQkJdmFsMSA9IG1hc2tfMSAtIHZhbDE7Ci0JCXZhbDIgPSBtYXNrXzIgLSB2YWwyOwotCX0KLQotCXVkYS0+Y2ZnW3doZXJlXSA9IGludmVydCA/IG1hc2sgLSB2YWwgOiB2YWw7Ci0gICAgICAgIAotCS8vRklYTUUgLSByZXR1cm4gdmFsdWUKLQlzbmRfdWRhMTM0MV91cGRhdGVfYml0cyhjbG50LCByZWdfMSwgbWFza18xLCBzaGlmdF8xLCB2YWwxLCBGTFVTSCk7Ci0JcmV0dXJuIHNuZF91ZGExMzQxX3VwZGF0ZV9iaXRzKGNsbnQsIHJlZ18yLCBtYXNrXzIsIHNoaWZ0XzIsIHZhbDIsIEZMVVNIKTsKLX0KLQotLyogfX19ICovCi0gIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF91ZGExMzQxX2NvbnRyb2xzW10gPSB7Ci0JVURBMTM0MV9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCBDTURfTVVURSwgZGF0YTBfMiwgMiwgMSwgMSksCi0JVURBMTM0MV9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCBDTURfVk9MVU1FLCBkYXRhMF8wLCAwLCA2MywgMSksCi0KLQlVREExMzQxX1NJTkdMRSgiQmFzcyBQbGF5YmFjayBWb2x1bWUiLCBDTURfQkFTUywgZGF0YTBfMSwgMiwgMTUsIDApLAotCVVEQTEzNDFfU0lOR0xFKCJUcmVibGUgUGxheWJhY2sgVm9sdW1lIiwgQ01EX1RSRUJCTEUsIGRhdGEwXzEsIDAsIDMsIDApLAotCi0JVURBMTM0MV9TSU5HTEUoIklucHV0IEdhaW4gU3dpdGNoIiwgQ01EX0lHQUlOLCBzdGF0MSwgNSwgMSwgMCksCi0JVURBMTM0MV9TSU5HTEUoIk91dHB1dCBHYWluIFN3aXRjaCIsIENNRF9PR0FJTiwgc3RhdDEsIDYsIDEsIDApLAotCi0JVURBMTM0MV9TSU5HTEUoIk1peGVyIEdhaW4gQ2hhbm5lbCAxIFZvbHVtZSIsIENNRF9DSDEsIGV4dDAsIDAsIDMxLCAxKSwKLQlVREExMzQxX1NJTkdMRSgiTWl4ZXIgR2FpbiBDaGFubmVsIDIgVm9sdW1lIiwgQ01EX0NIMiwgZXh0MSwgMCwgMzEsIDEpLAotCi0JVURBMTM0MV9TSU5HTEUoIk1pYyBTZW5zaXRpdml0eSBWb2x1bWUiLCBDTURfTUlDLCBleHQyLCAyLCA3LCAwKSwKLQotCVVEQTEzNDFfU0lOR0xFKCJBR0MgT3V0cHV0IExldmVsIiwgQ01EX0FHQ19MRVZFTCwgZXh0NiwgMCwgMywgMCksCi0JVURBMTM0MV9TSU5HTEUoIkFHQyBUaW1lIENvbnN0YW50IiwgQ01EX0FHQ19USU1FLCBleHQ2LCAyLCA3LCAwKSwKLQlVREExMzQxX1NJTkdMRSgiQUdDIFRpbWUgQ29uc3RhbnQgU3dpdGNoIiwgQ01EX0FHQywgZXh0NCwgNCwgMSwgMCksCi0KLQlVREExMzQxX1NJTkdMRSgiREFDIFBvd2VyIiwgQ01EX0RBQywgc3RhdDEsIDAsIDEsIDApLAotCVVEQTEzNDFfU0lOR0xFKCJBREMgUG93ZXIiLCBDTURfQURDLCBzdGF0MSwgMSwgMSwgMCksCi0KLQlVREExMzQxX0VOVU0oIlBlYWsgZGV0ZWN0aW9uIiwgQ01EX1BFQUssIGRhdGEwXzIsIDUsIDEsIDApLAotCVVEQTEzNDFfRU5VTSgiRGUtZW1waGFzaXMiLCBDTURfREVFTVAsIGRhdGEwXzIsIDMsIDMsIDApLAotCVVEQTEzNDFfRU5VTSgiTWl4ZXIgbW9kZSIsIENNRF9NSVhFUiwgZXh0MiwgMCwgMywgMCksCi0JVURBMTM0MV9FTlVNKCJGaWx0ZXIgbW9kZSIsIENNRF9GSUxURVIsIGRhdGEwXzIsIDAsIDMsIDApLAotCi0JVURBMTM0MV8yUkVHUygiR2FpbiBJbnB1dCBBbXBsaWZpZXIgR2FpbiAoY2hhbm5lbCAyKSIsIENNRF9JRywgZXh0NCwgZXh0NSwgMCwgMCwgMywgMzEsIDApLAotfTsKLQotc3RhdGljIHZvaWQgdWRhMTM0MV9mcmVlKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0JbDNfZGV0YWNoX2NsaWVudChjbG50KTsgLy8gY2FsbHMga2ZyZWUgZm9yIGRyaXZlcl9kYXRhIChzdHJ1Y3QgdWRhMTM0MSkKLQlrZnJlZShjbG50KTsKLX0KLQotc3RhdGljIGludCB1ZGExMzQxX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCi17Ci0Jc3RydWN0IGwzX2NsaWVudCAqY2xudCA9IGRldmljZS0+ZGV2aWNlX2RhdGE7Ci0JdWRhMTM0MV9mcmVlKGNsbnQpOwotCXJldHVybiAwOwotfQotCi1pbnQgX19pbml0IHNuZF9jaGlwX3VkYTEzNDFfbWl4ZXJfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IGwzX2NsaWVudCAqKmNsbnRwKQotewotCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0gewotCQkuZGV2X2ZyZWUgPSAgICAgdWRhMTM0MV9kZXZfZnJlZSwKLQl9OwotCXN0cnVjdCBsM19jbGllbnQgKmNsbnQ7Ci0JaW50IGlkeCwgZXJyOwotCi0JaWYgKHNuZF9CVUdfT04oIWNhcmQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsbnQgPSBremFsbG9jKHNpemVvZigqY2xudCksIEdGUF9LRVJORUwpOwotCWlmIChjbG50ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotICAgICAgICAgCi0JaWYgKChlcnIgPSBsM19hdHRhY2hfY2xpZW50KGNsbnQsICJsMy1iaXQtc2ExMTAwLWdwaW8iLCBVREExMzQxX0FMU0FfTkFNRSkpKSB7Ci0JCWtmcmVlKGNsbnQpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfdWRhMTM0MV9jb250cm9scyk7IGlkeCsrKSB7Ci0JCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfdWRhMTM0MV9jb250cm9sc1tpZHhdLCBjbG50KSkpIDwgMCkgewotCQkJdWRhMTM0MV9mcmVlKGNsbnQpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCWlmICgoZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0NPREVDLCBjbG50LCAmb3BzKSkgPCAwKSB7Ci0JCXVkYTEzNDFfZnJlZShjbG50KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkqY2xudHAgPSBjbG50OwotCXN0cmNweShjYXJkLT5taXhlcm5hbWUsICJVREExMzQxVFMgTWl4ZXIiKTsKLQkoKHN0cnVjdCB1ZGExMzQxICopY2xudC0+ZHJpdmVyX2RhdGEpLT5jYXJkID0gY2FyZDsKLSAgICAgICAgCi0Jc25kX3VkYTEzNDFfcHJvY19pbml0KGNhcmQsIGNsbnQpOwotICAgICAgICAKLQlyZXR1cm4gMDsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBMMyBvcGVyYXRpb25zICovCi0KLXN0YXRpYyBpbnQgdWRhMTM0MV9hdHRhY2goc3RydWN0IGwzX2NsaWVudCAqY2xudCkKLXsKLQlzdHJ1Y3QgdWRhMTM0MSAqdWRhOwotCi0JdWRhID0ga3phbGxvYyhzaXplb2YoKnVkYSksIDAsIEdGUF9LRVJORUwpOwotCWlmICghdWRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIGluaXQgZml4ZWQgcGFydHMgb2YgbXkgY29weSBvZiByZWdpc3RlcnMgKi8KLQl1ZGEtPnJlZ3Nbc3RhdDBdICAgPSBTVEFUMDsKLQl1ZGEtPnJlZ3Nbc3RhdDFdICAgPSBTVEFUMTsKLQotCXVkYS0+cmVnc1tkYXRhMF8wXSA9IERBVEEwXzA7Ci0JdWRhLT5yZWdzW2RhdGEwXzFdID0gREFUQTBfMTsKLQl1ZGEtPnJlZ3NbZGF0YTBfMl0gPSBEQVRBMF8yOwotCi0JdWRhLT53cml0ZSA9IHNuZF91ZGExMzQxX2NvZGVjX3dyaXRlOwotCXVkYS0+cmVhZCA9IHNuZF91ZGExMzQxX2NvZGVjX3JlYWQ7Ci0gIAotCXNwaW5fbG9ja19pbml0KCZ1ZGEtPnJlZ19sb2NrKTsKLSAgICAgICAgCi0JY2xudC0+ZHJpdmVyX2RhdGEgPSB1ZGE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVkYTEzNDFfZGV0YWNoKHN0cnVjdCBsM19jbGllbnQgKmNsbnQpCi17Ci0Ja2ZyZWUoY2xudC0+ZHJpdmVyX2RhdGEpOwotfQotCi1zdGF0aWMgaW50Ci11ZGExMzQxX2NvbW1hbmQoc3RydWN0IGwzX2NsaWVudCAqY2xudCwgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWlmIChjbWQgIT0gQ01EX1JFQURfUkVHKQotCQlyZXR1cm4gc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIGNtZCwgKGludCkgYXJnLCBGTFVTSCk7Ci0KLQlyZXR1cm4gc25kX3VkYTEzNDFfY29kZWNfcmVhZChjbG50LCAoaW50KSBhcmcpOwotfQotCi1zdGF0aWMgaW50IHVkYTEzNDFfb3BlbihzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQotCXVkYS0+YWN0aXZlID0gMTsKLQotCS8qIGluaXQgZGVmYXVsdCBjb25maWd1cmF0aW9uICovCi0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9SRVNFVCwgMCwgUkVHU19PTkxZKTsKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0ZTLCBGMjU2LCBGTFVTSCk7ICAgICAgIC8vIHVua25vd24gc3RhdGUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0ZPUk1BVCwgTFNCMTYsIEZMVVNIKTsgIC8vIHVua25vd24gc3RhdGUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX09HQUlOLCBPTiwgRkxVU0gpOyAgICAgIC8vIGRlZmF1bHQgb2ZmIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9JR0FJTiwgT04sIEZMVVNIKTsgICAgICAvLyBkZWZhdWx0IG9mZiBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfREFDLCBPTiwgRkxVU0gpOwkvLyA/Pz8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfQURDLCBPTiwgRkxVU0gpOwkvLyA/Pz8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfVk9MVU1FLCAyMCwgRkxVU0gpOyAgICAgLy8gZGVmYXVsdCAwZEIgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0JBU1MsIDAsIFJFR1NfT05MWSk7ICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX1RSRUJCTEUsIDAsIFJFR1NfT05MWSk7IC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX1BFQUssIEFGVEVSLCBSRUdTX09OTFkpOy8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0RFRU1QLCBOT05FLCBSRUdTX09OTFkpOy8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQkvL2F0IHRoaXMgbW9tZW50IHNob3VsZCBiZSBRTVVURUQgYnkgaDM2MDBfYXVkaW9faW5pdAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfTVVURSwgT0ZGLCBSRUdTX09OTFkpOyAgLy8gZGVmYXVsdCB2YWx1ZSBhZnRlciByZXNldAotCXNuZF91ZGExMzQxX2NmZ193cml0ZShjbG50LCBDTURfRklMVEVSLCBNQVgsIEZMVVNIKTsgICAgLy8gZGVmYXVsIGZsYXQgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0NIMSwgMzEsIEZMVVNIKTsgICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX0NIMiwgNCwgRkxVU0gpOyAgICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgYWZ0ZXIgcmVzZXQKLQlzbmRfdWRhMTM0MV9jZmdfd3JpdGUoY2xudCwgQ01EX01JQywgNCwgRkxVU0gpOyAgICAgICAgIC8vIGRlZmF1bHQgMGRCIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9NSVhFUiwgTUlYRVIsIEZMVVNIKTsgICAvLyBkZWZhdWx0IGRvdWIuZGlmLm1vZGUgICAgICAgICAgCi0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9BR0MsIE9GRiwgRkxVU0gpOyAgICAgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9JRywgMCwgRkxVU0gpOyAgICAgICAgICAvLyB1bmtub3duIHN0YXRlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9BR0NfVElNRSwgMCwgRkxVU0gpOyAgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0Jc25kX3VkYTEzNDFfY2ZnX3dyaXRlKGNsbnQsIENNRF9BR0NfTEVWRUwsIDAsIEZMVVNIKTsgICAvLyBkZWZhdWx0IHZhbHVlIGFmdGVyIHJlc2V0Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdWRhMTM0MV9jbG9zZShzdHJ1Y3QgbDNfY2xpZW50ICpjbG50KQotewotCXN0cnVjdCB1ZGExMzQxICp1ZGEgPSBjbG50LT5kcml2ZXJfZGF0YTsKLQotCXVkYS0+YWN0aXZlID0gMDsKLX0KLQotLyogfX19ICovCi0KLS8qIHt7eyBNb2R1bGUgYW5kIEwzIGluaXRpYWxpemF0aW9uICovCi0KLXN0YXRpYyBzdHJ1Y3QgbDNfb3BzIHVkYTEzNDFfb3BzID0gewotCS5vcGVuID0JCXVkYTEzNDFfb3BlbiwKLQkuY29tbWFuZCA9CXVkYTEzNDFfY29tbWFuZCwKLQkuY2xvc2UgPQl1ZGExMzQxX2Nsb3NlLAotfTsKLQotc3RhdGljIHN0cnVjdCBsM19kcml2ZXIgdWRhMTM0MV9kcml2ZXIgPSB7Ci0JLm5hbWUgPQkJVURBMTM0MV9BTFNBX05BTUUsCi0JLmF0dGFjaF9jbGllbnQgPSB1ZGExMzQxX2F0dGFjaCwKLQkuZGV0YWNoX2NsaWVudCA9IHVkYTEzNDFfZGV0YWNoLAotCS5vcHMgPQkJJnVkYTEzNDFfb3BzLAotCS5vd25lciA9CVRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdWRhMTM0MV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIGwzX2FkZF9kcml2ZXIoJnVkYTEzNDFfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHVkYTEzNDFfZXhpdCh2b2lkKQotewotCWwzX2RlbF9kcml2ZXIoJnVkYTEzNDFfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQodWRhMTM0MV9pbml0KTsKLW1vZHVsZV9leGl0KHVkYTEzNDFfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIlRvbWFzIEthc3BhcmVrIDx0b21hcy5rYXNwYXJla0BzZXpuYW0uY3o+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgVURBMTM0MSBDT0RFQyBkcml2ZXIgZm9yIEFMU0EiKTsKLU1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e1VEQTEzNDEsVURBMTM0MVRTfX0iKTsKLQotRVhQT1JUX1NZTUJPTChzbmRfY2hpcF91ZGExMzQxX21peGVyX25ldyk7Ci0KLS8qIH19fSAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogaW5kZW50LXRhYnMtbW9kZTogdAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvS2NvbmZpZyBiL3NvdW5kL2lzYS9LY29uZmlnCmluZGV4IGNlMGFhMDQuLmM1YzlhOTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9LY29uZmlnCisrKyBiL3NvdW5kL2lzYS9LY29uZmlnCkBAIC01Niw4ICs1Niw4IEBACiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQUQxODQ4IChBbmFsb2cgRGV2aWNlcykgb3IKIAkgIENTNDI0OCAoQ2lycnVzIExvZ2ljIC0gQ3J5c3RhbCBTZW1pY29uZHVjdG9ycykgY2hpcHMuCiAJICAKLQkgIEZvciBuZXdlciBjaGlwcyBmcm9tIENpcnJ1cyBMb2dpYywgdXNlIHRoZSBDUzQyMzEsIENTNDIzMiBvcgotCSAgQ1M0MjM2KyBkcml2ZXJzLgorCSAgRm9yIG5ld2VyIGNoaXBzIGZyb20gQ2lycnVzIExvZ2ljLCB1c2UgdGhlIENTNDIzMSBvciBDUzQyMzIrCisJICBkcml2ZXJzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtYWQxODQ4LgpAQCAtOTQsNiArOTQsOCBAQAogCXRyaXN0YXRlICJDLU1lZGlhIENNSTgzMzAiCiAJc2VsZWN0IFNORF9XU1NfTElCCiAJc2VsZWN0IFNORF9TQjE2X0RTUAorCXNlbGVjdCBTTkRfT1BMM19MSUIKKwlzZWxlY3QgU05EX01QVTQwMV9VQVJUCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gdGhlCiAJICBDLU1lZGlhIENNSTgzMzAgY2hpcC4KQEAgLTExMiwyNiArMTE0LDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M0MjMxLgogCi1jb25maWcgU05EX0NTNDIzMgotCXRyaXN0YXRlICJHZW5lcmljIENpcnJ1cyBMb2dpYyBDUzQyMzIgZHJpdmVyIgotCXNlbGVjdCBTTkRfT1BMM19MSUIKLQlzZWxlY3QgU05EX01QVTQwMV9VQVJUCi0Jc2VsZWN0IFNORF9XU1NfTElCCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIENTNDIzMiBjaGlwcyBmcm9tIENpcnJ1cwotCSAgTG9naWMgLSBDcnlzdGFsIFNlbWljb25kdWN0b3JzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M0MjMyLgotCiBjb25maWcgU05EX0NTNDIzNgotCXRyaXN0YXRlICJHZW5lcmljIENpcnJ1cyBMb2dpYyBDUzQyMzYrIGRyaXZlciIKKwl0cmlzdGF0ZSAiR2VuZXJpYyBDaXJydXMgTG9naWMgQ1M0MjMyL0NTNDIzNisgZHJpdmVyIgogCXNlbGVjdCBTTkRfT1BMM19MSUIKIAlzZWxlY3QgU05EX01QVTQwMV9VQVJUCiAJc2VsZWN0IFNORF9XU1NfTElCCiAJaGVscAotCSAgU2F5IFkgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBDUzQyMzUsQ1M0MjM2LENTNDIzN0IsQ1M0MjM4QiwKLQkgIENTNDIzOSBjaGlwcyBmcm9tIENpcnJ1cyBMb2dpYyAtIENyeXN0YWwgU2VtaWNvbmR1Y3RvcnMuCisJICBTYXkgWSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIENTNDIzMixDUzQyMzUsQ1M0MjM2LENTNDIzN0IsCisJICBDUzQyMzhCLENTNDIzOSBjaGlwcyBmcm9tIENpcnJ1cyBMb2dpYyAtIENyeXN0YWwKKwkgIFNlbWljb25kdWN0b3JzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtY3M0MjM2LgpAQCAtMzc3LDE0ICszNjgsMTcgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1zZ2FsYXh5LgogCiBjb25maWcgU05EX1NTQ0FQRQotCXRyaXN0YXRlICJFbnNvbmlxIFNvdW5kU2NhcGUgUG5QIGRyaXZlciIKKwl0cmlzdGF0ZSAiRW5zb25pcSBTb3VuZFNjYXBlIGRyaXZlciIKIAlzZWxlY3QgU05EX0hXREVQCiAJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAogCXNlbGVjdCBTTkRfV1NTX0xJQgogCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBFbnNvbmlxIFNvdW5kU2NhcGUgUG5QCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRW5zb25pcSBTb3VuZFNjYXBlIAogCSAgc291bmRjYXJkcy4KIAorCSAgVGhlIFBDTSBhdWRpbyBpcyBzdXBwb3J0ZWQgb24gU291bmRTY2FwZSBDbGFzc2ljLCBFbGl0ZSwgUG5QCisJICBhbmQgVklWTyBjYXJkcy4gVGhlIE1JREkgc3VwcG9ydCBpcyB2ZXJ5IGV4cGVyaW1lbnRhbC4KKwogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgc25kLXNzY2FwZS4KIApAQCAtNDExLDUgKzQwNSwzNiBAQAogCSAgeW91IG5lZWQgdG8gaW5zdGFsbCB0aGUgZmlybXdhcmUgZmlsZXMgZnJvbSB0aGUKIAkgIGFsc2EtZmlybXdhcmUgcGFja2FnZS4KIAorY29uZmlnIFNORF9NU05EX1BJTk5BQ0xFCisJdHJpc3RhdGUgIlR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFBpbm5hY2xlL0ZpamkgZHJpdmVyIgorCWRlcGVuZHMgb24gWDg2ICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgU05EX01QVTQwMV9VQVJUCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgWSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFBpbm5hY2xlLworCSAgRmlqaSBzb3VuZGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtbXNuZC1waW5uYWNsZS4KKworY29uZmlnIFNORF9NU05EX0NMQVNTSUMKKwl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgVHVydGxlIEJlYWNoIE11bHRpU291bmQgQ2xhc3NpYywgVGFoaXRpLCBNb250ZXJleSIKKwlkZXBlbmRzIG9uIFg4NiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFNORF9NUFU0MDFfVUFSVAorCXNlbGVjdCBTTkRfUENNCisJaGVscAorCSAgU2F5IE0gaGVyZSBpZiB5b3UgaGF2ZSBhIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIENsYXNzaWMsIFRhaGl0aSBvcgorCSAgTW9udGVyZXkgKG5vdCBmb3IgdGhlIFBpbm5hY2xlIG9yIEZpamkpLgorCisJICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9zb3VuZC9vc3MvTXVsdGlTb3VuZD4gZm9yIGltcG9ydGFudCBpbmZvcm1hdGlvbgorCSAgYWJvdXQgdGhpcyBkcml2ZXIuICBOb3RlIHRoYXQgaXQgaGFzIGJlZW4gZGlzY29udGludWVkLCBidXQgdGhlCisJICBWb3lldHJhIFR1cnRsZSBCZWFjaCBrbm93bGVkZ2UgYmFzZSBlbnRyeSBmb3IgaXQgaXMgc3RpbGwgYXZhaWxhYmxlCisJICBhdCA8aHR0cDovL3d3dy50dXJ0bGViZWFjaC5jb20vc2l0ZS9rYl9mdHAvNzkwLmFzcD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1tc25kLWNsYXNzaWMuCisKIGVuZGlmCSMgU05EX0lTQQogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvTWFrZWZpbGUgYi9zb3VuZC9pc2EvTWFrZWZpbGUKaW5kZXggNjNhZjEzZC4uYjkwNmI5YSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL01ha2VmaWxlCisrKyBiL3NvdW5kL2lzYS9NYWtlZmlsZQpAQCAtMjYsNSArMjYsNSBAQAogb2JqLSQoQ09ORklHX1NORF9TR0FMQVhZKSArPSBzbmQtc2dhbGF4eS5vCiBvYmotJChDT05GSUdfU05EX1NTQ0FQRSkgKz0gc25kLXNzY2FwZS5vCiAKLW9iai0kKENPTkZJR19TTkQpICs9IGFkMTgxNmEvIGFkMTg0OC8gY3M0MjN4LyBlczE2ODgvIGd1cy8gb3B0aTl4eC8gXAorb2JqLSQoQ09ORklHX1NORCkgKz0gYWQxODE2YS8gYWQxODQ4LyBjczQyM3gvIGVzMTY4OC8gZ3VzLyBtc25kLyBvcHRpOXh4LyBcCiAJCSAgICAgc2IvIHdhdmVmcm9udC8gd3NzLwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jCmluZGV4IDc3NTI0MjQuLmJiY2JmOTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYworKysgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMKQEAgLTE1NiwxMCArMTU2LDEyIEBACiAJc3RydWN0IHNuZF9jYXJkX2FkMTgxNmEgKmFjYXJkOwogCXN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcDsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CisJc3RydWN0IHNuZF90aW1lciAqdGltZXI7CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYWQxODE2YSkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2FkMTgxNmEpLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCWFjYXJkID0gKHN0cnVjdCBzbmRfY2FyZF9hZDE4MTZhICopY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX2FkMTgxNmFfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewpAQCAtMTk0LDYgKzE5NiwxMiBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCisJZXJyb3IgPSBzbmRfYWQxODE2YV90aW1lcihjaGlwLCAwLCAmdGltZXIpOworCWlmIChlcnJvciA8IDApIHsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKwogCWlmIChtcHVfcG9ydFtkZXZdID4gMCkgewogCQlpZiAoc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfTVBVNDAxLAogCQkJCQltcHVfcG9ydFtkZXZdLCAwLCBtcHVfaXJxW2Rldl0sIElSUUZfRElTQUJMRUQsCkBAIC0yMDcsMTEgKzIxNSw4IEBACiAJCQkJICAgIE9QTDNfSFdfQVVUTywgMCwgJm9wbDMpIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gT1BMIGRldmljZSBhdCAweCVseC0weCVseC5cbiIsIGZtX3BvcnRbZGV2XSwgZm1fcG9ydFtkZXZdICsgMik7CiAJCX0gZWxzZSB7Ci0JCQlpZiAoKGVycm9yID0gc25kX29wbDNfdGltZXJfbmV3KG9wbDMsIDEsIDIpKSA8IDApIHsKLQkJCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCQkJCXJldHVybiBlcnJvcjsKLQkJCX0KLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCkpIDwgMCkgeworCQkJZXJyb3IgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCk7CisJCQlpZiAoZXJyb3IgPCAwKSB7CiAJCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYwppbmRleCAzYmZjYTdjLi4wNWFlZjhiIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jCisrKyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkJaWYgKGluYihBRDE4MTZBX1JFRyhBRDE4MTZBX0NISVBfU1RBVFVTKSkgJiBBRDE4MTZBX1JFQURZKQogCQkJcmV0dXJuIDA7CiAKLQlzbmRfcHJpbnRrKCJjaGlwIGJ1c3kuXG4iKTsKKwlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiY2hpcCBidXN5LlxuIik7CiAJcmV0dXJuIC1FQlVTWTsKIH0KIApAQCAtMTk2LDcgKzE5Niw3IEBACiAJCXNwaW5fdW5sb2NrKCZjaGlwLT5sb2NrKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiaW52YWxpZCB0cmlnZ2VyIG1vZGUgMHgleC5cbiIsIHdoYXQpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiaW52YWxpZCB0cmlnZ2VyIG1vZGUgMHgleC5cbiIsIHdoYXQpOwogCQllcnJvciA9IC1FSU5WQUw7CiAJfQogCkBAIC0zNzcsNyArMzc3LDYgQEAKIAkuZmlmb19zaXplID0JCTAsCiB9OwogCi0jaWYgMCAvKiBub3QgdXNlZCBub3cgKi8KIHN0YXRpYyBpbnQgc25kX2FkMTgxNmFfdGltZXJfY2xvc2Uoc3RydWN0IHNuZF90aW1lciAqdGltZXIpCiB7CiAJc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwID0gc25kX3RpbWVyX2NoaXAodGltZXIpOwpAQCAtNDQyLDggKzQ0MSw2IEBACiAJLnN0YXJ0ID0Jc25kX2FkMTgxNmFfdGltZXJfc3RhcnQsCiAJLnN0b3AgPQkJc25kX2FkMTgxNmFfdGltZXJfc3RvcCwKIH07Ci0jZW5kaWYgLyogbm90IHVzZWQgbm93ICovCi0KIAogc3RhdGljIGludCBzbmRfYWQxODE2YV9wbGF5YmFja19vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewpAQCAtNTY4LDcgKzU2NSw3IEBACiAJY2FzZSBBRDE4MTZBX0hXX0FEMTgxNToJcmV0dXJuICJBRDE4MTUiOwogCWNhc2UgQUQxODE2QV9IV19BRDE4TUFYMTA6IHJldHVybiAiQUQxOG1heDEwIjsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJVbmtub3duIGNoaXAgdmVyc2lvbiAlZDolZC5cbiIsCisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJVbmtub3duIGNoaXAgdmVyc2lvbiAlZDolZC5cbiIsCiAJCQljaGlwLT52ZXJzaW9uLCBjaGlwLT5oYXJkd2FyZSk7CiAJCXJldHVybiAiQUQxODE2QSAtIHVua25vd24iOwogCX0KQEAgLTY4Nyw3ICs2ODQsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWYgMCAvKiBub3QgdXNlZCBub3cgKi8KIGludCBfX2RldmluaXQgc25kX2FkMTgxNmFfdGltZXIoc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3RpbWVyICoqcnRpbWVyKQogewogCXN0cnVjdCBzbmRfdGltZXIgKnRpbWVyOwpAQCAtNzA5LDcgKzcwNSw2IEBACiAJCSpydGltZXIgPSB0aW1lcjsKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZiAvKiBub3QgdXNlZCBub3cgKi8KIAogLyoKICAqCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwppbmRleCAyMjNhNmMwLi40YmVlYjZmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYWQxODQ4L2FkMTg0OC5jCisrKyBiL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKQEAgLTkxLDkgKzkxLDkgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJZXJyb3IgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCBwb3J0W25dLCAtMSwgaXJxW25dLCBkbWExW25dLCAtMSwKIAkJCXRoaW5rcGFkW25dID8gV1NTX0hXX1RISU5LUEFEIDogV1NTX0hXX0RFVEVDVCwKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZGxpYi5jIGIvc291bmQvaXNhL2FkbGliLmMKaW5kZXggMzc0YjcxNy4uNzQ2NWFlMCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkbGliLmMKKysrIGIvc291bmQvaXNhL2FkbGliLmMKQEAgLTUzLDEwICs1MywxMCBAQAogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkgeworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IGNyZWF0ZSBjYXJkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBlcnJvcjsKIAl9CiAKIAljYXJkLT5wcml2YXRlX2RhdGEgPSByZXF1ZXN0X3JlZ2lvbihwb3J0W25dLCA0LCBDUkRfTkFNRSk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWxzMTAwLmMgYi9zb3VuZC9pc2EvYWxzMTAwLmMKaW5kZXggZjFjZTMwZi4uNWZkNTJlNCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FsczEwMC5jCisrKyBiL3NvdW5kL2lzYS9hbHMxMDAuYwpAQCAtMTYzLDkgKzE2MywxMCBAQAogCXN0cnVjdCBzbmRfY2FyZF9hbHMxMDAgKmFjYXJkOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9hbHMxMDApKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9hbHMxMDApLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX2FsczEwMF9wbnAoZGV2LCBhY2FyZCwgcGNhcmQsIHBpZCkpKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYXp0MjMyMC5jIGIvc291bmQvaXNhL2F6dDIzMjAuYwppbmRleCAzZTc0ZDFhLi5mN2FhNjM3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvYXp0MjMyMC5jCisrKyBiL3NvdW5kL2lzYS9henQyMzIwLmMKQEAgLTE4NCw5ICsxODQsMTAgQEAKIAlzdHJ1Y3Qgc25kX3dzcyAqY2hpcDsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7CiAKLQlpZiAoKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfYXp0MjMyMCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2F6dDIzMjApLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCWFjYXJkID0gKHN0cnVjdCBzbmRfY2FyZF9henQyMzIwICopY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKChlcnJvciA9IHNuZF9jYXJkX2F6dDIzMjBfcG5wKGRldiwgYWNhcmQsIHBjYXJkLCBwaWQpKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NtaTgzMzAuYyBiL3NvdW5kL2lzYS9jbWk4MzMwLmMKaW5kZXggZTQ5YWVjNy4uZGU4MzYwOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NtaTgzMzAuYworKysgYi9zb3VuZC9pc2EvY21pODMzMC5jCkBAIC0zMSwxMSArMzEsMTEgQEAKICAqICBUbyBxdWlja2x5IGxvYWQgdGhlIG1vZHVsZSwKICAqCiAgKiAgbW9kcHJvYmUgLWEgc25kLWNtaTgzMzAgc2Jwb3J0PTB4MjIwIHNiaXJxPTUgc2JkbWE4PTEKLSAqICAgIHNiZG1hMTY9NSB3c3Nwb3J0PTB4NTMwIHdzc2lycT0xMSB3c3NkbWE9MAorICogICAgc2JkbWExNj01IHdzc3BvcnQ9MHg1MzAgd3NzaXJxPTExIHdzc2RtYT0wIGZtcG9ydD0weDM4OAogICoKICAqICBUaGlzIGNhcmQgaGFzIHR3byBtaXhlcnMgYW5kIHR3byBQQ00gZGV2aWNlcy4gIEkndmUgY2hlZXNlZCBpdCBzdWNoCiAgKiAgdGhhdCByZWNvcmRpbmcgYW5kIHBsYXliYWNrIGNhbiBiZSBkb25lIHRocm91Z2ggdGhlIHNhbWUgZGV2aWNlLgotICogIFRoZSBkcml2ZXIgIm1hZ2ljYWxseSIgcm91dGVzIHRoZSBjYXB0dXJpbmcgdG8gdGhlIEFEMTg0OCBjb2RlYywKKyAqICBUaGUgZHJpdmVyICJtYWdpY2FsbHkiIHJvdXRlcyB0aGUgY2FwdHVyaW5nIHRvIHRoZSBDTUk4MzMwIGNvZGVjLAogICogIGFuZCBwbGF5YmFjayB0byB0aGUgU0IxNiBjb2RlYy4gIFRoaXMgYWxsb3dzIGZvciBmdWxsLWR1cGxleCBtb2RlCiAgKiAgdG8gc29tZSBleHRlbnQuCiAgKiAgVGhlIHV0aWxpdGllcyBpbiBhbHNhLXV0aWxzIGFyZSBhd2FyZSBvZiBib3RoIGRldmljZXMsIHNvIHBhc3NpbmcKQEAgLTUxLDYgKzUxLDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC93c3MuaD4KKyNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CisjaW5jbHVkZSA8c291bmQvbXB1NDAxLmg+CiAjaW5jbHVkZSA8c291bmQvc2IuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKQEAgLTc5LDYgKzgxLDkgQEAKIHN0YXRpYyBsb25nIHdzc3BvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwogc3RhdGljIGludCB3c3NpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CiBzdGF0aWMgaW50IHdzc2RtYVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0RNQTsKK3N0YXRpYyBsb25nIGZtcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgbG9uZyBtcHVwb3J0W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBpbnQgbXB1aXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROwogCiBtb2R1bGVfcGFyYW1fYXJyYXkoaW5kZXgsIGludCwgTlVMTCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGluZGV4LCAiSW5kZXggdmFsdWUgZm9yIENNSTgzMzAgc291bmRjYXJkLiIpOwpAQCAtMTA3LDYgKzExMiwxMiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHdzc2RtYSwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0Mod3NzZG1hLCAiRE1BIGZvciBDTUk4MzMwIFdTUyBkcml2ZXIuIik7CiAKK21vZHVsZV9wYXJhbV9hcnJheShmbXBvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmbXBvcnQsICJGTSBwb3J0ICMgZm9yIENNSTgzMzAgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KG1wdXBvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtcHVwb3J0LCAiTVBVLTQwMSBwb3J0ICMgZm9yIENNSTgzMzAgZHJpdmVyLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KG1wdWlycSwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MobXB1aXJxLCAiSVJRICMgZm9yIENNSTgzMzAgTVBVLTQwMSBwb3J0LiIpOwogI2lmZGVmIENPTkZJR19QTlAKIHN0YXRpYyBpbnQgaXNhX3JlZ2lzdGVyZWQ7CiBzdGF0aWMgaW50IHBucF9yZWdpc3RlcmVkOwpAQCAtMTQ5LDYgKzE2MCw3IEBACiAjaWZkZWYgQ09ORklHX1BOUAogCXN0cnVjdCBwbnBfZGV2ICpjYXA7CiAJc3RydWN0IHBucF9kZXYgKnBsYXk7CisJc3RydWN0IHBucF9kZXYgKm1wdTsKICNlbmRpZgogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3dzcyAqd3NzOwpAQCAtMTY1LDcgKzE3Nyw3IEBACiAjaWZkZWYgQ09ORklHX1BOUAogCiBzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCBzbmRfY21pODMzMF9wbnBpZHNbXSA9IHsKLQl7IC5pZCA9ICJDTUkwMDAxIiwgLmRldnMgPSB7IHsgIkBAQDAwMDEiIH0sIHsgIkBYQDAwMDEiIH0gfSB9LAorCXsgLmlkID0gIkNNSTAwMDEiLCAuZGV2cyA9IHsgeyAiQEBAMDAwMSIgfSwgeyAiQFhAMDAwMSIgfSwgeyAiQEhAMDAwMSIgfSB9IH0sCiAJeyAuaWQgPSAiIiB9CiB9OwogCkBAIC0yMTksOCArMjMxLDEwIEBACiAJCUNNSTgzMzBfUk1VWDNELCA1LCAxLCAxKSwKIFdTU19TSU5HTEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMCwKIAkJQ01JODMzMF9PVVRQVVRWT0wsIDMsIDMsIDApLAotV1NTX1NJTkdMRSgiRk0gUGxheWJhY2sgU3dpdGNoIiwgMCwKLQkJQ01JODMzMF9SRUNNVVgsIDMsIDEsIDEpLAorV1NTX0RPVUJMRSgiRk0gUGxheWJhY2sgU3dpdGNoIiwgMCwKKwkJQ1M0MjMxX0FVWDJfTEVGVF9JTlBVVCwgQ1M0MjMxX0FVWDJfUklHSFRfSU5QVVQsIDcsIDcsIDEsIDEpLAorV1NTX0RPVUJMRSgiRk0gUGxheWJhY2sgVm9sdW1lIiwgMCwKKwkJQ1M0MjMxX0FVWDJfTEVGVF9JTlBVVCwgQ1M0MjMxX0FVWDJfUklHSFRfSU5QVVQsIDAsIDAsIDMxLCAxKSwKIFdTU19TSU5HTEUoU05EUlZfQ1RMX05BTUVfSUVDOTU4KCJJbnB1dCAiLCBDQVBUVVJFLCBTV0lUQ0gpLCAwLAogCQlDTUk4MzMwX1JNVVgzRCwgNywgMSwgMSksCiBXU1NfU0lOR0xFKFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiSW5wdXQgIiwgUExBWUJBQ0ssIFNXSVRDSCksIDAsCkBAIC0zMjMsMTYgKzMzNywyMSBAQAogCWlmIChhY2FyZC0+cGxheSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCisJYWNhcmQtPm1wdSA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIGlkLT5kZXZzWzJdLmlkLCBOVUxMKTsKKwlpZiAoYWNhcmQtPnBsYXkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FQlVTWTsKKwogCXBkZXYgPSBhY2FyZC0+Y2FwOwogCiAJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKIAlpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDTUk4MzMwL0MzRCAoQUQxODQ4KSBQblAgY29uZmlndXJlIGZhaWx1cmVcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDTUk4MzMwL0MzRCBQblAgY29uZmlndXJlIGZhaWx1cmVcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAl3c3Nwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKIAl3c3NkbWFbZGV2XSA9IHBucF9kbWEocGRldiwgMCk7CiAJd3NzaXJxW2Rldl0gPSBwbnBfaXJxKHBkZXYsIDApOworCWZtcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMSk7CiAKIAkvKiBhbGxvY2F0ZSBTQjE2IHJlc291cmNlcyAqLwogCXBkZXYgPSBhY2FyZC0+cGxheTsKQEAgLTM0Nyw2ICszNjYsMTcgQEAKIAlzYmRtYTE2W2Rldl0gPSBwbnBfZG1hKHBkZXYsIDEpOwogCXNiaXJxW2Rldl0gPSBwbnBfaXJxKHBkZXYsIDApOwogCisJLyogYWxsb2NhdGUgTVBVLTQwMSByZXNvdXJjZXMgKi8KKwlwZGV2ID0gYWNhcmQtPm1wdTsKKworCWVyciA9IHBucF9hY3RpdmF0ZV9kZXYocGRldik7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIkNNSTgzMzAvQzNEIChNUFUtNDAxKSBQblAgY29uZmlndXJlIGZhaWx1cmVcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwltcHVwb3J0W2Rldl0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKKwltcHVpcnFbZGV2XSA9IHBucF9pcnEocGRldiwgMCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTQ2NywyNiArNDk3LDI5IEBACiAKICNkZWZpbmUgUEZYCSJjbWk4MzMwOiAiCiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9jbWk4MzMwX2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9jbWk4MzMwX2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2NtaTgzMzAgKmFjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NtaTgzMzApKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzbmRfY21pODMzMCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiY291bGQgbm90IGdldCBhIG5ldyBjYXJkXG4iKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBlcnI7CiAJfQogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWFjYXJkLT5jYXJkID0gY2FyZDsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY21pODMzMF9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCiB7CiAJc3RydWN0IHNuZF9jbWk4MzMwICphY2FyZDsKIAlpbnQgaSwgZXJyOworCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWVyciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHdzc3BvcnRbZGV2XSArIDQsIC0xLApAQCAtNDk0LDExICs1MjcsMTEgQEAKIAkJCSAgICAgd3NzZG1hW2Rldl0sIC0xLAogCQkJICAgICBXU1NfSFdfREVURUNULCAwLCAmYWNhcmQtPndzcyk7CiAJaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIihBRDE4NDgpIGRldmljZSBidXN5Pz9cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKENNSTgzMzApIGRldmljZSBidXN5Pz9cbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoYWNhcmQtPndzcy0+aGFyZHdhcmUgIT0gV1NTX0hXX0NNSTgzMzApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIihBRDE4NDgpIG5vdCBmb3VuZCBkdXJpbmcgcHJvYmVcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiKENNSTgzMzApIG5vdCBmb3VuZCBkdXJpbmcgcHJvYmVcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTUzMCw2ICs1NjMsMjcgQEAKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byBjcmVhdGUgcGNtc1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQorCWlmIChmbXBvcnRbZGV2XSAhPSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJaWYgKHNuZF9vcGwzX2NyZWF0ZShjYXJkLAorCQkJCSAgICBmbXBvcnRbZGV2XSwgZm1wb3J0W2Rldl0gKyAyLAorCQkJCSAgICBPUEwzX0hXX0FVVE8sIDAsICZvcGwzKSA8IDApIHsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYCisJCQkJICAgIm5vIE9QTCBkZXZpY2UgYXQgMHglbHgtMHglbHggP1xuIiwKKwkJCQkgICBmbXBvcnRbZGV2XSwgZm1wb3J0W2Rldl0gKyAyKTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlpZiAobXB1cG9ydFtkZXZdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlpZiAoc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfTVBVNDAxLAorCQkJCQltcHVwb3J0W2Rldl0sIDAsIG1wdWlycVtkZXZdLAorCQkJCQlJUlFGX0RJU0FCTEVELCBOVUxMKSA8IDApCisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJubyBNUFUtNDAxIGRldmljZSBhdCAweCVseC5cbiIsCisJCQkJbXB1cG9ydFtkZXZdKTsKKwl9CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQ01JODMzMC9DM0QiKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQy1NZWRpYSBDTUk4MzMwL0MzRCIpOwpAQCAtNTY0LDkgKzYxOCw5IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NtaTgzMzBfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY21pODMzMF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOwogCWlmICgoZXJyID0gc25kX2NtaTgzMzBfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CkBAIC02MjgsOSArNjgyLDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAkJCSAgICAgICAKLQljYXJkID0gc25kX2NtaTgzMzBfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXMgPSBzbmRfY21pODMzMF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAlpZiAoKHJlcyA9IHNuZF9jbWk4MzMwX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkpIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiUG5QIGRldGVjdGlvbiBmYWlsZWRcbiIpOwogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9NYWtlZmlsZSBiL3NvdW5kL2lzYS9jczQyM3gvTWFrZWZpbGUKaW5kZXggNTg3MGNhMi4uNmQzOTdlOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9NYWtlZmlsZQorKysgYi9zb3VuZC9pc2EvY3M0MjN4L01ha2VmaWxlCkBAIC0zLDEzICszLDExIEBACiAjIENvcHlyaWdodCAoYykgMjAwMSBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PgogIwogCi1zbmQtY3M0MjM2LWxpYi1vYmpzIDo9IGNzNDIzNl9saWIubwogc25kLWNzNDIzMS1vYmpzIDo9IGNzNDIzMS5vCi1zbmQtY3M0MjMyLW9ianMgOj0gY3M0MjMyLm8KLXNuZC1jczQyMzYtb2JqcyA6PSBjczQyMzYubworc25kLWNzNDIzNi1vYmpzIDo9IGNzNDIzNi5vIGNzNDIzNl9saWIubwogCiAjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CiBvYmotJChDT05GSUdfU05EX0NTNDIzMSkgKz0gc25kLWNzNDIzMS5vCi1vYmotJChDT05GSUdfU05EX0NTNDIzMikgKz0gc25kLWNzNDIzMi5vCi1vYmotJChDT05GSUdfU05EX0NTNDIzNikgKz0gc25kLWNzNDIzNi5vIHNuZC1jczQyMzYtbGliLm8KK29iai0kKENPTkZJR19TTkRfQ1M0MjM2KSArPSBzbmQtY3M0MjM2Lm8KKwogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwppbmRleCBmMDE5ZDQ0Li5jYjkxNTNlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKQEAgLTk1LDkgKzk1LDkgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJZXJyb3IgPSBzbmRfd3NzX2NyZWF0ZShjYXJkLCBwb3J0W25dLCAtMSwgaXJxW25dLCBkbWExW25dLCBkbWEyW25dLAogCQkJV1NTX0hXX0RFVEVDVCwgMCwgJmNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzIuYyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmYWQyZTYuLjAwMDAwMDAKLS0tIGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotI2RlZmluZSBDUzQyMzIKLSNpbmNsdWRlICJjczQyMzYuYyIKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCmluZGV4IDAxOWM5NDAuLmEwNzZhNmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYwpAQCAtMzMsMTcgKzMzLDE0IEBACiAKIE1PRFVMRV9BVVRIT1IoIkphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0jaWZkZWYgQ1M0MjMyCi1NT0RVTEVfREVTQ1JJUFRJT04oIkNpcnJ1cyBMb2dpYyBDUzQyMzIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ2lycnVzIExvZ2ljIENTNDIzMi05Iik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tUdXJ0bGUgQmVhY2gsVEJTLTIwMDB9LCIKIAkJIntUdXJ0bGUgQmVhY2gsVHJvcGV6IFBsdXN9LCIKIAkJIntTSUMgQ3J5c3RhbFdhdmUgMzJ9LCIKIAkJIntIZXdsZXR0IFBhY2thcmQsT21uaWJvb2sgNTUwMH0sIgogCQkie1RlcnJhVGVjLE1hZXN0cm8gMzIvOTZ9LCIKLQkJIntQaGlsaXBzLFBDQTcwUFN9fSIpOwotI2Vsc2UKLU1PRFVMRV9ERVNDUklQVElPTigiQ2lycnVzIExvZ2ljIENTNDIzNS05Iik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzNX0sIgorCQkie1BoaWxpcHMsUENBNzBQU319LCIKKwkJInt7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzV9LCIKIAkJIntDcnlzdGFsIFNlbWljb25kdWN0b3JzLENTNDIzNn0sIgogCQkie0NyeXN0YWwgU2VtaWNvbmR1Y3RvcnMsQ1M0MjM3fSwiCiAJCSJ7Q3J5c3RhbCBTZW1pY29uZHVjdG9ycyxDUzQyMzh9LCIKQEAgLTcwLDE1ICs2NywxMSBAQAogCQkie1R5cGhvb24gU291bmRzeXN0ZW0sQ1M0MjM2Qn0sIgogCQkie1R1cnRsZSBCZWFjaCxNYWxpYnV9LCIKIAkJIntVbmtub3duLERpZ2l0YWwgUEMgNTAwMCBPbmJvYXJkfX0iKTsKLSNlbmRpZgogCi0jaWZkZWYgQ1M0MjMyCi0jZGVmaW5lIElERU5UICJDUzQyMzIiCi0jZGVmaW5lIERFVl9OQU1FICJjczQyMzIiCi0jZWxzZQotI2RlZmluZSBJREVOVCAiQ1M0MjM2KyIKLSNkZWZpbmUgREVWX05BTUUgImNzNDIzNiIKLSNlbmRpZgorTU9EVUxFX0FMSUFTKCJzbmRfY3M0MjMyIik7CisKKyNkZWZpbmUgSURFTlQgIkNTNDIzMisiCisjZGVmaW5lIERFVl9OQU1FICJjczQyMzIrIgogCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCkBAIC0xMjgsOSArMTIxLDcgQEAKICNpZmRlZiBDT05GSUdfUE5QCiBzdGF0aWMgaW50IGlzYV9yZWdpc3RlcmVkOwogc3RhdGljIGludCBwbnBjX3JlZ2lzdGVyZWQ7Ci0jaWZkZWYgQ1M0MjMyCiBzdGF0aWMgaW50IHBucF9yZWdpc3RlcmVkOwotI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX1BOUCAqLwogCiBzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2IHsKQEAgLTE0NSwxMSArMTM2LDEwIEBACiAKICNpZmRlZiBDT05GSUdfUE5QCiAKLSNpZmRlZiBDUzQyMzIKIC8qCiAgKiBQTlAgQklPUwogICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgc25kX2NzNDIzMl9wbnBiaW9zaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgc25kX2NzNDIzeF9wbnBiaW9zaWRzW10gPSB7CiAJeyAuaWQgPSAiQ1NDMDEwMCIgfSwKIAl7IC5pZCA9ICJDU0MwMDAwIiB9LAogCS8qIEd1aWxsZW1vdCBUdXJ0bGViZWFjaCBzb21ldGhpbmcgYXBwZWFycyB0byBiZSBjczQyMzIgY29tcGF0aWJsZQpAQCAtMTU3LDEwICsxNDcsOCBAQAogCXsgLmlkID0gIkdJTTAxMDAiIH0sCiAJeyAuaWQgPSAiIiB9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShwbnAsIHNuZF9jczQyMzJfcG5wYmlvc2lkcyk7Ci0jZW5kaWYgLyogQ1M0MjMyICovCitNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgc25kX2NzNDIzeF9wbnBiaW9zaWRzKTsKIAotI2lmZGVmIENTNDIzMgogI2RlZmluZSBDUzQyM1hfSVNBUE5QX0RSSVZFUgkiY3M0MjMyX2lzYXBucCIKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9jczQyM3hfcG5waWRzW10gPSB7CiAJLyogUGhpbGlwcyBQQ0E3MFBTICovCkBAIC0xNzksMTIgKzE2Nyw2IEBACiAJeyAuaWQgPSAiQ1NDZjAzMiIsIC5kZXZzID0geyB7ICJDU0MwMDAwIiB9LCB7ICJDU0MwMDEwIiB9LCB7ICJDU0MwMDAzIiB9IH0gfSwKIAkvKiBOZXRmaW5pdHkgMzAwMCBvbi1ib2FyZCBzb3VuZGNhcmQgKi8KIAl7IC5pZCA9ICJDU0NlODI1IiwgLmRldnMgPSB7IHsgIkNTQzAxMDAiIH0sIHsgIkNTQzAxMTAiIH0sIHsgIkNTQzAxMGYiIH0gfSB9LAotCS8qIC0tLSAqLwotCXsgLmlkID0gIiIgfQkvKiBlbmQgKi8KLX07Ci0jZWxzZSAvKiBDUzQyMzYgKi8KLSNkZWZpbmUgQ1M0MjNYX0lTQVBOUF9EUklWRVIJImNzNDIzNl9pc2FwbnAiCi1zdGF0aWMgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCBzbmRfY3M0MjN4X3BucGlkc1tdID0gewogCS8qIEludGVsIE1hcmxpbiBTcGlrZSBNb3RoZXJib2FyZCAtIENTNDIzNSAqLwogCXsgLmlkID0gIkNTQzAyMjUiLCAuZGV2cyA9IHsgeyAiQ1NDMDAwMCIgfSwgeyAiQ1NDMDAxMCIgfSwgeyAiQ1NDMDAwMyIgfSB9IH0sCiAJLyogSW50ZWwgTWFybGluIFNwaWtlIE1vdGhlcmJvYXJkICgjMikgLSBDUzQyMzUgKi8KQEAgLTI2Niw3ICsyNDgsNiBAQAogCS8qIC0tLSAqLwogCXsgLmlkID0gIiIgfQkvKiBlbmQgKi8KIH07Ci0jZW5kaWYKIAogTU9EVUxFX0RFVklDRV9UQUJMRShwbnBfY2FyZCwgc25kX2NzNDIzeF9wbnBpZHMpOwogCkBAIC0zMjMsMTcgKzMwNCwxOSBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ1M0MjMyCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9jczQyMzJfcG5wKGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZF9jczQyMzYgKmFjYXJkLAotCQkJCQkgc3RydWN0IHBucF9kZXYgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY2FyZF9jczQyM3hfcG5wKGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZF9jczQyMzYgKmFjYXJkLAorCQkJCQkgc3RydWN0IHBucF9kZXYgKnBkZXYsCisJCQkJCSBzdHJ1Y3QgcG5wX2RldiAqY2RldikKIHsKIAlhY2FyZC0+d3NzID0gcGRldjsKIAlpZiAoc25kX2NzNDIzeF9wbnBfaW5pdF93c3MoZGV2LCBhY2FyZC0+d3NzKSA8IDApCiAJCXJldHVybiAtRUJVU1k7Ci0JY3BvcnRbZGV2XSA9IC0xOworCWlmIChjZGV2KQorCQljcG9ydFtkZXZdID0gcG5wX3BvcnRfc3RhcnQoY2RldiwgMCk7CisJZWxzZQorCQljcG9ydFtkZXZdID0gLTE7CiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2NhcmRfY3M0MjN4X3BucGMoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkX2NzNDIzNiAqYWNhcmQsCiAJCQkJCSAgc3RydWN0IHBucF9jYXJkX2xpbmsgKmNhcmQsCkBAIC0zODIsMTYgKzM2NSwxOCBAQAogCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UoYWNhcmQtPnJlc19zYl9wb3J0KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX2NzNDIzeF9jYXJkX25ldyhpbnQgZGV2KQorc3RhdGljIGludCBzbmRfY3M0MjN4X2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2NzNDIzNikpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfY3M0MjM2KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9jYXJkX2NzNDIzNl9mcmVlOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jczQyM3hfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQpAQCAtNDA5LDQwICszOTQsMzkgQEAKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotI2lmZGVmIENTNDIzMgogCWVyciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHBvcnRbZGV2XSwgY3BvcnRbZGV2XSwKIAkJCSAgICAgaXJxW2Rldl0sCiAJCQkgICAgIGRtYTFbZGV2XSwgZG1hMltkZXZdLAotCQkJICAgICBXU1NfSFdfREVURUNULCAwLCAmY2hpcCk7CisJCQkgICAgIFdTU19IV19ERVRFQ1QzLCAwLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JYWNhcmQtPmNoaXAgPSBjaGlwOworCWlmIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19DUzQyMzZCX01BU0spIHsKKwkJc25kX3dzc19mcmVlKGNoaXApOworCQllcnIgPSBzbmRfY3M0MjM2X2NyZWF0ZShjYXJkLAorCQkJCQlwb3J0W2Rldl0sIGNwb3J0W2Rldl0sCisJCQkJCWlycVtkZXZdLCBkbWExW2Rldl0sIGRtYTJbZGV2XSwKKwkJCQkJV1NTX0hXX0RFVEVDVCwgMCwgJmNoaXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJCWFjYXJkLT5jaGlwID0gY2hpcDsKIAotCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDAsICZwY20pOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCQllcnIgPSBzbmRfY3M0MjM2X3BjbShjaGlwLCAwLCAmcGNtKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gc25kX3dzc19taXhlcihjaGlwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc25kX2NzNDIzNl9taXhlcihjaGlwKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCWFjYXJkLT5jaGlwID0gY2hpcDsKKwkJZXJyID0gc25kX3dzc19wY20oY2hpcCwgMCwgJnBjbSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKIAotI2Vsc2UgLyogQ1M0MjM2ICovCi0JZXJyID0gc25kX2NzNDIzNl9jcmVhdGUoY2FyZCwKLQkJCQlwb3J0W2Rldl0sIGNwb3J0W2Rldl0sCi0JCQkJaXJxW2Rldl0sIGRtYTFbZGV2XSwgZG1hMltkZXZdLAotCQkJCVdTU19IV19ERVRFQ1QsIDAsICZjaGlwKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlhY2FyZC0+Y2hpcCA9IGNoaXA7Ci0KLQllcnIgPSBzbmRfY3M0MjM2X3BjbShjaGlwLCAwLCAmcGNtKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHNuZF9jczQyMzZfbWl4ZXIoY2hpcCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0jZW5kaWYKKwkJZXJyID0gc25kX3dzc19taXhlcihjaGlwKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBwY20tPm5hbWUpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBjbS0+bmFtZSk7CiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWksIGRtYSAlaSIsCkBAIC01MTIsOSArNDk2LDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY3M0MjN4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOwogCWlmICgoZXJyID0gc25kX2NzNDIzeF9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTU3NywxMyArNTYxLDE0IEBACiAKIAogI2lmZGVmIENPTkZJR19QTlAKLSNpZmRlZiBDUzQyMzIKLXN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jczQyMzJfcG5wYmlvc19kZXRlY3Qoc3RydWN0IHBucF9kZXYgKnBkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfY3M0MjN4X3BucGJpb3NfZGV0ZWN0KHN0cnVjdCBwbnBfZGV2ICpwZGV2LAogCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmlkKQogewogCXN0YXRpYyBpbnQgZGV2OwogCWludCBlcnI7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBwbnBfZGV2ICpjZGV2OworCWNoYXIgY2lkW1BOUF9JRF9MRU5dOwogCiAJaWYgKHBucF9kZXZpY2VfaXNfaXNhcG5wKHBkZXYpKQogCQlyZXR1cm4gLUVOT0VOVDsJLyogd2UgaGF2ZSBhbm90aGVyIHByb2NlZHVyZSAtIGNhcmQgKi8KQEAgLTU5NCwxMCArNTc5LDE5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOwotCWlmICgoZXJyID0gc25kX2NhcmRfY3M0MjMyX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldikpIDwgMCkgeworCS8qIHByZXBhcmUgc2Vjb25kIGlkICovCisJc3RyY3B5KGNpZCwgcGRldi0+aWRbMF0uaWQpOworCWNpZFs1XSA9ICcxJzsKKwljZGV2ID0gTlVMTDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNkZXYsICYocGRldi0+cHJvdG9jb2wtPmRldmljZXMpLCBwcm90b2NvbF9saXN0KSB7CisJCWlmICghc3RyY21wKGNkZXYtPmlkWzBdLmlkLCBjaWQpKQorCQkJYnJlYWs7CisJfQorCWVyciA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0gc25kX2NhcmRfY3M0MjN4X3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldiwgY2Rldik7CisJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQblAgQklPUyBkZXRlY3Rpb24gZmFpbGVkIGZvciAiIElERU5UICJcbiIpOwogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpAQCAtNjEyLDM1ICs2MDYsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IHNuZF9jczQyMzJfcG5wX3JlbW92ZShzdHJ1Y3QgcG5wX2RldiAqIHBkZXYpCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX2NzNDIzeF9wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfZGV2ICpwZGV2KQogewogCXNuZF9jYXJkX2ZyZWUocG5wX2dldF9kcnZkYXRhKHBkZXYpKTsKIAlwbnBfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgc25kX2NzNDIzMl9wbnBfc3VzcGVuZChzdHJ1Y3QgcG5wX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzbmRfY3M0MjN4X3BucF9zdXNwZW5kKHN0cnVjdCBwbnBfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJcmV0dXJuIHNuZF9jczQyM3hfc3VzcGVuZChwbnBfZ2V0X2RydmRhdGEocGRldikpOwogfQogCi1zdGF0aWMgaW50IHNuZF9jczQyMzJfcG5wX3Jlc3VtZShzdHJ1Y3QgcG5wX2RldiAqcGRldikKK3N0YXRpYyBpbnQgc25kX2NzNDIzeF9wbnBfcmVzdW1lKHN0cnVjdCBwbnBfZGV2ICpwZGV2KQogewogCXJldHVybiBzbmRfY3M0MjN4X3Jlc3VtZShwbnBfZ2V0X2RydmRhdGEocGRldikpOwogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciBjczQyMzJfcG5wX2RyaXZlciA9IHsKLQkubmFtZSA9ICJjczQyMzItcG5wYmlvcyIsCi0JLmlkX3RhYmxlID0gc25kX2NzNDIzMl9wbnBiaW9zaWRzLAotCS5wcm9iZSA9IHNuZF9jczQyMzJfcG5wYmlvc19kZXRlY3QsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNuZF9jczQyMzJfcG5wX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IHBucF9kcml2ZXIgY3M0MjN4X3BucF9kcml2ZXIgPSB7CisJLm5hbWUgPSAiY3M0MjN4LXBucGJpb3MiLAorCS5pZF90YWJsZSA9IHNuZF9jczQyM3hfcG5wYmlvc2lkcywKKwkucHJvYmUgPSBzbmRfY3M0MjN4X3BucGJpb3NfZGV0ZWN0LAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChzbmRfY3M0MjN4X3BucF9yZW1vdmUpLAogI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gc25kX2NzNDIzMl9wbnBfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHNuZF9jczQyMzJfcG5wX3Jlc3VtZSwKKwkuc3VzcGVuZAk9IHNuZF9jczQyM3hfcG5wX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzbmRfY3M0MjN4X3BucF9yZXN1bWUsCiAjZW5kaWYKIH07Ci0jZW5kaWYgLyogQ1M0MjMyICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9jczQyM3hfcG5wY19kZXRlY3Qoc3RydWN0IHBucF9jYXJkX2xpbmsgKnBjYXJkLAogCQkJCQkgICAgY29uc3Qgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCAqcGlkKQpAQCAtNjU2LDkgKzY0OSw5IEBACiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljYXJkID0gc25kX2NzNDIzeF9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF9jczQyM3hfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CiAJaWYgKChyZXMgPSBzbmRfY2FyZF9jczQyM3hfcG5wYyhkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImlzYXBucCBkZXRlY3Rpb24gZmFpbGVkIGFuZCBwcm9iaW5nIGZvciAiIElERU5UCiAJCSAgICAgICAiIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOwpAQCAtNzE0LDE4ICs3MDcsMTQgQEAKICNpZmRlZiBDT05GSUdfUE5QCiAJaWYgKCFlcnIpCiAJCWlzYV9yZWdpc3RlcmVkID0gMTsKLSNpZmRlZiBDUzQyMzIKLQllcnIgPSBwbnBfcmVnaXN0ZXJfZHJpdmVyKCZjczQyMzJfcG5wX2RyaXZlcik7CisJZXJyID0gcG5wX3JlZ2lzdGVyX2RyaXZlcigmY3M0MjN4X3BucF9kcml2ZXIpOwogCWlmICghZXJyKQogCQlwbnBfcmVnaXN0ZXJlZCA9IDE7Ci0jZW5kaWYKIAllcnIgPSBwbnBfcmVnaXN0ZXJfY2FyZF9kcml2ZXIoJmNzNDIzeF9wbnBjX2RyaXZlcik7CiAJaWYgKCFlcnIpCiAJCXBucGNfcmVnaXN0ZXJlZCA9IDE7Ci0jaWZkZWYgQ1M0MjMyCiAJaWYgKHBucF9yZWdpc3RlcmVkKQogCQllcnIgPSAwOwotI2VuZGlmCiAJaWYgKGlzYV9yZWdpc3RlcmVkKQogCQllcnIgPSAwOwogI2VuZGlmCkBAIC03MzcsMTAgKzcyNiw4IEBACiAjaWZkZWYgQ09ORklHX1BOUAogCWlmIChwbnBjX3JlZ2lzdGVyZWQpCiAJCXBucF91bnJlZ2lzdGVyX2NhcmRfZHJpdmVyKCZjczQyM3hfcG5wY19kcml2ZXIpOwotI2lmZGVmIENTNDIzMgogCWlmIChwbnBfcmVnaXN0ZXJlZCkKLQkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZjczQyMzJfcG5wX2RyaXZlcik7Ci0jZW5kaWYKKwkJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZjczQyM3hfcG5wX2RyaXZlcik7CiAJaWYgKGlzYV9yZWdpc3RlcmVkKQogI2VuZGlmCiAJCWlzYV91bnJlZ2lzdGVyX2RyaXZlcigmY3M0MjN4X2lzYV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzZfbGliLmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYwppbmRleCA2YTg1ZmRjLi4zODgzNWYzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYwpAQCAtODgsMTAgKzg4LDYgQEAKICNpbmNsdWRlIDxzb3VuZC93c3MuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogCi1NT0RVTEVfQVVUSE9SKCJKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJSb3V0aW5lcyBmb3IgY29udHJvbCBvZiBDUzQyMzUvNDIzNkIvNDIzN0IvNDIzOEIvNDIzOSBjaGlwcyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCiAvKgogICoKICAqLwpAQCAtMjg2LDcgKzI4Miw4IEBACiAJaWYgKGhhcmR3YXJlID09IFdTU19IV19ERVRFQ1QpCiAJCWhhcmR3YXJlID0gV1NTX0hXX0RFVEVDVDM7CiAJaWYgKGNwb3J0IDwgMHgxMDApIHsKLQkJc25kX3ByaW50aygicGxlYXNlLCBzcGVjaWZ5IGNvbnRyb2wgcG9ydCBmb3IgQ1M0MjM2KyBjaGlwc1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgInBsZWFzZSwgc3BlY2lmeSBjb250cm9sIHBvcnQgIgorCQkJICAgImZvciBDUzQyMzYrIGNoaXBzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWVyciA9IHNuZF93c3NfY3JlYXRlKGNhcmQsIHBvcnQsIGNwb3J0LApAQCAtMjk1LDcgKzI5Miw4IEBACiAJCXJldHVybiBlcnI7CiAKIAlpZiAoIShjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19DUzQyMzZCX01BU0spKSB7Ci0JICAgICAgICBzbmRfcHJpbnRrKCJDUzQyMzYrOiBNT0RFMyBhbmQgZXh0ZW5kZWQgcmVnaXN0ZXJzIG5vdCBhdmFpbGFibGUsIGhhcmR3YXJlPTB4JXhcbiIsY2hpcC0+aGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJDUzQyMzYrOiBNT0RFMyBhbmQgZXh0ZW5kZWQgcmVnaXN0ZXJzICIKKwkJCSAgICJub3QgYXZhaWxhYmxlLCBoYXJkd2FyZT0weCV4XG4iLCBjaGlwLT5oYXJkd2FyZSk7CiAJCXNuZF9kZXZpY2VfZnJlZShjYXJkLCBjaGlwKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMzAzLDE2ICszMDEsMTkgQEAKIAl7CiAJCWludCBpZHg7CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgODsgaWR4KyspCi0JCQlzbmRfcHJpbnRrKCJDRCVpID0gMHgleFxuIiwgaWR4LCBpbmIoY2hpcC0+Y3BvcnQgKyBpZHgpKTsKKwkJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiQ0QlaSA9IDB4JXhcbiIsCisJCQkJICAgaWR4LCBpbmIoY2hpcC0+Y3BvcnQgKyBpZHgpKTsKIAkJZm9yIChpZHggPSAwOyBpZHggPCA5OyBpZHgrKykKLQkJCXNuZF9wcmludGsoIkMlaSA9IDB4JXhcbiIsIGlkeCwgc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIGlkeCkpOworCQkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJDJWkgPSAweCV4XG4iLAorCQkJCSAgIGlkeCwgc25kX2NzNDIzNl9jdHJsX2luKGNoaXAsIGlkeCkpOwogCX0KICNlbmRpZgogCXZlcjEgPSBzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgMSk7CiAJdmVyMiA9IHNuZF9jczQyMzZfZXh0X2luKGNoaXAsIENTNDIzNl9WRVJTSU9OKTsKIAlzbmRfcHJpbnRkZCgiQ1M0MjM2OiBbMHglbHhdIEMxICh2ZXJzaW9uKSA9IDB4JXgsIGV4dCA9IDB4JXhcbiIsIGNwb3J0LCB2ZXIxLCB2ZXIyKTsKIAlpZiAodmVyMSAhPSB2ZXIyKSB7Ci0JCXNuZF9wcmludGsoIkNTNDIzNisgY2hpcCBkZXRlY3RlZCwgYnV0IGNvbnRyb2wgcG9ydCAweCVseCBpcyBub3QgdmFsaWRcbiIsIGNwb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ1M0MjM2KyBjaGlwIGRldGVjdGVkLCBidXQgIgorCQkJICAgImNvbnRyb2wgcG9ydCAweCVseCBpcyBub3QgdmFsaWRcbiIsIGNwb3J0KTsKIAkJc25kX2RldmljZV9mcmVlKGNhcmQsIGNoaXApOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC04ODMsNyArODg0LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGNoaXAtPmltYWdlW0NTNDIzMV9BTFRfRkVBVFVSRV8xXSAmIDB4MDIgPyAxIDogMDsKICNpZiAwCi0JcHJpbnRrKCJnZXQgdmFsaWQ6IEFMVCA9IDB4JXgsIEMzID0gMHgleCwgQzQgPSAweCV4LCBDNSA9IDB4JXgsIEM2ID0gMHgleCwgQzggPSAweCV4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJnZXQgdmFsaWQ6IEFMVCA9IDB4JXgsIEMzID0gMHgleCwgQzQgPSAweCV4LCAiCisJICAgICAgICJDNSA9IDB4JXgsIEM2ID0gMHgleCwgQzggPSAweCV4XG4iLAogCQkJc25kX3dzc19pbihjaGlwLCBDUzQyMzFfQUxUX0ZFQVRVUkVfMSksCiAJCQlzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgMyksCiAJCQlzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgNCksCkBAIC05MjAsNyArOTIyLDggQEAKIAltdXRleF91bmxvY2soJmNoaXAtPm1jZV9tdXRleCk7CiAKICNpZiAwCi0JcHJpbnRrKCJzZXQgdmFsaWQ6IEFMVCA9IDB4JXgsIEMzID0gMHgleCwgQzQgPSAweCV4LCBDNSA9IDB4JXgsIEM2ID0gMHgleCwgQzggPSAweCV4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJzZXQgdmFsaWQ6IEFMVCA9IDB4JXgsIEMzID0gMHgleCwgQzQgPSAweCV4LCAiCisJICAgICAgICJDNSA9IDB4JXgsIEM2ID0gMHgleCwgQzggPSAweCV4XG4iLAogCQkJc25kX3dzc19pbihjaGlwLCBDUzQyMzFfQUxUX0ZFQVRVUkVfMSksCiAJCQlzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgMyksCiAJCQlzbmRfY3M0MjM2X2N0cmxfaW4oY2hpcCwgNCksCkBAIC0xMDE1LDIzICsxMDE4LDMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KLUVYUE9SVF9TWU1CT0woc25kX2NzNDIzNl9jcmVhdGUpOwotRVhQT1JUX1NZTUJPTChzbmRfY3M0MjM2X3BjbSk7Ci1FWFBPUlRfU1lNQk9MKHNuZF9jczQyMzZfbWl4ZXIpOwotCi0vKgotICogIElOSVQgcGFydAotICovCi0KLXN0YXRpYyBpbnQgX19pbml0IGFsc2FfY3M0MjM2X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFsc2FfY3M0MjM2X2V4aXQodm9pZCkKLXsKLX0KLQotbW9kdWxlX2luaXQoYWxzYV9jczQyMzZfaW5pdCkKLW1vZHVsZV9leGl0KGFsc2FfY3M0MjM2X2V4aXQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZHQwMTl4LmMgYi9zb3VuZC9pc2EvZHQwMTl4LmMKaW5kZXggYTAyNDJjMy4uODBmNWIxYSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2R0MDE5eC5jCisrKyBiL3NvdW5kL2lzYS9kdDAxOXguYwpAQCAtMTUwLDkgKzE1MCwxMCBAQAogCXN0cnVjdCBzbmRfY2FyZF9kdDAxOXggKmFjYXJkOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAotCWlmICgoY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCQkgc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9kdDAxOXgpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfY2FyZF9kdDAxOXgpLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNhcmQtPmNhcmQtPmRldik7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwppbmRleCBiNDYzNzcxLi40NDJiMDgxIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OC5jCisrKyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIHN0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsJLyogSUQgZm9yIHRoaXMgY2FyZCAqLwogc3RhdGljIGludCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEU7CS8qIEVuYWJsZSB0aGlzIGNhcmQgKi8KIHN0YXRpYyBsb25nIHBvcnRbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOwkvKiAweDIyMCwweDI0MCwweDI2MCAqLworc3RhdGljIGxvbmcgZm1fcG9ydFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CS8qIFVzdWFsbHkgMHgzODggKi8KIHN0YXRpYyBsb25nIG1wdV9wb3J0W1NORFJWX0NBUkRTXSA9IHtbMCAuLi4gKFNORFJWX0NBUkRTIC0gMSldID0gLTF9Owogc3RhdGljIGludCBpcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CS8qIDUsNyw5LDEwICovCiBzdGF0aWMgaW50IG1wdV9pcnFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JUlE7CS8qIDUsNyw5LDEwICovCkBAIC02NSw2ICs2Niw4IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkobXB1X3BvcnQsIGxvbmcsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhtcHVfcG9ydCwgIk1QVS00MDEgcG9ydCAjIGZvciAiIENSRF9OQU1FICIgZHJpdmVyLiIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGlycSwgaW50LCBOVUxMLCAwNDQ0KTsKK21vZHVsZV9wYXJhbV9hcnJheShmbV9wb3J0LCBsb25nLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZm1fcG9ydCwgIkZNIHBvcnQgIyBmb3IgRVMxNjg4IGRyaXZlci4iKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lycSwgaW50LCBOVUxMLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobXB1X2lycSwgIk1QVS00MDEgSVJRICMgZm9yICIgQ1JEX05BTUUgIiBkcml2ZXIuIik7CkBAIC0xMjIsOSArMTI1LDkgQEAKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnJvcjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKKwllcnJvciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCiAJZXJyb3IgPSBzbmRfZXMxNjg4X2xlZ2FjeV9jcmVhdGUoY2FyZCwgZGV2LCBuLCAmY2hpcCk7CiAJaWYgKGVycm9yIDwgMCkKQEAgLTE0MywxMyArMTQ2LDE5IEBACiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWksIGRtYSAlaSIsIHBjbS0+bmFtZSwKIAkJY2hpcC0+cG9ydCwgY2hpcC0+aXJxLCBjaGlwLT5kbWE4KTsKIAotCWlmIChzbmRfb3BsM19jcmVhdGUoY2FyZCwgY2hpcC0+cG9ydCwgY2hpcC0+cG9ydCArIDIsCi0JCQlPUEwzX0hXX09QTDMsIDAsICZvcGwzKSA8IDApCi0JCWRldl93YXJuKGRldiwgIm9wbDMgbm90IGRldGVjdGVkIGF0IDB4JWx4XG4iLCBjaGlwLT5wb3J0KTsKLQllbHNlIHsKLQkJZXJyb3IgPQlzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCk7Ci0JCWlmIChlcnJvciA8IDApCi0JCQlnb3RvIG91dDsKKwlpZiAoZm1fcG9ydFtuXSA9PSBTTkRSVl9BVVRPX1BPUlQpCisJCWZtX3BvcnRbbl0gPSBwb3J0W25dOwkvKiBzaGFyZSB0aGUgc2FtZSBwb3J0ICovCisKKwlpZiAoZm1fcG9ydFtuXSA+IDApIHsKKwkJaWYgKHNuZF9vcGwzX2NyZWF0ZShjYXJkLCBmbV9wb3J0W25dLCBmbV9wb3J0W25dICsgMiwKKwkJCQlPUEwzX0hXX09QTDMsIDAsICZvcGwzKSA8IDApCisJCQlkZXZfd2FybihkZXYsCisJCQkJICJvcGwzIG5vdCBkZXRlY3RlZCBhdCAweCVseFxuIiwgZm1fcG9ydFtuXSk7CisJCWVsc2UgeworCQkJZXJyb3IgPQlzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgTlVMTCk7CisJCQlpZiAoZXJyb3IgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CiAJfQogCiAJaWYgKG1wdV9pcnFbbl0gPj0gMCAmJiBtcHVfaXJxW25dICE9IFNORFJWX0FVVE9fSVJRICYmCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxNjg4L2VzMTY4OF9saWIuYyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jCmluZGV4IDRmYmI1MDguLjRjNmUxNGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jCisrKyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jCkBAIC00NSw3ICs0NSw3IEBACiAJCQlyZXR1cm4gMTsKIAkJfQogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKLQlwcmludGsoInNuZF9lczE2ODhfZHNwX2NvbW1hbmQ6IHRpbWVvdXQgKDB4JXgpXG4iLCB2YWwpOworCXByaW50ayhLRVJOX0RFQlVHICJzbmRfZXMxNjg4X2RzcF9jb21tYW5kOiB0aW1lb3V0ICgweCV4KVxuIiwgdmFsKTsKICNlbmRpZgogCXJldHVybiAwOwogfQpAQCAtMTY3LDEzICsxNjcsMTYgQEAKIAlodyA9IEVTMTY4OF9IV19BVVRPOwogCXN3aXRjaCAoY2hpcC0+dmVyc2lvbiAmIDB4ZmZmMCkgewogCWNhc2UgMHg0ODgwOgotCQlzbmRfcHJpbnRrKCJbMHglbHhdIEVTUzogQXVkaW9Ecml2ZSBFUzQ4OCBkZXRlY3RlZCwgYnV0IGRyaXZlciBpcyBpbiBhbm90aGVyIHBsYWNlXG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiWzB4JWx4XSBFU1M6IEF1ZGlvRHJpdmUgRVM0ODggZGV0ZWN0ZWQsICIKKwkJCSAgICJidXQgZHJpdmVyIGlzIGluIGFub3RoZXIgcGxhY2VcbiIsIGNoaXAtPnBvcnQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAljYXNlIDB4Njg4MDoKIAkJaHcgPSAoY2hpcC0+dmVyc2lvbiAmIDB4MGYpID49IDggPyBFUzE2ODhfSFdfMTY4OCA6IEVTMTY4OF9IV182ODg7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIlsweCVseF0gRVNTOiB1bmtub3duIEF1ZGlvRHJpdmUgY2hpcCB3aXRoIHZlcnNpb24gMHgleCAoSmF6ejE2IHNvdW5kY2FyZD8pXG4iLCBjaGlwLT5wb3J0LCBjaGlwLT52ZXJzaW9uKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiWzB4JWx4XSBFU1M6IHVua25vd24gQXVkaW9Ecml2ZSBjaGlwICIKKwkJCSAgICJ3aXRoIHZlcnNpb24gMHgleCAoSmF6ejE2IHNvdW5kY2FyZD8pXG4iLAorCQkJICAgY2hpcC0+cG9ydCwgY2hpcC0+dmVyc2lvbik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMjIzLDcgKzIyNiw3IEBACiAJCX0KIAl9CiAjaWYgMAotCXNuZF9wcmludGsoIm1wdSBjZmcgPSAweCV4XG4iLCBjZmcpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAibXB1IGNmZyA9IDB4JXhcbiIsIGNmZyk7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlzbmRfZXMxNjg4X21peGVyX3dyaXRlKGNoaXAsIDB4NDAsIGNmZyk7CkBAIC0yMzcsNyArMjQwLDkgQEAKIAkJY2ZnID0gMHhmMDsJLyogZW5hYmxlIG9ubHkgRE1BIGNvdW50ZXIgaW50ZXJydXB0ICovCiAJCWlycV9iaXRzID0gaXJxc1tjaGlwLT5pcnEgJiAweDBmXTsKIAkJaWYgKGlycV9iaXRzIDwgMCkgewotCQkJc25kX3ByaW50aygiWzB4JWx4XSBFU1M6IGJhZCBJUlEgJWQgZm9yIEVTMTY4OCBjaGlwISFcbiIsIGNoaXAtPnBvcnQsIGNoaXAtPmlycSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJbMHglbHhdIEVTUzogYmFkIElSUSAlZCAiCisJCQkJICAgImZvciBFUzE2ODggY2hpcCEhXG4iLAorCQkJCSAgIGNoaXAtPnBvcnQsIGNoaXAtPmlycSk7CiAjaWYgMAogCQkJaXJxX2JpdHMgPSAwOwogCQkJY2ZnID0gMHgxMDsKQEAgLTI1MCw3ICsyNTUsOCBAQAogCQljZmcgPSAweGYwOwkvKiBleHRlbmRlZCBtb2RlIERNQSBlbmFibGUgKi8KIAkJZG1hID0gY2hpcC0+ZG1hODsKIAkJaWYgKGRtYSA+IDMgfHwgZG1hID09IDIpIHsKLQkJCXNuZF9wcmludGsoIlsweCVseF0gRVNTOiBiYWQgRE1BIGNoYW5uZWwgJWQgZm9yIEVTMTY4OCBjaGlwISFcbiIsIGNoaXAtPnBvcnQsIGRtYSk7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJbMHglbHhdIEVTUzogYmFkIERNQSBjaGFubmVsICVkICIKKwkJCQkgICAiZm9yIEVTMTY4OCBjaGlwISFcbiIsIGNoaXAtPnBvcnQsIGRtYSk7CiAjaWYgMAogCQkJZG1hX2JpdHMgPSAwOwogCQkJY2ZnID0gMHgwMDsJLyogZGlzYWJsZSBhbGwgRE1BICovCkBAIC0zNDEsOCArMzQ3LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CS8qIHNvbWV0aGluZyBpcyB3cm9uZyAqLwogCX0KICNpZiAwCi0JcHJpbnRrKCJ0cmlnZ2VyOiB2YWwgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHZhbCwgdmFsdWUpOwotCXByaW50aygidHJpZ2dlcjogcG9pbnRlciA9IDB4JXhcbiIsIHNuZF9kbWFfcG9pbnRlcihjaGlwLT5kbWE4LCBjaGlwLT5kbWFfc2l6ZSkpOworCXByaW50ayhLRVJOX0RFQlVHICJ0cmlnZ2VyOiB2YWwgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHZhbCwgdmFsdWUpOworCXByaW50ayhLRVJOX0RFQlVHICJ0cmlnZ2VyOiBwb2ludGVyID0gMHgleFxuIiwKKwkgICAgICAgc25kX2RtYV9wb2ludGVyKGNoaXAtPmRtYTgsIGNoaXAtPmRtYV9zaXplKSk7CiAjZW5kaWYKIAlzbmRfZXMxNjg4X3dyaXRlKGNoaXAsIDB4YjgsICh2YWwgJiAweGYwKSB8IHZhbHVlKTsKIAlzcGluX3VubG9jaygmY2hpcC0+cmVnX2xvY2spOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTh4eC5jIGIvc291bmQvaXNhL2VzMTh4eC5jCmluZGV4IDkwNDk4ZTQuLjhjZmJmZjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE4eHguYworKysgYi9zb3VuZC9pc2EvZXMxOHh4LmMKQEAgLTIxMjUsMTAgKzIxMjUsMTAgQEAKICNkZWZpbmUgaXNfaXNhcG5wX3NlbGVjdGVkKGRldikJCTAKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHNuZF9jYXJkICpzbmRfZXMxOHh4X2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9lczE4eHhfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7Ci0JcmV0dXJuIHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9hdWRpb2RyaXZlKSk7CisJcmV0dXJuIHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNuZF9hdWRpb2RyaXZlKSwgY2FyZHApOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfYXVkaW9kcml2ZV9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC0yMTk3LDkgKzIxOTcsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9lczE4eHhfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgZGV2cHRyKTsKIAlpZiAoKGVyciA9IHNuZF9hdWRpb2RyaXZlX3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpAQCAtMjMwMyw5ICsyMzAzLDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9hdWRpb2RyaXZlX3BucChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpAQCAtMjM2Miw5ICsyMzYyLDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNhcmQgPSBzbmRfZXMxOHh4X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJcmVzID0gc25kX2VzMTh4eF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAocmVzIDwgMCkKKwkJcmV0dXJuIHJlczsKIAogCWlmICgocmVzID0gc25kX2F1ZGlvZHJpdmVfcG5wYyhkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfZG1hLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c19kbWEuYwppbmRleCBmNDVmNjExLi4zNmMyN2M4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c19kbWEuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19kbWEuYwpAQCAtNDUsNyArNDUsOCBAQAogCXVuc2lnbmVkIGNoYXIgZG1hX2NtZDsKIAl1bnNpZ25lZCBpbnQgYWRkcmVzc19oaWdoOwogCi0JLy8gc25kX3ByaW50aygiZG1hX3RyYW5zZmVyOiBhZGRyPTB4JXgsIGJ1Zj0weCVseCwgY291bnQ9MHgleFxuIiwgYWRkciwgKGxvbmcpIGJ1ZiwgY291bnQpOworCXNuZF9wcmludGRkKCJkbWFfdHJhbnNmZXI6IGFkZHI9MHgleCwgYnVmPTB4JWx4LCBjb3VudD0weCV4XG4iLAorCQkgICAgYWRkciwgYnVmX2FkZHIsIGNvdW50KTsKIAogCWlmIChndXMtPmdmMS5kbWExID4gMykgewogCQlpZiAoZ3VzLT5nZjEuZW5oX21vZGUpIHsKQEAgLTc3LDcgKzc4LDggQEAKIAlzbmRfZ2YxX2RtYV9hY2soZ3VzKTsKIAlzbmRfZG1hX3Byb2dyYW0oZ3VzLT5nZjEuZG1hMSwgYnVmX2FkZHIsIGNvdW50LCBkbWFfY21kICYgU05EUlZfR0YxX0RNQV9SRUFEID8gRE1BX01PREVfUkVBRCA6IERNQV9NT0RFX1dSSVRFKTsKICNpZiAwCi0Jc25kX3ByaW50aygiYWRkcmVzcyA9IDB4JXgsIGNvdW50ID0gMHgleCwgZG1hX2NtZCA9IDB4JXhcbiIsIGFkZHJlc3MgPDwgMSwgY291bnQsIGRtYV9jbWQpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiYWRkcmVzcyA9IDB4JXgsIGNvdW50ID0gMHgleCwgZG1hX2NtZCA9IDB4JXhcbiIsCisJCSAgIGFkZHJlc3MgPDwgMSwgY291bnQsIGRtYV9jbWQpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmd1cy0+cmVnX2xvY2ssIGZsYWdzKTsKIAlpZiAoZ3VzLT5nZjEuZW5oX21vZGUpIHsKQEAgLTE0Miw3ICsxNDQsOSBAQAogCXNuZF9nZjFfZG1hX3Byb2dyYW0oZ3VzLCBibG9jay0+YWRkciwgYmxvY2stPmJ1Zl9hZGRyLCBibG9jay0+Y291bnQsICh1bnNpZ25lZCBzaG9ydCkgYmxvY2stPmNtZCk7CiAJa2ZyZWUoYmxvY2spOwogI2lmIDAKLQlwcmludGsoInByb2dyYW0gZG1hIChJUlEpIC0gYWRkciA9IDB4JXgsIGJ1ZmZlciA9IDB4JWx4LCBjb3VudCA9IDB4JXgsIGNtZCA9IDB4JXhcbiIsIGFkZHIsIChsb25nKSBidWZmZXIsIGNvdW50LCBjbWQpOworCXNuZF9wcmludGQoS0VSTl9ERUJVRyAicHJvZ3JhbSBkbWEgKElSUSkgLSAiCisJCSAgICJhZGRyID0gMHgleCwgYnVmZmVyID0gMHglbHgsIGNvdW50ID0gMHgleCwgY21kID0gMHgleFxuIiwKKwkJICAgYmxvY2stPmFkZHIsIGJsb2NrLT5idWZfYWRkciwgYmxvY2stPmNvdW50LCBibG9jay0+Y21kKTsKICNlbmRpZgogfQogCkBAIC0yMDMsMTMgKzIwNywxNiBAQAogCX0KIAkqYmxvY2sgPSAqX19ibG9jazsKIAlibG9jay0+bmV4dCA9IE5VTEw7Ci0jaWYgMAotCXByaW50aygiYWRkciA9IDB4JXgsIGJ1ZmZlciA9IDB4JWx4LCBjb3VudCA9IDB4JXgsIGNtZCA9IDB4JXhcbiIsIGJsb2NrLT5hZGRyLCAobG9uZykgYmxvY2stPmJ1ZmZlciwgYmxvY2stPmNvdW50LCBibG9jay0+Y21kKTsKLSNlbmRpZgotI2lmIDAKLQlwcmludGsoImd1cy0+Z2YxLmRtYV9kYXRhX3BjbV9sYXN0ID0gMHglbHhcbiIsIChsb25nKWd1cy0+Z2YxLmRtYV9kYXRhX3BjbV9sYXN0KTsKLQlwcmludGsoImd1cy0+Z2YxLmRtYV9kYXRhX3BjbSA9IDB4JWx4XG4iLCAobG9uZylndXMtPmdmMS5kbWFfZGF0YV9wY20pOwotI2VuZGlmCisKKwlzbmRfcHJpbnRkZCgiYWRkciA9IDB4JXgsIGJ1ZmZlciA9IDB4JWx4LCBjb3VudCA9IDB4JXgsIGNtZCA9IDB4JXhcbiIsCisJCSAgICBibG9jay0+YWRkciwgKGxvbmcpIGJsb2NrLT5idWZmZXIsIGJsb2NrLT5jb3VudCwKKwkJICAgIGJsb2NrLT5jbWQpOworCisJc25kX3ByaW50ZGQoImd1cy0+Z2YxLmRtYV9kYXRhX3BjbV9sYXN0ID0gMHglbHhcbiIsCisJCSAgICAobG9uZylndXMtPmdmMS5kbWFfZGF0YV9wY21fbGFzdCk7CisJc25kX3ByaW50ZGQoImd1cy0+Z2YxLmRtYV9kYXRhX3BjbSA9IDB4JWx4XG4iLAorCQkgICAgKGxvbmcpZ3VzLT5nZjEuZG1hX2RhdGFfcGNtKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZndXMtPmRtYV9sb2NrLCBmbGFncyk7CiAJaWYgKHN5bnRoKSB7CiAJCWlmIChndXMtPmdmMS5kbWFfZGF0YV9zeW50aF9sYXN0KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c19pcnEuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX2lycS5jCmluZGV4IDA0MTg5NGQuLjIwNTVhZmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzX2lycS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzX2lycS5jCkBAIC00MSw3ICs0MSw3IEBACiAJaWYgKHN0YXR1cyA9PSAwKQogCQlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIAloYW5kbGVkID0gMTsKLQkvLyBzbmRfcHJpbnRrKCJJUlE6IHN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CisJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJJUlE6IHN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7ICovCiAJaWYgKHN0YXR1cyAmIDB4MDIpIHsKIAkJU1RBVF9BREQoZ3VzLT5nZjEuaW50ZXJydXB0X3N0YXRfbWlkaV9pbik7CiAJCWlmIChndXMtPmdmMS5pbnRlcnJ1cHRfaGFuZGxlcl9taWRpX2luKQpAQCAtNjUsNyArNjUsOSBAQAogCQkJCWNvbnRpbnVlOwkvKiBtdWx0aSByZXF1ZXN0ICovCiAJCQlhbHJlYWR5IHw9IF9jdXJyZW50XzsJLyogbWFyayByZXF1ZXN0ICovCiAjaWYgMAotCQkJcHJpbnRrKCJ2b2ljZSA9ICVpLCB2b2ljZV9zdGF0dXMgPSAweCV4LCB2b2ljZV92ZXJpZnkgPSAlaVxuIiwgdm9pY2UsIHZvaWNlX3N0YXR1cywgaW5iKEdVU1AoZ3VzLCBHRjFQQUdFKSkpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInZvaWNlID0gJWksIHZvaWNlX3N0YXR1cyA9IDB4JXgsICIKKwkJCSAgICAgICAidm9pY2VfdmVyaWZ5ID0gJWlcbiIsCisJCQkgICAgICAgdm9pY2UsIHZvaWNlX3N0YXR1cywgaW5iKEdVU1AoZ3VzLCBHRjFQQUdFKSkpOwogI2VuZGlmCiAJCQlwdm9pY2UgPSAmZ3VzLT5nZjEudm9pY2VzW3ZvaWNlXTsgCiAJCQlpZiAocHZvaWNlLT51c2UpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX3BjbS5jIGIvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMKaW5kZXggMzg1MTBhZS4uZWRiMTFlZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMKQEAgLTgyLDcgKzgyLDEwIEBACiAKIAljb3VudCArPSBvZmZzZXQgJiAzMTsKIAlvZmZzZXQgJj0gfjMxOwotCS8vIHNuZF9wcmludGsoImJsb2NrIGNoYW5nZSAtIG9mZnNldCA9IDB4JXgsIGNvdW50ID0gMHgleFxuIiwgb2Zmc2V0LCBjb3VudCk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImJsb2NrIGNoYW5nZSAtIG9mZnNldCA9IDB4JXgsIGNvdW50ID0gMHgleFxuIiwKKwkJICAgb2Zmc2V0LCBjb3VudCk7CisJKi8KIAltZW1zZXQoJmJsb2NrLCAwLCBzaXplb2YoYmxvY2spKTsKIAlibG9jay5jbWQgPSBTTkRSVl9HRjFfRE1BX0lSUTsKIAlpZiAoc25kX3BjbV9mb3JtYXRfdW5zaWduZWQocnVudGltZS0+Zm9ybWF0KSkKQEAgLTEzNSw3ICsxMzgsMTEgQEAKIAkJY3VyciA9IGJlZ2luICsgKHBjbXAtPmJwb3MgKiBwY21wLT5ibG9ja19zaXplKSAvIHJ1bnRpbWUtPmNoYW5uZWxzOwogCQllbmQgPSBjdXJyICsgKHBjbXAtPmJsb2NrX3NpemUgLyBydW50aW1lLT5jaGFubmVscyk7CiAJCWVuZCAtPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChydW50aW1lLT5mb3JtYXQpID09IDE2ID8gMiA6IDE7Ci0JCS8vIHNuZF9wcmludGsoImluaXQ6IGN1cnI9MHgleCwgYmVnaW49MHgleCwgZW5kPTB4JXgsIGN0cmw9MHgleCwgcmFtcD0weCV4LCByYXRlPTB4JXhcbiIsIGN1cnIsIGJlZ2luLCBlbmQsIHZvaWNlX2N0cmwsIHJhbXBfY3RybCwgcmF0ZSk7CisJCS8qCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogY3Vycj0weCV4LCBiZWdpbj0weCV4LCBlbmQ9MHgleCwgIgorCQkJICAgImN0cmw9MHgleCwgcmFtcD0weCV4LCByYXRlPTB4JXhcbiIsCisJCQkgICBjdXJyLCBiZWdpbiwgZW5kLCB2b2ljZV9jdHJsLCByYW1wX2N0cmwsIHJhdGUpOworCQkqLwogCQlwYW4gPSBydW50aW1lLT5jaGFubmVscyA9PSAyID8gKCF2b2ljZSA/IDEgOiAxNCkgOiA4OwogCQl2b2wgPSAhdm9pY2UgPyBndXMtPmdmMS5wY21fdm9sdW1lX2xldmVsX2xlZnQgOiBndXMtPmdmMS5wY21fdm9sdW1lX2xldmVsX3JpZ2h0OwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3VzLT5yZWdfbG9jaywgZmxhZ3MpOwpAQCAtMjA1LDkgKzIxMiwxMSBAQAogCXJhbXBfY3RybCA9IChzbmRfZ2YxX3JlYWQ4KGd1cywgU05EUlZfR0YxX1ZCX1ZPTFVNRV9DT05UUk9MKSAmIH4weGE0KSB8IDB4MDM7CiAjaWYgMAogCXNuZF9nZjFfc2VsZWN0X3ZvaWNlKGd1cywgcHZvaWNlLT5udW1iZXIpOwotCXByaW50aygicG9zaXRpb24gPSAweCV4XG4iLCAoc25kX2dmMV9yZWFkX2FkZHIoZ3VzLCBTTkRSVl9HRjFfVkFfQ1VSUkVOVCwgdm9pY2VfY3RybCAmIDQpID4+IDQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicG9zaXRpb24gPSAweCV4XG4iLAorCSAgICAgICAoc25kX2dmMV9yZWFkX2FkZHIoZ3VzLCBTTkRSVl9HRjFfVkFfQ1VSUkVOVCwgdm9pY2VfY3RybCAmIDQpID4+IDQpKTsKIAlzbmRfZ2YxX3NlbGVjdF92b2ljZShndXMsIHBjbXAtPnB2b2ljZXNbMV0tPm51bWJlcik7Ci0JcHJpbnRrKCJwb3NpdGlvbiA9IDB4JXhcbiIsIChzbmRfZ2YxX3JlYWRfYWRkcihndXMsIFNORFJWX0dGMV9WQV9DVVJSRU5ULCB2b2ljZV9jdHJsICYgNCkgPj4gNCkpOworCXByaW50ayhLRVJOX0RFQlVHICJwb3NpdGlvbiA9IDB4JXhcbiIsCisJICAgICAgIChzbmRfZ2YxX3JlYWRfYWRkcihndXMsIFNORFJWX0dGMV9WQV9DVVJSRU5ULCB2b2ljZV9jdHJsICYgNCkgPj4gNCkpOwogCXNuZF9nZjFfc2VsZWN0X3ZvaWNlKGd1cywgcHZvaWNlLT5udW1iZXIpOwogI2VuZGlmCiAJcGNtcC0+YnBvcysrOwpAQCAtMjk5LDcgKzMwOCwxMSBAQAogCXVuc2lnbmVkIGludCBsZW47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8vIHByaW50aygicG9rZSBibG9jazsgYnVmID0gMHgleCwgcG9zID0gJWksIGNvdW50ID0gJWksIHBvcnQgPSAweCV4XG4iLCAoaW50KWJ1ZiwgcG9zLCBjb3VudCwgZ3VzLT5nZjEucG9ydCk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAicG9rZSBibG9jazsgYnVmID0gMHgleCwgcG9zID0gJWksIGNvdW50ID0gJWksIHBvcnQgPSAweCV4XG4iLAorCSAgICAgICAoaW50KWJ1ZiwgcG9zLCBjb3VudCwgZ3VzLT5nZjEucG9ydCk7CisJKi8KIAl3aGlsZSAoY291bnQgPiAwKSB7CiAJCWxlbiA9IGNvdW50OwogCQlpZiAobGVuID4gNTEyKQkJLyogbGltaXQsIHRvIGFsbG93IElSUSAqLwpAQCAtNjgwLDcgKzY5Myw4IEBACiAJcnVudGltZS0+cHJpdmF0ZV9mcmVlID0gc25kX2dmMV9wY21fcGxheWJhY2tfZnJlZTsKIAogI2lmIDAKLQlwcmludGsoInBsYXliYWNrLmJ1ZmZlciA9IDB4JWx4LCBnZjEucGNtX2J1ZmZlciA9IDB4JWx4XG4iLCAobG9uZykgcGNtLT5wbGF5YmFjay5idWZmZXIsIChsb25nKSBndXMtPmdmMS5wY21fYnVmZmVyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicGxheWJhY2suYnVmZmVyID0gMHglbHgsIGdmMS5wY21fYnVmZmVyID0gMHglbHhcbiIsCisJICAgICAgIChsb25nKSBwY20tPnBsYXliYWNrLmJ1ZmZlciwgKGxvbmcpIGd1cy0+Z2YxLnBjbV9idWZmZXIpOwogI2VuZGlmCiAJaWYgKChlcnIgPSBzbmRfZ2YxX2RtYV9pbml0KGd1cykpIDwgMCkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzX3VhcnQuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX3VhcnQuYwppbmRleCBmMGFmM2Y3Li4yMWNjNDJlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c191YXJ0LmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNfdWFydC5jCkBAIC0xMjksOCArMTI5LDE0IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmd1cy0+dWFydF9jbWRfbG9jaywgZmxhZ3MpOwogI2lmIDAKLQlzbmRfcHJpbnRrKCJyZWFkIGluaXQgLSBlbmFibGUgPSAlaSwgY21kID0gMHgleCwgc3RhdCA9IDB4JXhcbiIsIGd1cy0+dWFydF9lbmFibGUsIGd1cy0+Z2YxLnVhcnRfY21kLCBzbmRfZ2YxX3VhcnRfc3RhdChndXMpKTsKLQlzbmRfcHJpbnRrKCJbMHgleF0gcmVnIChjdHJsL3N0YXR1cykgPSAweCV4LCByZWcgKGRhdGEpID0gMHgleCAocGFnZSA9IDB4JXgpXG4iLCBndXMtPmdmMS5wb3J0ICsgMHgxMDAsIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDApLCBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAxKSwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMikpOworCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkgICAicmVhZCBpbml0IC0gZW5hYmxlID0gJWksIGNtZCA9IDB4JXgsIHN0YXQgPSAweCV4XG4iLAorCQkgICBndXMtPnVhcnRfZW5hYmxlLCBndXMtPmdmMS51YXJ0X2NtZCwgc25kX2dmMV91YXJ0X3N0YXQoZ3VzKSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJbMHgleF0gcmVnIChjdHJsL3N0YXR1cykgPSAweCV4LCByZWcgKGRhdGEpID0gMHgleCAiCisJCSAgICIocGFnZSA9IDB4JXgpXG4iLAorCQkgICBndXMtPmdmMS5wb3J0ICsgMHgxMDAsIGluYihndXMtPmdmMS5wb3J0ICsgMHgxMDApLAorCQkgICBpbmIoZ3VzLT5nZjEucG9ydCArIDB4MTAxKSwgaW5iKGd1cy0+Z2YxLnBvcnQgKyAweDEwMikpOwogI2VuZGlmCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c2NsYXNzaWMuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCmluZGV4IDQyNjUzMmEuLjA4NmI4ZjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jCkBAIC0xNDgsOSArMTQ4LDkgQEAKIAlzdHJ1Y3Qgc25kX2d1c19jYXJkICpndXM7CiAJaW50IGVycm9yOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtuXSwgaWRbbl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRUlOVkFMOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAocGNtX2NoYW5uZWxzW25dIDwgMikKIAkJcGNtX2NoYW5uZWxzW25dID0gMjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzZXh0cmVtZS5jIGIvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKaW5kZXggN2FkNGMzYi4uMTgwYThkZSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMKQEAgLTI0MSw5ICsyNDEsOSBAQAogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAlpbnQgZXJyb3I7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJZXJyb3IgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWlmIChtcHVfcG9ydFtuXSA9PSBTTkRSVl9BVVRPX1BPUlQpCiAJCW1wdV9wb3J0W25dID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMgYi9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCmluZGV4IGY5NGMxOTcuLmYyNmVhYzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNtYXguYwpAQCAtMjE0LDEwICsyMTQsMTAgQEAKIAlzdHJ1Y3Qgc25kX3dzcyAqd3NzOwogCXN0cnVjdCBzbmRfZ3VzbWF4ICptYXhjYXJkOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9ndXNtYXgpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9ndXNtYXgpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX2d1c21heF9mcmVlOwogCW1heGNhcmQgPSAoc3RydWN0IHNuZF9ndXNtYXggKiljYXJkLT5wcml2YXRlX2RhdGE7CiAJbWF4Y2FyZC0+Y2FyZCA9IGNhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jIGIvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYwppbmRleCA1ZmFlY2ZiLi41MzRhNmVjIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGJ1cy0+cHJpdmF0ZV92YWx1ZTsKIAogI2lmIDAKLQlwcmludGsoImkyY19zZXRsaW5lcyAtIDB4JWx4IDwtICVpLCVpXG4iLCBwb3J0LCBjdHJsLCBkYXRhKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiaTJjX3NldGxpbmVzIC0gMHglbHggPC0gJWksJWlcbiIsIHBvcnQsIGN0cmwsIGRhdGEpOwogI2VuZGlmCiAJb3V0YigoZGF0YSA8PCAxKSB8IGN0cmwsIHBvcnQpOwogCXVkZWxheSgxMCk7CkBAIC0xODMsNyArMTgzLDcgQEAKIAogCXJlcyA9IGluYihwb3J0KSAmIDE7CiAjaWYgMAotCXByaW50aygiaTJjX2dldGNsb2NrbGluZSAtIDB4JWx4IC0+ICVpXG4iLCBwb3J0LCByZXMpOworCXByaW50ayhLRVJOX0RFQlVHICJpMmNfZ2V0Y2xvY2tsaW5lIC0gMHglbHggLT4gJWlcbiIsIHBvcnQsIHJlcyk7CiAjZW5kaWYKIAlyZXR1cm4gcmVzOwogfQpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJCXVkZWxheSgxMCk7CiAJcmVzID0gKGluYihwb3J0KSAmIDIpID4+IDE7CiAjaWYgMAotCXByaW50aygiaTJjX2dldGRhdGFsaW5lIC0gMHglbHggLT4gJWlcbiIsIHBvcnQsIHJlcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgImkyY19nZXRkYXRhbGluZSAtIDB4JWx4IC0+ICVpXG4iLCBwb3J0LCByZXMpOwogI2VuZGlmCiAJcmV0dXJuIHJlczsKIH0KQEAgLTM0Miw3ICszNDIsOCBAQAogCQkJc25kX2dmMV9wb2tlKGd1cywgbG9jYWwsIGQpOwogCQkJc25kX2dmMV9wb2tlKGd1cywgbG9jYWwgKyAxLCBkICsgMSk7CiAjaWYgMAotCQkJcHJpbnRrKCJkID0gMHgleCwgbG9jYWwgPSAweCV4LCBsb2NhbCArIDEgPSAweCV4LCBpZHggPDwgMjIgPSAweCV4XG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgImQgPSAweCV4LCBsb2NhbCA9IDB4JXgsICIKKwkJCSAgICAgICAibG9jYWwgKyAxID0gMHgleCwgaWR4IDw8IDIyID0gMHgleFxuIiwKIAkJCSAgICAgICBkLAogCQkJICAgICAgIHNuZF9nZjFfcGVlayhndXMsIGxvY2FsKSwKIAkJCSAgICAgICBzbmRfZ2YxX3BlZWsoZ3VzLCBsb2NhbCArIDEpLApAQCAtMzU2LDcgKzM1Nyw4IEBACiAJCX0KIAl9CiAjaWYgMAotCXByaW50aygic2l6ZXM6ICVpICVpICVpICVpXG4iLCBzaXplc1swXSwgc2l6ZXNbMV0sIHNpemVzWzJdLCBzaXplc1szXSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInNpemVzOiAlaSAlaSAlaSAlaVxuIiwKKwkgICAgICAgc2l6ZXNbMF0sIHNpemVzWzFdLCBzaXplc1syXSwgc2l6ZXNbM10pOwogI2VuZGlmCiB9CiAKQEAgLTQxMCwxMiArNDEyLDEyIEBACiAJCWxtY3QgPSAocHNpemVzWzNdIDw8IDI0KSB8IChwc2l6ZXNbMl0gPDwgMTYpIHwKIAkJICAgIChwc2l6ZXNbMV0gPDwgOCkgfCBwc2l6ZXNbMF07CiAjaWYgMAotCQlwcmludGsoImxtY3QgPSAweCUwOHhcbiIsIGxtY3QpOworCQlwcmludGsoS0VSTl9ERUJVRyAibG1jdCA9IDB4JTA4eFxuIiwgbG1jdCk7CiAjZW5kaWYKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG1jKTsgaSsrKQogCQkJaWYgKGxtY3QgPT0gbG1jW2ldKSB7CiAjaWYgMAotCQkJCXByaW50aygiZm91bmQgISEhICVpXG4iLCBpKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiZm91bmQgISEhICVpXG4iLCBpKTsKICNlbmRpZgogCQkJCXNuZF9nZjFfd3JpdGUxNihndXMsIFNORFJWX0dGMV9HV19NRU1PUllfQ09ORklHLCAoc25kX2dmMV9sb29rMTYoZ3VzLCBTTkRSVl9HRjFfR1dfTUVNT1JZX0NPTkZJRykgJiAweGZmZjApIHwgaSk7CiAJCQkJc25kX2ludGVyd2F2ZV9iYW5rX3NpemVzKGd1cywgcHNpemVzKTsKQEAgLTYyNiwyMCArNjI4LDIyIEBACiAJCWZyZWVfaXJxKGl3Y2FyZC0+aXJxLCAodm9pZCAqKWl3Y2FyZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9pbnRlcndhdmVfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX2ludGVyd2F2ZV9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9pbnRlcndhdmUgKml3Y2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9pbnRlcndhdmUpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9pbnRlcndhdmUpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaXdjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWl3Y2FyZC0+Y2FyZCA9IGNhcmQ7CiAJaXdjYXJkLT5pcnEgPSAtMTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfaW50ZXJ3YXZlX2ZyZWU7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX2ludGVyd2F2ZV9wcm9iZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCkBAIC03NzgsOSArNzgyLDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfaW50ZXJ3YXZlX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2ludGVyd2F2ZV9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgZGV2cHRyKTsKIAlpZiAoKGVyciA9IHNuZF9pbnRlcndhdmVfcHJvYmUoY2FyZCwgZGV2KSkgPCAwKSB7CkBAIC04NzYsOSArODgwLDkgQEAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKIAkJCQkKLQljYXJkID0gc25kX2ludGVyd2F2ZV9jYXJkX25ldyhkZXYpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJlcyA9IHNuZF9pbnRlcndhdmVfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKHJlcyA8IDApCisJCXJldHVybiByZXM7CiAKIAlpZiAoKHJlcyA9IHNuZF9pbnRlcndhdmVfcG5wKGRldiwgY2FyZC0+cHJpdmF0ZV9kYXRhLCBwY2FyZCwgcGlkKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9NYWtlZmlsZSBiL3NvdW5kL2lzYS9tc25kL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNzFjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKKworc25kLW1zbmQtbGliLW9ianMgOj0gbXNuZC5vIG1zbmRfbWlkaS5vIG1zbmRfcGlubmFjbGVfbWl4ZXIubworc25kLW1zbmQtcGlubmFjbGUtb2JqcyA6PSBtc25kX3Bpbm5hY2xlLm8KK3NuZC1tc25kLWNsYXNzaWMtb2JqcyA6PSBtc25kX2NsYXNzaWMubworCisjIFRvcGxldmVsIE1vZHVsZSBEZXBlbmRlbmN5CitvYmotJChDT05GSUdfU05EX01TTkRfUElOTkFDTEUpICs9IHNuZC1tc25kLXBpbm5hY2xlLm8gc25kLW1zbmQtbGliLm8KK29iai0kKENPTkZJR19TTkRfTVNORF9DTEFTU0lDKSArPSBzbmQtbXNuZC1jbGFzc2ljLm8gc25kLW1zbmQtbGliLm8KKwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZC5jIGIvc291bmQvaXNhL21zbmQvbXNuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjQ1NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kLmMKQEAgLTAsMCArMSw3MDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAyMDAyLzA2LzMwIEthcnN0ZW4gV2llc2U6CisgKglyZW1vdmVkIGtlcm5lbC12ZXJzaW9uIGRlcGVuZGVuY2llcy4KKyAqCXJpcHBlZCBmcm9tIGxpbnV4IGtlcm5lbCAyLjQuMTggKE9TUyBJbXBsZW1lbnRhdGlvbikgYnkgbWUuCisgKglJbiB0aGUgT1NTIFZlcnNpb24sIHRoaXMgZmlsZSBpcyBjb21waWxlZCB0byBhIHNlcGFyYXRlIE1PRFVMRSwKKyAqCXRoYXQgaXMgdXNlZCBieSB0aGUgcGlubmFjbGUgYW5kIHRoZSBjbGFzc2ljIGRyaXZlci4KKyAqCXNpbmNlIHRoZXJlIGlzIG5vIGNsYXNzaWMgZHJpdmVyIGZvciBhbHNhIHlldCAoaSBkb250IGhhdmUgYSBjbGFzc2ljCisgKgkmIHdyaXRpbmcgb25lIGJsaW5kZm9sZCBpcyBkaWZmaWN1bHQpIHRoaXMgZmlsZSdzIG9iamVjdCBpcyBzdGF0aWNhbGx5CisgKglsaW5rZWQgaW50byB0aGUgcGlubmFjbGUtZHJpdmVyLW1vZHVsZSBmb3Igbm93Lglsb29rIGZvciB0aGUgc3RyaW5nCisgKgkJInVuY29tbWVudCB0aGlzIHRvIG1ha2UgdGhpcyBhIG1vZHVsZSBhZ2FpbiIKKyAqCXRvIGRvIGd1ZXNzIHdoYXQuCisgKgorICogdGhlIGZvbGxvd2luZyBpcyBhIGNvcHkgb2YgdGhlIDIuNC4xOCBPU1MgRlJFRSBmaWxlLWhlYWRpbmcgY29tbWVudDoKKyAqCisgKiBtc25kLmMgLSBEcml2ZXIgQmFzZQorICoKKyAqIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFNvdW5kIENhcmQgRHJpdmVyIGZvciBMaW51eAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OCBBbmRyZXcgVmVsaWF0aAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKworI2luY2x1ZGUgIm1zbmQuaCIKKworI2RlZmluZSBMT0dOQU1FCQkJIm1zbmQiCisKKwordm9pZCBzbmRfbXNuZF9pbml0X3F1ZXVlKHZvaWQgKmJhc2UsIGludCBzdGFydCwgaW50IHNpemUpCit7CisJd3JpdGV3KFBDVE9EU1BfQkFTRUQoc3RhcnQpLCBiYXNlICsgSlFTX3dTdGFydCk7CisJd3JpdGV3KFBDVE9EU1BfT0ZGU0VUKHNpemUpIC0gMSwgYmFzZSArIEpRU193U2l6ZSk7CisJd3JpdGV3KDAsIGJhc2UgKyBKUVNfd0hlYWQpOworCXdyaXRldygwLCBiYXNlICsgSlFTX3dUYWlsKTsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfaW5pdF9xdWV1ZSk7CisKK3N0YXRpYyBpbnQgc25kX21zbmRfd2FpdF9UWERFKHN0cnVjdCBzbmRfbXNuZCAqZGV2KQoreworCXVuc2lnbmVkIGludCBpbyA9IGRldi0+aW87CisJaW50IHRpbWVvdXQgPSAxMDAwOworCisJd2hpbGUgKHRpbWVvdXQtLSA+IDApCisJCWlmIChpbmIoaW8gKyBIUF9JU1IpICYgSFBJU1JfVFhERSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfd2FpdF9IQzAoc3RydWN0IHNuZF9tc25kICpkZXYpCit7CisJdW5zaWduZWQgaW50IGlvID0gZGV2LT5pbzsKKwlpbnQgdGltZW91dCA9IDEwMDA7CisKKwl3aGlsZSAodGltZW91dC0tID4gMCkKKwkJaWYgKCEoaW5iKGlvICsgSFBfQ1ZSKSAmIEhQQ1ZSX0hDKSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIC1FSU87Cit9CisKK2ludCBzbmRfbXNuZF9zZW5kX2RzcF9jbWQoc3RydWN0IHNuZF9tc25kICpkZXYsIHU4IGNtZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCWlmIChzbmRfbXNuZF93YWl0X0hDMChkZXYpID09IDApIHsKKwkJb3V0YihjbWQsIGRldi0+aW8gKyBIUF9DVlIpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJc25kX3ByaW50ZChLRVJOX0VSUiBMT0dOQU1FICI6IFNlbmQgRFNQIGNvbW1hbmQgdGltZW91dFxuIik7CisKKwlyZXR1cm4gLUVJTzsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfc2VuZF9kc3BfY21kKTsKKworaW50IHNuZF9tc25kX3NlbmRfd29yZChzdHJ1Y3Qgc25kX21zbmQgKmRldiwgdW5zaWduZWQgY2hhciBoaWdoLAorCQkgICB1bnNpZ25lZCBjaGFyIG1pZCwgdW5zaWduZWQgY2hhciBsb3cpCit7CisJdW5zaWduZWQgaW50IGlvID0gZGV2LT5pbzsKKworCWlmIChzbmRfbXNuZF93YWl0X1RYREUoZGV2KSA9PSAwKSB7CisJCW91dGIoaGlnaCwgaW8gKyBIUF9UWEgpOworCQlvdXRiKG1pZCwgaW8gKyBIUF9UWE0pOworCQlvdXRiKGxvdywgaW8gKyBIUF9UWEwpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzbmRfcHJpbnRkKEtFUk5fRVJSIExPR05BTUUgIjogU2VuZCBob3N0IHdvcmQgdGltZW91dFxuIik7CisKKwlyZXR1cm4gLUVJTzsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfc2VuZF93b3JkKTsKKworaW50IHNuZF9tc25kX3VwbG9hZF9ob3N0KHN0cnVjdCBzbmRfbXNuZCAqZGV2LCBjb25zdCB1OCAqYmluLCBpbnQgbGVuKQoreworCWludCBpOworCisJaWYgKGxlbiAlIDMgIT0gMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSIExPR05BTUUKKwkJCSAgICI6IFVwbG9hZCBob3N0IGRhdGEgbm90IG11bHRpcGxlIG9mIDMhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSAzKQorCQlpZiAoc25kX21zbmRfc2VuZF93b3JkKGRldiwgYmluW2ldLCBiaW5baSArIDFdLCBiaW5baSArIDJdKSkKKwkJCXJldHVybiAtRUlPOworCisJaW5iKGRldi0+aW8gKyBIUF9SWEwpOworCWluYihkZXYtPmlvICsgSFBfQ1ZSKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF91cGxvYWRfaG9zdCk7CisKK2ludCBzbmRfbXNuZF9lbmFibGVfaXJxKHN0cnVjdCBzbmRfbXNuZCAqZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZGV2LT5pcnFfcmVmKyspCisJCXJldHVybiAwOworCisJc25kX3ByaW50ZGQoTE9HTkFNRSAiOiBFbmFibGluZyBJUlFcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bG9jaywgZmxhZ3MpOworCWlmIChzbmRfbXNuZF93YWl0X1RYREUoZGV2KSA9PSAwKSB7CisJCW91dGIoaW5iKGRldi0+aW8gKyBIUF9JQ1IpIHwgSFBJQ1JfVFJFUSwgZGV2LT5pbyArIEhQX0lDUik7CisJCWlmIChkZXYtPnR5cGUgPT0gbXNuZENsYXNzaWMpCisJCQlvdXRiKGRldi0+aXJxaWQsIGRldi0+aW8gKyBIUF9JUlFNKTsKKworCQlvdXRiKGluYihkZXYtPmlvICsgSFBfSUNSKSAmIH5IUElDUl9UUkVRLCBkZXYtPmlvICsgSFBfSUNSKTsKKwkJb3V0YihpbmIoZGV2LT5pbyArIEhQX0lDUikgfCBIUElDUl9SUkVRLCBkZXYtPmlvICsgSFBfSUNSKTsKKwkJZW5hYmxlX2lycShkZXYtPmlycSk7CisJCXNuZF9tc25kX2luaXRfcXVldWUoZGV2LT5EU1BRLCBkZXYtPmRzcHFfZGF0YV9idWZmLAorCQkJCSAgICBkZXYtPmRzcHFfYnVmZl9zaXplKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKworCXNuZF9wcmludGQoS0VSTl9FUlIgTE9HTkFNRSAiOiBFbmFibGUgSVJRIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gLUVJTzsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfZW5hYmxlX2lycSk7CisKK2ludCBzbmRfbXNuZF9kaXNhYmxlX2lycShzdHJ1Y3Qgc25kX21zbmQgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKC0tZGV2LT5pcnFfcmVmID4gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZGV2LT5pcnFfcmVmIDwgMCkKKwkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBJUlEgcmVmIGNvdW50IGlzICVkXG4iLAorCQkJICAgZGV2LT5pcnFfcmVmKTsKKworCXNuZF9wcmludGRkKExPR05BTUUgIjogRGlzYWJsaW5nIElSUVxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5sb2NrLCBmbGFncyk7CisJaWYgKHNuZF9tc25kX3dhaXRfVFhERShkZXYpID09IDApIHsKKwkJb3V0YihpbmIoZGV2LT5pbyArIEhQX0lDUikgJiB+SFBJQ1JfUlJFUSwgZGV2LT5pbyArIEhQX0lDUik7CisJCWlmIChkZXYtPnR5cGUgPT0gbXNuZENsYXNzaWMpCisJCQlvdXRiKEhQSVJRX05PTkUsIGRldi0+aW8gKyBIUF9JUlFNKTsKKwkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJc25kX3ByaW50ZChLRVJOX0VSUiBMT0dOQU1FICI6IERpc2FibGUgSVJRIGZhaWxlZFxuIik7CisKKwlyZXR1cm4gLUVJTzsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfZGlzYWJsZV9pcnEpOworCitzdGF0aWMgaW5saW5lIGxvbmcgZ2V0X3BsYXlfZGVsYXlfamlmZmllcyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGxvbmcgc2l6ZSkKK3sKKwlsb25nIHRtcCA9IChzaXplICogSFogKiBjaGlwLT5wbGF5X3NhbXBsZV9zaXplKSAvIDg7CisJcmV0dXJuIHRtcCAvIChjaGlwLT5wbGF5X3NhbXBsZV9yYXRlICogY2hpcC0+cGxheV9jaGFubmVscyk7Cit9CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kX2RzcF93cml0ZV9mbHVzaChzdHJ1Y3Qgc25kX21zbmQgKmNoaXApCit7CisJaWYgKCEoY2hpcC0+bW9kZSAmIEZNT0RFX1dSSVRFKSB8fCAhdGVzdF9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpKQorCQlyZXR1cm47CisJc2V0X2JpdChGX1dSSVRFRkxVU0gsICZjaGlwLT5mbGFncyk7CisvKglpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoCisJCSZjaGlwLT53cml0ZWZsdXNoLAorCQlnZXRfcGxheV9kZWxheV9qaWZmaWVzKCZjaGlwLCBjaGlwLT5EQVBGLmxlbikpOyovCisJY2xlYXJfYml0KEZfV1JJVEVGTFVTSCwgJmNoaXAtPmZsYWdzKTsKKwlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoCisJCQlnZXRfcGxheV9kZWxheV9qaWZmaWVzKGNoaXAsIGNoaXAtPnBsYXlfcGVyaW9kX2J5dGVzKSk7CisJY2xlYXJfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKTsKK30KKwordm9pZCBzbmRfbXNuZF9kc3BfaGFsdChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWlmICgoZmlsZSA/IGZpbGUtPmZfbW9kZSA6IGNoaXAtPm1vZGUpICYgRk1PREVfUkVBRCkgeworCQljbGVhcl9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpOworCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9SRUNPUkRfU1RPUCk7CisJCXNuZF9tc25kX2Rpc2FibGVfaXJxKGNoaXApOworCQlpZiAoZmlsZSkgeworCQkJc25kX3ByaW50ZChLRVJOX0lORk8gTE9HTkFNRQorCQkJCSAgICI6IFN0b3BwaW5nIHJlYWQgZm9yICVwXG4iLCBmaWxlKTsKKwkJCWNoaXAtPm1vZGUgJj0gfkZNT0RFX1JFQUQ7CisJCX0KKwkJY2xlYXJfYml0KEZfQVVESU9fUkVBRF9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwl9CisJaWYgKChmaWxlID8gZmlsZS0+Zl9tb2RlIDogY2hpcC0+bW9kZSkgJiBGTU9ERV9XUklURSkgeworCQlpZiAodGVzdF9iaXQoRl9XUklUSU5HLCAmY2hpcC0+ZmxhZ3MpKSB7CisJCQlzbmRfbXNuZF9kc3Bfd3JpdGVfZmx1c2goY2hpcCk7CisJCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9QTEFZX1NUT1ApOworCQl9CisJCXNuZF9tc25kX2Rpc2FibGVfaXJxKGNoaXApOworCQlpZiAoZmlsZSkgeworCQkJc25kX3ByaW50ZChLRVJOX0lORk8KKwkJCQkgICBMT0dOQU1FICI6IFN0b3BwaW5nIHdyaXRlIGZvciAlcFxuIiwgZmlsZSk7CisJCQljaGlwLT5tb2RlICY9IH5GTU9ERV9XUklURTsKKwkJfQorCQljbGVhcl9iaXQoRl9BVURJT19XUklURV9JTlVTRSwgJmNoaXAtPmZsYWdzKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kX2RzcF9oYWx0KTsKKworCitpbnQgc25kX21zbmRfREFSUShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCBiYW5rKQoreworCWludCAvKnNpemUsIG4sKi8gdGltZW91dCA9IDM7CisJdTE2IHdUbXA7CisJLyogdm9pZCAqREFRRDsgKi8KKworCS8qIEluY3JlbWVudCB0aGUgdGFpbCBhbmQgY2hlY2sgZm9yIHF1ZXVlIHdyYXAgKi8KKwl3VG1wID0gcmVhZHcoY2hpcC0+REFSUSArIEpRU193VGFpbCkgKyBQQ1RPRFNQX09GRlNFVChEQVFEU19fc2l6ZSk7CisJaWYgKHdUbXAgPiByZWFkdyhjaGlwLT5EQVJRICsgSlFTX3dTaXplKSkKKwkJd1RtcCA9IDA7CisJd2hpbGUgKHdUbXAgPT0gcmVhZHcoY2hpcC0+REFSUSArIEpRU193SGVhZCkgJiYgdGltZW91dC0tKQorCQl1ZGVsYXkoMSk7CisKKwlpZiAoY2hpcC0+Y2FwdHVyZVBlcmlvZHMgPT0gMikgeworCQl2b2lkICpwREFRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUlFfREFUQV9CVUZGICsKKwkJCSAgICAgYmFuayAqIERBUURTX19zaXplICsgREFRRFNfd1N0YXJ0OworCQl1bnNpZ25lZCBzaG9ydCBvZmZzZXQgPSAweDMwMDAgKyBjaGlwLT5jYXB0dXJlUGVyaW9kQnl0ZXM7CisKKwkJaWYgKHJlYWR3KHBEQVEpICE9IFBDVE9EU1BfQkFTRUQoMHgzMDAwKSkKKwkJCW9mZnNldCA9IDB4MzAwMDsKKwkJd3JpdGV3KFBDVE9EU1BfQkFTRUQob2Zmc2V0KSwgcERBUSk7CisJfQorCisJd3JpdGV3KHdUbXAsIGNoaXAtPkRBUlEgKyBKUVNfd1RhaWwpOworCisjaWYgMAorCS8qIEdldCBvdXIgZGlnaXRhbCBhdWRpbyBxdWV1ZSBzdHJ1Y3QgKi8KKwlEQVFEID0gYmFuayAqIERBUURTX19zaXplICsgY2hpcC0+bWFwcGVkYmFzZSArIERBUlFfREFUQV9CVUZGOworCisJLyogR2V0IGxlbmd0aCBvZiBkYXRhICovCisJc2l6ZSA9IHJlYWR3KERBUUQgKyBEQVFEU193U2l6ZSk7CisKKwkvKiBSZWFkIGRhdGEgZnJvbSB0aGUgaGVhZCAodW5wcm90ZWN0ZWQgYmFuayAxIGFjY2VzcyBva2F5CisJICAgc2luY2UgdGhpcyBpcyBvbmx5IGNhbGxlZCBpbnNpZGUgYW4gaW50ZXJydXB0KSAqLworCW91dGIoSFBCTEtTRUxfMSwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwluID0gbXNuZF9maWZvX3dyaXRlKCZjaGlwLT5EQVJGLAorCQkJICAgIChjaGFyICopKGNoaXAtPmJhc2UgKyBiYW5rICogREFSX0JVRkZfU0laRSksCisJCQkgICAgc2l6ZSwgMCk7CisJaWYgKG4gPD0gMCkgeworCQlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJCXJldHVybiBuOworCX0KKwlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisjZW5kaWYKKworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9EQVJRKTsKKworaW50IHNuZF9tc25kX0RBUFEoc3RydWN0IHNuZF9tc25kICpjaGlwLCBpbnQgc3RhcnQpCit7CisJdTE2CURBUFFfdGFpbDsKKwlpbnQJcHJvdGVjdCA9IHN0YXJ0LCBuYmFua3MgPSAwOworCXZvaWQJKkRBUUQ7CisJc3RhdGljIGludCBwbGF5X2JhbmtzX3N1Ym1pdHRlZDsKKwkvKiB1bnNpZ25lZCBsb25nIGZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7IG5vdCBuZWNlc3NhcnkgKi8KKworCURBUFFfdGFpbCA9IHJlYWR3KGNoaXAtPkRBUFEgKyBKUVNfd1RhaWwpOworCXdoaWxlIChEQVBRX3RhaWwgIT0gcmVhZHcoY2hpcC0+REFQUSArIEpRU193SGVhZCkgfHwgc3RhcnQpIHsKKwkJaW50IGJhbmtfbnVtID0gREFQUV90YWlsIC8gUENUT0RTUF9PRkZTRVQoREFRRFNfX3NpemUpOworCisJCWlmIChzdGFydCkgeworCQkJc3RhcnQgPSAwOworCQkJcGxheV9iYW5rc19zdWJtaXR0ZWQgPSAwOworCQl9CisKKwkJLyogR2V0IG91ciBkaWdpdGFsIGF1ZGlvIHF1ZXVlIHN0cnVjdCAqLworCQlEQVFEID0gYmFua19udW0gKiBEQVFEU19fc2l6ZSArIGNoaXAtPm1hcHBlZGJhc2UgKworCQkJREFQUV9EQVRBX0JVRkY7CisKKwkJLyogV3JpdGUgc2l6ZSBvZiB0aGlzIGJhbmsgKi8KKwkJd3JpdGV3KGNoaXAtPnBsYXlfcGVyaW9kX2J5dGVzLCBEQVFEICsgREFRRFNfd1NpemUpOworCQlpZiAocGxheV9iYW5rc19zdWJtaXR0ZWQgPCAzKQorCQkJKytwbGF5X2JhbmtzX3N1Ym1pdHRlZDsKKwkJZWxzZSBpZiAoY2hpcC0+cGxheVBlcmlvZHMgPT0gMikgeworCQkJdW5zaWduZWQgc2hvcnQgb2Zmc2V0ID0gY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXM7CisKKwkJCWlmIChyZWFkdyhEQVFEICsgREFRRFNfd1N0YXJ0KSAhPSBQQ1RPRFNQX0JBU0VEKDB4MCkpCisJCQkJb2Zmc2V0ID0gMDsKKworCQkJd3JpdGV3KFBDVE9EU1BfQkFTRUQob2Zmc2V0KSwgREFRRCArIERBUURTX3dTdGFydCk7CisJCX0KKwkJKytuYmFua3M7CisKKwkJLyogVGhlbiBhZHZhbmNlIHRoZSB0YWlsICovCisJCS8qCisJCWlmIChwcm90ZWN0KQorCQkJc25kX3ByaW50ZChLRVJOX0lORk8gIkIgJVggJWxYXG4iLAorCQkJCSAgIGJhbmtfbnVtLCB4dGltZS50dl91c2VjKTsKKwkJKi8KKworCQlEQVBRX3RhaWwgPSAoKytiYW5rX251bSAlIDMpICogUENUT0RTUF9PRkZTRVQoREFRRFNfX3NpemUpOworCQl3cml0ZXcoREFQUV90YWlsLCBjaGlwLT5EQVBRICsgSlFTX3dUYWlsKTsKKwkJLyogVGVsbCB0aGUgRFNQIHRvIHBsYXkgdGhlIGJhbmsgKi8KKwkJc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUExBWV9TVEFSVCk7CisJCWlmIChwcm90ZWN0KQorCQkJaWYgKDIgPT0gYmFua19udW0pCisJCQkJYnJlYWs7CisJfQorCS8qCisJaWYgKHByb3RlY3QpCisJCXNuZF9wcmludGQoS0VSTl9JTkZPICIlbFhcbiIsIHh0aW1lLnR2X3VzZWMpOworCSovCisJLyogc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOyBub3QgbmVjZXNzYXJ5ICovCisJcmV0dXJuIG5iYW5rczsKK30KK0VYUE9SVF9TWU1CT0woc25kX21zbmRfREFQUSk7CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kX3BsYXlfcmVzZXRfcXVldWUoc3RydWN0IHNuZF9tc25kICpjaGlwLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBwY21fcGVyaW9kcywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcGNtX2NvdW50KQoreworCWludAluOworCXZvaWQJKnBEQVEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFQUV9EQVRBX0JVRkY7CisKKwljaGlwLT5sYXN0X3BsYXliYW5rID0gLTE7CisJY2hpcC0+cGxheUxpbWl0ID0gcGNtX2NvdW50ICogKHBjbV9wZXJpb2RzIC0gMSk7CisJY2hpcC0+cGxheVBlcmlvZHMgPSBwY21fcGVyaW9kczsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoMCAqIERBUURTX19zaXplKSwgY2hpcC0+REFQUSArIEpRU193SGVhZCk7CisJd3JpdGV3KFBDVE9EU1BfT0ZGU0VUKDAgKiBEQVFEU19fc2l6ZSksIGNoaXAtPkRBUFEgKyBKUVNfd1RhaWwpOworCisJY2hpcC0+cGxheV9wZXJpb2RfYnl0ZXMgPSBwY21fY291bnQ7CisKKwlmb3IgKG4gPSAwOyBuIDwgcGNtX3BlcmlvZHM7ICsrbiwgcERBUSArPSBEQVFEU19fc2l6ZSkgeworCQl3cml0ZXcoUENUT0RTUF9CQVNFRCgodTMyKShwY21fY291bnQgKiBuKSksCisJCQlwREFRICsgREFRRFNfd1N0YXJ0KTsKKwkJd3JpdGV3KDAsIHBEQVEgKyBEQVFEU193U2l6ZSk7CisJCXdyaXRldygxLCBwREFRICsgREFRRFNfd0Zvcm1hdCk7CisJCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9zaXplLCBwREFRICsgREFRRFNfd1NhbXBsZVNpemUpOworCQl3cml0ZXcoY2hpcC0+cGxheV9jaGFubmVscywgcERBUSArIERBUURTX3dDaGFubmVscyk7CisJCXdyaXRldyhjaGlwLT5wbGF5X3NhbXBsZV9yYXRlLCBwREFRICsgREFRRFNfd1NhbXBsZVJhdGUpOworCQl3cml0ZXcoSElNVF9QTEFZX0RPTkUgKiAweDEwMCArIG4sIHBEQVEgKyBEQVFEU193SW50TXNnKTsKKwkJd3JpdGV3KG4sIHBEQVEgKyBEQVFEU193RmxhZ3MpOworCX0KK30KKworc3RhdGljIHZvaWQgc25kX21zbmRfY2FwdHVyZV9yZXNldF9xdWV1ZShzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsCisJCQkJCSB1bnNpZ25lZCBpbnQgcGNtX3BlcmlvZHMsCisJCQkJCSB1bnNpZ25lZCBpbnQgcGNtX2NvdW50KQoreworCWludAkJbjsKKwl2b2lkCQkqcERBUTsKKwkvKiB1bnNpZ25lZCBsb25nCWZsYWdzOyAqLworCisJLyogc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5EQVJRLCBEQVJRX0RBVEFfQlVGRiwgREFSUV9CVUZGX1NJWkUpOyAqLworCisJY2hpcC0+bGFzdF9yZWNiYW5rID0gMjsKKwljaGlwLT5jYXB0dXJlTGltaXQgPSBwY21fY291bnQgKiAocGNtX3BlcmlvZHMgLSAxKTsKKwljaGlwLT5jYXB0dXJlUGVyaW9kcyA9IHBjbV9wZXJpb2RzOworCXdyaXRldyhQQ1RPRFNQX09GRlNFVCgwICogREFRRFNfX3NpemUpLCBjaGlwLT5EQVJRICsgSlFTX3dIZWFkKTsKKwl3cml0ZXcoUENUT0RTUF9PRkZTRVQoY2hpcC0+bGFzdF9yZWNiYW5rICogREFRRFNfX3NpemUpLAorCQljaGlwLT5EQVJRICsgSlFTX3dUYWlsKTsKKworI2lmIDAgLyogQ3JpdGljYWwgc2VjdGlvbjogYmFuayAxIGFjY2Vzcy4gdGhpcyBpcyBob3cgdGhlIE9TUyBkcml2ZXIgZG9lcyBpdDoqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CisJb3V0YihIUEJMS1NFTF8xLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCW1lbXNldF9pbyhjaGlwLT5tYXBwZWRiYXNlLCAwLCBEQVJfQlVGRl9TSVpFICogMyk7CisJb3V0YihIUEJMS1NFTF8wLCBjaGlwLT5pbyArIEhQX0JMS1MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKyNlbmRpZgorCisJY2hpcC0+Y2FwdHVyZVBlcmlvZEJ5dGVzID0gcGNtX2NvdW50OworCXNuZF9wcmludGRkKCJzbmRfbXNuZF9jYXB0dXJlX3Jlc2V0X3F1ZXVlKCkgJWlcbiIsIHBjbV9jb3VudCk7CisKKwlwREFRID0gY2hpcC0+bWFwcGVkYmFzZSArIERBUlFfREFUQV9CVUZGOworCisJZm9yIChuID0gMDsgbiA8IHBjbV9wZXJpb2RzOyArK24sIHBEQVEgKz0gREFRRFNfX3NpemUpIHsKKwkJdTMyIHRtcCA9IHBjbV9jb3VudCAqIG47CisKKwkJd3JpdGV3KFBDVE9EU1BfQkFTRUQodG1wICsgMHgzMDAwKSwgcERBUSArIERBUURTX3dTdGFydCk7CisJCXdyaXRldyhwY21fY291bnQsIHBEQVEgKyBEQVFEU193U2l6ZSk7CisJCXdyaXRldygxLCBwREFRICsgREFRRFNfd0Zvcm1hdCk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX3NhbXBsZV9zaXplLCBwREFRICsgREFRRFNfd1NhbXBsZVNpemUpOworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9jaGFubmVscywgcERBUSArIERBUURTX3dDaGFubmVscyk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX3NhbXBsZV9yYXRlLCBwREFRICsgREFRRFNfd1NhbXBsZVJhdGUpOworCQl3cml0ZXcoSElNVF9SRUNPUkRfRE9ORSAqIDB4MTAwICsgbiwgcERBUSArIERBUURTX3dJbnRNc2cpOworCQl3cml0ZXcobiwgcERBUSArIERBUURTX3dGbGFncyk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX21zbmRfcGxheWJhY2sgPSB7CisJLmluZm8gPQkJCVNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElELAorCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfVTggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMgPQkJU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkucmF0ZV9taW4gPQkJODAwMCwKKwkucmF0ZV9tYXggPQkJNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9CQkxLAorCS5jaGFubmVsc19tYXggPQkJMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9CTB4MzAwMCwKKwkucGVyaW9kX2J5dGVzX21pbiA9CTB4NDAsCisJLnBlcmlvZF9ieXRlc19tYXggPQkweDE4MDAsCisJLnBlcmlvZHNfbWluID0JCTIsCisJLnBlcmlvZHNfbWF4ID0JCTMsCisJLmZpZm9fc2l6ZSA9CQkwLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHNuZF9tc25kX2NhcHR1cmUgPSB7CisJLmluZm8gPQkJCVNORFJWX1BDTV9JTkZPX01NQVAgfAorCQkJCVNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElELAorCS5mb3JtYXRzID0JCVNORFJWX1BDTV9GTVRCSVRfVTggfCBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkucmF0ZXMgPQkJU05EUlZfUENNX1JBVEVfODAwMF80ODAwMCwKKwkucmF0ZV9taW4gPQkJODAwMCwKKwkucmF0ZV9tYXggPQkJNDgwMDAsCisJLmNoYW5uZWxzX21pbiA9CQkxLAorCS5jaGFubmVsc19tYXggPQkJMiwKKwkuYnVmZmVyX2J5dGVzX21heCA9CTB4MzAwMCwKKwkucGVyaW9kX2J5dGVzX21pbiA9CTB4NDAsCisJLnBlcmlvZF9ieXRlc19tYXggPQkweDE4MDAsCisJLnBlcmlvZHNfbWluID0JCTIsCisJLnBlcmlvZHNfbWF4ID0JCTMsCisJLmZpZm9fc2l6ZSA9CQkwLAorfTsKKworCitzdGF0aWMgaW50IHNuZF9tc25kX3BsYXliYWNrX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlzZXRfYml0KEZfQVVESU9fV1JJVEVfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJY2xlYXJfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKTsKKwlzbmRfbXNuZF9lbmFibGVfaXJxKGNoaXApOworCisJcnVudGltZS0+ZG1hX2FyZWEgPSBjaGlwLT5tYXBwZWRiYXNlOworCXJ1bnRpbWUtPmRtYV9ieXRlcyA9IDB4MzAwMDsKKworCWNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlydW50aW1lLT5odyA9IHNuZF9tc25kX3BsYXliYWNrOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKworCXNuZF9tc25kX2Rpc2FibGVfaXJxKGNoaXApOworCWNsZWFyX2JpdChGX0FVRElPX1dSSVRFX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc25kX21zbmRfcGxheWJhY2tfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlpbnQJaTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdm9pZAkqcERBUSA9CWNoaXAtPm1hcHBlZGJhc2UgKyBEQVBRX0RBVEFfQlVGRjsKKworCWNoaXAtPnBsYXlfc2FtcGxlX3NpemUgPSBzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpOworCWNoaXAtPnBsYXlfY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKTsKKwljaGlwLT5wbGF5X3NhbXBsZV9yYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyArK2ksIHBEQVEgKz0gREFRRFNfX3NpemUpIHsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3NpemUsIHBEQVEgKyBEQVFEU193U2FtcGxlU2l6ZSk7CisJCXdyaXRldyhjaGlwLT5wbGF5X2NoYW5uZWxzLCBwREFRICsgREFRRFNfd0NoYW5uZWxzKTsKKwkJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUsIHBEQVEgKyBEQVFEU193U2FtcGxlUmF0ZSk7CisJfQorCS8qIGRvbnQgZG8gdGhpcyBoZXJlOgorCSAqIHNuZF9tc25kX2NhbGlicmF0ZV9hZGMoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSk7CisJICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9wbGF5YmFja19wcmVwYXJlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX3NpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKKwl1bnNpZ25lZCBpbnQgcGNtX2NvdW50ID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9wZXJpb2RzID0gcGNtX3NpemUgLyBwY21fY291bnQ7CisKKwlzbmRfbXNuZF9wbGF5X3Jlc2V0X3F1ZXVlKGNoaXAsIHBjbV9wZXJpb2RzLCBwY21fY291bnQpOworCWNoaXAtPnBsYXlETUFQb3MgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgICBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQJcmVzdWx0ID0gMDsKKworCWlmIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpIHsKKwkJc25kX3ByaW50ZGQoInNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoU1RBUlQpXG4iKTsKKwkJY2hpcC0+YmFua3NQbGF5ZWQgPSAwOworCQlzZXRfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKTsKKwkJc25kX21zbmRfREFQUShjaGlwLCAxKTsKKwl9IGVsc2UgaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QKSB7CisJCXNuZF9wcmludGRkKCJzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyKFNUb3ApXG4iKTsKKwkJLyogaW50ZXJydXB0IGRpYWdub3N0aWMsIGNvbW1lbnQgdGhpcyBvdXQgbGF0ZXIgKi8KKwkJY2xlYXJfYml0KEZfV1JJVElORywgJmNoaXAtPmZsYWdzKTsKKwkJc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUExBWV9TVE9QKTsKKwl9IGVsc2UgeworCQlzbmRfcHJpbnRkKEtFUk5fRVJSICJzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyKD8/Pz8/KVxuIik7CisJCXJlc3VsdCA9IC1FSU5WQUw7CisJfQorCisJc25kX3ByaW50ZGQoInNuZF9tc25kX3BsYXliYWNrX3RyaWdnZXIoKSBFTkRFXG4iKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgc25kX3BjbV91ZnJhbWVzX3QKK3NuZF9tc25kX3BsYXliYWNrX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJcmV0dXJuIGJ5dGVzX3RvX2ZyYW1lcyhzdWJzdHJlYW0tPnJ1bnRpbWUsIGNoaXAtPnBsYXlETUFQb3MpOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX21zbmRfcGxheWJhY2tfb3BzID0geworCS5vcGVuID0JCXNuZF9tc25kX3BsYXliYWNrX29wZW4sCisJLmNsb3NlID0Jc25kX21zbmRfcGxheWJhY2tfY2xvc2UsCisJLmlvY3RsID0Jc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9CXNuZF9tc25kX3BsYXliYWNrX2h3X3BhcmFtcywKKwkucHJlcGFyZSA9CXNuZF9tc25kX3BsYXliYWNrX3ByZXBhcmUsCisJLnRyaWdnZXIgPQlzbmRfbXNuZF9wbGF5YmFja190cmlnZ2VyLAorCS5wb2ludGVyID0Jc25kX21zbmRfcGxheWJhY2tfcG9pbnRlciwKK307CisKK3N0YXRpYyBpbnQgc25kX21zbmRfY2FwdHVyZV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJc2V0X2JpdChGX0FVRElPX1JFQURfSU5VU0UsICZjaGlwLT5mbGFncyk7CisJc25kX21zbmRfZW5hYmxlX2lycShjaGlwKTsKKwlydW50aW1lLT5kbWFfYXJlYSA9IGNoaXAtPm1hcHBlZGJhc2UgKyAweDMwMDA7CisJcnVudGltZS0+ZG1hX2J5dGVzID0gMHgzMDAwOworCW1lbXNldChydW50aW1lLT5kbWFfYXJlYSwgMCwgcnVudGltZS0+ZG1hX2J5dGVzKTsKKwljaGlwLT5jYXB0dXJlX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlydW50aW1lLT5odyA9IHNuZF9tc25kX2NhcHR1cmU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlzbmRfbXNuZF9kaXNhYmxlX2lycShjaGlwKTsKKwljbGVhcl9iaXQoRl9BVURJT19SRUFEX0lOVVNFLCAmY2hpcC0+ZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2NhcHR1cmVfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9zaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJdW5zaWduZWQgaW50IHBjbV9jb3VudCA9IHNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhzdWJzdHJlYW0pOworCXVuc2lnbmVkIGludCBwY21fcGVyaW9kcyA9IHBjbV9zaXplIC8gcGNtX2NvdW50OworCisJc25kX21zbmRfY2FwdHVyZV9yZXNldF9xdWV1ZShjaGlwLCBwY21fcGVyaW9kcywgcGNtX2NvdW50KTsKKwljaGlwLT5jYXB0dXJlRE1BUG9zID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJICAgIGludCBjbWQpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJaWYgKGNtZCA9PSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVCkgeworCQljaGlwLT5sYXN0X3JlY2JhbmsgPSAtMTsKKwkJc2V0X2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJCWlmIChzbmRfbXNuZF9zZW5kX2RzcF9jbWQoY2hpcCwgSERFWF9SRUNPUkRfU1RBUlQpID09IDApCisJCQlyZXR1cm4gMDsKKworCQljbGVhcl9iaXQoRl9SRUFESU5HLCAmY2hpcC0+ZmxhZ3MpOworCX0gZWxzZSBpZiAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUT1ApIHsKKwkJY2xlYXJfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKTsKKwkJc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIEhERVhfUkVDT1JEX1NUT1ApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190CitzbmRfbXNuZF9jYXB0dXJlX3BvaW50ZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisKKwlyZXR1cm4gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIGNoaXAtPmNhcHR1cmVETUFQb3MpOworfQorCisKK3N0YXRpYyBpbnQgc25kX21zbmRfY2FwdHVyZV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCWludAkJaTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJdm9pZAkJKnBEQVEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9EQVRBX0JVRkY7CisKKwljaGlwLT5jYXB0dXJlX3NhbXBsZV9zaXplID0gc25kX3BjbV9mb3JtYXRfd2lkdGgocGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKKwljaGlwLT5jYXB0dXJlX2NoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CisJY2hpcC0+Y2FwdHVyZV9zYW1wbGVfcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgKytpLCBwREFRICs9IERBUURTX19zaXplKSB7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX3NhbXBsZV9zaXplLCBwREFRICsgREFRRFNfd1NhbXBsZVNpemUpOworCQl3cml0ZXcoY2hpcC0+Y2FwdHVyZV9jaGFubmVscywgcERBUSArIERBUURTX3dDaGFubmVscyk7CisJCXdyaXRldyhjaGlwLT5jYXB0dXJlX3NhbXBsZV9yYXRlLCBwREFRICsgREFRRFNfd1NhbXBsZVJhdGUpOworCX0KKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHNuZF9tc25kX2NhcHR1cmVfb3BzID0geworCS5vcGVuID0JCXNuZF9tc25kX2NhcHR1cmVfb3BlbiwKKwkuY2xvc2UgPQlzbmRfbXNuZF9jYXB0dXJlX2Nsb3NlLAorCS5pb2N0bCA9CXNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMgPQlzbmRfbXNuZF9jYXB0dXJlX2h3X3BhcmFtcywKKwkucHJlcGFyZSA9CXNuZF9tc25kX2NhcHR1cmVfcHJlcGFyZSwKKwkudHJpZ2dlciA9CXNuZF9tc25kX2NhcHR1cmVfdHJpZ2dlciwKKwkucG9pbnRlciA9CXNuZF9tc25kX2NhcHR1cmVfcG9pbnRlciwKK307CisKKworaW50IHNuZF9tc25kX3BjbShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UsCisJCQlzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfcGNtCSpwY207CisJaW50IGVycjsKKworCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsICJNU05EUElOTkFDTEUiLCBkZXZpY2UsIDEsIDEsICZwY20pOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnNuZF9tc25kX3BsYXliYWNrX29wcyk7CisJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX21zbmRfY2FwdHVyZV9vcHMpOworCisJcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOworCXN0cmNweShwY20tPm5hbWUsICJIdXJyaWNhbmUiKTsKKworCisJaWYgKHJwY20pCisJCSpycGNtID0gcGNtOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9wY20pOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbW1vbiByb3V0aW5lcyBmb3IgVHVydGxlIEJlYWNoIE11bHRpc291bmQgZHJpdmVycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kLmggYi9zb3VuZC9pc2EvbXNuZC9tc25kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3M2UyNAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmQuaApAQCAtMCwwICsxLDMwOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG1zbmQuaAorICoKKyAqIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFNvdW5kIENhcmQgRHJpdmVyIGZvciBMaW51eAorICoKKyAqIFNvbWUgcGFydHMgb2YgdGhpcyBoZWFkZXIgZmlsZSB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgVHVydGxlIEJlYWNoCisgKiBNdWx0aVNvdW5kIERyaXZlciBEZXZlbG9wbWVudCBLaXQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgVHVydGxlIEJlYWNoIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVNORF9ICisjZGVmaW5lIF9fTVNORF9ICisKKyNkZWZpbmUgREVGU0FNUExFUkFURQkJNDQxMDAKKyNkZWZpbmUgREVGU0FNUExFU0laRQkJU05EUlZfUENNX0ZPUk1BVF9TMTYKKyNkZWZpbmUgREVGQ0hBTk5FTFMJCTEKKworI2RlZmluZSBTUkFNX0JBTktfU0laRQkJMHg4MDAwCisjZGVmaW5lIFNSQU1fQ05UTF9TVEFSVAkJMHg3RjAwCisjZGVmaW5lIFNNQV9TVFJVQ1RfU1RBUlQJMHg3RjQwCisKKyNkZWZpbmUgRFNQX0JBU0VfQUREUgkJMHg0MDAwCisjZGVmaW5lIERTUF9CQU5LX0JBU0UJCTB4NDAwMAorCisjZGVmaW5lIEFHTkQJCQkweDAxCisjZGVmaW5lIFNJR05BTAkJCTB4MDIKKworI2RlZmluZSBFWFRfRFNQX0JJVF9EQ0FMCTB4MDAwMQorI2RlZmluZSBFWFRfRFNQX0JJVF9NSURJX0NPTgkweDAwMDIKKworI2RlZmluZSBCVUZGU0laRQkJMHg4MDAwCisjZGVmaW5lIEhPU1RRX1NJWkUJCTB4NDAKKworI2RlZmluZSBEQVBfQlVGRl9TSVpFCQkweDI0MDAKKworI2RlZmluZSBEQVBRX1NUUlVDVF9TSVpFCTB4MTAKKyNkZWZpbmUgREFSUV9TVFJVQ1RfU0laRQkweDEwCisjZGVmaW5lIERBUFFfQlVGRl9TSVpFCQkoMyAqIDB4MTApCisjZGVmaW5lIERBUlFfQlVGRl9TSVpFCQkoMyAqIDB4MTApCisjZGVmaW5lIE1PRFFfQlVGRl9TSVpFCQkweDQwMAorCisjZGVmaW5lIERBUFFfREFUQV9CVUZGCQkweDZDMDAKKyNkZWZpbmUgREFSUV9EQVRBX0JVRkYJCTB4NkMzMAorI2RlZmluZSBNT0RRX0RBVEFfQlVGRgkJMHg2QzYwCisjZGVmaW5lIE1JRFFfREFUQV9CVUZGCQkweDcwNjAKKworI2RlZmluZSBEQVBRX09GRlNFVAkJU1JBTV9DTlRMX1NUQVJUCisjZGVmaW5lIERBUlFfT0ZGU0VUCQkoU1JBTV9DTlRMX1NUQVJUICsgMHgwOCkKKyNkZWZpbmUgTU9EUV9PRkZTRVQJCShTUkFNX0NOVExfU1RBUlQgKyAweDEwKQorI2RlZmluZSBNSURRX09GRlNFVAkJKFNSQU1fQ05UTF9TVEFSVCArIDB4MTgpCisjZGVmaW5lIERTUFFfT0ZGU0VUCQkoU1JBTV9DTlRMX1NUQVJUICsgMHgyMCkKKworI2RlZmluZQlIUF9JQ1IJCQkweDAwCisjZGVmaW5lCUhQX0NWUgkJCTB4MDEKKyNkZWZpbmUJSFBfSVNSCQkJMHgwMgorI2RlZmluZQlIUF9JVlIJCQkweDAzCisjZGVmaW5lIEhQX05VCQkJMHgwNAorI2RlZmluZSBIUF9JTkZPCQkJMHgwNAorI2RlZmluZQlIUF9UWEgJCQkweDA1CisjZGVmaW5lCUhQX1JYSAkJCTB4MDUKKyNkZWZpbmUJSFBfVFhNCQkJMHgwNgorI2RlZmluZQlIUF9SWE0JCQkweDA2CisjZGVmaW5lCUhQX1RYTAkJCTB4MDcKKyNkZWZpbmUJSFBfUlhMCQkJMHgwNworCisjZGVmaW5lIEhQX0lDUl9ERUYJCTB4MDAKKyNkZWZpbmUgSFBfQ1ZSX0RFRgkJMHgxMgorI2RlZmluZSBIUF9JU1JfREVGCQkweDA2CisjZGVmaW5lIEhQX0lWUl9ERUYJCTB4MGYKKyNkZWZpbmUgSFBfTlVfREVGCQkweDAwCisKKyNkZWZpbmUJSFBfSVJRTQkJCTB4MDkKKworI2RlZmluZQlIUFJfQkxSQwkJMHgwOAorI2RlZmluZQlIUFJfU1BSMQkJMHgwOQorI2RlZmluZQlIUFJfU1BSMgkJMHgwQQorI2RlZmluZQlIUFJfVENMMAkJMHgwQgorI2RlZmluZQlIUFJfVENMMQkJMHgwQworI2RlZmluZQlIUFJfVENMMgkJMHgwRAorI2RlZmluZQlIUFJfVENMMwkJMHgwRQorI2RlZmluZQlIUFJfVENMNAkJMHgwRgorCisjZGVmaW5lCUhQSUNSX0lOSVQJCTB4ODAKKyNkZWZpbmUgSFBJQ1JfSE0xCQkweDQwCisjZGVmaW5lIEhQSUNSX0hNMAkJMHgyMAorI2RlZmluZSBIUElDUl9IRjEJCTB4MTAKKyNkZWZpbmUgSFBJQ1JfSEYwCQkweDA4CisjZGVmaW5lCUhQSUNSX1RSRVEJCTB4MDIKKyNkZWZpbmUJSFBJQ1JfUlJFUQkJMHgwMQorCisjZGVmaW5lIEhQQ1ZSX0hDCQkweDgwCisKKyNkZWZpbmUJSFBJU1JfSFJFUQkJMHg4MAorI2RlZmluZSBIUElTUl9ETUEJCTB4NDAKKyNkZWZpbmUgSFBJU1JfSEYzCQkweDEwCisjZGVmaW5lIEhQSVNSX0hGMgkJMHgwOAorI2RlZmluZQlIUElTUl9UUkRZCQkweDA0CisjZGVmaW5lCUhQSVNSX1RYREUJCTB4MDIKKyNkZWZpbmUJSFBJU1JfUlhERgkJMHgwMQorCisjZGVmaW5lCUhQSU9fMjkwCQkwCisjZGVmaW5lCUhQSU9fMjYwCQkxCisjZGVmaW5lCUhQSU9fMjUwCQkyCisjZGVmaW5lCUhQSU9fMjQwCQkzCisjZGVmaW5lCUhQSU9fMjMwCQk0CisjZGVmaW5lCUhQSU9fMjIwCQk1CisjZGVmaW5lCUhQSU9fMjEwCQk2CisjZGVmaW5lCUhQSU9fM0UwCQk3CisKKyNkZWZpbmUJSFBNRU1fTk9ORQkJMAorI2RlZmluZQlIUE1FTV9CMDAwCQkxCisjZGVmaW5lCUhQTUVNX0M4MDAJCTIKKyNkZWZpbmUJSFBNRU1fRDAwMAkJMworI2RlZmluZQlIUE1FTV9ENDAwCQk0CisjZGVmaW5lCUhQTUVNX0Q4MDAJCTUKKyNkZWZpbmUJSFBNRU1fRTAwMAkJNgorI2RlZmluZQlIUE1FTV9FODAwCQk3CisKKyNkZWZpbmUJSFBJUlFfTk9ORQkJMAorI2RlZmluZSBIUElSUV81CQkJMQorI2RlZmluZSBIUElSUV83CQkJMgorI2RlZmluZSBIUElSUV85CQkJMworI2RlZmluZSBIUElSUV8xMAkJNAorI2RlZmluZSBIUElSUV8xMQkJNQorI2RlZmluZSBIUElSUV8xMgkJNgorI2RlZmluZSBIUElSUV8xNQkJNworCisjZGVmaW5lCUhJTVRfUExBWV9ET05FCQkweDAwCisjZGVmaW5lCUhJTVRfUkVDT1JEX0RPTkUJMHgwMQorI2RlZmluZQlISU1UX01JRElfRU9TCQkweDAyCisjZGVmaW5lCUhJTVRfTUlESV9PVVQJCTB4MDMKKworI2RlZmluZQlISU1UX01JRElfSU5fVUNIQVIJMHgwRQorI2RlZmluZQlISU1UX0RTUAkJMHgwRgorCisjZGVmaW5lCUhERVhfQkFTRQkgICAgICAgCTB4OTIKKyNkZWZpbmUJSERFWF9QTEFZX1NUQVJUCQkoMCArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9QTEFZX1NUT1AJCSgxICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1BMQVlfUEFVU0UJCSgyICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1BMQVlfUkVTVU1FCSgzICsgSERFWF9CQVNFKQorI2RlZmluZQlIREVYX1JFQ09SRF9TVEFSVAkoNCArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9SRUNPUkRfU1RPUAkoNSArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9NSURJX0lOX1NUQVJUIAkoNiArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9NSURJX0lOX1NUT1AJKDcgKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfTUlESV9PVVRfU1RBUlQJKDggKyBIREVYX0JBU0UpCisjZGVmaW5lCUhERVhfTUlESV9PVVRfU1RPUAkoOSArIEhERVhfQkFTRSkKKyNkZWZpbmUJSERFWF9BVVhfUkVRCQkoMTAgKyBIREVYX0JBU0UpCisKKyNkZWZpbmUJSERFWEFSX0NMRUFSX1BFQUtTCTEKKyNkZWZpbmUJSERFWEFSX0lOX1NFVF9QT1RTCTIKKyNkZWZpbmUJSERFWEFSX0FVWF9TRVRfUE9UUwkzCisjZGVmaW5lCUhERVhBUl9DQUxfQV9UT19ECTQKKyNkZWZpbmUJSERFWEFSX1JEX0VYVF9EU1BfQklUUwk1CisKKy8qIFBpbm5hY2xlIG9ubHkgSERFWEFSIGRlZnMgKi8KKyNkZWZpbmUJSERFWEFSX1NFVF9BTkFfSU4JMAorI2RlZmluZQlIREVYQVJfU0VUX1NZTlRIX0lOCTQKKyNkZWZpbmUJSERFWEFSX1JFQURfREFUX0lOCTUKKyNkZWZpbmUJSERFWEFSX01JQ19TRVRfUE9UUwk2CisjZGVmaW5lCUhERVhBUl9TRVRfREFUX0lOCTcKKworI2RlZmluZSBIREVYQVJfU0VUX1NZTlRIXzQ4CTgKKyNkZWZpbmUgSERFWEFSX1NFVF9TWU5USF80NAk5CisKKyNkZWZpbmUgSElXT1JEKGwpCQkoKHUxNikoKCgodTMyKShsKSkgPj4gMTYpICYgMHhGRkZGKSkKKyNkZWZpbmUgTE9XT1JEKGwpCQkoKHUxNikodTMyKShsKSkKKyNkZWZpbmUgSElCWVRFKHcpCQkoKHU4KSgoKHUxNikodykgPj4gOCkgJiAweEZGKSkKKyNkZWZpbmUgTE9CWVRFKHcpCQkoKHU4KSh3KSkKKyNkZWZpbmUgTUFLRUxPTkcobG93LCBoaSkJKChsb25nKSgoKHUxNikobG93KSl8KCgodTMyKSgodTE2KShoaSkpKTw8MTYpKSkKKyNkZWZpbmUgTUFLRVdPUkQobG93LCBoaSkJKCh1MTYpKCgodTgpKGxvdykpfCgoKHUxNikoKHU4KShoaSkpKTw8OCkpKQorCisjZGVmaW5lIFBDVE9EU1BfT0ZGU0VUKHcpCSh1MTYpKCh3KS8yKQorI2RlZmluZSBQQ1RPRFNQX0JBU0VEKHcpCSh1MTYpKCgodykvMikgKyBEU1BfQkFTRV9BRERSKQorI2RlZmluZSBEU1BUT1BDX0JBU0VEKHcpCSgoKHcpIC0gRFNQX0JBU0VfQUREUikgKiAyKQorCisjaWZkZWYgU0xPV0lPCisjICB1bmRlZiBvdXRiCisjICB1bmRlZiBpbmIKKyMgIGRlZmluZSBvdXRiCQkJb3V0Yl9wCisjICBkZWZpbmUgaW5iCQkJaW5iX3AKKyNlbmRpZgorCisvKiBKb2JRdWV1ZVN0cnVjdCAqLworI2RlZmluZSBKUVNfd1N0YXJ0CQkweDAwCisjZGVmaW5lIEpRU193U2l6ZQkJMHgwMgorI2RlZmluZSBKUVNfd0hlYWQJCTB4MDQKKyNkZWZpbmUgSlFTX3dUYWlsCQkweDA2CisjZGVmaW5lIEpRU19fc2l6ZQkJMHgwOAorCisvKiBEQVF1ZXVlRGF0YVN0cnVjdCAqLworI2RlZmluZSBEQVFEU193U3RhcnQJCTB4MDAKKyNkZWZpbmUgREFRRFNfd1NpemUJCTB4MDIKKyNkZWZpbmUgREFRRFNfd0Zvcm1hdAkJMHgwNAorI2RlZmluZSBEQVFEU193U2FtcGxlU2l6ZQkweDA2CisjZGVmaW5lIERBUURTX3dDaGFubmVscwkJMHgwOAorI2RlZmluZSBEQVFEU193U2FtcGxlUmF0ZQkweDBBCisjZGVmaW5lIERBUURTX3dJbnRNc2cJCTB4MEMKKyNkZWZpbmUgREFRRFNfd0ZsYWdzCQkweDBFCisjZGVmaW5lIERBUURTX19zaXplCQkweDEwCisKKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKworc3RydWN0IHNuZF9tc25kIHsKKwl2b2lkIF9faW9tZW0JCSptYXBwZWRiYXNlOworCWludAkJCXBsYXlfcGVyaW9kX2J5dGVzOworCWludAkJCXBsYXlMaW1pdDsKKwlpbnQJCQlwbGF5UGVyaW9kczsKKwlpbnQgCQkJcGxheURNQVBvczsKKwlpbnQJCQliYW5rc1BsYXllZDsKKwlpbnQgCQkJY2FwdHVyZURNQVBvczsKKwlpbnQJCQljYXB0dXJlUGVyaW9kQnl0ZXM7CisJaW50CQkJY2FwdHVyZUxpbWl0OworCWludAkJCWNhcHR1cmVQZXJpb2RzOworCXN0cnVjdCBzbmRfY2FyZAkJKmNhcmQ7CisJdm9pZAkJCSptc25kbWlkaV9tcHU7CisJc3RydWN0IHNuZF9yYXdtaWRpCSpybWlkaTsKKworCS8qIEhhcmR3YXJlIHJlc291cmNlcyAqLworCWxvbmcgaW87CisJaW50IG1lbWlkLCBpcnFpZDsKKwlpbnQgaXJxLCBpcnFfcmVmOworCXVuc2lnbmVkIGxvbmcgYmFzZTsKKworCS8qIE1vdG9yb2xhIDU2ayBEU1AgU01BICovCisJdm9pZCBfX2lvbWVtCSpTTUE7CisJdm9pZCBfX2lvbWVtCSpEQVBROworCXZvaWQgX19pb21lbQkqREFSUTsKKwl2b2lkIF9faW9tZW0JKk1PRFE7CisJdm9pZCBfX2lvbWVtCSpNSURROworCXZvaWQgX19pb21lbQkqRFNQUTsKKwlpbnQgZHNwcV9kYXRhX2J1ZmYsIGRzcHFfYnVmZl9zaXplOworCisJLyogU3RhdGUgdmFyaWFibGVzICovCisJZW51bSB7IG1zbmRDbGFzc2ljLCBtc25kUGlubmFjbGUgfSB0eXBlOworCW1vZGVfdCBtb2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisjZGVmaW5lIEZfUkVTRVRUSU5HCQkJMAorI2RlZmluZSBGX0hBVkVESUdJVEFMCQkJMQorI2RlZmluZSBGX0FVRElPX1dSSVRFX0lOVVNFCQkyCisjZGVmaW5lIEZfV1JJVElORwkJCTMKKyNkZWZpbmUgRl9XUklURUJMT0NLCQkJNAorI2RlZmluZSBGX1dSSVRFRkxVU0gJCQk1CisjZGVmaW5lIEZfQVVESU9fUkVBRF9JTlVTRQkJNgorI2RlZmluZSBGX1JFQURJTkcJCQk3CisjZGVmaW5lIEZfUkVBREJMT0NLCQkJOAorI2RlZmluZSBGX0VYVF9NSURJX0lOVVNFCQk5CisjZGVmaW5lIEZfSERSX01JRElfSU5VU0UJCTEwCisjZGVmaW5lIEZfRElTQUJMRV9XUklURV9OREVMQVkJCTExCisJc3BpbmxvY2tfdCBsb2NrOworCXNwaW5sb2NrX3QgbWl4ZXJfbG9jazsKKwlpbnQgbnJlc2V0czsKKwl1bnNpZ25lZCByZWNzcmM7CisjZGVmaW5lIExFVkVMX0VOVFJJRVMgMzIKKwlpbnQgbGVmdF9sZXZlbHNbTEVWRUxfRU5UUklFU107CisJaW50IHJpZ2h0X2xldmVsc1tMRVZFTF9FTlRSSUVTXTsKKwlpbnQgY2FsaWJyYXRlX3NpZ25hbDsKKwlpbnQgcGxheV9zYW1wbGVfc2l6ZSwgcGxheV9zYW1wbGVfcmF0ZSwgcGxheV9jaGFubmVsczsKKwlpbnQgcGxheV9uZGVsYXk7CisJaW50IGNhcHR1cmVfc2FtcGxlX3NpemUsIGNhcHR1cmVfc2FtcGxlX3JhdGUsIGNhcHR1cmVfY2hhbm5lbHM7CisJaW50IGNhcHR1cmVfbmRlbGF5OworCXU4IGJDdXJyZW50TWlkaVBhdGNoOworCisJaW50IGxhc3RfcGxheWJhbmssIGxhc3RfcmVjYmFuazsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnBsYXliYWNrX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKmNhcHR1cmVfc3Vic3RyZWFtOworCit9OworCit2b2lkIHNuZF9tc25kX2luaXRfcXVldWUodm9pZCAqYmFzZSwgaW50IHN0YXJ0LCBpbnQgc2l6ZSk7CisKK2ludCBzbmRfbXNuZF9zZW5kX2RzcF9jbWQoc3RydWN0IHNuZF9tc25kICpjaGlwLCB1OCBjbWQpOworaW50IHNuZF9tc25kX3NlbmRfd29yZChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsCisJCQkgICB1bnNpZ25lZCBjaGFyIGhpZ2gsCisJCQkgICB1bnNpZ25lZCBjaGFyIG1pZCwKKwkJCSAgIHVuc2lnbmVkIGNoYXIgbG93KTsKK2ludCBzbmRfbXNuZF91cGxvYWRfaG9zdChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsCisJCQkgICAgIGNvbnN0IHU4ICpiaW4sIGludCBsZW4pOworaW50IHNuZF9tc25kX2VuYWJsZV9pcnEoc3RydWN0IHNuZF9tc25kICpjaGlwKTsKK2ludCBzbmRfbXNuZF9kaXNhYmxlX2lycShzdHJ1Y3Qgc25kX21zbmQgKmNoaXApOwordm9pZCBzbmRfbXNuZF9kc3BfaGFsdChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHN0cnVjdCBmaWxlICpmaWxlKTsKK2ludCBzbmRfbXNuZF9EQVBRKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHN0YXJ0KTsKK2ludCBzbmRfbXNuZF9EQVJRKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHN0YXJ0KTsKK2ludCBzbmRfbXNuZF9wY20oc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOworCitpbnQgc25kX21zbmRtaWRpX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UpOwordm9pZCBzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZCh2b2lkICptcHUpOworCit2b2lkIHNuZF9tc25kbWl4X3NldHVwKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCk7CitpbnQgX19kZXZpbml0IHNuZF9tc25kbWl4X25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOworaW50IHNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIGludCByZWNzcmMpOworI2VuZGlmIC8qIF9fTVNORF9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuYyBiL3NvdW5kL2lzYS9tc25kL21zbmRfY2xhc3NpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMjNhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuYwpAQCAtMCwwICsxLDMgQEAKKy8qIFRoZSB3b3JrIGlzIGluIG1zbmRfcGlubmFjbGUuYywganVzdCBkZWZpbmUgTVNORF9DTEFTU0lDIGJlZm9yZSBpdC4gKi8KKyNkZWZpbmUgTVNORF9DTEFTU0lDCisjaW5jbHVkZSAibXNuZF9waW5uYWNsZS5jIgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmggYi9zb3VuZC9pc2EvbXNuZC9tc25kX2NsYXNzaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMThkNWZhCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9jbGFzc2ljLmgKQEAgLTAsMCArMSwxMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBtc25kX2NsYXNzaWMuaAorICoKKyAqIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFNvdW5kIENhcmQgRHJpdmVyIGZvciBMaW51eAorICoKKyAqIFNvbWUgcGFydHMgb2YgdGhpcyBoZWFkZXIgZmlsZSB3ZXJlIGRlcml2ZWQgZnJvbSB0aGUgVHVydGxlIEJlYWNoCisgKiBNdWx0aVNvdW5kIERyaXZlciBEZXZlbG9wbWVudCBLaXQuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4IEFuZHJldyBWZWxpYXRoCisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgVHVydGxlIEJlYWNoIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVNORF9DTEFTU0lDX0gKKyNkZWZpbmUgX19NU05EX0NMQVNTSUNfSAorCisjZGVmaW5lIERTUF9OVU1JTwkJCQkweDEwCisKKyNkZWZpbmUJSFBfTUVNTQkJCQkJMHgwOAorCisjZGVmaW5lCUhQX0JJVE0JCQkJCTB4MEUKKyNkZWZpbmUJSFBfV0FJVAkJCQkJMHgwRAorI2RlZmluZQlIUF9EU1BSCQkJCQkweDBBCisjZGVmaW5lCUhQX1BST1IJCQkJCTB4MEIKKyNkZWZpbmUJSFBfQkxLUwkJCQkJMHgwQworCisjZGVmaW5lCUhQUFJPUkVTRVRfT0ZGCQkJCTAKKyNkZWZpbmUgSFBQUk9SRVNFVF9PTgkJCQkxCisKKyNkZWZpbmUgSFBEU1BSRVNFVF9PRkYJCQkJMAorI2RlZmluZSBIUERTUFJFU0VUX09OCQkJCTEKKworI2RlZmluZSBIUEJMS1NFTF8wCQkJCTAKKyNkZWZpbmUgSFBCTEtTRUxfMQkJCQkxCisKKyNkZWZpbmUgSFBXQUlUU1RBVEVfMAkJCQkwCisjZGVmaW5lIEhQV0FJVFNUQVRFXzEJCQkJMQorCisjZGVmaW5lIEhQQklUTU9ERV8xNgkJCQkwCisjZGVmaW5lIEhQQklUTU9ERV84CQkJCTEKKworI2RlZmluZQlISURTUF9JTlRfUExBWV9VTkRFUgkJCTB4MDAKKyNkZWZpbmUJSElEU1BfSU5UX1JFQ09SRF9PVkVSCQkJMHgwMQorI2RlZmluZQlISURTUF9JTlBVVF9DTElQUElORwkJCTB4MDIKKyNkZWZpbmUJSElEU1BfTUlESV9JTl9PVkVSCQkJMHgxMAorI2RlZmluZQlISURTUF9NSURJX09WRVJSVU5fRVJSICAweDEzCisKKyNkZWZpbmUgVElNRV9QUk9fUkVTRVRfRE9ORQkJCTB4MDI4QQorI2RlZmluZSBUSU1FX1BST19TWVNFWAkJCQkweDAwNDAKKyNkZWZpbmUgVElNRV9QUk9fUkVTRVQJCQkJMHgwMDMyCisKKyNkZWZpbmUgREFSX0JVRkZfU0laRQkJCQkweDIwMDAKKworI2RlZmluZSBNSURRX0JVRkZfU0laRQkJCQkweDIwMAorI2RlZmluZSBEU1BRX0JVRkZfU0laRQkJCQkweDQwCisKKyNkZWZpbmUgRFNQUV9EQVRBX0JVRkYJCQkJMHg3MjYwCisKKyNkZWZpbmUgTU9QX1NZTlRICQkJCTB4MTAKKyNkZWZpbmUgTU9QX0VYVE9VVAkJCQkweDMyCisjZGVmaW5lIE1PUF9FWFRUSFJVCQkJCTB4MDIKKyNkZWZpbmUgTU9QX09VVE1BU0sJCQkJMHgwMQorCisjZGVmaW5lIE1JUF9FWFRJTgkJCQkweDAxCisjZGVmaW5lIE1JUF9TWU5USAkJCQkweDAwCisjZGVmaW5lIE1JUF9JTk1BU0sJCQkJMHgzMgorCisvKiBDbGFzc2ljIFNNQSBDb21tb24gRGF0YSAqLworI2RlZmluZSBTTUFfd0N1cnJQbGF5Qnl0ZXMJCQkweDAwMDAKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkQnl0ZXMJCQkweDAwMDIKKyNkZWZpbmUgU01BX3dDdXJyUGxheVZvbExlZnQJCQkweDAwMDQKKyNkZWZpbmUgU01BX3dDdXJyUGxheVZvbFJpZ2h0CQkJMHgwMDA2CisjZGVmaW5lIFNNQV93Q3VyckluVm9sTGVmdAkJCTB4MDAwOAorI2RlZmluZSBTTUFfd0N1cnJJblZvbFJpZ2h0CQkJMHgwMDBhCisjZGVmaW5lIFNNQV93VXNlcl8zCQkJCTB4MDAwYworI2RlZmluZSBTTUFfd1VzZXJfNAkJCQkweDAwMGUKKyNkZWZpbmUgU01BX2R3VXNlcl81CQkJCTB4MDAxMAorI2RlZmluZSBTTUFfZHdVc2VyXzYJCQkJMHgwMDE0CisjZGVmaW5lIFNNQV93VXNlcl83CQkJCTB4MDAxOAorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0EJCQkJMHgwMDFhCisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfQgkJCQkweDAwMWMKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9DCQkJCTB4MDAxZQorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0QJCQkJMHgwMDIwCisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfRQkJCQkweDAwMjIKKyNkZWZpbmUgU01BX3dSZXNlcnZlZF9GCQkJCTB4MDAyNAorI2RlZmluZSBTTUFfd1Jlc2VydmVkX0cJCQkJMHgwMDI2CisjZGVmaW5lIFNNQV93UmVzZXJ2ZWRfSAkJCQkweDAwMjgKKyNkZWZpbmUgU01BX3dDdXJyRFNQU3RhdHVzRmxhZ3MJCQkweDAwMmEKKyNkZWZpbmUgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzCQkweDAwMmMKKyNkZWZpbmUgU01BX3dDdXJySW5wdXRUYWdCaXRzCQkJMHgwMDJlCisjZGVmaW5lIFNNQV93Q3VyckxlZnRQZWFrCQkJMHgwMDMwCisjZGVmaW5lIFNNQV93Q3VyclJpZ2h0UGVhawkJCTB4MDAzMgorI2RlZmluZSBTTUFfd0V4dERTUGJpdHMJCQkJMHgwMDM0CisjZGVmaW5lIFNNQV9iRXh0SG9zdGJpdHMJCQkweDAwMzYKKyNkZWZpbmUgU01BX2JCb2FyZExldmVsCQkJCTB4MDAzNworI2RlZmluZSBTTUFfYkluUG90UG9zUmlnaHQJCQkweDAwMzgKKyNkZWZpbmUgU01BX2JJblBvdFBvc0xlZnQJCQkweDAwMzkKKyNkZWZpbmUgU01BX2JBdXhQb3RQb3NSaWdodAkJCTB4MDAzYQorI2RlZmluZSBTTUFfYkF1eFBvdFBvc0xlZnQJCQkweDAwM2IKKyNkZWZpbmUgU01BX3dDdXJyTWFzdFZvbExlZnQJCQkweDAwM2MKKyNkZWZpbmUgU01BX3dDdXJyTWFzdFZvbFJpZ2h0CQkJMHgwMDNlCisjZGVmaW5lIFNNQV9iVXNlcl8xMgkJCQkweDAwNDAKKyNkZWZpbmUgU01BX2JVc2VyXzEzCQkJCTB4MDA0MQorI2RlZmluZSBTTUFfd1VzZXJfMTQJCQkJMHgwMDQyCisjZGVmaW5lIFNNQV93VXNlcl8xNQkJCQkweDAwNDQKKyNkZWZpbmUgU01BX3dDYWxGcmVxQXRvRAkJCTB4MDA0NgorI2RlZmluZSBTTUFfd1VzZXJfMTYJCQkJMHgwMDQ4CisjZGVmaW5lIFNNQV93VXNlcl8xNwkJCQkweDAwNGEKKyNkZWZpbmUgU01BX19zaXplCQkJCTB4MDA0YworCisjZGVmaW5lIElOSVRDT0RFRklMRQkJInR1cnRsZWJlYWNoL21zbmRpbml0LmJpbiIKKyNkZWZpbmUgUEVSTUNPREVGSUxFCQkidHVydGxlYmVhY2gvbXNuZHBlcm0uYmluIgorI2RlZmluZSBMT05HTkFNRQkJIk11bHRpU291bmQgKENsYXNzaWMvTW9udGVyZXkvVGFoaXRpKSIKKworI2VuZGlmIC8qIF9fTVNORF9DTEFTU0lDX0ggKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfbWlkaS5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9taWRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I5YWE0YwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfbWlkaS5jCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogIENvcHlyaWdodCAoYykgYnkgSmFyb3NsYXYgS3lzZWxhIDxwZXJleEBwZXJleC5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgYnkgS3J6eXN6dG9mIEhlbHQKKyAqICBSb3V0aW5lcyBmb3IgY29udHJvbCBvZiBNUFUtNDAxIGluIFVBUlQgbW9kZQorICoKKyAqICBNUFUtNDAxIHN1cHBvcnRzIFVBUlQgbW9kZSB3aGljaCBpcyBub3QgY2FwYWJsZSBnZW5lcmF0ZSB0cmFuc21pdAorICogIGludGVycnVwdHMgdGh1cyBvdXRwdXQgaXMgZG9uZSB2aWEgcG9sbGluZy4gQWxzbywgaWYgaXJxIDwgMCwgdGhlbgorICogIGlucHV0IGlzIGRvbmUgYWxzbyB2aWEgcG9sbGluZy4gRG8gbm90IGV4cGVjdCBnb29kIHBlcmZvcm1hbmNlLgorICoKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgorCisjaW5jbHVkZSAibXNuZC5oIgorCisjZGVmaW5lIE1TTkRNSURJX01PREVfQklUX0lOUFVUCQkwCisjZGVmaW5lIE1TTkRNSURJX01PREVfQklUX09VVFBVVAkJMQorI2RlZmluZSBNU05ETUlESV9NT0RFX0JJVF9JTlBVVF9UUklHR0VSCTIKKyNkZWZpbmUgTVNORE1JRElfTU9ERV9CSVRfT1VUUFVUX1RSSUdHRVIJMworCitzdHJ1Y3Qgc25kX21zbmRtaWRpIHsKKwlzdHJ1Y3Qgc25kX21zbmQgKmRldjsKKworCXVuc2lnbmVkIGxvbmcgbW9kZTsJCS8qIE1TTkRNSURJX01PREVfWFhYWCAqLworCisJc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtX2lucHV0OworCisJc3BpbmxvY2tfdCBpbnB1dF9sb2NrOworfTsKKworLyoKKyAqIGlucHV0L291dHB1dCBvcGVuL2Nsb3NlIC0gcHJvdGVjdGVkIGJ5IG9wZW5fbXV0ZXggaW4gcmF3bWlkaS5jCisgKi8KK3N0YXRpYyBpbnQgc25kX21zbmRtaWRpX2lucHV0X29wZW4oc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdTsKKworCXNuZF9wcmludGRkKCJzbmRfbXNuZG1pZGlfaW5wdXRfb3BlbigpXG4iKTsKKworCW1wdSA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKworCW1wdS0+c3Vic3RyZWFtX2lucHV0ID0gc3Vic3RyZWFtOworCisJc25kX21zbmRfZW5hYmxlX2lycShtcHUtPmRldik7CisKKwlzbmRfbXNuZF9zZW5kX2RzcF9jbWQobXB1LT5kZXYsIEhERVhfTUlESV9JTl9TVEFSVCk7CisJc2V0X2JpdChNU05ETUlESV9NT0RFX0JJVF9JTlBVVCwgJm1wdS0+bW9kZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaWRpX2lucHV0X2Nsb3NlKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHU7CisKKwltcHUgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisJc25kX21zbmRfc2VuZF9kc3BfY21kKG1wdS0+ZGV2LCBIREVYX01JRElfSU5fU1RPUCk7CisJY2xlYXJfYml0KE1TTkRNSURJX01PREVfQklUX0lOUFVULCAmbXB1LT5tb2RlKTsKKwltcHUtPnN1YnN0cmVhbV9pbnB1dCA9IE5VTEw7CisJc25kX21zbmRfZGlzYWJsZV9pcnEobXB1LT5kZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbmRfbXNuZG1pZGlfaW5wdXRfZHJvcChzdHJ1Y3Qgc25kX21zbmRtaWRpICptcHUpCit7CisJdTE2IHRhaWw7CisKKwl0YWlsID0gcmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd1RhaWwpOworCXdyaXRldyh0YWlsLCBtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCk7Cit9CisKKy8qCisgKiB0cmlnZ2VyIGlucHV0CisgKi8KK3N0YXRpYyB2b2lkIHNuZF9tc25kbWlkaV9pbnB1dF90cmlnZ2VyKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkJaW50IHVwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1OworCisJc25kX3ByaW50ZGQoInNuZF9tc25kbWlkaV9pbnB1dF90cmlnZ2VyKCwgJWkpXG4iLCB1cCk7CisKKwltcHUgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm1wdS0+aW5wdXRfbG9jaywgZmxhZ3MpOworCWlmICh1cCkgeworCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUiwKKwkJCQkgICAgICAmbXB1LT5tb2RlKSkKKwkJCXNuZF9tc25kbWlkaV9pbnB1dF9kcm9wKG1wdSk7CisJfSBlbHNlIHsKKwkJY2xlYXJfYml0KE1TTkRNSURJX01PREVfQklUX0lOUFVUX1RSSUdHRVIsICZtcHUtPm1vZGUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcHUtPmlucHV0X2xvY2ssIGZsYWdzKTsKKwlpZiAodXApCisJCXNuZF9tc25kbWlkaV9pbnB1dF9yZWFkKG1wdSk7Cit9CisKK3ZvaWQgc25kX21zbmRtaWRpX2lucHV0X3JlYWQodm9pZCAqbXB1dikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdSA9IG1wdXY7CisJdm9pZCAqcHdNSURRRGF0YSA9IG1wdS0+ZGV2LT5tYXBwZWRiYXNlICsgTUlEUV9EQVRBX0JVRkY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXB1LT5pbnB1dF9sb2NrLCBmbGFncyk7CisJd2hpbGUgKHJlYWR3KG1wdS0+ZGV2LT5NSURRICsgSlFTX3dUYWlsKSAhPQorCSAgICAgICByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCkpIHsKKwkJdTE2IHdUbXAsIHZhbDsKKwkJdmFsID0gcmVhZHcocHdNSURRRGF0YSArIDIgKiByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCkpOworCisJCQlpZiAodGVzdF9iaXQoTVNORE1JRElfTU9ERV9CSVRfSU5QVVRfVFJJR0dFUiwKKwkJCQkgICAgICZtcHUtPm1vZGUpKQorCQkJCXNuZF9yYXdtaWRpX3JlY2VpdmUobXB1LT5zdWJzdHJlYW1faW5wdXQsCisJCQkJCQkgICAgKHVuc2lnbmVkIGNoYXIgKikmdmFsLCAxKTsKKworCQl3VG1wID0gcmVhZHcobXB1LT5kZXYtPk1JRFEgKyBKUVNfd0hlYWQpICsgMTsKKwkJaWYgKHdUbXAgPiByZWFkdyhtcHUtPmRldi0+TUlEUSArIEpRU193U2l6ZSkpCisJCQl3cml0ZXcoMCwgIG1wdS0+ZGV2LT5NSURRICsgSlFTX3dIZWFkKTsKKwkJZWxzZQorCQkJd3JpdGV3KHdUbXAsICBtcHUtPmRldi0+TUlEUSArIEpRU193SGVhZCk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wdS0+aW5wdXRfbG9jaywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3Jhd21pZGlfb3BzIHNuZF9tc25kbWlkaV9pbnB1dCA9IHsKKwkub3BlbiA9CQlzbmRfbXNuZG1pZGlfaW5wdXRfb3BlbiwKKwkuY2xvc2UgPQlzbmRfbXNuZG1pZGlfaW5wdXRfY2xvc2UsCisJLnRyaWdnZXIgPQlzbmRfbXNuZG1pZGlfaW5wdXRfdHJpZ2dlciwKK307CisKK3N0YXRpYyB2b2lkIHNuZF9tc25kbWlkaV9mcmVlKHN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGkpCit7CisJc3RydWN0IHNuZF9tc25kbWlkaSAqbXB1ID0gcm1pZGktPnByaXZhdGVfZGF0YTsKKwlrZnJlZShtcHUpOworfQorCitpbnQgc25kX21zbmRtaWRpX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UpCit7CisJc3RydWN0IHNuZF9tc25kICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzbmRfbXNuZG1pZGkgKm1wdTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOworCWludCBlcnI7CisKKwllcnIgPSBzbmRfcmF3bWlkaV9uZXcoY2FyZCwgIk1TTkQtTUlESSIsIGRldmljZSwgMSwgMSwgJnJtaWRpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwltcHUgPSBrY2FsbG9jKDEsIHNpemVvZigqbXB1KSwgR0ZQX0tFUk5FTCk7CisJaWYgKG1wdSA9PSBOVUxMKSB7CisJCXNuZF9kZXZpY2VfZnJlZShjYXJkLCBybWlkaSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltcHUtPmRldiA9IGNoaXA7CisJY2hpcC0+bXNuZG1pZGlfbXB1ID0gbXB1OworCXJtaWRpLT5wcml2YXRlX2RhdGEgPSBtcHU7CisJcm1pZGktPnByaXZhdGVfZnJlZSA9IHNuZF9tc25kbWlkaV9mcmVlOworCXNwaW5fbG9ja19pbml0KCZtcHUtPmlucHV0X2xvY2spOworCXN0cmNweShybWlkaS0+bmFtZSwgIk1TTkQgTUlESSIpOworCXNuZF9yYXdtaWRpX3NldF9vcHMocm1pZGksIFNORFJWX1JBV01JRElfU1RSRUFNX0lOUFVULAorCQkJICAgICZzbmRfbXNuZG1pZGlfaW5wdXQpOworCXJtaWRpLT5pbmZvX2ZsYWdzIHw9IFNORFJWX1JBV01JRElfSU5GT19JTlBVVDsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGI2YWJkCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jCkBAIC0wLDAgKzEsMTIzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIExpbnV4IG11bHRpc291bmQgcGlubmFjbGUvZmlqaSBkcml2ZXIgZm9yIEFMU0EuCisgKgorICogMjAwMi8wNi8zMCBLYXJzdGVuIFdpZXNlOgorICoJZm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCB0byBidWlsZCBhIHBpbm5hY2xlIC8gZmlqaSBkcml2ZXIuCisgKgl0aGUgT1NTIHBhcmVudCBvZiB0aGlzIGNvZGUgaXMgZGVzaWduZWQgdG8gYWxzbyBzdXBwb3J0CisgKgl0aGUgbXVsdGlzb3VuZCBjbGFzc2ljIHZpYSB0aGUgZmlsZSBtc25kX2NsYXNzaWMuYy4KKyAqCXRvIG1ha2UgaXQgZWFzaWVyIGZvciBzb21lIGJyYXZlIGhlYXJ0IHRvIGltcGxlbXQgY2xhc3NpYworICoJc3VwcG9ydCBpbiBhbHNhLCBpIGxlZnQgYWxsIHRoZSBNU05EX0NMQVNTSUMgdG9rZW5zIGluIHRoaXMgZmlsZS4KKyAqCWJ1dCBmb3Igbm93IHRoaXMgdW50ZXN0ZWQgJiB1bmRvbmUuCisgKgorICoKKyAqIHJpcHBlZCBmcm9tIGxpbnV4IGtlcm5lbCAyLjQuMTggYnkgS2Fyc3RlbiBXaWVzZS4KKyAqCisgKiB0aGUgZm9sbG93aW5nIGlzIGEgY29weSBvZiB0aGUgMi40LjE4IE9TUyBGUkVFIGZpbGUtaGVhZGluZyBjb21tZW50OgorICoKKyAqIFR1cnRsZSBCZWFjaCBNdWx0aVNvdW5kIFNvdW5kIENhcmQgRHJpdmVyIGZvciBMaW51eAorICogbXNuZF9waW5uYWNsZS5jIC8gbXNuZF9jbGFzc2ljLmMKKyAqCisgKiAtLSBJZiBNU05EX0NMQVNTSUMgaXMgZGVmaW5lZDoKKyAqCisgKiAgICAgLT4gZHJpdmVyIGZvciBUdXJ0bGUgQmVhY2ggQ2xhc3NpYy9Nb250ZXJleS9UYWhpdGkKKyAqCisgKiAtLSBFbHNlCisgKgorICogICAgIC0+IGRyaXZlciBmb3IgVHVydGxlIEJlYWNoIFBpbm5hY2xlL0ZpamkKKyAqCisgKiAxMi0zLTIwMDAgIE1vZGlmaWVkIElPIHBvcnQgdmFsaWRhdGlvbiAgU3RldmUgU3ljYW1vcmUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2EuaD4KKyNpbmNsdWRlIDxsaW51eC9pc2FwbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmQuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KKworI2lmZGVmIE1TTkRfQ0xBU1NJQworIyBpZm5kZWYgX19hbHBoYV9fCisjICBkZWZpbmUgU0xPV0lPCisjIGVuZGlmCisjZW5kaWYKKyNpbmNsdWRlICJtc25kLmgiCisjaWZkZWYgTVNORF9DTEFTU0lDCisjICBpbmNsdWRlICJtc25kX2NsYXNzaWMuaCIKKyMgIGRlZmluZSBMT0dOQU1FCQkJIm1zbmRfY2xhc3NpYyIKKyNlbHNlCisjICBpbmNsdWRlICJtc25kX3Bpbm5hY2xlLmgiCisjICBkZWZpbmUgTE9HTkFNRQkJCSJzbmRfbXNuZF9waW5uYWNsZSIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgc2V0X2RlZmF1bHRfYXVkaW9fcGFyYW1ldGVycyhzdHJ1Y3Qgc25kX21zbmQgKmNoaXApCit7CisJY2hpcC0+cGxheV9zYW1wbGVfc2l6ZSA9IERFRlNBTVBMRVNJWkU7CisJY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSA9IERFRlNBTVBMRVJBVEU7CisJY2hpcC0+cGxheV9jaGFubmVscyA9IERFRkNIQU5ORUxTOworCWNoaXAtPmNhcHR1cmVfc2FtcGxlX3NpemUgPSBERUZTQU1QTEVTSVpFOworCWNoaXAtPmNhcHR1cmVfc2FtcGxlX3JhdGUgPSBERUZTQU1QTEVSQVRFOworCWNoaXAtPmNhcHR1cmVfY2hhbm5lbHMgPSBERUZDSEFOTkVMUzsKK30KKworc3RhdGljIHZvaWQgc25kX21zbmRfZXZhbF9kc3BfbXNnKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgdTE2IHdNZXNzYWdlKQoreworCXN3aXRjaCAoSElCWVRFKHdNZXNzYWdlKSkgeworCWNhc2UgSElNVF9QTEFZX0RPTkU6IHsKKwkJaWYgKGNoaXAtPmJhbmtzUGxheWVkIDwgMykKKwkJCXNuZF9wcmludGRkKCIlMDhYOiBISU1UX1BMQVlfRE9ORTogJWlcbiIsCisJCQkJKHVuc2lnbmVkKWppZmZpZXMsIExPQllURSh3TWVzc2FnZSkpOworCisJCWlmIChjaGlwLT5sYXN0X3BsYXliYW5rID09IExPQllURSh3TWVzc2FnZSkpIHsKKwkJCXNuZF9wcmludGRkKCJjaGlwLmxhc3RfcGxheWJhbmsgPT0gTE9CWVRFKHdNZXNzYWdlKVxuIik7CisJCQlicmVhazsKKwkJfQorCQljaGlwLT5iYW5rc1BsYXllZCsrOworCisJCWlmICh0ZXN0X2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncykpCisJCQlzbmRfbXNuZF9EQVBRKGNoaXAsIDApOworCisJCWNoaXAtPmxhc3RfcGxheWJhbmsgPSBMT0JZVEUod01lc3NhZ2UpOworCQljaGlwLT5wbGF5RE1BUG9zICs9IGNoaXAtPnBsYXlfcGVyaW9kX2J5dGVzOworCQlpZiAoY2hpcC0+cGxheURNQVBvcyA+IGNoaXAtPnBsYXlMaW1pdCkKKwkJCWNoaXAtPnBsYXlETUFQb3MgPSAwOworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPnBsYXliYWNrX3N1YnN0cmVhbSk7CisKKwkJYnJlYWs7CisJfQorCWNhc2UgSElNVF9SRUNPUkRfRE9ORToKKwkJaWYgKGNoaXAtPmxhc3RfcmVjYmFuayA9PSBMT0JZVEUod01lc3NhZ2UpKQorCQkJYnJlYWs7CisJCWNoaXAtPmxhc3RfcmVjYmFuayA9IExPQllURSh3TWVzc2FnZSk7CisJCWNoaXAtPmNhcHR1cmVETUFQb3MgKz0gY2hpcC0+Y2FwdHVyZVBlcmlvZEJ5dGVzOworCQlpZiAoY2hpcC0+Y2FwdHVyZURNQVBvcyA+IChjaGlwLT5jYXB0dXJlTGltaXQpKQorCQkJY2hpcC0+Y2FwdHVyZURNQVBvcyA9IDA7CisKKwkJaWYgKHRlc3RfYml0KEZfUkVBRElORywgJmNoaXAtPmZsYWdzKSkKKwkJCXNuZF9tc25kX0RBUlEoY2hpcCwgY2hpcC0+bGFzdF9yZWNiYW5rKTsKKworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKGNoaXAtPmNhcHR1cmVfc3Vic3RyZWFtKTsKKwkJYnJlYWs7CisKKwljYXNlIEhJTVRfRFNQOgorCQlzd2l0Y2ggKExPQllURSh3TWVzc2FnZSkpIHsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJCWNhc2UgSElEU1BfUExBWV9VTkRFUjoKKyNlbmRpZgorCQljYXNlIEhJRFNQX0lOVF9QTEFZX1VOREVSOgorCQkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBQbGF5IHVuZGVyZmxvdyAlaVxuIiwKKwkJCQljaGlwLT5iYW5rc1BsYXllZCk7CisJCQlpZiAoY2hpcC0+YmFua3NQbGF5ZWQgPiAyKQorCQkJCWNsZWFyX2JpdChGX1dSSVRJTkcsICZjaGlwLT5mbGFncyk7CisJCQlicmVhazsKKworCQljYXNlIEhJRFNQX0lOVF9SRUNPUkRfT1ZFUjoKKwkJCXNuZF9wcmludGQoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogUmVjb3JkIG92ZXJmbG93XG4iKTsKKwkJCWNsZWFyX2JpdChGX1JFQURJTkcsICZjaGlwLT5mbGFncyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJc25kX3ByaW50ZChLRVJOX1dBUk5JTkcgTE9HTkFNRQorCQkJCSAgICI6IERTUCBtZXNzYWdlICVkIDB4JTAyeFxuIiwKKwkJCQkgICBMT0JZVEUod01lc3NhZ2UpLCBMT0JZVEUod01lc3NhZ2UpKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBISU1UX01JRElfSU5fVUNIQVI6CisJCWlmIChjaGlwLT5tc25kbWlkaV9tcHUpCisJCQlzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZChjaGlwLT5tc25kbWlkaV9tcHUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXNuZF9wcmludGQoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogSElNVCBtZXNzYWdlICVkIDB4JTAyeFxuIiwKKwkJCSAgIEhJQllURSh3TWVzc2FnZSksIEhJQllURSh3TWVzc2FnZSkpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzbmRfbXNuZF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGRldl9pZDsKKwl2b2lkICpwd0RTUFFEYXRhID0gY2hpcC0+bWFwcGVkYmFzZSArIERTUFFfREFUQV9CVUZGOworCisJLyogU2VuZCBhY2sgdG8gRFNQICovCisJLyogaW5iKGNoaXAtPmlvICsgSFBfUlhMKTsgKi8KKworCS8qIEV2YWx1YXRlIHF1ZXVlZCBEU1AgbWVzc2FnZXMgKi8KKwl3aGlsZSAocmVhZHcoY2hpcC0+RFNQUSArIEpRU193VGFpbCkgIT0gcmVhZHcoY2hpcC0+RFNQUSArIEpRU193SGVhZCkpIHsKKwkJdTE2IHdUbXA7CisKKwkJc25kX21zbmRfZXZhbF9kc3BfbXNnKGNoaXAsCisJCQlyZWFkdyhwd0RTUFFEYXRhICsgMiAqIHJlYWR3KGNoaXAtPkRTUFEgKyBKUVNfd0hlYWQpKSk7CisKKwkJd1RtcCA9IHJlYWR3KGNoaXAtPkRTUFEgKyBKUVNfd0hlYWQpICsgMTsKKwkJaWYgKHdUbXAgPiByZWFkdyhjaGlwLT5EU1BRICsgSlFTX3dTaXplKSkKKwkJCXdyaXRldygwLCBjaGlwLT5EU1BRICsgSlFTX3dIZWFkKTsKKwkJZWxzZQorCQkJd3JpdGV3KHdUbXAsIGNoaXAtPkRTUFEgKyBKUVNfd0hlYWQpOworCX0KKwkvKiBTZW5kIGFjayB0byBEU1AgKi8KKwlpbmIoY2hpcC0+aW8gKyBIUF9SWEwpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworCitzdGF0aWMgaW50IHNuZF9tc25kX3Jlc2V0X2RzcChsb25nIGlvLCB1bnNpZ25lZCBjaGFyICppbmZvKQoreworCWludCB0aW1lb3V0ID0gMTAwOworCisJb3V0YihIUERTUFJFU0VUX09OLCBpbyArIEhQX0RTUFIpOworCW1zbGVlcCgxKTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisJaWYgKGluZm8pCisJCSppbmZvID0gaW5iKGlvICsgSFBfSU5GTyk7CisjZW5kaWYKKwlvdXRiKEhQRFNQUkVTRVRfT0ZGLCBpbyArIEhQX0RTUFIpOworCW1zbGVlcCgxKTsKKwl3aGlsZSAodGltZW91dC0tID4gMCkgeworCQlpZiAoaW5iKGlvICsgSFBfQ1ZSKSA9PSBIUF9DVlJfREVGKQorCQkJcmV0dXJuIDA7CisJCW1zbGVlcCgxKTsKKwl9CisJc25kX3ByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IENhbm5vdCByZXNldCBEU1BcbiIpOworCisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgY2hhciBpbmZvOworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwljaGFyICp4diwgKnJldiA9IE5VTEw7CisJY2hhciAqcGluID0gIlRCIFBpbm5hY2xlIiwgKmZpamkgPSAiVEIgRmlqaSI7CisJY2hhciAqcGluZmlqaSA9ICJUQiBQaW5uYWNsZS9GaWppIjsKKyNlbmRpZgorCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPLCAicHJvYmluZyIpKSB7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBJL08gcG9ydCBjb25mbGljdFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChzbmRfbXNuZF9yZXNldF9kc3AoY2hpcC0+aW8sICZpbmZvKSA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworI2lmZGVmIE1TTkRfQ0xBU1NJQworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJDbGFzc2ljL1RhaGl0aS9Nb250ZXJleSIpOworCXN0cmNweShjYXJkLT5sb25nbmFtZSwgIlR1cnRsZSBCZWFjaCBNdWx0aXNvdW5kIik7CisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6ICVzLCAiCisJICAgICAgICJJL08gMHglbHgtMHglbHgsIElSUSAlZCwgbWVtb3J5IG1hcHBlZCB0byAweCVsWC0weCVsWFxuIiwKKwkgICAgICAgY2FyZC0+c2hvcnRuYW1lLAorCSAgICAgICBjaGlwLT5pbywgY2hpcC0+aW8gKyBEU1BfTlVNSU8gLSAxLAorCSAgICAgICBjaGlwLT5pcnEsCisJICAgICAgIGNoaXAtPmJhc2UsIGNoaXAtPmJhc2UgKyAweDdmZmYpOworI2Vsc2UKKwlzd2l0Y2ggKGluZm8gPj4gNCkgeworCWNhc2UgMHhmOgorCQl4diA9ICI8PSAxLjE1IjsKKwkJYnJlYWs7CisJY2FzZSAweDE6CisJCXh2ID0gIjEuMTgvMS4yIjsKKwkJYnJlYWs7CisJY2FzZSAweDI6CisJCXh2ID0gIjEuMyI7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQl4diA9ICIxLjQiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl4diA9ICJ1bmtub3duIjsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChpbmZvICYgMHg3KSB7CisJY2FzZSAweDA6CisJCXJldiA9ICJJIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGluKTsKKwkJYnJlYWs7CisJY2FzZSAweDE6CisJCXJldiA9ICJGIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGluKTsKKwkJYnJlYWs7CisJY2FzZSAweDI6CisJCXJldiA9ICJHIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGluKTsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCXJldiA9ICJIIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGluKTsKKwkJYnJlYWs7CisJY2FzZSAweDQ6CisJCXJldiA9ICJFIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgZmlqaSk7CisJCWJyZWFrOworCWNhc2UgMHg1OgorCQlyZXYgPSAiQyI7CisJCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGZpamkpOworCQlicmVhazsKKwljYXNlIDB4NjoKKwkJcmV2ID0gIkQiOworCQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBmaWppKTsKKwkJYnJlYWs7CisJY2FzZSAweDc6CisJCXJldiA9ICJBLUIgKEZpamkpIG9yIEEtRSAoUGlubmFjbGUpIjsKKwkJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGluZmlqaSk7CisJCWJyZWFrOworCX0KKwlzdHJjcHkoY2FyZC0+bG9uZ25hbWUsICJUdXJ0bGUgQmVhY2ggTXVsdGlzb3VuZCBQaW5uYWNsZSIpOworCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiAlcyByZXZpc2lvbiAlcywgWGlsaW54IHZlcnNpb24gJXMsICIKKwkgICAgICAgIkkvTyAweCVseC0weCVseCwgSVJRICVkLCBtZW1vcnkgbWFwcGVkIHRvIDB4JWxYLTB4JWxYXG4iLAorCSAgICAgICBjYXJkLT5zaG9ydG5hbWUsCisJICAgICAgIHJldiwgeHYsCisJICAgICAgIGNoaXAtPmlvLCBjaGlwLT5pbyArIERTUF9OVU1JTyAtIDEsCisJICAgICAgIGNoaXAtPmlycSwKKwkgICAgICAgY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIDB4N2ZmZik7CisjZW5kaWYKKworCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9tc25kX2luaXRfc21hKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCkKK3sKKwlzdGF0aWMgaW50IGluaXR0ZWQ7CisJdTE2IG1hc3RWb2xMZWZ0LCBtYXN0Vm9sUmlnaHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworI2lmZGVmIE1TTkRfQ0xBU1NJQworCW91dGIoY2hpcC0+bWVtaWQsIGNoaXAtPmlvICsgSFBfTUVNTSk7CisjZW5kaWYKKwlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJLyogTW90b3JvbGEgNTZrIHNoYXJlZCBtZW1vcnkgYmFzZSAqLworCWNoaXAtPlNNQSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBTTUFfU1RSVUNUX1NUQVJUOworCisJaWYgKGluaXR0ZWQpIHsKKwkJbWFzdFZvbExlZnQgPSByZWFkdyhjaGlwLT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCk7CisJCW1hc3RWb2xSaWdodCA9IHJlYWR3KGNoaXAtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xSaWdodCk7CisJfSBlbHNlCisJCW1hc3RWb2xMZWZ0ID0gbWFzdFZvbFJpZ2h0ID0gMDsKKwltZW1zZXRfaW8oY2hpcC0+bWFwcGVkYmFzZSwgMCwgMHg4MDAwKTsKKworCS8qIENyaXRpY2FsIHNlY3Rpb246IGJhbmsgMSBhY2Nlc3MgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCW91dGIoSFBCTEtTRUxfMSwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKwltZW1zZXRfaW8oY2hpcC0+bWFwcGVkYmFzZSwgMCwgMHg4MDAwKTsKKwlvdXRiKEhQQkxLU0VMXzAsIGNoaXAtPmlvICsgSFBfQkxLUyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCisJLyogRGlnaXRhbCBhdWRpbyBwbGF5IHF1ZXVlICovCisJY2hpcC0+REFQUSA9IGNoaXAtPm1hcHBlZGJhc2UgKyBEQVBRX09GRlNFVDsKKwlzbmRfbXNuZF9pbml0X3F1ZXVlKGNoaXAtPkRBUFEsIERBUFFfREFUQV9CVUZGLCBEQVBRX0JVRkZfU0laRSk7CisKKwkvKiBEaWdpdGFsIGF1ZGlvIHJlY29yZCBxdWV1ZSAqLworCWNoaXAtPkRBUlEgPSBjaGlwLT5tYXBwZWRiYXNlICsgREFSUV9PRkZTRVQ7CisJc25kX21zbmRfaW5pdF9xdWV1ZShjaGlwLT5EQVJRLCBEQVJRX0RBVEFfQlVGRiwgREFSUV9CVUZGX1NJWkUpOworCisJLyogTUlESSBvdXQgcXVldWUgKi8KKwljaGlwLT5NT0RRID0gY2hpcC0+bWFwcGVkYmFzZSArIE1PRFFfT0ZGU0VUOworCXNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+TU9EUSwgTU9EUV9EQVRBX0JVRkYsIE1PRFFfQlVGRl9TSVpFKTsKKworCS8qIE1JREkgaW4gcXVldWUgKi8KKwljaGlwLT5NSURRID0gY2hpcC0+bWFwcGVkYmFzZSArIE1JRFFfT0ZGU0VUOworCXNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+TUlEUSwgTUlEUV9EQVRBX0JVRkYsIE1JRFFfQlVGRl9TSVpFKTsKKworCS8qIERTUCAtPiBob3N0IG1lc3NhZ2UgcXVldWUgKi8KKwljaGlwLT5EU1BRID0gY2hpcC0+bWFwcGVkYmFzZSArIERTUFFfT0ZGU0VUOworCXNuZF9tc25kX2luaXRfcXVldWUoY2hpcC0+RFNQUSwgRFNQUV9EQVRBX0JVRkYsIERTUFFfQlVGRl9TSVpFKTsKKworCS8qIFNldHVwIHNvbWUgRFNQIHZhbHVlcyAqLworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwl3cml0ZXcoMSwgY2hpcC0+U01BICsgU01BX3dDdXJyUGxheUZvcm1hdCk7CisJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3NpemUsIGNoaXAtPlNNQSArIFNNQV93Q3VyclBsYXlTYW1wbGVTaXplKTsKKwl3cml0ZXcoY2hpcC0+cGxheV9jaGFubmVscywgY2hpcC0+U01BICsgU01BX3dDdXJyUGxheUNoYW5uZWxzKTsKKwl3cml0ZXcoY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSwgY2hpcC0+U01BICsgU01BX3dDdXJyUGxheVNhbXBsZVJhdGUpOworI2VuZGlmCisJd3JpdGV3KGNoaXAtPnBsYXlfc2FtcGxlX3JhdGUsIGNoaXAtPlNNQSArIFNNQV93Q2FsRnJlcUF0b0QpOworCXdyaXRldyhtYXN0Vm9sTGVmdCwgY2hpcC0+U01BICsgU01BX3dDdXJyTWFzdFZvbExlZnQpOworCXdyaXRldyhtYXN0Vm9sUmlnaHQsIGNoaXAtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xSaWdodCk7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCXdyaXRlbCgweDAwMDEwMDAwLCBjaGlwLT5TTUEgKyBTTUFfZHdDdXJyUGxheVBpdGNoKTsKKwl3cml0ZWwoMHgwMDAwMDAwMSwgY2hpcC0+U01BICsgU01BX2R3Q3VyclBsYXlSYXRlKTsKKyNlbmRpZgorCXdyaXRldygweDMwMywgY2hpcC0+U01BICsgU01BX3dDdXJySW5wdXRUYWdCaXRzKTsKKworCWluaXR0ZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCB1cGxvYWRfZHNwX2NvZGUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmluaXRfZncgPSBOVUxMLCAqcGVybV9mdyA9IE5VTEw7CisJaW50IGVycjsKKworCW91dGIoSFBCTEtTRUxfMCwgY2hpcC0+aW8gKyBIUF9CTEtTKTsKKworCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmluaXRfZncsIElOSVRDT0RFRklMRSwgY2FyZC0+ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBFcnJvciBsb2FkaW5nICIgSU5JVENPREVGSUxFKTsKKwkJZ290byBjbGVhbnVwMTsKKwl9CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcGVybV9mdywgUEVSTUNPREVGSUxFLCBjYXJkLT5kZXYpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IEVycm9yIGxvYWRpbmcgIiBQRVJNQ09ERUZJTEUpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJbWVtY3B5X3RvaW8oY2hpcC0+bWFwcGVkYmFzZSwgcGVybV9mdy0+ZGF0YSwgcGVybV9mdy0+c2l6ZSk7CisJaWYgKHNuZF9tc25kX3VwbG9hZF9ob3N0KGNoaXAsIGluaXRfZnctPmRhdGEsIGluaXRfZnctPnNpemUpIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIExPR05BTUUgIjogRXJyb3IgdXBsb2FkaW5nIHRvIERTUFxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gY2xlYW51cDsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FICI6IERTUCBmaXJtd2FyZSB1cGxvYWRlZFxuIik7CisJZXJyID0gMDsKKworY2xlYW51cDoKKwlyZWxlYXNlX2Zpcm13YXJlKHBlcm1fZncpOworY2xlYW51cDE6CisJcmVsZWFzZV9maXJtd2FyZShpbml0X2Z3KTsKKwlyZXR1cm4gZXJyOworfQorCisjaWZkZWYgTVNORF9DTEFTU0lDCitzdGF0aWMgdm9pZCByZXNldF9wcm90ZXVzKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCkKK3sKKwlvdXRiKEhQUFJPUkVTRVRfT04sIGNoaXAtPmlvICsgSFBfUFJPUik7CisJbXNsZWVwKFRJTUVfUFJPX1JFU0VUKTsKKwlvdXRiKEhQUFJPUkVTRVRfT0ZGLCBjaGlwLT5pbyArIEhQX1BST1IpOworCW1zbGVlcChUSU1FX1BST19SRVNFVF9ET05FKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHNuZF9tc25kX2luaXRpYWxpemUoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyLCB0aW1lb3V0OworCisjaWZkZWYgTVNORF9DTEFTU0lDCisJb3V0YihIUFdBSVRTVEFURV8wLCBjaGlwLT5pbyArIEhQX1dBSVQpOworCW91dGIoSFBCSVRNT0RFXzE2LCBjaGlwLT5pbyArIEhQX0JJVE0pOworCisJcmVzZXRfcHJvdGV1cyhjaGlwKTsKKyNlbmRpZgorCWVyciA9IHNuZF9tc25kX2luaXRfc21hKGNoaXApOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBDYW5ub3QgaW5pdGlhbGl6ZSBTTUFcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHNuZF9tc25kX3Jlc2V0X2RzcChjaGlwLT5pbywgTlVMTCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSB1cGxvYWRfZHNwX2NvZGUoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IENhbm5vdCB1cGxvYWQgRFNQIGNvZGVcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXRpbWVvdXQgPSAyMDA7CisKKwl3aGlsZSAocmVhZHcoY2hpcC0+bWFwcGVkYmFzZSkpIHsKKwkJbXNsZWVwKDEpOworCQlpZiAoIXRpbWVvdXQtLSkgeworCQkJc25kX3ByaW50ZChLRVJOX0VSUiBMT0dOQU1FICI6IERTUCByZXNldCB0aW1lb3V0XG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJc25kX21zbmRtaXhfc2V0dXAoY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfZHNwX2Z1bGxfcmVzZXQoc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlpbnQgcnY7CisKKwlpZiAodGVzdF9iaXQoRl9SRVNFVFRJTkcsICZjaGlwLT5mbGFncykgfHwgKytjaGlwLT5ucmVzZXRzID4gMTApCisJCXJldHVybiAwOworCisJc2V0X2JpdChGX1JFU0VUVElORywgJmNoaXAtPmZsYWdzKTsKKwlzbmRfbXNuZF9kc3BfaGFsdChjaGlwLCBOVUxMKTsJLyogVW5jb25kaXRpb25hbGx5IGhhbHQgKi8KKworCXJ2ID0gc25kX21zbmRfaW5pdGlhbGl6ZShjYXJkKTsKKwlpZiAocnYpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgTE9HTkFNRSAiOiBEU1AgcmVzZXQgZmFpbGVkXG4iKTsKKwlzbmRfbXNuZG1peF9mb3JjZV9yZWNzcmMoY2hpcCwgMCk7CisJY2xlYXJfYml0KEZfUkVTRVRUSU5HLCAmY2hpcC0+ZmxhZ3MpOworCXJldHVybiBydjsKK30KKworc3RhdGljIGludCBzbmRfbXNuZF9kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQoreworCXNuZF9wcmludGRkKCJzbmRfbXNuZF9jaGlwX2ZyZWUoKVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRfc2VuZF9kc3BfY21kX2NoayhzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHU4IGNtZCkKK3sKKwlpZiAoc25kX21zbmRfc2VuZF9kc3BfY21kKGNoaXAsIGNtZCkgPT0gMCkKKwkJcmV0dXJuIDA7CisJc25kX21zbmRfZHNwX2Z1bGxfcmVzZXQoY2hpcC0+Y2FyZCk7CisJcmV0dXJuIHNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBjbWQpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9jYWxpYnJhdGVfYWRjKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgdTE2IHNyYXRlKQoreworCXNuZF9wcmludGRkKCJzbmRfbXNuZF9jYWxpYnJhdGVfYWRjKCVpKVxuIiwgc3JhdGUpOworCXdyaXRldyhzcmF0ZSwgY2hpcC0+U01BICsgU01BX3dDYWxGcmVxQXRvRCk7CisJaWYgKGNoaXAtPmNhbGlicmF0ZV9zaWduYWwgPT0gMCkKKwkJd3JpdGV3KHJlYWR3KGNoaXAtPlNNQSArIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncykKKwkJICAgICAgIHwgMHgwMDAxLCBjaGlwLT5TTUEgKyBTTUFfd0N1cnJIb3N0U3RhdHVzRmxhZ3MpOworCWVsc2UKKwkJd3JpdGV3KHJlYWR3KGNoaXAtPlNNQSArIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncykKKwkJICAgICAgICYgfjB4MDAwMSwgY2hpcC0+U01BICsgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzKTsKKwlpZiAoc25kX21zbmRfc2VuZF93b3JkKGNoaXAsIDAsIDAsIEhERVhBUl9DQUxfQV9UT19EKSA9PSAwICYmCisJICAgIHNuZF9tc25kX3NlbmRfZHNwX2NtZF9jaGsoY2hpcCwgSERFWF9BVVhfUkVRKSA9PSAwKSB7CisJCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDMzMykpOworCQlyZXR1cm4gMDsKKwl9CisJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IEFEQyBjYWxpYnJhdGlvbiBmYWlsZWRcbiIpOworCXJldHVybiAtRUlPOworfQorCisvKgorICogQUxTQSBjYWxsYmFjayBmdW5jdGlvbiwgY2FsbGVkIHdoZW4gYXR0ZW1wdGluZyB0byBvcGVuIHRoZSBNSURJIGRldmljZS4KKyAqLworc3RhdGljIGludCBzbmRfbXNuZF9tcHU0MDFfb3BlbihzdHJ1Y3Qgc25kX21wdTQwMSAqbXB1KQoreworCXNuZF9tc25kX2VuYWJsZV9pcnEobXB1LT5wcml2YXRlX2RhdGEpOworCXNuZF9tc25kX3NlbmRfZHNwX2NtZChtcHUtPnByaXZhdGVfZGF0YSwgSERFWF9NSURJX0lOX1NUQVJUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc25kX21zbmRfbXB1NDAxX2Nsb3NlKHN0cnVjdCBzbmRfbXB1NDAxICptcHUpCit7CisJc25kX21zbmRfc2VuZF9kc3BfY21kKG1wdS0+cHJpdmF0ZV9kYXRhLCBIREVYX01JRElfSU5fU1RPUCk7CisJc25kX21zbmRfZGlzYWJsZV9pcnEobXB1LT5wcml2YXRlX2RhdGEpOworfQorCitzdGF0aWMgbG9uZyBtcHVfaW9bU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBtcHVfaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9hdHRhY2goc3RydWN0IHNuZF9jYXJkICpjYXJkKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlpbnQgZXJyOworCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0geworCQkuZGV2X2ZyZWUgPSAgICAgIHNuZF9tc25kX2Rldl9mcmVlLAorCQl9OworCisJZXJyID0gcmVxdWVzdF9pcnEoY2hpcC0+aXJxLCBzbmRfbXNuZF9pbnRlcnJ1cHQsIDAsIGNhcmQtPnNob3J0bmFtZSwKKwkJCSAgY2hpcCk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogQ291bGRuJ3QgZ3JhYiBJUlEgJWRcbiIsIGNoaXAtPmlycSk7CisJCXJldHVybiBlcnI7CisJfQorCXJlcXVlc3RfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8sIGNhcmQtPnNob3J0bmFtZSk7CisKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihjaGlwLT5iYXNlLCBCVUZGU0laRSwgY2FyZC0+c2hvcnRuYW1lKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJIjogdW5hYmxlIHRvIGdyYWIgbWVtb3J5IHJlZ2lvbiAweCVseC0weCVseFxuIiwKKwkJCWNoaXAtPmJhc2UsIGNoaXAtPmJhc2UgKyBCVUZGU0laRSAtIDEpOworCQlyZWxlYXNlX3JlZ2lvbihjaGlwLT5pbywgRFNQX05VTUlPKTsKKwkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJY2hpcC0+bWFwcGVkYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShjaGlwLT5iYXNlLCAweDgwMDApOworCWlmICghY2hpcC0+bWFwcGVkYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJIjogdW5hYmxlIHRvIG1hcCBtZW1vcnkgcmVnaW9uIDB4JWx4LTB4JWx4XG4iLAorCQkJY2hpcC0+YmFzZSwgY2hpcC0+YmFzZSArIEJVRkZTSVpFIC0gMSk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KKworCWVyciA9IHNuZF9tc25kX2RzcF9mdWxsX3Jlc2V0KGNhcmQpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKworCS8qIFJlZ2lzdGVyIGRldmljZSAqLworCWVyciA9IHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9MT1dMRVZFTCwgY2hpcCwgJm9wcyk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCisJZXJyID0gc25kX21zbmRfcGNtKGNhcmQsIDAsIE5VTEwpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IGVycm9yIGNyZWF0aW5nIG5ldyBQQ00gZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJfQorCisJZXJyID0gc25kX21zbmRtaXhfbmV3KGNhcmQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IGVycm9yIGNyZWF0aW5nIG5ldyBNaXhlciBkZXZpY2VcbiIpOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CisKKworCWlmIChtcHVfaW9bMF0gIT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXN0cnVjdCBzbmRfbXB1NDAxICptcHU7CisKKwkJZXJyID0gc25kX21wdTQwMV91YXJ0X25ldyhjYXJkLCAwLCBNUFU0MDFfSFdfTVBVNDAxLAorCQkJCQkgIG1wdV9pb1swXSwKKwkJCQkJICBNUFU0MDFfTU9ERV9JTlBVVCB8CisJCQkJCSAgTVBVNDAxX01PREVfT1VUUFVULAorCQkJCQkgIG1wdV9pcnFbMF0sIElSUUZfRElTQUJMRUQsCisJCQkJCSAgJmNoaXAtPnJtaWRpKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FCisJCQkJIjogZXJyb3IgY3JlYXRpbmcgbmV3IE1pZGkgZGV2aWNlXG4iKTsKKwkJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCQl9CisJCW1wdSA9IGNoaXAtPnJtaWRpLT5wcml2YXRlX2RhdGE7CisKKwkJbXB1LT5vcGVuX2lucHV0ID0gc25kX21zbmRfbXB1NDAxX29wZW47CisJCW1wdS0+Y2xvc2VfaW5wdXQgPSBzbmRfbXNuZF9tcHU0MDFfY2xvc2U7CisJCW1wdS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKKwl9CisKKwlkaXNhYmxlX2lycShjaGlwLT5pcnEpOworCXNuZF9tc25kX2NhbGlicmF0ZV9hZGMoY2hpcCwgY2hpcC0+cGxheV9zYW1wbGVfcmF0ZSk7CisJc25kX21zbmRtaXhfZm9yY2VfcmVjc3JjKGNoaXAsIDApOworCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCisJcmV0dXJuIDA7CisKK2Vycl9yZWxlYXNlX3JlZ2lvbjoKKwlpZiAoY2hpcC0+bWFwcGVkYmFzZSkKKwkJaW91bm1hcChjaGlwLT5tYXBwZWRiYXNlKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oY2hpcC0+YmFzZSwgQlVGRlNJWkUpOworCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOworCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgc25kX21zbmRfdW5sb2FkKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisKKwlpb3VubWFwKGNoaXAtPm1hcHBlZGJhc2UpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihjaGlwLT5iYXNlLCBCVUZGU0laRSk7CisJcmVsZWFzZV9yZWdpb24oY2hpcC0+aW8sIERTUF9OVU1JTyk7CisJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworfQorCisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCisvKiBQaW5uYWNsZS9GaWppIExvZ2ljYWwgRGV2aWNlIENvbmZpZ3VyYXRpb24gKi8KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnKGludCBjZmcsIGludCByZWcsIGludCB2YWx1ZSkKK3sKKwlvdXRiKHJlZywgY2ZnKTsKKwlvdXRiKHZhbHVlLCBjZmcgKyAxKTsKKwlpZiAodmFsdWUgIT0gaW5iKGNmZyArIDEpKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IHNuZF9tc25kX3dyaXRlX2NmZzogSS9PIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmdfaW8wKGludCBjZmcsIGludCBudW0sIHUxNiBpbykKK3sKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMF9CQVNFSEksIEhJQllURShpbykpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JTzBfQkFTRUxPLCBMT0JZVEUoaW8pKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19pbzEoaW50IGNmZywgaW50IG51bSwgdTE2IGlvKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSU8xX0JBU0VISSwgSElCWVRFKGlvKSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0lPMV9CQVNFTE8sIExPQllURShpbykpKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfd3JpdGVfY2ZnX2lycShpbnQgY2ZnLCBpbnQgbnVtLCB1MTYgaXJxKQoreworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfSVJRX05VTUJFUiwgTE9CWVRFKGlycSkpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19JUlFfVFlQRSwgSVJRVFlQRV9FREdFKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX3dyaXRlX2NmZ19tZW0oaW50IGNmZywgaW50IG51bSwgaW50IG1lbSkKK3sKKwl1MTYgd21lbTsKKworCW1lbSA+Pj0gODsKKwl3bWVtID0gKHUxNikobWVtICYgMHhmZmYpOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0xPR0RFVklDRSwgbnVtKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTUVNQkFTRUhJLCBISUJZVEUod21lbSkpKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19NRU1CQVNFTE8sIExPQllURSh3bWVtKSkpCisJCXJldHVybiAtRUlPOworCWlmICh3bWVtICYmIHNuZF9tc25kX3dyaXRlX2NmZyhjZmcsIElSRUdfTUVNQ09OVFJPTCwKKwkJCQkgICAgICAgTUVNVFlQRV9ISUFERFIgfCBNRU1UWVBFXzE2QklUKSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2FjdGl2YXRlX2xvZ2ljYWwoaW50IGNmZywgaW50IG51bSkKK3sKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmcoY2ZnLCBJUkVHX0FDVElWQVRFLCBMRF9BQ1RJVkFURSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChpbnQgY2ZnLCBpbnQgbnVtLCB1MTYgaW8wLAorCQkJCQkJdTE2IGlvMSwgdTE2IGlycSwgaW50IG1lbSkKK3sKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnKGNmZywgSVJFR19MT0dERVZJQ0UsIG51bSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmdfaW8wKGNmZywgbnVtLCBpbzApKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfd3JpdGVfY2ZnX2lvMShjZmcsIG51bSwgaW8xKSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKHNuZF9tc25kX3dyaXRlX2NmZ19pcnEoY2ZnLCBudW0sIGlycSkpCisJCXJldHVybiAtRUlPOworCWlmIChzbmRfbXNuZF93cml0ZV9jZmdfbWVtKGNmZywgbnVtLCBtZW0pKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoc25kX21zbmRfYWN0aXZhdGVfbG9naWNhbChjZmcsIG51bSkpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9waW5uYWNsZV9jZmdfcmVzZXQoaW50IGNmZykKK3sKKwlpbnQgaTsKKworCS8qIFJlc2V0IGRldmljZXMgaWYgdG9sZCB0byAqLworCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiBSZXNldHRpbmcgYWxsIGRldmljZXNcbiIpOworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJCWlmIChzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChjZmcsIGksIDAsIDAsIDAsIDApKQorCQkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLworc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJJbmRleCB2YWx1ZSBmb3IgbXNuZF9waW5uYWNsZSBzb3VuZGNhcmQuIik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIG1zbmRfcGlubmFjbGUgc291bmRjYXJkLiIpOworCitzdGF0aWMgbG9uZyBpb1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CitzdGF0aWMgaW50IGlycVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lSUTsKK3N0YXRpYyBsb25nIG1lbVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CisKK3N0YXRpYyBsb25nIGNmZ1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CisKKyNpZm5kZWYgTVNORF9DTEFTU0lDCisvKiBFeHRyYSBQZXJpcGhlcmFsIENvbmZpZ3VyYXRpb24gKERlZmF1bHQ6IERpc2FibGUpICovCitzdGF0aWMgbG9uZyBpZGVfaW8wW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfUE9SVDsKK3N0YXRpYyBsb25nIGlkZV9pbzFbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9QT1JUOworc3RhdGljIGludCBpZGVfaXJxW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSVJROworCitzdGF0aWMgbG9uZyBqb3lzdGlja19pb1tTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1BPUlQ7CisvKiBJZiB3ZSBoYXZlIHRoZSBkaWdpdGFsIGRhdWdoZXJib2FyZC4uLiAqLworc3RhdGljIGludCBkaWdpdGFsW1NORFJWX0NBUkRTXTsKKworLyogRXh0cmEgUGVyaXBoZXJhbCBDb25maWd1cmF0aW9uICovCitzdGF0aWMgaW50IHJlc2V0W1NORFJWX0NBUkRTXTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHdyaXRlX25kZWxheVtTTkRSVl9DQVJEU10gPSB7IFswIC4uLiAoU05EUlZfQ0FSRFMtMSldID0gMSB9OworCitzdGF0aWMgaW50IGNhbGlicmF0ZV9zaWduYWw7CisKKyNpZmRlZiBDT05GSUdfUE5QCitzdGF0aWMgaW50IGlzYXBucFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7Cittb2R1bGVfcGFyYW1fYXJyYXkoaXNhcG5wLCBib29sLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaXNhcG5wLCAiSVNBIFBuUCBkZXRlY3Rpb24gZm9yIHNwZWNpZmllZCBzb3VuZGNhcmQuIik7CisjZGVmaW5lIGhhc19pc2FwbnAoeCkgaXNhcG5wW3hdCisjZWxzZQorI2RlZmluZSBoYXNfaXNhcG5wKHgpIDAKKyNlbmRpZgorCitNT0RVTEVfQVVUSE9SKCJLYXJzdGVuIFdpZXNlIDxhbm5hYmVsbGVzZ2FyZGVuQHlhaG9vLmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUdXJ0bGUgQmVhY2ggIiBMT05HTkFNRSAiIExpbnV4IERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0ZJUk1XQVJFKElOSVRDT0RFRklMRSk7CitNT0RVTEVfRklSTVdBUkUoUEVSTUNPREVGSUxFKTsKKworbW9kdWxlX3BhcmFtX2FycmF5KGlvLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJTyBwb3J0ICMiKTsKK21vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkobWVtLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheSh3cml0ZV9uZGVsYXksIGludCwgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW0oY2FsaWJyYXRlX3NpZ25hbCwgaW50LCBTX0lSVUdPKTsKKyNpZm5kZWYgTVNORF9DTEFTU0lDCittb2R1bGVfcGFyYW1fYXJyYXkoZGlnaXRhbCwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShjZmcsIGxvbmcsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KHJlc2V0LCBpbnQsIDAsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KG1wdV9pbywgbG9uZywgTlVMTCwgU19JUlVHTyk7Cittb2R1bGVfcGFyYW1fYXJyYXkobXB1X2lycSwgaW50LCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZGVfaW8wLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZGVfaW8xLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKK21vZHVsZV9wYXJhbV9hcnJheShpZGVfaXJxLCBpbnQsIE5VTEwsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtX2FycmF5KGpveXN0aWNrX2lvLCBsb25nLCBOVUxMLCBTX0lSVUdPKTsKKyNlbmRpZgorCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9tc25kX2lzYV9tYXRjaChzdHJ1Y3QgZGV2aWNlICpwZGV2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlpZiAoaW9baV0gPT0gU05EUlZfQVVUT19QT1JUKQorCQlyZXR1cm4gMDsKKworCWlmIChpcnFbaV0gPT0gU05EUlZfQVVUT19QT1JUIHx8IG1lbVtpXSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBMT0dOQU1FICI6IGlvLCBpcnEgYW5kIG1lbSBtdXN0IGJlIHNldFxuIik7CisJCXJldHVybiAwOworCX0KKworI2lmZGVmIE1TTkRfQ0xBU1NJQworCWlmICghKGlvW2ldID09IDB4MjkwIHx8CisJICAgICAgaW9baV0gPT0gMHgyNjAgfHwKKwkgICAgICBpb1tpXSA9PSAweDI1MCB8fAorCSAgICAgIGlvW2ldID09IDB4MjQwIHx8CisJICAgICAgaW9baV0gPT0gMHgyMzAgfHwKKwkgICAgICBpb1tpXSA9PSAweDIyMCB8fAorCSAgICAgIGlvW2ldID09IDB4MjEwIHx8CisJICAgICAgaW9baV0gPT0gMHgzZTApKSB7CisJCXByaW50ayhLRVJOX0VSUiBMT0dOQU1FICI6IFwiaW9cIiAtIERTUCBJL08gYmFzZSBtdXN0IGJlIHNldCAiCisJCQkiIHRvIDB4MjEwLCAweDIyMCwgMHgyMzAsIDB4MjQwLCAweDI1MCwgMHgyNjAsIDB4MjkwLCAiCisJCQkib3IgMHgzRTBcbiIpOworCQlyZXR1cm4gMDsKKwl9CisjZWxzZQorCWlmIChpb1tpXSA8IDB4MTAwIHx8IGlvW2ldID4gMHgzZTAgfHwgKGlvW2ldICUgMHgxMCkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJIjogXCJpb1wiIC0gRFNQIEkvTyBiYXNlIG11c3Qgd2l0aGluIHRoZSByYW5nZSAweDEwMCAiCisJCQkidG8gMHgzRTAgYW5kIG11c3QgYmUgZXZlbmx5IGRpdmlzaWJsZSBieSAweDEwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmIC8qIE1TTkRfQ0xBU1NJQyAqLworCisJaWYgKCEoaXJxW2ldID09IDUgfHwKKwkgICAgICBpcnFbaV0gPT0gNyB8fAorCSAgICAgIGlycVtpXSA9PSA5IHx8CisJICAgICAgaXJxW2ldID09IDEwIHx8CisJICAgICAgaXJxW2ldID09IDExIHx8CisJICAgICAgaXJxW2ldID09IDEyKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRQorCQkJIjogXCJpcnFcIiAtIG11c3QgYmUgc2V0IHRvIDUsIDcsIDksIDEwLCAxMSBvciAxMlxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmICghKG1lbVtpXSA9PSAweGIwMDAwIHx8CisJICAgICAgbWVtW2ldID09IDB4YzgwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhkMDAwMCB8fAorCSAgICAgIG1lbVtpXSA9PSAweGQ4MDAwIHx8CisJICAgICAgbWVtW2ldID09IDB4ZTAwMDAgfHwKKwkgICAgICBtZW1baV0gPT0gMHhlODAwMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogXCJtZW1cIiAtIG11c3QgYmUgc2V0IHRvICIKKwkJICAgICAgICIweGIwMDAwLCAweGM4MDAwLCAweGQwMDAwLCAweGQ4MDAwLCAweGUwMDAwIG9yICIKKwkJICAgICAgICIweGU4MDAwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWlmIChjZmdbaV0gPT0gU05EUlZfQVVUT19QT1JUKSB7CisJCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiBBc3N1bWluZyBQblAgbW9kZVxuIik7CisJfSBlbHNlIGlmIChjZmdbaV0gIT0gMHgyNTAgJiYgY2ZnW2ldICE9IDB4MjYwICYmIGNmZ1tpXSAhPSAweDI3MCkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUKKwkJCSI6IENvbmZpZyBwb3J0IG11c3QgYmUgMHgyNTAsIDB4MjYwIG9yIDB4MjcwICIKKwkJCSIob3IgdW5zcGVjaWZpZWQgZm9yIFBuUCBtb2RlKVxuIik7CisJCXJldHVybiAwOworCX0KKyNlbmRpZiAvKiBNU05EX0NMQVNTSUMgKi8KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfbXNuZF9pc2FfcHJvYmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGlkeCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXA7CisKKwlpZiAoaGFzX2lzYXBucChpZHgpIHx8IGNmZ1tpZHhdID09IFNORFJWX0FVVE9fUE9SVCkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUgIjogQXNzdW1pbmcgUG5QIG1vZGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9tc25kKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKKwljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOworCWNoaXAtPmNhcmQgPSBjYXJkOworCisjaWZkZWYgTVNORF9DTEFTU0lDCisJc3dpdGNoIChpcnFbaWR4XSkgeworCWNhc2UgNToKKwkJY2hpcC0+aXJxaWQgPSBIUElSUV81OyBicmVhazsKKwljYXNlIDc6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfNzsgYnJlYWs7CisJY2FzZSA5OgorCQljaGlwLT5pcnFpZCA9IEhQSVJRXzk7IGJyZWFrOworCWNhc2UgMTA6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfMTA7IGJyZWFrOworCWNhc2UgMTE6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfMTE7IGJyZWFrOworCWNhc2UgMTI6CisJCWNoaXAtPmlycWlkID0gSFBJUlFfMTI7IGJyZWFrOworCX0KKworCXN3aXRjaCAobWVtW2lkeF0pIHsKKwljYXNlIDB4YjAwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fQjAwMDsgYnJlYWs7CisJY2FzZSAweGM4MDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0M4MDA7IGJyZWFrOworCWNhc2UgMHhkMDAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9EMDAwOyBicmVhazsKKwljYXNlIDB4ZDgwMDA6CisJCWNoaXAtPm1lbWlkID0gSFBNRU1fRDgwMDsgYnJlYWs7CisJY2FzZSAweGUwMDAwOgorCQljaGlwLT5tZW1pZCA9IEhQTUVNX0UwMDA7IGJyZWFrOworCWNhc2UgMHhlODAwMDoKKwkJY2hpcC0+bWVtaWQgPSBIUE1FTV9FODAwOyBicmVhazsKKwl9CisjZWxzZQorCXByaW50ayhLRVJOX0lORk8gTE9HTkFNRSAiOiBOb24tUG5QIG1vZGU6IGNvbmZpZ3VyaW5nIGF0IHBvcnQgMHglbHhcbiIsCisJCQljZmdbaWR4XSk7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGNmZ1tpZHhdLCAyLCAiUGlubmFjbGUvRmlqaSBDb25maWciKSkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBDb25maWcgcG9ydCAweCVseCBjb25mbGljdFxuIiwKKwkJCSAgIGNmZ1tpZHhdKTsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChyZXNldFtpZHhdKQorCQlpZiAoc25kX21zbmRfcGlubmFjbGVfY2ZnX3Jlc2V0KGNmZ1tpZHhdKSkgeworCQkJZXJyID0gLUVJTzsKKwkJCWdvdG8gY2ZnX2Vycm9yOworCQl9CisKKwkvKiBEU1AgKi8KKwllcnIgPSBzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChjZmdbaWR4XSwgMCwKKwkJCQkJIGlvW2lkeF0sIDAsCisJCQkJCSBpcnFbaWR4XSwgbWVtW2lkeF0pOworCisJaWYgKGVycikKKwkJZ290byBjZmdfZXJyb3I7CisKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBQaW5uYWNsZSBzcGVjaWZpYyAqLworCisJLyogTVBVICovCisJaWYgKG1wdV9pb1tpZHhdICE9IFNORFJWX0FVVE9fUE9SVAorCSAgICAmJiBtcHVfaXJxW2lkeF0gIT0gU05EUlZfQVVUT19JUlEpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBMT0dOQU1FCisJCSAgICAgICAiOiBDb25maWd1cmluZyBNUFUgdG8gSS9PIDB4JWx4IElSUSAlZFxuIiwKKwkJICAgICAgIG1wdV9pb1tpZHhdLCBtcHVfaXJxW2lkeF0pOworCQllcnIgPSBzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChjZmdbaWR4XSwgMSwKKwkJCQkJCSBtcHVfaW9baWR4XSwgMCwKKwkJCQkJCSBtcHVfaXJxW2lkeF0sIDApOworCisJCWlmIChlcnIpCisJCQlnb3RvIGNmZ19lcnJvcjsKKwl9CisKKwkvKiBJREUgKi8KKwlpZiAoaWRlX2lvMFtpZHhdICE9IFNORFJWX0FVVE9fUE9SVAorCSAgICAmJiBpZGVfaW8xW2lkeF0gIT0gU05EUlZfQVVUT19QT1JUCisJICAgICYmIGlkZV9pcnFbaWR4XSAhPSBTTkRSVl9BVVRPX0lSUSkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUKKwkJICAgICAgICI6IENvbmZpZ3VyaW5nIElERSB0byBJL08gMHglbHgsIDB4JWx4IElSUSAlZFxuIiwKKwkJICAgICAgIGlkZV9pbzBbaWR4XSwgaWRlX2lvMVtpZHhdLCBpZGVfaXJxW2lkeF0pOworCQllcnIgPSBzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChjZmdbaWR4XSwgMiwKKwkJCQkJCSBpZGVfaW8wW2lkeF0sIGlkZV9pbzFbaWR4XSwKKwkJCQkJCSBpZGVfaXJxW2lkeF0sIDApOworCisJCWlmIChlcnIpCisJCQlnb3RvIGNmZ19lcnJvcjsKKwl9CisKKwkvKiBKb3lzdGljayAqLworCWlmIChqb3lzdGlja19pb1tpZHhdICE9IFNORFJWX0FVVE9fUE9SVCkgeworCQlwcmludGsoS0VSTl9JTkZPIExPR05BTUUKKwkJICAgICAgICI6IENvbmZpZ3VyaW5nIGpveXN0aWNrIHRvIEkvTyAweCVseFxuIiwKKwkJICAgICAgIGpveXN0aWNrX2lvW2lkeF0pOworCQllcnIgPSBzbmRfbXNuZF93cml0ZV9jZmdfbG9naWNhbChjZmdbaWR4XSwgMywKKwkJCQkJCSBqb3lzdGlja19pb1tpZHhdLCAwLAorCQkJCQkJIDAsIDApOworCisJCWlmIChlcnIpCisJCQlnb3RvIGNmZ19lcnJvcjsKKwl9CisJcmVsZWFzZV9yZWdpb24oY2ZnW2lkeF0sIDIpOworCisjZW5kaWYgLyogTVNORF9DTEFTU0lDICovCisKKwlzZXRfZGVmYXVsdF9hdWRpb19wYXJhbWV0ZXJzKGNoaXApOworI2lmZGVmIE1TTkRfQ0xBU1NJQworCWNoaXAtPnR5cGUgPSBtc25kQ2xhc3NpYzsKKyNlbHNlCisJY2hpcC0+dHlwZSA9IG1zbmRQaW5uYWNsZTsKKyNlbmRpZgorCWNoaXAtPmlvID0gaW9baWR4XTsKKwljaGlwLT5pcnEgPSBpcnFbaWR4XTsKKwljaGlwLT5iYXNlID0gbWVtW2lkeF07CisKKwljaGlwLT5jYWxpYnJhdGVfc2lnbmFsID0gY2FsaWJyYXRlX3NpZ25hbCA/IDEgOiAwOworCWNoaXAtPnJlY3NyYyA9IDA7CisJY2hpcC0+ZHNwcV9kYXRhX2J1ZmYgPSBEU1BRX0RBVEFfQlVGRjsKKwljaGlwLT5kc3BxX2J1ZmZfc2l6ZSA9IERTUFFfQlVGRl9TSVpFOworCWlmICh3cml0ZV9uZGVsYXlbaWR4XSkKKwkJY2xlYXJfYml0KEZfRElTQUJMRV9XUklURV9OREVMQVksICZjaGlwLT5mbGFncyk7CisJZWxzZQorCQlzZXRfYml0KEZfRElTQUJMRV9XUklURV9OREVMQVksICZjaGlwLT5mbGFncyk7CisjaWZuZGVmIE1TTkRfQ0xBU1NJQworCWlmIChkaWdpdGFsW2lkeF0pCisJCXNldF9iaXQoRl9IQVZFRElHSVRBTCwgJmNoaXAtPmZsYWdzKTsKKyNlbmRpZgorCXNwaW5fbG9ja19pbml0KCZjaGlwLT5sb2NrKTsKKwllcnIgPSBzbmRfbXNuZF9wcm9iZShjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBQcm9iZSBmYWlsZWRcbiIpOworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHNuZF9tc25kX2F0dGFjaChjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBBdHRhY2ggZmFpbGVkXG4iKTsKKwkJc25kX2NhcmRfZnJlZShjYXJkKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJZGV2X3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpOworCisJcmV0dXJuIDA7CisKKyNpZm5kZWYgTVNORF9DTEFTU0lDCitjZmdfZXJyb3I6CisJcmVsZWFzZV9yZWdpb24oY2ZnW2lkeF0sIDIpOworCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CisJcmV0dXJuIGVycjsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzbmRfbXNuZF9pc2FfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBkZXYpCit7CisJc25kX21zbmRfdW5sb2FkKGRldl9nZXRfZHJ2ZGF0YShwZGV2KSk7CisJZGV2X3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIERFVl9OQU1FICJtc25kLXBpbm5hY2xlIgorCitzdGF0aWMgc3RydWN0IGlzYV9kcml2ZXIgc25kX21zbmRfZHJpdmVyID0geworCS5tYXRjaAkJPSBzbmRfbXNuZF9pc2FfbWF0Y2gsCisJLnByb2JlCQk9IHNuZF9tc25kX2lzYV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNuZF9tc25kX2lzYV9yZW1vdmUpLAorCS8qIEZJWE1FOiBzdXNwZW5kLCByZXN1bWUgKi8KKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBERVZfTkFNRQorCX0sCit9OworCisjaWZkZWYgQ09ORklHX1BOUAorc3RhdGljIGludCBfX2RldmluaXQgc25kX21zbmRfcG5wX2RldGVjdChzdHJ1Y3QgcG5wX2NhcmRfbGluayAqcGNhcmQsCisJCQkJCSBjb25zdCBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkICpwaWQpCit7CisJc3RhdGljIGludCBpZHg7CisJc3RydWN0IHBucF9kZXYgKnBucF9kZXY7CisJc3RydWN0IHBucF9kZXYgKm1wdV9kZXY7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcDsKKwlpbnQgcmV0OworCisJZm9yICggOyBpZHggPCBTTkRSVl9DQVJEUzsgaWR4KyspIHsKKwkJaWYgKGhhc19pc2FwbnAoaWR4KSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaWR4ID49IFNORFJWX0NBUkRTKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qCisJICogQ2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIHJvb20gZm9yIGFub3RoZXIgc291bmQgY2FyZCAuLi4KKwkgKi8KKwlwbnBfZGV2ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UocGNhcmQsIHBpZC0+ZGV2c1swXS5pZCwgTlVMTCk7CisJaWYgKCFwbnBfZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW1wdV9kZXYgPSBwbnBfcmVxdWVzdF9jYXJkX2RldmljZShwY2FyZCwgcGlkLT5kZXZzWzFdLmlkLCBOVUxMKTsKKwlpZiAoIW1wdV9kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFwbnBfaXNfYWN0aXZlKHBucF9kZXYpICYmIHBucF9hY3RpdmF0ZV9kZXYocG5wX2RldikgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1zbmRfcGlubmFjbGU6IGRldmljZSBpcyBpbmFjdGl2ZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKCFwbnBfaXNfYWN0aXZlKG1wdV9kZXYpICYmIHBucF9hY3RpdmF0ZV9kZXYobXB1X2RldikgPCAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIm1zbmRfcGlubmFjbGU6IE1QVSBkZXZpY2UgaXMgaW5hY3RpdmVcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qCisJICogQ3JlYXRlIGEgbmV3IEFMU0Egc291bmQgY2FyZCBlbnRyeSwgaW4gYW50aWNpcGF0aW9uCisJICogb2YgZGV0ZWN0aW5nIG91ciBoYXJkd2FyZSAuLi4KKwkgKi8KKwlyZXQgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbaWR4XSwgaWRbaWR4XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9tc25kKSwgJmNhcmQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwljaGlwLT5jYXJkID0gY2FyZDsKKwlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2FyZC0+Y2FyZC0+ZGV2KTsKKworCS8qCisJICogUmVhZCB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIG9mZiB0aGUgSVNBIFBuUCBidXMgLi4uCisJICovCisJaW9baWR4XSA9IHBucF9wb3J0X3N0YXJ0KHBucF9kZXYsIDApOworCWlycVtpZHhdID0gcG5wX2lycShwbnBfZGV2LCAwKTsKKwltZW1baWR4XSA9IHBucF9tZW1fc3RhcnQocG5wX2RldiwgMCk7CisJbXB1X2lvW2lkeF0gPSBwbnBfcG9ydF9zdGFydChtcHVfZGV2LCAwKTsKKwltcHVfaXJxW2lkeF0gPSBwbnBfaXJxKG1wdV9kZXYsIDApOworCisJc2V0X2RlZmF1bHRfYXVkaW9fcGFyYW1ldGVycyhjaGlwKTsKKyNpZmRlZiBNU05EX0NMQVNTSUMKKwljaGlwLT50eXBlID0gbXNuZENsYXNzaWM7CisjZWxzZQorCWNoaXAtPnR5cGUgPSBtc25kUGlubmFjbGU7CisjZW5kaWYKKwljaGlwLT5pbyA9IGlvW2lkeF07CisJY2hpcC0+aXJxID0gaXJxW2lkeF07CisJY2hpcC0+YmFzZSA9IG1lbVtpZHhdOworCisJY2hpcC0+Y2FsaWJyYXRlX3NpZ25hbCA9IGNhbGlicmF0ZV9zaWduYWwgPyAxIDogMDsKKwljaGlwLT5yZWNzcmMgPSAwOworCWNoaXAtPmRzcHFfZGF0YV9idWZmID0gRFNQUV9EQVRBX0JVRkY7CisJY2hpcC0+ZHNwcV9idWZmX3NpemUgPSBEU1BRX0JVRkZfU0laRTsKKwlpZiAod3JpdGVfbmRlbGF5W2lkeF0pCisJCWNsZWFyX2JpdChGX0RJU0FCTEVfV1JJVEVfTkRFTEFZLCAmY2hpcC0+ZmxhZ3MpOworCWVsc2UKKwkJc2V0X2JpdChGX0RJU0FCTEVfV1JJVEVfTkRFTEFZLCAmY2hpcC0+ZmxhZ3MpOworI2lmbmRlZiBNU05EX0NMQVNTSUMKKwlpZiAoZGlnaXRhbFtpZHhdKQorCQlzZXRfYml0KEZfSEFWRURJR0lUQUwsICZjaGlwLT5mbGFncyk7CisjZW5kaWYKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bG9jayk7CisJcmV0ID0gc25kX21zbmRfcHJvYmUoY2FyZCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogUHJvYmUgZmFpbGVkXG4iKTsKKwkJZ290byBfcmVsZWFzZV9jYXJkOworCX0KKworCXJldCA9IHNuZF9tc25kX2F0dGFjaChjYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgTE9HTkFNRSAiOiBBdHRhY2ggZmFpbGVkXG4iKTsKKwkJZ290byBfcmVsZWFzZV9jYXJkOworCX0KKworCXBucF9zZXRfY2FyZF9kcnZkYXRhKHBjYXJkLCBjYXJkKTsKKwkrK2lkeDsKKwlyZXR1cm4gMDsKKworX3JlbGVhc2VfY2FyZDoKKwlzbmRfY2FyZF9mcmVlKGNhcmQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBzbmRfbXNuZF9wbnBfcmVtb3ZlKHN0cnVjdCBwbnBfY2FyZF9saW5rICpwY2FyZCkKK3sKKwlzbmRfbXNuZF91bmxvYWQocG5wX2dldF9jYXJkX2RydmRhdGEocGNhcmQpKTsKKwlwbnBfc2V0X2NhcmRfZHJ2ZGF0YShwY2FyZCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgaXNhX3JlZ2lzdGVyZWQ7CitzdGF0aWMgaW50IHBucF9yZWdpc3RlcmVkOworCitzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCBtc25kX3BucGlkc1tdID0geworCS8qIFBpbm5hY2xlIFBuUCAqLworCXsgLmlkID0gIkJWSjA0NDAiLCAuZGV2cyA9IHsgeyAiVEJTMDAwMCIgfSwgeyAiVEJTMDAwMSIgfSB9IH0sCisJeyAuaWQgPSAiIiB9CS8qIGVuZCAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwbnBfY2FyZCwgbXNuZF9wbnBpZHMpOworCitzdGF0aWMgc3RydWN0IHBucF9jYXJkX2RyaXZlciBtc25kX3BucGNfZHJpdmVyID0geworCS5mbGFncyA9IFBOUF9EUklWRVJfUkVTX0RPX05PVF9DSEFOR0UsCisJLm5hbWUgPSAibXNuZF9waW5uYWNsZSIsCisJLmlkX3RhYmxlID0gbXNuZF9wbnBpZHMsCisJLnByb2JlID0gc25kX21zbmRfcG5wX2RldGVjdCwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc25kX21zbmRfcG5wX3JlbW92ZSksCit9OworI2VuZGlmIC8qIENPTkZJR19QTlAgKi8KKworc3RhdGljIGludCBfX2luaXQgc25kX21zbmRfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisKKwllcnIgPSBpc2FfcmVnaXN0ZXJfZHJpdmVyKCZzbmRfbXNuZF9kcml2ZXIsIFNORFJWX0NBUkRTKTsKKyNpZmRlZiBDT05GSUdfUE5QCisJaWYgKCFlcnIpCisJCWlzYV9yZWdpc3RlcmVkID0gMTsKKworCWVyciA9IHBucF9yZWdpc3Rlcl9jYXJkX2RyaXZlcigmbXNuZF9wbnBjX2RyaXZlcik7CisJaWYgKCFlcnIpCisJCXBucF9yZWdpc3RlcmVkID0gMTsKKworCWlmIChpc2FfcmVnaXN0ZXJlZCkKKwkJZXJyID0gMDsKKyNlbmRpZgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbmRfbXNuZF9leGl0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1BOUAorCWlmIChwbnBfcmVnaXN0ZXJlZCkKKwkJcG5wX3VucmVnaXN0ZXJfY2FyZF9kcml2ZXIoJm1zbmRfcG5wY19kcml2ZXIpOworCWlmIChpc2FfcmVnaXN0ZXJlZCkKKyNlbmRpZgorCQlpc2FfdW5yZWdpc3Rlcl9kcml2ZXIoJnNuZF9tc25kX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNuZF9tc25kX2luaXQpOworbW9kdWxlX2V4aXQoc25kX21zbmRfZXhpdCk7CisKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuaCBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODMxOGQxCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5oCkBAIC0wLDAgKzEsMTgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogbXNuZF9waW5uYWNsZS5oCisgKgorICogVHVydGxlIEJlYWNoIE11bHRpU291bmQgU291bmQgQ2FyZCBEcml2ZXIgZm9yIExpbnV4CisgKgorICogU29tZSBwYXJ0cyBvZiB0aGlzIGhlYWRlciBmaWxlIHdlcmUgZGVyaXZlZCBmcm9tIHRoZSBUdXJ0bGUgQmVhY2gKKyAqIE11bHRpU291bmQgRHJpdmVyIERldmVsb3BtZW50IEtpdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggQW5kcmV3IFZlbGlhdGgKKyAqIENvcHlyaWdodCAoQykgMTk5MyBUdXJ0bGUgQmVhY2ggU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NU05EX1BJTk5BQ0xFX0gKKyNkZWZpbmUgX19NU05EX1BJTk5BQ0xFX0gKKworI2RlZmluZSBEU1BfTlVNSU8JCQkJMHgwOAorCisjZGVmaW5lIElSRUdfTE9HREVWSUNFCQkJCTB4MDcKKyNkZWZpbmUgSVJFR19BQ1RJVkFURQkJCQkweDMwCisjZGVmaW5lIExEX0FDVElWQVRFCQkJCTB4MDEKKyNkZWZpbmUgTERfRElTQUNUSVZBVEUJCQkJMHgwMAorI2RlZmluZSBJUkVHX0VFQ09OVFJPTAkJCQkweDNGCisjZGVmaW5lIElSRUdfTUVNQkFTRUhJCQkJCTB4NDAKKyNkZWZpbmUgSVJFR19NRU1CQVNFTE8JCQkJMHg0MQorI2RlZmluZSBJUkVHX01FTUNPTlRST0wJCQkJMHg0MgorI2RlZmluZSBJUkVHX01FTVJBTkdFSEkJCQkJMHg0MworI2RlZmluZSBJUkVHX01FTVJBTkdFTE8JCQkJMHg0NAorI2RlZmluZSBNRU1UWVBFXzhCSVQJCQkJMHgwMAorI2RlZmluZSBNRU1UWVBFXzE2QklUCQkJCTB4MDIKKyNkZWZpbmUgTUVNVFlQRV9SQU5HRQkJCQkweDAwCisjZGVmaW5lIE1FTVRZUEVfSElBRERSCQkJCTB4MDEKKyNkZWZpbmUgSVJFR19JTzBfQkFTRUhJCQkJCTB4NjAKKyNkZWZpbmUgSVJFR19JTzBfQkFTRUxPCQkJCTB4NjEKKyNkZWZpbmUgSVJFR19JTzFfQkFTRUhJCQkJCTB4NjIKKyNkZWZpbmUgSVJFR19JTzFfQkFTRUxPCQkJCTB4NjMKKyNkZWZpbmUgSVJFR19JUlFfTlVNQkVSCQkJCTB4NzAKKyNkZWZpbmUgSVJFR19JUlFfVFlQRQkJCQkweDcxCisjZGVmaW5lIElSUVRZUEVfSElHSAkJCQkweDAyCisjZGVmaW5lIElSUVRZUEVfTE9XCQkJCTB4MDAKKyNkZWZpbmUgSVJRVFlQRV9MRVZFTAkJCQkweDAxCisjZGVmaW5lIElSUVRZUEVfRURHRQkJCQkweDAwCisKKyNkZWZpbmUJSFBfRFNQUgkJCQkJMHgwNAorI2RlZmluZQlIUF9CTEtTCQkJCQkweDA0CisKKyNkZWZpbmUgSFBEU1BSRVNFVF9PRkYJCQkJMgorI2RlZmluZSBIUERTUFJFU0VUX09OCQkJCTAKKworI2RlZmluZSBIUEJMS1NFTF8wCQkJCTIKKyNkZWZpbmUgSFBCTEtTRUxfMQkJCQkzCisKKyNkZWZpbmUJSElNVF9EQVRfT0ZGCQkJCTB4MDMKKworI2RlZmluZQlISURTUF9QTEFZX1VOREVSCQkJMHgwMAorI2RlZmluZQlISURTUF9JTlRfUExBWV9VTkRFUgkJCTB4MDEKKyNkZWZpbmUJSElEU1BfU1NJX1RYX1VOREVSICAJCQkweDAyCisjZGVmaW5lIEhJRFNQX1JFQ1FfT1ZFUkZMT1cJCQkweDA4CisjZGVmaW5lIEhJRFNQX0lOVF9SRUNPUkRfT1ZFUgkJCTB4MDkKKyNkZWZpbmUgSElEU1BfU1NJX1JYX09WRVJGTE9XCQkJMHgwYQorCisjZGVmaW5lCUhJRFNQX01JRElfSU5fT1ZFUgkJCTB4MTAKKworI2RlZmluZQlISURTUF9NSURJX0ZSQU1FX0VSUgkJCTB4MTEKKyNkZWZpbmUJSElEU1BfTUlESV9QQVJJVFlfRVJSCQkJMHgxMgorI2RlZmluZQlISURTUF9NSURJX09WRVJSVU5fRVJSCQkJMHgxMworCisjZGVmaW5lIEhJRFNQX0lOUFVUX0NMSVBQSU5HCQkJMHgyMAorI2RlZmluZQlISURTUF9NSVhfQ0xJUFBJTkcJCQkweDMwCisjZGVmaW5lIEhJRFNQX0RBVF9JTl9PRkYJCQkweDIxCisKKyNkZWZpbmUgVElNRV9QUk9fUkVTRVRfRE9ORQkJCTB4MDI4QQorI2RlZmluZSBUSU1FX1BST19TWVNFWAkJCQkweDAwMUUKKyNkZWZpbmUgVElNRV9QUk9fUkVTRVQJCQkJMHgwMDMyCisKKyNkZWZpbmUgREFSX0JVRkZfU0laRQkJCQkweDEwMDAKKworI2RlZmluZSBNSURRX0JVRkZfU0laRQkJCQkweDgwMAorI2RlZmluZSBEU1BRX0JVRkZfU0laRQkJCQkweDVBMAorCisjZGVmaW5lIERTUFFfREFUQV9CVUZGCQkJCTB4Nzg2MAorCisjZGVmaW5lIE1PUF9XQVZFSERSCQkJCTAKKyNkZWZpbmUgTU9QX0VYVE9VVAkJCQkxCisjZGVmaW5lIE1PUF9IV0lOSVQJCQkJMHhmZQorI2RlZmluZSBNT1BfTk9ORQkJCQkweGZmCisjZGVmaW5lIE1PUF9NQVgJCQkJCTEKKworI2RlZmluZSBNSVBfRVhUSU4JCQkJMAorI2RlZmluZSBNSVBfV0FWRUhEUgkJCQkxCisjZGVmaW5lIE1JUF9IV0lOSVQJCQkJMHhmZQorI2RlZmluZSBNSVBfTUFYCQkJCQkxCisKKy8qIFBpbm5hY2xlL0ZpamkgU01BIENvbW1vbiBEYXRhICovCisjZGVmaW5lIFNNQV93Q3VyclBsYXlCeXRlcwkJCTB4MDAwMAorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRCeXRlcwkJCTB4MDAwMgorI2RlZmluZSBTTUFfd0N1cnJQbGF5Vm9sTGVmdAkJCTB4MDAwNAorI2RlZmluZSBTTUFfd0N1cnJQbGF5Vm9sUmlnaHQJCQkweDAwMDYKKyNkZWZpbmUgU01BX3dDdXJySW5Wb2xMZWZ0CQkJMHgwMDA4CisjZGVmaW5lIFNNQV93Q3VyckluVm9sUmlnaHQJCQkweDAwMGEKKyNkZWZpbmUgU01BX3dDdXJyTUhkclZvbExlZnQJCQkweDAwMGMKKyNkZWZpbmUgU01BX3dDdXJyTUhkclZvbFJpZ2h0CQkJMHgwMDBlCisjZGVmaW5lIFNNQV9kd0N1cnJQbGF5UGl0Y2gJCQkweDAwMTAKKyNkZWZpbmUgU01BX2R3Q3VyclBsYXlSYXRlCQkJMHgwMDE0CisjZGVmaW5lIFNNQV93Q3Vyck1JRElJT1BhdGNoCQkJMHgwMDE4CisjZGVmaW5lIFNNQV93Q3VyclBsYXlGb3JtYXQJCQkweDAwMWEKKyNkZWZpbmUgU01BX3dDdXJyUGxheVNhbXBsZVNpemUJCQkweDAwMWMKKyNkZWZpbmUgU01BX3dDdXJyUGxheUNoYW5uZWxzCQkJMHgwMDFlCisjZGVmaW5lIFNNQV93Q3VyclBsYXlTYW1wbGVSYXRlCQkJMHgwMDIwCisjZGVmaW5lIFNNQV93Q3VyclJlY29yZEZvcm1hdAkJCTB4MDAyMgorI2RlZmluZSBTTUFfd0N1cnJSZWNvcmRTYW1wbGVTaXplCQkweDAwMjQKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkQ2hhbm5lbHMJCQkweDAwMjYKKyNkZWZpbmUgU01BX3dDdXJyUmVjb3JkU2FtcGxlUmF0ZQkJMHgwMDI4CisjZGVmaW5lIFNNQV93Q3VyckRTUFN0YXR1c0ZsYWdzCQkJMHgwMDJhCisjZGVmaW5lIFNNQV93Q3Vyckhvc3RTdGF0dXNGbGFncwkJMHgwMDJjCisjZGVmaW5lIFNNQV93Q3VycklucHV0VGFnQml0cwkJCTB4MDAyZQorI2RlZmluZSBTTUFfd0N1cnJMZWZ0UGVhawkJCTB4MDAzMAorI2RlZmluZSBTTUFfd0N1cnJSaWdodFBlYWsJCQkweDAwMzIKKyNkZWZpbmUgU01BX2JNaWNQb3RQb3NMZWZ0CQkJMHgwMDM0CisjZGVmaW5lIFNNQV9iTWljUG90UG9zUmlnaHQJCQkweDAwMzUKKyNkZWZpbmUgU01BX2JNaWNQb3RNYXhMZWZ0CQkJMHgwMDM2CisjZGVmaW5lIFNNQV9iTWljUG90TWF4UmlnaHQJCQkweDAwMzcKKyNkZWZpbmUgU01BX2JJblBvdFBvc0xlZnQJCQkweDAwMzgKKyNkZWZpbmUgU01BX2JJblBvdFBvc1JpZ2h0CQkJMHgwMDM5CisjZGVmaW5lIFNNQV9iQXV4UG90UG9zTGVmdAkJCTB4MDAzYQorI2RlZmluZSBTTUFfYkF1eFBvdFBvc1JpZ2h0CQkJMHgwMDNiCisjZGVmaW5lIFNNQV9iSW5Qb3RNYXhMZWZ0CQkJMHgwMDNjCisjZGVmaW5lIFNNQV9iSW5Qb3RNYXhSaWdodAkJCTB4MDAzZAorI2RlZmluZSBTTUFfYkF1eFBvdE1heExlZnQJCQkweDAwM2UKKyNkZWZpbmUgU01BX2JBdXhQb3RNYXhSaWdodAkJCTB4MDAzZgorI2RlZmluZSBTTUFfYkluUG90TWF4TWV0aG9kCQkJMHgwMDQwCisjZGVmaW5lIFNNQV9iQXV4UG90TWF4TWV0aG9kCQkJMHgwMDQxCisjZGVmaW5lIFNNQV93Q3Vyck1hc3RWb2xMZWZ0CQkJMHgwMDQyCisjZGVmaW5lIFNNQV93Q3Vyck1hc3RWb2xSaWdodAkJCTB4MDA0NAorI2RlZmluZSBTTUFfd0NhbEZyZXFBdG9ECQkJMHgwMDQ2CisjZGVmaW5lIFNNQV93Q3VyckF1eFZvbExlZnQJCQkweDAwNDgKKyNkZWZpbmUgU01BX3dDdXJyQXV4Vm9sUmlnaHQJCQkweDAwNGEKKyNkZWZpbmUgU01BX3dDdXJyUGxheTFWb2xMZWZ0CQkJMHgwMDRjCisjZGVmaW5lIFNNQV93Q3VyclBsYXkxVm9sUmlnaHQJCQkweDAwNGUKKyNkZWZpbmUgU01BX3dDdXJyUGxheTJWb2xMZWZ0CQkJMHgwMDUwCisjZGVmaW5lIFNNQV93Q3VyclBsYXkyVm9sUmlnaHQJCQkweDAwNTIKKyNkZWZpbmUgU01BX3dDdXJyUGxheTNWb2xMZWZ0CQkJMHgwMDU0CisjZGVmaW5lIFNNQV93Q3VyclBsYXkzVm9sUmlnaHQJCQkweDAwNTYKKyNkZWZpbmUgU01BX3dDdXJyUGxheTRWb2xMZWZ0CQkJMHgwMDU4CisjZGVmaW5lIFNNQV93Q3VyclBsYXk0Vm9sUmlnaHQJCQkweDAwNWEKKyNkZWZpbmUgU01BX3dDdXJyUGxheTFQZWFrTGVmdAkJCTB4MDA1YworI2RlZmluZSBTTUFfd0N1cnJQbGF5MVBlYWtSaWdodAkJCTB4MDA1ZQorI2RlZmluZSBTTUFfd0N1cnJQbGF5MlBlYWtMZWZ0CQkJMHgwMDYwCisjZGVmaW5lIFNNQV93Q3VyclBsYXkyUGVha1JpZ2h0CQkJMHgwMDYyCisjZGVmaW5lIFNNQV93Q3VyclBsYXkzUGVha0xlZnQJCQkweDAwNjQKKyNkZWZpbmUgU01BX3dDdXJyUGxheTNQZWFrUmlnaHQJCQkweDAwNjYKKyNkZWZpbmUgU01BX3dDdXJyUGxheTRQZWFrTGVmdAkJCTB4MDA2OAorI2RlZmluZSBTTUFfd0N1cnJQbGF5NFBlYWtSaWdodAkJCTB4MDA2YQorI2RlZmluZSBTTUFfd0N1cnJQbGF5UGVha0xlZnQJCQkweDAwNmMKKyNkZWZpbmUgU01BX3dDdXJyUGxheVBlYWtSaWdodAkJCTB4MDA2ZQorI2RlZmluZSBTTUFfd0N1cnJEQVRTUgkJCQkweDAwNzAKKyNkZWZpbmUgU01BX3dDdXJyREFUUlhDSE5MCQkJMHgwMDcyCisjZGVmaW5lIFNNQV93Q3VyckRBVFRYQ0hOTAkJCTB4MDA3NAorI2RlZmluZSBTTUFfd0N1cnJEQVRSWFJhdGUJCQkweDAwNzYKKyNkZWZpbmUgU01BX2R3RFNQUGxheUNvdW50CQkJMHgwMDc4CisjZGVmaW5lIFNNQV9fc2l6ZQkJCQkweDAwN2MKKworI2RlZmluZSBJTklUQ09ERUZJTEUJCSJ0dXJ0bGViZWFjaC9wbmRzcGluaS5iaW4iCisjZGVmaW5lIFBFUk1DT0RFRklMRQkJInR1cnRsZWJlYWNoL3BuZHNwZXJtLmJpbiIKKyNkZWZpbmUgTE9OR05BTUUJCSJNdWx0aVNvdW5kIChQaW5uYWNsZS9GaWppKSIKKworI2VuZGlmIC8qIF9fTVNORF9QSU5OQUNMRV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlX21peGVyLmMgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlX21peGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk0MDU4YQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGVfbWl4ZXIuYwpAQCAtMCwwICsxLDM0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCQkJICBtc25kX3Bpbm5hY2xlX21peGVyLmMgIC0gIGRlc2NyaXB0aW9uCisJCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBiZWdpbgkJOiBGcmUgSnVuIDcgMjAwMgorICAgIGNvcHlyaWdodCAJCTogKEMpIDIwMDIgYnkga2Fyc3RlbiB3aWVzZQorICAgIGVtYWlsCQk6IGFubmFiZWxsZXNnYXJkZW5AeWFob28uZGUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCQkJCQkJCSAgICAgIAkJICAgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSAgKgorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgkJCQkgICAqCisgKgkJCQkJCQkJCSAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlICJtc25kLmgiCisjaW5jbHVkZSAibXNuZF9waW5uYWNsZS5oIgorCisKKyNkZWZpbmUgTVNORF9NSVhFUl9WT0xVTUUJMAorI2RlZmluZSBNU05EX01JWEVSX1BDTQkJMQorI2RlZmluZSBNU05EX01JWEVSX0FVWAkJMgkvKiBJbnB1dCBzb3VyY2UgMSAgKGF1eDEpICovCisjZGVmaW5lIE1TTkRfTUlYRVJfSU1JWAkJMwkvKiAgUmVjb3JkaW5nIG1vbml0b3IgICovCisjZGVmaW5lIE1TTkRfTUlYRVJfU1lOVEgJNAorI2RlZmluZSBNU05EX01JWEVSX1NQRUFLRVIJNQorI2RlZmluZSBNU05EX01JWEVSX0xJTkUJCTYKKyNkZWZpbmUgTVNORF9NSVhFUl9NSUMJCTcKKyNkZWZpbmUgTVNORF9NSVhFUl9SRUNMRVYJMTEJLyogUmVjb3JkaW5nIGxldmVsICovCisjZGVmaW5lIE1TTkRfTUlYRVJfSUdBSU4JMTIJLyogSW5wdXQgZ2FpbiAqLworI2RlZmluZSBNU05EX01JWEVSX09HQUlOCTEzCS8qIE91dHB1dCBnYWluICovCisjZGVmaW5lIE1TTkRfTUlYRVJfRElHSVRBTAkxNwkvKiBEaWdpdGFsIChpbnB1dCkgMSAqLworCisvKglEZXZpY2UgbWFzayBiaXRzCSovCisKKyNkZWZpbmUgTVNORF9NQVNLX1ZPTFVNRQkoMSA8PCBNU05EX01JWEVSX1ZPTFVNRSkKKyNkZWZpbmUgTVNORF9NQVNLX1NZTlRICQkoMSA8PCBNU05EX01JWEVSX1NZTlRIKQorI2RlZmluZSBNU05EX01BU0tfUENNCQkoMSA8PCBNU05EX01JWEVSX1BDTSkKKyNkZWZpbmUgTVNORF9NQVNLX1NQRUFLRVIJKDEgPDwgTVNORF9NSVhFUl9TUEVBS0VSKQorI2RlZmluZSBNU05EX01BU0tfTElORQkJKDEgPDwgTVNORF9NSVhFUl9MSU5FKQorI2RlZmluZSBNU05EX01BU0tfTUlDCQkoMSA8PCBNU05EX01JWEVSX01JQykKKyNkZWZpbmUgTVNORF9NQVNLX0lNSVgJCSgxIDw8IE1TTkRfTUlYRVJfSU1JWCkKKyNkZWZpbmUgTVNORF9NQVNLX1JFQ0xFVgkoMSA8PCBNU05EX01JWEVSX1JFQ0xFVikKKyNkZWZpbmUgTVNORF9NQVNLX0lHQUlOCQkoMSA8PCBNU05EX01JWEVSX0lHQUlOKQorI2RlZmluZSBNU05EX01BU0tfT0dBSU4JCSgxIDw8IE1TTkRfTUlYRVJfT0dBSU4pCisjZGVmaW5lIE1TTkRfTUFTS19BVVgJCSgxIDw8IE1TTkRfTUlYRVJfQVVYKQorI2RlZmluZSBNU05EX01BU0tfRElHSVRBTAkoMSA8PCBNU05EX01JWEVSX0RJR0lUQUwpCisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfaW5mb19tdXgoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwlzdGF0aWMgY2hhciAqdGV4dHNbM10gPSB7CisJCSJBbmFsb2ciLCAiTUFTUyIsICJTUERJRiIsCisJfTsKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgaXRlbXMgPSB0ZXN0X2JpdChGX0hBVkVESUdJVEFMLCAmY2hpcC0+ZmxhZ3MpID8gMyA6IDI7CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gaXRlbXM7CisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gaXRlbXMpCisJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSBpdGVtcyAtIDE7CisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJCXRleHRzW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF9nZXRfbXV4KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwkvKiBNU05EX01BU0tfSU1JWCBpcyB0aGUgZGVmYXVsdCAqLworCXVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPSAwOworCisJaWYgKGNoaXAtPnJlY3NyYyAmIE1TTkRfTUFTS19TWU5USCkgeworCQl1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMTsKKwl9IGVsc2UgaWYgKChjaGlwLT5yZWNzcmMgJiBNU05EX01BU0tfRElHSVRBTCkgJiYKKwkJIHRlc3RfYml0KEZfSEFWRURJR0lUQUwsICZjaGlwLT5mbGFncykpIHsKKwkJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDI7CisJfQorCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmRfbXNuZG1peF9zZXRfbXV4KHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHZhbCkKK3sKKwl1bnNpZ25lZCBuZXdyZWNzcmM7CisJaW50IGNoYW5nZTsKKwl1bnNpZ25lZCBjaGFyIG1zbmRieXRlOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6CisJCW5ld3JlY3NyYyA9IE1TTkRfTUFTS19JTUlYOworCQltc25kYnl0ZSA9IEhERVhBUl9TRVRfQU5BX0lOOworCQlicmVhazsKKwljYXNlIDE6CisJCW5ld3JlY3NyYyA9IE1TTkRfTUFTS19TWU5USDsKKwkJbXNuZGJ5dGUgPSBIREVYQVJfU0VUX1NZTlRIX0lOOworCQlicmVhazsKKwljYXNlIDI6CisJCW5ld3JlY3NyYyA9IE1TTkRfTUFTS19ESUdJVEFMOworCQltc25kYnl0ZSA9IEhERVhBUl9TRVRfREFUX0lOOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY2hhbmdlICA9IG5ld3JlY3NyYyAhPSBjaGlwLT5yZWNzcmM7CisJaWYgKGNoYW5nZSkgeworCQljaGFuZ2UgPSAwOworCQlpZiAoIXNuZF9tc25kX3NlbmRfd29yZChjaGlwLCAwLCAwLCBtc25kYnl0ZSkpCisJCQlpZiAoIXNuZF9tc25kX3NlbmRfZHNwX2NtZChjaGlwLCBIREVYX0FVWF9SRVEpKSB7CisJCQkJY2hpcC0+cmVjc3JjID0gbmV3cmVjc3JjOworCQkJCWNoYW5nZSA9IDE7CisJCQl9CisJfQorCXJldHVybiBjaGFuZ2U7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfcHV0X211eChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKm1zbmQgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJcmV0dXJuIHNuZF9tc25kbWl4X3NldF9tdXgobXNuZCwgdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSk7Cit9CisKKworc3RhdGljIGludCBzbmRfbXNuZG1peF92b2x1bWVfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IDI7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAxMDA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfdm9sdW1lX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbXNuZCAqbXNuZCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgYWRkciA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXNuZC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbXNuZC0+bGVmdF9sZXZlbHNbYWRkcl0gKiAxMDA7CisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gLz0gMHhGRkZGOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdID0gbXNuZC0+cmlnaHRfbGV2ZWxzW2FkZHJdICogMTAwOworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzFdIC89IDB4RkZGRjsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc25kLT5taXhlcl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgdXBkYXRlX3ZvbG0oYSwgYikJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQl3cml0ZXcoKGRldi0+bGVmdF9sZXZlbHNbYV0gPj4gMSkgKgkJCVwKKwkJICAgICAgIHJlYWR3KGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbExlZnQpIC8gMHhmZmZmLAlcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI2IjI0xlZnQpOwkJCVwKKwkJd3JpdGV3KChkZXYtPnJpZ2h0X2xldmVsc1thXSA+PiAxKSAgKgkJCVwKKwkJICAgICAgIHJlYWR3KGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KSAvIDB4ZmZmZiwgXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNiIyNSaWdodCk7CQkJXAorCX0gd2hpbGUgKDApOworCisjZGVmaW5lIHVwZGF0ZV9wb3RtKGQsIHMsIGFyKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXdyaXRlYigoZGV2LT5sZWZ0X2xldmVsc1tkXSA+PiA4KSAqCQkJXAorCQkgICAgICAgcmVhZHcoZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCkgLyAweGZmZmYsIFwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjcyMjTGVmdCk7CQkJXAorCQl3cml0ZWIoKGRldi0+cmlnaHRfbGV2ZWxzW2RdID4+IDgpICoJCQlcCisJCSAgICAgICByZWFkdyhkZXYtPlNNQSArIFNNQV93Q3Vyck1hc3RWb2xSaWdodCkgLyAweGZmZmYsIFwKKwkJICAgICAgIGRldi0+U01BICsgU01BXyMjcyMjUmlnaHQpOwkJCVwKKwkJaWYgKHNuZF9tc25kX3NlbmRfd29yZChkZXYsIDAsIDAsIGFyKSA9PSAwKQkJXAorCQkJc25kX21zbmRfc2VuZF9kc3BfY21kKGRldiwgSERFWF9BVVhfUkVRKTsJXAorCX0gd2hpbGUgKDApOworCisjZGVmaW5lIHVwZGF0ZV9wb3QoZCwgcywgYXIpCQkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJd3JpdGViKGRldi0+bGVmdF9sZXZlbHNbZF0gPj4gOCwJCQlcCisJCSAgICAgICBkZXYtPlNNQSArIFNNQV8jI3MjI0xlZnQpOwkJCVwKKwkJd3JpdGViKGRldi0+cmlnaHRfbGV2ZWxzW2RdID4+IDgsCQkJXAorCQkgICAgICAgZGV2LT5TTUEgKyBTTUFfIyNzIyNSaWdodCk7CQkJXAorCQlpZiAoc25kX21zbmRfc2VuZF93b3JkKGRldiwgMCwgMCwgYXIpID09IDApCQlcCisJCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoZGV2LCBIREVYX0FVWF9SRVEpOwlcCisJfSB3aGlsZSAoMCk7CisKKworc3RhdGljIGludCBzbmRfbXNuZG1peF9zZXQoc3RydWN0IHNuZF9tc25kICpkZXYsIGludCBkLCBpbnQgbGVmdCwgaW50IHJpZ2h0KQoreworCWludCBiTGVmdCwgYlJpZ2h0OworCWludCB3TGVmdCwgd1JpZ2h0OworCWludCB1cGRhdGVtYXN0ZXIgPSAwOworCisJaWYgKGQgPj0gTEVWRUxfRU5UUklFUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliTGVmdCA9IGxlZnQgKiAweGZmIC8gMTAwOworCXdMZWZ0ID0gbGVmdCAqIDB4ZmZmZiAvIDEwMDsKKworCWJSaWdodCA9IHJpZ2h0ICogMHhmZiAvIDEwMDsKKwl3UmlnaHQgPSByaWdodCAqIDB4ZmZmZiAvIDEwMDsKKworCWRldi0+bGVmdF9sZXZlbHNbZF0gPSB3TGVmdDsKKwlkZXYtPnJpZ2h0X2xldmVsc1tkXSA9IHdSaWdodDsKKworCXN3aXRjaCAoZCkgeworCQkvKiBtYXN0ZXIgdm9sdW1lIHVuc2NhbGVkIGNvbnRyb2xzICovCisJY2FzZSBNU05EX01JWEVSX0xJTkU6CQkJLyogbGluZSBwb3QgY29udHJvbCAqLworCQkvKiBzY2FsZWQgYnkgSU1JWCBpbiBkaWdpdGFsIG1peCAqLworCQl3cml0ZWIoYkxlZnQsIGRldi0+U01BICsgU01BX2JJblBvdFBvc0xlZnQpOworCQl3cml0ZWIoYlJpZ2h0LCBkZXYtPlNNQSArIFNNQV9iSW5Qb3RQb3NSaWdodCk7CisJCWlmIChzbmRfbXNuZF9zZW5kX3dvcmQoZGV2LCAwLCAwLCBIREVYQVJfSU5fU0VUX1BPVFMpID09IDApCisJCQlzbmRfbXNuZF9zZW5kX2RzcF9jbWQoZGV2LCBIREVYX0FVWF9SRVEpOworCQlicmVhazsKKwljYXNlIE1TTkRfTUlYRVJfTUlDOgkJCS8qIG1pYyBwb3QgY29udHJvbCAqLworCQlpZiAoZGV2LT50eXBlID09IG1zbmRDbGFzc2ljKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCS8qIHNjYWxlZCBieSBJTUlYIGluIGRpZ2l0YWwgbWl4ICovCisJCXdyaXRlYihiTGVmdCwgZGV2LT5TTUEgKyBTTUFfYk1pY1BvdFBvc0xlZnQpOworCQl3cml0ZWIoYlJpZ2h0LCBkZXYtPlNNQSArIFNNQV9iTWljUG90UG9zUmlnaHQpOworCQlpZiAoc25kX21zbmRfc2VuZF93b3JkKGRldiwgMCwgMCwgSERFWEFSX01JQ19TRVRfUE9UUykgPT0gMCkKKwkJCXNuZF9tc25kX3NlbmRfZHNwX2NtZChkZXYsIEhERVhfQVVYX1JFUSk7CisJCWJyZWFrOworCWNhc2UgTVNORF9NSVhFUl9WT0xVTUU6CQkvKiBtYXN0ZXIgdm9sdW1lICovCisJCXdyaXRldyh3TGVmdCwgZGV2LT5TTUEgKyBTTUFfd0N1cnJNYXN0Vm9sTGVmdCk7CisJCXdyaXRldyh3UmlnaHQsIGRldi0+U01BICsgU01BX3dDdXJyTWFzdFZvbFJpZ2h0KTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisKKwljYXNlIE1TTkRfTUlYRVJfQVVYOgkJCS8qIGF1eCBwb3QgY29udHJvbCAqLworCQkvKiBzY2FsZWQgYnkgbWFzdGVyIHZvbHVtZSAqLworCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCQkvKiBkaWdpdGFsIGNvbnRyb2xzICovCisJY2FzZSBNU05EX01JWEVSX1NZTlRIOgkJCS8qIHN5bnRoIHZvbCAoZHNwIG1peCkgKi8KKwljYXNlIE1TTkRfTUlYRVJfUENNOgkJCS8qIHBjbSB2b2wgKGRzcCBtaXgpICovCisJY2FzZSBNU05EX01JWEVSX0lNSVg6CQkJLyogaW5wdXQgbW9uaXRvciAoZHNwIG1peCkgKi8KKwkJLyogc2NhbGVkIGJ5IG1hc3RlciB2b2x1bWUgKi8KKwkJdXBkYXRlbWFzdGVyID0gMTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAodXBkYXRlbWFzdGVyKSB7CisJCS8qIHVwZGF0ZSBtYXN0ZXIgdm9sdW1lIHNjYWxlZCBjb250cm9scyAqLworCQl1cGRhdGVfdm9sbShNU05EX01JWEVSX1BDTSwgd0N1cnJQbGF5Vm9sKTsKKwkJdXBkYXRlX3ZvbG0oTVNORF9NSVhFUl9JTUlYLCB3Q3VyckluVm9sKTsKKwkJaWYgKGRldi0+dHlwZSA9PSBtc25kUGlubmFjbGUpCisJCQl1cGRhdGVfdm9sbShNU05EX01JWEVSX1NZTlRILCB3Q3Vyck1IZHJWb2wpOworCQl1cGRhdGVfcG90bShNU05EX01JWEVSX0FVWCwgYkF1eFBvdFBvcywgSERFWEFSX0FVWF9TRVRfUE9UUyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX21zbmRtaXhfdm9sdW1lX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbXNuZCAqbXNuZCA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgY2hhbmdlLCBhZGRyID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJaW50IGxlZnQsIHJpZ2h0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsZWZ0ID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gJSAxMDE7CisJcmlnaHQgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVsxXSAlIDEwMTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXNuZC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCWNoYW5nZSA9IG1zbmQtPmxlZnRfbGV2ZWxzW2FkZHJdICE9IGxlZnQKKwkJfHwgbXNuZC0+cmlnaHRfbGV2ZWxzW2FkZHJdICE9IHJpZ2h0OworCXNuZF9tc25kbWl4X3NldChtc25kLCBhZGRyLCBsZWZ0LCByaWdodCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXNuZC0+bWl4ZXJfbG9jaywgZmxhZ3MpOworCXJldHVybiBjaGFuZ2U7Cit9CisKKworI2RlZmluZSBEVU1NWV9WT0xVTUUoeG5hbWUsIHhpbmRleCwgYWRkcikgXAoreyAuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgLm5hbWUgPSB4bmFtZSwgLmluZGV4ID0geGluZGV4LCBcCisgIC5pbmZvID0gc25kX21zbmRtaXhfdm9sdW1lX2luZm8sIFwKKyAgLmdldCA9IHNuZF9tc25kbWl4X3ZvbHVtZV9nZXQsIC5wdXQgPSBzbmRfbXNuZG1peF92b2x1bWVfcHV0LCBcCisgIC5wcml2YXRlX3ZhbHVlID0gYWRkciB9CisKKworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHNuZF9tc25kX2NvbnRyb2xzW10gPSB7CitEVU1NWV9WT0xVTUUoIk1hc3RlciBWb2x1bWUiLCAwLCBNU05EX01JWEVSX1ZPTFVNRSksCitEVU1NWV9WT0xVTUUoIlBDTSBWb2x1bWUiLCAwLCBNU05EX01JWEVSX1BDTSksCitEVU1NWV9WT0xVTUUoIkF1eCBWb2x1bWUiLCAwLCBNU05EX01JWEVSX0FVWCksCitEVU1NWV9WT0xVTUUoIkxpbmUgVm9sdW1lIiwgMCwgTVNORF9NSVhFUl9MSU5FKSwKK0RVTU1ZX1ZPTFVNRSgiTWljIFZvbHVtZSIsIDAsIE1TTkRfTUlYRVJfTUlDKSwKK0RVTU1ZX1ZPTFVNRSgiTW9uaXRvciIsCTAsIE1TTkRfTUlYRVJfSU1JWCksCit7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiQ2FwdHVyZSBTb3VyY2UiLAorCS5pbmZvID0gc25kX21zbmRtaXhfaW5mb19tdXgsCisJLmdldCA9IHNuZF9tc25kbWl4X2dldF9tdXgsCisJLnB1dCA9IHNuZF9tc25kbWl4X3B1dF9tdXgsCit9Cit9OworCisKK2ludCBfX2RldmluaXQgc25kX21zbmRtaXhfbmV3KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3Qgc25kX21zbmQgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGlkeDsKKwlpbnQgZXJyOworCisJaWYgKHNuZF9CVUdfT04oIWNoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+bWl4ZXJfbG9jayk7CisJc3RyY3B5KGNhcmQtPm1peGVybmFtZSwgIk1TTkQgUGlubmFjbGUgTWl4ZXIiKTsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShzbmRfbXNuZF9jb250cm9scyk7IGlkeCsrKQorCQllcnIgPSBzbmRfY3RsX2FkZChjYXJkLAorCQkJCSAgc25kX2N0bF9uZXcxKHNuZF9tc25kX2NvbnRyb2xzICsgaWR4LCBjaGlwKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZG1peF9uZXcpOworCit2b2lkIHNuZF9tc25kbWl4X3NldHVwKHN0cnVjdCBzbmRfbXNuZCAqZGV2KQoreworCXVwZGF0ZV9wb3QoTVNORF9NSVhFUl9MSU5FLCBiSW5Qb3RQb3MsIEhERVhBUl9JTl9TRVRfUE9UUyk7CisJdXBkYXRlX3BvdG0oTVNORF9NSVhFUl9BVVgsIGJBdXhQb3RQb3MsIEhERVhBUl9BVVhfU0VUX1BPVFMpOworCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfUENNLCB3Q3VyclBsYXlWb2wpOworCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfSU1JWCwgd0N1cnJJblZvbCk7CisJaWYgKGRldi0+dHlwZSA9PSBtc25kUGlubmFjbGUpIHsKKwkJdXBkYXRlX3BvdChNU05EX01JWEVSX01JQywgYk1pY1BvdFBvcywgSERFWEFSX01JQ19TRVRfUE9UUyk7CisJCXVwZGF0ZV92b2xtKE1TTkRfTUlYRVJfU1lOVEgsIHdDdXJyTUhkclZvbCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChzbmRfbXNuZG1peF9zZXR1cCk7CisKK2ludCBzbmRfbXNuZG1peF9mb3JjZV9yZWNzcmMoc3RydWN0IHNuZF9tc25kICpkZXYsIGludCByZWNzcmMpCit7CisJZGV2LT5yZWNzcmMgPSAtMTsKKwlyZXR1cm4gc25kX21zbmRtaXhfc2V0X211eChkZXYsIHJlY3NyYyk7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9tc25kbWl4X2ZvcmNlX3JlY3NyYyk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3BsM3NhMi5jIGIvc291bmQvaXNhL29wbDNzYTIuYwppbmRleCBiODQ4ZDEwLi5lZjk1Mjc5ZCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wbDNzYTIuYworKysgYi9zb3VuZC9pc2Evb3BsM3NhMi5jCkBAIC0xNzksMTIgKzE3OSwxMyBAQAogCXVuc2lnbmVkIGNoYXIgcmVzdWx0OwogI2lmIDAKIAlvdXRiKDB4MWQsIHBvcnQpOwkvKiBwYXNzd29yZCAqLwotCXByaW50aygicmVhZCBbMHglbHhdID0gMHgleFxuIiwgcG9ydCwgaW5iKHBvcnQpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicmVhZCBbMHglbHhdID0gMHgleFxuIiwgcG9ydCwgaW5iKHBvcnQpKTsKICNlbmRpZgogCW91dGIocmVnLCBjaGlwLT5wb3J0KTsJLyogcmVnaXN0ZXIgKi8KIAlyZXN1bHQgPSBpbmIoY2hpcC0+cG9ydCArIDEpOwogI2lmIDAKLQlwcmludGsoInJlYWQgWzB4JWx4XSA9IDB4JXggWzB4JXhdXG4iLCBwb3J0LCByZXN1bHQsIGluYihwb3J0KSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInJlYWQgWzB4JWx4XSA9IDB4JXggWzB4JXhdXG4iLAorCSAgICAgICBwb3J0LCByZXN1bHQsIGluYihwb3J0KSk7CiAjZW5kaWYKIAlyZXR1cm4gcmVzdWx0OwogfQpAQCAtMjMzLDcgKzIzNCwxMCBAQAogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2FuJ3QgZ3JhYiBwb3J0IDB4JWx4XG4iLCBwb3J0KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JLy8gc25kX3ByaW50aygiUkVHIDBBID0gMHgleFxuIiwgc25kX29wbDNzYTJfcmVhZChjaGlwLCAweDBhKSk7CisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIlJFRyAwQSA9IDB4JXhcbiIsCisJCSAgIHNuZF9vcGwzc2EyX3JlYWQoY2hpcCwgMHgwYSkpOworCSovCiAJY2hpcC0+dmVyc2lvbiA9IDA7CiAJdG1wID0gc25kX29wbDNzYTJfcmVhZChjaGlwLCBPUEwzU0EyX01JU0MpOwogCWlmICh0bXAgPT0gMHhmZikgewpAQCAtNjE5LDI1ICs2MjMsMjggQEAKIHsKIAlzdHJ1Y3Qgc25kX29wbDNzYTIgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaWYgKGNoaXAtPmlycSA+PSAwKQotCQlmcmVlX2lycShjaGlwLT5pcnEsICh2b2lkICopY2hpcCk7CisJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2FyZCk7CiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfcG9ydCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9vcGwzc2EyX2NhcmRfbmV3KGludCBkZXYpCitzdGF0aWMgaW50IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGludCBkZXYsIHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX29wbDNzYTIgKmNoaXA7CisJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc25kX29wbDNzYTIpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9vcGwzc2EyKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXN0cmNweShjYXJkLT5kcml2ZXIsICJPUEwzU0EyIik7Ci0Jc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIllhbWFoYSBPUEwzLVNBMiIpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJZYW1haGEgT1BMMy1TQSIpOwogCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnJlZ19sb2NrKTsKIAljaGlwLT5pcnEgPSAtMTsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfb3BsM3NhMl9mcmVlOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9vcGwzc2EyX3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKQEAgLTcyOSw5ICs3MzYsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfb3BsM3NhMl9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKQEAgLTc5NSw5ICs4MDIsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfb3BsM3NhMl9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKQEAgLTg3Niw5ICs4ODMsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9vcGwzc2EyX2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX29wbDNzYTJfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCBwZGV2KTsKIAlpZiAoKGVyciA9IHNuZF9vcGwzc2EyX3Byb2JlKGNhcmQsIGRldikpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvbWlyby5jIGIvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCmluZGV4IDQ0MDc1NWMuLjAyZTMwZDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKQEAgLTEyMjgsOSArMTIyOCwxMCBAQAogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKIAotCWlmICghKGNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwKLQkJCQkgIHNpemVvZihzdHJ1Y3Qgc25kX21pcm8pKSkpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsCisJCQkJc2l6ZW9mKHN0cnVjdCBzbmRfbWlybyksICZjYXJkKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlyZXR1cm4gZXJyb3I7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfY2FyZF9taXJvX2ZyZWU7CiAJbWlybyA9IGNhcmQtPnByaXZhdGVfZGF0YTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCmluZGV4IDE5NzA2YjAuLjVjZDU1NTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwpAQCAtMjUyLDcgKzI1Miw3IEBACiAjZW5kaWYJLyogT1BUaTkzWCAqLwogCiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBoYXJkd2FyZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgaGFyZHdhcmUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yOTQsNyArMjk0LDcgQEAKICNlbmRpZgkvKiBPUFRpOTNYICovCiAKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwpAQCAtMzM2LDcgKzMzNiw3IEBACiAjZW5kaWYJLyogT1BUaTkzWCAqLwogCiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiY2hpcCAlZCBub3Qgc3VwcG9ydGVkXG4iLCBjaGlwLT5oYXJkd2FyZSk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKQEAgLTQxMiw3ICs0MTIsNyBAQAogI2VuZGlmCS8qIE9QVGk5M1ggKi8KIAogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoImNoaXAgJWQgbm90IHN1cHBvcnRlZFxuIiwgY2hpcC0+aGFyZHdhcmUpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjaGlwICVkIG5vdCBzdXBwb3J0ZWRcbiIsIGNoaXAtPmhhcmR3YXJlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00MzAsNyArNDMwLDggQEAKIAkJd3NzX2Jhc2VfYml0cyA9IDB4MDI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGsoIldTUyBwb3J0IDB4JWx4IG5vdCB2YWxpZFxuIiwgY2hpcC0+d3NzX2Jhc2UpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiV1NTIHBvcnQgMHglbHggbm90IHZhbGlkXG4iLAorCQkJICAgY2hpcC0+d3NzX2Jhc2UpOwogCQlnb3RvIF9fc2tpcF9iYXNlOwogCX0KIAlzbmRfb3B0aTl4eF93cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDEpLCB3c3NfYmFzZV9iaXRzIDw8IDQsIDB4MzApOwpAQCAtNDU1LDcgKzQ1Niw3IEBACiAJCWlycV9iaXRzID0gMHgwNDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiV1NTIGlycSAjICVkIG5vdCB2YWxpZFxuIiwgY2hpcC0+aXJxKTsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIldTUyBpcnEgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmlycSk7CiAJCWdvdG8gX19za2lwX3Jlc291cmNlczsKIAl9CiAKQEAgLTQ3MCwxMyArNDcxLDE0IEBACiAJCWRtYV9iaXRzID0gMHgwMzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJc25kX3ByaW50aygiV1NTIGRtYTEgIyAlZCBub3QgdmFsaWRcbiIsIGNoaXAtPmRtYTEpOworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiV1NTIGRtYTEgIyAlZCBub3QgdmFsaWRcbiIsCisJCQkgICBjaGlwLT5kbWExKTsKIAkJZ290byBfX3NraXBfcmVzb3VyY2VzOwogCX0KIAogI2lmIGRlZmluZWQoQ1M0MjMxKSB8fCBkZWZpbmVkKE9QVGk5M1gpCiAJaWYgKGNoaXAtPmRtYTEgPT0gY2hpcC0+ZG1hMikgewotCQlzbmRfcHJpbnRrKCJkb24ndCB3YW50IHRvIHNoYXJlIGRtYXNcbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJkb24ndCB3YW50IHRvIHNoYXJlIGRtYXNcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtNDg1LDcgKzQ4Nyw4IEBACiAJY2FzZSAxOgogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKCJXU1MgZG1hMiAjICVkIG5vdCB2YWxpZFxuIiwgY2hpcC0+ZG1hMik7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgZG1hMiAjICVkIG5vdCB2YWxpZFxuIiwKKwkJCSAgIGNoaXAtPmRtYTIpOwogCQlnb3RvIF9fc2tpcF9yZXNvdXJjZXM7CiAJfQogCWRtYV9iaXRzIHw9IDB4MDQ7CkBAIC01MTYsNyArNTE5LDggQEAKIAkJCW1wdV9wb3J0X2JpdHMgPSAweDAwOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlzbmRfcHJpbnRrKCJNUFUtNDAxIHBvcnQgMHglbHggbm90IHZhbGlkXG4iLAorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAiTVBVLTQwMSBwb3J0IDB4JWx4IG5vdCB2YWxpZFxuIiwKIAkJCQljaGlwLT5tcHVfcG9ydCk7CiAJCQlnb3RvIF9fc2tpcF9tcHU7CiAJCX0KQEAgLTUzNSw3ICs1MzksNyBAQAogCQkJbXB1X2lycV9iaXRzID0gMHgwMTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJc25kX3ByaW50aygiTVBVLTQwMSBpcnEgIyAlZCBub3QgdmFsaWRcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiTVBVLTQwMSBpcnEgIyAlZCBub3QgdmFsaWRcbiIsCiAJCQkJY2hpcC0+bXB1X2lycSk7CiAJCQlnb3RvIF9fc2tpcF9tcHU7CiAJCX0KQEAgLTcyNiw3ICs3MzAsNyBAQAogCWlmIChjaGlwLT53c3NfYmFzZSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKIAkJY2hpcC0+d3NzX2Jhc2UgPSBzbmRfbGVnYWN5X2ZpbmRfZnJlZV9pb3BvcnQocG9zc2libGVfcG9ydHMsIDQpOwogCQlpZiAoY2hpcC0+d3NzX2Jhc2UgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCJ1bmFibGUgdG8gZmluZCBhIGZyZWUgV1NTIHBvcnRcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIGZpbmQgYSBmcmVlIFdTUyBwb3J0XG4iKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAl9CkBAIC04MTUsMTQgKzgxOSw4IEBACiAJCQkJICAgY2hpcC0+Zm1fcG9ydCwgY2hpcC0+Zm1fcG9ydCArIDQgLSAxKTsKIAkJfQogCQlpZiAob3BsMykgewotI2lmZGVmIENTNDIzMQotCQkJY29uc3QgaW50IHQxZGV2ID0gMTsKLSNlbHNlCi0JCQljb25zdCBpbnQgdDFkZXYgPSAwOwotI2VuZGlmCi0JCQlpZiAoKGVycm9yID0gc25kX29wbDNfdGltZXJfbmV3KG9wbDMsIHQxZGV2LCB0MWRldisxKSkgPCAwKQotCQkJCXJldHVybiBlcnJvcjsKLQkJCWlmICgoZXJyb3IgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgJnN5bnRoKSkgPCAwKQorCQkJZXJyb3IgPSBzbmRfb3BsM19od2RlcF9uZXcob3BsMywgMCwgMSwgJnN5bnRoKTsKKwkJCWlmIChlcnJvciA8IDApCiAJCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJfQpAQCAtODMwLDE1ICs4MjgsMTggQEAKIAlyZXR1cm4gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF9vcHRpOXh4X2NhcmRfbmV3KHZvaWQpCitzdGF0aWMgaW50IHNuZF9vcHRpOXh4X2NhcmRfbmV3KHN0cnVjdCBzbmRfY2FyZCAqKmNhcmRwKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCBzaXplb2Yoc3RydWN0IHNuZF9vcHRpOXh4KSk7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9vcHRpOXh4KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9jYXJkX29wdGk5eHhfZnJlZTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmRfb3B0aTl4eF9pc2FfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2cHRyLApAQCAtODk3LDE1ICs4OTgsMTUgQEAKICNpZiBkZWZpbmVkKENTNDIzMSkgfHwgZGVmaW5lZChPUFRpOTNYKQogCWlmIChkbWEyID09IFNORFJWX0FVVE9fRE1BKSB7CiAJCWlmICgoZG1hMiA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2RtYShwb3NzaWJsZV9kbWEyc1tkbWExICUgNF0pKSA8IDApIHsKLQkJCXNuZF9wcmludGsoInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUEyXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVuYWJsZSB0byBmaW5kIGEgZnJlZSBETUEyXG4iKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAl9CiAjZW5kaWYKIAotCWNhcmQgPSBzbmRfb3B0aTl4eF9jYXJkX25ldygpOwotCWlmICghIGNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX29wdGk5eHhfY2FyZF9uZXcoJmNhcmQpOworCWlmIChlcnJvciA8IDApCisJCXJldHVybiBlcnJvcjsKIAogCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9vcHRpOXh4X2RldGVjdChjYXJkLCBjYXJkLT5wcml2YXRlX2RhdGEpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTk1MCw5ICs5NTEsOSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCWlmICghIGlzYXBucCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JY2FyZCA9IHNuZF9vcHRpOXh4X2NhcmRfbmV3KCk7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSBzbmRfb3B0aTl4eF9jYXJkX25ldygmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCWNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlodyA9IHNuZF9jYXJkX29wdGk5eHhfcG5wKGNoaXAsIHBjYXJkLCBwaWQpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL2VzOTY4LmMgYi9zb3VuZC9pc2Evc2IvZXM5NjguYwppbmRleCBjOGM4ZTIxLi5jYWZjM2E3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2IvZXM5NjguYworKysgYi9zb3VuZC9pc2Evc2IvZXM5NjguYwpAQCAtMTA4LDkgKzEwOCwxMCBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2NhcmRfZXM5NjggKmFjYXJkOwogCi0JaWYgKChjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCSBzaXplb2Yoc3RydWN0IHNuZF9jYXJkX2VzOTY4KSkpID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVycm9yID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJCXNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfZXM5NjgpLCAmY2FyZCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOwogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWlmICgoZXJyb3IgPSBzbmRfY2FyZF9lczk2OF9wbnAoZGV2LCBhY2FyZCwgcGNhcmQsIHBpZCkpKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2IxNi5jIGIvc291bmQvaXNhL3NiL3NiMTYuYwppbmRleCAyYzIwMWY3Li41MTljMzYzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2IxNi5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYjE2LmMKQEAgLTMyNCwxNCArMzI0LDE4IEBACiAjZGVmaW5lIGlzX2lzYXBucF9zZWxlY3RlZChkZXYpCQkwCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqc25kX3NiMTZfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX3NiMTZfY2FyZF9uZXcoaW50IGRldiwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7Ci0Jc3RydWN0IHNuZF9jYXJkICpjYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAotCQkJCQlzaXplb2Yoc3RydWN0IHNuZF9jYXJkX3NiMTYpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKKworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2NhcmRfc2IxNiksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfc2IxNl9mcmVlOwotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNuZF9zYjE2X3Byb2JlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldikKQEAgLTQ4OSw5ICs0OTMsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9zYjE2X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX3NiMTZfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlhY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAkvKiBub24tUG5QIEZNIHBvcnQgYWRkcmVzcyBpcyBoYXJkd2lyZWQgd2l0aCBiYXNlIHBvcnQgYWRkcmVzcyAqLwpAQCAtNjEwLDkgKzYxNCw5IEBACiAJZm9yICggOyBkZXYgPCBTTkRSVl9DQVJEUzsgZGV2KyspIHsKIAkJaWYgKCFlbmFibGVbZGV2XSB8fCAhaXNhcG5wW2Rldl0pCiAJCQljb250aW51ZTsKLQkJY2FyZCA9IHNuZF9zYjE2X2NhcmRfbmV3KGRldik7Ci0JCWlmICghIGNhcmQpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJcmVzID0gc25kX3NiMTZfY2FyZF9uZXcoZGV2LCAmY2FyZCk7CisJCWlmIChyZXMgPCAwKQorCQkJcmV0dXJuIHJlczsKIAkJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmcGNhcmQtPmNhcmQtPmRldik7CiAJCWlmICgocmVzID0gc25kX2NhcmRfc2IxNl9wbnAoZGV2LCBjYXJkLT5wcml2YXRlX2RhdGEsIHBjYXJkLCBwaWQpKSA8IDAgfHwKIAkJICAgIChyZXMgPSBzbmRfc2IxNl9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjguYyBiL3NvdW5kL2lzYS9zYi9zYjguYwppbmRleCBlYTA2ODc3Li4zY2Q1N2VlIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2I4LmMKKysrIGIvc291bmQvaXNhL3NiL3NiOC5jCkBAIC0xMDMsMTAgKzEwMywxMCBAQAogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNuZF9zYjgpKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IHNuZF9zYjgpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3NiOF9mcmVlOwogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYyBiL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCmluZGV4IDQwNmE0MzEuLjQ3NTIyMGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYl9taXhlci5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAogc3RhdGljIGludCBzbmRfZHQwMTl4X2lucHV0X3N3X2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCiB7Ci0Jc3RhdGljIGNoYXIgKnRleHRzWzVdID0geworCXN0YXRpYyBjb25zdCBjaGFyICp0ZXh0c1s1XSA9IHsKIAkJIkNEIiwgIk1pYyIsICJMaW5lIiwgIlN5bnRoIiwgIk1hc3RlciIKIAl9OwogCkBAIC0yNjksMTIgKzI2OSw3MyBAQAogfQogCiAvKgorICogQUxTNDAwMCBtb25vIHJlY29yZGluZyBjb250cm9sIHN3aXRjaAorICovCisKK3N0YXRpYyBpbnQgc25kX2FsczRrX21vbm9fY2FwdHVyZV9yb3V0ZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKnRleHRzWzNdID0geworCQkiTCBjaGFuIG9ubHkiLCAiUiBjaGFuIG9ubHkiLCAiTCBjaC8yICsgUiBjaC8yIgorCX07CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfRU5VTUVSQVRFRDsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKKwlpZiAodWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA+IDIpCisJCXVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPSAyOworCXN0cmNweSh1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5uYW1lLAorCSAgICAgICB0ZXh0c1t1aW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczRrX21vbm9fY2FwdHVyZV9yb3V0ZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zYiAqc2IgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBjaGFyIG92YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2ItPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlvdmFsID0gc25kX3NibWl4ZXJfcmVhZChzYiwgU0JfQUxTNDAwMF9NT05PX0lPX0NUUkwpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNiLT5taXhlcl9sb2NrLCBmbGFncyk7CisJb3ZhbCA+Pj0gNjsKKwlpZiAob3ZhbCA+IDIpCisJCW92YWwgPSAyOworCisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IG92YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2FsczRrX21vbm9fY2FwdHVyZV9yb3V0ZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9zYiAqc2IgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY2hhbmdlOworCXVuc2lnbmVkIGNoYXIgbnZhbCwgb3ZhbDsKKworCWlmICh1Y29udHJvbC0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID4gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNiLT5taXhlcl9sb2NrLCBmbGFncyk7CisJb3ZhbCA9IHNuZF9zYm1peGVyX3JlYWQoc2IsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMKTsKKworCW52YWwgPSAob3ZhbCAmIH4oMyA8PCA2KSkKKwkgICAgIHwgKHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF0gPDwgNik7CisJY2hhbmdlID0gbnZhbCAhPSBvdmFsOworCWlmIChjaGFuZ2UpCisJCXNuZF9zYm1peGVyX3dyaXRlKHNiLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwgbnZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2ItPm1peGVyX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY2hhbmdlOworfQorCisvKgogICogU0JQUk8gaW5wdXQgbXVsdGlwbGV4ZXIKICAqLwogCiBzdGF0aWMgaW50IHNuZF9zYjhtaXhlcl9pbmZvX211eChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKIHsKLQlzdGF0aWMgY2hhciAqdGV4dHNbM10gPSB7CisJc3RhdGljIGNvbnN0IGNoYXIgKnRleHRzWzNdID0gewogCQkiTWljIiwgIkNEIiwgIkxpbmUiCiAJfTsKIApAQCAtNDQyLDYgKzUwMywxMiBAQAogCQkJLmdldCA9IHNuZF9kdDAxOXhfaW5wdXRfc3dfZ2V0LAogCQkJLnB1dCA9IHNuZF9kdDAxOXhfaW5wdXRfc3dfcHV0LAogCQl9LAorCQlbU0JfTUlYX01PTk9fQ0FQVFVSRV9BTFM0S10gPSB7CisJCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJCS5pbmZvID0gc25kX2FsczRrX21vbm9fY2FwdHVyZV9yb3V0ZV9pbmZvLAorCQkJLmdldCA9IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfZ2V0LAorCQkJLnB1dCA9IHNuZF9hbHM0a19tb25vX2NhcHR1cmVfcm91dGVfcHV0LAorCQl9LAogCX07CiAJc3RydWN0IHNuZF9rY29udHJvbCAqY3RsOwogCWludCBlcnI7CkBAIC02MzYsNiArNzAzLDggQEAKIAl9OwogCiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gKnNuZF9kdDAxOXhfY29udHJvbHNbXSA9IHsKKwkvKiBBTFM0MDAwIGJlbG93IGhhcyBzb21lIHBhcnRzIHdoaWNoIHdlIG1pZ2h0IGJlIGxhY2tpbmcsCisJICogZS5nLiBzbmRfYWxzNDAwMF9jdGxfbW9ub19wbGF5YmFja19zd2l0Y2ggLSBjaGVjayBpdCEgKi8KIAkmc25kX2R0MDE5eF9jdGxfbWFzdGVyX3BsYXlfdm9sLAogCSZzbmRfZHQwMTl4X2N0bF9wY21fcGxheV92b2wsCiAJJnNuZF9kdDAxOXhfY3RsX3N5bnRoX3BsYXlfdm9sLApAQCAtNjY2LDE4ICs3MzUsMjEgQEAKIC8qCiAgKiBBTFM0MDAwIHNwZWNpZmljIG1peGVyIGVsZW1lbnRzCiAgKi8KLS8qIEZJWE1FOiBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCBuZWVkcyBvdXRwdXQgc2VsZWN0IGN0cmwhICovCiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX3BsYXliYWNrX3N3aXRjaCA9CiAJU0JfU0lOR0xFKCJNYXN0ZXIgTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBTQl9BTFM0MDAwX01PTk9fSU9fQ1RSTCwgNSwgMSk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21hc3Rlcl9tb25vX2NhcHR1cmVfcm91dGUgPQotCVNCX1NJTkdMRSgiTWFzdGVyIE1vbm8gQ2FwdHVyZSBSb3V0ZSIsIFNCX0FMUzQwMDBfTU9OT19JT19DVFJMLCA2LCAweDAzKTsKLS8qIEZJWE1FOiBtb25vIHBsYXliYWNrIHN3aXRjaCBhbHNvIGF2YWlsYWJsZSBvbiBEVDAxOVg/ICovCitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczRrX2N0bF9tYXN0ZXJfbW9ub19jYXB0dXJlX3JvdXRlID0geworCQkubmFtZSA9ICJNYXN0ZXIgTW9ubyBDYXB0dXJlIFJvdXRlIiwKKwkJLnR5cGUgPSBTQl9NSVhfTU9OT19DQVBUVVJFX0FMUzRLCisJfTsKIHN0YXRpYyBzdHJ1Y3Qgc2JtaXhfZWxlbSBzbmRfYWxzNDAwMF9jdGxfbW9ub19wbGF5YmFja19zd2l0Y2ggPQogCVNCX1NJTkdMRSgiTW9ubyBQbGF5YmFjayBTd2l0Y2giLCBTQl9EVDAxOVhfT1VUUFVUX1NXMiwgMCwgMSk7CiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21pY18yMGRiX2Jvb3N0ID0KIAlTQl9TSU5HTEUoIk1pYyBCb29zdCAoKzIwZEIpIiwgU0JfQUxTNDAwMF9NSUNfSU5fR0FJTiwgMCwgMHgwMyk7Ci1zdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsX21peGVyX2xvb3BiYWNrID0KLQlTQl9TSU5HTEUoIkFuYWxvZyBMb29wYmFjayIsIFNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sIDcsIDB4MDEpOworc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9taXhlcl9hbmFsb2dfbG9vcGJhY2sgPQorCVNCX1NJTkdMRSgiQW5hbG9nIExvb3BiYWNrIFN3aXRjaCIsIFNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sIDcsIDB4MDEpOworc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9taXhlcl9kaWdpdGFsX2xvb3BiYWNrID0KKwlTQl9TSU5HTEUoIkRpZ2l0YWwgTG9vcGJhY2sgU3dpdGNoIiwKKwkJICBTQl9BTFM0MDAwX0NSM19DT05GSUdVUkFUSU9OLCA3LCAweDAxKTsKIC8qIEZJWE1FOiBmdW5jdGlvbmFsaXR5IG9mIDNEIGNvbnRyb2xzIG1pZ2h0IGJlIHN3YXBwZWQsIEkgZGlkbid0IGZpbmQKICAqIGEgZGVzY3JpcHRpb24gb2YgaG93IHRvIGlkZW50aWZ5IHdoYXQgaXMgc3VwcG9zZWQgdG8gYmUgd2hhdCAqLwogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfc3dpdGNoID0KQEAgLTY5NCw2ICs3NjYsOSBAQAogCVNCX1NJTkdMRSgiM0QgQ29udHJvbCAtIFdpZGUiLCBTQl9BTFM0MDAwXzNEX1RJTUVfREVMQVksIDAsIDB4MGYpOwogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcG93ZXJvZmZfc3dpdGNoID0KIAlTQl9TSU5HTEUoIjNEIFBvd2VyT2ZmIFN3aXRjaCIsIFNCX0FMUzQwMDBfM0RfVElNRV9ERUxBWSwgNCwgMHgwMSk7CitzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gc25kX2FsczQwMDBfY3RsXzNkYl9mcmVxX2NvbnRyb2xfc3dpdGNoID0KKwlTQl9TSU5HTEUoIk1hc3RlciBQbGF5YmFjayA4a0h6IC8gMjBrSHogTFBGIFN3aXRjaCIsCisJCSAgU0JfQUxTNDAwMF9GTURBQywgNSwgMHgwMSk7CiAjaWZkZWYgTk9UX0FWQUlMQUJMRQogc3RhdGljIHN0cnVjdCBzYm1peF9lbGVtIHNuZF9hbHM0MDAwX2N0bF9mbWRhYyA9CiAJU0JfU0lOR0xFKCJGTURBQyBTd2l0Y2ggKE9wdGlvbiA/KSIsIFNCX0FMUzQwMDBfRk1EQUMsIDAsIDB4MDEpOwpAQCAtNzAyLDM1ICs3NzcsMzcgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHNibWl4X2VsZW0gKnNuZF9hbHM0MDAwX2NvbnRyb2xzW10gPSB7Ci0JJnNuZF9zYjE2X2N0bF9tYXN0ZXJfcGxheV92b2wsCi0JJnNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3N3aXRjaCwKLQkmc25kX3NiMTZfY3RsX3BjbV9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX3N5bnRoX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9kdDAxOXhfY3RsX3N5bnRoX3BsYXlfc3dpdGNoLAotCSZzbmRfc2IxNl9jdGxfc3ludGhfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9jZF9jYXB0dXJlX3JvdXRlLAotCSZzbmRfc2IxNl9jdGxfY2RfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3ZvbCwKLQkmc25kX3NiMTZfY3RsX2xpbmVfY2FwdHVyZV9yb3V0ZSwKLQkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9saW5lX3BsYXlfdm9sLAotCSZzbmRfc2IxNl9jdGxfbWljX2NhcHR1cmVfcm91dGUsCi0JJnNuZF9hbHM0MDAwX2N0bF9taWNfMjBkYl9ib29zdCwKLQkmc25kX3NiMTZfY3RsX2F1dG9fbWljX2dhaW4sCi0JJnNuZF9zYjE2X2N0bF9taWNfcGxheV9zd2l0Y2gsCi0JJnNuZF9zYjE2X2N0bF9taWNfcGxheV92b2wsCi0JJnNuZF9zYjE2X2N0bF9wY19zcGVha2VyX3ZvbCwKLQkmc25kX3NiMTZfY3RsX2NhcHR1cmVfdm9sLAotCSZzbmRfc2IxNl9jdGxfcGxheV92b2wsCi0JJnNuZF9hbHM0MDAwX2N0bF9tYXN0ZXJfbW9ub19wbGF5YmFja19zd2l0Y2gsCi0JJnNuZF9hbHM0MDAwX2N0bF9tYXN0ZXJfbW9ub19jYXB0dXJlX3JvdXRlLAotCSZzbmRfYWxzNDAwMF9jdGxfbW9ub19wbGF5YmFja19zd2l0Y2gsCi0JJnNuZF9hbHM0MDAwX2N0bF9taXhlcl9sb29wYmFjaywKLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9zd2l0Y2gsCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcmF0aW8sCi0JJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZnJlcSwKLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9kZWxheSwKLQkmc25kX2FsczQwMDBfM2RfY29udHJvbF9wb3dlcm9mZl9zd2l0Y2gsCisJCQkJCQkvKiBBTFM0MDAwYS5QREYgcmVncyBwYWdlICovCisJJnNuZF9zYjE2X2N0bF9tYXN0ZXJfcGxheV92b2wsCQkvKiBNWDMwLzMxIDEyICovCisJJnNuZF9kdDAxOXhfY3RsX3BjbV9wbGF5X3N3aXRjaCwJLyogTVg0QyAgICAxNiAqLworCSZzbmRfc2IxNl9jdGxfcGNtX3BsYXlfdm9sLAkJLyogTVgzMi8zMyAxMiAqLworCSZzbmRfc2IxNl9jdGxfc3ludGhfY2FwdHVyZV9yb3V0ZSwJLyogTVgzRC8zRSAxNCAqLworCSZzbmRfZHQwMTl4X2N0bF9zeW50aF9wbGF5X3N3aXRjaCwJLyogTVg0QyAgICAxNiAqLworCSZzbmRfc2IxNl9jdGxfc3ludGhfcGxheV92b2wsCQkvKiBNWDM0LzM1IDEyLzEzICovCisJJnNuZF9zYjE2X2N0bF9jZF9jYXB0dXJlX3JvdXRlLAkJLyogTVgzRC8zRSAxNCAqLworCSZzbmRfc2IxNl9jdGxfY2RfcGxheV9zd2l0Y2gsCQkvKiBNWDNDICAgIDE0ICovCisJJnNuZF9zYjE2X2N0bF9jZF9wbGF5X3ZvbCwJCS8qIE1YMzYvMzcgMTMgKi8KKwkmc25kX3NiMTZfY3RsX2xpbmVfY2FwdHVyZV9yb3V0ZSwJLyogTVgzRC8zRSAxNCAqLworCSZzbmRfc2IxNl9jdGxfbGluZV9wbGF5X3N3aXRjaCwJCS8qIE1YM0MgICAgMTQgKi8KKwkmc25kX3NiMTZfY3RsX2xpbmVfcGxheV92b2wsCQkvKiBNWDM4LzM5IDEzICovCisJJnNuZF9zYjE2X2N0bF9taWNfY2FwdHVyZV9yb3V0ZSwJLyogTVgzRC8zRSAxNCAqLworCSZzbmRfYWxzNDAwMF9jdGxfbWljXzIwZGJfYm9vc3QsCS8qIE1YNEQgICAgMTYgKi8KKwkmc25kX3NiMTZfY3RsX21pY19wbGF5X3N3aXRjaCwJCS8qIE1YM0MgICAgMTQgKi8KKwkmc25kX3NiMTZfY3RsX21pY19wbGF5X3ZvbCwJCS8qIE1YM0EgICAgMTMgKi8KKwkmc25kX3NiMTZfY3RsX3BjX3NwZWFrZXJfdm9sLAkJLyogTVgzQiAgICAxNCAqLworCSZzbmRfc2IxNl9jdGxfY2FwdHVyZV92b2wsCQkvKiBNWDNGLzQwIDE1ICovCisJJnNuZF9zYjE2X2N0bF9wbGF5X3ZvbCwJCQkvKiBNWDQxLzQyIDE1ICovCisJJnNuZF9hbHM0MDAwX2N0bF9tYXN0ZXJfbW9ub19wbGF5YmFja19zd2l0Y2gsIC8qIE1YNEMgMTYgKi8KKwkmc25kX2FsczRrX2N0bF9tYXN0ZXJfbW9ub19jYXB0dXJlX3JvdXRlLCAvKiBNWDRCICAxNiAqLworCSZzbmRfYWxzNDAwMF9jdGxfbW9ub19wbGF5YmFja19zd2l0Y2gsCS8qIE1YNEMgICAgMTYgKi8KKwkmc25kX2FsczQwMDBfY3RsX21peGVyX2FuYWxvZ19sb29wYmFjaywgLyogTVg0RCAgICAxNiAqLworCSZzbmRfYWxzNDAwMF9jdGxfbWl4ZXJfZGlnaXRhbF9sb29wYmFjaywgLyogQ1IzICAgIDIxICovCisJJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfc3dpdGNoLAkJIC8qIE1YNTAgICAxNyAqLworCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX3JhdGlvLAkJIC8qIE1YNTAgICAxNyAqLworCSZzbmRfYWxzNDAwMF8zZF9jb250cm9sX2ZyZXEsCQkgLyogTVg1MCAgIDE3ICovCisJJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfZGVsYXksCQkgLyogTVg1MSAgIDE4ICovCisJJnNuZF9hbHM0MDAwXzNkX2NvbnRyb2xfcG93ZXJvZmZfc3dpdGNoLAkvKiBNWDUxICAgIDE4ICovCisJJnNuZF9hbHM0MDAwX2N0bF8zZGJfZnJlcV9jb250cm9sX3N3aXRjaCwJLyogTVg0RiAgICAxNyAqLwogI2lmZGVmIE5PVF9BVkFJTEFCTEUKIAkmc25kX2FsczQwMDBfY3RsX2ZtZGFjLAogCSZzbmRfYWxzNDAwMF9jdGxfcXNvdW5kLApAQCAtOTA1LDEzICs5ODIsMTQgQEAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGFsczQwMDBfc2F2ZWRfcmVnc1tdID0geworCS8qIHBsZWFzZSB2ZXJpZnkgaW4gZHNoZWV0IHdoZXRoZXIgcmVncyB0byBiZSBhZGRlZAorCSAgIGFyZSBhY3R1YWxseSByZWFsIEgvVyBvciBqdXN0IGR1bW15ICovCiAJU0JfRFNQNF9NQVNURVJfREVWLCBTQl9EU1A0X01BU1RFUl9ERVYgKyAxLAogCVNCX0RTUDRfT1VUUFVUX1NXLAogCVNCX0RTUDRfUENNX0RFViwgU0JfRFNQNF9QQ01fREVWICsgMSwKIAlTQl9EU1A0X0lOUFVUX0xFRlQsIFNCX0RTUDRfSU5QVVRfUklHSFQsCiAJU0JfRFNQNF9TWU5USF9ERVYsIFNCX0RTUDRfU1lOVEhfREVWICsgMSwKIAlTQl9EU1A0X0NEX0RFViwgU0JfRFNQNF9DRF9ERVYgKyAxLAotCVNCX0RTUDRfTUlDX0FHQywKIAlTQl9EU1A0X01JQ19ERVYsCiAJU0JfRFNQNF9TUEVBS0VSX0RFViwKIAlTQl9EU1A0X0lHQUlOX0RFViwgU0JfRFNQNF9JR0FJTl9ERVYgKyAxLApAQCAtOTE5LDggKzk5NywxMCBAQAogCVNCX0RUMDE5WF9PVVRQVVRfU1cyLAogCVNCX0FMUzQwMDBfTU9OT19JT19DVFJMLAogCVNCX0FMUzQwMDBfTUlDX0lOX0dBSU4sCisJU0JfQUxTNDAwMF9GTURBQywKIAlTQl9BTFM0MDAwXzNEX1NORF9GWCwKIAlTQl9BTFM0MDAwXzNEX1RJTUVfREVMQVksCisJU0JfQUxTNDAwMF9DUjNfQ09ORklHVVJBVElPTiwKIH07CiAKIHN0YXRpYyB2b2lkIHNhdmVfbWl4ZXIoc3RydWN0IHNuZF9zYiAqY2hpcCwgdW5zaWduZWQgY2hhciAqcmVncywgaW50IG51bV9yZWdzKQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NjNjAwMC5jIGIvc291bmQvaXNhL3NjNjAwMC5jCmluZGV4IGNhMzU5MjQuLjc4MjAxMDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYzYwMDAuYworKysgYi9zb3VuZC9pc2Evc2M2MDAwLmMKQEAgLTQ4OSw5ICs0ODksOSBAQAogCWNoYXIgX19pb21lbSAqdm1zc19wb3J0OwogCiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKHhpcnEgPT0gU05EUlZfQVVUT19JUlEpIHsKIAkJeGlycSA9IHNuZF9sZWdhY3lfZmluZF9mcmVlX2lycShwb3NzaWJsZV9pcnFzKTsKQEAgLTU3NiwxMCArNTc2LDYgQEAKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBQRlggIm5vIE9QTCBkZXZpY2UgYXQgMHgleC0weCV4ID9cbiIsCiAJCQkgICAweDM4OCwgMHgzODggKyAyKTsKIAl9IGVsc2UgewotCQllcnIgPSBzbmRfb3BsM190aW1lcl9uZXcob3BsMywgMCwgMSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBlcnJfdW5tYXAyOwotCiAJCWVyciA9IHNuZF9vcGwzX2h3ZGVwX25ldyhvcGwzLCAwLCAxLCBOVUxMKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVycl91bm1hcDI7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2dhbGF4eS5jIGIvc291bmQvaXNhL3NnYWxheHkuYwppbmRleCAyYzc1MDNiLi42ZmUyN2I5IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2dhbGF4eS5jCisrKyBiL3NvdW5kL2lzYS9zZ2FsYXh5LmMKQEAgLTI0Myw5ICsyNDMsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3dzcyAqY2hpcDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJeGlycSA9IGlycVtkZXZdOwogCWlmICh4aXJxID09IFNORFJWX0FVVE9fSVJRKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc3NjYXBlLmMgYi9zb3VuZC9pc2Evc3NjYXBlLmMKaW5kZXggNDhhMTZkOC4uNjYxODcxMiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NzY2FwZS5jCisrKyBiL3NvdW5kL2lzYS9zc2NhcGUuYwpAQCAtODksOSArODksNiBAQAogI2VuZGlmCiAKIAotI2RlZmluZSBNUFU0MDFfSU8oaSkgICAgICgoaSkgKyAwKQotI2RlZmluZSBNSURJX0RBVEFfSU8oaSkgICgoaSkgKyAwKQotI2RlZmluZSBNSURJX0NUUkxfSU8oaSkgICgoaSkgKyAxKQogI2RlZmluZSBIT1NUX0NUUkxfSU8oaSkgICgoaSkgKyAyKQogI2RlZmluZSBIT1NUX0RBVEFfSU8oaSkgICgoaSkgKyAzKQogI2RlZmluZSBPRElFX0FERFJfSU8oaSkgICgoaSkgKyA0KQpAQCAtMTI5LDkgKzEyNiw2IEBACiAjZGVmaW5lIERNQV84QklUICAweDgwCiAKIAotI2RlZmluZSBBRDE4NDVfRlJFUV9TRUxfTVNCICAgIDB4MTYKLSNkZWZpbmUgQUQxODQ1X0ZSRVFfU0VMX0xTQiAgICAweDE3Ci0KIGVudW0gY2FyZF90eXBlIHsKIAlTU0NBUEUsCiAJU1NDQVBFX1BOUCwKQEAgLTE0MSw4ICsxMzUsNiBAQAogc3RydWN0IHNvdW5kc2NhcGUgewogCXNwaW5sb2NrX3QgbG9jazsKIAl1bnNpZ25lZCBpb19iYXNlOwotCXVuc2lnbmVkIHdzc19iYXNlOwotCWludCBjb2RlY190eXBlOwogCWludCBpY190eXBlOwogCWVudW0gY2FyZF90eXBlIHR5cGU7CiAJc3RydWN0IHJlc291cmNlICppb19yZXM7CkBAIC0zMzAsNyArMzIyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgdmVyaWZ5X21wdTQwMShjb25zdCBzdHJ1Y3Qgc25kX21wdTQwMSAqIG1wdSkKIHsKLQlyZXR1cm4gKChpbmIoTUlESV9DVFJMX0lPKG1wdS0+cG9ydCkpICYgMHhjMCkgPT0gMHg4MCk7CisJcmV0dXJuICgoaW5iKE1QVTQwMUMobXB1KSkgJiAweGMwKSA9PSAweDgwKTsKIH0KIAogLyoKQEAgLTMzOCw3ICszMzAsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdGlhbGlzZV9tcHU0MDEoY29uc3Qgc3RydWN0IHNuZF9tcHU0MDEgKiBtcHUpCiB7Ci0Jb3V0YigwLCBNSURJX0RBVEFfSU8obXB1LT5wb3J0KSk7CisJb3V0YigwLCBNUFU0MDFEKG1wdSkpOwogfQogCiAvKgpAQCAtMzk2LDIwICszODgsMjAgQEAKICAqLwogc3RhdGljIGludCBvYnBfc3RhcnR1cF9hY2soc3RydWN0IHNvdW5kc2NhcGUgKnMsIHVuc2lnbmVkIHRpbWVvdXQpCiB7Ci0Jd2hpbGUgKHRpbWVvdXQgIT0gMCkgeworCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKworCWRvIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJdW5zaWduZWQgY2hhciB4OwogCi0JCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwotCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJCXggPSBpbmIoSE9TVF9EQVRBX0lPKHMtPmlvX2Jhc2UpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCQlpZiAoKHggJiAweGZlKSA9PSAweGZlKQogCQkJcmV0dXJuIDE7CiAKLQkJLS10aW1lb3V0OwotCX0gLyogd2hpbGUgKi8KKwkJbXNsZWVwKDEwKTsKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfdGltZSkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MjMsMjAgKzQxNSwyMCBAQAogICovCiBzdGF0aWMgaW50IGhvc3Rfc3RhcnR1cF9hY2soc3RydWN0IHNvdW5kc2NhcGUgKnMsIHVuc2lnbmVkIHRpbWVvdXQpCiB7Ci0Jd2hpbGUgKHRpbWVvdXQgIT0gMCkgeworCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KTsKKworCWRvIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJdW5zaWduZWQgY2hhciB4OwogCi0JCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwotCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7CiAJCXggPSBpbmIoSE9TVF9EQVRBX0lPKHMtPmlvX2Jhc2UpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCQlpZiAoeCA9PSAweGZlKQogCQkJcmV0dXJuIDE7CiAKLQkJLS10aW1lb3V0OwotCX0gLyogd2hpbGUgKi8KKwkJbXNsZWVwKDEwKTsKKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmRfdGltZSkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01MzIsMTAgKzUyNCwxMCBAQAogCSAqIGdpdmUgaXQgNSBzZWNvbmRzIChtYXgpIC4uLgogCSAqLwogCXJldCA9IDA7Ci0JaWYgKCFvYnBfc3RhcnR1cF9hY2socywgNSkpIHsKKwlpZiAoIW9icF9zdGFydHVwX2FjayhzLCA1MDAwKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IE5vIHJlc3BvbnNlIGZyb20gb24tYm9hcmQgcHJvY2Vzc29yIGFmdGVyIHVwbG9hZFxuIik7CiAJCXJldCA9IC1FQUdBSU47Ci0JfSBlbHNlIGlmICghaG9zdF9zdGFydHVwX2FjayhzLCA1KSkgeworCX0gZWxzZSBpZiAoIWhvc3Rfc3RhcnR1cF9hY2socywgNTAwMCkpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBTb3VuZFNjYXBlIGZhaWxlZCB0byBpbml0aWFsaXNlXG4iKTsKIAkJcmV0ID0gLUVBR0FJTjsKIAl9CkBAIC03MzIsMTMgKzcyNCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0Jc2V0X2hvc3RfbW9kZV91bnNhZmUocy0+aW9fYmFzZSk7Ci0KLQlpZiAoaG9zdF93cml0ZV9jdHJsX3Vuc2FmZShzLT5pb19iYXNlLCBDTURfR0VUX01JRElfVk9MLCAxMDApKSB7Ci0JCXVjdGwtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBob3N0X3JlYWRfY3RybF91bnNhZmUocy0+aW9fYmFzZSwgMTAwKTsKLQl9Ci0KLQlzZXRfbWlkaV9tb2RlX3Vuc2FmZShzLT5pb19iYXNlKTsKKwl1Y3RsLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gcy0+bWlkaV92b2w7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpAQCAtNzczLDYgKzc1OSw3IEBACiAJY2hhbmdlID0gKGhvc3Rfd3JpdGVfY3RybF91bnNhZmUocy0+aW9fYmFzZSwgQ01EX1NFVF9NSURJX1ZPTCwgMTAwKQogCSAgICAgICAgICAmJiBob3N0X3dyaXRlX2N0cmxfdW5zYWZlKHMtPmlvX2Jhc2UsICgodW5zaWduZWQgY2hhcikgdWN0bC0+dmFsdWUuaW50ZWdlci4gdmFsdWVbMF0pICYgMTI3LCAxMDApCiAJICAgICAgICAgICYmIGhvc3Rfd3JpdGVfY3RybF91bnNhZmUocy0+aW9fYmFzZSwgQ01EX1hYWF9NSURJX1ZPTCwgMTAwKSk7CisJcy0+bWlkaV92b2wgPSAodW5zaWduZWQgY2hhcikgdWN0bC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSAmIDEyNzsKICAgICAgIF9fc2tpcF9jaGFuZ2U6CiAKIAkvKgpAQCAtODE1LDEyICs4MDIsMTEgQEAKICAqIFBlcmZvcm0gY2VydGFpbiBhcmNhbmUgcG9ydC1jaGVja3MgdG8gc2VlIHdoZXRoZXIgdGhlcmUKICAqIGlzIGEgU291bmRTY2FwZSBib2FyZCBsdXJraW5nIGJlaGluZCB0aGUgZ2l2ZW4gcG9ydHMuCiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IGRldGVjdF9zc2NhcGUoc3RydWN0IHNvdW5kc2NhcGUgKnMpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBkZXRlY3Rfc3NjYXBlKHN0cnVjdCBzb3VuZHNjYXBlICpzLCBsb25nIHdzc19pbykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGQ7CiAJaW50IHJldHZhbCA9IDA7Ci0JaW50IGNvZGVjID0gcy0+d3NzX2Jhc2U7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwogCkBAIC04MzYsMTMgKzgyMiwxMSBAQAogCWlmICgoZCAmIDB4ODApICE9IDApCiAJCWdvdG8gX2RvbmU7CiAKLQlpZiAoZCA9PSAwKSB7Ci0JCXMtPmNvZGVjX3R5cGUgPSAxOworCWlmIChkID09IDApCiAJCXMtPmljX3R5cGUgPSBJQ19PRElFOwotCX0gZWxzZSBpZiAoKGQgJiAweDYwKSAhPSAwKSB7Ci0JCXMtPmNvZGVjX3R5cGUgPSAyOworCWVsc2UgaWYgKChkICYgMHg2MCkgIT0gMCkKIAkJcy0+aWNfdHlwZSA9IElDX09QVVM7Ci0JfSBlbHNlCisJZWxzZQogCQlnb3RvIF9kb25lOwogCiAJb3V0YigweGZhLCBPRElFX0FERFJfSU8ocy0+aW9fYmFzZSkpOwpAQCAtODYyLDEwICs4NDYsMTAgQEAKIAlzc2NhcGVfd3JpdGVfdW5zYWZlKHMtPmlvX2Jhc2UsIEdBX0hNQ1RMX1JFRywgZCB8IDB4YzApOwogCiAJaWYgKHMtPnR5cGUgPT0gU1NDQVBFX1ZJVk8pCi0JCWNvZGVjICs9IDQ7CisJCXdzc19pbyArPSA0OwogCS8qIHdhaXQgZm9yIFdTUyBjb2RlYyAqLwogCWZvciAoZCA9IDA7IGQgPCA1MDA7IGQrKykgewotCQlpZiAoKGluYihjb2RlYykgJiAweDgwKSA9PSAwKQorCQlpZiAoKGluYih3c3NfaW8pICYgMHg4MCkgPT0gMCkKIAkJCWJyZWFrOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJCW1zbGVlcCgxKTsKQEAgLTk1NSw4MiArOTM5LDYgQEAKIAogCiAvKgotICogT3ZlcnJpZGUgZm9yIHRoZSBDUzQyMzEgcGxheWJhY2sgZm9ybWF0IGZ1bmN0aW9uLgotICogVGhlIEFEMTg0NSBoYXMgbXVjaCBzaW1wbGVyIGZvcm1hdCBhbmQgcmF0ZSBzZWxlY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGFkMTg0NV9wbGF5YmFja19mb3JtYXQoc3RydWN0IHNuZF93c3MgKmNoaXAsCi0JCQkJICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCi0JCQkJICAgdW5zaWduZWQgY2hhciBmb3JtYXQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKLQotCS8qCi0JICogVGhlIEFEMTg0NSBjYW4ndCBoYW5kbGUgc2FtcGxlIGZyZXF1ZW5jaWVzCi0JICogb3V0c2lkZSBvZiA0IGtIWiB0byA1MCBrSFoKLQkgKi8KLQlpZiAocmF0ZSA+IDUwMDAwKQotCQlyYXRlID0gNTAwMDA7Ci0JZWxzZSBpZiAocmF0ZSA8IDQwMDApCi0JCXJhdGUgPSA0MDAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0KLQkvKgotCSAqIFByb2dyYW0gdGhlIEFEMTg0NSBjb3JyZWN0bHkgZm9yIHRoZSBwbGF5YmFjayBzdHJlYW0uCi0JICogTm90ZSB0aGF0IHdlIGRvIE5PVCBuZWVkIHRvIHRvZ2dsZSB0aGUgTUNFIGJpdCBiZWNhdXNlCi0JICogdGhlIFBMQVlCQUNLX0VOQUJMRSBiaXQgb2YgdGhlIEludGVyZmFjZSBDb25maWd1cmF0aW9uCi0JICogcmVnaXN0ZXIgaXMgc2V0LgotCSAqIAotCSAqIE5PVEU6IFdlIHNlZW0gdG8gbmVlZCB0byB3cml0ZSB0byB0aGUgTVNCIGJlZm9yZSB0aGUgTFNCCi0JICogICAgICAgdG8gZ2V0IHRoZSBjb3JyZWN0IHNhbXBsZSBmcmVxdWVuY3kuCi0JICovCi0Jc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX1BMQVlCS19GT1JNQVQsIChmb3JtYXQgJiAweGYwKSk7Ci0Jc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X0ZSRVFfU0VMX01TQiwgKHVuc2lnbmVkIGNoYXIpIChyYXRlID4+IDgpKTsKLQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfRlJFUV9TRUxfTFNCLCAodW5zaWduZWQgY2hhcikgcmF0ZSk7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotfQotCi0vKgotICogT3ZlcnJpZGUgZm9yIHRoZSBDUzQyMzEgY2FwdHVyZSBmb3JtYXQgZnVuY3Rpb24uIAotICogVGhlIEFEMTg0NSBoYXMgbXVjaCBzaW1wbGVyIGZvcm1hdCBhbmQgcmF0ZSBzZWxlY3Rpb24uCi0gKi8KLXN0YXRpYyB2b2lkIGFkMTg0NV9jYXB0dXJlX2Zvcm1hdChzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwKLQkJCQkgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAotCQkJCSAgdW5zaWduZWQgY2hhciBmb3JtYXQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKLQotCS8qCi0JICogVGhlIEFEMTg0NSBjYW4ndCBoYW5kbGUgc2FtcGxlIGZyZXF1ZW5jaWVzIAotCSAqIG91dHNpZGUgb2YgNCBrSFogdG8gNTAga0haCi0JICovCi0JaWYgKHJhdGUgPiA1MDAwMCkKLQkJcmF0ZSA9IDUwMDAwOwotCWVsc2UgaWYgKHJhdGUgPCA0MDAwKQotCQlyYXRlID0gNDAwMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBQcm9ncmFtIHRoZSBBRDE4NDUgY29ycmVjdGx5IGZvciB0aGUgcGxheWJhY2sgc3RyZWFtLgotCSAqIE5vdGUgdGhhdCB3ZSBkbyBOT1QgbmVlZCB0byB0b2dnbGUgdGhlIE1DRSBiaXQgYmVjYXVzZQotCSAqIHRoZSBDQVBUVVJFX0VOQUJMRSBiaXQgb2YgdGhlIEludGVyZmFjZSBDb25maWd1cmF0aW9uCi0JICogcmVnaXN0ZXIgaXMgc2V0LgotCSAqCi0JICogTk9URTogV2Ugc2VlbSB0byBuZWVkIHRvIHdyaXRlIHRvIHRoZSBNU0IgYmVmb3JlIHRoZSBMU0IKLQkgKiAgICAgICB0byBnZXQgdGhlIGNvcnJlY3Qgc2FtcGxlIGZyZXF1ZW5jeS4KLQkgKi8KLQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfUkVDX0ZPUk1BVCwgKGZvcm1hdCAmIDB4ZjApKTsKLQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfRlJFUV9TRUxfTVNCLCAodW5zaWduZWQgY2hhcikgKHJhdGUgPj4gOCkpOwotCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9GUkVRX1NFTF9MU0IsICh1bnNpZ25lZCBjaGFyKSByYXRlKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCiAgKiBDcmVhdGUgYW4gQUQxODQ1IFBDTSBzdWJkZXZpY2Ugb24gdGhlIFNvdW5kU2NhcGUuIFRoZSBBRDE4NDUKICAqIGlzIHZlcnkgbXVjaCBsaWtlIGEgQ1M0MjMxLCB3aXRoIGEgZmV3IGV4dHJhIGJpdHMuIFdlIHdpbGwKICAqIHRyeSB0byBzdXBwb3J0IGF0IGxlYXN0IHNvbWUgb2YgdGhlIGV4dHJhIGJpdHMgYnkgb3ZlcnJpZGluZwpAQCAtMTA1NSwxMSArOTYzLDYgQEAKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJc3RydWN0IHNuZF9wY20gKnBjbTsKIAotI2RlZmluZSBBRDE4NDVfRlJFUV9TRUxfRU5BQkxFICAweDA4Ci0KLSNkZWZpbmUgQUQxODQ1X1BXUl9ET1dOX0NUUkwgICAweDFiCi0jZGVmaW5lIEFEMTg0NV9DUllTX0NMT0NLX1NFTCAgMHgxZAotCiAvKgogICogSXQgdHVybnMgb3V0IHRoYXQgdGhlIFBMQVlCQUNLX0VOQUJMRSBiaXQgaXMgc2V0CiAgKiBieSB0aGUgbG93bGV2ZWwgZHJpdmVyIC4uLgpAQCAtMTA3NCw3ICs5NzcsNiBAQAogICovCiAKIAkJaWYgKHNzY2FwZS0+dHlwZSAhPSBTU0NBUEVfVklWTykgewotCQkJaW50IHZhbDsKIAkJCS8qCiAJCQkgKiBUaGUgaW5wdXQgY2xvY2sgZnJlcXVlbmN5IG9uIHRoZSBTb3VuZFNjYXBlIG11c3QKIAkJCSAqIGJlIDE0LjMxODE4IE1IeiwgYmVjYXVzZSB3ZSBtdXN0IHNldCB0aGlzIHJlZ2lzdGVyCkBAIC0xMDgyLDIyICs5ODQsMTAgQEAKIAkJCSAqLwogCQkJc25kX3dzc19tY2VfdXAoY2hpcCk7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKLQkJCXNuZF93c3Nfb3V0KGNoaXAsIEFEMTg0NV9DUllTX0NMT0NLX1NFTCwgMHgyMCk7CisJCQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfQ0xPQ0ssIDB4MjApOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAkJCXNuZF93c3NfbWNlX2Rvd24oY2hpcCk7CiAKLQkJCS8qCi0JCQkgKiBNb3JlIGN1c3RvbSBjb25maWd1cmF0aW9uOgotCQkJICogYSkgc2VsZWN0ICJtb2RlIDIiIGFuZCBwcm92aWRlIGEgY3VycmVudCBkcml2ZSBvZiA4bUEKLQkJCSAqIGIpIGVuYWJsZSBmcmVxdWVuY3kgc2VsZWN0aW9uIChmb3IgY2FwdHVyZS9wbGF5YmFjaykKLQkJCSAqLwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7Ci0JCQlzbmRfd3NzX291dChjaGlwLCBDUzQyMzFfTUlTQ19JTkZPLAotCQkJCSAgICBDUzQyMzFfTU9ERTIgfCAweDEwKTsKLQkJCXZhbCA9IHNuZF93c3NfaW4oY2hpcCwgQUQxODQ1X1BXUl9ET1dOX0NUUkwpOwotCQkJc25kX3dzc19vdXQoY2hpcCwgQUQxODQ1X1BXUl9ET1dOX0NUUkwsCi0JCQkJICAgIHZhbCB8IEFEMTg0NV9GUkVRX1NFTF9FTkFCTEUpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAkJfQogCiAJCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDAsICZwY20pOwpAQCAtMTExMywxMSArMTAwMywxMyBAQAogCQkJCQkgICAgImZvciBBRDE4NDUgY2hpcFxuIik7CiAJCQlnb3RvIF9lcnJvcjsKIAkJfQotCQllcnIgPSBzbmRfd3NzX3RpbWVyKGNoaXAsIDAsIE5VTEwpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBObyB0aW1lciBkZXZpY2UgIgotCQkJCQkgICAgImZvciBBRDE4NDUgY2hpcFxuIik7Ci0JCQlnb3RvIF9lcnJvcjsKKwkJaWYgKGNoaXAtPmhhcmR3YXJlICE9IFdTU19IV19BRDE4NDgpIHsKKwkJCWVyciA9IHNuZF93c3NfdGltZXIoY2hpcCwgMCwgTlVMTCk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXNuZF9wcmludGsoS0VSTl9FUlIgInNzY2FwZTogTm8gdGltZXIgZGV2aWNlICIKKwkJCQkJCSAgICAiZm9yIEFEMTg0NSBjaGlwXG4iKTsKKwkJCQlnb3RvIF9lcnJvcjsKKwkJCX0KIAkJfQogCiAJCWlmIChzc2NhcGUtPnR5cGUgIT0gU1NDQVBFX1ZJVk8pIHsKQEAgLTExMjgsOCArMTAyMCw2IEBACiAJCQkJCQkgICAgIk1JREkgbWl4ZXIgY29udHJvbFxuIik7CiAJCQkJZ290byBfZXJyb3I7CiAJCQl9Ci0JCQljaGlwLT5zZXRfcGxheWJhY2tfZm9ybWF0ID0gYWQxODQ1X3BsYXliYWNrX2Zvcm1hdDsKLQkJCWNoaXAtPnNldF9jYXB0dXJlX2Zvcm1hdCA9IGFkMTg0NV9jYXB0dXJlX2Zvcm1hdDsKIAkJfQogCiAJCXN0cmNweShjYXJkLT5kcml2ZXIsICJTb3VuZFNjYXBlIik7CkBAIC0xMTU3LDcgKzEwNDcsNiBAQAogCXVuc2lnbmVkIGRtYV9jZmc7CiAJdW5zaWduZWQgaXJxX2NmZzsKIAl1bnNpZ25lZCBtcHVfaXJxX2NmZzsKLQl1bnNpZ25lZCB4cG9ydDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvX3JlczsKIAlzdHJ1Y3QgcmVzb3VyY2UgKndzc19yZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTExNzcsMTUgKzEwNjYsMTUgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IEludmFsaWQgSVJRICVkXG4iLCBtcHVfaXJxW2Rldl0pOwogCQlyZXR1cm4gLUVOWElPOwogCX0KLQl4cG9ydCA9IHBvcnRbZGV2XTsKIAogCS8qCiAJICogR3JhYiBJTyBwb3J0cyB0aGF0IHdlIHdpbGwgbmVlZCB0byBwcm9iZSBzbyB0aGF0IHdlCiAJICogY2FuIGRldGVjdCBhbmQgY29udHJvbCB0aGlzIGhhcmR3YXJlIC4uLgogCSAqLwotCWlvX3JlcyA9IHJlcXVlc3RfcmVnaW9uKHhwb3J0LCA4LCAiU291bmRTY2FwZSIpOworCWlvX3JlcyA9IHJlcXVlc3RfcmVnaW9uKHBvcnRbZGV2XSwgOCwgIlNvdW5kU2NhcGUiKTsKIAlpZiAoIWlvX3JlcykgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IGNhbid0IGdyYWIgcG9ydCAweCV4XG4iLCB4cG9ydCk7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJzc2NhcGU6IGNhbid0IGdyYWIgcG9ydCAweCVseFxuIiwgcG9ydFtkZXZdKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJd3NzX3JlcyA9IE5VTEw7CkBAIC0xMjEyLDEwICsxMTAxLDkgQEAKIAlzcGluX2xvY2tfaW5pdCgmc3NjYXBlLT5md2xvY2spOwogCXNzY2FwZS0+aW9fcmVzID0gaW9fcmVzOwogCXNzY2FwZS0+d3NzX3JlcyA9IHdzc19yZXM7Ci0Jc3NjYXBlLT5pb19iYXNlID0geHBvcnQ7Ci0Jc3NjYXBlLT53c3NfYmFzZSA9IHdzc19wb3J0W2Rldl07CisJc3NjYXBlLT5pb19iYXNlID0gcG9ydFtkZXZdOwogCi0JaWYgKCFkZXRlY3Rfc3NjYXBlKHNzY2FwZSkpIHsKKwlpZiAoIWRldGVjdF9zc2NhcGUoc3NjYXBlLCB3c3NfcG9ydFtkZXZdKSkgewogCQlwcmludGsoS0VSTl9FUlIgInNzY2FwZTogaGFyZHdhcmUgbm90IGRldGVjdGVkIGF0IDB4JXhcbiIsIHNzY2FwZS0+aW9fYmFzZSk7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gX3JlbGVhc2VfZG1hOwpAQCAtMTI4OCwxMiArMTE3NiwxMSBAQAogCX0KICNkZWZpbmUgTUlESV9ERVZOVU0gIDAKIAlpZiAoc3NjYXBlLT50eXBlICE9IFNTQ0FQRV9WSVZPKSB7Ci0JCWVyciA9IGNyZWF0ZV9tcHU0MDEoY2FyZCwgTUlESV9ERVZOVU0sCi0JCQkJICAgIE1QVTQwMV9JTyh4cG9ydCksIG1wdV9pcnFbZGV2XSk7CisJCWVyciA9IGNyZWF0ZV9tcHU0MDEoY2FyZCwgTUlESV9ERVZOVU0sIHBvcnRbZGV2XSwgbXB1X2lycVtkZXZdKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBGYWlsZWQgdG8gY3JlYXRlICIKLQkJCQkJIk1QVS00MDEgZGV2aWNlIGF0IDB4JXhcbiIsCi0JCQkJCU1QVTQwMV9JTyh4cG9ydCkpOworCQkJCQkiTVBVLTQwMSBkZXZpY2UgYXQgMHglbHhcbiIsCisJCQkJCXBvcnRbZGV2XSk7CiAJCQlnb3RvIF9yZWxlYXNlX2RtYTsKIAkJfQogCkBAIC0xMzU3LDEwICsxMjQ0LDEwIEBACiAJc3RydWN0IHNvdW5kc2NhcGUgKnNzY2FwZTsKIAlpbnQgcmV0OwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNvdW5kc2NhcGUpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc291bmRzY2FwZSksICZjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAogCXNzY2FwZSA9IGdldF9jYXJkX3NvdW5kc2NhcGUoY2FyZCk7CiAJc3NjYXBlLT50eXBlID0gU1NDQVBFOwpAQCAtMTQ2MiwxMCArMTM0OSwxMCBAQAogCSAqIENyZWF0ZSBhIG5ldyBBTFNBIHNvdW5kIGNhcmQgZW50cnksIGluIGFudGljaXBhdGlvbgogCSAqIG9mIGRldGVjdGluZyBvdXIgaGFyZHdhcmUgLi4uCiAJICovCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHNvdW5kc2NhcGUpKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCXJldCA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtpZHhdLCBpZFtpZHhdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc291bmRzY2FwZSksICZjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAogCXNzY2FwZSA9IGdldF9jYXJkX3NvdW5kc2NhcGUoY2FyZCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCmluZGV4IDRjMDk1YmMuLmEzNGFlN2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKKysrIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYwpAQCAtMzM4LDE1ICszMzgsMTYgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2NhcmQgKnNuZF93YXZlZnJvbnRfY2FyZF9uZXcoaW50IGRldikKK3N0YXRpYyBpbnQgc25kX3dhdmVmcm9udF9jYXJkX25ldyhpbnQgZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc25kX3dhdmVmcm9udF9jYXJkX3QgKmFjYXJkOworCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3IChpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICAgc2l6ZW9mKHNuZF93YXZlZnJvbnRfY2FyZF90KSk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgc2l6ZW9mKHNuZF93YXZlZnJvbnRfY2FyZF90KSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJYWNhcmQgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJYWNhcmQtPndhdmVmcm9udC5pcnEgPSAtMTsKQEAgLTM1Nyw3ICszNTgsOCBAQAogCWFjYXJkLT53YXZlZnJvbnQuY2FyZCA9IGNhcmQ7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gc25kX3dhdmVmcm9udF9mcmVlOwogCi0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQKQEAgLTU1MSwxMSArNTUzLDExIEBACiAJCXJldHVybiAwOwogI2VuZGlmCiAJaWYgKGNzNDIzMl9wY21fcG9ydFtkZXZdID09IFNORFJWX0FVVE9fUE9SVCkgewotCQlzbmRfcHJpbnRrKCJzcGVjaWZ5IENTNDIzMiBwb3J0XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAic3BlY2lmeSBDUzQyMzIgcG9ydFxuIik7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoaWNzMjExNV9wb3J0W2Rldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7Ci0JCXNuZF9wcmludGsoInNwZWNpZnkgSUNTMjExNSBwb3J0XG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAic3BlY2lmeSBJQ1MyMTE1IHBvcnRcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CkBAIC01NjcsOSArNTY5LDkgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGRldik7Ci0JaWYgKCEgY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX3dhdmVmcm9udF9jYXJkX25ldyhkZXYsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsIHBkZXYpOwogCWlmICgoZXJyID0gc25kX3dhdmVmcm9udF9wcm9iZShjYXJkLCBkZXYpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKQEAgLTYxNiw5ICs2MTgsOSBAQAogCWlmIChkZXYgPj0gU05EUlZfQ0FSRFMpCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2FyZCA9IHNuZF93YXZlZnJvbnRfY2FyZF9uZXcoZGV2KTsKLQlpZiAoISBjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXMgPSBzbmRfd2F2ZWZyb250X2NhcmRfbmV3KGRldiwgJmNhcmQpOworCWlmIChyZXMgPCAwKQorCQlyZXR1cm4gcmVzOwogCiAJaWYgKHNuZF93YXZlZnJvbnRfcG5wIChkZXYsIGNhcmQtPnByaXZhdGVfZGF0YSwgcGNhcmQsIHBpZCkgPCAwKSB7CiAJCWlmIChjczQyMzJfcGNtX3BvcnRbZGV2XSA9PSBTTkRSVl9BVVRPX1BPUlQpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jCmluZGV4IDRjNDEwODIuLmJlYjMxMmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMKKysrIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYwpAQCAtNjMzLDcgKzYzMyw3IEBACiAJCXdidWZbMV0gPSBpID4+IDc7CiAKIAkJaWYgKHNuZF93YXZlZnJvbnRfY21kIChkZXYsIFdGQ19JREVOVElGWV9TQU1QTEVfVFlQRSwgcmJ1Ziwgd2J1ZikpIHsKLQkJCXNuZF9wcmludGsoImNhbm5vdCBpZGVudGlmeSBzYW1wbGUgIgorCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgImNhbm5vdCBpZGVudGlmeSBzYW1wbGUgIgogCQkJCSAgICJ0eXBlIG9mIHNsb3QgJWRcbiIsIGkpOwogCQkJZGV2LT5zYW1wbGVfc3RhdHVzW2ldID0gV0ZfU1RfRU1QVFk7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jIGIvc291bmQvaXNhL3dzcy93c3NfbGliLmMKaW5kZXggM2Q2YzVmMi4uNWQyYmExYiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dzcy93c3NfbGliLmMKKysrIGIvc291bmQvaXNhL3dzcy93c3NfbGliLmMKQEAgLTE4MSwyNSArMTgxLDYgQEAKIAkJdWRlbGF5KDEwMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNuZF93c3Nfb3V0bShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcsCi0JCQkgICAgdW5zaWduZWQgY2hhciBtYXNrLCB1bnNpZ25lZCBjaGFyIHZhbHVlKQotewotCXVuc2lnbmVkIGNoYXIgdG1wID0gKGNoaXAtPmltYWdlW3JlZ10gJiBtYXNrKSB8IHZhbHVlOwotCi0Jc25kX3dzc193YWl0KGNoaXApOwotI2lmZGVmIENPTkZJR19TTkRfREVCVUcKLQlpZiAod3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpICYgQ1M0MjMxX0lOSVQpCi0JCXNuZF9wcmludGsoIm91dG06IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgLSByZWcgPSAweCV4LCB2YWx1ZSA9IDB4JXhcbiIsIHJlZywgdmFsdWUpOwotI2VuZGlmCi0JY2hpcC0+aW1hZ2VbcmVnXSA9IHRtcDsKLQlpZiAoIWNoaXAtPmNhbGlicmF0ZV9tdXRlKSB7Ci0JCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwgY2hpcC0+bWNlX2JpdCB8IHJlZyk7Ci0JCXdtYigpOwotCQl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFRyksIHRtcCk7Ci0JCW1iKCk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBzbmRfd3NzX2RvdXQoc3RydWN0IHNuZF93c3MgKmNoaXAsIHVuc2lnbmVkIGNoYXIgcmVnLAogCQkJIHVuc2lnbmVkIGNoYXIgdmFsdWUpCiB7CkBAIC0yMTksNyArMjAwLDggQEAKIAlzbmRfd3NzX3dhaXQoY2hpcCk7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygib3V0OiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0IC0gcmVnID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCByZWcsIHZhbHVlKTsKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJvdXQ6IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgIgorCQkJICAgIi0gcmVnID0gMHgleCwgdmFsdWUgPSAweCV4XG4iLCByZWcsIHZhbHVlKTsKICNlbmRpZgogCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoUkVHU0VMKSwgY2hpcC0+bWNlX2JpdCB8IHJlZyk7CiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUcpLCB2YWx1ZSk7CkBAIC0yMzUsNyArMjE3LDggQEAKIAlzbmRfd3NzX3dhaXQoY2hpcCk7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCWlmICh3c3NfaW5iKGNoaXAsIENTNDIzMVAoUkVHU0VMKSkgJiBDUzQyMzFfSU5JVCkKLQkJc25kX3ByaW50aygiaW46IGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgLSByZWcgPSAweCV4XG4iLCByZWcpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluOiBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICIKKwkJCSAgICItIHJlZyA9IDB4JXhcbiIsIHJlZyk7CiAjZW5kaWYKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCByZWcpOwogCW1iKCk7CkBAIC0yNTIsNyArMjM1LDcgQEAKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFRyksIHZhbCk7CiAJY2hpcC0+ZWltYWdlW0NTNDIzNl9SRUcocmVnKV0gPSB2YWw7CiAjaWYgMAotCXByaW50aygiZXh0IG91dCA6IHJlZyA9IDB4JXgsIHZhbCA9IDB4JXhcbiIsIHJlZywgdmFsKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiZXh0IG91dCA6IHJlZyA9IDB4JXgsIHZhbCA9IDB4JXhcbiIsIHJlZywgdmFsKTsKICNlbmRpZgogfQogRVhQT1JUX1NZTUJPTChzbmRfY3M0MjM2X2V4dF9vdXQpOwpAQCAtMjY4LDcgKzI1MSw4IEBACiAJewogCQl1bnNpZ25lZCBjaGFyIHJlczsKIAkJcmVzID0gd3NzX2luYihjaGlwLCBDUzQyMzFQKFJFRykpOwotCQlwcmludGsoImV4dCBpbiA6IHJlZyA9IDB4JXgsIHZhbCA9IDB4JXhcbiIsIHJlZywgcmVzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImV4dCBpbiA6IHJlZyA9IDB4JXgsIHZhbCA9IDB4JXhcbiIsCisJCSAgICAgICByZWcsIHJlcyk7CiAJCXJldHVybiByZXM7CiAJfQogI2VuZGlmCkBAIC0zOTQsMTMgKzM3OCwxNiBAQAogCXNuZF93c3Nfd2FpdChjaGlwKTsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJtY2VfdXAgLSBhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICgwKVxuIik7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRworCQkJICAgIm1jZV91cCAtIGF1dG8gY2FsaWJyYXRpb24gdGltZSBvdXQgKDApXG4iKTsKICNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCWNoaXAtPm1jZV9iaXQgfD0gQ1M0MjMxX01DRTsKIAl0aW1lb3V0ID0gd3NzX2luYihjaGlwLCBDUzQyMzFQKFJFR1NFTCkpOwogCWlmICh0aW1lb3V0ID09IDB4ODApCi0JCXNuZF9wcmludGsoIm1jZV91cCBbMHglbHhdOiBzZXJpb3VzIGluaXQgcHJvYmxlbSAtIGNvZGVjIHN0aWxsIGJ1c3lcbiIsIGNoaXAtPnBvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIm1jZV91cCBbMHglbHhdOiAiCisJCQkgICAic2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLAorCQkJICAgY2hpcC0+cG9ydCk7CiAJaWYgKCEodGltZW91dCAmIENTNDIzMV9NQ0UpKQogCQl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksCiAJCQkgY2hpcC0+bWNlX2JpdCB8ICh0aW1lb3V0ICYgMHgxZikpOwpAQCAtNDE5LDcgKzQwNiw5IEBACiAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiAJaWYgKHdzc19pbmIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpKSAmIENTNDIzMV9JTklUKQotCQlzbmRfcHJpbnRrKCJtY2VfZG93biBbMHglbHhdIC0gYXV0byBjYWxpYnJhdGlvbiB0aW1lIG91dCAoMClcbiIsIChsb25nKUNTNDIzMVAoUkVHU0VMKSk7CisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAibWNlX2Rvd24gWzB4JWx4XSAtICIKKwkJCSAgICJhdXRvIGNhbGlicmF0aW9uIHRpbWUgb3V0ICgwKVxuIiwKKwkJCSAgIChsb25nKUNTNDIzMVAoUkVHU0VMKSk7CiAjZW5kaWYKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAljaGlwLT5tY2VfYml0ICY9IH5DUzQyMzFfTUNFOwpAQCAtNDI3LDcgKzQxNiw5IEBACiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChSRUdTRUwpLCBjaGlwLT5tY2VfYml0IHwgKHRpbWVvdXQgJiAweDFmKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAlpZiAodGltZW91dCA9PSAweDgwKQotCQlzbmRfcHJpbnRrKCJtY2VfZG93biBbMHglbHhdOiBzZXJpb3VzIGluaXQgcHJvYmxlbSAtIGNvZGVjIHN0aWxsIGJ1c3lcbiIsIGNoaXAtPnBvcnQpOworCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgIm1jZV9kb3duIFsweCVseF06ICIKKwkJCSAgICJzZXJpb3VzIGluaXQgcHJvYmxlbSAtIGNvZGVjIHN0aWxsIGJ1c3lcbiIsCisJCQkgICBjaGlwLT5wb3J0KTsKIAlpZiAoKHRpbWVvdXQgJiBDUzQyMzFfTUNFKSA9PSAwIHx8ICEoY2hpcC0+aGFyZHdhcmUgJiBod19tYXNrKSkKIAkJcmV0dXJuOwogCkBAIC01NjUsNyArNTU2LDcgQEAKIAlpZiAoY2hhbm5lbHMgPiAxKQogCQlyZm9ybWF0IHw9IENTNDIzMV9TVEVSRU87CiAjaWYgMAotCXNuZF9wcmludGsoImdldF9mb3JtYXQ6IDB4JXggKG1vZGU9MHgleClcbiIsIGZvcm1hdCwgbW9kZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJnZXRfZm9ybWF0OiAweCV4IChtb2RlPTB4JXgpXG4iLCBmb3JtYXQsIG1vZGUpOwogI2VuZGlmCiAJcmV0dXJuIHJmb3JtYXQ7CiB9CkBAIC01ODcsNyArNTc4LDE1IEBACiAJCQkgICAgIGNoaXAtPmltYWdlW0NTNDIzMV9SSUdIVF9JTlBVVF0pOwogCQlzbmRfd3NzX2RvdXQoY2hpcCwgQ1M0MjMxX0xPT1BCQUNLLAogCQkJICAgICBjaGlwLT5pbWFnZVtDUzQyMzFfTE9PUEJBQ0tdKTsKKwl9IGVsc2UgeworCQlzbmRfd3NzX2RvdXQoY2hpcCwgQ1M0MjMxX0xFRlRfSU5QVVQsCisJCQkgICAgIDApOworCQlzbmRfd3NzX2RvdXQoY2hpcCwgQ1M0MjMxX1JJR0hUX0lOUFVULAorCQkJICAgICAwKTsKKwkJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9MT09QQkFDSywKKwkJCSAgICAgMHhmZCk7CiAJfQorCiAJc25kX3dzc19kb3V0KGNoaXAsIENTNDIzMV9BVVgxX0xFRlRfSU5QVVQsCiAJCSAgICAgbXV0ZSB8IGNoaXAtPmltYWdlW0NTNDIzMV9BVVgxX0xFRlRfSU5QVVRdKTsKIAlzbmRfd3NzX2RvdXQoY2hpcCwgQ1M0MjMxX0FVWDFfUklHSFRfSU5QVVQsCkBAIC02MzAsNyArNjI5LDYgQEAKIAlpbnQgZnVsbF9jYWxpYiA9IDE7CiAKIAltdXRleF9sb2NrKCZjaGlwLT5tY2VfbXV0ZXgpOwotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMSk7CiAJaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19DUzQyMzFBIHx8CiAJICAgIChjaGlwLT5oYXJkd2FyZSAmIFdTU19IV19DUzQyMzJfTUFTSykpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC02NDYsNiArNjQ0LDI0IEBACiAJCQlmdWxsX2NhbGliID0gMDsKIAkJfQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOworCX0gZWxzZSBpZiAoY2hpcC0+aGFyZHdhcmUgPT0gV1NTX0hXX0FEMTg0NSkgeworCQl1bnNpZ25lZCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKworCQkvKgorCQkgKiBQcm9ncmFtIHRoZSBBRDE4NDUgY29ycmVjdGx5IGZvciB0aGUgcGxheWJhY2sgc3RyZWFtLgorCQkgKiBOb3RlIHRoYXQgd2UgZG8gTk9UIG5lZWQgdG8gdG9nZ2xlIHRoZSBNQ0UgYml0IGJlY2F1c2UKKwkJICogdGhlIFBMQVlCQUNLX0VOQUJMRSBiaXQgb2YgdGhlIEludGVyZmFjZSBDb25maWd1cmF0aW9uCisJCSAqIHJlZ2lzdGVyIGlzIHNldC4KKwkJICoKKwkJICogTk9URTogV2Ugc2VlbSB0byBuZWVkIHRvIHdyaXRlIHRvIHRoZSBNU0IgYmVmb3JlIHRoZSBMU0IKKwkJICogICAgICAgdG8gZ2V0IHRoZSBjb3JyZWN0IHNhbXBsZSBmcmVxdWVuY3kuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX1BMQVlCS19GT1JNQVQsIChwZGZyICYgMHhmMCkpOworCQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfVVBSX0ZSRVFfU0VMLCAocmF0ZSA+PiA4KSAmIDB4ZmYpOworCQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfTFdSX0ZSRVFfU0VMLCByYXRlICYgMHhmZik7CisJCWZ1bGxfY2FsaWIgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCX0KIAlpZiAoZnVsbF9jYWxpYikgewogCQlzbmRfd3NzX21jZV91cChjaGlwKTsKQEAgLTY2Myw3ICs2NzksNiBAQAogCQkJdWRlbGF5KDEwMCk7CS8qIHRoaXMgc2VlbXMgdG8gaGVscCAqLwogCQlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCX0KLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDApOwogCW11dGV4X3VubG9jaygmY2hpcC0+bWNlX211dGV4KTsKIH0KIApAQCAtNjc1LDcgKzY5MCw2IEBACiAJaW50IGZ1bGxfY2FsaWIgPSAxOwogCiAJbXV0ZXhfbG9jaygmY2hpcC0+bWNlX211dGV4KTsKLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDEpOwogCWlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQ1M0MjMxQSB8fAogCSAgICAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQ1M0MjMyX01BU0spKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwpAQCAtNjkwLDYgKzcwNCwyNCBAQAogCQkJZnVsbF9jYWxpYiA9IDA7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwl9IGVsc2UgaWYgKGNoaXAtPmhhcmR3YXJlID09IFdTU19IV19BRDE4NDUpIHsKKwkJdW5zaWduZWQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisKKwkJLyoKKwkJICogUHJvZ3JhbSB0aGUgQUQxODQ1IGNvcnJlY3RseSBmb3IgdGhlIGNhcHR1cmUgc3RyZWFtLgorCQkgKiBOb3RlIHRoYXQgd2UgZG8gTk9UIG5lZWQgdG8gdG9nZ2xlIHRoZSBNQ0UgYml0IGJlY2F1c2UKKwkJICogdGhlIFBMQVlCQUNLX0VOQUJMRSBiaXQgb2YgdGhlIEludGVyZmFjZSBDb25maWd1cmF0aW9uCisJCSAqIHJlZ2lzdGVyIGlzIHNldC4KKwkJICoKKwkJICogTk9URTogV2Ugc2VlbSB0byBuZWVkIHRvIHdyaXRlIHRvIHRoZSBNU0IgYmVmb3JlIHRoZSBMU0IKKwkJICogICAgICAgdG8gZ2V0IHRoZSBjb3JyZWN0IHNhbXBsZSBmcmVxdWVuY3kuCisJCSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwkJc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX1JFQ19GT1JNQVQsIChjZGZyICYgMHhmMCkpOworCQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfVVBSX0ZSRVFfU0VMLCAocmF0ZSA+PiA4KSAmIDB4ZmYpOworCQlzbmRfd3NzX291dChjaGlwLCBBRDE4NDVfTFdSX0ZSRVFfU0VMLCByYXRlICYgMHhmZik7CisJCWZ1bGxfY2FsaWIgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCX0KIAlpZiAoZnVsbF9jYWxpYikgewogCQlzbmRfd3NzX21jZV91cChjaGlwKTsKQEAgLTcxNCw3ICs3NDYsNiBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCQlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCX0KLQlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDApOwogCW11dGV4X3VubG9jaygmY2hpcC0+bWNlX211dGV4KTsKIH0KIApAQCAtNzcxLDEwICs4MDIsMTEgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAxKTsKIAlzbmRfd3NzX21jZV9kb3duKGNoaXApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDEpXG4iKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6ICgxKVxuIik7CiAjZW5kaWYKIAlzbmRfd3NzX21jZV91cChjaGlwKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKQEAgLTc4OSwxOCArODIxLDIwIEBACiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICgyKVxuIik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoMilcbiIpOwogI2VuZGlmCiAKIAlzbmRfd3NzX21jZV91cChjaGlwKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKKwljaGlwLT5pbWFnZVtDUzQyMzFfSUZBQ0VfQ1RSTF0gJj0gfkNTNDIzMV9BVVRPQ0FMSUI7CisJc25kX3dzc19vdXQoY2hpcCwgQ1M0MjMxX0lGQUNFX0NUUkwsIGNoaXAtPmltYWdlW0NTNDIzMV9JRkFDRV9DVFJMXSk7CiAJc25kX3dzc19vdXQoY2hpcCwKIAkJICAgIENTNDIzMV9BTFRfRkVBVFVSRV8xLCBjaGlwLT5pbWFnZVtDUzQyMzFfQUxUX0ZFQVRVUkVfMV0pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICgzKSAtIGFmZWkgPSAweCV4XG4iLAorCXNuZF9wcmludGsoS0VSTl9ERUJVRyAiaW5pdDogKDMpIC0gYWZlaSA9IDB4JXhcbiIsCiAJCSAgIGNoaXAtPmltYWdlW0NTNDIzMV9BTFRfRkVBVFVSRV8xXSk7CiAjZW5kaWYKIApAQCAtODE3LDcgKzg1MSw3IEBACiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKIAogI2lmZGVmIFNORFJWX0RFQlVHX01DRQotCXNuZF9wcmludGsoImluaXQ6ICg0KVxuIik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbml0OiAoNClcbiIpOwogI2VuZGlmCiAKIAlzbmRfd3NzX21jZV91cChjaGlwKTsKQEAgLTgyNyw5ICs4NjEsMTAgQEAKIAkJCSAgICBjaGlwLT5pbWFnZVtDUzQyMzFfUkVDX0ZPUk1BVF0pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJc25kX3dzc19tY2VfZG93bihjaGlwKTsKKwlzbmRfd3NzX2NhbGlicmF0ZV9tdXRlKGNoaXAsIDApOwogCiAjaWZkZWYgU05EUlZfREVCVUdfTUNFCi0Jc25kX3ByaW50aygiaW5pdDogKDUpXG4iKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImluaXQ6ICg1KVxuIik7CiAjZW5kaWYKIH0KIApAQCAtODg1LDggKzkyMCw2IEBACiAJCW11dGV4X3VubG9jaygmY2hpcC0+b3Blbl9tdXRleCk7CiAJCXJldHVybjsKIAl9Ci0Jc25kX3dzc19jYWxpYnJhdGVfbXV0ZShjaGlwLCAxKTsKLQogCS8qIGRpc2FibGUgSVJRICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPnJlZ19sb2NrLCBmbGFncyk7CiAJaWYgKCEoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQUQxODQ4X01BU0spKQpAQCAtOTE5LDggKzk1Miw2IEBACiAJd3NzX291dGIoY2hpcCwgQ1M0MjMxUChTVEFUVVMpLCAwKTsJLyogY2xlYXIgSVJRICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+cmVnX2xvY2ssIGZsYWdzKTsKIAotCXNuZF93c3NfY2FsaWJyYXRlX211dGUoY2hpcCwgMCk7Ci0KIAljaGlwLT5tb2RlID0gMDsKIAltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOwogfQpAQCAtMTExMyw3ICsxMTQ0LDcgQEAKIAlpZiAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQUQxODQ4X01BU0spCiAJCXdzc19vdXRiKGNoaXAsIENTNDIzMVAoU1RBVFVTKSwgMCk7CiAJZWxzZQotCQlzbmRfd3NzX291dG0oY2hpcCwgQ1M0MjMxX0lSUV9TVEFUVVMsIHN0YXR1cywgMCk7CisJCXNuZF93c3Nfb3V0KGNoaXAsIENTNDIzMV9JUlFfU1RBVFVTLCBzdGF0dXMpOwogCXNwaW5fdW5sb2NrKCZjaGlwLT5yZWdfbG9jayk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTI3OCw3ICsxMzA5LDggQEAKIAkJfSBlbHNlIGlmIChyZXYgPT0gMHgwMykgewogCQkJY2hpcC0+aGFyZHdhcmUgPSBXU1NfSFdfQ1M0MjM2QjsKIAkJfSBlbHNlIHsKLQkJCXNuZF9wcmludGsoInVua25vd24gQ1MgY2hpcCB3aXRoIHZlcnNpb24gMHgleFxuIiwgcmV2KTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCQkgICAidW5rbm93biBDUyBjaGlwIHdpdGggdmVyc2lvbiAweCV4XG4iLCByZXYpOwogCQkJcmV0dXJuIC1FTk9ERVY7CQkvKiB1bmtub3duIENTNDIzMSBjaGlwPyAqLwogCQl9CiAJfQpAQCAtMTMxNCw2ICsxMzQ2LDEwIEBACiAJCWNoaXAtPmltYWdlW0NTNDIzMV9BTFRfRkVBVFVSRV8yXSA9CiAJCQljaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfSU5URVJXQVZFID8gMHhjMiA6IDB4MDE7CiAJfQorCS8qIGVuYWJsZSBmaW5lIGdyYWluZWQgZnJlcXVlbmN5IHNlbGVjdGlvbiAqLworCWlmIChjaGlwLT5oYXJkd2FyZSA9PSBXU1NfSFdfQUQxODQ1KQorCQljaGlwLT5pbWFnZVtBRDE4NDVfUFdSX0RPV05dID0gODsKKwogCXB0ciA9ICh1bnNpZ25lZCBjaGFyICopICZjaGlwLT5pbWFnZTsKIAlyZWdudW0gPSAoY2hpcC0+aGFyZHdhcmUgJiBXU1NfSFdfQUQxODQ4X01BU0spID8gMTYgOiAzMjsKIAlzbmRfd3NzX21jZV9kb3duKGNoaXApOwpAQCAtMTM0Miw3ICsxMzc4LDEwIEBACiAJCQkJY2FzZSA2OgogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzNSBjaGlwIChlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsIGlkKTsKKwkJCQkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJCSJ1bmtub3duIENTNDIzNSBjaGlwICIKKwkJCQkJCSIoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLAorCQkJCQkJaWQpOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoKGlkICYgMHgxZikgPT0gMHgwYikgewkvKiBDUzQyMzYvQiAqLwogCQkJCXN3aXRjaCAoaWQgPj4gNSkgewpAQCAtMTM1Myw3ICsxMzkyLDEwIEBACiAJCQkJCWNoaXAtPmhhcmR3YXJlID0gV1NTX0hXX0NTNDIzNkI7CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6Ci0JCQkJCXNuZF9wcmludGsoInVua25vd24gQ1M0MjM2IGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM2IGNoaXAgIgorCQkJCQkJIihlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsCisJCQkJCQlpZCk7CiAJCQkJfQogCQkJfSBlbHNlIGlmICgoaWQgJiAweDFmKSA9PSAweDA4KSB7CS8qIENTNDIzN0IgKi8KIAkJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzdCOwpAQCAtMTM2NCw3ICsxNDA2LDEwIEBACiAJCQkJY2FzZSA3OgogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzN0IgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkidW5rbm93biBDUzQyMzdCIGNoaXAgIgorCQkJCQkJIihlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsCisJCQkJCQlpZCk7CiAJCQkJfQogCQkJfSBlbHNlIGlmICgoaWQgJiAweDFmKSA9PSAweDA5KSB7CS8qIENTNDIzOEIgKi8KIAkJCQljaGlwLT5oYXJkd2FyZSA9IFdTU19IV19DUzQyMzhCOwpAQCAtMTM3NCw3ICsxNDE5LDEwIEBACiAJCQkJY2FzZSA3OgogCQkJCQlicmVhazsKIAkJCQlkZWZhdWx0OgotCQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzOEIgY2hpcCAoZW5oYW5jZWQgdmVyc2lvbiA9IDB4JXgpXG4iLCBpZCk7CisJCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCQkidW5rbm93biBDUzQyMzhCIGNoaXAgIgorCQkJCQkJIihlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsCisJCQkJCQlpZCk7CiAJCQkJfQogCQkJfSBlbHNlIGlmICgoaWQgJiAweDFmKSA9PSAweDFlKSB7CS8qIENTNDIzOSAqLwogCQkJCWNoaXAtPmhhcmR3YXJlID0gV1NTX0hXX0NTNDIzOTsKQEAgLTEzODQsMTAgKzE0MzIsMTUgQEAKIAkJCQljYXNlIDY6CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6Ci0JCQkJCXNuZF9wcmludGsoInVua25vd24gQ1M0MjM5IGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkJInVua25vd24gQ1M0MjM5IGNoaXAgIgorCQkJCQkJIihlbmhhbmNlZCB2ZXJzaW9uID0gMHgleClcbiIsCisJCQkJCQlpZCk7CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQlzbmRfcHJpbnRrKCJ1bmtub3duIENTNDIzNi9DUzQyM3hCIGNoaXAgKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOworCQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSAgICJ1bmtub3duIENTNDIzNi9DUzQyM3hCIGNoaXAgIgorCQkJCQkgICAiKGVuaGFuY2VkIHZlcnNpb24gPSAweCV4KVxuIiwgaWQpOwogCQkJfQogCQl9CiAJfQpAQCAtMTYxOCw3ICsxNjcxLDggQEAKIAl3c3Nfb3V0YihjaGlwLCBDUzQyMzFQKFJFR1NFTCksIGNoaXAtPm1jZV9iaXQgfCAodGltZW91dCAmIDB4MWYpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5yZWdfbG9jaywgZmxhZ3MpOwogCWlmICh0aW1lb3V0ID09IDB4ODApCi0JCXNuZF9wcmludGsoImRvd24gWzB4JWx4XTogc2VyaW91cyBpbml0IHByb2JsZW0gLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiZG93biBbMHglbHhdOiBzZXJpb3VzIGluaXQgcHJvYmxlbSAiCisJCQkgICAiLSBjb2RlYyBzdGlsbCBidXN5XG4iLCBjaGlwLT5wb3J0KTsKIAlpZiAoKHRpbWVvdXQgJiBDUzQyMzFfTUNFKSA9PSAwIHx8CiAJICAgICEoY2hpcC0+aGFyZHdhcmUgJiAoV1NTX0hXX0NTNDIzMV9NQVNLIHwgV1NTX0hXX0NTNDIzMl9NQVNLKSkpIHsKIAkJcmV0dXJuOwpAQCAtMTYyOCw3ICsxNjgyLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotc3RhdGljIGludCBzbmRfd3NzX2ZyZWUoc3RydWN0IHNuZF93c3MgKmNoaXApCitpbnQgc25kX3dzc19mcmVlKHN0cnVjdCBzbmRfd3NzICpjaGlwKQogewogCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UoY2hpcC0+cmVzX3BvcnQpOwogCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UoY2hpcC0+cmVzX2Nwb3J0KTsKQEAgLTE2NTEsNiArMTcwNSw3IEBACiAJa2ZyZWUoY2hpcCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNuZF93c3NfZnJlZSk7CiAKIHN0YXRpYyBpbnQgc25kX3dzc19kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQogewpAQCAtMTgyMCw3ICsxODc1LDggQEAKICNpZiAwCiAJaWYgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzMl9NQVNLKSB7CiAJCWlmIChjaGlwLT5yZXNfY3BvcnQgPT0gTlVMTCkKLQkJCXNuZF9wcmludGsoIkNTNDIzMiBjb250cm9sIHBvcnQgZmVhdHVyZXMgYXJlIG5vdCBhY2Nlc3NpYmxlXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIkNTNDIzMiBjb250cm9sIHBvcnQgZmVhdHVyZXMgYXJlICIKKwkJCQkgICAibm90IGFjY2Vzc2libGVcbiIpOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9zb3VuZC9taXBzL2F1MXgwMC5jIGIvc291bmQvbWlwcy9hdTF4MDAuYwppbmRleCAxODgxY2VjLi4zZTc2M2Q2IDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL2F1MXgwMC5jCisrKyBiL3NvdW5kL21pcHMvYXUxeDAwLmMKQEAgLTYzNiw5ICs2MzYsMTAgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF9hdTEwMDAgKmF1MTAwMDsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoLTEsICJBQzk3IiwgVEhJU19NT0RVTEUsIHNpemVvZihzdHJ1Y3Qgc25kX2F1MTAwMCkpOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZSgtMSwgIkFDOTciLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc25kX2F1MTAwMCksICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF9hdTEwMDBfZnJlZTsKIAlhdTEwMDAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CkBAIC02NzgsNyArNjc5LDcgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlwcmludGsoIEtFUk5fSU5GTyAiQUxTQSBBQzk3OiBEcml2ZXIgSW5pdGlhbGl6ZWRcbiIgKTsKKwlwcmludGsoS0VSTl9JTkZPICJBTFNBIEFDOTc6IERyaXZlciBJbml0aWFsaXplZFxuIik7CiAJYXUxMDAwX2NhcmQgPSBjYXJkOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9oYWwyLmMgYi9zb3VuZC9taXBzL2hhbDIuYwppbmRleCBkYjQ5NWJlLi5jNTI2OTFjIDEwMDY0NAotLS0gYS9zb3VuZC9taXBzL2hhbDIuYworKysgYi9zb3VuZC9taXBzL2hhbDIuYwpAQCAtODc4LDkgKzg3OCw5IEBACiAJc3RydWN0IHNuZF9oYWwyICpjaGlwOwogCWludCBlcnI7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBoYWwyX2NyZWF0ZShjYXJkLCAmY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvc2dpbzJhdWRpby5jIGIvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKaW5kZXggNGM2MzUwNC4uNjZmM2I0OCAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKKysrIGIvc291bmQvbWlwcy9zZ2lvMmF1ZGlvLmMKQEAgLTkzNiw5ICs5MzYsOSBAQAogCXN0cnVjdCBzbmRfc2dpbzJhdWRpbyAqY2hpcDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX3NnaW8yYXVkaW9fY3JlYXRlKGNhcmQsICZjaGlwKTsKIAlpZiAoZXJyIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2FkMTg0OC5jIGIvc291bmQvb3NzL2FkMTg0OC5jCmluZGV4IDdjZjk5MTMuLmQxMmJkOTggMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9hZDE4NDguYworKysgYi9zb3VuZC9vc3MvYWQxODQ4LmMKQEAgLTI4MCw3ICsyODAsNyBAQAogCXdoaWxlICh0aW1lb3V0ID4gMCAmJiAoYWRfcmVhZChkZXZjLCAxMSkgJiAweDIwKSkKIAkJdGltZW91dC0tOwogCWlmIChhZF9yZWFkKGRldmMsIDExKSAmIDB4MjApCi0JCWlmICggKGRldmMtPm1vZGVsICE9IE1EXzE4NDUpIHx8IChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1X1NTQ0FQRSkpCisJCWlmICgoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NSkgJiYgKGRldmMtPm1vZGVsICE9IE1EXzE4NDVfU1NDQVBFKSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgImFkMTg0ODogQXV0byBjYWxpYnJhdGlvbiB0aW1lZCBvdXQoMykuXG4iKTsKIH0KIApAQCAtMjEwNyw3ICsyMTA3LDcgQEAKIAlzd2l0Y2ggKGNtZCkKIAl7CiAJCWNhc2UgQUQxODQ4X1NFVF9YVEFMOgkvKiBDaGFuZ2UgY2xvY2sgZnJlcXVlbmN5IG9mIEFEMTg0NSAob25seSApICovCi0JCQlpZiAoZGV2Yy0+bW9kZWwgIT0gTURfMTg0NSB8fCBkZXZjLT5tb2RlbCAhPSBNRF8xODQ1X1NTQ0FQRSkKKwkJCWlmIChkZXZjLT5tb2RlbCAhPSBNRF8xODQ1ICYmIGRldmMtPm1vZGVsICE9IE1EXzE4NDVfU1NDQVBFKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmMtPmxvY2ssZmxhZ3MpOwogCQkJYWRfZW50ZXJfTUNFKGRldmMpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2F1MTU1MF9hYzk3LmMgYi9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYwppbmRleCA4MWUxZjQ0Li40MTkxYWNjIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYworKysgYi9zb3VuZC9vc3MvYXUxNTUwX2FjOTcuYwpAQCAtMTYyNyw3ICsxNjI3LDkgQEAKIAkJCQkgICAgc2l6ZW9mKGFiaW5mbykpID8gLUVGQVVMVCA6IDA7CiAKIAljYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6CisJCXNwaW5fbG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFNORENUTF9EU1BfR0VUT0RFTEFZOgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2F1ZGlvLmMgYi9zb3VuZC9vc3MvYXVkaW8uYwppbmRleCA4OWJkMjdhLi5iNjljMDViIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvYXVkaW8uYworKysgYi9zb3VuZC9vc3MvYXVkaW8uYwpAQCAtNDMzLDcgKzQzMyw5IEBACiAJCQlyZXR1cm4gZG1hX2lvY3RsKGRldiwgY21kLCBhcmcpOwogCQkKIAkJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgorCQkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCQkJZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOworCQkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCQlyZXR1cm4gMDsKIAogCQljYXNlIFNORENUTF9EU1BfR0VUQ0FQUzoKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFidWYuYyBiL3NvdW5kL29zcy9kbWFidWYuYwppbmRleCAxZTkwZDc2Li4xYmZjZjdlIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hYnVmLmMKKysrIGIvc291bmQvb3NzL2RtYWJ1Zi5jCkBAIC00MzksNyArNDM5LDcgQEAKIAkJCURNQWJ1Zl9sYXVuY2hfb3V0cHV0KGRldiwgZG1hcCk7CiAJCWFkZXYtPmRtYXBfb3V0LT5mbGFncyB8PSBETUFfU1lOQ0lORzsKIAkJYWRldi0+ZG1hcF9vdXQtPnVuZGVycnVuX2NvdW50ID0gMDsKLQkJd2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSAmJiBuKysgPD0gYWRldi0+ZG1hcF9vdXQtPm5idWZzICYmIAorCQl3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpICYmIG4rKyA8IGFkZXYtPmRtYXBfb3V0LT5uYnVmcyAmJgogCQkgICAgICAgYWRldi0+ZG1hcF9vdXQtPnFsZW4gJiYgYWRldi0+ZG1hcF9vdXQtPnVuZGVycnVuX2NvdW50ID09IDApIHsKIAkJCWxvbmcgdCA9IGRtYWJ1Zl90aW1lb3V0KGRtYXApOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hcC0+bG9jayxmbGFncyk7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXRhcmkuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hdGFyaS5jCmluZGV4IDM4OTMxZjIuLjFmNDc3NDEgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hdGFyaS5jCisrKyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hdGFyaS5jCkBAIC0xNTI0LDcgKzE1MjQsNyBAQAogCS5zcGVlZAk9IDgwMDAKIH0gOwogCi1zdGF0aWMgTUFDSElORSBtYWNoVFQgPSB7CitzdGF0aWMgX19pbml0ZGF0YSBNQUNISU5FIG1hY2hUVCA9IHsKIAkubmFtZQkJPSAiQXRhcmkiLAogCS5uYW1lMgkJPSAiVFQiLAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKQEAgLTE1NTMsNyArMTU1Myw3IEBACiAJLmNhcGFiaWxpdGllcwk9ICBEU1BfQ0FQX0JBVENICS8qIEFzIHBlciBTTkRDVExfRFNQX0dFVENBUFMgKi8KIH07CiAKLXN0YXRpYyBNQUNISU5FIG1hY2hGYWxjb24gPSB7CitzdGF0aWMgX19pbml0ZGF0YSBNQUNISU5FIG1hY2hGYWxjb24gPSB7CiAJLm5hbWUJCT0gIkF0YXJpIiwKIAkubmFtZTIJCT0gIkZBTENPTiIsCiAJLmRtYV9hbGxvYwk9IEF0YUFsbG9jLApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3BhczJfY2FyZC5jIGIvc291bmQvb3NzL3BhczJfY2FyZC5jCmluZGV4IDI1ZjNhMjIuLjdmMzc3ZWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9wYXMyX2NhcmQuYworKysgYi9zb3VuZC9vc3MvcGFzMl9jYXJkLmMKQEAgLTE1Niw5ICsxNTYsNyBAQAogCQkJCQkJICogMHg4MAogCQkJCQkJICovICwgMHhCODgpOwogCi0JcGFzX3dyaXRlKDB4ODAKLQkJICB8IGpveXN0aWNrPzB4NDA6MAotCQkgICwweEYzODgpOworCXBhc193cml0ZSgweDgwIHwgKGpveXN0aWNrID8gMHg0MCA6IDApLCAweEYzODgpOwogCiAJaWYgKHBhc19pcnEgPCAwIHx8IHBhc19pcnEgPiAxNSkKIAl7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvcHNzLmMgYi9zb3VuZC9vc3MvcHNzLmMKaW5kZXggMTZlZDA2OS4uMTY1MTdhNSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3Bzcy5jCisrKyBiL3NvdW5kL29zcy9wc3MuYwpAQCAtNDU3LDEwICs0NTcsOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBzZXRfdm9sdW1lX21vbm8odW5zaWduZWQgX191c2VyICpwLCBpbnQgKmFsZWZ0KQorc3RhdGljIGludCBzZXRfdm9sdW1lX21vbm8odW5zaWduZWQgX191c2VyICpwLCB1bnNpZ25lZCBpbnQgKmFsZWZ0KQogewotCWludCBsZWZ0OwotCXVuc2lnbmVkIHZvbHVtZTsKKwl1bnNpZ25lZCBpbnQgbGVmdCwgdm9sdW1lOwogCWlmIChnZXRfdXNlcih2b2x1bWUsIHApKQogCQlyZXR1cm4gLUVGQVVMVDsKIAkKQEAgLTQ3MSwxMCArNDcwLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X3ZvbHVtZV9zdGVyZW8odW5zaWduZWQgX191c2VyICpwLCBpbnQgKmFsZWZ0LCBpbnQgKmFyaWdodCkKK3N0YXRpYyBpbnQgc2V0X3ZvbHVtZV9zdGVyZW8odW5zaWduZWQgX191c2VyICpwLAorCQkJICAgICB1bnNpZ25lZCBpbnQgKmFsZWZ0LAorCQkJICAgICB1bnNpZ25lZCBpbnQgKmFyaWdodCkKIHsKLQlpbnQgbGVmdCwgcmlnaHQ7Ci0JdW5zaWduZWQgdm9sdW1lOworCXVuc2lnbmVkIGludCBsZWZ0LCByaWdodCwgdm9sdW1lOwogCWlmIChnZXRfdXNlcih2b2x1bWUsIHApKQogCQlyZXR1cm4gLUVGQVVMVDsKIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3NlcXVlbmNlci5jIGIvc291bmQvb3NzL3NlcXVlbmNlci5jCmluZGV4IDVjMjE1ZjcuLmM3OTg3NDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zZXF1ZW5jZXIuYworKysgYi9zb3VuZC9vc3Mvc2VxdWVuY2VyLmMKQEAgLTIxMiw3ICsyMTIsNiBAQAogewogCXVuc2lnbmVkIGNoYXIgZXZlbnRfcmVjW0VWX1NaXSwgZXZfY29kZTsKIAlpbnQgcCA9IDAsIGMsIGV2X3NpemU7Ci0JaW50IGVycjsKIAlpbnQgbW9kZSA9IHRyYW5zbGF0ZV9tb2RlKGZpbGUpOwogCiAJZGV2ID0gZGV2ID4+IDQ7CkBAIC0yODUsNyArMjg0LDcgQEAKIAkJewogCQkJaWYgKCFtaWRpX29wZW5lZFtldmVudF9yZWNbMl1dKQogCQkJewotCQkJCWludCBtb2RlOworCQkJCWludCBlcnIsIG1vZGU7CiAJCQkJaW50IGRldiA9IGV2ZW50X3JlY1syXTsKIAogCQkJCWlmIChkZXYgPj0gbWF4X21pZGlkZXYgfHwgbWlkaV9kZXZzW2Rldl09PU5VTEwpCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKaW5kZXggZTVkNDIzOS4uNzhjZmI2NiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCisrKyBiL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYwpAQCAtMTM1LDcgKzEzNSw5IEBACiAJCXJldHVybiBwdXRfdXNlcihBRk1UX1U4LCAoaW50ICopYXJnKTsKIAogCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKKwkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgU05EQ1RMX0RTUF9HRVRDQVBTOgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYyBiL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKaW5kZXggNDE1NjJlYy4uMWVkYWI3YiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYworKysgYi9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCkBAIC0yMjAwLDcgKzIyMDAsOSBAQAogCQkJCSAgICBzaXplb2YoYWJpbmZvKSkgPyAtRUZBVUxUIDogMDsKIAogCWNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKKwkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgU05EQ1RMX0RTUF9HRVRPREVMQVk6CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvdndzbmQuYyBiL3NvdW5kL29zcy92d3NuZC5jCmluZGV4IDc4YjhhY2MuLjE4N2Y3MjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy92d3NuZC5jCisrKyBiL3NvdW5kL29zcy92d3NuZC5jCkBAIC0yNjczLDcgKzI2NzMsOSBAQAogCiAJY2FzZSBTTkRDVExfRFNQX05PTkJMT0NLOgkvKiBfU0lPICAoJ1AnLDE0KSAqLwogCQlEQkdYKCJTTkRDVExfRFNQX05PTkJMT0NLXG4iKTsKKwkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7CisJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgU05EQ1RMX0RTUF9SRVNFVDoJCS8qIF9TSU8gICgnUCcsIDApICovCmRpZmYgLS1naXQgYS9zb3VuZC9wYXJpc2MvaGFybW9ueS5jIGIvc291bmQvcGFyaXNjL2hhcm1vbnkuYwppbmRleCA0MWY4NzBmLi42MDU1ZmQ2IDEwMDY0NAotLS0gYS9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCisrKyBiL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKQEAgLTk3NSw5ICs5NzUsOSBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2hhcm1vbnkgKmg7CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfaGFybW9ueV9jcmVhdGUoY2FyZCwgcGFkZXYsICZoKTsKIAlpZiAoZXJyIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9LY29uZmlnIGIvc291bmQvcGNpL0tjb25maWcKaW5kZXggODJiOWJkZC4uY2EyNWU2MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL0tjb25maWcKKysrIGIvc291bmQvcGNpL0tjb25maWcKQEAgLTQwMCw2ICs0MDAsMjYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1pbmRpZ29kagogCitjb25maWcgU05EX0lORElHT0lPWAorCXRyaXN0YXRlICIoRWNob2F1ZGlvKSBJbmRpZ28gSU94IgorCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgU05EX1BDTQorCWhlbHAKKwkgIFNheSAnWScgb3IgJ00nIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgRWNob2F1ZGlvIEluZGlnbyBJT3guCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHNuZC1pbmRpZ29pb3gKKworY29uZmlnIFNORF9JTkRJR09ESlgKKwl0cmlzdGF0ZSAiKEVjaG9hdWRpbykgSW5kaWdvIERKeCIKKwlzZWxlY3QgRldfTE9BREVSCisJc2VsZWN0IFNORF9QQ00KKwloZWxwCisJICBTYXkgJ1knIG9yICdNJyB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIEVjaG9hdWRpbyBJbmRpZ28gREp4LgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtaW5kaWdvZGp4CisKIGNvbmZpZyBTTkRfRU1VMTBLMQogCXRyaXN0YXRlICJFbXUxMGsxIChTQiBMaXZlISwgQXVkaWd5LCBFLW11IEFQUykiCiAJc2VsZWN0IEZXX0xPQURFUgpAQCAtNzQ0LDcgKzc2NCw4IEBACiAJc2VsZWN0IFNORF9PWFlHRU5fTElCCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kIGNhcmRzIGJhc2VkIG9uIHRoZQotCSAgQXN1cyBBVjEwMC9BVjIwMCBjaGlwcywgaS5lLiwgWG9uYXIgRDEsIERYLCBEMiBhbmQgRDJYLgorCSAgQXN1cyBBVjEwMC9BVjIwMCBjaGlwcywgaS5lLiwgWG9uYXIgRDEsIERYLCBEMiwgRDJYLCBhbmQKKwkgIEVzc2VuY2UgU1RYLgogCSAgU3VwcG9ydCBmb3IgdGhlIEhEQVYxLjMgKERlbHV4ZSkgaXMgdmVyeSBleHBlcmltZW50YWwuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwppbmRleCBlMmI4NDNiLi45N2VlMTI3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCkBAIC0xNDMsNiArMTQzLDcgQEAKIHsgMHg0MzUyNTk3MCwgMHhmZmZmZmZmOCwgIkNTNDIwMiIsCQlOVUxMLAkJTlVMTCB9LAogeyAweDQzNTg1NDIxLCAweGZmZmZmZmZmLCAiSFNEMTEyNDYiLAkJTlVMTCwJCU5VTEwgfSwJLy8gU21hcnRNQyBJSQogeyAweDQzNTg1NDI4LCAweGZmZmZmZmY4LCAiQ3gyMDQ2OCIsCQlwYXRjaF9jb25leGFudCwJTlVMTCB9LCAvLyBTbWFydEFNQyBmaXhtZTogdGhlIG1hc2sgbWlnaHQgYmUgZGlmZmVyZW50Cit7IDB4NDM1ODU0MzAsIDB4ZmZmZmZmZmYsICJDeDIwNDY4LTMxIiwJCXBhdGNoX2NvbmV4YW50LCBOVUxMIH0sCiB7IDB4NDM1ODU0MzEsIDB4ZmZmZmZmZmYsICJDeDIwNTUxIiwgICAgICAgICAgIHBhdGNoX2N4MjA1NTEsICBOVUxMIH0sCiB7IDB4NDQ1NDMwMzEsIDB4ZmZmZmZmZjAsICJEVDAzOTgiLAkJTlVMTCwJCU5VTEwgfSwKIHsgMHg0NTRkNDMyOCwgMHhmZmZmZmZmZiwgIkVNMjgwMjgiLAkJTlVMTCwJCU5VTEwgfSwgIC8vIHNhbWUgYXMgVFIyODAyOD8KQEAgLTM4Myw3ICszODQsNyBAQAogCiBFWFBPUlRfU1lNQk9MKHNuZF9hYzk3X3VwZGF0ZV9iaXRzKTsKIAotLyogbm8gbG9jayB2ZXJzaW9uIC0gc2VlIHNuZF9hYzk3X3VwZGF0X2JpdHMoKSAqLworLyogbm8gbG9jayB2ZXJzaW9uIC0gc2VlIHNuZF9hYzk3X3VwZGF0ZV9iaXRzKCkgKi8KIGludCBzbmRfYWM5N191cGRhdGVfYml0c19ub2xvY2soc3RydWN0IHNuZF9hYzk3ICphYzk3LCB1bnNpZ25lZCBzaG9ydCByZWcsCiAJCQkJdW5zaWduZWQgc2hvcnQgbWFzaywgdW5zaWduZWQgc2hvcnQgdmFsdWUpCiB7CkBAIC0xNjQzLDcgKzE2NDQsMTAgQEAKIHsKIAlpbnQgZXJyLCBpZHg7CiAKLQkvL3ByaW50aygiQUM5N19HUElPX0NGRyA9ICV4XG4iLHNuZF9hYzk3X3JlYWQoYWM5NyxBQzk3X0dQSU9fQ0ZHKSk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAiQUM5N19HUElPX0NGRyA9ICV4XG4iLAorCSAgICAgICBzbmRfYWM5N19yZWFkKGFjOTcsQUM5N19HUElPX0NGRykpOworCSovCiAJc25kX2FjOTdfd3JpdGUoYWM5NywgQUM5N19HUElPX0NGRywgMHhmZmZmICYgfihBQzk3X0dQSU9fTElORTFfT0gpKTsKIAlzbmRfYWM5N193cml0ZShhYzk3LCBBQzk3X0dQSU9fUE9MQVJJVFksIDB4ZmZmZiAmIH4oQUM5N19HUElPX0xJTkUxX09IKSk7CiAJc25kX2FjOTdfd3JpdGUoYWM5NywgQUM5N19HUElPX1NUSUNLWSwgMHhmZmZmKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hYzk3L2FjOTdfcHJvYy5jIGIvc291bmQvcGNpL2FjOTcvYWM5N19wcm9jLmMKaW5kZXggMDYwZWE1OS4uNzNiMTdkNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19wcm9jLmMKKysrIGIvc291bmQvcGNpL2FjOTcvYWM5N19wcm9jLmMKQEAgLTEyNSw2ICsxMjUsOCBAQAogICAgICAgICBzbmRfaXByaW50ZihidWZmZXIsICJQQ0kgU3Vic3lzIERldmljZTogMHglMDR4XG5cbiIsCiAgICAgICAgICAgICAgICAgICAgIGFjOTctPnN1YnN5c3RlbV9kZXZpY2UpOwogCisJc25kX2lwcmludGYoYnVmZmVyLCAiRmxhZ3M6ICV4XG4iLCBhYzk3LT5mbGFncyk7CisKIAlpZiAoKGFjOTctPmV4dF9pZCAmIEFDOTdfRUlfUkVWX01BU0spID49IEFDOTdfRUlfUkVWXzIzKSB7CiAJCXZhbCA9IHNuZF9hYzk3X3JlYWQoYWM5NywgQUM5N19JTlRfUEFHSU5HKTsKIAkJc25kX2FjOTdfdXBkYXRlX2JpdHMoYWM5NywgQUM5N19JTlRfUEFHSU5HLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FkMTg4OS5jIGIvc291bmQvcGNpL2FkMTg4OS5jCmluZGV4IGE3ZjM4ZTYuLmQxZjI0MmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hZDE4ODkuYworKysgYi9zb3VuZC9wY2kvYWQxODg5LmMKQEAgLTk5NSwxMCArOTk1LDEwIEBACiAJfQogCiAJLyogKDIpICovCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZub10sIGlkW2Rldm5vXSwgVEhJU19NT0RVTEUsIDApOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZub10sIGlkW2Rldm5vXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAkvKiBYWFggUkVWSVNJVDogd2UgY2FuIHByb2JhYmx5IGFsbG9jYXRlIGNoaXAgaW4gdGhpcyBjYWxsICovCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQUQxODg5Iik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkFuYWxvZyBEZXZpY2VzIEFEMTg4OSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FrNDUzMV9jb2RlYy5jIGIvc291bmQvcGNpL2FrNDUzMV9jb2RlYy5jCmluZGV4IDBmODE5ZGQuLmZkMTM1ZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hazQ1MzFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvYWs0NTMxX2NvZGVjLmMKQEAgLTUxLDcgKzUxLDggQEAKIAlpbnQgaWR4OwogCQogCWZvciAoaWR4ID0gMDsgaWR4IDwgMHgxOTsgaWR4KyspCi0JCXByaW50aygiYWs0NTMxIDB4JXg6IDB4JXhcbiIsIGlkeCwgYWs0NTMxLT5yZWdzW2lkeF0pOworCQlwcmludGsoS0VSTl9ERUJVRyAiYWs0NTMxIDB4JXg6IDB4JXhcbiIsCisJCSAgICAgICBpZHgsIGFrNDUzMS0+cmVnc1tpZHhdKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKaW5kZXggMWEwZmQ2NS4uNGVkZjI3MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCisrKyBiL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYwpAQCAtMjE0Miw3ICsyMTQyLDcgQEAKIHsKIAlpbnQgZXJyOwogCi0Jc25kX2FsaV9wcmludGsoInJlc291Y2VzIGFsbG9jYXRpb24gLi4uXG4iKTsKKwlzbmRfYWxpX3ByaW50aygicmVzb3VyY2VzIGFsbG9jYXRpb24gLi4uXG4iKTsKIAllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKGNvZGVjLT5wY2ksICJBTEkgNTQ1MSIpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMjE1NCw3ICsyMTU0LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJY29kZWMtPmlycSA9IGNvZGVjLT5wY2ktPmlycTsKLQlzbmRfYWxpX3ByaW50aygicmVzb3VjZXMgYWxsb2NhdGVkLlxuIik7CisJc25kX2FsaV9wcmludGsoInJlc291cmNlcyBhbGxvY2F0ZWQuXG4iKTsKIAlyZXR1cm4gMDsKIH0KIHN0YXRpYyBpbnQgc25kX2FsaV9kZXZfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQpAQCAtMjMwNyw5ICsyMzA3LDkgQEAKIAogCXNuZF9hbGlfcHJpbnRrKCJwcm9iZSAuLi5cbiIpOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfYWxpX2NyZWF0ZShjYXJkLCBwY2ksIHBjbV9jaGFubmVscywgc3BkaWYsICZjb2RlYyk7CiAJaWYgKGVyciA8IDApCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzMzAwLmMgYi9zb3VuZC9wY2kvYWxzMzAwLmMKaW5kZXggOGRmNjgyNC4uMDA5YjRjOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsczMwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHMzMDAuYwpAQCAtOTEsNyArOTEsNyBAQAogI2RlZmluZSBERUJVR19QTEFZX1JFQwkwCiAKICNpZiBERUJVR19DQUxMUwotI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxzKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxzKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjI2FyZ3MpCiAjZGVmaW5lIHNuZF9hbHMzMDBfZGJnY2FsbGVudGVyKCkgcHJpbnRrKEtFUk5fRVJSICItLT4gJXNcbiIsIF9fZnVuY19fKQogI2RlZmluZSBzbmRfYWxzMzAwX2RiZ2NhbGxsZWF2ZSgpIHByaW50ayhLRVJOX0VSUiAiPC0tICVzXG4iLCBfX2Z1bmNfXykKICNlbHNlCkBAIC04MTIsMTAgKzgxMiwxMCBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJY2hpcF90eXBlID0gcGNpX2lkLT5kcml2ZXJfZGF0YTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsczQwMDAuYyBiL3NvdW5kL3BjaS9hbHM0MDAwLmMKaW5kZXggYmE1NzAwNS4uNTQyYTBjNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsczQwMDAuYworKysgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCkBAIC04ODksMTIgKzg4OSwxMyBAQAogCXBjaV93cml0ZV9jb25maWdfd29yZChwY2ksIFBDSV9DT01NQU5ELCB3b3JkIHwgUENJX0NPTU1BTkRfSU8pOwogCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAJCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgCi0JCQkgICAgc2l6ZW9mKCphY2FyZCkgLyogcHJpdmF0ZV9kYXRhOiBhY2FyZCAqLyk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgCisJCQkgICAgICBzaXplb2YoKmFjYXJkKSAvKiBwcml2YXRlX2RhdGE6IGFjYXJkICovLAorCQkJICAgICAgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpKTsKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F0aWl4cC5jIGIvc291bmQvcGNpL2F0aWl4cC5jCmluZGV4IDIyNmZlODIuLjljZTg1NDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdGlpeHAuYworKysgYi9zb3VuZC9wY2kvYXRpaXhwLmMKQEAgLTE2NDUsOSArMTY0NSw5IEBACiAJc3RydWN0IGF0aWl4cCAqY2hpcDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgc3BkaWZfYWNsaW5rID8gIkFUSUlYUCIgOiAiQVRJSVhQLVNQRE1BIik7CiAJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgIkFUSSBJWFAiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwppbmRleCAwZTZlNWNjLi5jMzEzNmNjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCkBAIC0xMjg4LDkgKzEyODgsOSBAQAogCXN0cnVjdCBhdGlpeHBfbW9kZW0gKmNoaXA7CiAJaW50IGVycjsKIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXgsIGlkLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBVElJWFAtTU9ERU0iKTsKIAlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiQVRJIElYUCBNb2RlbSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKaW5kZXggYTM2ZDRkMS4uOWVjMTIyMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYworKysgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCkBAIC0yNTAsOSArMjUwLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCS8vICgyKQotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLy8gKDMpCiAJaWYgKChlcnIgPSBzbmRfdm9ydGV4X2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKSkgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9hM2QuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2EzZC5jCmluZGV4IDY0OTg0OWUuLmY0YWE4ZmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2EzZC5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2EzZC5jCkBAIC00NjIsOSArNDYyLDEwIEBACiAvKiBSZXNldCBTaW5nbGUgQTNEIHNvdXJjZS4gKi8KIHN0YXRpYyB2b2lkIGEzZHNyY19aZXJvU3RhdGUoYTNkc3JjX3QgKiBhKQogewotCi0JLy9wcmludGsoInZvcnRleDogWmVyb1N0YXRlIHNsaWNlOiAlZCwgc291cmNlICVkXG4iLCBhLT5zbGljZSwgYS0+c291cmNlKTsKLQorCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogWmVyb1N0YXRlIHNsaWNlOiAlZCwgc291cmNlICVkXG4iLAorCSAgICAgICBhLT5zbGljZSwgYS0+c291cmNlKTsKKwkqLwogCWEzZHNyY19TZXRBdG1vc1N0YXRlKGEsIDAsIDAsIDAsIDApOwogCWEzZHNyY19TZXRIcnRmU3RhdGUoYSwgQTNkSHJpclplcm9zLCBBM2RIcmlyWmVyb3MpOwogCWEzZHNyY19TZXRJdGREbGluZShhLCBBM2RJdGREbGluZVplcm9zKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYwppbmRleCBiMDcwZTU3Li4zOTA2ZjVhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCkBAIC0xMTM1LDcgKzExMzUsMTAgQEAKIAkJCXNuZF9wY21fc2didWZfZ2V0X2FkZHIoZG1hLT5zdWJzdHJlYW0sIDApKTsKIAkJYnJlYWs7CiAJfQotCS8vcHJpbnRrKCJ2b3J0ZXg6IGNmZzAgPSAweCV4XG52b3J0ZXg6IGNmZzE9MHgleFxuIiwgZG1hLT5jZmcwLCBkbWEtPmNmZzEpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogY2ZnMCA9IDB4JXhcbnZvcnRleDogY2ZnMT0weCV4XG4iLAorCSAgICAgICBkbWEtPmNmZzAsIGRtYS0+Y2ZnMSk7CisJKi8KIAlod3dyaXRlKHZvcnRleC0+bW1pbywgVk9SVEVYX0FEQkRNQV9CVUZDRkcwICsgKGFkYmRtYSA8PCAzKSwgZG1hLT5jZmcwKTsKIAlod3dyaXRlKHZvcnRleC0+bW1pbywgVk9SVEVYX0FEQkRNQV9CVUZDRkcxICsgKGFkYmRtYSA8PCAzKSwgZG1hLT5jZmcxKTsKIApAQCAtMTk1OSw3ICsxOTYyLDcgQEAKIAkJCQkJICBBREJfQ09ERUNPVVQoMCArIDQpKTsKIAkJdm9ydGV4X2Nvbm5lY3Rpb25fbWl4X2FkYih2b3J0ZXgsIGVuLCAweDExLCBtaXhlcnNbM10sCiAJCQkJCSAgQURCX0NPREVDT1VUKDEgKyA0KSk7Ci0JCS8vcHJpbnRrKCJTREFDIGRldGVjdGVkICIpOworCQkvKiBwcmludGsoS0VSTl9ERUJVRyAiU0RBQyBkZXRlY3RlZCAiKTsgKi8KIAl9CiAjZWxzZQogCS8vIFVzZSBwbGFpbiBkaXJlY3Qgb3V0cHV0IHRvIGNvZGVjLgpAQCAtMjAxMyw3ICsyMDE2LDExIEBACiAJCQkJCXJlc21hcFtyZXN0eXBlXSB8PSAoMSA8PCBpKTsKIAkJCQllbHNlCiAJCQkJCXZvcnRleC0+ZG1hX2FkYltpXS5yZXNvdXJjZXNbcmVzdHlwZV0gfD0gKDEgPDwgaSk7Ci0JCQkJLy9wcmludGsoInZvcnRleDogUmVzTWFuYWdlcjogdHlwZSAlZCBvdXQgJWRcbiIsIHJlc3R5cGUsIGkpOworCQkJCS8qCisJCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkgICAgICAgInZvcnRleDogUmVzTWFuYWdlcjogdHlwZSAlZCBvdXQgJWRcbiIsCisJCQkJICAgICAgIHJlc3R5cGUsIGkpOworCQkJCSovCiAJCQkJcmV0dXJuIGk7CiAJCQl9CiAJCX0KQEAgLTIwMjQsNyArMjAzMSwxMSBAQAogCQlmb3IgKGkgPSAwOyBpIDwgcXR5OyBpKyspIHsKIAkJCWlmIChyZXNtYXBbcmVzdHlwZV0gJiAoMSA8PCBpKSkgewogCQkJCXJlc21hcFtyZXN0eXBlXSAmPSB+KDEgPDwgaSk7Ci0JCQkJLy9wcmludGsoInZvcnRleDogUmVzTWFuYWdlcjogdHlwZSAlZCBpbiAlZFxuIixyZXN0eXBlLCBpKTsKKwkJCQkvKgorCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJ2b3J0ZXg6IFJlc01hbmFnZXI6IHR5cGUgJWQgaW4gJWRcbiIsCisJCQkJICAgICAgIHJlc3R5cGUsIGkpOworCQkJCSovCiAJCQkJcmV0dXJuIGk7CiAJCQl9CiAJCX0KQEAgLTI3ODksNyArMjgwMCw3IEBACiB7CiAJaW50IGEsIHRoaXNfMTk0OwogCi0JaWYgKChiaXRzICE9IDgpIHx8IChiaXRzICE9IDE2KSkKKwlpZiAoKGJpdHMgIT0gOCkgJiYgKGJpdHMgIT0gMTYpKQogCQlyZXR1cm4gLTE7CiAKIAlzd2l0Y2ggKGVuY29kKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9zeW50aC5jIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfc3ludGguYwppbmRleCA5NzhiODU2Li4yODA1ZTM0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9zeW50aC5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3N5bnRoLmMKQEAgLTIxMywzOCArMjEzLDU5IEBACiAJc3dpdGNoIChyZWcpIHsKIAkJLyogVm9pY2Ugc3BlY2lmaWMgcGFyYW1ldGVycyAqLwogCWNhc2UgMDoJCS8qIHJ1bm5pbmcgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9SVU4od3QpLCAoaW50KXZhbCk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJICAgICAgIFdUX1JVTih3dCksIChpbnQpdmFsKTsKKwkJKi8KIAkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX1JVTih3dCksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgMToJCS8qIHBhcmFtIDAgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9QQVJNKHd0LDApLCAoaW50KXZhbCk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJICAgICAgIFdUX1BBUk0od3QsMCksIChpbnQpdmFsKTsKKwkJKi8KIAkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX1BBUk0od3QsIDApLCB2YWwpOwogCQlyZXR1cm4gMHhjOwogCQlicmVhazsKIAljYXNlIDI6CQkvKiBwYXJhbSAxICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfUEFSTSh3dCwxKSwgKGludCl2YWwpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCSAgICAgICBXVF9QQVJNKHd0LDEpLCAoaW50KXZhbCk7CisJCSovCiAJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9QQVJNKHd0LCAxKSwgdmFsKTsKIAkJcmV0dXJuIDB4YzsKIAkJYnJlYWs7CiAJY2FzZSAzOgkJLyogcGFyYW0gMiAqLwotCQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIFdUX1BBUk0od3QsMiksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfUEFSTSh3dCwyKSwgKGludCl2YWwpOworCQkqLwogCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfUEFSTSh3dCwgMiksIHZhbCk7CiAJCXJldHVybiAweGM7CiAJCWJyZWFrOwogCWNhc2UgNDoJCS8qIHBhcmFtIDMgKi8KLQkJLy9wcmludGsoInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBXVF9QQVJNKHd0LDMpLCAoaW50KXZhbCk7CisJCS8qCisJCXByaW50ayhLRVJOX0RFQlVHICJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwKKwkJICAgICAgIFdUX1BBUk0od3QsMyksIChpbnQpdmFsKTsKKwkJKi8KIAkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX1BBUk0od3QsIDMpLCB2YWwpOwogCQlyZXR1cm4gMHhjOwogCQlicmVhazsKIAljYXNlIDY6CQkvKiBtdXRlICovCi0JCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfTVVURSh3dCksIChpbnQpdmFsKTsKKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLAorCQkgICAgICAgV1RfTVVURSh3dCksIChpbnQpdmFsKTsKKwkJKi8KIAkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX01VVEUod3QpLCB2YWwpOwogCQlyZXR1cm4gMHhjOwogCQlicmVhazsKIAljYXNlIDB4YjoKIAkJewkJLyogZGVsYXkgKi8KLQkJCS8vcHJpbnRrKCJ2b3J0ZXg6IFdUIFNldFJlZygweCV4KSA9IDB4JTA4eFxuIiwgV1RfREVMQVkod3QsMCksIChpbnQpdmFsKTsKKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRyAidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsCisJCQkgICAgICAgV1RfREVMQVkod3QsMCksIChpbnQpdmFsKTsKKwkJCSovCiAJCQlod3dyaXRlKHZvcnRleC0+bW1pbywgV1RfREVMQVkod3QsIDMpLCB2YWwpOwogCQkJaHd3cml0ZSh2b3J0ZXgtPm1taW8sIFdUX0RFTEFZKHd0LCAyKSwgdmFsKTsKIAkJCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBXVF9ERUxBWSh3dCwgMSksIHZhbCk7CkBAIC0yNzIsNyArMjkzLDkgQEAKIAkJcmV0dXJuIDA7CiAJCWJyZWFrOwogCX0KLQkvL3ByaW50aygidm9ydGV4OiBXVCBTZXRSZWcoMHgleCkgPSAweCUwOHhcbiIsIGVjeCwgKGludCl2YWwpOworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInZvcnRleDogV1QgU2V0UmVnKDB4JXgpID0gMHglMDh4XG4iLCBlY3gsIChpbnQpdmFsKTsKKwkqLwogCWh3d3JpdGUodm9ydGV4LT5tbWlvLCBlY3gsIHZhbCk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMgYi9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKaW5kZXggYzdjNTRlNy4uOGVlYTI5ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCisrKyBiL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYwpAQCAtMzY4LDkgKzM2OCw5IEBACiAJfQogCiAJLyogKDIpIENyZWF0ZSBjYXJkIGluc3RhbmNlICovCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAkvKiAoMykgQ3JlYXRlIG1haW4gY29tcG9uZW50ICovCiAJZXJyID0gc25kX2F3Ml9jcmVhdGUoY2FyZCwgcGNpLCAmY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXp0MzMyOC5jIGIvc291bmQvcGNpL2F6dDMzMjguYwppbmRleCAzMzMwMDdjLi5lOWU5YjU4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXp0MzMyOC5jCisrKyBiL3NvdW5kL3BjaS9henQzMzI4LmMKQEAgLTIxMSwyNSArMjExLDI1IEBACiAjZW5kaWYKIAogI2lmIERFQlVHX01JWEVSCi0jZGVmaW5lIHNuZF9hemYzMzI4X2RiZ21peGVyKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdtaXhlcihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKICNkZWZpbmUgc25kX2F6ZjMzMjhfZGJnbWl4ZXIoZm9ybWF0LCBhcmdzLi4uKQogI2VuZGlmCiAKICNpZiBERUJVR19QTEFZX1JFQwotI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdwbGF5KGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdwbGF5KGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjI2FyZ3MpCiAjZWxzZQogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdwbGF5KGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCiAjaWYgREVCVUdfTUlTQwotI2RlZmluZSBzbmRfYXpmMzMyOF9kYmd0aW1lcihmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiBmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgc25kX2F6ZjMzMjhfZGJndGltZXIoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQsICMjYXJncykKICNlbHNlCiAjZGVmaW5lIHNuZF9hemYzMzI4X2RiZ3RpbWVyKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgogCiAjaWYgREVCVUdfR0FNRQotI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdnYW1lKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fRVJSIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdnYW1lKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgZm9ybWF0LCAjI2FyZ3MpCiAjZWxzZQogI2RlZmluZSBzbmRfYXpmMzMyOF9kYmdnYW1lKGZvcm1hdCwgYXJncy4uLikKICNlbmRpZgpAQCAtMjIxNiw5ICsyMjE2LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAiQVpGMzMyOCIpOwogCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsICJBenRlY2ggQVpGMzMyOCAoUENJMTY4KSIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2J0ODd4LmMgYi9zb3VuZC9wY2kvYnQ4N3guYwppbmRleCAxYWExYzA0Li5hMjk5MzQwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYnQ4N3guYworKysgYi9zb3VuZC9wY2kvYnQ4N3guYwpAQCAtODg4LDkgKzg4OCw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAllcnIgPSBzbmRfYnQ4N3hfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApOwogCWlmIChlcnIgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCmluZGV4IDBlNjIyMDUuLmRmNzU3NTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYworKysgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKQEAgLTI1NSw2ICsyNTUsMTQgQEAKIAkgICAuZ3Bpb190eXBlID0gMiwKIAkgICAuaTJjX2FkYyA9IDEsCiAJICAgLnNwaV9kYWMgPSAxIH0gLAorCS8qIEdpZ2EtYnl0ZSBHQS1HMTk3NVggbW9ibworCSAqIE5vdmVsbCBibmMjMzk1ODA3CisJICovCisJLyogRklYTUU6IHRoZSBHUElPIGFuZCBJMkMgc2V0dGluZyBhcmVuJ3QgdGVzdGVkIHdlbGwgKi8KKwl7IC5zZXJpYWwgPSAweDE0NThhMDA2LAorCSAgLm5hbWUgPSAiR2lnYS1ieXRlIEdBLUcxOTc1WCIsCisJICAuZ3Bpb190eXBlID0gMSwKKwkgIC5pMmNfYWRjID0gMSB9LAogCSAvKiBTaHV0dGxlIFhQQyBTRDMxUCB3aGljaCBoYXMgYW4gb25ib2FyZCBDcmVhdGl2ZSBMYWJzCiAJICAqIFNvdW5kIEJsYXN0ZXIgTGl2ZSEgMjQtYml0IEVBWAogCSAgKiBoaWdoLWRlZmluaXRpb24gNy4xIGF1ZGlvIHByb2Nlc3NvciIuCkBAIC00MDQsNyArNDEyLDkgQEAKIAl9CiAKIAl0bXAgPSByZWcgPDwgMjUgfCB2YWx1ZSA8PCAxNjsKLQkvLyBzbmRfcHJpbnRrKCJJMkMtd3JpdGU6cmVnPTB4JXgsIHZhbHVlPTB4JXhcbiIsIHJlZywgdmFsdWUpOworCS8qCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJJMkMtd3JpdGU6cmVnPTB4JXgsIHZhbHVlPTB4JXhcbiIsIHJlZywgdmFsdWUpOworCSovCiAJLyogTm90IHN1cmUgd2hhdCB0aGlzIEkyQyBjaGFubmVsIGNvbnRyb2xzLiAqLwogCS8qIHNuZF9jYTAxMDZfcHRyX3dyaXRlKGVtdSwgSTJDX0QwLCAwLCB0bXApOyAqLwogCkBAIC00MjIsNyArNDMyLDcgQEAKIAkJLyogV2FpdCB0aWxsIHRoZSB0cmFuc2FjdGlvbiBlbmRzICovCiAJCXdoaWxlICgxKSB7CiAJCQlzdGF0dXMgPSBzbmRfY2EwMTA2X3B0cl9yZWFkKGVtdSwgSTJDX0EsIDApOwotICAgICAgICAgICAgICAgIAkvL3NuZF9wcmludGsoIkkyQzpzdGF0dXM9MHgleFxuIiwgc3RhdHVzKTsKKwkJCS8qc25kX3ByaW50ayhLRVJOX0RFQlVHICJJMkM6c3RhdHVzPTB4JXhcbiIsIHN0YXR1cyk7Ki8KIAkJCXRpbWVvdXQrKzsKIAkJCWlmICgoc3RhdHVzICYgSTJDX0FfQURDX1NUQVJUKSA9PSAwKQogCQkJCWJyZWFrOwpAQCAtNTIxLDcgKzUzMSwxMCBAQAogICAgICAgICBjaGFubmVsLT5udW1iZXIgPSBjaGFubmVsX2lkOwogCiAJY2hhbm5lbC0+dXNlID0gMTsKLSAgICAgICAgLy9wcmludGsoIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIixjaGFubmVsX2lkLCBjaGlwLCBjaGFubmVsKTsKKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsCisJICAgICAgIGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworCSovCiAgICAgICAgIC8vY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX2NhMDEwNl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7CiAJY2hhbm5lbC0+ZXBjbSA9IGVwY207CiAJaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUykpIDwgMCkKQEAgLTYxNCw3ICs2MjcsMTAgQEAKICAgICAgICAgY2hhbm5lbC0+bnVtYmVyID0gY2hhbm5lbF9pZDsKIAogCWNoYW5uZWwtPnVzZSA9IDE7Ci0gICAgICAgIC8vcHJpbnRrKCJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisJLyoKKyAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIiwKKwkgICAgICAgY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisJKi8KICAgICAgICAgLy9jaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfY2EwMTA2X3BjbV9jaGFubmVsX2ludGVycnVwdDsKICAgICAgICAgY2hhbm5lbC0+ZXBjbSA9IGVwY207CiAJaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUykpIDwgMCkKQEAgLTcwNSw5ICs3MjEsMjAgQEAKIAl1MzIgcmVnNzE7CiAJaW50IGk7CiAJCi0gICAgICAgIC8vc25kX3ByaW50aygicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgcGVyaW9kcz0ldSwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwgcnVudGltZS0+cGVyaW9kcywgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIHRhYmxlX2Jhc2U9JXBcbiIscnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9hcmVhLCB0YWJsZV9iYXNlKTsKLQkvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgZG1hX2J5dGVzKHNpemUpPSV4XG4iLGVtdS0+YnVmZmVyLmFkZHIsIGVtdS0+YnVmZmVyLmFyZWEsIGVtdS0+YnVmZmVyLmJ5dGVzKTsKKyNpZiAwIC8qIGRlYnVnICovCisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgIgorCQkgICAiY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCAiCisJCSAgICJwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsCisJCSAgIGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwKKwkJICAgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCQkgICBydW50aW1lLT5wZXJpb2Rfc2l6ZSwgcnVudGltZS0+cGVyaW9kcywKKwkJICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgdGFibGVfYmFzZT0lcFxuIiwKKwkJICAgcnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9hcmVhLCB0YWJsZV9iYXNlKTsKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgZG1hX2J5dGVzKHNpemUpPSV4XG4iLAorCQkgICBlbXUtPmJ1ZmZlci5hZGRyLCBlbXUtPmJ1ZmZlci5hcmVhLCBlbXUtPmJ1ZmZlci5ieXRlcyk7CisjZW5kaWYgLyogZGVidWcgKi8KIAkvKiBSYXRlIGNhbiBiZSBzZXQgcGVyIGNoYW5uZWwuICovCiAJLyogcmVnNDAgY29udHJvbCBob3N0IHRvIGZpZm8gKi8KIAkvKiByZWc3MSBjb250cm9scyBEQUMgcmF0ZS4gKi8KQEAgLTc5OSw5ICs4MjYsMjAgQEAKIAl1MzIgcmVnNzFfc2V0ID0gMDsKIAl1MzIgcmVnNzE7CiAJCi0gICAgICAgIC8vc25kX3ByaW50aygicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgcGVyaW9kcz0ldSwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwgcnVudGltZS0+cGVyaW9kcywgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKLSAgICAgICAgLy9zbmRfcHJpbnRrKCJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIHRhYmxlX2Jhc2U9JXBcbiIscnVudGltZS0+ZG1hX2FkZHIsIHJ1bnRpbWUtPmRtYV9hcmVhLCB0YWJsZV9iYXNlKTsKLQkvL3NuZF9wcmludGsoImRtYV9hZGRyPSV4LCBkbWFfYXJlYT0lcCwgZG1hX2J5dGVzKHNpemUpPSV4XG4iLGVtdS0+YnVmZmVyLmFkZHIsIGVtdS0+YnVmZmVyLmFyZWEsIGVtdS0+YnVmZmVyLmJ5dGVzKTsKKyNpZiAwIC8qIGRlYnVnICovCisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJwcmVwYXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgIgorCQkgICAiY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCAiCisJCSAgICJwZXJpb2RzPSV1LCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsCisJCSAgIGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwKKwkJICAgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCQkgICBydW50aW1lLT5wZXJpb2Rfc2l6ZSwgcnVudGltZS0+cGVyaW9kcywKKwkJICAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKyAgICAgICAgc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIHRhYmxlX2Jhc2U9JXBcbiIsCisJCSAgIHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIiwKKwkJICAgZW11LT5idWZmZXIuYWRkciwgZW11LT5idWZmZXIuYXJlYSwgZW11LT5idWZmZXIuYnl0ZXMpOworI2VuZGlmIC8qIGRlYnVnICovCiAJLyogcmVnNzEgY29udHJvbHMgQURDIHJhdGUuICovCiAJc3dpdGNoIChydW50aW1lLT5yYXRlKSB7CiAJY2FzZSA0NDEwMDoKQEAgLTg0Niw3ICs4ODQsMTQgQEAKIAl9CiAKIAotICAgICAgICAvL3ByaW50aygicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLGNoYW5uZWwsIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmZvcm1hdCwgcnVudGltZS0+Y2hhbm5lbHMsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSwgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCAiCisJICAgICAgICJidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLAorCSAgICAgICBjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLAorCSAgICAgICBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsCisJICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisJKi8KIAlzbmRfY2EwMTA2X3B0cl93cml0ZShlbXUsIDB4MTMsIGNoYW5uZWwsIDApOwogCXNuZF9jYTAxMDZfcHRyX3dyaXRlKGVtdSwgQ0FQVFVSRV9ETUFfQUREUiwgY2hhbm5lbCwgcnVudGltZS0+ZG1hX2FkZHIpOwogCXNuZF9jYTAxMDZfcHRyX3dyaXRlKGVtdSwgQ0FQVFVSRV9CVUZGRVJfU0laRSwgY2hhbm5lbCwgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKTw8MTYpOyAvLyBidWZmZXIgc2l6ZSBpbiBieXRlcwpAQCAtODg4LDEzICs5MzMsMTMgQEAKIAkJcnVudGltZSA9IHMtPnJ1bnRpbWU7CiAJCWVwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJCWNoYW5uZWwgPSBlcGNtLT5jaGFubmVsX2lkOwotCQkvKiBzbmRfcHJpbnRrKCJjaGFubmVsPSVkXG4iLGNoYW5uZWwpOyAqLworCQkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImNoYW5uZWw9JWRcbiIsIGNoYW5uZWwpOyAqLwogCQllcGNtLT5ydW5uaW5nID0gcnVubmluZzsKIAkJYmFzaWMgfD0gKDB4MSA8PCBjaGFubmVsKTsKIAkJZXh0ZW5kZWQgfD0gKDB4MTAgPDwgY2hhbm5lbCk7CiAgICAgICAgICAgICAgICAgc25kX3BjbV90cmlnZ2VyX2RvbmUocywgc3Vic3RyZWFtKTsKICAgICAgICAgfQotCS8qIHNuZF9wcmludGsoImJhc2ljPTB4JXgsIGV4dGVuZGVkPTB4JXhcbiIsYmFzaWMsIGV4dGVuZGVkKTsgKi8KKwkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgImJhc2ljPTB4JXgsIGV4dGVuZGVkPTB4JXhcbiIsYmFzaWMsIGV4dGVuZGVkKTsgKi8KIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKQEAgLTk3Miw4ICsxMDE3LDEzIEBACiAJcHRyPXB0cjI7CiAgICAgICAgIGlmIChwdHIgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCiAJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLQkvL3ByaW50aygicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLCBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywgKGludClydW50aW1lLT5yYXRlKTsKLQorCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCAiCisJICAgICAgICJidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwKKwkgICAgICAgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsCisJICAgICAgIChpbnQpcnVudGltZS0+cmF0ZSk7CisJKi8KIAlyZXR1cm4gcHRyOwogfQogCkBAIC05OTUsOCArMTA0NSwxMyBAQAogCXB0cj1wdHIyOwogICAgICAgICBpZiAocHRyID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQogCQlwdHIgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JLy9wcmludGsoInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCBidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsIChpbnQpcnVudGltZS0+cmF0ZSk7Ci0KKwkvKgorCXByaW50ayhLRVJOX0RFQlVHICJwdHIxID0gMHglbHgsIHB0cjI9MHglbHgsIHB0cj0weCVseCwgIgorCSAgICAgICAiYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXgsIGJpdHM9JWQsIHJhdGU9JWRcbiIsCisJICAgICAgIHB0cjEsIHB0cjIsIHB0ciwgKGludClydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkgICAgICAgKGludClydW50aW1lLT5wZXJpb2Rfc2l6ZSwgKGludClydW50aW1lLT5mcmFtZV9iaXRzLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnJhdGUpOworCSovCiAJcmV0dXJuIHB0cjsKIH0KIApAQCAtMTE4MSw4ICsxMjM2LDEyIEBACiAJCXJldHVybiBJUlFfTk9ORTsKIAogICAgICAgICBzdGF0NzYgPSBzbmRfY2EwMTA2X3B0cl9yZWFkKGNoaXAsIEVYVEVOREVEX0lOVCwgMCk7Ci0JLy9zbmRfcHJpbnRrKCJpbnRlcnJ1cHQgc3RhdHVzID0gMHglMDh4LCBzdGF0NzY9MHglMDh4XG4iLCBzdGF0dXMsIHN0YXQ3Nik7Ci0JLy9zbmRfcHJpbnRrKCJwdHI9MHglMDh4XG4iLHNuZF9jYTAxMDZfcHRyX3JlYWQoY2hpcCwgUExBWUJBQ0tfUE9JTlRFUiwgMCkpOworCS8qCisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJpbnRlcnJ1cHQgc3RhdHVzID0gMHglMDh4LCBzdGF0NzY9MHglMDh4XG4iLAorCQkgICBzdGF0dXMsIHN0YXQ3Nik7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJwdHI9MHglMDh4XG4iLAorCQkgICBzbmRfY2EwMTA2X3B0cl9yZWFkKGNoaXAsIFBMQVlCQUNLX1BPSU5URVIsIDApKTsKKwkqLwogICAgICAgICBtYXNrID0gMHgxMTsgLyogMHgxIGZvciBvbmUgaGFsZiwgMHgxMCBmb3IgdGhlIG90aGVyIGhhbGYgcGVyaW9kLiAqLwogCWZvcihpID0gMDsgaSA8IDQ7IGkrKykgewogCQlwY2hhbm5lbCA9ICYoY2hpcC0+cGxheWJhY2tfY2hhbm5lbHNbaV0pOwpAQCAtMTQ3MCw3ICsxNTI5LDcgQEAKIAkJaW50IHNpemUsIG47CiAKIAkJc2l6ZSA9IEFSUkFZX1NJWkUoaTJjX2FkY19pbml0KTsKLQkJLyogc25kX3ByaW50aygiSTJDOmFycmF5IHNpemU9MHgleFxuIiwgc2l6ZSk7ICovCisJCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiSTJDOmFycmF5IHNpemU9MHgleFxuIiwgc2l6ZSk7ICovCiAJCWZvciAobiA9IDA7IG4gPCBzaXplOyBuKyspCiAJCQlzbmRfY2EwMTA2X2kyY193cml0ZShjaGlwLCBpMmNfYWRjX2luaXRbbl1bMF0sCiAJCQkJCSAgICAgaTJjX2FkY19pbml0W25dWzFdKTsKQEAgLTE3MDcsOSArMTc2Niw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gc25kX2NhMDEwNl9jcmVhdGUoZGV2LCBjYXJkLCBwY2ksICZjaGlwKTsKIAlpZiAoZXJyIDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jbWlwY2kuYyBiL3NvdW5kL3BjaS9jbWlwY2kuYwppbmRleCAxYTc0Y2E2Li5jNzg5OWMzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY21pcGNpLmMKKysrIGIvc291bmQvcGNpL2NtaXBjaS5jCkBAIC0zMjcyLDkgKzMyNzIsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAkKIAlzd2l0Y2ggKHBjaS0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTg3Mzg6CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0MjgxLmMgYi9zb3VuZC9wY2kvY3M0MjgxLmMKaW5kZXggMTkyZTc4NC4uZjYyODZmOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDI4MS5jCisrKyBiL3NvdW5kL3BjaS9jczQyODEuYwpAQCAtODM0LDcgKzgzNCwxMSBAQAogCXN0cnVjdCBjczQyODFfZG1hICpkbWEgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGNzNDI4MSAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAotCS8vIHByaW50aygiRENDID0gMHgleCwgYnVmZmVyX3NpemUgPSAweCV4LCBqaWZmaWVzID0gJWxpXG4iLCBzbmRfY3M0MjgxX3BlZWtCQTAoY2hpcCwgZG1hLT5yZWdEQ0MpLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgamlmZmllcyk7CisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAiRENDID0gMHgleCwgYnVmZmVyX3NpemUgPSAweCV4LCBqaWZmaWVzID0gJWxpXG4iLAorCSAgICAgICBzbmRfY3M0MjgxX3BlZWtCQTAoY2hpcCwgZG1hLT5yZWdEQ0MpLCBydW50aW1lLT5idWZmZXJfc2l6ZSwKKwkgICAgICAgamlmZmllcyk7CisJKi8KIAlyZXR1cm4gcnVudGltZS0+YnVmZmVyX3NpemUgLQogCSAgICAgICBzbmRfY3M0MjgxX3BlZWtCQTAoY2hpcCwgZG1hLT5yZWdEQ0MpIC0gMTsKIH0KQEAgLTE5MjUsOSArMTkyOSw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfY3M0MjgxX2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwLCBkdWFsX2NvZGVjW2Rldl0pKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCmluZGV4IGU4NzZiMzIuLmM5YjNlM2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwpAQCAtODgsOSArODgsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAlpZiAoKGVyciA9IHNuZF9jczQ2eHhfY3JlYXRlKGNhcmQsIHBjaSwKIAkJCQkgICAgIGV4dGVybmFsX2FtcFtkZXZdLCB0aGlua3BhZFtkZXZdLAogCQkJCSAgICAgJmNoaXApKSA8IDApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5jIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMKaW5kZXggOGFiMDdhYS4uMWJlOTZlYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCSAqICBBQ1NEQSA9IFN0YXR1cyBEYXRhIFJlZ2lzdGVyID0gNDc0aAogCSAqLwogI2lmIDAKLQlwcmludGsoImUpIHJlZyA9IDB4JXgsIHZhbCA9IDB4JXgsIEJBMF9BQ0NBRCA9IDB4JXhcbiIsIHJlZywKKwlwcmludGsoS0VSTl9ERUJVRyAiZSkgcmVnID0gMHgleCwgdmFsID0gMHgleCwgQkEwX0FDQ0FEID0gMHgleFxuIiwgcmVnLAogCQkJc25kX2NzNDZ4eF9wZWVrQkEwKGNoaXAsIEJBMF9BQ1NEQSksCiAJCQlzbmRfY3M0Nnh4X3BlZWtCQTAoY2hpcCwgQkEwX0FDQ0FEKSk7CiAjZW5kaWYKQEAgLTQyOCw4ICs0MjgsOCBAQAogCX0KICAgCiAJaWYoc3RhdHVzICYgU0VSQlNUX1dCU1kpIHsKLQkJc25kX3ByaW50ayggS0VSTl9FUlIgImNzNDZ4eDogZmFpbHVyZSB3YWl0aW5nIGZvciBGSUZPIGNvbW1hbmQgdG8gY29tcGxldGVcbiIpOwotCisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNzNDZ4eDogZmFpbHVyZSB3YWl0aW5nIGZvciAiCisJCQkgICAiRklGTyBjb21tYW5kIHRvIGNvbXBsZXRlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuaCBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5oCmluZGV4IDAxOGE3ZGUuLjRlYjU1YWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5oCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4X2xpYi5oCkBAIC02Miw3ICs2MiwxMSBAQAogCXVuc2lnbmVkIGludCBiYW5rID0gcmVnID4+IDE2OwogCXVuc2lnbmVkIGludCBvZmZzZXQgPSByZWcgJiAweGZmZmY7CiAKLQkvKmlmIChiYW5rID09IDApIHByaW50aygic25kX2NzNDZ4eF9wb2tlOiAlMDRYIC0gJTA4WFxuIixyZWcgPj4gMix2YWwpOyAqLworCS8qCisJaWYgKGJhbmsgPT0gMCkKKwkJcHJpbnRrKEtFUk5fREVCVUcgInNuZF9jczQ2eHhfcG9rZTogJTA0WCAtICUwOFhcbiIsCisJCSAgICAgICByZWcgPj4gMix2YWwpOworCSovCiAJd3JpdGVsKHZhbCwgY2hpcC0+cmVnaW9uLmlkeFtiYW5rKzFdLnJlbWFwX2FkZHIgKyBvZmZzZXQpOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M1NTMwLmMgYi9zb3VuZC9wY2kvY3M1NTMwLmMKaW5kZXggNmRlYTViNS4uZGM0NjQzMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzMC5jCisrKyBiL3NvdW5kL3BjaS9jczU1MzAuYwpAQCAtMjU4LDEwICsyNTgsMTAgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWVyciA9IHNuZF9jczU1MzBfY3JlYXRlKGNhcmQsIHBjaSwgJmNoaXApOwogCWlmIChlcnIgPCAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYyBiL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jCmluZGV4IDgyNmU2ZGUuLmM4OWVkMWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jCisrKyBiL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpby5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAogCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2NzNTUzNWF1ZGlvX2ludGVycnVwdCwKIAkJCUlSUUZfU0hBUkVELCAiQ1M1NTM1IEF1ZGlvIiwgY3M1NTM1YXUpKSB7Ci0JCXNuZF9wcmludGsoInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWRcbiIsIHBjaS0+aXJxKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIHNuZGZhaWw7CiAJfQpAQCAtMzUzLDkgKzM1Myw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfY3M1NTM1YXVkaW9fY3JlYXRlKGNhcmQsIHBjaSwgJmNzNTUzNWF1KSkgPCAwKQogCQlnb3RvIHByb2JlZmFpbF9vdXQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL01ha2VmaWxlIGIvc291bmQvcGNpL2VjaG9hdWRpby9NYWtlZmlsZQppbmRleCA3YjU3NmFlLi4xMzYxZGU3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL01ha2VmaWxlCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDggQEAKIHNuZC1pbmRpZ28tb2JqcyA6PSBpbmRpZ28ubwogc25kLWluZGlnb2lvLW9ianMgOj0gaW5kaWdvaW8ubwogc25kLWluZGlnb2RqLW9ianMgOj0gaW5kaWdvZGoubworc25kLWluZGlnb2lveC1vYmpzIDo9IGluZGlnb2lveC5vCitzbmQtaW5kaWdvZGp4LW9ianMgOj0gaW5kaWdvZGp4Lm8KIAogb2JqLSQoQ09ORklHX1NORF9EQVJMQTIwKSArPSBzbmQtZGFybGEyMC5vCiBvYmotJChDT05GSUdfU05EX0dJTkEyMCkgKz0gc25kLWdpbmEyMC5vCkBAIC0yOCwzICszMCw1IEBACiBvYmotJChDT05GSUdfU05EX0lORElHTykgKz0gc25kLWluZGlnby5vCiBvYmotJChDT05GSUdfU05EX0lORElHT0lPKSArPSBzbmQtaW5kaWdvaW8ubwogb2JqLSQoQ09ORklHX1NORF9JTkRJR09ESikgKz0gc25kLWluZGlnb2RqLm8KK29iai0kKENPTkZJR19TTkRfSU5ESUdPSU9YKSArPSBzbmQtaW5kaWdvaW94Lm8KK29iai0kKENPTkZJR19TTkRfSU5ESUdPREpYKSArPSBzbmQtaW5kaWdvZGp4Lm8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2dfZHNwLmMKaW5kZXggNDE3ZTI1YS4uNTc5NjdlNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2dfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2dfZHNwLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAl9CiAKIAljaGlwLT5jb21tX3BhZ2UtPmUzZ19mcnFfcmVnaXN0ZXIgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKChFM0dfTUFHSUNfTlVNQkVSIC8gNDgwMDApIC0gMik7CisJCWNwdV90b19sZTMyKChFM0dfTUFHSUNfTlVNQkVSIC8gNDgwMDApIC0gMik7CiAJY2hpcC0+ZGV2aWNlX2lkID0gZGV2aWNlX2lkOwogCWNoaXAtPnN1YmRldmljZV9pZCA9IHN1YmRldmljZV9pZDsKIAljaGlwLT5iYWRfYm9hcmQgPSBUUlVFOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKaW5kZXggOGRiYzVjNC4uZGEyMDY1YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCkBAIC05NTAsNiArOTUwLDggQEAKIAlDb250cm9sIGludGVyZmFjZQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZuZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKKwogLyoqKioqKioqKioqKioqKioqKiogUENNIG91dHB1dCB2b2x1bWUgKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgc25kX2VjaG9fb3V0cHV0X2dhaW5faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCkBAIC0xMDAxLDE4ICsxMDAzLDYgQEAKIAlyZXR1cm4gY2hhbmdlZDsKIH0KIAotI2lmZGVmIEVDSE9DQVJEX0hBU19WTUlYRVIKLS8qIE9uIFZtaXhlciBjYXJkcyB0aGlzIG9uZSBjb250cm9scyB0aGUgbGluZS1vdXQgdm9sdW1lICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2VjaG9fbGluZV9vdXRwdXRfZ2FpbiBfX2RldmluaXRkYXRhID0gewotCS5uYW1lID0gIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSB8IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCwKLQkuaW5mbyA9IHNuZF9lY2hvX291dHB1dF9nYWluX2luZm8sCi0JLmdldCA9IHNuZF9lY2hvX291dHB1dF9nYWluX2dldCwKLQkucHV0ID0gc25kX2VjaG9fb3V0cHV0X2dhaW5fcHV0LAotCS50bHYgPSB7LnAgPSBkYl9zY2FsZV9vdXRwdXRfZ2Fpbn0sCi19OwotI2Vsc2UKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzbmRfZWNob19wY21fb3V0cHV0X2dhaW4gX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZSA9ICJQQ00gUGxheWJhY2sgVm9sdW1lIiwKIAkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKQEAgLTEwMjIsNiArMTAxMiw3IEBACiAJLnB1dCA9IHNuZF9lY2hvX291dHB1dF9nYWluX3B1dCwKIAkudGx2ID0gey5wID0gZGJfc2NhbGVfb3V0cHV0X2dhaW59LAogfTsKKwogI2VuZGlmCiAKIApAQCAtMTk5Nyw5ICsxOTg4LDkgQEAKIAogCURFX0lOSVQoKCJFY2hvYXVkaW8gZHJpdmVyIHN0YXJ0aW5nLi4uXG4iKSk7CiAJaSA9IDA7Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CiAKQEAgLTIwMzcsOCArMjAyOCw2IEBACiAKICNpZmRlZiBFQ0hPQ0FSRF9IQVNfVk1JWEVSCiAJc25kX2VjaG9fdm1peGVyLmNvdW50ID0gbnVtX3BpcGVzX291dChjaGlwKSAqIG51bV9idXNzZXNfb3V0KGNoaXApOwotCWlmICgoZXJyID0gc25kX2N0bF9hZGQoY2hpcC0+Y2FyZCwgc25kX2N0bF9uZXcxKCZzbmRfZWNob19saW5lX291dHB1dF9nYWluLCBjaGlwKSkpIDwgMCkKLQkJZ290byBjdGxfZXJyb3I7CiAJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJnNuZF9lY2hvX3ZtaXhlciwgY2hpcCkpKSA8IDApCiAJCWdvdG8gY3RsX2Vycm9yOwogI2Vsc2UKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmggYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5oCmluZGV4IDFjODhlMDUuLmY5NDkwYWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmgKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uaApAQCAtMTg5LDYgKzE4OSw5IEBACiAjZGVmaW5lIElORElHTwkJCTB4MDA5MAogI2RlZmluZSBJTkRJR09fSU8JCTB4MDBhMAogI2RlZmluZSBJTkRJR09fREoJCTB4MDBiMAorI2RlZmluZSBEQzgJCQkweDAwYzAKKyNkZWZpbmUgSU5ESUdPX0lPWAkJMHgwMGQwCisjZGVmaW5lIElORElHT19ESlgJCTB4MDBlMAogI2RlZmluZSBFQ0hPM0cJCQkweDAxMDAKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fM2cuYwppbmRleCBjMzczNmJiLi5lMzJhNzQ4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb18zZy5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvXzNnLmMKQEAgLTQwLDggKzQwLDcgQEAKIAlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCiAJCXJldHVybiAtRUlPOwogCi0JY2hpcC0+Y29tbV9wYWdlLT5leHRfYm94X3N0YXR1cyA9Ci0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRTNHX0FTSUNfTk9UX0xPQURFRCk7CisJY2hpcC0+Y29tbV9wYWdlLT5leHRfYm94X3N0YXR1cyA9IGNwdV90b19sZTMyKEUzR19BU0lDX05PVF9MT0FERUQpOwogCWNoaXAtPmFzaWNfbG9hZGVkID0gRkFMU0U7CiAJY2xlYXJfaGFuZHNoYWtlKGNoaXApOwogCXNlbmRfdmVjdG9yKGNoaXAsIERTUF9WQ19URVNUX0FTSUMpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYwppbmRleCBiZTBlMTgxLi40ZGY1MWVmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuYwpAQCAtOTI2LDExICs5MjYsMTEgQEAKIAogCS8qIEluaXQgdGhlIGNvbW0gcGFnZSAqLwogCWNoaXAtPmNvbW1fcGFnZS0+Y29tbV9zaXplID0KLQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IGNvbW1fcGFnZSkpOworCQljcHVfdG9fbGUzMihzaXplb2Yoc3RydWN0IGNvbW1fcGFnZSkpOwogCWNoaXAtPmNvbW1fcGFnZS0+aGFuZHNoYWtlID0gMHhmZmZmZmZmZjsKIAljaGlwLT5jb21tX3BhZ2UtPm1pZGlfb3V0X2ZyZWVfY291bnQgPQotCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9NSURJX09VVF9GSUZPX1NJWkUpOwotCWNoaXAtPmNvbW1fcGFnZS0+c2FtcGxlX3JhdGUgPSBfX2NvbnN0YW50X2NwdV90b19sZTMyKDQ0MTAwKTsKKwkJY3B1X3RvX2xlMzIoRFNQX01JRElfT1VUX0ZJRk9fU0laRSk7CisJY2hpcC0+Y29tbV9wYWdlLT5zYW1wbGVfcmF0ZSA9IGNwdV90b19sZTMyKDQ0MTAwKTsKIAljaGlwLT5zYW1wbGVfcmF0ZSA9IDQ0MTAwOwogCiAJLyogU2V0IGxpbmUgbGV2ZWxzIHNvIHdlIGRvbid0IGJsYXN0IGFueSBpbnB1dHMgb24gc3RhcnR1cCAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW9fZHNwLmggYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuaAppbmRleCBlMzUyZjNhLi5jYjdkNzVhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuaAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpb19kc3AuaApAQCAtNTc2LDggKzU3NiwxMyBAQAogI2RlZmluZSBFM0dfQVNJQ19OT1RfTE9BREVECQkweGZmZmYKICNkZWZpbmUgRTNHX0JPWF9UWVBFX01BU0sJCTB4ZjAKIAotI2RlZmluZSBFWFRfM0dCT1hfTkMJCQkweDAxCi0jZGVmaW5lIEVYVF8zR0JPWF9OT1RfU0VUCQkweDAyCisvKiBJbmRpZ28gZXhwcmVzcyBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcyAqLworI2RlZmluZSBJTkRJR09fRVhQUkVTU18zMjAwMAkJMHgwMgorI2RlZmluZSBJTkRJR09fRVhQUkVTU180NDEwMAkJMHgwMQorI2RlZmluZSBJTkRJR09fRVhQUkVTU180ODAwMAkJMHgwMAorI2RlZmluZSBJTkRJR09fRVhQUkVTU19ET1VCTEVfU1BFRUQJMHgxMAorI2RlZmluZSBJTkRJR09fRVhQUkVTU19RVUFEX1NQRUVECTB4MDQKKyNkZWZpbmUgSU5ESUdPX0VYUFJFU1NfQ0xPQ0tfTUFTSwkweDE3CiAKIAogLyoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjBfZHNwLmMKaW5kZXggZGI2Yzk1Mi4uM2YxZTc0NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjBfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjBfZHNwLmMKQEAgLTIwOCwxMCArMjA4LDEwIEBACiAJREVfQUNUKCgic2V0X3Byb2Zlc3Npb25hbF9zcGRpZiAlZFxuIiwgcHJvZikpOwogCWlmIChwcm9mKQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzIHw9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJCQljcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWVsc2UKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQotCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCX5jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IHByb2Y7CiAJcmV0dXJuIHVwZGF0ZV9mbGFncyhjaGlwKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKaW5kZXggZjA1ZTM5Zi4uMGIyY2Q5YyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZHNwLmMKQEAgLTYzLDE4ICs2Myw2IEBACiAJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBEZWZhdWx0IHJvdXRpbmcgb2YgdGhlIHZpcnR1YWwgY2hhbm5lbHM6IGFsbCB2Y2hhbm5lbHMgYXJlIHJvdXRlZAotCXRvIHRoZSBzdGVyZW8gb3V0cHV0ICovCi0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDAsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAxLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDMsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCA0LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgNSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDYsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCA3LCAwKTsKLQllcnIgPSB1cGRhdGVfdm1peGVyX2xldmVsKGNoaXApOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb19leHByZXNzX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZXhwcmVzc19kc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWI2MjVlCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29fZXhwcmVzc19kc3AuYwpAQCAtMCwwICsxLDExOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5LgorQ29weXJpZ2h0IEVjaG8gRGlnaXRhbCBBdWRpbyBDb3Jwb3JhdGlvbiAoYykgMTk5OCAtIDIwMDUKK0FsbCByaWdodHMgcmVzZXJ2ZWQKK3d3dy5lY2hvYXVkaW8uY29tCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBUcmFuc2xhdGlvbiBmcm9tIEMrKyBhbmQgYWRhcHRhdGlvbiBmb3IgdXNlIGluIEFMU0EtRHJpdmVyCisgd2VyZSBtYWRlIGJ5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgc2V0X3NhbXBsZV9yYXRlKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUzMiByYXRlKQoreworCXUzMiBjbG9jaywgY29udHJvbF9yZWcsIG9sZF9jb250cm9sX3JlZzsKKworCWlmICh3YWl0X2hhbmRzaGFrZShjaGlwKSkKKwkJcmV0dXJuIC1FSU87CisKKwlvbGRfY29udHJvbF9yZWcgPSBsZTMyX3RvX2NwdShjaGlwLT5jb21tX3BhZ2UtPmNvbnRyb2xfcmVnaXN0ZXIpOworCWNvbnRyb2xfcmVnID0gb2xkX2NvbnRyb2xfcmVnICYgfklORElHT19FWFBSRVNTX0NMT0NLX01BU0s7CisKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIDMyMDAwOgorCQljbG9jayA9IElORElHT19FWFBSRVNTXzMyMDAwOworCQlicmVhazsKKwljYXNlIDQ0MTAwOgorCQljbG9jayA9IElORElHT19FWFBSRVNTXzQ0MTAwOworCQlicmVhazsKKwljYXNlIDQ4MDAwOgorCQljbG9jayA9IElORElHT19FWFBSRVNTXzQ4MDAwOworCQlicmVhazsKKwljYXNlIDY0MDAwOgorCQljbG9jayA9IElORElHT19FWFBSRVNTXzMyMDAwfElORElHT19FWFBSRVNTX0RPVUJMRV9TUEVFRDsKKwkJYnJlYWs7CisJY2FzZSA4ODIwMDoKKwkJY2xvY2sgPSBJTkRJR09fRVhQUkVTU180NDEwMHxJTkRJR09fRVhQUkVTU19ET1VCTEVfU1BFRUQ7CisJCWJyZWFrOworCWNhc2UgOTYwMDA6CisJCWNsb2NrID0gSU5ESUdPX0VYUFJFU1NfNDgwMDB8SU5ESUdPX0VYUFJFU1NfRE9VQkxFX1NQRUVEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljb250cm9sX3JlZyB8PSBjbG9jazsKKwlpZiAoY29udHJvbF9yZWcgIT0gb2xkX2NvbnRyb2xfcmVnKSB7CisJCWNoaXAtPmNvbW1fcGFnZS0+Y29udHJvbF9yZWdpc3RlciA9IGNwdV90b19sZTMyKGNvbnRyb2xfcmVnKTsKKwkJY2hpcC0+c2FtcGxlX3JhdGUgPSByYXRlOworCQljbGVhcl9oYW5kc2hha2UoY2hpcCk7CisJCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfVVBEQVRFX0NMT0NLUyk7CisJfQorCXJldHVybiAwOworfQorCisKKworLyogVGhpcyBmdW5jdGlvbiByb3V0ZXMgdGhlIHNvdW5kIGZyb20gYSB2aXJ0dWFsIGNoYW5uZWwgdG8gYSByZWFsIG91dHB1dCAqLworc3RhdGljIGludCBzZXRfdm1peGVyX2dhaW4oc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IG91dHB1dCwgdTE2IHBpcGUsCisJCQkgICBpbnQgZ2FpbikKK3sKKwlpbnQgaW5kZXg7CisKKwlpZiAoc25kX0JVR19PTihwaXBlID49IG51bV9waXBlc19vdXQoY2hpcCkgfHwKKwkJICAgICAgIG91dHB1dCA+PSBudW1fYnVzc2VzX291dChjaGlwKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHdhaXRfaGFuZHNoYWtlKGNoaXApKQorCQlyZXR1cm4gLUVJTzsKKworCWNoaXAtPnZtaXhlcl9nYWluW291dHB1dF1bcGlwZV0gPSBnYWluOworCWluZGV4ID0gb3V0cHV0ICogbnVtX3BpcGVzX291dChjaGlwKSArIHBpcGU7CisJY2hpcC0+Y29tbV9wYWdlLT52bWl4ZXJbaW5kZXhdID0gZ2FpbjsKKworCURFX0FDVCgoInNldF92bWl4ZXJfZ2FpbjogcGlwZSAlZCwgb3V0ICVkID0gJWRcbiIsIHBpcGUsIG91dHB1dCwgZ2FpbikpOworCXJldHVybiAwOworfQorCisKKworLyogVGVsbCB0aGUgRFNQIHRvIHJlYWQgYW5kIHVwZGF0ZSB2aXJ0dWFsIG1peGVyIGxldmVscyBpbiBjb21tIHBhZ2UuICovCitzdGF0aWMgaW50IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlpZiAod2FpdF9oYW5kc2hha2UoY2hpcCkpCisJCXJldHVybiAtRUlPOworCWNsZWFyX2hhbmRzaGFrZShjaGlwKTsKKwlyZXR1cm4gc2VuZF92ZWN0b3IoY2hpcCwgRFNQX1ZDX1NFVF9WTUlYRVJfR0FJTik7Cit9CisKKworCitzdGF0aWMgdTMyIGRldGVjdF9pbnB1dF9jbG9ja3MoY29uc3Qgc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7Cit9CisKKworCisvKiBUaGUgSW5kaWdvSU8gaGFzIG5vIEFTSUMuIEp1c3QgZG8gbm90aGluZyAqLworc3RhdGljIGludCBsb2FkX2FzaWMoc3RydWN0IGVjaG9hdWRpbyAqY2hpcCkKK3sKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqX2RzcC5jCmluZGV4IDkwNzMwYTUuLjA4MzkyOTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGpfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kal9kc3AuYwpAQCAtNjMsMTggKzYzLDYgQEAKIAlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIERlZmF1bHQgcm91dGluZyBvZiB0aGUgdmlydHVhbCBjaGFubmVsczogdmNoYW5uZWxzIDAtMyBhbmQKLQl2Y2hhbm5lbHMgNC03IGFyZSByb3V0ZWQgdG8gcmVhbCBjaGFubmVscyAwLTQgKi8KLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDEsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAyLCAyLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMywgMywgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDQsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCA1LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMiwgNiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDMsIDcsIDApOwotCWVyciA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGp4LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ODJlZjYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeC5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogIEFMU0EgZHJpdmVyIGZvciBFY2hvYXVkaW8gc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2RlZmluZSBJTkRJR09fRkFNSUxZCisjZGVmaW5lIEVDSE9DQVJEX0lORElHT19ESlgKKyNkZWZpbmUgRUNIT0NBUkRfTkFNRSAiSW5kaWdvIERKeCIKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NVUEVSX0lOVEVSTEVBVkUKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1ZNSVhFUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1RFUkVPX0JJR19FTkRJQU4zMgorCisvKiBQaXBlIGluZGV4ZXMgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX09VVAkwCS8qIDggKi8KKyNkZWZpbmUgUFhfRElHSVRBTF9PVVQJOAkvKiAwICovCisjZGVmaW5lIFBYX0FOQUxPR19JTgk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfRElHSVRBTF9JTgk4CS8qIDAgKi8KKyNkZWZpbmUgUFhfTlVNCQk4CisKKy8qIEJ1cyBpbmRleGVzICovCisjZGVmaW5lIEJYX0FOQUxPR19PVVQJMAkvKiA0ICovCisjZGVmaW5lIEJYX0RJR0lUQUxfT1VUCTQJLyogMCAqLworI2RlZmluZSBCWF9BTkFMT0dfSU4JNAkvKiAwICovCisjZGVmaW5lIEJYX0RJR0lUQUxfSU4JNAkvKiAwICovCisjZGVmaW5lIEJYX05VTQkJNAorCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvdGx2Lmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlICJlY2hvYXVkaW8uaCIKKworTU9EVUxFX0ZJUk1XQVJFKCJlYS9sb2FkZXJfZHNwLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImVhL2luZGlnb19kanhfZHNwLmZ3Iik7CisKKyNkZWZpbmUgRldfMzYxX0xPQURFUgkJMAorI2RlZmluZSBGV19JTkRJR09fREpYX0RTUAkxCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgY2FyZF9md1tdID0geworCXswLCAibG9hZGVyX2RzcC5mdyJ9LAorCXswLCAiaW5kaWdvX2RqeF9kc3AuZncifQorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNuZF9lY2hvX2lkc1tdID0geworCXsweDEwNTcsIDB4MzQxMCwgMHhFQ0MwLCAweDAwRTAsIDAsIDAsIDB9LAkvKiBJbmRpZ28gREp4Ki8KKwl7MCx9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgcGNtX2hhcmR3YXJlX3NrZWwgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQsCisJLmZvcm1hdHMgPQlTTkRSVl9QQ01fRk1UQklUX1U4IHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSwKKwkucmF0ZXMgPSAJU05EUlZfUENNX1JBVEVfMzIwMDAgfAorCQkJU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJU05EUlZfUENNX1JBVEVfODgyMDAgfAorCQkJU05EUlZfUENNX1JBVEVfOTYwMDAsCisJLnJhdGVfbWluID0gMzIwMDAsCisJLnJhdGVfbWF4ID0gOTYwMDAsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDQsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAyNjIxNDQsCisJLnBlcmlvZF9ieXRlc19taW4gPSAzMiwKKwkucGVyaW9kX2J5dGVzX21heCA9IDEzMTA3MiwKKwkucGVyaW9kc19taW4gPSAyLAorCS5wZXJpb2RzX21heCA9IDIyMCwKK307CisKKyNpbmNsdWRlICJpbmRpZ29kanhfZHNwLmMiCisjaW5jbHVkZSAiaW5kaWdvX2V4cHJlc3NfZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpby5jIgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanhfZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqeF9kc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTkxZmMyCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kanhfZHNwLmMKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBFY2hvIERpZ2l0YWwgQXVkaW8ncyBnZW5lcmljIGRyaXZlciBsaWJyYXJ5LgorQ29weXJpZ2h0IEVjaG8gRGlnaXRhbCBBdWRpbyBDb3Jwb3JhdGlvbiAoYykgMTk5OCAtIDIwMDUKK0FsbCByaWdodHMgcmVzZXJ2ZWQKK3d3dy5lY2hvYXVkaW8uY29tCisKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgordmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBUcmFuc2xhdGlvbiBmcm9tIEMrKyBhbmQgYWRhcHRhdGlvbiBmb3IgdXNlIGluIEFMU0EtRHJpdmVyCisgd2VyZSBtYWRlIGJ5IEdpdWxpYW5vIFBvY2hpbmkgPHBvY2hpbmlAc2hpbnkuaXQ+CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgdXBkYXRlX3ZtaXhlcl9sZXZlbChzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwKTsKK3N0YXRpYyBpbnQgc2V0X3ZtaXhlcl9nYWluKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBvdXRwdXQsCisJCQkgICB1MTYgcGlwZSwgaW50IGdhaW4pOworCisKK3N0YXRpYyBpbnQgaW5pdF9odyhzdHJ1Y3QgZWNob2F1ZGlvICpjaGlwLCB1MTYgZGV2aWNlX2lkLCB1MTYgc3ViZGV2aWNlX2lkKQoreworCWludCBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odygpIC0gSW5kaWdvIERKeFxuIikpOworCWlmIChzbmRfQlVHX09OKChzdWJkZXZpY2VfaWQgJiAweGZmZjApICE9IElORElHT19ESlgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWVyciA9IGluaXRfZHNwX2NvbW1fcGFnZShjaGlwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlERV9JTklUKCgiaW5pdF9odyAtIGNvdWxkIG5vdCBpbml0aWFsaXplIERTUCBjb21tIHBhZ2VcbiIpKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwljaGlwLT5kZXZpY2VfaWQgPSBkZXZpY2VfaWQ7CisJY2hpcC0+c3ViZGV2aWNlX2lkID0gc3ViZGV2aWNlX2lkOworCWNoaXAtPmJhZF9ib2FyZCA9IFRSVUU7CisJY2hpcC0+ZHNwX2NvZGVfdG9fbG9hZCA9ICZjYXJkX2Z3W0ZXX0lORElHT19ESlhfRFNQXTsKKwkvKiBTaW5jZSB0aGlzIGNhcmQgaGFzIG5vIEFTSUMsIG1hcmsgaXQgYXMgbG9hZGVkIHNvIGV2ZXJ5dGhpbmcKKwkgICB3b3JrcyBPSyAqLworCWNoaXAtPmFzaWNfbG9hZGVkID0gVFJVRTsKKwljaGlwLT5pbnB1dF9jbG9ja190eXBlcyA9IEVDSE9fQ0xPQ0tfQklUX0lOVEVSTkFMOworCisJZXJyID0gbG9hZF9maXJtd2FyZShjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwljaGlwLT5iYWRfYm9hcmQgPSBGQUxTRTsKKworCWVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvX2RzcC5jCmluZGV4IGE3ZTA5ZWMuLjA2MDRjOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW9fZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pb19kc3AuYwpAQCAtNjMsMTggKzYzLDYgQEAKIAlpZiAoKGVyciA9IGluaXRfbGluZV9sZXZlbHMoY2hpcCkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCS8qIERlZmF1bHQgcm91dGluZyBvZiB0aGUgdmlydHVhbCBjaGFubmVsczogYWxsIHZjaGFubmVscyBhcmUgcm91dGVkCi0JdG8gdGhlIHN0ZXJlbyBvdXRwdXQgKi8KLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMCwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDEsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAwLCAyLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMSwgMywgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDQsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCA1LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgNiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDcsIDApOwotCWVyciA9IHVwZGF0ZV92bWl4ZXJfbGV2ZWwoY2hpcCk7Ci0KIAlERV9JTklUKCgiaW5pdF9odyBkb25lXG4iKSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYmVlMjcKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveC5jCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogIEFMU0EgZHJpdmVyIGZvciBFY2hvYXVkaW8gc291bmRjYXJkcy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2RlZmluZSBJTkRJR09fRkFNSUxZCisjZGVmaW5lIEVDSE9DQVJEX0lORElHT19JT1gKKyNkZWZpbmUgRUNIT0NBUkRfTkFNRSAiSW5kaWdvIElPeCIKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX01PTklUT1IKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1NVUEVSX0lOVEVSTEVBVkUKKyNkZWZpbmUgRUNIT0NBUkRfSEFTX1ZNSVhFUgorI2RlZmluZSBFQ0hPQ0FSRF9IQVNfU1RFUkVPX0JJR19FTkRJQU4zMgorCisvKiBQaXBlIGluZGV4ZXMgKi8KKyNkZWZpbmUgUFhfQU5BTE9HX09VVAkwCS8qIDggKi8KKyNkZWZpbmUgUFhfRElHSVRBTF9PVVQJOAkvKiAwICovCisjZGVmaW5lIFBYX0FOQUxPR19JTgk4CS8qIDIgKi8KKyNkZWZpbmUgUFhfRElHSVRBTF9JTgkxMAkvKiAwICovCisjZGVmaW5lIFBYX05VTQkJMTAKKworLyogQnVzIGluZGV4ZXMgKi8KKyNkZWZpbmUgQlhfQU5BTE9HX09VVAkwCS8qIDIgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9PVVQJMgkvKiAwICovCisjZGVmaW5lIEJYX0FOQUxPR19JTgkyCS8qIDIgKi8KKyNkZWZpbmUgQlhfRElHSVRBTF9JTgk0CS8qIDAgKi8KKyNkZWZpbmUgQlhfTlVNCQk0CisKKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvaW5mby5oPgorI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxzb3VuZC90bHYuaD4KKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CisjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgImVjaG9hdWRpby5oIgorCitNT0RVTEVfRklSTVdBUkUoImVhL2xvYWRlcl9kc3AuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgiZWEvaW5kaWdvX2lveF9kc3AuZnciKTsKKworI2RlZmluZSBGV18zNjFfTE9BREVSCQkwCisjZGVmaW5lIEZXX0lORElHT19JT1hfRFNQCTEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSBjYXJkX2Z3W10gPSB7CisJezAsICJsb2FkZXJfZHNwLmZ3In0sCisJezAsICJpbmRpZ29faW94X2RzcC5mdyJ9Cit9OworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc25kX2VjaG9faWRzW10gPSB7CisJezB4MTA1NywgMHgzNDEwLCAweEVDQzAsIDB4MDBEMCwgMCwgMCwgMH0sCS8qIEluZGlnbyBJT3ggKi8KKwl7MCx9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgcGNtX2hhcmR3YXJlX3NrZWwgPSB7CisJLmluZm8gPSBTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCVNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQlTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCVNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQsCisJLmZvcm1hdHMgPQlTTkRSVl9QQ01fRk1UQklUX1U4IHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCVNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSB8CisJCQlTTkRSVl9QQ01fRk1UQklUX1MzMl9CRSwKKwkucmF0ZXMgPSAJU05EUlZfUENNX1JBVEVfMzIwMDAgfAorCQkJU05EUlZfUENNX1JBVEVfNDQxMDAgfAorCQkJU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJU05EUlZfUENNX1JBVEVfODgyMDAgfAorCQkJU05EUlZfUENNX1JBVEVfOTYwMDAsCisJLnJhdGVfbWluID0gMzIwMDAsCisJLnJhdGVfbWF4ID0gOTYwMDAsCisJLmNoYW5uZWxzX21pbiA9IDEsCisJLmNoYW5uZWxzX21heCA9IDgsCisJLmJ1ZmZlcl9ieXRlc19tYXggPSAyNjIxNDQsCisJLnBlcmlvZF9ieXRlc19taW4gPSAzMiwKKwkucGVyaW9kX2J5dGVzX21heCA9IDEzMTA3MiwKKwkucGVyaW9kc19taW4gPSAyLAorCS5wZXJpb2RzX21heCA9IDIyMCwKK307CisKKyNpbmNsdWRlICJpbmRpZ29pb3hfZHNwLmMiCisjaW5jbHVkZSAiaW5kaWdvX2V4cHJlc3NfZHNwLmMiCisjaW5jbHVkZSAiZWNob2F1ZGlvX2RzcC5jIgorI2luY2x1ZGUgImVjaG9hdWRpby5jIgorCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveF9kc3AuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW94X2RzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNTc1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lveF9kc3AuYwpAQCAtMCwwICsxLDY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEVjaG8gRGlnaXRhbCBBdWRpbydzIGdlbmVyaWMgZHJpdmVyIGxpYnJhcnkuCitDb3B5cmlnaHQgRWNobyBEaWdpdGFsIEF1ZGlvIENvcnBvcmF0aW9uIChjKSAxOTk4IC0gMjAwNQorQWxsIHJpZ2h0cyByZXNlcnZlZAord3d3LmVjaG9hdWRpby5jb20KKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKK0xlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworIFRyYW5zbGF0aW9uIGZyb20gQysrIGFuZCBhZGFwdGF0aW9uIGZvciB1c2UgaW4gQUxTQS1Ecml2ZXIKKyB3ZXJlIG1hZGUgYnkgR2l1bGlhbm8gUG9jaGluaSA8cG9jaGluaUBzaGlueS5pdD4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCB1cGRhdGVfdm1peGVyX2xldmVsKHN0cnVjdCBlY2hvYXVkaW8gKmNoaXApOworc3RhdGljIGludCBzZXRfdm1peGVyX2dhaW4oc3RydWN0IGVjaG9hdWRpbyAqY2hpcCwgdTE2IG91dHB1dCwKKwkJCSAgIHUxNiBwaXBlLCBpbnQgZ2Fpbik7CisKKworc3RhdGljIGludCBpbml0X2h3KHN0cnVjdCBlY2hvYXVkaW8gKmNoaXAsIHUxNiBkZXZpY2VfaWQsIHUxNiBzdWJkZXZpY2VfaWQpCit7CisJaW50IGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3KCkgLSBJbmRpZ28gSU94XG4iKSk7CisJaWYgKHNuZF9CVUdfT04oKHN1YmRldmljZV9pZCAmIDB4ZmZmMCkgIT0gSU5ESUdPX0lPWCkpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyID0gaW5pdF9kc3BfY29tbV9wYWdlKGNoaXApOworCWlmIChlcnIgPCAwKSB7CisJCURFX0lOSVQoKCJpbml0X2h3IC0gY291bGQgbm90IGluaXRpYWxpemUgRFNQIGNvbW0gcGFnZVxuIikpOworCQlyZXR1cm4gZXJyOworCX0KKworCWNoaXAtPmRldmljZV9pZCA9IGRldmljZV9pZDsKKwljaGlwLT5zdWJkZXZpY2VfaWQgPSBzdWJkZXZpY2VfaWQ7CisJY2hpcC0+YmFkX2JvYXJkID0gVFJVRTsKKwljaGlwLT5kc3BfY29kZV90b19sb2FkID0gJmNhcmRfZndbRldfSU5ESUdPX0lPWF9EU1BdOworCS8qIFNpbmNlIHRoaXMgY2FyZCBoYXMgbm8gQVNJQywgbWFyayBpdCBhcyBsb2FkZWQgc28gZXZlcnl0aGluZworCSAgIHdvcmtzIE9LICovCisJY2hpcC0+YXNpY19sb2FkZWQgPSBUUlVFOworCWNoaXAtPmlucHV0X2Nsb2NrX3R5cGVzID0gRUNIT19DTE9DS19CSVRfSU5URVJOQUw7CisKKwllcnIgPSBsb2FkX2Zpcm13YXJlKGNoaXApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCWNoaXAtPmJhZF9ib2FyZCA9IEZBTFNFOworCisJZXJyID0gaW5pdF9saW5lX2xldmVscyhjaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCURFX0lOSVQoKCJpbml0X2h3IGRvbmVcbiIpKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwX2RzcC5jCmluZGV4IGVkZTc1YzYuLjgzNzUwZTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyMF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjBfZHNwLmMKQEAgLTI4NCwxMCArMjg0LDEwIEBACiAJREVfQUNUKCgic2V0X3Byb2Zlc3Npb25hbF9zcGRpZiAlZFxuIiwgcHJvZikpOwogCWlmIChwcm9mKQogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzIHw9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJCQljcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWVsc2UKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyAmPQotCQkJfl9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKKwkJCX5jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOwogCWNoaXAtPnByb2Zlc3Npb25hbF9zcGRpZiA9IHByb2Y7CiAJcmV0dXJuIHVwZGF0ZV9mbGFncyhjaGlwKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhX2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKaW5kZXggMjI3Mzg2Ni4uNTUxNDA1MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWFfZHNwLmMKQEAgLTY5LDE4ICs2OSw2IEBACiAJaWYgKChlcnIgPSBpbml0X2xpbmVfbGV2ZWxzKGNoaXApKSkKIAkJcmV0dXJuIGVycjsKIAotCS8qIERlZmF1bHQgcm91dGluZyBvZiB0aGUgdmlydHVhbCBjaGFubmVsczogdmNoYW5uZWxzIDAtMyBnbyB0byBhbmFsb2cKLQlvdXRwdXRzIGFuZCB2Y2hhbm5lbHMgNC03IGdvIHRvIFMvUERJRiBvdXRwdXRzICovCi0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDAsIDAsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAxLCAxLCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMCwgMiwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDEsIDMsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAyLCA0LCAwKTsKLQlzZXRfdm1peGVyX2dhaW4oY2hpcCwgMywgNSwgMCk7Ci0Jc2V0X3ZtaXhlcl9nYWluKGNoaXAsIDIsIDYsIDApOwotCXNldF92bWl4ZXJfZ2FpbihjaGlwLCAzLCA3LCAwKTsKLQllcnIgPSB1cGRhdGVfdm1peGVyX2xldmVsKGNoaXApOwotCiAJREVfSU5JVCgoImluaXRfaHcgZG9uZVxuIikpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yMjIsMTAgKzIxMCwxMCBAQAogCURFX0FDVCgoInNldF9wcm9mZXNzaW9uYWxfc3BkaWYgJWRcbiIsIHByb2YpKTsKIAlpZiAocHJvZikKIAkJY2hpcC0+Y29tbV9wYWdlLT5mbGFncyB8PQotCQkJX19jb25zdGFudF9jcHVfdG9fbGUzMihEU1BfRkxBR19QUk9GRVNTSU9OQUxfU1BESUYpOworCQkJY3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKIAllbHNlCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgJj0KLQkJCX5fX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX1BST0ZFU1NJT05BTF9TUERJRik7CisJCQl+Y3B1X3RvX2xlMzIoRFNQX0ZMQUdfUFJPRkVTU0lPTkFMX1NQRElGKTsKIAljaGlwLT5wcm9mZXNzaW9uYWxfc3BkaWYgPSBwcm9mOwogCXJldHVybiB1cGRhdGVfZmxhZ3MoY2hpcCk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pZGkuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlkaS5jCmluZGV4IDc3YmYyYTguLmE5NTNkMTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlkaS5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlkaS5jCkBAIC00NCwxMCArNDQsMTAgQEAKIAlpZiAoZW5hYmxlKSB7CiAJCWNoaXAtPm10Y19zdGF0ZSA9IE1JRElfSU5fU1RBVEVfTk9STUFMOwogCQljaGlwLT5jb21tX3BhZ2UtPmZsYWdzIHw9Ci0JCQlfX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX01JRElfSU5QVVQpOworCQkJY3B1X3RvX2xlMzIoRFNQX0ZMQUdfTUlESV9JTlBVVCk7CiAJfSBlbHNlCiAJCWNoaXAtPmNvbW1fcGFnZS0+ZmxhZ3MgJj0KLQkJCX5fX2NvbnN0YW50X2NwdV90b19sZTMyKERTUF9GTEFHX01JRElfSU5QVVQpOworCQkJfmNwdV90b19sZTMyKERTUF9GTEFHX01JRElfSU5QVVQpOwogCiAJY2xlYXJfaGFuZHNoYWtlKGNoaXApOwogCXJldHVybiBzZW5kX3ZlY3RvcihjaGlwLCBEU1BfVkNfVVBEQVRFX0ZMQUdTKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazEuYwppbmRleCA4MzU0YzFhLi5jN2YzYjk5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCkBAIC0xMTQsOSArMTE0LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKG1heF9idWZmZXJfc2l6ZVtkZXZdIDwgMzIpCiAJCW1heF9idWZmZXJfc2l6ZVtkZXZdID0gMzI7CiAJZWxzZSBpZiAobWF4X2J1ZmZlcl9zaXplW2Rldl0gPiAxMDI0KQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9jYWxsYmFjay5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9jYWxsYmFjay5jCmluZGV4IDBlNjQ5ZGMuLjdlZjk0OWQ5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxX2NhbGxiYWNrLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9jYWxsYmFjay5jCkBAIC0xMDMsNyArMTAzLDEwIEBACiAJCQlpbnQgY2g7CiAJCQl2cCA9ICZlbXUtPnZvaWNlc1tiZXN0W2ldLnZvaWNlXTsKIAkJCWlmICgoY2ggPSB2cC0+Y2gpIDwgMCkgewotCQkJCS8vcHJpbnRrKCJzeW50aF9nZXRfdm9pY2U6IGNoIDwgMCAoJWQpID8/IiwgaSk7CisJCQkJLyoKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJzeW50aF9nZXRfdm9pY2U6IGNoIDwgMCAoJWQpID8/IiwgaSk7CisJCQkJKi8KIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCXZwLT5lbXUtPm51bV92b2ljZXMtLTsKQEAgLTMzNSw3ICszMzgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAllbWVtLT5tYXBfbG9ja2VkKys7CiAJaWYgKHNuZF9lbXUxMGsxX21lbWJsa19tYXAoaHcsIGVtZW0pIDwgMCkgewotCQkvLyBwcmludGsoImVtdTogY2Fubm90IG1hcCFcbiIpOworCQkvKiBwcmludGsoS0VSTl9FUlIgImVtdTogY2Fubm90IG1hcCFcbiIpOyAqLwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWFwcGVkX29mZnNldCA9IHNuZF9lbXUxMGsxX21lbWJsa19vZmZzZXQoZW1lbSkgPj4gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKaW5kZXggMTAxYTFjMS4uZjE4YmQ2MiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKQEAgLTcxMSw4ICs3MTEsNyBAQAogc3RhdGljIGludCBlbXUxMDEwX2Zpcm13YXJlX3RocmVhZCh2b2lkICpkYXRhKQogewogCXN0cnVjdCBzbmRfZW11MTBrMSAqZW11ID0gZGF0YTsKLQlpbnQgdG1wLCB0bXAyOwotCWludCByZWc7CisJdTMyIHRtcCwgdG1wMiwgcmVnOwogCWludCBlcnI7CiAKIAlmb3IgKDs7KSB7CkBAIC03NTgsNyArNzU3LDggQEAKIAkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJlbXUxMDEwOiBBdWRpbyBEb2NrIEZpcm13YXJlIGxvYWRlZFxuIik7CiAJCQlzbmRfZW11MTAxMF9mcGdhX3JlYWQoZW11LCBFTVVfRE9DS19NQUpPUl9SRVYsICZ0bXApOwogCQkJc25kX2VtdTEwMTBfZnBnYV9yZWFkKGVtdSwgRU1VX0RPQ0tfTUlOT1JfUkVWLCAmdG1wMik7Ci0JCQlzbmRfcHJpbnRrKCJBdWRpbyBEb2NrIHZlcjolZC4lZFxuIiwgdG1wLCB0bXAyKTsKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJBdWRpbyBEb2NrIHZlcjogJXUuJXVcbiIsCisJCQkJICAgdG1wLCB0bXAyKTsKIAkJCS8qIFN5bmMgY2xvY2tpbmcgYmV0d2VlbiAxMDEwIGFuZCBEb2NrICovCiAJCQkvKiBBbGxvdyBETEwgdG8gc2V0dGxlICovCiAJCQltc2xlZXAoMTApOwpAQCAtODA0LDggKzgwNCw3IEBACiBzdGF0aWMgaW50IHNuZF9lbXUxMGsxX2VtdTEwMTBfaW5pdChzdHJ1Y3Qgc25kX2VtdTEwazEgKmVtdSkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgdG1wLCB0bXAyOwotCWludCByZWc7CisJdTMyIHRtcCwgdG1wMiwgcmVnOwogCWludCBlcnI7CiAJY29uc3QgY2hhciAqZmlsZW5hbWUgPSBOVUxMOwogCkBAIC04ODcsNyArODg2LDcgQEAKIAlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiZW11MTAxMDogSGFuYSBGaXJtd2FyZSBsb2FkZWRcbiIpOwogCXNuZF9lbXUxMDEwX2ZwZ2FfcmVhZChlbXUsIEVNVV9IQU5BX01BSk9SX1JFViwgJnRtcCk7CiAJc25kX2VtdTEwMTBfZnBnYV9yZWFkKGVtdSwgRU1VX0hBTkFfTUlOT1JfUkVWLCAmdG1wMik7Ci0Jc25kX3ByaW50aygiZW11MTAxMDogSGFuYSB2ZXJzaW9uOiAlZC4lZFxuIiwgdG1wLCB0bXAyKTsKKwlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiZW11MTAxMDogSGFuYSB2ZXJzaW9uOiAldS4ldVxuIiwgdG1wLCB0bXAyKTsKIAkvKiBFbmFibGUgNDhWb2x0IHBvd2VyIHRvIEF1ZGlvIERvY2sgKi8KIAlzbmRfZW11MTAxMF9mcGdhX3dyaXRlKGVtdSwgRU1VX0hBTkFfRE9DS19QV1IsIEVNVV9IQU5BX0RPQ0tfUFdSX09OKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKaW5kZXggNWZmNGRiYi4uMzE1NDJhZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCkBAIC0xNTQ0LDkgKzE1NDQsOSBAQAogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmICgoZXJyID0gc25kX2VtdTEwazF4X2NyZWF0ZShjYXJkLCBwY2ksICZjaGlwKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYwppbmRleCA3ZGJhMDhmLi4xOTFlMWNkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdWZ4LmMKQEAgLTE1MTksNyArMTUxOSw3IEBACiAJLyogQV9QVVRfU1RFUkVPX09VVFBVVChBX0VYVE9VVF9GUk9OVF9MLCBBX0VYVE9VVF9GUk9OVF9SLCBwbGF5YmFjayArIFNORF9FTVUxMEsxX1BMQVlCQUNLX0NIQU5ORUxTKTsgKi8KIAlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+ZW11X21vZGVsKSB7CiAJCS8qIEVNVTEwMTAgT3V0cHV0cyBmcm9tIFBDTSBGcm9udCwgUmVhciwgQ2VudGVyLCBMRkUsIFNpZGUgKi8KLQkJc25kX3ByaW50aygiRU1VIG91dHB1dHMgb25cbiIpOworCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiRU1VIG91dHB1dHMgb25cbiIpOwogCQlmb3IgKHogPSAwOyB6IDwgODsgeisrKSB7CiAJCQlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+Y2EwMTA4X2NoaXApIHsKIAkJCQlBX09QKGljb2RlLCAmcHRyLCBpQUNDMywgQTNfRU1VMzJPVVQoeiksIEFfR1BSKHBsYXliYWNrICsgU05EX0VNVTEwSzFfUExBWUJBQ0tfQ0hBTk5FTFMgKyB6KSwgQV9DXzAwMDAwMDAwLCBBX0NfMDAwMDAwMDApOwpAQCAtMTU2Nyw3ICsxNTY3LDcgQEAKIAogCWlmIChlbXUtPmNhcmRfY2FwYWJpbGl0aWVzLT5lbXVfbW9kZWwpIHsKIAkJaWYgKGVtdS0+Y2FyZF9jYXBhYmlsaXRpZXMtPmNhMDEwOF9jaGlwKSB7Ci0JCQlzbmRfcHJpbnRrKCJFTVUyIGlucHV0cyBvblxuIik7CisJCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiRU1VMiBpbnB1dHMgb25cbiIpOwogCQkJZm9yICh6ID0gMDsgeiA8IDB4MTA7IHorKykgewogCQkJCXNuZF9lbXUxMGsxX2F1ZGlneV9kc3BfY29udmVydF8zMl90b18yeDE2KCBpY29kZSwgJnB0ciwgdG1wLCAKIAkJCQkJCQkJCWJpdF9zaGlmdGVyMTYsCkBAIC0xNTc1LDEwICsxNTc1LDEzIEBACiAJCQkJCQkJCQlBX0ZYQlVTMih6KjIpICk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlzbmRfcHJpbnRrKCJFTVUgaW5wdXRzIG9uXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJFTVUgaW5wdXRzIG9uXG4iKTsKIAkJCS8qIENhcHR1cmUgMTYgKG9yaWdpbmFsbHkgOCkgY2hhbm5lbHMgb2YgUzMyX0xFIHNvdW5kICovCiAKLQkJCS8qIHByaW50aygiZW11ZnguYzogZ3ByPTB4JXgsIHRtcD0weCV4XG4iLGdwciwgdG1wKTsgKi8KKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRyAiZW11ZnguYzogZ3ByPTB4JXgsIHRtcD0weCV4XG4iLAorCQkJICAgICAgIGdwciwgdG1wKTsKKwkJCSovCiAJCQkvKiBGb3IgdGhlIEVNVTEwMTA6IEhvdyB0byBnZXQgMzJiaXQgdmFsdWVzIGZyb20gdGhlIERTUC4gSGlnaCAxNmJpdHMgaW50byBMLCBsb3cgMTZiaXRzIGludG8gUi4gKi8KIAkJCS8qIEFfUDE2VklOKDApIGlzIGRlbGF5ZWQgYnkgb25lIHNhbXBsZSwKIAkJCSAqIHNvIGFsbCBvdGhlciBBX1AxNlZJTiBjaGFubmVscyB3aWxsIG5lZWQgdG8gYWxzbyBiZSBkZWxheWVkCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdXBjbS5jCmluZGV4IGNmOTI3NmQuLjc4ZjYyZmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdXBjbS5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2VtdXBjbS5jCkBAIC00NCw3ICs0NCw3IEBACiAJaWYgKGVwY20tPnN1YnN0cmVhbSA9PSBOVUxMKQogCQlyZXR1cm47CiAjaWYgMAotCXByaW50aygiSVJROiBwb3NpdGlvbiA9IDB4JXgsIHBlcmlvZCA9IDB4JXgsIHNpemUgPSAweCV4XG4iLAorCXByaW50ayhLRVJOX0RFQlVHICJJUlE6IHBvc2l0aW9uID0gMHgleCwgcGVyaW9kID0gMHgleCwgc2l6ZSA9IDB4JXhcbiIsCiAJCQllcGNtLT5zdWJzdHJlYW0tPnJ1bnRpbWUtPmh3LT5wb2ludGVyKGVtdSwgZXBjbS0+c3Vic3RyZWFtKSwKIAkJCXNuZF9wY21fbGliX3BlcmlvZF9ieXRlcyhlcGNtLT5zdWJzdHJlYW0pLAogCQkJc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKGVwY20tPnN1YnN0cmVhbSkpOwpAQCAtMTQ2LDcgKzE0NiwxMSBAQAogCQkJCQkgICAgICAxLAogCQkJCQkgICAgICAmZXBjbS0+ZXh0cmEpOwogCQlpZiAoZXJyIDwgMCkgewotCQkJLyogcHJpbnRrKCJwY21fY2hhbm5lbF9hbGxvYzogZmFpbGVkIGV4dHJhOiB2b2ljZXM9JWQsIGZyYW1lPSVkXG4iLCB2b2ljZXMsIGZyYW1lKTsgKi8KKwkJCS8qCisJCQlwcmludGsoS0VSTl9ERUJVRyAicGNtX2NoYW5uZWxfYWxsb2M6ICIKKwkJCSAgICAgICAiZmFpbGVkIGV4dHJhOiB2b2ljZXM9JWQsIGZyYW1lPSVkXG4iLAorCQkJICAgICAgIHZvaWNlcywgZnJhbWUpOworCQkJKi8KIAkJCWZvciAoaSA9IDA7IGkgPCB2b2ljZXM7IGkrKykgewogCQkJCXNuZF9lbXUxMGsxX3ZvaWNlX2ZyZWUoZXBjbS0+ZW11LCBlcGNtLT52b2ljZXNbaV0pOwogCQkJCWVwY20tPnZvaWNlc1tpXSA9IE5VTEw7CkBAIC03MzcsNyArNzQxLDEwIEBACiAJc3RydWN0IHNuZF9lbXUxMGsxX3BjbV9taXhlciAqbWl4OwogCWludCByZXN1bHQgPSAwOwogCi0JLyogcHJpbnRrKCJ0cmlnZ2VyIC0gZW11MTBrMSA9IDB4JXgsIGNtZCA9ICVpLCBwb2ludGVyID0gJWlcbiIsIChpbnQpZW11LCBjbWQsIHN1YnN0cmVhbS0+b3BzLT5wb2ludGVyKHN1YnN0cmVhbSkpOyAqLworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInRyaWdnZXIgLSBlbXUxMGsxID0gMHgleCwgY21kID0gJWksIHBvaW50ZXIgPSAlaVxuIiwKKwkgICAgICAgKGludCllbXUsIGNtZCwgc3Vic3RyZWFtLT5vcHMtPnBvaW50ZXIoc3Vic3RyZWFtKSkKKwkqLwogCXNwaW5fbG9jaygmZW11LT5yZWdfbG9jayk7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgpAQCAtNzg2LDcgKzc5MywxMCBAQAogCQkvKiBobW0gdGhpcyBzaG91bGQgY2F1c2UgZnVsbCBhbmQgaGFsZiBmdWxsIGludGVycnVwdCB0byBiZSByYWlzZWQ/ICovCiAJCW91dGwoZXBjbS0+Y2FwdHVyZV9pcHIsIGVtdS0+cG9ydCArIElQUik7CiAJCXNuZF9lbXUxMGsxX2ludHJfZW5hYmxlKGVtdSwgZXBjbS0+Y2FwdHVyZV9pbnRlKTsKLQkJLyogcHJpbnRrKCJhZGNjciA9IDB4JXgsIGFkY2JzID0gMHgleFxuIiwgZXBjbS0+YWRjY3IsIGVwY20tPmFkY2JzKTsgKi8KKwkJLyoKKwkJcHJpbnRrKEtFUk5fREVCVUcgImFkY2NyID0gMHgleCwgYWRjYnMgPSAweCV4XG4iLAorCQkgICAgICAgZXBjbS0+YWRjY3IsIGVwY20tPmFkY2JzKTsKKwkJKi8KIAkJc3dpdGNoIChlcGNtLT50eXBlKSB7CiAJCWNhc2UgQ0FQVFVSRV9BQzk3QURDOgogCQkJc25kX2VtdTEwazFfcHRyX3dyaXRlKGVtdSwgQURDQ1IsIDAsIGVwY20tPmNhcHR1cmVfY3JfdmFsKTsKQEAgLTg1Nyw3ICs4NjcsMTEgQEAKIAkJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAl9CiAjZW5kaWYKLQkvKiBwcmludGsoInB0ciA9IDB4JXgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4XG4iLCBwdHIsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplLCBydW50aW1lLT5wZXJpb2Rfc2l6ZSk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAicHRyID0gMHgleCwgYnVmZmVyX3NpemUgPSAweCV4LCBwZXJpb2Rfc2l6ZSA9IDB4JXhcbiIsCisJICAgICAgIHB0ciwgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplKTsKKwkqLwogCXJldHVybiBwdHI7CiB9CiAKQEAgLTE1NDYsNyArMTU2MCwxMSBAQAogCQkJCQkJICAgdW5zaWduZWQgaW50IGNvdW50LAogCQkJCQkJICAgdW5zaWduZWQgaW50IHRyYW1fc2hpZnQpCiB7Ci0JLyogcHJpbnRrKCJ0cmFtX3Bva2UxOiBkc3RfbGVmdCA9IDB4JXAsIGRzdF9yaWdodCA9IDB4JXAsIHNyYyA9IDB4JXAsIGNvdW50ID0gMHgleFxuIiwgZHN0X2xlZnQsIGRzdF9yaWdodCwgc3JjLCBjb3VudCk7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAidHJhbV9wb2tlMTogZHN0X2xlZnQgPSAweCVwLCBkc3RfcmlnaHQgPSAweCVwLCAiCisJICAgICAgICJzcmMgPSAweCVwLCBjb3VudCA9IDB4JXhcbiIsCisJICAgICAgIGRzdF9sZWZ0LCBkc3RfcmlnaHQsIHNyYywgY291bnQpOworCSovCiAJaWYgKCh0cmFtX3NoaWZ0ICYgMSkgPT0gMCkgewogCQl3aGlsZSAoY291bnQtLSkgewogCQkJKmRzdF9sZWZ0LS0gPSAqc3JjKys7CkBAIC0xNjIzLDcgKzE2NDEsMTIgQEAKIAlzdHJ1Y3Qgc25kX2VtdTEwazFfZng4MDEwX3BjbSAqcGNtID0gJmVtdS0+Zng4MDEwLnBjbVtzdWJzdHJlYW0tPm51bWJlcl07CiAJdW5zaWduZWQgaW50IGk7CiAJCi0JLyogcHJpbnRrKCJwcmVwYXJlOiBldHJhbV9wYWdlcyA9IDB4JXAsIGRtYV9hcmVhID0gMHgleCwgYnVmZmVyX3NpemUgPSAweCV4ICgweCV4KVxuIiwgZW11LT5meDgwMTAuZXRyYW1fcGFnZXMsIHJ1bnRpbWUtPmRtYV9hcmVhLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+YnVmZmVyX3NpemUgPDwgMik7ICovCisJLyoKKwlwcmludGsoS0VSTl9ERUJVRyAicHJlcGFyZTogZXRyYW1fcGFnZXMgPSAweCVwLCBkbWFfYXJlYSA9IDB4JXgsICIKKwkgICAgICAgImJ1ZmZlcl9zaXplID0gMHgleCAoMHgleClcbiIsCisJICAgICAgIGVtdS0+Zng4MDEwLmV0cmFtX3BhZ2VzLCBydW50aW1lLT5kbWFfYXJlYSwKKwkgICAgICAgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIDw8IDIpOworCSovCiAJbWVtc2V0KCZwY20tPnBjbV9yZWMsIDAsIHNpemVvZihwY20tPnBjbV9yZWMpKTsKIAlwY20tPnBjbV9yZWMuaHdfYnVmZmVyX3NpemUgPSBwY20tPmJ1ZmZlcl9zaXplICogMjsgLyogYnl0ZSBzaXplICovCiAJcGNtLT5wY21fcmVjLnN3X2J1ZmZlcl9zaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9pby5jIGIvc291bmQvcGNpL2VtdTEwazEvaW8uYwppbmRleCBiNWE4MDJiLi40YmZjMzFkIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9pby5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL2lvLmMKQEAgLTIyNiw3ICsyMjYsOSBAQAogCQkJCWJyZWFrOwogCiAJCQlpZiAodGltZW91dCA+IDEwMDApIHsKLSAgICAgICAgICAgICAgICAJCXNuZF9wcmludGsoImVtdTEwazE6STJDOnRpbWVvdXQgc3RhdHVzPTB4JXhcbiIsIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAiZW11MTBrMTpJMkM6dGltZW91dCBzdGF0dXM9MHgleFxuIiwKKwkJCQkJICAgc3RhdHVzKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvcDE2di5jIGIvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCmluZGV4IDc0OWEyMWIuLmU2MTdhY2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCXN0cnVjdCBzbmRfZW11MTBrMV9wY20gKmVwY20gPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CiAgIAogCWlmIChlcGNtKSB7Ci0gICAgICAgIAkvL3NuZF9wcmludGsoImVwY20gZnJlZTogJXBcbiIsIGVwY20pOworICAgICAgICAJLyogc25kX3ByaW50ayhLRVJOX0RFQlVHICJlcGNtIGZyZWU6ICVwXG4iLCBlcGNtKTsgKi8KIAkJa2ZyZWUoZXBjbSk7CiAJfQogfQpAQCAtMTgzLDE0ICsxODMsMTYgQEAKIAlpbnQgZXJyOwogCiAJZXBjbSA9IGt6YWxsb2Moc2l6ZW9mKCplcGNtKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgIC8vc25kX3ByaW50aygiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7CisgICAgICAgIC8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7ICovCiAKIAlpZiAoZXBjbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAllcGNtLT5lbXUgPSBlbXU7CiAJZXBjbS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwotICAgICAgICAvL3NuZF9wcmludGsoImVwY20gZGV2aWNlPSVkLCBjaGFubmVsX2lkPSVkXG4iLCBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLCBjaGFubmVsX2lkKTsKLSAgCisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20gZGV2aWNlPSVkLCBjaGFubmVsX2lkPSVkXG4iLAorCQkgICBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLCBjaGFubmVsX2lkKTsKKwkqLwogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGVwY207CiAJcnVudGltZS0+cHJpdmF0ZV9mcmVlID0gc25kX3AxNnZfcGNtX2ZyZWVfc3Vic3RyZWFtOwogICAKQEAgLTIwMCwxMCArMjAyLDE1IEBACiAgICAgICAgIGNoYW5uZWwtPm51bWJlciA9IGNoYW5uZWxfaWQ7CiAKICAgICAgICAgY2hhbm5lbC0+dXNlPTE7Ci0JLy9zbmRfcHJpbnRrKCJwMTZ2OiBvcGVuIGNoYW5uZWxfaWQ9JWQsIGNoYW5uZWw9JXAsIHVzZT0weCV4XG4iLCBjaGFubmVsX2lkLCBjaGFubmVsLCBjaGFubmVsLT51c2UpOwotICAgICAgICAvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOwotICAgICAgICAvL2NoYW5uZWwtPmludGVycnVwdCA9IHNuZF9wMTZ2X3BjbV9jaGFubmVsX2ludGVycnVwdDsKLSAgICAgICAgY2hhbm5lbC0+ZXBjbT1lcGNtOworI2lmIDAgLyogZGVidWcgKi8KKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgInAxNnY6IG9wZW4gY2hhbm5lbF9pZD0lZCwgY2hhbm5lbD0lcCwgdXNlPTB4JXhcbiIsCisJCSAgIGNoYW5uZWxfaWQsIGNoYW5uZWwsIGNoYW5uZWwtPnVzZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIm9wZW46Y2hhbm5lbF9pZD0lZCwgY2hpcD0lcCwgY2hhbm5lbD0lcFxuIiwKKwkgICAgICAgY2hhbm5lbF9pZCwgY2hpcCwgY2hhbm5lbCk7CisjZW5kaWYgLyogZGVidWcgKi8KKwkvKiBjaGFubmVsLT5pbnRlcnJ1cHQgPSBzbmRfcDE2dl9wY21fY2hhbm5lbF9pbnRlcnJ1cHQ7ICovCisJY2hhbm5lbC0+ZXBjbSA9IGVwY207CiAJaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUykpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogCkBAIC0yMjQsMTQgKzIzMSwxNiBAQAogCWludCBlcnI7CiAKIAllcGNtID0ga3phbGxvYyhzaXplb2YoKmVwY20pLCBHRlBfS0VSTkVMKTsKLQkvL3NuZF9wcmludGsoImVwY20ga2NhbGxvYzogJXBcbiIsIGVwY20pOworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiZXBjbSBrY2FsbG9jOiAlcFxuIiwgZXBjbSk7ICovCiAKIAlpZiAoZXBjbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAllcGNtLT5lbXUgPSBlbXU7CiAJZXBjbS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwotCS8vc25kX3ByaW50aygiZXBjbSBkZXZpY2U9JWQsIGNoYW5uZWxfaWQ9JWRcbiIsIHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UsIGNoYW5uZWxfaWQpOwotCisJLyoKKwlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVwY20gZGV2aWNlPSVkLCBjaGFubmVsX2lkPSVkXG4iLAorCQkgICBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlLCBjaGFubmVsX2lkKTsKKwkqLwogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGVwY207CiAJcnVudGltZS0+cHJpdmF0ZV9mcmVlID0gc25kX3AxNnZfcGNtX2ZyZWVfc3Vic3RyZWFtOwogICAKQEAgLTI0MSwxMCArMjUwLDE1IEBACiAJY2hhbm5lbC0+bnVtYmVyID0gY2hhbm5lbF9pZDsKIAogCWNoYW5uZWwtPnVzZT0xOwotCS8vc25kX3ByaW50aygicDE2djogb3BlbiBjaGFubmVsX2lkPSVkLCBjaGFubmVsPSVwLCB1c2U9MHgleFxuIiwgY2hhbm5lbF9pZCwgY2hhbm5lbCwgY2hhbm5lbC0+dXNlKTsKLQkvL3ByaW50aygib3BlbjpjaGFubmVsX2lkPSVkLCBjaGlwPSVwLCBjaGFubmVsPSVwXG4iLGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOwotCS8vY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX3AxNnZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OwotCWNoYW5uZWwtPmVwY209ZXBjbTsKKyNpZiAwIC8qIGRlYnVnICovCisJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCSAgICJwMTZ2OiBvcGVuIGNoYW5uZWxfaWQ9JWQsIGNoYW5uZWw9JXAsIHVzZT0weCV4XG4iLAorCQkgICBjaGFubmVsX2lkLCBjaGFubmVsLCBjaGFubmVsLT51c2UpOworCXByaW50ayhLRVJOX0RFQlVHICJvcGVuOmNoYW5uZWxfaWQ9JWQsIGNoaXA9JXAsIGNoYW5uZWw9JXBcbiIsCisJICAgICAgIGNoYW5uZWxfaWQsIGNoaXAsIGNoYW5uZWwpOworI2VuZGlmIC8qIGRlYnVnICovCisJLyogY2hhbm5lbC0+aW50ZXJydXB0ID0gc25kX3AxNnZfcGNtX2NoYW5uZWxfaW50ZXJydXB0OyAqLworCWNoYW5uZWwtPmVwY20gPSBlcGNtOwogCWlmICgoZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpKSA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTMzNCw5ICszNDgsMTkgQEAKIAlpbnQgaTsKIAl1MzIgdG1wOwogCQotICAgICAgICAvL3NuZF9wcmludGsoInByZXBhcmU6Y2hhbm5lbF9udW1iZXI9JWQsIHJhdGU9JWQsIGZvcm1hdD0weCV4LCBjaGFubmVscz0lZCwgYnVmZmVyX3NpemU9JWxkLCBwZXJpb2Rfc2l6ZT0lbGQsIHBlcmlvZHM9JXUsIGZyYW1lc190b19ieXRlcz0lZFxuIixjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsIHJ1bnRpbWUtPnBlcmlvZHMsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7Ci0gICAgICAgIC8vc25kX3ByaW50aygiZG1hX2FkZHI9JXgsIGRtYV9hcmVhPSVwLCB0YWJsZV9iYXNlPSVwXG4iLHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7Ci0JLy9zbmRfcHJpbnRrKCJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIixlbXUtPnAxNnZfYnVmZmVyLmFkZHIsIGVtdS0+cDE2dl9idWZmZXIuYXJlYSwgZW11LT5wMTZ2X2J1ZmZlci5ieXRlcyk7CisjaWYgMCAvKiBkZWJ1ZyAqLworCXNuZF9wcmludGsoS0VSTl9ERUJVRyAicHJlcGFyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgIgorCQkgICAiZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsICIKKwkJICAgInBlcmlvZF9zaXplPSVsZCwgcGVyaW9kcz0ldSwgZnJhbWVzX3RvX2J5dGVzPSVkXG4iLAorCQkgICBjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLAorCQkgICBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsCisJCSAgIHJ1bnRpbWUtPnBlcmlvZHMsIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIHRhYmxlX2Jhc2U9JXBcbiIsCisJCSAgIHJ1bnRpbWUtPmRtYV9hZGRyLCBydW50aW1lLT5kbWFfYXJlYSwgdGFibGVfYmFzZSk7CisJc25kX3ByaW50ayhLRVJOX0RFQlVHICJkbWFfYWRkcj0leCwgZG1hX2FyZWE9JXAsIGRtYV9ieXRlcyhzaXplKT0leFxuIiwKKwkJICAgZW11LT5wMTZ2X2J1ZmZlci5hZGRyLCBlbXUtPnAxNnZfYnVmZmVyLmFyZWEsCisJCSAgIGVtdS0+cDE2dl9idWZmZXIuYnl0ZXMpOworI2VuZGlmIC8qIGRlYnVnICovCiAJdG1wID0gc25kX2VtdTEwazFfcHRyX3JlYWQoZW11LCBBX1NQRElGX1NBTVBMRVJBVEUsIGNoYW5uZWwpOwogICAgICAgICBzd2l0Y2ggKHJ1bnRpbWUtPnJhdGUpIHsKIAljYXNlIDQ0MTAwOgpAQCAtMzc5LDcgKzQwMywxNSBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJaW50IGNoYW5uZWwgPSBzdWJzdHJlYW0tPnBjbS0+ZGV2aWNlIC0gZW11LT5wMTZ2X2RldmljZV9vZmZzZXQ7CiAJdTMyIHRtcDsKLQkvL3ByaW50aygicHJlcGFyZSBjYXB0dXJlOmNoYW5uZWxfbnVtYmVyPSVkLCByYXRlPSVkLCBmb3JtYXQ9MHgleCwgY2hhbm5lbHM9JWQsIGJ1ZmZlcl9zaXplPSVsZCwgcGVyaW9kX3NpemU9JWxkLCBmcmFtZXNfdG9fYnl0ZXM9JWRcbiIsY2hhbm5lbCwgcnVudGltZS0+cmF0ZSwgcnVudGltZS0+Zm9ybWF0LCBydW50aW1lLT5jaGFubmVscywgcnVudGltZS0+YnVmZmVyX3NpemUsIHJ1bnRpbWUtPnBlcmlvZF9zaXplLCAgZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIDEpKTsKKworCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInByZXBhcmUgY2FwdHVyZTpjaGFubmVsX251bWJlcj0lZCwgcmF0ZT0lZCwgIgorCSAgICAgICAiZm9ybWF0PTB4JXgsIGNoYW5uZWxzPSVkLCBidWZmZXJfc2l6ZT0lbGQsIHBlcmlvZF9zaXplPSVsZCwgIgorCSAgICAgICAiZnJhbWVzX3RvX2J5dGVzPSVkXG4iLAorCSAgICAgICBjaGFubmVsLCBydW50aW1lLT5yYXRlLCBydW50aW1lLT5mb3JtYXQsIHJ1bnRpbWUtPmNoYW5uZWxzLAorCSAgICAgICBydW50aW1lLT5idWZmZXJfc2l6ZSwgcnVudGltZS0+cGVyaW9kX3NpemUsCisJICAgICAgIGZyYW1lc190b19ieXRlcyhydW50aW1lLCAxKSk7CisJKi8KIAl0bXAgPSBzbmRfZW11MTBrMV9wdHJfcmVhZChlbXUsIEFfU1BESUZfU0FNUExFUkFURSwgY2hhbm5lbCk7CiAgICAgICAgIHN3aXRjaCAocnVudGltZS0+cmF0ZSkgewogCWNhc2UgNDQxMDA6CkBAIC00NTksMTMgKzQ5MSwxMyBAQAogCQlydW50aW1lID0gcy0+cnVudGltZTsKIAkJZXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKIAkJY2hhbm5lbCA9IHN1YnN0cmVhbS0+cGNtLT5kZXZpY2UtZW11LT5wMTZ2X2RldmljZV9vZmZzZXQ7Ci0JCS8vc25kX3ByaW50aygicDE2diBjaGFubmVsPSVkXG4iLGNoYW5uZWwpOworCQkvKiBzbmRfcHJpbnRrKEtFUk5fREVCVUcgInAxNnYgY2hhbm5lbD0lZFxuIiwgY2hhbm5lbCk7ICovCiAJCWVwY20tPnJ1bm5pbmcgPSBydW5uaW5nOwogCQliYXNpYyB8PSAoMHgxPDxjaGFubmVsKTsKIAkJaW50ZSB8PSAoSU5URTJfUExBWUJBQ0tfQ0hfMF9MT09QPDxjaGFubmVsKTsKICAgICAgICAgICAgICAgICBzbmRfcGNtX3RyaWdnZXJfZG9uZShzLCBzdWJzdHJlYW0pOwogICAgICAgICB9Ci0JLy9zbmRfcHJpbnRrKCJiYXNpYz0weCV4LCBpbnRlPTB4JXhcbiIsYmFzaWMsIGludGUpOworCS8qIHNuZF9wcmludGsoS0VSTl9ERUJVRyAiYmFzaWM9MHgleCwgaW50ZT0weCV4XG4iLCBiYXNpYywgaW50ZSk7ICovCiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CkBAIC01NTgsOCArNTkwLDEzIEBACiAJCXB0ciAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnVmZmVyIGNhcHR1cmUgbGltaXRlZCFcbiIpOwogCX0KLQkvL3ByaW50aygicHRyMSA9IDB4JWx4LCBwdHIyPTB4JWx4LCBwdHI9MHglbHgsIGJ1ZmZlcl9zaXplID0gMHgleCwgcGVyaW9kX3NpemUgPSAweCV4LCBiaXRzPSVkLCByYXRlPSVkXG4iLCBwdHIxLCBwdHIyLCBwdHIsIChpbnQpcnVudGltZS0+YnVmZmVyX3NpemUsIChpbnQpcnVudGltZS0+cGVyaW9kX3NpemUsIChpbnQpcnVudGltZS0+ZnJhbWVfYml0cywgKGludClydW50aW1lLT5yYXRlKTsKLQorCS8qCisJcHJpbnRrKEtFUk5fREVCVUcgInB0cjEgPSAweCVseCwgcHRyMj0weCVseCwgcHRyPTB4JWx4LCAiCisJICAgICAgICJidWZmZXJfc2l6ZSA9IDB4JXgsIHBlcmlvZF9zaXplID0gMHgleCwgYml0cz0lZCwgcmF0ZT0lZFxuIiwKKwkgICAgICAgcHRyMSwgcHRyMiwgcHRyLCAoaW50KXJ1bnRpbWUtPmJ1ZmZlcl9zaXplLAorCSAgICAgICAoaW50KXJ1bnRpbWUtPnBlcmlvZF9zaXplLCAoaW50KXJ1bnRpbWUtPmZyYW1lX2JpdHMsCisJICAgICAgIChpbnQpcnVudGltZS0+cmF0ZSk7CisJKi8KIAlyZXR1cm4gcHRyOwogfQogCkBAIC01OTIsNyArNjI5LDEwIEBACiAJLy8gcmVsZWFzZSB0aGUgZGF0YQogCWlmIChjaGlwLT5wMTZ2X2J1ZmZlci5hcmVhKSB7CiAJCXNuZF9kbWFfZnJlZV9wYWdlcygmY2hpcC0+cDE2dl9idWZmZXIpOwotCQkvL3NuZF9wcmludGsoInBlcmlvZCBsYWJsZXMgZnJlZTogJXBcbiIsICZjaGlwLT5wMTZ2X2J1ZmZlcik7CisJCS8qCisJCXNuZF9wcmludGsoS0VSTl9ERUJVRyAicGVyaW9kIGxhYmxlcyBmcmVlOiAlcFxuIiwKKwkJCSAgICZjaGlwLT5wMTZ2X2J1ZmZlcik7CisJCSovCiAJfQogCXJldHVybiAwOwogfQpAQCAtNjA0LDcgKzY0NCw3IEBACiAJaW50IGVycjsKICAgICAgICAgaW50IGNhcHR1cmU9MTsKICAgCi0JLy9zbmRfcHJpbnRrKCJzbmRfcDE2dl9wY20gY2FsbGVkLiBkZXZpY2U9JWRcbiIsIGRldmljZSk7CisJLyogc25kX3ByaW50aygiS0VSTl9ERUJVRyBzbmRfcDE2dl9wY20gY2FsbGVkLiBkZXZpY2U9JWRcbiIsIGRldmljZSk7ICovCiAJZW11LT5wMTZ2X2RldmljZV9vZmZzZXQgPSBkZXZpY2U7CiAJaWYgKHJwY20pCiAJCSpycGNtID0gTlVMTDsKQEAgLTYzMSw3ICs2NzEsMTAgQEAKIAkJCQkJCQkgc25kX2RtYV9wY2lfZGF0YShlbXUtPnBjaSksIAogCQkJCQkJCSAoKDY1NTM2IC0gNjQpICogOCksICgoNjU1MzYgLSA2NCkgKiA4KSkpIDwgMCkgCiAJCQlyZXR1cm4gZXJyOwotCQkvL3NuZF9wcmludGsoInByZWFsbG9jYXRlIHBsYXliYWNrIHN1YnN0cmVhbTogZXJyPSVkXG4iLCBlcnIpOworCQkvKgorCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcKKwkJCSAgICJwcmVhbGxvY2F0ZSBwbGF5YmFjayBzdWJzdHJlYW06IGVycj0lZFxuIiwgZXJyKTsKKwkJKi8KIAl9CiAKIAlmb3IgKHN1YnN0cmVhbSA9IHBjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbTsgCkBAIC02NDIsNyArNjg1LDEwIEBACiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuZF9kbWFfcGNpX2RhdGEoZW11LT5wY2kpLCAKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU1MzYgLSA2NCwgNjU1MzYgLSA2NCkpIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCS8vc25kX3ByaW50aygicHJlYWxsb2NhdGUgY2FwdHVyZSBzdWJzdHJlYW06IGVycj0lZFxuIiwgZXJyKTsKKwkJLyoKKwkJc25kX3ByaW50ayhLRVJOX0RFQlVHCisJCQkgICAicHJlYWxsb2NhdGUgY2FwdHVyZSBzdWJzdHJlYW06IGVycj0lZFxuIiwgZXJyKTsKKwkJKi8KIAl9CiAgIAogCWlmIChycGNtKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvdm9pY2UuYyBiL3NvdW5kL3BjaS9lbXUxMGsxL3ZvaWNlLmMKaW5kZXggZDczMDBhMS4uMjBiOGRhMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvdm9pY2UuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS92b2ljZS5jCkBAIC01Myw3ICs1MywxMCBAQAogCSpydm9pY2UgPSBOVUxMOwogCWZpcnN0X3ZvaWNlID0gbGFzdF92b2ljZSA9IDA7CiAJZm9yIChpID0gZW11LT5uZXh0X2ZyZWVfdm9pY2UsIGogPSAwOyBqIDwgTlVNX0cgOyBpICs9IG51bWJlciwgaiArPSBudW1iZXIpIHsKLQkJLy8gcHJpbnRrKCJpICVkIGogJWQgbmV4dCBmcmVlICVkIVxuIiwgaSwgaiwgZW11LT5uZXh0X2ZyZWVfdm9pY2UpOworCQkvKgorCQlwcmludGsoS0VSTl9ERUJVRyAiaSAlZCBqICVkIG5leHQgZnJlZSAlZCFcbiIsCisJCSAgICAgICBpLCBqLCBlbXUtPm5leHRfZnJlZV92b2ljZSk7CisJCSovCiAJCWkgJT0gTlVNX0c7CiAKIAkJLyogc3RlcmVvIHZvaWNlcyBtdXN0IGJlIGV2ZW4vb2RkICovCkBAIC03MSw3ICs3NCw3IEBACiAJCQl9CiAJCX0KIAkJaWYgKCFza2lwKSB7Ci0JCQkvLyBwcmludGsoImFsbG9jYXRlZCB2b2ljZSAlZFxuIiwgaSk7CisJCQkvKiBwcmludGsoS0VSTl9ERUJVRyAiYWxsb2NhdGVkIHZvaWNlICVkXG4iLCBpKTsgKi8KIAkJCWZpcnN0X3ZvaWNlID0gaTsKIAkJCWxhc3Rfdm9pY2UgPSAoaSArIG51bWJlcikgJSBOVU1fRzsKIAkJCWVtdS0+bmV4dF9mcmVlX3ZvaWNlID0gbGFzdF92b2ljZTsKQEAgLTg0LDcgKzg3LDEwIEBACiAJCiAJZm9yIChpID0gMDsgaSA8IG51bWJlcjsgaSsrKSB7CiAJCXZvaWNlID0gJmVtdS0+dm9pY2VzWyhmaXJzdF92b2ljZSArIGkpICUgTlVNX0ddOwotCQkvLyBwcmludGsoInZvaWNlIGFsbG9jIC0gJWksICVpIG9mICVpXG4iLCB2b2ljZS0+bnVtYmVyLCBpZHgtZmlyc3Rfdm9pY2UrMSwgbnVtYmVyKTsKKwkJLyoKKwkJcHJpbnRrKGtFUk5fREVCVUcgInZvaWNlIGFsbG9jIC0gJWksICVpIG9mICVpXG4iLAorCQkgICAgICAgdm9pY2UtPm51bWJlciwgaWR4LWZpcnN0X3ZvaWNlKzEsIG51bWJlcik7CisJCSovCiAJCXZvaWNlLT51c2UgPSAxOwogCQlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBFTVUxMEsxX1BDTToKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbnMxMzcwLmMgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCmluZGV4IDliZjk1MzYuLjE4ZjRkMWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbnMxMzcwLmMKKysrIGIvc291bmQvcGNpL2VuczEzNzAuYwpAQCAtNTg0LDcgKzU4NCw4IEBACiAJdW5zaWduZWQgbG9uZyBlbmRfdGltZSA9IGppZmZpZXMgKyBIWiAvIDEwOwogCiAjaWYgMAotCXByaW50aygiQ09ERUMgV1JJVEU6IHJlZyA9IDB4JXgsIHZhbCA9IDB4JXggKDB4JXgpLCBjcmVnID0gMHgleFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiQ09ERUMgV1JJVEU6IHJlZyA9IDB4JXgsIHZhbCA9IDB4JXggKDB4JXgpLCBjcmVnID0gMHgleFxuIiwKIAkgICAgICAgcmVnLCB2YWwsIEVTXzEzNzBfQ09ERUNfV1JJVEUocmVnLCB2YWwpLCBFU19SRUcoZW5zb25pcSwgMTM3MF9DT0RFQykpOwogI2VuZGlmCiAJZG8gewpAQCAtMjQwOSw5ICsyNDEwLDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoKGVyciA9IHNuZF9lbnNvbmlxX2NyZWF0ZShjYXJkLCBwY2ksICZlbnNvbmlxKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTM4LmMgYi9zb3VuZC9wY2kvZXMxOTM4LmMKaW5kZXggNGNkOWExZmEuLmRkNjNiMTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5MzguYworKysgYi9zb3VuZC9wY2kvZXMxOTM4LmMKQEAgLTE2NzMsMTggKzE2NzMsMjIgQEAKIAogCXN0YXR1cyA9IGluYihTTElPX1JFRyhjaGlwLCBJUlFDT05UUk9MKSk7CiAjaWYgMAotCXByaW50aygiRXMxOTM4ZGVidWcgLSBpbnRlcnJ1cHQgc3RhdHVzOiA9MHgleFxuIiwgc3RhdHVzKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiRXMxOTM4ZGVidWcgLSBpbnRlcnJ1cHQgc3RhdHVzOiA9MHgleFxuIiwgc3RhdHVzKTsKICNlbmRpZgogCQogCS8qIEFVRElPIDEgKi8KIAlpZiAoc3RhdHVzICYgMHgxMCkgewogI2lmIDAKLSAgICAgICAgICAgICAgICBwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAxIGludGVycnVwdFxuIik7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgY291bnQ6ICV1XG4iLAorICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgaW50ZXJydXB0XG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcKKwkJICAgICAgICJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBjb3VudDogJXVcbiIsCiAJCSAgICAgICBpbncoU0xETV9SRUcoY2hpcCwgRE1BQ09VTlQpKSk7Ci0JCXByaW50aygiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgYmFzZTogJXVcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgYmFzZTogJXVcbiIsCiAJCSAgICAgICBpbmwoU0xETV9SRUcoY2hpcCwgRE1BQUREUikpKTsKLQkJcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMSBETUFDIERNQSBzdGF0dXM6IDB4JXhcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDEgRE1BQyBETUEgc3RhdHVzOiAweCV4XG4iLAogCQkgICAgICAgaW5sKFNMRE1fUkVHKGNoaXAsIERNQVNUQVRVUykpKTsKICNlbmRpZgogCQkvKiBjbGVhciBpcnEgKi8KQEAgLTE2OTksMTAgKzE3MDMsMTMgQEAKIAkvKiBBVURJTyAyICovCiAJaWYgKHN0YXR1cyAmIDB4MjApIHsKICNpZiAwCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJFczE5MzhkZWJ1ZyAtIEFVRElPIGNoYW5uZWwgMiBpbnRlcnJ1cHRcbiIpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIERNQUMgRE1BIGNvdW50OiAldVxuIiwKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIGludGVycnVwdFxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiRXMxOTM4ZGVidWcgLSBBVURJTyBjaGFubmVsIDIgRE1BQyBETUEgY291bnQ6ICV1XG4iLAogCQkgICAgICAgaW53KFNMSU9fUkVHKGNoaXAsIEFVRElPMkRNQUNPVU5UKSkpOwotCQlwcmludGsoIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIERNQUMgRE1BIGJhc2U6ICV1XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRworCQkgICAgICAgIkVzMTkzOGRlYnVnIC0gQVVESU8gY2hhbm5lbCAyIERNQUMgRE1BIGJhc2U6ICV1XG4iLAogCQkgICAgICAgaW5sKFNMSU9fUkVHKGNoaXAsIEFVRElPMkRNQUFERFIpKSk7CiAKICNlbmRpZgpAQCAtMTc5OSw5ICsxODA2LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJZm9yIChpZHggPSAwOyBpZHggPCA1OyBpZHgrKykgewogCQlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgaWR4KSA9PSAwIHx8CiAJCSAgICAhKHBjaV9yZXNvdXJjZV9mbGFncyhwY2ksIGlkeCkgJiBJT1JFU09VUkNFX0lPKSkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTk2OC5jIGIvc291bmQvcGNpL2VzMTk2OC5jCmluZGV4IGU5YzM3OTQuLmRjOTdlODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5NjguYworKysgYi9zb3VuZC9wY2kvZXMxOTY4LmMKQEAgLTI2NDUsOSArMjY0NSw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAgICAgICAgICAgICAgICAgCiAJaWYgKHRvdGFsX2J1ZnNpemVbZGV2XSA8IDEyOCkKIAkJdG90YWxfYnVmc2l6ZVtkZXZdID0gMTI4OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ZtODAxLmMgYi9zb3VuZC9wY2kvZm04MDEuYwppbmRleCBjMTI5ZjllLi42MGNkYjllIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZm04MDEuYworKysgYi9zb3VuZC9wY2kvZm04MDEuYwpAQCAtMTQ2OCw5ICsxNDY4LDkgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCk7Ci0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJaWYgKChlcnIgPSBzbmRfZm04MDFfY3JlYXRlKGNhcmQsIHBjaSwgdGVhNTc1eF90dW5lcltkZXZdLCAmY2hpcCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5jCmluZGV4IDk2MGZkNzkuLjRkZTViYWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmMKQEAgLTEzOCw2ICsxMzgsNyBAQAogCiAJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGJlZXAtPmRldik7CiAJCWtmcmVlKGJlZXApOworCQljb2RlYy0+YmVlcCA9IE5VTEw7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9kZXRhY2hfYmVlcF9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oIGIvc291bmQvcGNpL2hkYS9oZGFfYmVlcC5oCmluZGV4IGI5Njc5ZjAuLjUxYmY2YTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2JlZXAuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9iZWVwLmgKQEAgLTM5LDcgKzM5LDcgQEAKIGludCBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaW50IG5pZCk7CiB2b2lkIHNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKICNlbHNlCi0jZGVmaW5lIHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKC4uLikKKyNkZWZpbmUgc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoLi4uKQkJMAogI2RlZmluZSBzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZSguLi4pCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggZDAzZjk5Mi4uYTRlNWU1OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC02NDcsOSArNjQ3LDkgQEAKIAogCXRvdGFsX25vZGVzID0gc25kX2hkYV9nZXRfc3ViX25vZGVzKGNvZGVjLCBBQ19OT0RFX1JPT1QsICZuaWQpOwogCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9ub2RlczsgaSsrLCBuaWQrKykgewotCQl1bnNpZ25lZCBpbnQgZnVuYzsKLQkJZnVuYyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfRlVOQ1RJT05fVFlQRSk7Ci0JCXN3aXRjaCAoZnVuYyAmIDB4ZmYpIHsKKwkJY29kZWMtPmZ1bmN0aW9uX2lkID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsCisJCQkJCQlBQ19QQVJfRlVOQ1RJT05fVFlQRSkgJiAweGZmOworCQlzd2l0Y2ggKGNvZGVjLT5mdW5jdGlvbl9pZCkgewogCQljYXNlIEFDX0dSUF9BVURJT19GVU5DVElPTjoKIAkJCWNvZGVjLT5hZmcgPSBuaWQ7CiAJCQlicmVhazsKQEAgLTY4MiwxMSArNjgyLDE0MCBAQAogCXJldHVybiAwOwogfQogCisvKiByZWFkIGFsbCBwaW4gZGVmYXVsdCBjb25maWd1cmF0aW9ucyBhbmQgc2F2ZSBjb2RlYy0+aW5pdF9waW5zICovCitzdGF0aWMgaW50IHJlYWRfcGluX2RlZmF1bHRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWludCBpOworCWhkYV9uaWRfdCBuaWQgPSBjb2RlYy0+c3RhcnRfbmlkOworCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5udW1fbm9kZXM7IGkrKywgbmlkKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbjsKKwkJdW5zaWduZWQgaW50IHdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBuaWQpOworCQl1bnNpZ25lZCBpbnQgd2lkX3R5cGUgPSAod2NhcHMgJiBBQ19XQ0FQX1RZUEUpID4+CisJCQkJQUNfV0NBUF9UWVBFX1NISUZUOworCQlpZiAod2lkX3R5cGUgIT0gQUNfV0lEX1BJTikKKwkJCWNvbnRpbnVlOworCQlwaW4gPSBzbmRfYXJyYXlfbmV3KCZjb2RlYy0+aW5pdF9waW5zKTsKKwkJaWYgKCFwaW4pCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcGluLT5uaWQgPSBuaWQ7CisJCXBpbi0+Y2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGxvb2sgdXAgdGhlIGdpdmVuIHBpbiBjb25maWcgbGlzdCBhbmQgcmV0dXJuIHRoZSBpdGVtIG1hdGNoaW5nIHdpdGggTklEICovCitzdGF0aWMgc3RydWN0IGhkYV9waW5jZmcgKmxvb2tfdXBfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgc3RydWN0IHNuZF9hcnJheSAqYXJyYXksCisJCQkJCSBoZGFfbmlkX3QgbmlkKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBhcnJheS0+dXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfcGluY2ZnICpwaW4gPSBzbmRfYXJyYXlfZWxlbShhcnJheSwgaSk7CisJCWlmIChwaW4tPm5pZCA9PSBuaWQpCisJCQlyZXR1cm4gcGluOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworLyogd3JpdGUgYSBjb25maWcgdmFsdWUgZm9yIHRoZSBnaXZlbiBOSUQgKi8KK3N0YXRpYyB2b2lkIHNldF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgY2ZnKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18wICsgaSwKKwkJCQkgICAgY2ZnICYgMHhmZik7CisJCWNmZyA+Pj0gODsKKwl9Cit9CisKKy8qIHNldCB0aGUgY3VycmVudCBwaW4gY29uZmlnIHZhbHVlIGZvciB0aGUgZ2l2ZW4gTklELgorICogdGhlIHZhbHVlIGlzIGNhY2hlZCwgYW5kIHJlYWQgdmlhIHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZygpCisgKi8KK2ludCBzbmRfaGRhX2FkZF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfYXJyYXkgKmxpc3QsCisJCSAgICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2ZnKQoreworCXN0cnVjdCBoZGFfcGluY2ZnICpwaW47CisJdW5zaWduZWQgaW50IG9sZGNmZzsKKworCW9sZGNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKKwlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgbGlzdCwgbmlkKTsKKwlpZiAoIXBpbikgeworCQlwaW4gPSBzbmRfYXJyYXlfbmV3KGxpc3QpOworCQlpZiAoIXBpbikKKwkJCXJldHVybiAtRU5PTUVNOworCQlwaW4tPm5pZCA9IG5pZDsKKwl9CisJcGluLT5jZmcgPSBjZmc7CisKKwkvKiBjaGFuZ2Ugb25seSB3aGVuIG5lZWRlZDsgZS5nLiBpZiB0aGUgcGluY2ZnIGlzIGFscmVhZHkgcHJlc2VudAorCSAqIGluIHVzZXJfcGluc1tdLCBkb24ndCB3cml0ZSBpdAorCSAqLworCWNmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKKwlpZiAob2xkY2ZnICE9IGNmZykKKwkJc2V0X3BpbmNmZyhjb2RlYywgbmlkLCBjZmcpOworCXJldHVybiAwOworfQorCitpbnQgc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2ZnKQoreworCXJldHVybiBzbmRfaGRhX2FkZF9waW5jZmcoY29kZWMsICZjb2RlYy0+ZHJpdmVyX3BpbnMsIG5pZCwgY2ZnKTsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyk7CisKKy8qIGdldCB0aGUgY3VycmVudCBwaW4gY29uZmlnIHZhbHVlIG9mIHRoZSBnaXZlbiBwaW4gTklEICovCit1bnNpZ25lZCBpbnQgc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBoZGFfcGluY2ZnICpwaW47CisKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9IV0RFUAorCXBpbiA9IGxvb2tfdXBfcGluY2ZnKGNvZGVjLCAmY29kZWMtPnVzZXJfcGlucywgbmlkKTsKKwlpZiAocGluKQorCQlyZXR1cm4gcGluLT5jZmc7CisjZW5kaWYKKwlwaW4gPSBsb29rX3VwX3BpbmNmZyhjb2RlYywgJmNvZGVjLT5kcml2ZXJfcGlucywgbmlkKTsKKwlpZiAocGluKQorCQlyZXR1cm4gcGluLT5jZmc7CisJcGluID0gbG9va191cF9waW5jZmcoY29kZWMsICZjb2RlYy0+aW5pdF9waW5zLCBuaWQpOworCWlmIChwaW4pCisJCXJldHVybiBwaW4tPmNmZzsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyk7CisKKy8qIHJlc3RvcmUgYWxsIGN1cnJlbnQgcGluIGNvbmZpZ3MgKi8KK3N0YXRpYyB2b2lkIHJlc3RvcmVfcGluY2ZncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPmluaXRfcGlucy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9waW5jZmcgKnBpbiA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aW5pdF9waW5zLCBpKTsKKwkJc2V0X3BpbmNmZyhjb2RlYywgcGluLT5uaWQsCisJCQkgICBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHBpbi0+bmlkKSk7CisJfQorfQogCiBzdGF0aWMgdm9pZCBpbml0X2hkYV9jYWNoZShzdHJ1Y3QgaGRhX2NhY2hlX3JlYyAqY2FjaGUsCiAJCQkgICB1bnNpZ25lZCBpbnQgcmVjb3JkX3NpemUpOwogc3RhdGljIHZvaWQgZnJlZV9oZGFfY2FjaGUoc3RydWN0IGhkYV9jYWNoZV9yZWMgKmNhY2hlKTsKIAorLyogcmVzdG9yZSB0aGUgaW5pdGlhbCBwaW4gY2ZncyBhbmQgcmVsZWFzZSBhbGwgcGluY2ZnIGxpc3RzICovCitzdGF0aWMgdm9pZCByZXN0b3JlX2luaXRfcGluY2ZncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwkvKiBmaXJzdCBmcmVlIGRyaXZlcl9waW5zIGFuZCB1c2VyX3BpbnMsIHRoZW4gY2FsbCByZXN0b3JlX3BpbmNmZworCSAqIHNvIHRoYXQgb25seSB0aGUgdmFsdWVzIGluIGluaXRfcGlucyBhcmUgcmVzdG9yZWQKKwkgKi8KKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmRyaXZlcl9waW5zKTsKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9IV0RFUAorCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+dXNlcl9waW5zKTsKKyNlbmRpZgorCXJlc3RvcmVfcGluY2Zncyhjb2RlYyk7CisJc25kX2FycmF5X2ZyZWUoJmNvZGVjLT5pbml0X3BpbnMpOworfQorCiAvKgogICogY29kZWMgZGVzdHJ1Y3RvcgogICovCkBAIC02OTQsNiArODIzLDcgQEAKIHsKIAlpZiAoIWNvZGVjKQogCQlyZXR1cm47CisJcmVzdG9yZV9pbml0X3BpbmNmZ3MoY29kZWMpOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKIAljYW5jZWxfZGVsYXllZF93b3JrKCZjb2RlYy0+cG93ZXJfd29yayk7CiAJZmx1c2hfd29ya3F1ZXVlKGNvZGVjLT5idXMtPndvcmtxKTsKQEAgLTcxMiw2ICs4NDIsOSBAQAogCWtmcmVlKGNvZGVjKTsKIH0KIAorc3RhdGljIHZvaWQgaGRhX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IGZnLAorCQkJCXVuc2lnbmVkIGludCBwb3dlcl9zdGF0ZSk7CisKIC8qKgogICogc25kX2hkYV9jb2RlY19uZXcgLSBjcmVhdGUgYSBIREEgY29kZWMKICAqIEBidXM6IHRoZSBidXMgdG8gYXNzaWduCkBAIC03NTEsNiArODg0LDggQEAKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmFtcF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfYW1wX2luZm8pKTsKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmNtZF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfY2FjaGVfaGVhZCkpOwogCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+bWl4ZXJzLCBzaXplb2Yoc3RydWN0IHNuZF9rY29udHJvbCAqKSwgMzIpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+aW5pdF9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CisJc25kX2FycmF5X2luaXQoJmNvZGVjLT5kcml2ZXJfcGlucywgc2l6ZW9mKHN0cnVjdCBoZGFfcGluY2ZnKSwgMTYpOwogCWlmIChjb2RlYy0+YnVzLT5tb2RlbG5hbWUpIHsKIAkJY29kZWMtPm1vZGVsbmFtZSA9IGtzdHJkdXAoY29kZWMtPmJ1cy0+bW9kZWxuYW1lLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFjb2RlYy0+bW9kZWxuYW1lKSB7CkBAIC03ODcsMTUgKzkyMiwxOCBAQAogCXNldHVwX2ZnX25vZGVzKGNvZGVjKTsKIAlpZiAoIWNvZGVjLT5hZmcgJiYgIWNvZGVjLT5tZmcpIHsKIAkJc25kX3ByaW50ZGQoImhkYV9jb2RlYzogbm8gQUZHIG9yIE1GRyBub2RlIGZvdW5kXG4iKTsKLQkJc25kX2hkYV9jb2RlY19mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyb3I7CiAJfQogCi0JaWYgKHJlYWRfd2lkZ2V0X2NhcHMoY29kZWMsIGNvZGVjLT5hZmcgPyBjb2RlYy0+YWZnIDogY29kZWMtPm1mZykgPCAwKSB7CisJZXJyID0gcmVhZF93aWRnZXRfY2Fwcyhjb2RlYywgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnKTsKKwlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGNhbm5vdCBtYWxsb2NcbiIpOwotCQlzbmRfaGRhX2NvZGVjX2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBlcnJvcjsKIAl9CisJZXJyID0gcmVhZF9waW5fZGVmYXVsdHMoY29kZWMpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOwogCiAJaWYgKCFjb2RlYy0+c3Vic3lzdGVtX2lkKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmc7CkBAIC04MDYsMTIgKzk0NCwxNSBAQAogCWlmIChidXMtPm1vZGVsbmFtZSkKIAkJY29kZWMtPm1vZGVsbmFtZSA9IGtzdHJkdXAoYnVzLT5tb2RlbG5hbWUsIEdGUF9LRVJORUwpOwogCisJLyogcG93ZXItdXAgYWxsIGJlZm9yZSBpbml0aWFsaXphdGlvbiAqLworCWhkYV9zZXRfcG93ZXJfc3RhdGUoY29kZWMsCisJCQkgICAgY29kZWMtPmFmZyA/IGNvZGVjLT5hZmcgOiBjb2RlYy0+bWZnLAorCQkJICAgIEFDX1BXUlNUX0QwKTsKKwogCWlmIChkb19pbml0KSB7CiAJCWVyciA9IHNuZF9oZGFfY29kZWNfY29uZmlndXJlKGNvZGVjKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9oZGFfY29kZWNfZnJlZShjb2RlYyk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJvcjsKIAl9CiAJc25kX2hkYV9jb2RlY19wcm9jX25ldyhjb2RlYyk7CiAKQEAgLTgyNCw2ICs5NjUsMTAgQEAKIAlpZiAoY29kZWNwKQogCQkqY29kZWNwID0gY29kZWM7CiAJcmV0dXJuIDA7CisKKyBlcnJvcjoKKwlzbmRfaGRhX2NvZGVjX2ZyZWUoY29kZWMpOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX2NvZGVjX25ldyk7CiAKQEAgLTkwNyw2ICsxMDUyLDcgQEAKIAogLyogRklYTUU6IG1vcmUgYmV0dGVyIGhhc2gga2V5PyAqLwogI2RlZmluZSBIREFfSEFTSF9LRVkobmlkLGRpcixpZHgpICh1MzIpKChuaWQpICsgKChpZHgpIDw8IDE2KSArICgoZGlyKSA8PCAyNCkpCisjZGVmaW5lIEhEQV9IQVNIX1BJTkNBUF9LRVkobmlkKSAodTMyKSgobmlkKSArICgweDAyIDw8IDI0KSkKICNkZWZpbmUgSU5GT19BTVBfQ0FQUwkoMTw8MCkKICNkZWZpbmUgSU5GT19BTVBfVk9MKGNoKQkoMSA8PCAoMSArIChjaCkpKQogCkBAIC05OTcsNiArMTE0MywyMSBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9vdmVycmlkZV9hbXBfY2Fwcyk7CiAKK3UzMiBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBoZGFfYW1wX2luZm8gKmluZm87CisKKwlpbmZvID0gZ2V0X2FsbG9jX2FtcF9oYXNoKGNvZGVjLCBIREFfSEFTSF9QSU5DQVBfS0VZKG5pZCkpOworCWlmICghaW5mbykKKwkJcmV0dXJuIDA7CisJaWYgKCFpbmZvLT5oZWFkLnZhbCkgeworCQlpbmZvLT5hbXBfY2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUElOX0NBUCk7CisJCWluZm8tPmhlYWQudmFsIHw9IElORk9fQU1QX0NBUFM7CisJfQorCXJldHVybiBpbmZvLT5hbXBfY2FwczsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfcXVlcnlfcGluX2NhcHMpOworCiAvKgogICogcmVhZCB0aGUgY3VycmVudCB2b2x1bWUgdG8gaW5mbwogICogaWYgdGhlIGNhY2hlIGV4aXN0cywgcmVhZCB0aGUgY2FjaGUgdmFsdWUuCkBAIC0xMTIwLDYgKzEyODEsNyBAQAogCXUxNiBuaWQgPSBnZXRfYW1wX25pZChrY29udHJvbCk7CiAJdTggY2hzID0gZ2V0X2FtcF9jaGFubmVscyhrY29udHJvbCk7CiAJaW50IGRpciA9IGdldF9hbXBfZGlyZWN0aW9uKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgb2ZzID0gZ2V0X2FtcF9vZmZzZXQoa2NvbnRyb2wpOwogCXUzMiBjYXBzOwogCiAJY2FwcyA9IHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBuaWQsIGRpcik7CkBAIC0xMTMxLDYgKzEyOTMsOCBAQAogCQkgICAgICAga2NvbnRyb2wtPmlkLm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJaWYgKG9mcyA8IGNhcHMpCisJCWNhcHMgLT0gb2ZzOwogCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOwogCXVpbmZvLT5jb3VudCA9IGNocyA9PSAzID8gMiA6IDE7CiAJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKQEAgLTExMzksNiArMTMwMywzMiBAQAogfQogRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2luZm8pOwogCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CityZWFkX2FtcF92YWx1ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkgICAgICAgaW50IGNoLCBpbnQgZGlyLCBpbnQgaWR4LCB1bnNpZ25lZCBpbnQgb2ZzKQoreworCXVuc2lnbmVkIGludCB2YWw7CisJdmFsID0gc25kX2hkYV9jb2RlY19hbXBfcmVhZChjb2RlYywgbmlkLCBjaCwgZGlyLCBpZHgpOworCXZhbCAmPSBIREFfQU1QX1ZPTE1BU0s7CisJaWYgKHZhbCA+PSBvZnMpCisJCXZhbCAtPSBvZnM7CisJZWxzZQorCQl2YWwgPSAwOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit1cGRhdGVfYW1wX3ZhbHVlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkgaW50IGNoLCBpbnQgZGlyLCBpbnQgaWR4LCB1bnNpZ25lZCBpbnQgb2ZzLAorCQkgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlpZiAodmFsID4gMCkKKwkJdmFsICs9IG9mczsKKwlyZXR1cm4gc25kX2hkYV9jb2RlY19hbXBfdXBkYXRlKGNvZGVjLCBuaWQsIGNoLCBkaXIsIGlkeCwKKwkJCQkJSERBX0FNUF9WT0xNQVNLLCB2YWwpOworfQorCiBpbnQgc25kX2hkYV9taXhlcl9hbXBfdm9sdW1lX2dldChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7CkBAIC0xMTQ3LDE0ICsxMzM3LDEzIEBACiAJaW50IGNocyA9IGdldF9hbXBfY2hhbm5lbHMoa2NvbnRyb2wpOwogCWludCBkaXIgPSBnZXRfYW1wX2RpcmVjdGlvbihrY29udHJvbCk7CiAJaW50IGlkeCA9IGdldF9hbXBfaW5kZXgoa2NvbnRyb2wpOworCXVuc2lnbmVkIGludCBvZnMgPSBnZXRfYW1wX29mZnNldChrY29udHJvbCk7CiAJbG9uZyAqdmFscCA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlOwogCiAJaWYgKGNocyAmIDEpCi0JCSp2YWxwKysgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDAsIGRpciwgaWR4KQotCQkJJiBIREFfQU1QX1ZPTE1BU0s7CisJCSp2YWxwKysgPSByZWFkX2FtcF92YWx1ZShjb2RlYywgbmlkLCAwLCBkaXIsIGlkeCwgb2ZzKTsKIAlpZiAoY2hzICYgMikKLQkJKnZhbHAgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCBuaWQsIDEsIGRpciwgaWR4KQotCQkJJiBIREFfQU1QX1ZPTE1BU0s7CisJCSp2YWxwID0gcmVhZF9hbXBfdmFsdWUoY29kZWMsIG5pZCwgMSwgZGlyLCBpZHgsIG9mcyk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRhX21peGVyX2FtcF92b2x1bWVfZ2V0KTsKQEAgLTExNjcsMTggKzEzNTYsMTcgQEAKIAlpbnQgY2hzID0gZ2V0X2FtcF9jaGFubmVscyhrY29udHJvbCk7CiAJaW50IGRpciA9IGdldF9hbXBfZGlyZWN0aW9uKGtjb250cm9sKTsKIAlpbnQgaWR4ID0gZ2V0X2FtcF9pbmRleChrY29udHJvbCk7CisJdW5zaWduZWQgaW50IG9mcyA9IGdldF9hbXBfb2Zmc2V0KGtjb250cm9sKTsKIAlsb25nICp2YWxwID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWU7CiAJaW50IGNoYW5nZSA9IDA7CiAKIAlzbmRfaGRhX3Bvd2VyX3VwKGNvZGVjKTsKIAlpZiAoY2hzICYgMSkgewotCQljaGFuZ2UgPSBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIG5pZCwgMCwgZGlyLCBpZHgsCi0JCQkJCQkgIDB4N2YsICp2YWxwKTsKKwkJY2hhbmdlID0gdXBkYXRlX2FtcF92YWx1ZShjb2RlYywgbmlkLCAwLCBkaXIsIGlkeCwgb2ZzLCAqdmFscCk7CiAJCXZhbHArKzsKIAl9CiAJaWYgKGNocyAmIDIpCi0JCWNoYW5nZSB8PSBzbmRfaGRhX2NvZGVjX2FtcF91cGRhdGUoY29kZWMsIG5pZCwgMSwgZGlyLCBpZHgsCi0JCQkJCQkgICAweDdmLCAqdmFscCk7CisJCWNoYW5nZSB8PSB1cGRhdGVfYW1wX3ZhbHVlKGNvZGVjLCBuaWQsIDEsIGRpciwgaWR4LCBvZnMsICp2YWxwKTsKIAlzbmRfaGRhX3Bvd2VyX2Rvd24oY29kZWMpOwogCXJldHVybiBjaGFuZ2U7CiB9CkBAIC0xMTkwLDYgKzEzNzgsNyBAQAogCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwogCWhkYV9uaWRfdCBuaWQgPSBnZXRfYW1wX25pZChrY29udHJvbCk7CiAJaW50IGRpciA9IGdldF9hbXBfZGlyZWN0aW9uKGtjb250cm9sKTsKKwl1bnNpZ25lZCBpbnQgb2ZzID0gZ2V0X2FtcF9vZmZzZXQoa2NvbnRyb2wpOwogCXUzMiBjYXBzLCB2YWwxLCB2YWwyOwogCiAJaWYgKHNpemUgPCA0ICogc2l6ZW9mKHVuc2lnbmVkIGludCkpCkBAIC0xMTk4LDYgKzEzODcsNyBAQAogCXZhbDIgPSAoY2FwcyAmIEFDX0FNUENBUF9TVEVQX1NJWkUpID4+IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQ7CiAJdmFsMiA9ICh2YWwyICsgMSkgKiAyNTsKIAl2YWwxID0gLSgoY2FwcyAmIEFDX0FNUENBUF9PRkZTRVQpID4+IEFDX0FNUENBUF9PRkZTRVRfU0hJRlQpOworCXZhbDEgKz0gb2ZzOwogCXZhbDEgPSAoKGludCl2YWwxKSAqICgoaW50KXZhbDIpOwogCWlmIChwdXRfdXNlcihTTkRSVl9DVExfVExWVF9EQl9TQ0FMRSwgX3RsdikpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTI2OCw3ICsxNDU4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfY3RsX2FkZCk7CiAKLSNpZmRlZiBDT05GSUdfU05EX0hEQV9SRUNPTkZJRwogLyogQ2xlYXIgYWxsIGNvbnRyb2xzIGFzc2lnbmVkIHRvIHRoZSBnaXZlbiBjb2RlYyAqLwogdm9pZCBzbmRfaGRhX2N0bHNfY2xlYXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xMjc5LDkgKzE0NjgsNTIgQEAKIAlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPm1peGVycyk7CiB9CiAKLXZvaWQgc25kX2hkYV9jb2RlY19yZXNldChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKKy8qIHBzZXVkbyBkZXZpY2UgbG9ja2luZworICogdG9nZ2xlIGNhcmQtPnNodXRkb3duIHRvIGFsbG93L2Rpc2FsbG93IHRoZSBkZXZpY2UgYWNjZXNzIChhcyBhIGhhY2spCisgKi8KK3N0YXRpYyBpbnQgaGRhX2xvY2tfZGV2aWNlcyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpCiB7Ci0JaW50IGk7CisJc3Bpbl9sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKKwlpZiAoY2FyZC0+c2h1dGRvd24pIHsKKwkJc3Bpbl91bmxvY2soJmNhcmQtPmZpbGVzX2xvY2spOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY2FyZC0+c2h1dGRvd24gPSAxOworCXNwaW5fdW5sb2NrKCZjYXJkLT5maWxlc19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGRhX3VubG9ja19kZXZpY2VzKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzcGluX2xvY2soJmNhcmQtPmZpbGVzX2xvY2spOworCWNhcmQtPnNodXRkb3duID0gMDsKKwlzcGluX3VubG9jaygmY2FyZC0+ZmlsZXNfbG9jayk7Cit9CisKK2ludCBzbmRfaGRhX2NvZGVjX3Jlc2V0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGNvZGVjLT5idXMtPmNhcmQ7CisJaW50IGksIHBjbTsKKworCWlmIChoZGFfbG9ja19kZXZpY2VzKGNhcmQpIDwgMCkKKwkJcmV0dXJuIC1FQlVTWTsKKwkvKiBjaGVjayB3aGV0aGVyIHRoZSBjb2RlYyBpc24ndCB1c2VkIGJ5IGFueSBtaXhlciBvciBQQ00gc3RyZWFtcyAqLworCWlmICghbGlzdF9lbXB0eSgmY2FyZC0+Y3RsX2ZpbGVzKSkgeworCQloZGFfdW5sb2NrX2RldmljZXMoY2FyZCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWZvciAocGNtID0gMDsgcGNtIDwgY29kZWMtPm51bV9wY21zOyBwY20rKykgeworCQlzdHJ1Y3QgaGRhX3BjbSAqY3BjbSA9ICZjb2RlYy0+cGNtX2luZm9bcGNtXTsKKwkJaWYgKCFjcGNtLT5wY20pCisJCQljb250aW51ZTsKKwkJaWYgKGNwY20tPnBjbS0+c3RyZWFtc1swXS5zdWJzdHJlYW1fb3BlbmVkIHx8CisJCSAgICBjcGNtLT5wY20tPnN0cmVhbXNbMV0uc3Vic3RyZWFtX29wZW5lZCkgeworCQkJaGRhX3VubG9ja19kZXZpY2VzKGNhcmQpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKworCS8qIE9LLCBsZXQgaXQgZnJlZSAqLwogCiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNvZGVjLT5wb3dlcl93b3JrKTsKQEAgLTEyOTEsOCArMTUyMyw3IEBACiAJLyogcmVsYXNlIFBDTXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm51bV9wY21zOyBpKyspIHsKIAkJaWYgKGNvZGVjLT5wY21faW5mb1tpXS5wY20pIHsKLQkJCXNuZF9kZXZpY2VfZnJlZShjb2RlYy0+YnVzLT5jYXJkLAotCQkJCQljb2RlYy0+cGNtX2luZm9baV0ucGNtKTsKKwkJCXNuZF9kZXZpY2VfZnJlZShjYXJkLCBjb2RlYy0+cGNtX2luZm9baV0ucGNtKTsKIAkJCWNsZWFyX2JpdChjb2RlYy0+cGNtX2luZm9baV0uZGV2aWNlLAogCQkJCSAgY29kZWMtPmJ1cy0+cGNtX2Rldl9iaXRzKTsKIAkJfQpAQCAtMTMwNSwxMyArMTUzNiwyMiBAQAogCWZyZWVfaGRhX2NhY2hlKCZjb2RlYy0+Y21kX2NhY2hlKTsKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmFtcF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfYW1wX2luZm8pKTsKIAlpbml0X2hkYV9jYWNoZSgmY29kZWMtPmNtZF9jYWNoZSwgc2l6ZW9mKHN0cnVjdCBoZGFfY2FjaGVfaGVhZCkpOworCS8qIGZyZWUgb25seSBkcml2ZXJfcGlucyBzbyB0aGF0IGluaXRfcGlucyArIHVzZXJfcGlucyBhcmUgcmVzdG9yZWQgKi8KKwlzbmRfYXJyYXlfZnJlZSgmY29kZWMtPmRyaXZlcl9waW5zKTsKKwlyZXN0b3JlX3BpbmNmZ3MoY29kZWMpOwogCWNvZGVjLT5udW1fcGNtcyA9IDA7CiAJY29kZWMtPnBjbV9pbmZvID0gTlVMTDsKIAljb2RlYy0+cHJlc2V0ID0gTlVMTDsKKwltZW1zZXQoJmNvZGVjLT5wYXRjaF9vcHMsIDAsIHNpemVvZihjb2RlYy0+cGF0Y2hfb3BzKSk7CisJY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gTlVMTDsKKwljb2RlYy0+c3BkaWZfc3RhdHVzX3Jlc2V0ID0gMDsKIAltb2R1bGVfcHV0KGNvZGVjLT5vd25lcik7CiAJY29kZWMtPm93bmVyID0gTlVMTDsKKworCS8qIGFsbG93IGRldmljZSBhY2Nlc3MgYWdhaW4gKi8KKwloZGFfdW5sb2NrX2RldmljZXMoY2FyZCk7CisJcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1NORF9IREFfUkVDT05GSUcgKi8KIAogLyogY3JlYXRlIGEgdmlydHVhbCBtYXN0ZXIgY29udHJvbCBhbmQgYWRkIHNsYXZlcyAqLwogaW50IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNoYXIgKm5hbWUsCkBAIC0xMzM2LDE1ICsxNTc2LDIwIEBACiAJCiAJZm9yIChzID0gc2xhdmVzOyAqczsgcysrKSB7CiAJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKnNjdGw7Ci0KLQkJc2N0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICpzKTsKLQkJaWYgKCFzY3RsKSB7Ci0JCQlzbmRfcHJpbnRkZCgiQ2Fubm90IGZpbmQgc2xhdmUgJXMsIHNraXBwZWRcbiIsICpzKTsKLQkJCWNvbnRpbnVlOworCQlpbnQgaSA9IDA7CisJCWZvciAoOzspIHsKKwkJCXNjdGwgPSBfc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgKnMsIGkpOworCQkJaWYgKCFzY3RsKSB7CisJCQkJaWYgKCFpKQorCQkJCQlzbmRfcHJpbnRkZCgiQ2Fubm90IGZpbmQgc2xhdmUgJXMsICIKKwkJCQkJCSAgICAic2tpcHBlZFxuIiwgKnMpOworCQkJCWJyZWFrOworCQkJfQorCQkJZXJyID0gc25kX2N0bF9hZGRfc2xhdmUoa2N0bCwgc2N0bCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJaSsrOwogCQl9Ci0JCWVyciA9IHNuZF9jdGxfYWRkX3NsYXZlKGtjdGwsIHNjdGwpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTk1NSw2ICsyMjAwLDggQEAKIAl9CiAJZm9yIChkaWdfbWl4ID0gZGlnX2luX2N0bHM7IGRpZ19taXgtPm5hbWU7IGRpZ19taXgrKykgewogCQlrY3RsID0gc25kX2N0bF9uZXcxKGRpZ19taXgsIGNvZGVjKTsKKwkJaWYgKCFrY3RsKQorCQkJcmV0dXJuIC1FTk9NRU07CiAJCWtjdGwtPnByaXZhdGVfdmFsdWUgPSBuaWQ7CiAJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywga2N0bCk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMjA3NCw4ICsyMzIxLDcgQEAKIAkJCQkgKiBkb24ndCBwb3dlciBkb3duIHRoZSB3aWRnZXQgaWYgaXQgY29udHJvbHMKIAkJCQkgKiBlYXBkIGFuZCBFQVBEX0JUTEVOQUJMRSBpcyBzZXQuCiAJCQkJICovCi0JCQkJcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsCi0JCQkJCQkJICAgIEFDX1BBUl9QSU5fQ0FQKTsKKwkJCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCQkJCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfRUFQRCkgewogCQkJCQlpbnQgZWFwZCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywKIAkJCQkJCW5pZCwgMCwKQEAgLTIxNDQsNiArMjM5MCw3IEBACiAJaGRhX3NldF9wb3dlcl9zdGF0ZShjb2RlYywKIAkJCSAgICBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcsCiAJCQkgICAgQUNfUFdSU1RfRDApOworCXJlc3RvcmVfcGluY2Zncyhjb2RlYyk7IC8qIHJlc3RvcmUgYWxsIGN1cnJlbnQgcGluIGNvbmZpZ3MgKi8KIAloZGFfZXhlY19pbml0X3ZlcmJzKGNvZGVjKTsKIAlpZiAoY29kZWMtPnBhdGNoX29wcy5yZXN1bWUpCiAJCWNvZGVjLT5wYXRjaF9vcHMucmVzdW1lKGNvZGVjKTsKQEAgLTIxNzEsOCArMjQxOCwxNiBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjb2RlYywgJmJ1cy0+Y29kZWNfbGlzdCwgbGlzdCkgewogCQlpbnQgZXJyID0gc25kX2hkYV9jb2RlY19idWlsZF9jb250cm9scyhjb2RlYyk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiBjYW5ub3QgYnVpbGQgY29udHJvbHMiCisJCQkgICAgICAgImZvciAjJWQgKGVycm9yICVkKVxuIiwgY29kZWMtPmFkZHIsIGVycik7IAorCQkJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiaGRhX2NvZGVjOiBjYW5ub3QgcmV2ZXJ0IGNvZGVjXG4iKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjE4MSwxOSArMjQzNiwxMiBAQAogaW50IHNuZF9oZGFfY29kZWNfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJaW50IGVyciA9IDA7Ci0JLyogZmFrZSBhcyBpZiBhbHJlYWR5IHBvd2VyZWQtb24gKi8KLQloZGFfa2VlcF9wb3dlcl9vbihjb2RlYyk7Ci0JLyogdGhlbiBmaXJlIHVwICovCi0JaGRhX3NldF9wb3dlcl9zdGF0ZShjb2RlYywKLQkJCSAgICBjb2RlYy0+YWZnID8gY29kZWMtPmFmZyA6IGNvZGVjLT5tZmcsCi0JCQkgICAgQUNfUFdSU1RfRDApOwogCWhkYV9leGVjX2luaXRfdmVyYnMoY29kZWMpOwogCS8qIGNvbnRpbnVlIHRvIGluaXRpYWxpemUuLi4gKi8KIAlpZiAoY29kZWMtPnBhdGNoX29wcy5pbml0KQogCQllcnIgPSBjb2RlYy0+cGF0Y2hfb3BzLmluaXQoY29kZWMpOwogCWlmICghZXJyICYmIGNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfY29udHJvbHMpCiAJCWVyciA9IGNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfY29udHJvbHMoY29kZWMpOwotCXNuZF9oZGFfcG93ZXJfZG93bihjb2RlYyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CkBAIC0yMzA2LDEyICsyNTU0LDExIEBACiBzdGF0aWMgaW50IHNuZF9oZGFfcXVlcnlfc3VwcG9ydGVkX3BjbShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCQl1MzIgKnJhdGVzcCwgdTY0ICpmb3JtYXRzcCwgdW5zaWduZWQgaW50ICpicHNwKQogewotCWludCBpOwotCXVuc2lnbmVkIGludCB2YWwsIHN0cmVhbXM7CisJdW5zaWduZWQgaW50IGksIHZhbCwgd2NhcHM7CiAKIAl2YWwgPSAwOwotCWlmIChuaWQgIT0gY29kZWMtPmFmZyAmJgotCSAgICAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9GT1JNQVRfT1ZSRCkpIHsKKwl3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKKwlpZiAobmlkICE9IGNvZGVjLT5hZmcgJiYgKHdjYXBzICYgQUNfV0NBUF9GT1JNQVRfT1ZSRCkpIHsKIAkJdmFsID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QQ00pOwogCQlpZiAodmFsID09IC0xKQogCQkJcmV0dXJuIC1FSU87CkBAIC0yMzI1LDE1ICsyNTcyLDIwIEBACiAJCQlpZiAodmFsICYgKDEgPDwgaSkpCiAJCQkJcmF0ZXMgfD0gcmF0ZV9iaXRzW2ldLmFsc2FfYml0czsKIAkJfQorCQlpZiAocmF0ZXMgPT0gMCkgeworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiaGRhX2NvZGVjOiByYXRlcyA9PSAwICIKKwkJCQkgICAiKG5pZD0weCV4LCB2YWw9MHgleCwgb3ZyZD0laSlcbiIsCisJCQkJCW5pZCwgdmFsLAorCQkJCQkod2NhcHMgJiBBQ19XQ0FQX0ZPUk1BVF9PVlJEKSA/IDEgOiAwKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJCSpyYXRlc3AgPSByYXRlczsKIAl9CiAKIAlpZiAoZm9ybWF0c3AgfHwgYnBzcCkgewogCQl1NjQgZm9ybWF0cyA9IDA7Ci0JCXVuc2lnbmVkIGludCBicHM7Ci0JCXVuc2lnbmVkIGludCB3Y2FwczsKKwkJdW5zaWduZWQgaW50IHN0cmVhbXMsIGJwczsKIAotCQl3Y2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKIAkJc3RyZWFtcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfU1RSRUFNKTsKIAkJaWYgKHN0cmVhbXMgPT0gLTEpCiAJCQlyZXR1cm4gLUVJTzsKQEAgLTIzODYsNiArMjYzOCwxNSBAQAogCQkJZm9ybWF0cyB8PSBTTkRSVl9QQ01fRk1UQklUX1U4OwogCQkJYnBzID0gODsKIAkJfQorCQlpZiAoZm9ybWF0cyA9PSAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGZvcm1hdHMgPT0gMCAiCisJCQkJICAgIihuaWQ9MHgleCwgdmFsPTB4JXgsIG92cmQ9JWksICIKKwkJCQkgICAic3RyZWFtcz0weCV4KVxuIiwKKwkJCQkJbmlkLCB2YWwsCisJCQkJCSh3Y2FwcyAmIEFDX1dDQVBfRk9STUFUX09WUkQpID8gMSA6IDAsCisJCQkJCXN0cmVhbXMpOworCQkJcmV0dXJuIC1FSU87CisJCX0KIAkJaWYgKGZvcm1hdHNwKQogCQkJKmZvcm1hdHNwID0gZm9ybWF0czsKIAkJaWYgKGJwc3ApCkBAIC0yNTAxLDEyICsyNzYyLDE2IEBACiBzdGF0aWMgaW50IHNldF9wY21fZGVmYXVsdF92YWx1ZXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJICBzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmluZm8pCiB7CisJaW50IGVycjsKKwogCS8qIHF1ZXJ5IHN1cHBvcnQgUENNIGluZm9ybWF0aW9uIGZyb20gdGhlIGdpdmVuIE5JRCAqLwogCWlmIChpbmZvLT5uaWQgJiYgKCFpbmZvLT5yYXRlcyB8fCAhaW5mby0+Zm9ybWF0cykpIHsKLQkJc25kX2hkYV9xdWVyeV9zdXBwb3J0ZWRfcGNtKGNvZGVjLCBpbmZvLT5uaWQsCisJCWVyciA9IHNuZF9oZGFfcXVlcnlfc3VwcG9ydGVkX3BjbShjb2RlYywgaW5mby0+bmlkLAogCQkJCWluZm8tPnJhdGVzID8gTlVMTCA6ICZpbmZvLT5yYXRlcywKIAkJCQlpbmZvLT5mb3JtYXRzID8gTlVMTCA6ICZpbmZvLT5mb3JtYXRzLAogCQkJCWluZm8tPm1heGJwcyA/IE5VTEwgOiAmaW5mby0+bWF4YnBzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoaW5mby0+b3BzLm9wZW4gPT0gTlVMTCkKIAkJaW5mby0+b3BzLm9wZW4gPSBoZGFfcGNtX2RlZmF1bHRfb3Blbl9jbG9zZTsKQEAgLTI1NDksMTMgKzI4MTQsMTAgQEAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXVkaW9faWR4KTsgaSsrKSB7CiAJCQlkZXYgPSBhdWRpb19pZHhbaV07CiAJCQlpZiAoIXRlc3RfYml0KGRldiwgYnVzLT5wY21fZGV2X2JpdHMpKQotCQkJCWJyZWFrOworCQkJCWdvdG8gb2s7CiAJCX0KLQkJaWYgKGkgPj0gQVJSQVlfU0laRShhdWRpb19pZHgpKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiVG9vIG1hbnkgYXVkaW8gZGV2aWNlc1xuIik7Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCQlicmVhazsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIlRvbyBtYW55IGF1ZGlvIGRldmljZXNcbiIpOworCQlyZXR1cm4gLUVBR0FJTjsKIAljYXNlIEhEQV9QQ01fVFlQRV9TUERJRjoKIAljYXNlIEhEQV9QQ01fVFlQRV9IRE1JOgogCWNhc2UgSERBX1BDTV9UWVBFX01PREVNOgpAQCAtMjU3MCw2ICsyODMyLDcgQEAKIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgUENNIHR5cGUgJWRcbiIsIHR5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Cisgb2s6CiAJc2V0X2JpdChkZXYsIGJ1cy0+cGNtX2Rldl9iaXRzKTsKIAlyZXR1cm4gZGV2OwogfQpAQCAtMjYwNiwyNCArMjg2OSwzNiBAQAogCQlpZiAoIWNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfcGNtcykKIAkJCXJldHVybiAwOwogCQllcnIgPSBjb2RlYy0+cGF0Y2hfb3BzLmJ1aWxkX3BjbXMoY29kZWMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCWlmIChlcnIgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IGJ1aWxkIFBDTXMiCisJCQkgICAgICAgImZvciAjJWQgKGVycm9yICVkKVxuIiwgY29kZWMtPmFkZHIsIGVycik7IAorCQkJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJCQlpZiAoZXJyIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUgorCQkJCSAgICAgICAiaGRhX2NvZGVjOiBjYW5ub3QgcmV2ZXJ0IGNvZGVjXG4iKTsKKwkJCQlyZXR1cm4gZXJyOworCQkJfQorCQl9CiAJfQogCWZvciAocGNtID0gMDsgcGNtIDwgY29kZWMtPm51bV9wY21zOyBwY20rKykgewogCQlzdHJ1Y3QgaGRhX3BjbSAqY3BjbSA9ICZjb2RlYy0+cGNtX2luZm9bcGNtXTsKIAkJaW50IGRldjsKIAogCQlpZiAoIWNwY20tPnN0cmVhbVswXS5zdWJzdHJlYW1zICYmICFjcGNtLT5zdHJlYW1bMV0uc3Vic3RyZWFtcykKLQkJCXJldHVybiAwOyAvKiBubyBzdWJzdHJlYW1zIGFzc2lnbmVkICovCisJCQljb250aW51ZTsgLyogbm8gc3Vic3RyZWFtcyBhc3NpZ25lZCAqLwogCiAJCWlmICghY3BjbS0+cGNtKSB7CiAJCQlkZXYgPSBnZXRfZW1wdHlfcGNtX2RldmljZShjb2RlYy0+YnVzLCBjcGNtLT5wY21fdHlwZSk7CiAJCQlpZiAoZGV2IDwgMCkKLQkJCQlyZXR1cm4gMDsKKwkJCQljb250aW51ZTsgLyogbm8gZmF0YWwgZXJyb3IgKi8KIAkJCWNwY20tPmRldmljZSA9IGRldjsKIAkJCWVyciA9IHNuZF9oZGFfYXR0YWNoX3BjbShjb2RlYywgY3BjbSk7Ci0JCQlpZiAoZXJyIDwgMCkKLQkJCQlyZXR1cm4gZXJyOworCQkJaWYgKGVyciA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IGF0dGFjaCAiCisJCQkJICAgICAgICJQQ00gc3RyZWFtICVkIGZvciBjb2RlYyAjJWRcbiIsCisJCQkJICAgICAgIGRldiwgY29kZWMtPmFkZHIpOworCQkJCWNvbnRpbnVlOyAvKiBubyBmYXRhbCBlcnJvciAqLworCQkJfQogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMzMyNCw4ICszNTk5LDcgQEAKIAkJaWYgKGlnbm9yZV9uaWRzICYmIGlzX2luX25pZF9saXN0KG5pZCwgaWdub3JlX25pZHMpKQogCQkJY29udGludWU7CiAKLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChkZWZfY29uZikgPT0gQUNfSkFDS19QT1JUX05PTkUpCiAJCQljb250aW51ZTsKIAkJbG9jID0gZ2V0X2RlZmNmZ19sb2NhdGlvbihkZWZfY29uZik7CkBAIC0zNDAxLDEwICszNjc1LDIyIEBACiAJCQljZmctPmlucHV0X3BpbnNbQVVUT19QSU5fQVVYXSA9IG5pZDsKIAkJCWJyZWFrOwogCQljYXNlIEFDX0pBQ0tfU1BESUZfT1VUOgotCQkJY2ZnLT5kaWdfb3V0X3BpbiA9IG5pZDsKKwkJY2FzZSBBQ19KQUNLX0RJR19PVEhFUl9PVVQ6CisJCQlpZiAoY2ZnLT5kaWdfb3V0cyA+PSBBUlJBWV9TSVpFKGNmZy0+ZGlnX291dF9waW5zKSkKKwkJCQljb250aW51ZTsKKwkJCWNmZy0+ZGlnX291dF9waW5zW2NmZy0+ZGlnX291dHNdID0gbmlkOworCQkJY2ZnLT5kaWdfb3V0X3R5cGVbY2ZnLT5kaWdfb3V0c10gPQorCQkJCShsb2MgPT0gQUNfSkFDS19MT0NfSERNSSkgPworCQkJCUhEQV9QQ01fVFlQRV9IRE1JIDogSERBX1BDTV9UWVBFX1NQRElGOworCQkJY2ZnLT5kaWdfb3V0cysrOwogCQkJYnJlYWs7CiAJCWNhc2UgQUNfSkFDS19TUERJRl9JTjoKKwkJY2FzZSBBQ19KQUNLX0RJR19PVEhFUl9JTjoKIAkJCWNmZy0+ZGlnX2luX3BpbiA9IG5pZDsKKwkJCWlmIChsb2MgPT0gQUNfSkFDS19MT0NfSERNSSkKKwkJCQljZmctPmRpZ19pbl90eXBlID0gSERBX1BDTV9UWVBFX0hETUk7CisJCQllbHNlCisJCQkJY2ZnLT5kaWdfaW5fdHlwZSA9IEhEQV9QQ01fVFlQRV9TUERJRjsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMzUxMCw2ICszNzk2LDkgQEAKIAkJICAgY2ZnLT5ocF9waW5zWzFdLCBjZmctPmhwX3BpbnNbMl0sCiAJCSAgIGNmZy0+aHBfcGluc1szXSwgY2ZnLT5ocF9waW5zWzRdKTsKIAlzbmRfcHJpbnRkKCIgICBtb25vOiBtb25vX291dD0weCV4XG4iLCBjZmctPm1vbm9fb3V0X3Bpbik7CisJaWYgKGNmZy0+ZGlnX291dHMpCisJCXNuZF9wcmludGQoIiAgIGRpZy1vdXQ9MHgleC8weCV4XG4iLAorCQkJICAgY2ZnLT5kaWdfb3V0X3BpbnNbMF0sIGNmZy0+ZGlnX291dF9waW5zWzFdKTsKIAlzbmRfcHJpbnRkKCIgICBpbnB1dHM6IG1pYz0weCV4LCBmbWljPTB4JXgsIGxpbmU9MHgleCwgZmxpbmU9MHgleCwiCiAJCSAgICIgY2Q9MHgleCwgYXV4PTB4JXhcbiIsCiAJCSAgIGNmZy0+aW5wdXRfcGluc1tBVVRPX1BJTl9NSUNdLApAQCAtMzUxOCw2ICszODA3LDggQEAKIAkJICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX0xJTkVdLAogCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fQ0RdLAogCQkgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fQVVYXSk7CisJaWYgKGNmZy0+ZGlnX2luX3BpbikKKwkJc25kX3ByaW50ZCgiICAgZGlnLWluPTB4JXhcbiIsIGNmZy0+ZGlnX2luX3Bpbik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5oCmluZGV4IDA5YTMzMmEuLjJmZGVjZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmgKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuaApAQCAtNzM5LDYgKzczOSw3IEBACiAJaGRhX25pZF90IG1mZzsJLyogTUZHIG5vZGUgaWQgKi8KIAogCS8qIGlkcyAqLworCXUzMiBmdW5jdGlvbl9pZDsKIAl1MzIgdmVuZG9yX2lkOwogCXUzMiBzdWJzeXN0ZW1faWQ7CiAJdTMyIHJldmlzaW9uX2lkOwpAQCAtNzc4LDExICs3NzksMTQgQEAKIAl1bnNpZ25lZCBzaG9ydCBzcGRpZl9jdGxzOwkvKiBTUERJRiBjb250cm9sIGJpdHMgKi8KIAl1bnNpZ25lZCBpbnQgc3BkaWZfaW5fZW5hYmxlOwkvKiBTUERJRiBpbnB1dCBlbmFibGU/ICovCiAJaGRhX25pZF90ICpzbGF2ZV9kaWdfb3V0czsgLyogb3B0aW9uYWwgZGlnaXRhbCBvdXQgc2xhdmUgd2lkZ2V0cyAqLworCXN0cnVjdCBzbmRfYXJyYXkgaW5pdF9waW5zOwkvKiBpbml0aWFsIChCSU9TKSBwaW4gY29uZmlndXJhdGlvbnMgKi8KKwlzdHJ1Y3Qgc25kX2FycmF5IGRyaXZlcl9waW5zOwkvKiBwaW4gY29uZmlncyBzZXQgYnkgY29kZWMgcGFyc2VyICovCiAKICNpZmRlZiBDT05GSUdfU05EX0hEQV9IV0RFUAogCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwOwkvKiBhc3NpZ25lZCBod2RlcCBkZXZpY2UgKi8KIAlzdHJ1Y3Qgc25kX2FycmF5IGluaXRfdmVyYnM7CS8qIGFkZGl0aW9uYWwgaW5pdCB2ZXJicyAqLwogCXN0cnVjdCBzbmRfYXJyYXkgaGludHM7CQkvKiBhZGRpdGlvbmFsIGhpbnRzICovCisJc3RydWN0IHNuZF9hcnJheSB1c2VyX3BpbnM7CS8qIGRlZmF1bHQgcGluIGNvbmZpZ3MgdG8gb3ZlcnJpZGUgKi8KICNlbmRpZgogCiAJLyogbWlzYyBmbGFncyAqLwpAQCAtNzkwLDYgKzc5NCw5IEBACiAJCQkJCSAgICAgKiBzdGF0dXMgY2hhbmdlCiAJCQkJCSAgICAgKiAoZS5nLiBSZWFsdGVrIGNvZGVjcykKIAkJCQkJICAgICAqLworCXVuc2lnbmVkIGludCBwaW5fYW1wX3dvcmthcm91bmQ6MTsgLyogcGluIG91dC1hbXAgdGFrZXMgaW5kZXgKKwkJCQkJICAgICogKGUuZy4gQ29uZXhhbnQgY29kZWNzKQorCQkJCQkgICAgKi8KICNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCiAJdW5zaWduZWQgaW50IHBvd2VyX29uIDoxOwkvKiBjdXJyZW50IChnbG9iYWwpIHBvd2VyLXN0YXRlICovCiAJdW5zaWduZWQgaW50IHBvd2VyX3RyYW5zaXRpb24gOjE7IC8qIHBvd2VyLXN0YXRlIGluIHRyYW5zaXRpb24gKi8KQEAgLTg1NSw2ICs4NjIsMTggQEAKICNkZWZpbmUgc25kX2hkYV9zZXF1ZW5jZV93cml0ZV9jYWNoZQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlCiAjZW5kaWYKIAorLyogdGhlIHN0cnVjdCBmb3IgY29kZWMtPnBpbl9jb25maWdzICovCitzdHJ1Y3QgaGRhX3BpbmNmZyB7CisJaGRhX25pZF90IG5pZDsKKwl1bnNpZ25lZCBpbnQgY2ZnOworfTsKKwordW5zaWduZWQgaW50IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCk7CitpbnQgc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY2ZnKTsKK2ludCBzbmRfaGRhX2FkZF9waW5jZmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfYXJyYXkgKmxpc3QsCisJCSAgICAgICBoZGFfbmlkX3QgbmlkLCB1bnNpZ25lZCBpbnQgY2ZnKTsgLyogZm9yIGh3ZGVwICovCisKIC8qCiAgKiBNaXhlcgogICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9nZW5lcmljLmMKaW5kZXggNjU3NDVlOS4uMWQ1Nzk3YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfZ2VuZXJpYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2dlbmVyaWMuYwpAQCAtMTQ0LDkgKzE0NCw5IEBACiAJbm9kZS0+dHlwZSA9IChub2RlLT53aWRfY2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOwogCiAJaWYgKG5vZGUtPnR5cGUgPT0gQUNfV0lEX1BJTikgewotCQlub2RlLT5waW5fY2FwcyA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbm9kZS0+bmlkLCBBQ19QQVJfUElOX0NBUCk7CisJCW5vZGUtPnBpbl9jYXBzID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbm9kZS0+bmlkKTsKIAkJbm9kZS0+cGluX2N0bCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbm9kZS0+bmlkLCAwLCBBQ19WRVJCX0dFVF9QSU5fV0lER0VUX0NPTlRST0wsIDApOwotCQlub2RlLT5kZWZfY2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBub2RlLT5uaWQsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJbm9kZS0+ZGVmX2NmZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbm9kZS0+bmlkKTsKIAl9CiAKIAlpZiAobm9kZS0+d2lkX2NhcHMgJiBBQ19XQ0FQX09VVF9BTVApIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCmluZGV4IDRhZTUxZGMuLjFjNTc1MDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2h3ZGVwLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwpAQCAtMzAsNiArMzAsMTIgQEAKICNpbmNsdWRlIDxzb3VuZC9oZGFfaHdkZXAuaD4KICNpbmNsdWRlIDxzb3VuZC9taW5vcnMuaD4KIAorLyogaGludCBzdHJpbmcgcGFpciAqLworc3RydWN0IGhkYV9oaW50IHsKKwljb25zdCBjaGFyICprZXk7CisJY29uc3QgY2hhciAqdmFsOwkvKiBjb250YWluZWQgaW4gdGhlIHNhbWUgYWxsb2MgYXMga2V5ICovCit9OworCiAvKgogICogd3JpdGUvcmVhZCBhbiBvdXQtb2YtYm91bmQgdmVyYgogICovCkBAIC05OSwxNiArMTA1LDE3IEBACiAKIHN0YXRpYyB2b2lkIGNsZWFyX2h3ZGVwX2VsZW1lbnRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCWNoYXIgKipoZWFkOwogCWludCBpOwogCiAJLyogY2xlYXIgaW5pdCB2ZXJicyAqLwogCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+aW5pdF92ZXJicyk7CiAJLyogY2xlYXIgaGludHMgKi8KLQloZWFkID0gY29kZWMtPmhpbnRzLmxpc3Q7Ci0JZm9yIChpID0gMDsgaSA8IGNvZGVjLT5oaW50cy51c2VkOyBpKyssIGhlYWQrKykKLQkJa2ZyZWUoKmhlYWQpOworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+aGludHMudXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfaGludCAqaGludCA9IHNuZF9hcnJheV9lbGVtKCZjb2RlYy0+aGludHMsIGkpOworCQlrZnJlZShoaW50LT5rZXkpOyAvKiB3ZSBkb24ndCBuZWVkIHRvIGZyZWUgaGludC0+dmFsICovCisJfQogCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+aGludHMpOworCXNuZF9hcnJheV9mcmVlKCZjb2RlYy0+dXNlcl9waW5zKTsKIH0KIAogc3RhdGljIHZvaWQgaHdkZXBfZnJlZShzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCkKQEAgLTE0MCw3ICsxNDcsOCBAQAogI2VuZGlmCiAKIAlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmluaXRfdmVyYnMsIHNpemVvZihzdHJ1Y3QgaGRhX3ZlcmIpLCAzMik7Ci0Jc25kX2FycmF5X2luaXQoJmNvZGVjLT5oaW50cywgc2l6ZW9mKGNoYXIgKiksIDMyKTsKKwlzbmRfYXJyYXlfaW5pdCgmY29kZWMtPmhpbnRzLCBzaXplb2Yoc3RydWN0IGhkYV9oaW50KSwgMzIpOworCXNuZF9hcnJheV9pbml0KCZjb2RlYy0+dXNlcl9waW5zLCBzaXplb2Yoc3RydWN0IGhkYV9waW5jZmcpLCAxNik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1Myw3ICsxNjEsMTMgQEAKIAogc3RhdGljIGludCBjbGVhcl9jb2RlYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiVGhlIGNvZGVjIGlzIGJlaW5nIHVzZWQsIGNhbid0IGZyZWUuXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CiAJY2xlYXJfaHdkZXBfZWxlbWVudHMoY29kZWMpOwogCXJldHVybiAwOwogfQpAQCAtMTYyLDIwICsxNzYsMjkgQEAKIHsKIAlpbnQgZXJyOwogCisJc25kX2hkYV9wb3dlcl91cChjb2RlYyk7CiAJc25kX3ByaW50ayhLRVJOX0lORk8gImhkYS1jb2RlYzogcmVjb25maWd1cmluZ1xuIik7Ci0Jc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CisJaWYgKGVyciA8IDApIHsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgIlRoZSBjb2RlYyBpcyBiZWluZyB1c2VkLCBjYW4ndCByZWNvbmZpZ3VyZS5cbiIpOworCQlnb3RvIGVycm9yOworCX0KIAllcnIgPSBzbmRfaGRhX2NvZGVjX2NvbmZpZ3VyZShjb2RlYyk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZXJyb3I7CiAJLyogcmVidWlsZCBQQ01zICovCiAJZXJyID0gc25kX2hkYV9jb2RlY19idWlsZF9wY21zKGNvZGVjKTsKIAlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZ290byBlcnJvcjsKIAkvKiByZWJ1aWxkIG1peGVycyAqLwogCWVyciA9IHNuZF9oZGFfY29kZWNfYnVpbGRfY29udHJvbHMoY29kZWMpOwogCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiBzbmRfY2FyZF9yZWdpc3Rlcihjb2RlYy0+YnVzLT5jYXJkKTsKKwkJZ290byBlcnJvcjsKKwllcnIgPSBzbmRfY2FyZF9yZWdpc3Rlcihjb2RlYy0+YnVzLT5jYXJkKTsKKyBlcnJvcjoKKwlzbmRfaGRhX3Bvd2VyX2Rvd24oY29kZWMpOworCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC0yNzEsNiArMjk0LDIyIEBACiBDT0RFQ19BQ1RJT05fU1RPUkUocmVjb25maWcpOwogQ09ERUNfQUNUSU9OX1NUT1JFKGNsZWFyKTsKIAorc3RhdGljIHNzaXplX3QgaW5pdF92ZXJic19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5pbml0X3ZlcmJzLnVzZWQ7IGkrKykgeworCQlzdHJ1Y3QgaGRhX3ZlcmIgKnYgPSBzbmRfYXJyYXlfZWxlbSgmY29kZWMtPmluaXRfdmVyYnMsIGkpOworCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sCisJCQkJIjB4JTAyeCAweCUwM3ggMHglMDR4XG4iLAorCQkJCXYtPm5pZCwgdi0+dmVyYiwgdi0+cGFyYW0pOworCX0KKwlyZXR1cm4gbGVuOworfQorCiBzdGF0aWMgc3NpemVfdCBpbml0X3ZlcmJzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKQEAgLTI5MywyNiArMzMyLDE1NyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHNzaXplX3QgaGludHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJaW50IGksIGxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5oaW50cy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9oaW50ICpoaW50ID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5oaW50cywgaSk7CisJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwKKwkJCQkiJXMgPSAlc1xuIiwgaGludC0+a2V5LCBoaW50LT52YWwpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IGhkYV9oaW50ICpnZXRfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvZGVjLT5oaW50cy51c2VkOyBpKyspIHsKKwkJc3RydWN0IGhkYV9oaW50ICpoaW50ID0gc25kX2FycmF5X2VsZW0oJmNvZGVjLT5oaW50cywgaSk7CisJCWlmICghc3RyY21wKGhpbnQtPmtleSwga2V5KSkKKwkJCXJldHVybiBoaW50OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3RyYWlsX3NwYWNlcyhjaGFyICpzdHIpCit7CisJY2hhciAqcDsKKwlpZiAoISpzdHIpCisJCXJldHVybjsKKwlwID0gc3RyICsgc3RybGVuKHN0cikgLSAxOworCWZvciAoOyBpc3NwYWNlKCpwKTsgcC0tKSB7CisJCSpwID0gMDsKKwkJaWYgKHAgPT0gc3RyKQorCQkJcmV0dXJuOworCX0KK30KKworI2RlZmluZSBNQVhfSElOVFMJMTAyNAorCiBzdGF0aWMgc3NpemVfdCBoaW50c19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBod2RlcC0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgKnA7Ci0JY2hhciAqKmhpbnQ7CisJY2hhciAqa2V5LCAqdmFsOworCXN0cnVjdCBoZGFfaGludCAqaGludDsKIAotCWlmICghKmJ1ZiB8fCBpc3NwYWNlKCpidWYpIHx8ICpidWYgPT0gJyMnIHx8ICpidWYgPT0gJ1xuJykKKwl3aGlsZSAoaXNzcGFjZSgqYnVmKSkKKwkJYnVmKys7CisJaWYgKCEqYnVmIHx8ICpidWYgPT0gJyMnIHx8ICpidWYgPT0gJ1xuJykKIAkJcmV0dXJuIGNvdW50OwotCXAgPSBrc3RybmR1cF9ub2VvbChidWYsIDEwMjQpOwotCWlmICghcCkKKwlpZiAoKmJ1ZiA9PSAnPScpCisJCXJldHVybiAtRUlOVkFMOworCWtleSA9IGtzdHJuZHVwX25vZW9sKGJ1ZiwgMTAyNCk7CisJaWYgKCFrZXkpCiAJCXJldHVybiAtRU5PTUVNOwotCWhpbnQgPSBzbmRfYXJyYXlfbmV3KCZjb2RlYy0+aGludHMpOworCS8qIGV4dHJhY3Qga2V5IGFuZCB2YWwgKi8KKwl2YWwgPSBzdHJjaHIoa2V5LCAnPScpOworCWlmICghdmFsKSB7CisJCWtmcmVlKGtleSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkqdmFsKysgPSAwOworCXdoaWxlIChpc3NwYWNlKCp2YWwpKQorCQl2YWwrKzsKKwlyZW1vdmVfdHJhaWxfc3BhY2VzKGtleSk7CisJcmVtb3ZlX3RyYWlsX3NwYWNlcyh2YWwpOworCWhpbnQgPSBnZXRfaGludChjb2RlYywga2V5KTsKKwlpZiAoaGludCkgeworCQkvKiByZXBsYWNlICovCisJCWtmcmVlKGhpbnQtPmtleSk7CisJCWhpbnQtPmtleSA9IGtleTsKKwkJaGludC0+dmFsID0gdmFsOworCQlyZXR1cm4gY291bnQ7CisJfQorCS8qIGFsbG9jYXRlIGEgbmV3IGhpbnQgZW50cnkgKi8KKwlpZiAoY29kZWMtPmhpbnRzLnVzZWQgPj0gTUFYX0hJTlRTKQorCQloaW50ID0gTlVMTDsKKwllbHNlCisJCWhpbnQgPSBzbmRfYXJyYXlfbmV3KCZjb2RlYy0+aGludHMpOwogCWlmICghaGludCkgewotCQlrZnJlZShwKTsKKwkJa2ZyZWUoa2V5KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCSpoaW50ID0gcDsKKwloaW50LT5rZXkgPSBrZXk7CisJaGludC0+dmFsID0gdmFsOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQlzdHJ1Y3Qgc25kX2FycmF5ICpsaXN0LAorCQkJCWNoYXIgKmJ1ZikKK3sKKwlpbnQgaSwgbGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGlzdC0+dXNlZDsgaSsrKSB7CisJCXN0cnVjdCBoZGFfcGluY2ZnICpwaW4gPSBzbmRfYXJyYXlfZWxlbShsaXN0LCBpKTsKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiMHglMDJ4IDB4JTA4eFxuIiwKKwkJCSAgICAgICBwaW4tPm5pZCwgcGluLT5jZmcpOworCX0KKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBpbml0X3Bpbl9jb25maWdzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHBpbl9jb25maWdzX3Nob3coY29kZWMsICZjb2RlYy0+aW5pdF9waW5zLCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCB1c2VyX3Bpbl9jb25maWdzX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHBpbl9jb25maWdzX3Nob3coY29kZWMsICZjb2RlYy0+dXNlcl9waW5zLCBidWYpOworfQorCitzdGF0aWMgc3NpemVfdCBkcml2ZXJfcGluX2NvbmZpZ3Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IGh3ZGVwLT5wcml2YXRlX2RhdGE7CisJcmV0dXJuIHBpbl9jb25maWdzX3Nob3coY29kZWMsICZjb2RlYy0+ZHJpdmVyX3BpbnMsIGJ1Zik7Cit9CisKKyNkZWZpbmUgTUFYX1BJTl9DT05GSUdTCQkzMgorCitzdGF0aWMgc3NpemVfdCB1c2VyX3Bpbl9jb25maWdzX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gaHdkZXAtPnByaXZhdGVfZGF0YTsKKwlpbnQgbmlkLCBjZmc7CisJaW50IGVycjsKKworCWlmIChzc2NhbmYoYnVmLCAiJWkgJWkiLCAmbmlkLCAmY2ZnKSAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIW5pZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZXJyID0gc25kX2hkYV9hZGRfcGluY2ZnKGNvZGVjLCAmY29kZWMtPnVzZXJfcGlucywgbmlkLCBjZmcpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzMxLDggKzUwMSwxMSBAQAogCUNPREVDX0FUVFJfUk8obWZnKSwKIAlDT0RFQ19BVFRSX1JXKG5hbWUpLAogCUNPREVDX0FUVFJfUlcobW9kZWxuYW1lKSwKLQlDT0RFQ19BVFRSX1dPKGluaXRfdmVyYnMpLAotCUNPREVDX0FUVFJfV08oaGludHMpLAorCUNPREVDX0FUVFJfUlcoaW5pdF92ZXJicyksCisJQ09ERUNfQVRUUl9SVyhoaW50cyksCisJQ09ERUNfQVRUUl9STyhpbml0X3Bpbl9jb25maWdzKSwKKwlDT0RFQ19BVFRSX1JXKHVzZXJfcGluX2NvbmZpZ3MpLAorCUNPREVDX0FUVFJfUk8oZHJpdmVyX3Bpbl9jb25maWdzKSwKIAlDT0RFQ19BVFRSX1dPKHJlY29uZmlnKSwKIAlDT0RFQ19BVFRSX1dPKGNsZWFyKSwKIH07CkBAIC0zNTEsNCArNTI0LDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBMb29rIGZvciBoaW50IHN0cmluZworICovCitjb25zdCBjaGFyICpzbmRfaGRhX2dldF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJc3RydWN0IGhkYV9oaW50ICpoaW50ID0gZ2V0X2hpbnQoY29kZWMsIGtleSk7CisJcmV0dXJuIGhpbnQgPyBoaW50LT52YWwgOiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9nZXRfaGludCk7CisKK2ludCBzbmRfaGRhX2dldF9ib29sX2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSkKK3sKKwljb25zdCBjaGFyICpwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywga2V5KTsKKwlpZiAoIXAgfHwgISpwKQorCQlyZXR1cm4gLUVOT0VOVDsKKwlzd2l0Y2ggKHRvdXBwZXIoKnApKSB7CisJY2FzZSAnVCc6IC8qIHRydWUgKi8KKwljYXNlICdZJzogLyogeWVzICovCisJY2FzZSAnMSc6CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfZ2V0X2Jvb2xfaGludCk7CisKICNlbmRpZiAvKiBDT05GSUdfU05EX0hEQV9SRUNPTkZJRyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKaW5kZXggZjNiNTcyMy4uMzA4MjllZSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCkBAIC0zODEsNiArMzgxLDcgQEAKIAogCS8qIEhEIGNvZGVjICovCiAJdW5zaWduZWQgc2hvcnQgY29kZWNfbWFzazsKKwlpbnQgIGNvZGVjX3Byb2JlX21hc2s7IC8qIGNvcGllZCBmcm9tIHByb2JlX21hc2sgb3B0aW9uICovCiAJc3RydWN0IGhkYV9idXMgKmJ1czsKIAogCS8qIENPUkIvUklSQiAqLwpAQCAtODU4LDEzICs4NTksMTggQEAKIAkJICAgICAgU0RfQ1RMX0RNQV9TVEFSVCB8IFNEX0lOVF9NQVNLKTsKIH0KIAotLyogc3RvcCBhIHN0cmVhbSAqLwotc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9zdG9wKHN0cnVjdCBhenggKmNoaXAsIHN0cnVjdCBhenhfZGV2ICphenhfZGV2KQorLyogc3RvcCBETUEgKi8KK3N0YXRpYyB2b2lkIGF6eF9zdHJlYW1fY2xlYXIoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCiB7Ci0JLyogc3RvcCBETUEgKi8KIAlhenhfc2Rfd3JpdGViKGF6eF9kZXYsIFNEX0NUTCwgYXp4X3NkX3JlYWRiKGF6eF9kZXYsIFNEX0NUTCkgJgogCQkgICAgICB+KFNEX0NUTF9ETUFfU1RBUlQgfCBTRF9JTlRfTUFTSykpOwogCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfU1RTLCBTRF9JTlRfTUFTSyk7IC8qIHRvIGJlIHN1cmUgKi8KK30KKworLyogc3RvcCBhIHN0cmVhbSAqLworc3RhdGljIHZvaWQgYXp4X3N0cmVhbV9zdG9wKHN0cnVjdCBhenggKmNoaXAsIHN0cnVjdCBhenhfZGV2ICphenhfZGV2KQoreworCWF6eF9zdHJlYW1fY2xlYXIoY2hpcCwgYXp4X2Rldik7CiAJLyogZGlzYWJsZSBTSUUgKi8KIAlhenhfd3JpdGViKGNoaXAsIElOVENUTCwKIAkJICAgYXp4X3JlYWRiKGNoaXAsIElOVENUTCkgJiB+KDEgPDwgYXp4X2Rldi0+aW5kZXgpKTsKQEAgLTEwNzUsOCArMTA4MSw3IEBACiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQTCwgMCk7CiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9CRExQVSwgMCk7CiAKLQlwZXJpb2RfYnl0ZXMgPSBzbmRfcGNtX2xpYl9wZXJpb2RfYnl0ZXMoc3Vic3RyZWFtKTsKLQlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSBwZXJpb2RfYnl0ZXM7CisJcGVyaW9kX2J5dGVzID0gYXp4X2Rldi0+cGVyaW9kX2J5dGVzOwogCXBlcmlvZHMgPSBhenhfZGV2LT5idWZzaXplIC8gcGVyaW9kX2J5dGVzOwogCiAJLyogcHJvZ3JhbSB0aGUgaW5pdGlhbCBCREwgZW50cmllcyAqLwpAQCAtMTEyMywyNCArMTEyOCwxNyBAQAogIGVycm9yOgogCXNuZF9wcmludGsoS0VSTl9FUlIgIlRvbyBtYW55IEJETCBlbnRyaWVzOiBidWZmZXI9JWQsIHBlcmlvZD0lZFxuIiwKIAkJICAgYXp4X2Rldi0+YnVmc2l6ZSwgcGVyaW9kX2J5dGVzKTsKLQkvKiByZXNldCAqLwotCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUEwsIDApOwotCWF6eF9zZF93cml0ZWwoYXp4X2RldiwgU0RfQkRMUFUsIDApOwogCXJldHVybiAtRUlOVkFMOwogfQogCi0vKgotICogc2V0IHVwIHRoZSBTRCBmb3Igc3RyZWFtaW5nCi0gKi8KLXN0YXRpYyBpbnQgYXp4X3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCisvKiByZXNldCBzdHJlYW0gKi8KK3N0YXRpYyB2b2lkIGF6eF9zdHJlYW1fcmVzZXQoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCiB7CiAJdW5zaWduZWQgY2hhciB2YWw7CiAJaW50IHRpbWVvdXQ7CiAKLQkvKiBtYWtlIHN1cmUgdGhlIHJ1biBiaXQgaXMgemVybyBmb3IgU0QgKi8KLQlhenhfc2Rfd3JpdGViKGF6eF9kZXYsIFNEX0NUTCwgYXp4X3NkX3JlYWRiKGF6eF9kZXYsIFNEX0NUTCkgJgotCQkgICAgICB+U0RfQ1RMX0RNQV9TVEFSVCk7Ci0JLyogcmVzZXQgc3RyZWFtICovCisJYXp4X3N0cmVhbV9jbGVhcihjaGlwLCBhenhfZGV2KTsKKwogCWF6eF9zZF93cml0ZWIoYXp4X2RldiwgU0RfQ1RMLCBhenhfc2RfcmVhZGIoYXp4X2RldiwgU0RfQ1RMKSB8CiAJCSAgICAgIFNEX0NUTF9TVFJFQU1fUkVTRVQpOwogCXVkZWxheSgzKTsKQEAgLTExNTcsNyArMTE1NSwxNSBAQAogCXdoaWxlICgoKHZhbCA9IGF6eF9zZF9yZWFkYihhenhfZGV2LCBTRF9DVEwpKSAmIFNEX0NUTF9TVFJFQU1fUkVTRVQpICYmCiAJICAgICAgIC0tdGltZW91dCkKIAkJOworfQogCisvKgorICogc2V0IHVwIHRoZSBTRCBmb3Igc3RyZWFtaW5nCisgKi8KK3N0YXRpYyBpbnQgYXp4X3NldHVwX2NvbnRyb2xsZXIoc3RydWN0IGF6eCAqY2hpcCwgc3RydWN0IGF6eF9kZXYgKmF6eF9kZXYpCit7CisJLyogbWFrZSBzdXJlIHRoZSBydW4gYml0IGlzIHplcm8gZm9yIFNEICovCisJYXp4X3N0cmVhbV9jbGVhcihjaGlwLCBhenhfZGV2KTsKIAkvKiBwcm9ncmFtIHRoZSBzdHJlYW1fdGFnICovCiAJYXp4X3NkX3dyaXRlbChhenhfZGV2LCBTRF9DVEwsCiAJCSAgICAgIChhenhfc2RfcmVhZGwoYXp4X2RldiwgU0RfQ1RMKSAmIH5TRF9DVExfU1RSRUFNX1RBR19NQVNLKXwKQEAgLTEyMjgsNyArMTIzNCw2IEBACiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhenhfY29kZWNfY3JlYXRlKHN0cnVjdCBhenggKmNoaXAsIGNvbnN0IGNoYXIgKm1vZGVsLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBjb2RlY19wcm9iZV9tYXNrLAogCQkJCSAgICAgIGludCBub19pbml0KQogewogCXN0cnVjdCBoZGFfYnVzX3RlbXBsYXRlIGJ1c190ZW1wOwpAQCAtMTI2MSw3ICsxMjY2LDcgQEAKIAogCS8qIEZpcnN0IHRyeSB0byBwcm9iZSBhbGwgZ2l2ZW4gY29kZWMgc2xvdHMgKi8KIAlmb3IgKGMgPSAwOyBjIDwgbWF4X3Nsb3RzOyBjKyspIHsKLQkJaWYgKChjaGlwLT5jb2RlY19tYXNrICYgKDEgPDwgYykpICYgY29kZWNfcHJvYmVfbWFzaykgeworCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBjaGlwLT5jb2RlY19wcm9iZV9tYXNrKSB7CiAJCQlpZiAocHJvYmVfY29kZWMoY2hpcCwgYykgPCAwKSB7CiAJCQkJLyogU29tZSBCSU9TZW4gZ2l2ZSB5b3Ugd3JvbmcgY29kZWMgYWRkcmVzc2VzCiAJCQkJICogdGhhdCBkb24ndCBleGlzdApAQCAtMTI4NSw3ICsxMjkwLDcgQEAKIAogCS8qIFRoZW4gY3JlYXRlIGNvZGVjIGluc3RhbmNlcyAqLwogCWZvciAoYyA9IDA7IGMgPCBtYXhfc2xvdHM7IGMrKykgewotCQlpZiAoKGNoaXAtPmNvZGVjX21hc2sgJiAoMSA8PCBjKSkgJiBjb2RlY19wcm9iZV9tYXNrKSB7CisJCWlmICgoY2hpcC0+Y29kZWNfbWFzayAmICgxIDw8IGMpKSAmIGNoaXAtPmNvZGVjX3Byb2JlX21hc2spIHsKIAkJCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjOwogCQkJZXJyID0gc25kX2hkYV9jb2RlY19uZXcoY2hpcC0+YnVzLCBjLCAhbm9faW5pdCwgJmNvZGVjKTsKIAkJCWlmIChlcnIgPCAwKQpAQCAtMTQwMyw2ICsxNDA4LDggQEAKIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBhenhfZGV2OwogCXNuZF9wY21fc2V0X3N5bmMoc3Vic3RyZWFtKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm9wZW5fbXV0ZXgpOworCisJYXp4X3N0cmVhbV9yZXNldChjaGlwLCBhenhfZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQyOSw2ICsxNDM2LDExIEBACiBzdGF0aWMgaW50IGF6eF9wY21faHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKIHsKKwlzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldiA9IGdldF9henhfZGV2KHN1YnN0cmVhbSk7CisKKwlhenhfZGV2LT5idWZzaXplID0gMDsKKwlhenhfZGV2LT5wZXJpb2RfYnl0ZXMgPSAwOworCWF6eF9kZXYtPmZvcm1hdF92YWwgPSAwOwogCXJldHVybiBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAogCQkJCQlwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwogfQpAQCAtMTQ0Myw2ICsxNDU1LDkgQEAKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBMLCAwKTsKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0JETFBVLCAwKTsKIAlhenhfc2Rfd3JpdGVsKGF6eF9kZXYsIFNEX0NUTCwgMCk7CisJYXp4X2Rldi0+YnVmc2l6ZSA9IDA7CisJYXp4X2Rldi0+cGVyaW9kX2J5dGVzID0gMDsKKwlhenhfZGV2LT5mb3JtYXRfdmFsID0gMDsKIAogCWhpbmZvLT5vcHMuY2xlYW51cChoaW5mbywgYXBjbS0+Y29kZWMsIHN1YnN0cmVhbSk7CiAKQEAgLTE0NTYsMjMgKzE0NzEsMzcgQEAKIAlzdHJ1Y3QgYXp4X2RldiAqYXp4X2RldiA9IGdldF9henhfZGV2KHN1YnN0cmVhbSk7CiAJc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbyA9IGFwY20tPmhpbmZvW3N1YnN0cmVhbS0+c3RyZWFtXTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXVuc2lnbmVkIGludCBidWZzaXplLCBwZXJpb2RfYnl0ZXMsIGZvcm1hdF92YWw7CisJaW50IGVycjsKIAotCWF6eF9kZXYtPmJ1ZnNpemUgPSBzbmRfcGNtX2xpYl9idWZmZXJfYnl0ZXMoc3Vic3RyZWFtKTsKLQlhenhfZGV2LT5mb3JtYXRfdmFsID0gc25kX2hkYV9jYWxjX3N0cmVhbV9mb3JtYXQocnVudGltZS0+cmF0ZSwKLQkJCQkJCQkgcnVudGltZS0+Y2hhbm5lbHMsCi0JCQkJCQkJIHJ1bnRpbWUtPmZvcm1hdCwKLQkJCQkJCQkgaGluZm8tPm1heGJwcyk7Ci0JaWYgKCFhenhfZGV2LT5mb3JtYXRfdmFsKSB7CisJZm9ybWF0X3ZhbCA9IHNuZF9oZGFfY2FsY19zdHJlYW1fZm9ybWF0KHJ1bnRpbWUtPnJhdGUsCisJCQkJCQlydW50aW1lLT5jaGFubmVscywKKwkJCQkJCXJ1bnRpbWUtPmZvcm1hdCwKKwkJCQkJCWhpbmZvLT5tYXhicHMpOworCWlmICghZm9ybWF0X3ZhbCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSIFNGWAogCQkJICAgImludmFsaWQgZm9ybWF0X3ZhbCwgcmF0ZT0lZCwgY2g9JWQsIGZvcm1hdD0lZFxuIiwKIAkJCSAgIHJ1bnRpbWUtPnJhdGUsIHJ1bnRpbWUtPmNoYW5uZWxzLCBydW50aW1lLT5mb3JtYXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlidWZzaXplID0gc25kX3BjbV9saWJfYnVmZmVyX2J5dGVzKHN1YnN0cmVhbSk7CisJcGVyaW9kX2J5dGVzID0gc25kX3BjbV9saWJfcGVyaW9kX2J5dGVzKHN1YnN0cmVhbSk7CisKIAlzbmRfcHJpbnRkZCgiYXp4X3BjbV9wcmVwYXJlOiBidWZzaXplPTB4JXgsIGZvcm1hdD0weCV4XG4iLAotCQkgICAgYXp4X2Rldi0+YnVmc2l6ZSwgYXp4X2Rldi0+Zm9ybWF0X3ZhbCk7Ci0JaWYgKGF6eF9zZXR1cF9wZXJpb2RzKGNoaXAsIHN1YnN0cmVhbSwgYXp4X2RldikgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJICAgIGJ1ZnNpemUsIGZvcm1hdF92YWwpOworCisJaWYgKGJ1ZnNpemUgIT0gYXp4X2Rldi0+YnVmc2l6ZSB8fAorCSAgICBwZXJpb2RfYnl0ZXMgIT0gYXp4X2Rldi0+cGVyaW9kX2J5dGVzIHx8CisJICAgIGZvcm1hdF92YWwgIT0gYXp4X2Rldi0+Zm9ybWF0X3ZhbCkgeworCQlhenhfZGV2LT5idWZzaXplID0gYnVmc2l6ZTsKKwkJYXp4X2Rldi0+cGVyaW9kX2J5dGVzID0gcGVyaW9kX2J5dGVzOworCQlhenhfZGV2LT5mb3JtYXRfdmFsID0gZm9ybWF0X3ZhbDsKKwkJZXJyID0gYXp4X3NldHVwX3BlcmlvZHMoY2hpcCwgc3Vic3RyZWFtLCBhenhfZGV2KTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCWF6eF9zZXR1cF9jb250cm9sbGVyKGNoaXAsIGF6eF9kZXYpOwogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKQogCQlhenhfZGV2LT5maWZvX3NpemUgPSBhenhfc2RfcmVhZHcoYXp4X2RldiwgU0RfRklGT1NJWkUpICsgMTsKQEAgLTIxMDAsMjUgKzIxMjksMzYgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgyMGFjLCAiRGVsbCBTdHVkaW8gRGVza3RvcCIsIDB4MDEpLAogCS8qIGluY2x1ZGluZyBib2d1cyBBTEMyNjggaW4gc2xvdCMyIHRoYXQgY29uZmxpY3RzIHdpdGggQUxDODg4ICovCiAJU05EX1BDSV9RVUlSSygweDE3YzAsIDB4NDA4NSwgIk1lZGlvbiBNRDk2NjMwIiwgMHgwMSksCi0JLyogY29uZmxpY3Qgb2YgQUxDMjY4IGluIHNsb3QjMyAoZGlnaXRhbCBJL08pOyBhIHRlbXBvcmFyeSBmaXggKi8KLQlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjAwLCAiVG9zaGliYSBsYXB0b3AiLCAweDAzKSwKKwkvKiBmb3JjZWQgY29kZWMgc2xvdHMgKi8KKwlTTkRfUENJX1FVSVJLKDB4MTA0NiwgMHgxMjYyLCAiQVNVUyBXNUYiLCAweDEwMyksCiAJe30KIH07CiAKKyNkZWZpbmUgQVpYX0ZPUkNFX0NPREVDX01BU0sJMHgxMDAKKwogc3RhdGljIHZvaWQgX19kZXZpbml0IGNoZWNrX3Byb2JlX21hc2soc3RydWN0IGF6eCAqY2hpcCwgaW50IGRldikKIHsKIAljb25zdCBzdHJ1Y3Qgc25kX3BjaV9xdWlyayAqcTsKIAotCWlmIChwcm9iZV9tYXNrW2Rldl0gPT0gLTEpIHsKKwljaGlwLT5jb2RlY19wcm9iZV9tYXNrID0gcHJvYmVfbWFza1tkZXZdOworCWlmIChjaGlwLT5jb2RlY19wcm9iZV9tYXNrID09IC0xKSB7CiAJCXEgPSBzbmRfcGNpX3F1aXJrX2xvb2t1cChjaGlwLT5wY2ksIHByb2JlX21hc2tfbGlzdCk7CiAJCWlmIChxKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICAgImhkYV9pbnRlbDogcHJvYmVfbWFzayBzZXQgdG8gMHgleCAiCiAJCQkgICAgICAgImZvciBkZXZpY2UgJTA0eDolMDR4XG4iLAogCQkJICAgICAgIHEtPnZhbHVlLCBxLT5zdWJ2ZW5kb3IsIHEtPnN1YmRldmljZSk7Ci0JCQlwcm9iZV9tYXNrW2Rldl0gPSBxLT52YWx1ZTsKKwkJCWNoaXAtPmNvZGVjX3Byb2JlX21hc2sgPSBxLT52YWx1ZTsKIAkJfQogCX0KKworCS8qIGNoZWNrIGZvcmNlZCBvcHRpb24gKi8KKwlpZiAoY2hpcC0+Y29kZWNfcHJvYmVfbWFzayAhPSAtMSAmJgorCSAgICAoY2hpcC0+Y29kZWNfcHJvYmVfbWFzayAmIEFaWF9GT1JDRV9DT0RFQ19NQVNLKSkgeworCQljaGlwLT5jb2RlY19tYXNrID0gY2hpcC0+Y29kZWNfcHJvYmVfbWFzayAmIDB4ZmY7CisJCXByaW50ayhLRVJOX0lORk8gImhkYV9pbnRlbDogY29kZWNfbWFzayBmb3JjZWQgdG8gMHgleFxuIiwKKwkJICAgICAgIGNoaXAtPmNvZGVjX21hc2spOworCX0KIH0KIAogCkBAIC0yMzQ3LDEwICsyMzg3LDEwIEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmICghY2FyZCkgeworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgU0ZYICJFcnJvciBjcmVhdGluZyBjYXJkIVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWVyciA9IGF6eF9jcmVhdGUoY2FyZCwgcGNpLCBkZXYsIHBjaV9pZC0+ZHJpdmVyX2RhdGEsICZjaGlwKTsKQEAgLTIzNTksOCArMjM5OSw3IEBACiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAogCS8qIGNyZWF0ZSBjb2RlYyBpbnN0YW5jZXMgKi8KLQllcnIgPSBhenhfY29kZWNfY3JlYXRlKGNoaXAsIG1vZGVsW2Rldl0sIHByb2JlX21hc2tbZGV2XSwKLQkJCSAgICAgICBwcm9iZV9vbmx5W2Rldl0pOworCWVyciA9IGF6eF9jb2RlY19jcmVhdGUoY2hpcCwgbW9kZWxbZGV2XSwgcHJvYmVfb25seVtkZXZdKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKIApAQCAtMjQ1NywxMCArMjQ5NiwxMCBAQAogCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGFjMSksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYWMyKSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBhYzMpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJkNCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwYmQ1KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBiZDYpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAotCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGJkNyksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk0KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxMGRlLCAweDBkOTUpLCAuZHJpdmVyX2RhdGEgPSBBWlhfRFJJVkVSX05WSURJQSB9LAorCXsgUENJX0RFVklDRSgweDEwZGUsIDB4MGQ5NiksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfTlZJRElBIH0sCisJeyBQQ0lfREVWSUNFKDB4MTBkZSwgMHgwZDk3KSwgLmRyaXZlcl9kYXRhID0gQVpYX0RSSVZFUl9OVklESUEgfSwKIAkvKiBUZXJhZGljaSAqLwogCXsgUENJX0RFVklDRSgweDY1NDksIDB4MTIwMCksIC5kcml2ZXJfZGF0YSA9IEFaWF9EUklWRVJfVEVSQSB9LAogCS8qIEFNRCBHZW5lcmljLCBQQ0kgY2xhc3MgY29kZSBhbmQgVmVuZG9yIElEIGZvciBIRCBBdWRpbyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2xvY2FsLmgKaW5kZXggNDRmMTg5Yy4uODMzNDkwMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfbG9jYWwuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9sb2NhbC5oCkBAIC0yNiw4ICsyNiwxMCBAQAogLyoKICAqIGZvciBtaXhlciBjb250cm9scwogICovCisjZGVmaW5lIEhEQV9DT01QT1NFX0FNUF9WQUxfT0ZTKG5pZCxjaHMsaWR4LGRpcixvZnMpCQlcCisJKChuaWQpIHwgKChjaHMpPDwxNikgfCAoKGRpcik8PDE4KSB8ICgoaWR4KTw8MTkpIHwgKChvZnMpPDwyMykpCiAjZGVmaW5lIEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLGNocyxpZHgsZGlyKSBcCi0JKChuaWQpIHwgKChjaHMpPDwxNikgfCAoKGRpcik8PDE4KSB8ICgoaWR4KTw8MTkpKQorCUhEQV9DT01QT1NFX0FNUF9WQUxfT0ZTKG5pZCwgY2hzLCBpZHgsIGRpciwgMCkKIC8qIG1vbm8gdm9sdW1lIHdpdGggaW5kZXggKGluZGV4PTAsMSwuLi4pIChjaGFubmVsPTEsMikgKi8KICNkZWZpbmUgSERBX0NPREVDX1ZPTFVNRV9NT05PX0lEWCh4bmFtZSwgeGNpZHgsIG5pZCwgY2hhbm5lbCwgeGluZGV4LCBkaXJlY3Rpb24pIFwKIAl7IC5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCAubmFtZSA9IHhuYW1lLCAuaW5kZXggPSB4Y2lkeCwgIFwKQEAgLTk2LDcgKzk4LDcgQEAKIAkJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNoYXIgKm5hbWUsCiAJCQl1bnNpZ25lZCBpbnQgKnRsdiwgY29uc3QgY2hhciAqKnNsYXZlcyk7Ci12b2lkIHNuZF9oZGFfY29kZWNfcmVzZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOworaW50IHNuZF9oZGFfY29kZWNfcmVzZXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogaW50IHNuZF9oZGFfY29kZWNfY29uZmlndXJlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAogLyogYW1wIHZhbHVlIGJpdHMgKi8KQEAgLTEzNCw3ICsxMzYsNyBAQAogCiBzdHJ1Y3QgaGRhX2JpbmRfY3RscyB7CiAJc3RydWN0IGhkYV9jdGxfb3BzICpvcHM7Ci0JbG9uZyB2YWx1ZXNbXTsKKwl1bnNpZ25lZCBsb25nIHZhbHVlc1tdOwogfTsKIAogaW50IHNuZF9oZGFfbWl4ZXJfYmluZF9jdGxzX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC0yMjcsNiArMjI5LDcgQEAKIAloZGFfbmlkX3QgaHBfbmlkOwkvKiBvcHRpb25hbCBEQUMgZm9yIEhQLCAwIHdoZW4gbm90IGV4aXN0cyAqLwogCWhkYV9uaWRfdCBleHRyYV9vdXRfbmlkWzNdOwkvKiBvcHRpb25hbCBEQUNzLCAwIHdoZW4gbm90IGV4aXN0cyAqLwogCWhkYV9uaWRfdCBkaWdfb3V0X25pZDsJLyogZGlnaXRhbCBvdXQgYXVkaW8gd2lkZ2V0ICovCisJaGRhX25pZF90ICpzbGF2ZV9kaWdfb3V0czsKIAlpbnQgbWF4X2NoYW5uZWxzOwkvKiBjdXJyZW50bHkgc3VwcG9ydGVkIGFuYWxvZyBjaGFubmVscyAqLwogCWludCBkaWdfb3V0X3VzZWQ7CS8qIGN1cnJlbnQgdXNhZ2Ugb2YgZGlnaXRhbCBvdXQgKEhEQV9ESUdfWFhYKSAqLwogCWludCBub19zaGFyZV9zdHJlYW07CS8qIGRvbid0IHNoYXJlIGEgc3RyZWFtIHdpdGggbXVsdGlwbGUgcGlucyAqLwpAQCAtMzU0LDkgKzM1NywxMiBAQAogCWludCBsaW5lX291dF90eXBlOwkvKiBBVVRPX1BJTl9YWFhfT1VUICovCiAJaGRhX25pZF90IGhwX3BpbnNbQVVUT19DRkdfTUFYX09VVFNdOwogCWhkYV9uaWRfdCBpbnB1dF9waW5zW0FVVE9fUElOX0xBU1RdOwotCWhkYV9uaWRfdCBkaWdfb3V0X3BpbjsKKwlpbnQgZGlnX291dHM7CisJaGRhX25pZF90IGRpZ19vdXRfcGluc1syXTsKIAloZGFfbmlkX3QgZGlnX2luX3BpbjsKIAloZGFfbmlkX3QgbW9ub19vdXRfcGluOworCWludCBkaWdfb3V0X3R5cGVbMl07IC8qIEhEQV9QQ01fVFlQRV9YWFggKi8KKwlpbnQgZGlnX2luX3R5cGU7IC8qIEhEQV9QQ01fVFlQRV9YWFggKi8KIH07CiAKICNkZWZpbmUgZ2V0X2RlZmNmZ19jb25uZWN0KGNmZykgXApAQCAtNDA1LDYgKzQxMSw3IEBACiB1MzIgcXVlcnlfYW1wX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsIGludCBkaXJlY3Rpb24pOwogaW50IHNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsIGludCBkaXIsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY2Fwcyk7Cit1MzIgc25kX2hkYV9xdWVyeV9waW5fY2FwcyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCk7CiAKIGludCBzbmRfaGRhX2N0bF9hZGQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGwpOwogdm9pZCBzbmRfaGRhX2N0bHNfY2xlYXIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwpAQCAtNDI3LDYgKzQzNCwyMyBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9SRUNPTkZJRworY29uc3QgY2hhciAqc25kX2hkYV9nZXRfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KTsKK2ludCBzbmRfaGRhX2dldF9ib29sX2hpbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKmtleSk7CisjZWxzZQorc3RhdGljIGlubGluZQorY29uc3QgY2hhciAqc25kX2hkYV9nZXRfaGludChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqa2V5KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lCitpbnQgc25kX2hkYV9nZXRfYm9vbF9oaW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICprZXkpCit7CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisjZW5kaWYKKwogLyoKICAqIHBvd2VyLW1hbmFnZW1lbnQKICAqLwpAQCAtNDU4LDYgKzQ4Miw3IEBACiAjZGVmaW5lIGdldF9hbXBfY2hhbm5lbHMoa2MpCSgoKGtjKS0+cHJpdmF0ZV92YWx1ZSA+PiAxNikgJiAweDMpCiAjZGVmaW5lIGdldF9hbXBfZGlyZWN0aW9uKGtjKQkoKChrYyktPnByaXZhdGVfdmFsdWUgPj4gMTgpICYgMHgxKQogI2RlZmluZSBnZXRfYW1wX2luZGV4KGtjKQkoKChrYyktPnByaXZhdGVfdmFsdWUgPj4gMTkpICYgMHhmKQorI2RlZmluZSBnZXRfYW1wX29mZnNldChrYykJKCgoa2MpLT5wcml2YXRlX3ZhbHVlID4+IDIzKSAmIDB4M2YpCiAKIC8qCiAgKiBDRUEgU2hvcnQgQXVkaW8gRGVzY3JpcHRvciBkYXRhCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcm9jLmMKaW5kZXggMTQ0Yjg1Mi4uOTNkNzQ5OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX3Byb2MuYwpAQCAtMzk5LDggKzM5OSwxMCBAQAogewogCWludCBjLCBjdXJyID0gLTE7CiAKLQlpZiAoY29ubl9sZW4gPiAxICYmIHdpZF90eXBlICE9IEFDX1dJRF9BVURfTUlYICYmCi0JICAgIHdpZF90eXBlICE9IEFDX1dJRF9WT0xfS05CKQorCWlmIChjb25uX2xlbiA+IDEgJiYKKwkgICAgd2lkX3R5cGUgIT0gQUNfV0lEX0FVRF9NSVggJiYKKwkgICAgd2lkX3R5cGUgIT0gQUNfV0lEX1ZPTF9LTkIgJiYKKwkgICAgd2lkX3R5cGUgIT0gQUNfV0lEX1BPV0VSKQogCQljdXJyID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCiAJCQkJCSAgQUNfVkVSQl9HRVRfQ09OTkVDVF9TRUwsIDApOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgQ29ubmVjdGlvbjogJWRcbiIsIGNvbm5fbGVuKTsKQEAgLTQ2Nyw4ICs0NjksOSBAQAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkNvZGVjOiAlc1xuIiwKIAkJICAgIGNvZGVjLT5uYW1lID8gY29kZWMtPm5hbWUgOiAiTm90IFNldCIpOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkFkZHJlc3M6ICVkXG4iLCBjb2RlYy0+YWRkcik7Ci0Jc25kX2lwcmludGYoYnVmZmVyLCAiVmVuZG9yIElkOiAweCV4XG4iLCBjb2RlYy0+dmVuZG9yX2lkKTsKLQlzbmRfaXByaW50ZihidWZmZXIsICJTdWJzeXN0ZW0gSWQ6IDB4JXhcbiIsIGNvZGVjLT5zdWJzeXN0ZW1faWQpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIkZ1bmN0aW9uIElkOiAweCV4XG4iLCBjb2RlYy0+ZnVuY3Rpb25faWQpOworCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlZlbmRvciBJZDogMHglMDh4XG4iLCBjb2RlYy0+dmVuZG9yX2lkKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJTdWJzeXN0ZW0gSWQ6IDB4JTA4eFxuIiwgY29kZWMtPnN1YnN5c3RlbV9pZCk7CiAJc25kX2lwcmludGYoYnVmZmVyLCAiUmV2aXNpb24gSWQ6IDB4JXhcbiIsIGNvZGVjLT5yZXZpc2lvbl9pZCk7CiAKIAlpZiAoY29kZWMtPm1mZykKQEAgLTU1NCw4ICs1NTcsMTQgQEAKIAkJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgQW1wLU91dCBjYXBzOiAiKTsKIAkJCXByaW50X2FtcF9jYXBzKGJ1ZmZlciwgY29kZWMsIG5pZCwgSERBX09VVFBVVCk7CiAJCQlzbmRfaXByaW50ZihidWZmZXIsICIgIEFtcC1PdXQgdmFsczogIik7Ci0JCQlwcmludF9hbXBfdmFscyhidWZmZXIsIGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQsCi0JCQkJICAgICAgIHdpZF9jYXBzICYgQUNfV0NBUF9TVEVSRU8sIDEpOworCQkJaWYgKHdpZF90eXBlID09IEFDX1dJRF9QSU4gJiYKKwkJCSAgICBjb2RlYy0+cGluX2FtcF93b3JrYXJvdW5kKQorCQkJCXByaW50X2FtcF92YWxzKGJ1ZmZlciwgY29kZWMsIG5pZCwgSERBX09VVFBVVCwKKwkJCQkJICAgICAgIHdpZF9jYXBzICYgQUNfV0NBUF9TVEVSRU8sCisJCQkJCSAgICAgICBjb25uX2xlbik7CisJCQllbHNlCisJCQkJcHJpbnRfYW1wX3ZhbHMoYnVmZmVyLCBjb2RlYywgbmlkLCBIREFfT1VUUFVULAorCQkJCQkgICAgICAgd2lkX2NhcHMgJiBBQ19XQ0FQX1NURVJFTywgMSk7CiAJCX0KIAogCQlzd2l0Y2ggKHdpZF90eXBlKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYwppbmRleCBlNDg2MTIzLi41YmI0OGVlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKQEAgLTI3LDExICsyNywxMiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlICJoZGFfY29kZWMuaCIKICNpbmNsdWRlICJoZGFfbG9jYWwuaCIKKyNpbmNsdWRlICJoZGFfYmVlcC5oIgogCiBzdHJ1Y3QgYWQxOTh4X3NwZWMgewogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNV07CiAJaW50IG51bV9taXhlcnM7Ci0KKwl1bnNpZ25lZCBpbnQgYmVlcF9hbXA7CS8qIGJlZXAgYW1wIHZhbHVlLCBzZXQgdmlhIHNldF9iZWVwX2FtcCgpICovCiAJY29uc3Qgc3RydWN0IGhkYV92ZXJiICppbml0X3ZlcmJzWzVdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicwogCQkJCQkJICogZG9uJ3QgZm9yZ2V0IE5VTEwgdGVybWluYXRpb24hCiAJCQkJCQkgKi8KQEAgLTE1NCw2ICsxNTUsMTYgQEAKIAogc3RhdGljIHZvaWQgYWQxOTh4X2ZyZWVfa2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpOwogCisvKiBhZGRpdGlvbmFsIGJlZXAgbWl4ZXJzOyB0aGUgYWN0dWFsIHBhcmFtZXRlcnMgYXJlIG92ZXJ3cml0dGVuIGF0IGJ1aWxkICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWRfYmVlcF9taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMCwgMCwgSERBX09VVFBVVCksCisJSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMCwgMCwgSERBX09VVFBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworI2RlZmluZSBzZXRfYmVlcF9hbXAoc3BlYywgbmlkLCBpZHgsIGRpcikgXAorCSgoc3BlYyktPmJlZXBfYW1wID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDEsIGlkeCwgZGlyKSkgLyogbW9ubyAqLworCiBzdGF0aWMgaW50IGFkMTk4eF9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTE4MSw2ICsxOTIsMjEgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJLyogY3JlYXRlIGJlZXAgY29udHJvbHMgaWYgbmVlZGVkICovCisJaWYgKHNwZWMtPmJlZXBfYW1wKSB7CisJCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCQlmb3IgKGtuZXcgPSBhZF9iZWVwX21peGVyOyBrbmV3LT5uYW1lOyBrbmV3KyspIHsKKwkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CisJCQlrY3RsID0gc25kX2N0bF9uZXcxKGtuZXcsIGNvZGVjKTsKKwkJCWlmICgha2N0bCkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWtjdGwtPnByaXZhdGVfdmFsdWUgPSBzcGVjLT5iZWVwX2FtcDsKKwkJCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywga2N0bCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCiAJLyogaWYgd2UgaGF2ZSBubyBtYXN0ZXIgY29udHJvbCwgbGV0J3MgY3JlYXRlIGl0ICovCiAJaWYgKCFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIpKSB7CiAJCXVuc2lnbmVkIGludCB2bWFzdGVyX3Rsdls0XTsKQEAgLTQwNiw3ICs0MzIsOCBAQAogCQlyZXR1cm47CiAKIAlhZDE5OHhfZnJlZV9rY3Rscyhjb2RlYyk7Ci0Ja2ZyZWUoY29kZWMtPnNwZWMpOworCWtmcmVlKHNwZWMpOworCXNuZF9oZGFfZGV0YWNoX2JlZXBfZGV2aWNlKGNvZGVjKTsKIH0KIAogc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIGFkMTk4eF9wYXRjaF9vcHMgPSB7CkBAIC01NDUsOCArNTcyLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgwZiwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MWUsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCkBAIC02MTAsOCArNjM1LDcgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgwZiwgMHgwLCBIREFfT1VUUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCi0JICAgSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKKwkvKiAKIAkgICBIREFfQ09ERUNfVk9MVU1FKCJNb25vIFBsYXliYWNrIFZvbHVtZSIsIDB4MWUsIDB4MCwgSERBX09VVFBVVCksCiAJICAgSERBX0NPREVDX01VVEUoIk1vbm8gUGxheWJhY2sgU3dpdGNoIiwgMHgxZSwgMHgwLCBIREFfT1VUUFVUKSwgKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCkBAIC04MDksOCArODMzLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgwZiwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MTgsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgxOCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwLCBIREFfT1VUUFVUKSwKIAl7CkBAIC0xMDAyLDEwICsxMDI0LDggQEAKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjQwLCAiVG9zaGliYSIsIEFEMTk4NkFfTEFQVE9QX0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGIwM2MsICJTYW1zdW5nIFI1NSIsIEFEMTk4NkFfM1NUQUNLKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDFlLCAiRlNDIFYyMDYwIiwgQUQxOTg2QV9MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjMsICJTYW1zdW5nIFg2MCIsIEFEMTk4NkFfU0FNU1VORyksCi0JU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAyNCwgIlNhbXN1bmcgUjY1IiwgQUQxOTg2QV9TQU1TVU5HKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDI2LCAiU2Ftc3VuZyBYMTEiLCBBRDE5ODZBX1NBTVNVTkcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwMjcsICJTYW1zdW5nIFExIiwgQUQxOTg2QV9VTFRSQSksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTQ0ZCwgMHhmZjAwLCAweGMwMDAsICJTYW1zdW5nIiwgQUQxOTg2QV9TQU1TVU5HKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjNTA0LCAiU2Ftc3VuZyBRMzUiLCBBRDE5ODZBXzNTVEFDSyksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MTAxMSwgIkxlbm92byBNNTUiLCBBRDE5ODZBX0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MTAxNywgIkxlbm92byBBNjAiLCBBRDE5ODZBXzNTVEFDSyksCkBAIC0xMDI3LDE1ICsxMDQ3LDE0IEBACiAKIHN0YXRpYyBpbnQgaXNfamFja19hdmFpbGFibGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwl1bnNpZ25lZCBpbnQgY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlyZXR1cm4gZ2V0X2RlZmNmZ19jb25uZWN0KGNvbmYpICE9IEFDX0pBQ0tfUE9SVF9OT05FOwogfQogCiBzdGF0aWMgaW50IHBhdGNoX2FkMTk4NmEoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVyciwgYm9hcmRfY29uZmlnOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTEwNDMsNiArMTA2MiwxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTkpOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTgsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gNjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWQxOTg2YV9kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE5ODZhX2RhY19uaWRzOwpAQCAtMTIyMiw4ICsxMjQ4LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MTIsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDEzLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MTMsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX1ZPTFVNRV9NT05PKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDEsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEVfTU9OTygiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xMjk0LDYgKzEzMTgsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE5ODMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOworCWludCBlcnI7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMTMwMSw2ICsxMzI2LDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShhZDE5ODNfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxOTgzX2RhY19uaWRzOwpAQCAtMTM3MCw4ICsxNDAyLDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MWMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgxZCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FX01PTk8oIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZCwgMSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURV9NT05PKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGQsIDEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgwOCwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0xNDE2LDggKzE0NDYsOCBAQAogCXsweDFlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwMDB9LAogCXsweDFmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCAweGIwODB9LAogCS8qIE1pYyBib29zdDogMGRCICovCi0JezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCi0JezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIDB4YjAwMH0sCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAorCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBSZWNvcmQgc2VsZWN0b3I6IEZyb250IG1pYyAqLwogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgMHhiMDgwfSwKQEAgLTE2ODIsMTAgKzE3MTIsMTAgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAxNCwgMHgwNTk3LCAiTGVub3ZvIFo2MCIsIEFEMTk4MV9USElOS1BBRCksCiAJU05EX1BDSV9RVUlSSygweDEwMTQsIDB4MDViNywgIkxlbm92byBaNjBtIiwgQUQxOTgxX1RISU5LUEFEKSwKIAkvKiBBbGwgSFAgbW9kZWxzICovCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDAsICJIUCBueCIsIEFEMTk4MV9IUCksCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDNjLCAiSFAgbngiLCBBRDE5ODFfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweDAwMDEsICJUb3NoaWJhIFUyMDUiLCBBRDE5ODFfVE9TSElCQSksCiAJLyogTGVub3ZvIFRoaW5rcGFkIFQ2MC9YNjAvWjZ4eCAqLwotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAwLCAiTGVub3ZvIFRoaW5rcGFkIiwgQUQxOTgxX1RISU5LUEFEKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3YWEsICJMZW5vdm8gVGhpbmtwYWQiLCBBRDE5ODFfVEhJTktQQUQpLAogCS8qIEhQIG54NjMyMCAocmV2ZXJzZWQgU1NJRCwgSC9XIGJ1ZykgKi8KIAlTTkRfUENJX1FVSVJLKDB4MzBiMCwgMHgxMDNjLCAiSFAgbng2MzIwIiwgQUQxOTgxX0hQKSwKIAl7fQpAQCAtMTY5NCw3ICsxNzI0LDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxOTgxKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYzsKLQlpbnQgYm9hcmRfY29uZmlnOworCWludCBlcnIsIGJvYXJkX2NvbmZpZzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0xNzAyLDYgKzE3MzIsMTMgQEAKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhZDE5OHhfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCXNldF9iZWVwX2FtcChzcGVjLCAweDBkLCAwLCBIREFfT1VUUFVUKTsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFkMTk4MV9kYWNfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE5ODFfZGFjX25pZHM7CkBAIC0xOTg4LDkgKzIwMjUsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDQsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQogCUhEQV9DT0RFQ19WT0xVTUUoIkFuYWxvZyBNaXggUGxheWJhY2sgVm9sdW1lIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQW5hbG9nIE1peCBQbGF5YmFjayBTd2l0Y2giLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0yMDM0LDkgKzIwNjgsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDQsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDQsIEhEQV9JTlBVVCksCiAKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQogCUhEQV9DT0RFQ19WT0xVTUUoIkFuYWxvZyBNaXggUGxheWJhY2sgVm9sdW1lIiwgMHgyMSwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQW5hbG9nIE1peCBQbGF5YmFjayBTd2l0Y2giLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0yMDY2LDkgKzIwOTcsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MSwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgxMCwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCiAJSERBX0NPREVDX1ZPTFVNRSgiQW5hbG9nIE1peCBQbGF5YmFjayBWb2x1bWUiLCAweDIxLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJBbmFsb2cgTWl4IFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTIyOTcsMTAgKzIzMjUsNiBAQAogCXsweDBjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAotCS8qIEFEQ3M7IG11dGVkICovCi0JezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAKIAl7IH0KIH07CkBAIC0yNDA4LDEwICsyNDMyLDYgQEAKIAl7MHgwYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCXsweDBlLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKLQkvKiBBRENzOyBtdXRlZCAqLwotCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCS8qIEFuYWxvZyBNaXggb3V0cHV0IGFtcCAqLwogCXsweDIxLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1VOTVVURSB8IDB4MWZ9LCAvKiAwZEIgKi8KIAl7IH0KQEAgLTI0ODMsMTAgKzI1MDMsNiBAQAogCXsweDBjLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKIAl7MHgwZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCiAJezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAotCS8qIEFEQ3M7IG11dGVkICovCi0JezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJLyogQW5hbG9nIE1peCBvdXRwdXQgYW1wICovCiAJezB4MjEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIHwgMHgxZn0sIC8qIDBkQiAqLwogCXsgfQpAQCAtMjg5MCw3ICsyOTA2LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFEMTk4OF9TUERJRl9PVVQ7CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IEFEMTk4OF9TUERJRl9JTjsKQEAgLTI5NDAsNyArMjk1Niw3IEBACiBzdGF0aWMgaW50IHBhdGNoX2FkMTk4OChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMjk2MCw3ICsyOTc2LDcgQEAKIAogCWlmIChib2FyZF9jb25maWcgPT0gQUQxOTg4X0FVVE8pIHsKIAkJLyogYXV0b21hdGljIHBhcnNlIGZyb20gdGhlIEJJT1MgY29uZmlnICovCi0JCWludCBlcnIgPSBhZDE5ODhfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOworCQllcnIgPSBhZDE5ODhfcGFyc2VfYXV0b19jb25maWcoY29kZWMpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJYWQxOTh4X2ZyZWUoY29kZWMpOwogCQkJcmV0dXJuIGVycjsKQEAgLTI5NzAsNiArMjk4NiwxMyBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTAsIDAsIEhEQV9PVVRQVVQpOworCiAJc3dpdGNoIChib2FyZF9jb25maWcpIHsKIAljYXNlIEFEMTk4OF82U1RBQ0s6CiAJY2FzZSBBRDE5ODhfNlNUQUNLX0RJRzoKQEAgLTMxMjYsMTIgKzMxNDksNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAyLCBIREFfSU5QVVQpLAotCS8qCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiRGlnaXRhbCBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkRpZ2l0YWwgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDEwLCAweDAsIEhEQV9PVVRQVVQpLAotCSovCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zMjA0LDEwICszMjIxLDEwIEBACiAJezB4MGUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAogCS8qIFBvcnQtQiAoZnJvbnQgbWljKSBwaW4gKi8KIAl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKLQl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogUG9ydC1DIChyZWFyIG1pYykgcGluICovCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCi0JezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCS8qIEFuYWxvZyBtaXhlcjsgbXV0ZSBhcyBkZWZhdWx0ICovCiAJezB4MjAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKIAl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LApAQCAtMzI0MCw3ICszMjU3LDcgQEAKIAkiQ0QgUGxheWJhY2sgVm9sdW1lIiwKIAkiSW50ZXJuYWwgTWljIFBsYXliYWNrIFZvbHVtZSIsCiAJIkRvY2tpbmcgTWljIFBsYXliYWNrIFZvbHVtZSIKLQkiQmVlcCBQbGF5YmFjayBWb2x1bWUiLAorCS8qICJCZWVwIFBsYXliYWNrIFZvbHVtZSIsICovCiAJIklFQzk1OCBQbGF5YmFjayBWb2x1bWUiLAogCU5VTEwKIH07CkBAIC0zMjQ4LDYgKzMyNjUsNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE4ODQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOworCWludCBlcnI7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMzI1NSw2ICszMjczLDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShhZDE4ODRfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gYWQxODg0X2RhY19uaWRzOwpAQCAtMzMyMSw4ICszMzQ2LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2tpbmcgTWljIEJvb3N0IiwgMHgyNSwgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAxLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzM1OCw3ICszMzgxLDcgQEAKIAl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKIAl7MHgxYywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKIAkvKiBkb2NraW5nIG1pYyBib29zdCAqLwotCXsweDI1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDI1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCS8qIEFuYWxvZyBtaXhlciAtIGRvY2tpbmcgbWljOyBtdXRlIGFzIGRlZmF1bHQgKi8KIAl7MHgyMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoNCl9LAogCS8qIGVuYWJsZSBFQVBEIGJpdCAqLwpAQCAtMzM3OSwxMCArMzQwMiw2IEBACiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUtSW4gUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZS1JbiBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAxLCBIREFfSU5QVVQpLAotCS8qCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JKi8KIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lLUluIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zNDY4LDcgKzM0ODcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWQxOTg0X2NmZ190YmxbXSA9IHsKIAkvKiBMZW5vdm8gVGhpbmtwYWQgVDYxL1g2MSAqLwotCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAwLCAiTGVub3ZvIFRoaW5rcGFkIiwgQUQxOTg0X1RISU5LUEFEKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3YWEsICJMZW5vdm8gVGhpbmtwYWQiLCBBRDE5ODRfVEhJTktQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyMTQsICJEZWxsIFQzNDAwIiwgQUQxOTg0X0RFTExfREVTS1RPUCksCiAJe30KIH07CkBAIC0zNTYxLDggKzM1ODAsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMaW5lIEJvb3N0IiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MjUsIDB4MCwgSERBX09VVFBVVCksCkBAIC0zNjIyLDEwICszNjM5LDEwIEBACiAJezB4MTMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJLyogUG9ydC1CIChmcm9udCBtaWMpIHBpbiAqLwogCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODB9LAotCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAkvKiBQb3J0LUMgKHJlYXIgbGluZS1pbikgcGluICovCiAJezB4MTUsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKLQl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogUG9ydC1FIChyZWFyIG1pYykgcGluICovCiAJezB4MWMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCiAJezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCkBAIC0zNjk1LDggKzM3MTIsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NrIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJEb2NrIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE1LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRG9jayBNaWMgQm9vc3QiLCAweDI1LCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzcyNCw4ICszNzM5LDYgQEAKIAlIREFfQ09ERUNfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MjEsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiUENNIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4NSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiUENNIFBsYXliYWNrIFN3aXRjaCIsIDB4MjAsIDB4NSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDE0LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTM4MzYsOCArMzg0OSw2IEBACiAJSERBX0NPREVDX01VVEUoIlBDTSBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MjAsIDB4MDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTQsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgQm9vc3QiLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtMzkxMSw5ICszOTIyLDkgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDMwLCAiSFAiLCBBRDE4ODRBX01PQklMRSksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzAzNywgIkhQIDIyMzBzIiwgQUQxODg0QV9MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwNTYsICJIUCIsIEFEMTg4NEFfTU9CSUxFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGU2LCAiSFAgNjczMGIiLCBBRDE4ODRBX0xBUFRPUCksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBlNywgIkhQIEVsaXRlQm9vayA4NTMwcCIsIEFEMTg4NEFfTEFQVE9QKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzNjE0LCAiSFAgNjczMHMiLCBBRDE4ODRBX0xBUFRPUCksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZmYwLCAweDMwNzAsICJIUCIsIEFEMTg4NEFfTU9CSUxFKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmZjAsIDB4MzBlMCwgIkhQIGxhcHRvcCIsIEFEMTg4NEFfTEFQVE9QKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MzYwMCwgIkhQIGxhcHRvcCIsIEFEMTg4NEFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGFjLCAiVGhpbmtwYWQgWDMwMCIsIEFEMTg4NEFfVEhJTktQQUQpLAogCXt9CiB9OwpAQCAtMzkyMSw3ICszOTMyLDcgQEAKIHN0YXRpYyBpbnQgcGF0Y2hfYWQxODg0YShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWM7Ci0JaW50IGJvYXJkX2NvbmZpZzsKKwlpbnQgZXJyLCBib2FyZF9jb25maWc7CiAKIAlzcGVjID0ga3phbGxvYyhzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMzkyOSw2ICszOTQwLDEzIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxMCk7CisJaWYgKGVyciA8IDApIHsKKwkJYWQxOTh4X2ZyZWUoY29kZWMpOworCQlyZXR1cm4gZXJyOworCX0KKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgxMCwgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShhZDE4ODRhX2RhY19uaWRzKTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IGFkMTg4NGFfZGFjX25pZHM7CkBAIC0zOTY2LDYgKzM5ODQsMTQgQEAKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAwOwogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gYWQxODg0YV9ocF91bnNvbF9ldmVudDsKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gYWQxODg0YV9ocF9pbml0OworCQkvKiBzZXQgdGhlIHVwcGVyLWxpbWl0IGZvciBtaXhlciBhbXAgdG8gMGRCIGZvciBhdm9pZGluZyB0aGUKKwkJICogcG9zc2libGUgZGFtYWdlIGJ5IG92ZXJsb2FkaW5nCisJCSAqLworCQlzbmRfaGRhX292ZXJyaWRlX2FtcF9jYXBzKGNvZGVjLCAweDIwLCBIREFfSU5QVVQsCisJCQkJCSAgKDB4MTcgPDwgQUNfQU1QQ0FQX09GRlNFVF9TSElGVCkgfAorCQkJCQkgICgweDE3IDw8IEFDX0FNUENBUF9OVU1fU1RFUFNfU0hJRlQpIHwKKwkJCQkJICAoMHgwNSA8PCBBQ19BTVBDQVBfU1RFUF9TSVpFX1NISUZUKSB8CisJCQkJCSAgKDEgPDwgQUNfQU1QQ0FQX01VVEVfU0hJRlQpKTsKIAkJYnJlYWs7CiAJY2FzZSBBRDE4ODRBX1RISU5LUEFEOgogCQlzcGVjLT5taXhlcnNbMF0gPSBhZDE5ODRhX3RoaW5rcGFkX21peGVyczsKQEAgLTQwODMsOCArNDEwOSw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA2LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA2LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA3LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTQwOTcsOCArNDEyMSw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgyMCwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDIwLCAweDA2LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA2LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMCwgMHgwNywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIwLCAweDA3LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkRpZ2l0YWwgTWljIEJvb3N0IiwgMHgxZiwgMHgwLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CkBAIC00MjU3LDcgKzQyNzksNyBAQAogc3RhdGljIGludCBwYXRjaF9hZDE4ODIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjOwotCWludCBib2FyZF9jb25maWc7CisJaW50IGVyciwgYm9hcmRfY29uZmlnOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTQyNjUsNiArNDI4NywxMyBAQAogCiAJY29kZWMtPnNwZWMgPSBzcGVjOwogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MTApOworCWlmIChlcnIgPCAwKSB7CisJCWFkMTk4eF9mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MTAsIDAsIEhEQV9PVVRQVVQpOworCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gNjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDM7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBhZDE4ODJfZGFjX25pZHM7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jbWVkaWEuYwppbmRleCBmM2ViZTgzLi5jOTIxMjY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NtZWRpYS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY21lZGlhLmMKQEAgLTY4MCwxMyArNjgwLDEzIEBACiAJCXN0cnVjdCBhdXRvX3Bpbl9jZmcgY2ZnOwogCiAJCS8qIGNvbGxlY3QgcGluIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLwotCQlwb3J0X2UgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MGYsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKLQkJcG9ydF9mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEwLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCXBvcnRfZSA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgwZik7CisJCXBvcnRfZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgxMCk7CiAJCXNwZWMtPmZyb250X3BhbmVsID0gMTsKIAkJaWYgKGdldF9kZWZjZmdfY29ubmVjdChwb3J0X2UpID09IEFDX0pBQ0tfUE9SVF9OT05FIHx8CiAJCSAgICBnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9mKSA9PSBBQ19KQUNLX1BPUlRfTk9ORSkgewotCQkJcG9ydF9nID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFmLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7Ci0JCQlwb3J0X2ggPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MjAsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwkJCXBvcnRfZyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgxZik7CisJCQlwb3J0X2ggPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIDB4MjApOwogCQkJc3BlYy0+Y2hhbm5lbF9tb2RlcyA9IGNtaTk4ODBfY2hhbm5lbF9tb2RlczsKIAkJCS8qIG5vIGZyb250IHBhbmVsICovCiAJCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KHBvcnRfZykgPT0gQUNfSkFDS19QT1JUX05PTkUgfHwKQEAgLTcwMyw4ICs3MDMsOCBAQAogCQkJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gY21pOTg4MF9jaGFubmVsX21vZGVzWzBdLmNoYW5uZWxzOwogCQl9IGVsc2UgewogCQkJc3BlYy0+aW5wdXRfbXV4ID0gJmNtaTk4ODBfYmFzaWNfbXV4OwotCQkJcG9ydF9zcGRpZmkgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIDB4MTMsIDAsIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKLQkJCXBvcnRfc3BkaWZvID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEyLCAwLCBBQ19WRVJCX0dFVF9DT05GSUdfREVGQVVMVCwgMCk7CisJCQlwb3J0X3NwZGlmaSA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgxMyk7CisJCQlwb3J0X3NwZGlmbyA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgMHgxMik7CiAJCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KHBvcnRfc3BkaWZvKSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKIAkJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IENNSV9ESUdfT1VUX05JRDsKIAkJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QocG9ydF9zcGRpZmkpICE9IEFDX0pBQ0tfUE9SVF9OT05FKQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCmluZGV4IDAxNzdlZjguLjFmMmFkNzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKQEAgLTU4LDYgKzU4LDcgQEAKIAogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNV07CiAJaW50IG51bV9taXhlcnM7CisJaGRhX25pZF90IHZtYXN0ZXJfbmlkOwogCiAJY29uc3Qgc3RydWN0IGhkYV92ZXJiICppbml0X3ZlcmJzWzVdOwkvKiBpbml0aWFsaXphdGlvbiB2ZXJicwogCQkJCQkJICogZG9uJ3QgZm9yZ2V0IE5VTEwKQEAgLTcyLDYgKzczLDcgQEAKIAkJCQkJICovCiAJdW5zaWduZWQgaW50IGN1cl9lYXBkOwogCXVuc2lnbmVkIGludCBocF9wcmVzZW50OworCXVuc2lnbmVkIGludCBub19hdXRvX21pYzsKIAl1bnNpZ25lZCBpbnQgbmVlZF9kYWNfZml4OwogCiAJLyogY2FwdHVyZSAqLwpAQCAtNDYxLDYgKzQ2MywyOSBAQAogCWtmcmVlKGNvZGVjLT5zcGVjKTsKIH0KIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dF9jYXB0dXJlX21peGVyc1tdID0geworCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKKwkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAorCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAorCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0CisJfSwKKwl7fQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNsYXZlX3ZvbHNbXSA9IHsKKwkiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsCisJIlNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc2xhdmVfc3dzW10gPSB7CisJIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLAorCSJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCisJTlVMTAorfTsKKwogc3RhdGljIGludCBjb25leGFudF9idWlsZF9jb250cm9scyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwpAQCAtNDg4LDYgKzUxMywzMiBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQorCisJLyogaWYgd2UgaGF2ZSBubyBtYXN0ZXIgY29udHJvbCwgbGV0J3MgY3JlYXRlIGl0ICovCisJaWYgKHNwZWMtPnZtYXN0ZXJfbmlkICYmCisJICAgICFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIpKSB7CisJCXVuc2lnbmVkIGludCB2bWFzdGVyX3Rsdls0XTsKKwkJc25kX2hkYV9zZXRfdm1hc3Rlcl90bHYoY29kZWMsIHNwZWMtPnZtYXN0ZXJfbmlkLAorCQkJCQlIREFfT1VUUFVULCB2bWFzdGVyX3Rsdik7CisJCWVyciA9IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwKKwkJCQkJICB2bWFzdGVyX3Rsdiwgc2xhdmVfdm9scyk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisJaWYgKHNwZWMtPnZtYXN0ZXJfbmlkICYmCisJICAgICFzbmRfaGRhX2ZpbmRfbWl4ZXJfY3RsKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIpKSB7CisJCWVyciA9IHNuZF9oZGFfYWRkX3ZtYXN0ZXIoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKKwkJCQkJICBOVUxMLCBzbGF2ZV9zd3MpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKHNwZWMtPmlucHV0X211eCkgeworCQllcnIgPSBzbmRfaGRhX2FkZF9uZXdfY3Rscyhjb2RlYywgY3h0X2NhcHR1cmVfbWl4ZXJzKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC03MTksMTMgKzc3MCw2IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ1X21peGVyc1tdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0Ci0JfSwKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnQgTWljIENhcHR1cmUgVm9sdW1lIiwgMHgxYSwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50IE1pYyBDYXB0dXJlIFN3aXRjaCIsIDB4MWEsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRXh0IE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCkBAIC03NTksMTMgKzgwMyw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0NV9taXhlcnNfaHA1MzBbXSA9IHsKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5pbmZvID0gY29uZXhhbnRfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IGNvbmV4YW50X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGNvbmV4YW50X211eF9lbnVtX3B1dAotCX0sCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50IE1pYyBDYXB0dXJlIFZvbHVtZSIsIDB4MWEsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkludCBNaWMgQ2FwdHVyZSBTd2l0Y2giLCAweDFhLCAweDAyLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkV4dCBNaWMgQ2FwdHVyZSBWb2x1bWUiLCAweDFhLCAweDAxLCBIREFfSU5QVVQpLApAQCAtMTAwMiwxNSArMTAzOSw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgY3h0NTA0NV9jZmdfdGJsW10gPSB7Ci0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBhNSwgIkhQIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBiMiwgIkhQIERWIFNlcmllcyIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjUsICJIUCBEVjIxMjAiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGI3LCAiSFAgRFY2MDAwWiIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYmIsICJIUCBEVjgwMDAiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGNkLCAiSFAgRFYgU2VyaWVzIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBjZiwgIkhQIERWOTUzM0VHIiwgQ1hUNTA0NV9MQVBUT1BfSFBTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBkNSwgIkhQIDUzMCIsIENYVDUwNDVfTEFQVE9QX0hQNTMwKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGQ5LCAiSFAgU3BhcnRhbiIsIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwM2MsIDB4ZmYwMCwgMHgzMDAwLCAiSFAgRFYgU2VyaWVzIiwKKwkJCSAgIENYVDUwNDVfTEFQVE9QX0hQU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMzEsICJUb3NoaWJhIFAxMDUiLCBDWFQ1MDQ1X0xBUFRPUF9NSUNTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDc1MywgIkJlbnEgUjU1RSIsIENYVDUwNDVfQkVOUSksCiAJU05EX1BDSV9RVUlSSygweDE3MzQsIDB4MTBhZCwgIkZ1aml0c3UgU2kxNTIwIiwgQ1hUNTA0NV9MQVBUT1BfTUlDU0VOU0UpLApAQCAtMTAyMCw4ICsxMDUxLDggQEAKIAlTTkRfUENJX1FVSVJLKDB4MTUwOSwgMHgxZTQwLCAiRklDIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCiAJU05EX1BDSV9RVUlSSygweDE1MDksIDB4MmYwNSwgIkZJQyIsIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHgxNTA5LCAweDJmMDYsICJGSUMiLCBDWFQ1MDQ1X0xBUFRPUF9IUE1JQ1NFTlNFKSwKLQlTTkRfUENJX1FVSVJLKDB4MTYzMSwgMHhjMTA2LCAiUGFja2FyZCBCZWxsIiwgQ1hUNTA0NV9MQVBUT1BfSFBNSUNTRU5TRSksCi0JU05EX1BDSV9RVUlSSygweDE2MzEsIDB4YzEwNywgIlBhY2thcmQgQmVsbCIsIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDE2MzEsIDB4ZmYwMCwgMHhjMTAwLCAiUGFja2FyZCBCZWxsIiwKKwkJCSAgIENYVDUwNDVfTEFQVE9QX0hQTUlDU0VOU0UpLAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweDIxMTEsICJDb25leGFudCBSZWZlcmVuY2UgYm9hcmQiLCBDWFQ1MDQ1X0xBUFRPUF9IUFNFTlNFKSwKIAl7fQogfTsKQEAgLTEwMzUsNiArMTA2Niw3IEBACiAJaWYgKCFzcGVjKQogCQlyZXR1cm4gLUVOT01FTTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CisJY29kZWMtPnBpbl9hbXBfd29ya2Fyb3VuZCA9IDE7CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShjeHQ1MDQ1X2RhY19uaWRzKTsKQEAgLTExMzQsNyArMTE2Niw3IEBACiAvKiBDb25leGFudCA1MDQ3IHNwZWNpZmljICovCiAjZGVmaW5lIENYVDUwNDdfU1BESUZfT1VUCTB4MTEKIAotc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ3X2RhY19uaWRzWzJdID0geyAweDEwLCAweDFjIH07CitzdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfZGFjX25pZHNbMV0gPSB7IDB4MTAgfTsgLyogMHgxYyAqLwogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDQ3X2FkY19uaWRzWzFdID0geyAweDEyIH07CiBzdGF0aWMgaGRhX25pZF90IGN4dDUwNDdfY2Fwc3JjX25pZHNbMV0gPSB7IDB4MWEgfTsKIApAQCAtMTE0MiwyMCArMTE3NCw2IEBACiAJeyAyLCBOVUxMIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA0N19jYXB0dXJlX3NvdXJjZSA9IHsKLQkubnVtX2l0ZW1zID0gMSwKLQkuaXRlbXMgPSB7Ci0JCXsgIk1pYyIsIDB4MiB9LAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCBjeHQ1MDQ3X2hwX2NhcHR1cmVfc291cmNlID0gewotCS5udW1faXRlbXMgPSAxLAotCS5pdGVtcyA9IHsKLQkJeyAiRXh0TWljIiwgMHgyIH0sCi0JfQotfTsKLQogc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNDdfdG9zaGliYV9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gMiwKIAkuaXRlbXMgPSB7CkBAIC0xMTc5LDcgKzExOTcsMTEgQEAKIAkgKiB0aGUgaGVhZHBob25lIGphY2sKIAkgKi8KIAliaXRzID0gKCFzcGVjLT5ocF9wcmVzZW50ICYmIHNwZWMtPmN1cl9lYXBkKSA/IDAgOiBIREFfQU1QX01VVEU7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFkLCBIREFfT1VUUFVULCAwLAorCS8qIE5PVEU6IENvbmV4YXQgY29kZWMgbmVlZHMgdGhlIGluZGV4IGZvciAqT1VUUFVUKiBhbXAgb2YKKwkgKiBwaW4gd2lkZ2V0cyB1bmxpa2Ugb3RoZXIgY29kZWNzLiAgSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvCisJICogc2V0IGluZGV4IDB4MDEgZm9yIHRoZSB2b2x1bWUgZnJvbSB0aGUgbWl4ZXIgYW1wIDB4MTkuCisJICovCisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFkLCBIREFfT1VUUFVULCAweDAxLAogCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwogCWJpdHMgPSBzcGVjLT5jdXJfZWFwZCA/IDAgOiBIREFfQU1QX01VVEU7CiAJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDEzLCBIREFfT1VUUFVULCAwLApAQCAtMTE4NywxNiArMTIwOSw2IEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qIGJpbmQgdm9sdW1lcyBvZiBib3RoIE5JRCAweDEzIChIZWFkcGhvbmVzKSBhbmQgMHgxZCAoU3BlYWtlcnMpICovCi1zdGF0aWMgc3RydWN0IGhkYV9iaW5kX2N0bHMgY3h0NTA0N19iaW5kX21hc3Rlcl92b2wgPSB7Ci0JLm9wcyA9ICZzbmRfaGRhX2JpbmRfdm9sLAotCS52YWx1ZXMgPSB7Ci0JCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxMywgMywgMCwgSERBX09VVFBVVCksCi0JCUhEQV9DT01QT1NFX0FNUF9WQUwoMHgxZCwgMywgMCwgSERBX09VVFBVVCksCi0JCTAKLQl9LAotfTsKLQogLyogbXV0ZSBpbnRlcm5hbCBzcGVha2VyIGlmIEhQIGlzIHBsdWdnZWQgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNDdfaHBfYXV0b211dGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xMjA3LDI3ICsxMjE5LDggQEAKIAkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOwogCiAJYml0cyA9IChzcGVjLT5ocF9wcmVzZW50IHx8ICFzcGVjLT5jdXJfZWFwZCkgPyBIREFfQU1QX01VVEUgOiAwOwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxZCwgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLQkvKiBNdXRlL1VubXV0ZSBQQ00gMiBmb3IgZ29vZCBtZWFzdXJlIC0gc29tZSBzeXN0ZW1zIG5lZWQgdGhpcyAqLwotCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxYywgSERBX09VVFBVVCwgMCwKLQkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKLX0KLQotLyogbXV0ZSBpbnRlcm5hbCBzcGVha2VyIGlmIEhQIGlzIHBsdWdnZWQgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNDdfaHAyX2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JdW5zaWduZWQgaW50IGJpdHM7Ci0KLQlzcGVjLT5ocF9wcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDEzLCAwLAotCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmIDB4ODAwMDAwMDA7Ci0KLQliaXRzID0gc3BlYy0+aHBfcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDA7Ci0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFkLCBIREFfT1VUUFVULCAwLAotCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOwotCS8qIE11dGUvVW5tdXRlIFBDTSAyIGZvciBnb29kIG1lYXN1cmUgLSBzb21lIHN5c3RlbXMgbmVlZCB0aGlzICovCi0Jc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDFjLCBIREFfT1VUUFVULCAwLAorCS8qIFNlZSB0aGUgbm90ZSBpbiBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQgKi8KKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MWQsIEhEQV9PVVRQVVQsIDB4MDEsCiAJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CiB9CiAKQEAgLTEyNjgsOTAgKzEyNjEsMzUgQEAKIAl9CiB9CiAKLS8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgLSBub24tRUFQRCBzeXN0ZW1zICovCi1zdGF0aWMgdm9pZCBjeHQ1MDQ3X2hwMl91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgIHVuc2lnbmVkIGludCByZXMpCi17Ci0JcmVzID4+PSAyNjsKLQlzd2l0Y2ggKHJlcykgewotCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6Ci0JCWN4dDUwNDdfaHAyX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6Ci0JCWN4dDUwNDdfaHBfYXV0b21pYyhjb2RlYyk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGN4dDUwNDdfbWl4ZXJzW10gPSB7Ci0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJ5cGFzcyBDYXB0dXJlIFZvbHVtZSIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBTd2l0Y2giLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBHYWluIFZvbHVtZSIsIDB4MWEsIDB4MCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBHYWluIFN3aXRjaCIsIDB4MWEsIDB4MCwgSERBX09VVFBVVCksCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19iYXNlX21peGVyc1tdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDE5LCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDFhLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkNhcHR1cmUgVm9sdW1lIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ2FwdHVyZSBTd2l0Y2giLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIlBDTSBWb2x1bWUiLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiUENNIFN3aXRjaCIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDTS0yIFZvbHVtZSIsIDB4MWMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQ00tMiBTd2l0Y2giLCAweDFjLCAweDAwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MWQsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MWQsIDB4MDAsIEhEQV9PVVRQVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCisJCS5nZXQgPSBjeHRfZWFwZF9nZXQsCisJCS5wdXQgPSBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMHgxMywKKwl9LAorCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2hwX3Nwa19taXhlcnNbXSA9IHsKKwkvKiBTZWUgdGhlIG5vdGUgaW4gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0ICovCisJSERBX0NPREVDX1ZPTFVNRSgiU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDFkLCAweDAxLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgxMywgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDEzLCAweDAwLCBIREFfT1VUUFVUKSwKLQogCXt9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N190b3NoaWJhX21peGVyc1tdID0gewotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwKLQkJLmluZm8gPSBjb25leGFudF9tdXhfZW51bV9pbmZvLAotCQkuZ2V0ID0gY29uZXhhbnRfbXV4X2VudW1fZ2V0LAotCQkucHV0ID0gY29uZXhhbnRfbXV4X2VudW1fcHV0Ci0JfSwKLQlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQnlwYXNzIENhcHR1cmUgVm9sdW1lIiwgMHgxOSwgMHgwMiwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiTWljIEJ5cGFzcyBDYXB0dXJlIFN3aXRjaCIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQ2FwdHVyZSBWb2x1bWUiLCAweDEyLCAweDAzLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUENNIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQ00gU3dpdGNoIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0JJTkRfVk9MKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgJmN4dDUwNDdfYmluZF9tYXN0ZXJfdm9sKSwKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwKLQkJLmluZm8gPSBjeHRfZWFwZF9pbmZvLAotCQkuZ2V0ID0gY3h0X2VhcGRfZ2V0LAotCQkucHV0ID0gY3h0NTA0N19ocF9tYXN0ZXJfc3dfcHV0LAotCQkucHJpdmF0ZV92YWx1ZSA9IDB4MTMsCi0JfSwKLQotCXt9Ci19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgY3h0NTA0N19ocF9taXhlcnNbXSA9IHsKLQl7Ci0JCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9ICJDYXB0dXJlIFNvdXJjZSIsCi0JCS5pbmZvID0gY29uZXhhbnRfbXV4X2VudW1faW5mbywKLQkJLmdldCA9IGNvbmV4YW50X211eF9lbnVtX2dldCwKLQkJLnB1dCA9IGNvbmV4YW50X211eF9lbnVtX3B1dAotCX0sCi0JSERBX0NPREVDX1ZPTFVNRSgiTWljIEJ5cGFzcyBDYXB0dXJlIFZvbHVtZSIsIDB4MTksIDB4MDIsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIk1pYyBCeXBhc3MgQ2FwdHVyZSBTd2l0Y2giLCAweDE5LDB4MDIsSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MTIsIDB4MDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkNhcHR1cmUgU3dpdGNoIiwgMHgxMiwgMHgwMywgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQ00gVm9sdW1lIiwgMHgxMCwgMHgwMCwgSERBX09VVFBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDTSBTd2l0Y2giLCAweDEwLCAweDAwLCBIREFfT1VUUFVUKSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDQ3X2hwX29ubHlfbWl4ZXJzW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTMsIDB4MDAsIEhEQV9PVVRQVVQpLAotCXsKLQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAotCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCi0JCS5nZXQgPSBjeHRfZWFwZF9nZXQsCi0JCS5wdXQgPSBjeHQ1MDQ3X2hwX21hc3Rlcl9zd19wdXQsCi0JCS5wcml2YXRlX3ZhbHVlID0gMHgxMywKLQl9LAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTEzNjIsOCArMTMwMCw4IEBACiAJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfEFDX1BJTkNUTF9WUkVGXzUwIH0sCiAJLyogSFAsIFNwZWFrZXIgICovCiAJezB4MTMsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sCi0JezB4MTMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MX0sCi0JezB4MWQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLDB4MH0sCisJezB4MTMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LCAvKiBtaXhlcigweDE5KSAqLworCXsweDFkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwgLyogbWl4ZXIoMHgxOSkgKi8KIAkvKiBSZWNvcmQgc2VsZWN0b3I6IE1pYyAqLwogCXsweDEyLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDAzfSwKIAl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKQEAgLTEzODMsMzAgKzEzMjEsNyBAQAogCiAvKiBjb25maWd1cmF0aW9uIGZvciBUb3NoaWJhIExhcHRvcHMgKi8KIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA0N190b3NoaWJhX2luaXRfdmVyYnNbXSA9IHsKLQl7MHgxMywgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MCB9LCAvKiBkZWZhdWx0IG9uICovCi0JLyogcGluIHNlbnNpbmcgb24gSFAgYW5kIE1pYyBqYWNrcyAqLwotCXsweDEzLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfSFBfRVZFTlR9LAotCXsweDE1LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOIHwgQ09ORVhBTlRfTUlDX0VWRU5UfSwKLQkvKiBTcGVha2VyIHJvdXRpbmcgKi8KLQl7MHgxZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgxfSwKLQl7fQotfTsKLQotLyogY29uZmlndXJhdGlvbiBmb3IgSFAgTGFwdG9wcyAqLwotc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBjeHQ1MDQ3X2hwX2luaXRfdmVyYnNbXSA9IHsKLQkvKiBwaW4gc2Vuc2luZyBvbiBIUCBqYWNrICovCi0JezB4MTMsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU4gfCBDT05FWEFOVF9IUF9FVkVOVH0sCi0JLyogMHgxMyBpcyBhY3R1YWxseSBzaGFyZWQgYnkgYm90aCBIUCBhbmQgc3BlYWtlcjsKLQkgKiBzZXR0aW5nIHRoZSBjb25uZWN0aW9uIHRvIDAgKD0weDE5KSBtYWtlcyB0aGUgbWFzdGVyIHZvbHVtZSBjb250cm9sCi0JICogd29ya2luZyBteXN0ZXJpb3VzbGx5Li4uCi0JICovCi0JezB4MTMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAotCS8qIFJlY29yZCBzZWxlY3RvcjogRXh0IE1pYyAqLwotCXsweDEyLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwweDAzfSwKLQl7MHgxOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKLQkgQUNfQU1QX1NFVF9JTlBVVHxBQ19BTVBfU0VUX1JJR0hUfEFDX0FNUF9TRVRfTEVGVHwweDE3fSwKLQkvKiBTcGVha2VyIHJvdXRpbmcgKi8KLQl7MHgxZCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsMHgxfSwKKwl7MHgxMywgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4MH0sIC8qIGRlZmF1bHQgb2ZmICovCiAJe30KIH07CiAKQEAgLTE1NzEsMTEgKzE0ODYsOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGN4dDUwNDdfY2ZnX3RibFtdID0gewotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYTAsICJIUCBEVjEwMDAiLCBDWFQ1MDQ3X0xBUFRPUCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzBhNSwgIkhQIERWNTIwMFQvRFY4MDAwVCIsIENYVDUwNDdfTEFQVE9QX0hQKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMGIyLCAiSFAgRFYyMDAwVC9EVjMwMDBUIiwgQ1hUNTA0N19MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwYjUsICJIUCBEVjIwMDBaIiwgQ1hUNTA0N19MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwY2YsICJIUCBEVjY3MDAiLCBDWFQ1MDQ3X0xBUFRPUCksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTAzYywgMHhmZjAwLCAweDMwMDAsICJIUCBEViBTZXJpZXMiLAorCQkJICAgQ1hUNTA0N19MQVBUT1ApLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMzEsICJUb3NoaWJhIFAxMDAiLCBDWFQ1MDQ3X0xBUFRPUF9FQVBEKSwKIAl7fQogfTsKQEAgLTE1ODksNiArMTUwMiw3IEBACiAJaWYgKCFzcGVjKQogCQlyZXR1cm4gLUVOT01FTTsKIAljb2RlYy0+c3BlYyA9IHNwZWM7CisJY29kZWMtPnBpbl9hbXBfd29ya2Fyb3VuZCA9IDE7CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOwogCXNwZWMtPm11bHRpb3V0Lm51bV9kYWNzID0gQVJSQVlfU0laRShjeHQ1MDQ3X2RhY19uaWRzKTsKQEAgLTE1OTcsOSArMTUxMSw4IEBACiAJc3BlYy0+bnVtX2FkY19uaWRzID0gMTsKIAlzcGVjLT5hZGNfbmlkcyA9IGN4dDUwNDdfYWRjX25pZHM7CiAJc3BlYy0+Y2Fwc3JjX25pZHMgPSBjeHQ1MDQ3X2NhcHNyY19uaWRzOwotCXNwZWMtPmlucHV0X211eCA9ICZjeHQ1MDQ3X2NhcHR1cmVfc291cmNlOwogCXNwZWMtPm51bV9taXhlcnMgPSAxOwotCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNDdfbWl4ZXJzOworCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNDdfYmFzZV9taXhlcnM7CiAJc3BlYy0+bnVtX2luaXRfdmVyYnMgPSAxOwogCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDQ3X2luaXRfdmVyYnM7CiAJc3BlYy0+c3BkaWZfcm91dGUgPSAwOwpAQCAtMTYxMywyMSArMTUyNiwyMiBAQAogCQkJCQkJICBjeHQ1MDQ3X2NmZ190YmwpOwogCXN3aXRjaCAoYm9hcmRfY29uZmlnKSB7CiAJY2FzZSBDWFQ1MDQ3X0xBUFRPUDoKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNDdfaHAyX3Vuc29sX2V2ZW50OworCQlzcGVjLT5udW1fbWl4ZXJzID0gMjsKKwkJc3BlYy0+bWl4ZXJzWzFdID0gY3h0NTA0N19ocF9zcGtfbWl4ZXJzOworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDQ3X0xBUFRPUF9IUDoKLQkJc3BlYy0+aW5wdXRfbXV4ID0gJmN4dDUwNDdfaHBfY2FwdHVyZV9zb3VyY2U7Ci0JCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMjsKLQkJc3BlYy0+aW5pdF92ZXJic1sxXSA9IGN4dDUwNDdfaHBfaW5pdF92ZXJiczsKLQkJc3BlYy0+bWl4ZXJzWzBdID0gY3h0NTA0N19ocF9taXhlcnM7CisJCXNwZWMtPm51bV9taXhlcnMgPSAyOworCQlzcGVjLT5taXhlcnNbMV0gPSBjeHQ1MDQ3X2hwX29ubHlfbWl4ZXJzOwogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA0N19ocF9pbml0OwogCQlicmVhazsKIAljYXNlIENYVDUwNDdfTEFQVE9QX0VBUEQ6CiAJCXNwZWMtPmlucHV0X211eCA9ICZjeHQ1MDQ3X3Rvc2hpYmFfY2FwdHVyZV9zb3VyY2U7CisJCXNwZWMtPm51bV9taXhlcnMgPSAyOworCQlzcGVjLT5taXhlcnNbMV0gPSBjeHQ1MDQ3X2hwX3Nwa19taXhlcnM7CiAJCXNwZWMtPm51bV9pbml0X3ZlcmJzID0gMjsKIAkJc3BlYy0+aW5pdF92ZXJic1sxXSA9IGN4dDUwNDdfdG9zaGliYV9pbml0X3ZlcmJzOwotCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDQ3X3Rvc2hpYmFfbWl4ZXJzOwogCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA0N19ocF91bnNvbF9ldmVudDsKIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwpAQCAtMTYzOCw2ICsxNTUyLDcgQEAKIAkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNDdfaHBfdW5zb2xfZXZlbnQ7CiAjZW5kaWYJCiAJfQorCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgxMzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY3Myw4ICsxNTg4LDExIEBACiAvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KIHN0YXRpYyB2b2lkIGN4dDUwNTFfcG9ydGJfYXV0b21pYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKKwlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXVuc2lnbmVkIGludCBwcmVzZW50OwogCisJaWYgKHNwZWMtPm5vX2F1dG9fbWljKQorCQlyZXR1cm47CiAJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxNywgMCwKIAkJCQkgICAgIEFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJgogCQlBQ19QSU5TRU5TRV9QUkVTRU5DRTsKQEAgLTE2OTAsNiArMTYwOCw4IEBACiAJdW5zaWduZWQgaW50IHByZXNlbnQ7CiAJaGRhX25pZF90IG5ld19hZGM7CiAKKwlpZiAoc3BlYy0+bm9fYXV0b19taWMpCisJCXJldHVybjsKIAlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDE4LCAwLAogCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKSAmCiAJCUFDX1BJTlNFTlNFX1BSRVNFTkNFOwpAQCAtMTc3Niw2ICsxNjk2LDIyIEBACiAJe30KIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBjeHQ1MDUxX2hwX2R2NjczNl9taXhlcnNbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgVm9sdW1lIiwgMHgxNCwgMHgwMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFN3aXRjaCIsIDB4MTQsIDB4MDAsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MTAsIDB4MDAsIEhEQV9PVVRQVVQpLAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLAorCQkuaW5mbyA9IGN4dF9lYXBkX2luZm8sCisJCS5nZXQgPSBjeHRfZWFwZF9nZXQsCisJCS5wdXQgPSBjeHQ1MDUxX2hwX21hc3Rlcl9zd19wdXQsCisJCS5wcml2YXRlX3ZhbHVlID0gMHgxYSwKKwl9LAorCisJe30KK307CisKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA1MV9pbml0X3ZlcmJzW10gPSB7CiAJLyogTGluZSBpbiwgTWljICovCiAJezB4MTcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKQEAgLTE4MDYsNiArMTc0Miw2NiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgY3h0NTA1MV9ocF9kdjY3MzZfaW5pdF92ZXJic1tdID0geworCS8qIExpbmUgaW4sIE1pYyAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHgwM30sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwfSwKKwl7MHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDB9LAorCS8qIFNQSyAgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUfSwKKwl7MHgxYSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIEhQLCBBbXAgICovCisJezB4MTYsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCS8qIERBQzEgKi8KKwl7MHgxMCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCS8qIFJlY29yZCBzZWxlY3RvcjogSW50IG1pYyAqLworCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpIHwgMHg0NH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAorCS8qIFNQRElGIHJvdXRlOiBQQ00gKi8KKwl7MHgxYywgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCisJLyogRUFQRCAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9FQVBEX0JUTEVOQUJMRSwgMHgyfSwgLyogZGVmYXVsdCBvbiAqLworCXsweDE2LCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFDX1VTUlNQX0VOfENPTkVYQU5UX0hQX0VWRU5UfSwKKwl7MHgxNywgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDWFQ1MDUxX1BPUlRCX0VWRU5UfSwKKwl7IH0gLyogZW5kICovCit9OworCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGN4dDUwNTFfbGVub3ZvX3gyMDBfaW5pdF92ZXJic1tdID0geworCS8qIExpbmUgaW4sIE1pYyAqLworCXsweDE3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHgwM30sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDAzfSwKKwl7MHgxOCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwfSwKKwl7MHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU59LAorCXsweDFkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApIHwgMHgwM30sCisJLyogU1BLICAqLworCXsweDFhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVR9LAorCXsweDFhLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogSFAsIEFtcCAgKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSFB9LAorCXsweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisJLyogRG9ja2luZyBIUCAqLworCXsweDE5LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKKwkvKiBEQUMxICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFfSwKKwkvKiBSZWNvcmQgc2VsZWN0b3I6IEludCBtaWMgKi8KKwl7MHgxNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKSB8IDB4NDR9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpIHwgMHg0NH0sCisJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCkgfCAweDQ0fSwKKwkvKiBTUERJRiByb3V0ZTogUENNICovCisJezB4MWMsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAorCS8qIEVBUEQgKi8KKwl7MHgxYSwgQUNfVkVSQl9TRVRfRUFQRF9CVExFTkFCTEUsIDB4Mn0sIC8qIGRlZmF1bHQgb24gKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTnxDT05FWEFOVF9IUF9FVkVOVH0sCisJezB4MTcsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQl9FVkVOVH0sCisJezB4MTgsIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q1hUNTA1MV9QT1JUQ19FVkVOVH0sCisJezB4MTksIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwgQUNfVVNSU1BfRU58Q09ORVhBTlRfSFBfRVZFTlR9LAorCXsgfSAvKiBlbmQgKi8KK307CisKIC8qIGluaXRpYWxpemUgamFjay1zZW5zaW5nLCB0b28gKi8KIHN0YXRpYyBpbnQgY3h0NTA1MV9pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMTgyMywxOCArMTgxOSwyNCBAQAogZW51bSB7CiAJQ1hUNTA1MV9MQVBUT1AsCSAvKiBMYXB0b3BzIHcvIEVBUEQgc3VwcG9ydCAqLwogCUNYVDUwNTFfSFAsCS8qIG5vIGRvY2tpbmcgKi8KKwlDWFQ1MDUxX0hQX0RWNjczNiwJLyogSFAgd2l0aG91dCBtaWMgc3dpdGNoICovCisJQ1hUNTA1MV9MRU5PVk9fWDIwMCwJLyogTGVub3ZvIFgyMDAgbGFwdG9wICovCiAJQ1hUNTA1MV9NT0RFTFMKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpjeHQ1MDUxX21vZGVsc1tDWFQ1MDUxX01PREVMU10gPSB7CiAJW0NYVDUwNTFfTEFQVE9QXQk9ICJsYXB0b3AiLAogCVtDWFQ1MDUxX0hQXQkJPSAiaHAiLAorCVtDWFQ1MDUxX0hQX0RWNjczNl0JPSAiaHAtZHY2NzM2IiwKKwlbQ1hUNTA1MV9MRU5PVk9fWDIwMF0JPSAibGVub3ZvLXgyMDAiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIGN4dDUwNTFfY2ZnX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDMwY2YsICJIUCBEVjY3MzYiLCBDWFQ1MDUxX0hQX0RWNjczNiksCiAJU05EX1BDSV9RVUlSSygweDE0ZjEsIDB4MDEwMSwgIkNvbmV4YW50IFJlZmVyZW5jZSBib2FyZCIsCiAJCSAgICAgIENYVDUwNTFfTEFQVE9QKSwKIAlTTkRfUENJX1FVSVJLKDB4MTRmMSwgMHg1MDUxLCAiSFAgU3BhcnRhbiAxLjEiLCBDWFQ1MDUxX0hQKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGYyLCAiTGVub3ZvIFgyMDAiLCBDWFQ1MDUxX0xFTk9WT19YMjAwKSwKIAl7fQogfTsKIApAQCAtMTg0Nyw2ICsxODQ5LDcgQEAKIAlpZiAoIXNwZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwljb2RlYy0+cGluX2FtcF93b3JrYXJvdW5kID0gMTsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBjb25leGFudF9wYXRjaF9vcHM7CiAJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA1MV9pbml0OwpAQCAtMTg2NywxNyArMTg3MCwyMiBAQAogCXNwZWMtPmN1cl9hZGMgPSAwOwogCXNwZWMtPmN1cl9hZGNfaWR4ID0gMDsKIAorCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDUxX2hwX3Vuc29sX2V2ZW50OworCiAJYm9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIENYVDUwNTFfTU9ERUxTLAogCQkJCQkJICBjeHQ1MDUxX21vZGVscywKIAkJCQkJCSAgY3h0NTA1MV9jZmdfdGJsKTsKIAlzd2l0Y2ggKGJvYXJkX2NvbmZpZykgewogCWNhc2UgQ1hUNTA1MV9IUDoKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNTFfaHBfdW5zb2xfZXZlbnQ7CiAJCXNwZWMtPm1peGVyc1swXSA9IGN4dDUwNTFfaHBfbWl4ZXJzOwogCQlicmVhazsKLQlkZWZhdWx0OgotCWNhc2UgQ1hUNTA1MV9MQVBUT1A6Ci0JCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDUxX2hwX3Vuc29sX2V2ZW50OworCWNhc2UgQ1hUNTA1MV9IUF9EVjY3MzY6CisJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDUxX2hwX2R2NjczNl9pbml0X3ZlcmJzOworCQlzcGVjLT5taXhlcnNbMF0gPSBjeHQ1MDUxX2hwX2R2NjczNl9taXhlcnM7CisJCXNwZWMtPm5vX2F1dG9fbWljID0gMTsKKwkJYnJlYWs7CisJY2FzZSBDWFQ1MDUxX0xFTk9WT19YMjAwOgorCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA1MV9sZW5vdm9feDIwMF9pbml0X3ZlcmJzOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggNmMyNmFmYy4uODIwOTc3OSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSAiaGRhX2NvZGVjLmgiCiAjaW5jbHVkZSAiaGRhX2xvY2FsLmgiCisjaW5jbHVkZSAiaGRhX2JlZXAuaCIKIAogI2RlZmluZSBBTEM4ODBfRlJPTlRfRVZFTlQJCTB4MDEKICNkZWZpbmUgQUxDODgwX0RDVk9MX0VWRU5UCQkweDAyCkBAIC03Nyw2ICs3OCw3IEBACiAJQUxDMjYwX0FDRVIsCiAJQUxDMjYwX1dJTEwsCiAJQUxDMjYwX1JFUExBQ0VSXzY3MlYsCisJQUxDMjYwX0ZBVk9SSVQxMDAsCiAjaWZkZWYgQ09ORklHX1NORF9ERUJVRwogCUFMQzI2MF9URVNULAogI2VuZGlmCkBAIC0xMDMsNiArMTA1LDcgQEAKIAlBTEMyNjJfTkVDLAogCUFMQzI2Ml9UT1NISUJBX1MwNiwKIAlBTEMyNjJfVE9TSElCQV9SWDEsCisJQUxDMjYyX1RZQU4sCiAJQUxDMjYyX0FVVE8sCiAJQUxDMjYyX01PREVMX0xBU1QgLyogbGFzdCB0YWcgKi8KIH07CkBAIC0yMzgsNiArMjQxLDEzIEBACiAJQUxDODgzX01PREVMX0xBU1QsCiB9OwogCisvKiBzdHlsZXMgb2YgY2FwdHVyZSBzZWxlY3Rpb24gKi8KK2VudW0geworCUNBUFRfTVVYID0gMCwJLyogb25seSBtdXggYmFzZWQgKi8KKwlDQVBUX01JWCwJLyogb25seSBtaXhlciBiYXNlZCAqLworCUNBUFRfMU1VWF9NSVgsCS8qIGZpcnN0IG11eCBhbmQgb3RoZXIgbWl4ZXJzICovCit9OworCiAvKiBmb3IgR1BJTyBQb2xsICovCiAjZGVmaW5lIEdQSU9fTUFTSwkweDAzCiAKQEAgLTI0Niw2ICsyNTYsNyBAQAogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXhlcnNbNV07CS8qIG1peGVyIGFycmF5cyAqLwogCXVuc2lnbmVkIGludCBudW1fbWl4ZXJzOwogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICpjYXBfbWl4ZXI7CS8qIGNhcHR1cmUgbWl4ZXIgKi8KKwl1bnNpZ25lZCBpbnQgYmVlcF9hbXA7CS8qIGJlZXAgYW1wIHZhbHVlLCBzZXQgdmlhIHNldF9iZWVwX2FtcCgpICovCiAKIAljb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgKmluaXRfdmVyYnNbNV07CS8qIGluaXRpYWxpemF0aW9uIHZlcmJzCiAJCQkJCQkgKiBkb24ndCBmb3JnZXQgTlVMTApAQCAtMjY5LDEzICsyODAsMTUgQEAKIAkJCQkJICogZGlnX291dF9uaWQgYW5kIGhwX25pZCBhcmUgb3B0aW9uYWwKIAkJCQkJICovCiAJaGRhX25pZF90IGFsdF9kYWNfbmlkOworCWhkYV9uaWRfdCBzbGF2ZV9kaWdfb3V0c1szXTsJLyogb3B0aW9uYWwgLSBmb3IgYXV0by1wYXJzaW5nICovCisJaW50IGRpZ19vdXRfdHlwZTsKIAogCS8qIGNhcHR1cmUgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX2FkY19uaWRzOwogCWhkYV9uaWRfdCAqYWRjX25pZHM7CiAJaGRhX25pZF90ICpjYXBzcmNfbmlkczsKIAloZGFfbmlkX3QgZGlnX2luX25pZDsJCS8qIGRpZ2l0YWwtaW4gTklEOyBvcHRpb25hbCAqLwotCXVuc2lnbmVkIGNoYXIgaXNfbWl4X2NhcHR1cmU7CS8qIG1hdHJpeC1zdHlsZSBjYXB0dXJlIChub24tbXV4KSAqLworCWludCBjYXB0dXJlX3N0eWxlOwkJLyogY2FwdHVyZSBzdHlsZSAoQ0FQVF8qKSAqLwogCiAJLyogY2FwdHVyZSBzb3VyY2UgKi8KIAl1bnNpZ25lZCBpbnQgbnVtX211eF9kZWZzOwpAQCAtMjkzLDcgKzMwNiw3IEBACiAJLyogZHluYW1pYyBjb250cm9scywgaW5pdF92ZXJicyBhbmQgaW5wdXRfbXV4ICovCiAJc3RydWN0IGF1dG9fcGluX2NmZyBhdXRvY2ZnOwogCXN0cnVjdCBzbmRfYXJyYXkga2N0bHM7Ci0Jc3RydWN0IGhkYV9pbnB1dF9tdXggcHJpdmF0ZV9pbXV4OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4IHByaXZhdGVfaW11eFszXTsKIAloZGFfbmlkX3QgcHJpdmF0ZV9kYWNfbmlkc1tBVVRPX0NGR19NQVhfT1VUU107CiAKIAkvKiBob29rcyAqLwpAQCAtMzA1LDYgKzMxOCw5IEBACiAJdW5zaWduZWQgaW50IGphY2tfcHJlc2VudDogMTsKIAl1bnNpZ25lZCBpbnQgbWFzdGVyX3N3OiAxOwogCisJLyogb3RoZXIgZmxhZ3MgKi8KKwl1bnNpZ25lZCBpbnQgbm9fYW5hbG9nIDoxOyAvKiBkaWdpdGFsIEkvTyBvbmx5ICovCisKIAkvKiBmb3IgdmlydHVhbCBtYXN0ZXIgKi8KIAloZGFfbmlkX3Qgdm1hc3Rlcl9uaWQ7CiAjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQpAQCAtMzE0LDEzICszMzAsNiBAQAogCS8qIGZvciBQTEwgZml4ICovCiAJaGRhX25pZF90IHBsbF9uaWQ7CiAJdW5zaWduZWQgaW50IHBsbF9jb2VmX2lkeCwgcGxsX2NvZWZfYml0OwotCi0jaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKLSNkZWZpbmUgQUxDX01BWF9QSU5TCTE2Ci0JdW5zaWduZWQgaW50IG51bV9waW5zOwotCWhkYV9uaWRfdCBwaW5fbmlkc1tBTENfTUFYX1BJTlNdOwotCXVuc2lnbmVkIGludCBwaW5fY2Znc1tBTENfTUFYX1BJTlNdOwotI2VuZGlmCiB9OwogCiAvKgpAQCAtMzM2LDYgKzM0NSw3IEBACiAJaGRhX25pZF90ICpkYWNfbmlkczsKIAloZGFfbmlkX3QgZGlnX291dF9uaWQ7CQkvKiBvcHRpb25hbCAqLwogCWhkYV9uaWRfdCBocF9uaWQ7CQkvKiBvcHRpb25hbCAqLworCWhkYV9uaWRfdCAqc2xhdmVfZGlnX291dHM7CiAJdW5zaWduZWQgaW50IG51bV9hZGNfbmlkczsKIAloZGFfbmlkX3QgKmFkY19uaWRzOwogCWhkYV9uaWRfdCAqY2Fwc3JjX25pZHM7CkBAIC0zOTIsNyArNDAyLDggQEAKIAltdXhfaWR4ID0gYWRjX2lkeCA+PSBzcGVjLT5udW1fbXV4X2RlZnMgPyAwIDogYWRjX2lkeDsKIAlpbXV4ID0gJnNwZWMtPmlucHV0X211eFttdXhfaWR4XTsKIAotCWlmIChzcGVjLT5pc19taXhfY2FwdHVyZSkgeworCWlmIChzcGVjLT5jYXB0dXJlX3N0eWxlICYmCisJICAgICEoc3BlYy0+Y2FwdHVyZV9zdHlsZSA9PSBDQVBUXzFNVVhfTUlYICYmICFhZGNfaWR4KSkgewogCQkvKiBNYXRyaXgtbWl4ZXIgc3R5bGUgKGUuZy4gQUxDODgyKSAqLwogCQl1bnNpZ25lZCBpbnQgKmN1cl92YWwgPSAmc3BlYy0+Y3VyX211eFthZGNfaWR4XTsKIAkJdW5zaWduZWQgaW50IGksIGlkeDsKQEAgLTc1MCw2ICs3NjEsMjQgQEAKICNlbmRpZiAgIC8qIENPTkZJR19TTkRfREVCVUcgKi8KIAogLyoKKyAqIHNldCB1cCB0aGUgaW5wdXQgcGluIGNvbmZpZyAoZGVwZW5kaW5nIG9uIHRoZSBnaXZlbiBhdXRvLXBpbiB0eXBlKQorICovCitzdGF0aWMgdm9pZCBhbGNfc2V0X2lucHV0X3BpbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCSAgICAgIGludCBhdXRvX3Bpbl90eXBlKQoreworCXVuc2lnbmVkIGludCB2YWwgPSBQSU5fSU47CisKKwlpZiAoYXV0b19waW5fdHlwZSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMpIHsKKwkJdW5zaWduZWQgaW50IHBpbmNhcDsKKwkJcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKKwkJcGluY2FwID0gKHBpbmNhcCAmIEFDX1BJTkNBUF9WUkVGKSA+PiBBQ19QSU5DQVBfVlJFRl9TSElGVDsKKwkJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9WUkVGXzgwKQorCQkJdmFsID0gUElOX1ZSRUY4MDsKKwl9CisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHZhbCk7Cit9CisKKy8qCiAgKi8KIHN0YXRpYyB2b2lkIGFkZF9taXhlcihzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMsIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICptaXgpCiB7CkBAIC04MTAsNiArODM5LDcgQEAKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IHByZXNldC0+bnVtX2RhY3M7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBwcmVzZXQtPmRhY19uaWRzOwogCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gcHJlc2V0LT5kaWdfb3V0X25pZDsKKwlzcGVjLT5tdWx0aW91dC5zbGF2ZV9kaWdfb3V0cyA9IHByZXNldC0+c2xhdmVfZGlnX291dHM7CiAJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gcHJlc2V0LT5ocF9uaWQ7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSBwcmVzZXQtPm51bV9tdXhfZGVmczsKQEAgLTkyMSw3ICs5NTEsNyBAQAogCQkJIEhEQV9BTVBfTVVURSwgcHJlc2VudCA/IEhEQV9BTVBfTVVURSA6IDApOwogfQogI2Vsc2UKLSNkZWZpbmUgYWxjX21pY19hdXRvbXV0ZShjb2RlYykgLyogTk9QICovCisjZGVmaW5lIGFsY19taWNfYXV0b211dGUoY29kZWMpIGRvIHt9IHdoaWxlKDApIC8qIE5PUCAqLwogI2VuZGlmIC8qIGRpc2FibGVkICovCiAKIC8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBIUCBqYWNrIHNlbnNpbmcgKi8KQEAgLTk1Miw3ICs5ODIsNyBAQAogCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MjAsIDAsIEFDX1ZFUkJfU0VUX0NPRUZfSU5ERVgsIDApOwogCXRtcCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMCwgMCwgQUNfVkVSQl9HRVRfUFJPQ19DT0VGLCAwKTsKIAlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCAweDIwLCAwLCBBQ19WRVJCX1NFVF9DT0VGX0lOREVYLCA3KTsKLQlpZiAoKHRtcCAmIDB4ZjApID09IDIpCisJaWYgKCh0bXAgJiAweGYwKSA9PSAweDIwKQogCQkvKiBhbGM4ODhTLVZDICovCiAJCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgyMCwgMCwKIAkJCQkgICBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4ODMwKTsKQEAgLTk5MSw4ICsxMDIxLDcgQEAKIAluaWQgPSAweDFkOwogCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzAyNjApCiAJCW5pZCA9IDB4MTc7Ci0JYXNzID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKKwlhc3MgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIG5pZCk7CiAJaWYgKCEoYXNzICYgMSkgJiYgIShhc3MgJiAweDEwMDAwMCkpCiAJCXJldHVybjsKIAlpZiAoKGFzcyA+PiAzMCkgIT0gMSkJLyogbm8gcGh5c2ljYWwgY29ubmVjdGlvbiAqLwpAQCAtMTE2NiwxNiArMTE5NSw4IEBACiAJCXJldHVybjsKIAogCWNmZyA9IHBpbmZpeFtxdWlyay0+dmFsdWVdOwotCWZvciAoOyBjZmctPm5pZDsgY2ZnKyspIHsKLQkJaW50IGk7Ci0JCXUzMiB2YWwgPSBjZmctPnZhbDsKLQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgY2ZnLT5uaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzAgKyBpLAotCQkJCSAgICB2YWwgJiAweGZmKTsKLQkJCXZhbCA+Pj0gODsKLQkJfQotCX0KKwlmb3IgKDsgY2ZnLT5uaWQ7IGNmZysrKQorCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIGNmZy0+bmlkLCBjZmctPnZhbCk7CiB9CiAKIC8qCkBAIC0xMzc1LDggKzEzOTYsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIEJvb3N0IiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNDgzLDggKzE1MDIsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDMsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE5LCAweDAsIEhEQV9PVVRQVVQpLAogCXsKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCkBAIC0xNTc4LDggKzE1OTUsNyBAQAogCQkJCSAgICAgc25kX2hkYV9taXhlcl9hbXBfc3dpdGNoX3B1dCk7CiB9CiAKLSNkZWZpbmUgREVGSU5FX0NBUE1JWChudW0pIFwKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGNfY2FwdHVyZV9taXhlciAjIyBudW1bXSA9IHsgXAorI2RlZmluZSBfREVGSU5FX0NBUE1JWChudW0pIFwKIAl7IFwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIFwKIAkJLm5hbWUgPSAiQ2FwdHVyZSBTd2l0Y2giLCBcCkBAIC0xNjAwLDcgKzE2MTYsOSBAQAogCQkuZ2V0ID0gYWxjX2NhcF92b2xfZ2V0LCBcCiAJCS5wdXQgPSBhbGNfY2FwX3ZvbF9wdXQsIFwKIAkJLnRsdiA9IHsgLmMgPSBhbGNfY2FwX3ZvbF90bHYgfSwgXAotCX0sIFwKKwl9CisKKyNkZWZpbmUgX0RFRklORV9DQVBTUkMobnVtKSBcCiAJeyBcCiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCiAJCS8qIC5uYW1lID0gIkNhcHR1cmUgU291cmNlIiwgKi8gXApAQCAtMTYwOSwxNSArMTYyNywyOCBAQAogCQkuaW5mbyA9IGFsY19tdXhfZW51bV9pbmZvLCBcCiAJCS5nZXQgPSBhbGNfbXV4X2VudW1fZ2V0LCBcCiAJCS5wdXQgPSBhbGNfbXV4X2VudW1fcHV0LCBcCi0JfSwgXAotCXsgfSAvKiBlbmQgKi8gXAorCX0KKworI2RlZmluZSBERUZJTkVfQ0FQTUlYKG51bSkgXAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19jYXB0dXJlX21peGVyICMjIG51bVtdID0geyBcCisJX0RFRklORV9DQVBNSVgobnVtKSwJCQkJICAgICAgXAorCV9ERUZJTkVfQ0FQU1JDKG51bSksCQkJCSAgICAgIFwKKwl7IH0gLyogZW5kICovCQkJCQkgICAgICBcCit9CisKKyNkZWZpbmUgREVGSU5FX0NBUE1JWF9OT1NSQyhudW0pIFwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGNfY2FwdHVyZV9taXhlcl9ub3NyYyAjIyBudW1bXSA9IHsgXAorCV9ERUZJTkVfQ0FQTUlYKG51bSksCQkJCQkgICAgXAorCXsgfSAvKiBlbmQgKi8JCQkJCQkgICAgXAogfQogCiAvKiB1cCB0byB0aHJlZSBBRENzICovCiBERUZJTkVfQ0FQTUlYKDEpOwogREVGSU5FX0NBUE1JWCgyKTsKIERFRklORV9DQVBNSVgoMyk7Ci0KK0RFRklORV9DQVBNSVhfTk9TUkMoMSk7CitERUZJTkVfQ0FQTUlYX05PU1JDKDIpOworREVGSU5FX0NBUE1JWF9OT1NSQygzKTsKIAogLyoKICAqIEFMQzg4MCA1LXN0YWNrIG1vZGVsCkBAIC0xNzA2LDggKzE3MzcsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKIAkJLm5hbWUgPSAiQ2hhbm5lbCBNb2RlIiwKQEAgLTE4ODQsMTMgKzE5MTMsNiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLS8qIGFkZGl0aW9uYWwgbWl4ZXJzIHRvIGFsYzg4MF9hc3VzX21peGVyICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3BjYmVlcF9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KIC8qIFRDTCBTNzAwICovCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjODgwX3RjbF9zNzAwX21peGVyW10gPSB7CiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKQEAgLTE5MjMsOCArMTk0NSw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9ICJDaGFubmVsIE1vZGUiLApAQCAtMTk5OSw2ICsyMDE5LDEzIEBACiAKIHN0YXRpYyB2b2lkIGFsY19mcmVlX2tjdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKTsKIAorLyogYWRkaXRpb25hbCBiZWVwIG1peGVyczsgdGhlIGFjdHVhbCBwYXJhbWV0ZXJzIGFyZSBvdmVyd3JpdHRlbiBhdCBidWlsZCAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsY19iZWVwX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAwLCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDAsIDAsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKwogc3RhdGljIGludCBhbGNfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC0yMDIwLDExICsyMDQ3LDEzIEBACiAJCQkJCQkgICAgc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7Ci0JCWVyciA9IHNuZF9oZGFfY3JlYXRlX3NwZGlmX3NoYXJlX3N3KGNvZGVjLAotCQkJCQkJICAgICZzcGVjLT5tdWx0aW91dCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQkJc3BlYy0+bXVsdGlvdXQuc2hhcmVfc3BkaWYgPSAxOworCQlpZiAoIXNwZWMtPm5vX2FuYWxvZykgeworCQkJZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfc2hhcmVfc3coY29kZWMsCisJCQkJCQkJICAgICZzcGVjLT5tdWx0aW91dCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJc3BlYy0+bXVsdGlvdXQuc2hhcmVfc3BkaWYgPSAxOworCQl9CiAJfQogCWlmIChzcGVjLT5kaWdfaW5fbmlkKSB7CiAJCWVyciA9IHNuZF9oZGFfY3JlYXRlX3NwZGlmX2luX2N0bHMoY29kZWMsIHNwZWMtPmRpZ19pbl9uaWQpOwpAQCAtMjAzMiw4ICsyMDYxLDI0IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCS8qIGNyZWF0ZSBiZWVwIGNvbnRyb2xzIGlmIG5lZWRlZCAqLworCWlmIChzcGVjLT5iZWVwX2FtcCkgeworCQlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldzsKKwkJZm9yIChrbmV3ID0gYWxjX2JlZXBfbWl4ZXI7IGtuZXctPm5hbWU7IGtuZXcrKykgeworCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bDsKKwkJCWtjdGwgPSBzbmRfY3RsX25ldzEoa25ldywgY29kZWMpOworCQkJaWYgKCFrY3RsKQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJa2N0bC0+cHJpdmF0ZV92YWx1ZSA9IHNwZWMtPmJlZXBfYW1wOworCQkJZXJyID0gc25kX2hkYV9jdGxfYWRkKGNvZGVjLCBrY3RsKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKIAkvKiBpZiB3ZSBoYXZlIG5vIG1hc3RlciBjb250cm9sLCBsZXQncyBjcmVhdGUgaXQgKi8KLQlpZiAoIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIikpIHsKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZyAmJgorCSAgICAhc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiKSkgewogCQl1bnNpZ25lZCBpbnQgdm1hc3Rlcl90bHZbNF07CiAJCXNuZF9oZGFfc2V0X3ZtYXN0ZXJfdGx2KGNvZGVjLCBzcGVjLT52bWFzdGVyX25pZCwKIAkJCQkJSERBX09VVFBVVCwgdm1hc3Rlcl90bHYpOwpAQCAtMjA0Miw3ICsyMDg3LDggQEAKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0KLQlpZiAoIXNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsICJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIikpIHsKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZyAmJgorCSAgICAhc25kX2hkYV9maW5kX21peGVyX2N0bChjb2RlYywgIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giKSkgewogCQllcnIgPSBzbmRfaGRhX2FkZF92bWFzdGVyKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsCiAJCQkJCSAgTlVMTCwgYWxjX3NsYXZlX3N3cyk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMjk1MSw2ICsyOTk3LDE0IEBACiAJCQkJCSAgICAgc3RyZWFtX3RhZywgZm9ybWF0LCBzdWJzdHJlYW0pOwogfQogCitzdGF0aWMgaW50IGFsYzg4MF9kaWdfcGxheWJhY2tfcGNtX2NsZWFudXAoc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKKwkJCQkJICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgIHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXJldHVybiBzbmRfaGRhX211bHRpX291dF9kaWdfY2xlYW51cChjb2RlYywgJnNwZWMtPm11bHRpb3V0KTsKK30KKwogc3RhdGljIGludCBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9jbG9zZShzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAogCQkJCQkgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCSBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKQEAgLTMwMzQsNyArMzA4OCw4IEBACiAJLm9wcyA9IHsKIAkJLm9wZW4gPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9vcGVuLAogCQkuY2xvc2UgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9jbG9zZSwKLQkJLnByZXBhcmUgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlCisJCS5wcmVwYXJlID0gYWxjODgwX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZSwKKwkJLmNsZWFudXAgPSBhbGM4ODBfZGlnX3BsYXliYWNrX3BjbV9jbGVhbnVwCiAJfSwKIH07CiAKQEAgLTMwNjEsNiArMzExNiw5IEBACiAJY29kZWMtPm51bV9wY21zID0gMTsKIAljb2RlYy0+cGNtX2luZm8gPSBpbmZvOwogCisJaWYgKHNwZWMtPm5vX2FuYWxvZykKKwkJZ290byBza2lwX2FuYWxvZzsKKwogCWluZm8tPm5hbWUgPSBzcGVjLT5zdHJlYW1fbmFtZV9hbmFsb2c7CiAJaWYgKHNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2spIHsKIAkJaWYgKHNuZF9CVUdfT04oIXNwZWMtPm11bHRpb3V0LmRhY19uaWRzKSkKQEAgLTMwODQsMTIgKzMxNDIsMTcgQEAKIAkJfQogCX0KIAorIHNraXBfYW5hbG9nOgogCS8qIFNQRElGIGZvciBzdHJlYW0gaW5kZXggIzEgKi8KIAlpZiAoc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgfHwgc3BlYy0+ZGlnX2luX25pZCkgewogCQljb2RlYy0+bnVtX3BjbXMgPSAyOworCSAgICAgICAgY29kZWMtPnNsYXZlX2RpZ19vdXRzID0gc3BlYy0+bXVsdGlvdXQuc2xhdmVfZGlnX291dHM7CiAJCWluZm8gPSBzcGVjLT5wY21fcmVjICsgMTsKIAkJaW5mby0+bmFtZSA9IHNwZWMtPnN0cmVhbV9uYW1lX2RpZ2l0YWw7Ci0JCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX1NQRElGOworCQlpZiAoc3BlYy0+ZGlnX291dF90eXBlKQorCQkJaW5mby0+cGNtX3R5cGUgPSBzcGVjLT5kaWdfb3V0X3R5cGU7CisJCWVsc2UKKwkJCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX1NQRElGOwogCQlpZiAoc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgJiYKIAkJICAgIHNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrKSB7CiAJCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSAqKHNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrKTsKQEAgLTMxMDQsNiArMzE2Nyw5IEBACiAJCWNvZGVjLT5zcGRpZl9zdGF0dXNfcmVzZXQgPSAxOwogCX0KIAorCWlmIChzcGVjLT5ub19hbmFsb2cpCisJCXJldHVybiAwOworCiAJLyogSWYgdGhlIHVzZSBvZiBtb3JlIHRoYW4gb25lIEFEQyBpcyByZXF1ZXN0ZWQgZm9yIHRoZSBjdXJyZW50CiAJICogbW9kZWwsIGNvbmZpZ3VyZSBhIHNlY29uZCBhbmFsb2cgY2FwdHVyZS1vbmx5IFBDTS4KIAkgKi8KQEAgLTMxNjIsNjUgKzMyMjgsMTcgQEAKIAogCWFsY19mcmVlX2tjdGxzKGNvZGVjKTsKIAlrZnJlZShzcGVjKTsKLQljb2RlYy0+c3BlYyA9IE5VTEw7IC8qIHRvIGJlIHN1cmUgKi8KKwlzbmRfaGRhX2RldGFjaF9iZWVwX2RldmljZShjb2RlYyk7CiB9CiAKICNpZmRlZiBTTkRfSERBX05FRURTX1JFU1VNRQotc3RhdGljIHZvaWQgc3RvcmVfcGluX2NvbmZpZ3Moc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0Jc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IG5pZCwgZW5kX25pZDsKLQotCWVuZF9uaWQgPSBjb2RlYy0+c3RhcnRfbmlkICsgY29kZWMtPm51bV9ub2RlczsKLQlmb3IgKG5pZCA9IGNvZGVjLT5zdGFydF9uaWQ7IG5pZCA8IGVuZF9uaWQ7IG5pZCsrKSB7Ci0JCXVuc2lnbmVkIGludCB3aWRfY2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKTsKLQkJdW5zaWduZWQgaW50IHdpZF90eXBlID0KLQkJCSh3aWRfY2FwcyAmIEFDX1dDQVBfVFlQRSkgPj4gQUNfV0NBUF9UWVBFX1NISUZUOwotCQlpZiAod2lkX3R5cGUgIT0gQUNfV0lEX1BJTikKLQkJCWNvbnRpbnVlOwotCQlpZiAoc3BlYy0+bnVtX3BpbnMgPj0gQVJSQVlfU0laRShzcGVjLT5waW5fbmlkcykpCi0JCQlicmVhazsKLQkJc3BlYy0+cGluX25pZHNbc3BlYy0+bnVtX3BpbnNdID0gbmlkOwotCQlzcGVjLT5waW5fY2Znc1tzcGVjLT5udW1fcGluc10gPQotCQkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULCAwKTsKLQkJc3BlYy0+bnVtX3BpbnMrKzsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc3VtZV9waW5fY29uZmlncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKLXsKLQlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKSB7Ci0JCWhkYV9uaWRfdCBwaW5fbmlkID0gc3BlYy0+cGluX25pZHNbaV07Ci0JCXVuc2lnbmVkIGludCBwaW5fY29uZmlnID0gc3BlYy0+cGluX2NmZ3NbaV07Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzAsCi0JCQkJICAgIHBpbl9jb25maWcgJiAweDAwMDAwMGZmKTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMSwKLQkJCQkgICAgKHBpbl9jb25maWcgJiAweDAwMDBmZjAwKSA+PiA4KTsKLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMiwKLQkJCQkgICAgKHBpbl9jb25maWcgJiAweDAwZmYwMDAwKSA+PiAxNik7Ci0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzMsCi0JCQkJICAgIHBpbl9jb25maWcgPj4gMjQpOwotCX0KLX0KLQogc3RhdGljIGludCBhbGNfcmVzdW1lKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXJlc3VtZV9waW5fY29uZmlncyhjb2RlYyk7CiAJY29kZWMtPnBhdGNoX29wcy5pbml0KGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9hbXAoY29kZWMpOwogCXNuZF9oZGFfY29kZWNfcmVzdW1lX2NhY2hlKGNvZGVjKTsKIAlyZXR1cm4gMDsKIH0KLSNlbHNlCi0jZGVmaW5lIHN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKQogI2VuZGlmCiAKIC8qCkBAIC0zNTU5LDcgKzM1NzcsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxODEsICJBU1VTIFA0R1BMIiwgQUxDODgwX0FTVVNfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MTk2LCAiQVNVUyBQNUdEMSIsIEFMQzg4MF82U1QpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxYjQsICJBU1VTIiwgQUxDODgwXzZTVCksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDAsICJBU1VTIiwgQUxDODgwX0FTVVMpLCAvKiBkZWZhdWx0IEFTVVMgKi8KKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNDMsICJBU1VTIiwgQUxDODgwX0FTVVMpLCAvKiBkZWZhdWx0IEFTVVMgKi8KIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg4MWEwLCAiU29ueSIsIEFMQzg4MF8zU1QpLAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgxZDYsICJTb255IiwgQUxDODgwXzNTVCksCiAJU05EX1BDSV9RVUlSSygweDEwN2IsIDB4MzAzMiwgIkdhdGV3YXkiLCBBTEM4ODBfNVNUKSwKQEAgLTM2MDIsNyArMzYyMCw4IEBACiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4ZTQwMCwgIkludGVsIG1vYm8iLCBBTEM4ODBfNVNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4ZTQwMSwgIkludGVsIG1vYm8iLCBBTEM4ODBfNVNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDgwODYsIDB4ZTQwMiwgIkludGVsIG1vYm8iLCBBTEM4ODBfNVNUX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDgwODYsIDAsICJJbnRlbCBtb2JvIiwgQUxDODgwXzNTVCksIC8qIGRlZmF1bHQgSW50ZWwgKi8KKwkvKiBkZWZhdWx0IEludGVsICovCisJU05EX1BDSV9RVUlSS19WRU5ET1IoMHg4MDg2LCAiSW50ZWwgbW9ibyIsIEFMQzg4MF8zU1QpLAogCVNORF9QQ0lfUVVJUksoMHhhMGEwLCAweDA1NjAsICJBT3BlbiBpOTE1R01tLUhGUyIsIEFMQzg4MF81U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4ZTgwMywgMHgxMDE5LCBOVUxMLCBBTEM4ODBfNlNUX0RJRyksCiAJe30KQEAgLTM3ODIsNyArMzgwMSw3IEBACiAJCS5pbnB1dF9tdXggPSAmYWxjODgwX2NhcHR1cmVfc291cmNlLAogCX0sCiAJW0FMQzg4MF9VTklXSUxMX0RJR10gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4MF9hc3VzX21peGVyLCBhbGM4ODBfcGNiZWVwX21peGVyIH0sCisJCS5taXhlcnMgPSB7IGFsYzg4MF9hc3VzX21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGM4ODBfdm9sdW1lX2luaXRfdmVyYnMsCiAJCQkJYWxjODgwX3Bpbl9hc3VzX2luaXRfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGM4ODBfYXN1c19kYWNfbmlkcyksCkBAIC0zODIwLDggKzM4MzksNyBAQAogCQkuaW5pdF9ob29rID0gYWxjODgwX3VuaXdpbGxfcDUzX2hwX2F1dG9tdXRlLAogCX0sCiAJW0FMQzg4MF9GVUpJVFNVXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjODgwX2Z1aml0c3VfbWl4ZXIsCi0JCQkgICAgYWxjODgwX3BjYmVlcF9taXhlciwgfSwKKwkJLm1peGVycyA9IHsgYWxjODgwX2Z1aml0c3VfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzg4MF92b2x1bWVfaW5pdF92ZXJicywKIAkJCQlhbGM4ODBfdW5pd2lsbF9wNTNfaW5pdF92ZXJicywKIAkgICAgICAgCQkJYWxjODgwX2JlZXBfaW5pdF92ZXJicyB9LApAQCAtNDExNCw3ICs0MTMyLDcgQEAKIHN0YXRpYyBpbnQgYWxjODgwX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKIAkJCQkJCWNvbnN0IHN0cnVjdCBhdXRvX3Bpbl9jZmcgKmNmZykKIHsKLQlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCWludCBpLCBlcnIsIGlkeDsKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKQEAgLTQyMDIsMTEgKzQyMjAsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKIAkJaWYgKGFsYzg4MF9pc19pbnB1dF9waW4obmlkKSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgaSA8PSBBVVRPX1BJTl9GUk9OVF9NSUMgPwotCQkJCQkgICAgUElOX1ZSRUY4MCA6IFBJTl9JTik7Ci0JCQlpZiAobmlkICE9IEFMQzg4MF9QSU5fQ0RfTklEKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzg4MF9QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKQEAgLTQyMjEsNyArNDIzNyw3IEBACiBzdGF0aWMgaW50IGFsYzg4MF9wYXJzZV9hdXRvX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAJc3RhdGljIGhkYV9uaWRfdCBhbGM4ODBfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKIAogCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLApAQCAtNDI1Miw4ICs0MjY4LDIzIEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKLQkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEM4ODBfRElHT1VUX05JRDsKKwkvKiBjaGVjayBtdWx0aXBsZSBTUERJRi1vdXQgKGZvciByZWNlbnQgY29kZWNzKSAqLworCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzOyBpKyspIHsKKwkJaGRhX25pZF90IGRpZ19uaWQ7CisJCWVyciA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLAorCQkJCQkgICAgICBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluc1tpXSwKKwkJCQkJICAgICAgJmRpZ19uaWQsIDEpOworCQlpZiAoZXJyIDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWkpCisJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IGRpZ19uaWQ7CisJCWVsc2UgeworCQkJc3BlYy0+bXVsdGlvdXQuc2xhdmVfZGlnX291dHMgPSBzcGVjLT5zbGF2ZV9kaWdfb3V0czsKKwkJCXNwZWMtPnNsYXZlX2RpZ19vdXRzW2kgLSAxXSA9IGRpZ19uaWQ7CisJCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHNwZWMtPnNsYXZlX2RpZ19vdXRzKSAtIDEpCisJCQkJYnJlYWs7CisJCX0KKwl9CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IEFMQzg4MF9ESUdJTl9OSUQ7CiAKQEAgLTQyNjMsOSArNDI5NCw4IEBACiAJYWRkX3ZlcmIoc3BlYywgYWxjODgwX3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC00MjgwLDIxICs0MzEwLDMzIEBACiAJCWFsY19pbml0aG9vayhjb2RlYyk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldF9jYXB0dXJlX21peGVyKHN0cnVjdCBhbGNfc3BlYyAqc3BlYykKK3sKKwlzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmNhcHNbMl1bM10gPSB7CisJCXsgYWxjX2NhcHR1cmVfbWl4ZXJfbm9zcmMxLAorCQkgIGFsY19jYXB0dXJlX21peGVyX25vc3JjMiwKKwkJICBhbGNfY2FwdHVyZV9taXhlcl9ub3NyYzMgfSwKKwkJeyBhbGNfY2FwdHVyZV9taXhlcjEsCisJCSAgYWxjX2NhcHR1cmVfbWl4ZXIyLAorCQkgIGFsY19jYXB0dXJlX21peGVyMyB9LAorCX07CisJaWYgKHNwZWMtPm51bV9hZGNfbmlkcyA+IDAgJiYgc3BlYy0+bnVtX2FkY19uaWRzIDw9IDMpIHsKKwkJaW50IG11eDsKKwkJaWYgKHNwZWMtPmlucHV0X211eCAmJiBzcGVjLT5pbnB1dF9tdXgtPm51bV9pdGVtcyA+IDEpCisJCQltdXggPSAxOworCQllbHNlCisJCQltdXggPSAwOworCQlzcGVjLT5jYXBfbWl4ZXIgPSBjYXBzW211eF1bc3BlYy0+bnVtX2FkY19uaWRzIC0gMV07CisJfQorfQorCisjZGVmaW5lIHNldF9iZWVwX2FtcChzcGVjLCBuaWQsIGlkeCwgZGlyKSBcCisJKChzcGVjKS0+YmVlcF9hbXAgPSBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgMywgaWR4LCBkaXIpKQorCiAvKgogICogT0ssIGhlcmUgd2UgaGF2ZSBmaW5hbGx5IHRoZSBwYXRjaCBmb3IgQUxDODgwCiAgKi8KIAotc3RhdGljIHZvaWQgc2V0X2NhcHR1cmVfbWl4ZXIoc3RydWN0IGFsY19zcGVjICpzcGVjKQotewotCXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqY2Fwc1szXSA9IHsKLQkJYWxjX2NhcHR1cmVfbWl4ZXIxLAotCQlhbGNfY2FwdHVyZV9taXhlcjIsCi0JCWFsY19jYXB0dXJlX21peGVyMywKLQl9OwotCWlmIChzcGVjLT5udW1fYWRjX25pZHMgPiAwICYmIHNwZWMtPm51bV9hZGNfbmlkcyA8PSAzKQotCQlzcGVjLT5jYXBfbWl4ZXIgPSBjYXBzW3NwZWMtPm51bV9hZGNfbmlkcyAtIDFdOwotfQotCiBzdGF0aWMgaW50IHBhdGNoX2FsYzg4MChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWM7CkBAIC00MzMwLDYgKzQzNzIsMTIgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg4MF9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg4MF9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC00MzU2LDYgKzQ0MDQsNyBAQAogCQl9CiAJfQogCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDBjOwogCkBAIC00NDYzLDYgKzQ1MTIsMjYgQEAKIAkJfSwKIAl9LAogfTsKKworLyogTWF4ZGF0YSBGYXZvcml0IDEwMFhTICovCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggYWxjMjYwX2Zhdm9yaXQxMDBfY2FwdHVyZV9zb3VyY2VzWzJdID0geworCXsKKwkJLm51bV9pdGVtcyA9IDIsCisJCS5pdGVtcyA9IHsKKwkJCXsgIkxpbmUvTWljIiwgMHgwIH0sCisJCQl7ICJDRCIsIDB4NCB9LAorCQl9LAorCX0sCisJeworCQkubnVtX2l0ZW1zID0gMywKKwkJLml0ZW1zID0geworCQkJeyAiTGluZS9NaWMiLCAweDAgfSwKKwkJCXsgIkNEIiwgMHg0IH0sCisJCQl7ICJNaXhlciIsIDB4NSB9LAorCQl9LAorCX0sCit9OworCiAvKgogICogVGhpcyBpcyBqdXN0IHBsYWNlLWhvbGRlciwgc28gdGhlcmUncyBzb21ldGhpbmcgZm9yIGFsY19idWlsZF9wY21zIHRvIGxvb2sKICAqIGF0IHdoZW4gaXQgY2FsY3VsYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhbm5lbHMuIEFMQzI2MCBoYXMgbm8gbWl4ZXIKQEAgLTQ1MDUsMTIgKzQ1NzQsNiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGMyNjBfcGNfYmVlcF9taXhlcltdID0gewotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCXsgfSAvKiBlbmQgKi8KLX07Ci0KIC8qIHVwZGF0ZSBIUCwgbGluZSBhbmQgbW9ubyBvdXQgcGlucyBhY2NvcmRpbmcgdG8gdGhlIG1hc3RlciBzd2l0Y2ggKi8KIHN0YXRpYyB2b2lkIGFsYzI2MF9ocF9tYXN0ZXJfdXBkYXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCSAgICBoZGFfbmlkX3QgaHAsIGhkYV9uaWRfdCBsaW5lLApAQCAtNDcwMiw4ICs0NzY1LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMvTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYy9MaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKIAlBTENfUElOX01PREUoIk1pYy9MaW5lIEphY2sgTW9kZSIsIDB4MTIsIEFMQ19QSU5fRElSX0lOKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDksIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0JJTkRfTVVURSgiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDA5LCAyLCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTQ3NDgsOCArNDgwOSwxOCBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDAyLCBIREFfSU5QVVQpLAogCUFMQ19QSU5fTU9ERSgiTGluZSBKYWNrIE1vZGUiLCAweDE0LCBBTENfUElOX0RJUl9JTk9VVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCisJeyB9IC8qIGVuZCAqLworfTsKKworLyogTWF4ZGF0YSBGYXZvcml0IDEwMFhTOiBvbmUgb3V0cHV0IGFuZCBvbmUgaW5wdXQgKDB4MTIpIGphY2sKKyAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzI2MF9mYXZvcml0MTAwX21peGVyW10gPSB7CisJSERBX0NPREVDX1ZPTFVNRSgiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsIDB4MDgsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiTWFzdGVyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDgsIDIsIEhEQV9JTlBVVCksCisJQUxDX1BJTl9NT0RFKCJPdXRwdXQgSmFjayBNb2RlIiwgMHgwZiwgQUxDX1BJTl9ESVJfSU5PVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUvTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTGluZS9NaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwLCBIREFfSU5QVVQpLAorCUFMQ19QSU5fTU9ERSgiTGluZS9NaWMgSmFjayBNb2RlIiwgMHgxMiwgQUxDX1BJTl9ESVJfSU4pLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTQ3NjcsOCArNDgzOCw2IEBACiAJQUxDX1BJTl9NT0RFKCJMaW5lIEphY2sgTW9kZSIsIDB4MTQsIEFMQ19QSU5fRElSX0lOT1VUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA1LCBIREFfSU5QVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTUxMjYsNiArNTE5NSw4OSBAQAogCXsgfQogfTsKIAorLyogSW5pdGlhbGlzYXRpb24gc2VxdWVuY2UgZm9yIE1heGRhdGEgRmF2b3JpdCAxMDBYUworICogKGFkYXB0ZWQgZnJvbSBBY2VyIGluaXQgdmVyYnMpLgorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2MF9mYXZvcml0MTAwX2luaXRfdmVyYnNbXSA9IHsKKwkvKiBHUElPIDAgZW5hYmxlcyB0aGUgb3V0cHV0IGphY2suCisJICogVHVybiB0aGlzIG9uIGFuZCByZWx5IG9uIHRoZSBzdGFuZGFyZCBtdXRlCisJICogbWV0aG9kcyB3aGVuZXZlciB0aGUgdXNlciB3YW50cyB0byB0dXJuIHRoZXNlIG91dHB1dHMgb2ZmLgorCSAqLworCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX01BU0ssIDB4MDF9LAorCXsweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RJUkVDVElPTiwgMHgwMX0sCisJezB4MDEsIEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgMHgwMX0sCisJLyogTGluZS9NaWMgaW5wdXQgamFjayBpcyBjb25uZWN0ZWQgdG8gTWljMSBwaW4gKi8KKwl7MHgxMiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjUwfSwKKwkvKiBFbnN1cmUgYWxsIG90aGVyIHVudXNlZCBwaW5zIGFyZSBkaXNhYmxlZCBhbmQgbXV0ZWQuICovCisJezB4MTAsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxMSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxMSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB9LAorCXsweDEzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMH0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAwfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCS8qIERpc2FibGUgZGlnaXRhbCAoU1BESUYpIHBpbnMgKi8KKwl7MHgwMywgQUNfVkVSQl9TRVRfRElHSV9DT05WRVJUXzEsIDB9LAorCXsweDA2LCBBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMSwgMH0sCisKKwkvKiBFbnN1cmUgTWljMSBhbmQgTGluZTEgcGluIHdpZGdldHMgdGFrZSBpbnB1dCBmcm9tIHRoZSBPVVQxIHN1bQorCSAqIGJ1cyB3aGVuIGFjdGluZyBhcyBvdXRwdXRzLgorCSAqLworCXsweDBiLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMH0sCisJezB4MGQsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAwfSwKKworCS8qIFN0YXJ0IHdpdGggb3V0cHV0IHN1bSB3aWRnZXRzIG11dGVkIGFuZCB0aGVpciBvdXRwdXQgZ2FpbnMgYXQgbWluICovCisJezB4MDgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwKKwl7MHgwOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LAorCXsweDA4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDA5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgwKX0sCisJezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDEpfSwKKwl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKKwl7MHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDBhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgxKX0sCisJezB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCisKKwkvKiBVbm11dGUgTGluZS1vdXQgcGluIHdpZGdldCBhbXAgbGVmdCBhbmQgcmlnaHQKKwkgKiAobm8gZXF1aXYgbWl4ZXIgY3RybCkKKwkgKi8KKwl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LAorCS8qIFVubXV0ZSBNaWMxIGFuZCBMaW5lMSBwaW4gd2lkZ2V0IGlucHV0IGJ1ZmZlcnMgc2luY2UgdGhleSBzdGFydCBhcworCSAqIGlucHV0cy4gSWYgdGhlIHBpbiBtb2RlIGlzIGNoYW5nZWQgYnkgdGhlIHVzZXIgdGhlIHBpbiBtb2RlIGNvbnRyb2wKKwkgKiB3aWxsIHRha2UgY2FyZSBvZiBlbmFibGluZyB0aGUgcGluJ3MgaW5wdXQvb3V0cHV0IGJ1ZmZlcnMgYXMgbmVlZGVkLgorCSAqIFRoZXJlZm9yZSB0aGVyZSdzIG5vIG5lZWQgdG8gZW5hYmxlIHRoZSBpbnB1dCBidWZmZXIgYXQgdGhpcworCSAqIHN0YWdlLgorCSAqLworCXsweDEyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKKworCS8qIE11dGUgY2FwdHVyZSBhbXAgbGVmdCBhbmQgcmlnaHQgKi8KKwl7MHgwNCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCS8qIFNldCBBREMgY29ubmVjdGlvbiBzZWxlY3QgdG8gbWF0Y2ggZGVmYXVsdCBtaXhlciBzZXR0aW5nIC0gbWljCisJICogKG9uIG1pYzEgcGluKQorCSAqLworCXsweDA0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisKKwkvKiBEbyBzaW1pbGFyIHdpdGggdGhlIHNlY29uZCBBREM6IG11dGUgY2FwdHVyZSBpbnB1dCBhbXAgYW5kCisJICogc2V0IEFEQyBjb25uZWN0aW9uIHRvIG1pYyB0byBtYXRjaCBBTFNBJ3MgZGVmYXVsdCBzdGF0ZS4KKwkgKi8KKwl7MHgwNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LAorCXsweDA1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCisKKwkvKiBNdXRlIGFsbCBpbnB1dHMgdG8gbWl4ZXIgd2lkZ2V0IChldmVuIHVuY29ubmVjdGVkIG9uZXMpICovCisJezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwgLyogbWljMSBwaW4gKi8KKwl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMSl9LCAvKiBtaWMyIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgyKX0sIC8qIGxpbmUxIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSgzKX0sIC8qIGxpbmUyIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg0KX0sIC8qIENEIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg1KX0sIC8qIEJlZXAtZ2VuIHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg2KX0sIC8qIExpbmUtb3V0IHBpbiAqLworCXsweDA3LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fTVVURSg3KX0sIC8qIEhQLXBpbiBwaW4gKi8KKworCXsgfQorfTsKKwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjBfd2lsbF92ZXJic1tdID0gewogCXsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUH0sCiAJezB4MGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAwfSwKQEAgLTUyNzIsOCArNTQyNCw2IEBACiAJSERBX0NPREVDX01VVEUoIkxJTkUyIFBsYXliYWNrIFN3aXRjaCIsIDB4MDcsIDB4MDMsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MDcsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIkJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwNywgMHgwNSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJMSU5FLU9VVCBsb29wYmFjayBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDA2LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJMSU5FLU9VVCBsb29wYmFjayBQbGF5YmFjayBTd2l0Y2giLCAweDA3LCAweDA2LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkhQLU9VVCBsb29wYmFjayBQbGF5YmFjayBWb2x1bWUiLCAweDA3LCAweDcsIEhEQV9JTlBVVCksCkBAIC01NDcxLDcgKzU2MjEsNyBAQAogc3RhdGljIGludCBhbGMyNjBfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJaW50IGksIGVyciwgaWR4OwogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewpAQCAtNTU0NiwxMSArNTY5Niw5IEBACiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwogCQlpZiAobmlkID49IDB4MTIpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgIFBJTl9WUkVGODAgOiBQSU5fSU4pOwotCQkJaWYgKG5pZCAhPSBBTEMyNjBfUElOX0NEX05JRCkKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOworCQkJaWYgKG5pZCAhPSBBTEMyNjBfUElOX0NEX05JRCAmJgorCQkJICAgIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApKQogCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJICAgIEFNUF9PVVRfTVVURSk7CkBAIC01NjIzLDcgKzU3NzEsNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzI2MF9ESUdPVVRfTklEOwogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CkBAIC01NjMxLDkgKzU3NzksOCBAQAogCWFkZF92ZXJiKHNwZWMsIGFsYzI2MF92b2x1bWVfaW5pdF92ZXJicyk7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAotCXN0b3JlX3Bpbl9jb25maWdzKGNvZGVjKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNTY3MCw2ICs1ODE3LDcgQEAKIAlbQUxDMjYwX0FDRVJdCQk9ICJhY2VyIiwKIAlbQUxDMjYwX1dJTExdCQk9ICJ3aWxsIiwKIAlbQUxDMjYwX1JFUExBQ0VSXzY3MlZdCT0gInJlcGxhY2VyIiwKKwlbQUxDMjYwX0ZBVk9SSVQxMDBdCT0gImZhdm9yaXQxMDAiLAogI2lmZGVmIENPTkZJR19TTkRfREVCVUcKIAlbQUxDMjYwX1RFU1RdCQk9ICJ0ZXN0IiwKICNlbmRpZgpAQCAtNTY3OSw2ICs1ODI3LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGMyNjBfY2ZnX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwN2IsICJBY2VyIEMyMHgiLCBBTEMyNjBfQUNFUiksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDA4ZiwgIkFjZXIiLCBBTEMyNjBfQUNFUiksCisJU05EX1BDSV9RVUlSSygweDE1MDksIDB4NDU0MCwgIkZhdm9yaXQgMTAwWFMiLCBBTEMyNjBfRkFWT1JJVDEwMCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjgwOCwgIkhQIGQ1NzAwIiwgQUxDMjYwX0hQXzMwMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDI4MGEsICJIUCBkNTc1MCIsIEFMQzI2MF9IUF8zMDEzKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzMDEwLCAiSFAiLCBBTEMyNjBfSFBfMzAxMyksCkBAIC01NzAxLDggKzU4NTAsNyBAQAogc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGMyNjBfcHJlc2V0c1tdID0gewogCVtBTEMyNjBfQkFTSUNdID0gewogCQkubWl4ZXJzID0geyBhbGMyNjBfYmFzZV9vdXRwdXRfbWl4ZXIsCi0JCQkgICAgYWxjMjYwX2lucHV0X21peGVyLAotCQkJICAgIGFsYzI2MF9wY19iZWVwX21peGVyIH0sCisJCQkgICAgYWxjMjYwX2lucHV0X21peGVyIH0sCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjBfaW5pdF92ZXJicyB9LAogCQkubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGFsYzI2MF9kYWNfbmlkcyksCiAJCS5kYWNfbmlkcyA9IGFsYzI2MF9kYWNfbmlkcywKQEAgLTU3ODEsNiArNTkyOSwxOCBAQAogCQkubnVtX211eF9kZWZzID0gQVJSQVlfU0laRShhbGMyNjBfYWNlcl9jYXB0dXJlX3NvdXJjZXMpLAogCQkuaW5wdXRfbXV4ID0gYWxjMjYwX2FjZXJfY2FwdHVyZV9zb3VyY2VzLAogCX0sCisJW0FMQzI2MF9GQVZPUklUMTAwXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjYwX2Zhdm9yaXQxMDBfbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzI2MF9mYXZvcml0MTAwX2luaXRfdmVyYnMgfSwKKwkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjBfZGFjX25pZHMpLAorCQkuZGFjX25pZHMgPSBhbGMyNjBfZGFjX25pZHMsCisJCS5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzI2MF9kdWFsX2FkY19uaWRzKSwKKwkJLmFkY19uaWRzID0gYWxjMjYwX2R1YWxfYWRjX25pZHMsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjBfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYwX21vZGVzLAorCQkubnVtX211eF9kZWZzID0gQVJSQVlfU0laRShhbGMyNjBfZmF2b3JpdDEwMF9jYXB0dXJlX3NvdXJjZXMpLAorCQkuaW5wdXRfbXV4ID0gYWxjMjYwX2Zhdm9yaXQxMDBfY2FwdHVyZV9zb3VyY2VzLAorCX0sCiAJW0FMQzI2MF9XSUxMXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjYwX3dpbGxfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2MF9pbml0X3ZlcmJzLCBhbGMyNjBfd2lsbF92ZXJicyB9LApAQCAtNTg1Nyw2ICs2MDE3LDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEMyNjBfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGMyNjBfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtNTg4Miw2ICs2MDQ4LDcgQEAKIAkJfQogCX0KIAlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgwNywgMHgwNSwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwODsKIApAQCAtNjA1Myw4ICs2MjIwLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNjA4MSw4ICs2MjQ2LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNjEzNCw4ICs2Mjk3LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNjI0NCw4ICs2NDA1LDEwIEBACiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE4LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkxpbmUgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTGluZSBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAorCS8qIEZJWE1FOiB0aGlzIGxvb2tzIHN1c3BpY2lvdXMuLi4KIAlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKKwkqLwogCXsgfSAvKiBlbmQgKi8KIH07CiAKQEAgLTY4NzcsMTkgKzcwNDAsOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewogCQloZGFfbmlkX3QgbmlkID0gc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldOwotCQl1bnNpZ25lZCBpbnQgdnJlZjsKIAkJaWYgKCFuaWQpCiAJCQljb250aW51ZTsKLQkJdnJlZiA9IFBJTl9JTjsKLQkJaWYgKDEgLyppIDw9IEFVVE9fUElOX0ZST05UX01JQyovKSB7Ci0JCQl1bnNpZ25lZCBpbnQgcGluY2FwOwotCQkJcGluY2FwID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKLQkJCWlmICgocGluY2FwID4+IEFDX1BJTkNBUF9WUkVGX1NISUZUKSAmCi0JCQkgICAgQUNfUElOQ0FQX1ZSRUZfODApCi0JCQkJdnJlZiA9IFBJTl9WUkVGODA7Ci0JCX0KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIHZyZWYpOworCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBBVVRPX1BJTl9GUk9OVF9NSUMgLyppKi8pOwogCQlpZiAoZ2V0X3djYXBzKGNvZGVjLCBuaWQpICYgQUNfV0NBUF9PVVRfQU1QKQogCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKQEAgLTY5MDAsMTggKzcwNTMsMjEgQEAKIHN0YXRpYyB2b2lkIGFsYzg4Ml9hdXRvX2luaXRfaW5wdXRfc3JjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gc3BlYy0+aW5wdXRfbXV4OwogCWludCBjOwogCiAJZm9yIChjID0gMDsgYyA8IHNwZWMtPm51bV9hZGNfbmlkczsgYysrKSB7CiAJCWhkYV9uaWRfdCBjb25uX2xpc3RbSERBX01BWF9OVU1fSU5QVVRTXTsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmNhcHNyY19uaWRzW2NdOworCQl1bnNpZ25lZCBpbnQgbXV4X2lkeDsKKwkJY29uc3Qgc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXg7CiAJCWludCBjb25ucywgbXV0ZSwgaWR4LCBpdGVtOwogCiAJCWNvbm5zID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubl9saXN0LAogCQkJCQkJQVJSQVlfU0laRShjb25uX2xpc3QpKTsKIAkJaWYgKGNvbm5zIDwgMCkKIAkJCWNvbnRpbnVlOworCQltdXhfaWR4ID0gYyA+PSBzcGVjLT5udW1fbXV4X2RlZnMgPyAwIDogYzsKKwkJaW11eCA9ICZzcGVjLT5pbnB1dF9tdXhbbXV4X2lkeF07CiAJCWZvciAoaWR4ID0gMDsgaWR4IDwgY29ubnM7IGlkeCsrKSB7CiAJCQkvKiBpZiB0aGUgY3VycmVudCBjb25uZWN0aW9uIGlzIHRoZSBzZWxlY3RlZCBvbmUsCiAJCQkgKiB1bm11dGUgaXQgYXMgZGVmYXVsdCAtIG90aGVyd2lzZSBtdXRlIGl0CkBAIC02OTI0LDggKzcwODAsMjAgQEAKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgbXV0ZSk7CisJCQkvKiBjaGVjayBpZiB3ZSBoYXZlIGEgc2VsZWN0b3Igb3IgbWl4ZXIKKwkJCSAqIHdlIGNvdWxkIGNoZWNrIGZvciB0aGUgd2lkZ2V0IHR5cGUgaW5zdGVhZCwgYnV0CisJCQkgKiBqdXN0IGNoZWNrIGZvciBBbXAtSW4gcHJlc2VuY2UgKGluIGNhc2Ugb2YgbWl4ZXIKKwkJCSAqIHdpdGhvdXQgYW1wLWluIHRoZXJlIGlzIHNvbWV0aGluZyB3cm9uZywgdGhpcworCQkJICogZnVuY3Rpb24gc2hvdWxkbid0IGJlIHVzZWQgb3IgY2Fwc3JjIG5pZCBpcyB3cm9uZykKKwkJCSAqLworCQkJaWYgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfSU5fQU1QKQorCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAorCQkJCQkJICAgIG11dGUpOworCQkJZWxzZSBpZiAobXV0ZSAhPSBBTVBfSU5fTVVURShpZHgpKQorCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJCSAgICBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwKKwkJCQkJCSAgICBpZHgpOwogCQl9CiAJfQogfQpAQCAtNzA1NCw2ICs3MjIyLDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4ODJfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4ODJfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtNzA3NCw3ICs3MjQ4LDcgQEAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGM4ODJfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGM4ODJfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKIAotCXNwZWMtPmlzX21peF9jYXB0dXJlID0gMTsgLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKi8KKwlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7IC8qIG1hdHJpeC1zdHlsZSBjYXB0dXJlICovCiAJaWYgKCFzcGVjLT5hZGNfbmlkcyAmJiBzcGVjLT5pbnB1dF9tdXgpIHsKIAkJLyogY2hlY2sgd2hldGhlciBOSUQgMHgwNyBpcyB2YWxpZCAqLwogCQl1bnNpZ25lZCBpbnQgd2NhcCA9IGdldF93Y2Fwcyhjb2RlYywgMHgwNyk7CkBAIC03MDkxLDYgKzcyNjUsNyBAQAogCQl9CiAJfQogCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDBjOwogCkBAIC03MTQyLDEwICs3MzE3LDE0IEBACiAJMHgwOSwgMHgwOAogfTsKIAorI2RlZmluZSBhbGM4ODlfYWRjX25pZHMJCWFsYzg4MF9hZGNfbmlkcworCiBzdGF0aWMgaGRhX25pZF90IGFsYzg4M19jYXBzcmNfbmlkc1syXSA9IHsgMHgyMywgMHgyMiB9OwogCiBzdGF0aWMgaGRhX25pZF90IGFsYzg4M19jYXBzcmNfbmlkc19yZXZbMl0gPSB7IDB4MjIsIDB4MjMgfTsKIAorI2RlZmluZSBhbGM4ODlfY2Fwc3JjX25pZHMJYWxjODgyX2NhcHNyY19uaWRzCisKIC8qIGlucHV0IE1VWCAqLwogLyogRklYTUU6IHNob3VsZCBiZSBhIG1hdHJpeC10eXBlIGlucHV0IHNvdXJjZSBzZWxlY3Rpb24gKi8KIApAQCAtNzM2Myw4ICs3NTQyLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzQyNyw4ICs3NjA0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzQ1Miw4ICs3NjI3LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzQ3OCw4ICs3NjUxLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzUwMyw4ICs3Njc0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDEsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtNzkxMiwzNiArODA4MSw4MyBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF92ZXJic1tdID0gewotCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCS8qIEZyb250OiBvdXRwdXQgMCAoMHgwYykgKi8KLQl7MHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAkvKiBSZWFyIDogb3V0cHV0IDEgKDB4MGQpICovCi0JezB4MTgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyfSwJLyogQ0xGRSA6IG91dHB1dCAyICgweDBlKSAqLwotCXsgfQotfTsKLQogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfNnN0X2RlbGxfdmVyYnNbXSA9IHsKIAl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBTEM4ODBfSFBfRVZFTlQgfCBBQ19VU1JTUF9FTn0sCiAJeyB9CiB9OwogCitzdGF0aWMgdm9pZCBhbGM4ODhfM3N0X2hwX2Zyb250X2F1dG9tdXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBwcmVzZW50LCBiaXRzOworCisJcHJlc2VudCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYiwgMCwKKwkJCUFDX1ZFUkJfR0VUX1BJTl9TRU5TRSwgMCkgJiAweDgwMDAwMDAwOworCWJpdHMgPSBwcmVzZW50ID8gSERBX0FNUF9NVVRFIDogMDsKKwlzbmRfaGRhX2NvZGVjX2FtcF9zdGVyZW8oY29kZWMsIDB4MTQsIEhEQV9PVVRQVVQsIDAsCisJCQkJIEhEQV9BTVBfTVVURSwgYml0cyk7CisJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE2LCBIREFfT1VUUFVULCAwLAorCQkJCSBIREFfQU1QX01VVEUsIGJpdHMpOworCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxOCwgSERBX09VVFBVVCwgMCwKKwkJCQkgSERBX0FNUF9NVVRFLCBiaXRzKTsKK30KKworc3RhdGljIHZvaWQgYWxjODg4XzNzdF9ocF91bnNvbF9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVzKQoreworCXN3aXRjaCAocmVzID4+IDI2KSB7CisJY2FzZSBBTEM4ODBfSFBfRVZFTlQ6CisJCWFsYzg4OF8zc3RfaHBfZnJvbnRfYXV0b211dGUoY29kZWMpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjODg4XzNzdF9ocF92ZXJic1tdID0geworCXsweDE0LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCS8qIEZyb250OiBvdXRwdXQgMCAoMHgwYykgKi8KKwl7MHgxNiwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDF9LAkvKiBSZWFyIDogb3V0cHV0IDEgKDB4MGQpICovCisJezB4MTgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyfSwJLyogQ0xGRSA6IG91dHB1dCAyICgweDBlKSAqLworCXsweDFiLCBBQ19WRVJCX1NFVF9VTlNPTElDSVRFRF9FTkFCTEUsIEFMQzg4MF9IUF9FVkVOVCB8IEFDX1VTUlNQX0VOfSwKKwl7IH0gLyogZW5kICovCit9OworCisvKgorICogMmNoIG1vZGUKKyAqLwogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGM4ODhfM3N0X2hwXzJjaF9pbml0W10gPSB7CiAJeyAweDE4LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAogCXsgMHgxNiwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURSB9LAotCXsgfQorCXsgfSAvKiBlbmQgKi8KIH07CiAKKy8qCisgKiA0Y2ggbW9kZQorICovCitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfNGNoX2luaXRbXSA9IHsKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX1ZSRUY4MCB9LAorCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFIH0sCisJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKKwl7IDB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCisJeyAweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMSB9LAorCXsgfSAvKiBlbmQgKi8KK307CisKKy8qCisgKiA2Y2ggbW9kZQorICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzg4OF8zc3RfaHBfNmNoX2luaXRbXSA9IHsKIAl7IDB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX09VVCB9LAogCXsgMHgxOCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEUgfSwKKwl7IDB4MTgsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDAyIH0sCiAJeyAweDE2LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwKIAl7IDB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFIH0sCi0JeyB9CisJeyAweDE2LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMSB9LAorCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX2NoYW5uZWxfbW9kZSBhbGM4ODhfM3N0X2hwX21vZGVzWzJdID0geworc3RhdGljIHN0cnVjdCBoZGFfY2hhbm5lbF9tb2RlIGFsYzg4OF8zc3RfaHBfbW9kZXNbM10gPSB7CiAJeyAyLCBhbGM4ODhfM3N0X2hwXzJjaF9pbml0IH0sCisJeyA0LCBhbGM4ODhfM3N0X2hwXzRjaF9pbml0IH0sCiAJeyA2LCBhbGM4ODhfM3N0X2hwXzZjaF9pbml0IH0sCiB9OwogCkBAIC04MjAyLDcgKzg0MTgsNyBAQAogewogCXN3aXRjaCAocmVzID4+IDI2KSB7CiAJY2FzZSBBTEM4ODBfSFBfRVZFTlQ6Ci0JCXByaW50aygiaHBfZXZlbnRcbiIpOworCQkvKiBwcmludGsoS0VSTl9ERUJVRyAiaHBfZXZlbnRcbiIpOyAqLwogCQlhbGM4ODhfNnN0X2RlbGxfZnJvbnRfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAl9CkBAIC04NDYxLDYgKzg2NzcsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDY2NjgsICJFQ1MiLCBBTEM4ODNfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAwNmMsICJBY2VyIEFzcGlyZSA5ODEwIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMDkwLCAiQWNlciBBc3BpcmUiLCBBTEM4ODNfQUNFUl9BU1BJUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxMGEsICJBY2VyIEZlcnJhcmkgNTAwMCIsIEFMQzg4M19BQ0VSX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDExMCwgIkFjZXIgQXNwaXJlIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTEyLCAiQWNlciBBc3BpcmUgOTMwMyIsIEFMQzg4M19BQ0VSX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDEyMSwgIkFjZXIgQXNwaXJlIDU5MjBHIiwgQUxDODgzX0FDRVJfQVNQSVJFKSwKQEAgLTg0NjgsMTcgKzg2ODUsMjEgQEAKIAkJQUxDODg4X0FDRVJfQVNQSVJFXzQ5MzBHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTNmLCAiQWNlciBBc3BpcmUgNTkzMEciLAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNTcsICJBY2VyIFgzMjAwIiwgQUxDODgzX0FVVE8pLAorCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAxNTgsICJBY2VyIEFYMTcwMC1VMzcwMEEiLCBBTEM4ODNfQVVUTyksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDE1ZSwgIkFjZXIgQXNwaXJlIDY5MzBHIiwKIAkJQUxDODg4X0FDRVJfQVNQSVJFXzQ5MzBHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMTY2LCAiQWNlciBBc3BpcmUgNjUzMEciLAogCQlBTEM4ODhfQUNFUl9BU1BJUkVfNDkzMEcpLAotCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAwLCAiQWNlciBsYXB0b3AiLCBBTEM4ODNfQUNFUiksIC8qIGRlZmF1bHQgQWNlciAqLworCS8qIGRlZmF1bHQgQWNlciAqLworCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTAyNSwgIkFjZXIgbGFwdG9wIiwgQUxDODgzX0FDRVIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI4LCAweDAyMGQsICJEZWxsIEluc3Bpcm9uIDUzMCIsIEFMQzg4OF82U1RfREVMTCksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmEzZCwgIkhQIFBhdmlsbGlvbiIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTRmLCAiSFAgU2FtYmEiLCBBTEM4ODhfM1NUX0hQKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyYTYwLCAiSFAgTHVja25vdyIsIEFMQzg4OF8zU1RfSFApLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNjEsICJIUCBOZXR0bGUiLCBBTEM4ODNfNlNUX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MmE2NiwgIkhQIEFjYWNpYSIsIEFMQzg4OF8zU1RfSFApLAorCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDJhNzIsICJIUCBFZHVjLmFyIiwgQUxDODg4XzNTVF9IUCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3MywgIkFzdXMgTTkwViIsIEFMQzg4OF9BU1VTX005MFYpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgyNDksICJBc3VzIE0yQS1WTSBIRE1JIiwgQUxDODgzXzNTVF82Y2hfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4Mjg0LCAiQXN1cyBaMzdFIiwgQUxDODgzXzZTVF9ESUcpLApAQCAtODUxOCw3ICs4NzM5LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxMDgzLCAiQWJpdCBJUDM1LVBSTyIsIEFMQzg4M182U1RfRElHKSwKIAlTTkRfUENJX1FVSVJLKDB4MTU1OCwgMHgwNzIxLCAiQ2xldm8gbGFwdG9wIE03MjBSIiwgQUxDODgzX0NMRVZPX003MjApLAogCVNORF9QQ0lfUVVJUksoMHgxNTU4LCAweDA3MjIsICJDbGV2byBsYXB0b3AgTTcyMFNSIiwgQUxDODgzX0NMRVZPX003MjApLAotCVNORF9QQ0lfUVVJUksoMHgxNTU4LCAwLCAiQ2xldm8gbGFwdG9wIiwgQUxDODgzX0xBUFRPUF9FQVBEKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE1NTgsICJDbGV2byBsYXB0b3AiLCBBTEM4ODNfTEFQVE9QX0VBUEQpLAogCVNORF9QQ0lfUVVJUksoMHgxNWQ5LCAweDg3ODAsICJTdXBlcm1pY3JvIFBEU0JBIiwgQUxDODgzXzNTVF82Y2gpLAogCVNORF9QQ0lfUVVJUksoMHgxNjFmLCAweDIwNTQsICJNZWRpb24gbGFwdG9wIiwgQUxDODgzX01FRElPTiksCiAJU05EX1BDSV9RVUlSSygweDE3MzQsIDB4MTEwNywgIkZTQyBBTUlMTyBYaTI1NTAiLApAQCAtODU0Myw2ICs4NzY0LDEwIEBACiAJe30KIH07CiAKK3N0YXRpYyBoZGFfbmlkX3QgYWxjMTIwMF9zbGF2ZV9kaWdfb3V0c1tdID0geworCUFMQzg4M19ESUdPVVRfTklELCAwLAorfTsKKwogc3RhdGljIHN0cnVjdCBhbGNfY29uZmlnX3ByZXNldCBhbGM4ODNfcHJlc2V0c1tdID0gewogCVtBTEM4ODNfM1NUXzJjaF9ESUddID0gewogCQkubWl4ZXJzID0geyBhbGM4ODNfM1NUXzJjaF9taXhlciB9LApAQCAtODc3OCw2ICs5MDAzLDggQEAKIAkJLmNoYW5uZWxfbW9kZSA9IGFsYzg4OF8zc3RfaHBfbW9kZXMsCiAJCS5uZWVkX2RhY19maXggPSAxLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjODg4XzNzdF9ocF91bnNvbF9ldmVudCwKKwkJLmluaXRfaG9vayA9IGFsYzg4OF8zc3RfaHBfZnJvbnRfYXV0b211dGUsCiAJfSwKIAlbQUxDODg4XzZTVF9ERUxMXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjODgzX2Jhc2VfbWl4ZXIsIGFsYzg4M19jaG1vZGVfbWl4ZXIgfSwKQEAgLTg4ODMsNiArOTExMCw3IEBACiAJCS5kYWNfbmlkcyA9IGFsYzg4M19kYWNfbmlkcywKIAkJLmRpZ19vdXRfbmlkID0gQUxDMTIwMF9ESUdPVVRfTklELAogCQkuZGlnX2luX25pZCA9IEFMQzg4M19ESUdJTl9OSUQsCisJCS5zbGF2ZV9kaWdfb3V0cyA9IGFsYzEyMDBfc2xhdmVfZGlnX291dHMsCiAJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGM4ODNfc2l4c3RhY2tfbW9kZXMpLAogCQkuY2hhbm5lbF9tb2RlID0gYWxjODgzX3NpeHN0YWNrX21vZGVzLAogCQkuaW5wdXRfbXV4ID0gJmFsYzg4M19jYXB0dXJlX3NvdXJjZSwKQEAgLTg5NTAsMTEgKzkxNzgsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKIAkJaWYgKGFsYzg4M19pc19pbnB1dF9waW4obmlkKSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAotCQkJCQkgICAgKGkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJICAgICBQSU5fVlJFRjgwIDogUElOX0lOKSk7Ci0JCQlpZiAobmlkICE9IEFMQzg4M19QSU5fQ0RfTklEKQorCQkJYWxjX3NldF9pbnB1dF9waW4oY29kZWMsIG5pZCwgaSk7CisJCQlpZiAobmlkICE9IEFMQzg4M19QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJICAgIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsCiAJCQkJCQkgICAgQU1QX09VVF9NVVRFKTsKQEAgLTg5NjksNiArOTE5NSw4IEBACiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGVyciA9IGFsYzg4MF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYyk7CisJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnID0gJnNwZWMtPmF1dG9jZmc7CisJaW50IGk7CiAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTg5ODIsNiArOTIxMCwyNiBAQAogCS8qIGhhY2sgLSBvdmVycmlkZSB0aGUgaW5pdCB2ZXJicyAqLwogCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBhbGM4ODNfYXV0b19pbml0X3ZlcmJzOwogCisJLyogc2V0dXAgaW5wdXRfbXV4IGZvciBBTEM4ODkgKi8KKwlpZiAoY29kZWMtPnZlbmRvcl9pZCA9PSAweDEwZWMwODg5KSB7CisJCS8qIGRpZ2l0YWwtbWljIGlucHV0IHBpbiBpcyBleGNsdWRlZCBpbiBhbGM4ODBfYXV0b19jcmVhdGUuLigpCisJCSAqIGJlY2F1c2UgaXQncyB1bmRlciAweDE4CisJCSAqLworCQlpZiAoY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX01JQ10gPT0gMHgxMiB8fAorCQkgICAgY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0ZST05UX01JQ10gPT0gMHgxMikgeworCQkJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOworCQkJZm9yIChpID0gMTsgaSA8IDM7IGkrKykKKwkJCQltZW1jcHkoJnNwZWMtPnByaXZhdGVfaW11eFtpXSwKKwkJCQkgICAgICAgJnNwZWMtPnByaXZhdGVfaW11eFswXSwKKwkJCQkgICAgICAgc2l6ZW9mKHNwZWMtPnByaXZhdGVfaW11eFswXSkpOworCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9ICJJbnQgRE1pYyI7CisJCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gMHgwYjsKKwkJCWltdXgtPm51bV9pdGVtcysrOworCQkJc3BlYy0+bnVtX211eF9kZWZzID0gMzsKKwkJCXNwZWMtPmlucHV0X211eCA9IHNwZWMtPnByaXZhdGVfaW11eDsKKwkJfQorCX0KKwogCXJldHVybiAxOyAvKiBjb25maWcgZm91bmQgKi8KIH0KIApAQCAtOTAzMyw2ICs5MjgxLDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM4ODNfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM4ODNfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtOTA0NSwxNCArOTI5OSwzNiBAQAogCQkJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzg4OCBBbmFsb2ciOwogCQkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM4ODggRGlnaXRhbCI7CiAJCX0KKwkJaWYgKCFzcGVjLT5udW1fYWRjX25pZHMpIHsKKwkJCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzKTsKKwkJCXNwZWMtPmFkY19uaWRzID0gYWxjODgzX2FkY19uaWRzOworCQl9CisJCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCisJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzg4M19jYXBzcmNfbmlkczsKKwkJc3BlYy0+Y2FwdHVyZV9zdHlsZSA9IENBUFRfTUlYOyAvKiBtYXRyaXgtc3R5bGUgY2FwdHVyZSAqLwogCQlicmVhazsKIAljYXNlIDB4MTBlYzA4ODk6CiAJCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEM4ODkgQW5hbG9nIjsKIAkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM4ODkgRGlnaXRhbCI7CisJCWlmICghc3BlYy0+bnVtX2FkY19uaWRzKSB7CisJCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4OV9hZGNfbmlkcyk7CisJCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4OV9hZGNfbmlkczsKKwkJfQorCQlpZiAoIXNwZWMtPmNhcHNyY19uaWRzKQorCQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODlfY2Fwc3JjX25pZHM7CisJCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUXzFNVVhfTUlYOyAvKiAxbXV4L05taXgtc3R5bGUKKwkJCQkJCQljYXB0dXJlICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNwZWMtPnN0cmVhbV9uYW1lX2FuYWxvZyA9ICJBTEM4ODMgQW5hbG9nIjsKIAkJc3BlYy0+c3RyZWFtX25hbWVfZGlnaXRhbCA9ICJBTEM4ODMgRGlnaXRhbCI7CisJCWlmICghc3BlYy0+bnVtX2FkY19uaWRzKSB7CisJCQlzcGVjLT5udW1fYWRjX25pZHMgPSBBUlJBWV9TSVpFKGFsYzg4M19hZGNfbmlkcyk7CisJCQlzcGVjLT5hZGNfbmlkcyA9IGFsYzg4M19hZGNfbmlkczsKKwkJfQorCQlpZiAoIXNwZWMtPmNhcHNyY19uaWRzKQorCQkJc3BlYy0+Y2Fwc3JjX25pZHMgPSBhbGM4ODNfY2Fwc3JjX25pZHM7CisJCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsgLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKi8KIAkJYnJlYWs7CiAJfQogCkBAIC05MDYzLDE1ICs5MzM5LDkgQEAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGM4ODNfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGM4ODNfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKIAotCWlmICghc3BlYy0+bnVtX2FkY19uaWRzKSB7Ci0JCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODgzX2FkY19uaWRzKTsKLQkJc3BlYy0+YWRjX25pZHMgPSBhbGM4ODNfYWRjX25pZHM7Ci0JfQotCWlmICghc3BlYy0+Y2Fwc3JjX25pZHMpCi0JCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODgzX2NhcHNyY19uaWRzOwotCXNwZWMtPmlzX21peF9jYXB0dXJlID0gMTsgLyogbWF0cml4LXN0eWxlIGNhcHR1cmUgKi8KIAlpZiAoIXNwZWMtPmNhcF9taXhlcikKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKQEAgLTkxMjQsOCArOTM5NCw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEUoIkZyb250IE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBCb29zdCIsIDB4MTksIDAsIEhEQV9JTlBVVCksCi0JLyogSERBX0NPREVDX1ZPTFVNRSgiUEMgQmVlcCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCSAgIEhEQV9DT0RFQ19NVVRFKCJQQyBCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksICovCiAJSERBX0NPREVDX1ZPTFVNRSgiSGVhZHBob25lIFBsYXliYWNrIFZvbHVtZSIsIDB4MEQsIDB4MCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDE1LCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiTW9ubyBQbGF5YmFjayBWb2x1bWUiLCAweDBlLCAyLCAweDAsIEhEQV9PVVRQVVQpLApAQCAtOTE0Niw4ICs5NDE0LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQkvKiBIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JICAgSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwgKi8KIAkvKkhEQV9DT0RFQ19WT0xVTUUoIkhlYWRwaG9uZSBQbGF5YmFjayBWb2x1bWUiLCAweDBELCAweDAsIEhEQV9PVVRQVVQpLCovCiAJSERBX0NPREVDX01VVEUoIkhlYWRwaG9uZSBQbGF5YmFjayBTd2l0Y2giLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTkyNTYsOCArOTUyMiw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkFVWCBJTiBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA2LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJBVVggSU4gUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNiwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCkBAIC05Mjg2LDggKzk1NTAsNiBAQAogCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIEJlZXAgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC05NDM1LDYgKzk2OTcsNjcgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjYyX3R5YW5fbWl4ZXJbXSA9IHsKKwlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYywgMHgwLCBIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJBdXggUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiQXV4IFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDYsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAorCXsgfSAvKiBlbmQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgYWxjMjYyX3R5YW5fdmVyYnNbXSA9IHsKKwkvKiBIZWFkcGhvbmUgYXV0b211dGUgKi8KKwl7MHgxYiwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IEFMQzg4MF9IUF9FVkVOVH0sCisJezB4MWIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQfSwKKwl7MHgxNSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MDB9LAorCisJLyogUDExIEFVWF9JTiwgd2hpdGUgNC1waW4gY29ubmVjdG9yICovCisJezB4MTQsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKKwl7MHgxNCwgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMSwgMHhlMX0sCisJezB4MTQsIEFDX1ZFUkJfU0VUX0NPTkZJR19ERUZBVUxUX0JZVEVTXzIsIDB4OTN9LAorCXsweDE0LCBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18zLCAweDE5fSwKKworCXt9Cit9OworCisvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgSFAgamFjayBzZW5zaW5nICovCitzdGF0aWMgdm9pZCBhbGMyNjJfdHlhbl9hdXRvbXV0ZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBpbnQgbXV0ZTsKKwl1bnNpZ25lZCBpbnQgcHJlc2VudDsKKworCXNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgMHgxYiwgMCwgQUNfVkVSQl9TRVRfUElOX1NFTlNFLCAwKTsKKwlwcmVzZW50ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCAweDFiLCAwLAorCQkJCSAgICAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKTsKKwlwcmVzZW50ID0gKHByZXNlbnQgJiAweDgwMDAwMDAwKSAhPSAwOworCWlmIChwcmVzZW50KSB7CisJCS8qIG11dGUgbGluZSBvdXRwdXQgb24gQVRYIHBhbmVsICovCisJCXNuZF9oZGFfY29kZWNfYW1wX3N0ZXJlbyhjb2RlYywgMHgxNSwgSERBX09VVFBVVCwgMCwKKwkJCQkJIEhEQV9BTVBfTVVURSwgSERBX0FNUF9NVVRFKTsKKwl9IGVsc2UgeworCQkvKiB1bm11dGUgbGluZSBvdXRwdXQgaWYgbmVjZXNzYXJ5ICovCisJCW11dGUgPSBzbmRfaGRhX2NvZGVjX2FtcF9yZWFkKGNvZGVjLCAweDFiLCAwLCBIREFfT1VUUFVULCAwKTsKKwkJc25kX2hkYV9jb2RlY19hbXBfc3RlcmVvKGNvZGVjLCAweDE1LCBIREFfT1VUUFVULCAwLAorCQkJCQkgSERBX0FNUF9NVVRFLCBtdXRlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGFsYzI2Ml90eWFuX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVzKQoreworCWlmICgocmVzID4+IDI2KSAhPSBBTEM4ODBfSFBfRVZFTlQpCisJCXJldHVybjsKKwlhbGMyNjJfdHlhbl9hdXRvbXV0ZShjb2RlYyk7Cit9CisKICNkZWZpbmUgYWxjMjYyX2NhcHR1cmVfbWl4ZXIJCWFsYzg4Ml9jYXB0dXJlX21peGVyCiAjZGVmaW5lIGFsYzI2Ml9jYXB0dXJlX2FsdF9taXhlcglhbGM4ODJfY2FwdHVyZV9hbHRfbWl4ZXIKIApAQCAtOTkwMSw4ICsxMDIyNCw2IEBACiAJfSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIk1pYyBCb29zdCIsIDB4MTgsIDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKQEAgLTEwNDc0LDggKzEwNzk1LDE0IEBACiAJCQkJCSAgIGFsYzI2Ml9pZ25vcmUpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpCisJaWYgKCFzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykgeworCQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cyB8fCBzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pIHsKKwkJCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CisJCQlzcGVjLT5ub19hbmFsb2cgPSAxOworCQkJZ290byBkaWdfb25seTsKKwkJfQogCQlyZXR1cm4gMDsgLyogY2FuJ3QgZmluZCB2YWxpZCBCSU9TIHBpbiBjb25maWcgKi8KKwl9CiAJZXJyID0gYWxjMjYyX2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTEwNDg1LDggKzEwODEyLDExIEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKyBkaWdfb25seToKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykgewogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzI2Ml9ESUdPVVRfTklEOworCQlzcGVjLT5kaWdfb3V0X3R5cGUgPSBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfdHlwZVswXTsKKwl9CiAJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IEFMQzI2Ml9ESUdJTl9OSUQ7CiAKQEAgLTEwNDk1LDEzICsxMDgyNSwxMiBAQAogCiAJYWRkX3ZlcmIoc3BlYywgYWxjMjYyX3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWVyciA9IGFsY19hdXRvX2FkZF9taWNfYm9vc3QoY29kZWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xMDU0MywyMSArMTA4NzIsMTkgQEAKIAlbQUxDMjYyX1VMVFJBXQkJPSAidWx0cmEiLAogCVtBTEMyNjJfTEVOT1ZPXzMwMDBdCT0gImxlbm92by0zMDAwIiwKIAlbQUxDMjYyX05FQ10JCT0gIm5lYyIsCisJW0FMQzI2Ml9UWUFOXQkJPSAidHlhbiIsCiAJW0FMQzI2Ml9BVVRPXQkJPSAiYXV0byIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjYyX2NmZ190YmxbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTAwMiwgMHg0MzdiLCAiSGlwcG8iLCBBTEMyNjJfSElQUE8pLAogCVNORF9QQ0lfUVVJUksoMHgxMDMzLCAweDg4OTUsICJORUMgVmVyc2EgUzkxMDAiLCBBTEMyNjJfTkVDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMmZlLCAiSFAgeHc5NDAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTJmZiwgIkhQIHh3NDU1MCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMDYsICJIUCB4dzg2MDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzA3LCAiSFAgeHc2NjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwOCwgIkhQIHh3NDYwMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDEzMDksICJIUCB4dzQqMDAiLCBBTEMyNjJfSFBfQlBDKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxMzBhLCAiSFAgeHc2KjAwIiwgQUxDMjYyX0hQX0JQQyksCi0JU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MTMwYiwgIkhQIHh3OCowMCIsIEFMQzI2Ml9IUF9CUEMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDE3MGIsICJIUCB4dyoiLCBBTEMyNjJfSFBfQlBDKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MTIwMCwgIkhQIHh3IHNlcmllcyIsCisJCQkgICBBTEMyNjJfSFBfQlBDKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MTMwMCwgIkhQIHh3IHNlcmllcyIsCisJCQkgICBBTEMyNjJfSFBfQlBDKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDNjLCAweGZmMDAsIDB4MTcwMCwgIkhQIHh3IHNlcmllcyIsCisJCQkgICBBTEMyNjJfSFBfQlBDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODAwLCAiSFAgRDcwMDAiLCBBTEMyNjJfSFBfQlBDX0Q3MDAwX1dMKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODAxLCAiSFAgRDcwMDAiLCBBTEMyNjJfSFBfQlBDX0Q3MDAwX1dGKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyODAyLCAiSFAgRDcwMDAiLCBBTEMyNjJfSFBfQlBDX0Q3MDAwX1dMKSwKQEAgLTEwNTc1LDE3ICsxMDkwMiwxNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDFmMDAsICJTb255IEFTU0FNRCIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCiAJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4ODIwMywgIlNvbnkgVVgtOTAiLCBBTEMyNjJfSElQUE8pLAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDgyMGYsICJTb255IEFTU0FNRCIsIEFMQzI2Ml9TT05ZX0FTU0FNRCksCi0JU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAwZSwgIlNvbnkgQVNTQU1EIiwgQUxDMjYyX1NPTllfQVNTQU1EKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDE1LCAiU29ueSAweDkwMTUiLCBBTEMyNjJfU09OWV9BU1NBTUQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwMzMsICJTb255IFZBSU8gVkdOLVNSMTlYTiIsCi0JCSAgICAgIEFMQzI2Ml9TT05ZX0FTU0FNRCksCisJU05EX1BDSV9RVUlSSygweDEwNGQsIDB4OTAxNiwgIlNvbnkgVkFJTyIsIEFMQzI2Ml9BVVRPKSwgLyogZGlnLW9ubHkgKi8KKwlTTkRfUENJX1FVSVJLX01BU0soMHgxMDRkLCAweGZmMDAsIDB4OTAwMCwgIlNvbnkgVkFJTyIsCisJCQkgICBBTEMyNjJfU09OWV9BU1NBTUQpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweDAwMDEsICJUb3NoaWJhIGR5bmFib29rIFNTIFJYMSIsCiAJCSAgICAgIEFMQzI2Ml9UT1NISUJBX1JYMSksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY3YiwgIlRvc2hpYmEgUzA2IiwgQUxDMjYyX1RPU0hJQkFfUzA2KSwKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxMzk3LCAiRnVqaXRzdSIsIEFMQzI2Ml9GVUpJVFNVKSwKIAlTTkRfUENJX1FVSVJLKDB4MTBjZiwgMHgxNDJkLCAiRnVqaXRzdSBMaWZlYm9vayBFODQxMCIsIEFMQzI2Ml9GVUpJVFNVKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjMDMyLCAiU2Ftc3VuZyBRMSBVbHRyYSIsIEFMQzI2Ml9VTFRSQSksCi0JU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzAzOSwgIlNhbXN1bmcgUTFVIEVMIiwgQUxDMjYyX1VMVFJBKSwKKwlTTkRfUENJX1FVSVJLKDB4MTBmMSwgMHgyOTE1LCAiVHlhbiBUaHVuZGVyIG42NjUwVyIsIEFMQzI2Ml9UWUFOKSwKKwlTTkRfUENJX1FVSVJLX01BU0soMHgxNDRkLCAweGZmMDAsIDB4YzAzMiwgIlNhbXN1bmcgUTEiLAorCQkJICAgQUxDMjYyX1VMVFJBKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ0ZCwgMHhjNTEwLCAiU2Ftc3VuZyBRNDUiLCBBTEMyNjJfSElQUE8pLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4NGUsICJMZW5vdm8gMzAwMCB5NDEwIiwgQUxDMjYyX0xFTk9WT18zMDAwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdmZiwgMHgwNTYwLCAiQmVucSBFRDgiLCBBTEMyNjJfQkVOUV9FRDgpLApAQCAtMTA4MDIsNiArMTExMjksMTkgQEAKIAkJLnVuc29sX2V2ZW50ID0gYWxjMjYyX2hpcHBvX3Vuc29sX2V2ZW50LAogCQkuaW5pdF9ob29rID0gYWxjMjYyX2hpcHBvX2F1dG9tdXRlLAogCX0sCisJW0FMQzI2Ml9UWUFOXSA9IHsKKwkJLm1peGVycyA9IHsgYWxjMjYyX3R5YW5fbWl4ZXIgfSwKKwkJLmluaXRfdmVyYnMgPSB7IGFsYzI2Ml9pbml0X3ZlcmJzLCBhbGMyNjJfdHlhbl92ZXJic30sCisJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjYyX2RhY19uaWRzKSwKKwkJLmRhY19uaWRzID0gYWxjMjYyX2RhY19uaWRzLAorCQkuaHBfbmlkID0gMHgwMiwKKwkJLmRpZ19vdXRfbmlkID0gQUxDMjYyX0RJR09VVF9OSUQsCisJCS5udW1fY2hhbm5lbF9tb2RlID0gQVJSQVlfU0laRShhbGMyNjJfbW9kZXMpLAorCQkuY2hhbm5lbF9tb2RlID0gYWxjMjYyX21vZGVzLAorCQkuaW5wdXRfbXV4ID0gJmFsYzI2Ml9jYXB0dXJlX3NvdXJjZSwKKwkJLnVuc29sX2V2ZW50ID0gYWxjMjYyX3R5YW5fdW5zb2xfZXZlbnQsCisJCS5pbml0X2hvb2sgPSBhbGMyNjJfdHlhbl9hdXRvbXV0ZSwKKwl9LAogfTsKIAogc3RhdGljIGludCBwYXRjaF9hbGMyNjIoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCkBAIC0xMDg1NCw2ICsxMTE5NCwxNCBAQAogCQl9CiAJfQogCisJaWYgKCFzcGVjLT5ub19hbmFsb2cpIHsKKwkJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlhbGNfZnJlZShjb2RlYyk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEMyNjJfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGMyNjJfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtMTA4NjUsNyArMTEyMTMsNyBAQAogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX3BsYXliYWNrID0gJmFsYzI2Ml9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9jYXB0dXJlID0gJmFsYzI2Ml9wY21fZGlnaXRhbF9jYXB0dXJlOwogCi0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOworCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsKIAlpZiAoIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewogCQkvKiBjaGVjayB3aGV0aGVyIE5JRCAweDA3IGlzIHZhbGlkICovCiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKQEAgLTEwODgyLDggKzExMjMwLDEwIEBACiAJCQlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2Ml9jYXBzcmNfbmlkczsKIAkJfQogCX0KLQlpZiAoIXNwZWMtPmNhcF9taXhlcikKKwlpZiAoIXNwZWMtPmNhcF9taXhlciAmJiAhc3BlYy0+bm9fYW5hbG9nKQogCQlzZXRfY2FwdHVyZV9taXhlcihzcGVjKTsKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZykKKwkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CiAKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MGM7CiAKQEAgLTExMjYzLDE5ICsxMTYxMywxMyBAQAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjhfYmFzZV9pbml0X3ZlcmJzW10gPSB7CiAJLyogVW5tdXRlIERBQzAtMSBhbmQgc2V0IHZvbCA9IDAgKi8KIAl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9aRVJPfSwKLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAogCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAotCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAKIAkvKgogCSAqIFNldCB1cCBvdXRwdXQgbWl4ZXJzICgweDBjIC0gMHgwZSkKIAkgKi8KIAkvKiBzZXQgdm9sPTAgdG8gb3V0cHV0IG1peGVycyAqLwogCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCi0JezB4MGUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfWkVST30sCiAgICAgICAgIHsweDBlLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMH0sCiAKIAl7MHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC0xMTI5NCw5ICsxMTYzOCw3IEBACiAJezB4MTUsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJezB4MTYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJezB4MTgsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MTksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAJezB4MWEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCi0JezB4MWMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sCiAKIAkvKiBzZXQgUENCRUVQIHZvbCA9IDAsIG11dGUgY29ubmVjdGlvbnMgKi8KIAl7MHgxZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCkBAIC0xMTMxOCwxMCArMTE2NjAsOCBAQAogICovCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIGFsYzI2OF92b2x1bWVfaW5pdF92ZXJic1tdID0gewogCS8qIHNldCBvdXRwdXQgREFDICovCi0JezB4MDIsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDEpfSwKLQl7MHgwMywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JezB4MDMsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMSl9LAorCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAorCXsweDAzLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCiAJezB4MTgsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyNH0sCiAJezB4MTksIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgyNH0sCkBAIC0xMTMyOSwxNiArMTE2NjksMTIgQEAKIAl7MHgxYywgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDIwfSwKIAl7MHgxZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCAweDIwfSwKIAotCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX1pFUk99LAogCXsweDBlLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKLQl7MHgwZSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgxKX0sCiAJezB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsweDEwLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAogCXsweDE4LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDE5LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCXsweDFhLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAotCXsweDFjLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LAogCiAJLyogc2V0IFBDQkVFUCB2b2wgPSAwLCBtdXRlIGNvbm5lY3Rpb25zICovCiAJezB4MWQsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LApAQCAtMTE1MzcsNyArMTE4NzMsNyBAQAogc3RhdGljIGludCBhbGMyNjhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJaW50IGksIGlkeDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CkBAIC0xMTYzMSw5ICsxMTk2NywxNCBAQAogCQkJCQkgICBhbGMyNjhfaWdub3JlKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoIXNwZWMtPmF1dG9jZmcubGluZV9vdXRzKQorCWlmICghc3BlYy0+YXV0b2NmZy5saW5lX291dHMpIHsKKwkJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMgfHwgc3BlYy0+YXV0b2NmZy5kaWdfaW5fcGluKSB7CisJCQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSAyOworCQkJc3BlYy0+bm9fYW5hbG9nID0gMTsKKwkJCWdvdG8gZGlnX29ubHk7CisJCX0KIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgQklPUyBwaW4gY29uZmlnICovCi0KKwl9CiAJZXJyID0gYWxjMjY4X2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHNwZWMsICZzcGVjLT5hdXRvY2ZnKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTExNjQzLDI1ICsxMTk4NCwyNiBAQAogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAorIGRpZ19vbmx5OgogCS8qIGRpZ2l0YWwgb25seSBzdXBwb3J0IG91dHB1dCAqLwotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKSB7CiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gQUxDMjY4X0RJR09VVF9OSUQ7Ci0KKwkJc3BlYy0+ZGlnX291dF90eXBlID0gc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3R5cGVbMF07CisJfQogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gIT0gMHgxZCkKKwlpZiAoIXNwZWMtPm5vX2FuYWxvZyAmJiBzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSAhPSAweDFkKQogCQlhZGRfbWl4ZXIoc3BlYywgYWxjMjY4X2JlZXBfbWl4ZXIpOwogCiAJYWRkX3ZlcmIoc3BlYywgYWxjMjY4X3ZvbHVtZV9pbml0X3ZlcmJzKTsKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWVyciA9IGFsY19hdXRvX2FkZF9taWNfYm9vc3QoY29kZWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xMTcyMyw3ICsxMjA2NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYWxjX2NvbmZpZ19wcmVzZXQgYWxjMjY4X3ByZXNldHNbXSA9IHsKIAlbQUxDMjY3X1FVQU5UQV9JTDFdID0gewotCQkubWl4ZXJzID0geyBhbGMyNjdfcXVhbnRhX2lsMV9taXhlciB9LAorCQkubWl4ZXJzID0geyBhbGMyNjdfcXVhbnRhX2lsMV9taXhlciwgYWxjMjY4X2JlZXBfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OF9iYXNlX2luaXRfdmVyYnMsIGFsYzI2OF9lYXBkX3ZlcmJzLAogCQkJCWFsYzI2N19xdWFudGFfaWwxX3ZlcmJzIH0sCiAJCS5udW1fZGFjcyA9IEFSUkFZX1NJWkUoYWxjMjY4X2RhY19uaWRzKSwKQEAgLTExODA1LDcgKzEyMTQ3LDggQEAKIAl9LAogCVtBTEMyNjhfQUNFUl9BU1BJUkVfT05FXSA9IHsKIAkJLm1peGVycyA9IHsgYWxjMjY4X2FjZXJfYXNwaXJlX29uZV9taXhlciwKLQkJCQlhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIgfSwKKwkJCSAgICBhbGMyNjhfYmVlcF9taXhlciwKKwkJCSAgICBhbGMyNjhfY2FwdHVyZV9hbHRfbWl4ZXIgfSwKIAkJLmluaXRfdmVyYnMgPSB7IGFsYzI2OF9iYXNlX2luaXRfdmVyYnMsIGFsYzI2OF9lYXBkX3ZlcmJzLAogCQkJCWFsYzI2OF9hY2VyX2FzcGlyZV9vbmVfdmVyYnMgfSwKIAkJLm51bV9kYWNzID0gQVJSQVlfU0laRShhbGMyNjhfZGFjX25pZHMpLApAQCAtMTE4NzQsNyArMTIyMTcsNyBAQAogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYzsKIAlpbnQgYm9hcmRfY29uZmlnOwotCWludCBlcnI7CisJaW50IGksIGhhc19iZWVwLCBlcnI7CiAKIAlzcGVjID0ga2NhbGxvYygxLCBzaXplb2YoKnNwZWMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3BlYyA9PSBOVUxMKQpAQCAtMTE5MjMsMTUgKzEyMjY2LDMwIEBACiAKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGMyNjhfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAKLQlpZiAoIXF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCAweDFkLCBIREFfSU5QVVQpKQotCQkvKiBvdmVycmlkZSB0aGUgYW1wIGNhcHMgZm9yIGJlZXAgZ2VuZXJhdG9yICovCi0JCXNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MWQsIEhEQV9JTlBVVCwKKwloYXNfYmVlcCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9taXhlcnM7IGkrKykgeworCQlpZiAoc3BlYy0+bWl4ZXJzW2ldID09IGFsYzI2OF9iZWVwX21peGVyKSB7CisJCQloYXNfYmVlcCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChoYXNfYmVlcCkgeworCQllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCWFsY19mcmVlKGNvZGVjKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJaWYgKCFxdWVyeV9hbXBfY2Fwcyhjb2RlYywgMHgxZCwgSERBX0lOUFVUKSkKKwkJCS8qIG92ZXJyaWRlIHRoZSBhbXAgY2FwcyBmb3IgYmVlcCBnZW5lcmF0b3IgKi8KKwkJCXNuZF9oZGFfb3ZlcnJpZGVfYW1wX2NhcHMoY29kZWMsIDB4MWQsIEhEQV9JTlBVVCwKIAkJCQkJICAoMHgwYyA8PCBBQ19BTVBDQVBfT0ZGU0VUX1NISUZUKSB8CiAJCQkJCSAgKDB4MGMgPDwgQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVCkgfAogCQkJCQkgICgweDA3IDw8IEFDX0FNUENBUF9TVEVQX1NJWkVfU0hJRlQpIHwKIAkJCQkJICAoMCA8PCBBQ19BTVBDQVBfTVVURV9TSElGVCkpOworCX0KIAotCWlmICghc3BlYy0+YWRjX25pZHMgJiYgc3BlYy0+aW5wdXRfbXV4KSB7CisJaWYgKCFzcGVjLT5ub19hbmFsb2cgJiYgIXNwZWMtPmFkY19uaWRzICYmIHNwZWMtPmlucHV0X211eCkgewogCQkvKiBjaGVjayB3aGV0aGVyIE5JRCAweDA3IGlzIHZhbGlkICovCiAJCXVuc2lnbmVkIGludCB3Y2FwID0gZ2V0X3djYXBzKGNvZGVjLCAweDA3KTsKIAkJaW50IGk7CkBAIC0xMjAxMiw4ICsxMjM3MCw2IEBACiAJSERBX0NPREVDX01VVEUoIkxpbmUgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMiwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIkJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHg0LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJCZWVwIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4NCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QiLCAweDE4LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJGcm9udCBNaWMgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKQEAgLTEyMDQwLDggKzEyMzk2LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJJbnRlcm5hbCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwMSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiSW50ZXJuYWwgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDEsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiSW50ZXJuYWwgTWljIEJvb3N0IiwgMHgxOSwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAl7IH0KIH07CiAKQEAgLTEyMDY1LDggKzEyNDE5LDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJEb2NrIE1pYyBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJEb2NrIE1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkRvY2sgTWljIEJvb3N0IiwgMHgxYiwgMCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAl7IH0KIH07CiAKQEAgLTEyMTAzLDEzICsxMjQ1NSw2IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotLyogYmVlcCBjb250cm9sICovCi1zdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWxjMjY5X2JlZXBfbWl4ZXJbXSA9IHsKLQlIREFfQ09ERUNfVk9MVU1FKCJCZWVwIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4NCwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDQsIEhEQV9JTlBVVCksCi0JeyB9IC8qIGVuZCAqLwotfTsKLQogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBhbGMyNjlfcXVhbnRhX2ZsMV92ZXJic1tdID0gewogCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwMX0sCiAJezB4MTIsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0lOfSwKQEAgLTEyNTA5LDcgKzEyODU0LDcgQEAKIAkgKi8KIAlpZiAoY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX01JQ10gPT0gMHgxMiB8fAogCSAgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTUlDXSA9PSAweDEyKSB7Ci0JCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwkJc3RydWN0IGhkYV9pbnB1dF9tdXggKmltdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0gIkludCBNaWMiOwogCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmluZGV4ID0gMHgwNTsKIAkJaW11eC0+bnVtX2l0ZW1zKys7CkBAIC0xMjUyNywxMyArMTI4NzIsMzQgQEAKICNkZWZpbmUgYWxjMjY5X3BjbV9kaWdpdGFsX3BsYXliYWNrCWFsYzg4MF9wY21fZGlnaXRhbF9wbGF5YmFjawogI2RlZmluZSBhbGMyNjlfcGNtX2RpZ2l0YWxfY2FwdHVyZQlhbGM4ODBfcGNtX2RpZ2l0YWxfY2FwdHVyZQogCitzdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsYzI2OV80NGtfcGNtX2FuYWxvZ19wbGF5YmFjayA9IHsKKwkuc3Vic3RyZWFtcyA9IDEsCisJLmNoYW5uZWxzX21pbiA9IDIsCisJLmNoYW5uZWxzX21heCA9IDgsCisJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDQxMDAsIC8qIGZpeGVkIHJhdGUgKi8KKwkvKiBOSUQgaXMgc2V0IGluIGFsY19idWlsZF9wY21zICovCisJLm9wcyA9IHsKKwkJLm9wZW4gPSBhbGM4ODBfcGxheWJhY2tfcGNtX29wZW4sCisJCS5wcmVwYXJlID0gYWxjODgwX3BsYXliYWNrX3BjbV9wcmVwYXJlLAorCQkuY2xlYW51cCA9IGFsYzg4MF9wbGF5YmFja19wY21fY2xlYW51cAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGhkYV9wY21fc3RyZWFtIGFsYzI2OV80NGtfcGNtX2FuYWxvZ19jYXB0dXJlID0geworCS5zdWJzdHJlYW1zID0gMSwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkuY2hhbm5lbHNfbWF4ID0gMiwKKwkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMCwgLyogZml4ZWQgcmF0ZSAqLworCS8qIE5JRCBpcyBzZXQgaW4gYWxjX2J1aWxkX3BjbXMgKi8KK307CisKIC8qCiAgKiBCSU9TIGF1dG8gY29uZmlndXJhdGlvbgogICovCiBzdGF0aWMgaW50IGFsYzI2OV9wYXJzZV9hdXRvX2NvbmZpZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaSwgZXJyOworCWludCBlcnI7CiAJc3RhdGljIGhkYV9uaWRfdCBhbGMyNjlfaWdub3JlW10gPSB7IDB4MWQsIDAgfTsKIAogCWVyciA9IHNuZF9oZGFfcGFyc2VfcGluX2RlZl9jb25maWcoY29kZWMsICZzcGVjLT5hdXRvY2ZnLApAQCAtMTI1NTAsMjIgKzEyOTE2LDE1IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEMyNjlfRElHT1VUX05JRDsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CiAKLQkvKiBjcmVhdGUgYSBiZWVwIG1peGVyIGNvbnRyb2wgaWYgdGhlIHBpbiAweDFkIGlzbid0IGFzc2lnbmVkICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zKTsgaSsrKQotCQlpZiAoc3BlYy0+YXV0b2NmZy5pbnB1dF9waW5zW2ldID09IDB4MWQpCi0JCQlicmVhazsKLQlpZiAoaSA+PSBBUlJBWV9TSVpFKHNwZWMtPmF1dG9jZmcuaW5wdXRfcGlucykpCi0JCWFkZF9taXhlcihzcGVjLCBhbGMyNjlfYmVlcF9taXhlcik7Ci0KIAlhZGRfdmVyYihzcGVjLCBhbGMyNjlfaW5pdF92ZXJicyk7CiAJc3BlYy0+bnVtX211eF9kZWZzID0gMTsKLQlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4OworCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJLyogc2V0IGRlZmF1bHQgaW5wdXQgc291cmNlICovCiAJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgYWxjMjY5X2NhcHNyY19uaWRzWzBdLAogCQkJCSAgMCwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsCkBAIC0xMjU3NSwxMCArMTI5MzQsOSBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCFzcGVjLT5jYXBfbWl4ZXIpCisJaWYgKCFzcGVjLT5jYXBfbWl4ZXIgJiYgIXNwZWMtPm5vX2FuYWxvZykKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEyNjc1LDcgKzEzMDMzLDcgQEAKIAkJLmluaXRfaG9vayA9IGFsYzI2OV9lZWVwY19kbWljX2luaXRob29rLAogCX0sCiAJW0FMQzI2OV9GVUpJVFNVXSA9IHsKLQkJLm1peGVycyA9IHsgYWxjMjY5X2Z1aml0c3VfbWl4ZXIsIGFsYzI2OV9iZWVwX21peGVyIH0sCisJCS5taXhlcnMgPSB7IGFsYzI2OV9mdWppdHN1X21peGVyIH0sCiAJCS5jYXBfbWl4ZXIgPSBhbGMyNjlfZXBjX2NhcHR1cmVfbWl4ZXIsCiAJCS5pbml0X3ZlcmJzID0geyBhbGMyNjlfaW5pdF92ZXJicywKIAkJCQlhbGMyNjlfZWVlcGNfZG1pY19pbml0X3ZlcmJzIH0sCkBAIC0xMjc0MCwxMyArMTMwOTgsMjYgQEAKIAkJfQogCX0KIAorCWVyciA9IHNuZF9oZGFfYXR0YWNoX2JlZXBfZGV2aWNlKGNvZGVjLCAweDEpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzI2OV9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzI2OV9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCiAJc3BlYy0+c3RyZWFtX25hbWVfYW5hbG9nID0gIkFMQzI2OSBBbmFsb2ciOwotCXNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2sgPSAmYWxjMjY5X3BjbV9hbmFsb2dfcGxheWJhY2s7Ci0Jc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlID0gJmFsYzI2OV9wY21fYW5hbG9nX2NhcHR1cmU7Ci0KKwlpZiAoY29kZWMtPnN1YnN5c3RlbV9pZCA9PSAweDE3YWEzYmY4KSB7CisJCS8qIER1ZSB0byBhIGhhcmR3YXJlIHByb2JsZW0gb24gTGVub3ZvIElkZWFkcGFkLCB3ZSBuZWVkIHRvCisJCSAqIGZpeCB0aGUgc2FtcGxlIHJhdGUgb2YgYW5hbG9nIEkvTyB0byA0NC4xa0h6CisJCSAqLworCQlzcGVjLT5zdHJlYW1fYW5hbG9nX3BsYXliYWNrID0gJmFsYzI2OV80NGtfcGNtX2FuYWxvZ19wbGF5YmFjazsKKwkJc3BlYy0+c3RyZWFtX2FuYWxvZ19jYXB0dXJlID0gJmFsYzI2OV80NGtfcGNtX2FuYWxvZ19jYXB0dXJlOworCX0gZWxzZSB7CisJCXNwZWMtPnN0cmVhbV9hbmFsb2dfcGxheWJhY2sgPSAmYWxjMjY5X3BjbV9hbmFsb2dfcGxheWJhY2s7CisJCXNwZWMtPnN0cmVhbV9hbmFsb2dfY2FwdHVyZSA9ICZhbGMyNjlfcGNtX2FuYWxvZ19jYXB0dXJlOworCX0KIAlzcGVjLT5zdHJlYW1fbmFtZV9kaWdpdGFsID0gIkFMQzI2OSBEaWdpdGFsIjsKIAlzcGVjLT5zdHJlYW1fZGlnaXRhbF9wbGF5YmFjayA9ICZhbGMyNjlfcGNtX2RpZ2l0YWxfcGxheWJhY2s7CiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfY2FwdHVyZSA9ICZhbGMyNjlfcGNtX2RpZ2l0YWxfY2FwdHVyZTsKQEAgLTEyNzU2LDYgKzEzMTI3LDcgQEAKIAlzcGVjLT5jYXBzcmNfbmlkcyA9IGFsYzI2OV9jYXBzcmNfbmlkczsKIAlpZiAoIXNwZWMtPmNhcF9taXhlcikKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCk7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWxjX3BhdGNoX29wczsKIAlpZiAoYm9hcmRfY29uZmlnID09IEFMQzI2OV9BVVRPKQpAQCAtMTMwMDYsOCArMTMzNzgsNiBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg2MV9hc3VzX2xhcHRvcF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MTUsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgxNSwgMHgwLCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIEJlZXAgUGxheWJhY2sgVm9sdW1lIiwgMHgyMywgMHgwLCBIREFfT1VUUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgQmVlcCBQbGF5YmFjayBTd2l0Y2giLCAweDIzLCAweDAsIEhEQV9PVVRQVVQpLAogCXsgfQogfTsKIApAQCAtMTM0ODEsNyArMTM4NTEsNyBAQAogc3RhdGljIGludCBhbGM4NjFfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoc3RydWN0IGFsY19zcGVjICpzcGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJaW50IGksIGVyciwgaWR4LCBpZHgxOwogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewpAQCAtMTM1NjgsMTIgKzEzOTM4LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBBVVRPX1BJTl9MQVNUOyBpKyspIHsKIAkJaGRhX25pZF90IG5pZCA9IHNwZWMtPmF1dG9jZmcuaW5wdXRfcGluc1tpXTsKLQkJaWYgKG5pZCA+PSAweDBjICYmIG5pZCA8PSAweDExKSB7Ci0JCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJCSAgICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCSAgICBpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCSAgICBQSU5fVlJFRjgwIDogUElOX0lOKTsKLQkJfQorCQlpZiAobmlkID49IDB4MGMgJiYgbmlkIDw9IDB4MTEpCisJCQlhbGNfc2V0X2lucHV0X3Bpbihjb2RlYywgbmlkLCBpKTsKIAl9CiB9CiAKQEAgLTEzNjA5LDcgKzEzOTc1LDcgQEAKIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRzKQogCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IEFMQzg2MV9ESUdPVVRfTklEOwogCiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCkBAIC0xMzYxOCwxMyArMTM5ODQsMTIgQEAKIAlhZGRfdmVyYihzcGVjLCBhbGM4NjFfYXV0b19pbml0X3ZlcmJzKTsKIAogCXNwZWMtPm51bV9tdXhfZGVmcyA9IDE7Ci0Jc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzcGVjLT5pbnB1dF9tdXggPSAmc3BlYy0+cHJpdmF0ZV9pbXV4WzBdOwogCiAJc3BlYy0+YWRjX25pZHMgPSBhbGM4NjFfYWRjX25pZHM7CiAJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM4NjFfYWRjX25pZHMpOwogCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xMzgzMyw2ICsxNDE5OCwxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MjMpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg2MV9BVVRPKQogCQlzZXR1cF9wcmVzZXQoc3BlYywgJmFsYzg2MV9wcmVzZXRzW2JvYXJkX2NvbmZpZ10pOwogCkBAIC0xMzg0NCw2ICsxNDIxNSw4IEBACiAJc3BlYy0+c3RyZWFtX2RpZ2l0YWxfcGxheWJhY2sgPSAmYWxjODYxX3BjbV9kaWdpdGFsX3BsYXliYWNrOwogCXNwZWMtPnN0cmVhbV9kaWdpdGFsX2NhcHR1cmUgPSAmYWxjODYxX3BjbV9kaWdpdGFsX2NhcHR1cmU7CiAKKwlzZXRfYmVlcF9hbXAoc3BlYywgMHgyMywgMCwgSERBX09VVFBVVCk7CisKIAlzcGVjLT52bWFzdGVyX25pZCA9IDB4MDM7CiAKIAljb2RlYy0+cGF0Y2hfb3BzID0gYWxjX3BhdGNoX29wczsKQEAgLTE0MDAwLDkgKzE0MzczLDYgQEAKIAlIREFfQ09ERUNfVk9MVU1FKCJDRCBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDRCBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA0LCBIREFfSU5QVVQpLAogCi0JSERBX0NPREVDX1ZPTFVNRSgiUEMgU3BlYWtlciBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCUhEQV9DT0RFQ19NVVRFKCJQQyBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0KIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNDAyNiw5ICsxNDM5Niw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiQ0QgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiQ0QgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNCwgSERBX0lOUFVUKSwKIAotCUhEQV9DT0RFQ19WT0xVTUUoIlBDIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfTVVURSgiUEMgU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDA1LCBIREFfSU5QVVQpLAotCiAJeyB9IC8qIGVuZCAqLwogfTsKIApAQCAtMTQwNjcsOCArMTQ0MzQsNiBAQAogCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgQm9vc3QiLCAweDE5LCAwLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19WT0xVTUUoIkludCBNaWMgUGxheWJhY2sgVm9sdW1lIiwgMHgwYiwgMHgxLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJJbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBCZWVwIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIEJlZXAgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNDM3OSw5ICsxNDc0NCw3IEBACiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYwMywgIlRvc2hpYmEgUDIwNSIsIEFMQzg2MVZEX0xFTk9WTyksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmYzMSwgIlRvc2hpYmEgTDMwLTE0OSIsIEFMQzg2MVZEX0RBTExBUyksCiAJU05EX1BDSV9RVUlSSygweDE1NjUsIDB4ODIwZCwgIkJpb3N0YXIgTkY2MVMgU0UiLCBBTEM4NjFWRF82U1RfRElHKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMDY2LCAiTGVub3ZvIiwgQUxDODYxVkRfTEVOT1ZPKSwKLQlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzODAyLCAiTGVub3ZvIDMwMDAgQzIwMCIsIEFMQzg2MVZEX0xFTk9WTyksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4Mzg0ZSwgIkxlbm92byAzMDAwIE4yMDAiLCBBTEM4NjFWRF9MRU5PVk8pLAorCVNORF9QQ0lfUVVJUktfVkVORE9SKDB4MTdhYSwgIkxlbm92byIsIEFMQzg2MVZEX0xFTk9WTyksCiAJU05EX1BDSV9RVUlSSygweDE4NDksIDB4MDg2MiwgIkFTUm9jayBLOE5GNkctVlNUQSIsIEFMQzg2MVZEXzZTVF9ESUcpLAogCXt9CiB9OwpAQCAtMTQ1NDMsMTEgKzE0OTA2LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07CiAJCWlmIChhbGM4NjF2ZF9pc19pbnB1dF9waW4obmlkKSkgewotCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAotCQkJCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQkJCWkgPD0gQVVUT19QSU5fRlJPTlRfTUlDID8KLQkJCQkJCQlQSU5fVlJFRjgwIDogUElOX0lOKTsKLQkJCWlmIChuaWQgIT0gQUxDODYxVkRfUElOX0NEX05JRCkKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOworCQkJaWYgKG5pZCAhPSBBTEM4NjFWRF9QSU5fQ0RfTklEICYmCisJCQkgICAgKGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfT1VUX0FNUCkpCiAJCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAogCQkJCQkJQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwKIAkJCQkJCUFNUF9PVVRfTVVURSk7CkBAIC0xNDcxMyw3ICsxNTA3NCw3IEBACiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEM4NjFWRF9ESUdPVVRfTklEOwogCiAJaWYgKHNwZWMtPmtjdGxzLmxpc3QpCkBAIC0xNDcyMiwxMyArMTUwODMsMTIgQEAKIAlhZGRfdmVyYihzcGVjLCBhbGM4NjF2ZF92b2x1bWVfaW5pdF92ZXJicyk7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWVyciA9IGFsY19hdXRvX2FkZF9taWNfYm9vc3QoY29kZWMpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0Jc3RvcmVfcGluX2NvbmZpZ3MoY29kZWMpOwogCXJldHVybiAxOwogfQogCkBAIC0xNDc3OSw2ICsxNTEzOSwxMiBAQAogCQl9CiAJfQogCisJZXJyID0gc25kX2hkYV9hdHRhY2hfYmVlcF9kZXZpY2UoY29kZWMsIDB4MjMpOworCWlmIChlcnIgPCAwKSB7CisJCWFsY19mcmVlKGNvZGVjKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoYm9hcmRfY29uZmlnICE9IEFMQzg2MVZEX0FVVE8pCiAJCXNldHVwX3ByZXNldChzcGVjLCAmYWxjODYxdmRfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtMTQ4MDEsOSArMTUxNjcsMTAgQEAKIAlzcGVjLT5hZGNfbmlkcyA9IGFsYzg2MXZkX2FkY19uaWRzOwogCXNwZWMtPm51bV9hZGNfbmlkcyA9IEFSUkFZX1NJWkUoYWxjODYxdmRfYWRjX25pZHMpOwogCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjODYxdmRfY2Fwc3JjX25pZHM7Ci0Jc3BlYy0+aXNfbWl4X2NhcHR1cmUgPSAxOworCXNwZWMtPmNhcHR1cmVfc3R5bGUgPSBDQVBUX01JWDsKIAogCXNldF9jYXB0dXJlX21peGVyKHNwZWMpOworCXNldF9iZWVwX2FtcChzcGVjLCAweDBiLCAweDA1LCBIREFfSU5QVVQpOwogCiAJc3BlYy0+dm1hc3Rlcl9uaWQgPSAweDAyOwogCkBAIC0xNDk5Miw4ICsxNTM1OSw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNTAxNSw4ICsxNTM4MCw2IEBACiAJSERBX0NPREVDX01VVEUoIk1pYyBQbGF5YmFjayBTd2l0Y2giLCAweDBiLCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX1ZPTFVNRSgiRnJvbnQgTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURSgiRnJvbnQgTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MSwgSERBX0lOUFVUKSwKLQlIREFfQ09ERUNfVk9MVU1FKCJQQyBTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCksCi0JSERBX0NPREVDX01VVEUoIlBDIFNwZWFrZXIgUGxheWJhY2sgU3dpdGNoIiwgMHgwYiwgMHgwNSwgSERBX0lOUFVUKSwKIAl7IH0gLyogZW5kICovCiB9OwogCkBAIC0xNTk5Miw1NiArMTYzNTUsNTUgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM2NjJfY2ZnX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDkwODcsICJFQ1MiLCBBTEM2NjJfRUNTKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMDAwLCAiQVNVUyBONTBWbSIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMDkyLCAiQVNVUyBOQiIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWMzLCAiQVNVUyBNNzBWIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZjMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEyMDMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzMzksICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE2YzMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjUsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3ODMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MTMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTUpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MzMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NDMsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NjQsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzYsICJBU1VTIE5CIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4NzgsICJBU1VTIE01MVZBIiwgQUxDNjYzX0FTVVNfTTUxVkEpLAorCS8qU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3OCwgIkFTVVMgTTUwVnIiLCBBTEM2NjNfQVNVU19NT0RFMSksKi8KKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODkzLCAiQVNVUyBNNTBWbSIsIEFMQzY2M19BU1VTX01PREUzKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODk0LCAiQVNVUyBYNTUiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkwMywgIkFTVVMgRjVHTCIsIEFMQzY2M19BU1VTX01PREUxKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTEzLCAiQVNVUyBOQiIsIEFMQzY2Ml9BU1VTX01PREUyKSwKKwlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOTMzLCAiQVNVUyBGODBRIiwgQUxDNjYyX0FTVVNfTU9ERTIpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5NTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5NjMsICJBU1VTIFg3MUMiLCBBTEM2NjNfQVNVU19NT0RFMyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk5MywgIkFTVVMgTjIwIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YTMsICJBU1VTIEc1MFYiLCBBTEM2NjNfQVNVU19HNTBWKSwKKwkvKlNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YTMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTEpLCovCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTliMywgIkFTVVMgRjdaIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YzMsICJBU1VTIEY1Wi9GNngiLCBBTEM2NjJfQVNVU19NT0RFMiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTllMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlmMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFNCksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODI5MCwgIkFTVVMgUDVHQy1NWCIsIEFMQzY2Ml8zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODJhMSwgIkFTVVMgRWVlcGMiLCBBTEM2NjJfQVNVU19FRUVQQ19QNzAxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MmQxLCAiQVNVUyBFZWVwYyBFUDIwIiwgQUxDNjYyX0FTVVNfRUVFUENfRVAyMCksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkwMywgIkFTVVMgRjVHTCIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODc4LCAiQVNVUyBNNTBWciIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMDAwLCAiQVNVUyBONTBWbSIsIEFMQzY2M19BU1VTX01PREUxKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxOWIzLCAiQVNVUyBGN1oiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk1MywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTlhMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFkMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTIwMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTllMywgIkFTVVMgTkIiLCBBTEM2NjNfQVNVU19NT0RFMSksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTk5MywgIkFTVVMgTjIwIiwgQUxDNjYzX0FTVVNfTU9ERTEpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5YzMsICJBU1VTIEY1Wi9GNngiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTMzOSwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkxMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg0MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTgxMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTFmMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg3NiwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg2NCwgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc4MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTc1MywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTZjMywgIkFTVVMgTkIiLCBBTEM2NjJfQVNVU19NT0RFMiksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTkzMywgIkFTVVMgRjgwUSIsIEFMQzY2Ml9BU1VTX01PREUyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxODkzLCAiQVNVUyBNNTBWbSIsIEFMQzY2M19BU1VTX01PREUzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMWMzLCAiQVNVUyBNNzBWIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5NjMsICJBU1VTIFg3MUMiLCBBTEM2NjNfQVNVU19NT0RFMyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTg5NCwgIkFTVVMgWDU1IiwgQUxDNjYzX0FTVVNfTU9ERTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEwOTIsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTMpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5ZjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTQpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTUpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE4MzMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjMsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE3NjUsICJBU1VTIE5CIiwgQUxDNjYzX0FTVVNfTU9ERTYpLAorCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDBjZDYsICJGb3hjb25uIiwgQUxDNjYyX0VDUyksCiAJU05EX1BDSV9RVUlSSygweDEwNWIsIDB4MGQ0NywgIkZveGNvbm4gNDVDTVgvNDVHTVgvNDVDTVgtSyIsCiAJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MTAxZSwgIkxlbm92byIsIEFMQzY2Ml9MRU5PVk9fMTAxRSksCi0JU05EX1BDSV9RVUlSSygweDEwMTksIDB4OTA4NywgIkVDUyIsIEFMQzY2Ml9FQ1MpLAotCVNORF9QQ0lfUVVJUksoMHgxMDViLCAweDBjZDYsICJGb3hjb25uIiwgQUxDNjYyX0VDUyksCiAJU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIDk0NUdDTS1TMkwiLAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMGYsICJCaW9zdGFyIFRBNzgwRyBNMisiLCBBTEM2NjJfM1NUXzZjaF9ESUcpLAorCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDEwMWUsICJMZW5vdm8iLCBBTEM2NjJfTEVOT1ZPXzEwMUUpLAogCVNORF9QQ0lfUVVJUksoMHgxODQ5LCAweDM2NjIsICJBU1JPQ0sgSzEwTjc4RnVsbEhELWhTTEkgUjMuMCIsCiAJCQkJCUFMQzY2Ml8zU1RfNmNoX0RJRyksCi0JU05EX1BDSV9RVUlSSygweDE4NTQsIDB4MjAwMCwgIkFTVVMgSDEzLTIwMDAiLCBBTEM2NjNfQVNVU19IMTMpLAotCVNORF9QQ0lfUVVJUksoMHgxODU0LCAweDIwMDEsICJBU1VTIEgxMy0yMDAxIiwgQUxDNjYzX0FTVVNfSDEzKSwKLQlTTkRfUENJX1FVSVJLKDB4MTg1NCwgMHgyMDAyLCAiQVNVUyBIMTMtMjAwMiIsIEFMQzY2M19BU1VTX0gxMyksCisJU05EX1BDSV9RVUlSS19NQVNLKDB4MTg1NCwgMHhmMDAwLCAweDIwMDAsICJBU1VTIEgxMy0yMDB4IiwKKwkJCSAgIEFMQzY2M19BU1VTX0gxMyksCiAJe30KIH07CiAKQEAgLTE2MzYxLDcgKzE2NzIzLDcgQEAKIAogCWlmIChhbGM4ODBfaXNfZml4ZWRfcGluKHBpbikpIHsKIAkJbmlkID0gYWxjODgwX2lkeF90b19kYWMoYWxjODgwX2ZpeGVkX3Bpbl9pZHgocGluKSk7Ci0gICAgICAgICAgICAgICAgLyogcHJpbnRrKCJEQUMgbmlkPSV4XG4iLG5pZCk7ICovCisJCS8qIHByaW50ayhLRVJOX0RFQlVHICJEQUMgbmlkPSV4XG4iLG5pZCk7ICovCiAJCS8qIHNwZWNpZnkgdGhlIERBQyBhcyB0aGUgZXh0cmEgb3V0cHV0ICovCiAJCWlmICghc3BlYy0+bXVsdGlvdXQuaHBfbmlkKQogCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gbmlkOwpAQCAtMTYzOTEsMjYgKzE2NzUzLDU4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHNyYyB3aWRnZXQgZnJvbSB0aGUgY29ubmVjdGlvbiBsaXN0IG9mIHRoZSBuaWQuCisgKiByZXR1cm4gLTEgaWYgbm90IGZvdW5kCisgKi8KK3N0YXRpYyBpbnQgYWxjNjYyX2lucHV0X3Bpbl9pZHgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCisJCQkJaGRhX25pZF90IHNyYykKK3sKKwloZGFfbmlkX3QgY29ubl9saXN0W0hEQV9NQVhfQ09OTkVDVElPTlNdOworCWludCBpLCBjb25uczsKKworCWNvbm5zID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIG5pZCwgY29ubl9saXN0LAorCQkJCQlBUlJBWV9TSVpFKGNvbm5fbGlzdCkpOworCWlmIChjb25ucyA8IDApCisJCXJldHVybiAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgY29ubnM7IGkrKykKKwkJaWYgKGNvbm5fbGlzdFtpXSA9PSBzcmMpCisJCQlyZXR1cm4gaTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgYWxjNjYyX2lzX2lucHV0X3BpbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKKwlyZXR1cm4gKHBpbmNhcCAmIEFDX1BJTkNBUF9JTikgIT0gMDsKK30KKwogLyogY3JlYXRlIHBsYXliYWNrL2NhcHR1cmUgY29udHJvbHMgZm9yIGlucHV0IHBpbnMgKi8KLXN0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBhbGNfc3BlYyAqc3BlYywKK3N0YXRpYyBpbnQgYWxjNjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCQkJY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewotCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKwlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgaGRhX2lucHV0X211eCAqaW11eCA9ICZzcGVjLT5wcml2YXRlX2ltdXhbMF07CiAJaW50IGksIGVyciwgaWR4OwogCiAJZm9yIChpID0gMDsgaSA8IEFVVE9fUElOX0xBU1Q7IGkrKykgewotCQlpZiAoYWxjODgwX2lzX2lucHV0X3BpbihjZmctPmlucHV0X3BpbnNbaV0pKSB7Ci0JCQlpZHggPSBhbGM4ODBfaW5wdXRfcGluX2lkeChjZmctPmlucHV0X3BpbnNbaV0pOwotCQkJZXJyID0gbmV3X2FuYWxvZ19pbnB1dChzcGVjLCBjZmctPmlucHV0X3BpbnNbaV0sCi0JCQkJCSAgICAgICBhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldLAotCQkJCQkgICAgICAgaWR4LCAweDBiKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCXJldHVybiBlcnI7Ci0JCQlpbXV4LT5pdGVtc1tpbXV4LT5udW1faXRlbXNdLmxhYmVsID0KLQkJCQlhdXRvX3Bpbl9jZmdfbGFiZWxzW2ldOwotCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9Ci0JCQkJYWxjODgwX2lucHV0X3Bpbl9pZHgoY2ZnLT5pbnB1dF9waW5zW2ldKTsKLQkJCWltdXgtPm51bV9pdGVtcysrOworCQlpZiAoYWxjNjYyX2lzX2lucHV0X3Bpbihjb2RlYywgY2ZnLT5pbnB1dF9waW5zW2ldKSkgeworCQkJaWR4ID0gYWxjNjYyX2lucHV0X3Bpbl9pZHgoY29kZWMsIDB4MGIsCisJCQkJCQkgICBjZmctPmlucHV0X3BpbnNbaV0pOworCQkJaWYgKGlkeCA+PSAwKSB7CisJCQkJZXJyID0gbmV3X2FuYWxvZ19pbnB1dChzcGVjLCBjZmctPmlucHV0X3BpbnNbaV0sCisJCQkJCQkgICAgICAgYXV0b19waW5fY2ZnX2xhYmVsc1tpXSwKKwkJCQkJCSAgICAgICBpZHgsIDB4MGIpOworCQkJCWlmIChlcnIgPCAwKQorCQkJCQlyZXR1cm4gZXJyOworCQkJfQorCQkJaWR4ID0gYWxjNjYyX2lucHV0X3Bpbl9pZHgoY29kZWMsIDB4MjIsCisJCQkJCQkgICBjZmctPmlucHV0X3BpbnNbaV0pOworCQkJaWYgKGlkeCA+PSAwKSB7CisJCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5sYWJlbCA9CisJCQkJCWF1dG9fcGluX2NmZ19sYWJlbHNbaV07CisJCQkJaW11eC0+aXRlbXNbaW11eC0+bnVtX2l0ZW1zXS5pbmRleCA9IGlkeDsKKwkJCQlpbXV4LT5udW1faXRlbXMrKzsKKwkJCX0KIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTE2NDYwLDcgKzE2ODU0LDYgQEAKIAkJYWxjNjYyX2F1dG9fc2V0X291dHB1dF9hbmRfdW5tdXRlKGNvZGVjLCBwaW4sIFBJTl9PVVQsIDApOwogfQogCi0jZGVmaW5lIGFsYzY2Ml9pc19pbnB1dF9waW4obmlkKQlhbGM4ODBfaXNfaW5wdXRfcGluKG5pZCkKICNkZWZpbmUgQUxDNjYyX1BJTl9DRF9OSUQJCUFMQzg4MF9QSU5fQ0RfTklECiAKIHN0YXRpYyB2b2lkIGFsYzY2Ml9hdXRvX2luaXRfYW5hbG9nX2lucHV0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQpAQCAtMTY0NzAsMTIgKzE2ODYzLDEwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVUT19QSU5fTEFTVDsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5hdXRvY2ZnLmlucHV0X3BpbnNbaV07Ci0JCWlmIChhbGM2NjJfaXNfaW5wdXRfcGluKG5pZCkpIHsKLQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCQkJICAgIChpIDw9IEFVVE9fUElOX0ZST05UX01JQyA/Ci0JCQkJCSAgICAgUElOX1ZSRUY4MCA6IFBJTl9JTikpOwotCQkJaWYgKG5pZCAhPSBBTEM2NjJfUElOX0NEX05JRCkKKwkJaWYgKGFsYzY2Ml9pc19pbnB1dF9waW4oY29kZWMsIG5pZCkpIHsKKwkJCWFsY19zZXRfaW5wdXRfcGluKGNvZGVjLCBuaWQsIGkpOworCQkJaWYgKG5pZCAhPSBBTEM2NjJfUElOX0NEX05JRCAmJgorCQkJICAgIChnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX09VVF9BTVApKQogCQkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKIAkJCQkJCSAgICBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLAogCQkJCQkJICAgIEFNUF9PVVRfTVVURSk7CkBAIC0xNjUxMywyMCArMTY5MDQsMjAgQEAKIAkJCQkJICAgIkhlYWRwaG9uZSIpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IGFsYzY2Ml9hdXRvX2NyZWF0ZV9hbmFsb2dfaW5wdXRfY3RscyhzcGVjLCAmc3BlYy0+YXV0b2NmZyk7CisJZXJyID0gYWxjNjYyX2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKIAlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKLQlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0X3BpbikKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSBBTEM4ODBfRElHT1VUX05JRDsKIAogCWlmIChzcGVjLT5rY3Rscy5saXN0KQogCQlhZGRfbWl4ZXIoc3BlYywgc3BlYy0+a2N0bHMubGlzdCk7CiAKIAlzcGVjLT5udW1fbXV4X2RlZnMgPSAxOwotCXNwZWMtPmlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2ltdXg7CisJc3BlYy0+aW5wdXRfbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eFswXTsKIAogCWFkZF92ZXJiKHNwZWMsIGFsYzY2Ml9hdXRvX2luaXRfdmVyYnMpOwogCWlmIChjb2RlYy0+dmVuZG9yX2lkID09IDB4MTBlYzA2NjMpCkBAIC0xNjUzNiw3ICsxNjkyNyw2IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzdG9yZV9waW5fY29uZmlncyhjb2RlYyk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE2NTg4LDYgKzE2OTc4LDEyIEBACiAJCX0KIAl9CiAKKwllcnIgPSBzbmRfaGRhX2F0dGFjaF9iZWVwX2RldmljZShjb2RlYywgMHgxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlhbGNfZnJlZShjb2RlYyk7CisJCXJldHVybiBlcnI7CisJfQorCiAJaWYgKGJvYXJkX2NvbmZpZyAhPSBBTEM2NjJfQVVUTykKIAkJc2V0dXBfcHJlc2V0KHNwZWMsICZhbGM2NjJfcHJlc2V0c1tib2FyZF9jb25maWddKTsKIApAQCAtMTY2MTEsMTAgKzE3MDA3LDE0IEBACiAJc3BlYy0+YWRjX25pZHMgPSBhbGM2NjJfYWRjX25pZHM7CiAJc3BlYy0+bnVtX2FkY19uaWRzID0gQVJSQVlfU0laRShhbGM2NjJfYWRjX25pZHMpOwogCXNwZWMtPmNhcHNyY19uaWRzID0gYWxjNjYyX2NhcHNyY19uaWRzOwotCXNwZWMtPmlzX21peF9jYXB0dXJlID0gMTsKKwlzcGVjLT5jYXB0dXJlX3N0eWxlID0gQ0FQVF9NSVg7CiAKIAlpZiAoIXNwZWMtPmNhcF9taXhlcikKIAkJc2V0X2NhcHR1cmVfbWl4ZXIoc3BlYyk7CisJaWYgKGNvZGVjLT52ZW5kb3JfaWQgPT0gMHgxMGVjMDY2MikKKwkJc2V0X2JlZXBfYW1wKHNwZWMsIDB4MGIsIDB4MDUsIEhEQV9JTlBVVCk7CisJZWxzZQorCQlzZXRfYmVlcF9hbXAoc3BlYywgMHgwYiwgMHgwNCwgSERBX0lOUFVUKTsKIAogCXNwZWMtPnZtYXN0ZXJfbmlkID0gMHgwMjsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDYwOTQzNDQuLmI1ZTEwOGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTQzLDYgKzQzLDcgQEAKIH07CiAKIGVudW0geworCVNUQUNfQVVUTywKIAlTVEFDX1JFRiwKIAlTVEFDXzkyMDBfT1FPLAogCVNUQUNfOTIwMF9ERUxMX0QyMSwKQEAgLTYyLDE0ICs2MywxNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ185MjA1X0FVVE8sCiAJU1RBQ185MjA1X1JFRiwKIAlTVEFDXzkyMDVfREVMTF9NNDIsCiAJU1RBQ185MjA1X0RFTExfTTQzLAogCVNUQUNfOTIwNV9ERUxMX000NCwKKwlTVEFDXzkyMDVfRUFQRCwKIAlTVEFDXzkyMDVfTU9ERUxTCiB9OwogCiBlbnVtIHsKKwlTVEFDXzkySEQ3M1hYX0FVVE8sCiAJU1RBQ185MkhENzNYWF9OT19KRCwgLyogbm8gamFjay1kZXRlY3Rpb24gKi8KIAlTVEFDXzkySEQ3M1hYX1JFRiwKIAlTVEFDX0RFTExfTTZfQU1JQywKQEAgLTgwLDIyICs4NCwyNyBAQAogfTsKIAogZW51bSB7CisJU1RBQ185MkhEODNYWFhfQVVUTywKIAlTVEFDXzkySEQ4M1hYWF9SRUYsCiAJU1RBQ185MkhEODNYWFhfUFdSX1JFRiwKKwlTVEFDX0RFTExfUzE0LAogCVNUQUNfOTJIRDgzWFhYX01PREVMUwogfTsKIAogZW51bSB7CisJU1RBQ185MkhENzFCWFhfQVVUTywKIAlTVEFDXzkySEQ3MUJYWF9SRUYsCiAJU1RBQ19ERUxMX000XzEsCiAJU1RBQ19ERUxMX000XzIsCiAJU1RBQ19ERUxMX000XzMsCiAJU1RBQ19IUF9NNCwKIAlTVEFDX0hQX0RWNSwKKwlTVEFDX0hQX0hEWCwKIAlTVEFDXzkySEQ3MUJYWF9NT0RFTFMKIH07CiAKIGVudW0geworCVNUQUNfOTI1eF9BVVRPLAogCVNUQUNfOTI1eF9SRUYsCiAJU1RBQ19NMSwKIAlTVEFDX00xXzIsCkBAIC0xMDgsNiArMTE3LDcgQEAKIH07CiAKIGVudW0geworCVNUQUNfOTIyWF9BVVRPLAogCVNUQUNfRDk0NV9SRUYsCiAJU1RBQ19EOTQ1R1RQMywKIAlTVEFDX0Q5NDVHVFA1LApAQCAtMTM1LDYgKzE0NSw3IEBACiB9OwogCiBlbnVtIHsKKwlTVEFDXzkyN1hfQVVUTywKIAlTVEFDX0Q5NjVfUkVGX05PX0pELCAvKiBubyBqYWNrLWRldGVjdGlvbiAqLwogCVNUQUNfRDk2NV9SRUYsCiAJU1RBQ19EOTY1XzNTVCwKQEAgLTE0NCw2ICsxNTUsMTIgQEAKIAlTVEFDXzkyN1hfTU9ERUxTCiB9OwogCitlbnVtIHsKKwlTVEFDXzk4NzJfQVVUTywKKwlTVEFDXzk4NzJfVkFJTywKKwlTVEFDXzk4NzJfTU9ERUxTCit9OworCiBzdHJ1Y3Qgc2lnbWF0ZWxfZXZlbnQgewogCWhkYV9uaWRfdCBuaWQ7CiAJdW5zaWduZWQgY2hhciB0eXBlOwpAQCAtMTY3LDYgKzE4NCw3IEBACiAJdW5zaWduZWQgaW50IGFsdF9zd2l0Y2g6IDE7CiAJdW5zaWduZWQgaW50IGhwX2RldGVjdDogMTsKIAl1bnNpZ25lZCBpbnQgc3BkaWZfbXV0ZTogMTsKKwl1bnNpZ25lZCBpbnQgY2hlY2tfdm9sdW1lX29mZnNldDoxOwogCiAJLyogZ3BpbyBsaW5lcyAqLwogCXVuc2lnbmVkIGludCBlYXBkX21hc2s7CkBAIC0xNzksNiArMTk3LDcgQEAKIAl1bnNpZ25lZCBpbnQgc3RyZWFtX2RlbGF5OwogCiAJLyogYW5hbG9nIGxvb3BiYWNrICovCisJc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmFsb29wYmFja19jdGw7CiAJdW5zaWduZWQgY2hhciBhbG9vcGJhY2tfbWFzazsKIAl1bnNpZ25lZCBjaGFyIGFsb29wYmFja19zaGlmdDsKIApAQCAtMjAzLDYgKzIyMiw4IEBACiAJaGRhX25pZF90IGhwX2RhY3NbNV07CiAJaGRhX25pZF90IHNwZWFrZXJfZGFjc1s1XTsKIAorCWludCB2b2x1bWVfb2Zmc2V0OworCiAJLyogY2FwdHVyZSAqLwogCWhkYV9uaWRfdCAqYWRjX25pZHM7CiAJdW5zaWduZWQgaW50IG51bV9hZGNzOwpAQCAtMjI0LDcgKzI0NSw2IEBACiAJLyogcGluIHdpZGdldHMgKi8KIAloZGFfbmlkX3QgKnBpbl9uaWRzOwogCXVuc2lnbmVkIGludCBudW1fcGluczsKLQl1bnNpZ25lZCBpbnQgKnBpbl9jb25maWdzOwogCiAJLyogY29kZWMgc3BlY2lmaWMgc3R1ZmYgKi8KIAlzdHJ1Y3QgaGRhX3ZlcmIgKmluaXQ7CkBAIC00MDAsNiArNDIwLDEwIEBACiAgICAgICAgIDB4MTIsIDB4MTMsCiB9OwogCitzdGF0aWMgaGRhX25pZF90IHN0YWM5Mjd4X3NsYXZlX2RpZ19vdXRzWzJdID0geworCTB4MWYsIDAsCit9OworCiBzdGF0aWMgaGRhX25pZF90IHN0YWM5Mjd4X2FkY19uaWRzWzNdID0gewogICAgICAgICAweDA3LCAweDA4LCAweDA5CiB9OwpAQCAtNDcyLDE1ICs0OTYsMjEgQEAKIAkweDE0LCAweDIyLCAweDIzCiB9OwogCi1zdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODN4eHhfcGluX25pZHNbMTRdID0geworc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDgzeHh4X3Bpbl9uaWRzWzEwXSA9IHsKIAkweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLAotCTB4MGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsCi0JMHgxZCwgMHgxZSwgMHgxZiwgMHgyMAorCTB4MGYsIDB4MTAsIDB4MTEsIDB4MWYsIDB4MjAsCiB9Owotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDcxYnh4X3Bpbl9uaWRzWzExXSA9IHsKKworI2RlZmluZSBTVEFDOTJIRDcxQlhYX05VTV9QSU5TIDEzCitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfcGluX25pZHNfNHBvcnRbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CisJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwMCwKKwkweDAwLCAweDE0LCAweDE4LCAweDE5LCAweDFlLAorCTB4MWYsIDB4MjAsIDB4MjcKK307CitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkNzFieHhfcGluX25pZHNfNnBvcnRbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CiAJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwKIAkweDBmLCAweDE0LCAweDE4LCAweDE5LCAweDFlLAotCTB4MWYsCisJMHgxZiwgMHgyMCwgMHgyNwogfTsKIAogc3RhdGljIGhkYV9uaWRfdCBzdGFjOTI3eF9waW5fbmlkc1sxNF0gPSB7CkBAIC04NDIsOSArODcyLDkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ4M3h4eF9jb3JlX2luaXRbXSA9IHsKLQl7IDB4YSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MH0sCi0JeyAweGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDB9LAotCXsgMHhkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwKKwl7IDB4YSwgQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIDB4MX0sCisJeyAweGIsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LAorCXsgMHhkLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgwfSwKIAogCS8qIHBvd2VyIHN0YXRlIGNvbnRyb2xzIGFtcHMgKi8KIAl7IDB4MDEsIEFDX1ZFUkJfU0VUX0VBUEQsIDEgPDwgMn0sCkBAIC04NTQsMjYgKzg4NCwyNSBAQAogc3RhdGljIHN0cnVjdCBoZGFfdmVyYiBzdGFjOTJoZDcxYnh4X2NvcmVfaW5pdFtdID0gewogCS8qIHNldCBtYXN0ZXIgdm9sdW1lIGFuZCBkaXJlY3QgY29udHJvbCAqLwogCXsgMHgyOCwgQUNfVkVSQl9TRVRfVk9MVU1FX0tOT0JfQ09OVFJPTCwgMHhmZn0sCi0JLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlcyAweDBhLCAweGQsIDB4MGYgKi8KLQl7IDB4MGEsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAotCXsgMHgwZCwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCi0JeyAweDBmLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7fQogfTsKIAotI2RlZmluZSBIRF9ESVNBQkxFX1BPUlRGIDIKKyNkZWZpbmUgSERfRElTQUJMRV9QT1JURiAxCiBzdGF0aWMgc3RydWN0IGhkYV92ZXJiIHN0YWM5MmhkNzFieHhfYW5hbG9nX2NvcmVfaW5pdFtdID0gewogCS8qIHN0YXJ0IG9mIGNvbmZpZyAjMSAqLwogCiAJLyogY29ubmVjdCBwb3J0IDBmIHRvIGF1ZGlvIG1peGVyICovCiAJeyAweDBmLCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgyfSwKLQkvKiB1bm11dGUgcmlnaHQgYW5kIGxlZnQgY2hhbm5lbHMgZm9yIG5vZGUgMHgwZiAqLwotCXsgMHgwZiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJLyogc3RhcnQgb2YgY29uZmlnICMyICovCiAKIAkvKiBzZXQgbWFzdGVyIHZvbHVtZSBhbmQgZGlyZWN0IGNvbnRyb2wgKi8KIAl7IDB4MjgsIEFDX1ZFUkJfU0VUX1ZPTFVNRV9LTk9CX0NPTlRST0wsIDB4ZmZ9LAotCS8qIHVubXV0ZSByaWdodCBhbmQgbGVmdCBjaGFubmVscyBmb3Igbm9kZXMgMHgwYSwgMHhkICovCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzkyaGQ3MWJ4eF91bm11dGVfY29yZV9pbml0W10gPSB7CisJLyogdW5tdXRlIHJpZ2h0IGFuZCBsZWZ0IGNoYW5uZWxzIGZvciBub2RlcyAweDBmLCAweGEsIDB4MGQgKi8KKwl7IDB4MGYsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LAogCXsgMHgwYSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sCiAJeyAweDBkLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfSU5fVU5NVVRFKDApfSwKIAl7fQpAQCAtOTU0LDE2ICs5ODMsNiBAQAogCQkucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCBjaHMsIGlkeCwgZGlyKSBcCiAJfQogCi0jZGVmaW5lIFNUQUNfSU5QVVRfU09VUkNFKGNudCkgXAotCXsgXAotCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwgXAotCQkubmFtZSA9ICJJbnB1dCBTb3VyY2UiLCBcCi0JCS5jb3VudCA9IGNudCwgXAotCQkuaW5mbyA9IHN0YWM5Mnh4X211eF9lbnVtX2luZm8sIFwKLQkJLmdldCA9IHN0YWM5Mnh4X211eF9lbnVtX2dldCwgXAotCQkucHV0ID0gc3RhYzkyeHhfbXV4X2VudW1fcHV0LCBcCi0JfQotCiAjZGVmaW5lIFNUQUNfQU5BTE9HX0xPT1BCQUNLKHZlcmJfcmVhZCwgdmVyYl93cml0ZSwgY250KSBcCiAJeyBcCiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLCBcCkBAIC05NzgsNyArOTk3LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTIwMF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUUoIk1hc3RlciBQbGF5YmFjayBWb2x1bWUiLCAweGIsIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJNYXN0ZXIgUGxheWJhY2sgU3dpdGNoIiwgMHhiLCAwLCBIREFfT1VUUFVUKSwKLQlTVEFDX0lOUFVUX1NPVVJDRSgxKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MGEsIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MGEsIDAsIEhEQV9PVVRQVVQpLAogCXsgfSAvKiBlbmQgKi8KQEAgLTEwMDMsOCArMTAyMSw2IEBACiAJSERBX0NPREVDX1ZPTFVNRSgiREFDIE1peGVyIENhcHR1cmUgVm9sdW1lIiwgMHgxZCwgMHgzLCBIREFfSU5QVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJEQUMgTWl4ZXIgQ2FwdHVyZSBTd2l0Y2giLCAweDFkLCAweDMsIEhEQV9JTlBVVCksCiAKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDMpLAotCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFX0lEWCgiQ2FwdHVyZSBTd2l0Y2giLCAweDAsIDB4MjAsIDB4MCwgSERBX09VVFBVVCksCiAKQEAgLTEwMTQsOSArMTAzMCwyMiBAQAogCXsgfSAvKiBlbmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfOGNoX21peGVyW10gPSB7Ci0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCA0KSwKK3N0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTJoZDczeHhfNmNoX2xvb3BiYWNrW10gPSB7CisJU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCAzKSwKKwl7fQorfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF84Y2hfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDQpLAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzEwY2hfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTEsIDUpLAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3M3h4XzhjaF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMDQxLDggKzEwNzAsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzN4eF8xMGNoX21peGVyW10gPSB7Ci0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0ExLCA1KSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgyMCwgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDIwLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMDk0LDkgKzExMjEsNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzFieHhfYW5hbG9nX21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMiksCi0JU1RBQ19BTkFMT0dfTE9PUEJBQ0soMHhGQTAsIDB4N0EwLCAyKSwKLQogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMTIyLDEwICsxMTQ2LDExIEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzFieHhfbWl4ZXJbXSA9IHsKLQlTVEFDX0lOUFVUX1NPVVJDRSgyKSwKLQlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTAsIDIpLAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MmhkNzFieHhfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZBMCwgMHg3QTAsIDIpCit9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyaGQ3MWJ4eF9taXhlcltdID0gewogCUhEQV9DT0RFQ19WT0xVTUVfSURYKCJDYXB0dXJlIFZvbHVtZSIsIDB4MCwgMHgxYywgMHgwLCBIREFfT1VUUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDFjLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMTM3LDE2ICsxMTYyLDEyIEBACiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyNXhfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJNYXN0ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZSwgMCwgSERBX09VVFBVVCksCiAJSERBX0NPREVDX01VVEUoIk1hc3RlciBQbGF5YmFjayBTd2l0Y2giLCAweDBlLCAwLCBIREFfT1VUUFVUKSwKLQlTVEFDX0lOUFVUX1NPVVJDRSgxKSwKIAlIREFfQ09ERUNfVk9MVU1FKCJDYXB0dXJlIFZvbHVtZSIsIDB4MDksIDAsIEhEQV9PVVRQVVQpLAogCUhEQV9DT0RFQ19NVVRFKCJDYXB0dXJlIFN3aXRjaCIsIDB4MTQsIDAsIEhEQV9PVVRQVVQpLAogCXsgfSAvKiBlbmQgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTIwNV9taXhlcltdID0gewotCVNUQUNfSU5QVVRfU09VUkNFKDIpLAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkUwLCAweDdFMCwgMSksCi0KIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MWIsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDFkLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMTU1LDkgKzExNzYsMTMgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyMDVfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZFMCwgMHg3RTAsIDEpLAorCXt9Cit9OworCiAvKiBUaGlzIG5lZWRzIHRvIGJlIGdlbmVyYXRlZCBkeW5hbWljYWxseSBiYXNlZCBvbiBzZXF1ZW5jZSAqLwogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWM5MjJ4X21peGVyW10gPSB7Ci0JU1RBQ19JTlBVVF9TT1VSQ0UoMiksCiAJSERBX0NPREVDX1ZPTFVNRV9JRFgoIkNhcHR1cmUgVm9sdW1lIiwgMHgwLCAweDE3LCAweDAsIEhEQV9JTlBVVCksCiAJSERBX0NPREVDX01VVEVfSURYKCJDYXB0dXJlIFN3aXRjaCIsIDB4MCwgMHgxNywgMHgwLCBIREFfSU5QVVQpLAogCkBAIC0xMTY4LDkgKzExOTMsNiBAQAogCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzdGFjOTI3eF9taXhlcltdID0gewotCVNUQUNfSU5QVVRfU09VUkNFKDMpLAotCVNUQUNfQU5BTE9HX0xPT1BCQUNLKDB4RkVCLCAweDdFQiwgMSksCi0KIAlIREFfQ09ERUNfVk9MVU1FX0lEWCgiQ2FwdHVyZSBWb2x1bWUiLCAweDAsIDB4MTgsIDB4MCwgSERBX0lOUFVUKSwKIAlIREFfQ09ERUNfTVVURV9JRFgoIkNhcHR1cmUgU3dpdGNoIiwgMHgwLCAweDFiLCAweDAsIEhEQV9PVVRQVVQpLAogCkBAIC0xMTgyLDYgKzEyMDQsMTEgQEAKIAl7IH0gLyogZW5kICovCiB9OwogCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhYzkyN3hfbG9vcGJhY2tbXSA9IHsKKwlTVEFDX0FOQUxPR19MT09QQkFDSygweEZFQiwgMHg3RUIsIDEpLAorCXt9Cit9OworCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3RhY19kbXV4X21peGVyID0gewogCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCS5uYW1lID0gIkRpZ2l0YWwgSW5wdXQgU291cmNlIiwKQEAgLTEyMDcsMTAgKzEyMzQsNyBAQAogCSJMRkUgUGxheWJhY2sgVm9sdW1lIiwKIAkiU2lkZSBQbGF5YmFjayBWb2x1bWUiLAogCSJIZWFkcGhvbmUgUGxheWJhY2sgVm9sdW1lIiwKLQkiSGVhZHBob25lMiBQbGF5YmFjayBWb2x1bWUiLAogCSJTcGVha2VyIFBsYXliYWNrIFZvbHVtZSIsCi0JIkV4dGVybmFsIFNwZWFrZXIgUGxheWJhY2sgVm9sdW1lIiwKLQkiU3BlYWtlcjIgUGxheWJhY2sgVm9sdW1lIiwKIAlOVUxMCiB9OwogCkBAIC0xMjIxLDEwICsxMjQ1LDcgQEAKIAkiTEZFIFBsYXliYWNrIFN3aXRjaCIsCiAJIlNpZGUgUGxheWJhY2sgU3dpdGNoIiwKIAkiSGVhZHBob25lIFBsYXliYWNrIFN3aXRjaCIsCi0JIkhlYWRwaG9uZTIgUGxheWJhY2sgU3dpdGNoIiwKIAkiU3BlYWtlciBQbGF5YmFjayBTd2l0Y2giLAotCSJFeHRlcm5hbCBTcGVha2VyIFBsYXliYWNrIFN3aXRjaCIsCi0JIlNwZWFrZXIyIFBsYXliYWNrIFN3aXRjaCIsCiAJIklFQzk1OCBQbGF5YmFjayBTd2l0Y2giLAogCU5VTEwKIH07CkBAIC0xMjk0LDYgKzEzMTUsOCBAQAogCQl1bnNpZ25lZCBpbnQgdm1hc3Rlcl90bHZbNF07CiAJCXNuZF9oZGFfc2V0X3ZtYXN0ZXJfdGx2KGNvZGVjLCBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSwKIAkJCQkJSERBX09VVFBVVCwgdm1hc3Rlcl90bHYpOworCQkvKiBjb3JyZWN0IHZvbHVtZSBvZmZzZXQgKi8KKwkJdm1hc3Rlcl90bHZbMl0gKz0gdm1hc3Rlcl90bHZbM10gKiBzcGVjLT52b2x1bWVfb2Zmc2V0OwogCQllcnIgPSBzbmRfaGRhX2FkZF92bWFzdGVyKGNvZGVjLCAiTWFzdGVyIFBsYXliYWNrIFZvbHVtZSIsCiAJCQkJCSAgdm1hc3Rlcl90bHYsIHNsYXZlX3ZvbHMpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTEzMDYsNiArMTMyOSwxMyBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKKwlpZiAoc3BlYy0+YWxvb3BiYWNrX2N0bCAmJgorCSAgICBzbmRfaGRhX2dldF9ib29sX2hpbnQoY29kZWMsICJsb29wYmFjayIpID09IDEpIHsKKwkJZXJyID0gc25kX2hkYV9hZGRfbmV3X2N0bHMoY29kZWMsIHNwZWMtPmFsb29wYmFja19jdGwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJc3RhYzkyeHhfZnJlZV9rY3Rscyhjb2RlYyk7IC8qIG5vIGxvbmdlciBuZWVkZWQgKi8KIAogCS8qIGNyZWF0ZSBqYWNrIGlucHV0IGVsZW1lbnRzICovCkBAIC0xNDkwLDYgKzE1MjAsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MjAwX21vZGVsc1tTVEFDXzkyMDBfTU9ERUxTXSA9IHsKKwlbU1RBQ19BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ19SRUZdID0gInJlZiIsCiAJW1NUQUNfOTIwMF9PUU9dID0gIm9xbyIsCiAJW1NUQUNfOTIwMF9ERUxMX0QyMV0gPSAiZGVsbC1kMjEiLApAQCAtMTUxMSw2ICsxNTQyLDggQEAKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDX1JFRiksCiAJLyogRGVsbCBsYXB0b3BzIGhhdmUgQklPUyBwcm9ibGVtICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFhOCwKIAkJICAgICAgInVua25vd24gRGVsbCIsIFNUQUNfOTIwMF9ERUxMX0QyMSksCkBAIC0xNjMzLDYgKzE2NjYsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MjV4X21vZGVsc1tTVEFDXzkyNXhfTU9ERUxTXSA9IHsKKwlbU1RBQ185MjV4X0FVVE9dID0gImF1dG8iLAogCVtTVEFDX1JFRl0gPSAicmVmIiwKIAlbU1RBQ19NMV0gPSAibTEiLAogCVtTVEFDX00xXzJdID0gIm0xLTIiLApAQCAtMTY2MCw2ICsxNjk0LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTI1eF9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsICJERkkgTGFuUGFydHkiLCBTVEFDX1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLCAiREZJIExhblBhcnR5IiwgU1RBQ19SRUYpLAogCVNORF9QQ0lfUVVJUksoMHg4Mzg0LCAweDc2MzIsICJTdGFjOTIwMiBSZWZlcmVuY2UgQm9hcmQiLCBTVEFDX1JFRiksCiAKIAkvKiBEZWZhdWx0IHRhYmxlIGZvciB1bmtub3duIElEICovCkBAIC0xNjkxLDYgKzE3MjYsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MmhkNzN4eF9tb2RlbHNbU1RBQ185MkhENzNYWF9NT0RFTFNdID0geworCVtTVEFDXzkySEQ3M1hYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDXzkySEQ3M1hYX05PX0pEXSA9ICJuby1qZCIsCiAJW1NUQUNfOTJIRDczWFhfUkVGXSA9ICJyZWYiLAogCVtTVEFDX0RFTExfTTZfQU1JQ10gPSAiZGVsbC1tNi1hbWljIiwKQEAgLTE3MDMsNiArMTczOSw4IEBACiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCQkJIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDczWFhfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCQkJIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDczWFhfUkVGKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjU0LAogCQkJCSJEZWxsIFN0dWRpbyAxNTM1IiwgU1RBQ19ERUxMX002X0RNSUMpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyNTUsCkBAIC0xNzI2LDUyICsxNzY0LDY4IEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCByZWY5MmhkODN4eHhfcGluX2NvbmZpZ3NbMTRdID0geworc3RhdGljIHVuc2lnbmVkIGludCByZWY5MmhkODN4eHhfcGluX2NvbmZpZ3NbMTBdID0gewogCTB4MDIyMTQwMzAsIDB4MDIyMTEwMTAsIDB4MDJhMTkwMjAsIDB4MDIxNzAxMzAsCiAJMHgwMTAxNDA1MCwgMHgwMTgxOTA0MCwgMHgwMTAxNDAyMCwgMHg5MGEzMDE0ZSwKLQkweDQwZjAwMGYwLCAweDQwZjAwMGYwLCAweDQwZjAwMGYwLCAweDQwZjAwMGYwLAogCTB4MDE0NTExNjAsIDB4OTg1NjAxNzAsCiB9OwogCitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfczE0X3Bpbl9jb25maWdzWzEwXSA9IHsKKwkweDAyMjE0MDMwLCAweDAyMjExMDEwLCAweDAyYTE5MDIwLCAweDAxMDE0MDUwLAorCTB4NDBmMDAwZjAsIDB4MDE4MTkwNDAsIDB4NDBmMDAwZjAsIDB4OTBhNjAxNjAsCisJMHg0MGYwMDBmMCwgMHg0MGYwMDBmMCwKK307CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5MmhkODN4eHhfYnJkX3RibFtTVEFDXzkySEQ4M1hYWF9NT0RFTFNdID0gewogCVtTVEFDXzkySEQ4M1hYWF9SRUZdID0gcmVmOTJoZDgzeHh4X3Bpbl9jb25maWdzLAogCVtTVEFDXzkySEQ4M1hYWF9QV1JfUkVGXSA9IHJlZjkyaGQ4M3h4eF9waW5fY29uZmlncywKKwlbU1RBQ19ERUxMX1MxNF0gPSBkZWxsX3MxNF9waW5fY29uZmlncywKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTJoZDgzeHh4X21vZGVsc1tTVEFDXzkySEQ4M1hYWF9NT0RFTFNdID0geworCVtTVEFDXzkySEQ4M1hYWF9BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ185MkhEODNYWFhfUkVGXSA9ICJyZWYiLAogCVtTVEFDXzkySEQ4M1hYWF9QV1JfUkVGXSA9ICJtaWMtcmVmIiwKKwlbU1RBQ19ERUxMX1MxNF0gPSAiZGVsbC1zMTQiLAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfcGNpX3F1aXJrIHN0YWM5MmhkODN4eHhfY2ZnX3RibFtdID0gewogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ185MkhEODNYWFhfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkySEQ4M1hYWF9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyYmEsCisJCSAgICAgICJ1bmtub3duIERlbGwiLCBTVEFDX0RFTExfUzE0KSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ3MWJ4eF9waW5fY29uZmlnc1sxMV0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IHJlZjkyaGQ3MWJ4eF9waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDAyMjE0MDMwLCAweDAyYTE5MDQwLCAweDAxYTE5MDIwLCAweDAxMDE0MDEwLAogCTB4MDE4MTMwMmUsIDB4MDEwMTQwMTAsIDB4MDEwMTkwMjAsIDB4OTBhMDAwZjAsCi0JMHg5MGEwMDBmMCwgMHgwMTQ1MjA1MCwgMHgwMTQ1MjA1MCwKKwkweDkwYTAwMGYwLCAweDAxNDUyMDUwLCAweDAxNDUyMDUwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8xX3Bpbl9jb25maWdzWzExXSA9IHsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGVsbF9tNF8xX3Bpbl9jb25maWdzW1NUQUM5MkhENzFCWFhfTlVNX1BJTlNdID0gewogCTB4MDQyMTEwMWYsIDB4MDRhMTEyMjEsIDB4NDBmMDAwZjAsIDB4OTAxNzAxMTAsCiAJMHgyM2ExOTAyZSwgMHgyMzAxNDI1MCwgMHg0MGYwMDBmMCwgMHg5MGEwMDBmMCwKLQkweDQwZjAwMGYwLCAweDRmMDAwMGYwLCAweDRmMDAwMGYwLAorCTB4NDBmMDAwZjAsIDB4NGYwMDAwZjAsIDB4NGYwMDAwZjAsIDB4MDAwMDAwMDAsCisJMHgwMDAwMDAwMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzJfcGluX2NvbmZpZ3NbMTFdID0geworc3RhdGljIHVuc2lnbmVkIGludCBkZWxsX200XzJfcGluX2NvbmZpZ3NbU1RBQzkySEQ3MUJYWF9OVU1fUElOU10gPSB7CiAJMHgwNDIxMTAxZiwgMHgwNGExMTIyMSwgMHg5MGE3MDMzMCwgMHg5MDE3MDExMCwKIAkweDIzYTE5MDJlLCAweDIzMDE0MjUwLCAweDQwZjAwMGYwLCAweDQwZjAwMGYwLAotCTB4NDBmMDAwZjAsIDB4MDQ0NDEzYjAsIDB4MDQ0NDEzYjAsCisJMHg0MGYwMDBmMCwgMHgwNDQ0MTNiMCwgMHgwNDQ0MTNiMCwgMHgwMDAwMDAwMCwKKwkweDAwMDAwMDAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfM19waW5fY29uZmlnc1sxMV0gPSB7CitzdGF0aWMgdW5zaWduZWQgaW50IGRlbGxfbTRfM19waW5fY29uZmlnc1tTVEFDOTJIRDcxQlhYX05VTV9QSU5TXSA9IHsKIAkweDA0MjExMDFmLCAweDA0YTExMjIxLCAweDkwYTcwMzMwLCAweDkwMTcwMTEwLAogCTB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4NDBmMDAwZjAsIDB4OTBhMDAwZjAsCi0JMHg0MGYwMDBmMCwgMHgwNDQ0MTNiMCwgMHgwNDQ0MTNiMCwKKwkweDQwZjAwMGYwLCAweDA0NDQxM2IwLCAweDA0NDQxM2IwLCAweDAwMDAwMDAwLAorCTB4MDAwMDAwMDAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgKnN0YWM5MmhkNzFieHhfYnJkX3RibFtTVEFDXzkySEQ3MUJYWF9NT0RFTFNdID0gewpAQCAtMTc4MSwzNSArMTgzNSwzOCBAQAogCVtTVEFDX0RFTExfTTRfM10JPSBkZWxsX200XzNfcGluX2NvbmZpZ3MsCiAJW1NUQUNfSFBfTTRdCQk9IE5VTEwsCiAJW1NUQUNfSFBfRFY1XQkJPSBOVUxMLAorCVtTVEFDX0hQX0hEWF0gICAgICAgICAgID0gTlVMTCwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTJoZDcxYnh4X21vZGVsc1tTVEFDXzkySEQ3MUJYWF9NT0RFTFNdID0geworCVtTVEFDXzkySEQ3MUJYWF9BVVRPXSA9ICJhdXRvIiwKIAlbU1RBQ185MkhENzFCWFhfUkVGXSA9ICJyZWYiLAogCVtTVEFDX0RFTExfTTRfMV0gPSAiZGVsbC1tNC0xIiwKIAlbU1RBQ19ERUxMX000XzJdID0gImRlbGwtbTQtMiIsCiAJW1NUQUNfREVMTF9NNF8zXSA9ICJkZWxsLW00LTMiLAogCVtTVEFDX0hQX000XSA9ICJocC1tNCIsCiAJW1NUQUNfSFBfRFY1XSA9ICJocC1kdjUiLAorCVtTVEFDX0hQX0hEWF0gPSAiaHAtaGR4IiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTJoZDcxYnh4X2NmZ190YmxbXSA9IHsKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDcxQlhYX1JFRiksCi0JU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDMwZjIsCi0JCSAgICAgICJIUCBkdjUiLCBTVEFDX0hQX000KSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmNCwKLQkJICAgICAgIkhQIGR2NyIsIFNUQUNfSFBfRFY1KSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmNywKLQkJICAgICAgIkhQIGR2NCIsIFNUQUNfSFBfRFY1KSwKLQlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzBmYywKLQkJICAgICAgIkhQIGR2NyIsIFNUQUNfSFBfTTQpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzNjAwLAotCQkgICAgICAiSFAgZHY1IiwgU1RBQ19IUF9EVjUpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzNjAzLAotCQkgICAgICAiSFAgZHY1IiwgU1RBQ19IUF9EVjUpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfOTJIRDcxQlhYX1JFRiksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSFAsIDB4ZmZmMCwgMHgzMDgwLAorCQkgICAgICAiSFAiLCBTVEFDX0hQX0RWNSksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSFAsIDB4ZmZmMCwgMHgzMGYwLAorCQkgICAgICAiSFAgZHY0LTciLCBTVEFDX0hQX0RWNSksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSFAsIDB4ZmZmMCwgMHgzNjAwLAorCQkgICAgICAiSFAgZHY0LTciLCBTVEFDX0hQX0RWNSksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDM2MTAsCisJCSAgICAgICJIUCBIRFgiLCBTVEFDX0hQX0hEWCksICAvKiBIRFgxOCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9IUCwgMHgzNjFhLAotCQkJCSJ1bmtub3duIEhQIiwgU1RBQ19IUF9NNCksCisJCSAgICAgICJIUCBtaW5pIDEwMDAiLCBTVEFDX0hQX000KSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSFAsIDB4MzYxYiwKKwkJICAgICAgIkhQIEhEWCIsIFNUQUNfSFBfSERYKSwgIC8qIEhEWDE2ICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDIzMywKIAkJCQkidW5rbm93biBEZWxsIiwgU1RBQ19ERUxMX000XzEpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAyMzQsCkBAIC0xOTYxLDYgKzIwMTgsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnN0YWM5MjJ4X21vZGVsc1tTVEFDXzkyMlhfTU9ERUxTXSA9IHsKKwlbU1RBQ185MjJYX0FVVE9dID0gImF1dG8iLAogCVtTVEFDX0Q5NDVfUkVGXQk9ICJyZWYiLAogCVtTVEFDX0Q5NDVHVFA1XQk9ICI1c3RhY2siLAogCVtTVEFDX0Q5NDVHVFAzXQk9ICIzc3RhY2siLApAQCAtMTk4OCw2ICsyMDQ2LDggQEAKIAkvKiBTaWdtYVRlbCByZWZlcmVuY2UgYm9hcmQgKi8KIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MjY2OCwKIAkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfRDk0NV9SRUYpLAorCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERkksIDB4MzEwMSwKKwkJICAgICAgIkRGSSBMYW5QYXJ0eSIsIFNUQUNfRDk0NV9SRUYpLAogCS8qIEludGVsIDk0NUcgYmFzZWQgc3lzdGVtcyAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwMTAxLAogCQkgICAgICAiSW50ZWwgRDk0NUciLCBTVEFDX0Q5NDVHVFAzKSwKQEAgLTIwNDEsNiArMjEwMSw5IEBACiAJCSAgICAgICJJbnRlbCBEOTQ1UCIsIFNUQUNfRDk0NUdUUDMpLAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwNzA3LAogCQkgICAgICAiSW50ZWwgRDk0NVAiLCBTVEFDX0Q5NDVHVFA1KSwKKwkvKiBvdGhlciBpbnRlbCAqLworCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwMjA0LAorCQkgICAgICAiSW50ZWwgRDk0NSIsIFNUQUNfRDk0NV9SRUYpLAogCS8qIG90aGVyIHN5c3RlbXMgICovCiAJLyogQXBwbGUgSW50ZWwgTWFjIChNYWMgTWluaSwgTWFjQm9vaywgTWFjQm9vayBQcm8uLi4pICovCiAJU05EX1BDSV9RVUlSSygweDgzODQsIDB4NzY4MCwKQEAgLTIwNjUsMzEgKzIxMjgsNyBAQAogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAxZDcsCiAJCSAgICAgICJEZWxsIFhQUyBNMTIxMCIsIFNUQUNfOTIyWF9ERUxMX004MiksCiAJLyogRUNTL1BDIENoaXBzIGJvYXJkcyAqLwotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDIxNDQsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI2MDgsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMiLCBTVEFDX0VDU18yMDIpLAotCVNORF9QQ0lfUVVJUksoMHgxMDE5LCAweDI2MzMsCi0JCSAgICAgICJFQ1MvUEMgY2hpcHMgUDE3Ry8xMzMzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODExLAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODEyLAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODEzLAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE0LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE1LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE2LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE3LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE4LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODE5LAotCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKLQlTTkRfUENJX1FVSVJLKDB4MTAxOSwgMHgyODIwLAorCVNORF9QQ0lfUVVJUktfTUFTSygweDEwMTksIDB4ZjAwMCwgMHgyMDAwLAogCQkgICAgICAiRUNTL1BDIGNoaXBzIiwgU1RBQ19FQ1NfMjAyKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwpAQCAtMjEzMiw2ICsyMTcxLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpzdGFjOTI3eF9tb2RlbHNbU1RBQ185MjdYX01PREVMU10gPSB7CisJW1NUQUNfOTI3WF9BVVRPXQk9ICJhdXRvIiwKIAlbU1RBQ19EOTY1X1JFRl9OT19KRF0JPSAicmVmLW5vLWpkIiwKIAlbU1RBQ19EOTY1X1JFRl0JCT0gInJlZiIsCiAJW1NUQUNfRDk2NV8zU1RdCQk9ICIzc3RhY2siLApAQCAtMjE0NCwyNiArMjE4NCwxNiBAQAogCS8qIFNpZ21hVGVsIHJlZmVyZW5jZSBib2FyZCAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNjY4LAogCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTY1X1JFRiksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RGSSwgMHgzMTAxLAorCQkgICAgICAiREZJIExhblBhcnR5IiwgU1RBQ19EOTY1X1JFRiksCiAJIC8qIEludGVsIDk0NiBiYXNlZCBzeXN0ZW1zICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDNkMDEsICJJbnRlbCBEOTQ2IiwgU1RBQ19EOTY1XzNTVCksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweGEzMDEsICJJbnRlbCBEOTQ2IiwgU1RBQ19EOTY1XzNTVCksCiAJLyogOTY1IGJhc2VkIDMgc3RhY2sgc3lzdGVtcyAqLwotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTE2LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTE1LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTE0LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTEzLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTEyLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTExLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMTEwLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA5LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA4LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA3LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA2LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA1LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDA0LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDAzLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDAyLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMDAxLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV8zU1QpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweGZmMDAsIDB4MjEwMCwKKwkJCSAgICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzNTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyMDAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfM1NUKSwKIAkvKiBEZWxsIDMgc3RhY2sgc3lzdGVtcyAqLwogCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9ERUxMLCAgMHgwMWY3LCAiRGVsbCBYUFMgTTE3MzAiLCBTVEFDX0RFTExfM1NUKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgIDB4MDFkZCwgIkRlbGwgRGltZW5zaW9uIEU1MjAiLCBTVEFDX0RFTExfM1NUKSwKQEAgLTIxNzksMTUgKzIyMDksMTAgQEAKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgIDB4MDJmZiwgIkRlbGwgICAgICIsIFNUQUNfREVMTF9CSU9TKSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgIDB4MDIwOSwgIkRlbGwgWFBTIDEzMzAiLCBTVEFDX0RFTExfQklPUyksCiAJLyogOTY1IGJhc2VkIDUgc3RhY2sgc3lzdGVtcyAqLwotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMzAxLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMzAyLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMzAzLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMzA0LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyMzA1LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNTAxLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNTAyLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNTAzLCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAotCVNORF9QQ0lfUVVJUksoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgyNTA0LCAiSW50ZWwgRDk2NSIsIFNUQUNfRDk2NV81U1QpLAorCVNORF9QQ0lfUVVJUktfTUFTSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweGZmMDAsIDB4MjMwMCwKKwkJCSAgICJJbnRlbCBEOTY1IiwgU1RBQ19EOTY1XzVTVCksCisJU05EX1BDSV9RVUlSS19NQVNLKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4ZmYwMCwgMHgyNTAwLAorCQkJICAgIkludGVsIEQ5NjUiLCBTVEFDX0Q5NjVfNVNUKSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCkBAIC0yMjQwLDE5ICsyMjY1LDI1IEBACiAJW1NUQUNfOTIwNV9ERUxMX000Ml0gPSBkZWxsXzkyMDVfbTQyX3Bpbl9jb25maWdzLAogCVtTVEFDXzkyMDVfREVMTF9NNDNdID0gZGVsbF85MjA1X200M19waW5fY29uZmlncywKIAlbU1RBQ185MjA1X0RFTExfTTQ0XSA9IGRlbGxfOTIwNV9tNDRfcGluX2NvbmZpZ3MsCisJW1NUQUNfOTIwNV9FQVBEXSA9IE5VTEwsCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhYzkyMDVfbW9kZWxzW1NUQUNfOTIwNV9NT0RFTFNdID0geworCVtTVEFDXzkyMDVfQVVUT10gPSAiYXV0byIsCiAJW1NUQUNfOTIwNV9SRUZdID0gInJlZiIsCiAJW1NUQUNfOTIwNV9ERUxMX000Ml0gPSAiZGVsbC1tNDIiLAogCVtTVEFDXzkyMDVfREVMTF9NNDNdID0gImRlbGwtbTQzIiwKIAlbU1RBQ185MjA1X0RFTExfTTQ0XSA9ICJkZWxsLW00NCIsCisJW1NUQUNfOTIwNV9FQVBEXSA9ICJlYXBkIiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBzdGFjOTIwNV9jZmdfdGJsW10gPSB7CiAJLyogU2lnbWFUZWwgcmVmZXJlbmNlIGJvYXJkICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDI2NjgsCiAJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkyMDVfUkVGKSwKKwlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREZJLCAweDMxMDEsCisJCSAgICAgICJERkkgTGFuUGFydHkiLCBTVEFDXzkyMDVfUkVGKSwKKwkvKiBEZWxsICovCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFmMSwKIAkJICAgICAgInVua25vd24gRGVsbCIsIFNUQUNfOTIwNV9ERUxMX000MiksCiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0RFTEwsIDB4MDFmMiwKQEAgLTIyODMsMTAxICsyMzE0LDI0IEBACiAJCSAgICAgICJEZWxsIEluc3Bpcm9uIiwgU1RBQ185MjA1X0RFTExfTTQ0KSwKIAlTTkRfUENJX1FVSVJLKFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMjI4LAogCQkgICAgICAiRGVsbCBWb3N0cm8gMTUwMCIsIFNUQUNfOTIwNV9ERUxMX000MiksCisJLyogR2F0ZXdheSAqLworCVNORF9QQ0lfUVVJUksoMHgxMDdiLCAweDA1NjUsICJHYXRld2F5IFQxNjE2IiwgU1RBQ185MjA1X0VBUEQpLAogCXt9IC8qIHRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyBpbnQgc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWludCBpOwotCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JCi0Ja2ZyZWUoc3BlYy0+cGluX2NvbmZpZ3MpOwotCXNwZWMtPnBpbl9jb25maWdzID0ga2NhbGxvYyhzcGVjLT5udW1fcGlucywgc2l6ZW9mKCpzcGVjLT5waW5fY29uZmlncyksCi0JCQkJICAgIEdGUF9LRVJORUwpOwotCWlmICghc3BlYy0+cGluX2NvbmZpZ3MpCi0JCXJldHVybiAtRU5PTUVNOwotCQotCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKSB7Ci0JCWhkYV9uaWRfdCBuaWQgPSBzcGVjLT5waW5fbmlkc1tpXTsKLQkJdW5zaWduZWQgaW50IHBpbl9jZmc7Ci0JCQotCQlwaW5fY2ZnID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIAotCQkJQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDB4MDApOwkKLQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IHBpbiBuaWQgJTIuMnggYmlvcyBwaW4gY29uZmlnICU4Ljh4XG4iLAotCQkJCQluaWQsIHBpbl9jZmcpOwotCQlzcGVjLT5waW5fY29uZmlnc1tpXSA9IHBpbl9jZmc7Ci0JfQotCQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKLQkJCQkgICAgaGRhX25pZF90IHBpbl9uaWQsIHVuc2lnbmVkIGludCBwaW5fY29uZmlnKQotewotCWludCBpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMCwKLQkJCSAgICBwaW5fY29uZmlnICYgMHgwMDAwMDBmZik7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18xLAotCQkJICAgIChwaW5fY29uZmlnICYgMHgwMDAwZmYwMCkgPj4gOCk7Ci0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCSAgICBBQ19WRVJCX1NFVF9DT05GSUdfREVGQVVMVF9CWVRFU18yLAotCQkJICAgIChwaW5fY29uZmlnICYgMHgwMGZmMDAwMCkgPj4gMTYpOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkgICAgQUNfVkVSQl9TRVRfQ09ORklHX0RFRkFVTFRfQllURVNfMywKLQkJCSAgICBwaW5fY29uZmlnID4+IDI0KTsKLQlpID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJICAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULAotCQkJICAgICAgIDB4MDApOwkKLQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogcGluIG5pZCAlMi4yeCBwaW4gY29uZmlnICU4Ljh4XG4iLAotCQkgICAgcGluX25pZCwgaSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKK3N0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICAgIHVuc2lnbmVkIGludCAqcGluY2ZncykKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCi0gCWlmICghc3BlYy0+cGluX2NvbmZpZ3MpCi0gCQlyZXR1cm47CisJaWYgKCFwaW5jZmdzKQorCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX3BpbnM7IGkrKykKLQkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWcoY29kZWMsIHNwZWMtPnBpbl9uaWRzW2ldLAotCQkJCQlzcGVjLT5waW5fY29uZmlnc1tpXSk7Ci19Ci0KLXN0YXRpYyBpbnQgc3RhY19zYXZlX3Bpbl9jZmdzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgKnBpbnMpCi17Ci0Jc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQotCWlmICghcGlucykKLQkJcmV0dXJuIHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0KLQlrZnJlZShzcGVjLT5waW5fY29uZmlncyk7Ci0Jc3BlYy0+cGluX2NvbmZpZ3MgPSBrbWVtZHVwKHBpbnMsCi0JCQkJICAgIHNwZWMtPm51bV9waW5zICogc2l6ZW9mKCpwaW5zKSwKLQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzcGVjLT5waW5fY29uZmlncykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzdGFjX2NoYW5nZV9waW5fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAotCQkJCSAgIHVuc2lnbmVkIGludCBjZmcpCi17Ci0Jc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKSB7Ci0JCWlmIChzcGVjLT5waW5fbmlkc1tpXSA9PSBuaWQpIHsKLQkJCXNwZWMtPnBpbl9jb25maWdzW2ldID0gY2ZnOwotCQkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWcoY29kZWMsIG5pZCwgY2ZnKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQorCQlpZiAoc3BlYy0+cGluX25pZHNbaV0gJiYgcGluY2Znc1tpXSkKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgc3BlYy0+cGluX25pZHNbaV0sCisJCQkJCQkgcGluY2Znc1tpXSk7CiB9CiAKIC8qCkBAIC0yNTY3LDcgKzI1MjEsNyBAQAogCQljb2RlYy0+bnVtX3BjbXMrKzsKIAkJaW5mbysrOwogCQlpbmZvLT5uYW1lID0gIlNUQUM5Mnh4IERpZ2l0YWwiOwotCQlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9TUERJRjsKKwkJaW5mby0+cGNtX3R5cGUgPSBzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfdHlwZVswXTsKIAkJaWYgKHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkKSB7CiAJCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSBzdGFjOTJ4eF9wY21fZGlnaXRhbF9wbGF5YmFjazsKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5uaWQgPSBzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZDsKQEAgLTI1ODMsOCArMjUzNyw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhYzkyeHhfZ2V0X3ZyZWYoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCiB7Ci0JdW5zaWduZWQgaW50IHBpbmNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLAotCQkJCQkJIEFDX1BBUl9QSU5fQ0FQKTsKKwl1bnNpZ25lZCBpbnQgcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKIAlwaW5jYXAgPSAocGluY2FwICYgQUNfUElOQ0FQX1ZSRUYpID4+IEFDX1BJTkNBUF9WUkVGX1NISUZUOwogCWlmIChwaW5jYXAgJiBBQ19QSU5DQVBfVlJFRl8xMDApCiAJCXJldHVybiBBQ19QSU5DVExfVlJFRl8xMDA7CkBAIC0yNzU5LDIyICsyNzEyLDM3IEBACiB9OwogCiAvKiBhZGQgZHluYW1pYyBjb250cm9scyAqLwotc3RhdGljIGludCBzdGFjOTJ4eF9hZGRfY29udHJvbF90ZW1wKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLAotCQkJCSAgICAgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKmt0ZW1wLAotCQkJCSAgICAgaW50IGlkeCwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgdmFsKQorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICoKK3N0YWNfY29udHJvbF9uZXcoc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMsCisJCSBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa3RlbXAsCisJCSBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OwogCiAJc25kX2FycmF5X2luaXQoJnNwZWMtPmtjdGxzLCBzaXplb2YoKmtuZXcpLCAzMik7CiAJa25ldyA9IHNuZF9hcnJheV9uZXcoJnNwZWMtPmtjdGxzKTsKIAlpZiAoIWtuZXcpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKIAkqa25ldyA9ICprdGVtcDsKLQlrbmV3LT5pbmRleCA9IGlkeDsKIAlrbmV3LT5uYW1lID0ga3N0cmR1cChuYW1lLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWtuZXctPm5hbWUpCisJaWYgKCFrbmV3LT5uYW1lKSB7CisJCS8qIHJvb2xiYWNrICovCisJCW1lbXNldChrbmV3LCAwLCBzaXplb2YoKmtuZXcpKTsKKwkJc3BlYy0+a2N0bHMuYWxsb2NlZC0tOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGtuZXc7Cit9CisKK3N0YXRpYyBpbnQgc3RhYzkyeHhfYWRkX2NvbnRyb2xfdGVtcChzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYywKKwkJCQkgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprdGVtcCwKKwkJCQkgICAgIGludCBpZHgsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqa25ldyA9IHN0YWNfY29udHJvbF9uZXcoc3BlYywga3RlbXAsIG5hbWUpOworCWlmICgha25ldykKIAkJcmV0dXJuIC1FTk9NRU07CisJa25ldy0+aW5kZXggPSBpZHg7CiAJa25ldy0+cHJpdmF0ZV92YWx1ZSA9IHZhbDsKIAlyZXR1cm4gMDsKIH0KQEAgLTI3OTYsNiArMjc2NCwyOSBAQAogCXJldHVybiBzdGFjOTJ4eF9hZGRfY29udHJvbF9pZHgoc3BlYywgdHlwZSwgMCwgbmFtZSwgdmFsKTsKIH0KIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHN0YWNfaW5wdXRfc3JjX3RlbXAgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiSW5wdXQgU291cmNlIiwKKwkuaW5mbyA9IHN0YWM5Mnh4X211eF9lbnVtX2luZm8sCisJLmdldCA9IHN0YWM5Mnh4X211eF9lbnVtX2dldCwKKwkucHV0ID0gc3RhYzkyeHhfbXV4X2VudW1fcHV0LAorfTsKKworc3RhdGljIGludCBzdGFjOTJ4eF9hZGRfaW5wdXRfc291cmNlKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjKQoreworCXN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICprbmV3OworCXN0cnVjdCBoZGFfaW5wdXRfbXV4ICppbXV4ID0gJnNwZWMtPnByaXZhdGVfaW11eDsKKworCWlmICghc3BlYy0+bnVtX2FkY3MgfHwgaW11eC0+bnVtX2l0ZW1zIDw9IDEpCisJCXJldHVybiAwOyAvKiBubyBuZWVkIGZvciBpbnB1dCBzb3VyY2UgY29udHJvbCAqLworCWtuZXcgPSBzdGFjX2NvbnRyb2xfbmV3KHNwZWMsICZzdGFjX2lucHV0X3NyY190ZW1wLAorCQkJCXN0YWNfaW5wdXRfc3JjX3RlbXAubmFtZSk7CisJaWYgKCFrbmV3KQorCQlyZXR1cm4gLUVOT01FTTsKKwlrbmV3LT5jb3VudCA9IHNwZWMtPm51bV9hZGNzOworCXJldHVybiAwOworfQorCiAvKiBjaGVjayB3aGV0aGVyIHRoZSBsaW5lLWlucHV0IGNhbiBiZSB1c2VkIGFzIGxpbmUtb3V0ICovCiBzdGF0aWMgaGRhX25pZF90IGNoZWNrX2xpbmVfb3V0X3N3aXRjaChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTI4MDcsNyArMjc5OCw3IEBACiAJaWYgKGNmZy0+bGluZV9vdXRfdHlwZSAhPSBBVVRPX1BJTl9MSU5FX09VVCkKIAkJcmV0dXJuIDA7CiAJbmlkID0gY2ZnLT5pbnB1dF9waW5zW0FVVE9fUElOX0xJTkVdOwotCXBpbmNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUElOX0NBUCk7CisJcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKIAlpZiAocGluY2FwICYgQUNfUElOQ0FQX09VVCkKIAkJcmV0dXJuIG5pZDsKIAlyZXR1cm4gMDsKQEAgLTI4MjYsMTIgKzI4MTcsMTEgQEAKIAltaWNfcGluID0gQVVUT19QSU5fTUlDOwogCWZvciAoOzspIHsKIAkJaGRhX25pZF90IG5pZCA9IGNmZy0+aW5wdXRfcGluc1ttaWNfcGluXTsKLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJLyogc29tZSBsYXB0b3BzIGhhdmUgYW4gaW50ZXJuYWwgYW5hbG9nIG1pY3JvcGhvbmUKIAkJICogd2hpY2ggY2FuJ3QgYmUgdXNlZCBhcyBhIG91dHB1dCAqLwogCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKSAhPSBBQ19KQUNLX1BPUlRfRklYRUQpIHsKLQkJCXBpbmNhcCA9IHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgbmlkLCBBQ19QQVJfUElOX0NBUCk7CisJCQlwaW5jYXAgPSBzbmRfaGRhX3F1ZXJ5X3Bpbl9jYXBzKGNvZGVjLCBuaWQpOwogCQkJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9PVVQpCiAJCQkJcmV0dXJuIG5pZDsKIAkJfQpAQCAtMjg3OSw4ICsyODY5LDcgQEAKIAljb25uX2xlbiA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCBuaWQsIGNvbm4sCiAJCQkJCSAgIEhEQV9NQVhfQ09OTkVDVElPTlMpOwogCWZvciAoaiA9IDA7IGogPCBjb25uX2xlbjsgaisrKSB7Ci0JCXdjYXBzID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBjb25uW2pdLAotCQkJCQkgICBBQ19QQVJfQVVESU9fV0lER0VUX0NBUCk7CisJCXdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBjb25uW2pdKTsKIAkJd3R5cGUgPSAod2NhcHMgJiBBQ19XQ0FQX1RZUEUpID4+IEFDX1dDQVBfVFlQRV9TSElGVDsKIAkJLyogd2UgY2hlY2sgb25seSBhbmFsb2cgb3V0cHV0cyAqLwogCQlpZiAod3R5cGUgIT0gQUNfV0lEX0FVRF9PVVQgfHwgKHdjYXBzICYgQUNfV0NBUF9ESUdJVEFMKSkKQEAgLTI4OTUsNiArMjg4NCwxNiBAQAogCQkJcmV0dXJuIGNvbm5bal07CiAJCX0KIAl9CisJLyogaWYgYWxsIERBQ3MgYXJlIGFscmVhZHkgYXNzaWduZWQsIGNvbm5lY3QgdG8gdGhlIHByaW1hcnkgREFDICovCisJaWYgKGNvbm5fbGVuID4gMSkgeworCQlmb3IgKGogPSAwOyBqIDwgY29ubl9sZW47IGorKykgeworCQkJaWYgKGNvbm5bal0gPT0gc3BlYy0+bXVsdGlvdXQuZGFjX25pZHNbMF0pIHsKKwkJCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJCQkJCQkgIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCBqKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjkzNSw2ICsyOTM0LDI2IEBACiAJCWFkZF9zcGVjX2RhY3Moc3BlYywgZGFjKTsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5ocF9vdXRzOyBpKyspIHsKKwkJbmlkID0gY2ZnLT5ocF9waW5zW2ldOworCQlkYWMgPSBnZXRfdW5hc3NpZ25lZF9kYWMoY29kZWMsIG5pZCk7CisJCWlmIChkYWMpIHsKKwkJCWlmICghc3BlYy0+bXVsdGlvdXQuaHBfbmlkKQorCQkJCXNwZWMtPm11bHRpb3V0LmhwX25pZCA9IGRhYzsKKwkJCWVsc2UKKwkJCQlhZGRfc3BlY19leHRyYV9kYWNzKHNwZWMsIGRhYyk7CisJCX0KKwkJc3BlYy0+aHBfZGFjc1tpXSA9IGRhYzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5zcGVha2VyX291dHM7IGkrKykgeworCQluaWQgPSBjZmctPnNwZWFrZXJfcGluc1tpXTsKKwkJZGFjID0gZ2V0X3VuYXNzaWduZWRfZGFjKGNvZGVjLCBuaWQpOworCQlpZiAoZGFjKQorCQkJYWRkX3NwZWNfZXh0cmFfZGFjcyhzcGVjLCBkYWMpOworCQlzcGVjLT5zcGVha2VyX2RhY3NbaV0gPSBkYWM7CisJfQorCiAJLyogYWRkIGxpbmUtaW4gYXMgb3V0cHV0ICovCiAJbmlkID0gY2hlY2tfbGluZV9vdXRfc3dpdGNoKGNvZGVjKTsKIAlpZiAobmlkKSB7CkBAIC0yOTYyLDI2ICsyOTgxLDYgQEAKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBjZmctPmhwX291dHM7IGkrKykgewotCQluaWQgPSBjZmctPmhwX3BpbnNbaV07Ci0JCWRhYyA9IGdldF91bmFzc2lnbmVkX2RhYyhjb2RlYywgbmlkKTsKLQkJaWYgKGRhYykgewotCQkJaWYgKCFzcGVjLT5tdWx0aW91dC5ocF9uaWQpCi0JCQkJc3BlYy0+bXVsdGlvdXQuaHBfbmlkID0gZGFjOwotCQkJZWxzZQotCQkJCWFkZF9zcGVjX2V4dHJhX2RhY3Moc3BlYywgZGFjKTsKLQkJfQotCQlzcGVjLT5ocF9kYWNzW2ldID0gZGFjOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBjZmctPnNwZWFrZXJfb3V0czsgaSsrKSB7Ci0JCW5pZCA9IGNmZy0+c3BlYWtlcl9waW5zW2ldOwotCQlkYWMgPSBnZXRfdW5hc3NpZ25lZF9kYWMoY29kZWMsIG5pZCk7Ci0JCWlmIChkYWMpCi0JCQlhZGRfc3BlY19leHRyYV9kYWNzKHNwZWMsIGRhYyk7Ci0JCXNwZWMtPnNwZWFrZXJfZGFjc1tpXSA9IGRhYzsKLQl9Ci0KIAlzbmRfcHJpbnRkKCJzdGFjOTJ4eDogZGFjX25pZHM9JWQgKDB4JXgvMHgleC8weCV4LzB4JXgvMHgleClcbiIsCiAJCSAgIHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzLAogCQkgICBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1swXSwKQEAgLTI5OTQsMjQgKzI5OTMsNDcgQEAKIH0KIAogLyogY3JlYXRlIHZvbHVtZSBjb250cm9sL3N3aXRjaCBmb3IgdGhlIGdpdmVuIHByZWZ4IHR5cGUgKi8KLXN0YXRpYyBpbnQgY3JlYXRlX2NvbnRyb2xzKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLCBjb25zdCBjaGFyICpwZngsIGhkYV9uaWRfdCBuaWQsIGludCBjaHMpCitzdGF0aWMgaW50IGNyZWF0ZV9jb250cm9sc19pZHgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGNvbnN0IGNoYXIgKnBmeCwKKwkJCSAgICAgICBpbnQgaWR4LCBoZGFfbmlkX3QgbmlkLCBpbnQgY2hzKQogeworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJY2hhciBuYW1lWzMyXTsKIAlpbnQgZXJyOwogCisJaWYgKCFzcGVjLT5jaGVja192b2x1bWVfb2Zmc2V0KSB7CisJCXVuc2lnbmVkIGludCBjYXBzLCBzdGVwLCBudW1zLCBkYl9zY2FsZTsKKwkJY2FwcyA9IHF1ZXJ5X2FtcF9jYXBzKGNvZGVjLCBuaWQsIEhEQV9PVVRQVVQpOworCQlzdGVwID0gKGNhcHMgJiBBQ19BTVBDQVBfU1RFUF9TSVpFKSA+PgorCQkJQUNfQU1QQ0FQX1NURVBfU0laRV9TSElGVDsKKwkJc3RlcCA9IChzdGVwICsgMSkgKiAyNTsgLyogaW4gLjAxZEIgdW5pdCAqLworCQludW1zID0gKGNhcHMgJiBBQ19BTVBDQVBfTlVNX1NURVBTKSA+PgorCQkJQUNfQU1QQ0FQX05VTV9TVEVQU19TSElGVDsKKwkJZGJfc2NhbGUgPSBudW1zICogc3RlcDsKKwkJLyogaWYgZEIgc2NhbGUgaXMgb3ZlciAtNjRkQiwgYW5kIGZpbmVyIGVub3VnaCwKKwkJICogbGV0J3MgcmVkdWNlIGl0IHRvIGhhbGYKKwkJICovCisJCWlmIChkYl9zY2FsZSA+IDY0MDAgJiYgbnVtcyA+PSAweDFmKQorCQkJc3BlYy0+dm9sdW1lX29mZnNldCA9IG51bXMgLyAyOworCQlzcGVjLT5jaGVja192b2x1bWVfb2Zmc2V0ID0gMTsKKwl9CisKIAlzcHJpbnRmKG5hbWUsICIlcyBQbGF5YmFjayBWb2x1bWUiLCBwZngpOwotCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sKHNwZWMsIFNUQUNfQ1RMX1dJREdFVF9WT0wsIG5hbWUsCi0JCQkJICAgSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIGNocywgMCwgSERBX09VVFBVVCkpOworCWVyciA9IHN0YWM5Mnh4X2FkZF9jb250cm9sX2lkeChzcGVjLCBTVEFDX0NUTF9XSURHRVRfVk9MLCBpZHgsIG5hbWUsCisJCUhEQV9DT01QT1NFX0FNUF9WQUxfT0ZTKG5pZCwgY2hzLCAwLCBIREFfT1VUUFVULAorCQkJCQlzcGVjLT52b2x1bWVfb2Zmc2V0KSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJc3ByaW50ZihuYW1lLCAiJXMgUGxheWJhY2sgU3dpdGNoIiwgcGZ4KTsKLQllcnIgPSBzdGFjOTJ4eF9hZGRfY29udHJvbChzcGVjLCBTVEFDX0NUTF9XSURHRVRfTVVURSwgbmFtZSwKKwllcnIgPSBzdGFjOTJ4eF9hZGRfY29udHJvbF9pZHgoc3BlYywgU1RBQ19DVExfV0lER0VUX01VVEUsIGlkeCwgbmFtZSwKIAkJCQkgICBIREFfQ09NUE9TRV9BTVBfVkFMKG5pZCwgY2hzLCAwLCBIREFfT1VUUFVUKSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgY3JlYXRlX2NvbnRyb2xzKGNvZGVjLCBwZngsIG5pZCwgY2hzKSBcCisJY3JlYXRlX2NvbnRyb2xzX2lkeChjb2RlYywgcGZ4LCAwLCBuaWQsIGNocykKKwogc3RhdGljIGludCBhZGRfc3BlY19kYWNzKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLCBoZGFfbmlkX3QgbmlkKQogewogCWlmIChzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA+IDQpIHsKQEAgLTMwMzcsNDAgKzMwNTksMzIgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBpc191bmlxdWVfZGFjKHN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjLCBoZGFfbmlkX3QgbmlkKQotewotCWludCBpOwotCi0JaWYgKHNwZWMtPmF1dG9jZmcubGluZV9vdXRzICE9IDEpCi0JCXJldHVybiAwOwotCWlmIChzcGVjLT5tdWx0aW91dC5ocF9uaWQgPT0gbmlkKQotCQlyZXR1cm4gMDsKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzcGVjLT5tdWx0aW91dC5leHRyYV9vdXRfbmlkKTsgaSsrKQotCQlpZiAoc3BlYy0+bXVsdGlvdXQuZXh0cmFfb3V0X25pZFtpXSA9PSBuaWQpCi0JCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQotLyogYWRkIHBsYXliYWNrIGNvbnRyb2xzIGZyb20gdGhlIHBhcnNlZCBEQUMgdGFibGUgKi8KLXN0YXRpYyBpbnQgc3RhYzkyeHhfYXV0b19jcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcpCisvKiBDcmVhdGUgb3V0cHV0IGNvbnRyb2xzCisgKiBUaGUgbWl4ZXIgZWxlbWVudHMgYXJlIG5hbWVkIGRlcGVuZGluZyBvbiB0aGUgZ2l2ZW4gdHlwZSAoQVVUT19QSU5fWFhYX09VVCkKKyAqLworc3RhdGljIGludCBjcmVhdGVfbXVsdGlfb3V0X2N0bHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBudW1fb3V0cywKKwkJCQkgY29uc3QgaGRhX25pZF90ICpwaW5zLAorCQkJCSBjb25zdCBoZGFfbmlkX3QgKmRhY19uaWRzLAorCQkJCSBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0YXRpYyBjb25zdCBjaGFyICpjaG5hbWVbNF0gPSB7CiAJCSJGcm9udCIsICJTdXJyb3VuZCIsIE5VTEwgLypDTEZFKi8sICJTaWRlIgogCX07Ci0JaGRhX25pZF90IG5pZCA9IDA7CisJaGRhX25pZF90IG5pZDsKIAlpbnQgaSwgZXJyOwogCXVuc2lnbmVkIGludCB3aWRfY2FwczsKIAotCWZvciAoaSA9IDA7IGkgPCBjZmctPmxpbmVfb3V0cyAmJiBzcGVjLT5tdWx0aW91dC5kYWNfbmlkc1tpXTsgaSsrKSB7Ci0JCW5pZCA9IHNwZWMtPm11bHRpb3V0LmRhY19uaWRzW2ldOwotCQlpZiAoaSA9PSAyKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9vdXRzICYmIGkgPCBBUlJBWV9TSVpFKGNobmFtZSk7IGkrKykgeworCQluaWQgPSBkYWNfbmlkc1tpXTsKKwkJaWYgKCFuaWQpCisJCQljb250aW51ZTsKKwkJaWYgKHR5cGUgIT0gQVVUT19QSU5fSFBfT1VUICYmIGkgPT0gMikgewogCQkJLyogQ2VudGVyL0xGRSAqLwotCQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKHNwZWMsICJDZW50ZXIiLCBuaWQsIDEpOworCQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKGNvZGVjLCAiQ2VudGVyIiwgbmlkLCAxKTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiBlcnI7Ci0JCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgIkxGRSIsIG5pZCwgMik7CisJCQllcnIgPSBjcmVhdGVfY29udHJvbHMoY29kZWMsICJMRkUiLCBuaWQsIDIpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKIApAQCAtMzA4NiwyMyArMzEwMCw0NyBAQAogCQkJfQogCiAJCX0gZWxzZSB7Ci0JCQljb25zdCBjaGFyICpuYW1lID0gY2huYW1lW2ldOwotCQkJLyogaWYgaXQncyBhIHNpbmdsZSBEQUMsIGFzc2lnbiBhIGJldHRlciBuYW1lICovCi0JCQlpZiAoIWkgJiYgaXNfdW5pcXVlX2RhYyhzcGVjLCBuaWQpKSB7Ci0JCQkJc3dpdGNoIChjZmctPmxpbmVfb3V0X3R5cGUpIHsKLQkJCQljYXNlIEFVVE9fUElOX0hQX09VVDoKLQkJCQkJbmFtZSA9ICJIZWFkcGhvbmUiOwotCQkJCQlicmVhazsKLQkJCQljYXNlIEFVVE9fUElOX1NQRUFLRVJfT1VUOgotCQkJCQluYW1lID0gIlNwZWFrZXIiOwotCQkJCQlicmVhazsKLQkJCQl9CisJCQljb25zdCBjaGFyICpuYW1lOworCQkJaW50IGlkeDsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBBVVRPX1BJTl9IUF9PVVQ6CisJCQkJbmFtZSA9ICJIZWFkcGhvbmUiOworCQkJCWlkeCA9IGk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFVVE9fUElOX1NQRUFLRVJfT1VUOgorCQkJCW5hbWUgPSAiU3BlYWtlciI7CisJCQkJaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJbmFtZSA9IGNobmFtZVtpXTsKKwkJCQlpZHggPSAwOworCQkJCWJyZWFrOwogCQkJfQotCQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKHNwZWMsIG5hbWUsIG5pZCwgMyk7CisJCQllcnIgPSBjcmVhdGVfY29udHJvbHNfaWR4KGNvZGVjLCBuYW1lLCBpZHgsIG5pZCwgMyk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOworCQkJaWYgKHR5cGUgPT0gQVVUT19QSU5fSFBfT1VUICYmICFzcGVjLT5ocF9kZXRlY3QpIHsKKwkJCQl3aWRfY2FwcyA9IGdldF93Y2Fwcyhjb2RlYywgcGluc1tpXSk7CisJCQkJaWYgKHdpZF9jYXBzICYgQUNfV0NBUF9VTlNPTF9DQVApCisJCQkJCXNwZWMtPmhwX2RldGVjdCA9IDE7CisJCQl9CiAJCX0KIAl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGFkZCBwbGF5YmFjayBjb250cm9scyBmcm9tIHRoZSBwYXJzZWQgREFDIHRhYmxlICovCitzdGF0aWMgaW50IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX211bHRpX291dF9jdGxzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgICAgY29uc3Qgc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGVycjsKKworCWVyciA9IGNyZWF0ZV9tdWx0aV9vdXRfY3Rscyhjb2RlYywgY2ZnLT5saW5lX291dHMsIGNmZy0+bGluZV9vdXRfcGlucywKKwkJCQkgICAgc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMsCisJCQkJICAgIGNmZy0+bGluZV9vdXRfdHlwZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlpZiAoY2ZnLT5ocF9vdXRzID4gMSAmJiBjZmctPmxpbmVfb3V0X3R5cGUgPT0gQVVUT19QSU5fTElORV9PVVQpIHsKIAkJZXJyID0gc3RhYzkyeHhfYWRkX2NvbnRyb2woc3BlYywKQEAgLTMxMzcsNDAgKzMxNzUsMTggQEAKIAkJCQkJc3RydWN0IGF1dG9fcGluX2NmZyAqY2ZnKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IG5pZDsKLQlpbnQgaSwgZXJyLCBudW1zOworCWludCBlcnI7CiAKLQludW1zID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5ocF9vdXRzOyBpKyspIHsKLQkJc3RhdGljIGNvbnN0IGNoYXIgKnBmeHNbXSA9IHsKLQkJCSJIZWFkcGhvbmUiLCAiSGVhZHBob25lMiIsICJIZWFkcGhvbmUzIiwKLQkJfTsKLQkJdW5zaWduZWQgaW50IHdpZF9jYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBjZmctPmhwX3BpbnNbaV0pOwotCQlpZiAod2lkX2NhcHMgJiBBQ19XQ0FQX1VOU09MX0NBUCkKLQkJCXNwZWMtPmhwX2RldGVjdCA9IDE7Ci0JCWlmIChudW1zID49IEFSUkFZX1NJWkUocGZ4cykpCi0JCQljb250aW51ZTsKLQkJbmlkID0gc3BlYy0+aHBfZGFjc1tpXTsKLQkJaWYgKCFuaWQpCi0JCQljb250aW51ZTsKLQkJZXJyID0gY3JlYXRlX2NvbnRyb2xzKHNwZWMsIHBmeHNbbnVtcysrXSwgbmlkLCAzKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KLQludW1zID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgY2ZnLT5zcGVha2VyX291dHM7IGkrKykgewotCQlzdGF0aWMgY29uc3QgY2hhciAqcGZ4c1tdID0gewotCQkJIlNwZWFrZXIiLCAiRXh0ZXJuYWwgU3BlYWtlciIsICJTcGVha2VyMiIsCi0JCX07Ci0JCWlmIChudW1zID49IEFSUkFZX1NJWkUocGZ4cykpCi0JCQljb250aW51ZTsKLQkJbmlkID0gc3BlYy0+c3BlYWtlcl9kYWNzW2ldOwotCQlpZiAoIW5pZCkKLQkJCWNvbnRpbnVlOwotCQllcnIgPSBjcmVhdGVfY29udHJvbHMoc3BlYywgcGZ4c1tudW1zKytdLCBuaWQsIDMpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IGNyZWF0ZV9tdWx0aV9vdXRfY3Rscyhjb2RlYywgY2ZnLT5ocF9vdXRzLCBjZmctPmhwX3BpbnMsCisJCQkJICAgIHNwZWMtPmhwX2RhY3MsIEFVVE9fUElOX0hQX09VVCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBjcmVhdGVfbXVsdGlfb3V0X2N0bHMoY29kZWMsIGNmZy0+c3BlYWtlcl9vdXRzLCBjZmctPnNwZWFrZXJfcGlucywKKwkJCQkgICAgc3BlYy0+c3BlYWtlcl9kYWNzLCBBVVRPX1BJTl9TUEVBS0VSX09VVCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzM3OSwxMSArMzM5NSw3IEBACiAJCXVuc2lnbmVkIGludCB3Y2FwczsKIAkJdW5zaWduZWQgaW50IGRlZl9jb25mOwogCi0JCWRlZl9jb25mID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLAotCQkJCQkgICAgICBzcGVjLT5kbWljX25pZHNbaV0sCi0JCQkJCSAgICAgIDAsCi0JCQkJCSAgICAgIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULAotCQkJCQkgICAgICAwKTsKKwkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX2dldF9waW5jZmcoY29kZWMsIHNwZWMtPmRtaWNfbmlkc1tpXSk7CiAJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpID09IEFDX0pBQ0tfUE9SVF9OT05FKQogCQkJY29udGludWU7CiAKQEAgLTM1MDcsNiArMzUxOSw3IEBACiBzdGF0aWMgaW50IHN0YWM5Mnh4X3BhcnNlX2F1dG9fY29uZmlnKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgZGlnX291dCwgaGRhX25pZF90IGRpZ19pbikKIHsKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBocF9zd2FwID0gMDsKIAlpbnQgZXJyOwogCiAJaWYgKChlcnIgPSBzbmRfaGRhX3BhcnNlX3Bpbl9kZWZfY29uZmlnKGNvZGVjLApAQCAtMzUxNiw3ICszNTI5LDYgQEAKIAlpZiAoISBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cykKIAkJcmV0dXJuIDA7IC8qIGNhbid0IGZpbmQgdmFsaWQgcGluIGNvbmZpZyAqLwogCi0jaWYgMCAvKiBGSVhNRTogdGVtcG9yYXJpbHkgZGlzYWJsZWQgKi8KIAkvKiBJZiB3ZSBoYXZlIG5vIHJlYWwgbGluZS1vdXQgcGluIGFuZCBtdWx0aXBsZSBocC1vdXRzLCBIUHMgc2hvdWxkCiAJICogYmUgc2V0IHVwIGFzIG11bHRpLWNoYW5uZWwgb3V0cHV0cy4KIAkgKi8KQEAgLTM1MzUsOCArMzU0Nyw4IEBACiAJCXNwZWMtPmF1dG9jZmcubGluZV9vdXRzID0gc3BlYy0+YXV0b2NmZy5ocF9vdXRzOwogCQlzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0X3R5cGUgPSBBVVRPX1BJTl9IUF9PVVQ7CiAJCXNwZWMtPmF1dG9jZmcuaHBfb3V0cyA9IDA7CisJCWhwX3N3YXAgPSAxOwogCX0KLSNlbmRpZiAvKiBGSVhNRTogdGVtcG9yYXJpbHkgZGlzYWJsZWQgKi8KIAlpZiAoc3BlYy0+YXV0b2NmZy5tb25vX291dF9waW4pIHsKIAkJaW50IGRpciA9IGdldF93Y2Fwcyhjb2RlYywgc3BlYy0+YXV0b2NmZy5tb25vX291dF9waW4pICYKIAkJCShBQ19XQ0FQX09VVF9BTVAgfCBBQ19XQ0FQX0lOX0FNUCk7CkBAIC0zNjI5LDEyICszNjQxLDE5IEBACiAjZW5kaWYKIAogCWVyciA9IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX2hwX2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKLQogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gc3RhYzkyeHhfYXV0b19jcmVhdGVfYW5hbG9nX2lucHV0X2N0bHMoY29kZWMsICZzcGVjLT5hdXRvY2ZnKTsKKwkvKiBBbGwgb3V0cHV0IHBhcnNpbmcgZG9uZSwgbm93IHJlc3RvcmUgdGhlIHN3YXBwZWQgaHAgcGlucyAqLworCWlmIChocF9zd2FwKSB7CisJCW1lbWNweShzcGVjLT5hdXRvY2ZnLmhwX3BpbnMsIHNwZWMtPmF1dG9jZmcubGluZV9vdXRfcGlucywKKwkJICAgICAgIHNpemVvZihzcGVjLT5hdXRvY2ZnLmhwX3BpbnMpKTsKKwkJc3BlYy0+YXV0b2NmZy5ocF9vdXRzID0gc3BlYy0+YXV0b2NmZy5saW5lX291dHM7CisJCXNwZWMtPmF1dG9jZmcubGluZV9vdXRfdHlwZSA9IEFVVE9fUElOX0hQX09VVDsKKwkJc3BlYy0+YXV0b2NmZy5saW5lX291dHMgPSAwOworCX0KIAorCWVyciA9IHN0YWM5Mnh4X2F1dG9fY3JlYXRlX2FuYWxvZ19pbnB1dF9jdGxzKGNvZGVjLCAmc3BlYy0+YXV0b2NmZyk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTM2NjMsMTEgKzM2ODIsMTUgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJZXJyID0gc3RhYzkyeHhfYWRkX2lucHV0X3NvdXJjZShzcGVjKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IHNwZWMtPm11bHRpb3V0Lm51bV9kYWNzICogMjsKIAlpZiAoc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID4gMikKIAkJc3BlYy0+c3Vycl9zd2l0Y2ggPSAxOwogCi0JaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dF9waW4pCisJaWYgKHNwZWMtPmF1dG9jZmcuZGlnX291dHMpCiAJCXNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkID0gZGlnX291dDsKIAlpZiAoZGlnX2luICYmIHNwZWMtPmF1dG9jZmcuZGlnX2luX3BpbikKIAkJc3BlYy0+ZGlnX2luX25pZCA9IGRpZ19pbjsKQEAgLTM3MzAsOSArMzc1Myw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5hdXRvY2ZnLmxpbmVfb3V0cyAmJiBsZmVfcGluID09IDB4MDsgaSsrKSB7CiAJCQloZGFfbmlkX3QgcGluID0gc3BlYy0+YXV0b2NmZy5saW5lX291dF9waW5zW2ldOwogCQkJdW5zaWduZWQgaW50IGRlZmNmZzsKLQkJCWRlZmNmZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluLCAwLAotCQkJCQkJIEFDX1ZFUkJfR0VUX0NPTkZJR19ERUZBVUxULAotCQkJCQkJIDB4MDApOworCQkJZGVmY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBwaW4pOwogCQkJaWYgKGdldF9kZWZjZmdfZGV2aWNlKGRlZmNmZykgPT0gQUNfSkFDS19TUEVBS0VSKSB7CiAJCQkJdW5zaWduZWQgaW50IHdjYXBzID0gZ2V0X3djYXBzKGNvZGVjLCBwaW4pOwogCQkJCXdjYXBzICY9IChBQ19XQ0FQX1NURVJFTyB8IEFDX1dDQVBfT1VUX0FNUCk7CkBAIC0zNzQ1LDcgKzM3NjYsNyBAQAogCX0KIAogCWlmIChsZmVfcGluKSB7Ci0JCWVyciA9IGNyZWF0ZV9jb250cm9scyhzcGVjLCAiTEZFIiwgbGZlX3BpbiwgMSk7CisJCWVyciA9IGNyZWF0ZV9jb250cm9scyhjb2RlYywgIkxGRSIsIGxmZV9waW4sIDEpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMzc3Niw3ICszNzk3LDExIEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19vdXRfcGluKQorCWVyciA9IHN0YWM5Mnh4X2FkZF9pbnB1dF9zb3VyY2Uoc3BlYyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlpZiAoc3BlYy0+YXV0b2NmZy5kaWdfb3V0cykKIAkJc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQgPSAweDA1OwogCWlmIChzcGVjLT5hdXRvY2ZnLmRpZ19pbl9waW4pCiAJCXNwZWMtPmRpZ19pbl9uaWQgPSAweDA0OwpAQCAtMzgzMiw4ICszODU3LDcgQEAKICNpZmRlZiBDT05GSUdfU05EX0pBQ0sKIAlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCXN0cnVjdCBzaWdtYXRlbF9qYWNrICpqYWNrOwotCWludCBkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLAotCQkJMCwgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCWludCBkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAlpbnQgY29ubmVjdGl2aXR5ID0gZ2V0X2RlZmNmZ19jb25uZWN0KGRlZl9jb25mKTsKIAljaGFyIG5hbWVbMzJdOwogCkBAIC0zOTQ4LDYgKzM5NzIsMzYgQEAKIHN0YXRpYyB2b2lkIHN0YWNfdG9nZ2xlX3Bvd2VyX21hcChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKIAkJCQkgIGludCBlbmFibGUpOwogCisvKiBvdmVycmlkZSBzb21lIGhpbnRzIGZyb20gdGhlIGh3ZGVwIGVudHJ5ICovCitzdGF0aWMgdm9pZCBzdGFjX3N0b3JlX2hpbnRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJY29uc3QgY2hhciAqcDsKKwlpbnQgdmFsOworCisJdmFsID0gc25kX2hkYV9nZXRfYm9vbF9oaW50KGNvZGVjLCAiaHBfZGV0ZWN0Iik7CisJaWYgKHZhbCA+PSAwKQorCQlzcGVjLT5ocF9kZXRlY3QgPSB2YWw7CisJcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX21hc2siKTsKKwlpZiAocCkgeworCQlzcGVjLT5ncGlvX21hc2sgPSBzaW1wbGVfc3RydG91bChwLCBOVUxMLCAwKTsKKwkJc3BlYy0+ZWFwZF9tYXNrID0gc3BlYy0+Z3Bpb19kaXIgPSBzcGVjLT5ncGlvX2RhdGEgPQorCQkJc3BlYy0+Z3Bpb19tYXNrOworCX0KKwlwID0gc25kX2hkYV9nZXRfaGludChjb2RlYywgImdwaW9fZGlyIik7CisJaWYgKHApCisJCXNwZWMtPmdwaW9fZGlyID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7CisJcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJncGlvX2RhdGEiKTsKKwlpZiAocCkKKwkJc3BlYy0+Z3Bpb19kYXRhID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7CisJcCA9IHNuZF9oZGFfZ2V0X2hpbnQoY29kZWMsICJlYXBkX21hc2siKTsKKwlpZiAocCkKKwkJc3BlYy0+ZWFwZF9tYXNrID0gc2ltcGxlX3N0cnRvdWwocCwgTlVMTCwgMCkgJiBzcGVjLT5ncGlvX21hc2s7CisJdmFsID0gc25kX2hkYV9nZXRfYm9vbF9oaW50KGNvZGVjLCAiZWFwZF9zd2l0Y2giKTsKKwlpZiAodmFsID49IDApCisJCXNwZWMtPmVhcGRfc3dpdGNoID0gdmFsOworfQorCiBzdGF0aWMgaW50IHN0YWM5Mnh4X2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKQEAgLTM5NjQsNiArNDAxOCw5IEBACiAJCQkJc3BlYy0+YWRjX25pZHNbaV0sIDAsCiAJCQkJQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIEFDX1BXUlNUX0QzKTsKIAorCS8qIG92ZXJyaWRlIHNvbWUgaGludHMgKi8KKwlzdGFjX3N0b3JlX2hpbnRzKGNvZGVjKTsKKwogCS8qIHNldCB1cCBHUElPICovCiAJZ3BpbyA9IHNwZWMtPmdwaW9fZGF0YTsKIAkvKiB0dXJuIG9uIEVBUEQgc3RhdGljYWxseSB3aGVuIHNwZWMtPmVhcGRfc3dpdGNoIGlzbid0IHNldC4KQEAgLTQwMTMsOCArNDA3MCw3IEBACiAJCQkJCQkJCSBwaW5jdGwpOwogCQkJCX0KIAkJCX0KLQkJCWNvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQkJY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJCWlmIChnZXRfZGVmY2ZnX2Nvbm5lY3QoY29uZikgIT0gQUNfSkFDS19QT1JUX0ZJWEVEKSB7CiAJCQkJZW5hYmxlX3Bpbl9kZXRlY3QoY29kZWMsIG5pZCwKIAkJCQkJCSAgU1RBQ19JTlNFUlRfRVZFTlQpOwpAQCAtNDAyNiw4ICs0MDgyLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX2RtaWNzOyBpKyspCiAJCXN0YWM5Mnh4X2F1dG9fc2V0X3BpbmN0bChjb2RlYywgc3BlYy0+ZG1pY19uaWRzW2ldLAogCQkJCQlBQ19QSU5DVExfSU5fRU4pOwotCWlmIChjZmctPmRpZ19vdXRfcGluKQotCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX291dF9waW4sCisJaWYgKGNmZy0+ZGlnX291dF9waW5zWzBdKQorCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIGNmZy0+ZGlnX291dF9waW5zWzBdLAogCQkJCQkgQUNfUElOQ1RMX09VVF9FTik7CiAJaWYgKGNmZy0+ZGlnX2luX3BpbikKIAkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCBjZmctPmRpZ19pbl9waW4sCkBAIC00MDU1LDggKzQxMTEsNyBAQAogCQkJc3RhY190b2dnbGVfcG93ZXJfbWFwKGNvZGVjLCBuaWQsIDEpOwogCQkJY29udGludWU7CiAJCX0KLQkJZGVmX2NvbmYgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJICAgICAgQUNfVkVSQl9HRVRfQ09ORklHX0RFRkFVTFQsIDApOworCQlkZWZfY29uZiA9IHNuZF9oZGFfY29kZWNfZ2V0X3BpbmNmZyhjb2RlYywgbmlkKTsKIAkJZGVmX2NvbmYgPSBnZXRfZGVmY2ZnX2Nvbm5lY3QoZGVmX2NvbmYpOwogCQkvKiBza2lwIGFueSBwb3J0cyB0aGF0IGRvbid0IGhhdmUgamFja3Mgc2luY2UgcHJlc2VuY2UKICAJCSAqIGRldGVjdGlvbiBpcyB1c2VsZXNzICovCkBAIC00MTEwLDcgKzQxNjUsNiBAQAogCWlmICghIHNwZWMpCiAJCXJldHVybjsKIAotCWtmcmVlKHNwZWMtPnBpbl9jb25maWdzKTsKIAlzdGFjOTJ4eF9mcmVlX2phY2tzKGNvZGVjKTsKIAlzbmRfYXJyYXlfZnJlZSgmc3BlYy0+ZXZlbnRzKTsKIApAQCAtNDEyMSw3ICs0MTc1LDkgQEAKIHN0YXRpYyB2b2lkIHN0YWM5Mnh4X3NldF9waW5jdGwoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQsCiAJCQkJdW5zaWduZWQgaW50IGZsYWcpCiB7Ci0JdW5zaWduZWQgaW50IHBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKKwl1bnNpZ25lZCBpbnQgb2xkX2N0bCwgcGluX2N0bDsKKworCXBpbl9jdGwgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwKIAkJCTAsIEFDX1ZFUkJfR0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgMHgwMCk7CiAKIAlpZiAocGluX2N0bCAmIEFDX1BJTkNUTF9JTl9FTikgewpAQCAtNDEzNSwxNCArNDE5MSwxNyBAQAogCQkJcmV0dXJuOwogCX0KIAorCW9sZF9jdGwgPSBwaW5fY3RsOwogCS8qIGlmIHNldHRpbmcgcGluIGRpcmVjdGlvbiBiaXRzLCBjbGVhciB0aGUgY3VycmVudAogCSAgIGRpcmVjdGlvbiBiaXRzIGZpcnN0ICovCiAJaWYgKGZsYWcgJiAoQUNfUElOQ1RMX0lOX0VOIHwgQUNfUElOQ1RMX09VVF9FTikpCiAJCXBpbl9jdGwgJj0gfihBQ19QSU5DVExfSU5fRU4gfCBBQ19QSU5DVExfT1VUX0VOKTsKIAkKLQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCi0JCQlBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCi0JCQlwaW5fY3RsIHwgZmxhZyk7CisJcGluX2N0bCB8PSBmbGFnOworCWlmIChvbGRfY3RsICE9IHBpbl9jdGwpCisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKKwkJCQkJICBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsCisJCQkJCSAgcGluX2N0bCk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YWM5Mnh4X3Jlc2V0X3BpbmN0bChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKQEAgLTQxNTAsOSArNDIwOSwxMCBAQAogewogCXVuc2lnbmVkIGludCBwaW5fY3RsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsCiAJCQkwLCBBQ19WRVJCX0dFVF9QSU5fV0lER0VUX0NPTlRST0wsIDB4MDApOwotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIG5pZCwgMCwKLQkJCUFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwKLQkJCXBpbl9jdGwgJiB+ZmxhZyk7CisJaWYgKHBpbl9jdGwgJiBmbGFnKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlX2NhY2hlKGNvZGVjLCBuaWQsIDAsCisJCQkJCSAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLAorCQkJCQkgIHBpbl9jdGwgJiB+ZmxhZyk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3Bpbl9wcmVzZW5jZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKQEAgLTQ0MTUsNyArNDQ3NSw2IEBACiB7CiAJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAotCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYyk7CiAJc3RhYzkyeHhfaW5pdChjb2RlYyk7CiAJc25kX2hkYV9jb2RlY19yZXN1bWVfYW1wKGNvZGVjKTsKIAlzbmRfaGRhX2NvZGVjX3Jlc3VtZV9jYWNoZShjb2RlYyk7CkBAIC00NDI2LDYgKzQ0ODUsMzcgQEAKIAlyZXR1cm4gMDsKIH0KIAorCisvKgorICogdXNpbmcgcG93ZXIgY2hlY2sgZm9yIGNvbnRyb2xsaW5nIG11dGUgbGVkIG9mIEhQIEhEWCBub3RlYm9va3MKKyAqIGNoZWNrIGZvciBtdXRlIHN0YXRlIG9ubHkgb24gU3BlYWtlcnMgKG5pZCA9IDB4MTApCisgKgorICogRm9yIHRoaXMgZmVhdHVyZSBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFIGlzIG5lZWRlZCwgb3RoZXJ3aXNlCisgKiB0aGUgTEVEIGlzIE5PVCB3b3JraW5nIHByb3Blcmx5ICEKKyAqLworCisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorc3RhdGljIGludCBzdGFjOTJ4eF9ocF9oZHhfY2hlY2tfcG93ZXJfc3RhdHVzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgICBoZGFfbmlkX3QgbmlkKQoreworCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAobmlkID09IDB4MTApIHsKKwkJaWYgKHNuZF9oZGFfY29kZWNfYW1wX3JlYWQoY29kZWMsIG5pZCwgMCwgSERBX09VVFBVVCwgMCkgJgorCQkgICAgSERBX0FNUF9NVVRFKQorCQkJc3BlYy0+Z3Bpb19kYXRhICY9IH4weDA4OyAgLyogb3JhbmdlICovCisJCWVsc2UKKwkJCXNwZWMtPmdwaW9fZGF0YSB8PSAweDA4OyAgIC8qIHdoaXRlICovCisKKwkJc3RhY19ncGlvX3NldChjb2RlYywgc3BlYy0+Z3Bpb19tYXNrLAorCQkJICAgICAgc3BlYy0+Z3Bpb19kaXIsCisJCQkgICAgICBzcGVjLT5ncGlvX2RhdGEpOworCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgc3RhYzkyeHhfc3VzcGVuZChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CkBAIC00NDY0LDE2ICs0NTU0LDExIEBACiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIFNUQUNfOTIwMF9NT0RFTFMsCiAJCQkJCQkJc3RhYzkyMDBfbW9kZWxzLAogCQkJCQkJCXN0YWM5MjAwX2NmZ190YmwpOwotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTIwMCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwllbHNlCisJCXN0YWM5Mnh4X3NldF9jb25maWdfcmVncyhjb2RlYywKIAkJCQkJIHN0YWM5MjAwX2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKIAlzcGVjLT5tdWx0aW91dC5udW1fZGFjcyA9IDE7CkBAIC00NTQxLDE3ICs0NjI2LDEyIEBACiAJCQkJCQkJc3RhYzkyNXhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MjV4X2NmZ190YmwpOwogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CisJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCiAJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiaGRhX2NvZGVjOiBVbmtub3duIG1vZGVsIGZvciBTVEFDOTI1eCwiCiAJCQkJICAgICAgInVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJCSBzdGFjOTI1eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAxOwpAQCAtNDYyOSwxNyArNDcwOSwxMiBAQAogCQkJCQkJCXN0YWM5MmhkNzN4eF9tb2RlbHMsCiAJCQkJCQkJc3RhYzkyaGQ3M3h4X2NmZ190YmwpOwogYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgogCQkJIiBTVEFDOTJIRDczWFgsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyaGQ3M3h4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJbnVtX2RhY3MgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgMHgwYSwKIAkJCWNvbm4sIFNUQUM5MkhENzNfREFDX0NPVU5UICsgMikgLSAxOwpAQCAtNDY1MywxNCArNDcyOCwxOCBAQAogCWNhc2UgMHgzOiAvKiA2IENoYW5uZWwgKi8KIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDczeHhfNmNoX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3M3h4XzZjaF9jb3JlX2luaXQ7CisJCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTJoZDczeHhfNmNoX2xvb3BiYWNrOwogCQlicmVhazsKIAljYXNlIDB4NDogLyogOCBDaGFubmVsICovCiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3M3h4XzhjaF9taXhlcjsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzN4eF84Y2hfY29yZV9pbml0OworCQlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyaGQ3M3h4XzhjaF9sb29wYmFjazsKIAkJYnJlYWs7CiAJY2FzZSAweDU6IC8qIDEwIENoYW5uZWwgKi8KIAkJc3BlYy0+bWl4ZXIgPSBzdGFjOTJoZDczeHhfMTBjaF9taXhlcjsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzN4eF8xMGNoX2NvcmVfaW5pdDsKKwkJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MmhkNzN4eF8xMGNoX2xvb3BiYWNrOworCQlicmVhazsKIAl9CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKIApAQCAtNDY5OSwxOCArNDc3OCwxOCBAQAogCQkJc3BlYy0+aW5pdCA9IGRlbGxfbTZfY29yZV9pbml0OwogCQlzd2l0Y2ggKHNwZWMtPmJvYXJkX2NvbmZpZykgewogCQljYXNlIFNUQUNfREVMTF9NNl9BTUlDOiAvKiBBbmFsb2cgTWljcyAqLwotCQkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWcoY29kZWMsIDB4MGIsIDB4OTBBNzAxNzApOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBiLCAweDkwQTcwMTcwKTsKIAkJCXNwZWMtPm51bV9kbWljcyA9IDA7CiAJCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyA9IDE7CiAJCQlicmVhazsKIAkJY2FzZSBTVEFDX0RFTExfTTZfRE1JQzogLyogRGlnaXRhbCBNaWNzICovCi0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgxMywgMHg5MEE2MDE2MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MTMsIDB4OTBBNjAxNjApOwogCQkJc3BlYy0+bnVtX2RtaWNzID0gMTsKIAkJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zID0gMjsKIAkJCWJyZWFrOwogCQljYXNlIFNUQUNfREVMTF9NNl9CT1RIOiAvKiBCb3RoICovCi0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgwYiwgMHg5MEE3MDE3MCk7Ci0JCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZyhjb2RlYywgMHgxMywgMHg5MEE2MDE2MCk7CisJCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGIsIDB4OTBBNzAxNzApOworCQkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDEzLCAweDkwQTYwMTYwKTsKIAkJCXNwZWMtPm51bV9kbWljcyA9IDE7CiAJCQlzcGVjLT5wcml2YXRlX2RpbXV4Lm51bV9pdGVtcyA9IDI7CiAJCQlicmVhazsKQEAgLTQ3NzMsNiArNDg1Miw3IEBACiAJaGRhX25pZF90IGNvbm5bU1RBQzkySEQ4M19EQUNfQ09VTlQgKyAxXTsKIAlpbnQgZXJyOwogCWludCBudW1fZGFjczsKKwloZGFfbmlkX3QgbmlkOwogCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC00NzkxLDE1ICs0ODcxLDYgQEAKIAlzcGVjLT5udW1fcHdycyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4M3h4eF9wd3Jfbmlkcyk7CiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKIAotCi0JLyogc2V0IHBvcnQgMHhlIHRvIHNlbGVjdCB0aGUgbGFzdCBEQUMKLQkgKi8KLQludW1fZGFjcyA9IHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCAweDBlLAotCQljb25uLCBTVEFDOTJIRDgzX0RBQ19DT1VOVCArIDEpIC0gMTsKLQotCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIDB4ZSwgMCwKLQkJQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIG51bV9kYWNzKTsKLQogCXNwZWMtPmluaXQgPSBzdGFjOTJoZDgzeHh4X2NvcmVfaW5pdDsKIAlzcGVjLT5taXhlciA9IHN0YWM5MmhkODN4eHhfbWl4ZXI7CiAJc3BlYy0+bnVtX3BpbnMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkODN4eHhfcGluX25pZHMpOwpAQCAtNDgxNCwxNyArNDg4NSwxMiBAQAogCQkJCQkJCXN0YWM5MmhkODN4eHhfbW9kZWxzLAogCQkJCQkJCXN0YWM5MmhkODN4eHhfY2ZnX3RibCk7CiBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCiAJCQkiIFNUQUM5MkhEODNYWFgsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyaGQ4M3h4eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgewogCWNhc2UgMHgxMTFkNzYwNDoKQEAgLTQ4NTEsNiArNDkxNywyMyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CisJY2FzZSBTVEFDX0RFTExfUzE0OgorCQluaWQgPSAweGY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW5pZCA9IDB4ZTsKKwkJYnJlYWs7CisJfQorCisJbnVtX2RhY3MgPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgbmlkLAorCQkJCWNvbm4sIFNUQUM5MkhEODNfREFDX0NPVU5UICsgMSkgLSAxOworCisJLyogc2V0IHBvcnQgWCB0byBzZWxlY3QgdGhlIGxhc3QgREFDCisJICovCisJc25kX2hkYV9jb2RlY193cml0ZV9jYWNoZShjb2RlYywgbmlkLCAwLAorCQkJQUNfVkVSQl9TRVRfQ09OTkVDVF9TRUwsIG51bV9kYWNzKTsKKwogCWNvZGVjLT5wYXRjaF9vcHMgPSBzdGFjOTJ4eF9wYXRjaF9vcHM7CiAKIAljb2RlYy0+cHJvY193aWRnZXRfaG9vayA9IHN0YWM5MmhkX3Byb2NfaG9vazsKQEAgLTQ4NTgsNyArNDk0MSwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3MWJ4eF9kbXV4ID0geworc3RhdGljIHN0cnVjdCBoZGFfaW5wdXRfbXV4IHN0YWM5MmhkNzFieHhfZG11eF9ub21peGVyID0geworCS5udW1faXRlbXMgPSAzLAorCS5pdGVtcyA9IHsKKwkJeyAiQW5hbG9nIElucHV0cyIsIDB4MDAgfSwKKwkJeyAiRGlnaXRhbCBNaWMgMSIsIDB4MDIgfSwKKwkJeyAiRGlnaXRhbCBNaWMgMiIsIDB4MDMgfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggc3RhYzkyaGQ3MWJ4eF9kbXV4X2FtaXhlciA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CiAJCXsgIkFuYWxvZyBJbnB1dHMiLCAweDAwIH0sCkBAIC00ODY4LDEwICs0OTYwLDY3IEBACiAJfQogfTsKIAorLyogZ2V0IHRoZSBwaW4gY29ubmVjdGlvbiAoZml4ZWQsIG5vbmUsIGV0YykgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RhY19nZXRfZGVmY2ZnX2Nvbm5lY3Qoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGludCBpZHgpCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwl1bnNpZ25lZCBpbnQgY2ZnOworCisJY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCBzcGVjLT5waW5fbmlkc1tpZHhdKTsKKwlyZXR1cm4gZ2V0X2RlZmNmZ19jb25uZWN0KGNmZyk7Cit9CisKK3N0YXRpYyBpbnQgc3RhYzkyaGQ3MWJ4eF9jb25uZWN0ZWRfcG9ydHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSBoZGFfbmlkX3QgKm5pZHMsIGludCBudW1fbmlkcykKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCWludCBpZHgsIG51bTsKKwl1bnNpZ25lZCBpbnQgZGVmX2NvbmY7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IG51bV9uaWRzOyBudW0rKykgeworCQlmb3IgKGlkeCA9IDA7IGlkeCA8IHNwZWMtPm51bV9waW5zOyBpZHgrKykKKwkJCWlmIChzcGVjLT5waW5fbmlkc1tpZHhdID09IG5pZHNbbnVtXSkKKwkJCQlicmVhazsKKwkJaWYgKGlkeCA+PSBzcGVjLT5udW1fcGlucykKKwkJCWJyZWFrOworCQlkZWZfY29uZiA9IHN0YWNfZ2V0X2RlZmNmZ19jb25uZWN0KGNvZGVjLCBpZHgpOworCQlpZiAoZGVmX2NvbmYgPT0gQUNfSkFDS19QT1JUX05PTkUpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIG51bTsKK30KKworc3RhdGljIGludCBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9zbXV4ZXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJCSAgaGRhX25pZF90IGRpZzBwaW4pCit7CisJc3RydWN0IHNpZ21hdGVsX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaWR4OworCisJZm9yIChpZHggPSAwOyBpZHggPCBzcGVjLT5udW1fcGluczsgaWR4KyspCisJCWlmIChzcGVjLT5waW5fbmlkc1tpZHhdID09IGRpZzBwaW4pCisJCQlicmVhazsKKwlpZiAoKGlkeCArIDIpID49IHNwZWMtPm51bV9waW5zKQorCQlyZXR1cm4gMDsKKworCS8qIGRpZzFwaW4gY2FzZSAqLworCWlmIChzdGFjX2dldF9kZWZjZmdfY29ubmVjdChjb2RlYywgaWR4ICsgMSkgIT0gQUNfSkFDS19QT1JUX05PTkUpCisJCXJldHVybiAyOworCisJLyogZGlnMHBpbiArIGRpZzJwaW4gY2FzZSAqLworCWlmIChzdGFjX2dldF9kZWZjZmdfY29ubmVjdChjb2RlYywgaWR4ICsgMikgIT0gQUNfSkFDS19QT1JUX05PTkUpCisJCXJldHVybiAyOworCWlmIChzdGFjX2dldF9kZWZjZmdfY29ubmVjdChjb2RlYywgaWR4KSAhPSBBQ19KQUNLX1BPUlRfTk9ORSkKKwkJcmV0dXJuIDE7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBwYXRjaF9zdGFjOTJoZDcxYnh4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBzaWdtYXRlbF9zcGVjICpzcGVjOworCXN0cnVjdCBoZGFfdmVyYiAqdW5tdXRlX2luaXQgPSBzdGFjOTJoZDcxYnh4X3VubXV0ZV9jb3JlX2luaXQ7CiAJaW50IGVyciA9IDA7CisJdW5zaWduZWQgaW50IG5kbWljX25pZHMgPSAwOwogCiAJc3BlYyAgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC00ODc5LDI3ICs1MDI4LDMyIEBACiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7CiAJY29kZWMtPnBhdGNoX29wcyA9IHN0YWM5Mnh4X3BhdGNoX29wczsKLQlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9waW5fbmlkcyk7CisJc3BlYy0+bnVtX3BpbnMgPSBTVEFDOTJIRDcxQlhYX05VTV9QSU5TOworCXN3aXRjaCAoY29kZWMtPnZlbmRvcl9pZCkgeworCWNhc2UgMHgxMTFkNzZiNjoKKwljYXNlIDB4MTExZDc2Yjc6CisJCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ3MWJ4eF9waW5fbmlkc180cG9ydDsKKwkJYnJlYWs7CisJY2FzZSAweDExMWQ3NjAzOgorCWNhc2UgMHgxMTFkNzYwODoKKwkJLyogT24gOTJIRDc1QnggMHgyNyBpc24ndCBhIHBpbiBuaWQgKi8KKwkJc3BlYy0+bnVtX3BpbnMtLTsKKwkJLyogZmFsbHRocm91Z2ggKi8KKwlkZWZhdWx0OgorCQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkNzFieHhfcGluX25pZHNfNnBvcnQ7CisJfQogCXNwZWMtPm51bV9wd3JzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X3B3cl9uaWRzKTsKLQlzcGVjLT5waW5fbmlkcyA9IHN0YWM5MmhkNzFieHhfcGluX25pZHM7Ci0JbWVtY3B5KCZzcGVjLT5wcml2YXRlX2RpbXV4LCAmc3RhYzkyaGQ3MWJ4eF9kbXV4LAotCQkJc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eCkpOwogCXNwZWMtPmJvYXJkX2NvbmZpZyA9IHNuZF9oZGFfY2hlY2tfYm9hcmRfY29uZmlnKGNvZGVjLAogCQkJCQkJCVNUQUNfOTJIRDcxQlhYX01PREVMUywKIAkJCQkJCQlzdGFjOTJoZDcxYnh4X21vZGVscywKIAkJCQkJCQlzdGFjOTJoZDcxYnh4X2NmZ190YmwpOwogYWdhaW46Ci0JaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApIHsKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKIAkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgogCQkJIiBTVEFDOTJIRDcxQlhYLCB1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCXN0YWM5MmhkNzFieHhfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnID4gU1RBQ185MkhENzFCWFhfUkVGKSB7CiAJCS8qIEdQSU8wID0gRUFQRCAqLwpAQCAtNDkwOCwxNiArNTA2MiwzNCBAQAogCQlzcGVjLT5ncGlvX2RhdGEgPSAweDAxOwogCX0KIAorCXNwZWMtPmRtaWNfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG1pY19uaWRzOworCXNwZWMtPmRtdXhfbmlkcyA9IHN0YWM5MmhkNzFieHhfZG11eF9uaWRzOworCiAJc3dpdGNoIChjb2RlYy0+dmVuZG9yX2lkKSB7CiAJY2FzZSAweDExMWQ3NmI2OiAvKiA0IFBvcnQgd2l0aG91dCBBbmFsb2cgTWl4ZXIgKi8KIAljYXNlIDB4MTExZDc2Yjc6CisJCXVubXV0ZV9pbml0Kys7CisJCS8qIGZhbGx0aHJ1ICovCiAJY2FzZSAweDExMWQ3NmI0OiAvKiA2IFBvcnQgd2l0aG91dCBBbmFsb2cgTWl4ZXIgKi8KIAljYXNlIDB4MTExZDc2YjU6CisJCW1lbWNweSgmc3BlYy0+cHJpdmF0ZV9kaW11eCwgJnN0YWM5MmhkNzFieHhfZG11eF9ub21peGVyLAorCQkgICAgICAgc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eF9ub21peGVyKSk7CiAJCXNwZWMtPm1peGVyID0gc3RhYzkyaGQ3MWJ4eF9taXhlcjsKIAkJc3BlYy0+aW5pdCA9IHN0YWM5MmhkNzFieHhfY29yZV9pbml0OwogCQljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTJoZDcxYnh4X3NsYXZlX2RpZ19vdXRzOworCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKKwkJCQkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMsCisJCQkJCVNUQUM5MkhENzFCWFhfTlVNX0RNSUNTKTsKKwkJaWYgKHNwZWMtPm51bV9kbWljcykgeworCQkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCQkJc3BlYy0+ZGlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2RpbXV4OworCQkJbmRtaWNfbmlkcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMpIC0gMTsKKwkJfQogCQlicmVhazsKIAljYXNlIDB4MTExZDc2MDg6IC8qIDUgUG9ydCB3aXRoIEFuYWxvZyBNaXhlciAqLworCQltZW1jcHkoJnNwZWMtPnByaXZhdGVfZGltdXgsICZzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyLAorCQkgICAgICAgc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIpKTsKKwkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMtLTsKIAkJc3dpdGNoIChzcGVjLT5ib2FyZF9jb25maWcpIHsKIAkJY2FzZSBTVEFDX0hQX000OgogCQkJLyogRW5hYmxlIFZSRUYgcG93ZXIgc2F2aW5nIG9uIEdQSU8xIGRldGVjdCAqLwpAQCAtNDk0NCw3ICs1MTE2LDE1IEBACiAKIAkJLyogZGlzYWJsZSBWU1cgKi8KIAkJc3BlYy0+aW5pdCA9ICZzdGFjOTJoZDcxYnh4X2FuYWxvZ19jb3JlX2luaXRbSERfRElTQUJMRV9QT1JURl07Ci0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4ZiwgMHg0MGYwMDBmMCk7CisJCXVubXV0ZV9pbml0Kys7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwZiwgMHg0MGYwMDBmMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgxOSwgMHg0MGYwMDBmMyk7CisJCXN0YWM5MmhkNzFieHhfZG1pY19uaWRzW1NUQUM5MkhENzFCWFhfTlVNX0RNSUNTIC0gMV0gPSAwOworCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKKwkJCQkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMsCisJCQkJCVNUQUM5MkhENzFCWFhfTlVNX0RNSUNTIC0gMSk7CisJCXNwZWMtPm51bV9kbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG11eF9uaWRzKTsKKwkJbmRtaWNfbmlkcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMpIC0gMjsKIAkJYnJlYWs7CiAJY2FzZSAweDExMWQ3NjAzOiAvKiA2IFBvcnQgd2l0aCBBbmFsb2cgTWl4ZXIgKi8KIAkJaWYgKChjb2RlYy0+cmV2aXNpb25faWQgJiAweGYpID09IDEpCkBAIC00OTU0LDEyICs1MTM0LDIzIEBACiAJCXNwZWMtPm51bV9wd3JzID0gMDsKIAkJLyogZmFsbHRocnUgKi8KIAlkZWZhdWx0OgorCQltZW1jcHkoJnNwZWMtPnByaXZhdGVfZGltdXgsICZzdGFjOTJoZDcxYnh4X2RtdXhfYW1peGVyLAorCQkgICAgICAgc2l6ZW9mKHN0YWM5MmhkNzFieHhfZG11eF9hbWl4ZXIpKTsKIAkJc3BlYy0+ZGlucHV0X211eCA9ICZzcGVjLT5wcml2YXRlX2RpbXV4OwogCQlzcGVjLT5taXhlciA9IHN0YWM5MmhkNzFieHhfYW5hbG9nX21peGVyOwogCQlzcGVjLT5pbml0ID0gc3RhYzkyaGQ3MWJ4eF9hbmFsb2dfY29yZV9pbml0OwogCQljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTJoZDcxYnh4X3NsYXZlX2RpZ19vdXRzOworCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJoZDcxYnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKKwkJCQkJc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMsCisJCQkJCVNUQUM5MkhENzFCWFhfTlVNX0RNSUNTKTsKKwkJc3BlYy0+bnVtX2RtdXhlcyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbXV4X25pZHMpOworCQluZG1pY19uaWRzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2RtaWNfbmlkcykgLSAxOwogCX0KIAorCWlmIChnZXRfd2NhcHMoY29kZWMsIDB4YSkgJiBBQ19XQ0FQX0lOX0FNUCkKKwkJc25kX2hkYV9zZXF1ZW5jZV93cml0ZV9jYWNoZShjb2RlYywgdW5tdXRlX2luaXQpOworCisJc3BlYy0+YWxvb3BiYWNrX2N0bCA9IHN0YWM5MmhkNzFieHhfbG9vcGJhY2s7CiAJc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDUwOwogCXNwZWMtPmFsb29wYmFja19zaGlmdCA9IDA7CiAKQEAgLTQ5NjcsMTggKzUxNTgsMTcgQEAKIAlzcGVjLT5kaWdiZWVwX25pZCA9IDB4MjY7CiAJc3BlYy0+bXV4X25pZHMgPSBzdGFjOTJoZDcxYnh4X211eF9uaWRzOwogCXNwZWMtPmFkY19uaWRzID0gc3RhYzkyaGQ3MWJ4eF9hZGNfbmlkczsKLQlzcGVjLT5kbWljX25pZHMgPSBzdGFjOTJoZDcxYnh4X2RtaWNfbmlkczsKLQlzcGVjLT5kbXV4X25pZHMgPSBzdGFjOTJoZDcxYnh4X2RtdXhfbmlkczsKIAlzcGVjLT5zbXV4X25pZHMgPSBzdGFjOTJoZDcxYnh4X3NtdXhfbmlkczsKIAlzcGVjLT5wd3JfbmlkcyA9IHN0YWM5MmhkNzFieHhfcHdyX25pZHM7CiAKIAlzcGVjLT5udW1fbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfbXV4X25pZHMpOwogCXNwZWMtPm51bV9hZGNzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X2FkY19uaWRzKTsKKwlzcGVjLT5udW1fc211eGVzID0gc3RhYzkyaGQ3MWJ4eF9jb25uZWN0ZWRfc211eGVzKGNvZGVjLCAweDFlKTsKIAogCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKSB7CiAJY2FzZSBTVEFDX0hQX000OgogCQkvKiBlbmFibGUgaW50ZXJuYWwgbWljcm9waG9uZSAqLwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDBlLCAweDAxODEzMDQwKTsKKwkJc25kX2hkYV9jb2RlY19zZXRfcGluY2ZnKGNvZGVjLCAweDBlLCAweDAxODEzMDQwKTsKIAkJc3RhYzkyeHhfYXV0b19zZXRfcGluY3RsKGNvZGVjLCAweDBlLAogCQkJQUNfUElOQ1RMX0lOX0VOIHwgQUNfUElOQ1RMX1ZSRUZfODApOwogCQkvKiBmYWxsdGhydSAqLwpAQCAtNDk5MywxOSArNTE4MywzNiBAQAogCQlzcGVjLT5udW1fc211eGVzID0gMDsKIAkJc3BlYy0+bnVtX2RtdXhlcyA9IDE7CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNwZWMtPm51bV9kbWljcyA9IFNUQUM5MkhENzFCWFhfTlVNX0RNSUNTOwotCQlzcGVjLT5udW1fc211eGVzID0gQVJSQVlfU0laRShzdGFjOTJoZDcxYnh4X3NtdXhfbmlkcyk7Ci0JCXNwZWMtPm51bV9kbXV4ZXMgPSBBUlJBWV9TSVpFKHN0YWM5MmhkNzFieHhfZG11eF9uaWRzKTsKKwljYXNlIFNUQUNfSFBfRFY1OgorCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGQsIDB4OTAxNzAwMTApOworCQlzdGFjOTJ4eF9hdXRvX3NldF9waW5jdGwoY29kZWMsIDB4MGQsIEFDX1BJTkNUTF9PVVRfRU4pOworCQlicmVhazsKKwljYXNlIFNUQUNfSFBfSERYOgorCQlzcGVjLT5udW1fZG1pY3MgPSAxOworCQlzcGVjLT5udW1fZG11eGVzID0gMTsKKwkJc3BlYy0+bnVtX3NtdXhlcyA9IDE7CisJCS8qCisJCSAqIEZvciBjb250cm9sbGluZyBNVVRFIExFRCBvbiBIUCBIRFgxNi9IRFgxOCBub3RlYm9va3MsCisJCSAqIHRoZSBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFIGlzIG5lZWRlZCB0byBiZSBzZXQuCisJCSAqLworI2lmZGVmIENPTkZJR19TTkRfSERBX1BPV0VSX1NBVkUKKwkJLyogb3JhbmdlL3doaXRlIG11dGUgbGVkIG9uIEdQSU8zLCBvcmFuZ2U9MCwgd2hpdGU9MSAqLworCQlzcGVjLT5ncGlvX21hc2sgfD0gMHgwODsKKwkJc3BlYy0+Z3Bpb19kaXIgIHw9IDB4MDg7CisJCXNwZWMtPmdwaW9fZGF0YSB8PSAweDA4OyAgLyogc2V0IHRvIHdoaXRlICovCisKKwkJLyogcmVnaXN0ZXIgY2hlY2tfcG93ZXJfc3RhdHVzIGNhbGxiYWNrLiAqLworCQljb2RlYy0+cGF0Y2hfb3BzLmNoZWNrX3Bvd2VyX3N0YXR1cyA9CisJCSAgICBzdGFjOTJ4eF9ocF9oZHhfY2hlY2tfcG93ZXJfc3RhdHVzOworI2VuZGlmCQorCQlicmVhazsKIAl9OwogCiAJc3BlYy0+bXVsdGlvdXQuZGFjX25pZHMgPSBzcGVjLT5kYWNfbmlkczsKIAlpZiAoc3BlYy0+ZGlucHV0X211eCkKLQkJc3BlYy0+cHJpdmF0ZV9kaW11eC5udW1faXRlbXMgKz0KLQkJCXNwZWMtPm51bV9kbWljcyAtCi0JCQkJKEFSUkFZX1NJWkUoc3RhYzkyaGQ3MWJ4eF9kbWljX25pZHMpIC0gMSk7CisJCXNwZWMtPnByaXZhdGVfZGltdXgubnVtX2l0ZW1zICs9IHNwZWMtPm51bV9kbWljcyAtIG5kbWljX25pZHM7CiAKLQllcnIgPSBzdGFjOTJ4eF9wYXJzZV9hdXRvX2NvbmZpZyhjb2RlYywgMHgyMSwgMHgyMyk7CisJZXJyID0gc3RhYzkyeHhfcGFyc2VfYXV0b19jb25maWcoY29kZWMsIDB4MjEsIDApOwogCWlmICghZXJyKSB7CiAJCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZGFfY29kZWM6IE5vIGF1dG8tY29uZmlnIGlzICIKQEAgLTUwODAsMTcgKzUyODcsMTIgQEAKIAl9CiAKICBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgU1RBQzkyMngsICIKIAkJCSJ1c2luZyBCSU9TIGRlZmF1bHRzXG4iKTsKLQkJZXJyID0gc3RhYzkyeHhfc2F2ZV9iaW9zX2NvbmZpZ19yZWdzKGNvZGVjKTsKLQl9IGVsc2UKLQkJZXJyID0gc3RhY19zYXZlX3Bpbl9jZmdzKGNvZGVjLAorCWVsc2UKKwkJc3RhYzkyeHhfc2V0X2NvbmZpZ19yZWdzKGNvZGVjLAogCQkJCXN0YWM5MjJ4X2JyZF90Ymxbc3BlYy0+Ym9hcmRfY29uZmlnXSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJc3RhYzkyeHhfZnJlZShjb2RlYyk7Ci0JCXJldHVybiBlcnI7Ci0JfQogCiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTIyeF9hZGNfbmlkczsKIAlzcGVjLT5tdXhfbmlkcyA9IHN0YWM5MjJ4X211eF9uaWRzOwpAQCAtNTE0MSwyNCArNTM0MywxOSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWNvZGVjLT5zcGVjID0gc3BlYzsKKwljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzdGFjOTI3eF9zbGF2ZV9kaWdfb3V0czsKIAlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyN3hfcGluX25pZHMpOwogCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyN3hfcGluX25pZHM7CiAJc3BlYy0+Ym9hcmRfY29uZmlnID0gc25kX2hkYV9jaGVja19ib2FyZF9jb25maWcoY29kZWMsIFNUQUNfOTI3WF9NT0RFTFMsCiAJCQkJCQkJc3RhYzkyN3hfbW9kZWxzLAogCQkJCQkJCXN0YWM5Mjd4X2NmZ190YmwpOwogIGFnYWluOgotCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwIHx8ICFzdGFjOTI3eF9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pIHsKLQkJaWYgKHNwZWMtPmJvYXJkX2NvbmZpZyA8IDApCi0JCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IiCi0JCQkJICAgICJTVEFDOTI3eCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7Ci0JCWVyciA9IHN0YWM5Mnh4X3NhdmVfYmlvc19jb25maWdfcmVncyhjb2RlYyk7Ci0JfSBlbHNlCi0JCWVyciA9IHN0YWNfc2F2ZV9waW5fY2Zncyhjb2RlYywKKwlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkKKwkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICJoZGFfY29kZWM6IFVua25vd24gbW9kZWwgZm9yIgorCQkJICAgICJTVEFDOTI3eCwgdXNpbmcgQklPUyBkZWZhdWx0c1xuIik7CisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJc3RhYzkyN3hfYnJkX3RibFtzcGVjLT5ib2FyZF9jb25maWddKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzdGFjOTJ4eF9mcmVlKGNvZGVjKTsKLQkJcmV0dXJuIGVycjsKLQl9CiAKIAlzcGVjLT5kaWdiZWVwX25pZCA9IDB4MjM7CiAJc3BlYy0+YWRjX25pZHMgPSBzdGFjOTI3eF9hZGNfbmlkczsKQEAgLTUxODcsMTUgKzUzODQsMTUgQEAKIAkJY2FzZSAweDEwMjgwMjA5OgogCQljYXNlIDB4MTAyODAyMmU6CiAJCQkvKiBjb3JyZWN0IHRoZSBkZXZpY2UgZmllbGQgdG8gU1BESUYgb3V0ICovCi0JCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDIxLCAweDAxNDQyMDcwKTsKKwkJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgyMSwgMHgwMTQ0MjA3MCk7CiAJCQlicmVhazsKIAkJfTsKIAkJLyogY29uZmlndXJlIHRoZSBhbmFsb2cgbWljcm9waG9uZSBvbiBzb21lIGxhcHRvcHMgKi8KLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgwYywgMHg5MGE3OTEzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgwYywgMHg5MGE3OTEzMCk7CiAJCS8qIGNvcnJlY3QgdGhlIGZyb250IG91dHB1dCBqYWNrIGFzIGEgaHAgb3V0ICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MGYsIDB4MDIyNzAxMWYpOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGYsIDB4MDIyNzAxMWYpOwogCQkvKiBjb3JyZWN0IHRoZSBmcm9udCBpbnB1dCBqYWNrIGFzIGEgbWljICovCi0JCXN0YWNfY2hhbmdlX3Bpbl9jb25maWcoY29kZWMsIDB4MGUsIDB4MDJhNzkxMzApOworCQlzbmRfaGRhX2NvZGVjX3NldF9waW5jZmcoY29kZWMsIDB4MGUsIDB4MDJhNzkxMzApOwogCQkvKiBmYWxsdGhydSAqLwogCWNhc2UgU1RBQ19ERUxMXzNTVDoKIAkJLyogR1BJTzIgSGlnaCA9IEVuYWJsZSBFQVBEICovCkBAIC01MjIyLDYgKzU0MTksNyBAQAogCX0KIAogCXNwZWMtPm51bV9wd3JzID0gMDsKKwlzcGVjLT5hbG9vcGJhY2tfY3RsID0gc3RhYzkyN3hfbG9vcGJhY2s7CiAJc3BlYy0+YWxvb3BiYWNrX21hc2sgPSAweDQwOwogCXNwZWMtPmFsb29wYmFja19zaGlmdCA9IDA7CiAJc3BlYy0+ZWFwZF9zd2l0Y2ggPSAxOwpAQCAtNTI4MCwxNiArNTQ3OCwxMSBAQAogCQkJCQkJCXN0YWM5MjA1X21vZGVscywKIAkJCQkJCQlzdGFjOTIwNV9jZmdfdGJsKTsKICBhZ2FpbjoKLQlpZiAoc3BlYy0+Ym9hcmRfY29uZmlnIDwgMCkgeworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgPCAwKQogCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gImhkYV9jb2RlYzogVW5rbm93biBtb2RlbCBmb3IgU1RBQzkyMDUsIHVzaW5nIEJJT1MgZGVmYXVsdHNcbiIpOwotCQllcnIgPSBzdGFjOTJ4eF9zYXZlX2Jpb3NfY29uZmlnX3JlZ3MoY29kZWMpOwotCX0gZWxzZQotCQllcnIgPSBzdGFjX3NhdmVfcGluX2NmZ3MoY29kZWMsCisJZWxzZQorCQlzdGFjOTJ4eF9zZXRfY29uZmlnX3JlZ3MoY29kZWMsCiAJCQkJCSBzdGFjOTIwNV9icmRfdGJsW3NwZWMtPmJvYXJkX2NvbmZpZ10pOwotCWlmIChlcnIgPCAwKSB7Ci0JCXN0YWM5Mnh4X2ZyZWUoY29kZWMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAogCXNwZWMtPmRpZ2JlZXBfbmlkID0gMHgyMzsKIAlzcGVjLT5hZGNfbmlkcyA9IHN0YWM5MjA1X2FkY19uaWRzOwpAQCAtNTMwNiwxNyArNTQ5OSwyMCBAQAogCiAJc3BlYy0+aW5pdCA9IHN0YWM5MjA1X2NvcmVfaW5pdDsKIAlzcGVjLT5taXhlciA9IHN0YWM5MjA1X21peGVyOworCXNwZWMtPmFsb29wYmFja19jdGwgPSBzdGFjOTIwNV9sb29wYmFjazsKIAogCXNwZWMtPmFsb29wYmFja19tYXNrID0gMHg0MDsKIAlzcGVjLT5hbG9vcGJhY2tfc2hpZnQgPSAwOwotCXNwZWMtPmVhcGRfc3dpdGNoID0gMTsKKwkvKiBUdXJuIG9uL29mZiBFQVBEIHBlciBIUCBwbHVnZ2luZyAqLworCWlmIChzcGVjLT5ib2FyZF9jb25maWcgIT0gU1RBQ185MjA1X0VBUEQpCisJCXNwZWMtPmVhcGRfc3dpdGNoID0gMTsKIAlzcGVjLT5tdWx0aW91dC5kYWNfbmlkcyA9IHNwZWMtPmRhY19uaWRzOwogCQogCXN3aXRjaCAoc3BlYy0+Ym9hcmRfY29uZmlnKXsKIAljYXNlIFNUQUNfOTIwNV9ERUxMX000MzoKIAkJLyogRW5hYmxlIFNQRElGIGluL291dCAqLwotCQlzdGFjX2NoYW5nZV9waW5fY29uZmlnKGNvZGVjLCAweDFmLCAweDAxNDQxMDMwKTsKLQkJc3RhY19jaGFuZ2VfcGluX2NvbmZpZyhjb2RlYywgMHgyMCwgMHgxYzQxMDAzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgxZiwgMHgwMTQ0MTAzMCk7CisJCXNuZF9oZGFfY29kZWNfc2V0X3BpbmNmZyhjb2RlYywgMHgyMCwgMHgxYzQxMDAzMCk7CiAKIAkJLyogRW5hYmxlIHVuc29sIHJlc3BvbnNlIGZvciBHUElPNC9Eb2NrIEhQIGNvbm5lY3Rpb24gKi8KIAkJZXJyID0gc3RhY19hZGRfZXZlbnQoc3BlYywgY29kZWMtPmFmZywgU1RBQ19WUkVGX0VWRU5ULCAweDAxKTsKQEAgLTUzNzMsMjIzICs1NTY5LDg3IEBACiAgKiBTVEFDOTg3MiBoYWNrCiAgKi8KIAotLyogc3RhdGljIGNvbmZpZyBmb3IgU29ueSBWQUlPIEZFNTUwRyBhbmQgU29ueSBWQUlPIEFSICovCi1zdGF0aWMgaGRhX25pZF90IHZhaW9fZGFjc1tdID0geyAweDIgfTsKLSNkZWZpbmUgVkFJT19IUF9EQUMJMHg1Ci1zdGF0aWMgaGRhX25pZF90IHZhaW9fYWRjc1tdID0geyAweDggLyosMHg2Ki8gfTsKLXN0YXRpYyBoZGFfbmlkX3QgdmFpb19tdXhfbmlkc1tdID0geyAweDE1IH07Ci0KLXN0YXRpYyBzdHJ1Y3QgaGRhX2lucHV0X211eCB2YWlvX211eCA9IHsKLQkubnVtX2l0ZW1zID0gMywKLQkuaXRlbXMgPSB7Ci0JCS8qIHsgIkhQIiwgMHgwIH0sICovCi0JCXsgIk1pYyBKYWNrIiwgMHgxIH0sCi0JCXsgIkludGVybmFsIE1pYyIsIDB4MiB9LAotCQl7ICJQQ00iLCAweDMgfSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIHZhaW9faW5pdFtdID0gewotCXsweDBhLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9IUCB9LCAvKiBIUCA8LSAweDIgKi8KLQl7MHgwYSwgQUNfVkVSQl9TRVRfVU5TT0xJQ0lURURfRU5BQkxFLCBBQ19VU1JTUF9FTiB8IFNUQUNfSFBfRVZFTlR9LAotCXsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwgLyogU3BlYWtlciA8LSAweDUgKi8KLQl7MHgwZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKDwtIDB4MikgKi8KLQl7MHgwZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwgLyogQ0QgKi8KLQl7MHgxNCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKi8KK3N0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgc3RhYzk4NzJfY29yZV9pbml0W10gPSB7CiAJezB4MTUsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLCAweDF9LCAvKiBtaWMtc2VsOiAwYSwwZCwxNCwwMiAqLwotCXsweDAyLCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBIUCAqLwotCXsweDA1LCBBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBBTVBfT1VUX01VVEV9LCAvKiBTcGVha2VyICovCi0JezB4MDksIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9NVVRFKDApfSwgLyogY2FwdHVyZSBzdy92b2wgLT4gMHg4ICovCi0JezB4MDcsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9JTl9VTk1VVEUoMCl9LCAvKiBDRC1pbiAtPiAweDYgKi8KIAl7MHgxNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9VTk1VVEV9LCAvKiBNaWMtaW4gLT4gMHg5ICovCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaGRhX3ZlcmIgdmFpb19hcl9pbml0W10gPSB7Ci0JezB4MGEsIEFDX1ZFUkJfU0VUX1BJTl9XSURHRVRfQ09OVFJPTCwgUElOX0hQIH0sIC8qIEhQIDwtIDB4MiAqLwotCXsweDBmLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwgLyogU3BlYWtlciA8LSAweDUgKi8KLQl7MHgwZCwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fVlJFRjgwIH0sIC8qIE1pYz8gKDwtIDB4MikgKi8KLQl7MHgwZSwgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fSU4gfSwgLyogQ0QgKi8KLS8qCXsweDExLCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9PVVQgfSwqLyAvKiBPcHRpY2FsIE91dCAqLwotCXsweDE0LCBBQ19WRVJCX1NFVF9QSU5fV0lER0VUX0NPTlRST0wsIFBJTl9WUkVGODAgfSwgLyogTWljPyAqLwotCXsweDE1LCBBQ19WRVJCX1NFVF9DT05ORUNUX1NFTCwgMHgxfSwgLyogbWljLXNlbDogMGEsMGQsMTQsMDIgKi8KLQl7MHgwMiwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwgLyogSFAgKi8KLQl7MHgwNSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX09VVF9NVVRFfSwgLyogU3BlYWtlciAqLwotLyoJezB4MTAsIEFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfTVVURX0sKi8gLyogT3B0aWNhbCBPdXQgKi8KLQl7MHgwOSwgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX01VVEUoMCl9LCAvKiBjYXB0dXJlIHN3L3ZvbCAtPiAweDggKi8KLQl7MHgwNywgQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgQU1QX0lOX1VOTVVURSgwKX0sIC8qIENELWluIC0+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+c2hvcnRuYW1lLCAiSW50ZWwgSUNIIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCmluZGV4IDVmODAwNmIuLjhiNzk5NjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCisrKyBiL3NvdW5kL3BjaS9rb3JnMTIxMi9rb3JnMTIxMi5jCkBAIC0yNDQzLDkgKzI0NDMsOSBAQAogCQlkZXYrKzsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotICAgICAgICBpZiAoY2FyZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogICAgICAgICBpZiAoKGVyciA9IHNuZF9rb3JnMTIxMl9jcmVhdGUoY2FyZCwgcGNpLCAma29yZzEyMTIpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9tYWVzdHJvMy5jIGIvc291bmQvcGNpL21hZXN0cm8zLmMKaW5kZXggNTliYmFmOC4uNzAxNDE1NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21hZXN0cm8zLmMKKysrIGIvc291bmQvcGNpL21hZXN0cm8zLmMKQEAgLTI2OTEsOSArMjY5MSw5IEBACiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAotCWNhcmQgPSBzbmRfY2FyZF9uZXcoaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJc3dpdGNoIChwY2ktPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9FU1NfQUxMRUdSTzoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCmluZGV4IGJiMTYyNTAuLmMxZWI4NGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwpAQCAtMTM2NiwxMiArMTM2NiwxMiBAQAogCQllbHNlCiAJCQlpZHggPSBpbmRleFtkZXZdICsgaTsKIAkJc25wcmludGYodG1waWQsIHNpemVvZih0bXBpZCksICIlcy0lZCIsIGlkW2Rldl0gPyBpZFtkZXZdIDogIk1JWEFSVCIsIGkpOwotCQljYXJkID0gc25kX2NhcmRfbmV3KGlkeCwgdG1waWQsIFRISVNfTU9EVUxFLCAwKTsKKwkJZXJyID0gc25kX2NhcmRfY3JlYXRlKGlkeCwgdG1waWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CiAKLQkJaWYgKCEgY2FyZCkgeworCQlpZiAoZXJyIDwgMCkgewogCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGFsbG9jYXRlIHRoZSBjYXJkICVkXG4iLCBpKTsKIAkJCXNuZF9taXhhcnRfZnJlZShtZ3IpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKIAkJc3RyY3B5KGNhcmQtPmRyaXZlciwgQ0FSRF9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jCmluZGV4IDM3ODJiNTIuLjRjZjRjZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYwpAQCAtMzQ1LDggKzM0NSw4IEBACiAJc3RhdHVzX2RhdWdodCA9IHJlYWRsX2JlKCBNSVhBUlRfTUVNKCBtZ3IsTUlYQVJUX1BTRVVET1JFR19EWExYX1NUQVRVU19PRkZTRVQgKSk7CiAKIAkvKiBtb3RoZXJib2FyZCB4aWxpbnggc3RhdHVzIDUgd2lsbCBzYXkgdGhhdCB0aGUgYm9hcmQgaXMgcGVyZm9ybWluZyBhIHJlc2V0ICovCi0JaWYoIHN0YXR1c194aWxpbnggPT0gNSApIHsKLQkJc25kX3ByaW50ayggS0VSTl9FUlIgIm1pWGFydCBpcyByZXNldHRpbmcgIVxuIik7CisJaWYgKHN0YXR1c194aWxpbnggPT0gNSkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJtaVhhcnQgaXMgcmVzZXR0aW5nICFcbiIpOwogCQlyZXR1cm4gLUVBR0FJTjsgLyogdHJ5IGFnYWluIGxhdGVyICovCiAJfQogCkBAIC0zNTQsMTMgKzM1NCwxNCBAQAogCWNhc2UgTUlYQVJUX01PVEhFUkJPQVJEX1hMWF9JTkRFWDoKIAogCQkvKiB4aWxpbnggYWxyZWFkeSBsb2FkZWQgPyAqLyAKLQkJaWYoIHN0YXR1c194aWxpbnggPT0gNCApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fREVCVUcgInhpbGlueCBpcyBhbHJlYWR5IGxvYWRlZCAhXG4iKTsKKwkJaWYgKHN0YXR1c194aWxpbnggPT0gNCkgeworCQkJc25kX3ByaW50ayhLRVJOX0RFQlVHICJ4aWxpbnggaXMgYWxyZWFkeSBsb2FkZWQgIVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQkvKiB0aGUgc3RhdHVzIHNob3VsZCBiZSAwID09ICJpZGxlIiAqLwotCQlpZiggc3RhdHVzX3hpbGlueCAhPSAwICkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgInhpbGlueCBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsIHN0YXR1c194aWxpbngpOworCQlpZiAoc3RhdHVzX3hpbGlueCAhPSAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ4aWxpbnggbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLAorCQkJCSAgIHN0YXR1c194aWxpbngpOwogCQkJcmV0dXJuIC1FSU87IC8qIG1vZHByb2IgLXIgbWF5IGhlbHAgPyAqLwogCQl9CiAKQEAgLTM4OSwyMSArMzkwLDIzIEBACiAKIAljYXNlIE1JWEFSVF9NT1RIRVJCT0FSRF9FTEZfSU5ERVg6CiAKLQkJaWYoIHN0YXR1c19lbGYgPT0gNCApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fREVCVUcgImVsZiBmaWxlIGFscmVhZHkgbG9hZGVkICFcbiIpOworCQlpZiAoc3RhdHVzX2VsZiA9PSA0KSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fREVCVUcgImVsZiBmaWxlIGFscmVhZHkgbG9hZGVkICFcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAogCQkvKiB0aGUgc3RhdHVzIHNob3VsZCBiZSAwID09ICJpZGxlIiAqLwotCQlpZiggc3RhdHVzX2VsZiAhPSAwICkgewotCQkJc25kX3ByaW50ayggS0VSTl9FUlIgImVsZiBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsIHN0YXR1c19lbGYpOworCQlpZiAoc3RhdHVzX2VsZiAhPSAwKSB7CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJlbGYgbG9hZCBlcnJvciAhIHN0YXR1cyA9ICVkXG4iLAorCQkJCSAgIHN0YXR1c19lbGYpOwogCQkJcmV0dXJuIC1FSU87IC8qIG1vZHByb2IgLXIgbWF5IGhlbHAgPyAqLwogCQl9CiAKIAkJLyogd2FpdCBmb3IgeGlsaW54IHN0YXR1cyA9PSA0ICovCiAJCWVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfTVhMWF9TVEFUVVNfT0ZGU0VULCAxLCA0LCA1MDApOyAvKiA1c2VjICovCiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAieGlsaW54IHdhcyBub3QgbG9hZGVkIG9yIGNvdWxkIG5vdCBiZSBzdGFydGVkXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgInhpbGlueCB3YXMgbm90IGxvYWRlZCBvciAiCisJCQkJICAgImNvdWxkIG5vdCBiZSBzdGFydGVkXG4iKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIApAQCAtNDI0LDcgKzQyNyw3IEBACiAJCS8qIHdhaXQgZm9yIGVsZiBzdGF0dXMgPT0gNCAqLwogCQllcnIgPSBtaXhhcnRfd2FpdF9uaWNlX2Zvcl9yZWdpc3Rlcl92YWx1ZSggbWdyLCBNSVhBUlRfUFNFVURPUkVHX0VMRl9TVEFUVVNfT0ZGU0VULCAxLCA0LCAzMDApOyAvKiAzc2VjICovCiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZWxmIGNvdWxkIG5vdCBiZSBzdGFydGVkXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImVsZiBjb3VsZCBub3QgYmUgc3RhcnRlZFxuIik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKQEAgLTQzNywxNSArNDQwLDE2IEBACiAJZGVmYXVsdDoKIAogCQkvKiBlbGYgYW5kIHhpbGlueCBzaG91bGQgYmUgbG9hZGVkICovCi0JCWlmKCAoc3RhdHVzX2VsZiAhPSA0KSB8fCAoc3RhdHVzX3hpbGlueCAhPSA0KSApIHsKLQkJCXByaW50ayggS0VSTl9FUlIgInhpbGlueCBvciBlbGYgbm90IHN1Y2Nlc3NmdWxseSBsb2FkZWRcbiIpOworCQlpZiAoc3RhdHVzX2VsZiAhPSA0IHx8IHN0YXR1c194aWxpbnggIT0gNCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ4aWxpbnggb3IgZWxmIG5vdCAiCisJCQkgICAgICAgInN1Y2Nlc3NmdWxseSBsb2FkZWRcbiIpOwogCQkJcmV0dXJuIC1FSU87IC8qIG1vZHByb2IgLXIgbWF5IGhlbHAgPyAqLwogCQl9CiAKIAkJLyogd2FpdCBmb3IgZGF1Z2h0ZXIgZGV0ZWN0aW9uICE9IDAgKi8KIAkJZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19EQlJEX1BSRVNFTkNFX09GRlNFVCwgMCwgMCwgMzApOyAvKiAzMDBtc2VjICovCiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCBLRVJOX0VSUiAiZXJyb3Igc3RhcnRpbmcgZWxmIGZpbGVcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiZXJyb3Igc3RhcnRpbmcgZWxmIGZpbGVcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCkBAIC00NjAsOCArNDY0LDkgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCS8qIGRhdWdodGVyIHNob3VsZCBiZSBpZGxlICovCi0JCWlmKCBzdGF0dXNfZGF1Z2h0ICE9IDAgKSB7Ci0JCQlwcmludGsoIEtFUk5fRVJSICJkYXVnaHRlciBsb2FkIGVycm9yICEgc3RhdHVzID0gJWRcbiIsIHN0YXR1c19kYXVnaHQpOworCQlpZiAoc3RhdHVzX2RhdWdodCAhPSAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImRhdWdodGVyIGxvYWQgZXJyb3IgISBzdGF0dXMgPSAlZFxuIiwKKwkJCSAgICAgICBzdGF0dXNfZGF1Z2h0KTsKIAkJCXJldHVybiAtRUlPOyAvKiBtb2Rwcm9iIC1yIG1heSBoZWxwID8gKi8KIAkJfQogIApAQCAtNDgwLDcgKzQ4NSw3IEBACiAJCS8qIHdhaXQgZm9yIHN0YXR1cyA9PSAyICovCiAJCWVyciA9IG1peGFydF93YWl0X25pY2VfZm9yX3JlZ2lzdGVyX3ZhbHVlKCBtZ3IsIE1JWEFSVF9QU0VVRE9SRUdfRFhMWF9TVEFUVVNfT0ZGU0VULCAxLCAyLCAzMCk7IC8qIDMwMG1zZWMgKi8KIAkJaWYgKGVyciA8IDApIHsKLQkJCXNuZF9wcmludGsoIEtFUk5fRVJSICJkYXVnaHRlciBib2FyZCBsb2FkIGVycm9yXG4iKTsKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgImRhdWdodGVyIGJvYXJkIGxvYWQgZXJyb3JcbiIpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCkBAIC01MDIsNyArNTA3LDggQEAKICAgICAgICAgLyogd2FpdCBmb3IgZGF1Z2h0ZXIgc3RhdHVzID09IDMgKi8KICAgICAgICAgZXJyID0gbWl4YXJ0X3dhaXRfbmljZV9mb3JfcmVnaXN0ZXJfdmFsdWUoIG1nciwgTUlYQVJUX1BTRVVET1JFR19EWExYX1NUQVRVU19PRkZTRVQsIDEsIDMsIDMwMCk7IC8qIDNzZWMgKi8KICAgICAgICAgaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayggS0VSTl9FUlIgImRhdWdodGVyIGJvYXJkIGNvdWxkIG5vdCBiZSBpbml0aWFsaXNlZFxuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIKKwkJCSAgICJkYXVnaHRlciBib2FyZCBjb3VsZCBub3QgYmUgaW5pdGlhbGlzZWRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTEyLDcgKzUxOCw3IEBACiAJLyogZmlyc3QgY29tbXVuaWNhdGlvbiB3aXRoIGVtYmVkZGVkICovCiAJZXJyID0gbWl4YXJ0X2ZpcnN0X2luaXQobWdyKTsKICAgICAgICAgaWYgKGVyciA8IDApIHsKLQkJc25kX3ByaW50ayggS0VSTl9FUlIgIm1pWGFydCBjb3VsZCBub3QgYmUgc2V0IHVwXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAibWlYYXJ0IGNvdWxkIG5vdCBiZSBzZXQgdXBcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTgxLDE2ICs1ODcsNiBAQAogLyogbWlYYXJ0IGh3ZGVwIGludGVyZmFjZSBpZCBzdHJpbmcgKi8KICNkZWZpbmUgU05EX01JWEFSVF9IV0RFUF9JRCAgICAgICAibWlYYXJ0IExvYWRlciIKIAotc3RhdGljIGludCBtaXhhcnRfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbWl4YXJ0X2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG1peGFydF9od2RlcF9kc3Bfc3RhdHVzKHN0cnVjdCBzbmRfaHdkZXAgKmh3LAogCQkJCSAgIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyAqaW5mbykKIHsKQEAgLTY0Myw4ICs2MzksNiBAQAogCiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfTUlYQVJUOwogCWh3LT5wcml2YXRlX2RhdGEgPSBtZ3I7Ci0JaHctPm9wcy5vcGVuID0gbWl4YXJ0X2h3ZGVwX29wZW47Ci0JaHctPm9wcy5yZWxlYXNlID0gbWl4YXJ0X2h3ZGVwX3JlbGVhc2U7CiAJaHctPm9wcy5kc3Bfc3RhdHVzID0gbWl4YXJ0X2h3ZGVwX2RzcF9zdGF0dXM7CiAJaHctPm9wcy5kc3BfbG9hZCA9IG1peGFydF9od2RlcF9kc3BfbG9hZDsKIAlody0+ZXhjbHVzaXZlID0gMTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKaW5kZXggNTBjOWY4YS4uNTIyYTA0MCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMKKysrIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKQEAgLTE2NjgsOSArMTY2OCw5IEBACiAJCX0KIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOwotCWlmIChjYXJkID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAlzd2l0Y2ggKHBjaS0+ZGV2aWNlKSB7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2QVZfQVVESU86CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jIGIvc291bmQvcGNpL294eWdlbi9oaWZpZXIuYwppbmRleCAxYWI4MzNmLi44NGVmMTMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL2hpZmllci5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vaGlmaWVyLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBoaWZpZXJfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxNGMzLCAweDE3MTApIH0sCiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTRjMywgMHgxNzExKSB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRF9CUk9LRU5fRUVQUk9NIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGhpZmllcl9pZHMpOwpAQCAtMTUxLDcgKzE1Miw2IEBACiAJLnNob3J0bmFtZSA9ICJDLU1lZGlhIENNSTg3ODciLAogCS5sb25nbmFtZSA9ICJDLU1lZGlhIE94eWdlbiBIRCBBdWRpbyIsCiAJLmNoaXAgPSAiQ01JODc4OCIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmluaXQgPSBoaWZpZXJfaW5pdCwKIAkuY29udHJvbF9maWx0ZXIgPSBoaWZpZXJfY29udHJvbF9maWx0ZXIsCiAJLmNsZWFudXAgPSBoaWZpZXJfY2xlYW51cCwKQEAgLTE3Myw2ICsxNzMsMTMgQEAKIAkuYWRjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKIH07CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdldF9oaWZpZXJfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJY2hpcC0+bW9kZWwgPSBtb2RlbF9oaWZpZXI7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGhpZmllcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAogCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKIHsKQEAgLTE4NSw3ICsxOTIsOCBAQAogCQkrK2RldjsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQotCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLCAmbW9kZWxfaGlmaWVyLCAwKTsKKwllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICAgaGlmaWVyX2lkcywgZ2V0X2hpZmllcl9tb2RlbCk7CiAJaWYgKGVyciA+PSAwKQogCQkrK2RldjsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmMKaW5kZXggZGU5OTljNi4uNzJkYjRjMyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIEMtTWVkaWEgQ01JODc4OCBkcml2ZXIgZm9yIEMtTWVkaWEncyByZWZlcmVuY2UgZGVzaWduIGFuZCBmb3IgdGhlIFgtTWVyaWRpYW4KKyAqIEMtTWVkaWEgQ01JODc4OCBkcml2ZXIgZm9yIEMtTWVkaWEncyByZWZlcmVuY2UgZGVzaWduIGFuZCBzaW1pbGFyIG1vZGVscwogICoKICAqIENvcHlyaWdodCAoYykgQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+CiAgKgpAQCAtMjYsNiArMjYsNyBAQAogICoKICAqIEdQSU8gMCAtPiBERlMwIG9mIEFLNTM4NQogICogR1BJTyAxIC0+IERGUzEgb2YgQUs1Mzg1CisgKiBHUElPIDggLT4gZW5hYmxlIGhlYWRwaG9uZSBhbXBsaWZpZXIgb24gSFQtT21lZ2EgbW9kZWxzCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC02MSw3ICs2Miw4IEBACiBlbnVtIHsKIAlNT0RFTF9DTUVESUFfUkVGLAkvKiBDLU1lZGlhJ3MgcmVmZXJlbmNlIGRlc2lnbiAqLwogCU1PREVMX01FUklESUFOLAkJLyogQXV6ZW5UZWNoIFgtTWVyaWRpYW4gKi8KLQlNT0RFTF9IQUxPLAkJLyogSFQtT21lZ2EgQ2xhcm8gaGFsbyAqLworCU1PREVMX0NMQVJPLAkJLyogSFQtT21lZ2EgQ2xhcm8gKi8KKwlNT0RFTF9DTEFST19IQUxPLAkvKiBIVC1PbWVnYSBDbGFybyBoYWxvICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3h5Z2VuX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CkBAIC03NCw4ICs3Niw4IEBACiAJeyBPWFlHRU5fUENJX1NVQklEKDB4MTQ3YSwgMHhhMDE3KSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ01FRElBX1JFRiB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDFhNTgsIDB4MDkxMCksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg0MTVhLCAweDU0MzEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9NRVJJRElBTiB9LAotCXsgT1hZR0VOX1BDSV9TVUJJRCgweDcyODQsIDB4OTc2MSksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0NNRURJQV9SRUYgfSwKLQl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3ODEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9IQUxPIH0sCisJeyBPWFlHRU5fUENJX1NVQklEKDB4NzI4NCwgMHg5NzYxKSwgLmRyaXZlcl9kYXRhID0gTU9ERUxfQ0xBUk8gfSwKKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHg3Mjg0LCAweDk3ODEpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9DTEFST19IQUxPIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG94eWdlbl9pZHMpOwpAQCAtODYsNiArODgsOCBAQAogI2RlZmluZSBHUElPX0FLNTM4NV9ERlNfRE9VQkxFCTB4MDAwMQogI2RlZmluZSBHUElPX0FLNTM4NV9ERlNfUVVBRAkweDAwMDIKIAorI2RlZmluZSBHUElPX0NMQVJPX0hQCQkweDAxMDAKKwogc3RydWN0IGdlbmVyaWNfZGF0YSB7CiAJdTggYWs0Mzk2X2N0bDI7CiAJdTE2IHNhdmVkX3dtODc4NV9yZWdpc3RlcnNbMl07CkBAIC0xOTYsMTAgKzIwMCw0NiBAQAogCWFrNTM4NV9pbml0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCBjbGFyb19lbmFibGVfaHAoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwltc2xlZXAoMzAwKTsKKwlveHlnZW5fc2V0X2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLCBHUElPX0NMQVJPX0hQKTsKKwlveHlnZW5fc2V0X2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBLCBHUElPX0NMQVJPX0hQKTsKK30KKworc3RhdGljIHZvaWQgY2xhcm9faW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCWFrNDM5Nl9pbml0KGNoaXApOworCXdtODc4NV9pbml0KGNoaXApOworCWNsYXJvX2VuYWJsZV9ocChjaGlwKTsKK30KKworc3RhdGljIHZvaWQgY2xhcm9faGFsb19pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJYWs0Mzk2X2luaXQoY2hpcCk7CisJYWs1Mzg1X2luaXQoY2hpcCk7CisJY2xhcm9fZW5hYmxlX2hwKGNoaXApOworfQorCiBzdGF0aWMgdm9pZCBnZW5lcmljX2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIH0KIAorc3RhdGljIHZvaWQgY2xhcm9fZGlzYWJsZV9ocChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSwgR1BJT19DTEFST19IUCk7Cit9CisKK3N0YXRpYyB2b2lkIGNsYXJvX2NsZWFudXAoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwljbGFyb19kaXNhYmxlX2hwKGNoaXApOworfQorCitzdGF0aWMgdm9pZCBjbGFyb19zdXNwZW5kKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJY2xhcm9fZGlzYWJsZV9ocChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgZ2VuZXJpY19yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAlhazQzOTZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CkBAIC0yMTEsNiArMjUxLDEyIEBACiAJYWs0Mzk2X3JlZ2lzdGVyc19pbml0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCBjbGFyb19yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlhazQzOTZfcmVnaXN0ZXJzX2luaXQoY2hpcCk7CisJY2xhcm9fZW5hYmxlX2hwKGNoaXApOworfQorCiBzdGF0aWMgdm9pZCBzZXRfYWs0Mzk2X3BhcmFtcyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CkBAIC0yOTMsMzAgKzMzOSwxMCBAQAogCiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfTElORUFSKGFrNDM5Nl9kYl9zY2FsZSwgVExWX0RCX0dBSU5fTVVURSwgMCk7CiAKLXN0YXRpYyBpbnQgZ2VuZXJpY19wcm9iZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLCB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhKQotewotCWlmIChkcml2ZXJfZGF0YSA9PSBNT0RFTF9NRVJJRElBTikgewotCQljaGlwLT5tb2RlbC5pbml0ID0gbWVyaWRpYW5faW5pdDsKLQkJY2hpcC0+bW9kZWwucmVzdW1lID0gbWVyaWRpYW5fcmVzdW1lOwotCQljaGlwLT5tb2RlbC5zZXRfYWRjX3BhcmFtcyA9IHNldF9hazUzODVfcGFyYW1zOwotCQljaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAotCQkJCQkgICAgUExBWUJBQ0tfMV9UT19TUERJRiB8Ci0JCQkJCSAgICBDQVBUVVJFXzBfRlJPTV9JMlNfMiB8Ci0JCQkJCSAgICBDQVBUVVJFXzFfRlJPTV9TUERJRjsKLQl9Ci0JaWYgKGRyaXZlcl9kYXRhID09IE1PREVMX01FUklESUFOIHx8IGRyaXZlcl9kYXRhID09IE1PREVMX0hBTE8pIHsKLQkJY2hpcC0+bW9kZWwubWlzY19mbGFncyA9IE9YWUdFTl9NSVNDX01JREk7Ci0JCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgfD0gTUlESV9PVVRQVVQgfCBNSURJX0lOUFVUOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgbW9kZWxfZ2VuZXJpYyA9IHsKIAkuc2hvcnRuYW1lID0gIkMtTWVkaWEgQ01JODc4OCIsCiAJLmxvbmduYW1lID0gIkMtTWVkaWEgT3h5Z2VuIEhEIEF1ZGlvIiwKIAkuY2hpcCA9ICJDTUk4Nzg4IiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSBnZW5lcmljX3Byb2JlLAogCS5pbml0ID0gZ2VuZXJpY19pbml0LAogCS5jbGVhbnVwID0gZ2VuZXJpY19jbGVhbnVwLAogCS5yZXN1bWUgPSBnZW5lcmljX3Jlc3VtZSwKQEAgLTM0MSw2ICszNjcsNDIgQEAKIAkuYWRjX2kyc19mb3JtYXQgPSBPWFlHRU5fSTJTX0ZPUk1BVF9MSlVTVCwKIH07CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IGdldF9veHlnZW5fbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJY2hpcC0+bW9kZWwgPSBtb2RlbF9nZW5lcmljOworCXN3aXRjaCAoaWQtPmRyaXZlcl9kYXRhKSB7CisJY2FzZSBNT0RFTF9NRVJJRElBTjoKKwkJY2hpcC0+bW9kZWwuaW5pdCA9IG1lcmlkaWFuX2luaXQ7CisJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IG1lcmlkaWFuX3Jlc3VtZTsKKwkJY2hpcC0+bW9kZWwuc2V0X2FkY19wYXJhbXMgPSBzZXRfYWs1Mzg1X3BhcmFtczsKKwkJY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKKwkJCQkJICAgIFBMQVlCQUNLXzFfVE9fU1BESUYgfAorCQkJCQkgICAgQ0FQVFVSRV8wX0ZST01fSTJTXzIgfAorCQkJCQkgICAgQ0FQVFVSRV8xX0ZST01fU1BESUY7CisJCWJyZWFrOworCWNhc2UgTU9ERUxfQ0xBUk86CisJCWNoaXAtPm1vZGVsLmluaXQgPSBjbGFyb19pbml0OworCQljaGlwLT5tb2RlbC5jbGVhbnVwID0gY2xhcm9fY2xlYW51cDsKKwkJY2hpcC0+bW9kZWwuc3VzcGVuZCA9IGNsYXJvX3N1c3BlbmQ7CisJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IGNsYXJvX3Jlc3VtZTsKKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9DTEFST19IQUxPOgorCQljaGlwLT5tb2RlbC5pbml0ID0gY2xhcm9faGFsb19pbml0OworCQljaGlwLT5tb2RlbC5jbGVhbnVwID0gY2xhcm9fY2xlYW51cDsKKwkJY2hpcC0+bW9kZWwuc3VzcGVuZCA9IGNsYXJvX3N1c3BlbmQ7CisJCWNoaXAtPm1vZGVsLnJlc3VtZSA9IGNsYXJvX3Jlc3VtZTsKKwkJY2hpcC0+bW9kZWwuc2V0X2FkY19wYXJhbXMgPSBzZXRfYWs1Mzg1X3BhcmFtczsKKwkJYnJlYWs7CisJfQorCWlmIChpZC0+ZHJpdmVyX2RhdGEgPT0gTU9ERUxfTUVSSURJQU4gfHwKKwkgICAgaWQtPmRyaXZlcl9kYXRhID09IE1PREVMX0NMQVJPX0hBTE8pIHsKKwkJY2hpcC0+bW9kZWwubWlzY19mbGFncyA9IE9YWUdFTl9NSVNDX01JREk7CisJCWNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgfD0gTUlESV9PVVRQVVQgfCBNSURJX0lOUFVUOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgZ2VuZXJpY19veHlnZW5fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKIAkJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQogewpAQCAtMzUzLDggKzQxNSw4IEBACiAJCSsrZGV2OwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sCi0JCQkgICAgICAgJm1vZGVsX2dlbmVyaWMsIHBjaV9pZC0+ZHJpdmVyX2RhdGEpOworCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgICBveHlnZW5faWRzLCBnZXRfb3h5Z2VuX21vZGVsKTsKIAlpZiAoZXJyID49IDApCiAJCSsrZGV2OwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uaAppbmRleCAxOTEwN2M2Li5iZDYxNWRiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKQEAgLTE4LDYgKzE4LDggQEAKIAogI2RlZmluZSBPWFlHRU5fSU9fU0laRQkweDEwMAogCisjZGVmaW5lIE9YWUdFTl9FRVBST01fSUQJMHg0MzRkCS8qICJDTSIgKi8KKwogLyogbW9kZWwtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvZiBvdXRwdXRzL2lucHV0cyAqLwogI2RlZmluZSBQTEFZQkFDS18wX1RPX0kyUwkweDAwMDEKICAgICAgLyogUExBWUJBQ0tfMF9UT19BQzk3XzAJCW5vdCBpbXBsZW1lbnRlZCAqLwpAQCAtNDksNyArNTEsMTMgQEAKIAkuc3VidmVuZG9yID0gc3YsIFwKIAkuc3ViZGV2aWNlID0gc2QKIAorI2RlZmluZSBCUk9LRU5fRUVQUk9NX0RSSVZFUl9EQVRBICgodW5zaWduZWQgbG9uZyktMSkKKyNkZWZpbmUgT1hZR0VOX1BDSV9TVUJJRF9CUk9LRU5fRUVQUk9NIFwKKwlPWFlHRU5fUENJX1NVQklEKFBDSV9WRU5ET1JfSURfQ01FRElBLCAweDg3ODgpLCBcCisJLmRyaXZlcl9kYXRhID0gQlJPS0VOX0VFUFJPTV9EUklWRVJfREFUQQorCiBzdHJ1Y3QgcGNpX2RldjsKK3N0cnVjdCBwY2lfZGV2aWNlX2lkOwogc3RydWN0IHNuZF9jYXJkOwogc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtOwogc3RydWN0IHNuZF9wY21faGFyZHdhcmU7CkBAIC02Miw4ICs3MCw2IEBACiAJY29uc3QgY2hhciAqc2hvcnRuYW1lOwogCWNvbnN0IGNoYXIgKmxvbmduYW1lOwogCWNvbnN0IGNoYXIgKmNoaXA7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JaW50ICgqcHJvYmUpKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpOwogCXZvaWQgKCppbml0KShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKIAlpbnQgKCpjb250cm9sX2ZpbHRlcikoc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRlbXBsYXRlKTsKIAlpbnQgKCptaXhlcl9pbml0KShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKQEAgLTgzLDYgKzg5LDcgQEAKIAl2b2lkICgqYWM5N19zd2l0Y2gpKHN0cnVjdCBveHlnZW4gKmNoaXAsCiAJCQkgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IG11dGUpOwogCWNvbnN0IHVuc2lnbmVkIGludCAqZGFjX3RsdjsKKwl1bnNpZ25lZCBsb25nIHByaXZhdGVfZGF0YTsKIAlzaXplX3QgbW9kZWxfZGF0YV9zaXplOwogCXVuc2lnbmVkIGludCBkZXZpY2VfY29uZmlnOwogCXU4IGRhY19jaGFubmVsczsKQEAgLTEzNCw4ICsxNDEsMTIgQEAKIC8qIG94eWdlbl9saWIuYyAqLwogCiBpbnQgb3h5Z2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgaW5kZXgsIGNoYXIgKmlkLAotCQkgICAgIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgKm1vZGVsLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpOworCQkgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsCisJCSAgICAgaW50ICgqZ2V0X21vZGVsKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZAorCQkJCSAgICAgKQorCQkgICAgKTsKIHZvaWQgb3h5Z2VuX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBjaSk7CiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgb3h5Z2VuX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CkBAIC0xODAsNiArMTkxLDkgQEAKIHZvaWQgb3h5Z2VuX3Jlc2V0X3VhcnQoc3RydWN0IG94eWdlbiAqY2hpcCk7CiB2b2lkIG94eWdlbl93cml0ZV91YXJ0KHN0cnVjdCBveHlnZW4gKmNoaXAsIHU4IGRhdGEpOwogCit1MTYgb3h5Z2VuX3JlYWRfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBpbmRleCk7Cit2b2lkIG94eWdlbl93cml0ZV9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdmFsdWUpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgb3h5Z2VuX3NldF9iaXRzOChzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVnLCB1OCB2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jCmluZGV4IDMxMjZjNGIuLmMxZWI5MjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYwpAQCAtMjU0LDMgKzI1NCwzNCBAQAogCV93cml0ZV91YXJ0KGNoaXAsIDAsIGRhdGEpOwogfQogRVhQT1JUX1NZTUJPTChveHlnZW5fd3JpdGVfdWFydCk7CisKK3UxNiBveHlnZW5fcmVhZF9lZXByb20oc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgaW50IGluZGV4KQoreworCXVuc2lnbmVkIGludCB0aW1lb3V0OworCisJb3h5Z2VuX3dyaXRlOChjaGlwLCBPWFlHRU5fRUVQUk9NX0NPTlRST0wsCisJCSAgICAgIGluZGV4IHwgT1hZR0VOX0VFUFJPTV9ESVJfUkVBRCk7CisJZm9yICh0aW1lb3V0ID0gMDsgdGltZW91dCA8IDEwMDsgKyt0aW1lb3V0KSB7CisJCXVkZWxheSgxKTsKKwkJaWYgKCEob3h5Z2VuX3JlYWQ4KGNoaXAsIE9YWUdFTl9FRVBST01fU1RBVFVTKQorCQkgICAgICAmIE9YWUdFTl9FRVBST01fQlVTWSkpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0VFUFJPTV9EQVRBKTsKK30KKwordm9pZCBveHlnZW5fd3JpdGVfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHZhbHVlKQoreworCXVuc2lnbmVkIGludCB0aW1lb3V0OworCisJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0VFUFJPTV9EQVRBLCB2YWx1ZSk7CisJb3h5Z2VuX3dyaXRlOChjaGlwLCBPWFlHRU5fRUVQUk9NX0NPTlRST0wsCisJCSAgICAgIGluZGV4IHwgT1hZR0VOX0VFUFJPTV9ESVJfV1JJVEUpOworCWZvciAodGltZW91dCA9IDA7IHRpbWVvdXQgPCAxMDsgKyt0aW1lb3V0KSB7CisJCW1zbGVlcCgxKTsKKwkJaWYgKCEob3h5Z2VuX3JlYWQ4KGNoaXAsIE9YWUdFTl9FRVBST01fU1RBVFVTKQorCQkgICAgICAmIE9YWUdFTl9FRVBST01fQlVTWSkpCisJCQlyZXR1cm47CisJfQorCXNuZF9wcmludGsoS0VSTl9FUlIgIkVFUFJPTSB3cml0ZSB0aW1lb3V0XG4iKTsKK30KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMKaW5kZXggODRmNDgxZC4uMzEyMjUxZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fbGliLmMKQEAgLTM0LDYgKzM0LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQy1NZWRpYSBDTUk4Nzg4IGhlbHBlciBsaWJyYXJ5Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiAKKyNkZWZpbmUgRFJJVkVSICJveHlnZW4iCiAKIHN0YXRpYyBpbmxpbmUgaW50IG94eWdlbl91YXJ0X2lucHV0X3JlYWR5KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CkBAIC0yNDMsNiArMjQ0LDYyIEBACiAjZGVmaW5lIG94eWdlbl9wcm9jX2luaXQoY2hpcCkKICNlbmRpZgogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKgorb3h5Z2VuX3NlYXJjaF9wY2lfaWQoc3RydWN0IG94eWdlbiAqY2hpcCwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWRzW10pCit7CisJdTE2IHN1YmRldmljZTsKKworCS8qCisJICogTWFrZSBzdXJlIHRoZSBFRVBST00gcGlucyBhcmUgYXZhaWxhYmxlLCBpLmUuLCBub3QgdXNlZCBmb3IgU1BJLgorCSAqIChUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgd2UgaW5pdGlhbGl6ZSBvciB1c2UgU1BJLikKKwkgKi8KKwlveHlnZW5fY2xlYXJfYml0czgoY2hpcCwgT1hZR0VOX0ZVTkNUSU9OLAorCQkJICAgT1hZR0VOX0ZVTkNUSU9OX0VOQUJMRV9TUElfNF81KTsKKwkvKgorCSAqIFJlYWQgdGhlIHN1YnN5c3RlbSBkZXZpY2UgSUQgZGlyZWN0bHkgZnJvbSB0aGUgRUVQUk9NLCBiZWNhdXNlIHRoZQorCSAqIGNoaXAgZGlkbid0IGlmIHRoZSBmaXJzdCBFRVBST00gd29yZCB3YXMgb3ZlcndyaXR0ZW4uCisJICovCisJc3ViZGV2aWNlID0gb3h5Z2VuX3JlYWRfZWVwcm9tKGNoaXAsIDIpOworCS8qCisJICogV2UgdXNlIG9ubHkgdGhlIHN1YnN5c3RlbSBkZXZpY2UgSUQgZm9yIHNlYXJjaGluZyBiZWNhdXNlIGl0IGlzCisJICogdW5pcXVlIGV2ZW4gd2l0aG91dCB0aGUgc3Vic3lzdGVtIHZlbmRvciBJRCwgd2hpY2ggbWF5IGhhdmUgYmVlbgorCSAqIG92ZXJ3cml0dGVuIGluIHRoZSBFRVBST00uCisJICovCisJZm9yICg7IGlkcy0+dmVuZG9yOyArK2lkcykKKwkJaWYgKGlkcy0+c3ViZGV2aWNlID09IHN1YmRldmljZSAmJgorCQkgICAgaWRzLT5kcml2ZXJfZGF0YSAhPSBCUk9LRU5fRUVQUk9NX0RSSVZFUl9EQVRBKQorCQkJcmV0dXJuIGlkczsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgb3h5Z2VuX3Jlc3RvcmVfZWVwcm9tKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJaWYgKG94eWdlbl9yZWFkX2VlcHJvbShjaGlwLCAwKSAhPSBPWFlHRU5fRUVQUk9NX0lEKSB7CisJCS8qCisJCSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgb25seSB3aGVuIGEga25vd24gY2FyZCBtb2RlbCBoYXMKKwkJICogYmVlbiBkZXRlY3RlZCwgaS5lLiwgd2Uga25vdyB0aGVyZSBpcyBhIHZhbGlkIHN1YnN5c3RlbQorCQkgKiBwcm9kdWN0IElEIGF0IGluZGV4IDIgaW4gdGhlIEVFUFJPTS4gIFRoZXJlZm9yZSwgd2UgaGF2ZQorCQkgKiBiZWVuIGFibGUgdG8gZGVkdWNlIHRoZSBjb3JyZWN0IHN1YnN5c3RlbSB2ZW5kb3IgSUQsIGFuZAorCQkgKiB0aGlzIGlzIGVub3VnaCBpbmZvcm1hdGlvbiB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBFRVBST00KKwkJICogY29udGVudHMuCisJCSAqLworCQlveHlnZW5fd3JpdGVfZWVwcm9tKGNoaXAsIDEsIGlkLT5zdWJ2ZW5kb3IpOworCQlveHlnZW5fd3JpdGVfZWVwcm9tKGNoaXAsIDAsIE9YWUdFTl9FRVBST01fSUQpOworCisJCW94eWdlbl9zZXRfYml0czgoY2hpcCwgT1hZR0VOX01JU0MsCisJCQkJIE9YWUdFTl9NSVNDX1dSSVRFX1BDSV9TVUJJRCk7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChjaGlwLT5wY2ksIFBDSV9TVUJTWVNURU1fVkVORE9SX0lELAorCQkJCSAgICAgIGlkLT5zdWJ2ZW5kb3IpOworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY2hpcC0+cGNpLCBQQ0lfU1VCU1lTVEVNX0lELAorCQkJCSAgICAgIGlkLT5zdWJkZXZpY2UpOworCQlveHlnZW5fY2xlYXJfYml0czgoY2hpcCwgT1hZR0VOX01JU0MsCisJCQkJICAgT1hZR0VOX01JU0NfV1JJVEVfUENJX1NVQklEKTsKKworCQlzbmRfcHJpbnRrKEtFUk5fSU5GTyAiRUVQUk9NIElEIHJlc3RvcmVkXG4iKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIG94eWdlbl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC00NDYsMzAgKzUwMywzMyBAQAogCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAJY2hpcC0+bW9kZWwuY2xlYW51cChjaGlwKTsKKwlrZnJlZShjaGlwLT5tb2RlbF9kYXRhKTsKIAltdXRleF9kZXN0cm95KCZjaGlwLT5tdXRleCk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOwogCXBjaV9kaXNhYmxlX2RldmljZShjaGlwLT5wY2kpOwogfQogCiBpbnQgb3h5Z2VuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgaW5kZXgsIGNoYXIgKmlkLAotCQkgICAgIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgKm1vZGVsLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEpCisJCSAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkcywKKwkJICAgICBpbnQgKCpnZXRfbW9kZWwpKHN0cnVjdCBveHlnZW4gKmNoaXAsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkCisJCQkJICAgICApCisJCSAgICApCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBveHlnZW4gKmNoaXA7CisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZDsKIAlpbnQgZXJyOwogCi0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleCwgaWQsIG1vZGVsLT5vd25lciwKLQkJCSAgICBzaXplb2YgKmNoaXAgKyBtb2RlbC0+bW9kZWxfZGF0YV9zaXplKTsKLQlpZiAoIWNhcmQpCi0JCXJldHVybiAtRU5PTUVNOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleCwgaWQsIG93bmVyLCBzaXplb2YoKmNoaXApLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAKIAljaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWNoaXAtPmNhcmQgPSBjYXJkOwogCWNoaXAtPnBjaSA9IHBjaTsKIAljaGlwLT5pcnEgPSAtMTsKLQljaGlwLT5tb2RlbCA9ICptb2RlbDsKLQljaGlwLT5tb2RlbF9kYXRhID0gY2hpcCArIDE7CiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPnJlZ19sb2NrKTsKIAltdXRleF9pbml0KCZjaGlwLT5tdXRleCk7CiAJSU5JVF9XT1JLKCZjaGlwLT5zcGRpZl9pbnB1dF9iaXRzX3dvcmssCkBAIC00ODEsNyArNTQxLDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfY2FyZDsKIAotCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpLCBtb2RlbC0+Y2hpcCk7CisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksIERSSVZFUik7CiAJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IHJlc2VydmUgUENJIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZXJyX3BjaV9lbmFibGU7CkBAIC00OTUsMjAgKzU1NSwzNCBAQAogCX0KIAljaGlwLT5hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMCk7CiAKKwlwY2lfaWQgPSBveHlnZW5fc2VhcmNoX3BjaV9pZChjaGlwLCBpZHMpOworCWlmICghcGNpX2lkKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3BjaV9yZWdpb25zOworCX0KKwlveHlnZW5fcmVzdG9yZV9lZXByb20oY2hpcCwgcGNpX2lkKTsKKwllcnIgPSBnZXRfbW9kZWwoY2hpcCwgcGNpX2lkKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfcGNpX3JlZ2lvbnM7CisKKwlpZiAoY2hpcC0+bW9kZWwubW9kZWxfZGF0YV9zaXplKSB7CisJCWNoaXAtPm1vZGVsX2RhdGEgPSBremFsbG9jKGNoaXAtPm1vZGVsLm1vZGVsX2RhdGFfc2l6ZSwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCWlmICghY2hpcC0+bW9kZWxfZGF0YSkgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX3BjaV9yZWdpb25zOworCQl9CisJfQorCiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKIAlzbmRfY2FyZF9zZXRfZGV2KGNhcmQsICZwY2ktPmRldik7CiAJY2FyZC0+cHJpdmF0ZV9mcmVlID0gb3h5Z2VuX2NhcmRfZnJlZTsKIAotCWlmIChjaGlwLT5tb2RlbC5wcm9iZSkgewotCQllcnIgPSBjaGlwLT5tb2RlbC5wcm9iZShjaGlwLCBkcml2ZXJfZGF0YSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBlcnJfY2FyZDsKLQl9CiAJb3h5Z2VuX2luaXQoY2hpcCk7CiAJY2hpcC0+bW9kZWwuaW5pdChjaGlwKTsKIAogCWVyciA9IHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBveHlnZW5faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCSAgY2hpcC0+bW9kZWwuY2hpcCwgY2hpcCk7CisJCQkgIERSSVZFUiwgY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGdyYWIgaW50ZXJydXB0ICVkXG4iLCBwY2ktPmlycSk7CiAJCWdvdG8gZXJyX2NhcmQ7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL3ZpcnR1b3NvLmMKaW5kZXggNmM4NzBjMS4uYmM1Y2UxMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi92aXJ0dW9zby5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vdmlydHVvc28uYwpAQCAtMTEyLDYgKzExMiwzNCBAQAogICogQ1M0MzYyQTogQUQwIDwtIDAKICAqLwogCisvKgorICogWG9uYXIgRXNzZW5jZSBTVFgKKyAqIC0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogQ01JODc4ODoKKyAqCisgKiBJwrJDIDwtPiBQQ00xNzkyQQorICoKKyAqIEdQSSAwIDwtIGV4dGVybmFsIHBvd2VyIHByZXNlbnQKKyAqCisgKiBHUElPIDAgLT4gZW5hYmxlIG91dHB1dCB0byBzcGVha2VycworICogR1BJTyAxIC0+IHJvdXRlIEhQIHRvIGZyb250IHBhbmVsICgwKSBvciByZWFyIGphY2sgKDEpCisgKiBHUElPIDIgLT4gTTAgb2YgQ1M1MzgxCisgKiBHUElPIDMgLT4gTTEgb2YgQ1M1MzgxCisgKiBHUElPIDcgLT4gcm91dGUgb3V0cHV0IHRvIHNwZWFrZXIgamFja3MgKDApIG9yIEhQICgxKQorICogR1BJTyA4IC0+IHJvdXRlIGlucHV0IGphY2sgdG8gbGluZS1pbiAoMCkgb3IgbWljLWluICgxKQorICoKKyAqIFBDTTE3OTJBOgorICoKKyAqIEFEMCA8LSAwCisgKgorICogSDYgZGF1Z2h0ZXJib2FyZAorICogLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIEdQSU8gNCA8LSAwCisgKiBHUElPIDUgPC0gMAorICovCisKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC0xNTIsNiArMTgwLDcgQEAKIAlNT0RFTF9EWCwKIAlNT0RFTF9IREFWLAkvKiB3aXRob3V0IGRhdWdodGVyYm9hcmQgKi8KIAlNT0RFTF9IREFWX0g2LAkvKiB3aXRoIEg2IGRhdWdodGVyYm9hcmQgKi8KKwlNT0RFTF9TVFgsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgeG9uYXJfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKQEAgLTE2MCw2ICsxODksOCBAQAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODJiNyksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0QyWCB9LAogCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODMxNCksIC5kcml2ZXJfZGF0YSA9IE1PREVMX0hEQVYgfSwKIAl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxMDQzLCAweDgzNGYpLCAuZHJpdmVyX2RhdGEgPSBNT0RFTF9EMSB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRCgweDEwNDMsIDB4ODM1YyksIC5kcml2ZXJfZGF0YSA9IE1PREVMX1NUWCB9LAorCXsgT1hZR0VOX1BDSV9TVUJJRF9CUk9LRU5fRUVQUk9NIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHhvbmFyX2lkcyk7CkBAIC0xODMsMTIgKzIxNCwxNCBAQAogI2RlZmluZSBHUElPX0hEQVZfREJfSDYJCTB4MDAwMAogI2RlZmluZSBHUElPX0hEQVZfREJfWFgJCTB4MDAyMAogCisjZGVmaW5lIEdQSU9fU1RfSFBfUkVBUgkJMHgwMDAyCisjZGVmaW5lIEdQSU9fU1RfSFAJCTB4MDA4MAorCiAjZGVmaW5lIEkyQ19ERVZJQ0VfUENNMTc5NihpKQkoMHg5OCArICgoaSkgPDwgMSkpCS8qIDEwMDExLCBBRHg9aSwgL1c9MCAqLwogI2RlZmluZSBJMkNfREVWSUNFX0NTNDM5OAkweDllCS8qIDEwMDExLCBBRDE9MSwgQUQwPTEsIC9XPTAgKi8KICNkZWZpbmUgSTJDX0RFVklDRV9DUzQzNjJBCTB4MzAJLyogMDAxMTAwLCBBRDA9MCwgL1c9MCAqLwogCiBzdHJ1Y3QgeG9uYXJfZGF0YSB7Ci0JdW5zaWduZWQgaW50IG1vZGVsOwogCXVuc2lnbmVkIGludCBhbnRpX3BvcF9kZWxheTsKIAl1bnNpZ25lZCBpbnQgZGFjczsKIAl1MTYgb3V0cHV0X2VuYWJsZV9iaXQ7CkBAIC0zMzQsMTUgKzM2Nyw5IEBACiAJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwogCiAJZGF0YS0+YW50aV9wb3BfZGVsYXkgPSAzMDA7CisJZGF0YS0+ZGFjcyA9IDQ7CiAJZGF0YS0+b3V0cHV0X2VuYWJsZV9iaXQgPSBHUElPX0QyX09VVFBVVF9FTkFCTEU7CiAJZGF0YS0+cGNtMTc5Nl9vdmVyc2FtcGxpbmcgPSBQQ00xNzk2X09TXzY0OwotCWlmIChkYXRhLT5tb2RlbCA9PSBNT0RFTF9EMlgpIHsKLQkJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElPX0RBVEE7Ci0JCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSU9fSU5URVJSVVBUX01BU0s7Ci0JCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElPX0QyWF9FWFRfUE9XRVI7Ci0JCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKLQkJCQkgICAgR1BJT19EMlhfRVhUX1BPV0VSKTsKLQl9CiAKIAlwY20xNzk2X2luaXQoY2hpcCk7CiAKQEAgLTM1NSw2ICszODIsMTggQEAKIAlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiQ1M1MzgxIik7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX2QyeF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJZGF0YS0+ZXh0X3Bvd2VyX3JlZyA9IE9YWUdFTl9HUElPX0RBVEE7CisJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJT19JTlRFUlJVUFRfTUFTSzsKKwlkYXRhLT5leHRfcG93ZXJfYml0ID0gR1BJT19EMlhfRVhUX1BPV0VSOworCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgR1BJT19EMlhfRVhUX1BPV0VSKTsKKworCXhvbmFyX2QyX2luaXQoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHVwZGF0ZV9jczQzNjJhX3ZvbHVtZXMoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAl1OCBtdXRlOwpAQCAtNDIyLDExICs0NjEsNiBAQAogCWRhdGEtPmNzNDM5OF9mbSA9IENTNDM5OF9GTV9TSU5HTEUgfCBDUzQzOThfREVNX05PTkUgfCBDUzQzOThfRElGX0xKVVNUOwogCWRhdGEtPmNzNDM2MmFfZm0gPSBDUzQzNjJBX0ZNX1NJTkdMRSB8CiAJCUNTNDM2MkFfQVRBUElfQl9SIHwgQ1M0MzYyQV9BVEFQSV9BX0w7Ci0JaWYgKGRhdGEtPm1vZGVsID09IE1PREVMX0RYKSB7Ci0JCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7Ci0JCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSV9JTlRFUlJVUFRfTUFTSzsKLQkJZGF0YS0+ZXh0X3Bvd2VyX2JpdCA9IEdQSV9EWF9FWFRfUE9XRVI7Ci0JfQogCiAJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOXzJXSVJFX0JVU19TVEFUVVMsCiAJCSAgICAgICBPWFlHRU5fMldJUkVfTEVOR1RIXzggfApAQCAtNDQ3LDYgKzQ4MSwxNyBAQAogCXNuZF9jb21wb25lbnRfYWRkKGNoaXAtPmNhcmQsICJDUzUzNjEiKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfZHhfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKKworCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7CisJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOworCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElfRFhfRVhUX1BPV0VSOworCisJeG9uYXJfZDFfaW5pdChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfaGRhdl9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwpAQCAtNDU4LDYgKzUwMyw3IEBACiAJCSAgICAgICBPWFlHRU5fMldJUkVfU1BFRURfRkFTVCk7CiAKIAlkYXRhLT5hbnRpX3BvcF9kZWxheSA9IDEwMDsKKwlkYXRhLT5kYWNzID0gY2hpcC0+bW9kZWwucHJpdmF0ZV9kYXRhID09IE1PREVMX0hEQVZfSDYgPyA0IDogMTsKIAlkYXRhLT5vdXRwdXRfZW5hYmxlX2JpdCA9IEdQSU9fRFhfT1VUUFVUX0VOQUJMRTsKIAlkYXRhLT5leHRfcG93ZXJfcmVnID0gT1hZR0VOX0dQSV9EQVRBOwogCWRhdGEtPmV4dF9wb3dlcl9pbnRfcmVnID0gT1hZR0VOX0dQSV9JTlRFUlJVUFRfTUFTSzsKQEAgLTQ4NCw2ICs1MzAsMzYgQEAKIAlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiQ1M1MzgxIik7CiB9CiAKK3N0YXRpYyB2b2lkIHhvbmFyX3N0eF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOworCisJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOXzJXSVJFX0JVU19TVEFUVVMsCisJCSAgICAgICBPWFlHRU5fMldJUkVfTEVOR1RIXzggfAorCQkgICAgICAgT1hZR0VOXzJXSVJFX0lOVEVSUlVQVF9NQVNLIHwKKwkJICAgICAgIE9YWUdFTl8yV0lSRV9TUEVFRF9GQVNUKTsKKworCWRhdGEtPmFudGlfcG9wX2RlbGF5ID0gMTAwOworCWRhdGEtPmRhY3MgPSAxOworCWRhdGEtPm91dHB1dF9lbmFibGVfYml0ID0gR1BJT19EWF9PVVRQVVRfRU5BQkxFOworCWRhdGEtPmV4dF9wb3dlcl9yZWcgPSBPWFlHRU5fR1BJX0RBVEE7CisJZGF0YS0+ZXh0X3Bvd2VyX2ludF9yZWcgPSBPWFlHRU5fR1BJX0lOVEVSUlVQVF9NQVNLOworCWRhdGEtPmV4dF9wb3dlcl9iaXQgPSBHUElfRFhfRVhUX1BPV0VSOworCWRhdGEtPnBjbTE3OTZfb3ZlcnNhbXBsaW5nID0gUENNMTc5Nl9PU182NDsKKworCXBjbTE3OTZfaW5pdChjaGlwKTsKKworCW94eWdlbl9zZXRfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0NPTlRST0wsCisJCQkgIEdQSU9fRFhfSU5QVVRfUk9VVEUgfCBHUElPX1NUX0hQX1JFQVIgfCBHUElPX1NUX0hQKTsKKwlveHlnZW5fY2xlYXJfYml0czE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsCisJCQkgICAgR1BJT19EWF9JTlBVVF9ST1VURSB8IEdQSU9fU1RfSFBfUkVBUiB8IEdQSU9fU1RfSFApOworCisJeG9uYXJfY29tbW9uX2luaXQoY2hpcCk7CisKKwlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiUENNMTc5MkEiKTsKKwlzbmRfY29tcG9uZW50X2FkZChjaGlwLT5jYXJkLCAiQ1M1MzgxIik7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2Rpc2FibGVfb3V0cHV0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJc3RydWN0IHhvbmFyX2RhdGEgKmRhdGEgPSBjaGlwLT5tb2RlbF9kYXRhOwpAQCAtNTExLDYgKzU4NywxMSBAQAogCXhvbmFyX2Rpc2FibGVfb3V0cHV0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9zdF9jbGVhbnVwKHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJeG9uYXJfZGlzYWJsZV9vdXRwdXQoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2QyX3N1c3BlbmQoc3RydWN0IG94eWdlbiAqY2hpcCkKIHsKIAl4b25hcl9kMl9jbGVhbnVwKGNoaXApOwpAQCAtNTI3LDYgKzYwOCwxMSBAQAogCW1zbGVlcCgyKTsKIH0KIAorc3RhdGljIHZvaWQgeG9uYXJfc3Rfc3VzcGVuZChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQoreworCXhvbmFyX3N0X2NsZWFudXAoY2hpcCk7Cit9CisKIHN0YXRpYyB2b2lkIHhvbmFyX2QyX3Jlc3VtZShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXBjbTE3OTZfaW5pdChjaGlwKTsKQEAgLTU1NCw2ICs2NDAsMTIgQEAKIAl4b25hcl9lbmFibGVfb3V0cHV0KGNoaXApOwogfQogCitzdGF0aWMgdm9pZCB4b25hcl9zdF9yZXN1bWUoc3RydWN0IG94eWdlbiAqY2hpcCkKK3sKKwlwY20xNzk2X2luaXQoY2hpcCk7CisJeG9uYXJfZW5hYmxlX291dHB1dChjaGlwKTsKK30KKwogc3RhdGljIHZvaWQgeG9uYXJfaGRhdl9wY21faGFyZHdhcmVfZmlsdGVyKHVuc2lnbmVkIGludCBjaGFubmVsLAogCQkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSAqaGFyZHdhcmUpCiB7CkBAIC03MzMsNiArODI1LDcyIEBACiAJLnByaXZhdGVfdmFsdWUgPSBHUElPX0RYX0ZST05UX1BBTkVMLAogfTsKIAorc3RhdGljIGludCBzdF9vdXRwdXRfc3dpdGNoX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKmluZm8pCit7CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzWzNdID0geworCQkiU3BlYWtlcnMiLCAiSGVhZHBob25lcyIsICJGUCBIZWFkcGhvbmVzIgorCX07CisKKwlpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCWluZm8tPmNvdW50ID0gMTsKKwlpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1zID0gMzsKKwlpZiAoaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtID49IDMpCisJCWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IDI7CisJc3RyY3B5KGluZm8tPnZhbHVlLmVudW1lcmF0ZWQubmFtZSwgbmFtZXNbaW5mby0+dmFsdWUuZW51bWVyYXRlZC5pdGVtXSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3Rfb3V0cHV0X3N3aXRjaF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqY3RsLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnZhbHVlKQoreworCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjdGwtPnByaXZhdGVfZGF0YTsKKwl1MTYgZ3BpbzsKKworCWdwaW8gPSBveHlnZW5fcmVhZDE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEpOworCWlmICghKGdwaW8gJiBHUElPX1NUX0hQKSkKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDA7CisJZWxzZSBpZiAoZ3BpbyAmIEdQSU9fU1RfSFBfUkVBUikKKwkJdmFsdWUtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IDE7CisJZWxzZQorCQl2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdID0gMjsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHN0X291dHB1dF9zd2l0Y2hfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp2YWx1ZSkKK3sKKwlzdHJ1Y3Qgb3h5Z2VuICpjaGlwID0gY3RsLT5wcml2YXRlX2RhdGE7CisJdTE2IGdwaW9fb2xkLCBncGlvOworCisJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCWdwaW9fb2xkID0gb3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKTsKKwlncGlvID0gZ3Bpb19vbGQ7CisJc3dpdGNoICh2YWx1ZS0+dmFsdWUuZW51bWVyYXRlZC5pdGVtWzBdKSB7CisJY2FzZSAwOgorCQlncGlvICY9IH4oR1BJT19TVF9IUCB8IEdQSU9fU1RfSFBfUkVBUik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZ3BpbyB8PSBHUElPX1NUX0hQIHwgR1BJT19TVF9IUF9SRUFSOworCQlicmVhazsKKwljYXNlIDI6CisJCWdwaW8gPSAoZ3BpbyB8IEdQSU9fU1RfSFApICYgfkdQSU9fU1RfSFBfUkVBUjsKKwkJYnJlYWs7CisJfQorCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl9HUElPX0RBVEEsIGdwaW8pOworCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCXJldHVybiBncGlvICE9IGdwaW9fb2xkOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc3Rfb3V0cHV0X3N3aXRjaCA9IHsKKwkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkubmFtZSA9ICJBbmFsb2cgT3V0cHV0IiwKKwkuaW5mbyA9IHN0X291dHB1dF9zd2l0Y2hfaW5mbywKKwkuZ2V0ID0gc3Rfb3V0cHV0X3N3aXRjaF9nZXQsCisJLnB1dCA9IHN0X291dHB1dF9zd2l0Y2hfcHV0LAorfTsKKwogc3RhdGljIHZvaWQgeG9uYXJfbGluZV9taWNfYWM5N19zd2l0Y2goc3RydWN0IG94eWdlbiAqY2hpcCwKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IG11dGUpCiB7CkBAIC03NDUsOCArOTAzLDggQEAKIAl9CiB9CiAKLXN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShwY20xNzk2X2RiX3NjYWxlLCAtMTIwMDAsIDUwLCAwKTsKLXN0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShjczQzNjJhX2RiX3NjYWxlLCAtMTI3MDAsIDEwMCwgMCk7CitzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUocGNtMTc5Nl9kYl9zY2FsZSwgLTYwMDAsIDUwLCAwKTsKK3N0YXRpYyBjb25zdCBERUNMQVJFX1RMVl9EQl9TQ0FMRShjczQzNjJhX2RiX3NjYWxlLCAtNjAwMCwgMTAwLCAwKTsKIAogc3RhdGljIGludCB4b25hcl9kMl9jb250cm9sX2ZpbHRlcihzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyAqdGVtcGxhdGUpCiB7CkBAIC03NjMsNiArOTIxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgeG9uYXJfc3RfY29udHJvbF9maWx0ZXIoc3RydWN0IHNuZF9rY29udHJvbF9uZXcgKnRlbXBsYXRlKQoreworCWlmICghc3RybmNtcCh0ZW1wbGF0ZS0+bmFtZSwgIkNEIENhcHR1cmUgIiwgMTEpKQorCQlyZXR1cm4gMTsgLyogbm8gQ0QgaW5wdXQgKi8KKwlpZiAoIXN0cmNtcCh0ZW1wbGF0ZS0+bmFtZSwgIlN0ZXJlbyBVcG1peGluZyIpKQorCQlyZXR1cm4gMTsgLyogc3RlcmVvIG9ubHkgLSB3ZSBkb24ndCBuZWVkIHVwbWl4aW5nICovCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgeG9uYXJfZDJfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewogCXJldHVybiBzbmRfY3RsX2FkZChjaGlwLT5jYXJkLCBzbmRfY3RsX25ldzEoJmFsdF9zd2l0Y2gsIGNoaXApKTsKQEAgLTc3Myw1MSArOTQwLDE0IEBACiAJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmZnJvbnRfcGFuZWxfc3dpdGNoLCBjaGlwKSk7CiB9CiAKLXN0YXRpYyBpbnQgeG9uYXJfbW9kZWxfcHJvYmUoc3RydWN0IG94eWdlbiAqY2hpcCwgdW5zaWduZWQgbG9uZyBkcml2ZXJfZGF0YSkKK3N0YXRpYyBpbnQgeG9uYXJfc3RfbWl4ZXJfaW5pdChzdHJ1Y3Qgb3h5Z2VuICpjaGlwKQogewotCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBuYW1lc1tdID0gewotCQlbTU9ERUxfRDFdCT0gIlhvbmFyIEQxIiwKLQkJW01PREVMX0RYXQk9ICJYb25hciBEWCIsCi0JCVtNT0RFTF9EMl0JPSAiWG9uYXIgRDIiLAotCQlbTU9ERUxfRDJYXQk9ICJYb25hciBEMlgiLAotCQlbTU9ERUxfSERBVl0JPSAiWG9uYXIgSERBVjEuMyIsCi0JCVtNT0RFTF9IREFWX0g2XQk9ICJYb25hciBIREFWMS4zK0g2IiwKLQl9OwotCXN0YXRpYyBjb25zdCB1OCBkYWNzW10gPSB7Ci0JCVtNT0RFTF9EMV0JPSAyLAotCQlbTU9ERUxfRFhdCT0gMiwKLQkJW01PREVMX0QyXQk9IDQsCi0JCVtNT0RFTF9EMlhdCT0gNCwKLQkJW01PREVMX0hEQVZdCT0gMSwKLQkJW01PREVMX0hEQVZfSDZdCT0gNCwKLQl9OwotCXN0cnVjdCB4b25hcl9kYXRhICpkYXRhID0gY2hpcC0+bW9kZWxfZGF0YTsKLQotCWRhdGEtPm1vZGVsID0gZHJpdmVyX2RhdGE7Ci0JaWYgKGRhdGEtPm1vZGVsID09IE1PREVMX0hEQVYpIHsKLQkJb3h5Z2VuX2NsZWFyX2JpdHMxNihjaGlwLCBPWFlHRU5fR1BJT19DT05UUk9MLAotCQkJCSAgICBHUElPX0hEQVZfREJfTUFTSyk7Ci0JCXN3aXRjaCAob3h5Z2VuX3JlYWQxNihjaGlwLCBPWFlHRU5fR1BJT19EQVRBKSAmCi0JCQlHUElPX0hEQVZfREJfTUFTSykgewotCQljYXNlIEdQSU9fSERBVl9EQl9INjoKLQkJCWRhdGEtPm1vZGVsID0gTU9ERUxfSERBVl9INjsKLQkJCWJyZWFrOwotCQljYXNlIEdQSU9fSERBVl9EQl9YWDoKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgInVua25vd24gZGF1Z2h0ZXJib2FyZFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQotCWRhdGEtPmRhY3MgPSBkYWNzW2RhdGEtPm1vZGVsXTsKLQljaGlwLT5tb2RlbC5zaG9ydG5hbWUgPSBuYW1lc1tkYXRhLT5tb2RlbF07Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNuZF9jdGxfYWRkKGNoaXAtPmNhcmQsIHNuZF9jdGxfbmV3MSgmc3Rfb3V0cHV0X3N3aXRjaCwgY2hpcCkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9kMiA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAyMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2QyX2luaXQsCiAJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfZDJfY29udHJvbF9maWx0ZXIsCiAJLm1peGVyX2luaXQgPSB4b25hcl9kMl9taXhlcl9pbml0LApAQCAtODM3LDggKzk2Nyw4IEBACiAJCQkgTUlESV9PVVRQVVQgfAogCQkJIE1JRElfSU5QVVQsCiAJLmRhY19jaGFubmVscyA9IDgsCi0JLmRhY192b2x1bWVfbWluID0gMHgwZiwKLQkuZGFjX3ZvbHVtZV9tYXggPSAweGZmLAorCS5kYWNfdm9sdW1lX21pbiA9IDI1NSAtIDIqNjAsCisJLmRhY192b2x1bWVfbWF4ID0gMjU1LAogCS5taXNjX2ZsYWdzID0gT1hZR0VOX01JU0NfTUlESSwKIAkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fU1BJIHwKIAkJCSAgT1hZR0VOX0ZVTkNUSU9OX0VOQUJMRV9TUElfNF81LApAQCAtODQ5LDggKzk3OSw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF94b25hcl9kMSA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAxMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2QxX2luaXQsCiAJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfZDFfY29udHJvbF9maWx0ZXIsCiAJLm1peGVyX2luaXQgPSB4b25hcl9kMV9taXhlcl9pbml0LApAQCAtODY4LDcgKzk5Niw3IEBACiAJCQkgUExBWUJBQ0tfMV9UT19TUERJRiB8CiAJCQkgQ0FQVFVSRV8wX0ZST01fSTJTXzIsCiAJLmRhY19jaGFubmVscyA9IDgsCi0JLmRhY192b2x1bWVfbWluID0gMCwKKwkuZGFjX3ZvbHVtZV9taW4gPSAxMjcgLSA2MCwKIAkuZGFjX3ZvbHVtZV9tYXggPSAxMjcsCiAJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OXzJXSVJFLAogCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULApAQCAtODc4LDggKzEwMDYsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBveHlnZW5fbW9kZWwgbW9kZWxfeG9uYXJfaGRhdiA9IHsKIAkubG9uZ25hbWUgPSAiQXN1cyBWaXJ0dW9zbyAyMDAiLAogCS5jaGlwID0gIkFWMjAwIiwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkucHJvYmUgPSB4b25hcl9tb2RlbF9wcm9iZSwKIAkuaW5pdCA9IHhvbmFyX2hkYXZfaW5pdCwKIAkuY2xlYW51cCA9IHhvbmFyX2hkYXZfY2xlYW51cCwKIAkuc3VzcGVuZCA9IHhvbmFyX2hkYXZfc3VzcGVuZCwKQEAgLTg5NywxNiArMTAyMyw0MyBAQAogCQkJIFBMQVlCQUNLXzFfVE9fU1BESUYgfAogCQkJIENBUFRVUkVfMF9GUk9NX0kyU18yLAogCS5kYWNfY2hhbm5lbHMgPSA4LAotCS5kYWNfdm9sdW1lX21pbiA9IDB4MGYsCi0JLmRhY192b2x1bWVfbWF4ID0gMHhmZiwKKwkuZGFjX3ZvbHVtZV9taW4gPSAyNTUgLSAyKjYwLAorCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKIAkubWlzY19mbGFncyA9IE9YWUdFTl9NSVNDX01JREksCiAJLmZ1bmN0aW9uX2ZsYWdzID0gT1hZR0VOX0ZVTkNUSU9OXzJXSVJFLAogCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAogfTsKIAotc3RhdGljIGludCBfX2RldmluaXQgeG9uYXJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaSwKLQkJCQkgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3h5Z2VuX21vZGVsIG1vZGVsX3hvbmFyX3N0ID0geworCS5sb25nbmFtZSA9ICJBc3VzIFZpcnR1b3NvIDEwMCIsCisJLmNoaXAgPSAiQVYyMDAiLAorCS5pbml0ID0geG9uYXJfc3R4X2luaXQsCisJLmNvbnRyb2xfZmlsdGVyID0geG9uYXJfc3RfY29udHJvbF9maWx0ZXIsCisJLm1peGVyX2luaXQgPSB4b25hcl9zdF9taXhlcl9pbml0LAorCS5jbGVhbnVwID0geG9uYXJfc3RfY2xlYW51cCwKKwkuc3VzcGVuZCA9IHhvbmFyX3N0X3N1c3BlbmQsCisJLnJlc3VtZSA9IHhvbmFyX3N0X3Jlc3VtZSwKKwkuc2V0X2RhY19wYXJhbXMgPSBzZXRfcGNtMTc5Nl9wYXJhbXMsCisJLnNldF9hZGNfcGFyYW1zID0gc2V0X2NzNTN4MV9wYXJhbXMsCisJLnVwZGF0ZV9kYWNfdm9sdW1lID0gdXBkYXRlX3BjbTE3OTZfdm9sdW1lLAorCS51cGRhdGVfZGFjX211dGUgPSB1cGRhdGVfcGNtMTc5Nl9tdXRlLAorCS5hYzk3X3N3aXRjaCA9IHhvbmFyX2xpbmVfbWljX2FjOTdfc3dpdGNoLAorCS5kYWNfdGx2ID0gcGNtMTc5Nl9kYl9zY2FsZSwKKwkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCB4b25hcl9kYXRhKSwKKwkuZGV2aWNlX2NvbmZpZyA9IFBMQVlCQUNLXzBfVE9fSTJTIHwKKwkJCSBQTEFZQkFDS18xX1RPX1NQRElGIHwKKwkJCSBDQVBUVVJFXzBfRlJPTV9JMlNfMiwKKwkuZGFjX2NoYW5uZWxzID0gMiwKKwkuZGFjX3ZvbHVtZV9taW4gPSAyNTUgLSAyKjYwLAorCS5kYWNfdm9sdW1lX21heCA9IDI1NSwKKwkuZnVuY3Rpb25fZmxhZ3MgPSBPWFlHRU5fRlVOQ1RJT05fMldJUkUsCisJLmRhY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCisJLmFkY19pMnNfZm9ybWF0ID0gT1hZR0VOX0kyU19GT1JNQVRfTEpVU1QsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZXRfeG9uYXJfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCAqY29uc3QgbW9kZWxzW10gPSB7CiAJCVtNT0RFTF9EMV0JPSAmbW9kZWxfeG9uYXJfZDEsCkBAIC05MTQsNyArMTA2Nyw1NyBAQAogCQlbTU9ERUxfRDJdCT0gJm1vZGVsX3hvbmFyX2QyLAogCQlbTU9ERUxfRDJYXQk9ICZtb2RlbF94b25hcl9kMiwKIAkJW01PREVMX0hEQVZdCT0gJm1vZGVsX3hvbmFyX2hkYXYsCisJCVtNT0RFTF9TVFhdCT0gJm1vZGVsX3hvbmFyX3N0LAogCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWVzW10gPSB7CisJCVtNT0RFTF9EMV0JPSAiWG9uYXIgRDEiLAorCQlbTU9ERUxfRFhdCT0gIlhvbmFyIERYIiwKKwkJW01PREVMX0QyXQk9ICJYb25hciBEMiIsCisJCVtNT0RFTF9EMlhdCT0gIlhvbmFyIEQyWCIsCisJCVtNT0RFTF9IREFWXQk9ICJYb25hciBIREFWMS4zIiwKKwkJW01PREVMX0hEQVZfSDZdCT0gIlhvbmFyIEhEQVYxLjMrSDYiLAorCQlbTU9ERUxfU1RYXQk9ICJYb25hciBFc3NlbmNlIFNUWCIsCisJfTsKKwl1bnNpZ25lZCBpbnQgbW9kZWwgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwlpZiAobW9kZWwgPj0gQVJSQVlfU0laRShtb2RlbHMpIHx8ICFtb2RlbHNbbW9kZWxdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwljaGlwLT5tb2RlbCA9ICptb2RlbHNbbW9kZWxdOworCisJc3dpdGNoIChtb2RlbCkgeworCWNhc2UgTU9ERUxfRDJYOgorCQljaGlwLT5tb2RlbC5pbml0ID0geG9uYXJfZDJ4X2luaXQ7CisJCWJyZWFrOworCWNhc2UgTU9ERUxfRFg6CisJCWNoaXAtPm1vZGVsLmluaXQgPSB4b25hcl9keF9pbml0OworCQlicmVhazsKKwljYXNlIE1PREVMX0hEQVY6CisJCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCQkgICAgR1BJT19IREFWX0RCX01BU0spOworCQlzd2l0Y2ggKG94eWdlbl9yZWFkMTYoY2hpcCwgT1hZR0VOX0dQSU9fREFUQSkgJgorCQkJR1BJT19IREFWX0RCX01BU0spIHsKKwkJY2FzZSBHUElPX0hEQVZfREJfSDY6CisJCQltb2RlbCA9IE1PREVMX0hEQVZfSDY7CisJCQlicmVhazsKKwkJY2FzZSBHUElPX0hEQVZfREJfWFg6CisJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1bmtub3duIGRhdWdodGVyYm9hcmRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNT0RFTF9TVFg6CisJCW94eWdlbl9jbGVhcl9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwKKwkJCQkgICAgR1BJT19IREFWX0RCX01BU0spOworCQlicmVhazsKKwl9CisKKwljaGlwLT5tb2RlbC5zaG9ydG5hbWUgPSBuYW1lc1ttb2RlbF07CisJY2hpcC0+bW9kZWwucHJpdmF0ZV9kYXRhID0gbW9kZWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHhvbmFyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQkJIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCit7CiAJc3RhdGljIGludCBkZXY7CiAJaW50IGVycjsKIApAQCAtOTI0LDEwICsxMTI3LDggQEAKIAkJKytkZXY7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KLQlCVUdfT04ocGNpX2lkLT5kcml2ZXJfZGF0YSA+PSBBUlJBWV9TSVpFKG1vZGVscykpOwotCWVyciA9IG94eWdlbl9wY2lfcHJvYmUocGNpLCBpbmRleFtkZXZdLCBpZFtkZXZdLAotCQkJICAgICAgIG1vZGVsc1twY2lfaWQtPmRyaXZlcl9kYXRhXSwKLQkJCSAgICAgICBwY2lfaWQtPmRyaXZlcl9kYXRhKTsKKwllcnIgPSBveHlnZW5fcGNpX3Byb2JlKHBjaSwgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCisJCQkgICAgICAgeG9uYXJfaWRzLCBnZXRfeG9uYXJfbW9kZWwpOwogCWlmIChlcnIgPj0gMCkKIAkJKytkZXY7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hoci5jIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKaW5kZXggMjdjZjJjMi4uODBlMDY0YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyLmMKQEAgLTEzMzQsNiArMTMzNCw0MCBAQAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiB9CiAKK3N0YXRpYyB2b2lkIHBjeGhyX3Byb2NfZ3Bpb19yZWFkKHN0cnVjdCBzbmRfaW5mb19lbnRyeSAqZW50cnksCisJCQkJIHN0cnVjdCBzbmRfaW5mb19idWZmZXIgKmJ1ZmZlcikKK3sKKwlzdHJ1Y3Qgc25kX3BjeGhyICpjaGlwID0gZW50cnktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGN4aHJfbWdyICptZ3IgPSBjaGlwLT5tZ3I7CisJLyogY29tbWFuZHMgYXZhaWxhYmxlIHdoZW4gZW1iZWRkZWQgRFNQIGlzIHJ1bm5pbmcgKi8KKwlpZiAobWdyLT5kc3BfbG9hZGVkICYgKDEgPDwgUENYSFJfRklSTVdBUkVfRFNQX01BSU5fSU5ERVgpKSB7CisJCS8qIGdwaW8gcG9ydHMgb24gc3RlcmVvIGJvYXJkcyBvbmx5IGF2YWlsYWJsZSAqLworCQlpbnQgdmFsdWUgPSAwOworCQlocjIyMl9yZWFkX2dwaW8obWdyLCAxLCAmdmFsdWUpOwkvKiBHUEkgKi8KKwkJc25kX2lwcmludGYoYnVmZmVyLCAiR1BJOiAweCV4XG4iLCB2YWx1ZSk7CisJCWhyMjIyX3JlYWRfZ3BpbyhtZ3IsIDAsICZ2YWx1ZSk7CS8qIEdQMCAqLworCQlzbmRfaXByaW50ZihidWZmZXIsICJHUE86IDB4JXhcbiIsIHZhbHVlKTsKKwl9IGVsc2UKKwkJc25kX2lwcmludGYoYnVmZmVyLCAibm8gZmlybXdhcmUgbG9hZGVkXG4iKTsKKwlzbmRfaXByaW50ZihidWZmZXIsICJcbiIpOworfQorc3RhdGljIHZvaWQgcGN4aHJfcHJvY19ncG9fd3JpdGUoc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeSwKKwkJCQkgc3RydWN0IHNuZF9pbmZvX2J1ZmZlciAqYnVmZmVyKQoreworCXN0cnVjdCBzbmRfcGN4aHIgKmNoaXAgPSBlbnRyeS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBwY3hocl9tZ3IgKm1nciA9IGNoaXAtPm1ncjsKKwljaGFyIGxpbmVbNjRdOworCWludCB2YWx1ZTsKKwkvKiBjb21tYW5kcyBhdmFpbGFibGUgd2hlbiBlbWJlZGRlZCBEU1AgaXMgcnVubmluZyAqLworCWlmICghKG1nci0+ZHNwX2xvYWRlZCAmICgxIDw8IFBDWEhSX0ZJUk1XQVJFX0RTUF9NQUlOX0lOREVYKSkpCisJCXJldHVybjsKKwl3aGlsZSAoIXNuZF9pbmZvX2dldF9saW5lKGJ1ZmZlciwgbGluZSwgc2l6ZW9mKGxpbmUpKSkgeworCQlpZiAoc3NjYW5mKGxpbmUsICJHUE86IDB4JXgiLCAmdmFsdWUpICE9IDEpCisJCQljb250aW51ZTsKKwkJaHIyMjJfd3JpdGVfZ3BvKG1nciwgdmFsdWUpOwkvKiBHUDAgKi8KKwl9Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBwY3hocl9wcm9jX2luaXQoc3RydWN0IHNuZF9wY3hociAqY2hpcCkKIHsKIAlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmVudHJ5OwpAQCAtMTM0Miw2ICsxMzc2LDEzIEBACiAJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19pbmZvKTsKIAlpZiAoISBzbmRfY2FyZF9wcm9jX25ldyhjaGlwLT5jYXJkLCAic3luYyIsICZlbnRyeSkpCiAJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19zeW5jKTsKKwkvKiBncGlvIGF2YWlsYWJsZSBvbiBzdGVyZW8gc291bmQgY2FyZHMgb25seSAqLworCWlmIChjaGlwLT5tZ3ItPmlzX2hyX3N0ZXJlbyAmJgorCSAgICAhc25kX2NhcmRfcHJvY19uZXcoY2hpcC0+Y2FyZCwgImdwaW8iLCAmZW50cnkpKSB7CisJCXNuZF9pbmZvX3NldF90ZXh0X29wcyhlbnRyeSwgY2hpcCwgcGN4aHJfcHJvY19ncGlvX3JlYWQpOworCQllbnRyeS0+Yy50ZXh0LndyaXRlID0gcGN4aHJfcHJvY19ncG9fd3JpdGU7CisJCWVudHJ5LT5tb2RlIHw9IFNfSVdVU1I7CisJfQogfQogLyogZW5kIG9mIHByb2MgaW50ZXJmYWNlICovCiAKQEAgLTE1MTAsMTIgKzE1NTEsMTIgQEAKIAogCQlzbnByaW50Zih0bXBpZCwgc2l6ZW9mKHRtcGlkKSwgIiVzLSVkIiwKIAkJCSBpZFtkZXZdID8gaWRbZGV2XSA6IGNhcmRfbmFtZSwgaSk7Ci0JCWNhcmQgPSBzbmRfY2FyZF9uZXcoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDApOworCQllcnIgPSBzbmRfY2FyZF9jcmVhdGUoaWR4LCB0bXBpZCwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKIAotCQlpZiAoISBjYXJkKSB7CisJCWlmIChlcnIgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgYWxsb2NhdGUgdGhlIGNhcmQgJWRcbiIsIGkpOwogCQkJcGN4aHJfZnJlZShtZ3IpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXR1cm4gZXJyOwogCQl9CiAKIAkJc3RyY3B5KGNhcmQtPmRyaXZlciwgRFJJVkVSX05BTUUpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyLmggYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaAppbmRleCA2OWQ4N2RlLi5iZGE3NzZjIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaAorKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHIuaApAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAKLSNkZWZpbmUgUENYSFJfRFJJVkVSX1ZFUlNJT04JCTB4MDAwOTA1CS8qIDAuOS41ICovCi0jZGVmaW5lIFBDWEhSX0RSSVZFUl9WRVJTSU9OX1NUUklORwkiMC45LjUiCQkvKiAwLjkuNSAqLworI2RlZmluZSBQQ1hIUl9EUklWRVJfVkVSU0lPTgkJMHgwMDA5MDYJLyogMC45LjYgKi8KKyNkZWZpbmUgUENYSFJfRFJJVkVSX1ZFUlNJT05fU1RSSU5HCSIwLjkuNiIJCS8qIDAuOS42ICovCiAKIAogI2RlZmluZSBQQ1hIUl9NQVhfQ0FSRFMJCTYKQEAgLTEyNCw2ICsxMjQsNyBAQAogCiAJdW5zaWduZWQgY2hhciB4bHhfY2ZnOwkJLyogY29weSBvZiBQQ1hIUl9YTFhfQ0ZHIHJlZ2lzdGVyICovCiAJdW5zaWduZWQgY2hhciB4bHhfc2VsbWljOwkvKiBjb3B5IG9mIFBDWEhSX1hMWF9TRUxNSUMgcmVnaXN0ZXIgKi8KKwl1bnNpZ25lZCBjaGFyIGRzcF9yZXNldDsJLyogY29weSBvZiBQQ1hIUl9EU1BfUkVTRVQgcmVnaXN0ZXIgKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuaCBiL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmgKaW5kZXggYmJiZDY2ZC4uYmUwMTczNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuaAorKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIERyaXZlciBmb3IgRGlnaWdyYW0gcGN4aHIgY29tcGF0aWJsZSBzb3VuZGNhcmRzCiAgKgotICogbG93IGxldmVsIGludGVyZmFjZSB3aXRoIGludGVycnVwdCBhbnMgbWVzc2FnZSBoYW5kbGluZworICogbG93IGxldmVsIGludGVyZmFjZSB3aXRoIGludGVycnVwdCBhbmQgbWVzc2FnZSBoYW5kbGluZwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBieSBEaWdpZ3JhbSA8YWxzYUBkaWdpZ3JhbS5jb20+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+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMzgsNiArMzksOCBAQAogI2luY2x1ZGUgIm9tYXAtcGNtLmgiCiAjaW5jbHVkZSAiLi4vY29kZWNzL3R3bDQwMzAuaCIKIAorc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19zZHAzNDMwOworCiBzdGF0aWMgaW50IHNkcDM0MzBfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQogewpAQCAtODEsMTIgKzg0LDEyMSBAQAogCS5od19wYXJhbXMgPSBzZHAzNDMwX2h3X3BhcmFtcywKIH07CiAKKy8qIEhlYWRzZXQgamFjayAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2sgaHNfamFjazsKKworLyogSGVhZHNldCBqYWNrIGRldGVjdGlvbiBEQVBNIHBpbnMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX3BpbiBoc19qYWNrX3BpbnNbXSA9IHsKKwl7CisJCS5waW4gPSAiSGVhZHNldCBNaWMiLAorCQkubWFzayA9IFNORF9KQUNLX01JQ1JPUEhPTkUsCisJfSwKKwl7CisJCS5waW4gPSAiSGVhZHNldCBTdGVyZW9waG9uZSIsCisJCS5tYXNrID0gU05EX0pBQ0tfSEVBRFBIT05FLAorCX0sCit9OworCisvKiBIZWFkc2V0IGphY2sgZGV0ZWN0aW9uIGdwaW9zICovCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19ncGlvIGhzX2phY2tfZ3Bpb3NbXSA9IHsKKwl7CisJCS5ncGlvID0gKE9NQVBfTUFYX0dQSU9fTElORVMgKyAyKSwKKwkJLm5hbWUgPSAiaHNkZXQtZ3BpbyIsCisJCS5yZXBvcnQgPSBTTkRfSkFDS19IRUFEU0VULAorCQkuZGVib3VuY2VfdGltZSA9IDIwMCwKKwl9LAorfTsKKworLyogU0RQMzQzMCBtYWNoaW5lIERBUE0gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBzZHAzNDMwX3R3bDQwMzBfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX01JQygiRXh0IE1pYyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9TUEsoIkV4dCBTcGsiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIZWFkc2V0IE1pYyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9IUCgiSGVhZHNldCBTdGVyZW9waG9uZSIsIE5VTEwpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgYXVkaW9fbWFwW10gPSB7CisJLyogRXh0ZXJuYWwgTWljczogTUFJTk1JQywgU1VCTUlDIHdpdGggYmlhcyovCisJeyJNQUlOTUlDIiwgTlVMTCwgIk1pYyBCaWFzIDEifSwKKwl7IlNVQk1JQyIsIE5VTEwsICJNaWMgQmlhcyAyIn0sCisJeyJNaWMgQmlhcyAxIiwgTlVMTCwgIkV4dCBNaWMifSwKKwl7Ik1pYyBCaWFzIDIiLCBOVUxMLCAiRXh0IE1pYyJ9LAorCisJLyogRXh0ZXJuYWwgU3BlYWtlcnM6IEhGTCwgSEZSICovCisJeyJFeHQgU3BrIiwgTlVMTCwgIkhGTCJ9LAorCXsiRXh0IFNwayIsIE5VTEwsICJIRlIifSwKKworCS8qIEhlYWRzZXQgTWljOiBIU01JQyB3aXRoIGJpYXMgKi8KKwl7IkhTTUlDIiwgTlVMTCwgIkhlYWRzZXQgTWljIEJpYXMifSwKKwl7IkhlYWRzZXQgTWljIEJpYXMiLCBOVUxMLCAiSGVhZHNldCBNaWMifSwKKworCS8qIEhlYWRzZXQgU3RlcmVvcGhvbmUgKEhlYWRwaG9uZSk6IEhTT0wsIEhTT1IgKi8KKwl7IkhlYWRzZXQgU3RlcmVvcGhvbmUiLCBOVUxMLCAiSFNPTCJ9LAorCXsiSGVhZHNldCBTdGVyZW9waG9uZSIsIE5VTEwsICJIU09SIn0sCit9OworCitzdGF0aWMgaW50IHNkcDM0MzBfdHdsNDAzMF9pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlpbnQgcmV0OworCisJLyogQWRkIFNEUDM0MzAgc3BlY2lmaWMgd2lkZ2V0cyAqLworCXJldCA9IHNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHNkcDM0MzBfdHdsNDAzMF9kYXBtX3dpZGdldHMsCisJCQkJQVJSQVlfU0laRShzZHAzNDMwX3R3bDQwMzBfZGFwbV93aWRnZXRzKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFNldCB1cCBTRFAzNDMwIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwICovCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKworCS8qIFNEUDM0MzAgY29ubmVjdGVkIHBpbnMgKi8KKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBNaWMiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkV4dCBTcGsiKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oY29kZWMsICJIZWFkc2V0IE1pYyIpOworCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3Bpbihjb2RlYywgIkhlYWRzZXQgU3RlcmVvcGhvbmUiKTsKKworCS8qIFRXTDQwMzAgbm90IGNvbm5lY3RlZCBwaW5zICovCisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkFVWEwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQVVYUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRNSUMiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRElHSU1JQzAiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRElHSU1JQzEiKTsKKworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVFIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiRUFSUElFQ0UiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUFJFRFJJVkVMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlBSRURSSVZFUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJDQVJLSVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkNBUktJVFIiKTsKKworCXJldCA9IHNuZF9zb2NfZGFwbV9zeW5jKGNvZGVjKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogSGVhZHNldCBqYWNrIGRldGVjdGlvbiAqLworCXJldCA9IHNuZF9zb2NfamFja19uZXcoJnNuZF9zb2Nfc2RwMzQzMCwgIkhlYWRzZXQgSmFjayIsCisJCQkJU05EX0pBQ0tfSEVBRFNFVCwgJmhzX2phY2spOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2phY2tfYWRkX3BpbnMoJmhzX2phY2ssIEFSUkFZX1NJWkUoaHNfamFja19waW5zKSwKKwkJCQloc19qYWNrX3BpbnMpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2phY2tfYWRkX2dwaW9zKCZoc19qYWNrLCBBUlJBWV9TSVpFKGhzX2phY2tfZ3Bpb3MpLAorCQkJCWhzX2phY2tfZ3Bpb3MpOworCisJcmV0dXJuIHJldDsKK30KKwogLyogRGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgZ2x1ZSAtIGNvbm5lY3RzIGNvZGVjIDwtLT4gQ1BVICovCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc2RwMzQzMF9kYWkgPSB7CiAJLm5hbWUgPSAiVFdMNDAzMCIsCiAJLnN0cmVhbV9uYW1lID0gIlRXTDQwMzAiLAogCS5jcHVfZGFpID0gJm9tYXBfbWNic3BfZGFpWzBdLAogCS5jb2RlY19kYWkgPSAmdHdsNDAzMF9kYWksCisJLmluaXQgPSBzZHAzNDMwX3R3bDQwMzBfaW5pdCwKIAkub3BzID0gJnNkcDM0MzBfb3BzLAogfTsKIApAQCAtMTQyLDYgKzI1NCw5IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzZHAzNDMwX3NvY19leGl0KHZvaWQpCiB7CisJc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MoJmhzX2phY2ssIEFSUkFZX1NJWkUoaHNfamFja19ncGlvcyksCisJCQkJaHNfamFja19ncGlvcyk7CisKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihzZHAzNDMwX3NuZF9kZXZpY2UpOwogfQogbW9kdWxlX2V4aXQoc2RwMzQzMF9zb2NfZXhpdCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL0tjb25maWcgYi9zb3VuZC9zb2MvcHhhL0tjb25maWcKaW5kZXggZjgyZTEwNi4uNTk5OGFiMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwpAQCAtNjEsNiArNjEsMjQgQEAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gU2hhcnAKIAkgIFphdXJ1cyBTTC1DNjAwMHggbW9kZWxzIChUb3NhKS4KIAorY29uZmlnIFNORF9QWEEyWFhfU09DX0U3NDAKKwl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gc3VwcG9ydCBmb3IgZTc0MCIKKwlkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfRTc0MAorCXNlbGVjdCBTTkRfU09DX1dNOTcwNQorCXNlbGVjdCBTTkRfUFhBMlhYX1NPQ19BQzk3CisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUKKwkgIHRvc2hpYmEgZTc0MCBQREEKKworY29uZmlnIFNORF9QWEEyWFhfU09DX0U3NTAKKwl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gc3VwcG9ydCBmb3IgZTc1MCIKKwlkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfRTc1MAorCXNlbGVjdCBTTkRfU09DX1dNOTcwNQorCXNlbGVjdCBTTkRfUFhBMlhYX1NPQ19BQzk3CisJaGVscAorCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUKKwkgIHRvc2hpYmEgZTc1MCBQREEKKwogY29uZmlnIFNORF9QWEEyWFhfU09DX0U4MDAKIAl0cmlzdGF0ZSAiU29DIEFDOTcgQXVkaW8gc3VwcG9ydCBmb3IgZTgwMCIKIAlkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfRTgwMApAQCAtOTcsMyArMTE1LDEyIEBACiAJaGVscAogCSAgU2F5IFkgaWYgeW91IHdhbnQgdG8gYWRkIHN1cHBvcnQgZm9yIFNvQyBhdWRpbyBvbiB0aGUKIAkgIE1hcnZlbGwgWnlsb25pdGUgcmVmZXJlbmNlIHBsYXRmb3JtLgorCitjb25maWcgU05EX1BYQTJYWF9TT0NfTUlPQTcwMQorICAgICAgICB0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIE1JTyBBNzAxIgorICAgICAgICBkZXBlbmRzIG9uIFNORF9QWEEyWFhfU09DICYmIE1BQ0hfTUlPQTcwMQorICAgICAgICBzZWxlY3QgU05EX1BYQTJYWF9TT0NfQUM5NworICAgICAgICBzZWxlY3QgU05EX1NPQ19XTTk3MTMKKyAgICAgICAgaGVscAorICAgICAgICAgIFNheSBZIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gdGhlCisgICAgICAgICAgTUlPIEE3MDEuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL01ha2VmaWxlIGIvc291bmQvc29jL3B4YS9NYWtlZmlsZQppbmRleCAwOGE5ZjI3Li44ZWQ4ODFjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9weGEvTWFrZWZpbGUKQEAgLTEzLDE3ICsxMywyMyBAQAogc25kLXNvYy1jb3JnaS1vYmpzIDo9IGNvcmdpLm8KIHNuZC1zb2MtcG9vZGxlLW9ianMgOj0gcG9vZGxlLm8KIHNuZC1zb2MtdG9zYS1vYmpzIDo9IHRvc2Eubworc25kLXNvYy1lNzQwLW9ianMgOj0gZTc0MF93bTk3MDUubworc25kLXNvYy1lNzUwLW9ianMgOj0gZTc1MF93bTk3MDUubwogc25kLXNvYy1lODAwLW9ianMgOj0gZTgwMF93bTk3MTIubwogc25kLXNvYy1zcGl0ei1vYmpzIDo9IHNwaXR6Lm8KIHNuZC1zb2MtZW0teDI3MC1vYmpzIDo9IGVtLXgyNzAubwogc25kLXNvYy1wYWxtMjd4LW9ianMgOj0gcGFsbTI3eC5vCiBzbmQtc29jLXp5bG9uaXRlLW9ianMgOj0genlsb25pdGUubworc25kLXNvYy1taW9hNzAxLW9ianMgOj0gbWlvYTcwMV93bTk3MTMubwogCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfQ09SR0kpICs9IHNuZC1zb2MtY29yZ2kubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX1BPT0RMRSkgKz0gc25kLXNvYy1wb29kbGUubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX1RPU0EpICs9IHNuZC1zb2MtdG9zYS5vCitvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfRTc0MCkgKz0gc25kLXNvYy1lNzQwLm8KK29iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19FNzUwKSArPSBzbmQtc29jLWU3NTAubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX0U4MDApICs9IHNuZC1zb2MtZTgwMC5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfU1BJVFopICs9IHNuZC1zb2Mtc3BpdHoubwogb2JqLSQoQ09ORklHX1NORF9QWEEyWFhfU09DX0VNX1gyNzApICs9IHNuZC1zb2MtZW0teDI3MC5vCiBvYmotJChDT05GSUdfU05EX1BYQTJYWF9TT0NfUEFMTTI3WCkgKz0gc25kLXNvYy1wYWxtMjd4Lm8KK29iai0kKENPTkZJR19TTkRfUFhBMlhYX1NPQ19NSU9BNzAxKSArPSBzbmQtc29jLW1pb2E3MDEubwogb2JqLSQoQ09ORklHX1NORF9TT0NfWllMT05JVEUpICs9IHNuZC1zb2Mtenlsb25pdGUubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9jb3JnaS5jIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCmluZGV4IDFiYTI1YTUuLmQ1YmUyYjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYworKysgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgpAQCAtMjUsOCArMjYsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9jb3JnaS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KIApAQCAtMTAwLDcgKzk5LDcgQEAKIHN0YXRpYyBpbnQgY29yZ2lfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIHRoZSBqYWNrIHN0YXR1cyBhdCBzdHJlYW0gc3RhcnR1cCAqLwogCWNvcmdpX2V4dF9jb250cm9sKGNvZGVjKTsKQEAgLTI3NSwxOCArMjc0LDE2IEBACiAgKi8KIHN0YXRpYyBpbnQgY29yZ2lfd204NzMxX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMTElORUlOIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJMSU5FSU4iKTsKIAogCS8qIEFkZCBjb3JnaSBzcGVjaWZpYyBjb250cm9scyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODczMV9jb3JnaV9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmd204NzMxX2NvcmdpX2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3MzFfY29yZ2lfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg3MzFfY29yZ2lfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIEFkZCBjb3JnaSBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzMxX2RhcG1fd2lkZ2V0cywKQEAgLTMxNywxOSArMzE0LDQ0IEBACiAJLm51bV9saW5rcyA9IDEsCiB9OwogCi0vKiBjb3JnaSBhdWRpbyBwcml2YXRlIGRhdGEgKi8KLXN0YXRpYyBzdHJ1Y3Qgd204NzMxX3NldHVwX2RhdGEgY29yZ2lfd204NzMxX3NldHVwID0gewotCS5pMmNfYnVzID0gMCwKLQkuaTJjX2FkZHJlc3MgPSAweDFiLAotfTsKLQogLyogY29yZ2kgYXVkaW8gc3Vic3lzdGVtICovCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGNvcmdpX3NuZF9kZXZkYXRhID0gewogCS5jYXJkID0gJnNuZF9zb2NfY29yZ2ksCiAJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODczMSwKLQkuY29kZWNfZGF0YSA9ICZjb3JnaV93bTg3MzFfc2V0dXAsCiB9OwogCisvKgorICogRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgYm9kZ2UgdG8gYXZvaWQgY3Jvc3MtdHJlZSBtZXJnZSBpc3N1ZXMuCisgKiBOZXcgZHJpdmVycyBzaG91bGQgcmVnaXN0ZXIgdGhlIHdtODczMSBJMkMgZGV2aWNlIGluIHRoZSBtYWNoaW5lCisgKiBzZXR1cCBjb2RlICh1bmRlciBhcmNoL2FybSBmb3IgQVJNIHN5c3RlbXMpLgorICovCitzdGF0aWMgaW50IHdtODczMV9pMmNfcmVnaXN0ZXIodm9pZCkKK3sKKwlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOworCWluZm8uYWRkciA9IDB4MWI7CisJc3RybGNweShpbmZvLnR5cGUsICJ3bTg3MzEiLCBJMkNfTkFNRV9TSVpFKTsKKworCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIoMCk7CisJaWYgKCFhZGFwdGVyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgZ2V0IGkyYyBhZGFwdGVyIDBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJaTJjX3B1dF9hZGFwdGVyKGFkYXB0ZXIpOworCWlmICghY2xpZW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgYWRkIGkyYyBkZXZpY2UgYXQgMHgleFxuIiwKKwkJCSh1bnNpZ25lZCBpbnQpaW5mby5hZGRyKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpjb3JnaV9zbmRfZGV2aWNlOwogCiBzdGF0aWMgaW50IF9faW5pdCBjb3JnaV9pbml0KHZvaWQpCkBAIC0zNDAsNiArMzYyLDEwIEBACiAJICAgICAgbWFjaGluZV9pc19odXNreSgpKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlyZXQgPSB3bTg3MzFfaTJjX3JlZ2lzdGVyKCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCiAJY29yZ2lfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOwogCWlmICghY29yZ2lfc25kX2RldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMgYi9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkMmY4OQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYwpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIGU3NDAtd205NzA1LmMgIC0tICBTb0MgYXVkaW8gZm9yIGU3NDAKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyAoYykgSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgT05MWS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisKKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzA1LmgiCisjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgorI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCisKKworI2RlZmluZSBFNzQwX0FVRElPX09VVCAxCisjZGVmaW5lIEU3NDBfQVVESU9fSU4gIDIKKworc3RhdGljIGludCBlNzQwX2F1ZGlvX3Bvd2VyOworCitzdGF0aWMgdm9pZCBlNzQwX3N5bmNfYXVkaW9fcG93ZXIoaW50IHN0YXR1cykKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX0U3NDBfV005NzA1X25BVkREMiwgIXN0YXR1cyk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19FNzQwX0FNUF9PTiwgKHN0YXR1cyAmIEU3NDBfQVVESU9fT1VUKSA/IDEgOiAwKTsKKwlncGlvX3NldF92YWx1ZShHUElPX0U3NDBfTUlDX09OLCAoc3RhdHVzICYgRTc0MF9BVURJT19JTikgPyAxIDogMCk7Cit9CisKK3N0YXRpYyBpbnQgZTc0MF9taWNfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWU3NDBfYXVkaW9fcG93ZXIgfD0gRTc0MF9BVURJT19JTjsKKwllbHNlIGlmIChldmVudCAmIFNORF9TT0NfREFQTV9QT1NUX1BNRCkKKwkJZTc0MF9hdWRpb19wb3dlciAmPSB+RTc0MF9BVURJT19JTjsKKworCWU3NDBfc3luY19hdWRpb19wb3dlcihlNzQwX2F1ZGlvX3Bvd2VyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGU3NDBfb3V0cHV0X2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1VKQorCQllNzQwX2F1ZGlvX3Bvd2VyIHw9IEU3NDBfQVVESU9fT1VUOworCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKQorCQllNzQwX2F1ZGlvX3Bvd2VyICY9IH5FNzQwX0FVRElPX09VVDsKKworCWU3NDBfc3luY19hdWRpb19wb3dlcihlNzQwX2F1ZGlvX3Bvd2VyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgZTc0MF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiU3BlYWtlciIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIk1pYyAoSW50ZXJuYWwpIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJPdXRwdXQgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTc0MF9vdXRwdXRfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiTWljIEFtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJCWU3NDBfbWljX2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsiT3V0cHV0IEFtcCIsIE5VTEwsICJMT1VUIn0sCisJeyJPdXRwdXQgQW1wIiwgTlVMTCwgIlJPVVQifSwKKwl7Ik91dHB1dCBBbXAiLCBOVUxMLCAiTU9OT09VVCJ9LAorCisJeyJTcGVha2VyIiwgTlVMTCwgIk91dHB1dCBBbXAifSwKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIk91dHB1dCBBbXAifSwKKworCXsiTUlDMSIsIE5VTEwsICJNaWMgQW1wIn0sCisJeyJNaWMgQW1wIiwgTlVMTCwgIk1pYyAoSW50ZXJuYWwpIn0sCit9OworCitzdGF0aWMgaW50IGU3NDBfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiSFBPVVRMIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkhQT1VUUiIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQSE9ORSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FSU5MIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0RJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0RJTlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUENCRUVQIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1JQzIiKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGU3NDBfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKGU3NDBfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBlNzQwX2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiQUM5NyIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0hJRkldLAorCQkuY29kZWNfZGFpID0gJndtOTcwNV9kYWlbV005NzA1X0RBSV9BQzk3X0hJRkldLAorCQkuaW5pdCA9IGU3NDBfYWM5N19pbml0LAorCX0sCisJeworCQkubmFtZSA9ICJBQzk3IEF1eCIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfQVVYXSwKKwkJLmNvZGVjX2RhaSA9ICZ3bTk3MDVfZGFpW1dNOTcwNV9EQUlfQUM5N19BVVhdLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBlNzQwID0geworCS5uYW1lID0gIlRvc2hpYmEgZTc0MCIsCisJLnBsYXRmb3JtID0gJnB4YTJ4eF9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gZTc0MF9kYWksCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoZTc0MF9kYWkpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBlNzQwX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJmU3NDAsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtOTcwNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICplNzQwX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgX19pbml0IGU3NDBfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW1hY2hpbmVfaXNfZTc0MCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3NDBfTUlDX09OLCAgIk1pYyBhbXAiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fRTc0MF9BTVBfT04sICJPdXRwdXQgYW1wIik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX21pY19hbXBfZ3BpbzsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U3NDBfV005NzA1X25BVkREMiwgIkF1ZGlvIHBvd2VyIik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX29wX2FtcF9ncGlvOworCisJLyogRGlzYWJsZSBhdWRpbyAqLworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NDBfTUlDX09OLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfYXB3cl9ncGlvOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NDBfQU1QX09OLCAwKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfYXB3cl9ncGlvOworCXJldCA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX0U3NDBfV005NzA1X25BVkREMiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2Fwd3JfZ3BpbzsKKworCWU3NDBfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghZTc0MF9zbmRfZGV2aWNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZnJlZV9hcHdyX2dwaW87CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZTc0MF9zbmRfZGV2aWNlLCAmZTc0MF9zbmRfZGV2ZGF0YSk7CisJZTc0MF9zbmRfZGV2ZGF0YS5kZXYgPSAmZTc0MF9zbmRfZGV2aWNlLT5kZXY7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChlNzQwX3NuZF9kZXZpY2UpOworCisJaWYgKCFyZXQpCisJCXJldHVybiAwOworCisvKiBGYWlsIGdyYWNlZnVsbHkgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KGU3NDBfc25kX2RldmljZSk7CitmcmVlX2Fwd3JfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FNzQwX1dNOTcwNV9uQVZERDIpOworZnJlZV9vcF9hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FNzQwX0FNUF9PTik7CitmcmVlX21pY19hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FNzQwX01JQ19PTik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZTc0MF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZTc0MF9zbmRfZGV2aWNlKTsKK30KKworbW9kdWxlX2luaXQoZTc0MF9pbml0KTsKK21vZHVsZV9leGl0KGU3NDBfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgZHJpdmVyIGZvciBlNzQwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMgYi9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRjZWNjYwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYwpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIGU3NTAtd205NzA1LmMgIC0tICBTb0MgYXVkaW8gZm9yIGU3NTAKKyAqCisgKiBDb3B5cmlnaHQgMjAwNyAoYykgSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgT05MWS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy1kYXBtLmg+CisKKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisjaW5jbHVkZSA8bWFjaC9lc2VyaWVzLWdwaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzA1LmgiCisjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgorI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCisKK3N0YXRpYyBpbnQgZTc1MF9zcGtfYW1wX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BSRV9QTVUpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc1MF9TUEtfQU1QX09GRiwgMCk7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc1MF9TUEtfQU1QX09GRiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlNzUwX2hwX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1VKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U3NTBfSFBfQU1QX09GRiwgMCk7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTc1MF9IUF9BTVBfT0ZGLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgZTc1MF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiU3BlYWtlciIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIk1pYyAoSW50ZXJuYWwpIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJIZWFkcGhvbmUgQW1wIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCQkJZTc1MF9ocF9hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCisJU05EX1NPQ19EQVBNX1BHQV9FKCJTcGVha2VyIEFtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJCWU3NTBfc3BrX2FtcF9ldmVudCwgU05EX1NPQ19EQVBNX1BSRV9QTVUgfAorCQkJU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCXsiSGVhZHBob25lIEFtcCIsIE5VTEwsICJIUE9VVEwifSwKKwl7IkhlYWRwaG9uZSBBbXAiLCBOVUxMLCAiSFBPVVRSIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIZWFkcGhvbmUgQW1wIn0sCisKKwl7IlNwZWFrZXIgQW1wIiwgTlVMTCwgIk1PTk9PVVQifSwKKwl7IlNwZWFrZXIiLCBOVUxMLCAiU3BlYWtlciBBbXAifSwKKworCXsiTUlDMSIsIE5VTEwsICJNaWMgKEludGVybmFsKSJ9LAorfTsKKworc3RhdGljIGludCBlNzUwX2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxPVVQiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUk9VVCIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJQSE9ORSIpOworCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMSU5FSU5MIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIkxJTkVJTlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0RJTkwiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiQ0RJTlIiKTsKKwlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUENCRUVQIik7CisJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1JQzIiKTsKKworCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIGU3NTBfZGFwbV93aWRnZXRzLAorCQkJCQlBUlJBWV9TSVpFKGU3NTBfZGFwbV93aWRnZXRzKSk7CisKKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgYXVkaW9fbWFwLCBBUlJBWV9TSVpFKGF1ZGlvX21hcCkpOworCisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBlNzUwX2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiQUM5NyIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0hJRkldLAorCQkuY29kZWNfZGFpID0gJndtOTcwNV9kYWlbV005NzA1X0RBSV9BQzk3X0hJRkldLAorCQkuaW5pdCA9IGU3NTBfYWM5N19pbml0LAorCQkvKiB1c2Ugb3BzIHRvIGNoZWNrIHN0YXJ0dXAgc3RhdGUgKi8KKwl9LAorCXsKKwkJLm5hbWUgPSAiQUM5NyBBdXgiLAorCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0FVWF0sCisJCS5jb2RlY19kYWkgPSAmd205NzA1X2RhaVtXTTk3MDVfREFJX0FDOTdfQVVYXSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZTc1MCA9IHsKKwkubmFtZSA9ICJUb3NoaWJhIGU3NTAiLAorCS5wbGF0Zm9ybSA9ICZweGEyeHhfc29jX3BsYXRmb3JtLAorCS5kYWlfbGluayA9IGU3NTBfZGFpLAorCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKGU3NTBfZGFpKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kZXZpY2UgZTc1MF9zbmRfZGV2ZGF0YSA9IHsKKwkuY2FyZCA9ICZlNzUwLAorCS5jb2RlY19kZXYgPSAmc29jX2NvZGVjX2Rldl93bTk3MDUsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZTc1MF9zbmRfZGV2aWNlOworCitzdGF0aWMgaW50IF9faW5pdCBlNzUwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX2U3NTAoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FNzUwX0hQX0FNUF9PRkYsICAiSGVhZHBob25lIGFtcCIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19FNzUwX1NQS19BTVBfT0ZGLCAiU3BlYWtlciBhbXAiKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfaHBfYW1wX2dwaW87CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FNzUwX0hQX0FNUF9PRkYsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9zcGtfYW1wX2dwaW87CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19FNzUwX1NQS19BTVBfT0ZGLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfc3BrX2FtcF9ncGlvOworCisJZTc1MF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CisJaWYgKCFlNzUwX3NuZF9kZXZpY2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX3Nwa19hbXBfZ3BpbzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShlNzUwX3NuZF9kZXZpY2UsICZlNzUwX3NuZF9kZXZkYXRhKTsKKwllNzUwX3NuZF9kZXZkYXRhLmRldiA9ICZlNzUwX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRkKGU3NTBfc25kX2RldmljZSk7CisKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKy8qIEZhaWwgZ3JhY2VmdWxseSAqLworCXBsYXRmb3JtX2RldmljZV9wdXQoZTc1MF9zbmRfZGV2aWNlKTsKK2ZyZWVfc3BrX2FtcF9ncGlvOgorCWdwaW9fZnJlZShHUElPX0U3NTBfU1BLX0FNUF9PRkYpOworZnJlZV9ocF9hbXBfZ3BpbzoKKwlncGlvX2ZyZWUoR1BJT19FNzUwX0hQX0FNUF9PRkYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGU3NTBfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGU3NTBfc25kX2RldmljZSk7CisJZ3Bpb19mcmVlKEdQSU9fRTc1MF9TUEtfQU1QX09GRik7CisJZ3Bpb19mcmVlKEdQSU9fRTc1MF9IUF9BTVBfT0ZGKTsKK30KKworbW9kdWxlX2luaXQoZTc1MF9pbml0KTsKK21vZHVsZV9leGl0KGU3NTBfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgZHJpdmVyIGZvciBlNzUwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMgYi9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMKaW5kZXggMmUzMzg2ZC4uYmMwMTljZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jCisrKyBiL3NvdW5kL3NvYy9weGEvZTgwMF93bTk3MTIuYwpAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiBlODAwLXdtOTcxMi5jICAtLSAgU29DIGF1ZGlvIGZvciBlODAwCiAgKgotICogQmFzZWQgb24gdG9zYS5jCi0gKgogICogQ29weXJpZ2h0IDIwMDcgKGMpIElhbiBNb2x0b24gPHNweXJvQGYycy5jb20+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTMsNyArMTEsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CkBAIC0yMSwyMyArMTksODUgQEAKICNpbmNsdWRlIDxzb3VuZC9zb2MtZGFwbS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YS1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvYXVkaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2VzZXJpZXMtZ3Bpby5oPgogCiAjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTcxMi5oIgogI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKICNpbmNsdWRlICJweGEyeHgtYWM5Ny5oIgogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBlODAwOworc3RhdGljIGludCBlODAwX3Nwa19hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUFJFX1BNVSkKKwkJZ3Bpb19zZXRfdmFsdWUoR1BJT19FODAwX1NQS19BTVBfT04sIDEpOworCWVsc2UgaWYgKGV2ZW50ICYgU05EX1NPQ19EQVBNX1BPU1RfUE1EKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U4MDBfU1BLX0FNUF9PTiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlODAwX2hwX2FtcF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCWlmIChldmVudCAmIFNORF9TT0NfREFQTV9QUkVfUE1VKQorCQlncGlvX3NldF92YWx1ZShHUElPX0U4MDBfSFBfQU1QX09GRiwgMCk7CisJZWxzZSBpZiAoZXZlbnQgJiBTTkRfU09DX0RBUE1fUE9TVF9QTUQpCisJCWdwaW9fc2V0X3ZhbHVlKEdQSU9fRTgwMF9IUF9BTVBfT0ZGLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgZTgwMF9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbDEpIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiTWljIChJbnRlcm5hbDIpIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiU3BlYWtlciIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiSGVhZHBob25lIEFtcCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwkJCWU4MDBfaHBfYW1wX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNVSB8CisJCQlTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorCVNORF9TT0NfREFQTV9QR0FfRSgiU3BlYWtlciBBbXAiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJCQllODAwX3Nwa19hbXBfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJCVNORF9TT0NfREFQTV9QT1NUX1BNRCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhdWRpb19tYXBbXSA9IHsKKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhQT1VUTCJ9LAorCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBPVVRSIn0sCisJeyJIZWFkcGhvbmUgSmFjayIsIE5VTEwsICJIZWFkcGhvbmUgQW1wIn0sCisKKwl7IlNwZWFrZXIgQW1wIiwgTlVMTCwgIk1PTk9PVVQifSwKKwl7IlNwZWFrZXIiLCBOVUxMLCAiU3BlYWtlciBBbXAifSwKKworCXsiTUlDMSIsIE5VTEwsICJNaWMgKEludGVybmFsMSkifSwKKwl7Ik1JQzIiLCBOVUxMLCAiTWljIChJbnRlcm5hbDIpIn0sCit9OworCitzdGF0aWMgaW50IGU4MDBfYWM5N19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKGNvZGVjLCBlODAwX2RhcG1fd2lkZ2V0cywKKwkJCQkJQVJSQVlfU0laRShlODAwX2RhcG1fd2lkZ2V0cykpOworCisJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoY29kZWMsIGF1ZGlvX21hcCwgQVJSQVlfU0laRShhdWRpb19tYXApKTsKKwlzbmRfc29jX2RhcG1fc3luYyhjb2RlYyk7CisKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGU4MDBfZGFpW10gPSB7Ci17Ci0JLm5hbWUgPSAiQUM5NyBBdXgiLAotCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCi0JLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19BVVhdLAotCS5jb2RlY19kYWkgPSAmd205NzEyX2RhaVtXTTk3MTJfREFJX0FDOTdfQVVYXSwKLX0sCisJeworCQkubmFtZSA9ICJBQzk3IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCisJCS5jcHVfZGFpID0gJnB4YV9hYzk3X2RhaVtQWEEyWFhfREFJX0FDOTdfSElGSV0sCisJCS5jb2RlY19kYWkgPSAmd205NzEyX2RhaVtXTTk3MTJfREFJX0FDOTdfSElGSV0sCisJCS5pbml0ID0gZTgwMF9hYzk3X2luaXQsCisJfSwKKwl7CisJCS5uYW1lID0gIkFDOTcgQXV4IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19BVVhdLAorCQkuY29kZWNfZGFpID0gJndtOTcxMl9kYWlbV005NzEyX0RBSV9BQzk3X0FVWF0sCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGU4MDAgPSB7CkBAIC02MSw2ICsxMjEsMjIgQEAKIAlpZiAoIW1hY2hpbmVfaXNfZTgwMCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U4MDBfSFBfQU1QX09GRiwgICJIZWFkcGhvbmUgYW1wIik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0U4MDBfU1BLX0FNUF9PTiwgIlNwZWFrZXIgYW1wIik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2hwX2FtcF9ncGlvOworCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTgwMF9IUF9BTVBfT0ZGLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfc3BrX2FtcF9ncGlvOworCisJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRTgwMF9TUEtfQU1QX09OLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZyZWVfc3BrX2FtcF9ncGlvOworCiAJZTgwMF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7CiAJaWYgKCFlODAwX3NuZF9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjksOCArMTQ1LDE1IEBACiAJZTgwMF9zbmRfZGV2ZGF0YS5kZXYgPSAmZTgwMF9zbmRfZGV2aWNlLT5kZXY7CiAJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChlODAwX3NuZF9kZXZpY2UpOwogCi0JaWYgKHJldCkKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChlODAwX3NuZF9kZXZpY2UpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworLyogRmFpbCBncmFjZWZ1bGx5ICovCisJcGxhdGZvcm1fZGV2aWNlX3B1dChlODAwX3NuZF9kZXZpY2UpOworZnJlZV9zcGtfYW1wX2dwaW86CisJZ3Bpb19mcmVlKEdQSU9fRTgwMF9TUEtfQU1QX09OKTsKK2ZyZWVfaHBfYW1wX2dwaW86CisJZ3Bpb19mcmVlKEdQSU9fRTgwMF9IUF9BTVBfT0ZGKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC03OCw2ICsxNjEsOCBAQAogc3RhdGljIHZvaWQgX19leGl0IGU4MDBfZXhpdCh2b2lkKQogewogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGU4MDBfc25kX2RldmljZSk7CisJZ3Bpb19mcmVlKEdQSU9fRTgwMF9TUEtfQU1QX09OKTsKKwlncGlvX2ZyZWUoR1BJT19FODAwX0hQX0FNUF9PRkYpOwogfQogCiBtb2R1bGVfaW5pdChlODAwX2luaXQpOwpAQCAtODYsNCArMTcxLDQgQEAKIC8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLwogTU9EVUxFX0FVVEhPUigiSWFuIE1vbHRvbiA8c3B5cm9AZjJzLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgZHJpdmVyIGZvciBlODAwIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2VtLXgyNzAuYyBiL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCmluZGV4IGZlNGE3MjkuLjk0OWJlOWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCisrKyBiL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCkBAIC0yOSw4ICsyOSw2IEBACiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzEyLmgiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMgYi9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllZGE4YgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYwpAQCAtMCwwICsxLDI1MCBAQAorLyoKKyAqIEhhbmRsZXMgdGhlIE1pdGFjIG1pb2E3MDEgU29DIHN5c3RlbQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBSb2JlcnQgSmFyem1paworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKiBUaGlzIGlzIGEgbGl0dGxlIHNjaGVtYSBvZiB0aGUgc291bmQgaW50ZXJjb25uZWN0aW9ucyA6CisgKgorICogICAgU2FnZW0gWDIwMCAgICAgICAgICAgICAgICAgV29sZnNvbiBXTTk3MTMKKyAqICAgICstLS0tLS0tLSsgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgUmVhciBTcGVha2VyCisgKiAgICB8ICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgLy0rCisgKiAgICB8ICAgICAgICArLS0tPi0tLS0tPi0tLStNT05PSU4gICAgICAgICBTUEtMKy0tLT4tLS0tKy0rICB8CisgKiAgICB8ICBHU00gICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCB8ICB8CisgKiAgICB8ICAgICAgICArLS0tPi0tLS0tPi0tLStQQ0JFRVAgICAgICAgICBTUEtSKy0tLT4tLS0tKy0rICB8CisgKiAgICB8ICBDSElQICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgXC0rCisgKiAgICB8ICAgICAgICArLS0tPC0tLS0tPC0tLStNT05PICAgICAgICAgICAgICAgfAorICogICAgfCAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICBGcm9udCBTcGVha2VyCisgKiAgICArLS0tLS0tLS0rICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgLy0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgSFBMKy0tLT4tLS0tKy0rICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgfCB8ICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICBPVVQzKy0tLT4tLS0tKy0rICB8CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgXC0rCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgIEZyb250IE1pY3JvCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIE1JQzErLS0tLS08LS0rbysKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgKworICogICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSsgICAgICAgIC0tLQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvc29jLmg+CisjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CisjaW5jbHVkZSA8c291bmQvYWM5N19jb2RlYy5oPgorCisjaW5jbHVkZSAicHhhMnh4LXBjbS5oIgorI2luY2x1ZGUgInB4YTJ4eC1hYzk3LmgiCisjaW5jbHVkZSAiLi4vY29kZWNzL3dtOTcxMy5oIgorCisjZGVmaW5lIEFSUkFZX0FORF9TSVpFKHgpCSh4KSwgQVJSQVlfU0laRSh4KQorCisjZGVmaW5lIEFDOTdfR1BJT19QVUxMCQkweDU4CisKKy8qIFVzZSBHUElPOCBmb3IgcmVhciBzcGVha2VyIGFtcGxpZmllciAqLworc3RhdGljIGludCByZWFyX2FtcF9wb3dlcihzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBwb3dlcikKK3sKKwl1bnNpZ25lZCBzaG9ydCByZWc7CisKKwlpZiAocG93ZXIpIHsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHKTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgQUM5N19HUElPX0NGRywgcmVnIHwgMHgwMTAwKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBQzk3X0dQSU9fUFVMTCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfR1BJT19QVUxMLCByZWcgfCAoMTw8MTUpKTsKKwl9IGVsc2UgeworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIEFDOTdfR1BJT19DRkcpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBQzk3X0dQSU9fQ0ZHLCByZWcgJiB+MHgwMTAwKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBBQzk3X0dQSU9fUFVMTCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFDOTdfR1BJT19QVUxMLCByZWcgJiB+KDE8PDE1KSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVhcl9hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCwKKwkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHdpZGdldC0+Y29kZWM7CisKKwlyZXR1cm4gcmVhcl9hbXBfcG93ZXIoY29kZWMsIFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpOworfQorCisvKiBtaW9hNzAxIG1hY2hpbmUgZGFwbSB3aWRnZXRzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgbWlvYTcwMV9kYXBtX3dpZGdldHNbXSA9IHsKKwlTTkRfU09DX0RBUE1fU1BLKCJGcm9udCBTcGVha2VyIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NQSygiUmVhciBTcGVha2VyIiwgcmVhcl9hbXBfZXZlbnQpLAorCVNORF9TT0NfREFQTV9NSUMoIkhlYWRzZXQiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTElORSgiR1NNIExpbmUgT3V0IiwgTlVMTCksCisJU05EX1NPQ19EQVBNX0xJTkUoIkdTTSBMaW5lIEluIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJGcm9udCBNaWMiLCBOVUxMKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGF1ZGlvX21hcFtdID0geworCS8qIENhbGwgTWljICovCisJeyJNaWMgQmlhcyIsIE5VTEwsICJGcm9udCBNaWMifSwKKwl7Ik1JQzEiLCBOVUxMLCAiTWljIEJpYXMifSwKKworCS8qIEhlYWRzZXQgTWljICovCisJeyJMSU5FTCIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCXsiTElORVIiLCBOVUxMLCAiSGVhZHNldCBNaWMifSwKKworCS8qIEdTTSBNb2R1bGUgKi8KKwl7Ik1PTk9JTiIsIE5VTEwsICJHU00gTGluZSBPdXQifSwKKwl7IlBDQkVFUCIsIE5VTEwsICJHU00gTGluZSBPdXQifSwKKwl7IkdTTSBMaW5lIEluIiwgTlVMTCwgIk1PTk8ifSwKKworCS8qIGhlYWRwaG9uZSBjb25uZWN0ZWQgdG8gSFBMLCBIUFIgKi8KKwl7IkhlYWRzZXQiLCBOVUxMLCAiSFBMIn0sCisJeyJIZWFkc2V0IiwgTlVMTCwgIkhQUiJ9LAorCisJLyogZnJvbnQgc3BlYWtlciBjb25uZWN0ZWQgdG8gSFBMLCBPVVQzICovCisJeyJGcm9udCBTcGVha2VyIiwgTlVMTCwgIkhQTCJ9LAorCXsiRnJvbnQgU3BlYWtlciIsIE5VTEwsICJPVVQzIn0sCisKKwkvKiByZWFyIHNwZWFrZXIgY29ubmVjdGVkIHRvIFNQS0wsIFNQS1IgKi8KKwl7IlJlYXIgU3BlYWtlciIsIE5VTEwsICJTUEtMIn0sCisJeyJSZWFyIFNwZWFrZXIiLCBOVUxMLCAiU1BLUiJ9LAorfTsKKworc3RhdGljIGludCBtaW9hNzAxX3dtOTcxM19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwl1bnNpZ25lZCBzaG9ydCByZWc7CisKKwkvKiBBZGQgbWlvYTcwMSBzcGVjaWZpYyB3aWRnZXRzICovCisJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgQVJSQVlfQU5EX1NJWkUobWlvYTcwMV9kYXBtX3dpZGdldHMpKTsKKworCS8qIFNldCB1cCBtaW9hNzAxIHNwZWNpZmljIGF1ZGlvIHBhdGggYXVkaW9fbWFwbmVjdHMgKi8KKwlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhjb2RlYywgQVJSQVlfQU5EX1NJWkUoYXVkaW9fbWFwKSk7CisKKwkvKiBQcmVwYXJlIEdQSU84IGZvciByZWFyIHNwZWFrZXIgYW1wbGlmaWVyICovCisJcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFDOTdfR1BJT19DRkcpOworCWNvZGVjLT53cml0ZShjb2RlYywgQUM5N19HUElPX0NGRywgcmVnIHwgMHgwMTAwKTsKKworCS8qIFByZXBhcmUgTUlDIGlucHV0ICovCisJcmVnID0gY29kZWMtPnJlYWQoY29kZWMsIEFDOTdfM0RfQ09OVFJPTCk7CisJY29kZWMtPndyaXRlKGNvZGVjLCBBQzk3XzNEX0NPTlRST0wsIHJlZyB8IDB4YzAwMCk7CisKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIkZyb250IFNwZWFrZXIiKTsKKwlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIlJlYXIgU3BlYWtlciIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiRnJvbnQgTWljIik7CisJc25kX3NvY19kYXBtX2VuYWJsZV9waW4oY29kZWMsICJHU00gTGluZSBJbiIpOworCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGNvZGVjLCAiR1NNIExpbmUgT3V0Iik7CisJc25kX3NvY19kYXBtX3N5bmMoY29kZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgbWlvYTcwMV9vcHM7CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBtaW9hNzAxX2RhaVtdID0geworCXsKKwkJLm5hbWUgPSAiQUM5NyIsCisJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAorCQkuY3B1X2RhaSA9ICZweGFfYWM5N19kYWlbUFhBMlhYX0RBSV9BQzk3X0hJRkldLAorCQkuY29kZWNfZGFpID0gJndtOTcxM19kYWlbV005NzEzX0RBSV9BQzk3X0hJRkldLAorCQkuaW5pdCA9IG1pb2E3MDFfd205NzEzX2luaXQsCisJCS5vcHMgPSAmbWlvYTcwMV9vcHMsCisJfSwKKwl7CisJCS5uYW1lID0gIkFDOTcgQXV4IiwKKwkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKKwkJLmNwdV9kYWkgPSAmcHhhX2FjOTdfZGFpW1BYQTJYWF9EQUlfQUM5N19BVVhdLAorCQkuY29kZWNfZGFpID0gJndtOTcxM19kYWlbV005NzEzX0RBSV9BQzk3X0FVWF0sCisJCS5vcHMgPSAmbWlvYTcwMV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIG1pb2E3MDEgPSB7CisJLm5hbWUgPSAiTWlvQTcwMSIsCisJLnBsYXRmb3JtID0gJnB4YTJ4eF9zb2NfcGxhdGZvcm0sCisJLmRhaV9saW5rID0gbWlvYTcwMV9kYWksCisJLm51bV9saW5rcyA9IEFSUkFZX1NJWkUobWlvYTcwMV9kYWkpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBtaW9hNzAxX3NuZF9kZXZkYXRhID0geworCS5jYXJkID0gJm1pb2E3MDEsCisJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtOTcxMywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptaW9hNzAxX3NuZF9kZXZpY2U7CisKK3N0YXRpYyBpbnQgbWlvYTcwMV93bTk3MTNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcmV0OworCisJaWYgKCFtYWNoaW5lX2lzX21pb2E3MDEoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlkZXZfd2FybigmcGRldi0+ZGV2LCAiQmUgd2FybmVkIHRoYXQgaW5jb3JyZWN0IG1peGVycy9tdXhlcyBzZXR1cCB3aWxsIgorCQkgImxlYWQgdG8gb3ZlcmhlYXRpbmcgYW5kIHBvc3NpYmxlIGRlc3RydWN0aW9uIG9mIHlvdXIgZGV2aWNlLiIKKwkJICJEbyBub3QgdXNlIHdpdGhvdXQgYSBnb29kIGtub3dsZWRnZSBvZiBtaW8ncyBib2FyZCBkZXNpZ24hXG4iKTsKKworCW1pb2E3MDFfc25kX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygic29jLWF1ZGlvIiwgLTEpOworCWlmICghbWlvYTcwMV9zbmRfZGV2aWNlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKG1pb2E3MDFfc25kX2RldmljZSwgJm1pb2E3MDFfc25kX2RldmRhdGEpOworCW1pb2E3MDFfc25kX2RldmRhdGEuZGV2ID0gJm1pb2E3MDFfc25kX2RldmljZS0+ZGV2OworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChtaW9hNzAxX3NuZF9kZXZpY2UpOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCXBsYXRmb3JtX2RldmljZV9wdXQobWlvYTcwMV9zbmRfZGV2aWNlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtaW9hNzAxX3dtOTcxM19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihtaW9hNzAxX3NuZF9kZXZpY2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtaW9hNzAxX3dtOTcxM19kcml2ZXIgPSB7CisJLnByb2JlCQk9IG1pb2E3MDFfd205NzEzX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWlvYTcwMV93bTk3MTNfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gIm1pb2E3MDEtd205NzEzIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtaW9hNzAxX2Fzb2NfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1pb2E3MDFfd205NzEzX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtaW9hNzAxX2Fzb2NfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtaW9hNzAxX3dtOTcxM19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChtaW9hNzAxX2Fzb2NfaW5pdCk7Cittb2R1bGVfZXhpdChtaW9hNzAxX2Fzb2NfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0FVVEhPUigiUm9iZXJ0IEphcnptaWsgKHJqYXJ6bWlrQGZyZWUuZnIpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29DIFdNOTcxMyBNSU8gQTcwMSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9wYWxtMjd4LmMgYi9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYwppbmRleCA0YTljZjMwLi40OGE3M2Y2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYworKysgYi9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYwpAQCAtNTUsNyArNTUsNyBAQAogc3RhdGljIGludCBwYWxtMjd4X3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayB0aGUgamFjayBzdGF0dXMgYXQgc3RyZWFtIHN0YXJ0dXAgKi8KIAlwYWxtMjd4X2V4dF9jb250cm9sKGNvZGVjKTsKQEAgLTE0NiwxOSArMTQ2LDE2IEBACiAKIHN0YXRpYyBpbnQgcGFsbTI3eF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJPVVQzIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk1PTk9PVVQiKTsKIAogCS8qIGFkZCBwYWxtMjd4IHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGFsbTI3eF9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCQlzbmRfc29jX2NuZXcoJnBhbG0yN3hfY29udHJvbHNbaV0sCi0JCQkJCQljb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCBwYWxtMjd4X2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUocGFsbTI3eF9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogYWRkIHBhbG0yN3ggc3BlY2lmaWMgd2lkZ2V0cyAqLwogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHBhbG0yN3hfZGFwbV93aWRnZXRzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9wb29kbGUuYyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKaW5kZXggNmU5ODI3MS4uYTUxMDU4ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9wb29kbGUuYworKysgYi9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KQEAgLTI2LDggKzI3LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2xvY29tby5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9wb29kbGUuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKQEAgLTc3LDcgKzc2LDcgQEAKIHN0YXRpYyBpbnQgcG9vZGxlX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y2FyZC0+Y29kZWM7CiAKIAkvKiBjaGVjayB0aGUgamFjayBzdGF0dXMgYXQgc3RyZWFtIHN0YXJ0dXAgKi8KIAlwb29kbGVfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMjQwLDE5ICsyMzksMTcgQEAKICAqLwogc3RhdGljIGludCBwb29kbGVfd204NzMxX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCXNuZF9zb2NfZGFwbV9uY19waW4oY29kZWMsICJMTElORUlOIik7CiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIlJMSU5FSU4iKTsKIAlzbmRfc29jX2RhcG1fZW5hYmxlX3Bpbihjb2RlYywgIk1JQ0lOIik7CiAKIAkvKiBBZGQgcG9vZGxlIHNwZWNpZmljIGNvbnRyb2xzICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204NzMxX3Bvb2RsZV9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmd204NzMxX3Bvb2RsZV9jb250cm9sc1tpXSwgY29kZWMsIE5VTEwpKTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXR1cm4gZXJyOwotCX0KKwllcnIgPSBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgd204NzMxX3Bvb2RsZV9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKHdtODczMV9wb29kbGVfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIEFkZCBwb29kbGUgc3BlY2lmaWMgd2lkZ2V0cyAqLwogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHdtODczMV9kYXBtX3dpZGdldHMsCkBAIC0yODMsMTcgKzI4MCw0MiBAQAogCS5udW1fbGlua3MgPSAxLAogfTsKIAotLyogcG9vZGxlIGF1ZGlvIHByaXZhdGUgZGF0YSAqLwotc3RhdGljIHN0cnVjdCB3bTg3MzFfc2V0dXBfZGF0YSBwb29kbGVfd204NzMxX3NldHVwID0gewotCS5pMmNfYnVzID0gMCwKLQkuaTJjX2FkZHJlc3MgPSAweDFiLAotfTsKKy8qCisgKiBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBib2RnZSB0byBhdm9pZCBjcm9zcy10cmVlIG1lcmdlIGlzc3Vlcy4KKyAqIE5ldyBkcml2ZXJzIHNob3VsZCByZWdpc3RlciB0aGUgd204NzMxIEkyQyBkZXZpY2UgaW4gdGhlIG1hY2hpbmUKKyAqIHNldHVwIGNvZGUgKHVuZGVyIGFyY2gvYXJtIGZvciBBUk0gc3lzdGVtcykuCisgKi8KK3N0YXRpYyBpbnQgd204NzMxX2kyY19yZWdpc3Rlcih2b2lkKQoreworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJaW5mby5hZGRyID0gMHgxYjsKKwlzdHJsY3B5KGluZm8udHlwZSwgIndtODczMSIsIEkyQ19OQU1FX1NJWkUpOworCisJYWRhcHRlciA9IGkyY19nZXRfYWRhcHRlcigwKTsKKwlpZiAoIWFkYXB0ZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBnZXQgaTJjIGFkYXB0ZXIgMFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKKwlpMmNfcHV0X2FkYXB0ZXIoYWRhcHRlcik7CisJaWYgKCFjbGllbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhZGQgaTJjIGRldmljZSBhdCAweCV4XG4iLAorCQkJKHVuc2lnbmVkIGludClpbmZvLmFkZHIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KIAogLyogcG9vZGxlIGF1ZGlvIHN1YnN5c3RlbSAqLwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RldmljZSBwb29kbGVfc25kX2RldmRhdGEgPSB7CiAJLmNhcmQgPSAmc25kX3NvY19wb29kbGUsCiAJLmNvZGVjX2RldiA9ICZzb2NfY29kZWNfZGV2X3dtODczMSwKLQkuY29kZWNfZGF0YSA9ICZwb29kbGVfd204NzMxX3NldHVwLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBvb2RsZV9zbmRfZGV2aWNlOwpAQCAtMzA1LDYgKzMyNywxMCBAQAogCWlmICghbWFjaGluZV9pc19wb29kbGUoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlyZXQgPSB3bTg3MzFfaTJjX3JlZ2lzdGVyKCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCiAJbG9jb21vX2dwaW9fc2V0X2RpcigmcG9vZGxlX2xvY29tb19kZXZpY2UuZGV2LAogCQlQT09ETEVfTE9DT01PX0dQSU9fQU1QX09OLCAwKTsKIAkvKiBzaG91bGQgd2UgbXV0ZSBIUCBhdCBzdGFydHVwIC0gYnVybmluZyBwb3dlciA/Ki8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvcHhhLXNzcC5jIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKaW5kZXggNzNjYjZiNC4uN2FjZDNmZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMKKysrIGIvc291bmQvc29jL3B4YS9weGEtc3NwLmMKQEAgLTEsNCArMSwzIEBACi0jZGVmaW5lIERFQlVHCiAvKgogICogcHhhLXNzcC5jICAtLSAgQUxTQSBTb2MgQXVkaW8gTGF5ZXIKICAqCkBAIC0yMSw2ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKwogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CkBAIC0yOSw3ICszMCw3IEBACiAjaW5jbHVkZSA8c291bmQvcHhhMnh4LWxpYi5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1zc3AuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWFjaC9zc3AuaD4KQEAgLTIyMSw5ICsyMjIsOSBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKCFjcHVfZGFpLT5hY3RpdmUpIHsKLQkJcmV0ID0gc3NwX2luaXQoJnByaXYtPmRldiwgY3B1X2RhaS0+aWQgKyAxLCBTU1BfTk9fSVJRKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCQlwcml2LT5kZXYucG9ydCA9IGNwdV9kYWktPmlkICsgMTsKKwkJcHJpdi0+ZGV2LmlycSA9IE5PX0lSUTsKKwkJY2xrX2VuYWJsZShwcml2LT5kZXYuc3NwLT5jbGspOwogCQlzc3BfZGlzYWJsZSgmcHJpdi0+ZGV2KTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTIzOCw3ICsyMzksNyBAQAogCiAJaWYgKCFjcHVfZGFpLT5hY3RpdmUpIHsKIAkJc3NwX2Rpc2FibGUoJnByaXYtPmRldik7Ci0JCXNzcF9leGl0KCZwcml2LT5kZXYpOworCQljbGtfZGlzYWJsZShwcml2LT5kZXYuc3NwLT5jbGspOwogCX0KIH0KIApAQCAtMjk4LDcgKzI5OSw3IEBACiAJaW50IHZhbDsKIAogCXUzMiBzc2NyMCA9IHNzcF9yZWFkX3JlZyhzc3AsIFNTQ1IwKSAmCi0JCX4oU1NDUjBfRUNTIHwgIFNTQ1IwX05DUyB8IFNTQ1IwX01PRCB8IFNTQ1IwX0FEQyk7CisJCX4oU1NDUjBfRUNTIHwgIFNTQ1IwX05DUyB8IFNTQ1IwX01PRCB8IFNTQ1IwX0FDUyk7CiAKIAlkZXZfZGJnKCZzc3AtPnBkZXYtPmRldiwKIAkJInB4YV9zc3Bfc2V0X2RhaV9zeXNjbGsgaWQ6ICVkLCBjbGtfaWQgJWQsIGZyZXEgJWRcbiIsCkBAIC0zMjYsNyArMzI3LDcgQEAKIAljYXNlIFBYQV9TU1BfQ0xLX0FVRElPOgogCQlwcml2LT5zeXNjbGsgPSAwOwogCQlzc3Bfc2V0X3NjcigmcHJpdi0+ZGV2LCAxKTsKLQkJc3NjcjAgfD0gU1NDUjBfQURDOworCQlzc2NyMCB8PSBTU0NSMF9BQ1M7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTIwLDkgKzUyMSwyMCBAQAogCXUzMiBzc2NyMTsKIAl1MzIgc3Nwc3A7CiAKKwkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBhdCBhbGwgKi8KKwlpZiAocHJpdi0+ZGFpX2ZtdCA9PSBmbXQpCisJCXJldHVybiAwOworCisJLyogd2UgY2FuIG9ubHkgY2hhbmdlIHRoZSBzZXR0aW5ncyBpZiB0aGUgcG9ydCBpcyBub3QgaW4gdXNlICovCisJaWYgKHNzcF9yZWFkX3JlZyhzc3AsIFNTQ1IwKSAmIFNTQ1IwX1NTRSkgeworCQlkZXZfZXJyKCZzc3AtPnBkZXYtPmRldiwKKwkJCSJjYW4ndCBjaGFuZ2UgaGFyZHdhcmUgZGFpIGZvcm1hdDogc3RyZWFtIGlzIGluIHVzZSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiByZXNldCBwb3J0IHNldHRpbmdzICovCiAJc3NjcjAgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU0NSMCkgJgotCQkoU1NDUjBfRUNTIHwgIFNTQ1IwX05DUyB8IFNTQ1IwX01PRCB8IFNTQ1IwX0FEQyk7CisJCShTU0NSMF9FQ1MgfCAgU1NDUjBfTkNTIHwgU1NDUjBfTU9EIHwgU1NDUjBfQUNTKTsKIAlzc2NyMSA9IFNTQ1IxX1J4VHJlc2goOCkgfCBTU0NSMV9UeFRyZXNoKDcpOwogCXNzcHNwID0gMDsKIApAQCAtNTQ1LDE4ICs1NTcsMTggQEAKIAogCXN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spIHsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKLQkJc3NjcjAgfD0gU1NDUjBfTU9EIHwgU1NDUjBfUFNQOworCQlzc2NyMCB8PSBTU0NSMF9QU1A7CiAJCXNzY3IxIHw9IFNTQ1IxX1JXT1QgfCBTU0NSMV9UUkFJTDsKIAorCQkvKiBTZWUgaHdfcGFyYW1zKCkgKi8KIAkJc3dpdGNoIChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgewogCQljYXNlIFNORF9TT0NfREFJRk1UX05CX05GOgotCQkJc3Nwc3AgfD0gU1NQU1BfRlNSVDsKKwkJCXNzcHNwIHw9IFNTUFNQX1NGUk1QOwogCQkJYnJlYWs7CiAJCWNhc2UgU05EX1NPQ19EQUlGTVRfTkJfSUY6Ci0JCQlzc3BzcCB8PSBTU1BTUF9TRlJNUCB8IFNTUFNQX0ZTUlQ7CiAJCQlicmVhazsKIAkJY2FzZSBTTkRfU09DX0RBSUZNVF9JQl9JRjoKLQkJCXNzcHNwIHw9IFNTUFNQX1NGUk1QOworCQkJc3Nwc3AgfD0gU1NQU1BfU0NNT0RFKDMpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY0MiwzNCArNjU0LDY1IEBACiAJCQlzc2NyMCB8PSBTU0NSMF9GUENLRTsKICNlbmRpZgogCQlzc2NyMCB8PSBTU0NSMF9EYXRhU2l6ZSgxNik7Ci0JCWlmIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSA+IDEpCi0JCQlzc2NyMCB8PSBTU0NSMF9FRFNTOwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFOgogCQlzc2NyMCB8PSAoU1NDUjBfRURTUyB8IFNTQ1IwX0RhdGFTaXplKDgpKTsKLQkJLyogd2UgbXVzdCBiZSBpbiBuZXR3b3JrIG1vZGUgKDIgc2xvdHMpIGZvciAyNCBiaXQgc3RlcmVvICovCiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMzJfTEU6CiAJCXNzY3IwIHw9IChTU0NSMF9FRFNTIHwgU1NDUjBfRGF0YVNpemUoMTYpKTsKLQkJLyogd2UgbXVzdCBiZSBpbiBuZXR3b3JrIG1vZGUgKDIgc2xvdHMpIGZvciAzMiBiaXQgc3RlcmVvICovCiAJCWJyZWFrOwogCX0KIAlzc3Bfd3JpdGVfcmVnKHNzcCwgU1NDUjAsIHNzY3IwKTsKIAogCXN3aXRjaCAocHJpdi0+ZGFpX2ZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlM6Ci0JCS8qIENsZWFyZWQgd2hlbiB0aGUgREFJIGZvcm1hdCBpcyBzZXQgKi8KLQkJc3Nwc3AgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU1BTUCkgfCBTU1BTUF9TRlJNV0RUSCh3aWR0aCk7CisJICAgICAgIHNzcHNwID0gc3NwX3JlYWRfcmVnKHNzcCwgU1NQU1ApOworCisJCWlmICgoKHNzY3IwICYgU1NDUjBfU0NSKSA9PSBTU0NSMF9TZXJDbGtEaXYoNCkpICYmCisJCSAgICAgKHdpZHRoID09IDE2KSkgeworCQkJLyogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGUgYml0Y2xrIGlzIDY0ZnMKKwkJCSogYW5kIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggMiozMiBiaXRzIG9mIGF1ZGlvCisJCQkqIHNhbXBsZXMuCisJCQkqCisJCQkqIFRoZSBTU1AgdmFsdWVzIHVzZWQgZm9yIHRoYXQgYXJlIGFsbCBmb3VuZCBvdXQgYnkKKwkJCSogdHJ5aW5nIGFuZCBmYWlsaW5nIGEgbG90OyBzb21lIG9mIHRoZSByZWdpc3RlcnMKKwkJCSogbmVlZGVkIGZvciB0aGF0IG1vZGUgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFBYQTN4eC4KKwkJCSovCisKKyNpZmRlZiBDT05GSUdfUFhBM3h4CisJCQlpZiAoIWNwdV9pc19weGEzeHgoKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTVdEVEgod2lkdGggKiAyKTsKKwkJCXNzcHNwIHw9IFNTUFNQX1NGUk1ETFkod2lkdGggKiA0KTsKKwkJCXNzcHNwIHw9IFNTUFNQX0VETVlTVE9QKDMpOworCQkJc3Nwc3AgfD0gU1NQU1BfRE1ZU1RPUCgzKTsKKwkJCXNzcHNwIHw9IFNTUFNQX0RNWVNUUlQoMSk7CisjZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCS8qIFRoZSBmcmFtZSB3aWR0aCBpcyB0aGUgd2lkdGggdGhlIExSQ0xLIGlzCisJCQkgKiBhc3NlcnRlZCBmb3I7IHRoZSBkZWxheSBpcyBleHByZXNzZWQgaW4KKwkJCSAqIGhhbGYgY3ljbGUgdW5pdHMuICBXZSBuZWVkIHRoZSBleHRyYSBjeWNsZQorCQkJICogYmVjYXVzZSB0aGUgZGF0YSBzdGFydHMgY2xvY2tpbmcgb3V0IG9uZSBCQ0xLCisJCQkgKiBhZnRlciBMUkNMSyBjaGFuZ2VzIHBvbGFyaXR5LgorCQkJICovCisJCQlzc3BzcCB8PSBTU1BTUF9TRlJNV0RUSCh3aWR0aCArIDEpOworCQkJc3Nwc3AgfD0gU1NQU1BfU0ZSTURMWSgod2lkdGggKyAxKSAqIDIpOworCQkJc3Nwc3AgfD0gU1NQU1BfRE1ZU1RSVCgxKTsKKwkJfQorCiAJCXNzcF93cml0ZV9yZWcoc3NwLCBTU1BTUCwgc3Nwc3ApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAKLQkvKiBXZSBhbHdheXMgdXNlIGEgbmV0d29yayBtb2RlIHNvIHdlIGFsd2F5cyByZXF1aXJlIFRETSBzbG90cworCS8qIFdoZW4gd2UgdXNlIGEgbmV0d29yayBtb2RlLCB3ZSBhbHdheXMgcmVxdWlyZSBURE0gc2xvdHMKIAkgKiAtIGNvbXBsYWluIGxvdWRseSBhbmQgZmFpbCBpZiB0aGV5J3ZlIG5vdCBiZWVuIHNldCB1cCB5ZXQuCiAJICovCi0JaWYgKCEoc3NwX3JlYWRfcmVnKHNzcCwgU1NUU0EpICYgMHhmKSkgeworCWlmICgoc3NjcjAgJiBTU0NSMF9NT0QpICYmICEoc3NwX3JlYWRfcmVnKHNzcCwgU1NUU0EpICYgMHhmKSkgewogCQlkZXZfZXJyKCZzc3AtPnBkZXYtPmRldiwgIk5vIFRETSB0aW1lc2xvdCBjb25maWd1cmVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNzUxLDcgKzc5NCw3IEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXByaXYtPmRldi5zc3AgPSBzc3BfcmVxdWVzdChkYWktPmlkLCAiU29DIGF1ZGlvIik7CisJcHJpdi0+ZGV2LnNzcCA9IHNzcF9yZXF1ZXN0KGRhaS0+aWQgKyAxLCAiU29DIGF1ZGlvIik7CiAJaWYgKHByaXYtPmRldi5zc3AgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycl9wcml2OwpAQCAtNzgyLDYgKzgyNSwxOSBAQAogCQkJICAgIFNORFJWX1BDTV9GTVRCSVRfUzI0X0xFIHwJXAogCQkJICAgIFNORFJWX1BDTV9GTVRCSVRfUzMyX0xFKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBweGFfc3NwX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBweGFfc3NwX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gcHhhX3NzcF9zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHB4YV9zc3BfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gcHhhX3NzcF9od19wYXJhbXMsCisJLnNldF9zeXNjbGsJPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAorCS5zZXRfY2xrZGl2CT0gcHhhX3NzcF9zZXRfZGFpX2Nsa2RpdiwKKwkuc2V0X3BsbAk9IHB4YV9zc3Bfc2V0X2RhaV9wbGwsCisJLnNldF9mbXQJPSBweGFfc3NwX3NldF9kYWlfZm10LAorCS5zZXRfdGRtX3Nsb3QJPSBweGFfc3NwX3NldF9kYWlfdGRtX3Nsb3QsCisJLnNldF90cmlzdGF0ZQk9IHB4YV9zc3Bfc2V0X2RhaV90cmlzdGF0ZSwKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBweGFfc3NwX2RhaVtdID0gewogCXsKIAkJLm5hbWUgPSAicHhhMnh4LXNzcDEiLApAQCAtODAyLDE4ICs4NTgsNyBAQAogCQkJLnJhdGVzID0gUFhBX1NTUF9SQVRFUywKIAkJCS5mb3JtYXRzID0gUFhBX1NTUF9GT1JNQVRTLAogCQkgfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gcHhhX3NzcF9zdGFydHVwLAotCQkJLnNodXRkb3duID0gcHhhX3NzcF9zaHV0ZG93biwKLQkJCS50cmlnZ2VyID0gcHhhX3NzcF90cmlnZ2VyLAotCQkJLmh3X3BhcmFtcyA9IHB4YV9zc3BfaHdfcGFyYW1zLAotCQkJLnNldF9zeXNjbGsgPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAotCQkJLnNldF9jbGtkaXYgPSBweGFfc3NwX3NldF9kYWlfY2xrZGl2LAotCQkJLnNldF9wbGwgPSBweGFfc3NwX3NldF9kYWlfcGxsLAotCQkJLnNldF9mbXQgPSBweGFfc3NwX3NldF9kYWlfZm10LAotCQkJLnNldF90ZG1fc2xvdCA9IHB4YV9zc3Bfc2V0X2RhaV90ZG1fc2xvdCwKLQkJCS5zZXRfdHJpc3RhdGUgPSBweGFfc3NwX3NldF9kYWlfdHJpc3RhdGUsCi0JCX0sCisJCS5vcHMgPSAmcHhhX3NzcF9kYWlfb3BzLAogCX0sCiAJewkubmFtZSA9ICJweGEyeHgtc3NwMiIsCiAJCS5pZCA9IDEsCkBAIC04MzMsMTggKzg3OCw3IEBACiAJCQkucmF0ZXMgPSBQWEFfU1NQX1JBVEVTLAogCQkJLmZvcm1hdHMgPSBQWEFfU1NQX0ZPUk1BVFMsCiAJCSB9LAotCQkub3BzID0gewotCQkJLnN0YXJ0dXAgPSBweGFfc3NwX3N0YXJ0dXAsCi0JCQkuc2h1dGRvd24gPSBweGFfc3NwX3NodXRkb3duLAotCQkJLnRyaWdnZXIgPSBweGFfc3NwX3RyaWdnZXIsCi0JCQkuaHdfcGFyYW1zID0gcHhhX3NzcF9od19wYXJhbXMsCi0JCQkuc2V0X3N5c2NsayA9IHB4YV9zc3Bfc2V0X2RhaV9zeXNjbGssCi0JCQkuc2V0X2Nsa2RpdiA9IHB4YV9zc3Bfc2V0X2RhaV9jbGtkaXYsCi0JCQkuc2V0X3BsbCA9IHB4YV9zc3Bfc2V0X2RhaV9wbGwsCi0JCQkuc2V0X2ZtdCA9IHB4YV9zc3Bfc2V0X2RhaV9mbXQsCi0JCQkuc2V0X3RkbV9zbG90ID0gcHhhX3NzcF9zZXRfZGFpX3RkbV9zbG90LAotCQkJLnNldF90cmlzdGF0ZSA9IHB4YV9zc3Bfc2V0X2RhaV90cmlzdGF0ZSwKLQkJfSwKKwkJLm9wcyA9ICZweGFfc3NwX2RhaV9vcHMsCiAJfSwKIAl7CiAJCS5uYW1lID0gInB4YTJ4eC1zc3AzIiwKQEAgLTg2NSwxOCArODk5LDcgQEAKIAkJCS5yYXRlcyA9IFBYQV9TU1BfUkFURVMsCiAJCQkuZm9ybWF0cyA9IFBYQV9TU1BfRk9STUFUUywKIAkJIH0sCi0JCS5vcHMgPSB7Ci0JCQkuc3RhcnR1cCA9IHB4YV9zc3Bfc3RhcnR1cCwKLQkJCS5zaHV0ZG93biA9IHB4YV9zc3Bfc2h1dGRvd24sCi0JCQkudHJpZ2dlciA9IHB4YV9zc3BfdHJpZ2dlciwKLQkJCS5od19wYXJhbXMgPSBweGFfc3NwX2h3X3BhcmFtcywKLQkJCS5zZXRfc3lzY2xrID0gcHhhX3NzcF9zZXRfZGFpX3N5c2NsaywKLQkJCS5zZXRfY2xrZGl2ID0gcHhhX3NzcF9zZXRfZGFpX2Nsa2RpdiwKLQkJCS5zZXRfcGxsID0gcHhhX3NzcF9zZXRfZGFpX3BsbCwKLQkJCS5zZXRfZm10ID0gcHhhX3NzcF9zZXRfZGFpX2ZtdCwKLQkJCS5zZXRfdGRtX3Nsb3QgPSBweGFfc3NwX3NldF9kYWlfdGRtX3Nsb3QsCi0JCQkuc2V0X3RyaXN0YXRlID0gcHhhX3NzcF9zZXRfZGFpX3RyaXN0YXRlLAotCQl9LAorCQkub3BzID0gJnB4YV9zc3BfZGFpX29wcywKIAl9LAogCXsKIAkJLm5hbWUgPSAicHhhMnh4LXNzcDQiLApAQCAtODk3LDE4ICs5MjAsNyBAQAogCQkJLnJhdGVzID0gUFhBX1NTUF9SQVRFUywKIAkJCS5mb3JtYXRzID0gUFhBX1NTUF9GT1JNQVRTLAogCQkgfSwKLQkJLm9wcyA9IHsKLQkJCS5zdGFydHVwID0gcHhhX3NzcF9zdGFydHVwLAotCQkJLnNodXRkb3duID0gcHhhX3NzcF9zaHV0ZG93biwKLQkJCS50cmlnZ2VyID0gcHhhX3NzcF90cmlnZ2VyLAotCQkJLmh3X3BhcmFtcyA9IHB4YV9zc3BfaHdfcGFyYW1zLAotCQkJLnNldF9zeXNjbGsgPSBweGFfc3NwX3NldF9kYWlfc3lzY2xrLAotCQkJLnNldF9jbGtkaXYgPSBweGFfc3NwX3NldF9kYWlfY2xrZGl2LAotCQkJLnNldF9wbGwgPSBweGFfc3NwX3NldF9kYWlfcGxsLAotCQkJLnNldF9mbXQgPSBweGFfc3NwX3NldF9kYWlfZm10LAotCQkJLnNldF90ZG1fc2xvdCA9IHB4YV9zc3Bfc2V0X2RhaV90ZG1fc2xvdCwKLQkJCS5zZXRfdHJpc3RhdGUgPSBweGFfc3NwX3NldF9kYWlfdHJpc3RhdGUsCi0JCX0sCisJCS5vcHMgPSAmcHhhX3NzcF9kYWlfb3BzLAogCX0sCiB9OwogRVhQT1JUX1NZTUJPTF9HUEwocHhhX3NzcF9kYWkpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jIGIvc291bmQvc29jL3B4YS9weGEyeHgtYWM5Ny5jCmluZGV4IDgxMmMyYjQuLmQ5Yzk0ZDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcHhhMnh4LWFjOTcuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1hYzk3LmMKQEAgLTIwLDggKzIwLDggQEAKICNpbmNsdWRlIDxzb3VuZC9weGEyeHgtbGliLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgogI2luY2x1ZGUgPG1hY2gvcmVncy1hYzk3Lmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAogI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKICNpbmNsdWRlICJweGEyeHgtYWM5Ny5oIgpAQCAtMTA2LDEzICsxMDYsMTMgQEAKIHN0YXRpYyBpbnQgcHhhMnh4X2FjOTdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKIAkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0JcmV0dXJuIHB4YTJ4eF9hYzk3X2h3X3Byb2JlKHBkZXYpOworCXJldHVybiBweGEyeHhfYWM5N19od19wcm9iZSh0b19wbGF0Zm9ybV9kZXZpY2UoZGFpLT5kZXYpKTsKIH0KIAogc3RhdGljIHZvaWQgcHhhMnh4X2FjOTdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkgICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7Ci0JcHhhMnh4X2FjOTdfaHdfcmVtb3ZlKHBkZXYpOworCXB4YTJ4eF9hYzk3X2h3X3JlbW92ZSh0b19wbGF0Zm9ybV9kZXZpY2UoZGFpLT5kZXYpKTsKIH0KIAogc3RhdGljIGludCBweGEyeHhfYWM5N19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCkBAIC0xNjQsNiArMTY0LDE4IEBACiAJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwgU05EUlZfUENNX1JBVEVfMjIwNTAgfCBTTkRSVl9QQ01fUkFURV80NDEwMCB8IFwKIAkJU05EUlZfUENNX1JBVEVfNDgwMDApCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHB4YV9hYzk3X2hpZmlfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gcHhhMnh4X2FjOTdfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgcHhhX2FjOTdfYXV4X2RhaV9vcHMgPSB7CisJLmh3X3BhcmFtcwk9IHB4YTJ4eF9hYzk3X2h3X2F1eF9wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBweGFfYWM5N19taWNfZGFpX29wcyA9IHsKKwkuaHdfcGFyYW1zCT0gcHhhMnh4X2FjOTdfaHdfbWljX3BhcmFtcywKK307CisKIC8qCiAgKiBUaGVyZSBpcyBvbmx5IDEgcGh5c2ljYWwgQUM5NyBpbnRlcmZhY2UgZm9yIHB4YTJ4eCwgYnV0IGl0CiAgKiBoYXMgZXh0cmEgZmlmbydzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGF1eCBEQUNzIGFuZCBBRENzLgpAQCAtMTg5LDggKzIwMSw3IEBACiAJCS5jaGFubmVsc19tYXggPSAyLAogCQkucmF0ZXMgPSBQWEEyWFhfQUM5N19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5od19wYXJhbXMgPSBweGEyeHhfYWM5N19od19wYXJhbXMsfSwKKwkub3BzID0gJnB4YV9hYzk3X2hpZmlfZGFpX29wcywKIH0sCiB7CiAJLm5hbWUgPSAicHhhMnh4LWFjOTctYXV4IiwKQEAgLTIwOCw4ICsyMTksNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMSwKIAkJLnJhdGVzID0gUFhBMlhYX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gcHhhMnh4X2FjOTdfaHdfYXV4X3BhcmFtcyx9LAorCS5vcHMgPSAmcHhhX2FjOTdfYXV4X2RhaV9vcHMsCiB9LAogewogCS5uYW1lID0gInB4YTJ4eC1hYzk3LW1pYyIsCkBAIC0yMjEsMjMgKzIzMSw1MiBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMSwKIAkJLnJhdGVzID0gUFhBMlhYX0FDOTdfUkFURVMsCiAJCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLQkub3BzID0gewotCQkuaHdfcGFyYW1zID0gcHhhMnh4X2FjOTdfaHdfbWljX3BhcmFtcyx9LAorCS5vcHMgPSAmcHhhX2FjOTdfbWljX2RhaV9vcHMsCiB9LAogfTsKIAogRVhQT1JUX1NZTUJPTF9HUEwocHhhX2FjOTdfZGFpKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHNvY19hYzk3X29wcyk7CiAKK3N0YXRpYyBpbnQgX19kZXZpbml0IHB4YTJ4eF9hYzk3X2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKTsgaSsrKQorCQlweGFfYWM5N19kYWlbaV0uZGV2ID0gJnBkZXYtPmRldjsKKworCS8qIFB1bnQgbW9zdCBvZiB0aGUgaW5pdCB0byB0aGUgU29DIHByb2JlOyB3ZSBtYXkgbmVlZCB0aGUgbWFjaGluZQorCSAqIGRyaXZlciB0byBkbyBpbnRlcmVzdGluZyB0aGluZ3Mgd2l0aCB0aGUgY2xvY2tpbmcgdG8gZ2V0IHVzIHVwCisJICogYW5kIHJ1bm5pbmcuCisJICovCisJcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcyhweGFfYWM5N19kYWksIEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHB4YTJ4eF9hYzk3X2Rldl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyhweGFfYWM5N19kYWksIEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcHhhMnh4X2FjOTdfZHJpdmVyID0geworCS5wcm9iZQkJPSBweGEyeHhfYWM5N19kZXZfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChweGEyeHhfYWM5N19kZXZfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicHhhMnh4LWFjOTciLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKwogc3RhdGljIGludCBfX2luaXQgcHhhX2FjOTdfaW5pdCh2b2lkKQogewotCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMocHhhX2FjOTdfZGFpLCBBUlJBWV9TSVpFKHB4YV9hYzk3X2RhaSkpOworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CiB9CiBtb2R1bGVfaW5pdChweGFfYWM5N19pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHB4YV9hYzk3X2V4aXQodm9pZCkKIHsKLQlzbmRfc29jX3VucmVnaXN0ZXJfZGFpcyhweGFfYWM5N19kYWksIEFSUkFZX1NJWkUocHhhX2FjOTdfZGFpKSk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB4YTJ4eF9hYzk3X2RyaXZlcik7CiB9CiBtb2R1bGVfZXhpdChweGFfYWM5N19leGl0KTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEyeHgtaTJzLmMgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYwppbmRleCA1MTc5OTFmLi4yZjRiNmU0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YTJ4eC1pMnMuYwpAQCAtMjQsMjEgKzI0LDEyIEBACiAjaW5jbHVkZSA8c291bmQvcHhhMnh4LWxpYi5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcHhhLXJlZ3MuaD4KLSNpbmNsdWRlIDxtYWNoL3B4YTJ4eC1ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKICNpbmNsdWRlICJweGEyeHgtcGNtLmgiCiAjaW5jbHVkZSAicHhhMnh4LWkycy5oIgogCi1zdHJ1Y3QgcHhhMnh4X2dwaW8gewotCXUzMiBzeXM7Ci0JdTMyCXJ4OwotCXUzMiB0eDsKLQl1MzIgY2xrOwotCXUzMiBmcm07Ci19OwotCiAvKgogICogSTJTIENvbnRyb2xsZXIgUmVnaXN0ZXIgYW5kIEJpdCBEZWZpbml0aW9ucwogICovCkBAIC0xMDYsMjEgKzk3LDYgQEAKIAkJCQkgIERDTURfQlVSU1QzMiB8IERDTURfV0lEVEg0LAogfTsKIAotc3RhdGljIHN0cnVjdCBweGEyeHhfZ3BpbyBncGlvX2J1c1tdID0gewotCXsgLyogSTJTIFNvQyBTbGF2ZSAqLwotCQkucnggPSBHUElPMjlfU0RBVEFfSU5fSTJTX01ELAotCQkudHggPSBHUElPMzBfU0RBVEFfT1VUX0kyU19NRCwKLQkJLmNsayA9IEdQSU8yOF9CSVRDTEtfSU5fSTJTX01ELAotCQkuZnJtID0gR1BJTzMxX1NZTkNfSTJTX01ELAotCX0sCi0JeyAvKiBJMlMgU29DIE1hc3RlciAqLwotCQkucnggPSBHUElPMjlfU0RBVEFfSU5fSTJTX01ELAotCQkudHggPSBHUElPMzBfU0RBVEFfT1VUX0kyU19NRCwKLQkJLmNsayA9IEdQSU8yOF9CSVRDTEtfT1VUX0kyU19NRCwKLQkJLmZybSA9IEdQSU8zMV9TWU5DX0kyU19NRCwKLQl9LAotfTsKLQogc3RhdGljIGludCBweGEyeHhfaTJzX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKQEAgLTE4MSw5ICsxNTcsNiBAQAogCWlmIChjbGtfaWQgIT0gUFhBMlhYX0kyU19TWVNDTEspCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHB4YV9pMnMubWFzdGVyICYmIGRpciA9PSBTTkRfU09DX0NMT0NLX09VVCkKLQkJcHhhX2dwaW9fbW9kZShncGlvX2J1c1tweGFfaTJzLm1hc3Rlcl0uc3lzKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xOTQsMTAgKzE2Nyw2IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwogCi0JcHhhX2dwaW9fbW9kZShncGlvX2J1c1tweGFfaTJzLm1hc3Rlcl0ucngpOwotCXB4YV9ncGlvX21vZGUoZ3Bpb19idXNbcHhhX2kycy5tYXN0ZXJdLnR4KTsKLQlweGFfZ3Bpb19tb2RlKGdwaW9fYnVzW3B4YV9pMnMubWFzdGVyXS5mcm0pOwotCXB4YV9ncGlvX21vZGUoZ3Bpb19idXNbcHhhX2kycy5tYXN0ZXJdLmNsayk7CiAJQlVHX09OKElTX0VSUihjbGtfaTJzKSk7CiAJY2xrX2VuYWJsZShjbGtfaTJzKTsKIAlweGFfaTJzX3dhaXQoKTsKQEAgLTMzNSw2ICszMDQsMTUgQEAKIAkJU05EUlZfUENNX1JBVEVfMTYwMDAgfCBTTkRSVl9QQ01fUkFURV8yMjA1MCB8IFNORFJWX1BDTV9SQVRFXzQ0MTAwIHwgXAogCQlTTkRSVl9QQ01fUkFURV80ODAwMCB8IFNORFJWX1BDTV9SQVRFXzk2MDAwKQogCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX29wcyBweGFfaTJzX2RhaV9vcHMgPSB7CisJLnN0YXJ0dXAJPSBweGEyeHhfaTJzX3N0YXJ0dXAsCisJLnNodXRkb3duCT0gcHhhMnh4X2kyc19zaHV0ZG93biwKKwkudHJpZ2dlcgk9IHB4YTJ4eF9pMnNfdHJpZ2dlciwKKwkuaHdfcGFyYW1zCT0gcHhhMnh4X2kyc19od19wYXJhbXMsCisJLnNldF9mbXQJPSBweGEyeHhfaTJzX3NldF9kYWlfZm10LAorCS5zZXRfc3lzY2xrCT0gcHhhMnh4X2kyc19zZXRfZGFpX3N5c2NsaywKK307CisKIHN0cnVjdCBzbmRfc29jX2RhaSBweGFfaTJzX2RhaSA9IHsKIAkubmFtZSA9ICJweGEyeHgtaTJzIiwKIAkuaWQgPSAwLApAQCAtMzUwLDE0ICszMjgsNyBAQAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKIAkJLnJhdGVzID0gUFhBMlhYX0kyU19SQVRFUywKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5vcHMgPSB7Ci0JCS5zdGFydHVwID0gcHhhMnh4X2kyc19zdGFydHVwLAotCQkuc2h1dGRvd24gPSBweGEyeHhfaTJzX3NodXRkb3duLAotCQkudHJpZ2dlciA9IHB4YTJ4eF9pMnNfdHJpZ2dlciwKLQkJLmh3X3BhcmFtcyA9IHB4YTJ4eF9pMnNfaHdfcGFyYW1zLAotCQkuc2V0X2ZtdCA9IHB4YTJ4eF9pMnNfc2V0X2RhaV9mbXQsCi0JCS5zZXRfc3lzY2xrID0gcHhhMnh4X2kyc19zZXRfZGFpX3N5c2NsaywKLQl9LAorCS5vcHMgPSAmcHhhX2kyc19kYWlfb3BzLAogfTsKIAogRVhQT1JUX1NZTUJPTF9HUEwocHhhX2kyc19kYWkpOwpAQCAtMzk4LDExICszNjksNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBweGEyeHhfaTJzX2luaXQodm9pZCkKIHsKLQlpZiAoY3B1X2lzX3B4YTI3eCgpKQotCQlncGlvX2J1c1sxXS5zeXMgPSBHUElPMTEzX0kyU19TWVNDTEtfTUQ7Ci0JZWxzZQotCQlncGlvX2J1c1sxXS5zeXMgPSBHUElPMzJfU1lTQ0xLX0kyU19NRDsKLQogCWNsa19pMnMgPSBFUlJfUFRSKC1FTk9FTlQpOwogCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnB4YTJ4eF9pMnNfZHJpdmVyKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvc3BpdHouYyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwppbmRleCBhM2I5ZTZiLi5jNGNkMmFjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKKysrIGIvc291bmQvc29jL3B4YS9zcGl0ei5jCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3NwaXR6Lmg+CiAjaW5jbHVkZSAiLi4vY29kZWNzL3dtODc1MC5oIgogI2luY2x1ZGUgInB4YTJ4eC1wY20uaCIKQEAgLTEwOSw3ICsxMDcsNyBAQAogc3RhdGljIGludCBzcGl0el9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPnNvY2Rldi0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNhcmQtPmNvZGVjOwogCiAJLyogY2hlY2sgdGhlIGphY2sgc3RhdHVzIGF0IHN0cmVhbSBzdGFydHVwICovCiAJc3BpdHpfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMjc4LDcgKzI3Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgc3BpdHpfd204NzUwX2luaXQoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCWludCBpLCBlcnI7CisJaW50IGVycjsKIAogCS8qIE5DIGNvZGVjIHBpbnMgKi8KIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiUklOUFVUMSIpOwpAQCAtMjkwLDEyICsyODgsMTAgQEAKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OTzEiKTsKIAogCS8qIEFkZCBzcGl0eiBzcGVjaWZpYyBjb250cm9scyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODc1MF9zcGl0el9jb250cm9scyk7IGkrKykgewotCQllcnIgPSBzbmRfY3RsX2FkZChjb2RlYy0+Y2FyZCwKLQkJCXNuZF9zb2NfY25ldygmd204NzUwX3NwaXR6X2NvbnRyb2xzW2ldLCBjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg3NTBfc3BpdHpfY29udHJvbHMsCisJCQkJQVJSQVlfU0laRSh3bTg3NTBfc3BpdHpfY29udHJvbHMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCS8qIEFkZCBzcGl0eiBzcGVjaWZpYyB3aWRnZXRzICovCiAJc25kX3NvY19kYXBtX25ld19jb250cm9scyhjb2RlYywgd204NzUwX2RhcG1fd2lkZ2V0cywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvdG9zYS5jIGIvc291bmQvc29jL3B4YS90b3NhLmMKaW5kZXggYzc3MTk0Zi4uZGJiZDNlOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS90b3NhLmMKKysrIGIvc291bmQvc29jL3B4YS90b3NhLmMKQEAgLTMwLDggKzMwLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC90b3NhLmg+Ci0jaW5jbHVkZSA8bWFjaC9weGEtcmVncy5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd205NzEyLmgiCkBAIC04Miw3ICs4MCw3IEBACiBzdGF0aWMgaW50IHRvc2Ffc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5zb2NkZXYtPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+c29jZGV2LT5jYXJkLT5jb2RlYzsKIAogCS8qIGNoZWNrIHRoZSBqYWNrIHN0YXR1cyBhdCBzdHJlYW0gc3RhcnR1cCAqLwogCXRvc2FfZXh0X2NvbnRyb2woY29kZWMpOwpAQCAtMTg4LDE4ICsxODYsMTYgQEAKIAogc3RhdGljIGludCB0b3NhX2FjOTdfaW5pdChzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7Ci0JaW50IGksIGVycjsKKwlpbnQgZXJyOwogCiAJc25kX3NvY19kYXBtX25jX3Bpbihjb2RlYywgIk9VVDMiKTsKIAlzbmRfc29jX2RhcG1fbmNfcGluKGNvZGVjLCAiTU9OT09VVCIpOwogCiAJLyogYWRkIHRvc2Egc3BlY2lmaWMgY29udHJvbHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0b3NhX2NvbnRyb2xzKTsgaSsrKSB7Ci0JCWVyciA9IHNuZF9jdGxfYWRkKGNvZGVjLT5jYXJkLAotCQkJCXNuZF9zb2NfY25ldygmdG9zYV9jb250cm9sc1tpXSxjb2RlYywgTlVMTCkpOwotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0JfQorCWVyciA9IHNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB0b3NhX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUodG9zYV9jb250cm9scykpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJLyogYWRkIHRvc2Egc3BlY2lmaWMgd2lkZ2V0cyAqLwogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHRvc2FfZGFwbV93aWRnZXRzLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS96eWxvbml0ZS5jIGIvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCmluZGV4IGY4ZTllY2QuLjlhMzg2YjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYworKysgYi9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTI2LDYgKzI3LDE3IEBACiAjaW5jbHVkZSAicHhhMnh4LWFjOTcuaCIKICNpbmNsdWRlICJweGEtc3NwLmgiCiAKKy8qCisgKiBUaGVyZSBpcyBhIHBoeXNpY2FsIHN3aXRjaCBTVzE1IG9uIHRoZSBib2FyZCB3aGljaCBjaGFuZ2VzIHRoZSBNQ0xLCisgKiBmb3IgdGhlIFdNOTcxMyBiZXR3ZWVuIHRoZSBzdGFuZGFyZCBBQzk3IG1hc3RlciBjbG9jayBhbmQgdGhlCisgKiBvdXRwdXQgb2YgdGhlIENMS19QT1VUIHNpZ25hbCBmcm9tIHRoZSBQWEEuCisgKi8KK3N0YXRpYyBpbnQgY2xrX3BvdXQ7Cittb2R1bGVfcGFyYW0oY2xrX3BvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGNsa19wb3V0LCAiVXNlIENMS19QT1VUIGFzIFdNOTcxMyBNQ0xLIChTVzE1IG9uIGJvYXJkKS4iKTsKKworc3RhdGljIHN0cnVjdCBjbGsgKnBvdXQ7CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHp5bG9uaXRlOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgenlsb25pdGVfZGFwbV93aWRnZXRzW10gPSB7CkBAIC02MSwxMCArNzMsOCBAQAogCiBzdGF0aWMgaW50IHp5bG9uaXRlX3dtOTcxM19pbml0KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKLQkvKiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IHVzZSBvZiB0aGUgQUM5NyBjbG9jayBoZXJlLiAgSWYKLQkgKiBDTEtfUE9VVCBpcyBzZWxlY3RlZCBieSBTVzE1IHRoZW4gdGhlIGNsb2NrIEFQSSB3aWxsIG5lZWQKLQkgKiB0byBiZSB1c2VkIHRvIHJlcXVlc3QgYW5kIGVuYWJsZSBpdCBoZXJlLgotCSAqLworCWlmIChjbGtfcG91dCkKKwkJc25kX3NvY19kYWlfc2V0X3BsbCgmY29kZWMtPmRhaVswXSwgMCwgY2xrX2dldF9yYXRlKHBvdXQpLCAwKTsKIAogCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoY29kZWMsIHp5bG9uaXRlX2RhcG1fd2lkZ2V0cywKIAkJCQkgIEFSUkFZX1NJWkUoenlsb25pdGVfZGFwbV93aWRnZXRzKSk7CkBAIC04NiwyNyArOTYsNTEgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+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+ZGV2KTsKIAotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfY2FyZChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KQpAQCAtNDQxLDEwICs0NjMsMTAgQEAKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAJCi0JY2FyZCA9IGNyZWF0ZV9jYXJkKGRldmljZSk7CisJcmV0ID0gY3JlYXRlX2NhcmQoZGV2aWNlLCAmY2FyZCk7CiAJCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAkJCQogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FyZCk7CiAJcmV0ID0gaW5pdF9jYXJkKGNhaWFxZGV2KGNhcmQpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuaCBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1kZXZpY2UuaAppbmRleCBhYjU2ZTczLi40Y2NlMWFkIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtZGV2aWNlLmgKKysrIGIvc291bmQvdXNiL2NhaWFxL2NhaWFxLWRldmljZS5oCkBAIC0xMCw4ICsxMCwxMCBAQAogI2RlZmluZSBVU0JfUElEX0tPUkVDT05UUk9MTEVSCTB4NDcxMQogI2RlZmluZSBVU0JfUElEX0tPUkVDT05UUk9MTEVSMgkweDQ3MTIKICNkZWZpbmUgVVNCX1BJRF9BSzEJCTB4MDgxNQorI2RlZmluZSBVU0JfUElEX0FVRElPNERKCTB4MDgzOQogI2RlZmluZSBVU0JfUElEX0FVRElPOERKCTB4MTk3OAogI2RlZmluZSBVU0JfUElEX1NFU1NJT05JTwkweDE5MTUKKyNkZWZpbmUgVVNCX1BJRF9HVUlUQVJSSUdNT0JJTEUJMHgwZDhkCiAKICNkZWZpbmUgRVAxX0JVRlNJWkUgNjQKICNkZWZpbmUgQ0FJQVFfVVNCX1NUUl9MRU4gMHhmZgpAQCAtODcsOSArODksOSBAQAogCWludCBhdWRpb19vdXRfYnVmX3Bvc1tNQVhfU1RSRUFNU107CiAJaW50IHBlcmlvZF9pbl9jb3VudFtNQVhfU1RSRUFNU107CiAJaW50IHBlcmlvZF9vdXRfY291bnRbTUFYX1NUUkVBTVNdOwotCWludCBpbnB1dF9wYW5pYywgb3V0cHV0X3BhbmljOworCWludCBpbnB1dF9wYW5pYywgb3V0cHV0X3BhbmljLCB3YXJuZWQ7CiAJY2hhciAqYXVkaW9faW5fYnVmLCAqYXVkaW9fb3V0X2J1ZjsKLQl1bnNpZ25lZCBpbnQgc2FtcGxlcmF0ZXM7CisJdW5zaWduZWQgaW50IHNhbXBsZXJhdGVzLCBicHA7CiAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1Yl9wbGF5YmFja1tNQVhfU1RSRUFNU107CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJfY2FwdHVyZVtNQVhfU1RSRUFNU107CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uYyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCmluZGV4IDE5ZTM3NDUuLmMyZGIwZjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5jCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCkBAIC0xMDcsNyArMTA3LDcgQEAKICNkZWZpbmUgTUFYX1BBQ0tTX0hTCShNQVhfUEFDS1MgKiA4KQkvKiBpbiBoaWdoIHNwZWVkIG1vZGUgKi8KICNkZWZpbmUgTUFYX1VSQlMJOAogI2RlZmluZSBTWU5DX1VSQlMJNAkvKiBhbHdheXMgZm91ciB1cmJzIGZvciBzeW5jICovCi0jZGVmaW5lIE1JTl9QQUNLU19VUkIJMQkvKiBtaW5pbXVtIDEgcGFja2V0IHBlciB1cmIgKi8KKyNkZWZpbmUgTUFYX1FVRVVFCTI0CS8qIHRyeSBub3QgdG8gZXhjZWVkIHRoaXMgcXVldWUgbGVuZ3RoLCBpbiBtcyAqLwogCiBzdHJ1Y3QgYXVkaW9mb3JtYXQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKQEAgLTUyNSw3ICs1MjUsNyBAQAogLyoKICAqIFByZXBhcmUgdXJiIGZvciBzdHJlYW1pbmcgYmVmb3JlIHBsYXliYWNrIHN0YXJ0cyBvciB3aGVuIHBhdXNlZC4KICAqCi0gKiBXZSBkb24ndCBoYXZlIGFueSBkYXRhLCBzbyB3ZSBzZW5kIGEgZnJhbWUgb2Ygc2lsZW5jZS4KKyAqIFdlIGRvbid0IGhhdmUgYW55IGRhdGEsIHNvIHdlIHNlbmQgc2lsZW5jZS4KICAqLwogc3RhdGljIGludCBwcmVwYXJlX25vZGF0YV9wbGF5YmFja191cmIoc3RydWN0IHNuZF91c2Jfc3Vic3RyZWFtICpzdWJzLAogCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLApAQCAtNTM3LDEzICs1MzcsMTMgQEAKIAogCW9mZnMgPSAwOwogCXVyYi0+ZGV2ID0gY3R4LT5zdWJzLT5kZXY7Ci0JdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IHN1YnMtPnBhY2tzX3Blcl9tczsKLQlmb3IgKGkgPSAwOyBpIDwgc3Vicy0+cGFja3NfcGVyX21zOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgY3R4LT5wYWNrZXRzOyArK2kpIHsKIAkJY291bnRzID0gc25kX3VzYl9hdWRpb19uZXh0X3BhY2tldF9zaXplKHN1YnMpOwogCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCA9IG9mZnMgKiBzdHJpZGU7CiAJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoID0gY291bnRzICogc3RyaWRlOwogCQlvZmZzICs9IGNvdW50czsKIAl9CisJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IGN0eC0+cGFja2V0czsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBvZmZzICogc3RyaWRlOwogCW1lbXNldCh1cmItPnRyYW5zZmVyX2J1ZmZlciwKIAkgICAgICAgc3Vicy0+Y3VyX2F1ZGlvZm10LT5mb3JtYXQgPT0gU05EUlZfUENNX0ZPUk1BVF9VOCA/IDB4ODAgOiAwLApAQCAtMTAzNCw5ICsxMDM0LDkgQEAKIHN0YXRpYyBpbnQgaW5pdF9zdWJzdHJlYW1fdXJicyhzdHJ1Y3Qgc25kX3VzYl9zdWJzdHJlYW0gKnN1YnMsIHVuc2lnbmVkIGludCBwZXJpb2RfYnl0ZXMsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IHJhdGUsIHVuc2lnbmVkIGludCBmcmFtZV9iaXRzKQogewotCXVuc2lnbmVkIGludCBtYXhzaXplLCBuLCBpOworCXVuc2lnbmVkIGludCBtYXhzaXplLCBpOwogCWludCBpc19wbGF5YmFjayA9IHN1YnMtPmRpcmVjdGlvbiA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOwotCXVuc2lnbmVkIGludCBucGFja3NbTUFYX1VSQlNdLCB1cmJfcGFja3MsIHRvdGFsX3BhY2tzLCBwYWNrc19wZXJfbXM7CisJdW5zaWduZWQgaW50IHVyYl9wYWNrcywgdG90YWxfcGFja3MsIHBhY2tzX3Blcl9tczsKIAogCS8qIGNhbGN1bGF0ZSB0aGUgZnJlcXVlbmN5IGluIDE2LjE2IGZvcm1hdCAqLwogCWlmIChzbmRfdXNiX2dldF9zcGVlZChzdWJzLT5kZXYpID09IFVTQl9TUEVFRF9GVUxMKQpAQCAtMTA3MCw4ICsxMDcwLDcgQEAKIAlzdWJzLT5wYWNrc19wZXJfbXMgPSBwYWNrc19wZXJfbXM7CiAKIAlpZiAoaXNfcGxheWJhY2spIHsKLQkJdXJiX3BhY2tzID0gbnJwYWNrczsKLQkJdXJiX3BhY2tzID0gbWF4KHVyYl9wYWNrcywgKHVuc2lnbmVkIGludClNSU5fUEFDS1NfVVJCKTsKKwkJdXJiX3BhY2tzID0gbWF4KG5ycGFja3MsIDEpOwogCQl1cmJfcGFja3MgPSBtaW4odXJiX3BhY2tzLCAodW5zaWduZWQgaW50KU1BWF9QQUNLUyk7CiAJfSBlbHNlCiAJCXVyYl9wYWNrcyA9IDE7CkBAIC0xMDc5LDcgKzEwNzgsNyBAQAogCiAJLyogZGVjaWRlIGhvdyBtYW55IHBhY2tldHMgdG8gYmUgdXNlZCAqLwogCWlmIChpc19wbGF5YmFjaykgewotCQl1bnNpZ25lZCBpbnQgbWluc2l6ZTsKKwkJdW5zaWduZWQgaW50IG1pbnNpemUsIG1heHBhY2tzOwogCQkvKiBkZXRlcm1pbmUgaG93IHNtYWxsIGEgcGFja2V0IGNhbiBiZSAqLwogCQltaW5zaXplID0gKHN1YnMtPmZyZXFuID4+ICgxNiAtIHN1YnMtPmRhdGFpbnRlcnZhbCkpCiAJCQkgICogKGZyYW1lX2JpdHMgPj4gMyk7CkBAIC0xMDkyLDggKzEwOTEsMTMgQEAKIAkJdG90YWxfcGFja3MgPSAodG90YWxfcGFja3MgKyBwYWNrc19wZXJfbXMgLSAxKQogCQkJCSYgfihwYWNrc19wZXJfbXMgLSAxKTsKIAkJLyogd2UgbmVlZCBhdCBsZWFzdCB0d28gVVJCcyBmb3IgcXVldWVpbmcgKi8KLQkJaWYgKHRvdGFsX3BhY2tzIDwgMiAqIE1JTl9QQUNLU19VUkIgKiBwYWNrc19wZXJfbXMpCi0JCQl0b3RhbF9wYWNrcyA9IDIgKiBNSU5fUEFDS1NfVVJCICogcGFja3NfcGVyX21zOworCQlpZiAodG90YWxfcGFja3MgPCAyICogcGFja3NfcGVyX21zKSB7CisJCQl0b3RhbF9wYWNrcyA9IDIgKiBwYWNrc19wZXJfbXM7CisJCX0gZWxzZSB7CisJCQkvKiBhbmQgd2UgZG9uJ3Qgd2FudCB0b28gbG9uZyBhIHF1ZXVlIGVpdGhlciAqLworCQkJbWF4cGFja3MgPSBtYXgoTUFYX1FVRVVFICogcGFja3NfcGVyX21zLCB1cmJfcGFja3MgKiAyKTsKKwkJCXRvdGFsX3BhY2tzID0gbWluKHRvdGFsX3BhY2tzLCBtYXhwYWNrcyk7CisJCX0KIAl9IGVsc2UgewogCQl0b3RhbF9wYWNrcyA9IE1BWF9VUkJTICogdXJiX3BhY2tzOwogCX0KQEAgLTExMDIsMzEgKzExMDYsMTEgQEAKIAkJLyogdG9vIG11Y2guLi4gKi8KIAkJc3Vicy0+bnVyYnMgPSBNQVhfVVJCUzsKIAkJdG90YWxfcGFja3MgPSBNQVhfVVJCUyAqIHVyYl9wYWNrczsKLQl9Ci0JbiA9IHRvdGFsX3BhY2tzOwotCWZvciAoaSA9IDA7IGkgPCBzdWJzLT5udXJiczsgaSsrKSB7Ci0JCW5wYWNrc1tpXSA9IG4gPiB1cmJfcGFja3MgPyB1cmJfcGFja3MgOiBuOwotCQluIC09IHVyYl9wYWNrczsKLQl9Ci0JaWYgKHN1YnMtPm51cmJzIDw9IDEpIHsKKwl9IGVsc2UgaWYgKHN1YnMtPm51cmJzIDwgMikgewogCQkvKiB0b28gbGl0dGxlIC0gd2UgbmVlZCBhdCBsZWFzdCB0d28gcGFja2V0cwogCQkgKiB0byBlbnN1cmUgY29udGlndW91cyBwbGF5YmFjay9jYXB0dXJlCiAJCSAqLwogCQlzdWJzLT5udXJicyA9IDI7Ci0JCW5wYWNrc1swXSA9ICh0b3RhbF9wYWNrcyArIDEpIC8gMjsKLQkJbnBhY2tzWzFdID0gdG90YWxfcGFja3MgLSBucGFja3NbMF07Ci0JfSBlbHNlIGlmIChucGFja3Nbc3Vicy0+bnVyYnMtMV0gPCBNSU5fUEFDS1NfVVJCICogcGFja3NfcGVyX21zKSB7Ci0JCS8qIHRoZSBsYXN0IHBhY2tldCBpcyB0b28gc21hbGwuLiAqLwotCQlpZiAoc3Vicy0+bnVyYnMgPiAyKSB7Ci0JCQkvKiBtZXJnZSB0byB0aGUgZmlyc3Qgb25lICovCi0JCQlucGFja3NbMF0gKz0gbnBhY2tzW3N1YnMtPm51cmJzIC0gMV07Ci0JCQlzdWJzLT5udXJicy0tOwotCQl9IGVsc2UgewotCQkJLyogZGl2aWRlIHRvIHR3byAqLwotCQkJc3Vicy0+bnVyYnMgPSAyOwotCQkJbnBhY2tzWzBdID0gKHRvdGFsX3BhY2tzICsgMSkgLyAyOwotCQkJbnBhY2tzWzFdID0gdG90YWxfcGFja3MgLSBucGFja3NbMF07Ci0JCX0KIAl9CiAKIAkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBkYXRhIHVyYnMgKi8KQEAgLTExMzQsNyArMTExOCw4IEBACiAJCXN0cnVjdCBzbmRfdXJiX2N0eCAqdSA9ICZzdWJzLT5kYXRhdXJiW2ldOwogCQl1LT5pbmRleCA9IGk7CiAJCXUtPnN1YnMgPSBzdWJzOwotCQl1LT5wYWNrZXRzID0gbnBhY2tzW2ldOworCQl1LT5wYWNrZXRzID0gKGkgKyAxKSAqIHRvdGFsX3BhY2tzIC8gc3Vicy0+bnVyYnMKKwkJCS0gaSAqIHRvdGFsX3BhY2tzIC8gc3Vicy0+bnVyYnM7CiAJCXUtPmJ1ZmZlcl9zaXplID0gbWF4c2l6ZSAqIHUtPnBhY2tldHM7CiAJCWlmIChzdWJzLT5mbXRfdHlwZSA9PSBVU0JfRk9STUFUX1RZUEVfSUkpCiAJCQl1LT5wYWNrZXRzKys7IC8qIGZvciB0cmFuc2ZlciBkZWxpbWl0ZXIgKi8KQEAgLTEyOTIsMTQgKzEyNzcsMTQgQEAKIAkJaWYgKChlcnIgPSBzbmRfdXNiX2N0bF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgU0VUX0NVUiwKIAkJCQkJICAgVVNCX1RZUEVfQ0xBU1N8VVNCX1JFQ0lQX0VORFBPSU5UfFVTQl9ESVJfT1VULAogCQkJCQkgICBTQU1QTElOR19GUkVRX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiVkOiVkOiBjYW5ub3Qgc2V0IGZyZXEgJWQgdG8gZXAgMHgleFxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9FUlIgIiVkOiVkOiVkOiBjYW5ub3Qgc2V0IGZyZXEgJWQgdG8gZXAgJSN4XG4iLAogCQkJCSAgIGRldi0+ZGV2bnVtLCBpZmFjZSwgZm10LT5hbHRzZXR0aW5nLCByYXRlLCBlcCk7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJCWlmICgoZXJyID0gc25kX3VzYl9jdGxfbXNnKGRldiwgdXNiX3JjdmN0cmxwaXBlKGRldiwgMCksIEdFVF9DVVIsCiAJCQkJCSAgIFVTQl9UWVBFX0NMQVNTfFVTQl9SRUNJUF9FTkRQT0lOVHxVU0JfRElSX0lOLAogCQkJCQkgICBTQU1QTElOR19GUkVRX0NPTlRST0wgPDwgOCwgZXAsIGRhdGEsIDMsIDEwMDApKSA8IDApIHsKLQkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICIlZDolZDolZDogY2Fubm90IGdldCBmcmVxIGF0IGVwIDB4JXhcbiIsCisJCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiJWQ6JWQ6JWQ6IGNhbm5vdCBnZXQgZnJlcSBhdCBlcCAlI3hcbiIsCiAJCQkJICAgZGV2LT5kZXZudW0sIGlmYWNlLCBmbXQtPmFsdHNldHRpbmcsIGVwKTsKIAkJCXJldHVybiAwOyAvKiBzb21lIGRldmljZXMgZG9uJ3Qgc3VwcG9ydCByZWFkaW5nICovCiAJCX0KQEAgLTE0MzEsOSArMTQxNiwxMSBAQAogCXN1YnMtPmN1cl9hdWRpb2ZtdCA9IGZtdDsKIAogI2lmIDAKLQlwcmludGsoInNldHRpbmcgZG9uZTogZm9ybWF0ID0gJWQsIHJhdGUgPSAlZC4uJWQsIGNoYW5uZWxzID0gJWRcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcKKwkgICAgICAgInNldHRpbmcgZG9uZTogZm9ybWF0ID0gJWQsIHJhdGUgPSAlZC4uJWQsIGNoYW5uZWxzID0gJWRcbiIsCiAJICAgICAgIGZtdC0+Zm9ybWF0LCBmbXQtPnJhdGVfbWluLCBmbXQtPnJhdGVfbWF4LCBmbXQtPmNoYW5uZWxzKTsKLQlwcmludGsoIiAgZGF0YXBpcGUgPSAweCUweCwgc3luY3BpcGUgPSAweCUweFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRworCSAgICAgICAiICBkYXRhcGlwZSA9IDB4JTB4LCBzeW5jcGlwZSA9IDB4JTB4XG4iLAogCSAgICAgICBzdWJzLT5kYXRhcGlwZSwgc3Vicy0+c3luY3BpcGUpOwogI2VuZGlmCiAKQEAgLTE0NjgsNyArMTQ1NSw3IEBACiAJY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMoaHdfcGFyYW1zKTsKIAlmbXQgPSBmaW5kX2Zvcm1hdChzdWJzLCBmb3JtYXQsIHJhdGUsIGNoYW5uZWxzKTsKIAlpZiAoIWZtdCkgewotCQlzbmRfcHJpbnRkKEtFUk5fREVCVUcgImNhbm5vdCBzZXQgZm9ybWF0OiBmb3JtYXQgPSAweCV4LCByYXRlID0gJWQsIGNoYW5uZWxzID0gJWRcbiIsCisJCXNuZF9wcmludGQoS0VSTl9ERUJVRyAiY2Fubm90IHNldCBmb3JtYXQ6IGZvcm1hdCA9ICUjeCwgcmF0ZSA9ICVkLCBjaGFubmVscyA9ICVkXG4iLAogCQkJICAgZm9ybWF0LCByYXRlLCBjaGFubmVscyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE3OTUsNyArMTc4Miw3IEBACiAJCQlpZiAocmF0ZXNbZi0+Zm9ybWF0XSAmJiByYXRlc1tmLT5mb3JtYXRdICE9IGYtPnJhdGVzKQogCQkJCWdvdG8gX19vdXQ7CiAJCX0KLQkJY2hhbm5lbHNbZi0+Zm9ybWF0XSB8PSAoMSA8PCBmLT5jaGFubmVscyk7CisJCWNoYW5uZWxzW2YtPmZvcm1hdF0gfD0gMSA8PCAoZi0+Y2hhbm5lbHMgLSAxKTsKIAkJcmF0ZXNbZi0+Zm9ybWF0XSB8PSBmLT5yYXRlczsKIAkJLyogbmVlZHMga25vdD8gKi8KIAkJaWYgKGYtPnJhdGVzICYgU05EUlZfUENNX1JBVEVfS05PVCkKQEAgLTE4MjIsNyArMTgwOSw3IEBACiAJCQljb250aW51ZTsKIAkJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKIAkJCWlmIChmLT5yYXRlcyAmICgxIDw8IGkpKQotCQkJCWNoYW5uZWxzW2ldIHw9ICgxIDw8IGYtPmNoYW5uZWxzKTsKKwkJCQljaGFubmVsc1tpXSB8PSAxIDw8IChmLT5jaGFubmVscyAtIDEpOwogCQl9CiAJfQogCWNtYXN0ZXIgPSAwOwpAQCAtMTkxOSw3ICsxOTA2LDcgQEAKIAkgKiBpbiB0aGUgY3VycmVudCBjb2RlIGFzc3VtZSB0aGUgMW1zIHBlcmlvZC4KIAkgKi8KIAlzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbWlubWF4KHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfVElNRSwKLQkJCQkgICAgIDEwMDAgKiBNSU5fUEFDS1NfVVJCLAorCQkJCSAgICAgMTAwMCwKIAkJCQkgICAgIC8qKG5ycGFja3MgKiBNQVhfVVJCUykgKiAxMDAwKi8gVUlOVF9NQVgpOwogCiAJZXJyID0gY2hlY2tfaHdfcGFyYW1zX2NvbnZlbnRpb24oc3Vicyk7CkBAIC0yMTYwLDcgKzIxNDcsNyBAQAogCQlmcCA9IGxpc3RfZW50cnkocCwgc3RydWN0IGF1ZGlvZm9ybWF0LCBsaXN0KTsKIAkJc25kX2lwcmludGYoYnVmZmVyLCAiICBJbnRlcmZhY2UgJWRcbiIsIGZwLT5pZmFjZSk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBBbHRzZXQgJWRcbiIsIGZwLT5hbHRzZXR0aW5nKTsKLQkJc25kX2lwcmludGYoYnVmZmVyLCAiICAgIEZvcm1hdDogMHgleFxuIiwgZnAtPmZvcm1hdCk7CisJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBGb3JtYXQ6ICUjeFxuIiwgZnAtPmZvcm1hdCk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBDaGFubmVsczogJWRcbiIsIGZwLT5jaGFubmVscyk7CiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBFbmRwb2ludDogJWQgJXMgKCVzKVxuIiwKIAkJCSAgICBmcC0+ZW5kcG9pbnQgJiBVU0JfRU5EUE9JTlRfTlVNQkVSX01BU0ssCkBAIC0yMTgwLDcgKzIxNjcsNyBAQAogCQkJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIAkJfQogCQkvLyBzbmRfaXByaW50ZihidWZmZXIsICIgICAgTWF4IFBhY2tldCBTaXplID0gJWRcbiIsIGZwLT5tYXhwYWNrc2l6ZSk7Ci0JCS8vIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBFUCBBdHRyaWJ1dGUgPSAweCV4XG4iLCBmcC0+YXR0cmlidXRlcyk7CisJCS8vIHNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAgICBFUCBBdHRyaWJ1dGUgPSAlI3hcbiIsIGZwLT5hdHRyaWJ1dGVzKTsKIAl9CiB9CiAKQEAgLTI2MjEsNyArMjYwOCw3IEBACiAJCWZwLT5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX01QRUc7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNuZF9wcmludGQoS0VSTl9JTkZPICIlZDoldTolZCA6IHVua25vd24gZm9ybWF0IHRhZyAweCV4IGlzIGRldGVjdGVkLiAgcHJvY2Vzc2VkIGFzIE1QRUcuXG4iLAorCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQgOiB1bmtub3duIGZvcm1hdCB0YWcgJSN4IGlzIGRldGVjdGVkLiAgcHJvY2Vzc2VkIGFzIE1QRUcuXG4iLAogCQkJICAgY2hpcC0+ZGV2LT5kZXZudW0sIGZwLT5pZmFjZSwgZnAtPmFsdHNldHRpbmcsIGZvcm1hdCk7CiAJCWZwLT5mb3JtYXQgPSBTTkRSVl9QQ01fRk9STUFUX01QRUc7CiAJCWJyZWFrOwpAQCAtMjgxOSw3ICsyODA2LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJc25kX3ByaW50ZGQoS0VSTl9JTkZPICIlZDoldTolZDogYWRkIGF1ZGlvIGVuZHBvaW50IDB4JXhcbiIsIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8sIGZwLT5lbmRwb2ludCk7CisJCXNuZF9wcmludGRkKEtFUk5fSU5GTyAiJWQ6JXU6JWQ6IGFkZCBhdWRpbyBlbmRwb2ludCAlI3hcbiIsIGRldi0+ZGV2bnVtLCBpZmFjZV9ubywgYWx0bm8sIGZwLT5lbmRwb2ludCk7CiAJCWVyciA9IGFkZF9hdWRpb19lbmRwb2ludChjaGlwLCBzdHJlYW0sIGZwKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCWtmcmVlKGZwLT5yYXRlX3RhYmxlKTsKQEAgLTM0NjYsMTAgKzM0NTMsMTAgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKLQljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLCAwKTsKLQlpZiAoY2FyZCA9PSBOVUxMKSB7CisJZXJyID0gc25kX2NhcmRfY3JlYXRlKGluZGV4W2lkeF0sIGlkW2lkeF0sIFRISVNfTU9EVUxFLCAwLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IGNyZWF0ZSBjYXJkIGluc3RhbmNlICVkXG4iLCBpZHgpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKQEAgLTM3NjYsNyArMzc1Myw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNuZF91c2JfYXVkaW9faW5pdCh2b2lkKQogewotCWlmIChucnBhY2tzIDwgTUlOX1BBQ0tTX1VSQiB8fCBucnBhY2tzID4gTUFYX1BBQ0tTKSB7CisJaWYgKG5ycGFja3MgPCAxIHx8IG5ycGFja3MgPiBNQVhfUEFDS1MpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaW52YWxpZCBucnBhY2tzIHZhbHVlLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JtaXhlci5jIGIvc291bmQvdXNiL3VzYm1peGVyLmMKaW5kZXggMDAzOTdjOC4uZWNiNThlNyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyLmMKKysrIGIvc291bmQvdXNiL3VzYm1peGVyLmMKQEAgLTY2LDYgKzY2LDcgQEAKIAl7IFVTQl9JRCgweDA0MWUsIDB4MzAwMCksIDAsIDEsIDIsIDEsICAxOCwgMHgwMDEzIH0sIC8qIEV4dGlneSAgICAgICAqLwogCXsgVVNCX0lEKDB4MDQxZSwgMHgzMDIwKSwgMiwgMSwgNiwgNiwgIDE4LCAweDAwMTMgfSwgLyogQXVkaWd5IDIgTlggICovCiAJeyBVU0JfSUQoMHgwNDFlLCAweDMwNDApLCAyLCAyLCA2LCA2LCAgMiwgIDB4NmU5MSB9LCAvKiBMaXZlISAyNC1iaXQgKi8KKwl7IFVTQl9JRCgweDA0MWUsIDB4MzA0OCksIDIsIDIsIDYsIDYsICAyLCAgMHg2ZTkxIH0sIC8qIFRvc2hpYmEgU0IwNTAwICovCiB9OwogCiBzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSB7CkBAIC03OCw3ICs3OSw2IEBACiAKIAkvKiBTb3VuZCBCbGFzdGVyIHJlbW90ZSBjb250cm9sIHN0dWZmICovCiAJY29uc3Qgc3RydWN0IHJjX2NvbmZpZyAqcmNfY2ZnOwotCXVuc2lnbmVkIGxvbmcgcmNfaHdkZXBfb3BlbjsKIAl1MzIgcmNfY29kZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCByY193YWl0cTsKIAlzdHJ1Y3QgdXJiICpyY191cmI7CkBAIC0xMTAsNiArMTEwLDggQEAKIAljb25zdCBzdHJ1Y3QgdXNibWl4X3NlbGVjdG9yX21hcCAqc2VsZWN0b3JfbWFwOwogfTsKIAorI2RlZmluZSBNQVhfQ0hBTk5FTFMJMTAJLyogbWF4IGxvZ2ljYWwgY2hhbm5lbHMgKi8KKwogc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gewogCXN0cnVjdCB1c2JfbWl4ZXJfaW50ZXJmYWNlICptaXhlcjsKIAlzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqbmV4dF9pZF9lbGVtOyAvKiBsaXN0IG9mIGNvbnRyb2xzIHdpdGggc2FtZSBpZCAqLwpAQCAtMTIwLDYgKzEyMiw4IEBACiAJaW50IGNoYW5uZWxzOwogCWludCB2YWxfdHlwZTsKIAlpbnQgbWluLCBtYXgsIHJlczsKKwlpbnQgY2FjaGVkOworCWludCBjYWNoZV92YWxbTUFYX0NIQU5ORUxTXTsKIAl1OCBpbml0aWFsaXplZDsKIH07CiAKQEAgLTE4MSw4ICsxODUsNiBAQAogCVVTQl9QUk9DX0RDUl9SRUxFQVNFID0gNiwKIH07CiAKLSNkZWZpbmUgTUFYX0NIQU5ORUxTCTEwCS8qIG1heCBsb2dpY2FsIGNoYW5uZWxzICovCi0KIAogLyoKICAqIG1hbnVhbCBtYXBwaW5nIG9mIG1peGVyIG5hbWVzCkBAIC0yMTksNyArMjIxLDEwIEBACiAJZm9yIChwID0gc3RhdGUtPm1hcDsgcC0+aWQ7IHArKykgewogCQlpZiAocC0+aWQgPT0gdW5pdGlkICYmICEgcC0+bmFtZSAmJgogCQkgICAgKCEgY29udHJvbCB8fCAhIHAtPmNvbnRyb2wgfHwgY29udHJvbCA9PSBwLT5jb250cm9sKSkgewotCQkJLy8gcHJpbnRrKCJpZ25vcmVkIGNvbnRyb2wgJWQ6JWRcbiIsIHVuaXRpZCwgY29udHJvbCk7CisJCQkvKgorCQkJcHJpbnRrKEtFUk5fREVCVUcgImlnbm9yZWQgY29udHJvbCAlZDolZFxuIiwKKwkJCSAgICAgICB1bml0aWQsIGNvbnRyb2wpOworCQkJKi8KIAkJCXJldHVybiAxOwogCQl9CiAJfQpAQCAtMzc2LDExICszODEsMzUgQEAKIH0KIAogLyogY2hhbm5lbCA9IDA6IG1hc3RlciwgMSA9IGZpcnN0IGNoYW5uZWwgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdldF9jdXJfbWl4X3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLCBpbnQgY2hhbm5lbCwgaW50ICp2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9jdXJfbWl4X3JhdyhzdHJ1Y3QgdXNiX21peGVyX2VsZW1faW5mbyAqY3ZhbCwKKwkJCQkgIGludCBjaGFubmVsLCBpbnQgKnZhbHVlKQogewogCXJldHVybiBnZXRfY3RsX3ZhbHVlKGN2YWwsIEdFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwgdmFsdWUpOwogfQogCitzdGF0aWMgaW50IGdldF9jdXJfbWl4X3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLAorCQkJICAgICBpbnQgY2hhbm5lbCwgaW50IGluZGV4LCBpbnQgKnZhbHVlKQoreworCWludCBlcnI7CisKKwlpZiAoY3ZhbC0+Y2FjaGVkICYgKDEgPDwgY2hhbm5lbCkpIHsKKwkJKnZhbHVlID0gY3ZhbC0+Y2FjaGVfdmFsW2luZGV4XTsKKwkJcmV0dXJuIDA7CisJfQorCWVyciA9IGdldF9jdXJfbWl4X3JhdyhjdmFsLCBjaGFubmVsLCB2YWx1ZSk7CisJaWYgKGVyciA8IDApIHsKKwkJaWYgKCFjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvcikKKwkJCXNuZF9wcmludGQoS0VSTl9FUlIgImNhbm5vdCBnZXQgY3VycmVudCB2YWx1ZSBmb3IgIgorCQkJCSAgICJjb250cm9sICVkIGNoICVkOiBlcnIgPSAlZFxuIiwKKwkJCQkgICBjdmFsLT5jb250cm9sLCBjaGFubmVsLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKwljdmFsLT5jYWNoZWQgfD0gMSA8PCBjaGFubmVsOworCWN2YWwtPmNhY2hlX3ZhbFtpbmRleF0gPSAqdmFsdWU7CisJcmV0dXJuIDA7Cit9CisKKwogLyoKICAqIHNldCBhIG1peGVyIHZhbHVlCiAgKi8KQEAgLTQxMiw5ICs0NDEsMTcgQEAKIAlyZXR1cm4gc2V0X2N0bF92YWx1ZShjdmFsLCBTRVRfQ1VSLCB2YWxpZHgsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2V0X2N1cl9taXhfdmFsdWUoc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwsIGludCBjaGFubmVsLCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IHNldF9jdXJfbWl4X3ZhbHVlKHN0cnVjdCB1c2JfbWl4ZXJfZWxlbV9pbmZvICpjdmFsLCBpbnQgY2hhbm5lbCwKKwkJCSAgICAgaW50IGluZGV4LCBpbnQgdmFsdWUpCiB7Ci0JcmV0dXJuIHNldF9jdGxfdmFsdWUoY3ZhbCwgU0VUX0NVUiwgKGN2YWwtPmNvbnRyb2wgPDwgOCkgfCBjaGFubmVsLCB2YWx1ZSk7CisJaW50IGVycjsKKwllcnIgPSBzZXRfY3RsX3ZhbHVlKGN2YWwsIFNFVF9DVVIsIChjdmFsLT5jb250cm9sIDw8IDgpIHwgY2hhbm5lbCwKKwkJCSAgICB2YWx1ZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJY3ZhbC0+Y2FjaGVkIHw9IDEgPDwgY2hhbm5lbDsKKwljdmFsLT5jYWNoZV92YWxbaW5kZXhdID0gdmFsdWU7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC03MTgsNyArNzU1LDcgQEAKIAkJaWYgKGN2YWwtPm1pbiArIGN2YWwtPnJlcyA8IGN2YWwtPm1heCkgewogCQkJaW50IGxhc3RfdmFsaWRfcmVzID0gY3ZhbC0+cmVzOwogCQkJaW50IHNhdmVkLCB0ZXN0LCBjaGVjazsKLQkJCWdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgJnNhdmVkKTsKKwkJCWdldF9jdXJfbWl4X3JhdyhjdmFsLCBtaW5jaG4sICZzYXZlZCk7CiAJCQlmb3IgKDs7KSB7CiAJCQkJdGVzdCA9IHNhdmVkOwogCQkJCWlmICh0ZXN0IDwgY3ZhbC0+bWF4KQpAQCAtNzI2LDggKzc2Myw4IEBACiAJCQkJZWxzZQogCQkJCQl0ZXN0IC09IGN2YWwtPnJlczsKIAkJCQlpZiAodGVzdCA8IGN2YWwtPm1pbiB8fCB0ZXN0ID4gY3ZhbC0+bWF4IHx8Ci0JCQkJICAgIHNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgdGVzdCkgfHwKLQkJCQkgICAgZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCAmY2hlY2spKSB7CisJCQkJICAgIHNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIG1pbmNobiwgMCwgdGVzdCkgfHwKKwkJCQkgICAgZ2V0X2N1cl9taXhfcmF3KGN2YWwsIG1pbmNobiwgJmNoZWNrKSkgewogCQkJCQljdmFsLT5yZXMgPSBsYXN0X3ZhbGlkX3JlczsKIAkJCQkJYnJlYWs7CiAJCQkJfQpAQCAtNzM1LDcgKzc3Miw3IEBACiAJCQkJCWJyZWFrOwogCQkJCWN2YWwtPnJlcyAqPSAyOwogCQkJfQotCQkJc2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgbWluY2huLCBzYXZlZCk7CisJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCBtaW5jaG4sIDAsIHNhdmVkKTsKIAkJfQogCiAJCWN2YWwtPmluaXRpYWxpemVkID0gMTsKQEAgLTc3NSwzNSArODEyLDI1IEBACiAJc3RydWN0IHVzYl9taXhlcl9lbGVtX2luZm8gKmN2YWwgPSBrY29udHJvbC0+cHJpdmF0ZV9kYXRhOwogCWludCBjLCBjbnQsIHZhbCwgZXJyOwogCisJdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPSBjdmFsLT5taW47CiAJaWYgKGN2YWwtPmNtYXNrKSB7CiAJCWNudCA9IDA7CiAJCWZvciAoYyA9IDA7IGMgPCBNQVhfQ0hBTk5FTFM7IGMrKykgewotCQkJaWYgKGN2YWwtPmNtYXNrICYgKDEgPDwgYykpIHsKLQkJCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgJnZhbCk7Ci0JCQkJaWYgKGVyciA8IDApIHsKLQkJCQkJaWYgKGN2YWwtPm1peGVyLT5pZ25vcmVfY3RsX2Vycm9yKSB7Ci0JCQkJCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGN2YWwtPm1pbjsKLQkJCQkJCXJldHVybiAwOwotCQkJCQl9Ci0JCQkJCXNuZF9wcmludGQoS0VSTl9FUlIgImNhbm5vdCBnZXQgY3VycmVudCB2YWx1ZSBmb3IgY29udHJvbCAlZCBjaCAlZDogZXJyID0gJWRcbiIsIGN2YWwtPmNvbnRyb2wsIGMgKyAxLCBlcnIpOwotCQkJCQlyZXR1cm4gZXJyOwotCQkJCX0KLQkJCQl2YWwgPSBnZXRfcmVsYXRpdmVfdmFsdWUoY3ZhbCwgdmFsKTsKLQkJCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtjbnRdID0gdmFsOwotCQkJCWNudCsrOwotCQkJfQorCQkJaWYgKCEoY3ZhbC0+Y21hc2sgJiAoMSA8PCBjKSkpCisJCQkJY29udGludWU7CisJCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgY250LCAmdmFsKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCXJldHVybiBjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvciA/IDAgOiBlcnI7CisJCQl2YWwgPSBnZXRfcmVsYXRpdmVfdmFsdWUoY3ZhbCwgdmFsKTsKKwkJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2NudF0gPSB2YWw7CisJCQljbnQrKzsKIAkJfQorCQlyZXR1cm4gMDsKIAl9IGVsc2UgewogCQkvKiBtYXN0ZXIgY2hhbm5lbCAqLwotCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAmdmFsKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCWlmIChjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvcikgewotCQkJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY3ZhbC0+bWluOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJc25kX3ByaW50ZChLRVJOX0VSUiAiY2Fubm90IGdldCBjdXJyZW50IHZhbHVlIGZvciBjb250cm9sICVkIG1hc3RlciBjaDogZXJyID0gJWRcbiIsIGN2YWwtPmNvbnRyb2wsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsIDAsICZ2YWwpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBjdmFsLT5taXhlci0+aWdub3JlX2N0bF9lcnJvciA/IDAgOiBlcnI7CiAJCXZhbCA9IGdldF9yZWxhdGl2ZV92YWx1ZShjdmFsLCB2YWwpOwogCQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IHZhbDsKIAl9CkBAIC04MjAsMzQgKzg0NywyOCBAQAogCWlmIChjdmFsLT5jbWFzaykgewogCQljbnQgPSAwOwogCQlmb3IgKGMgPSAwOyBjIDwgTUFYX0NIQU5ORUxTOyBjKyspIHsKLQkJCWlmIChjdmFsLT5jbWFzayAmICgxIDw8IGMpKSB7Ci0JCQkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsICZvdmFsKTsKLQkJCQlpZiAoZXJyIDwgMCkgewotCQkJCQlpZiAoY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpCi0JCQkJCQlyZXR1cm4gMDsKLQkJCQkJcmV0dXJuIGVycjsKLQkJCQl9Ci0JCQkJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbY250XTsKLQkJCQl2YWwgPSBnZXRfYWJzX3ZhbHVlKGN2YWwsIHZhbCk7Ci0JCQkJaWYgKG92YWwgIT0gdmFsKSB7Ci0JCQkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCB2YWwpOwotCQkJCQljaGFuZ2VkID0gMTsKLQkJCQl9Ci0JCQkJZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgYyArIDEsICZ2YWwpOwotCQkJCWNudCsrOworCQkJaWYgKCEoY3ZhbC0+Y21hc2sgJiAoMSA8PCBjKSkpCisJCQkJY29udGludWU7CisJCQllcnIgPSBnZXRfY3VyX21peF92YWx1ZShjdmFsLCBjICsgMSwgY250LCAmb3ZhbCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPyAwIDogZXJyOworCQkJdmFsID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbY250XTsKKwkJCXZhbCA9IGdldF9hYnNfdmFsdWUoY3ZhbCwgdmFsKTsKKwkJCWlmIChvdmFsICE9IHZhbCkgeworCQkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIGMgKyAxLCBjbnQsIHZhbCk7CisJCQkJY2hhbmdlZCA9IDE7CiAJCQl9CisJCQljbnQrKzsKIAkJfQogCX0gZWxzZSB7CiAJCS8qIG1hc3RlciBjaGFubmVsICovCi0JCWVyciA9IGdldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsICZvdmFsKTsKLQkJaWYgKGVyciA8IDAgJiYgY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IpCi0JCQlyZXR1cm4gMDsKKwkJZXJyID0gZ2V0X2N1cl9taXhfdmFsdWUoY3ZhbCwgMCwgMCwgJm92YWwpOwogCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7CisJCQlyZXR1cm4gY3ZhbC0+bWl4ZXItPmlnbm9yZV9jdGxfZXJyb3IgPyAwIDogZXJyOwogCQl2YWwgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKIAkJdmFsID0gZ2V0X2Fic192YWx1ZShjdmFsLCB2YWwpOwogCQlpZiAodmFsICE9IG92YWwpIHsKLQkJCXNldF9jdXJfbWl4X3ZhbHVlKGN2YWwsIDAsIHZhbCk7CisJCQlzZXRfY3VyX21peF92YWx1ZShjdmFsLCAwLCAwLCB2YWwpOwogCQkJY2hhbmdlZCA9IDE7CiAJCX0KIAl9CkBAIC0xNzA2LDcgKzE3MjcsOCBAQAogCQlicmVhazsKIAkvKiBsaXZlMjRleHQ6IDQgPSBsaW5lLWluIGphY2sgKi8KIAljYXNlIDM6CS8qIGhwLW91dCBqYWNrIChtYXkgYWN0dWF0ZSBNdXRlKSAqLwotCQlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApKQorCQlpZiAobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8CisJCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0OCkpCiAJCQlzbmRfdXNiX21peGVyX25vdGlmeV9pZChtaXhlciwgbWl4ZXItPnJjX2NmZy0+bXV0ZV9taXhlcl9pZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0xNzk3LDI0ICsxODE5LDYgQEAKIAl3YWtlX3VwKCZtaXhlci0+cmNfd2FpdHEpOwogfQogCi1zdGF0aWMgaW50IHNuZF91c2Jfc2JyY19od2RlcF9vcGVuKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdXNiX21peGVyX2ludGVyZmFjZSAqbWl4ZXIgPSBody0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJm1peGVyLT5yY19od2RlcF9vcGVuKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfdXNiX3NicmNfaHdkZXBfcmVsZWFzZShzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHVzYl9taXhlcl9pbnRlcmZhY2UgKm1peGVyID0gaHctPnByaXZhdGVfZGF0YTsKLQotCWNsZWFyX2JpdCgwLCAmbWl4ZXItPnJjX2h3ZGVwX29wZW4pOwotCXNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBsb25nIHNuZF91c2Jfc2JyY19od2RlcF9yZWFkKHN0cnVjdCBzbmRfaHdkZXAgKmh3LCBjaGFyIF9fdXNlciAqYnVmLAogCQkJCSAgICAgbG9uZyBjb3VudCwgbG9mZl90ICpvZmZzZXQpCiB7CkBAIC0xODY3LDkgKzE4NzEsOCBAQAogCWh3ZGVwLT5pZmFjZSA9IFNORFJWX0hXREVQX0lGQUNFX1NCX1JDOwogCWh3ZGVwLT5wcml2YXRlX2RhdGEgPSBtaXhlcjsKIAlod2RlcC0+b3BzLnJlYWQgPSBzbmRfdXNiX3NicmNfaHdkZXBfcmVhZDsKLQlod2RlcC0+b3BzLm9wZW4gPSBzbmRfdXNiX3NicmNfaHdkZXBfb3BlbjsKLQlod2RlcC0+b3BzLnJlbGVhc2UgPSBzbmRfdXNiX3NicmNfaHdkZXBfcmVsZWFzZTsKIAlod2RlcC0+b3BzLnBvbGwgPSBzbmRfdXNiX3NicmNfaHdkZXBfcG9sbDsKKwlod2RlcC0+ZXhjbHVzaXZlID0gMTsKIAogCW1peGVyLT5yY191cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCWlmICghbWl4ZXItPnJjX3VyYikKQEAgLTE5NTYsOCArMTk1OSw5IEBACiAJaW50IGksIGVycjsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNuZF9hdWRpZ3kybnhfY29udHJvbHMpOyArK2kpIHsKLQkJaWYgKGkgPiAxICYmICAvKiBMaXZlMjRleHQgaGFzIDIgTEVEcyBvbmx5ICovCi0JCQltaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkpCisJCWlmIChpID4gMSAmJiAvKiBMaXZlMjRleHQgaGFzIDIgTEVEcyBvbmx5ICovCisJCQkobWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApIHx8CisJCQkgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDgpKSkKIAkJCWJyZWFrOyAKIAkJZXJyID0gc25kX2N0bF9hZGQobWl4ZXItPmNoaXAtPmNhcmQsCiAJCQkJICBzbmRfY3RsX25ldzEoJnNuZF9hdWRpZ3kybnhfY29udHJvbHNbaV0sIG1peGVyKSk7CkBAIC0xOTk0LDcgKzE5OTgsOCBAQAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiVzIGphY2tzXG5cbiIsIG1peGVyLT5jaGlwLT5jYXJkLT5zaG9ydG5hbWUpOwogCWlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzAyMCkpCiAJCWphY2tzID0gamFja3NfYXVkaWd5Mm54OwotCWVsc2UgaWYgKG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSkKKwllbHNlIGlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0MCkgfHwKKwkJIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQ4KSkKIAkJamFja3MgPSBqYWNrc19saXZlMjRleHQ7CiAJZWxzZQogCQlyZXR1cm47CkBAIC0yMDQ0LDcgKzIwNDksOCBAQAogCQlnb3RvIF9lcnJvcjsKIAogCWlmIChtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzAyMCkgfHwKLQkgICAgbWl4ZXItPmNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwNDFlLCAweDMwNDApKSB7CisJICAgIG1peGVyLT5jaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHgzMDQwKSB8fAorCSAgICBtaXhlci0+Y2hpcC0+dXNiX2lkID09IFVTQl9JRCgweDA0MWUsIDB4MzA0OCkpIHsKIAkJc3RydWN0IHNuZF9pbmZvX2VudHJ5ICplbnRyeTsKIAogCQlpZiAoKGVyciA9IHNuZF9hdWRpZ3kybnhfY29udHJvbHNfY3JlYXRlKG1peGVyKSkgPCAwKQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYyBiL3NvdW5kL3VzYi91c2JtaXhlcl9tYXBzLmMKaW5kZXggZDc1NWJlMC4uM2U1ZDY2YyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYm1peGVyX21hcHMuYworKysgYi9zb3VuZC91c2IvdXNibWl4ZXJfbWFwcy5jCkBAIC0yNjEsNiArMjYxLDIyIEBACiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIAorc3RhdGljIHN0cnVjdCB1c2JtaXhfbmFtZV9tYXAgc2NyYXRjaF9saXZlX21hcFtdID0geworCS8qIDE6IElUIExpbmUgMSAoVVNCIHN0cmVhbWluZykgKi8KKwkvKiAyOiBPVCBMaW5lIDEgKFNwZWFrZXIpICovCisJLyogMzogSVQgTGluZSAxIChMaW5lIGNvbm5lY3RvcikgKi8KKwl7IDQsICJMaW5lIDEgSW4iIH0sIC8qIEZVICovCisJLyogNTogT1QgTGluZSAxIChVU0Igc3RyZWFtaW5nKSAqLworCS8qIDY6IElUIExpbmUgMiAoVVNCIHN0cmVhbWluZykgKi8KKwkvKiA3OiBPVCBMaW5lIDIgKFNwZWFrZXIpICovCisJLyogODogSVQgTGluZSAyIChMaW5lIGNvbm5lY3RvcikgKi8KKwl7IDksICJMaW5lIDIgSW4iIH0sIC8qIEZVICovCisJLyogMTA6IE9UIExpbmUgMiAoVVNCIHN0cmVhbWluZykgKi8KKwkvKiAxMTogSVQgTWljIChMaW5lIGNvbm5lY3RvcikgKi8KKwkvKiAxMjogT1QgTWljIChVU0Igc3RyZWFtaW5nKSAqLworCXsgMCB9IC8qIHRlcm1pbmF0b3IgKi8KK307CisKIC8qCiAgKiBDb250cm9sIG1hcCBlbnRyaWVzCiAgKi8KQEAgLTI4NSw2ICszMDEsMTEgQEAKIAkJLm1hcCA9IGxpdmUyNGV4dF9tYXAsCiAJfSwKIAl7CisJCS5pZCA9IFVTQl9JRCgweDA0MWUsIDB4MzA0OCksCisJCS5tYXAgPSBhdWRpZ3kybnhfbWFwLAorCQkuc2VsZWN0b3JfbWFwID0gYXVkaWd5Mm54X3NlbGVjdG9ycywKKwl9LAorCXsKIAkJLyogSGVyY3VsZXMgREogQ29uc29sZSAoV2luZG93cyBFZGl0aW9uKSAqLwogCQkuaWQgPSBVU0JfSUQoMHgwNmY4LCAweGIwMDApLAogCQkuaWdub3JlX2N0bF9lcnJvciA9IDEsCkBAIC0zMTEsNiArMzMyLDExIEBACiAJCS5pZCA9IFVTQl9JRCgweDBjY2QsIDB4MDAyOCksCiAJCS5tYXAgPSBhdXJlb25fNTFfMl9tYXAsCiAJfSwKKwl7CisJCS5pZCA9IFVTQl9JRCgweDEzZTUsIDB4MDAwMSksCisJCS5tYXAgPSBzY3JhdGNoX2xpdmVfbWFwLAorCQkuaWdub3JlX2N0bF9lcnJvciA9IDEsCisJfSwKIAl7IDAgfSAvKiB0ZXJtaW5hdG9yICovCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNicXVpcmtzLmggYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKaW5kZXggNWQ4ZWYwOS4uNjQ3ZWY1MCAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYnF1aXJrcy5oCisrKyBiL3NvdW5kL3VzYi91c2JxdWlya3MuaApAQCAtMzksNiArMzksMTYgQEAKIAkuaWRQcm9kdWN0ID0gcHJvZCwgXAogCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMKIAorLyogQ3JlYXRpdmUvVG9zaGliYSBNdWx0aW1lZGlhIENlbnRlciBTQi0wNTAwICovCit7CisJVVNCX0RFVklDRSgweDA0MWUsIDB4MzA0OCksCisJLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICYgKGNvbnN0IHN0cnVjdCBzbmRfdXNiX2F1ZGlvX3F1aXJrKSB7CisJCS52ZW5kb3JfbmFtZSA9ICJUb3NoaWJhIiwKKwkJLnByb2R1Y3RfbmFtZSA9ICJTQi0wNTAwIiwKKwkJLmlmbnVtID0gUVVJUktfTk9fSU5URVJGQUNFCisJfQorfSwKKwogLyogQ3JlYXRpdmUvRS1NdSBkZXZpY2VzICovCiB7CiAJVVNCX0RFVklDRSgweDA0MWUsIDB4MzAxMCksCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMgYi9zb3VuZC91c2IvdXN4MnkvdXMxMjJsLmMKaW5kZXggNzNlNTlmNC4uOTgyNzZhYSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzMTIybC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91czEyMmwuYwpAQCAtNDc4LDE5ICs0NzgsMjEgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqdXN4MnlfY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgdXN4MnlfY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJaW50CQlkZXY7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOworCWludCBlcnI7CisKIAlmb3IgKGRldiA9IDA7IGRldiA8IFNORFJWX0NBUkRTOyArK2RldikKIAkJaWYgKGVuYWJsZVtkZXZdICYmICFzbmRfdXMxMjJsX2NhcmRfdXNlZFtkZXZdKQogCQkJYnJlYWs7CiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKLQkJcmV0dXJuIE5VTEw7Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKLQkJCSAgICBzaXplb2Yoc3RydWN0IHVzMTIybCkpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgdXMxMjJsKSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXNuZF91czEyMmxfY2FyZF91c2VkW1VTMTIyTChjYXJkKS0+Y2hpcC5pbmRleCA9IGRldl0gPSAxOwogCiAJVVMxMjJMKGNhcmQpLT5jaGlwLmRldiA9IGRldmljZTsKQEAgLTUwOSw0NiArNTExLDU3IEBACiAJCVVTMTIyTChjYXJkKS0+Y2hpcC5kZXYtPmRldm51bQogCQkpOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmRldmljZS0+ZGV2KTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCAqdXMxMjJsX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpY2VfaWQpCitzdGF0aWMgaW50IHVzMTIybF91c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmRldmljZV9pZCwKKwkJCSAgICBzdHJ1Y3Qgc25kX2NhcmQgKipjYXJkcCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSB1c3gyeV9jcmVhdGVfY2FyZChkZXZpY2UpOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOwogCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwllcnIgPSB1c3gyeV9jcmVhdGVfY2FyZChkZXZpY2UsICZjYXJkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAotCWlmICghdXMxMjJsX2NyZWF0ZV9jYXJkKGNhcmQpIHx8Ci0JICAgIHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpIDwgMCkgeworCWlmICghdXMxMjJsX2NyZWF0ZV9jYXJkKGNhcmQpKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwllcnIgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCQlyZXR1cm4gZXJyOwogCX0KIAogCXVzYl9nZXRfZGV2KGRldmljZSk7Ci0JcmV0dXJuIGNhcmQ7CisJKmNhcmRwID0gY2FyZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfdXMxMjJsX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJaW50IGVycjsKKwogCXNuZF9wcmludGRkKEtFUk5fREVCVUciJXA6JWlcbiIsCiAJCSAgICBpbnRmLCBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyKTsKIAlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAxKQogCQlyZXR1cm4gMDsKIAotCWNhcmQgPSB1czEyMmxfdXNiX3Byb2JlKHVzYl9nZXRfaW50ZihpbnRmKSwgaWQpOwotCi0JaWYgKGNhcmQpIHsKLQkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYXJkKTsKLQkJcmV0dXJuIDA7CisJZXJyID0gdXMxMjJsX3VzYl9wcm9iZSh1c2JfZ2V0X2ludGYoaW50ZiksIGlkLCAmY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJdXNiX3B1dF9pbnRmKGludGYpOworCQlyZXR1cm4gZXJyOwogCX0KIAotCXVzYl9wdXRfaW50ZihpbnRmKTsKLQlyZXR1cm4gLUVJTzsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGNhcmQpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfdXMxMjJsX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jIGIvc291bmQvdXNiL3VzeDJ5L3VzWDJZaHdkZXAuYwppbmRleCAxNTU4YTVjLi40YWY4NzQwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXNYMllod2RlcC5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c1gyWWh3ZGVwLmMKQEAgLTMwLDkgKzMwLDYgQEAKICNpbmNsdWRlICJ1c2J1c3gyeS5oIgogI2luY2x1ZGUgInVzWDJZaHdkZXAuaCIKIAotaW50IHVzWDJZX2h3ZGVwX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKLQotCiBzdGF0aWMgaW50IHNuZF91czQyOGN0bHNfdm1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhLAogCQkJCSAgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7CkBAIC0xMDYsMTYgKzEwMyw2IEBACiB9CiAKIAotc3RhdGljIGludCBzbmRfdXNYMllfaHdkZXBfb3BlbihzdHJ1Y3Qgc25kX2h3ZGVwICpodywgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3VzWDJZX2h3ZGVwX3JlbGVhc2Uoc3RydWN0IHNuZF9od2RlcCAqaHcsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHNuZF91c1gyWV9od2RlcF9kc3Bfc3RhdHVzKHN0cnVjdCBzbmRfaHdkZXAgKmh3LAogCQkJCSAgICAgIHN0cnVjdCBzbmRfaHdkZXBfZHNwX3N0YXR1cyAqaW5mbykKIHsKQEAgLTI2Nyw4ICsyNTQsNiBAQAogCiAJaHctPmlmYWNlID0gU05EUlZfSFdERVBfSUZBQ0VfVVNYMlk7CiAJaHctPnByaXZhdGVfZGF0YSA9IHVzWDJZKGNhcmQpOwotCWh3LT5vcHMub3BlbiA9IHNuZF91c1gyWV9od2RlcF9vcGVuOwotCWh3LT5vcHMucmVsZWFzZSA9IHNuZF91c1gyWV9od2RlcF9yZWxlYXNlOwogCWh3LT5vcHMuZHNwX3N0YXR1cyA9IHNuZF91c1gyWV9od2RlcF9kc3Bfc3RhdHVzOwogCWh3LT5vcHMuZHNwX2xvYWQgPSBzbmRfdXNYMllfaHdkZXBfZHNwX2xvYWQ7CiAJaHctPm9wcy5tbWFwID0gc25kX3VzNDI4Y3Rsc19tbWFwOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzeDJ5L3VzYl9zdHJlYW0uYyBiL3NvdW5kL3VzYi91c3gyeS91c2Jfc3RyZWFtLmMKaW5kZXggNzBiOTYzNS4uMjQzOTNkYSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzeDJ5L3VzYl9zdHJlYW0uYworKysgYi9zb3VuZC91c2IvdXN4MnkvdXNiX3N0cmVhbS5jCkBAIC01NTcsNyArNTU3LDcgQEAKIAkJcy0+aWRsZV9pbnNpemUgLT0gbWF4X2RpZmYgLSBtYXhfZGlmZl8wOwogCQlzLT5pZGxlX2luc2l6ZSArPSB1cmJfc2l6ZSAtIHMtPnBlcmlvZF9zaXplOwogCQlpZiAocy0+aWRsZV9pbnNpemUgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKCIlaSAlaSAlaVxuIiwKKwkJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICIlaSAlaSAlaVxuIiwKIAkJCQkgICBzLT5pZGxlX2luc2l6ZSwgdXJiX3NpemUsIHMtPnBlcmlvZF9zaXplKTsKIAkJCXJldHVybjsKIAkJfSBlbHNlIGlmIChzLT5pZGxlX2luc2l6ZSA9PSAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXNidXN4MnkuYyBiL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeS5jCmluZGV4IDExNjM5YmQuLjVjZTBkYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeS5jCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c2J1c3gyeS5jCkBAIC0yMjcsOSArMjI3LDkgQEAKIAkKIAlpZiAodXNYMlktPlVTMDQpIHsKIAkJaWYgKDAgPT0gdXNYMlktPlVTMDQtPnN1Ym1pdHRlZCkKLQkJCWRvCisJCQlkbyB7CiAJCQkJZXJyID0gdXNiX3N1Ym1pdF91cmIodXNYMlktPlVTMDQtPnVyYlt1c1gyWS0+VVMwNC0+c3VibWl0dGVkKytdLCBHRlBfQVRPTUlDKTsKLQkJCXdoaWxlICghZXJyICYmIHVzWDJZLT5VUzA0LT5zdWJtaXR0ZWQgPCB1c1gyWS0+VVMwNC0+bGVuKTsKKwkJCX0gd2hpbGUgKCFlcnIgJiYgdXNYMlktPlVTMDQtPnN1Ym1pdHRlZCA8IHVzWDJZLT5VUzA0LT5sZW4pOwogCX0gZWxzZQogCQlpZiAodXM0MjhjdGxzICYmIHVzNDI4Y3Rscy0+cDRvdXRMYXN0ID49IDAgJiYgdXM0MjhjdGxzLT5wNG91dExhc3QgPCBOX3VzNDI4X3A0b3V0X0JVRlMpIHsKIAkJCWlmICh1czQyOGN0bHMtPnA0b3V0TGFzdCAhPSB1czQyOGN0bHMtPnA0b3V0U2VudCkgewpAQCAtMzMzLDE4ICszMzMsMjEgQEAKIAl7IC8qIHRlcm1pbmF0b3IgKi8gfQogfTsKIAotc3RhdGljIHN0cnVjdCBzbmRfY2FyZCAqdXNYMllfY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgdXNYMllfY3JlYXRlX2NhcmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJaW50CQlkZXY7CiAJc3RydWN0IHNuZF9jYXJkICoJY2FyZDsKKwlpbnQgZXJyOworCiAJZm9yIChkZXYgPSAwOyBkZXYgPCBTTkRSVl9DQVJEUzsgKytkZXYpCiAJCWlmIChlbmFibGVbZGV2XSAmJiAhc25kX3VzWDJZX2NhcmRfdXNlZFtkZXZdKQogCQkJYnJlYWs7CiAJaWYgKGRldiA+PSBTTkRSVl9DQVJEUykKLQkJcmV0dXJuIE5VTEw7Ci0JY2FyZCA9IHNuZF9jYXJkX25ldyhpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwgc2l6ZW9mKHN0cnVjdCB1c1gyWWRldikpOwotCWlmICghY2FyZCkKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiAtRU5PREVWOworCWVyciA9IHNuZF9jYXJkX2NyZWF0ZShpbmRleFtkZXZdLCBpZFtkZXZdLCBUSElTX01PRFVMRSwKKwkJCSAgICAgIHNpemVvZihzdHJ1Y3QgdXNYMllkZXYpLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJc25kX3VzWDJZX2NhcmRfdXNlZFt1c1gyWShjYXJkKS0+Y2hpcC5pbmRleCA9IGRldl0gPSAxOwogCWNhcmQtPnByaXZhdGVfZnJlZSA9IHNuZF91c1gyWV9jYXJkX3ByaXZhdGVfZnJlZTsKIAl1c1gyWShjYXJkKS0+Y2hpcC5kZXYgPSBkZXZpY2U7CkBAIC0zNjIsMjYgKzM2NSwzNiBAQAogCQl1c1gyWShjYXJkKS0+Y2hpcC5kZXYtPmJ1cy0+YnVzbnVtLCB1c1gyWShjYXJkKS0+Y2hpcC5kZXYtPmRldm51bQogCQkpOwogCXNuZF9jYXJkX3NldF9kZXYoY2FyZCwgJmRldmljZS0+ZGV2KTsKLQlyZXR1cm4gY2FyZDsKKwkqY2FyZHAgPSBjYXJkOworCXJldHVybiAwOwogfQogCiAKLXN0YXRpYyB2b2lkICp1c1gyWV91c2JfcHJvYmUoc3RydWN0IHVzYl9kZXZpY2UgKmRldmljZSwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICpkZXZpY2VfaWQpCitzdGF0aWMgaW50IHVzWDJZX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2aWNlLAorCQkJICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqZGV2aWNlX2lkLAorCQkJICAgc3RydWN0IHNuZF9jYXJkICoqY2FyZHApCiB7CiAJaW50CQllcnI7CiAJc3RydWN0IHNuZF9jYXJkICoJY2FyZDsKKworCSpjYXJkcCA9IE5VTEw7CiAJaWYgKGxlMTZfdG9fY3B1KGRldmljZS0+ZGVzY3JpcHRvci5pZFZlbmRvcikgIT0gMHgxNjA0IHx8CiAJICAgIChsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfSURfVVMxMjIgJiYKIAkgICAgIGxlMTZfdG9fY3B1KGRldmljZS0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpICE9IFVTQl9JRF9VUzIyNCAmJgotCSAgICAgbGUxNl90b19jcHUoZGV2aWNlLT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgIT0gVVNCX0lEX1VTNDI4KSB8fAotCSAgICAhKGNhcmQgPSB1c1gyWV9jcmVhdGVfY2FyZChkZXZpY2UpKSkKLQkJcmV0dXJuIE5VTEw7CisJICAgICBsZTE2X3RvX2NwdShkZXZpY2UtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSAhPSBVU0JfSURfVVM0MjgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IHVzWDJZX2NyZWF0ZV9jYXJkKGRldmljZSwgJmNhcmQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCWlmICgoZXJyID0gdXNYMllfaHdkZXBfbmV3KGNhcmQsIGRldmljZSkpIDwgMCAgfHwKIAkgICAgKGVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBlcnI7CiAJfQotCXJldHVybiBjYXJkOworCSpjYXJkcCA9IGNhcmQ7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zODksMTMgKzQwMiwxNCBAQAogICovCiBzdGF0aWMgaW50IHNuZF91c1gyWV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewotCXZvaWQgKmNoaXA7Ci0JY2hpcCA9IHVzWDJZX3VzYl9wcm9iZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBpbnRmLCBpZCk7Ci0JaWYgKGNoaXApIHsKLQkJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjaGlwKTsKLQkJcmV0dXJuIDA7Ci0JfSBlbHNlCi0JCXJldHVybiAtRUlPOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlpbnQgZXJyOworCisJZXJyID0gdXNYMllfdXNiX3Byb2JlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIGludGYsIGlkLCAmY2FyZCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZGV2X3NldF9kcnZkYXRhKCZpbnRmLT5kZXYsIGNhcmQpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzbmRfdXNYMllfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmggYi9zb3VuZC91c2IvdXN4MnkvdXN4Mnlod2RlcHBjbS5oCmluZGV4IGMzMzgyZmQuLjljNGZiODQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c3gyeS91c3gyeWh3ZGVwcGNtLmgKKysrIGIvc291bmQvdXNiL3VzeDJ5L3VzeDJ5aHdkZXBwY20uaApAQCAtMTgsMyArMTgsNSBAQAogCXZvbGF0aWxlIHVuc2lnbmVkIGNhcHR1cmVkX2lzb19mcmFtZXM7CiAJaW50IGNhcHR1cmVfaXNvX3N0YXJ0OwogfTsKKworaW50IHVzWDJZX2h3ZGVwX3BjbV9uZXcoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lvYXBpYy5jIGIvdmlydC9rdm0vaW9hcGljLmMKaW5kZXggMjNiODFjZi4uYzNiOTlkZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9hcGljLmMKKysrIGIvdmlydC9rdm0vaW9hcGljLmMKQEAgLTgzLDI0ICs4MywyOCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpZHgpCitzdGF0aWMgaW50IGlvYXBpY19zZXJ2aWNlKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHVuc2lnbmVkIGludCBpZHgpCiB7CiAJdW5pb24gaW9hcGljX3JlZGlyX2VudHJ5ICpwZW50OworCWludCBpbmplY3RlZCA9IC0xOwogCiAJcGVudCA9ICZpb2FwaWMtPnJlZGlydGJsW2lkeF07CiAKIAlpZiAoIXBlbnQtPmZpZWxkcy5tYXNrKSB7Ci0JCWludCBpbmplY3RlZCA9IGlvYXBpY19kZWxpdmVyKGlvYXBpYywgaWR4KTsKKwkJaW5qZWN0ZWQgPSBpb2FwaWNfZGVsaXZlcihpb2FwaWMsIGlkeCk7CiAJCWlmIChpbmplY3RlZCAmJiBwZW50LT5maWVsZHMudHJpZ19tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKQogCQkJcGVudC0+ZmllbGRzLnJlbW90ZV9pcnIgPSAxOwogCX0KIAlpZiAoIXBlbnQtPmZpZWxkcy50cmlnX21vZGUpCiAJCWlvYXBpYy0+aXJyICY9IH4oMSA8PCBpZHgpOworCisJcmV0dXJuIGluamVjdGVkOwogfQogCiBzdGF0aWMgdm9pZCBpb2FwaWNfd3JpdGVfaW5kaXJlY3Qoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgdTMyIHZhbCkKIHsKIAl1bnNpZ25lZCBpbmRleDsKKwlib29sIG1hc2tfYmVmb3JlLCBtYXNrX2FmdGVyOwogCiAJc3dpdGNoIChpb2FwaWMtPmlvcmVnc2VsKSB7CiAJY2FzZSBJT0FQSUNfUkVHX1ZFUlNJT046CkBAIC0xMjAsNiArMTI0LDcgQEAKIAkJaW9hcGljX2RlYnVnKCJjaGFuZ2UgcmVkaXIgaW5kZXggJXggdmFsICV4XG4iLCBpbmRleCwgdmFsKTsKIAkJaWYgKGluZGV4ID49IElPQVBJQ19OVU1fUElOUykKIAkJCXJldHVybjsKKwkJbWFza19iZWZvcmUgPSBpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMubWFzazsKIAkJaWYgKGlvYXBpYy0+aW9yZWdzZWwgJiAxKSB7CiAJCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5iaXRzICY9IDB4ZmZmZmZmZmY7CiAJCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5iaXRzIHw9ICh1NjQpIHZhbCA8PCAzMjsKQEAgLTEyOCw2ICsxMzMsOSBAQAogCQkJaW9hcGljLT5yZWRpcnRibFtpbmRleF0uYml0cyB8PSAodTMyKSB2YWw7CiAJCQlpb2FwaWMtPnJlZGlydGJsW2luZGV4XS5maWVsZHMucmVtb3RlX2lyciA9IDA7CiAJCX0KKwkJbWFza19hZnRlciA9IGlvYXBpYy0+cmVkaXJ0YmxbaW5kZXhdLmZpZWxkcy5tYXNrOworCQlpZiAobWFza19iZWZvcmUgIT0gbWFza19hZnRlcikKKwkJCWt2bV9maXJlX21hc2tfbm90aWZpZXJzKGlvYXBpYy0+a3ZtLCBpbmRleCwgbWFza19hZnRlcik7CiAJCWlmIChpb2FwaWMtPmlyciAmICgxIDw8IGluZGV4KSkKIAkJCWlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaW5kZXgpOwogCQlicmVhazsKQEAgLTIwMiw3ICsyMTAsNyBAQAogCXU4IHRyaWdfbW9kZSA9IGlvYXBpYy0+cmVkaXJ0YmxbaXJxXS5maWVsZHMudHJpZ19tb2RlOwogCXUzMiBkZWxpdmVyX2JpdG1hc2s7CiAJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OwotCWludCB2Y3B1X2lkLCByID0gMDsKKwlpbnQgdmNwdV9pZCwgciA9IC0xOwogCiAJaW9hcGljX2RlYnVnKCJkZXN0PSV4IGRlc3RfbW9kZT0leCBkZWxpdmVyeV9tb2RlPSV4ICIKIAkJICAgICAidmVjdG9yPSV4IHRyaWdfbW9kZT0leFxuIiwKQEAgLTI0Miw3ICsyNTAsOSBAQAogCQkJZGVsaXZlcl9iaXRtYXNrICY9IH4oMSA8PCB2Y3B1X2lkKTsKIAkJCXZjcHUgPSBpb2FwaWMtPmt2bS0+dmNwdXNbdmNwdV9pZF07CiAJCQlpZiAodmNwdSkgewotCQkJCXIgPSBpb2FwaWNfaW5qX2lycShpb2FwaWMsIHZjcHUsIHZlY3RvciwKKwkJCQlpZiAociA8IDApCisJCQkJCXIgPSAwOworCQkJCXIgKz0gaW9hcGljX2lual9pcnEoaW9hcGljLCB2Y3B1LCB2ZWN0b3IsCiAJCQkJCSAgICAgICB0cmlnX21vZGUsIGRlbGl2ZXJ5X21vZGUpOwogCQkJfQogCQl9CkBAIC0yNTMsOCArMjYzLDEwIEBACiAJCQkJY29udGludWU7CiAJCQlkZWxpdmVyX2JpdG1hc2sgJj0gfigxIDw8IHZjcHVfaWQpOwogCQkJdmNwdSA9IGlvYXBpYy0+a3ZtLT52Y3B1c1t2Y3B1X2lkXTsKLQkJCWlmICh2Y3B1KQorCQkJaWYgKHZjcHUpIHsKIAkJCQlpb2FwaWNfaW5qX25taSh2Y3B1KTsKKwkJCQlyID0gMTsKKwkJCX0KIAkJCWVsc2UKIAkJCQlpb2FwaWNfZGVidWcoIk5NSSB0byB2Y3B1ICVkIGZhaWxlZFxuIiwKIAkJCQkJCXZjcHUtPnZjcHVfaWQpOwpAQCAtMjY4LDExICsyODAsMTIgQEAKIAlyZXR1cm4gcjsKIH0KIAotdm9pZCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgaW50IGxldmVsKQoraW50IGt2bV9pb2FwaWNfc2V0X2lycShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCiB7CiAJdTMyIG9sZF9pcnIgPSBpb2FwaWMtPmlycjsKIAl1MzIgbWFzayA9IDEgPDwgaXJxOwogCXVuaW9uIGlvYXBpY19yZWRpcl9lbnRyeSBlbnRyeTsKKwlpbnQgcmV0ID0gMTsKIAogCWlmIChpcnEgPj0gMCAmJiBpcnEgPCBJT0FQSUNfTlVNX1BJTlMpIHsKIAkJZW50cnkgPSBpb2FwaWMtPnJlZGlydGJsW2lycV07CkBAIC0yODMsMjUgKzI5NiwyNiBAQAogCQkJaW9hcGljLT5pcnIgfD0gbWFzazsKIAkJCWlmICgoIWVudHJ5LmZpZWxkcy50cmlnX21vZGUgJiYgb2xkX2lyciAhPSBpb2FwaWMtPmlycikKIAkJCSAgICB8fCAhZW50cnkuZmllbGRzLnJlbW90ZV9pcnIpCi0JCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBpcnEpOworCQkJCXJldCA9IGlvYXBpY19zZXJ2aWNlKGlvYXBpYywgaXJxKTsKIAkJfQogCX0KKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfX2t2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCBpbnQgZ3NpLAorc3RhdGljIHZvaWQgX19rdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IHBpbiwKIAkJCQkgICAgaW50IHRyaWdnZXJfbW9kZSkKIHsKIAl1bmlvbiBpb2FwaWNfcmVkaXJfZW50cnkgKmVudDsKIAotCWVudCA9ICZpb2FwaWMtPnJlZGlydGJsW2dzaV07CisJZW50ID0gJmlvYXBpYy0+cmVkaXJ0YmxbcGluXTsKIAotCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGlvYXBpYy0+a3ZtLCBnc2kpOworCWt2bV9ub3RpZnlfYWNrZWRfaXJxKGlvYXBpYy0+a3ZtLCBLVk1fSVJRQ0hJUF9JT0FQSUMsIHBpbik7CiAKIAlpZiAodHJpZ2dlcl9tb2RlID09IElPQVBJQ19MRVZFTF9UUklHKSB7CiAJCUFTU0VSVChlbnQtPmZpZWxkcy50cmlnX21vZGUgPT0gSU9BUElDX0xFVkVMX1RSSUcpOwogCQllbnQtPmZpZWxkcy5yZW1vdGVfaXJyID0gMDsKLQkJaWYgKCFlbnQtPmZpZWxkcy5tYXNrICYmIChpb2FwaWMtPmlyciAmICgxIDw8IGdzaSkpKQotCQkJaW9hcGljX3NlcnZpY2UoaW9hcGljLCBnc2kpOworCQlpZiAoIWVudC0+ZmllbGRzLm1hc2sgJiYgKGlvYXBpYy0+aXJyICYgKDEgPDwgcGluKSkpCisJCQlpb2FwaWNfc2VydmljZShpb2FwaWMsIHBpbik7CiAJfQogfQogCkBAIC00MjYsMyArNDQwLDQgQEAKIAlrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldigma3ZtLT5tbWlvX2J1cywgJmlvYXBpYy0+ZGV2KTsKIAlyZXR1cm4gMDsKIH0KKwpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmggYi92aXJ0L2t2bS9pb2FwaWMuaAppbmRleCA0OWM5NTgxLi5hMzRiZDVlIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuaAorKysgYi92aXJ0L2t2bS9pb2FwaWMuaApAQCAtODMsNyArODMsNyBAQAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGJpdG1hcCk7CiB2b2lkIGt2bV9pb2FwaWNfdXBkYXRlX2VvaShzdHJ1Y3Qga3ZtICprdm0sIGludCB2ZWN0b3IsIGludCB0cmlnZ2VyX21vZGUpOwogaW50IGt2bV9pb2FwaWNfaW5pdChzdHJ1Y3Qga3ZtICprdm0pOwotdm9pZCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgaW50IGxldmVsKTsKK2ludCBrdm1faW9hcGljX3NldF9pcnEoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYywgaW50IGlycSwgaW50IGxldmVsKTsKIHZvaWQga3ZtX2lvYXBpY19yZXNldChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljKTsKIHUzMiBrdm1faW9hcGljX2dldF9kZWxpdmVyeV9iaXRtYXNrKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIHU4IGRlc3QsCiAJCQkJdTggZGVzdF9tb2RlKTsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2lycV9jb21tLmMgYi92aXJ0L2t2bS9pcnFfY29tbS5jCmluZGV4IGFhNWQxZTUuLjg2NGFjNTQgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lycV9jb21tLmMKKysrIGIvdmlydC9rdm0vaXJxX2NvbW0uYwpAQCAtMjAsMzUgKzIwLDEzMiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorCisjaW5jbHVkZSA8YXNtL21zaWRlZi5oPgorCiAjaW5jbHVkZSAiaXJxLmgiCiAKICNpbmNsdWRlICJpb2FwaWMuaCIKIAotLyogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIGt2bS0+bG9jayBtdXRleCBoZWxkICovCi12b2lkIGt2bV9zZXRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycV9zb3VyY2VfaWQsIGludCBpcnEsIGludCBsZXZlbCkKK3N0YXRpYyBpbnQga3ZtX3NldF9waWNfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkJICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpCiB7Ci0JdW5zaWduZWQgbG9uZyAqaXJxX3N0YXRlID0gKHVuc2lnbmVkIGxvbmcgKikma3ZtLT5hcmNoLmlycV9zdGF0ZXNbaXJxXTsKKyNpZmRlZiBDT05GSUdfWDg2CisJcmV0dXJuIGt2bV9waWNfc2V0X2lycShwaWNfaXJxY2hpcChrdm0pLCBlLT5pcnFjaGlwLnBpbiwgbGV2ZWwpOworI2Vsc2UKKwlyZXR1cm4gLTE7CisjZW5kaWYKK30KIAotCS8qIExvZ2ljYWwgT1IgZm9yIGxldmVsIHRyaWcgaW50ZXJydXB0ICovCi0JaWYgKGxldmVsKQotCQlzZXRfYml0KGlycV9zb3VyY2VfaWQsIGlycV9zdGF0ZSk7Ci0JZWxzZQotCQljbGVhcl9iaXQoaXJxX3NvdXJjZV9pZCwgaXJxX3N0YXRlKTsKK3N0YXRpYyBpbnQga3ZtX3NldF9pb2FwaWNfaXJxKHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkJICAgICAgc3RydWN0IGt2bSAqa3ZtLCBpbnQgbGV2ZWwpCit7CisJcmV0dXJuIGt2bV9pb2FwaWNfc2V0X2lycShrdm0tPmFyY2gudmlvYXBpYywgZS0+aXJxY2hpcC5waW4sIGxldmVsKTsKK30KKworc3RhdGljIGludCBrdm1fc2V0X21zaShzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwKKwkJICAgICAgIHN0cnVjdCBrdm0gKmt2bSwgaW50IGxldmVsKQoreworCWludCB2Y3B1X2lkLCByID0gLTE7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCXN0cnVjdCBrdm1faW9hcGljICppb2FwaWMgPSBpb2FwaWNfaXJxY2hpcChrdm0pOworCWludCBkZXN0X2lkID0gKGUtPm1zaS5hZGRyZXNzX2xvICYgTVNJX0FERFJfREVTVF9JRF9NQVNLKQorCQkJPj4gTVNJX0FERFJfREVTVF9JRF9TSElGVDsKKwlpbnQgdmVjdG9yID0gKGUtPm1zaS5kYXRhICYgTVNJX0RBVEFfVkVDVE9SX01BU0spCisJCQk+PiBNU0lfREFUQV9WRUNUT1JfU0hJRlQ7CisJaW50IGRlc3RfbW9kZSA9IHRlc3RfYml0KE1TSV9BRERSX0RFU1RfTU9ERV9TSElGVCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZlLT5tc2kuYWRkcmVzc19sbyk7CisJaW50IHRyaWdfbW9kZSA9IHRlc3RfYml0KE1TSV9EQVRBX1RSSUdHRVJfU0hJRlQsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmZS0+bXNpLmRhdGEpOworCWludCBkZWxpdmVyeV9tb2RlID0gdGVzdF9iaXQoTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCwKKwkJCQkodW5zaWduZWQgbG9uZyAqKSZlLT5tc2kuZGF0YSk7CisJdTMyIGRlbGl2ZXJfYml0bWFzazsKKworCUJVR19PTighaW9hcGljKTsKKworCWRlbGl2ZXJfYml0bWFzayA9IGt2bV9pb2FwaWNfZ2V0X2RlbGl2ZXJ5X2JpdG1hc2soaW9hcGljLAorCQkJCWRlc3RfaWQsIGRlc3RfbW9kZSk7CisJLyogSU9BUElDIGRlbGl2ZXJ5IG1vZGUgdmFsdWUgaXMgdGhlIHNhbWUgYXMgTVNJIGhlcmUgKi8KKwlzd2l0Y2ggKGRlbGl2ZXJ5X21vZGUpIHsKKwljYXNlIElPQVBJQ19MT1dFU1RfUFJJT1JJVFk6CisJCXZjcHUgPSBrdm1fZ2V0X2xvd2VzdF9wcmlvX3ZjcHUoaW9hcGljLT5rdm0sIHZlY3RvciwKKwkJCQlkZWxpdmVyX2JpdG1hc2spOworCQlpZiAodmNwdSAhPSBOVUxMKQorCQkJciA9IGt2bV9hcGljX3NldF9pcnEodmNwdSwgdmVjdG9yLCB0cmlnX21vZGUpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9JTkZPICJrdm06IG51bGwgbG93ZXN0IHByaW9yaXR5IHZjcHUhXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBJT0FQSUNfRklYRUQ6CisJCWZvciAodmNwdV9pZCA9IDA7IGRlbGl2ZXJfYml0bWFzayAhPSAwOyB2Y3B1X2lkKyspIHsKKwkJCWlmICghKGRlbGl2ZXJfYml0bWFzayAmICgxIDw8IHZjcHVfaWQpKSkKKwkJCQljb250aW51ZTsKKwkJCWRlbGl2ZXJfYml0bWFzayAmPSB+KDEgPDwgdmNwdV9pZCk7CisJCQl2Y3B1ID0gaW9hcGljLT5rdm0tPnZjcHVzW3ZjcHVfaWRdOworCQkJaWYgKHZjcHUpIHsKKwkJCQlpZiAociA8IDApCisJCQkJCXIgPSAwOworCQkJCXIgKz0ga3ZtX2FwaWNfc2V0X2lycSh2Y3B1LCB2ZWN0b3IsIHRyaWdfbW9kZSk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiByOworfQorCisvKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUga3ZtLT5sb2NrIG11dGV4IGhlbGQKKyAqIFJldHVybiB2YWx1ZToKKyAqICA8IDAgICBJbnRlcnJ1cHQgd2FzIGlnbm9yZWQgKG1hc2tlZCBvciBub3QgZGVsaXZlcmVkIGZvciBvdGhlciByZWFzb25zKQorICogID0gMCAgIEludGVycnVwdCB3YXMgY29hbGVzY2VkIChwcmV2aW91cyBpcnEgaXMgc3RpbGwgcGVuZGluZykKKyAqICA+IDAgICBOdW1iZXIgb2YgQ1BVcyBpbnRlcnJ1cHQgd2FzIGRlbGl2ZXJlZCB0bworICovCitpbnQga3ZtX3NldF9pcnEoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxX3NvdXJjZV9pZCwgaW50IGlycSwgaW50IGxldmVsKQoreworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplOworCXVuc2lnbmVkIGxvbmcgKmlycV9zdGF0ZSwgc2lnX2xldmVsOworCWludCByZXQgPSAtMTsKKworCWlmIChpcnEgPCBLVk1fSU9BUElDX05VTV9QSU5TKSB7CisJCWlycV9zdGF0ZSA9ICh1bnNpZ25lZCBsb25nICopJmt2bS0+YXJjaC5pcnFfc3RhdGVzW2lycV07CisKKwkJLyogTG9naWNhbCBPUiBmb3IgbGV2ZWwgdHJpZyBpbnRlcnJ1cHQgKi8KKwkJaWYgKGxldmVsKQorCQkJc2V0X2JpdChpcnFfc291cmNlX2lkLCBpcnFfc3RhdGUpOworCQllbHNlCisJCQljbGVhcl9iaXQoaXJxX3NvdXJjZV9pZCwgaXJxX3N0YXRlKTsKKwkJc2lnX2xldmVsID0gISEoKmlycV9zdGF0ZSk7CisJfSBlbHNlIC8qIERlYWwgd2l0aCBNU0kvTVNJLVggKi8KKwkJc2lnX2xldmVsID0gMTsKIAogCS8qIE5vdCBwb3NzaWJsZSB0byBkZXRlY3QgaWYgdGhlIGd1ZXN0IHVzZXMgdGhlIFBJQyBvciB0aGUKIAkgKiBJT0FQSUMuICBTbyBzZXQgdGhlIGJpdCBpbiBib3RoLiBUaGUgZ3Vlc3Qgd2lsbCBpZ25vcmUKIAkgKiB3cml0ZXMgdG8gdGhlIHVudXNlZCBvbmUuCiAJICovCi0Ja3ZtX2lvYXBpY19zZXRfaXJxKGt2bS0+YXJjaC52aW9hcGljLCBpcnEsICEhKCppcnFfc3RhdGUpKTsKLSNpZmRlZiBDT05GSUdfWDg2Ci0Ja3ZtX3BpY19zZXRfaXJxKHBpY19pcnFjaGlwKGt2bSksIGlycSwgISEoKmlycV9zdGF0ZSkpOwotI2VuZGlmCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAma3ZtLT5pcnFfcm91dGluZywgbGluaykKKwkJaWYgKGUtPmdzaSA9PSBpcnEpIHsKKwkJCWludCByID0gZS0+c2V0KGUsIGt2bSwgc2lnX2xldmVsKTsKKwkJCWlmIChyIDwgMCkKKwkJCQljb250aW51ZTsKKworCQkJcmV0ID0gciArICgocmV0IDwgMCkgPyAwIDogcmV0KTsKKwkJfQorCXJldHVybiByZXQ7CiB9CiAKLXZvaWQga3ZtX25vdGlmeV9hY2tlZF9pcnEoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBnc2kpCit2b2lkIGt2bV9ub3RpZnlfYWNrZWRfaXJxKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaXJxY2hpcCwgdW5zaWduZWQgcGluKQogeworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplOwogCXN0cnVjdCBrdm1faXJxX2Fja19ub3RpZmllciAqa2lhbjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKKwl1bnNpZ25lZCBnc2kgPSBwaW47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZrdm0tPmlycV9yb3V0aW5nLCBsaW5rKQorCQlpZiAoZS0+aXJxY2hpcC5pcnFjaGlwID09IGlycWNoaXAgJiYKKwkJICAgIGUtPmlycWNoaXAucGluID09IHBpbikgeworCQkJZ3NpID0gZS0+Z3NpOworCQkJYnJlYWs7CisJCX0KIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGtpYW4sIG4sICZrdm0tPmFyY2guaXJxX2Fja19ub3RpZmllcl9saXN0LCBsaW5rKQogCQlpZiAoa2lhbi0+Z3NpID09IGdzaSkKQEAgLTk5LDMgKzE5NiwxNzcgQEAKIAkJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsICZrdm0tPmFyY2guaXJxX3N0YXRlc1tpXSk7CiAJY2xlYXJfYml0KGlycV9zb3VyY2VfaWQsICZrdm0tPmFyY2guaXJxX3NvdXJjZXNfYml0bWFwKTsKIH0KKwordm9pZCBrdm1fcmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtLCBpbnQgaXJxLAorCQkJCSAgICBzdHJ1Y3Qga3ZtX2lycV9tYXNrX25vdGlmaWVyICpraW1uKQoreworCWtpbW4tPmlycSA9IGlycTsKKwlobGlzdF9hZGRfaGVhZCgma2ltbi0+bGluaywgJmt2bS0+bWFza19ub3RpZmllcl9saXN0KTsKK30KKwordm9pZCBrdm1fdW5yZWdpc3Rlcl9pcnFfbWFza19ub3RpZmllcihzdHJ1Y3Qga3ZtICprdm0sIGludCBpcnEsCisJCQkJICAgICAgc3RydWN0IGt2bV9pcnFfbWFza19ub3RpZmllciAqa2ltbikKK3sKKwlobGlzdF9kZWwoJmtpbW4tPmxpbmspOworfQorCit2b2lkIGt2bV9maXJlX21hc2tfbm90aWZpZXJzKHN0cnVjdCBrdm0gKmt2bSwgaW50IGlycSwgYm9vbCBtYXNrKQoreworCXN0cnVjdCBrdm1faXJxX21hc2tfbm90aWZpZXIgKmtpbW47CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShraW1uLCBuLCAma3ZtLT5tYXNrX25vdGlmaWVyX2xpc3QsIGxpbmspCisJCWlmIChraW1uLT5pcnEgPT0gaXJxKQorCQkJa2ltbi0+ZnVuYyhraW1uLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgX19rdm1fZnJlZV9pcnFfcm91dGluZyhzdHJ1Y3QgbGlzdF9oZWFkICppcnFfcm91dGluZykKK3sKKwlzdHJ1Y3Qga3ZtX2tlcm5lbF9pcnFfcm91dGluZ19lbnRyeSAqZSwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbiwgaXJxX3JvdXRpbmcsIGxpbmspCisJCWtmcmVlKGUpOworfQorCit2b2lkIGt2bV9mcmVlX2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlfX2t2bV9mcmVlX2lycV9yb3V0aW5nKCZrdm0tPmlycV9yb3V0aW5nKTsKK30KKworc3RhdGljIGludCBzZXR1cF9yb3V0aW5nX2VudHJ5KHN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKnVlKQoreworCWludCByID0gLUVJTlZBTDsKKwlpbnQgZGVsdGE7CisKKwllLT5nc2kgPSB1ZS0+Z3NpOworCXN3aXRjaCAodWUtPnR5cGUpIHsKKwljYXNlIEtWTV9JUlFfUk9VVElOR19JUlFDSElQOgorCQlkZWx0YSA9IDA7CisJCXN3aXRjaCAodWUtPnUuaXJxY2hpcC5pcnFjaGlwKSB7CisJCWNhc2UgS1ZNX0lSUUNISVBfUElDX01BU1RFUjoKKwkJCWUtPnNldCA9IGt2bV9zZXRfcGljX2lycTsKKwkJCWJyZWFrOworCQljYXNlIEtWTV9JUlFDSElQX1BJQ19TTEFWRToKKwkJCWUtPnNldCA9IGt2bV9zZXRfcGljX2lycTsKKwkJCWRlbHRhID0gODsKKwkJCWJyZWFrOworCQljYXNlIEtWTV9JUlFDSElQX0lPQVBJQzoKKwkJCQllLT5zZXQgPSBrdm1fc2V0X2lvYXBpY19pcnE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gb3V0OworCQl9CisJCWUtPmlycWNoaXAuaXJxY2hpcCA9IHVlLT51LmlycWNoaXAuaXJxY2hpcDsKKwkJZS0+aXJxY2hpcC5waW4gPSB1ZS0+dS5pcnFjaGlwLnBpbiArIGRlbHRhOworCQlicmVhazsKKwljYXNlIEtWTV9JUlFfUk9VVElOR19NU0k6CisJCWUtPnNldCA9IGt2bV9zZXRfbXNpOworCQllLT5tc2kuYWRkcmVzc19sbyA9IHVlLT51Lm1zaS5hZGRyZXNzX2xvOworCQllLT5tc2kuYWRkcmVzc19oaSA9IHVlLT51Lm1zaS5hZGRyZXNzX2hpOworCQllLT5tc2kuZGF0YSA9IHVlLT51Lm1zaS5kYXRhOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlnb3RvIG91dDsKKwl9CisJciA9IDA7CitvdXQ6CisJcmV0dXJuIHI7Cit9CisKKworaW50IGt2bV9zZXRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtLAorCQkJY29uc3Qgc3RydWN0IGt2bV9pcnFfcm91dGluZ19lbnRyeSAqdWUsCisJCQl1bnNpZ25lZCBuciwKKwkJCXVuc2lnbmVkIGZsYWdzKQoreworCXN0cnVjdCBsaXN0X2hlYWQgaXJxX2xpc3QgPSBMSVNUX0hFQURfSU5JVChpcnFfbGlzdCk7CisJc3RydWN0IGxpc3RfaGVhZCB0bXAgPSBMSVNUX0hFQURfSU5JVCh0bXApOworCXN0cnVjdCBrdm1fa2VybmVsX2lycV9yb3V0aW5nX2VudHJ5ICplID0gTlVMTDsKKwl1bnNpZ25lZCBpOworCWludCByOworCisJZm9yIChpID0gMDsgaSA8IG5yOyArK2kpIHsKKwkJciA9IC1FSU5WQUw7CisJCWlmICh1ZS0+Z3NpID49IEtWTV9NQVhfSVJRX1JPVVRFUykKKwkJCWdvdG8gb3V0OworCQlpZiAodWUtPmZsYWdzKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRU5PTUVNOworCQllID0ga3phbGxvYyhzaXplb2YoKmUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlKQorCQkJZ290byBvdXQ7CisJCXIgPSBzZXR1cF9yb3V0aW5nX2VudHJ5KGUsIHVlKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwkJKyt1ZTsKKwkJbGlzdF9hZGQoJmUtPmxpbmssICZpcnFfbGlzdCk7CisJCWUgPSBOVUxMOworCX0KKworCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CisJbGlzdF9zcGxpY2UoJmt2bS0+aXJxX3JvdXRpbmcsICZ0bXApOworCUlOSVRfTElTVF9IRUFEKCZrdm0tPmlycV9yb3V0aW5nKTsKKwlsaXN0X3NwbGljZSgmaXJxX2xpc3QsICZrdm0tPmlycV9yb3V0aW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmaXJxX2xpc3QpOworCWxpc3Rfc3BsaWNlKCZ0bXAsICZpcnFfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOworCisJciA9IDA7CisKK291dDoKKwlrZnJlZShlKTsKKwlfX2t2bV9mcmVlX2lycV9yb3V0aW5nKCZpcnFfbGlzdCk7CisJcmV0dXJuIHI7Cit9CisKKyNkZWZpbmUgSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKSBcCisJeyAuZ3NpID0gaXJxLCAudHlwZSA9IEtWTV9JUlFfUk9VVElOR19JUlFDSElQLAlcCisJICAudS5pcnFjaGlwLmlycWNoaXAgPSBLVk1fSVJRQ0hJUF9JT0FQSUMsIC51LmlycWNoaXAucGluID0gKGlycSkgfQorI2RlZmluZSBST1VUSU5HX0VOVFJZMShpcnEpIElPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSkKKworI2lmZGVmIENPTkZJR19YODYKKyMgIGRlZmluZSBQSUNfUk9VVElOR19FTlRSWShpcnEpIFwKKwl7IC5nc2kgPSBpcnEsIC50eXBlID0gS1ZNX0lSUV9ST1VUSU5HX0lSUUNISVAsCVwKKwkgIC51LmlycWNoaXAuaXJxY2hpcCA9IFNFTEVDVF9QSUMoaXJxKSwgLnUuaXJxY2hpcC5waW4gPSAoaXJxKSAlIDggfQorIyAgZGVmaW5lIFJPVVRJTkdfRU5UUlkyKGlycSkgXAorCUlPQVBJQ19ST1VUSU5HX0VOVFJZKGlycSksIFBJQ19ST1VUSU5HX0VOVFJZKGlycSkKKyNlbHNlCisjICBkZWZpbmUgUk9VVElOR19FTlRSWTIoaXJxKSBcCisJSU9BUElDX1JPVVRJTkdfRU5UUlkoaXJxKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2VudHJ5IGRlZmF1bHRfcm91dGluZ1tdID0geworCVJPVVRJTkdfRU5UUlkyKDApLCBST1VUSU5HX0VOVFJZMigxKSwKKwlST1VUSU5HX0VOVFJZMigyKSwgUk9VVElOR19FTlRSWTIoMyksCisJUk9VVElOR19FTlRSWTIoNCksIFJPVVRJTkdfRU5UUlkyKDUpLAorCVJPVVRJTkdfRU5UUlkyKDYpLCBST1VUSU5HX0VOVFJZMig3KSwKKwlST1VUSU5HX0VOVFJZMig4KSwgUk9VVElOR19FTlRSWTIoOSksCisJUk9VVElOR19FTlRSWTIoMTApLCBST1VUSU5HX0VOVFJZMigxMSksCisJUk9VVElOR19FTlRSWTIoMTIpLCBST1VUSU5HX0VOVFJZMigxMyksCisJUk9VVElOR19FTlRSWTIoMTQpLCBST1VUSU5HX0VOVFJZMigxNSksCisJUk9VVElOR19FTlRSWTEoMTYpLCBST1VUSU5HX0VOVFJZMSgxNyksCisJUk9VVElOR19FTlRSWTEoMTgpLCBST1VUSU5HX0VOVFJZMSgxOSksCisJUk9VVElOR19FTlRSWTEoMjApLCBST1VUSU5HX0VOVFJZMSgyMSksCisJUk9VVElOR19FTlRSWTEoMjIpLCBST1VUSU5HX0VOVFJZMSgyMyksCisjaWZkZWYgQ09ORklHX0lBNjQKKwlST1VUSU5HX0VOVFJZMSgyNCksIFJPVVRJTkdfRU5UUlkxKDI1KSwKKwlST1VUSU5HX0VOVFJZMSgyNiksIFJPVVRJTkdfRU5UUlkxKDI3KSwKKwlST1VUSU5HX0VOVFJZMSgyOCksIFJPVVRJTkdfRU5UUlkxKDI5KSwKKwlST1VUSU5HX0VOVFJZMSgzMCksIFJPVVRJTkdfRU5UUlkxKDMxKSwKKwlST1VUSU5HX0VOVFJZMSgzMiksIFJPVVRJTkdfRU5UUlkxKDMzKSwKKwlST1VUSU5HX0VOVFJZMSgzNCksIFJPVVRJTkdfRU5UUlkxKDM1KSwKKwlST1VUSU5HX0VOVFJZMSgzNiksIFJPVVRJTkdfRU5UUlkxKDM3KSwKKwlST1VUSU5HX0VOVFJZMSgzOCksIFJPVVRJTkdfRU5UUlkxKDM5KSwKKwlST1VUSU5HX0VOVFJZMSg0MCksIFJPVVRJTkdfRU5UUlkxKDQxKSwKKwlST1VUSU5HX0VOVFJZMSg0MiksIFJPVVRJTkdfRU5UUlkxKDQzKSwKKwlST1VUSU5HX0VOVFJZMSg0NCksIFJPVVRJTkdfRU5UUlkxKDQ1KSwKKwlST1VUSU5HX0VOVFJZMSg0NiksIFJPVVRJTkdfRU5UUlkxKDQ3KSwKKyNlbmRpZgorfTsKKworaW50IGt2bV9zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlyZXR1cm4ga3ZtX3NldF9pcnFfcm91dGluZyhrdm0sIGRlZmF1bHRfcm91dGluZywKKwkJCQkgICBBUlJBWV9TSVpFKGRlZmF1bHRfcm91dGluZyksIDApOworfQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKaW5kZXggMjlhNjY3Yy4uNjA1Njk3ZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtX21haW4uYworKysgYi92aXJ0L2t2bS9rdm1fbWFpbi5jCkBAIC00NywxMCArNDcsNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAotI2lmZGVmIENPTkZJR19YODYKLSNpbmNsdWRlIDxhc20vbXNpZGVmLmg+Ci0jZW5kaWYKLQogI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVAogI2luY2x1ZGUgImNvYWxlc2NlZF9tbWlvLmgiCiAjZW5kaWYKQEAgLTg1LDU3ICs4MSw2IEBACiBzdGF0aWMgYm9vbCBrdm1fcmVib290aW5nOwogCiAjaWZkZWYgS1ZNX0NBUF9ERVZJQ0VfQVNTSUdOTUVOVAotCi0jaWZkZWYgQ09ORklHX1g4Ngotc3RhdGljIHZvaWQgYXNzaWduZWRfZGV2aWNlX21zaV9kaXNwYXRjaChzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmRldikKLXsKLQlpbnQgdmNwdV9pZDsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0Jc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGlvYXBpY19pcnFjaGlwKGRldi0+a3ZtKTsKLQlpbnQgZGVzdF9pZCA9IChkZXYtPmd1ZXN0X21zaS5hZGRyZXNzX2xvICYgTVNJX0FERFJfREVTVF9JRF9NQVNLKQotCQkJPj4gTVNJX0FERFJfREVTVF9JRF9TSElGVDsKLQlpbnQgdmVjdG9yID0gKGRldi0+Z3Vlc3RfbXNpLmRhdGEgJiBNU0lfREFUQV9WRUNUT1JfTUFTSykKLQkJCT4+IE1TSV9EQVRBX1ZFQ1RPUl9TSElGVDsKLQlpbnQgZGVzdF9tb2RlID0gdGVzdF9iaXQoTVNJX0FERFJfREVTVF9NT0RFX1NISUZULAotCQkJCSh1bnNpZ25lZCBsb25nICopJmRldi0+Z3Vlc3RfbXNpLmFkZHJlc3NfbG8pOwotCWludCB0cmlnX21vZGUgPSB0ZXN0X2JpdChNU0lfREFUQV9UUklHR0VSX1NISUZULAotCQkJCSh1bnNpZ25lZCBsb25nICopJmRldi0+Z3Vlc3RfbXNpLmRhdGEpOwotCWludCBkZWxpdmVyeV9tb2RlID0gdGVzdF9iaXQoTVNJX0RBVEFfREVMSVZFUllfTU9ERV9TSElGVCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZXYtPmd1ZXN0X21zaS5kYXRhKTsKLQl1MzIgZGVsaXZlcl9iaXRtYXNrOwotCi0JQlVHX09OKCFpb2FwaWMpOwotCi0JZGVsaXZlcl9iaXRtYXNrID0ga3ZtX2lvYXBpY19nZXRfZGVsaXZlcnlfYml0bWFzayhpb2FwaWMsCi0JCQkJZGVzdF9pZCwgZGVzdF9tb2RlKTsKLQkvKiBJT0FQSUMgZGVsaXZlcnkgbW9kZSB2YWx1ZSBpcyB0aGUgc2FtZSBhcyBNU0kgaGVyZSAqLwotCXN3aXRjaCAoZGVsaXZlcnlfbW9kZSkgewotCWNhc2UgSU9BUElDX0xPV0VTVF9QUklPUklUWToKLQkJdmNwdSA9IGt2bV9nZXRfbG93ZXN0X3ByaW9fdmNwdShpb2FwaWMtPmt2bSwgdmVjdG9yLAotCQkJCWRlbGl2ZXJfYml0bWFzayk7Ci0JCWlmICh2Y3B1ICE9IE5VTEwpCi0JCQlrdm1fYXBpY19zZXRfaXJxKHZjcHUsIHZlY3RvciwgdHJpZ19tb2RlKTsKLQkJZWxzZQotCQkJcHJpbnRrKEtFUk5fSU5GTyAia3ZtOiBudWxsIGxvd2VzdCBwcmlvcml0eSB2Y3B1IVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgSU9BUElDX0ZJWEVEOgotCQlmb3IgKHZjcHVfaWQgPSAwOyBkZWxpdmVyX2JpdG1hc2sgIT0gMDsgdmNwdV9pZCsrKSB7Ci0JCQlpZiAoIShkZWxpdmVyX2JpdG1hc2sgJiAoMSA8PCB2Y3B1X2lkKSkpCi0JCQkJY29udGludWU7Ci0JCQlkZWxpdmVyX2JpdG1hc2sgJj0gfigxIDw8IHZjcHVfaWQpOwotCQkJdmNwdSA9IGlvYXBpYy0+a3ZtLT52Y3B1c1t2Y3B1X2lkXTsKLQkJCWlmICh2Y3B1KQotCQkJCWt2bV9hcGljX3NldF9pcnEodmNwdSwgdmVjdG9yLCB0cmlnX21vZGUpOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0lORk8gImt2bTogdW5zdXBwb3J0ZWQgTVNJIGRlbGl2ZXJ5IG1vZGVcbiIpOwotCX0KLX0KLSNlbHNlCi1zdGF0aWMgdm9pZCBhc3NpZ25lZF9kZXZpY2VfbXNpX2Rpc3BhdGNoKHN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqZGV2KSB7fQotI2VuZGlmCi0KIHN0YXRpYyBzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKmt2bV9maW5kX2Fzc2lnbmVkX2RldihzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAogCQkJCQkJICAgICAgaW50IGFzc2lnbmVkX2Rldl9pZCkKIHsKQEAgLTE2MiwxMyArMTA3LDEwIEBACiAJICogZmluZXItZ3JhaW5lZCBsb2NrLCB1cGRhdGUgdGhpcwogCSAqLwogCW11dGV4X2xvY2soJmFzc2lnbmVkX2Rldi0+a3ZtLT5sb2NrKTsKLQlpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFgpCi0JCWt2bV9zZXRfaXJxKGFzc2lnbmVkX2Rldi0+a3ZtLAotCQkJICAgIGFzc2lnbmVkX2Rldi0+aXJxX3NvdXJjZV9pZCwKLQkJCSAgICBhc3NpZ25lZF9kZXYtPmd1ZXN0X2lycSwgMSk7Ci0JZWxzZSBpZiAoYXNzaWduZWRfZGV2LT5pcnFfcmVxdWVzdGVkX3R5cGUgJgotCQkJCUtWTV9BU1NJR05FRF9ERVZfR1VFU1RfTVNJKSB7Ci0JCWFzc2lnbmVkX2RldmljZV9tc2lfZGlzcGF0Y2goYXNzaWduZWRfZGV2KTsKKwlrdm1fc2V0X2lycShhc3NpZ25lZF9kZXYtPmt2bSwgYXNzaWduZWRfZGV2LT5pcnFfc291cmNlX2lkLAorCQkgICAgYXNzaWduZWRfZGV2LT5ndWVzdF9pcnEsIDEpOworCisJaWYgKGFzc2lnbmVkX2Rldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0kpIHsKIAkJZW5hYmxlX2lycShhc3NpZ25lZF9kZXYtPmhvc3RfaXJxKTsKIAkJYXNzaWduZWRfZGV2LT5ob3N0X2lycV9kaXNhYmxlZCA9IGZhbHNlOwogCX0KQEAgLTMzMSwxOCArMjczLDI0IEBACiB7CiAJaW50IHI7CiAKKwlhZGV2LT5ndWVzdF9pcnEgPSBhaXJxLT5ndWVzdF9pcnE7CiAJaWYgKGFpcnEtPmZsYWdzICYgS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0kpIHsKIAkJLyogeDg2IGRvbid0IGNhcmUgdXBwZXIgYWRkcmVzcyBvZiBndWVzdCBtc2kgbWVzc2FnZSBhZGRyICovCiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSB8PSBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSTsKIAkJYWRldi0+aXJxX3JlcXVlc3RlZF90eXBlICY9IH5LVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFg7Ci0JCWFkZXYtPmd1ZXN0X21zaS5hZGRyZXNzX2xvID0gYWlycS0+Z3Vlc3RfbXNpLmFkZHJfbG87Ci0JCWFkZXYtPmd1ZXN0X21zaS5kYXRhID0gYWlycS0+Z3Vlc3RfbXNpLmRhdGE7CiAJCWFkZXYtPmFja19ub3RpZmllci5nc2kgPSAtMTsKIAl9IGVsc2UgaWYgKG1zaTJpbnR4KSB7CiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSB8PSBLVk1fQVNTSUdORURfREVWX0dVRVNUX0lOVFg7CiAJCWFkZXYtPmlycV9yZXF1ZXN0ZWRfdHlwZSAmPSB+S1ZNX0FTU0lHTkVEX0RFVl9HVUVTVF9NU0k7Ci0JCWFkZXYtPmd1ZXN0X2lycSA9IGFpcnEtPmd1ZXN0X2lycTsKIAkJYWRldi0+YWNrX25vdGlmaWVyLmdzaSA9IGFpcnEtPmd1ZXN0X2lycTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBHdWVzdCByZXF1aXJlIHRvIGRpc2FibGUgZGV2aWNlIE1TSSwgd2UgZGlzYWJsZSBNU0kgYW5kCisJCSAqIHJlLWVuYWJsZSBJTlR4IGJ5IGRlZmF1bHQgYWdhaW4uIE5vdGljZSBpdCdzIG9ubHkgZm9yCisJCSAqIG5vbi1tc2kyaW50eC4KKwkJICovCisJCWFzc2lnbmVkX2RldmljZV91cGRhdGVfaW50eChrdm0sIGFkZXYsIGFpcnEpOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoYWRldi0+aXJxX3JlcXVlc3RlZF90eXBlICYgS1ZNX0FTU0lHTkVEX0RFVl9IT1NUX01TSSkKQEAgLTM3OSw2ICszMjcsNyBAQAogewogCWludCByID0gMDsKIAlzdHJ1Y3Qga3ZtX2Fzc2lnbmVkX2Rldl9rZXJuZWwgKm1hdGNoOworCXUzMiBjdXJyZW50X2ZsYWdzID0gMCwgY2hhbmdlZF9mbGFnczsKIAogCW11dGV4X2xvY2soJmt2bS0+bG9jayk7CiAKQEAgLTQxNiw4ICszNjUsMTMgQEAKIAkJfQogCX0KIAotCWlmICgoIW1zaTJpbnR4ICYmCi0JICAgICAoYXNzaWduZWRfaXJxLT5mbGFncyAmIEtWTV9ERVZfSVJRX0FTU0lHTl9FTkFCTEVfTVNJKSkgfHwKKwlpZiAoKG1hdGNoLT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0hPU1RfTVNJKSAmJgorCQkgKG1hdGNoLT5pcnFfcmVxdWVzdGVkX3R5cGUgJiBLVk1fQVNTSUdORURfREVWX0dVRVNUX01TSSkpCisJCWN1cnJlbnRfZmxhZ3MgfD0gS1ZNX0RFVl9JUlFfQVNTSUdOX0VOQUJMRV9NU0k7CisKKwljaGFuZ2VkX2ZsYWdzID0gYXNzaWduZWRfaXJxLT5mbGFncyBeIGN1cnJlbnRfZmxhZ3M7CisKKwlpZiAoKGNoYW5nZWRfZmxhZ3MgJiBLVk1fREVWX0lSUV9BU1NJR05fTVNJX0FDVElPTikgfHwKIAkgICAgKG1zaTJpbnR4ICYmIG1hdGNoLT5kZXYtPm1zaV9lbmFibGVkKSkgewogI2lmZGVmIENPTkZJR19YODYKIAkJciA9IGFzc2lnbmVkX2RldmljZV91cGRhdGVfbXNpKGt2bSwgbWF0Y2gsIGFzc2lnbmVkX2lycSk7CkBAIC01NjMsNyArNTE3LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGFzc2lnbmVkX2Rldi0+ZmxhZ3MgJiBLVk1fREVWX0FTU0lHTl9FTkFCTEVfSU9NTVUpCisJaWYgKG1hdGNoLT5mbGFncyAmIEtWTV9ERVZfQVNTSUdOX0VOQUJMRV9JT01NVSkKIAkJa3ZtX2RlYXNzaWduX2RldmljZShrdm0sIG1hdGNoKTsKIAogCWt2bV9mcmVlX2Fzc2lnbmVkX2RldmljZShrdm0sIG1hdGNoKTsKQEAgLTU4MSw4ICs1MzUsMTAgQEAKIAogaW5saW5lIGludCBrdm1faXNfbW1pb19wZm4ocGZuX3QgcGZuKQogewotCWlmIChwZm5fdmFsaWQocGZuKSkKLQkJcmV0dXJuIFBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShwZm4pKTsKKwlpZiAocGZuX3ZhbGlkKHBmbikpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBjb21wb3VuZF9oZWFkKHBmbl90b19wYWdlKHBmbikpOworCQlyZXR1cm4gUGFnZVJlc2VydmVkKHBhZ2UpOworCX0KIAogCXJldHVybiB0cnVlOwogfQpAQCAtODI4LDYgKzc4NCwxMCBAQAogCiAJaWYgKElTX0VSUihrdm0pKQogCQlnb3RvIG91dDsKKyNpZmRlZiBDT05GSUdfSEFWRV9LVk1fSVJRQ0hJUAorCUlOSVRfTElTVF9IRUFEKCZrdm0tPmlycV9yb3V0aW5nKTsKKwlJTklUX0hMSVNUX0hFQUQoJmt2bS0+bWFza19ub3RpZmllcl9saXN0KTsKKyNlbmRpZgogCiAjaWZkZWYgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUCiAJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwpAQCAtOTA5LDYgKzg2OSw3IEBACiAJc3Bpbl9sb2NrKCZrdm1fbG9jayk7CiAJbGlzdF9kZWwoJmt2bS0+dm1fbGlzdCk7CiAJc3Bpbl91bmxvY2soJmt2bV9sb2NrKTsKKwlrdm1fZnJlZV9pcnFfcm91dGluZyhrdm0pOwogCWt2bV9pb19idXNfZGVzdHJveSgma3ZtLT5waW9fYnVzKTsKIAlrdm1faW9fYnVzX2Rlc3Ryb3koJmt2bS0+bW1pb19idXMpOwogI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVApAQCAtMTc1NSwxMyArMTcxNiwxMyBAQAogCQlyID0gMDsKIAkJYnJlYWs7CiAJfQotCWNhc2UgS1ZNX0RFQlVHX0dVRVNUOiB7Ci0JCXN0cnVjdCBrdm1fZGVidWdfZ3Vlc3QgZGJnOworCWNhc2UgS1ZNX1NFVF9HVUVTVF9ERUJVRzogeworCQlzdHJ1Y3Qga3ZtX2d1ZXN0X2RlYnVnIGRiZzsKIAogCQlyID0gLUVGQVVMVDsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZkYmcsIGFyZ3AsIHNpemVvZiBkYmcpKQogCQkJZ290byBvdXQ7Ci0JCXIgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2RlYnVnX2d1ZXN0KHZjcHUsICZkYmcpOworCQlyID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfZ3Vlc3RfZGVidWcodmNwdSwgJmRiZyk7CiAJCWlmIChyKQogCQkJZ290byBvdXQ7CiAJCXIgPSAwOwpAQCAtMTkyOSw2ICsxODkwLDM2IEBACiAJCWJyZWFrOwogCX0KICNlbmRpZgorI2lmZGVmIEtWTV9DQVBfSVJRX1JPVVRJTkcKKwljYXNlIEtWTV9TRVRfR1NJX1JPVVRJTkc6IHsKKwkJc3RydWN0IGt2bV9pcnFfcm91dGluZyByb3V0aW5nOworCQlzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nIF9fdXNlciAqdXJvdXRpbmc7CisJCXN0cnVjdCBrdm1faXJxX3JvdXRpbmdfZW50cnkgKmVudHJpZXM7CisKKwkJciA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcm91dGluZywgYXJncCwgc2l6ZW9mKHJvdXRpbmcpKSkKKwkJCWdvdG8gb3V0OworCQlyID0gLUVJTlZBTDsKKwkJaWYgKHJvdXRpbmcubnIgPj0gS1ZNX01BWF9JUlFfUk9VVEVTKQorCQkJZ290byBvdXQ7CisJCWlmIChyb3V0aW5nLmZsYWdzKQorCQkJZ290byBvdXQ7CisJCXIgPSAtRU5PTUVNOworCQllbnRyaWVzID0gdm1hbGxvYyhyb3V0aW5nLm5yICogc2l6ZW9mKCplbnRyaWVzKSk7CisJCWlmICghZW50cmllcykKKwkJCWdvdG8gb3V0OworCQlyID0gLUVGQVVMVDsKKwkJdXJvdXRpbmcgPSBhcmdwOworCQlpZiAoY29weV9mcm9tX3VzZXIoZW50cmllcywgdXJvdXRpbmctPmVudHJpZXMsCisJCQkJICAgcm91dGluZy5uciAqIHNpemVvZigqZW50cmllcykpKQorCQkJZ290byBvdXRfZnJlZV9pcnFfcm91dGluZzsKKwkJciA9IGt2bV9zZXRfaXJxX3JvdXRpbmcoa3ZtLCBlbnRyaWVzLCByb3V0aW5nLm5yLAorCQkJCQlyb3V0aW5nLmZsYWdzKTsKKwlvdXRfZnJlZV9pcnFfcm91dGluZzoKKwkJdmZyZWUoZW50cmllcyk7CisJCWJyZWFrOworCX0KKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXIgPSBrdm1fYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTsKIAl9CkBAIC0xOTk1LDYgKzE5ODYsMTAgQEAKIAljYXNlIEtWTV9DQVBfVVNFUl9NRU1PUlk6CiAJY2FzZSBLVk1fQ0FQX0RFU1RST1lfTUVNT1JZX1JFR0lPTl9XT1JLUzoKIAkJcmV0dXJuIDE7CisjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKKwljYXNlIEtWTV9DQVBfSVJRX1JPVVRJTkc6CisJCXJldHVybiBLVk1fTUFYX0lSUV9ST1VURVM7CisjZW5kaWYKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Cg==